From 116a1de56b94f9924bffc35b0797408aeae9cb1b Mon Sep 17 00:00:00 2001 From: YXZhu Date: Wed, 30 Jul 2025 12:36:16 +0800 Subject: [PATCH] add 3.7 inch Epaper BW, remove some examples --- .../inc/apm32f10x_adc.h | 346 - .../inc/apm32f10x_bakpr.h | 149 - .../inc/apm32f10x_can.h | 349 - .../inc/apm32f10x_crc.h | 66 - .../inc/apm32f10x_dac.h | 195 - .../inc/apm32f10x_dbgmcu.h | 97 - .../inc/apm32f10x_dma.h | 304 - .../inc/apm32f10x_dmc.h | 379 - .../inc/apm32f10x_eint.h | 135 - .../inc/apm32f10x_emmc.h | 369 - .../inc/apm32f10x_fmc.h | 265 - .../inc/apm32f10x_gpio.h | 261 - .../inc/apm32f10x_i2c.h | 348 - .../inc/apm32f10x_iwdt.h | 122 - .../inc/apm32f10x_misc.h | 118 - .../inc/apm32f10x_pmu.h | 123 - .../inc/apm32f10x_qspi.h | 351 - .../inc/apm32f10x_rcm.h | 379 - .../inc/apm32f10x_rtc.h | 99 - .../inc/apm32f10x_sci2c.h | 325 - .../inc/apm32f10x_sdio.h | 432 - .../inc/apm32f10x_spi.h | 333 - .../inc/apm32f10x_tmr.h | 673 - .../inc/apm32f10x_usart.h | 310 - .../inc/apm32f10x_wwdt.h | 92 - .../src/apm32f10x_adc.c | 1064 - .../src/apm32f10x_bakpr.c | 248 - .../src/apm32f10x_can.c | 1094 - .../src/apm32f10x_crc.c | 124 - .../src/apm32f10x_dac.c | 411 - .../src/apm32f10x_dbgmcu.c | 146 - .../src/apm32f10x_dma.c | 560 - .../src/apm32f10x_dmc.c | 464 - .../src/apm32f10x_eint.c | 205 - .../src/apm32f10x_emmc.c | 747 - .../src/apm32f10x_fmc.c | 768 - .../src/apm32f10x_gpio.c | 545 - .../src/apm32f10x_i2c.c | 1024 - .../src/apm32f10x_iwdt.c | 148 - .../src/apm32f10x_misc.c | 220 - .../src/apm32f10x_pmu.c | 268 - .../src/apm32f10x_qspi.c | 609 - .../src/apm32f10x_rcm.c | 1077 - .../src/apm32f10x_rtc.c | 263 - .../src/apm32f10x_sci2c.c | 910 - .../src/apm32f10x_sdio.c | 730 - .../src/apm32f10x_spi.c | 618 - .../src/apm32f10x_tmr.c | 2137 - .../src/apm32f10x_usart.c | 831 - .../src/apm32f10x_wwdt.c | 159 - .../APM32F103/CMSIS/Include/LICENSE.txt | 176 - .../APM32F103/CMSIS/Include/cmsis_armcc.h | 894 - .../APM32F103/CMSIS/Include/cmsis_armclang.h | 1444 - .../CMSIS/Include/cmsis_armclang_ltm.h | 1891 - .../APM32F103/CMSIS/Include/cmsis_compiler.h | 283 - .../APM32F103/CMSIS/Include/cmsis_gcc.h | 2085 - .../APM32F103/CMSIS/Include/cmsis_iccarm.h | 935 - .../APM32F103/CMSIS/Include/cmsis_version.h | 39 - .../APM32F103/CMSIS/Include/core_cm3.h | 1937 - .../Geehy/APM32F10x/Include/apm32f10x.h | 6229 -- .../APM32F10x/Include/system_apm32f10x.h | 43 - .../Source/arm/startup_apm32f10x_hd.s | 368 - .../Source/arm/startup_apm32f10x_md.s | 315 - .../Source/gcc/startup_apm32f10x_hd.s | 281 - .../Source/gcc/startup_apm32f10x_md.s | 246 - .../Source/iar/startup_apm32f10x_hd.s | 504 - .../Source/iar/startup_apm32f10x_md.s | 404 - .../Geehy/APM32F10x/Source/system_apm32f10x.c | 566 - .../Class/CDC/inc/usbd_class_cdc.h | 33 - .../Class/CDC/src/usbd_class_cdc.c | 71 - .../Class/HID/inc/usbd_class_hid.h | 37 - .../Class/HID/src/usbd_class_hid.c | 63 - .../Class/MSC/inc/usbd_class_msc.h | 37 - .../Core_Device/Class/MSC/inc/usbd_msc_bot.h | 106 - .../Core_Device/Class/MSC/inc/usbd_msc_scsi.h | 131 - .../Class/MSC/src/usbd_class_msc.c | 79 - .../Core_Device/Class/MSC/src/usbd_msc_bot.c | 242 - .../Core_Device/Class/MSC/src/usbd_msc_scsi.c | 701 - .../Core_Device/Standard/inc/usbd_core.h | 312 - .../Core_Device/Standard/inc/usbd_init.h | 64 - .../Core_Device/Standard/inc/usbd_interrupt.h | 31 - .../Core_Device/Standard/inc/usbd_stdReq.h | 31 - .../Core_Device/Standard/src/usbd_core.c | 405 - .../Core_Device/Standard/src/usbd_init.c | 237 - .../Core_Device/Standard/src/usbd_interrupt.c | 349 - .../Core_Device/Standard/src/usbd_stdReq.c | 369 - .../Driver/inc/drv_usb_device.h | 942 - .../Driver/src/drv_usb_device.c | 403 - .../EpaperModuleTest_APM32F103/Epaper/bmp.h | 638 - .../Epaper/epaper.c | 923 - .../Epaper/epdfont.h | 429 - .../Inc/apm32f10x_int.h | 65 - .../EpaperModuleTest_APM32F103/Inc/board.h | 28 - Example/EpaperModuleTest_APM32F103/Inc/main.h | 41 - .../EpaperModuleTest_APM32F103/Inc/systick.h | 38 - .../Target_1_APM32F103CB_1.0.0.dbgconf | 56 - .../MDK-ARM/EpaperModuleTest_APM32F103.uvoptx | 721 - .../EpaperModuleTest_APM32F103.uvprojx | 812 - .../MDK-ARM/EventRecorderStub.scvd | 9 - .../MDK-ARM/JLinkSettings.ini | 40 - .../MDK-ARM/Objects/EpaperModule.axf | Bin 129552 -> 0 bytes .../MDK-ARM/Objects/EpaperModule.hex | 806 - .../MDK-ARM/Objects/template.axf | Bin 78752 -> 0 bytes .../MDK-ARM/Objects/template.hex | 137 - .../Src/apm32f10x_int.c | 169 - .../EpaperModuleTest_APM32F103/Src/board.c | 91 - Example/EpaperModuleTest_APM32F103/Src/main.c | 210 - .../EpaperModuleTest_APM32F103/Src/systick.c | 121 - .../cm4/core_support/arm_common_tables.h | 517 - .../cm4/core_support/arm_const_structs.h | 76 - .../cmsis/cm4/core_support/arm_helium_utils.h | 348 - .../cmsis/cm4/core_support/arm_math.h | 8970 -- .../cmsis/cm4/core_support/arm_mve_tables.h | 235 - .../cmsis/cm4/core_support/arm_vec_math.h | 372 - .../cmsis/cm4/core_support/cmsis_armcc.h | 885 - .../cmsis/cm4/core_support/cmsis_armclang.h | 1467 - .../cm4/core_support/cmsis_armclang_ltm.h | 1893 - .../cmsis/cm4/core_support/cmsis_compiler.h | 283 - .../cmsis/cm4/core_support/cmsis_gcc.h | 2177 - .../cmsis/cm4/core_support/cmsis_iccarm.h | 968 - .../cmsis/cm4/core_support/cmsis_version.h | 39 - .../cmsis/cm4/core_support/core_cm4.h | 2129 - .../cmsis/cm4/core_support/mpu_armv7.h | 275 - .../cmsis/cm4/core_support/mpu_armv8.h | 352 - .../cmsis/cm4/core_support/pmu_armv8.h | 337 - .../cmsis/cm4/device_support/at32f403a_407.h | 576 - .../at32f403a_407_conf_template.h | 163 - .../startup/gcc/linker/AT32F403AxC_FLASH.ld | 154 - .../startup/gcc/linker/AT32F403AxE_FLASH.ld | 154 - .../startup/gcc/linker/AT32F403AxG_FLASH.ld | 154 - .../startup/gcc/linker/AT32F407xC_FLASH.ld | 154 - .../startup/gcc/linker/AT32F407xE_FLASH.ld | 154 - .../startup/gcc/linker/AT32F407xG_FLASH.ld | 154 - .../startup/gcc/startup_at32f403a_407.s | 480 - .../startup/iar/linker/AT32F403AxC.icf | 30 - .../startup/iar/linker/AT32F403AxE.icf | 30 - .../startup/iar/linker/AT32F403AxG.icf | 30 - .../startup/iar/linker/AT32F407xC.icf | 30 - .../startup/iar/linker/AT32F407xE.icf | 30 - .../startup/iar/linker/AT32F407xG.icf | 30 - .../startup/iar/startup_at32f403a_407.s | 573 - .../startup/mdk/startup_at32f403a_407.s | 391 - .../cm4/device_support/system_at32f403a_407.c | 193 - .../cm4/device_support/system_at32f403a_407.h | 86 - .../cmsis/dsp/ComputeLibrary/Include/NEMath.h | 414 - .../cmsis/dsp/ComputeLibrary/LICENSE.txt | 21 - .../cmsis/dsp/ComputeLibrary/README.md | 19 - .../dsp/ComputeLibrary/Source/arm_cl_tables.c | 55 - .../cmsis/dsp/PrivateInclude/arm_sorting.h | 200 - .../cmsis/dsp/PrivateInclude/arm_vec_fft.h | 58 - .../dsp/PrivateInclude/arm_vec_filtering.h | 1661 - .../BasicMathFunctions/BasicMathFunctions.c | 75 - .../Source/BasicMathFunctions/CMakeLists.txt | 19 - .../Source/BasicMathFunctions/arm_abs_f32.c | 196 - .../Source/BasicMathFunctions/arm_abs_q15.c | 178 - .../Source/BasicMathFunctions/arm_abs_q31.c | 208 - .../Source/BasicMathFunctions/arm_abs_q7.c | 180 - .../Source/BasicMathFunctions/arm_add_f32.c | 199 - .../Source/BasicMathFunctions/arm_add_q15.c | 176 - .../Source/BasicMathFunctions/arm_add_q31.c | 159 - .../Source/BasicMathFunctions/arm_add_q7.c | 158 - .../Source/BasicMathFunctions/arm_and_u16.c | 137 - .../Source/BasicMathFunctions/arm_and_u32.c | 129 - .../Source/BasicMathFunctions/arm_and_u8.c | 130 - .../BasicMathFunctions/arm_dot_prod_f32.c | 226 - .../BasicMathFunctions/arm_dot_prod_q15.c | 172 - .../BasicMathFunctions/arm_dot_prod_q31.c | 174 - .../BasicMathFunctions/arm_dot_prod_q7.c | 191 - .../Source/BasicMathFunctions/arm_mult_f32.c | 200 - .../Source/BasicMathFunctions/arm_mult_q15.c | 192 - .../Source/BasicMathFunctions/arm_mult_q31.c | 168 - .../Source/BasicMathFunctions/arm_mult_q7.c | 168 - .../BasicMathFunctions/arm_negate_f32.c | 192 - .../BasicMathFunctions/arm_negate_q15.c | 171 - .../BasicMathFunctions/arm_negate_q31.c | 178 - .../Source/BasicMathFunctions/arm_negate_q7.c | 171 - .../Source/BasicMathFunctions/arm_not_u16.c | 130 - .../Source/BasicMathFunctions/arm_not_u32.c | 122 - .../Source/BasicMathFunctions/arm_not_u8.c | 122 - .../BasicMathFunctions/arm_offset_f32.c | 196 - .../BasicMathFunctions/arm_offset_q15.c | 168 - .../BasicMathFunctions/arm_offset_q31.c | 175 - .../Source/BasicMathFunctions/arm_offset_q7.c | 162 - .../Source/BasicMathFunctions/arm_or_u16.c | 137 - .../Source/BasicMathFunctions/arm_or_u32.c | 128 - .../dsp/Source/BasicMathFunctions/arm_or_u8.c | 128 - .../Source/BasicMathFunctions/arm_scale_f32.c | 216 - .../Source/BasicMathFunctions/arm_scale_q15.c | 201 - .../Source/BasicMathFunctions/arm_scale_q31.c | 244 - .../Source/BasicMathFunctions/arm_scale_q7.c | 186 - .../Source/BasicMathFunctions/arm_shift_q15.c | 251 - .../Source/BasicMathFunctions/arm_shift_q31.c | 232 - .../Source/BasicMathFunctions/arm_shift_q7.c | 225 - .../Source/BasicMathFunctions/arm_sub_f32.c | 202 - .../Source/BasicMathFunctions/arm_sub_q15.c | 178 - .../Source/BasicMathFunctions/arm_sub_q31.c | 159 - .../Source/BasicMathFunctions/arm_sub_q7.c | 158 - .../Source/BasicMathFunctions/arm_xor_u16.c | 137 - .../Source/BasicMathFunctions/arm_xor_u32.c | 129 - .../Source/BasicMathFunctions/arm_xor_u8.c | 129 - .../Source/BayesFunctions/BayesFunctions.c | 29 - .../dsp/Source/BayesFunctions/CMakeLists.txt | 19 - .../arm_gaussian_naive_bayes_predict_f32.c | 397 - .../AT32F403A/cmsis/dsp/Source/CMakeLists.txt | 280 - .../dsp/Source/CommonTables/CMakeLists.txt | 41 - .../dsp/Source/CommonTables/CommonTables.c | 31 - .../Source/CommonTables/arm_common_tables.c | 70552 -------------- .../Source/CommonTables/arm_const_structs.c | 663 - .../dsp/Source/CommonTables/arm_mve_tables.c | 6542 -- .../ComplexMathFunctions/CMakeLists.txt | 53 - .../ComplexMathFunctions.c | 46 - .../ComplexMathFunctions/arm_cmplx_conj_f32.c | 213 - .../ComplexMathFunctions/arm_cmplx_conj_q15.c | 207 - .../ComplexMathFunctions/arm_cmplx_conj_q31.c | 193 - .../arm_cmplx_dot_prod_f32.c | 302 - .../arm_cmplx_dot_prod_q15.c | 234 - .../arm_cmplx_dot_prod_q31.c | 220 - .../ComplexMathFunctions/arm_cmplx_mag_f32.c | 273 - .../ComplexMathFunctions/arm_cmplx_mag_q15.c | 221 - .../ComplexMathFunctions/arm_cmplx_mag_q31.c | 201 - .../arm_cmplx_mag_squared_f32.c | 235 - .../arm_cmplx_mag_squared_q15.c | 221 - .../arm_cmplx_mag_squared_q31.c | 187 - .../arm_cmplx_mult_cmplx_f32.c | 255 - .../arm_cmplx_mult_cmplx_q15.c | 196 - .../arm_cmplx_mult_cmplx_q31.c | 194 - .../arm_cmplx_mult_real_f32.c | 224 - .../arm_cmplx_mult_real_q15.c | 238 - .../arm_cmplx_mult_real_q31.c | 204 - .../Source/ControllerFunctions/CMakeLists.txt | 41 - .../ControllerFunctions/ControllerFunctions.c | 37 - .../ControllerFunctions/arm_pid_init_f32.c | 75 - .../ControllerFunctions/arm_pid_init_q15.c | 95 - .../ControllerFunctions/arm_pid_init_q31.c | 92 - .../ControllerFunctions/arm_pid_reset_f32.c | 54 - .../ControllerFunctions/arm_pid_reset_q15.c | 54 - .../ControllerFunctions/arm_pid_reset_q31.c | 54 - .../ControllerFunctions/arm_sin_cos_f32.c | 146 - .../ControllerFunctions/arm_sin_cos_q31.c | 110 - .../Source/DistanceFunctions/CMakeLists.txt | 20 - .../DistanceFunctions/DistanceFunctions.c | 47 - .../DistanceFunctions/arm_boolean_distance.c | 78 - .../arm_boolean_distance_template.h | 550 - .../arm_braycurtis_distance_f32.c | 199 - .../arm_canberra_distance_f32.c | 220 - .../arm_chebyshev_distance_f32.c | 211 - .../arm_cityblock_distance_f32.c | 155 - .../arm_correlation_distance_f32.c | 82 - .../arm_cosine_distance_f32.c | 68 - .../DistanceFunctions/arm_dice_distance.c | 90 - .../arm_euclidean_distance_f32.c | 150 - .../DistanceFunctions/arm_hamming_distance.c | 68 - .../DistanceFunctions/arm_jaccard_distance.c | 70 - .../arm_jensenshannon_distance_f32.c | 244 - .../arm_kulsinski_distance.c | 71 - .../arm_minkowski_distance_f32.c | 168 - .../arm_rogerstanimoto_distance.c | 73 - .../arm_russellrao_distance.c | 70 - .../arm_sokalmichener_distance.c | 74 - .../arm_sokalsneath_distance.c | 72 - .../DistanceFunctions/arm_yule_distance.c | 72 - .../Source/FastMathFunctions/CMakeLists.txt | 55 - .../FastMathFunctions/FastMathFunctions.c | 38 - .../Source/FastMathFunctions/arm_cos_f32.c | 121 - .../Source/FastMathFunctions/arm_cos_q15.c | 84 - .../Source/FastMathFunctions/arm_cos_q31.c | 84 - .../Source/FastMathFunctions/arm_sin_f32.c | 122 - .../Source/FastMathFunctions/arm_sin_q15.c | 83 - .../Source/FastMathFunctions/arm_sin_q31.c | 82 - .../Source/FastMathFunctions/arm_sqrt_q15.c | 144 - .../Source/FastMathFunctions/arm_sqrt_q31.c | 144 - .../Source/FastMathFunctions/arm_vexp_f32.c | 97 - .../Source/FastMathFunctions/arm_vlog_f32.c | 97 - .../Source/FilteringFunctions/CMakeLists.txt | 131 - .../FilteringFunctions/FilteringFunctions.c | 127 - .../arm_biquad_cascade_df1_32x64_init_q31.c | 94 - .../arm_biquad_cascade_df1_32x64_q31.c | 694 - .../arm_biquad_cascade_df1_f32.c | 684 - .../arm_biquad_cascade_df1_fast_q15.c | 250 - .../arm_biquad_cascade_df1_fast_q31.c | 296 - .../arm_biquad_cascade_df1_init_f32.c | 146 - .../arm_biquad_cascade_df1_init_q15.c | 96 - .../arm_biquad_cascade_df1_init_q31.c | 95 - .../arm_biquad_cascade_df1_q15.c | 618 - .../arm_biquad_cascade_df1_q31.c | 510 - .../arm_biquad_cascade_df2T_f32.c | 652 - .../arm_biquad_cascade_df2T_f64.c | 443 - .../arm_biquad_cascade_df2T_init_f32.c | 211 - .../arm_biquad_cascade_df2T_init_f64.c | 86 - .../arm_biquad_cascade_stereo_df2T_f32.c | 420 - .../arm_biquad_cascade_stereo_df2T_init_f32.c | 86 - .../Source/FilteringFunctions/arm_conv_f32.c | 964 - .../arm_conv_fast_opt_q15.c | 366 - .../FilteringFunctions/arm_conv_fast_q15.c | 663 - .../FilteringFunctions/arm_conv_fast_q31.c | 558 - .../FilteringFunctions/arm_conv_opt_q15.c | 362 - .../FilteringFunctions/arm_conv_opt_q7.c | 360 - .../FilteringFunctions/arm_conv_partial_f32.c | 672 - .../arm_conv_partial_fast_opt_q15.c | 387 - .../arm_conv_partial_fast_q15.c | 700 - .../arm_conv_partial_fast_q31.c | 618 - .../arm_conv_partial_opt_q15.c | 386 - .../arm_conv_partial_opt_q7.c | 390 - .../FilteringFunctions/arm_conv_partial_q15.c | 752 - .../FilteringFunctions/arm_conv_partial_q31.c | 633 - .../FilteringFunctions/arm_conv_partial_q7.c | 752 - .../Source/FilteringFunctions/arm_conv_q15.c | 858 - .../Source/FilteringFunctions/arm_conv_q31.c | 745 - .../Source/FilteringFunctions/arm_conv_q7.c | 860 - .../FilteringFunctions/arm_correlate_f32.c | 1095 - .../arm_correlate_fast_opt_q15.c | 345 - .../arm_correlate_fast_q15.c | 614 - .../arm_correlate_fast_q31.c | 601 - .../arm_correlate_opt_q15.c | 341 - .../FilteringFunctions/arm_correlate_opt_q7.c | 388 - .../FilteringFunctions/arm_correlate_q15.c | 903 - .../FilteringFunctions/arm_correlate_q31.c | 879 - .../FilteringFunctions/arm_correlate_q7.c | 1002 - .../FilteringFunctions/arm_fir_decimate_f32.c | 951 - .../arm_fir_decimate_fast_q15.c | 595 - .../arm_fir_decimate_fast_q31.c | 390 - .../arm_fir_decimate_init_f32.c | 105 - .../arm_fir_decimate_init_q15.c | 106 - .../arm_fir_decimate_init_q31.c | 105 - .../FilteringFunctions/arm_fir_decimate_q15.c | 852 - .../FilteringFunctions/arm_fir_decimate_q31.c | 634 - .../Source/FilteringFunctions/arm_fir_f32.c | 1305 - .../FilteringFunctions/arm_fir_fast_q15.c | 332 - .../FilteringFunctions/arm_fir_fast_q31.c | 324 - .../FilteringFunctions/arm_fir_init_f32.c | 89 - .../FilteringFunctions/arm_fir_init_q15.c | 137 - .../FilteringFunctions/arm_fir_init_q31.c | 80 - .../FilteringFunctions/arm_fir_init_q7.c | 81 - .../arm_fir_interpolate_f32.c | 1252 - .../arm_fir_interpolate_init_f32.c | 106 - .../arm_fir_interpolate_init_q15.c | 106 - .../arm_fir_interpolate_init_q31.c | 105 - .../arm_fir_interpolate_q15.c | 774 - .../arm_fir_interpolate_q31.c | 773 - .../FilteringFunctions/arm_fir_lattice_f32.c | 453 - .../arm_fir_lattice_init_f32.c | 70 - .../arm_fir_lattice_init_q15.c | 70 - .../arm_fir_lattice_init_q31.c | 70 - .../FilteringFunctions/arm_fir_lattice_q15.c | 506 - .../FilteringFunctions/arm_fir_lattice_q31.c | 505 - .../Source/FilteringFunctions/arm_fir_q15.c | 797 - .../Source/FilteringFunctions/arm_fir_q31.c | 1049 - .../Source/FilteringFunctions/arm_fir_q7.c | 751 - .../FilteringFunctions/arm_fir_sparse_f32.c | 341 - .../arm_fir_sparse_init_f32.c | 93 - .../arm_fir_sparse_init_q15.c | 93 - .../arm_fir_sparse_init_q31.c | 92 - .../arm_fir_sparse_init_q7.c | 93 - .../FilteringFunctions/arm_fir_sparse_q15.c | 341 - .../FilteringFunctions/arm_fir_sparse_q31.c | 357 - .../FilteringFunctions/arm_fir_sparse_q7.c | 341 - .../FilteringFunctions/arm_iir_lattice_f32.c | 354 - .../arm_iir_lattice_init_f32.c | 77 - .../arm_iir_lattice_init_q15.c | 77 - .../arm_iir_lattice_init_q31.c | 77 - .../FilteringFunctions/arm_iir_lattice_q15.c | 396 - .../FilteringFunctions/arm_iir_lattice_q31.c | 356 - .../Source/FilteringFunctions/arm_lms_f32.c | 533 - .../FilteringFunctions/arm_lms_init_f32.c | 81 - .../FilteringFunctions/arm_lms_init_q15.c | 92 - .../FilteringFunctions/arm_lms_init_q31.c | 92 - .../FilteringFunctions/arm_lms_norm_f32.c | 564 - .../arm_lms_norm_init_f32.c | 92 - .../arm_lms_norm_init_q15.c | 98 - .../arm_lms_norm_init_q31.c | 97 - .../FilteringFunctions/arm_lms_norm_q15.c | 297 - .../FilteringFunctions/arm_lms_norm_q31.c | 311 - .../Source/FilteringFunctions/arm_lms_q15.c | 262 - .../Source/FilteringFunctions/arm_lms_q31.c | 283 - .../dsp/Source/MatrixFunctions/CMakeLists.txt | 19 - .../Source/MatrixFunctions/MatrixFunctions.c | 53 - .../Source/MatrixFunctions/arm_mat_add_f32.c | 304 - .../Source/MatrixFunctions/arm_mat_add_q15.c | 227 - .../Source/MatrixFunctions/arm_mat_add_q31.c | 216 - .../MatrixFunctions/arm_mat_cmplx_mult_f32.c | 1409 - .../MatrixFunctions/arm_mat_cmplx_mult_q15.c | 595 - .../MatrixFunctions/arm_mat_cmplx_mult_q31.c | 1063 - .../Source/MatrixFunctions/arm_mat_init_f32.c | 76 - .../Source/MatrixFunctions/arm_mat_init_q15.c | 67 - .../Source/MatrixFunctions/arm_mat_init_q31.c | 72 - .../MatrixFunctions/arm_mat_inverse_f32.c | 1589 - .../MatrixFunctions/arm_mat_inverse_f64.c | 652 - .../Source/MatrixFunctions/arm_mat_mult_f32.c | 983 - .../MatrixFunctions/arm_mat_mult_fast_q15.c | 483 - .../MatrixFunctions/arm_mat_mult_fast_q31.c | 374 - .../Source/MatrixFunctions/arm_mat_mult_q15.c | 892 - .../Source/MatrixFunctions/arm_mat_mult_q31.c | 763 - .../MatrixFunctions/arm_mat_scale_f32.c | 287 - .../MatrixFunctions/arm_mat_scale_q15.c | 249 - .../MatrixFunctions/arm_mat_scale_q31.c | 242 - .../Source/MatrixFunctions/arm_mat_sub_f32.c | 298 - .../Source/MatrixFunctions/arm_mat_sub_q15.c | 219 - .../Source/MatrixFunctions/arm_mat_sub_q31.c | 218 - .../MatrixFunctions/arm_mat_trans_f32.c | 325 - .../MatrixFunctions/arm_mat_trans_q15.c | 348 - .../MatrixFunctions/arm_mat_trans_q31.c | 191 - .../dsp/Source/SVMFunctions/CMakeLists.txt | 20 - .../dsp/Source/SVMFunctions/SVMFunctions.c | 36 - .../SVMFunctions/arm_svm_linear_init_f32.c | 81 - .../SVMFunctions/arm_svm_linear_predict_f32.c | 453 - .../arm_svm_polynomial_init_f32.c | 87 - .../arm_svm_polynomial_predict_f32.c | 488 - .../SVMFunctions/arm_svm_rbf_init_f32.c | 79 - .../SVMFunctions/arm_svm_rbf_predict_f32.c | 521 - .../SVMFunctions/arm_svm_sigmoid_init_f32.c | 81 - .../arm_svm_sigmoid_predict_f32.c | 485 - .../Source/StatisticsFunctions/CMakeLists.txt | 19 - .../StatisticsFunctions/StatisticsFunctions.c | 60 - .../StatisticsFunctions/arm_entropy_f32.c | 172 - .../StatisticsFunctions/arm_entropy_f64.c | 71 - .../arm_kullback_leibler_f32.c | 191 - .../arm_kullback_leibler_f64.c | 73 - .../arm_logsumexp_dot_prod_f32.c | 66 - .../StatisticsFunctions/arm_logsumexp_f32.c | 275 - .../Source/StatisticsFunctions/arm_max_f32.c | 365 - .../StatisticsFunctions/arm_max_no_idx_f32.c | 138 - .../Source/StatisticsFunctions/arm_max_q15.c | 230 - .../Source/StatisticsFunctions/arm_max_q31.c | 234 - .../Source/StatisticsFunctions/arm_max_q7.c | 288 - .../Source/StatisticsFunctions/arm_mean_f32.c | 210 - .../Source/StatisticsFunctions/arm_mean_q15.c | 156 - .../Source/StatisticsFunctions/arm_mean_q31.c | 149 - .../Source/StatisticsFunctions/arm_mean_q7.c | 153 - .../Source/StatisticsFunctions/arm_min_f32.c | 363 - .../Source/StatisticsFunctions/arm_min_q15.c | 234 - .../Source/StatisticsFunctions/arm_min_q31.c | 233 - .../Source/StatisticsFunctions/arm_min_q7.c | 284 - .../StatisticsFunctions/arm_power_f32.c | 225 - .../StatisticsFunctions/arm_power_q15.c | 177 - .../StatisticsFunctions/arm_power_q31.c | 165 - .../Source/StatisticsFunctions/arm_power_q7.c | 180 - .../Source/StatisticsFunctions/arm_rms_f32.c | 192 - .../Source/StatisticsFunctions/arm_rms_q15.c | 149 - .../Source/StatisticsFunctions/arm_rms_q31.c | 141 - .../Source/StatisticsFunctions/arm_std_f32.c | 83 - .../Source/StatisticsFunctions/arm_std_q15.c | 173 - .../Source/StatisticsFunctions/arm_std_q31.c | 159 - .../Source/StatisticsFunctions/arm_var_f32.c | 293 - .../Source/StatisticsFunctions/arm_var_q15.c | 230 - .../Source/StatisticsFunctions/arm_var_q31.c | 214 - .../Source/SupportFunctions/CMakeLists.txt | 19 - .../SupportFunctions/SupportFunctions.c | 63 - .../SupportFunctions/arm_barycenter_f32.c | 412 - .../SupportFunctions/arm_bitonic_sort_f32.c | 1039 - .../SupportFunctions/arm_bubble_sort_f32.c | 104 - .../Source/SupportFunctions/arm_copy_f32.c | 192 - .../Source/SupportFunctions/arm_copy_q15.c | 130 - .../Source/SupportFunctions/arm_copy_q31.c | 135 - .../dsp/Source/SupportFunctions/arm_copy_q7.c | 132 - .../Source/SupportFunctions/arm_fill_f32.c | 189 - .../Source/SupportFunctions/arm_fill_q15.c | 134 - .../Source/SupportFunctions/arm_fill_q31.c | 135 - .../dsp/Source/SupportFunctions/arm_fill_q7.c | 133 - .../SupportFunctions/arm_float_to_q15.c | 308 - .../SupportFunctions/arm_float_to_q31.c | 314 - .../Source/SupportFunctions/arm_float_to_q7.c | 330 - .../SupportFunctions/arm_heap_sort_f32.c | 119 - .../SupportFunctions/arm_insertion_sort_f32.c | 93 - .../SupportFunctions/arm_merge_sort_f32.c | 127 - .../arm_merge_sort_init_f32.c | 53 - .../SupportFunctions/arm_q15_to_float.c | 207 - .../Source/SupportFunctions/arm_q15_to_q31.c | 182 - .../Source/SupportFunctions/arm_q15_to_q7.c | 190 - .../SupportFunctions/arm_q31_to_float.c | 202 - .../Source/SupportFunctions/arm_q31_to_q15.c | 181 - .../Source/SupportFunctions/arm_q31_to_q7.c | 169 - .../Source/SupportFunctions/arm_q7_to_float.c | 218 - .../Source/SupportFunctions/arm_q7_to_q15.c | 188 - .../Source/SupportFunctions/arm_q7_to_q31.c | 164 - .../SupportFunctions/arm_quick_sort_f32.c | 182 - .../SupportFunctions/arm_selection_sort_f32.c | 108 - .../Source/SupportFunctions/arm_sort_f32.c | 87 - .../SupportFunctions/arm_sort_init_f32.c | 55 - .../SupportFunctions/arm_spline_interp_f32.c | 283 - .../arm_spline_interp_init_f32.c | 175 - .../SupportFunctions/arm_weighted_sum_f32.c | 185 - .../Source/TransformFunctions/CMakeLists.txt | 144 - .../TransformFunctions/TransformFunctions.c | 67 - .../TransformFunctions/arm_bitreversal.c | 229 - .../TransformFunctions/arm_bitreversal2.S | 216 - .../TransformFunctions/arm_bitreversal2.c | 134 - .../Source/TransformFunctions/arm_cfft_f32.c | 1222 - .../Source/TransformFunctions/arm_cfft_f64.c | 318 - .../TransformFunctions/arm_cfft_init_f32.c | 353 - .../TransformFunctions/arm_cfft_init_f64.c | 150 - .../TransformFunctions/arm_cfft_init_q15.c | 356 - .../TransformFunctions/arm_cfft_init_q31.c | 356 - .../Source/TransformFunctions/arm_cfft_q15.c | 949 - .../Source/TransformFunctions/arm_cfft_q31.c | 876 - .../TransformFunctions/arm_cfft_radix2_f32.c | 470 - .../arm_cfft_radix2_init_f32.c | 197 - .../arm_cfft_radix2_init_q15.c | 182 - .../arm_cfft_radix2_init_q31.c | 179 - .../TransformFunctions/arm_cfft_radix2_q15.c | 689 - .../TransformFunctions/arm_cfft_radix2_q31.c | 337 - .../TransformFunctions/arm_cfft_radix4_f32.c | 1200 - .../arm_cfft_radix4_init_f32.c | 156 - .../arm_cfft_radix4_init_q15.c | 145 - .../arm_cfft_radix4_init_q31.c | 141 - .../TransformFunctions/arm_cfft_radix4_q15.c | 1809 - .../TransformFunctions/arm_cfft_radix4_q31.c | 827 - .../TransformFunctions/arm_cfft_radix8_f32.c | 285 - .../Source/TransformFunctions/arm_dct4_f32.c | 448 - .../TransformFunctions/arm_dct4_init_f32.c | 130 - .../TransformFunctions/arm_dct4_init_q15.c | 130 - .../TransformFunctions/arm_dct4_init_q31.c | 129 - .../Source/TransformFunctions/arm_dct4_q15.c | 381 - .../Source/TransformFunctions/arm_dct4_q31.c | 383 - .../Source/TransformFunctions/arm_rfft_f32.c | 311 - .../TransformFunctions/arm_rfft_fast_f32.c | 603 - .../TransformFunctions/arm_rfft_fast_f64.c | 228 - .../arm_rfft_fast_init_f32.c | 352 - .../arm_rfft_fast_init_f64.c | 344 - .../TransformFunctions/arm_rfft_init_f32.c | 139 - .../TransformFunctions/arm_rfft_init_q15.c | 239 - .../TransformFunctions/arm_rfft_init_q31.c | 237 - .../Source/TransformFunctions/arm_rfft_q15.c | 592 - .../Source/TransformFunctions/arm_rfft_q31.c | 500 - .../cmsis/dsp/Source/configDsp.cmake | 37 - .../AT32F403A/cmsis/dsp/Source/fft.cmake | 672 - .../AT32F403A/cmsis/dsp/Source/interpol.cmake | 51 - .../cmsis/dsp/include/arm_common_tables.h | 517 - .../cmsis/dsp/include/arm_const_structs.h | 76 - .../cmsis/dsp/include/arm_helium_utils.h | 348 - .../AT32F403A/cmsis/dsp/include/arm_math.h | 8970 -- .../cmsis/dsp/include/arm_mve_tables.h | 235 - .../cmsis/dsp/include/arm_vec_math.h | 372 - .../AT32F403A/drivers/inc/at32f403a_407_acc.h | 202 - .../AT32F403A/drivers/inc/at32f403a_407_adc.h | 642 - .../AT32F403A/drivers/inc/at32f403a_407_bpr.h | 789 - .../AT32F403A/drivers/inc/at32f403a_407_can.h | 986 - .../AT32F403A/drivers/inc/at32f403a_407_crc.h | 172 - .../AT32F403A/drivers/inc/at32f403a_407_crm.h | 1142 - .../AT32F403A/drivers/inc/at32f403a_407_dac.h | 374 - .../drivers/inc/at32f403a_407_debug.h | 171 - .../AT32F403A/drivers/inc/at32f403a_407_def.h | 69 - .../AT32F403A/drivers/inc/at32f403a_407_dma.h | 550 - .../drivers/inc/at32f403a_407_emac.h | 1710 - .../drivers/inc/at32f403a_407_exint.h | 231 - .../drivers/inc/at32f403a_407_flash.h | 728 - .../drivers/inc/at32f403a_407_gpio.h | 941 - .../AT32F403A/drivers/inc/at32f403a_407_i2c.h | 402 - .../drivers/inc/at32f403a_407_misc.h | 125 - .../AT32F403A/drivers/inc/at32f403a_407_pwc.h | 191 - .../AT32F403A/drivers/inc/at32f403a_407_rtc.h | 261 - .../drivers/inc/at32f403a_407_sdio.h | 624 - .../AT32F403A/drivers/inc/at32f403a_407_spi.h | 499 - .../AT32F403A/drivers/inc/at32f403a_407_tmr.h | 941 - .../drivers/inc/at32f403a_407_usart.h | 378 - .../AT32F403A/drivers/inc/at32f403a_407_usb.h | 712 - .../AT32F403A/drivers/inc/at32f403a_407_wdt.h | 183 - .../drivers/inc/at32f403a_407_wwdt.h | 158 - .../AT32F403A/drivers/inc/at32f403a_407_xmc.h | 568 - .../AT32F403A/drivers/src/at32f403a_407_acc.c | 218 - .../AT32F403A/drivers/src/at32f403a_407_adc.c | 949 - .../AT32F403A/drivers/src/at32f403a_407_bpr.c | 206 - .../AT32F403A/drivers/src/at32f403a_407_can.c | 1149 - .../AT32F403A/drivers/src/at32f403a_407_crc.c | 164 - .../AT32F403A/drivers/src/at32f403a_407_crm.c | 860 - .../AT32F403A/drivers/src/at32f403a_407_dac.c | 380 - .../drivers/src/at32f403a_407_debug.c | 97 - .../AT32F403A/drivers/src/at32f403a_407_dma.c | 431 - .../drivers/src/at32f403a_407_emac.c | 2304 - .../drivers/src/at32f403a_407_exint.c | 236 - .../drivers/src/at32f403a_407_flash.c | 1284 - .../drivers/src/at32f403a_407_gpio.c | 665 - .../AT32F403A/drivers/src/at32f403a_407_i2c.c | 641 - .../drivers/src/at32f403a_407_misc.c | 173 - .../AT32F403A/drivers/src/at32f403a_407_pwc.c | 246 - .../AT32F403A/drivers/src/at32f403a_407_rtc.c | 224 - .../drivers/src/at32f403a_407_sdio.c | 586 - .../AT32F403A/drivers/src/at32f403a_407_spi.c | 618 - .../AT32F403A/drivers/src/at32f403a_407_tmr.c | 1763 - .../drivers/src/at32f403a_407_usart.c | 624 - .../AT32F403A/drivers/src/at32f403a_407_usb.c | 561 - .../AT32F403A/drivers/src/at32f403a_407_wdt.c | 145 - .../drivers/src/at32f403a_407_wwdt.c | 141 - .../AT32F403A/drivers/src/at32f403a_407_xmc.c | 508 - .../EpaperModuleTest_AT32F403A/Epaper/bmp.h | 638 - .../Epaper/epaper.c | 938 - .../Epaper/epaper.h | 109 - .../Epaper/epdfont.h | 429 - .../Inc/at32f403a_407_clock.h | 46 - .../Inc/at32f403a_407_conf.h | 179 - .../Inc/at32f403a_407_int.h | 58 - .../EpaperModuleTest_AT32F403A/Inc/board.h | 31 - .../EpaperModuleTest_AT32F403A/Inc/delay.h | 19 - .../MDK-ARM/EpaperModuleTest_AT32F403A.uvoptx | 657 - .../EpaperModuleTest_AT32F403A.uvprojx | 578 - .../MDK-ARM/EventRecorderStub.scvd | 9 - .../MDK-ARM/JLinkSettings.ini | 40 - .../Objects/EpaperModuleTest_AT32F403A.axf | Bin 175428 -> 0 bytes .../Objects/EpaperModuleTest_AT32F403A.hex | 1252 - .../MDK-ARM/Objects/template.axf | Bin 158196 -> 0 bytes .../MDK-ARM/Objects/template.hex | 208 - .../Src/at32f403a_407_clock.c | 116 - .../Src/at32f403a_407_int.c | 141 - .../EpaperModuleTest_AT32F403A/Src/board.c | 127 - .../EpaperModuleTest_AT32F403A/Src/delay.c | 88 - Example/EpaperModuleTest_AT32F403A/Src/main.c | 208 - .../EpaperModuleTest_Arduino_ESP32.ino | 23 +- .../EpaperModuleTest_Arduino_ESP32C3.ino | 21 +- .../EpaperModuleTest_Arduino_ESP8266.ino | 21 +- .../CH32F103/CMSIS/cmsis_armcc.h | 888 - .../CH32F103/CMSIS/cmsis_armclang.h | 1503 - .../CH32F103/CMSIS/cmsis_armclang_ltm.h | 1928 - .../CH32F103/CMSIS/cmsis_compiler.h | 283 - .../CH32F103/CMSIS/cmsis_gcc.h | 2211 - .../CH32F103/CMSIS/cmsis_version.h | 39 - .../CH32F103/CMSIS/core_cm3.c | 784 - .../CH32F103/CMSIS/core_cm3.h | 1943 - .../CH32F103/Debug/debug.c | 181 - .../CH32F103/Debug/debug.h | 64 - .../CH32F103/Startup/startup_ch32f10x.s | 299 - .../CH32F103/StdPeriphDriver/inc/ch32f10x.h | 5687 -- .../StdPeriphDriver/inc/ch32f10x_adc.h | 196 - .../StdPeriphDriver/inc/ch32f10x_bkp.h | 97 - .../StdPeriphDriver/inc/ch32f10x_can.h | 366 - .../StdPeriphDriver/inc/ch32f10x_crc.h | 37 - .../StdPeriphDriver/inc/ch32f10x_dac.h | 122 - .../StdPeriphDriver/inc/ch32f10x_dbgmcu.h | 64 - .../StdPeriphDriver/inc/ch32f10x_dma.h | 218 - .../StdPeriphDriver/inc/ch32f10x_exti.h | 90 - .../StdPeriphDriver/inc/ch32f10x_flash.h | 159 - .../StdPeriphDriver/inc/ch32f10x_gpio.h | 167 - .../StdPeriphDriver/inc/ch32f10x_i2c.h | 210 - .../StdPeriphDriver/inc/ch32f10x_iwdg.h | 56 - .../StdPeriphDriver/inc/ch32f10x_misc.h | 80 - .../StdPeriphDriver/inc/ch32f10x_pwr.h | 59 - .../StdPeriphDriver/inc/ch32f10x_rcc.h | 230 - .../StdPeriphDriver/inc/ch32f10x_rtc.h | 54 - .../StdPeriphDriver/inc/ch32f10x_spi.h | 229 - .../StdPeriphDriver/inc/ch32f10x_tim.h | 515 - .../StdPeriphDriver/inc/ch32f10x_usart.h | 195 - .../StdPeriphDriver/inc/ch32f10x_usb.h | 657 - .../StdPeriphDriver/inc/ch32f10x_usb_host.h | 98 - .../StdPeriphDriver/inc/ch32f10x_wwdg.h | 42 - .../StdPeriphDriver/src/ch32f10x_adc.c | 1148 - .../StdPeriphDriver/src/ch32f10x_bkp.c | 242 - .../StdPeriphDriver/src/ch32f10x_can.c | 1208 - .../StdPeriphDriver/src/ch32f10x_crc.c | 107 - .../StdPeriphDriver/src/ch32f10x_dac.c | 253 - .../StdPeriphDriver/src/ch32f10x_dbgmcu.c | 92 - .../StdPeriphDriver/src/ch32f10x_dma.c | 555 - .../StdPeriphDriver/src/ch32f10x_exti.c | 182 - .../StdPeriphDriver/src/ch32f10x_flash.c | 979 - .../StdPeriphDriver/src/ch32f10x_gpio.c | 534 - .../StdPeriphDriver/src/ch32f10x_i2c.c | 985 - .../StdPeriphDriver/src/ch32f10x_iwdg.c | 125 - .../StdPeriphDriver/src/ch32f10x_misc.c | 148 - .../StdPeriphDriver/src/ch32f10x_pwr.c | 218 - .../StdPeriphDriver/src/ch32f10x_rcc.c | 931 - .../StdPeriphDriver/src/ch32f10x_rtc.c | 285 - .../StdPeriphDriver/src/ch32f10x_spi.c | 654 - .../StdPeriphDriver/src/ch32f10x_tim.c | 2362 - .../StdPeriphDriver/src/ch32f10x_usart.c | 825 - .../StdPeriphDriver/src/ch32f10x_usb.c | 114 - .../StdPeriphDriver/src/ch32f10x_usb_host.c | 879 - .../StdPeriphDriver/src/ch32f10x_wwdg.c | 150 - .../CH32F103/USBLIB/CONFIG/hw_config.c | 154 - .../CH32F103/USBLIB/CONFIG/hw_config.h | 36 - .../CH32F103/USBLIB/CONFIG/usb_conf.h | 75 - .../CH32F103/USBLIB/CONFIG/usb_desc.c | 71 - .../CH32F103/USBLIB/CONFIG/usb_desc.h | 52 - .../CH32F103/USBLIB/CONFIG/usb_endp.c | 85 - .../CH32F103/USBLIB/CONFIG/usb_istr.c | 189 - .../CH32F103/USBLIB/CONFIG/usb_istr.h | 75 - .../CH32F103/USBLIB/CONFIG/usb_prop.c | 338 - .../CH32F103/USBLIB/CONFIG/usb_prop.h | 67 - .../CH32F103/USBLIB/CONFIG/usb_pwr.c | 214 - .../CH32F103/USBLIB/CONFIG/usb_pwr.h | 60 - .../CH32F103/USBLIB/USB-Driver/inc/usb_core.h | 189 - .../CH32F103/USBLIB/USB-Driver/inc/usb_def.h | 80 - .../CH32F103/USBLIB/USB-Driver/inc/usb_init.h | 40 - .../CH32F103/USBLIB/USB-Driver/inc/usb_int.h | 23 - .../CH32F103/USBLIB/USB-Driver/inc/usb_lib.h | 28 - .../CH32F103/USBLIB/USB-Driver/inc/usb_mem.h | 34 - .../CH32F103/USBLIB/USB-Driver/inc/usb_regs.h | 641 - .../CH32F103/USBLIB/USB-Driver/inc/usb_sil.h | 34 - .../CH32F103/USBLIB/USB-Driver/inc/usb_type.h | 31 - .../CH32F103/USBLIB/USB-Driver/src/usb_core.c | 949 - .../CH32F103/USBLIB/USB-Driver/src/usb_init.c | 39 - .../CH32F103/USBLIB/USB-Driver/src/usb_int.c | 129 - .../CH32F103/USBLIB/USB-Driver/src/usb_mem.c | 70 - .../CH32F103/USBLIB/USB-Driver/src/usb_regs.c | 875 - .../CH32F103/USBLIB/USB-Driver/src/usb_sil.c | 74 - .../EpaperModuleTest_CH32F103/Epaper/epaper.c | 922 - .../EpaperModuleTest_CH32F103/Epaper/epaper.h | 109 - .../Epaper/epdfont.h | 429 - Example/EpaperModuleTest_CH32F103/Inc/board.h | 21 - .../Inc/ch32f10x_conf.h | 40 - .../Inc/ch32f10x_it.h | 38 - .../Inc/system_ch32f10x.h | 30 - .../EpaperModuleTest_CH32F103/Inc/systick.h | 38 - .../Target_1_CH32F103C8_1.0.0.dbgconf | 97 - .../MDK-ARM/EpaperModuleTest_CH32F103.uvoptx | 584 - .../MDK-ARM/EpaperModuleTest_CH32F103.uvprojx | 628 - .../MDK-ARM/JLinkSettings.ini | 40 - .../MDK-ARM/Objects/EpaperModuleTest.axf | Bin 325072 -> 0 bytes .../MDK-ARM/Objects/template.axf | Bin 325660 -> 0 bytes Example/EpaperModuleTest_CH32F103/Src/board.c | 52 - .../Src/ch32f10x_it.c | 128 - Example/EpaperModuleTest_CH32F103/Src/main.c | 229 - .../Src/system_ch32f10x.c | 571 - .../EpaperModuleTest_CH32F103/Src/systick.c | 121 - Example/EpaperModuleTest_CH32V103/.template | 14 - .../Core/core_riscv.c | 552 - .../Core/core_riscv.h | 397 - .../EpaperModuleTest_CH32V103/Debug/debug.c | 196 - .../EpaperModuleTest_CH32V103/Debug/debug.h | 32 - .../EpaperModuleTest_CH32V103.wvproj | 2 - Example/EpaperModuleTest_CH32V103/Ld/Link.ld | 1 - .../Peripheral/inc/ch32v10x.h | 3215 - .../Peripheral/inc/ch32v10x_adc.h | 188 - .../Peripheral/inc/ch32v10x_bkp.h | 91 - .../Peripheral/inc/ch32v10x_crc.h | 31 - .../Peripheral/inc/ch32v10x_dbgmcu.h | 41 - .../Peripheral/inc/ch32v10x_dma.h | 216 - .../Peripheral/inc/ch32v10x_exti.h | 86 - .../Peripheral/inc/ch32v10x_flash.h | 155 - .../Peripheral/inc/ch32v10x_gpio.h | 160 - .../Peripheral/inc/ch32v10x_i2c.h | 199 - .../Peripheral/inc/ch32v10x_iwdg.h | 48 - .../Peripheral/inc/ch32v10x_misc.h | 46 - .../Peripheral/inc/ch32v10x_pwr.h | 57 - .../Peripheral/inc/ch32v10x_rcc.h | 228 - .../Peripheral/inc/ch32v10x_rtc.h | 51 - .../Peripheral/inc/ch32v10x_spi.h | 218 - .../Peripheral/inc/ch32v10x_tim.h | 506 - .../Peripheral/inc/ch32v10x_usart.h | 185 - .../Peripheral/inc/ch32v10x_usb.h | 700 - .../Peripheral/inc/ch32v10x_usb_host.h | 96 - .../Peripheral/inc/ch32v10x_wwdg.h | 39 - .../Peripheral/src/ch32v10x_adc.c | 1145 - .../Peripheral/src/ch32v10x_bkp.c | 248 - .../Peripheral/src/ch32v10x_crc.c | 103 - .../Peripheral/src/ch32v10x_dbgmcu.c | 64 - .../Peripheral/src/ch32v10x_dma.c | 550 - .../Peripheral/src/ch32v10x_exti.c | 180 - .../Peripheral/src/ch32v10x_flash.c | 968 - .../Peripheral/src/ch32v10x_gpio.c | 538 - .../Peripheral/src/ch32v10x_i2c.c | 979 - .../Peripheral/src/ch32v10x_iwdg.c | 123 - .../Peripheral/src/ch32v10x_misc.c | 107 - .../Peripheral/src/ch32v10x_pwr.c | 217 - .../Peripheral/src/ch32v10x_rcc.c | 938 - .../Peripheral/src/ch32v10x_rtc.c | 273 - .../Peripheral/src/ch32v10x_spi.c | 652 - .../Peripheral/src/ch32v10x_tim.c | 2353 - .../Peripheral/src/ch32v10x_usart.c | 815 - .../Peripheral/src/ch32v10x_usb.c | 170 - .../Peripheral/src/ch32v10x_usb_host.c | 809 - .../Peripheral/src/ch32v10x_wwdg.c | 139 - .../Startup/startup_ch32v10x.S | 232 - .../User/Epaper/bmp.h | 638 - .../User/Epaper/epaper.c | 922 - .../User/Epaper/epaper.h | 109 - .../EpaperModuleTest_CH32V103/User/board.c | 52 - .../EpaperModuleTest_CH32V103/User/board.h | 21 - .../User/ch32v10x_conf.h | 35 - .../User/ch32v10x_it.c | 38 - .../User/ch32v10x_it.h | 15 - Example/EpaperModuleTest_CH32V103/User/main.c | 229 - .../User/system_ch32v10x.c | 503 - .../User/system_ch32v10x.h | 27 - .../EpaperModuleTest_CH32V103/User/systick.c | 163 - .../EpaperModuleTest_CH32V103/User/systick.h | 38 - .../EpaperModuleTest_GD32F103/Epaper/bmp.h | 638 - .../EpaperModuleTest_GD32F103/Epaper/epaper.c | 912 - .../EpaperModuleTest_GD32F103/Epaper/epaper.h | 109 - .../Epaper/epdfont.h | 429 - .../CMSIS/GD/GD32F10x/Include/gd32f10x.h | 380 - .../GD/GD32F10x/Include/system_gd32f10x.h | 60 - .../GD32F10x/Source/ARM/startup_gd32f10x_cl.s | 390 - .../GD32F10x/Source/ARM/startup_gd32f10x_hd.s | 371 - .../GD32F10x/Source/ARM/startup_gd32f10x_md.s | 328 - .../GD32F10x/Source/ARM/startup_gd32f10x_xd.s | 371 - .../GD32F10x/Source/IAR/startup_gd32f10x_cl.s | 528 - .../GD32F10x/Source/IAR/startup_gd32f10x_hd.s | 490 - .../GD32F10x/Source/IAR/startup_gd32f10x_md.s | 399 - .../GD32F10x/Source/IAR/startup_gd32f10x_xd.s | 490 - .../GD/GD32F10x/Source/system_gd32f10x.c | 1059 - .../GD32F103/CMSIS/core_cm3.h | 1638 - .../GD32F103/CMSIS/core_cmFunc.h | 637 - .../GD32F103/CMSIS/core_cmInstr.h | 687 - .../Include/gd32f10x_adc.h | 367 - .../Include/gd32f10x_bkp.h | 229 - .../Include/gd32f10x_can.h | 759 - .../Include/gd32f10x_crc.h | 80 - .../Include/gd32f10x_dac.h | 249 - .../Include/gd32f10x_dbg.h | 152 - .../Include/gd32f10x_dma.h | 289 - .../Include/gd32f10x_enet.h | 1497 - .../Include/gd32f10x_exmc.h | 431 - .../Include/gd32f10x_exti.h | 258 - .../Include/gd32f10x_fmc.h | 369 - .../Include/gd32f10x_fwdgt.h | 107 - .../Include/gd32f10x_gpio.h | 498 - .../Include/gd32f10x_i2c.h | 347 - .../Include/gd32f10x_misc.h | 94 - .../Include/gd32f10x_pmu.h | 128 - .../Include/gd32f10x_rcu.h | 923 - .../Include/gd32f10x_rtc.h | 151 - .../Include/gd32f10x_sdio.h | 433 - .../Include/gd32f10x_spi.h | 327 - .../Include/gd32f10x_timer.h | 728 - .../Include/gd32f10x_usart.h | 377 - .../Include/gd32f10x_wwdgt.h | 89 - .../Source/gd32f10x_adc.c | 932 - .../Source/gd32f10x_bkp.c | 295 - .../Source/gd32f10x_can.c | 1054 - .../Source/gd32f10x_crc.c | 130 - .../Source/gd32f10x_dac.c | 558 - .../Source/gd32f10x_dbg.c | 152 - .../Source/gd32f10x_dma.c | 737 - .../Source/gd32f10x_enet.c | 3084 - .../Source/gd32f10x_exmc.c | 645 - .../Source/gd32f10x_exti.c | 251 - .../Source/gd32f10x_fmc.c | 964 - .../Source/gd32f10x_fwdgt.c | 154 - .../Source/gd32f10x_gpio.c | 538 - .../Source/gd32f10x_i2c.c | 714 - .../Source/gd32f10x_misc.c | 187 - .../Source/gd32f10x_pmu.c | 282 - .../Source/gd32f10x_rcu.c | 1195 - .../Source/gd32f10x_rtc.c | 276 - .../Source/gd32f10x_sdio.c | 807 - .../Source/gd32f10x_spi.c | 717 - .../Source/gd32f10x_timer.c | 2002 - .../Source/gd32f10x_usart.c | 766 - .../Source/gd32f10x_wwdgt.c | 133 - .../class/device/audio/Include/audio_core.h | 261 - .../device/audio/Include/audio_out_itf.h | 76 - .../class/device/audio/Source/audio_core.c | 549 - .../class/device/audio/Source/audio_out_itf.c | 242 - .../class/device/cdc/Include/cdc_acm_core.h | 164 - .../class/device/cdc/Source/cdc_acm_core.c | 509 - .../class/device/dfu/Include/dfu_core.h | 179 - .../class/device/dfu/Source/dfu_core.c | 675 - .../device/hid/Include/custom_hid_core.h | 67 - .../device/hid/Include/standard_hid_core.h | 66 - .../class/device/hid/Include/usb_hid.h | 83 - .../class/device/hid/Source/custom_hid_core.c | 510 - .../device/hid/Source/standard_hid_core.c | 427 - .../class/device/iap/Include/usb_iap_core.h | 82 - .../class/device/iap/Source/usb_iap_core.c | 596 - .../class/device/msc/Include/usbd_msc_bbb.h | 129 - .../class/device/msc/Include/usbd_msc_core.h | 85 - .../class/device/msc/Include/usbd_msc_data.h | 49 - .../class/device/msc/Include/usbd_msc_mem.h | 59 - .../class/device/msc/Include/usbd_msc_scsi.h | 126 - .../class/device/msc/Source/usbd_msc_bbb.c | 283 - .../class/device/msc/Source/usbd_msc_core.c | 316 - .../class/device/msc/Source/usbd_msc_data.c | 73 - .../class/device/msc/Source/usbd_msc_scsi.c | 728 - .../device/printer/Include/printer_core.h | 73 - .../device/printer/Source/printer_core.c | 310 - .../device/Include/usb_ch9_std.h | 211 - .../device/Include/usbd_core.h | 334 - .../device/Include/usbd_enum.h | 111 - .../device/Include/usbd_pwr.h | 67 - .../device/Include/usbd_transc.h | 64 - .../device/Source/usbd_core.c | 127 - .../device/Source/usbd_enum.c | 747 - .../device/Source/usbd_pwr.c | 60 - .../device/Source/usbd_transc.c | 208 - .../usbd/Include/usbd_lld_core.h | 73 - .../usbd/Include/usbd_lld_int.h | 48 - .../usbd/Include/usbd_lld_regs.h | 227 - .../usbd/Source/usbd_lld_core.c | 632 - .../usbd/Source/usbd_lld_int.c | 276 - Example/EpaperModuleTest_GD32F103/Inc/board.h | 22 - .../Inc/gd32f10x_it.h | 63 - .../Inc/gd32f10x_libopt.h | 65 - Example/EpaperModuleTest_GD32F103/Inc/main.h | 13 - .../EpaperModuleTest_GD32F103/Inc/systick.h | 38 - .../MDK-ARM/EpaperModuleTest_GD32F103.uvoptx | 614 - .../MDK-ARM/EpaperModuleTest_GD32F103.uvprojx | 577 - .../MDK-ARM/EventRecorderStub.scvd | 9 - .../MDK-ARM/JLinkSettings.ini | 40 - .../Objects/EpaperModuleTest_GD32F103.axf | Bin 96028 -> 0 bytes .../Objects/EpaperModuleTest_GD32F103.hex | 1061 - .../MDK-ARM/Objects/template.axf | Bin 57300 -> 0 bytes .../MDK-ARM/Objects/template.hex | 167 - Example/EpaperModuleTest_GD32F103/Src/board.c | 90 - .../Src/gd32f10x_it.c | 142 - Example/EpaperModuleTest_GD32F103/Src/main.c | 218 - .../EpaperModuleTest_GD32F103/Src/systick.c | 120 - .../EpaperModuleTest_GD32F303/Epaper/bmp.h | 638 - .../EpaperModuleTest_GD32F303/Epaper/epaper.c | 912 - .../EpaperModuleTest_GD32F303/Epaper/epaper.h | 109 - .../Epaper/epdfont.h | 429 - .../GD32/CMSIS/GD/GD32F30x/Include/gd32f30x.h | 356 - .../GD/GD32F30x/Include/system_gd32f30x.h | 57 - .../GD32F30x/Source/ARM/startup_gd32f30x_cl.s | 385 - .../GD32F30x/Source/ARM/startup_gd32f30x_hd.s | 365 - .../GD32F30x/Source/ARM/startup_gd32f30x_xd.s | 365 - .../GD32F30x/Source/IAR/startup_gd32f30x_cl.s | 525 - .../GD32F30x/Source/IAR/startup_gd32f30x_hd.s | 487 - .../GD32F30x/Source/IAR/startup_gd32f30x_xd.s | 487 - .../GD/GD32F30x/Source/system_gd32f30x.c | 991 - .../GD32/CMSIS/core_cm4.h | 1790 - .../GD32/CMSIS/core_cm4_simd.h | 697 - .../GD32/CMSIS/core_cmFunc.h | 616 - .../GD32/CMSIS/core_cmInstr.h | 618 - .../Include/gd32f30x_adc.h | 403 - .../Include/gd32f30x_bkp.h | 244 - .../Include/gd32f30x_can.h | 754 - .../Include/gd32f30x_crc.h | 81 - .../Include/gd32f30x_ctc.h | 186 - .../Include/gd32f30x_dac.h | 250 - .../Include/gd32f30x_dbg.h | 158 - .../Include/gd32f30x_dma.h | 285 - .../Include/gd32f30x_enet.h | 1702 - .../Include/gd32f30x_exmc.h | 446 - .../Include/gd32f30x_exti.h | 255 - .../Include/gd32f30x_fmc.h | 375 - .../Include/gd32f30x_fwdgt.h | 107 - .../Include/gd32f30x_gpio.h | 536 - .../Include/gd32f30x_i2c.h | 355 - .../Include/gd32f30x_misc.h | 94 - .../Include/gd32f30x_pmu.h | 187 - .../Include/gd32f30x_rcu.h | 1053 - .../Include/gd32f30x_rtc.h | 138 - .../Include/gd32f30x_sdio.h | 434 - .../Include/gd32f30x_spi.h | 365 - .../Include/gd32f30x_timer.h | 752 - .../Include/gd32f30x_usart.h | 444 - .../Include/gd32f30x_wwdgt.h | 90 - .../Source/gd32f30x_adc.c | 941 - .../Source/gd32f30x_bkp.c | 328 - .../Source/gd32f30x_can.c | 1042 - .../Source/gd32f30x_crc.c | 130 - .../Source/gd32f30x_ctc.c | 393 - .../Source/gd32f30x_dac.c | 541 - .../Source/gd32f30x_dbg.c | 164 - .../Source/gd32f30x_dma.c | 735 - .../Source/gd32f30x_enet.c | 3678 - .../Source/gd32f30x_exmc.c | 677 - .../Source/gd32f30x_exti.c | 253 - .../Source/gd32f30x_fmc.c | 1009 - .../Source/gd32f30x_fwdgt.c | 158 - .../Source/gd32f30x_gpio.c | 583 - .../Source/gd32f30x_i2c.c | 737 - .../Source/gd32f30x_misc.c | 175 - .../Source/gd32f30x_pmu.c | 386 - .../Source/gd32f30x_rcu.c | 1326 - .../Source/gd32f30x_rtc.c | 230 - .../Source/gd32f30x_sdio.c | 809 - .../Source/gd32f30x_spi.c | 862 - .../Source/gd32f30x_timer.c | 2042 - .../Source/gd32f30x_usart.c | 909 - .../Source/gd32f30x_wwdgt.c | 149 - .../class/device/audio/Include/audio_core.h | 260 - .../device/audio/Include/audio_out_itf.h | 76 - .../class/device/audio/Source/audio_core.c | 549 - .../class/device/audio/Source/audio_out_itf.c | 242 - .../class/device/cdc/Include/cdc_acm_core.h | 163 - .../class/device/cdc/Source/cdc_acm_core.c | 510 - .../class/device/dfu/Include/dfu_core.h | 179 - .../class/device/dfu/Source/dfu_core.c | 674 - .../device/hid/Include/custom_hid_core.h | 67 - .../device/hid/Include/standard_hid_core.h | 66 - .../device/hid/Include/std_hid_mouse_core.h | 69 - .../class/device/hid/Include/usb_hid.h | 83 - .../class/device/hid/Source/custom_hid_core.c | 503 - .../device/hid/Source/standard_hid_core.c | 420 - .../device/hid/Source/std_hid_mouse_core.c | 425 - .../class/device/iap/Include/usb_iap_core.h | 82 - .../class/device/iap/Source/usb_iap_core.c | 594 - .../class/device/msc/Include/msc_bbb_scsi.h | 132 - .../class/device/msc/Include/msc_core.h | 86 - .../class/device/msc/Include/msc_mem.h | 60 - .../class/device/msc/Source/msc_bbb_scsi.c | 420 - .../class/device/msc/Source/msc_core.c | 338 - .../device/printer/Include/printer_core.h | 73 - .../device/printer/Source/printer_core.c | 310 - .../device/Include/usb_ch9_std.h | 212 - .../device/Include/usbd_core.h | 332 - .../device/Include/usbd_enum.h | 111 - .../device/Include/usbd_pwr.h | 67 - .../device/Include/usbd_transc.h | 63 - .../device/Source/usbd_core.c | 129 - .../device/Source/usbd_enum.c | 735 - .../device/Source/usbd_pwr.c | 60 - .../device/Source/usbd_transc.c | 207 - .../usbd/Include/usbd_lld_core.h | 73 - .../usbd/Include/usbd_lld_int.h | 48 - .../usbd/Include/usbd_lld_regs.h | 227 - .../usbd/Source/usbd_lld_core.c | 641 - .../usbd/Source/usbd_lld_int.c | 276 - .../Inc/gd32f30x_it.h | 64 - .../Inc/gd32f30x_libopt.h | 67 - Example/EpaperModuleTest_GD32F303/Inc/gpio.h | 24 - .../EpaperModuleTest_GD32F303/Inc/systick.h | 66 - Example/EpaperModuleTest_GD32F303/Inc/usart.h | 17 - .../MDK-ARM/EpaperModuleTest_GD32F303.uvoptx | 826 - .../MDK-ARM/EpaperModuleTest_GD32F303.uvprojx | 1148 - .../MDK-ARM/EventRecorderStub.scvd | 9 - .../EpaperModuleTest_GD32F303-HID_IAP.axf | Bin 254656 -> 0 bytes .../EpaperModuleTest_GD32F303-HID_IAP.hex | 1604 - .../GD32/EpaperModuleTest_GD32F303.axf | Bin 249016 -> 0 bytes .../GD32/EpaperModuleTest_GD32F303.hex | 1363 - .../MDK-ARM/GD32/template.axf | Bin 251020 -> 0 bytes .../MDK-ARM/GD32/template.hex | 1586 - .../MDK-ARM/JLinkSettings.ini | 39 - .../MDK-ARM/RTE/_template/RTE_Components.h | 21 - .../Src/gd32f30x_it.c | 143 - Example/EpaperModuleTest_GD32F303/Src/gpio.c | 19 - Example/EpaperModuleTest_GD32F303/Src/main.c | 379 - .../EpaperModuleTest_GD32F303/Src/systick.c | 145 - Example/EpaperModuleTest_GD32F303/Src/usart.c | 45 - Example/EpaperModuleTest_RaspberryPi/Makefile | 49 + .../EpaperModuleTest_RaspberryPi/README.md | 32 + .../epaper}/bmp.h | 5 + .../epaper/epaper.c | 1193 + .../epaper}/epaper.h | 73 +- .../epaper}/epdfont.h | 4 +- Example/EpaperModuleTest_RaspberryPi/main.c | 538 + Hardware/WeAct-EpaperModule-3.7 Board 3D.step | 76700 ++++++++++++++++ ...eAct-EpaperModule-3.7 Board Shape 外形.pdf | Bin 0 -> 400422 bytes ... => WeAct-EpaperModule-4.2_3.7 SchDoc.pdf} | Bin Images/5.png | Bin 0 -> 119804 bytes readme.md | 3 +- 1029 files changed, 78605 insertions(+), 473918 deletions(-) delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_adc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_bakpr.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_can.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_crc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dac.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dbgmcu.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dma.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dmc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_eint.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_emmc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_fmc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_gpio.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_i2c.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_iwdt.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_misc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_pmu.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_qspi.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_rcm.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_rtc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_sci2c.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_sdio.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_spi.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_tmr.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_usart.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_wwdt.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_adc.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_bakpr.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_can.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_crc.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dac.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dbgmcu.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dma.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dmc.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_eint.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_emmc.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_fmc.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_gpio.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_i2c.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_iwdt.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_misc.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_pmu.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_qspi.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_rcm.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_rtc.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_sci2c.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_sdio.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_spi.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_tmr.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_usart.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_wwdt.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/LICENSE.txt delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armcc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armclang.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armclang_ltm.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_compiler.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_gcc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_iccarm.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_version.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/core_cm3.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Include/apm32f10x.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Include/system_apm32f10x.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/arm/startup_apm32f10x_hd.s delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/arm/startup_apm32f10x_md.s delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/gcc/startup_apm32f10x_hd.s delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/gcc/startup_apm32f10x_md.s delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/iar/startup_apm32f10x_hd.s delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/iar/startup_apm32f10x_md.s delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/system_apm32f10x.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/CDC/inc/usbd_class_cdc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/CDC/src/usbd_class_cdc.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/HID/inc/usbd_class_hid.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/HID/src/usbd_class_hid.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_class_msc.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_msc_bot.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_msc_scsi.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_class_msc.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_msc_bot.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_msc_scsi.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_core.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_init.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_interrupt.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_stdReq.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_core.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_init.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_interrupt.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_stdReq.c delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Driver/inc/drv_usb_device.h delete mode 100644 Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Driver/src/drv_usb_device.c delete mode 100644 Example/EpaperModuleTest_APM32F103/Epaper/bmp.h delete mode 100644 Example/EpaperModuleTest_APM32F103/Epaper/epaper.c delete mode 100644 Example/EpaperModuleTest_APM32F103/Epaper/epdfont.h delete mode 100644 Example/EpaperModuleTest_APM32F103/Inc/apm32f10x_int.h delete mode 100644 Example/EpaperModuleTest_APM32F103/Inc/board.h delete mode 100644 Example/EpaperModuleTest_APM32F103/Inc/main.h delete mode 100644 Example/EpaperModuleTest_APM32F103/Inc/systick.h delete mode 100644 Example/EpaperModuleTest_APM32F103/MDK-ARM/DebugConfig/Target_1_APM32F103CB_1.0.0.dbgconf delete mode 100644 Example/EpaperModuleTest_APM32F103/MDK-ARM/EpaperModuleTest_APM32F103.uvoptx delete mode 100644 Example/EpaperModuleTest_APM32F103/MDK-ARM/EpaperModuleTest_APM32F103.uvprojx delete mode 100644 Example/EpaperModuleTest_APM32F103/MDK-ARM/EventRecorderStub.scvd delete mode 100644 Example/EpaperModuleTest_APM32F103/MDK-ARM/JLinkSettings.ini delete mode 100644 Example/EpaperModuleTest_APM32F103/MDK-ARM/Objects/EpaperModule.axf delete mode 100644 Example/EpaperModuleTest_APM32F103/MDK-ARM/Objects/EpaperModule.hex delete mode 100644 Example/EpaperModuleTest_APM32F103/MDK-ARM/Objects/template.axf delete mode 100644 Example/EpaperModuleTest_APM32F103/MDK-ARM/Objects/template.hex delete mode 100644 Example/EpaperModuleTest_APM32F103/Src/apm32f10x_int.c delete mode 100644 Example/EpaperModuleTest_APM32F103/Src/board.c delete mode 100644 Example/EpaperModuleTest_APM32F103/Src/main.c delete mode 100644 Example/EpaperModuleTest_APM32F103/Src/systick.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_common_tables.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_const_structs.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_helium_utils.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_math.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_mve_tables.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_vec_math.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armcc.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armclang.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armclang_ltm.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_compiler.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_gcc.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_iccarm.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_version.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/core_cm4.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/mpu_armv7.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/mpu_armv8.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/pmu_armv8.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/at32f403a_407.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/at32f403a_407_conf_template.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxC_FLASH.ld delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxE_FLASH.ld delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxG_FLASH.ld delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xC_FLASH.ld delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xE_FLASH.ld delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xG_FLASH.ld delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/startup_at32f403a_407.s delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxC.icf delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxE.icf delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxG.icf delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xC.icf delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xE.icf delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xG.icf delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/startup_at32f403a_407.s delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/mdk/startup_at32f403a_407.s delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/system_at32f403a_407.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/system_at32f403a_407.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/Include/NEMath.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/LICENSE.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/README.md delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/Source/arm_cl_tables.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_sorting.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_vec_fft.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_vec_filtering.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/BasicMathFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u16.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u8.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u16.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u8.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u16.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u8.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u16.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u8.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/BayesFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/arm_gaussian_naive_bayes_predict_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/CommonTables.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_common_tables.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_const_structs.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_mve_tables.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/ComplexMathFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/ControllerFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_sin_cos_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_sin_cos_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/DistanceFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_boolean_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_boolean_distance_template.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_braycurtis_distance_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_canberra_distance_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_chebyshev_distance_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_cityblock_distance_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_correlation_distance_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_cosine_distance_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_dice_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_euclidean_distance_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_hamming_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_jaccard_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_jensenshannon_distance_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_kulsinski_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_minkowski_distance_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_rogerstanimoto_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_russellrao_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_sokalmichener_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_sokalsneath_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_yule_distance.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/FastMathFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sqrt_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sqrt_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_vexp_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_vlog_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/FilteringFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_opt_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_opt_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_opt_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_opt_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_opt_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_opt_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_opt_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_fast_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_fast_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/MatrixFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_inverse_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_inverse_f64.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_fast_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_fast_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/SVMFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_linear_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_linear_predict_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_polynomial_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_polynomial_predict_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_rbf_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_rbf_predict_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_sigmoid_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_sigmoid_predict_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/StatisticsFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_entropy_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_entropy_f64.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_kullback_leibler_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_kullback_leibler_f64.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_logsumexp_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_no_idx_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/SupportFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_barycenter_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_bitonic_sort_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_bubble_sort_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_heap_sort_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_insertion_sort_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_merge_sort_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_merge_sort_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_float.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_float.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_q7.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_float.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_quick_sort_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_selection_sort_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_sort_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_sort_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_spline_interp_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_spline_interp_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_weighted_sum_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/CMakeLists.txt delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/TransformFunctions.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal2.S delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal2.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_f64.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_f64.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix8_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_f64.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_init_f64.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_f32.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_q15.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_q31.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/configDsp.cmake delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/fft.cmake delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/interpol.cmake delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_common_tables.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_const_structs.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_helium_utils.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_math.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_mve_tables.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_vec_math.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_acc.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_adc.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_bpr.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_can.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_crc.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_crm.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_dac.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_debug.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_def.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_dma.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_emac.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_exint.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_flash.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_gpio.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_i2c.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_misc.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_pwc.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_rtc.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_sdio.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_spi.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_tmr.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_usart.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_usb.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_wdt.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_wwdt.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_xmc.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_acc.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_adc.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_bpr.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_can.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_crc.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_crm.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_dac.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_debug.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_dma.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_emac.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_exint.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_flash.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_gpio.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_i2c.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_misc.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_pwc.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_rtc.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_sdio.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_spi.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_tmr.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_usart.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_usb.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_wdt.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_wwdt.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_xmc.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/Epaper/bmp.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/Epaper/epaper.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/Epaper/epaper.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/Epaper/epdfont.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_clock.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_conf.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_int.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/Inc/board.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/Inc/delay.h delete mode 100644 Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvoptx delete mode 100644 Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvprojx delete mode 100644 Example/EpaperModuleTest_AT32F403A/MDK-ARM/EventRecorderStub.scvd delete mode 100644 Example/EpaperModuleTest_AT32F403A/MDK-ARM/JLinkSettings.ini delete mode 100644 Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.axf delete mode 100644 Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.hex delete mode 100644 Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/template.axf delete mode 100644 Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/template.hex delete mode 100644 Example/EpaperModuleTest_AT32F403A/Src/at32f403a_407_clock.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/Src/at32f403a_407_int.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/Src/board.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/Src/delay.c delete mode 100644 Example/EpaperModuleTest_AT32F403A/Src/main.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armcc.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armclang.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armclang_ltm.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_compiler.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_gcc.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_version.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/core_cm3.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/core_cm3.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/Debug/debug.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/Debug/debug.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/Startup/startup_ch32f10x.s delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_adc.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_bkp.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_can.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_crc.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dac.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dbgmcu.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dma.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_exti.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_flash.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_gpio.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_i2c.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_iwdg.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_misc.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_pwr.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_rcc.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_rtc.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_spi.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_tim.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usart.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usb.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usb_host.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_wwdg.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_adc.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_bkp.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_can.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_crc.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dac.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dbgmcu.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dma.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_exti.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_flash.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_gpio.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_i2c.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_iwdg.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_misc.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_pwr.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_rcc.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_rtc.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_spi.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_tim.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usart.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usb.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usb_host.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_wwdg.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/hw_config.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/hw_config.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_conf.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_desc.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_desc.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_endp.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_istr.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_istr.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_prop.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_prop.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_pwr.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_pwr.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_core.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_def.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_init.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_int.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_lib.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_mem.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_regs.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_sil.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_type.h delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_core.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_init.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_int.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_mem.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_regs.c delete mode 100644 Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_sil.c delete mode 100644 Example/EpaperModuleTest_CH32F103/Epaper/epaper.c delete mode 100644 Example/EpaperModuleTest_CH32F103/Epaper/epaper.h delete mode 100644 Example/EpaperModuleTest_CH32F103/Epaper/epdfont.h delete mode 100644 Example/EpaperModuleTest_CH32F103/Inc/board.h delete mode 100644 Example/EpaperModuleTest_CH32F103/Inc/ch32f10x_conf.h delete mode 100644 Example/EpaperModuleTest_CH32F103/Inc/ch32f10x_it.h delete mode 100644 Example/EpaperModuleTest_CH32F103/Inc/system_ch32f10x.h delete mode 100644 Example/EpaperModuleTest_CH32F103/Inc/systick.h delete mode 100644 Example/EpaperModuleTest_CH32F103/MDK-ARM/DebugConfig/Target_1_CH32F103C8_1.0.0.dbgconf delete mode 100644 Example/EpaperModuleTest_CH32F103/MDK-ARM/EpaperModuleTest_CH32F103.uvoptx delete mode 100644 Example/EpaperModuleTest_CH32F103/MDK-ARM/EpaperModuleTest_CH32F103.uvprojx delete mode 100644 Example/EpaperModuleTest_CH32F103/MDK-ARM/JLinkSettings.ini delete mode 100644 Example/EpaperModuleTest_CH32F103/MDK-ARM/Objects/EpaperModuleTest.axf delete mode 100644 Example/EpaperModuleTest_CH32F103/MDK-ARM/Objects/template.axf delete mode 100644 Example/EpaperModuleTest_CH32F103/Src/board.c delete mode 100644 Example/EpaperModuleTest_CH32F103/Src/ch32f10x_it.c delete mode 100644 Example/EpaperModuleTest_CH32F103/Src/main.c delete mode 100644 Example/EpaperModuleTest_CH32F103/Src/system_ch32f10x.c delete mode 100644 Example/EpaperModuleTest_CH32F103/Src/systick.c delete mode 100644 Example/EpaperModuleTest_CH32V103/.template delete mode 100644 Example/EpaperModuleTest_CH32V103/Core/core_riscv.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Core/core_riscv.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Debug/debug.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Debug/debug.h delete mode 100644 Example/EpaperModuleTest_CH32V103/EpaperModuleTest_CH32V103.wvproj delete mode 100644 Example/EpaperModuleTest_CH32V103/Ld/Link.ld delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_adc.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_bkp.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_crc.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_dbgmcu.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_dma.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_exti.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_flash.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_gpio.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_i2c.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_iwdg.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_misc.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_pwr.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_rcc.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_rtc.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_spi.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_tim.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usart.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usb.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usb_host.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_wwdg.h delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_adc.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_bkp.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_crc.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_dbgmcu.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_dma.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_exti.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_flash.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_gpio.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_i2c.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_iwdg.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_misc.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_pwr.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_rcc.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_rtc.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_spi.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_tim.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usart.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usb.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usb_host.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_wwdg.c delete mode 100644 Example/EpaperModuleTest_CH32V103/Startup/startup_ch32v10x.S delete mode 100644 Example/EpaperModuleTest_CH32V103/User/Epaper/bmp.h delete mode 100644 Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.c delete mode 100644 Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.h delete mode 100644 Example/EpaperModuleTest_CH32V103/User/board.c delete mode 100644 Example/EpaperModuleTest_CH32V103/User/board.h delete mode 100644 Example/EpaperModuleTest_CH32V103/User/ch32v10x_conf.h delete mode 100644 Example/EpaperModuleTest_CH32V103/User/ch32v10x_it.c delete mode 100644 Example/EpaperModuleTest_CH32V103/User/ch32v10x_it.h delete mode 100644 Example/EpaperModuleTest_CH32V103/User/main.c delete mode 100644 Example/EpaperModuleTest_CH32V103/User/system_ch32v10x.c delete mode 100644 Example/EpaperModuleTest_CH32V103/User/system_ch32v10x.h delete mode 100644 Example/EpaperModuleTest_CH32V103/User/systick.c delete mode 100644 Example/EpaperModuleTest_CH32V103/User/systick.h delete mode 100644 Example/EpaperModuleTest_GD32F103/Epaper/bmp.h delete mode 100644 Example/EpaperModuleTest_GD32F103/Epaper/epaper.c delete mode 100644 Example/EpaperModuleTest_GD32F103/Epaper/epaper.h delete mode 100644 Example/EpaperModuleTest_GD32F103/Epaper/epdfont.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Include/gd32f10x.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Include/system_gd32f10x.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_cl.s delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_hd.s delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_md.s delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_xd.s delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_cl.s delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_hd.s delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_md.s delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_xd.s delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/system_gd32f10x.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cm3.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cmFunc.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cmInstr.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_adc.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_bkp.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_can.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_crc.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dac.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dbg.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dma.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_enet.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_exmc.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_exti.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_fmc.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_fwdgt.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_gpio.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_i2c.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_misc.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_pmu.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_rcu.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_rtc.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_sdio.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_spi.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_timer.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_usart.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_wwdgt.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_adc.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_bkp.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_can.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_crc.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dac.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dbg.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dma.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_enet.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_exmc.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_exti.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_fmc.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_fwdgt.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_gpio.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_i2c.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_misc.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_pmu.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_rcu.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_rtc.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_sdio.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_spi.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_timer.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_usart.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_wwdgt.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Include/audio_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Include/audio_out_itf.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Source/audio_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Source/audio_out_itf.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/cdc/Include/cdc_acm_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/cdc/Source/cdc_acm_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/dfu/Include/dfu_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/dfu/Source/dfu_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/custom_hid_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/standard_hid_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/usb_hid.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Source/custom_hid_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Source/standard_hid_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/iap/Include/usb_iap_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/iap/Source/usb_iap_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_bbb.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_data.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_mem.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_scsi.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_bbb.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_data.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_scsi.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/printer/Include/printer_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/printer/Source/printer_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usb_ch9_std.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_enum.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_pwr.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_transc.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_enum.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_pwr.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_transc.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_core.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_int.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_regs.h delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Source/usbd_lld_core.c delete mode 100644 Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Source/usbd_lld_int.c delete mode 100644 Example/EpaperModuleTest_GD32F103/Inc/board.h delete mode 100644 Example/EpaperModuleTest_GD32F103/Inc/gd32f10x_it.h delete mode 100644 Example/EpaperModuleTest_GD32F103/Inc/gd32f10x_libopt.h delete mode 100644 Example/EpaperModuleTest_GD32F103/Inc/main.h delete mode 100644 Example/EpaperModuleTest_GD32F103/Inc/systick.h delete mode 100644 Example/EpaperModuleTest_GD32F103/MDK-ARM/EpaperModuleTest_GD32F103.uvoptx delete mode 100644 Example/EpaperModuleTest_GD32F103/MDK-ARM/EpaperModuleTest_GD32F103.uvprojx delete mode 100644 Example/EpaperModuleTest_GD32F103/MDK-ARM/EventRecorderStub.scvd delete mode 100644 Example/EpaperModuleTest_GD32F103/MDK-ARM/JLinkSettings.ini delete mode 100644 Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/EpaperModuleTest_GD32F103.axf delete mode 100644 Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/EpaperModuleTest_GD32F103.hex delete mode 100644 Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/template.axf delete mode 100644 Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/template.hex delete mode 100644 Example/EpaperModuleTest_GD32F103/Src/board.c delete mode 100644 Example/EpaperModuleTest_GD32F103/Src/gd32f10x_it.c delete mode 100644 Example/EpaperModuleTest_GD32F103/Src/main.c delete mode 100644 Example/EpaperModuleTest_GD32F103/Src/systick.c delete mode 100644 Example/EpaperModuleTest_GD32F303/Epaper/bmp.h delete mode 100644 Example/EpaperModuleTest_GD32F303/Epaper/epaper.c delete mode 100644 Example/EpaperModuleTest_GD32F303/Epaper/epaper.h delete mode 100644 Example/EpaperModuleTest_GD32F303/Epaper/epdfont.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Include/gd32f30x.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Include/system_gd32f30x.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_cl.s delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_hd.s delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_xd.s delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_cl.s delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_hd.s delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_xd.s delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/system_gd32f30x.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cm4.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cm4_simd.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cmFunc.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cmInstr.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_adc.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_bkp.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_can.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_crc.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_ctc.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dac.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dbg.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dma.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_enet.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_exmc.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_exti.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_fmc.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_fwdgt.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_gpio.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_i2c.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_misc.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_pmu.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_rcu.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_rtc.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_sdio.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_spi.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_timer.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_usart.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_wwdgt.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_adc.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_bkp.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_can.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_crc.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_ctc.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dac.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dbg.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dma.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_enet.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_exmc.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_exti.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_fmc.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_fwdgt.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_gpio.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_i2c.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_misc.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_pmu.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_rcu.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_rtc.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_sdio.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_spi.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_timer.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_usart.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_wwdgt.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Include/audio_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Include/audio_out_itf.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Source/audio_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Source/audio_out_itf.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/cdc/Include/cdc_acm_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/cdc/Source/cdc_acm_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/dfu/Include/dfu_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/dfu/Source/dfu_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/custom_hid_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/standard_hid_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/std_hid_mouse_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/usb_hid.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/custom_hid_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/standard_hid_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/std_hid_mouse_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/iap/Include/usb_iap_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/iap/Source/usb_iap_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_bbb_scsi.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_mem.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Source/msc_bbb_scsi.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Source/msc_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/printer/Include/printer_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/printer/Source/printer_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usb_ch9_std.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_enum.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_pwr.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_transc.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_enum.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_pwr.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_transc.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_core.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_int.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_regs.h delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Source/usbd_lld_core.c delete mode 100644 Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Source/usbd_lld_int.c delete mode 100644 Example/EpaperModuleTest_GD32F303/Inc/gd32f30x_it.h delete mode 100644 Example/EpaperModuleTest_GD32F303/Inc/gd32f30x_libopt.h delete mode 100644 Example/EpaperModuleTest_GD32F303/Inc/gpio.h delete mode 100644 Example/EpaperModuleTest_GD32F303/Inc/systick.h delete mode 100644 Example/EpaperModuleTest_GD32F303/Inc/usart.h delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/EpaperModuleTest_GD32F303.uvoptx delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/EpaperModuleTest_GD32F303.uvprojx delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/EventRecorderStub.scvd delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32 HID_IAP/EpaperModuleTest_GD32F303-HID_IAP.axf delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32 HID_IAP/EpaperModuleTest_GD32F303-HID_IAP.hex delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/EpaperModuleTest_GD32F303.axf delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/EpaperModuleTest_GD32F303.hex delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/template.axf delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/template.hex delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/JLinkSettings.ini delete mode 100644 Example/EpaperModuleTest_GD32F303/MDK-ARM/RTE/_template/RTE_Components.h delete mode 100644 Example/EpaperModuleTest_GD32F303/Src/gd32f30x_it.c delete mode 100644 Example/EpaperModuleTest_GD32F303/Src/gpio.c delete mode 100644 Example/EpaperModuleTest_GD32F303/Src/main.c delete mode 100644 Example/EpaperModuleTest_GD32F303/Src/systick.c delete mode 100644 Example/EpaperModuleTest_GD32F303/Src/usart.c create mode 100644 Example/EpaperModuleTest_RaspberryPi/Makefile create mode 100644 Example/EpaperModuleTest_RaspberryPi/README.md rename Example/{EpaperModuleTest_CH32F103/Epaper => EpaperModuleTest_RaspberryPi/epaper}/bmp.h (99%) create mode 100644 Example/EpaperModuleTest_RaspberryPi/epaper/epaper.c rename Example/{EpaperModuleTest_APM32F103/Epaper => EpaperModuleTest_RaspberryPi/epaper}/epaper.h (70%) rename Example/{EpaperModuleTest_CH32V103/User/Epaper => EpaperModuleTest_RaspberryPi/epaper}/epdfont.h (99%) create mode 100644 Example/EpaperModuleTest_RaspberryPi/main.c create mode 100644 Hardware/WeAct-EpaperModule-3.7 Board 3D.step create mode 100644 Hardware/WeAct-EpaperModule-3.7 Board Shape 外形.pdf rename Hardware/{WeAct-EpaperModule-4.2 SchDoc.pdf => WeAct-EpaperModule-4.2_3.7 SchDoc.pdf} (100%) create mode 100644 Images/5.png diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_adc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_adc.h deleted file mode 100644 index c154cbf..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_adc.h +++ /dev/null @@ -1,346 +0,0 @@ -/*! - * @file apm32f10x_adc.h - * - * @brief This file contains all the functions prototypes for the ADC firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_ADC_H -#define __APM32F10X_ADC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup ADC_Driver ADC Driver - @{ -*/ - -/** @addtogroup ADC_Enumerations Enumerations - @{ -*/ - -/** - * @brief ADC configuration Mode - */ -typedef enum -{ - ADC_MODE_INDEPENDENT = ((uint32_t)0x00000000), //!< Independent mode - ADC_MODE_REG_INJEC_SIMULT = ((uint32_t)0x00010000), //!< Combined regular simultaneous and injected simultaneous mode - ADC_MODE_REG_SIMULT_ALTER_TRIG = ((uint32_t)0x00020000), //!< Combined regular simultaneous and alternate trigger mode - ADC_MODE_INJEC_SIMULT_FAST_TNTERL = ((uint32_t)0x00030000), //!< Combined injected simultaneous and fast interleaved mode - ADC_MODE_INJEC_SIMULT_SLOW_INTERL = ((uint32_t)0x00040000), //!< Combined injected simultaneous and slow interleaved mode - ADC_MODE_INJEC_SIMULT = ((uint32_t)0x00050000), //!< Injected simultaneous mode - ADC_MODE_REG_SIMULT = ((uint32_t)0x00060000), //!< Regular simultaneous mode - ADC_MODE_FAST_INTERL = ((uint32_t)0x00070000), //!< Fast interleaved mode - ADC_MODE_SLOW_INTERL = ((uint32_t)0x00080000), //!< Slow interleaved mode - ADC_MODE_ALTER_TRIG = ((uint32_t)0x00090000) //!< Alternate trigger mode -} ADC_MODE_T; - -/** - * @brief ADC external trigger sources for regular channels conversion enumeration - */ -typedef enum -{ - ADC_EXT_TRIG_CONV_TMR1_CC1 = ((uint32_t)0x00000000), - ADC_EXT_TRIG_CONV_TMR1_CC2 = ((uint32_t)0x00020000), - ADC_EXT_TRIG_CONV_TMR2_CC2 = ((uint32_t)0x00060000), - ADC_EXT_TRIG_CONV_TMR3_TRGO = ((uint32_t)0x00080000), - ADC_EXT_TRIG_CONV_TMR4_CC4 = ((uint32_t)0x000A0000), - ADC_EXT_TRIG_CONV_EINT9_T8_TRGO = ((uint32_t)0x000C0000), - ADC_EXT_TRIG_CONV_TMR1_CC3 = ((uint32_t)0x00040000), - ADC_EXT_TRIG_CONV_None = ((uint32_t)0x000E0000), - - ADC_EXT_TRIG_CONV_TMR3_CC1 = ((uint32_t)0x00000000), - ADC_EXT_TRIG_CONV_TMR2_CC3 = ((uint32_t)0x00020000), - ADC_EXT_TRIG_CONV_TMR8_CC1 = ((uint32_t)0x00060000), - ADC_EXT_TRIG_CONV_TMR8_TRGO = ((uint32_t)0x00080000), - ADC_EXT_TRIG_CONV_TMR5_CC1 = ((uint32_t)0x000A0000), - ADC_EXT_TRIG_CONV_TMR5_CC3 = ((uint32_t)0x000C0000) -} ADC_EXT_TRIG_CONV_T; - -/** - * @brief ADC Data Align - */ -typedef enum -{ - ADC_DATA_ALIGN_RIGHT = 0x00000000, - ADC_DATA_ALIGN_LEFT = 0x00000800 -} ADC_DATA_ALIGN_T; - -/** - * @brief ADC Channels - */ -typedef enum -{ - ADC_CHANNEL_0 = ((uint8_t)0x00), - ADC_CHANNEL_1 = ((uint8_t)0x01), - ADC_CHANNEL_2 = ((uint8_t)0x02), - ADC_CHANNEL_3 = ((uint8_t)0x03), - ADC_CHANNEL_4 = ((uint8_t)0x04), - ADC_CHANNEL_5 = ((uint8_t)0x05), - ADC_CHANNEL_6 = ((uint8_t)0x06), - ADC_CHANNEL_7 = ((uint8_t)0x07), - ADC_CHANNEL_8 = ((uint8_t)0x08), - ADC_CHANNEL_9 = ((uint8_t)0x09), - ADC_CHANNEL_10 = ((uint8_t)0x0A), - ADC_CHANNEL_11 = ((uint8_t)0x0B), - ADC_CHANNEL_12 = ((uint8_t)0x0C), - ADC_CHANNEL_13 = ((uint8_t)0x0D), - ADC_CHANNEL_14 = ((uint8_t)0x0E), - ADC_CHANNEL_15 = ((uint8_t)0x0F), - ADC_CHANNEL_16 = ((uint8_t)0x10), - ADC_CHANNEL_TEMP_SENSOR = ((uint8_t)0x10), - ADC_CHANNEL_17 = ((uint8_t)0x11), - ADC_CHANNEL_V_REFINT = ((uint8_t)0x11) -} ADC_CHANNEL_T; - -/** - * @brief ADC Sampling Time - */ -typedef enum -{ - ADC_SAMPLETIME_1CYCLES5 = ((uint8_t)0x00), - ADC_SAMPLETIME_7CYCLES5 = ((uint8_t)0x01), - ADC_SAMPLETIME_13CYCLES5 = ((uint8_t)0x02), - ADC_SAMPLETIME_28CYCLES5 = ((uint8_t)0x03), - ADC_SAMPLETIME_41CYCLES5 = ((uint8_t)0x04), - ADC_SAMPLETIME_55CYCLES5 = ((uint8_t)0x05), - ADC_SAMPLETIME_71CYCLES5 = ((uint8_t)0x06), - ADC_SAMPLETIME_239CYCLES5 = ((uint8_t)0x07) -} ADC_SAMPLETIME_T; - -/** - * @brief ADC external trigger sources for injected channels conversion - */ -typedef enum -{ - /** for ADC1 and ADC2 */ - ADC_EXT_TRIG_INJEC_CONV_TMR2_TRGO = ((uint8_t)0x02), - ADC_EXT_TRIG_INJEC_CONV_TMR2_CC1 = ((uint8_t)0x03), - ADC_EXT_TRIG_INJEC_CONV_TMR3_CC4 = ((uint8_t)0x04), - ADC_EXT_TRIG_INJEC_CONV_TMR4_TRGO = ((uint8_t)0x05), - ADC_EXT_TRIG_INJEC_CONV_EINT15_T8_CC4 = ((uint8_t)0x06), - - /** for ADC1, ADC2 and ADC3 */ - ADC_EXT_TRIG_INJEC_CONV_TMR1_TRGO = ((uint8_t)0x00), - ADC_EXT_TRIG_INJEC_CONV_TMR1_CC4 = ((uint8_t)0x01), - ADC_EXT_TRIG_INJEC_CONV_NONE = ((uint8_t)0x07), - - /** for ADC3 only */ - ADC_EXT_TRIG_INJEC_CONV_TMR4_CC3 = ((uint8_t)0x02), - ADC_EXT_TRIG_INJEC_CONV_TMR8_CC2 = ((uint8_t)0x03), - ADC_EXT_TRIG_INJEC_CONV_TMR8_CC4 = ((uint8_t)0x04), - ADC_EXT_TRIG_INJEC_CONV_TMR5_TRGO = ((uint8_t)0x05), - ADC_EXT_TRIG_INJEC_CONV_TMR5_CC4 = ((uint8_t)0x06) -} ADC_EXT_TRIG_INJEC_CONV_T; - -/** - * @brief ADC Injected channels - */ -typedef enum -{ - ADC_INJEC_CHANNEL_1 = ((uint8_t)0x14), - ADC_INJEC_CHANNEL_2 = ((uint8_t)0x18), - ADC_INJEC_CHANNEL_3 = ((uint8_t)0x1C), - ADC_INJEC_CHANNEL_4 = ((uint8_t)0x20) -} ADC_INJEC_CHANNEL_T; - -/** - * @brief ADC Analog Watchdog Selection - */ -typedef enum -{ - ADC_ANALOG_WATCHDOG_SINGLE_REG = ((uint32_t)0x00800200), - ADC_ANALOG_WATCHDOG_SINGLE_INJEC = ((uint32_t)0x00400200), - ADC_ANALOG_WATCHDOG_SINGLE_REG_INJEC = ((uint32_t)0x00C00200), - ADC_ANALOG_WATCHDOG_ALL_REG = ((uint32_t)0x00800000), - ADC_ANALOG_WATCHDOG_ALL_INJEC = ((uint32_t)0x00400000), - ADC_ANALOG_WATCHDOG_ALL_REG_ALL_INJEC = ((uint32_t)0x00C00000), - ADC_ANALOG_WATCHDOG_NONE = ((uint32_t)0x00000000) -} ADC_ANALOG_WATCHDOG_T; - -/** - * @brief ADC Interrupt definition - */ -typedef enum -{ - ADC_INT_AWD = ((uint16_t)0x0140), //!< Analog Watchdog interrupt - ADC_INT_EOC = ((uint16_t)0x0220), //!< End Of Conversion interrupt - ADC_INT_INJEOC = ((uint16_t)0x0480) //!< Injected Channel End Of Conversion interrupt -} ADC_INT_T; - -/** - * @brief ADC Flag - */ -typedef enum -{ - ADC_FLAG_AWD = ((uint8_t)0x01), //!< Analog Watchdog event occur flag - ADC_FLAG_EOC = ((uint8_t)0x02), //!< End Of Conversion flag - ADC_FLAG_INJEOC = ((uint8_t)0x04), //!< Injected Channel End Of Conversion flag - ADC_FLAG_INJCS = ((uint8_t)0x08), //!< Injected Channel Conversion Start flag - ADC_FLAG_REGCS = ((uint8_t)0x10) //!< Regular Channel Conversion Start flag -} ADC_FLAG_T; - -/**@} end of group ADC_Enumerations*/ - - -/** @addtogroup ADC_Macros Macros - @{ -*/ - -/** ADC_IJD Offset */ -#define INJDATA_OFFSET ((uint8_t)0x28) - -/** ADC_RDG register address */ -#define RDG_ADDRESS ((uint32_t)0x4001244C) - -/** INJSEQ register config */ -#define INJSEQ_SET_INJSEQC ((uint32_t)0x0000001F) -#define INJSEQ_SET_INJSEQLEN ((uint32_t)0x00300000) - -/** SMPTIM register SET */ -#define SMPCYCCFG_SET_SMPTIM1 ((uint32_t)0x00000007) -#define SMPCYCCFG_SET_SMPTIM2 ((uint32_t)0x00000007) - -/** REGSEQ register SET */ -#define REGSEQC_SET_REGSEQ3 ((uint32_t)0x0000001F) -#define REGSEQC_SET_REGSEQ2 ((uint32_t)0x0000001F) -#define REGSEQC_SET_REGSEQ1 ((uint32_t)0x0000001F) - -/**@} end of group ADC_Macros*/ - - -/** @addtogroup ADC_Structure Data Structure - @{ -*/ - -/** - * @brief ADC Config structure definition - */ -typedef struct -{ - ADC_MODE_T mode; - uint8_t scanConvMode; //!< This parameter can be ENABLE or DISABLE. - uint8_t continuosConvMode; //!< This parameter can be ENABLE or DISABLE. - ADC_EXT_TRIG_CONV_T externalTrigConv; - ADC_DATA_ALIGN_T dataAlign; - uint8_t nbrOfChannel; //!< This parameter must range from 1 to 16. -} ADC_Config_T; - -/**@} end of group ADC_Structure*/ - - -/** @addtogroup ADC_Fuctions Fuctions - @{ -*/ - -/** ADC reset and common configuration */ -void ADC_Reset(ADC_T* adc); -void ADC_Config(ADC_T* adc, ADC_Config_T* adcConfig); -void ADC_ConfigStructInit(ADC_Config_T* adcConfig); -void ADC_ConfigRegularChannel(ADC_T* adc, uint8_t channel,uint8_t rank, uint8_t sampleTime); -void ADC_Enable(ADC_T* adc); -void ADC_Disable(ADC_T* adc); - -/** ADC for DMA */ -void ADC_EnableDMA(ADC_T* adc); -void ADC_DisableDMA(ADC_T* adc); - -/** ADC Calibration */ -void ADC_ResetCalibration(ADC_T* adc); -uint8_t ADC_ReadResetCalibrationStatus(ADC_T* adc); -void ADC_StartCalibration(ADC_T* adc); -uint8_t ADC_ReadCalibrationStartFlag(ADC_T* adc); - -/** ADC software start conversion */ -void ADC_EnableSoftwareStartConv(ADC_T* adc); -void ADC_DisableSoftwareStartConv(ADC_T* adc); -uint8_t ADC_ReadSoftwareStartConvStatus(ADC_T* adc); - -/** ADC Discontinuous mode */ -void ADC_ConfigDiscMode(ADC_T* adc, uint8_t number); -void ADC_EnableDiscMode(ADC_T* adc); -void ADC_DisableDiscMode(ADC_T* adc); - -/** ADC External trigger conversion */ -void ADC_EnableExternalTrigConv(ADC_T* adc); -void ADC_DisableExternalTrigConv(ADC_T* adc); - -/** ADC Conversion result */ -uint16_t ADC_ReadConversionValue(ADC_T* adc); -uint32_t ADC_ReadDualModeConversionValue(ADC_T* adc); - -/** ADC Automatic injected group */ -void ADC_EnableAutoInjectedConv(ADC_T* adc); -void ADC_DisableAutoInjectedConv(ADC_T* adc); -void ADC_EnableInjectedDiscMode(ADC_T* adc); -void ADC_DisableInjectedDiscMode(ADC_T* adc); - -/** ADC External trigger for injected channels conversion */ -void ADC_ConfigExternalTrigInjectedConv(ADC_T* adc, ADC_EXT_TRIG_INJEC_CONV_T extTrigInjecConv); -void ADC_EnableExternalTrigInjectedConv(ADC_T* adc); -void ADC_DisableExternalTrigInjectedConv(ADC_T* adc); - -/** ADC Start of the injected channels conversion */ -void ADC_EnableSoftwareStartInjectedConv(ADC_T* adc); -void ADC_DisableSoftwareStartInjectedConv(ADC_T* adc); -uint8_t ADC_ReadSoftwareStartInjectedConvStatus(ADC_T* adc); - -/** ADC injected channel */ -void ADC_ConfigInjectedChannel(ADC_T* adc, uint8_t channel, uint8_t rank, uint8_t sampleTime); -void ADC_ConfigInjectedSequencerLength(ADC_T* adc, uint8_t length); -void ADC_ConfigInjectedOffset(ADC_T* adc, ADC_INJEC_CHANNEL_T channel, uint16_t offSet); -uint16_t ADC_ReadInjectedConversionValue(ADC_T* adc, ADC_INJEC_CHANNEL_T channel); - -/** ADC analog watchdog */ -void ADC_EnableAnalogWatchdog(ADC_T* adc, uint32_t analogWatchdog); -void ADC_DisableAnalogWatchdog(ADC_T* adc); -void ADC_ConfigAnalogWatchdogThresholds(ADC_T* adc, uint16_t highThreshold, uint16_t lowThreshold); -void ADC_ConfigAnalogWatchdogSingleChannel(ADC_T* adc, uint8_t channel); - -/** ADC temperature sensor */ -void ADC_EnableTempSensorVrefint(ADC_T* adc); -void ADC_DisableTempSensorVrefint(ADC_T* adc); - -/** Interrupt and flag */ -void ADC_EnableInterrupt(ADC_T* adc, uint16_t interrupt); -void ADC_DisableInterrupt(ADC_T* adc, uint16_t interrupt); -uint8_t ADC_ReadStatusFlag(ADC_T* adc, ADC_FLAG_T flag); -void ADC_ClearStatusFlag(ADC_T* adc, uint8_t flag); -uint8_t ADC_ReadIntFlag(ADC_T* adc, ADC_INT_T flag); -void ADC_ClearIntFlag(ADC_T* adc, uint16_t flag); - -/**@} end of group ADC_Fuctions*/ -/**@} end of group ADC_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /** __APM32F10X_ADC_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_bakpr.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_bakpr.h deleted file mode 100644 index 874d621..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_bakpr.h +++ /dev/null @@ -1,149 +0,0 @@ -/*! - * @file apm32f10x_bakr.h - * - * @brief This file contains all the functions prototypes for the BAKPR firmware library. - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_BAKPR_H -#define __APM32F10X_BAKPR_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup BAKPR_Driver BAKPR Driver - @{ -*/ - -/** @addtogroup BAKPR_Enumerations Enumerations - @{ -*/ - -/** - * @brief BAKPR TAMPER Pin Active Level - */ -typedef enum -{ - BAKPR_TAMPER_PIN_LEVEL_HIGH, - BAKPR_TAMPER_PIN_LEVEL_LOW -} BAKPR_TAMPER_PIN_LEVEL_T; - -/** - * @brief BAKPR RTC output source - */ -typedef enum -{ - BAKPR_RTC_OUTPUT_SOURCE_NONE, - BAKPR_RTC_OUTPUT_SOURCE_CALIBRATION_CLOCK, - BAKPR_RTC_OUTPUT_SOURCE_ALARM, - BAKPR_RTC_OUTPUT_SOURCE_SECOND -} BAKPR_RTC_OUTPUT_SOURCE_T; - -/** - * @brief BAKPR DATA register Addr - */ -typedef enum -{ - BAKPR_DATA1 = ((uint16_t)0x0004), - BAKPR_DATA2 = ((uint16_t)0x0008), - BAKPR_DATA3 = ((uint16_t)0x000C), - BAKPR_DATA4 = ((uint16_t)0x0010), - BAKPR_DATA5 = ((uint16_t)0x0014), - BAKPR_DATA6 = ((uint16_t)0x0018), - BAKPR_DATA7 = ((uint16_t)0x001C), - BAKPR_DATA8 = ((uint16_t)0x0020), - BAKPR_DATA9 = ((uint16_t)0x0024), - BAKPR_DATA10 = ((uint16_t)0x0028), - BAKPR_DATA11 = ((uint16_t)0x0040), - BAKPR_DATA12 = ((uint16_t)0x0044), - BAKPR_DATA13 = ((uint16_t)0x0048), - BAKPR_DATA14 = ((uint16_t)0x004C), - BAKPR_DATA15 = ((uint16_t)0x0050), - BAKPR_DATA16 = ((uint16_t)0x0054), - BAKPR_DATA17 = ((uint16_t)0x0058), - BAKPR_DATA18 = ((uint16_t)0x005C), - BAKPR_DATA19 = ((uint16_t)0x0060), - BAKPR_DATA20 = ((uint16_t)0x0064), - BAKPR_DATA21 = ((uint16_t)0x0068), - BAKPR_DATA22 = ((uint16_t)0x006C), - BAKPR_DATA23 = ((uint16_t)0x0070), - BAKPR_DATA24 = ((uint16_t)0x0074), - BAKPR_DATA25 = ((uint16_t)0x0078), - BAKPR_DATA26 = ((uint16_t)0x007C), - BAKPR_DATA27 = ((uint16_t)0x0080), - BAKPR_DATA28 = ((uint16_t)0x0084), - BAKPR_DATA29 = ((uint16_t)0x0088), - BAKPR_DATA30 = ((uint16_t)0x008C), - BAKPR_DATA31 = ((uint16_t)0x0090), - BAKPR_DATA32 = ((uint16_t)0x0094), - BAKPR_DATA33 = ((uint16_t)0x0098), - BAKPR_DATA34 = ((uint16_t)0x009C), - BAKPR_DATA35 = ((uint16_t)0x00A0), - BAKPR_DATA36 = ((uint16_t)0x00A4), - BAKPR_DATA37 = ((uint16_t)0x00A8), - BAKPR_DATA38 = ((uint16_t)0x00AC), - BAKPR_DATA39 = ((uint16_t)0x00B0), - BAKPR_DATA40 = ((uint16_t)0x00B4), - BAKPR_DATA41 = ((uint16_t)0x00B8), - BAKPR_DATA42 = ((uint16_t)0x00BC) -} BAKPR_DATA_T; - -/**@} end of group BAKPR_Enumerations*/ - - -/** @addtogroup BAKPR_Fuctions Fuctions - @{ -*/ - -/** BAKPR reset and configuration */ -void BAKPR_Reset(void); -void BAKPR_ConfigTamperPinLevel(BAKPR_TAMPER_PIN_LEVEL_T value); -void BAKPR_EnableTamperPin(void); -void BAKPR_DisableTamperPin(void); -void BAKPR_ConfigRTCOutput(BAKPR_RTC_OUTPUT_SOURCE_T soure); -void BAKPR_ConfigRTCCalibrationValue(uint8_t calibrationValue); -void BAKPR_ConfigBackupRegister(BAKPR_DATA_T bakrData, uint16_t data); -uint16_t BAKPR_ReadBackupRegister(BAKPR_DATA_T bakrData); - -/** Interrupts and flags */ -void BAKPR_EnableInterrupt(void); -void BAKPR_DisableInterrupt(void); -uint8_t BAKPR_ReadStatusFlag(void); -void BAKPR_ClearStatusFlag(void); -uint8_t BAKPR_ReadIntFlag(void); -void BAKPR_ClearIntFlag(void); - -/**@} end of group BAKPR_Fuctions*/ -/**@} end of group BAKPR_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_BAKPR_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_can.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_can.h deleted file mode 100644 index cd676d4..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_can.h +++ /dev/null @@ -1,349 +0,0 @@ -/*! - * @file apm32f10x_can.h - * - * @brief This file contains all the functions prototypes for the CAN firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_CAN_H -#define __APM32F10X_CAN_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup CAN_Driver CAN Driver - @{ -*/ - -/** @addtogroup CAN_Enumerations Enumerations - @{ -*/ - -/** - * @brief CAN mode - */ -typedef enum -{ - CAN_MODE_NORMAL = ((uint8_t)0x00), //!< normal mode - CAN_MODE_LOOPBACK = ((uint8_t)0x01), //!< loopback mode - CAN_MODE_SILENT = ((uint8_t)0x02), //!< silent mode - CAN_MODE_SILENT_LOOPBACK = ((uint8_t)0x03) //!< loopback combined with silent mode -} CAN_MODE_T; - -/** - * @brief CAN synchronisation jump width - */ -typedef enum -{ - CAN_SJW_1 = ((uint8_t)0x00), //!< 1 time quantum - CAN_SJW_2 = ((uint8_t)0x01), //!< 2 time quantum - CAN_SJW_3 = ((uint8_t)0x02), //!< 3 time quantum - CAN_SJW_4 = ((uint8_t)0x03) //!< 4 time quantum -} CAN_SJW_T; - -/** - * @brief CAN time quantum in bit segment 1 - */ -typedef enum -{ - CAN_TIME_SEGMENT1_1 = ((uint8_t)0x00), //!< 1 time quanta - CAN_TIME_SEGMENT1_2 = ((uint8_t)0x01), //!< 2 time quanta - CAN_TIME_SEGMENT1_3 = ((uint8_t)0x02), //!< 3 time quanta - CAN_TIME_SEGMENT1_4 = ((uint8_t)0x03), //!< 4 time quanta - CAN_TIME_SEGMENT1_5 = ((uint8_t)0x04), //!< 5 time quanta - CAN_TIME_SEGMENT1_6 = ((uint8_t)0x05), //!< 6 time quanta - CAN_TIME_SEGMENT1_7 = ((uint8_t)0x06), //!< 7 time quanta - CAN_TIME_SEGMENT1_8 = ((uint8_t)0x07), //!< 8 time quanta - CAN_TIME_SEGMENT1_9 = ((uint8_t)0x08), //!< 9 time quanta - CAN_TIME_SEGMENT1_10 = ((uint8_t)0x09), //!< 10 time quanta - CAN_TIME_SEGMENT1_11 = ((uint8_t)0x0A), //!< 11 time quanta - CAN_TIME_SEGMENT1_12 = ((uint8_t)0x0B), //!< 12 time quanta - CAN_TIME_SEGMENT1_13 = ((uint8_t)0x0C), //!< 13 time quanta - CAN_TIME_SEGMENT1_14 = ((uint8_t)0x0D), //!< 14 time quanta - CAN_TIME_SEGMENT1_15 = ((uint8_t)0x0E), //!< 15 time quanta - CAN_TIME_SEGMENT1_16 = ((uint8_t)0x0F) //!< 16 time quanta -} CAN_TIME_SEGMENT1_T; - -/** - * @brief CAN time quantum in bit segment 2 - */ -typedef enum -{ - CAN_TIME_SEGMENT2_1 = (uint8_t)0x00, //!< 1 time quanta - CAN_TIME_SEGMENT2_2 = (uint8_t)0x01, //!< 2 time quanta - CAN_TIME_SEGMENT2_3 = (uint8_t)0x02, //!< 3 time quanta - CAN_TIME_SEGMENT2_4 = (uint8_t)0x03, //!< 4 time quanta - CAN_TIME_SEGMENT2_5 = (uint8_t)0x04, //!< 5 time quanta - CAN_TIME_SEGMENT2_6 = (uint8_t)0x05, //!< 6 time quanta - CAN_TIME_SEGMENT2_7 = (uint8_t)0x06, //!< 7 time quanta - CAN_TIME_SEGMENT2_8 = (uint8_t)0x07 //!< 8 time quanta -} CAN_TIME_SEGMENT2_T; - -/** - * @brief CAN filter FIFO - */ -typedef enum -{ - CAN_FILTER_FIFO_0 = ((uint8_t)0x00), //!< filter FIFO 0 - CAN_FILTER_FIFO_1 = ((uint8_t)0x01) //!< filter FIFO 1 -} CAN_FILTER_FIFO_T; - -/** - * @brief CAN filter mode - */ -typedef enum -{ - CAN_FILTER_MODE_IDMASK = ((uint8_t)0x00),//!< identifier/mask mode - CAN_FILTER_MODE_IDLIST = ((uint8_t)0x01) //!< identifier list mode -} CAN_FILTER_MODE_T; - -/** - * @brief CAN filter scale - */ -typedef enum -{ - CAN_FILTER_SCALE_16BIT = ((uint8_t)0x00), //!< Two 16-bit filters - CAN_FILTER_SCALE_32BIT = ((uint8_t)0x01) //!< One 32-bit filter -} CAN_FILTER_SCALE_T; - -/** - * @brief CAN identifier type - */ -typedef enum -{ - CAN_TYPEID_STD = ((uint32_t)0x00000000), //!< Standard Id - CAN_TYPEID_EXT = ((uint32_t)0x00000004) //!< Extended Id -} CAN_TYPEID_T; - -/** - * @brief CAN_remote_transmission_request - */ -typedef enum -{ - CAN_RTXR_DATA = ((uint32_t)0x00000000), //!< Data frame - CAN_RTXR_REMOTE = ((uint32_t)0x00000002) //!< Remote frame -} CAN_RTXR_T; - -/** - * @brief Mailboxes definition - */ -typedef enum -{ - CAN_TX_MAILBIX_0 = ((uint8_t)0x00), //!< Tx mailbox0 - CAN_TX_MAILBIX_1 = ((uint8_t)0x01), //!< Tx mailbox1 - CAN_TX_MAILBIX_2 = ((uint8_t)0x02) //!< Tx mailbox2 -} CAN_TX_MAILBIX_T; - -/** - * @brief CAN receive FIFO number constants - */ -typedef enum -{ - CAN_RX_FIFO_0 = ((uint8_t)0x00), //!< receive FIFO 0 - CAN_RX_FIFO_1 = ((uint8_t)0x01) //!< receive FIFO 1 -} CAN_RX_FIFO_T; - -/** - * @brief CAN Operating Mode - */ -typedef enum -{ - CAN_OPERATING_MODE_INIT = ((uint8_t)0x00), //!< Initialization mode - CAN_OPERATING_MODE_NORMAL = ((uint8_t)0x01), //!< Normal mode - CAN_OPERATING_MODE_SLEEP = ((uint8_t)0x02) //!< sleep mode -} CAN_OPERATING_MODE_T; - -/** - * @brief CAN Interrupts - */ -typedef enum -{ - CAN_INT_TXME = ((uint32_t)0x00000001), //!< Transmit mailbox empty Interrupt - CAN_INT_F0MP = ((uint32_t)0x00000002), //!< FIFO 0 message pending Interrupt - CAN_INT_F0FULL = ((uint32_t)0x00000004), //!< FIFO 0 full Interrupt - CAN_INT_F0OVR = ((uint32_t)0x00000008), //!< FIFO 0 overrun Interrupt - CAN_INT_F1MP = ((uint32_t)0x00000010), //!< FIFO 1 message pending Interrupt - CAN_INT_F1FULL = ((uint32_t)0x00000020), //!< FIFO 1 full Interrupt - CAN_INT_F1OVR = ((uint32_t)0x00000040), //!< FIFO 1 overrun Interrupt - CAN_INT_ERRW = ((uint32_t)0x00000100), //!< Error warning Interrupt - CAN_INT_ERRP = ((uint32_t)0x00000200), //!< Error passive Interrupt - CAN_INT_BOF = ((uint32_t)0x00000400), //!< Bus-off Interrupt - CAN_INT_LEC = ((uint32_t)0x00000800), //!< Last error record code Interrupt - CAN_INT_ERR = ((uint32_t)0x00008000), //!< Error Interrupt - CAN_INT_WUP = ((uint32_t)0x00010000), //!< Wake-up Interrupt - CAN_INT_SLEEP = ((uint32_t)0x00020000) //!< Sleep acknowledge Interrupt -} CAN_INT_T; - -/** - * @brief CAN Flags - */ -typedef enum -{ - /** Error flag*/ - CAN_FLAG_ERRW = ((uint32_t)0x10F00001), //!< Error Warning Flag - CAN_FLAG_ERRP = ((uint32_t)0x10F00002), //!< Error Passive Flag - CAN_FLAG_BOF = ((uint32_t)0x10F00004), //!< Bus-Off Flag - CAN_FLAG_LERRC = ((uint32_t)0x30F00070), //!< Last error record code Flag - /** Operating Mode Flags */ - CAN_FLAG_WUPI = ((uint32_t)0x31000008), //!< Wake up Flag - CAN_FLAG_SLEEP = ((uint32_t)0x31000012), //!< Sleep acknowledge Flag - /** Receive Flags */ - CAN_FLAG_F0MP = ((uint32_t)0x12000003), //!< FIFO 0 Message Pending Flag - CAN_FLAG_F0FULL = ((uint32_t)0x32000008), //!< FIFO 0 Full Flag - CAN_FLAG_F0OVR = ((uint32_t)0x32000010), //!< FIFO 0 Overrun Flag - CAN_FLAG_F1MP = ((uint32_t)0x14000003), //!< FIFO 1 Message Pending Flag - CAN_FLAG_F1FULL = ((uint32_t)0x34000008), //!< FIFO 1 Full Flag - CAN_FLAG_F1OVR = ((uint32_t)0x34000010), //!< FIFO 1 Overrun Flag - /** Transmit Flags */ - CAN_FLAG_REQC0 = ((uint32_t)0x38000001), //!< Request MailBox0 Flag - CAN_FLAG_REQC1 = ((uint32_t)0x38000100), //!< Request MailBox1 Flag - CAN_FLAG_REQC2 = ((uint32_t)0x38010000) //!< Request MailBox2 Flag -} CAN_FLAG_T; - -/**@} end of group CAN_Enumerations*/ - - -/** - * @brief CAN Config structure definition - */ - -/** - * @brief CAN config structure definition - */ -typedef struct -{ - uint8_t autoBusOffManage; //!< Enable or disable the automatic bus-off management. - uint8_t autoWakeUpMode; //!< Enable or disable the automatic wake-up mode. - uint8_t nonAutoRetran; //!< Enable or disable the non-automatic retransmission mode. - uint8_t rxFIFOLockMode; //!< Enable or disable the Receive FIFO Locked mode. - uint8_t txFIFOPriority; //!< Enable or disable the transmit FIFO priority. - CAN_MODE_T mode; //!< Specifies the CAN operating mode. - CAN_SJW_T syncJumpWidth; /** Specifies the maximum number of time quanta the CAN hardware - * is allowed to lengthen or shorten a bit to perform resynchronization. - */ - CAN_TIME_SEGMENT1_T timeSegment1; //!< Specifies the number of time quanta in Bit Segment 1. - CAN_TIME_SEGMENT2_T timeSegment2; //!< Specifies the number of time quanta in Bit Segment 2. - uint16_t prescaler; //!< Specifies the length of a time quantum. It can be 1 to 1024. -} CAN_Config_T; - -/** - * @brief CAN Tx message structure definition - */ -typedef struct -{ - uint32_t stdID; //!< Specifies the standard identifier. It can be 0 to 0x7FF. - uint32_t extID; //!< Specifies the extended identifier. It can be 0 to 0x1FFFFFFF. - CAN_TYPEID_T typeID; - CAN_RTXR_T remoteTxReq; - uint8_t dataLengthCode;//!< Specifies the data length code. It can be 0 to 8. - uint8_t data[8]; //!< Specifies the data to be transmitted. It can be 0 to 0xFF. -} CAN_TxMessage_T; - -/** - * @brief CAN Rx message structure definition - */ -typedef struct -{ - uint32_t stdID; //!< Specifies the standard identifier. It can be 0 to 0x7FF. - uint32_t extID; //!< Specifies the extended identifier. It can be 0 to 0x1FFFFFFF. - uint32_t typeID; - uint32_t remoteTxReq; - uint8_t dataLengthCode; //!< Specifies the data length code. It can be 0 to 8. - uint8_t data[8]; //!< Specifies the data to be transmitted. It can be 0 to 0xFF. - uint8_t filterMatchIndex;//!< Specifies the filter match index. It can be 0 to 0xFF. -} CAN_RxMessage_T; - -/** - * @brief CAN filter config structure definition - */ -typedef struct -{ - uint8_t filterNumber; //!< Specifies the filter number. It can be 0 to 13. - uint16_t filterIdHigh; //!< Specifies the filter identification number.It can be 0 to 0xFFFF. - uint16_t filterIdLow; //!< Specifies the filter identification number.It can be 0 to 0xFFFF. - uint16_t filterMaskIdHigh; //!< Specifies the filter mask identification. It can be 0 to 0xFFFF. - uint16_t filterMaskIdLow; //!< Specifies the filter mask identification. It can be 0 to 0xFFFF. - uint16_t filterActivation; //!< Specifies the filter Activation. It can be ENABLE or DISABLE. - CAN_FILTER_FIFO_T filterFIFO; - CAN_FILTER_MODE_T filterMode; - CAN_FILTER_SCALE_T filterScale; -} CAN_FilterConfig_T; - -/**@} end of group CAN_Structure*/ - - -/** @addtogroup CAN_Fuctions Fuctions - @{ -*/ - -/** CAN reset and configuration */ -void CAN_Reset(CAN_T* can); -uint8_t CAN_Config(CAN_T* can, CAN_Config_T* canConfig); -void CAN_ConfigFilter(CAN_T* can, CAN_FilterConfig_T* filterConfig); -void CAN_ConfigStructInit(CAN_Config_T* canConfig); -void CAN_EnableDBGFreeze(CAN_T* can); -void CAN_DisableDBGFreeze(CAN_T* can); -void CAN_SlaveStartBank(CAN_T* can, uint8_t bankNum); - -/** CAN frames transmit */ -uint8_t CAN_TxMessage(CAN_T* can, CAN_TxMessage_T* TxMessage); -uint8_t CAN_TxMessageStatus(CAN_T* can, CAN_TX_MAILBIX_T TxMailbox); -void CAN_CancelTxMailbox(CAN_T* can, CAN_TX_MAILBIX_T TxMailbox); - -/** CAN frames receive */ -void CAN_RxMessage(CAN_T* can, CAN_RX_FIFO_T FIFONumber, CAN_RxMessage_T* RxMessage); -void CAN_ReleaseFIFO(CAN_T* can, CAN_RX_FIFO_T FIFONumber); -uint8_t CAN_PendingMessage(CAN_T* can, CAN_RX_FIFO_T FIFONumber); - -/** CAN operation modes */ -uint8_t CAN_OperatingMode(CAN_T* can, CAN_OPERATING_MODE_T operatingMode); -uint8_t CAN_SleepMode(CAN_T* can); -uint8_t CAN_WakeUpMode(CAN_T* can); - -/** CAN bus error management */ -uint8_t CAN_ReadLastErrorCode(CAN_T* can); -uint8_t CAN_ReadRxErrorCounter(CAN_T* can); -uint8_t CAN_ReadLSBTxErrorCounter(CAN_T* can); - -/** CAN interrupt and flag */ -void CAN_EnableInterrupt(CAN_T* can, uint32_t interrupt); -void CAN_DisableInterrupt(CAN_T* can, uint32_t interrupt); -uint8_t CAN_ReadStatusFlag(CAN_T* can, CAN_FLAG_T flag); -void CAN_ClearStatusFlag(CAN_T* can, CAN_FLAG_T flag); -uint8_t CAN_ReadIntFlag(CAN_T* can, CAN_INT_T flag); -void CAN_ClearIntFlag(CAN_T* can, CAN_INT_T flag); - -/**@} end of group CAN_Fuctions*/ -/**@} end of group CAN_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_CAN_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_crc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_crc.h deleted file mode 100644 index 27a9ab6..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_crc.h +++ /dev/null @@ -1,66 +0,0 @@ -/*! - * @file apm32f10x_crc.h - * - * @brief This file contains all the functions prototypes for the CRC firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_CRC_H -#define __APM32F10X_CRC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup CRC_Driver CRC Driver - @{ -*/ - -/** @addtogroup CRC_Fuctions Fuctions - @{ -*/ - -/** Reset DATA */ -void CRC_ResetDATA(void); - -/** Operation functions */ -uint32_t CRC_CalculateCRC(uint32_t data); -uint32_t CRC_CalculateBlockCRC(uint32_t *buf, uint32_t bufLen); -uint32_t CRC_ReadCRC(void); -void CRC_WriteIDRegister(uint8_t inData); -uint8_t CRC_ReadIDRegister(void); - -/**@} end of group CRC_Fuctions*/ -/**@} end of group CRC_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_CRC_H */ - diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dac.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dac.h deleted file mode 100644 index 74df98d..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dac.h +++ /dev/null @@ -1,195 +0,0 @@ -/*! - * @file apm32f10x_dac.h - * - * @brief This file contains all the functions prototypes for the DAC firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_DAC_H -#define __APM32F10X_DAC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup DAC_Driver DAC Driver - @{ -*/ - -/** @addtogroup DAC_Enumerations Enumerations - @{ -*/ - -/** - * @brief DAC Channel selection - */ -typedef enum -{ - DAC_CHANNEL_1 = 0x00000000, - DAC_CHANNEL_2 = 0x00000010 -}DAC_CHANNEL_T; - -/** - * @brief DAC trigger selection - */ -typedef enum -{ - DAC_TRIGGER_NONE = 0x00000000, - DAC_TRIGGER_TMR6_TRGO = 0x00000004, - DAC_TRIGGER_TMR8_TRGO = 0x0000000C, - DAC_TRIGGER_TMR7_TRGO = 0x00000014, - DAC_TRIGGER_TMR5_TRGO = 0x0000001C, - DAC_TRIGGER_TMR2_TRGO = 0x00000024, - DAC_TRIGGER_TMR4_TRGO = 0x0000002C, - DAC_TRIGGER_EINT9 = 0x00000034, - DAC_TRIGGER_SOFT = 0x0000003C -}DAC_TRIGGER_T; - -/** - * @brief DAC wave generation - */ -typedef enum -{ - DAC_WAVE_GENERATION_NONE = 0x00000000, - DAC_WAVE_GENERATION_NOISE = 0x00000040, - DAC_WAVE_GENERATION_TRIANGLE = 0x00000080 -}DAC_WAVE_GENERATION_T; - -/** - * @brief DAC channelx mask/amplitude selector - */ -typedef enum -{ - DAC_LFSR_MASK_BIT11_1 = 0x00000000, //!< Mask bit[11:1] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11_2 = 0x00000100, //!< Mask bit[11:2] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11_3 = 0x00000200, //!< Mask bit[11:3] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11_4 = 0x00000300, //!< Mask bit[11:4] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11_5 = 0x00000400, //!< Mask bit[11:5] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11_6 = 0x00000500, //!< Mask bit[11:6] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11_7 = 0x00000600, //!< Mask bit[11:7] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11_8 = 0x00000700, //!< Mask bit[11:8] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11_9 = 0x00000800, //!< Mask bit[11:9] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11_10 = 0x00000900, //!< Mask bit[11:10] of LFSR for noise wave generation - DAC_LFSR_MASK_BIT11 = 0x00000A00, //!< Mask bit11 of LFSR for noise wave generation - DAC_LFSR_MASK_NONE = 0x00000B00, //!< Mask none bit of LFSR for noise wave generation - - DAC_TRIANGLE_AMPLITUDE_1 = 0x00000000, //!< Triangle amplitude equal to 1 - DAC_TRIANGLE_AMPLITUDE_3 = 0x00000100, //!< Triangle amplitude equal to 3 - DAC_TRIANGLE_AMPLITUDE_7 = 0x00000200, //!< Triangle amplitude equal to 7 - DAC_TRIANGLE_AMPLITUDE_15 = 0x00000300, //!< Triangle amplitude equal to 15 - DAC_TRIANGLE_AMPLITUDE_31 = 0x00000400, //!< Triangle amplitude equal to 31 - DAC_TRIANGLE_AMPLITUDE_63 = 0x00000500, //!< Triangle amplitude equal to 63 - DAC_TRIANGLE_AMPLITUDE_127 = 0x00000600, //!< Triangle amplitude equal to 127 - DAC_TRIANGLE_AMPLITUDE_255 = 0x00000700, //!< Triangle amplitude equal to 255 - DAC_TRIANGLE_AMPLITUDE_511 = 0x00000800, //!< Triangle amplitude equal to 511 - DAC_TRIANGLE_AMPLITUDE_1023 = 0x00000900, //!< Triangle amplitude equal to 1023 - DAC_TRIANGLE_AMPLITUDE_2047 = 0x00000A00, //!< Triangle amplitude equal to 2047 - DAC_TRIANGLE_AMPLITUDE_4095 = 0x00000B00 //!< Triangle amplitude equal to 4095 -}DAC_MASK_AMPLITUDE_SEL_T; - -/** - * @brief DAC output buffer - */ -typedef enum -{ - DAC_OUTPUT_BUFFER_ENBALE = 0x00000000, - DAC_OUTPUT_BUFFER_DISABLE = 0x00000002 -}DAC_OUTPUT_BUFFER_T; - -/** - * @brief DAC data align - */ -typedef enum -{ - DAC_ALIGN_12BIT_R = 0x00000000, - DAC_ALIGN_12BIT_L = 0x00000004, - DAC_ALIGN_8BIT_R = 0x00000008 -}DAC_ALIGN_T; - -/**@} end of group DAC_Enumerations*/ - - -/** @addtogroup DAC_Structure Data Structure - @{ -*/ - -/** - * @brief DAC Config structure definition - */ -typedef struct -{ - DAC_TRIGGER_T trigger; - DAC_OUTPUT_BUFFER_T outputBuffer; - DAC_WAVE_GENERATION_T waveGeneration; - DAC_MASK_AMPLITUDE_SEL_T maskAmplitudeSelect; -}DAC_Config_T; - -/**@} end of group DAC_Structure*/ - - -/** @addtogroup DAC_Fuctions Fuctions - @{ -*/ - -/** DAC Reset and Configuration */ -void DAC_Reset(void); -void DAC_Config(uint32_t channel, DAC_Config_T* dacConfig); -void DAC_ConfigStructInit(DAC_Config_T* dacConfig); -void DAC_Enable(DAC_CHANNEL_T channel); -void DAC_Disable(DAC_CHANNEL_T channel); - -/** DAC channel for DAM */ -void DAC_DMA_Enable(DAC_CHANNEL_T channel); -void DAC_DMA_Disable(DAC_CHANNEL_T channel); - -/** DAC channel software trigger */ -void DAC_EnableSoftwareTrigger(DAC_CHANNEL_T channel); -void DAC_DisableSoftwareTrigger(DAC_CHANNEL_T channel); -void DAC_EnableDualSoftwareTrigger(void); -void DAC_DisableDualSoftwareTrigger(void); - -/** DAC channel wave generation */ -void DAC_EnableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave); -void DAC_DisableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave); - -/** DAC set channel data */ -void DAC_ConfigChannel1Data(DAC_ALIGN_T align, uint16_t data); -void DAC_ConfigChannel2Data(DAC_ALIGN_T align, uint16_t data); -void DAC_ConfigDualChannelData(DAC_ALIGN_T align, uint16_t data2, uint16_t data1); - -/** DAC read data output value */ -uint16_t DAC_ReadDataOutputValue(DAC_CHANNEL_T channel); - -/**@} end of group DAC_Fuctions*/ -/**@} end of group DAC_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_DAC_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dbgmcu.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dbgmcu.h deleted file mode 100644 index aaf8365..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dbgmcu.h +++ /dev/null @@ -1,97 +0,0 @@ -/*! - * @file apm32f10x_dbgmcu.h - * - * @brief This file contains all the functions prototypes for the DBUGMCU firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_DBGMCU_H -#define __APM32F10X_DBGMCU_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup DBGMCU_Driver DBGMCU Driver - @{ -*/ - -/** @addtogroup DBGMCU_Enumerations Enumerations - @{ -*/ - -enum -{ - DBGMCU_SLEEP = ((uint32_t)0x00000001), - DBGMCU_STOP = ((uint32_t)0x00000002), - DBGMCU_STANDBY = ((uint32_t)0x00000004), - DBGMCU_IWDT_STOP = ((uint32_t)0x00000100), - DBGMCU_WWDT_STOP = ((uint32_t)0x00000200), - DBGMCU_TMR1_STOP = ((uint32_t)0x00000400), - DBGMCU_TMR2_STOP = ((uint32_t)0x00000800), - DBGMCU_TMR3_STOP = ((uint32_t)0x00001000), - DBGMCU_TMR4_STOP = ((uint32_t)0x00002000), - DBGMCU_CAN1_STOP = ((uint32_t)0x00004000), - DBGMCU_I2C1_SMBUS_TIMEOUT = ((uint32_t)0x00008000), - DBGMCU_I2C2_SMBUS_TIMEOUT = ((uint32_t)0x00010000), - DBGMCU_TMR8_STOP = ((uint32_t)0x00020000), - DBGMCU_TMR5_STOP = ((uint32_t)0x00040000), - DBGMCU_TMR6_STOP = ((uint32_t)0x00080000), - DBGMCU_TMR7_STOP = ((uint32_t)0x00100000), - DBGMCU_CAN2_STOP = ((uint32_t)0x00200000), - DBGMCU_TMR15_STOP = ((uint32_t)0x00400000), - DBGMCU_TMR16_STOP = ((uint32_t)0x00800000), - DBGMCU_TMR17_STOP = ((uint32_t)0x01000000), - DBGMCU_TMR12_STOP = ((uint32_t)0x02000000), - DBGMCU_TMR13_STOP = ((uint32_t)0x04000000), - DBGMCU_TMR14_STOP = ((uint32_t)0x08000000), - DBGMCU_TMR9_STOP = ((uint32_t)0x10000000), - DBGMCU_TMR10_STOP = ((uint32_t)0x20000000), - DBGMCU_TMR11_STOP = ((uint32_t)0x40000000), -}; - -/**@} end of group DBGMCU_Enumerations*/ - - -/** @addtogroup DBGMCU_Fuctions Fuctions - @{ -*/ - -uint32_t DBGMCU_ReadDEVID(void); -uint32_t DBGMCU_ReadREVID(void); -void DBGMCU_Enable(uint32_t periph); -void DBGMCU_Disable(uint32_t periph); - -/**@} end of group DBGMCU_Fuctions*/ -/**@} end of group DBGMCU_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_DBGMCU_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dma.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dma.h deleted file mode 100644 index 02d0be4..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dma.h +++ /dev/null @@ -1,304 +0,0 @@ -/*! - * @file apm32f10x_dma.h - * - * @brief This file contains all the functions prototypes for the DMA firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_DMA_H -#define __APM32F10X_DMA_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup DMA_Driver DMA Driver - @{ -*/ - -/** @addtogroup DMA_Enumerations Enumerations - @{ -*/ - -/** - * @brief DMA Transmission direction - */ -typedef enum -{ - DMA_DIR_PERIPHERAL_SRC, - DMA_DIR_PERIPHERAL_DST -} DMA_DIR_T; - -/** - * @brief DMA Peripheral address increment - */ -typedef enum -{ - DMA_PERIPHERAL_INC_DISABLE, - DMA_PERIPHERAL_INC_ENABLE -} DMA_PERIPHERAL_INC_T; - -/** - * @brief DMA Memory address increment - */ -typedef enum -{ - DMA_MEMORY_INC_DISABLE, - DMA_MEMORY_INC_ENABLE -} DMA_MEMORY_INC_T; - -/** - * @brief DMA Peripheral Data Size - */ -typedef enum -{ - DMA_PERIPHERAL_DATA_SIZE_BYTE, - DMA_PERIPHERAL_DATA_SIZE_HALFWORD, - DMA_PERIPHERAL_DATA_SIZE_WOED -} DMA_PERIPHERAL_DATA_SIZE_T; - -/** - * @brief DMA Memory Data Size - */ -typedef enum -{ - DMA_MEMORY_DATA_SIZE_BYTE, - DMA_MEMORY_DATA_SIZE_HALFWORD, - DMA_MEMORY_DATA_SIZE_WOED -} DMA_MEMORY_DATA_SIZE_T; - -/** - * @brief DMA Mode - */ -typedef enum -{ - DMA_MODE_NORMAL, - DMA_MODE_CIRCULAR -} DMA_LOOP_MODE_T; - -/** - * @brief DMA priority level - */ -typedef enum -{ - DMA_PRIORITY_LOW, - DMA_PRIORITY_MEDIUM, - DMA_PRIORITY_HIGH, - DMA_PRIORITY_VERYHIGH -} DMA_PRIORITY_T; - -/** - * @brief DMA Memory to Memory - */ -typedef enum -{ - DMA_M2MEN_DISABLE, - DMA_M2MEN_ENABLE -} DMA_M2MEN_T; - -/** - * @brief DMA interrupt - */ -typedef enum -{ - DMA_INT_TC = 0x00000002, - DMA_INT_HT = 0x00000004, - DMA_INT_TERR = 0x00000008 -} DMA_INT_T; - -/** - * @brief DMA Flag - */ -typedef enum -{ - DMA1_FLAG_GINT1 = 0x00000001, - DMA1_FLAG_TC1 = 0x00000002, - DMA1_FLAG_HT1 = 0x00000004, - DMA1_FLAG_TERR1 = 0x00000008, - DMA1_FLAG_GINT2 = 0x00000010, - DMA1_FLAG_TC2 = 0x00000020, - DMA1_FLAG_HT2 = 0x00000040, - DMA1_FLAG_TERR2 = 0x00000080, - DMA1_FLAG_GINT3 = 0x00000100, - DMA1_FLAG_TC3 = 0x00000200, - DMA1_FLAG_HT3 = 0x00000400, - DMA1_FLAG_TERR3 = 0x00000800, - DMA1_FLAG_GINT4 = 0x00001000, - DMA1_FLAG_TC4 = 0x00002000, - DMA1_FLAG_HT4 = 0x00004000, - DMA1_FLAG_TERR4 = 0x00008000, - DMA1_FLAG_GINT5 = 0x00010000, - DMA1_FLAG_TC5 = 0x00020000, - DMA1_FLAG_HT5 = 0x00040000, - DMA1_FLAG_TERR5 = 0x00080000, - DMA1_FLAG_GINT6 = 0x00100000, - DMA1_FLAG_TC6 = 0x00200000, - DMA1_FLAG_HT6 = 0x00400000, - DMA1_FLAG_TERR6 = 0x00800000, - DMA1_FLAG_GINT7 = 0x01000000, - DMA1_FLAG_TC7 = 0x02000000, - DMA1_FLAG_HT7 = 0x04000000, - DMA1_FLAG_TERR7 = 0x08000000, - - DMA2_FLAG_GINT1 = 0x10000001, - DMA2_FLAG_TC1 = 0x10000002, - DMA2_FLAG_HT1 = 0x10000004, - DMA2_FLAG_TERR1 = 0x10000008, - DMA2_FLAG_GINT2 = 0x10000010, - DMA2_FLAG_TC2 = 0x10000020, - DMA2_FLAG_HT2 = 0x10000040, - DMA2_FLAG_TERR2 = 0x10000080, - DMA2_FLAG_GINT3 = 0x10000100, - DMA2_FLAG_TC3 = 0x10000200, - DMA2_FLAG_HT3 = 0x10000400, - DMA2_FLAG_TERR3 = 0x10000800, - DMA2_FLAG_GINT4 = 0x10001000, - DMA2_FLAG_TC4 = 0x10002000, - DMA2_FLAG_HT4 = 0x10004000, - DMA2_FLAG_TERR4 = 0x10008000, - DMA2_FLAG_GINT5 = 0x10010000, - DMA2_FLAG_TC5 = 0x10020000, - DMA2_FLAG_HT5 = 0x10040000, - DMA2_FLAG_TERR5 = 0x10080000 -} DMA_FLAG_T; - -/** - * @brief DMA Interrupt Flag - */ -typedef enum -{ - DMA1_INT_FLAG_GINT1 = 0x00000001, - DMA1_INT_FLAG_TC1 = 0x00000002, - DMA1_INT_FLAG_HT1 = 0x00000004, - DMA1_INT_FLAG_TERR1 = 0x00000008, - DMA1_INT_FLAG_GINT2 = 0x00000010, - DMA1_INT_FLAG_TC2 = 0x00000020, - DMA1_INT_FLAG_HT2 = 0x00000040, - DMA1_INT_FLAG_TERR2 = 0x00000080, - DMA1_INT_FLAG_GINT3 = 0x00000100, - DMA1_INT_FLAG_TC3 = 0x00000200, - DMA1_INT_FLAG_HT3 = 0x00000400, - DMA1_INT_FLAG_TERR3 = 0x00000800, - DMA1_INT_FLAG_GINT4 = 0x00001000, - DMA1_INT_FLAG_TC4 = 0x00002000, - DMA1_INT_FLAG_HT4 = 0x00004000, - DMA1_INT_FLAG_TERR4 = 0x00008000, - DMA1_INT_FLAG_GINT5 = 0x00010000, - DMA1_INT_FLAG_TC5 = 0x00020000, - DMA1_INT_FLAG_HT5 = 0x00040000, - DMA1_INT_FLAG_TERR5 = 0x00080000, - DMA1_INT_FLAG_GINT6 = 0x00100000, - DMA1_INT_FLAG_TC6 = 0x00200000, - DMA1_INT_FLAG_HT6 = 0x00400000, - DMA1_INT_FLAG_TERR6 = 0x00800000, - DMA1_INT_FLAG_GINT7 = 0x01000000, - DMA1_INT_FLAG_TC7 = 0x02000000, - DMA1_INT_FLAG_HT7 = 0x04000000, - DMA1_INT_FLAG_TERR7 = 0x08000000, - - DMA2_INT_FLAG_GINT1 = 0x10000001, - DMA2_INT_FLAG_TC1 = 0x10000002, - DMA2_INT_FLAG_HT1 = 0x10000004, - DMA2_INT_FLAG_TERR1 = 0x10000008, - DMA2_INT_FLAG_GINT2 = 0x10000010, - DMA2_INT_FLAG_TC2 = 0x10000020, - DMA2_INT_FLAG_HT2 = 0x10000040, - DMA2_INT_FLAG_TERR2 = 0x10000080, - DMA2_INT_FLAG_GINT3 = 0x10000100, - DMA2_INT_FLAG_TC3 = 0x10000200, - DMA2_INT_FLAG_HT3 = 0x10000400, - DMA2_INT_FLAG_TERR3 = 0x10000800, - DMA2_INT_FLAG_GINT4 = 0x10001000, - DMA2_INT_FLAG_TC4 = 0x10002000, - DMA2_INT_FLAG_HT4 = 0x10004000, - DMA2_INT_FLAG_TERR4 = 0x10008000, - DMA2_INT_FLAG_GINT5 = 0x10010000, - DMA2_INT_FLAG_TC5 = 0x10020000, - DMA2_INT_FLAG_HT5 = 0x10040000, - DMA2_INT_FLAG_TERR5 = 0x10080000 -} DMA_INT_FLAG_T; - -/**@} end of group DMA_Enumerations*/ - - -/** @addtogroup DMA_Structure Data Structure - @{ -*/ - -/** - * @brief DMA Config struct definition - */ -typedef struct -{ - uint32_t peripheralBaseAddr; - uint32_t memoryBaseAddr; - DMA_DIR_T dir; - uint32_t bufferSize; - DMA_PERIPHERAL_INC_T peripheralInc; - DMA_MEMORY_INC_T memoryInc; - DMA_PERIPHERAL_DATA_SIZE_T peripheralDataSize; - DMA_MEMORY_DATA_SIZE_T memoryDataSize; - DMA_LOOP_MODE_T loopMode; - DMA_PRIORITY_T priority; - DMA_M2MEN_T M2M; -} DMA_Config_T; - -/**@} end of group DMA_Structure*/ - - -/** @addtogroup DMA_Fuctions Fuctions - @{ -*/ - -/** Reset and configuration */ -void DMA_Reset(DMA_Channel_T *channel); -void DMA_Config(DMA_Channel_T* channel, DMA_Config_T* dmaConfig); -void DMA_ConfigStructInit( DMA_Config_T* dmaConfig); -void DMA_Enable(DMA_Channel_T *channel); -void DMA_Disable(DMA_Channel_T *channel); - -/** Data number */ -void DMA_ConfigDataNumber(DMA_Channel_T *channel, uint16_t dataNumber); -uint16_t DMA_ReadDataNumber(DMA_Channel_T *channel); - -/** Interrupt and flag */ -void DMA_EnableInterrupt(DMA_Channel_T *channel, uint32_t interrupt); -void DMA_DisableInterrupt(DMA_Channel_T *channel, uint32_t interrupt); -uint8_t DMA_ReadStatusFlag(DMA_FLAG_T flag); -void DMA_ClearStatusFlag(uint32_t flag); -uint8_t DMA_ReadIntFlag(DMA_INT_FLAG_T flag); -void DMA_ClearIntFlag(uint32_t flag); - -/**@} end of group DMA_Fuctions*/ -/**@} end of group DMA_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_DMA_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dmc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dmc.h deleted file mode 100644 index f6b2b70..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_dmc.h +++ /dev/null @@ -1,379 +0,0 @@ -/*! - * @file apm32f10x_dmc.h - * - * @brief This file contains all the prototypes,enumeration and macros for the DMC peripheral - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_DMC_H -#define __APM32F10X_DMC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup DMC_Driver DMC Driver - @{ -*/ - -/** @addtogroup DMC_Enumerations Enumerations - @{ -*/ - - -/** - * @brief Bank Address Width - */ -typedef enum -{ - DMC_BANK_WIDTH_1, - DMC_BANK_WIDTH_2 -}DMC_BANK_WIDTH_T; - -/** - * @brief Row Address Width - */ -typedef enum -{ - DMC_ROW_WIDTH_11 = 0x0A, - DMC_ROW_WIDTH_12, - DMC_ROW_WIDTH_13, - DMC_ROW_WIDTH_14, - DMC_ROW_WIDTH_15, - DMC_ROW_WIDTH_16 -}DMC_ROW_WIDTH_T; - -/** - * @brief Column Address Width - */ -typedef enum -{ - DMC_COL_WIDTH_8 = 0x07, - DMC_COL_WIDTH_9, - DMC_COL_WIDTH_10, - DMC_COL_WIDTH_11, - DMC_COL_WIDTH_12, - DMC_COL_WIDTH_13, - DMC_COL_WIDTH_14, - DMC_COL_WIDTH_15 -}DMC_COL_WIDTH_T; - -/** - * @brief CAS Latency Select - */ -typedef enum -{ - DMC_CAS_LATENCY_1, - DMC_CAS_LATENCY_2, - DMC_CAS_LATENCY_3, - DMC_CAS_LATENCY_4 -}DMC_CAS_LATENCY_T; - -/** - * @brief RAS Minimun Time Select - */ -typedef enum -{ - DMC_RAS_MINIMUM_1, - DMC_RAS_MINIMUM_2, - DMC_RAS_MINIMUM_3, - DMC_RAS_MINIMUM_4, - DMC_RAS_MINIMUM_5, - DMC_RAS_MINIMUM_6, - DMC_RAS_MINIMUM_7, - DMC_RAS_MINIMUM_8, - DMC_RAS_MINIMUM_9, - DMC_RAS_MINIMUM_10, - DMC_RAS_MINIMUM_11, - DMC_RAS_MINIMUM_12, - DMC_RAS_MINIMUM_13, - DMC_RAS_MINIMUM_14, - DMC_RAS_MINIMUM_15, - DMC_RAS_MINIMUM_16 -}DMC_RAS_MINIMUM_T; - -/** - * @brief RAS To CAS Delay Time Select - */ -typedef enum -{ - DMC_DELAY_TIME_1, - DMC_DELAY_TIME_2, - DMC_DELAY_TIME_3, - DMC_DELAY_TIME_4, - DMC_DELAY_TIME_5, - DMC_DELAY_TIME_6, - DMC_DELAY_TIME_7, - DMC_DELAY_TIME_8 -}DMC_DELAY_TIME_T; - -/** - * @brief Precharge Period Select - */ -typedef enum -{ - DMC_PRECHARGE_1, - DMC_PRECHARGE_2, - DMC_PRECHARGE_3, - DMC_PRECHARGE_4, - DMC_PRECHARGE_5, - DMC_PRECHARGE_6, - DMC_PRECHARGE_7, - DMC_PRECHARGE_8 -}DMC_PRECHARGE_T; - -/** - * @brief Last Data Next Precharge For Write Time Select - */ -typedef enum -{ - DMC_NEXT_PRECHARGE_1, - DMC_NEXT_PRECHARGE_2, - DMC_NEXT_PRECHARGE_3, - DMC_NEXT_PRECHARGE_4 -}DMC_NEXT_PRECHARGE_T; - -/** - * @brief Auto-Refresh Period Select - */ -typedef enum -{ - DMC_AUTO_REFRESH_1, - DMC_AUTO_REFRESH_2, - DMC_AUTO_REFRESH_3, - DMC_AUTO_REFRESH_4, - DMC_AUTO_REFRESH_5, - DMC_AUTO_REFRESH_6, - DMC_AUTO_REFRESH_7, - DMC_AUTO_REFRESH_8, - DMC_AUTO_REFRESH_9, - DMC_AUTO_REFRESH_10, - DMC_AUTO_REFRESH_11, - DMC_AUTO_REFRESH_12, - DMC_AUTO_REFRESH_13, - DMC_AUTO_REFRESH_14, - DMC_AUTO_REFRESH_15, - DMC_AUTO_REFRESH_16, -}DMC_AUTO_REFRESH_T; - -/** - * @brief Active-to-active Command Period Select - */ -typedef enum -{ - DMC_ATA_CMD_1, - DMC_ATA_CMD_2, - DMC_ATA_CMD_3, - DMC_ATA_CMD_4, - DMC_ATA_CMD_5, - DMC_ATA_CMD_6, - DMC_ATA_CMD_7, - DMC_ATA_CMD_8, - DMC_ATA_CMD_9, - DMC_ATA_CMD_10, - DMC_ATA_CMD_11, - DMC_ATA_CMD_12, - DMC_ATA_CMD_13, - DMC_ATA_CMD_14, - DMC_ATA_CMD_15, - DMC_ATA_CMD_16, -}DMC_ATA_CMD_T; - -/** - * @brief Clock PHASE - */ -typedef enum -{ - DMC_CLK_PHASE_NORMAL, - DMC_CLK_PHASE_REVERSE -}DMC_CLK_PHASE_T; - -/** - * @brief DMC Memory Size - */ -typedef enum -{ - DMC_MEMORY_SIZE_0, - DMC_MEMORY_SIZE_64KB, - DMC_MEMORY_SIZE_128KB, - DMC_MEMORY_SIZE_256KB, - DMC_MEMORY_SIZE_512KB, - DMC_MEMORY_SIZE_1MB, - DMC_MEMORY_SIZE_2MB, - DMC_MEMORY_SIZE_4MB, - DMC_MEMORY_SIZE_8MB, - DMC_MEMORY_SIZE_16MB, - DMC_MEMORY_SIZE_32MB, - DMC_MEMORY_SIZE_64MB, - DMC_MEMORY_SIZE_128MB, - DMC_MEMORY_SIZE_256MB, -}DMC_MEMORY_SIZE_T; - -/** - * @brief Open Banks Of Number - */ -typedef enum -{ - DMC_BANK_NUMBER_1, - DMC_BANK_NUMBER_2, - DMC_BANK_NUMBER_3, - DMC_BANK_NUMBER_4, - DMC_BANK_NUMBER_5, - DMC_BANK_NUMBER_6, - DMC_BANK_NUMBER_7, - DMC_BANK_NUMBER_8, - DMC_BANK_NUMBER_9, - DMC_BANK_NUMBER_10, - DMC_BANK_NUMBER_11, - DMC_BANK_NUMBER_12, - DMC_BANK_NUMBER_13, - DMC_BANK_NUMBER_14, - DMC_BANK_NUMBER_15, - DMC_BANK_NUMBER_16, -}DMC_BANK_NUMBER_T; - -/** - * @brief Full refresh type - */ -typedef enum -{ - DMC_REFRESH_ROW_ONE, //!< Refresh one row - DMC_REFRESH_ROW_ALL, //!< Refresh all row -}DMC_REFRESH_T; - -/** - * @brief Precharge type - */ -typedef enum -{ - DMC_PRECHARGE_IM, //!< Immediate precharge - DMC_PRECHARGE_DELAY, //!< Delayed precharge -}DMC_PRECHARE_T; - -/** - * @brief WRAP Burst Type - */ -typedef enum -{ - DMC_WRAPB_4, - DMC_WRAPB_8, -}DMC_WRPB_T; - -/**@} end of group DMC_Enumerations*/ - - -/** @addtogroup DMC_Structure Data Structure - @{ -*/ - -/** - * @brief Timing config definition - */ -typedef struct -{ - uint32_t latencyCAS : 2; //!< DMC_CAS_LATENCY_T - uint32_t tRAS : 4; //!< DMC_RAS_MINIMUM_T - uint32_t tRCD : 3; //!< DMC_DELAY_TIME_T - uint32_t tRP : 3; //!< DMC_PRECHARGE_T - uint32_t tWR : 2; //!< DMC_NEXT_PRECHARGE_T - uint32_t tARP : 4; //!< DMC_AUTO_REFRESH_T - uint32_t tCMD : 4; //!< DMC_ATA_CMD_T - uint32_t tXSR : 9; //!< auto-refresh commands, can be 0x000 to 0x1FF - uint16_t tRFP : 16; //!< Refresh period, can be 0x0000 to 0xFFFF -}DMC_TimingConfig_T; - -/** - * @brief Config struct definition - */ -typedef struct -{ - DMC_MEMORY_SIZE_T memorySize; //!< Memory size(byte) - DMC_BANK_WIDTH_T bankWidth; //!< Number of bank bits - DMC_ROW_WIDTH_T rowWidth; //!< Number of row address bits - DMC_COL_WIDTH_T colWidth; //!< Number of col address bits - DMC_CLK_PHASE_T clkPhase; //!< Clock phase - DMC_TimingConfig_T timing; //!< Timing -}DMC_Config_T; - -/**@} end of group DMC_Structure*/ - - -/** @addtogroup DMC_Fuctions Fuctions - @{ -*/ - - /** Enable / Disable */ -void DMC_Enable(void); -void DMC_Disable(void); -void DMC_EnableInit(void); - -/** Global config */ -void DMC_Config(DMC_Config_T* dmcConfig); -void DMC_ConfigStructInit(DMC_Config_T* dmcConfig); - -/** Address */ -void DMC_ConfigBankWidth(DMC_BANK_WIDTH_T bankWidth); -void DMC_ConfigAddrWidth(DMC_ROW_WIDTH_T rowWidth, DMC_COL_WIDTH_T colWidth); - -/** Timing */ -void DMC_ConfigTiming(DMC_TimingConfig_T* timingConfig); -void DMC_ConfigTimingStructInit(DMC_TimingConfig_T* timingConfig); -void DMC_ConfigStableTimePowerup(uint16_t stableTime); -void DMC_ConfigAutoRefreshNumDuringInit(DMC_AUTO_REFRESH_T num); -void DMC_ConfigRefreshPeriod(uint16_t period); - -/** Refresh mode */ -void DMC_EixtSlefRefreshMode(void); -void DMC_EnterSlefRefreshMode(void); - -/** Accelerate Module */ -void DMC_EnableAccelerateModule(void); -void DMC_DisableAccelerateModule(void); - -/** Config */ -void DMC_ConfigOpenBank(DMC_BANK_NUMBER_T num); -void DMC_EnableUpdateMode(void); -void DMC_EnterPowerdownMode(void); -void DMC_ConfigFullRefreshBeforeSR(DMC_REFRESH_T refresh); -void DMC_ConfigFullRefreshAfterSR(DMC_REFRESH_T refresh); -void DMC_ConfigPrechargeType(DMC_PRECHARE_T precharge); -void DMC_ConfigMemorySize(DMC_MEMORY_SIZE_T memorySize); -void DMC_ConfigClockPhase(DMC_CLK_PHASE_T clkPhase); -void DMC_ConfigWRAPB(DMC_WRPB_T burst); - -/** read flag */ -uint8_t DMC_ReadSelfRefreshStatus(void); - -/**@} end of group DMC_Fuctions*/ -/**@} end of group DMC_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_DMC_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_eint.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_eint.h deleted file mode 100644 index 7cf3cb1..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_eint.h +++ /dev/null @@ -1,135 +0,0 @@ -/*! - * @file apm32f10x_eint.h - * - * @brief This file contains all the functions prototypes for the EINT firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_EINT_H -#define __APM32F10X_EINT_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup EINT_Driver EINT Driver - @{ -*/ - -/** @addtogroup EINT_Enumerations Enumerations - @{ -*/ - -/** - * @brief EINT mode enumeration - */ -typedef enum -{ - EINT_MODE_INTERRUPT = 0x00, - EINT_MODE_EVENT = 0x04 -} EINT_MODE_T; - -/** - * @brief EINT Trigger enumeration - */ -typedef enum -{ - EINT_TRIGGER_RISING = 0x08, - EINT_TRIGGER_FALLING = 0x0C, - EINT_TRIGGER_RISING_FALLING = 0x10 -} EINT_TRIGGER_T; - -typedef enum -{ - EINT_LINENONE = 0x00000, //! - EINT_LINE_0 = 0x00001, //!< External interrupt line 0 - EINT_LINE_1 = 0x00002, //!< External interrupt line 1 - EINT_LINE_2 = 0x00004, //!< External interrupt line 2 - EINT_LINE_3 = 0x00008, //!< External interrupt line 3 - EINT_LINE_4 = 0x00010, //!< External interrupt line 4 - EINT_LINE_5 = 0x00020, //!< External interrupt line 5 - EINT_LINE_6 = 0x00040, //!< External interrupt line 6 - EINT_LINE_7 = 0x00080, //!< External interrupt line 7 - EINT_LINE_8 = 0x00100, //!< External interrupt line 8 - EINT_LINE_9 = 0x00200, //!< External interrupt line 9 - EINT_LINE_10 = 0x00400, //!< External interrupt line 10 - EINT_LINE_11 = 0x00800, //!< External interrupt line 11 - EINT_LINE_12 = 0x01000, //!< External interrupt line 12 - EINT_LINE_13 = 0x02000, //!< External interrupt line 13 - EINT_LINE_14 = 0x04000, //!< External interrupt line 14 - EINT_LINE_15 = 0x08000, //!< External interrupt line 15 - EINT_LINE_16 = 0x10000, //!< External interrupt line 16 Connected to the PVD Output - EINT_LINE_17 = 0x20000, //!< External interrupt line 17 Connected to the RTC Alarm event - EINT_LINE_18 = 0x40000, //!< External interrupt line 18 Connected to the USB Device -} EINT_LINE_T; - -/**@} end of group EINT_Enumerations*/ - - -/** @addtogroup EINT_Structure Data Structure - @{ -*/ - -/** - * @brief EINT Config structure definition - */ -typedef struct -{ - uint32_t line; - EINT_MODE_T mode; - EINT_TRIGGER_T trigger; - uint8_t lineCmd; -} EINT_Config_T; - -/**@} end of group EINT_Structure*/ - - -/** @addtogroup EINT_Fuctions Fuctions - @{ -*/ - -/** Reset and configuration */ -void EINT_Reset(void); -void EINT_Config( EINT_Config_T* eintConfig); -void EINT_ConfigStructInit(EINT_Config_T* eintConfig); - -/** Interrupt and flag */ -void EINT_SelectSWInterrupt(uint32_t line); -uint8_t EINT_ReadStatusFlag(EINT_LINE_T line); -void EINT_ClearStatusFlag(uint32_t line); -uint8_t EINT_ReadIntFlag(EINT_LINE_T line); -void EINT_ClearIntFlag(uint32_t line); - -/**@} end of group EINT_Fuctions*/ -/**@} end of group EINT_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10XEINT_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_emmc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_emmc.h deleted file mode 100644 index ec88b28..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_emmc.h +++ /dev/null @@ -1,369 +0,0 @@ -/*! - * @file apm32f10x_emmc.h - * - * @brief This file contains all the functions prototypes for the EMMC firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_EMMC_H -#define __APM32F10X_EMMC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup EMMC_Driver EMMC Driver - @{ -*/ - -/** @addtogroup EMMC_Enumerations Enumerations - @{ -*/ - -/** - * @brief EMMC NORSRAM_Bank - */ -typedef enum -{ - EMMC_BANK1_NORSRAM_1 = 0x00000000, - EMMC_BANK1_NORSRAM_2 = 0x00000002, - EMMC_BANK1_NORSRAM_3 = 0x00000004, - EMMC_BANK1_NORSRAM_4 = 0x00000006 -} EMMC_BANK1_NORSRAM_T; - -/** - * @brief EMMC NAND and PC Card Bank - */ -typedef enum -{ - EMMC_BANK2_NAND = 0x00000010, - EMMC_BANK3_NAND = 0x00000100, - EMMC_BANK4_PCCARD = 0x00001000 -} EMMC_BANK_NAND_T; - -/** - * @brief EMMC_Data_Address_Bus_Multiplexing - */ -typedef enum -{ - EMMC_DATA_ADDRESS_MUX_DISABLE = 0x00000000, - EMMC_DATA_ADDRESS_MUX_ENABLE = 0x00000002 -} EMMC_DATA_ADDRESS_MUX_T; - -/** - * @brief EMMC_Memory_Type - */ -typedef enum -{ - EMMC_MEMORY_TYPE_SRAM = 0x00000000, - EMMC_MEMORY_TYPE_PSRAM = 0x00000004, - EMMC_MEMORY_TYPE_NOR = 0x00000008 -} EMMC_MEMORY_TYPE_T; - -/** - * @brief EMMC_Data_Width - */ -typedef enum -{ - EMMC_MEMORY_DATA_WIDTH_8BIT = 0x00000000, - EMMC_MEMORY_DATA_WIDTH_16BIT = 0x00000010 -} EMMC_MEMORY_DATA_WIDTH_T; - -/** - * @brief EMMC_Burst_Access_Mode - */ -typedef enum -{ - EMMC_BURST_ACCESS_MODE_DISABLE = 0x00000000, - EMMC_BURST_ACCESS_MODE_ENABLE = 0x00000100 -} EMMC_BURST_ACCESS_MODE_T; - -/** - * @brief EMMC_AsynchronousWait - */ -typedef enum -{ - EMMC_ASYNCHRONOUS_WAIT_DISABLE = 0x00000000, - EMMC_ASYNCHRONOUS_WAIT_ENABLE = 0x00008000 -} EMMC_ASYNCHRONOUS_WAIT_T; - -/** - * @brief EMMC_Wait_Signal_Polarity - */ -typedef enum -{ - EMMC_WAIT_SIGNAL_POLARITY_LOW = 0x00000000, - EMMC_WAIT_SIGNAL_POLARITY_HIGH = 0x00000200 -} EMMC_WAIT_SIGNAL_POLARITY_T; - -/** - * @brief EMMC_Wrap_Mode - */ -typedef enum -{ - EMMC_WRAP_MODE_DISABLE = 0x00000000, - EMMC_WRAP_MODE_ENABLE = 0x00000400 -} EMMC_WRAP_MODE_T; - -/** - * @brief EMMC_Wait_Timing - */ -typedef enum -{ - EMMC_WAIT_SIGNAL_ACTIVE_BEFORE_WAIT = 0x00000000, - EMMC_WAIT_SIGNAL_ACTIVE_DURING_WAIT = 0x00000800 -} EMMC_WAIT_SIGNAL_ACTIVE_T; - -/** - * @brief EMMC_Write_Operation - */ -typedef enum -{ - EMMC_WRITE_OPERATION_DISABLE = 0x00000000, - EMMC_WRITE_OPERATION_ENABLE = 0x00001000 -} EMMC_WRITE_OPERATION_T; - -/** - * @brief EMMC_Wait_Signal - */ -typedef enum -{ - EMMC_WAITE_SIGNAL_DISABLE = 0x00000000, - EMMC_WAITE_SIGNAL_ENABLE = 0x00002000 -} EMMC_WAITE_SIGNAL_T; - -/** - * @brief EMMC_Extended_Mode - */ -typedef enum -{ - EMMC_EXTENDEN_MODE_DISABLE = 0x00000000, - EMMC_EXTENDEN_MODE_ENABLE = 0x00004000 -} EMMC_EXTENDEN_MODE_T; - -/** - * @brief EMMC_Write_Burst - */ -typedef enum -{ - EMMC_WRITE_BURST_DISABLE = 0x00000000, - EMMC_WRITE_BURST_ENABLE = 0x00080000 -} EMMC_WRITE_BURST_T; - -/** - * @brief EMMC_WAIT_FEATURE - */ -typedef enum -{ - EMMC_WAIT_FEATURE_DISABLE = 0x00000000, - EMMC_WAIT_FEATURE_ENABLE = 0x00000002 -} EMMC_WAIT_FEATURE_T; - -/** - * @brief EMMC_ECC - */ -typedef enum -{ - EMMC_ECC_DISABLE = 0x00000000, - EMMC_ECC_ENABLE = 0x00000040 -} EMMC_ECC_T; - -/** - * @brief EMMC_ECC_Page_Size - */ -typedef enum -{ - EMMC_ECC_PAGE_SIZE_BYTE_256 = 0x00000000, - EMMC_ECC_PAGE_SIZE_BYTE_512 = 0x00020000, - EMMC_ECC_PAGE_SIZE_BYTE_1024 = 0x00040000, - EMMC_ECC_PAGE_SIZE_BYTE_2048 = 0x00060000, - EMMC_ECC_PAGE_SIZE_BYTE_4096 = 0x00080000, - EMMC_ECC_PAGE_SIZE_BYTE_8192 = 0x000A0000 -} EMMC_ECC_PAGE_SIZE_BYTE_T; - -/** - * @brief EMMC_Access_Mode - */ -typedef enum -{ - EMMC_ACCESS_MODE_A = 0x00000000, - EMMC_ACCESS_MODE_B = 0x10000000, - EMMC_ACCESS_MODE_C = 0x20000000, - EMMC_ACCESS_MODE_D = 0x30000000 -} EMMC_ACCESS_MODE_T; - -/** - * @brief EMMC_Interrupt_sources - */ -typedef enum -{ - EMMC_INT_EDGE_RISING = 0x00000008, - EMMC_INT_LEVEL_HIGH = 0x00000010, - EMMC_INT_EDGE_FALLING = 0x00000020 -} EMMC_INT_T; - -/** - * @brief EMMC_Flags - */ -typedef enum -{ - EMMC_FLAG_EDGE_RISING = 0x00000001, - EMMC_FLAG_LEVEL_HIGH = 0x00000002, - EMMC_FLAG_EDGE_FALLING = 0x00000004, - EMMC_FLAG_FIFO_EMPTY = 0x00000040 -} EMMC_FLAG_T; - -/**@} end of group EMMC_Enumerations*/ - - -/** @addtogroup EMMC_Structure Data Structure - @{ -*/ - -/** - * @brief Timing parameters for NOR/SRAM Banks - */ -typedef struct -{ - uint32_t addressSetupTime; - uint32_t addressHodeTime; - uint32_t dataSetupTime; - uint32_t busTurnaroundTime; - uint32_t clockDivision; - uint32_t dataLatency; - EMMC_ACCESS_MODE_T accessMode; -} EMMC_NORSRAMTimingConfig_T; - -/** - * @brief EMMC NOR/SRAM Config structure - */ -typedef struct -{ - EMMC_BANK1_NORSRAM_T bank; - EMMC_DATA_ADDRESS_MUX_T dataAddressMux; - EMMC_MEMORY_TYPE_T memoryType; - EMMC_MEMORY_DATA_WIDTH_T memoryDataWidth; - EMMC_BURST_ACCESS_MODE_T burstAcceesMode; - EMMC_ASYNCHRONOUS_WAIT_T asynchronousWait; - EMMC_WAIT_SIGNAL_POLARITY_T waitSignalPolarity; - EMMC_WRAP_MODE_T wrapMode; - EMMC_WAIT_SIGNAL_ACTIVE_T waitSignalActive; - EMMC_WRITE_OPERATION_T writeOperation; - EMMC_WAITE_SIGNAL_T waiteSignal; - EMMC_EXTENDEN_MODE_T extendedMode; - EMMC_WRITE_BURST_T writeBurst; - EMMC_NORSRAMTimingConfig_T* readWriteTimingStruct; - EMMC_NORSRAMTimingConfig_T* writeTimingStruct; -} EMMC_NORSRAMConfig_T; - -/** - * @brief Timing parameters for NAND and PCCARD Banks - */ -typedef struct -{ - uint32_t setupTime; - uint32_t waitSetupTime; - uint32_t holdSetupTime; - uint32_t HiZSetupTime; -} EMMC_NAND_PCCARDTimingConfig_T; - -/** - * @brief EMMC NAND Config structure - */ -typedef struct -{ - EMMC_BANK_NAND_T bank; - EMMC_WAIT_FEATURE_T waitFeature; - EMMC_MEMORY_DATA_WIDTH_T memoryDataWidth; - EMMC_ECC_T ECC; - EMMC_ECC_PAGE_SIZE_BYTE_T ECCPageSize; - uint32_t TCLRSetupTime; - uint32_t TARSetupTime; - EMMC_NAND_PCCARDTimingConfig_T* commonSpaceTimingStruct; - EMMC_NAND_PCCARDTimingConfig_T* attributeSpaceTimingStruct; -} EMMC_NANDConfig_T; - -/** - * @brief EMMC PCCARD Config structure - */ -typedef struct -{ - EMMC_WAIT_FEATURE_T waitFeature; - uint32_t TCLRSetupTime; - uint32_t TARSetupTime; - EMMC_NAND_PCCARDTimingConfig_T* commonSpaceTimingStruct; - EMMC_NAND_PCCARDTimingConfig_T* attributeSpaceTimingStruct; - EMMC_NAND_PCCARDTimingConfig_T* IOSpaceTimingStruct; -} EMMC_PCCARDConfig_T; - -/**@} end of group EMMC_Structure*/ - -/** @addtogroup EMMC_Fuctions Fuctions - @{ -*/ - -/** EMMC reset */ -void EMMC_ResetNORSRAM(EMMC_BANK1_NORSRAM_T bank); -void EMMC_ResetNAND(EMMC_BANK_NAND_T bank); -void EMMC_ResetPCCard(void); - -/** EMMC Configuration */ -void EMMC_ConfigNORSRAM(EMMC_NORSRAMConfig_T* emmcNORSRAMConfig); -void EMMC_ConfigNAND(EMMC_NANDConfig_T* emmcNANDConfig); -void EMMC_ConfigPCCard(EMMC_PCCARDConfig_T* emmcPCCardConfig); -void EMMC_ConfigNORSRAMStructInit(EMMC_NORSRAMConfig_T* emmcNORSRAMConfig); -void EMMC_ConfigNANDStructInit(EMMC_NANDConfig_T* emmcNANDConfig); -void EMMC_ConfigPCCardStructInit(EMMC_PCCARDConfig_T* emmcPCCardConfig); - -/** EMMC bank control */ -void EMMC_EnableNORSRAM(EMMC_BANK1_NORSRAM_T bank); -void EMMC_DisableNORSRAM(EMMC_BANK1_NORSRAM_T bank); -void EMMC_EnableNAND(EMMC_BANK_NAND_T bank); -void EMMC_DisableNAND(EMMC_BANK_NAND_T bank); -void EMMC_EnablePCCARD(void); -void EMMC_DisablePCCARD(void); -void EMMC_EnableNANDECC(EMMC_BANK_NAND_T bank); -void EMMC_DisableNANDECC(EMMC_BANK_NAND_T bank); -uint32_t EMMC_ReadECC(EMMC_BANK_NAND_T bank); - -/** Interrupt and flag */ -void EMMC_EnableInterrupt(EMMC_BANK_NAND_T bank, uint32_t interrupt); -void EMMC_DisableInterrupt(EMMC_BANK_NAND_T bank, uint32_t interrupt); -uint8_t EMMC_ReadStatusFlag(EMMC_BANK_NAND_T bank, EMMC_FLAG_T flag); -void EMMC_ClearStatusFlag(EMMC_BANK_NAND_T bank, uint32_t flag); -uint8_t EMMC_ReadIntFlag(EMMC_BANK_NAND_T bank, EMMC_INT_T flag); -void EMMC_ClearIntFlag(EMMC_BANK_NAND_T bank, uint32_t flag); - -/**@} end of group EMMC_Fuctions*/ -/**@} end of group EMMC_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_EMMC_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_fmc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_fmc.h deleted file mode 100644 index d8b56e2..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_fmc.h +++ /dev/null @@ -1,265 +0,0 @@ -/*! - * @file apm32f10x_fmc.h - * - * @brief This file contains all the functions prototypes for the FMC firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_FMC_H -#define __APM32F10X_FMC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup FMC_Driver FMC Driver - @{ -*/ - -/** @addtogroup FMC_Enumerations Enumerations - @{ -*/ - -/** - * @brief Flash Latency - */ -typedef enum -{ - FMC_LATENCY_0, - FMC_LATENCY_1, - FMC_LATENCY_2 -} FMC_LATENCY_T; - -/** - * @brief FMC Status - */ -typedef enum -{ - FMC_STATUS_BUSY = 1, //!< flash busy - FMC_STATUS_ERROR_PG, //!< flash programming error - FMC_STATUS_ERROR_WRP, //!< flash write protection error - FMC_STATUS_COMPLETE, //!< flash operation complete - FMC_STATUS_TIMEOUT //!< flash time out -} FMC_STATUS_T; - -/** - * @brief Option Bytes IWatchdog - */ -typedef enum -{ - OB_IWDT_HARD = 0x0000, - OB_IWDT_SOTF = 0x0001 -} OB_IWDT_T; - -/** - * @brief Option Bytes nRST STOP - */ -typedef enum -{ - OB_STOP_RST = 0x0000, - OB_STOP_NORST = 0x0002 -} OB_STOP_T; - -/** - * @brief Option Bytes nRST STDBY - */ -typedef enum -{ - OB_STDBY_RST = 0x0000, - OB_STDBY_NORST = 0x0004 -} OB_STDBY_T; - -/** - * @brief FMC Interrupts - */ -typedef enum -{ - FMC_INT_ERR, - FMC_INT_OC -} FMC_INT_T; - -/** - * @brief FMC flag - */ -typedef enum -{ - FMC_FLAG_BUSY = 0x00000001, //!< FMC Busy flag - FMC_FLAG_OC = 0x00000020, //!< FMC End of Operation flag - FMC_FLAG_PE = 0x00000004, //!< FMC Program error flag - FMC_FLAG_WPE = 0x00000010, //!< FMC Write protected error flag - FMC_FLAG_OBE = 0x10000001, //!< FMC Option Byte error flag -} FMC_FLAG_T; - -/**@} end of group FMC_Enumerations*/ - -/** @addtogroup FMC_Macros Macros - @{ -*/ - -/** Macros description */ - -/** Values for APM32 Low and Medium density devices */ -#define FLASH_WRP_PAGE_0_3 ((uint32_t)BIT0) //!< Write protection of page 0 to 3 -#define FLASH_WRP_PAGE_4_7 ((uint32_t)BIT1) //!< Write protection of page 4 to 7 -#define FLASH_WRP_PAGE_8_11 ((uint32_t)BIT2) //!< Write protection of page 8 to 11 -#define FLASH_WRP_PAGE_12_15 ((uint32_t)BIT3) //!< Write protection of page 12 to 15 -#define FLASH_WRP_PAGE_16_19 ((uint32_t)BIT4) //!< Write protection of page 16 to 19 -#define FLASH_WRP_PAGE_20_23 ((uint32_t)BIT5) //!< Write protection of page 20 to 23 -#define FLASH_WRP_PAGE_24_27 ((uint32_t)BIT6) //!< Write protection of page 24 to 27 -#define FLASH_WRP_PAGE_28_31 ((uint32_t)BIT7) //!< Write protection of page 28 to 31 - -/** Values for APM32 Medium-density devices */ -#define FLASH_WRP_PAGE_32_35 ((uint32_t)BIT8) //!< Write protection of page 32 to 35 -#define FLASH_WRP_PAGE_36_39 ((uint32_t)BIT9) //!< Write protection of page 36 to 39 -#define FLASH_WRP_PAGE_40_43 ((uint32_t)BIT10) //!< Write protection of page 40 to 43 -#define FLASH_WRP_PAGE_44_47 ((uint32_t)BIT11) //!< Write protection of page 44 to 47 -#define FLASH_WRP_PAGE_48_51 ((uint32_t)BIT12) //!< Write protection of page 48 to 51 -#define FLASH_WRP_PAGE_52_55 ((uint32_t)BIT13) //!< Write protection of page 52 to 55 -#define FLASH_WRP_PAGE_56_59 ((uint32_t)BIT14) //!< Write protection of page 56 to 59 -#define FLASH_WRP_PAGE_60_63 ((uint32_t)BIT15) //!< Write protection of page 60 to 63 -#define FLASH_WRP_PAGE_64_67 ((uint32_t)BIT16) //!< Write protection of page 64 to 67 -#define FLASH_WRP_PAGE_68_71 ((uint32_t)BIT17) //!< Write protection of page 68 to 71 -#define FLASH_WRP_PAGE_72_75 ((uint32_t)BIT18) //!< Write protection of page 72 to 75 -#define FLASH_WRP_PAGE_76_79 ((uint32_t)BIT19) //!< Write protection of page 76 to 79 -#define FLASH_WRP_PAGE_80_83 ((uint32_t)BIT20) //!< Write protection of page 80 to 83 -#define FLASH_WRP_PAGE_84_87 ((uint32_t)BIT21) //!< Write protection of page 84 to 87 -#define FLASH_WRP_PAGE_88_91 ((uint32_t)BIT22) //!< Write protection of page 88 to 91 -#define FLASH_WRP_PAGE_92_95 ((uint32_t)BIT23) //!< Write protection of page 92 to 95 -#define FLASH_WRP_PAGE_96_99 ((uint32_t)BIT24) //!< Write protection of page 96 to 99 -#define FLASH_WRP_PAGE_100_103 ((uint32_t)BIT25) //!< Write protection of page 100 to 103 -#define FLASH_WRP_PAGE_104_107 ((uint32_t)BIT26) //!< Write protection of page 104 to 107 -#define FLASH_WRP_PAGE_108_111 ((uint32_t)BIT27) //!< Write protection of page 108 to 111 -#define FLASH_WRP_PAGE_112_115 ((uint32_t)BIT28) //!< Write protection of page 112 to 115 -#define FLASH_WRP_PAGE_116_119 ((uint32_t)BIT29) //!< Write protection of page 116 to 119 -#define FLASH_WRP_PAGE_120_123 ((uint32_t)BIT30) //!< Write protection of page 120 to 123 -#define FLASH_WRP_PAGE_124_127 ((uint32_t)BIT31) //!< Write protection of page 124 to 127 - -/** Values only for APM32 High-density devices */ -#define FLASH_WRP_PAGE_0_1 ((uint32_t)BIT0) //!< Write protection of page 0 to 1 -#define FLASH_WRP_PAGE_2_3 ((uint32_t)BIT1) //!< Write protection of page 2 to 3 -#define FLASH_WRP_PAGE_4_5 ((uint32_t)BIT2) //!< Write protection of page 4 to 5 -#define FLASH_WRP_PAGE_6_7 ((uint32_t)BIT3) //!< Write protection of page 6 to 7 -#define FLASH_WRP_PAGE_8_9 ((uint32_t)BIT4) //!< Write protection of page 8 to 9 -#define FLASH_WRP_PAGE_10_11 ((uint32_t)BIT5) //!< Write protection of page 10 to 11 -#define FLASH_WRP_PAGE_12_13 ((uint32_t)BIT6) //!< Write protection of page 12 to 13 -#define FLASH_WRP_PAGE_14_15 ((uint32_t)BIT7) //!< Write protection of page 14 to 15 -#define FLASH_WRP_PAGE_16_17 ((uint32_t)BIT8) //!< Write protection of page 16 to 17 -#define FLASH_WRP_PAGE_18_19 ((uint32_t)BIT9) //!< Write protection of page 18 to 19 -#define FLASH_WRP_PAGE_20_21 ((uint32_t)BIT10) //!< Write protection of page 20 to 21 -#define FLASH_WRP_PAGE_22_23 ((uint32_t)BIT11) //!< Write protection of page 22 to 23 -#define FLASH_WRP_PAGE_24_25 ((uint32_t)BIT12) //!< Write protection of page 24 to 25 -#define FLASH_WRP_PAGE_26_27 ((uint32_t)BIT13) //!< Write protection of page 26 to 27 -#define FLASH_WRP_PAGE_28_29 ((uint32_t)BIT14) //!< Write protection of page 28 to 29 -#define FLASH_WRP_PAGE_30_31 ((uint32_t)BIT15) //!< Write protection of page 30 to 31 -#define FLASH_WRP_PAGE_32_33 ((uint32_t)BIT16) //!< Write protection of page 32 to 33 -#define FLASH_WRP_PAGE_34_35 ((uint32_t)BIT17) //!< Write protection of page 34 to 35 -#define FLASH_WRP_PAGE_36_37 ((uint32_t)BIT18) //!< Write protection of page 36 to 37 -#define FLASH_WRP_PAGE_38_39 ((uint32_t)BIT19) //!< Write protection of page 38 to 39 -#define FLASH_WRP_PAGE_40_41 ((uint32_t)BIT20) //!< Write protection of page 40 to 41 -#define FLASH_WRP_PAGE_42_43 ((uint32_t)BIT21) //!< Write protection of page 42 to 43 -#define FLASH_WRP_PAGE_44_45 ((uint32_t)BIT22) //!< Write protection of page 44 to 45 -#define FLASH_WRP_PAGE_46_47 ((uint32_t)BIT23) //!< Write protection of page 46 to 47 -#define FLASH_WRP_PAGE_48_49 ((uint32_t)BIT24) //!< Write protection of page 48 to 49 -#define FLASH_WRP_PAGE_50_51 ((uint32_t)BIT25) //!< Write protection of page 50 to 51 -#define FLASH_WRP_PAGE_52_53 ((uint32_t)BIT26) //!< Write protection of page 52 to 53 -#define FLASH_WRP_PAGE_54_55 ((uint32_t)BIT27) //!< Write protection of page 54 to 55 -#define FLASH_WRP_PAGE_56_57 ((uint32_t)BIT28) //!< Write protection of page 56 to 57 -#define FLASH_WRP_PAGE_58_59 ((uint32_t)BIT29) //!< Write protection of page 58 to 59 -#define FLASH_WRP_PAGE_60_61 ((uint32_t)BIT30) //!< Write protection of page 60 to 61 -#define FLASH_WRP_PAGE_62_127 ((uint32_t)BIT31) //!< Write protection of page 62 to 127 -#define FMC_WRP_PAGE_ALL ((uint32_t)0xFFFFFFFF) //!< Write protection of page all */ - -/**@} end of group FMC_Macros*/ - -/** @addtogroup FMC_Structure Data Structure - @{ -*/ - -/** - * @brief User Option byte config struct definition - */ -typedef struct -{ - OB_IWDT_T iwdtSet; - OB_STOP_T stopSet; - OB_STDBY_T stdbySet; -} FMC_UserConfig_T; - -/**@} end of group FMC_Structure*/ - -/** @addtogroup FMC_Fuctions Fuctions - @{ -*/ - -/** Initialization and Configuration */ -void FMC_ConfigLatency(FMC_LATENCY_T latency); -void FMC_EnableHalfCycleAccess(void); -void FMC_DisableHalfCycleAccess(void); -void FMC_EnablePrefetchBuffer(void); -void FMC_DisablePrefetchBuffer(void); - -/** Lock management */ -void FMC_Unlock(void); -void FMC_Lock(void); - -/** Erase management */ -FMC_STATUS_T FMC_ErasePage(uint32_t pageAddr); -FMC_STATUS_T FMC_EraseAllPage(void); -FMC_STATUS_T FMC_EraseOptionBytes(void); - -/** Read Write management */ -FMC_STATUS_T FMC_ProgramWord(uint32_t address, uint32_t data); -FMC_STATUS_T FMC_ProgramHalfWord(uint32_t address, uint16_t data); -FMC_STATUS_T FMC_ProgramOptionByteData(uint32_t address, uint8_t data); -FMC_STATUS_T FMC_EnableWriteProtection(uint32_t page); -FMC_STATUS_T FMC_EnableReadOutProtection(void); -FMC_STATUS_T FMC_DisableReadOutProtection(void); -FMC_STATUS_T FMC_ConfigUserOptionByte(FMC_UserConfig_T* userConfig); -uint32_t FMC_ReadUserOptionByte(void); -uint32_t FMC_ReadOptionByteWriteProtection(void); -uint8_t FMC_GetReadProtectionStatus(void); -uint8_t FMC_ReadPrefetchBufferStatus(void); - -/** Interrupts and flags */ -void FMC_EnableInterrupt(FMC_INT_T interrupt); -void FMC_DisableInterrupt(FMC_INT_T interrupt); -uint8_t FMC_ReadStatusFlag(FMC_FLAG_T flag); -void FMC_ClearStatusFlag(uint32_t flag); - -/** Status management */ -FMC_STATUS_T FMC_ReadStatus(void); -FMC_STATUS_T FMC_WaitForLastOperation(uint32_t timeOut); - -/**@} end of group FMC_Fuctions*/ -/**@} end of group FMC_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_FMC_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_gpio.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_gpio.h deleted file mode 100644 index b462ba5..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_gpio.h +++ /dev/null @@ -1,261 +0,0 @@ -/*! - * @file apm32f10x_gpio.h - * - * @brief This file contains all the functions prototypes for the GPIO firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_GPIO_H -#define __APM32F10X_GPIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup GPIO_Driver GPIO Driver - @{ -*/ - -/** @addtogroup GPIO_Enumerations Enumerations - @{ -*/ - -/** - * @brief GPIO Output Maximum frequency selection - */ -typedef enum -{ - GPIO_SPEED_10MHz = 1, - GPIO_SPEED_20MHz, - GPIO_SPEED_50MHz -}GPIO_SPEED_T; - -/** - * @brief Configuration Mode enumeration - */ -typedef enum -{ - GPIO_MODE_ANALOG = 0x0, //!< Analog mode - GPIO_MODE_IN_FLOATING = 0x04, //!< Floating input - GPIO_MODE_IN_PD = 0x28, //!< Input with pull-down - GPIO_MODE_IN_PU = 0x48, //!< Input with pull-up - GPIO_MODE_OUT_PP = 0x80, //!< General purpose output push-pull - GPIO_MODE_OUT_OD = 0x84, //!< General purpose output Open-drain - GPIO_MODE_AF_PP = 0x88, //!< Alternate function output Push-pull - GPIO_MODE_AF_OD = 0x8C, //!< Alternate function output Open-drain -}GPIO_MODE_T; - -/** - * @brief Definition of the GPIO pins - */ -typedef enum -{ - GPIO_PIN_0 = ((uint16_t)BIT0), - GPIO_PIN_1 = ((uint16_t)BIT1), - GPIO_PIN_2 = ((uint16_t)BIT2), - GPIO_PIN_3 = ((uint16_t)BIT3), - GPIO_PIN_4 = ((uint16_t)BIT4), - GPIO_PIN_5 = ((uint16_t)BIT5), - GPIO_PIN_6 = ((uint16_t)BIT6), - GPIO_PIN_7 = ((uint16_t)BIT7), - GPIO_PIN_8 = ((uint16_t)BIT8), - GPIO_PIN_9 = ((uint16_t)BIT9), - GPIO_PIN_10 = ((uint16_t)BIT10), - GPIO_PIN_11 = ((uint16_t)BIT11), - GPIO_PIN_12 = ((uint16_t)BIT12), - GPIO_PIN_13 = ((uint16_t)BIT13), - GPIO_PIN_14 = ((uint16_t)BIT14), - GPIO_PIN_15 = ((uint16_t)BIT15), - GPIO_PIN_ALL = ((uint32_t)0XFFFF), -} GPIO_PIN_T; - -/** - * @brief GPIO remap type define - */ -typedef enum -{ - GPIO_NO_REMAP_SPI1 = 0x00000010, - GPIO_REMAP_SPI1 = 0x00000011, - - GPIO_NO_REMAP_I2C1 = 0x00000110, - GPIO_REMAP_I2C1 = 0x00000111, - - GPIO_NO_REMAP_USART1 = 0x00000210, - GPIO_REMAP_USART1 = 0x00000211, - - GPIO_NO_REMAP_USART2 = 0x00000310, - GPIO_REMAP_USART2 = 0x00000311, - - GPIO_NO_REMAP_USART3 = 0x00000430, - GPIO_PARTIAL_REMAP_USART3 = 0x00000431, - GPIO_FULL_REMAP_USART3 = 0x00000433, - - GPIO_NO_REMAP_TMR1 = 0x00000630, - GPIO_PARTIAL_REMAP_TMR1 = 0x00000631, - GPIO_FULL_REMAP_TMR1 = 0x00000633, - - GPIO_NO_REMAP_TMR2 = 0x00000830, - GPIO_PARTIAL_REMAP1_TMR2 = 0x00000831, - GPIO_PARTIAL_REMAP2_TMR2 = 0x00000832, - GPIO_FULL_REMAP_TMR2 = 0x00000833, - - GPIO_NO_REMAP_TMR3 = 0x00000A30, - GPIO_PARTIAL_REMAP_TMR3 = 0x00000A32, - GPIO_FULL_REMAP_TMR3 = 0x00000A33, - - GPIO_NO_REMAP_TMR4 = 0x00000C10, - GPIO_REMAP_TMR4 = 0x00000C11, - - GPIO_NO_REMAP_CAN1 = 0x00000D30, - GPIO_REMAP1_CAN1 = 0x00000D32, - GPIO_REMAP2_CAN1 = 0x00000D33, - - GPIO_NO_REMAP_PD01 = 0x00000F10, - GPIO_REMAP_PD01 = 0x00000F11, - - GPIO_NO_REMAP_TMR5CH4_LSI = 0x00001010, - GPIO_REMAP_TMR5CH4_LSI = 0x00001011, - - GPIO_NO_REMAP_ADC1_ETRGINJ = 0x00001110, - GPIO_REMAP_ADC1_ETRGINJ = 0x00001111, - - GPIO_NO_REMAP_ADC1_ETRGREG = 0x00001210, - GPIO_REMAP_ADC1_ETRGREG = 0x00001211, - - GPIO_NO_REMAP_ADC2_ETRGINJ = 0x00001310, - GPIO_REMAP_ADC2_ETRGINJ = 0x00001311, - - GPIO_NO_REMAP_ADC2_ETRGREG = 0x00001410, - GPIO_REMAP_ADC2_ETRGREG = 0x00001411, - - GPIO_NO_REMAP_CAN2 = 0x00001610, - GPIO_REMAP_CAN2 = 0x00001611, - - GPIO_NO_REMAP_SWJ = 0x00001870, - GPIO_REMAP_SWJ_NOJTRST = 0x00001871, - GPIO_REMAP_SWJ_JTAGDISABLE = 0x00001872, - GPIO_REMAP_SWJ_DISABLE = 0x00001874, - - GPIO_NO_REMAP_EMMC_NADV = 0x00010A10, - GPIO_REMAP_EMMC_NADV = 0x00010A11, -}GPIO_REMAP_T; - -/** - * @brief gpio port source define - */ -typedef enum -{ - GPIO_PORT_SOURCE_A, - GPIO_PORT_SOURCE_B, - GPIO_PORT_SOURCE_C, - GPIO_PORT_SOURCE_D, - GPIO_PORT_SOURCE_E, - GPIO_PORT_SOURCE_F, - GPIO_PORT_SOURCE_G, -}GPIO_PORT_SOURCE_T; - -/** - * @brief gpio pin source define - */ -typedef enum -{ - GPIO_PIN_SOURCE_0, - GPIO_PIN_SOURCE_1, - GPIO_PIN_SOURCE_2, - GPIO_PIN_SOURCE_3, - GPIO_PIN_SOURCE_4, - GPIO_PIN_SOURCE_5, - GPIO_PIN_SOURCE_6, - GPIO_PIN_SOURCE_7, - GPIO_PIN_SOURCE_8, - GPIO_PIN_SOURCE_9, - GPIO_PIN_SOURCE_10, - GPIO_PIN_SOURCE_11, - GPIO_PIN_SOURCE_12, - GPIO_PIN_SOURCE_13, - GPIO_PIN_SOURCE_14, - GPIO_PIN_SOURCE_15, -}GPIO_PIN_SOURCE_T; - -/**@} end of group GPIO_Enumerations*/ - - -/** @addtogroup GPIO_Structure Data Structure - @{ -*/ - -/** - * @brief GPIO Config structure definition - */ -typedef struct -{ - uint16_t pin; - GPIO_SPEED_T speed; - GPIO_MODE_T mode; -}GPIO_Config_T; - -/**@} end of group GPIO_Structure*/ - -/** @addtogroup GPIO_Fuctions Fuctions - @{ -*/ - -/** Reset and common Configuration */ -void GPIO_Reset(GPIO_T* port); -void GPIO_AFIOReset(void); -void GPIO_Config(GPIO_T* port, GPIO_Config_T* gpioConfig); -void GPIO_ConfigStructInit(GPIO_Config_T* gpioConfig); - -/** Read */ -uint8_t GPIO_ReadInputBit(GPIO_T* port, uint16_t pin); -uint16_t GPIO_ReadInputPort(GPIO_T* port); -uint8_t GPIO_ReadOutputBit(GPIO_T* port, uint16_t pin); -uint16_t GPIO_ReadOutputPort(GPIO_T* port); - -/** Write */ -void GPIO_SetBit(GPIO_T* port, uint16_t pin); -void GPIO_ResetBit(GPIO_T* port, uint16_t pin); -void GPIO_WriteOutputPort(GPIO_T* port, uint16_t portValue); -void GPIO_WriteBitValue(GPIO_T* port, uint16_t pin, uint8_t bitVal); - -/** GPIO Configuration */ -void GPIO_ConfigPinLock(GPIO_T* port, uint16_t pin); -void GPIO_ConfigEventOutput(GPIO_PORT_SOURCE_T portSource, GPIO_PIN_SOURCE_T pinSource); -void GPIO_EnableEventOutput(void); -void GPIO_DisableEventOutput(void); -void GPIO_ConfigPinRemap(GPIO_REMAP_T remap); -void GPIO_ConfigEINTLine(GPIO_PORT_SOURCE_T portSource, GPIO_PIN_SOURCE_T pinSource); - -/**@} end of group GPIO_Fuctions*/ -/**@} end of group GPIO_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_GPIO_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_i2c.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_i2c.h deleted file mode 100644 index ee2cfc7..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_i2c.h +++ /dev/null @@ -1,348 +0,0 @@ -/*! - * @file apm32f10x_i2c.h - * - * @brief This file contains all the functions prototypes for the I2C firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_I2C_H -#define __APM32F10X_I2C_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup I2C_Driver I2C Driver - @{ -*/ - -/** @addtogroup I2C_Enumerations Enumerations - @{ -*/ - -/** - * @brief I2C Mode - */ -typedef enum -{ - I2C_MODE_I2C = 0x0000, - I2C_MODE_SMBUUSDEVICE = 0x0002, - I2C_MODE_SMBUSHOST = 0x000A -} I2C_MODE_T; - -/** - * @brief I2C duty cycle in fast mode - */ -typedef enum -{ - I2C_DUTYCYCLE_16_9 = 0x4000, - I2C_DUTYCYCLE_2 = 0xBFFF -} I2C_DUTYCYCLE_T; - -/** - * @brief I2C acknowledgement - */ -typedef enum -{ - I2C_ACK_DISABLE, - I2C_ACK_ENABLE -} I2C_ACK_T; - -/** - * @brief I2C acknowledged address - */ -typedef enum -{ - I2C_ACK_ADDRESS_7BIT = 0x4000, - I2C_ACK_ADDRESS_10BIT = 0xC000 -} I2C_ACK_ADDRESS_T; - -/** - * @brief I2C interrupts definition - */ -typedef enum -{ - I2C_INT_BUF = 0x0400, - I2C_INT_EVT = 0x0200, - I2C_INT_ERR = 0x0100 -} I2C_INT_T; - -/** - * @brief I2C transfer direction - */ - -typedef enum -{ - I2C_DIRECTION_TX, - I2C_DIRECTION_RX -} I2C_DIRECTION_T; - -/** - * @brief I2C Register - */ -typedef enum -{ - I2C_REGISTER_CTRL1, - I2C_REGISTER_CTRL2, - I2C_REGISTER_SADDR1, - I2C_REGISTER_SADDR2, - I2C_REGISTER_DATA, - I2C_REGISTER_STS1, - I2C_REGISTER_STS2, - I2C_REGISTER_CLKCTRL, - I2C_REGISTER_RISETMAX, - I2C_REGISTER_SWITCH -} I2C_REGISTER_T; - -/** - * @brief I2C NCAK position - */ -typedef enum -{ - I2C_NACK_POSITION_NEXT, - I2C_NACK_POSITION_CURRENT -} I2C_NACK_POSITION_T; - -/** - * @brief I2C SMBus alert pin level - */ -typedef enum -{ - I2C_SMBUSALER_LOW, - I2C_SMBUSALER_HIGH -} I2C_SMBUSALER_T; - -/** - * @brief I2C PEC position - */ -typedef enum -{ - I2C_PEC_POSITION_NEXT, - I2C_PEC_POSITION_CURRENT -} I2C_PEC_POSITION_T; - -/** - * @brief I2C Events - */ -typedef enum -{ - /** I2C Master Events */ - /** Event 5: Communication start event */ - I2C_EVENT_MASTER_MODE_SELECT = 0x00030001, //!< BUSBSYFLG, MSFLG and STARTFLG flag - - /** - * Event 6: 7-bit Address Acknowledge - * in case of master receiver - */ - I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED = 0x00070082, //!< BUSBSYFLG, MSFLG, ADDRFLG, TXBEFLG and TRFLG flags */ - I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED = 0x00030002, //!< BUSBSYFLG, MSFLG and ADDRFLG flags */ - /** - * Event 9: Master has sent the first byte - * in 10-bit address mode - */ - I2C_EVENT_MASTER_MODE_ADDRESS10 = 0x00030008, //!< BUSBSYFLG, MSFLG and ADDR10FLG flags */ - - /** Master RECEIVER mode */ - /** Event 7 */ - I2C_EVENT_MASTER_BYTE_RECEIVED = 0x00030040, //!< BUSBSYFLG, MSFLG and RXBNEFLG flags */ - - /** Master TRANSMITTER mode */ - /** Event 8 */ - I2C_EVENT_MASTER_BYTE_TRANSMITTING = 0x00070080, //!< TRFLG, BUSBSYFLG, MSFLG, TXBEFLG flags */ - /** Event 8_2 */ - I2C_EVENT_MASTER_BYTE_TRANSMITTED = 0x00070084, //!< TRFLG, BUSBSYFLG, MSFLG, TXBEFLG and BTCFLG flags */ - - - /** EV1 (all the events below are variants of EV1) */ - /** 1, Case of One Single Address managed by the slave */ - I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED = 0x00020002, //!< BUSBSYFLG and ADDRFLG flags */ - I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED = 0x00060082, //!< TRFLG, BUSBSYFLG, TXBEFLG and ADDRFLG flags */ - - /** 2, Case of Dual address managed by the slave */ - I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED = 0x00820000, //!< DUALF and BUSBSYFLG flags */ - I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED = 0x00860080, //!< DUALF, TRFLG, BUSBSYFLG and TXBEFLG flags */ - - /** 3, Case of General Call enabled for the slave */ - I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED = 0x00120000, //!< GENCALL and BUSBSYFLG flags */ - - - /** Slave RECEIVER mode */ - /** EV2 */ - I2C_EVENT_SLAVE_BYTE_RECEIVED = 0x00020040, //!< BUSBSYFLG and RXBNEFLG flags */ - /** EV4 */ - I2C_EVENT_SLAVE_STOP_DETECTED = 0x00000010, //!< STOPFLG flag */ - - /** Slave TRANSMITTER mode */ - /** EV3 */ - I2C_EVENT_SLAVE_BYTE_TRANSMITTED = 0x00060084, //!< TRFLG, BUSBSYFLG, TXBEFLG and BTCFLG flags */ - I2C_EVENT_SLAVE_BYTE_TRANSMITTING = 0x00060080, //!< TRFLG, BUSBSYFLG and TXBEFLG flags */ - /** EV3_2 */ - I2C_EVENT_SLAVE_ACK_FAILURE = 0x00000400, //!< AEFLG flag */ -} I2C_EVENT_T; - -/** - * @brief I2C flags - */ -typedef enum -{ - /** STS2 register flags */ - I2C_FLAG_DUALADDR, - I2C_FLAG_SMMHADDR, - I2C_FLAG_SMBDADDR, - I2C_FLAG_GENCALL, - I2C_FLAG_TR, - I2C_FLAG_BUSBSY, - I2C_FLAG_MS, - - /** STS1 register flags */ - I2C_FLAG_SMBALT, - I2C_FLAG_TTE, - I2C_FLAG_PECE, - I2C_FLAG_OVRUR, - I2C_FLAG_AE, - I2C_FLAG_AL, - I2C_FLAG_BERR, - I2C_FLAG_TXBE, - I2C_FLAG_RXBNE, - I2C_FLAG_STOP, - I2C_FLAG_ADDR10, - I2C_FLAG_BTC, - I2C_FLAG_ADDR, - I2C_FLAG_START, -} I2C_FLAG_T; - -/** - * @brief I2C interrupt - */ -typedef enum -{ - I2C_INT_FLAG_SMBALT = 0x01008000, - I2C_INT_FLAG_TTE = 0x01004000, - I2C_INT_FLAG_PECE = 0x01001000, - I2C_INT_FLAG_OVRUR = 0x01000800, - I2C_INT_FLAG_AE = 0x01000400, - I2C_INT_FLAG_AL = 0x01000200, - I2C_INT_FLAG_BERR = 0x01000100, - I2C_INT_FLAG_TXBE = 0x06000080, - I2C_INT_FLAG_RXBNE = 0x06000040, - I2C_INT_FLAG_STOP = 0x02000010, - I2C_INT_FLAG_ADDR10 = 0x02000008, - I2C_INT_FLAG_BTC = 0x02000004, - I2C_INT_FLAG_ADDR = 0x02000002, - I2C_INT_FLAG_START = 0x02000001, -} I2C_INT_FLAG_T; - -/**@} end of group I2C_Enumerations*/ - -/** @addtogroup I2C_Structure Data Structure - @{ -*/ - -/** - * @brief I2C Config structure definition - */ -typedef struct -{ - uint32_t clockSpeed; - I2C_MODE_T mode; - I2C_DUTYCYCLE_T dutyCycle; - uint16_t ownAddress1; - I2C_ACK_T ack; - I2C_ACK_ADDRESS_T ackAddress; -} I2C_Config_T; - -/**@} end of group I2C_Structure*/ - - -/** @addtogroup I2C_Fuctions Fuctions - @{ -*/ - -/** I2C reset and configuration */ -void I2C_Reset(I2C_T* i2c); -void I2C_Config(I2C_T* i2c, I2C_Config_T* i2cConfig); -void I2C_ConfigStructInit(I2C_Config_T* i2cConfig); -void I2C_Enable(I2C_T* i2c); -void I2C_Disable(I2C_T* i2c); -void I2C_EnableGenerateStart(I2C_T* i2c); -void I2C_DisableGenerateStart(I2C_T* i2c); -void I2C_EnableGenerateStop(I2C_T* i2c); -void I2C_DisableGenerateStop(I2C_T* i2c); -void I2C_EnableAcknowledge(I2C_T* i2c); -void I2C_DisableAcknowledge(I2C_T* i2c); -void I2C_ConfigOwnAddress2(I2C_T* i2c, uint8_t address); -void I2C_EnableDualAddress(I2C_T* i2c); -void I2C_DisableDualAddress(I2C_T* i2c); -void I2C_EnableGeneralCall(I2C_T* i2c); -void I2C_DisableGeneralCall(I2C_T* i2c); - -/** Transmit Configuration */ -void I2C_TxData(I2C_T* i2c, uint8_t data); -uint8_t I2C_RxData(I2C_T* i2c); -void I2C_Tx7BitAddress(I2C_T* i2c, uint8_t address, I2C_DIRECTION_T direction); -uint16_t I2C_ReadRegister(I2C_T* i2c, I2C_REGISTER_T i2cRegister); -void I2C_EnableSoftwareReset(I2C_T* i2c); -void I2C_DisableSoftwareReset(I2C_T* i2c); -void I2C_ConfigNACKPosition(I2C_T* i2c, I2C_NACK_POSITION_T NACKPosition); -void I2C_ConfigSMBusAlert(I2C_T* i2c, I2C_SMBUSALER_T SMBusState); -void I2C_EnablePECTransmit(I2C_T* i2c); -void I2C_DisablePECTransmit(I2C_T* i2c); -void I2C_ConfigPECPosition(I2C_T* i2c, I2C_PEC_POSITION_T PECPosition); -void I2C_EnablePEC(I2C_T* i2c); -void I2C_DisablePEC(I2C_T* i2c); -uint8_t I2C_ReadPEC(I2C_T* i2c); -void I2C_EnableARP(I2C_T* i2c); -void I2C_DisableARP(I2C_T* i2c); -void I2C_EnableStretchClock(I2C_T* i2c); -void I2C_DisableStretchClock(I2C_T* i2c); -void I2C_ConfigFastModeDutyCycle(I2C_T* i2c, I2C_DUTYCYCLE_T dutyCycle); - -/** DMA */ -void I2C_EnableDMA(I2C_T* i2c); -void I2C_DisableDMA(I2C_T* i2c); -void I2C_EnableDMALastTransfer(I2C_T* i2c); -void I2C_DisableDMALastTransfer(I2C_T* i2c); - -/** Interrupts and flags */ -void I2C_EnableInterrupt(I2C_T* i2c, uint16_t interrupt); -void I2C_DisableInterrupt(I2C_T* i2c, uint16_t interrupt); -uint8_t I2C_ReadEventStatus(I2C_T* i2c, I2C_EVENT_T i2cEvent); -uint32_t I2C_ReadLastEvent(I2C_T* i2c); -uint8_t I2C_ReadStatusFlag(I2C_T* i2c, I2C_FLAG_T flag); -void I2C_ClearStatusFlag(I2C_T* i2c, I2C_FLAG_T flag); -uint8_t I2C_ReadIntFlag(I2C_T* i2c, I2C_INT_FLAG_T flag); -void I2C_ClearIntFlag(I2C_T* i2c, uint32_t flag); - -/**@} end of group I2C_Fuctions*/ -/**@} end of group I2C_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_I2C_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_iwdt.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_iwdt.h deleted file mode 100644 index 962f8a1..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_iwdt.h +++ /dev/null @@ -1,122 +0,0 @@ -/*! - * @file apm32f10x_iwdt.h - * - * @brief This file contains all the functions prototypes for the IWDT firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_IWDT_H -#define __APM32F10X_IWDT_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup IWDT_Driver IWDT Driver - @{ -*/ - -/** @addtogroup IWDT_Enumerations Enumerations - @{ -*/ - -/** - * @brief IWDT KEYWORD define - */ -typedef enum -{ - IWDT_KEYWORD_RELOAD = 0xAAAA, - IWDT_KEYWORD_ENABLE = 0xCCCC -}IWDT_KEYWORD_T; - -/** - * @brief IWDT Write Access define - */ -typedef enum -{ - IWDT_WRITEACCESS_ENABLE = 0x5555, - IWDT_WRITEACCESS_DISABLE = 0x0000 -}IWDT_WRITEACCESS_T; - -/** - * @brief IWDT Divider - */ -typedef enum -{ - IWDT_DIVIDER_4 = 0x00, - IWDT_DIVIDER_8 = 0x01, - IWDT_DIVIDER_16 = 0x02, - IWDT_DIVIDER_32 = 0x03, - IWDT_DIVIDER_64 = 0x04, - IWDT_DIVIDER_128 = 0x05, - IWDT_DIVIDER_256 = 0x06 -}IWDT_DIVIDER_T; - -/** - * @brief IWDT Flag - */ -typedef enum -{ - IWDT_FLAG_PSCU = BIT0, - IWDT_FLAG_CNTU = BIT1 -}IWDT_FLAG_T; - -/**@} end of group IWDT_Enumerations*/ - - -/** @addtogroup IWDT_Fuctions Fuctions - @{ -*/ - -/** Enable IWDT */ -void IWDT_Enable(void); - -/** Refresh IWDT */ -void IWDT_Refresh(void); - -/** Counter reload */ -void IWDT_ConfigReload(uint16_t reload); - -/** Divider */ -void IWDT_ConfigDivider(uint8_t div); - -/** Write Access */ -void IWDT_EnableWriteAccess(void); -void IWDT_DisableWriteAccess(void); - -/** flag */ -uint8_t IWDT_ReadStatusFlag(uint16_t flag); - -/**@} end of group IWDT_Fuctions*/ -/**@} end of group IWDT_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_IWDT_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_misc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_misc.h deleted file mode 100644 index 7448aeb..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_misc.h +++ /dev/null @@ -1,118 +0,0 @@ -/*! - * @file apm32f10x_misc.h - * - * @brief This file provides all the miscellaneous firmware functions. - * Include NVIC,SystemTick and Power management. - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_MISC_H -#define __APM32F10X_MISC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup MISC_Driver MISC Driver - @{ -*/ - -/** @addtogroup MISC_Enumerations Enumerations - @{ -*/ - -/** - * @brief NVIC Vect table - */ -typedef enum -{ - NVIC_VECT_TAB_RAM = 0x20000000, - NVIC_VECT_TAB_FLASH = 0x08000000, -}NVIC_VECT_TAB_T; - -/** - * @brief system low power mode - */ -typedef enum -{ - NVIC_LOWPOWER_SEVONPEND = 0x10, - NVIC_LOWPOWER_SLEEPDEEP = 0x04, - NVIC_LOWPOWER_SLEEPONEXIT = 0x02 -}NVIC_LOWPOWER_T; - -/** - * @brief nvic priority group - */ -typedef enum -{ - NVIC_PRIORITY_GROUP_0 = 0x700, //!< 0 bits for pre-emption priority,4 bits for subpriority - NVIC_PRIORITY_GROUP_1 = 0x600, //!< 1 bits for pre-emption priority,3 bits for subpriority - NVIC_PRIORITY_GROUP_2 = 0x500, //!< 2 bits for pre-emption priority,2 bits for subpriority - NVIC_PRIORITY_GROUP_3 = 0x400, //!< 3 bits for pre-emption priority,1 bits for subpriority - NVIC_PRIORITY_GROUP_4 = 0x300 //!< 4 bits for pre-emption priority,0 bits for subpriority -}NVIC_PRIORITY_GROUP_T; - -/** - * @brief SysTick Clock source - */ -typedef enum -{ - SYSTICK_CLK_SOURCE_HCLK_DIV8 = 0x00, - SYSTICK_CLK_SOURCE_HCLK = 0x01 -}SYSTICK_CLK_SOURCE_T; - -/**@} end of group MISC_Enumerations*/ - - -/** @addtogroup MISC_Fuctions Fuctions - @{ -*/ - -/** NVIC */ -void NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_T priorityGroup); -void NVIC_EnableIRQRequest(IRQn_Type irq, uint8_t preemptionPriority, uint8_t subPriority); -void NVIC_DisableIRQRequest(IRQn_Type irq); - -/** Vector Table */ -void NVIC_ConfigVectorTable(NVIC_VECT_TAB_T vectTab, uint32_t offset); - -/** Power */ -void NVIC_SetSystemLowPower(NVIC_LOWPOWER_T lowPowerMode); -void NVIC_ResetystemLowPower(NVIC_LOWPOWER_T lowPowerMode); - -/** Systick */ -void SysTick_ConfigCLKSource(SYSTICK_CLK_SOURCE_T clkSource); - -/**@} end of group MISC_Fuctions*/ -/**@} end of group MISC_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_MISC_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_pmu.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_pmu.h deleted file mode 100644 index 3c7797a..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_pmu.h +++ /dev/null @@ -1,123 +0,0 @@ -/*! - * @file apm32f10x_pmu.h - * - * @brief This file contains all the functions prototypes for the PMU firmware library. - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_PMU_H -#define __APM32F10X_PMU_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup PMU_Driver PMU Driver - @{ -*/ - -/** @addtogroup PMU_Enumerations Enumerations - @{ -*/ - -/** - * @brief PMU PVD detection level - */ -typedef enum -{ - PMU_PVD_LEVEL_2V2 = 0x00, //!< PVD detection level set to 2.2V - PMU_PVD_LEVEL_2V3 = 0x01, //!< PVD detection level set to 2.3V - PMU_PVD_LEVEL_2V4 = 0x02, //!< PVD detection level set to 2.4V - PMU_PVD_LEVEL_2V5 = 0x03, //!< PVD detection level set to 2.5V - PMU_PVD_LEVEL_2V6 = 0x04, //!< PVD detection level set to 2.6V - PMU_PVD_LEVEL_2V7 = 0x05, //!< PVD detection level set to 2.7V - PMU_PVD_LEVEL_2V8 = 0x06, //!< PVD detection level set to 2.8V - PMU_PVD_LEVEL_2V9 = 0x07, //!< PVD detection level set to 2.9V -} PMU_PVD_LEVEL_T; - -/** - * @brief PMU Regulator state in STOP mode - */ -typedef enum -{ - PMU_REGULATOR_ON = 0x00, - PMU_REGULATOR_LOWPOWER = 0x01 -} PMU_REGULATOR_T; - -/** - * @brief PMU STOP mode entry - */ -typedef enum -{ - PMU_STOP_ENTRY_WFI = 0x01, - PMU_STOP_ENTRY_WFE = 0x02 -} PMU_STOP_ENTRY_T; - -/** - * @brief PMU Flag - */ -typedef enum -{ - PMU_FLAG_WUE, - PMU_FLAG_SB, - PMU_FLAG_PVDO -} PMU_FLAG_T; - -/**@} end of group PMU_Enumerations*/ - - -/** @addtogroup PMU_Fuctions Fuctions - @{ -*/ - -/** PMU Reset */ -void PMU_Reset(void); - -/** Configuration and Operation modes */ -void PMU_EnableBackupAccess(void); -void PMU_DisableBackupAccess(void); -void PMU_EnablePVD(void); -void PMU_DisablePVD(void); -void PMU_ConfigPVDLevel(PMU_PVD_LEVEL_T level); -void PMU_EnableWakeUpPin(void); -void PMU_DisableWakeUpPin(void); -void PMU_EnterSTOPMode(PMU_REGULATOR_T regulator, PMU_STOP_ENTRY_T entry); -void PMU_EnterSTANDBYMode(void); - -/** flags */ -uint8_t PMU_ReadStatusFlag(PMU_FLAG_T flag); -void PMU_ClearStatusFlag(PMU_FLAG_T flag); - -/**@} end of group PMU_Fuctions*/ -/**@} end of group PMU_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_PMU_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_qspi.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_qspi.h deleted file mode 100644 index 7035b6c..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_qspi.h +++ /dev/null @@ -1,351 +0,0 @@ -/*! - * @file apm32f10x_qspi.h - * - * @brief This file contains all the prototypes,enumeration and macros for the QSPI peripheral - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_QSPI_H -#define __APM32F10X_QSPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup QSPI_Driver QSPI Driver - @{ -*/ - -/** @addtogroup QSPI_Enumerations Enumerations - @{ -*/ - -/** - * @brief Frame format - */ -typedef enum -{ - QSPI_FRF_STANDARD, //!< Standard mode - QSPI_FRF_DUAL, //!< Dual SPI - QSPI_FRF_QUAD //!< QUAD SPI -}QSPI_FRF_T; - -/** - * @brief Transmission mode - */ -typedef enum -{ - QSPI_TRANS_MODE_TX_RX, //!< TX and RX mode - QSPI_TRANS_MODE_TX, //!< TX mode only - QSPI_TRANS_MODE_RX, //!< RX mode only - QSPI_TRANS_MODE_EEPROM_READ //!< EEPROM read mode -}QSPI_TRANS_MODE_T; - -/** - * @brief Clock polarity - */ -typedef enum -{ - QSPI_CLKPOL_LOW, - QSPI_CLKPOL_HIGH -}QSPI_CLKPOL_T; - -/** - * @brief Clock phase - */ -typedef enum -{ - QSPI_CLKPHA_1EDGE, - QSPI_CLKPHA_2EDGE -}QSPI_CLKPHA_T; - -/** - * @brief Data format size - */ -typedef enum -{ - QSPI_DFS_4BIT = 3, - QSPI_DFS_5BIT, - QSPI_DFS_6BIT, - QSPI_DFS_7BIT, - QSPI_DFS_8BIT, - QSPI_DFS_9BIT, - QSPI_DFS_10BIT, - QSPI_DFS_11BIT, - QSPI_DFS_12BIT, - QSPI_DFS_13BIT, - QSPI_DFS_14BIT, - QSPI_DFS_15BIT, - QSPI_DFS_16BIT, - QSPI_DFS_17BIT, - QSPI_DFS_18BIT, - QSPI_DFS_19BIT, - QSPI_DFS_20BIT, - QSPI_DFS_21BIT, - QSPI_DFS_22BIT, - QSPI_DFS_23BIT, - QSPI_DFS_24BIT, - QSPI_DFS_25BIT, - QSPI_DFS_26BIT, - QSPI_DFS_27BIT, - QSPI_DFS_28BIT, - QSPI_DFS_29BIT, - QSPI_DFS_30BIT, - QSPI_DFS_31BIT, - QSPI_DFS_32BIT -}QSPI_DFS_T; - -/** - * @brief QSPI flag - */ -typedef enum -{ - QSPI_FLAG_BUSY = BIT0, //!< Busy flag - QSPI_FLAG_TFNF = BIT1, //!< TX FIFO not full flag - QSPI_FLAG_TFE = BIT2, //!< TX FIFO empty flag - QSPI_FLAG_RFNE = BIT3, //!< RX FIFO not empty flag - QSPI_FLAG_RFF = BIT4, //!< RX FIFO full flag - QSPI_FLAG_DCE = BIT6 //!< Data collision error -}QSPI_FLAG_T; - -/** - * @brief QSPI interrupt source - */ -typedef enum -{ - QSPI_INT_TFE = BIT0, //!< TX FIFO empty interrupt - QSPI_INT_TFO = BIT1, //!< TX FIFO overflow interrupt - QSPI_INT_RFU = BIT2, //!< RX FIFO underflow interrupt - QSPI_INT_RFO = BIT3, //!< RX FIFO overflow interrupt - QSPI_INT_RFF = BIT4, //!< RX FIFO full interrupt - QSPI_INT_MST = BIT5 //!< Master interrupt -}QSPI_INT_T; - -/** - * @brief QSPI interrupt flag - */ -typedef enum -{ - QSPI_INT_FLAG_TFE = BIT0, //!< TX FIFO empty interrupt flag - QSPI_INT_FLAG_TFO = BIT1, //!< TX FIFO overflow interrupt flag - QSPI_INT_FLAG_RFU = BIT2, //!< RX FIFO underflow interrupt flag - QSPI_INT_FLAG_RFO = BIT3, //!< RX FIFO overflow interrupt flag - QSPI_INT_FLAG_RFF = BIT4, //!< RX FIFO full interrupt flag - QSPI_INT_FLAG_MST = BIT5 //!< Master interrupt flag -}QSPI_INT_FLAG_T; - -/** - * @brief Reception sample edge - */ -typedef enum -{ - QSPI_RSE_RISING, - QSPI_RSE_FALLING -}QSPI_RSE_T; - -/** - * @brief Instruction length - */ -typedef enum -{ - QSPI_INST_LEN_0, - QSPI_INST_LEN_4BIT, - QSPI_INST_LEN_8BIT, - QSPI_INST_LEN_16BIT -}QSPI_INST_LEN_T; - -/** - * @brief QSPI address length - */ -typedef enum -{ - QSPI_ADDR_LEN_0, - QSPI_ADDR_LEN_4BIT, - QSPI_ADDR_LEN_8BIT, - QSPI_ADDR_LEN_12BIT, - QSPI_ADDR_LEN_16BIT, - QSPI_ADDR_LEN_20BIT, - QSPI_ADDR_LEN_24BIT, - QSPI_ADDR_LEN_28BIT, - QSPI_ADDR_LEN_32BIT, - QSPI_ADDR_LEN_36BIT, - QSPI_ADDR_LEN_40BIT, - QSPI_ADDR_LEN_44BIT, - QSPI_ADDR_LEN_48BIT, - QSPI_ADDR_LEN_52BIT, - QSPI_ADDR_LEN_56BIT, - QSPI_ADDR_LEN_60BIT -}QSPI_ADDR_LEN_T; - -/** - * @brief Instruction and address transmission mode - */ -typedef enum -{ - QSPI_INST_ADDR_TYPE_STANDARD, - QSPI_INST_TYPE_STANDARD, - QSPI_INST_ADDR_TYPE_FRF -}QSPI_INST_ADDR_TYPE_T; - -/** - * @brief Slave Select Toggle - */ -typedef enum -{ - QSPI_SST_DISABLE, - QSPI_SST_ENABLE -}QSPI_SST_T; - -/**@} end of group QSPI_Enumerations*/ - -/** @addtogroup QSPI_Macros Macros - @{ -*/ - -/** CTRL1 register reset value */ -#define QSPI_CTRL1_RESET_VALUE ((uint32_t)0x4007) -/** CTRL2 register reset value */ -#define QSPI_CTRL2_RESET_VALUE ((uint32_t)0x00) -/** SSIEN register reset value */ -#define QSPI_SSIEN_RESET_VALUE ((uint32_t)0x00) -/** SLAEN register reset value */ -#define QSPI_SLAEN_RESET_VALUE ((uint32_t)0x00) -/** BR register reset value */ -#define QSPI_BR_RESET_VALUE ((uint32_t)0x00) -/** TFTL register reset value */ -#define QSPI_TFTL_RESET_VALUE ((uint32_t)0x00) -/** RFTL register reset value */ -#define QSPI_RFTL_RESET_VALUE ((uint32_t)0x00) -/** TFL register reset value */ -#define QSPI_TFL_RESET_VALUE ((uint32_t)0x00) -/** RFL register reset value */ -#define QSPI_RFL_RESET_VALUE ((uint32_t)0x00) -/** STS register reset value */ -#define QSPI_STS_RESET_VALUE ((uint32_t)0x06) -/** INTEN register reset value */ -#define QSPI_INTEN_RESET_VALUE ((uint32_t)0x7F) -/** RSD register reset value */ -#define QSPI_RSD_RESET_VALUE ((uint32_t)0x00) -/** CTRL3 register reset value */ -#define QSPI_CTRL3_RESET_VALUE ((uint32_t)0x200) -/** IOSW register reset value */ -#define QSPI_IOSW_RESET_VALUE ((uint32_t)0x00) - -/**@} end of group QSPI_Macros*/ - - -/** @addtogroup QSPI_Structure Data Structure - @{ -*/ -typedef struct -{ - QSPI_SST_T selectSlaveToggle; //!< Slave Select Toggle - QSPI_FRF_T frameFormat; //!< Frame format - uint16_t clockDiv; //!< Clock divider - QSPI_CLKPOL_T clockPolarity; //!< Clock polarity - QSPI_CLKPHA_T clockPhase; //!< Clock phase - QSPI_DFS_T dataFrameSize; //!< Data frame size -}QSPI_Config_T; - -/**@} end of group QSPI_Structure*/ - - -/** @addtogroup QSPI_Fuctions Fuctions - @{ -*/ - -/** Reset */ -void QSPI_Reset(void); - -/** Configuration */ -void QSPI_Config(QSPI_Config_T *qspiConfig); -void QSPI_ConfigStructInit(QSPI_Config_T *qspiConfig); - -/** Data frame size, frame number, frame format */ -void QSPI_ConfigFrameNum(uint16_t num); -void QSPI_ConfigDataFrameSize(QSPI_DFS_T dfs); -void QSPI_ConfigFrameFormat(QSPI_FRF_T frameFormat); - -/** Disable or Enable */ -void QSPI_Enable(void); -void QSPI_Disable(void); - -/** TX and RX FIFO */ -uint8_t QSPI_ReadTxFifoDataNum(void); -uint8_t QSPI_ReadRxFifoDataNum(void); -void QSPI_ConfigRxFifoThreshold(uint8_t threshold); -void QSPI_ConfigTxFifoThreshold(uint8_t threshold); -void QSPI_ConfigTxFifoEmptyThreshold(uint8_t threshold); - -/** RX Sample */ -void QSPI_ConfigRxSampleEdge(QSPI_RSE_T rse); -void QSPI_ConfigRxSampleDelay(uint8_t delay); - -/** Clock stretch */ -void QSPI_EnableClockStretch(void); -void QSPI_DisableClockStretch(void); - -/** Instruction, address, Wait cycle */ -void QSPI_ConfigInstLen(QSPI_INST_LEN_T len); -void QSPI_ConfigAddrLen(QSPI_ADDR_LEN_T len); -void QSPI_ConfigInstAddrType(QSPI_INST_ADDR_TYPE_T type); -void QSPI_ConfigWaitCycle(uint8_t cycle); - -/** IO */ -void QSPI_OpenIO(void); -void QSPI_CloseIO(void); - -/** Transmission mode */ -void QSPI_ConfigTansMode(QSPI_TRANS_MODE_T mode); - -/** Rx and Tx data */ -uint32_t QSPI_RxData(void); -void QSPI_TxData(uint32_t data); - -/** Slave */ -void QSPI_EnableSlave(void); -void QSPI_DisableSlave(void); - -/** Interrupt */ -void QSPI_EnableInterrupt(uint32_t interrupt); -void QSPI_DisableInterrupt(uint32_t interrupt); - -/** Flag */ -uint8_t QSPI_ReadStatusFlag(QSPI_FLAG_T flag); -void QSPI_ClearStatusFlag(void); -uint8_t QSPI_ReadIntFlag(QSPI_INT_FLAG_T flag); -void QSPI_ClearIntFlag(uint32_t flag); - -/**@} end of group QSPI_Fuctions*/ -/**@} end of group QSPI_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_QSPI_H_ */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_rcm.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_rcm.h deleted file mode 100644 index 2e58e7c..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_rcm.h +++ /dev/null @@ -1,379 +0,0 @@ -/*! - * @file apm32f10x_rcm.h - * - * @brief This file contains all the functions prototypes for the RCM firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_RCM_H -#define __APM32F10X_RCM_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup RCM_Driver RCM Driver - @{ -*/ - -/** @addtogroup RCM_Enumerations Enumerations - @{ -*/ - -/** - * @brief HSE state - */ -typedef enum -{ - RCM_HSE_CLOSE, - RCM_HSE_OPEN, - RCM_HSE_BYPASS -} RCM_HSE_T; - -/** - * @brief PLL multiplication factor - */ -typedef enum -{ - RCM_PLLMF_2, - RCM_PLLMF_3, - RCM_PLLMF_4, - RCM_PLLMF_5, - RCM_PLLMF_6, - RCM_PLLMF_7, - RCM_PLLMF_8, - RCM_PLLMF_9, - RCM_PLLMF_10, - RCM_PLLMF_11, - RCM_PLLMF_12, - RCM_PLLMF_13, - RCM_PLLMF_14, - RCM_PLLMF_15, - RCM_PLLMF_16 -} RCM_PLLMF_T; - -/** - * @brief System clock select - */ -typedef enum -{ - RCM_SYSCLK_SEL_HSI, - RCM_SYSCLK_SEL_HSE, - RCM_SYSCLK_SEL_PLL -} RCM_SYSCLK_SEL_T; - -/** - * @brief AHB divider Number - */ -typedef enum -{ - RCM_AHB_DIV_1 = 7, - RCM_AHB_DIV_2, - RCM_AHB_DIV_4, - RCM_AHB_DIV_8, - RCM_AHB_DIV_16, - RCM_AHB_DIV_64, - RCM_AHB_DIV_128, - RCM_AHB_DIV_256, - RCM_AHB_DIV_512 -} RCM_AHB_DIV_T; - -/** - * @brief APB divider Number - */ -typedef enum -{ - RCM_APB_DIV_1 = 3, - RCM_APB_DIV_2, - RCM_APB_DIV_4, - RCM_APB_DIV_8, - RCM_APB_DIV_16 -} RCM_APB_DIV_T; - -/** - * @brief USB divider Number - */ -typedef enum -{ - RCM_USB_DIV_1_5, - RCM_USB_DIV_1, - RCM_USB_DIV_2, - RCM_USB_DIV_2_5 //!< (Only for High-density devices for APM32F103xx) -} RCM_USB_DIV_T; - -/** - * @brief FPU divider Number - */ -typedef enum -{ - RCM_FPU_DIV_1, - RCM_FPU_DIV_2 -} RCM_FPU_DIV_T; - -/** - * @brief ADC divider Number - */ -typedef enum -{ - RCM_PCLK2_DIV_2, - RCM_PCLK2_DIV_4, - RCM_PCLK2_DIV_6, - RCM_PCLK2_DIV_8 -} RCM_PCLK2_DIV_T; - -/** - * @brief LSE State - */ -typedef enum -{ - RCM_LSE_CLOSE, - RCM_LSE_OPEN, - RCM_LSE_BYPASS -} RCM_LSE_T; - -/** - * @brief RTC clock select - */ -typedef enum -{ - RCM_RTCCLK_LSE = 1, - RCM_RTCCLK_LSI, - RCM_RTCCLK_HSE_DIV_128 -} RCM_RTCCLK_T; - -/** - * @brief Clock output control - */ -typedef enum -{ - RCM_MCOCLK_NO_CLOCK = 3, - RCM_MCOCLK_SYSCLK, - RCM_MCOCLK_HSI, - RCM_MCOCLK_HSE, - RCM_MCOCLK_PLLCLK_DIV_2 -} RCM_MCOCLK_T; - -/** - * @brief PLL entry clock select - */ -typedef enum -{ - RCM_PLLSEL_HSI_DIV_2 = 0, - RCM_PLLSEL_HSE = 1, - RCM_PLLSEL_HSE_DIV2 = 3, -} RCM_PLLSEL_T; - -/** - * @brief RCM Interrupt Source - */ -typedef enum -{ - RCM_INT_LSIRDY = BIT0, //!< LSI ready interrupt - RCM_INT_LSERDY = BIT1, //!< LSE ready interrupt - RCM_INT_HSIRDY = BIT2, //!< HSI ready interrupt - RCM_INT_HSERDY = BIT3, //!< HSE ready interrupt - RCM_INT_PLLRDY = BIT4, //!< PLL ready interrupt - RCM_INT_CSS = BIT7 //!< Clock security system interrupt -} RCM_INT_T; - -/** - * @brief AHB peripheral - */ -typedef enum -{ - RCM_AHB_PERIPH_DMA1 = BIT0, - RCM_AHB_PERIPH_DMA2 = BIT1, - RCM_AHB_PERIPH_SRAM = BIT2, - RCM_AHB_PERIPH_FPU = BIT3, - RCM_AHB_PERIPH_FMC = BIT4, - RCM_AHB_PERIPH_QSPI = BIT5, - RCM_AHB_PERIPH_CRC = BIT6, - RCM_AHB_PERIPH_EMMC = BIT8, - RCM_AHB_PERIPH_SDIO = BIT10 -} RCM_AHB_PERIPH_T; - -/** - * @brief AHB2 peripheral - */ -typedef enum -{ - RCM_APB2_PERIPH_AFIO = BIT0, - RCM_APB2_PERIPH_GPIOA = BIT2, - RCM_APB2_PERIPH_GPIOB = BIT3, - RCM_APB2_PERIPH_GPIOC = BIT4, - RCM_APB2_PERIPH_GPIOD = BIT5, - RCM_APB2_PERIPH_GPIOE = BIT6, - RCM_APB2_PERIPH_GPIOF = BIT7, - RCM_APB2_PERIPH_GPIOG = BIT8, - RCM_APB2_PERIPH_ADC1 = BIT9, - RCM_APB2_PERIPH_ADC2 = BIT10, - RCM_APB2_PERIPH_TMR1 = BIT11, - RCM_APB2_PERIPH_SPI1 = BIT12, - RCM_APB2_PERIPH_TMR8 = BIT13, - RCM_APB2_PERIPH_USART1 = BIT14, - RCM_APB2_PERIPH_ADC3 = BIT15 -} RCM_APB2_PERIPH_T; - -/** - * @brief AHB1 peripheral - */ -typedef enum -{ - RCM_APB1_PERIPH_TMR2 = BIT0, - RCM_APB1_PERIPH_TMR3 = BIT1, - RCM_APB1_PERIPH_TMR4 = BIT2, - RCM_APB1_PERIPH_TMR5 = BIT3, - RCM_APB1_PERIPH_TMR6 = BIT4, - RCM_APB1_PERIPH_TMR7 = BIT5, - RCM_APB1_PERIPH_WWDT = BIT11, - RCM_APB1_PERIPH_SPI2 = BIT14, - RCM_APB1_PERIPH_SPI3 = BIT15, - RCM_APB1_PERIPH_USART2 = BIT17, - RCM_APB1_PERIPH_USART3 = BIT18, - RCM_APB1_PERIPH_UART4 = BIT19, - RCM_APB1_PERIPH_UART5 = BIT20, - RCM_APB1_PERIPH_I2C1 = BIT21, - RCM_APB1_PERIPH_I2C2 = BIT22, - RCM_APB1_PERIPH_USB = BIT23, - RCM_APB1_PERIPH_CAN1 = BIT25, - RCM_APB1_PERIPH_CAN2 = BIT26, - RCM_APB1_PERIPH_BAKR = BIT27, - RCM_APB1_PERIPH_PMU = BIT28, - RCM_APB1_PERIPH_DAC = BIT29 -} RCM_APB1_PERIPH_T; - -/** - * @brief RCM FLAG define - */ -typedef enum -{ - RCM_FLAG_HSIRDY = 0x001, //!< HSI Ready Flag - RCM_FLAG_HSERDY = 0x011, //!< HSE Ready Flag - RCM_FLAG_PLLRDY = 0x019, //!< PLL Ready Flag - RCM_FLAG_LSERDY = 0x101, //!< LSE Ready Flag - RCM_FLAG_LSIRDY = 0x201, //!< LSI Ready Flag - RCM_FLAG_PINRST = 0x21A, //!< PIN reset flag - RCM_FLAG_PORRST = 0x21B, //!< POR/PDR reset flag - RCM_FLAG_SWRST = 0x21C, //!< Software reset flag - RCM_FLAG_IWDTRST = 0x21D, //!< Independent watchdog reset flag - RCM_FLAG_WWDTRST = 0x21E, //!< Window watchdog reset flag - RCM_FLAG_LPRRST = 0x21F //!< Low-power reset flag -} RCM_FLAG_T; - -/**@} end of group RCM_Enumerations*/ - - -/** @addtogroup RCM_Fuctions Fuctions - @{ -*/ - -/** Function description */ - -/** RCM Reset */ -void RCM_Reset(void); - -/** HSE clock */ -void RCM_ConfigHSE(RCM_HSE_T state); -uint8_t RCM_WaitHSEReady(void); - -/** HSI clock */ -void RCM_ConfigHSITrim(uint8_t HSITrim); -void RCM_EnableHSI(void); -void RCM_DisableHSI(void); - -/** LSE and LSI clock */ -void RCM_ConfigLSE(RCM_LSE_T state); -void RCM_EnableLSI(void); -void RCM_DisableLSI(void); - -/** PLL clock */ -void RCM_ConfigPLL(RCM_PLLSEL_T pllSelect, RCM_PLLMF_T pllMf); -void RCM_EnablePLL(void); -void RCM_DisablePLL(void); - -/** Clock Security System */ -void RCM_EnableCSS(void); -void RCM_DisableCSS(void); - -void RCM_ConfigMCO(RCM_MCOCLK_T mcoClock); -void RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_T sysClkSelect); -RCM_SYSCLK_SEL_T RCM_ReadSYSCLKSource(void); - -/** Config clock prescaler of AHB, APB1, APB2, USB and ADC */ -void RCM_ConfigAHB(RCM_AHB_DIV_T AHBDiv); -void RCM_ConfigAPB1(RCM_APB_DIV_T APB1Div); -void RCM_ConfigAPB2(RCM_APB_DIV_T APB2Div); -void RCM_ConfigUSBCLK(RCM_USB_DIV_T USBDiv); -void RCM_ConfigFPUCLK(RCM_FPU_DIV_T FPUDiv); -void RCM_ConfigADCCLK(RCM_PCLK2_DIV_T ADCDiv); - -/** RTC clock */ -void RCM_ConfigRTCCLK(RCM_RTCCLK_T rtcClkSelect); -void RCM_EnableRTCCLK(void); -void RCM_DisableRTCCLK(void); - -/** Reads the clock frequency */ -uint32_t RCM_ReadSYSCLKFreq(void); -uint32_t RCM_ReadHCLKFreq(void); -void RCM_ReadPCLKFreq(uint32_t* PCLK1, uint32_t* PCLK2); -uint32_t RCM_ReadADCCLKFreq(void); - -/** Enable or disable Periph Clock */ -void RCM_EnableAHBPeriphClock(uint32_t AHBPeriph); -void RCM_DisableAHBPeriphClock(uint32_t AHBPeriph); -void RCM_EnableAPB2PeriphClock(uint32_t APB2Periph); -void RCM_DisableAPB2PeriphClock(uint32_t APB2Periph); -void RCM_EnableAPB1PeriphClock(uint32_t APB1Periph); -void RCM_DisableAPB1PeriphClock(uint32_t APB1Periph); - -/** Enable or disable Periph Reset */ -void RCM_EnableAPB2PeriphReset(uint32_t APB2Periph); -void RCM_DisableAPB2PeriphReset(uint32_t APB2Periph); -void RCM_EnableAPB1PeriphReset(uint32_t APB1Periph); -void RCM_DisableAPB1PeriphReset(uint32_t APB1Periph); - -/** Backup domain reset */ -void RCM_EnableBackupReset(void); -void RCM_DisableBackupReset(void); - -/** Interrupts and flags */ -void RCM_EnableInterrupt(uint32_t interrupt); -void RCM_DisableInterrupt(uint32_t interrupt); -uint8_t RCM_ReadStatusFlag(RCM_FLAG_T flag); -void RCM_ClearStatusFlag(void); -uint8_t RCM_ReadIntFlag(RCM_INT_T flag); -void RCM_ClearIntFlag(uint32_t flag); - -/**@} end of group RCM_Fuctions*/ -/**@} end of group RCM_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_RCM_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_rtc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_rtc.h deleted file mode 100644 index ae1d990..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_rtc.h +++ /dev/null @@ -1,99 +0,0 @@ -/*! - * @file apm32f10x_rtc.h - * - * @brief This file contains all the functions prototypes for the RTC firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_RTC_H -#define __APM32F10X_RTC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup RTC_Driver RTC Driver - @{ -*/ - -/** @addtogroup RTC_Enumerations Enumerations - @{ -*/ - -typedef enum -{ - RTC_FLAG_OC = 0x0020, //!< RTC Operation Complete flag - RTC_FLAG_RSYNC = 0x0008, //!< Registers Synchronized flag - RTC_FLAG_OVR = 0x0004, //!< Overflow flag - RTC_FLAG_ALR = 0x0002, //!< Alarm flag - RTC_FLAG_SEC = 0x0001 //!< Second flag -} RTC_FLAG_T; - -typedef enum -{ - RTC_INT_OVR = 0x0004, //!< Overflow interrupt - RTC_INT_ALR = 0x0002, //!< Alarm interrupt - RTC_INT_SEC = 0x0001 //!< Second interrupt -} RTC_INT_T; - -/**@} end of group RTC_Enumerations*/ - - -/** @addtogroup RTC_Fuctions Fuctions - @{ -*/ - -/** Operation modes */ -void RTC_EnableConfigMode(void); -void RTC_DisableConfigMode(void); - -/** Configuration */ -uint32_t RTC_ReadCounter(void); -void RTC_ConfigCounter(uint32_t value); -void RTC_ConfigPrescaler(uint32_t value); -void RTC_ConfigAlarm(uint32_t value); -uint32_t RTC_ReadDivider(void); -void RTC_WaitForLastTask(void); -void RTC_WaitForSynchor(void); - -/** Interrupts and flags */ -void RTC_EnableInterrupt(uint16_t interrupt); -void RTC_DisableInterrupt(uint16_t interrupt); -uint8_t RTC_ReadStatusFlag(RTC_FLAG_T flag); -void RTC_ClearStatusFlag(uint16_t flag); -uint8_t RTC_ReadIntFlag(RTC_INT_T flag); -void RTC_ClearIntFlag(uint16_t flag); - -/**@} end of group RTC_Fuctions*/ -/**@} end of group RTC_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_RTC_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_sci2c.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_sci2c.h deleted file mode 100644 index 11f4b07..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_sci2c.h +++ /dev/null @@ -1,325 +0,0 @@ -/*! - * @file apm32f10x_sci2c.h - * - * @brief This file contains all the prototypes,enumeration and macros for the SCI2C(I2C3, I2C4) peripheral - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_SCI2C_H -#define __APM32F10X_SCI2C_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup SCI2C_Driver SCI2C Driver - @{ -*/ - -/** @addtogroup SCI2C_Enumerations Enumerations - @{ -*/ - -/** - * @brief SCI2C speed enumeration - */ -typedef enum -{ - SCI2C_SPEED_STANDARD = 1, - SCI2C_SPEED_FAST, - SCI2C_SPEED_HIGH -}SCI2C_SPEED_T; - -/** - * @brief Address mode - */ -typedef enum -{ - SCI2C_ADDR_MODE_7BIT, - SCI2C_ADDR_MODE_10BIT -}SCI2C_ADDR_MODE_T; - -/** - * @brief SCI2C mode enumeration - */ -typedef enum -{ - SCI2C_MODE_MASTER, - SCI2C_MODE_SLAVE -}SCI2C_MODE_T; - -/** - * @brief Restart enable or disable - */ -typedef enum -{ - SCI2C_RESTART_DISABLE, - SCI2C_RESTART_ENABLE -}SCI2C_RESTART_T; - -/** - * @brief Enable or disable generate stop condition - */ -typedef enum -{ - SCI2C_STOP_DISABLE, - SCI2C_STOP_ENABLE -}SCI2C_STOP_T; -/** - * @brief Data direction - */ -typedef enum -{ - SCI2C_DATA_DIR_WRITE, - SCI2C_DATA_DIR_READ, -}SCI2C_DATA_DIR_T; - -/** - * @brief SCI2C interrupt - */ -typedef enum -{ - SCI2C_INT_RFU = BIT0, //!< Rx FIFO underflow interrupt - SCI2C_INT_RFO = BIT1, //!< Rx FIFO onverflow interrupt - SCI2C_INT_RFF = BIT2, //!< Rx FIFO full interrupt - SCI2C_INT_TFO = BIT3, //!< Tx FIFO onverflow interrupt - SCI2C_INT_TFE = BIT4, //!< Tx FIFO empty interrupt - SCI2C_INT_RR = BIT5, //!< Read request interrupt - SCI2C_INT_TA = BIT6, //!< Tx abort interrupt - SCI2C_INT_RD = BIT7, //!< Read done interrupt - SCI2C_INT_ACT = BIT8, //!< Activity interrupt - SCI2C_INT_STPD = BIT9, //!< Stop detect interrupt - SCI2C_INT_STAD = BIT10, //!< Start detect interrupt - SCI2C_INT_GC = BIT11, //!< Gernal call interrupt - SCI2C_INT_RSTAD = BIT12, //!< Restart detect interrupt - SCI2C_INT_MOH = BIT13, //!< Master on hold interrupt - SCI2C_INT_ALL = BIT15 //!< All interrupt -}SCI2C_INT_T; - -/** - * @brief Flag enumeration - */ -typedef enum -{ - SCI2C_FLAG_ACT = BIT0, //!< Activity flag - SCI2C_FLAG_TFNF = BIT1, //!< Tx FIFO not full flag - SCI2C_FLAG_TFE = BIT2, //!< Tx FIFO empty flag - SCI2C_FLAG_RFNE = BIT3, //!< Rx FIFO not empty flag - SCI2C_FLAG_RFF = BIT4, //!< Rx FIFO full flag - SCI2C_FLAG_MA = BIT5, //!< Master activity flag - SCI2C_FLAG_SA = BIT6, //!< Slave activity flag - SCI2C_FLAG_I2CEN = BIT8 | BIT0, //!< I2C enable flag - SCI2C_FLAG_SDWB = BIT8 | BIT1, //!< Slave disable while busy flag - SCI2C_FLAG_SRDL = BIT8 | BIT2 //!< Slave receive data lost flag -}SCI2C_FLAG_T; - -/** - * @brief Tx abort source - */ -typedef enum -{ - SCI2C_TAS_AD7NA = BIT0, //!< 7 bit address mode NACK - SCI2C_TAS_AD10FBNA = BIT1, //!< 10 bit address mode first byte NACK - SCI2C_TAS_AD10SBNA = BIT2, //!< 10 bit address mode second byte NACK - SCI2C_TAS_TDNA = BIT3, //!< Tx data NACK - SCI2C_TAS_GCNA = BIT4, //!< Gernal call NACK - SCI2C_TAS_GCR = BIT5, //!< Gernal call read - SCI2C_TAS_HSAD = BIT6, //!< High speed ack detected - SCI2C_TAS_SNR = BIT7, //!< Start byte no restart - SCI2C_TAS_RNR10B = BIT8, //!< Read 10bit address mode when restart disable - SCI2C_TAS_MSTDIS = BIT9, //!< Master disable - SCI2C_TAS_ARBLOST = BIT10, //!< Arbitration lost - SCI2C_TAS_LFTF = BIT11, //!< Slave flush tx FIFO - SCI2C_TAS_SAL = BIT12, //!< Slave arbitration lost - SCI2C_TAS_SRI = BIT13, //!< Slave read done - SCI2C_TAS_USRARB = BIT14, //!< User abort - SCI2C_TAS_FLUCNT = BIT15 //!< Tx flush counter -}SCI2C_TAS_T; - -/** - * @brief DMA Enable - */ -typedef enum -{ - SCI2C_DMA_RX = BIT0, - SCI2C_DMA_TX = BIT1, -}SCI2C_DMA_T; - -/**@} end of group SCI2C_Enumerations*/ - - -/** @addtogroup SCI2C_Macros Macros - @{ -*/ - -/** Macros description */ - -#define SCI2C_CTRL1_RESET_VALUE ((uint32_t)0x3E) -#define SCI2C_TARADDR_RESET_VALUE ((uint32_t)0x1055) -#define SCI2C_SLAADDR_RESET_VALUE ((uint32_t)0x55) -#define SCI2C_HSMC_RESET_VALUE ((uint32_t)0x07) -#define SCI2C_DATA_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_SSCHC_RESET_VALUE ((uint32_t)0x190) -#define SCI2C_SSCLC_RESET_VALUE ((uint32_t)0x1D6) -#define SCI2C_FSCHC_RESET_VALUE ((uint32_t)0x3C) -#define SCI2C_FSCLC_RESET_VALUE ((uint32_t)0x82) -#define SCI2C_HSCHC_RESET_VALUE ((uint32_t)0x06) -#define SCI2C_HSCLC_RESET_VALUE ((uint32_t)0x10) -#define SCI2C_INTEN_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_RFT_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_TFT_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_CTRL2_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_TFL_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_RFL_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_SDAHOLD_RESET_VALUE ((uint32_t)0x01) -#define SCI2C_SDNO_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_DMACTRL_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_DTDL_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_DRDL_RESET_VALUE ((uint32_t)0x00) -#define SCI2C_SDADLY_RESET_VALUE ((uint32_t)0x64) -#define SCI2C_GCA_RESET_VALUE ((uint32_t)0x01) -#define SCI2C_LSSSL_RESET_VALUE ((uint32_t)0x05) -#define SCI2C_HSSSL_RESET_VALUE ((uint32_t)0x01) - -#define SCI2C_FIFO_DEPTH (0X08) -/**@} end of group SCI2C_Macros*/ - - -/** @addtogroup SCI2C_Structure Data Structure - @{ -*/ - -/** - * @brief Struct description - */ -typedef struct -{ - uint16_t slaveAddr; //!< Slave address. - SCI2C_MODE_T mode; //!< Specifies mode, master mode or slave mode - SCI2C_SPEED_T speed; //!< Specifies speed. Standard speed, fast speed or high speed. - uint16_t clkLowPeriod; //!< SCL high period - uint16_t clkHighPeriod; //!< SCL low period - uint8_t rxFifoThreshold; //!< Rx FIFO threshold - uint8_t txFifoThreshold; //!< Tx FIFO threshold - SCI2C_RESTART_T restart; //!< Enable or disable restart - SCI2C_ADDR_MODE_T addrMode; //!< Address mode. 7-bit or 10-bit mode. -}SCI2C_Config_T; - -/**@} end of group SCI2C_Structure*/ - - -/** @addtogroup SCI2C_Fuctions Fuctions - @{ -*/ - -/** Reset */ -void SCI2C_Reset(SCI2C_T *i2c); - -/** Configuration */ -void SCI2C_Config(SCI2C_T *i2c, SCI2C_Config_T *sci2cConfig); -void SCI2C_ConfigStructInit(SCI2C_Config_T *sci2cConfig); - -/** Stop detect */ -void SCI2C_EnableStopDetectAddressed(SCI2C_T *i2c); -void SCI2C_DisableStopDetectAddressed(SCI2C_T *i2c); -void SCI2C_EnableStopDetectMasterActivity(SCI2C_T *i2c); -void SCI2C_DisableStopDetectMasterActivity(SCI2C_T *i2c); - -/** Restart */ -void SCI2C_EnableRestart(SCI2C_T *i2c); -void SCI2C_DisableRestart(SCI2C_T *i2c); - -/** Speed */ -void SCI2C_ConfigSpeed(SCI2C_T *i2c, SCI2C_SPEED_T speed); - -/** Address */ -void SCI2C_ConfigMasterAddr(SCI2C_T *i2c, SCI2C_ADDR_MODE_T mode, uint16_t addr); -void SCI2C_ConfigSlaveAddr(SCI2C_T *i2c, SCI2C_ADDR_MODE_T mode, uint16_t addr); - -/** Master mode and slave mode */ -void SCI2C_EnableMasterMode(SCI2C_T *i2c); -void SCI2C_DisableMasterMode(SCI2C_T *i2c); -void SCI2C_EnableSlaveMode(SCI2C_T *i2c); -void SCI2C_DisableSlaveMode(SCI2C_T *i2c); -void SCI2C_ConfigMasterCode(SCI2C_T *i2c, uint8_t code); - -/** Data */ -void SCI2C_ConfigDataDir(SCI2C_T *i2c, SCI2C_DATA_DIR_T dir); -void SCI2C_TxData(SCI2C_T *i2c, uint8_t data); -uint8_t SCI2C_RxData(SCI2C_T *i2c); -void SCI2C_ConfigDataRegister(SCI2C_T *i2c, SCI2C_STOP_T stop, SCI2C_DATA_DIR_T dataDir, uint8_t data); - -/** Rx and Tx FIFO */ -uint8_t SCI2C_ReadRxFifoDataCnt(SCI2C_T *i2c); -uint8_t SCI2C_ReadTxFifoDataCnt(SCI2C_T *i2c); -void SCI2C_ConfigRxFifoThreshold(SCI2C_T *i2c, uint8_t threshold); -void SCI2C_ConfigTxFifoThreshold(SCI2C_T *i2c, uint8_t threshold); - -/** I2C Enable, disable, abort, block */ -void SCI2C_Enable(SCI2C_T *i2c); -void SCI2C_Disable(SCI2C_T *i2c); -void SCI2C_Abort(SCI2C_T *i2c); -void SCI2C_BlockTxCmd(SCI2C_T *i2c, uint8_t enable); - -/** SCL and SDA */ -void SCI2C_ConfigClkPeriod(SCI2C_T *i2c, SCI2C_SPEED_T speed, uint16_t highPeriod, uint16_t lowPeriod); -void SCI2C_ConfigSDAHoldTime(SCI2C_T *i2c, uint16_t txHold, uint8_t rxHold); -void SCI2C_ConfigSDADelayTime(SCI2C_T *i2c, uint8_t delay); - -/** ACK and NACK */ -void SCI2C_GernalCallAck(SCI2C_T *i2c, uint8_t enable); -void SCI2C_SlaveDataNackOnly(SCI2C_T *i2c, uint8_t enable); - -/** Abort */ -uint32_t SCI2C_ReadTxAbortSource(SCI2C_T *i2c); - -/** DMA */ -void SCI2C_EnableDMA(SCI2C_T *i2c, SCI2C_DMA_T dma); -void SCI2C_DisableDMA(SCI2C_T *i2c, SCI2C_DMA_T dma); -void SCI2C_ConfigDMATxDataLevel(SCI2C_T *i2c, uint8_t cnt); -void SCI2C_ConfigDMARxDataLevel(SCI2C_T *i2c, uint8_t cnt); - -/** Spike suppression limit */ -void SCI2C_ConfigSpikeSuppressionLimit(SCI2C_T *i2c, SCI2C_SPEED_T speed, uint8_t limit); - -/** Ingerrupt and flag */ -uint8_t SCI2C_ReadStatusFlag(SCI2C_T *i2c, SCI2C_FLAG_T flag); -void SCI2C_ClearIntFlag(SCI2C_T *i2c, SCI2C_INT_T flag); -uint8_t SCI2C_ReadIntFlag(SCI2C_T *i2c, SCI2C_INT_T flag); -uint8_t SCI2C_ReadRawIntFlag(SCI2C_T *i2c, SCI2C_INT_T flag); -void SCI2C_EnableInterrupt(SCI2C_T *i2c, uint16_t interrupt); -void SCI2C_DisableInterrupt(SCI2C_T *i2c, uint16_t interrupt); - -/**@} end of group SCI2C_Fuctions*/ -/**@} end of group SCI2C_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_SCI2C_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_sdio.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_sdio.h deleted file mode 100644 index 7f63a65..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_sdio.h +++ /dev/null @@ -1,432 +0,0 @@ -/*! - * @file apm32f10x_sdio.h - * - * @brief This file contains all the functions prototypes for the SDIO firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_SDIO_H -#define __APM32F10X_SDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup SDIO_Driver SDIO Driver - @{ -*/ - -/** @addtogroup SDIO_Enumerations Enumerations - @{ -*/ - -/** - * @brief SDIO clock edge - */ -typedef enum -{ - SDIO_CLOCK_EDGE_RISING = 0x00000000, - SDIO_CLOCK_EDGE_FALLING = 0x00002000 -}SDIO_CLOCK_EDGE_T; - -/** - * @brief SDIO clock bypass - */ -typedef enum -{ - SDIO_CLOCK_BYPASS_DISABLE = 0x00000000, - SDIO_CLOCK_BYPASS_ENABLE = 0x00000400 -}SDIO_CLOCK_BYPASS_T; - -/** - * @brief SDIO clock power save - */ -typedef enum -{ - SDIO_CLOCK_POWER_SAVE_DISABLE = 0x00000000, - SDIO_CLOCK_POWER_SAVE_ENABLE = 0x00000200 -}SDIO_CLOCK_POWER_SAVE_T; - -/** - * @brief SDIO bus wide - */ -typedef enum -{ - SDIO_BUS_WIDE_1B = 0x00000000, - SDIO_BUS_WIDE_4B = 0x00000800, - SDIO_BUS_WIDE_8B = 0x00001000 -}SDIO_BUS_WIDE_T; - -/** - * @brief SDIO hardware flow control - */ -typedef enum -{ - SDIO_HARDWARE_FLOW_CONTROL_DISABLE = 0x00000000, - SDIO_HARDWARE_FLOW_CONTROL_ENABLE = 0x00004000 -}SDIO_HARDWARE_FLOW_CONTROL_T; - -/** - * @brief SDIO power state - */ -typedef enum -{ - SDIO_POWER_STATE_OFF = 0x00000000, - SDIO_POWER_STATE_ON = 0x00000003 -}SDIO_POWER_STATE_T; - -/** - * @brief SDIO interrupt sources - */ -typedef enum -{ - SDIO_INT_COMRESP = 0x00000001, - SDIO_INT_DBDR = 0x00000002, - SDIO_INT_CMDRESTO = 0x00000004, - SDIO_INT_DATATO = 0x00000008, - SDIO_INT_TXUDRER = 0x00000010, - SDIO_INT_RXOVRER = 0x00000020, - SDIO_INT_CMDRES = 0x00000040, - SDIO_INT_CMDSENT = 0x00000080, - SDIO_INT_DATAEND = 0x00000100, - SDIO_INT_SBE = 0x00000200, - SDIO_INT_DBCP = 0x00000400, - SDIO_INT_CMDACT = 0x00000800, - SDIO_INT_TXACT = 0x00001000, - SDIO_INT_RXACT = 0x00002000, - SDIO_INT_TXFHF = 0x00004000, - SDIO_INT_RXFHF = 0x00008000, - SDIO_INT_TXFF = 0x00010000, - SDIO_INT_RXFF = 0x00020000, - SDIO_INT_TXFE = 0x00040000, - SDIO_INT_RXFE = 0x00080000, - SDIO_INT_TXDA = 0x00100000, - SDIO_INT_RXDA = 0x00200000, - SDIO_INT_SDIOINT = 0x00400000, - SDIO_INT_ATAEND = 0x00800000 -}SDIO_INT_T; - -/** - * @brief SDIO response - */ -typedef enum -{ - SDIO_RESPONSE_NO = 0x00000000, - SDIO_RESPONSE_SHORT = 0x00000040, - SDIO_RESPONSE_LONG = 0x000000C0 -}SDIO_RESPONSE_T; - -/** - * @brief SDIO wait interrupt state - */ -typedef enum -{ - SDIO_WAIT_NO = 0x00000000, - SDIO_WAIT_INT = 0x00000100, - SDIO_WAIT_PEND = 0x00000200 -}SDIO_WAIT_T; - -/** - * @brief SDIO CPSM state - */ -typedef enum -{ - SDIO_CPSM_DISABLE = 0x00000000, - SDIO_CPSM_ENABLE = 0x00000400 -}SDIO_CPSM_T; - -/** - * @brief SDIO response registers - */ -typedef enum -{ - SDIO_RES1 = 0x00000000, - SDIO_RES2 = 0x00000004, - SDIO_RES3 = 0x00000008, - SDIO_RES4 = 0x0000000C -}SDIO_RES_T; - -/** - * @brief SDIO data block size - */ -typedef enum -{ - SDIO_DATA_BLOCKSIZE_1B = 0x00000000, - SDIO_DATA_BLOCKSIZE_2B = 0x00000010, - SDIO_DATA_BLOCKSIZE_4B = 0x00000020, - SDIO_DATA_BLOCKSIZE_8B = 0x00000030, - SDIO_DATA_BLOCKSIZE_16B = 0x00000040, - SDIO_DATA_BLOCKSIZE_32B = 0x00000050, - SDIO_DATA_BLOCKSIZE_64B = 0x00000060, - SDIO_DATA_BLOCKSIZE_128B = 0x00000070, - SDIO_DATA_BLOCKSIZE_256B = 0x00000080, - SDIO_DATA_BLOCKSIZE_512B = 0x00000090, - SDIO_DATA_BLOCKSIZE_1024B = 0x000000A0, - SDIO_DATA_BLOCKSIZE_2048B = 0x000000B0, - SDIO_DATA_BLOCKSIZE_496B = 0x000000C0, - SDIO_DATA_BLOCKSIZE_8192B = 0x000000D0, - SDIO_DATA_BLOCKSIZE_16384B = 0x000000E0 -}SDIO_DATA_BLOCKSIZE_T; - -/** - * @brief SDIO transfer direction - */ -typedef enum -{ - SDIO_TRANSFER_DIR_TO_CARD = 0x00000000, - SDIO_TRANSFER_DIR_TO_SDIO = 0x00000002 -}SDIO_TRANSFER_DIR_T; - -/** - * @brief SDIO transfer type - */ -typedef enum -{ - SDIO_TRANSFER_MODE_BLOCK = 0x00000000, - SDIO_TRANSFER_MODE_STREAM = 0x00000004 -}SDIO_TRANSFER_MODE_T; - -/** - * @brief SDIO DPSM state - */ -typedef enum -{ - SDIO_DPSM_DISABLE = 0x00000000, - SDIO_DPSM_ENABLE = 0x00000001 -}SDIO_DPSM_T; - -/** - * @brief SDIO flag - */ -typedef enum -{ - SDIO_FLAG_COMRESP = 0x00000001, - SDIO_FLAG_DBDR = 0x00000002, - SDIO_FLAG_CMDRESTO = 0x00000004, - SDIO_FLAG_DATATO = 0x00000008, - SDIO_FLAG_TXUDRER = 0x00000010, - SDIO_FLAG_RXOVRER = 0x00000020, - SDIO_FLAG_CMDRES = 0x00000040, - SDIO_FLAG_CMDSENT = 0x00000080, - SDIO_FLAG_DATAEND = 0x00000100, - SDIO_FLAG_SBE = 0x00000200, - SDIO_FLAG_DBCP = 0x00000400, - SDIO_FLAG_CMDACT = 0x00000800, - SDIO_FLAG_TXACT = 0x00001000, - SDIO_FLAG_RXACT = 0x00002000, - SDIO_FLAG_TXFHF = 0x00004000, - SDIO_FLAG_RXFHF = 0x00008000, - SDIO_FLAG_TXFF = 0x00010000, - SDIO_FLAG_RXFF = 0x00020000, - SDIO_FLAG_TXFE = 0x00040000, - SDIO_FLAG_RXFE = 0x00080000, - SDIO_FLAG_TXDA = 0x00100000, - SDIO_FLAG_RXDA = 0x00200000, - SDIO_FLAG_SDIOINT = 0x00400000, - SDIO_FLAG_ATAEND = 0x00800000 -}SDIO_FLAG_T; - -/** - * @brief SDIO read wait mode - */ -typedef enum -{ - SDIO_READ_WAIT_MODE_CLK = 0x00000001, - SDIO_READ_WAIT_MODE_DATA2 = 0x00000000 -}SDIO_READ_WAIT_MODE_T; - -/**@} end of group SDIO_Enumerations*/ - - -/** @addtogroup SDIO_Macros Macros - @{ -*/ - -/** ------------ SDIO registers bit address in the alias region ----------- */ -#define SDIO_OFFSET (SDIO_BASE - PERIPH_BASE) - -/** --- CLKCTRL Register ---*/ - -/** Alias word address of CLKEN bit */ -#define CLKCTRL_OFFSET (SDIO_OFFSET + 0x04) -#define CLKEN_BitNumber 0x08 -#define CLKCTRL_CLKEN_BB (PERIPH_BB_BASE + (CLKCTRL_OFFSET * 32) + (CLKEN_BitNumber * 4)) - -/** --- CMD Register ---*/ - -/** Alias word address of SDIOSC bit */ -#define CMD_OFFSET (SDIO_OFFSET + 0x0C) -#define SDIOSC_BitNumber 0x0B -#define CMD_SDIOSC_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (SDIOSC_BitNumber * 4)) - -/** Alias word address of CMDCPEN bit */ -#define CMDCPEN_BitNumber 0x0C -#define CMD_CMDCPEN_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (CMDCPEN_BitNumber * 4)) - -/** Alias word address of INTEN bit */ -#define INTEN_BitNumber 0x0D -#define CMD_INTEN_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (INTEN_BitNumber * 4)) - -/** Alias word address of ATACMD bit */ -#define ATACMD_BitNumber 0x0E -#define CMD_ATACMD_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (ATACMD_BitNumber * 4)) - -/** --- DCTRL Register ---*/ - -/** Alias word address of DMAEN bit */ -#define DCTRL_OFFSET (SDIO_OFFSET + 0x2C) -#define DMAEN_BitNumber 0x03 -#define DCTRL_DMAEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (DMAEN_BitNumber * 4)) - -/** Alias word address of RWSTR bit */ -#define RWSTR_BitNumber 0x08 -#define DCTRL_RWSTR_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTR_BitNumber * 4)) - -/** Alias word address of RWSTOP bit */ -#define RWSTOP_BitNumber 0x09 -#define DCTRL_RWSTOP_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTOP_BitNumber * 4)) - -/** Alias word address of RDWAIT bit */ -#define RDWAIT_BitNumber 0x0A -#define DCTRL_RDWAIT_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RDWAIT_BitNumber * 4)) - -/** Alias word address of SDIOF bit */ -#define SDIOF_BitNumber 0x0B -#define DCTRL_SDIOF_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (SDIOF_BitNumber * 4)) - -/**@} end of group SDIO_Macros*/ - -/** @addtogroup SDIO_Structure Data Structure - @{ -*/ - -/** - * @brief SDIO Config structure definition - */ -typedef struct -{ - SDIO_CLOCK_EDGE_T clockEdge; - SDIO_CLOCK_BYPASS_T clockBypass; - SDIO_CLOCK_POWER_SAVE_T clockPowerSave; - SDIO_BUS_WIDE_T busWide; - SDIO_HARDWARE_FLOW_CONTROL_T hardwareFlowControl; - uint8_t clockDiv; -}SDIO_Config_T; - -/** - * @brief SDIO CMD Config structure definition - */ -typedef struct -{ - uint32_t argument; - uint32_t cmdIndex; - SDIO_RESPONSE_T response; - SDIO_WAIT_T wait; - SDIO_CPSM_T CPSM; -}SDIO_CmdConfig_T; - -/** - * @brief SDIO Data Config structure definition - */ -typedef struct -{ - uint32_t dataTimeOut; - uint32_t dataLength; - SDIO_DATA_BLOCKSIZE_T dataBlockSize; - SDIO_TRANSFER_DIR_T transferDir; - SDIO_TRANSFER_MODE_T transferMode; - SDIO_DPSM_T DPSM; -}SDIO_DataConfig_T; - -/**@} end of group SDIO_Structure*/ - - -/** @addtogroup SDIO_Fuctions Fuctions - @{ -*/ - -/** SDIO reset and configuration */ -void SDIO_Reset(void); -void SDIO_Config(SDIO_Config_T* sdioConfig); -void SDIO_ConfigStructInit(SDIO_Config_T* sdioConfig); -void SDIO_EnableClock(void); -void SDIO_DisableClock(void); -void SDIO_ConfigPowerState(SDIO_POWER_STATE_T powerState); -uint32_t SDIO_ReadPowerState(void); - -/** DMA */ -void SDIO_EnableDMA(void); -void SDIO_DisableDMA(void); - -/** Command */ -void SDIO_TxCommand(SDIO_CmdConfig_T *cmdConfig); -void SDIO_TxCommandStructInit(SDIO_CmdConfig_T* cmdconfig); -uint8_t SDIO_ReadCommandResponse(void); -uint32_t SDIO_ReadResponse(SDIO_RES_T res); - -/** SDIO data configuration */ -void SDIO_ConfigData(SDIO_DataConfig_T* dataConfig); -void SDIO_ConfigDataStructInit(SDIO_DataConfig_T* dataConfig); -uint32_t SDIO_ReadDataCounter(void); -void SDIO_WriteData(uint32_t data); -uint32_t SDIO_ReadData(void); -uint32_t SDIO_ReadFIFOCount(void); - -/** SDIO mode */ -void SDIO_EnableStartReadWait(void); -void SDIO_DisableStartReadWait(void); -void SDIO_EnableStopReadWait(void); -void SDIO_DisableStopReadWait(void); -void SDIO_ConfigSDIOReadWaitMode(SDIO_READ_WAIT_MODE_T readWaitMode); -void SDIO_EnableSDIO(void); -void SDIO_DisableSDIO(void); -void SDIO_EnableTxSDIOSuspend(void); -void SDIO_DisableTxSDIOSuspend(void); -void SDIO_EnableCommandCompletion(void); -void SDIO_DisableCommandCompletion(void); -void SDIO_EnableCEATAInterrupt(void); -void SDIO_DisableCEATAInterrupt(void); -void SDIO_EnableTxCEATA(void); -void SDIO_DisableTxCEATA(void); - -/** Interrupt and flags */ -void SDIO_EnableInterrupt(uint32_t interrupt); -void SDIO_DisableInterrupt(uint32_t interrupt); -uint8_t SDIO_ReadStatusFlag(SDIO_FLAG_T flag); -void SDIO_ClearStatusFlag(uint32_t flag); -uint8_t SDIO_ReadIntFlag(SDIO_INT_T flag); -void SDIO_ClearIntFlag(uint32_t flag); - -/**@} end of group SDIO_Fuctions*/ -/**@} end of group SDIO_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_SDIO_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_spi.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_spi.h deleted file mode 100644 index 6e6d8e3..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_spi.h +++ /dev/null @@ -1,333 +0,0 @@ -/*! - * @file apm32f10x_spi.h - * - * @brief This file contains all the functions prototypes for the SPI firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_SPI_H -#define __APM32F10X_SPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup SPI_Driver SPI Driver - @{ -*/ - -/** @addtogroup SPI_Enumerations Enumerations - @{ -*/ - -/** - * @brief SPI data direction mode - */ -typedef enum -{ - SPI_DIRECTION_2LINES_FULLDUPLEX = 0x0000, - SPI_DIRECTION_2LINES_RXONLY = 0x0400, - SPI_DIRECTION_1LINE_RX = 0x8000, - SPI_DIRECTION_1LINE_TX = 0xC000 -}SPI_DIRECTION_T; - -/** - * @brief SPI mode - */ -typedef enum -{ - SPI_MODE_MASTER = 0x0104, - SPI_MODE_SLAVE = 0x0000 -}SPI_MODE_T; - -/** - * @brief SPI Data length - */ -typedef enum -{ - SPI_DATA_LENGTH_16B = 0x0800, - SPI_DATA_LENGTH_8B = 0x0000 -}SPI_DATA_LENGTH_T; - -/** - * @brief SPI Clock Polarity - */ -typedef enum -{ - SPI_CLKPOL_LOW = 0x0000, - SPI_CLKPOL_HIGH = 0x0002 -}SPI_CLKPOL_T; - -/** - * @brief SPI Clock Phase - */ -typedef enum -{ - SPI_CLKPHA_1EDGE = 0x0000, - SPI_CLKPHA_2EDGE = 0x0001 -}SPI_CLKPHA_T; - -/** - * @brief SPI Slave Select management - */ -typedef enum -{ - SPI_NSS_SOFT = 0x0200, - SPI_NSS_HARD = 0x0000 -}SPI_NSS_T; - -/** - * @brief SPI BaudRate Prescaler - */ -typedef enum -{ - SPI_BAUDRATE_DIV_2 = 0x0000, - SPI_BAUDRATE_DIV_4 = 0x0008, - SPI_BAUDRATE_DIV_8 = 0x0010, - SPI_BAUDRATE_DIV_16 = 0x0018, - SPI_BAUDRATE_DIV_32 = 0x0020, - SPI_BAUDRATE_DIV_64 = 0x0028, - SPI_BAUDRATE_DIV_128 = 0x0030, - SPI_BAUDRATE_DIV_256 = 0x0038, -}SPI_BAUDRATE_DIV_T; - -/** - * @brief SPI MSB LSB transmission - */ -typedef enum -{ - SPI_FIRSTBIT_MSB = 0x0000, - SPI_FIRSTBIT_LSB = 0x0080 -}SPI_FIRSTBIT_T; - -/** - * @brief I2S Mode - */ -typedef enum -{ - I2S_MODE_SLAVE_TX = 0x0000, - I2S_MODE_SLAVE_RX = 0x0100, - I2S_MODE_MASTER_TX = 0x0200, - I2S_MODE_MASTER_RX = 0x0300 -}I2S_MODE_T; - -/** - * @brief I2S Standard - */ -typedef enum -{ - I2S_STANDARD_PHILLIPS = 0x0000, - I2S_STANDARD_MSB = 0x0010, - I2S_STANDARD_LSB = 0x0020, - I2S_STANDARD_PCMSHORT = 0x0030, - I2S_STANDARD_PCMLONG = 0x00B0 -}I2S_STANDARD_T; - -/** - * @brief I2S data length - */ -typedef enum -{ - I2S_DATA_LENGHT_16B = 0x0000, - I2S_DATA_LENGHT_16BEX = 0x0001, - I2S_DATA_LENGHT_24B = 0x0003, - I2S_DATA_LENGHT_32B = 0x0005, -} I2S_DATA_LENGTH_T; - -/** - * @brief I2S_MCLK_Output - */ -typedef enum -{ - I2S_MCLK_OUTPUT_DISABLE = 0x0000, - I2S_MCLK_OUTPUT_ENABLE = 0x0200, -}I2S_MCLK_OUTPUT_T; - -/** - * @brief I2S Audio divider - */ -typedef enum -{ - I2S_AUDIO_DIV_192K = 192000, - I2S_AUDIO_DIV_96K = 96000, - I2S_AUDIO_DIV_48K = 48000, - I2S_AUDIO_DIV_44K = 44100, - I2S_AUDIO_DIV_32K = 32000, - I2S_AUDIO_DIV_22K = 22050, - I2S_AUDIO_DIV_16K = 16000, - I2S_AUDIO_DIV_11K = 11025, - I2S_AUDIO_DIV_8K = 8000, - I2S_AUDIO_DIV_DEFAULT = 2 -}I2S_AUDIO_DIV_T; - -/** - * @brief I2S Clock Polarity - */ -typedef enum -{ - I2S_CLKPOL_LOW = 0x0000, - I2S_CLKPOL_HIGH = 0x0008 -}I2S_CLKPOL_T; - -/** - * @brief SPI Direction select - */ -typedef enum -{ - SPI_DIRECTION_RX = 0xBFFF, - SPI_DIRECTION_TX = 0x4000 -}SPI_DIRECTION_SELECT_T; - -/** - * @brief SPI interrupts definition - */ -typedef enum -{ - SPI_I2S_INT_TXBE = 0x8002, - SPI_I2S_INT_RXBNE = 0x4001, - SPI_I2S_INT_ERR = 0x2000, - SPI_I2S_INT_OVR = 0x2040, - SPI_INT_CRCE = 0x2010, - SPI_INT_ME = 0x2020, - I2S_INT_UDR = 0x2008 -}SPI_I2S_INT_T; - -/** - * @brief SPI flags definition - */ -typedef enum -{ - SPI_FLAG_RXBNE = 0x0001, - SPI_FLAG_TXBE = 0x0002, - I2S_FLAG_SCHDIR = 0x0004, - I2S_FLAG_UDR = 0x0008, - SPI_FLAG_CRCE = 0x0010, - SPI_FLAG_ME = 0x0020, - SPI_FLAG_OVR = 0x0040, - SPI_FLAG_BSY = 0x0080 -}SPI_FLAG_T; - -/** - * @brief SPI I2S DMA requests - */ -typedef enum -{ - SPI_I2S_DMA_REQ_TX = 0x0002, - SPI_I2S_DMA_REQ_RX = 0x0001 -}SPI_I2S_DMA_REQ_T; - -/**@} end of group SPI_Enumerations*/ - - -/** @addtogroup SPI_Structure Data Structure - @{ -*/ - -/** - * @brief SPI Config structure definition - */ -typedef struct -{ - SPI_MODE_T mode; - SPI_DATA_LENGTH_T length; - SPI_CLKPHA_T phase; - SPI_CLKPOL_T polarity; - SPI_NSS_T nss; - SPI_FIRSTBIT_T firstBit; - SPI_DIRECTION_T direction; - SPI_BAUDRATE_DIV_T baudrateDiv; - uint16_t crcPolynomial; -}SPI_Config_T; - -/** - * @brief I2S Config structure definition - */ -typedef struct -{ - I2S_MODE_T mode; - I2S_STANDARD_T standard; - I2S_DATA_LENGTH_T length; - I2S_MCLK_OUTPUT_T MCLKOutput; - I2S_AUDIO_DIV_T audioDiv; - I2S_CLKPOL_T polarity; -}I2S_Config_T; - -/**@} end of group SPI_Structure*/ - -/** @addtogroup SPI_Fuctions Fuctions - @{ -*/ - -/** Reset and Configuration */ -void SPI_I2S_Reset(SPI_T* spi); -void SPI_Config(SPI_T* spi, SPI_Config_T* spiConfig); -void I2S_Config(SPI_T* spi, I2S_Config_T* i2sConfig); -void SPI_ConfigStructInit(SPI_Config_T* spiConfig); -void I2S_ConfigStructInit(I2S_Config_T* i2sConfig); -void SPI_Enable(SPI_T* spi); -void SPI_Disable(SPI_T* spi); -void I2S_Enable(SPI_T* spi); -void I2S_Disable(SPI_T* spi); - -void SPI_I2S_TxData(SPI_T* spi, uint16_t data); -uint16_t SPI_I2S_RxData(SPI_T* spi); -void SPI_SetSoftwareNSS(SPI_T* spi); -void SPI_ResetSoftwareNSS(SPI_T* spi); -void SPI_EnableSSOutput(SPI_T* spi); -void SPI_DisableSSOutput(SPI_T* spi); -void SPI_ConfigDataSize(SPI_T* spi, SPI_DATA_LENGTH_T length); - -/** DMA */ -void SPI_I2S_EnableDMA(SPI_T* spi, SPI_I2S_DMA_REQ_T dmaReq); -void SPI_I2S_DisableDMA(SPI_T* spi, SPI_I2S_DMA_REQ_T dmaReq); - -/** CRC */ -void SPI_TxCRC(SPI_T* spi); -void SPI_EnableCRC(SPI_T* spi); -void SPI_DisableCRC(SPI_T* spi); -uint16_t SPI_ReadTxCRC(SPI_T* spi); -uint16_t SPI_ReadRxCRC(SPI_T* spi); -uint16_t SPI_ReadCRCPolynomial(SPI_T* spi); -void SPI_ConfigBiDirectionalLine(SPI_T* spi, SPI_DIRECTION_SELECT_T direction); - -/** Interrupts and flag */ -void SPI_I2S_EnableInterrupt(SPI_T* spi, SPI_I2S_INT_T interrupt); -void SPI_I2S_DisableInterrupt(SPI_T* spi, SPI_I2S_INT_T interrupt); -uint8_t SPI_I2S_ReadStatusFlag(SPI_T* spi, SPI_FLAG_T flag); -void SPI_I2S_ClearStatusFlag(SPI_T* spi, SPI_FLAG_T flag); -uint8_t SPI_I2S_ReadIntFlag(SPI_T* spi, SPI_I2S_INT_T flag); -void SPI_I2S_ClearIntFlag(SPI_T* spi, SPI_I2S_INT_T flag); - -/**@} end of group SPI_Fuctions*/ -/**@} end of group SPI_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_SPI_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_tmr.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_tmr.h deleted file mode 100644 index 6206915..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_tmr.h +++ /dev/null @@ -1,673 +0,0 @@ -/*! - * @file apm32f10x_tmr.h - * - * @brief This file contains all the functions prototypes for the TMR firmware library. - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ -#ifndef __APM32F10X_TMR_H -#define __APM32F10X_TMR_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup TMR_Driver TMR Driver - @{ -*/ - -/** @addtogroup TMR_Enumerations Enumerations - @{ -*/ - -/** - * @brief TMR Counter Mode - */ -typedef enum -{ - TMR_COUNTER_MODE_UP = 0x0000, - TMR_COUNTER_MODE_DOWN = 0x0010, - TMR_COUNTER_MODE_CENTERALIGNED1 = 0x0020, - TMR_COUNTER_MODE_CENTERALIGNED2 = 0x0040, - TMR_COUNTER_MODE_CENTERALIGNED3 = 0x0060 -} TMR_COUNTER_MODE_T; - -/** - * @brief TMR Clock division - */ -typedef enum -{ - TMR_CLOCK_DIV_1, - TMR_CLOCK_DIV_2, - TMR_CLOCK_DIV_4 -} TMR_CLOCK_DIV_T; - -/** - * @brief TMR Output Compare and PWM modes - */ -typedef enum -{ - TMR_OC_MODE_TMRING = 0x00, - TMR_OC_MODE_ACTIVE = 0x01, - TMR_OC_MODE_INACTIVE = 0x02, - TMR_OC_MODE_TOGGEL = 0x03, - TMR_OC_MODE_LOWLEVEL = 0x04, - TMR_OC_MODE_HIGHLEVEL = 0x05, - TMR_OC_MODE_PWM1 = 0x06, - TMR_OC_MODE_PWM2 = 0x07 -} TMR_OC_MODE_T; - -/** - * @brief TMR Output Compare state - */ -typedef enum -{ - TMR_OC_STATE_DISABLE, - TMR_OC_STATE_ENABLE -} TMR_OC_STATE_T; - -/** - * @brief TMR Output Compare N state - */ -typedef enum -{ - TMR_OC_NSTATE_DISABLE, - TMR_OC_NSTATE_ENABLE -} TMR_OC_NSTATE_T; - -/** - * @brief TMR Output Compare Polarity - */ -typedef enum -{ - TMR_OC_POLARITY_HIGH, - TMR_OC_POLARITY_LOW -} TMR_OC_POLARITY_T; - -/** - * @brief TMR Output Compare N Polarity - */ -typedef enum -{ - TMR_OC_NPOLARITY_HIGH, - TMR_OC_NPOLARITY_LOW -} TMR_OC_NPOLARITY_T; - -/** - * @brief TMR Output Compare Idle State - */ -typedef enum -{ - TMR_OC_IDLE_STATE_RESET, - TMR_OC_IDLE_STATE_SET -} TMR_OC_IDLE_STATE_T; - -/** - * @brief TMR Output Compare N Idle State - */ -typedef enum -{ - TMR_OC_NIDLE_STATE_RESET, - TMR_OC_NIDLE_STATE_SET -} TMR_OC_NIDLE_STATE_T; - -/** - * @brief TMR Input Capture Init structure definition - */ -typedef enum -{ - TMR_CHANNEL_1 = 0x0000, - TMR_CHANNEL_2 = 0x0004, - TMR_CHANNEL_3 = 0x0008, - TMR_CHANNEL_4 = 0x000C -} TMR_CHANNEL_T; - -/** - * @brief TMR Input Capture Polarity - */ -typedef enum -{ - TMR_IC_POLARITY_RISING = 0x00, - TMR_IC_POLARITY_FALLING = 0x02, - TMR_IC_POLARITY_BOTHEDGE = 0x0A -} TMR_IC_POLARITY_T; - -/** - * @brief TMR Input Capture Selection - */ -typedef enum -{ - TMR_IC_SELECTION_DIRECT_TI = 0x01, - TMR_IC_SELECTION_INDIRECT_TI = 0x02, - TMR_IC_SELECTION_TRC = 0x03 -} TMR_IC_SELECTION_T; - -/** - * @brief TMR Input Capture Prescaler - */ -typedef enum -{ - TMR_IC_PSC_1, - TMR_IC_PSC_2, - TMR_IC_PSC_4, - TMR_IC_PSC_8 -} TMR_IC_PSC_T; - -/** - * @brief TMR Specifies the Off-State selection used in Run mode - */ -typedef enum -{ - TMR_RMOS_STATE_DISABLE, - TMR_RMOS_STATE_ENABLE -} TMR_RMOS_STATE_T; - -/** - * @brief TMR Closed state configuration in idle mode - */ -typedef enum -{ - TMR_IMOS_STATE_DISABLE, - TMR_IMOS_STATE_ENABLE -} TMR_IMOS_STATE_T; - -/** - * @brief TMR Protect mode configuration values - */ -typedef enum -{ - TMR_LOCK_LEVEL_OFF, - TMR_LOCK_LEVEL_1, - TMR_LOCK_LEVEL_2, - TMR_LOCK_LEVEL_3 -} TMR_LOCK_LEVEL_T; - -/** - * @brief TMR BRK state - */ -typedef enum -{ - TMR_BRK_STATE_DISABLE, - TMR_BRK_STATE_ENABLE -} TMR_BRK_STATE_T; - -/** - * @brief TMR Specifies the Break Input pin polarity. - */ -typedef enum -{ - TMR_BRK_POLARITY_LOW, - TMR_BRK_POLARITY_HIGH -} TMR_BRK_POLARITY_T; - -/** - * @brief TMR Specifies the Break Input pin polarity. - */ -typedef enum -{ - TMR_AUTOMATIC_OUTPUT_DISABLE, - TMR_AUTOMATIC_OUTPUT_ENABLE -} TMR_AUTOMATIC_OUTPUT_T; - -/** - * @brief TMR_interrupt_sources - */ -typedef enum -{ - TMR_INT_UPDATE = 0x0001, - TMR_INT_CC1 = 0x0002, - TMR_INT_CC2 = 0x0004, - TMR_INT_CC3 = 0x0008, - TMR_INT_CC4 = 0x0010, - TMR_INT_COM = 0x0020, - TMR_INT_TRG = 0x0040, - TMR_INT_BRK = 0x0080 -} TMR_INT_T; - -/** - * @brief TMR event sources - */ -typedef enum -{ - TMR_EVENT_UPDATE = 0x001, - TMR_EVENT_CC1 = 0x002, - TMR_EVENT_CC2 = 0x004, - TMR_EVENT_CC3 = 0x008, - TMR_EVENT_CC4 = 0x010, - TMR_EVENT_COM = 0x020, - TMR_EVENT_TRG = 0x040, - TMR_EVENT_BRK = 0x080 -} TMR_EVENT_T; - -/** - * @brief TMR DMA Base Address - */ -typedef enum -{ - TMR_DMA_BASE_CTRL1 = 0x0000, - TMR_DMA_BASE_CTRL2 = 0x0001, - TMR_DMA_BASE_SMCTRL = 0x0002, - TMR_DMA_BASE_DIEN = 0x0003, - TMR_DMA_BASE_STS = 0x0004, - TMR_DMA_BASE_CEG = 0x0005, - TMR_DMA_BASE_CCM1 = 0x0006, - TMR_DMA_BASE_CCM2 = 0x0007, - TMR_DMA_BASE_CCEN = 0x0008, - TMR_DMA_BASE_CNT = 0x0009, - TMR_DMA_BASE_PSC = 0x000A, - TMR_DMA_BASE_AUTORLD = 0x000B, - TMR_DMA_BASE_REPCNT = 0x000C, - TMR_DMA_BASE_CC1 = 0x000D, - TMR_DMA_BASE_CC2 = 0x000E, - TMR_DMA_BASE_CC3 = 0x000F, - TMR_DMA_BASE_CC4 = 0x0010, - TMR_DMA_BASE_BDT = 0x0011, - TMR_DMA_BASE_DCTRL = 0x0012 -} TMR_DMA_BASE_T; - -/** - * @brief TMR DMA Burst Length - */ -typedef enum -{ - TMR_DMA_BURSTLENGTH_1TRANSFER = 0x0000, - TMR_DMA_BURSTLENGTH_2TRANSFERS = 0x0100, - TMR_DMA_BURSTLENGTH_3TRANSFERS = 0x0200, - TMR_DMA_BURSTLENGTH_4TRANSFERS = 0x0300, - TMR_DMA_BURSTLENGTH_5TRANSFERS = 0x0400, - TMR_DMA_BURSTLENGTH_6TRANSFERS = 0x0500, - TMR_DMA_BURSTLENGTH_7TRANSFERS = 0x0600, - TMR_DMA_BURSTLENGTH_8TRANSFERS = 0x0700, - TMR_DMA_BURSTLENGTH_9TRANSFERS = 0x0800, - TMR_DMA_BURSTLENGTH_10TRANSFERS = 0x0900, - TMR_DMA_BURSTLENGTH_11TRANSFERS = 0x0A00, - TMR_DMA_BURSTLENGTH_12TRANSFERS = 0x0B00, - TMR_DMA_BURSTLENGTH_13TRANSFERS = 0x0C00, - TMR_DMA_BURSTLENGTH_14TRANSFERS = 0x0D00, - TMR_DMA_BURSTLENGTH_15TRANSFERS = 0x0E00, - TMR_DMA_BURSTLENGTH_16TRANSFERS = 0x0F00, - TMR_DMA_BURSTLENGTH_17TRANSFERS = 0x1000, - TMR_DMA_BURSTLENGTH_18TRANSFERS = 0x1100, -} TMR_DMA_BURSTLENGTH_T; - -/** - * @brief TMR DMA Soueces - */ -typedef enum -{ - TMR_DMA_SOURCE_UPDATE = 0x0100, - TMR_DMA_SOURCE_CC1 = 0x0200, - TMR_DMA_SOURCE_CC2 = 0x0400, - TMR_DMA_SOURCE_CC3 = 0x0800, - TMR_DMA_SOURCE_CC4 = 0x1000, - TMR_DMA_SOURCE_COM = 0x2000, - TMR_DMA_SOURCE_TRG = 0x4000 -} TMR_DMA_SOURCE_T; - -/** - * @brief TMR Internal Trigger Selection - */ -typedef enum -{ - TMR_TRIGGER_SOURCE_ITR0 = 0x00, - TMR_TRIGGER_SOURCE_ITR1 = 0x01, - TMR_TRIGGER_SOURCE_ITR2 = 0x02, - TMR_TRIGGER_SOURCE_ITR3 = 0x03, - TMR_TRIGGER_SOURCE_TI1F_ED = 0x04, - TMR_TRIGGER_SOURCE_TI1FP1 = 0x05, - TMR_TRIGGER_SOURCE_TI2FP2 = 0x06, - TMR_TRIGGER_SOURCE_ETRF = 0x07 -} TMR_TRIGGER_SOURCE_T; - -/** - * @brief TMR The external Trigger Prescaler. - */ -typedef enum -{ - TMR_EXTTRG_PSC_OFF = 0x00, - TMR_EXTTRG_PSC_DIV2 = 0x01, - TMR_EXTTRG_PSC_DIV4 = 0x02, - TMR_EXTTRG_PSC_DIV8 = 0x03 -} TMR_EXTTRG_PSC_T; - -/** - * @brief TMR External Trigger Polarity - */ -typedef enum -{ - TMR_EXTTGR_POL_NONINVERTED, - TMR_EXTTRG_POL_INVERTED -} TMR_EXTTRG_POL_T; - -/** - * @brief TMR Prescaler Reload Mode - */ -typedef enum -{ - TMR_PSC_RELOAD_UPDATE, - TMR_PSC_RELOAD_IMMEDIATE -} TMR_PSC_RELOAD_T; - -/** - * @brief TMR Encoder Mode - */ -typedef enum -{ - TMR_ENCODER_MODE_TI1 = 0x01, - TMR_ENCODER_MODE_TI2 = 0x02, - TMR_ENCODER_MODE_TI12 = 0x03 -} TMR_ENCODER_MODE_T; - -/** - * @brief TMR Forced Action - */ -typedef enum -{ - TMR_FORCED_ACTION_INACTIVE = 0x04, - TMR_FORCED_ACTION_ACTIVE = 0x05 -} TMR_FORCED_ACTION_T; - -/** - * @brief TMR Output Compare Preload State - */ -typedef enum -{ - TMR_OC_PRELOAD_DISABLE, - TMR_OC_PRELOAD_ENABLE -} TMR_OC_PRELOAD_T; - -/** - * @brief TMR Output Compare Preload State - */ -typedef enum -{ - TMR_OC_FAST_DISABLE, - TMR_OC_FAST_ENABLE -} TMR_OC_FAST_T; - -/** - * @brief TMR Output Compare Preload State - */ -typedef enum -{ - TMR_OC_CLEAR_DISABLE, - TMR_OC_CLEAR_ENABLE -} TMR_OC_CLEAR_T; - -/** - * @brief TMR UpdateSource - */ -typedef enum -{ - TMR_UPDATE_SOURCE_GLOBAL, - TMR_UPDATE_SOURCE_REGULAR, -} TMR_UPDATE_SOURCE_T; - -/** - * @brief TMR Single Pulse Mode - */ -typedef enum -{ - TMR_SPM_REPETITIVE, - TMR_SPM_SINGLE, -} TMR_SPM_T; - -/** - * @brief TMR Trigger Output Source - */ -typedef enum -{ - TMR_TRGO_SOURCE_RESET, - TMR_TRGO_SOURCE_ENABLE, - TMR_TRGO_SOURCE_UPDATE, - TMR_TRGO_SOURCE_OC1, - TMR_TRGO_SOURCE_OC1REF, - TMR_TRGO_SOURCE_OC2REF, - TMR_TRGO_SOURCE_OC3REF, - TMR_TRGO_SOURCE_OC4REF -} TMR_TRGO_SOURCE_T; - -/** - * @brief TMR Slave Mode - */ -typedef enum -{ - TMR_SLAVE_MODE_RESET = 0x04, - TMR_SLAVE_MODE_GATED = 0x05, - TMR_SLAVE_MODE_TRIGGER = 0x06, - TMR_SLAVE_MODE_EXTERNAL1 = 0x07 -} TMR_SLAVE_MODE_T; - -/** - * @brief TMR Flag - */ -typedef enum -{ - TMR_FLAG_UPDATE = 0x0001, - TMR_FLAG_CC1 = 0x0002, - TMR_FLAG_CC2 = 0x0004, - TMR_FLAG_CC3 = 0x0008, - TMR_FLAG_CC4 = 0x0010, - TMR_FLAG_COM = 0x0020, - TMR_FLAG_TRG = 0x0040, - TMR_FLAG_BRK = 0x0080, - TMR_FLAG_CC1RC = 0x0200, - TMR_FLAG_CC2RC = 0x0400, - TMR_FLAG_CC3RC = 0x0800, - TMR_FLAG_CC4RC = 0x1000 -} TMR_FLAG_T; - -/**@} end of group TMR_Enumerations*/ - -/** @addtogroup TMR_Structure Data Structure - @{ -*/ - -/** - * @brief TMR Config struct definition - */ -typedef struct -{ - TMR_COUNTER_MODE_T countMode; - TMR_CLOCK_DIV_T clockDivision; - uint16_t period; //!< This must between 0x0000 and 0xFFFF - uint16_t division; //!< This must between 0x0000 and 0xFFFF - uint8_t repetitionCounter; //!< This must between 0x00 and 0xFF, only for TMR1 and TMR8. -} TMR_BaseConfig_T; ; - -/** - * @brief TMR Config struct definition - */ -typedef struct -{ - TMR_OC_MODE_T mode; - TMR_OC_STATE_T outputState; - TMR_OC_NSTATE_T outputNState; - TMR_OC_POLARITY_T polarity; - TMR_OC_NPOLARITY_T nPolarity; - TMR_OC_IDLE_STATE_T idleState; - TMR_OC_NIDLE_STATE_T nIdleState; - uint16_t pulse; //!< This must between 0x0000 and 0xFFFF -} TMR_OCConfig_T; - -/** - * @brief TMR BDT structure definition - */ -typedef struct -{ - TMR_RMOS_STATE_T RMOS; - TMR_IMOS_STATE_T IMOS; - TMR_LOCK_LEVEL_T lockLevel; - uint16_t deadTime; - TMR_BRK_STATE_T BRKState; - TMR_BRK_POLARITY_T BRKPolarity; - TMR_AUTOMATIC_OUTPUT_T automaticOutput; -} TMR_BDTConfig_T; - -/** - * @brief TMR Input Capture Config struct definition - */ -typedef struct -{ - TMR_CHANNEL_T channel; - TMR_IC_POLARITY_T polarity; - TMR_IC_SELECTION_T selection; - TMR_IC_PSC_T prescaler; - uint16_t filter; //!< This must between 0x00 and 0x0F -} TMR_ICConfig_T; - -/**@} end of group TMR_Structure*/ - -/** @addtogroup TMR_Fuctions Fuctions - @{ -*/ - -/** Reset and Configuration */ -void TMR_Reset(TMR_T* tmr); -void TMR_ConfigTimeBase(TMR_T* tmr, TMR_BaseConfig_T *baseConfig); -void TMR_ConfigOC1(TMR_T* tmr, TMR_OCConfig_T *OCConfig); -void TMR_ConfigOC2(TMR_T* tmr, TMR_OCConfig_T *OCConfig); -void TMR_ConfigOC3(TMR_T* tmr, TMR_OCConfig_T *OCConfig); -void TMR_ConfigOC4(TMR_T* tmr, TMR_OCConfig_T *OCConfig); -void TMR_ConfigIC(TMR_T* tmr, TMR_ICConfig_T *ICConfig); -void TMR_ConfigBDT(TMR_T* tmr, TMR_BDTConfig_T *BDTConfig); -void TMR_ConfigTimeBaseStructInit(TMR_BaseConfig_T *baseConfig); -void TMR_ConfigOCStructInit(TMR_OCConfig_T *OCConfig); -void TMR_ConfigICStructInit(TMR_ICConfig_T *ICConfig); -void TMR_ConfigBDTStructInit( TMR_BDTConfig_T *BDTConfig); -void TMR_ConfigSinglePulseMode(TMR_T* tmr, TMR_SPM_T singlePulseMode); -void TMR_ConfigClockDivision(TMR_T* tmr, TMR_CLOCK_DIV_T clockDivision); -void TMR_Enable(TMR_T* tmr); -void TMR_Disable(TMR_T* tmr); - -/** PWM Configuration */ -void TMR_ConfigPWM(TMR_T* tmr, TMR_ICConfig_T *PWMConfig); -void TMR_EnablePWMOutputs(TMR_T* tmr); -void TMR_DisablePWMOutputs(TMR_T* tmr); - -/** DMA */ -void TMR_ConfigDMA(TMR_T* tmr, TMR_DMA_BASE_T baseAddress, TMR_DMA_BURSTLENGTH_T burstLength); -void TMR_EnableDMASoure(TMR_T* tmr, uint16_t dmaSource); -void TMR_DisableDMASoure(TMR_T* tmr, uint16_t dmaSource); - -/** Configuration */ -void TMR_ConfigInternalClock(TMR_T* tmr); -void TMR_ConfigIntTrigExternalClock(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSource); -void TMR_ConfigTrigExternalClock(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSource, - TMR_IC_POLARITY_T ICpolarity, uint16_t ICfilter); -void TMR_ConfigETRClockMode1(TMR_T* tmr, TMR_EXTTRG_PSC_T prescaler, - TMR_EXTTRG_POL_T polarity, uint16_t filter); -void TMR_ConfigETRClockMode2(TMR_T* tmr, TMR_EXTTRG_PSC_T prescaler, - TMR_EXTTRG_POL_T polarity, uint16_t filter); -void TMR_ConfigETR(TMR_T* tmr, TMR_EXTTRG_PSC_T prescaler, - TMR_EXTTRG_POL_T polarity, uint16_t filter); -void TMR_ConfigPrescaler(TMR_T* tmr, uint16_t prescaler, TMR_PSC_RELOAD_T pscReloadMode); -void TMR_ConfigCounterMode(TMR_T* tmr, TMR_COUNTER_MODE_T countMode); -void TMR_SelectInputTrigger(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSouce); -void TMR_ConfigEncodeInterface(TMR_T* tmr, TMR_ENCODER_MODE_T encodeMode, TMR_IC_POLARITY_T IC1Polarity, - TMR_IC_POLARITY_T IC2Polarity); -void TMR_ConfigForcedOC1(TMR_T* tmr,TMR_FORCED_ACTION_T forcesAction); -void TMR_ConfigForcedOC2(TMR_T* tmr,TMR_FORCED_ACTION_T forcesAction); -void TMR_ConfigForcedOC3(TMR_T* tmr,TMR_FORCED_ACTION_T forcesAction); -void TMR_ConfigForcedOC4(TMR_T* tmr,TMR_FORCED_ACTION_T forcesAction); -void TMR_EnableAutoReload(TMR_T* tmr); -void TMR_DisableAutoReload(TMR_T* tmr); -void TMR_EnableSelectCOM(TMR_T* tmr); -void TMR_DisableSelectCOM(TMR_T* tmr); -void TMR_EnableCCDMA(TMR_T* tmr); -void TMR_DisableCCDMA(TMR_T* tmr); -void TMR_EnableCCPreload(TMR_T* tmr); -void TMR_DisableCCPreload(TMR_T* tmr); -void TMR_ConfigOC1Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload); -void TMR_ConfigOC2Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload); -void TMR_ConfigOC3Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload); -void TMR_ConfigOC4Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload); -void TMR_ConfigOC1Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast); -void TMR_ConfigOC2Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast); -void TMR_ConfigOC3Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast); -void TMR_ConfigOC4Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast); -void TMR_ClearOC1Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear); -void TMR_ClearOC2Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear); -void TMR_ClearOC3Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear); -void TMR_ClearOC4Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear); -void TMR_ConfigOC1Polarity(TMR_T* tmr, TMR_OC_POLARITY_T OCPolarity); -void TMR_ConfigOC1NPolarity(TMR_T* tmr, TMR_OC_NPOLARITY_T OCNPolarity); -void TMR_ConfigOC2Polarity(TMR_T* tmr, TMR_OC_POLARITY_T OCPolarity); -void TMR_ConfigOC2NPolarity(TMR_T* tmr, TMR_OC_NPOLARITY_T OCNPolarity); -void TMR_ConfigOC3Polarity(TMR_T* tmr, TMR_OC_POLARITY_T OCPolarity); -void TMR_ConfigOC3NPolarity(TMR_T* tmr, TMR_OC_NPOLARITY_T OCNPolarity); -void TMR_ConfigOC4Polarity(TMR_T* tmr, TMR_OC_POLARITY_T OCPolarity); -void TMR_EnableCCxChannel(TMR_T* tmr,TMR_CHANNEL_T channel); -void TMR_DisableCCxChannel(TMR_T* tmr,TMR_CHANNEL_T channel); -void TMR_EnableCCxNChannel(TMR_T* tmr,TMR_CHANNEL_T channel); -void TMR_DisableCCxNChannel(TMR_T* tmr,TMR_CHANNEL_T channel); -void TMR_SelectOCxMode(TMR_T* tmr, TMR_CHANNEL_T channel, TMR_OC_MODE_T OCMode); -void TMR_EnableUpdate(TMR_T* tmr); -void TMR_DisableUpdate(TMR_T* tmr); -void TMR_ConfigUpdateRequest(TMR_T* tmr, TMR_UPDATE_SOURCE_T updateSource); -void TMR_EnableHallSensor(TMR_T* tmr); -void TMR_DisableHallSensor(TMR_T* tmr); -void TMR_SelectOutputTrigger(TMR_T* tmr, TMR_TRGO_SOURCE_T TRGOSource); -void TMR_SelectSlaveMode(TMR_T* tmr, TMR_SLAVE_MODE_T slaveMode); -void TMR_EnableMasterSlaveMode(TMR_T* tmr); -void TMR_DisableMasterSlaveMode(TMR_T* tmr); -void TMR_ConfigCounter(TMR_T* tmr, uint16_t counter); -void TMR_ConfigAutoreload(TMR_T* tmr, uint16_t autoReload); -void TMR_ConfigCompare1(TMR_T* tmr, uint16_t compare1); -void TMR_ConfigCompare2(TMR_T* tmr, uint16_t compare2); -void TMR_ConfigCompare3(TMR_T* tmr, uint16_t compare3); -void TMR_ConfigCompare4(TMR_T* tmr, uint16_t compare4); -void TMR_ConfigIC1Prescal(TMR_T* tmr, TMR_IC_PSC_T prescaler); -void TMR_ConfigIC2Prescal(TMR_T* tmr, TMR_IC_PSC_T prescaler); -void TMR_ConfigIC3Prescal(TMR_T* tmr, TMR_IC_PSC_T prescaler); -void TMR_ConfigIC4Prescal(TMR_T* tmr, TMR_IC_PSC_T prescaler); -uint16_t TMR_ReadCaputer1(TMR_T* tmr); -uint16_t TMR_ReadCaputer2(TMR_T* tmr); -uint16_t TMR_ReadCaputer3(TMR_T* tmr); -uint16_t TMR_ReadCaputer4(TMR_T* tmr); -uint16_t TMR_ReadCounter(TMR_T* tmr); -uint16_t TMR_ReadPrescaler(TMR_T* tmr); - -/** Interrupts and Event */ -void TMR_EnableInterrupt(TMR_T* tmr, uint16_t interrupt); -void TMR_DisableInterrupt(TMR_T* tmr, uint16_t interrupt); -void TMR_GenerateEvent(TMR_T* tmr,uint16_t eventSources); - -/** flags */ -uint16_t TMR_ReadStatusFlag(TMR_T* tmr, TMR_FLAG_T flag); -void TMR_ClearStatusFlag(TMR_T* tmr, uint16_t flag); -uint16_t TMR_ReadIntFlag(TMR_T* tmr, TMR_INT_T flag); -void TMR_ClearIntFlag(TMR_T* tmr, uint16_t flag); - -/**@} end of group TMR_Fuctions*/ -/**@} end of group TMR_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_TMR_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_usart.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_usart.h deleted file mode 100644 index d18418d..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_usart.h +++ /dev/null @@ -1,310 +0,0 @@ -/*! - * @file apm32f10x_usart.h - * - * @brief This file contains all the functions prototypes for the USART firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_USART_H -#define __APM32F10X_USART_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup USART_Driver USART Driver - @{ -*/ - -/** @addtogroup USART_Enumerations Enumerations - @{ -*/ - -/** - * @brief USART Word Length define - */ -typedef enum -{ - USART_WORD_LEN_8B = 0, - USART_WORD_LEN_9B = BIT12 -} USART_WORD_LEN_T; - -/** - * @brief USART Stop bits define - */ -typedef enum -{ - USART_STOP_BIT_1 = 0, - USART_STOP_BIT_0_5 = BIT12, - USART_STOP_BIT_2 = BIT13, - USART_STOP_BIT_1_5 = BIT12 | BIT13 -} USART_STOP_BIT_T; - -/** - * @brief USART Parity define - */ -typedef enum -{ - USART_PARITY_NONE = 0, - USART_PARITY_EVEN = BIT10, - USART_PARITY_ODD = BIT10 | BIT9 -} USART_PARITY_T; - -/** - * @brief USART mode define - */ -typedef enum -{ - USART_MODE_RX = BIT2, - USART_MODE_TX = BIT3, - USART_MODE_TX_RX = BIT2 | BIT3 -} USART_MODE_T; - -/** - * @brief USART hardware flow control define - */ -typedef enum -{ - USART_HARDWARE_FLOW_NONE = 0, - USART_HARDWARE_FLOW_RTS = BIT8, - USART_HARDWARE_FLOW_CTS = BIT9, - USART_HARDWARE_FLOW_RTS_CTS = BIT8 | BIT9 -} USART_HARDWARE_FLOW_T; - -/** - * @brief USART Clock enable - */ -typedef enum -{ - USART_CLKEN_DISABLE, - USART_CLKEN_ENABLE -} USART_CLKEN_T; - -/** - * @brief USART Clock polarity define - */ -typedef enum -{ - USART_CLKPOL_LOW, - USART_CLKPOL_HIGH -} USART_CLKPOL_T; - -/** - * @brief USART Clock phase define - */ -typedef enum -{ - USART_CLKPHA_1EDGE, - USART_CLKPHA_2EDGE -} USART_CLKPHA_T; - -/** - * @brief USART Last bit clock pulse enable - */ -typedef enum -{ - USART_LBCP_DISABLE, - USART_LBCP_ENABLE, -} USART_LBCP_T; - -/** - * @brief USART Interrupt Source - */ -typedef enum -{ - USART_INT_PE = 0x0010100, - USART_INT_TXBE = 0x7010080, - USART_INT_TXC = 0x6010040, - USART_INT_RXBNE = 0x5010020, - USART_INT_IDLE = 0x4010010, - USART_INT_LBD = 0x8020040, - USART_INT_CTS = 0x9040400, - USART_INT_ERR = 0x0040001, - USART_INT_OVRE = 0x3040001, - USART_INT_NE = 0x2040001, - USART_INT_FE = 0x1040001 -} USART_INT_T; - -/** - * @brief USART DMA enable - */ -typedef enum -{ - USART_DMA_TX = BIT7, - USART_DMA_RX = BIT6, - USART_DMA_TX_RX = BIT6 | BIT7 -} USART_DMA_T; - -/** - * @brief USART Wakeup method - */ -typedef enum -{ - USART_WAKEUP_IDLE_LINE, - USART_WAKEUP_ADDRESS_MARK -} USART_WAKEUP_T; - -/** - * @brief USART LIN break detection length - */ -typedef enum -{ - USART_LBDL_10B, - USART_LBDL_11B -} USART_LBDL_T; - -/** - * @brief USART IrDA low-power - */ -typedef enum -{ - USART_IRDALP_NORMAL, - USART_IRDALP_LOWPOWER -} USART_IRDALP_T; - -/** - * @brief USART flag define - */ -typedef enum -{ - USART_FLAG_CTS = 0x0200, - USART_FLAG_LBD = 0x0100, - USART_FLAG_TXBE = 0x0080, - USART_FLAG_TXC = 0x0040, - USART_FLAG_RXBNE = 0x0020, - USART_FLAG_IDLE = 0x0010, - USART_FLAG_OVRE = 0x0008, - USART_FLAG_NE = 0x0004, - USART_FLAG_FE = 0x0002, - USART_FLAG_PE = 0x0001 -} USART_FLAG_T; - -/**@} end of group USART_Enumerations*/ - -/** @addtogroup USART_Structure Data Structure - @{ -*/ - -/** - * @brief USART Config struct definition - */ -typedef struct -{ - uint32_t baudRate; //!< Specifies the baud rate - USART_WORD_LEN_T wordLength; //!< Specifies the word length - USART_STOP_BIT_T stopBits; //!< Specifies the stop bits - USART_PARITY_T parity; //!< Specifies the parity - USART_MODE_T mode; //!< Specifies the mode - USART_HARDWARE_FLOW_T hardwareFlow; //!< Specifies the hardware flow control -} USART_Config_T; - -/** - * @brief USART synchronous communication clock config struct definition - */ -typedef struct -{ - USART_CLKEN_T clock; //!< Enable or Disable Clock - USART_CLKPOL_T polarity; //!< Specifies the clock polarity - USART_CLKPHA_T phase; //!< Specifies the clock phase - USART_LBCP_T lastBit; //!< Enable or Disable last bit clock -} USART_ClockConfig_T; - -/**@} end of group USART_Structure*/ - -/** @addtogroup USART_Fuctions Fuctions - @{ -*/ - -/** USART Reset and Configuration */ -void USART_Reset(USART_T* usart); -void USART_Config(USART_T* uart, USART_Config_T* usartConfig); -void USART_ConfigStructInit(USART_Config_T* usartConfig); -void USART_Address(USART_T* usart, uint8_t address); -void USART_Enable(USART_T* usart); -void USART_Disable(USART_T* usart); - -/** Clock communication */ -void USART_ConfigClock(USART_T* usart, USART_ClockConfig_T* clockConfig); -void USART_ConfigClockStructInit(USART_ClockConfig_T* clockConfig); - -/** DMA mode */ -void USART_EnableDMA(USART_T* usart, USART_DMA_T dmaReq); -void USART_DisableDMA(USART_T* usart, USART_DMA_T dmaReq); - -/** Mute mode */ -void USART_ConfigWakeUp(USART_T* usart, USART_WAKEUP_T wakeup); -void USART_EnableMuteMode(USART_T* usart); -void USART_DisableMuteMode(USART_T* usart); - -/** LIN mode */ -void USART_ConfigLINBreakDetectLength(USART_T* usart, USART_LBDL_T length); -void USART_EnableLIN(USART_T* usart); -void USART_DisableLIN(USART_T* usart); - -/** Transmit and receive */ -void USART_EnableTx(USART_T* usart); -void USART_DisableTx(USART_T* usart); -void USART_EnableRx(USART_T* usart); -void USART_DisableRx(USART_T* usart); -void USART_TxData(USART_T* usart, uint16_t data); -uint16_t USART_RxData(USART_T* usart); -void USART_TxBreak(USART_T* usart); - -/** Smartcard mode */ -void USART_ConfigGuardTime(USART_T* usart, uint8_t guardTime); -void USART_ConfigPrescaler(USART_T* usart, uint8_t div); -void USART_EnableSmartCard(USART_T* usart); -void USART_DisableSmartCard(USART_T* usart); -void USART_EnableSmartCardNACK(USART_T* usart); -void USART_DisableSmartCardNACK(USART_T* usart); - -/** Half-duplex mode */ -void USART_EnableHalfDuplex(USART_T* usart); -void USART_DisableHalfDuplex(USART_T* usart); - -/** IrDA mode */ -void USART_ConfigIrDA(USART_T* usart, USART_IRDALP_T IrDAMode); -void USART_EnableIrDA(USART_T* usart); -void USART_DisableIrDA(USART_T* usart); - -/** Interrupt and flag */ -void USART_EnableInterrupt(USART_T* usart, USART_INT_T interrupt); -void USART_DisableInterrupt(USART_T* usart, USART_INT_T interrupt); -uint8_t USART_ReadStatusFlag(USART_T* usart, USART_FLAG_T flag); -void USART_ClearStatusFlag(USART_T* usart, USART_FLAG_T flag); -uint8_t USART_ReadIntFlag(USART_T* usart, USART_INT_T flag); -void USART_ClearIntFlag(USART_T* usart, USART_INT_T flag); - -/**@} end of group USART_Fuctions*/ -/**@} end of group USART_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_USART_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_wwdt.h b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_wwdt.h deleted file mode 100644 index 1acc761..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/inc/apm32f10x_wwdt.h +++ /dev/null @@ -1,92 +0,0 @@ -/*! - * @file apm32f10x_wwdt.h - * - * @brief This file contains all the functions prototypes for the WWDT firmware library - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_WWDT_H -#define __APM32F10X_WWDT_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup WWDT_Driver WWDT Driver - @{ -*/ - -/** @addtogroup WWDT_Enumerations Enumerations - @{ -*/ - -/** - * @brief WWDT Timebase(Prescaler) define - */ -typedef enum -{ - WWDT_TIME_BASE_1 = 0x00000000, - WWDT_TIME_BASE_2 = 0x00000080, - WWDT_TIME_BASE_4 = 0x00000100, - WWDT_TIME_BASE_8 = 0x00000180 -}WWDT_TIME_BASE_T; - -/**@} end of group WWDT_Enumerations*/ - -/** @addtogroup WWDT_Fuctions Fuctions - @{ -*/ - -/** WWDT reset */ -void WWDT_Reset(void); - -/** Config WWDT Timebase */ -void WWDT_ConfigTimebase(WWDT_TIME_BASE_T timeBase); - -/** Config Window Data */ -void WWDT_ConfigWindowData(uint8_t windowData); - -/** Config Couter */ -void WWDT_ConfigCounter(uint8_t counter); - -/** Enable WWDT and Early Wakeup interrupt */ -void WWDT_EnableEWI(void); -void WWDT_Enable(uint8_t count); - -/** Read Flag and Clear Flag */ -uint8_t WWDT_ReadFlag(void); -void WWDT_ClearFlag(void); - -/**@} end of group WWDT_Fuctions*/ -/**@} end of group WWDT_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_WWDT_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_adc.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_adc.c deleted file mode 100644 index 8f9de83..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_adc.c +++ /dev/null @@ -1,1064 +0,0 @@ -/*! - * @file apm32f10x_adc.c - * - * @brief This file provides all the ADC firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_adc.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup ADC_Driver ADC Driver - @{ -*/ - -/** @addtogroup ADC_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset ADC peripheral registers to their default reset values. - * - * @param adc: Select ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_Reset(ADC_T* adc) -{ - if(adc == ADC1) - { - RCM_EnableAPB2PeriphReset(RCM_APB2_PERIPH_ADC1); - RCM_DisableAPB2PeriphReset(RCM_APB2_PERIPH_ADC1); - } - else if(adc == ADC2) - { - RCM_EnableAPB2PeriphReset(RCM_APB2_PERIPH_ADC2); - RCM_DisableAPB2PeriphReset(RCM_APB2_PERIPH_ADC2); - } - else if (adc == ADC3) - { - RCM_EnableAPB2PeriphReset(RCM_APB2_PERIPH_ADC3); - RCM_DisableAPB2PeriphReset(RCM_APB2_PERIPH_ADC3); - } -} - -/*! - * @brief Config the ADC peripheral according to the specified parameters in the adcConfig. - * - * @param adc: Select ADC peripheral. - * - * @param adcConfig: pointer to a ADC_Config_T structure. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_Config(ADC_T* adc, ADC_Config_T* adcConfig) -{ - uint32_t reg; - - reg = adc->CTRL1; - reg &= 0xFFF0FEFF; - reg |= (uint32_t)((adcConfig->mode) | ((uint32_t)adcConfig->scanConvMode << 8)); - adc->CTRL1 = reg; - - reg = adc->CTRL2; - reg &= 0xFFF1F7FD; - reg |= (uint32_t)adcConfig->dataAlign | \ - (uint32_t)adcConfig->externalTrigConv | \ - ((uint32_t)adcConfig->continuosConvMode << 1); - - adc->CTRL2 = reg; - - reg = adc->REGSEQ1; - reg &= 0xFF0FFFFF; - reg |= (uint32_t)((adcConfig->nbrOfChannel - (uint8_t)1) << 20); - adc->REGSEQ1 = reg; -} - -/*! - * @brief Fills each ADC_Config_T member with its default value. - * - * @param adcConfig: pointer to a ADC_Config_T structure which will be initialized. - * - * @retval None - */ -void ADC_ConfigStructInit(ADC_Config_T* adcConfig) -{ - adcConfig->mode = ADC_MODE_INDEPENDENT; - adcConfig->scanConvMode = DISABLE; - adcConfig->continuosConvMode = DISABLE; - adcConfig->externalTrigConv = ADC_EXT_TRIG_CONV_TMR1_CC1; - adcConfig->dataAlign = ADC_DATA_ALIGN_RIGHT; - adcConfig->nbrOfChannel = 1; -} - -/*! - * @brief Enables the specified ADC peripheral. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_Enable(ADC_T* adc) -{ - adc->CTRL2_B.ADCEN = BIT_SET; -} - -/*! - * @brief Disable the specified ADC peripheral. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_Disable(ADC_T* adc) -{ - adc->CTRL2_B.ADCEN = BIT_RESET; -} - -/*! - * @brief Disable the specified ADC DMA request. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableDMA(ADC_T* adc) -{ - adc->CTRL2_B.DMAEN = BIT_SET; -} - -/*! - * @brief Disable the specified ADC DMA request. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableDMA(ADC_T* adc) -{ - adc->CTRL2_B.DMAEN = BIT_RESET; -} - -/*! - * @brief Reset the specified ADC calibration registers. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ResetCalibration(ADC_T* adc) -{ - adc->CTRL2_B.CALRST = BIT_SET; -} - -/*! - * @brief Reads the specified ADC calibration reset status. - * - * @param adc: Select the ADC peripheral. - * - * @retval The status of ADC calibration reset. - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -uint8_t ADC_ReadResetCalibrationStatus(ADC_T* adc) -{ - uint8_t ret; - ret = (adc->CTRL2_B.CALRST) ? BIT_SET : BIT_RESET; - return ret; -} - -/*! - * @brief Starts the specified ADC calibration. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_StartCalibration(ADC_T* adc) -{ - adc->CTRL2_B.CAL = BIT_SET; -} - -/*! - * @brief Reads the specified ADC calibration start flag. - * - * @param adc: Select the ADC peripheral. - * - * @retval The status of ADC calibration start. - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -uint8_t ADC_ReadCalibrationStartFlag(ADC_T* adc) -{ - uint8_t ret; - ret = (adc->CTRL2_B.CAL) ? BIT_SET : BIT_RESET; - return ret; -} - -/*! - * @brief Enables the specified ADC software start conversion. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableSoftwareStartConv(ADC_T* adc) -{ - adc->CTRL2 |= 0x00500000; -} - -/*! - * @brief Disable the specified ADC software start conversion. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableSoftwareStartConv(ADC_T* adc) -{ - adc->CTRL2 &= 0xFFAFFFFF; -} - -/*! - * @brief Reads the specified ADC Software start conversion Status. - * - * @param adc: Select the ADC peripheral. - * - * @retval The status of ADC Software start conversion registers. - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -uint8_t ADC_ReadSoftwareStartConvStatus(ADC_T* adc) -{ - uint8_t ret; - ret = (adc->CTRL2_B.REGSWSC) ? BIT_SET : BIT_RESET; - return ret; -} - -/*! - * @brief Configures the specified ADC regular discontinuous mode. - * - * @param adc: Select the ADC peripheral. - * - * @param number: The number of the discontinuous mode regular channels. - * This parameter can be between 1 and 8. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ConfigDiscMode(ADC_T* adc, uint8_t number) -{ - adc->CTRL1_B.DISCNUMCFG |= number - 1; -} - -/*! - * @brief Enable the specified ADC regular discontinuous mode. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableDiscMode(ADC_T* adc) -{ - adc->CTRL1_B.REGDISCEN = BIT_SET; -} - -/*! - * @brief Disable the specified ADC regular discontinuous mode. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableDiscMode(ADC_T* adc) -{ - adc->CTRL1_B.REGDISCEN = BIT_RESET; -} - -/*! - * @brief Configures the specified ADC regular channel. - * - * @param adc: Select the ADC peripheral. - * - * @param channel: Select the ADC channel. - * This parameter can be one of the following values: - * @arg ADC_CHANNEL_0: ADC channel 0 - * @arg ADC_CHANNEL_1: ADC channel 1 - * @arg ADC_CHANNEL_2: ADC channel 2 - * @arg ADC_CHANNEL_3: ADC channel 3 - * @arg ADC_CHANNEL_4: ADC channel 4 - * @arg ADC_CHANNEL_5: ADC channel 5 - * @arg ADC_CHANNEL_6: ADC channel 6 - * @arg ADC_CHANNEL_7: ADC channel 7 - * @arg ADC_CHANNEL_8: ADC channel 8 - * @arg ADC_CHANNEL_9: ADC channel 9 - * @arg ADC_CHANNEL_10: ADC channel 10 - * @arg ADC_CHANNEL_11: ADC channel 11 - * @arg ADC_CHANNEL_12: ADC channel 12 - * @arg ADC_CHANNEL_13: ADC channel 13 - * @arg ADC_CHANNEL_14: ADC channel 14 - * @arg ADC_CHANNEL_15: ADC channel 15 - * @arg ADC_CHANNEL_16: ADC channel 16 which is connected to TempSensor - * @arg ADC_CHANNEL_17: ADC channel 17 which is connected to Vrefint - * - * @param rank: The rank in the regular group sequencer - * This parameter must be between 1 to 16. - * - * @param sampleTime: the specified ADC channel SampleTime - * The parameter can be one of following values: - * @arg ADC_SAMPLETIME_1CYCLES5: ADC 1.5 clock cycles - * @arg ADC_SAMPLETIME_7CYCLES5: ADC 7.5 clock cycles - * @arg ADC_SAMPLETIME_13CYCLES5: ADC 13.5 clock cycles - * @arg ADC_SAMPLETIME_28CYCLES5: ADC 28.5 clock cycles - * @arg ADC_SAMPLETIME_41CYCLES5: ADC 41.5 clock cycles - * @arg ADC_SAMPLETIME_55CYCLES5: ADC 55.5 clock cycles - * @arg ADC_SAMPLETIME_71CYCLES5: ADC 71.5 clock cycles - * @arg ADC_SAMPLETIME_239CYCLES5: ADC 239.5 clock cycles - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ConfigRegularChannel(ADC_T* adc, uint8_t channel,uint8_t rank, uint8_t sampleTime) -{ - uint32_t temp1 = 0; - uint32_t temp2 = 0; - if(channel > ADC_CHANNEL_9) - { - temp1 = adc->SMPTIM1; - temp2 = SMPCYCCFG_SET_SMPTIM1 << (3 * (channel - 10)); - temp1 &= ~temp2; - temp2 = (uint32_t)sampleTime << (3 * (channel - 10)); - temp1 |= temp2; - adc->SMPTIM1 = temp1; - } - else - { - temp1 = adc->SMPTIM2; - temp2 = SMPCYCCFG_SET_SMPTIM2 << (3 * channel); - temp1 &= ~temp2; - temp2 = (uint32_t)sampleTime << (3 * channel); - temp1 |= temp2; - adc->SMPTIM2 = temp1; - } - - if(rank < 7) - { - temp1 = adc->REGSEQ3; - temp2 = REGSEQC_SET_REGSEQ3 << (5 * (rank - 1)); - temp1 &= ~temp2; - temp2 = (uint32_t)channel << (5 * (rank - 1)); - temp1 |= temp2; - adc->REGSEQ3 = temp1; - } - else if(rank < 13) - { - temp1 = adc->REGSEQ2; - temp2 = REGSEQC_SET_REGSEQ2 << (5 * (rank - 7)); - temp1 &= ~temp2; - temp2 = (uint32_t)channel << (5 * (rank - 7)); - temp1 |= temp2; - adc->REGSEQ2 = temp1; - } - else - { - temp1 = adc->REGSEQ1; - temp2 = REGSEQC_SET_REGSEQ1 << (5 * (rank - 13)); - temp1 &= ~temp2; - temp2 = (uint32_t)channel << (5 * (rank - 13)); - temp1 |= temp2; - adc->REGSEQ1 = temp1; - } -} - -/*! - * @brief Enable the specified ADC regular channel external trigger. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableExternalTrigConv(ADC_T* adc) -{ - adc->CTRL2_B.REGEXTTRGEN = BIT_SET; -} - -/*! - * @brief Disable the specified ADC regular channel external trigger. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableExternalTrigConv(ADC_T* adc) -{ - adc->CTRL2_B.REGEXTTRGEN = BIT_RESET; -} - -/*! - * @brief Reads the specified ADC conversion result data. - * - * @param adc: Select the ADC peripheral. - * - * @retval The Data conversion value. - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -uint16_t ADC_ReadConversionValue(ADC_T* adc) -{ - return (uint16_t) adc->REGDATA; -} - -/*! - * @brief Reads the specified ADC conversion result data in dual mode. - * - * @param adc: Select the ADC peripheral. - * - * @retval The Data conversion value. - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -uint32_t ADC_ReadDualModeConversionValue(ADC_T* adc) -{ - return (*(__IOM uint32_t *) RDG_ADDRESS); -} - -/*! - * @brief Enable the specified ADC automatic injected group. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableAutoInjectedConv(ADC_T* adc) -{ - adc->CTRL1_B.INJGACEN = BIT_SET; -} - -/*! - * @brief Disable the specified ADC automatic injected group. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableAutoInjectedConv(ADC_T* adc) -{ - adc->CTRL1_B.INJGACEN = BIT_RESET; -} - -/*! - * @brief Enable the specified ADC discontinuous mode for injected group. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableInjectedDiscMode(ADC_T* adc) -{ - adc->CTRL1_B.INJDISCEN = BIT_SET; -} - -/*! - * @brief Disable the specified ADC discontinuous mode for injected group. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableInjectedDiscMode(ADC_T* adc) -{ - adc->CTRL1_B.INJDISCEN = BIT_RESET; -} - -/*! - * @brief Configures the specified ADC external trigger for injected channels conversion - * - * @param adc: Select the ADC peripheral - * - * @param extTrigInjecConv: Select the ADC trigger to start injected conversion - * This parameter can be one of the following values: - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR1_TRGO : Select Timer1 TRGO event (for ADC1, ADC2 and ADC3) - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR1_CC4 : Select Timer1 capture compare4 (for ADC1, ADC2 and ADC3) - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR2_TRGO : Select Timer2 TRGO event (for ADC1 and ADC2) - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR2_CC1 : Select Timer2 capture compare1 (for ADC1 and ADC2) - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR3_CC4 : Select Timer3 capture compare4 (for ADC1 and ADC2) - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR4_TRGO : Select Timer4 TRGO event selected (for ADC1 and ADC2) - * @arg ADC_EXT_TRIG_INJEC_CONV_EINT15_T8_CC4: External interrupt line 15 or Timer8 capture compare4 event - * (for ADC1 and ADC2) - * - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR4_CC3 : Timer4 capture compare3 selected (for ADC3 only) - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR8_CC2 : Timer8 capture compare2 selected (for ADC3 only) - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR8_CC4 : Timer8 capture compare4 selected (for ADC3 only) - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR5_TRGO: Timer5 TRGO event selected (for ADC3 only) - * @arg ADC_EXT_TRIG_INJEC_CONV_TMR5_CC4 : Timer5 capture compare4 selected (for ADC3 only) - * @arg ADC_EXT_TRIG_INJEC_CONV_NONE : Injected conversion started by software instead of external trigger - * (for ADC1, ADC2 and ADC3) - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ConfigExternalTrigInjectedConv(ADC_T* adc, ADC_EXT_TRIG_INJEC_CONV_T extTrigInjecConv) -{ - adc->CTRL2_B.INJGEXTTRGSEL = RESET; - adc->CTRL2_B.INJGEXTTRGSEL |= extTrigInjecConv; -} - -/*! - * @brief Ensable the specified ADC injected channels conversion through - * - * @param adc: Select the ADC peripheral - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableExternalTrigInjectedConv(ADC_T* adc) -{ - adc->CTRL2_B.INJEXTTRGEN = BIT_SET; -} - -/*! - * @brief Disable the specified ADC injected channels conversion through - * - * @param adc: Select the ADC peripheral - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableExternalTrigInjectedConv(ADC_T* adc) -{ - adc->CTRL2_B.INJEXTTRGEN = BIT_RESET; -} - -/*! - * @brief Enable the specified ADC start of the injected - * - * @param adc: Select the ADC peripheral - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableSoftwareStartInjectedConv(ADC_T* adc) -{ - adc->CTRL2_B.INJEXTTRGEN = BIT_SET; - adc->CTRL2_B.INJSWSC = BIT_SET; -} - -/*! - * @brief Disable the specified ADC start of the injected - * - * @param adc: Select the ADC peripheral - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableSoftwareStartInjectedConv(ADC_T* adc) -{ - adc->CTRL2_B.INJEXTTRGEN = BIT_RESET; - adc->CTRL2_B.INJSWSC = BIT_RESET; -} - -/*! - * @brief Reads the specified ADC Software start injected conversion Status - * - * @param adc: Select the ADC peripheral - * - * @retval The status of ADC Software start injected conversion - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -uint8_t ADC_ReadSoftwareStartInjectedConvStatus(ADC_T* adc) -{ - uint8_t ret; - ret = (adc->CTRL2_B.INJSWSC) ? BIT_SET : BIT_RESET; - return ret; -} - -/*! - * @brief Configures the specified ADC injected channel. - * - * @param adc: Select the ADC peripheral. - * - * @param channel: Select the ADC injected channel. - * This parameter can be one of the following values: - * @arg ADC_CHANNEL_0: ADC channel 0 - * @arg ADC_CHANNEL_1: ADC channel 1 - * @arg ADC_CHANNEL_2: ADC channel 2 - * @arg ADC_CHANNEL_3: ADC channel 3 - * @arg ADC_CHANNEL_4: ADC channel 4 - * @arg ADC_CHANNEL_5: ADC channel 5 - * @arg ADC_CHANNEL_6: ADC channel 6 - * @arg ADC_CHANNEL_7: ADC channel 7 - * @arg ADC_CHANNEL_8: ADC channel 8 - * @arg ADC_CHANNEL_9: ADC channel 9 - * @arg ADC_CHANNEL_10: ADC channel 10 - * @arg ADC_CHANNEL_11: ADC channel 11 - * @arg ADC_CHANNEL_12: ADC channel 12 - * @arg ADC_CHANNEL_13: ADC channel 13 - * @arg ADC_CHANNEL_14: ADC channel 14 - * @arg ADC_CHANNEL_15: ADC channel 15 - * @arg ADC_CHANNEL_16: ADC channel 16 which is connected to TempSensor - * @arg ADC_CHANNEL_17: ADC channel 17 which is connected to Vrefint - * - * @param rank: The rank in the injected group sequencer. - * This parameter must be between 1 to 4. - * - * @param sampleTime: the specified ADC channel SampleTime - * The parameter can be one of following values: - * @arg ADC_SAMPLETIME_1CYCLES5: ADC 1.5 clock cycles - * @arg ADC_SAMPLETIME_7CYCLES5: ADC 7.5 clock cycles - * @arg ADC_SAMPLETIME_13CYCLES5: ADC 13.5 clock cycles - * @arg ADC_SAMPLETIME_28CYCLES5: ADC 28.5 clock cycles - * @arg ADC_SAMPLETIME_41CYCLES5: ADC 41.5 clock cycles - * @arg ADC_SAMPLETIME_55CYCLES5: ADC 55.5 clock cycles - * @arg ADC_SAMPLETIME_71CYCLES5: ADC 71.5 clock cycles - * @arg ADC_SAMPLETIME_239CYCLES5: ADC 239.5 clock cycles - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ConfigInjectedChannel(ADC_T* adc, uint8_t channel, uint8_t rank, uint8_t sampleTime) -{ - uint32_t temp1 = 0; - uint32_t temp2 = 0; - uint32_t temp3 = 0; - if (channel > ADC_CHANNEL_9) - { - temp1 = adc->SMPTIM1; - temp2 = SMPCYCCFG_SET_SMPTIM1 << (3*(channel - 10)); - temp1 &= ~temp2; - temp2 = (uint32_t)sampleTime << (3*(channel - 10)); - temp1 |= temp2; - adc->SMPTIM1 = temp1; - } - else - { - temp1 = adc->SMPTIM2; - temp2 = SMPCYCCFG_SET_SMPTIM2 << (3 * channel); - temp1 &= ~temp2; - temp2 = (uint32_t)sampleTime << (3 * channel); - temp1 |= temp2; - adc->SMPTIM2 = temp1; - } - temp1 = adc->INJSEQ; - temp3 = (temp1 & INJSEQ_SET_INJSEQLEN)>> 20; - temp2 = INJSEQ_SET_INJSEQC << (5 * (uint8_t)((rank + 3) - (temp3 + 1))); - temp1 &= ~temp2; - temp2 = (uint32_t)channel << (5 * (uint8_t)((rank + 3) - (temp3 + 1))); - temp1 |= temp2; - adc->INJSEQ = temp1; -} - -/*! - * @brief Configures the specified ADC injected channel. - * - * @param adc: Select the ADC peripheral. - * - * @param length: The sequencer length. - * This parameter must be a number between 1 to 4. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ConfigInjectedSequencerLength(ADC_T* adc, uint8_t length) -{ - adc->INJSEQ_B.INJSEQLEN = RESET; - adc->INJSEQ_B.INJSEQLEN |= length - 1; -} - -/*! - * @brief Configures the specified ADC injected channel conversion value offset. - * - * @param adc: Select the ADC peripheral. - * - * @param channel: Select the ADC injected channel. - * This parameter can be one of the following values: - * @arg ADC_INJEC_CHANNEL_1: select Injected Channel 1 - * @arg ADC_INJEC_CHANNEL_2: select Injected Channel 2 - * @arg ADC_INJEC_CHANNEL_3: select Injected Channel 3 - * @arg ADC_INJEC_CHANNEL_4: select Injected Channel 4 - * - * @param offSet: The specified ADC injected channel offset. - * This parameter must be a 12bit value. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ConfigInjectedOffset(ADC_T* adc, ADC_INJEC_CHANNEL_T channel, uint16_t offSet) -{ - __IOM uint32_t tmp = 0; - - tmp = (uint32_t)adc; - tmp += channel; - - *(__IOM uint32_t *) tmp = (uint32_t)offSet; -} - -/*! - * @brief Reads the ADC injected channel conversion value. - * - * @param adc: Select the ADC peripheral. - * - * @param channel: Select the ADC injected channel. - * This parameter can be one of the following values: - * @arg ADC_INJEC_CHANNEL_1: select Injected Channel 1 - * @arg ADC_INJEC_CHANNEL_2: select Injected Channel 2 - * @arg ADC_INJEC_CHANNEL_3: select Injected Channel 3 - * @arg ADC_INJEC_CHANNEL_4: select Injected Channel 4 - * - * @retval The Data of conversion value. - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -uint16_t ADC_ReadInjectedConversionValue(ADC_T* adc, ADC_INJEC_CHANNEL_T channel) -{ - __IOM uint32_t temp = 0; - - temp = (uint32_t)adc; - temp += channel + INJDATA_OFFSET; - - return (uint16_t) (*(__IOM uint32_t*) temp); -} - -/*! - * @brief Enable the specified ADC analog watchdog. - * - * @param adc: Select the ADC peripheral. - * - * @param analogWatchdog: The ADC analog watchdog configuration - * This parameter can be one of the following values: - * @arg ADC_ANALOG_WATCHDOG_SINGLE_REG : Analog watchdog on a single regular channel - * @arg ADC_ANALOG_WATCHDOG_SINGLE_INJEC : Analog watchdog on a single injected channel - * @arg ADC_ANALOG_WATCHDOG_SINGLE_REG_INJEC : Analog watchdog on a single regular or injected channel - * @arg ADC_ANALOG_WATCHDOG_ALL_REG : Analog watchdog on all regular channel - * @arg ADC_ANALOG_WATCHDOG_ALL_INJEC : Analog watchdog on all injected channel - * @arg ADC_ANALOG_WATCHDOG_ALL_REG_ALL_INJEC : Analog watchdog on all regular and injected channels - * @arg ADC_ANALOG_WATCHDOG_NONE : No channel guarded by the analog watchdog - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableAnalogWatchdog(ADC_T* adc, uint32_t analogWatchdog) -{ - adc->CTRL1 &= 0xFF3FFDFF; - adc->CTRL1 |= analogWatchdog; -} - -/*! - * @brief Disable the specified ADC analog watchdog. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableAnalogWatchdog(ADC_T* adc) -{ - adc->CTRL1 &= 0xFF3FFDFF; -} - -/*! - * @brief Configures the specified ADC high and low thresholds of the analog watchdog. - * - * @param adc: Select the ADC peripheral. - * - * @param highThreshold: The ADC analog watchdog High threshold value. - * This parameter must be a 12bit value. - * - * @param lowThreshold: The ADC analog watchdog Low threshold value. - * This parameter must be a 12bit value. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ConfigAnalogWatchdogThresholds(ADC_T* adc, uint16_t highThreshold, uint16_t lowThreshold) -{ - adc->AWDHT = highThreshold; - adc->AWDLT = lowThreshold; -} - -/*! - * @brief Configures the specified ADC analog watchdog guarded single channel - * - * @param adc: Select the ADC peripheral - * - * @param channel: Select the ADC channel - * This parameter can be one of the following values: - * @arg ADC_Channel_0: Select ADC Channel 0 - * @arg ADC_Channel_1: Select ADC Channel 1 - * @arg ADC_Channel_2: Select ADC Channel 2 - * @arg ADC_Channel_3: Select ADC Channel 3 - * @arg ADC_Channel_4: Select ADC Channel 4 - * @arg ADC_Channel_5: Select ADC Channel 5 - * @arg ADC_Channel_6: Select ADC Channel 6 - * @arg ADC_Channel_7: Select ADC Channel 7 - * @arg ADC_Channel_8: Select ADC Channel 8 - * @arg ADC_Channel_9: Select ADC Channel 9 - * @arg ADC_Channel_10: Select ADC Channel 10 - * @arg ADC_Channel_11: Select ADC Channel 11 - * @arg ADC_Channel_12: Select ADC Channel 12 - * @arg ADC_Channel_13: Select ADC Channel 13 - * @arg ADC_Channel_14: Select ADC Channel 14 - * @arg ADC_Channel_15: Select ADC Channel 15 - * @arg ADC_Channel_16: Select ADC Channel 16 which is connected to TempSensor - * @arg ADC_Channel_17: Select ADC Channel 17 which is connected to Vrefint - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ConfigAnalogWatchdogSingleChannel(ADC_T* adc, uint8_t channel) -{ - adc->CTRL1_B.AWDCHSEL = BIT_RESET; - adc->CTRL1 |= channel; -} - -/*! - * @brief Enable the specified ADC temperature sensor and Vrefint channel. - * - * @param adc: Select the ADC peripheral. - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableTempSensorVrefint(ADC_T* adc) -{ - adc->CTRL2_B.TSVREFEN = BIT_SET; -} - -/*! - * @brief Disable the specified ADC temperature sensor and Vrefint channel. - * - * @param adc: Select the ADC peripheral - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableTempSensorVrefint(ADC_T* adc) -{ - adc->CTRL2_B.TSVREFEN = BIT_RESET; -} - -/*! - * @brief Enable the specified ADC interrupt. - * - * @param adc: Select the ADC peripheral. - * - * @param interrupt: Select the ADC interrupt sources - * This parameter can be any combination of the following values: - * @arg ADC_INT_AWD : Enable Analog watchdog interrupt - * @arg ADC_INT_EOC : Enable End of conversion interrupt - * @arg ADC_INT_INJEOC : Enable End of injected conversion interrupt - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_EnableInterrupt(ADC_T* adc, uint16_t interrupt) -{ - uint8_t mask; - - mask = (uint8_t)interrupt; - adc->CTRL1 |= (uint8_t)mask; -} - -/*! - * @brief Disable the specified ADC interrupt. - * - * @param adc: Select the ADC peripheral. - * - * @param interrupt: Select the ADC interrupt sources - * This parameter can be any combination of the following values: - * @arg ADC_INT_AWD : Disable Analog watchdog interrupt - * @arg ADC_INT_EOC : Disable End of conversion interrupt - * @arg ADC_INT_INJEOC : Disable End of injected conversion interrupt - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_DisableInterrupt(ADC_T* adc, uint16_t interrupt) -{ - uint8_t mask; - - mask = (uint8_t)interrupt; - adc->CTRL1 &= (~(uint32_t)mask); -} - -/*! - * @brief Reads the specified ADC flag - * - * @param adc: Select the ADC peripheral - * - * @param flag: Select the flag to check - * This parameter can be one of the following values: - * @arg ADC_FLAG_AWD : Analog watchdog flag - * @arg ADC_FLAG_EOC : End of conversion flag - * @arg ADC_FLAG_INJEOC: End of injected group conversion flag - * @arg ADC_FLAG_INJCS : Injected group conversion Start flag - * @arg ADC_FLAG_REGCS : Regular group conversion Start flag - * - * @retval The status of ADC flag - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -uint8_t ADC_ReadStatusFlag(ADC_T* adc, ADC_FLAG_T flag) -{ - return (adc->STS & flag) ? SET : RESET; -} - -/*! - * @brief Clears the specified ADC flag - * - * @param adc: Select the ADC peripheral - * - * @param flag: Select the flag to clear - * This parameter can be any combination of the following values: - * @arg ADC_FLAG_AWD : Analog watchdog flag - * @arg ADC_FLAG_EOC : End of conversion flag - * @arg ADC_FLAG_INJEOC: End of injected group conversion flag - * @arg ADC_FLAG_INJCS : Injected group conversion Start flag - * @arg ADC_FLAG_REGCS : Regular group conversion Start flag - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ClearStatusFlag(ADC_T* adc, uint8_t flag) -{ - adc->STS = ~(uint32_t)flag; -} - -/*! - * @brief Reads the specified ADC Interrupt flag. - * - * @param adc: Select the ADC peripheral. - * - * @param interrupt: Select the ADC interrupt source. - * This parameter can be one of the following values: - * @arg ADC_INT_AWD : Enable Analog watchdog interrupt - * @arg ADC_INT_EOC : Enable End of conversion interrupt - * @arg ADC_INT_INJEOC : Enable End of injected conversion interrupt - * - * @retval The status of ADC interrupt - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -uint8_t ADC_ReadIntFlag(ADC_T* adc, ADC_INT_T flag) -{ - uint8_t bitStatus = RESET; - uint32_t itmask = 0; - uint32_t enableStatus = 0; - - itmask = flag >> 8; - enableStatus = (adc->CTRL1 & (uint8_t)flag); - - if (((adc->STS & itmask) != (uint32_t)RESET) && enableStatus) - { - bitStatus = SET; - } - else - { - bitStatus = RESET; - } - return bitStatus; -} - -/*! - * @brief Clears the specified ADC Interrupt pending bits. - * - * @param adc: Select the ADC peripheral. - * - * @param interrupt: Select the ADC interrupt source. - * This parameter can be any combination of the following values: - * @arg ADC_INT_AWD : Enable Analog watchdog interrupt - * @arg ADC_INT_EOC : Enable End of conversion interrupt - * @arg ADC_INT_INJEOC : Enable End of injected conversion interrupt - * - * @retval None - * - * @note adc can be ADC1, ADC2 or ADC3. - */ -void ADC_ClearIntFlag(ADC_T* adc, uint16_t flag) -{ - uint8_t mask = 0; - - mask = (uint8_t)(flag >> 8); - adc->STS = ~(uint32_t)mask; -} - -/**@} end of group ADC_Fuctions*/ -/**@} end of group ADC_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_bakpr.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_bakpr.c deleted file mode 100644 index 823ceb3..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_bakpr.c +++ /dev/null @@ -1,248 +0,0 @@ -/*! - * @file apm32f10x_bakpr.c - * - * @brief This file provides all the BAKPR firmware functions. - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_bakpr.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup BAKPR_Driver ADC Driver - @{ -*/ - -/** @addtogroup BAKPR_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset the BAKPR peripheral registers to their default reset values. - * - * @param None - * - * @retval None - */ -void BAKPR_Reset(void) -{ - RCM_EnableBackupReset(); - RCM_DisableBackupReset(); -} - -/*! - * @brief Deinitializes the BAKPR peripheral registers to their default reset values. - * - * @param value: specifies the RTC output source. - * This parameter can be one of the following values: - * @arg BAKPR_TAMPER_PIN_LEVEL_HIGH: Tamper pin active on high level - * @arg BAKPR_TAMPER_PIN_LEVEL_LOW: Tamper pin active on low level - * - * @retval None - */ -void BAKPR_ConfigTamperPinLevel(BAKPR_TAMPER_PIN_LEVEL_T value) -{ - BAKPR->CTRL_B.TPALCFG = value; -} - -/*! - * @brief Enables the Tamper Pin activation. - * - * @param None - * - * @retval None - */ -void BAKPR_EnableTamperPin(void) -{ - BAKPR->CTRL_B.TPFCFG = ENABLE ; -} - -/*! - * @brief Disables the Tamper Pin activation. - * - * @param None - * - * @retval None - */ -void BAKPR_DisableTamperPin(void) -{ - BAKPR->CTRL_B.TPFCFG = DISABLE ; -} - -/*! - * @brief Enables the Tamper Pin Interrupt. - * - * @param None - * - * @retval None - */ -void BAKPR_EnableInterrupt(void) -{ - BAKPR->CSTS_B.TPIEN = ENABLE ; -} - -/*! - * @brief Disables the Tamper Pin Interrupt. - * - * @param None - * - * @retval None - */ -void BAKPR_DisableInterrupt(void) -{ - BAKPR->CSTS_B.TPIEN = DISABLE ; -} - -/*! - * @brief Select the RTC output source to output on the Tamper pin. - * - * @param soure: specifies the RTC output source. - * This parameter can be one of the following values: - * @arg BAKPR_RTC_OUTPUT_SOURCE_NONE : no RTC output on the Tamper pin. - * @arg BAKPR_RTC_OUTPUT_SOURCE_CALIBRATION_CLOCK: output the RTC clock with frequency divided by 64 on the Tamper pin. - * @arg BAKPR_RTC_OUTPUT_SOURCE_ALARM : output the RTC Alarm pulse signal on the Tamper pin. - * @arg BAKPR_RTC_OUTPUT_SOURCE_SECOND : output the RTC Second pulse signal on the Tamper pin. - * - * @retval None - */ -void BAKPR_ConfigRTCOutput(BAKPR_RTC_OUTPUT_SOURCE_T soure) -{ - if(soure == BAKPR_RTC_OUTPUT_SOURCE_NONE) - { - BAKPR->CLKCAL = RESET; - } else if(soure == BAKPR_RTC_OUTPUT_SOURCE_CALIBRATION_CLOCK) - { - BAKPR->CLKCAL_B.CALCOEN = BIT_SET; - } else if(soure == BAKPR_RTC_OUTPUT_SOURCE_ALARM) - { - BAKPR->CLKCAL_B.ASPOEN = BIT_SET; - } else if(soure == BAKPR_RTC_OUTPUT_SOURCE_SECOND) - { - BAKPR->CLKCAL_B.ASPOSEL = BIT_SET; - } -} - -/*! - * @brief Sets RTC Clock Calibration value. - * - * @param calibrationValue: Specifies the calibration value. - * This parameter must be a number between 0 and 0x7F. - * - * @retval None - */ -void BAKPR_ConfigRTCCalibrationValue(uint8_t calibrationValue) -{ - BAKPR->CLKCAL_B.CALVALUE = calibrationValue; -} - -/*! - * @brief Set user data to the specified Data Backup Register. - * - * @param bakrData : specifies the Data Backup Register. - * This parameter can be BAKPR_DATAx where x is between 1 and 42. - * - * @param data : data to set - * This parameter can be a 16bit value. - * - * @retval None - */ -void BAKPR_ConfigBackupRegister(BAKPR_DATA_T bakrData, uint16_t data) -{ - __IOM uint32_t tmp = 0; - - tmp = (uint32_t)BAKPR_BASE; - tmp += bakrData; - - *(__IOM uint32_t *) tmp = data; -} - -/*! - * @brief Reads user data from the specified Data Backup Register. - * - * @param bakrData : specifies the Data Backup Register. - * This parameter can be BAKPR_DATAx where x is between 1 and 42. - * - * @retval The content of the specified Data Backup Register - */ -uint16_t BAKPR_ReadBackupRegister(BAKPR_DATA_T bakrData) -{ - __IOM uint32_t tmp = 0; - - tmp = (uint32_t)BAKPR_BASE; - tmp += bakrData; - - return (*(__IOM uint32_t *) tmp); -} - -/*! - * @brief Read whether the Tamper Pin Event flag is set or not. - * - * @param None - * - * @retval Tamper Pin Event flag state - */ -uint8_t BAKPR_ReadStatusFlag(void) -{ - return BAKPR->CSTS_B.TEFLG; -} - -/*! - * @brief Clears Tamper Pin Event pending flag. - * - * @param None - * - * @retval None - */ -void BAKPR_ClearStatusFlag(void) -{ - BAKPR->CSTS_B.TECLR = BIT_SET; -} - -/*! - * @brief Get whether the Tamper Pin Interrupt has occurred or not. - * - * @param None - * - * @retval Tamper Pin Interrupt State - */ -uint8_t BAKPR_ReadIntFlag(void) -{ - return BAKPR->CSTS_B.TIFLG; -} - -/*! - * @brief Clears Tamper Pin Interrupt pending bit. - * - * @param None - * - * @retval None - */ -void BAKPR_ClearIntFlag(void) -{ - BAKPR->CSTS_B.TICLR = BIT_SET; -} - -/**@} end of group BAKPR_Fuctions*/ -/**@} end of group BAKPR_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_can.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_can.c deleted file mode 100644 index 5f727eb..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_can.c +++ /dev/null @@ -1,1094 +0,0 @@ -/*! - * @file apm32f10x_can.c - * - * @brief This file provides all the CAN firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_can.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup CAN_Driver CAN Driver - @{ -*/ - -/** @addtogroup CAN_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset CAN registers - * - * @param can: Select the CAN peripheral. - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_Reset(CAN_T* can) -{ - if (can == CAN1) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_CAN1); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_CAN1); - } - else if (can == CAN2) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_CAN2); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_CAN2); - } -} - -/*! - * @brief Initialization parameter configuration - * - * @param can: Select the CAN peripheral which can be CAN1 or CAN2. - * - * @param canConfig: Point to a CAN_Config_T structure. - * - * @retval ERROR or SUCCEESS - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_Config(CAN_T* can, CAN_Config_T* canConfig) -{ - uint8_t initStatus = ERROR; - uint32_t wait_ack = 0x00000000; - - /** Exit from sleep mode */ - can->MCTRL_B.SLEEPREQ = BIT_RESET; - /** Request initialisation */ - can->MCTRL_B.INITREQ = BIT_SET; - - /** Wait the acknowledge */ - while(((can->MSTS_B.INITFLG) != BIT_SET) && (wait_ack != 0x0000FFFF)) - { - wait_ack++; - } - /** Check acknowledge */ - if(((can->MSTS_B.INITFLG) != BIT_SET)) - { - initStatus = ERROR; - } - else - { - if(canConfig->autoBusOffManage == ENABLE) - { - can->MCTRL_B.ALBOFFM = BIT_SET; - } - else - { - can->MCTRL_B.ALBOFFM = BIT_RESET; - } - - if(canConfig->autoWakeUpMode == ENABLE) - { - can->MCTRL_B.AWUPCFG = BIT_SET; - } - else - { - can->MCTRL_B.AWUPCFG = BIT_RESET; - } - - if(canConfig->nonAutoRetran == ENABLE) - { - can->MCTRL_B.ARTXMD = BIT_SET; - } - else - { - can->MCTRL_B.ARTXMD = BIT_RESET; - } - - if(canConfig->rxFIFOLockMode == ENABLE) - { - can->MCTRL_B.RXFLOCK = BIT_SET; - } - else - { - can->MCTRL_B.RXFLOCK = BIT_RESET; - } - - if(canConfig->txFIFOPriority == ENABLE) - { - can->MCTRL_B.TXFPCFG = BIT_SET; - } - else - { - can->MCTRL_B.TXFPCFG = BIT_RESET; - } - - /** Set the bit timing register */ - can->BITTIM &= (uint32_t)0x3fffffff; - can->BITTIM |= (uint32_t)canConfig->mode << 30; - can->BITTIM_B.RSYNJW = canConfig->syncJumpWidth; - can->BITTIM_B.TIMSEG1 = canConfig->timeSegment1; - can->BITTIM_B.TIMSEG2 = canConfig->timeSegment2; - can->BITTIM_B.BRPSC = canConfig->prescaler - 1; - - /** Request leave initialisation */ - can->MCTRL_B.INITREQ = BIT_RESET; - - wait_ack = 0; - /** Wait the acknowledge */ - while(((can->MSTS_B.INITFLG) != BIT_RESET) && (wait_ack != 0x0000FFFF)) - { - wait_ack++; - } - /** Check acknowledge */ - if(((can->MSTS_B.INITFLG) != BIT_RESET)) - { - initStatus = ERROR; - } - else - { - initStatus = SUCCESS; - } - } - return initStatus; -} - -/*! - * @brief Congig the CAN peripheral according to the specified parameters in the filterConfig. - * - * @param can: Select the CAN peripheral which can be CAN1 or CAN2. - * - * @param filterConfig :Point to a CAN_FilterConfig_T structure. - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_ConfigFilter(CAN_T* can, CAN_FilterConfig_T* filterConfig) -{ - can->FCTRL_B.FINITEN = BIT_SET; - - can->FACT &= ~(1 << filterConfig->filterNumber); - - /** Filter Scale */ - if(filterConfig->filterScale == CAN_FILTER_SCALE_16BIT) - { - /** 16-bit scale for the filter */ - can->FSCFG &= ~(1 << filterConfig->filterNumber); - - can->sFilterRegister[filterConfig->filterNumber].FBANK1 = - ((0x0000FFFF & filterConfig->filterMaskIdLow) << 16) | - (0x0000FFFF & filterConfig->filterIdLow); - - can->sFilterRegister[filterConfig->filterNumber].FBANK2 = - ((0x0000FFFF & filterConfig->filterMaskIdHigh) << 16) | - (0x0000FFFF & filterConfig->filterIdHigh); - } - - if(filterConfig->filterScale == CAN_FILTER_SCALE_32BIT) - { - can->FSCFG |= (1 << filterConfig->filterNumber); - - can->sFilterRegister[filterConfig->filterNumber].FBANK1 = - ((0x0000FFFF & filterConfig->filterIdHigh) << 16) | - (0x0000FFFF & filterConfig->filterIdLow); - - can->sFilterRegister[filterConfig->filterNumber].FBANK2 = - ((0x0000FFFF & filterConfig->filterMaskIdHigh) << 16) | - (0x0000FFFF & filterConfig->filterMaskIdLow); - } - - /** Filter Mode */ - if(filterConfig->filterMode == CAN_FILTER_MODE_IDMASK) - { - can->FMCFG &= ~(1 << filterConfig->filterNumber); - } - else - { - can->FMCFG |= (1 << filterConfig->filterNumber); - } - - /** Filter FIFO assignment */ - if(filterConfig->filterFIFO == CAN_FILTER_FIFO_0) - { - can->FFASS &= ~(1 << filterConfig->filterNumber); - } - if(filterConfig->filterFIFO == CAN_FILTER_FIFO_1) - { - can->FFASS |= (1 << filterConfig->filterNumber); - } - - /** Filter activation */ - if(filterConfig->filterActivation == ENABLE) - { - can->FACT |= (1 << filterConfig->filterNumber); - } - can->FCTRL_B.FINITEN = BIT_RESET; -} - -/*! - * @brief Initialize a CAN_Config_T structure with the initial value. - * - * @param canConfig :Point to a CAN_Config_T structure. - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_ConfigStructInit(CAN_Config_T* canConfig) -{ - canConfig->autoBusOffManage = DISABLE; - canConfig->autoWakeUpMode = DISABLE; - canConfig->nonAutoRetran = DISABLE; - canConfig->rxFIFOLockMode = DISABLE; - canConfig->txFIFOPriority = DISABLE; - canConfig->mode = CAN_MODE_NORMAL; - canConfig->syncJumpWidth = CAN_SJW_1; - canConfig->timeSegment1 = CAN_TIME_SEGMENT1_4; - canConfig->timeSegment2 = CAN_TIME_SEGMENT2_3; - canConfig->prescaler = 1; -} - -/*! - * @brief Enables the DBG Freeze for CAN. - * - * @param can: Select the CAN peripheral. - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_EnableDBGFreeze(CAN_T* can) -{ - can->MCTRL_B.DBGFRZE = ENABLE; -} - -/*! - * @brief Disable the DBG Freeze for CAN. - * - * @param can: Select the CAN peripheral. - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_DisableDBGFreeze(CAN_T* can) -{ - can->MCTRL_B.DBGFRZE = DISABLE; -} - -/*! - * @brief Select the start bank filter for slave CAN. - * - * @param bankNum: the start slave bank filter from 1..27. - * - * @retval None - */ -void CAN_SlaveStartBank(CAN_T* can, uint8_t bankNum) -{ - can->FCTRL_B.FINITEN = SET; - can->FCTRL_B.CAN2BN = bankNum; - can->FCTRL_B.FINITEN = RESET; -} - -/*! - * @brief Initiates the transmission of a message. - * - * @param can: Select the CAN peripheral. - * - * @param TxMessage: pointer to a CAN_TxMessage_T structure. - * - * @retval The number of the mailbox which is used for transmission or 3 if No mailbox is empty. - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_TxMessage(CAN_T* can, CAN_TxMessage_T* TxMessage) -{ - uint8_t transmit_milbox = 0; - - /** Select one empty transmit mailbox */ - if((can->TXSTS & 0x04000000) == 0x04000000) - { - transmit_milbox = 0; - } - else if((can->TXSTS & 0x08000000) == 0x08000000) - { - transmit_milbox = 1; - } - else if((can->TXSTS & 0x10000000) == 0x10000000) - { - transmit_milbox = 2; - } else - { - return 3; //!< No mailbox is empty - } - - /** Set up the Id */ - can->sTxMailBox[transmit_milbox].TXMID &= 0x00000001; - if(TxMessage->typeID == CAN_TYPEID_STD) - { - can->sTxMailBox[transmit_milbox].TXMID |= (TxMessage->stdID << 21) | (TxMessage->remoteTxReq); - } else - { - can->sTxMailBox[transmit_milbox].TXMID |= (TxMessage->extID << 3) | (TxMessage->typeID) | (TxMessage->remoteTxReq); - } - - /** Set up the TXDLEN */ - TxMessage->dataLengthCode &= 0x0F; - can->sTxMailBox[transmit_milbox].TXDLEN &= (uint32_t)0xFFFFFFF0; - can->sTxMailBox[transmit_milbox].TXDLEN |= TxMessage->dataLengthCode; - - /** Set up the data field */ - can->sTxMailBox[transmit_milbox].TXMDL = ((uint32_t)TxMessage->data[3] << 24) | ((uint32_t)TxMessage->data[2] << 16) - | ((uint32_t)TxMessage->data[1] << 8) | ((uint32_t)TxMessage->data[0]); - can->sTxMailBox[transmit_milbox].TXMDH = ((uint32_t)TxMessage->data[7] << 24) | ((uint32_t)TxMessage->data[6] << 16) - | ((uint32_t)TxMessage->data[5] << 8) | ((uint32_t)TxMessage->data[4]); - /** Request transmission */ - can->sTxMailBox[transmit_milbox].TXMID |= 0x00000001; - - return transmit_milbox; -} - -/*! - * @brief Checks the transmission of a message. - * - * @param can: Select the CAN peripheral. - * - * @param transmitMailbox: the number of the mailbox - * - * @retval state: 0: Status of transmission is Failed - * 1: Status of transmission is Ok - * 2: transmit pending - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_TxMessageStatus(CAN_T* can, CAN_TX_MAILBIX_T TxMailbox) -{ - uint32_t state = 0; - - switch (TxMailbox) - { - case (CAN_TX_MAILBIX_0): - state = can->TXSTS & (0x00000001 | 0x00000002 | 0x04000000); - break; - case (CAN_TX_MAILBIX_1): - state = can->TXSTS & (0x00000100 | 0x00000200 | 0x08000000); - break; - case (CAN_TX_MAILBIX_2): - state = can->TXSTS & (0x00010000 | 0x00020000 | 0x10000000); - break; - default: - state = 0; - break; - } - switch (state) - { - /** Transmit pending */ - case (0x0): state = 2; - break; - /** Transmit failed */ - case (0x00000001 | 0x04000000): state = 0; - break; - case (0x00000100 | 0x08000000): state = 0; - break; - case (0x00010000 | 0x10000000): state = 0; - break; - /** Transmit succeeded */ - case (0x00000001 | 0x00000002 | 0x04000000):state = 1; - break; - case (0x00000100 | 0x00000200 | 0x08000000):state = 1; - break; - case (0x00010000 | 0x00020000 | 0x10000000):state = 1; - break; - default: state = 0; - break; - } - return (uint8_t) state; -} - -/*! - * @brief Cancels a transmit request. - * - * @param can: Select the CAN peripheral. - * - * @param mailBox: the number of the mailbox - * This parameter can be one of the following values: - * @arg CAN_TX_MAILBIX_0 : Tx mailbox 0 - * @arg CAN_TX_MAILBIX_1 : Tx mailbox 1 - * @arg CAN_TX_MAILBIX_2 : Tx mailbox 2 - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_CancelTxMailbox(CAN_T* can, CAN_TX_MAILBIX_T TxMailbox) -{ - switch (TxMailbox) - { - case CAN_TX_MAILBIX_0: - can->TXSTS_B.ABREQFLG0 = BIT_SET; - break; - case CAN_TX_MAILBIX_1: - can->TXSTS_B.ABREQFLG1 = BIT_SET; - break; - case CAN_TX_MAILBIX_2: - can->TXSTS_B.ABREQFLG2 = BIT_SET; - break; - default: - break; - } -} - -/*! - * @brief Receives a message and save to a CAN_RxMessage_T structure. - * - * @param can: Select the CAN peripheral. - * - * @param FIFONumber: Receive FIFO number. - * This parameter can be one of the following values: - * @arg CAN_RX_FIFO_0 : Receive FIFO 0 - * @arg CAN_RX_FIFO_1 : Receive FIFO 1 - * - * @param RxMessage: pointer to a structure to receive the message. - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_RxMessage(CAN_T* can, CAN_RX_FIFO_T FIFONumber, CAN_RxMessage_T* RxMessage) -{ - /** Get the Id */ - RxMessage->typeID = ((uint8_t)0x04 & (can->sRxMailBox[FIFONumber].RXMID)); - if(RxMessage->typeID == CAN_TYPEID_STD) - { - RxMessage->stdID = (can->sRxMailBox[FIFONumber].RXMID >> 21) & 0x000007FF; - } - else - { - RxMessage->extID = (can->sRxMailBox[FIFONumber].RXMID >> 3) & 0x1FFFFFFF; - } - - RxMessage->remoteTxReq = can->sRxMailBox[FIFONumber].RXMID_B.RFTXREQ; - RxMessage->dataLengthCode = can->sRxMailBox[FIFONumber].RXDLEN_B.DLCODE; - RxMessage->filterMatchIndex = can->sRxMailBox[FIFONumber].RXDLEN_B.FMIDX; - /** Get the data field */ - RxMessage->data[0] = can->sRxMailBox[FIFONumber].RXMDL_B.DATABYTE0; - RxMessage->data[1] = can->sRxMailBox[FIFONumber].RXMDL_B.DATABYTE1; - RxMessage->data[2] = can->sRxMailBox[FIFONumber].RXMDL_B.DATABYTE2; - RxMessage->data[3] = can->sRxMailBox[FIFONumber].RXMDL_B.DATABYTE3; - RxMessage->data[4] = can->sRxMailBox[FIFONumber].RXMDH_B.DATABYTE4; - RxMessage->data[5] = can->sRxMailBox[FIFONumber].RXMDH_B.DATABYTE5; - RxMessage->data[6] = can->sRxMailBox[FIFONumber].RXMDH_B.DATABYTE6; - RxMessage->data[7] = can->sRxMailBox[FIFONumber].RXMDH_B.DATABYTE7; - - if(FIFONumber == CAN_RX_FIFO_0) - { - can->RXF0_B.RFOM0 = BIT_SET; - } - else - { - can->RXF1_B.RFOM1 = BIT_SET; - } -} - -/*! - * @brief Releases the specified FIFO. - * - * @param can: Select the CAN peripheral. - * - * @param FIFONumber: Receive FIFO number - * This parameter can be one of the following values: - * @arg CAN_RX_FIFO_0 : Receive FIFO 0 - * @arg CAN_RX_FIFO_1 : Receive FIFO 1 - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_ReleaseFIFO(CAN_T* can, CAN_RX_FIFO_T FIFONumber) -{ - if(FIFONumber == CAN_RX_FIFO_0) - { - can->RXF0_B.RFOM0 = BIT_SET; - } - else - { - can->RXF1_B.RFOM1 = BIT_SET; - } -} - -/*! - * @brief Returns the number of pending messages. - * - * @param can: Select the CAN peripheral. - * - * @param FIFONumber: Receive FIFO number - * This parameter can be one of the following values: - * @arg CAN_RX_FIFO_0 : Receive FIFO 0 - * @arg CAN_RX_FIFO_1 : Receive FIFO 1 - * - * @retval The number of pending message. - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_PendingMessage(CAN_T* can, CAN_RX_FIFO_T FIFONumber) -{ - if(FIFONumber == CAN_RX_FIFO_0) - { - return can->RXF0 & 0x03; - } - else - { - return can->RXF1 & 0x03; - } -} - -/*! - * @brief Select the CAN Operation mode - * - * @param can: Select the CAN peripheral. - * - * @param operatingMode: CAN Operating Mode - * This parameter can be one of the following values: - * @arg CAN_OPERATING_MODE_INIT : Initialization mode - * @arg CAN_OPERATING_MODE_NORMAL: Normal mode - * @arg CAN_OPERATING_MODE_SLEEP : sleep mode - * - * @retval modeState:status of the requested mode - * 0:CAN failed entering the specific mode - * 1:CAN Succeed entering the specific mode - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_OperatingMode(CAN_T* can, CAN_OPERATING_MODE_T operatingMode) -{ - uint8_t states = 0; - uint32_t time_out = 0x0000FFFF; - - if(operatingMode == CAN_OPERATING_MODE_INIT) - { - can->MCTRL_B.SLEEPREQ = BIT_RESET; - can->MCTRL_B.INITREQ = BIT_SET; - - while((can->MSTS_B.INITFLG != BIT_SET && can->MSTS_B.SLEEPFLG != BIT_RESET) && (time_out != 0)) - { - time_out --; - } - if((can->MSTS_B.INITFLG == BIT_SET && can->MSTS_B.SLEEPFLG == BIT_RESET)) - { - states = 1; - } - } - else if(operatingMode == CAN_OPERATING_MODE_NORMAL) - { - can->MCTRL_B.SLEEPREQ = BIT_RESET; - can->MCTRL_B.INITREQ = BIT_RESET; - - time_out = 0x0000FFFF; - - while((can->MSTS_B.INITFLG != BIT_RESET || can->MSTS_B.SLEEPFLG != BIT_RESET) && (time_out != 0)) - { - time_out --; - } - if((can->MSTS_B.INITFLG == BIT_RESET || can->MSTS_B.SLEEPFLG == BIT_RESET)) - { - states = 1; - } - } - else if(operatingMode == CAN_OPERATING_MODE_SLEEP) - { - can->MCTRL_B.SLEEPREQ = BIT_SET; - can->MCTRL_B.INITREQ = BIT_RESET; - - time_out = 0x0000FFFF; - - while((can->MSTS_B.INITFLG != BIT_RESET && can->MSTS_B.SLEEPFLG != BIT_SET) && (time_out != 0)) - { - time_out --; - } - if((can->MSTS_B.INITFLG == BIT_RESET && can->MSTS_B.SLEEPFLG == BIT_SET)) - { - states = 1; - } - } - return states ; -} - -/*! - * @brief Into the low power mode. - * - * @param can: Select the CAN peripheral. - * - * @retval status: Status of entering sleep mode. - * 0: Enter sleep fail - * 1: Enter sleep success - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_SleepMode(CAN_T* can) -{ - can->MCTRL_B.SLEEPREQ = BIT_SET; - can->MCTRL_B.INITREQ = BIT_RESET; - - if((can->MSTS_B.INITFLG == BIT_RESET && can->MSTS_B.SLEEPFLG == BIT_SET)) - { - return 1; - } - return 0; -} - -/*! - * @brief Wakes the CAN up. - * - * @param can: Select the CAN peripheral. - * - * @retval status: Status of waking the CAN up - * 0: WakeUp CAN fail, - * 1: WakeUp CAN success - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_WakeUpMode(CAN_T* can) -{ - uint32_t time_out = 0x0000FFFF; - - can->MCTRL_B.SLEEPREQ = BIT_RESET; - while((can->MSTS_B.SLEEPFLG != BIT_RESET) && (time_out != 0)) - { - time_out --; - } - if(can->MSTS_B.SLEEPFLG == BIT_RESET) - { - return 1; - } - return 0; -} - -/*! - * @brief Read the can's last error code (LERRC) - * - * @param can: Select the CAN peripheral. - * - * @retval The Last Error Code. - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_ReadLastErrorCode(CAN_T* can) -{ - return can->ERRSTS_B.LERRC; -} - -/*! - * @brief Read the can Receive Error Counter(RXERRCNT) - * - * @param can: Select the CAN peripheral. - * - * @retval CAN Receive Error Counter. - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_ReadRxErrorCounter(CAN_T* can) -{ - return can->ERRSTS_B.RXERRCNT; -} - -/*! - * @brief Read the LSB of the 9-bit can Transmit Error Counter(TXERRCNT). - * - * @param can: Select the CAN peripheral. - * - * @retval Least Significant Byte Of The 9-Bit Transmit Error Counter. - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_ReadLSBTxErrorCounter(CAN_T* can) -{ - return can->ERRSTS_B.TXERRCNT; -} - -/*! - * @brief Enables the specified can interrupts. - * - * @param can: Select the CAN peripheral. - * - * @param interrupts: specifies the CAN interrupt sources - * This parameter can be any combination of the following values: - * @arg CAN_INT_TXME : Transmit mailbox empty Interrupt - * @arg CAN_INT_F0MP : FIFO 0 message pending Interrupt - * @arg CAN_INT_F0FULL : FIFO 0 full Interrupt - * @arg CAN_INT_F0OVR : FIFO 0 overrun Interrupt - * @arg CAN_INT_F1MP : FIFO 1 message pending Interrupt - * @arg CAN_INT_F1FULL : FIFO 1 full Interrupt - * @arg CAN_INT_F1OVR : FIFO 1 overrun Interrupt - * @arg CAN_INT_ERRW : Error warning Interrupt - * @arg CAN_INT_ERRP : Error passive Interrupt - * @arg CAN_INT_BOF : Bus-off Interrupt - * @arg CAN_INT_LEC : Last error record code Interrupt - * @arg CAN_INT_ERR : Error Interrupt - * @arg CAN_INT_WUP : Wake-up Interrupt - * @arg CAN_INT_SLEEP : Sleep acknowledge Interrupt - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_EnableInterrupt(CAN_T* can, uint32_t interrupts) -{ - can->INTEN |= interrupts; -} - -/*! - * @brief Disable the specified can interrupts. - * - * @param can: Select the CAN peripheral. - * - * @param interrupts: specifies the CAN interrupt sources - * This parameter can be any combination of the following values: - * @arg CAN_INT_TXME : Transmit mailbox empty Interrupt - * @arg CAN_INT_F0MP : FIFO 0 message pending Interrupt - * @arg CAN_INT_F0FULL : FIFO 0 full Interrupt - * @arg CAN_INT_F0OVR : FIFO 0 overrun Interrupt - * @arg CAN_INT_F1MP : FIFO 1 message pending Interrupt - * @arg CAN_INT_F1FULL : FIFO 1 full Interrupt - * @arg CAN_INT_F1OVR : FIFO 1 overrun Interrupt - * @arg CAN_INT_ERRW : Error warning Interrupt - * @arg CAN_INT_ERRP : Error passive Interrupt - * @arg CAN_INT_BOF : Bus-off Interrupt - * @arg CAN_INT_LEC : Last error record code Interrupt - * @arg CAN_INT_ERR : Error Interrupt - * @arg CAN_INT_WUP : Wake-up Interrupt - * @arg CAN_INT_SLEEP : Sleep acknowledge Interrupt - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_DisableInterrupt(CAN_T* can, uint32_t interrupts) -{ - can->INTEN &= ~interrupts; -} - -/*! - * @brief Read whether the specified CAN flag is set or not. - * - * @param can: Select the CAN peripheral. - * - * @param flag: specifies the CAN flag. - * This parameter can be one of the following values: - * @arg CAN_FLAG_ERRW : Error Warning Flag - * @arg CAN_FLAG_ERRP : Error Passive Flag - * @arg CAN_FLAG_BOF : Bus-Off Flag - * @arg CAN_FLAG_LERRC : Last error record code Flag - * @arg CAN_FLAG_WUPI : Wake up Flag - * @arg CAN_FLAG_SLEEP : Sleep acknowledge Flag - * @arg CAN_FLAG_F0MP : FIFO 0 Message Pending Flag - * @arg CAN_FLAG_F0FULL : FIFO 0 Full Flag - * @arg CAN_FLAG_F0OVR : FIFO 0 Overrun Flag - * @arg CAN_FLAG_F1MP : FIFO 1 Message Pending Flag - * @arg CAN_FLAG_F1FULL : FIFO 1 Full Flag - * @arg CAN_FLAG_F1OVR : FIFO 1 Overrun Flag - * @arg CAN_FLAG_REQC0 : Request MailBox0 Flag - * @arg CAN_FLAG_REQC1 : Request MailBox1 Flag - * @arg CAN_FLAG_REQC2 : Request MailBox2 Flag - * - * @retval flag staus: RESET or SET - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_ReadStatusFlag(CAN_T* can, CAN_FLAG_T flag) -{ - uint8_t status = 0; - - if((flag & 0x00F00000) != RESET ) - { - if((can->ERRSTS & (flag & 0x000FFFFF)) != RESET) - { - status = SET; - } - else - { - status = RESET; - } - } - else if((flag & 0x01000000) != RESET ) - { - if((can->MSTS & (flag & 0x000FFFFF)) != RESET ) - { - status = SET; - } - else - { - status = RESET ; - } - } - else if((flag & 0x08000000) != RESET ) - { - if((can->TXSTS & (flag & 0x000FFFFF)) != RESET ) - { - status = SET; - } - else - { - status = RESET; - } - } - else if((flag & 0x02000000) != RESET ) - { - if((can->RXF0 & (flag & 0x000FFFFF)) != RESET ) - { - status = SET; - } - else - { - status = RESET; - } - } - else - { - if((can->RXF1 & (flag & 0x000FFFFF)) != RESET) - { - status = SET; - } - else - { - status = RESET; - } - } - return status; -} - -/*! - * @brief Clears the CAN's pending flags. - * - * @param can: Select the CAN peripheral. - * - * @param flag: specifies the CAN flag. - * This parameter can be one of the following values: - * @arg CAN_FLAG_LERRC : Last error record code Flag - * @arg CAN_FLAG_WUPI : Wake up Flag - * @arg CAN_FLAG_SLEEP : Sleep acknowledge Flag - * @arg CAN_FLAG_F0FULL: FIFO 0 Full Flag - * @arg CAN_FLAG_F0OVR : FIFO 0 Overrun Flag - * @arg CAN_FLAG_F1FULL: FIFO 1 Full Flag - * @arg CAN_FLAG_F1OVR : FIFO 1 Overrun Flag - * @arg CAN_FLAG_REQC0 : Request MailBox0 Flag - * @arg CAN_FLAG_REQC1 : Request MailBox1 Flag - * @arg CAN_FLAG_REQC2 : Request MailBox2 Flag - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_ClearStatusFlag(CAN_T* can, CAN_FLAG_T flag) -{ - uint32_t flagtmp = 0; - - /** ERRSTS register */ - if(flag == 0x30F00070) - { - can->ERRSTS = RESET; - } - else - { - flagtmp = flag & 0x000FFFFF; - if((flag & 0x02000000) != RESET) - { - can->RXF0 = flagtmp; - } - else if((flag & 0x04000000) != RESET) - { - can->RXF1 = flagtmp; - } - else if((flag & 0x08000000) != RESET) - { - can->TXSTS = flagtmp; - } - else - { - can->MSTS = flagtmp; - } - } -} - -/*! - * @brief Read whether the specified can interrupt has occurred or not. - * - * @param can: Select the CAN peripheral. - * - * @param flag: specifies the CAN interrupt sources - * This parameter can be one of the following values: - * @arg CAN_INT_TXME : Transmit mailbox empty Interrupt - * @arg CAN_INT_F0MP : FIFO 0 message pending Interrupt - * @arg CAN_INT_F0FULL : FIFO 0 full Interrupt - * @arg CAN_INT_F0OVR : FIFO 0 overrun Interrupt - * @arg CAN_INT_F1MP : FIFO 1 message pending Interrupt - * @arg CAN_INT_F1FULL : FIFO 1 full Interrupt - * @arg CAN_INT_F1OVR : FIFO 1 overrun Interrupt - * @arg CAN_INT_ERRW : Error warning Interrupt - * @arg CAN_INT_ERRP : Error passive Interrupt - * @arg CAN_INT_BOF : Bus-off Interrupt - * @arg CAN_INT_LEC : Last error record code Interrupt - * @arg CAN_INT_ERR : Error Interrupt - * @arg CAN_INT_WUP : Wake-up Interrupt - * @arg CAN_INT_SLEEP : Sleep acknowledge Interrupt - * - * @retval status : SET or RESET - * - * @note CAN2 applies only to APM32F103xC device. - */ -uint8_t CAN_ReadIntFlag(CAN_T* can, CAN_INT_T flag) -{ - uint8_t status = 0; - - if((can->INTEN & flag) != RESET) - { - switch (flag) - { - case CAN_INT_TXME: - status = can->TXSTS_B.REQCFLG0; - status |= can->TXSTS_B.REQCFLG1; - status |= can->TXSTS_B.REQCFLG2; - break; - case CAN_INT_F0MP: - status = can->RXF0_B.FMNUM0; - break; - case CAN_INT_F0FULL: - status = can->RXF0_B.FFULLFLG0; - break; - case CAN_INT_F0OVR: - status = can->RXF0_B.FOVRFLG0; - break; - case CAN_INT_F1MP: - status = can->RXF1_B.FMNUM1; - break; - case CAN_INT_F1FULL: - status = can->RXF1_B.FFULLFLG1; - break; - case CAN_INT_F1OVR: - status = can->RXF1_B.FOVRFLG1; - break; - case CAN_INT_WUP: - status = can->MSTS_B.WUPIFLG; - break; - case CAN_INT_SLEEP: - status = can->MSTS_B.SLEEPIFLG; - break; - case CAN_INT_ERRW: - status = can->ERRSTS_B.ERRWFLG; - break; - case CAN_INT_ERRP: - status = can->ERRSTS_B.ERRPFLG; - break; - case CAN_INT_BOF: - status = can->ERRSTS_B.BOFLG; - break; - case CAN_INT_LEC: - status = can->ERRSTS_B.LERRC; - break; - case CAN_INT_ERR: - status = can->MSTS_B.ERRIFLG; - break; - default: - status = RESET; - break; - } - } - else - { - status = RESET; - } - return status; -} - -/*! - * @brief Clears the can's interrupt flag. - * - * @param can: Select the CAN peripheral. - * - * @param flag: Interrupt pending bit to clear - * This parameter can be one of the following values: - * @arg CAN_INT_TXME : Transmit mailbox empty Interrupt - * @arg CAN_INT_F0FULL : FIFO 0 full Interrupt - * @arg CAN_INT_F0OVR : FIFO 0 overrun Interrupt - * @arg CAN_INT_F1FULL : FIFO 1 full Interrupt - * @arg CAN_INT_F1OVR : FIFO 1 overrun Interrupt - * @arg CAN_INT_ERRW : Error warning Interrupt - * @arg CAN_INT_ERRP : Error passive Interrupt - * @arg CAN_INT_BOF : Bus-off Interrupt - * @arg CAN_INT_LEC : Last error record code Interrupt - * @arg CAN_INT_ERR : Error Interrupt - * @arg CAN_INT_WUP : Wake-up Interrupt - * @arg CAN_INT_SLEEP : Sleep acknowledge Interrupt - * - * @retval None - * - * @note CAN2 applies only to APM32F103xC device. - */ -void CAN_ClearIntFlag(CAN_T* can, CAN_INT_T flag) -{ - switch (flag) - { - case CAN_INT_TXME: - can->TXSTS_B.REQCFLG0 = BIT_SET; - can->TXSTS_B.REQCFLG1 = BIT_SET; - can->TXSTS_B.REQCFLG2 = BIT_SET; - break; - case CAN_INT_F0FULL: - can->RXF0_B.FFULLFLG0 = BIT_SET; - break; - case CAN_INT_F0OVR: - can->RXF0_B.FOVRFLG0 = BIT_SET; - break; - case CAN_INT_F1FULL: - can->RXF1_B.FFULLFLG1 = BIT_SET; - break; - case CAN_INT_F1OVR: - can->RXF1_B.FOVRFLG1 = BIT_SET; - break; - case CAN_INT_WUP: - can->MSTS_B.WUPIFLG = BIT_SET; - break; - case CAN_INT_SLEEP: - can->MSTS_B.SLEEPIFLG = BIT_SET; - break; - case CAN_INT_ERRW: - can->MSTS_B.ERRIFLG = BIT_SET; - break; - case CAN_INT_ERRP: - can->MSTS_B.ERRIFLG = BIT_SET; - break; - case CAN_INT_BOF: - can->MSTS_B.ERRIFLG = BIT_SET; - break; - case CAN_INT_LEC: - can->ERRSTS_B.LERRC = BIT_RESET; - can->MSTS_B.ERRIFLG = BIT_SET; - break; - case CAN_INT_ERR: - can->ERRSTS_B.LERRC = BIT_RESET; - can->MSTS_B.ERRIFLG = BIT_SET; - break; - default: - break; - } -} - -/**@} end of group CAN_Fuctions*/ -/**@} end of group CAN_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_crc.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_crc.c deleted file mode 100644 index d450b3e..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_crc.c +++ /dev/null @@ -1,124 +0,0 @@ -/*! - * @file apm32f10x_crc.c - * - * @brief This file provides all the CRC firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_crc.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup CRC_Driver CRC Driver - @{ -*/ - -/** @addtogroup CRC_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset CRC data register. - * - * @param None - * - * @retval None - */ -void CRC_ResetDATA(void) -{ - CRC->CTRL_B.RST = BIT_SET; -} - -/*! - * @brief Calculate CRC of a 32bit data word. - * - * @param data: a data word to compute its CRC. - * This parameter can be a 32bit value: - * - * @retval A 32-bit CRC value - */ -uint32_t CRC_CalculateCRC(uint32_t data) -{ - CRC->DATA = data; - - return (CRC->DATA); -} - -/*! - * @brief Computes the 32-bit CRC of a given buffer of data word(32-bit). - * - * @param buf: Pointer to the buffer containing the data to be computed. - * - * @param bufLen: The length of buffer which is computed. - * - * @retval A 32-bit CRC value - */ -uint32_t CRC_CalculateBlockCRC(uint32_t *buf, uint32_t bufLen) -{ - while(bufLen--) - { - CRC->DATA = *buf++; - } - - return (CRC->DATA); -} - -/*! - * @brief Returns the current CRC value. - * - * @param None - * - * @retval A 32-bit CRC value - */ -uint32_t CRC_ReadCRC(void) -{ - return (CRC->DATA); -} - -/*! - * @brief Saves a 8bit data in the Independent Data register(INDATA). - * - * @param inData: a 8-bit value to be stored in the ID register - * - * @retval None - */ -void CRC_WriteIDRegister(uint8_t inData) -{ - CRC->INDATA = inData; -} - -/*! - * @brief Reads a 8-bit data saved in the Independent Data register(INDATA). - * - * @param None - * - * @retval a 8-bit value from the INDATA register - */ -uint8_t CRC_ReadIDRegister(void) -{ - return (CRC->INDATA); -} - -/**@} end of group CRC_Fuctions*/ -/**@} end of group CRC_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dac.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dac.c deleted file mode 100644 index 6b0eeb6..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dac.c +++ /dev/null @@ -1,411 +0,0 @@ -/*! - * @file apm32f10x_dac.c - * - * @brief This file provides all the DAC firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_dac.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup DAC_Driver DAC Driver - @{ -*/ - -/** @addtogroup DAC_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset dac peripheral registers to their default reset values. - * - * @param None - * - * @retval None - */ -void DAC_Reset(void) -{ - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_DAC); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_DAC); -} - -/*! - * @brief Config the DAC peripheral according to the specified parameters in the dacConfig - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @param dacConfig: pointer to a DAC_Config_T structure - * - * @retval None - */ -void DAC_Config(uint32_t channel, DAC_Config_T* dacConfig) -{ - uint32_t tmp1 = 0, tmp2 = 0; - - tmp1 = DAC->CTRL; - - tmp1 &= ~(((uint32_t)0x00000FFE) << channel); - - tmp2 = ((uint32_t)dacConfig->trigger | \ - (uint32_t)dacConfig->waveGeneration | \ - (uint32_t)dacConfig->maskAmplitudeSelect | \ - (uint32_t)dacConfig->outputBuffer); - - tmp1 |= tmp2 << channel; - - DAC->CTRL = tmp1; -} - -/*! - * @brief Fills each DAC_Config_T member with its default value - * - * @param dacConfig: pointer to a DAC_Config_T structure which will be initialized - * - * @retval None - */ -void DAC_ConfigStructInit(DAC_Config_T* dacConfig) -{ - /** Initialize the DAC_Trigger member */ - dacConfig->trigger = DAC_TRIGGER_NONE; - /** Initialize the DAC_WaveGeneration member */ - dacConfig->waveGeneration = DAC_WAVE_GENERATION_NONE; - /** Initialize the DAC_LFSRUnmask_TriangleAmplitude member */ - dacConfig->maskAmplitudeSelect = DAC_LFSR_MASK_BIT11_1; - /** Initialize the DAC_OutputBuffer member */ - dacConfig->outputBuffer = DAC_OUTPUT_BUFFER_ENBALE; -} - -/*! - * @brief Enables the specified DAC peripheral - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @retval None - */ -void DAC_Enable(DAC_CHANNEL_T channel) -{ - if (channel == DAC_CHANNEL_1) - { - DAC->CTRL_B.ENCH1 = BIT_SET; - } - else if (channel == DAC_CHANNEL_2) - { - DAC->CTRL_B.ENCH2 = BIT_SET; - } -} - -/*! - * @brief Disables the specified DAC peripheral - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @retval None - */ -void DAC_Disable(DAC_CHANNEL_T channel) -{ - if (channel == DAC_CHANNEL_1) - { - DAC->CTRL_B.ENCH1 = BIT_RESET; - } - else if (channel == DAC_CHANNEL_2) - { - DAC->CTRL_B.ENCH2 = BIT_RESET; - } -} - - -/*! - * @brief Enables the specified DAC channel DMA request - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @retval None - */ -void DAC_DMA_Enable(DAC_CHANNEL_T channel) -{ - if (channel == DAC_CHANNEL_1) - { - DAC->CTRL_B.DMAENCH1 = BIT_SET; - } - else if (channel == DAC_CHANNEL_2) - { - DAC->CTRL_B.DMAENCH2 = BIT_SET; - } -} - -/*! - * @brief Disables the specified DAC channel DMA request - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @retval None - */ -void DAC_DMA_Disable(DAC_CHANNEL_T channel) -{ - if (channel == DAC_CHANNEL_1) - { - DAC->CTRL_B.DMAENCH1 = BIT_RESET; - } - else if (channel == DAC_CHANNEL_2) - { - DAC->CTRL_B.DMAENCH2 = BIT_RESET; - } -} - -/*! - * @brief Enables the selected DAC channel software trigger - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @retval None - */ -void DAC_EnableSoftwareTrigger(DAC_CHANNEL_T channel) -{ - if (channel == DAC_CHANNEL_1) - { - DAC->SWTRG_B.SWTRG1 = BIT_SET; - } - else if (channel == DAC_CHANNEL_2) - { - DAC->SWTRG_B.SWTRG2 = BIT_SET; - } -} - -/*! - * @brief Disable the selected DAC channel software trigger - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @retval None - */ -void DAC_DisableSoftwareTrigger(DAC_CHANNEL_T channel) -{ - if (channel == DAC_CHANNEL_1) - { - DAC->SWTRG_B.SWTRG1 = BIT_RESET; - } - else if (channel == DAC_CHANNEL_2) - { - DAC->SWTRG_B.SWTRG2 = BIT_RESET; - } -} -/*! - * @brief Enables simultaneously the two DAC channels software - * - * @param None - * - * @retval None - */ -void DAC_EnableDualSoftwareTrigger(void) -{ - DAC->SWTRG_B.SWTRG1 = BIT_SET; - DAC->SWTRG_B.SWTRG2 = BIT_SET; -} - -/*! - * @brief Disables simultaneously the two DAC channels software - * - * @param None - * - * @retval None - */ -void DAC_DisableDualSoftwareTrigger(void) -{ - DAC->SWTRG_B.SWTRG1 = BIT_RESET; - DAC->SWTRG_B.SWTRG2 = BIT_RESET; -} - -/*! - * @brief Enables the selected DAC channel wave generation - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @param wave: Select the wave - * This parameter can be one of the following values: - * @arg DAC_WAVE_GENERATION_NONE : no wave generation - * @arg DAC_WAVE_GENERATION_NOISE : Noise wave generation - * @arg DAC_WAVE_GENERATION_TRIANGLE : Triangle wave generation - * - * @retval None - */ -void DAC_EnableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave) -{ - DAC->CTRL &= 0xFF3FFF3F; - DAC->CTRL |= wave << channel; -} - -/*! - * @brief Disables the selected DAC channel wave generation - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @param wave: Select the wave - * This parameter can be one of the following values: - * @arg DAC_WAVE_GENERATION_NONE : no wave generation - * @arg DAC_WAVE_GENERATION_NOISE : Noise wave generation - * @arg DAC_WAVE_GENERATION_TRIANGLE : Triangle wave generation - * - * @retval None - */ -void DAC_DisableWaveGeneration(DAC_CHANNEL_T channel, DAC_WAVE_GENERATION_T wave) -{ - DAC->CTRL &= ~(wave << channel); -} - -/*! - * @brief Set the specified data holding register value for DAC channel 1 - * - * @param align: DAC channel 1 data alignment - * This parameter can be one of the following values: - * @arg DAC_ALIGN_12BIT_R : 12-bit right-aligned data - * @arg DAC_ALIGN_12BIT_L : 12-bit left-aligned data - * @arg DAC_ALIGN_8BIT_R : 8-bit right-aligned data - * - * @param data: The data to be loaded in the selected data register. - * - * @retval None - */ -void DAC_ConfigChannel1Data(DAC_ALIGN_T align, uint16_t data) -{ - __IO uint32_t tmp = 0; - - tmp = (uint32_t)DAC_BASE; - tmp += 0x00000008 + align; - - /** Set the DAC channel1 selected data holding register */ - *(__IO uint32_t *) tmp = data; -} - -/*! - * @brief Set the specified data holding register value for DAC channel 2 - * - * @param align: DAC channel 2 data alignment - * This parameter can be one of the following values: - * @arg DAC_ALIGN_12BIT_R : 12-bit right-aligned data - * @arg DAC_ALIGN_12BIT_L : 12-bit left-aligned data - * @arg DAC_ALIGN_8BIT_R : 8-bit right-aligned data - * - * @param data: The data to be loaded in the selected data register. - * - * @retval None - */ -void DAC_ConfigChannel2Data(DAC_ALIGN_T align, uint16_t data) -{ - __IO uint32_t tmp = 0; - - tmp = (uint32_t)DAC_BASE; - tmp += 0x00000014 + align; - - /** Set the DAC channel1 selected data holding register */ - *(__IO uint32_t *) tmp = data; -} - -/*! - * @brief Set the specified data holding register value for dual DAC channel - * - * @param align: Dual DAC channel data alignment - * This parameter can be one of the following values: - * @arg DAC_ALIGN_12BIT_R : 12-bit right-aligned data - * @arg DAC_ALIGN_12BIT_L : 12-bit left-aligned data - * @arg DAC_ALIGN_8BIT_R : 8-bit right-aligned data - * - * @param data2: Data for channel2 to be loaded in the selected data register. - * - * @param data1: Data for channel1 to be loaded in the selected data register - * - * @retval None - */ -void DAC_ConfigDualChannelData(DAC_ALIGN_T align, uint16_t data2, uint16_t data1) -{ - uint32_t data = 0, tmp = 0; - - /** Calculate and set dual DAC data holding register value */ - if (align == DAC_ALIGN_8BIT_R) - { - data = ((uint32_t)data2 << 8) | data1; - } - else - { - data = ((uint32_t)data2 << 16) | data1; - } - - tmp = (uint32_t)DAC_BASE; - tmp += 0x00000020 + align; - - /** Set the dual DAC selected data holding register */ - *(__IO uint32_t *)tmp = data; -} - -/*! - * @brief Reads the specified DAC channel data output value. - * - * @param channel: Select the DAC channel. - * This parameter can be one of the following values: - * @arg DAC_CHANNEL_1 : DAC channel 1 - * @arg DAC_CHANNEL_2 : DAC channel 2 - * - * @retval The data output value of the specified DAC channel. - */ -uint16_t DAC_ReadDataOutputValue(DAC_CHANNEL_T channel) -{ - __IO uint32_t tmp = 0; - - tmp = (uint32_t) DAC_BASE ; - tmp += 0x0000002C + ((uint32_t)channel >> 2); - - /** Returns the DAC channel data output register value */ - return (uint16_t) (*(__IO uint32_t*) tmp); -} - -/**@} end of group DAC_Fuctions*/ -/**@} end of group DAC_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dbgmcu.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dbgmcu.c deleted file mode 100644 index d572730..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dbgmcu.c +++ /dev/null @@ -1,146 +0,0 @@ -/*! - * @file apm32f10x_dbgmcu.c - * - * @brief This file provides all the DEBUG firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_dbgmcu.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup DBGMCU_Driver DBGMCU Driver - @{ -*/ - -/** @addtogroup DBGMCU_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Returns the device identifier. - * - * @param None - * - * @retval Device identifier - */ -uint32_t DBGMCU_ReadDEVID(void) -{ - return(DBGMCU->IDCODE_B.EQR); -} - -/*! - * @brief Returns the device revision identifier. - * - * @param None - * - * @retval Device revision identifier - */ -uint32_t DBGMCU_ReadREVID(void) -{ - return(DBGMCU->IDCODE_B.WVR); -} - -/*! - * @brief Enable the specified peripheral and low power mode behavior - * when the MCU under Debug mode - * - * @param periph: Specifies the peripheral and low power mode - * This parameter can be any combination of the following values: - * @arg DBGMCU_SLEEP : Keep debugger connection during SLEEP mode - * @arg DBGMCU_STOP : Keep debugger connection during STOP mode - * @arg DBGMCU_STANDBY : Keep debugger connection during STANDBY mode - * @arg DBGMCU_IWDT_STOP : Debug IWDT stopped when Core is halted - * @arg DBGMCU_WWDT_STOP : Debug WWDT stopped when Core is halted - * @arg DBGMCU_TMR1_STOP : TMR1 counter stopped when Core is halted - * @arg DBGMCU_TMR2_STOP : TMR2 counter stopped when Core is halted - * @arg DBGMCU_TMR3_STOP : TMR3 counter stopped when Core is halted - * @arg DBGMCU_TMR4_STOP : TMR4 counter stopped when Core is halted - * @arg DBGMCU_CAN1_STOP : Debug CAN1 stopped when Core is halted - * @arg DBGMCU_I2C1_SMBUS_TIMEOUT: I2C1 SMBUS timeout mode stopped when Core is halted - * @arg DBGMCU_I2C2_SMBUS_TIMEOUT: I2C2 SMBUS timeout mode stopped when Core is halted - * @arg DBGMCU_TMR5_STOP : TMR5 counter stopped when Core is halted - * @arg DBGMCU_TMR6_STOP : TMR6 counter stopped when Core is halted - * @arg DBGMCU_TMR7_STOP : TMR7 counter stopped when Core is halted - * @arg DBGMCU_TMR8_STOP : TMR8 counter stopped when Core is halted - * @arg DBGMCU_CAN2_STOP : Debug CAN2 stopped when Core is halted - * @arg DBGMCU_TMR15_STOP : TMR15 counter stopped when Core is halted - * @arg DBGMCU_TMR16_STOP : TMR16 counter stopped when Core is halted - * @arg DBGMCU_TMR17_STOP : TMR17 counter stopped when Core is halted - * @arg DBGMCU_TMR9_STOP : TMR9 counter stopped when Core is halted - * @arg DBGMCU_TMR10_STOP : TMR10 counter stopped when Core is halted - * @arg DBGMCU_TMR11_STOP : TMR11 counter stopped when Core is halted - * @arg DBGMCU_TMR12_STOP : TMR12 counter stopped when Core is halted - * @arg DBGMCU_TMR13_STOP : TMR13 counter stopped when Core is halted - * @arg DBGMCU_TMR14_STOP : TMR14 counter stopped when Core is halted - * - * @retval None - */ -void DBGMCU_Enable(uint32_t periph) -{ - DBGMCU->CFG |= periph; -} - -/*! - * @brief Enable the specified peripheral and low power mode behavior - * when the MCU under Debug mode - * - * @param periph: Specifies the peripheral and low power mode - * This parameter can be any combination of the following values: - * @arg DBGMCU_SLEEP : Keep debugger connection during SLEEP mode - * @arg DBGMCU_STOP : Keep debugger connection during STOP mode - * @arg DBGMCU_STANDBY : Keep debugger connection during STANDBY mode - * @arg DBGMCU_IWDT_STOP : Debug IWDT stopped when Core is halted - * @arg DBGMCU_WWDT_STOP : Debug WWDT stopped when Core is halted - * @arg DBGMCU_TMR1_STOP : TMR1 counter stopped when Core is halted - * @arg DBGMCU_TMR2_STOP : TMR2 counter stopped when Core is halted - * @arg DBGMCU_TMR3_STOP : TMR3 counter stopped when Core is halted - * @arg DBGMCU_TMR4_STOP : TMR4 counter stopped when Core is halted - * @arg DBGMCU_CAN1_STOP : Debug CAN1 stopped when Core is halted - * @arg DBGMCU_I2C1_SMBUS_TIMEOUT: I2C1 SMBUS timeout mode stopped when Core is halted - * @arg DBGMCU_I2C2_SMBUS_TIMEOUT: I2C2 SMBUS timeout mode stopped when Core is halted - * @arg DBGMCU_TMR5_STOP : TMR5 counter stopped when Core is halted - * @arg DBGMCU_TMR6_STOP : TMR6 counter stopped when Core is halted - * @arg DBGMCU_TMR7_STOP : TMR7 counter stopped when Core is halted - * @arg DBGMCU_TMR8_STOP : TMR8 counter stopped when Core is halted - * @arg DBGMCU_CAN2_STOP : Debug CAN2 stopped when Core is halted - * @arg DBGMCU_TMR15_STOP : TMR15 counter stopped when Core is halted - * @arg DBGMCU_TMR16_STOP : TMR16 counter stopped when Core is halted - * @arg DBGMCU_TMR17_STOP : TMR17 counter stopped when Core is halted - * @arg DBGMCU_TMR9_STOP : TMR9 counter stopped when Core is halted - * @arg DBGMCU_TMR10_STOP : TMR10 counter stopped when Core is halted - * @arg DBGMCU_TMR11_STOP : TMR11 counter stopped when Core is halted - * @arg DBGMCU_TMR12_STOP : TMR12 counter stopped when Core is halted - * @arg DBGMCU_TMR13_STOP : TMR13 counter stopped when Core is halted - * @arg DBGMCU_TMR14_STOP : TMR14 counter stopped when Core is halted - * - * @retval None - */ -void DBGMCU_Disable(uint32_t periph) -{ - DBGMCU->CFG &= ~periph; -} - -/**@} end of group DBGMCU_Fuctions*/ -/**@} end of group DBGMCU_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dma.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dma.c deleted file mode 100644 index 6ef7aaa..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dma.c +++ /dev/null @@ -1,560 +0,0 @@ -/*! - * @file apm32f10x_dma.c - * - * @brief This file provides all the DMA firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_dma.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup DMA_Driver DMA Driver - @{ -*/ - -/** @addtogroup DMA_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset specified DMA Channel registers to their default reset - * - * @param channel:DMA1_channelx(x can be from 1 to 7) or DMA2_channely(y can be from 1 to 5). - * - * @retval None - * - * @note DMA2 Channel only for APM32 High density devices. - */ -void DMA_Reset(DMA_Channel_T *channel) -{ - channel->CHCFG_B.CHEN = BIT_RESET; - channel->CHCFG = 0; - channel->CHNDATA = 0; - channel->CHMADDR = 0; - channel->CHPADDR = 0; - - if(channel == DMA1_Channel1) - { - DMA1->INTFCLR |= 0xFFFFFFF0; - } - else if(channel == DMA1_Channel2) - { - DMA1->INTFCLR |= 0xFFFFFF0F; - } - else if(channel == DMA1_Channel3) - { - DMA1->INTFCLR |= 0xFFFFF0FF; - } - else if(channel == DMA1_Channel4) - { - DMA1->INTFCLR |= 0xFFFF0FFF; - } - else if(channel == DMA1_Channel5) - { - DMA1->INTFCLR |= 0xFFF0FFFF; - } - else if(channel == DMA1_Channel6) - { - DMA1->INTFCLR |= 0xFF0FFFFF; - } - else if(channel == DMA1_Channel7) - { - DMA1->INTFCLR |= 0xF0FFFFFF; - } - else if(channel == DMA2_Channel1) - { - DMA2->INTFCLR |= 0xFFFFFFF0; - } - else if(channel == DMA2_Channel2) - { - DMA2->INTFCLR |= 0xFFFFFF0F; - } - else if(channel == DMA2_Channel3) - { - DMA2->INTFCLR |= 0xFFFFF0FF; - } - else if(channel == DMA2_Channel4) - { - DMA2->INTFCLR |= 0xFFFF0FFF; - } - else if(channel == DMA2_Channel5) - { - DMA2->INTFCLR |= 0xFFF0FFFF; - } -} - -/*! - * @brief Configs specified DMA Channel through a structure. - * - * @param channel:DMA1_channelx(x can be from 1 to 7) or DMA2_channely(y can be from 1 to 5) - * - * @param dmaConfig: Point to a DMA_Config_T structure - * - * @retval None - * - * @note DMA2 Channel only for APM32 High density devices. - */ -void DMA_Config(DMA_Channel_T* channel, DMA_Config_T* dmaConfig) -{ - channel->CHCFG_B.DIRCFG = dmaConfig->dir; - channel->CHCFG_B.CIRMODE = dmaConfig->loopMode; - channel->CHCFG_B.PERIMODE = dmaConfig->peripheralInc; - channel->CHCFG_B.MIMODE = dmaConfig->memoryInc; - channel->CHCFG_B.PERSIZE = dmaConfig->peripheralDataSize; - channel->CHCFG_B.MEMSIZE = dmaConfig->memoryDataSize; - channel->CHCFG_B.CHPL = dmaConfig->priority; - channel->CHCFG_B.M2MMODE = dmaConfig->M2M; - - channel->CHNDATA = dmaConfig->bufferSize; - channel->CHPADDR = dmaConfig->peripheralBaseAddr; - channel->CHMADDR = dmaConfig->memoryBaseAddr; -} - -/*! - * @brief Populate the structure with default values. - * - * @param dmaConfig: Point to a DMA_Config_T structure. - * - * @retval None - */ -void DMA_ConfigStructInit( DMA_Config_T* dmaConfig) -{ - dmaConfig->peripheralBaseAddr = 0; - dmaConfig->memoryBaseAddr = 0; - dmaConfig->dir = DMA_DIR_PERIPHERAL_SRC; - dmaConfig->bufferSize = 0; - dmaConfig->peripheralInc = DMA_PERIPHERAL_INC_DISABLE; - dmaConfig->memoryInc = DMA_MEMORY_INC_DISABLE; - dmaConfig->peripheralDataSize = DMA_PERIPHERAL_DATA_SIZE_BYTE; - dmaConfig->memoryDataSize = DMA_MEMORY_DATA_SIZE_BYTE; - dmaConfig->loopMode = DMA_MODE_NORMAL; - dmaConfig->priority = DMA_PRIORITY_LOW; - dmaConfig->M2M = DMA_M2MEN_DISABLE; -} - -/*! - * @brief Enable the specified DMA Channel - * - * @param channel:DMA1_channelx(x can be from 1 to 7) or DMA2_channely(y can be from 1 to 5) - * - * @retval None - * - * @note DMA2 Channel only for APM32 High density devices. - */ -void DMA_Enable(DMA_Channel_T *channel) -{ - channel->CHCFG_B.CHEN = ENABLE; -} - -/*! - * @brief Disable the specified DMA Channel - * - * @param channel:DMA1_channelx(x can be from 1 to 7) or DMA2_channely(y can be from 1 to 5) - * - * @retval None - * - * @note DMA2 Channel only for APM32 High density devices. - */ -void DMA_Disable(DMA_Channel_T *channel) -{ - channel->CHCFG_B.CHEN = DISABLE; -} - -/*! - * @brief Configs the number of data units in the channel. - * - * @param channel:DMA1_channelx(x can be from 1 to 7) or DMA2_channely(y can be from 1 to 5) - * - * @param dataNumber:The number of data units in the current DMA Channel transfer. - * - * @retval None - * - * @note DMA2 Channel only for APM32 High density devices. - */ -void DMA_ConfigDataNumber(DMA_Channel_T *channel, uint16_t dataNumber) -{ - channel->CHNDATA = dataNumber; -} - -/*! - * @brief Read the number of data units in the channel - * - * @param channel:DMA1_channelx(x can be from 1 to 7) or DMA2_channely(y can be from 1 to 5) - * - * @retval The number of CHNDATA value - * - * @note DMA2 Channel only for APM32 High density devices. - */ -uint16_t DMA_ReadDataNumber(DMA_Channel_T *channel) -{ - return channel->CHNDATA; -} - -/*! - * @brief Enables the specified DMA Channel interrupts. - * - * @param channel:DMA1_channelx(x can be from 1 to 7) or DMA2_channely(y can be from 1 to 5) - * - * @param interrupt: DMA interrupts sources to selsct - * This parameter can be any combination of the following values: - * @arg DMA_INT_TC : All Transfer Complete Interrupt - * @arg DMA_INT_HT : Half Transfer Complete Interrupt - * @arg DMA_INT_TERR : Transfer Error Occur Interrupt - * - * @retval None - * - * @note DMA2 Channel only for APM32 High density devices. - */ -void DMA_EnableInterrupt(DMA_Channel_T *channel, uint32_t interrupt) -{ - channel->CHCFG |= interrupt; -} - -/*! - * @brief Disable the specified DMA Channel interrupts. - * - * @param channel:DMA1_channelx(x can be from 1 to 7) or DMA2_channely(y can be from 1 to 5) - * - * @param interrupt: DMA interrupts sources to selsct - * This parameter can be any combination of the following values: - * @arg DMA_INT_TC : All Transfer Complete Interrupt - * @arg DMA_INT_HT : Half Transfer Complete Interrupt - * @arg DMA_INT_TERR : Transfer Error Occur Interrupt - * - * @retval None - * - * @note DMA2 Channel only for APM32 High density devices. - */ -void DMA_DisableInterrupt(DMA_Channel_T *channel, uint32_t interrupt) -{ - channel->CHCFG &= ~interrupt; -} - -/*! - * @brief Read whether the specifie DMA Channel flag is set or not. - * - * @param flag: the flag to check. - * This parameter can be one of the following values: - * @arg DMA1_FLAG_GINT1: DMA1 Channel 1 global flag. - * @arg DMA1_FLAG_TC1: DMA1 Channel 1 transfer complete flag. - * @arg DMA1_FLAG_HT1: DMA1 Channel 1 half transfer flag. - * @arg DMA1_FLAG_TERR1: DMA1 Channel 1 transfer error flag. - * @arg DMA1_FLAG_GINT2: DMA1 Channel2 global flag. - * @arg DMA1_FLAG_TC2: DMA1 Channel2 transfer complete flag. - * @arg DMA1_FLAG_HT2: DMA1 Channel2 half transfer flag. - * @arg DMA1_FLAG_TERR2: DMA1 Channel2 transfer error flag. - * @arg DMA1_FLAG_GINT3: DMA1 Channel3 global flag. - * @arg DMA1_FLAG_TC3: DMA1 Channel3 transfer complete flag. - * @arg DMA1_FLAG_HT3: DMA1 Channel3 half transfer flag. - * @arg DMA1_FLAG_TERR3: DMA1 Channel3 transfer error flag. - * @arg DMA1_FLAG_GINT4: DMA1 Channel4 global flag. - * @arg DMA1_FLAG_TC4: DMA1 Channel4 transfer complete flag. - * @arg DMA1_FLAG_HT4: DMA1 Channel4 half transfer flag. - * @arg DMA1_FLAG_TERR4: DMA1 Channel4 transfer error flag. - * @arg DMA1_FLAG_GINT5: DMA1 Channel5 global flag. - * @arg DMA1_FLAG_TC5: DMA1 Channel5 transfer complete flag. - * @arg DMA1_FLAG_HT5: DMA1 Channel5 half transfer flag. - * @arg DMA1_FLAG_TERR5: DMA1 Channel5 transfer error flag. - * @arg DMA1_FLAG_GINT6: DMA1 Channel6 global flag. - * @arg DMA1_FLAG_TC6: DMA1 Channel6 transfer complete flag. - * @arg DMA1_FLAG_HT6: DMA1 Channel6 half transfer flag. - * @arg DMA1_FLAG_TERR6: DMA1 Channel6 transfer error flag. - * @arg DMA1_FLAG_GINT7: DMA1 Channel7 global flag. - * @arg DMA1_FLAG_TC7: DMA1 Channel7 transfer complete flag. - * @arg DMA1_FLAG_HT7: DMA1 Channel7 half transfer flag. - * @arg DMA1_FLAG_TERR7: DMA1 Channel7 transfer error flag. - * - * @arg DMA2_FLAG_GINT1: DMA2 Channel 1 global flag. - * @arg DMA2_FLAG_TC1: DMA2 Channel 1 transfer complete flag. - * @arg DMA2_FLAG_HT1: DMA2 Channel 1 half transfer flag. - * @arg DMA2_FLAG_TERR1: DMA2 Channel 1 transfer error flag. - * @arg DMA2_FLAG_GINT2: DMA2 Channel 2 global flag. - * @arg DMA2_FLAG_TC2: DMA2 Channel 2 transfer complete flag. - * @arg DMA2_FLAG_HT2: DMA2 Channel 2 half transfer flag. - * @arg DMA2_FLAG_TERR2: DMA2 Channel 2 transfer error flag. - * @arg DMA2_FLAG_GINT3: DMA2 Channel 3 global flag. - * @arg DMA2_FLAG_TC3: DMA2 Channel 3 transfer complete flag. - * @arg DMA2_FLAG_HT3: DMA2 Channel 3 half transfer flag. - * @arg DMA2_FLAG_TERR3: DMA2 Channel 3 transfer error flag. - * @arg DMA2_FLAG_GINT4: DMA2 Channel 4 global flag. - * @arg DMA2_FLAG_TC4: DMA2 Channel 4 transfer complete flag. - * @arg DMA2_FLAG_HT4: DMA2 Channel 4 half transfer flag. - * @arg DMA2_FLAG_TERR4: DMA2 Channel 4 transfer error flag. - * @arg DMA2_FLAG_GINT5: DMA2 Channel 5 global flag. - * @arg DMA2_FLAG_TC5: DMA2 Channel 5 transfer complete flag. - * @arg DMA2_FLAG_HT5: DMA2 Channel 5 half transfer flag. - * @arg DMA2_FLAG_TERR5: DMA2 Channel 5 transfer error flag. - * - * @retval Flag State - * - * @note DMA2 Channel only for APM32 High density devices. - */ -uint8_t DMA_ReadStatusFlag(DMA_FLAG_T flag) -{ - if((flag & 0x10000000) != RESET ) - { - if((DMA2->INTSTS & flag ) != RESET ) - { - return SET ; - } else - { - return RESET ; - } - } - else - { - if((DMA1->INTSTS & flag ) != RESET ) - { - return SET ; - } else - { - return RESET ; - } - } -} - -/*! - * @brief Clears the specifie DMA Channel's flags. - * - * @param flag:the flag to Clear. - * This parameter can be any combination of the following values: - * @arg DMA1_FLAG_GINT1: DMA1 Channel 1 global flag. - * @arg DMA1_FLAG_TC1: DMA1 Channel 1 transfer complete flag. - * @arg DMA1_FLAG_HT1: DMA1 Channel 1 half transfer flag. - * @arg DMA1_FLAG_TERR1: DMA1 Channel 1 transfer error flag. - * @arg DMA1_FLAG_GINT2: DMA1 Channel2 global flag. - * @arg DMA1_FLAG_TC2: DMA1 Channel2 transfer complete flag. - * @arg DMA1_FLAG_HT2: DMA1 Channel2 half transfer flag. - * @arg DMA1_FLAG_TERR2: DMA1 Channel2 transfer error flag. - * @arg DMA1_FLAG_GINT3: DMA1 Channel3 global flag. - * @arg DMA1_FLAG_TC3: DMA1 Channel3 transfer complete flag. - * @arg DMA1_FLAG_HT3: DMA1 Channel3 half transfer flag. - * @arg DMA1_FLAG_TERR3: DMA1 Channel3 transfer error flag. - * @arg DMA1_FLAG_GINT4: DMA1 Channel4 global flag. - * @arg DMA1_FLAG_TC4: DMA1 Channel4 transfer complete flag. - * @arg DMA1_FLAG_HT4: DMA1 Channel4 half transfer flag. - * @arg DMA1_FLAG_TERR4: DMA1 Channel4 transfer error flag. - * @arg DMA1_FLAG_GINT5: DMA1 Channel5 global flag. - * @arg DMA1_FLAG_TC5: DMA1 Channel5 transfer complete flag. - * @arg DMA1_FLAG_HT5: DMA1 Channel5 half transfer flag. - * @arg DMA1_FLAG_TERR5: DMA1 Channel5 transfer error flag. - * @arg DMA1_FLAG_GINT6: DMA1 Channel6 global flag. - * @arg DMA1_FLAG_TC6: DMA1 Channel6 transfer complete flag. - * @arg DMA1_FLAG_HT6: DMA1 Channel6 half transfer flag. - * @arg DMA1_FLAG_TERR6: DMA1 Channel6 transfer error flag. - * @arg DMA1_FLAG_GINT7: DMA1 Channel7 global flag. - * @arg DMA1_FLAG_TC7: DMA1 Channel7 transfer complete flag. - * @arg DMA1_FLAG_HT7: DMA1 Channel7 half transfer flag. - * @arg DMA1_FLAG_TERR7: DMA1 Channel7 transfer error flag. - - * @arg DMA2_FLAG_GINT1: DMA2 Channel 1 global flag. - * @arg DMA2_FLAG_TC1: DMA2 Channel 1 transfer complete flag. - * @arg DMA2_FLAG_HT1: DMA2 Channel 1 half transfer flag. - * @arg DMA2_FLAG_TERR1: DMA2 Channel 1 transfer error flag. - * @arg DMA2_FLAG_GINT2: DMA2 Channel 2 global flag. - * @arg DMA2_FLAG_TC2: DMA2 Channel 2 transfer complete flag. - * @arg DMA2_FLAG_HT2: DMA2 Channel 2 half transfer flag. - * @arg DMA2_FLAG_TERR2: DMA2 Channel 2 transfer error flag. - * @arg DMA2_FLAG_GINT3: DMA2 Channel 3 global flag. - * @arg DMA2_FLAG_TC3: DMA2 Channel 3 transfer complete flag. - * @arg DMA2_FLAG_HT3: DMA2 Channel 3 half transfer flag. - * @arg DMA2_FLAG_TERR3: DMA2 Channel 3 transfer error flag. - * @arg DMA2_FLAG_GINT4: DMA2 Channel 4 global flag. - * @arg DMA2_FLAG_TC4: DMA2 Channel 4 transfer complete flag. - * @arg DMA2_FLAG_HT4: DMA2 Channel 4 half transfer flag. - * @arg DMA2_FLAG_TERR4: DMA2 Channel 4 transfer error flag. - * @arg DMA2_FLAG_GINT5: DMA2 Channel 5 global flag. - * @arg DMA2_FLAG_TC5: DMA2 Channel 5 transfer complete flag. - * @arg DMA2_FLAG_HT5: DMA2 Channel 5 half transfer flag. - * @arg DMA2_FLAG_TERR5: DMA2 Channel 5 transfer error flag. - * - * @retval None - * - * @note DMA2 Channel only for APM32 High density devices. - */ -void DMA_ClearStatusFlag(uint32_t flag) -{ - if((flag & 0x10000000) != RESET) - { - DMA2->INTFCLR = flag; - } else - { - DMA1->INTFCLR = flag; - } -} - -/*! - * @brief Read whether the specified DMA Channel interrupts is set or not. - * - * @param interrupt: interrupt source to check. - * This parameter can be one of the following values: - * @arg DMA1_INT_FLAG_GINT1 : DMA1 Channel 1 global interrupt. - * @arg DMA1_INT_FLAG_TC1 : DMA1 Channel 1 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT1 : DMA1 Channel 1 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR1 : DMA1 Channel 1 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT2 : DMA1 Channel2 global interrupt. - * @arg DMA1_INT_FLAG_TC2 : DMA1 Channel2 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT2 : DMA1 Channel2 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR2 : DMA1 Channel2 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT3 : DMA1 Channel3 global interrupt. - * @arg DMA1_INT_FLAG_TC3 : DMA1 Channel3 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT3 : DMA1 Channel3 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR3 : DMA1 Channel3 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT4 : DMA1 Channel4 global interrupt. - * @arg DMA1_INT_FLAG_TC4 : DMA1 Channel4 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT4 : DMA1 Channel4 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR4 : DMA1 Channel4 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT5 : DMA1 Channel5 global interrupt. - * @arg DMA1_INT_FLAG_TC5 DMA1 Channel5 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT5 DMA1 Channel5 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR5 : DMA1 Channel5 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT6 : DMA1 Channel6 global interrupt. - * @arg DMA1_INT_FLAG_TC6 : DMA1 Channel6 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT6 : DMA1 Channel6 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR6 : DMA1 Channel6 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT7 : DMA1 Channel7 global interrupt. - * @arg DMA1_INT_FLAG_TC7 : DMA1 Channel7 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT7 : DMA1 Channel7 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR7 : DMA1 Channel7 transfer error interrupt. - - * @arg DMA2_INT_FLAG_GINT1 : DMA2 Channel 1 global interrupt. - * @arg DMA2_INT_FLAG_TC1 : DMA2 Channel 1 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT1 : DMA2 Channel 1 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR1 : DMA2 Channel 1 transfer error interrupt. - * @arg DMA2_INT_FLAG_GINT2 : DMA2 Channel 2 global interrupt. - * @arg DMA2_INT_FLAG_TC2 : DMA2 Channel 2 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT2 : DMA2 Channel 2 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR2 : DMA2 Channel 2 transfer error interrupt. - * @arg DMA2_INT_FLAG_GINT3 : DMA2 Channel 3 global interrupt. - * @arg DMA2_INT_FLAG_TC3 : DMA2 Channel 3 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT3 : DMA2 Channel 3 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR3 : DMA2 Channel 3 transfer error interrupt. - * @arg DMA2_INT_FLAG_GINT4 : DMA2 Channel 4 global interrupt. - * @arg DMA2_INT_FLAG_TC4 : DMA2 Channel 4 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT4 : DMA2 Channel 4 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR4 : DMA2 Channel 4 transfer error interrupt. - * @arg DMA2_INT_FLAG_GINT5 : DMA2 Channel 5 global interrupt. - * @arg DMA2_INT_FLAG_TC5 : DMA2 Channel 5 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT5 : DMA2 Channel 5 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR5 : DMA2 Channel 5 transfer error interrupt. - * - * @retval interrupt State - * - * @note DMA2 Channel only for APM32 High density devices. - */ -uint8_t DMA_ReadIntFlag(DMA_INT_FLAG_T flag) -{ - if((flag & 0x10000000) != RESET ) - { - if((DMA2->INTSTS & flag ) != RESET ) - { - return SET ; - } else - { - return RESET ; - } - } else - { - if((DMA1->INTSTS & flag ) != RESET ) - { - return SET ; - } else - { - return RESET ; - } - } -} -/*! - * @brief Clears the specified DMA Channel's interrupts. - * - * @param flag: the interrupt flag to Clear. - * This parameter can be any combination of the following values: - * @arg DMA1_INT_FLAG_GINT1 : DMA1 Channel 1 global interrupt. - * @arg DMA1_INT_FLAG_TC1 : DMA1 Channel 1 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT1 : DMA1 Channel 1 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR1 : DMA1 Channel 1 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT2 : DMA1 Channel2 global interrupt. - * @arg DMA1_INT_FLAG_TC2 : DMA1 Channel2 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT2 : DMA1 Channel2 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR2 : DMA1 Channel2 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT3 : DMA1 Channel3 global interrupt. - * @arg DMA1_INT_FLAG_TC3 : DMA1 Channel3 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT3 : DMA1 Channel3 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR3 : DMA1 Channel3 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT4 : DMA1 Channel4 global interrupt. - * @arg DMA1_INT_FLAG_TC4 : DMA1 Channel4 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT4 : DMA1 Channel4 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR4 : DMA1 Channel4 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT5 : DMA1 Channel5 global interrupt. - * @arg DMA1_INT_FLAG_TC5 DMA1 Channel5 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT5 DMA1 Channel5 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR5 : DMA1 Channel5 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT6 : DMA1 Channel6 global interrupt. - * @arg DMA1_INT_FLAG_TC6 : DMA1 Channel6 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT6 : DMA1 Channel6 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR6 : DMA1 Channel6 transfer error interrupt. - * @arg DMA1_INT_FLAG_GINT7 : DMA1 Channel7 global interrupt. - * @arg DMA1_INT_FLAG_TC7 : DMA1 Channel7 transfer complete interrupt. - * @arg DMA1_INT_FLAG_HT7 : DMA1 Channel7 half transfer interrupt. - * @arg DMA1_INT_FLAG_TERR7 : DMA1 Channel7 transfer error interrupt. - - * @arg DMA2_INT_FLAG_GINT1 : DMA2 Channel 1 global interrupt. - * @arg DMA2_INT_FLAG_TC1 : DMA2 Channel 1 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT1 : DMA2 Channel 1 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR1 : DMA2 Channel 1 transfer error interrupt. - * @arg DMA2_INT_FLAG_GINT2 : DMA2 Channel 2 global interrupt. - * @arg DMA2_INT_FLAG_TC2 : DMA2 Channel 2 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT2 : DMA2 Channel 2 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR2 : DMA2 Channel 2 transfer error interrupt. - * @arg DMA2_INT_FLAG_GINT3 : DMA2 Channel 3 global interrupt. - * @arg DMA2_INT_FLAG_TC3 : DMA2 Channel 3 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT3 : DMA2 Channel 3 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR3 : DMA2 Channel 3 transfer error interrupt. - * @arg DMA2_INT_FLAG_GINT4 : DMA2 Channel 4 global interrupt. - * @arg DMA2_INT_FLAG_TC4 : DMA2 Channel 4 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT4 : DMA2 Channel 4 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR4 : DMA2 Channel 4 transfer error interrupt. - * @arg DMA2_INT_FLAG_GINT5 : DMA2 Channel 5 global interrupt. - * @arg DMA2_INT_FLAG_TC5 : DMA2 Channel 5 transfer complete interrupt. - * @arg DMA2_INT_FLAG_HT5 : DMA2 Channel 5 half transfer interrupt. - * @arg DMA2_INT_FLAG_TERR5 : DMA2 Channel 5 transfer error interrupt. - * - * @retval None - * - * @note DMA2 Channel only for APM32 High density devices. - */ -void DMA_ClearIntFlag(uint32_t flag) -{ - if((flag & 0x10000000) != RESET) - { - DMA2->INTFCLR = flag; - } else - { - DMA1->INTFCLR = flag; - } -} - -/**@} end of group DMA_Fuctions*/ -/**@} end of group DMA_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dmc.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dmc.c deleted file mode 100644 index b634ae7..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_dmc.c +++ /dev/null @@ -1,464 +0,0 @@ -/*! - * @file apm32f10x_dmc.c - * - * @brief This file contains all the functions for the DMC controler peripheral - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifdef APM32F10X_HD -#include "apm32f10x_dmc.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup DMC_Driver DMC Driver - @{ -*/ - -/** @addtogroup DMC_Fuctions Fuctions - @{ -*/ - -/*! - * @brief DMC controler configuration - * - * @param dmcConfig: pointer to a DMC_Config_T structure - * - * @retval None - */ -void DMC_Config(DMC_Config_T * dmcConfig) -{ - DMC->SW_B.MCSW = 1; - while(!DMC->CTRL1_B.INIT); - - DMC->CFG_B.BAWCFG = dmcConfig->bankWidth; - DMC->CFG_B.RAWCFG = dmcConfig->rowWidth; - DMC->CFG_B.CAWCFG = dmcConfig->colWidth; - - DMC->MASK_B.MSIZESEL = dmcConfig->memorySize; - DMC->CTRL2_B.CPHACFG = dmcConfig->clkPhase; - - DMC_ConfigTiming(&dmcConfig->timing); - - DMC->CTRL1_B.MODESET = 1; - while(!DMC->CTRL1_B.MODESET); - - DMC->CTRL2_B.RDDEN = 1; - DMC->CTRL2_B.RDDCFG = 7; -} - -/*! - * @brief Fills each dmcConfig member with its default value - * - * @param dmcConfig: pointer to a DMC_Config_T structure - * - * @retval None - */ -void DMC_ConfigStructInit(DMC_Config_T * dmcConfig) -{ - dmcConfig->bankWidth = DMC_BANK_WIDTH_2; - dmcConfig->clkPhase = DMC_CLK_PHASE_REVERSE; - dmcConfig->colWidth = DMC_COL_WIDTH_10; - dmcConfig->rowWidth = DMC_ROW_WIDTH_13; - dmcConfig->memorySize = DMC_MEMORY_SIZE_8MB; - - DMC_ConfigTimingStructInit(&dmcConfig->timing); -} - -/*! - * @brief Timing configuration - * - * @param timingConfig: pointer to a DMC_TimingConfig_T structure - * - * @retval None - */ -void DMC_ConfigTiming(DMC_TimingConfig_T * timingConfig) -{ - DMC->TIM0_B.RASMINTSEL = timingConfig->tRAS; - DMC->TIM0_B.DTIMSEL = timingConfig->tRCD; - DMC->TIM0_B.PCPSEL = timingConfig->tRP; - DMC->TIM0_B.WRTIMSEL = timingConfig->tWR; - DMC->TIM0_B.ARPSEL = timingConfig->tARP; - DMC->TIM0_B.ATACP = timingConfig->tCMD; - - DMC->TIM0_B.CASLSEL0 = timingConfig->latencyCAS & 0x03; - DMC->TIM0_B.ECASLSEL1 = (timingConfig->latencyCAS >> 2) & 0x01; - - DMC->TIM0_B.XSR0 = timingConfig->tXSR & 0X0F; - DMC->TIM0_B.EXSR1 = (timingConfig->tXSR >> 4) & 0X1F; - - DMC->REF_B.RCYCCFG = timingConfig->tRFP; -} - -/*! - * @brief Fills each config member with its default value - * - * @param timingConfig: pointer to a DMC_TimingConfig_T structure - * - * @retval None - */ -void DMC_ConfigTimingStructInit(DMC_TimingConfig_T * timingConfig) -{ - timingConfig->latencyCAS = DMC_CAS_LATENCY_3; - timingConfig->tARP = DMC_AUTO_REFRESH_10; - timingConfig->tRAS = DMC_RAS_MINIMUM_5; - timingConfig->tCMD = DMC_ATA_CMD_7; - timingConfig->tRCD = DMC_DELAY_TIME_2; - timingConfig->tRP = DMC_PRECHARGE_2; - timingConfig->tWR = DMC_NEXT_PRECHARGE_2; - timingConfig->tXSR = 6; - timingConfig->tRFP = 0xC3; -} - -/*! - * @brief Set number of bank bits - * - * @param bankWidth: Specifies the bank bits number - * This parameter can be one of the following values: - * @arg DMC_BANK_WIDTH_1 - * @arg DMC_BANK_WIDTH_2 - * @retval None - */ -void DMC_ConfigBankWidth(DMC_BANK_WIDTH_T bankWidth) -{ - DMC->CFG_B.BAWCFG = bankWidth; -} - -/*! - * @brief Set address bus width - * - * @param rowWidth: Specifies the row address bits number - * This parameter can be one of the following values: - * @arg DMC_ROW_WIDTH_11 - * @arg DMC_ROW_WIDTH_12 - * @arg DMC_ROW_WIDTH_13 - * @arg DMC_ROW_WIDTH_14 - * @arg DMC_ROW_WIDTH_15 - * @arg DMC_ROW_WIDTH_16 - * @param colWidth: Specifies the column address bits number - * This parameter can be one of the following values: - * @arg DMC_COL_WIDTH_8 - * @arg DMC_COL_WIDTH_9 - * @arg DMC_COL_WIDTH_10 - * @arg DMC_COL_WIDTH_11 - * @arg DMC_COL_WIDTH_12 - * @arg DMC_COL_WIDTH_13 - * @arg DMC_COL_WIDTH_14 - * @arg DMC_COL_WIDTH_15 - * @retval None - */ -void DMC_ConfigAddrWidth(DMC_ROW_WIDTH_T rowWidth, DMC_COL_WIDTH_T colWidth) -{ - DMC->CFG_B.RAWCFG = rowWidth; - DMC->CFG_B.CAWCFG = colWidth; -} - -/*! - * @brief Set stable time after power up - * - * @param stableTime: Numper of the clock, can be 0x0000 to 0xFFFF - * - * @retval None - */ -void DMC_ConfigStableTimePowerup(uint16_t stableTime) -{ - DMC->TIM1_B.STBTIM = stableTime; -} - -/*! - * @brief Number of auto-refreshes during initialization - * - * @param num: Number of auto-refreshes can 1 to 16 - * This parameter can be one of the following values: - * @arg DMC_AUTO_REFRESH_1 - * @arg DMC_AUTO_REFRESH_2 - * ...... - * @arg DMC_AUTO_REFRESH_15 - * @arg DMC_AUTO_REFRESH_16 - * - * @retval None - */ -void DMC_ConfigAutoRefreshNumDuringInit(DMC_AUTO_REFRESH_T num) -{ - DMC->TIM1_B.ARNUMCFG = num; -} - -/*! - * @brief Number of DMC internal banks to be open at any time; - * - * @param num: Number of banks can 1 to 16 - * This parameter can be one of the following values: - * @arg DMC_BANK_NUMBER_1 - * @arg DMC_BANK_NUMBER_2 - * ...... - * @arg DMC_BANK_NUMBER_15 - * @arg DMC_BANK_NUMBER_16 - * @retval None - */ -void DMC_ConfigOpenBank(DMC_BANK_NUMBER_T num) -{ - DMC->CTRL1_B.BANKNUMCFG = num; -} - -/*! - * @brief Read self-refresh status - * - * @param None - * - * @retval The status of self-refresh (SET or RESET) - */ -uint8_t DMC_ReadSelfRefreshStatus(void) -{ - uint8_t ret; - - ret = DMC->CTRL1_B.SRMFLG ? SET : RESET; - - return ret; -} - -/*! - * @brief Set update mode bit - * - * @param None - * - * @retval None - */ -void DMC_EnableUpdateMode(void) -{ - DMC->CTRL1_B.MODESET = 1; -} - -/*! - * @brief Enter power down mode - * - * @param None - * - * @retval None - */ -void DMC_EnterPowerdownMode(void) -{ - DMC->CTRL1_B.PDMEN = 1; -} - -/*! - * @brief Exit self-refresh mode - * - * @param None - * - * @retval None - */ -void DMC_EixtSlefRefreshMode(void) -{ - DMC->CTRL1_B.SRMEN = 0; -} - -/*! - * @brief Enter self-refresh mode - * - * @param None - * - * @retval None - */ -void DMC_EnterSlefRefreshMode(void) -{ - DMC->CTRL1_B.SRMEN = 1; -} - -/*! - * @brief Enable Accelerate Module - * - * @param None - * - * @retval None - */ -void DMC_EnableAccelerateModule(void) -{ - DMC->CTRL2_B.BUFFEN = BIT_SET; -} - -/*! - * @brief Disable Accelerate Module - * - * @param None - * - * @retval None - */ -void DMC_DisableAccelerateModule(void) -{ - DMC->CTRL2_B.BUFFEN = BIT_RESET; -} - -/*! - * @brief Init DMC - * - * @param None - * - * @retval None - */ -void DMC_EnableInit(void) -{ - DMC->CTRL1_B.INIT = 1; -} - -/*! - * @brief Set refresh type before enter self-refresh - * - * @param refresh: Specifies the refresh type - * The parameter can be one of following values: - * @arg DMC_REFRESH_ROW_ONE: Refresh one row - * @arg DMC_REFRESH_ROW_ALL: Refresh all row - * - * @retval None - */ -void DMC_ConfigFullRefreshBeforeSR(DMC_REFRESH_T refresh) -{ - DMC->CTRL1_B.FRBSREN = refresh; -} - -/*! - * @brief Set refresh type after exit self-refresh - * - * @param refresh: Specifies the refresh type - * The parameter can be one of following values: - * @arg DMC_REFRESH_ROW_ONE: Refresh one row - * @arg DMC_REFRESH_ROW_ALL: Refresh all row - * - * @retval None - */ -void DMC_ConfigFullRefreshAfterSR(DMC_REFRESH_T refresh) -{ - DMC->CTRL1_B.FRASREN = refresh; -} - -/*! - * @brief Config precharge type - * - * @param precharge: Specifies the precharge type - * The parameter can be one of following values: - * @arg DMC_PRECHARGE_IM: Immediate precharge - * @arg DMC_PRECHARGE_DELAY: Delayed precharge - * - * @retval None - */ -void DMC_ConfigPrechargeType(DMC_PRECHARE_T precharge) -{ - DMC->CTRL1_B.PCACFG = precharge; -} - -/*! - * @brief Config refresh period - * - * @param period: Specifies the refresh period, can be 0x0000 to 0xFFFF - * - * @retval None - */ -void DMC_ConfigRefreshPeriod(uint16_t period) -{ - DMC->REF_B.RCYCCFG = period; -} - -/*! - * @brief Config memory size - * - * @param memorySize: Specifies memory size - * The parameter can be one of following values: - * @arg DMC_MEMORY_SIZE_0: Memory size is no link - * @arg DMC_MEMORY_SIZE_64KB: Memory size is 64KB - * @arg DMC_MEMORY_SIZE_128KB: Memory size is 128KB - * @arg DMC_MEMORY_SIZE_256KB: Memory size is 256KB - * @arg DMC_MEMORY_SIZE_512KB: Memory size is 512KB - * @arg DMC_MEMORY_SIZE_1MB: Memory size is 1MB - * @arg DMC_MEMORY_SIZE_2MB: Memory size is 2MB - * @arg DMC_MEMORY_SIZE_4MB: Memory size is 4MB - * @arg DMC_MEMORY_SIZE_8MB: Memory size is 8MB - * @arg DMC_MEMORY_SIZE_16MB: Memory size is 16MB - * @arg DMC_MEMORY_SIZE_32MB: Memory size is 32MB - * @arg DMC_MEMORY_SIZE_64MB: Memory size is 64MB - * @arg DMC_MEMORY_SIZE_128MB: Memory size is 128MB - * @arg DMC_MEMORY_SIZE_256MB: Memory size is 256MB - * - * @retval None - */ -void DMC_ConfigMemorySize(DMC_MEMORY_SIZE_T memorySize) -{ - DMC->MASK_B.MSIZESEL = memorySize; -} - -/*! - * @brief Enable DMC controler - * - * @param None - * - * @retval None - */ -void DMC_Enable(void) -{ - DMC->SW_B.MCSW = 1; -} - -/*! - * @brief Disable DMC controler - * - * @param None - * - * @retval None - */ -void DMC_Disable(void) -{ - DMC->SW_B.MCSW = 0; -} - -/*! - * @brief Set DMC clock phase - * - * @param clkPhase: Specifies clock phase - * The parameter can be one of following values: - * @arg DMC_CLK_PHASE_NORMAL: Clock phase is normal - * @arg DMC_CLK_PHASE_REVERSE: Clock phase is reverse - * - * @retval None - */ -void DMC_ConfigClockPhase(DMC_CLK_PHASE_T clkPhase) -{ - DMC->CTRL2_B.CPHACFG = clkPhase; -} - -/*! - * @brief Set DMC WRAP burst - * - * @param burst: WRAP burst Type Selection - * The parameter can be one of following values: - * @arg DMC_WRAPB_4: wrap4 burst transfer - * @arg DMC_WRAPB_8: wrap8 burst transfer - * - * @retval None - */ -void DMC_ConfigWRAPB(DMC_WRPB_T burst) -{ - DMC->CTRL2_B.WRPBSEL = burst; -} - -#endif //defined APM32F10X_HD - -/**@} end of group DMC_Fuctions*/ -/**@} end of group DMC_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_eint.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_eint.c deleted file mode 100644 index c1cd7d0..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_eint.c +++ /dev/null @@ -1,205 +0,0 @@ -/*! - * @file apm32f10x_eint.c - * - * @brief This file provides all the EINT firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_eint.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup EINT_Driver EINT Driver - @{ -*/ - -/** @addtogroup EINT_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset the EINT peripheral registers to their default reset values. - * - * @param None - * - * @retval None - */ -void EINT_Reset(void) -{ - EINT->IMASK = 0x00000000; - EINT->EMASK = 0x00000000; - EINT->RTEN = 0x00000000; - EINT->FTEN = 0x00000000; - EINT->IPEND = 0x000FFFFF; -} - -/*! - * @brief Configure the EINT - * - * @param eintConfig: pointer to a EINT_Config_T structure. - * - * @retval None - */ -void EINT_Config(EINT_Config_T* eintConfig) -{ - uint32_t temp = 0; - temp = (uint32_t)EINT_BASE; - - if(eintConfig->lineCmd != DISABLE) - { - EINT->IMASK &= ~eintConfig->line; - EINT->EMASK &= ~eintConfig->line; - - temp += eintConfig->mode; - *(__IOM uint32_t *) temp |= eintConfig->line; - - EINT->RTEN &= ~eintConfig->line; - EINT->FTEN &= ~eintConfig->line; - - if (eintConfig->trigger == EINT_TRIGGER_RISING_FALLING) - { - EINT->RTEN |= eintConfig->line; - EINT->FTEN |= eintConfig->line; - } - else - { - temp = (uint32_t)EINT_BASE; - temp += eintConfig->trigger; - - *(__IOM uint32_t *) temp |= eintConfig->line; - } - } - else - { - temp += eintConfig->mode; - - *(__IOM uint32_t *) temp &= ~eintConfig->line; - } -} - -/*! - * @brief Fills each EINT_Config_T member with its reset value. - * - * @param eintConfig: pointer to a EINT_Config_T structure - * - * @retval None - */ -void EINT_ConfigStructInit(EINT_Config_T* eintConfig) -{ - eintConfig->line = EINT_LINENONE; - eintConfig->mode = EINT_MODE_INTERRUPT; - eintConfig->trigger = EINT_TRIGGER_FALLING; - eintConfig->lineCmd = DISABLE; -} - -/*! - * @brief Select Software interrupt on EINT line - * - * @param line: specifies the EINT lines. - * This parameter can be any combination of EINT_LINE_T(can be from 0 to 18) - * - * @retval None - */ -void EINT_SelectSWInterrupt(uint32_t line) -{ - EINT->SWINTE |= line; -} - -/*! - * @brief Read the specified EINT_Line flag - * - * @param line: Select the EINT_Line. - * This parameter can be one of EINT_LINE_T(can be from 0 to 18) - * - * @retval status: The new state of flag (SET or RESET) - */ -uint8_t EINT_ReadStatusFlag(EINT_LINE_T line) -{ - uint8_t status = RESET; - - if((EINT->IPEND & line) != (uint32_t)RESET) - { - status = SET; - } - else - { - status = RESET; - } - return status; -} - -/*! - * @brief Clears the EINT_Line pending bits - * - * @param line: Select the EINT_Line. - * This parameter can be any combination of EINT_LINE_T(can be from 0 to 18) - * - * @retval None - */ -void EINT_ClearStatusFlag(uint32_t line) -{ - EINT->IPEND = line; -} - -/*! - * @brief Read the specified EINT_Line Interrupt Flag. - * - * @param line: Select the EINT_Line. - * This parameter can be one of EINT_LINE_T(can be from 0 to 18) - * - * @retval None - */ -uint8_t EINT_ReadIntFlag(EINT_LINE_T line) -{ - uint8_t status = RESET; - uint32_t enablestatus = 0; - - enablestatus = EINT->IMASK & line; - - if((EINT->IPEND & line) != ((uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) - { - status = SET; - } - else - { - status = RESET; - } - return status; -} - -/*! - * @brief Clears the EINT_Line pending bits - * - * @param line: Select the EINT_Line - * This parameter can be any combination of EINT_LINE_T(can be from 0 to 18) - * - * @retval None - */ -void EINT_ClearIntFlag(uint32_t line) -{ - EINT->IPEND = line; -} - -/**@} end of group EINT_Fuctions*/ -/**@} end of group EINT_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_emmc.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_emmc.c deleted file mode 100644 index 77e020a..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_emmc.c +++ /dev/null @@ -1,747 +0,0 @@ -/*! - * @file apm32f10x_emmc.c - * - * @brief This file provides all the EMMC firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_emmc.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup EMMC_Driver EMMC Driver - @{ -*/ - -/** @addtogroup EMMC_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Rest the EMMMC NOR/SRAM Banks registers - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK1_NORSRAM_1: EMMC Bank1 NOR/SRAM1 - * @arg EMMC_BANK1_NORSRAM_2: EMMC Bank1 NOR/SRAM2 - * @arg EMMC_BANK1_NORSRAM_3: EMMC Bank1 NOR/SRAM3 - * @arg EMMC_BANK1_NORSRAM_4: EMMC Bank1 NOR/SRAM4 - * - * @retval None - */ -void EMMC_ResetNORSRAM(EMMC_BANK1_NORSRAM_T bank) -{ - /** EMMC_BANK1_NORSRAM_1 */ - if(bank == EMMC_BANK1_NORSRAM_1) - { - EMMC_Bank1->SNCTRL_T[bank] = 0x000030DB; - } - /** EMMC_BANK1_NORSRAM_2, EMMC_BANK1_NORSRAM_3 or EMMC_BANK1_NORSRAM_4 */ - else - { - EMMC_Bank1->SNCTRL_T[bank] = 0x000030D2; - } - EMMC_Bank1->SNCTRL_T[bank + 1] = 0x0FFFFFFF; - EMMC_Bank1E->WRTTIM[bank] = 0x0FFFFFFF; -} - -/*! - * @brief Rest the EMMMC NAND Banks registers - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND: FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND: FSMC Bank3 NAND - * - * @retval None - */ -void EMMC_ResetNAND(EMMC_BANK_NAND_T bank) -{ - if(bank == EMMC_BANK2_NAND) - { - /** Set the EMMC_Bank2 registers to their reset values */ - EMMC_Bank2->CTRL2 = 0x00000018; - EMMC_Bank2->STSINT2 = 0x00000040; - EMMC_Bank2->CMSTIM2 = 0xFCFCFCFC; - EMMC_Bank2->AMSTIM2 = 0xFCFCFCFC; - } - /** EMMC_BANK3_NAND */ - else - { - /** Set the EMMC_Bank3 registers to their reset values */ - EMMC_Bank3->CTRL3 = 0x00000018; - EMMC_Bank3->STSINT3 = 0x00000040; - EMMC_Bank3->CMSTIM3 = 0xFCFCFCFC; - EMMC_Bank3->AMSTIM3 = 0xFCFCFCFC; - } -} - -/*! - * @brief Reset the EMMMC PCCARD Banks registers - * - * @param None - * - * @retval None - */ -void EMMC_ResetPCCard(void) -{ - /** Set the EMMC_Bank4 registers to their reset values */ - EMMC_Bank4->CTRL4 = 0x00000018; - EMMC_Bank4->STSINT4 = 0x00000040; - EMMC_Bank4->CMSTIM4 = 0xFCFCFCFC; - EMMC_Bank4->AMSTIM4 = 0xFCFCFCFC; - EMMC_Bank4->IOSTIM4 = 0xFCFCFCFC; -} - -/*! - * @brief Config the EMMC NOR/SRAM Banks according to the specified parameters in the emmcNORSRAMConfig. - * - * @param emmcNORSRAMConfig: Point to a EMMC_NORSRAMConfig_T structure - * - * @retval None - */ -void EMMC_ConfigNORSRAM(EMMC_NORSRAMConfig_T* emmcNORSRAMConfig) -{ - /** Bank1 NOR/SRAM control register configuration */ - EMMC_Bank1->SNCTRL_T[emmcNORSRAMConfig->bank] = - (uint32_t)emmcNORSRAMConfig->dataAddressMux | - emmcNORSRAMConfig->memoryType | - emmcNORSRAMConfig->memoryDataWidth | - emmcNORSRAMConfig->burstAcceesMode | - emmcNORSRAMConfig->asynchronousWait | - emmcNORSRAMConfig->waitSignalPolarity | - emmcNORSRAMConfig->wrapMode | - emmcNORSRAMConfig->waitSignalActive | - emmcNORSRAMConfig->writeOperation | - emmcNORSRAMConfig->waiteSignal | - emmcNORSRAMConfig->extendedMode | - emmcNORSRAMConfig->writeBurst; - - if(emmcNORSRAMConfig->memoryType == EMMC_MEMORY_TYPE_NOR) - { - EMMC_Bank1->SNCTRL_T[emmcNORSRAMConfig->bank] |= 0x00000040; - } - - /** Bank1 NOR/SRAM timing register configuration */ - EMMC_Bank1->SNCTRL_T[emmcNORSRAMConfig->bank + 1] = - (uint32_t)emmcNORSRAMConfig->readWriteTimingStruct->addressSetupTime | - (emmcNORSRAMConfig->readWriteTimingStruct->addressHodeTime << 4) | - (emmcNORSRAMConfig->readWriteTimingStruct->dataSetupTime << 8) | - (emmcNORSRAMConfig->readWriteTimingStruct->busTurnaroundTime << 16) | - (emmcNORSRAMConfig->readWriteTimingStruct->clockDivision << 20) | - (emmcNORSRAMConfig->readWriteTimingStruct->dataLatency << 24) | - emmcNORSRAMConfig->readWriteTimingStruct->accessMode; - - /** Bank1 NOR/SRAM timing register for write configuration, if extended mode is used */ - if(emmcNORSRAMConfig->extendedMode == EMMC_EXTENDEN_MODE_ENABLE) - { - EMMC_Bank1E->WRTTIM[emmcNORSRAMConfig->bank] = - (uint32_t)emmcNORSRAMConfig->writeTimingStruct->addressSetupTime | - (emmcNORSRAMConfig->writeTimingStruct->addressHodeTime << 4) | - (emmcNORSRAMConfig->writeTimingStruct->dataSetupTime << 8) | - (emmcNORSRAMConfig->writeTimingStruct->clockDivision << 20) | - (emmcNORSRAMConfig->writeTimingStruct->dataLatency << 24) | - emmcNORSRAMConfig->writeTimingStruct->accessMode; - } - else - { - EMMC_Bank1E->WRTTIM[emmcNORSRAMConfig->bank] = 0x0FFFFFFF; - } -} - -/*! - * @brief Config the EMMC NAND Banks according to the specified parameters in the emmcNANDConfig. - * - * @param emmcNANDConfig : Point to a EMMC_NANDConfig_T structure. - * - * @retval None - */ -void EMMC_ConfigNAND(EMMC_NANDConfig_T* emmcNANDConfig) -{ - uint32_t tmppcr = 0x00000000, tmppmem = 0x00000000, tmppatt = 0x00000000; - - /** Set the tmppcr value according to EMMC_NANDInitStruct parameters */ - tmppcr = (uint32_t)emmcNANDConfig->waitFeature | 0x00000008 | - emmcNANDConfig->memoryDataWidth | - emmcNANDConfig->ECC | - emmcNANDConfig->ECCPageSize | - (emmcNANDConfig->TCLRSetupTime << 9) | - (emmcNANDConfig->TARSetupTime << 13); - - /** Set tmppmem value according to EMMC_CommonSpaceTimingStructure parameters */ - tmppmem = (uint32_t)emmcNANDConfig->commonSpaceTimingStruct->setupTime | - (emmcNANDConfig->commonSpaceTimingStruct->waitSetupTime << 8) | - (emmcNANDConfig->commonSpaceTimingStruct->holdSetupTime << 16) | - (emmcNANDConfig->commonSpaceTimingStruct->HiZSetupTime << 24); - - /** Set tmppatt value according to EMMC_AttributeSpaceTimingStructure parameters */ - tmppatt = (uint32_t)emmcNANDConfig->attributeSpaceTimingStruct->setupTime | - (emmcNANDConfig->attributeSpaceTimingStruct->waitSetupTime << 8) | - (emmcNANDConfig->attributeSpaceTimingStruct->holdSetupTime << 16) | - (emmcNANDConfig->attributeSpaceTimingStruct->HiZSetupTime << 24); - - if(emmcNANDConfig->bank == EMMC_BANK2_NAND) - { - /** EMMC_BANK2_NAND registers configuration */ - EMMC_Bank2->CTRL2 = tmppcr; - EMMC_Bank2->CMSTIM2 = tmppmem; - EMMC_Bank2->AMSTIM2 = tmppatt; - } - else - { - /** EMMC_BANK3_NAND registers configuration */ - EMMC_Bank3->CTRL3 = tmppcr; - EMMC_Bank3->CMSTIM3 = tmppmem; - EMMC_Bank3->AMSTIM3 = tmppatt; - } - -} - -/*! - * @brief Config the EMMC PCCARD according to the specified parameters in the emmcPCCardConfig. - * - * @param emmcPCCardConfig: Point to a EMMC_PCCARDConfig_T structure. - * - * @retval None - */ -void EMMC_ConfigPCCard(EMMC_PCCARDConfig_T* emmcPCCardConfig) -{ - /** Set the PCR4 register value according to EMMC_PCCARDInitStruct parameters */ - EMMC_Bank4->CTRL4 = (uint32_t)emmcPCCardConfig->waitFeature | EMMC_MEMORY_DATA_WIDTH_16BIT | - (emmcPCCardConfig->TCLRSetupTime << 9) | - (emmcPCCardConfig->TARSetupTime << 13); - - /** Set PMEM4 register value according to EMMC_CommonSpaceTimingStructure parameters */ - EMMC_Bank4->CMSTIM4 = (uint32_t)emmcPCCardConfig->commonSpaceTimingStruct->setupTime | - (emmcPCCardConfig->commonSpaceTimingStruct->waitSetupTime << 8) | - (emmcPCCardConfig->commonSpaceTimingStruct->holdSetupTime << 16) | - (emmcPCCardConfig->commonSpaceTimingStruct->HiZSetupTime << 24); - - /** Set PATT4 register value according to EMMC_AttributeSpaceTimingStructure parameters */ - EMMC_Bank4->AMSTIM4 = (uint32_t)emmcPCCardConfig->attributeSpaceTimingStruct->setupTime | - (emmcPCCardConfig->attributeSpaceTimingStruct->waitSetupTime << 8) | - (emmcPCCardConfig->attributeSpaceTimingStruct->holdSetupTime << 16) | - (emmcPCCardConfig->attributeSpaceTimingStruct->HiZSetupTime << 24); - - /** Set PIO4 register value according to EMMC_IOSpaceTimingStructure parameters */ - EMMC_Bank4->IOSTIM4 = (uint32_t)emmcPCCardConfig->IOSpaceTimingStruct->setupTime | - (emmcPCCardConfig->IOSpaceTimingStruct->waitSetupTime << 8) | - (emmcPCCardConfig->IOSpaceTimingStruct->holdSetupTime << 16) | - (emmcPCCardConfig->IOSpaceTimingStruct->HiZSetupTime << 24); -} - -/*! - * @brief Fills each emmcNORSRAMConfig member with its default value. - * - * @param emmcNORSRAMConfig : Point to a EMMC_NORSRAMConfig_T structure. - * - * @retval None - */ -void EMMC_ConfigNORSRAMStructInit(EMMC_NORSRAMConfig_T* emmcNORSRAMConfig) -{ - /** Reset NOR/SRAM Init structure parameters values */ - emmcNORSRAMConfig->bank = EMMC_BANK1_NORSRAM_1; - emmcNORSRAMConfig->dataAddressMux = EMMC_DATA_ADDRESS_MUX_ENABLE; - emmcNORSRAMConfig->memoryType = EMMC_MEMORY_TYPE_SRAM; - emmcNORSRAMConfig->memoryDataWidth = EMMC_MEMORY_DATA_WIDTH_8BIT; - emmcNORSRAMConfig->burstAcceesMode = EMMC_BURST_ACCESS_MODE_DISABLE; - emmcNORSRAMConfig->asynchronousWait = EMMC_ASYNCHRONOUS_WAIT_DISABLE; - emmcNORSRAMConfig->waitSignalPolarity = EMMC_WAIT_SIGNAL_POLARITY_LOW; - emmcNORSRAMConfig->wrapMode = EMMC_WRAP_MODE_DISABLE; - emmcNORSRAMConfig->waitSignalActive = EMMC_WAIT_SIGNAL_ACTIVE_BEFORE_WAIT; - emmcNORSRAMConfig->writeOperation = EMMC_WRITE_OPERATION_ENABLE; - emmcNORSRAMConfig->waiteSignal = EMMC_WAITE_SIGNAL_ENABLE; - emmcNORSRAMConfig->extendedMode = EMMC_EXTENDEN_MODE_DISABLE; - emmcNORSRAMConfig->writeBurst = EMMC_WRITE_BURST_DISABLE; - emmcNORSRAMConfig->readWriteTimingStruct->addressSetupTime = 0xF; - emmcNORSRAMConfig->readWriteTimingStruct->addressHodeTime = 0xF; - emmcNORSRAMConfig->readWriteTimingStruct->dataSetupTime = 0xFF; - emmcNORSRAMConfig->readWriteTimingStruct->busTurnaroundTime = 0xF; - emmcNORSRAMConfig->readWriteTimingStruct->clockDivision = 0xF; - emmcNORSRAMConfig->readWriteTimingStruct->dataLatency = 0xF; - emmcNORSRAMConfig->readWriteTimingStruct->accessMode = EMMC_ACCESS_MODE_A; - emmcNORSRAMConfig->writeTimingStruct->addressSetupTime = 0xF; - emmcNORSRAMConfig->writeTimingStruct->addressHodeTime = 0xF; - emmcNORSRAMConfig->writeTimingStruct->dataSetupTime = 0xFF; - emmcNORSRAMConfig->writeTimingStruct->busTurnaroundTime = 0xF; - emmcNORSRAMConfig->writeTimingStruct->clockDivision = 0xF; - emmcNORSRAMConfig->writeTimingStruct->dataLatency = 0xF; - emmcNORSRAMConfig->writeTimingStruct->accessMode = EMMC_ACCESS_MODE_A; - -} - -/*! - * @brief Fills each emmcNANDConfig member with its default value. - * - * @param emmcNANDConfig : Point to a EMMC_NANDConfig_T structure. - * - * @retval None - */ -void EMMC_ConfigNANDStructInit(EMMC_NANDConfig_T* emmcNANDConfig) -{ - /** Reset NAND Init structure parameters values */ - emmcNANDConfig->bank = EMMC_BANK2_NAND; - emmcNANDConfig->waitFeature = EMMC_WAIT_FEATURE_DISABLE; - emmcNANDConfig->memoryDataWidth = EMMC_MEMORY_DATA_WIDTH_8BIT; - emmcNANDConfig->ECC = EMMC_ECC_DISABLE; - emmcNANDConfig->ECCPageSize = EMMC_ECC_PAGE_SIZE_BYTE_256; - emmcNANDConfig->TCLRSetupTime = 0x0; - emmcNANDConfig->TARSetupTime = 0x0; - emmcNANDConfig->commonSpaceTimingStruct->setupTime = 0xFC; - emmcNANDConfig->commonSpaceTimingStruct->waitSetupTime = 0xFC; - emmcNANDConfig->commonSpaceTimingStruct->holdSetupTime = 0xFC; - emmcNANDConfig->commonSpaceTimingStruct->HiZSetupTime = 0xFC; - emmcNANDConfig->attributeSpaceTimingStruct->setupTime = 0xFC; - emmcNANDConfig->attributeSpaceTimingStruct->waitSetupTime = 0xFC; - emmcNANDConfig->attributeSpaceTimingStruct->holdSetupTime = 0xFC; - emmcNANDConfig->attributeSpaceTimingStruct->HiZSetupTime = 0xFC; -} - -/*! - * @brief Fills each emmcPCCardConfig member with its default value. - * - * @param emmcPCCardConfig : Point to a EMMC_PCCARDConfig_T structure. - * - * @retval None - */ -void EMMC_ConfigPCCardStructInit(EMMC_PCCARDConfig_T* emmcPCCardConfig) -{ - /** Reset PCCARD Init structure parameters values */ - emmcPCCardConfig->waitFeature = EMMC_WAIT_FEATURE_DISABLE; - emmcPCCardConfig->TCLRSetupTime = 0x0; - emmcPCCardConfig->TARSetupTime = 0x0; - emmcPCCardConfig->commonSpaceTimingStruct->setupTime = 0xFC; - emmcPCCardConfig->commonSpaceTimingStruct->waitSetupTime = 0xFC; - emmcPCCardConfig->commonSpaceTimingStruct->holdSetupTime = 0xFC; - emmcPCCardConfig->commonSpaceTimingStruct->HiZSetupTime = 0xFC; - emmcPCCardConfig->attributeSpaceTimingStruct->setupTime = 0xFC; - emmcPCCardConfig->attributeSpaceTimingStruct->waitSetupTime = 0xFC; - emmcPCCardConfig->attributeSpaceTimingStruct->holdSetupTime = 0xFC; - emmcPCCardConfig->attributeSpaceTimingStruct->HiZSetupTime = 0xFC; - emmcPCCardConfig->IOSpaceTimingStruct->setupTime = 0xFC; - emmcPCCardConfig->IOSpaceTimingStruct->waitSetupTime = 0xFC; - emmcPCCardConfig->IOSpaceTimingStruct->holdSetupTime = 0xFC; - emmcPCCardConfig->IOSpaceTimingStruct->HiZSetupTime = 0xFC; -} - -/*! - * @brief Enables the specified NOR/SRAM Memory Bank. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK1_NORSRAM_1: EMMC Bank1 NOR/SRAM1 - * @arg EMMC_BANK1_NORSRAM_2: EMMC Bank1 NOR/SRAM2 - * @arg EMMC_BANK1_NORSRAM_3: EMMC Bank1 NOR/SRAM3 - * @arg EMMC_BANK1_NORSRAM_4: EMMC Bank1 NOR/SRAM4 - * - * @retval None - */ -void EMMC_EnableNORSRAM(EMMC_BANK1_NORSRAM_T bank) -{ - EMMC_Bank1->SNCTRL_T[bank] |= 0x00000001; -} - -/*! - * @brief Disbles the specified NOR/SRAM Memory Bank. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK1_NORSRAM_1: EMMC Bank1 NOR/SRAM1 - * @arg EMMC_BANK1_NORSRAM_2: EMMC Bank1 NOR/SRAM2 - * @arg EMMC_BANK1_NORSRAM_3: EMMC Bank1 NOR/SRAM3 - * @arg EMMC_BANK1_NORSRAM_4: EMMC Bank1 NOR/SRAM4 - * - * @retval None - */ -void EMMC_DisableNORSRAM(EMMC_BANK1_NORSRAM_T bank) -{ - EMMC_Bank1->SNCTRL_T[bank] &= 0x000FFFFE; -} - -/*! - * @brief Enables the specified NAND Memory Bank. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND: FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND: FSMC Bank3 NAND - * - * @retval None - */ -void EMMC_EnableNAND(EMMC_BANK_NAND_T bank) -{ - if(bank == EMMC_BANK2_NAND) - { - EMMC_Bank2->CTRL2_B.MBKEN = BIT_SET; - } - else - { - EMMC_Bank3->CTRL3_B.MBKEN = BIT_SET; - } -} - -/*! - * @brief Disbles the specified NAND Memory Bank. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND: FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND: FSMC Bank3 NAND - * - * @retval None - */ -void EMMC_DisableNAND(EMMC_BANK_NAND_T bank) -{ - if(bank == EMMC_BANK2_NAND) - { - EMMC_Bank2->CTRL2_B.MBKEN = BIT_RESET; - } - else - { - EMMC_Bank3->CTRL3_B.MBKEN = BIT_RESET; - } -} - -/*! - * @brief Enables the specified PC Card Memory Bank. - * - * @param None - * - * @retval None - */ -void EMMC_EnablePCCARD(void) -{ - EMMC_Bank4->CTRL4_B.MBKEN = BIT_SET; -} - -/*! - * @brief Disables the specified PC Card Memory Bank. - * - * @param None - * - * @retval None - */ -void EMMC_DisablePCCARD(void) -{ - EMMC_Bank4->CTRL4_B.MBKEN = BIT_RESET; -} - -/*! - * @brief Enbles the EMMC NAND ECC feature. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND: FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND: FSMC Bank3 NAND - * - * @retval None - */ -void EMMC_EnableNANDECC(EMMC_BANK_NAND_T bank) -{ - if(bank == EMMC_BANK2_NAND) - { - EMMC_Bank2->CTRL2 |= 0x00000040; - } - else - { - EMMC_Bank3->CTRL3 |= 0x00000040; - } -} - -/*! - * @brief Disbles or disables the EMMC NAND ECC feature. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND: FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND: FSMC Bank3 NAND - * - * @retval None - * - */ -void EMMC_DisableNANDECC(EMMC_BANK_NAND_T bank) -{ - if(bank == EMMC_BANK2_NAND) - { - EMMC_Bank2->CTRL2 &= 0x000FFFBF; - } - else - { - EMMC_Bank3->CTRL3 &= 0x000FFFBF; - } -} - -/*! - * @brief Read the error correction code register value. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND: FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND: FSMC Bank3 NAND - * - * @retval The value of Error Correction Code (ECC). - */ -uint32_t EMMC_ReadECC(EMMC_BANK_NAND_T bank) -{ - uint32_t eccval = 0x00000000; - - if(bank == EMMC_BANK2_NAND) - { - eccval = EMMC_Bank2->ECCRS2; - } - else - { - eccval = EMMC_Bank3->ECCRS3; - } - return eccval; -} - -/*! - * @brief Enables the specified EMMC interrupts. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND : FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND : FSMC Bank3 NAND - * @arg EMMC_BANK4_PCCARD: FSMC Bank4 PCCARD - * - * @param interrupt: Select the EMMC interrupt sources. - * This parameter can be any combination of the following values: - * @arg EMMC_INT_EDGE_RISING : Rising edge detection interrupt. - * @arg EMMC_INT_LEVEL_HIGH : High level detection interrupt. - * @arg EMMC_INT_EDGE_FALLING: Falling edge detection interrupt. - * - * @retval None - */ -void EMMC_EnableInterrupt(EMMC_BANK_NAND_T bank, uint32_t interrupt) -{ - if(bank == EMMC_BANK2_NAND) - { - EMMC_Bank2->STSINT2 |= interrupt; - } - else if(bank == EMMC_BANK3_NAND) - { - EMMC_Bank3->STSINT3 |= interrupt; - } - else - { - EMMC_Bank4->STSINT4 |= interrupt; - } -} - -/*! - * @brief Enables the specified EMMC interrupts. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND : FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND : FSMC Bank3 NAND - * @arg EMMC_BANK4_PCCARD: FSMC Bank4 PCCARD - * - * @param interrupt: Select the EMMC interrupt sources. - * This parameter can be any combination of the following values: - * @arg EMMC_INT_EDGE_RISING : Rising edge detection interrupt. - * @arg EMMC_INT_LEVEL_HIGH : High level edge detection interrupt. - * @arg EMMC_INT_EDGE_FALLING: Falling edge detection interrupt. - * - * @retval None - */ -void EMMC_DisableInterrupt(EMMC_BANK_NAND_T bank, uint32_t interrupt) -{ - if(bank == EMMC_BANK2_NAND) - { - EMMC_Bank2->STSINT2 &= ~interrupt; - } - else if(bank == EMMC_BANK3_NAND) - { - EMMC_Bank3->STSINT3 &= ~interrupt; - } - else - { - EMMC_Bank4->STSINT4 &= ~interrupt; - } -} - -/*! - * @brief Read the status of specified EMMC flag. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND : FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND : FSMC Bank3 NAND - * @arg EMMC_BANK4_PCCARD: FSMC Bank4 PCCARD - * - * @param flag: Select the EMMC interrupt sources. - * This parameter can be one of the following values: - * @arg EMMC_FLAG_EDGE_RISING : Rising egde detection Flag. - * @arg EMMC_FLAG_LEVEL_HIGH : High level detection Flag. - * @arg EMMC_FLAG_EDGE_FALLING: Falling egde detection Flag. - * @arg EMMC_FLAG_FIFO_EMPTY : FIFO empty Flag. - * - * @retval SET or RESET - * - */ -uint8_t EMMC_ReadStatusFlag(EMMC_BANK_NAND_T bank, EMMC_FLAG_T flag) -{ - uint32_t tmpsr = 0x00000000; - - if(bank == EMMC_BANK2_NAND) - { - tmpsr = EMMC_Bank2->STSINT2; - } - else if(bank == EMMC_BANK3_NAND) - { - tmpsr = EMMC_Bank3->STSINT3; - } - else - { - tmpsr = EMMC_Bank4->STSINT4; - } - /** Get the flag status */ - if((tmpsr & flag) != RESET) - { - return SET; - } - else - { - return RESET; - } -} - -/*! - * @brief Clears the EMMC's pending flags. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND : FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND : FSMC Bank3 NAND - * @arg EMMC_BANK4_PCCARD: FSMC Bank4 PCCARD - * - * @param flag: Select the EMMC interrupt sources. - * This parameter can be any combination of the following values: - * @arg EMMC_FLAG_EDGE_RISING : Rising egde detection Flag. - * @arg EMMC_FLAG_LEVEL_HIGH : High level detection Flag. - * @arg EMMC_FLAG_EDGE_FALLING: Falling egde detection Flag. - * - * @retval None - */ -void EMMC_ClearStatusFlag(EMMC_BANK_NAND_T bank, uint32_t flag) -{ - if(bank == EMMC_BANK2_NAND) - { - EMMC_Bank2->STSINT2 &= ~flag; - } - else if(bank == EMMC_BANK3_NAND) - { - EMMC_Bank3->STSINT3 &= ~flag; - } - else - { - EMMC_Bank4->STSINT4 &= ~flag; - } -} - -/*! - * @brief Read the specified EMMC interrupt has occurred or not. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND : FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND : FSMC Bank3 NAND - * @arg EMMC_BANK4_PCCARD: FSMC Bank4 PCCARD - * - * @param interrupt: Select the EMMC interrupt source. - * This parameter can be one of the following values: - * @arg EMMC_INT_EDGE_RISING : Rising edge detection interrupt. - * @arg EMMC_INT_LEVEL_HIGH : High level edge detection interrupt. - * @arg EMMC_INT_EDGE_FALLING: Falling edge detection interrupt. - * - * @retval The status of specified EMMC interrupt source. - */ -uint8_t EMMC_ReadIntFlag(EMMC_BANK_NAND_T bank, EMMC_INT_T flag) -{ - uint32_t tmpsr = 0x0, itstatus = 0x0, itenable = 0x0; - - if(bank == EMMC_BANK2_NAND) - { - tmpsr = EMMC_Bank2->STSINT2; - } - else if(bank == EMMC_BANK3_NAND) - { - tmpsr = EMMC_Bank3->STSINT3; - } - else - { - tmpsr = EMMC_Bank4->STSINT4; - } - - itstatus = tmpsr & flag; - itenable = tmpsr & (flag >> 3); - - if((itstatus != RESET) && (itenable != RESET)) - { - return SET; - } - else - { - return RESET; - } -} - -/*! - * @brief Clears the EMMC's interrupt Flag. - * - * @param bank: Selects the EMMMC Bank. - * The parameter can be one of following values: - * @arg EMMC_BANK2_NAND : FSMC Bank2 NAND - * @arg EMMC_BANK3_NAND : FSMC Bank3 NAND - * @arg EMMC_BANK4_PCCARD: FSMC Bank4 PCCARD - * - * @param interrupt: Select the EMMC interrupt sources. - * This parameter can be any combination of the following values: - * @arg EMMC_INT_EDGE_RISING : Rising edge detection interrupt. - * @arg EMMC_INT_LEVEL_HIGH : High level edge detection interrupt. - * @arg EMMC_INT_EDGE_FALLING: Falling edge detection interrupt. - * - * @retval None - */ -void EMMC_ClearIntFlag(EMMC_BANK_NAND_T bank, uint32_t flag) -{ - if(bank == EMMC_BANK2_NAND) - { - EMMC_Bank2->STSINT2 &= ~(flag >> 3); - } - else if(bank == EMMC_BANK3_NAND) - { - EMMC_Bank3->STSINT3 &= ~(flag >> 3); - } - else - { - EMMC_Bank4->STSINT4 &= ~(flag >> 3); - } -} - -/**@} end of group EMMC_Fuctions*/ -/**@} end of group EMMC_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_fmc.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_fmc.c deleted file mode 100644 index c9bad09..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_fmc.c +++ /dev/null @@ -1,768 +0,0 @@ -/*! - * @file apm32f10x_fmc.c - * - * @brief This file provides all the FMC firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_fmc.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup FMC_Driver FMC Driver - @{ -*/ - -/** @addtogroup FMC_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Configs the code latency value. - * - * @param latency: the FMC Latency value. - * - * @retval None - */ -void FMC_ConfigLatency(FMC_LATENCY_T latency) -{ - FMC->CTRL1_B.WS = latency; -} - -/*! - * @brief Enables the Half cycle flash access. - * - * @param None - * - * @retval None - */ -void FMC_EnableHalfCycleAccess(void) -{ - FMC->CTRL1_B.HCAEN = BIT_SET; -} - -/*! - * @brief Disable the Half cycle flash access. - * - * @param None - * - * @retval None - */ -void FMC_DisableHalfCycleAccess(void) -{ - FMC->CTRL1_B.HCAEN = BIT_RESET; -} - -/*! - * @brief Enables the Prefetch Buffer. - * - * @param None - * - * @retval None - */ -void FMC_EnablePrefetchBuffer(void) -{ - FMC->CTRL1_B.PBEN = ENABLE; -} - -/*! - * @brief Disables the Prefetch Buffer. - * - * @param None - * - * @retval None - */ -void FMC_DisablePrefetchBuffer(void) -{ - FMC->CTRL1_B.PBEN = DISABLE; -} - -/*! - * @brief Unlocks the FMC Program Erase Controller - * - * @param None - * - * @retval None - */ -void FMC_Unlock(void) -{ - FMC->KEY = 0x45670123; - FMC->KEY = 0xCDEF89AB; -} - -/*! - * @brief Locks the FMC Program Erase Controller. - * - * @param None - * - * @retval None - */ -void FMC_Lock(void) -{ - FMC->CTRL2_B.LOCK = BIT_SET; -} - -/*! - * @brief Erases a specified FMC page. - * - * @param pageAddr: The page address to be erased. - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_BUSY - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_ErasePage(uint32_t pageAddr) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - status = FMC_WaitForLastOperation(0x000B0000); - if(status == FMC_STATUS_COMPLETE) - { - FMC->CTRL2_B.PAGEERA = BIT_SET; - FMC->ADDR = pageAddr; - FMC->CTRL2_B.STA = BIT_SET; - - status = FMC_WaitForLastOperation(0x000B0000); - FMC->CTRL2_B.PAGEERA = BIT_RESET; - } - return status; -} - -/*! - * @brief Erases all FMC pages. - * - * @param None - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_EraseAllPage(void) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - status = FMC_WaitForLastOperation(0x000B0000); - if(status == FMC_STATUS_COMPLETE) - { - FMC->CTRL2_B.MASSERA = BIT_SET; - FMC->CTRL2_B.STA = BIT_SET; - - status = FMC_WaitForLastOperation(0x000B0000); - FMC->CTRL2_B.MASSERA = BIT_RESET; - } - return status; -} - -/*! - * @brief Erases the FMC option bytes. - * - * @param None - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_EraseOptionBytes(void) -{ - uint16_t rdtemp = 0x00A5; - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - if(FMC_GetReadProtectionStatus() != RESET) - { - rdtemp = 0x00; - } - status = FMC_WaitForLastOperation(0x000B0000); - if(status == FMC_STATUS_COMPLETE) - { - FMC->OBKEY = 0x45670123; - FMC->OBKEY = 0xCDEF89AB; - - FMC->CTRL2_B.OBE = BIT_SET; - FMC->CTRL2_B.STA = BIT_SET; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->CTRL2_B.OBE = BIT_RESET; - FMC->CTRL2_B.OBP = BIT_SET; - OB->RDP = rdtemp; - status = FMC_WaitForLastOperation(0x000B0000); - if(status != FMC_STATUS_TIMEOUT) - { - FMC->CTRL2_B.OBP = BIT_RESET; - } - } - else if(status != FMC_STATUS_TIMEOUT) - { - FMC->CTRL2_B.OBP = BIT_RESET; - } - } - return status; -} - -/*! - * @brief Programs a word at a specified address. - * - * @param address:the address to be programmed. - * - * @param data: the data to be programmed. - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_ProgramWord(uint32_t address, uint32_t data) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - __IOM uint32_t temp = 0; - - #ifdef APM32F10X_HD - __set_PRIMASK(1); - #endif - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->CTRL2_B.PG = BIT_SET; - - *(__IOM uint16_t *)address = data; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - temp = address + 2; - - *(__IOM uint16_t*) temp = data >> 16; - - status = FMC_WaitForLastOperation(0x000B0000); - FMC->CTRL2_B.PG = BIT_RESET; - } - else - { - FMC->CTRL2_B.PG = BIT_RESET; - } - } - - #ifdef APM32F10X_HD - __set_PRIMASK(0); - #endif - - return status; -} - -/*! - * @brief Programs a half word at a specified address. - * - * @param address:the address to be programmed. - * - * @param data: the data to be programmed. - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_ProgramHalfWord(uint32_t address, uint16_t data) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - #ifdef APM32F10X_HD - __set_PRIMASK(1); - #endif - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->CTRL2_B.PG = BIT_SET; - *(__IOM uint16_t *)address = data; - status = FMC_WaitForLastOperation(0x000B0000); - FMC->CTRL2_B.PG = BIT_RESET; - } - - #ifdef APM32F10X_HD - __set_PRIMASK(0); - #endif - - return status; -} - -/*! - * @brief Programs a half word at a specified Option Byte Data address. - * - * @param address:the address to be programmed. - * - * @param data: the data to be programmed. - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_ProgramOptionByteData(uint32_t address, uint8_t data) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->OBKEY = 0x45670123; - FMC->OBKEY = 0xCDEF89AB; - - FMC->CTRL2_B.OBP = BIT_SET; - *(__IOM uint16_t *)address = data; - status = FMC_WaitForLastOperation(0x000B0000); - if(status == FMC_STATUS_TIMEOUT) - { - FMC->CTRL2_B.OBP = BIT_RESET; - } - } - return status; -} - -/*! - * @brief Write protects the desired pages - * - * @param page:the address of the pages to be write protection - * This parameter can be any combination of the following values: - * for APM32F10X_LD - * @arg FLASH_WRP_PAGE_0_3 to FLASH_WRP_PAGE_28_31 - * for APM32F10X_MD - * @arg FLASH_WRP_PAGE_0_3 to FLASH_WRP_PAGE_124_127 - * for APM32F10X_HD - * @arg FLASH_WRP_PAGE_0_1 to FLASH_WRP_PAGE_60_61 or FLASH_WRP_PAGE_62_127 - * @arg FMC_WRP_PAGE_ALL - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_EnableWriteProtection(uint32_t page) -{ - uint16_t WPP0_Data = 0xFFFF, WPP1_Data = 0xFFFF, WPP2_Data = 0xFFFF, WPP3_Data = 0xFFFF; - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - page = ~page; - WPP0_Data = (page & 0x000000FF); - WPP1_Data = (page & 0x0000FF00) >> 8; - WPP2_Data = (page & 0x00FF0000) >> 16; - WPP3_Data = (page & 0xFF000000) >> 24; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->OBKEY = 0x45670123; - FMC->OBKEY = 0xCDEF89AB; - FMC->CTRL2_B.OBP = BIT_SET; - - if(WPP0_Data != 0xFF) - { - OB->WRP0 = WPP0_Data; - status = FMC_WaitForLastOperation(0x000B0000); - } - if((status == FMC_STATUS_COMPLETE) && (WPP1_Data != 0xFF)) - { - OB->WRP1 = WPP1_Data; - status = FMC_WaitForLastOperation(0x000B0000); - } - if((status == FMC_STATUS_COMPLETE) && (WPP2_Data != 0xFF)) - { - OB->WRP2 = WPP2_Data; - status = FMC_WaitForLastOperation(0x000B0000); - } - if((status == FMC_STATUS_COMPLETE) && (WPP3_Data != 0xFF)) - { - OB->WRP3 = WPP3_Data; - status = FMC_WaitForLastOperation(0x000B0000); - } - - if(status != FMC_STATUS_TIMEOUT) - { - FMC->CTRL2_B.OBP = BIT_RESET; - } - } - return status; -} - -/*! - * @brief Enables the read out protection. - * - * @param None - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_EnableReadOutProtection(void) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->OBKEY = 0x45670123; - FMC->OBKEY = 0xCDEF89AB; - - FMC->CTRL2_B.OBE = BIT_SET; - FMC->CTRL2_B.STA = BIT_SET; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->CTRL2_B.OBE = BIT_RESET; - FMC->CTRL2_B.OBP = BIT_SET; - OB->RDP = 0x00A5; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status != FMC_STATUS_TIMEOUT) - { - FMC->CTRL2_B.OBP = BIT_RESET; - } - } - else if(status != FMC_STATUS_TIMEOUT) - { - FMC->CTRL2_B.OBE = BIT_RESET; - } - } - return status; -} - -/*! - * @brief Disables the read out protection. - * - * @param None - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_DisableReadOutProtection(void) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->OBKEY = 0x45670123; - FMC->OBKEY = 0xCDEF89AB; - FMC->CTRL2_B.OBE = BIT_SET; - FMC->CTRL2_B.STA = BIT_SET; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->CTRL2_B.OBE = BIT_RESET; - FMC->CTRL2_B.OBP = BIT_SET; - OB->RDP = 0x00; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status != FMC_STATUS_TIMEOUT) - { - FMC->CTRL2_B.OBP = BIT_RESET; - } - } - else if(status != FMC_STATUS_TIMEOUT) - { - FMC->CTRL2_B.OBE = BIT_RESET; - } - } - return status; -} - -/*! - * @brief Programs the FMC User Option Byte. - * - * @param userConfig: Point to a FMC_UserConfig_T structure. - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_ConfigUserOptionByte(FMC_UserConfig_T* userConfig) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - FMC->OBKEY = 0x45670123; - FMC->OBKEY = 0xCDEF89AB; - - status = FMC_WaitForLastOperation(0x000B0000); - - if(status == FMC_STATUS_COMPLETE) - { - FMC->CTRL2_B.OBP = BIT_SET; - OB->USER = (uint32_t)userConfig->iwdtSet | \ - (uint32_t)userConfig->stopSet | \ - (uint32_t)userConfig->stdbySet | 0xF8; - status = FMC_WaitForLastOperation(0x000B0000); - if(status == FMC_STATUS_TIMEOUT) - { - FMC->CTRL2_B.OBP = BIT_RESET; - } - } - return status; -} - -/*! - * @brief Read the FMC User Option Bytes values. - * - * @param None - * - * @retval Returns User Option Bytes values - */ -uint32_t FMC_ReadUserOptionByte(void) -{ - return (FMC->OBCS_B.UOB >> 2); -} - -/*! - * @brief Read the FMC Write Protection Option Bytes Register value. - * - * @param None - * - * @retval Returns the value of Option Bytes Write Protection Register. - */ -uint32_t FMC_ReadOptionByteWriteProtection(void) -{ - return FMC->WRTPROT; -} - -/*! - * @brief Get the FMC Read Out Protection Status is set or not. - * - * @param None - * - * @retval status : set or reset. - */ -uint8_t FMC_GetReadProtectionStatus(void) -{ - uint8_t flagstatus = RESET; - - if(FMC->OBCS_B.READPROT != RESET) - { - flagstatus = SET; - } - else - { - flagstatus = RESET; - } - return flagstatus; -} - -/*! - * @brief FMC Prefetch Buffer status is set or not. - * - * @param None - * - * @retval status : set or reset. - */ -uint8_t FMC_ReadPrefetchBufferStatus(void) -{ - return FMC->CTRL1_B.PBSF; -} - -/*! - * @brief Enables the specified FMC interrupts. - * - * @param interrupt: Select the FMC interrupt sources - * This parameter can be one of the following values: - * @arg FMC_INT_ERR : Error Interrupt - * @arg FMC_INT_OC : Operation Complete Interrupt - * - * @retval None - */ -void FMC_EnableInterrupt(FMC_INT_T interrupt) -{ - if(interrupt == FMC_INT_ERR) - { - FMC->CTRL2_B.ERRIE = ENABLE; - } - else - { - FMC->CTRL2_B.OCIE = ENABLE; - } -} - -/*! - * @brief Disable the specified FMC interrupts. - * - * @param interrupt: Select the FMC interrupt sources - * This parameter can be one of the following values: - * @arg FMC_INT_ERR : Error Interrupt - * @arg FMC_INT_OC : Operation Complete Interrupt - * - * @retval None - */ -void FMC_DisableInterrupt(FMC_INT_T interrupt) -{ - if(interrupt == FMC_INT_ERR) - { - FMC->CTRL2_B.ERRIE = DISABLE; - } - else - { - FMC->CTRL2_B.OCIE = DISABLE; - } -} - -/*! - * @brief Read FMC flag is set or not - * - * @param flag: status flag of FMC - * This parameter can be one of the following values: - * @arg FMC_FLAG_BUSY : FMC Busy flag - * @arg FMC_FLAG_OC : FMC Operation Complete flag - * @arg FMC_FLAG_PE : FMC Program error flag - * @arg FMC_FLAG_WPE : FMC Write protected error flag - * @arg FMC_FLAG_OBE : FMC Option Byte error flag - * - * @retval flag status : set or reset - */ -uint8_t FMC_ReadStatusFlag(FMC_FLAG_T flag) -{ - if(flag == FMC_FLAG_OBE) - { - return FMC->OBCS_B.OBE; - } - else if((FMC->STS & flag ) != RESET) - { - return SET; - } - return RESET; -} - -/*! - * @brief Clears the FMC's flag. - * - * @param flag: status flag of FMC - * This parameter can be any combination of the following values: - * @arg FMC_FLAG_OC : FMC Operation Complete flag - * @arg FMC_FLAG_PE : FMC Program error flag - * @arg FMC_FLAG_WPE : FMC Write protected error flag - * - * @retval None - * - */ -void FMC_ClearStatusFlag(uint32_t flag) -{ - FMC->STS = flag; -} - -/*! - * @brief Read the FMC Status. - * - * @param None - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_BUSY - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - */ -FMC_STATUS_T FMC_ReadStatus(void) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - if(FMC->STS_B.BUSYF == BIT_SET) - { - status = FMC_STATUS_BUSY; - } - else if(FMC->STS_B.PEF == BIT_SET) - { - status = FMC_STATUS_ERROR_PG; - } - else if(FMC->STS_B.WPEF == BIT_SET) - { - status = FMC_STATUS_ERROR_WRP; - } - else - { - status = FMC_STATUS_COMPLETE; - } - return status; -} - -/*! - * @brief Waits for a Flash operation to complete or a TIMEOUT to occur. - * - * @param timeOut:FMC programming timeout value. - * - * @retval Returns the flash state.It can be one of value: - * @arg FMC_STATUS_ERROR_PG - * @arg FMC_STATUS_ERROR_WRP - * @arg FMC_STATUS_COMPLETE - * @arg FMC_STATUS_TIMEOUT - */ -FMC_STATUS_T FMC_WaitForLastOperation(uint32_t timeOut) -{ - FMC_STATUS_T status = FMC_STATUS_COMPLETE; - - /** Check for the Flash Status */ - status = FMC_ReadStatus(); - - /** Wait for a Flash operation to complete or a TIMEOUT to occur */ - while((status == FMC_STATUS_BUSY) && (timeOut !=0)) - { - status = FMC_ReadStatus(); - timeOut--; - } - if(timeOut == 0x00) - { - status = FMC_STATUS_TIMEOUT; - } - return status; -} - -/**@} end of group FMC_Fuctions*/ -/**@} end of group FMC_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_gpio.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_gpio.c deleted file mode 100644 index 00baf16..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_gpio.c +++ /dev/null @@ -1,545 +0,0 @@ -/*! - * @file apm32f10x_gpio.c - * - * @brief This file provides all the GPIO firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_gpio.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup GPIO_Driver GPIO Driver - @{ -*/ - -/** @addtogroup GPIO_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset GPIO peripheral registers to their default reset values - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @retval None - */ -void GPIO_Reset(GPIO_T* port) -{ - RCM_APB2_PERIPH_T APB2Periph; - - if (port == GPIOA) - { - APB2Periph = RCM_APB2_PERIPH_GPIOA; - } - else if (port == GPIOB) - { - APB2Periph = RCM_APB2_PERIPH_GPIOB; - } - else if (port == GPIOC) - { - APB2Periph = RCM_APB2_PERIPH_GPIOC; - } - else if (port == GPIOD) - { - APB2Periph = RCM_APB2_PERIPH_GPIOD; - } - else if (port == GPIOE) - { - APB2Periph = RCM_APB2_PERIPH_GPIOE; - } - else if (port == GPIOF) - { - APB2Periph = RCM_APB2_PERIPH_GPIOF; - } - else if (port == GPIOG) - { - APB2Periph = RCM_APB2_PERIPH_GPIOG; - } - - RCM_EnableAPB2PeriphReset(APB2Periph); - RCM_DisableAPB2PeriphReset(APB2Periph); -} - -/*! - * @brief Reset Alternate Functions registers to their default reset values - * - * @param None - * - * @retval None - */ -void GPIO_AFIOReset(void) -{ - RCM_EnableAPB2PeriphReset(RCM_APB2_PERIPH_AFIO); - RCM_DisableAPB2PeriphReset(RCM_APB2_PERIPH_AFIO); -} - -/*! - * @brief Config the GPIO peripheral according to the specified parameters in the gpioConfig - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @param gpioConfig: pointer to a GPIO_Config_T structure - * - * @retval None - */ -void GPIO_Config(GPIO_T* port, GPIO_Config_T* gpioConfig) -{ - uint8_t i; - uint32_t mode; - uint32_t CR; - uint32_t temp; - uint32_t shift; - - mode = gpioConfig->mode & 0x0f; - - if (gpioConfig->mode & 0x80) - { - mode |= gpioConfig->speed; - } - - if (gpioConfig->pin & 0xff) - { - CR = port->CFGLOW; - - for (i = 0, shift = 0x01; i < 8; i++, shift <<= 1) - { - if (gpioConfig->pin & shift) - { - temp = i << 2; - CR &= (uint32_t)~(0x0f << temp); - CR |= mode << temp; - - if (gpioConfig->mode == GPIO_MODE_IN_PD) - { - port->BC = shift; - } - else if (gpioConfig->mode == GPIO_MODE_IN_PU) - { - port->BSC = shift; - } - } - } - - port->CFGLOW = CR; - } - - if (gpioConfig->pin & 0xff00) - { - CR = port->CFGHIG; - - for (i = 8, shift = 0x100; i < 16; i++, shift <<= 1) - { - if (gpioConfig->pin & shift) - { - temp = (i - 8) << 2; - CR &= (uint32_t)~(0x0f << temp); - CR |= mode << temp; - - if (gpioConfig->mode == GPIO_MODE_IN_PD) - { - port->BC = shift; - } - else if (gpioConfig->mode == GPIO_MODE_IN_PU) - { - port->BSC = shift; - } - } - } - - port->CFGHIG = CR; - } -} - -/*! - * @brief Fills each gpioConfig member with its default value. - * - * @param gpioConfig : pointer to a GPIO_Config_T structure which will be initialized. - * - * @retval None - */ -void GPIO_ConfigStructInit(GPIO_Config_T* gpioConfig) -{ - gpioConfig->pin = GPIO_PIN_ALL; - gpioConfig->speed = GPIO_SPEED_20MHz; - gpioConfig->mode = GPIO_MODE_IN_FLOATING; -} - -/*! - * @brief Reads the specified input port pin - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @param pin : specifies pin to read. - * This parameter can be one of GPIO_PIN_x( x can be from 0 to 15). - * - * @retval The input port pin value - */ -uint8_t GPIO_ReadInputBit(GPIO_T* port, uint16_t pin) -{ - uint8_t ret; - - ret = (port->IDATA & pin) ? BIT_SET : BIT_RESET; - - return ret; -} - -/*! - * @brief Reads the specified GPIO input data port - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @retval GPIO input data port value - */ -uint16_t GPIO_ReadInputPort(GPIO_T* port) -{ - return ((uint16_t)port->IDATA); -} - -/*! - * @brief Reads the specified output data port bit - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @param pin : specifies pin to read. - * This parameter can be one of GPIO_PIN_x( x can be from 0 to 15). - * - * @retval The output port pin value - */ -uint8_t GPIO_ReadOutputBit(GPIO_T* port, uint16_t pin) -{ - - uint8_t ret; - - ret = (port->ODATA & pin) ? BIT_SET : BIT_RESET; - - return ret; -} - -/*! - * @brief Reads the specified GPIO output data port - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @retval output data port value - */ -uint16_t GPIO_ReadOutputPort(GPIO_T* port) -{ - return ((uint16_t)port->ODATA); -} - -/*! - * @brief Sets the selected data port bits - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @param pin : specifies pin to be written. - * This parameter can be any combination of GPIO_PIN_x( x can be from 0 to 15). - * - * @retval None - */ -void GPIO_SetBit(GPIO_T* port, uint16_t pin) -{ - port->BSC = (uint32_t)pin; -} - -/*! - * @brief Clears the selected data port bits - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @param pin : specifies pin to be cleared. - * This parameter can be any combination of GPIO_PIN_x( x can be from 0 to 15). - * - * @retval None - */ -void GPIO_ResetBit(GPIO_T* port, uint16_t pin) -{ - port->BC = (uint32_t)pin; -} - -/*! - * @brief Writes data to the specified GPIO data port bit - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @param pin : Select specifies pin. - * This parameter can be one of GPIO_PIN_x( x can be from 0 to 15). - * - * - * @param bitVal : specifies the value to be written to the port output data register - * This parameter can be one of the following values: - * @arg BIT_RESET: Reset the port pin - * @arg BIT_SET : Set the port pin - * - * @retval None - */ -void GPIO_WriteBitValue(GPIO_T* port, uint16_t pin, uint8_t bitVal) -{ - if (bitVal != BIT_RESET) - { - port->BSC = pin; - } - else - { - port->BC = pin ; - } -} - -/*! - * @brief Writes data to the specified GPIO data port - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @param portValue : specifies the value to be written to the port output data register. - * - * @retval None - */ -void GPIO_WriteOutputPort(GPIO_T* port, uint16_t portValue) -{ - port->ODATA = (uint32_t)portValue; -} - -/*! - * @brief Locks GPIO Pins configuration registers - * - * @param port: Select the GPIO port. - * This parameter can be one of GPIOx( x can be from A to G). - * - * @param pin : Select specifies pin. - * This parameter can be any combination of GPIO_PIN_x( x can be from 0 to 15). - * - * @retval None - */ -void GPIO_ConfigPinLock(GPIO_T* port, uint16_t pin) -{ - uint32_t val = 0x00010000; - - val |= pin; - /** Set LCKK bit */ - port->LOCK = val ; - /** Reset LCKK bit */ - port->LOCK = pin; - /** Set LCKK bit */ - port->LOCK = val; - /** Read LCKK bit*/ - val = port->LOCK; - /** Read LCKK bit*/ - val = port->LOCK; -} - -/*! - * @brief Selects the GPIO pin used as Event output - * - * @param portSource : selects the GPIO port to be used as source for Event output. - * This parameter can be one of GPIO_PORT_SOURCE_x( x can be from A to E). - * - * @param pinSource specifies the pin for the Event output - * This parameter can be GPIO_PIN_SOURCE_x( x can be from 0 to 15). - * - * @retval None - */ -void GPIO_ConfigEventOutput(GPIO_PORT_SOURCE_T portSource, GPIO_PIN_SOURCE_T pinSource) -{ - AFIO->EVCTRL_B.PORTSEL = portSource; - AFIO->EVCTRL_B.PINSEL = pinSource; -} - -/*! - * @brief Enables the Event Output - * - * @param None - * - * @retval None - */ -void GPIO_EnableEventOutput(void) -{ - AFIO->EVCTRL_B.EVOEN = BIT_SET; -} - -/*! - * @brief Disable the Event Output - * - * @param None - * - * @retval None - */ -void GPIO_DisableEventOutput(void) -{ - AFIO->EVCTRL_B.EVOEN = BIT_RESET; -} - -/*! - * @brief Changes the mapping of the specified pin - * - * @param remap : selects the pin to remap - * This parameter can be one of the following values: - * @arg GPIO_NO_REMAP_SPI1 : No SPI1 Alternate Function mapping - * @arg GPIO_REMAP_SPI1 : SPI1 Alternate Function mapping - * @arg GPIO_NO_REMAP_I2C1 : No I2C1 Alternate Function mapping - * @arg GPIO_REMAP_I2C1 : I2C1 Alternate Function mapping - * @arg GPIO_NO_REMAP_USART1 : No USART1 Alternate Function mapping - * @arg GPIO_REMAP_USART1 : USART1 Alternate Function mapping - * @arg GPIO_NO_REMAP_USART2 : No USART2 Alternate Function mapping - * @arg GPIO_REMAP_USART2 : USART2 Alternate Function mapping - * @arg GPIO_NO_REMAP_USART3 : No USART3 Partial Alternate Function mapping - * @arg GPIO_PARTIAL_REMAP_USART3 : USART3 Partial Alternate Function mapping - * @arg GPIO_FULL_REMAP_USART3 : USART3 Full Alternate Function mapping - * @arg GPIO_NO_REMAP_TMR1 : No TIM1 Partial Alternate Function mapping - * @arg GPIO_PARTIAL_REMAP_TMR1 : TIM1 Partial Alternate Function mapping - * @arg GPIO_FULL_REMAP_TMR1 : TIM1 Full Alternate Function mapping - * @arg GPIO_NO_REMAP1_TMR2 : No TIM2 Partial1 Alternate Function mapping - * @arg GPIO_PARTIAL_REMAP1_TMR2 : TIM2 Partial1 Alternate Function mapping - * @arg GPIO_PARTIAL_REMAP2_TMR2 : TIM2 Partial2 Alternate Function mapping - * @arg GPIO_FULL_REMAP_TMR2 : TIM2 Full Alternate Function mapping - * @arg GPIO_NO_REMAP_TMR3 : No TIM3 Partial Alternate Function mapping - * @arg GPIO_PARTIAL_REMAP_TMR3 : TIM3 Partial Alternate Function mapping - * @arg GPIO_FULL_REMAP_TMR3 : TIM3 Full Alternate Function mapping - * @arg GPIO_NO_REMAP_TMR4 : No TIM4 Alternate Function mapping - * @arg GPIO_REMAP_TMR4 : TIM4 Alternate Function mapping - * @arg GPIO_NO_REMAP_CAN1 : No CAN1 Alternate Function mapping - * @arg GPIO_REMAP1_CAN1 : CAN1 Alternate Function mapping - * @arg GPIO_REMAP2_CAN1 : CAN1 Alternate Function mapping - * @arg GPIO_NO_REMAP_PD01 : No PD01 Alternate Function mapping - * @arg GPIO_REMAP_PD01 : PD01 Alternate Function mapping - * @arg GPIO_NO_REMAP_TMR5CH4_LSI : No LSI connected to TIM5 Channel4 input capture for calibration - * @arg GPIO_REMAP_TMR5CH4_LSI : LSI connected to TIM5 Channel4 input capture for calibration - * @arg GPIO_NO_REMAP_ADC1_ETRGINJ : No ADC1 External Trigger Injected Conversion remapping - * @arg GPIO_REMAP_ADC1_ETRGINJ : ADC1 External Trigger Injected Conversion remapping - * @arg GPIO_NO_REMAP_ADC1_ETRGREG : No ADC1 External Trigger Regular Conversion remapping - * @arg GPIO_REMAP_ADC1_ETRGREG : ADC1 External Trigger Regular Conversion remapping - * @arg GPIO_NO_REMAP_ADC2_ETRGINJ : No ADC2 External Trigger Injected Conversion remapping - * @arg GPIO_REMAP_ADC2_ETRGINJ : ADC2 External Trigger Injected Conversion remapping - * @arg GPIO_NO_REMAP_ADC2_ETRGREG : No ADC2 External Trigger Regular Conversion remapping - * @arg GPIO_REMAP_ADC2_ETRGREG : ADC2 External Trigger Regular Conversion remapping - * @arg GPIO_NO_REMAP_CAN2 : No CAN2 Alternate Function mapping - * @arg GPIO_REMAP_CAN2 : CAN2 Alternate Function mapping - * @arg GPIO_NO_REMAP_SWJ : Full SWJ Enabled (JTAG-DP + SW-DP) - * @arg GPIO_REMAP_SWJ_NOJTRST : Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST - * @arg GPIO_REMAP_SWJ_JTAGDISABLE : JTAG-DP Disabled and SW-DP Enabled - * @arg GPIO_REMAP_SWJ_DISABLE : Full SWJ Disabled (JTAG-DP + SW-DP) - * - * @retval When you use GPIO_REMAP_CAN2, you must put this function last of all other ConfigPinRemap Function. - */ -void GPIO_ConfigPinRemap(GPIO_REMAP_T remap) -{ - uint32_t val, mask, bitOffset, regOffset; - uint32_t regVal; - - val = remap & 0x0f; - mask = (remap >> 4) & 0x0f; - bitOffset = (remap >> 8) & 0xff; - regOffset = (remap >> 16) & 0x0f; - - if (regOffset) - { - regVal = AFIO->REMAP2; - } - else - { - regVal = AFIO->REMAP1; - } - - if(remap >> 8 == 0x18) - { - regVal &= 0xF0FFFFFF; - AFIO->REMAP1 &= 0xF0FFFFFF; - } - else - { - regVal |= 0x0F000000; - } - - mask <<= bitOffset; - regVal &= (uint32_t)~mask; - val <<= bitOffset; - regVal |= val; - - if (regOffset) - { - AFIO->REMAP2 = regVal; - } - else - { - AFIO->REMAP1 = regVal; - } -} - -/*! - * @brief Selects the GPIO pin used as EINT Line - * - * @param portSource : selects the GPIO port to be used as source for EINT line. - * This parameter can be one of GPIO_PORT_SOURCE_x( x can be from A to G). - * - * @param pinSource : Specifies the EINT line to be configured. - * This parameter can be GPIO_PIN_SOURCE_x( x can be from 0 to 15). - * - * @retval None - */ -void GPIO_ConfigEINTLine(GPIO_PORT_SOURCE_T portSource, GPIO_PIN_SOURCE_T pinSource) -{ - uint32_t shift; - - if (pinSource <= GPIO_PIN_SOURCE_3) - { - shift = pinSource << 2; - AFIO->EINTSEL1 &= (uint32_t )~(0x0f << shift); - AFIO->EINTSEL1 |= portSource << shift; - } - - else if (pinSource <= GPIO_PIN_SOURCE_7) - { - shift = (pinSource - GPIO_PIN_SOURCE_4) << 2; - AFIO->EINTSEL2 &= (uint32_t )~(0x0f << shift); - AFIO->EINTSEL2 |= portSource << shift; - } - - else if (pinSource <= GPIO_PIN_SOURCE_11) - { - shift = (pinSource - GPIO_PIN_SOURCE_8) << 2; - AFIO->EINTSEL3 &= (uint32_t )~(0x0f << shift); - AFIO->EINTSEL3 |= portSource << shift; - } - - else if (pinSource <= GPIO_PIN_SOURCE_15) - { - shift = (pinSource - GPIO_PIN_SOURCE_12) << 2; - AFIO->EINTSEL4 &= (uint32_t )~(0x0f << shift); - AFIO->EINTSEL4 |= portSource << shift; - } -} - -/**@} end of group GPIO_Fuctions*/ -/**@} end of group GPIO_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_i2c.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_i2c.c deleted file mode 100644 index 5271d92..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_i2c.c +++ /dev/null @@ -1,1024 +0,0 @@ -/*! - * @file apm32f10x_i2c.c - * - * @brief This file provides all the I2C firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_i2c.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup I2C_Driver I2C Driver - @{ -*/ - -/** @addtogroup I2C_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset I2C - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_Reset(I2C_T* i2c) -{ - if(i2c == I2C1) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_I2C1); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_I2C1); - } - else - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_I2C2); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_I2C2); - } -} - -/*! - * @brief Configure I2C by configuring the structure - * - * @param i2c: I2C selet 1 or 2 - * - * @param i2cConfig: pointer to a I2C_Config_T structure - * - * @retval None - */ -void I2C_Config(I2C_T* i2c, I2C_Config_T* i2cConfig) -{ - uint16_t tmpreg = 0, freqrange = 0; - uint32_t PCLK1 = 8000000, PCLK2 = 0; - uint16_t result = 0x04; - - i2c->SWITCH = 0; - - /** I2C CTRL2 Configuration */ - RCM_ReadPCLKFreq(&PCLK1, &PCLK2); - freqrange = PCLK1 / 1000000; - i2c->CTRL2_B.CLKFCFG= freqrange; - - /** I2C CLKCTRL Configuration */ - i2c->CTRL1_B.I2CEN = BIT_RESET; - - if(i2cConfig->clockSpeed <= 100000) - { - result = (PCLK1 / (i2cConfig->clockSpeed << 1)); - if(result < 0x04) - { - result = 0x04; - } - i2c->RISETMAX = freqrange + 1; - tmpreg |= result; - } - /** Configure speed in fast mode */ - else - { - if(i2cConfig->dutyCycle == I2C_DUTYCYCLE_2) - { - result = (PCLK1 / (i2cConfig->clockSpeed * 3)); - } - else - { - result = (PCLK1 / (i2cConfig->clockSpeed * 25)); - result |= I2C_DUTYCYCLE_16_9; - } - - if((result & 0x0FFF) == 0) - { - result |= 0x0001; - } - - tmpreg |= (uint16_t)(result | 0x8000); - i2c->RISETMAX = ((((freqrange) * 300) / 1000) + 1); - } - i2c->CLKCTRL = tmpreg; - i2c->CTRL1_B.I2CEN = BIT_SET; - - /** i2c CTRL1 Configuration */ - i2c->CTRL1_B.ACKEN = BIT_RESET; - i2c->CTRL1_B.SMBTCFG = BIT_RESET; - i2c->CTRL1_B.SMBEN = BIT_RESET; - - i2c->CTRL1 |= i2cConfig->mode; - i2c->CTRL1_B.ACKEN = i2cConfig->ack; - - i2c->SADDR1 = i2cConfig->ackAddress | i2cConfig->ownAddress1; -} - -/*! - * @brief Fills each I2C_InitStruct member with its default value. - * - * @param i2cConfig: pointer to a I2C_Config_T structure - * - * @retval None - */ -void I2C_ConfigStructInit(I2C_Config_T* i2cConfig) -{ - i2cConfig->clockSpeed = 5000; - i2cConfig->mode = I2C_MODE_I2C; - i2cConfig->dutyCycle = I2C_DUTYCYCLE_2; - i2cConfig->ownAddress1 = 0; - i2cConfig->ack = I2C_ACK_DISABLE; - i2cConfig->ackAddress = I2C_ACK_ADDRESS_7BIT; -} - -/*! - * @brief Enable I2C - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_Enable(I2C_T* i2c) -{ - i2c->CTRL1_B.I2CEN = ENABLE; -} - -/*! - * @brief Disable I2C - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_Disable(I2C_T* i2c) -{ - i2c->CTRL1_B.I2CEN = DISABLE; -} - -/*! - * @brief Enable Generates i2c communication START condition. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableGenerateStart(I2C_T* i2c) -{ - i2c->CTRL1_B.START = BIT_SET; -} - -/*! - * @brief Disable Generates i2c communication START condition. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisableGenerateStart(I2C_T* i2c) -{ - i2c->CTRL1_B.START = BIT_RESET; -} - -/*! - * @brief Enable Generates i2c communication STOP condition. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableGenerateStop(I2C_T* i2c) -{ - i2c->CTRL1_B.STOP = BIT_SET; -} - -/*! - * @brief Disable Generates i2c communication STOP condition. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisableGenerateStop(I2C_T* i2c) -{ - i2c->CTRL1_B.STOP = BIT_RESET; -} - -/*! - * @brief Enables the specified I2C acknowledge feature. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableAcknowledge(I2C_T* i2c) -{ - i2c->CTRL1_B.ACKEN = ENABLE; -} - -/*! - * @brief Disables the specified I2C acknowledge feature. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisableAcknowledge(I2C_T* i2c) -{ - i2c->CTRL1_B.ACKEN = DISABLE; -} - -/*! - * @brief Config the specified I2C own address2. - * - * @param i2c: I2C selet 1 or 2 - * - * @param address:specifies the 7bit I2C own address2. - * - * @retval None - */ -void I2C_ConfigOwnAddress2(I2C_T* i2c, uint8_t address) -{ - i2c->SADDR2_B.ADDR2 = address; -} - -/*! - * @brief Enables the specified I2C dual addressing mode. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableDualAddress(I2C_T* i2c) -{ - i2c->SADDR2_B.ADDRNUM = ENABLE; -} - -/*! - * @brief Disables the specified I2C dual addressing mode. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisableDualAddress(I2C_T* i2c) -{ - i2c->SADDR2_B.ADDRNUM = DISABLE; -} - -/*! - * @brief Enables the specified I2C general call feature. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableGeneralCall(I2C_T* i2c) -{ - i2c->CTRL1_B.SRBEN = ENABLE; -} - -/*! - * @brief Disables the specified I2C general call feature. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisableGeneralCall(I2C_T* i2c) -{ - i2c->CTRL1_B.SRBEN = DISABLE; -} - -/*! - * @brief Send one byte - * - * @param i2c: I2C selet 1 or 2 - * - * @param data: data to send - * - * @retval None - */ -void I2C_TxData(I2C_T* i2c, uint8_t data) -{ - i2c->DATA_B.DATA = data; -} - -/*! - * @brief Returns the recevie data - * - * @param i2c: I2C selet 1 or 2 - * - * @retval received data - */ -uint8_t I2C_RxData(I2C_T* i2c) -{ - return i2c->DATA_B.DATA; -} - -/*! - * @brief Transmits the address byte to select the slave device. - * - * @param i2c: I2C selet 1 or 2 - * - * @param address: slave address which will be transmitted - * - * @param direction: Direction mode - * The parameter can be one of following values: - * @arg I2C_DIRECTION_TX: Transmitter mode - * @arg I2C_DIRECTION_RX: Receiver mode - * @retval None - */ -void I2C_Tx7BitAddress(I2C_T* i2c, uint8_t address, I2C_DIRECTION_T direction) -{ - if(direction != I2C_DIRECTION_TX) - { - i2c->DATA_B.DATA = address | 0x0001; - } - else - { - i2c->DATA_B.DATA = address & 0xFFFE; - } -} - -/*! - * @brief Reads the I2C register and returns its value. - * - * @param i2c: I2C selet 1 or 2 - * - * @param i2cRegister : register to read - * The parameter can be one of following values: - * @arg I2C_REGISTER_CTRL1: CTRL1 register - * @arg I2C_REGISTER_CTRL2: CTRL2 register - * @arg I2C_REGISTER_SADDR1: SADDR1 register - * @arg I2C_REGISTER_SADDR2: SADDR2 register - * @arg I2C_REGISTER_DATA: DATA register - * @arg I2C_REGISTER_STS1: STS1 register - * @arg I2C_REGISTER_STS2: STS2 register - * @arg I2C_REGISTER_CLKCTRL: CLKCTRL register - * @arg I2C_REGISTER_RISETMAX: RISETMAX register - * @arg I2C_REGISTER_SWITCH: SWITCH register - * - * @retval The value of the read register - */ -uint16_t I2C_ReadRegister(I2C_T* i2c, I2C_REGISTER_T i2cRegister) -{ - switch (i2cRegister) - { - case I2C_REGISTER_CTRL1: - return i2c->CTRL1; - case I2C_REGISTER_CTRL2: - return i2c->CTRL2; - case I2C_REGISTER_SADDR1: - return i2c->SADDR1; - case I2C_REGISTER_SADDR2: - return i2c->SADDR2; - case I2C_REGISTER_DATA: - return i2c->DATA; - case I2C_REGISTER_STS1: - return i2c->STS1; - case I2C_REGISTER_STS2: - return i2c->STS2; - case I2C_REGISTER_CLKCTRL: - return i2c->CLKCTRL; - case I2C_REGISTER_RISETMAX: - return i2c->RISETMAX; - case I2C_REGISTER_SWITCH: - return i2c->SWITCH; - default: - return 0; - } -} - -/*! - * @brief Enables the I2C software reset. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableSoftwareReset(I2C_T* i2c) -{ - i2c->CTRL1_B.SWRST = ENABLE; -} - -/*! - * @brief Disables the I2C software reset. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisableSoftwareReset(I2C_T* i2c) -{ - i2c->CTRL1_B.SWRST = DISABLE; -} - -/*! - * @brief Selects the specified I2C NACK position in master receiver mode. - * - * @param i2c: I2C selet 1 or 2 - * - * @param NACKPosition: specifies the NACK position. - * - * @retval None - */ -void I2C_ConfigNACKPosition(I2C_T* i2c, I2C_NACK_POSITION_T NACKPosition) -{ - if(NACKPosition == I2C_NACK_POSITION_NEXT) - { - i2c->CTRL1_B.ACKPOS = BIT_SET; - } - else - { - i2c->CTRL1_B.ACKPOS = BIT_RESET; - } -} - -/*! - * @brief Control the height of pin of SMBusAlert - * - * @param i2c: I2C selet 1 or 2 - * - * @param SMBusState: SMBAlert pin level. - * The parameter can be one of following values: - * @arg I2C_SMBUSALER_LOW: SMBus Alert pin low - * @arg I2C_SMBUSALER_HIGH: SMBus Alert pin high - * @retval None - */ -void I2C_ConfigSMBusAlert(I2C_T* i2c, I2C_SMBUSALER_T SMBusState) -{ - if(SMBusState == I2C_SMBUSALER_LOW) - { - i2c->CTRL1_B.ALERTEN = BIT_SET; - } - else - { - i2c->CTRL1_B.ALERTEN = BIT_RESET; - } -} - -/*! - * @brief Enables the I2C PEC transfer. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnablePECTransmit(I2C_T* i2c) -{ - i2c->CTRL1_B.PEC = BIT_SET; -} - -/*! - * @brief Disables the I2C PEC transfer. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisablePECTransmit(I2C_T* i2c) -{ - i2c->CTRL1_B.PEC = BIT_RESET; -} - -/*! - * @brief Selects the I2C PEC position. - * - * @param i2c: I2C selet 1 or 2 - * - * @param PECPosition: PEC position - * The parameter can be one of following values: - * @arg I2C_PEC_POSITION_NEXT: indicates that the next byte is PEC - * @arg I2C_PEC_POSITION_CURRENT: indicates that current byte is PEC - * @retval None - */ -void I2C_ConfigPECPosition(I2C_T* i2c, I2C_PEC_POSITION_T PECPosition) -{ - if(PECPosition == I2C_PEC_POSITION_NEXT) - { - i2c->CTRL1_B.ACKPOS = BIT_SET; - } - else - { - i2c->CTRL1_B.ACKPOS = BIT_RESET; - } -} - -/*! - * @brief Enables the PEC value calculation of the transferred bytes. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnablePEC(I2C_T* i2c) -{ - i2c->CTRL1_B.PECEN = BIT_SET; -} - -/*! - * @brief Disables the PEC value calculation of the transferred bytes. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisablePEC(I2C_T* i2c) -{ - i2c->CTRL1_B.PECEN = BIT_RESET; -} - -/*! - * @brief Read the PEC value for the I2C. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval value of PEC - */ -uint8_t I2C_ReadPEC(I2C_T* i2c) -{ - return i2c->STS2_B.PECVALUE; -} - -/*! - * @brief Enables the I2C ARP. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableARP(I2C_T* i2c) -{ - i2c->CTRL1_B.ARPEN = BIT_SET; -} - -/*! -* @brief Disables the I2C ARP. -* -* @param i2c: I2C selet 1 or 2 -* -* @retval None -*/ -void I2C_DisableARP(I2C_T* i2c) -{ - i2c->CTRL1_B.ARPEN = BIT_RESET; -} - -/*! - * @brief Enables the I2C Clock stretching. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableStretchClock(I2C_T* i2c) -{ - i2c->CTRL1_B.CLKSTRETCHD = BIT_RESET; -} - -/*! - * @brief Disables the I2C Clock stretching. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisableStretchClock(I2C_T* i2c) -{ - i2c->CTRL1_B.CLKSTRETCHD = BIT_SET; -} - -/*! - * @brief Selects the specified I2C fast mode duty cycle. - * - * @param i2c: I2C selet 1 or 2 - * - * @param dutyCycle: the fast mode duty cycle. - * The parameter can be one of following values: - * @arg I2C_DUTYCYCLE_16_9: I2C fast mode Tlow/Thigh = 16/9 - * @arg I2C_DUTYCYCLE_2: I2C fast mode Tlow/Thigh = 2 - * @retval None - */ -void I2C_ConfigFastModeDutyCycle(I2C_T* i2c, I2C_DUTYCYCLE_T dutyCycle) -{ - if(dutyCycle == I2C_DUTYCYCLE_16_9) - { - i2c->CLKCTRL_B.FDUTYCFG = BIT_SET; - } - else - { - i2c->CLKCTRL_B.FDUTYCFG = BIT_RESET; - } -} - -/*! - * @brief Enables the specified I2C DMA requests. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableDMA(I2C_T* i2c) -{ - i2c->CTRL2_B.DMAEN = ENABLE; -} - -/*! - * @brief Disable the specified I2C DMA requests. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisableDMA(I2C_T* i2c) -{ - i2c->CTRL2_B.DMAEN = DISABLE; -} - -/*! - * @brief Enable DMA to receive the last transfer - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_EnableDMALastTransfer(I2C_T* i2c) -{ - i2c->CTRL2_B.LTCFG = BIT_SET; -} - -/*! - * @brief Disable DMA to receive the last transfer - * - * @param i2c: I2C selet 1 or 2 - * - * @retval None - */ -void I2C_DisableDMALastTransfer(I2C_T* i2c) -{ - i2c->CTRL2_B.LTCFG = BIT_RESET; -} - -/*! - * @brief Enables the specified I2C interrupts. - * - * @param i2c: I2C selet 1 or 2 - * - * @param interrupt:I2C interrupts sources - * The parameter can be any combination of following values: - * @arg I2C_INT_BUF: Buffer interrupt - * @arg I2C_INT_EVT: Event interrupt - * @arg I2C_INT_ERR: Error interrupt - * - * @retval None - */ -void I2C_EnableInterrupt(I2C_T* i2c, uint16_t interrupt) -{ - i2c->CTRL2 |= interrupt; -} - -/*! - * @brief Disable the specified I2C interrupts. - * - * @param i2c: I2C selet 1 or 2 - * - * @param interrupt:I2C interrupts sources - * The parameter can be any combination of following values: - * @arg I2C_INT_BUF: Buffer interrupt - * @arg I2C_INT_EVT: Event interrupt - * @arg I2C_INT_ERR: Error interrupt - * - * @retval None - */ -void I2C_DisableInterrupt(I2C_T* i2c, uint16_t interrupt) -{ - i2c->CTRL2 &= ~interrupt; -} - -/*! - * @brief Check that the last event is equal to the last passed event - * - * @param i2c: I2C selet 1 or 2 - * - * @param i2cEvent: the event to be checked. - * The parameter can be one of the following values: - * @arg I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED : EV1 - * @arg I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED : EV1 - * @arg I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED : EV1 - * @arg I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED : EV1 - * @arg I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED : EV1 - * @arg I2C_EVENT_SLAVE_BYTE_RECEIVED : EV2 - * @arg I2C_EVENT_SLAVE_BYTE_TRANSMITTED : EV3 - * @arg I2C_EVENT_SLAVE_ACK_FAILURE : EV3_2 - * @arg I2C_EVENT_SLAVE_STOP_DETECTED : EV4 - * @arg I2C_EVENT_MASTER_MODE_SELECT : EV5 - * @arg I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED : EV6 - * @arg I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED : EV6 - * @arg I2C_EVENT_MASTER_BYTE_RECEIVED : EV7 - * @arg I2C_EVENT_MASTER_BYTE_TRANSMITTING : EV8 - * @arg I2C_EVENT_MASTER_BYTE_TRANSMITTED : EV8_2 - * @arg I2C_EVENT_MASTER_MODE_ADDRESS10 : EV9 - * - * @retval Status: SUCCESS or ERROR - */ -uint8_t I2C_ReadEventStatus(I2C_T* i2c, I2C_EVENT_T i2cEvent) -{ - uint32_t lastevent = 0; - uint32_t flag1 = 0, flag2 = 0; - - flag1 = i2c->STS1 & 0x0000FFFF; - flag2 = i2c->STS2 & 0x0000FFFF; - flag2 = flag2 << 16; - - lastevent = (flag1 | flag2) & 0x00FFFFFF; - - if((lastevent & i2cEvent) == i2cEvent) - { - return SUCCESS; - } - return ERROR; -} - -/*! - * @brief Read the last i2c Event. - * - * @param i2c: I2C selet 1 or 2 - * - * @retval The last event - */ -uint32_t I2C_ReadLastEvent(I2C_T* i2c) -{ - uint32_t lastevent = 0; - uint32_t flag1 = 0, flag2 = 0; - - flag1 = i2c->STS1 & 0x0000FFFF; - flag2 = i2c->STS2 & 0x0000FFFF; - flag2 = flag2 << 16; - - lastevent = (flag1 | flag2) & 0x00FFFFFF; - - return lastevent; -} - -/*! - * @brief Check whether the I2C flag is set - * - * @param i2c: I2C selet 1 or 2 - * - * @param flag: specifies the I2C flag - * The parameter can be one of the following values: - * @arg I2C_FLAG_DUALADDR: Dual flag (Slave mode) - * @arg I2C_FLAG_SMMHADDR: SMBus host header (Slave mode) - * @arg I2C_FLAG_SMBDADDR: SMBus default header (Slave mode) - * @arg I2C_FLAG_GENCALL: General call header flag (Slave mode) - * @arg I2C_FLAG_TR: Transmitter/Receiver flag - * @arg I2C_FLAG_BUSBSY: Bus busy flag - * @arg I2C_FLAG_MS: Master/Slave flag - * @arg I2C_FLAG_SMBALT: SMBus Alert flag - * @arg I2C_FLAG_TTE: Timeout or Tlow error flag - * @arg I2C_FLAG_PECE: PEC error in reception flag - * @arg I2C_FLAG_OVRUR: Overrun/Underrun flag (Slave mode) - * @arg I2C_FLAG_AE: Acknowledge error flag - * @arg I2C_FLAG_AL: Arbitration lost flag (Master mode) - * @arg I2C_FLAG_BERR: Bus error flag - * @arg I2C_FLAG_TXBE: Transmitter data register empty flag - * @arg I2C_FLAG_RXBNE: Receiver data register not empty flag - * @arg I2C_FLAG_STOP: Stop detection flag (Slave mode) - * @arg I2C_FLAG_ADDR10: 10-bit header sent flag (Master mode) - * @arg I2C_FLAG_BTC: Byte transfer complete flag - * @arg I2C_FLAG_ADDR: Address sent flag (Master mode) - * @arg I2C_FLAG_START: Start bit flag (Master mode) - * - * @retval Status: flag SET or RESET - */ -uint8_t I2C_ReadStatusFlag(I2C_T* i2c, I2C_FLAG_T flag) -{ - - uint8_t status = 0; - switch (flag) - { - case I2C_FLAG_DUALADDR: - status = i2c->STS2_B.DUALADDRFLG; - break; - case I2C_FLAG_SMMHADDR: - status = i2c->STS2_B.SMMHADDR; - break; - case I2C_FLAG_SMBDADDR: - status = i2c->STS2_B.SMBDADDRFLG; - break; - case I2C_FLAG_GENCALL: - status = i2c->STS2_B.GENCALLFLG; - break; - case I2C_FLAG_TR: - status = i2c->STS2_B.TRFLG; - break; - case I2C_FLAG_BUSBSY: - status = i2c->STS2_B.BUSBSYFLG; - break; - case I2C_FLAG_MS: - status = i2c->STS2_B.MSFLG; - break; - case I2C_FLAG_SMBALT: - status = i2c->STS1_B.SMBALTFLG; - break; - case I2C_FLAG_TTE: - status = i2c->STS1_B.TTEFLG; - break; - case I2C_FLAG_PECE: - status = i2c->STS1_B.PECEFLG; - break; - case I2C_FLAG_OVRUR: - status = i2c->STS1_B.OVRURFLG; - break; - case I2C_FLAG_AE: - status = i2c->STS1_B.AEFLG; - break; - case I2C_FLAG_AL: - status = i2c->STS1_B.ALFLG; - break; - case I2C_FLAG_BERR: - status = i2c->STS1_B.BERRFLG; - break; - case I2C_FLAG_TXBE: - status = i2c->STS1_B.TXBEFLG; - break; - case I2C_FLAG_RXBNE: - status = i2c->STS1_B.RXBNEFLG; - break; - case I2C_FLAG_STOP: - status = i2c->STS1_B.STOPFLG; - break; - case I2C_FLAG_ADDR10: - status = i2c->STS1_B.ADDR10FLG; - break; - case I2C_FLAG_BTC: - status = i2c->STS1_B.BTCFLG; - break; - case I2C_FLAG_ADDR: - status = i2c->STS1_B.ADDRFLG; - break; - case I2C_FLAG_START: - status = i2c->STS1_B.STARTFLG; - break; - default: - break; - } - return status; -} - -/*! - * @brief Clear the I2C flag - * - * @param i2c: I2C selet 1 or 2 - * - * @param flag: specifies the I2C flag - * The parameter can be one of the following values: - * @arg I2C_FLAG_SMBALT: SMBus Alert flag - * @arg I2C_FLAG_TTE: Timeout or Tlow error flag - * @arg I2C_FLAG_PECE: PEC error in reception flag - * @arg I2C_FLAG_OVRUR: Overrun/Underrun flag (Slave mode) - * @arg I2C_FLAG_AE: Acknowledge error flag - * @arg I2C_FLAG_AL: Arbitration lost flag (Master mode) - * @arg I2C_FLAG_BERR: Bus error flag - * - * @retval None - * - * @note 1)I2C_FLAG_STOP: Stop detection flag is cleared by software sequence: - * a read operation to I2C_STS1 register (I2C_ReadStatusFlag()) - * followed by a write operation to I2C_CRTL1 register (I2C_Enable()). - * 2)I2C_FLAG_ADDR10: 10-bit header sent flag is cleared by software sequence: - * a read operation to I2C_STS1 (I2C_ReadStatusFlag()) - * followed by writing the second byte of the address in I2C_DATA register. - * 3)I2C_FLAG_BTC: Byte transfer complete flag is cleared by software sequence: - * a read operation to I2C_STS1 register (I2C_ReadStatusFlag()) - * followed by a read/write to I2C_DATA register (I2C_TxData()). - * 4)I2C_FLAG_ADDR: Address sent flag is cleared by software sequence: - * a read operation to I2C_STS1 register (I2C_ReadStatusFlag()) - * followed by a read operation to I2C_STS2 register ((void)(I2Cx->STS2)). - * 5)I2C_FLAG_START: Start bit flag is cleared software sequence: - * a read operation to I2C_STS1 register (I2C_ReadStatusFlag()) - * followed by a write operation to I2C_DATA register (I2C_TxData()). - */ -void I2C_ClearStatusFlag(I2C_T* i2c, I2C_FLAG_T flag) -{ - switch (flag) - { - case I2C_FLAG_SMBALT: - i2c->STS1_B.SMBALTFLG = BIT_RESET; - break; - case I2C_FLAG_TTE: - i2c->STS1_B.TTEFLG = BIT_RESET; - break; - case I2C_FLAG_PECE: - i2c->STS1_B.PECEFLG = BIT_RESET; - break; - case I2C_FLAG_OVRUR: - i2c->STS1_B.OVRURFLG = BIT_RESET; - break; - case I2C_FLAG_AE: - i2c->STS1_B.AEFLG = BIT_RESET; - break; - case I2C_FLAG_AL: - i2c->STS1_B.ALFLG = BIT_RESET; - break; - case I2C_FLAG_BERR: - i2c->STS1_B.BERRFLG = BIT_RESET; - break; - default: - break; - } -} - -/*! - * @brief Check whether the I2C interrupts is set - * - * @param i2c: I2C selet 1 or 2 - * - * @param flag: specifies the I2C interrupts - * The parameter can be one of the following values: - * @arg I2C_INT_FLAG_SMBALT: SMBus Alert flag - * @arg I2C_INT_FLAG_TTE: Timeout or Tlow error flag - * @arg I2C_INT_FLAG_PECE: PEC error in reception flag - * @arg I2C_INT_FLAG_OVRUR: Overrun/Underrun flag (Slave mode) - * @arg I2C_INT_FLAG_AE: Acknowledge error flag - * @arg I2C_INT_FLAG_AL: Arbitration lost flag (Master mode) - * @arg I2C_INT_FLAG_BERR: Bus error flag - * @arg I2C_INT_FLAG_TXBE: Transmitter data register empty flag - * @arg I2C_INT_FLAG_RXBNE: Receiver data register not empty flag - * @arg I2C_INT_FLAG_STOP: Stop detection flag (Slave mode) - * @arg I2C_INT_FLAG_ADDR10: 10-bit header sent flag (Master mode) - * @arg I2C_INT_FLAG_BTC: Byte transfer complete flag - * @arg I2C_INT_FLAG_ADDR: Address sent flag (Master mode) - * @arg I2C_INT_FLAG_START: Start bit flag (Master mode) - * - * @retval Status: flag SET or RESET - */ -uint8_t I2C_ReadIntFlag(I2C_T* i2c, I2C_INT_FLAG_T flag) -{ - uint32_t enablestatus = 0; - - enablestatus = ((flag & 0x07000000) >> 16) & (i2c->CTRL2); - flag &= 0x00FFFFFF; - if(((i2c->STS1 & flag) != RESET) && enablestatus) - { - return SET; - } - return RESET; -} - -/*! - * @brief Clears the I2C interrupt flag bits. - * - * @param i2c: I2C selet 1 or 2 - * - * @param flag: specifies the I2C flag - * The parameter can be any combination of the following values: - * @arg I2C_INT_FLAG_SMBALT: SMBus Alert flag - * @arg I2C_INT_FLAG_TTE: Timeout or Tlow error flag - * @arg I2C_INT_FLAG_PECE: PEC error in reception flag - * @arg I2C_INT_FLAG_OVRUR: Overrun/Underrun flag (Slave mode) - * @arg I2C_INT_FLAG_AE: Acknowledge error flag - * @arg I2C_INT_FLAG_AL: Arbitration lost flag (Master mode) - * @arg I2C_INT_FLAG_BERR: Bus error flag - * - * @retval None - * - * @note 1)I2C_INT_FLAG_STOP: Stop detection flag is cleared by software sequence: - * a read operation to I2C_STS1 register (I2C_ReadIntFlag()) - * followed by a write operation to I2C_CRTL1 register (I2C_Enable()). - * 2)I2C_INT_FLAG_ADDR10: 10-bit header sent flag is cleared by software sequence: - * a read operation to I2C_STS1 (I2C_ReadIntFlag()) - * followed by writing the second byte of the address in I2C_DATA register. - * 3)I2C_INT_FLAG_BTC: Byte transfer complete flag is cleared by software sequence: - * a read operation to I2C_STS1 register (I2C_ReadIntFlag()) - * followed by a read/write to I2C_DATA register (I2C_TxData()). - * 4)I2C_INT_FLAG_ADDR: Address sent flag is cleared by software sequence: - * a read operation to I2C_STS1 register (I2C_ReadIntFlag()) - * followed by a read operation to I2C_STS2 register ((void)(I2Cx->STS2)). - * 5)I2C_INT_FLAG_START: Start bit flag is cleared software sequence: - * a read operation to I2C_STS1 register (I2C_ReadIntFlag()) - * followed by a write operation to I2C_DATA register (I2C_TxData()). - */ -void I2C_ClearIntFlag(I2C_T* i2c, uint32_t flag) -{ - i2c->STS1 = (uint16_t)~(flag & 0x00FFFFFF); -} - -/**@} end of group I2C_Fuctions*/ -/**@} end of group I2C_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_iwdt.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_iwdt.c deleted file mode 100644 index 170b3c6..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_iwdt.c +++ /dev/null @@ -1,148 +0,0 @@ -/*! - * @file apm32f10x_iwdt.c - * - * @brief This file provides all the IWDT firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_iwdt.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup IWDT_Driver IWDT Driver - @{ -*/ - -/** @addtogroup IWDT_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Enable IWDT - * - * @param None - * - * @retval None - */ -void IWDT_Enable(void) -{ - IWDT->KEY = IWDT_KEYWORD_ENABLE; -} - -/*! - * @brief Reload the IWDT counter with value - * - * @param None - * - * @retval None - */ -void IWDT_Refresh(void) -{ - IWDT->KEY = IWDT_KEYWORD_RELOAD; -} - -/*! - * @brief Set IWDT count reload values - * - * @param reload: IWDT count reload values - * - * @retval None - */ -void IWDT_ConfigReload(uint16_t reload) -{ - IWDT->CNTRLD = reload; -} - -/*! - * @brief Enable the IWDT write access - * - * @param None - * - * @retval None - */ -void IWDT_EnableWriteAccess(void) -{ - IWDT->KEY_B.KEY = IWDT_WRITEACCESS_ENABLE; -} - -/*! - * @brief Disable the IWDT write access - * - * @param None - * - * @retval None - */ -void IWDT_DisableWriteAccess(void) -{ - IWDT->KEY_B.KEY = IWDT_WRITEACCESS_DISABLE; -} - -/*! - * @brief Set IWDT frequency divider values - * - * @param div: IWDT frequency divider values - * This parameter can be one of the following values: - * @arg IWDT_DIVIDER_4 : prescaler divider equal to 4 - * @arg IWDT_DIVIDER_8 : prescaler divider equal to 8 - * @arg IWDT_DIVIDER_16 : prescaler divider equal to 16 - * @arg IWDT_DIVIDER_32 : prescaler divider equal to 32 - * @arg IWDT_DIVIDER_64 : prescaler divider equal to 64 - * @arg IWDT_DIVIDER_128: prescaler divider equal to 128 - * @arg IWDT_DIVIDER_256: prescaler divider equal to 256 - * - * @retval None - */ -void IWDT_ConfigDivider(uint8_t div) -{ - IWDT->PSC = div; -} - -/*! - * @brief Read the specified IWDT flag - * - * @param flag: specifies the flag to read - * This parameter can be one of the following values: - * @arg IWDT_FLAG_PSCU : Watchdog Prescaler Factor Update flag - * @arg IWDT_FLAG_CNTU : Watchdog Counter Reload Value Update flag - * - * @retval status of IWDT_FLAG (SET or RESET) - * - */ -uint8_t IWDT_ReadStatusFlag(uint16_t flag) -{ - uint8_t bitStatus = RESET; - - if((IWDT->STS & flag) != (uint32_t)RESET) - { - bitStatus = SET; - } - else - { - bitStatus = RESET; - } - return bitStatus; -} - -/**@} end of group IWDT_Fuctions*/ -/**@} end of group IWDT_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_misc.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_misc.c deleted file mode 100644 index d522534..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_misc.c +++ /dev/null @@ -1,220 +0,0 @@ -/*! - * @file apm32f10x_misc.c - * - * @brief This file provides all the miscellaneous firmware functions. - * Include NVIC,SystemTick and Power management. - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_misc.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup MISC_Driver MISC Driver - @{ -*/ - -/** @addtogroup MISC_Macros Macros - @{ -*/ - -#define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) - -/**@} end of group MISC_Macros*/ - - -/** @addtogroup MISC_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Configures the priority grouping: pre-emption priority and subpriority. - * - * @param priorityGroup : specifies the priority grouping bits length. - * This parameter can be one of the following values: - * @arg NVIC_PRIORITY_GROUP_0 - * @arg NVIC_PRIORITY_GROUP_1 - * @arg NVIC_PRIORITY_GROUP_2 - * @arg NVIC_PRIORITY_GROUP_3 - * @arg NVIC_PRIORITY_GROUP_4 - * - * @retval None - */ -void NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_T priorityGroup) -{ - SCB->AIRCR = AIRCR_VECTKEY_MASK | priorityGroup; -} - -/*! - * @brief Enable NVIC request - * - * @param irq: the NVIC interrupt request, detailed in IRQn_Type - * For the complete APM32 Devices IRQ Channels list,please refer to apm32f10x.h file - * - * @param preemptionPriority: the pre-emption priority needed to set - * - * @param subPriority: the subpriority needed to set - * - * @retval None - */ -void NVIC_EnableIRQRequest(IRQn_Type irq, uint8_t preemptionPriority, uint8_t subPriority) -{ - uint32_t tempPriority, tempPrePri, tempSubPri; - uint32_t priorityGrp; - - /** Get priority group */ - priorityGrp = (SCB->AIRCR) & (uint32_t)0x700U; - - /** get pre-emption priority and subpriority */ - switch(priorityGrp) - { - case NVIC_PRIORITY_GROUP_0: - tempPrePri = 0; - tempSubPri = 4; - break; - - case NVIC_PRIORITY_GROUP_1: - tempPrePri = 1; - tempSubPri = 3; - break; - - case NVIC_PRIORITY_GROUP_2: - tempPrePri = 2; - tempSubPri = 2; - break; - - case NVIC_PRIORITY_GROUP_3: - tempPrePri = 3; - tempSubPri = 1; - break; - - case NVIC_PRIORITY_GROUP_4: - tempPrePri = 4; - tempSubPri = 0; - break; - - default: - NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_0); - tempPrePri = 0; - tempSubPri = 4; - break; - } - - tempPrePri = 4 - tempPrePri; - tempSubPri = 4 - tempSubPri; - tempPriority = preemptionPriority << tempPrePri; - tempPriority |= subPriority & (0x0f >> tempSubPri); - tempPriority <<= 4; - NVIC->IP[irq] = (uint8_t)tempPriority; - - /** enable the selected IRQ */ - NVIC->ISER[irq >> 0x05U] = (uint32_t)0x01U << (irq & (uint8_t)0x1FU); -} - -/*! - * @brief Disable NVIC request - * - * @param irq: the NVIC interrupt request, detailed in IRQn_Type - * - * @retval None - */ -void NVIC_DisableIRQRequest(IRQn_Type irq) -{ - /** disable the selected IRQ.*/ - NVIC->ICER[irq >> 0x05U] = (uint32_t)0x01U << (irq & (uint8_t)0x1FU); -} - -/*! - * @brief Configs the vector table location and Offset. - * - * @param vectTab: specifies if the vector table is in RAM or FLASH memory - * This parameter can be one of the following values: - * @arg NVIC_VECT_TAB_RAM - * @arg NVIC_VECT_TAB_FLASH - * - * @param Offset Vector Table base offset field. This value must be a multiple of 0x200 - * - * @retval None - */ -void NVIC_ConfigVectorTable(NVIC_VECT_TAB_T vectTab, uint32_t offset) -{ - SCB->VTOR = vectTab | (offset & (uint32_t)0x1FFFFF80); -} - -/*! - * @brief set the state of the low power mode - * - * @param lowPowerMode: the low power mode state - * This parameter can be one of the following values: - * @arg NVIC_LOWPOWER_SEVONPEND - * @arg NVIC_LOWPOWER_SLEEPDEEP - * @arg NVIC_LOWPOWER_SLEEPONEXIT - * - * @retval None - */ -void NVIC_SetSystemLowPower(NVIC_LOWPOWER_T lowPowerMode) -{ - SCB->SCR |= lowPowerMode; -} - -/*! - * @brief reset the state of the low power mode - * - * @param lowPowerMode: the low power mode state - * This parameter can be one of the following values: - * @arg NVIC_LOWPOWER_SEVONPEND - * @arg NVIC_LOWPOWER_SLEEPDEEP - * @arg NVIC_LOWPOWER_SLEEPONEXIT - * - * @retval None - */ -void NVIC_ResetystemLowPower(NVIC_LOWPOWER_T lowPowerMode) -{ - SCB->SCR &= (uint32_t)(~(uint32_t)lowPowerMode); -} - -/*! - * @brief Configures the SysTick clock source - * - * @param clkSource: specifies the SysTick clock source - * This parameter can be one of the following values: - * @arg SYSTICK_CLK_SOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source. - * @arg SYSTICK_CLK_SOURCE_HCLK: AHB clock selected as SysTick clock source. - * - * @retval None - */ -void SysTick_ConfigCLKSource(SYSTICK_CLK_SOURCE_T clkSource) -{ - if (clkSource == SYSTICK_CLK_SOURCE_HCLK) - { - SysTick->CTRL |= (uint32_t)BIT2; - } - else - { - SysTick->CTRL &= (uint32_t)(~BIT2); - } -} - -/**@} end of group MISC_Fuctions*/ -/**@} end of group MISC_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_pmu.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_pmu.c deleted file mode 100644 index 0b645a9..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_pmu.c +++ /dev/null @@ -1,268 +0,0 @@ -/*! - * @file apm32f10x_pmu.c - * - * @brief This file provides all the PMU firmware functions. - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_pmu.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup PMU_Driver PMU Driver - @{ -*/ - -/** @addtogroup PMU_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset the PMU peripheral register. - * - * @param None - * - * @retval None - */ -void PMU_Reset(void) -{ - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_PMU); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_PMU); -} - -/*! - * @brief Enables access to the RTC and backup registers. - * - * @param None - * - * @retval None - */ -void PMU_EnableBackupAccess(void) -{ - PMU->CTRL_B.BPWEN = ENABLE ; -} - -/*! - * @brief Disables access to the RTC and backup registers. - * - * @param None - * - * @retval None - */ -void PMU_DisableBackupAccess(void) -{ - PMU->CTRL_B.BPWEN = DISABLE; -} - -/*! - * @brief Enables the Power Voltage Detector(PVD). - * - * @param None - * - * @retval None - */ -void PMU_EnablePVD(void) -{ - PMU->CTRL_B.PVDEN = ENABLE; -} - -/*! - * @brief Disables the Power Voltage Detector(PVD). - * - * @param None - * - * @retval None - */ -void PMU_DisablePVD(void) -{ - PMU->CTRL_B.PVDEN = DISABLE; -} - -/*! - * @brief Configure a voltage threshold detected by a power supply voltage detector (PVD). - * - * @param levelspecifies the PVD detection level - * This parameter can be one of the following values: - * @arg PMU_PVD_LEVEL_2V2 : Config PVD detection level to 2.2V - * @arg PMU_PVD_LEVEL_2V3 : Config PVD detection level to 2.3V - * @arg PMU_PVD_LEVEL_2V4 : Config PVD detection level to 2.4V - * @arg PMU_PVD_LEVEL_2V5 : Config PVD detection level to 2.5V - * @arg PMU_PVD_LEVEL_2V6 : Config PVD detection level to 2.6V - * @arg PMU_PVD_LEVEL_2V7 : Config PVD detection level to 2.7V - * @arg PMU_PVD_LEVEL_2V8 : Config PVD detection level to 2.8V - * @arg PMU_PVD_LEVEL_2V9 : Config PVD detection level to 2.9V - * - * @retval None - */ -void PMU_ConfigPVDLevel(PMU_PVD_LEVEL_T level) -{ - - /** Clear PLS[7:5] bits */ - PMU->CTRL_B.PLSEL = 0x0000; - /** Store the new value */ - PMU->CTRL_B.PLSEL = level; -} - -/*! - * @brief Enables the WakeUp Pin functionality. - * - * @param None - * - * @retval None - */ -void PMU_EnableWakeUpPin(void) -{ - PMU->CSTS_B.WKUPCFG = ENABLE ; -} - -/*! - * @brief Diaables the WakeUp Pin functionality. - * - * @param None - * - * @retval None - */ -void PMU_DisableWakeUpPin(void) -{ - PMU->CSTS_B.WKUPCFG = DISABLE ; -} - -/*! - * @brief Enters STOP mode. - * - * @param regulator: specifies the regulator state in STOP mode. - * This parameter can be one of the following values: - * @arg PMU_REGULATOR_ON : STOP mode with regulator ON - * @arg PMU_REGULATOR_LOWPOWER: STOP mode with regulator in low power mode - * - * @param entry: specifies if STOP mode in entered with WFI or WFE instruction. - * This parameter can be one of the following values: - * @arg PMU_STOP_ENTRY_WFI: Enter STOP mode with WFI instruction - * @arg PMU_STOP_ENTRY_WFE: Enter STOP mode with WFE instruction - * - * @retval None - */ -void PMU_EnterSTOPMode(PMU_REGULATOR_T regulator, PMU_STOP_ENTRY_T entry) -{ - /** Clear PDDSCFG and LPDSCFG bits */ - PMU->CTRL_B.PDDSCFG = 0x00; - PMU->CTRL_B.LPDSCFG = 0x00; - /** Set LPDSCFG bit according to regulator value */ - PMU->CTRL_B.LPDSCFG = regulator; - /** Set Cortex System Control Register */ - SCB->SCR |= (uint32_t )0x04; - /** Select STOP mode entry*/ - if(entry == PMU_STOP_ENTRY_WFI) - { - /** Request Wait For Interrupt */ - __WFI(); - } - else - { - /** Request Wait For Event */ - __WFE(); - } - - /** Reset SLEEPDEEP bit of Cortex System Control Register */ - SCB->SCR &= (uint32_t)~((uint32_t)0x04); -} - -/*! - * @brief Enters STANDBY mode. - * - * @param None - * - * @retval None - */ -void PMU_EnterSTANDBYMode(void) -{ - /** Clear Wake-up flag */ - PMU->CTRL_B.WUFLGCLR = BIT_SET; - /** Select STANDBY mode */ - PMU->CTRL_B.PDDSCFG = BIT_SET; - /** Set Cortex System Control Register */ - SCB->SCR |= (uint32_t )0x04; -#if defined ( __CC_ARM ) - __force_stores(); -#endif - /** Request Wait For Interrupt */ - __WFI(); - -} - -/*! - * @brief Read the specified PWR flag is set or not. - * - * @param flagReads the status of specifies the flag. - * This parameter can be one of the following values: - * @arg PMU_FLAG_WUE : Wake Up flag - * @arg PMU_FLAG_SB : StandBy flag - * @arg PMU_FLAG_PVDO: PVD Output flag - * - * @retval The new state of PMU_FLAG (SET or RESET). - */ -uint8_t PMU_ReadStatusFlag(PMU_FLAG_T flag) -{ - uint8_t BitStatus = BIT_RESET; - - if(flag == PMU_FLAG_WUE) - { - BitStatus = PMU->CSTS_B.WUEFLG; - } - else if(flag == PMU_FLAG_SB) - { - BitStatus = PMU->CSTS_B.SBFLG; - } - else if(flag == PMU_FLAG_PVDO) - { - BitStatus = PMU->CSTS_B.PVDOFLG; - } - return BitStatus; -} - -/*! - * @brief Clears the PWR's pending flags. - * - * @param flagClears the status of specifies the flag. - * This parameter can be one of the following values: - * @arg PMU_FLAG_WUE : Wake Up flag - * @arg PMU_FLAG_SB : StandBy flag - * - * @retval None - */ -void PMU_ClearStatusFlag(PMU_FLAG_T flag) -{ - if(flag == PMU_FLAG_WUE) - { - PMU->CTRL_B.WUFLGCLR = BIT_SET; - } - else if(flag == PMU_FLAG_SB) - { - PMU->CTRL_B.SBFLGCLR = BIT_SET; - } -} - -/**@} end of group PMU_Fuctions*/ -/**@} end of group PMU_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_qspi.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_qspi.c deleted file mode 100644 index eea4965..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_qspi.c +++ /dev/null @@ -1,609 +0,0 @@ -/*! - * @file qpm32f10x_qspi.c - * - * @brief This file contains all the functions for the QSPI peripheral - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#if defined (APM32F10X_MD) || defined (APM32F10X_LD) -#include "apm32f10x_qspi.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup QSPI_Driver QSPI Driver - @{ -*/ - -/** @addtogroup QSPI_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset QSPI peripheral registers to their default values - * - * @param None - * - * @retval None - */ -void QSPI_Reset(void) -{ - volatile uint32_t dummy = 0; - - QSPI->IOSW = QSPI_IOSW_RESET_VALUE; - QSPI->SSIEN = QSPI_SSIEN_RESET_VALUE; - QSPI->INTEN = QSPI_INTEN_RESET_VALUE; - dummy = QSPI->ICF; - QSPI->CTRL1 = QSPI_CTRL1_RESET_VALUE; - QSPI->CTRL2 = QSPI_CTRL2_RESET_VALUE; - QSPI->CTRL3 = QSPI_CTRL3_RESET_VALUE; - QSPI->SLAEN = QSPI_SLAEN_RESET_VALUE; - QSPI->BR = QSPI_BR_RESET_VALUE; - QSPI->TFL = QSPI_TFL_RESET_VALUE; - QSPI->RFL = QSPI_RFL_RESET_VALUE; - QSPI->TFTL = QSPI_TFTL_RESET_VALUE; - QSPI->RFTL = QSPI_RFTL_RESET_VALUE; - QSPI->STS = QSPI_STS_RESET_VALUE; - QSPI->RSD = QSPI_RSD_RESET_VALUE; -} - -/*! - * @brief Config the QSPI peripheral according to the specified parameters in the qspiConfig - * - * @param qspiConfig: Pointer to a QSPI_Config_T structure that contains the configuration information - * - * @retval None - */ -void QSPI_Config(QSPI_Config_T * qspiConfig) -{ - QSPI->CTRL1_B.CPHA = qspiConfig->clockPhase; - QSPI->CTRL1_B.CPOL = qspiConfig->clockPolarity; - QSPI->CTRL1_B.FRF = qspiConfig->frameFormat; - QSPI->CTRL1_B.DFS = qspiConfig->dataFrameSize;; - QSPI->CTRL1_B.SSTEN = qspiConfig->selectSlaveToggle; - - QSPI->BR = qspiConfig->clockDiv; -} - -/*! - * @brief Fills each qspiConfig member with its default value - * - * @param qspiConfig: Pointer to a QSPI_Config_T structure which will be initialized - * - * @retval None - */ -void QSPI_ConfigStructInit(QSPI_Config_T *qspiConfig) -{ - qspiConfig->clockPhase = QSPI_CLKPHA_2EDGE; - qspiConfig->clockPolarity = QSPI_CLKPOL_LOW; - qspiConfig->clockDiv = 0; - - qspiConfig->frameFormat = QSPI_FRF_STANDARD; - qspiConfig->dataFrameSize = QSPI_DFS_8BIT; - qspiConfig->selectSlaveToggle = QSPI_SST_DISABLE; -} - -/*! - * @brief Configs frame number - * - * @param num: Configs a 16bit frame number - * - * @retval None - */ -void QSPI_ConfigFrameNum(uint16_t num) -{ - QSPI->CTRL2_B.NDF = num; -} - -/*! - * @brief Configs data frame size - * - * @param dfs: Specifies the data frame size - * The parameter can be one of following values: - * @arg QSPI_DFS_4BIT : Specifies data frame size to 4bit - * @arg QSPI_DFS_5BIT : Specifies data frame size to 5bit - * @arg QSPI_DFS_6BIT : Specifies data frame size to 6bit - * @arg QSPI_DFS_7BIT : Specifies data frame size to 7bit - * @arg QSPI_DFS_8BIT : Specifies data frame size to 8bit - * @arg QSPI_DFS_9BIT : Specifies data frame size to 9bit - * @arg QSPI_DFS_10BIT : Specifies data frame size to 10bit - * @arg QSPI_DFS_11BIT : Specifies data frame size to 11bit - * @arg QSPI_DFS_12BIT : Specifies data frame size to 12bit - * @arg QSPI_DFS_13BIT : Specifies data frame size to 13bit - * @arg QSPI_DFS_14BIT : Specifies data frame size to 14bit - * @arg QSPI_DFS_15BIT : Specifies data frame size to 15bit - * @arg QSPI_DFS_16BIT : Specifies data frame size to 16bit - * @arg QSPI_DFS_17BIT : Specifies data frame size to 17bit - * @arg QSPI_DFS_18BIT : Specifies data frame size to 18bit - * @arg QSPI_DFS_19BIT : Specifies data frame size to 19bit - * @arg QSPI_DFS_20BIT : Specifies data frame size to 20bit - * @arg QSPI_DFS_21BIT : Specifies data frame size to 21bit - * @arg QSPI_DFS_22BIT : Specifies data frame size to 22bit - * @arg QSPI_DFS_23BIT : Specifies data frame size to 23bit - * @arg QSPI_DFS_24BIT : Specifies data frame size to 24bit - * @arg QSPI_DFS_25BIT : Specifies data frame size to 25bit - * @arg QSPI_DFS_26BIT : Specifies data frame size to 26bit - * @arg QSPI_DFS_27BIT : Specifies data frame size to 27bit - * @arg QSPI_DFS_28BIT : Specifies data frame size to 28bit - * @arg QSPI_DFS_29BIT : Specifies data frame size to 29bit - * @arg QSPI_DFS_30BIT : Specifies data frame size to 30bit - * @arg QSPI_DFS_31BIT : Specifies data frame size to 31bit - * @arg QSPI_DFS_32BIT : Specifies data frame size to 32bit - * - * @retval None - */ -void QSPI_ConfigDataFrameSize(QSPI_DFS_T dfs) -{ - QSPI->CTRL1_B.DFS = dfs; -} - -/*! - * @brief Configs frame format - * - * @param frameFormat - * - * @retval None - */ -void QSPI_ConfigFrameFormat(QSPI_FRF_T frameFormat) -{ - QSPI->CTRL1_B.FRF = frameFormat; -} - -/*! - * @brief Enable QSPI - * - * @param None - * - * @retval None - */ -void QSPI_Enable(void) -{ - QSPI->SSIEN_B.EN = BIT_SET; -} - -/*! - * @brief Disable QSPI - * - * @param None - * - * @retval None - */ -void QSPI_Disable(void) -{ - QSPI->SSIEN_B.EN = BIT_RESET; -} - -/*! - * @brief Read Tx FIFO number of data - * - * @param None - * - * @retval None - */ -uint8_t QSPI_ReadTxFifoDataNum(void) -{ - return (uint8_t)QSPI->TFL_B.TFL; -} - -/*! - * @brief Read Rx FIFO number of data - * - * @param None - * - * @retval Returns Rx FIFO number of data - */ -uint8_t QSPI_ReadRxFifoDataNum(void) -{ - return (uint8_t)QSPI->RFL_B.RFL; -} - -/*! - * @brief Configs rx FIFO threshold - * - * @param threshold: Speicifes rx FIFO threshold with a 3bit value - * - * @retval None - */ -void QSPI_ConfigRxFifoThreshold(uint8_t threshold) -{ - QSPI->RFTL_B.RFT = threshold; -} - -/*! - * @brief Congfigs Tx FIFO threshold - * - * @param threshold: Speicifes Tx FIFO threshold with a 3bit value - * - * @retval None - */ -void QSPI_ConfigTxFifoThreshold(uint8_t threshold) -{ - QSPI->TFTL_B.TFTH = threshold; -} - -/*! - * @brief Congfigs Tx FIFO empty threshold - * - * @param threshold: Speicifes Tx FIFO empty threshold with a 3bit value - * - * @retval None - */ -void QSPI_ConfigTxFifoEmptyThreshold(uint8_t threshold) -{ - QSPI->TFTL_B.TFT = threshold; -} - -/*! - * @brief Configs RX sample edge - * - * @param rse: Specifies the sample edge - * The parameter can be one of following values: - * @arg QSPI_RSE_RISING : rising edge sample - * @arg QSPI_RSE_FALLING: falling edge sample - * - * @retval None - */ -void QSPI_ConfigRxSampleEdge(QSPI_RSE_T rse) -{ - QSPI->RSD_B.RSE = rse; -} - -/*! - * @brief Set RX sample delay - * - * @param delay: Specifies the sample delay with a 8-bit value - * - * @retval None - */ -void QSPI_ConfigRxSampleDelay(uint8_t delay) -{ - QSPI->RSD_B.RSD = delay; -} - -/*! - * @brief Clock stretch enable - * - * @param None - * - * @retval None - */ -void QSPI_EnableClockStretch(void) -{ - QSPI->CTRL3_B.CSEN = BIT_SET; -} - -/*! - * @brief Clock stretch disable - * - * @param None - * - * @retval None - */ -void QSPI_DisableClockStretch(void) -{ - QSPI->CTRL3_B.CSEN = BIT_RESET; -} - -/*! - * @brief Configs instruction length - * - * @param len: Specifies the length of instruction - * The parameter can be one of following values: - * @arg QSPI_INST_LEN_0 : no instruction - * @arg QSPI_INST_LEN_4BIT : 4-bit instruction - * @arg QSPI_INST_LEN_8BIT : 8-bit instruction - * @arg QSPI_INST_LEN_16BIT : 16-bit instruction - * - * @retval None - */ -void QSPI_ConfigInstLen(QSPI_INST_LEN_T len) -{ - QSPI->CTRL3_B.INSLEN = len; -} - -/*! - * @brief Configs address length - * - * @param len: Specifies the address length - * The parameter can be one of following values: - * @arg QSPI_ADDR_LEN_0 : no address - * @arg QSPI_ADDR_LEN_4BIT : 4-bit address length - * @arg QSPI_ADDR_LEN_8BIT, : 8-bit address length - * @arg QSPI_ADDR_LEN_12BIT : 12-bit address length - * @arg QSPI_ADDR_LEN_16BIT : 16-bit address length - * @arg QSPI_ADDR_LEN_20BIT : 20-bit address length - * @arg QSPI_ADDR_LEN_24BIT : 24-bit address length - * @arg QSPI_ADDR_LEN_28BIT : 28-bit address length - * @arg QSPI_ADDR_LEN_32BIT : 32-bit address length - * @arg QSPI_ADDR_LEN_36BIT : 36-bit address length - * @arg QSPI_ADDR_LEN_40BIT : 40-bit address length - * @arg QSPI_ADDR_LEN_44BIT : 44-bit address length - * @arg QSPI_ADDR_LEN_48BIT : 48-bit address length - * @arg QSPI_ADDR_LEN_52BIT : 52-bit address length - * @arg QSPI_ADDR_LEN_56BIT : 56-bit address length - * @arg QSPI_ADDR_LEN_60BIT : 60-bit address length - * - * @retval None - */ -void QSPI_ConfigAddrLen(QSPI_ADDR_LEN_T len) -{ - QSPI->CTRL3_B.ADDRLEN = len; -} - -/*! - * @brief Configs instruction and address type - * - * @param type: Specifies the instruction and address type - * The parameter can be one of following values: - * @arg QSPI_INST_ADDR_TYPE_STANDARD : Tx instruction in standard SPI mode, - * Tx address in standard SPI mode - * @arg QSPI_INST_TYPE_STANDARD : Tx instruction in standard SPI mode, - * Tx address in mode of SPI_FRF - * @arg QSPI_INST_ADDR_TYPE_FRF : Tx instruction in mode of SPI_FRF, - * Tx address in mode of SPI_FRF - * - * @retval None - */ -void QSPI_ConfigInstAddrType(QSPI_INST_ADDR_TYPE_T type) -{ - QSPI->CTRL3_B.IAT = type; -} - -/*! - * @brief Configs wait cycle number - * - * @param cycle: Specifies the wait cycle number with a 5-bit value - * - * @retval None - */ -void QSPI_ConfigWaitCycle(uint8_t cycle) -{ - QSPI->CTRL3_B.WAITCYC = cycle; -} - -/*! - * @brief Open QSPI GPIO - * - * @param None - * - * @retval None - */ -void QSPI_OpenIO(void) -{ - QSPI->IOSW_B.IOSW = BIT_SET; -} - -/*! - * @brief Close QSPI GPIO - * - * @param None - * - * @retval None - */ -void QSPI_CloseIO(void) -{ - QSPI->IOSW_B.IOSW = BIT_RESET; -} - -/*! - * @brief Set transmission mode - * - * @param mode: Specifies the transmission mode - * The parameter can be one of following values: - * @arg QSPI_TRANS_MODE_TX_RX : TX and RX mode - * @arg QSPI_TRANS_MODE_TX : TX mode only - * @arg QSPI_TRANS_MODE_RX : RX mode only - * @arg QSPI_TRANS_MODE_EEPROM_READ : EEPROM read mode - * - * @retval None - */ -void QSPI_ConfigTansMode(QSPI_TRANS_MODE_T mode) -{ - QSPI->CTRL1_B.TXMODE = mode; -} - -/*! - * @brief Transmit data - * - * @param data: Data to be transmited - * - * @retval None - */ -void QSPI_TxData(uint32_t data) -{ - QSPI->DATA = data; -} - -/*! - * @brief Returns the most recent received data - * - * @param None - * - * @retval The received data - */ -uint32_t QSPI_RxData(void) -{ - return (uint32_t)QSPI->DATA; -} - -/*! - * @brief Enable Slave - * - * @param None - * - * @retval None - */ -void QSPI_EnableSlave(void) -{ - QSPI->SLAEN_B.SLAEN = BIT_SET; -} - -/*! - * @brief Disable slave - * - * @param None - * - * @retval None - */ -void QSPI_DisableSlave(void) -{ - QSPI->SLAEN_B.SLAEN = BIT_RESET; -} - -/*! - * @brief Enable the specified QSPI interrupts - * - * @param interrupt: Specifies the QSPI interrupt sources - * The parameter can be combination of following values: - * @arg QSPI_INT_TFE: TX FIFO empty interrupt - * @arg QSPI_INT_TFO: TX FIFO overflow interrupt - * @arg QSPI_INT_RFU: RX FIFO underflow interrupt - * @arg QSPI_INT_RFO: RX FIFO overflow interrupt - * @arg QSPI_INT_RFF: RX FIFO full interrupt - * @arg QSPI_INT_MST: Master interrupt - * - * @retval None - */ -void QSPI_EnableInterrupt(uint32_t interrupt) -{ - QSPI->INTEN |= interrupt; -} - -/*! - * @brief Disable the specified QSPI interrupts - * - * @param interrupt: Specifies the QSPI interrupt sources - * The parameter can be combination of following values: - * @arg QSPI_INT_TFE: TX FIFO empty interrupt - * @arg QSPI_INT_TFO: TX FIFO overflow interrupt - * @arg QSPI_INT_RFU: RX FIFO underflow interrupt - * @arg QSPI_INT_RFO: RX FIFO overflow interrupt - * @arg QSPI_INT_RFF: RX FIFO full interrupt - * @arg QSPI_INT_MST: Master interrupt - * - * @retval None - */ -void QSPI_DisableInterrupt(uint32_t interrupt) -{ - QSPI->INTEN &= (uint32_t)~interrupt; -} - -/*! - * @brief Read specified QSPI flag - * - * @param flag: Specifies the flag to be checked - * The parameter can be one of following values: - * @arg QSPI_FLAG_BUSY: Busy flag - * @arg QSPI_FLAG_TFNF: TX FIFO not full flag - * @arg QSPI_FLAG_TFE: TX FIFO empty flag - * @arg QSPI_FLAG_RFNE: RX FIFO not empty flag - * @arg QSPI_FLAG_RFF: RX FIFO full flag - * @arg QSPI_FLAG_DCE: Data collision error - * - * @retval The new state of flag (SET or RESET) - */ -uint8_t QSPI_ReadStatusFlag(QSPI_FLAG_T flag) -{ - uint8_t ret = RESET; - - ret = QSPI->STS & flag ? SET : RESET; - - return ret; -} - -/*! - * @brief Clear specified QSPI flag - * - * @param None - * - * @retval None - * - * @note This funtion only clear Data collision error flag(QSPI_FLAG_DCE) - */ -void QSPI_ClearStatusFlag(void) -{ - volatile uint32_t dummy = 0; - - dummy = QSPI->STS; -} - -/*! - * @brief Read specified QSPI interrupt flag - * - * @param flag: Specifies the interrupt flag to be checked - * The parameter can be one of following values: - * @arg QSPI_INT_FLAG_TFE: TX FIFO empty interrupt flag - * @arg QSPI_INT_FLAG_TFO: TX FIFO overflow interrupt flag - * @arg QSPI_INT_FLAG_RFU: RX FIFO underflow interrupt flag - * @arg QSPI_INT_FLAG_RFO: RX FIFO overflow interrupt flag - * @arg QSPI_INT_FLAG_RFF: RX FIFO full interrupt flag - * @arg QSPI_INT_FLAG_MST: Master interrupt flag - * - * @retval The new state of flag (SET or RESET) - */ -uint8_t QSPI_ReadIntFlag(QSPI_INT_FLAG_T flag) -{ - uint8_t ret = RESET; - - ret = QSPI->ISTS & flag ? SET : RESET; - - return ret; -} - -/*! - * @brief Clear specified QSPI interrupt flag - * - * @param flag: Specifies the interrupt flag to be checked - * The parameter can be one of following values: - * @arg QSPI_INT_FLAG_TFO: TX FIFO overflow interrupt flag - * @arg QSPI_INT_FLAG_RFU: RX FIFO underflow interrupt flag - * @arg QSPI_INT_FLAG_RFO: RX FIFO overflow interrupt flag - * @arg QSPI_INT_FLAG_MST: Master interrupt flag - * - * @retval None - */ -void QSPI_ClearIntFlag(uint32_t flag) -{ - volatile uint32_t dummy = 0; - - if(flag & QSPI_INT_FLAG_TFO) - { - dummy = QSPI->TFOIC; - } - else if(flag & QSPI_INT_FLAG_RFO) - { - dummy = QSPI->RFOIC; - } - else if(flag & QSPI_INT_FLAG_RFU) - { - dummy = QSPI->RFUIC; - } - else if(flag & QSPI_INT_FLAG_MST) - { - dummy = QSPI->MIC; - } -} -#endif //defined APM32F10X_MD/LD - -/**@} end of group QSPI_Fuctions*/ -/**@} end of group QSPI_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_rcm.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_rcm.c deleted file mode 100644 index 8d5fa06..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_rcm.c +++ /dev/null @@ -1,1077 +0,0 @@ -/*! - * @file apm32f10x_rcm.c - * - * @brief This file provides all the RCM firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup RCM_Driver RCM Driver - @{ -*/ - -/** @addtogroup RCM_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Resets the clock configuration to the default state - * - * @param None - * - * @retval None - */ -void RCM_Reset(void) -{ - /** Open HSI clock */ - RCM->CTRL_B.HSIEN = BIT_SET; - /** Config HSI to system clock and Reset AHBPSC, APB1PSC, APB2PSC, ADCPSC and MCOSEL bits */ - RCM->CFG &= (uint32_t)0xF8FF0000; - /** Reset HSEEN, CSSEN and PLLEN bits */ - RCM->CTRL &= (uint32_t)0xFEF6FFFF; - /** Reset HSEBCFG bit */ - RCM->CTRL_B.HSEBCFG = BIT_RESET; - /** Reset PLLSRCSEL, PLLHSEPSC, PLLMULCFG and USBDIV bits */ - RCM->CFG &= (uint32_t)0xFF00FFFF; - /** Disable all interrupts and clear pending bits */ - RCM->INT = 0x009F0000; -} - -/*! - * @brief Configs the HSE oscillator - * - * @param state: state of the HSE - * This parameter can be one of the following values: - * @arg RCM_HSE_CLOSE: Turn off the HSE oscillator - * @arg RCM_HSE_OPEN: Turn on the HSE oscillator - * @arg RCM_HSE_BYPASS: HSE oscillator bypassed with external clock - * - * @retval None - * - * @note When HSE is not used directly or through the PLL as system clock, it can be stopped. - */ -void RCM_ConfigHSE(RCM_HSE_T state) -{ - /** Reset HSEEN bit */ - RCM->CTRL_B.HSEEN = BIT_RESET; - - /** Reset HSEBCFG bit */ - RCM->CTRL_B.HSEBCFG = BIT_RESET; - - if (state == RCM_HSE_OPEN) - { - RCM->CTRL_B.HSEEN = BIT_SET; - } - else if (state == RCM_HSE_BYPASS) - { - RCM->CTRL_B.HSEBCFG = BIT_SET; - RCM->CTRL_B.HSEEN = BIT_SET; - } -} - -/*! - * @brief Waits for HSE to be ready - * - * @param None - * - * @retval SUCCESS: HSE oscillator is ready - * ERROR : HSE oscillator is not ready - */ -uint8_t RCM_WaitHSEReady(void) -{ - __IO uint32_t cnt; - - for (cnt = 0; cnt < HSE_STARTUP_TIMEOUT; cnt++) - { - if (RCM->CTRL_B.HSERDYFLG == BIT_SET) - { - return SUCCESS; - } - } - - return ERROR; -} - -/*! - * @brief Config HSI trimming value - * - * @param HSITrim: HSI trimming value - * This parameter must be a number between 0 and 0x1F. - * - * @retval None - */ -void RCM_ConfigHSITrim(uint8_t HSITrim) -{ - RCM->CTRL_B.HSITRIM = HSITrim; -} - -/*! - * @brief Enable the HSI - * - * @param None - * - * @retval None - */ -void RCM_EnableHSI(void) -{ - RCM->CTRL_B.HSIEN = BIT_SET; -} - -/*! - * @brief Disable the HSI - * - * @param None - * - * @retval None - * - * @note When HSI is not used directly or through the PLL as system clock, it can be stopped. - */ - -void RCM_DisableHSI(void) -{ - RCM->CTRL_B.HSIEN = BIT_RESET; -} - -/*! - * @brief Configures the External Low Speed oscillator (LSE) - * - * @param state : Specifies the new state of the LSE - * This parameter can be one of the following values: - * @arg RCM_LSE_CLOSE : Close the LSE - * @arg RCM_LSE_OPEN : Open the LSE - * @arg RCM_LSE_BYPASS : LSE bypass - * - * @retval None - */ -void RCM_ConfigLSE(RCM_LSE_T state) -{ - RCM->BDCTRL_B.LSEEN = BIT_RESET; - RCM->BDCTRL_B.LSEBCFG = BIT_RESET; - - if (state == RCM_LSE_OPEN) - { - RCM->BDCTRL_B.LSEEN = BIT_SET; - } - else if (state == RCM_LSE_BYPASS) - { - RCM->BDCTRL_B.LSEBCFG = BIT_SET; - RCM->BDCTRL_B.LSEEN = BIT_SET; - } -} - -/*! - * @brief Enables the Internal Low Speed oscillator (LSI) - * - * @param None - * - * @retval None - */ -void RCM_EnableLSI(void) -{ - RCM->CSTS_B.LSIEN = BIT_SET; -} - -/*! - * @brief Disables the Internal Low Speed oscillator (LSI) - * - * @param None - * - * @retval None - */ -void RCM_DisableLSI(void) -{ - RCM->CSTS_B.LSIEN = BIT_RESET; -} - -/*! - * @brief Configs the PLL clock source and multiplication factor - * - * @param pllSelect: PLL entry clock source select - * This parameter can be one of the following values: - * @arg RCM_PLLSEL_HSI_DIV_2: HSI clock divided by 2 selected as PLL clock source - * @arg RCM_PLLSEL_HSE: HSE clock selected as PLL clock source - * @arg RCM_PLLSEL_HSE_DIV2: HSE clock divided by 2 selected as PLL clock source - * - * @param pllMf: PLL multiplication factor - * This parameter can be RCM_PLLMF_x where x can be a value from 2 to 16. - * - * @retval None - * - * @note PLL should be disabled while use this function. - */ -void RCM_ConfigPLL(RCM_PLLSEL_T pllSelect, RCM_PLLMF_T pllMf) -{ - RCM->CFG_B.PLLMULCFG = pllMf; - RCM->CFG_B.PLLSRCSEL = pllSelect & 0x01; - RCM->CFG_B.PLLHSEPSC = (pllSelect >> 1) & 0x01; -} - -/*! - * @brief Enables the PLL - * - * @param None - * - * @retval None - */ -void RCM_EnablePLL(void) -{ - RCM->CTRL_B.PLLEN = BIT_SET; -} - -/*! -* @brief Disable the PLL -* -* @param None -* -* @retval None -* -* @note When PLL is not used as system clock, it can be stopped. -*/ -void RCM_DisablePLL(void) -{ - RCM->CTRL_B.PLLEN = BIT_RESET; -} - -/*! - * @brief Enable the Clock Security System - * - * @param None - * - * @retval None - */ -void RCM_EnableCSS(void) -{ - RCM->CTRL_B.CSSEN = BIT_SET; -} - -/*! - * @brief Disable the Clock Security System - * - * @param None - * - * @retval None - */ -void RCM_DisableCSS(void) -{ - RCM->CTRL_B.CSSEN = BIT_RESET; -} - -/*! - * @brief Selects the MCO pin clock ouput source - * - * @param mcoClock: specifies the clock source to output - * This parameter can be one of the following values: - * @arg RCM_MCOCLK_NO_CLOCK : No clock selected. - * @arg RCM_MCOCLK_SYSCLK : System clock selected. - * @arg RCM_MCOCLK_HSI : HSI oscillator clock selected. - * @arg RCM_MCOCLK_HSE : HSE oscillator clock selected. - * @arg RCM_MCOCLK_PLLCLK_DIV_2 : PLL clock divided by 2 selected. - * - * @retval None - */ -void RCM_ConfigMCO(RCM_MCOCLK_T mcoClock) -{ - RCM->CFG_B.MCOSEL = mcoClock; -} - -/*! - * @brief Configures the system clock source - * - * @param sysClkSelect: specifies the clock source used as system clock - * This parameter can be one of the following values: - * @arg RCM_SYSCLK_SEL_HSI: HSI is selected as system clock source - * @arg RCM_SYSCLK_SEL_HSE: HSE is selected as system clock source - * @arg RCM_SYSCLK_SEL_PLL: PLL is selected as system clock source - * - * @retva None - */ -void RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_T sysClkSelect) -{ - RCM->CFG_B.SCLKSEL = sysClkSelect; -} - -/*! - * @brief Returns the clock source which is used as system clock - * - * @param None - * - * @retval The clock source used as system clock - */ -RCM_SYSCLK_SEL_T RCM_ReadSYSCLKSource(void) -{ - return (RCM_SYSCLK_SEL_T)RCM->CFG_B.SCLKSELSTS; -} - -/*! - * @brief Configs the AHB clock prescaler. - * - * @param AHBDiv : Specifies the AHB clock prescaler from the system clock. - * This parameter can be one of the following values: - * @arg RCM_AHB_DIV_1 : HCLK = SYSCLK - * @arg RCM_AHB_DIV_2 : HCLK = SYSCLK / 2 - * @arg RCM_AHB_DIV_4 : HCLK = SYSCLK / 4 - * @arg RCM_AHB_DIV_8 : HCLK = SYSCLK / 8 - * @arg RCM_AHB_DIV_16 : HCLK = SYSCLK / 16 - * @arg RCM_AHB_DIV_64 : HCLK = SYSCLK / 64 - * @arg RCM_AHB_DIV_128 : HCLK = SYSCLK / 128 - * @arg RCM_AHB_DIV_256 : HCLK = SYSCLK / 256 - * @arg RCM_AHB_DIV_512 : HCLK = SYSCLK / 512 - * - * @retval None - */ -void RCM_ConfigAHB(RCM_AHB_DIV_T AHBDiv) -{ - RCM->CFG_B.AHBPSC = AHBDiv; -} - -/*! - * @brief Configs the APB1 clock prescaler. - * - * @param APB1Div: Specifies the APB1 clock prescaler from the AHB clock. - * This parameter can be one of the following values: - * @arg RCM_APB_DIV_1 : PCLK1 = HCLK - * @arg RCM_APB_DIV_2 : PCLK1 = HCLK / 2 - * @arg RCM_APB_DIV_4 : PCLK1 = HCLK / 4 - * @arg RCM_APB_DIV_8 : PCLK1 = HCLK / 8 - * @arg RCM_APB_DIV_16 : PCLK1 = HCLK / 16 - * - * @retval None - */ -void RCM_ConfigAPB1(RCM_APB_DIV_T APB1Div) -{ - RCM->CFG_B.APB1PSC = APB1Div; -} - -/*! - * @brief Configs the APB2 clock prescaler - * - * @param APB2Div: Specifies the APB2 clock prescaler from the AHB clock. - * This parameter can be one of the following values: - * @arg RCM_APB_DIV_1 : PCLK2 = HCLK - * @arg RCM_APB_DIV_2 : PCLK2 = HCLK / 2 - * @arg RCM_APB_DIV_4 : PCLK2 = HCLK / 4 - * @arg RCM_APB_DIV_8 : PCLK2 = HCLK / 8 - * @arg RCM_APB_DIV_16 : PCLK2 = HCLK / 16 - * - * @retval None - */ -void RCM_ConfigAPB2(RCM_APB_DIV_T APB2Div) -{ - RCM->CFG_B.APB2PSC = APB2Div; -} - -/*! - * @brief Configs the USB clock prescaler - * - * @param USBDiv: Specifies the USB clock prescaler from the PLL clock. - * This parameter can be one of the following values: - * @arg RCM_USB_DIV_1_5 : USBCLK = PLL clock /1.5 - * @arg RCM_USB_DIV_1 : USBCLK = PLL clock - * @arg RCM_USB_DIV_2 : USBCLK = PLL clock / 2 - * @arg RCM_USB_DIV_2_5 : USBCLK = PLL clock / 2.5 (Only for High-density devices for APM32F103xx) - * - * @retval None - */ -void RCM_ConfigUSBCLK(RCM_USB_DIV_T USBDiv) -{ - RCM->CFG_B.USBDPSC = USBDiv; -} - -/*! - * @brief Configs the FPU clock prescaler - * - * @param FPUDiv: Specifies the FPU clock prescaler from the AHB clock. - * This parameter can be one of the following values: - * @arg RCM_FPU_DIV_1 : FPUCLK = HCLK - * @arg RCM_FPU_DIV_2 : FPUCLK = HCLK /2 - * - * @retval None - */ -void RCM_ConfigFPUCLK(RCM_FPU_DIV_T FPUDiv) -{ - RCM->CFG_B.FPUPSC = FPUDiv; -} - -/*! - * @brief Configs the ADC clock prescaler - * - * @param ADCDiv : Specifies the ADC clock prescaler from the APB2 clock. - * This parameter can be one of the following values: - * @arg RCM_PCLK2_DIV_2: ADCCLK = PCLK2 / 2 - * @arg RCM_PCLK2_DIV_4: ADCCLK = PCLK2 / 4 - * @arg RCM_PCLK2_DIV_6: ADCCLK = PCLK2 / 6 - * @arg RCM_PCLK2_DIV_8: ADCCLK = PCLK2 / 8 - * - * @retval None - */ -void RCM_ConfigADCCLK(RCM_PCLK2_DIV_T ADCDiv) -{ - RCM->CFG_B.ADCPSC = ADCDiv; -} - -/*! - * @brief Configures the RTC clock source - * - * @param rtcClkSelect : specifies the RTC clock source. - * This parameter can be one of the following values: - * @arg RCM_RTCCLK_LSE : RTCCLK = LSE clock - * @arg RCM_RTCCLK_LSI : RTCCLK = LSI clock - * @arg RCM_RTCCLK_HSE_DIV_128: RTCCLK = HSE clock / 128 - * - * @retval None - * - * @note Once the RTC clock is configed it can't be changed unless reset the Backup domain. - */ -void RCM_ConfigRTCCLK(RCM_RTCCLK_T rtcClkSelect) -{ - RCM->BDCTRL_B.RTCSRCSEL = rtcClkSelect; -} - -/*! - * @brief Enables the RTC clock - * - * @param None - * - * @retval None - */ -void RCM_EnableRTCCLK(void) -{ - RCM->BDCTRL_B.RTCCLKEN = BIT_SET; -} - -/*! - * @brief Disables the RTC clock - * - * @param None - * - * @retval None - */ -void RCM_DisableRTCCLK(void) -{ - RCM->BDCTRL_B.RTCCLKEN = BIT_RESET; -} - -/*! - * @brief Reads the frequency of SYSCLK - * - * @param None - * - * @retval Return the frequency of SYSCLK - */ -uint32_t RCM_ReadSYSCLKFreq(void) -{ - uint32_t sysClock, pllMull, pllSource; - - /** get sys clock */ - sysClock = RCM->CFG_B.SCLKSEL; - - switch (sysClock) - { - /** sys clock is HSI */ - case RCM_SYSCLK_SEL_HSI: - sysClock = HSI_VALUE; - break; - - /** sys clock is HSE */ - case RCM_SYSCLK_SEL_HSE: - sysClock = HSE_VALUE; - break; - - /** sys clock is PLL */ - case RCM_SYSCLK_SEL_PLL: - pllMull = RCM->CFG_B.PLLMULCFG + 2; - pllSource = RCM->CFG_B.PLLSRCSEL; - - /** PLL entry clock source is HSE */ - if (pllSource == BIT_SET) - { - sysClock = HSE_VALUE * pllMull; - - /** HSE clock divided by 2 */ - if (pllSource == RCM->CFG_B.PLLHSEPSC) - { - sysClock >>= 1; - } - } - /** PLL entry clock source is HSI/2 */ - else - { - sysClock = (HSI_VALUE >> 1) * pllMull; - } - - break; - - default: - sysClock = HSI_VALUE; - break; - } - - return sysClock; -} - -/*! - * @brief Reads the frequency of HCLK(AHB) - * - * @param None - * - * @retval Return the frequency of HCLK - */ -uint32_t RCM_ReadHCLKFreq(void) -{ - uint32_t divider; - uint32_t sysClk, hclk; - uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - - sysClk = RCM_ReadSYSCLKFreq(); - divider = AHBPrescTable[RCM->CFG_B.AHBPSC]; - hclk = sysClk >> divider; - - return hclk; -} - -/*! - * @brief Reads the frequency of PCLK1 And PCLK2 - * - * @param PCLK1 : Return the frequency of PCLK1 - * - * @param PCLK1 : Return the frequency of PCLK2 - * - * @retval None - */ -void RCM_ReadPCLKFreq(uint32_t* PCLK1, uint32_t* PCLK2) -{ - uint32_t hclk, divider; - uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; - - hclk = RCM_ReadHCLKFreq(); - - if (PCLK1) - { - divider = APBPrescTable[RCM->CFG_B.APB1PSC]; - *PCLK1 = hclk >> divider; - } - - if (PCLK2) - { - divider = APBPrescTable[RCM->CFG_B.APB2PSC]; - *PCLK2 = hclk >> divider; - } -} - -/*! - * @brief Reads the frequency of ADCCLK - * - * @param None - * - * @retval Return the frequency of ADCCLK - */ -uint32_t RCM_ReadADCCLKFreq(void) -{ - uint32_t adcClk, pclk2, divider; - uint8_t ADCPrescTable[4] = {2, 4, 6, 8}; - - RCM_ReadPCLKFreq(NULL, &pclk2); - - /** Get ADC CLK */ - divider = ADCPrescTable[RCM->CFG_B.ADCPSC]; - adcClk = pclk2 / divider; - - return adcClk; -} - -/*! - * @brief Enables AHB peripheral clock. - * - * @param AHBPeriph : Enable the specifies clock of AHB peripheral. - * This parameter can be any combination of the following values: - * @arg RCM_AHB_PERIPH_DMA1 : Enable DMA1 clock - * @arg RCM_AHB_PERIPH_DMA2 : Enable DMA2 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_AHB_PERIPH_SRAM : Enable SRAM clock - * @arg RCM_AHB_PERIPH_FPU : Enable FPU clock - * @arg RCM_AHB_PERIPH_FMC : Enable FMC clock - * @arg RCM_AHB_PERIPH_QSPI : Enable QSPI clock - * @arg RCM_AHB_PERIPH_CRC : Enable CRC clock - * @arg RCM_AHB_PERIPH_EMMC : Enable EMMC clock (Only for High-density devices for APM32F103xx) - * @arg RCM_AHB_PERIPH_SDIO : Enable SDIO clock (Only for High-density devices for APM32F103xx) - * - * @retval None - */ -void RCM_EnableAHBPeriphClock(uint32_t AHBPeriph) -{ - RCM->AHBCLKEN |= AHBPeriph; -} - -/*! - * @brief Disable AHB peripheral clock. - * - * @param AHBPeriph : Disable the specifies clock of AHB peripheral. - * This parameter can be any combination of the following values: - * @arg RCM_AHB_PERIPH_DMA1 : Disable DMA1 clock - * @arg RCM_AHB_PERIPH_DMA2 : Disable DMA2 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_AHB_PERIPH_SRAM : Disable SRAM clock - * @arg RCM_AHB_PERIPH_FPU : Disable FPU clock - * @arg RCM_AHB_PERIPH_FMC : Disable FMC clock - * @arg RCM_AHB_PERIPH_QSPI : Disable QSPI clock - * @arg RCM_AHB_PERIPH_CRC : Disable CRC clock - * @arg RCM_AHB_PERIPH_EMMC : Disable EMMC clock (Only for High-density devices for APM32F103xx) - * @arg RCM_AHB_PERIPH_SDIO : Disable SDIO clock (Only for High-density devices for APM32F103xx) - * - * @retval None - */ -void RCM_DisableAHBPeriphClock(uint32_t AHBPeriph) -{ - RCM->AHBCLKEN &= (uint32_t)~AHBPeriph; -} - -/*! - * @brief Enable the High Speed APB (APB2) peripheral clock - * - * @param APB2Periph : Enable specifies clock of the APB2 peripheral. - * This parameter can be any combination of the following values: - * @arg RCM_APB2_PERIPH_AFIO : Enable AFIO clock - * @arg RCM_APB2_PERIPH_GPIOA : Enable GPIOA clock - * @arg RCM_APB2_PERIPH_GPIOB : Enable GPIOB clock - * @arg RCM_APB2_PERIPH_GPIOC : Enable GPIOC clock - * @arg RCM_APB2_PERIPH_GPIOD : Enable GPIOD clock - * @arg RCM_APB2_PERIPH_GPIOE : Enable GPIOE clock - * @arg RCM_APB2_PERIPH_GPIOF : Enable GPIOF clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_GPIOG : Enable GPIOG clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_ADC1 : Enable ADC1 clock - * @arg RCM_APB2_PERIPH_ADC2 : Enable ADC2 clock - * @arg RCM_APB2_PERIPH_TMR1 : Enable TMR1 clock - * @arg RCM_APB2_PERIPH_SPI1 : Enable SPI1 clock - * @arg RCM_APB2_PERIPH_TMR8 : Enable TMR8 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_USART1 : Enable USART1 clock - * @arg RCM_APB2_PERIPH_ADC3 : Enable ADC3 clock (Only for High-density devices for APM32F103xx) - * - * @retval None - */ -void RCM_EnableAPB2PeriphClock(uint32_t APB2Periph) -{ - RCM->APB2CLKEN |= APB2Periph; -} - -/*! - * @brief Disable the High Speed APB (APB2) peripheral clock - * - * @param APB2Periph : Disable specifies clock of the APB2 peripheral. - * This parameter can be any combination of the following values: - * @arg RCM_APB2_PERIPH_AFIO : Disable AFIO clock - * @arg RCM_APB2_PERIPH_GPIOA : Disable GPIOA clock - * @arg RCM_APB2_PERIPH_GPIOB : Disable GPIOB clock - * @arg RCM_APB2_PERIPH_GPIOC : Disable GPIOC clock - * @arg RCM_APB2_PERIPH_GPIOD : Disable GPIOD clock - * @arg RCM_APB2_PERIPH_GPIOE : Disable GPIOE clock - * @arg RCM_APB2_PERIPH_GPIOF : Disable GPIOF clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_GPIOG : Disable GPIOG clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_ADC1 : Disable ADC1 clock - * @arg RCM_APB2_PERIPH_ADC2 : Disable ADC2 clock - * @arg RCM_APB2_PERIPH_TMR1 : Disable TMR1 clock - * @arg RCM_APB2_PERIPH_SPI1 : Disable SPI1 clock - * @arg RCM_APB2_PERIPH_TMR8 : Disable TMR8 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_USART1 : Disable USART1 clock - * @arg RCM_APB2_PERIPH_ADC3 : Disable ADC3 clock (Only for High-density devices for APM32F103xx) - * - * @retval None - */ -void RCM_DisableAPB2PeriphClock(uint32_t APB2Periph) -{ - RCM->APB2CLKEN &= (uint32_t)~APB2Periph; -} - -/*! - * @brief Enable the Low Speed APB (APB1) peripheral clock - * - * @param APB1Periph : Enable specifies clock of the APB1 peripheral. - * This parameter can be any combination of the following values: - * @arg RCM_APB1_PERIPH_TMR2 : Enable TMR2 clock - * @arg RCM_APB1_PERIPH_TMR3 : Enable TMR3 clock - * @arg RCM_APB1_PERIPH_TMR4 : Enable TMR4 clock - * @arg RCM_APB1_PERIPH_TMR5 : Enable TMR5 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_TMR6 : Enable TMR6 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_TMR7 : Enable TMR7 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_WWDT : Enable WWDT clock - * @arg RCM_APB1_PERIPH_SPI2 : Enable SPI2 clock - * @arg RCM_APB1_PERIPH_SPI3 : Enable SPI3 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_USART2 : Enable USART2 clock - * @arg RCM_APB1_PERIPH_USART3 : Enable USART3 clock - * @arg RCM_APB1_PERIPH_UART4 : Enable UART4 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_UART5 : Enable UART5 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_I2C1 : Enable I2C1 clock - * @arg RCM_APB1_PERIPH_I2C2 : Enable I2C2 clock - * @arg RCM_APB1_PERIPH_USB : Enable USB clock - * @arg RCM_APB1_PERIPH_CAN1 : Enable CAN1 clock - * @arg RCM_APB1_PERIPH_CAN2 : Enable CAN2 clock (only for APM32F103xC device) - * @arg RCM_APB1_PERIPH_BAKR : Enable BAKR clock - * @arg RCM_APB1_PERIPH_PMU : Enable PMU clock - * @arg RCM_APB1_PERIPH_DAC : Enable DAC clock (Only for High-density devices for APM32F103xx) - * - * @retval None - */ -void RCM_EnableAPB1PeriphClock(uint32_t APB1Periph) -{ - RCM->APB1CLKEN |= APB1Periph; -} - -/*! - * @brief Disable the Low Speed APB (APB1) peripheral clock - * - * @param APB1Periph : Disable specifies clock of the APB1 peripheral. - * This parameter can be any combination of the following values: - * @arg RCM_APB1_PERIPH_TMR2 : Disable TMR2 clock - * @arg RCM_APB1_PERIPH_TMR3 : Disable TMR3 clock - * @arg RCM_APB1_PERIPH_TMR4 : Disable TMR4 clock - * @arg RCM_APB1_PERIPH_TMR5 : Disable TMR5 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_TMR6 : Disable TMR6 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_TMR7 : Disable TMR7 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_WWDT : Disable WWDT clock - * @arg RCM_APB1_PERIPH_SPI2 : Disable SPI2 clock - * @arg RCM_APB1_PERIPH_SPI3 : Disable SPI3 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_USART2 : Disable USART2 clock - * @arg RCM_APB1_PERIPH_USART3 : Disable USART3 clock - * @arg RCM_APB1_PERIPH_UART4 : Disable UART4 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_UART5 : Disable UART5 clock (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_I2C1 : Disable I2C1 clock - * @arg RCM_APB1_PERIPH_I2C2 : Disable I2C2 clock - * @arg RCM_APB1_PERIPH_USB : Disable USB clock - * @arg RCM_APB1_PERIPH_CAN1 : Disable CAN1 clock - * @arg RCM_APB1_PERIPH_CAN2 : Disable CAN2 clock (only for APM32F103xC device) - * @arg RCM_APB1_PERIPH_BAKR : Disable BAKR clock - * @arg RCM_APB1_PERIPH_PMU : Disable PMU clock - * @arg RCM_APB1_PERIPH_DAC : Disable DAC clock (Only for High-density devices for APM32F103xx) - * - * @retval None - */ -void RCM_DisableAPB1PeriphClock(uint32_t APB1Periph) -{ - RCM->APB1CLKEN &= (uint32_t)~APB1Periph; -} - -/*! - * @brief Enable High Speed APB (APB2) peripheral reset - * - * @param APB2Periph : Enable specifies APB2 peripheral reset. - * This parameter can be any combination of the following values: - * @arg RCM_APB2_PERIPH_AFIO : Enable AFIO reset - * @arg RCM_APB2_PERIPH_GPIOA : Enable GPIOA reset - * @arg RCM_APB2_PERIPH_GPIOB : Enable GPIOB reset - * @arg RCM_APB2_PERIPH_GPIOC : Enable GPIOC reset - * @arg RCM_APB2_PERIPH_GPIOD : Enable GPIOD reset - * @arg RCM_APB2_PERIPH_GPIOE : Enable GPIOE reset - * @arg RCM_APB2_PERIPH_GPIOF : Enable GPIOF reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_GPIOG : Enable GPIOG reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_ADC1 : Enable ADC1 reset - * @arg RCM_APB2_PERIPH_ADC2 : Enable ADC2 reset - * @arg RCM_APB2_PERIPH_TMR1 : Enable TMR1 reset - * @arg RCM_APB2_PERIPH_SPI1 : Enable SPI1 reset - * @arg RCM_APB2_PERIPH_TMR8 : Enable TMR8 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_USART1 : Enable USART1 reset - * @arg RCM_APB2_PERIPH_ADC3 : Enable ADC3 reset (Only for High-density devices for APM32F103xx) - * - * @retval None - */ -void RCM_EnableAPB2PeriphReset(uint32_t APB2Periph) -{ - RCM->APB2RST |= APB2Periph; -} - -/*! - * @brief Disable High Speed APB (APB2) peripheral reset - * - * @param APB2Periph : Disable specifies APB2 peripheral reset. - * This parameter can be any combination of the following values: - * @arg RCM_APB2_PERIPH_AFIO : Disable AFIO reset - * @arg RCM_APB2_PERIPH_GPIOA : Disable GPIOA reset - * @arg RCM_APB2_PERIPH_GPIOB : Disable GPIOB reset - * @arg RCM_APB2_PERIPH_GPIOC : Disable GPIOC reset - * @arg RCM_APB2_PERIPH_GPIOD : Disable GPIOD reset - * @arg RCM_APB2_PERIPH_GPIOE : Disable GPIOE reset - * @arg RCM_APB2_PERIPH_GPIOF : Disable GPIOF reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_GPIOG : Disable GPIOG reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_ADC1 : Disable ADC1 reset - * @arg RCM_APB2_PERIPH_ADC2 : Disable ADC2 reset - * @arg RCM_APB2_PERIPH_TMR1 : Disable TMR1 reset - * @arg RCM_APB2_PERIPH_SPI1 : Disable SPI1 reset - * @arg RCM_APB2_PERIPH_TMR8 : Disable TMR8 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB2_PERIPH_USART1 : Disable USART1 reset - * @arg RCM_APB2_PERIPH_ADC3 : Disable ADC3 reset (Only for High-density devices for APM32F103xx) - * - * @retval None - */ -void RCM_DisableAPB2PeriphReset(uint32_t APB2Periph) -{ - RCM->APB2RST &= (uint32_t)~APB2Periph; -} - -/*! - * @brief Enable Low Speed APB (APB1) peripheral reset - * - * @param APB1Periph : Enable specifies APB1 peripheral reset. - * This parameter can be any combination of the following values: - * @arg RCM_APB1_PERIPH_TMR2 : Enable TMR2 reset - * @arg RCM_APB1_PERIPH_TMR3 : Enable TMR3 reset - * @arg RCM_APB1_PERIPH_TMR4 : Enable TMR4 reset - * @arg RCM_APB1_PERIPH_TMR5 : Enable TMR5 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_TMR6 : Enable TMR6 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_TMR7 : Enable TMR7 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_WWDT : Enable WWDT reset - * @arg RCM_APB1_PERIPH_SPI2 : Enable SPI2 reset - * @arg RCM_APB1_PERIPH_SPI3 : Enable SPI3 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_USART2 : Enable USART2 reset - * @arg RCM_APB1_PERIPH_USART3 : Enable USART3 reset - * @arg RCM_APB1_PERIPH_UART4 : Enable UART4 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_UART5 : Enable UART5 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_I2C1 : Enable I2C1 reset - * @arg RCM_APB1_PERIPH_I2C2 : Enable I2C2 reset - * @arg RCM_APB1_PERIPH_USB : Enable USB reset - * @arg RCM_APB1_PERIPH_CAN1 : Enable CAN1 reset - * @arg RCM_APB1_PERIPH_CAN2 : Enable CAN2 reset (only for APM32F103xC device) - * @arg RCM_APB1_PERIPH_BAKR : Enable BAKR reset - * @arg RCM_APB1_PERIPH_PMU : Enable PMU reset - * @arg RCM_APB1_PERIPH_DAC : Enable DAC reset - * - * @retval None - */ -void RCM_EnableAPB1PeriphReset(uint32_t APB1Periph) -{ - RCM->APB1RST |= APB1Periph; -} - -/*! - * @brief Disable Low Speed APB (APB1) peripheral reset - * - * @param APB1Periph : Disable specifies APB1 peripheral reset. - * This parameter can be any combination of the following values: - * @arg RCM_APB1_PERIPH_TMR2 : Disable TMR2 reset - * @arg RCM_APB1_PERIPH_TMR3 : Disable TMR3 reset - * @arg RCM_APB1_PERIPH_TMR4 : Disable TMR4 reset - * @arg RCM_APB1_PERIPH_TMR5 : Disable TMR5 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_TMR6 : Disable TMR6 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_TMR7 : Disable TMR7 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_WWDT : Disable WWDT reset - * @arg RCM_APB1_PERIPH_SPI2 : Disable SPI2 reset - * @arg RCM_APB1_PERIPH_SPI3 : Disable SPI3 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_USART2 : Disable USART2 reset - * @arg RCM_APB1_PERIPH_USART3 : Disable USART3 reset - * @arg RCM_APB1_PERIPH_UART4 : Disable UART4 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_UART5 : Disable UART5 reset (Only for High-density devices for APM32F103xx) - * @arg RCM_APB1_PERIPH_I2C1 : Disable I2C1 reset - * @arg RCM_APB1_PERIPH_I2C2 : Disable I2C2 reset - * @arg RCM_APB1_PERIPH_USB : Disable USB reset - * @arg RCM_APB1_PERIPH_CAN1 : Disable CAN1 reset - * @arg RCM_APB1_PERIPH_CAN2 : Disable CAN2 reset (only for APM32F103xC device) - * @arg RCM_APB1_PERIPH_BAKR : Disable BAKR reset - * @arg RCM_APB1_PERIPH_PMU : Disable PMU reset - * @arg RCM_APB1_PERIPH_DAC : Disable DAC reset - * - * @retval None - */ -void RCM_DisableAPB1PeriphReset(uint32_t APB1Periph) -{ - RCM->APB1RST &= (uint32_t)~APB1Periph; -} - -/*! - * @brief Enable the Backup domain reset - * - * @param None - * - * @retval None - * - */ -void RCM_EnableBackupReset(void) -{ - RCM->BDCTRL_B.BDRST = BIT_SET; -} - -/*! - * @brief Disable the Backup domain reset - * - * @param None - * - * @retval None - */ -void RCM_DisableBackupReset(void) -{ - RCM->BDCTRL_B.BDRST = BIT_RESET; -} - -/*! - * @brief Enable RCM interrupts - * - * @param interrupt : Enable specifies RCM interrupt sources. - * This parameter can be any combination of the following values: - * @arg RCM_INT_LSIRDY : LSI ready interrupt - * @arg RCM_INT_LSERDY : LSE ready interrupt - * @arg RCM_INT_HSIRDY : HSI ready interrupt - * @arg RCM_INT_HSERDY : HSE ready interrupt - * @arg RCM_INT_PLLRDY : PLL ready interrupt - * - * @retval None - */ -void RCM_EnableInterrupt(uint32_t interrupt) -{ - uint32_t temp; - - temp = interrupt << 8; - - RCM->INT |= temp; -} - -/*! - * @brief Disable RCM interrupts - * - * @param interrupt : Disable specifies RCM interrupt sources. - * This parameter can be any combination of the following values: - * @arg RCM_INT_LSIRDY : LSI ready interrupt - * @arg RCM_INT_LSERDY : LSE ready interrupt - * @arg RCM_INT_HSIRDY : HSI ready interrupt - * @arg RCM_INT_HSERDY : HSE ready interrupt - * @arg RCM_INT_PLLRDY : PLL ready interrupt - * - * @retval None - */ -void RCM_DisableInterrupt(uint32_t interrupt) -{ - uint32_t temp; - - temp = interrupt << 8; - - RCM->INT &= (uint32_t)~temp; -} - -/*! - * @brief Read the specified RCM flag status - * - * @param flag : Returns specifies the flag status. - * This parameter can be one of the following values: - * @arg RCM_FLAG_HSIRDY : HSI ready flag - * @arg RCM_FLAG_HSERDY : HSE ready flag - * @arg RCM_FLAG_PLLRDY : PLL ready flag - * @arg RCM_FLAG_LSERDY : LSE ready flag - * @arg RCM_FLAG_LSIRDY : LSI ready flag - * @arg RCM_FLAG_PINRST : NRST PIN Reset Occur Flag - * @arg RCM_FLAG_PORRST : POR/PDR Reset Occur Flag - * @arg RCM_FLAG_SWRST : Software Reset Occur Flag - * @arg RCM_FLAG_IWDTRST : Independent Watchdog Reset Occur Flag - * @arg RCM_FLAG_WWDTRST : Window Watchdog Reset Occur Flag - * @arg RCM_FLAG_LPRRST : Low Power Reset Occur Flag - * - * @retval The new state of flag (SET or RESET) - */ -uint8_t RCM_ReadStatusFlag(RCM_FLAG_T flag) -{ - uint32_t reg, bit; - - bit = (uint32_t)(1 << (flag & 0xff)); - - reg = (flag >> 8) & 0xff; - - switch (reg) - { - case 0: - reg = RCM->CTRL; - break; - - case 1: - reg = RCM->BDCTRL; - break; - - case 2: - reg = RCM->CSTS; - break; - - default: - break; - } - - if (reg & bit) - { - return SET; - } - - return RESET; -} - -/*! - * @brief Clears all the RCM reset flags - * - * @param None - * - * @retval None - * - * @note The reset flags are: - * RCM_FLAG_PINRST, RCM_FLAG_PWRST, RCM_FLAG_SWRST - * RCM_FLAG_IWDTRST, RCM_FLAG_WWDTRST, RCM_FLAG_LPRRST - */ -void RCM_ClearStatusFlag(void) -{ - RCM->CSTS_B.RSTFLGCLR = BIT_SET; -} - -/*! - * @brief Reads the specified RCM interrupt Flag - * - * @param flag Reads specifies RCM interrupt flag. - * This parameter can be one of the following values: - * @arg RCM_INT_LSIRDY : LSI ready interrupt flag - * @arg RCM_INT_LSERDY : LSE ready interrupt flag - * @arg RCM_INT_HSIRDY : HSI ready interrupt flag - * @arg RCM_INT_HSERDY : HSE ready interrupt flag - * @arg RCM_INT_PLLRDY : PLL ready interrupt flag - * @arg RCM_INT_CSS : Clock Security System interrupt flag - * - * @retval The new state of intFlag (SET or RESET) - */ -uint8_t RCM_ReadIntFlag(RCM_INT_T flag) -{ - return (RCM->INT& flag) ? SET : RESET; -} - -/*! - * @brief Clears the interrupt flag - * - * @param flag : Clears specifies interrupt flag. - * @arg RCM_INT_LSIRDY : Clear LSI ready interrupt flag - * @arg RCM_INT_LSERDY : Clear LSE ready interrupt flag - * @arg RCM_INT_HSIRDY : Clear HSI ready interrupt flag - * @arg RCM_INT_HSERDY : Clear HSE ready interrupt flag - * @arg RCM_INT_PLLRDY : Clear PLL ready interrupt flag - * @arg RCM_INT_CSS : Clear Clock Security System interrupt flag - * - * @retval None - */ -void RCM_ClearIntFlag(uint32_t flag) -{ - uint32_t temp; - - temp = flag << 16; - RCM->INT |= temp; -} - -/**@} end of group RCM_Fuctions*/ -/**@} end of group RCM_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_rtc.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_rtc.c deleted file mode 100644 index 336f5ce..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_rtc.c +++ /dev/null @@ -1,263 +0,0 @@ -/*! - * @file apm32f10x_rtc.c - * - * @brief This file provides all the RTC firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ -#include "apm32f10x_rtc.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup RTC_Driver RTC Driver - @{ -*/ - -/** @addtogroup RTC_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Enter RTC configuration mode. - * - * @param None - * - * @retval None - */ -void RTC_EnableConfigMode(void) -{ - RTC->CSTS_B.CFGMFLG = BIT_SET; -} - -/*! - * @brief Exit RTC configuration mode. - * - * @param None - * - * @retval None - */ -void RTC_DisableConfigMode(void) -{ - RTC->CSTS_B.CFGMFLG = BIT_RESET; -} - -/*! - * @brief Read the RTC counter value. - * - * @param None - * - * @retval RTC counter value. - */ -uint32_t RTC_ReadCounter(void) -{ - uint32_t reg = 0; - reg = (RTC->CNTH_B.CNTH) << 16; - reg |= (RTC->CNTL_B.CNTL); - return (reg); -} - -/*! - * @brief Config the RTC counter value. - * - * @param value: RTC counter new value. - * - * @retval None - */ -void RTC_ConfigCounter(uint32_t value) -{ - RTC_EnableConfigMode(); - RTC->CNTH_B.CNTH = value >> 16; - RTC->CNTL_B.CNTL = value & 0x0000FFFF; - RTC_DisableConfigMode(); -} - -/*! - * @brief Config the RTC prescaler value. - * - * @param value: RTC prescaler new value. - * - * @retval None - */ -void RTC_ConfigPrescaler(uint32_t value) -{ - RTC_EnableConfigMode(); - RTC->PSCRLDH_B.PSCRLDH = value >> 16; - RTC->PSCRLDL_B.PSCRLDL = value & 0x0000FFFF; - RTC_DisableConfigMode(); -} - -/*! - * @brief Config the RTC alarm value. - * - * @param value: RTC alarm new value. - * - * @retval None - */ -void RTC_ConfigAlarm(uint32_t value) -{ - RTC_EnableConfigMode(); - RTC->ALRH_B.ALRH = value >> 16; - RTC->ALRL_B.ALRL = value & 0x0000FFFF; - RTC_DisableConfigMode(); -} - -/*! - * @brief Reads the RTC divider value. - * - * @param None - * - * @retval RTC Divider value. - */ -uint32_t RTC_ReadDivider(void) -{ - uint32_t reg = 0; - reg = (RTC->PSCH_B.PSCH & 0x000F) << 16; - reg |= (RTC->PSCL_B.PSCL); - return (reg); -} - -/*! - * @brief Waits until last write operation on RTC registers has finished. - * - * @param None - * - * @retval None - */ -void RTC_WaitForLastTask(void) -{ - while(RTC->CSTS_B.OCFLG == BIT_RESET) - { - } -} - -/*! - * @brief Waits until the RTC registers - * - * @param None - * - * @retval None - */ -void RTC_WaitForSynchor(void) -{ - RTC->CSTS_B.RSYNCFLG = BIT_RESET; - while(RTC->CSTS_B.RSYNCFLG == BIT_RESET); -} - -/*! - * @brief Enable RTC interrupts. - * - * @param interrupt: specifies the RTC interrupt sources to be enabled - * This parameter can be any combination of the following values: - * @arg RTC_INT_OVR : Overflow interrupt - * @arg RTC_INT_ALR : Alarm interrupt - * @arg RTC_INT_SEC : Second interrupt - */ -void RTC_EnableInterrupt(uint16_t interrupt) -{ - RTC->CTRL |= interrupt; -} - -/*! - * @brief Disable RTC interrupts. - * - * @param interrupt: specifies the RTC interrupt sources to be disabled - * This parameter can be any combination of the following values: - * @arg RTC_INT_OVR : Overflow interrupt - * @arg RTC_INT_ALR : Alarm interrupt - * @arg RTC_INT_SEC : Second interrupt - * - * @retval None - */ -void RTC_DisableInterrupt(uint16_t interrupt) -{ - RTC->CTRL &= (uint32_t )~interrupt; -} - -/*! - * @brief Read flag bit - * - * @param flag: specifies the flag to check. - * This parameter can be one of the following values: - * @arg RTC_FLAG_OC : RTC Operation Complete flag - * @arg RTC_FLAG_RSYNC: Registers Synchronized flag - * @arg RTC_FLAG_OVR : Overflow flag - * @arg RTC_FLAG_ALR : Alarm flag - * @arg RTC_FLAG_SEC : Second flag - * - * @retval SET or RESET - */ -uint8_t RTC_ReadStatusFlag(RTC_FLAG_T flag) -{ - return (RTC->CSTS & flag) ? SET : RESET; -} - -/*! - * @brief Clear flag bit - * - * @param flag: specifies the flag to clear. - * This parameter can be any combination of the following values: - * @arg RTC_FLAG_OVR : Overflow flag - * @arg RTC_FLAG_ALR : Alarm flag - * @arg RTC_FLAG_SEC : Second flag - * - * @retval None - */ -void RTC_ClearStatusFlag(uint16_t flag) -{ - RTC->CSTS &= (uint32_t)~flag; -} - -/*! - * @brief Read interrupt flag bit is set - * - * @param flag: specifies the flag to check. - * This parameter can be any combination of the following values: - * @arg RTC_INT_OVR : Overflow interrupt - * @arg RTC_INT_ALR : Alarm interrupt - * @arg RTC_INT_SEC : Second interrupt - * - * @retval None - */ -uint8_t RTC_ReadIntFlag(RTC_INT_T flag) -{ - return (RTC->CSTS & flag) ? SET : RESET; -} - -/*! - * @brief Clear RTC interrupt flag bit - * - * @param flag: specifies the flag to clear. - * This parameter can be one of the following values: - * @arg RTC_INT_OVR : Overflow interrupt - * @arg RTC_INT_ALR : Alarm interrupt - * @arg RTC_INT_SEC : Second interrupt - * - * @retval None - */ -void RTC_ClearIntFlag(uint16_t flag) -{ - RTC->CSTS &= (uint32_t)~flag; -} - -/**@} end of group RTC_Fuctions*/ -/**@} end of group RTC_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_sci2c.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_sci2c.c deleted file mode 100644 index 914dbf9..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_sci2c.c +++ /dev/null @@ -1,910 +0,0 @@ -/*! - * @file apm32f10x_sci2c.c - * - * @brief This file contains all the functions for the SCI2C peripheral - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_sci2c.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup SCI2C_Driver SCI2C Driver - @{ -*/ - -/** @addtogroup SCI2C_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Set I2C peripheral registers to their default reset values - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -void SCI2C_Reset(SCI2C_T *i2c) -{ - if(i2c == I2C3) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_I2C1); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_I2C1); - } - else - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_I2C2); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_I2C2); - } - - i2c->SW = 0; - i2c->SW = 1; - i2c->INTEN = 0; -} - -/*! - * @brief Config the I2C peripheral according to the specified parameters in the sci2cConfig - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param sci2cConfig: pointer to a SCI2C_Config_T structure - * - * @retval None - */ -void SCI2C_Config(SCI2C_T *i2c, SCI2C_Config_T *sci2cConfig) -{ - i2c->SW = BIT_SET; - - i2c->CTRL2_B.I2CEN = BIT_RESET; - - if(sci2cConfig->mode == SCI2C_MODE_MASTER) - { - i2c->CTRL1_B.MST = BIT_SET; - i2c->CTRL1_B.SLADIS = BIT_SET; - } - else - { - i2c->CTRL1_B.MST = BIT_RESET; - } - - i2c->CTRL1_B.SPD = sci2cConfig->speed; - i2c->CTRL1_B.RSTAEN = sci2cConfig->restart; - - i2c->TFT = sci2cConfig->txFifoThreshold; - i2c->RFT = sci2cConfig->rxFifoThreshold; - - i2c->TARADDR_B.MAM = sci2cConfig->addrMode; - i2c->CTRL1_B.SAM = sci2cConfig->addrMode; - i2c->SLAADDR = sci2cConfig->slaveAddr; - - if(sci2cConfig->speed == SCI2C_SPEED_STANDARD) - { - i2c->SSCLC = sci2cConfig->clkLowPeriod; - i2c->SSCHC = sci2cConfig->clkHighPeriod; - } - else if(sci2cConfig->speed == SCI2C_SPEED_FAST) - { - i2c->FSCLC = sci2cConfig->clkLowPeriod; - i2c->FSCHC = sci2cConfig->clkHighPeriod; - } - else if(sci2cConfig->speed == SCI2C_SPEED_HIGH) - { - i2c->HSCLC = sci2cConfig->clkLowPeriod; - i2c->HSCHC = sci2cConfig->clkHighPeriod; - } -} - -/*! - * @brief Fills each sci2cConfig member with its default value - * - * @param sci2cConfig: pointer to a SCI2C_Config_T structure - * - * @retval None - */ -void SCI2C_ConfigStructInit(SCI2C_Config_T *sci2cConfig) -{ - sci2cConfig->addrMode = SCI2C_ADDR_MODE_7BIT; - sci2cConfig->slaveAddr = 0x55; - sci2cConfig->clkHighPeriod = 0x3C; - sci2cConfig->clkLowPeriod = 0x82; - sci2cConfig->mode = SCI2C_MODE_MASTER; - sci2cConfig->restart = SCI2C_RESTART_ENABLE; - sci2cConfig->rxFifoThreshold = 0; - sci2cConfig->txFifoThreshold = 0; - sci2cConfig->speed = SCI2C_SPEED_FAST; -} - -/*! - * @brief Read specified flag - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param flag: Specifies the flag to be checked - * The parameter can be one of following values: - * @arg SCI2C_FLAG_ACT: Activity flag - * @arg SCI2C_FLAG_TFNF: Tx FIFO not full flag - * @arg SCI2C_FLAG_TFE: TX FIFO empty flag - * @arg SCI2C_FLAG_RFNE: Rx FIFO not empty flag - * @arg SCI2C_FLAG_RFF: Rx FIFO full flag - * @arg SCI2C_FLAG_MA: Master activity flag - * @arg SCI2C_FLAG_SA: Slave activity flag - * @arg SCI2C_FLAG_I2CEN: I2C enable flag - * @arg SCI2C_FLAG_SDWB: Slave disable while busy flag - * @arg SCI2C_FLAG_SRDL: Slave receive data lost flag - * - * @retval The new state of flag (SET or RESET) - */ -uint8_t SCI2C_ReadStatusFlag(SCI2C_T *i2c, SCI2C_FLAG_T flag) -{ - uint8_t ret = RESET; - - if(flag & BIT8) - { - ret = i2c->STS2 & flag ? SET : RESET; - } - else - { - ret = i2c->STS1 & flag ? SET : RESET; - } - - return ret; -} - -/*! - * @brief Read specified interrupt flag - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param flag: Specifies the interrupt flag to be checked - * The parameter can be one of following values: - * @arg SCI2C_INT_RFU: Rx FIFO underflow interrupt flag - * @arg SCI2C_INT_RFO: Rx FIFO onverflow interrupt flag - * @arg SCI2C_INT_RFF: Rx FIFO full interrupt flag - * @arg SCI2C_INT_TFO: Tx FIFO onverflow interrupt flag - * @arg SCI2C_INT_TFE: Tx FIFO empty interrupt flag - * @arg SCI2C_INT_RR: Read request interrupt flag - * @arg SCI2C_INT_TA: Tx abort interrupt flag - * @arg SCI2C_INT_RD: Read done interrupt flag - * @arg SCI2C_INT_ACT: Activity interrupt flag - * @arg SCI2C_INT_STPD: Stop detect interrupt flag - * @arg SCI2C_INT_STAD: Start detect interrupt flag - * @arg SCI2C_INT_GC: Gernal call interrupt flag - * @arg SCI2C_INT_RSTAD: Restart detect interrupt flag - * @arg SCI2C_INT_MOH: Master on hold interrupt flag - * - * @retval The new state of flag (SET or RESET) - */ -uint8_t SCI2C_ReadIntFlag(SCI2C_T *i2c, SCI2C_INT_T flag) -{ - uint8_t ret = RESET; - - ret = i2c->INTSTS & flag ? SET : RESET; - - return ret; -} - -/*! - * @brief Clear specified interrupt flag - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param flag: Specifies the interrupt flag to be checked - * The parameter can be one of following values: - * @arg SCI2C_INT_RFU: Rx FIFO underflow interrupt flag - * @arg SCI2C_INT_RFO: Rx FIFO onverflow interrupt flag - * @arg SCI2C_INT_TFO: Tx FIFO onverflow interrupt flag - * @arg SCI2C_INT_RR: Read request interrupt flag - * @arg SCI2C_INT_TA: Tx abort interrupt flag - * @arg SCI2C_INT_RD: Read done interrupt flag - * @arg SCI2C_INT_ACT: Activity interrupt flag - * @arg SCI2C_INT_STPD: Stop detect interrupt flag - * @arg SCI2C_INT_STAD: Start detect interrupt flag - * @arg SCI2C_INT_GC: Gernal call interrupt flag - * @arg SCI2C_INT_ALL: All interrupt flag - * @retval The new state of flag (SET or RESET) - */ -void SCI2C_ClearIntFlag(SCI2C_T *i2c, SCI2C_INT_T flag) -{ - volatile uint32_t dummy = 0; - - if(flag == SCI2C_INT_ALL) - { - dummy = i2c->INTCLR; - } - else if(flag == SCI2C_INT_RFU) - { - dummy = i2c->RFUIC; - } - else if(flag == SCI2C_INT_RFO) - { - dummy = i2c->RFOIC; - } - else if(flag == SCI2C_INT_TFO) - { - dummy = i2c->TFOIC; - } - else if(flag == SCI2C_INT_RR) - { - dummy = i2c->RRIC; - } - else if(flag == SCI2C_INT_TA) - { - dummy = i2c->TAIC; - } - else if(flag == SCI2C_INT_RD) - { - dummy = i2c->RDIC; - } - else if(flag == SCI2C_INT_ACT) - { - dummy = i2c->AIC; - } - else if(flag == SCI2C_INT_STPD) - { - dummy = i2c->STPDIC; - } - else if(flag == SCI2C_INT_STAD) - { - dummy = i2c->STADIC; - } - else if(flag == SCI2C_INT_GC) - { - dummy = i2c->GCIC; - } -} - -/*! - * @brief Read specified interrupt flag(Raw register) - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param flag: Specifies the interrupt flag to be checked - * The parameter can be one of following values: - * @arg SCI2C_INT_RFU: Rx FIFO underflow interrupt flag - * @arg SCI2C_INT_RFO: Rx FIFO onverflow interrupt flag - * @arg SCI2C_INT_RFF: Rx FIFO full interrupt flag - * @arg SCI2C_INT_TFO: Tx FIFO onverflow interrupt flag - * @arg SCI2C_INT_TFE: Tx FIFO empty interrupt flag - * @arg SCI2C_INT_RR: Read request interrupt flag - * @arg SCI2C_INT_TA: Tx abort interrupt flag - * @arg SCI2C_INT_RD: Read done interrupt flag - * @arg SCI2C_INT_ACT: Activity interrupt flag - * @arg SCI2C_INT_STPD: Stop detect interrupt flag - * @arg SCI2C_INT_STAD: Start detect interrupt flag - * @arg SCI2C_INT_GC: Gernal call interrupt flag - * @arg SCI2C_INT_RSTAD: Restart detect interrupt flag - * @arg SCI2C_INT_MOH: Master on hold interrupt flag - * - * @retval The new state of flag (SET or RESET) - */ -uint8_t SCI2C_ReadRawIntFlag(SCI2C_T *i2c, SCI2C_INT_T flag) -{ - uint8_t ret = RESET; - - ret = i2c->RIS & flag ? SET : RESET; - - return ret; -} - -/*! - * @brief Enable the specified interrupts - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param interrupt: Specifies the interrupt sources - * The parameter can be any combination of following values: - * @arg SCI2C_INT_RFU: Rx FIFO underflow interrupt - * @arg SCI2C_INT_RFO: Rx FIFO onverflow interrupt - * @arg SCI2C_INT_RFF: Rx FIFO full interrupt - * @arg SCI2C_INT_TFO: Tx FIFO onverflow interrupt - * @arg SCI2C_INT_TFE: Tx FIFO empty interrupt - * @arg SCI2C_INT_RR: Read request interrupt - * @arg SCI2C_INT_TA: Tx abort interrupt - * @arg SCI2C_INT_RD: Read done interrupt - * @arg SCI2C_INT_ACT: Activity interrupt - * @arg SCI2C_INT_STPD: Stop detect interrupt - * @arg SCI2C_INT_STAD: Start detect interrupt - * @arg SCI2C_INT_GC: Gernal call interrupt - * @arg SCI2C_INT_RSTAD: Restart detect interrupt - * @arg SCI2C_INT_MOH: Master on hold interrupt - * - * @retval None - */ -void SCI2C_EnableInterrupt(SCI2C_T *i2c, uint16_t interrupt) -{ - i2c->INTEN |= interrupt; -} - -/*! - * @brief Disable the specified interrupts - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param interrupt: Specifies the interrupt sources - * The parameter can be any combination of following values: - * @arg SCI2C_INT_RFU: Rx FIFO underflow interrupt - * @arg SCI2C_INT_RFO: Rx FIFO onverflow interrupt - * @arg SCI2C_INT_RFF: Rx FIFO full interrupt - * @arg SCI2C_INT_TFO: Tx FIFO onverflow interrupt - * @arg SCI2C_INT_TFE: Tx FIFO empty interrupt - * @arg SCI2C_INT_RR: Read request interrupt - * @arg SCI2C_INT_TA: Tx abort interrupt - * @arg SCI2C_INT_RD: Read done interrupt - * @arg SCI2C_INT_ACT: Activity interrupt - * @arg SCI2C_INT_STPD: Stop detect interrupt - * @arg SCI2C_INT_STAD: Start detect interrupt - * @arg SCI2C_INT_GC: Gernal call interrupt - * @arg SCI2C_INT_RSTAD: Restart detect interrupt - * @arg SCI2C_INT_MOH: Master on hold interrupt - * - * @retval None - */ -void SCI2C_DisableInterrupt(SCI2C_T *i2c, uint16_t interrupt) -{ - i2c->INTEN &= ~interrupt; -} - -/*! - * @brief Enable stop detected only master in activity. - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - */ -void SCI2C_EnableStopDetectMasterActivity(SCI2C_T *i2c) -{ - i2c->CTRL1_B.DSMA = BIT_SET; -} - -/*! - * @brief Disable stop detected only master in activity. - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - */ -void SCI2C_DisableStopDetectMasterActivity(SCI2C_T *i2c) -{ - i2c->CTRL1_B.DSMA = BIT_RESET; -} - -/*! - * @brief Enable stop detected only address is matched in slave mode. - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - */ -void SCI2C_EnableStopDetectAddressed(SCI2C_T *i2c) -{ - i2c->CTRL1_B.DSA = BIT_SET; -} - -/*! - * @brief Disable stop detected only address is matched in slave mode. - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - */ -void SCI2C_DisableStopDetectAddressed(SCI2C_T *i2c) -{ - i2c->CTRL1_B.DSA = BIT_RESET; -} - -/*! - * @brief Enable restart - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -void SCI2C_EnableRestart(SCI2C_T *i2c) -{ - i2c->CTRL1_B.RSTAEN = BIT_SET; -} - -/*! - * @brief Disable restart - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -void SCI2C_DisableRestart(SCI2C_T *i2c) -{ - i2c->CTRL1_B.RSTAEN = BIT_RESET; -} - -/*! - * @brief Config speed. - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param speed: Specifies the speed. - * @arg SCI2C_SPEED_STANDARD: Standard speed. - * @arg SCI2C_SPEED_FAST: Fast speed. - * @arg SCI2C_SPEED_HIGH: High speed. - * - * @retval None - */ -void SCI2C_ConfigSpeed(SCI2C_T *i2c, SCI2C_SPEED_T speed) -{ - i2c->CTRL1_B.SPD = speed; -} - -/*! - * @brief Config master address. - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param mode: Specifies the address mode. - * @arg SCI2C_ADDR_MODE_7BIT: 7-bit address mode. - * @arg SCI2C_ADDR_MODE_10BIT: 10-bit address mode. - * - * @param addr: Specifies the address. - * - * @retval None - */ -void SCI2C_ConfigMasterAddr(SCI2C_T *i2c, SCI2C_ADDR_MODE_T mode, uint16_t addr) -{ - i2c->TARADDR_B.MAM = mode; - i2c->TARADDR_B.ADDR = addr; -} - - -/*! - * @brief Config slave address. - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param mode: Specifies the address mode. - * @arg SCI2C_ADDR_MODE_7BIT: 7-bit address mode. - * @arg SCI2C_ADDR_MODE_10BIT: 10-bit address mode. - * - * @param addr: Specifies the address. - * - * @retval None - */ -void SCI2C_ConfigSlaveAddr(SCI2C_T *i2c, SCI2C_ADDR_MODE_T mode, uint16_t addr) -{ - i2c->CTRL1_B.SAM = mode; - i2c->SLAADDR = addr; -} - -/*! - * @brief Enable master mode - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -void SCI2C_EnableMasterMode(SCI2C_T *i2c) -{ - i2c->CTRL1_B.MST = BIT_SET; -} - -/*! - * @brief Disable master mode - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -void SCI2C_DisableMasterMode(SCI2C_T *i2c) -{ - i2c->CTRL1_B.MST = BIT_RESET; -} - -/*! - * @brief Enable slave mode - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -void SCI2C_EnableSlaveMode(SCI2C_T *i2c) -{ - i2c->CTRL1_B.SLADIS = BIT_RESET; -} - -/*! - * @brief Disable slave mode - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -void SCI2C_DisableSlaveMode(SCI2C_T *i2c) -{ - i2c->CTRL1_B.SLADIS = BIT_SET; -} - -/*! - * @brief Config master code - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param code: Master code - * - * @retval None - */ -void SCI2C_ConfigMasterCode(SCI2C_T *i2c, uint8_t code) -{ - i2c->HSMC = code; -} - -/*! - * @brief Config data direction - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param dir: Data direction - * @arg SCI2C_DATA_DIR_WRITE: Write data - * @arg SCI2C_DATA_DIR_READ: Read data - * - * @retval None - */ -void SCI2C_ConfigDataDir(SCI2C_T *i2c, SCI2C_DATA_DIR_T dir) -{ - i2c->DATA = (uint32_t)(dir << 8); -} - -/*! - * @brief Transmit data - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param data: Data to be transmited - * - * @retval None - */ -void SCI2C_TxData(SCI2C_T *i2c, uint8_t data) -{ - i2c->DATA_B.DATA = data; -} - -/*! - * @brief Returns the most recent received data - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval Received data - * - */ -uint8_t SCI2C_RxData(SCI2C_T *i2c) -{ - return (uint8_t)(i2c->DATA & 0XFF); -} - -/*! - * @brief Config data register - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param stop: Enable or disable generate stop condition - * - * @param dataDir: Data direction. Read or write - * @arg SCI2C_DATA_DIR_WRITE: Write data - * @arg SCI2C_DATA_DIR_READ: Read data - * - * @param data: Data to be transmited - * - * @retval None - */ -void SCI2C_ConfigDataRegister(SCI2C_T *i2c, SCI2C_STOP_T stop, SCI2C_DATA_DIR_T dataDir, uint8_t data) -{ - i2c->DATA = (uint32_t)((stop << 9) | (dataDir << 8) | data); -} - -/*! - * @brief Read Rx FIFO data number - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -uint8_t SCI2C_ReadRxFifoDataCnt(SCI2C_T *i2c) -{ - return (uint8_t)i2c->RFL; -} - -/*! - * @brief Read Tx FIFO data number - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -uint8_t SCI2C_ReadTxFifoDataCnt(SCI2C_T *i2c) -{ - return (uint8_t)i2c->TFL; -} - -/*! - * @brief Config Rx FIFO threshold - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param threshold: FIFO threshold - * - * @retval None - */ -void SCI2C_ConfigRxFifoThreshold(SCI2C_T *i2c, uint8_t threshold) -{ - i2c->RFT = threshold; -} - -/*! - * @brief Config Tx FIFO threshold - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param threshold: FIFO threshold - * - * @retval None - */ -void SCI2C_ConfigTxFifoThreshold(SCI2C_T *i2c, uint8_t threshold) -{ - i2c->TFT = threshold; -} - -/*! - * @brief Enable I2C peripheral - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - - */ -void SCI2C_Enable(SCI2C_T *i2c) -{ - i2c->CTRL2_B.I2CEN = BIT_SET; -} - -/*! - * @brief Disable I2C peripheral - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -void SCI2C_Disable(SCI2C_T *i2c) -{ - i2c->CTRL2_B.I2CEN = BIT_RESET; -} - -/*! - * @brief Abort I2C transmit - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval None - */ -void SCI2C_Abort(SCI2C_T *i2c) -{ - i2c->CTRL2_B.ABR = BIT_SET; -} - -/*! - * @brief Tx command block - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param enable: ENABLE or DISABLE - * - * @retval None - */ -void SCI2C_BlockTxCmd(SCI2C_T *i2c, uint8_t enable) -{ - i2c->CTRL2_B.TCB = enable; -} - -/*! - * @brief Config SCL high and low period - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param speed: Specifies the speed. - * @arg SCI2C_SPEED_STANDARD: Standard speed. - * @arg SCI2C_SPEED_FAST: Fast speed. - * @arg SCI2C_SPEED_HIGH: High speed. - * - * @param highPeriod: SCL high period - * - * @param lowPeriod: SCL low period - * - * @retval None - */ -void SCI2C_ConfigClkPeriod(SCI2C_T *i2c, SCI2C_SPEED_T speed, uint16_t highPeriod, uint16_t lowPeriod) -{ - if(speed == SCI2C_SPEED_STANDARD) - { - i2c->SSCLC = lowPeriod; - i2c->SSCHC = highPeriod; - } - else if(speed == SCI2C_SPEED_FAST) - { - i2c->FSCLC = lowPeriod; - i2c->FSCHC = highPeriod; - } - else if(speed == SCI2C_SPEED_HIGH) - { - i2c->HSCLC = lowPeriod; - i2c->HSCHC = highPeriod; - } -} - -/*! - * @brief Config SDA hold time length - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param txHold: Tx SDA hold time length - * - * @param rxHold: Rx SDA hold time length - * - * @retval None - */ -void SCI2C_ConfigSDAHoldTime(SCI2C_T *i2c, uint16_t txHold, uint8_t rxHold) -{ - i2c->SDAHOLD_B.TXHOLD = txHold; - i2c->SDAHOLD_B.RXHOLD = rxHold; -} - -/*! - * @brief Config SDA delay time - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param delay: SDA delay time - * - * @retval None - */ -void SCI2C_ConfigSDADelayTime(SCI2C_T *i2c, uint8_t delay) -{ - i2c->SDADLY = delay; -} - -/*! - * @brief Enable or disable generate gernal call ack - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param enable: SDA delay time - * - * @retval None - */ -void SCI2C_GernalCallAck(SCI2C_T *i2c, uint8_t enable) -{ - i2c->GCA = enable; -} - -/*! - * @brief When received data no ack generated in slave mode. - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param enable: ENABLE or DISABLE - * - * @retval None - */ -void SCI2C_SlaveDataNackOnly(SCI2C_T *i2c, uint8_t enable) -{ - i2c->SDNO = enable; -} - -/*! - * @brief Read Tx abort source - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @retval Return Tx abort source - */ -uint32_t SCI2C_ReadTxAbortSource(SCI2C_T *i2c) -{ - return (uint32_t)i2c->TAS; -} - -/*! - * @brief Enable DMA - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param dma: DMA requst source - * @arg SCI2C_DMA_RX: DMA RX channel - * @arg SCI2C_DMA_TX: DMA TX channel - * - * @retval None - */ -void SCI2C_EnableDMA(SCI2C_T *i2c, SCI2C_DMA_T dma) -{ - i2c->DMACTRL |= dma; -} - -/*! - * @brief Disable DMA - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param dma: DMA requst source - * @arg SCI2C_DMA_RX: DMA RX channel - * @arg SCI2C_DMA_TX: DMA TX channel - * - * @retval None - */ -void SCI2C_DisableDMA(SCI2C_T *i2c, SCI2C_DMA_T dma) -{ - i2c->DMACTRL &= (uint32_t)~dma; -} - -/*! - * @brief Config DMA Tx data level - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param cnt: DMA Tx data level - * - * @retval None - */ -void SCI2C_ConfigDMATxDataLevel(SCI2C_T *i2c, uint8_t cnt) -{ - i2c->DTDL = cnt; -} - -/*! - * @brief Config DMA Rx data level - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param cnt: DMA Rx data level - * - * @retval None - */ -void SCI2C_ConfigDMARxDataLevel(SCI2C_T *i2c, uint8_t cnt) -{ - i2c->DRDL = cnt; -} - -/*! - * @brief Config spike suppressio limit - * - * @param i2c: Select the the I2C peripheral.It can be I2C3 or I2C4 - * - * @param speed: I2C speed mode - * @arg SCI2C_SPEED_STANDARD: Standard speed. - * @arg SCI2C_SPEED_FAST: Fast speed. - * @arg SCI2C_SPEED_HIGH: High speed. - * - * @param limit: Spike suppressio limit value - * - * @retval None - */ -void SCI2C_ConfigSpikeSuppressionLimit(SCI2C_T *i2c, SCI2C_SPEED_T speed, uint8_t limit) -{ - if(speed == SCI2C_SPEED_HIGH) - { - i2c->HSSSL = limit; - } - else - { - i2c->LSSSL = limit; - } -} - -/**@} end of group SCI2C_Fuctions*/ -/**@} end of group SCI2C_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_sdio.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_sdio.c deleted file mode 100644 index 6fbc8eb..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_sdio.c +++ /dev/null @@ -1,730 +0,0 @@ -/*! - * @file apm32f10x_sdio.c - * - * @brief This file provides all the SDIO firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_sdio.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup SDIO_Driver SDIO Driver - @{ -*/ - -/** @addtogroup SDIO_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset sdio peripheral registers to their default reset values - * - * @param None - * - * @retval None - */ -void SDIO_Reset(void) -{ - SDIO->PWRCTRL = 0x00000000; - SDIO->CLKCTRL = 0x00000000; - SDIO->ARG = 0x00000000; - SDIO->CMD = 0x00000000; - SDIO->DATATIME = 0x00000000; - SDIO->DATALEN = 0x00000000; - SDIO->DCTRL = 0x00000000; - SDIO->ICF = 0x00C007FF; - SDIO->MASK = 0x00000000; -} - -/*! - * @brief Config the SDIO peripheral according to the specified parameters in the sdioConfig - * - * @param sdioConfig: pointer to a SDIO_Config_T structure - * - * @retval None - */ -void SDIO_Config(SDIO_Config_T* sdioConfig) -{ - uint32_t tmp = 0; - - tmp = SDIO->CLKCTRL; - tmp &= 0xFFFF8100; - - tmp |= (sdioConfig->clockDiv | sdioConfig->clockPowerSave | sdioConfig->clockBypass | sdioConfig->busWide | - sdioConfig->clockEdge | sdioConfig->hardwareFlowControl); - - SDIO->CLKCTRL = tmp; -} - -/*! - * @brief Fills each SDIO_Config_T member with its default value - * - * @param sdioConfig: pointer to a SDIO_Config_T structure - * - * @retval None - */ -void SDIO_ConfigStructInit(SDIO_Config_T* sdioConfig) -{ - sdioConfig->clockDiv = 0x00; - sdioConfig->clockEdge = SDIO_CLOCK_EDGE_RISING; - sdioConfig->clockBypass = SDIO_CLOCK_BYPASS_DISABLE; - sdioConfig->clockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; - sdioConfig->busWide = SDIO_BUS_WIDE_1B; - sdioConfig->hardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; -} - -/*! - * @brief Enables the SDIO clock - * - * @param None - * - * @retval None - */ -void SDIO_EnableClock(void) -{ - *(__IO uint32_t *) CLKCTRL_CLKEN_BB = (uint32_t)SET; -} - -/*! - * @brief Disables the SDIO clock - * - * @param None - * - * @retval None - */ -void SDIO_DisableClock(void) -{ - *(__IO uint32_t *) CLKCTRL_CLKEN_BB = (uint32_t)RESET; -} - -/*! - * @brief Sets the power status of the controller - * - * @param powerState: new state of the Power state - * The parameter can be one of following values: - * @arg SDIO_POWER_STATE_OFF - * @arg SDIO_POWER_STATE_ON - * @retval None - */ -void SDIO_ConfigPowerState(SDIO_POWER_STATE_T powerState) -{ - SDIO->PWRCTRL &= 0xFFFFFFFC; - SDIO->PWRCTRL |= powerState; -} - -/*! - * @brief Reads the SDIO power state - * - * @param None - * - * @retval The new state SDIO power - * - * @note 0x00:Power OFF, 0x02:Power UP, 0x03:Power ON - */ -uint32_t SDIO_ReadPowerState(void) -{ - return (SDIO->PWRCTRL & (~0xFFFFFFFC)); -} - -/*! - * @brief Enables the SDIO DMA request - * - * @param None - * - * @retval None - */ -void SDIO_EnableDMA(void) -{ - *(__IO uint32_t *) DCTRL_DMAEN_BB = (uint32_t)SET; -} - -/*! - * @brief Disables the SDIO DMA request - * - * @param None - * - * @retval None - */ -void SDIO_DisableDMA(void) -{ - *(__IO uint32_t *) DCTRL_DMAEN_BB = (uint32_t)RESET; -} - -/*! - * @brief Configs the SDIO Command and send the command - * - * @param cmdConfig: pointer to a SDIO_CmdConfig_T structure - * - * @retval None - * - */ -void SDIO_TxCommand(SDIO_CmdConfig_T *cmdConfig) -{ - uint32_t tmpreg = 0; - - SDIO->ARG = cmdConfig->argument; - tmpreg = SDIO->CMD; - tmpreg &= 0xFFFFF800; - tmpreg |= (uint32_t)cmdConfig->cmdIndex | cmdConfig->response - | cmdConfig->wait | cmdConfig->CPSM; - SDIO->CMD = tmpreg; -} - -/*! - * @brief Fills each SDIO_CMD_ConfigStruct_T member with its default value - * - * @param cmdConfig: pointer to a SDIO_CmdConfig_T structure - * - * @retval None - * - */ -void SDIO_TxCommandStructInit(SDIO_CmdConfig_T* cmdConfig) -{ - cmdConfig->argument = 0x00; - cmdConfig->cmdIndex = 0x00; - cmdConfig->response = SDIO_RESPONSE_NO; - cmdConfig->wait = SDIO_WAIT_NO; - cmdConfig->CPSM = SDIO_CPSM_DISABLE; -} - -/*! - * @brief Reads the SDIO command response - * - * @param None - * - * @retval The command index of the last command response received - * - */ -uint8_t SDIO_ReadCommandResponse(void) -{ - return (uint8_t)(SDIO->CMDRES); -} - -/*! - * @brief Reads the SDIO response - * - * @param res: Specifies the SDIO response register - * The parameter can be one of following values: - * @arg SDIO_RES1: Response Register 1 - * @arg SDIO_RES2: Response Register 2 - * @arg SDIO_RES3: Response Register 3 - * @arg SDIO_RES4: Response Register 4 - * - * @retval The Corresponding response register value - */ -uint32_t SDIO_ReadResponse(SDIO_RES_T res) -{ - __IO uint32_t tmp = 0; - - tmp = ((uint32_t)(SDIO_BASE + 0x14)) + res; - - return (*(__IO uint32_t *) tmp); -} - -/*! - * @brief Configs the SDIO Dataaccording to the specified parameters in the dataConfig - * - * @param dataConfig: pointer to a SDIO_DataConfig_T structure - * - * @retval None - */ -void SDIO_ConfigData(SDIO_DataConfig_T* dataConfig) -{ - uint32_t tmpreg = 0; - - SDIO->DATATIME = dataConfig->dataTimeOut; - - SDIO->DATALEN = dataConfig->dataLength; - - tmpreg = SDIO->DCTRL; - - tmpreg &= 0xFFFFFF08; - - tmpreg |= (uint32_t)dataConfig->dataBlockSize | dataConfig->transferDir - | dataConfig->transferMode | dataConfig->DPSM; - - SDIO->DCTRL = tmpreg; -} - -/*! - * @brief Fills each SDIO_DataConfig_T member with its default value - * - * @param dataConfig: pointer to a SDIO_DataConfig_T structure - * - * @retval None - */ -void SDIO_ConfigDataStructInit(SDIO_DataConfig_T* dataConfig) -{ - dataConfig->dataTimeOut = 0xFFFFFFFF; - dataConfig->dataLength = 0x00; - dataConfig->dataBlockSize = SDIO_DATA_BLOCKSIZE_1B; - dataConfig->transferDir = SDIO_TRANSFER_DIR_TO_CARD; - dataConfig->transferMode = SDIO_TRANSFER_MODE_BLOCK; - dataConfig->DPSM = SDIO_DPSM_DISABLE; -} - -/*! - * @brief Reads the SDIO Data counter - * - * @param None - * - * @retval The SDIO Data counter value - */ -uint32_t SDIO_ReadDataCounter(void) -{ - return SDIO->DCNT; -} - -/*! - * @brief Write the SDIO Data - * - * @param DataWrite 32-bit data - * - * @retval None - */ -void SDIO_WriteData(uint32_t data) -{ - SDIO->FIFODATA = data; -} - -/*! - * @brief Reads the SDIO Data - * - * @param None - * - * @retval The SDIO FIFO Data value - */ -uint32_t SDIO_ReadData(void) -{ - return SDIO->FIFODATA; -} - -/*! - * @brief Reads the SDIO FIFO count value - * - * @param None - * - * @retval The SDIO FIFO count value - */ -uint32_t SDIO_ReadFIFOCount(void) -{ - return SDIO->FIFOCNT; -} - -/*! - * @brief Enables SDIO start read wait - * - * @param None - * - * @retval None - */ -void SDIO_EnableStartReadWait(void) -{ - *(__IO uint32_t *) DCTRL_RWSTR_BB = (uint32_t) SET; -} - -/*! - * @brief Disables SDIO start read wait - * - * @param None - * - * @retval None - */ -void SDIO_DisableStopReadWait(void) -{ - *(__IO uint32_t *) DCTRL_RWSTR_BB = (uint32_t) RESET; -} - -/*! - * @brief Enables SDIO stop read wait - * - * @param None - * - * @retval None - */ -void SDIO_EnableStopReadWait(void) -{ - *(__IO uint32_t *) DCTRL_RWSTOP_BB = (uint32_t) SET; -} - -/*! - * @brief Disables SDIO stop read wait - * - * @param None - * - * @retval None - */ -void SDIO_DisableStartReadWait(void) -{ - *(__IO uint32_t *) DCTRL_RWSTOP_BB = (uint32_t) RESET; -} - -/*! - * @brief Sets the read wait interval - * - * @param readWaitMode: SDIO read Wait Mode - * The parameter can be one of following values: - * @arg SDIO_READ_WAIT_MODE_CLK: Read Wait control by stopping SDIOCLK - * @arg SDIO_READ_WAIT_MODE_DATA2: Read Wait control using SDIO_DATA2 - * - * @retval None - * - */ -void SDIO_ConfigSDIOReadWaitMode(SDIO_READ_WAIT_MODE_T readWaitMode) -{ - *(__IO uint32_t *) DCTRL_RDWAIT_BB = readWaitMode; -} -/*! - * @brief Enables SDIO SD I/O Mode Operation - * - * @param None - * - * @retval None - */ -void SDIO_EnableSDIO(void) -{ - *(__IO uint32_t *) DCTRL_SDIOF_BB = (uint32_t)SET; -} - -/*! - * @brief Disables SDIO SD I/O Mode Operation - * - * @param None - * - * @retval None - */ -void SDIO_DisableSDIO(void) -{ - *(__IO uint32_t *) DCTRL_SDIOF_BB = (uint32_t)RESET; -} - -/*! - * @brief Ensables SDIO SD I/O Mode suspend command sending - * - * @param None - * - * @retval None - */ -void SDIO_EnableTxSDIOSuspend(void) -{ - *(__IO uint32_t *) CMD_SDIOSC_BB = (uint32_t)SET; -} - -/*! - * @brief Disables SDIO SD I/O Mode suspend command sending - * - * @param None - * - * @retval None - */ -void SDIO_DisableTxSDIOSuspend(void) -{ - *(__IO uint32_t *) CMD_SDIOSC_BB = (uint32_t)RESET; -} - -/*! - * @brief Enables the command completion signal - * - * @param None - * - * @retval None - */ -void SDIO_EnableCommandCompletion(void) -{ - *(__IO uint32_t *) CMD_CMDCPEN_BB = (uint32_t)SET; -} - -/*! - * @brief Disables the command completion signal - * - * @param None - * - * @retval None - */ -void SDIO_DisableCommandCompletion(void) -{ - *(__IO uint32_t *) CMD_CMDCPEN_BB = (uint32_t)RESET; -} - -/*! - * @brief Enables the CE-ATA interrupt - * - * @param None - * - * @retval None - */ -void SDIO_EnableCEATAInterrupt(void) -{ - *(__IO uint32_t *) CMD_INTEN_BB = (uint32_t)((~((uint32_t)SET)) & ((uint32_t)0x1)); -} - -/*! - * @brief Disables the CE-ATA interrupt - * - * @param None - * - * @retval None - */ -void SDIO_DisableCEATAInterrupt(void) -{ - *(__IO uint32_t *) CMD_INTEN_BB = (uint32_t)((~((uint32_t)RESET)) & ((uint32_t)0x1)); -} - -/*! - * @brief Ensables Sends CE-ATA command - * - * @param None - * - * @retval None - */ -void SDIO_EnableTxCEATA(void) -{ - *(__IO uint32_t *) CMD_ATACMD_BB = (uint32_t)SET; -} - -/*! - * @brief Disables Sends CE-ATA command - * - * @param None - * - * @retval None - */ -void SDIO_DisableTxCEATA(void) -{ - *(__IO uint32_t *) CMD_ATACMD_BB = (uint32_t)RESET; -} - -/*! - * @brief Enables the specified SDIO interrupt - * - * @param interrupt: Select the SDIO interrupt source - * The parameter can be any combination of following values: - * @arg SDIO_INT_COMRESP: Command response received (CRC check failed) interrupt - * @arg SDIO_INT_DBDR: Data block sent/received (CRC check failed) interrupt - * @arg SDIO_INT_CMDRESTO: Command response timeout interrupt - * @arg SDIO_INT_DATATO: Data timeout interrupt - * @arg SDIO_INT_TXUDRER: Transmit FIFO underrun error interrupt - * @arg SDIO_INT_RXOVRER: Received FIFO overrun error interrupt - * @arg SDIO_INT_CMDRES: Command response received (CRC check passed) interrupt - * @arg SDIO_INT_CMDSENT: Command sent (no response required) interrupt - * @arg SDIO_INT_DATAEND: Data end (data counter is zero) interrupt - * @arg SDIO_INT_SBE: Start bit not detected on all data signals in wide bus mode interrupt - * @arg SDIO_INT_DBCP: Data block sent/received (CRC check passed) interrupt - * @arg SDIO_INT_CMDACT: Command transfer in progress interrupt - * @arg SDIO_INT_TXACT: Data transmit in progress interrupt - * @arg SDIO_INT_RXACT: Data receive in progress interrupt - * @arg SDIO_INT_TXFHF: Transmit FIFO Half Empty interrupt - * @arg SDIO_INT_RXFHF: Receive FIFO Half Full interrupt - * @arg SDIO_INT_TXFF: Transmit FIFO full interrupt - * @arg SDIO_INT_RXFF: Receive FIFO full interrupt - * @arg SDIO_INT_TXFE: Transmit FIFO empty interrupt - * @arg SDIO_INT_RXFE: Receive FIFO empty interrupt - * @arg SDIO_INT_TXDA: Data available in transmit FIFO interrupt - * @arg SDIO_INT_RXDA: Data available in receive FIFO interrupt - * @arg SDIO_INT_SDIOINT: SD I/O interrupt received interrupt - * @arg SDIO_INT_ATAEND: CE-ATA command completion signal received for CMD61 interrupt - * @retval None - */ -void SDIO_EnableInterrupt(uint32_t interrupt) -{ - SDIO->MASK |= interrupt; -} - -/*! - * @brief Disables the specified SDIO interrupt - * - * @param interrupt: Select the SDIO interrupt source - * The parameter can be any combination of following values: - * @arg SDIO_INT_COMRESP: Command response received (CRC check failed) interrupt - * @arg SDIO_INT_DBDR: Data block sent/received (CRC check failed) interrupt - * @arg SDIO_INT_CMDRESTO: Command response timeout interrupt - * @arg SDIO_INT_DATATO: Data timeout interrupt - * @arg SDIO_INT_TXUDRER: Transmit FIFO underrun error interrupt - * @arg SDIO_INT_RXOVRER: Received FIFO overrun error interrupt - * @arg SDIO_INT_CMDRES: Command response received (CRC check passed) interrupt - * @arg SDIO_INT_CMDSENT: Command sent (no response required) interrupt - * @arg SDIO_INT_DATAEND: Data end (data counter is zero) interrupt - * @arg SDIO_INT_SBE: Start bit not detected on all data signals in wide bus mode interrupt - * @arg SDIO_INT_DBCP: Data block sent/received (CRC check passed) interrupt - * @arg SDIO_INT_CMDACT: Command transfer in progress interrupt - * @arg SDIO_INT_TXACT: Data transmit in progress interrupt - * @arg SDIO_INT_RXACT: Data receive in progress interrupt - * @arg SDIO_INT_TXFHF: Transmit FIFO Half Empty interrupt - * @arg SDIO_INT_RXFHF: Receive FIFO Half Full interrupt - * @arg SDIO_INT_TXFF: Transmit FIFO full interrupt - * @arg SDIO_INT_RXFF: Receive FIFO full interrupt - * @arg SDIO_INT_TXFE: Transmit FIFO empty interrupt - * @arg SDIO_INT_RXFE: Receive FIFO empty interrupt - * @arg SDIO_INT_TXDA: Data available in transmit FIFO interrupt - * @arg SDIO_INT_RXDA: Data available in receive FIFO interrupt - * @arg SDIO_INT_SDIOINT: SD I/O interrupt received interrupt - * @arg SDIO_INT_ATAEND: CE-ATA command completion signal received for CMD61 interrupt - * @retval None - */ -void SDIO_DisableInterrupt(uint32_t interrupt) -{ - SDIO->MASK &= ~interrupt; -} - -/*! - * @brief Reads the specified SDIO flag - * - * @param flag: Select the flag to read - * The parameter can be one of following values: - * @arg SDIO_FLAG_COMRESP: Command response received (CRC check failed) flag - * @arg SDIO_FLAG_DBDR: Data block sent/received (CRC check failed) flag - * @arg SDIO_FLAG_CMDRESTO: Command response timeout flag - * @arg SDIO_FLAG_DATATO: Data timeout flag - * @arg SDIO_FLAG_TXUDRER: Transmit FIFO underrun error flag - * @arg SDIO_FLAG_RXOVRER: Received FIFO overrun error flag - * @arg SDIO_FLAG_CMDRES: Command response received (CRC check passed) flag - * @arg SDIO_FLAG_CMDSENT: Command sent (no response required) flag - * @arg SDIO_FLAG_DATAEND: Data end (data counter is zero) flag - * @arg SDIO_FLAG_SBE: Start bit not detected on all data signals in wide bus mode flag - * @arg SDIO_FLAG_DBCP: Data block sent/received (CRC check passed) flag - * @arg SDIO_FLAG_CMDACT: Command transfer in progress flag - * @arg SDIO_FLAG_TXACT: Data transmit in progress flag - * @arg SDIO_FLAG_RXACT: Data receive in progress flag - * @arg SDIO_FLAG_TXFHF: Transmit FIFO Half Empty flag - * @arg SDIO_FLAG_RXFHF: Receive FIFO Half Full flag - * @arg SDIO_FLAG_TXFF: Transmit FIFO full flag - * @arg SDIO_FLAG_RXFF: Receive FIFO full flag - * @arg SDIO_FLAG_TXFE: Transmit FIFO empty flag - * @arg SDIO_FLAG_RXFE: Receive FIFO empty flag - * @arg SDIO_FLAG_TXDA: Data available in transmit FIFO flag - * @arg SDIO_FLAG_RXDA: Data available in receive FIFO flag - * @arg SDIO_FLAG_SDIOINT: SD I/O interrupt received flag - * @arg SDIO_FLAG_ATAEND: CE-ATA command completion signal received for CMD61 flag - * - * @retval SET or RESET - */ -uint8_t SDIO_ReadStatusFlag(SDIO_FLAG_T flag) -{ - return (SDIO->STS & flag) ? SET : RESET; -} - -/*! - * @brief Clears the specified SDIO flag - * - * @param flag: Select the flag to clear - * The parameter can be any combination of following values: - * @arg SDIO_FLAG_COMRESP: Command response received (CRC check failed) flag - * @arg SDIO_FLAG_DBDR: Data block sent/received (CRC check failed) flag - * @arg SDIO_FLAG_CMDRESTO: Command response timeout flag - * @arg SDIO_FLAG_DATATO: Data timeout flag - * @arg SDIO_FLAG_TXUDRER: Transmit FIFO underrun error flag - * @arg SDIO_FLAG_RXOVRER: Received FIFO overrun error flag - * @arg SDIO_FLAG_CMDRES: Command response received (CRC check passed) flag - * @arg SDIO_FLAG_CMDSENT: Command sent (no response required) flag - * @arg SDIO_FLAG_DATAEND: Data end (data counter is zero) flag - * @arg SDIO_FLAG_SBE: Start bit not detected on all data signals in wide bus mode flag - * @arg SDIO_FLAG_DBCP: Data block sent/received (CRC check passed) flag - * @arg SDIO_FLAG_SDIOINT: SD I/O interrupt received flag - * @arg SDIO_FLAG_ATAEND: CE-ATA command completion signal received for CMD61 flag - * - * @retval None - */ -void SDIO_ClearStatusFlag(uint32_t flag) -{ - SDIO->ICF = flag; -} - -/*! - * @brief Reads the specified SDIO Interrupt flag - * - * @param flag: Select the SDIO interrupt source - * The parameter can be one of following values: - * @arg SDIO_INT_COMRESP: Command response received (CRC check failed) interrupt - * @arg SDIO_INT_DBDR: Data block sent/received (CRC check failed) interrupt - * @arg SDIO_INT_CMDRESTO: Command response timeout interrupt - * @arg SDIO_INT_DATATO: Data timeout interrupt - * @arg SDIO_INT_TXUDRER: Transmit FIFO underrun error interrupt - * @arg SDIO_INT_RXOVRER: Received FIFO overrun error interrupt - * @arg SDIO_INT_CMDRES: Command response received (CRC check passed) interrupt - * @arg SDIO_INT_CMDSENT: Command sent (no response required) interrupt - * @arg SDIO_INT_DATAEND: Data end (data counter is zero) interrupt - * @arg SDIO_INT_SBE: Start bit not detected on all data signals in wide bus mode interrupt - * @arg SDIO_INT_DBCP: Data block sent/received (CRC check passed) interrupt - * @arg SDIO_INT_CMDACT: Command transfer in progress interrupt - * @arg SDIO_INT_TXACT: Data transmit in progress interrupt - * @arg SDIO_INT_RXACT: Data receive in progress interrupt - * @arg SDIO_INT_TXFHF: Transmit FIFO Half Empty interrupt - * @arg SDIO_INT_RXFHF: Receive FIFO Half Full interrupt - * @arg SDIO_INT_TXFF: Transmit FIFO full interrupt - * @arg SDIO_INT_RXFF: Receive FIFO full interrupt - * @arg SDIO_INT_TXFE: Transmit FIFO empty interrupt - * @arg SDIO_INT_RXFE: Receive FIFO empty interrupt - * @arg SDIO_INT_TXDA: Data available in transmit FIFO interrupt - * @arg SDIO_INT_RXDA: Data available in receive FIFO interrupt - * @arg SDIO_INT_SDIOINT: SD I/O interrupt received interrupt - * @arg SDIO_INT_ATAEND: CE-ATA command completion signal received for CMD61 interrupt - * - * @retval SET or RESET - */ -uint8_t SDIO_ReadIntFlag(SDIO_INT_T flag) -{ - uint32_t intEnable; - uint32_t intStatus; - - intEnable = (uint32_t)(SDIO->MASK & flag); - intStatus = (uint32_t)(SDIO->STS & flag); - - if (intEnable && intStatus) - { - return SET; - } - - return RESET; -} - -/*! - * @brief Clears the specified SDIO Interrupt pending bits - * - * @param flag: Select the SDIO interrupt source - * The parameter can be any combination of following values: - * @arg SDIO_INT_COMRESP: Command response received (CRC check failed) interrupt - * @arg SDIO_INT_DBDR: Data block sent/received (CRC check failed) interrupt - * @arg SDIO_INT_CMDRESTO: Command response timeout interrupt - * @arg SDIO_INT_DATATO: Data timeout interrupt - * @arg SDIO_INT_TXUDRER: Transmit FIFO underrun error interrupt - * @arg SDIO_INT_RXOVRER: Received FIFO overrun error interrupt - * @arg SDIO_INT_CMDRES: Command response received (CRC check passed) interrupt - * @arg SDIO_INT_CMDSENT: Command sent (no response required) interrupt - * @arg SDIO_INT_DATAEND: Data end (data counter is zero) interrupt - * @arg SDIO_INT_SBE: Start bit not detected on all data signals in wide bus mode interrupt - * @arg SDIO_INT_DBCP: Data block sent/received (CRC check passed) interrupt - * @arg SDIO_INT_SDIOINT: SD I/O interrupt received interrupt - * @arg SDIO_INT_ATAEND: CE-ATA command completion signal received for CMD61 interrupt - * - * @retval None - */ -void SDIO_ClearIntFlag(uint32_t flag) -{ - SDIO->ICF = flag; -} - -/**@} end of group SDIO_Fuctions*/ -/**@} end of group SDIO_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_spi.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_spi.c deleted file mode 100644 index 353dce4..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_spi.c +++ /dev/null @@ -1,618 +0,0 @@ -/*! - * @file apm32f10x_spi.c - * - * @brief This file provides all the SPI firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_spi.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup SPI_Driver SPI Driver - @{ -*/ - -/** @addtogroup SPI_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset the specified SPIx peripheral - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval None - */ -void SPI_I2S_Reset(SPI_T* spi) -{ - if(spi == SPI1) - { - RCM_EnableAPB2PeriphReset(RCM_APB2_PERIPH_SPI1); - RCM_DisableAPB2PeriphReset(RCM_APB2_PERIPH_SPI1); - } - else if(spi == SPI2) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_SPI2); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_SPI2); - } - else if(spi == SPI3) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_SPI3); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_SPI3); - } -} - -/*! - * @brief Config the SPI peripheral according to the specified parameters in the spiConfig - * - * @param spi: The SPIx can be 1,2,3 - * - * @param spiConfig: pointer to a SPI_Config_T structure - * - * @retval None - */ -void SPI_Config(SPI_T* spi, SPI_Config_T* spiConfig) -{ - spi->CTRL1 &= 0x3040; - spi->CTRL1 |= (uint16_t)((uint32_t)spiConfig->direction | spiConfig->mode | - spiConfig->length | spiConfig->polarity | - spiConfig->phase | spiConfig->nss | - spiConfig->baudrateDiv | spiConfig->firstBit); - spi->CRCPOLY = spiConfig->crcPolynomial; -} - -/*! - * @brief Config the I2S peripheral according to the specified parameters in the spiConfig - * - * @param spi: The SPIx can be 2,3 - * - * @param i2sConfig: pointer to a I2S_Config_T structure - * - * @retval None - */ -void I2S_Config(SPI_T* spi, I2S_Config_T* i2sConfig) -{ - uint16_t i2sDiv = 2, i2sOdd = 0, packetSize = 1; - uint32_t tmp = 0; - uint32_t sysClock = 0; - - /** Clear MODESEL, I2SEN, I2SMOD, PFSSEL, I2SSSEL, CPOL, DATALEN and CHLEN bits */ - spi->I2SCFG &= 0xF040; - spi->I2SPSC = 0x0002; - - if(i2sConfig->audioDiv == I2S_AUDIO_DIV_DEFAULT) - { - spi->I2SPSC_B.ODDPSC = 0; - spi->I2SPSC_B.I2SPSC = 2; - } - else - { - if(i2sConfig->length == I2S_DATA_LENGHT_16B) - { - packetSize = 1; - } - else - { - packetSize = 2; - } - - sysClock = RCM_ReadSYSCLKFreq(); - - if(i2sConfig->MCLKOutput == I2S_MCLK_OUTPUT_ENABLE) - { - tmp = (uint16_t)(((((sysClock / 256) * 10) / i2sConfig ->audioDiv)) + 5); - } - else - { - tmp = (uint16_t)(((((sysClock / (32 * packetSize)) *10 ) / i2sConfig ->audioDiv )) + 5); - } - tmp = tmp / 10; - - i2sOdd = (uint16_t)(tmp & (uint16_t)0x0001); - i2sDiv = (uint16_t)((tmp - i2sOdd) / 2); - - if ((i2sDiv < 2) || (i2sDiv > 0xFF)) - { - i2sDiv = 2; - i2sOdd = 0; - } - } - - spi->I2SPSC_B.I2SPSC = i2sDiv; - spi->I2SPSC_B.ODDPSC = i2sOdd; - spi->I2SPSC |= i2sConfig->MCLKOutput; - - spi->I2SCFG = (uint32_t)i2sConfig->mode | \ - (uint32_t)i2sConfig->standard | \ - (uint32_t)i2sConfig->length | \ - (uint32_t)i2sConfig->polarity; - - /** select I2S mode */ - spi->I2SCFG_B.MODESEL = BIT_SET; -} - -/*! - * @brief Fills each SPI_Config_T member with its default value - * - * @param spiConfig: pointer to a SPI_Config_T structure - * - * @retval None - */ -void SPI_ConfigStructInit(SPI_Config_T* spiConfig) -{ - spiConfig->direction = SPI_DIRECTION_2LINES_FULLDUPLEX; - spiConfig->mode = SPI_MODE_SLAVE; - spiConfig->length = SPI_DATA_LENGTH_8B; - spiConfig->polarity = SPI_CLKPOL_LOW; - spiConfig->phase = SPI_CLKPHA_1EDGE; - spiConfig->nss = SPI_NSS_HARD; - spiConfig->baudrateDiv = SPI_BAUDRATE_DIV_2; - spiConfig->firstBit = SPI_FIRSTBIT_MSB; - spiConfig->crcPolynomial = 7; -} - -/*! - * @brief Fills each I2S_Config_T member with its default value - * - * @param i2sConfig: pointer to a I2S_Config_T structure - * - * @retval None - */ -void I2S_ConfigStructInit(I2S_Config_T* i2sConfig) -{ - i2sConfig->mode = I2S_MODE_SLAVE_TX; - i2sConfig->standard = I2S_STANDARD_PHILLIPS; - i2sConfig->length = I2S_DATA_LENGHT_16B; - i2sConfig->MCLKOutput = I2S_MCLK_OUTPUT_DISABLE; - i2sConfig->audioDiv = I2S_AUDIO_DIV_DEFAULT; - i2sConfig->polarity = I2S_CLKPOL_LOW; -} -/*! - * @brief Enables the specified SPI peripheral - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval None - */ -void SPI_Enable(SPI_T* spi) -{ - spi->CTRL1_B.SPIEN = BIT_SET; -} - -/*! - * @brief Disable the specified SPI peripheral - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval None - */ -void SPI_Disable(SPI_T* spi) -{ - spi->CTRL1_B.SPIEN = BIT_RESET; -} - -/*! - * @brief Enables the specified I2S peripheral - * - * @param spi: The I2S can be SPI2,SPI3 - * - * @retval None - */ -void I2S_Enable(SPI_T* spi) -{ - spi->I2SCFG_B.I2SEN = BIT_SET; -} - -/*! - * @brief Disable the specified I2S peripheral - * - * @param spi: The I2S can be SPI2,SPI3 - * - * @retval None - */ -void I2S_Disable(SPI_T* spi) -{ - spi->I2SCFG_B.I2SEN = BIT_RESET; -} - -/*! - * @brief Enables the SPIx/I2Sx DMA interface. - * - * @param spi: The SPIx can be 1,2,3, When the I2S can be 2,3 - * - * @param dmaReq: specifies the SPI/I2S DMA transfer request - * The parameter can be one of following values: - * @arg SPI_I2S_DMA_REQ_TX: Tx buffer DMA transfer request - * @arg SPI_I2S_DMA_REQ_RX: Rx buffer DMA transfer request - * @retval None - */ -void SPI_I2S_EnableDMA(SPI_T* spi, SPI_I2S_DMA_REQ_T dmaReq) -{ - if(dmaReq == SPI_I2S_DMA_REQ_TX) - { - spi->CTRL2_B.TXDEN = ENABLE; - } - else - { - spi->CTRL2_B.RXDEN = ENABLE; - } -} - -/*! - * @brief Disables the SPIx/I2Sx DMA interface. - * - * @param spi: The SPIx can be 1,2,3, When the I2S can be 2,3 - * - * @param dmaReq: specifies the SPI/I2S DMA transfer request - * The parameter can be one of following values: - * @arg SPI_I2S_DMA_REQ_TX: Tx buffer DMA transfer request - * @arg SPI_I2S_DMA_REQ_RX: Rx buffer DMA transfer request - * @retval None - */ -void SPI_I2S_DisableDMA(SPI_T* spi, SPI_I2S_DMA_REQ_T dmaReq) -{ - if(dmaReq == SPI_I2S_DMA_REQ_TX) - { - spi->CTRL2_B.TXDEN = DISABLE; - } - else - { - spi->CTRL2_B.RXDEN = DISABLE; - } -} - -/*! - * @brief Transmits a Data through the SPIx/I2Sx peripheral. - * - * @param spi: The SPIx can be 1,2,3, When the I2S can be 2,3 - * - * @param data: Data to be transmitted - * - * @retval None - */ -void SPI_I2S_TxData(SPI_T* spi, uint16_t data) -{ - spi->DATA = data; -} - -/*! - * @brief Returns the most recent received data by the SPIx/I2Sx peripheral. - * - * @param spi: The SPIx can be 1,2,3, When the I2S can be 2,3 - * - * @retval data :The value of the received data - * - * @retval None - */ -uint16_t SPI_I2S_RxData(SPI_T* spi) -{ - return spi->DATA; -} - -/*! - * @brief Set the SPI NSS internal by Software - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval None - */ -void SPI_SetSoftwareNSS(SPI_T* spi) -{ - spi->CTRL1_B.ISSEL = BIT_SET; -} - -/*! - * @brief Reset the SPI NSS internal by Software - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval None - */ -void SPI_ResetSoftwareNSS(SPI_T* spi) -{ - spi->CTRL1_B.ISSEL = BIT_RESET; -} - -/*! - * @brief Enables the specified SPI SS output - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval None - */ -void SPI_EnableSSOutput(SPI_T* spi) -{ - spi->CTRL2_B.SSOEN = BIT_SET; -} - -/*! - * @brief Disable the specified SPI SS output - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval None - */ -void SPI_DisableSSOutput(SPI_T* spi) -{ - spi->CTRL2_B.SSOEN = BIT_RESET; -} - -/*! - * @brief Configures the specified SPI data size - * - * @param spi: The SPIx can be 1,2,3 - * - * @param length: specifies the SPI data size. - * This parameter can be one of the following values: - * @arg SPI_DATA_LENGTH_16B: Set data frame format to 16bit - * @arg SPI_DATA_LENGTH_8B : Set data frame format to 8bit - * - * @retval None - */ -void SPI_ConfigDataSize(SPI_T* spi, SPI_DATA_LENGTH_T length) -{ - spi->CTRL1_B.DFLSEL = BIT_RESET; - spi->CTRL1 |= length; -} - -/*! - * @brief Transmit CRC value - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval None - */ -void SPI_TxCRC(SPI_T* spi) -{ - spi->CTRL1_B.CRCNXT = BIT_SET; -} - -/*! - * @brief Enables the specified SPI CRC value calculation of the transferred bytes - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval None - */ -void SPI_EnableCRC(SPI_T* spi) -{ - spi->CTRL1_B.CRCEN = BIT_SET; -} - -/*! - * @brief Disable the specified SPI CRC value calculation of the transferred bytes - * - * @param spi: The SPIx can be 1,2,3 - * - */ -void SPI_DisableCRC(SPI_T* spi) -{ - spi->CTRL1_B.CRCEN = BIT_RESET; -} - -/*! - * @brief Reads the specified SPI transmit CRC register value - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval The SPI transmit CRC register value - */ -uint16_t SPI_ReadTxCRC(SPI_T* spi) -{ - return spi->TXCRC_B.TXCRC; -} - -/*! - * @brief Reads the specified SPI receive CRC register value - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval The SPI receive CRC register value - */ -uint16_t SPI_ReadRxCRC(SPI_T* spi) -{ - return spi->RXCRC_B.RXCRC; -} - -/*! - * @brief Reads the specified SPI CRC Polynomial register value - * - * @param spi: The SPIx can be 1,2,3 - * - * @retval The SPI CRC Polynomial register value - */ -uint16_t SPI_ReadCRCPolynomial(SPI_T* spi) -{ - return spi->CRCPOLY_B.CRCPOLY; -} - -/*! - * @brief Configures the specified SPI data transfer direction - * - * @param spi: The SPIx can be 1,2,3 - * - * @param direction: Select the SPI data transfer direction - * The parameter can be one of following values: - * @arg SPI_DIRECTION_RX: Selects Rx receive direction - * @arg SPI_DIRECTION_TX: Selects Tx transmission direction - * @retval None - */ -void SPI_ConfigBiDirectionalLine(SPI_T* spi, SPI_DIRECTION_SELECT_T direction) -{ - if(direction == SPI_DIRECTION_TX) - { - spi->CTRL1 |= SPI_DIRECTION_TX; - } - else - { - spi->CTRL1 &= SPI_DIRECTION_RX; - } -} - -/*! - * @brief Enables the specified SPI/I2S interrupts. - * - * @param spi: The SPIx can be 1,2,3, When the I2S can be 2,3 - * - * @param interrupt: specifies the TMR interrupts sources - * The parameter can be one of following values: - * @arg SPI_I2S_INT_TXBE: Tx buffer empty interrupt - * @arg SPI_I2S_INT_RXBNE: Rx buffer not empty interrupt - * @arg SPI_I2S_INT_ERR: Error interrupt - * @retval None - */ -void SPI_I2S_EnableInterrupt(SPI_T* spi, SPI_I2S_INT_T interrupt) -{ - spi->CTRL2 |= (interrupt >> 8); -} - -/*! - * @brief Disables the specified SPI/I2S interrupts. - * - * @param spi: The SPIx can be 1,2,3, When the I2S can be 2,3 - * - * @param interrupt: specifies the TMR interrupts sources - * The parameter can be one of following values: - * @arg SPI_I2S_INT_TXBE: Tx buffer empty interrupt - * @arg SPI_I2S_INT_RXBNE: Rx buffer not empty interrupt - * @arg SPI_I2S_INT_ERR: Error interrupt - * @retval None - */ -void SPI_I2S_DisableInterrupt(SPI_T* spi, SPI_I2S_INT_T interrupt) -{ - spi->CTRL2 &= ~(interrupt >> 8); -} - -/*! - * @brief Checks whether the specified SPI/I2S flag is set or not. - * - * @param spi: The SPIx can be 1,2,3, When the I2S can be 2,3 - * - * @param flag: specifies the SPI/I2S flag to check - * The parameter can be one of following values: - * @arg SPI_FLAG_RXBNE: Receive buffer not empty flag - * @arg SPI_FLAG_TXBE: Transmit buffer empty flag - * @arg I2S_FLAG_SCHDIR: Side Channel flag - * @arg I2S_FLAG_UDR: Underrun Error flag - * @arg SPI_FLAG_CRCE: CRC Error flag - * @arg SPI_FLAG_ME: Mode Error flag - * @arg SPI_FLAG_OVR: Overrun flag - * @arg SPI_FLAG_BSY: Busy flag - * - * @retval SET or RESET - */ -uint8_t SPI_I2S_ReadStatusFlag(SPI_T* spi, SPI_FLAG_T flag) -{ - if((spi->STS & flag) != RESET) - { - return SET; - } - else - { - return RESET; - } -} - -/*! - * @brief Clears the SPIx CRC Error flag - * - * @param spi: The SPIx can be 1,2,3 - * - * @param flag: only clears SPI_FLAG_CRCE(CRC Error flag) - * - * @retval None - * - * @note 1)SPI_FLAG_OVR: (OverRun error) flag is cleared by software sequence: - * a read operation to SPI_DATA register (SPI_I2S_RxData()) - * followed by a read operation to SPI_STS register (SPI_I2S_ReadStatusFlag()). - * 2)I2S_FLAG_UDR: (UnderRun error) flag is cleared: - * a read operation to SPI_STS register (SPI_I2S_ReadStatusFlag()). - * 3)SPI_FLAG_ME: (Mode Fault) flag is cleared by software sequence: - * a read/write operation to SPI_STS register (SPI_I2S_ReadStatusFlag()) - * followed by a write operation to SPI_CTRL1 register (SPI_Enable()). - */ -void SPI_I2S_ClearStatusFlag(SPI_T* spi, SPI_FLAG_T flag) -{ - spi->STS_B.CRCEFLG = BIT_RESET; -} - -/*! - * @brief Checks whether the specified SPI/I2S interrupt has occurred or not. - * - * @param spi: The SPIx can be 1,2,3, When the I2S can be 2,3 - * - * @param flag: specifies the SPI/I2S interrupt flag to check. - * The parameter can be one of following values: - * @arg SPI_I2S_INT_RXBNE: Receive buffer not empty interrupt flag - * @arg SPI_I2S_INT_TXBE: Transmit buffer empty interrupt flag - * @arg SPI_I2S_INT_OVR: Overrun interrupt flag - * @arg SPI_INT_CRCE: CRC Error interrupt flag - * @arg SPI_INT_ME: Mode Error interrupt flag - * @arg I2S_INT_UDR: Underrun Error interrupt flag - * - * @retval SET or RESET - */ -uint8_t SPI_I2S_ReadIntFlag(SPI_T* spi, SPI_I2S_INT_T flag) -{ - uint32_t intEnable; - uint32_t intStatus; - - intEnable = (uint32_t)(spi->CTRL2 & (flag>>8)); - intStatus = (uint32_t)(spi->STS & flag); - - if (intEnable && intStatus) - { - return SET; - } - - return RESET; -} - -/*! - * @brief Clears the SPIx CRC Error interrupt flag - * - * @param spi: The SPIx can be 1,2,3 - * - * @param flag: only clears SPI_INT_CRCE(CRC Error interrupt flag) - * - * @retval None - * - * @note 1)SPI_I2S_INT_OVR: (OverRun interrupt error) flag is cleared by software sequence: - * a read operation to SPI_DATA register (SPI_I2S_RxData()) - * followed by a read operation to SPI_STS register (SPI_I2S_ReadIntFlag()). - * 2)I2S_INT_UDR: (UnderRun interrupt error) flag is cleared: - * a read operation to SPI_STS register (SPI_I2S_ReadIntFlag()). - * 3)SPI_INT_ME: (Mode interrupt Fault) flag is cleared by software sequence: - * a read/write operation to SPI_STS register (SPI_I2S_ReadIntFlag()) - * followed by a write operation to SPI_CTRL1 register (SPI_Enable()). - */ -void SPI_I2S_ClearIntFlag(SPI_T* spi, SPI_I2S_INT_T flag) -{ - spi->STS_B.CRCEFLG = BIT_RESET; -} - -/**@} end of group SPI_Fuctions*/ -/**@} end of group SPI_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_tmr.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_tmr.c deleted file mode 100644 index 35b90ec..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_tmr.c +++ /dev/null @@ -1,2137 +0,0 @@ -/*! - * @file apm32f10x_tmr.c - * - * @brief This file provides all the TMR firmware functions. - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_tmr.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup TMR_Driver TMR Driver - @{ -*/ - -/** @addtogroup TMR_Fuctions Fuctions - @{ -*/ - -static void TI1Config(TMR_T* tmr, uint16_t ICpolarity, uint16_t ICselection, uint16_t ICfilter); -static void TI2Config(TMR_T* tmr, uint16_t ICpolarity, uint16_t ICselection, uint16_t ICfilter); -static void TI3Config(TMR_T* tmr, uint16_t ICpolarity, uint16_t ICselection, uint16_t ICfilter); -static void TI4Config(TMR_T* tmr, uint16_t ICpolarity, uint16_t ICselection, uint16_t ICfilter); - -/*! - * @brief Deinitializes the TMRx peripheral registers to their default reset values. - * - * @param tmr: Select TMRx peripheral, The x can be 1 to 8 - * - * @retval None - * - */ -void TMR_Reset(TMR_T* tmr) -{ - if (tmr == TMR1) - { - RCM_EnableAPB2PeriphReset(RCM_APB2_PERIPH_TMR1); - RCM_DisableAPB2PeriphReset(RCM_APB2_PERIPH_TMR1); - } - else if (tmr == TMR2) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_TMR2); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_TMR2); - } - else if (tmr == TMR3) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_TMR3); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_TMR3); - } - else if (tmr == TMR4) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_TMR4); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_TMR4); - } - else if (tmr == TMR5) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_TMR5); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_TMR5); - } - else if (tmr == TMR6) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_TMR6); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_TMR6); - } - else if (tmr == TMR7) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_TMR7); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_TMR7); - } - else if (tmr == TMR8) - { - RCM_EnableAPB2PeriphReset(RCM_APB2_PERIPH_TMR8); - RCM_DisableAPB2PeriphReset(RCM_APB2_PERIPH_TMR8); - } -} - -/*! - * @brief Initializes the base timer through the structure - * - * @param tmr: Select TMRx peripheral, The x can be 1 to 8 - * - * @param baseConfig: Pointer to a TMR_BaseConfig_T structure - * - * @retval None - */ -void TMR_ConfigTimeBase(TMR_T* tmr, TMR_BaseConfig_T* baseConfig) -{ - uint16_t temp; - - if ((tmr == TMR1) || (tmr == TMR8) || (tmr == TMR2) || (tmr == TMR3) || - (tmr == TMR4) || (tmr == TMR5)) - { - temp = tmr->CTRL1; - temp &= 0x038F; - temp |= baseConfig->countMode; - tmr->CTRL1 = temp; - } - - if ((tmr != TMR6) && (tmr != TMR7)) - { - tmr->CTRL1_B.CLKDIV = baseConfig->clockDivision; - } - - tmr->AUTORLD = baseConfig->period; - tmr->PSC = baseConfig->division; - - if ((tmr == TMR1) || (tmr == TMR8)) - { - tmr->REPCNT = baseConfig->repetitionCounter; - } - tmr->CEG_B.UEG = 0x01; -} - -/*! - * @brief Configure channel 1 according to parameters - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCConfig: Pointer to a TMR_OCConfig_T structure - * - * @retval None - */ -void TMR_ConfigOC1(TMR_T* tmr, TMR_OCConfig_T* OCConfig) -{ - tmr->CCEN_B.CC1EN = BIT_RESET; - - tmr->CCM1_COMPARE_B.CC1SEL = BIT_RESET; - tmr->CCM1_COMPARE_B.OC1MOD = OCConfig->mode; - - tmr->CCEN_B.CC1POL = OCConfig->polarity; - tmr->CCEN_B.CC1EN = OCConfig->outputState; - - if ((tmr == TMR1) || (tmr == TMR8)) - { - tmr->CCEN_B.CC1NPOL = OCConfig->nPolarity; - tmr->CCEN_B.CC1NEN = OCConfig->outputNState; - - tmr->CTRL2_B.OC1OIS = BIT_RESET; - tmr->CTRL2_B.OC1NOIS = BIT_RESET; - tmr->CTRL2_B.OC1OIS = OCConfig->idleState; - tmr->CTRL2_B.OC1NOIS = OCConfig->nIdleState; - } - tmr->CC1 = OCConfig->pulse; -} - -/*! - * @brief Configure channel 2 according to parameters - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCConfig: Pointer to a TMR_OCConfig_T structure - * - * @retval None - */ -void TMR_ConfigOC2(TMR_T* tmr, TMR_OCConfig_T* OCConfig) -{ - tmr->CCEN_B.CC2EN = BIT_RESET; - - tmr->CCM1_COMPARE_B.OC2MOD = BIT_RESET; - tmr->CCM1_COMPARE_B.CC2SEL = BIT_RESET; - tmr->CCM1_COMPARE_B.OC2MOD = OCConfig->mode; - - tmr->CCEN_B.CC2POL = BIT_RESET; - tmr->CCEN_B.CC2POL = OCConfig->polarity; - tmr->CCEN_B.CC2EN = OCConfig->outputState; - - if ((tmr == TMR1) || (tmr == TMR8)) - { - tmr->CCEN_B.CC2NPOL = BIT_RESET; - tmr->CCEN_B.CC2NPOL = OCConfig->nPolarity; - - tmr->CCEN_B.CC2NEN = BIT_RESET; - tmr->CCEN_B.CC2NEN = OCConfig->outputNState; - - tmr->CTRL2_B.OC2OIS = BIT_RESET; - tmr->CTRL2_B.OC2NOIS = BIT_RESET; - tmr->CTRL2_B.OC2OIS = OCConfig->idleState; - tmr->CTRL2_B.OC2NOIS = OCConfig->nIdleState; - } - tmr->CC2 = OCConfig->pulse; -} - -/*! - * @brief Configure channel 3 according to parameters - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCConfig: Pointer to a TMR_OCConfig_T structure - * - * @retval None - */ -void TMR_ConfigOC3(TMR_T* tmr, TMR_OCConfig_T* OCConfig) -{ - tmr->CCEN_B.CC3EN = BIT_RESET; - - tmr->CCM2_COMPARE_B.OC3MOD = BIT_RESET; - tmr->CCM2_COMPARE_B.CC3SEL = BIT_RESET; - tmr->CCM2_COMPARE_B.OC3MOD = OCConfig->mode; - - tmr->CCEN_B.CC3POL = BIT_RESET; - tmr->CCEN_B.CC3POL = OCConfig->polarity; - tmr->CCEN_B.CC3EN = OCConfig->outputState; - - if ((tmr == TMR1) || (tmr == TMR8)) - { - tmr->CCEN_B.CC3NPOL = BIT_RESET; - tmr->CCEN_B.CC3NPOL = OCConfig->nPolarity; - tmr->CCEN_B.CC3NEN = BIT_RESET; - tmr->CCEN_B.CC3NEN = OCConfig->outputNState; - - tmr->CTRL2_B.OC3OIS = BIT_RESET; - tmr->CTRL2_B.OC3NOIS = BIT_RESET; - tmr->CTRL2_B.OC3OIS = OCConfig->idleState; - tmr->CTRL2_B.OC3NOIS = OCConfig->nIdleState; - } - tmr->CC3 = OCConfig->pulse; -} - -/*! - * @brief Configure channel 4 according to parameters - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCConfig: Pointer to a TMR_OCConfig_T structure - * - * @retval None - */ -void TMR_ConfigOC4(TMR_T* tmr, TMR_OCConfig_T* OCConfig) -{ - tmr->CCEN_B.CC4EN = BIT_RESET; - - tmr->CCM2_COMPARE_B.OC4MOD = BIT_RESET; - tmr->CCM2_COMPARE_B.CC4SEL = BIT_RESET; - tmr->CCM2_COMPARE_B.OC4MOD = OCConfig->mode; - - tmr->CCEN_B.CC4POL = BIT_RESET; - tmr->CCEN_B.CC4POL = OCConfig->polarity; - tmr->CCEN_B.CC4EN = OCConfig->outputState; - - if ((tmr == TMR1) || (tmr == TMR8)) - { - tmr->CTRL2_B.OC4OIS = BIT_RESET; - tmr->CTRL2_B.OC4OIS = OCConfig->idleState; - } - tmr->CC4 = OCConfig->pulse; -} - -/*! - * @brief Configure Peripheral equipment - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param ICConfig: Pointer to a TMR_ICConfig_T structure - * - * @retval None - */ -void TMR_ConfigIC(TMR_T* tmr, TMR_ICConfig_T* ICConfig) -{ - if (ICConfig->channel == TMR_CHANNEL_1) - { - TI1Config(tmr, ICConfig->polarity, ICConfig->selection, ICConfig->filter); - TMR_ConfigIC1Prescal(tmr, ICConfig->prescaler); - } - else if (ICConfig->channel == TMR_CHANNEL_2) - { - TI2Config(tmr, ICConfig->polarity, ICConfig->selection, ICConfig->filter); - TMR_ConfigIC2Prescal(tmr, ICConfig->prescaler); - } - else if (ICConfig->channel == TMR_CHANNEL_3) - { - TI3Config(tmr, ICConfig->polarity, ICConfig->selection, ICConfig->filter); - TMR_ConfigIC3Prescal(tmr, ICConfig->prescaler); - } - else if (ICConfig->channel == TMR_CHANNEL_4) - { - TI4Config(tmr, ICConfig->polarity, ICConfig->selection, ICConfig->filter); - TMR_ConfigIC4Prescal(tmr, ICConfig->prescaler); - } -} - -/*! - * @brief Configures the: Break feature, dead time, Lock level, the IMOS - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @param BDTConfig: Pointer to a TMR_BDTConfig_T structure - * - * @retval None - */ -void TMR_ConfigBDT(TMR_T* tmr, TMR_BDTConfig_T* BDTConfig) -{ - tmr->BDT = (BDTConfig->IMOS)<<10 |\ - (BDTConfig->RMOS)<<11 |\ - (BDTConfig->lockLevel)<<8 |\ - (BDTConfig->deadTime) |\ - (BDTConfig->BRKState)<<12 |\ - (BDTConfig->BRKPolarity)<<13 |\ - (BDTConfig->automaticOutput)<<14; -} - -/*! - * @brief Initialize the Base timer with its default value. - * - * @param baseConfig: pointer to a TMR_BaseConfig_T - * - * @retval None - */ -void TMR_ConfigTimeBaseStructInit(TMR_BaseConfig_T* baseConfig) -{ - baseConfig->period = 0xFFFF; - baseConfig->division = 0x0000; - baseConfig->clockDivision = TMR_CLOCK_DIV_1; - baseConfig->countMode = TMR_COUNTER_MODE_UP; - baseConfig->repetitionCounter = 0x0000; -} - -/*! - * @brief Initialize the OC timer with its default value. - * - * @param OCConfig: pointer to a TMR_OCConfig_T - * - * @retval None - */ -void TMR_ConfigOCStructInit(TMR_OCConfig_T* OCConfig) -{ - OCConfig->mode = TMR_OC_MODE_TMRING; - OCConfig->outputState = TMR_OC_STATE_DISABLE; - OCConfig->outputNState = TMR_OC_NSTATE_DISABLE; - OCConfig->pulse = 0x0000; - OCConfig->polarity = TMR_OC_POLARITY_HIGH; - OCConfig->nPolarity = TMR_OC_NPOLARITY_HIGH; - OCConfig->idleState = TMR_OC_IDLE_STATE_RESET; - OCConfig->nIdleState = TMR_OC_NIDLE_STATE_RESET; -} - -/*! - * @brief Initialize the IC timer with its default value. - * - * @param ICConfig: pointer to a TMR_ICConfig_T - * - * @retval None - */ -void TMR_ConfigICStructInit(TMR_ICConfig_T* ICConfig) -{ - ICConfig->channel = TMR_CHANNEL_1; - ICConfig->polarity = TMR_IC_POLARITY_RISING; - ICConfig->selection = TMR_IC_SELECTION_DIRECT_TI; - ICConfig->prescaler = TMR_IC_PSC_1; - ICConfig->filter = 0x00; -} - -/*! - * @brief Initialize the BDT timer with its default value. - * - * @param BDTConfig: pointer to a TMR_BDTConfig_T - * - * @retval None - */ -void TMR_ConfigBDTStructInit( TMR_BDTConfig_T* BDTConfig) -{ - BDTConfig->RMOS = TMR_RMOS_STATE_DISABLE; - BDTConfig->IMOS = TMR_IMOS_STATE_DISABLE; - BDTConfig->lockLevel = TMR_LOCK_LEVEL_OFF; - BDTConfig->deadTime = 0x00; - BDTConfig->BRKState = TMR_BRK_STATE_DISABLE; - BDTConfig->BRKPolarity = TMR_BRK_POLARITY_LOW; - BDTConfig->automaticOutput = TMR_AUTOMATIC_OUTPUT_DISABLE; -} - -/*! - * @brief Enable the specified TMR peripheral - * - * @param tmr: The TMRx can be 1 to 8 - * - * @retval None - */ -void TMR_Enable(TMR_T* tmr) -{ - tmr->CTRL1_B.CNTEN = ENABLE; -} - -/*! - * @brief Disable the specified TMR peripheral - * - * @param tmr: The TMRx can be 1 to 8 - * - * @retval None - */ -void TMR_Disable(TMR_T* tmr) -{ - tmr->CTRL1_B.CNTEN = DISABLE; -} - -/*! - * @brief Config of TMR to PWM - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param PWMConfig: pointer to a TMR_ICConfig_T - * - * @retval None - */ -void TMR_ConfigPWM(TMR_T* tmr, TMR_ICConfig_T* PWMConfig) -{ - uint16_t icpolarity = TMR_IC_POLARITY_RISING; - uint16_t icselection = TMR_IC_SELECTION_DIRECT_TI; - - if (PWMConfig->polarity == TMR_IC_POLARITY_RISING) - { - icpolarity = TMR_IC_POLARITY_FALLING; - } - else - { - icpolarity = TMR_IC_POLARITY_RISING; - } - - if (PWMConfig->selection == TMR_IC_SELECTION_DIRECT_TI) - { - icselection = TMR_IC_SELECTION_INDIRECT_TI; - } - else - { - icselection = TMR_IC_SELECTION_DIRECT_TI; - } - - if (PWMConfig->channel == TMR_CHANNEL_1) - { - TI1Config(tmr, PWMConfig->polarity, PWMConfig->selection, PWMConfig->filter); - TMR_ConfigIC1Prescal(tmr, PWMConfig->prescaler); - TI2Config(tmr, icpolarity, icselection, PWMConfig->filter); - TMR_ConfigIC2Prescal(tmr, PWMConfig->prescaler); - } - else - { - TI2Config(tmr, PWMConfig->polarity, PWMConfig->selection, PWMConfig->filter); - TMR_ConfigIC2Prescal(tmr, PWMConfig->prescaler); - TI1Config(tmr, icpolarity, icselection, PWMConfig->filter); - TMR_ConfigIC1Prescal(tmr, PWMConfig->prescaler); - } -} - -/*! - * @brief Enable TMRx PWM output - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @retval None - */ -void TMR_EnablePWMOutputs(TMR_T* tmr) -{ - tmr->BDT_B.MOEN = ENABLE; -} - -/*! - * @brief Disable TMRx PWM output. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @retval None - */ -void TMR_DisablePWMOutputs(TMR_T* tmr) -{ - tmr->BDT_B.MOEN = DISABLE; -} - -/*! - * @brief Configures the TMRx's DMA interface. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param baseAddress: pointer to a TMR_DMA_BASE_T - * - * @param burstLength: pointer to a TMR_DMA_BURSTLENGTH_T - * - * @retval None - */ -void TMR_ConfigDMA(TMR_T* tmr, TMR_DMA_BASE_T baseAddress, TMR_DMA_BURSTLENGTH_T burstLength) -{ - tmr->DCTRL = (uint32_t)baseAddress | (uint32_t)burstLength; -} - -/*! - * @brief Enable TMRx Requests. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param souces: specifies the TMR DMA souces - * The parameter can be any combination of following values: - * @arg TMR_DMA_SOURCE_UPDATE: TMR update DMA souces - * @arg TMR_DMA_SOURCE_CC1: TMR Capture Compare 1 DMA souces - * @arg TMR_DMA_SOURCE_CC2: TMR Capture Compare 2 DMA souces - * @arg TMR_DMA_SOURCE_CC3: TMR Capture Compare 3 DMA souces - * @arg TMR_DMA_SOURCE_CC4: TMR Capture Compare 4 DMA souces - * @arg TMR_DMA_SOURCE_COM: TMR Commutation DMA souces - * @arg TMR_DMA_SOURCE_TRG: TMR Trigger DMA souces - * @retval None - * - */ -void TMR_EnableDMASoure(TMR_T* tmr, uint16_t dmaSource) -{ - tmr->DIEN |= dmaSource; -} - -/*! - * @brief Disable TMRx Requests. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param souces: specifies the TMR DMA souces - * The parameter can be any combination of following values: - * @arg TMR_DMA_SOURCE_UPDATE: TMR update DMA souces - * @arg TMR_DMA_SOURCE_CC1: TMR Capture Compare 1 DMA souces - * @arg TMR_DMA_SOURCE_CC2: TMR Capture Compare 2 DMA souces - * @arg TMR_DMA_SOURCE_CC3: TMR Capture Compare 3 DMA souces - * @arg TMR_DMA_SOURCE_CC4: TMR Capture Compare 4 DMA souces - * @arg TMR_DMA_SOURCE_COM: TMR Commutation DMA souces - * @arg TMR_DMA_SOURCE_TRG: TMR Trigger DMA souces - * @retval None - * - */ -void TMR_DisableDMASoure(TMR_T* tmr, uint16_t dmaSource) -{ - tmr->DIEN &= ~dmaSource; -} - -/*! - * @brief Configures the TMRx internal Clock - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval None - */ -void TMR_ConfigInternalClock(TMR_T* tmr) -{ - tmr->SMCTRL_B.SMFSEL = DISABLE; -} - -/*! - * @brief Configures the TMRx Internal Trigger as External Clock - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param triggerSource: specifies the TMR trigger souces - * The parameter can be one of following values: - * @arg TMR_TRIGGER_SOURCE_ITR0: TMR Internal Trigger 0 - * @arg TMR_TRIGGER_SOURCE_ITR1: TMR Internal Trigger 1 - * @arg TMR_TRIGGER_SOURCE_ITR2: TMR Internal Trigger 2 - * @arg TMR_TRIGGER_SOURCE_ITR3: TMR Internal Trigger 3 - * @retval None - */ -void TMR_ConfigIntTrigExternalClock(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSource) -{ - TMR_SelectInputTrigger(tmr, triggerSource); - tmr->SMCTRL_B.SMFSEL = 0x07; -} - -/*! - * @brief Configures the TMRx Trigger as External Clock - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param triggerSource: specifies the TMR trigger souces - * The parameter can be one of following values: - * @arg TMR_TRIGGER_SOURCE_TI1F_ED: TI1 Edge Detector - * @arg TMR_TRIGGER_SOURCE_TI1FP1: Filtered Timer Input 1 - * @arg TMR_TRIGGER_SOURCE_TI2FP2: Filtered Timer Input 2 - * - * @param ICpolarity: specifies the TMR IC polarity - * The parameter can be one of following values: - * @arg TMR_IC_POLARITY_RISING: TMR IC polarity rising - * @arg TMR_IC_POLARITY_FALLING: TMR IC polarity falling - * - * @param ICfilter: This parameter must be a value between 0x00 and 0x0F. - * - * @retval None - */ -void TMR_ConfigTrigExternalClock(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSource, - TMR_IC_POLARITY_T ICpolarity, uint16_t ICfilter) -{ - if (triggerSource == 0x06) - { - TI2Config(tmr, ICpolarity, TMR_IC_SELECTION_DIRECT_TI, ICfilter); - } - else - { - TI1Config(tmr, ICpolarity, TMR_IC_SELECTION_DIRECT_TI, ICfilter); - } - - TMR_SelectInputTrigger(tmr, triggerSource); - tmr->SMCTRL_B.SMFSEL = 0x07; -} - -/*! - * @brief Configures the External clock Mode1 - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param prescaler: specifies the external Trigger Prescaler - * The parameter can be one of following values: - * @arg TMR_EXTTRG_PSC_OFF: ETRP Prescaler OFF - * @arg TMR_EXTTRG_PSC_DIV2: ETRP frequency divided by 2 - * @arg TMR_EXTTRG_PSC_DIV4: ETRP frequency divided by 4 - * @arg TMR_EXTTRG_PSC_DIV8: ETRP frequency divided by 8 - * - * @param polarity: specifies the TMR IC polarity - * The parameter can be one of following values: - * @arg TMR_EXTTRG_POL_INVERTED: Active low or falling edge active - * @arg TMR_EXTTGR_POL_NONINVERTED: Active high or rising edge active - * - * @param filter: This parameter must be a value between 0x00 and 0x0F. - * - * @retval None - */ -void TMR_ConfigETRClockMode1(TMR_T* tmr, TMR_EXTTRG_PSC_T prescaler, - TMR_EXTTRG_POL_T polarity, uint16_t filter) -{ - TMR_ConfigETR(tmr, prescaler, polarity, filter); - tmr->SMCTRL_B.SMFSEL = BIT_RESET; - tmr->SMCTRL_B.SMFSEL = 0x07; - tmr->SMCTRL_B.TRGSEL = 0x07; -} - -/*! - * @brief Configures the External clock Mode2 - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param prescaler: specifies the external Trigger Prescaler - * The parameter can be one of following values: - * @arg TMR_EXTTRG_PSC_OFF: ETRP Prescaler OFF - * @arg TMR_EXTTRG_PSC_DIV2: ETRP frequency divided by 2 - * @arg TMR_EXTTRG_PSC_DIV4: ETRP frequency divided by 4 - * @arg TMR_EXTTRG_PSC_DIV8: ETRP frequency divided by 8 - * - * @param polarity: specifies the TMR IC polarity - * The parameter can be one of following values: - * @arg TMR_EXTTRG_POL_INVERTED: Active low or falling edge active - * @arg TMR_EXTTGR_POL_NONINVERTED: Active high or rising edge active - * - * @param filter: This parameter must be a value between 0x00 and 0x0F. - * - * @retval None - */ -void TMR_ConfigETRClockMode2(TMR_T* tmr, TMR_EXTTRG_PSC_T prescaler, - TMR_EXTTRG_POL_T polarity, uint16_t filter) -{ - TMR_ConfigETR(tmr, prescaler, polarity, filter); - tmr->SMCTRL_B.ECEN = ENABLE; -} -/*! - * @brief Configures the TMRx External Trigger (ETR). - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param prescaler: specifies the external Trigger Prescaler - * The parameter can be one of following values: - * @arg TMR_EXTTRG_PSC_OFF: ETRP Prescaler OFF - * @arg TMR_EXTTRG_PSC_DIV2: ETRP frequency divided by 2 - * @arg TMR_EXTTRG_PSC_DIV4: ETRP frequency divided by 4 - * @arg TMR_EXTTRG_PSC_DIV8: ETRP frequency divided by 8 - * - * @param polarity: specifies the TMR IC polarity - * The parameter can be one of following values: - * @arg TMR_EXTTRG_POL_INVERTED: Active low or falling edge active - * @arg TMR_EXTTGR_POL_NONINVERTED: Active high or rising edge active - * - * @param filter: This parameter must be a value between 0x00 and 0x0F. - * - * @retval None - */ -void TMR_ConfigETR(TMR_T* tmr, TMR_EXTTRG_PSC_T prescaler, - TMR_EXTTRG_POL_T polarity, uint16_t filter) -{ - tmr->SMCTRL &= 0x00FF; - tmr->SMCTRL_B.ETPCFG = prescaler; - tmr->SMCTRL_B.ETPOL = polarity; - tmr->SMCTRL_B.ETFCFG = filter; -} - -/*! - * @brief Configures the TMRx prescaler. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param prescaler: specifies the prescaler Register value - * - * @param pscReloadMode: specifies the TMR prescaler Reload mode - * The parameter can be one of following values: - * @arg TMR_PSC_RELOAD_UPDATE: The Prescaler is loaded at the update event - * @arg TMR_PSC_RELOAD_IMMEDIATE: The Prescaler is loaded immediately - * @retval None - */ -void TMR_ConfigPrescaler(TMR_T* tmr, uint16_t prescaler, TMR_PSC_RELOAD_T pscReloadMode) -{ - tmr->PSC = prescaler; - tmr->CEG_B.UEG = pscReloadMode; -} - -/*! - * @brief Config counter mode - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param countMode:specifies the Counter Mode to be used - * The parameter can be one of following values: - * @arg TMR_COUNTER_MODE_UP: Timer Up Counting Mode - * @arg TMR_COUNTER_MODE_DOWN: Timer Down Counting Mode - * @arg TMR_COUNTER_MODE_CENTERALIGNED1: Timer Center Aligned Mode1 - * @arg TMR_COUNTER_MODE_CENTERALIGNED2: Timer Center Aligned Mode2 - * @arg TMR_COUNTER_MODE_CENTERALIGNED3: Timer Center Aligned Mode3 - * @retval None - */ -void TMR_ConfigCounterMode(TMR_T* tmr, TMR_COUNTER_MODE_T countMode) -{ - tmr->CTRL1_B.CNTDIR = BIT_RESET; - tmr->CTRL1_B.CAMSEL = BIT_RESET; - tmr->CTRL1 |= countMode; -} - -/*! - * @brief Selects the Input Trigger source - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param triggerSource: specifies the Input Trigger source - * The parameter can be one of following values: - * @arg TMR_TRIGGER_SOURCE_ITR0: Internal Trigger 0 - * @arg TMR_TRIGGER_SOURCE_ITR1: Internal Trigger 1 - * @arg TMR_TRIGGER_SOURCE_ITR2: Internal Trigger 2 - * @arg TMR_TRIGGER_SOURCE_ITR3: Internal Trigger 3 - * @arg TMR_TRIGGER_SOURCE_TI1F_ED: TI1 Edge Detector - * @arg TMR_TRIGGER_SOURCE_TI1FP1: Filtered Timer Input 1 - * @arg TMR_TRIGGER_SOURCE_TI2FP2: Filtered Timer Input 2 - * @arg TMR_TRIGGER_SOURCE_ETRF: External Trigger input - * - * @retval None - */ -void TMR_SelectInputTrigger(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSource) -{ - tmr->SMCTRL_B.TRGSEL = BIT_RESET; - tmr->SMCTRL_B.TRGSEL = triggerSource; -} - -/*! - * @brief Configures the Encoder Interface. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param encodeMode: specifies the Encoder Mode - * The parameter can be one of following values: - * @arg TMR_ENCODER_MODE_TI1: Counter counts on TI1FP1 edge depending on TI2FP2 level - * @arg TMR_ENCODER_MODE_TI2: Counter counts on TI2FP2 edge depending on TI1FP1 level - * @arg TMR_ENCODER_MODE_TI12: Counter counts on both TI1FP1 and TI2FP2 edges depending - * on the level of the other input - * - * @param IC1Polarity: specifies the TMR IC1 polarity - * The parameter can be one of following values: - * @arg TMR_IC_POLARITY_RISING: TMR IC polarity rising - * @arg TMR_IC_POLARITY_FALLING: TMR IC polarity falling - * - * @param IC2Polarity: specifies the TMR IC2 polarity - * The parameter can be one of following values: - * @arg TMR_IC_POLARITY_RISING: TMR IC polarity rising - * @arg TMR_IC_POLARITY_FALLING: TMR IC polarity falling - * @retval None - */ -void TMR_ConfigEncodeInterface(TMR_T* tmr, TMR_ENCODER_MODE_T encodeMode, TMR_IC_POLARITY_T IC1Polarity, - TMR_IC_POLARITY_T IC2Polarity) -{ - tmr->SMCTRL_B.SMFSEL = BIT_RESET; - tmr->SMCTRL_B.SMFSEL = encodeMode; - - tmr->CCM1_CAPTURE_B.CC1SEL = BIT_RESET ; - tmr->CCM1_CAPTURE_B.CC2SEL = BIT_RESET ; - tmr->CCM1_CAPTURE_B.CC1SEL = 0x01 ; - tmr->CCM1_CAPTURE_B.CC2SEL = 0x01 ; - - tmr->CCEN_B.CC1POL = BIT_RESET; - tmr->CCEN_B.CC2POL = BIT_RESET; - tmr->CCEN |= ((IC1Polarity | (IC2Polarity << 4))); -} - -/*! - * @brief Forces the output 1 waveform to active or inactive level. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param forcesAction: specifies the forced Action to be set to the output waveform - * The parameter can be one of following values: - * @arg TMR_FORCED_ACTION_ACTIVE: Force active level on OC1REF - * @arg TMR_FORCED_ACTION_INACTIVE: Force inactive level on OC1REF - * @retval None - */ -void TMR_ConfigForcedOC1(TMR_T* tmr, TMR_FORCED_ACTION_T forcesAction) -{ - tmr->CCM1_COMPARE_B.OC1MOD = BIT_RESET; - tmr->CCM1_COMPARE_B.OC1MOD = forcesAction; -} - -/*! - * @brief Forces the output 2 waveform to active or inactive level. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param forcesAction: specifies the forced Action to be set to the output waveform - * The parameter can be one of following values: - * @arg TMR_FORCED_ACTION_ACTIVE: Force active level on OC1REF - * @arg TMR_FORCED_ACTION_INACTIVE: Force inactive level on OC1REF - * @retval None - */ -void TMR_ConfigForcedOC2(TMR_T* tmr, TMR_FORCED_ACTION_T forcesAction) -{ - tmr->CCM1_COMPARE_B.OC2MOD = BIT_RESET; - tmr->CCM1_COMPARE_B.OC2MOD = forcesAction; -} - -/*! - * @brief Forces the output 3 waveform to active or inactive level. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param forcesAction: specifies the forced Action to be set to the output waveform - * The parameter can be one of following values: - * @arg TMR_FORCED_ACTION_ACTIVE: Force active level on OC1REF - * @arg TMR_FORCED_ACTION_INACTIVE: Force inactive level on OC1REF - * - * @retval None - */ -void TMR_ConfigForcedOC3(TMR_T* tmr, TMR_FORCED_ACTION_T forcesAction) -{ - tmr->CCM2_COMPARE_B.OC3MOD = BIT_RESET; - tmr->CCM2_COMPARE_B.OC3MOD = forcesAction; -} - -/*! - * @brief Forces the output 4 waveform to active or inactive level. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param forcesAction: specifies the forced Action to be set to the output waveform - * The parameter can be one of following values: - * @arg TMR_FORCED_ACTION_ACTIVE: Force active level on OC1REF - * @arg TMR_FORCED_ACTION_INACTIVE: Force inactive level on OC1REF - * - * @retval None - */ -void TMR_ConfigForcedOC4(TMR_T* tmr, TMR_FORCED_ACTION_T forcesAction) -{ - tmr->CCM2_COMPARE_B.OC4MOD = BIT_RESET; - tmr->CCM2_COMPARE_B.OC4MOD = forcesAction; -} - -/*! - * @brief Enables peripheral Preload register on AUTORLD. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @retval None - */ -void TMR_EnableAutoReload(TMR_T* tmr) -{ - tmr->CTRL1_B.ARPEN = ENABLE; -} - -/*! - * @brief Disable peripheral Preload register on AUTORLD. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @retval None - */ -void TMR_DisableAutoReload(TMR_T* tmr) -{ - tmr->CTRL1_B.ARPEN = DISABLE; -} - -/*! - * @brief Enable Selects the TMR peripheral Commutation event. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @retval None - */ -void TMR_EnableSelectCOM(TMR_T* tmr) -{ - tmr->CTRL2_B.CCUSEL = ENABLE; -} -/*! - * @brief Disable Selects the TMR peripheral Commutation event. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @retval None - */ -void TMR_DisableSelectCOM(TMR_T* tmr) -{ - tmr->CTRL2_B.CCUSEL = DISABLE; -} - -/*! - * @brief Enable Capture Compare DMA source. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval None - */ -void TMR_EnableCCDMA(TMR_T* tmr) -{ - tmr->CTRL2_B.CCDSEL = ENABLE; -} - -/*! - * @brief Disable Capture Compare DMA source. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval None - */ -void TMR_DisableCCDMA(TMR_T* tmr) -{ - tmr->CTRL2_B.CCDSEL = DISABLE; -} - -/*! - * @brief Enable Capture Compare Preload Control bit. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @retval None - */ -void TMR_EnableCCPreload(TMR_T* tmr) -{ - tmr->CTRL2_B.CCPEN = ENABLE; -} - -/*! - * @brief Disable Capture Compare Preload Control bit. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @retval None - */ -void TMR_DisableCCPreload(TMR_T* tmr) -{ - tmr->CTRL2_B.CCPEN = DISABLE; -} - -/*! - * @brief Enables or disables the peripheral Preload register on CCM1. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCPreload: specifies the Output Compare Channel Preload - * The parameter can be one of following values: - * @arg TMR_OC_PRELOAD_DISABLE - * @arg TMR_OC_PRELOAD_ENABLE - * @retval None - */ -void TMR_ConfigOC1Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload) -{ - tmr->CCM1_COMPARE_B.OC1PEN = OCPreload; -} - -/*! - * @brief Enables or disables the peripheral Preload register on CCM2. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCPreload: specifies the Output Compare Channel Preload - * The parameter can be one of following values: - * @arg TMR_OC_PRELOAD_DISABLE - * @arg TMR_OC_PRELOAD_ENABLE - * @retval None - */ -void TMR_ConfigOC2Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload) -{ - tmr->CCM1_COMPARE_B.OC2PEN = OCPreload; -} - -/*! - * @brief Enables or disables the peripheral Preload register on CCM3. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCPreload: specifies the Output Compare Channel Preload - * The parameter can be one of following values: - * @arg TMR_OC_PRELOAD_DISABLE - * @arg TMR_OC_PRELOAD_ENABLE - * @retval None - */ -void TMR_ConfigOC3Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload) -{ - tmr->CCM2_COMPARE_B.OC3PEN = OCPreload; -} - -/*! - * @brief Enables or disables the peripheral Preload register on CCM4. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCPreload: specifies the Output Compare Channel Preload - * The parameter can be one of following values: - * @arg TMR_OC_PRELOAD_DISABLE - * @arg TMR_OC_PRELOAD_ENABLE - * @retval Nonee - */ -void TMR_ConfigOC4Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload) -{ - tmr->CCM2_COMPARE_B.OC4PEN = OCPreload; -} - -/*! - * @brief Configures the Output Compare 1 Fast feature. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCFast: specifies the Output Compare Channel Fast - * The parameter can be one of following values: - * @arg TMR_OC_FAST_DISABLE - * @arg TMR_OC_FAST_ENABLE - * @retval None - */ -void TMR_ConfigOC1Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast) -{ - tmr->CCM1_COMPARE_B.OC1FEN = OCFast; -} - -/*! - * @brief Configures the Output Compare 2 Fast feature. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCFast: specifies the Output Compare Channel Fast - * The parameter can be one of following values: - * @arg TMR_OC_FAST_DISABLE - * @arg TMR_OC_FAST_ENABLE - * @retval None - */ -void TMR_ConfigOC2Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast) -{ - tmr->CCM1_COMPARE_B.OC2FEN = OCFast; -} - -/*! - * @brief Configures the Output Compare 2 Fast feature. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCFast: specifies the Output Compare Channel Fast - * The parameter can be one of following values: - * @arg TMR_OC_FAST_DISABLE - * @arg TMR_OC_FAST_ENABLE - * @retval None - */ -void TMR_ConfigOC3Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast) -{ - tmr->CCM2_COMPARE_B.OC3FEN = OCFast; -} - -/*! - * @brief Configures the Output Compare 4 Fast feature. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCFast: specifies the Output Compare Channel Fast - * The parameter can be one of following values: - * @arg TMR_OC_FAST_DISABLE - * @arg TMR_OC_FAST_ENABLE - * @retval None - */ -void TMR_ConfigOC4Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast) -{ - tmr->CCM2_COMPARE_B.OC4FEN = OCFast; -} - -/*! - * @brief Clears or safeguards the OCREF1 signal on an external event - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCClear: specifies the Output Compare Channel1 Clear - * The parameter can be one of following values: - * @arg TMR_OC_CLEAR_DISABLE - * @arg TMR_OC_CLEAR_ENABLE - * @retval None - */ -void TMR_ClearOC1Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear) -{ - tmr->CCM1_COMPARE_B.OC1CEN = OCClear; -} - -/*! - * @brief Clears or safeguards the OCREF2 signal on an external event - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCClear: specifies the Output Compare Channel1 Clear - * The parameter can be one of following values: - * @arg TMR_OC_CLEAR_DISABLE - * @arg TMR_OC_CLEAR_ENABLE - * @retval None - */ -void TMR_ClearOC2Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear) -{ - tmr->CCM1_COMPARE_B.OC2CEN = OCClear; -} - -/*! - * @brief Clears or safeguards the OCREF3 signal on an external event - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCClear: specifies the Output Compare Channel1 Clear - * The parameter can be one of following values: - * @arg TMR_OC_CLEAR_DISABLE - * @arg TMR_OC_CLEAR_ENABLE - * @retval None - */ -void TMR_ClearOC3Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear) -{ - tmr->CCM2_COMPARE_B.OC3CEN = OCClear; -} - -/*! - * @brief Clears or safeguards the OCREF4 signal on an external event - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param OCClear: specifies the Output Compare Channel1 Clear - * The parameter can be one of following values: - * @arg TMR_OC_CLEAR_DISABLE - * @arg TMR_OC_CLEAR_ENABLE - * @retval None - */ -void TMR_ClearOC4Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear) -{ - tmr->CCM2_COMPARE_B.OC4CEN = OCClear; -} - -/*! - * @brief Configures the channel 1 polarity. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param polarity: specifies the OC1 Polarity - * The parameter can be one of following values: - * @arg TMR_OC_POLARITY_HIGH: Output Compare active high - * @arg TMR_OC_POLARITY_LOW: Output Compare active low - * @retval Nonee - */ -void TMR_ConfigOC1Polarity(TMR_T* tmr, TMR_OC_POLARITY_T polarity) -{ - tmr->CCEN_B.CC1POL = polarity; -} - -/*! - * @brief Configures the channel 1 nPolarity. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @param nPolarity: specifies the OC1 nPolarity - * The parameter can be one of following values: - * @arg TMR_OC_NPOLARITY_HIGH: Output Compare active high - * @arg TMR_OC_NPOLARITY_LOW: Output Compare active low - * @retval None - */ -void TMR_ConfigOC1NPolarity(TMR_T* tmr, TMR_OC_NPOLARITY_T nPolarity) -{ - tmr->CCEN_B.CC1NPOL = nPolarity; -} - -/*! - * @brief Configures the channel 2 polarity. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param polarity: specifies the OC2 Polarity - * The parameter can be one of following values: - * @arg TMR_OC_POLARITY_HIGH: Output Compare active high - * @arg TMR_OC_POLARITY_LOW: Output Compare active low - * @retval None - */ -void TMR_ConfigOC2Polarity(TMR_T* tmr, TMR_OC_POLARITY_T polarity) -{ - tmr->CCEN_B.CC2POL = polarity; -} - -/*! - * @brief Configures the channel 2 nPolarity. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @param nPolarity: specifies the OC2 nPolarity - * The parameter can be one of following values: - * @arg TMR_OC_NPOLARITY_HIGH: Output Compare active high - * @arg TMR_OC_NPOLARITY_LOW: Output Compare active low - * @retval None - */ -void TMR_ConfigOC2NPolarity(TMR_T* tmr, TMR_OC_NPOLARITY_T nPolarity) -{ - tmr->CCEN_B.CC2NPOL = nPolarity; -} - -/*! - * @brief Configures the channel 3 polarity. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param polarity: specifies the OC3 Polarity - * The parameter can be one of following values: - * @arg TMR_OC_POLARITY_HIGH: Output Compare active high - * @arg TMR_OC_POLARITY_LOW: Output Compare active low - * @retval None - */ -void TMR_ConfigOC3Polarity(TMR_T* tmr, TMR_OC_POLARITY_T polarity) -{ - tmr->CCEN_B.CC3POL = polarity; -} - -/*! - * @brief Configures the channel 3 nPolarity. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @param nPolarity: specifies the OC3 nPolarity - * The parameter can be one of following values: - * @arg TMR_OC_NPOLARITY_HIGH: Output Compare active high - * @arg TMR_OC_NPOLARITY_LOW: Output Compare active low - * @retval None - */ -void TMR_ConfigOC3NPolarity(TMR_T* tmr, TMR_OC_NPOLARITY_T nPolarity) -{ - tmr->CCEN_B.CC3NPOL = nPolarity; -} - -/*! - * @brief Configures the channel 4 polarity. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param polarity: specifies the OC4 Polarity - * The parameter can be one of following values: - * @arg TMR_OC_POLARITY_HIGH: Output Compare active high - * @arg TMR_OC_POLARITY_LOW: Output Compare active low - * @retval None - */ -void TMR_ConfigOC4Polarity(TMR_T* tmr, TMR_OC_POLARITY_T polarity) -{ - tmr->CCEN_B.CC4POL = polarity; -} - -/*! - * @brief Enables the Capture Compare Channel x. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param channel: specifies the Channel - * The parameter can be one of following values: - * @arg TMR_CHANNEL_1: Timer Channel 1 - * @arg TMR_CHANNEL_2: Timer Channel 2 - * @arg TMR_CHANNEL_3: Timer Channel 3 - * @arg TMR_CHANNEL_4: Timer Channel 4 - * @retval None - */ -void TMR_EnableCCxChannel(TMR_T* tmr, TMR_CHANNEL_T channel) -{ - tmr->CCEN |= BIT_SET << channel; -} - -/*! - * @brief Disables the Capture Compare Channel x. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param channel: specifies the Channel - * The parameter can be one of following values: - * @arg TMR_CHANNEL_1: Timer Channel 1 - * @arg TMR_CHANNEL_2: Timer Channel 2 - * @arg TMR_CHANNEL_3: Timer Channel 3 - * @arg TMR_CHANNEL_4: Timer Channel 4 - * @retval None - */ -void TMR_DisableCCxChannel(TMR_T* tmr, TMR_CHANNEL_T channel) -{ - tmr->CCEN &= BIT_RESET << channel; -} - -/*! - * @brief Enables the Capture Compare Channelx N. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @param channel: specifies the Channel - * The parameter can be one of following values: - * @arg TMR_CHANNEL_1: Timer Channel 1 - * @arg TMR_CHANNEL_2: Timer Channel 2 - * @arg TMR_CHANNEL_3: Timer Channel 3 - * @retval None - */ -void TMR_EnableCCxNChannel(TMR_T* tmr, TMR_CHANNEL_T channel) -{ - tmr->CCEN |= 0x04 << channel; -} - -/*! - * @brief Disables the Capture Compare Channelx N. - * - * @param tmr: The TMRx it can be TMR1 and TMR8 - * - * @param channel: specifies the Channel - * The parameter can be one of following values: - * @arg TMR_CHANNEL_1: Timer Channel 1 - * @arg TMR_CHANNEL_2: Timer Channel 2 - * @arg TMR_CHANNEL_3: Timer Channel 3 - * @retval None - */ -void TMR_DisableCCxNChannel(TMR_T* tmr, TMR_CHANNEL_T channel) -{ - tmr->CCEN &= BIT_RESET << channel; -} - -/*! - * @brief Selects the Output Compare Mode. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param channel: specifies the Channel - * The parameter can be one of following values: - * @arg TMR_CHANNEL_1: Timer Channel 1 - * @arg TMR_CHANNEL_2: Timer Channel 2 - * @arg TMR_CHANNEL_3: Timer Channel 3 - * @arg TMR_CHANNEL_4: Timer Channel 4 - * - * @param mode: specifies the Output Compare Mode - * The parameter can be one of following values: - * @arg TMR_OC_MODE_TMRING - * @arg TMR_OC_MODE_ACTIVE - * @arg TMR_OC_MODE_INACTIVE - * @arg TMR_OC_MODE_TOGGEL - * @arg TMR_OC_MODE_LOWLEVEL - * @arg TMR_OC_MODE_HIGHLEVEL - * @arg TMR_OC_MODE_PWM1 - * @arg TMR_OC_MODE_PWM2 - * @retval None - */ -void TMR_SelectOCxMode(TMR_T* tmr, TMR_CHANNEL_T channel, TMR_OC_MODE_T mode) -{ - tmr->CCEN &= BIT_RESET << channel; - - if (channel == TMR_CHANNEL_1) - { - tmr->CCM1_COMPARE_B.OC1MOD = mode; - } - else if (channel == TMR_CHANNEL_2) - { - tmr->CCM1_COMPARE_B.OC2MOD = mode; - } - else if (channel == TMR_CHANNEL_3) - { - tmr->CCM2_COMPARE_B.OC3MOD = mode; - } - else if (channel == TMR_CHANNEL_4) - { - tmr->CCM2_COMPARE_B.OC4MOD = mode; - } -} - -/*! - * @brief Enable the TMRx update event - * - * @param tmr: The TMRx can be 1 to 8 - * - * @retval None - */ -void TMR_EnableUpdate(TMR_T* tmr) -{ - tmr->CTRL1_B.UD = DISABLE; -} - -/*! - * @brief Disable the TMRx update event - * - * @param tmr: The TMRx can be 1 to 8 - * - * @retval None - */ -void TMR_DisableUpdate(TMR_T* tmr) -{ - tmr->CTRL1_B.UD = ENABLE; -} - -/*! - * @brief Configures the Update Request Interrupt source - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param updateSource: Config the Update source - * The parameter can be one of following values: - * @arg TMR_UPDATE_SOURCE_GLOBAL - * @arg TMR_UPDATE_SOURCE_REGULAR - * @retval None - */ -void TMR_ConfigUpdateRequest(TMR_T* tmr, TMR_UPDATE_SOURCE_T updateSource) -{ - if (updateSource != TMR_UPDATE_SOURCE_GLOBAL) - { - tmr->CTRL1_B.URSSEL = BIT_SET; - } - else - { - tmr->CTRL1_B.URSSEL = BIT_RESET; - } -} - -/*! - * @brief Enables Hall sensor interface. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval None - */ -void TMR_EnableHallSensor(TMR_T* tmr) -{ - tmr->CTRL2_B.TI1SEL = ENABLE; -} - -/*! - * @brief Disable Hall sensor interface. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval None - */ -void TMR_DisableHallSensor(TMR_T* tmr) -{ - tmr->CTRL2_B.TI1SEL = DISABLE; -} - -/*! - * @brief Config the Sing pulse Mode. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param singlePulseMode: specifies the Single Pulse Mode - * The parameter can be one of following values: - * @arg TMR_SPM_REPETITIVE - * @arg TMR_SPM_SINGLE - * @retval None - */ -void TMR_ConfigSinglePulseMode(TMR_T* tmr, TMR_SPM_T singlePulseMode) -{ - tmr->CTRL1_B.SPMEN = singlePulseMode; -} - -/*! - * @brief Selects the Trigger Output Mode. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param TRGOSource: specifies the Trigger Output source - * The parameter can be one of following values: - * @arg TMR_TRGO_SOURCE_RESET - * @arg TMR_TRGO_SOURCE_ENABLE - * @arg TMR_TRGO_SOURCE_UPDATE - * The under is not for TMR6 and TMR7 - * @arg TMR_TRGO_SOURCE_OC1 - * @arg TMR_TRGO_SOURCE_OC1REF - * @arg TMR_TRGO_SOURCE_OC2REF - * @arg TMR_TRGO_SOURCE_OC3REF - * @arg TMR_TRGO_SOURCE_OC4REF - * @retval None - */ -void TMR_SelectOutputTrigger(TMR_T* tmr, TMR_TRGO_SOURCE_T TRGOSource) -{ - tmr->CTRL2_B.MMSEL = TRGOSource; -} - -/*! - * @brief Selects the Slave Mode. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param slaveMode: specifies the Timer Slave Mode. - * The parameter can be one of following values: - * @arg TMR_SLAVE_MODE_RESET - * @arg TMR_SLAVE_MODE_GATED - * @arg TMR_SLAVE_MODE_TRIGGER - * @arg TMR_SLAVE_MODE_EXTERNAL1 - * @retval None - */ -void TMR_SelectSlaveMode(TMR_T* tmr, TMR_SLAVE_MODE_T slaveMode) -{ - tmr->SMCTRL_B.SMFSEL = slaveMode; -} - -/*! - * @brief Enable the Master Slave Mode - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval None - */ -void TMR_EnableMasterSlaveMode(TMR_T* tmr) -{ - tmr->SMCTRL_B.MSMEN = ENABLE; -} - -/*! - * @brief Disable the Master Slave Mode - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval None - */ -void TMR_DisableMasterSlaveMode(TMR_T* tmr) -{ - tmr->SMCTRL_B.MSMEN = DISABLE; -} - -/*! - * @brief Configs the Counter Register value - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param counter: Counter register new value - * - * @retval None - */ -void TMR_ConfigCounter(TMR_T* tmr, uint16_t counter) -{ - tmr->CNT = counter; -} - -/*! - * @brief Configs the AutoReload Register value - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param autoReload: autoReload register new value - * - * @retval None - */ -void TMR_ConfigAutoreload(TMR_T* tmr, uint16_t autoReload) -{ - tmr->AUTORLD = autoReload; -} - -/*! - * @brief Configs the Capture Compare1 Register value - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param compare1: specifies the Capture Compare1 value. - * - * @retval None - */ -void TMR_ConfigCompare1(TMR_T* tmr, uint16_t compare1) -{ - tmr->CC1 = compare1; -} - -/*! - * @brief Configs the Capture Compare2 Register value - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param compare2: specifies the Capture Compare1 value. - * - * @retval None - */ -void TMR_ConfigCompare2(TMR_T* tmr, uint16_t compare2) -{ - tmr->CC2 = compare2; -} - -/*! - * @brief Configs the Capture Compare3 Register value - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param compare3: specifies the Capture Compare1 value. - * - * @retval None - */ -void TMR_ConfigCompare3(TMR_T* tmr, uint16_t compare3) -{ - tmr->CC3 = compare3; -} - -/*! - * @brief Configs the Capture Compare4 Register value - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param compare4: specifies the Capture Compare1 value. - * - * @retval None - */ -void TMR_ConfigCompare4(TMR_T* tmr, uint16_t compare4) -{ - tmr->CC4 = compare4; -} - -/*! - * @brief Configs the TMRx Input Capture 1 prescaler. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param prescaler: specifies the Input Capture Channel1 Perscaler - * The parameter can be one of following values: - * @arg TMR_IC_PSC_1: no prescaler - * @arg TMR_IC_PSC_2: capture is done once every 2 events - * @arg TMR_IC_PSC_4: capture is done once every 4 events - * @arg TMR_IC_PSC_8: capture is done once every 8 events - * @retval None - */ -void TMR_ConfigIC1Prescal(TMR_T* tmr, TMR_IC_PSC_T prescaler) -{ - tmr->CCM1_CAPTURE_B.IC1PSC = BIT_RESET; - tmr->CCM1_CAPTURE_B.IC1PSC = prescaler; -} -/*! - * @brief Sets the TMRx Input Capture 2 prescaler. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param prescaler: specifies the Input Capture Channel2 Perscaler - * The parameter can be one of following values: - * @arg TMR_IC_PSC_1: no prescaler - * @arg TMR_IC_PSC_2: capture is done once every 2 events - * @arg TMR_IC_PSC_4: capture is done once every 4 events - * @arg TMR_IC_PSC_8: capture is done once every 8 events - * @retval None - */ -void TMR_ConfigIC2Prescal(TMR_T* tmr, TMR_IC_PSC_T prescaler) -{ - tmr->CCM1_CAPTURE_B.IC2PSC = BIT_RESET; - tmr->CCM1_CAPTURE_B.IC2PSC = prescaler; -} - -/*! - * @brief Configs the TMRx Input Capture 3 prescaler. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param prescaler: specifies the Input Capture Channel3 Perscaler - * The parameter can be one of following values: - * @arg TMR_IC_PSC_1: no prescaler - * @arg TMR_IC_PSC_2: capture is done once every 2 events - * @arg TMR_IC_PSC_4: capture is done once every 4 events - * @arg TMR_IC_PSC_8: capture is done once every 8 events - * @retval None - */ -void TMR_ConfigIC3Prescal(TMR_T* tmr, TMR_IC_PSC_T prescaler) -{ - tmr->CCM2_CAPTURE_B.IC3PSC = BIT_RESET; - tmr->CCM2_CAPTURE_B.IC3PSC = prescaler; -} - -/*! - * @brief Configs the TMRx Input Capture 4 prescaler. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param prescaler: specifies the Input Capture Channel4 Perscaler - * The parameter can be one of following values: - * @arg TMR_IC_PSC_1: no prescaler - * @arg TMR_IC_PSC_2: capture is done once every 2 events - * @arg TMR_IC_PSC_4: capture is done once every 4 events - * @arg TMR_IC_PSC_8: capture is done once every 8 events - * @retval None - */ -void TMR_ConfigIC4Prescal(TMR_T* tmr, TMR_IC_PSC_T prescaler) -{ - tmr->CCM2_CAPTURE_B.IC4PSC = BIT_RESET; - tmr->CCM2_CAPTURE_B.IC4PSC = prescaler; -} - -/*! - * @brief Configs the Clock Division value - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param clockDivision: specifies the clock division value. - * The parameter can be one of following values: - * @arg TMR_CLOCK_DIV_1: TDTS = Tck_tim - * @arg TMR_CLOCK_DIV_2: TDTS = 2*Tck_tim - * @arg TMR_CLOCK_DIV_4: TDTS = 4*Tck_tim - * @retval None - */ -void TMR_ConfigClockDivision(TMR_T* tmr, TMR_CLOCK_DIV_T clockDivision) -{ - tmr->CTRL1_B.CLKDIV = clockDivision; -} - -/*! - * @brief Read Input Capture 1 value. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval Capture Compare 1 Register value. - */ -uint16_t TMR_ReadCaputer1(TMR_T* tmr) -{ - return tmr->CC1; -} - -/*! - * @brief Read Input Capture 2 value. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval Capture Compare 2 Register value. - */ -uint16_t TMR_ReadCaputer2(TMR_T* tmr) -{ - return tmr->CC2; -} - -/*! - * @brief Read Input Capture 3 value. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval Capture Compare 3 Register value. - */ -uint16_t TMR_ReadCaputer3(TMR_T* tmr) -{ - return tmr->CC3; -} - -/*! - * @brief Read Input Capture 4 value. - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @retval Capture Compare 4 Register value. - */ -uint16_t TMR_ReadCaputer4(TMR_T* tmr) -{ - return tmr->CC4; -} - -/*! - * @brief Read the TMRx Counter value. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @retval Counter Register value. - */ -uint16_t TMR_ReadCounter(TMR_T* tmr) -{ - return tmr->CNT; -} - -/*! - * @brief Read the TMRx Prescaler value. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @retval Prescaler Register value. - */ -uint16_t TMR_ReadPrescaler(TMR_T* tmr) -{ - return tmr->PSC; -} - -/*! - * @brief Enable intterupts - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param interrupt: specifies the TMR interrupts sources - * The parameter can be any combination of following values: - * @arg TMR_INT_UPDATE: Timer update Interrupt source - * @arg TMR_INT_CC1: Timer Capture Compare 1 Interrupt source - * @arg TMR_INT_CC2: Timer Capture Compare 1 Interrupt source - * @arg TMR_INT_CC3: Timer Capture Compare 3 Interrupt source - * @arg TMR_INT_CC4: Timer Capture Compare 4 Interrupt source - * @arg TMR_INT_COM: Timer Commutation Interrupt source (Only for TMR1 and TMR8) - * @arg TMR_INT_TRG: Timer Trigger Interrupt source - * @arg TMR_INT_BRK: Timer Break Interrupt source (Only for TMR1 and TMR8) - * @retval None - * - * @note TMR6 and TMR7 can only generate an TMR_INT_UPDATE. - */ -void TMR_EnableInterrupt(TMR_T* tmr, uint16_t interrupt) -{ - tmr->DIEN |= interrupt; -} - -/*! - * @brief Disable intterupts - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param interrupt: specifies the TMR interrupts sources - * The parameter can be any combination of following values: - * @arg TMR_INT_UPDATE: Timer update Interrupt source - * @arg TMR_INT_CC1: Timer Capture Compare 1 Interrupt source - * @arg TMR_INT_CC2: Timer Capture Compare 1 Interrupt source - * @arg TMR_INT_CC3: Timer Capture Compare 3 Interrupt source - * @arg TMR_INT_CC4: Timer Capture Compare 4 Interrupt source - * @arg TMR_INT_COM: Timer Commutation Interrupt source (Only for TMR1 and TMR8) - * @arg TMR_INT_TRG: Timer Trigger Interrupt source - * @arg TMR_INT_BRK: Timer Break Interrupt source (Only for TMR1 and TMR8) - * @retval None - * - * @note TMR6 and TMR7 can only generate an TMR_INT_UPDATE. - */ -void TMR_DisableInterrupt(TMR_T* tmr, uint16_t interrupt) -{ - tmr->DIEN &= ~interrupt; -} - -/*! - * @brief Configures the TMRx event to be generate by software. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param eventSources: specifies the TMR event sources - * The parameter can be any combination of following values: - * @arg TMR_EVENT_UPDATE: Timer update Interrupt source - * @arg TMR_EVENT_CC1: Timer Capture Compare 1 Event source - * @arg TMR_EVENT_CC2: Timer Capture Compare 1 Event source - * @arg TMR_EVENT_CC3: Timer Capture Compare 3 Event source - * @arg TMR_EVENT_CC4: Timer Capture Compare 4 Event source - * @arg TMR_EVENT_COM: Timer Commutation Event source (Only for TMR1 and TMR8) - * @arg TMR_EVENT_TRG: Timer Trigger Event source - * @arg TMR_EVENT_BRK: Timer Break Event source (Only for TMR1 and TMR8) - * @retval None - * - * @note TMR6 and TMR7 can only generate an TMR_EVENT_UPDATE. - */ -void TMR_GenerateEvent(TMR_T* tmr, uint16_t eventSources) -{ - tmr->CEG = eventSources; -} - -/*! - * @brief Check whether the flag is set or reset - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param interrupt: specifies the TMR interrupts sources - * The parameter can be any combination of following values: - * @arg TMR_FLAG_UPDATE: Timer update Flag - * @arg TMR_FLAG_CC1: Timer Capture Compare 1 Flag - * @arg TMR_FLAG_CC2: Timer Capture Compare 2 Flag - * @arg TMR_FLAG_CC3: Timer Capture Compare 3 Flag - * @arg TMR_FLAG_CC4: Timer Capture Compare 4 Flag - * @arg TMR_FLAG_COM: Timer Commutation Flag (Only for TMR1 and TMR8) - * @arg TMR_FLAG_TRG: Timer Trigger Flag - * @arg TMR_FLAG_BRK: Timer Break Flag (Only for TMR1 and TMR8) - * @arg TMR_FLAG_CC1RC: Timer Capture Compare 1 Repetition Flag - * @arg TMR_FLAG_CC2RC: Timer Capture Compare 2 Repetition Flag - * @arg TMR_FLAG_CC3RC: Timer Capture Compare 3 Repetition Flag - * @arg TMR_FLAG_CC4RC: Timer Capture Compare 4 Repetition Flag - * @retval None - * - * @note TMR6 and TMR7 can only generate an TMR_FLAG_UPDATE. - */ -uint16_t TMR_ReadStatusFlag(TMR_T* tmr, TMR_FLAG_T flag) -{ - return (tmr->STS & flag) ? SET : RESET; -} - -/*! - * @brief Clears the TMR's pending flags. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param interrupt: specifies the TMR interrupts sources - * The parameter can be any combination of following values: - * @arg TMR_FLAG_UPDATE: Timer update Flag - * @arg TMR_FLAG_CC1: Timer Capture Compare 1 Flag - * @arg TMR_FLAG_CC2: Timer Capture Compare 2 Flag - * @arg TMR_FLAG_CC3: Timer Capture Compare 3 Flag - * @arg TMR_FLAG_CC4: Timer Capture Compare 4 Flag - * @arg TMR_FLAG_COM: Timer Commutation Flag (Only for TMR1 and TMR8) - * @arg TMR_FLAG_TRG: Timer Trigger Flag - * @arg TMR_FLAG_BRK: Timer Break Flag (Only for TMR1 and TMR8) - * @arg TMR_FLAG_CC1RC: Timer Capture Compare 1 Repetition Flag - * @arg TMR_FLAG_CC2RC: Timer Capture Compare 2 Repetition Flag - * @arg TMR_FLAG_CC3RC: Timer Capture Compare 3 Repetition Flag - * @arg TMR_FLAG_CC4RC: Timer Capture Compare 4 Repetition Flag - * @retval None - * - * @note TMR6 and TMR7 can only generate an TMR_FLAG_UPDATE. - */ -void TMR_ClearStatusFlag(TMR_T* tmr, uint16_t flag) -{ - tmr->STS = ~flag; -} - -/*! - * @brief Check whether the ITflag is set or reset - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param interrupt: specifies the TMR interrupts sources - * The parameter can be one of following values: - * @arg TMR_INT_UPDATE: Timer update Interrupt source - * @arg TMR_INT_CC1: Timer Capture Compare 1 Interrupt source - * @arg TMR_INT_CC2: Timer Capture Compare 1 Interrupt source - * @arg TMR_INT_CC3: Timer Capture Compare 3 Interrupt source - * @arg TMR_INT_CC4: Timer Capture Compare 4 Interrupt source - * @arg TMR_INT_COM: Timer Commutation Interrupt source (Only for TMR1 and TMR8) - * @arg TMR_INT_TRG: Timer Trigger Interrupt source - * @arg TMR_INT_BRK: Timer Break Interrupt source (Only for TMR1 and TMR8) - * @retval None - * - * @note TMR6 and TMR7 can only generate an TMR_INT_UPDATE. - */ -uint16_t TMR_ReadIntFlag(TMR_T* tmr, TMR_INT_T flag) -{ - if (((tmr->STS & flag) != RESET ) && ((tmr->DIEN & flag) != RESET)) - { - return SET; - } - else - { - return RESET; - } -} - -/*! - * @brief Clears the TMR's interrupt pending bits. - * - * @param tmr: The TMRx can be 1 to 8 - * - * @param interrupt: specifies the TMR interrupts sources - * The parameter can be any combination following values: - * @arg TMR_INT_UPDATE: Timer update Interrupt source - * @arg TMR_INT_CC1: Timer Capture Compare 1 Interrupt source - * @arg TMR_INT_CC2: Timer Capture Compare 1 Interrupt source - * @arg TMR_INT_CC3: Timer Capture Compare 3 Interrupt source - * @arg TMR_INT_CC4: Timer Capture Compare 4 Interrupt source - * @arg TMR_INT_COM: Timer Commutation Interrupt source (Only for TMR1 and TMR8) - * @arg TMR_INT_TRG: Timer Trigger Interrupt source - * @arg TMR_INT_BRK: Timer Break Interrupt source (Only for TMR1 and TMR8) - * @retval None - * - * @note TMR6 and TMR7 can only generate an TMR_INT_UPDATE. - */ -void TMR_ClearIntFlag(TMR_T* tmr, uint16_t flag) -{ - tmr->STS = ~flag; -} - -/*! - * @brief Configure the TI1 as Input - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param ICpolarity: pointer to a TMR_IC_POLARITY_T - * - * @param ICselection: pointer to a TMR_IC_SELECTION_T - * - * @param ICfilter: This parameter must be a value between 0x00 and 0x0F - * - * @retval None - */ -static void TI1Config(TMR_T* tmr, uint16_t ICpolarity, uint16_t ICselection, uint16_t ICfilter) -{ - uint16_t tmpchctrl = 0; - - tmr->CCEN_B.CC1EN = BIT_RESET; - - tmr->CCM1_CAPTURE_B.CC1SEL = BIT_RESET; - tmr->CCM1_CAPTURE_B.IC1F = BIT_RESET; - tmr->CCM1_CAPTURE_B.CC1SEL = ICselection; - tmr->CCM1_CAPTURE_B.IC1F = ICfilter; - - if ((tmr == TMR1) || (tmr == TMR8) || (tmr == TMR2) || (tmr == TMR3) || - (tmr == TMR4) || (tmr == TMR5)) - { - tmr->CCEN_B.CC1POL = BIT_RESET; - tmr->CCEN_B.CC1EN = BIT_SET; - tmpchctrl = tmr->CCEN; - tmpchctrl |= ICpolarity; - tmr->CCEN = tmpchctrl; - } - else - { - tmr->CCEN_B.CC1POL = BIT_RESET; - tmr->CCEN_B.CC1NPOL = BIT_RESET; - tmr->CCEN_B.CC1EN = BIT_SET; - tmpchctrl = tmr->CCEN; - tmpchctrl |= ICpolarity; - tmr->CCEN = tmpchctrl; - } -} - -/*! - * @brief Configure the TI2 as Input - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param ICpolarity: pointer to a TMR_IC_POLARITY_T - * - * @param ICselection: pointer to a TMR_IC_SELECTION_T - * - * @param ICfilter: This parameter must be a value between 0x00 and 0x0F - * - * @retval None - */ -static void TI2Config(TMR_T* tmr, uint16_t ICpolarity, uint16_t ICselection, uint16_t ICfilter) -{ - uint16_t tmpchctrl = 0; - - tmr->CCEN_B.CC2EN = BIT_RESET; - - tmr->CCM1_CAPTURE_B.CC2SEL = BIT_RESET; - tmr->CCM1_CAPTURE_B.IC2F = BIT_RESET; - tmr->CCM1_CAPTURE_B.CC2SEL = ICselection; - tmr->CCM1_CAPTURE_B.IC2F = ICfilter; - - if ((tmr == TMR1) || (tmr == TMR8) || (tmr == TMR2) || (tmr == TMR3) || - (tmr == TMR4) || (tmr == TMR5)) - { - tmr->CCEN_B.CC2POL = BIT_RESET; - tmr->CCEN_B.CC2EN = BIT_SET; - tmpchctrl = tmr->CCEN; - tmpchctrl |= (ICpolarity << 4); - tmr->CCEN = tmpchctrl; - } - else - { - tmr->CCEN_B.CC2POL = BIT_RESET; - tmr->CCEN_B.CC2NPOL = BIT_RESET; - tmr->CCEN_B.CC2EN = BIT_SET; - tmpchctrl = tmr->CCEN; - tmpchctrl |= (ICpolarity << 4); - tmr->CCEN = tmpchctrl; - } -} - -/*! - * @brief Configure the TI3 as Input - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param ICpolarity: pointer to a TMR_IC_POLARITY_T - * - * @param ICselection: pointer to a TMR_IC_SELECTION_T - * - * @param ICfilter: This parameter must be a value between 0x00 and 0x0F - * - * @retval None - */ -static void TI3Config(TMR_T* tmr, uint16_t ICpolarity, uint16_t ICselection, uint16_t ICfilter) -{ - uint16_t tmpchctrl = 0; - - tmr->CCEN_B.CC3EN = BIT_RESET; - - tmr->CCM2_CAPTURE_B.CC3SEL = BIT_RESET; - tmr->CCM2_CAPTURE_B.IC3F = BIT_RESET; - tmr->CCM2_CAPTURE_B.CC3SEL = ICselection; - tmr->CCM2_CAPTURE_B.IC3F = ICfilter; - - if ((tmr == TMR1) || (tmr == TMR8) || (tmr == TMR2) || (tmr == TMR3) || - (tmr == TMR4) || (tmr == TMR5)) - { - tmr->CCEN_B.CC3POL = BIT_RESET; - tmr->CCEN_B.CC3EN = BIT_SET; - tmpchctrl = tmr->CCEN; - tmpchctrl |= (ICpolarity << 8); - tmr->CCEN = tmpchctrl; - } - else - { - tmr->CCEN_B.CC3POL = BIT_RESET; - tmr->CCEN_B.CC3NPOL = BIT_RESET; - tmr->CCEN_B.CC3EN = BIT_SET; - tmpchctrl = tmr->CCEN; - tmpchctrl |= (ICpolarity << 8); - tmr->CCEN = tmpchctrl; - } -} - -/*! - * @brief Configure the TI4 as Input - * - * @param tmr: The TMRx can be 1 to 8 except 6 and 7 - * - * @param ICpolarity: pointer to a TMR_IC_POLARITY_T - * - * @param ICselection: pointer to a TMR_IC_SELECTION_T - * - * @param ICfilter: This parameter must be a value between 0x00 and 0x0F - * - * @retval None - */ -static void TI4Config(TMR_T* tmr, uint16_t ICpolarity, uint16_t ICselection, uint16_t ICfilter) -{ - uint16_t tmpchctrl = 0; - - tmr->CCEN_B.CC4EN = BIT_RESET; - - tmr->CCM2_CAPTURE_B.CC4SEL = BIT_RESET; - tmr->CCM2_CAPTURE_B.IC4F = BIT_RESET; - tmr->CCM2_CAPTURE_B.CC4SEL = ICselection; - tmr->CCM2_CAPTURE_B.IC4F = ICfilter; - - tmr->CCEN_B.CC4POL = BIT_RESET; - tmr->CCEN_B.CC4EN = BIT_SET; - tmpchctrl = tmr->CCEN; - tmpchctrl |= (ICpolarity << 12); - tmr->CCEN = tmpchctrl; -} - -/**@} end of group TMR_Fuctions*/ -/**@} end of group TMR_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_usart.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_usart.c deleted file mode 100644 index e6a5487..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_usart.c +++ /dev/null @@ -1,831 +0,0 @@ -/*! - * @file apm32f10x_usart.c - * - * @brief This file provides all the USART firmware functions - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_usart.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup USART_Driver USART Driver - @{ -*/ - -/** @addtogroup USART_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset usart peripheral registers to their default reset values - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_Reset(USART_T* usart) -{ - if (USART1 == usart) - { - RCM_EnableAPB2PeriphReset(RCM_APB2_PERIPH_USART1); - RCM_DisableAPB2PeriphReset(RCM_APB2_PERIPH_USART1); - } - else if (USART2 == usart) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_USART2); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_USART2); - } - else if (USART3 == usart) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_USART3); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_USART3); - } - else if (UART4 == usart) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_UART4); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_UART4); - } - else if (UART5 == usart) - { - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_UART5); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_UART5); - } -} - -/*! - * @brief Config the USART peripheral according to the specified parameters in the usartConfig - * - * @param uart: Select the USART or the UART peripheral - * - * @param usartConfig: pointer to a USART_Config_T structure - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_Config(USART_T* uart, USART_Config_T* usartConfig) -{ - uint32_t temp, fCLK, intDiv, fractionalDiv; - - temp = uart->CTRL1; - temp &= 0xE9F3; - temp |= (uint32_t)usartConfig->mode | \ - (uint32_t)usartConfig->parity | \ - (uint32_t)usartConfig->wordLength; - uart->CTRL1 = temp; - - temp = uart->CTRL2; - temp &= 0xCFFF; - temp |= usartConfig->stopBits; - uart->CTRL2 = temp; - - temp = uart->CTRL3; - temp &= 0xFCFF; - temp |= (uint32_t)usartConfig->hardwareFlow; - uart->CTRL3 = temp; - - if (uart == USART1) - { - RCM_ReadPCLKFreq(NULL, &fCLK); - } - else - { - RCM_ReadPCLKFreq(&fCLK, NULL); - } - - intDiv = ((25 * fCLK) / (4 * (usartConfig->baudRate))); - temp = (intDiv / 100) << 4; - fractionalDiv = intDiv - (100 * (temp >> 4)); - temp |= ((((fractionalDiv * 16) + 50) / 100)) & ((uint8_t)0x0F); - - uart->BR = temp; -} - -/*! - * @brief Fills each USART_InitStruct member with its default value - * - * @param usartConfig: pointer to a USART_Config_T structure which will be initialized - * - * @retval None - */ -void USART_ConfigStructInit(USART_Config_T* usartConfig) -{ - usartConfig->baudRate = 9600; - usartConfig->wordLength = USART_WORD_LEN_8B; - usartConfig->stopBits = USART_STOP_BIT_1; - usartConfig->parity = USART_PARITY_NONE ; - usartConfig->mode = USART_MODE_TX_RX; - usartConfig->hardwareFlow = USART_HARDWARE_FLOW_NONE; -} - -/*! - * @brief Configuration communication clock - * - * @param usart: Select the USART or the UART peripheral - * - * @param clockConfig: Pointer to a USART_clockConfig_T structure - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3 - */ -void USART_ConfigClock(USART_T* usart, USART_ClockConfig_T* clockConfig) -{ - usart->CTRL2_B.CLKEN = clockConfig->clock; - usart->CTRL2_B.CPHA = clockConfig->phase; - usart->CTRL2_B.CPOL = clockConfig->polarity; - usart->CTRL2_B.LBCPOEN = clockConfig->lastBit; -} - -/*! - * @brief Fills each clockConfig member with its default value - * - * @param clockConfig: Pointer to a USART_clockConfig_T structure - * - * @retval None - * - */ -void USART_ConfigClockStructInit(USART_ClockConfig_T* clockConfig) -{ - clockConfig->clock = USART_CLKEN_DISABLE; - clockConfig->phase = USART_CLKPHA_1EDGE; - clockConfig->polarity = USART_CLKPOL_LOW; - clockConfig->lastBit = USART_LBCP_DISABLE; -} - -/*! - * @brief Enables the specified USART peripheral - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_Enable(USART_T* usart) -{ - usart->CTRL1_B.UEN = BIT_SET; -} - -/*! - * @brief Disable the specified USART peripheral - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_Disable(USART_T* usart) -{ - usart->CTRL1_B.UEN = BIT_RESET; -} - -/*! - * @brief Enables the USART DMA interface - * - * @param usart: Select the USART or the UART peripheral - * - * @param dmaReq: Specifies the DMA request - * This parameter can be one of the following values: - * @arg USART_DMA_TX: USART DMA receive request - * @arg USART_DMA_RX: USART DMA transmit request - * @arg USART_DMA_TX_RX: USART DMA transmit/receive request - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_EnableDMA(USART_T* usart, USART_DMA_T dmaReq) -{ - usart->CTRL3 |= dmaReq; -} - -/*! - * @brief Disable the USART DMA interface - * - * @param usart: Select the USART or the UART peripheral - * - * @param dmaReq: Specifies the DMA request - * This parameter can be one of the following values: - * @arg USART_DMA_TX: USART DMA receive request - * @arg USART_DMA_RX: USART DMA transmit request - * @arg USART_DMA_TX_RX: USART DMA transmit/receive request - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_DisableDMA(USART_T* usart, USART_DMA_T dmaReq) -{ - usart->CTRL3 &= (uint32_t)~dmaReq; -} - -/*! - * @brief Configures the address of the USART node - * - * @param usart: Select the USART or the UART peripheral - * - * @param address: Indicates the address of the USART node - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_Address(USART_T* usart, uint8_t address) -{ - usart->CTRL2_B.ADDR = address; -} - -/*! - * @brief Selects the USART WakeUp method. - * - * @param usart: Select the USART or the UART peripheral - * - * @param wakeup: Specifies the selected USART auto baud rate method - * This parameter can be one of the following values: - * @arg USART_WAKEUP_IDLE_LINE: WakeUp by an idle line detection - * @arg USART_WAKEUP_ADDRESS_MARK: WakeUp by an address mark - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_ConfigWakeUp(USART_T* usart, USART_WAKEUP_T wakeup) -{ - usart->CTRL1_B.WUPMCFG = wakeup; -} - -/*! - * @brief Enable USART Receiver in mute mode - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_EnableMuteMode(USART_T* usart) -{ - usart->CTRL1_B.RXMUTEEN = BIT_SET; -} - -/*! - * @brief Disable USART Receiver in active mode - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_DisableMuteMode(USART_T* usart) -{ - usart->CTRL1_B.RXMUTEEN = BIT_RESET; -} - -/*! - * @brief Sets the USART LIN Break detection length - * - * @param usart: Select the USART or the UART peripheral - * - * @param length: Specifies the LIN break detection length - * This parameter can be one of the following values: - * @arg USART_LBDL_10B: 10-bit break detection - * @arg USART_LBDL_10B: 11-bit break detection - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_ConfigLINBreakDetectLength(USART_T* usart, USART_LBDL_T length) -{ - usart->CTRL2_B.LBDLCFG = length; -} - -/*! - * @brief Enables the USART LIN MODE - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_EnableLIN(USART_T* usart) -{ - usart->CTRL2_B.LINMEN = BIT_SET; -} - -/*! - * @brief Disable the USART LIN MODE - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_DisableLIN(USART_T* usart) -{ - usart->CTRL2_B.LINMEN = BIT_RESET; -} - -/*! - * @brief Transmitter Enable - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_EnableTx(USART_T* usart) -{ - usart->CTRL1_B.TXEN = BIT_SET; -} - -/*! - * @brief Transmitter Disable - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_DisableTx(USART_T* usart) -{ - usart->CTRL1_B.TXEN = BIT_RESET; -} - -/*! - * @brief Receiver enable - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_EnableRx(USART_T* usart) -{ - usart->CTRL1_B.RXEN = BIT_SET; -} - -/*! - * @brief Receiver disable - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_DisableRx(USART_T* usart) -{ - usart->CTRL1_B.RXEN = BIT_RESET; -} - -/*! - * @brief Transmits single data - * - * @param usart: Select the USART or the UART peripheral - * - * @param data: the data to transmit - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_TxData(USART_T* usart, uint16_t data) -{ - usart->DATA_B.DATA = data; -} - -/*! - * @brief Returns the most recent received data - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -uint16_t USART_RxData(USART_T* usart) -{ - return (uint16_t)(usart->DATA_B.DATA); -} - -/*! - * @brief Transmits break characters - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_TxBreak(USART_T* usart) -{ - usart->CTRL1_B.TXBF = BIT_SET; -} - -/*! - * @brief Sets the specified USART guard time - * - * @param usart: Select the USART or the UART peripheral - * - * @param guardTime: Specifies the guard time - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3 - */ -void USART_ConfigGuardTime(USART_T* usart, uint8_t guardTime) -{ - usart->GTPSC_B.GRDT = guardTime; -} - -/*! - * @brief Sets the system clock divider number - * - * @param usart: Select the USART or the UART peripheral - * - * @param div: specifies the divider number - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3 - */ -void USART_ConfigPrescaler(USART_T* usart, uint8_t div) -{ - usart->GTPSC_B.PSC = div; -} - -/*! - * @brief Enables the USART Smart Card mode - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The Smart Card mode is not available for UART4 and UART5 - */ -void USART_EnableSmartCard(USART_T* usart) -{ - usart->CTRL3_B.SCEN = BIT_SET; -} - -/*! - * @brief Disable the USART Smart Card mode - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The Smart Card mode is not available for UART4 and UART5 - */ -void USART_DisableSmartCard(USART_T* usart) -{ - usart->CTRL3_B.SCEN = BIT_RESET; -} - -/*! - * @brief Enables NACK transmission - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The Smart Card mode is not available for UART4 and UART5 - */ -void USART_EnableSmartCardNACK(USART_T* usart) -{ - usart->CTRL3_B.SCNACKEN = BIT_SET; -} - -/*! - * @brief Disable NACK transmission - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The Smart Card mode is not available for UART4 and UART5 - */ -void USART_DisableSmartCardNACK(USART_T* usart) -{ - usart->CTRL3_B.SCNACKEN = BIT_RESET; -} - -/*! - * @brief Enables USART Half Duplex communication - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_EnableHalfDuplex(USART_T* usart) -{ - usart->CTRL3_B.HDEN = BIT_SET; -} - -/*! - * @brief Disable USART Half Duplex communication - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_DisableHalfDuplex(USART_T* usart) -{ - usart->CTRL3_B.HDEN = BIT_RESET; -} - -/*! - * @brief Configures the USART's IrDA interface - * - * @param usart: Select the USART or the UART peripheral - * - * @param IrDAMode: Specifies the IrDA mode - * This parameter can be one of the following values: - * @arg USART_IRDALP_NORMAL: Normal - * @arg USART_IRDALP_LOWPOWER: Low-Power - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_ConfigIrDA(USART_T* usart, USART_IRDALP_T IrDAMode) -{ - usart->CTRL3_B.IRLPEN = IrDAMode; -} - -/*! - * @brief Enables the USART's IrDA interface - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_EnableIrDA(USART_T* usart) -{ - usart->CTRL3_B.IREN = BIT_SET; -} - -/*! - * @brief Disable the USART's IrDA interface - * - * @param usart: Select the USART or the UART peripheral - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_DisableIrDA(USART_T* usart) -{ - usart->CTRL3_B.IREN = BIT_RESET; -} - -/*! - * @brief Enable the specified USART interrupts - * - * @param usart: Select the USART or the UART peripheral - * - * @param interrupt: Specifies the USART interrupts sources - * The parameter can be one of following values: - * @arg USART_INT_PE: Parity error interrupt - * @arg USART_INT_TXBE: Tansmit data buffer empty interrupt - * @arg USART_INT_TXC: Transmission complete interrupt - * @arg USART_INT_RXBNE: Receive data buffer not empty interrupt - * @arg USART_INT_IDLE: Idle line detection interrupt - * @arg USART_INT_LBD: LIN break detection interrupt - * @arg USART_INT_CTS: CTS change interrupt - * @arg USART_INT_ERR: Error interrupt(Frame error, noise error, overrun error) - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_EnableInterrupt(USART_T* usart, USART_INT_T interrupt) -{ - uint32_t temp; - - temp = (uint32_t)(interrupt & 0xffff); - - if (interrupt & 0x10000) - { - usart->CTRL1 |= temp; - } - - if (interrupt & 0x20000) - { - usart->CTRL2 |= temp; - } - - if (interrupt & 0x40000) - { - usart->CTRL3 |= temp; - } -} - -/*! - * @brief Disables the specified USART interrupts - * - * @param usart: Select the USART or the UART peripheral - * - * @param interrupt: Specifies the USART interrupts sources - * The parameter can be one of following values: - * @arg USART_INT_PE: Parity error interrupt - * @arg USART_INT_TXBE: Tansmit data buffer empty interrupt - * @arg USART_INT_TXC: Transmission complete interrupt - * @arg USART_INT_RXBNE: Receive data buffer not empty interrupt - * @arg USART_INT_IDLE: Idle line detection interrupt - * @arg USART_INT_LBD: LIN break detection interrupt - * @arg USART_INT_CTS: CTS change interrupt - * @arg USART_INT_ERR: Error interrupt(Frame error, noise error, overrun error) - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_DisableInterrupt(USART_T* usart, USART_INT_T interrupt) -{ - uint32_t temp; - - temp = (uint32_t)~(interrupt & 0xffff); - - if (interrupt & 0x10000) - { - usart->CTRL1 &= temp; - } - - if (interrupt & 0x20000) - { - usart->CTRL2 &= temp; - } - - if (interrupt & 0x40000) - { - usart->CTRL3 &= temp; - } -} - -/*! - * @brief Read the specified USART flag - * - * @param usart: Select the USART or the UART peripheral - * - * @param flag: Specifies the flag to check - * The parameter can be one of following values: - * @arg USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5) - * @arg USART_FLAG_LBD: LIN Break detection flag - * @arg USART_FLAG_TXBE: Transmit data buffer empty flag - * @arg USART_FLAG_TXC: Transmission Complete flag - * @arg USART_FLAG_RXBNE: Receive data buffer not empty flag - * @arg USART_FLAG_IDLE: Idle Line detection flag - * @arg USART_FLAG_OVRE: OverRun Error flag - * @arg USART_FLAG_NE: Noise Error flag - * @arg USART_FLAG_FE: Framing Error flag - * @arg USART_FLAG_PE: Parity Error flag - * - * @retval The new state of flag (SET or RESET) - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -uint8_t USART_ReadStatusFlag(USART_T* usart, USART_FLAG_T flag) -{ - return (usart->STS & flag) ? SET : RESET; -} - -/*! - * @brief Clears the USARTx's pending flags - * - * @param usart: Select the USART or the UART peripheral - * - * @param flag: Specifies the flag to clear - * The parameter can be one of following values: - * @arg USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5) - * @arg USART_FLAG_LBD: LIN Break detection flag - * @arg USART_FLAG_TXC: Transmission Complete flag - * @arg USART_FLAG_RXBNE: Receive data buffer not empty flag - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_ClearStatusFlag(USART_T* usart, USART_FLAG_T flag) -{ - usart->STS &= (uint32_t)~flag; -} - -/*! - * @brief Read the specified USART interrupt flag - * - * @param usart: Select the USART or the UART peripheral - * - * @param flag: Specifies the USART interrupt source to check - * The parameter can be one of following values: - * @arg USART_INT_TXBE: Tansmit data buffer empty interrupt - * @arg USART_INT_TXC: Transmission complete interrupt - * @arg USART_INT_RXBNE: Receive data buffer not empty interrupt - * @arg USART_INT_IDLE: Idle line detection interrupt - * @arg USART_INT_LBD: LIN break detection interrupt - * @arg USART_INT_CTS: CTS change interrupt - * @arg USART_INT_OVRE: OverRun Error interruptpt - * @arg USART_INT_NE: Noise Error interrupt - * @arg USART_INT_FE: Framing Error interrupt - * @arg USART_INT_PE: Parity error interrupt - * - * @retval The new state of flag (SET or RESET) - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -uint8_t USART_ReadIntFlag(USART_T* usart, USART_INT_T flag) -{ - uint32_t itFlag, srFlag; - - if (flag & 0x10000) - { - itFlag = usart->CTRL1 & flag & 0xffff; - } - else if (flag & 0x20000) - { - itFlag = usart->CTRL2 & flag & 0xffff; - } - else - { - itFlag = usart->CTRL3 & flag & 0xffff; - } - - srFlag = flag >> 24; - srFlag = (uint32_t)(1 << srFlag); - srFlag = usart->STS & srFlag; - - if (srFlag && itFlag) - { - return SET; - } - - return RESET; -} - -/*! - * @brief Clears the USART interrupt pending bits - * - * @param usart: Select the USART or the UART peripheral - * - * @param flag: Specifies the interrupt pending bit to clear - * The parameter can be one of following values: - * @arg USART_INT_RXBNE: Receive data buffer not empty interrupt - * @arg USART_INT_TXC: Transmission complete interrupt - * @arg USART_INT_LBD: LIN break detection interrupt - * @arg USART_INT_CTS: CTS change interrupt - * - * @retval None - * - * @note The usart can be USART1, USART2, USART3, UART4 and UART5 - */ -void USART_ClearIntFlag(USART_T* usart, USART_INT_T flag) -{ - uint32_t srFlag; - - srFlag = flag >> 24; - srFlag = (uint32_t)(1 << srFlag); - - usart->STS &= (uint32_t)~srFlag; -} - -/**@} end of group USART_Fuctions*/ -/**@} end of group USART_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_wwdt.c b/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_wwdt.c deleted file mode 100644 index dd915c0..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/APM32F10x_StdPeriphDriver/src/apm32f10x_wwdt.c +++ /dev/null @@ -1,159 +0,0 @@ -/*! - * @file apm32f10x_wwdt.c - * - * @brief This file contains all the functions for the WWDT peripheral - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x_wwdt.h" -#include "apm32f10x_rcm.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup WWDT_Driver WWDT Driver - @{ -*/ - -/** @addtogroup WWDT_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Reset the WWDT peripheral registers - * - * @param None - * - * @retval None - */ -void WWDT_Reset(void) -{ - RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_WWDT); - RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_WWDT); -} - -/*! - * @brief Config the WWDT Timebase - * - * @param timebase: WWDT Prescaler - * The parameter can be one of following values: - * @arg WWDT_TIME_BASE_1: WWDT counter clock = (PCLK1/4096)/1 - * @arg WWDT_TIME_BASE_2: WWDT counter clock = (PCLK1/4096)/2 - * @arg WWDT_TIME_BASE_4: WWDT counter clock = (PCLK1/4096)/4 - * @arg WWDT_TIME_BASE_8: WWDT counter clock = (PCLK1/4096)/8 - * - * @retval None - */ -void WWDT_ConfigTimebase(WWDT_TIME_BASE_T timeBase) -{ - __IO uint32_t reg; - - reg = WWDT->CFG & 0xFFFFFE7F; - reg |= timeBase; - WWDT->CFG = reg; -} - -/*! - * @brief Config the WWDT Window data - * - * @param windowdata: window data which compare with the downcounter - * - * @retval None - * - * @note The windowdata must be lower than 0x80 - */ -void WWDT_ConfigWindowData(uint8_t windowData) -{ - __IO uint32_t reg; - - reg = WWDT->CFG & 0xFFFFFF80; - reg |= windowData & 0x7F; - WWDT->CFG = reg; -} - -/*! - * @brief Config the WWDT counter value - * - * @param counter: Specifies the watchdog counter value - * - * @retval None - * - * @note The counter between 0x40 and 0x7F - */ -void WWDT_ConfigCounter(uint8_t counter) -{ - WWDT->CTRL = counter & 0x7F; -} - -/*! - * @brief Enable the WWDT Early Wakeup interrupt - * - * @param None - * - * @retval None - */ -void WWDT_EnableEWI(void) -{ - WWDT->CFG_B.EWIEN = SET; -} - -/*! - * @brief Enable WWDT and set the counter value - * - * @param counter: the window watchdog counter value - * - * @retval None - * - * @note The counter between 0x40 and 0x7F - */ -void WWDT_Enable(uint8_t counter) -{ - WWDT->CTRL = counter | 0x00000080; -} - -/*! - * @brief Read the Early Wakeup interrupt flag - * - * @param None - * - * @retval the state of the Early Wakeup interrupt flagte - */ -uint8_t WWDT_ReadFlag(void) -{ - return (uint8_t) (WWDT->STS); -} - -/*! - * @brief Clear the Early Wakeup interrupt flag - * - * @param None - * - * @retval None - */ -void WWDT_ClearFlag(void) -{ - WWDT->STS_B.EWIFLG = RESET; -} - -/**@} end of group WWDT_Fuctions*/ -/**@} end of group WWDT_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/LICENSE.txt b/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/LICENSE.txt deleted file mode 100644 index f0cd2d9..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/LICENSE.txt +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armcc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armcc.h deleted file mode 100644 index a19425d..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armcc.h +++ /dev/null @@ -1,894 +0,0 @@ -/**************************************************************************//** - * @file cmsis_armcc.h - * @brief CMSIS compiler ARMCC (Arm Compiler 5) header file - * @version V5.1.0 - * @date 08. May 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - -/* CMSIS compiler control architecture macros */ -#if ((defined (__TARGET_ARCH_6_M ) && (__TARGET_ARCH_6_M == 1)) || \ - (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M == 1)) ) - #define __ARM_ARCH_6M__ 1 -#endif - -#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M == 1)) - #define __ARM_ARCH_7M__ 1 -#endif - -#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1)) - #define __ARM_ARCH_7EM__ 1 -#endif - - /* __ARM_ARCH_8M_BASE__ not applicable */ - /* __ARM_ARCH_8M_MAIN__ not applicable */ - -/* CMSIS compiler control DSP macros */ -#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - #define __ARM_FEATURE_DSP 1 -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE static __forceinline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __declspec(noreturn) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed)) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT __packed struct -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION __packed union -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x))) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr))) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr))) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __memory_changed() -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START -#define __PROGRAM_START __main -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute((used, section("RESET"))) -#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. - */ -/* intrinsic void __enable_irq(); */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* 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 ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -/** - \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)1U); -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - - -/** - \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 ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__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 ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - register uint32_t __regfpscr __ASM("fpscr"); - __regfpscr = (fpscr); -#else - (void)fpscr; -#endif -} - - -/*@} 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 unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV __rev - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \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 (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#ifndef __NO_EMBEDDED_ASM -__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_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] op1 Value to rotate - \param [in] op2 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 ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - #define __RBIT __rbit -#else -__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) -{ - uint32_t result; - uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ - - result = value; /* r will be reversed bits of v; first get LSB of v */ - for (value >>= 1U; value != 0U; 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 ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -/** - \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) - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - -/** - \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 - */ -__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - -/**@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -#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 /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ -/**@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCC_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armclang.h b/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armclang.h deleted file mode 100644 index ef91993..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armclang.h +++ /dev/null @@ -1,1444 +0,0 @@ -/**************************************************************************//** - * @file cmsis_armclang.h - * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V5.2.0 - * @date 08. May 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ - -#ifndef __CMSIS_ARMCLANG_H -#define __CMSIS_ARMCLANG_H - -#pragma clang system_header /* treat file as system include file */ - -#ifndef __ARM_COMPAT_H -#include /* Compatibility header for Arm Compiler 5 intrinsics */ -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __ASM volatile("":::"memory") -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START -#define __PROGRAM_START __main -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute((used, section("RESET"))) -#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. - */ -/* intrinsic void __enable_irq(); see arm_compat.h */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __disable_irq(); see arm_compat.h */ - - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \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 /* see arm_compat.h */ - - -/** - \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 /* see arm_compat.h */ - - -/** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)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 - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) -#endif - - -/*@} 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_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_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 unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV(value) __builtin_bswap32(value) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV16(value) __ROR(__REV(value), 16) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - 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 - */ -#define __RBIT __builtin_arm_rbit - -/** - \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 - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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 - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - -/** - \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 - - -/** - \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 - - -/** - \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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \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 - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/**@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -#define __SADD8 __builtin_arm_sadd8 -#define __QADD8 __builtin_arm_qadd8 -#define __SHADD8 __builtin_arm_shadd8 -#define __UADD8 __builtin_arm_uadd8 -#define __UQADD8 __builtin_arm_uqadd8 -#define __UHADD8 __builtin_arm_uhadd8 -#define __SSUB8 __builtin_arm_ssub8 -#define __QSUB8 __builtin_arm_qsub8 -#define __SHSUB8 __builtin_arm_shsub8 -#define __USUB8 __builtin_arm_usub8 -#define __UQSUB8 __builtin_arm_uqsub8 -#define __UHSUB8 __builtin_arm_uhsub8 -#define __SADD16 __builtin_arm_sadd16 -#define __QADD16 __builtin_arm_qadd16 -#define __SHADD16 __builtin_arm_shadd16 -#define __UADD16 __builtin_arm_uadd16 -#define __UQADD16 __builtin_arm_uqadd16 -#define __UHADD16 __builtin_arm_uhadd16 -#define __SSUB16 __builtin_arm_ssub16 -#define __QSUB16 __builtin_arm_qsub16 -#define __SHSUB16 __builtin_arm_shsub16 -#define __USUB16 __builtin_arm_usub16 -#define __UQSUB16 __builtin_arm_uqsub16 -#define __UHSUB16 __builtin_arm_uhsub16 -#define __SASX __builtin_arm_sasx -#define __QASX __builtin_arm_qasx -#define __SHASX __builtin_arm_shasx -#define __UASX __builtin_arm_uasx -#define __UQASX __builtin_arm_uqasx -#define __UHASX __builtin_arm_uhasx -#define __SSAX __builtin_arm_ssax -#define __QSAX __builtin_arm_qsax -#define __SHSAX __builtin_arm_shsax -#define __USAX __builtin_arm_usax -#define __UQSAX __builtin_arm_uqsax -#define __UHSAX __builtin_arm_uhsax -#define __USAD8 __builtin_arm_usad8 -#define __USADA8 __builtin_arm_usada8 -#define __SSAT16 __builtin_arm_ssat16 -#define __USAT16 __builtin_arm_usat16 -#define __UXTB16 __builtin_arm_uxtb16 -#define __UXTAB16 __builtin_arm_uxtab16 -#define __SXTB16 __builtin_arm_sxtb16 -#define __SXTAB16 __builtin_arm_sxtab16 -#define __SMUAD __builtin_arm_smuad -#define __SMUADX __builtin_arm_smuadx -#define __SMLAD __builtin_arm_smlad -#define __SMLADX __builtin_arm_smladx -#define __SMLALD __builtin_arm_smlald -#define __SMLALDX __builtin_arm_smlaldx -#define __SMUSD __builtin_arm_smusd -#define __SMUSDX __builtin_arm_smusdx -#define __SMLSD __builtin_arm_smlsd -#define __SMLSDX __builtin_arm_smlsdx -#define __SMLSLD __builtin_arm_smlsld -#define __SMLSLDX __builtin_arm_smlsldx -#define __SEL __builtin_arm_sel -#define __QADD __builtin_arm_qadd -#define __QSUB __builtin_arm_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) ) - -__STATIC_FORCEINLINE int32_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 == 1) */ -/**@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCLANG_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armclang_ltm.h b/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armclang_ltm.h deleted file mode 100644 index 356182c..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_armclang_ltm.h +++ /dev/null @@ -1,1891 +0,0 @@ -/**************************************************************************//** - * @file cmsis_armclang_ltm.h - * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V1.2.0 - * @date 08. May 2019 - ******************************************************************************/ -/* - * Copyright (c) 2018-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ - -#ifndef __CMSIS_ARMCLANG_H -#define __CMSIS_ARMCLANG_H - -#pragma clang system_header /* treat file as system include file */ - -#ifndef __ARM_COMPAT_H -#include /* Compatibility header for Arm Compiler 5 intrinsics */ -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __ASM volatile("":::"memory") -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START -#define __PROGRAM_START __main -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute((used, section("RESET"))) -#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. - */ -/* intrinsic void __enable_irq(); see arm_compat.h */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __disable_irq(); see arm_compat.h */ - - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \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 /* see arm_compat.h */ - - -/** - \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 /* see arm_compat.h */ - - -/** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)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 - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) -#endif - - -/*@} 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 unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV(value) __builtin_bswap32(value) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV16(value) __ROR(__REV(value), 16) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - 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 - */ -#define __RBIT __builtin_arm_rbit - -/** - \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 - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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 - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - -/** - \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 - - -/** - \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 - - -/** - \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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \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 - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/**@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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; \ - }) - -__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) - -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) - -__STATIC_FORCEINLINE int32_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 == 1) */ -/**@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCLANG_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_compiler.h b/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_compiler.h deleted file mode 100644 index adbf296..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_compiler.h +++ /dev/null @@ -1,283 +0,0 @@ -/**************************************************************************//** - * @file cmsis_compiler.h - * @brief CMSIS compiler generic header file - * @version V5.1.0 - * @date 09. October 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __CMSIS_COMPILER_H -#define __CMSIS_COMPILER_H - -#include - -/* - * Arm Compiler 4/5 - */ -#if defined ( __CC_ARM ) - #include "cmsis_armcc.h" - - -/* - * Arm Compiler 6.6 LTM (armclang) - */ -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100) - #include "cmsis_armclang_ltm.h" - - /* - * Arm Compiler above 6.10.1 (armclang) - */ -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) - #include "cmsis_armclang.h" - - -/* - * GNU Compiler - */ -#elif defined ( __GNUC__ ) - #include "cmsis_gcc.h" - - -/* - * IAR Compiler - */ -#elif defined ( __ICCARM__ ) - #include - - -/* - * TI Arm Compiler - */ -#elif defined ( __TI_ARM__ ) - #include - - #ifndef __ASM - #define __ASM __asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - #define __NO_RETURN __attribute__((noreturn)) - #endif - #ifndef __USED - #define __USED __attribute__((used)) - #endif - #ifndef __WEAK - #define __WEAK __attribute__((weak)) - #endif - #ifndef __PACKED - #define __PACKED __attribute__((packed)) - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed)) - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed)) - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) - #endif - #ifndef __RESTRICT - #define __RESTRICT __restrict - #endif - #ifndef __COMPILER_BARRIER - #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. - #define __COMPILER_BARRIER() (void)0 - #endif - - -/* - * 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. - */ - - #ifndef __ASM - #define __ASM __asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - #define __NO_RETURN __attribute__((noreturn)) - #endif - #ifndef __USED - #define __USED __attribute__((used)) - #endif - #ifndef __WEAK - #define __WEAK __attribute__((weak)) - #endif - #ifndef __PACKED - #define __PACKED __packed__ - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __packed__ - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION union __packed__ - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - struct __packed__ T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #define __ALIGNED(x) __align(x) - #endif - #ifndef __RESTRICT - #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. - #define __RESTRICT - #endif - #ifndef __COMPILER_BARRIER - #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. - #define __COMPILER_BARRIER() (void)0 - #endif - - -/* - * COSMIC Compiler - */ -#elif defined ( __CSMC__ ) - #include - - #ifndef __ASM - #define __ASM _asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - // NO RETURN is automatically detected hence no warning here - #define __NO_RETURN - #endif - #ifndef __USED - #warning No compiler specific solution for __USED. __USED is ignored. - #define __USED - #endif - #ifndef __WEAK - #define __WEAK __weak - #endif - #ifndef __PACKED - #define __PACKED @packed - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT @packed struct - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION @packed union - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - @packed struct T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. - #define __ALIGNED(x) - #endif - #ifndef __RESTRICT - #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. - #define __RESTRICT - #endif - #ifndef __COMPILER_BARRIER - #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. - #define __COMPILER_BARRIER() (void)0 - #endif - - -#else - #error Unknown compiler. -#endif - - -#endif /* __CMSIS_COMPILER_H */ - diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_gcc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_gcc.h deleted file mode 100644 index 2d9db15..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_gcc.h +++ /dev/null @@ -1,2085 +0,0 @@ -/**************************************************************************//** - * @file cmsis_gcc.h - * @brief CMSIS compiler GCC header file - * @version V5.0.4 - * @date 09. April 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __CMSIS_GCC_H -#define __CMSIS_GCC_H - -/* ignore some GCC warnings */ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wsign-conversion" -#pragma GCC diagnostic ignored "-Wconversion" -#pragma GCC diagnostic ignored "-Wunused-parameter" - -/* Fallback for __has_builtin */ -#ifndef __has_builtin - #define __has_builtin(x) (0) -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#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. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask_ns" : "=r" (result) :: "memory"); - return(result); -} -#endif - - -/** - \brief Set Priority Mask - \details Assigns the given value to the Priority Mask Register. - \param [in] priMask Priority Mask - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_get_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - return __builtin_arm_get_fpscr(); -#else - uint32_t result; - - __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); - return(result); -#endif -#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_FORCEINLINE void __set_FPSCR(uint32_t fpscr) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_set_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - __builtin_arm_set_fpscr(fpscr); -#else - __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); -#endif -#else - (void)fpscr; -#endif -} - - -/*@} 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_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_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() __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. - */ -#define __WFI() __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. - */ -#define __WFE() __ASM volatile ("wfe") - - -/** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV() __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. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE void __DMB(void) -{ - __ASM volatile ("dmb 0xF":::"memory"); -} - - -/** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE 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 within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE 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 (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) -{ -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - return (int16_t)__builtin_bswap16(value); -#else - int16_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] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - 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 - */ -__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) -{ - uint32_t result; - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); -#else - uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ - - result = value; /* r will be reversed bits of v; first get LSB of v */ - for (value >>= 1U; value != 0U; 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 (uint8_t)__builtin_clz - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE void __CLREX(void) -{ - __ASM volatile ("clrex" ::: "memory"); -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (1..32) - \return Saturated value - */ -#define __SSAT(ARG1,ARG2) \ -__extension__ \ -({ \ - 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] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (0..31) - \return Saturated value - */ -#define __USAT(ARG1,ARG2) \ - __extension__ \ -({ \ - 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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); -#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" (ptr) : "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) - */ -__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); -#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" (ptr) : "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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \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 - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint8_t) result); -} - - -/** - \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) - */ -__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint16_t) result); -} - - -/** - \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) - */ -__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); - return(result); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); - return(result); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); - return(result); -} - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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; \ - }) - -__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -#if 0 -#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; \ - }) -#endif - -#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) ) - -__STATIC_FORCEINLINE int32_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 == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#pragma GCC diagnostic pop - -#endif /* __CMSIS_GCC_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_iccarm.h b/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_iccarm.h deleted file mode 100644 index 11c4af0..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_iccarm.h +++ /dev/null @@ -1,935 +0,0 @@ -/**************************************************************************//** - * @file cmsis_iccarm.h - * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file - * @version V5.0.7 - * @date 19. June 2018 - ******************************************************************************/ - -//------------------------------------------------------------------------------ -// -// Copyright (c) 2017-2018 IAR Systems -// -// Licensed under the Apache License, Version 2.0 (the "License") -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------ - - -#ifndef __CMSIS_ICCARM_H__ -#define __CMSIS_ICCARM_H__ - -#ifndef __ICCARM__ - #error This file should only be compiled by ICCARM -#endif - -#pragma system_include - -#define __IAR_FT _Pragma("inline=forced") __intrinsic - -#if (__VER__ >= 8000000) - #define __ICCARM_V8 1 -#else - #define __ICCARM_V8 0 -#endif - -#ifndef __ALIGNED - #if __ICCARM_V8 - #define __ALIGNED(x) __attribute__((aligned(x))) - #elif (__VER__ >= 7080000) - /* Needs IAR language extensions */ - #define __ALIGNED(x) __attribute__((aligned(x))) - #else - #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. - #define __ALIGNED(x) - #endif -#endif - - -/* Define compiler macros for CPU architecture, used in CMSIS 5. - */ -#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ -/* Macros already defined */ -#else - #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) - #define __ARM_ARCH_8M_MAIN__ 1 - #elif defined(__ARM8M_BASELINE__) - #define __ARM_ARCH_8M_BASE__ 1 - #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' - #if __ARM_ARCH == 6 - #define __ARM_ARCH_6M__ 1 - #elif __ARM_ARCH == 7 - #if __ARM_FEATURE_DSP - #define __ARM_ARCH_7EM__ 1 - #else - #define __ARM_ARCH_7M__ 1 - #endif - #endif /* __ARM_ARCH */ - #endif /* __ARM_ARCH_PROFILE == 'M' */ -#endif - -/* Alternativ core deduction for older ICCARM's */ -#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ - !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) - #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) - #define __ARM_ARCH_6M__ 1 - #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) - #define __ARM_ARCH_7M__ 1 - #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) - #define __ARM_ARCH_7EM__ 1 - #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) - #define __ARM_ARCH_8M_BASE__ 1 - #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) - #define __ARM_ARCH_8M_MAIN__ 1 - #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) - #define __ARM_ARCH_8M_MAIN__ 1 - #else - #error "Unknown target." - #endif -#endif - - - -#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 - #define __IAR_M0_FAMILY 1 -#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 - #define __IAR_M0_FAMILY 1 -#else - #define __IAR_M0_FAMILY 0 -#endif - - -#ifndef __ASM - #define __ASM __asm -#endif - -#ifndef __INLINE - #define __INLINE inline -#endif - -#ifndef __NO_RETURN - #if __ICCARM_V8 - #define __NO_RETURN __attribute__((__noreturn__)) - #else - #define __NO_RETURN _Pragma("object_attribute=__noreturn") - #endif -#endif - -#ifndef __PACKED - #if __ICCARM_V8 - #define __PACKED __attribute__((packed, aligned(1))) - #else - /* Needs IAR language extensions */ - #define __PACKED __packed - #endif -#endif - -#ifndef __PACKED_STRUCT - #if __ICCARM_V8 - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) - #else - /* Needs IAR language extensions */ - #define __PACKED_STRUCT __packed struct - #endif -#endif - -#ifndef __PACKED_UNION - #if __ICCARM_V8 - #define __PACKED_UNION union __attribute__((packed, aligned(1))) - #else - /* Needs IAR language extensions */ - #define __PACKED_UNION __packed union - #endif -#endif - -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif - -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline -#endif - -#ifndef __FORCEINLINE - #define __FORCEINLINE _Pragma("inline=forced") -#endif - -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE -#endif - -#ifndef __UNALIGNED_UINT16_READ -#pragma language=save -#pragma language=extended -__IAR_FT uint16_t __iar_uint16_read(void const *ptr) -{ - return *(__packed uint16_t*)(ptr); -} -#pragma language=restore -#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) -#endif - - -#ifndef __UNALIGNED_UINT16_WRITE -#pragma language=save -#pragma language=extended -__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) -{ - *(__packed uint16_t*)(ptr) = val;; -} -#pragma language=restore -#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) -#endif - -#ifndef __UNALIGNED_UINT32_READ -#pragma language=save -#pragma language=extended -__IAR_FT uint32_t __iar_uint32_read(void const *ptr) -{ - return *(__packed uint32_t*)(ptr); -} -#pragma language=restore -#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) -#endif - -#ifndef __UNALIGNED_UINT32_WRITE -#pragma language=save -#pragma language=extended -__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) -{ - *(__packed uint32_t*)(ptr) = val;; -} -#pragma language=restore -#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) -#endif - -#ifndef __UNALIGNED_UINT32 /* deprecated */ -#pragma language=save -#pragma language=extended -__packed struct __iar_u32 { uint32_t v; }; -#pragma language=restore -#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) -#endif - -#ifndef __USED - #if __ICCARM_V8 - #define __USED __attribute__((used)) - #else - #define __USED _Pragma("__root") - #endif -#endif - -#ifndef __WEAK - #if __ICCARM_V8 - #define __WEAK __attribute__((weak)) - #else - #define __WEAK _Pragma("__weak") - #endif -#endif - - -#ifndef __ICCARM_INTRINSICS_VERSION__ - #define __ICCARM_INTRINSICS_VERSION__ 0 -#endif - -#if __ICCARM_INTRINSICS_VERSION__ == 2 - - #if defined(__CLZ) - #undef __CLZ - #endif - #if defined(__REVSH) - #undef __REVSH - #endif - #if defined(__RBIT) - #undef __RBIT - #endif - #if defined(__SSAT) - #undef __SSAT - #endif - #if defined(__USAT) - #undef __USAT - #endif - - #include "iccarm_builtin.h" - - #define __disable_fault_irq __iar_builtin_disable_fiq - #define __disable_irq __iar_builtin_disable_interrupt - #define __enable_fault_irq __iar_builtin_enable_fiq - #define __enable_irq __iar_builtin_enable_interrupt - #define __arm_rsr __iar_builtin_rsr - #define __arm_wsr __iar_builtin_wsr - - - #define __get_APSR() (__arm_rsr("APSR")) - #define __get_BASEPRI() (__arm_rsr("BASEPRI")) - #define __get_CONTROL() (__arm_rsr("CONTROL")) - #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) - - #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - #define __get_FPSCR() (__arm_rsr("FPSCR")) - #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) - #else - #define __get_FPSCR() ( 0 ) - #define __set_FPSCR(VALUE) ((void)VALUE) - #endif - - #define __get_IPSR() (__arm_rsr("IPSR")) - #define __get_MSP() (__arm_rsr("MSP")) - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - #define __get_MSPLIM() (0U) - #else - #define __get_MSPLIM() (__arm_rsr("MSPLIM")) - #endif - #define __get_PRIMASK() (__arm_rsr("PRIMASK")) - #define __get_PSP() (__arm_rsr("PSP")) - - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - #define __get_PSPLIM() (0U) - #else - #define __get_PSPLIM() (__arm_rsr("PSPLIM")) - #endif - - #define __get_xPSR() (__arm_rsr("xPSR")) - - #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) - #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) - #define __set_CONTROL(VALUE) (__arm_wsr("CONTROL", (VALUE))) - #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) - #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) - - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - #define __set_MSPLIM(VALUE) ((void)(VALUE)) - #else - #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) - #endif - #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) - #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - #define __set_PSPLIM(VALUE) ((void)(VALUE)) - #else - #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) - #endif - - #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) - #define __TZ_set_CONTROL_NS(VALUE) (__arm_wsr("CONTROL_NS", (VALUE))) - #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) - #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) - #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) - #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) - #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) - #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) - #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) - #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) - #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) - #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) - #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) - #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) - - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - #define __TZ_get_PSPLIM_NS() (0U) - #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) - #else - #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) - #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) - #endif - - #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) - #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) - - #define __NOP __iar_builtin_no_operation - - #define __CLZ __iar_builtin_CLZ - #define __CLREX __iar_builtin_CLREX - - #define __DMB __iar_builtin_DMB - #define __DSB __iar_builtin_DSB - #define __ISB __iar_builtin_ISB - - #define __LDREXB __iar_builtin_LDREXB - #define __LDREXH __iar_builtin_LDREXH - #define __LDREXW __iar_builtin_LDREX - - #define __RBIT __iar_builtin_RBIT - #define __REV __iar_builtin_REV - #define __REV16 __iar_builtin_REV16 - - __IAR_FT int16_t __REVSH(int16_t val) - { - return (int16_t) __iar_builtin_REVSH(val); - } - - #define __ROR __iar_builtin_ROR - #define __RRX __iar_builtin_RRX - - #define __SEV __iar_builtin_SEV - - #if !__IAR_M0_FAMILY - #define __SSAT __iar_builtin_SSAT - #endif - - #define __STREXB __iar_builtin_STREXB - #define __STREXH __iar_builtin_STREXH - #define __STREXW __iar_builtin_STREX - - #if !__IAR_M0_FAMILY - #define __USAT __iar_builtin_USAT - #endif - - #define __WFE __iar_builtin_WFE - #define __WFI __iar_builtin_WFI - - #if __ARM_MEDIA__ - #define __SADD8 __iar_builtin_SADD8 - #define __QADD8 __iar_builtin_QADD8 - #define __SHADD8 __iar_builtin_SHADD8 - #define __UADD8 __iar_builtin_UADD8 - #define __UQADD8 __iar_builtin_UQADD8 - #define __UHADD8 __iar_builtin_UHADD8 - #define __SSUB8 __iar_builtin_SSUB8 - #define __QSUB8 __iar_builtin_QSUB8 - #define __SHSUB8 __iar_builtin_SHSUB8 - #define __USUB8 __iar_builtin_USUB8 - #define __UQSUB8 __iar_builtin_UQSUB8 - #define __UHSUB8 __iar_builtin_UHSUB8 - #define __SADD16 __iar_builtin_SADD16 - #define __QADD16 __iar_builtin_QADD16 - #define __SHADD16 __iar_builtin_SHADD16 - #define __UADD16 __iar_builtin_UADD16 - #define __UQADD16 __iar_builtin_UQADD16 - #define __UHADD16 __iar_builtin_UHADD16 - #define __SSUB16 __iar_builtin_SSUB16 - #define __QSUB16 __iar_builtin_QSUB16 - #define __SHSUB16 __iar_builtin_SHSUB16 - #define __USUB16 __iar_builtin_USUB16 - #define __UQSUB16 __iar_builtin_UQSUB16 - #define __UHSUB16 __iar_builtin_UHSUB16 - #define __SASX __iar_builtin_SASX - #define __QASX __iar_builtin_QASX - #define __SHASX __iar_builtin_SHASX - #define __UASX __iar_builtin_UASX - #define __UQASX __iar_builtin_UQASX - #define __UHASX __iar_builtin_UHASX - #define __SSAX __iar_builtin_SSAX - #define __QSAX __iar_builtin_QSAX - #define __SHSAX __iar_builtin_SHSAX - #define __USAX __iar_builtin_USAX - #define __UQSAX __iar_builtin_UQSAX - #define __UHSAX __iar_builtin_UHSAX - #define __USAD8 __iar_builtin_USAD8 - #define __USADA8 __iar_builtin_USADA8 - #define __SSAT16 __iar_builtin_SSAT16 - #define __USAT16 __iar_builtin_USAT16 - #define __UXTB16 __iar_builtin_UXTB16 - #define __UXTAB16 __iar_builtin_UXTAB16 - #define __SXTB16 __iar_builtin_SXTB16 - #define __SXTAB16 __iar_builtin_SXTAB16 - #define __SMUAD __iar_builtin_SMUAD - #define __SMUADX __iar_builtin_SMUADX - #define __SMMLA __iar_builtin_SMMLA - #define __SMLAD __iar_builtin_SMLAD - #define __SMLADX __iar_builtin_SMLADX - #define __SMLALD __iar_builtin_SMLALD - #define __SMLALDX __iar_builtin_SMLALDX - #define __SMUSD __iar_builtin_SMUSD - #define __SMUSDX __iar_builtin_SMUSDX - #define __SMLSD __iar_builtin_SMLSD - #define __SMLSDX __iar_builtin_SMLSDX - #define __SMLSLD __iar_builtin_SMLSLD - #define __SMLSLDX __iar_builtin_SMLSLDX - #define __SEL __iar_builtin_SEL - #define __QADD __iar_builtin_QADD - #define __QSUB __iar_builtin_QSUB - #define __PKHBT __iar_builtin_PKHBT - #define __PKHTB __iar_builtin_PKHTB - #endif - -#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ - - #if __IAR_M0_FAMILY - /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ - #define __CLZ __cmsis_iar_clz_not_active - #define __SSAT __cmsis_iar_ssat_not_active - #define __USAT __cmsis_iar_usat_not_active - #define __RBIT __cmsis_iar_rbit_not_active - #define __get_APSR __cmsis_iar_get_APSR_not_active - #endif - - - #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) - #define __get_FPSCR __cmsis_iar_get_FPSR_not_active - #define __set_FPSCR __cmsis_iar_set_FPSR_not_active - #endif - - #ifdef __INTRINSICS_INCLUDED - #error intrinsics.h is already included previously! - #endif - - #include - - #if __IAR_M0_FAMILY - /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ - #undef __CLZ - #undef __SSAT - #undef __USAT - #undef __RBIT - #undef __get_APSR - - __STATIC_INLINE uint8_t __CLZ(uint32_t data) - { - if (data == 0U) { return 32U; } - - uint32_t count = 0U; - uint32_t mask = 0x80000000U; - - while ((data & mask) == 0U) - { - count += 1U; - mask = mask >> 1U; - } - return count; - } - - __STATIC_INLINE uint32_t __RBIT(uint32_t v) - { - uint8_t sc = 31U; - uint32_t r = v; - for (v >>= 1U; v; v >>= 1U) - { - r <<= 1U; - r |= v & 1U; - sc--; - } - return (r << sc); - } - - __STATIC_INLINE uint32_t __get_APSR(void) - { - uint32_t res; - __asm("MRS %0,APSR" : "=r" (res)); - return res; - } - - #endif - - #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) - #undef __get_FPSCR - #undef __set_FPSCR - #define __get_FPSCR() (0) - #define __set_FPSCR(VALUE) ((void)VALUE) - #endif - - #pragma diag_suppress=Pe940 - #pragma diag_suppress=Pe177 - - #define __enable_irq __enable_interrupt - #define __disable_irq __disable_interrupt - #define __NOP __no_operation - - #define __get_xPSR __get_PSR - - #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) - - __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) - { - return __LDREX((unsigned long *)ptr); - } - - __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) - { - return __STREX(value, (unsigned long *)ptr); - } - #endif - - - /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ - #if (__CORTEX_M >= 0x03) - - __IAR_FT uint32_t __RRX(uint32_t value) - { - uint32_t result; - __ASM("RRX %0, %1" : "=r"(result) : "r" (value) : "cc"); - return(result); - } - - __IAR_FT void __set_BASEPRI_MAX(uint32_t value) - { - __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); - } - - - #define __enable_fault_irq __enable_fiq - #define __disable_fault_irq __disable_fiq - - - #endif /* (__CORTEX_M >= 0x03) */ - - __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) - { - return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); - } - - #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - - __IAR_FT uint32_t __get_MSPLIM(void) - { - uint32_t res; - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - res = 0U; - #else - __asm volatile("MRS %0,MSPLIM" : "=r" (res)); - #endif - return res; - } - - __IAR_FT void __set_MSPLIM(uint32_t value) - { - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)value; - #else - __asm volatile("MSR MSPLIM,%0" :: "r" (value)); - #endif - } - - __IAR_FT uint32_t __get_PSPLIM(void) - { - uint32_t res; - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - res = 0U; - #else - __asm volatile("MRS %0,PSPLIM" : "=r" (res)); - #endif - return res; - } - - __IAR_FT void __set_PSPLIM(uint32_t value) - { - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)value; - #else - __asm volatile("MSR PSPLIM,%0" :: "r" (value)); - #endif - } - - __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) - { - __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_PSP_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,PSP_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_PSP_NS(uint32_t value) - { - __asm volatile("MSR PSP_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_MSP_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,MSP_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_MSP_NS(uint32_t value) - { - __asm volatile("MSR MSP_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_SP_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,SP_NS" : "=r" (res)); - return res; - } - __IAR_FT void __TZ_set_SP_NS(uint32_t value) - { - __asm volatile("MSR SP_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) - { - __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) - { - __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) - { - __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) - { - uint32_t res; - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - res = 0U; - #else - __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); - #endif - return res; - } - - __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) - { - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)value; - #else - __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); - #endif - } - - __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) - { - __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); - } - - #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ - -#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ - -#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) - -#if __IAR_M0_FAMILY - __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) - { - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; - } - - __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) - { - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; - } -#endif - -#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ - - __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) - { - uint32_t res; - __ASM("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); - return ((uint8_t)res); - } - - __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) - { - uint32_t res; - __ASM("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); - return ((uint16_t)res); - } - - __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) - { - uint32_t res; - __ASM("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); - return res; - } - - __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) - { - __ASM("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); - } - - __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) - { - __ASM("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); - } - - __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) - { - __ASM("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); - } - -#endif /* (__CORTEX_M >= 0x03) */ - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - - - __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint8_t)res); - } - - __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint16_t)res); - } - - __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) - { - uint32_t res; - __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return res; - } - - __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) - { - __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); - } - - __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) - { - __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); - } - - __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) - { - __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); - } - - __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint8_t)res); - } - - __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint16_t)res); - } - - __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return res; - } - - __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) - { - uint32_t res; - __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); - return res; - } - - __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) - { - uint32_t res; - __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); - return res; - } - - __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) - { - uint32_t res; - __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); - return res; - } - -#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ - -#undef __IAR_FT -#undef __IAR_M0_FAMILY -#undef __ICCARM_V8 - -#pragma diag_default=Pe940 -#pragma diag_default=Pe177 - -#endif /* __CMSIS_ICCARM_H__ */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_version.h b/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_version.h deleted file mode 100644 index 660f612..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/cmsis_version.h +++ /dev/null @@ -1,39 +0,0 @@ -/**************************************************************************//** - * @file cmsis_version.h - * @brief CMSIS Core(M) Version definitions - * @version V5.0.2 - * @date 19. April 2017 - ******************************************************************************/ -/* - * Copyright (c) 2009-2017 ARM Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CMSIS_VERSION_H -#define __CMSIS_VERSION_H - -/* CMSIS Version definitions */ -#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ -#define __CM_CMSIS_VERSION_SUB ( 1U) /*!< [15:0] CMSIS Core(M) sub version */ -#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ - __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/core_cm3.h b/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/core_cm3.h deleted file mode 100644 index 8157ca7..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/CMSIS/Include/core_cm3.h +++ /dev/null @@ -1,1937 +0,0 @@ -/**************************************************************************//** - * @file core_cm3.h - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V5.1.0 - * @date 13. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #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 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM3 definitions */ -#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM3_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \ - __CM3_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (3U) /*!< Cortex-M Core */ - -/** __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_FP - #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 ( __TI_ARM__ ) - #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 "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#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 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_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:1; /*!< bit: 9 Reserved */ - uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ - uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit */ - uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ - 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_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ -#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ -#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 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 RESERVED1[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 defined (__CM3_REV) && (__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 */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR 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 */ -#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) -#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 */ -#endif - -/*@} 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[32U]; - 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 (0xFFFFFFFFUL /*<< 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 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 -{ - __IM 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 Register */ - __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 (0x1UL << 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 (0x1UL << 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ -#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ - -#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ -#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 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 (0x1UL << 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 (0x1UL << 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ -#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ - -#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ -#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< 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_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__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; - -#define MPU_TYPE_RALIASES 4U - -/* 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. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(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. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(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 Core 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 defined (__MPU_PRESENT) && (__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. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ - - -/** - \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 << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority 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 Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - __COMPILER_BARRIER(); - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __COMPILER_BARRIER(); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \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)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (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 Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t vectors = (uint32_t )SCB->VTOR; - (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector; - /* ARM Application Note 321 states that the M3 does not require the architectural barrier */ -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t vectors = (uint32_t )SCB->VTOR; - return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)); -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __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 */ - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv7.h" - -#endif - - -/* ########################## 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) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__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 ((int32_t)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 --git a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Include/apm32f10x.h b/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Include/apm32f10x.h deleted file mode 100644 index e24b88e..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Include/apm32f10x.h +++ /dev/null @@ -1,6229 +0,0 @@ -/*! - * @file apm32f10x.h - * - * @brief CMSIS Cortex-M3 Device Peripheral Access Layer Header File. - * - * @details This file contains all the peripheral register's definitions, bits definitions and memory mapping - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_H -#define __APM32F10X_H - -#ifdef __cplusplus - extern "C" { -#endif - -/*! - * APM32F10X_LD: APM32 Low density devices, the Flash memory density ranges between 16 and 32 Kbytes. - * APM32F10X_MD: APM32 Medium density devices, the Flash memory density ranges between 64 and 128 Kbytes. - * APM32F10X_HD: APM32 High density devices, the Flash memory density ranges between 256 and 512 Kbytes. - */ -#if !defined (APM32F10X_LD) && !defined (APM32F10X_MD) && !defined (APM32F10X_HD) -#error "Please select a the target APM32F10x device used in your application (in apm32f10x.h file)" -#endif - -/** - * @brief Define Value of the External oscillator in Hz - */ -#ifndef HSE_VALUE - #define HSE_VALUE ((uint32_t)8000000) -#endif - -/** Time out for HSE start up */ -#define HSE_STARTUP_TIMEOUT ((uint16_t)0x05000) - -/** Value of the Internal oscillator in Hz */ -#define HSI_VALUE ((uint32_t)8000000) - -/** - * @brief APM32F10x Standard Peripheral Library version number - */ -#define __APM32F10X_STDPERIPH_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __APM32F10X_STDPERIPH_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ -#define __APM32F10X_STDPERIPH_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ -#define __APM32F10X_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __APM32F10X_STDPERIPH_VERSION ( (__APM32F10X_STDPERIPH_VERSION_MAIN << 24)\ - |(__APM32F10X_STDPERIPH_VERSION_SUB1 << 16)\ - |(__APM32F10X_STDPERIPH_VERSION_SUB2 << 8)\ - |(__APM32F10X_STDPERIPH_VERSION_RC)) - - -/** APM32 devices does not provide an MPU */ - #define __MPU_PRESENT 0 -/** APM32 uses 4 Bits for the Priority Levels */ -#define __NVIC_PRIO_BITS 4 -/** Set to 1 if different SysTick Config is used */ -#define __Vendor_SysTickConfig 0 - -/** - * @brief APM32F10x Interrupt Number Definition, according to the selected device - * in @ref Library_configuration_section - */ -typedef enum IRQn -{ -/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable 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 */ - -/****** APM32 specific Interrupt Numbers *********************************************************/ - WWDT_IRQn = 0, /*!< Window WatchDog Interrupt */ - PVD_IRQn = 1, /*!< PVD through EINT Line detection Interrupt */ - TAMPER_IRQn = 2, /*!< Tamper Interrupt */ - RTC_IRQn = 3, /*!< RTC global Interrupt */ - FLASH_IRQn = 4, /*!< FLASH global Interrupt */ - RCM_IRQn = 5, /*!< RCM global Interrupt */ - EINT0_IRQn = 6, /*!< EINT Line0 Interrupt */ - EINT1_IRQn = 7, /*!< EINT Line1 Interrupt */ - EINT2_IRQn = 8, /*!< EINT Line2 Interrupt */ - EINT3_IRQn = 9, /*!< EINT Line3 Interrupt */ - EINT4_IRQn = 10, /*!< EINT 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 */ - -#if defined (APM32F10X_LD) - /** APM32F10X Low-density devices specific Interrupt Numbers */ - ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ - USBD1_HP_CAN1_TX_IRQn = 19, /*!< USB Device 1 High Priority or CAN1 TX Interrupts */ - USBD1_LP_CAN1_RX0_IRQn = 20, /*!< USB Device 1 Low Priority or CAN1 RX0 Interrupts */ - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ - CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ - EINT9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TMR1_BRK_IRQn = 24, /*!< TMR1 Break Interrupt */ - TMR1_UP_IRQn = 25, /*!< TMR1 Update Interrupt */ - TMR1_TRG_COM_IRQn = 26, /*!< TMR1 Trigger and Commutation Interrupt */ - TMR1_CC_IRQn = 27, /*!< TMR1 Capture Compare Interrupt */ - TMR2_IRQn = 28, /*!< TMR2 global Interrupt */ - TMR3_IRQn = 29, /*!< TMR3 global Interrupt */ - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ - SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ - USART1_IRQn = 37, /*!< USART1 global Interrupt */ - USART2_IRQn = 38, /*!< USART2 global Interrupt */ - EINT15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EINT Line Interrupt */ - USBDWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EINT Line Interrupt */ - FPU_IRQn = 43, /*!< FPU Global Interrupt */ - QSPI_IRQn = 44, /*!< QSPI Global Interrupt */ - USBD2_HP_IRQn = 45, /*!< USB Device 2 High Priority */ - USBD2_LP_IRQn = 46 /*!< USB Device 2 Low Priority */ - -#elif defined (APM32F10X_MD) - /** APM32F10X Medium-density devices specific Interrupt Numbers */ - ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ - USBD1_HP_CAN1_TX_IRQn = 19, /*!< USB Device 1 High Priority or CAN1 TX Interrupts */ - USBD1_LP_CAN1_RX0_IRQn = 20, /*!< USB Device 1 Low Priority or CAN1 RX0 Interrupts */ - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ - CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ - EINT9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TMR1_BRK_IRQn = 24, /*!< TMR1 Break Interrupt */ - TMR1_UP_IRQn = 25, /*!< TMR1 Update Interrupt */ - TMR1_TRG_COM_IRQn = 26, /*!< TMR1 Trigger and Commutation Interrupt */ - TMR1_CC_IRQn = 27, /*!< TMR1 Capture Compare Interrupt */ - TMR2_IRQn = 28, /*!< TMR2 global Interrupt */ - TMR3_IRQn = 29, /*!< TMR3 global Interrupt */ - TMR4_IRQn = 30, /*!< TMR4 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 */ - EINT15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EINT Line Interrupt */ - USBDWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EINT Line Interrupt */ - FPU_IRQn = 43, /*!< FPU Global Interrupt */ - QSPI_IRQn = 44, /*!< QSPI Global Interrupt */ - USBD2_HP_IRQn = 45, /*!< USB Device 2 High Priority */ - USBD2_LP_IRQn = 46 /*!< USB Device 2 Low Priority */ - -#elif defined (APM32F10X_HD) - /** APM32F10X High-density devices specific Interrupt Numbers */ - ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ - USBD1_HP_CAN1_TX_IRQn = 19, /*!< USB Device 1 High Priority or CAN1 TX Interrupts */ - USBD1_LP_CAN1_RX0_IRQn = 20, /*!< USB Device 1 Low Priority or CAN1 RX0 Interrupts */ - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ - CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ - EINT9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TMR1_BRK_IRQn = 24, /*!< TMR1 Break Interrupt */ - TMR1_UP_IRQn = 25, /*!< TMR1 Update Interrupt */ - TMR1_TRG_COM_IRQn = 26, /*!< TMR1 Trigger and Commutation Interrupt */ - TMR1_CC_IRQn = 27, /*!< TMR1 Capture Compare Interrupt */ - TMR2_IRQn = 28, /*!< TMR2 global Interrupt */ - TMR3_IRQn = 29, /*!< TMR3 global Interrupt */ - TMR4_IRQn = 30, /*!< TMR4 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 */ - EINT15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 41, /*!< RTC Alarm through EINT Line Interrupt */ - USBDWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EINT Line Interrupt */ - TMR8_BRK_IRQn = 43, /*!< TMR8 Break Interrupt */ - TMR8_UP_IRQn = 44, /*!< TMR8 Update Interrupt */ - TMR8_TRG_COM_IRQn = 45, /*!< TMR8 Trigger and Commutation Interrupt */ - TMR8_CC_IRQn = 46, /*!< TMR8 Capture Compare Interrupt */ - ADC3_IRQn = 47, /*!< ADC3 global Interrupt */ - EMMC_IRQn = 48, /*!< EMMC global Interrupt */ - SDIO_IRQn = 49, /*!< SDIO global Interrupt */ - TMR5_IRQn = 50, /*!< TMR5 global Interrupt */ - SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ - UART4_IRQn = 52, /*!< UART4 global Interrupt */ - UART5_IRQn = 53, /*!< UART5 global Interrupt */ - TMR6_IRQn = 54, /*!< TMR6 global Interrupt */ - TMR7_IRQn = 55, /*!< TMR7 global Interrupt */ - DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ - DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ - DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ - DMA2_Channel4_5_IRQn = 59, /*!< DMA2 Channel 4 and Channel 5 global Interrupt */ - USBD2_HP_CAN2_TX_IRQn = 61, /*!< USB Device 2 High Priority or CAN2 TX Interrupts */ - USBD2_LP_CAN2_RX0_IRQn = 62, /*!< USB Device 2 Low Priority or CAN2 RX0 Interrupts */ - CAN2_RX1_IRQn = 63, /*!< CAN2 RX1 Interrupts */ - CAN2_SCE_IRQn = 64, /*!< CAN2 SCE Interrupts */ -#endif -} IRQn_Type; - -/** - * @} - */ - -#include "core_cm3.h" -#include "system_apm32f10x.h" -#include - - -typedef int32_t s32; -typedef int16_t s16; -typedef int8_t s8; - -typedef const int32_t sc32; -typedef const int16_t sc16; -typedef const int8_t sc8; - -typedef __IO int32_t vs32; -typedef __IO int16_t vs16; -typedef __IO int8_t vs8; - -typedef __I int32_t vsc32; -typedef __I int16_t vsc16; -typedef __I int8_t vsc8; - -typedef uint32_t u32; -typedef uint16_t u16; -typedef uint8_t u8; - -typedef const uint32_t uc32; -typedef const uint16_t uc16; -typedef const uint8_t uc8; - -typedef __IO uint32_t vu32; -typedef __IO uint16_t vu16; -typedef __IO uint8_t vu8; - -typedef __I uint32_t vuc32; -typedef __I uint16_t vuc16; -typedef __I uint8_t vuc8; - -#ifndef __IM - #define __IM __I -#endif -#ifndef __OM - #define __OM __O -#endif -#ifndef __IOM - #define __IOM __IO -#endif - -enum {BIT_RESET, BIT_SET}; -enum {RESET, SET}; -enum {DISABLE, ENABLE}; -enum {ERROR, SUCCESS}; - -#ifndef NULL -#define NULL ((void *)0) -#endif - -#if defined (__CC_ARM ) -#pragma anon_unions -#endif - -/** - * @brief Reset and clock management unit (RCM) - */ -typedef struct -{ - /** Clock control register */ - union - { - __IOM uint32_t CTRL; - - struct - { - __IOM uint32_t HSIEN : 1; - __IM uint32_t HSIRDYFLG : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t HSITRIM : 5; - __IM uint32_t HSICAL : 8; - __IOM uint32_t HSEEN : 1; - __IM uint32_t HSERDYFLG : 1; - __IOM uint32_t HSEBCFG : 1; - __IOM uint32_t CSSEN : 1; - __IM uint32_t RESERVED2 : 4; - __IOM uint32_t PLLEN : 1; - __IM uint32_t PLLRDYFLG : 1; - __IM uint32_t RESERVED3 : 6; - } CTRL_B; - }; - - /** Clock configuration register */ - union - { - __IOM uint32_t CFG; - - struct - { - __IOM uint32_t SCLKSEL : 2; - __IM uint32_t SCLKSELSTS : 2; - __IOM uint32_t AHBPSC : 4; - __IOM uint32_t APB1PSC : 3; - __IOM uint32_t APB2PSC : 3; - __IOM uint32_t ADCPSC : 2; - __IOM uint32_t PLLSRCSEL : 1; - __IOM uint32_t PLLHSEPSC : 1; - __IOM uint32_t PLLMULCFG : 4; - __IOM uint32_t USBDPSC : 2; - __IOM uint32_t MCOSEL : 3; - __IOM uint32_t FPUPSC : 1; - __IM uint32_t RESERVED : 4; - } CFG_B; - } ; - - /** Clock interrupt control register */ - union - { - __IOM uint32_t INT; - - struct - { - __IM uint32_t LSIRDYFLG : 1; - __IM uint32_t LSERDYFLG : 1; - __IM uint32_t HSIRDYFLG : 1; - __IM uint32_t HSERDYFLG : 1; - __IM uint32_t PLLRDYFLG : 1; - __IM uint32_t RESERVED1 : 2; - __IM uint32_t CSSIF : 1; - __IOM uint32_t LSIRDYEN : 1; - __IOM uint32_t LSERDYEN : 1; - __IOM uint32_t HSIRDYEN : 1; - __IOM uint32_t HSERDYEN : 1; - __IOM uint32_t PLLRDYEN : 1; - __IM uint32_t RESERVED2 : 3; - __OM uint32_t LSIRDYCLR : 1; - __OM uint32_t LSERDYCLR : 1; - __OM uint32_t HSIRDYCLR : 1; - __OM uint32_t HSERDYCLR : 1; - __OM uint32_t PLLRDYCLR : 1; - __IM uint32_t RESERVED3 : 2; - __OM uint32_t CSSCLR : 1; - __IM uint32_t RESERVED4 : 8; - } INT_B; - } ; - - /** APB2 peripheral reset register */ - union - { - __IOM uint32_t APB2RST; - - struct - { - __IOM uint32_t AFIO : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t PA : 1; - __IOM uint32_t PB : 1; - __IOM uint32_t PC : 1; - __IOM uint32_t PD : 1; - __IOM uint32_t PE : 1; - __IOM uint32_t PF : 1; - __IOM uint32_t PG : 1; - __IOM uint32_t ADC1 : 1; - __IOM uint32_t ADC2 : 1; - __IOM uint32_t TMR1 : 1; - __IOM uint32_t SPI1 : 1; - __IOM uint32_t TMR8 : 1; - __IOM uint32_t USART1 : 1; - __IOM uint32_t ADC3 : 1; - __IM uint32_t RESERVED2 : 16; - } APB2RST_B; - } ; - - /** APB1 peripheral reset register */ - union - { - __IOM uint32_t APB1RST; - - struct - { - __IOM uint32_t TMR2 : 1; - __IOM uint32_t TMR3 : 1; - __IOM uint32_t TMR4 : 1; - __IOM uint32_t TMR5 : 1; - __IOM uint32_t TMR6 : 1; - __IOM uint32_t TMR7 : 1; - __IM uint32_t RESERVED1 : 5; - __IOM uint32_t WWDT : 1; - __IM uint32_t RESERVED2 : 2; - __IOM uint32_t SPI2 : 1; - __IOM uint32_t SPI3 : 1; - __IM uint32_t RESERVED3 : 1; - __IOM uint32_t USART2 : 1; - __IOM uint32_t USART3 : 1; - __IOM uint32_t UART4 : 1; - __IOM uint32_t UART5 : 1; - __IOM uint32_t I2C1 : 1; - __IOM uint32_t I2C2 : 1; - __IOM uint32_t USBD : 1; - __IM uint32_t RESERVED4 : 1; - __IOM uint32_t CAN1 : 1; - __IM uint32_t CAN2 : 1; - __IOM uint32_t BAKP : 1; - __IOM uint32_t PMU : 1; - __IOM uint32_t DAC : 1; - __IM uint32_t RESERVED5 : 2; - } APB1RST_B; - } ; - - /** AHB clock enable register */ - union - { - __IOM uint32_t AHBCLKEN; - - struct - { - __IOM uint32_t DMA1 : 1; - __IOM uint32_t DMA2 : 1; - __IOM uint32_t SRAM : 1; - __IOM uint32_t FPU : 1; - __IOM uint32_t FMC : 1; - __IOM uint32_t QSPI : 1; - __IOM uint32_t CRC : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t EMMC : 1; - __IM uint32_t RESERVED2 : 1; - __IOM uint32_t SDIO : 1; - __IM uint32_t RESERVED3 : 21; - } AHBCLKEN_B; - } ; - - /** APB2 clock enable register */ - union - { - __IOM uint32_t APB2CLKEN; - - struct - { - __IOM uint32_t AFIO : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t PA : 1; - __IOM uint32_t PB : 1; - __IOM uint32_t PC : 1; - __IOM uint32_t PD : 1; - __IOM uint32_t PE : 1; - __IOM uint32_t PF : 1; - __IOM uint32_t PG : 1; - __IOM uint32_t ADC1 : 1; - __IOM uint32_t ADC2 : 1; - __IOM uint32_t TMR1 : 1; - __IOM uint32_t SPI1 : 1; - __IOM uint32_t TMR8 : 1; - __IOM uint32_t USART1 : 1; - __IOM uint32_t ADC3 : 1; - __IM uint32_t RESERVED2 : 16; - } APB2CLKEN_B; - }; - - /** APB1 clock enable register */ - union - { - __IOM uint32_t APB1CLKEN; - - struct - { - __IOM uint32_t TMR2 : 1; - __IOM uint32_t TMR3 : 1; - __IOM uint32_t TMR4 : 1; - __IOM uint32_t TMR5 : 1; - __IOM uint32_t TMR6 : 1; - __IOM uint32_t TMR7 : 1; - __IM uint32_t RESERVED1 : 5; - __IOM uint32_t WWDT : 1; - __IM uint32_t RESERVED2 : 2; - __IOM uint32_t SPI2 : 1; - __IOM uint32_t SPI3 : 1; - __IM uint32_t RESERVED3 : 1; - __IOM uint32_t USART2 : 1; - __IOM uint32_t USART3 : 1; - __IOM uint32_t UART4 : 1; - __IOM uint32_t UART5 : 1; - __IOM uint32_t I2C1 : 1; - __IOM uint32_t I2C2 : 1; - __IOM uint32_t USBD : 1; - __IM uint32_t RESERVED4 : 1; - __IOM uint32_t CAN1 : 1; - __IM uint32_t CAN2 : 1; - __IOM uint32_t BAKP : 1; - __IOM uint32_t PMU : 1; - __IOM uint32_t DAC : 1; - __IM uint32_t RESERVED5 : 2; - } APB1CLKEN_B; - } ; - - /** Backup domain control register */ - union - { - __IOM uint32_t BDCTRL; - - struct - { - __IOM uint32_t LSEEN : 1; - __IM uint32_t LSERDYFLG : 1; - __IOM uint32_t LSEBCFG : 1; - __IM uint32_t RESERVED1 : 5; - __IOM uint32_t RTCSRCSEL : 2; - __IM uint32_t RESERVED2 : 5; - __IOM uint32_t RTCCLKEN : 1; - __IOM uint32_t BDRST : 1; - __IM uint32_t RESERVED3 : 15; - } BDCTRL_B; - } ; - - /** Control/status register */ - union - { - __IOM uint32_t CSTS; - - struct - { - __IOM uint32_t LSIEN : 1; - __IM uint32_t LSIRDYFLG : 1; - __IM uint32_t RESERVED1 : 22; - __IOM uint32_t RSTFLGCLR : 1; - __IM uint32_t RESERVED2 : 1; - __IOM uint32_t NRSTFLG : 1; - __IOM uint32_t PODRSTFLG : 1; - __IOM uint32_t SWRSTFLG : 1; - __IOM uint32_t IWDTRSTFLG : 1; - __IOM uint32_t WWDTRSTFLG : 1; - __IOM uint32_t LPWRRSTFLG : 1; - } CSTS_B; - } ; -} RCM_T; - -/** - * @brief General purpose I/O (GPIO) - */ -typedef struct -{ - /** Port configure register low */ - union - { - __IOM uint32_t CFGLOW; - - struct - { - __IOM uint32_t MODE0 : 2; - __IOM uint32_t CFG0 : 2; - __IOM uint32_t MODE1 : 2; - __IOM uint32_t CFG1 : 2; - __IOM uint32_t MODE2 : 2; - __IOM uint32_t CFG2 : 2; - __IOM uint32_t MODE3 : 2; - __IOM uint32_t CFG3 : 2; - __IOM uint32_t MODE4 : 2; - __IOM uint32_t CFG4 : 2; - __IOM uint32_t MODE5 : 2; - __IOM uint32_t CFG5 : 2; - __IOM uint32_t MODE6 : 2; - __IOM uint32_t CFG6 : 2; - __IOM uint32_t MODE7 : 2; - __IOM uint32_t CFG7 : 2; - } CFGLOW_B; - } ; - - /** Port configure register high */ - union - { - __IOM uint32_t CFGHIG; - - struct - { - __IOM uint32_t MODE8 : 2; - __IOM uint32_t CFG8 : 2; - __IOM uint32_t MODE9 : 2; - __IOM uint32_t CFG9 : 2; - __IOM uint32_t MODE10 : 2; - __IOM uint32_t CFG10 : 2; - __IOM uint32_t MODE11 : 2; - __IOM uint32_t CFG11 : 2; - __IOM uint32_t MODE12 : 2; - __IOM uint32_t CFG12 : 2; - __IOM uint32_t MODE13 : 2; - __IOM uint32_t CFG13 : 2; - __IOM uint32_t MODE14 : 2; - __IOM uint32_t CFG14 : 2; - __IOM uint32_t MODE15 : 2; - __IOM uint32_t CFG15 : 2; - } CFGHIG_B; - } ; - - /** Port data in register */ - union - { - __IM uint32_t IDATA; - - struct - { - __IM uint32_t IDATA0 : 1; - __IM uint32_t IDATA1 : 1; - __IM uint32_t IDATA2 : 1; - __IM uint32_t IDATA3 : 1; - __IM uint32_t IDATA4 : 1; - __IM uint32_t IDATA5 : 1; - __IM uint32_t IDATA6 : 1; - __IM uint32_t IDATA7 : 1; - __IM uint32_t IDATA8 : 1; - __IM uint32_t IDATA9 : 1; - __IM uint32_t IDATA10 : 1; - __IM uint32_t IDATA11 : 1; - __IM uint32_t IDATA12 : 1; - __IM uint32_t IDATA13 : 1; - __IM uint32_t IDATA14 : 1; - __IM uint32_t IDATA15 : 1; - __IM uint32_t RESERVED : 16; - } IDATA_B; - } ; - - /** Port data output register */ - union - { - __IOM uint32_t ODATA; - - struct - { - __IOM uint32_t ODATA0 : 1; - __IOM uint32_t ODATA1 : 1; - __IOM uint32_t ODATA2 : 1; - __IOM uint32_t ODATA3 : 1; - __IOM uint32_t ODATA4 : 1; - __IOM uint32_t ODATA5 : 1; - __IOM uint32_t ODATA6 : 1; - __IOM uint32_t ODATA7 : 1; - __IOM uint32_t ODATA8 : 1; - __IOM uint32_t ODATA9 : 1; - __IOM uint32_t ODATA10 : 1; - __IOM uint32_t ODATA11 : 1; - __IOM uint32_t ODATA12 : 1; - __IOM uint32_t ODATA13 : 1; - __IOM uint32_t ODATA14 : 1; - __IOM uint32_t ODATA15 : 1; - __IM uint32_t RESERVED : 16; - } ODATA_B; - } ; - - /** Port bit set/clear register */ - union - { - __OM uint32_t BSC; - - struct - { - __OM uint32_t BS0 : 1; - __OM uint32_t BS1 : 1; - __OM uint32_t BS2 : 1; - __OM uint32_t BS3 : 1; - __OM uint32_t BS4 : 1; - __OM uint32_t BS5 : 1; - __OM uint32_t BS6 : 1; - __OM uint32_t BS7 : 1; - __OM uint32_t BS8 : 1; - __OM uint32_t BS9 : 1; - __OM uint32_t BS10 : 1; - __OM uint32_t BS11 : 1; - __OM uint32_t BS12 : 1; - __OM uint32_t BS13 : 1; - __OM uint32_t BS14 : 1; - __OM uint32_t BS15 : 1; - __OM uint32_t BR0 : 1; - __OM uint32_t BC1 : 1; - __OM uint32_t BC2 : 1; - __OM uint32_t BR3 : 1; - __OM uint32_t BC4 : 1; - __OM uint32_t BC5 : 1; - __OM uint32_t BC6 : 1; - __OM uint32_t BC7 : 1; - __OM uint32_t BC8 : 1; - __OM uint32_t BC9 : 1; - __OM uint32_t BC10 : 1; - __OM uint32_t BC11 : 1; - __OM uint32_t BC12 : 1; - __OM uint32_t BC13 : 1; - __OM uint32_t BC14 : 1; - __OM uint32_t BC15 : 1; - } BSC_B; - } ; - - /** Port bit clear register */ - union - { - __OM uint32_t BC; - - struct - { - __OM uint32_t BC0 : 1; - __OM uint32_t BC1 : 1; - __OM uint32_t BC2 : 1; - __OM uint32_t BC3 : 1; - __OM uint32_t BC4 : 1; - __OM uint32_t BC5 : 1; - __OM uint32_t BC6 : 1; - __OM uint32_t BC7 : 1; - __OM uint32_t BC8 : 1; - __OM uint32_t BC9 : 1; - __OM uint32_t BC10 : 1; - __OM uint32_t BC11 : 1; - __OM uint32_t BC12 : 1; - __OM uint32_t BC13 : 1; - __OM uint32_t BC14 : 1; - __OM uint32_t BC15 : 1; - __IM uint32_t RESERVED : 16; - } BC_B; - } ; - - /** Port configuration lock register */ - union - { - __IOM uint32_t LOCK; - - struct - { - __IOM uint32_t LOCK0 : 1; - __IOM uint32_t LOCK1 : 1; - __IOM uint32_t LOCK2 : 1; - __IOM uint32_t LOCK3 : 1; - __IOM uint32_t LOCK4 : 1; - __IOM uint32_t LOCK5 : 1; - __IOM uint32_t LOCK6 : 1; - __IOM uint32_t LOCK7 : 1; - __IOM uint32_t LOCK8 : 1; - __IOM uint32_t LOCK9 : 1; - __IOM uint32_t LOCK10 : 1; - __IOM uint32_t LOCK11 : 1; - __IOM uint32_t LOCK12 : 1; - __IOM uint32_t LOCK13 : 1; - __IOM uint32_t LOCK14 : 1; - __IOM uint32_t LOCK15 : 1; - __IOM uint32_t LOCKKEY : 1; - __IM uint32_t RESERVED : 16; - } LOCK_B; - } ; -} GPIO_T; - -/** - * @brief Alternate function I/O (AFIO) - */ -typedef struct -{ - /** Event control register */ - union - { - __IOM uint32_t EVCTRL; - - struct - { - __IOM uint32_t PINSEL : 4; - __IOM uint32_t PORTSEL : 3; - __IOM uint32_t EVOEN : 1; - __IM uint32_t RESERVED : 24; - } EVCTRL_B; - } ; - - /** Alternate function IO remap and Serial wire JTAG configuration register */ - union - { - __IOM uint32_t REMAP1; - - struct - { - __IOM uint32_t SPI1RMP : 1; - __IOM uint32_t I2C1RMP : 1; - __IOM uint32_t USART1RMP : 1; - __IOM uint32_t USART2RMP : 1; - __IOM uint32_t USART3RMP : 2; - __IOM uint32_t TMR1RMP : 2; - __IOM uint32_t TMR2RMP : 2; - __IOM uint32_t TMR3RMP : 2; - __IOM uint32_t TMR4RMP : 1; - __IOM uint32_t CAN1RMP : 2; - __IOM uint32_t PD01RMP : 1; - __IOM uint32_t TMR5CH4IRMP : 1; - __IOM uint32_t ADC1_ETRGINJC_RMP : 1; - __IOM uint32_t ADC1_ETRGREGC_RMP : 1; - __IOM uint32_t ADC2_ETRGINJC_RMP : 1; - __IOM uint32_t ADC2_ETRGREGC_RMP : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t CAN2RMP : 1; - __IM uint32_t RESERVED2 : 1; - __OM uint32_t SWJCFG : 3; - __IM uint32_t RESERVED3 : 5; - } REMAP1_B; - } ; - - /** External interrupt select register1 */ - union - { - __IOM uint32_t EINTSEL1; - - struct - { - __IOM uint32_t EINT0 : 4; - __IOM uint32_t EINT1 : 4; - __IOM uint32_t EINT2 : 4; - __IOM uint32_t EINT3 : 4; - __IM uint32_t RESERVED : 16; - } EINTSEL1_B; - } ; - - /** External interrupt select register2 */ - union - { - __IOM uint32_t EINTSEL2; - - struct - { - __IOM uint32_t EINT4 : 4; - __IOM uint32_t EINT5 : 4; - __IOM uint32_t EINT6 : 4; - __IOM uint32_t EINT7 : 4; - __IM uint32_t RESERVED : 16; - } EINTSEL2_B; - } ; - - /** External interrupt select register3 */ - union - { - __IOM uint32_t EINTSEL3; - - struct - { - __IOM uint32_t EINT8 : 4; - __IOM uint32_t EINT9 : 4; - __IOM uint32_t EINT10 : 4; - __IOM uint32_t EINT11 : 4; - __IM uint32_t RESERVED : 16; - } EINTSEL3_B; - } ; - - /** External interrupt select register4 */ - union - { - __IOM uint32_t EINTSEL4; - - struct - { - __IOM uint32_t EINT12 : 4; - __IOM uint32_t EINT13 : 4; - __IOM uint32_t EINT14 : 4; - __IOM uint32_t EINT15 : 4; - __IM uint32_t RESERVED : 16; - } EINTSEL4_B; - } ; - __IM uint32_t RESERVED; - - /** Alternate function IO remap register2 */ - union - { - __IOM uint32_t REMAP2; - - struct - { - __IM uint32_t RESERVED1 : 10; - __IOM uint32_t EMMCNADV : 1; - __IM uint32_t RESERVED2 : 21; - } REMAP2_B; - } ; -} AFIO_T; - -/** - * @brief Universal synchronous asynchronous receiver transmitter (USART) - */ -typedef struct -{ - /** Status register */ - union - { - __IOM uint32_t STS; - - struct - { - __IM uint32_t PEFLG : 1; - __IM uint32_t FEFLG : 1; - __IM uint32_t NEFLG : 1; - __IM uint32_t OVREFLG : 1; - __IM uint32_t IDLEFLG : 1; - __IOM uint32_t RXBNEFLG : 1; - __IOM uint32_t TXCFLG : 1; - __IM uint32_t TXBEFLG : 1; - __IOM uint32_t LBDFLG : 1; - __IOM uint32_t CTSFLG : 1; - __IM uint32_t RESERVED : 22; - } STS_B; - } ; - - /** TX Buffer Data Register */ - union - { - __IOM uint32_t DATA; - - struct - { - __IOM uint32_t DATA : 9; - __IM uint32_t RESERVED : 23; - } DATA_B; - } ; - - /** Baud rate register */ - union - { - __IOM uint32_t BR; - - struct - { - __IOM uint32_t FBR : 4; - __IOM uint32_t IBR : 12; - __IM uint32_t RESERVED : 16; - } BR_B; - } ; - - /** Control register 1 */ - union - { - __IOM uint32_t CTRL1; - - struct - { - __IOM uint32_t TXBF : 1; - __IOM uint32_t RXMUTEEN : 1; - __IOM uint32_t RXEN : 1; - __IOM uint32_t TXEN : 1; - __IOM uint32_t IDLEIEN : 1; - __IOM uint32_t RXBNEIEN : 1; - __IOM uint32_t TXCIEN : 1; - __IOM uint32_t TXBEIEN : 1; - __IOM uint32_t PEIEN : 1; - __IOM uint32_t PCFG : 1; - __IOM uint32_t PCEN : 1; - __IOM uint32_t WUPMCFG : 1; - __IOM uint32_t DBLCFG : 1; - __IOM uint32_t UEN : 1; - __IM uint32_t RESERVED : 18; - } CTRL1_B; - } ; - - /** Control register 2 */ - union - { - __IOM uint32_t CTRL2; - - struct - { - __IOM uint32_t ADDR : 4; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t LBDLCFG : 1; - __IOM uint32_t LBDIEN : 1; - __IM uint32_t RESERVED2 : 1; - __IOM uint32_t LBCPOEN : 1; - __IOM uint32_t CPHA : 1; - __IOM uint32_t CPOL : 1; - __IOM uint32_t CLKEN : 1; - __IOM uint32_t STOPCFG : 2; - __IOM uint32_t LINMEN : 1; - __IM uint32_t RESERVED3 : 17; - } CTRL2_B; - } ; - - /** Control register 3 */ - union - { - __IOM uint32_t CTRL3; - - struct - { - __IOM uint32_t ERRIEN : 1; - __IOM uint32_t IREN : 1; - __IOM uint32_t IRLPEN : 1; - __IOM uint32_t HDEN : 1; - __IOM uint32_t SCNACKEN : 1; - __IOM uint32_t SCEN : 1; - __IOM uint32_t DMARXEN : 1; - __IOM uint32_t DMATXEN : 1; - __IOM uint32_t RTSEN : 1; - __IOM uint32_t CTSEN : 1; - __IOM uint32_t CTSIEN : 1; - __IM uint32_t RESERVED : 21; - } CTRL3_B; - } ; - - /** Guard TMRe and divider number register */ - union - { - __IOM uint32_t GTPSC; - - struct - { - __IOM uint32_t PSC : 8; - __IOM uint32_t GRDT : 8; - __IM uint32_t RESERVED : 16; - } GTPSC_B; - } ; -} USART_T; - -/** - * @brief Flash memory controller(FMC) - */ -typedef struct -{ - /** FMC access control register */ - union - { - __IOM uint32_t CTRL1; - - struct - { - __IOM uint32_t WS : 3; - __IOM uint32_t HCAEN : 1; - __IOM uint32_t PBEN : 1; - __IM uint32_t PBSF : 1; - __IM uint32_t RESERVED : 26; - } CTRL1_B; - } ; - - /** key register */ - union - { - __OM uint32_t KEY; - - struct - { - __OM uint32_t KEY : 32; - } KEY_B; - } ; - - /** option byte key register */ - union - { - __OM uint32_t OBKEY; - - struct - { - __OM uint32_t OBKEY : 32; - } OBKEY_B; - }; - - /** status register */ - union - { - __IOM uint32_t STS; - - struct - { - __IM uint32_t BUSYF : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t PEF : 1; - __IM uint32_t RESERVED2 : 1; - __IOM uint32_t WPEF : 1; - __IOM uint32_t OCF : 1; - __IM uint32_t RESERVED3 : 26; - } STS_B; - }; - - /** status register */ - union - { - __IOM uint32_t CTRL2; - - struct - { - __IOM uint32_t PG : 1; - __IOM uint32_t PAGEERA : 1; - __IOM uint32_t MASSERA : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t OBP : 1; - __IOM uint32_t OBE : 1; - __IOM uint32_t STA : 1; - __IOM uint32_t LOCK : 1; - __IM uint32_t RESERVED2 : 1; - __IOM uint32_t OBWEN : 1; - __IOM uint32_t ERRIE : 1; - __IM uint32_t RESERVED3 : 1; - __IOM uint32_t OCIE : 1; - __IM uint32_t RESERVED4 : 19; - } CTRL2_B; - } ; - - /** address register */ - union - { - __OM uint32_t ADDR; - - struct - { - __OM uint32_t ADDR : 32; - } ADDR_B; - }; - - __IM uint32_t RESERVED; - - /** Option byte register */ - union - { - __IOM uint32_t OBCS; - - struct - { - __IM uint32_t OBE : 1; - __IM uint32_t READPROT : 1; - __IM uint32_t WDTSEL : 1; - __IM uint32_t RSTSTOP : 1; - __IM uint32_t RSTSTDB : 1; - __IM uint32_t UOB : 5; - __IM uint32_t DATA0 : 8; - __IM uint32_t DATA1 : 8; - __IM uint32_t RESERVED : 6; - } OBCS_B; - }; - - /** Write protection register */ - union - { - __IM uint32_t WRTPROT; - - struct - { - __IM uint32_t WRTPORT : 32; - } WRTPORT_B; - }; -} FMC_T; - -/** - * @brief CRC calculation unit (CRC) - */ -typedef struct -{ - /** @brief DATA register */ - union - { - __IOM uint32_t DATA; - - struct - { - __IOM uint32_t DATA : 32; - } DATA_B; - } ; - - /** @brief independent DATA register */ - union - { - __IOM uint32_t INDATA; - - struct - { - __IOM uint32_t INDATA : 8; - __IM uint32_t RESERVED : 24; - } INDATA_B; - }; - - /** @brief Countrol register */ - union - { - __IOM uint32_t CTRL; - - struct - { - __IOM uint32_t RST : 1; - __IM uint32_t RESERVED : 31; - } CTRL_B; - }; -} CRC_T; - -/** - * @brief Real time clock (RTC) - */ -typedef struct -{ - /** @brief Control register */ - union - { - __IOM uint32_t CTRL; - - struct - { - __IOM uint32_t SECIEN : 1; - __IOM uint32_t ALRIEN : 1; - __IOM uint32_t OVRIEN : 1; - __IM uint32_t RESERVED : 29; - } CTRL_B; - }; - - /** @brief Control and State register */ - union - { - __IOM uint32_t CSTS; - - struct - { - __IOM uint32_t SECFLG : 1; - __IOM uint32_t ALRFLG : 1; - __IOM uint32_t OVRFLG : 1; - __IOM uint32_t RSYNCFLG : 1; - __IOM uint32_t CFGMFLG : 1; - __IM uint32_t OCFLG : 1; - __IM uint32_t RESERVED : 26; - } CSTS_B; - }; - - /** @brief RTC predivision loading register High Bit */ - union - { - __OM uint32_t PSCRLDH; - - struct - { - __OM uint32_t PSCRLDH : 4; - __IM uint32_t RESERVED : 28; - } PSCRLDH_B; - }; - - /** @brief RTC predivision loading register Low Bit */ - union - { - __OM uint32_t PSCRLDL; - - struct - { - __OM uint32_t PSCRLDL : 16; - __IM uint32_t RESERVED : 16; - } PSCRLDL_B; - }; - - /** @brief RTC predivider remainder register High Bit */ - union - { - __IM uint32_t PSCH; - - struct - { - __IM uint32_t PSCH : 4; - __IM uint32_t RESERVED : 28; - } PSCH_B; - }; - - /** @brief RTC predivider remainder register Low Bit */ - union - { - __IM uint32_t PSCL; - - struct - { - __IM uint32_t PSCL : 16; - __IM uint32_t RESERVED : 16; - } PSCL_B; - }; - - /** @brief RTC count register High Bit */ - union - { - __IOM uint32_t CNTH; - - struct - { - __IOM uint32_t CNTH : 16; - __IM uint32_t RESERVED : 16; - } CNTH_B; - }; - - /** @brief RTC count register Low Bit */ - union - { - __IOM uint32_t CNTL; - - struct - { - __IOM uint32_t CNTL : 16; - __IM uint32_t RESERVED : 16; - } CNTL_B; - }; - - /** @brief RTC alarm clock register High Bit */ - union - { - __OM uint32_t ALRH; - - struct - { - __OM uint32_t ALRH : 16; - __IM uint32_t RESERVED : 16; - } ALRH_B; - }; - - /** @brief RTC alarm clock register Low Bit */ - union - { - __OM uint32_t ALRL; - - struct - { - __OM uint32_t ALRL : 16; - __IM uint32_t RESERVED : 16; - } ALRL_B; - }; -} RTC_T; - -/** - * @brief Power Management Unit(PMU) - */ -typedef struct -{ - /** @brief Control register */ - union - { - __IOM uint32_t CTRL; - - struct - { - __IOM uint32_t LPDSCFG : 1; - __IOM uint32_t PDDSCFG : 1; - __IOM uint32_t WUFLGCLR : 1; - __IOM uint32_t SBFLGCLR : 1; - __IOM uint32_t PVDEN : 1; - __IOM uint32_t PLSEL : 3; - __IOM uint32_t BPWEN : 1; - __IM uint32_t RESERVED : 23; - } CTRL_B; - }; - - /** @brief PMU Status register */ - union - { - __IOM uint32_t CSTS; - - struct - { - __IM uint32_t WUEFLG : 1; - __IM uint32_t SBFLG : 1; - __IM uint32_t PVDOFLG : 1; - __IM uint32_t RESERVED : 5; - __IOM uint32_t WKUPCFG : 1; - __IM uint32_t RESERVED2 : 23; - } CSTS_B; - }; -} PMU_T; - -/** - * @brief Backup register (BAKPR) - */ -typedef struct -{ - __IM uint32_t RESERVED; - - /** @brief BAKPR DATA1 register */ - union - { - __IOM uint32_t DATA1; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA1_B; - }; - - /** @brief BAKPR DATA2 register */ - union - { - __IOM uint32_t DATA2; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA2_B; - }; - - /** @brief BAKPR DATA3 register */ - union - { - __IOM uint32_t DATA3; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA3_B; - }; - - /** @brief BAKPR DATA4 register */ - union - { - __IOM uint32_t DATA4; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA4_B; - }; - - /** @brief BAKPR DATA5 register */ - union - { - __IOM uint32_t DATA5; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA5_B; - }; - - /** @brief BAKPR DATA6 register */ - union - { - __IOM uint32_t DATA6; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA6_B; - }; - - /** @brief BAKPR DATA7 register */ - union - { - __IOM uint32_t DATA7; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA7_B; - }; - - /** @brief BAKPR DATA8 register */ - union - { - __IOM uint32_t DATA8; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA8_B; - }; - - /** @brief BAKPR DATA9 register */ - union - { - __IOM uint32_t DATA9; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA9_B; - }; - - /** @brief BAKPR DATA10 register */ - union - { - __IOM uint32_t DATA10; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA10_B; - }; - - /** @brief BAKPR Clock Calibration register */ - union - { - __IOM uint32_t CLKCAL; - - struct - { - __IOM uint32_t CALVALUE : 7; - __IOM uint32_t CALCOEN : 1; - __IOM uint32_t ASPOEN : 1; - __IOM uint32_t ASPOSEL : 1; - __IM uint32_t RESERVED : 22; - } CLKCAL_B; - } ; - - /** @brief BAKPR Control register */ - union - { - __IOM uint32_t CTRL; - - struct - { - __IOM uint32_t TPFCFG : 1; - __IOM uint32_t TPALCFG : 1; - __IM uint32_t RESERVED : 30; - } CTRL_B; - }; - - /** @brief BAKPR Control register */ - union - { - __IOM uint32_t CSTS; - - struct - { - __OM uint32_t TECLR : 1; - __OM uint32_t TICLR : 1; - __IOM uint32_t TPIEN : 1; - __IM uint32_t RESERVED1 : 5; - __IM uint32_t TEFLG : 1; - __IM uint32_t TIFLG : 1; - __IM uint32_t RESERVED2 : 22; - } CSTS_B; - }; - - __IM uint32_t RESERVED1[2]; - - /** @briefBAKPR DATA11 register */ - union - { - __IOM uint32_t DATA11; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA11_B; - }; - - /** @briefBAKPR DATA12 register */ - union - { - __IOM uint32_t DATA12; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA12_B; - }; - - /** @briefBAKPR DATA13 register */ - union - { - __IOM uint32_t DATA13; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA13_B; - }; - - /** @briefBAKPR DATA14 register */ - union - { - __IOM uint32_t DATA14; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA14_B; - }; - - /** @briefBAKPR DATA15 register */ - union - { - __IOM uint32_t DATA15; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA15_B; - }; - - /** @briefBAKPR DATA16 register */ - union - { - __IOM uint32_t DATA16; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA16_B; - }; - - /** @briefBAKPR DATA17 register */ - union - { - __IOM uint32_t DATA17; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA17_B; - }; - - /** @briefBAKPR DATA18 register */ - union - { - __IOM uint32_t DATA18; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA18_B; - }; - - /** @briefBAKPR DATA19 register */ - union - { - __IOM uint32_t DATA19; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA19_B; - }; - - /** @briefBAKPR DATA20 register */ - union - { - __IOM uint32_t DATA20; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA20_B; - }; - - /** @briefBAKPR DATA21 register */ - union - { - __IOM uint32_t DATA21; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA21_B; - }; - - /** @briefBAKPR DATA22 register */ - union - { - __IOM uint32_t DATA22; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA22_B; - }; - - /** @briefBAKPR DATA23 register */ - union - { - __IOM uint32_t DATA23; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA23_B; - }; - - /** @briefBAKPR DATA24 register */ - union - { - __IOM uint32_t DATA24; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA24_B; - }; - - /** @briefBAKPR DATA25 register */ - union - { - __IOM uint32_t DATA25; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA25_B; - }; - - /** @briefBAKPR DATA26 register */ - union - { - __IOM uint32_t DATA26; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA26_B; - }; - - /** @briefBAKPR DATA27 register */ - union - { - __IOM uint32_t DATA27; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA27_B; - }; - - /** @briefBAKPR DATA28 register */ - union - { - __IOM uint32_t DATA28; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA28_B; - }; - - /** @briefBAKPR DATA29 register */ - union - { - __IOM uint32_t DATA29; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA29_B; - }; - - /** @briefBAKPR DATA30 register */ - union - { - __IOM uint32_t DATA30; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA30_B; - }; - - /** @briefBAKPR DATA31 register */ - union - { - __IOM uint32_t DATA31; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA31_B; - }; - - /** @briefBAKPR DATA32 register */ - union - { - __IOM uint32_t DATA32; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA32_B; - }; - - /** @briefBAKPR DATA33 register */ - union - { - __IOM uint32_t DATA33; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA33_B; - }; - - /** @briefBAKPR DATA34 register */ - union - { - __IOM uint32_t DATA34; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA34_B; - }; - - /** @briefBAKPR DATA35 register */ - union - { - __IOM uint32_t DATA35; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA35_B; - }; - - /** @briefBAKPR DATA36 register */ - union - { - __IOM uint32_t DATA36; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA36_B; - }; - - /** @briefBAKPR DATA37 register */ - union - { - __IOM uint32_t DATA37; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA37_B; - }; - - /** @briefBAKPR DATA38 register */ - union - { - __IOM uint32_t DATA38; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA38_B; - }; - - /** @briefBAKPR DATA39 register */ - union - { - __IOM uint32_t DATA39; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA39_B; - }; - - /** @briefBAKPR DATA40 register */ - union - { - __IOM uint32_t DATA40; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA40_B; - }; - - /** @briefBAKPR DATA41 register */ - union - { - __IOM uint32_t DATA41; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA41_B; - }; - - /** @briefBAKPR DATA42 register */ - union - { - __IOM uint32_t DATA42; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA42_B; - }; -} BAKPR_T; - -/** - * @brief Timer register(TMR) - */ -typedef struct -{ - /** @brief Countrol register 1 */ - union - { - __IOM uint32_t CTRL1; - - struct - { - __IOM uint32_t CNTEN : 1; - __IOM uint32_t UD : 1; - __IOM uint32_t URSSEL : 1; - __IOM uint32_t SPMEN : 1; - __IOM uint32_t CNTDIR : 1; - __IOM uint32_t CAMSEL : 2; - __IOM uint32_t ARPEN : 1; - __IOM uint32_t CLKDIV : 2; - __IM uint32_t RESERVED : 22; - } CTRL1_B; - }; - - /** @brief Countrol register 2 */ - union - { - __IOM uint32_t CTRL2; - - struct - { - __IOM uint32_t CCPEN : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t CCUSEL : 1; - __IOM uint32_t CCDSEL : 1; - __IOM uint32_t MMSEL : 3; - __IOM uint32_t TI1SEL : 1; - __IOM uint32_t OC1OIS : 1; - __IOM uint32_t OC1NOIS : 1; - __IOM uint32_t OC2OIS : 1; - __IOM uint32_t OC2NOIS : 1; - __IOM uint32_t OC3OIS : 1; - __IOM uint32_t OC3NOIS : 1; - __IOM uint32_t OC4OIS : 1; - __IM uint32_t RESERVED2 : 17; - } CTRL2_B; - }; - - /** @brief Control register from mode */ - union - { - __IOM uint32_t SMCTRL; - - struct - { - __IOM uint32_t SMFSEL : 3; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t TRGSEL : 3; - __IOM uint32_t MSMEN : 1; - __IOM uint32_t ETFCFG : 4; - __IOM uint32_t ETPCFG : 2; - __IOM uint32_t ECEN : 1; - __IOM uint32_t ETPOL : 1; - __IM uint32_t RESERVED2 : 16; - } SMCTRL_B; - }; - - /** @brief DMA and Interrupt enable register */ - union - { - __IOM uint32_t DIEN; - - struct - { - __IOM uint32_t UIEN : 1; - __IOM uint32_t CC1IEN : 1; - __IOM uint32_t CC2IEN : 1; - __IOM uint32_t CC3IEN : 1; - __IOM uint32_t CC4IEN : 1; - __IOM uint32_t COMIEN : 1; - __IOM uint32_t TRGIEN : 1; - __IOM uint32_t BRKIEN : 1; - __IOM uint32_t UDIEN : 1; - __IOM uint32_t CC1DEN : 1; - __IOM uint32_t CC2DEN : 1; - __IOM uint32_t CC3DEN : 1; - __IOM uint32_t CC4DEN : 1; - __IOM uint32_t COMDEN : 1; - __IOM uint32_t TRGDEN : 1; - __IM uint32_t RESERVED : 17; - } DIEN_B; - }; - - /** @brief Status register */ - union - { - __IOM uint32_t STS; - - struct - { - __IOM uint32_t UIFLG : 1; - __IOM uint32_t CC1IFLG : 1; - __IOM uint32_t CC2IFLG : 1; - __IOM uint32_t CC3IFLG : 1; - __IOM uint32_t CC4IFLG : 1; - __IOM uint32_t COMIFLG : 1; - __IOM uint32_t TRGIFLG : 1; - __IOM uint32_t BRKIFLG : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t CC1RCFLG : 1; - __IOM uint32_t CC2RCFLG : 1; - __IOM uint32_t CC3RCFLG : 1; - __IOM uint32_t CC4RCFLG : 1; - __IM uint32_t RESERVED2 : 19; - } STS_B; - }; - - /** @brief Software controls event generation registers */ - union - { - __OM uint32_t CEG; - - struct - { - __OM uint32_t UEG : 1; - __OM uint32_t CC1EG : 1; - __OM uint32_t CC2EG : 1; - __OM uint32_t CC3EG : 1; - __OM uint32_t CC4EG : 1; - __OM uint32_t COMG : 1; - __OM uint32_t TEG : 1; - __OM uint32_t BEG : 1; - __IM uint32_t RESERVED : 24; - } CEG_B; - }; - - /** @brief Capture the compare mode register 1 */ - union - { - __IOM uint32_t CCM1; - - /** @brief Compare mode */ - struct - { - __IOM uint32_t CC1SEL : 2; - __IOM uint32_t OC1FEN : 1; - __IOM uint32_t OC1PEN : 1; - __IOM uint32_t OC1MOD : 3; - __IOM uint32_t OC1CEN : 1; - __IOM uint32_t CC2SEL : 2; - __IOM uint32_t OC2FEN : 1; - __IOM uint32_t OC2PEN : 1; - __IOM uint32_t OC2MOD : 3; - __IOM uint32_t OC2CEN : 1; - __IM uint32_t RESERVED : 16; - } CCM1_COMPARE_B; - - /** @brief Capture mode */ - struct - { - __IOM uint32_t CC1SEL : 2; - __IOM uint32_t IC1PSC : 2; - __IOM uint32_t IC1F : 4; - __IOM uint32_t CC2SEL : 2; - __IOM uint32_t IC2PSC : 2; - __IOM uint32_t IC2F : 4; - __IM uint32_t RESERVED : 16; - } CCM1_CAPTURE_B; - }; - - /** @brief Capture the compare mode register 2 */ - union - { - __IOM uint32_t CCM2; - - /** @brief Compare mode */ - struct - { - __IOM uint32_t CC3SEL : 2; - __IOM uint32_t OC3FEN : 1; - __IOM uint32_t OC3PEN : 1; - __IOM uint32_t OC3MOD : 3; - __IOM uint32_t OC3CEN : 1; - __IOM uint32_t CC4SEL : 2; - __IOM uint32_t OC4FEN : 1; - __IOM uint32_t OC4PEN : 1; - __IOM uint32_t OC4MOD : 3; - __IOM uint32_t OC4CEN : 1; - __IM uint32_t RESERVED : 16; - } CCM2_COMPARE_B; - - /** @brief Capture mode */ - struct - { - __IOM uint32_t CC3SEL : 2; - __IOM uint32_t IC3PSC : 2; - __IOM uint32_t IC3F : 4; - __IOM uint32_t CC4SEL : 2; - __IOM uint32_t IC4PSC : 2; - __IOM uint32_t IC4F : 4; - __IM uint32_t RESERVED : 16; - } CCM2_CAPTURE_B; - }; - - /** @brief Channel control register */ - union - { - __IOM uint32_t CCEN; - - struct - { - __IOM uint32_t CC1EN : 1; - __IOM uint32_t CC1POL : 1; - __IOM uint32_t CC1NEN : 1; - __IOM uint32_t CC1NPOL : 1; - __IOM uint32_t CC2EN : 1; - __IOM uint32_t CC2POL : 1; - __IOM uint32_t CC2NEN : 1; - __IOM uint32_t CC2NPOL : 1; - __IOM uint32_t CC3EN : 1; - __IOM uint32_t CC3POL : 1; - __IOM uint32_t CC3NEN : 1; - __IOM uint32_t CC3NPOL : 1; - __IOM uint32_t CC4EN : 1; - __IOM uint32_t CC4POL : 1; - __IM uint32_t RESERVED : 18; - } CCEN_B; - }; - - /** @brief Counting register */ - union - { - __IOM uint32_t CNT; - - struct - { - __IOM uint32_t CNT : 16; - __IM uint32_t RESERVED : 16; - } CNT_B; - }; - - /** @brief Division register */ - union - { - __IOM uint32_t PSC; - - struct - { - __IOM uint32_t PSC : 16; - __IM uint32_t RESERVED : 16; - } PSC_B; - }; - - /** @brief Automatic reload register */ - union - { - __IOM uint32_t AUTORLD; - - struct - { - __IOM uint32_t AUTORLD : 16; - __IM uint32_t RESERVED : 16; - } AUTORLD_B; - }; - - /** @brief Repeat count register */ - union - { - __IOM uint32_t REPCNT; - - struct - { - __IOM uint32_t REPCNT : 8; - __IM uint32_t RESERVED : 24; - } REPCNT_B; - }; - - /** @brief Capture comparison register channel 1 */ - union - { - __IOM uint32_t CC1; - - struct - { - __IOM uint32_t CC1 : 16; - __IM uint32_t RESERVED : 16; - } CC1_B; - }; - - /** @brief Capture comparison register channel 2 */ - union - { - __IOM uint32_t CC2; - - struct - { - __IOM uint32_t CC2 : 16; - __IM uint32_t RESERVED : 16; - } CC2_B; - }; - - /** @brief Capture comparison register channel 3 */ - union - { - __IOM uint32_t CC3; - - struct - { - __IOM uint32_t CC3 : 16; - __IM uint32_t RESERVED : 16; - } CC3_B; - }; - - /** @brief Capture comparison register channel 4 */ - union - { - __IOM uint32_t CC4; - - struct - { - __IOM uint32_t CC4 : 16; - __IM uint32_t RESERVED : 16; - } CC4_B; - }; - - /** @brief Brake and dead zone registers */ - union - { - __IOM uint32_t BDT; - - struct - { - __IOM uint32_t DTS : 8; - __IOM uint32_t LOCKCFG : 2; - __IOM uint32_t IMOS : 1; - __IOM uint32_t RMOS : 1; - __IOM uint32_t BRKEN : 1; - __IOM uint32_t BRKPOL : 1; - __IOM uint32_t AOEN : 1; - __IOM uint32_t MOEN : 1; - __IM uint32_t RESERVED : 16; - } BDT_B; - }; - - /** @brief DMA control register */ - union - { - __IOM uint32_t DCTRL; - - struct - { - __IOM uint32_t DBADDR : 5; - __IM uint32_t RESERVED1 : 3; - __IOM uint32_t DBLEN : 5; - __IM uint32_t RESERVED2 : 19; - } DCTRL_B; - }; - - /** @brief Consecutive DMA addresses */ - union - { - __IOM uint32_t DMADDR; - struct - { - __IOM uint32_t DMADDR : 16; - __IM uint32_t RESERVED2 : 16; - } DMADDR_B; - }; -} TMR_T; - -/** - * @brief Direct Memory Access register(DMA) - */ -typedef struct -{ - /** @brief Interrupt status register */ - union - { - __IM uint32_t INTSTS; - - struct - { - __IM uint32_t GINTFLG1 : 1; - __IM uint32_t TCFLG1 : 1; - __IM uint32_t HTFLG1 : 1; - __IM uint32_t TERRFLG1 : 1; - __IM uint32_t GINTFLG2 : 1; - __IM uint32_t TCFLG2 : 1; - __IM uint32_t HTFLG2 : 1; - __IM uint32_t TERRFLG2 : 1; - __IM uint32_t GINTFLG3 : 1; - __IM uint32_t TCFLG3 : 1; - __IM uint32_t HTFLG3 : 1; - __IM uint32_t TERRFLG3 : 1; - __IM uint32_t GINTFLG4 : 1; - __IM uint32_t TCFLG4 : 1; - __IM uint32_t HTFLG4 : 1; - __IM uint32_t TERRFLG4 : 1; - __IM uint32_t GINTFLG5 : 1; - __IM uint32_t TCFLG5 : 1; - __IM uint32_t HTFLG5 : 1; - __IM uint32_t TERRFLG5 : 1; - __IM uint32_t GINTFLG6 : 1; - __IM uint32_t TCFLG6 : 1; - __IM uint32_t HTFLG6 : 1; - __IM uint32_t TERRFLG6 : 1; - __IM uint32_t GINTFLG7 : 1; - __IM uint32_t TCFLG7 : 1; - __IM uint32_t HTFLG7 : 1; - __IM uint32_t TERRFLG7 : 1; - __IM uint32_t RESERVED : 4; - } INTSTS_B; - }; - - /** @brief Interrupt reset register */ - union - { - __OM uint32_t INTFCLR; - - struct - { - __OM uint32_t GINTCLR1 : 1; - __OM uint32_t TCCLR1 : 1; - __OM uint32_t HTCLR1 : 1; - __OM uint32_t TERRCLR1 : 1; - __OM uint32_t GINTCLR2 : 1; - __OM uint32_t TCCLR2 : 1; - __OM uint32_t HTCLR2 : 1; - __OM uint32_t TERRCLR2 : 1; - __OM uint32_t GINTCLR3 : 1; - __OM uint32_t TCCLR3 : 1; - __OM uint32_t HTCLR3 : 1; - __OM uint32_t TERRCLR3 : 1; - __OM uint32_t GINTCLR4 : 1; - __OM uint32_t TCCLR4 : 1; - __OM uint32_t HTCLR4 : 1; - __OM uint32_t TERRCLR4 : 1; - __OM uint32_t GINTCLR5 : 1; - __OM uint32_t TCCLR5 : 1; - __OM uint32_t HTCLR5 : 1; - __OM uint32_t TERRCLR5 : 1; - __OM uint32_t GINTCLR6 : 1; - __OM uint32_t TCCLR6 : 1; - __OM uint32_t HTCLR6 : 1; - __OM uint32_t TERRCLR6 : 1; - __OM uint32_t GINTCLR7 : 1; - __OM uint32_t TCCLR7 : 1; - __OM uint32_t HTCLR7 : 1; - __OM uint32_t TERRCLR7 : 1; - __IM uint32_t RESERVED : 4; - } INTFCLR_B; - }; -} DMA_T; - -/** - * @brief DMA Channel register - */ -typedef struct -{ - /** @brief DMA Channel setup register */ - union - { - - __IOM uint32_t CHCFG; - - struct - { - __IOM uint32_t CHEN : 1; - __IOM uint32_t TCINTEN : 1; - __IOM uint32_t HTINTEN : 1; - __IOM uint32_t TERRINTEN : 1; - __IOM uint32_t DIRCFG : 1; - __IOM uint32_t CIRMODE : 1; - __IOM uint32_t PERIMODE : 1; - __IOM uint32_t MIMODE : 1; - __IOM uint32_t PERSIZE : 2; - __IOM uint32_t MEMSIZE : 2; - __IOM uint32_t CHPL : 2; - __IOM uint32_t M2MMODE : 1; - __IM uint32_t RESERVED : 17; - } CHCFG_B; - }; - - /** @brief DMA Channel transfer number register*/ - union - { - __IOM uint32_t CHNDATA; - - struct - { - __IOM uint32_t NDATA : 16; - __IM uint32_t RESERVED : 16; - } CHNDATA_B; - }; - - /** @brief DMA Channel peripheral address register */ - union - { - __IOM uint32_t CHPADDR; - - struct - { - __IOM uint32_t PERADDR : 32; - } CHPADDR_B; - }; - - /** @brief DMA Channel memory address register */ - union - { - __IOM uint32_t CHMADDR; - - struct - { - __IOM uint32_t MEMADDR : 32; - } CHMADDR_B; - }; -} DMA_Channel_T; - -/** - * @brief CAN sending mailbox - */ -typedef struct -{ - /** @brief CAN Each mailbox contains the sending mailbox identifier register */ - union - { - __IOM uint32_t TXMID; - - struct - { - __IOM uint32_t TXMREQ : 1; - __IOM uint32_t TXRFREQ : 1; - __IOM uint32_t IDTYPESEL : 1; - __IOM uint32_t EXTID : 18; - __IOM uint32_t STDID : 11; - } TXMID_B; - }; - - /** @brief CAN Send the mailbox data length and timestamp register */ - union - { - __IOM uint32_t TXDLEN; - - struct - { - __IOM uint32_t DLCODE : 4; - __IOM uint32_t RESERVED : 28; - } TXDLEN_B; - }; - - /** @brief CAN Send mailbox low byte data register */ - union - { - __IOM uint32_t TXMDL; - - struct - { - __IOM uint32_t DATABYTE0 : 8; - __IOM uint32_t DATABYTE1 : 8; - __IOM uint32_t DATABYTE2 : 8; - __IOM uint32_t DATABYTE3 : 8; - } TXMDL_B; - }; - - /** @brief CAN Send mailbox High byte data register */ - union - { - __IOM uint32_t TXMDH; - - struct - { - __IOM uint32_t DATABYTE4 : 8; - __IOM uint32_t DATABYTE5 : 8; - __IOM uint32_t DATABYTE6 : 8; - __IOM uint32_t DATABYTE7 : 8; - } TXMDH_B; - }; -} CAN_TxMailBox_T; - -/** - * @brief CAN receive mailbox - */ -typedef struct -{ - /** @brief CAN Each mailbox contains the receive mailbox identifier register */ - union - { - __IM uint32_t RXMID; - - struct - { - __IM uint32_t RESERVED : 1; - __IM uint32_t RFTXREQ : 1; - __IM uint32_t IDTYPESEL : 1; - __IM uint32_t EXTID : 18; - __IM uint32_t STDID : 11; - } RXMID_B; - }; - - /** @brief CAN receive the mailbox data length and timestamp register */ - union - { - __IM uint32_t RXDLEN; - - struct - { - __IM uint32_t DLCODE : 4; - __IM uint32_t RESERVED1 : 4; - __IM uint32_t FMIDX : 8; - __IM uint32_t RESERVED2 : 16; - } RXDLEN_B; - }; - - /** @brief CAN receive mailbox low byte data register */ - union - { - __IM uint32_t RXMDL; - - struct - { - __IM uint32_t DATABYTE0 : 8; - __IM uint32_t DATABYTE1 : 8; - __IM uint32_t DATABYTE2 : 8; - __IM uint32_t DATABYTE3 : 8; - } RXMDL_B; - }; - - /** @briefCAN receive mailbox High byte data register */ - union - { - __IOM uint32_t RXMDH; - - struct - { - __IM uint32_t DATABYTE4 : 8; - __IM uint32_t DATABYTE5 : 8; - __IM uint32_t DATABYTE6 : 8; - __IM uint32_t DATABYTE7 : 8; - } RXMDH_B; - }; -} CAN_RxMailBox_T; - -/** - * @brief CAN Filter bank register - */ -typedef struct -{ - /** @brief CAN Filter bank register 1 */ - union - { - __IOM uint32_t FBANK1; - - struct - { - __IOM uint32_t FBIT0 : 1; - __IOM uint32_t FBIT1 : 1; - __IOM uint32_t FBIT2 : 1; - __IOM uint32_t FBIT3 : 1; - __IOM uint32_t FBIT4 : 1; - __IOM uint32_t FBIT5 : 1; - __IOM uint32_t FBIT6 : 1; - __IOM uint32_t FBIT7 : 1; - __IOM uint32_t FBIT8 : 1; - __IOM uint32_t FBIT9 : 1; - __IOM uint32_t FBIT10 : 1; - __IOM uint32_t FBIT11 : 1; - __IOM uint32_t FBIT12 : 1; - __IOM uint32_t FBIT13 : 1; - __IOM uint32_t FBIT14 : 1; - __IOM uint32_t FBIT15 : 1; - __IOM uint32_t FBIT16 : 1; - __IOM uint32_t FBIT17 : 1; - __IOM uint32_t FBIT18 : 1; - __IOM uint32_t FBIT19 : 1; - __IOM uint32_t FBIT20 : 1; - __IOM uint32_t FBIT21 : 1; - __IOM uint32_t FBIT22 : 1; - __IOM uint32_t FBIT23 : 1; - __IOM uint32_t FBIT24 : 1; - __IOM uint32_t FBIT25 : 1; - __IOM uint32_t FBIT26 : 1; - __IOM uint32_t FBIT27 : 1; - __IOM uint32_t FBIT28 : 1; - __IOM uint32_t FBIT29 : 1; - __IOM uint32_t FBIT30 : 1; - __IOM uint32_t FBIT31 : 1; - } FBANK1_B; - }; - - /** @brief CAN Filter bank register 2 */ - union - { - __IOM uint32_t FBANK2; - - struct - { - __IOM uint32_t FBIT0 : 1; - __IOM uint32_t FBIT1 : 1; - __IOM uint32_t FBIT2 : 1; - __IOM uint32_t FBIT3 : 1; - __IOM uint32_t FBIT4 : 1; - __IOM uint32_t FBIT5 : 1; - __IOM uint32_t FBIT6 : 1; - __IOM uint32_t FBIT7 : 1; - __IOM uint32_t FBIT8 : 1; - __IOM uint32_t FBIT9 : 1; - __IOM uint32_t FBIT10 : 1; - __IOM uint32_t FBIT11 : 1; - __IOM uint32_t FBIT12 : 1; - __IOM uint32_t FBIT13 : 1; - __IOM uint32_t FBIT14 : 1; - __IOM uint32_t FBIT15 : 1; - __IOM uint32_t FBIT16 : 1; - __IOM uint32_t FBIT17 : 1; - __IOM uint32_t FBIT18 : 1; - __IOM uint32_t FBIT19 : 1; - __IOM uint32_t FBIT20 : 1; - __IOM uint32_t FBIT21 : 1; - __IOM uint32_t FBIT22 : 1; - __IOM uint32_t FBIT23 : 1; - __IOM uint32_t FBIT24 : 1; - __IOM uint32_t FBIT25 : 1; - __IOM uint32_t FBIT26 : 1; - __IOM uint32_t FBIT27 : 1; - __IOM uint32_t FBIT28 : 1; - __IOM uint32_t FBIT29 : 1; - __IOM uint32_t FBIT30 : 1; - __IOM uint32_t FBIT31 : 1; - } FBANK2_B; - }; -} CAN_FilterRegister_T; - -/** - * @brief Controller Area Network(CAN) - */ -typedef struct -{ - /** @brief CAN Master control register */ - union - { - __IOM uint32_t MCTRL; - - struct - { - __IOM uint32_t INITREQ : 1; - __IOM uint32_t SLEEPREQ : 1; - __IOM uint32_t TXFPCFG : 1; - __IOM uint32_t RXFLOCK : 1; - __IOM uint32_t ARTXMD : 1; - __IOM uint32_t AWUPCFG : 1; - __IOM uint32_t ALBOFFM : 1; - __IM uint32_t RESERVED1 : 8; - __IOM uint32_t SWRST : 1; - __IOM uint32_t DBGFRZE : 1; - __IM uint32_t RESERVED2 : 15; - } MCTRL_B; - }; - - /** @brief CAN Master States register */ - union - { - __IOM uint32_t MSTS; - - struct - { - __IM uint32_t INITFLG : 1; - __IM uint32_t SLEEPFLG : 1; - __IOM uint32_t ERRIFLG : 1; - __IOM uint32_t WUPIFLG : 1; - __IOM uint32_t SLEEPIFLG : 1; - __IM uint32_t RESERVED1 : 3; - __IM uint32_t TXMFLG : 1; - __IM uint32_t RXMFLG : 1; - __IM uint32_t LSAMVALUE : 1; - __IM uint32_t RXSIGL : 1; - __IM uint32_t RESERVED2 : 20; - } MSTS_B; - }; - - /** @brief CAN Send States register */ - union - { - __IOM uint32_t TXSTS; - - struct - { - __IOM uint32_t REQCFLG0 : 1; - __IOM uint32_t TXSUSFLG0 : 1; - __IOM uint32_t ARBLSTFLG0 : 1; - __IOM uint32_t TXERRFLG0 : 1; - __IM uint32_t RESERVED1 : 3; - __IOM uint32_t ABREQFLG0 : 1; - __IOM uint32_t REQCFLG1 : 1; - __IOM uint32_t TXSUSFLG1 : 1; - __IOM uint32_t ARBLSTFLG1 : 1; - __IOM uint32_t TXERRFLG1 : 1; - __IM uint32_t RESERVED2 : 3; - __IOM uint32_t ABREQFLG1 : 1; - __IOM uint32_t REQCFLG2 : 1; - __IOM uint32_t TXSUSFLG2 : 1; - __IOM uint32_t ARBLSTFLG2 : 1; - __IOM uint32_t TXERRFLG2 : 1; - __IM uint32_t RESERVED3 : 3; - __IOM uint32_t ABREQFLG2 : 1; - __IM uint32_t EMNUM : 2; - __IM uint32_t TXMEFLG0 : 1; - __IM uint32_t TXMEFLG1 : 1; - __IM uint32_t TXMEFLG2 : 1; - __IM uint32_t LOWESTP0 : 1; - __IM uint32_t LOWESTP1 : 1; - __IM uint32_t LOWESTP2 : 1; - } TXSTS_B; - }; - - /** @brief CAN Receive FIFO 0 register */ - union - { - __IOM uint32_t RXF0; - - struct - { - __IM uint32_t FMNUM0 : 2; - __IM uint32_t RESERVED : 1; - __IOM uint32_t FFULLFLG0 : 1; - __IOM uint32_t FOVRFLG0 : 1; - __IOM uint32_t RFOM0 : 1; - __IM uint32_t RESERVED1 : 26; - } RXF0_B; - }; - - /** @brief CAN Receive FIFO 1 register */ - union - { - __IOM uint32_t RXF1; - - struct - { - __IM uint32_t FMNUM1 : 2; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t FFULLFLG1 : 1; - __IOM uint32_t FOVRFLG1 : 1; - __IOM uint32_t RFOM1 : 1; - __IM uint32_t RESERVED2 : 26; - } RXF1_B; - }; - - /** @brief CAN Interrupts register */ - union - { - __IOM uint32_t INTEN; - - struct - { - __IOM uint32_t TXMEIEN : 1; - __IOM uint32_t FMIEN0 : 1; - __IOM uint32_t FFULLIEN0 : 1; - __IOM uint32_t FOVRIEN0 : 1; - __IOM uint32_t FMIEN1 : 1; - __IOM uint32_t FFULLIEN1 : 1; - __IOM uint32_t FOVRIEN1 : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t ERRWIEN : 1; - __IOM uint32_t ERRPIEN : 1; - __IOM uint32_t BOFFIEN : 1; - __IOM uint32_t LECIEN : 1; - __IM uint32_t RESERVED2 : 3; - __IOM uint32_t ERRIEN : 1; - __IOM uint32_t WUPIEN : 1; - __IOM uint32_t SLEEPIEN : 1; - __IM uint32_t RESERVED3 : 14; - } INTEN_B; - }; - - /** @brief CAN Error States register */ - union - { - __IOM uint32_t ERRSTS; - - struct - { - __IM uint32_t ERRWFLG : 1; - __IM uint32_t ERRPFLG : 1; - __IM uint32_t BOFLG : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t LERRC : 3; - __IM uint32_t RESERVED2 : 9; - __IM uint32_t TXERRCNT : 8; - __IM uint32_t RXERRCNT : 8; - } ERRSTS_B; - }; - - /** @brief CAN Bit Time register */ - union - { - __IOM uint32_t BITTIM; - - struct - { - __IOM uint32_t BRPSC : 10; - __IM uint32_t RESERVED1 : 6; - __IOM uint32_t TIMSEG1 : 4; - __IOM uint32_t TIMSEG2 : 3; - __IM uint32_t RESERVED2 : 1; - __IOM uint32_t RSYNJW : 2; - __IM uint32_t RESERVED3 : 4; - __IOM uint32_t LBKMEN : 1; - __IOM uint32_t SILMEN : 1; - } BITTIM_B; - }; - - __IM uint32_t RESERVED0[88]; - - CAN_TxMailBox_T sTxMailBox[3]; - CAN_RxMailBox_T sRxMailBox[2]; - - __IM uint32_t RESERVED1[12]; - - /** @brief CAN Filter the master control register */ - union - { - __IOM uint32_t FCTRL; - - struct - { - __IOM uint32_t FINITEN : 1; - __IM uint32_t RESERVED : 7; - __IOM uint32_t CAN2BN : 6; - __IM uint32_t RESERVED1 : 18; - } FCTRL_B; - }; - - /** @brief CAN Filter register */ - union - { - __IOM uint32_t FMCFG; - - struct - { - __IOM uint32_t FMCFG0 : 1; - __IOM uint32_t FMCFG1 : 1; - __IOM uint32_t FMCFG2 : 1; - __IOM uint32_t FMCFG3 : 1; - __IOM uint32_t FMCFG4 : 1; - __IOM uint32_t FMCFG5 : 1; - __IOM uint32_t FMCFG6 : 1; - __IOM uint32_t FMCFG7 : 1; - __IOM uint32_t FMCFG8 : 1; - __IOM uint32_t FMCFG9 : 1; - __IOM uint32_t FMCFG10 : 1; - __IOM uint32_t FMCFG11 : 1; - __IOM uint32_t FMCFG12 : 1; - __IOM uint32_t FMCFG13 : 1; - __IOM uint32_t FMCFG14 : 1; - __IOM uint32_t FMCFG15 : 1; - __IOM uint32_t FMCFG16 : 1; - __IOM uint32_t FMCFG17 : 1; - __IOM uint32_t FMCFG18 : 1; - __IOM uint32_t FMCFG19 : 1; - __IOM uint32_t FMCFG20 : 1; - __IOM uint32_t FMCFG21 : 1; - __IOM uint32_t FMCFG22 : 1; - __IOM uint32_t FMCFG23 : 1; - __IOM uint32_t FMCFG24 : 1; - __IOM uint32_t FMCFG25 : 1; - __IOM uint32_t FMCFG26 : 1; - __IOM uint32_t FMCFG27 : 1; - __IM uint32_t RESERVED : 4; - } FMCFG_B; - }; - - __IM uint32_t RESERVED2; - - /** @brief CAN Filter bit scale register */ - union - { - __IOM uint32_t FSCFG; - - struct - { - __IOM uint32_t FSCFG0 : 1; - __IOM uint32_t FSCFG1 : 1; - __IOM uint32_t FSCFG2 : 1; - __IOM uint32_t FSCFG3 : 1; - __IOM uint32_t FSCFG4 : 1; - __IOM uint32_t FSCFG5 : 1; - __IOM uint32_t FSCFG6 : 1; - __IOM uint32_t FSCFG7 : 1; - __IOM uint32_t FSCFG8 : 1; - __IOM uint32_t FSCFG9 : 1; - __IOM uint32_t FSCFG10 : 1; - __IOM uint32_t FSCFG11 : 1; - __IOM uint32_t FSCFG12 : 1; - __IOM uint32_t FSCFG13 : 1; - __IOM uint32_t FSCFG14 : 1; - __IOM uint32_t FSCFG15 : 1; - __IOM uint32_t FSCFG16 : 1; - __IOM uint32_t FSCFG17 : 1; - __IOM uint32_t FSCFG18 : 1; - __IOM uint32_t FSCFG19 : 1; - __IOM uint32_t FSCFG20 : 1; - __IOM uint32_t FSCFG21 : 1; - __IOM uint32_t FSCFG22 : 1; - __IOM uint32_t FSCFG23 : 1; - __IOM uint32_t FSCFG24 : 1; - __IOM uint32_t FSCFG25 : 1; - __IOM uint32_t FSCFG26 : 1; - __IOM uint32_t FSCFG27 : 1; - __IM uint32_t RESERVED : 4; - }FSCFG_B; - }; - - __IM uint32_t RESERVED3; - - /** @brief CAN Filter FIFO associated registers */ - union - { - __IOM uint32_t FFASS; - - struct - { - __IOM uint32_t FFASS0 : 1; - __IOM uint32_t FFASS1 : 1; - __IOM uint32_t FFASS2 : 1; - __IOM uint32_t FFASS3 : 1; - __IOM uint32_t FFASS4 : 1; - __IOM uint32_t FFASS5 : 1; - __IOM uint32_t FFASS6 : 1; - __IOM uint32_t FFASS7 : 1; - __IOM uint32_t FFASS8 : 1; - __IOM uint32_t FFASS9 : 1; - __IOM uint32_t FFASS10 : 1; - __IOM uint32_t FFASS11 : 1; - __IOM uint32_t FFASS12 : 1; - __IOM uint32_t FFASS13 : 1; - __IOM uint32_t FFASS14 : 1; - __IOM uint32_t FFASS15 : 1; - __IOM uint32_t FFASS16 : 1; - __IOM uint32_t FFASS17 : 1; - __IOM uint32_t FFASS18 : 1; - __IOM uint32_t FFASS19 : 1; - __IOM uint32_t FFASS20 : 1; - __IOM uint32_t FFASS21 : 1; - __IOM uint32_t FFASS22 : 1; - __IOM uint32_t FFASS23 : 1; - __IOM uint32_t FFASS24 : 1; - __IOM uint32_t FFASS25 : 1; - __IOM uint32_t FFASS26 : 1; - __IOM uint32_t FFASS27 : 1; - __IM uint32_t RESERVED : 4; - } FFASS_B; - }; - - __IM uint32_t RESERVED4; - - /** @brief CAN Filter activation register */ - union - { - __IOM uint32_t FACT; - - struct - { - __IOM uint32_t FACT0 : 1; - __IOM uint32_t FACT1 : 1; - __IOM uint32_t FACT2 : 1; - __IOM uint32_t FACT3 : 1; - __IOM uint32_t FACT4 : 1; - __IOM uint32_t FACT5 : 1; - __IOM uint32_t FACT6 : 1; - __IOM uint32_t FACT7 : 1; - __IOM uint32_t FACT8 : 1; - __IOM uint32_t FACT9 : 1; - __IOM uint32_t FACT10 : 1; - __IOM uint32_t FACT11 : 1; - __IOM uint32_t FACT12 : 1; - __IOM uint32_t FACT13 : 1; - __IOM uint32_t FACT14 : 1; - __IOM uint32_t FACT15 : 1; - __IOM uint32_t FACT16 : 1; - __IOM uint32_t FACT17 : 1; - __IOM uint32_t FACT18 : 1; - __IOM uint32_t FACT19 : 1; - __IOM uint32_t FACT20 : 1; - __IOM uint32_t FACT21 : 1; - __IOM uint32_t FACT22 : 1; - __IOM uint32_t FACT23 : 1; - __IOM uint32_t FACT24 : 1; - __IOM uint32_t FACT25 : 1; - __IOM uint32_t FACT26 : 1; - __IOM uint32_t FACT27 : 1; - __IM uint32_t RESERVED : 4; - } FACT_B; - }; - - __IM uint32_t RESERVED5[8]; - - CAN_FilterRegister_T sFilterRegister[28]; - -} CAN_T; - -/** - * @brief I2C register (I2C) - */ -typedef struct -{ - /** @brief Control register 1 */ - union - { - __IOM uint32_t CTRL1; - - struct - { - __IOM uint32_t I2CEN : 1; - __IOM uint32_t SMBEN : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t SMBTCFG : 1; - __IOM uint32_t ARPEN : 1; - __IOM uint32_t PECEN : 1; - __IOM uint32_t SRBEN : 1; - __IOM uint32_t CLKSTRETCHD : 1; - __IOM uint32_t START : 1; - __IOM uint32_t STOP : 1; - __IOM uint32_t ACKEN : 1; - __IOM uint32_t ACKPOS : 1; - __IOM uint32_t PEC : 1; - __IOM uint32_t ALERTEN : 1; - __IM uint32_t RESERVED2 : 1; - __IOM uint32_t SWRST : 1; - __IM uint32_t RESERVED3 : 16; - } CTRL1_B; - } ; - - /** @brief Control register 2 */ - union - { - __IOM uint32_t CTRL2; - - struct - { - __IOM uint32_t CLKFCFG : 6; - __IM uint32_t RESERVED1 : 2; - __IOM uint32_t ERRIEN : 1; - __IOM uint32_t EVIEN : 1; - __IOM uint32_t BUFIEN : 1; - __IOM uint32_t DMAEN : 1; - __IOM uint32_t LTCFG : 1; - __IM uint32_t RESERVED2 : 19; - } CTRL2_B; - } ; - - /** @brief Slave machine address register 1 */ - union - { - __IOM uint32_t SADDR1; - - struct - { - __IOM uint32_t ADDR0 : 1; - __IOM uint32_t ADDR1_7 : 7; - __IOM uint32_t ADDR8_9 : 2; - __IM uint32_t RESERVED1 : 5; - __IOM uint32_t ADDRLEN : 1; - __IM uint32_t RESERVED2 : 16; - } SADDR1_B; - }; - - /** @brief Slave machine address register 2 */ - union - { - __IOM uint32_t SADDR2; - - struct - { - __IOM uint32_t ADDRNUM : 1; - __IOM uint32_t ADDR2 : 7; - __IM uint32_t RESERVED : 24; - } SADDR2_B; - }; - - /** @brief Cache data register */ - union - { - __IOM uint32_t DATA; - - struct - { - __IOM uint32_t DATA : 8; - __IM uint32_t RESERVED : 24; - } DATA_B; - }; - - /** @brief Status register 1 */ - union - { - __IOM uint32_t STS1; - - struct - { - __IM uint32_t STARTFLG : 1; - __IM uint32_t ADDRFLG : 1; - __IM uint32_t BTCFLG : 1; - __IM uint32_t ADDR10FLG : 1; - __IM uint32_t STOPFLG : 1; - __IM uint32_t RESERVED1 : 1; - __IM uint32_t RXBNEFLG : 1; - __IM uint32_t TXBEFLG : 1; - __IOM uint32_t BERRFLG : 1; - __IOM uint32_t ALFLG : 1; - __IOM uint32_t AEFLG : 1; - __IOM uint32_t OVRURFLG : 1; - __IOM uint32_t PECEFLG : 1; - __IM uint32_t RESERVED2 : 1; - __IOM uint32_t TTEFLG : 1; - __IOM uint32_t SMBALTFLG : 1; - __IM uint32_t RESERVED3 : 16; - } STS1_B; - }; - - /** @brief Status register 2 */ - union - { - __IOM uint32_t STS2; - - struct - { - __IM uint32_t MSFLG : 1; - __IM uint32_t BUSBSYFLG : 1; - __IM uint32_t TRFLG : 1; - __IM uint32_t RESERVED1 : 1; - __IM uint32_t GENCALLFLG : 1; - __IM uint32_t SMBDADDRFLG : 1; - __IM uint32_t SMMHADDR : 1; - __IM uint32_t DUALADDRFLG : 1; - __IM uint32_t PECVALUE : 8; - __IM uint32_t RESERVED2 : 16; - } STS2_B; - }; - - /** @brief Clock control register */ - union - { - __IOM uint32_t CLKCTRL; - - struct - { - __IOM uint32_t CLKS : 12; - __IM uint32_t RESERVED1 : 2; - __IOM uint32_t FDUTYCFG : 1; - __IOM uint32_t SPEEDCFG : 1; - __IM uint32_t RESERVED2 : 16; - } CLKCTRL_B; - }; - - /** @brief Maximum rise time */ - union - { - __IOM uint32_t RISETMAX; - - struct - { - __IOM uint32_t RISETMAX : 6; - __IM uint32_t RESERVED : 26; - } RISETMAX_B; - }; - - __IM uint32_t RESERVED[55]; - - /** @brief I2C Switching register */ - union - { - __IOM uint32_t SWITCH; - - struct - { - __IOM uint32_t SWITCH : 1; - __IM uint32_t RESERVED1 : 31; - } SWITCH_B; - }; -} I2C_T; - - -typedef struct -{ - __IOM uint16_t RDP; - __IOM uint16_t USER; - __IOM uint16_t Data0; - __IOM uint16_t Data1; - __IOM uint16_t WRP0; - __IOM uint16_t WRP1; - __IOM uint16_t WRP2; - __IOM uint16_t WRP3; -} OB_T; - -/** - * @brief Analog to Digital Converter(ADC) - */ -typedef struct -{ - - /** Status register */ - union - { - __IOM uint32_t STS; - - struct - { - __IOM uint32_t AWDFLG : 1; - __IOM uint32_t EOCFLG : 1; - __IOM uint32_t INJEOCFLG : 1; - __IOM uint32_t INJCSFLG : 1; - __IOM uint32_t REGCSFLG : 1; - __IM uint32_t RESERVED : 27; - } STS_B; - }; - - /** Control register1*/ - union - { - __IOM uint32_t CTRL1; - - struct - { - __IOM uint32_t AWDCHSEL : 5; - __IOM uint32_t EOCIEN : 1; - __IOM uint32_t AWDIEN : 1; - __IOM uint32_t INJEOCIEN : 1; - __IOM uint32_t SCANEN : 1; - __IOM uint32_t AWDSGLEN : 1; - __IOM uint32_t INJGACEN : 1; - __IOM uint32_t REGDISCEN : 1; - __IOM uint32_t INJDISCEN : 1; - __IOM uint32_t DISCNUMCFG : 3; - __IOM uint32_t DUALMCFG : 4; - __IM uint32_t RESERVED1 : 2; - __IOM uint32_t INJAWDEN : 1; - __IOM uint32_t REGAWDEN : 1; - __IM uint32_t RESERVED2 : 8; - } CTRL1_B; - }; - - /** Control register2*/ - union - { - __IOM uint32_t CTRL2; - - struct - { - __IOM uint32_t ADCEN : 1; - __IOM uint32_t CONTCEN : 1; - __IOM uint32_t CAL : 1; - __IOM uint32_t CALRST : 1; - __IM uint32_t RESERVED1 : 4; - __IOM uint32_t DMAEN : 1; - __IM uint32_t RESERVED2 : 2; - __IOM uint32_t DALIGNCFG : 1; - __IOM uint32_t INJGEXTTRGSEL : 3; - __IOM uint32_t INJEXTTRGEN : 1; - __IM uint32_t RESERVED3 : 1; - __IOM uint32_t REGEXTTRGSEL : 3; - __IOM uint32_t REGEXTTRGEN : 1; - __IOM uint32_t INJSWSC : 1; - __IOM uint32_t REGSWSC : 1; - __IOM uint32_t TSVREFEN : 1; - __IM uint32_t RESERVED4 : 8; - } CTRL2_B; - }; - - /** Sample time register1*/ - union - { - __IOM uint32_t SMPTIM1; - - struct - { - __IOM uint32_t SMPCYCCFG10 : 3; - __IOM uint32_t SMPCYCCFG11 : 3; - __IOM uint32_t SMPCYCCFG12 : 3; - __IOM uint32_t SMPCYCCFG13 : 3; - __IOM uint32_t SMPCYCCFG14 : 3; - __IOM uint32_t SMPCYCCFG15 : 3; - __IOM uint32_t SMPCYCCFG16 : 3; - __IOM uint32_t SMPCYCCFG17 : 3; - __IM uint32_t RESERVED : 8; - } SMPTIM1_B; - }; - - /** Sample time register2*/ - union - { - __IOM uint32_t SMPTIM2; - - struct - { - __IOM uint32_t SMPCYCCFG0 : 3; - __IOM uint32_t SMPCYCCFG1 : 3; - __IOM uint32_t SMPCYCCFG2 : 3; - __IOM uint32_t SMPCYCCFG3 : 3; - __IOM uint32_t SMPCYCCFG4 : 3; - __IOM uint32_t SMPCYCCFG5 : 3; - __IOM uint32_t SMPCYCCFG6 : 3; - __IOM uint32_t SMPCYCCFG7 : 3; - __IOM uint32_t SMPCYCCFG8 : 3; - __IOM uint32_t SMPCYCCFG9 : 3; - __IM uint32_t RESERVED : 2; - } SMPTIM2_B; - }; - - /** Injected channel Data offset register1*/ - union - { - __IOM uint32_t INJDOF1; - - struct - { - __IOM uint32_t INJDOF1 : 12; - __IM uint32_t RESERVED : 20; - } INJDOF1_B; - }; - - /** Injected channel Data offset register2*/ - union - { - __IOM uint32_t INJDOF2; - - struct - { - __IOM uint32_t INJDOF2 : 12; - __IM uint32_t RESERVED : 20; - } INJDOF2_B; - }; - - /** Injected channel Data offset register3*/ - union - { - __IOM uint32_t INJDOF3; - - struct - { - __IOM uint32_t INJDOF3 : 12; - __IM uint32_t RESERVED : 20; - } INJDOF3_B; - }; - - /** Injected channel Data offset register4*/ - union - { - __IOM uint32_t INJDOF4; - - struct - { - __IOM uint32_t INJDOF4 : 12; - __IM uint32_t RESERVED : 20; - } INJDOF4_B; - }; - - /** Analog watchdog high threshold register*/ - union - { - __IOM uint32_t AWDHT; - - struct - { - __IOM uint32_t AWDHT : 12; - __IM uint32_t RESERVED : 20; - } AWDHT_B; - }; - - /** Analog watchdog low threshold register*/ - union - { - __IOM uint32_t AWDLT; - - struct - { - __IOM uint32_t AWDLT : 12; - __IM uint32_t RESERVED : 20; - } AWDLT_B; - }; - - /** Regular channel sequence register1*/ - union - { - __IOM uint32_t REGSEQ1; - - struct - { - __IOM uint32_t REGSEQC13 : 5; - __IOM uint32_t REGSEQC14 : 5; - __IOM uint32_t REGSEQC15 : 5; - __IOM uint32_t REGSEQC16 : 5; - __IOM uint32_t REGSEQLEN : 4; - __IM uint32_t RESERVED : 8; - } REGSEQ1_B; - }; - - /** Regular channel sequence register2*/ - union - { - __IOM uint32_t REGSEQ2; - - struct - { - __IOM uint32_t REGSEQC7 : 5; - __IOM uint32_t REGSEQC8 : 5; - __IOM uint32_t REGSEQC9 : 5; - __IOM uint32_t REGSEQC10 : 5; - __IOM uint32_t REGSEQC11 : 5; - __IOM uint32_t REGSEQC12 : 5; - __IM uint32_t RESERVED : 2; - } REGSEQ2_B; - }; - - /** Regular channel sequence register3*/ - union - { - __IOM uint32_t REGSEQ3; - - struct - { - __IOM uint32_t REGSEQC1 : 5; - __IOM uint32_t REGSEQC2 : 5; - __IOM uint32_t REGSEQC3 : 5; - __IOM uint32_t REGSEQC4 : 5; - __IOM uint32_t REGSEQC5 : 5; - __IOM uint32_t REGSEQC6 : 5; - __IM uint32_t RESERVED : 2; - } REGSEQ3_B; - }; - - /** Injected sequence register*/ - union - { - __IOM uint32_t INJSEQ; - - struct - { - __IOM uint32_t INJSEQC1 : 5; - __IOM uint32_t INJSEQC2 : 5; - __IOM uint32_t INJSEQC3 : 5; - __IOM uint32_t INJSEQC4 : 5; - __IOM uint32_t INJSEQLEN : 2; - __IM uint32_t RESERVED : 10; - } INJSEQ_B; - }; - - /** Injected Data register1*/ - union - { - __IM uint32_t INJDATA1; - - struct - { - __IM uint32_t INJDATA : 16; - __IM uint32_t RESERVED : 16; - } INJDATA1_B; - }; - - /** Injected Data register2*/ - union - { - __IM uint32_t INJDATA2; - - struct - { - __IM uint32_t INJDATA : 16; - __IM uint32_t RESERVED : 16; - } INJDATA2_B; - }; - - /** Injected Data register3*/ - union - { - __IM uint32_t INJDATA3; - - struct - { - __IM uint32_t INJDATA : 16; - __IM uint32_t RESERVED : 16; - } INJDATA3_B; - }; - - /** Injected Data register4*/ - union - { - __IM uint32_t INJDATA4; - - struct - { - __IM uint32_t INJDATA : 16; - __IM uint32_t RESERVED : 16; - } INJDATA4_B; - }; - - /** Regular Data register*/ - union - { - __IOM uint32_t REGDATA; - - struct - { - __IM uint32_t REGDATA : 16; - __IM uint32_t ADC2DATA : 16; - } REGDATA_B; - }; -}ADC_T; - -/** - * @brief External Interrupt(EINT) - */ -typedef struct -{ - /** Interrupt mask register */ - union - { - __IOM uint32_t IMASK; - - struct - { - __IOM uint32_t IMASK0 : 1; - __IOM uint32_t IMASK1 : 1; - __IOM uint32_t IMASK2 : 1; - __IOM uint32_t IMASK3 : 1; - __IOM uint32_t IMASK4 : 1; - __IOM uint32_t IMASK5 : 1; - __IOM uint32_t IMASK6 : 1; - __IOM uint32_t IMASK7 : 1; - __IOM uint32_t IMASK8 : 1; - __IOM uint32_t IMASK9 : 1; - __IOM uint32_t IMASK10 : 1; - __IOM uint32_t IMASK11 : 1; - __IOM uint32_t IMASK12 : 1; - __IOM uint32_t IMASK13 : 1; - __IOM uint32_t IMASK14 : 1; - __IOM uint32_t IMASK15 : 1; - __IOM uint32_t IMASK16 : 1; - __IOM uint32_t IMASK17 : 1; - __IOM uint32_t IMASK18 : 1; - __IM uint32_t RESERVED : 12; - } IMASK_B; - }; - - /** Event mask register */ - union - { - __IOM uint32_t EMASK; - - struct - { - __IOM uint32_t EMASK0 : 1; - __IOM uint32_t EMASK1 : 1; - __IOM uint32_t EMASK2 : 1; - __IOM uint32_t EMASK3 : 1; - __IOM uint32_t EMASK4 : 1; - __IOM uint32_t EMASK5 : 1; - __IOM uint32_t EMASK6 : 1; - __IOM uint32_t EMASK7 : 1; - __IOM uint32_t EMASK8 : 1; - __IOM uint32_t EMASK9 : 1; - __IOM uint32_t EMASK10 : 1; - __IOM uint32_t EMASK11 : 1; - __IOM uint32_t EMASK12 : 1; - __IOM uint32_t EMASK13 : 1; - __IOM uint32_t EMASK14 : 1; - __IOM uint32_t EMASK15 : 1; - __IOM uint32_t EMASK16 : 1; - __IOM uint32_t EMASK17 : 1; - __IOM uint32_t EMASK18 : 1; - __IM uint32_t RESERVED : 12; - } EEN_B; - }; - - /** Rising Trigger Event Enable register */ - union - { - __IOM uint32_t RTEN; - - struct - { - __IOM uint32_t RTEN0 : 1; - __IOM uint32_t RTEN1 : 1; - __IOM uint32_t RTEN2 : 1; - __IOM uint32_t RTEN3 : 1; - __IOM uint32_t RTEN4 : 1; - __IOM uint32_t RTEN5 : 1; - __IOM uint32_t RTEN6 : 1; - __IOM uint32_t RTEN7 : 1; - __IOM uint32_t RTEN8 : 1; - __IOM uint32_t RTEN9 : 1; - __IOM uint32_t RTEN10 : 1; - __IOM uint32_t RTEN11 : 1; - __IOM uint32_t RTEN12 : 1; - __IOM uint32_t RTEN13 : 1; - __IOM uint32_t RTEN14 : 1; - __IOM uint32_t RTEN15 : 1; - __IOM uint32_t RTEN16 : 1; - __IOM uint32_t RTEN17 : 1; - __IOM uint32_t RTEN18 : 1; - __IM uint32_t RESERVED : 12; - } RTEN_B; - }; - - /** Falling Trigger Event Enable register */ - union - { - __IOM uint32_t FTEN; - - struct - { - __IOM uint32_t FTEN0 : 1; - __IOM uint32_t FTEN1 : 1; - __IOM uint32_t FTEN2 : 1; - __IOM uint32_t FTEN3 : 1; - __IOM uint32_t FTEN4 : 1; - __IOM uint32_t FTEN5 : 1; - __IOM uint32_t FTEN6 : 1; - __IOM uint32_t FTEN7 : 1; - __IOM uint32_t FTEN8 : 1; - __IOM uint32_t FTEN9 : 1; - __IOM uint32_t FTEN10 : 1; - __IOM uint32_t FTEN11 : 1; - __IOM uint32_t FTEN12 : 1; - __IOM uint32_t FTEN13 : 1; - __IOM uint32_t FTEN14 : 1; - __IOM uint32_t FTEN15 : 1; - __IOM uint32_t FTEN16 : 1; - __IOM uint32_t FTEN17 : 1; - __IOM uint32_t FTEN18 : 1; - __IM uint32_t RESERVED : 12; - } FTEN_B; - }; - - /** Software Interrupt Enable register */ - union - { - __IOM uint32_t SWINTE; - - struct - { - __IOM uint32_t SWINTE0 : 1; - __IOM uint32_t SWINTE1 : 1; - __IOM uint32_t SWINTE2 : 1; - __IOM uint32_t SWINTE3 : 1; - __IOM uint32_t SWINTE4 : 1; - __IOM uint32_t SWINTE5 : 1; - __IOM uint32_t SWINTE6 : 1; - __IOM uint32_t SWINTE7 : 1; - __IOM uint32_t SWINTE8 : 1; - __IOM uint32_t SWINTE9 : 1; - __IOM uint32_t SWINTE10 : 1; - __IOM uint32_t SWINTE11 : 1; - __IOM uint32_t SWINTE12 : 1; - __IOM uint32_t SWINTE13 : 1; - __IOM uint32_t SWINTE14 : 1; - __IOM uint32_t SWINTE15 : 1; - __IOM uint32_t SWINTE16 : 1; - __IOM uint32_t SWINTE17 : 1; - __IOM uint32_t SWINTE18 : 1; - __IM uint32_t RESERVED : 12; - } SWINTE_B; - }; - - /** Interrupt Flag Enable register */ - union - { - __IOM uint32_t IPEND; - - struct - { - __IOM uint32_t IPEND0 : 1; - __IOM uint32_t IPEND1 : 1; - __IOM uint32_t IPEND2 : 1; - __IOM uint32_t IPEND3 : 1; - __IOM uint32_t IPEND4 : 1; - __IOM uint32_t IPEND5 : 1; - __IOM uint32_t IPEND6 : 1; - __IOM uint32_t IPEND7 : 1; - __IOM uint32_t IPEND8 : 1; - __IOM uint32_t IPEND9 : 1; - __IOM uint32_t IPEND10 : 1; - __IOM uint32_t IPEND11 : 1; - __IOM uint32_t IPEND12 : 1; - __IOM uint32_t IPEND13 : 1; - __IOM uint32_t IPEND14 : 1; - __IOM uint32_t IPEND15 : 1; - __IOM uint32_t IPEND16 : 1; - __IOM uint32_t IPEND17 : 1; - __IOM uint32_t IPEND18 : 1; - __IM uint32_t RESERVED : 12; - } IF_B; - }; -}EINT_T; - -/** - * @brief Independent watchdog(IWDT) - */ -typedef struct -{ - - /** Keyword register */ - union - { - __OM uint32_t KEY; - - struct - { - __OM uint32_t KEY : 16; - __IM uint32_t RESERVED : 16; - } KEY_B; - }; - - /** Frequency Divider register */ - union - { - __IOM uint32_t PSC; - - struct - { - __IOM uint32_t PSC : 3; - __IM uint32_t RESERVED : 29; - } DIV_B; - }; - - /** Reload values register */ - union - { - __IOM uint32_t CNTRLD; - - struct - { - __IOM uint32_t CNTRLD : 12; - __IM uint32_t RESERVED : 20; - } CNTRLD_B; - }; - - /** Status register */ - union - { - __IM uint32_t STS; - - struct - { - __IM uint32_t PSCUFLG : 1; - __IM uint32_t CNTUFLG : 1; - __IM uint32_t RESERVED : 30; - } STS_B; - }; -}IWDT_T; - -/** - * @brief Serial peripheral interface(SPI) - */ -typedef struct -{ - /** Control register 1 */ - union - { - __IOM uint32_t CTRL1; - - struct - { - __IOM uint32_t CPHA : 1; - __IOM uint32_t CPOL : 1; - __IOM uint32_t MSMCFG : 1; - __IOM uint32_t BRSEL : 3; - __IOM uint32_t SPIEN : 1; - __IOM uint32_t LSBSEL : 1; - __IOM uint32_t ISSEL : 1; - __IOM uint32_t SSEN : 1; - __IOM uint32_t RXOMEN : 1; - __IOM uint32_t DFLSEL : 1; - __IOM uint32_t CRCNXT : 1; - __IOM uint32_t CRCEN : 1; - __IOM uint32_t BMOEN : 1; - __IOM uint32_t BMEN : 1; - __IM uint32_t RESERVED : 16; - } CTRL1_B; - }; - - /** Control register 2 */ - union - { - __IOM uint32_t CTRL2; - - struct - { - __IOM uint32_t RXDEN : 1; - __IOM uint32_t TXDEN : 1; - __IOM uint32_t SSOEN : 1; - __IM uint32_t RESERVED1 : 2; - __IOM uint32_t ERRIEN : 1; - __IOM uint32_t RXBNEIEN : 1; - __IOM uint32_t TXBEIEN : 1; - __IM uint32_t RESERVED2 : 24; - } CTRL2_B; - }; - - /** Status register */ - union - { - __IOM uint32_t STS; - - struct - { - __IM uint32_t RXBNEFLG : 1; - __IM uint32_t TXBEFLG : 1; - __IM uint32_t SCHDIR : 1; - __IM uint32_t UDRFLG : 1; - __IOM uint32_t CRCEFLG : 1; - __IM uint32_t MEFLG : 1; - __IM uint32_t OVRFLG : 1; - __IM uint32_t BSYFLG : 1; - __IM uint32_t RESERVED : 24; - } STS_B; - }; - - /** Data register */ - union - { - __IOM uint32_t DATA; - - struct - { - __IOM uint32_t DATA : 16; - __IM uint32_t RESERVED : 16; - } DATA_B; - }; - - /** CRC polynomial register */ - union - { - __IOM uint32_t CRCPOLY; - - struct - { - __IOM uint32_t CRCPOLY : 16; - __IM uint32_t RESERVED : 16; - } CRCPOLY_B; - }; - - /** Receive CRC register */ - union - { - __IM uint32_t RXCRC; - - struct - { - __IM uint32_t RXCRC : 16; - __IM uint32_t RESERVED : 16; - }RXCRC_B; - }; - - /** Transmit CRC register */ - union - { - __IM uint32_t TXCRC; - - struct - { - __IM uint32_t TXCRC : 16; - __IM uint32_t RESERVED : 16; - }TXCRC_B; - }; - - /** Transmit I2S CTRL register */ - union - { - __IOM uint32_t I2SCFG; - - struct - { - __IOM uint32_t CHLEN : 1; - __IOM uint32_t DATLEN : 2; - __IOM uint32_t CPOL : 1; - __IOM uint32_t I2SSSEL : 2; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t PFSSEL : 1; - __IOM uint32_t I2SMOD : 2; - __IOM uint32_t I2SEN : 1; - __IOM uint32_t MODESEL : 1; - __IM uint32_t RESERVED2 : 20; - }I2SCFG_B; - }; - - /** Transmit I2S DIV register */ - union - { - __IOM uint32_t I2SPSC; - - struct - { - __IOM uint32_t I2SPSC : 8; - __IOM uint32_t ODDPSC : 1; - __IOM uint32_t MCIEN : 1; - __IM uint32_t RESERVED1 : 22; - }I2SPSC_B; - }; -}SPI_T; - -/** - * @brief Window watchdog (WWDT) - */ -typedef struct -{ - - /** Control register */ - union - { - __IOM uint32_t CTRL; - - struct - { - __IOM uint32_t CNT : 7; - __IOM uint32_t WWDTEN : 1; - __IM uint32_t RESERVED : 24; - } CTRL_B; - }; - - /** Configure register */ - union - { - __IOM uint32_t CFG; - - struct - { - __IOM uint32_t WIN : 7; - __IOM uint32_t TBPSC : 2; - __IOM uint32_t EWIEN : 1; - __IM uint32_t RESERVED : 22; - } CFG_B; - }; - - /** Status register */ - union - { - __IOM uint32_t STS; - - struct - { - __IOM uint32_t EWIFLG : 1; - __IM uint32_t RESERVED : 31; - } STS_B; - }; -}WWDT_T; - -/** - * @brief Secure digital input/output interface (SDIO) - */ -typedef struct -{ - /** Power control register */ - union - { - __IOM uint32_t PWRCTRL; - - struct - { - __IOM uint32_t PWRCTRL : 2; - __IM uint32_t RESERVED : 30; - } PWRCTRL_B; - }; - - /** Clock control register */ - union - { - __IOM uint32_t CLKCTRL; - - struct - { - __IOM uint32_t CLKDIV : 8; - __IOM uint32_t CLKEN : 1; - __IOM uint32_t PWRSAV : 1; - __IOM uint32_t BYPASSEN : 1; - __IOM uint32_t WBSEL : 2; - __IOM uint32_t DEPSEL : 1; - __IOM uint32_t HFCEN : 1; - __IM uint32_t RESERVED : 17; - } CLKCTRL_B; - }; - - /** Argument register */ - union - { - __IOM uint32_t ARG; - - struct - { - __IOM uint32_t CMDARG : 32; - } ARG_B; - }; - - /** Command register */ - union - { - __IOM uint32_t CMD; - - struct - { - __IOM uint32_t CMDINDEX : 6; - __IOM uint32_t WAITRES : 2; - __IOM uint32_t WAITINT : 1; - __IOM uint32_t WENDDATA : 1; - __IOM uint32_t CPSMEN : 1; - __IOM uint32_t SDIOSC : 1; - __IOM uint32_t CMDCPEN : 1; - __IOM uint32_t INTEN : 1; - __IOM uint32_t ATACMD : 1; - __IM uint32_t RESERVED : 17; - } CMD_B; - }; - - /** Command response register */ - union - { - __IM uint32_t CMDRES; - - struct - { - __IM uint32_t CMDRES : 6; - __IM uint32_t RESERVED : 26; - } CMDRES_B; - }; - - /** SDIO response register1 */ - union - { - __IM uint32_t RES1; - - struct - { - __IM uint32_t CARDSTS1 : 32; - } RES1_B; - }; - - /** SDIO response register2 */ - union - { - __IM uint32_t RES2; - - struct - { - __IM uint32_t CARDSTS2 : 32; - } RES2_B; - }; - - /** SDIO response register3 */ - union - { - __IM uint32_t RES3; - - struct - { - __IM uint32_t CARDSTS3 : 32; - } RES3_B; - }; - - /** SDIO response register4 */ - union - { - __IM uint32_t RES4; - - struct - { - __IM uint32_t CARDSTS4 : 32; - } RES4_B; - }; - - /** Data timer register */ - union - { - __IOM uint32_t DATATIME; - - struct - { - __IOM uint32_t DATATIME : 32; - } DTMR_B; - }; - - /** Data length register */ - union - { - __IOM uint32_t DATALEN; - - struct - { - __IOM uint32_t DATALEN : 25; - __IM uint32_t RESERVED : 7; - } DLEN_B; - }; - - /** Data control register */ - union - { - __IOM uint32_t DCTRL; - - struct - { - __IOM uint32_t DTEN : 1; - __IOM uint32_t DTDRCFG : 1; - __IOM uint32_t DTSEL : 1; - __IOM uint32_t DMAEN : 1; - __IOM uint32_t DBSIZE : 4; - __IOM uint32_t RWSTR : 1; - __IOM uint32_t RWSTOP : 1; - __IOM uint32_t RDWAIT : 1; - __IOM uint32_t SDIOF : 1; - __IM uint32_t RESERVED : 20; - } DCTRL_B; - }; - - /** Data count register */ - union - { - __IM uint32_t DCNT; - - struct - { - __IM uint32_t DATACNT : 25; - __IM uint32_t RESERVED : 7; - } DCNT_B; - }; - - /** SDIO status register */ - union - { - __IM uint32_t STS; - - struct - { - __IM uint32_t COMRESP : 1; - __IM uint32_t DBDR : 1; - __IM uint32_t CMDRESTO : 1; - __IM uint32_t DATATO : 1; - __IM uint32_t TXUDRER : 1; - __IM uint32_t RXOVRER : 1; - __IM uint32_t CMDRES : 1; - __IM uint32_t CMDSENT : 1; - __IM uint32_t DATAEND : 1; - __IM uint32_t SBE : 1; - __IM uint32_t DBCP : 1; - __IM uint32_t CMDACT : 1; - __IM uint32_t TXACT : 1; - __IM uint32_t RXACT : 1; - __IM uint32_t TXFHF : 1; - __IM uint32_t RXFHF : 1; - __IM uint32_t TXFF : 1; - __IM uint32_t RXFF : 1; - __IM uint32_t TXFE : 1; - __IM uint32_t RXFE : 1; - __IM uint32_t TXDA : 1; - __IM uint32_t RXDA : 1; - __IM uint32_t SDIOINT : 1; - __IM uint32_t ATAEND : 1; - __IM uint32_t RESERVED : 8; - } STS_B; - }; - - /** SDIO interrupt clear register */ - union - { - __IOM uint32_t ICF; - - struct - { - __IOM uint32_t DBCE : 1; - __IOM uint32_t CRCE : 1; - __IOM uint32_t CRTO : 1; - __IOM uint32_t DTO : 1; - __IOM uint32_t TXFUE : 1; - __IOM uint32_t RXFOE : 1; - __IOM uint32_t CMDRES : 1; - __IOM uint32_t CMDSENT : 1; - __IOM uint32_t DATAEND : 1; - __IOM uint32_t SBE : 1; - __IOM uint32_t DBCP : 1; - __IM uint32_t RESERVED1 : 11; - __IOM uint32_t SDIOIT : 1; - __IOM uint32_t ATAEND : 1; - __IM uint32_t RESERVED2 : 8; - } ICF_B; - }; - - /** SDIO interrupt mask register */ - union - { - __IOM uint32_t MASK; - - struct - { - __IOM uint32_t CCRCFAIL : 1; - __IOM uint32_t DCRCFAIL : 1; - __IOM uint32_t CMDTO : 1; - __IOM uint32_t DATATO : 1; - __IOM uint32_t TXURER : 1; - __IOM uint32_t RXORER : 1; - __IOM uint32_t CMDRESRC : 1; - __IOM uint32_t CMDSENT : 1; - __IOM uint32_t DATAEND : 1; - __IOM uint32_t STRTER : 1; - __IOM uint32_t DBEND : 1; - __IOM uint32_t CMDACT : 1; - __IOM uint32_t TXACT : 1; - __IOM uint32_t RXACT : 1; - __IOM uint32_t TXHFERT : 1; - __IOM uint32_t RXHFFUL : 1; - __IOM uint32_t TXFUL : 1; - __IOM uint32_t RXFUL : 1; - __IOM uint32_t TXEPT : 1; - __IOM uint32_t RXFEIE : 1; - __IOM uint32_t TXDAVB : 1; - __IOM uint32_t RXDAVB : 1; - __IOM uint32_t SDIOINTREC : 1; - __IOM uint32_t ATACLPREC : 1; - __IM uint32_t RESERVED : 8; - } MASK_B; - }; - - __IM uint32_t RESERVED[2]; - - /** SDIO FIFO count register */ - union - { - __IM uint32_t FIFOCNT; - - struct - { - __IM uint32_t FIFOCNT : 24; - __IM uint32_t RESERVED : 8; - } FIFOCNT_B; - }; - - __IM uint32_t RESERVED1[13]; - - /** SDIO data FIFO register */ - union - { - __IOM uint32_t FIFODATA; - - struct - { - __IOM uint32_t FIFODATA : 32; - } FIFODATA_B; - }; -}SDIO_T; - -/** - * @brief Digital to Analog Converter(DAC) - */ -typedef struct -{ - /** Control register */ - union - { - __IOM uint32_t CTRL; - - struct - { - __IOM uint32_t ENCH1 : 1; - __IOM uint32_t BUFFDCH1 : 1; - __IOM uint32_t TRGENCH1 : 1; - __IOM uint32_t TRGSELCH1 : 3; - __IOM uint32_t WAVENCH1 : 2; - __IOM uint32_t MAMPSELCH1 : 4; - __IOM uint32_t DMAENCH1 : 1; - __IM uint32_t RESERVED1 : 3; - __IOM uint32_t ENCH2 : 1; - __IOM uint32_t BUFFDCH2 : 1; - __IOM uint32_t TRGENCH2 : 1; - __IOM uint32_t TRGSELCH2 : 3; - __IOM uint32_t WAVENCH2 : 2; - __IOM uint32_t MAMPSELCH2 : 4; - __IOM uint32_t DMAENCH2 : 1; - __IM uint32_t RESERVED2 : 3; - } CTRL_B; - }; - - /** Software trigger register */ - union - { - __OM uint32_t SWTRG; - - struct - { - __OM uint32_t SWTRG1 : 1; - __OM uint32_t SWTRG2 : 1; - __IM uint32_t RESERVED : 30; - } SWTRG_B; - }; - - /** Channel1 12-bit right-aligned register */ - union - { - __IOM uint32_t DH12R1; - - struct - { - __IOM uint32_t DATA : 12; - __IM uint32_t RESERVED : 20; - } DH12R1_B; - }; - - /** Channel1 12-bit left-aligned register */ - union - { - __IOM uint32_t DH12L1; - - struct - { - __IM uint32_t RESERVED1 : 4; - __IOM uint32_t DATA : 12; - __IM uint32_t RESERVED2 : 16; - } DH12L1_B; - }; - - /** Channel1 8-bit right-aligned register */ - union - { - __IOM uint32_t DH8R1; - - struct - { - __IOM uint32_t DATA : 8; - __IM uint32_t RESERVED : 24; - } DH8R1_B; - }; - - /** Channel2 12-bit right-aligned register */ - union - { - __IOM uint32_t DH12R2; - - struct - { - __IOM uint32_t DATA : 12; - __IM uint32_t RESERVED : 20; - } DH12R2_B; - }; - - /** Channel2 12-bit left-aligned register */ - union - { - __IOM uint32_t DH12L2; - - struct - { - __IM uint32_t RESERVED1 : 4; - __IOM uint32_t DATA : 12; - __IM uint32_t RESERVED2 : 16; - }DH12L2_B; - }; - - /** Channel2 8-bit right-aligned register */ - union - { - __IOM uint32_t DH8R2; - - struct - { - __IOM uint32_t DATA : 8; - __IM uint32_t RESERVED : 24; - } DH8R2_B; - }; - - /** Channel1,Channel2 12-bit right-aligned register */ - union - { - __IOM uint32_t DH12RDUAL; - - struct - { - __IOM uint32_t DATACH1 : 12; - __IM uint32_t RESERVED1 : 4; - __IOM uint32_t DATACH2 : 12; - __IM uint32_t RESERVED2 : 4; - } DH12RDUAL_B; - }; - - /** Channel1,Channel2 12-bit left-aligned register */ - union - { - __IOM uint32_t DH12LDUAL; - - struct - { - __IM uint32_t RESERVED1 : 4; - __IOM uint32_t DATACH1 : 12; - __IM uint32_t RESERVED2 : 4; - __IOM uint32_t DATACH2 : 12; - } DH12LDUAL_B; - }; - - /** Channel1,Channel2 8-bit right-aligned register */ - union - { - __IOM uint32_t DH8RDUAL; - - struct - { - __IOM uint32_t DATACH1 : 8; - __IOM uint32_t DATACH2 : 8; - __IM uint32_t RESERVED : 16; - } DH8RDUAL_B; - }; - - /** Channel1 data output register */ - union - { - __IM uint32_t DATAOCH1; - - struct - { - __IM uint32_t DATA : 12; - __IM uint32_t RESERVED : 20; - } DATAOCH1_B; - }; - - /** Channel2 data output register */ - union - { - __IM uint32_t DATAOCH2; - - struct - { - __IM uint32_t DATA : 12; - __IM uint32_t RESERVED : 20; - } DATAOCH2_B; - }; -}DAC_T; - -/** - * @brief EMMC Register - */ -typedef struct -{ - /** SRAM/NOR-Flash chip-select control register */ - union - { - __IOM uint32_t CSCTRL; - - struct - { - __IOM uint32_t MBKEN : 1; - __IOM uint32_t ADMUXEN : 1; - __IOM uint32_t MTYPECFG : 2; - __IOM uint32_t MDBWIDCFG : 2; - __IOM uint32_t NORFMACCEN : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t BURSTEN : 1; - __IOM uint32_t WSPOLCFG : 1; - __IOM uint32_t WRAPBEN : 1; - __IOM uint32_t WTIMCFG : 1; - __IOM uint32_t WREN : 1; - __IOM uint32_t WAITEN : 1; - __IOM uint32_t EXTMODEEN : 1; - __IOM uint32_t WSASYNCEN : 1; - __IOM uint32_t CRAMPSIZECFG : 3; - __IOM uint32_t WRBURSTEN : 1; - __IOM uint32_t RESERVED2 : 12; - }CSCTRL_B; - }; -}SNCTRL_T; - -typedef struct -{ - /** SRAM/NOR-Flash write timing registers */ - union - { - __IOM uint32_t WRTTIM; - - struct - { - __IOM uint32_t ADDRSETCFG : 4; - __IOM uint32_t ADDRHLDCFG : 4; - __IOM uint32_t DATASETCFG : 8; - __IOM uint32_t BUSTURNCFG : 4; - __IOM uint32_t CLKDIVCFG : 4; - __IOM uint32_t DATALATCFG : 4; - __IOM uint32_t ACCMODECFG : 2; - __IM uint32_t RESERVED2 : 2; - }WRTTIM_T; - }; -}SNWCLK_T; - -/** - * @brief Flexible Static Memory Controller - */ -typedef struct -{ - __IO uint32_t SNCTRL_T[8]; -} EMMC_Bank1_T; - -/** - * @brief Flexible Static Memory Controller Bank1E - */ -typedef struct -{ - __IO uint32_t WRTTIM[7]; -} EMMC_Bank1E_T; - -/** - * @brief Flexible Static Memory Controller Bank 2 - */ -typedef struct -{ - /** PC Card/NAND Flash control register 2 */ - union - { - __IOM uint32_t CTRL2; - - struct - { - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t WAITFEN : 1; - __IOM uint32_t MBKEN : 1; - __IOM uint32_t MTYPECFG : 1; - __IOM uint32_t DBWIDCFG : 2; - __IOM uint32_t ECCEN : 1; - __IM uint32_t RESERVED2 : 2; - __IOM uint32_t C2RDCFG : 4; - __IOM uint32_t A2RDCFG : 4; - __IOM uint32_t ECCPSCFG : 3; - __IM uint32_t RESERVED3 : 12; - }CTRL2_B; - }; - - /** FIFO status and interrupt register 2 */ - union - { - __IOM uint32_t STSINT2; - - struct - { - __IOM uint32_t IREFLG : 1; - __IOM uint32_t IHLFLG : 1; - __IOM uint32_t IFEFLG : 1; - __IOM uint32_t IREDEN : 1; - __IOM uint32_t IHLDEN : 1; - __IOM uint32_t IFEDEN : 1; - __IM uint32_t FEFLG : 1; - __IM uint32_t RESERVED :25; - }STSINT2_B; - }; - /** Common memory space timing register 2 */ - union - { - __IOM uint32_t CMSTIM2; - - struct - { - __IOM uint32_t SET2 : 8; - __IOM uint32_t WAIT2 : 8; - __IOM uint32_t HLD2 : 8; - __IOM uint32_t HIZ2 : 8; - }CMSTIM2_B; - }; - - /** Attribute memory space timing register 2 */ - union - { - __IOM uint32_t AMSTIM2; - - struct - { - __IOM uint32_t SET2 : 8; - __IOM uint32_t WAIT2 : 8; - __IOM uint32_t HLD2 : 8; - __IOM uint32_t HIZ2 : 8; - }AMSTIM2_B; - }; - - __IOM uint32_t RESERVED; - - /** ECC result register 2 */ - union - { - __IM uint32_t ECCRS2; - - struct - { - __IM uint32_t ECCRS2 : 32; - } ECCRS2_B; - }; -}EMMC_Bank2_T; - -/** - * @brief Flexible Static Memory Controller Bank 3 - */ -typedef struct -{ - /** PC Card/NAND Flash control register 3 */ - union - { - __IOM uint32_t CTRL3; - - struct - { - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t WAITFEN : 1; - __IOM uint32_t MBKEN : 1; - __IOM uint32_t MTYPECFG : 1; - __IOM uint32_t DBWIDCFG : 2; - __IOM uint32_t ECCEN : 1; - __IM uint32_t RESERVED2 : 2; - __IOM uint32_t C2RDCFG : 4; - __IOM uint32_t A2RDCFG : 4; - __IOM uint32_t ECCPSCFG : 3; - __IM uint32_t RESERVED3 : 12; - }CTRL3_B; - }; - - /** FIFO status and interrupt register 3 */ - union - { - __IOM uint32_t STSINT3; - - struct - { - __IOM uint32_t IREFLG : 1; - __IOM uint32_t IHLFLG : 1; - __IOM uint32_t IFEFLG : 1; - __IOM uint32_t IREDEN : 1; - __IOM uint32_t IHLDEN : 1; - __IOM uint32_t IFEDEN : 1; - __IM uint32_t FEFLG : 1; - __IM uint32_t RESERVED :16; - }STSINT3_B; - }; - - /** Common memory space timing register 3 */ - union - { - __IOM uint32_t CMSTIM3; - - struct - { - __IOM uint32_t SET3 : 8; - __IOM uint32_t WAIT3 : 8; - __IOM uint32_t HLD3 : 8; - __IOM uint32_t HIZ3 : 8; - }CMSTIM3_B; - }; - - /** Attribute memory space timing register 3 */ - union - { - __IOM uint32_t AMSTIM3; - - struct - { - __IOM uint32_t SET3 : 8; - __IOM uint32_t WAIT3 : 8; - __IOM uint32_t HLD3 : 8; - __IOM uint32_t HIZ3 : 8; - }AMSTIM3_B; - }; - - __IOM uint32_t RESERVED; - - /** ECC result register 3 */ - union - { - __IM uint32_t ECCRS3; - - struct - { - __IM uint32_t ECCRS3 : 32; - } ECCRS3_B; - }; -}EMMC_Bank3_T; - -/** - * @brief Flexible Static Memory Controller Bank 4 - */ -typedef struct -{ - /** PC Card/NAND Flash control register 4 */ - union - { - __IOM uint32_t CTRL4; - - struct - { - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t WAITFEN : 1; - __IOM uint32_t MBKEN : 1; - __IOM uint32_t MTYPECFG : 1; - __IOM uint32_t DBWIDCFG : 2; - __IOM uint32_t ECCEN : 1; - __IM uint32_t RESERVED2 : 2; - __IOM uint32_t C2RDCFG : 4; - __IOM uint32_t A2RDCFG : 4; - __IOM uint32_t ECCPSCFG : 3; - __IM uint32_t RESERVED3 : 12; - }CTRL4_B; - }; - - /** FIFO status and interrupt register 4 */ - union - { - __IOM uint32_t STSINT4; - - struct - { - __IOM uint32_t IREFLG : 1; - __IOM uint32_t IHLFLG : 1; - __IOM uint32_t IFEFLG : 1; - __IOM uint32_t IREDEN : 1; - __IOM uint32_t IHLDEN : 1; - __IOM uint32_t IFEDEN : 1; - __IM uint32_t FEFLG : 1; - __IM uint32_t RESERVED :16; - }STSINT4_B; - }; - - /** Common memory space timing register 4 */ - union - { - __IOM uint32_t CMSTIM4; - - struct - { - __IOM uint32_t SET4 : 8; - __IOM uint32_t WAIT4 : 8; - __IOM uint32_t HLD4 : 8; - __IOM uint32_t HIZ4 : 8; - }CMSTIM4_B; - }; - - /** Attribute memory space timing register 4 */ - union - { - __IOM uint32_t AMSTIM4; - - struct - { - __IOM uint32_t SET4 : 8; - __IOM uint32_t WAIT4 : 8; - __IOM uint32_t HLD4 : 8; - __IOM uint32_t HIZ4 : 8; - }AMSTIM4_B; - }; - - /** I/O space timing register 4 */ - union - { - __IOM uint32_t IOSTIM4; - - struct - { - __IOM uint32_t SET4 : 8; - __IOM uint32_t WAIT4 : 8; - __IOM uint32_t HLD4 : 8; - __IOM uint32_t HIZ4 : 8; - }IOSTIM4_B; - }; -}EMMC_Bank4_T; - -/** - * @brief Queued serial peripheral interface(QSPI) - */ -typedef struct -{ - /** @brief Control register 1 */ - union - { - __IOM uint32_t CTRL1; - struct - { - __IOM uint32_t DFS : 5; - __IM uint32_t RESERVED1 : 3; - __IOM uint32_t CPHA : 1; - __IOM uint32_t CPOL : 1; - __IOM uint32_t TXMODE : 2; - __IM uint32_t RESERVED2 : 2; - __IOM uint32_t SSTEN : 1; - __IM uint32_t RESERVED3 : 7; - __IOM uint32_t FRF : 2; - __IM uint32_t RESERVED4 : 8; - }CTRL1_B; - }; - - /** @brief Control register 2 */ - union - { - __IOM uint32_t CTRL2; - struct - { - __IOM uint32_t NDF : 16; - __IM uint32_t RESERVED : 16; - }CTRL2_B; - }; - - /** @brief QSPI Enable register */ - union - { - __IOM uint32_t SSIEN; - struct - { - __IOM uint32_t EN : 1; - __IM uint32_t RESERVED : 31; - }SSIEN_B; - }; - - __IM uint32_t RESERVED; - - /** @brief QSPI Slave enable register */ - union - { - __IOM uint32_t SLAEN; - struct - { - __IOM uint32_t SLAEN : 1; - __IM uint32_t RESERVED : 31; - }SLAEN_B; - }; - - /** @brief Baudrate register */ - union - { - __IOM uint32_t BR; - struct - { - __IOM uint32_t CLKDIV : 16; - __IM uint32_t RESERVED : 16; - }BR_B; - }; - - /** @brief Transmission FIFO threshhold level register */ - union - { - __IOM uint32_t TFTL; - struct - { - __IOM uint32_t TFT : 3; - __IM uint32_t RESERVED1 : 13; - __IOM uint32_t TFTH : 3; - __IM uint32_t RESERVED2 : 13; - }TFTL_B; - }; - - /** @brief Reception FIFO threshhold level register */ - union - { - __IOM uint32_t RFTL; - struct - { - __IOM uint32_t RFT : 3; - __IM uint32_t RESERVED : 29; - }RFTL_B; - }; - - /** @brief Transmission FIFO level register */ - union - { - __IOM uint32_t TFL; - struct - { - __IOM uint32_t TFL : 3; - __IM uint32_t RESERVED : 29; - }TFL_B; - }; - - /** @brief Reception FIFO level register */ - union - { - __IOM uint32_t RFL; - struct - { - __IOM uint32_t RFL : 3; - __IM uint32_t RESERVED : 29; - }RFL_B; - }; - - /** @brief Status register */ - union - { - __IOM uint32_t STS; - struct - { - __IOM uint32_t BUSYF : 1; - __IOM uint32_t TFNF : 1; - __IOM uint32_t TFEF : 1; - __IOM uint32_t RFNEF : 1; - __IOM uint32_t RFFF : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t DCEF : 1; - __IM uint32_t RESERVED2 : 25; - }STS_B; - }; - - /** @brief Interrupt enable register */ - union - { - __IOM uint32_t INTEN; - struct - { - __IOM uint32_t TFEIE : 1; - __IOM uint32_t TFOIE : 1; - __IOM uint32_t RFUIE : 1; - __IOM uint32_t RFOIE : 1; - __IOM uint32_t RFFIE : 1; - __IOM uint32_t MSTIE : 1; - __IM uint32_t RESERVED : 26; - }INTEN_B; - }; - - /** @brief Interrupt status register */ - union - { - __IM uint32_t ISTS; - struct - { - __IM uint32_t TFEIF : 1; - __IM uint32_t TFOIF : 1; - __IM uint32_t RFUIF : 1; - __IM uint32_t RFOIF : 1; - __IM uint32_t RFFIF : 1; - __IM uint32_t MSTIF : 1; - __IM uint32_t RESERVED : 26; - }ISTS_B; - }; - - /** @brief Raw interrupt register */ - union - { - __IM uint32_t RIS; - struct - { - __IM uint32_t TFEIF : 1; - __IM uint32_t TFOIF : 1; - __IM uint32_t RFUIF : 1; - __IM uint32_t RXOIR : 1; - __IM uint32_t RXFIR : 1; - __IM uint32_t MSTIR : 1; - __IM uint32_t RESERVED : 26; - }RIS_B; - }; - - /** @brief Transmission FIFO overflow interrupt clear register */ - union - { - __IM uint32_t TFOIC; - struct - { - __IM uint32_t TFOIC : 1; - __IM uint32_t RESERVED : 31; - }TFOIC_B; - }; - - /** @brief Reception FIFO overflow interrupt clear register */ - union - { - __IM uint32_t RFOIC; - struct - { - __IM uint32_t RFOIC : 1; - __IM uint32_t RESERVED : 31; - }RFOIC_B; - }; - - /** @brief Reception FIFO underflow interrupt clear register */ - union - { - __IM uint32_t RFUIC; - struct - { - __IM uint32_t RFUIC : 1; - __IM uint32_t RESERVED : 31; - }RFUIC_B; - }; - - /** @brief Master interrupt clear register */ - union - { - __IM uint32_t MIC; - struct - { - __IM uint32_t MIC : 1; - __IM uint32_t RESERVED : 31; - }MIC_B; - }; - - /** @brief Interrupt clear register */ - union - { - __IM uint32_t ICF; - struct - { - __IM uint32_t ICF : 1; - __IM uint32_t RESERVED : 31; - }ICF_B; - }; - - __IM uint32_t RESERVED1[5]; - - /** @brief Data register */ - union - { - __IOM uint32_t DATA; - struct - { - __IOM uint32_t DATA : 32; - }DATA_B; - }; - - __IM uint32_t RESERVED2[35]; - - /** @brief Reception sample register */ - union - { - __IOM uint32_t RSD; - struct - { - __IOM uint32_t RSD : 8; - __IM uint32_t RESERVED1 : 8; - __IOM uint32_t RSE : 1; - __IM uint32_t RESERVED2 : 15; - }RSD_B; - }; - - /** @brief Reception sample register */ - union - { - __IOM uint32_t CTRL3; - struct - { - __IOM uint32_t IAT : 2; - __IOM uint32_t ADDRLEN : 4; - __IM uint32_t RESERVED1 : 2; - __IOM uint32_t INSLEN : 2; - __IM uint32_t RESERVED2 : 1; - __IOM uint32_t WAITCYC : 5; - __IM uint32_t RESERVED3 : 14; - __IOM uint32_t CSEN : 1; - __IM uint32_t RESERVED4 : 1; - }CTRL3_B; - }; - - __IM uint32_t RESERVED3[66]; - - /** @brief IO switch register */ - union - { - __IOM uint32_t IOSW; - struct - { - __IOM uint32_t IOSW : 1; - __IM uint32_t RESERVED : 31; - }IOSW_B; - }; -}QSPI_T; - -/** - * @brief SEC Inter-integrated circuit (SCI2C) - */ -typedef struct -{ - /** @brief Control register 1 */ - union - { - __IOM uint32_t CTRL1; - struct - { - __IOM uint32_t MST : 1; - __IOM uint32_t SPD : 2; - __IOM uint32_t SAM : 1; - __IM uint32_t RESERVED1 : 1; - __IOM uint32_t RSTAEN : 1; - __IOM uint32_t SLADIS : 1; - __IOM uint32_t DSA : 1; - __IOM uint32_t TFEIC : 1; - __IOM uint32_t RFFIE : 1; - __IOM uint32_t DSMA : 1; - __IM uint32_t RESERVED2 : 21; - }CTRL1_B; - }; - - /** @brief Master address register */ - union - { - __IOM uint32_t TARADDR; - struct - { - __IOM uint32_t ADDR : 10; - __IOM uint32_t STA : 1; - __IOM uint32_t GCEN : 1; - __IOM uint32_t MAM : 1; - __IM uint32_t RESERVED : 19; - }TARADDR_B; - }; - - /** @brief Slave address register */ - union - { - __IOM uint32_t SLAADDR; - struct - { - __IOM uint32_t ADDR : 10; - __IM uint32_t RESERVED : 22; - }SLAADDR_B; - }; - - /** @brief High speed master code register */ - union - { - __IOM uint32_t HSMC; - struct - { - __IOM uint32_t HSMC : 4; - __IM uint32_t RESERVED : 28; - }HSMC_B; - }; - - /** @brief Data register */ - union - { - __IOM uint32_t DATA; - struct - { - __IOM uint32_t DATA : 8; - __IOM uint32_t CMD : 1; - __IOM uint32_t STOP : 1; - __IM uint32_t RESERVED : 22; - }DATA_B; - }; - - /** @brief Standard speed clock high counter register */ - union - { - __IOM uint32_t SSCHC; - struct - { - __IOM uint32_t CNT : 16; - __IM uint32_t RESERVED : 16; - }SSCHC_B; - }; - - /** @brief Standard speed clock low counter register */ - union - { - __IOM uint32_t SSCLC; - struct - { - __IOM uint32_t CNT : 16; - __IM uint32_t RESERVED : 16; - }SSCLC_B; - }; - - /** @brief Fast speed clock high counter register */ - union - { - __IOM uint32_t FSCHC; - struct - { - __IOM uint32_t CNT : 16; - __IM uint32_t RESERVED : 16; - }FSCHC_B; - }; - - /** @brief Fast speed clock low counter register */ - union - { - __IOM uint32_t FSCLC; - struct - { - __IOM uint32_t CNT : 16; - __IM uint32_t RESERVED : 16; - }FSCLC_B; - }; - - /** @brief High speed clock high counter */ - union - { - __IOM uint32_t HSCHC; - struct - { - __IOM uint32_t CNT : 16; - __IM uint32_t RESERVED : 16; - }HSCHC_B; - }; - - /** @brief High speed clock low counter register */ - union - { - __IOM uint32_t HSCLC; - struct - { - __IOM uint32_t CNT : 16; - __IM uint32_t RESERVED : 16; - }HSCLC_B; - }; - - /** @brief Interrupt status register */ - union - { - __IM uint32_t INTSTS; - struct - { - __IM uint32_t RFUIF : 1; - __IM uint32_t RFOIF : 1; - __IM uint32_t RFFIF : 1; - __IM uint32_t TFOIF : 1; - __IM uint32_t TFEIF : 1; - __IM uint32_t RRIF : 1; - __IM uint32_t TAIF : 1; - __IM uint32_t RDIF : 1; - __IM uint32_t ACTIF : 1; - __IM uint32_t STPDIF : 1; - __IM uint32_t STADIF : 1; - __IM uint32_t GCIF : 1; - __IM uint32_t RSTADIF : 1; - __IM uint32_t MOHIF : 1; - __IM uint32_t RESERVED : 18; - }INTSTS_B; - }; - - /** @brief Interrupt enable register */ - union - { - __IOM uint32_t INTEN; - struct - { - __IOM uint32_t RFUIE : 1; - __IOM uint32_t RFOIE : 1; - __IOM uint32_t RFFIE : 1; - __IOM uint32_t TFOIE : 1; - __IOM uint32_t TFEIE : 1; - __IOM uint32_t RRIE : 1; - __IOM uint32_t TAIE : 1; - __IOM uint32_t RDIE : 1; - __IOM uint32_t ACTIE : 1; - __IOM uint32_t STPDIE : 1; - __IOM uint32_t STADIE : 1; - __IOM uint32_t GCIE : 1; - __IOM uint32_t RSTADIE : 1; - __IOM uint32_t MOHIE : 1; - __IM uint32_t RESERVED : 18; - }INTEN_B; - }; - - /** @brief Raw interrupt status register */ - union - { - __IM uint32_t RIS; - struct - { - __IM uint32_t RFUIF : 1; - __IM uint32_t RFOIF : 1; - __IM uint32_t RFFIF : 1; - __IM uint32_t TFOIF : 1; - __IM uint32_t TFEIF : 1; - __IM uint32_t RRIF : 1; - __IM uint32_t TAIF : 1; - __IM uint32_t RDIF : 1; - __IM uint32_t ACTIF : 1; - __IM uint32_t STPDIF : 1; - __IM uint32_t STADIF : 1; - __IM uint32_t GCIF : 1; - __IM uint32_t RSTADIF : 1; - __IM uint32_t RESERVED : 18; - }RIS_B; - }; - - /** @brief Reception FIFO threshold register */ - union - { - __IOM uint32_t RFT; - struct - { - __IOM uint32_t RFT : 8; - __IM uint32_t RESERVED : 24; - }RFT_B; - }; - - /** @brief Transmission FIFO threshold register */ - union - { - __IOM uint32_t TFT; - struct - { - __IOM uint32_t TFT : 8; - __IM uint32_t RESERVED : 24; - }TFT_B; - }; - - /** @brief Interruption clear register */ - union - { - __IM uint32_t INTCLR; - struct - { - __IM uint32_t INTCLR : 1; - __IM uint32_t RESERVED : 31; - }INTCLR_B; - }; - - /** @brief Reception FIFO underflow interruption clear register */ - union - { - __IM uint32_t RFUIC; - struct - { - __IM uint32_t RFUIC : 1; - __IM uint32_t RESERVED : 31; - }RFUIC_B; - }; - - /** @brief Reception FIFO overflow interruption clear register */ - union - { - __IM uint32_t RFOIC; - struct - { - __IM uint32_t RFOIC : 1; - __IM uint32_t RESERVED : 31; - }RFOIC_B; - }; - - /** @brief Transmission FIFO overflow interruption clear register */ - union - { - __IM uint32_t TFOIC; - struct - { - __IM uint32_t TFOIC : 1; - __IM uint32_t RESERVED : 31; - }TFOIC_B; - }; - - /** @brief Reception request interruption clear register */ - union - { - __IM uint32_t RRIC; - struct - { - __IM uint32_t RRIC : 1; - __IM uint32_t RESERVED : 31; - }RRIC_B; - }; - - /** @brief Transmission abort interruption clear register */ - union - { - __IM uint32_t TAIC; - struct - { - __IM uint32_t TAIC : 1; - __IM uint32_t RESERVED : 31; - }TAIC_B; - }; - - /** @brief Receive done interruption clear register */ - union - { - __IM uint32_t RDIC; - struct - { - __IM uint32_t RDIC : 1; - __IM uint32_t RESERVED : 31; - }RDIC_B; - }; - - /** @brief Activity interruption clear register */ - union - { - __IM uint32_t AIC; - struct - { - __IM uint32_t AIC : 1; - __IM uint32_t RESERVED : 31; - }AIC_B; - }; - - /** @brief Stop detection interruption clear register */ - union - { - __IM uint32_t STPDIC; - struct - { - __IM uint32_t STPDIC : 1; - __IM uint32_t RESERVED : 31; - }STPDIC_B; - }; - - /** @brief Start detection interruption clear register */ - union - { - __IM uint32_t STADIC; - struct - { - __IM uint32_t STADIC : 1; - __IM uint32_t RESERVED : 31; - }STADIC_B; - }; - - /** @brief General call interruption clear register */ - union - { - __IM uint32_t GCIC; - struct - { - __IM uint32_t GCIC : 1; - __IM uint32_t RESERVED : 31; - }GCIC_B; - }; - - /** @brief Control register 2 */ - union - { - __IOM uint32_t CTRL2; - struct - { - __IOM uint32_t I2CEN : 1; - __IOM uint32_t ABR : 1; - __IOM uint32_t TCB : 1; - __IM uint32_t RESERVED : 29; - }CTRL2_B; - }; - - /** @brief Status register 1 */ - union - { - __IM uint32_t STS1; - struct - { - __IM uint32_t ACTF : 1; - __IM uint32_t TFNFF : 1; - __IM uint32_t TFEF : 1; - __IM uint32_t RFNEF : 1; - __IM uint32_t RFFF : 1; - __IM uint32_t MAF : 1; - __IM uint32_t SAF : 1; - __IM uint32_t RESERVED : 24; - }STS1_B; - }; - - /** @brief Transmission FIFO level */ - union - { - __IOM uint32_t TFL; - struct - { - __IOM uint32_t TFL : 4; - __IM uint32_t RESERVED : 28; - }TFL_B; - }; - - /** @brief Reception FIFO level */ - union - { - __IOM uint32_t RFL; - struct - { - __IOM uint32_t RFL : 4; - __IM uint32_t RESERVED : 28; - }RFL_B; - }; - - /** @brief SDA hold time length register */ - union - { - __IOM uint32_t SDAHOLD; - struct - { - __IOM uint32_t TXHOLD : 16; - __IOM uint32_t RXHOLD : 8; - __IM uint32_t RESERVED : 8; - }SDAHOLD_B; - }; - - /** @brief Transmission abort source register */ - union - { - __IM uint32_t TAS; - struct - { - __IM uint32_t AD7NA : 1; - __IM uint32_t AD10NA1 : 1; - __IM uint32_t AD10NA2 : 1; - __IM uint32_t TDNA : 1; - __IM uint32_t GCNA : 1; - __IM uint32_t GCR : 1; - __IM uint32_t HSAD : 1; - __IM uint32_t SNR : 1; - __IM uint32_t RNR10B : 1; - __IM uint32_t MSTDIS : 1; - __IM uint32_t ARBLOST : 1; - __IM uint32_t LFTF : 1; - __IM uint32_t SAL : 1; - __IM uint32_t SRI : 1; - __IM uint32_t USRARB : 1; - __IM uint32_t FLUCNT : 1; - __IM uint32_t RESERVED : 16; - }TAS_B; - }; - - /** @brief Slave data NACK only register */ - union - { - __IOM uint32_t SDNO; - struct - { - __IOM uint32_t NACK : 1; - __IM uint32_t RESERVED : 31; - }SDNO_B; - }; - - /** @brief DMA control register */ - union - { - __IOM uint32_t DMACTRL; - struct - { - __IOM uint32_t RXEN : 1; - __IOM uint32_t TXEN : 1; - __IM uint32_t RESERVED : 30; - }DMACTRL_B; - }; - - /** @brief DMA transmission data level register */ - union - { - __IOM uint32_t DTDL; - struct - { - __IOM uint32_t DTDL : 4; - __IM uint32_t RESERVED : 28; - }DTDL_B; - }; - - /** @brief DMA teception data level register */ - union - { - __IOM uint32_t DRDL; - struct - { - __IOM uint32_t DRDL : 4; - __IM uint32_t RESERVED : 28; - }DRDL_B; - }; - - /** @brief SDA delay register */ - union - { - __IOM uint32_t SDADLY; - struct - { - __IOM uint32_t SDADLY : 8; - __IM uint32_t RESERVED : 24; - }SDADLY_B; - }; - - /** @brief Genernal call ACK register */ - union - { - __IOM uint32_t GCA; - struct - { - __IOM uint32_t GCA : 1; - __IM uint32_t RESERVED : 31; - }GCA_B; - }; - - /** @brief Status register 2 */ - union - { - __IM uint32_t STS2; - struct - { - __IM uint32_t I2CEN : 1; - __IM uint32_t SDWB : 1; - __IM uint32_t SRDL : 1; - __IM uint32_t RESERVED : 29; - }STS2_B; - }; - - /** @brief Low speed spike suppression limit */ - union - { - __IOM uint32_t LSSSL; - struct - { - __IOM uint32_t LSSSL : 8; - __IM uint32_t RESERVED : 24; - }LSSSL_B; - }; - - /** @brief High speed spike suppression limit */ - union - { - __IOM uint32_t HSSSL; - struct - { - __IOM uint32_t HSSSL : 8; - __IM uint32_t RESERVED : 24; - }HSSSL_B; - }; - - uint32_t RESERVED[22]; - - /** @brief Switch register */ - union - { - __IOM uint32_t SW; - struct - { - __IOM uint32_t SW : 1; - __IM uint32_t RESERVED : 31; - }SW_B; - }; -}SCI2C_T; - -/** - * @brief Dynamic memory controler (DMC) - */ -typedef struct -{ - /** @brief Configuraion register */ - union - { - __IOM uint32_t CFG; - struct - { - __IM uint32_t RESERVED1 : 3; - __IOM uint32_t BAWCFG : 2; - __IOM uint32_t RAWCFG : 4; - __IOM uint32_t CAWCFG : 4; - __IOM uint32_t DWCFG : 2; - __IM uint32_t RESERVED2 : 17; - }CFG_B; - }; - - /** @brief Timing register 0 */ - union - { - __IOM uint32_t TIM0; - struct - { - __IOM uint32_t CASLSEL0 : 2; - __IOM uint32_t RASMINTSEL : 4; - __IOM uint32_t DTIMSEL : 3; - __IOM uint32_t PCPSEL : 3; - __IOM uint32_t WRTIMSEL : 2; - __IOM uint32_t ARPSEL : 4; - __IOM uint32_t XSR0 : 4; - __IOM uint32_t ATACP : 4; - __IOM uint32_t ECASLSEL1 : 1; - __IOM uint32_t EXSR1 : 5; - }TIM0_B; - }; - - /** @brief Timing register 1 */ - union - { - __IOM uint32_t TIM1; - struct - { - __IOM uint32_t STBTIM : 16; - __IOM uint32_t ARNUMCFG : 4; - __IM uint32_t RESERVED : 12; - }TIM1_B; - }; - - /** @brief Control register 1 */ - union - { - __IOM uint32_t CTRL1; - struct - { - __IOM uint32_t INIT : 1; - __IOM uint32_t SRMEN : 1; - __IOM uint32_t PDMEN : 1; - __IOM uint32_t PCACFG : 1; - __IOM uint32_t FRBSREN : 1; - __IOM uint32_t FRASREN : 1; - __IOM uint32_t RDNUMMCFG : 3; - __IOM uint32_t MODESET : 1; - __IM uint32_t RESERVED1 : 1; - __IM uint32_t SRMFLG : 1; - __IOM uint32_t BANKNUMCFG : 5; - __IM uint32_t RESERVED2 : 15; - }CTRL1_B; - }; - - /** @brief Refresh register */ - union - { - __IOM uint32_t REF; - struct - { - __IOM uint32_t RCYCCFG : 16; - __IM uint32_t RESERVED : 16; - }REF_B; - }; - - /** @brief Chip select register */ - union - { - __IOM uint32_t CHIPSEL; - struct - { - __IM uint32_t RESERVED : 16; - __IOM uint32_t BACHIPSEL : 16; - - }CHIPSEL_B; - }; - - __IM uint32_t RESERVED[15]; - - /** @brief Mask register */ - union - { - __IOM uint32_t MASK; - struct - { - __IOM uint32_t MSIZESEL : 5; - __IOM uint32_t MTYPESEL : 3; - __IM uint32_t RESERVED : 24; - }MASK_B; - }; - - __IM uint32_t RESERVED1[234]; - - /** @brief Switch register */ - union - { - __IOM uint32_t SW; - struct - { - __IOM uint32_t MCSW : 1; - __IM uint32_t RESERVED : 31; - }SW_B; - }; - - /** @brief Control register 2 */ - union - { - __IOM uint32_t CTRL2; - struct - { - __IOM uint32_t CPHACFG : 1; - __IOM uint32_t RDDEN : 1; - __IOM uint32_t RDDCFG : 3; - __IOM uint32_t WPEN : 1; - __IOM uint32_t BUFFEN : 1; - __IOM uint32_t WRPBSEL : 1; - __IM uint32_t RESERVED : 24; - }CTRL2_B; - }; -}DMC_T; - -/** - * @brief Debug MCU(DBGMCU) - */ -typedef struct -{ - /** @brief ID register */ - union - { - __IOM uint32_t IDCODE; - struct - { - __IOM uint32_t EQR : 12; - __IM uint32_t RESERVED : 4; - __IOM uint32_t WVR : 16; - }IDCODE_B; - }; - - /** @brief Control register */ - union - { - __IOM uint32_t CFG; - struct - { - __IOM uint32_t SLEEP_CLK_STS : 1; - __IOM uint32_t STOP_CLK_STS : 1; - __IOM uint32_t STANDBY_CLK_STS : 1; - __IM uint32_t RESERVED1 : 2; - __IOM uint32_t IOEN : 1; - __IOM uint32_t MODE : 2; - __IOM uint32_t IWDT_STS : 1; - __IOM uint32_t WWDT_STS : 1; - __IOM uint32_t TMR1_STS : 1; - __IOM uint32_t TMR2_STS : 1; - __IOM uint32_t TMR3_STS : 1; - __IOM uint32_t TMR4_STS : 1; - __IOM uint32_t CAN1_STS : 1; - __IOM uint32_t I2C1_SMBUS_TIMEOUT_STS : 1; - __IOM uint32_t I2C2_SMBUS_TIMEOUT_STS : 1; - __IOM uint32_t TMR8_STS : 1; - __IOM uint32_t TMR5_STS : 1; - __IOM uint32_t TMR6_STS : 1; - __IOM uint32_t TMR7_STS : 1; - __IOM uint32_t CAN2_STS : 1; - __IM uint32_t RESERVED2 : 3; - __IOM uint32_t TMR12_STS : 1; - __IOM uint32_t TMR13_STS : 1; - __IOM uint32_t TMR14_STS : 1; - __IOM uint32_t TMR9_STS : 1; - __IOM uint32_t TMR10_STS : 1; - __IOM uint32_t TMR11_STS : 1; - __IM uint32_t RESERVED3 : 1; - }CFG_B; - }; -}DBGMCU_T; - -/** - * @brief USB Device controler(USBD) - */ -typedef union -{ - __IOM uint32_t EP; - - struct - { - __IOM uint32_t ADDR : 4; - __IOM uint32_t TXSTS : 2; - __IOM uint32_t TXDTOG : 1; - __IOM uint32_t CTFT : 1; - __IOM uint32_t KIND : 1; - __IOM uint32_t TYPE : 2; - __IOM uint32_t SETUP : 1; - __IOM uint32_t RXSTS : 2; - __IOM uint32_t RXDTOG : 1; - __IOM uint32_t CTFR : 1; - __IM uint32_t RESERVED : 16; - }EP_B; -}USBD_EP_REG_T; - -typedef struct -{ - /** Endpoint */ - USBD_EP_REG_T EP[8]; - - __IM uint32_t RESERVED[8]; - - /** @brief Control register */ - union - { - __IOM uint32_t CTRL; - - struct - { - __IOM uint32_t FORRST : 1; - __IOM uint32_t PWRDOWN : 1; - __IOM uint32_t LPWREN : 1; - __IOM uint32_t FORSUS : 1; - __IOM uint32_t WUPREQ : 1; - __IM uint32_t RESERVED1 : 3; - __IOM uint32_t ESOFIEN : 1; - __IOM uint32_t SOFIEN : 1; - __IOM uint32_t RSTIEN : 1; - __IOM uint32_t SUSIEN : 1; - __IOM uint32_t WUPIEN : 1; - __IOM uint32_t ERRIEN : 1; - __IOM uint32_t PMAOUIEN : 1; - __IOM uint32_t CTRIEN : 1; - __IM uint32_t RESERVED2 : 16; - }CTRL_B; - }; - - /** @brief Interrupt status register */ - union - { - __IOM uint32_t INTSTS; - - struct - { - __IOM uint32_t EPID : 4; - __IOM uint32_t DOT : 1; - __IM uint32_t RESERVED1 : 3; - __IOM uint32_t ESOFFLG : 1; - __IOM uint32_t SOFFLG : 1; - __IOM uint32_t RSTREQ : 1; - __IOM uint32_t SUSREQ : 1; - __IOM uint32_t WUPREQ : 1; - __IOM uint32_t ERRFLG : 1; - __IOM uint32_t PMOFLG : 1; - __IOM uint32_t CTFLG : 1; - __IM uint32_t RESERVED2 : 16; - }INTSTS_B; - }; - - /** @brief Frame number register */ - union - { - __IM uint32_t FRANUM; - - struct - { - __IM uint32_t FRANUM : 11; - __IM uint32_t LSOFNUM : 2; - __IM uint32_t LOCK : 1; - __IM uint32_t RXDMSTS : 1; - __IM uint32_t RXDPSTS : 1; - __IM uint32_t RESERVED : 16; - }FRANUM_B; - }; - - /** @brief Device address register */ - union - { - __IOM uint32_t ADDR; - - struct - { - __IOM uint32_t ADDR : 7; - __IOM uint32_t USBDEN : 1; - __IM uint32_t RESERVED : 24; - }ADDR_B; - }; - - /** @brief Buffer table address register */ - union - { - __IOM uint32_t BUFFTB; - - struct - { - __IM uint32_t RESERVED1 : 3; - __IOM uint32_t BUFFTB : 13; - __IM uint32_t RESERVED2 : 16; - }BUFFTB_B; - }; - - __IM uint32_t RESERVED1[43]; - - /** @brief Buffer table address register */ - union - { - __IOM uint32_t SWITCH; - - struct - { - __IOM uint32_t SWITCH : 1; - __IM uint32_t RESERVED : 31; - }SWITCH_B; - }; -}USBD_T; - -/** FMC base address in the alias region */ -#define FMC_BASE ((uint32_t)0x08000000) -/** SRAM base address in the alias region */ -#define SRAM_BASE ((uint32_t)0x20000000) -/** Peripheral base address in the alias region */ -#define PERIPH_BASE ((uint32_t)0x40000000) - -/** SRAM base address in the bit-band region */ -#define SRAM_BB_BASE ((uint32_t)0x22000000) -/** Peripheral base address in the bit-band region */ -#define PERIPH_BB_BASE ((uint32_t)0x42000000) - -/** EMMC registers base address */ -#define EMMC_R_BASE ((uint32_t)0xA0000000) -/** QSPI registers base address */ -#define QSPI_BASE ((uint32_t)0xA0000000) -/** DMC registers base address */ -#define DMC_BASE ((uint32_t)0xA0000000) - -/** Peripheral memory map */ -#define APB1PERIPH_BASE PERIPH_BASE -#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) -#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) - -#define TMR2_BASE (APB1PERIPH_BASE + 0x0000) -#define TMR3_BASE (APB1PERIPH_BASE + 0x0400) -#define TMR4_BASE (APB1PERIPH_BASE + 0x0800) -#define TMR5_BASE (APB1PERIPH_BASE + 0x0C00) -#define TMR6_BASE (APB1PERIPH_BASE + 0x1000) -#define TMR7_BASE (APB1PERIPH_BASE + 0x1400) -#define TMR12_BASE (APB1PERIPH_BASE + 0x1800) -#define TMR13_BASE (APB1PERIPH_BASE + 0x1C00) -#define TMR14_BASE (APB1PERIPH_BASE + 0x2000) -#define RTC_BASE (APB1PERIPH_BASE + 0x2800) -#define WWDT_BASE (APB1PERIPH_BASE + 0x2C00) -#define IWDT_BASE (APB1PERIPH_BASE + 0x3000) -#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) -#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00) -#define USART2_BASE (APB1PERIPH_BASE + 0x4400) -#define USART3_BASE (APB1PERIPH_BASE + 0x4800) -#define UART4_BASE (APB1PERIPH_BASE + 0x4C00) -#define UART5_BASE (APB1PERIPH_BASE + 0x5000) -#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) -#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) -#define USBD_BASE (APB1PERIPH_BASE + 0X5C00) -#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) -#define CAN2_BASE (APB1PERIPH_BASE + 0x6800) -#define BAKPR_BASE (APB1PERIPH_BASE + 0x6C00) -#define PMU_BASE (APB1PERIPH_BASE + 0x7000) -#define DAC_BASE (APB1PERIPH_BASE + 0x7400) -#define CEC_BASE (APB1PERIPH_BASE + 0x7800) - -#define AFIO_BASE (APB2PERIPH_BASE + 0x0000) -#define EINT_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 GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) -#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) -#define ADC1_BASE (APB2PERIPH_BASE + 0x2400) -#define ADC2_BASE (APB2PERIPH_BASE + 0x2800) -#define TMR1_BASE (APB2PERIPH_BASE + 0x2C00) -#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) -#define TMR8_BASE (APB2PERIPH_BASE + 0x3400) -#define USART1_BASE (APB2PERIPH_BASE + 0x3800) -#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00) -#define TMR15_BASE (APB2PERIPH_BASE + 0x4000) -#define TMR16_BASE (APB2PERIPH_BASE + 0x4400) -#define TMR17_BASE (APB2PERIPH_BASE + 0x4800) -#define TMR9_BASE (APB2PERIPH_BASE + 0x4C00) -#define TMR10_BASE (APB2PERIPH_BASE + 0x5000) -#define TMR11_BASE (APB2PERIPH_BASE + 0x5400) - -#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 DMA2_BASE (AHBPERIPH_BASE + 0x0400) -#define DMA2_Channel1_BASE (AHBPERIPH_BASE + 0x0408) -#define DMA2_Channel2_BASE (AHBPERIPH_BASE + 0x041C) -#define DMA2_Channel3_BASE (AHBPERIPH_BASE + 0x0430) -#define DMA2_Channel4_BASE (AHBPERIPH_BASE + 0x0444) -#define DMA2_Channel5_BASE (AHBPERIPH_BASE + 0x0458) -#define RCM_BASE (AHBPERIPH_BASE + 0x1000) -#define CRC_BASE (AHBPERIPH_BASE + 0x3000) - -/** FMC registers base address */ -#define FMC_R_BASE (AHBPERIPH_BASE + 0x2000) -/** FMC Option Bytes base address */ -#define OB_BASE ((uint32_t)0x1FFFF800) - -/** EMMC Bank1 registers base address */ -#define EMMC_Bank1_R_BASE (EMMC_R_BASE + 0x0000) -/** EMMC Bank1E registers base address */ -#define EMMC_Bank1E_R_BASE (EMMC_R_BASE + 0x0104) -/** EMMC Bank2 registers base address */ -#define EMMC_Bank2_R_BASE (EMMC_R_BASE + 0x0060) -/** EMMC Bank3 registers base address */ -#define EMMC_Bank3_R_BASE (EMMC_R_BASE + 0x0080) -/**EMMC Bank4 registers base address */ -#define EMMC_Bank4_R_BASE (EMMC_R_BASE + 0x00A0) - -/** Debug MCU registers base address */ -#define DBGMCU_BASE ((uint32_t)0xE0042000) - -#define CRC ((CRC_T *) CRC_BASE) -#define RTC ((RTC_T *) RTC_BASE) -#define PMU ((PMU_T *) PMU_BASE) -#define BAKPR ((BAKPR_T *) BAKPR_BASE) -#define TMR1 ((TMR_T *) TMR1_BASE) -#define TMR2 ((TMR_T *) TMR2_BASE) -#define TMR3 ((TMR_T *) TMR3_BASE) -#define TMR4 ((TMR_T *) TMR4_BASE) -#define TMR5 ((TMR_T *) TMR5_BASE) -#define TMR6 ((TMR_T *) TMR6_BASE) -#define TMR7 ((TMR_T *) TMR7_BASE) -#define TMR8 ((TMR_T *) TMR8_BASE) -#define TMR9 ((TMR_T *) TMR9_BASE) -#define TMR10 ((TMR_T *) TMR10_BASE) -#define TMR11 ((TMR_T *) TMR11_BASE) -#define TMR12 ((TMR_T *) TMR12_BASE) -#define TMR13 ((TMR_T *) TMR13_BASE) -#define TMR14 ((TMR_T *) TMR14_BASE) -#define TMR15 ((TMR_T *) TMR15_BASE) -#define TMR16 ((TMR_T *) TMR16_BASE) -#define TMR17 ((TMR_T *) TMR17_BASE) - -#define DMA1 ((DMA_T *) DMA1_BASE) -#define DMA2 ((DMA_T *) DMA2_BASE) - -#define DMA1_Channel1 ((DMA_Channel_T *) DMA1_Channel1_BASE) -#define DMA1_Channel2 ((DMA_Channel_T *) DMA1_Channel2_BASE) -#define DMA1_Channel3 ((DMA_Channel_T *) DMA1_Channel3_BASE) -#define DMA1_Channel4 ((DMA_Channel_T *) DMA1_Channel4_BASE) -#define DMA1_Channel5 ((DMA_Channel_T *) DMA1_Channel5_BASE) -#define DMA1_Channel6 ((DMA_Channel_T *) DMA1_Channel6_BASE) -#define DMA1_Channel7 ((DMA_Channel_T *) DMA1_Channel7_BASE) - -#define DMA2_Channel1 ((DMA_Channel_T *) DMA2_Channel1_BASE) -#define DMA2_Channel2 ((DMA_Channel_T *) DMA2_Channel2_BASE) -#define DMA2_Channel3 ((DMA_Channel_T *) DMA2_Channel3_BASE) -#define DMA2_Channel4 ((DMA_Channel_T *) DMA2_Channel4_BASE) -#define DMA2_Channel5 ((DMA_Channel_T *) DMA2_Channel5_BASE) - -#define CAN1 ((CAN_T *) CAN1_BASE) -#define CAN2 ((CAN_T *) CAN2_BASE) - -#define I2C1 ((I2C_T *) I2C1_BASE) -#define I2C2 ((I2C_T *) I2C2_BASE) - -#define OB ((OB_T *) OB_BASE) - -#define ADC1 ((ADC_T *) ADC1_BASE) -#define ADC2 ((ADC_T *) ADC2_BASE) -#define ADC3 ((ADC_T *) ADC3_BASE) - -#define EINT ((EINT_T *) EINT_BASE) - -#define IWDT ((IWDT_T *) IWDT_BASE) -#define SDIO ((SDIO_T *) SDIO_BASE) -#define DAC ((DAC_T *) DAC_BASE) - -#define SPI1 ((SPI_T *) SPI1_BASE) -#define SPI2 ((SPI_T *) SPI2_BASE) -#define SPI3 ((SPI_T *) SPI3_BASE) - -#define WWDT ((WWDT_T *) WWDT_BASE) -#define USART2 ((USART_T *) USART2_BASE) -#define USART3 ((USART_T *) USART3_BASE) -#define UART4 ((USART_T *) UART4_BASE) -#define UART5 ((USART_T *) UART5_BASE) -#define AFIO ((AFIO_T *) AFIO_BASE) -#define GPIOA ((GPIO_T *) GPIOA_BASE) -#define GPIOB ((GPIO_T *) GPIOB_BASE) -#define GPIOC ((GPIO_T *) GPIOC_BASE) -#define GPIOD ((GPIO_T *) GPIOD_BASE) -#define GPIOE ((GPIO_T *) GPIOE_BASE) -#define GPIOF ((GPIO_T *) GPIOF_BASE) -#define GPIOG ((GPIO_T *) GPIOG_BASE) -#define USART1 ((USART_T *) USART1_BASE) -#define RCM ((RCM_T *) RCM_BASE) -#define FMC ((FMC_T *) FMC_R_BASE) -#define USBD ((USBD_T *)USBD_BASE) - -#define EMMC_Bank1 ((EMMC_Bank1_T *) EMMC_Bank1_R_BASE) -#define EMMC_Bank1E ((EMMC_Bank1E_T *)EMMC_Bank1E_R_BASE) -#define EMMC_Bank2 ((EMMC_Bank2_T *) EMMC_Bank2_R_BASE) -#define EMMC_Bank3 ((EMMC_Bank3_T *) EMMC_Bank3_R_BASE) -#define EMMC_Bank4 ((EMMC_Bank4_T *) EMMC_Bank4_R_BASE) - -#define DBGMCU ((DBGMCU_T *) DBGMCU_BASE) - -#define I2C3 ((SCI2C_T *)(I2C1_BASE)) -#define I2C4 ((SCI2C_T *)(I2C2_BASE)) - -#if defined (APM32F10X_MD) || defined (APM32F10X_LD) -#define QSPI ((QSPI_T *)QSPI_BASE) -#endif -#if defined (APM32F10X_HD) -#define DMC ((DMC_T *)DMC_BASE) -#endif - -/** Define one bit mask */ -#define BIT0 ((uint32_t)0x00000001) -#define BIT1 ((uint32_t)0x00000002) -#define BIT2 ((uint32_t)0x00000004) -#define BIT3 ((uint32_t)0x00000008) -#define BIT4 ((uint32_t)0x00000010) -#define BIT5 ((uint32_t)0x00000020) -#define BIT6 ((uint32_t)0x00000040) -#define BIT7 ((uint32_t)0x00000080) -#define BIT8 ((uint32_t)0x00000100) -#define BIT9 ((uint32_t)0x00000200) -#define BIT10 ((uint32_t)0x00000400) -#define BIT11 ((uint32_t)0x00000800) -#define BIT12 ((uint32_t)0x00001000) -#define BIT13 ((uint32_t)0x00002000) -#define BIT14 ((uint32_t)0x00004000) -#define BIT15 ((uint32_t)0x00008000) -#define BIT16 ((uint32_t)0x00010000) -#define BIT17 ((uint32_t)0x00020000) -#define BIT18 ((uint32_t)0x00040000) -#define BIT19 ((uint32_t)0x00080000) -#define BIT20 ((uint32_t)0x00100000) -#define BIT21 ((uint32_t)0x00200000) -#define BIT22 ((uint32_t)0x00400000) -#define BIT23 ((uint32_t)0x00800000) -#define BIT24 ((uint32_t)0x01000000) -#define BIT25 ((uint32_t)0x02000000) -#define BIT26 ((uint32_t)0x04000000) -#define BIT27 ((uint32_t)0x08000000) -#define BIT28 ((uint32_t)0x10000000) -#define BIT29 ((uint32_t)0x20000000) -#define BIT30 ((uint32_t)0x40000000) -#define BIT31 ((uint32_t)0x80000000) - -#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))) - - -#ifdef __cplusplus -} -#endif - -#endif /* __APM32F10X_H */ - - diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Include/system_apm32f10x.h b/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Include/system_apm32f10x.h deleted file mode 100644 index dfc9df7..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Include/system_apm32f10x.h +++ /dev/null @@ -1,43 +0,0 @@ -/*! - * @file system_apm32f10x.h - * - * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __SYSTEM_APM32F10X_H -#define __SYSTEM_APM32F10X_H - -#ifdef __cplusplus - extern "C" { -#endif - -extern uint32_t SystemCoreClock; - -extern void SystemInit(void); -extern void SystemCoreClockUpdate(void); - -#ifdef __cplusplus -} -#endif - -#endif /*__SYSTEM_APM32F10X_H */ - diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/arm/startup_apm32f10x_hd.s b/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/arm/startup_apm32f10x_hd.s deleted file mode 100644 index 956b00b..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/arm/startup_apm32f10x_hd.s +++ /dev/null @@ -1,368 +0,0 @@ -;/*! -; * @file startup_apm32f10x_hd.s -; * -; * @brief CMSIS Cortex-M3 based Core Device Startup File for Device startup_apm32f10x_hd -; * -; * @version V1.0.2 -; * -; * @date 2022-01-05 -; * -; * @attention -; * -; * Copyright (C) 2020-2022 Geehy Semiconductor -; * -; * You may not use this file except in compliance with the -; * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). -; * -; * The program is only for reference, which is distributed in the hope -; * that it will be usefull and instructional for customers to develop -; * their software. Unless required by applicable law or agreed to in -; * writing, the program is distributed on an "AS IS" BASIS, WITHOUT -; * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. -; * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions -; * and limitations under the License. -; */ - -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN=3 -Stack_Mem SPACE Stack_Size -__initial_sp - - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000200 - - AREA HEAP, NOINIT, READWRITE, ALIGN=3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - PRESERVE8 - THUMB - - -; Vector Table Mapped to Address 0 at Reset - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDT_IRQHandler ; Window Watchdog - DCD PVD_IRQHandler ; PVD through EINT Line detect - DCD TAMPER_IRQHandler ; Tamper - DCD RTC_IRQHandler ; RTC - DCD FLASH_IRQHandler ; Flash - DCD RCM_IRQHandler ; RCM - DCD EINT0_IRQHandler ; EINT Line 0 - DCD EINT1_IRQHandler ; EINT Line 1 - DCD EINT2_IRQHandler ; EINT Line 2 - DCD EINT3_IRQHandler ; EINT Line 3 - DCD EINT4_IRQHandler ; EINT Line 4 - DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 - DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 - DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 - DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 - DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 - DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 - DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 - DCD ADC1_2_IRQHandler ; ADC1 & ADC2 - DCD USBD1_HP_CAN1_TX_IRQHandler ; USBD1 High Priority or CAN1 TX - DCD USBD1_LP_CAN1_RX0_IRQHandler ; USBD1 Low Priority or CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; CAN1 RX1 - DCD CAN1_SCE_IRQHandler ; CAN1 SCE - DCD EINT9_5_IRQHandler ; EINT Line 9..5 - DCD TMR1_BRK_IRQHandler ; TMR1 Break - DCD TMR1_UP_IRQHandler ; TMR1 Update - DCD TMR1_TRG_COM_IRQHandler ; TMR1 Trigger and Commutation - DCD TMR1_CC_IRQHandler ; TMR1 Capture Compare - DCD TMR2_IRQHandler ; TMR2 - DCD TMR3_IRQHandler ; TMR3 - DCD TMR4_IRQHandler ; TMR4 - DCD I2C1_EV_IRQHandler ; I2C1 Event - DCD I2C1_ER_IRQHandler ; I2C1 Error - DCD I2C2_EV_IRQHandler ; I2C2 Event - DCD I2C2_ER_IRQHandler ; I2C2 Error - DCD SPI1_IRQHandler ; SPI1 - DCD SPI2_IRQHandler ; SPI2 - DCD USART1_IRQHandler ; USART1 - DCD USART2_IRQHandler ; USART2 - DCD USART3_IRQHandler ; USART3 - DCD EINT15_10_IRQHandler ; EINT Line 15..10 - DCD RTCAlarm_IRQHandler ; RTC Alarm through EINT Line - DCD USBDWakeUp_IRQHandler ; USBD Wakeup from suspend - DCD TMR8_BRK_IRQHandler ; TMR8 Break - DCD TMR8_UP_IRQHandler ; TMR8 Update - DCD TMR8_TRG_COM_IRQHandler ; TMR8 Trigger and Commutation - DCD TMR8_CC_IRQHandler ; TMR8 Capture Compare - DCD ADC3_IRQHandler ; ADC3 - DCD EMMC_IRQHandler ; EMMC - DCD SDIO_IRQHandler ; SDIO - DCD TMR5_IRQHandler ; TMR5 - DCD SPI3_IRQHandler ; SPI3 - DCD UART4_IRQHandler ; UART4 - DCD UART5_IRQHandler ; UART5 - DCD TMR6_IRQHandler ; TMR6 - DCD TMR7_IRQHandler ; TMR7 - DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 - DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 - DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 - DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 - DCD 0 ; Reserved - DCD USBD2_HP_CAN2_TX_IRQHandler ; USBD2 High Priority or CAN2 TX - DCD USBD2_LP_CAN2_RX0_IRQHandler ; USBD2 Low Priority or CAN2 RX0 - DCD CAN2_RX1_IRQHandler ; CAN2 RX1 - DCD CAN2_SCE_IRQHandler ; CAN2 SCE -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -; Reset handler -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT __main - IMPORT SystemInit - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -; Dummy Exception Handlers (infinite loops which can be modified) - -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP -HardFault_Handler\ - PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP -MemManage_Handler\ - PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP -BusFault_Handler\ - PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP -UsageFault_Handler\ - PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP -DebugMon_Handler\ - PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP -PendSV_Handler PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP -SysTick_Handler PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC - - EXPORT WWDT_IRQHandler [WEAK] - EXPORT PVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FLASH_IRQHandler [WEAK] - EXPORT RCM_IRQHandler [WEAK] - EXPORT EINT0_IRQHandler [WEAK] - EXPORT EINT1_IRQHandler [WEAK] - EXPORT EINT2_IRQHandler [WEAK] - EXPORT EINT3_IRQHandler [WEAK] - EXPORT EINT4_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_IRQHandler [WEAK] - EXPORT DMA1_Channel4_IRQHandler [WEAK] - EXPORT DMA1_Channel5_IRQHandler [WEAK] - EXPORT DMA1_Channel6_IRQHandler [WEAK] - EXPORT DMA1_Channel7_IRQHandler [WEAK] - EXPORT ADC1_2_IRQHandler [WEAK] - EXPORT USBD1_HP_CAN1_TX_IRQHandler [WEAK] - EXPORT USBD1_LP_CAN1_RX0_IRQHandler [WEAK] - EXPORT CAN1_RX1_IRQHandler [WEAK] - EXPORT CAN1_SCE_IRQHandler [WEAK] - EXPORT EINT9_5_IRQHandler [WEAK] - EXPORT TMR1_BRK_IRQHandler [WEAK] - EXPORT TMR1_UP_IRQHandler [WEAK] - EXPORT TMR1_TRG_COM_IRQHandler [WEAK] - EXPORT TMR1_CC_IRQHandler [WEAK] - EXPORT TMR2_IRQHandler [WEAK] - EXPORT TMR3_IRQHandler [WEAK] - EXPORT TMR4_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT I2C2_EV_IRQHandler [WEAK] - EXPORT I2C2_ER_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT SPI2_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT USART3_IRQHandler [WEAK] - EXPORT EINT15_10_IRQHandler [WEAK] - EXPORT RTCAlarm_IRQHandler [WEAK] - EXPORT USBDWakeUp_IRQHandler [WEAK] - EXPORT TMR8_BRK_IRQHandler [WEAK] - EXPORT TMR8_UP_IRQHandler [WEAK] - EXPORT TMR8_TRG_COM_IRQHandler [WEAK] - EXPORT TMR8_CC_IRQHandler [WEAK] - EXPORT ADC3_IRQHandler [WEAK] - EXPORT EMMC_IRQHandler [WEAK] - EXPORT SDIO_IRQHandler [WEAK] - EXPORT TMR5_IRQHandler [WEAK] - EXPORT SPI3_IRQHandler [WEAK] - EXPORT UART4_IRQHandler [WEAK] - EXPORT UART5_IRQHandler [WEAK] - EXPORT TMR6_IRQHandler [WEAK] - EXPORT TMR7_IRQHandler [WEAK] - EXPORT DMA2_Channel1_IRQHandler [WEAK] - EXPORT DMA2_Channel2_IRQHandler [WEAK] - EXPORT DMA2_Channel3_IRQHandler [WEAK] - EXPORT DMA2_Channel4_5_IRQHandler [WEAK] - EXPORT USBD2_HP_CAN2_TX_IRQHandler [WEAK] - EXPORT USBD2_LP_CAN2_RX0_IRQHandler [WEAK] - EXPORT CAN2_RX1_IRQHandler [WEAK] - EXPORT CAN2_SCE_IRQHandler [WEAK] - -WWDT_IRQHandler -PVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FLASH_IRQHandler -RCM_IRQHandler -EINT0_IRQHandler -EINT1_IRQHandler -EINT2_IRQHandler -EINT3_IRQHandler -EINT4_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_IRQHandler -DMA1_Channel4_IRQHandler -DMA1_Channel5_IRQHandler -DMA1_Channel6_IRQHandler -DMA1_Channel7_IRQHandler -ADC1_2_IRQHandler -USBD1_HP_CAN1_TX_IRQHandler -USBD1_LP_CAN1_RX0_IRQHandler -CAN1_RX1_IRQHandler -CAN1_SCE_IRQHandler -EINT9_5_IRQHandler -TMR1_BRK_IRQHandler -TMR1_UP_IRQHandler -TMR1_TRG_COM_IRQHandler -TMR1_CC_IRQHandler -TMR2_IRQHandler -TMR3_IRQHandler -TMR4_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -I2C2_EV_IRQHandler -I2C2_ER_IRQHandler -SPI1_IRQHandler -SPI2_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -USART3_IRQHandler -EINT15_10_IRQHandler -RTCAlarm_IRQHandler -USBDWakeUp_IRQHandler -TMR8_BRK_IRQHandler -TMR8_UP_IRQHandler -TMR8_TRG_COM_IRQHandler -TMR8_CC_IRQHandler -ADC3_IRQHandler -EMMC_IRQHandler -SDIO_IRQHandler -TMR5_IRQHandler -SPI3_IRQHandler -UART4_IRQHandler -UART5_IRQHandler -TMR6_IRQHandler -TMR7_IRQHandler -DMA2_Channel1_IRQHandler -DMA2_Channel2_IRQHandler -DMA2_Channel3_IRQHandler -DMA2_Channel4_5_IRQHandler -USBD2_HP_CAN2_TX_IRQHandler -USBD2_LP_CAN2_RX0_IRQHandler -CAN2_RX1_IRQHandler -CAN2_SCE_IRQHandler - B . - - ENDP - - ALIGN - -;******************************************************************************* -; User Stack and Heap initialization -;******************************************************************************* - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap - - LDR R0, = Heap_Mem - LDR R1, = (Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - - ALIGN - - ENDIF - - END - -;*******************************END OF FILE************************************ - diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/arm/startup_apm32f10x_md.s b/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/arm/startup_apm32f10x_md.s deleted file mode 100644 index b8c17b3..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/arm/startup_apm32f10x_md.s +++ /dev/null @@ -1,315 +0,0 @@ -;/*! -; * @file startup_apm32f10x_md.s -; * -; * @brief CMSIS Cortex-M3 based Core Device Startup File for Device startup_apm32f10x_md -; * -; * @version V1.0.2 -; * -; * @date 2022-01-05 -; * -; * @attention -; * -; * Copyright (C) 2020-2022 Geehy Semiconductor -; * -; * You may not use this file except in compliance with the -; * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). -; * -; * The program is only for reference, which is distributed in the hope -; * that it will be usefull and instructional for customers to develop -; * their software. Unless required by applicable law or agreed to in -; * writing, the program is distributed on an "AS IS" BASIS, WITHOUT -; * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. -; * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions -; * and limitations under the License. -; */ - -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN=3 -Stack_Mem SPACE Stack_Size -__initial_sp - - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000200 - - AREA HEAP, NOINIT, READWRITE, ALIGN=3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - PRESERVE8 - THUMB - - -; Vector Table Mapped to Address 0 at Reset - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDT_IRQHandler ; Window Watchdog - DCD PVD_IRQHandler ; PVD through EINT Line detect - DCD TAMPER_IRQHandler ; Tamper - DCD RTC_IRQHandler ; RTC - DCD FLASH_IRQHandler ; Flash - DCD RCM_IRQHandler ; RCM - DCD EINT0_IRQHandler ; EINT Line 0 - DCD EINT1_IRQHandler ; EINT Line 1 - DCD EINT2_IRQHandler ; EINT Line 2 - DCD EINT3_IRQHandler ; EINT Line 3 - DCD EINT4_IRQHandler ; EINT Line 4 - DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 - DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 - DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 - DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 - DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 - DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 - DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 - DCD ADC1_2_IRQHandler ; ADC1_2 - DCD USBD1_HP_CAN1_TX_IRQHandler ; USBD1 High Priority or CAN1 TX - DCD USBD1_LP_CAN1_RX0_IRQHandler ; USBD1 Low Priority or CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; CAN1 RX1 - DCD CAN1_SCE_IRQHandler ; CAN1 SCE - DCD EINT9_5_IRQHandler ; EINT Line 9..5 - DCD TMR1_BRK_IRQHandler ; TMR1 Break - DCD TMR1_UP_IRQHandler ; TMR1 Update - DCD TMR1_TRG_COM_IRQHandler ; TMR1 Trigger and Commutation - DCD TMR1_CC_IRQHandler ; TMR1 Capture Compare - DCD TMR2_IRQHandler ; TMR2 - DCD TMR3_IRQHandler ; TMR3 - DCD TMR4_IRQHandler ; TMR4 - DCD I2C1_EV_IRQHandler ; I2C1 Event - DCD I2C1_ER_IRQHandler ; I2C1 Error - DCD I2C2_EV_IRQHandler ; I2C2 Event - DCD I2C2_ER_IRQHandler ; I2C2 Error - DCD SPI1_IRQHandler ; SPI1 - DCD SPI2_IRQHandler ; SPI2 - DCD USART1_IRQHandler ; USART1 - DCD USART2_IRQHandler ; USART2 - DCD USART3_IRQHandler ; USART3 - DCD EINT15_10_IRQHandler ; EINT Line 15..10 - DCD RTCAlarm_IRQHandler ; RTC Alarm through EINT Line - DCD USBDWakeUp_IRQHandler ; USBD Wakeup from suspend - DCD FPU_IRQHandler ; FPU - DCD QSPI_IRQHandler ; QSPI - DCD USBD2_HP_IRQHandler ; USBD2 High Priority - DCD USBD2_LP_IRQHandler ; USBD2 Low Priority -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -; Reset handler -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT __main - IMPORT SystemInit - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -; Dummy Exception Handlers (infinite loops which can be modified) - -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP -HardFault_Handler\ - PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP -MemManage_Handler\ - PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP -BusFault_Handler\ - PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP -UsageFault_Handler\ - PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP -DebugMon_Handler\ - PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP -PendSV_Handler PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP -SysTick_Handler PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC - - EXPORT WWDT_IRQHandler [WEAK] - EXPORT PVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FLASH_IRQHandler [WEAK] - EXPORT RCM_IRQHandler [WEAK] - EXPORT EINT0_IRQHandler [WEAK] - EXPORT EINT1_IRQHandler [WEAK] - EXPORT EINT2_IRQHandler [WEAK] - EXPORT EINT3_IRQHandler [WEAK] - EXPORT EINT4_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_IRQHandler [WEAK] - EXPORT DMA1_Channel4_IRQHandler [WEAK] - EXPORT DMA1_Channel5_IRQHandler [WEAK] - EXPORT DMA1_Channel6_IRQHandler [WEAK] - EXPORT DMA1_Channel7_IRQHandler [WEAK] - EXPORT ADC1_2_IRQHandler [WEAK] - EXPORT USBD1_HP_CAN1_TX_IRQHandler [WEAK] - EXPORT USBD1_LP_CAN1_RX0_IRQHandler [WEAK] - EXPORT CAN1_RX1_IRQHandler [WEAK] - EXPORT CAN1_SCE_IRQHandler [WEAK] - EXPORT EINT9_5_IRQHandler [WEAK] - EXPORT TMR1_BRK_IRQHandler [WEAK] - EXPORT TMR1_UP_IRQHandler [WEAK] - EXPORT TMR1_TRG_COM_IRQHandler [WEAK] - EXPORT TMR1_CC_IRQHandler [WEAK] - EXPORT TMR2_IRQHandler [WEAK] - EXPORT TMR3_IRQHandler [WEAK] - EXPORT TMR4_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT I2C2_EV_IRQHandler [WEAK] - EXPORT I2C2_ER_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT SPI2_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT USART3_IRQHandler [WEAK] - EXPORT EINT15_10_IRQHandler [WEAK] - EXPORT RTCAlarm_IRQHandler [WEAK] - EXPORT USBDWakeUp_IRQHandler [WEAK] - EXPORT FPU_IRQHandler [WEAK] - EXPORT QSPI_IRQHandler [WEAK] - EXPORT USBD2_HP_IRQHandler [WEAK] - EXPORT USBD2_LP_IRQHandler [WEAK] - -WWDT_IRQHandler -PVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FLASH_IRQHandler -RCM_IRQHandler -EINT0_IRQHandler -EINT1_IRQHandler -EINT2_IRQHandler -EINT3_IRQHandler -EINT4_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_IRQHandler -DMA1_Channel4_IRQHandler -DMA1_Channel5_IRQHandler -DMA1_Channel6_IRQHandler -DMA1_Channel7_IRQHandler -ADC1_2_IRQHandler -USBD1_HP_CAN1_TX_IRQHandler -USBD1_LP_CAN1_RX0_IRQHandler -CAN1_RX1_IRQHandler -CAN1_SCE_IRQHandler -EINT9_5_IRQHandler -TMR1_BRK_IRQHandler -TMR1_UP_IRQHandler -TMR1_TRG_COM_IRQHandler -TMR1_CC_IRQHandler -TMR2_IRQHandler -TMR3_IRQHandler -TMR4_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -I2C2_EV_IRQHandler -I2C2_ER_IRQHandler -SPI1_IRQHandler -SPI2_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -USART3_IRQHandler -EINT15_10_IRQHandler -RTCAlarm_IRQHandler -USBDWakeUp_IRQHandler -FPU_IRQHandler -QSPI_IRQHandler -USBD2_HP_IRQHandler -USBD2_LP_IRQHandler - B . - - ENDP - - ALIGN - -;******************************************************************************* -; User Stack and Heap initialization -;******************************************************************************* - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap - - LDR R0, = Heap_Mem - LDR R1, = (Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - - ALIGN - - ENDIF - - END - -;*******************************END OF FILE************************************ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/gcc/startup_apm32f10x_hd.s b/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/gcc/startup_apm32f10x_hd.s deleted file mode 100644 index 1f0b8fd..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/gcc/startup_apm32f10x_hd.s +++ /dev/null @@ -1,281 +0,0 @@ -;/*! -; * @file startup_apm32f10x_hd.s -; * -; * @brief CMSIS Cortex-M3 based Core Device Startup File for Device startup_apm32f10x_hd -; * -; * @version V1.0.0 -; * -; * @date 2022-01-05 -; * -; * @attention -; * -; * Copyright (C) 2020-2022 Geehy Semiconductor -; * -; * You may not use this file except in compliance with the -; * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). -; * -; * The program is only for reference, which is distributed in the hope -; * that it will be usefull and instructional for customers to develop -; * their software. Unless required by applicable law or agreed to in -; * writing, the program is distributed on an "AS IS" BASIS, WITHOUT -; * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. -; * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions -; * and limitations under the License. -; */ - -.syntax unified -.cpu cortex-m3 -.fpu softvfp -.thumb - -.global g_pfnVectors -.global Default_Handler - - .section .isr_vector,"a",%progbits - .type g_pfnVectors, %object - -g_pfnVectors: - .word _estack // Top of Stack - .word Reset_Handler // Reset Handler - .word NMI_Handler // NMI Handler - .word HardFault_Handler // Hard Fault Handler - .word MemManage_Handler // MPU Fault Handler - .word BusFault_Handler // Bus Fault Handler - .word UsageFault_Handler // Usage Fault Handler - .word 0 // Reserved - .word 0 // Reserved - .word 0 // Reserved - .word 0 // Reserved - .word SVC_Handler // SVCall Handler - .word DebugMon_Handler // Debug Monitor Handler - .word 0 // Reserved - .word PendSV_Handler // PendSV Handler - .word SysTick_Handler // SysTick Handler - - // external interrupts handler - .word WWDT_IRQHandler // Window Watchdog - .word PVD_IRQHandler // PVD through EINT Line detect - .word TAMPER_IRQHandler // Tamper - .word RTC_IRQHandler // RTC - .word FLASH_IRQHandler // Flash - .word RCM_IRQHandler // RCM - .word EINT0_IRQHandler // EINT Line 0 - .word EINT1_IRQHandler // EINT Line 1 - .word EINT2_IRQHandler // EINT Line 2 - .word EINT3_IRQHandler // EINT Line 3 - .word EINT4_IRQHandler // EINT Line 4 - .word DMA1_Channel1_IRQHandler // DMA1 Channel 1 - .word DMA1_Channel2_IRQHandler // DMA1 Channel 2 - .word DMA1_Channel3_IRQHandler // DMA1 Channel 3 - .word DMA1_Channel4_IRQHandler // DMA1 Channel 4 - .word DMA1_Channel5_IRQHandler // DMA1 Channel 5 - .word DMA1_Channel6_IRQHandler // DMA1 Channel 6 - .word DMA1_Channel7_IRQHandler // DMA1 Channel 7 - .word ADC1_2_IRQHandler // ADC1 & ADC2 - .word USBD1_HP_CAN1_TX_IRQHandler // USBD1 High Priority or CAN1 TX - .word USBD1_LP_CAN1_RX0_IRQHandler // USBD1 Low Priority or CAN1 RX0 - .word CAN1_RX1_IRQHandler // CAN1 RX1 - .word CAN1_SCE_IRQHandler // CAN1 SCE - .word EINT9_5_IRQHandler // EINT Line 9..5 - .word TMR1_BRK_IRQHandler // TMR1 Break - .word TMR1_UP_IRQHandler // TMR1 Update - .word TMR1_TRG_COM_IRQHandler // TMR1 Trigger and Commutation - .word TMR1_CC_IRQHandler // TMR1 Capture Compare - .word TMR2_IRQHandler // TMR2 - .word TMR3_IRQHandler // TMR3 - .word TMR4_IRQHandler // TMR4 - .word I2C1_EV_IRQHandler // I2C1 Event - .word I2C1_ER_IRQHandler // I2C1 Error - .word I2C2_EV_IRQHandler // I2C2 Event - .word I2C2_ER_IRQHandler // I2C2 Error - .word SPI1_IRQHandler // SPI1 - .word SPI2_IRQHandler // SPI2 - .word USART1_IRQHandler // USART1 - .word USART2_IRQHandler // USART2 - .word USART3_IRQHandler // USART3 - .word EINT15_10_IRQHandler // EINT Line 15..10 - .word RTCAlarm_IRQHandler // RTC Alarm through EINT Line - .word USBDWakeUp_IRQHandler // USBD Wakeup from suspend - .word TMR8_BRK_IRQHandler // TMR8 Break - .word TMR8_UP_IRQHandler // TMR8 Update - .word TMR8_TRG_COM_IRQHandler // TMR8 Trigger and Commutation - .word TMR8_CC_IRQHandler // TMR8 Capture Compare - .word ADC3_IRQHandler // ADC3 - .word EMMC_IRQHandler // EMMC - .word SDIO_IRQHandler // SDIO - .word TMR5_IRQHandler // TMR5 - .word SPI3_IRQHandler // SPI3 - .word UART4_IRQHandler // UART4 - .word UART5_IRQHandler // UART5 - .word TMR6_IRQHandler // TMR6 - .word TMR7_IRQHandler // TMR7 - .word DMA2_Channel1_IRQHandler // DMA2 Channel1 - .word DMA2_Channel2_IRQHandler // DMA2 Channel2 - .word DMA2_Channel3_IRQHandler // DMA2 Channel3 - .word DMA2_Channel4_5_IRQHandler // DMA2 Channel4 & Channel5 - .word 0 // Reserved - .word USBD2_HP_CAN2_TX_IRQHandler // USBD2 High Priority or CAN2 TX - .word USBD2_LP_CAN2_RX0_IRQHandler // USBD2 Low Priority or CAN2 RX0 - .word CAN2_RX1_IRQHandler // CAN2 RX1 - .word CAN2_SCE_IRQHandler // CAN2 SCE - - .size g_pfnVectors, .-g_pfnVectors - - .section .text.Reset_Handler - .weak Reset_Handler - .type Reset_Handler, %function -Reset_Handler: - ldr r1, =_sidata - ldr r2, =_sdata - ldr r3, =_edata - - subs r3, r2 - ble fill_bss_start - -loop_copy_data: - subs r3, #4 - ldr r0, [r1,r3] - str r0, [r2,r3] - bgt loop_copy_data - -fill_bss_start: - ldr r1, =__bss_start - ldr r2, =__bss_end - movs r0, 0 - subs r2, r1 - ble startup_enter - -loop_fill_bss: - subs r2, #4 - str r0, [r1, r2] - bgt loop_fill_bss - -startup_enter: - bl SystemInit - bl entry - - /* Exception Handlers */ - .weak NMI_Handler - .type NMI_Handler, %function -NMI_Handler: - b . - .size NMI_Handler, . - NMI_Handler - - .weak MemManage_Handler - .type MemManage_Handler, %function -MemManage_Handler: - b . - .size MemManage_Handler, . - MemManage_Handler - - .weak BusFault_Handler - .type BusFault_Handler, %function -BusFault_Handler: - b . - .size BusFault_Handler, . - BusFault_Handler - - .weak UsageFault_Handler - .type UsageFault_Handler, %function -UsageFault_Handler: - b . - .size UsageFault_Handler, . - UsageFault_Handler - - .weak SVC_Handler - .type SVC_Handler, %function -SVC_Handler: - b . - .size SVC_Handler, . - SVC_Handler - - .weak DebugMon_Handler - .type DebugMon_Handler, %function -DebugMon_Handler: - b . - .size DebugMon_Handler, . - DebugMon_Handler - - .weak PendSV_Handler - .type PendSV_Handler, %function -PendSV_Handler: - b . - .size PendSV_Handler, . - PendSV_Handler - - .weak SysTick_Handler - .type SysTick_Handler, %function -SysTick_Handler: - b . - .size SysTick_Handler, . - SysTick_Handler - - /* IQR Handler */ - .section .text.Default_Handler,"ax",%progbits - .type Default_Handler, %function -Default_Handler: - b . - .size Default_Handler, . - Default_Handler - - .macro IRQ handler - .weak \handler - .set \handler, Default_Handler - .endm - - IRQ WWDT_IRQHandler - IRQ PVD_IRQHandler - IRQ TAMPER_IRQHandler - IRQ RTC_IRQHandler - IRQ FLASH_IRQHandler - IRQ RCM_IRQHandler - IRQ EINT0_IRQHandler - IRQ EINT1_IRQHandler - IRQ EINT2_IRQHandler - IRQ EINT3_IRQHandler - IRQ EINT4_IRQHandler - IRQ DMA1_Channel1_IRQHandler - IRQ DMA1_Channel2_IRQHandler - IRQ DMA1_Channel3_IRQHandler - IRQ DMA1_Channel4_IRQHandler - IRQ DMA1_Channel5_IRQHandler - IRQ DMA1_Channel6_IRQHandler - IRQ DMA1_Channel7_IRQHandler - IRQ ADC1_2_IRQHandler - IRQ USBD1_HP_CAN1_TX_IRQHandler - IRQ USBD1_LP_CAN1_RX0_IRQHandler - IRQ CAN1_RX1_IRQHandler - IRQ CAN1_SCE_IRQHandler - IRQ EINT9_5_IRQHandler - IRQ TMR1_BRK_IRQHandler - IRQ TMR1_UP_IRQHandler - IRQ TMR1_TRG_COM_IRQHandler - IRQ TMR1_CC_IRQHandler - IRQ TMR2_IRQHandler - IRQ TMR3_IRQHandler - IRQ TMR4_IRQHandler - IRQ I2C1_EV_IRQHandler - IRQ I2C1_ER_IRQHandler - IRQ I2C2_EV_IRQHandler - IRQ I2C2_ER_IRQHandler - IRQ SPI1_IRQHandler - IRQ SPI2_IRQHandler - IRQ USART1_IRQHandler - IRQ USART2_IRQHandler - IRQ USART3_IRQHandler - IRQ EINT15_10_IRQHandler - IRQ RTCAlarm_IRQHandler - IRQ USBDWakeUp_IRQHandler - IRQ TMR8_BRK_IRQHandler - IRQ TMR8_UP_IRQHandler - IRQ TMR8_TRG_COM_IRQHandler - IRQ TMR8_CC_IRQHandler - IRQ ADC3_IRQHandler - IRQ EMMC_IRQHandler - IRQ SDIO_IRQHandler - IRQ TMR5_IRQHandler - IRQ SPI3_IRQHandler - IRQ UART4_IRQHandler - IRQ UART5_IRQHandler - IRQ TMR6_IRQHandler - IRQ TMR7_IRQHandler - IRQ DMA2_Channel1_IRQHandler - IRQ DMA2_Channel2_IRQHandler - IRQ DMA2_Channel3_IRQHandler - IRQ DMA2_Channel4_5_IRQHandler - IRQ USBD2_HP_CAN2_TX_IRQHandler - IRQ USBD2_LP_CAN2_RX0_IRQHandler - IRQ CAN2_RX1_IRQHandler - IRQ CAN2_SCE_IRQHandler diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/gcc/startup_apm32f10x_md.s b/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/gcc/startup_apm32f10x_md.s deleted file mode 100644 index 3bddc6e..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/gcc/startup_apm32f10x_md.s +++ /dev/null @@ -1,246 +0,0 @@ -;/*! -; * @file startup_apm32f10x_hd.s -; * -; * @brief CMSIS Cortex-M3 based Core Device Startup File for Device startup_apm32f10x_hd -; * -; * @version V1.0.0 -; * -; * @date 2022-01-05 -; * -; * @attention -; * -; * Copyright (C) 2020-2022 Geehy Semiconductor -; * -; * You may not use this file except in compliance with the -; * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). -; * -; * The program is only for reference, which is distributed in the hope -; * that it will be usefull and instructional for customers to develop -; * their software. Unless required by applicable law or agreed to in -; * writing, the program is distributed on an "AS IS" BASIS, WITHOUT -; * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. -; * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions -; * and limitations under the License. -; */ - -.syntax unified -.cpu cortex-m3 -.fpu softvfp -.thumb - -.global g_pfnVectors -.global Default_Handler - - .section .isr_vector,"a",%progbits - .type g_pfnVectors, %object - -g_pfnVectors: - .word _estack // Top of Stack - .word Reset_Handler // Reset Handler - .word NMI_Handler // NMI Handler - .word HardFault_Handler // Hard Fault Handler - .word MemManage_Handler // MPU Fault Handler - .word BusFault_Handler // Bus Fault Handler - .word UsageFault_Handler // Usage Fault Handler - .word 0 // Reserved - .word 0 // Reserved - .word 0 // Reserved - .word 0 // Reserved - .word SVC_Handler // SVCall Handler - .word DebugMon_Handler // Debug Monitor Handler - .word 0 // Reserved - .word PendSV_Handler // PendSV Handler - .word SysTick_Handler // SysTick Handler - - // external interrupts handler - .word WWDT_IRQHandler // Window Watchdog - .word PVD_IRQHandler // PVD through EINT Line detect - .word TAMPER_IRQHandler // Tamper - .word RTC_IRQHandler // RTC - .word FLASH_IRQHandler // Flash - .word RCM_IRQHandler // RCM - .word EINT0_IRQHandler // EINT Line 0 - .word EINT1_IRQHandler // EINT Line 1 - .word EINT2_IRQHandler // EINT Line 2 - .word EINT3_IRQHandler // EINT Line 3 - .word EINT4_IRQHandler // EINT Line 4 - .word DMA1_Channel1_IRQHandler // DMA1 Channel 1 - .word DMA1_Channel2_IRQHandler // DMA1 Channel 2 - .word DMA1_Channel3_IRQHandler // DMA1 Channel 3 - .word DMA1_Channel4_IRQHandler // DMA1 Channel 4 - .word DMA1_Channel5_IRQHandler // DMA1 Channel 5 - .word DMA1_Channel6_IRQHandler // DMA1 Channel 6 - .word DMA1_Channel7_IRQHandler // DMA1 Channel 7 - .word ADC1_2_IRQHandler // ADC1_2 - .word USBD1_HP_CAN1_TX_IRQHandler // USBD1 High Priority or CAN1 TX - .word USBD1_LP_CAN1_RX0_IRQHandler // USBD1 Low Priority or CAN1 RX0 - .word CAN1_RX1_IRQHandler // CAN1 RX1 - .word CAN1_SCE_IRQHandler // CAN1 SCE - .word EINT9_5_IRQHandler // EINT Line 9..5 - .word TMR1_BRK_IRQHandler // TMR1 Break - .word TMR1_UP_IRQHandler // TMR1 Update - .word TMR1_TRG_COM_IRQHandler // TMR1 Trigger and Commutation - .word TMR1_CC_IRQHandler // TMR1 Capture Compare - .word TMR2_IRQHandler // TMR2 - .word TMR3_IRQHandler // TMR3 - .word TMR4_IRQHandler // TMR4 - .word I2C1_EV_IRQHandler // I2C1 Event - .word I2C1_ER_IRQHandler // I2C1 Error - .word I2C2_EV_IRQHandler // I2C2 Event - .word I2C2_ER_IRQHandler // I2C2 Error - .word SPI1_IRQHandler // SPI1 - .word SPI2_IRQHandler // SPI2 - .word USART1_IRQHandler // USART1 - .word USART2_IRQHandler // USART2 - .word USART3_IRQHandler // USART3 - .word EINT15_10_IRQHandler // EINT Line 15..10 - .word RTCAlarm_IRQHandler // RTC Alarm through EINT Line - .word USBDWakeUp_IRQHandler // USBD Wakeup from suspend - .word FPU_IRQHandler // FPU - .word QSPI_IRQHandler // QSPI - .word USBD2_HP_IRQHandler // USBD2 High Priority - .word USBD2_LP_IRQHandler // USBD2 Low Priority - - .size g_pfnVectors, .-g_pfnVectors - - .section .text.Reset_Handler - .weak Reset_Handler - .type Reset_Handler, %function -Reset_Handler: - ldr r1, =_sidata - ldr r2, =_sdata - ldr r3, =_edata - - subs r3, r2 - ble fill_bss_start - -loop_copy_data: - subs r3, #4 - ldr r0, [r1,r3] - str r0, [r2,r3] - bgt loop_copy_data - -fill_bss_start: - ldr r1, =__bss_start - ldr r2, =__bss_end - movs r0, 0 - subs r2, r1 - ble startup_enter - -loop_fill_bss: - subs r2, #4 - str r0, [r1, r2] - bgt loop_fill_bss - -startup_enter: - bl SystemInit - bl entry - - /* Exception Handlers */ - .weak NMI_Handler - .type NMI_Handler, %function -NMI_Handler: - b . - .size NMI_Handler, . - NMI_Handler - - .weak MemManage_Handler - .type MemManage_Handler, %function -MemManage_Handler: - b . - .size MemManage_Handler, . - MemManage_Handler - - .weak BusFault_Handler - .type BusFault_Handler, %function -BusFault_Handler: - b . - .size BusFault_Handler, . - BusFault_Handler - - .weak UsageFault_Handler - .type UsageFault_Handler, %function -UsageFault_Handler: - b . - .size UsageFault_Handler, . - UsageFault_Handler - - .weak SVC_Handler - .type SVC_Handler, %function -SVC_Handler: - b . - .size SVC_Handler, . - SVC_Handler - - .weak DebugMon_Handler - .type DebugMon_Handler, %function -DebugMon_Handler: - b . - .size DebugMon_Handler, . - DebugMon_Handler - - .weak PendSV_Handler - .type PendSV_Handler, %function -PendSV_Handler: - b . - .size PendSV_Handler, . - PendSV_Handler - - .weak SysTick_Handler - .type SysTick_Handler, %function -SysTick_Handler: - b . - .size SysTick_Handler, . - SysTick_Handler - - /* IQR Handler */ - .section .text.Default_Handler,"ax",%progbits - .type Default_Handler, %function -Default_Handler: - b . - .size Default_Handler, . - Default_Handler - - .macro IRQ handler - .weak \handler - .set \handler, Default_Handler - .endm - - IRQ WWDT_IRQHandler - IRQ PVD_IRQHandler - IRQ TAMPER_IRQHandler - IRQ RTC_IRQHandler - IRQ FLASH_IRQHandler - IRQ RCM_IRQHandler - IRQ EINT0_IRQHandler - IRQ EINT1_IRQHandler - IRQ EINT2_IRQHandler - IRQ EINT3_IRQHandler - IRQ EINT4_IRQHandler - IRQ DMA1_Channel1_IRQHandler - IRQ DMA1_Channel2_IRQHandler - IRQ DMA1_Channel3_IRQHandler - IRQ DMA1_Channel4_IRQHandler - IRQ DMA1_Channel5_IRQHandler - IRQ DMA1_Channel6_IRQHandler - IRQ DMA1_Channel7_IRQHandler - IRQ ADC1_2_IRQHandler - IRQ USBD1_HP_CAN1_TX_IRQHandler - IRQ USBD1_LP_CAN1_RX0_IRQHandler - IRQ CAN1_RX1_IRQHandler - IRQ CAN1_SCE_IRQHandler - IRQ EINT9_5_IRQHandler - IRQ TMR1_BRK_IRQHandler - IRQ TMR1_UP_IRQHandler - IRQ TMR1_TRG_COM_IRQHandler - IRQ TMR1_CC_IRQHandler - IRQ TMR2_IRQHandler - IRQ TMR3_IRQHandler - IRQ TMR4_IRQHandler - IRQ I2C1_EV_IRQHandler - IRQ I2C1_ER_IRQHandler - IRQ I2C2_EV_IRQHandler - IRQ I2C2_ER_IRQHandler - IRQ SPI1_IRQHandler - IRQ SPI2_IRQHandler - IRQ USART1_IRQHandler - IRQ USART2_IRQHandler - IRQ USART3_IRQHandler - IRQ EINT15_10_IRQHandler - IRQ RTCAlarm_IRQHandler - IRQ USBDWakeUp_IRQHandler - IRQ FPU_IRQHandler - IRQ QSPI_IRQHandler - IRQ USBD2_HP_IRQHandler - IRQ USBD2_LP_IRQHandler diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/iar/startup_apm32f10x_hd.s b/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/iar/startup_apm32f10x_hd.s deleted file mode 100644 index 4c0a8fa..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/iar/startup_apm32f10x_hd.s +++ /dev/null @@ -1,504 +0,0 @@ -;/*! -; * @file startup_apm32f10x_hd.s -; * -; * @brief CMSIS Cortex-M3 based Core Device Startup File for Device APM32F103 -; * -; * @version V1.0.0 -; * -; * @date 2022-01-05 -; * -; * @attention -; * -; * Copyright (C) 2020-2022 Geehy Semiconductor -; * -; * You may not use this file except in compliance with the -; * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). -; * -; * The program is only for reference, which is distributed in the hope -; * that it will be usefull and instructional for customers to develop -; * their software. Unless required by applicable law or agreed to in -; * writing, the program is distributed on an "AS IS" BASIS, WITHOUT -; * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. -; * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions -; * and limitations under the License. -; */ - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA - -__vector_table - DCD sfe(CSTACK) - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDT_IRQHandler ; Window Watchdog - DCD PVD_IRQHandler ; PVD through EINT Line detect - DCD TAMPER_IRQHandler ; Tamper - DCD RTC_IRQHandler ; RTC - DCD FLASH_IRQHandler ; Flash - DCD RCM_IRQHandler ; RCM - DCD EINT0_IRQHandler ; EINT Line 0 - DCD EINT1_IRQHandler ; EINT Line 1 - DCD EINT2_IRQHandler ; EINT Line 2 - DCD EINT3_IRQHandler ; EINT Line 3 - DCD EINT4_IRQHandler ; EINT Line 4 - DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 - DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 - DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 - DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 - DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 - DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 - DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 - DCD ADC1_2_IRQHandler ; ADC1 & ADC2 - DCD USBD1_HP_CAN1_TX_IRQHandler ; USBD1 High Priority or CAN1 TX - DCD USBD1_LP_CAN1_RX0_IRQHandler ; USBD1 Low Priority or CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; CAN1 RX1 - DCD CAN1_SCE_IRQHandler ; CAN1 SCE - DCD EINT9_5_IRQHandler ; EINT Line 9..5 - DCD TMR1_BRK_IRQHandler ; TMR1 Break - DCD TMR1_UP_IRQHandler ; TMR1 Update - DCD TMR1_TRG_COM_IRQHandler ; TMR1 Trigger and Commutation - DCD TMR1_CC_IRQHandler ; TMR1 Capture Compare - DCD TMR2_IRQHandler ; TMR2 - DCD TMR3_IRQHandler ; TMR3 - DCD TMR4_IRQHandler ; TMR4 - DCD I2C1_EV_IRQHandler ; I2C1 Event - DCD I2C1_ER_IRQHandler ; I2C1 Error - DCD I2C2_EV_IRQHandler ; I2C2 Event - DCD I2C2_ER_IRQHandler ; I2C2 Error - DCD SPI1_IRQHandler ; SPI1 - DCD SPI2_IRQHandler ; SPI2 - DCD USART1_IRQHandler ; USART1 - DCD USART2_IRQHandler ; USART2 - DCD USART3_IRQHandler ; USART3 - DCD EINT15_10_IRQHandler ; EINT Line 15..10 - DCD RTCAlarm_IRQHandler ; RTC Alarm through EINT Line - DCD USBDWakeUp_IRQHandler ; USBD Wakeup from suspend - DCD TMR8_BRK_IRQHandler ; TMR8 Break - DCD TMR8_UP_IRQHandler ; TMR8 Update - DCD TMR8_TRG_COM_IRQHandler ; TMR8 Trigger and Commutation - DCD TMR8_CC_IRQHandler ; TMR8 Capture Compare - DCD ADC3_IRQHandler ; ADC3 - DCD EMMC_IRQHandler ; EMMC - DCD SDIO_IRQHandler ; SDIO - DCD TMR5_IRQHandler ; TMR5 - DCD SPI3_IRQHandler ; SPI3 - DCD UART4_IRQHandler ; UART4 - DCD UART5_IRQHandler ; UART5 - DCD TMR6_IRQHandler ; TMR6 - DCD TMR7_IRQHandler ; TMR7 - DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 - DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 - DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 - DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 - DCD 0 ; Reserved - DCD USBD2_HP_CAN2_TX_IRQHandler ; USBD2 High Priority or CAN2 TX - DCD USBD2_LP_CAN2_RX0_IRQHandler ; USBD2 Low Priority or CAN2 RX0 - DCD CAN2_RX1_IRQHandler ; CAN2 RX1 - DCD CAN2_SCE_IRQHandler ; CAN2 SCE -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:REORDER:NOROOT(2) -Reset_Handler - LDR R0, =SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDT_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -WWDT_IRQHandler - B WWDT_IRQHandler - - PUBWEAK PVD_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -PVD_IRQHandler - B PVD_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FLASH_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -FLASH_IRQHandler - B FLASH_IRQHandler - - PUBWEAK RCM_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -RCM_IRQHandler - B RCM_IRQHandler - - PUBWEAK EINT0_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT0_IRQHandler - B EINT0_IRQHandler - - PUBWEAK EINT1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT1_IRQHandler - B EINT1_IRQHandler - - PUBWEAK EINT2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT2_IRQHandler - B EINT2_IRQHandler - - PUBWEAK EINT3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT3_IRQHandler - B EINT3_IRQHandler - - PUBWEAK EINT4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT4_IRQHandler - B EINT4_IRQHandler - - PUBWEAK DMA1_Channel1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel1_IRQHandler - B DMA1_Channel1_IRQHandler - - PUBWEAK DMA1_Channel2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel2_IRQHandler - B DMA1_Channel2_IRQHandler - - PUBWEAK DMA1_Channel3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel3_IRQHandler - B DMA1_Channel3_IRQHandler - - PUBWEAK DMA1_Channel4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel4_IRQHandler - B DMA1_Channel4_IRQHandler - - PUBWEAK DMA1_Channel5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel5_IRQHandler - B DMA1_Channel5_IRQHandler - - PUBWEAK DMA1_Channel6_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel6_IRQHandler - B DMA1_Channel6_IRQHandler - - PUBWEAK DMA1_Channel7_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel7_IRQHandler - B DMA1_Channel7_IRQHandler - - PUBWEAK ADC1_2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -ADC1_2_IRQHandler - B ADC1_2_IRQHandler - - PUBWEAK USBD1_HP_CAN1_TX_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBD1_HP_CAN1_TX_IRQHandler - B USBD1_HP_CAN1_TX_IRQHandler - - PUBWEAK USBD1_LP_CAN1_RX0_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBD1_LP_CAN1_RX0_IRQHandler - B USBD1_LP_CAN1_RX0_IRQHandler - - PUBWEAK CAN1_RX1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN1_RX1_IRQHandler - B CAN1_RX1_IRQHandler - - PUBWEAK CAN1_SCE_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN1_SCE_IRQHandler - B CAN1_SCE_IRQHandler - - PUBWEAK EINT9_5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT9_5_IRQHandler - B EINT9_5_IRQHandler - - PUBWEAK TMR1_BRK_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_BRK_IRQHandler - B TMR1_BRK_IRQHandler - - PUBWEAK TMR1_UP_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_UP_IRQHandler - B TMR1_UP_IRQHandler - - PUBWEAK TMR1_TRG_COM_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_TRG_COM_IRQHandler - B TMR1_TRG_COM_IRQHandler - - PUBWEAK TMR1_CC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_CC_IRQHandler - B TMR1_CC_IRQHandler - - PUBWEAK TMR2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR2_IRQHandler - B TMR2_IRQHandler - - PUBWEAK TMR3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR3_IRQHandler - B TMR3_IRQHandler - - PUBWEAK TMR4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR4_IRQHandler - B TMR4_IRQHandler - - PUBWEAK I2C1_EV_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C1_EV_IRQHandler - B I2C1_EV_IRQHandler - - PUBWEAK I2C1_ER_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C1_ER_IRQHandler - B I2C1_ER_IRQHandler - - PUBWEAK I2C2_EV_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C2_EV_IRQHandler - B I2C2_EV_IRQHandler - - PUBWEAK I2C2_ER_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C2_ER_IRQHandler - B I2C2_ER_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK SPI2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SPI2_IRQHandler - B SPI2_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK USART3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART3_IRQHandler - B USART3_IRQHandler - - PUBWEAK EINT15_10_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT15_10_IRQHandler - B EINT15_10_IRQHandler - - PUBWEAK RTCAlarm_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -RTCAlarm_IRQHandler - B RTCAlarm_IRQHandler - - PUBWEAK USBDWakeUp_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBDWakeUp_IRQHandler - B USBDWakeUp_IRQHandler - - PUBWEAK TMR8_BRK_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR8_BRK_IRQHandler - B TMR8_BRK_IRQHandler - - PUBWEAK TMR8_UP_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR8_UP_IRQHandler - B TMR8_UP_IRQHandler - - PUBWEAK TMR8_TRG_COM_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR8_TRG_COM_IRQHandler - B TMR8_TRG_COM_IRQHandler - - PUBWEAK TMR8_CC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR8_CC_IRQHandler - B TMR8_CC_IRQHandler - - PUBWEAK ADC3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -ADC3_IRQHandler - B ADC3_IRQHandler - - PUBWEAK EMMC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EMMC_IRQHandler - B EMMC_IRQHandler - - PUBWEAK SDIO_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SDIO_IRQHandler - B SDIO_IRQHandler - - PUBWEAK TMR5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR5_IRQHandler - B TMR5_IRQHandler - - PUBWEAK SPI3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SPI3_IRQHandler - B SPI3_IRQHandler - - PUBWEAK UART4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -UART4_IRQHandler - B UART4_IRQHandler - - PUBWEAK UART5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -UART5_IRQHandler - B UART5_IRQHandler - - PUBWEAK TMR6_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR6_IRQHandler - B TMR6_IRQHandler - - PUBWEAK TMR7_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR7_IRQHandler - B TMR7_IRQHandler - - PUBWEAK DMA2_Channel1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA2_Channel1_IRQHandler - B DMA2_Channel1_IRQHandler - - PUBWEAK DMA2_Channel2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA2_Channel2_IRQHandler - B DMA2_Channel2_IRQHandler - - PUBWEAK DMA2_Channel3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA2_Channel3_IRQHandler - B DMA2_Channel3_IRQHandler - - PUBWEAK DMA2_Channel4_5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA2_Channel4_5_IRQHandler - B DMA2_Channel4_5_IRQHandler - - PUBWEAK USBD2_HP_CAN2_TX_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBD2_HP_CAN2_TX_IRQHandler - B USBD2_HP_CAN2_TX_IRQHandler - - PUBWEAK USBD2_LP_CAN2_RX0_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBD2_LP_CAN2_RX0_IRQHandler - B USBD2_LP_CAN2_RX0_IRQHandler - - PUBWEAK CAN2_RX1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN2_RX1_IRQHandler - B CAN2_RX1_IRQHandler - - PUBWEAK CAN2_SCE_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN2_SCE_IRQHandler - B CAN2_SCE_IRQHandler - - END - diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/iar/startup_apm32f10x_md.s b/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/iar/startup_apm32f10x_md.s deleted file mode 100644 index 8028032..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/iar/startup_apm32f10x_md.s +++ /dev/null @@ -1,404 +0,0 @@ -;/*! -; * @file startup_apm32f10x_hd.s -; * -; * @brief CMSIS Cortex-M3 based Core Device Startup File for Device APM32F103 -; * -; * @version V1.0.0 -; * -; * @date 2022-01-05 -; * -; * @attention -; * -; * Copyright (C) 2020-2022 Geehy Semiconductor -; * -; * You may not use this file except in compliance with the -; * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). -; * -; * The program is only for reference, which is distributed in the hope -; * that it will be usefull and instructional for customers to develop -; * their software. Unless required by applicable law or agreed to in -; * writing, the program is distributed on an "AS IS" BASIS, WITHOUT -; * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. -; * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions -; * and limitations under the License. -; */ - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA - -__vector_table - DCD sfe(CSTACK) - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDT_IRQHandler ; Window Watchdog - DCD PVD_IRQHandler ; PVD through EINT Line detect - DCD TAMPER_IRQHandler ; Tamper - DCD RTC_IRQHandler ; RTC - DCD FLASH_IRQHandler ; Flash - DCD RCM_IRQHandler ; RCM - DCD EINT0_IRQHandler ; EINT Line 0 - DCD EINT1_IRQHandler ; EINT Line 1 - DCD EINT2_IRQHandler ; EINT Line 2 - DCD EINT3_IRQHandler ; EINT Line 3 - DCD EINT4_IRQHandler ; EINT Line 4 - DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 - DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 - DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 - DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 - DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 - DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 - DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 - DCD ADC1_2_IRQHandler ; ADC1 & ADC2 - DCD USBD1_HP_CAN1_TX_IRQHandler ; USBD1 High Priority or CAN1 TX - DCD USBD1_LP_CAN1_RX0_IRQHandler ; USBD1 Low Priority or CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; CAN1 RX1 - DCD CAN1_SCE_IRQHandler ; CAN1 SCE - DCD EINT9_5_IRQHandler ; EINT Line 9..5 - DCD TMR1_BRK_IRQHandler ; TMR1 Break - DCD TMR1_UP_IRQHandler ; TMR1 Update - DCD TMR1_TRG_COM_IRQHandler ; TMR1 Trigger and Commutation - DCD TMR1_CC_IRQHandler ; TMR1 Capture Compare - DCD TMR2_IRQHandler ; TMR2 - DCD TMR3_IRQHandler ; TMR3 - DCD TMR4_IRQHandler ; TMR4 - DCD I2C1_EV_IRQHandler ; I2C1 Event - DCD I2C1_ER_IRQHandler ; I2C1 Error - DCD I2C2_EV_IRQHandler ; I2C2 Event - DCD I2C2_ER_IRQHandler ; I2C2 Error - DCD SPI1_IRQHandler ; SPI1 - DCD SPI2_IRQHandler ; SPI2 - DCD USART1_IRQHandler ; USART1 - DCD USART2_IRQHandler ; USART2 - DCD USART3_IRQHandler ; USART3 - DCD EINT15_10_IRQHandler ; EINT Line 15..10 - DCD RTCAlarm_IRQHandler ; RTC Alarm through EINT Line - DCD USBDWakeUp_IRQHandler ; USBD Wakeup from suspend - DCD FPU_IRQHandler ; FPU - DCD QSPI_IRQHandler ; QSPI - DCD USBD2_HP_IRQHandler ; USBD2 High Priority - DCD USBD2_LP_IRQHandler ; USBD2 Low Priority -__Vectors_End - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:REORDER:NOROOT(2) -Reset_Handler - LDR R0, =SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDT_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -WWDT_IRQHandler - B WWDT_IRQHandler - - PUBWEAK PVD_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -PVD_IRQHandler - B PVD_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FLASH_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -FLASH_IRQHandler - B FLASH_IRQHandler - - PUBWEAK RCM_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -RCM_IRQHandler - B RCM_IRQHandler - - PUBWEAK EINT0_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT0_IRQHandler - B EINT0_IRQHandler - - PUBWEAK EINT1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT1_IRQHandler - B EINT1_IRQHandler - - PUBWEAK EINT2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT2_IRQHandler - B EINT2_IRQHandler - - PUBWEAK EINT3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT3_IRQHandler - B EINT3_IRQHandler - - PUBWEAK EINT4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT4_IRQHandler - B EINT4_IRQHandler - - PUBWEAK DMA1_Channel1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel1_IRQHandler - B DMA1_Channel1_IRQHandler - - PUBWEAK DMA1_Channel2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel2_IRQHandler - B DMA1_Channel2_IRQHandler - - PUBWEAK DMA1_Channel3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel3_IRQHandler - B DMA1_Channel3_IRQHandler - - PUBWEAK DMA1_Channel4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel4_IRQHandler - B DMA1_Channel4_IRQHandler - - PUBWEAK DMA1_Channel5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel5_IRQHandler - B DMA1_Channel5_IRQHandler - - PUBWEAK DMA1_Channel6_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel6_IRQHandler - B DMA1_Channel6_IRQHandler - - PUBWEAK DMA1_Channel7_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel7_IRQHandler - B DMA1_Channel7_IRQHandler - - PUBWEAK ADC1_2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -ADC1_2_IRQHandler - B ADC1_2_IRQHandler - - PUBWEAK USBD1_HP_CAN1_TX_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBD1_HP_CAN1_TX_IRQHandler - B USBD1_HP_CAN1_TX_IRQHandler - - PUBWEAK USBD1_LP_CAN1_RX0_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBD1_LP_CAN1_RX0_IRQHandler - B USBD1_LP_CAN1_RX0_IRQHandler - - PUBWEAK CAN1_RX1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN1_RX1_IRQHandler - B CAN1_RX1_IRQHandler - - PUBWEAK CAN1_SCE_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN1_SCE_IRQHandler - B CAN1_SCE_IRQHandler - - PUBWEAK EINT9_5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT9_5_IRQHandler - B EINT9_5_IRQHandler - - PUBWEAK TMR1_BRK_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_BRK_IRQHandler - B TMR1_BRK_IRQHandler - - PUBWEAK TMR1_UP_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_UP_IRQHandler - B TMR1_UP_IRQHandler - - PUBWEAK TMR1_TRG_COM_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_TRG_COM_IRQHandler - B TMR1_TRG_COM_IRQHandler - - PUBWEAK TMR1_CC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_CC_IRQHandler - B TMR1_CC_IRQHandler - - PUBWEAK TMR2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR2_IRQHandler - B TMR2_IRQHandler - - PUBWEAK TMR3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR3_IRQHandler - B TMR3_IRQHandler - - PUBWEAK TMR4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR4_IRQHandler - B TMR4_IRQHandler - - PUBWEAK I2C1_EV_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C1_EV_IRQHandler - B I2C1_EV_IRQHandler - - PUBWEAK I2C1_ER_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C1_ER_IRQHandler - B I2C1_ER_IRQHandler - - PUBWEAK I2C2_EV_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C2_EV_IRQHandler - B I2C2_EV_IRQHandler - - PUBWEAK I2C2_ER_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C2_ER_IRQHandler - B I2C2_ER_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK SPI2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SPI2_IRQHandler - B SPI2_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK USART3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART3_IRQHandler - B USART3_IRQHandler - - PUBWEAK EINT15_10_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EINT15_10_IRQHandler - B EINT15_10_IRQHandler - - PUBWEAK RTCAlarm_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -RTCAlarm_IRQHandler - B RTCAlarm_IRQHandler - - PUBWEAK USBDWakeUp_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBDWakeUp_IRQHandler - B USBDWakeUp_IRQHandler - - PUBWEAK FPU_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -FPU_IRQHandler - B FPU_IRQHandler - - PUBWEAK QSPI_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -QSPI_IRQHandler - B QSPI_IRQHandler - - PUBWEAK USBD2_HP_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBD2_HP_IRQHandler - B USBD2_HP_IRQHandler - - PUBWEAK USBD2_LP_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBD2_LP_IRQHandler - B USBD2_LP_IRQHandler - - - END - diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/system_apm32f10x.c b/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/system_apm32f10x.c deleted file mode 100644 index 087851e..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/Device/Geehy/APM32F10x/Source/system_apm32f10x.c +++ /dev/null @@ -1,566 +0,0 @@ -/*! - * @file system_apm32f10x.c - * - * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "apm32f10x.h" - -/***************************************************************** - * If SYSCLK source is PLL,SystemCoreClock will contain the * - * HSE_VALUE or HSI_VALUE multiplied/divided by the PLL factors. * -******************************************************************/ - -//#define SYSTEM_CLOCK_HSE HSE_VALUE -//#define SYSTEM_CLOCK_24MHz (24000000) -//#define SYSTEM_CLOCK_36MHz (36000000) -//#define SYSTEM_CLOCK_48MHz (48000000) -//#define SYSTEM_CLOCK_56MHz (56000000) -//#define SYSTEM_CLOCK_72MHz (72000000) -#define SYSTEM_CLOCK_96MHz (96000000) - - -/** #define VECT_TAB_SRAM */ -#define VECT_TAB_OFFSET 0x00 - -#ifdef SYSTEM_CLOCK_HSE -uint32_t SystemCoreClock = SYSTEM_CLOCK_HSE; -#elif defined SYSTEM_CLOCK_24MHz -uint32_t SystemCoreClock = SYSTEM_CLOCK_24MHz; -#elif defined SYSTEM_CLOCK_36MHz -uint32_t SystemCoreClock = SYSTEM_CLOCK_36MHz; -#elif defined SYSTEM_CLOCK_48MHz -uint32_t SystemCoreClock = SYSTEM_CLOCK_48MHz; -#elif defined SYSTEM_CLOCK_56MHz -uint32_t SystemCoreClock = SYSTEM_CLOCK_56MHz; -#elif defined SYSTEM_CLOCK_72MHz -uint32_t SystemCoreClock = SYSTEM_CLOCK_72MHz; -#else -uint32_t SystemCoreClock = SYSTEM_CLOCK_96MHz; -#endif - - -static void SystemClockConfig(void); - -#ifdef SYSTEM_CLOCK_HSE -static void SystemClockHSE(void); -#elif defined SYSTEM_CLOCK_24MHz -static void SystemClock24M(void); -#elif defined SYSTEM_CLOCK_36MHz -static void SystemClock36M(void); -#elif defined SYSTEM_CLOCK_48MHz -static void SystemClock48M(void); -#elif defined SYSTEM_CLOCK_56MHz -static void SystemClock56M(void); -#elif defined SYSTEM_CLOCK_72MHz -static void SystemClock72M(void); -#elif defined SYSTEM_CLOCK_96MHz -static void SystemClock96M(void); -#endif - -/*! - * @brief Setup the microcontroller system - * - * @param None - * - * @retval None - * - */ -void SystemInit (void) -{ - /** Set HSIEN bit */ - RCM->CTRL_B.HSIEN = BIT_SET; - /** Reset SCLKSEL, AHBPSC, APB1PSC, APB2PSC, ADCPSC and MCOSEL bits */ - RCM->CFG &= (uint32_t)0xF8FF0000; - /** Reset HSEEN, CSSEN and PLLEN bits */ - RCM->CTRL &= (uint32_t)0xFEF6FFFF; - /** Reset HSEBCFG bit */ - RCM->CTRL_B.HSEBCFG = BIT_RESET; - /** Reset PLLSRCSEL, PLLHSEPSC, PLLMULCFG and USBDIV bits */ - RCM->CFG &= (uint32_t)0xFF80FFFF; - /** Disable all interrupts and clear pending bits */ - RCM->INT = 0x009F0000; - - SystemClockConfig(); - -#ifdef VECT_TAB_SRAM - SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; -#else - SCB->VTOR = FMC_BASE | VECT_TAB_OFFSET; -#endif -} - -/*! - * @brief Update SystemCoreClock variable according to Clock Register Values - * The SystemCoreClock variable contains the core clock (HCLK) - * - * @param None - * - * @retval None - * - */ -void SystemCoreClockUpdate (void) -{ - uint32_t sysClock, pllMull, pllSource, Prescaler; - uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - - sysClock = RCM->CFG_B.SCLKSELSTS; - - switch(sysClock) - { - /** sys clock is HSI */ - case 0: - SystemCoreClock = HSI_VALUE; - break; - - /** sys clock is HSE */ - case 1: - SystemCoreClock = HSE_VALUE; - break; - - /** sys clock is PLL */ - case 2: - pllMull = RCM->CFG_B.PLLMULCFG + 2; - pllSource = RCM->CFG_B.PLLSRCSEL; - - /** PLL entry clock source is HSE */ - if(pllSource == BIT_SET) - { - SystemCoreClock = HSE_VALUE * pllMull; - - /** HSE clock divided by 2 */ - if(pllSource == RCM->CFG_B.PLLHSEPSC) - { - SystemCoreClock >>= 1; - } - } - /** PLL entry clock source is HSI/2 */ - else - { - SystemCoreClock = (HSI_VALUE >> 1) * pllMull; - } - break; - - default: - SystemCoreClock = HSI_VALUE; - break; - } - - Prescaler = AHBPrescTable[RCM->CFG_B.AHBPSC]; - SystemCoreClock >>= Prescaler; -} - -/*! - * @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers - * - * @param None - * - * @retval None - * - */ -static void SystemClockConfig(void) -{ -#ifdef SYSTEM_CLOCK_HSE - SystemClockHSE(); -#elif defined SYSTEM_CLOCK_24MHz - SystemClock24M(); -#elif defined SYSTEM_CLOCK_36MHz - SystemClock36M(); -#elif defined SYSTEM_CLOCK_48MHz - SystemClock48M(); -#elif defined SYSTEM_CLOCK_56MHz - SystemClock56M(); -#elif defined SYSTEM_CLOCK_72MHz - SystemClock72M(); -#elif defined SYSTEM_CLOCK_96MHz - SystemClock96M(); -#endif -} - -#if defined SYSTEM_CLOCK_HSE -/*! - * @brief Selects HSE as System clock source and configure HCLK, PCLK2 and PCLK1 prescalers - * - * @param None - * - * @retval None - * - */ -static void SystemClockHSE(void) -{ - __IO uint32_t i; - - RCM->CTRL_B.HSEEN= BIT_SET; - - for(i = 0; i < HSE_STARTUP_TIMEOUT; i++) - { - if(RCM->CTRL_B.HSERDYFLG) - { - break; - } - } - - if(RCM->CTRL_B.HSERDYFLG) - { - /** Enable Prefetch Buffer */ - FMC->CTRL1_B.PBEN = BIT_SET; - /** Flash 0 wait state */ - FMC->CTRL1_B.WS = 0; - - /** HCLK = SYSCLK */ - RCM->CFG_B.AHBPSC= 0X00; - /** PCLK2 = HCLK */ - RCM->CFG_B.APB2PSC= 0; - /** PCLK1 = HCLK */ - RCM->CFG_B.APB1PSC = 0; - - /** Select HSE as system clock source */ - RCM->CFG_B.SCLKSEL = 1; - - /** Wait till HSE is used as system clock source */ - while(RCM->CFG_B.SCLKSELSTS!= 0x01); - } -} - - -#elif defined SYSTEM_CLOCK_24MHz -/*! - * @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 and PCLK1 prescalers - * - * @param None - * - * @retval None - * - */ -static void SystemClock24M(void) -{ - __IO uint32_t i; - - RCM->CTRL_B.HSEEN= BIT_SET; - - for(i = 0; i < HSE_STARTUP_TIMEOUT; i++) - { - if(RCM->CTRL_B.HSERDYFLG) - { - break; - } - } - - if(RCM->CTRL_B.HSERDYFLG) - { - /** Enable Prefetch Buffer */ - FMC->CTRL1_B.PBEN = BIT_SET; - /** Flash 0 wait state */ - FMC->CTRL1_B.WS = 0; - - /** HCLK = SYSCLK */ - RCM->CFG_B.AHBPSC= 0X00; - /** PCLK2 = HCLK */ - RCM->CFG_B.APB2PSC= 0; - /** PCLK1 = HCLK */ - RCM->CFG_B.APB1PSC = 0; - - /** PLL: (HSE / 2) * 6 */ - RCM->CFG_B.PLLSRCSEL = 1; - RCM->CFG_B.PLLHSEPSC = 1; - RCM->CFG_B.PLLMULCFG = 4; - - /** Enable PLL */ - RCM->CTRL_B.PLLEN = 1; - /** Wait PLL Ready */ - while(RCM->CTRL_B.PLLRDYFLG == BIT_RESET); - - /** Select PLL as system clock source */ - RCM->CFG_B.SCLKSEL = 2; - /** Wait till PLL is used as system clock source */ - while(RCM->CFG_B.SCLKSELSTS!= 0x02); - } -} - -#elif defined SYSTEM_CLOCK_36MHz -/*! - * @brief Sets System clock frequency to 36MHz and configure HCLK, PCLK2 and PCLK1 prescalers - * - * @param None - * - * @retval None - * - */ -static void SystemClock36M(void) -{ - __IO uint32_t i; - - RCM->CTRL_B.HSEEN= BIT_SET; - - for(i = 0; i < HSE_STARTUP_TIMEOUT; i++) - { - if(RCM->CTRL_B.HSERDYFLG) - { - break; - } - } - - if(RCM->CTRL_B.HSERDYFLG) - { - /** Enable Prefetch Buffer */ - FMC->CTRL1_B.PBEN = BIT_SET; - /** Flash 1 wait state */ - FMC->CTRL1_B.WS = 1; - - /** HCLK = SYSCLK */ - RCM->CFG_B.AHBPSC= 0X00; - /** PCLK2 = HCLK */ - RCM->CFG_B.APB2PSC= 0; - /** PCLK1 = HCLK */ - RCM->CFG_B.APB1PSC = 0; - - /** PLL: (HSE / 2) * 9 */ - RCM->CFG_B.PLLSRCSEL = 1; - RCM->CFG_B.PLLHSEPSC = 1; - RCM->CFG_B.PLLMULCFG = 7; - - /** Enable PLL */ - RCM->CTRL_B.PLLEN = 1; - /** Wait PLL Ready */ - while(RCM->CTRL_B.PLLRDYFLG == BIT_RESET); - - /** Select PLL as system clock source */ - RCM->CFG_B.SCLKSEL = 2; - /** Wait till PLL is used as system clock source */ - while(RCM->CFG_B.SCLKSELSTS != 0x02); - } -} - -#elif defined SYSTEM_CLOCK_48MHz -/*! - * @brief Sets System clock frequency to 46MHz and configure HCLK, PCLK2 and PCLK1 prescalers - * - * @param None - * - * @retval None - * - */ -static void SystemClock48M(void) -{ - __IO uint32_t i; - - RCM->CTRL_B.HSEEN= BIT_SET; - - for(i = 0; i < HSE_STARTUP_TIMEOUT; i++) - { - if(RCM->CTRL_B.HSERDYFLG) - { - break; - } - } - - if(RCM->CTRL_B.HSERDYFLG) - { - /** Enable Prefetch Buffer */ - FMC->CTRL1_B.PBEN = BIT_SET; - /** Flash 1 wait state */ - FMC->CTRL1_B.WS = 1; - - /** HCLK = SYSCLK */ - RCM->CFG_B.AHBPSC= 0X00; - /** PCLK2 = HCLK */ - RCM->CFG_B.APB2PSC= 0; - /** PCLK1 = HCLK / 2 */ - RCM->CFG_B.APB1PSC = 4; - - /** PLL: HSE * 6 */ - RCM->CFG_B.PLLSRCSEL = 1; - RCM->CFG_B.PLLMULCFG = 4; - - /** Enable PLL */ - RCM->CTRL_B.PLLEN = 1; - /** Wait PLL Ready */ - while(RCM->CTRL_B.PLLRDYFLG == BIT_RESET); - - /** Select PLL as system clock source */ - RCM->CFG_B.SCLKSEL = 2; - /** Wait till PLL is used as system clock source */ - while(RCM->CFG_B.SCLKSELSTS!= 0x02); - } -} - -#elif defined SYSTEM_CLOCK_56MHz -/*! - * @brief Sets System clock frequency to 56MHz and configure HCLK, PCLK2 and PCLK1 prescalers - * - * @param None - * - * @retval None - * - */ -static void SystemClock56M(void) -{ - __IO uint32_t i; - - RCM->CTRL_B.HSEEN= BIT_SET; - - for(i = 0; i < HSE_STARTUP_TIMEOUT; i++) - { - if(RCM->CTRL_B.HSERDYFLG) - { - break; - } - } - - if(RCM->CTRL_B.HSERDYFLG) - { - /** Enable Prefetch Buffer */ - FMC->CTRL1_B.PBEN = BIT_SET; - /** Flash 2 wait state */ - FMC->CTRL1_B.WS = 2; - - /** HCLK = SYSCLK */ - RCM->CFG_B.AHBPSC= 0X00; - /** PCLK2 = HCLK */ - RCM->CFG_B.APB2PSC= 0; - /** PCLK1 = HCLK / 2 */ - RCM->CFG_B.APB1PSC = 4; - - /** PLL: HSE * 7 */ - RCM->CFG_B.PLLSRCSEL = 1; - RCM->CFG_B.PLLMULCFG = 5; - - /** Enable PLL */ - RCM->CTRL_B.PLLEN = 1; - /** Wait PLL Ready */ - while(RCM->CTRL_B.PLLRDYFLG == BIT_RESET); - - /** Select PLL as system clock source */ - RCM->CFG_B.SCLKSEL = 2; - /** Wait till PLL is used as system clock source */ - while(RCM->CFG_B.SCLKSELSTS!= 0x02); - } -} - -#elif defined SYSTEM_CLOCK_72MHz -/*! - * @brief Sets System clock frequency to 72MHz and configure HCLK, PCLK2 and PCLK1 prescalers - * - * @param None - * - * @retval None - * - */ -static void SystemClock72M(void) -{ - __IO uint32_t i; - - RCM->CTRL_B.HSEEN= BIT_SET; - - for(i = 0; i < HSE_STARTUP_TIMEOUT; i++) - { - if(RCM->CTRL_B.HSERDYFLG) - { - break; - } - } - - if(RCM->CTRL_B.HSERDYFLG) - { - /** Enable Prefetch Buffer */ - FMC->CTRL1_B.PBEN = BIT_SET; - /** Flash 2 wait state */ - FMC->CTRL1_B.WS = 2; - - /** HCLK = SYSCLK */ - RCM->CFG_B.AHBPSC= 0X00; - /** PCLK2 = HCLK */ - RCM->CFG_B.APB2PSC= 0; - /** PCLK1 = HCLK / 2 */ - RCM->CFG_B.APB1PSC = 4; - - /** PLL: HSE * 9 */ - RCM->CFG_B.PLLSRCSEL = 1; - RCM->CFG_B.PLLMULCFG = 7; - - /** Enable PLL */ - RCM->CTRL_B.PLLEN = 1; - /** Wait PLL Ready */ - while(RCM->CTRL_B.PLLRDYFLG == BIT_RESET); - - /** Select PLL as system clock source */ - RCM->CFG_B.SCLKSEL = 2; - /** Wait till PLL is used as system clock source */ - while(RCM->CFG_B.SCLKSELSTS!= 0x02); - } - -} - -#elif defined SYSTEM_CLOCK_96MHz -/*! - * @brief Sets System clock frequency to 96MHz and configure HCLK, PCLK2 and PCLK1 prescalers - * - * @param None - * - * @retval None - * - */ -static void SystemClock96M(void) -{ - __IO uint32_t i; - - RCM->CTRL_B.HSEEN= BIT_SET; - - for(i = 0; i < HSE_STARTUP_TIMEOUT; i++) - { - if(RCM->CTRL_B.HSERDYFLG) - { - break; - } - } - - if(RCM->CTRL_B.HSERDYFLG) - { - /** Enable Prefetch Buffer */ - FMC->CTRL1_B.PBEN = BIT_SET; - /** Flash 3 wait state */ - FMC->CTRL1_B.WS = 3; - - /** HCLK = SYSCLK */ - RCM->CFG_B.AHBPSC= 0X00; - /** PCLK2 = HCLK */ - RCM->CFG_B.APB2PSC= 0; - /** PCLK1 = HCLK / 2 */ - RCM->CFG_B.APB1PSC = 4; - - /** PLL: HSE * 12 */ - RCM->CFG_B.PLLSRCSEL = 1; - RCM->CFG_B.PLLMULCFG = 10; - - /** Enable PLL */ - RCM->CTRL_B.PLLEN = 1; - /** Wait PLL Ready */ - while(RCM->CTRL_B.PLLRDYFLG == BIT_RESET); - - /** Select PLL as system clock source */ - RCM->CFG_B.SCLKSEL = 2; - /** Wait till PLL is used as system clock source */ - while(RCM->CFG_B.SCLKSELSTS!= 0x02); - } -} -#endif - diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/CDC/inc/usbd_class_cdc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/CDC/inc/usbd_class_cdc.h deleted file mode 100644 index 8ec7c1f..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/CDC/inc/usbd_class_cdc.h +++ /dev/null @@ -1,33 +0,0 @@ -/*! - * @file usbd_class_cdc.h - * - * @brief CDC Class handler file head file - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __CDC_CLASS_ -#define __CDC_CLASS_ - -#include "usbd_core.h" - -void USBD_ClassHandler(USBD_DevReqData_T* reqData); - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/CDC/src/usbd_class_cdc.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/CDC/src/usbd_class_cdc.c deleted file mode 100644 index 24492cf..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/CDC/src/usbd_class_cdc.c +++ /dev/null @@ -1,71 +0,0 @@ -/*! - * @file usbd_class_cdc.c - * - * @brief CDC Class handler file - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_class_cdc.h" - -static uint8_t cmdBuf[8] = {0}; - -/*! - * @brief USB CDC Class request handler - * - * @param reqData : point to USBD_DevReqData_T structure - * - * @retval None - */ -void USBD_ClassHandler(USBD_DevReqData_T* reqData) -{ - uint16_t length = ((uint16_t)reqData->byte.wLength[1] << 8) | \ - reqData->byte.wLength[0] ; - - if (!length) - { - if (!reqData->byte.bmRequestType.bit.dir) - { - USBD_CtrlTxStatus(); - } - else - { - USBD_CtrlRxStatus(); - } - } - else - { - switch (reqData->byte.bRequest) - { - - case 0x20: - USBD_CtrlOutData(cmdBuf, length); - break; - case 0x21: - USBD_CtrlInData(cmdBuf, length); - break; - case 0x22: - USBD_CtrlOutData(cmdBuf, length); - break; - default: - break; - } - } -} diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/HID/inc/usbd_class_hid.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/HID/inc/usbd_class_hid.h deleted file mode 100644 index 36e149c..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/HID/inc/usbd_class_hid.h +++ /dev/null @@ -1,37 +0,0 @@ -/*! - * @file usbd_class_hid.h - * - * @brief HID Class handler file head file - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_core.h" - -#define HID_CLASS_REQ_SET_PROTOCOL 0x0B -#define HID_CLASS_REQ_GET_PROTOCOL 0x03 - -#define HID_CLASS_REQ_SET_IDLE 0x0A -#define HID_CLASS_REQ_GET_IDLE 0x02 - -#define HID_CLASS_REQ_SET_REPORT 0x09 -#define HID_CLASS_REQ_GET_REPORT 0x01 - -void USBD_ClassHandler(USBD_DevReqData_T* reqData); diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/HID/src/usbd_class_hid.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/HID/src/usbd_class_hid.c deleted file mode 100644 index 12d99f0..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/HID/src/usbd_class_hid.c +++ /dev/null @@ -1,63 +0,0 @@ -/*! - * @file usbd_class_hid.c - * - * @brief HID Class handler file - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_class_hid.h" - -static uint8_t s_hidIdleState; -static uint8_t s_hidProtocol; - -/*! - * @brief USB HID Class request handler - * - * @param reqData : point to USBD_DevReqData_T structure - * - * @retval None - */ -void USBD_ClassHandler(USBD_DevReqData_T* reqData) -{ - switch (reqData->byte.bRequest) - { - case HID_CLASS_REQ_SET_IDLE: - s_hidIdleState = reqData->byte.wValue[1]; - USBD_CtrlInData(NULL, 0); - break; - - case HID_CLASS_REQ_GET_IDLE: - USBD_CtrlInData(&s_hidIdleState, 1); - break; - - case HID_CLASS_REQ_SET_PROTOCOL: - s_hidProtocol = reqData->byte.wValue[0]; - USBD_CtrlInData(NULL, 0); - break; - - case HID_CLASS_REQ_GET_PROTOCOL: - USBD_CtrlInData(&s_hidProtocol, 1); - break; - - default: - break; - } -} diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_class_msc.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_class_msc.h deleted file mode 100644 index 1a9d582..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_class_msc.h +++ /dev/null @@ -1,37 +0,0 @@ -/*! - * @file usbd_class_msc.h - * - * @brief MSC Class handler file head file - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __USBD_CLASS_MSC -#define __USBD_CLASS_MSC - -#include "usbd_core.h" - - -#define BOT_GET_MAX_LUN 0xFE -#define BOT_RESET 0xFF - -void USBD_MSC_ClassHandler(USBD_DevReqData_T* reqData); - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_msc_bot.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_msc_bot.h deleted file mode 100644 index b44f2f6..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_msc_bot.h +++ /dev/null @@ -1,106 +0,0 @@ -/*! - * @file usbd_msc_bot.h - * - * @brief MSC BOT protocol core functions - * - * @version V1.0.0 - * - * @date 2021-12-25 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_core.h" - -#ifndef __USBD_MSC_BOT_H -#define __USBD_MSC_BOT_H - -#define MSC_BOT_CBW_SIGNATURE (uint32_t)(0x43425355) -#define MSC_BOT_CBW_LENGTH 31 - -#define MSC_BOT_CSW_SIGNATURE (uint32_t)(0x53425355) -#define MSC_BOT_CSW_LENGTH 13 - -typedef enum -{ - BOT_STATE_IDLE, //!< Idle state - BOT_STATE_DATA_OUT, //!< Data Out state - BOT_STATE_DATA_IN, //!< Data In state - BOT_STATE_LAST_DATA_IN, //!< Last Data In Last - BOT_STATE_SEND_DATA //!< Send Immediate data -} BOT_STATE_T; - -typedef enum -{ - BOT_STATUS_NORMAL, - BOT_STATUS_RECOVERY, - BOT_STATUS_ERROR -} BOT_STATUS_T; - -typedef enum -{ - BOT_CSW_STATUS_CMD_OK, - BOT_CSW_STATUS_CMD_FAIL, - BOT_CSW_STATUS_PHASE_ERROR -} BOT_CSW_STATUS_T; - - -/** - * @brief Command Block Wrapper - */ -typedef struct -{ - uint32_t dSignature; - uint32_t dTag; - uint32_t dDataXferLen; - uint8_t bmFlags; - uint8_t bLUN; - uint8_t bCBLen; - uint8_t CB[16]; -} BOT_CBW_T; - -/** - * @brief Command Status Wrapper - */ -typedef struct -{ - uint32_t dSignature; - uint32_t dTag; - uint32_t dDataResidue; - uint8_t bStatus; -} BOT_CSW_T; - -typedef struct -{ - uint8_t state; - uint8_t status; - uint16_t dataLen; - BOT_CBW_T CBW; - BOT_CSW_T CSW; - uint8_t data[MSC_MEDIA_PACKET]; -} BOT_Info_T; - -extern BOT_Info_T g_BOTInfo; - -void USBD_MSC_BOT_Reset(void); -void USBD_MSC_BOT_Init(void); -void USBD_MSC_BOT_OutData(uint8_t ep); -void USBD_MSC_BOT_InData(uint8_t ep); -void USBD_MSC_BOT_TxCSW(uint8_t cswStatus); -void USBD_MSC_BOT_Stall(void); -void USBD_MSV_BOT_ClearFeatureHandler(void); - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_msc_scsi.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_msc_scsi.h deleted file mode 100644 index b0e474f..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/inc/usbd_msc_scsi.h +++ /dev/null @@ -1,131 +0,0 @@ -/*! - * @file usbd_msc_scsi.h - * - * @brief MSC scsi - * - * @version V1.0.0 - * - * @date 2021-12-25 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_core.h" -#ifndef __USBD_MSC_SCSI_H_ -#define __USBD_MSC_SCSI_H_ - -/** - * @brief SCSI function status - */ -enum -{ - SCSI_OK, - SCSI_FAIL -}; - -/** - * @brief SCSI Sense Key - */ -typedef enum -{ - SCSI_SKEY_NO_SENSE, - SCSI_SKEY_RECOVERED_ERROR, - SCSI_SKEY_NOT_READY, - SCSI_SKEY_MEDIUM_ERROR, - SCSI_SKEY_HARDWARE_ERROR, - SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_SKEY_UNIT_ATTENTION, - SCSI_SKEY_DATA_PROTECT, - SCSI_SKEY_BLANK_CHECK, - SCSI_SKEY_VENDOR_SPECIFIC, - SCSI_SKEY_COPY_ABORTED, - SCSI_SKEY_ABORTED_COMMAND, - SCSI_SKEY_VOLUME_OVERFLOW = 13, - SCSI_SKEY_MISCOMPARE = 14 -} SCSI_SKEY_T; - -/** - * @brief SCSI Sense - */ -typedef struct { - uint8_t sensekey; - uint8_t ASC; - uint8_t ASCQ; -} SCSI_Sense_T; - - -#define SCSI_SENSE_LIST_NUMBER 4 -#define SCSI_INQUIRY_LENGTH 36 - -/** SCSI Commands */ -#define SCSI_CMD_FORMAT_UNIT ((uint8_t)0x04) -#define SCSI_CMD_INQUIRY ((uint8_t)0x12) -#define SCSI_CMD_MODE_SELECT_6 ((uint8_t)0x15) -#define SCSI_CMD_MODE_SELECT_10 ((uint8_t)0x55) -#define SCSI_CMD_MODE_SENSE_6 ((uint8_t)0x1A) -#define SCSI_CMD_MODE_SENSE_10 ((uint8_t)0x5A) -#define SCSI_CMD_ALLOW_MEDIUM_REMOVAL ((uint8_t)0x1E) -#define SCSI_CMD_READ_6 ((uint8_t)0x08) -#define SCSI_CMD_READ_10 ((uint8_t)0x28) -#define SCSI_CMD_READ_12 ((uint8_t)0xA8) -#define SCSI_CMD_READ_16 ((uint8_t)0x88) - -#define SCSI_CMD_READ_CAPACITY_10 ((uint8_t)0x25) -#define SCSI_CMD_READ_CAPACITY_16 ((uint8_t)0x9E) - -#define SCSI_CMD_REQUEST_SENSE ((uint8_t)0x03) -#define SCSI_CMD_START_STOP_UNIT ((uint8_t)0x1B) -#define SCSI_CMD_TEST_UNIT_READY ((uint8_t)0x00) -#define SCSI_CMD_WRITE6 ((uint8_t)0x0A) -#define SCSI_CMD_WRITE10 ((uint8_t)0x2A) -#define SCSI_CMD_WRITE12 ((uint8_t)0xAA) -#define SCSI_CMD_WRITE16 ((uint8_t)0x8A) - -#define SCSI_CMD_VERIFY_10 ((uint8_t)0x2F) -#define SCSI_CMD_VERIFY_12 ((uint8_t)0xAF) -#define SCSI_CMD_VERIFY_16 ((uint8_t)0x8F) - -#define SCSI_CMD_SEND_DIAGNOSTIC ((uint8_t)0x1D) -#define SCSI_CMD_READ_FORMAT_CAPACITIES ((uint8_t)0x23) - - -#define SCSI_ASC_INVALID_CDB 0x20 -#define SCSI_ASC_INVALID_FIELED_IN_COMMAND 0x24 -#define SCSI_ASC_PARAMETER_LIST_LENGTH_ERROR 0x1A -#define SCSI_ASC_INVALID_FIELD_IN_PARAMETER_LIST 0x26 -#define SCSI_ASC_ADDRESS_OUT_OF_RANGE 0x21 -#define SCSI_ASC_MEDIUM_NOT_PRESENT 0x3A -#define SCSI_ASC_MEDIUM_HAVE_CHANGED 0x28 -#define SCSI_ASC_WRITE_PROTECTED 0x27 -#define SCSI_ASC_UNRECOVERED_READ_ERROR 0x11 -#define SCSI_ASC_WRITE_FAULT 0x03 - -#define SCSI_READ_FORMAT_CAPACITY_DATA_LEN 0x0C -#define SCSI_READ_CAPACITY10_DATA_LEN 0x08 -#define SCSI_MODE_SENSE10_DATA_LEN 0x08 -#define SCSI_MODE_SENSE6_DATA_LEN 0x04 -#define SCSI_REQUEST_SENSE_DATA_LEN 0x12 -#define SCSI_STANDARD_INQUIRY_DATA_LEN 0x24 -#define SCSI_BLKVFY 0x04 - -extern SCSI_Sense_T g_scsiSense[SCSI_SENSE_LIST_NUMBER]; -extern uint8_t g_senseTxCnt; -extern uint8_t g_sensePutCnt; - -uint8_t SCSI_CmdHandler(uint8_t lun, uint8_t *cmd); -void SCSI_PutSenseCode(uint8_t lun, uint8_t sKey, uint8_t ASC, uint8_t ASCQ); - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_class_msc.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_class_msc.c deleted file mode 100644 index 2b02cad..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_class_msc.c +++ /dev/null @@ -1,79 +0,0 @@ -/*! - * @file usbd_class_msc.c - * - * @brief MSC Class file - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_class_msc.h" -#include "usbd_msc_bot.h" - -static uint8_t s_mscMaxLen = 0; - -/*! - * @brief USB MSC Class request handler - * - * @param reqData : point to USBD_DevReqData_T structure - * - * @retval None - */ -void USBD_MSC_ClassHandler(USBD_DevReqData_T* reqData) -{ - uint16_t wValue = ((uint16_t)reqData->byte.wValue[1] << 8) | \ - reqData->byte.wValue[0]; - uint16_t wLength = ((uint16_t)reqData->byte.wLength[1] << 8) | \ - reqData->byte.wLength[0]; - - switch (reqData->byte.bRequest) - { - case BOT_GET_MAX_LUN : - if ((wValue == 0) && (wLength == 1) && \ - (reqData->byte.bmRequestType.bit.dir == 1)) - { - s_mscMaxLen = STORAGE_MAX_LUN - 1; - - USBD_CtrlInData(&s_mscMaxLen, 1); - } - else - { - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_STALL, USBD_EP_STATUS_STALL); - } - break; - case BOT_RESET : - if ((wValue == 0) && (wLength == 0) && \ - (reqData->byte.bmRequestType.bit.dir == 0)) - { - USBD_CtrlInData(NULL, 0); - /** Reset */ - USBD_MSC_BOT_Reset(); - } - else - { - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_STALL, USBD_EP_STATUS_STALL); - } - - break; - - default: - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_STALL, USBD_EP_STATUS_STALL); - break; - } -} diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_msc_bot.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_msc_bot.c deleted file mode 100644 index b9339cc..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_msc_bot.c +++ /dev/null @@ -1,242 +0,0 @@ -/*! - * @file usbd_msv_bot.c - * - * @brief MSC BOT protocol core functions - * - * @version V1.0.0 - * - * @date 2021-12-25 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_msc_bot.h" -#include "usbd_core.h" -#include "usbd_storage_disk.h" -#include "usbd_msc_scsi.h" - -BOT_Info_T g_BOTInfo; - -static void USBD_MSC_BOT_DecodeCBW(void); -static void USBD_MSC_BOT_TxData(uint8_t *txBuf, uint16_t len); -static void USBD_MSC_BOT_Stall(void); - -/*! - * @brief BOT Process Reset. - * - * @param None - * - * @retval None - */ -void USBD_MSC_BOT_Reset(void) -{ - g_BOTInfo.state = BOT_STATE_IDLE; - g_BOTInfo.status = BOT_STATUS_RECOVERY; - - USBD_RxData(MSC_OUT_EP & 0x7f, (uint8_t *)&g_BOTInfo.CBW, MSC_BOT_CBW_LENGTH); -} - -/*! - * @brief BOT Process initialization. - * - * @param None - * - * @retval None - */ -void USBD_MSC_BOT_Init(void) -{ - g_BOTInfo.state = BOT_STATE_IDLE; - g_BOTInfo.status = BOT_STATUS_NORMAL; - - g_storageCallBack.Init(0); - - USBD_RxData(MSC_OUT_EP & 0x7f, (uint8_t *)&g_BOTInfo.CBW, MSC_BOT_CBW_LENGTH); -} - -/*! - * @brief Bulk OUT data handler. - * - * @param ep : OUT endpoint - * - * @retval None - */ -void USBD_MSC_BOT_OutData(uint8_t ep) -{ - if (g_BOTInfo.state == BOT_STATE_IDLE) - { - USBD_MSC_BOT_DecodeCBW(); - } - else if (g_BOTInfo.state == BOT_STATE_DATA_OUT) - { - if (SCSI_CmdHandler(g_BOTInfo.CBW.bLUN, g_BOTInfo.CBW.CB) != SCSI_OK) - { - USBD_MSC_BOT_TxCSW(BOT_CSW_STATUS_CMD_FAIL); - } - } -} - -/*! - * @brief Bulk IN data handler. - * - * @param ep : IN endpoint - * - * @retval None - */ -void USBD_MSC_BOT_InData(uint8_t ep) -{ - if (g_BOTInfo.state == BOT_STATE_DATA_IN) - { - if (SCSI_CmdHandler(g_BOTInfo.CBW.bLUN, g_BOTInfo.CBW.CB) != SCSI_OK) - { - USBD_MSC_BOT_TxCSW(BOT_CSW_STATUS_CMD_FAIL); - } - } - else if ((g_BOTInfo.state == BOT_STATE_SEND_DATA) || \ - (g_BOTInfo.state == BOT_STATE_LAST_DATA_IN)) - { - USBD_MSC_BOT_TxCSW(BOT_CSW_STATUS_CMD_OK); - } -} - -/*! - * @brief Decode CBW. - * - * @param None - * - * @retval None - */ -static void USBD_MSC_BOT_DecodeCBW(void) -{ - uint32_t xferCnt = g_usbDev.outBuf[MSC_OUT_EP & 0x7f].xferCnt; - - g_BOTInfo.CSW.dTag = g_BOTInfo.CBW.dTag; - g_BOTInfo.CSW.dDataResidue = g_BOTInfo.CBW.dDataXferLen; - - if ((xferCnt != MSC_BOT_CBW_LENGTH) || \ - (g_BOTInfo.CBW.dSignature != MSC_BOT_CBW_SIGNATURE) || \ - (g_BOTInfo.CBW.bLUN > 1) || (g_BOTInfo.CBW.bCBLen < 1) || \ - (g_BOTInfo.CBW.bCBLen > 16)) - { - SCSI_PutSenseCode(g_BOTInfo.CBW.bLUN, SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_ASC_INVALID_CDB, 0); - - g_BOTInfo.status = BOT_STATUS_ERROR; - } - else - { - if (SCSI_CmdHandler(g_BOTInfo.CBW.bLUN, g_BOTInfo.CBW.CB) != SCSI_OK) - { - USBD_MSC_BOT_Stall(); - } - else if ((g_BOTInfo.state == BOT_STATE_IDLE) || \ - (g_BOTInfo.state == BOT_STATE_SEND_DATA)) - { - if (g_BOTInfo.dataLen) - { - USBD_MSC_BOT_TxData(g_BOTInfo.data, g_BOTInfo.dataLen); - } - else - { - USBD_MSC_BOT_TxCSW(BOT_CSW_STATUS_CMD_OK); - } - } - } -} - -/*! - * @brief MSC send data. - * - * @param txBuf : buffer to send - * - * @param len : buffer length - * - * @retval None - */ -static void USBD_MSC_BOT_TxData(uint8_t *txBuf, uint16_t len) -{ - len = USB_MIN(len, g_BOTInfo.CBW.dDataXferLen); - - g_BOTInfo.CSW.dDataResidue -= len; - g_BOTInfo.CSW.bStatus = BOT_CSW_STATUS_CMD_OK; - g_BOTInfo.state = BOT_STATE_SEND_DATA; - - USBD_TxData(MSC_IN_EP & 0x7f, txBuf, len); -} - -/*! - * @brief Send CSW. - * - * @param cswStatus : status of CSW - * - * @retval None - */ -void USBD_MSC_BOT_TxCSW(uint8_t cswStatus) -{ - g_BOTInfo.CSW.dSignature = MSC_BOT_CSW_SIGNATURE; - g_BOTInfo.CSW.bStatus = cswStatus; - g_BOTInfo.state = BOT_STATE_IDLE; - - USBD_TxData(MSC_IN_EP & 0x7f, (uint8_t*)&g_BOTInfo.CSW, - MSC_BOT_CSW_LENGTH); - - USBD_RxData(MSC_OUT_EP & 0x7f, (uint8_t*)&g_BOTInfo.CBW, - MSC_BOT_CBW_LENGTH); -} - -/*! - * @brief handler clearFeature in standard request. - * - * @param None - * - * @retval None - */ -void USBD_MSV_BOT_ClearFeatureHandler(void) -{ - if (g_BOTInfo.status == BOT_STATUS_ERROR) - { - USBD_SetEPTxStatus(MSC_IN_EP & 0x7f, USBD_EP_STATUS_NAK); - g_BOTInfo.status = BOT_STATUS_NORMAL; - } - else if (((g_usbDev.reqData.byte.wIndex[0] & 0x80) == 0x80) && \ - g_BOTInfo.status != BOT_STATUS_RECOVERY) - { - USBD_MSC_BOT_TxCSW(BOT_CSW_STATUS_CMD_FAIL); - } -} - -/*! - * @brief Stall MSC. - * - * @param None - * - * @retval None - */ -static void USBD_MSC_BOT_Stall(void) -{ - if ((g_BOTInfo.CBW.bmFlags == 0) && (g_BOTInfo.CBW.dDataXferLen != 0) && \ - (g_BOTInfo.status == BOT_STATUS_NORMAL)) - { - USBD_SetEPRxStatus(MSC_OUT_EP & 0x7f, USBD_EP_STATUS_STALL); - } - - USBD_SetEPTxStatus(MSC_IN_EP & 0x7f, USBD_EP_STATUS_STALL); - - if (g_BOTInfo.status == BOT_STATUS_ERROR) - { - USBD_RxData(MSC_OUT_EP & 0x7f, (uint8_t *)&g_BOTInfo.CBW, - MSC_BOT_CBW_LENGTH); - } -} diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_msc_scsi.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_msc_scsi.c deleted file mode 100644 index 59bb71c..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Class/MSC/src/usbd_msc_scsi.c +++ /dev/null @@ -1,701 +0,0 @@ -/*! - * @file usbd_msc_scsi.c - * - * @brief MSC scsi - * - * @version V1.0.0 - * - * @date 2021-12-25 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_msc_bot.h" -#include "usbd_msc_scsi.h" -#include "usbd_storage_disk.h" - -SCSI_Sense_T g_scsiSenseCode[SCSI_SENSE_LIST_NUMBER]; -uint8_t g_senseTxCnt; -uint8_t g_sensePutCnt; - -static uint32_t s_blkSize; -static uint32_t s_blkNbr; - -static uint32_t s_blkAddr; -static uint32_t s_blkLen; - -/** USB Mass storage Page 0 Inquiry Data */ -static const uint8_t s_page00InquiryData[] = -{ - 0x00, - 0x00, - 0x00, - (7 - 4), - 0x00, - 0x80, - 0x83 -}; -/** USB Mass storage sense 6 Data */ -static const uint8_t s_modeSense6Data[] = -{ - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00 -}; -/** USB Mass storage sense 10 Data */ -static const uint8_t s_modeSense10Data[] = -{ - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00 -}; - -static uint8_t SCSI_TestUnitReady(uint8_t lun); -static uint8_t SCSI_Inquiry(uint8_t lun, uint8_t* command); -static uint8_t SCSI_RequestSense(uint8_t lun, uint8_t* command); - -static uint8_t SCSI_ReadFormatCapacity(uint8_t lun, uint8_t* command); -static uint8_t SCSI_ReadCapacity10(uint8_t lun, uint8_t* command); -static uint8_t SCSI_Read10(uint8_t lun, uint8_t* command); -static uint8_t SCSI_Write10(uint8_t lun, uint8_t* command); -static uint8_t SCSI_Verify10(uint8_t lun, uint8_t* command); - -static uint8_t SCSI_StartStopUnit(void); -static uint8_t SCSI_ModeSense6(uint8_t lun, uint8_t* command); -static uint8_t SCSI_ModeSense10(uint8_t lun, uint8_t* command); - -static uint8_t SCSI_Read(uint8_t lun); -static uint8_t SCSI_Write(uint8_t lun); -static uint8_t SCSI_CheckAddress(uint8_t lun, uint32_t blkOffset, uint16_t blkNbr); - -/*! - * @brief SCSI command handler. - * - * @param lun: Logical unit number - * - * @param command: Command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -uint8_t SCSI_CmdHandler(uint8_t lun, uint8_t* command) -{ - uint8_t ret = SCSI_OK; - - switch (command[0]) - { - case SCSI_CMD_TEST_UNIT_READY: - ret = SCSI_TestUnitReady(lun); - break; - - case SCSI_CMD_INQUIRY: - ret = SCSI_Inquiry(lun, command); - break; - - case SCSI_CMD_REQUEST_SENSE: - ret = SCSI_RequestSense(lun, command); - break; - - case SCSI_CMD_READ_FORMAT_CAPACITIES: - ret = SCSI_ReadFormatCapacity(lun, command); - break; - - case SCSI_CMD_READ_CAPACITY_10: - ret = SCSI_ReadCapacity10(lun, command); - break; - - case SCSI_CMD_READ_10: - ret = SCSI_Read10(lun, command); - break; - - case SCSI_CMD_WRITE10: - ret = SCSI_Write10(lun, command); - break; - - case SCSI_CMD_VERIFY_10: - ret = SCSI_Verify10(lun, command); - break; - case SCSI_CMD_ALLOW_MEDIUM_REMOVAL: - case SCSI_CMD_START_STOP_UNIT: - ret = SCSI_StartStopUnit(); - break; - - case SCSI_CMD_MODE_SENSE_6: - ret = SCSI_ModeSense6 (lun, command); - break; - - case SCSI_CMD_MODE_SENSE_10: - ret = SCSI_ModeSense10 (lun, command); - break; - - default: - SCSI_PutSenseCode(lun, SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_ASC_INVALID_CDB, 0); - ret = SCSI_FAIL; - } - - return ret; -} - -/*! - * @brief Put the sense code to array. - * - * @param sKey: sense Key - * - * @param ASC: Additional Sense Code - * - * @param ASCQ: Additional Sense Code Qualifier - * - * @retval None - */ -void SCSI_PutSenseCode(uint8_t lun, uint8_t sKey, uint8_t ASC, uint8_t ASCQ) -{ - g_scsiSenseCode[g_sensePutCnt].sensekey = sKey; - g_scsiSenseCode[g_sensePutCnt].ASC = ASC; - g_scsiSenseCode[g_sensePutCnt].ASCQ = ASCQ; - - if ((++g_sensePutCnt) == SCSI_SENSE_LIST_NUMBER) - { - g_sensePutCnt = 0; - } -} - -/*! - * @brief SCSI Test Unit Ready handler. - * - * @param lun: Logical unit number - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_TestUnitReady(uint8_t lun) -{ - if (g_BOTInfo.CBW.dDataXferLen) - { - SCSI_PutSenseCode(g_BOTInfo.CBW.bLUN, SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_ASC_INVALID_CDB, 0); - - return SCSI_FAIL; - } - else if (g_storageCallBack.CheckReady(lun) != SCSI_OK) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_NOT_READY, - SCSI_ASC_MEDIUM_NOT_PRESENT, 0); - - return SCSI_FAIL; - } - else - { - g_BOTInfo.dataLen = 0; - return SCSI_OK; - } -} - -/*! - * @brief SCSI Inquiry handler. - * - * @param lun: Logical unit number - * - * @param command: command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_Inquiry(uint8_t lun, uint8_t* command) -{ - uint16_t i; - uint8_t* pInquiryData; - - if (command[1] & 0x01) - { - pInquiryData = (uint8_t*)s_page00InquiryData; - g_BOTInfo.dataLen = s_page00InquiryData[3] + 4; - } - else - { - pInquiryData = &g_storageCallBack.pInquiryData[lun * SCSI_INQUIRY_LENGTH]; - - g_BOTInfo.dataLen = USB_MIN((pInquiryData[4] + 5), command[4]); - } - - for (i = 0; i < g_BOTInfo.dataLen; i++) - { - g_BOTInfo.data[i] = pInquiryData[i]; - } - - return SCSI_OK; -} - -/*! - * @brief SCSI Request Sense handler. - * - * @param lun: Logical unit number - * - * @param command: command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_RequestSense(uint8_t lun, uint8_t* command) -{ - uint8_t i = 0; - - while (i < SCSI_REQUEST_SENSE_DATA_LEN) - { - g_BOTInfo.data[i++] = 0; - } - - g_BOTInfo.data[0] = 0x70; - g_BOTInfo.data[7] = SCSI_REQUEST_SENSE_DATA_LEN - 6; - - if (g_senseTxCnt != g_sensePutCnt) - { - g_BOTInfo.data[2] = g_scsiSenseCode[g_senseTxCnt].sensekey; - g_BOTInfo.data[12] = g_scsiSenseCode[g_senseTxCnt].ASC; - g_BOTInfo.data[13] = g_scsiSenseCode[g_senseTxCnt].ASCQ; - - if ((++g_senseTxCnt) == SCSI_SENSE_LIST_NUMBER) - { - g_senseTxCnt = 0; - } - } - - g_BOTInfo.dataLen = (SCSI_REQUEST_SENSE_DATA_LEN < command[4]) ? \ - SCSI_REQUEST_SENSE_DATA_LEN : command[4]; - - return SCSI_OK; -} - -/*! - * @brief SCSI Read Format Capacity handler. - * - * @param lun: Logical unit number - * - * @param command: command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_ReadFormatCapacity(uint8_t lun, uint8_t* command) -{ - uint16_t i = 0; - uint32_t blkSize; - uint32_t blkNbr; - - while (i < 12) - { - g_BOTInfo.data[i++] = 0; - } - - if (g_storageCallBack.ReadCapacity(lun, &blkNbr, &blkSize) != SCSI_OK) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_NOT_READY, - SCSI_ASC_MEDIUM_NOT_PRESENT, 0); - - return SCSI_FAIL; - } - else - { - blkNbr--; - - g_BOTInfo.data[3] = 0x08; - g_BOTInfo.data[4] = (uint8_t)(blkNbr >> 24); - g_BOTInfo.data[5] = (uint8_t)(blkNbr >> 16); - g_BOTInfo.data[6] = (uint8_t)(blkNbr >> 8); - g_BOTInfo.data[7] = (uint8_t)(blkNbr); - g_BOTInfo.data[8] = 0x02; - g_BOTInfo.data[9] = (uint8_t)(blkSize >> 16); - g_BOTInfo.data[10] = (uint8_t)(blkSize >> 8); - g_BOTInfo.data[11] = (uint8_t)blkSize; - - g_BOTInfo.dataLen = 12; - - return SCSI_OK; - } -} - -/*! - * @brief SCSI Read Capacity10 handler. - * - * @param lun: Logical unit number - * - * @param command: command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_ReadCapacity10(uint8_t lun, uint8_t* command) -{ - if (g_storageCallBack.ReadCapacity(lun, &s_blkNbr, &s_blkSize) != SCSI_OK) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_NOT_READY, - SCSI_ASC_MEDIUM_NOT_PRESENT, 0); - - return SCSI_FAIL; - } - else - { - g_BOTInfo.data[0] = (uint8_t)((s_blkNbr - 1) >> 24); - g_BOTInfo.data[1] = (uint8_t)((s_blkNbr - 1) >> 16); - g_BOTInfo.data[2] = (uint8_t)((s_blkNbr - 1) >> 8); - g_BOTInfo.data[3] = (uint8_t)(s_blkNbr - 1); - g_BOTInfo.data[4] = (uint8_t)(s_blkSize >> 24); - g_BOTInfo.data[5] = (uint8_t)(s_blkSize >> 16); - g_BOTInfo.data[6] = (uint8_t)(s_blkSize >> 8); - g_BOTInfo.data[7] = (uint8_t)(s_blkSize); - - g_BOTInfo.dataLen = 8; - - return SCSI_OK; - } -} - -/*! - * @brief SCSI Read10 handler. - * - * @param lun: Logical unit number - * - * @param command: command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_Read10(uint8_t lun, uint8_t* command) -{ - uint8_t ret = SCSI_OK; - - if (g_BOTInfo.state == BOT_STATE_IDLE) - { - if ((g_BOTInfo.CBW.bmFlags & 0x80) != 0x80) - { - SCSI_PutSenseCode(g_BOTInfo.CBW.bLUN, SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_ASC_INVALID_CDB, 0); - - return SCSI_FAIL; - } - - if (g_storageCallBack.CheckReady(lun) != SCSI_OK) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_NOT_READY, - SCSI_ASC_MEDIUM_NOT_PRESENT, 0); - - return SCSI_FAIL; - } - - s_blkAddr = ((uint32_t)command[2] << 24) | \ - ((uint32_t)command[3] << 16) | \ - ((uint32_t)command[4] << 8) | \ - (uint32_t)command[5]; - - s_blkLen = ((uint16_t)command[7] << 8 | (uint8_t )command[8]); - - if (SCSI_CheckAddress(lun, s_blkAddr, s_blkLen) != SCSI_OK) - { - return SCSI_FAIL; - } - - g_BOTInfo.state = BOT_STATE_DATA_IN; - s_blkAddr *= s_blkSize; - s_blkLen *= s_blkSize; - - if (g_BOTInfo.CBW.dDataXferLen != s_blkLen) - { - SCSI_PutSenseCode(g_BOTInfo.CBW.bLUN, SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_ASC_INVALID_CDB, 0); - - return SCSI_FAIL; - } - - } - - g_BOTInfo.dataLen = MSC_MEDIA_PACKET; - - ret = SCSI_Read(lun); - - return ret; -} - -/*! - * @brief SCSI write10 handler. - * - * @param lun: Logical unit number - * - * @param command: command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_Write10(uint8_t lun, uint8_t* command) -{ - uint8_t ret = SCSI_OK; - uint32_t len; - - if (g_BOTInfo.state == BOT_STATE_IDLE) - { - if (g_BOTInfo.CBW.bmFlags & 0x80) - { - SCSI_PutSenseCode(g_BOTInfo.CBW.bLUN, SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_ASC_INVALID_CDB, 0); - - return SCSI_FAIL; - } - - if (g_storageCallBack.CheckReady(lun) != SCSI_OK) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_NOT_READY, - SCSI_ASC_MEDIUM_NOT_PRESENT, 0); - - return SCSI_FAIL; - } - - if (g_storageCallBack.CheckWPR(lun) != SCSI_OK) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_NOT_READY, - SCSI_ASC_WRITE_PROTECTED, 0); - - return SCSI_FAIL; - } - - s_blkAddr = ((uint32_t)command[2] << 24) | \ - ((uint32_t)command[3] << 16) | \ - ((uint32_t)command[4] << 8) | \ - (uint32_t)command[5]; - - s_blkLen = ((uint16_t)command[7] << 8 | (uint8_t )command[8]); - - if (SCSI_CheckAddress(lun, s_blkAddr, s_blkLen) != SCSI_OK) - { - return SCSI_FAIL; - } - - s_blkAddr *= s_blkSize; - s_blkLen *= s_blkSize; - - if (g_BOTInfo.CBW.dDataXferLen != s_blkLen) - { - SCSI_PutSenseCode(g_BOTInfo.CBW.bLUN, SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_ASC_INVALID_CDB, 0); - - return SCSI_FAIL; - } - - g_BOTInfo.state = BOT_STATE_DATA_OUT; - len = USB_MIN(s_blkLen, MSC_MEDIA_PACKET); - - USBD_RxData(MSC_OUT_EP & 0x7F, g_BOTInfo.data, len); - - } - else - { - ret = SCSI_Write(lun); - } - - return ret; -} - -/*! - * @brief SCSI Verify10 Handler. - * - * @param lun: Logical unit number - * - * @param command: command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_Verify10(uint8_t lun, uint8_t* command) -{ - if (command[1] & 0x02) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_ASC_INVALID_FIELED_IN_COMMAND, 0); - - return SCSI_FAIL; - } - - s_blkAddr = ((uint32_t)command[2] << 24) | \ - ((uint32_t)command[3] << 16) | \ - ((uint32_t)command[4] << 8) | \ - (uint32_t)command[5]; - - s_blkLen = ((uint16_t)command[7] << 8 | (uint8_t )command[8]); - - if (SCSI_CheckAddress(lun, s_blkAddr, s_blkLen) != SCSI_OK) - { - return SCSI_FAIL; - } - - g_BOTInfo.dataLen = 0; - - return SCSI_OK; -} - -/*! - * @brief SCSI Start Stop Unit Handler. - * - * @param None - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_StartStopUnit(void) -{ - g_BOTInfo.dataLen = 0; - return SCSI_OK; -} - -/*! - * @brief SCSI Mode Sense6 Handler. - * - * @param lun: Logical unit number - * - * @param command: command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_ModeSense6(uint8_t lun, uint8_t* command) -{ - for (uint16_t i = 0; i < 8; i++) - { - g_BOTInfo.data[i] = s_modeSense6Data[i]; - } - - g_BOTInfo.dataLen = 8; - - return SCSI_OK; -} - -/*! - * @brief SCSI Mode Sense10 Handler. - * - * @param lun: Logical unit number - * - * @param command: command pointer - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_ModeSense10(uint8_t lun, uint8_t* command) -{ - for (uint16_t i = 0; i < 8; i++) - { - g_BOTInfo.data[i] = s_modeSense10Data[i]; - } - - g_BOTInfo.dataLen = 8; - - return SCSI_OK; -} - -/*! - * @brief SCSI Read Process. - * - * @param lun: Logical unit number - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_Read(uint8_t lun) -{ - uint32_t len = USB_MIN(MSC_MEDIA_PACKET, s_blkLen); - - if (g_storageCallBack.ReadData(len, g_BOTInfo.data, (s_blkAddr / s_blkSize), - (len / s_blkSize)) != SCSI_OK) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_HARDWARE_ERROR, - SCSI_ASC_UNRECOVERED_READ_ERROR, 0); - - return SCSI_FAIL; - } - - USBD_TxData(MSC_IN_EP & 0x7F, g_BOTInfo.data, len); - - s_blkAddr += len; - s_blkLen -= len; - - g_BOTInfo.CSW.dDataResidue -= len; - - if (s_blkLen == 0) - { - g_BOTInfo.state = BOT_STATE_LAST_DATA_IN; - } - - return SCSI_OK; -} - -/*! - * @brief SCSI Write Process. - * - * @param lun: Logical unit number - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_Write(uint8_t lun) -{ - uint32_t len = USB_MIN(MSC_MEDIA_PACKET, s_blkLen); - - if (s_blkLen - len) - { - __NOP(); - } - if (g_storageCallBack.WriteData(lun, g_BOTInfo.data, s_blkAddr / s_blkSize, - len / s_blkSize) != SCSI_OK) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_HARDWARE_ERROR, SCSI_ASC_WRITE_FAULT, 0); - - return SCSI_FAIL; - } - - s_blkAddr += len; - s_blkLen -= len; - - g_BOTInfo.CSW.dDataResidue -= len; - - if (s_blkLen) - { - len = USB_MIN(MSC_MEDIA_PACKET, s_blkLen); - - USBD_RxData(MSC_OUT_EP & 0x7f, g_BOTInfo.data, len); - } - else - { - USBD_MSC_BOT_TxCSW(BOT_CSW_STATUS_CMD_OK); - } - - return SCSI_OK; -} - -/*! - * @brief SCSI Check Address Range. - * - * @param lun: Logical unit number - * - * @param blkOffset: first block address - * - * @param blkNbr: number of block to be processed - * - * @retval SCSI_OK or SCSI_FAILL - */ -static uint8_t SCSI_CheckAddress(uint8_t lun, uint32_t blkOffset, uint16_t blkNbr) -{ - if (s_blkNbr < (blkNbr + blkOffset)) - { - SCSI_PutSenseCode(lun, SCSI_SKEY_ILLEGAL_REQUEST, - SCSI_ASC_ADDRESS_OUT_OF_RANGE, 0); - - return SCSI_FAIL; - } - - return SCSI_OK; -} diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_core.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_core.h deleted file mode 100644 index 26b04b2..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_core.h +++ /dev/null @@ -1,312 +0,0 @@ -/*! - * @file usbd_core.h - * - * @brief USB protocol core handler head file - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __USBD_CORE_H_ -#define __USBD_CORE_H_ - -#include "drv_usb_device.h" - -/** Get minimum value */ -#define USB_MIN(a, b) (a >= b ? b : a) - -/** Get maximum value */ -#define USB_MAX(a, b) (a >= b ? a : b) - -/** - * @brief USB request type - */ -enum -{ - USBD_REQ_TYPE_STANDARD = 0, - USBD_REQ_TYPE_CLASS = 1, - USBD_REQ_TYPE_VENDOR = 2, - USBD_REQ_TYPE_RESERVED = 3 -}; - -/** - * @brief USB recipient - */ -enum -{ - USBD_RECIPIENT_DEVICE = 0, - USBD_RECIPIENT_INTERFACE = 1, - USBD_RECIPIENT_ENDPOINT = 2, - USBD_RECIPIENT_OTHER = 3, -}; - -/** - * @brief USB standard device requests - */ -enum -{ - USBD_GET_STATUS = 0, - USBD_CLEAR_FEATURE = 1, - USBD_SET_FEATURE = 3, - USBD_SET_ADDRESS = 5, - USBD_GET_DESCRIPTOR = 6, - USBD_SET_DESCRIPTOR = 7, - USBD_GET_CONFIGURATION = 8, - USBD_SET_CONFIGURATION = 9, - USBD_GET_INTERFACE = 10, - USBD_SET_INTERFACE = 11, - USBD_SYNCH_FRAME = 12, -}; - -/** - * @brief USB descriptor types - */ -enum -{ - USBD_DESC_DEVICE = 1, - USBD_DESC_CONFIGURATION = 2, - USBD_DESC_STRING = 3, - USBD_DESC_INTERFACE = 4, - USBD_DESC_ENDPOINT = 5, - USBD_DESC_DEVICE_QUALIFIER = 6, - USBD_DESC_OTHER_SPEED = 7, - USBD_INTERFACE_POWER = 8, -}; - -/** - * @brief USB standard feature - */ -enum -{ - USBD_FEATURE_ENDPOINT_HALT = 0, - USBD_FEATURE_REMOTE_WAKEUP = 1, - USBD_FEATURE_TEST_MODE = 2 -}; - -/** - * @brief USB internal state machine - */ -typedef enum -{ - USBD_CTRL_STATE_WAIT_SETUP, - USBD_CTRL_STATE_DATA_IN, - USBD_CTRL_STATE_DATA_OUT, - USBD_CTRL_STATE_WAIT_STATUS_IN, - USBD_CTRL_STATE_WAIT_STATUS_OUT, - USBD_CTRL_STATE_STALLED, -}USBD_CTRL_STATE_T; - -/** - * @brief USBD Endpoint type for USB protocol - */ -typedef enum -{ - USBD_EP_TYPE_CONTROL, - USBD_EP_TYPE_ISO, - USBD_EP_TYPE_BULK, - USBD_EP_TYPE_INTERRUPT -}USBD_EP_TYPE_T; - -/** - * @brief USB request type - */ -typedef union -{ - uint8_t byte; - - struct - { - uint8_t recipient : 5; - uint8_t type : 2; - uint8_t dir : 1; - }bit; -}USBD_REQ_TYPE_T; - -/** - * @brief USB device request data - */ -typedef struct -{ - union - { - uint8_t pack[8]; - - struct - { - USBD_REQ_TYPE_T bmRequestType; - uint8_t bRequest; - uint8_t wValue[2]; - uint8_t wIndex[2]; - uint8_t wLength[2]; - } byte; - }; -} USBD_DevReqData_T; - -/** - * @brief Descriptor structure - */ -typedef struct -{ - const uint8_t *pDesc; - uint8_t size; -}USBD_Descriptor_T; - -/** USB standard request callback handler */ -typedef void (*USBD_StdReqHandler_T)(void); - -/** USB request handler */ -typedef void (*USBD_ReqHandler_T)(USBD_DevReqData_T *); - -/** Ctrl Tx Status handler function define */ -typedef void (*USBD_CtrlTxStatusHandler_T)(void); - -/** Ctrl Rx Status handler function define */ -typedef void (*USBD_CtrlRxStatusHandler_T)(void); - -/** Endpoint handler */ -typedef void (*USBD_EPHandler_T)(uint8_t ep); - -/** Reset handler */ -typedef void (*USBD_ResetHandler_T)(void); - -/** Interrupt handler function define */ -typedef void (*USBD_InterruptHandler_T)(void); - -/** - * @brief USB Class Request handler - */ -typedef struct -{ - USBD_StdReqHandler_T getConfigurationHandler; - USBD_StdReqHandler_T getDescriptorHandler; - USBD_StdReqHandler_T getInterfaceHandler; - USBD_StdReqHandler_T getStatusHandler; - USBD_StdReqHandler_T setAddressHandler; - - USBD_StdReqHandler_T setConfigurationHandler; - USBD_StdReqHandler_T setDescriptorHandler; - USBD_StdReqHandler_T setFeatureHandler; - USBD_StdReqHandler_T setInterfaceHandler; - USBD_StdReqHandler_T clearFeatureHandler; -} USBD_StdReqCallback_T; - -/** - * @brief Control transfer buffer - */ -typedef struct -{ - uint8_t *pBuf; //!< Data buffer - uint32_t bufLen; //!< Length of the data buffer - uint8_t packNum; //!< Packet number of the data - uint8_t zeroPackFill; //!< Fill a zero pack for IN transfer or not - uint16_t maxPackSize; //!< Max pack size of this endpoint - uint32_t xferCnt; //!< Data count of one pack on from tansfer -} USBD_CtrlBuf_T; - -/** - * @brief USB init parameter - */ -typedef struct -{ - USBD_Descriptor_T *pDeviceDesc; //!< Device descriptor pointer - USBD_Descriptor_T *pConfigurationDesc; //!< Configuration descriptor pointer - USBD_Descriptor_T *pStringDesc; //!< String descriptor pointer - USBD_Descriptor_T *pQualifierDesc; //!< Device Qualifier descriptor pointer - USBD_Descriptor_T *pHidReportDesc; //!< HID report descriptor pointer - - - USBD_StdReqCallback_T *pStdReqCallback; - USBD_ReqHandler_T stdReqExceptionHandler; //!< Standard request exception handler - USBD_ReqHandler_T classReqHandler; //!< Class request handler - USBD_ReqHandler_T vendorReqHandler; //!< vendor request handler - - USBD_CtrlTxStatusHandler_T txStatusHandler; //!< Send IN status early handler - USBD_CtrlRxStatusHandler_T rxStatusHandler; //!< Receive OUT status early handler - - USBD_EPHandler_T outEpHandler; //!< OUT EP transfer done handler except EP0 - USBD_EPHandler_T inEpHandler; //!< IN EP transfer done handler except EP0 - USBD_ResetHandler_T resetHandler; //!< Reset handler - USBD_InterruptHandler_T intHandler; //!< Hadler the rest of interrupt. -} USBD_InitParam_T; - -/** - * @brief USB infomation - */ -typedef struct -{ - USBD_CTRL_STATE_T ctrlState; - - uint8_t curFeature; - uint8_t curInterface; - uint8_t curAlternateSetting; - uint8_t curConfiguration; - uint8_t configurationNum; - - /** Setup request data buffer */ - USBD_DevReqData_T reqData; - - /** Endpoint buffer management */ - USBD_CtrlBuf_T inBuf[USB_EP_MAX_NUM]; - USBD_CtrlBuf_T outBuf[USB_EP_MAX_NUM]; - - /** Descriptor pointer */ - USBD_Descriptor_T *pDeviceDesc; - USBD_Descriptor_T *pConfigurationDesc; - USBD_Descriptor_T *pStringDesc; - USBD_Descriptor_T *pQualifierDesc; - USBD_Descriptor_T *pHidReportDesc; - - /** Setup request callback handler */ - USBD_StdReqCallback_T *pStdReqCallback; - USBD_ReqHandler_T stdReqExceptionHandler; - USBD_ReqHandler_T classReqHandler; - USBD_ReqHandler_T vendorReqHandler; - - /** Control transfer status stage handler */ - USBD_CtrlTxStatusHandler_T txStatusHandler; - USBD_CtrlRxStatusHandler_T rxStatusHandler; - - /** Endpoint transfer done handler */ - USBD_EPHandler_T outEpHandler; - USBD_EPHandler_T inEpHandler; - - USBD_ResetHandler_T resetHandler; - USBD_InterruptHandler_T intHandler; -} USBD_Info_T; - -extern USBD_Info_T g_usbDev; - -/** control status function */ -#define USBD_CtrlTxStatus() USBD_CtrlInData(NULL, 0); -#define USBD_CtrlRxStatus() USBD_CtrlOutData(NULL, 0) - -/** Handler Endpoint 0 control transfer */ -void USBD_SetupProcess(void); -void USBD_CtrlInProcess(void); -void USBD_CtrlOutProcess(void); -void USBD_CtrlOutData(uint8_t *buf, uint32_t len); -void USBD_CtrlInData(uint8_t *buf, uint32_t len); - -/** Handler other Endpoint data transfer */ -void USBD_DataInProcess(USBD_EP_T ep); -void USBD_DataOutProcess(USBD_EP_T ep); -void USBD_TxData(uint8_t ep, uint8_t *buf, uint32_t len); -void USBD_RxData(uint8_t ep, uint8_t *buf, uint32_t len); - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_init.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_init.h deleted file mode 100644 index 10cfc45..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_init.h +++ /dev/null @@ -1,64 +0,0 @@ -/*! - * @file usbd_init.h - * - * @brief USB initialization management head file - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef USBD_INIT_H_ -#define USBD_INIT_H_ - -#include "usbd_core.h" - -/** - * @brief Endpoint Configuration Info - */ -typedef struct -{ - USBD_EP_T epNum; //!< endpoint number - USBD_EP_TYPE_T epType; //!< endpoint type - uint8_t epKind; /** - * Which could be ENABLE or DISABLE, it is valid only for - * control and bulk Endpoint. The mean of ENABLE for them like : - * 1. Control endpoint : Only for OUT status which is zero data. - * 2. Bulk endpoint : Enable the double-buffer feature - */ - USBD_EP_STATUS_T epStatus; //!< Endpoint status - uint16_t epBufAddr; //!< buffer address for the endpoint - uint16_t maxPackSize; //!< max packet size for the endpoint -} USBD_EPConfig_T; - -/** USB init */ -void USBD_Init(USBD_InitParam_T *param); -void USBD_InitParamStructInit(USBD_InitParam_T *param); - -/** power */ -void USBD_PowerOn(void); -void USBD_PowerOff(void); - -/** Endpoint init */ -void USBD_OpenOutEP(USBD_EPConfig_T *epConfig); -void USBD_OpenInEP(USBD_EPConfig_T *epConfig); - -void USBD_CloseOutEP(USBD_EP_T ep); -void USBD_CloseInEP(USBD_EP_T ep); - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_interrupt.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_interrupt.h deleted file mode 100644 index 5cdf63b..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_interrupt.h +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * @file usbd_interrupt.h - * - * @brief USB interrupt service routine header file - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __USBD_INTERRUPT_H_ -#define __USBD_INTERRUPT_H_ - -#include "apm32f10x.h" - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_stdReq.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_stdReq.h deleted file mode 100644 index c832060..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/inc/usbd_stdReq.h +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * @file usbd_stdReq.h - * - * @brief USB standard request process head file - * - * @version V1.0.0 - * - * @date 2021-12-30 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __USBD_STDREQ_H_ -#define __USBD_STDREQ_H_ - -void USBD_StandardReqeust(void); - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_core.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_core.c deleted file mode 100644 index 474f881..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_core.c +++ /dev/null @@ -1,405 +0,0 @@ -/*! - * @file usbd_core.c - * - * @brief USB protocol core handler - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_core.h" -#include "usbd_stdReq.h" - -/** USB information */ -USBD_Info_T g_usbDev; - -/*! - * @brief Endpoint 0 Setup process - * - * @param None - * - * @retval None - */ -void USBD_SetupProcess(void) -{ - uint8_t reqType; - uint8_t dataBuf[8]; - USBD_DevReqData_T *pReqData = &g_usbDev.reqData; - uint16_t xferLen = USBD_ReadEPRxCnt(USBD_EP_0); - - if (xferLen) - { - USBD_ReadDataFromEP(USBD_EP_0, (uint8_t *)dataBuf, xferLen); - } - else - { - return; - } - - pReqData->byte.bmRequestType.byte = dataBuf[0]; - pReqData->byte.bRequest = dataBuf[1]; - pReqData->byte.wValue[0] = dataBuf[2]; - pReqData->byte.wValue[1] = dataBuf[3]; - pReqData->byte.wIndex[0] = dataBuf[4]; - pReqData->byte.wIndex[1] = dataBuf[5]; - pReqData->byte.wLength[0] = dataBuf[6]; - pReqData->byte.wLength[1] = dataBuf[7]; - - reqType = pReqData->byte.bmRequestType.bit.type; - - if(reqType == USBD_REQ_TYPE_STANDARD) - { - USBD_StandardReqeust(); - } - else if(reqType == USBD_REQ_TYPE_CLASS) - { - if(g_usbDev.classReqHandler) - { - g_usbDev.classReqHandler(pReqData); - } - } - else if(reqType == USBD_REQ_TYPE_VENDOR) - { - if(g_usbDev.vendorReqHandler) - { - g_usbDev.vendorReqHandler(pReqData); - } - } - else - { - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_STALL, USBD_EP_STATUS_STALL); - } -} - - -/*! - * @brief Endpoint 0 USB Control in process - * - * @param None - * - * @retval None - */ -void USBD_CtrlInProcess(void) -{ - uint32_t tmp; - - if(g_usbDev.ctrlState == USBD_CTRL_STATE_DATA_IN) - { - if(g_usbDev.inBuf[0].packNum) - { - tmp = USB_MIN(g_usbDev.inBuf[0].bufLen, g_usbDev.inBuf[0].maxPackSize); - - USBD_WriteDataToEP(USBD_EP_0, g_usbDev.inBuf[0].pBuf, tmp); - USBD_SetEPTxCnt(USBD_EP_0, tmp); - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_VALID, USBD_EP_STATUS_NAK); - - g_usbDev.inBuf[0].pBuf += tmp; - g_usbDev.inBuf[0].bufLen -= tmp; - g_usbDev.inBuf[0].packNum--; - } - else - { - if (g_usbDev.inBuf[USBD_EP_0].zeroPackFill) - { - USBD_SetEPTxCnt(USBD_EP_0, 0); - USBD_SetEPTxStatus(USBD_EP_0, USBD_EP_STATUS_VALID); - g_usbDev.inBuf[USBD_EP_0].zeroPackFill = 0; - } - else - { - if (g_usbDev.rxStatusHandler) - { - g_usbDev.rxStatusHandler(); - } - - g_usbDev.ctrlState = USBD_CTRL_STATE_WAIT_STATUS_OUT; - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_NAK, USBD_EP_STATUS_VALID); - } - - } - } - else if(g_usbDev.ctrlState == USBD_CTRL_STATE_WAIT_STATUS_IN) - { - if(g_usbDev.reqData.byte.bRequest == USBD_SET_ADDRESS) - { - USBD_SetDeviceAddr(g_usbDev.reqData.byte.wValue[0]); - } - } -} - -/*! - * @brief Endpoint 0 USB Control out process - * - * @param None - * - * @retval None - */ -void USBD_CtrlOutProcess(void) -{ - uint32_t len; - - if(g_usbDev.ctrlState == USBD_CTRL_STATE_DATA_OUT) - { - if(g_usbDev.outBuf[0].packNum) - { - len = USB_MIN(g_usbDev.outBuf[0].bufLen, g_usbDev.outBuf[0].maxPackSize); - - USBD_ReadDataFromEP(USBD_EP_0, g_usbDev.outBuf[0].pBuf, len); - - g_usbDev.outBuf[0].bufLen -= len; - g_usbDev.outBuf[0].pBuf += len; - g_usbDev.outBuf[0].packNum--; - - if (g_usbDev.outBuf[0].packNum) - { - USBD_CtrlOutData(g_usbDev.outBuf[0].pBuf, g_usbDev.outBuf[0].bufLen); - } - else - { - USBD_CtrlTxStatus(); - } - } - else - { - if (g_usbDev.txStatusHandler) - { - g_usbDev.txStatusHandler(); - } - - USBD_CtrlTxStatus(); - } - } -} - -/*! - * @brief Send data or status in control in transation - * - * @param buf: Buffer pointer - * - * @param len: Buffer length - * - * @retval None - */ -void USBD_CtrlInData(uint8_t *buf, uint32_t len) -{ - uint16_t maxPackSize = g_usbDev.inBuf[0].maxPackSize; - uint16_t reqLen = *(uint16_t*)g_usbDev.reqData.byte.wLength; - - if(len) - { - if ((len < reqLen) && ((len % maxPackSize) == 0)) - { - g_usbDev.inBuf[USBD_EP_0].zeroPackFill = 1; - } - - if(len >= g_usbDev.inBuf[0].maxPackSize) - { - /** Send a packet */ - USBD_WriteDataToEP(USBD_EP_0, buf, g_usbDev.inBuf[0].maxPackSize); - USBD_SetEPTxCnt(USBD_EP_0, g_usbDev.inBuf[0].maxPackSize); - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_VALID, USBD_EP_STATUS_NAK); - - /** deal with buffer */ - g_usbDev.inBuf[0].bufLen = len - g_usbDev.inBuf[0].maxPackSize; - g_usbDev.inBuf[0].pBuf = buf + g_usbDev.inBuf[0].maxPackSize; - g_usbDev.inBuf[0].packNum = (g_usbDev.inBuf[0].bufLen + (maxPackSize - 1)) / maxPackSize; - - g_usbDev.ctrlState = USBD_CTRL_STATE_DATA_IN; - } - else - { - USBD_WriteDataToEP(USBD_EP_0, buf, len); - USBD_SetEPTxCnt(USBD_EP_0, len); - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_VALID, USBD_EP_STATUS_NAK); - - g_usbDev.ctrlState = g_usbDev.reqData.byte.bmRequestType.bit.dir ? \ - USBD_CTRL_STATE_DATA_IN : \ - USBD_CTRL_STATE_WAIT_STATUS_IN; - } - } - else - { - USBD_SetEPTxCnt(USBD_EP_0, 0); - USBD_SetEPTxStatus(USBD_EP_0, USBD_EP_STATUS_VALID); - - g_usbDev.ctrlState = g_usbDev.reqData.byte.bmRequestType.bit.dir ? \ - USBD_CTRL_STATE_DATA_IN : \ - USBD_CTRL_STATE_WAIT_STATUS_IN; - } -} - -/*! - * @brief Read data or status in control out transation - * - * @param buf: Buffer pointer - * - * @param len: Buffer length - * - * @retval None - */ -void USBD_CtrlOutData(uint8_t *buf, uint32_t len) -{ - uint16_t maxPackSize = g_usbDev.outBuf[USBD_EP_0].maxPackSize; - - if (len) - { - g_usbDev.outBuf[USBD_EP_0].pBuf = buf; - g_usbDev.outBuf[USBD_EP_0].bufLen = len; - g_usbDev.outBuf[USBD_EP_0].packNum = (len + (maxPackSize - 1)) / maxPackSize; - - len = USB_MIN(g_usbDev.outBuf[0].bufLen, maxPackSize); - - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_NAK, USBD_EP_STATUS_VALID); - - g_usbDev.ctrlState = USBD_CTRL_STATE_DATA_OUT; - } - else - { - g_usbDev.ctrlState = USBD_CTRL_STATE_WAIT_STATUS_OUT; - } - - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_NAK, USBD_EP_STATUS_VALID); -} - -/*! - * @brief USB Data in process except endpoint 0 - * - * @param ep : endpoint Number except endpoint 0 - * - * @retval None - */ -void USBD_DataInProcess(USBD_EP_T ep) -{ - uint16_t len; - - if (g_usbDev.inBuf[ep].packNum) - { - len = g_usbDev.inBuf[ep].bufLen > g_usbDev.inBuf[ep].maxPackSize ? \ - g_usbDev.inBuf[ep].maxPackSize : g_usbDev.inBuf[ep].bufLen; - - - USBD_WriteDataToEP(ep, g_usbDev.inBuf[ep].pBuf, len); - USBD_SetEPTxCnt(ep, len); - USBD_SetEPTxStatus(ep, USBD_EP_STATUS_VALID); - - g_usbDev.inBuf[ep].pBuf += len; - g_usbDev.inBuf[ep].bufLen -= len; - g_usbDev.inBuf[ep].packNum--; - } - else - { - if(g_usbDev.inEpHandler) - { - g_usbDev.inEpHandler(ep); - } - } -} - -/*! - * @brief USB Data out process except endpoint 0 - * - * @param ep : endpoint Number except endpoint 0 - * - * @retval None - */ -void USBD_DataOutProcess(USBD_EP_T ep) -{ - if (g_usbDev.outBuf[ep].packNum) - { - g_usbDev.outBuf[ep].xferCnt = USBD_ReadEPRxCnt(ep); - - if ((g_usbDev.outBuf[ep].xferCnt != 0) && (g_usbDev.outBuf[ep].pBuf != NULL)) - { - USBD_ReadDataFromEP(ep, g_usbDev.outBuf[ep].pBuf, g_usbDev.outBuf[ep].xferCnt); - - g_usbDev.outBuf[ep].bufLen -= g_usbDev.outBuf[ep].xferCnt; - g_usbDev.outBuf[ep].pBuf += g_usbDev.outBuf[ep].xferCnt; - g_usbDev.outBuf[ep].packNum--; - } - if (g_usbDev.outBuf[ep].packNum) - { - USBD_SetEPRxStatus(ep, USBD_EP_STATUS_VALID); - } - } - - if(g_usbDev.outEpHandler && !g_usbDev.outBuf[ep].packNum) - { - g_usbDev.outEpHandler(ep); - } -} - -/*! - * @brief Transfer data to host(except endpoint 0) - * - * @param ep: Endpoint number except endpoint 0 - * - * @param buf: Buffer pointer - * - * @param len: Buffer length - * - * @retval None - */ -void USBD_TxData(uint8_t ep, uint8_t *buf, uint32_t len) -{ - uint16_t maxPackSize = g_usbDev.inBuf[ep].maxPackSize; - - if (len >= maxPackSize) - { - USBD_WriteDataToEP(ep, buf, maxPackSize); - USBD_SetEPTxCnt(ep, maxPackSize); - USBD_SetEPTxStatus(ep, USBD_EP_STATUS_VALID); - - g_usbDev.inBuf[ep].pBuf = buf + maxPackSize; - g_usbDev.inBuf[ep].bufLen = len - maxPackSize; - g_usbDev.inBuf[ep].packNum =(g_usbDev.inBuf[ep].bufLen + (maxPackSize - 1)) / maxPackSize; - } - else - { - USBD_WriteDataToEP(ep, buf, len); - USBD_SetEPTxCnt(ep, len); - USBD_SetEPTxStatus(ep, USBD_EP_STATUS_VALID); - - g_usbDev.inBuf[ep].packNum = 0; - g_usbDev.inBuf[ep].bufLen = 0; - } -} - -/*! - * @brief Receive data from host(except endpoint 0) - * - * @param ep: Endpoint number except endpoint 0 - * - * @param buf: Buffer pointer - * - * @param len: Buffer length - * - * @retval None - */ -void USBD_RxData(uint8_t ep, uint8_t *buf, uint32_t len) -{ - uint16_t maxPackSize = g_usbDev.outBuf[ep].maxPackSize; - - g_usbDev.outBuf[ep].pBuf = buf; - g_usbDev.outBuf[ep].bufLen = len; - g_usbDev.outBuf[ep].packNum = (len + (maxPackSize - 1)) / maxPackSize; - - USBD_SetEPRxCnt(ep, USB_MIN(len, maxPackSize)); - - USBD_SetEPRxStatus(ep, USBD_EP_STATUS_VALID); -} diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_init.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_init.c deleted file mode 100644 index 8c5c9c1..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_init.c +++ /dev/null @@ -1,237 +0,0 @@ -/*! - * @file usbd_init.c - * - * @brief USB initialization management - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_init.h" -#include "usb_bsp.h" - -static USBD_REG_EP_TYPE_T USBD_ConvertEPType(USBD_EP_TYPE_T epType); - -/*! - * @brief USB initialization - * - * @param param: Initialization parameter - * - * @retval None - */ -void USBD_Init(USBD_InitParam_T *param) -{ - g_usbDev.pDeviceDesc = param->pDeviceDesc; - g_usbDev.pConfigurationDesc = param->pConfigurationDesc; - g_usbDev.pStringDesc = param->pStringDesc; - g_usbDev.pQualifierDesc = param->pQualifierDesc; - g_usbDev.pHidReportDesc = param->pHidReportDesc; - - g_usbDev.pStdReqCallback = param->pStdReqCallback; - g_usbDev.classReqHandler = param->classReqHandler; - g_usbDev.vendorReqHandler = param->vendorReqHandler; - g_usbDev.stdReqExceptionHandler = param->stdReqExceptionHandler; - - g_usbDev.txStatusHandler = param->txStatusHandler; - g_usbDev.rxStatusHandler = param->rxStatusHandler; - - g_usbDev.inEpHandler = param->inEpHandler; - g_usbDev.outEpHandler = param->outEpHandler; - - g_usbDev.resetHandler = param->resetHandler; - g_usbDev.intHandler = param->intHandler; - - USBD_HardWareInit(); - -#ifndef APM32F0xx_USB -#if USB_SELECT == USB1 - USBD2_Disable(); -#else - USB2_Enable(); -#endif -#endif - - USBD_PowerOn(); -} - -/*! - * @brief Init parameter in param - * - * @param param: Initialization parameter - * - * @retval None - */ -void USBD_InitParamStructInit(USBD_InitParam_T *param) -{ - param->pStdReqCallback = NULL; - param->stdReqExceptionHandler = NULL; - param->classReqHandler = NULL; - param->vendorReqHandler = NULL; - - param->txStatusHandler = NULL; - param->rxStatusHandler = NULL; - - param->outEpHandler = NULL; - param->inEpHandler = NULL; - - param->resetHandler = NULL; - param->intHandler = NULL; -} - -/*! - * @brief USB Power on - * - * @param None - * - * @retval None - */ -void USBD_PowerOn(void) -{ - USBD_ResetPowerDown(); - - USBD_SetForceReset(); - USBD_ResetForceReset(); - - USBD_DisableInterrupt(USBD_INT_ALL); - USBD_ClearIntFlag(USBD_INT_ALL); - - USBD_EnableInterrupt(USB_INT_SOURCE); -} - -/*! - * @brief USB Power off - * - * @param None - * - * @retval None - */ -void USBD_PowerOff(void) -{ - USBD_DisableInterrupt(USBD_INT_ALL); - USBD_ClearIntFlag(USBD_INT_ALL); - - /** Power down and Force USB Reset */ - USBD_SetRegCTRL(0X03); -} - - -/*! - * @brief Open OUT endpoint. - * - * @param epConfig: Point to USBD_EPConfig_T structure - * - * @retval None - */ -void USBD_OpenOutEP(USBD_EPConfig_T *epConfig) -{ - g_usbDev.outBuf[epConfig->epNum].maxPackSize = epConfig->maxPackSize; - - USBD_SetEPType(epConfig->epNum, USBD_ConvertEPType(epConfig->epType)); - - if (epConfig->epKind) - { - USBD_SetEPKind(epConfig->epNum); - } - else - { - USBD_ResetEPKind(epConfig->epNum); - } - - USBD_SetEPRxAddr(epConfig->epNum, epConfig->epBufAddr); - USBD_SetEPRxCnt(epConfig->epNum, epConfig->maxPackSize); - USBD_SetEPRxStatus(epConfig->epNum, epConfig->epStatus); -} - -/*! - * @brief Open IN endpoint. - * - * @param epConfig: Point to USBD_EPConfig_T structure - * - * @retval None - */ -void USBD_OpenInEP(USBD_EPConfig_T *epConfig) -{ - g_usbDev.inBuf[epConfig->epNum].maxPackSize = epConfig->maxPackSize; - - USBD_SetEPType(epConfig->epNum, USBD_ConvertEPType(epConfig->epType)); - - if (epConfig->epKind) - { - USBD_SetEPKind(epConfig->epNum); - } - else - { - USBD_ResetEPKind(epConfig->epNum); - } - - USBD_SetEPTxAddr(epConfig->epNum, epConfig->epBufAddr); - USBD_SetEPTxStatus(epConfig->epNum, epConfig->epStatus); -} - -/*! - * @brief Close OUT endpoint. - * - * @param ep: OUT endpoint Number - * - * @retval None - */ -void USBD_CloseOutEP(USBD_EP_T ep) -{ - g_usbDev.outBuf[ep].maxPackSize = 0; - - USBD_SetEPRxStatus(ep, USBD_EP_STATUS_DISABLE); -} - -/*! - * @brief Close IN endpoint. - * - * @param ep: IN endpoint Number - * - * @retval None - */ -void USBD_CloseInEP(USBD_EP_T ep) -{ - g_usbDev.inBuf[ep].maxPackSize = 0; - - USBD_SetEPTxStatus(ep, USBD_EP_STATUS_DISABLE); -} - -/*! - * @brief Convert endpoint Type. - * - * @param epType: endpoint type - * - * @retval Value of USBD_REG_EP_TYPE_T - */ -static USBD_REG_EP_TYPE_T USBD_ConvertEPType(USBD_EP_TYPE_T epType) -{ - switch (epType) - { - case USBD_EP_TYPE_CONTROL : - return USBD_REG_EP_TYPE_CONTROL; - case USBD_EP_TYPE_ISO : - return USBD_REG_EP_TYPE_ISO; - case USBD_EP_TYPE_BULK : - return USBD_REG_EP_TYPE_BULK; - case USBD_EP_TYPE_INTERRUPT : - return USBD_REG_EP_TYPE_INTERRUPT; - default : - return USBD_REG_EP_TYPE_CONTROL; - } -} diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_interrupt.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_interrupt.c deleted file mode 100644 index ebfc28b..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_interrupt.c +++ /dev/null @@ -1,349 +0,0 @@ -/*! - * @file usbd_interrupt.c - * - * @brief USB interrupt service routine - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_init.h" - -static void USBD_LowPriorityProc(void); - -static void USBD_ResetIsrHandler(void); -static void USBD_SuspendIsrHandler(void); -static void USBD_ResumeIsrHandler(void); - -/*! - * @brief USB interrupt service routine - * - * @param None - * - * @retval None - */ -#ifdef APM32F0xx_USB -void USB_IRQHandler(void) - -#else //!< APM32F10x_USB -#if USB_SELECT == USB1 -void USBD1_LP_CAN1_RX0_IRQHandler(void) -#else -void USB2_LP_IRQHandler(void) -#endif -#endif -{ -#if (USB_INT_SOURCE & USBD_INT_CTR) - if(USBD_ReadIntFlag(USBD_INT_CTR)) - { - USBD_LowPriorityProc(); - } -#endif - -#if (USB_INT_SOURCE & USBD_INT_RST) - if(USBD_ReadIntFlag(USBD_INT_RST)) - { - USBD_ClearIntFlag(USBD_INT_RST); - USBD_ResetIsrHandler(); - } -#endif - -#if USB_INT_SOURCE & USBD_INT_PMAOU - if(USB_ReadIntFlag(USB_INT_PMAOU)) - { - USB_ClearIntFlag(USB_INT_PMAOU); - } -#endif - -#if USB_INT_SOURCE & USBD_INT_ERR - - if(USB_ReadIntFlag(USB_INT_ERROR)) - { - USB_ClearIntFlag(USB_INT_ERROR); - } -#endif - -#if USB_INT_SOURCE & USBD_INT_WKUP - if(USBD_ReadIntFlag(USBD_INT_WKUP)) - { - USBD_ResumeIsrHandler(); - USBD_ClearIntFlag(USBD_INT_WKUP); - } -#endif - -#if USB_INT_SOURCE & USBD_INT_SUS - if(USBD_ReadIntFlag(USBD_INT_SUS)) - { - USBD_SuspendIsrHandler(); - USBD_ClearIntFlag(USBD_INT_SUS); - } -#endif - -#if USB_INT_SOURCE & USBD_INT_SOF - if(USB_ReadIntFlag(USB_INT_SOF)) - { - USB_ClearIntFlag(USB_INT_SOF); - } -#endif - -#if USB_INT_SOURCE & USBD_INT_ESOF - if(USB_ReadIntFlag(USB_INT_ESOF)) - { - USB_ClearIntFlag(USB_INT_ESOF); - } -#endif -} - -/*! - * @brief USB low priority process - * - * @param None - * - * @retval None - */ -static void USBD_LowPriorityProc(void) -{ - USBD_EP_T ep; - - while(USBD_ReadIntFlag(USBD_INT_CTR)) - { - ep = (USBD_EP_T)USBD_ReadEP(); - - /** Endpoint 0 */ - if(ep == 0) - { - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_NAK, USBD_EP_STATUS_NAK); - - /** Control in */ - if(USBD_ReadDir() == 0) - { - USBD_ResetEPTxFlag(USBD_EP_0); - USBD_CtrlInProcess(); - } - else - { - /** Setup */ - if(USBD_ReadEPSetup(USBD_EP_0) == SET) - { - USBD_ResetEPRxFlag(USBD_EP_0); - USBD_SetupProcess(); - } - /** Control out */ - else - { - USBD_ResetEPRxFlag(USBD_EP_0); - USBD_CtrlOutProcess(); - } - } - } - /** Transfer Handler Except endpoint 0 */ - else - { - if (USBD_ReadEPRxFlag(ep)) - { - USBD_ResetEPRxFlag(ep); - USBD_DataOutProcess(ep); - } - - if (USBD_ReadEPTxFlag(ep)) - { - USBD_ResetEPTxFlag(ep); - USBD_DataInProcess(ep); - } - } - } -} - - -/*! - * @brief USB Device Reset - * - * @param None - * - * @retval None - */ -static void USBD_ResetIsrHandler(void) -{ - uint8_t i; - USBD_EPConfig_T epConfig; - - g_usbDev.configurationNum = USB_CONFIGURATION_NUM; - g_usbDev.curConfiguration = 0; - g_usbDev.curInterface = 0; - g_usbDev.curAlternateSetting = 0; - g_usbDev.curFeature = 0; - g_usbDev.ctrlState = USBD_CTRL_STATE_WAIT_SETUP; - - g_usbDev.inBuf[USBD_EP_0].maxPackSize = USB_EP0_PACKET_SIZE; - g_usbDev.outBuf[USBD_EP_0].maxPackSize = USB_EP0_PACKET_SIZE; - - USBD_SetBufferTable(USB_BUFFER_TABLE_ADDR); - - /** Endpoint 0 IN */ - epConfig.epNum = USBD_EP_0; - epConfig.epType = USBD_EP_TYPE_CONTROL; - epConfig.epKind = DISABLE; - epConfig.epBufAddr = USB_EP0_TX_ADDR; - epConfig.maxPackSize = g_usbDev.inBuf[USBD_EP_0].maxPackSize; - epConfig.epStatus = USBD_EP_STATUS_NAK; - USBD_OpenInEP(&epConfig); - - /** Endpoint 0 OUT */ - epConfig.epBufAddr = USB_EP0_RX_ADDR; - epConfig.maxPackSize = g_usbDev.outBuf[USBD_EP_0].maxPackSize; - epConfig.epStatus = USBD_EP_STATUS_VALID; - USBD_OpenOutEP(&epConfig); - - if(g_usbDev.resetHandler) - { - g_usbDev.resetHandler(); - } - - for(i = 0; i < USB_EP_MAX_NUM; i++) - { - USBD_SetEpAddr((USBD_EP_T)i, i); - } - - USBD_SetDeviceAddr(0); - USBD_Enable(); -} - -/*! - * @brief USB Suspend - * - * @param None - * - * @retval None - */ -static void USBD_SuspendIsrHandler(void) -{ - uint8_t i; - uint16_t bakEP[8]; -#if USB_LOW_POWER_SWITCH - uint32_t bakPwrCR; - uint32_t tmp; -#endif - - for(i = 0; i < 8; i++) - { - bakEP[i] = (uint16_t)USBD->EP[i].EP; - } - - USBD_EnableInterrupt(USBD_INT_RST); - - USBD_SetForceReset(); - USBD_ResetForceReset(); - - while(USBD_ReadIntFlag(USBD_INT_RST) == RESET); - - for(i = 0; i < 8; i++) - { - USBD->EP[i].EP = bakEP[i]; - } - - USBD_SetForceSuspend(); - -#if USB_LOW_POWER_SWITCH - USBD_SetLowerPowerMode(); - - bakPwrCR = PMU->CTRL; - tmp = PMU->CTRL; - tmp &= (uint32_t)0xfffffffc; - tmp |= PMU_REGULATOR_LOWPOWER; - PMU->CTRL = tmp; - - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - - if(USBD_ReadIntFlag(USBD_INT_WKUP) == RESET) - { - __WFI(); - SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); - } - else - { - USBD_ClearIntFlag(USBD_INT_WKUP); - USBD_ResetForceSuspend(); - PMU->CTRL = bakPwrCR; - SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); - } -#endif -} - -/*! - * @brief Resume - * - * @param None - * - * @retval None - */ -static void USBD_ResumeIsrHandler(void) -{ -#if USB_LOW_POWER_SWITCH - USBD_ResetLowerPowerMode(); -#endif - - SystemInit(); - - USBD_SetRegCTRL(USB_INT_SOURCE); -} - -#ifndef APM32F0xx_USB -/*! - * @brief USB High priority process - * - * @param None - * - * @retval None - */ -static void USBD_HighPriorityProc(void) -{ - USBD_EP_T ep; - - while(USBD_ReadIntFlag(USBD_INT_CTR)) - { - USBD_ClearIntFlag(USBD_INT_CTR); - - ep = USBD_ReadEP(); - - if(USBD_ReadEPRxFlag(ep)) - { - USBD_ResetEPRxFlag(ep); - - g_usbDev.outEpHandler(ep); - } - - if(USBD_ReadEPTxFlag(ep)) - { - USBD_ResetEPTxFlag(ep); - - g_usbDev.inEpHandler(ep); - } - } -} - -#if USB_SELECT == USB1 -void USBD1_HP_CAN1_TX_IRQHandler(void) -#else -void USB2_HP_IRQHandler(void) -#endif -{ - USBD_HighPriorityProc(); -} - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_stdReq.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_stdReq.c deleted file mode 100644 index c4add46..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Core_Device/Standard/src/usbd_stdReq.c +++ /dev/null @@ -1,369 +0,0 @@ -/*! - * @file usbd_stdReq.c - * - * @brief USB standard request process - * - * @version V1.0.0 - * - * @date 2021-12-30 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "usbd_stdReq.h" -#include "usbd_core.h" -#include "usbd_descriptor.h" - -static uint8_t USBD_StandardGetConfiguration(void); -static uint8_t USBD_StandardGetDescriptor(void); -static uint8_t USBD_StandardGetInterface(void); -static uint8_t USBD_StandardGetStatus(void); - -static uint8_t USBD_StandardSetAddress(void); -static uint8_t USBD_StandardSetConfiguration(void); -static uint8_t USBD_StandardSetDescriptor(void); -static uint8_t USBD_StandardSetFeature(void); -static uint8_t USBD_StandardSetInterface(void); - -static uint8_t USBD_StandardClearFeature(void); - - -/*! - * @brief USB request standard request - * - * @param None - * - * @retval None - */ -void USBD_StandardReqeust(void) -{ - uint8_t result = 1; - - uint8_t bRequest = g_usbDev.reqData.byte.bRequest; - - switch(bRequest) - { - case USBD_GET_CONFIGURATION: - result = USBD_StandardGetConfiguration(); - break; - - case USBD_GET_DESCRIPTOR: - result = USBD_StandardGetDescriptor(); - break; - - case USBD_GET_INTERFACE: - result = USBD_StandardGetInterface(); - break; - - case USBD_GET_STATUS: - result = USBD_StandardGetStatus(); - break; - - case USBD_SET_ADDRESS: - result = USBD_StandardSetAddress(); - break; - - case USBD_SET_CONFIGURATION: - result = USBD_StandardSetConfiguration(); - break; - - case USBD_SET_DESCRIPTOR: - result = USBD_StandardSetDescriptor(); - break; - - case USBD_SET_FEATURE: - result = USBD_StandardSetFeature(); - break; - - case USBD_SET_INTERFACE: - result = USBD_StandardSetInterface(); - - break; - - case USBD_CLEAR_FEATURE: - result = USBD_StandardClearFeature(); - break; - - default: - - break; - } - - if(!result) - { - if(g_usbDev.stdReqExceptionHandler != NULL) - { - g_usbDev.stdReqExceptionHandler(&g_usbDev.reqData); - } - } -} - -/*! - * @brief Standard request get configuration - * - * @param None - * - * @retval ERROR: 0; SUCCESS : 1 - */ -static uint8_t USBD_StandardGetConfiguration(void) -{ - uint8_t recipient = g_usbDev.reqData.byte.bmRequestType.bit.recipient; - - if(recipient == USBD_RECIPIENT_DEVICE) - { - USBD_CtrlInData(&g_usbDev.curConfiguration, 1); - - if (g_usbDev.pStdReqCallback->getConfigurationHandler) - { - g_usbDev.pStdReqCallback->getConfigurationHandler(); - } - - - return SUCCESS; - } - - return ERROR; -} - -/*! - * @brief Standard request get descriptor - * - * @param None - * - * @retval ERROR: 0; SUCCESS : 1 - */ -static uint8_t USBD_StandardGetDescriptor(void) -{ - uint8_t ret = SUCCESS; - uint32_t len = 0; - uint8_t wValue0 = g_usbDev.reqData.byte.wValue[0]; - uint8_t wValue1 = g_usbDev.reqData.byte.wValue[1]; - - if(wValue1 == USBD_DESC_DEVICE) - { - len = USB_MIN(*(uint16_t *)g_usbDev.reqData.byte.wLength, g_usbDev.pDeviceDesc->size); - USBD_CtrlInData((uint8_t *)g_usbDev.pDeviceDesc->pDesc, len); - } - else if(wValue1 == USBD_DESC_CONFIGURATION) - { - len = USB_MIN(*(uint16_t *)g_usbDev.reqData.byte.wLength, g_usbDev.pConfigurationDesc->size); - USBD_CtrlInData((uint8_t *)g_usbDev.pConfigurationDesc->pDesc, len); - } - else if(wValue1 == USBD_DESC_STRING) - { - if (wValue0 < SRTING_DESC_NUM) - { - len = USB_MIN(*(uint16_t *)g_usbDev.reqData.byte.wLength, g_usbDev.pStringDesc[wValue0].size); - USBD_CtrlInData((uint8_t *)g_usbDev.pStringDesc[wValue0].pDesc, len); - } - else - { - ret = ERROR; - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_STALL, USBD_EP_STATUS_STALL); - } - - } - else - { - ret = ERROR; - USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_STALL, USBD_EP_STATUS_STALL); - } - - return ret; -} - -/*! - * @brief Standard request get interface - * - * @param None - * - * @retval ERROR: 0; SUCCESS : 1 - */ -static uint8_t USBD_StandardGetInterface(void) -{ - - return ERROR; -} - -/*! - * @brief Standard request get status - * - * @param None - * - * @retval ERROR: 0; SUCCESS : 1 - */ -static uint8_t USBD_StandardGetStatus(void) -{ - uint8_t ret = 1; - - - uint8_t status[2] = {0, 0}; - - if((g_usbDev.reqData.byte.bmRequestType.bit.recipient) == USBD_RECIPIENT_DEVICE) - { - if(g_usbDev.curFeature & (1 << 5)) - { - status[0] |= 0x02; - } - - if(g_usbDev.curFeature & (1 << 6)) - { - status[0] |= 0x01; - } - - USBD_CtrlInData(status, 2); - - - } - - else if((g_usbDev.reqData.byte.bmRequestType.bit.recipient) == USBD_RECIPIENT_INTERFACE) - { - USBD_CtrlInData(status, 2); - - - } - - else if((g_usbDev.reqData.byte.bmRequestType.bit.recipient) == USBD_RECIPIENT_ENDPOINT) - { - - if(g_usbDev.reqData.byte.wIndex[0] & 0x80) - { - if(USBD_ReadEPTxStatus(g_usbDev.reqData.byte.wIndex[0] & 0x0f) == USBD_EP_STATUS_STALL) - { - status[0] |= 0x01; - } - } - else - { - if(USBD_ReadEPRxStatus(g_usbDev.reqData.byte.wIndex[0] & 0x0f) == USBD_EP_STATUS_STALL) - { - status[0] |= 0x01; - } - - } - USBD_CtrlInData(status, 2); - - } - else - { - ret = 0; - } - - return ret; -} - -/*! - * @brief Standard request set address - * - * @param None - * - * @retval ERROR: 0; SUCCESS : 1 - */ -static uint8_t USBD_StandardSetAddress(void) -{ - USBD_DevReqData_T *reqData = &g_usbDev.reqData; - - if((reqData->byte.wValue[0] < 127) && (reqData->byte.wValue[1] == 0) && - (reqData->byte.bmRequestType.bit.recipient == USBD_RECIPIENT_DEVICE)) - { - USBD_CtrlInData((void *)0, 0); - - return 1; - } - - return 0; -} - -/*! - * @brief Standard request set configuration - * - * @param None - * - * @retval ERROR: 0; SUCCESS : 1 - */ -static uint8_t USBD_StandardSetConfiguration(void) -{ - USBD_DevReqData_T *reqData = &g_usbDev.reqData; - - if((reqData->byte.wValue[0] <= g_usbDev.configurationNum) && \ - (reqData->byte.bmRequestType.bit.recipient == USBD_RECIPIENT_DEVICE)) - { - g_usbDev.curConfiguration = reqData->byte.wValue[0]; - - if (g_usbDev.pStdReqCallback->setConfigurationHandler) - { - g_usbDev.pStdReqCallback->setConfigurationHandler(); - } - - USBD_CtrlInData((void *)0, 0); - - return 1; - } - - return 0; -} - -/*! - * @brief Standard request set descriptor - * - * @param None - * - * @retval 0: Failed; 1: Success - */ -static uint8_t USBD_StandardSetDescriptor(void) -{ - - return ERROR; -} - -/*! - * @brief Standard request set feature - * - * @param None - * - * @retval 0: Failed; 1: Success - */ -static uint8_t USBD_StandardSetFeature(void) -{ - uint8_t ret = 1; - - return ret; -} - -/*! - * @brief Standard request set interface - * - * @param None - * - * @retval 0: Failed; 1: Success - */ -static uint8_t USBD_StandardSetInterface(void) -{ - - return 0; -} - -/*! - * @brief Standard request clear feature - * - * @param None - * - * @retval 0: Failed; 1: Success - */ -static uint8_t USBD_StandardClearFeature(void) -{ - return 0; -} diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Driver/inc/drv_usb_device.h b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Driver/inc/drv_usb_device.h deleted file mode 100644 index 7f02419..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Driver/inc/drv_usb_device.h +++ /dev/null @@ -1,942 +0,0 @@ -/*! - * @file drv_usb_device.h - * - * @brief This file contains all the prototypes,enumeration and macros for USBD peripheral - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __DRV_USB_DEVICE_H_ -#define __DRV_USB_DEVICE_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -#if defined(APM32F070xB) || defined(APM32F072x8) || defined(APM32F072xB) -#define APM32F0xx_USB -#else -#define APM32F10x_USB -#endif - -#ifdef APM32F0xx_USB -#include "apm32f0xx.h" -#include "apm32f0xx_pmu.h" -#include "apm32f0xx_eint.h" -#include "apm32f0xx_gpio.h" -#include "apm32f0xx_rcm.h" -#include "apm32f0xx_misc.h" -#include "usb_config.h" -#else -#include "apm32f10x.h" -#include "apm32f10x_pmu.h" -#include "apm32f10x_eint.h" -#include "apm32f10x_gpio.h" -#include "apm32f10x_rcm.h" -#include "apm32f10x_misc.h" -#include "usb_config.h" -#endif - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup USBD_Driver USBD Driver - @{ -*/ - -/** @addtogroup USBD_Enumerations Enumerations - @{ -*/ - -/** - * @brief USBD Endpoint register bit definition - */ -typedef enum -{ - USBD_EP_BIT_ADDR = (uint32_t)(BIT0 | BIT1 | BIT2 | BIT3), - USBD_EP_BIT_TXSTS = (uint32_t)(BIT4 | BIT5), - USBD_EP_BIT_TXDTOG = (uint32_t)(BIT6), - USBD_EP_BIT_CTFT = (uint32_t)(BIT7), - USBD_EP_BIT_KIND = (uint32_t)(BIT8), - USBD_EP_BIT_TYPE = (uint32_t)(BIT9 | BIT10), - USBD_EP_BIT_SETUP = (uint32_t)(BIT11), - USBD_EP_BIT_RXSTS = (uint32_t)(BIT12 | BIT13), - USBD_EP_BIT_RXDTOG = (uint32_t)(BIT14), - USBD_EP_BIT_CTFR = (uint32_t)(BIT15) -}USBD_EP_BIT_T; - -/** - * @brief Endpoint id - */ -typedef enum -{ - USBD_EP_0, - USBD_EP_1, - USBD_EP_2, - USBD_EP_3, - USBD_EP_4, - USBD_EP_5, - USBD_EP_6, - USBD_EP_7, -}USBD_EP_T; - -/** - * @brief Endpoint status - */ -typedef enum -{ - USBD_EP_STATUS_DISABLE = ((uint32_t)0), - USBD_EP_STATUS_STALL = ((uint32_t)1), - USBD_EP_STATUS_NAK = ((uint32_t)2), - USBD_EP_STATUS_VALID = ((uint32_t)3), -}USBD_EP_STATUS_T; - -/** - * @brief USBD Endpoint type for register - */ -typedef enum -{ - USBD_REG_EP_TYPE_BULK, - USBD_REG_EP_TYPE_CONTROL, - USBD_REG_EP_TYPE_ISO, - USBD_REG_EP_TYPE_INTERRUPT -}USBD_REG_EP_TYPE_T; - -/**@} end of group USBD_Enumerations*/ - - -/** @addtogroup USBD_Macros Macros - @{ -*/ - -/** USBD packet memory area base address */ -#define USBD_PMA_ADDR (0x40006000L) - -/** Endpoint register mask value default */ -#define USBD_EP_MASK_DEFAULT (USBD_EP_BIT_CTFR | USBD_EP_BIT_SETUP | USBD_EP_BIT_TYPE | USBD_EP_BIT_KIND | USBD_EP_BIT_CTFT |USBD_EP_BIT_ADDR) - -/** - * @brief USBD interrupt source - */ -#define USBD_INT_ESOF 0X100 -#define USBD_INT_SOF 0X200 -#define USBD_INT_RST 0X400 -#define USBD_INT_SUS 0x800 -#define USBD_INT_WKUP 0X1000 -#define USBD_INT_ERR 0X2000 -#define USBD_INT_PMAOU 0X4000 -#define USBD_INT_CTR 0X8000 -#define USBD_INT_ALL 0XFF00 - -/**@} end of group USBD_Macros*/ - - -/** @addtogroup USBD_Fuctions Fuctions - @{ -*/ - -/*! - * @brief Set CTRL register - * - * @param val: Register value - * - * @retval None - * - */ -#define USBD_SetRegCTRL(val) (USBD->CTRL = val) - -/*! - * @brief Set INTSTS register - * - * @param val: Register value - * - * @retval None - */ -#define USBD_SetRegINTSTS(val) (USBD->INTSTS = val) - -/*! - * @brief Set force reset - * - * @param None - * - * @retval None - */ -#define USBD_SetForceReset() (USBD->CTRL_B.FORRST = BIT_SET) - -/*! - * @brief Reset force reset - * - * @param None - * - * @retval None - */ -#define USBD_ResetForceReset() (USBD->CTRL_B.FORRST = BIT_RESET) - -/*! - * @brief Set power down - * - * @param None - * - * @retval None - */ -#define USBD_SetPowerDown() (USBD->CTRL_B.PWRDOWN = BIT_SET) - -/*! - * @brief Reset power down - * - * @param None - * - * @retval None - */ -#define USBD_ResetPowerDown() (USBD->CTRL_B.PWRDOWN = BIT_RESET) - -/*! - * @brief Set low power mode - * - * @param None - * - * @retval None - */ -#define USBD_SetLowerPowerMode() (USBD->CTRL_B.LPWREN = BIT_SET) - -/*! - * @brief Ret low power mode - * - * @param None - * - * @retval None - */ -#define USBD_ResetLowerPowerMode() (USBD->CTRL_B.LPWREN = BIT_RESET) - -/*! - * @brief Set force suspend - * - * @param None - * - * @retval None - */ -#define USBD_SetForceSuspend() (USBD->CTRL_B.FORSUS = BIT_SET) - -/*! - * @brief Reset force suspend - * - * @param None - * - * @retval None - */ -#define USBD_ResetForceSuspend() (USBD->CTRL_B.FORSUS = BIT_RESET) - -/*! - * @brief Read force suspend status - * - * @param None - * - * @retval None - */ -#define USBD_ReadForceSuspend() (USBD->CTRL_B.FORSUS) - -/*! - * @brief Set resume - * - * @param None - * - * @retval None - */ -#define USBD_SetResume() (USBD->CTRL_B.WUPREQ = BIT_SET) - -/*! - * @brief Reset resume - * - * @param None - * - * @retval None - */ -#define USBD_ResetResume() (USBD->CTRL_B.WUPREQ = BIT_RESET) - -/*! - * @brief Enable interrupt - * - * @param int: Interrupt source - * - * @retval None - */ -#define USBD_EnableInterrupt(int) (USBD->CTRL |= int) - -/*! - * @brief Disable interrupt - * - * @param int: Interrupt source - * - * @retval None - */ -#define USBD_DisableInterrupt(int) (USBD->CTRL &= (uint32_t)~int) - -/*! - * @brief Read the specified interrupt flag status - * - * @param int: Interrupt source - * - * @retval Flag status.0 or not 0 - */ -#define USBD_ReadIntFlag(int) (USBD->INTSTS & int) - -/*! - * @brief Clear the specified interrupt flag status - * - * @param int: Interrupt source - * - * @retval None - */ -#define USBD_ClearIntFlag(int) (USBD->INTSTS &= (uint32_t)~int) - -/*! - * @brief Read DOT field value in INTSTS rigister - * - * @param None - * - * @retval DOT field value - */ -#define USBD_ReadDir() (USBD->INTSTS_B.DOT) - -/*! - * @brief Read EPID field value in INTSTS rigister - * - * @param None - * - * @retval EPIDfield value - */ -#define USBD_ReadEP() ((USBD_EP_T)(USBD->INTSTS_B.EPID)) - -/*! - * @brief Read EP type - * - * @param ep: EP number - * - * @retval EP type - */ -#define USBD_ReadEPType(ep) (USBD->EP[ep].EP_B.TYPE) - -/*! - * @brief Read EP Tx status - * - * @param ep: EP number - * - * @retval EP Tx status - */ -#define USBD_ReadEPTxStatus(ep) ((USBD_EP_STATUS_T)(USBD->EP[ep].EP_B.TXSTS)) - -/*! - * @brief Read EP Rx status - * - * @param ep: EP number - * - * @retval EP Rx status - */ -#define USBD_ReadEPRxStatus(ep) ((USBD_EP_STATUS_T)(USBD->EP[ep].EP_B.RXSTS)) - -/*! - * @brief Read SETUP field value in EP register - * - * @param ep: EP number - * - * @retval SETUP field value - */ -#define USBD_ReadEPSetup(ep) (USBD->EP[ep].EP_B.SETUP) - -/*! - * @brief Set buffer table value - * - * @param tab: Buffer table value - * - * @retval None - */ -#define USBD_SetBufferTable(tab) (USBD->BUFFTB_B.BUFFTB = tab) - -/*! - * @brief Set device address - * - * @param addr: Device address - * - * @retval None - */ -#define USBD_SetDeviceAddr(addr) (USBD->ADDR_B.ADDR = addr) - -/*! - * @brief Read CTFR field value in EP register - * - * @param ep: Endpoint number - * - * @retval CTFR field value - */ -#define USBD_ReadEPRxFlag(ep) (USBD->EP[ep].EP_B.CTFR) - -/*! - * @brief Read CTFT field value in EP register - * - * @param ep: Endpoint number - * - * @retval CTFT field value - */ -#define USBD_ReadEPTxFlag(ep) (USBD->EP[ep].EP_B.CTFT) - -/*! - * @brief Enable USBD peripheral - * - * @param None - * - * @retval None - */ -#define USBD_Enable() (USBD->ADDR_B.USBDEN = BIT_SET) - -/*! - * @brief Disable USBD peripheral - * - * @param None - * - * @retval None - */ -#define USBD_Disable() (USBD->ADDR_B.USBDEN = BIT_RESET) - -/*! - * @brief Enable USBD2 peripheral - * - * @param None - * - * @retval None - */ -#define USBD2_Enable() (USBD->SWITCH = BIT_SET) - -/*! - * @brief Disable USBD2 peripheral - * - * @param None - * - * @retval None - */ -#define USBD2_Disable() (USBD->SWITCH = BIT_RESET) - -/*! - * @brief Read RXDPSTS field value in FRANUM register - * - * @param None - * - * @retval RXDPSTS field value - */ -#define USBD_ReadRDPS() (USBD->FRANUM_B.RXDPSTS) - -/*! - * @brief Read RXDMSTS field value in FRANUM register - * - * @param None - * - * @retval RXDMSTS field value - */ -#define USBD_ReadRDMS() (USBD->FRANUM_B.RXDMSTS) - -/*! - * @brief Read LOCK field value in FRANUM register - * - * @param None - * - * @retval LOCK field value - */ -#define USBD_ReadLOCK() (USBD->FRANUM_B.LOCK) - -/*! - * @brief Read LSOFNUM field value in FRANUM register - * - * @param None - * - * @retval LSOFNUM field value - */ -#define USBD_ReadLSOF() (USBD->FRANUM_B.LSOFNUM) - -/*! - * @brief Read FRANUM field value in FRANUM register - * - * @param None - * - * @retval FRANUM field value - */ -#define USBD_ReadFRANUM() (USBD->FRANUM_B.FRANUM) - -#ifdef APM32F0xx_USB -/*! - * @brief Read EP Tx address pointer - * - * @param ep: EP number - * - * @retval EP Tx address pointer - */ -#define USBD_ReadEPTxAddrPointer(ep) (uint16_t *)((USBD->BUFFTB + ep * 8) + USBD_PMA_ADDR) - -/*! - * @brief Read EP Tx count pointer - * - * @param ep: EP number - * - * @retval EP Tx count pointer - */ -#define USBD_ReadEPTxCntPointer(ep) (uint16_t *)((USBD->BUFFTB + ep * 8 + 2) + USBD_PMA_ADDR) - -/*! - * @brief Read EP Rx address pointer - * - * @param ep: EP number - * - * @retval EP Rx address pointer - */ -#define USBD_ReadEPRxAddrPointer(ep) (uint16_t *)((USBD->BUFFTB + ep * 8 + 4) + USBD_PMA_ADDR) - -/*! - * @brief Read EP Rx count pointer - * - * @param ep: EP number - * - * @retval EP Rx count pointer - */ -#define USBD_ReadEPRxCntPointer(ep) (uint16_t *)((USBD->BUFFTB + ep * 8 + 6) + USBD_PMA_ADDR) - -/*! - * @brief Set EP Tx addr - * - * @param ep: EP number - * - * @param addr: Tx addr - * - * @retval None - */ -#define USBD_SetEPTxAddr(ep, addr) (*USBD_ReadEPTxAddrPointer(ep) = (addr >> 1) << 1) - -/*! - * @brief Set EP Rx addr - * - * @param ep: EP number - * - * @param addr: Rx addr - * - * @retval None - */ -#define USBD_SetEPRxAddr(ep, addr) (*USBD_ReadEPRxAddrPointer(ep) = (addr >> 1) << 1) - -/*! - * @brief Read EP Tx addr - * - * @param ep: EP number - * - * @retval EP Tx addr - */ -#define USBD_ReadEPTxAddr(ep) ((uint16_t)*USBD_ReadEPTxAddrPointer(ep)) - -/*! - * @brief Read EP Rx addr - * - * @param ep: EP number - * - * @retval EP Rx addr - */ -#define USBD_ReadEPRxAddr(ep) ((uint16_t)*USBD_ReadEPRxAddrPointer(ep)) - -/*! - * @brief Read EP Tx Buffer Pointer - * - * @param ep: EP number - * - * @retval EP Tx Buffer Pointer - */ -#define USBD_ReadEPTxBufferPointer(ep) (uint16_t *)(USBD_ReadEPTxAddr(ep) + USBD_PMA_ADDR) - -/*! - * @brief Read EP Rx Buffer Pointer - * - * @param ep: EP number - * - * @retval EP Rx Buffer Pointer - */ -#define USBD_ReadEPRxBufferPointer(ep) (uint16_t *)(USBD_ReadEPRxAddr(ep) + USBD_PMA_ADDR) - -/*! - * @brief Set EP Tx Count - * - * @param ep: EP number - * - * @param cnt: Tx count - * - * @retval None - */ -#define USBD_SetEPTxCnt(ep, cnt) (*USBD_ReadEPTxCntPointer(ep) = cnt) - -/*! - * @brief Read EP Tx count - * - * @param ep: EP number - * - * @retval EP Tx count - */ -#define USBD_ReadEPTxCnt(ep) ((uint16_t)*USBD_ReadEPTxCntPointer(ep) & 0x3ff) - -/*! - * @brief Read EP Rx count - * - * @param ep: EP number - * - * @retval EP Rx count - */ -#define USBD_ReadEPRxCnt(ep) ((uint16_t)*USBD_ReadEPRxCntPointer(ep) & 0x3ff) - -/*! - * @brief Set BESL Value - * - * @param val: 4-bits BESL Value to be set - * - * @retval None - */ -#define USBD_SetBESL(val) (USBD->LPMCTRLSTS_B.BESL = val) - -/*! - * @brief Set bRemoteWakew Value - * - * @param val: 1-bit bRemoteWakew Value to be set - * - * @retval None - */ -#define USBD_SetRemoteWakeVal(val) (USBD->LPMCTRLSTS_B.REMWAKE = val) - -/*! - * @brief Enable LPM ACK - * - * @param None - * - * @retval None - */ -#define USBD_EnableAckLPM() (USBD->LPMCTRLSTS_B.LPMACKEN = 1) - -/*! - * @brief Disable LPM ACK - * - * @param None - * - * @retval None - */ -#define USBD_DisableAckLPM() (USBD->LPMCTRLSTS_B.LPMACKEN = 0) - -/*! - * @brief Disable LPM - * - * @param None - * - * @retval None - */ -#define USBD_EnableLPM() (USBD->LPMCTRLSTS_B.LPMEN = 1) - -/*! - * @brief Disable LPM - * - * @param None - * - * @retval None - */ -#define USBD_DisableLPM() (USBD->LPMCTRLSTS_B.LPMEN = 0) - -/*! - * @brief Enable Pull-up of DP line - * - * @param None - * - * @retval None - */ -#define USBD_EnablePullUpDP() (USBD->BCD_B.DPPUCTRL = 1) - -/*! - * @brief Disable Pull-up of DP line - * - * @param None - * - * @retval None - */ -#define USBD_DisablePullUpDP() (USBD->BCD_B.DPPUCTRL = 0) - -/*! - * @brief Read DM Pull-up Detection Status Flag - * - * @param None - * - * @retval DM Pull-up Detection Status Flag - */ -#define USBD_DMPullUpStatus() (USBD->BCD_B.DMPUDFLG) - -/*! - * @brief Read Secondary Detection Status Flag - * - * @param None - * - * @retval Secondary Detection Status Flag - */ -#define USBD_SDStatus() (USBD->BCD_B.SDFLG) - -/*! - * @brief Read Primary Detection Status Flag - * - * @param None - * - * @retval Primary Detection Status Flag - */ -#define USBD_PDStatus() (USBD->BCD_B.PDFLG) - -/*! - * @brief Read Data Contact Detection Status Flag - * - * @param None - * - * @retval Data Contact Detection Status Flag - */ -#define USBD_DCDStatus() (USBD->BCD_B.DCDFLG) - -/*! - * @brief Enable Secondary Detection Mode - * - * @param None - * - * @retval None - */ -#define USBD_EnableSDMode() (USBD->BCD_B.SDEN = 1) - -/*! - * @brief Disable Secondary Detection Mode - * - * @param None - * - * @retval None - */ -#define USBD_DisableSDMode() (USBD->BCD_B.SDEN = 0) - -/*! - * @brief Enable Primary Detection Mode - * - * @param None - * - * @retval None - */ -#define USBD_EnablePDMode() (USBD->BCD_B.PDEN = 1) - -/*! - * @brief Disable Primary Detection Mode - * - * @param None - * - * @retval None - */ -#define USBD_DisablePDMode() (USBD->BCD_B.PDEN = 0) - -/*! - * @brief Enable Data Contact Detection Mode - * - * @param None - * - * @retval None - */ -#define USBD_EnableDCDMode() (USBD->BCD_B.DCDEN = 1) - -/*! - * @brief Disable Data Contact Detection Mode - * - * @param None - * - * @retval None - */ -#define USBD_DisableDCDMode() (USBD->BCD_B.DCDEN = 0) - -/*! - * @brief Enable Battery Charging Detector - * - * @param None - * - * @retval None - */ -#define USBD_EnableBCD() (USBD->BCD_B.BCDEN = 1) - -/*! - * @brief Disable Battery Charging Detector - * - * @param None - * - * @retval None - */ -#define USBD_DisableBCD() (USBD->BCD_B.BCDEN = 0) - -#else //!< APM32F10x_USB -/*! - * @brief Read EP Tx address pointer - * - * @param ep: EP number - * - * @retval EP Tx address pointer - */ -#define USBD_ReadEPTxAddrPointer(ep) (uint16_t *)((USBD->BUFFTB + ep * 8) * 2 + USBD_PMA_ADDR) - -/*! - * @brief Read EP Tx count pointer - * - * @param ep: EP number - * - * @retval EP Tx count pointer - */ -#define USBD_ReadEPTxCntPointer(ep) (uint16_t *)((USBD->BUFFTB + ep * 8 + 2) * 2 + USBD_PMA_ADDR) - -/*! - * @brief Read EP Rx address pointer - * - * @param ep: EP number - * - * @retval EP Rx address pointer - */ -#define USBD_ReadEPRxAddrPointer(ep) (uint16_t *)((USBD->BUFFTB + ep * 8 + 4) * 2 + USBD_PMA_ADDR) - -/*! - * @brief Read EP Rx count pointer - * - * @param ep: EP number - * - * @retval EP Rx count pointer - */ -#define USBD_ReadEPRxCntPointer(ep) (uint16_t *)((USBD->BUFFTB + ep * 8 + 6) * 2 + USBD_PMA_ADDR) - -/*! - * @brief Set EP Tx addr - * - * @param ep: EP number - * - * @param addr: Tx addr - * - * @retval None - */ -#define USBD_SetEPTxAddr(ep, addr) (*USBD_ReadEPTxAddrPointer(ep) = (addr >> 1) << 1) - -/*! - * @brief Set EP Rx addr - * - * @param ep: EP number - * - * @param addr: Rx addr - * - * @retval None - */ -#define USBD_SetEPRxAddr(ep, addr) (*USBD_ReadEPRxAddrPointer(ep) = (addr >> 1) << 1) - -/*! - * @brief Read EP Tx addr - * - * @param ep: EP number - * - * @retval EP Tx addr - */ -#define USBD_ReadEPTxAddr(ep) ((uint16_t)*USBD_ReadEPTxAddrPointer(ep)) - -/*! - * @brief Read EP Rx addr - * - * @param ep: EP number - * - * @retval EP Rx addr - */ -#define USBD_ReadEPRxAddr(ep) ((uint16_t)*USBD_ReadEPRxAddrPointer(ep)) - -/*! - * @brief Read EP Tx Buffer Pointer - * - * @param ep: EP number - * - * @retval EP Tx Buffer Pointer - */ -#define USBD_ReadEPTxBufferPointer(ep) (uint32_t *)(((uint32_t)USBD_ReadEPTxAddr(ep) << 1) + USBD_PMA_ADDR) - -/*! - * @brief Read EP Rx Buffer Pointer - * - * @param ep: EP number - * - * @retval EP Rx Buffer Pointer - */ -#define USBD_ReadEPRxBufferPointer(ep) (uint32_t *)(((uint32_t)USBD_ReadEPRxAddr(ep) << 1) + USBD_PMA_ADDR) - -/*! - * @brief Set EP Tx Count - * - * @param ep: EP number - * - * @param cnt: Tx count - * - * @retval None - */ -#define USBD_SetEPTxCnt(ep, cnt) (*USBD_ReadEPTxCntPointer(ep) = cnt) - -/*! - * @brief Read EP Tx count - * - * @param ep: EP number - * - * @retval EP Tx count - */ -#define USBD_ReadEPTxCnt(ep) ((uint16_t)*USBD_ReadEPTxCntPointer(ep) & 0x3ff) - -/*! - * @brief Read EP Rx count - * - * @param ep: EP number - * - * @retval EP Rx count - */ -#define USBD_ReadEPRxCnt(ep) ((uint16_t)*USBD_ReadEPRxCntPointer(ep) & 0x3ff) - -#endif -void USBD_SetEPType(uint8_t ep, USBD_REG_EP_TYPE_T type); - -void USBD_SetEPKind(uint8_t ep); -void USBD_ResetEPKind(uint8_t ep); - -void USBD_ResetEPRxFlag(uint8_t ep); -void USBD_ResetEPTxFlag(uint8_t ep); - -void USBD_ToggleTx(uint8_t ep); -void USBD_ToggleRx(uint8_t ep); -void USBD_ResetTxToggle(uint8_t ep); -void USBD_ResetRxToggle(uint8_t ep); - -void USBD_SetEpAddr(uint8_t ep, uint8_t addr); - -void USBD_SetEPTxStatus(uint8_t ep, USBD_EP_STATUS_T status); -void USBD_SetEPRxStatus(uint8_t ep, USBD_EP_STATUS_T status); -void USBD_SetEPTxRxStatus(uint8_t ep, USBD_EP_STATUS_T txStatus, USBD_EP_STATUS_T rxStatus); - -void USBD_SetEPRxCnt(uint8_t ep, uint32_t cnt); - -void USBD_WriteDataToEP(uint8_t ep, uint8_t *wBuf, uint32_t wLen); -void USBD_ReadDataFromEP(uint8_t ep, uint8_t *rBuf, uint32_t rLen); - -/**@} end of group USBD_Fuctions*/ -/**@} end of group USBD_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /* __DRV_USB_DEVICE_H */ diff --git a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Driver/src/drv_usb_device.c b/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Driver/src/drv_usb_device.c deleted file mode 100644 index 38fb27c..0000000 --- a/Example/EpaperModuleTest_APM32F103/APM32F103/USB_Device_Lib/Driver/src/drv_usb_device.c +++ /dev/null @@ -1,403 +0,0 @@ -/*! - * @file drv_usb_device.c - * - * @brief This file contains all the functions for the USBD peripheral - * - * @version V1.0.0 - * - * @date 2021-12-06 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "drv_usb_device.h" - -/*! - * @brief Set Endpoint type - * - * @param ep: Endpoint number - * - * @param type: Endpoint type - * - * @retval None - */ -void USBD_SetEPType(uint8_t ep, USBD_REG_EP_TYPE_T type) -{ - __IOM uint32_t reg; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT); - reg &= ~USBD_EP_BIT_TYPE; - reg |= type << 9; - - USBD->EP[ep].EP = reg; -} - -/*! - * @brief Set EP kind - * - * @param ep: Endpoint number - * - * @retval None - */ -void USBD_SetEPKind(uint8_t ep) -{ - __IOM uint32_t reg; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT); - reg |= USBD_EP_BIT_KIND; - - USBD->EP[ep].EP = reg; -} - -/*! - * @brief Reset EP kind - * - * @param ep: Endpoint number - * - * @retval None - */ -void USBD_ResetEPKind(uint8_t ep) -{ - __IOM uint32_t reg; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT); - reg &= ~USBD_EP_BIT_KIND; - - USBD->EP[ep].EP = reg; -} - - -/*! - * @brief Reset EP CTFR bit - * - * @param ep: Endpoint number - * - * @retval None - */ -void USBD_ResetEPRxFlag(uint8_t ep) -{ - __IOM uint32_t reg; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT); - reg &= ~USBD_EP_BIT_CTFR; - - USBD->EP[ep].EP = reg; -} - -/*! - * @brief Reset EP CTFT bit - * - * @param ep: Endpoint number - * - * @retval None - */ -void USBD_ResetEPTxFlag(uint8_t ep) -{ - __IOM uint32_t reg; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT); - reg &= ~USBD_EP_BIT_CTFT; - - USBD->EP[ep].EP = reg; -} - -/*! - * @brief Toggle Tx DTOG - * - * @param ep: Endpoint number - * - * @retval None - */ -void USBD_ToggleTx(uint8_t ep) -{ - __IOM uint32_t reg; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT); - reg |= USBD_EP_BIT_TXDTOG; - - USBD->EP[ep].EP = reg; -} - -/*! - * @brief Toggle Rx DTOG - * - * @param ep: Endpoint number - * - * @retval None - */ -void USBD_ToggleRx(uint8_t ep) -{ - __IOM uint32_t reg; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT); - reg |= USBD_EP_BIT_RXDTOG; - - USBD->EP[ep].EP = reg; -} - -/*! - * @brief Reset Toggle Tx DTOG - * - * @param ep: Endpoint number - * - * @retval None - */ -void USBD_ResetTxToggle(uint8_t ep) -{ - if(USBD->EP[ep].EP_B.TXDTOG) - { - USBD_ToggleTx(ep); - } -} - -/*! - * @brief Reset Toggle Rx DTOG - * - * @param ep: Endpoint number - * - * @retval None - */ -void USBD_ResetRxToggle(uint8_t ep) -{ - if(USBD->EP[ep].EP_B.RXDTOG) - { - USBD_ToggleRx(ep); - } -} - -/*! - * @brief Set EP address - * - * @param ep: Endpoint number - * - * @param addr: Address - * - * @retval None - */ -void USBD_SetEpAddr(uint8_t ep, uint8_t addr) -{ - __IOM uint32_t reg; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT); - reg &= ~USBD_EP_BIT_ADDR; - reg |= addr; - - USBD->EP[ep].EP = reg; -} - -/*! - * @brief Set EP Tx status - * - * @param ep: Endpoint number - * - * @param status: status - * - * @retval None - */ -void USBD_SetEPTxStatus(uint8_t ep, USBD_EP_STATUS_T status) -{ - __IOM uint32_t reg; - - status <<= 4; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT | USBD_EP_BIT_TXSTS); - reg ^= ((uint32_t)status & (uint32_t)USBD_EP_BIT_TXSTS); - - USBD->EP[ep].EP = reg; -} - -/*! - * @brief Set EP Rx status - * - * @param ep: Endpoint number - * - * @param status: status - * - * @retval None - */ -void USBD_SetEPRxStatus(uint8_t ep, USBD_EP_STATUS_T status) -{ - __IOM uint32_t reg; - uint32_t tmp; - - tmp = status << 12; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT | USBD_EP_BIT_RXSTS); - reg ^= (tmp & USBD_EP_BIT_RXSTS); - - USBD->EP[ep].EP = reg; -} - - -/*! - * @brief Set EP Tx and Rx status - * - * @param ep: Endpoint number - * - * @param status: status - * - * @retval None - */ -void USBD_SetEPTxRxStatus(uint8_t ep, USBD_EP_STATUS_T txStatus, USBD_EP_STATUS_T rxStatus) -{ - __IOM uint32_t reg; - uint32_t tmp; - - reg = USBD->EP[ep].EP; - - reg &= (uint32_t)(USBD_EP_MASK_DEFAULT | USBD_EP_BIT_RXSTS | USBD_EP_BIT_TXSTS); - - tmp = rxStatus << 12; - reg ^= (tmp & USBD_EP_BIT_RXSTS); - - tmp = txStatus << 4; - reg ^= (tmp & USBD_EP_BIT_TXSTS); - - USBD->EP[ep].EP = reg; -} - -/*! - * @brief Set EP Rx Count - * - * @param ep: Endpoint number - * - * @param cnt: Rx count - * - * @retval None - */ -void USBD_SetEPRxCnt(uint8_t ep, uint32_t cnt) -{ - __IOM uint16_t *p; - __IOM uint16_t block = 0; - - p = USBD_ReadEPRxCntPointer(ep); - - if(cnt > 62) - { - block = cnt >> 5; - - if(!(cnt & 0x1f)) - { - block -= 1; - } - - *p = (block << 10) | 0x8000; - } - else - { - block = cnt >> 1; - - if(cnt & 0x01) - { - block += 1; - } - - *p = (block << 10); - } -} - -/*! - * @brief Write a buffer of data to a selected endpoint - * - * @param ep: Endpoint number - * - * @retval wBuf: The pointer to the buffer of data to be written to the endpoint - * - * @param wLen: Number of data to be written (in bytes) - * - * @retval None - */ -void USBD_WriteDataToEP(uint8_t ep, uint8_t *wBuf, uint32_t wLen) -{ - uint32_t i; -#ifdef APM32F0xx_USB - uint16_t *epAddr; - uint16_t tmp; -#else - uint32_t *epAddr; - uint32_t tmp; -#endif - - wLen = (wLen + 1) >> 1; - - epAddr = USBD_ReadEPTxBufferPointer(ep); - - for(i = 0; i < wLen; i++) - { - tmp = *wBuf++; - tmp = ((*wBuf++) << 8) | tmp; - - *epAddr++ = tmp; - } -} - -/*! - * @brief Read a buffer of data to a selected endpoint - * - * @param ep: Endpoint number - * - * @retval wBuf: The pointer to the buffer of data to be read to the endpoint - * - * @param wLen: Number of data to be read (in bytes) - * - * @retval None - */ -void USBD_ReadDataFromEP(uint8_t ep, uint8_t *rBuf, uint32_t rLen) -{ -#ifdef APM32F0xx_USB - uint16_t *epAddr; -#else - uint32_t *epAddr; -#endif - uint32_t i, tmp, cnt; - - cnt = rLen >> 1; - - epAddr = USBD_ReadEPRxBufferPointer(ep); - - for(i = 0; i < cnt; i++) - { - tmp = *epAddr++; - *rBuf++ = tmp & 0xFF; - *rBuf++ = (tmp >> 8) & 0xFF; - } - - if (rLen & 1) - { - tmp = *epAddr; - *rBuf = tmp & 0xFF; - } -} diff --git a/Example/EpaperModuleTest_APM32F103/Epaper/bmp.h b/Example/EpaperModuleTest_APM32F103/Epaper/bmp.h deleted file mode 100644 index bd22f80..0000000 --- a/Example/EpaperModuleTest_APM32F103/Epaper/bmp.h +++ /dev/null @@ -1,638 +0,0 @@ -#ifndef __BMP_H -#define __BMP_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -////////////////array///////////////////////////////////////////////////////////////////////////////////// -const unsigned char gImage_1[4000] = { /* 0X01,0X01,0XFA,0X00,0X7A,0X00, */ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x0E,0x07,0x07, -0x07,0xDF,0xFE,0xFE,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x3C,0x1E,0xFE, -0xFE,0xFE,0x00,0x00,0x00,0x0C,0x0E,0x0F,0x07,0x07,0x87,0xFF,0xFE,0xFC,0x00,0x00, -0x18,0x1F,0x1F,0x0F,0x00,0x00,0x18,0x1F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0xF0, -0xF0,0xF0,0x70,0x30,0x30,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x60,0x70,0x70,0x30,0x30, -0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xF0, -0xE0,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x70,0x30,0x70,0xF0,0xF0,0xE0,0x80,0x00,0x00, -0xF0,0xF0,0xF0,0xF0,0x70,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, -0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00, -0x80,0xE0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0xC0,0xE0,0xF0, -0x70,0x30,0x70,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00, -0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0x3E,0x1F,0x0F,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0x80,0x02,0x03,0x03,0x07,0xCF,0xFF,0xFC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0x00,0xE0,0xF8,0xFC,0xBC,0x0C,0x0C,0x8C,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0xC1,0xFF,0xFF,0x7F,0x00,0x1C,0xFF,0xFF, -0xFF,0x0C,0x0C,0x0C,0x0C,0x8F,0x8F,0x0F,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x0F,0xFF,0xFF, -0xFE,0xFF,0x1F,0x01,0x7F,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x80,0x00,0x00, -0x00,0xE3,0xFF,0xFF,0x3E,0x00,0x1C,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x80,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xCD,0x0C,0x0C,0x0C,0x0D,0x8F, -0x8F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x06,0x07,0x07, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x03, -0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x06,0x00,0x00,0x00,0xFF,0xFF,0x07,0x07, -0x06,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07, -0x03,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x07, -0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00, -0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x03, -0x07,0x07,0x06,0x07,0x03,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x07,0x07,0x06,0x06, -0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00, -0xF8,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x7F,0x03, -0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFF,0xFF,0x7F,0xFF,0xFE,0xE0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0, -0xC0,0xC0,0xC0,0x80,0x00,0x00,0xC0,0xC0,0xC0,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFE, -0xFF,0x0F,0x07,0x07,0x07,0x07,0x07,0x0F,0x1F,0x1E,0x0C,0x00,0x00,0x00,0xC0,0xC0, -0xFE,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0x00,0x00,0xC3,0xC3,0xC3,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80, -0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0xC0,0xFE,0xFF,0x7F,0x03,0x03,0x7F,0xFF, -0xFE,0xC0,0x00,0x00,0xF8,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF, -0x8F,0x83,0x81,0x81,0x81,0x81,0x87,0xBF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00, -0xC0,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x07,0x3F,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00, -0x00,0x00,0xF8,0xFE,0xFF,0x3F,0x07,0x03,0x01,0x01,0x01,0x03,0x03,0x03,0x01,0x00, -0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3E,0x3C,0x78,0x78,0x78, -0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01, -0x01,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x1F,0x07,0x03,0x01, -0x01,0x01,0x03,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0x1F,0x07,0x03,0x01,0x01,0x01,0x03, -0x07,0xFF,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF, -0xFF,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF8,0xFE,0xFF,0xFF, -0x07,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xC3,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x83,0x03,0x03,0x00,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0x0F,0x0E,0x0E,0x0E, -0x0E,0x0E,0x0E,0x0F,0x3F,0xFF,0xFF,0xF0,0x80,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF0, -0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x7E, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x80,0xC0,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x7F,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0xFE,0xFF,0xFF,0x3F,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x07,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x00,0x00, -0x00,0x0E,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, -0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F, -0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x0F,0x06, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x04,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E, -0x0E,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x07,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00, -0x00,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0xC0, -0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0, -0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x80,0x00,0x00, -0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x80, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0E,0x0F, -0x07,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0xC1,0xFF,0xFF,0x7F, -0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x1C,0x7C,0xFC,0xF0,0xC0,0xF0,0xFC,0x7C,0x1C,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0xFF, -0xFF,0xFF,0x61,0x61,0xE1,0xE1,0xC1,0x80,0x00,0x00,0xFC,0xFF,0xFF,0x07,0x01,0x01, -0x03,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x7F,0xFC,0xF0,0xC0,0x00,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0xF0,0xF8,0xFE,0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xE0,0xF0,0xF8,0xFE,0xDF,0xCF,0xC3,0xC1,0xC0,0x00,0xC0,0xE0,0xF8,0xFC,0xFE, -0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x7F, -0x1F,0x0F,0x3F,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF8, -0xFC,0xFE,0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0xE0,0xE0,0xE0,0xC0,0x80,0xC0,0xE0,0xFF, -0xFF,0x3F,0x00,0x00,0x1F,0x7F,0xFF,0xF0,0xC0,0xC0,0xE0,0xFF,0xFF,0x3F,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0, -0xC0,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0, -0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x03,0x0F,0x7F,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03, -0x07,0x1F,0x3F,0xFC,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01, -0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; -const unsigned char gImage_2[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_3[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x1F,0x1F,0x0F,0x0F,0x9F,0xFF,0xFF,0xFE,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x78,0x7C,0x7E,0x3E,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x04,0x0E,0x1E,0x1F,0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x73,0x7F,0x3F,0x1F,0x0F,0x00,0x00,0x31,0x7B,0x7F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x07,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x30,0xF0,0xF0,0xF0,0x78,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0xF8,0x78,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xC0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF0,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0x70,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFE,0xFF,0xBF,0x9F,0x87,0x83,0x80,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0xC0,0xC0,0xC0,0xC7,0x87,0x87,0xCF,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x80,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x40,0xF8,0xFC,0xFC,0xFE,0xFE,0x9E,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9D,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE1,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x1C,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9C,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF0,0xF8,0xFC,0x7C,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x18,0x3C,0x3E,0x3E,0x1E,0x1E,0x3E,0xFE,0xFE,0xFC,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x9E,0x9E,0x9E,0x9E,0x1E,0x1E,0x00,0x00,0xE0,0xF8,0xFC,0xFE,0xFE,0x7E,0x1E,0x3E,0xFE,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xE0,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xC0,0xE0,0xF8,0xFC,0xFE,0xFE,0x3E,0x1E,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xFC,0xFF,0x7F,0x3F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x87,0x87,0x87,0x87,0x07,0x07,0x8F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x7F,0xFF,0xFF,0xFF,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0F,0x0F,0x0F,0x0F,0x0F,0x01,0x01,0x07,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x01,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x01,0x03,0x0F,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_4[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00, -0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE, -0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00, -0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80, -0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0, -0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30, -0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80, -0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF, -0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, -0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF, -0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF, -0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0, -0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F, -0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC, -0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF, -0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F, -0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80, -0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F, -0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F, -0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F, -0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F, -0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F, -0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00, -0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00, -0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F, -0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E, -0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_5[1600]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00, -0x00,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0, -0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF0, -0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFE, -0xE0,0x00,0x00,0x80,0xFC,0xFF,0xFF,0xFF,0x3F,0x01,0x00,0xC0,0xF0,0xF8,0xF8,0xFC, -0x7C,0x3C,0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x80,0xF0,0xFE, -0xFF,0xFF,0x3F,0x07,0x3F,0xFF,0xFF,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0xF8,0xF8,0xFC,0x7C,0x3C,0x3C,0x7C,0x7C,0x7C,0x78,0x38,0x78,0x7C,0xFF,0xFF, -0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F, -0xFF,0xFF,0xFF,0xFF,0xF1,0xE1,0xC0,0xC0,0xC1,0x81,0x83,0x03,0x03,0x01,0x00,0x78, -0x78,0xFC,0xFF,0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0xFC,0xFC,0xFC,0xFC, -0xFC,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,0xC0,0xF0, -0xF8,0xF8,0xFC,0xFC,0x7C,0x3C,0x3C,0x7C,0x78,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xF8,0xFC,0x7C,0x3C, -0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFE,0xF0,0xFF, -0xFF,0xFF,0x1F,0x01,0x00,0x07,0x7F,0xFF,0xFF,0xFE,0xE0,0xFF,0xFF,0xFF,0xFF,0x07, -0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x9E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F, -0x1F,0x1F,0x00,0xE0,0xFC,0xFF,0xFF,0xFF,0x3F,0x3D,0x3C,0x3C,0x3C,0x3F,0x3F,0xFF, -0xFF,0xFF,0xFC,0xE0,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC1,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x81,0x01,0x03,0x03,0x07,0x07,0x0F, -0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC3,0x00,0x00,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x07, -0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x1F, -0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0E,0x18,0x1F,0x1F,0x1F,0x1F,0x07,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x18,0x03,0x07, -0x0F,0x0F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0E,0x00,0x00,0x03,0x0F, -0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x18,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x0F, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0F,0x07,0x01,0x00, -0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1C,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00, -0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x1F,0x1F,0x1E, -0x1E,0x1E,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/Epaper/epaper.c b/Example/EpaperModuleTest_APM32F103/Epaper/epaper.c deleted file mode 100644 index 5120719..0000000 --- a/Example/EpaperModuleTest_APM32F103/Epaper/epaper.c +++ /dev/null @@ -1,923 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "epaper.h" -#include "epdfont.h" - -#include "systick.h" -#include "apm32f10x_gpio.h" -#include "apm32f10x_rcm.h" -#include "apm32f10x_spi.h" - -// epaper module -// res pin -> pa8 -// busy pin -> pa15 -// d/c pin -> pb14 -// cs pin -> pb12 -// sck pin -> pb13 -// mosi pin -> pb15 - -EPD_PAINT EPD_Paint; - -static uint8_t _hibernating = 1; - -static const unsigned char lut_partial[] = -{ - 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x40, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, -}; - -void epd_delay(uint16_t ms) -{ - delay(ms); -} - -void epd_res_set() -{ - GPIO_WriteBitValue(GPIOA, GPIO_PIN_8, BIT_SET); -} - -void epd_res_reset() -{ - GPIO_WriteBitValue(GPIOA, GPIO_PIN_8, BIT_RESET); -} - -void epd_dc_set() -{ - GPIO_WriteBitValue(GPIOB, GPIO_PIN_14, BIT_SET); -} - -void epd_dc_reset() -{ - GPIO_WriteBitValue(GPIOB, GPIO_PIN_14, BIT_RESET); -} - -void epd_cs_set() -{ - GPIO_WriteBitValue(GPIOB, GPIO_PIN_12, BIT_SET); -} - -void epd_cs_reset() -{ - GPIO_WriteBitValue(GPIOB, GPIO_PIN_12, BIT_RESET); -} - -uint8_t epd_is_busy() -{ - return GPIO_ReadInputBit(GPIOA, GPIO_PIN_15) == BIT_RESET ? 0 : 1; -} - -void epd_io_init(void) -{ - GPIO_Config_T GPIO_ConfigStruct; - SPI_Config_T spiConfig; - - RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA | RCM_APB2_PERIPH_GPIOB)); - - /* configure the epaper module res pin */ - GPIO_ConfigStruct.mode = GPIO_MODE_OUT_PP; - GPIO_ConfigStruct.pin = GPIO_PIN_8; - GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz; - GPIO_Config(GPIOA, &GPIO_ConfigStruct); - - /* configure the epaper module busy pin */ - GPIO_ConfigStruct.mode = GPIO_MODE_IN_PU; - GPIO_ConfigStruct.pin = GPIO_PIN_15; - GPIO_Config(GPIOA, &GPIO_ConfigStruct); - - /* configure the epaper module d/c pin */ - GPIO_ConfigStruct.mode = GPIO_MODE_OUT_PP; - GPIO_ConfigStruct.pin = GPIO_PIN_14; - GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz; - GPIO_Config(GPIOB, &GPIO_ConfigStruct); - - /* configure the epaper module spi2 sck mosi pin */ - GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP; - GPIO_ConfigStruct.pin = GPIO_PIN_13 | GPIO_PIN_15; - GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz; - GPIO_Config(GPIOB, &GPIO_ConfigStruct); - - /* configure the epaper module cs pin */ - GPIO_ConfigStruct.mode = GPIO_MODE_OUT_PP; - GPIO_ConfigStruct.pin = GPIO_PIN_12; - GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz; - GPIO_Config(GPIOB, &GPIO_ConfigStruct); - - /* configure spi2 */ - RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_SPI2); - - SPI_ConfigStructInit(&spiConfig); - spiConfig.length = SPI_DATA_LENGTH_8B; - spiConfig.baudrateDiv = SPI_BAUDRATE_DIV_8; - spiConfig.direction = SPI_DIRECTION_1LINE_TX; - spiConfig.firstBit = SPI_FIRSTBIT_MSB; - spiConfig.mode = SPI_MODE_MASTER; - spiConfig.polarity = SPI_CLKPOL_HIGH; - spiConfig.phase = SPI_CLKPHA_2EDGE; - spiConfig.nss = SPI_NSS_SOFT; - SPI_Config(SPI2, &spiConfig); - SPI_ConfigDataSize(SPI2, SPI_DATA_LENGTH_8B); - SPI_Enable(SPI2); -} - -void epd_write_reg(uint8_t reg) -{ - epd_dc_reset(); - epd_cs_reset(); - - SPI_I2S_TxData(SPI2, reg); - while (SPI_I2S_ReadStatusFlag(SPI2, SPI_FLAG_BSY) != RESET) - ; - - epd_cs_set(); - epd_dc_set(); -} - -void epd_write_data(uint8_t data) -{ - epd_cs_reset(); - - SPI_I2S_TxData(SPI2, data); - while (SPI_I2S_ReadStatusFlag(SPI2, SPI_FLAG_BSY) != RESET) - ; - - epd_cs_set(); -} - -void _epd_write_data(uint8_t data) -{ - - while (SPI_I2S_ReadStatusFlag(SPI2, SPI_FLAG_TXBE) == RESET) - ; - SPI_I2S_TxData(SPI2, data); -} - -void _epd_write_data_over() -{ - while (SPI_I2S_ReadStatusFlag(SPI2, SPI_FLAG_BSY) != RESET) - ; -} - -uint8_t epd_wait_busy() -{ - uint32_t timeout = 0; - while (epd_is_busy()) - { - timeout++; - if (timeout > 40000) - { - return 1; - } - epd_delay(1); - } - return 0; -} - -void epd_reset(void) -{ - epd_res_reset(); - epd_delay(50); - epd_res_set(); - epd_delay(50); - _hibernating = 0; -} - -uint8_t epd_init(void) -{ - if (_hibernating) - epd_reset(); - - if (epd_wait_busy()) - return 1; - - epd_write_reg(0x12); // SWRESET - - epd_delay(10); - - if (epd_wait_busy()) - return 1; - - #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) - epd_write_reg(0x01); // Driver output control -#if defined(EPD_29) || defined(EPD_213) - epd_write_data(0x27); - epd_write_data(0x01); - epd_write_data(0x01); -#else - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x01); - #endif - - epd_write_reg(0x11); // data entry mode - epd_write_data(0x01); - -#ifdef EPD_154 - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x18); - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x00); - epd_write_data(0x00); - #else - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x0F); // 0x0F-->(15+1)*8=128 - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0x27); // 0x127-->(295+1)=296 - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_data(0x00); -#endif - - epd_write_reg(0x3C); // BorderWavefrom - epd_write_data(0x05); - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x21); // Display update control - epd_write_data(0x00); - epd_write_data(0x80); - #endif - - #elif defined(EPD_42) - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x40); - epd_write_data(0x00); - epd_write_reg(0x01); // Set MUX as 300 - epd_write_data(0x2B); - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x01); - epd_write_reg(0x11); // data entry mode - epd_write_data(0x03); // X-mode - epd_address_set(0,0,EPD_W-1,EPD_H-1); -#endif - - epd_write_reg(0x18); // Read built-in temperature sensor - epd_write_data(0x80); - - epd_setpos(0,0); - - if (epd_power_on()) - return 1; - - return 0; -} - -uint8_t epd_init_partial(void) -{ - if (epd_init()) - return 1; - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x32); - epd_cs_reset(); - for (int j = 0; j < sizeof(lut_partial); j++) - { - _epd_write_data(lut_partial[j]); - } - _epd_write_data_over(); - epd_cs_set(); - #elif defined(EPD_42) - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x80); - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application -#endif - - return 0; -} - -void epd_enter_deepsleepmode(uint8_t mode) -{ - epd_power_off(); - epd_write_reg(0x10); - epd_write_data(mode); - _hibernating = 1; -} - -uint8_t epd_power_on(void) -{ - #if defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xe0); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xf8); - #endif - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -uint8_t epd_power_off(void) -{ - epd_write_reg(0x22); // Display Update Control - epd_write_data(0x83); - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -void epd_init_internalTempSensor(void) -{ - epd_write_reg(0x18); - epd_write_data(0x80); - - epd_write_reg(0x1A); - epd_write_data(0x7F); -// epd_write_data(0xF0); -} - -void epd_update(void) -{ - - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF4); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_update_partial(void) -{ - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFC); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFF); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xCC); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) -{ - epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION - epd_write_data((x_start>>3) & 0xFF); - epd_write_data((x_end>>3) & 0xFF); - - epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION - epd_write_data(y_start & 0xFF); - epd_write_data((y_start >> 8) & 0xFF); - epd_write_data(y_end & 0xFF); - epd_write_data((y_end >> 8) & 0xFF); -} - -void epd_setpos(uint16_t x, uint16_t y) -{ - uint8_t _x; - uint16_t _y; - - _x = x / 8; - -#ifdef EPD_154 - _y = 199 - y; - #elif defined(EPD_29) || defined(EPD_213) - _y = 295 - y; - #elif defined(EPD_42) - _y = y; -#endif - - epd_write_reg(0x4E); // set RAM x address count to 0; - epd_write_data(_x); - epd_write_reg(0x4F); // set RAM y address count to 0x127; - epd_write_data(_y & 0xff); - epd_write_data(_y >> 8 & 0x01); -} - -void epd_writedata(uint8_t *Image1, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(Image1[j]); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_writedata2(uint8_t data, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(data); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_display(uint8_t *Image1, uint8_t *Image2) -{ - uint32_t Width, Height, i, j; - uint32_t k = 0; - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x24); - epd_writedata(Image1, Width * Height); - - epd_setpos(0, 0); - - epd_write_reg(0x26); - k = 0; - epd_cs_reset(); - for (j = 0; j < Height; j++) - { - for (i = 0; i < Width; i++) - { - _epd_write_data(~Image2[k]); - k++; - } - } - _epd_write_data_over(); - epd_cs_set(); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - - epd_update(); -} - -void epd_displayBW(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update(); -} - -void epd_displayBW_partial(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update_partial(); - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); -} - -void epd_displayRED(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - epd_update(); -} - -void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color) -{ - EPD_Paint.Image = 0x00; - EPD_Paint.Image = image; - - EPD_Paint.WidthMemory = Width; - EPD_Paint.HeightMemory = Height; - EPD_Paint.Color = Color; - EPD_Paint.WidthByte = (Width % 8 == 0) ? (Width / 8) : (Width / 8 + 1); - EPD_Paint.HeightByte = Height; - EPD_Paint.Rotate = Rotate; - if (Rotate == EPD_ROTATE_0 || Rotate == EPD_ROTATE_180) - { - - EPD_Paint.Width = Height; - EPD_Paint.Height = Width; - } - else - { - EPD_Paint.Width = Width; - EPD_Paint.Height = Height; - } -} - -void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - uint16_t X, Y; - uint32_t Addr; - uint8_t Rdata; - switch (EPD_Paint.Rotate) - { - case 0: - - X = EPD_Paint.WidthMemory - Ypoint - 1; - Y = Xpoint; - break; - case 90: - X = EPD_Paint.WidthMemory - Xpoint - 1; - Y = EPD_Paint.HeightMemory - Ypoint - 1; - break; - case 180: - X = Ypoint; - Y = EPD_Paint.HeightMemory - Xpoint - 1; - break; - case 270: - X = Xpoint; - Y = Ypoint; - break; - default: - return; - } - Addr = X / 8 + Y * EPD_Paint.WidthByte; - Rdata = EPD_Paint.Image[Addr]; - if (Color == EPD_COLOR_BLACK) - { - EPD_Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8)); - } - else - EPD_Paint.Image[Addr] = Rdata | (0x80 >> (X % 8)); -} - -void epd_paint_clear(uint16_t color) -{ - uint16_t X, Y; - uint32_t Addr; - - for (Y = 0; Y < EPD_Paint.HeightByte; Y++) - { - for (X = 0; X < EPD_Paint.WidthByte; X++) - { // 8 pixel = 1 byte - Addr = X + Y * EPD_Paint.WidthByte; - EPD_Paint.Image[Addr] = color; - } - } -} - -void epd_paint_selectimage(uint8_t *image) -{ - EPD_Paint.Image = image; -} - -void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - epd_paint_setpixel(Xpoint - 1, Ypoint - 1, Color); -} - -void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color) -{ - uint16_t Xpoint, Ypoint; - int32_t dx, dy; - int32_t XAddway, YAddway; - int32_t Esp; - char Dotted_Len; - Xpoint = Xstart; - Ypoint = Ystart; - dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend; - dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend; - - XAddway = Xstart < Xend ? 1 : -1; - YAddway = Ystart < Yend ? 1 : -1; - - Esp = dx + dy; - Dotted_Len = 0; - - for (;;) - { - Dotted_Len++; - epd_paint_drawPoint(Xpoint, Ypoint, Color); - if (2 * Esp >= dy) - { - if (Xpoint == Xend) - break; - Esp += dy; - Xpoint += XAddway; - } - if (2 * Esp <= dx) - { - if (Ypoint == Yend) - break; - Esp += dx; - Ypoint += YAddway; - } - } -} - -void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode) -{ - uint16_t i; - if (mode) - { - for (i = Ystart; i < Yend; i++) - { - epd_paint_drawLine(Xstart, i, Xend, i, Color); - } - } - else - { - epd_paint_drawLine(Xstart, Ystart, Xend, Ystart, Color); - epd_paint_drawLine(Xstart, Ystart, Xstart, Yend, Color); - epd_paint_drawLine(Xend, Yend, Xend, Ystart, Color); - epd_paint_drawLine(Xend, Yend, Xstart, Yend, Color); - } -} - -void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode) -{ - uint16_t Esp, sCountY; - uint16_t XCurrent, YCurrent; - XCurrent = 0; - YCurrent = Radius; - Esp = 3 - (Radius << 1); - if (mode) - { - while (XCurrent <= YCurrent) - { // Realistic circles - for (sCountY = XCurrent; sCountY <= YCurrent; sCountY++) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + sCountY, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + sCountY, Color); // 2 - epd_paint_drawPoint(X_Center - sCountY, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - sCountY, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - sCountY, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - sCountY, Color); // 6 - epd_paint_drawPoint(X_Center + sCountY, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + sCountY, Y_Center + XCurrent, Color); - } - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } - else - { // Draw a hollow circle - while (XCurrent <= YCurrent) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + YCurrent, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + YCurrent, Color); // 2 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - YCurrent, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - YCurrent, Color); // 6 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center + XCurrent, Color); // 0 - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } -} - -void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color) -{ - uint16_t i, m, temp, size2, chr1; - uint16_t x0, y0; - x += 1, y += 1, x0 = x, y0 = y; - if (x - size1 > EPD_H) - return; - if (size1 == 8) - size2 = 6; - else - size2 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * (size1 / 2); - chr1 = chr - ' '; - for (i = 0; i < size2; i++) - { - if (size1 == 8) - { - temp = asc2_0806[chr1][i]; - } // 0806 - else if (size1 == 12) - { - temp = asc2_1206[chr1][i]; - } // 1206 - else if (size1 == 16) - { - temp = asc2_1608[chr1][i]; - } // 1608 - else if (size1 == 24) - { - temp = asc2_2412[chr1][i]; - } // 2412 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((size1 != 8) && ((x - x0) == size1 / 2)) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color) -{ - while (*chr != '\0') - { - epd_paint_showChar(x, y, *chr, size1, color); - chr++; - if (size1 == 8) - { - x += 6; - if(x > EPD_H-6) - break; - } - else - { - x += size1 / 2; - if(x > EPD_H-size1 / 2) - break; - } - } -} - -// m^n -static uint32_t _Pow(uint16_t m, uint16_t n) -{ - uint32_t result = 1; - while (n--) - { - result *= m; - } - return result; -} - -void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color) -{ - uint8_t t, temp, m = 0; - if (size1 == 8) - m = 2; - for (t = 0; t < len; t++) - { - temp = (num / _Pow(10, len - t - 1)) % 10; - if (temp == 0) - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, '0', size1, color); - } - else - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, temp + '0', size1, color); - } - } -} - -void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color) -{ - uint16_t m, temp; - uint16_t x0, y0; - uint16_t i, size3 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * size1; - x += 1, y += 1, x0 = x, y0 = y; - for (i = 0; i < size3; i++) - { - if (size1 == 16) - { - temp = Hzk1[num][i]; - } // 16*16 - else if (size1 == 24) - { - temp = Hzk2[num][i]; - } // 24*24 - else if (size1 == 32) - { - temp = Hzk3[num][i]; - } // 32*32 - else if (size1 == 64) - { - temp = Hzk4[num][i]; - } // 64*64 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == size1) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color) -{ - uint16_t j = 0; - uint16_t i, n = 0, temp = 0, m = 0; - uint16_t x0 = 0, y0 = 0; - x += 1, y += 1, x0 = x, y0 = y; - sizey = sizey / 8 + ((sizey % 8) ? 1 : 0); - for (n = 0; n < sizey; n++) - { - for (i = 0; i < sizex; i++) - { - temp = BMP[j]; - j++; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, !Color); - else - epd_paint_drawPoint(x, y, Color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == sizex) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } - } -} diff --git a/Example/EpaperModuleTest_APM32F103/Epaper/epdfont.h b/Example/EpaperModuleTest_APM32F103/Epaper/epdfont.h deleted file mode 100644 index 3d4913b..0000000 --- a/Example/EpaperModuleTest_APM32F103/Epaper/epdfont.h +++ /dev/null @@ -1,429 +0,0 @@ -#ifndef __EPDFONT_H -#define __EPDFONT_H - -#ifdef __cplusplus -extern "C" { -#endif - -const unsigned char asc2_0806[][6] = -{ -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// sp -{0x00, 0x00, 0x00, 0x2f, 0x00, 0x00},// ! -{0x00, 0x00, 0x07, 0x00, 0x07, 0x00},// " -{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14},// # -{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12},// $ -{0x00, 0x62, 0x64, 0x08, 0x13, 0x23},// % -{0x00, 0x36, 0x49, 0x55, 0x22, 0x50},// & -{0x00, 0x00, 0x05, 0x03, 0x00, 0x00},// ' -{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00},// ( -{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00},// ) -{0x00, 0x14, 0x08, 0x3E, 0x08, 0x14},// * -{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08},// + -{0x00, 0x00, 0x00, 0xA0, 0x60, 0x00},// , -{0x00, 0x08, 0x08, 0x08, 0x08, 0x08},// - -{0x00, 0x00, 0x60, 0x60, 0x00, 0x00},// . -{0x00, 0x20, 0x10, 0x08, 0x04, 0x02},// / -{0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E},// 0 -{0x00, 0x00, 0x42, 0x7F, 0x40, 0x00},// 1 -{0x00, 0x42, 0x61, 0x51, 0x49, 0x46},// 2 -{0x00, 0x21, 0x41, 0x45, 0x4B, 0x31},// 3 -{0x00, 0x18, 0x14, 0x12, 0x7F, 0x10},// 4 -{0x00, 0x27, 0x45, 0x45, 0x45, 0x39},// 5 -{0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30},// 6 -{0x00, 0x01, 0x71, 0x09, 0x05, 0x03},// 7 -{0x00, 0x36, 0x49, 0x49, 0x49, 0x36},// 8 -{0x00, 0x06, 0x49, 0x49, 0x29, 0x1E},// 9 -{0x00, 0x00, 0x36, 0x36, 0x00, 0x00},// : -{0x00, 0x00, 0x56, 0x36, 0x00, 0x00},// ; -{0x00, 0x08, 0x14, 0x22, 0x41, 0x00},// < -{0x00, 0x14, 0x14, 0x14, 0x14, 0x14},// = -{0x00, 0x00, 0x41, 0x22, 0x14, 0x08},// > -{0x00, 0x02, 0x01, 0x51, 0x09, 0x06},// ? -{0x00, 0x32, 0x49, 0x59, 0x51, 0x3E},// @ -{0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C},// A -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x36},// B -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x22},// C -{0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C},// D -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x41},// E -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x01},// F -{0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A},// G -{0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F},// H -{0x00, 0x00, 0x41, 0x7F, 0x41, 0x00},// I -{0x00, 0x20, 0x40, 0x41, 0x3F, 0x01},// J -{0x00, 0x7F, 0x08, 0x14, 0x22, 0x41},// K -{0x00, 0x7F, 0x40, 0x40, 0x40, 0x40},// L -{0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F},// M -{0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F},// N -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E},// O -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x06},// P -{0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E},// Q -{0x00, 0x7F, 0x09, 0x19, 0x29, 0x46},// R -{0x00, 0x46, 0x49, 0x49, 0x49, 0x31},// S -{0x00, 0x01, 0x01, 0x7F, 0x01, 0x01},// T -{0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F},// U -{0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F},// V -{0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F},// W -{0x00, 0x63, 0x14, 0x08, 0x14, 0x63},// X -{0x00, 0x07, 0x08, 0x70, 0x08, 0x07},// Y -{0x00, 0x61, 0x51, 0x49, 0x45, 0x43},// Z -{0x00, 0x00, 0x7F, 0x41, 0x41, 0x00},// [ -{0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55},// 55 -{0x00, 0x00, 0x41, 0x41, 0x7F, 0x00},// ] -{0x00, 0x04, 0x02, 0x01, 0x02, 0x04},// ^ -{0x00, 0x40, 0x40, 0x40, 0x40, 0x40},// _ -{0x00, 0x00, 0x01, 0x02, 0x04, 0x00},// ' -{0x00, 0x20, 0x54, 0x54, 0x54, 0x78},// a -{0x00, 0x7F, 0x48, 0x44, 0x44, 0x38},// b -{0x00, 0x38, 0x44, 0x44, 0x44, 0x20},// c -{0x00, 0x38, 0x44, 0x44, 0x48, 0x7F},// d -{0x00, 0x38, 0x54, 0x54, 0x54, 0x18},// e -{0x00, 0x08, 0x7E, 0x09, 0x01, 0x02},// f -{0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C},// g -{0x00, 0x7F, 0x08, 0x04, 0x04, 0x78},// h -{0x00, 0x00, 0x44, 0x7D, 0x40, 0x00},// i -{0x00, 0x40, 0x80, 0x84, 0x7D, 0x00},// j -{0x00, 0x7F, 0x10, 0x28, 0x44, 0x00},// k -{0x00, 0x00, 0x41, 0x7F, 0x40, 0x00},// l -{0x00, 0x7C, 0x04, 0x18, 0x04, 0x78},// m -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x78},// n -{0x00, 0x38, 0x44, 0x44, 0x44, 0x38},// o -{0x00, 0xFC, 0x24, 0x24, 0x24, 0x18},// p -{0x00, 0x18, 0x24, 0x24, 0x18, 0xFC},// q -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x08},// r -{0x00, 0x48, 0x54, 0x54, 0x54, 0x20},// s -{0x00, 0x04, 0x3F, 0x44, 0x40, 0x20},// t -{0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C},// u -{0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C},// v -{0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C},// w -{0x00, 0x44, 0x28, 0x10, 0x28, 0x44},// x -{0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C},// y -{0x00, 0x44, 0x64, 0x54, 0x4C, 0x44},// z -{0x14, 0x14, 0x14, 0x14, 0x14, 0x14},// horiz lines -}; -//12*12 ASCII -const unsigned char asc2_1206[95][12]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x0C,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x90,0xD0,0xBC,0xD0,0xBC,0x90,0x00,0x03,0x00,0x03,0x00,0x00},/*"#",3*/ -{0x18,0x24,0xFE,0x44,0x8C,0x00,0x03,0x02,0x07,0x02,0x01,0x00},/*"$",4*/ -{0x18,0x24,0xD8,0xB0,0x4C,0x80,0x00,0x03,0x00,0x01,0x02,0x01},/*"%",5*/ -{0xC0,0x38,0xE4,0x38,0xE0,0x00,0x01,0x02,0x02,0x01,0x02,0x02},/*"&",6*/ -{0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xF8,0x04,0x02,0x00,0x00,0x00,0x01,0x02,0x04},/*"(",8*/ -{0x00,0x02,0x04,0xF8,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0x00},/*")",9*/ -{0x90,0x60,0xF8,0x60,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"*",10*/ -{0x20,0x20,0xFC,0x20,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x00,0x00,0x00,0x00},/*",",12*/ -{0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x80,0x60,0x1C,0x02,0x00,0x04,0x03,0x00,0x00,0x00,0x00},/*"/",15*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"0",16*/ -{0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"1",17*/ -{0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00},/*"2",18*/ -{0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"3",19*/ -{0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00},/*"4",20*/ -{0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"5",21*/ -{0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"6",22*/ -{0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00},/*"7",23*/ -{0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"8",24*/ -{0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"9",25*/ -{0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00},/*";",27*/ -{0x00,0x20,0x50,0x88,0x04,0x02,0x00,0x00,0x00,0x00,0x01,0x02},/*"<",28*/ -{0x90,0x90,0x90,0x90,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x02,0x04,0x88,0x50,0x20,0x00,0x02,0x01,0x00,0x00,0x00},/*">",30*/ -{0x18,0x04,0xC4,0x24,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"?",31*/ -{0xF8,0x04,0xE4,0x94,0xF8,0x00,0x01,0x02,0x02,0x02,0x02,0x00},/*"@",32*/ -{0x00,0xE0,0x9C,0xF0,0x80,0x00,0x02,0x03,0x00,0x00,0x03,0x02},/*"A",33*/ -{0x04,0xFC,0x24,0x24,0xD8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"B",34*/ -{0xF8,0x04,0x04,0x04,0x0C,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"C",35*/ -{0x04,0xFC,0x04,0x04,0xF8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"D",36*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"E",37*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"F",38*/ -{0xF0,0x08,0x04,0x44,0xCC,0x40,0x00,0x01,0x02,0x02,0x01,0x00},/*"G",39*/ -{0x04,0xFC,0x20,0x20,0xFC,0x04,0x02,0x03,0x00,0x00,0x03,0x02},/*"H",40*/ -{0x04,0x04,0xFC,0x04,0x04,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"I",41*/ -{0x00,0x04,0x04,0xFC,0x04,0x04,0x06,0x04,0x04,0x03,0x00,0x00},/*"J",42*/ -{0x04,0xFC,0x24,0xD0,0x0C,0x04,0x02,0x03,0x02,0x00,0x03,0x02},/*"K",43*/ -{0x04,0xFC,0x04,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x02,0x03},/*"L",44*/ -{0xFC,0x3C,0xC0,0x3C,0xFC,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"M",45*/ -{0x04,0xFC,0x30,0xC4,0xFC,0x04,0x02,0x03,0x02,0x00,0x03,0x00},/*"N",46*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"O",47*/ -{0x04,0xFC,0x24,0x24,0x18,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"P",48*/ -{0xF8,0x84,0x84,0x04,0xF8,0x00,0x01,0x02,0x02,0x07,0x05,0x00},/*"Q",49*/ -{0x04,0xFC,0x24,0x64,0x98,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"R",50*/ -{0x18,0x24,0x24,0x44,0x8C,0x00,0x03,0x02,0x02,0x02,0x01,0x00},/*"S",51*/ -{0x0C,0x04,0xFC,0x04,0x0C,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"T",52*/ -{0x04,0xFC,0x00,0x00,0xFC,0x04,0x00,0x01,0x02,0x02,0x01,0x00},/*"U",53*/ -{0x04,0x7C,0x80,0xE0,0x1C,0x04,0x00,0x00,0x03,0x00,0x00,0x00},/*"V",54*/ -{0x1C,0xE0,0x3C,0xE0,0x1C,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"W",55*/ -{0x04,0x9C,0x60,0x9C,0x04,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"X",56*/ -{0x04,0x1C,0xE0,0x1C,0x04,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"Y",57*/ -{0x0C,0x84,0x64,0x1C,0x04,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"Z",58*/ -{0x00,0x00,0xFE,0x02,0x02,0x00,0x00,0x00,0x07,0x04,0x04,0x00},/*"[",59*/ -{0x00,0x0E,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00},/*"\",60*/ -{0x00,0x02,0x02,0xFE,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00},/*"]",61*/ -{0x00,0x04,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08},/*"_",63*/ -{0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x40,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"a",65*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"b",66*/ -{0x00,0xC0,0x20,0x20,0x60,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"c",67*/ -{0x00,0xC0,0x20,0x24,0xFC,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"d",68*/ -{0x00,0xC0,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"e",69*/ -{0x00,0x20,0xF8,0x24,0x24,0x04,0x00,0x02,0x03,0x02,0x02,0x00},/*"f",70*/ -{0x00,0x40,0xA0,0xA0,0x60,0x20,0x00,0x07,0x0A,0x0A,0x0A,0x04},/*"g",71*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"h",72*/ -{0x00,0x20,0xE4,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x20,0xE4,0x00,0x00,0x08,0x08,0x08,0x07,0x00,0x00},/*"j",74*/ -{0x04,0xFC,0x80,0xE0,0x20,0x20,0x02,0x03,0x02,0x00,0x03,0x02},/*"k",75*/ -{0x04,0x04,0xFC,0x00,0x00,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"l",76*/ -{0xE0,0x20,0xE0,0x20,0xC0,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"m",77*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"n",78*/ -{0x00,0xC0,0x20,0x20,0xC0,0x00,0x00,0x01,0x02,0x02,0x01,0x00},/*"o",79*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x08,0x0F,0x0A,0x02,0x01,0x00},/*"p",80*/ -{0x00,0xC0,0x20,0x20,0xE0,0x00,0x00,0x01,0x02,0x0A,0x0F,0x08},/*"q",81*/ -{0x20,0xE0,0x40,0x20,0x20,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x60,0xA0,0xA0,0x20,0x00,0x00,0x02,0x02,0x02,0x03,0x00},/*"s",83*/ -{0x00,0x20,0xF8,0x20,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x00},/*"t",84*/ -{0x20,0xE0,0x00,0x20,0xE0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"u",85*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x00,0x00,0x03,0x01,0x00,0x00},/*"v",86*/ -{0x60,0x80,0xE0,0x80,0x60,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"w",87*/ -{0x20,0x60,0x80,0x60,0x20,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"x",88*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x08,0x08,0x07,0x01,0x00,0x00},/*"y",89*/ -{0x00,0x20,0xA0,0x60,0x20,0x00,0x00,0x02,0x03,0x02,0x02,0x00},/*"z",90*/ -{0x00,0x00,0x20,0xDE,0x02,0x00,0x00,0x00,0x00,0x07,0x04,0x00},/*"{",91*/ -{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00},/*"|",92*/ -{0x00,0x02,0xDE,0x20,0x00,0x00,0x00,0x04,0x07,0x00,0x00,0x00},/*"}",93*/ -{0x02,0x01,0x02,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//16*16 ASCII -const unsigned char asc2_1608[][16]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00},/*"#",3*/ -{0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00},/*"$",4*/ -{0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00},/*"%",5*/ -{0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10},/*"&",6*/ -{0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},/*")",9*/ -{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},/*"*",10*/ -{0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/*"/",15*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",16*/ -{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"1",17*/ -{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",18*/ -{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},/*"3",19*/ -{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},/*"4",20*/ -{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},/*"5",21*/ -{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"6",22*/ -{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",24*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},/*"9",25*/ -{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},/*"<",28*/ -{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"=",29*/ -{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},/*">",30*/ -{0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00},/*"?",31*/ -{0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00},/*"@",32*/ -{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",33*/ -{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},/*"B",34*/ -{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",35*/ -{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},/*"D",36*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},/*"E",37*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},/*"F",38*/ -{0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},/*"G",39*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},/*"H",40*/ -{0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},/*"J",42*/ -{0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},/*"K",43*/ -{0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},/*"L",44*/ -{0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00},/*"M",45*/ -{0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},/*"N",46*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},/*"O",47*/ -{0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},/*"P",48*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},/*"Q",49*/ -{0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},/*"R",50*/ -{0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},/*"S",51*/ -{0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"T",52*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"U",53*/ -{0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},/*"V",54*/ -{0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},/*"W",55*/ -{0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},/*"X",56*/ -{0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"Y",57*/ -{0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},/*"\",60*/ -{0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},/*"a",65*/ -{0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20},/*"d",68*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},/*"e",69*/ -{0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},/*"g",71*/ -{0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"h",72*/ -{0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},/*"j",74*/ -{0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00},/*"k",75*/ -{0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"l",76*/ -{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},/*"m",77*/ -{0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"n",78*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"o",79*/ -{0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80},/*"q",81*/ -{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},/*"r",82*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},/*"s",83*/ -{0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00},/*"t",84*/ -{0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},/*"u",85*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00},/*"v",86*/ -{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},/*"w",87*/ -{0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00},/*"x",88*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00},/*"y",89*/ -{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40},/*"{",91*/ -{0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//24*24 ASICII -const unsigned char asc2_2412[][36]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x00,0x80,0x60,0x30,0x1C,0x8C,0x60,0x30,0x1C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x86,0xE6,0x9F,0x86,0x86,0x86,0x86,0xE6,0x9F,0x86,0x00,0x00,0x01,0x1F,0x01,0x01,0x01,0x01,0x01,0x1F,0x01,0x01,0x00},/*"#",3*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0xF8,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x03,0x07,0x0C,0x18,0xFF,0x70,0xE1,0x81,0x00,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x7F,0x10,0x0F,0x07,0x00,0x00},/*"$",4*/ -{0x80,0x60,0x20,0x60,0x80,0x00,0x00,0x00,0xE0,0x20,0x00,0x00,0x0F,0x30,0x20,0x30,0x9F,0x70,0xDC,0x37,0x10,0x30,0xC0,0x00,0x00,0x00,0x10,0x0E,0x03,0x00,0x07,0x18,0x10,0x18,0x07,0x00},/*"%",5*/ -{0x00,0x00,0xC0,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x1F,0x38,0xE8,0x87,0x03,0xC4,0x3C,0x04,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x0B,0x07,0x0D,0x10,0x10,0x08,0x00},/*"&",6*/ -{0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x30,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x04,0x08,0x30,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x66,0x66,0x3C,0x18,0xFF,0x18,0x3C,0x66,0x66,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"*",10*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x0C,0x00,0x00,0x00,0x00,0x00,0x80,0x70,0x1C,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x38,0x0E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"/",15*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0E,0x07,0x01,0x00},/*"0",16*/ -{0x00,0x00,0x80,0x80,0x80,0xC0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"1",17*/ -{0x00,0x80,0x40,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x03,0x03,0x00,0x80,0x40,0x20,0x38,0x1F,0x07,0x00,0x00,0x00,0x1C,0x1A,0x19,0x18,0x18,0x18,0x18,0x18,0x1F,0x00,0x00},/*"2",18*/ -{0x00,0x80,0xC0,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00},/*"3",19*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x00,0x00,0x00,0x00,0xC0,0xB0,0x88,0x86,0x81,0x80,0xFF,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00},/*"4",20*/ -{0x00,0x00,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x3F,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x00,0x07,0x0B,0x10,0x10,0x10,0x10,0x1C,0x0F,0x03,0x00,0x00},/*"5",21*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0xFC,0xFF,0x21,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x01,0x07,0x0C,0x18,0x10,0x10,0x10,0x08,0x0F,0x03,0x00},/*"6",22*/ -{0x00,0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0x60,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x87,0xEF,0x2C,0x18,0x18,0x30,0x30,0x68,0xCF,0x83,0x00,0x00,0x07,0x0F,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"8",24*/ -{0x00,0x00,0xC0,0xC0,0x20,0x20,0x20,0x20,0xC0,0x80,0x00,0x00,0x00,0x1F,0x3F,0x60,0x40,0x40,0x40,0x20,0x10,0xFF,0xFE,0x00,0x00,0x00,0x0C,0x1C,0x10,0x10,0x10,0x08,0x0F,0x03,0x00,0x00},/*"9",25*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x00,0x00,0x00,0x10,0x28,0x44,0x82,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"<",28*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x00,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x44,0x28,0x10,0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00},/*">",30*/ -{0x00,0xC0,0x20,0x20,0x10,0x10,0x10,0x10,0x30,0xE0,0xC0,0x00,0x00,0x03,0x03,0x00,0x00,0xF0,0x10,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00},/*"?",31*/ -{0x00,0x00,0x00,0xC0,0x40,0x60,0x20,0x20,0x20,0x40,0xC0,0x00,0x00,0xFC,0xFF,0x01,0xF0,0x0E,0x03,0xC1,0xFE,0x03,0x80,0x7F,0x00,0x01,0x07,0x0E,0x08,0x11,0x11,0x10,0x11,0x09,0x04,0x02},/*"@",32*/ -{0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7C,0x43,0x40,0x47,0x7F,0xF8,0x80,0x00,0x00,0x10,0x18,0x1F,0x10,0x00,0x00,0x00,0x00,0x13,0x1F,0x1C,0x10},/*"A",33*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"B",34*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0x20,0x60,0xE0,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x08,0x04,0x03,0x00},/*"C",35*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x40,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x18,0x08,0x0E,0x07,0x01,0x00},/*"D",36*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"E",37*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x01,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"F",38*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x40,0xE0,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x40,0x40,0xC0,0xC1,0x40,0x40,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x0F,0x0F,0x00,0x00},/*"G",39*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0x20,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0xFF,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10},/*"H",40*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x60,0xE0,0x80,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"J",42*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x20,0xA0,0x60,0x20,0x20,0x00,0x00,0xFF,0xFF,0x30,0x18,0x7C,0xE3,0xC0,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x01,0x13,0x1F,0x1C,0x18,0x10},/*"K",43*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"L",44*/ -{0x20,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0x20,0x00,0xFF,0x01,0x3F,0xFE,0xC0,0xE0,0x1E,0x01,0xFF,0xFF,0x00,0x10,0x1F,0x10,0x00,0x03,0x1F,0x03,0x00,0x10,0x1F,0x1F,0x10},/*"M",45*/ -{0x20,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0x00,0x03,0x07,0x1C,0x78,0xE0,0x80,0x00,0xFF,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x00},/*"N",46*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0C,0x07,0x01,0x00},/*"O",47*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x20,0x20,0x20,0x20,0x20,0x30,0x1F,0x0F,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"P",48*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x11,0x11,0x13,0x3C,0x7C,0x67,0x21,0x00},/*"Q",49*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x30,0xF0,0xD0,0x08,0x0F,0x07,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x03,0x0F,0x1C,0x10,0x10},/*"R",50*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x40,0x40,0xE0,0x00,0x00,0x07,0x0F,0x0C,0x18,0x18,0x30,0x30,0x60,0xE0,0x81,0x00,0x00,0x1F,0x0C,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"S",51*/ -{0x80,0x60,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x60,0x80,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00},/*"T",52*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x10,0x10,0x08,0x07,0x00},/*"U",53*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x07,0x7F,0xF8,0x80,0x00,0x80,0x7C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x1C,0x07,0x00,0x00,0x00,0x00},/*"V",54*/ -{0x20,0xE0,0xE0,0x20,0x00,0xE0,0xE0,0x20,0x00,0x20,0xE0,0x20,0x00,0x07,0xFF,0xF8,0xE0,0x1F,0xFF,0xFC,0xE0,0x1F,0x00,0x00,0x00,0x00,0x03,0x1F,0x03,0x00,0x01,0x1F,0x03,0x00,0x00,0x00},/*"W",55*/ -{0x00,0x20,0x60,0xE0,0xA0,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x03,0x8F,0x7C,0xF8,0xC6,0x01,0x00,0x00,0x00,0x00,0x10,0x18,0x1E,0x13,0x00,0x01,0x17,0x1F,0x18,0x10,0x00},/*"X",56*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x01,0x07,0x3E,0xF8,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00},/*"Y",57*/ -{0x00,0x80,0x60,0x20,0x20,0x20,0x20,0xA0,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x3E,0x0F,0x03,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x00,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1C,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x70,0x80,0x00},/*"\",60*/ -{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x00,0x10,0x08,0x0C,0x04,0x0C,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x00,0x00,0x04,0x04,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0xD8,0x44,0x64,0x24,0x24,0xFC,0xF8,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x10,0x08,0x1F,0x1F,0x10,0x18},/*"a",65*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x18,0x08,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x1F,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x03,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x18,0x04,0x04,0x04,0x3C,0x38,0x00,0x00,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x08,0x06,0x00,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"d",68*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x48,0x44,0x44,0x44,0x4C,0x78,0x70,0x00,0x00,0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x08,0x04,0x00},/*"e",69*/ -{0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0xE0,0xC0,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF8,0x8C,0x04,0x04,0x8C,0xF8,0x74,0x04,0x0C,0x00,0x70,0x76,0xCF,0x8D,0x8D,0x8D,0x89,0xC8,0x78,0x70,0x00},/*"g",71*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x08,0x04,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"h",72*/ -{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"j",74*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0xC0,0xF4,0x1C,0x04,0x04,0x00,0x00,0x00,0x10,0x1F,0x1F,0x11,0x00,0x03,0x1F,0x1C,0x10,0x10,0x00},/*"k",75*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"l",76*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x00,0x10,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10},/*"m",77*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x08,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"n",78*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0x18,0x0C,0x04,0x04,0x0C,0x18,0xF0,0xE0,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x0C,0x0F,0x03,0x00},/*"o",79*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x80,0xFF,0xFF,0x88,0x90,0x10,0x10,0x1C,0x0F,0x03,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xF8,0xFC,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x90,0x88,0xFF,0xFF,0x80,0x00},/*"q",81*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x10,0x08,0x04,0x04,0x0C,0x0C,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x78,0xCC,0xC4,0x84,0x84,0x84,0x0C,0x1C,0x00,0x00,0x00,0x1E,0x18,0x10,0x10,0x10,0x11,0x19,0x0F,0x06,0x00},/*"s",83*/ -{0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x10,0x10,0x10,0x0C,0x00,0x00},/*"t",84*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"u",85*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0x00,0xC4,0x3C,0x0C,0x04,0x00,0x00,0x00,0x00,0x01,0x0F,0x1E,0x0E,0x01,0x00,0x00,0x00},/*"v",86*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x3C,0xFC,0xC4,0x00,0xE4,0x7C,0xFC,0x84,0x80,0x7C,0x04,0x00,0x00,0x07,0x1F,0x07,0x00,0x00,0x07,0x1F,0x07,0x00,0x00},/*"w",87*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x1C,0x7C,0xE4,0xC0,0x34,0x1C,0x04,0x04,0x00,0x00,0x10,0x10,0x1C,0x16,0x01,0x13,0x1F,0x1C,0x18,0x10,0x00},/*"x",88*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0xC4,0x3C,0x04,0x04,0x00,0x00,0x00,0xC0,0x80,0xC1,0x37,0x0E,0x01,0x00,0x00,0x00,0x00},/*"y",89*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x04,0x04,0xC4,0xF4,0x7C,0x1C,0x04,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x11,0x10,0x10,0x18,0x0E,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x60,0x40,0x00,0x00},/*"{",91*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x00,0x04,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x18,0x06,0x02,0x02,0x04,0x08,0x10,0x20,0x20,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -const unsigned char Hzk1[][32]={ -{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"��",0*/ -{0x40,0x40,0x40,0x5F,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x5F,0x40,0x40,0x40,0x00,0x00,0x40,0x20,0x0F,0x09,0x49,0x89,0x79,0x09,0x09,0x09,0x0F,0x20,0x40,0x00,0x00},/*"��",1*/ -{0x00,0xFE,0x02,0x42,0x4A,0xCA,0x4A,0x4A,0xCA,0x4A,0x4A,0x42,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x50,0x4C,0x43,0x40,0x40,0x4F,0x50,0x50,0x5C,0x40,0xFF,0x00,0x00},/*"԰",2*/ -{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"��",3*/ -{0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",4*/ -{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"��",5*/ -{0x00,0x10,0x10,0x10,0x10,0xD0,0x30,0xFF,0x30,0xD0,0x12,0x1C,0x10,0x10,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"��",6*/ -{0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00},/*"��",7*/ -{0x00,0xFE,0x22,0x5A,0x86,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,0xFF,0x04,0x08,0x07,0x00,0xFF,0x40,0x20,0x03,0x0C,0x14,0x22,0x41,0x40,0x00},/*"��",8*/ -{0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,0x00,0x01,0x00,0x20,0x70,0x28,0x26,0x21,0x20,0x20,0x24,0x38,0x60,0x00,0x01,0x01,0x00},/*"��",9*/ -{0x00,0x10,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x12,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00},/*"˾",10*/ -}; -const unsigned char Hzk2[][72]={ -{0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFC,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; -const unsigned char Hzk3[][128]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - - -}; - -const unsigned char Hzk4[][512]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF0,0xF0,0x70,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/Inc/apm32f10x_int.h b/Example/EpaperModuleTest_APM32F103/Inc/apm32f10x_int.h deleted file mode 100644 index f152d92..0000000 --- a/Example/EpaperModuleTest_APM32F103/Inc/apm32f10x_int.h +++ /dev/null @@ -1,65 +0,0 @@ -/*! - * @file apm32f10x_int.h - * - * @brief This file contains the headers of the interrupt handlers - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __APM32F10X_INT_H -#define __APM32F10X_INT_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "apm32f10x.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup INT_Driver INT Driver - @{ -*/ - -/** @addtogroup INT_Fuctions Fuctions - @{ -*/ - -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); - -/**@} end of group INT_Fuctions*/ -/**@} end of group INT_Driver*/ -/**@} end of group Peripherals_Library*/ - -#ifdef __cplusplus -} -#endif - -#endif /*__APM32F10X_INT_H */ diff --git a/Example/EpaperModuleTest_APM32F103/Inc/board.h b/Example/EpaperModuleTest_APM32F103/Inc/board.h deleted file mode 100644 index 2445ff3..0000000 --- a/Example/EpaperModuleTest_APM32F103/Inc/board.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __BOARD_H -#define __BOARD_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "apm32f10x.h" -#include - -#define _value(value) #value -#define printf_name(name) printf(_value(> #name)), printf("\r\n"); -#define printf_value(name, value) printf(_value(> #name)), printf(" "), printf(#value), printf(" :%d\r\n", value); - - void board_usart_init(void); - void board_led_init(void); - void board_led_on(void); - void board_led_off(void); - void board_led_toggle(void); - void board_button_init(void); - uint8_t board_button_state_get(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_APM32F103/Inc/main.h b/Example/EpaperModuleTest_APM32F103/Inc/main.h deleted file mode 100644 index 3fc3498..0000000 --- a/Example/EpaperModuleTest_APM32F103/Inc/main.h +++ /dev/null @@ -1,41 +0,0 @@ -/*! - * @file main.h - * - * @brief Main program body - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "apm32f10x.h" - - void Delay(void); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/Example/EpaperModuleTest_APM32F103/Inc/systick.h b/Example/EpaperModuleTest_APM32F103/Inc/systick.h deleted file mode 100644 index 8a09598..0000000 --- a/Example/EpaperModuleTest_APM32F103/Inc/systick.h +++ /dev/null @@ -1,38 +0,0 @@ - -#ifndef __SYS_TICK_H -#define __SYS_TICK_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include - -#define SysTick_Freq (1000U) // Hz -#define SysTick_Tick (1000U / SysTick_Freq) - - /* configure systick */ - void systick_config(void); - /* delay a time in milliseconds */ - void delay(uint32_t count); - /* delay a time in milliseconds with low power */ - void delay_lp(uint32_t count); - /* delay decrement */ - void delay_decrement(void); - /* get system tick */ - uint32_t systick_get_tick(void); - /* suspend system tick */ - void systick_DisableIRQ(void); - /* resume system tick */ - void systick_EnableIRQ(void); - - void systick_Disable(void); - void systick_Enable(void); - void systick_deinit(void); - -#ifdef __cplusplus -} -#endif - -#endif /* SYS_TICK_H */ diff --git a/Example/EpaperModuleTest_APM32F103/MDK-ARM/DebugConfig/Target_1_APM32F103CB_1.0.0.dbgconf b/Example/EpaperModuleTest_APM32F103/MDK-ARM/DebugConfig/Target_1_APM32F103CB_1.0.0.dbgconf deleted file mode 100644 index c020418..0000000 --- a/Example/EpaperModuleTest_APM32F103/MDK-ARM/DebugConfig/Target_1_APM32F103CB_1.0.0.dbgconf +++ /dev/null @@ -1,56 +0,0 @@ -// @file APM32F101_102_103_105_107.dbgconf -// -// @brief This file provides firmware functions to Debug MCU -// -// @version V1.0.0 -// -// @date 2022-01-05 -// -// @note refer to APM32F101xx APM32F102xx APM32F103xx APM32F105xx APM32F107xx Reference manual -// APM32F101xx APM32F102xx APM32F103xx APM32F105xx APM32F107xx datasheets -// -// @attention -// -// Copyright (C) 2020-2022 Geehy Semiconductor -// -// You may not use this file except in compliance with the -// GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). -// -// The program is only for reference, which is distributed in the hope -// that it will be usefull and instructional for customers to develop -// their software. Unless required by applicable law or agreed to in -// writing, the program is distributed on an "AS IS" BASIS, WITHOUT -// ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. -// See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions -// and limitations under the License. - - - -// Use Configuration Wizard in Context Menu -// Debug MCU configuration register (DBGMCU_CFG) -// Reserved bits must be kept at reset value -// DBGMCU_TMR11_STS TMR11 counter stopped when core is halted -// DBGMCU_TMR10_STS TMR10 counter stopped when core is halted -// DBGMCU_TMR9_STS TMR9 counter stopped when core is halted -// DBGMCU_TMR14_STS TMR14 counter stopped when core is halted -// DBGMCU_TMR13_STS TMR13 counter stopped when core is halted -// DBGMCU_TMR12_STS TMR12 counter stopped when core is halted -// DBGMCU_CAN2_STS Debug CAN2 stopped when core is halted -// DBGMCU_TMR7_STS TMR7 counter stopped when core is halted -// DBGMCU_TMR6_STS TMR6 counter stopped when core is halted -// DBGMCU_TMR5_STS TMR5 counter stopped when core is halted -// DBGMCU_TMR8_STS TMR8 counter stopped when core is halted -// DBGMCU_I2C2_SMBUS_TMREOUT_STS SMBUS TMReout mode stopped when core is halted -// DBGMCU_I2C1_SMBUS_TMREOUT_STS SMBUS TMReout mode stopped when core is halted -// DBGMCU_CAN1_STS Debug CAN1 stopped when Core is halted -// DBGMCU_TMR4_STS TMR4 counter stopped when core is halted -// DBGMCU_TMR3_STS TMR3 counter stopped when core is halted -// DBGMCU_TMR2_STS TMR2 counter stopped when core is halted -// DBGMCU_TMR1_STS TMR1 counter stopped when core is halted -// DBGMCU_WWDT_STS Debug window watchdog stopped when core is halted -// DBGMCU_IWDT_STS Debug independent watchdog stopped when core is halted -// DBGMCU_STANDBY_CLK_STS Debug standby mode -// DBGMCU_STOP_CLK_STS Debug stop mode -// DBGMCU_SLEEP_CLK_STS Debug sleep mode -// -DbgMCU_CFG = 0x00000007; diff --git a/Example/EpaperModuleTest_APM32F103/MDK-ARM/EpaperModuleTest_APM32F103.uvoptx b/Example/EpaperModuleTest_APM32F103/MDK-ARM/EpaperModuleTest_APM32F103.uvoptx deleted file mode 100644 index ea93896..0000000 --- a/Example/EpaperModuleTest_APM32F103/MDK-ARM/EpaperModuleTest_APM32F103.uvoptx +++ /dev/null @@ -1,721 +0,0 @@ - - - - 1.0 - -
### uVision Project, (C) Keil Software
- - - *.c - *.s*; *.src; *.a* - *.obj; *.o - *.lib - *.txt; *.h; *.inc; *.md - *.plm - *.cpp - 0 - - - - 0 - 0 - - - - Target 1 - 0x4 - ARM-ADS - - 12000000 - - 1 - 1 - 0 - 1 - 0 - - - 1 - 65535 - 0 - 0 - 0 - - - 79 - 66 - 8 - .\Listings\ - - - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - - - 1 - 0 - 1 - - 255 - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 4 - - - - - - - - - - - Segger\JL2CM3.dll - - - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - DLGUARM - d - - - 0 - JL2CM3 - -U59417201 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0APM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:APM32F103CB$Flash\APM32F10x_128.FLM) - - - 0 - UL2CM3 - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0APM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:APM32F103CB$Flash\APM32F10x_128.FLM)) - - - - - - 0 - 1 - _tick - - - 1 - 1 - SPI2 - - - 2 - 1 - SPI1 - - - - 0 - - - 0 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - 0 - 0 - 0 - - - - - - - - - - 1 - 1 - 0 - 2 - 10000000 - - - - - - App - 0 - 0 - 0 - 0 - - 1 - 1 - 1 - 0 - 0 - 0 - ..\Src\apm32f10x_int.c - apm32f10x_int.c - 0 - 0 - - - 1 - 2 - 1 - 0 - 0 - 0 - ..\Src\main.c - main.c - 0 - 0 - - - 1 - 3 - 1 - 0 - 0 - 0 - ..\Src\board.c - board.c - 0 - 0 - - - 1 - 4 - 1 - 0 - 0 - 0 - ..\Src\systick.c - systick.c - 0 - 0 - - - - - StdPeriphDriver - 0 - 0 - 0 - 0 - - 2 - 5 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_adc.c - apm32f10x_adc.c - 0 - 0 - - - 2 - 6 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_bakpr.c - apm32f10x_bakpr.c - 0 - 0 - - - 2 - 7 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_can.c - apm32f10x_can.c - 0 - 0 - - - 2 - 8 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_crc.c - apm32f10x_crc.c - 0 - 0 - - - 2 - 9 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_dac.c - apm32f10x_dac.c - 0 - 0 - - - 2 - 10 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_dbgmcu.c - apm32f10x_dbgmcu.c - 0 - 0 - - - 2 - 11 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_dma.c - apm32f10x_dma.c - 0 - 0 - - - 2 - 12 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_dmc.c - apm32f10x_dmc.c - 0 - 0 - - - 2 - 13 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_eint.c - apm32f10x_eint.c - 0 - 0 - - - 2 - 14 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_emmc.c - apm32f10x_emmc.c - 0 - 0 - - - 2 - 15 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_fmc.c - apm32f10x_fmc.c - 0 - 0 - - - 2 - 16 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_gpio.c - apm32f10x_gpio.c - 0 - 0 - - - 2 - 17 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_i2c.c - apm32f10x_i2c.c - 0 - 0 - - - 2 - 18 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_iwdt.c - apm32f10x_iwdt.c - 0 - 0 - - - 2 - 19 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_misc.c - apm32f10x_misc.c - 0 - 0 - - - 2 - 20 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_pmu.c - apm32f10x_pmu.c - 0 - 0 - - - 2 - 21 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_qspi.c - apm32f10x_qspi.c - 0 - 0 - - - 2 - 22 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_rcm.c - apm32f10x_rcm.c - 0 - 0 - - - 2 - 23 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_rtc.c - apm32f10x_rtc.c - 0 - 0 - - - 2 - 24 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_sci2c.c - apm32f10x_sci2c.c - 0 - 0 - - - 2 - 25 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_sdio.c - apm32f10x_sdio.c - 0 - 0 - - - 2 - 26 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_spi.c - apm32f10x_spi.c - 0 - 0 - - - 2 - 27 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_tmr.c - apm32f10x_tmr.c - 0 - 0 - - - 2 - 28 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_usart.c - apm32f10x_usart.c - 0 - 0 - - - 2 - 29 - 1 - 0 - 0 - 0 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_wwdt.c - apm32f10x_wwdt.c - 0 - 0 - - - - - Startup - 0 - 0 - 0 - 0 - - 3 - 30 - 2 - 0 - 0 - 0 - ..\APM32F103\Device\Geehy\APM32F10x\Source\arm\startup_apm32f10x_md.s - startup_apm32f10x_md.s - 0 - 0 - - - - - CMSIS - 0 - 0 - 0 - 0 - - 4 - 31 - 1 - 0 - 0 - 0 - ..\APM32F103\Device\Geehy\APM32F10x\Source\system_apm32f10x.c - system_apm32f10x.c - 0 - 0 - - - - - UsbCore - 0 - 0 - 0 - 0 - - 5 - 32 - 1 - 0 - 0 - 0 - ..\APM32F103\USB_Device_Lib\Core_Device\Standard\src\usbd_core.c - usbd_core.c - 0 - 0 - - - 5 - 33 - 1 - 0 - 0 - 0 - ..\APM32F103\USB_Device_Lib\Core_Device\Standard\src\usbd_init.c - usbd_init.c - 0 - 0 - - - 5 - 34 - 1 - 0 - 0 - 0 - ..\APM32F103\USB_Device_Lib\Core_Device\Standard\src\usbd_interrupt.c - usbd_interrupt.c - 0 - 0 - - - 5 - 35 - 1 - 0 - 0 - 0 - ..\APM32F103\USB_Device_Lib\Core_Device\Standard\src\usbd_stdReq.c - usbd_stdReq.c - 0 - 0 - - - - - USBDriver - 0 - 0 - 0 - 0 - - 6 - 36 - 1 - 0 - 0 - 0 - ..\APM32F103\USB_Device_Lib\Driver\src\drv_usb_device.c - drv_usb_device.c - 0 - 0 - - - - - Epaper - 0 - 0 - 0 - 0 - - 7 - 37 - 1 - 0 - 0 - 0 - ..\Epaper\epaper.c - epaper.c - 0 - 0 - - - -
diff --git a/Example/EpaperModuleTest_APM32F103/MDK-ARM/EpaperModuleTest_APM32F103.uvprojx b/Example/EpaperModuleTest_APM32F103/MDK-ARM/EpaperModuleTest_APM32F103.uvprojx deleted file mode 100644 index 4e20574..0000000 --- a/Example/EpaperModuleTest_APM32F103/MDK-ARM/EpaperModuleTest_APM32F103.uvprojx +++ /dev/null @@ -1,812 +0,0 @@ - - - - 2.1 - -
### uVision Project, (C) Keil Software
- - - - Target 1 - 0x4 - ARM-ADS - 6190000::V6.19::ARMCLANG - 1 - - - APM32F103CB - Geehy - Geehy.APM32F1xx_DFP.1.0.8 - https://www.geehy.com/uploads/tool/ - IRAM(0x20000000,0x5000) IROM(0x08000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE - - - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0APM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:APM32F103CB$Flash\APM32F10x_128.FLM)) - 0 - $$Device:APM32F103CB$Device\Device\Geehy\APM32F10x\Include\apm32f10x.h - - - - - - - - - - $$Device:APM32F103CB$SVD\APM32F103xx.svd - 0 - 0 - - - - - - - 0 - 0 - 0 - 0 - 1 - - .\Objects\ - EpaperModule - 1 - 0 - 1 - 1 - 1 - .\Listings\ - 1 - 0 - 0 - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - 0 - - - - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - SARMCM3.DLL - -REMAP - DCM.DLL - -pCM3 - SARMCM3.DLL - - TCM.DLL - -pCM3 - - - - 1 - 0 - 0 - 0 - 16 - - - - - 1 - 0 - 0 - 1 - 1 - -1 - - 1 - BIN\UL2CM3.DLL - - - - - - 0 - - - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - "Cortex-M3" - - 0 - 0 - 0 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 8 - 1 - 0 - 0 - 0 - 3 - 3 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 1 - 0x8000000 - 0x20000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8000000 - 0x20000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 7 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 3 - 0 - 0 - 1 - 1 - 0 - 3 - 3 - 1 - 1 - 0 - 0 - 0 - - - APM32F10X_MD - - ..\APM32F103\CMSIS\Include;..\APM32F103\Device\Geehy\APM32F10x\Include;..\APM32F103\APM32F10x_StdPeriphDriver\inc;..\APM32F103\USB_Device_Lib\Core_Device\Standard\inc;..\APM32F103\USB_Device_Lib\Driver\inc;..\Inc;..\Epaper - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 4 - - - - - - - - - 1 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - - - - - - - - - - - - App - - - apm32f10x_int.c - 1 - ..\Src\apm32f10x_int.c - - - main.c - 1 - ..\Src\main.c - - - board.c - 1 - ..\Src\board.c - - - systick.c - 1 - ..\Src\systick.c - - - - - StdPeriphDriver - - - apm32f10x_adc.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_adc.c - - - apm32f10x_bakpr.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_bakpr.c - - - apm32f10x_can.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_can.c - - - apm32f10x_crc.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_crc.c - - - apm32f10x_dac.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_dac.c - - - apm32f10x_dbgmcu.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_dbgmcu.c - - - apm32f10x_dma.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_dma.c - - - apm32f10x_dmc.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_dmc.c - - - apm32f10x_eint.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_eint.c - - - apm32f10x_emmc.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_emmc.c - - - apm32f10x_fmc.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_fmc.c - - - apm32f10x_gpio.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_gpio.c - - - apm32f10x_i2c.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_i2c.c - - - apm32f10x_iwdt.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_iwdt.c - - - apm32f10x_misc.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_misc.c - - - apm32f10x_pmu.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_pmu.c - - - apm32f10x_qspi.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_qspi.c - - - 2 - 0 - 0 - 0 - 0 - 0 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - - - - apm32f10x_rcm.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_rcm.c - - - apm32f10x_rtc.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_rtc.c - - - apm32f10x_sci2c.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_sci2c.c - - - apm32f10x_sdio.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_sdio.c - - - apm32f10x_spi.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_spi.c - - - apm32f10x_tmr.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_tmr.c - - - apm32f10x_usart.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_usart.c - - - apm32f10x_wwdt.c - 1 - ..\APM32F103\APM32F10x_StdPeriphDriver\src\apm32f10x_wwdt.c - - - - - Startup - - - startup_apm32f10x_md.s - 2 - ..\APM32F103\Device\Geehy\APM32F10x\Source\arm\startup_apm32f10x_md.s - - - - - CMSIS - - - system_apm32f10x.c - 1 - ..\APM32F103\Device\Geehy\APM32F10x\Source\system_apm32f10x.c - - - - - UsbCore - - - 0 - 0 - 0 - 0 - 0 - 0 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - - - - - - - - - - - - usbd_core.c - 1 - ..\APM32F103\USB_Device_Lib\Core_Device\Standard\src\usbd_core.c - - - usbd_init.c - 1 - ..\APM32F103\USB_Device_Lib\Core_Device\Standard\src\usbd_init.c - - - usbd_interrupt.c - 1 - ..\APM32F103\USB_Device_Lib\Core_Device\Standard\src\usbd_interrupt.c - - - usbd_stdReq.c - 1 - ..\APM32F103\USB_Device_Lib\Core_Device\Standard\src\usbd_stdReq.c - - - - - USBDriver - - - 0 - 0 - 0 - 0 - 0 - 0 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - - - - - - - - - - - - drv_usb_device.c - 1 - ..\APM32F103\USB_Device_Lib\Driver\src\drv_usb_device.c - - - - - Epaper - - - epaper.c - 1 - ..\Epaper\epaper.c - - - - - - - - - - - - - - - - - EpaperModuleTest_APM32F103 - 1 - - - - -
diff --git a/Example/EpaperModuleTest_APM32F103/MDK-ARM/EventRecorderStub.scvd b/Example/EpaperModuleTest_APM32F103/MDK-ARM/EventRecorderStub.scvd deleted file mode 100644 index 2956b29..0000000 --- a/Example/EpaperModuleTest_APM32F103/MDK-ARM/EventRecorderStub.scvd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/Example/EpaperModuleTest_APM32F103/MDK-ARM/JLinkSettings.ini b/Example/EpaperModuleTest_APM32F103/MDK-ARM/JLinkSettings.ini deleted file mode 100644 index 6e0cdc6..0000000 --- a/Example/EpaperModuleTest_APM32F103/MDK-ARM/JLinkSettings.ini +++ /dev/null @@ -1,40 +0,0 @@ -[BREAKPOINTS] -ForceImpTypeAny = 0 -ShowInfoWin = 1 -EnableFlashBP = 2 -BPDuringExecution = 0 -[CFI] -CFISize = 0x00 -CFIAddr = 0x00 -[CPU] -MonModeVTableAddr = 0xFFFFFFFF -MonModeDebug = 0 -MaxNumAPs = 0 -LowPowerHandlingMode = 0 -OverrideMemMap = 0 -AllowSimulation = 1 -ScriptFile="" -[FLASH] -EraseType = 0x00 -CacheExcludeSize = 0x00 -CacheExcludeAddr = 0x00 -MinNumBytesFlashDL = 0 -SkipProgOnCRCMatch = 1 -VerifyDownload = 1 -AllowCaching = 1 -EnableFlashDL = 2 -Override = 1 -Device="Cortex-M3" -[GENERAL] -WorkRAMSize = 0x00 -WorkRAMAddr = 0x00 -RAMUsageLimit = 0x00 -[SWO] -SWOLogFile="" -[MEM] -RdOverrideOrMask = 0x00 -RdOverrideAndMask = 0xFFFFFFFF -RdOverrideAddr = 0xFFFFFFFF -WrOverrideOrMask = 0x00 -WrOverrideAndMask = 0xFFFFFFFF -WrOverrideAddr = 0xFFFFFFFF diff --git a/Example/EpaperModuleTest_APM32F103/MDK-ARM/Objects/EpaperModule.axf b/Example/EpaperModuleTest_APM32F103/MDK-ARM/Objects/EpaperModule.axf deleted file mode 100644 index 9c86c7c3674a8efbc4802294394ddbda6559fa5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129552 zcmeFa34ByV7B^aT@9plJ~p2zykP4ulXk0l{_17=&n4mMEyGXc}b+ zii!?8qK@J^>gWujjHn<%8O0sk2KOE}KwN^Li4f@Tf2z7}E)9+|-}`>=eeb>RLRZzl z&Z$$UPMuorn);FBDmdp%9U3cQgbp!g)-`js0zXY-zW&TXei5@-NU*NSW=srVV4nM*+<{0Hzo2Yfv6|66~bwOHF&Q*jHcWTQ4(%p_a*DnnE!*zKe2{*Mj+`JGtvmRM^aX6E%}=HZ=nqk8RbD!cg?y+m&cX;1Er z4dWkQKfnEml!mhpT+`Ct?`+d5*k0S>$FXh`nnJ--S~ABvy)(9@G;|uCx-EDh@RNBU zuIrE*`Sx=vvV^pqJ4aS;+|{%&Qfr2D zHgTtJl--5(FgIm(**vjM*sX39oUDK~-Mb;V)*fM2*Nt*2%6@F-7Ab0B^9N} ziGbtQ^^U`uKHJb4;l~?}L-@glx>0;|toidzY*U`Cg(>|p(m6;+*0H8uEyif$zNFgC z`}DL)Q@4gA8`&lUH1bJ0xTYKafSFXcF6U&c!dDS%{xUY?i9WS~F`M^k1(T*a2l(FZ z)%}s9Bj*L=Yz;frbsL@InVB-$tYuBQmRzazFt;byrqsT$@7m#7-;Z?dU4P}o5p|=I zYA24^yf0j~HHdu#X&85T@XFLH+K(99fIhsu^N98% zUPDT+?K`5!h+EdSAE8yhvW!ow+o;uc-p|g_sRg8heiS@ned z`FtUA%l1e5@M`qX&1_XtiqYM-gV!!Y8`&z}Xa7!0m%P_$wB9ATc6gJmC08fcPT!{? zHabI6QxhbS#Og^DpR+HyAh|Q8NUF@awTv_V%IxOR@@0HbRozL0FMM>UdakKk@ z?SaY(O>7!C){rfk=)+h`EcWwZ=4fH_I~Lur&ZuatO|3Zj=Y45CmYLy4u1Fj4XhYhF zWoyk5<9?1^6s>m7H^aLd%n=iQj+Hsns(~I^W{#+yc1q=<;kldm!?5Qg%!xI(9OkQX zo#e5VBf8fvV`~oXZJJSl@JH>S&iZ!I_b{9CSW}3FztQZ~)f+b66^n&7qfKlQS(~}O zKD>6?K2sZxyu&-!tb2OAQBhQ(6~vlLVyx(wZABFY6&rW03CEgy!DsDte;XHTzV0w9 zI=J12pGMai(B-zndL>`+WF>zj)@&SJj(pDaqR6_xRdUFg0&W^rlOkH$DI zPp-XYcQEt#{{!GSv~iamW=(fKYr_L#%{v6;bx=M!#G39x{1*6k9g?$(y&8@FDwb@lYQ91|!cW=&MIX5XYLY zguXxiB71br#yr?+B-WV%{37dO&FkPZ@xF$_i`Q7tW$B@U%7Ss7Cm1V?pC(oqkC#+* zuUJ27!hRO+UO_!p>Dajf~JL%ual8yVLltdxb9 z(Rv?7dNq8()+1bFT4dce^d>8dH6LnqTVV3=nso!mu!70gtr}jmY0XB~CG)!bhx^`c zSIZ9?Q=(INzn^#VK0oY)znAh8B5RkeWlhfdHS4;MGyddMbLYW@=Uj8n!h(fgEF2%0 z@XdB#&L*~JyRYjtDNj6gytdu0NUmT}v*Po}>Ih_S>M)wt6}G8vUGCVAmp%2<()y%r zXZ1|p_EgW%w!zQkEqi4|LAg<3MJ=qW~oiU|uBQ`w_*60b#*66cc!5Y?{aFxyS&=095Ky|to@|LTD|VT;-4|^ zr5HEgx7Xo;6+J7Lt>t^lH0@@#XE@`x_*NWO$@XxYtq82jKX851!r^axU}E+4t+Jyz zJ^kD4o+;a`o-c0at2&O+quQ$6F?`QvuI*XKS(L3Z%guWr-CWVaR;=F}2!(c>{mmXC{5SGkGshHX+lG+OBH~w>MTb3^%r$x09}B ziMb+WFHd;}eYT||GvCc-W_1QLOVgN1wphA`cjYL5a|P8o6)k?p$l2uE^NvxGm-eU0 z6>R02wZ?7w3beTyJAzdj?A9=R;M=U=jTR%)u(on!kGJ30?aQ!HcS93d#hUsYv<~iw z26|LLpS^3==4`qGI)8nb^dMblnBVQ>1NBwZhBa%$?JGz6?=&}={fyhqP5uhssyixp zpY1z8fqd=ut>wJr#hn4sL%nvljtW$4bv|h+TAf$Xt|C}5;hV`xtM^Pcd(6M(iS=vy zRCK9$qlK-GHCr)0!0c&k_YYdX_JyJ!KG35R%Ga-rjQr-qjk{Wx(zt#2;I)`LE^di6 zuRgeOR|GTF@7GiQT?bo`e=hP@#`8~EFXq6DXbznDoR|YIqB-!~=NQHdmH8po7o+}U z%x6s^HTn={SIk&6|I>W2W}UC%WXHl>Hm>C#`(9>&@ehxhfLcbjY}xy=5ncQ6s4e># z#yG7yCdPxBTTVN;A6yP}IXSM2C3GBfuod~4$R959|F(}s>~*7m4wuK8GY%JF4lH~k z*6csT2mid2IW%w59x8Y!ZCv*XnjJPDj5QY=q!mrBa{=fnc}%q7Kx-h*_c-`c1z)WB zr&h^(Xam+1%qeTu$(`93tv#P;*TPd`&1bdp!7V#smpJFg8`i7~U~S#JmS(Y$twq=^ z#+nCXw)th7Q$gdO)}@9utf|{CvE~a~W6hKBySBBuvU=R=QPq{+AFr*hWKDg3sb0Mr zGxAty`Ah3(Ee#7}UAGo&?fg_1c54`QJa>q~cMrwT8+RW1-O0=;2Q}P<-^vQvZJ3u2 z6a9f!4*F}Y*v*#2n&+a<4x-$8QLg^bqzU8iOUB+erwd!Te$>fGXUEeMkS-~(ME+!? z2glRQxkl9U#%@+at3T0Z6ktb<@~2g@l{sDX6;oDk+s)G(Yv0&yr2ALsk0(2$3VL7# zAdP0XPS}4%9rhco6DM4G+~0q?v_9kQqKXqL`od#gZjqd%4ecX{|FqT_XhBx%l>>L} z9A25a*RodZ3bMvp{|e?jhSVt1cZL2at&25>X=ND_ub~w^`u1UJ|5&v9&j)Sz$%cc! z>?C>LgSO$|KFkx>9vfp-N^~O$Sbdzd;WQ|Yi2mZFLzF_DVsjenLO{38RyRdiCuR7 zyjrJkNr^LGgcsM$oip>2dFRiW4O-d6@%{Q%^eO2#V)&GS&dB-GX4TECLH^L8&ctaK z&pUtGOwy-@eGC0Q#E#75tldC6U zjMDl;ZL^~++6DX7&{Mv#_B#C$V~ln?YwFozZ>Va?JjmE8toNwW2|ZA|C zFSwz_v3Y?W{Uu;*a|)VwURPoMH8si#4(x0z)4X#uJal49Ngsa;@5qXpw?Dqe&)8lk zX?}peJE4i2TSsc2JiI4~VXbo_6|9>-YCe2cMPn7UepX(6-svNM{>X@yIMN=o^49NV z{9&vVKYi?rW?`mL`OhH#k-a==|Hm`(YIY_Sah6;=IWMK!ral$>NFI$fZ#)G1q!^=F zQ43}}J4|EZ$&Khq^rZ+X=uJTY|5#={{;|Ry^*z$rIWx?RE^OfFQ#(&&%%>AiUgt7| zWt}mrXPQIJOlBe^zgS(3YYKEQR*fY5$uu-JbkgXNLm3-hA4V{3(rE0^%0`au!*Vjy z>uuI;Sq9oKXaP;WW1DSvH=t2a!$9{goxLq%CX(vu2)k92PL3RZzy`Y_JxIcLLAXc)_P!cIQY zrASZDG&85OfLUh-7@9kB1S3@#JGBS?q24l7ZfIOH7*zMP63OIc}o zdAUPjWj!lJehxFQPQrdQ=Ya9 zQr22nSeV0d5VVSXlT|{d!;E3&VTTP4hn)p15BldJT@oJ5%8N)`-s;t>7qIdfQ^u7G zlf&lTqg4QnLJJm)lU8ioux-N%rsE$fJY2q<=~_VJNbguPE`nUH@y60GOQT4@0-A|I z;W=91Ez%sC(Sj7L#Mp}Jmg*Ihji2MRI!-)|2#1v5&>^rJNR=Yhc^WgI4Pz~a0imdr zgqlKsO$S%bqH>r=M?NkD8ij>B;ymFs4XqI>2&Ta>;g)!QOJQNp#(3H?zRW}4QFGZ2 z@Tjt6cr*Y)NoyNF#-u`yNQ-7W6B|T(A!`L4fzMQn(Cr9T5;WsR%)-z2hTj5AA?6{ZW?l%Or!kuFcsj)hjop(Oe&14 ztSEq9AmBI1iYU9y0*@x@rIr(mrne4m#FmD-o#dBnAvxeV!seuB4)LQ@%c4cHF9JT2 zIpcPbuWN8p;WMOC!6O*2S+gr34b&0s=f<4BaI%<6D*=K zYtam_lb%%KFtvyU&^i_@X+)Cz4Yg>8kunTSe(*YKnCB2v8s;=A89&0SS2t2gh$Xur z4f*J?M#rfZ`QUAI3Zb^(VU3C(`3^itDunU7dUdtK0?EnAurkRZmGR&Ck}4AVqW}PO zfNn->BL&SbtBN{;IprTpZO=|sbhqpGT2z1kt6 zWGe^f065S9l%@Z&Eszs|&P?ZwRY#(c>bU)#YRZ=Ompo7zJj|gcQUzo`=Tl+DfG}|k z8BAQh*FJTS66U9wQH~2D9(B;XKu5n43T?}e|CAC(xN$!H$JA!ff5z$>T1{fiabg8n zO`6Om7Nr4Ikf(Q&84Y!SoeH`X=5{Nv?W~}X;|ZcUQkg)G6GkhHoG1~)P7b+BI2>t; zgu^fx50Ra4G*N&nnECioQXG*rREy^Tkq$Sfgp`y=q&ml7)j57ajM}D&O&JT>j$`9K zhi%LDJI*l20e>C*f?7~gRM@!yGD^&bhDyXaj^m_JTN)ivB7li)SRn=;=(IfN7D#&3 zZfGETgwiA~HO;N1pffg%0@zQ=&+A-JK1gXOtl~)A-M$|kuWv^ zv1Dt}F0?<8)2*;eW(u+!OQQ&# z!Cf@1Td8BVG&E52$r{w&#u5}aOTiC}dd(I1 z@7xLN0j@1k;0!C^ykMAvVF-z&K-~WEjK)X=+iPNNXe`PxNj^WW6zo)<*hxR91h|E@ zAkP^F`;xd8%t1mvCV`w`!n~v}bvN}l)kgLZ^}`-yenH1XSvqk7=x9F-0QpR}N*vK& zXg@1;M1SQ7eW`Mg{|Gu@BzCVHpHe~Dp4BnIOa-8Rfy2;&jItt_9kCfH z%q18V@`OZ!fH#jvy!MU>YrPO75xqc#tjJ-VW**)wWnE8lAWh7K!GU?pmsE8H`p3LOHgb z5=gaaj*KiHR|+}5eMF)qbR~k0!?CuuGd(2MD8np?Mg&y^Ja$+DtXUx}>upD)Ob$Qy z+`&1qoWbXwJ6vXXnIbaFrXwc8qj_Y`5#g`3MM&_7Iik?9fZL%iFHf>D5g9VdgbRMKpvJY98!+16D-ZA1wXHS zZVny!#M9`qFz`Tp@0}6klWPEwZ^)xDDx9@(O~aCfkr+m;%$Btw9j%rJWe=k%HK!?x zWFUp)0h(7Rwbpig~4Fk#_8xTlYEwEES_1#^e<&+*{4o*RMbUfG5O%X@Kq?TW793XwpW{5J zEkeFbO59P$_sY(dW&NMv$;&mttm>10K2@F}E-p7xB5p z^7MsZip9`G?E3OUu6;xuau6O4~)zQ^T3tpav?T|v94uyKJ!FvyJ=f->v}j8n zcue6!*lLKnLh}4ZiNPpq!4=H%ar5ht1wn#K+F#5rG|V6*79*QdskSATP}@=0vfMD1 zx6H#Opt?)ny5WW!mTe`O3GG6&4AFM!%*v&4VWK)NiWpSaL1VSPOX@MW8XML8lUP@z zaX;FRf)J7hpQa%Qg`5PH;`JU?m&k`MX8b3|GR>Ft^B%;2h8?qAiZ9xfW1&mMMj_r` zR$`xuisJnqiNzXLxSI(jg}O`hX$zT1^y!KQY*5O`lmM;r!me7T@?QDgyl0u15$B_n4T#-BIEyn|4l4_Ra)&qB9x3uy*$Z8MH>aJF)>@=MjR?lF;01+ zQJgm8Kt+O-$l_)9q+93!RF6(>bhO;Vd^M3nOc`CvcXgdm?|%R?XBDQiw1WQ9b!y5@0BPVkRp2Kf(V_7MOhb+<7&#M$EkM z#I7?^li6iBiZ82~Hho^NdDDxh&rVHFWvR*D2V0yGb1trNhR>OH@r+a^IOmE7UW(^U zn{&>zImOfG%sMiE+RXE7=GWojm${NQbf|OkC9{Tfok4qkhirkI%9@!o=QyX&xp?M` zV&>r817tfCti)yWB4DJQhqD=b0GP^%W5;?QPvc#K89qH|XLksu@l(N~^=Eo;bjGmU z6H`t~(csxS=c93T*eGD5GX~+dgYP&baJ8}!d_z-GkQ1O}O3F|qO;2ebl}-}He2gV$ zp_m>dsf?v$@RSspv{FTV1WG|k4GHN%DM#rLGN6MhVHcr99?rni++4^{cjW_Q#N{KI znF@iB<0I+qvSq!<&vNS(l=Lirr|K>|N<0bg+NR>LTn7d@&IenPm8na+9aXhdsR&hj>gwK+_sKXl z`;3$`Q%;A79zK>AB5NE^`P3#w>3NjAZn;uouS5#;CjE-tR{2Pw-fqPLmXNvsFgz!2 z?>@&6BE|PjY&^tEO1~7*m5lW#2P3zjdIt1I6WZWF>fbgvC~hOcTIzO#fG4!seIRT| zCOy$(1|Jy+FI{QbWT3&+97+sP`ppjN!TzG<>^~Zcu8%{k(KY~m-htp(!y_PvlIa$L z*C(|N49rb!10$tvV6+WLF)&h(H86s5V1(pUV9OaIP0bMLZSz4!n|;VOnO>{6D~|hK zH{ps|iQSnZeInaqPvLMm)CFY5T-QB>`?ik@7l7=kn_bNgCOnecIQ`O4od9z7JC?m& zGeT8enekWcEX^D6n%8VIZ<5!%$!+FMX|pHINFHmq%{!^myg^qq7?rJm#Y$=J$Pvv? zKVoL`^n#q3GUd$F?nnb>c@3ED4gw)CC$Zl6h|P7`#CV{oQBD;Cb~r{UIS}*Qss&@m zqenz1udn2{Ef|h#Kru%jbKv~{t|Q%E5S@jN^iJ5>$LIx`ZFAgGq7SGmJ$={y7^P(2 zbvU}S61%glyE^?h-Gv$I-;X;C1pog-<1TTzma|h@qLt#aR=R6U(IXgv39G$YkuW8C z*Y$Qs4BV`vEuF2huo;nSlvL#34Nz~d9@*z^S9+wy2WX*>{=Ys@y_09g5xtn%wg}4Ux1F4Rv)sNAK9cR)_1H5mJWF;t>56KkB6N+x8~^<>X6-AVt;YU6-qw;a$yqZJQTAP1bb&K>RqF5bJI#P9@|x zPjZW4a!77lUlZ3+xfMwTgO9d#cr3)7czmURA?ca6^31e0&rDb6D4umv?&Yvfw%M~? zTQ?3&q20{C-LbT7kZGC~+rC`SPDbnu(P4S1w39(s$vt$Qhed35urLY@;+;>`c5?ew z_(}eeZsT;s8HslnUZ6TOe)iJY>!@8kL{$$h4gU)UtJ`nXssFcaMH6SO_;j3hsjUfs7GM=MP8C$?;lqj$z&S5N=x_+q-@$_A?zaa2BZsLtcE} z2orXc{@Y3UZ+@HqCU#aj?RJkEg|fUnjmLQSFHht9%aa8tlB_gHQF(NpZ+W|0oy7mD zl|x5%hpo=a5?dlJNF2k6?le^y2V%F=Zm z(t~c6QCkd#2f`NwaWe5gCpS?S?LV-|e^E;jFkLurmce$Vw8y<8RUCgDtcTvYg#KVK;jeLxw}vftSBdFZX1y$>a!3N-+J&-{R(f1Vtf4}0k= ze}n#8^8XY1zq8G;$|v&o^t9(c;ZH2@9WTE}d+FwgvJc5i#9n@)9}BC#B>EZnCH7?{ z`h1|sZ|h6d&s65I1e((4MwFwuQDNexJ%GZiK|hv0icb8$Mfb`hey=Y-1^M1Nkm$cP zr~X!bUi#IL|L^*T>htm+3n%LHTR00s{!{xrdJOv}+JpMhD=(2w`g{GO0XWe=?lPDu z=Xb1i@x6strngT}oQ=WHOZT=p4||2*ve|#@eFVW}8 zmR@`QyZXrf|5xe%t$jKt=-1POaXas*{!a8kFF)!3YweAKW@F!_>_<4qv#%!HJ^|+? z;7$qHNx+>GaA5*IE&&%M;2v>I^TzA=HDZi@j5u*mQ;R%mC-KnXwaLtsBj=s!1YDc2 z7oM7cCnn(XI9B7lKVH3~c|nbHcTXE&=3^p1lg9ZHeX+5~H#}IR)`D`JW0VMb+c}1! zIiMB&3T-fapfG`^beReorG+kwG4iocVM?H?p_vl;lD{{b!uV5bCj(2~B|J#Io)dsvEev}Or zjp{f{)X}znyX}C!#~q{oyOH1X82QK&HdS_4bwuDZv@i6Yn<-i&XfqWpz86%qaiGb1 z+I+?W@9X%j2aVDS&x>Q~U!v1NeOewYypdn8U8gTI8hlIrO9G3{MM=Yhr4DF{?+n4` z+{l+{4f;}JiEpug5j`#Cl{F8KMEr`ZiHfgh5_I}?zDiZ+E_^$tQq);=Bfm~trZ*T% zeM|g{1B=Wf>r_06`X}hNOYj}Dos~+rQq;NT*ZIQAj;AH;8_xyyt_gJs^!W)GRUEN~ zL_qhh;feGm3H0T0Og@kaTV~>0Go6qw%eZ=xb|W8~!M42FGfsO7*9azpXL!ckMM;az zC4r^>2H!H{I{kWZmStQpAvxo+5xB-ja{roqhoS>6!sJsbX$QGnqC2)Vt*Q85X##M{-#i$c$;*H{04I0(E7Xl5$2#E}OIYl^5 zmywXB{T*Nse%$ow^yxBvG=PC`im<67^fTYd0RBbqL`tS!YGJKrUlKf#Sv?W&r}RmNHAbZe`>jbTJ;b!CRC;K#b%9C`v#dIm4hOBv zRJzQz7OM2{be6gsAes6HD?ZbPCdUw!QF55SFQR}JybTd?8F{HX+`?JOOPo%9I^Po_ zRt=wIx*svO|4PVyh8XQF2u=Gfgtq-5LdX6JVc2d$7~%FoiZt7=Au{YVicGsBMYi3Y zBF7#;QP?h{2qnggShLSWj0?srjWp(dJWql_j#@CZ8D}Ap>+5S{WJ9B62sQf-gt{UP zw*Lai>`MB6?EXa6>~ci7k0sh4 zsIVskLi6)vuFxTHhJ6J=`+9^*vA_iTE|K{cgqkWp&Bk}0$qrkI7FRTIx&5AC{hDa5 z27T>jk(-TS36u4s2!& zDUJEDjl`!}q;Ca2wNo)=O~1_9%q5eJVo7o`x`N&qf&G%2zYEeI+uO zy$~U1spr55>9Y~siD}+{NXu~ieYDI4$nf{qSUUq@)?%>Y77p_d)L7Q70Cy63jK(qy zf2o#zw<4dY8CoZn{eZ$J0q3#oM-(0m+@59sP2nNHIV}4rg@*!XvFv9R9tNDrvNtIl z22N+$|4_IL*k;+UDm)xG$g;O7JObEa+3zV_4xG%gKT>!ku*tHc3ReL8S@zcoj{-JW z_8x^Rfi;%BSK-mXG*~kKg1+&etQj!Z$y(OWijKP&S%&~#CGremu2ZyZe^T6t+0OqO#AgA}&3v6ut-;=3J@p z#lRg{_MHmP1%`R=Q+OV5F1%IYOMqeSH40w}oXxVIR`@btnE!c&=L5H6*)J)4IWW58 zO@*%j&S2T^D|{s|y601c7XYWh`xL$k7~S=~!dGjCEzFmT9RIbN1@m32Wiga0 z6}|}=<{PN+3SgLTh{87m!+hlm-vSKtjaB#$z%burg;xT@e7{rpR$!QKy27^s!+aMi z{6}DzZ?3|(1AEQ4N}2BraQN@mY?$wEE$d3fzZ&MN2e^#LTZH-U)3O&U@&gbD^DR^O zL138g28AC2hWTz*_|L#F->nKi3=H$FQuq;InD0*tKMD-<-K+3lfMLD|6@CmD=6gip z$AMwK#})o7FwD1B;lBaHd`~O91{mhspzssGFyCf{*8;Pm=y;I@mfHB$ZQFsGz zfMx%n@J3)vKKm4Y9@xjS>8sbm-8TVaGCHJiBe2f0HLP-iz8M&kQ$XPtfH{VT!Y=}g z(Y6%lBmS*gCfsGKmX)UHufkpEqe~AF`7_}zuWQ-4iu@*u!(Ci+y#)++am}?281B+h z@oxu)ySV0h8yN25n(G~4xQlD9cY)z9uDRX=hP$}tdLJ0>;+pH9z;GAWTswf_F0Q#g z0EWA`=K2sA?&6y3BVf3TYp#!h;V!PZJ^}WQwolb)dkK#q_`lF{+L;Km3RHW)g87aE z_=?B}VLsEpQ_Jq9$h#p9=If{MH^4C82@3B4hWUmm{4FrdH&Ws6fMLF|3V#m_^G#Ct z2Vj_wp2ip6&;$(gRVlm|80MR<@Q=VS-}wsf1BUtP6y6UE^IfL!PrxwW)e8R%4D&5k zxEUDcTdr^mFwFM{g?|CYXmjWO12CtJJu=Hl$4Z$@JJ;pdSZHA%sh|7}w&VAqtocJ~ zU*Pni2*PC9Nui8Fe`7Ec=k3h@VvzQ8F9x%oQq}w;$g-XVxRA&@g0y739L#<}kzWal zUU*sISAo$BuPgi-FnZw~gOFs$sy5EQ-mE-Rzqz&%jW3vBJ&37*orEg*97%q5eum{{N*fbjL`RxRXi@6(vXv>qIw?B-lMNz6xqvF z_G>De_1p!sFB0X)Qu(*2Ucro~Nu`Vrv>wT_vR-sstVA$RA?EXV@h+esX?Px|b`<00 zDYM&fZ@N&QPWXIIl6zl>pdH~01b+#i^d@AoKI*0#uR5C~_YvG3`k*c3n5?h5xyGwz z5!t3u@v2Qk8PA0}Sol$jLR!~&)vH81OVX$hS+9AnSA9aXD|zwLP%4KSeI@@A z$>LuSl#!BGa_ZN9SkAXqF6@rigtcEgM=w+E+&!Y1EwH=)?X?+WP72!VG zXM_W|*w;X~pTwPkm$%XT-$d!Yg4X|!ZE4xGDZ+|>qNbgy6%RpC(X>-#)20K9rp57n zz@lk!ycJk9Esnnj7EO!eY;=;C|4!A!d^-eKjOf#ae5nF?Ew5TfD%5JlXMp7%(h`3q z5QO4-;Db!GI2qUKM3r&=lj(8=&1SW-%08g4C;khibsqp0*1AAqy1KX7L!Sry zDq%@yz37IzxT9G0Dyg_yE4~RVVwG7fRs0fItTJ&-=iqOXh&Y}G{JsZ211y|h(tFp<{-0C&K1ri9F=4?tJ^^@_hdu@PI}g4Hco8k^lArZb_x*X*C)AvG zv|`NavN`X_<~$E9niI!g0*mInBL-J7-g1}Ck@SK5EYTQ=*a`Ji+ip##k;(^&x_1k~ zgO*4Nb!-0yO7DpeXZRqSCmiud(rKSoTmrH%@jj{3X~06KIHtYIkJQY4LPYU>z&}eY zyk;w~FuCL(Bs7%i-d})rfOvnB9x@$Eh%lMN{e{Xhed0{I?T-U241cjSqet=;$T_JU z@Dd~j4?*G%~`tC>r6{g;Fm8i$=t;hQ^9U#PI-Np>!NS2rLwr zxOXkE==)?LulH-ft<;b>{u)^LO_HQ{h906}ro_X5MdKvyFMLk&vR>-h3|`fq)bFPk zpNm+i-%qN4Kd?|gjz0s|aP|RS(L5hUo!N#5>NhvCpv2!`o+_?_s$!%{{@#PYFVq<* z)w=*#s2j(B02VG2$DaU;t-%1vAA&s5+(8nT0gEQZ@qA!mE?J%pQID1IsuHM9zai?$ z5?)mfNWUSt107#m&H$v}5cPZswtIl|8$!K}VUOO90Mc(rB>vP0uUZL6KM&W#fb<)p zo;BfB8vyAyL_Kc8tF{5sFL^@&_91Am@1qpM_rCQr^2o-%9n3m_^j9GJKF}3~r=T+)IYTI@80f5Y6m5-}a?!KUp4podLKx{_e<7fCq?N%2|@3cju`i75R8h7a3BiIS&(iPvA~0 z^;Cs>0e57nXDj|UoOZo8u#WEOoY`mw-RSQs*gpAK)NMy;{-x0^@T^OBC)0 zY_ZhkioZX{2RT{lZHhhs^Z-k}OVI}c`&sHk3J>B2_9k%OMX;X#RU~a8Z<%gpA zPZ1#U1kwC3PkmOAhjY4{oBDzhHv%}1rM{u)lmuPS~f#G&^GD|{9(%;9>&?|{+! zZf{NnhI!oHr~>Zb@s{61{alt>q2!$nI?Oi?STwI1I2-&5PXo?kslQkF9AKFDJcXwN zXR_2fg=YX~c)X%Vs63w2sbGHc`*MLfC3^f6Xw5^r@pDk^C1rA zcL&?$z%c(iihcz!%>TZ^R|3QQA1J&480P<2;j4h#v((QNz8Vu4^i|xKu7ak_3wmtpt-{p{Vvea+))bu z2^h_F=c>Db;hp0Y{T^U==VXOf1H(JdQutnAcxSc3_W{E@&sF$-U`!qtD*OO2ytPi@ z2Z6ob`VcVY(n}Qm&%l^VuK*U_{4g*kn|eim1Q?UeB849X)>&$U!hZqQU=LOPG1xnyh+}AvV{|$)q4*oZRy@UTPVDI4H z2J9XD+kw4<|7~FJ;C~0$JNVxP_748{fW3qNePHk4|0l3_@b3Wj4*m~-y@UTlVDI4n z2-rLLKL+*={!i54ABxjs{d1lN^L@^(Z>d0J zH@m%qpU0mQOHRdhSNCfUy3D!+YJqn+7_%qe#)yQ6AmVN8t=$bcZ{bGc^OJvKY*-lYY5c zA=J;+tU-#u1JoZ3u!qP!g!&z|)DeoD4{=c6-B>xmP~TOzKr^z?8>1C}XVB3buDV@- z(HoN$y$~3^@jHdP0;4x-6h00Zy)j$iZoue`%M~sH#&e>J6z&d8&11nq2tu?P2i77m z>B>tdTuC-=;7QAkOSyF`iqL9c%*Xhip{Y`r(|5@}AZg3S7fWtX&FR%llj3E3k-{TKg1O z%m-U704-F{5+1f%0Ynp)@=A-|GZ3JGkF)4jyn#z1xb#2KN&>J6T*s@eAV400>-jwV z;R)%q#&X`k?0-RS8r?~=Snz8^I-Q(7jXL_I3ccU&0b5Z>a0J;&PcM{ci@Q^#w8A);`hLhgepc9hLhIN4|TZpoC0J!(f^zNeU zaUL?=6JW`7!CvoW&~6&xd{wqL$}RwyL*x@h**-?dENdUpZ@v8UBf5$X*$ z+BVze5C`?{SL`E!q26B; z+;PBI@3$!Wcwo$!uPS^puy=bi0T>J3HbtKZjP>3<_nBlE;-W_KVQTMb2JQAvGpzR% z{~0jHhX5UM-9)bv<~Ykko=QD!xjt8IKe}Tq0jA1f6FH zJBV&SA9}&A-+@Em3xHwQpB26k7URa`O604A`d1iMZ$+j*=YUTg z4*}NjhfFiaQNq$_hGy+fCh!!`YQ!6{TakgAPn2^;_CyH#5t$9h)Xwu|pXkLe`f~6@ zzzAgFzzzymzwqN#7gE{FbMFRWAtkS*DJgdo;B{><3b?Wj9t6D0h3y}rztYyGiqiy1B?5d;7pk_XXc3xL`|DJ%lX}annC@hpHos&#YUbuReZEt{xSNg6EDW! zwx2$4uFUKu|KPp+d-qezr_IABx@TWFHU3BFr+TSVYUa*6yRAjz%g6RAJ7v6hs~Y!4 z%?Drx?Ub6iHS^A{oHly~bQC1OpE#Am}Rrd=|#ji0i`OV{ITW{saV zd)j$5ZYj#f-Cze{7jI=xK5c|6iZTkRKzYqMmz+0#&TN-L zx#A`5i8ZrlOg_!cr#$hpHolNP<^1Uvx&+GXAw`{gL`x`>i~|2)@4+t&c2M}lQ}7#$ zwID3PqA@@$FSzbZS3_5VRpX!P_al?*>k%6In+Q$)ON6$50HLGX9dJ8XKMrAp>w_uM z^iwD@^z$e(^#v5!`ppzM`a=|j_2(!;iMK_JKcl=7(gK<`8Z{eyzrG*&Tu;Iy6q=5& z`=jc92u-~bp{-XTbo7f6Lhw?GAnGm=Yx)x+HubF{w)M|M?C3vufK&_~OJt^Zyo9DS}#g!KlQpnBpdD7_O}1`KH_t*^cY6sEsGbSG{q)pz6scA`6?z`sH`0qK*VMxl;Z?~OU<@ruvV zmjg2WL4;_{Mv4smJ&OEFN{zl(@c8iO54g<>=iphS1%cd6|Ba$UNDb8PTVS%y}Zy zCp5!VaD9o$UEyWDQ@Iy6}}F*BeU*S_nXdHxCbHbTY#NJeoTn_vu^EG)WA=<=FpQa8G&xkk4jevO{; zi{f7k@iBl3BL72(e@eILmYOi$-_dwlJ-FFq*qm;kSX&+#41DJHTk}?TY>`Fq*qs;rD>i+y@nY9~jMjRN;RDqq%Do z-l5YaVr#v^AAp|5tWCf|zYlc-yIM4N09`};OwUAfKhslQQT+cxbKe4(Lgc-oxnJnk zKNa~ah=VtLs_@sq@P;oG-U$qEpnKuMdv*cC8|aRuz`KEAo)(3_0fu=FDZB?5=J8>XQ&;$w@Y;z24Fq{;j$3?(BRBJG2;oD4%*V`z{z z9iu2o4=AW7L6#uH*EcN-r!}`7N69O7#?n7PQ99Ch#uF@KA{hB}o=LT^j0*|X#F0%O zep-NRUUdtJJ1gyeh`Wo#okil(UIDyUz?*Rz+3p9xif*7zC1LH_WimFl4GspJ=)$bi z-K6;bpZM?#ueyioS(?o!3b9K`tR#;SYW$tZcY!S0beB-#bjYnCVRv<<_6r+eKtbuP z#Qhk!1^F>a&cpM&^2viQiM&w>+epG>X-VEow=cx~ z72&l{A62ctE7<a@M_mDr zN&)zIwG{BE6fgi-2zX2i=y04njrAn~?`t$Ew4Vqz;biX%G4RZ3q{aK%8*al5QR^rw zgy#qUMGi&>op8lxpKCy)pK#=!$mUg5#O~Kc9ha**{5ttS`}=@JEq-0J^)=wRRI8~| zTRUCRmX=eDbkR8^vY)OTs-G10wG!4(3JYQTDg+D=!rJup--e|jcrSuMnB%n1@@?&( z&f}0tb!s0l=kG{=53=^5;k=FXFO>es?|h3i?OL^uO-Dn~5T!p!b~2HsNB6W(acO)a zR@cp7)CLC6Me-v`mIbdvavvqf2LFs?fGR#Uh+CtqfRfez9w;9ifZ%1q-{c$Gm(E2< zUO;lcX3k=yFQN2K?)(Yq2&H#v&RV3er}S=}1;2y5%aEa+AHKVsV)kO#$eF#DbK7}HPI#0x!zCgsL{s$4;`lBLt^hObf_4h@L0()da z(-}M-S2*zSnoQVwcbRbXp)wKHC(8uY6Hh_uwb04EurWlx5|l-nemx>(KdnN)gZObW zEpu;1S99$Q{Vjre6d@jr+l&a;DI{%zzE{v#F9=a5+S7C!5Gr;=gnY?*x!!}IeiG4e zp+IyQuCR;~xicx()Eg*5uiPVIU6s8+|GVIN1)-^bjL_D9K$xTJ#bjOlIRRFrACIs^ z4`7}KfQR7g(DpvqbI; zgs#@#=`#T}yT4(pu|HH4L_pXxn;xqbpdO&^8O&`(Eb>N619`o#zx{c40^ z{d$C`HLfJCv)qmhrr(W_Za~QTQIX|~ z+g6Lh^2P18fh}L$wqlAdU)*l0X*6~L4ts*^8nTS0~8i`!N^h2@LeRtJUUi`#9U ztX|ws+D!W5#cecaWGJPJ;>U~IDLnw9M8=ETu+Hd^<&x!#+g3ltE??ZXPE=UFxZS3{ z`{H(LFARHe73N{g8Mq2Vtr3@ADo{3l>17;dQ(m_W~3sodY;HngDezzniOI7YFrmf7UXw`{IY81 z%cQpVYRsoZen*ktNhE(mf`}0Ae2?vU4jTRrLD+QAnyG4OUKUWv%A}IYSdFQ2kIQ6oyomBcEDsZh^;M$|ATtf^uxePZQ z#qc~a+~G3ZAsIa8dxIDrlIFWZneU;a*ghh*wUX^c#kTe+w%x?`ykz@Uu|4n63MZ^E zM2y(pbhUa@FrbSoXwbdM%Ul}S;q=hN7)f|lxftGyk|gtjOrYr(G-*SF7V$8mkTUCMC$NI z5<1I=u+gfR!T9zYyx=5G=)0sasqfIE2SD>5dplCl~NBtLsg?!vcwgF zcOV~^1?URFSCkwRT!7>uN=^;lj${UkXp@6@+Mg9tvL=Wp#n~WAUKRWR$%&LK4blfx zXHs&WAAd)S1y&=-gL$-e+_be+o|m{`Lf7f$&Aly(Ht z(cqr}90D0=7PbC=u=ghLbyem5_daKxeNKjR(z$ddRKNmlnxv%^sL)KMNz*n>(upaQ zHf;l)OjBqX+S&qwas>oM6k1SGK~x5122pW9Q5=v_RIU?>0y3zm!2A8Jwbz-Fdbxx5 z|Gxj%b3S{m^?ROYP0t$kn)cp@2@K~TZpBQN0zL^PeqqIlIPaA6ii-1aepAl971!hZ zrJSFsxCiH3a^6)jh?RgrO4e5^j>5S_&OcUk<6JN2cPi)@f)B{~WX0V$uaon+K<8Q$ z!DepAiP!^>*o&XZqlPr5W3lzqNxAqe95KF(Y;F?O+>Xg?cn?-dEVN7}v-exx!{V7I zF`2PBe%Nydd&$rTLR3CXSScA((N`y2Dfg19P}#HDVginq`(*)+)=|gvmmJ z1k8n)33CNzXs*Rfnwv0F=1$BK^L5Np^Fz!s^E1qH^Lxy+c^xxjl1DLM@KJo$3gT&oRr*i^U)++2s5)zxlu zixv2?1bpBZo9|lUGa{NlV8+cGm|0)fnGD4iGvhGh<}gf_BF?6!#i`V0k>#zx9Ae&$ zIoiAj^F48MnXH7l4(p>lj)C>Dg!u~A)d}-`tZNeHS*$(GUa~?Gd~%%AL=$7BdT~aK zCl$*QnB^;xWik@P-bp*%4oJ`pVlz2Jl!zS?OP}xAhj9R%z0UW8$4GoKn7z&qc{~No zUgusf@19glf7^q0!ttQgZ@%<`AK|6|Dhs{%Ca7*8sa{n@efUp>2?=MBhi z{Fo^F?n%XT25hz0XrEL}5BJzTshA$;v3pW6eW1tgNyYSG9?wO6gM#$o9=j(M)5m)3 zo>WXXdpwWylmzKT9=F;j71PT+o=*W`d{dIsi zv+Wp9Dw6%Bv2?HZzMSAF{c}7%9*jD&wc!LXrJpU$6T$3sXG`NGFgxAZ+Hx|F;{H7XO(b{kX^ONyYTD9=j(MbG7Sq@>3e5pZENA_@{VY23z&7kDgR4 zJ(U4-jAs;4e{Zb(?_QoK70VOH(p89kkySqr15`k<>exzfs6VSdo(GWnhk5>4VAMa- z&lZad0_Dz&v(ODyBc{@h9O^TW|K*J*k+ht?o(1^p`x}J*k+!8*FRy zXYe0#jK=fblZxpFJ$6qjroZL!XOZUto`=2vo6rY0wV+gQu8#4fBE@-2to$)A&y$Mf zKLcDMHseo<^GiIM=Gk`;9IfF+kM9K28eaAIE-bhv9ybMNsK2I$?i8} z<-@%^+i~R+0Ncg>sm<I zU|K^~z0df@zo#7i@T4N@`}bJ+pa^= ze)pteuJOAk6?2W>J*k*${C_5W`HlZC;Ibgs_+JO-H~znZ^KVsu1E+#qKdD%{K0|r&q$0(cjF->$#mSS3<;MXo7Mmv( zDbBKZy3MoQlZv^Khz-6hpX~YWNyS|8xF;3UYdzmRshEDZ$L>kR zT=DoP6-y^Gr;qWZBFP^eFF(`E^Q2<=IRHIO7UM}pl0QD4-tF1$NyXg2$~~!=ORjrT zF@2GjcTXzjlIxySOkeK#?n%Y;$2@jVDyFaZ*gdJ3{=CQTNyYSC9=j(M(+_%_eNr(~ z!YIFD7{(TjfoCVyV(~2v^_Uf!_xxC1j;)x^LcmXPx|NxLMJ1M5UWAaCIs~`&rXjp8 zLhH~M$8f@-QO*@3p%3EI)T(m;C&;$DS!Hj9i0%ll@N8=;GFbqNnbVMwE?7`LQ+>=4i-xKhM{#tZgX(M zx}wNWlE4GG$n#=4U95+5F8jh*yiNx#8j1`}&bxL$-(?p|5SZK90e{>E=OSL~#(it^6b=zB@T zyOfA`#{NywSP>V@_a$;fjF-T6NZ^Q=-e2fW-#CG1CD35Wc_IHv)a9|!zar#Qh|RDoz&&JES6&RmCGvsT=d+1$8ki=LYht4>LgX_NxhAI99^{A8D3Q;{M&F9aeG>V6 z?7^&v%gSPjJP;fGG$M~m#?&sy zC&p6^73QxU*0U{t&cjQ9ljMj zD#xENUhawUr)*B2AV`<8&nd|1@zLK!{8))hkN*LY(XW7;a(Mjc2~lt}T=3JuHadqV z%#-X9@s|}mN(+KYF1BG5{6gpDc)To^*dmAD+eYMe(L=3F_Hp*9pbUKn@vJq@-~P!&g62F$GcFxnFIU#gm}jf z?C(DD&dKwaS6iPD?;?{&c|nv9nY?&IRFe3#p^NBK5q#RH!cEvN_YKyaYX{bs>o-Qr z*L`O69TcPWcVC{rFI%^(8I#aI$A~5Vq|tp~^w06KTfskR%1GJx(*0@Q!cSXo<0pf! z%;EepsZ%h?M6Or0mCvPUv3R2sHj1?bVWSwG(3=rl5KgRHVuvM0U*<&)OXM;<#kzxv zS@J_4XpX5sU%{*Ri62qXhqH{f8^5~Z5}Xs{ytm>;oHcUJugJtWNh#;86)a2zYvf#0 z@d2FY%DK7XOE^C&=k|)naDG9~_f|ZQ^FcX3Sdoqg!LxFHYJX*V+1SbaZdLeT0@v(}J;QpB04+VP5b0S#Jj3p7f9#T5^E#?Qw{Xxf(a(+J# z5xfG24&hx6F=jr4nK1WbmY7E|2b zGhvR!oMaYa&NW?_1iT6ByqI|p)`c;18P>(w15oqKbzqkMG2`YA%!K(WW{LSO=3w&# zW~KQB=4|rV+nmVfO3f8OD<_WAz zuSl4eurIrUoq+?$ekzgNfksn$%i-7#O6rYxNu{ZYm-3ihV5Y}e)yFIk+jtXZ2FeVk zBO?HJirvCJC1Ga9(-S=VDBjz`(#e4y9}Q;mdx*!gz)W_hdi*XhOCi%eJ_gLv$59?1 z3uf+rtjDv#%=Mc*t^+f-Z}GSu%*s}q#|>asvKD*X2xjtng2(RbbLmq&c3+=MulCq| zeJ*{v$L{NM>34hFOn6lI=;^`*aUFtN5HCN&^ZEK*`MCi5bm1ziuJ(BP0?+QmJL1+!51OOIEAt-9E$htH-b@La#7@c6PSg%jK}W=qt4+T z_kvk^8SC+8FzTJ?aUYn4xXp95y)YPHAbf+?;I9&e96=u|o*g|hhi9O~Q6S^<39IL}vY11uI> z1HOcLZ#;dzXJ15csPAHr-Ph;RmwW8KK9~Ne#}^}y`mXc%-@vHvGai2cjQYOd@g-o? zce}@zf>Gan9$yAVeGhv4K``q3j>ngSQQwa|z5H;=HcdSK0vPoj;qlF2t($s$3mEm)d3-Av_0944HZba&=kXW8>>@1m_)B0qj}DJ- z2eXT?)Z;tAbS5Wwd?%QN#4eBT0@Jyy^!RQt3yEtyz6VTabGpa(f>}u1=<$7EI-kuR z-w$RXajVB)2Gbdx>+u6%77}-P{1q^r(|bMsDwvmKUF`AKz_zpcWEu5=ug_6kz7;RO z%=5oZb-4oYHL>~n9Ifr)c={^O{vO_`E?IRw0;aRds_Xk;I;(5E{13piwye5-2&T1V z)%7DV)g`O0N5QnVth#;-rnP0&^%$7yl2zB^V5&=2T~C0iE?IRw38uPa)%6sZ>XKF0 z(_pGgR$V^ie_DuYpnDn;!oOjQT>xShlbJGZ^)yJ^l+A z^$qj*bug_h+xPz!b=t4bWu|hctk5tx&3%w#xC+i5!<~rV#IebR;M55sE=IFw8OC#Q zQ`!T;g!W|-p(#JiN0Z_a?OK4|rf)diL?tdY>7zZn+&zF_?{V62u$%Fg#~GdoM{C(s zRv5jLjq%VE3U8QwdBZSM-sa^;5ZzM1pT(}S(d}o_r+D^gf}_yadOQY9o7v>?STJqo zERV;5DfII^9?$dn6!Hf=o&Y9!ANF{EFon3s<4Q1v_9>4KAUq1~^BzxxPa)mz@jKvC zNcVeuAech>w#Ns7=@Nh9@xfra#1}k%CzviV=!`1CBrsj#P_P~U90I0G9OwCmg6R?u z^!&rXbct1-Kbhj7%RAijrB?W$47xtSGUJUgY%pGEdMf$#}s~@eHlibDL>uIHxPXvKuhGN)kfcB z(mOo+I2Zl-9?x~rzu)6#7yV@(w-iM`&qu#_FyXh^mrb;p@+-Z3JJDYY=o9+{8-1rq zf7Y{?xae>3c&Us24v&|)=t22Z(SHx{irA;w=vSKb zlb+q}qW`(at6lWJ@pz4k{soWM7De9^MPHt6jO)y((o=>I*+!#B9yXft*SzOL0}8pjtA5DsgG+^uD?C32oc z7d7;1Ij3Deg3X!V6PNuBAAu;R{zs@Mb3qKn5j*K<1#wbNaPWm}Uf*h2En=-78Edm) zuUFV3V~g%m=<9DL^!~&&)TR{$)LKrq}-;UDupkn{_u_R__nZkZp zVs42qX+2*c&reHW$P(}QX?b=+E{3Zl^t_E>hZlN2KZfUXF}zS5!%g!1hK=Df-t!wa zhS9_lBy2JskWfZ@FE;s^m;}be7TNS?V)7m2i9amy@mcZl1>)l)@kTVnZ5<6gCGlxl z@o5F()2#TISbK#OG%aS+pBL93tQ)K1=x94*wne zo;?1fcSPxq^YNz5$5_1&#OCBpKDR*T(jPujbVlO7Ygjy;d!1z5l{xlDIKUOIvtG>ja2r9pY z`?s*;PsS_NE?<@VDIV_r7-4)*evYWP59iP2oKwLe3DWr7pDCTt1|0`_$K7vHNaT%w}0r85^RBFXkYvc*maf79BVza{* zEEc`4Cz9?HpqNFeb&z^fJ2CrGAI990`XuHVsV`!loq7QCoYW67x2JxJxg+&FW{`Rf zGnRT2GoC72PB)qwhM7oBzzkFG#7w4YF;l5`VV0!kVwR>lFw0UWW0t4hjhRlJhnY!T ziCK}l5pz)LKFqP5_9sqlEVR8!+HN2CtL9GRMlxnHUYb5yDWb9Cwy z%rU86%(1B*nB!6xVUAB-jyWN94d(u-8!;IazbNIi{tVCq+x2c`aq zd2s3t%y*_r(bJ^VD9l4r2V)+Znt^#(>R8OlsbrXRQ2laDN9iv4mqi-vGQJuryX#{(a9` z7Ta0=W6xP0ySCzIo^yOGh*kX3vrdRr#wuR$yc1(PV->G>-bt}*V-;_B-pMSYSHww2 zsUfniSY^B-4Px{gBu|*G0w;9`GR2ZpGam&FyvN(EJ+QT zK0oO@<4=m5g7qAw9BJ}h&n{GLY_JQHqdBgXrQfLB77>6OsslK@t~ThU0Bk9r%= zOHA{CS3;N1^nh1FmmlK+uY@kI_kdSIm(Ky5z@0>|gf4IK99{`s-sZv1*rf8s9`H)& z^5Z?=mC)r~9`H)&@@@}!C3N{|9`H)&@{NEsisypZ?DEY3n+0A8U4Etqyb`+nY`|uT z@k;3Ooq!zz?~9#c%U)k0)GMLO&xd0*u2(|mw3rSCDOjt~c%D0v=MM8qAPk0GK}d;% zQ?n?b*zix}KrrG4ffY#;8?KH9*Q3Nf{2Puc`5?i%esC`Y^UTP>Jg8Z%Ku-EOg!st) zu0(pLy0p=yqqZK%(<BP>1?Y$KYQ z4i11$bye~uI#O_yg|8|2qb5A=gFi~)O|(JJ$_6cQ8}z$e(84z8W7EMqrW21FOuVVE z=DkB)N2pK=Ps}46Ai}A6glQtI%_B63upy7oE<#`M)nQ7)mV5nZ$`yp zFYqBO_5z>8(q7=l@DpdN@h{-OlyxCm$+z%8>_a-{(PkWEo_n@TGh5bdvq;t{K7cu9 zm6bU|R9<-@i&ul%q{Z9JRp5mAG-iqU5+*Dc_VMN$KvuIbcgD@1WwEn(3Kn~OR>u6) z90rb=*_a8l1e5Jl%)w?CW~KQE=4|tMOmg|4thjkfR>Hg}tHdN$U=22-WmTFgS+h-p zEPNbqZ60c}vBl<@jSynyEX=q$A2VSt#Vj!&!yIfrg;{BC!JKXG#UzAp%8HvG%1W4L zWR;lT${K85lT~SAr((@E8Cm!kZSA-@2-|Lp)&<0w;9;3sD12uNGg~+hm{}4}n0d0| z=6G2#a~jrcvkkM-ybp7*`6y6JtT}YndAi<7Ydc?{gcu4FPeaav)GoG0M z#j=lL%Z2x6AL#MXVBVK~h{v~`cb@Ala5$dx^5 z(8mG>7YWSt8J^FMT>4zVU&LNz)zu!)T;SQAWEXW^?D1kS>blJ1C1BKbrN>LbsOxHv zmw{2&Cp=yb=C$iLczisV&#K()@d;o)WO2L4CxUrB`F$Rr1m?RTU-S56Fy9IJw#RNq zF7thl-Hu%5agW`OT;>^%-Hu%5mmd2axiWolmoJ|3f`82P@8GwqcAbX0UIOU#rU`cB zs9o#gnZJ1U239F~Tl-rcZv>;hE5NAlX^%eyMt#5V_`_h-_q@kff>GZq9)AR!ufD6i`YvF{GQo}< z>e~}f|IN!^i~8OITrc*6R(&6jXTt7CyKYA=Q|htXk;`N}b~|#JAs)LOxy%TU-Hu#l zw8w5oE;HU^w21b4JJpLk>uih;5_)B1YgvjID!F+^hsmFJK=}b=W_)ah%A?ot@ zE-;K-fZ;vJ}}=>*zEEBU_N`Z)nm6KmpRvCrhe?m zWp;V&cH}be_1NvmWiIyE@5q&Xsg(M_jvUqHTk-T|p8svC%N2k}#b!s2*7k5bbCqX* zkLc*Evg&#SOlOr<*Z0A6R@Zp>AAsqsvg-OFn9eGzt{;JEZCQ0a3Z}JX)%9aAtu3pr z$H26iP+o>XKF0GvNHz_EX>5 zUS)+R!H!&c31<2_pWk1hzE1&$v0;~BN3OIa@tb(&bDr&X~`cbcX{k~idDmFM?6u;~u{RMt#qC{6{eA`-R6ZgHhjaJ$?m@`d;$* zRWR!Nv&XN2QQw;${|SuxLdICOul_R_^`$-j3mEkc^Z0cztu5R4|JCovRm|p2nVg4_ z<~|tCPQ1m~j7J+3YU)IclC>D$TZ2|PEI%%>!<3x?A;GKLsldBTdZLfwJocv#27E~D z%Z)1V1tv2YioF?M$TBwQ#=)v zd*;_3yH~eoUhvqxx;^un$L`hbIraEgx0g+1w=Th}+fmO$CjGjX=hf}$w*YlwKW)|X zU6V;s%Wd6quWrwz!M5(YSGQ+IdcJ#gduD>i?$zy?gS@SGQ*tdi*4OTKf{PP2W?|tJ}+luq=|`)$L^WXKYP-`De-Q zYJfiao#55&G|gX_%m&YPuWrw5@z}k(J#&`F?$zy?_jvrAs|^=;{99KWF7fzxU^>Su zJboTb=XkZpzX#Jfe$r$2>h{cy9=lh!XKwb`y}CVDy8hMeWqKwl!K>TJ?rSD}hnMHo z?dkgf`-}ai&F^_EAc+B8Od13Ed&8$!QD}>~r zA@R$GZ(ECN$VKe`ff8R48u}yc1`hp5Iw+~M(&eJQa~ITM!9hW=wkHc~fTvq{D$6&) z;H!zjEjx{npK68qRq<;TL;jOY2a136@VES)-^4RW56T7&;& zFUEb~)Vi^^V|Av^9J3z#0?4Ty!MM)U)-h*;KPkK|7;_o!&&qu+;Uq2wg^BTZK$vhp zMrV+?22x3E|BuT`1sz%h3G~2TBK8QRG%uA4g3nE2s{{L9s?-%Mv&44-wEP<@3k_Ca z8WnmQ#lFxb%$(Zv|@*$9<#{v9CXr8$IU3xV@33*p31CyLq0*WjiSfs~L4E>qVZD~FQ~7GmCi2orm3 z{br`{)5)HTLXDmDW5}`EIEzgY;aL%miMMA7uZXZ9j^ZMTa2NfYS>alKA(!FWLrtV%xkK8LIll%1CnoT_$;nT*mG$5+U!miDmdWs~v zdRMM@q|Mtl_wk)HK!|Ph_A|`af{1?4jx2*MZoWU}8Mo&cZDM@aGj7Q-8pZgbXWW!yOfP})IE=Egd0};O zS7=t7Pw%MmDZ4NQ`zO}lf~48IV|CK}CTIyqPYz9W(p@RV>&cW7FZ=87FH zN%L}0l{6pNu`6lb6GP&y?YMTwpuMr304|PIg`;`>bvX3=aKBaI$Ti`x9)er5JB+PK znm=xD@sT&u3!BSg%KyB1M6{itKdfMWrvR^vwakb5tL<5}R7!r2lTVtTOZ?*!|Ea`3 zfq2q9m6M)D`!P2lT~@X>G|62_Qvbv4kNLYy@lOg(Ip_xwJhuX?C4UP1EgQ*(il&emN^)qUxl zJycM$i)8)w9F>;2%2b7;T2XlwXeY0&3&$m^U{Xx9CIV~Cg|=1dx!#6m%1dS?%_HZ~ zSiZ=!Q(5Kik;olZN0il)ftGMs@=xI; zGW1?@J1ohEoA!i$ES0Pd({sZS)affV0(EK0H&Q{e{CF4UZ7>+MHjbx~e&7hH=-4gDf zG*=T%2yIAmemEZcu;j|5`Q_PF;h{ht6IdrjzDA zQJX>zR=0$ukB8-J!-^g;3jc1Nk<1iN>uUuRDR+9n8;IQ zuc{1{Un%Z@N0a7L$W!s2O;p`OBaWR%uFqaw;PE-@v7|m}E<XGh(7j&6y?94mCf1YQVQ$ZFcyYowEdqTL{6>`Nu;8)UMABqj8qZqWl+y=_yHbH-ROS<{^?bavrs_B^+B7jwi$_ z!Y0|b5!hHoM&2Ght0h-WpDQDGKO%QS%S@)EGAuKF+^9)TNE0fdK&G~a+`das54lY! zvkP*5ZB2azzk|x+2ak-}3*S}?$C)$eAx$s!k~TLtOmjp3AQ>2vG=B|Sl${Gm@1cNQ ze7W4arP1ADo=^Tt&ELoiZ@ffsbkh7KM8y}LRh8@VT@RV0z+T@*x+f;f%=;K)OdydH z)j`r}zQ#b{XsQUL4E0@*6kJSQGq2*#B+dJibgQrFZY284VJWwsm$$V@@0TX;Uhvcc zCFhsOqWWu-sQ%~3j>buhUiD8QkLqtAmh{wctU0v>B~ECeNs=MTeB0fsRktYCN4D+q z?PaF)ej78nOxXpLE@4oa@1i0P!P^LBpj%|yo8PVIhES$Ft?&&b>GJMHlD26cbcwxR zRqY*2P%{X&Vk#d4+CnnbMN~j2uQIo9dyMKrcqH#ZWfZ5X z%4GT-ASwT0()AC2WK^37evjV!57+-IgYVAypD$WZBofnRl zh^D1)gr(LG{Ra;>cZhbHHS!#7X>RpvSRFPh-T=!Qq17mm3u9D80k z?!0iqb-Tl{=buO2r`>R88FMWimwG_+J=fv=KH!e22DHO=NlK5c`>&IpvD_`g>Tsf| z*b^Q&HJmsloJ>s^oUG*z%fN3sBLT*ZQ_Pl@@BjjxO!(@M4x*nS&A(x2cWBalCe~tW z-JvuORYL|>yOZXz?Yb*oNK_`!;UlJI$?OzO_&@ngZcUp8{3N?lh4h)%p|kbEt=wy zog8V)W>iGY%O?UU@a&v3e;(Q8uXoF;Ym!5F3S-tHVj)!Te$ zUyPr@7%CrYihR7{8O1^EW(qNSpg1%&8Yf0^az6=U{6Ic#-52BQ`wHquFvboP)U*3y zya;2!l#`~ED4Cv#k0T|VGstsd6wQE9i5Xt3M>BhL(g8%veVcC-Uv1i;Yg(LIKT;grxQ8XzOb zFj~(DDYB?L8{!6>*^;|}K~pKIsaOz>o_^}7>Ox+1!>6kVW7uR7e#_9MlzS}%(62y) z0lVn=rWYkxL$G0G^gjZ$mEV(6uA^$huaop15+r8gNy7+EW9Sciz zw^`6)YO9>7JIo;6VK%!vj0&MH@8+Vf>X?VQxeVr3F>NJpnw}kzx!gJiUm8g?$kA;N;|R2KOD-01g9GF)?3Yr~I+x)S{yO84(OAYh#+aqs9E1 z+Y76K%xUm5A=$b+-0yxj5FWlN+^^LR)|hSV*rn0+?%2!WO<*=}3YB+T&)5mb^^nzYr-{WCnP(AYD;TXf@hsB5q7jc^^ zN~PBNMweADXl9U?V_hrn--I<_xAvobF?2T>u*Z3RUyQ%SD68|xVT=jX`SI1cB-q~Y zgK^k@I9F4cGIMo4Ti?|&pQaBVq}xGpuD%3gNYwG#CF*SR{R*4`Go|IV0U1y3i}9-g z7~7SsKf#b125a57C`Y^Z)mvZU`}g8*{GA-sqU99?t|Ugnc5nhhn|_1}_z5^C=US4cPx+>Y1U$YLcvy zeaQKHmBYX0;vI!iy@|ikT1tOK`zYBpP#dN;FG`tQjy^0L%QD<~;r=!m4{x{0xFbd~ z9xC$kEMCTxO?_oevztJEw21!({QVRilgph&yo+eCp7&~Q)!ruMLwUUCig@aOtUt2w zSP}0Ic%!2DzEQ-}I{zW?v_=!Qn0wAG)Qox@AM7WKygu)OW$pOfJw;1l8qwMqNzKk8 zZy%stdftoY6e{}~cs{zH7x6xy$9trR_W-={+U~pmoZ_TB3~OAJ`CE#-X^r0VuFvt( z>Lq>&k3|Kxz*whe(d&6uH&|U@F*UooFhr{hyIGcJ+3|f^?l5IqV%Sg>9(-6hq6R#a z%J%!*YPVj~YWCRfXBrErZdK!Yd}<|l&}!=KR2DIk=82pay@u6%5ijYo3p9|NT#Xd# z7j!%=>?KU)&ac(dnt>SV+X(IM+^W8LMeMXiKt`|8%hg8NV&@3|u0r{PtUk>MY0&D#~QLEh(Bwk6zK7M{CTW=l$yV@@-ZA~swx9n(f6P2*Co6b|b7$U3AS3CSSo5PHYDIB) zaxIkwA4q*P#JBon*MFnu9dI0a4GfKX z@&~9Kx?$-ZMk#qf_1|H$mV4`c@!~<&L&(@cR`KXo_lGhvIk>gDIvm24AG~eiuOXp6 zcI+#*dA--&4YE~a7u_uPO3VA3>w>d9-6=dTx>IC%--K6Mrd>|b{e^QVPx^=N(MOkP z+hyeZaPSoE{|shJVJ|&2OL7l0ketw}jo31?AAKhKqEqbR?^W!blIuSjs?jBGBQ_h& zn>HFs_f5BEeO>~gzccKk%Rirf^PN+}QBxROoBdXY6=ogGKO>0z`xA8iui++H7bmJD zGFT#;5qZgpd{81UI1#pAB~mJpvk>_$WNt23N#r+9gpE~1sKmdp{dqlOu0){oR{h77 zZ+`&T!9r}oit&GD6#5@*FzBq#+uc{t^VWuwdZWsQb2HqPNYEpgOSs#ztDlIgIllUC zRI#cG&QKa7oGNoK3;RPk=g~3`aM$)01Y_ndY4~J2iqQsv9+NhQ>h@`>Sl=+6Y)2XH zo}pPnsk5NFAS-ICt4`^pZKG`Ah)yBzC>zWKEzGV`Fyj==YJ#Z^OBrE)nN?%kJt$s1 zCT+e$U}b7^+*fWb3QXsHI3HknEE=nW%x-A>dmitjMZD+ocvlqhUdZEpposUX<;|NK z4yCa%QhKlDPqnou`Tx%QoGNGDmcRfvtZ3Q4aGPL&?S%e22d8da(Ywk`O|+p9olE0A z;gp?DMw>y=AZeZ5E~dlKz--MPc8|>1)!{+&!u?yrceIA#)NuTvVR#zL?%V)Rv>Q_j zL+7QY;^dz(E`aO(O^Zf3cDMb8G; zYvk|qxXnkMD>Vlw(={BpYF#sLURXH~)v}(|+G?h@lpGV9o-n>93`^>*wKj~O7ly5C zLWAq^d+xc1_FD0B82|Fr=8^->qbq$rI^%}G-Y3?ElQ@n=-^&d@o;26Rs!HDV_*w#( zA6A^E^{?dN_JA6T5wR)?`;qOgz5f+eB!c>VDJ1G*?cvGX{+5nS+T)SAQ;jr5ZU5=m zs$t_Q#+gPfbwJX=RUKUn%Z7WBj;@;T*}}}ybb8hNw2-C)tVaDpo?o3|HJbD0MWJJ? z=6wt+@@P8A%7M88nhvva;7{SXBbRUS(-}e~-kx#|+GKG!m%Tf^`pv$6A{H#dWqM;sEHxL40AD7XS)u>C1So!=A4OSVhvVp%%R+&>lGk35no zSxRm!=#=ICEGkI3{77^5nFRaVDu7;w;F2JZleq{(Wc|d_(LcHKQs+vcb01;p9G*Pn zDYXn36`Qo-vQvrcz%0UHe~QwF;G$e4%Z1P>{rV6V?X3j)5DK#j!~XKpU>_L?7R##S zqPVRDhNATDyeK1G%z@Ryr9>~<%ZsdnH^J6NObv*SyL1nv5pSP z?IO07d?JuSkae)-6jwo=C4`ahXA%%UvJ_GO3Ioyp^5SvzprEjKa&S&!PTg&?W^nZn z&I>vvwafCAu6?gu)m*Wl9n=1#p$DSCT}5q^RmnxNWx0^rWKHLCQOY%wi_(&HRF;9m z{_?|BBcm>hR^NbuL$p67g`CTB zewJK_^L<>dByrfE^6lNq9JS0BO*}X^ts-(ot5EDO-^U~X~XeE**g zFUv_4RAu>4V#~NO-^YH83;oM_f=fAT-z(R@JH}cP zaT=FnK(oL6I9!%HWJO6);_c6iNribyQ5uLdKPlgaq~xSX))k4GaeIB*Ot59gUZsvV z)X9@9rODFeP@Dr)ARpzBpf?!&rV^rGY{EN?9TQa&;*elVG0SIs02UtXPr=Bcx=_ib z_9RLQSK_okAAdW@>AHHaY!^vEkEuu`rs6}XnD*yG_#x;~E)#6C zPi_`4Zv;8DSMQbWf-k5DI?^pad0p#VU{NpQrG{G8B3VwVpl|e2uKe3&IjI7zd8rB; zR);JnRZu!m?Juu%4u(*au1LsFhmr4JDNyWh5++qr)=}2ESe7zKwI3z>R7XAyOTFg+JtR~gyAt6%ER}~lxhSBAv7Fxl z?^I4D?Xu)o?ajwl-1cDG-=UZ^WLc4yad}?U1ntkODhYCVs@|K+(=vIvmy53O`&cfC z1D2r6(-I%Y00XAU1Tfu(RWMG4Vy6yK=@jYb1J=Vo($CFE+{$HwvkO}@wBSN61);hn zTbZC^#UJnWgRB} zc8$jlo}5%c6Z0{sKczfnxprjdF!Dh1Fx}5*NC|OCueMWG6`6D(+oh_Y!&D^sUd}@7 z94KtnJY#$Wmi+ z47uhyhAc(q7;-If3|XgeIfh)TxClyCAD3g`us{~D| z*Z(*(s_R58OD%8U5S0;ei`I^y*xxuz!jN?^*T7*Y>EafJq4UsCsWxI+UHM`fSXXMf z2+EqwrN{;rbe;1eSzfSzRZ^}daglsX`^#_7E>(+U?OWfTyN@vP5_~A(xCF~p#YIkJ zslGdgTxv=%WVL1)IP6c!(@|o9S}tOhrA}sG#lwJOLzH!sbry65Q0z}(5}Yh2RnQek zL;)yS>bPaMaFJ3>`}3-km|~Ea>}6af!KRRjs2Q{O6wo>@qS}Pj=bV`Kmmh|d5f5tm z_23Hs6w7nd4F#jP6x79B1C&J0ORY`72ECB=SHo<*SKzJ^;IKbMt+TxXX)Z#PHJIza5hA|r?>~(CKP{N29^Z)jH#vp+ z9}4R9t_1Va=tCU1wL68k$r{DgUylk+(KtZA5MFbYAcuY2WUw{o^#cV*1Ys`pP+QuKz0`{?DiJZHG8;W^`y& zwNqSfXO&p06jYsqv8tRC)BaS!DoUIJ zQ0`n!wwpUHcLnKGNNVnq)F4uJbPva6e~L#AWhH7BmX6_BB0FCNIrUt9vAqJfauv=0BwGvlRLfej0qY#DL@;<~e6L)ecMMGXQ!#lz z%b+BKGlLOCb%AF!f5axfINF z1tZYNwGY{&V1>vcDW?myU_k_`?F&?$QjCUea}#i~?c(d_dpNlxt;wq7aygc31{W!r zjkUx%Pr*9FIWg@oKP1&2N>f%PmqK!9II0{&*6b`pE|;uDvQFW0KIGcKMNqP~b2$bM z`}1)sqNwMq!YQ5LM}ZyhobrB_b7I<`{OZ)GYET7Nk*am>Q*wFrMN&>FV(6zZBq*T) z!mu(J3W(s9%7I&f4*N+sFEUk57FT3NcMS>Xr%1gA7qXpPNvcpgg9&vg*Kn>;Q4BVO z$k2Q4wsM`qCHGo#(#NG2*U3#IvF^smt+&w4<F1dBa>cr^MSwWqj z5>IbayPE4c!dZu3olg2bm)=vRxb-%&3%GRtNHTiEn0P*|dS#ei3Z_e8>d=r^fMj&A zMh9hdeVfbs+esSr?x+X2Cb3bZa}qk=;AwJ8#>*Gm+FY8%3ZeF7l%`_7Ru9EnLWg`Z z*J`d!(X|y@*G?|)Pworyu-q3%myXJLxd#}xT^KF5d0M`$6|Ygz3P(QOyT`%vDxgwERyPqK^>-?sdJ6z(|gt_N}*%B9cPd3oJ+XLIS!smB~V-P@wg z9)Rxo`?7WHejNUEZ@81|YVa5H`U4$$*ZFo`-{;aj>O3wTR+p>~R|lxor%M+)Cap^} z9go&AXZ3NjxYWjVoLMyKUVXUgj%fGi)whO?>o;xO(7mDWsLHzD^_7A>>$-a@S8wdC zY+8S6_o`Lht14$y)f`#bxpCvVqbgVQu3x!s#fCMNCmh~=#I%*CR#%^-XKdVCd{4~2 z8n@}F6PI?^t?cXQ+rsk)C${x&T(xCo-)2Xg;-u$8Ti1PJv}eveqz(s73()a z$me!;Z|>{LJ{o@F{Kk1xcr|daV)M${uIic9GlDG}HutRAKpI!BUC|qKb=9@E*Dder zXgygpn3g@ zHQm7$oHM)nf~7sH`qt)R+`M*UZ=Yq>%z!($yJyYXNN9fd`i;HYB2okzHm=*)8?
  • v zIX&k*Jm;K|a~_d%&dfQF%sFfFqsxmArDao8lNV!6UX(R?an`lA2KCLIUF}UBO`X;y z+Xm6m*3{J4RZ~5G?pgVS+G4`tIl}yfjZIy33+h@I9_PGR0?L`wy0EUZc|j4it+7z5 zZE+r6xVW>ct*wZ#FyBYroI(LG{EoKfE*tIqx{l7K_8jhLty|J$VPjoqT~}+INDZy?+UC}E)igC8=ln&4+5*DD)~?otOKlk91Lrm$H`n3?9UWaA3+HrZ z!Q8rbm%usA?H!%c`}__USC-Hk5gMD@n;JTs7cS_kZEarA)X_C(acgVi;A+S9`G+NA7gw`ntu9?RA|^U5(94x@v6z1*GZyNi+MCYG(AOO&cJz z83P1YQ#(L_wTI6L+8gH6ztq=uwKcUjx6SRUo723oA5oRHZa`}NfYgQosf`0tn+BxL z8IXEhKWbfLL(M?M+J3~&`R)BBsmc9`NY3o%eQ`%!duM-H;-8l55!Gcz3a#-9CA4f} z@`=+1lAJye@$i9&*^O+mkS&XRVt?QDb@ST$DWGls;(oNox(3_4=CsxwM{}-U;5sA= zJD1fr1J``YFq+b3b+r75 ztQu$4I%}GpQBsYPf2- zrg2T@lEe(IBe-UA9mz%T7?MQs7?MTN7)Wz6v7S~{Pa~>thtmL~0eS-DqHLNPBs48(UDzRi84u410x8Gg{{H-j`>tI z^4`(ZsutO_AmCmv(A;539ZgO-CCWZp1e#<0^_GOLG zI<48!At7IpYJ#Trc12`+3^~+SSVC0QxIuSz=(6F^t;}gX&I-wnx)OR2A*Dk0d~4EQ z2+&i=vh~%Ds>pG>vb)^dHehI^0Ta|I+nFHxEosGB;D))3%M_k0s8%&?bF2lVor?-j zE#4}xwxf-z3K5F{7B)5t&u>sRQFB*kpc~(+?sY4+xk6jo+tb%w-_y5b#kwusRs_#o zom(~4(KklAob39|L08+xGlTUkB=>f2-m=O5DD2*G4|B;{2@W>C1(k7o(4YByZZd z*~)I(cxHER*TxMl83=T3;`O&ZE7n;8Q%|_7y1O@RUWc)MBVTz@Dk5Ke5Ku@-$3S$$ ziglgc>o;|DZ`jOqO1v$bNW1gooCV?A+}O-Xc2&>jO)925cm2{rRNy<3Z>P(Ymra@# zc5UcBv&T*hb0lTAXKT01l9O7wuA3QYzR0@nm3_q?SM{zqvu&g5Pfk*_)}9TK9&D5% zwd0+c_qt+wLr*Vp<@sk~dS-*B!?_?u>gem$bh41RV9WXR+_1W5 z4LV>QBG}ZkA=tdByL**uuWlaN8Q98aXQpcVv}@~jK0&+|)46SvjzrdVZ&<^sfcgR3 zJw=ng&S2Bp6=+fPXi^7heU9pAg(bwJBbB5&=OszVDmAxz5Hm=*YVdHu=Ih!7<3gS`^V4DWj zvU}r}zF;fQqI7Kyy0*EMkDA~#=cwhC2t9$TyURA&>bg9#*buH;wW>F0w*jrRiyX`B zJHUhG&RW*ZcTAVdXx!M>*S)H%wR=NgmupsSRnKXMd`+7-1*^6N%LwaC+UN4fUe?uM zJBVPpceJlq)w5-Du)JYQZ!fH1nRje%*tlgw-*Q6k4L0|j)m;;8tq!(TTX(IfH36@M z-xO@1##3nQJ4$MrHMd%G8+X9A;D2aEEW2nmbsuk?ac{ssae%kg|C1NbI_&%L8+ZYJ z!@7+tPcNLlWyj!!3v2xsa5Ofs0|f4fb31e^#B6W0H|yN!09t2z^L+6d>RPdytYA|l z2(H)7xq-WHZctGhw6*Hyj9C<*9c61gO{5((D?6%jwniCsbL(|yW-88 z9qkSBf{U0V+Wf_>O2Xof`slX4P$F~M7K`t55@=P9i+EeJ*<=J2rH}MC&xtrB+%arU zr4s9qXf{t)My!U`_DEVTr$OhEyj)HRauJCvpQP!^XDy37-X?8!^`fmVXsZv}$Z%uO z))chO3EGYe>_P!XZD1Dy=mu)!nn}Lx#NJNirMM_S*#u~3?-r|nrIDkV<%q~B-9^sUwx#Wn zQ>!P0-nO`zQ7CZ-OF9>}2X)Qu4NRW78f4FH%PvU|wBX$_R~{SYV9b@#C}aNoId$zp zy^K2HwmD(|n7qSdI!`^wmH?C9wmKVSeOKqUO)P=?W%i;)Zz(S~6%I4)~$;^ih^tYmUZibHpbN}SFjsnJ2rvN6{j-N`yanU`FquX-?BI{_g)|W9g2VQ z4XUWJ{cDNVFV^MO0RFW^>(`h6f3`$xv)i?FVSA&tm%7+TDxw_eDeBp}G;XVjM6!hH zuEUE-(OtVMD^rt|X{&2*?p)rrU?D5QF0P2uw1i%_fWpd1?oMGx_>OI-N^BA3A$Eoe zkamz9K|5GW>)M;Nqqj6a+CoMTV@8xVqb=1|j`fNE`(}F^hw%fEg z?czcvyZ@G>WVi4NNNy9)ky`5;+KQsHq$sxj!)xb_;Z9dpQvz8nIZh5Qt((`hxUH+X zv9+m76Z9y(5n1=bCZ?D3>)PiS!ZE>*1L&m0ct!-$(eLll>mzao#GTIg{ zW!p2NGAL%0nFDsSARjj5G2O;Oj;r+Mu}MW9$`zMJ-rV2wc&rZQd(387l5;%AZdc?& zu`m}!ZfnD(C&E6t7Urkd67mvkab7ws&L+g7!jzyU4RIMa=%SuxCtGeL#PEl~;v8$b zby9^cnqrl0lOqR9oX)DZbTTDKR;`p@<=0ro4rLg*)HC|icxVoeX0F1K8->P}CBG9Rg(4;hz2W- zJ)1R7(=^0=mAc)o;1;rK@>wo8C+6JI@G&2_wJST6%qP3iV?Rni>81^K@aP1iBu4pg zEVK~eh?^s5g{PZks{B}%t~kAW@uq?h=5Oii=2TC2VK7BhmoxgP`rhspr#E)@v8=_4 zkQUKg@Gdn76b6$cIDyWsh5Rgb?Disd7DvnQF0OXBChtJ!R-2?KSeMS@w(u&|PL{_C zsJW4Oev&)ZujuV-K)x_x#blShEL9b9A0F~p&ePl#>sB{z;gD2O=K9fH;+uOLeUUo< zd4#Bp^C*#s7TJ5ZZ0ajaQ*#lyy?e!~4vsQy**s_6iZxz2TJr8kl_=he9&4UtN(!gP3U1 z*U_RSU6#&SgzW8}vyROf$0;0p`1bFT#YE69EUu=9(t4)WVORIAu#2@T)(NfD3^B@s zb$fkjjRWu5bzv7-G|2Ev$T=e8jLu-)3b#J&$aWNwO;0W!1XrzJ(cb-TUyK?_1S_I; zd?syoi*LKp7=e)UTcLVp1)^=CHQ7e6irlEmSYS873TlpS#jI!Ns)xNLBIl~Y z=3ZMP{*O&&-AAteHI?OT6Sw}NV^G@o_}6J8cO=ZNcSZ`z9=5UTpT)#~oi_TQ z?tkkTWp=U1&NuD$*1rx_>YU~D{+odVoPqqO9IDi52V1iCK&)o4MHHs7S&A$D0-=Z$ zNwLnmppiv^uC}?&t*y;%9oBD_s`IT1EKAV&)&fEs-*T9%Roh}}>q5>8i(agZ$^yqshO>9FXOZw~DRi$l7@}rX1rb%E(W znjhf&*MD>R@2jI*01%2M3${(!(;Bw=Icna_KF7}^%D|r!}7VPNm>)5!uPtzvOvDh$dZiD$DC6M2o|DWJKWHZu9> z;E;wD>)fhcUU_g~cocc}P_xaPs8D;>qY!cf9*3##Y4j&-R;;t9uY4|Dbh!zzr$-U@ zXDFJyS+FXH9v|}l8j5Dgo-S_$W@km7W@SBbpqVnWn7ngI_5hRoMl;!HMkh-47RM7Q zer74Ux@rN9hr8kA*lX4!7rV^5f>Pdmbl0cIE@(%x_po`(gh_Dq?*ykJhnVC$I7;D5elP zl|*5X76p~loC}~UQmOS>KytqGNQ7XeI1J>5$OXt{((_!#Jc^!U^8Q@jJd@|dlr0bS zh*&<(J{=bMK0Hz<%li4Lh)|S@2t^@BDEl;(^XF2*K_~~=XjQaXT!37#o>v>ma`q`N z2_8kIjk0Skw-`rdp5;dsEsI?;-9e`=YP?NI7P=yipjw%ote~^(1l%1BQeJF-J(deNe*=#vlmB&o@?YmC zc?L{R3;yf;Wbii6PZmta@@^!qw{Wv8HFh_?q%*T^eJRhh;MOpFTXthNU#z*aw`aW- zb;B?kr$y03z(W_R??9a>T}r;FhfdVr-<+sNQK%j|ruq{l$xnJB=)&QKYncwYd|QH@ zkl5RHbiy!~EAD=Ieso5*5W1U)3z6FpH;X(zcb-B5r-%y)?tbzAw09;zavkLze=7qP zV1s32%w@8;#<9WDXlHg;S{W3)m#vj{rL|UvP1Zcm&dzEF&Be^Dc7+{c#~fCLD}^AC zDr{_rKnhG8f@7OA1cx#?3Z;mXKshNw4vvuGauLE2^8a`D*YA5hvyrUG6a+n$cKY}A z*ZunSd#|t8{j~{VFF*<0H7H4v&MTYva>Z0qv<-2l1k<6wp4aQxQ{mF=H+K7lTxDAq z9~Z=bvhNJj#mfhBAM?8f>hSV`{+G!C9bP_AYTAIlB+hv+HOq~~F_Xg<4A#b= zGG-Mk?=@apc8)OwD%BVY*d7NC2X?~%X-?yBmw4Ln91u% zua!@TbN|jZAay-zcu*O?YuHk|F}}9?PL$6VGXcVzLGWTcYsw^r88|S@_8_+KX>4@vvQL zsYN55B22_Hwvf0M!v%EKdUU|?POU3DMb1zVbJj(r>>W9YvU=ns%Jz|yC<{nVqU<0! ziL!>|B+3wzlPG&kPNK{*If=5)>MbYoDcLu)YIaW(!J6xuyL zH9Q?-Xwsc4WUpd6E+&*!N!Y8n*H|fONm|WahmFgqIZ0Ygt_>^DCWa?nYK^+{p{1iP zVjm028_C5~9En`TkO*~n$#NY&$AYYzM_zfPV-Bwm5p=z}M4k@sly%D7ZMK<+aE`r- zS)G^Mj$9lF@=D+XO^@}Zo`rmpczn<9t0s1C*C9IP zok4bwyBFM^#0T+m9VEZXSps=y5FeXAiw)xCK8RWEm}DxmFub)h`%_m5#Q5uWE)vui zPx1CW!&k{?aup}NQeuC0u8oX$4v+2AF(pDwsOA^^%W3;Nm_>iu{?0F~ z{T)A;G`^3+wUPb7%Ymi?I)+&0%Vh(UTf;c08POrR8XxlAt*95?`hT60ak3K(MSAWfbEP zNgfNCw{!7@2>PRObkK0|FazWqxMVu}%wH?c8@JcBh(NR~L|qu%#NR>lca!X{y^JCM2FKxyT@qQXwbefL^D{pI~dtAKh#C>Xi7(Rwb0*W z&(jT)up_3&Rcvu<)^ivqL)ftugLa_Ima=Xb&R85Vt2SI%j*DRK18scB)PS_lH0_Fd zk^P8G?Ld^MVe*CYhb{RXl1|I)Y^-1=z!~w6_IM#WVXx3zdrX8!OE%9hj&ekIk!1insnwQ(&KGAu!kLPZeY3}>bjgk8u{g)k2}jD?`0JP=JJ zRsA5=r^3eP&V3WGb3p?j$2Upxe=s`|7#opXam71J7g)-RO=3{hO*hMRV?~SEYE#z` z5k|489v>*RZK))JqMb@+4ey!1aRnBqN-zco<8wun)HEg~+O9Uk3B1UCA5jvg6li#y zFVSdSRHRj^Xvq|jr?7CJt78`2<6pF=pF>mq{hW@Y`YW-6?B><~S+=8K6KJMAV$!=J zZx6suiM%GU0gzs#s0=owJxanI$pR zO?nK7g`BZeVp@=~F|S}PLoZ-Zs>mKlWW6dd)oPls3BvlU0@!9ws9irm)5KOVx72Re zYdW-(mUFkKIBIdy&G`V|F54i(SjCn)N?NF?T9mubANn6x07k#pi*!LmGZ? z^q3vDlU?+B%r2(fX;1t!a3s6#^+YcMbH_gM?}LN8_X%?oTJGd0%*||*UHy8Z5iocD z6aQ^+a2G(~op5lcM`3Q4o9wdLV|JkB&YI%SO_-BiHhZG$z}#6={O91{?s3A4aBwF% z;Tjyt?sGlZpgoGX1D*J@3cm*q?(!=9emJ-TtneSg!QEhm?}LLotO|b| z4(_@t{AoD2qpI*{>5tu0g+B)ecT^RA7!K}EEBr+`xRb2#m*C*8vcmrc$Ga7O1AI*J zcfj09R`kCQ2Y0U({%<(Av#c=hKX(xn=KcAYV%{HYY@PDw&W55-f9`T9%=c$fG2fp# z#q_TzrvIB1)BmVq`afY^I{vka>7Q53@?a=nh0q&+F+`{HI{vfARkunD4XjBVfM2!e0ZkJP`gKSPnTKp9k^h`NkA8 z|F$W{Eiv!6=${RigYjJ$@Wy~&8t|@wo4IWVC30a zzR+v%{J#q<2e0q$fIk`Vv4Fo6@V5e9gA=p;}z@gl5J*!om7S_@i(;6mfqyaJo59a;^%3<$|62q7xcd!SD}wKgU`>BR-H{eeN{FebUJ=Y_D zGDs!U^ZCI4c>K*k|7lP5muu?dXM@=ueVU6u3%(P~YMkdA1^=${pH<<{S@Z3md_Ukd ze9_!N|FZ&qe!wU@{XzYFz%L1Sd%)KQyclpZ;2Q&eL%?qj_>O=-5b*s0KN#?_fFB9? zs{#Kw;B%kqvnOKyToQ0T;NgIG1iUxkIN*A~w*>r-fbR_Wj{^Q=z<(F;w*&rRz)w0W zef{SLd`ZALFxyHzm|s^|e^VZ=ThkM5xBlj>AYTLiF{%vep9_uyE`xhq`9%L4z)w_s zG~jm!{09Ml1bns%|Ji`Q0A2@wCg>uZ?~f69tV<@3R7aVZfIMJQeWE1Fi;)zGv!uZw>hO0)8OihXVflfWH#( z4+DP6)6?gFPQWh;_$2{P2V4yJhJZ2FkhI~3mp zz8m~3=l@&aFM#_T-w8e&{afLC!4qJPqcXlf0slG}$u|6X@SDNsI{qs74zOI`cfs#h z{1hnO3ugP0@jV;-09dZ~V(>?m{~-8N;D?<472tQFzj&kLDe#5p@5=dJ2EIgb9h_5q zBlyK&Ip3SXTfx09zT3gqf#v!>46cGDzdi##0)B?m{|E59l>axt4}j%<{s8=Eil2I3 z6g>>y=E6S@d@;t4SC zH-m?q|CtE*09c;a3&Ciku3dEgec%n~|FVwd^D+wFg8uA1j;{rO4J`Rt1Lx3xmiu)h zctY_JZ~-jo`E77j@m=6w1NXZ4?*`ui?sI%U_+hZb|7q}lDE?dU6EXfL`S~y47l7HG zX8OMi9tTVQ_neRXQT|T{zY{FyKOg*Y@KN+P8U8uob!Z<;dR_>g0zcEmKj;`}^oIl9 z0j@&-BIkdNW6>`K+yKALwa0n>TfldL<^6d(_&v)1Zt(f&|32Tv{~<8Pk1s_4wtqeb zzW%&uZ5ssu`7_|Zxgc8mEsP_OkAWY&Fj_l{dYt@4@THeUYw^v(@IQlpl(XgaIq?5a z@bmHspT&%bZ2xQBnl;h+V4TYI$H*6h@vQaYHXyz;qK)8Q?|()#2*$nYy%oB9Lw5cHzW92boK9w5!=Q#u05|(shaP}9$p~1}fM>#U zg@cV|N>VKFn|-2z&3{uoUkG^aK()A(R;d;OP6xrXW`5F6&QYpX(;5o_J1ZJVh;lw1 zpu9YvjWSjE!Myzg9_q#sNe zT1n+Zs~BEc3wB1+DvffA+tu_9H1lzw;S-fZ3X_~$wmFr}&WZ_>{#m=f@a$Ek(&Aw+ zUYWJ4l4kLO%wpC}v%S=alX$B0S!_DJhg;9s`J7oZHG)rIsha2^A*Dv4QDPc>iu!df zrLuEK`=qjVNZ*4Y*unI%4Z#qm0`*D`#p;#ZqNC37*7!iV)QbdCw-lsqKIT2CaQ&$g zq(5~fAQcNp#RBTKZ+W+eN zuC);h8JdT2d$Ys4r?R8<3N0CBaP+w&LMZ~@Fl?)hXLTdyfVFV5%UL=)m9WsF)?V0X ze~exn_gTv15DL`NXx(uUn@vZt2B@~od^7jcksPbMvDIFhYps4Uxvp24-;9-?aa<|4 zksi6~RkCBCYYYf9w3^58Y91r2d5o>*ab;%?+uP7;qx!G%PGn6RK(dGCnOfKczS|A- zehAcgb6qxOH!d_%kIX^?n*#AXU3{ubl~sIju2p;%$}8|G&ZC6JK2=C3pUG~?U1DWZ}SY}6NBr}tl9?uM4KAF$&ogB#Roy_Ml*IYiC z%VlODnSo>ml8N#0as1t%c{Tp;of)6mw<+`LnLRs3cZ^xw4BR%E*)@Z$l*co>cTG=Z z#z%&SGE)NWr^M?#gR}Nr!eZkx1sfU-EKc zlA+V*#!FZ>CDhL3;GQ%T}MMoY*_B}q@ElEhP~)RoSX zawq4PXCZw;_khGYrCzfR^KAaq$#que+V$lmeKoI>B%zUd83?4Tv)&>re8Iu zTC8w^xD8fpH0%^#i{|Z$<7PWvDAx)Vw9%2%36@sy@|mUbe%fHNGF4^@>LsTsnOk@& zGQB?5EbQ#&VOD>3^DqldyLp&(r`uP?qy5PUT3lf?G7OCd)5IPRZ<=SZNLpVKW>R{p7bV5W+v zo=PK0#bG3=TiI=Cww$5s0&VRnE05DMyZ%_ql10oSl~wV=XjYdBbLDucj5;3guOjR& z0fDN1(}Y(&kJ{C(+?V(|<_eoN32texaa&8FXbi4mwc1b*%TabGgmm2f&GEIrZrZpOHTt9?~=5t(;9G}3- z53AU1b;;@rO4KqHy@Weixy=+7TXEA^W^q6(8+6VWl^o#Z`kn(Z=7 zb1*EL2dD?V^QC=z8l-jUZ-MkEg6Z#YsO_z&k#*}o7kYc?In>xIVMtvFA zS;rkvR5O4)RryDf3`}wxl19B{)R!7~M(mlaGnG5bFtVNGiF&4ZT8p&(>d8EBc4d-j zy0|eiH2lrhFuL~{$2r?PLr*l0^VSWQ>XAYv>7GKzK~RpFPDQGqi%pjzE%F@-(^D?A ziWof_>f00affm2#`SH9I?rA3W2o*>N*&g?(z5&T^yz3&tklst(=HHl#44X42o9vhSCapGT5WKhSQ%^3?~(c zt%MUyuDiTyyxcmm>yrS*$9jf^#~9$yLW55h9wa2p*yZZQOTnycU5;;fjcR{>A=kHp zC$ycd!&np6#MRv(f87t**Oem2=r!9hdM)7?eTp$gubE@?DYj$uDG|o#)0_@s#^|+z z8Kc(%j?rs2WAs|Uk?a(6M7`+y7j9xRx=u?c*a?N(MJSE|1c}jrMa?Knq*K9}2 zwZsgN+dGpQ$gZPGF$39k6n!UA>=i48+5uheMO_Eg5&KC*UT9Ty)F@JiAwj`M<5u`x zwH#bOoZB+kw;w8DaX4RUzz!CQvAQekx+ZtNw|Bz?iYJ_Lb{hKxw9;P@R#xJ%E2n33 z*}m+Md}dhXYr{mXSXr7cAtflK=Svs?C~dtcj%BQ?7xp5Cdvh0gf7}IQv1!*7j3w?z zr*{~RthwO0FgMpM9TLJ;>eZ3}OI~rKCh~HON{G0L8&$&4wT+9zF+fDOZ ztD}LEE!y`S;zj2X;q!OIIRiL2RbcIqBG+j~9q-gg1O9ioTN$tFILQ}5Apgc83O1bTZ$u|AD~ z-N7{R$l|}a$&cEfQ~WfynqT^;CsaXZ!! zsyWbd-Z;>k+uakPIqVP7dj%w%OCZNXpXiDDo{Kr!5PTi~c|VvqI4plqFB&t z!-D-Pwu>DV6fD<_W&W`ecN6-V@FLv zoguH<-)^Ad6~tbm07;5 zZL-E_BiatBYve>br)_Jr^2DO>Hs_%Ivw6_o|8VgM#c#|j?IO43bO}7ucf8nPjkkJC z6kqR@<3cMR{;76p)?39jL-y6q`Rh3pkE`2MTN5Zqf5wQ;?4Nv$=n#0O@iAK}W-7bP z>>sR2E)I;F*?(q#W5D742c8knq$isNwU3Ir&Ihak)@?~OTlUJ7p_MNc)NT^bSdh_} zp+Ccvmd_tZn)zt@V5h_`IlTXi!zVqMU*j*^ve#@iv@&|o*wcPocf?4{%M;|gn13c8dPjx*pJa9i!GZAG!I_8l?`#|_!n z(l`&Xh5Ksrjd7xtxI(N+3R&&#?MBT-C{wI4^7rkeaNaxF1LQHmnxeX7GdM0-Ghwd@ z-)fDV>gtda%1xcxZz)jn#otW8LBX7aY0-W5W7TKQ4GB6@2jKwgz{!#xRt7OYVIY@W@;hd6M zv}Ms@k@L&8XvuoYqnA-2>LwjHy#JcRhxaeQXZ_*E<>6ay>E9Ti418MRa}07l<`z*m z^FUkB;r(+CCqH<2|Ej~k?3@TIY(lC_5AWR>4vwxaoG>Rke9qj7Q)WbqXUwXO7R?wx zYhoC~9CPH{>hTli%vQqOIpb%XF@8qwgc;Mq!W%z+>XhnvGiO!Lo*k2&d+xcpN}=J#FUH@pGzCln9j$*|*?qQA6Xv=(T=N z?Nag9p`HE#b*)Rs`AW^1qV>h&{H=rIDq0yc$xf7C@(!`%7>v_KkJtl~AC>E@GV?l7 zmwq65W7UDizY5V0YcR5onmYn7rM3)g5giV`Nox%HYKO5UwWa9rD_DrmUmqTF(fS)o ztP;`Ix1()NXxo^Q(3;i#CuU8{ip~=`KfM`VpHs4FSKZ~}*bOB{>;4184u5gu1IEeG z6U>9ME>N`p&FH+`oQyXS*QkG;&KnJ>n3JZ9I#deS5pbEZ=0AC*fu4{w{31tcC7SiS*Pp>t{GAnOfp^$ULkVK4+@Gp zw=#DeZ(HwlY<1~@XtL2t?)b%TZHu?VRRDa~L#jNJigl%yAO2sLx#ov`B&UQ<4UI-7>D`5yo{tPN5NM`VDZk8E<{<)s%w(W#pm_jE zjbw}t6U8aeCU3~zt{G8^WHTPs&f2_wuXzJ;^Co%C8;qMb6t^c?(qrwodBfVg5jSfn zvaOF|r4;)JTclpJ%n&+Fn?=Z^$ zxbKjm?|)O@#af&&!c!7Wh8aNyOLZ-)hBW30>x?WigDbg&ViEB@ z=j(SJ^>E^>^{!xPNAzOj_(H0ua1%X+6X&dJS2bkP6FUGSOLss%XrSk*S=k&PpV}?svpM=FW-}RrDvE1`zVhi6(ekc{cKib9quEc_9MZ>?Pp#d! z`wHmZPI8lB1O(%2bmCg9FK1yW*mRM?bjghII#+bi!yHamOj+L6;fOTUNI6k2=-BGG8kImCC z#&{}Z#qK;{!WMe;X7lK686Ulgot3KZmyU9|k@1O_m{8reHc)385wZc3QM`48h3xon z)fN(Y7)*!pC&$m4Heo_XVJwQIhJ|1F4ZrD^0V`k!d;xzT5J(CH10lZ?h~TzL-{h&g zY~X*LM_;794R`A1|ARbMA}!thQ$3RLp|)7~-iUVK?(e^=TcSF*>m-U5i8zoD=%(&1zU#_r3<5;>Ikq)Xzr(|yah*EvU?cD&qWW+JQ z6l2b(CLte=M^OQ)qpH`1rklPO#>0u8{Mw+7l!o(1P=&dD#98>n>Z#hmy4{i1TQ}1E zpI~kSgh8`nP*eTz+#Bji|r zj^O_!_l^xDrCk{}eH-LYWpR0la^ggLMG@!KPm~jT`{op|>YEFW9AAhQE0j!)%Omnk zY*PXByk+Krshq9&&|fEfiXzq#I#dU58VdgrQ=We$PfXwGKj>5ay!rhnPOR@=)lZxw ziTV9iPR#F*>T@5)5zSei7v*5G56^8Xdn-Qk5Z_D1V@+vbJmj#5{)~QNdhdMc3474?8QX{QOJuJ;$s1zsOOmg|C$TTL zN)f14@#*fh!&_$J_$h;~SMFWMN^vb{s19EJzuE>`f4%AdQ~rNd|3BsTNAk)B+WVi{ zNB2nH_E6Z%e^ee+8|>r1lK!vSr*%U8I(c|l1MT--m#Ds8ePXI>L-pN(_+(sH*?z?7 zo_i+Z%mmI#;OqpBCUENnZj-?65*VA|?mZoq-yy~{Z@1!8hdKHY{KRWk4dQ66Y>b^r zG$@dbaADe#73O8ez%=pv>tqv>J%W3r3iw57vsWaYAGpAOp>L&qk#(_L1m^Of`J1C?g*p z{R=}_Y48Gu|13lW&V_RkQp-+eQjTnG1kXo=Y-@;+1=r~Y)!R`&d8{FvUVuADj6jkl z+Z*ANS=`aEjFuwY4}3SNcLHaN@DS$C;1(i$D(mMOmYpub<5}LtuyFeru3>o|^c#ur zbe89XBO*MH30O669Jm?u zna6{hits7SXMkbe@yrvzjYarO=851m&uFQJd0_6@ET059%)OX-G8pE@t&%Rk28_{n z1@jazM&Aw0XM#hX(RCKulO)1-vV1D!=pNk5>Gn;-=vU@9X(rAx9GD;OW2`?1=6@Q{ zio_Qw^PgjcUt;k*WC!!RlWjg2=6{Xl3&1e{Hs*z3nEx&2MPQi!UFOB$Oc8#cc?lTZ z@e%V2l#zTwGBjbxbbQp54H{^c-VBfvNk->=Mfg%QqR@!yag%$Lo4 z6&U6_hWTnR%$LJ_4H)L@%zP~v=IhFQ9T?_wyJHR3IyC<{mR}D!n(tQs28<3g_e7T8 z2sxTt$b1tR&2`tRwP1|S5|-Z##^@Zxd#~J4#wh9&3p$K zqxDSYJHg)3`gbta(itqj3yigN4p^-QcZ0Fm%xC#JFczC7%=dt$2rpy47i_{Foc=!8 zLv?4eAN}>9(HPzNpy8}${fE(=YXDtH{G95}M~(0uEPfo>p*zd>#YAWn!6p4jU__j3W2rvRnO#q4cU1o|Lb7yi=!})^E_XW)NJ)nxjI8zDpedU?_yO5oC@_!BXPX2Ge z-pRik?4A7Ig1wXfJFs{1f1fbF?r#PR6oOX z@>#z*s^1f^o5USd^;?+XlUUpm*`fOGja3wk>buo#Wm-+q8^x^O8glf8Tis*8=#4=v zZv#eejAU*LMsJK|ZU;thVB=Vu=U6b7;@QkOU;|4xb9*qYRU$%PJQ|V7{SUzjJPij& zGK6)hk#vc5j^SL6By=^faLevo9ZPS`H!SCRh6P5zxtU?1;W&3PEHaXvbqtG*#?JkK zckr0PT4JO-ud!sQ(Z+d;q1MQ8umP{yVV!4maz18QX5=~lW>{`?cXlzXFnT%PF`RFl z=->#VI6&oGU=%n%15^_(G)kR=3@eRt=McccE`fECQQ_dmS|k%(Y>aaPfGmPl#vBJn zCv!LU^&OfswFXNoRb0bNStQT z(&$*>{w$7Imc(2sV{T-rrLTfH8H}ZGBv@VdQ@~jI+%FZWmX(Rhir{w2znMkfshU~N z7*3yo;!g+cCvmnazPU%-0yYuB#+XjBwMAb@T3gOUPTK})&jfTMaeI}vokyIb(pHeL zvqg8)aA$GaE=YS0U!H!9A_S_6>Ta$co==_eFN7-c79D z4~**F$y@^Vu5kUqsNVf7F9oA|4>At`qk4}rmw|D;e}Z`+7}tBZx#eJ7@1JJ*ATU->I}U6HO`~xM1ss!BXwjsU;1Q!K zZHB#s2%~BY#hlWt0-3eO?(#}Rnv?Bjy}kULoo-$siV=lB+S5`G;EbwjN;{uUSBQla zTu4h&Mk_cg;#dT{ERI#cYh28{g@TK|qpXu@EmR8{`acUd{!-9>n`PwYRu)za>ejU+ zKd)P5-|BOwOsKBxUtL`@-;JJEIef<4S%}6n`O4XI#?P8FcjnmfGpBXyIw?PI-q>jq zb7za<8PjIYm|i`7PVZ>put7M1J#FTcsnxThJ#+JWMn}w;F|~ITsmITr7Co)U#7WiT zyXECoiIU!x>fE+Iww+&DF>A)exj3k;V>=g3om*WoW$M(<6;tQVuIxL0&iL{v)6eoI z$vr})vua0Wzj@TB`wc%QdBjqLI=T435Q?%N99aKGS(D>=&Cs(_vC|Yg9 z7R{Y~WFm@<;$x1SjRZ%^C|+&O4j)zQWYlarh`V zp5oM=Esm>?m@?rkS3r?!^R{pGq$65Fkz^E%74bgCh$UvK@$mr0kR!f?OZzgd@#TsB zXiwL?iX7t;xek$rd>XDL--a8I-@r}AfEU;<#hsKWkoc*Js5N8}d8Wi+X;Ev*Y2*du zGV+q;wd6(RedHC$E#x7^cIBJGx*mD@O>=;%)joL;@rG=KuN$Up1J{zr!wty6aFgW( zxKTL|E;7E9JY;p7@=f`;@&od9PAD!)Lc;K@TRC1|GuraVChEIC96lI27l zh|2joP#`bU0V*dJLZ!b$E&Z0Zl-X5228oa_kvtl+pLv4(K*jD>vGNdk1+o$DTx-X% zPKj&{7P33V24o3&_<_c=u!Uh($ZD`9XTuH1^WZwdq61?ABUbPjc_mQDd*Q{6W*3)G+t!%Q3H}YIrs3J#rBWvYk6}dn~+A2AA#N{O__8PD1 z4RS3IcDff{f!qLhvs>bw@+Gj4pTcz`ACSMO$N<(bH}Y}W3@Btr9jV5Jd66sx)-JQ; zVDisf(Mwh#u(@_co;(YITWVM2$b|^3u3Zt87c0@q0(l(*wJTSb%D*FU9)`>#%3qx> zpVNV4xlIQG+$Edk$B2O$za`I>1NTAbcbll$#4x3 zvk?w(%>@g&P{sOc@fFN}37nJYLM^O7mRu^6u1AE#R!-1@8(Iq0g&0|Kg%qJn08fzk zZB8B{^3~vG!g-7N3UE{5e8BowN*waUU($SBR^_$QLi4Vbq0d<# z+fSigfa^$nvufTA(s9K%Nh=B2yVv@0EK0GwE2|jL7xULH6rq=rHR)gzRnHY?hGt1(p3H z(g`C*W&ao&kIqPCejJR>XwJL=jLwKMKLJK{+A=>0MrU+pehQ4v=*hehjLtZTc@r3& z(U19QFswC@`57=egYMo{{WgP}2xlbo7I0(XR53pbP7}^V=I6kv9`igeEp-o*ME6AU zWtj}~yevaCtp6&^GaW$pHS$Acp4X&v4vXK=)?Wx#V|N>}M|00-`I}%g_fqD6fzjNn zSpO|Bn!A?eZ-dd?zcarBMsx3Feiw}9u4jG^jOISZyj{|EvGX+Z`;eyy=LN8;-v`pd z9WKUh4_uezr?N4c`>71Q!TO(}x$gi*ka&-3?&s3^n8jZrJB)@en7;yJGWKB2{C^QhI!JMzXQWO8O+~8Be*_fg&wzm7!>lsYXjMpbuGZ|bTyRq7dIko|9zps7Jt)d_U| z^kvm<<0fdM5_lCVNujH&(AA@$i=0IY{al59x=4DEn~LWOkgQKA@^6%2xSL?OCr4eU z+eu-(t1!Nv!Xu_`Q_;~5cjXJ}OAQGzes1Yha|hmfELCHT^lKwH0r66|#o?DbSZD^!w# zVe*hPOf?@oV|F$vG;$Rh)l;~X6k50nE$S)UO$r@dg^u+Uo*{+fU4`R43Xq`L?~%el zS7D%1$T$|0=Xh%NK=Y}DQMro}oa!bx)sv%c_AjI`*;SbAQE07-4ABx;>nhahA}dhj zP%5(4{3nWRPLCzk>bT6Llw~)`1FDD~<$XW!8DEL(5VFXX3;5CsJ=(nj9+$u6Lg)Pwu5teZwq8#xw+#tUD z{{o->=y;TQA_4|}PAr$wR}^^>T%74T8(zS$l@QRq5x`V$YyXQi%ygsY1NU(DN!+8Qw|{oc^X_xPKImC z*>HVwDO|r?1venCgPSDpgd3C(!41i0;5u?E+^~EfZiI`tSAGSQ@*rG1oxtvnEt|vj z$qsP+tTs#*0fih1*N`=E-TGI`g`_Djf*X+6!bQ<=gYsdxA^9v^N4^O+EI)%Ak$d1a z;+&^S+^wPljp#Q*vISgQc7*Gb$HR3iFi(~Og**kWAt%8#lZoxV)<)8oh%nk3*e8G+>Iq$m zRlvZp!q8BFg;8(x!Y-d>v^ShnSlkg$i}7XTbZ{oAcLL+fNDXsmFush;VtswA&{@E8 zeXP(qkLCJUp>rY2^|3rbNu|lVYc|7F! z>UlQv8DM<%T)?c46*|kACqj;m2zRvTV};HoEZ4^hookr&u|nq-<{G3A3+EnYeXP)V zgjpXejE}Cf(4Hjh1h9N6(xZD`04wuPiybRWIs;$A3>+wg`DYoSH&`FX3PbM!&Li7gH6I?{lli}5`2sM^|26YMFwFlg^CB?J{{!=4Fm?idWL^SBcl^Y> z6pZdTz^soII=?dOV}*`r5$mpH&_{RJ%=%cN6J%ZiIl7|}vp!bnG-lSv3Z3T6`dDGS z`&PzI7A4(^oe~4b3SquWjSzmBtcT0xFkcQ}Gl_Am5To}B!|BRmeXP(qj#(cobWUW} z#|oW7W__&CDPg`A)ra{8GG7OV`P}YUqfQn%6)e9Va_keiqwfZc4(t<+WciJdW1naY z^G#svbhvBPS}+!au`ItC91+eWW__&CnZ~S-6*{w-Z-ahFIP;nHu|j7F^Bs_5v@U1X z#|q=4RUa#KRQn(%ZthlI8kXp>r*>K33@5zf=jZujbAh0ecOu8$SQyYt!D zvBIRW`1)kvSRtDGq7mB3`nXpP?Ex$yF^(0YxvzRA|7$4DJNfmo!uaIZ#|q<+(j`TlK$erNN20rUBBgR_am_;LXAedU?_ zyO15s=T3fotS~XK4eZ0FI?Sym|LtluSI}v@X&}q+deXKA(dG)bEC!gi|SYf<-^sz$c z1eWV#g-%~)eXKCvJ$$S%sS`E{3>+&&^)t*+8SCR%VQ2_|9_AT1R*34iFr85>*2fCt zH&*&sVZ6HfSfNwN`ubR5yt?{Wp)-l)`dFbeomn3%bmlSZV};In%=%cNa|yFPR_I*I z>>eu&<6S8tk_M-g?okV@6X5x+M$|_U`rdOlB{?~QUr~t%5j02Rt2%yEg^yA7EF!Ef z*yq!~Xfvv|Qbc*`L%8|e(wc%*^i3AK214i!pASf3@-W0U#z~hqNoNWbB~&K(GLKyM zlFpLU50S|`q_Bk4wF0&`pkTK|?8Qx9q;&L0;@I}h`A9$?m7Ug3BkeU!=y8eq^Jw1> zP5O9R(3-T@rCPW@RxMaplTdgbDQu1x?kTAciMGZ|QX<{%K_vPtwKKBai2|+9W+U6w zQNTkAmn4*O8tMPggRNGVOHAp}oCDPkTQ%L)Fd|}5IYkZ8Vc@&X^tCt&d0mU@I z^$ma8%vV#)u|~#HR03}>r7-PmsPi1LY;Gr&7ejCZ@-jL%yuISJLG{p zL8hssm@f>Pmn~jIo?9r-uQVS3zvAHx+z7uNXOUHoY{*VV)eOoe+f><{47HC)t(E36 z;LnMpn&*Od$K}~|6mD(4t6ECGYu7car7XLf8LOe5+D3)HhDyd`;Pg1R_=vOXsk7e? zR>f(~&L-XC%Gz_W(vBrVYOok(q{=DuK+MU2OSyT;|&$5VKic~I3D zxd}aV?w~BEn@wonQ~fo?Id%1GTBE88LyA6XSZVc5q`tyz(u&3h{ZV$Ym1O`_>62dI z=I~w=>bL0J@k_aYH>*7)+vv&4Q;gFJvQIp<^2pke411Yw6+E&+l4Z$wYdo^kNY<<2 zbmx$4OvC9`lWdVEooBS(OR|fkCuR%9TrEB2Zl{>LB$kN&)CG4*8gSV|DZEaF5^vGCINjMwJ1(TklJ{4rJVpB%>(%_oWXt%brBx4^@&D zTOm6$&fflLOj-D>_=>6qo~}&}$ucaJeE{D@RQ4HGDmC0w>0YGP(aOkYm5x@tv7J>| zL{3DS-ME0sK9OPsUql-7xX2s?Kc?V~k;@U>L&1%adl0lR)yzSWuz{vg@SzC(^q@Bd zCr2(ru!4fKBab3Dje<)e^c&V?6udC98^LQScxA*f@zZGv{=FqNB>HbS$)eRELqMLvmux;o4W4}rJBkmKO3G~`Tpm*7~LYLhuo)`AVW3a%-yfosWI;RfV=aFgZZ zaHH~BxCQbxxX5lhd8YiFJWGC0UO*lsFInOZt<B;RfU)xJmLdxIuX<+>m?(t|MQB8%ii!FOqRppJ(Mh`k}O%CN3zE9DvE3@@1w}Zatk~h+2!T_eAZauQMn|wt{y>jy#^IlPo9dBrD<7<;m&r_THN;(-uQtPwoPPiO#K8fzW4^1PXyzOZiM+HFt$O`nEQaSC!4{1G8o_c z@v=ula#Ht8hcU^6t5vHDPz%bX<%#~o6>qh1(FwAuu z^XXuiYaR1gFwFH2=5b({>oMl>V3=zo^BG{6>pA8LU}Y})orSD1>7-7wEar>BFyAcZRbZHJKJz7Dn6H-kQZUSSA@gNmnC~*?%fT?;)y%8GFyD>LSAb!@ z+nKKf!+iHJ{|yZDJ;Zz!80LGD`D!rC_bl@@V3_X}=4-()-@llz1AEQ4hRruO0Q;;p z>7?jdGxP!L-vaY}0=SCA&nxrYW;$Q6_zq+T^X+236Abfx%lvmR%vZ;J7Z~Q-$9y*! z<~zW=4h-}C#(WPL<`YpS%Df&7 z^EGFF5DfE0nI8hfd~KN@2E%+Em>&V-2|_OOqhKr^U6~&Pi9A^F}Z>5eGAG0%P$R#{4uGn~0;Cp8;brs$|{_#wOx; z<}F|>PLr6Q1>@JOXE8qqR*TggL5zo&Ogd@%k{O!G@>eiiW&@rhG2WJeOW{`2naASS zksQOtHP;(p3>Vj2+rStui&+0nFouh3u780sTwHU#1;%i3&Gj}I!^Jh%J75eK*Ie&{ zFwPeWi)*eAz!)yBxjqDAxVYx}2#n$4n(Je*ceZ`Pv+eT` z?DM&q9t^+@)pC1rWFT}t02dq~e}(yQBW606u=s0a2lHLY{0$i9yN-D`80K5c{4E&f zyMy^VFwA!k^Y>twZ$0x5V3_YQ<~lIUw~=`d80LGH`A0C!_Y(77FwFM`^FA=l_b&5K zV3_Y?=AXeZ-xtjL!7$%$<^y1u??>iez?g0B+J6w{q~E!Va2H%DBXk?Q8+TnesZ5K3 zI-YFggHQGi0sBvb^Icb1c7eqGoGFv0AVS*emmIbX1)-`I5xhkulmb{uV!TBKgE&b# znJfj<9>@djN{s{np?|=#EX#dm$aSoOH;qBNRy#1tltF1^#trEajq(^ znRHHOaR#zOr}t;h1f$c3FgFLI(@$m20;AI>Ft@#kHbfl7Z1Y=1IgH`W!LU&-vYs~V_lJ=5e{?UzK->&MHC|zYJ zoAtZH{Ko?5*AMa}W&WPh>B{0>y0?2V9}kB4`Y`tf!(4rtPXK$T{E7Tam3JxsLiJ0P zLK!M!{bCe996;OSvRoD4PdcZwxW6ubB6F!O{!Hcpy7-yQWeLR(yJnA_XGBl7_Z;KRGT234J@wK#XrM5Nf-Z5=E=JF*O+S(ik}iIKIBfusWLrjTnY-C zA@O_@Zs=`Jd^YOxAz&$q=c&5Pmho{o7ZVrrW1(3`6*+PFub}`Z~>O6)P)r6b}LRerhSXD)L-L$$QQqcXhMsa&LR~7oW7qRukxNoc{eqNUPrl4yAQcHTaI#{B%Dd>W3#ou_X*Ed_&o3HH#LqiP_DU!n9VosgZX*DJAl z-A)<4axyYZ{hESXNlkC>;hPQeuBOBvl0wQzPW&My)=G$i(mYbytxBNB_^O26-V%1l zOZYyqgjJOIcU8h&ocMQD0*)EtI-yFqnUuox%td7$Hb^1U7^>=Bjr)LcN<(&oqX8M+WLGk)+ri0mR8;k*hq zKWu54??%bUG+xZ@B6=6XUqWoYZ$@cO)=~HaoVdOLdE8HFj*DzU@EHo0M6d}e@Xrwm z^Wg~o2|Ce%g0Dn!uv1V(!8^rim^79+NUkvhQI7aKT>6RBl)GYs5aOe2XgFDxMIoxynH^W`%zZdQz z|0cLg{4c{@>VFrm@b7?Y_`im0`hS8e{fFRM{-onzdVeZhpT7lMzdr|Vz~2pSlD`k! zpnm||kiQbH|X{q;=dYhBmdoSll@P@P4T}DH`V_E+%$h3+{S)?FFfn>H-X#K ze+=Aa{yezp{yuOs`~%@;`m5kJ_n!$j%RdKh3;z-k$=ugTEErj{XjCJNdiA?d>n=9;r zFoDkqJP7M1ZGtle(bjWjFxlFK9Wel!AgpI_+dqZ@U&%sa8Mc^#&;-DKq_v)NKzX>8b!J9V`XsEWcYrhKT~ec<2~SwLewn%SNd%iW`X@z*EE3}&FitulT`M~#wY9Xx zla%pjRnewxV*i$dQS|}EcE~;tMUrN2pC3J*#>ntWDmHeEP;#1fKB1yF`(8sQ7S{r8bn%h3EUic8QfC27H+K} z{{at=0XM_LW58|j=rQ08$lk0jQ@;LGeWGQ*$ zID-;-n$np@u>rZ1JiM|)Rn4rBtHIdygo_7@a3RupkCB^zLcR;P)|B6qhj;V!frrO? zN=JSoTZ0XG99&Bdf*X(%;3muYaHH~axCQb~xM<~5IqRLQshqi2w7`%Z5uG=}AWj7#l zE+WsAL&-Dbcz6YJCfukz4{ox&0&YOw3fGeVfNRQ4aPeCkojablz6uud9Tn?qZQzML zg7OFdYK;BBjc`)?BJuBLQq;;fgZCf;hhap>g6sSM)e|raEIf>J9Ax=2iOcA9gH|sy z+ypU7+#63@@Q$nI%qM{HPOB*MiD0}NtR3@7V7v>gBXb`x-f@-BtRKdOdomY5PH(nl z)(_*th0OY4T)028ei#=nXVwqn!o!&L!?^HhX8kZOT*a&(#)Z#d)(_*tHO%}lF8IEL zJqF|6!h-8eV>uqiIdcF9NIX%QYnT~c%;FJf4$QTjc_bL-TFE>L40Bz^JQ@sh{f+q) zFwAv5^QmCG8toS5F<_YMF6Ps~c-iFr%#~ogLhKRdDlp#d`6Tn{V7$w73$uP07k-g> z9OQWA*z3&tVO;oaX8kZO{2?Cg{ z)eQf@;_29+#2eLqW}X3t`F>}f3C0`MtfE+UXM)`&j04z<5(#F7vryn7;?}JTTr=cM|h_FuJ23^8zs5R5yruAsF2=l6esr?*^@6 zUJOQeRWmP%?QaMB)AtfQjDz{$PKR90K0J(b<^U#<7!TuMz6;IpA{Oh1apC36`e9u7 zVrKm?E_?;Eei#?Nj#)p93*XFq8L9{K{hj%8FwA#9^J*~6_XzV9V3_YI<}1N4-?Pkr z1H*i;Fkc0R`ToUxH5lgmfcY9Q%=d5RYr!zzH_X?8z2;lP=DPq7D=j>XgZb8)&X25r z3(WU3;7$@hugrIw8UBsM`e9sH6vwQsAI60(X8kZO9AMTD`v^#i-J#Q zehQ3N)1JY+5sX*UPGa5!#^Q4(^V49wnsx@Wei#>?!@L=Cyqb1Cvwj#CUc#&&#)X$N z^TW8{qu9x_@GuU;k|1h1WCdhjHP@nDxWB@J43+FfRNo^Y^G8%=Z%W z4`7(@b>=!S%=b3)9x%-J0rQVwm~RL3UNFqJlX)K)=KG%cCos(S6Z6ktnC~~{{a~0+ z;+{*b-3P!hUy%71FlL*(_8;VjaghRCDSZRsNL=^q0_$hoo8cD?l#9O-PM`+P3;keK zoRQD6mdfBch_IGn|J{P?WN;BH@MyXP;A#@%m1?+LTp+{8AVyt`S7HYq1Gqi&MPLlz zF3cB$F@Sq8uL5HLpTw+RsTS@BRxQ-8R0|Jg)~{3xk7RxQO0{qm%k?YO!V{VGE7jr_ z;a92!N8;O_b*-d(uWO}q7VG0UnKKhGhr~Cl=G`E}u2{cPEuI~}QZ0A~>Eo4Z$nJLO zoXgqWiR=~t=rwuPeJZ=VWOyly*QsYI;pNQts8_1Rv%fd?tRyHSNRL;lA$zzNvi?KJ z{!&0|62G9be?*3_X0d*yTKIbA$8~4i&a7Xl7QUPL3Edg@Gd~H&YVs(vex+LYX=eRO zweSnf`ju+o*O>Jy)xvKv>sP9Uw=-`>{+JFQGwWBXg}-FhuT%?v%dB6i7B>&SQZ3jT z59%zuQVr&LSvqyBk5{TWKLZL${Gl?>YchO@#rl1z zzfvun#rpb{YTsP9UdojO<=41BvVb-ry3zsmz4>@N0Ah4?6 z2eDVG1yk@W!NM!m(A-a@Gn(~3LvyPDc_iMWn)|s7SF>2ZQY}1{S-(;(d^WRwrCN9% z^DY#RskxZ>YcNK`1RvqF-cqBa8Jb)xw*Z^()ol*}Jb)^I=64 zuR+c3lf2y$fl{DRwF?oxMk(eMjVG5Nl(HO;{y^3SqSWmmeD%e)PgH6DLfXeJLTuXi znCfG(nIFTJn3`uOoQ&rHBKby?ptqeQ<&;NxZX$VCDnUQj!_tZxq>}uE#`MZ4_1EMb z6k_ac+7xm;Isv!Bu(PZGmWFX6T84AA#vBrlPmho=pd;}jyl(Ai8UV!kk6n@{#T!Zjy z6vopOAJug+BJ7iW?GU^KLE|_dnRzV*OMIV0vjR3SKh3~Pdoo`|EM2eg(w@w>5zd3* z@Y0^lI)qQ4@Q1$4Ak<4J{82y^Hk8622Qxb(zLLUtX^-!G6!9q%nLT~CA@~ag3w{4Y zFojAR==&VOC6;B zjjBllkVRKB&yAQx5q(Vl_lk|G6%;YpT!E+A7*pu~YbfG$a}oxGj<|~=rsEAo9PuPY zEHUw3_L#;$DdJ+YkE`(>MO-7lK?Lf9OuwRt+pL!X-y>4kqY!}|3AI@+z9${S_!a-$ zJUoL4{}=aGud5z=PLFOqD)EkL`V^NJ4(?xBG-Y}v-qAf}`h=--CsvEx+%E3xy1VGt zb$3y(>vp5(b)(SiO z*5!8d^HTj&oQW0H zv!=|f={sx6In}eeU@-or(e>Yr?xUAKd)5Tcpc^}D!ZbZP-ElZ}?rglKJ|Pl_PIpH$ z25O@I1U+7D9vxi`J1IEOC(FxZ_uTrfZTMsc#+jT_w*2YkXR7~bNIbf<3>%ghW|YxZ z9O{uDV3?%_2l?b}OLOg@PkxF4iJ{gW1EvjzO2?QV?BtWTKqJK`KNn?oYMveJVrO3HnYTO8oj=?m{LCSG&gTCS0n~>^0q{<5B*+za`P>KavZh{~k*%`~@0#%b&k0$sO zf>cT|IU&Vf79?i1+%)WrhRV1Gf-DjwR`(7FS~Qg6p`!_2I9gV3LD0ORtUf!M;0FjA ztnTke6ReU)NwKB@0loGUtMO6H{x}3}QC%#~*x&Yc{0j}_rF!Ze7Ce>EAzyMKHzx@8 za*D*BIuH9;4L1F92pa5=n~o;9_h?x?aWuiJ5U8F?91ZUuEyd2G32JS_ZWU}|C*|2q z%k88oao4Cxu*E%4O$v6in|8tsx0~iAX#3=|3(De?l-`di-$jzf=%aK@K?m2-vRIbr zwAiAS5>KJJ=mH-V(!`Dowllh);gfaqv3Oj9u6<#kC|U*u!qt-p)ARPFi8N zm`Yvq_odVg@?){gCvWG)+fB3+i6X&4b{ZCXJJ-&@y;T^UnC~m~$*XnBeRx75FTtft zE&FcDLr9r{%aF0xClBLx=1A!}EUZbmf6C}+H(ySbX{jo+b&0CX;|418a=k>KAyH78EbeRPxm1*Ev8 z_Q`7(O@gW9Zrt7D-nz_lZ=FK-*2@=_*`0mzV!GXzLAt@7o@=-3XgA6C$wLeA2#SqV zPPwkddKw9K^U06&E&ZKHmV*)8XcERWx&(Lk+ZUGUyL%eD^a2a{2ogEL3uyK1lm|WB zykjLRvzsABGG;=OFTWu{E+!K4dvalJLQlPc{OsUhpS*A3B>Ge-#8D>w|*@6S5at}AK!4~+*~^>o5BVwee%M3d9K0RZ&NWcnxL)f z0wcdXH?cYQLMMVnfoAU;G3l*X?=8{f|L$)clV?tuk#H&aqc0swJ@Gq7J}sz&&{-`4 z(aAn}|I#PbH%RqeLS3*w#)6FR1(R_GA$AW&r}O1^h)zdmw?M}v;U>OC9`5Do@|~}~ z7dNJHiJN-5eAgPw>=xzf>uL_Z%w`R=8)GGIm8Uv28<&QbXX3g(E7$IUg{~H9nqt|) zSKua`RSm`pzV;%k>y5R4F012^)mKP^tnNovMqa}G!UnAPO=-o!?0;^F=eC9p`pZ`! zO~p+L-PVNEBuhyCAr$B)knT;7{MxcxC2e~2q;#!mIO(NWm>bdkd6$IJZh|0^AZSDN zd>Dcxv;s5k)y3Fz@X1YPZbIUhp_7u3SamF2K!Rvwa(P~!oq|uja({vbEz8aKs=0L` zUo6}&tjnxO|zw*lLO6gLStgR&Xc(mdPgtae1!ETRPz|KG%O6x*nTr8L2pGu6NOK>Un`*JOl=I_3< zVUCHpkfdT_LXs;tV$Um8{?jNM2zX*i859lq1X=m?*sUn-p0&XiuIxaUSDA}DeL14c zb|kK@wj71t$4j7%2$zHkfsqXG7r_u?juOkXj1`F?5OB9!7c3H9_jVkjR` z(FGD)Z+I^gdXgST$wsl8s;SH9iz1d1x|y527MrcI`6RpTK)YqReN4G+cd=V^u~GC>MH6C6A?CCfiMx;~KEchXFWzlJ0fVpoda2k2H|=phVW|^#Wt`H z);~71_#3i3L0w?+)oX1$2YUV_H=}oP>BSxMQjdt9Kgky$qWdBma2t47P>%F4O1`2J zqU?v4s>0vEo?EQ+`*~!OGCi4+??5>a9Eb&xt{`XnM4RA*~p7=area0QyY2Bk#Y3kM&5=v7)kZ_ zVf>N#=-CCHJ_)}#TXb#PE%RoIq(4@`Q$6)hhWN#7QP4KOz5+c5ZHJE`hQU>ToEGP= zg)*?Hh)LXRiFK+9^6+aORAsMGK|h5OIBk#Y=qDPYuPdMsJrjd~JSt45pwK8SAa5K# zT0o(R_#g#&bMVmu1k@kZleVr2EPS9y-Xawo0ayLi*BVM%l*$kzwT`wI<%I_if^3Go zGU3IVG7mwW?Gcus1f)@pk0};g6M^K_#j^`h!;uGQ|pUZt(OuFC9e!0 zGQrS#-Au~b1a9Mwu1IY(#8C2R?EEQ3vdRB|A}%px0`jN>D94Hh8$%UC9m&JP`#&gJ z_v29V@VNR96g{o}iHUJG#AD3KMWT zZysb8RG2&}?dTQOeO5sp9fml%;-AjZqezWBdXBniHAz^pzO9gh_|tX#ZxnHg=s(u+ zPnhSwDf*8M{@>)-aARmgj>bDlF%zQjXi#8$w1Y?E6hXM^k46zCpczcVzQM~HDbVbV z;)5J1w_F{BtNth(+OnfoP&*S!AQ6?&REdrl!X%;;T69FcXgd#**p;P%!g=^4Tx3{F z8&Hietu=zu(jQfhv}k%Y(0me6>-0z-+5th`x+Cg|ShawVCS97yk4=9P(I1sVJ~bsa zEePq4MHH=59nn&y1BaRj(~-w(LBlIltV7A87BxKUXptkUW6_9PcqsL9tm07wwL$7N z6%y}6{NvjE>1ulhIgQ2o)uvr7%I!*g5>{~%k?EO#>tWC^KRxurs#FVWtDcQki(z9rkGGh*OEt8sNZx% zsy~n7A77NZOvEe0}?u=}hvDUhof;t@?=T!F=$b!pC zSO=h>{ygJ=I_u~)DuEPvkVoCrup$|PH2h*FZplxse@jkf^ol8TCk4_Tj86mABi$l= zY-9#a3R1}lgAp-mit9{9lBcz3tf@bq@ohj_M6UW{5dqm5wIDBwk8U7^dg22?0lZN< zI1b)9ItW+&d2^z{0?U&Z#fNels)m2A7LZrq3Miy2Ka{+2_~;ZAnvM^$B5w&kT7ZE1 z<1(oreWNrq7s1~6APr?UMh7YR0v&{_{wOW&PsK;d5%!|}CDQZZgSL|w!ABbf0rf|D zkRnSP=tI(rtw~f%GH(4mXaj*1J%v%<8)5``*(!KM?KpwXS=}I$){)jJo-u9ajOo?W z=k$)^G+&f(%GByv(Vn^aJ)UpBz1{$HYn1XB?N8SM{eh4)qDY z$_7s3mGrJ0U0pa~&hR;NvDcDcSutzI#JLmZ%+|4;i>A)4u9z})YUhfnb7xof9Y1G$ z`IPBrd6VQGq0(6$!m8{yZ~U~GQ>$mILyDDo`JHhHaOTwUbE+!`^&Qw5trNr5!N6ji z{41V1W5QWt?)2GHCQq-P7{#`LmPJha<`e~Xr*p2>OY_)CPBru zK(&-iq5`Dqwn^!bsJMJsOq)X5f;vR{6w*eZ5DFoWtJIy^*>%|P5$vOGg(U-qh>Ai{ zQ6wtR;J%`wA1%W;&|KKJIG>!ZV#J_f`C@p*fP4z|Lc0rxjZmU)%5bp^^Wh^ysHha( zDAb*t9^~{S=QuHXbl(w_RabJl>8!eH4}^TXE4POj&=sY_Az@KpQCv7UpPa6usBmC~ zs2DU-^ev1Vy9ae7dKXsW0IJe=P+>kfC~R2aAnG7dGN@P#MbV-dzdGwT2sFGe3_x~? zCFc;?2BX4_)giKr{Thm9zX4H<-V;-bD}p<)_t|Es-g4U+Au%I7Ab zNYF@PA%Y-YQUeGklj)v!B!+&?Oy|x_H{CrmxzyE@p6;HR&h43Q`f(pIVo)g_RZx^7 z#s^iP!Gb~r5iCGNOH&vh@I$abr4%j8QV=1QuTl`dZ>_!0*=Ki8auX6GlCJ7=_P5sB z?|t@TowfJjMZB=}gNmll3ffd>P%crF&qH;`IEpAR<7C+x=X!akVw{!SMu^bMTg7}( zMBKr4tyBpz#Y(P%hK@GC`&wBZ(AtO;{!`j7OEA9;j2i?B*5~&5m&%#4h@`{q! zsRnDg3<{&1l}mLcI8`{!KbWN~-EswD`DyWGx2mVnL<=jy4lkwLiiDTeD@4ng)j|O~ z-ZwJnC2%ig%lH@IJrk^#a;E@x5M7~CDHh-zmrNeH;zgp(RUwgMO;rk+e7RDp1t@zy z%-Fi!BfJWO`EeqRR^#LE9zdx<`BM zeM2c8wTG5z``xWx6TLFcw6z=Vbvnix9IlN~rxTR>twE!XaY#Bgf?9pI(+VDq(dt1h zcF&Ak+df`{RWuA~!{hV8$2%++D#h|zC>@?pTrC$%nP3tXO~4C)vgmmxQ1cV1g^ARa ziBt@PUbxZ=PavkpB+%+JO;q*y3Ll-3Y$q%xwIZ4Ato-! zkg!%ObLpK6M4)b_(wa97G63l!c+(o#}&D5 z%9Wv$##nimrPo5u!9m0#mx<{ZAe%oA{ui=E@fhf4211v0I4$vTr9ql`%xj$|UKf+ig%AId^0 z7;LyPA=7MPDmpN1P1{cWY-_8R2w`J1Y;AP04KfjlM^)eGqq6;0{cOH9Y&C}Kt)uImjBwf3RSlTzbZy5>}) ztRB|;!yM$33G>OGFdO7C9vqf>TB~>V@*}8vyv&W!HJQbJ-d3slcL=7A9f}b-8n*iV zQE!+`Q_&+=TJ>giSRalCE1mkjEwWCl-XEh<6yAL~ODb*EIAG<&m95QOtytO&X9C$D z7@+8}?BrHK%}%geA2lmnK%MXQn~63PO^9m2VA$^>ZpTfUnPh-|P#;7M4>J!;Dr!NeJ{Tf@CJ32DMCpm+fnf8nUTMAD z$l+NAscxR*^LTbg_SrRa1cdB9h3uIb2%nYx=pkq#H*7M_Q*NdOHD*20ayV$$g1xwT z$dCv*Z3=_Fw21%Bg{^MvdEA$^$7okMbU;NJ=GLK&l*vC)iDQ>#Wlxu(5aH+s4N-L~ zm&2q^m{4Ik{)i%f1jZkOp+>ZT8EmzP`RI12E2oI4@y3uck;ukMEDpD>t{@Ayt_szy zD=BsB8c^N3^i#L4Ue&!UIZ$_M#s#_>HXJt@DL3wv8+po&J*Ck@y^BW*lUWuKI$IWl zp;b>)rR-8rFiEIIV&st)1{If_1`wJe6`u)``gTYNL8PGNlwiz?-yqGTMah@dTcp*V*1{{LPgF}ha zxzfipoT(&f4Phn-9J3MxjW;4`RLGht40O5g6x#%j@e=7D#{EoSMV^diVv?sZR^;hH zG#z8C$WuZG;%132^W{XFxOuCmY`t-I)QhR6*nP4JV})rJBu>~#qEu46jHO)8Tf~w^ zF?f^(OC)0nlNPY!v{W!oOHZK9PN2C1XkakLV;eo!cxXZ8E5=p_ zIu?<{1IVeWkT>=$2@`m%gB#tr%FT2at7*QfJZnNgQ{!@$QNk&cCb2|FMN~6MRQm){ z@t9ero%rERYI(~N?R*bD@;OV4r*XBQKWxMakh+k!@<{N5yhYVi2hH}mb`!5s4;r1b z-uu)^FVPuo3VKY;IcYf{N*;at+CumP>|BbS%drz021&a_=fsBvaZGn&gmxjOJ8@<(&l!Jhr=qkQsg|}X zxk8vRz8z9_oP;+FtVuCAF&<3;x}?Im)XF%?)E)C@f^u?fC{Df&#mT*)IAvfcPDvPw zQyzxmRE429HDV}E#TbfHKZfE~lO>I(+O0GzHJ)y_3a!+9auF-V4+T-Bu#qY2qbejH zM5O$+frQrsZeZ4#sf|}jAY1u{t&>#+{N^yeWOMKyMZHAy$cvb?#D&Tt^sBbIlgK3?bg{S664K2)$+y-rtJWyP z36rb@If|VIpy6gFzwL$;6Y-{)wj0rVcEwOqaU_Gml4B@2hJr*% znsOAHRWnw;k3c$kn~^I_BH)Jo1FkAFC+>NtD zhGQu(FW#4GLJSA@ixofh?0YBUdG-#U05igr~HTofH1NTo>fJC|8I?o@R~g zl5m#girQpUs7;d!4G7-mj5J!8NN6x<6W=;T zyIV0-5hs19o<*SQ$h7IG+c7XPeyJnrjpXGtdtBP8Cpl%>kw>J`XlSH8QY=<&Noa-- zBO1Q=7PNy``7NOBI=0L>Bn>nULDO1pAFXrSi+EL1;T*R9sI-z*XEa7O#WhBc0%BzCs5@-iX-!bt%-~f&iXbj~)ulii7un(lT(fK7L9cxj40^3rQ-jxqp0QYvtjL1Q zjH2p?3WiEBIB4$;VVf>0i9T$PpoTz6N$gr;=L|ABR0+*pYd}NPK1wj-^#qhMah|2E zAyz0kN_%^>b2_XK&Jr?0#A~RJTQGiXdQO@7dPrh_5Ic%nw?U!u$`%oItFbGz;tkRJ6G>?R5IV%9qn&) zv7w;bS4z2c)U0l+yLxd@L)sMZ#h?+{&a0!A*?{G|x}l#|2h>y5HA6$EAjxDWG7~#f zu`?YzXJhA_I$>IZsq{hp=&02(eq56A>yk_uE@?to^W(uUjFT3XB!h&BiaN(sxK@_w zJnT_bLa8undF zZ5OezhdZ7gdJopuvCqoeU1dwfboK0A2FSJ~2E$&t-|mXF8jDp^*Rv#Ow<#X(w}#p) zSwchiA2nN@`o%!5VW(#t%~k`wHaZ{qNCdr`kqr?KFeI(mB?+2hsCM+P9@@cPv#C#rmx?jhbL@_%pRh$c{GG|?^xo!>lOTSeqOmoqne zV&fULd65BFG-uV3XKX5qA=zs5zM-}J96NN+hBi@ovls785eREpV`!`I{o*|^20x~| zO2*$q_)Qn90;3AETl_f?M-y0OV!_A-GkPt!9_@*tWK+`j2L#09A0;C&q2fP{yz5OtL*M*IP4y|z70ie zb2veF6+@~q6Ri$=UeUcieD#hFLb_})AwDMiVx0L{?GbE=X&m6t&oEpmVnb@TSARLQ zbOzNsIC@4_BAqVI)?q~$&Y*o~E0BrzB=Z~<3K$|596V{kWdG}1ahM}{AFl-mqnF0` z_2nWyy#eKkgMJ^c?C7d9UTkh|6vMUpQIjWHtYKf3YPc)~iZRuSMKY06%!)XAF-wAK zERwgXv4~(aW09;;K3M!^oCfznb8s$>gc|$tTw8wLY>Z(D%J5*#&*INRFq`=ED9U%>e_UQ)0^Zt#@Q?HNXww&v1|F;ZNW6b^P^T>13SoW+twk6W!bG0@=?|wqDiSI;!uRsT1(X;j7Iw2?PU5W5i zO!@p6sl_~b?|KK*|D1!#zste+s&K%xVUMLstczX%R{ z9xVOO0LRbM2{}}e&zzNiF&upUEaqvCEGvug5#u24*H6f~`!FFKrc{tc6EarEa**+}(aX3EXV5Xn# z%<|XaU|Y7B;m7S)^T#%6`LBV4?bBk0&(8~3%<$jqVDkCQxO_f87PJ0`4rcwo&cWor z$-(4bab?m!&WDY{BmemhW_!Kf!yui+AHU0j*Q-OWR|F4y?JXX@7x<5nA0BGT`u#Or zpMmsP{86Fnh5kPVC(GCJKMBn8viNhrtY3@22+aDl_&60w z_^&+tB@d%YqaWkD#>3C`F#5;nNBOLWE5PgzZ28;{{5c070spOo?*eB3W9455%>KsW zdw|)0S^Ueui@6AwVPN}Xdj8PENK5o1|BD{}s)w(>JQ5Em|2-a_@$fldJVPfT zjPJ8t9^9q;E78XTod|x6eDudt2EWGh&-Ty$(dO@7;Ey<%?eBLS{PXaCpM&24e7}P~ z;D!H5U_0J0J^$$OAMo%~kr3NIP~PW1T@#8_^4!)3zV=Xf5%RXbVt57M_v3k@f8rYO z2Y}1SC+qW}!h5XwbuWK@dA<^SmM6uS{-1;6TT#Cj|GI#p^!xnxc=Gpq_-{P?6%Rk1hZ&n6(>LSc@Aoj%b34js3VxWLtjB*S{6n7n zk9hbsz#PwciZjE13-B)jv)dwmAMm{n|BoF1*If3%*Y=-mGJ_lO%RT(V9)7)tf5yXa z^YFVo{2>qD@8M5-_^&_qS(@876;I&FOxt-jVazriOsQ)Np#1Alp< zg%G>mJ_SKWvN=UU24~hm&4lF3GoZaU89~!=%KX zhs_rL*hf2^^w2)vOa^(_9wa4thsi|hF?ex_C(1It;8q?`+Nm2BbnI`*m4rnvc4&>A z<(P8vilZD7c^@?VybSmOTDN!xy>nDaZM6@N0PfM3;i-$*w3~;dLq#BBN z@_F%O%}2#JedAs)(I)nKIF*y}OyC@jI>&Gj*D;*E_62YnO+4i|C>H5tqnngmT3_&g zOgJrk4yn68YJq*AFYwt6(1b#Kpkj!VbvoU86Ah_%ag2DxFIo7KceeUnvA@ZV+MQ-* zIPAA!EYliHP1V-0YoeMtH#b$D%1@n|%1%|M%7v-SP3!6O*7{s(YdxKsy6vX*RBEaU zN)?nUD8)jdfa}iGEAZc{7OL9|Q?IDjPUTMJ6)pmL-7TdV@#2RGMlVL5C!fNk z-=ba!s|Xh!;1plW-H%-D*oBQku9r^4>BQlnplukPPMn@jCl066={hna#~sIS+d?uz z(?CKurIBP8M+!wz$N4r`Kqz=zB^|@o1?<$2EuE3EOuTE#+Q+!tp%OH+Daz8^y<4&s zX%a(rAWdS(cBDxR*%LL1A)Bx!F=R{FB!+AZvy5nKn@fmxLM4dY&EyginP51H#FLOn zw6kZ-h5{3C-D?*SbZ3=?&Ze&OeOnxEU2nA`GD< zs&dk{K^w!w&4Vt}?utv&bZ?wXi#OO=s@<_^F=mjh`ffWMwK2xy`E?MEDhI(Cev=4~ zI!+z1yGm_%V-|AGCTO)z)zj_Vz1Yd!)t6$o=i2#sCU|Ufy0I+Y_Z*)z$H*W0Ohi5Z zQO-nkt^e#MI-6HuYV zMy0in887B(+|)cZm967YdXKi=K17)#kYTes8vE>7pxYEf$zmHL)1XJa26b1|58?L` zex%axQN zpCmAlOfiW!4@QUh;KW6l09~)wVRu;X46Yv?jRvje^*G_6)#?wP669`@FN22X=4a>6 zprrZFt!Fk@&t%(2XRuU8A#oYZ+d+7Kx^rnhAl|refu1qbxS@3cvpIYy;|NK3gkd~F zZ|p5EIngGYhvE6brRLLmX*~Q`_8zvEb9+6uE;J@2PtMcer)gQN1AMr5qMo7~T;idU z^}(TeT4v4Dk^u#6n&%7P{&1Rjv(>{H1ZbjN(}pJ|t$Fg~4aI_Keq|iqI!J0^E?fxn zE9En(>6z&ztEM?dTT?u0bVkh^g!}6}nheg)W7v!UTq@(8W|0Ca|gs6C|h#lQ`)`RE4g9s0v*I zRfR4VRiR6udM$ye8*>SwDs%}{6}p(J!UTp2&&8_3OHio7OAw&Kb1_wTE>;zuOA!^G z)=WaxhIW354SnpZ&3JiG!F;f^ffI~&;K;x+EzLfx@9y?n=Pbg9Tkx$P!(umU-56>j zI+kFT%+;om?&C|*E$HMhWDM)OxDWesKkDL`-sy%u#2_CS2CORdW9PU*^&eb$JFW*9 z5MhdNHwl;eV>tX9lZ-3*0d>54h<+Sr`Qy7E${ACvlW&BKBNn+SM>^$jKY0)3Y#@e* zTRKN$HT=M8Uw zE#EU$hF2@M;8Ft(&}8{6-M`ThU6zyfdEM5Wenr%Eg9p2juwP z$o^go!+aYw7|n*uy^aMDQsx%+H3$PqRDbDM9d}6Y@!WD`%5% iHwe}bdC!KNe43pAKg)Y9+-|&`nG?aAL_#lC?tcK!A^GtD diff --git a/Example/EpaperModuleTest_APM32F103/MDK-ARM/Objects/template.hex b/Example/EpaperModuleTest_APM32F103/MDK-ARM/Objects/template.hex deleted file mode 100644 index b301a60..0000000 --- a/Example/EpaperModuleTest_APM32F103/MDK-ARM/Objects/template.hex +++ /dev/null @@ -1,137 +0,0 @@ -:020000040800F2 -:100000001004002011010008350200083102000828 -:1000100033020008850100086704000800000000A2 -:10002000000000000000000000000000E9020008DD -:1000300087010008000000003F020008EB020008F2 -:100040002B0100082B0100082B0100082B010008E0 -:100050002B0100082B0100082B0100082B010008D0 -:100060002B0100082B0100082B0100082B010008C0 -:100070002B0100082B0100082B0100082B010008B0 -:100080002B0100082B0100082B0100082B010008A0 -:100090002B0100082B0100082B0100082B01000890 -:1000A0002B0100082B0100082B0100082B01000880 -:1000B0002B0100082B0100082B0100082B01000870 -:1000C0002B0100082B0100082B0100082B01000860 -:1000D0002B0100082B0100082B0100082B01000850 -:1000E0002B0100082B0100082B0100082B01000840 -:1000F0002B0100082B0100082B010008DFF80CD0B1 -:1001000000F02EF8004800476905000810040020A0 -:100110000648804706480047FEE7FEE7FEE7FEE7A1 -:10012000FEE7FEE7FEE7FEE7FEE7FEE7F102000876 -:10013000FD00000830B50B460146002020220124B6 -:1001400009E021FA02F59D4205D303FA02F5491BA5 -:1001500004FA02F52844151EA2F10102F1DC30BDBB -:10016000064C074D06E0E06840F0010394E8070004 -:1001700098471034AC42F6D3FFF7C4FF34080008A8 -:1001800054080008FEE77047F0B5CB7803F00F0283 -:100190001B0644BF8B781A430B881C061CD00368CF -:1001A000012400254FF00F0C202D13D00F883C4266 -:1001B0000DD00CFA05F602FA05F7B3433B43CF78AE -:1001C000482F03D0282F08BF446100E004610435A4 -:1001D0006400E9E703600B88B3F5807F1CD34368B4 -:1001E0004FF4807400254FF00F0C202D13D00F8892 -:1001F0003C420DD00CFA05F602FA05F7B3433B4337 -:10020000CF78482F03D0282F08BF446100E0046155 -:1002100004356400E9E74360F0BD8068084018BF1A -:10022000012070471023002A08BF1423C1507047D3 -:10023000FEE7FEE770470A681043086070477047A2 -:100240000149FFF7F8BF00BF1810024080B500F069 -:100250002DF8044904A20968C1F30311515CC84098 -:1002600080BD00BF0410024000000000000000003C -:10027000010203040607080970B5184E0C4605462E -:10028000FFF7E4FF3DB13168074AC1F30221515C39 -:1002900020FA01F1296034B13168034AC1F3C22167 -:1002A000515CC840206070BD2C0800080B490868EC -:1002B00000F003020A48022A08D10A680B68C2F358 -:1002C00083420232DB0302D4064850437047096878 -:1002D0005043C1F34041C840704700BF0410024082 -:1002E00000127A0000093D00704700F023B90000B9 -:1002F00081B03148314A016841F001010160416833 -:1003000011402F4A4160016811400160016821F4E9 -:1003100080210160416821F4FE0141604FF41F011A -:100320008160016841F480310160002100910099F1 -:10033000090B042905D80168890302D40099013109 -:10034000F4E70168890330D51E4903230A6842F0A7 -:1003500010020A600A6863F302020A60042241681C -:1003600021F0F0014160416821F460514160416831 -:1003700062F30A210A224160416841F48031416000 -:10038000416862F395414160016841F0807101600C -:1003900001688901FCD54168022262F301014160D4 -:1003A000416801F00C010829FAD107484FF00061BB -:1003B000016001B0704700BF001002400000FFF86C -:1003C000FFFFF6FE0020024008ED00E0BCB5044649 -:1003D000C0680D464EF6F3110840A97A08432989F2 -:1003E0000843A98808434CF6FF71E0602069084083 -:1003F000E98808434FF6FF41206160690840A989F8 -:10040000084360615748844219BF01A8002101A92F -:100410000020FFF731FF019919206FF06303484373 -:1004200029688900B0FBF1F06421B0FBF1F202FB16 -:100430000300322303EB0010B0FBF1F000F00F00DB -:1004400040EA0210A060BCBDC16841F40051C16027 -:1004500070470068084018BF01207047426861F388 -:10046000080242607047FEE7E0B50420FFF7E8FEAF -:1004700003480190084801A9FFF786FE8CBD00BF24 -:100480000100032880B504480121FFF7C6FE0028BB -:1004900018BF012080BD00BF00080140E0B5082062 -:1004A000FFF7CEFE03480190064801A9FFF76CFE56 -:1004B0008CBD00BF04000380024804210022FFF726 -:1004C000B1BE00BF000C01400248016881F0040188 -:1004D000016070470C0C014010B586B044F2040076 -:1004E000FFF7AEFE0E481F4C0590A4F5405005A93D -:1004F000FFF74AFE4FF4E131002001910821ADF8E9 -:100500001000ADF80C00029020468DF80E1001A9E5 -:10051000FFF75CFF2046FFF797FF06B010BD00BF56 -:100520000002038806490A6810440A688242FCD324 -:10053000704700BF0248016801310160704700BF89 -:1005400008000020B0B5074D0446C1B22846FFF7A9 -:1005500085FF28468021FFF77CFF0028F9D0204640 -:10056000B0BD00BF0038014000F066F8FFF796FF0D -:10057000FFF77AFFFFF7B0FF144C0DA0A04714A0BF -:10058000A04719A0A0471FA0A0472348016823A0A7 -:1005900000F070F825A0A047FFF774FF10B1FFF737 -:1005A0008BFFF9E76420FFF7BDFFFFF78DFFF3E74F -:1005B0000D0A57654163742053747564696F204355 -:1005C0006F726520426F6172640D000009080008B7 -:1005D000776561637473747564696F2E74616F629B -:1005E000616F2E636F6D0D00776561637473747551 -:1005F00064696F2E616C69657870726573732E63C0 -:100600006F6D0D00777777772E77656163742D7442 -:10061000632E636E0D0A0D0004000020537973747D -:10062000656D436C6B3A25640D0A000054656D706E -:100630006C6174650D0000000B484FF47A7100681E -:10064000B0FBF1F00138B0F1807F00D3FEE707493D -:10065000F02248600648027000228A6007220A6081 -:1006600050210170704700BF0400002010E000E03E -:1006700023ED00E00FB4054B10B503A9044A02981E -:1006800000F018F810BC5DF814FB000045050008E8 -:100690000000002002E008C8121F08C1002AFAD199 -:1006A00070477047002001E001C1121F002AFBD1F2 -:1006B000704700002DE9FF4F89B09B460446002596 -:1006C00006E025280BD05A460B999047641C6D1CF8 -:1006D00020780028F5D10DB02846BDE8F08F00271E -:1006E000B8460122474900E0074314F8013F203B88 -:1006F00002FA03F00842F7D120782E2819D114F815 -:10070000010F47F004072A280ED06FF02F0220783F -:10071000A0F1300109290CD808EB880102EB410156 -:1007200000EB0108641CF2E70A98641C50F8048B83 -:100730000A9020780028CED0642808D0692806D0F6 -:1007400075281ED05A460B9990476D1C58E00A999F -:100750004FF00A0901C90A91002802DA40422D210E -:1007600002E0390504D52B218DF82010012103E08A -:10077000F90704D02021F7E78A4608AE0DE00021F2 -:10078000FAE70A994FF00A0901C90A91F7E74946C1 -:10079000FFF7D0FC303106F8011D0028F7D1ADEB92 -:1007A000060000F12009780701D44FF00108C84580 -:1007B00002DDA8EB090000E000208046002706E0EB -:1007C00008A85A46C05D0B9990476D1C7F1C574581 -:1007D000F6DB04E030205A460B9990476D1CB8F1C7 -:1007E0000001A8F10108F5DC05E016F8010B5A46F6 -:1007F0000B9990476D1CB9F10001A9F10109F4DCD6 -:10080000641C65E70928010010B5044601E0FFF704 -:1008100099FE14F8010B04490028F8D1BDE81040F6 -:100820000A20FFF78FBE000000000020000000003B -:10083000010203045808000800000020080000001E -:100840009406000860080008080000200804000062 -:10085000A4060008000000000000000000D8B80551 -:04000005080000FDF2 -:00000001FF diff --git a/Example/EpaperModuleTest_APM32F103/Src/apm32f10x_int.c b/Example/EpaperModuleTest_APM32F103/Src/apm32f10x_int.c deleted file mode 100644 index 7256d0e..0000000 --- a/Example/EpaperModuleTest_APM32F103/Src/apm32f10x_int.c +++ /dev/null @@ -1,169 +0,0 @@ -/*! - * @file apm32f10x_int.c - * - * @brief Main Interrupt Service Routines - * - * @version V1.0.2 - * - * @date 2022-01-05 - * - * @attention - * - * Copyright (C) 2020-2022 Geehy Semiconductor - * - * You may not use this file except in compliance with the - * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). - * - * The program is only for reference, which is distributed in the hope - * that it will be usefull and instructional for customers to develop - * their software. Unless required by applicable law or agreed to in - * writing, the program is distributed on an "AS IS" BASIS, WITHOUT - * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. - * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions - * and limitations under the License. - */ - -#include "main.h" -#include "apm32f10x_int.h" -#include "systick.h" - -/** @addtogroup Peripherals_Library Standard Peripheral Library - @{ -*/ - -/** @addtogroup INT_Driver INT Driver - @{ -*/ - -/** @addtogroup INT_Fuctions Fuctions - @{ -*/ - -/*! - * @brief This function handles NMI exception - * - * @param None - * - * @retval None - * - */ -void NMI_Handler(void) -{ -} - -/*! - * @brief This function handles Hard Fault exception - * - * @param None - * - * @retval None - * - */ -void HardFault_Handler(void) -{ - /** Go to infinite loop when Hard Fault exception occurs */ - while (1) - { - } -} - -/*! - * @brief This function handles Memory Manage exception - * - * @param None - * - * @retval None - * - */ -void MemManage_Handler(void) -{ - /** Go to infinite loop when Memory Manage exception occurs */ - while (1) - { - } -} - -/*! - * @brief This function handles Bus Fault exception - * - * @param None - * - * @retval None - * - */ -void BusFault_Handler(void) -{ - /** Go to infinite loop when Bus Fault exception occurs */ - while (1) - { - } -} - -/*! - * @brief This function handles Usage Fault exception - * - * @param None - * - * @retval None - * - */ -void UsageFault_Handler(void) -{ - /** Go to infinite loop when Usage Fault exception occurs */ - while (1) - { - } -} - -/*! - * @brief This function handles SVCall exception - * - * @param None - * - * @retval None - * - */ -void SVC_Handler(void) -{ -} - -/*! - * @brief This function handles Debug Monitor exception - * - * @param None - * - * @retval None - * - */ -void DebugMon_Handler(void) -{ -} - -/*! - * @brief This function handles PendSV_Handler exception - * - * @param None - * - * @retval None - * - */ -void PendSV_Handler(void) -{ -} - -/*! - * @brief This function handles SysTick Handler - * - * @param None - * - * @retval None - * - */ -void SysTick_Handler(void) -{ - delay_decrement(); -} - -/**@} end of group INT_Fuctions*/ -/**@} end of group INT_Driver*/ -/**@} end of group Peripherals_Library*/ diff --git a/Example/EpaperModuleTest_APM32F103/Src/board.c b/Example/EpaperModuleTest_APM32F103/Src/board.c deleted file mode 100644 index fe3be73..0000000 --- a/Example/EpaperModuleTest_APM32F103/Src/board.c +++ /dev/null @@ -1,91 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "board.h" -#include "apm32f10x_gpio.h" -#include "apm32f10x_rcm.h" -#include "apm32f10x_usart.h" - -void board_usart_init(void) -{ - GPIO_Config_T GPIO_ConfigStruct; - USART_Config_T USART_ConfigStruct; - - RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA | RCM_APB2_PERIPH_USART1)); - - GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP; - GPIO_ConfigStruct.pin = GPIO_PIN_9; - GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz; - GPIO_Config(GPIOA, &GPIO_ConfigStruct); - - USART_ConfigStruct.baudRate = 115200; - USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE; - USART_ConfigStruct.mode = USART_MODE_TX; - USART_ConfigStruct.parity = USART_PARITY_NONE; - USART_ConfigStruct.stopBits = USART_STOP_BIT_1; - USART_ConfigStruct.wordLength = USART_WORD_LEN_8B; - USART_Config(USART1, &USART_ConfigStruct); - - USART_Enable(USART1); -} - -/* retarget the C library printf function to the USART */ -int fputc(int ch, FILE *f) -{ - USART_TxData(USART1, (uint8_t)ch); - while (RESET == USART_ReadStatusFlag(USART1, USART_FLAG_TXBE)) - ; - - return ch; -} - -void board_led_init(void) -{ - GPIO_Config_T configStruct; - RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOB); - - configStruct.pin = GPIO_PIN_2; - configStruct.mode = GPIO_MODE_OUT_PP; - configStruct.speed = GPIO_SPEED_50MHz; - GPIO_Config(GPIOB, &configStruct); -} - -void board_led_on(void) -{ - GPIO_WriteBitValue(GPIOB, GPIO_PIN_2, BIT_SET); -} - -void board_led_off(void) -{ - GPIO_WriteBitValue(GPIOB, GPIO_PIN_2, BIT_RESET); -} - -void board_led_toggle(void) -{ - GPIOB->ODATA ^= GPIO_PIN_2; -} - -void board_button_init(void) -{ - GPIO_Config_T configStruct; - RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA); - - configStruct.pin = GPIO_PIN_0; - configStruct.mode = GPIO_MODE_IN_PD; - configStruct.speed = GPIO_SPEED_50MHz; - GPIO_Config(GPIOA, &configStruct); -} - -uint8_t board_button_state_get(void) -{ - if(GPIO_ReadInputBit(GPIOA, GPIO_PIN_0) == BIT_RESET) - return 0; - else - return 1; -} diff --git a/Example/EpaperModuleTest_APM32F103/Src/main.c b/Example/EpaperModuleTest_APM32F103/Src/main.c deleted file mode 100644 index f971a78..0000000 --- a/Example/EpaperModuleTest_APM32F103/Src/main.c +++ /dev/null @@ -1,210 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "main.h" -#include "board.h" -#include "systick.h" - -#include "epaper.h" -#include "bmp.h" - -// define for White Black Red Epaper Module -//#define EPD_BWR - -uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; -#ifdef EPD_BWR -uint8_t image_red[EPD_W_BUFF_SIZE * EPD_H]; -#endif - -/*! - * @brief Main program - * - * @param None - * - * @retval None - * - */ -int main(void) -{ - uint8_t text[20]; - - systick_config(); - - board_led_init(); - board_button_init(); - board_usart_init(); - - printf("\r\nWeAct Studio Core Board\r\n"); - printf("weactstudio.taobao.com\r\n"); - printf("weactstudio.aliexpress.com\r\n"); - printf("wwww.weact-tc.cn\r\n\r\n"); - printf("SystemClk:%d\r\n", SystemCoreClock); - printf("Epaper Module Test\r\n"); - - epd_io_init(); - - epd_init(); - -#ifdef EPD_BWR - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - #else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #endif - - epd_display(image_bw, image_red); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(8000); - - epd_init(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); - -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"APM32F103CBT6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_RED); -#else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_RED, 1); -#endif - - epd_display(image_bw, image_red); - -#else - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - #else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - - #ifdef EPD_154 - epd_paint_clear(EPD_COLOR_WHITE); - epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); - #else - epd_paint_clear(EPD_COLOR_WHITE); - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #endif - #endif - - epd_displayBW(image_bw); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(5000); - - epd_init_partial(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_154 - epd_paint_showString(10, 0, (uint8_t *)&"1.54 Inch", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 23, (uint8_t *)&"Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 48, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showString(10, 60, (uint8_t *)&"with 200 x 200 resolution", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showPicture((EPD_H - 200) / 2,130,200,64,gImage_5,EPD_COLOR_WHITE); -#endif -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"APM32F103CBT6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); -#else - epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); -#endif - - sprintf((char *)&text, ">> Partial Mode"); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(1000); - - for (uint32_t i = 123; i < 8 * 123; i += 123) - { - sprintf((char *)&text, ">> Num=%d ", i); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(100); - } - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_displayBW_partial(image_bw); - - delay(1000); - - epd_update(); -#endif - - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - while (1) - { - if (!board_button_state_get()) - { - delay(100); - board_led_toggle(); - } - else - { - board_led_off(); - } - } -} diff --git a/Example/EpaperModuleTest_APM32F103/Src/systick.c b/Example/EpaperModuleTest_APM32F103/Src/systick.c deleted file mode 100644 index d453872..0000000 --- a/Example/EpaperModuleTest_APM32F103/Src/systick.c +++ /dev/null @@ -1,121 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "systick.h" -#include "apm32f10x.h" -#include "apm32f10x_pmu.h" - -volatile uint32_t _tick = 0; - -/*! - \brief configure systick - \param[in] none - \param[out] none - \retval none -*/ -void systick_config(void) -{ - /* setup systick timer for (SysTick_Freq) Hz interrupts */ - if (SysTick_Config(SystemCoreClock / SysTick_Freq)) - { - /* capture error */ - while (1) - { - } - } - /* configure the systick handler priority */ - NVIC_SetPriority(SysTick_IRQn, 0x05U); -} - -/*! - \brief delay a time in milliseconds - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay(uint32_t count) -{ - uint32_t utick; - utick = count + systick_get_tick(); - - while (systick_get_tick() < utick) - { - } -} - -/*! - \brief delay a time in milliseconds with low power - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay_lp(uint32_t count) -{ - uint32_t utick; - utick = count + systick_get_tick(); - - while (systick_get_tick() < utick) - { - PMU_EnterSTANDBYMode(); - } -} - -/*! - \brief delay decrement - \param[in] none - \param[out] none - \retval none -*/ -void delay_decrement(void) -{ - _tick++; -} - -/*! - \brief get systick tick - \param[in] none - \param[out] none - \retval none -*/ - -uint32_t systick_get_tick(void) -{ - return _tick; -} - -void systick_DisableIRQ(void) -{ - /* Disable SysTick Interrupt */ - SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; -} - -void systick_EnableIRQ(void) -{ - /* Enable SysTick Interrupt */ - SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; -} - -void systick_Disable(void) -{ - /* Disable SysTick */ - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; -} - -void systick_Enable(void) -{ - /* Enable SysTick */ - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; -} - -void systick_deinit(void) -{ - SysTick->CTRL = 0; - SysTick->LOAD = 0; - SysTick->VAL = 0; -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_common_tables.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_common_tables.h deleted file mode 100644 index 721b18d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_common_tables.h +++ /dev/null @@ -1,517 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_common_tables.h - * Description: Extern declaration for common tables - * - * $Date: 27. January 2017 - * $Revision: V.1.5.1 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_COMMON_TABLES_H -#define _ARM_COMMON_TABLES_H - -#include "arm_math.h" - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - /* Double Precision Float CFFT twiddles */ - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREV_1024) - extern const uint16_t armBitRevTable[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_16) - extern const uint64_t twiddleCoefF64_16[32]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_32) - extern const uint64_t twiddleCoefF64_32[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_64) - extern const uint64_t twiddleCoefF64_64[128]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_128) - extern const uint64_t twiddleCoefF64_128[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_256) - extern const uint64_t twiddleCoefF64_256[512]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_512) - extern const uint64_t twiddleCoefF64_512[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_1024) - extern const uint64_t twiddleCoefF64_1024[2048]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_2048) - extern const uint64_t twiddleCoefF64_2048[4096]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_4096) - extern const uint64_t twiddleCoefF64_4096[8192]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) - extern const float32_t twiddleCoef_16[32]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) - extern const float32_t twiddleCoef_32[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) - extern const float32_t twiddleCoef_64[128]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) - extern const float32_t twiddleCoef_128[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) - extern const float32_t twiddleCoef_256[512]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) - extern const float32_t twiddleCoef_512[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) - extern const float32_t twiddleCoef_1024[2048]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) - extern const float32_t twiddleCoef_2048[4096]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) - extern const float32_t twiddleCoef_4096[8192]; - #define twiddleCoef twiddleCoef_4096 - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_16) - extern const q31_t twiddleCoef_16_q31[24]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_32) - extern const q31_t twiddleCoef_32_q31[48]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_64) - extern const q31_t twiddleCoef_64_q31[96]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_128) - extern const q31_t twiddleCoef_128_q31[192]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_256) - extern const q31_t twiddleCoef_256_q31[384]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_512) - extern const q31_t twiddleCoef_512_q31[768]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) - extern const q31_t twiddleCoef_1024_q31[1536]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) - extern const q31_t twiddleCoef_2048_q31[3072]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) - extern const q31_t twiddleCoef_4096_q31[6144]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_16) - extern const q15_t twiddleCoef_16_q15[24]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_32) - extern const q15_t twiddleCoef_32_q15[48]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_64) - extern const q15_t twiddleCoef_64_q15[96]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_128) - extern const q15_t twiddleCoef_128_q15[192]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_256) - extern const q15_t twiddleCoef_256_q15[384]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_512) - extern const q15_t twiddleCoef_512_q15[768]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) - extern const q15_t twiddleCoef_1024_q15[1536]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) - extern const q15_t twiddleCoef_2048_q15[3072]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) - extern const q15_t twiddleCoef_4096_q15[6144]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - /* Double Precision Float RFFT twiddles */ - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_32) - extern const uint64_t twiddleCoefF64_rfft_32[32]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_64) - extern const uint64_t twiddleCoefF64_rfft_64[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_128) - extern const uint64_t twiddleCoefF64_rfft_128[128]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_256) - extern const uint64_t twiddleCoefF64_rfft_256[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_512) - extern const uint64_t twiddleCoefF64_rfft_512[512]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_1024) - extern const uint64_t twiddleCoefF64_rfft_1024[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_2048) - extern const uint64_t twiddleCoefF64_rfft_2048[2048]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_4096) - extern const uint64_t twiddleCoefF64_rfft_4096[4096]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32) - extern const float32_t twiddleCoef_rfft_32[32]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64) - extern const float32_t twiddleCoef_rfft_64[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128) - extern const float32_t twiddleCoef_rfft_128[128]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256) - extern const float32_t twiddleCoef_rfft_256[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512) - extern const float32_t twiddleCoef_rfft_512[512]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024) - extern const float32_t twiddleCoef_rfft_1024[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048) - extern const float32_t twiddleCoef_rfft_2048[2048]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096) - extern const float32_t twiddleCoef_rfft_4096[4096]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - - /* Double precision floating-point bit reversal tables */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_16) - #define ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH ((uint16_t)12) - extern const uint16_t armBitRevIndexTableF64_16[ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_32) - #define ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH ((uint16_t)24) - extern const uint16_t armBitRevIndexTableF64_32[ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_64) - #define ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH ((uint16_t)56) - extern const uint16_t armBitRevIndexTableF64_64[ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_128) - #define ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH ((uint16_t)112) - extern const uint16_t armBitRevIndexTableF64_128[ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_256) - #define ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH ((uint16_t)240) - extern const uint16_t armBitRevIndexTableF64_256[ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_512) - #define ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH ((uint16_t)480) - extern const uint16_t armBitRevIndexTableF64_512[ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_1024) - #define ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH ((uint16_t)992) - extern const uint16_t armBitRevIndexTableF64_1024[ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_2048) - #define ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH ((uint16_t)1984) - extern const uint16_t armBitRevIndexTableF64_2048[ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_4096) - #define ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH ((uint16_t)4032) - extern const uint16_t armBitRevIndexTableF64_4096[ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - /* floating-point bit reversal tables */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_16) - #define ARMBITREVINDEXTABLE_16_TABLE_LENGTH ((uint16_t)20) - extern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE_16_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_32) - #define ARMBITREVINDEXTABLE_32_TABLE_LENGTH ((uint16_t)48) - extern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE_32_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_64) - #define ARMBITREVINDEXTABLE_64_TABLE_LENGTH ((uint16_t)56) - extern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE_64_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_128) - #define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208) - extern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_256) - #define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440) - extern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_512) - #define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448) - extern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_1024) - #define ARMBITREVINDEXTABLE_1024_TABLE_LENGTH ((uint16_t)1800) - extern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE_1024_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_2048) - #define ARMBITREVINDEXTABLE_2048_TABLE_LENGTH ((uint16_t)3808) - extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE_2048_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_4096) - #define ARMBITREVINDEXTABLE_4096_TABLE_LENGTH ((uint16_t)4032) - extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE_4096_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - - /* fixed-point bit reversal tables */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) - #define ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH ((uint16_t)12) - extern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_32) - #define ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH ((uint16_t)24) - extern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) - #define ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH ((uint16_t)56) - extern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_128) - #define ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH ((uint16_t)112) - extern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) - #define ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH ((uint16_t)240) - extern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_512) - #define ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH ((uint16_t)480) - extern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) - #define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992) - extern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_2048) - #define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984) - extern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) - #define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032) - extern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_F32) - extern const float32_t realCoefA[8192]; - extern const float32_t realCoefB[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_Q31) - extern const q31_t realCoefAQ31[8192]; - extern const q31_t realCoefBQ31[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_Q15) - extern const q15_t realCoefAQ15[8192]; - extern const q15_t realCoefBQ15[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_128) - extern const float32_t Weights_128[256]; - extern const float32_t cos_factors_128[128]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_512) - extern const float32_t Weights_512[1024]; - extern const float32_t cos_factors_512[512]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_2048) - extern const float32_t Weights_2048[4096]; - extern const float32_t cos_factors_2048[2048]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_8192) - extern const float32_t Weights_8192[16384]; - extern const float32_t cos_factors_8192[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_128) - extern const q15_t WeightsQ15_128[256]; - extern const q15_t cos_factorsQ15_128[128]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_512) - extern const q15_t WeightsQ15_512[1024]; - extern const q15_t cos_factorsQ15_512[512]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_2048) - extern const q15_t WeightsQ15_2048[4096]; - extern const q15_t cos_factorsQ15_2048[2048]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_8192) - extern const q15_t WeightsQ15_8192[16384]; - extern const q15_t cos_factorsQ15_8192[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_128) - extern const q31_t WeightsQ31_128[256]; - extern const q31_t cos_factorsQ31_128[128]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_512) - extern const q31_t WeightsQ31_512[1024]; - extern const q31_t cos_factorsQ31_512[512]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_2048) - extern const q31_t WeightsQ31_2048[4096]; - extern const q31_t cos_factorsQ31_2048[2048]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_8192) - extern const q31_t WeightsQ31_8192[16384]; - extern const q31_t cos_factorsQ31_8192[8192]; - #endif - -#endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_ALLOW_TABLES) - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q15) - extern const q15_t armRecipTableQ15[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q31) - extern const q31_t armRecipTableQ31[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - /* Tables for Fast Math Sine and Cosine */ - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_F32) - extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q31) - extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q15) - extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - #if defined(ARM_MATH_MVEI) - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q31_MVE) - extern const q31_t sqrtTable_Q31[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - #endif - - #if defined(ARM_MATH_MVEI) - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q15_MVE) - extern const q15_t sqrtTable_Q15[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - #endif - -#endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_TABLES) */ - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) - extern const float32_t exp_tab[8]; - extern const float32_t __logf_lut_f32[8]; -#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) -extern const unsigned char hwLUT[256]; -#endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ - -#endif /* ARM_COMMON_TABLES_H */ - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_const_structs.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_const_structs.h deleted file mode 100644 index 83984c4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_const_structs.h +++ /dev/null @@ -1,76 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_const_structs.h - * Description: Constant structs that are initialized for user convenience. - * For example, some can be given as arguments to the arm_cfft_f32() function. - * - * $Date: 27. January 2017 - * $Revision: V.1.5.1 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_CONST_STRUCTS_H -#define _ARM_CONST_STRUCTS_H - -#include "arm_math.h" -#include "arm_common_tables.h" - - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len16; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len32; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len64; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len128; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len256; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len512; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len1024; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len2048; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len4096; - - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_helium_utils.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_helium_utils.h deleted file mode 100644 index 8568857..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_helium_utils.h +++ /dev/null @@ -1,348 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_helium_utils.h - * Description: Utility functions for Helium development - * - * $Date: 09. September 2019 - * $Revision: V.1.5.1 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_UTILS_HELIUM_H_ -#define _ARM_UTILS_HELIUM_H_ - -/*************************************** - -Definitions available for MVEF and MVEI - -***************************************/ -#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) - -#define INACTIVELANE 0 /* inactive lane content */ - - -#endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) */ - -/*************************************** - -Definitions available for MVEF only - -***************************************/ -#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) - -__STATIC_FORCEINLINE float32_t vecAddAcrossF32Mve(float32x4_t in) -{ - float32_t acc; - - acc = vgetq_lane(in, 0) + vgetq_lane(in, 1) + - vgetq_lane(in, 2) + vgetq_lane(in, 3); - - return acc; -} - -/* newton initial guess */ -#define INVSQRT_MAGIC_F32 0x5f3759df - -#define INVSQRT_NEWTON_MVE_F32(invSqrt, xHalf, xStart)\ -{ \ - float32x4_t tmp; \ - \ - /* tmp = xhalf * x * x */ \ - tmp = vmulq(xStart, xStart); \ - tmp = vmulq(tmp, xHalf); \ - /* (1.5f - xhalf * x * x) */ \ - tmp = vsubq(vdupq_n_f32(1.5f), tmp); \ - /* x = x*(1.5f-xhalf*x*x); */ \ - invSqrt = vmulq(tmp, xStart); \ -} -#endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) */ - -/*************************************** - -Definitions available for MVEI only - -***************************************/ -#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI) - - -#include "arm_common_tables.h" - -/* Following functions are used to transpose matrix in f32 and q31 cases */ -__STATIC_INLINE arm_status arm_mat_trans_32bit_2x2_mve( - uint32_t * pDataSrc, - uint32_t * pDataDest) -{ - static const uint32x4_t vecOffs = { 0, 2, 1, 3 }; - /* - * - * | 0 1 | => | 0 2 | - * | 2 3 | | 1 3 | - * - */ - uint32x4_t vecIn = vldrwq_u32((uint32_t const *)pDataSrc); - vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs, vecIn); - - return (ARM_MATH_SUCCESS); -} - -__STATIC_INLINE arm_status arm_mat_trans_32bit_3x3_mve( - uint32_t * pDataSrc, - uint32_t * pDataDest) -{ - const uint32x4_t vecOffs1 = { 0, 3, 6, 1}; - const uint32x4_t vecOffs2 = { 4, 7, 2, 5}; - /* - * - * | 0 1 2 | | 0 3 6 | 4 x 32 flattened version | 0 3 6 1 | - * | 3 4 5 | => | 1 4 7 | => | 4 7 2 5 | - * | 6 7 8 | | 2 5 8 | (row major) | 8 . . . | - * - */ - uint32x4_t vecIn1 = vldrwq_u32((uint32_t const *) pDataSrc); - uint32x4_t vecIn2 = vldrwq_u32((uint32_t const *) &pDataSrc[4]); - - vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs1, vecIn1); - vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs2, vecIn2); - - pDataDest[8] = pDataSrc[8]; - - return (ARM_MATH_SUCCESS); -} - -__STATIC_INLINE arm_status arm_mat_trans_32bit_4x4_mve(uint32_t * pDataSrc, uint32_t * pDataDest) -{ - /* - * 4x4 Matrix transposition - * is 4 x de-interleave operation - * - * 0 1 2 3 0 4 8 12 - * 4 5 6 7 1 5 9 13 - * 8 9 10 11 2 6 10 14 - * 12 13 14 15 3 7 11 15 - */ - - uint32x4x4_t vecIn; - - vecIn = vld4q((uint32_t const *) pDataSrc); - vstrwq(pDataDest, vecIn.val[0]); - pDataDest += 4; - vstrwq(pDataDest, vecIn.val[1]); - pDataDest += 4; - vstrwq(pDataDest, vecIn.val[2]); - pDataDest += 4; - vstrwq(pDataDest, vecIn.val[3]); - - return (ARM_MATH_SUCCESS); -} - - -__STATIC_INLINE arm_status arm_mat_trans_32bit_generic_mve( - uint16_t srcRows, - uint16_t srcCols, - uint32_t * pDataSrc, - uint32_t * pDataDest) -{ - uint32x4_t vecOffs; - uint32_t i; - uint32_t blkCnt; - uint32_t const *pDataC; - uint32_t *pDataDestR; - uint32x4_t vecIn; - - vecOffs = vidupq_u32((uint32_t)0, 1); - vecOffs = vecOffs * srcCols; - - i = srcCols; - do - { - pDataC = (uint32_t const *) pDataSrc; - pDataDestR = pDataDest; - - blkCnt = srcRows >> 2; - while (blkCnt > 0U) - { - vecIn = vldrwq_gather_shifted_offset_u32(pDataC, vecOffs); - vstrwq(pDataDestR, vecIn); - pDataDestR += 4; - pDataC = pDataC + srcCols * 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * tail - */ - blkCnt = srcRows & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecIn = vldrwq_gather_shifted_offset_u32(pDataC, vecOffs); - vstrwq_p(pDataDestR, vecIn, p0); - } - - pDataSrc += 1; - pDataDest += srcRows; - } - while (--i); - - return (ARM_MATH_SUCCESS); -} - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q31_MVE) -__STATIC_INLINE q31x4_t FAST_VSQRT_Q31(q31x4_t vecIn) -{ - q63x2_t vecTmpLL; - q31x4_t vecTmp0, vecTmp1; - q31_t scale; - q63_t tmp64; - q31x4_t vecNrm, vecDst, vecIdx, vecSignBits; - - - vecSignBits = vclsq(vecIn); - vecSignBits = vbicq(vecSignBits, 1); - /* - * in = in << no_of_sign_bits; - */ - vecNrm = vshlq(vecIn, vecSignBits); - /* - * index = in >> 24; - */ - vecIdx = vecNrm >> 24; - vecIdx = vecIdx << 1; - - vecTmp0 = vldrwq_gather_shifted_offset_s32(sqrtTable_Q31, vecIdx); - - vecIdx = vecIdx + 1; - - vecTmp1 = vldrwq_gather_shifted_offset_s32(sqrtTable_Q31, vecIdx); - - vecTmp1 = vqrdmulhq(vecTmp1, vecNrm); - vecTmp0 = vecTmp0 - vecTmp1; - vecTmp1 = vqrdmulhq(vecTmp0, vecTmp0); - vecTmp1 = vqrdmulhq(vecNrm, vecTmp1); - vecTmp1 = vdupq_n_s32(0x18000000) - vecTmp1; - vecTmp0 = vqrdmulhq(vecTmp0, vecTmp1); - vecTmpLL = vmullbq_int(vecNrm, vecTmp0); - - /* - * scale elements 0, 2 - */ - scale = 26 + (vecSignBits[0] >> 1); - tmp64 = asrl(vecTmpLL[0], scale); - vecDst[0] = (q31_t) tmp64; - - scale = 26 + (vecSignBits[2] >> 1); - tmp64 = asrl(vecTmpLL[1], scale); - vecDst[2] = (q31_t) tmp64; - - vecTmpLL = vmulltq_int(vecNrm, vecTmp0); - - /* - * scale elements 1, 3 - */ - scale = 26 + (vecSignBits[1] >> 1); - tmp64 = asrl(vecTmpLL[0], scale); - vecDst[1] = (q31_t) tmp64; - - scale = 26 + (vecSignBits[3] >> 1); - tmp64 = asrl(vecTmpLL[1], scale); - vecDst[3] = (q31_t) tmp64; - /* - * set negative values to 0 - */ - vecDst = vdupq_m(vecDst, 0, vcmpltq_n_s32(vecIn, 0)); - - return vecDst; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q15_MVE) -__STATIC_INLINE q15x8_t FAST_VSQRT_Q15(q15x8_t vecIn) -{ - q31x4_t vecTmpLev, vecTmpLodd, vecSignL; - q15x8_t vecTmp0, vecTmp1; - q15x8_t vecNrm, vecDst, vecIdx, vecSignBits; - - vecDst = vuninitializedq_s16(); - - vecSignBits = vclsq(vecIn); - vecSignBits = vbicq(vecSignBits, 1); - /* - * in = in << no_of_sign_bits; - */ - vecNrm = vshlq(vecIn, vecSignBits); - - vecIdx = vecNrm >> 8; - vecIdx = vecIdx << 1; - - vecTmp0 = vldrhq_gather_shifted_offset_s16(sqrtTable_Q15, vecIdx); - - vecIdx = vecIdx + 1; - - vecTmp1 = vldrhq_gather_shifted_offset_s16(sqrtTable_Q15, vecIdx); - - vecTmp1 = vqrdmulhq(vecTmp1, vecNrm); - vecTmp0 = vecTmp0 - vecTmp1; - vecTmp1 = vqrdmulhq(vecTmp0, vecTmp0); - vecTmp1 = vqrdmulhq(vecNrm, vecTmp1); - vecTmp1 = vdupq_n_s16(0x1800) - vecTmp1; - vecTmp0 = vqrdmulhq(vecTmp0, vecTmp1); - - vecSignBits = vecSignBits >> 1; - - vecTmpLev = vmullbq_int(vecNrm, vecTmp0); - vecTmpLodd = vmulltq_int(vecNrm, vecTmp0); - - vecTmp0 = vecSignBits + 10; - /* - * negate sign to apply register based vshl - */ - vecTmp0 = -vecTmp0; - - /* - * shift even elements - */ - vecSignL = vmovlbq(vecTmp0); - vecTmpLev = vshlq(vecTmpLev, vecSignL); - /* - * shift odd elements - */ - vecSignL = vmovltq(vecTmp0); - vecTmpLodd = vshlq(vecTmpLodd, vecSignL); - /* - * merge and narrow odd and even parts - */ - vecDst = vmovnbq_s32(vecDst, vecTmpLev); - vecDst = vmovntq_s32(vecDst, vecTmpLodd); - /* - * set negative values to 0 - */ - vecDst = vdupq_m(vecDst, 0, vcmpltq_n_s16(vecIn, 0)); - - return vecDst; -} -#endif - -#endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI) */ - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_math.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_math.h deleted file mode 100644 index 2483e6e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_math.h +++ /dev/null @@ -1,8970 +0,0 @@ -/****************************************************************************** - * @file arm_math.h - * @brief Public header file for CMSIS DSP Library - * @version V1.7.0 - * @date 18. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2010-2019 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - \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 and Cortex-A 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 - * - Filtering functions - * - Matrix functions - * - Transform functions - * - Motor control functions - * - Statistical functions - * - Support functions - * - Interpolation functions - * - Support Vector Machine functions (SVM) - * - Bayes classifier functions - * - Distance functions - * - * The library has generally 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. - * - * Here is the list of pre-built libraries : - * - arm_cortexM7lfdp_math.lib (Cortex-M7, Little endian, Double Precision Floating Point Unit) - * - arm_cortexM7bfdp_math.lib (Cortex-M7, Big endian, Double Precision Floating Point Unit) - * - arm_cortexM7lfsp_math.lib (Cortex-M7, Little endian, Single Precision Floating Point Unit) - * - arm_cortexM7bfsp_math.lib (Cortex-M7, Big endian and Single Precision Floating Point Unit on) - * - arm_cortexM7l_math.lib (Cortex-M7, Little endian) - * - arm_cortexM7b_math.lib (Cortex-M7, Big endian) - * - arm_cortexM4lf_math.lib (Cortex-M4, Little endian, Floating Point Unit) - * - arm_cortexM4bf_math.lib (Cortex-M4, Big endian, Floating Point Unit) - * - arm_cortexM4l_math.lib (Cortex-M4, Little endian) - * - arm_cortexM4b_math.lib (Cortex-M4, Big endian) - * - arm_cortexM3l_math.lib (Cortex-M3, Little endian) - * - arm_cortexM3b_math.lib (Cortex-M3, Big endian) - * - arm_cortexM0l_math.lib (Cortex-M0 / Cortex-M0+, Little endian) - * - arm_cortexM0b_math.lib (Cortex-M0 / Cortex-M0+, Big endian) - * - arm_ARMv8MBLl_math.lib (Armv8-M Baseline, Little endian) - * - arm_ARMv8MMLl_math.lib (Armv8-M Mainline, Little endian) - * - arm_ARMv8MMLlfsp_math.lib (Armv8-M Mainline, Little endian, Single Precision Floating Point Unit) - * - arm_ARMv8MMLld_math.lib (Armv8-M Mainline, Little endian, DSP instructions) - * - arm_ARMv8MMLldfsp_math.lib (Armv8-M Mainline, Little endian, DSP instructions, Single Precision Floating Point Unit) - * - * 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-M cores with little endian and big endian. Same header file will be used for floating point unit(FPU) variants. - * - * - * Examples - * -------- - * - * The library ships with a number of examples which demonstrate how to use the library functions. - * - * Toolchain Support - * ------------ - * - * The library is now tested on Fast Models building with cmake. - * Core M0, M7, A5 are tested. - * - * - * - * Building the Library - * ------------ - * - * The library installer contains a project file to rebuild libraries on MDK toolchain in the CMSIS\\DSP\\Projects\\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 preprocessor macros detailed above. - * - * There is also a work in progress cmake build. The README file is giving more details. - * - * Preprocessor Macros - * ------------ - * - * Each library project have different preprocessor macros. - * - * - 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_LOOPUNROLL: - * - * Define macro ARM_MATH_LOOPUNROLL to enable manual loop unrolling in DSP functions - * - * - ARM_MATH_NEON: - * - * Define macro ARM_MATH_NEON to enable Neon versions of the DSP functions. - * It is not enabled by default when Neon is available because performances are - * dependent on the compiler and target architecture. - * - * - ARM_MATH_NEON_EXPERIMENTAL: - * - * Define macro ARM_MATH_NEON_EXPERIMENTAL to enable experimental Neon versions of - * of some DSP functions. Experimental Neon versions currently do not have better - * performances than the scalar versions. - * - * - ARM_MATH_HELIUM: - * - * It implies the flags ARM_MATH_MVEF and ARM_MATH_MVEI and ARM_MATH_FLOAT16. - * - * - ARM_MATH_MVEF: - * - * Select Helium versions of the f32 algorithms. - * It implies ARM_MATH_FLOAT16 and ARM_MATH_MVEI. - * - * - ARM_MATH_MVEI: - * - * Select Helium versions of the int and fixed point algorithms. - * - * - ARM_MATH_FLOAT16: - * - * Float16 implementations of some algorithms (Requires MVE extension). - * - *
    - * 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\\DSP_Lib_TestSuite | DSP_Lib test suite | - * |\b CMSIS\\DSP\\Examples | Example projects demonstrating the usage of the library functions | - * |\b CMSIS\\DSP\\Include | DSP_Lib include files | - * |\b CMSIS\\DSP\\Lib | DSP_Lib binaries | - * |\b CMSIS\\DSP\\Projects | Projects to rebuild DSP_Lib binaries | - * |\b CMSIS\\DSP\\Source | DSP_Lib source files | - * - *
    - * Revision History of CMSIS-DSP - * ------------ - * Please refer to \ref ChangeLog_pg. - */ - - -/** - * @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 \ref arm_mat_init_f32(), \ref arm_mat_init_q31() and \ref 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 - */ - -/** - * @defgroup groupSVM SVM Functions - * This set of functions is implementing SVM classification on 2 classes. - * The training must be done from scikit-learn. The parameters can be easily - * generated from the scikit-learn object. Some examples are given in - * DSP/Testing/PatternGeneration/SVM.py - * - * If more than 2 classes are needed, the functions in this folder - * will have to be used, as building blocks, to do multi-class classification. - * - * No multi-class classification is provided in this SVM folder. - * - */ - - -/** - * @defgroup groupBayes Bayesian estimators - * - * Implement the naive gaussian Bayes estimator. - * The training must be done from scikit-learn. - * - * The parameters can be easily - * generated from the scikit-learn object. Some examples are given in - * DSP/Testing/PatternGeneration/Bayes.py - */ - -/** - * @defgroup groupDistance Distance functions - * - * Distance functions for use with clustering algorithms. - * There are distance functions for float vectors and boolean vectors. - * - */ - - -#ifndef _ARM_MATH_H -#define _ARM_MATH_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Compiler specific diagnostic adjustment */ -#if defined ( __CC_ARM ) - -#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - -#elif defined ( __GNUC__ ) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wsign-conversion" - #pragma GCC diagnostic ignored "-Wconversion" - #pragma GCC diagnostic ignored "-Wunused-parameter" - -#elif defined ( __ICCARM__ ) - -#elif defined ( __TI_ARM__ ) - -#elif defined ( __CSMC__ ) - -#elif defined ( __TASKING__ ) - -#elif defined ( _MSC_VER ) - -#else - #error Unknown compiler -#endif - - -/* Included for instrinsics definitions */ -#if defined (_MSC_VER ) -#include -#define __STATIC_FORCEINLINE static __forceinline -#define __STATIC_INLINE static __inline -#define __ALIGNED(x) __declspec(align(x)) - -#elif defined (__GNUC_PYTHON__) -#include -#define __ALIGNED(x) __attribute__((aligned(x))) -#define __STATIC_FORCEINLINE static __attribute__((inline)) -#define __STATIC_INLINE static __attribute__((inline)) -#pragma GCC diagnostic ignored "-Wunused-function" -#pragma GCC diagnostic ignored "-Wattributes" - -#else -#include "cmsis_compiler.h" -#endif - - - -#include -#include -#include -#include - - -#define F64_MAX ((float64_t)DBL_MAX) -#define F32_MAX ((float32_t)FLT_MAX) - -#if defined(ARM_MATH_FLOAT16) -#define F16_MAX ((float16_t)FLT_MAX) -#endif - -#define F64_MIN (-DBL_MAX) -#define F32_MIN (-FLT_MAX) - -#if defined(ARM_MATH_FLOAT16) -#define F16_MIN (-(float16_t)FLT_MAX) -#endif - -#define F64_ABSMAX ((float64_t)DBL_MAX) -#define F32_ABSMAX ((float32_t)FLT_MAX) - -#if defined(ARM_MATH_FLOAT16) -#define F16_ABSMAX ((float16_t)FLT_MAX) -#endif - -#define F64_ABSMIN ((float64_t)0.0) -#define F32_ABSMIN ((float32_t)0.0) - -#if defined(ARM_MATH_FLOAT16) -#define F16_ABSMIN ((float16_t)0.0) -#endif - -#define Q31_MAX ((q31_t)(0x7FFFFFFFL)) -#define Q15_MAX ((q15_t)(0x7FFF)) -#define Q7_MAX ((q7_t)(0x7F)) -#define Q31_MIN ((q31_t)(0x80000000L)) -#define Q15_MIN ((q15_t)(0x8000)) -#define Q7_MIN ((q7_t)(0x80)) - -#define Q31_ABSMAX ((q31_t)(0x7FFFFFFFL)) -#define Q15_ABSMAX ((q15_t)(0x7FFF)) -#define Q7_ABSMAX ((q7_t)(0x7F)) -#define Q31_ABSMIN ((q31_t)0) -#define Q15_ABSMIN ((q15_t)0) -#define Q7_ABSMIN ((q7_t)0) - -/* evaluate ARM DSP feature */ -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - #define ARM_MATH_DSP 1 -#endif - -#if defined(ARM_MATH_NEON) -#include -#endif - -#if defined (ARM_MATH_HELIUM) - #define ARM_MATH_MVEF - #define ARM_MATH_FLOAT16 -#endif - -#if defined (ARM_MATH_MVEF) - #define ARM_MATH_MVEI - #define ARM_MATH_FLOAT16 -#endif - -#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) -#include -#endif - - - /** - * @brief Macros required for reciprocal calculation in Normalized LMS - */ - -#define DELTA_Q31 ((q31_t)(0x100)) -#define DELTA_Q15 ((q15_t)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_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 Macros for complex numbers - */ - - /* Dimension C vector space */ - #define CMPLX_DIM 2 - - /** - * @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, /**< 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 vector types - */ -#if defined(ARM_MATH_NEON) || defined (ARM_MATH_MVEI) - /** - * @brief 64-bit fractional 128-bit vector data type in 1.63 format - */ - typedef int64x2_t q63x2_t; - - /** - * @brief 32-bit fractional 128-bit vector data type in 1.31 format. - */ - typedef int32x4_t q31x4_t; - - /** - * @brief 16-bit fractional 128-bit vector data type with 16-bit alignement in 1.15 format. - */ - typedef __ALIGNED(2) int16x8_t q15x8_t; - - /** - * @brief 8-bit fractional 128-bit vector data type with 8-bit alignement in 1.7 format. - */ - typedef __ALIGNED(1) int8x16_t q7x16_t; - - /** - * @brief 32-bit fractional 128-bit vector pair data type in 1.31 format. - */ - typedef int32x4x2_t q31x4x2_t; - - /** - * @brief 32-bit fractional 128-bit vector quadruplet data type in 1.31 format. - */ - typedef int32x4x4_t q31x4x4_t; - - /** - * @brief 16-bit fractional 128-bit vector pair data type in 1.15 format. - */ - typedef int16x8x2_t q15x8x2_t; - - /** - * @brief 16-bit fractional 128-bit vector quadruplet data type in 1.15 format. - */ - typedef int16x8x4_t q15x8x4_t; - - /** - * @brief 8-bit fractional 128-bit vector pair data type in 1.7 format. - */ - typedef int8x16x2_t q7x16x2_t; - - /** - * @brief 8-bit fractional 128-bit vector quadruplet data type in 1.7 format. - */ - typedef int8x16x4_t q7x16x4_t; - - /** - * @brief 32-bit fractional data type in 9.23 format. - */ - typedef int32_t q23_t; - - /** - * @brief 32-bit fractional 128-bit vector data type in 9.23 format. - */ - typedef int32x4_t q23x4_t; - - /** - * @brief 64-bit status 128-bit vector data type. - */ - typedef int64x2_t status64x2_t; - - /** - * @brief 32-bit status 128-bit vector data type. - */ - typedef int32x4_t status32x4_t; - - /** - * @brief 16-bit status 128-bit vector data type. - */ - typedef int16x8_t status16x8_t; - - /** - * @brief 8-bit status 128-bit vector data type. - */ - typedef int8x16_t status8x16_t; - - -#endif - -#if defined(ARM_MATH_NEON) || defined(ARM_MATH_MVEF) /* floating point vector*/ - /** - * @brief 32-bit floating-point 128-bit vector type - */ - typedef float32x4_t f32x4_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit floating-point 128-bit vector data type - */ - typedef __ALIGNED(2) float16x8_t f16x8_t; -#endif - - /** - * @brief 32-bit floating-point 128-bit vector pair data type - */ - typedef float32x4x2_t f32x4x2_t; - - /** - * @brief 32-bit floating-point 128-bit vector quadruplet data type - */ - typedef float32x4x4_t f32x4x4_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit floating-point 128-bit vector pair data type - */ - typedef float16x8x2_t f16x8x2_t; - - /** - * @brief 16-bit floating-point 128-bit vector quadruplet data type - */ - typedef float16x8x4_t f16x8x4_t; -#endif - - /** - * @brief 32-bit ubiquitous 128-bit vector data type - */ - typedef union _any32x4_t - { - float32x4_t f; - int32x4_t i; - } any32x4_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit ubiquitous 128-bit vector data type - */ - typedef union _any16x8_t - { - float16x8_t f; - int16x8_t i; - } any16x8_t; -#endif - -#endif - -#if defined(ARM_MATH_NEON) - /** - * @brief 32-bit fractional 64-bit vector data type in 1.31 format. - */ - typedef int32x2_t q31x2_t; - - /** - * @brief 16-bit fractional 64-bit vector data type in 1.15 format. - */ - typedef __ALIGNED(2) int16x4_t q15x4_t; - - /** - * @brief 8-bit fractional 64-bit vector data type in 1.7 format. - */ - typedef __ALIGNED(1) int8x8_t q7x8_t; - - /** - * @brief 32-bit float 64-bit vector data type. - */ - typedef float32x2_t f32x2_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit float 64-bit vector data type. - */ - typedef __ALIGNED(2) float16x4_t f16x4_t; -#endif - - /** - * @brief 32-bit floating-point 128-bit vector triplet data type - */ - typedef float32x4x3_t f32x4x3_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit floating-point 128-bit vector triplet data type - */ - typedef float16x8x3_t f16x8x3_t; -#endif - - /** - * @brief 32-bit fractional 128-bit vector triplet data type in 1.31 format - */ - typedef int32x4x3_t q31x4x3_t; - - /** - * @brief 16-bit fractional 128-bit vector triplet data type in 1.15 format - */ - typedef int16x8x3_t q15x8x3_t; - - /** - * @brief 8-bit fractional 128-bit vector triplet data type in 1.7 format - */ - typedef int8x16x3_t q7x16x3_t; - - /** - * @brief 32-bit floating-point 64-bit vector pair data type - */ - typedef float32x2x2_t f32x2x2_t; - - /** - * @brief 32-bit floating-point 64-bit vector triplet data type - */ - typedef float32x2x3_t f32x2x3_t; - - /** - * @brief 32-bit floating-point 64-bit vector quadruplet data type - */ - typedef float32x2x4_t f32x2x4_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit floating-point 64-bit vector pair data type - */ - typedef float16x4x2_t f16x4x2_t; - - /** - * @brief 16-bit floating-point 64-bit vector triplet data type - */ - typedef float16x4x3_t f16x4x3_t; - - /** - * @brief 16-bit floating-point 64-bit vector quadruplet data type - */ - typedef float16x4x4_t f16x4x4_t; -#endif - - /** - * @brief 32-bit fractional 64-bit vector pair data type in 1.31 format - */ - typedef int32x2x2_t q31x2x2_t; - - /** - * @brief 32-bit fractional 64-bit vector triplet data type in 1.31 format - */ - typedef int32x2x3_t q31x2x3_t; - - /** - * @brief 32-bit fractional 64-bit vector quadruplet data type in 1.31 format - */ - typedef int32x4x3_t q31x2x4_t; - - /** - * @brief 16-bit fractional 64-bit vector pair data type in 1.15 format - */ - typedef int16x4x2_t q15x4x2_t; - - /** - * @brief 16-bit fractional 64-bit vector triplet data type in 1.15 format - */ - typedef int16x4x2_t q15x4x3_t; - - /** - * @brief 16-bit fractional 64-bit vector quadruplet data type in 1.15 format - */ - typedef int16x4x3_t q15x4x4_t; - - /** - * @brief 8-bit fractional 64-bit vector pair data type in 1.7 format - */ - typedef int8x8x2_t q7x8x2_t; - - /** - * @brief 8-bit fractional 64-bit vector triplet data type in 1.7 format - */ - typedef int8x8x3_t q7x8x3_t; - - /** - * @brief 8-bit fractional 64-bit vector quadruplet data type in 1.7 format - */ - typedef int8x8x4_t q7x8x4_t; - - /** - * @brief 32-bit ubiquitous 64-bit vector data type - */ - typedef union _any32x2_t - { - float32x2_t f; - int32x2_t i; - } any32x2_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit ubiquitous 64-bit vector data type - */ - typedef union _any16x4_t - { - float16x4_t f; - int16x4_t i; - } any16x4_t; -#endif - - /** - * @brief 32-bit status 64-bit vector data type. - */ - typedef int32x4_t status32x2_t; - - /** - * @brief 16-bit status 64-bit vector data type. - */ - typedef int16x8_t status16x4_t; - - /** - * @brief 8-bit status 64-bit vector data type. - */ - typedef int8x16_t status8x8_t; - -#endif - - - -/** - @brief definition to read/write two 16 bit values. - @deprecated - */ -#if defined ( __CC_ARM ) - #define __SIMD32_TYPE int32_t __packed -#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - #define __SIMD32_TYPE int32_t -#elif defined ( __GNUC__ ) - #define __SIMD32_TYPE int32_t -#elif defined ( __ICCARM__ ) - #define __SIMD32_TYPE int32_t __packed -#elif defined ( __TI_ARM__ ) - #define __SIMD32_TYPE int32_t -#elif defined ( __CSMC__ ) - #define __SIMD32_TYPE int32_t -#elif defined ( __TASKING__ ) - #define __SIMD32_TYPE __un(aligned) int32_t -#elif defined(_MSC_VER ) - #define __SIMD32_TYPE int32_t -#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)) - -#define STEP(x) (x) <= 0 ? 0 : 1 -#define SQ(x) ((x) * (x)) - -/* SIMD replacement */ - - -/** - @brief Read 2 Q15 from Q15 pointer. - @param[in] pQ15 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q15x2 ( - q15_t * pQ15) -{ - q31_t val; - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, pQ15, 4); -#else - val = (pQ15[1] << 16) | (pQ15[0] & 0x0FFFF) ; -#endif - - return (val); -} - -/** - @brief Read 2 Q15 from Q15 pointer and increment pointer afterwards. - @param[in] pQ15 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q15x2_ia ( - q15_t ** pQ15) -{ - q31_t val; - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, *pQ15, 4); -#else - val = ((*pQ15)[1] << 16) | ((*pQ15)[0] & 0x0FFFF); -#endif - - *pQ15 += 2; - return (val); -} - -/** - @brief Read 2 Q15 from Q15 pointer and decrement pointer afterwards. - @param[in] pQ15 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q15x2_da ( - q15_t ** pQ15) -{ - q31_t val; - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, *pQ15, 4); -#else - val = ((*pQ15)[1] << 16) | ((*pQ15)[0] & 0x0FFFF); -#endif - - *pQ15 -= 2; - return (val); -} - -/** - @brief Write 2 Q15 to Q15 pointer and increment pointer afterwards. - @param[in] pQ15 points to input value - @param[in] value Q31 value - @return none - */ -__STATIC_FORCEINLINE void write_q15x2_ia ( - q15_t ** pQ15, - q31_t value) -{ - q31_t val = value; -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (*pQ15, &val, 4); -#else - (*pQ15)[0] = (val & 0x0FFFF); - (*pQ15)[1] = (val >> 16) & 0x0FFFF; -#endif - - *pQ15 += 2; -} - -/** - @brief Write 2 Q15 to Q15 pointer. - @param[in] pQ15 points to input value - @param[in] value Q31 value - @return none - */ -__STATIC_FORCEINLINE void write_q15x2 ( - q15_t * pQ15, - q31_t value) -{ - q31_t val = value; - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (pQ15, &val, 4); -#else - pQ15[0] = val & 0x0FFFF; - pQ15[1] = val >> 16; -#endif -} - - -/** - @brief Read 4 Q7 from Q7 pointer and increment pointer afterwards. - @param[in] pQ7 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q7x4_ia ( - q7_t ** pQ7) -{ - q31_t val; - - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, *pQ7, 4); -#else - val =(((*pQ7)[3] & 0x0FF) << 24) | (((*pQ7)[2] & 0x0FF) << 16) | (((*pQ7)[1] & 0x0FF) << 8) | ((*pQ7)[0] & 0x0FF); -#endif - - *pQ7 += 4; - - return (val); -} - -/** - @brief Read 4 Q7 from Q7 pointer and decrement pointer afterwards. - @param[in] pQ7 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q7x4_da ( - q7_t ** pQ7) -{ - q31_t val; -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, *pQ7, 4); -#else - val = ((((*pQ7)[3]) & 0x0FF) << 24) | ((((*pQ7)[2]) & 0x0FF) << 16) | ((((*pQ7)[1]) & 0x0FF) << 8) | ((*pQ7)[0] & 0x0FF); -#endif - *pQ7 -= 4; - - return (val); -} - -/** - @brief Write 4 Q7 to Q7 pointer and increment pointer afterwards. - @param[in] pQ7 points to input value - @param[in] value Q31 value - @return none - */ -__STATIC_FORCEINLINE void write_q7x4_ia ( - q7_t ** pQ7, - q31_t value) -{ - q31_t val = value; -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (*pQ7, &val, 4); -#else - (*pQ7)[0] = val & 0x0FF; - (*pQ7)[1] = (val >> 8) & 0x0FF; - (*pQ7)[2] = (val >> 16) & 0x0FF; - (*pQ7)[3] = (val >> 24) & 0x0FF; - -#endif - *pQ7 += 4; -} - -/* - -Normally those kind of definitions are in a compiler file -in Core or Core_A. - -But for MSVC compiler it is a bit special. The goal is very specific -to CMSIS-DSP and only to allow the use of this library from other -systems like Python or Matlab. - -MSVC is not going to be used to cross-compile to ARM. So, having a MSVC -compiler file in Core or Core_A would not make sense. - -*/ -#if defined ( _MSC_VER ) || defined(__GNUC_PYTHON__) - __STATIC_FORCEINLINE uint8_t __CLZ(uint32_t data) - { - if (data == 0U) { return 32U; } - - uint32_t count = 0U; - uint32_t mask = 0x80000000U; - - while ((data & mask) == 0U) - { - count += 1U; - mask = mask >> 1U; - } - return count; - } - - __STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) - { - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; - } - - __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) - { - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; - } -#endif - -#ifndef ARM_MATH_DSP - /** - * @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_FORCEINLINE 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_FORCEINLINE 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_FORCEINLINE 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_FORCEINLINE 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_FORCEINLINE q63_t mult32x64( - q63_t x, - q31_t y) - { - return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) + - (((q63_t) (x >> 32) * y) ) ); - } - - /** - * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type. - */ - __STATIC_FORCEINLINE uint32_t arm_recip_q31( - q31_t in, - q31_t * dst, - const 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_FORCEINLINE uint32_t arm_recip_q15( - q15_t in, - q15_t * dst, - const 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 Integer exponentiation - * @param[in] x value - * @param[in] nb integer exponent >= 1 - * @return x^nb - * - */ -__STATIC_INLINE float32_t arm_exponent_f32(float32_t x, int32_t nb) -{ - float32_t r = x; - nb --; - while(nb > 0) - { - r = r * x; - nb--; - } - return(r); -} - -/** - * @brief 64-bit to 32-bit unsigned normalization - * @param[in] in is input unsigned long long value - * @param[out] normalized is the 32-bit normalized value - * @param[out] norm is norm scale - */ -__STATIC_INLINE void arm_norm_64_to_32u(uint64_t in, int32_t * normalized, int32_t *norm) -{ - int32_t n1; - int32_t hi = (int32_t) (in >> 32); - int32_t lo = (int32_t) ((in << 32) >> 32); - - n1 = __CLZ(hi) - 32; - if (!n1) - { - /* - * input fits in 32-bit - */ - n1 = __CLZ(lo); - if (!n1) - { - /* - * MSB set, need to scale down by 1 - */ - *norm = -1; - *normalized = (((uint32_t) lo) >> 1); - } else - { - if (n1 == 32) - { - /* - * input is zero - */ - *norm = 0; - *normalized = 0; - } else - { - /* - * 32-bit normalization - */ - *norm = n1 - 1; - *normalized = lo << *norm; - } - } - } else - { - /* - * input fits in 64-bit - */ - n1 = 1 - n1; - *norm = -n1; - /* - * 64 bit normalization - */ - *normalized = (((uint32_t) lo) >> n1) | (hi << (32 - n1)); - } -} - -__STATIC_INLINE q31_t arm_div_q63_to_q31(q63_t num, q31_t den) -{ - q31_t result; - uint64_t absNum; - int32_t normalized; - int32_t norm; - - /* - * if sum fits in 32bits - * avoid costly 64-bit division - */ - absNum = num > 0 ? num : -num; - arm_norm_64_to_32u(absNum, &normalized, &norm); - if (norm > 0) - /* - * 32-bit division - */ - result = (q31_t) num / den; - else - /* - * 64-bit division - */ - result = (q31_t) (num / den); - - return result; -} - - -/* - * @brief C custom defined intrinsic functions - */ -#if !defined (ARM_MATH_DSP) - - /* - * @brief C custom defined QADD8 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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) )); - } - - /* - * @brief C custom defined SMMLA - */ - __STATIC_FORCEINLINE int32_t __SMMLA( - int32_t x, - int32_t y, - int32_t sum) - { - return (sum + (int32_t) (((int64_t) x * y) >> 32)); - } - -#endif /* !defined (ARM_MATH_DSP) */ - - - /** - * @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. */ - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - /** - * @brief Processing function for the fast Q15 FIR filter (fast version). - * @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, - const 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 either - * 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, - const 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, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - /** - * @brief Processing function for the fast Q31 FIR filter (fast version). - * @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_fast_q31( - const arm_fir_instance_q31 * S, - const 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, - const 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, - const 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, - const 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. */ - const 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. */ - const 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. */ - const float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ - } arm_biquad_casd_df1_inst_f32; - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - /** - * @brief Instance structure for the modified Biquad coefs required by vectorized code. - */ - typedef struct - { - float32_t coeffs[8][4]; /**< Points to the array of modified coefficients. The array is of length 32. There is one per stage */ - } arm_biquad_mod_coef_f32; -#endif - - /** - * @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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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] pCoeffsMod points to the modified filter coefficients (only MVE version). - * @param[in] pState points to the state buffer. - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - void arm_biquad_cascade_df1_mve_init_f32( - arm_biquad_casd_df1_inst_f32 * S, - uint8_t numStages, - const float32_t * pCoeffs, - arm_biquad_mod_coef_f32 * pCoeffsMod, - float32_t * pState); -#endif - - void arm_biquad_cascade_df1_init_f32( - arm_biquad_casd_df1_inst_f32 * S, - uint8_t numStages, - const float32_t * pCoeffs, - float32_t * pState); - - - /** - * @brief Compute the logical bitwise AND of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_and_u16( - const uint16_t * pSrcA, - const uint16_t * pSrcB, - uint16_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise AND of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_and_u32( - const uint32_t * pSrcA, - const uint32_t * pSrcB, - uint32_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise AND of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_and_u8( - const uint8_t * pSrcA, - const uint8_t * pSrcB, - uint8_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise OR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_or_u16( - const uint16_t * pSrcA, - const uint16_t * pSrcB, - uint16_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise OR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_or_u32( - const uint32_t * pSrcA, - const uint32_t * pSrcB, - uint32_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise OR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_or_u8( - const uint8_t * pSrcA, - const uint8_t * pSrcB, - uint8_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise NOT of a fixed-point vector. - * @param[in] pSrc points to input vector - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_not_u16( - const uint16_t * pSrc, - uint16_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise NOT of a fixed-point vector. - * @param[in] pSrc points to input vector - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_not_u32( - const uint32_t * pSrc, - uint32_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise NOT of a fixed-point vector. - * @param[in] pSrc points to input vector - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_not_u8( - const uint8_t * pSrc, - uint8_t * pDst, - uint32_t blockSize); - -/** - * @brief Compute the logical bitwise XOR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_xor_u16( - const uint16_t * pSrcA, - const uint16_t * pSrcB, - uint16_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise XOR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_xor_u32( - const uint32_t * pSrcA, - const uint32_t * pSrcB, - uint32_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise XOR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_xor_u8( - const uint8_t * pSrcA, - const uint8_t * pSrcB, - uint8_t * pDst, - uint32_t blockSize); - - /** - * @brief Struct for specifying sorting algorithm - */ - typedef enum - { - ARM_SORT_BITONIC = 0, - /**< Bitonic sort */ - ARM_SORT_BUBBLE = 1, - /**< Bubble sort */ - ARM_SORT_HEAP = 2, - /**< Heap sort */ - ARM_SORT_INSERTION = 3, - /**< Insertion sort */ - ARM_SORT_QUICK = 4, - /**< Quick sort */ - ARM_SORT_SELECTION = 5 - /**< Selection sort */ - } arm_sort_alg; - - /** - * @brief Struct for specifying sorting algorithm - */ - typedef enum - { - ARM_SORT_DESCENDING = 0, - /**< Descending order (9 to 0) */ - ARM_SORT_ASCENDING = 1 - /**< Ascending order (0 to 9) */ - } arm_sort_dir; - - /** - * @brief Instance structure for the sorting algorithms. - */ - typedef struct - { - arm_sort_alg alg; /**< Sorting algorithm selected */ - arm_sort_dir dir; /**< Sorting order (direction) */ - } arm_sort_instance_f32; - - /** - * @param[in] S points to an instance of the sorting 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_sort_f32( - const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - /** - * @param[in,out] S points to an instance of the sorting structure. - * @param[in] alg Selected algorithm. - * @param[in] dir Sorting order. - */ - void arm_sort_init_f32( - arm_sort_instance_f32 * S, - arm_sort_alg alg, - arm_sort_dir dir); - - /** - * @brief Instance structure for the sorting algorithms. - */ - typedef struct - { - arm_sort_dir dir; /**< Sorting order (direction) */ - float32_t * buffer; /**< Working buffer */ - } arm_merge_sort_instance_f32; - - /** - * @param[in] S points to an instance of the sorting structure. - * @param[in,out] 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_merge_sort_f32( - const arm_merge_sort_instance_f32 * S, - float32_t *pSrc, - float32_t *pDst, - uint32_t blockSize); - - /** - * @param[in,out] S points to an instance of the sorting structure. - * @param[in] dir Sorting order. - * @param[in] buffer Working buffer. - */ - void arm_merge_sort_init_f32( - arm_merge_sort_instance_f32 * S, - arm_sort_dir dir, - float32_t * buffer); - - /** - * @brief Struct for specifying cubic spline type - */ - typedef enum - { - ARM_SPLINE_NATURAL = 0, /**< Natural spline */ - ARM_SPLINE_PARABOLIC_RUNOUT = 1 /**< Parabolic runout spline */ - } arm_spline_type; - - /** - * @brief Instance structure for the floating-point cubic spline interpolation. - */ - typedef struct - { - arm_spline_type type; /**< Type (boundary conditions) */ - const float32_t * x; /**< x values */ - const float32_t * y; /**< y values */ - uint32_t n_x; /**< Number of known data points */ - float32_t * coeffs; /**< Coefficients buffer (b,c, and d) */ - } arm_spline_instance_f32; - - /** - * @brief Processing function for the floating-point cubic spline interpolation. - * @param[in] S points to an instance of the floating-point spline structure. - * @param[in] xq points to the x values ot the interpolated data points. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples of output data. - */ - void arm_spline_f32( - arm_spline_instance_f32 * S, - const float32_t * xq, - float32_t * pDst, - uint32_t blockSize); - - /** - * @brief Initialization function for the floating-point cubic spline interpolation. - * @param[in,out] S points to an instance of the floating-point spline structure. - * @param[in] type type of cubic spline interpolation (boundary conditions) - * @param[in] x points to the x values of the known data points. - * @param[in] y points to the y values of the known data points. - * @param[in] n number of known data points. - * @param[in] coeffs coefficients array for b, c, and d - * @param[in] tempBuffer buffer array for internal computations - */ - void arm_spline_init_f32( - arm_spline_instance_f32 * S, - arm_spline_type type, - const float32_t * x, - const float32_t * y, - uint32_t n, - float32_t * coeffs, - float32_t * tempBuffer); - - /** - * @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 . */ -#if !defined (ARM_MATH_DSP) - 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( - const q7_t * pSrcA, - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const float32_t * pSrcA, - const 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. */ - const q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ - const 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. */ - const q15_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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. */ - const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ - const 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. */ - const q31_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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. */ - const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - const 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. */ - const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - const 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. */ -#if defined(ARM_MATH_MVEI) - const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ - const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ - const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ - const q15_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ - const q15_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ - const q15_t *rearranged_twiddle_stride3; -#endif - } arm_cfft_instance_q15; - -arm_status arm_cfft_init_q15( - arm_cfft_instance_q15 * S, - uint16_t fftLen); - -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. */ -#if defined(ARM_MATH_MVEI) - const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ - const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ - const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ - const q31_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ - const q31_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ - const q31_t *rearranged_twiddle_stride3; -#endif - } arm_cfft_instance_q31; - -arm_status arm_cfft_init_q31( - arm_cfft_instance_q31 * S, - uint16_t fftLen); - -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. */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ - const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ - const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ - const float32_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ - const float32_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ - const float32_t *rearranged_twiddle_stride3; -#endif - } arm_cfft_instance_f32; - - - arm_status arm_cfft_init_f32( - arm_cfft_instance_f32 * S, - uint16_t fftLen); - - void arm_cfft_f32( - const arm_cfft_instance_f32 * S, - float32_t * p1, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - - - /** - * @brief Instance structure for the Double Precision Floating-point CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - const float64_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_f64; - - void arm_cfft_f64( - const arm_cfft_instance_f64 * S, - float64_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. */ - const q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - const q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ -#if defined(ARM_MATH_MVEI) - arm_cfft_instance_q15 cfftInst; -#else - const arm_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */ -#endif - } 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. */ - const q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - const q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ -#if defined(ARM_MATH_MVEI) - arm_cfft_instance_q31 cfftInst; -#else - const arm_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */ -#endif - } 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. */ - const float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - const 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 Double Precision Floating-point RFFT/RIFFT function. - */ -typedef struct - { - arm_cfft_instance_f64 Sint; /**< Internal CFFT structure. */ - uint16_t fftLenRFFT; /**< length of the real sequence */ - const float64_t * pTwiddleRFFT; /**< Twiddle factors real stage */ - } arm_rfft_fast_instance_f64 ; - -arm_status arm_rfft_fast_init_f64 ( - arm_rfft_fast_instance_f64 * S, - uint16_t fftLen); - - -void arm_rfft_fast_f64( - arm_rfft_fast_instance_f64 * S, - float64_t * p, float64_t * pOut, - uint8_t ifftFlag); - - - /** - * @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 */ - const 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( - const 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. */ - const float32_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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. */ - const q31_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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. */ - const q15_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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( - const float32_t * pSrcA, - const 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( - const q7_t * pSrcA, - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const float32_t * pSrcA, - const 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( - const q7_t * pSrcA, - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const float32_t * pSrcA, - const 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( - const q7_t * pSrcA, - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const float32_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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( - const float32_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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. */ - const 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. */ - const 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 floating-point FIR decimator. - */ -typedef struct - { - uint8_t M; /**< decimation factor. */ - uint16_t numTaps; /**< number of coefficients in the filter. */ - const 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 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 samples to process - */ -void arm_fir_decimate_f32( - const arm_fir_decimate_instance_f32 * S, - const 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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_LENGTH_ERROR : 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, - const 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, - const 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, - const 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, - const 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, - const 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( - const arm_fir_decimate_instance_q31 * S, - const 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, - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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. */ - const 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, - const 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, - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const float64_t * pSrc, - float64_t * pDst, - uint32_t blockSize); - - -#if defined(ARM_MATH_NEON) -void arm_biquad_cascade_df2T_compute_coefs_f32( - arm_biquad_cascade_df2T_instance_f32 * S, - uint8_t numStages, - float32_t * pCoeffs); -#endif - /** - * @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, - const 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, - const 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, - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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. */ - const 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, - const 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. */ - const 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, - const 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( - const float32_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst); - - -/** - @brief Correlation of Q15 sequences (fast version). - @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_fast_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst); - - -/** - @brief Correlation of Q15 sequences (fast version). - @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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst); - - -/** - @brief Correlation of Q31 sequences (fast version). - @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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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. */ - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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 processed output sample. - */ - __STATIC_FORCEINLINE 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 processed output sample. - - \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 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_FORCEINLINE 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 processed output sample. - - \par Scaling and Overflow Behavior - 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_FORCEINLINE q15_t arm_pid_q15( - arm_pid_instance_q15 * S, - q15_t in) - { - q63_t acc; - q15_t out; - -#if defined (ARM_MATH_DSP) - /* 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] */ - acc = (q63_t)__SMLALD((uint32_t)S->A1, (uint32_t)read_q15x2 (S->state), (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((q31_t)(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 - * @return none - */ - __STATIC_FORCEINLINE 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 - @return none - - \par Scaling and Overflow Behavior - 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_FORCEINLINE 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 - */ - - - /** - * @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 - * @return none - */ - __STATIC_FORCEINLINE 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 - @return none - - \par Scaling and Overflow Behavior - 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_FORCEINLINE 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 - */ - - - - /** - * @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 - * @return none - * - * The function implements the forward Park transform. - * - */ - __STATIC_FORCEINLINE 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 - @return none - - \par Scaling and Overflow Behavior - 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_FORCEINLINE 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 - */ - - - /** - * @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 - * @return none - */ - __STATIC_FORCEINLINE 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 - @return none - - @par Scaling and Overflow Behavior - 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_FORCEINLINE 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 - */ - - - /** - * @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_FORCEINLINE 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 - 1)) - { - /* 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_FORCEINLINE 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_FORCEINLINE 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_FORCEINLINE 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); - - -/** - @brief Floating-point vector of log values. - @param[in] pSrc points to the input vector - @param[out] pDst points to the output vector - @param[in] blockSize number of samples in each vector - @return none - */ - void arm_vlog_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - -/** - @brief Floating-point vector of exp values. - @param[in] pSrc points to the input vector - @param[out] pDst points to the output vector - @param[in] blockSize number of samples in each vector - @return none - */ - void arm_vexp_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - /** - * @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 execution status - - \ref ARM_MATH_SUCCESS : input value is positive - - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 - */ -__STATIC_FORCEINLINE arm_status arm_sqrt_f32( - float32_t in, - float32_t * pOut) - { - if (in >= 0.0f) - { -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - *pOut = __sqrtf(in); - #else - *pOut = sqrtf(in); - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - __ASM("VSQRT.F32 %0,%1" : "=t"(*pOut) : "t"(in)); - #else - *pOut = sqrtf(in); - #endif - -#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 points to square root of input value - @return execution status - - \ref ARM_MATH_SUCCESS : input value is positive - - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 - */ -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 points to square root of input value - @return execution status - - \ref ARM_MATH_SUCCESS : input value is positive - - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 - */ -arm_status arm_sqrt_q15( - q15_t in, - q15_t * pOut); - - /** - * @brief Vector Floating-point square root function. - * @param[in] pIn input vector. - * @param[out] pOut vector of square roots of input elements. - * @param[in] len length of input vector. - * @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. - */ - void arm_vsqrt_f32( - float32_t * pIn, - float32_t * pOut, - uint16_t len); - - void arm_vsqrt_q31( - q31_t * pIn, - q31_t * pOut, - uint16_t len); - - void arm_vsqrt_q15( - q15_t * pIn, - q15_t * pOut, - uint16_t len); - - /** - * @} end of SQRT group - */ - - - /** - * @brief floating-point Circular write function. - */ - __STATIC_FORCEINLINE 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_FORCEINLINE 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; - int32_t* 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 = 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 == 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_FORCEINLINE 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_FORCEINLINE 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; - q15_t* 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 = 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 == 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_FORCEINLINE 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_FORCEINLINE 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; - q7_t* 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 = 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 == 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const float32_t * pSrcA, - const 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( - const q15_t * pSrcCmplx, - const 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( - const q31_t * pSrcCmplx, - const 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( - const float32_t * pSrcCmplx, - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex); - - /** - @brief Maximum value of a floating-point vector. - @param[in] pSrc points to the input vector - @param[in] blockSize number of samples in input vector - @param[out] pResult maximum value returned here - @return none - */ - void arm_max_no_idx_f32( - const float32_t *pSrc, - uint32_t blockSize, - float32_t *pResult); - - /** - * @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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const float32_t * pSrcA, - const 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( - const 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( - const 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( - const float32_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @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( - const q31_t * pSrc, - float32_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( - const 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( - const 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( - const 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( - const 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( - const q15_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @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( - const q7_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @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( - const q7_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @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( - const q7_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - -/** - * @brief Struct for specifying SVM Kernel - */ -typedef enum -{ - ARM_ML_KERNEL_LINEAR = 0, - /**< Linear kernel */ - ARM_ML_KERNEL_POLYNOMIAL = 1, - /**< Polynomial kernel */ - ARM_ML_KERNEL_RBF = 2, - /**< Radial Basis Function kernel */ - ARM_ML_KERNEL_SIGMOID = 3 - /**< Sigmoid kernel */ -} arm_ml_kernel_type; - - -/** - * @brief Instance structure for linear SVM prediction function. - */ -typedef struct -{ - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ -} arm_svm_linear_instance_f32; - - -/** - * @brief Instance structure for polynomial SVM prediction function. - */ -typedef struct -{ - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - int32_t degree; /**< Polynomial degree */ - float32_t coef0; /**< Polynomial constant */ - float32_t gamma; /**< Gamma factor */ -} arm_svm_polynomial_instance_f32; - -/** - * @brief Instance structure for rbf SVM prediction function. - */ -typedef struct -{ - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - float32_t gamma; /**< Gamma factor */ -} arm_svm_rbf_instance_f32; - -/** - * @brief Instance structure for sigmoid SVM prediction function. - */ -typedef struct -{ - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - float32_t coef0; /**< Independant constant */ - float32_t gamma; /**< Gamma factor */ -} arm_svm_sigmoid_instance_f32; - -/** - * @brief SVM linear instance init function - * @param[in] S Parameters for SVM functions - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @return none. - * - */ - - -void arm_svm_linear_init_f32(arm_svm_linear_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes); - -/** - * @brief SVM linear prediction - * @param[in] S Pointer to an instance of the linear SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult Decision value - * @return none. - * - */ - -void arm_svm_linear_predict_f32(const arm_svm_linear_instance_f32 *S, - const float32_t * in, - int32_t * pResult); - - -/** - * @brief SVM polynomial instance init function - * @param[in] S points to an instance of the polynomial SVM structure. - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @param[in] degree Polynomial degree - * @param[in] coef0 coeff0 (scikit-learn terminology) - * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * - */ - - -void arm_svm_polynomial_init_f32(arm_svm_polynomial_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes, - int32_t degree, - float32_t coef0, - float32_t gamma - ); - -/** - * @brief SVM polynomial prediction - * @param[in] S Pointer to an instance of the polynomial SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult Decision value - * @return none. - * - */ -void arm_svm_polynomial_predict_f32(const arm_svm_polynomial_instance_f32 *S, - const float32_t * in, - int32_t * pResult); - - -/** - * @brief SVM radial basis function instance init function - * @param[in] S points to an instance of the polynomial SVM structure. - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * - */ - -void arm_svm_rbf_init_f32(arm_svm_rbf_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes, - float32_t gamma - ); - -/** - * @brief SVM rbf prediction - * @param[in] S Pointer to an instance of the rbf SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult decision value - * @return none. - * - */ -void arm_svm_rbf_predict_f32(const arm_svm_rbf_instance_f32 *S, - const float32_t * in, - int32_t * pResult); - -/** - * @brief SVM sigmoid instance init function - * @param[in] S points to an instance of the rbf SVM structure. - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @param[in] coef0 coeff0 (scikit-learn terminology) - * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * - */ - -void arm_svm_sigmoid_init_f32(arm_svm_sigmoid_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes, - float32_t coef0, - float32_t gamma - ); - -/** - * @brief SVM sigmoid prediction - * @param[in] S Pointer to an instance of the rbf SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult Decision value - * @return none. - * - */ -void arm_svm_sigmoid_predict_f32(const arm_svm_sigmoid_instance_f32 *S, - const float32_t * in, - int32_t * pResult); - - - -/** - * @brief Instance structure for Naive Gaussian Bayesian estimator. - */ -typedef struct -{ - uint32_t vectorDimension; /**< Dimension of vector space */ - uint32_t numberOfClasses; /**< Number of different classes */ - const float32_t *theta; /**< Mean values for the Gaussians */ - const float32_t *sigma; /**< Variances for the Gaussians */ - const float32_t *classPriors; /**< Class prior probabilities */ - float32_t epsilon; /**< Additive value to variances */ -} arm_gaussian_naive_bayes_instance_f32; - -/** - * @brief Naive Gaussian Bayesian Estimator - * - * @param[in] S points to a naive bayes instance structure - * @param[in] in points to the elements of the input vector. - * @param[in] pBuffer points to a buffer of length numberOfClasses - * @return The predicted class - * - */ - - -uint32_t arm_gaussian_naive_bayes_predict_f32(const arm_gaussian_naive_bayes_instance_f32 *S, - const float32_t * in, - float32_t *pBuffer); - -/** - * @brief Computation of the LogSumExp - * - * In probabilistic computations, the dynamic of the probability values can be very - * wide because they come from gaussian functions. - * To avoid underflow and overflow issues, the values are represented by their log. - * In this representation, multiplying the original exp values is easy : their logs are added. - * But adding the original exp values is requiring some special handling and it is the - * goal of the LogSumExp function. - * - * If the values are x1...xn, the function is computing: - * - * ln(exp(x1) + ... + exp(xn)) and the computation is done in such a way that - * rounding issues are minimised. - * - * The max xm of the values is extracted and the function is computing: - * xm + ln(exp(x1 - xm) + ... + exp(xn - xm)) - * - * @param[in] *in Pointer to an array of input values. - * @param[in] blockSize Number of samples in the input array. - * @return LogSumExp - * - */ - - -float32_t arm_logsumexp_f32(const float32_t *in, uint32_t blockSize); - -/** - * @brief Dot product with log arithmetic - * - * Vectors are containing the log of the samples - * - * @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[in] pTmpBuffer temporary buffer of length blockSize - * @return The log of the dot product . - * - */ - - -float32_t arm_logsumexp_dot_prod_f32(const float32_t * pSrcA, - const float32_t * pSrcB, - uint32_t blockSize, - float32_t *pTmpBuffer); - -/** - * @brief Entropy - * - * @param[in] pSrcA Array of input values. - * @param[in] blockSize Number of samples in the input array. - * @return Entropy -Sum(p ln p) - * - */ - - -float32_t arm_entropy_f32(const float32_t * pSrcA,uint32_t blockSize); - - -/** - * @brief Entropy - * - * @param[in] pSrcA Array of input values. - * @param[in] blockSize Number of samples in the input array. - * @return Entropy -Sum(p ln p) - * - */ - - -float64_t arm_entropy_f64(const float64_t * pSrcA, uint32_t blockSize); - - -/** - * @brief Kullback-Leibler - * - * @param[in] pSrcA Pointer to an array of input values for probability distribution A. - * @param[in] pSrcB Pointer to an array of input values for probability distribution B. - * @param[in] blockSize Number of samples in the input array. - * @return Kullback-Leibler Divergence D(A || B) - * - */ -float32_t arm_kullback_leibler_f32(const float32_t * pSrcA - ,const float32_t * pSrcB - ,uint32_t blockSize); - - -/** - * @brief Kullback-Leibler - * - * @param[in] pSrcA Pointer to an array of input values for probability distribution A. - * @param[in] pSrcB Pointer to an array of input values for probability distribution B. - * @param[in] blockSize Number of samples in the input array. - * @return Kullback-Leibler Divergence D(A || B) - * - */ -float64_t arm_kullback_leibler_f64(const float64_t * pSrcA, - const float64_t * pSrcB, - uint32_t blockSize); - - -/** - * @brief Weighted sum - * - * - * @param[in] *in Array of input values. - * @param[in] *weigths Weights - * @param[in] blockSize Number of samples in the input array. - * @return Weighted sum - * - */ -float32_t arm_weighted_sum_f32(const float32_t *in - , const float32_t *weigths - , uint32_t blockSize); - - -/** - * @brief Barycenter - * - * - * @param[in] in List of vectors - * @param[in] weights Weights of the vectors - * @param[out] out Barycenter - * @param[in] nbVectors Number of vectors - * @param[in] vecDim Dimension of space (vector dimension) - * @return None - * - */ -void arm_barycenter_f32(const float32_t *in - , const float32_t *weights - , float32_t *out - , uint32_t nbVectors - , uint32_t vecDim); - -/** - * @brief Euclidean distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -float32_t arm_euclidean_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - -/** - * @brief Bray-Curtis distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_braycurtis_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - -/** - * @brief Canberra distance between two vectors - * - * This function may divide by zero when samples pA[i] and pB[i] are both zero. - * The result of the computation will be correct. So the division per zero may be - * ignored. - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_canberra_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - - -/** - * @brief Chebyshev distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_chebyshev_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - - -/** - * @brief Cityblock (Manhattan) distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_cityblock_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - -/** - * @brief Correlation distance between two vectors - * - * The input vectors are modified in place ! - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_correlation_distance_f32(float32_t *pA,float32_t *pB, uint32_t blockSize); - -/** - * @brief Cosine distance between two vectors - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -float32_t arm_cosine_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - -/** - * @brief Jensen-Shannon distance between two vectors - * - * This function is assuming that elements of second vector are > 0 - * and 0 only when the corresponding element of first vector is 0. - * Otherwise the result of the computation does not make sense - * and for speed reasons, the cases returning NaN or Infinity are not - * managed. - * - * When the function is computing x log (x / y) with x 0 and y 0, - * it will compute the right value (0) but a division per zero will occur - * and shoudl be ignored in client code. - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -float32_t arm_jensenshannon_distance_f32(const float32_t *pA,const float32_t *pB,uint32_t blockSize); - -/** - * @brief Minkowski distance between two vectors - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] n Norm order (>= 2) - * @param[in] blockSize vector length - * @return distance - * - */ - - - -float32_t arm_minkowski_distance_f32(const float32_t *pA,const float32_t *pB, int32_t order, uint32_t blockSize); - -/** - * @brief Dice distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] order Distance order - * @param[in] blockSize Number of samples - * @return distance - * - */ - - -float32_t arm_dice_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Hamming distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_hamming_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Jaccard distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_jaccard_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Kulsinski distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_kulsinski_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Roger Stanimoto distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_rogerstanimoto_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Russell-Rao distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_russellrao_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Sokal-Michener distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_sokalmichener_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Sokal-Sneath distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_sokalsneath_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Yule distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_yule_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - - - /** - * @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_FORCEINLINE 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->numCols - 2) || yIndex < 0 || yIndex > (S->numRows - 2)) - { - return (0); - } - - /* Calculation of index for two nearest points in X-direction */ - index = (xIndex ) + (yIndex ) * 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 ) + (yIndex+1) * 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_FORCEINLINE 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->numCols - 2) || cI < 0 || cI > (S->numRows - 2)) - { - 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_FORCEINLINE 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->numCols - 2) || cI < 0 || cI > (S->numRows - 2)) - { - 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 * (0x0FFFFF - xfract)) >> 4U); - acc = ((q63_t) out * (0x0FFFFF - yfract)); - - /* x2 * (xfract) * (1-yfract) in 1.51 and adding to acc */ - out = (q31_t) (((q63_t) x2 * (0x0FFFFF - yfract)) >> 4U); - acc += ((q63_t) out * (xfract)); - - /* y1 * (1 - xfract) * (yfract) in 1.51 and adding to acc */ - out = (q31_t) (((q63_t) y1 * (0x0FFFFF - 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_FORCEINLINE 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->numCols - 2) || cI < 0 || cI > (S->numRows - 2)) - { - 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_ARCH_7EM__ ) - #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_ARCH_7EM__ ) - #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_ARCH_7EM__ ) - #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_ARCH_7EM__ ) - #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 ( __TI_ARM__ ) - #define LOW_OPTIMIZATION_ENTER - #define LOW_OPTIMIZATION_EXIT - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #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 - -#elif defined ( _MSC_VER ) || defined(__GNUC_PYTHON__) - #define LOW_OPTIMIZATION_ENTER - #define LOW_OPTIMIZATION_EXIT - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #define IAR_ONLY_LOW_OPTIMIZATION_EXIT -#endif - - - -/* Compiler specific diagnostic adjustment */ -#if defined ( __CC_ARM ) - -#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - -#elif defined ( __GNUC__ ) -#pragma GCC diagnostic pop - -#elif defined ( __ICCARM__ ) - -#elif defined ( __TI_ARM__ ) - -#elif defined ( __CSMC__ ) - -#elif defined ( __TASKING__ ) - -#elif defined ( _MSC_VER ) - -#else - #error Unknown compiler -#endif - -#ifdef __cplusplus -} -#endif - - -#endif /* _ARM_MATH_H */ - -/** - * - * End of file. - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_mve_tables.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_mve_tables.h deleted file mode 100644 index c07f988..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_mve_tables.h +++ /dev/null @@ -1,235 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mve_tables.h - * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc - * used for MVE implementation only - * - * $Date: 08. January 2020 - * $Revision: V1.7.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - #ifndef _ARM_MVE_TABLES_H - #define _ARM_MVE_TABLES_H - - #include "arm_math.h" - - - - - - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_f32[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_f32[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_f32[2]; -extern float32_t rearranged_twiddle_stride1_16_f32[8]; -extern float32_t rearranged_twiddle_stride2_16_f32[8]; -extern float32_t rearranged_twiddle_stride3_16_f32[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_f32[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_f32[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_f32[3]; -extern float32_t rearranged_twiddle_stride1_64_f32[40]; -extern float32_t rearranged_twiddle_stride2_64_f32[40]; -extern float32_t rearranged_twiddle_stride3_64_f32[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_f32[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_f32[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_f32[4]; -extern float32_t rearranged_twiddle_stride1_256_f32[168]; -extern float32_t rearranged_twiddle_stride2_256_f32[168]; -extern float32_t rearranged_twiddle_stride3_256_f32[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_f32[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_f32[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_f32[5]; -extern float32_t rearranged_twiddle_stride1_1024_f32[680]; -extern float32_t rearranged_twiddle_stride2_1024_f32[680]; -extern float32_t rearranged_twiddle_stride3_1024_f32[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) || defined(ARM_TABLE_TWIDDLECOEF_F32_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_f32[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_f32[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_f32[6]; -extern float32_t rearranged_twiddle_stride1_4096_f32[2728]; -extern float32_t rearranged_twiddle_stride2_4096_f32[2728]; -extern float32_t rearranged_twiddle_stride3_4096_f32[2728]; -#endif - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - - - -#if defined(ARM_MATH_MVEI) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_16) || defined(ARM_TABLE_TWIDDLECOEF_Q31_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_q31[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_q31[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_q31[2]; -extern q31_t rearranged_twiddle_stride1_16_q31[8]; -extern q31_t rearranged_twiddle_stride2_16_q31[8]; -extern q31_t rearranged_twiddle_stride3_16_q31[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_64) || defined(ARM_TABLE_TWIDDLECOEF_Q31_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_q31[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_q31[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_q31[3]; -extern q31_t rearranged_twiddle_stride1_64_q31[40]; -extern q31_t rearranged_twiddle_stride2_64_q31[40]; -extern q31_t rearranged_twiddle_stride3_64_q31[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_256) || defined(ARM_TABLE_TWIDDLECOEF_Q31_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_q31[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_q31[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_q31[4]; -extern q31_t rearranged_twiddle_stride1_256_q31[168]; -extern q31_t rearranged_twiddle_stride2_256_q31[168]; -extern q31_t rearranged_twiddle_stride3_256_q31[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_q31[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_q31[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_q31[5]; -extern q31_t rearranged_twiddle_stride1_1024_q31[680]; -extern q31_t rearranged_twiddle_stride2_1024_q31[680]; -extern q31_t rearranged_twiddle_stride3_1024_q31[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q31_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_q31[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_q31[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_q31[6]; -extern q31_t rearranged_twiddle_stride1_4096_q31[2728]; -extern q31_t rearranged_twiddle_stride2_4096_q31[2728]; -extern q31_t rearranged_twiddle_stride3_4096_q31[2728]; -#endif - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEI) */ - - - -#if defined(ARM_MATH_MVEI) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_16) || defined(ARM_TABLE_TWIDDLECOEF_Q15_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_q15[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_q15[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_q15[2]; -extern q15_t rearranged_twiddle_stride1_16_q15[8]; -extern q15_t rearranged_twiddle_stride2_16_q15[8]; -extern q15_t rearranged_twiddle_stride3_16_q15[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_64) || defined(ARM_TABLE_TWIDDLECOEF_Q15_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_q15[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_q15[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_q15[3]; -extern q15_t rearranged_twiddle_stride1_64_q15[40]; -extern q15_t rearranged_twiddle_stride2_64_q15[40]; -extern q15_t rearranged_twiddle_stride3_64_q15[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_256) || defined(ARM_TABLE_TWIDDLECOEF_Q15_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_q15[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_q15[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_q15[4]; -extern q15_t rearranged_twiddle_stride1_256_q15[168]; -extern q15_t rearranged_twiddle_stride2_256_q15[168]; -extern q15_t rearranged_twiddle_stride3_256_q15[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_q15[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_q15[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_q15[5]; -extern q15_t rearranged_twiddle_stride1_1024_q15[680]; -extern q15_t rearranged_twiddle_stride2_1024_q15[680]; -extern q15_t rearranged_twiddle_stride3_1024_q15[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q15_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_q15[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_q15[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_q15[6]; -extern q15_t rearranged_twiddle_stride1_4096_q15[2728]; -extern q15_t rearranged_twiddle_stride2_4096_q15[2728]; -extern q15_t rearranged_twiddle_stride3_4096_q15[2728]; -#endif - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEI) */ - - - -#if defined(ARM_MATH_MVEI) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEI) */ - - - -#endif /*_ARM_MVE_TABLES_H*/ - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_vec_math.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_vec_math.h deleted file mode 100644 index 0ce9464..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/arm_vec_math.h +++ /dev/null @@ -1,372 +0,0 @@ -/****************************************************************************** - * @file arm_vec_math.h - * @brief Public header file for CMSIS DSP Library - * @version V1.7.0 - * @date 15. October 2019 - ******************************************************************************/ -/* - * Copyright (c) 2010-2019 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_VEC_MATH_H -#define _ARM_VEC_MATH_H - -#include "arm_math.h" -#include "arm_common_tables.h" -#include "arm_helium_utils.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) - -#define INV_NEWTON_INIT_F32 0x7EF127EA - -static const float32_t __logf_rng_f32=0.693147180f; - - -/* fast inverse approximation (3x newton) */ -__STATIC_INLINE f32x4_t vrecip_medprec_f32( - f32x4_t x) -{ - q31x4_t m; - f32x4_t b; - any32x4_t xinv; - f32x4_t ax = vabsq(x); - - xinv.f = ax; - m = 0x3F800000 - (xinv.i & 0x7F800000); - xinv.i = xinv.i + m; - xinv.f = 1.41176471f - 0.47058824f * xinv.f; - xinv.i = xinv.i + m; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - xinv.f = vdupq_m(xinv.f, INFINITY, vcmpeqq(x, 0.0f)); - /* - * restore sign - */ - xinv.f = vnegq_m(xinv.f, xinv.f, vcmpltq(x, 0.0f)); - - return xinv.f; -} - -/* fast inverse approximation (4x newton) */ -__STATIC_INLINE f32x4_t vrecip_hiprec_f32( - f32x4_t x) -{ - q31x4_t m; - f32x4_t b; - any32x4_t xinv; - f32x4_t ax = vabsq(x); - - xinv.f = ax; - - m = 0x3F800000 - (xinv.i & 0x7F800000); - xinv.i = xinv.i + m; - xinv.f = 1.41176471f - 0.47058824f * xinv.f; - xinv.i = xinv.i + m; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - xinv.f = vdupq_m(xinv.f, INFINITY, vcmpeqq(x, 0.0f)); - /* - * restore sign - */ - xinv.f = vnegq_m(xinv.f, xinv.f, vcmpltq(x, 0.0f)); - - return xinv.f; -} - -__STATIC_INLINE f32x4_t vdiv_f32( - f32x4_t num, f32x4_t den) -{ - return vmulq(num, vrecip_hiprec_f32(den)); -} - -/** - @brief Single-precision taylor dev. - @param[in] x f32 quad vector input - @param[in] coeffs f32 quad vector coeffs - @return destination f32 quad vector - */ - -__STATIC_INLINE f32x4_t vtaylor_polyq_f32( - f32x4_t x, - const float32_t * coeffs) -{ - f32x4_t A = vfmasq(vdupq_n_f32(coeffs[4]), x, coeffs[0]); - f32x4_t B = vfmasq(vdupq_n_f32(coeffs[6]), x, coeffs[2]); - f32x4_t C = vfmasq(vdupq_n_f32(coeffs[5]), x, coeffs[1]); - f32x4_t D = vfmasq(vdupq_n_f32(coeffs[7]), x, coeffs[3]); - f32x4_t x2 = vmulq(x, x); - f32x4_t x4 = vmulq(x2, x2); - f32x4_t res = vfmaq(vfmaq_f32(A, B, x2), vfmaq_f32(C, D, x2), x4); - - return res; -} - -__STATIC_INLINE f32x4_t vmant_exp_f32( - f32x4_t x, - int32x4_t * e) -{ - any32x4_t r; - int32x4_t n; - - r.f = x; - n = r.i >> 23; - n = n - 127; - r.i = r.i - (n << 23); - - *e = n; - return r.f; -} - - -__STATIC_INLINE f32x4_t vlogq_f32(f32x4_t vecIn) -{ - q31x4_t vecExpUnBiased; - f32x4_t vecTmpFlt0, vecTmpFlt1; - f32x4_t vecAcc0, vecAcc1, vecAcc2, vecAcc3; - f32x4_t vecExpUnBiasedFlt; - - /* - * extract exponent - */ - vecTmpFlt1 = vmant_exp_f32(vecIn, &vecExpUnBiased); - - vecTmpFlt0 = vecTmpFlt1 * vecTmpFlt1; - /* - * a = (__logf_lut_f32[4] * r.f) + (__logf_lut_f32[0]); - */ - vecAcc0 = vdupq_n_f32(__logf_lut_f32[0]); - vecAcc0 = vfmaq(vecAcc0, vecTmpFlt1, __logf_lut_f32[4]); - /* - * b = (__logf_lut_f32[6] * r.f) + (__logf_lut_f32[2]); - */ - vecAcc1 = vdupq_n_f32(__logf_lut_f32[2]); - vecAcc1 = vfmaq(vecAcc1, vecTmpFlt1, __logf_lut_f32[6]); - /* - * c = (__logf_lut_f32[5] * r.f) + (__logf_lut_f32[1]); - */ - vecAcc2 = vdupq_n_f32(__logf_lut_f32[1]); - vecAcc2 = vfmaq(vecAcc2, vecTmpFlt1, __logf_lut_f32[5]); - /* - * d = (__logf_lut_f32[7] * r.f) + (__logf_lut_f32[3]); - */ - vecAcc3 = vdupq_n_f32(__logf_lut_f32[3]); - vecAcc3 = vfmaq(vecAcc3, vecTmpFlt1, __logf_lut_f32[7]); - /* - * a = a + b * xx; - */ - vecAcc0 = vfmaq(vecAcc0, vecAcc1, vecTmpFlt0); - /* - * c = c + d * xx; - */ - vecAcc2 = vfmaq(vecAcc2, vecAcc3, vecTmpFlt0); - /* - * xx = xx * xx; - */ - vecTmpFlt0 = vecTmpFlt0 * vecTmpFlt0; - vecExpUnBiasedFlt = vcvtq_f32_s32(vecExpUnBiased); - /* - * r.f = a + c * xx; - */ - vecAcc0 = vfmaq(vecAcc0, vecAcc2, vecTmpFlt0); - /* - * add exponent - * r.f = r.f + ((float32_t) m) * __logf_rng_f32; - */ - vecAcc0 = vfmaq(vecAcc0, vecExpUnBiasedFlt, __logf_rng_f32); - // set log0 down to -inf - vecAcc0 = vdupq_m(vecAcc0, -INFINITY, vcmpeqq(vecIn, 0.0f)); - return vecAcc0; -} - -__STATIC_INLINE f32x4_t vexpq_f32( - f32x4_t x) -{ - // Perform range reduction [-log(2),log(2)] - int32x4_t m = vcvtq_s32_f32(vmulq_n_f32(x, 1.4426950408f)); - f32x4_t val = vfmsq_f32(x, vcvtq_f32_s32(m), vdupq_n_f32(0.6931471805f)); - - // Polynomial Approximation - f32x4_t poly = vtaylor_polyq_f32(val, exp_tab); - - // Reconstruct - poly = (f32x4_t) (vqaddq_s32((q31x4_t) (poly), vqshlq_n_s32(m, 23))); - - poly = vdupq_m(poly, 0.0f, vcmpltq_n_s32(m, -126)); - return poly; -} - -__STATIC_INLINE f32x4_t arm_vec_exponent_f32(f32x4_t x, int32_t nb) -{ - f32x4_t r = x; - nb--; - while (nb > 0) { - r = vmulq(r, x); - nb--; - } - return (r); -} - -__STATIC_INLINE f32x4_t vrecip_f32(f32x4_t vecIn) -{ - f32x4_t vecSx, vecW, vecTmp; - any32x4_t v; - - vecSx = vabsq(vecIn); - - v.f = vecIn; - v.i = vsubq(vdupq_n_s32(INV_NEWTON_INIT_F32), v.i); - - vecW = vmulq(vecSx, v.f); - - // v.f = v.f * (8 + w * (-28 + w * (56 + w * (-70 + w *(56 + w * (-28 + w * (8 - w))))))); - vecTmp = vsubq(vdupq_n_f32(8.0f), vecW); - vecTmp = vfmasq(vecW, vecTmp, -28.0f); - vecTmp = vfmasq(vecW, vecTmp, 56.0f); - vecTmp = vfmasq(vecW, vecTmp, -70.0f); - vecTmp = vfmasq(vecW, vecTmp, 56.0f); - vecTmp = vfmasq(vecW, vecTmp, -28.0f); - vecTmp = vfmasq(vecW, vecTmp, 8.0f); - v.f = vmulq(v.f, vecTmp); - - v.f = vdupq_m(v.f, INFINITY, vcmpeqq(vecIn, 0.0f)); - /* - * restore sign - */ - v.f = vnegq_m(v.f, v.f, vcmpltq(vecIn, 0.0f)); - return v.f; -} - -__STATIC_INLINE f32x4_t vtanhq_f32( - f32x4_t val) -{ - f32x4_t x = - vminnmq_f32(vmaxnmq_f32(val, vdupq_n_f32(-10.f)), vdupq_n_f32(10.0f)); - f32x4_t exp2x = vexpq_f32(vmulq_n_f32(x, 2.f)); - f32x4_t num = vsubq_n_f32(exp2x, 1.f); - f32x4_t den = vaddq_n_f32(exp2x, 1.f); - f32x4_t tanh = vmulq_f32(num, vrecip_f32(den)); - return tanh; -} - -__STATIC_INLINE f32x4_t vpowq_f32( - f32x4_t val, - f32x4_t n) -{ - return vexpq_f32(vmulq_f32(n, vlogq_f32(val))); -} - -#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)*/ - -#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) -#endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ - -#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "NEMath.h" -/** - * @brief Vectorized integer exponentiation - * @param[in] x value - * @param[in] nb integer exponent >= 1 - * @return x^nb - * - */ -__STATIC_INLINE float32x4_t arm_vec_exponent_f32(float32x4_t x, int32_t nb) -{ - float32x4_t r = x; - nb --; - while(nb > 0) - { - r = vmulq_f32(r , x); - nb--; - } - return(r); -} - - -__STATIC_INLINE float32x4_t __arm_vec_sqrt_f32_neon(float32x4_t x) -{ - float32x4_t x1 = vmaxq_f32(x, vdupq_n_f32(FLT_MIN)); - float32x4_t e = vrsqrteq_f32(x1); - e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x1, e), e), e); - e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x1, e), e), e); - return vmulq_f32(x, e); -} - -__STATIC_INLINE int16x8_t __arm_vec_sqrt_q15_neon(int16x8_t vec) -{ - float32x4_t tempF; - int32x4_t tempHI,tempLO; - - tempLO = vmovl_s16(vget_low_s16(vec)); - tempF = vcvtq_n_f32_s32(tempLO,15); - tempF = __arm_vec_sqrt_f32_neon(tempF); - tempLO = vcvtq_n_s32_f32(tempF,15); - - tempHI = vmovl_s16(vget_high_s16(vec)); - tempF = vcvtq_n_f32_s32(tempHI,15); - tempF = __arm_vec_sqrt_f32_neon(tempF); - tempHI = vcvtq_n_s32_f32(tempF,15); - - return(vcombine_s16(vqmovn_s32(tempLO),vqmovn_s32(tempHI))); -} - -__STATIC_INLINE int32x4_t __arm_vec_sqrt_q31_neon(int32x4_t vec) -{ - float32x4_t temp; - - temp = vcvtq_n_f32_s32(vec,31); - temp = __arm_vec_sqrt_f32_neon(temp); - return(vcvtq_n_s32_f32(temp,31)); -} - -#endif /* (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#ifdef __cplusplus -} -#endif - - -#endif /* _ARM_VEC_MATH_H */ - -/** - * - * End of file. - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armcc.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armcc.h deleted file mode 100644 index 9570d36..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armcc.h +++ /dev/null @@ -1,885 +0,0 @@ -/****************************************************************************** - * @file cmsis_armcc.h - * @brief CMSIS compiler ARMCC (Arm Compiler 5) header file - * @version V5.2.1 - * @date 26. March 2020 - ******************************************************************************/ -/* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - -/* CMSIS compiler control architecture macros */ -#if ((defined (__TARGET_ARCH_6_M ) && (__TARGET_ARCH_6_M == 1)) || \ - (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M == 1)) ) - #define __ARM_ARCH_6M__ 1 -#endif - -#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M == 1)) - #define __ARM_ARCH_7M__ 1 -#endif - -#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1)) - #define __ARM_ARCH_7EM__ 1 -#endif - - /* __ARM_ARCH_8M_BASE__ not applicable */ - /* __ARM_ARCH_8M_MAIN__ not applicable */ - /* __ARM_ARCH_8_1M_MAIN__ not applicable */ - -/* CMSIS compiler control DSP macros */ -#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - #define __ARM_FEATURE_DSP 1 -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE static __forceinline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __declspec(noreturn) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed)) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT __packed struct -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION __packed union -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x))) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr))) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr))) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __memory_changed() -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START -#define __PROGRAM_START __main -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) -#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. - */ -/* intrinsic void __enable_irq(); */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* 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 ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -/** - \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)1U); -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - - -/** - \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 ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__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 ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - register uint32_t __regfpscr __ASM("fpscr"); - __regfpscr = (fpscr); -#else - (void)fpscr; -#endif -} - - -/*@} 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() __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() __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() __dmb(0xF) - - -/** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV __rev - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \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 (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#ifndef __NO_EMBEDDED_ASM -__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_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] op1 Value to rotate - \param [in] op2 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 ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - #define __RBIT __rbit -#else -__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) -{ - uint32_t result; - uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ - - result = value; /* r will be reversed bits of v; first get LSB of v */ - for (value >>= 1U; value != 0U; 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 ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -/** - \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) - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - -/** - \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 - */ -__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -#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)) - -#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) - -#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCC_H */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armclang.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armclang.h deleted file mode 100644 index b466ba4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armclang.h +++ /dev/null @@ -1,1467 +0,0 @@ -/****************************************************************************** - * @file cmsis_armclang.h - * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V5.3.1 - * @date 26. March 2020 - ******************************************************************************/ -/* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ - -#ifndef __CMSIS_ARMCLANG_H -#define __CMSIS_ARMCLANG_H - -#pragma clang system_header /* treat file as system include file */ - -#ifndef __ARM_COMPAT_H -#include /* Compatibility header for Arm Compiler 5 intrinsics */ -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __ASM volatile("":::"memory") -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START -#define __PROGRAM_START __main -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) -#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. - */ -/* intrinsic void __enable_irq(); see arm_compat.h */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __disable_irq(); see arm_compat.h */ - - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) -/** - \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 /* see arm_compat.h */ - - -/** - \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 /* see arm_compat.h */ - - -/** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)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 - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) -#endif - - -/*@} 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_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_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 unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV(value) __builtin_bswap32(value) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV16(value) __ROR(__REV(value), 16) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - 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 - */ -#define __RBIT __builtin_arm_rbit - -/** - \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 - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - -/** - \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 - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - -/** - \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 - - -/** - \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 - - -/** - \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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - -/** - \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 - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - -/** - \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) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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 - */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -#define __SADD8 __builtin_arm_sadd8 -#define __QADD8 __builtin_arm_qadd8 -#define __SHADD8 __builtin_arm_shadd8 -#define __UADD8 __builtin_arm_uadd8 -#define __UQADD8 __builtin_arm_uqadd8 -#define __UHADD8 __builtin_arm_uhadd8 -#define __SSUB8 __builtin_arm_ssub8 -#define __QSUB8 __builtin_arm_qsub8 -#define __SHSUB8 __builtin_arm_shsub8 -#define __USUB8 __builtin_arm_usub8 -#define __UQSUB8 __builtin_arm_uqsub8 -#define __UHSUB8 __builtin_arm_uhsub8 -#define __SADD16 __builtin_arm_sadd16 -#define __QADD16 __builtin_arm_qadd16 -#define __SHADD16 __builtin_arm_shadd16 -#define __UADD16 __builtin_arm_uadd16 -#define __UQADD16 __builtin_arm_uqadd16 -#define __UHADD16 __builtin_arm_uhadd16 -#define __SSUB16 __builtin_arm_ssub16 -#define __QSUB16 __builtin_arm_qsub16 -#define __SHSUB16 __builtin_arm_shsub16 -#define __USUB16 __builtin_arm_usub16 -#define __UQSUB16 __builtin_arm_uqsub16 -#define __UHSUB16 __builtin_arm_uhsub16 -#define __SASX __builtin_arm_sasx -#define __QASX __builtin_arm_qasx -#define __SHASX __builtin_arm_shasx -#define __UASX __builtin_arm_uasx -#define __UQASX __builtin_arm_uqasx -#define __UHASX __builtin_arm_uhasx -#define __SSAX __builtin_arm_ssax -#define __QSAX __builtin_arm_qsax -#define __SHSAX __builtin_arm_shsax -#define __USAX __builtin_arm_usax -#define __UQSAX __builtin_arm_uqsax -#define __UHSAX __builtin_arm_uhsax -#define __USAD8 __builtin_arm_usad8 -#define __USADA8 __builtin_arm_usada8 -#define __SSAT16 __builtin_arm_ssat16 -#define __USAT16 __builtin_arm_usat16 -#define __UXTB16 __builtin_arm_uxtb16 -#define __UXTAB16 __builtin_arm_uxtab16 -#define __SXTB16 __builtin_arm_sxtb16 -#define __SXTAB16 __builtin_arm_sxtab16 -#define __SMUAD __builtin_arm_smuad -#define __SMUADX __builtin_arm_smuadx -#define __SMLAD __builtin_arm_smlad -#define __SMLADX __builtin_arm_smladx -#define __SMLALD __builtin_arm_smlald -#define __SMLALDX __builtin_arm_smlaldx -#define __SMUSD __builtin_arm_smusd -#define __SMUSDX __builtin_arm_smusdx -#define __SMLSD __builtin_arm_smlsd -#define __SMLSDX __builtin_arm_smlsdx -#define __SMLSLD __builtin_arm_smlsld -#define __SMLSLDX __builtin_arm_smlsldx -#define __SEL __builtin_arm_sel -#define __QADD __builtin_arm_qadd -#define __QSUB __builtin_arm_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 __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) - -__STATIC_FORCEINLINE int32_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 == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCLANG_H */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armclang_ltm.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armclang_ltm.h deleted file mode 100644 index e0c5b94..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_armclang_ltm.h +++ /dev/null @@ -1,1893 +0,0 @@ -/****************************************************************************** - * @file cmsis_armclang_ltm.h - * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V1.3.0 - * @date 26. March 2020 - ******************************************************************************/ -/* - * Copyright (c) 2018-2020 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ - -#ifndef __CMSIS_ARMCLANG_H -#define __CMSIS_ARMCLANG_H - -#pragma clang system_header /* treat file as system include file */ - -#ifndef __ARM_COMPAT_H -#include /* Compatibility header for Arm Compiler 5 intrinsics */ -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __ASM volatile("":::"memory") -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START -#define __PROGRAM_START __main -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) -#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. - */ -/* intrinsic void __enable_irq(); see arm_compat.h */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __disable_irq(); see arm_compat.h */ - - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \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 /* see arm_compat.h */ - - -/** - \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 /* see arm_compat.h */ - - -/** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)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 - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) -#endif - - -/*@} 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 unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV(value) __builtin_bswap32(value) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV16(value) __ROR(__REV(value), 16) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - 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 - */ -#define __RBIT __builtin_arm_rbit - -/** - \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 - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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 - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - -/** - \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 - - -/** - \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 - - -/** - \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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \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 - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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 - */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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; \ - }) - -__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) - -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) - -#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) - -__STATIC_FORCEINLINE int32_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 == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCLANG_H */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_compiler.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_compiler.h deleted file mode 100644 index 8d3ab97..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_compiler.h +++ /dev/null @@ -1,283 +0,0 @@ -/****************************************************************************** - * @file cmsis_compiler.h - * @brief CMSIS compiler generic header file - * @version V5.1.0 - * @date 09. October 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __CMSIS_COMPILER_H -#define __CMSIS_COMPILER_H - -#include - -/* - * Arm Compiler 4/5 - */ -#if defined ( __CC_ARM ) - #include "cmsis_armcc.h" - - -/* - * Arm Compiler 6.6 LTM (armclang) - */ -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100) - #include "cmsis_armclang_ltm.h" - - /* - * Arm Compiler above 6.10.1 (armclang) - */ -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) - #include "cmsis_armclang.h" - - -/* - * GNU Compiler - */ -#elif defined ( __GNUC__ ) - #include "cmsis_gcc.h" - - -/* - * IAR Compiler - */ -#elif defined ( __ICCARM__ ) - #include - - -/* - * TI Arm Compiler - */ -#elif defined ( __TI_ARM__ ) - #include - - #ifndef __ASM - #define __ASM __asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - #define __NO_RETURN __attribute__((noreturn)) - #endif - #ifndef __USED - #define __USED __attribute__((used)) - #endif - #ifndef __WEAK - #define __WEAK __attribute__((weak)) - #endif - #ifndef __PACKED - #define __PACKED __attribute__((packed)) - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed)) - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed)) - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) - #endif - #ifndef __RESTRICT - #define __RESTRICT __restrict - #endif - #ifndef __COMPILER_BARRIER - #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. - #define __COMPILER_BARRIER() (void)0 - #endif - - -/* - * 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. - */ - - #ifndef __ASM - #define __ASM __asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - #define __NO_RETURN __attribute__((noreturn)) - #endif - #ifndef __USED - #define __USED __attribute__((used)) - #endif - #ifndef __WEAK - #define __WEAK __attribute__((weak)) - #endif - #ifndef __PACKED - #define __PACKED __packed__ - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __packed__ - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION union __packed__ - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - struct __packed__ T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #define __ALIGNED(x) __align(x) - #endif - #ifndef __RESTRICT - #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. - #define __RESTRICT - #endif - #ifndef __COMPILER_BARRIER - #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. - #define __COMPILER_BARRIER() (void)0 - #endif - - -/* - * COSMIC Compiler - */ -#elif defined ( __CSMC__ ) - #include - - #ifndef __ASM - #define __ASM _asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - // NO RETURN is automatically detected hence no warning here - #define __NO_RETURN - #endif - #ifndef __USED - #warning No compiler specific solution for __USED. __USED is ignored. - #define __USED - #endif - #ifndef __WEAK - #define __WEAK __weak - #endif - #ifndef __PACKED - #define __PACKED @packed - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT @packed struct - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION @packed union - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - @packed struct T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. - #define __ALIGNED(x) - #endif - #ifndef __RESTRICT - #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. - #define __RESTRICT - #endif - #ifndef __COMPILER_BARRIER - #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. - #define __COMPILER_BARRIER() (void)0 - #endif - - -#else - #error Unknown compiler. -#endif - - -#endif /* __CMSIS_COMPILER_H */ - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_gcc.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_gcc.h deleted file mode 100644 index 683ce0f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_gcc.h +++ /dev/null @@ -1,2177 +0,0 @@ -/****************************************************************************** - * @file cmsis_gcc.h - * @brief CMSIS compiler GCC header file - * @version V5.3.0 - * @date 26. March 2020 - ******************************************************************************/ -/* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __CMSIS_GCC_H -#define __CMSIS_GCC_H - -/* ignore some GCC warnings */ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wsign-conversion" -#pragma GCC diagnostic ignored "-Wconversion" -#pragma GCC diagnostic ignored "-Wunused-parameter" - -/* Fallback for __has_builtin */ -#ifndef __has_builtin - #define __has_builtin(x) (0) -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __ASM volatile("":::"memory") -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START - -/** - \brief Initializes data and bss sections - \details This default implementations initialized all data and additional bss - sections relying on .copy.table and .zero.table specified properly - in the used linker script. - - */ -__STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) -{ - extern void _start(void) __NO_RETURN; - - typedef struct { - uint32_t const* src; - uint32_t* dest; - uint32_t wlen; - } __copy_table_t; - - typedef struct { - uint32_t* dest; - uint32_t wlen; - } __zero_table_t; - - extern const __copy_table_t __copy_table_start__; - extern const __copy_table_t __copy_table_end__; - extern const __zero_table_t __zero_table_start__; - extern const __zero_table_t __zero_table_end__; - - for (__copy_table_t const* pTable = &__copy_table_start__; pTable < &__copy_table_end__; ++pTable) { - for(uint32_t i=0u; iwlen; ++i) { - pTable->dest[i] = pTable->src[i]; - } - } - - for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) { - for(uint32_t i=0u; iwlen; ++i) { - pTable->dest[i] = 0u; - } - } - - _start(); -} - -#define __PROGRAM_START __cmsis_start -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP __StackTop -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT __StackLimit -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) -#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. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_get_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - return __builtin_arm_get_fpscr(); -#else - uint32_t result; - - __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); - return(result); -#endif -#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_FORCEINLINE void __set_FPSCR(uint32_t fpscr) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_set_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - __builtin_arm_set_fpscr(fpscr); -#else - __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); -#endif -#else - (void)fpscr; -#endif -} - - -/*@} 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_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_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() __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. - */ -#define __WFI() __ASM volatile ("wfi":::"memory") - - -/** - \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() __ASM volatile ("wfe":::"memory") - - -/** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV() __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. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE void __DMB(void) -{ - __ASM volatile ("dmb 0xF":::"memory"); -} - - -/** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) -{ -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) - return __builtin_bswap32(value); -#else - uint32_t result; - - __ASM ("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 within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) -{ - uint32_t result; - - __ASM ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return result; -} - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) -{ -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - return (int16_t)__builtin_bswap16(value); -#else - int16_t result; - - __ASM ("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] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - 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 - */ -__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) -{ - uint32_t result; - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - __ASM ("rbit %0, %1" : "=r" (result) : "r" (value) ); -#else - uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ - - result = value; /* r will be reversed bits of v; first get LSB of v */ - for (value >>= 1U; value != 0U; 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 - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE void __CLREX(void) -{ - __ASM volatile ("clrex" ::: "memory"); -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (1..32) - \return Saturated value - */ -#define __SSAT(ARG1, ARG2) \ -__extension__ \ -({ \ - int32_t __RES, __ARG1 = (ARG1); \ - __ASM volatile ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __RES; \ - }) - - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (0..31) - \return Saturated value - */ -#define __USAT(ARG1, ARG2) \ - __extension__ \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM volatile ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); -#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" (ptr) : "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) - */ -__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); -#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" (ptr) : "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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \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 - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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 - */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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) - */ -__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint8_t) result); -} - - -/** - \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) - */ -__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint16_t) result); -} - - -/** - \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) - */ -__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return(result); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); - return(result); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); - return(result); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); - return(result); -} - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM ("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 volatile ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __RES; \ - }) - -#define __USAT16(ARG1, ARG2) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM volatile ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __RES; \ - }) - -__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) -{ - uint32_t result; - - __ASM ("sxtb16 %0, %1, ROR %2" : "=r" (result) : "r" (op1), "i" (rotate) ); - - return result; -} - -__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -#if 0 -#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; \ - }) -#endif - -#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) ) - -__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) -{ - int32_t result; - - __ASM ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#endif /* (__ARM_FEATURE_DSP == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#pragma GCC diagnostic pop - -#endif /* __CMSIS_GCC_H */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_iccarm.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_iccarm.h deleted file mode 100644 index 890ba20..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_iccarm.h +++ /dev/null @@ -1,968 +0,0 @@ -/****************************************************************************** - * @file cmsis_iccarm.h - * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file - * @version V5.2.0 - * @date 28. January 2020 - ******************************************************************************/ - -//------------------------------------------------------------------------------ -// -// Copyright (c) 2017-2019 IAR Systems -// Copyright (c) 2017-2019 Arm Limited. All rights reserved. -// -// SPDX-License-Identifier: Apache-2.0 -// -// Licensed under the Apache License, Version 2.0 (the "License") -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------ - - -#ifndef __CMSIS_ICCARM_H__ -#define __CMSIS_ICCARM_H__ - -#ifndef __ICCARM__ - #error This file should only be compiled by ICCARM -#endif - -#pragma system_include - -#define __IAR_FT _Pragma("inline=forced") __intrinsic - -#if (__VER__ >= 8000000) - #define __ICCARM_V8 1 -#else - #define __ICCARM_V8 0 -#endif - -#ifndef __ALIGNED - #if __ICCARM_V8 - #define __ALIGNED(x) __attribute__((aligned(x))) - #elif (__VER__ >= 7080000) - /* Needs IAR language extensions */ - #define __ALIGNED(x) __attribute__((aligned(x))) - #else - #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. - #define __ALIGNED(x) - #endif -#endif - - -/* Define compiler macros for CPU architecture, used in CMSIS 5. - */ -#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ -/* Macros already defined */ -#else - #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) - #define __ARM_ARCH_8M_MAIN__ 1 - #elif defined(__ARM8M_BASELINE__) - #define __ARM_ARCH_8M_BASE__ 1 - #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' - #if __ARM_ARCH == 6 - #define __ARM_ARCH_6M__ 1 - #elif __ARM_ARCH == 7 - #if __ARM_FEATURE_DSP - #define __ARM_ARCH_7EM__ 1 - #else - #define __ARM_ARCH_7M__ 1 - #endif - #endif /* __ARM_ARCH */ - #endif /* __ARM_ARCH_PROFILE == 'M' */ -#endif - -/* Alternativ core deduction for older ICCARM's */ -#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ - !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) - #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) - #define __ARM_ARCH_6M__ 1 - #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) - #define __ARM_ARCH_7M__ 1 - #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) - #define __ARM_ARCH_7EM__ 1 - #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) - #define __ARM_ARCH_8M_BASE__ 1 - #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) - #define __ARM_ARCH_8M_MAIN__ 1 - #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) - #define __ARM_ARCH_8M_MAIN__ 1 - #else - #error "Unknown target." - #endif -#endif - - - -#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 - #define __IAR_M0_FAMILY 1 -#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 - #define __IAR_M0_FAMILY 1 -#else - #define __IAR_M0_FAMILY 0 -#endif - - -#ifndef __ASM - #define __ASM __asm -#endif - -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __ASM volatile("":::"memory") -#endif - -#ifndef __INLINE - #define __INLINE inline -#endif - -#ifndef __NO_RETURN - #if __ICCARM_V8 - #define __NO_RETURN __attribute__((__noreturn__)) - #else - #define __NO_RETURN _Pragma("object_attribute=__noreturn") - #endif -#endif - -#ifndef __PACKED - #if __ICCARM_V8 - #define __PACKED __attribute__((packed, aligned(1))) - #else - /* Needs IAR language extensions */ - #define __PACKED __packed - #endif -#endif - -#ifndef __PACKED_STRUCT - #if __ICCARM_V8 - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) - #else - /* Needs IAR language extensions */ - #define __PACKED_STRUCT __packed struct - #endif -#endif - -#ifndef __PACKED_UNION - #if __ICCARM_V8 - #define __PACKED_UNION union __attribute__((packed, aligned(1))) - #else - /* Needs IAR language extensions */ - #define __PACKED_UNION __packed union - #endif -#endif - -#ifndef __RESTRICT - #if __ICCARM_V8 - #define __RESTRICT __restrict - #else - /* Needs IAR language extensions */ - #define __RESTRICT restrict - #endif -#endif - -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline -#endif - -#ifndef __FORCEINLINE - #define __FORCEINLINE _Pragma("inline=forced") -#endif - -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE -#endif - -#ifndef __UNALIGNED_UINT16_READ -#pragma language=save -#pragma language=extended -__IAR_FT uint16_t __iar_uint16_read(void const *ptr) -{ - return *(__packed uint16_t*)(ptr); -} -#pragma language=restore -#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) -#endif - - -#ifndef __UNALIGNED_UINT16_WRITE -#pragma language=save -#pragma language=extended -__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) -{ - *(__packed uint16_t*)(ptr) = val;; -} -#pragma language=restore -#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) -#endif - -#ifndef __UNALIGNED_UINT32_READ -#pragma language=save -#pragma language=extended -__IAR_FT uint32_t __iar_uint32_read(void const *ptr) -{ - return *(__packed uint32_t*)(ptr); -} -#pragma language=restore -#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) -#endif - -#ifndef __UNALIGNED_UINT32_WRITE -#pragma language=save -#pragma language=extended -__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) -{ - *(__packed uint32_t*)(ptr) = val;; -} -#pragma language=restore -#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) -#endif - -#ifndef __UNALIGNED_UINT32 /* deprecated */ -#pragma language=save -#pragma language=extended -__packed struct __iar_u32 { uint32_t v; }; -#pragma language=restore -#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) -#endif - -#ifndef __USED - #if __ICCARM_V8 - #define __USED __attribute__((used)) - #else - #define __USED _Pragma("__root") - #endif -#endif - -#ifndef __WEAK - #if __ICCARM_V8 - #define __WEAK __attribute__((weak)) - #else - #define __WEAK _Pragma("__weak") - #endif -#endif - -#ifndef __PROGRAM_START -#define __PROGRAM_START __iar_program_start -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP CSTACK$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT CSTACK$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __vector_table -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE @".intvec" -#endif - -#ifndef __ICCARM_INTRINSICS_VERSION__ - #define __ICCARM_INTRINSICS_VERSION__ 0 -#endif - -#if __ICCARM_INTRINSICS_VERSION__ == 2 - - #if defined(__CLZ) - #undef __CLZ - #endif - #if defined(__REVSH) - #undef __REVSH - #endif - #if defined(__RBIT) - #undef __RBIT - #endif - #if defined(__SSAT) - #undef __SSAT - #endif - #if defined(__USAT) - #undef __USAT - #endif - - #include "iccarm_builtin.h" - - #define __disable_fault_irq __iar_builtin_disable_fiq - #define __disable_irq __iar_builtin_disable_interrupt - #define __enable_fault_irq __iar_builtin_enable_fiq - #define __enable_irq __iar_builtin_enable_interrupt - #define __arm_rsr __iar_builtin_rsr - #define __arm_wsr __iar_builtin_wsr - - - #define __get_APSR() (__arm_rsr("APSR")) - #define __get_BASEPRI() (__arm_rsr("BASEPRI")) - #define __get_CONTROL() (__arm_rsr("CONTROL")) - #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) - - #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - #define __get_FPSCR() (__arm_rsr("FPSCR")) - #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) - #else - #define __get_FPSCR() ( 0 ) - #define __set_FPSCR(VALUE) ((void)VALUE) - #endif - - #define __get_IPSR() (__arm_rsr("IPSR")) - #define __get_MSP() (__arm_rsr("MSP")) - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - #define __get_MSPLIM() (0U) - #else - #define __get_MSPLIM() (__arm_rsr("MSPLIM")) - #endif - #define __get_PRIMASK() (__arm_rsr("PRIMASK")) - #define __get_PSP() (__arm_rsr("PSP")) - - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - #define __get_PSPLIM() (0U) - #else - #define __get_PSPLIM() (__arm_rsr("PSPLIM")) - #endif - - #define __get_xPSR() (__arm_rsr("xPSR")) - - #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) - #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) - #define __set_CONTROL(VALUE) (__arm_wsr("CONTROL", (VALUE))) - #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) - #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) - - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - #define __set_MSPLIM(VALUE) ((void)(VALUE)) - #else - #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) - #endif - #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) - #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - #define __set_PSPLIM(VALUE) ((void)(VALUE)) - #else - #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) - #endif - - #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) - #define __TZ_set_CONTROL_NS(VALUE) (__arm_wsr("CONTROL_NS", (VALUE))) - #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) - #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) - #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) - #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) - #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) - #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) - #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) - #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) - #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) - #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) - #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) - #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) - - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - #define __TZ_get_PSPLIM_NS() (0U) - #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) - #else - #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) - #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) - #endif - - #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) - #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) - - #define __NOP __iar_builtin_no_operation - - #define __CLZ __iar_builtin_CLZ - #define __CLREX __iar_builtin_CLREX - - #define __DMB __iar_builtin_DMB - #define __DSB __iar_builtin_DSB - #define __ISB __iar_builtin_ISB - - #define __LDREXB __iar_builtin_LDREXB - #define __LDREXH __iar_builtin_LDREXH - #define __LDREXW __iar_builtin_LDREX - - #define __RBIT __iar_builtin_RBIT - #define __REV __iar_builtin_REV - #define __REV16 __iar_builtin_REV16 - - __IAR_FT int16_t __REVSH(int16_t val) - { - return (int16_t) __iar_builtin_REVSH(val); - } - - #define __ROR __iar_builtin_ROR - #define __RRX __iar_builtin_RRX - - #define __SEV __iar_builtin_SEV - - #if !__IAR_M0_FAMILY - #define __SSAT __iar_builtin_SSAT - #endif - - #define __STREXB __iar_builtin_STREXB - #define __STREXH __iar_builtin_STREXH - #define __STREXW __iar_builtin_STREX - - #if !__IAR_M0_FAMILY - #define __USAT __iar_builtin_USAT - #endif - - #define __WFE __iar_builtin_WFE - #define __WFI __iar_builtin_WFI - - #if __ARM_MEDIA__ - #define __SADD8 __iar_builtin_SADD8 - #define __QADD8 __iar_builtin_QADD8 - #define __SHADD8 __iar_builtin_SHADD8 - #define __UADD8 __iar_builtin_UADD8 - #define __UQADD8 __iar_builtin_UQADD8 - #define __UHADD8 __iar_builtin_UHADD8 - #define __SSUB8 __iar_builtin_SSUB8 - #define __QSUB8 __iar_builtin_QSUB8 - #define __SHSUB8 __iar_builtin_SHSUB8 - #define __USUB8 __iar_builtin_USUB8 - #define __UQSUB8 __iar_builtin_UQSUB8 - #define __UHSUB8 __iar_builtin_UHSUB8 - #define __SADD16 __iar_builtin_SADD16 - #define __QADD16 __iar_builtin_QADD16 - #define __SHADD16 __iar_builtin_SHADD16 - #define __UADD16 __iar_builtin_UADD16 - #define __UQADD16 __iar_builtin_UQADD16 - #define __UHADD16 __iar_builtin_UHADD16 - #define __SSUB16 __iar_builtin_SSUB16 - #define __QSUB16 __iar_builtin_QSUB16 - #define __SHSUB16 __iar_builtin_SHSUB16 - #define __USUB16 __iar_builtin_USUB16 - #define __UQSUB16 __iar_builtin_UQSUB16 - #define __UHSUB16 __iar_builtin_UHSUB16 - #define __SASX __iar_builtin_SASX - #define __QASX __iar_builtin_QASX - #define __SHASX __iar_builtin_SHASX - #define __UASX __iar_builtin_UASX - #define __UQASX __iar_builtin_UQASX - #define __UHASX __iar_builtin_UHASX - #define __SSAX __iar_builtin_SSAX - #define __QSAX __iar_builtin_QSAX - #define __SHSAX __iar_builtin_SHSAX - #define __USAX __iar_builtin_USAX - #define __UQSAX __iar_builtin_UQSAX - #define __UHSAX __iar_builtin_UHSAX - #define __USAD8 __iar_builtin_USAD8 - #define __USADA8 __iar_builtin_USADA8 - #define __SSAT16 __iar_builtin_SSAT16 - #define __USAT16 __iar_builtin_USAT16 - #define __UXTB16 __iar_builtin_UXTB16 - #define __UXTAB16 __iar_builtin_UXTAB16 - #define __SXTB16 __iar_builtin_SXTB16 - #define __SXTAB16 __iar_builtin_SXTAB16 - #define __SMUAD __iar_builtin_SMUAD - #define __SMUADX __iar_builtin_SMUADX - #define __SMMLA __iar_builtin_SMMLA - #define __SMLAD __iar_builtin_SMLAD - #define __SMLADX __iar_builtin_SMLADX - #define __SMLALD __iar_builtin_SMLALD - #define __SMLALDX __iar_builtin_SMLALDX - #define __SMUSD __iar_builtin_SMUSD - #define __SMUSDX __iar_builtin_SMUSDX - #define __SMLSD __iar_builtin_SMLSD - #define __SMLSDX __iar_builtin_SMLSDX - #define __SMLSLD __iar_builtin_SMLSLD - #define __SMLSLDX __iar_builtin_SMLSLDX - #define __SEL __iar_builtin_SEL - #define __QADD __iar_builtin_QADD - #define __QSUB __iar_builtin_QSUB - #define __PKHBT __iar_builtin_PKHBT - #define __PKHTB __iar_builtin_PKHTB - #endif - -#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ - - #if __IAR_M0_FAMILY - /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ - #define __CLZ __cmsis_iar_clz_not_active - #define __SSAT __cmsis_iar_ssat_not_active - #define __USAT __cmsis_iar_usat_not_active - #define __RBIT __cmsis_iar_rbit_not_active - #define __get_APSR __cmsis_iar_get_APSR_not_active - #endif - - - #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) - #define __get_FPSCR __cmsis_iar_get_FPSR_not_active - #define __set_FPSCR __cmsis_iar_set_FPSR_not_active - #endif - - #ifdef __INTRINSICS_INCLUDED - #error intrinsics.h is already included previously! - #endif - - #include - - #if __IAR_M0_FAMILY - /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ - #undef __CLZ - #undef __SSAT - #undef __USAT - #undef __RBIT - #undef __get_APSR - - __STATIC_INLINE uint8_t __CLZ(uint32_t data) - { - if (data == 0U) { return 32U; } - - uint32_t count = 0U; - uint32_t mask = 0x80000000U; - - while ((data & mask) == 0U) - { - count += 1U; - mask = mask >> 1U; - } - return count; - } - - __STATIC_INLINE uint32_t __RBIT(uint32_t v) - { - uint8_t sc = 31U; - uint32_t r = v; - for (v >>= 1U; v; v >>= 1U) - { - r <<= 1U; - r |= v & 1U; - sc--; - } - return (r << sc); - } - - __STATIC_INLINE uint32_t __get_APSR(void) - { - uint32_t res; - __asm("MRS %0,APSR" : "=r" (res)); - return res; - } - - #endif - - #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) - #undef __get_FPSCR - #undef __set_FPSCR - #define __get_FPSCR() (0) - #define __set_FPSCR(VALUE) ((void)VALUE) - #endif - - #pragma diag_suppress=Pe940 - #pragma diag_suppress=Pe177 - - #define __enable_irq __enable_interrupt - #define __disable_irq __disable_interrupt - #define __NOP __no_operation - - #define __get_xPSR __get_PSR - - #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) - - __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) - { - return __LDREX((unsigned long *)ptr); - } - - __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) - { - return __STREX(value, (unsigned long *)ptr); - } - #endif - - - /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ - #if (__CORTEX_M >= 0x03) - - __IAR_FT uint32_t __RRX(uint32_t value) - { - uint32_t result; - __ASM volatile("RRX %0, %1" : "=r"(result) : "r" (value)); - return(result); - } - - __IAR_FT void __set_BASEPRI_MAX(uint32_t value) - { - __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); - } - - - #define __enable_fault_irq __enable_fiq - #define __disable_fault_irq __disable_fiq - - - #endif /* (__CORTEX_M >= 0x03) */ - - __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) - { - return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); - } - - #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - - __IAR_FT uint32_t __get_MSPLIM(void) - { - uint32_t res; - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - res = 0U; - #else - __asm volatile("MRS %0,MSPLIM" : "=r" (res)); - #endif - return res; - } - - __IAR_FT void __set_MSPLIM(uint32_t value) - { - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)value; - #else - __asm volatile("MSR MSPLIM,%0" :: "r" (value)); - #endif - } - - __IAR_FT uint32_t __get_PSPLIM(void) - { - uint32_t res; - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - res = 0U; - #else - __asm volatile("MRS %0,PSPLIM" : "=r" (res)); - #endif - return res; - } - - __IAR_FT void __set_PSPLIM(uint32_t value) - { - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)value; - #else - __asm volatile("MSR PSPLIM,%0" :: "r" (value)); - #endif - } - - __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) - { - __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_PSP_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,PSP_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_PSP_NS(uint32_t value) - { - __asm volatile("MSR PSP_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_MSP_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,MSP_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_MSP_NS(uint32_t value) - { - __asm volatile("MSR MSP_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_SP_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,SP_NS" : "=r" (res)); - return res; - } - __IAR_FT void __TZ_set_SP_NS(uint32_t value) - { - __asm volatile("MSR SP_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) - { - __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) - { - __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) - { - __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) - { - uint32_t res; - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - res = 0U; - #else - __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); - #endif - return res; - } - - __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) - { - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)value; - #else - __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); - #endif - } - - __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) - { - __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); - } - - #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ - -#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ - -#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) - -#if __IAR_M0_FAMILY - __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) - { - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; - } - - __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) - { - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; - } -#endif - -#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ - - __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) - { - uint32_t res; - __ASM volatile ("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); - return ((uint8_t)res); - } - - __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) - { - uint32_t res; - __ASM volatile ("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); - return ((uint16_t)res); - } - - __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) - { - uint32_t res; - __ASM volatile ("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); - return res; - } - - __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) - { - __ASM volatile ("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); - } - - __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) - { - __ASM volatile ("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); - } - - __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) - { - __ASM volatile ("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); - } - -#endif /* (__CORTEX_M >= 0x03) */ - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - - - __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint8_t)res); - } - - __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint16_t)res); - } - - __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) - { - uint32_t res; - __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return res; - } - - __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) - { - __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); - } - - __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) - { - __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); - } - - __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) - { - __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); - } - - __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint8_t)res); - } - - __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint16_t)res); - } - - __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return res; - } - - __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) - { - uint32_t res; - __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); - return res; - } - - __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) - { - uint32_t res; - __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); - return res; - } - - __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) - { - uint32_t res; - __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); - return res; - } - -#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ - -#undef __IAR_FT -#undef __IAR_M0_FAMILY -#undef __ICCARM_V8 - -#pragma diag_default=Pe940 -#pragma diag_default=Pe177 - -#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) - -#endif /* __CMSIS_ICCARM_H__ */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_version.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_version.h deleted file mode 100644 index c999178..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/cmsis_version.h +++ /dev/null @@ -1,39 +0,0 @@ -/****************************************************************************** - * @file cmsis_version.h - * @brief CMSIS Core(M) Version definitions - * @version V5.0.4 - * @date 23. July 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2019 ARM Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CMSIS_VERSION_H -#define __CMSIS_VERSION_H - -/* CMSIS Version definitions */ -#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ -#define __CM_CMSIS_VERSION_SUB ( 4U) /*!< [15:0] CMSIS Core(M) sub version */ -#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ - __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/core_cm4.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/core_cm4.h deleted file mode 100644 index 6a50d5e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/core_cm4.h +++ /dev/null @@ -1,2129 +0,0 @@ -/************************************************************************** - * @file core_cm4.h - * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File - * @version V5.1.1 - * @date 27. March 2020 - ******************************************************************************/ -/* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #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 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM4 definitions */ -#define __CM4_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM4_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16U) | \ - __CM4_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (4U) /*!< Cortex-M Core */ - -/** __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 defined (__FPU_PRESENT) && (__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_FP - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #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 defined (__FPU_PRESENT) && (__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 defined (__FPU_PRESENT) && (__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 ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #if defined (__FPU_PRESENT) && (__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 defined (__FPU_PRESENT) && (__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 defined (__FPU_PRESENT) && (__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 "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#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 __VTOR_PRESENT - #define __VTOR_PRESENT 1U - #warning "__VTOR_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_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:1; /*!< bit: 9 Reserved */ - uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ - 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 */ - uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ - 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_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ -#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 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_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ -#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 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 RESERVED1[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 */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ -#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ -#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR 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[32U]; - 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 (0xFFFFFFFFUL /*<< 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 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 -{ - __IM 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 Register */ - __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 (0x1UL << 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 (0x1UL << 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ -#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ - -#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ -#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 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 (0x1UL << 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 (0x1UL << 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ -#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ - -#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ -#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< 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_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__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; - -#define MPU_TYPE_RALIASES 4U - -/* 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 /* defined (__MPU_PRESENT) && (__MPU_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 */ - -#define FPU_MVFR2_VFP_Misc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ -#define FPU_MVFR2_VFP_Misc_Msk (0xFUL << FPU_MVFR2_VFP_Misc_Pos) /*!< MVFR2: VFP Misc bits Mask */ - -/*@} end of group CMSIS_FPU */ - - -/** - \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. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(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. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(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 Core 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ -#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ - -/*@} */ - - - -/******************************************************************************* - * 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. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ -#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ -#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ -#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ - - -/** - \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 << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority 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 Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - __COMPILER_BARRIER(); - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __COMPILER_BARRIER(); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \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)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (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 Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; - /* ARM Application Note 321 states that the M4 does not require the architectural barrier */ -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __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 */ - - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv7.h" - -#endif - - -/* ########################## 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 = FPU->MVFR0; - if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) - { - return 1U; /* Single precision FPU */ - } - else - { - return 0U; /* No FPU */ - } -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__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 ((int32_t)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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/mpu_armv7.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/mpu_armv7.h deleted file mode 100644 index 442fc21..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/mpu_armv7.h +++ /dev/null @@ -1,275 +0,0 @@ -/****************************************************************************** - * @file mpu_armv7.h - * @brief CMSIS MPU API for Armv7-M MPU - * @version V5.1.1 - * @date 10. February 2020 - ******************************************************************************/ -/* - * Copyright (c) 2017-2020 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef ARM_MPU_ARMV7_H -#define ARM_MPU_ARMV7_H - -#define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes -#define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes -#define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes -#define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes -#define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes -#define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte -#define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes -#define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes -#define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes -#define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes -#define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes -#define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes -#define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes -#define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes -#define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes -#define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte -#define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes -#define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes -#define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes -#define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes -#define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes -#define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes -#define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes -#define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes -#define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes -#define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte -#define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes -#define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes - -#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access -#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only -#define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only -#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access -#define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only -#define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access - -/** MPU Region Base Address Register Value -* -* \param Region The region to be configured, number 0 to 15. -* \param BaseAddress The base address for the region. -*/ -#define ARM_MPU_RBAR(Region, BaseAddress) \ - (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ - ((Region) & MPU_RBAR_REGION_Msk) | \ - (MPU_RBAR_VALID_Msk)) - -/** -* MPU Memory Access Attributes -* -* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. -* \param IsShareable Region is shareable between multiple bus masters. -* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. -* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. -*/ -#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ - ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ - (((IsShareable) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ - (((IsCacheable) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ - (((IsBufferable) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) - -/** -* MPU Region Attribute and Size Register Value -* -* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. -* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. -* \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. -* \param SubRegionDisable Sub-region disable field. -* \param Size Region size of the region to be configured, for example 4K, 8K. -*/ -#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ - ((((DisableExec) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ - (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ - (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \ - (((SubRegionDisable) << MPU_RASR_SRD_Pos) & MPU_RASR_SRD_Msk) | \ - (((Size) << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk) | \ - (((MPU_RASR_ENABLE_Msk)))) - -/** -* MPU Region Attribute and Size Register Value -* -* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. -* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. -* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. -* \param IsShareable Region is shareable between multiple bus masters. -* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. -* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. -* \param SubRegionDisable Sub-region disable field. -* \param Size Region size of the region to be configured, for example 4K, 8K. -*/ -#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ - ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) - -/** -* MPU Memory Access Attribute for strongly ordered memory. -* - TEX: 000b -* - Shareable -* - Non-cacheable -* - Non-bufferable -*/ -#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) - -/** -* MPU Memory Access Attribute for device memory. -* - TEX: 000b (if shareable) or 010b (if non-shareable) -* - Shareable or non-shareable -* - Non-cacheable -* - Bufferable (if shareable) or non-bufferable (if non-shareable) -* -* \param IsShareable Configures the device memory as shareable or non-shareable. -*/ -#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) - -/** -* MPU Memory Access Attribute for normal memory. -* - TEX: 1BBb (reflecting outer cacheability rules) -* - Shareable or non-shareable -* - Cacheable or non-cacheable (reflecting inner cacheability rules) -* - Bufferable or non-bufferable (reflecting inner cacheability rules) -* -* \param OuterCp Configures the outer cache policy. -* \param InnerCp Configures the inner cache policy. -* \param IsShareable Configures the memory as shareable or non-shareable. -*/ -#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) >> 1U), ((InnerCp) & 1U)) - -/** -* MPU Memory Access Attribute non-cacheable policy. -*/ -#define ARM_MPU_CACHEP_NOCACHE 0U - -/** -* MPU Memory Access Attribute write-back, write and read allocate policy. -*/ -#define ARM_MPU_CACHEP_WB_WRA 1U - -/** -* MPU Memory Access Attribute write-through, no write allocate policy. -*/ -#define ARM_MPU_CACHEP_WT_NWA 2U - -/** -* MPU Memory Access Attribute write-back, no write allocate policy. -*/ -#define ARM_MPU_CACHEP_WB_NWA 3U - - -/** -* Struct for a single MPU Region -*/ -typedef struct { - uint32_t RBAR; //!< The region base address register value (RBAR) - uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR -} ARM_MPU_Region_t; - -/** Enable the MPU. -* \param MPU_Control Default access permissions for unconfigured regions. -*/ -__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) -{ - __DMB(); - MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; -#endif - __DSB(); - __ISB(); -} - -/** Disable the MPU. -*/ -__STATIC_INLINE void ARM_MPU_Disable(void) -{ - __DMB(); -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; -#endif - MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; - __DSB(); - __ISB(); -} - -/** Clear and disable the given MPU region. -* \param rnr Region number to be cleared. -*/ -__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) -{ - MPU->RNR = rnr; - MPU->RASR = 0U; -} - -/** Configure an MPU region. -* \param rbar Value for RBAR register. -* \param rsar Value for RSAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) -{ - MPU->RBAR = rbar; - MPU->RASR = rasr; -} - -/** Configure the given MPU region. -* \param rnr Region number to be configured. -* \param rbar Value for RBAR register. -* \param rsar Value for RSAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) -{ - MPU->RNR = rnr; - MPU->RBAR = rbar; - MPU->RASR = rasr; -} - -/** Memcopy with strictly ordered memory access, e.g. for register targets. -* \param dst Destination data is copied to. -* \param src Source data is copied from. -* \param len Amount of data words to be copied. -*/ -__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) -{ - uint32_t i; - for (i = 0U; i < len; ++i) - { - dst[i] = src[i]; - } -} - -/** Load the given number of MPU regions from a table. -* \param table Pointer to the MPU configuration table. -* \param cnt Amount of regions to be configured. -*/ -__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) -{ - const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; - while (cnt > MPU_TYPE_RALIASES) { - ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); - table += MPU_TYPE_RALIASES; - cnt -= MPU_TYPE_RALIASES; - } - ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); -} - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/mpu_armv8.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/mpu_armv8.h deleted file mode 100644 index 3a197fb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/mpu_armv8.h +++ /dev/null @@ -1,352 +0,0 @@ -/****************************************************************************** - * @file mpu_armv8.h - * @brief CMSIS MPU API for Armv8-M and Armv8.1-M MPU - * @version V5.1.2 - * @date 10. February 2020 - ******************************************************************************/ -/* - * Copyright (c) 2017-2020 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef ARM_MPU_ARMV8_H -#define ARM_MPU_ARMV8_H - -/** \brief Attribute for device memory (outer only) */ -#define ARM_MPU_ATTR_DEVICE ( 0U ) - -/** \brief Attribute for non-cacheable, normal memory */ -#define ARM_MPU_ATTR_NON_CACHEABLE ( 4U ) - -/** \brief Attribute for normal memory (outer and inner) -* \param NT Non-Transient: Set to 1 for non-transient data. -* \param WB Write-Back: Set to 1 to use write-back update policy. -* \param RA Read Allocation: Set to 1 to use cache allocation on read miss. -* \param WA Write Allocation: Set to 1 to use cache allocation on write miss. -*/ -#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \ - ((((NT) & 1U) << 3U) | (((WB) & 1U) << 2U) | (((RA) & 1U) << 1U) | ((WA) & 1U)) - -/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */ -#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U) - -/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */ -#define ARM_MPU_ATTR_DEVICE_nGnRE (1U) - -/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */ -#define ARM_MPU_ATTR_DEVICE_nGRE (2U) - -/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */ -#define ARM_MPU_ATTR_DEVICE_GRE (3U) - -/** \brief Memory Attribute -* \param O Outer memory attributes -* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes -*/ -#define ARM_MPU_ATTR(O, I) ((((O) & 0xFU) << 4U) | ((((O) & 0xFU) != 0U) ? ((I) & 0xFU) : (((I) & 0x3U) << 2U))) - -/** \brief Normal memory non-shareable */ -#define ARM_MPU_SH_NON (0U) - -/** \brief Normal memory outer shareable */ -#define ARM_MPU_SH_OUTER (2U) - -/** \brief Normal memory inner shareable */ -#define ARM_MPU_SH_INNER (3U) - -/** \brief Memory access permissions -* \param RO Read-Only: Set to 1 for read-only memory. -* \param NP Non-Privileged: Set to 1 for non-privileged memory. -*/ -#define ARM_MPU_AP_(RO, NP) ((((RO) & 1U) << 1U) | ((NP) & 1U)) - -/** \brief Region Base Address Register value -* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned. -* \param SH Defines the Shareability domain for this memory region. -* \param RO Read-Only: Set to 1 for a read-only memory region. -* \param NP Non-Privileged: Set to 1 for a non-privileged memory region. -* \oaram XN eXecute Never: Set to 1 for a non-executable memory region. -*/ -#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \ - (((BASE) & MPU_RBAR_BASE_Msk) | \ - (((SH) << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \ - ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \ - (((XN) << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk)) - -/** \brief Region Limit Address Register value -* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. -* \param IDX The attribute index to be associated with this memory region. -*/ -#define ARM_MPU_RLAR(LIMIT, IDX) \ - (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \ - (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ - (MPU_RLAR_EN_Msk)) - -#if defined(MPU_RLAR_PXN_Pos) - -/** \brief Region Limit Address Register with PXN value -* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. -* \param PXN Privileged execute never. Defines whether code can be executed from this privileged region. -* \param IDX The attribute index to be associated with this memory region. -*/ -#define ARM_MPU_RLAR_PXN(LIMIT, PXN, IDX) \ - (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \ - (((PXN) << MPU_RLAR_PXN_Pos) & MPU_RLAR_PXN_Msk) | \ - (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ - (MPU_RLAR_EN_Msk)) - -#endif - -/** -* Struct for a single MPU Region -*/ -typedef struct { - uint32_t RBAR; /*!< Region Base Address Register value */ - uint32_t RLAR; /*!< Region Limit Address Register value */ -} ARM_MPU_Region_t; - -/** Enable the MPU. -* \param MPU_Control Default access permissions for unconfigured regions. -*/ -__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) -{ - __DMB(); - MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; -#endif - __DSB(); - __ISB(); -} - -/** Disable the MPU. -*/ -__STATIC_INLINE void ARM_MPU_Disable(void) -{ - __DMB(); -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; -#endif - MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; - __DSB(); - __ISB(); -} - -#ifdef MPU_NS -/** Enable the Non-secure MPU. -* \param MPU_Control Default access permissions for unconfigured regions. -*/ -__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control) -{ - __DMB(); - MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; -#endif - __DSB(); - __ISB(); -} - -/** Disable the Non-secure MPU. -*/ -__STATIC_INLINE void ARM_MPU_Disable_NS(void) -{ - __DMB(); -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; -#endif - MPU_NS->CTRL &= ~MPU_CTRL_ENABLE_Msk; - __DSB(); - __ISB(); -} -#endif - -/** Set the memory attribute encoding to the given MPU. -* \param mpu Pointer to the MPU to be configured. -* \param idx The attribute index to be set [0-7] -* \param attr The attribute value to be set. -*/ -__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr) -{ - const uint8_t reg = idx / 4U; - const uint32_t pos = ((idx % 4U) * 8U); - const uint32_t mask = 0xFFU << pos; - - if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) { - return; // invalid index - } - - mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask)); -} - -/** Set the memory attribute encoding. -* \param idx The attribute index to be set [0-7] -* \param attr The attribute value to be set. -*/ -__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr) -{ - ARM_MPU_SetMemAttrEx(MPU, idx, attr); -} - -#ifdef MPU_NS -/** Set the memory attribute encoding to the Non-secure MPU. -* \param idx The attribute index to be set [0-7] -* \param attr The attribute value to be set. -*/ -__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr) -{ - ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr); -} -#endif - -/** Clear and disable the given MPU region of the given MPU. -* \param mpu Pointer to MPU to be used. -* \param rnr Region number to be cleared. -*/ -__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr) -{ - mpu->RNR = rnr; - mpu->RLAR = 0U; -} - -/** Clear and disable the given MPU region. -* \param rnr Region number to be cleared. -*/ -__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) -{ - ARM_MPU_ClrRegionEx(MPU, rnr); -} - -#ifdef MPU_NS -/** Clear and disable the given Non-secure MPU region. -* \param rnr Region number to be cleared. -*/ -__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr) -{ - ARM_MPU_ClrRegionEx(MPU_NS, rnr); -} -#endif - -/** Configure the given MPU region of the given MPU. -* \param mpu Pointer to MPU to be used. -* \param rnr Region number to be configured. -* \param rbar Value for RBAR register. -* \param rlar Value for RLAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar) -{ - mpu->RNR = rnr; - mpu->RBAR = rbar; - mpu->RLAR = rlar; -} - -/** Configure the given MPU region. -* \param rnr Region number to be configured. -* \param rbar Value for RBAR register. -* \param rlar Value for RLAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar) -{ - ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar); -} - -#ifdef MPU_NS -/** Configure the given Non-secure MPU region. -* \param rnr Region number to be configured. -* \param rbar Value for RBAR register. -* \param rlar Value for RLAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar) -{ - ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar); -} -#endif - -/** Memcopy with strictly ordered memory access, e.g. for register targets. -* \param dst Destination data is copied to. -* \param src Source data is copied from. -* \param len Amount of data words to be copied. -*/ -__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) -{ - uint32_t i; - for (i = 0U; i < len; ++i) - { - dst[i] = src[i]; - } -} - -/** Load the given number of MPU regions from a table to the given MPU. -* \param mpu Pointer to the MPU registers to be used. -* \param rnr First region number to be configured. -* \param table Pointer to the MPU configuration table. -* \param cnt Amount of regions to be configured. -*/ -__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) -{ - const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; - if (cnt == 1U) { - mpu->RNR = rnr; - ARM_MPU_OrderedMemcpy(&(mpu->RBAR), &(table->RBAR), rowWordSize); - } else { - uint32_t rnrBase = rnr & ~(MPU_TYPE_RALIASES-1U); - uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES; - - mpu->RNR = rnrBase; - while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) { - uint32_t c = MPU_TYPE_RALIASES - rnrOffset; - ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize); - table += c; - cnt -= c; - rnrOffset = 0U; - rnrBase += MPU_TYPE_RALIASES; - mpu->RNR = rnrBase; - } - - ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize); - } -} - -/** Load the given number of MPU regions from a table. -* \param rnr First region number to be configured. -* \param table Pointer to the MPU configuration table. -* \param cnt Amount of regions to be configured. -*/ -__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) -{ - ARM_MPU_LoadEx(MPU, rnr, table, cnt); -} - -#ifdef MPU_NS -/** Load the given number of MPU regions from a table to the Non-secure MPU. -* \param rnr First region number to be configured. -* \param table Pointer to the MPU configuration table. -* \param cnt Amount of regions to be configured. -*/ -__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) -{ - ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt); -} -#endif - -#endif - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/pmu_armv8.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/pmu_armv8.h deleted file mode 100644 index 23b37d9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/core_support/pmu_armv8.h +++ /dev/null @@ -1,337 +0,0 @@ -/****************************************************************************** - * @file pmu_armv8.h - * @brief CMSIS PMU API for Armv8.1-M PMU - * @version V1.0.0 - * @date 24. March 2020 - ******************************************************************************/ -/* - * Copyright (c) 2020 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef ARM_PMU_ARMV8_H -#define ARM_PMU_ARMV8_H - -/** - * \brief PMU Events - * \note See the Armv8.1-M Architecture Reference Manual for full details on these PMU events. - * */ - -#define ARM_PMU_SW_INCR 0x0000 /*!< Software update to the PMU_SWINC register, architecturally executed and condition code check pass */ -#define ARM_PMU_L1I_CACHE_REFILL 0x0001 /*!< L1 I-Cache refill */ -#define ARM_PMU_L1D_CACHE_REFILL 0x0003 /*!< L1 D-Cache refill */ -#define ARM_PMU_L1D_CACHE 0x0004 /*!< L1 D-Cache access */ -#define ARM_PMU_LD_RETIRED 0x0006 /*!< Memory-reading instruction architecturally executed and condition code check pass */ -#define ARM_PMU_ST_RETIRED 0x0007 /*!< Memory-writing instruction architecturally executed and condition code check pass */ -#define ARM_PMU_INST_RETIRED 0x0008 /*!< Instruction architecturally executed */ -#define ARM_PMU_EXC_TAKEN 0x0009 /*!< Exception entry */ -#define ARM_PMU_EXC_RETURN 0x000A /*!< Exception return instruction architecturally executed and the condition code check pass */ -#define ARM_PMU_PC_WRITE_RETIRED 0x000C /*!< Software change to the Program Counter (PC). Instruction is architecturally executed and condition code check pass */ -#define ARM_PMU_BR_IMMED_RETIRED 0x000D /*!< Immediate branch architecturally executed */ -#define ARM_PMU_BR_RETURN_RETIRED 0x000E /*!< Function return instruction architecturally executed and the condition code check pass */ -#define ARM_PMU_UNALIGNED_LDST_RETIRED 0x000F /*!< Unaligned memory memory-reading or memory-writing instruction architecturally executed and condition code check pass */ -#define ARM_PMU_BR_MIS_PRED 0x0010 /*!< Mispredicted or not predicted branch speculatively executed */ -#define ARM_PMU_CPU_CYCLES 0x0011 /*!< Cycle */ -#define ARM_PMU_BR_PRED 0x0012 /*!< Predictable branch speculatively executed */ -#define ARM_PMU_MEM_ACCESS 0x0013 /*!< Data memory access */ -#define ARM_PMU_L1I_CACHE 0x0014 /*!< Level 1 instruction cache access */ -#define ARM_PMU_L1D_CACHE_WB 0x0015 /*!< Level 1 data cache write-back */ -#define ARM_PMU_L2D_CACHE 0x0016 /*!< Level 2 data cache access */ -#define ARM_PMU_L2D_CACHE_REFILL 0x0017 /*!< Level 2 data cache refill */ -#define ARM_PMU_L2D_CACHE_WB 0x0018 /*!< Level 2 data cache write-back */ -#define ARM_PMU_BUS_ACCESS 0x0019 /*!< Bus access */ -#define ARM_PMU_MEMORY_ERROR 0x001A /*!< Local memory error */ -#define ARM_PMU_INST_SPEC 0x001B /*!< Instruction speculatively executed */ -#define ARM_PMU_BUS_CYCLES 0x001D /*!< Bus cycles */ -#define ARM_PMU_CHAIN 0x001E /*!< For an odd numbered counter, increment when an overflow occurs on the preceding even-numbered counter on the same PE */ -#define ARM_PMU_L1D_CACHE_ALLOCATE 0x001F /*!< Level 1 data cache allocation without refill */ -#define ARM_PMU_L2D_CACHE_ALLOCATE 0x0020 /*!< Level 2 data cache allocation without refill */ -#define ARM_PMU_BR_RETIRED 0x0021 /*!< Branch instruction architecturally executed */ -#define ARM_PMU_BR_MIS_PRED_RETIRED 0x0022 /*!< Mispredicted branch instruction architecturally executed */ -#define ARM_PMU_STALL_FRONTEND 0x0023 /*!< No operation issued because of the frontend */ -#define ARM_PMU_STALL_BACKEND 0x0024 /*!< No operation issued because of the backend */ -#define ARM_PMU_L2I_CACHE 0x0027 /*!< Level 2 instruction cache access */ -#define ARM_PMU_L2I_CACHE_REFILL 0x0028 /*!< Level 2 instruction cache refill */ -#define ARM_PMU_L3D_CACHE_ALLOCATE 0x0029 /*!< Level 3 data cache allocation without refill */ -#define ARM_PMU_L3D_CACHE_REFILL 0x002A /*!< Level 3 data cache refill */ -#define ARM_PMU_L3D_CACHE 0x002B /*!< Level 3 data cache access */ -#define ARM_PMU_L3D_CACHE_WB 0x002C /*!< Level 3 data cache write-back */ -#define ARM_PMU_LL_CACHE_RD 0x0036 /*!< Last level data cache read */ -#define ARM_PMU_LL_CACHE_MISS_RD 0x0037 /*!< Last level data cache read miss */ -#define ARM_PMU_L1D_CACHE_MISS_RD 0x0039 /*!< Level 1 data cache read miss */ -#define ARM_PMU_OP_COMPLETE 0x003A /*!< Operation retired */ -#define ARM_PMU_OP_SPEC 0x003B /*!< Operation speculatively executed */ -#define ARM_PMU_STALL 0x003C /*!< Stall cycle for instruction or operation not sent for execution */ -#define ARM_PMU_STALL_OP_BACKEND 0x003D /*!< Stall cycle for instruction or operation not sent for execution due to pipeline backend */ -#define ARM_PMU_STALL_OP_FRONTEND 0x003E /*!< Stall cycle for instruction or operation not sent for execution due to pipeline frontend */ -#define ARM_PMU_STALL_OP 0x003F /*!< Instruction or operation slots not occupied each cycle */ -#define ARM_PMU_L1D_CACHE_RD 0x0040 /*!< Level 1 data cache read */ -#define ARM_PMU_LE_RETIRED 0x0100 /*!< Loop end instruction executed */ -#define ARM_PMU_LE_SPEC 0x0101 /*!< Loop end instruction speculatively executed */ -#define ARM_PMU_BF_RETIRED 0x0104 /*!< Branch future instruction architecturally executed and condition code check pass */ -#define ARM_PMU_BF_SPEC 0x0105 /*!< Branch future instruction speculatively executed and condition code check pass */ -#define ARM_PMU_LE_CANCEL 0x0108 /*!< Loop end instruction not taken */ -#define ARM_PMU_BF_CANCEL 0x0109 /*!< Branch future instruction not taken */ -#define ARM_PMU_SE_CALL_S 0x0114 /*!< Call to secure function, resulting in Security state change */ -#define ARM_PMU_SE_CALL_NS 0x0115 /*!< Call to non-secure function, resulting in Security state change */ -#define ARM_PMU_DWT_CMPMATCH0 0x0118 /*!< DWT comparator 0 match */ -#define ARM_PMU_DWT_CMPMATCH1 0x0119 /*!< DWT comparator 1 match */ -#define ARM_PMU_DWT_CMPMATCH2 0x011A /*!< DWT comparator 2 match */ -#define ARM_PMU_DWT_CMPMATCH3 0x011B /*!< DWT comparator 3 match */ -#define ARM_PMU_MVE_INST_RETIRED 0x0200 /*!< MVE instruction architecturally executed */ -#define ARM_PMU_MVE_INST_SPEC 0x0201 /*!< MVE instruction speculatively executed */ -#define ARM_PMU_MVE_FP_RETIRED 0x0204 /*!< MVE floating-point instruction architecturally executed */ -#define ARM_PMU_MVE_FP_SPEC 0x0205 /*!< MVE floating-point instruction speculatively executed */ -#define ARM_PMU_MVE_FP_HP_RETIRED 0x0208 /*!< MVE half-precision floating-point instruction architecturally executed */ -#define ARM_PMU_MVE_FP_HP_SPEC 0x0209 /*!< MVE half-precision floating-point instruction speculatively executed */ -#define ARM_PMU_MVE_FP_SP_RETIRED 0x020C /*!< MVE single-precision floating-point instruction architecturally executed */ -#define ARM_PMU_MVE_FP_SP_SPEC 0x020D /*!< MVE single-precision floating-point instruction speculatively executed */ -#define ARM_PMU_MVE_FP_MAC_RETIRED 0x0214 /*!< MVE floating-point multiply or multiply-accumulate instruction architecturally executed */ -#define ARM_PMU_MVE_FP_MAC_SPEC 0x0215 /*!< MVE floating-point multiply or multiply-accumulate instruction speculatively executed */ -#define ARM_PMU_MVE_INT_RETIRED 0x0224 /*!< MVE integer instruction architecturally executed */ -#define ARM_PMU_MVE_INT_SPEC 0x0225 /*!< MVE integer instruction speculatively executed */ -#define ARM_PMU_MVE_INT_MAC_RETIRED 0x0228 /*!< MVE multiply or multiply-accumulate instruction architecturally executed */ -#define ARM_PMU_MVE_INT_MAC_SPEC 0x0229 /*!< MVE multiply or multiply-accumulate instruction speculatively executed */ -#define ARM_PMU_MVE_LDST_RETIRED 0x0238 /*!< MVE load or store instruction architecturally executed */ -#define ARM_PMU_MVE_LDST_SPEC 0x0239 /*!< MVE load or store instruction speculatively executed */ -#define ARM_PMU_MVE_LD_RETIRED 0x023C /*!< MVE load instruction architecturally executed */ -#define ARM_PMU_MVE_LD_SPEC 0x023D /*!< MVE load instruction speculatively executed */ -#define ARM_PMU_MVE_ST_RETIRED 0x0240 /*!< MVE store instruction architecturally executed */ -#define ARM_PMU_MVE_ST_SPEC 0x0241 /*!< MVE store instruction speculatively executed */ -#define ARM_PMU_MVE_LDST_CONTIG_RETIRED 0x0244 /*!< MVE contiguous load or store instruction architecturally executed */ -#define ARM_PMU_MVE_LDST_CONTIG_SPEC 0x0245 /*!< MVE contiguous load or store instruction speculatively executed */ -#define ARM_PMU_MVE_LD_CONTIG_RETIRED 0x0248 /*!< MVE contiguous load instruction architecturally executed */ -#define ARM_PMU_MVE_LD_CONTIG_SPEC 0x0249 /*!< MVE contiguous load instruction speculatively executed */ -#define ARM_PMU_MVE_ST_CONTIG_RETIRED 0x024C /*!< MVE contiguous store instruction architecturally executed */ -#define ARM_PMU_MVE_ST_CONTIG_SPEC 0x024D /*!< MVE contiguous store instruction speculatively executed */ -#define ARM_PMU_MVE_LDST_NONCONTIG_RETIRED 0x0250 /*!< MVE non-contiguous load or store instruction architecturally executed */ -#define ARM_PMU_MVE_LDST_NONCONTIG_SPEC 0x0251 /*!< MVE non-contiguous load or store instruction speculatively executed */ -#define ARM_PMU_MVE_LD_NONCONTIG_RETIRED 0x0254 /*!< MVE non-contiguous load instruction architecturally executed */ -#define ARM_PMU_MVE_LD_NONCONTIG_SPEC 0x0255 /*!< MVE non-contiguous load instruction speculatively executed */ -#define ARM_PMU_MVE_ST_NONCONTIG_RETIRED 0x0258 /*!< MVE non-contiguous store instruction architecturally executed */ -#define ARM_PMU_MVE_ST_NONCONTIG_SPEC 0x0259 /*!< MVE non-contiguous store instruction speculatively executed */ -#define ARM_PMU_MVE_LDST_MULTI_RETIRED 0x025C /*!< MVE memory instruction targeting multiple registers architecturally executed */ -#define ARM_PMU_MVE_LDST_MULTI_SPEC 0x025D /*!< MVE memory instruction targeting multiple registers speculatively executed */ -#define ARM_PMU_MVE_LD_MULTI_RETIRED 0x0260 /*!< MVE memory load instruction targeting multiple registers architecturally executed */ -#define ARM_PMU_MVE_LD_MULTI_SPEC 0x0261 /*!< MVE memory load instruction targeting multiple registers speculatively executed */ -#define ARM_PMU_MVE_ST_MULTI_RETIRED 0x0261 /*!< MVE memory store instruction targeting multiple registers architecturally executed */ -#define ARM_PMU_MVE_ST_MULTI_SPEC 0x0265 /*!< MVE memory store instruction targeting multiple registers speculatively executed */ -#define ARM_PMU_MVE_LDST_UNALIGNED_RETIRED 0x028C /*!< MVE unaligned memory load or store instruction architecturally executed */ -#define ARM_PMU_MVE_LDST_UNALIGNED_SPEC 0x028D /*!< MVE unaligned memory load or store instruction speculatively executed */ -#define ARM_PMU_MVE_LD_UNALIGNED_RETIRED 0x0290 /*!< MVE unaligned load instruction architecturally executed */ -#define ARM_PMU_MVE_LD_UNALIGNED_SPEC 0x0291 /*!< MVE unaligned load instruction speculatively executed */ -#define ARM_PMU_MVE_ST_UNALIGNED_RETIRED 0x0294 /*!< MVE unaligned store instruction architecturally executed */ -#define ARM_PMU_MVE_ST_UNALIGNED_SPEC 0x0295 /*!< MVE unaligned store instruction speculatively executed */ -#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_RETIRED 0x0298 /*!< MVE unaligned noncontiguous load or store instruction architecturally executed */ -#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_SPEC 0x0299 /*!< MVE unaligned noncontiguous load or store instruction speculatively executed */ -#define ARM_PMU_MVE_VREDUCE_RETIRED 0x02A0 /*!< MVE vector reduction instruction architecturally executed */ -#define ARM_PMU_MVE_VREDUCE_SPEC 0x02A1 /*!< MVE vector reduction instruction speculatively executed */ -#define ARM_PMU_MVE_VREDUCE_FP_RETIRED 0x02A4 /*!< MVE floating-point vector reduction instruction architecturally executed */ -#define ARM_PMU_MVE_VREDUCE_FP_SPEC 0x02A5 /*!< MVE floating-point vector reduction instruction speculatively executed */ -#define ARM_PMU_MVE_VREDUCE_INT_RETIRED 0x02A8 /*!< MVE integer vector reduction instruction architecturally executed */ -#define ARM_PMU_MVE_VREDUCE_INT_SPEC 0x02A9 /*!< MVE integer vector reduction instruction speculatively executed */ -#define ARM_PMU_MVE_PRED 0x02B8 /*!< Cycles where one or more predicated beats architecturally executed */ -#define ARM_PMU_MVE_STALL 0x02CC /*!< Stall cycles caused by an MVE instruction */ -#define ARM_PMU_MVE_STALL_RESOURCE 0x02CD /*!< Stall cycles caused by an MVE instruction because of resource conflicts */ -#define ARM_PMU_MVE_STALL_RESOURCE_MEM 0x02CE /*!< Stall cycles caused by an MVE instruction because of memory resource conflicts */ -#define ARM_PMU_MVE_STALL_RESOURCE_FP 0x02CF /*!< Stall cycles caused by an MVE instruction because of floating-point resource conflicts */ -#define ARM_PMU_MVE_STALL_RESOURCE_INT 0x02D0 /*!< Stall cycles caused by an MVE instruction because of integer resource conflicts */ -#define ARM_PMU_MVE_STALL_BREAK 0x02D3 /*!< Stall cycles caused by an MVE chain break */ -#define ARM_PMU_MVE_STALL_DEPENDENCY 0x02D4 /*!< Stall cycles caused by MVE register dependency */ -#define ARM_PMU_ITCM_ACCESS 0x4007 /*!< Instruction TCM access */ -#define ARM_PMU_DTCM_ACCESS 0x4008 /*!< Data TCM access */ -#define ARM_PMU_TRCEXTOUT0 0x4010 /*!< ETM external output 0 */ -#define ARM_PMU_TRCEXTOUT1 0x4011 /*!< ETM external output 1 */ -#define ARM_PMU_TRCEXTOUT2 0x4012 /*!< ETM external output 2 */ -#define ARM_PMU_TRCEXTOUT3 0x4013 /*!< ETM external output 3 */ -#define ARM_PMU_CTI_TRIGOUT4 0x4018 /*!< Cross-trigger Interface output trigger 4 */ -#define ARM_PMU_CTI_TRIGOUT5 0x4019 /*!< Cross-trigger Interface output trigger 5 */ -#define ARM_PMU_CTI_TRIGOUT6 0x401A /*!< Cross-trigger Interface output trigger 6 */ -#define ARM_PMU_CTI_TRIGOUT7 0x401B /*!< Cross-trigger Interface output trigger 7 */ - -/** \brief PMU Functions */ - -__STATIC_INLINE void ARM_PMU_Enable(void); -__STATIC_INLINE void ARM_PMU_Disable(void); - -__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type); - -__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void); -__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void); - -__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask); -__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask); - -__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void); -__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num); - -__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void); -__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask); - -__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask); -__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask); - -__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask); - -/** - \brief Enable the PMU -*/ -__STATIC_INLINE void ARM_PMU_Enable(void) -{ - PMU->CTRL |= PMU_CTRL_ENABLE_Msk; -} - -/** - \brief Disable the PMU -*/ -__STATIC_INLINE void ARM_PMU_Disable(void) -{ - PMU->CTRL &= ~PMU_CTRL_ENABLE_Msk; -} - -/** - \brief Set event to count for PMU eventer counter - \param [in] num Event counter (0-30) to configure - \param [in] type Event to count -*/ -__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type) -{ - PMU->EVTYPER[num] = type; -} - -/** - \brief Reset cycle counter -*/ -__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void) -{ - PMU->CTRL |= PMU_CTRL_CYCCNT_RESET_Msk; -} - -/** - \brief Reset all event counters -*/ -__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void) -{ - PMU->CTRL |= PMU_CTRL_EVENTCNT_RESET_Msk; -} - -/** - \brief Enable counters - \param [in] mask Counters to enable - \note Enables one or more of the following: - - event counters (0-30) - - cycle counter -*/ -__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask) -{ - PMU->CNTENSET = mask; -} - -/** - \brief Disable counters - \param [in] mask Counters to enable - \note Disables one or more of the following: - - event counters (0-30) - - cycle counter -*/ -__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask) -{ - PMU->CNTENCLR = mask; -} - -/** - \brief Read cycle counter - \return Cycle count -*/ -__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void) -{ - return PMU->CCNTR; -} - -/** - \brief Read event counter - \param [in] num Event counter (0-30) to read - \return Event count -*/ -__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num) -{ - return PMU->EVCNTR[num]; -} - -/** - \brief Read counter overflow status - \return Counter overflow status bits for the following: - - event counters (0-30) - - cycle counter -*/ -__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void) -{ - return PMU->OVSSET; -} - -/** - \brief Clear counter overflow status - \param [in] mask Counter overflow status bits to clear - \note Clears overflow status bits for one or more of the following: - - event counters (0-30) - - cycle counter -*/ -__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask) -{ - PMU->OVSCLR = mask; -} - -/** - \brief Enable counter overflow interrupt request - \param [in] mask Counter overflow interrupt request bits to set - \note Sets overflow interrupt request bits for one or more of the following: - - event counters (0-30) - - cycle counter -*/ -__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask) -{ - PMU->INTENSET = mask; -} - -/** - \brief Disable counter overflow interrupt request - \param [in] mask Counter overflow interrupt request bits to clear - \note Clears overflow interrupt request bits for one or more of the following: - - event counters (0-30) - - cycle counter -*/ -__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask) -{ - PMU->INTENCLR = mask; -} - -/** - \brief Software increment event counter - \param [in] mask Counters to increment - \note Software increment bits for one or more event counters (0-30) -*/ -__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask) -{ - PMU->SWINC = mask; -} - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/at32f403a_407.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/at32f403a_407.h deleted file mode 100644 index 6e8046d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/at32f403a_407.h +++ /dev/null @@ -1,576 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#ifndef __AT32F403A_407_H -#define __AT32F403A_407_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined (__CC_ARM) - #pragma anon_unions -#endif - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup AT32F403A_407 - * @{ - */ - -/** @addtogroup Library_configuration_section - * @{ - */ - -/** - * 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 (AT32F403AVCT7) && !defined (AT32F403ARCT7) && !defined (AT32F403ACCT7) && \ - !defined (AT32F403ACCU7) && !defined (AT32F403AVGT7) && !defined (AT32F403ACGT7) && \ - !defined (AT32F403ARGT7) && !defined (AT32F403ACGU7) && !defined (AT32F403AVET7) && \ - !defined (AT32F403ARET7) && !defined (AT32F403ACET7) && !defined (AT32F403ACEU7) && \ - !defined (AT32F407RGT7) && !defined (AT32F407VGT7) && !defined (AT32F407RCT7) && \ - !defined (AT32F407VCT7) && !defined (AT32F407RET7) && !defined (AT32F407VET7) && \ - !defined (AT32F407AVCT7) && !defined (AT32F407AVGT7) - - #error "Please select first the target device used in your application (in at32f403a_407.h file)" -#endif - -#if defined (AT32F403AVCT7) || defined (AT32F403ARCT7) || defined (AT32F403ACCT7) || \ - defined (AT32F403ACCU7) || defined (AT32F403AVGT7) || defined (AT32F403ACGT7) || \ - defined (AT32F403ARGT7) || defined (AT32F403ACGU7) || defined (AT32F403AVET7) || \ - defined (AT32F403ACET7) || defined (AT32F403ARET7) || defined (AT32F403ACEU7) - - #define AT32F403Axx -#endif - -#if defined (AT32F407RGT7) || defined (AT32F407VGT7) || defined (AT32F407RCT7) || \ - defined (AT32F407VCT7) || defined (AT32F407VET7) || defined (AT32F407RET7) || \ - defined (AT32F407AVCT7) || defined (AT32F407AVGT7) - - #define AT32F407xx -#endif - -#ifndef USE_STDPERIPH_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 - */ - #ifdef _RTE_ - #include "RTE_Components.h" - #ifdef RTE_DEVICE_STDPERIPH_FRAMEWORK - #define USE_STDPERIPH_DRIVER - #endif - #endif -#endif - -/** - * @brief at32f403a_407 standard peripheral library version number - */ -#define __AT32F403A_407_LIBRARY_VERSION_MAJOR (0x02) /*!< [31:24] major version */ -#define __AT32F403A_407_LIBRARY_VERSION_MIDDLE (0x00) /*!< [23:16] middle version */ -#define __AT32F403A_407_LIBRARY_VERSION_MINOR (0x09) /*!< [15:8] minor version */ -#define __AT32F403A_407_LIBRARY_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __AT32F403A_407_LIBRARY_VERSION ((__AT32F403A_407_LIBRARY_VERSION_MAJOR << 24) | \ - (__AT32F403A_407_LIBRARY_VERSION_MIDDLE << 16) | \ - (__AT32F403A_407_LIBRARY_VERSION_MINOR << 8) | \ - (__AT32F403A_407_LIBRARY_VERSION_RC)) - -/** - * @} - */ - -/** @addtogroup Configuration_section_for_CMSIS - * @{ - */ - -/** - * @brief configuration of the cortex-m4 processor and core peripherals - */ -#define __CM4_REV 0x0001U /*!< core revision r0p1 */ -#define __MPU_PRESENT 1 /*!< mpu present */ -#define __NVIC_PRIO_BITS 4 /*!< at32 uses 4 bits for the priority levels */ -#define __Vendor_SysTickConfig 0 /*!< set to 1 if different systick config is used */ -#define __FPU_PRESENT 1U /*!< fpu present */ - -/** - * @brief at32f403a_407 interrupt number definition, according to the selected device - * in @ref Library_configuration_section - */ -typedef enum IRQn -{ - /****** cortex-m4 processor exceptions numbers ***************************************************/ - Reset_IRQn = -15, /*!< 1 reset vector, invoked on power up and warm reset */ - NonMaskableInt_IRQn = -14, /*!< 2 non maskable interrupt */ - HardFault_IRQn = -13, /*!< 3 hard fault, all classes of fault */ - MemoryManagement_IRQn = -12, /*!< 4 cortex-m4 memory management interrupt */ - BusFault_IRQn = -11, /*!< 5 cortex-m4 bus fault interrupt */ - UsageFault_IRQn = -10, /*!< 6 cortex-m4 usage fault interrupt */ - SVCall_IRQn = -5, /*!< 11 cortex-m4 sv call interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 cortex-m4 debug monitor interrupt */ - PendSV_IRQn = -2, /*!< 14 cortex-m4 pend sv interrupt */ - SysTick_IRQn = -1, /*!< 15 cortex-m4 system tick interrupt */ - - /****** at32 specific interrupt numbers *********************************************************/ - WWDT_IRQn = 0, /*!< window watchdog timer interrupt */ - PVM_IRQn = 1, /*!< pvm through exint line detection interrupt */ - TAMPER_IRQn = 2, /*!< tamper interrupt */ - RTC_IRQn = 3, /*!< rtc global interrupt */ - FLASH_IRQn = 4, /*!< flash global interrupt */ - CRM_IRQn = 5, /*!< crm global interrupt */ - EXINT0_IRQn = 6, /*!< external line0 interrupt */ - EXINT1_IRQn = 7, /*!< external line1 interrupt */ - EXINT2_IRQn = 8, /*!< external line2 interrupt */ - EXINT3_IRQn = 9, /*!< external line3 interrupt */ - EXINT4_IRQn = 10, /*!< external 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 */ - -#if defined (AT32F403Axx) - ADC1_2_IRQn = 18, /*!< adc1 and adc2 global interrupt */ - USBFS_H_CAN1_TX_IRQn = 19, /*!< usb device high priority or can1 tx interrupts */ - USBFS_L_CAN1_RX0_IRQn = 20, /*!< usb device low priority or can1 rx0 interrupts */ - CAN1_RX1_IRQn = 21, /*!< can1 rx1 interrupt */ - CAN1_SE_IRQn = 22, /*!< can1 se interrupt */ - EXINT9_5_IRQn = 23, /*!< external line[9:5] interrupts */ - TMR1_BRK_TMR9_IRQn = 24, /*!< tmr1 brake interrupt */ - TMR1_OVF_TMR10_IRQn = 25, /*!< tmr1 overflow interrupt */ - TMR1_TRG_HALL_TMR11_IRQn = 26, /*!< tmr1 trigger and hall interrupt */ - TMR1_CH_IRQn = 27, /*!< tmr1 channel interrupt */ - TMR2_GLOBAL_IRQn = 28, /*!< tmr2 global interrupt */ - TMR3_GLOBAL_IRQn = 29, /*!< tmr3 global interrupt */ - TMR4_GLOBAL_IRQn = 30, /*!< tmr4 global interrupt */ - I2C1_EVT_IRQn = 31, /*!< i2c1 event interrupt */ - I2C1_ERR_IRQn = 32, /*!< i2c1 error interrupt */ - I2C2_EVT_IRQn = 33, /*!< i2c2 event interrupt */ - I2C2_ERR_IRQn = 34, /*!< i2c2 error interrupt */ - SPI1_IRQn = 35, /*!< spi1 global interrupt */ - SPI2_I2S2EXT_IRQn = 36, /*!< spi2 global interrupt */ - USART1_IRQn = 37, /*!< usart1 global interrupt */ - USART2_IRQn = 38, /*!< usart2 global interrupt */ - USART3_IRQn = 39, /*!< usart3 global interrupt */ - EXINT15_10_IRQn = 40, /*!< external line[15:10] interrupts */ - RTCAlarm_IRQn = 41, /*!< rtc alarm through exint line interrupt */ - USBFSWakeUp_IRQn = 42, /*!< usb device wakeup from suspend through exint line interrupt */ - TMR8_BRK_TMR12_IRQn = 43, /*!< tmr8 brake interrupt */ - TMR8_OVF_TMR13_IRQn = 44, /*!< tmr8 overflow interrupt */ - TMR8_TRG_HALL_TMR14_IRQn = 45, /*!< tmr8 trigger and hall interrupt */ - TMR8_CH_IRQn = 46, /*!< tmr8 channel interrupt */ - ADC3_IRQn = 47, /*!< adc3 global interrupt */ - XMC_IRQn = 48, /*!< xmc global interrupt */ - SDIO1_IRQn = 49, /*!< sdio1 global interrupt */ - TMR5_GLOBAL_IRQn = 50, /*!< tmr5 global interrupt */ - SPI3_I2S3EXT_IRQn = 51, /*!< spi3 global interrupt */ - UART4_IRQn = 52, /*!< uart4 global interrupt */ - UART5_IRQn = 53, /*!< uart5 global interrupt */ - TMR6_GLOBAL_IRQn = 54, /*!< tmr6 global interrupt */ - TMR7_GLOBAL_IRQn = 55, /*!< tmr7 global interrupt */ - DMA2_Channel1_IRQn = 56, /*!< dma2 channel 1 global interrupt */ - DMA2_Channel2_IRQn = 57, /*!< dma2 channel 2 global interrupt */ - DMA2_Channel3_IRQn = 58, /*!< dma2 channel 3 global interrupt */ - DMA2_Channel4_5_IRQn = 59, /*!< dma2 channel 4 and channel 5 global interrupt */ - SDIO2_IRQn = 60, /*!< sdio2 global interrupt */ - I2C3_EVT_IRQn = 61, /*!< i2c3 event interrupt */ - I2C3_ERR_IRQn = 62, /*!< i2c3 error interrupt */ - SPI4_IRQn = 63, /*!< spi4 global interrupt */ - CAN2_TX_IRQn = 68, /*!< can2 tx interrupt */ - CAN2_RX0_IRQn = 69, /*!< can2 rx0 interrupt */ - CAN2_RX1_IRQn = 70, /*!< can2 rx1 interrupt */ - CAN2_SE_IRQn = 71, /*!< can2 se interrupt */ - ACC_IRQn = 72, /*!< acc interrupt */ - USBFS_MAPH_IRQn = 73, /*!< usb map hp interrupt */ - USBFS_MAPL_IRQn = 74, /*!< usb map lp interrupt */ - DMA2_Channel6_7_IRQn = 75, /*!< dma2 channel 6 and channel 7 global interrupt */ - USART6_IRQn = 76, /*!< usart6 interrupt */ - UART7_IRQn = 77, /*!< uart7 interrupt */ - UART8_IRQn = 78, /*!< uart8 interrupt */ -#endif - -#if defined (AT32F407xx) - ADC1_2_IRQn = 18, /*!< adc1 and adc2 global interrupt */ - USBFS_H_CAN1_TX_IRQn = 19, /*!< usb device high priority or can1 tx interrupts */ - USBFS_L_CAN1_RX0_IRQn = 20, /*!< usb device low priority or can1 rx0 interrupts */ - CAN1_RX1_IRQn = 21, /*!< can1 rx1 interrupt */ - CAN1_SE_IRQn = 22, /*!< can1 se interrupt */ - EXINT9_5_IRQn = 23, /*!< external line[9:5] interrupts */ - TMR1_BRK_TMR9_IRQn = 24, /*!< tmr1 brake interrupt */ - TMR1_OVF_TMR10_IRQn = 25, /*!< tmr1 overflow interrupt */ - TMR1_TRG_HALL_TMR11_IRQn = 26, /*!< tmr1 trigger and hall interrupt */ - TMR1_CH_IRQn = 27, /*!< tmr1 channel interrupt */ - TMR2_GLOBAL_IRQn = 28, /*!< tmr2 global interrupt */ - TMR3_GLOBAL_IRQn = 29, /*!< tmr3 global interrupt */ - TMR4_GLOBAL_IRQn = 30, /*!< tmr4 global interrupt */ - I2C1_EVT_IRQn = 31, /*!< i2c1 event interrupt */ - I2C1_ERR_IRQn = 32, /*!< i2c1 error interrupt */ - I2C2_EVT_IRQn = 33, /*!< i2c2 event interrupt */ - I2C2_ERR_IRQn = 34, /*!< i2c2 error interrupt */ - SPI1_IRQn = 35, /*!< spi1 global interrupt */ - SPI2_I2S2EXT_IRQn = 36, /*!< spi2 global interrupt */ - USART1_IRQn = 37, /*!< usart1 global interrupt */ - USART2_IRQn = 38, /*!< usart2 global interrupt */ - USART3_IRQn = 39, /*!< usart3 global interrupt */ - EXINT15_10_IRQn = 40, /*!< external line[15:10] interrupts */ - RTCAlarm_IRQn = 41, /*!< rtc alarm through exint line interrupt */ - USBFSWakeUp_IRQn = 42, /*!< usb device wakeup from suspend through exint line interrupt */ - TMR8_BRK_TMR12_IRQn = 43, /*!< tmr8 brake interrupt */ - TMR8_OVF_TMR13_IRQn = 44, /*!< tmr8 overflow interrupt */ - TMR8_TRG_HALL_TMR14_IRQn = 45, /*!< tmr8 trigger and hall interrupt */ - TMR8_CH_IRQn = 46, /*!< tmr8 channel interrupt */ - ADC3_IRQn = 47, /*!< adc3 global interrupt */ - XMC_IRQn = 48, /*!< xmc global interrupt */ - SDIO1_IRQn = 49, /*!< sdio1 global interrupt */ - TMR5_GLOBAL_IRQn = 50, /*!< tmr5 global interrupt */ - SPI3_I2S3EXT_IRQn = 51, /*!< spi3 global interrupt */ - UART4_IRQn = 52, /*!< uart4 global interrupt */ - UART5_IRQn = 53, /*!< uart5 global interrupt */ - TMR6_GLOBAL_IRQn = 54, /*!< tmr6 global interrupt */ - TMR7_GLOBAL_IRQn = 55, /*!< tmr7 global interrupt */ - DMA2_Channel1_IRQn = 56, /*!< dma2 channel 1 global interrupt */ - DMA2_Channel2_IRQn = 57, /*!< dma2 channel 2 global interrupt */ - DMA2_Channel3_IRQn = 58, /*!< dma2 channel 3 global interrupt */ - DMA2_Channel4_5_IRQn = 59, /*!< dma2 channel 4 and channel 5 global interrupt */ - SDIO2_IRQn = 60, /*!< sdio2 global interrupt */ - I2C3_EVT_IRQn = 61, /*!< i2c3 event interrupt */ - I2C3_ERR_IRQn = 62, /*!< i2c3 error interrupt */ - SPI4_IRQn = 63, /*!< spi4 global interrupt */ - CAN2_TX_IRQn = 68, /*!< can2 tx interrupt */ - CAN2_RX0_IRQn = 69, /*!< can2 rx0 interrupt */ - CAN2_RX1_IRQn = 70, /*!< can2 rx1 interrupt */ - CAN2_SE_IRQn = 71, /*!< can2 se interrupt */ - ACC_IRQn = 72, /*!< acc interrupt */ - USBFS_MAPH_IRQn = 73, /*!< usb map hp interrupt */ - USBFS_MAPL_IRQn = 74, /*!< usb map lp interrupt */ - DMA2_Channel6_7_IRQn = 75, /*!< dma2 channel 6 and channel 7 global interrupt */ - USART6_IRQn = 76, /*!< usart6 interrupt */ - UART7_IRQn = 77, /*!< uart7 interrupt */ - UART8_IRQn = 78, /*!< uart8 interrupt */ - EMAC_IRQn = 79, /*!< emac interrupt */ - EMAC_WKUP_IRQn = 80, /*!< emac wakeup interrupt */ -#endif - -} IRQn_Type; - -/** - * @} - */ - -#include "core_cm4.h" -#include "system_at32f403a_407.h" -#include - -/** @addtogroup Exported_types - * @{ - */ - -typedef int32_t INT32; -typedef int16_t INT16; -typedef int8_t INT8; -typedef uint32_t UINT32; -typedef uint16_t UINT16; -typedef uint8_t UINT8; - -typedef int32_t s32; -typedef int16_t s16; -typedef int8_t s8; - -typedef const int32_t sc32; /*!< read only */ -typedef const int16_t sc16; /*!< read only */ -typedef const int8_t sc8; /*!< read only */ - -typedef __IO int32_t vs32; -typedef __IO int16_t vs16; -typedef __IO int8_t vs8; - -typedef __I int32_t vsc32; /*!< read only */ -typedef __I int16_t vsc16; /*!< read only */ -typedef __I int8_t vsc8; /*!< read only */ - -typedef uint32_t u32; -typedef uint16_t u16; -typedef uint8_t u8; - -typedef const uint32_t uc32; /*!< read only */ -typedef const uint16_t uc16; /*!< read only */ -typedef const uint8_t uc8; /*!< read only */ - -typedef __IO uint32_t vu32; -typedef __IO uint16_t vu16; -typedef __IO uint8_t vu8; - -typedef __I uint32_t vuc32; /*!< read only */ -typedef __I uint16_t vuc16; /*!< read only */ -typedef __I uint8_t vuc8; /*!< read only */ - -/** - * @brief flag status - */ -typedef enum {RESET = 0, SET = !RESET} flag_status; - -/** - * @brief confirm state - */ -typedef enum {FALSE = 0, TRUE = !FALSE} confirm_state; - -/** - * @brief error status - */ -typedef enum {ERROR = 0, SUCCESS = !ERROR} error_status; - -/** - * @} - */ - -/** @addtogroup Exported_macro - * @{ - */ - -#define REG8(addr) *(volatile uint8_t *)(addr) -#define REG16(addr) *(volatile uint16_t *)(addr) -#define REG32(addr) *(volatile uint32_t *)(addr) - -#define MAKE_VALUE(reg_offset, bit_num) (uint32_t)(((reg_offset) << 16) | (bit_num & 0x1F)) - -#define PERIPH_REG(periph_base, value) REG32((periph_base + (value >> 16))) -#define PERIPH_REG_BIT(value) (0x1U << (value & 0x1F)) - -/** - * @} - */ - -/** @addtogroup Peripheral_memory_map - * @{ - */ - -#define FLASH_BASE ((uint32_t)0x08000000) -#define SPIM_FLASH_BASE ((uint32_t)0x08400000) -#define USD_BASE ((uint32_t)0x1FFFF800) -#define SRAM_BASE ((uint32_t)0x20000000) -#define PERIPH_BASE ((uint32_t)0x40000000) -#define XMC_REG_BASE ((uint32_t)0xA0000000) -#define DEBUG_BASE ((uint32_t)0xE0042000) - -#define APB1PERIPH_BASE (PERIPH_BASE + 0x00000) -#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) -#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) - -#if defined (AT32F403Axx) -/* apb1 bus base address */ -#define TMR2_BASE (APB1PERIPH_BASE + 0x0000) -#define TMR3_BASE (APB1PERIPH_BASE + 0x0400) -#define TMR4_BASE (APB1PERIPH_BASE + 0x0800) -#define TMR5_BASE (APB1PERIPH_BASE + 0x0C00) -#define TMR6_BASE (APB1PERIPH_BASE + 0x1000) -#define TMR7_BASE (APB1PERIPH_BASE + 0x1400) -#define TMR12_BASE (APB1PERIPH_BASE + 0x1800) -#define TMR13_BASE (APB1PERIPH_BASE + 0x1C00) -#define TMR14_BASE (APB1PERIPH_BASE + 0x2000) -#define RTC_BASE (APB1PERIPH_BASE + 0x2800) -#define WWDT_BASE (APB1PERIPH_BASE + 0x2C00) -#define WDT_BASE (APB1PERIPH_BASE + 0x3000) -#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) -#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00) -#define SPI4_BASE (APB1PERIPH_BASE + 0x4000) -#define USART2_BASE (APB1PERIPH_BASE + 0x4400) -#define USART3_BASE (APB1PERIPH_BASE + 0x4800) -#define UART4_BASE (APB1PERIPH_BASE + 0x4C00) -#define UART5_BASE (APB1PERIPH_BASE + 0x5000) -#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) -#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) -#define USBFS_BASE (APB1PERIPH_BASE + 0x5C00) -#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) -#define CAN2_BASE (APB1PERIPH_BASE + 0x6800) -#define BPR_BASE (APB1PERIPH_BASE + 0x6C00) -#define PWC_BASE (APB1PERIPH_BASE + 0x7000) -#define DAC_BASE (APB1PERIPH_BASE + 0x7400) -/* apb2 bus base address */ -#define IOMUX_BASE (APB2PERIPH_BASE + 0x0000) -#define EXINT_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 TMR1_BASE (APB2PERIPH_BASE + 0x2C00) -#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) -#define TMR8_BASE (APB2PERIPH_BASE + 0x3400) -#define USART1_BASE (APB2PERIPH_BASE + 0x3800) -#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00) -#define TMR9_BASE (APB2PERIPH_BASE + 0x4C00) -#define TMR10_BASE (APB2PERIPH_BASE + 0x5000) -#define TMR11_BASE (APB2PERIPH_BASE + 0x5400) -#define ACC_BASE (APB2PERIPH_BASE + 0x5800) -#define I2C3_BASE (APB2PERIPH_BASE + 0x5C00) -#define USART6_BASE (APB2PERIPH_BASE + 0x6000) -#define UART7_BASE (APB2PERIPH_BASE + 0x6400) -#define UART8_BASE (APB2PERIPH_BASE + 0x6800) -#define I2S2EXT_BASE (APB2PERIPH_BASE + 0x6C00) -#define I2S3EXT_BASE (APB2PERIPH_BASE + 0x7000) -#define SDIO1_BASE (APB2PERIPH_BASE + 0x8000) -/* ahb bus base address */ -#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 DMA2_BASE (AHBPERIPH_BASE + 0x0400) -#define DMA2_CHANNEL1_BASE (AHBPERIPH_BASE + 0x0408) -#define DMA2_CHANNEL2_BASE (AHBPERIPH_BASE + 0x041C) -#define DMA2_CHANNEL3_BASE (AHBPERIPH_BASE + 0x0430) -#define DMA2_CHANNEL4_BASE (AHBPERIPH_BASE + 0x0444) -#define DMA2_CHANNEL5_BASE (AHBPERIPH_BASE + 0x0458) -#define DMA2_CHANNEL6_BASE (AHBPERIPH_BASE + 0x046C) -#define DMA2_CHANNEL7_BASE (AHBPERIPH_BASE + 0x0480) -#define CRM_BASE (AHBPERIPH_BASE + 0x1000) -#define FLASH_REG_BASE (AHBPERIPH_BASE + 0x2000) -#define CRC_BASE (AHBPERIPH_BASE + 0x3000) -#define SDIO2_BASE (AHBPERIPH_BASE + 0x3400) -#define XMC_BANK1_REG_BASE (XMC_REG_BASE + 0x0000) -#define XMC_BANK1E_REG_BASE (XMC_REG_BASE + 0x0104) -#define XMC_BANK1E_H_BASE (XMC_REG_BASE + 0x0220) -#define XMC_BANK2_REG_BASE (XMC_REG_BASE + 0x0060) -#define XMC_BANK3_REG_BASE (XMC_REG_BASE + 0x0080) -#define XMC_BANK4_REG_BASE (XMC_REG_BASE + 0x00A0) -#endif - -#if defined (AT32F407xx) -/* apb1 bus base address */ -#define TMR2_BASE (APB1PERIPH_BASE + 0x0000) -#define TMR3_BASE (APB1PERIPH_BASE + 0x0400) -#define TMR4_BASE (APB1PERIPH_BASE + 0x0800) -#define TMR5_BASE (APB1PERIPH_BASE + 0x0C00) -#define TMR6_BASE (APB1PERIPH_BASE + 0x1000) -#define TMR7_BASE (APB1PERIPH_BASE + 0x1400) -#define TMR12_BASE (APB1PERIPH_BASE + 0x1800) -#define TMR13_BASE (APB1PERIPH_BASE + 0x1C00) -#define TMR14_BASE (APB1PERIPH_BASE + 0x2000) -#define RTC_BASE (APB1PERIPH_BASE + 0x2800) -#define WWDT_BASE (APB1PERIPH_BASE + 0x2C00) -#define WDT_BASE (APB1PERIPH_BASE + 0x3000) -#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) -#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00) -#define SPI4_BASE (APB1PERIPH_BASE + 0x4000) -#define USART2_BASE (APB1PERIPH_BASE + 0x4400) -#define USART3_BASE (APB1PERIPH_BASE + 0x4800) -#define UART4_BASE (APB1PERIPH_BASE + 0x4C00) -#define UART5_BASE (APB1PERIPH_BASE + 0x5000) -#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) -#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) -#define USBFS_BASE (APB1PERIPH_BASE + 0x5C00) -#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) -#define CAN2_BASE (APB1PERIPH_BASE + 0x6800) -#define BPR_BASE (APB1PERIPH_BASE + 0x6C00) -#define PWC_BASE (APB1PERIPH_BASE + 0x7000) -#define DAC_BASE (APB1PERIPH_BASE + 0x7400) -/* apb2 bus base address */ -#define IOMUX_BASE (APB2PERIPH_BASE + 0x0000) -#define EXINT_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 TMR1_BASE (APB2PERIPH_BASE + 0x2C00) -#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) -#define TMR8_BASE (APB2PERIPH_BASE + 0x3400) -#define USART1_BASE (APB2PERIPH_BASE + 0x3800) -#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00) -#define TMR9_BASE (APB2PERIPH_BASE + 0x4C00) -#define TMR10_BASE (APB2PERIPH_BASE + 0x5000) -#define TMR11_BASE (APB2PERIPH_BASE + 0x5400) -#define ACC_BASE (APB2PERIPH_BASE + 0x5800) -#define I2C3_BASE (APB2PERIPH_BASE + 0x5C00) -#define USART6_BASE (APB2PERIPH_BASE + 0x6000) -#define UART7_BASE (APB2PERIPH_BASE + 0x6400) -#define UART8_BASE (APB2PERIPH_BASE + 0x6800) -#define I2S2EXT_BASE (APB2PERIPH_BASE + 0x6C00) -#define I2S3EXT_BASE (APB2PERIPH_BASE + 0x7000) -#define SDIO1_BASE (APB2PERIPH_BASE + 0x8000) -/* ahb bus base address */ -#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 DMA2_BASE (AHBPERIPH_BASE + 0x0400) -#define DMA2_CHANNEL1_BASE (AHBPERIPH_BASE + 0x0408) -#define DMA2_CHANNEL2_BASE (AHBPERIPH_BASE + 0x041C) -#define DMA2_CHANNEL3_BASE (AHBPERIPH_BASE + 0x0430) -#define DMA2_CHANNEL4_BASE (AHBPERIPH_BASE + 0x0444) -#define DMA2_CHANNEL5_BASE (AHBPERIPH_BASE + 0x0458) -#define DMA2_CHANNEL6_BASE (AHBPERIPH_BASE + 0x046C) -#define DMA2_CHANNEL7_BASE (AHBPERIPH_BASE + 0x0480) -#define CRM_BASE (AHBPERIPH_BASE + 0x1000) -#define FLASH_REG_BASE (AHBPERIPH_BASE + 0x2000) -#define CRC_BASE (AHBPERIPH_BASE + 0x3000) -#define SDIO2_BASE (AHBPERIPH_BASE + 0x3400) -#define EMAC_BASE (AHBPERIPH_BASE + 0x8000) -#define XMC_BANK1_REG_BASE (XMC_REG_BASE + 0x0000) -#define XMC_BANK2_REG_BASE (XMC_REG_BASE + 0x0060) -#define EMAC_MMC_BASE (EMAC_BASE + 0x0100) -#define EMAC_PTP_BASE (EMAC_BASE + 0x0700) -#define EMAC_DMA_BASE (EMAC_BASE + 0x1000) -#endif - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#include "at32f403a_407_def.h" -#include "at32f403a_407_conf.h" - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/at32f403a_407_conf_template.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/at32f403a_407_conf_template.h deleted file mode 100644 index 97e0d98..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/at32f403a_407_conf_template.h +++ /dev/null @@ -1,163 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_conf.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 config header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_CONF_H -#define __AT32F403A_407_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * @brief in the following line adjust the value of high speed exernal crystal (hext) - * used in your application - * tip: to avoid modifying this file each time you need to use different hext, you - * can define the hext value in your toolchain compiler preprocessor. - */ -#if !defined HEXT_VALUE -#define HEXT_VALUE ((uint32_t)8000000) /*!< value of the high speed exernal crystal in hz */ -#endif - -/** - * @brief in the following line adjust the high speed exernal crystal (hext) startup - * timeout value - */ -#define HEXT_STARTUP_TIMEOUT ((uint16_t)0x3000) /*!< time out for hext start up */ -#define HICK_VALUE ((uint32_t)8000000) /*!< value of the high speed internal clock in hz */ - -/* module define -------------------------------------------------------------*/ -#define CRM_MODULE_ENABLED -#define TMR_MODULE_ENABLED -#define RTC_MODULE_ENABLED -#define BPR_MODULE_ENABLED -#define GPIO_MODULE_ENABLED -#define I2C_MODULE_ENABLED -#define USART_MODULE_ENABLED -#define PWC_MODULE_ENABLED -#define CAN_MODULE_ENABLED -#define ADC_MODULE_ENABLED -#define DAC_MODULE_ENABLED -#define SPI_MODULE_ENABLED -#define DMA_MODULE_ENABLED -#define DEBUG_MODULE_ENABLED -#define FLASH_MODULE_ENABLED -#define CRC_MODULE_ENABLED -#define WWDT_MODULE_ENABLED -#define WDT_MODULE_ENABLED -#define EXINT_MODULE_ENABLED -#define SDIO_MODULE_ENABLED -#define XMC_MODULE_ENABLED -#define USB_MODULE_ENABLED -#define ACC_MODULE_ENABLED -#define MISC_MODULE_ENABLED -#define EMAC_MODULE_ENABLED - -/* includes ------------------------------------------------------------------*/ -#ifdef CRM_MODULE_ENABLED -#include "at32f403a_407_crm.h" -#endif -#ifdef TMR_MODULE_ENABLED -#include "at32f403a_407_tmr.h" -#endif -#ifdef RTC_MODULE_ENABLED -#include "at32f403a_407_rtc.h" -#endif -#ifdef BPR_MODULE_ENABLED -#include "at32f403a_407_bpr.h" -#endif -#ifdef GPIO_MODULE_ENABLED -#include "at32f403a_407_gpio.h" -#endif -#ifdef I2C_MODULE_ENABLED -#include "at32f403a_407_i2c.h" -#endif -#ifdef USART_MODULE_ENABLED -#include "at32f403a_407_usart.h" -#endif -#ifdef PWC_MODULE_ENABLED -#include "at32f403a_407_pwc.h" -#endif -#ifdef CAN_MODULE_ENABLED -#include "at32f403a_407_can.h" -#endif -#ifdef ADC_MODULE_ENABLED -#include "at32f403a_407_adc.h" -#endif -#ifdef DAC_MODULE_ENABLED -#include "at32f403a_407_dac.h" -#endif -#ifdef SPI_MODULE_ENABLED -#include "at32f403a_407_spi.h" -#endif -#ifdef DMA_MODULE_ENABLED -#include "at32f403a_407_dma.h" -#endif -#ifdef DEBUG_MODULE_ENABLED -#include "at32f403a_407_debug.h" -#endif -#ifdef FLASH_MODULE_ENABLED -#include "at32f403a_407_flash.h" -#endif -#ifdef CRC_MODULE_ENABLED -#include "at32f403a_407_crc.h" -#endif -#ifdef WWDT_MODULE_ENABLED -#include "at32f403a_407_wwdt.h" -#endif -#ifdef WDT_MODULE_ENABLED -#include "at32f403a_407_wdt.h" -#endif -#ifdef EXINT_MODULE_ENABLED -#include "at32f403a_407_exint.h" -#endif -#ifdef SDIO_MODULE_ENABLED -#include "at32f403a_407_sdio.h" -#endif -#ifdef XMC_MODULE_ENABLED -#include "at32f403a_407_xmc.h" -#endif -#ifdef ACC_MODULE_ENABLED -#include "at32f403a_407_acc.h" -#endif -#ifdef MISC_MODULE_ENABLED -#include "at32f403a_407_misc.h" -#endif -#ifdef USB_MODULE_ENABLED -#include "at32f403a_407_usb.h" -#endif -#ifdef EMAC_MODULE_ENABLED -#include "at32f403a_407_emac.h" -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __AT32F403A_407_CONF_H */ - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxC_FLASH.ld b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxC_FLASH.ld deleted file mode 100644 index 7238b76..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxC_FLASH.ld +++ /dev/null @@ -1,154 +0,0 @@ -/* -***************************************************************************** -** -** File : AT32F403AxC_FLASH.ld -** -** Abstract : Linker script for AT32F403AxC Device with -** 256KByte FLASH, 96KByte 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 : Artery Tek AT32 -** -** Environment : Arm gcc toolchain -** -***************************************************************************** -*/ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = 0x20018000; /* 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 -{ -FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K -RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K -} - -/* 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(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - /* Remove information from the standard libraries */ - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxE_FLASH.ld b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxE_FLASH.ld deleted file mode 100644 index 90635dc..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxE_FLASH.ld +++ /dev/null @@ -1,154 +0,0 @@ -/* -***************************************************************************** -** -** File : AT32F403AxE_FLASH.ld -** -** Abstract : Linker script for AT32F403AxE Device with -** 512KByte FLASH, 96KByte 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 : Artery Tek AT32 -** -** Environment : Arm gcc toolchain -** -***************************************************************************** -*/ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = 0x20018000; /* 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 -{ -FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K -RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K -} - -/* 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(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - /* Remove information from the standard libraries */ - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxG_FLASH.ld b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxG_FLASH.ld deleted file mode 100644 index 0d65082..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxG_FLASH.ld +++ /dev/null @@ -1,154 +0,0 @@ -/* -***************************************************************************** -** -** File : AT32F403AxG_FLASH.ld -** -** Abstract : Linker script for AT32F403AxG Device with -** 1000KByte FLASH, 96KByte 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 : Artery Tek AT32 -** -** Environment : Arm gcc toolchain -** -***************************************************************************** -*/ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = 0x20018000; /* 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 -{ -FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1000K -RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K -} - -/* 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(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - /* Remove information from the standard libraries */ - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xC_FLASH.ld b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xC_FLASH.ld deleted file mode 100644 index 9c648aa..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xC_FLASH.ld +++ /dev/null @@ -1,154 +0,0 @@ -/* -***************************************************************************** -** -** File : AT32F407xC_FLASH.ld -** -** Abstract : Linker script for AT32F407xC Device with -** 256KByte FLASH, 96KByte 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 : Artery Tek AT32 -** -** Environment : Arm gcc toolchain -** -***************************************************************************** -*/ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = 0x20018000; /* 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 -{ -FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K -RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K -} - -/* 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(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - /* Remove information from the standard libraries */ - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xE_FLASH.ld b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xE_FLASH.ld deleted file mode 100644 index 0f43a0d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xE_FLASH.ld +++ /dev/null @@ -1,154 +0,0 @@ -/* -***************************************************************************** -** -** File : AT32F407xE_FLASH.ld -** -** Abstract : Linker script for AT32F407xE Device with -** 512KByte FLASH, 96KByte 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 : Artery Tek AT32 -** -** Environment : Arm gcc toolchain -** -***************************************************************************** -*/ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = 0x20018000; /* 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 -{ -FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K -RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K -} - -/* 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(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - /* Remove information from the standard libraries */ - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xG_FLASH.ld b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xG_FLASH.ld deleted file mode 100644 index 09764fd..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/linker/AT32F407xG_FLASH.ld +++ /dev/null @@ -1,154 +0,0 @@ -/* -***************************************************************************** -** -** File : AT32F407xG_FLASH.ld -** -** Abstract : Linker script for AT32F407xG Device with -** 1000KByte FLASH, 96KByte 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 : Artery Tek AT32 -** -** Environment : Arm gcc toolchain -** -***************************************************************************** -*/ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = 0x20018000; /* 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 -{ -FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1000K -RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K -} - -/* 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(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - /* Remove information from the standard libraries */ - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/startup_at32f403a_407.s b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/startup_at32f403a_407.s deleted file mode 100644 index 22f5631..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/gcc/startup_at32f403a_407.s +++ /dev/null @@ -1,480 +0,0 @@ -/** - ****************************************************************************** - * @file startup_at32f403a_407.s - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407xx devices vector table for gcc 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 and the external sram to - * be used as data memory (optional, to be enabled by user) - * - branches to main in the c library (which eventually - * calls main()). - * after reset the cortex-m4 processor is in thread mode, - * priority is privileged, and the stack is set to main. - ****************************************************************************** - */ - - .syntax unified - .cpu cortex-m4 - .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 -/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ - -/** - * @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 - - /* External Interrupts */ - .word WWDT_IRQHandler /* Window Watchdog Timer */ - .word PVM_IRQHandler /* PVM through EXINT Line detect */ - .word TAMPER_IRQHandler /* Tamper */ - .word RTC_IRQHandler /* RTC */ - .word FLASH_IRQHandler /* Flash */ - .word CRM_IRQHandler /* CRM */ - .word EXINT0_IRQHandler /* EXINT Line 0 */ - .word EXINT1_IRQHandler /* EXINT Line 1 */ - .word EXINT2_IRQHandler /* EXINT Line 2 */ - .word EXINT3_IRQHandler /* EXINT Line 3 */ - .word EXINT4_IRQHandler /* EXINT Line 4 */ - .word DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */ - .word DMA1_Channel2_IRQHandler /* DMA1 Channel 2 */ - .word DMA1_Channel3_IRQHandler /* DMA1 Channel 3 */ - .word DMA1_Channel4_IRQHandler /* DMA1 Channel 4 */ - .word DMA1_Channel5_IRQHandler /* DMA1 Channel 5 */ - .word DMA1_Channel6_IRQHandler /* DMA1 Channel 6 */ - .word DMA1_Channel7_IRQHandler /* DMA1 Channel 7 */ - .word ADC1_2_IRQHandler /* ADC1 & ADC2 */ - .word USBFS_H_CAN1_TX_IRQHandler /* USB High Priority or CAN1 TX */ - .word USBFS_L_CAN1_RX0_IRQHandler /* USB Low Priority or CAN1 RX0 */ - .word CAN1_RX1_IRQHandler /* CAN1 RX1 */ - .word CAN1_SE_IRQHandler /* CAN1 SE */ - .word EXINT9_5_IRQHandler /* EXINT Line [9:5] */ - .word TMR1_BRK_TMR9_IRQHandler /* TMR1 Brake and TMR9 */ - .word TMR1_OVF_TMR10_IRQHandler /* TMR1 Overflow and TMR10 */ - .word TMR1_TRG_HALL_TMR11_IRQHandler /* TMR1 Trigger and hall and TMR11 */ - .word TMR1_CH_IRQHandler /* TMR1 Channel */ - .word TMR2_GLOBAL_IRQHandler /* TMR2 */ - .word TMR3_GLOBAL_IRQHandler /* TMR3 */ - .word TMR4_GLOBAL_IRQHandler /* TMR4 */ - .word I2C1_EVT_IRQHandler /* I2C1 Event */ - .word I2C1_ERR_IRQHandler /* I2C1 Error */ - .word I2C2_EVT_IRQHandler /* I2C2 Event */ - .word I2C2_ERR_IRQHandler /* I2C2 Error */ - .word SPI1_IRQHandler /* SPI1 */ - .word SPI2_I2S2EXT_IRQHandler /* SPI2 & I2S2EXT */ - .word USART1_IRQHandler /* USART1 */ - .word USART2_IRQHandler /* USART2 */ - .word USART3_IRQHandler /* USART3 */ - .word EXINT15_10_IRQHandler /* EXINT Line [15:10] */ - .word RTCAlarm_IRQHandler /* RTC Alarm through EXINT Line */ - .word USBFSWakeUp_IRQHandler /* USB Wakeup from suspend */ - .word TMR8_BRK_TMR12_IRQHandler /* TMR8 Brake and TMR12 */ - .word TMR8_OVF_TMR13_IRQHandler /* TMR8 Overflow and TMR13 */ - .word TMR8_TRG_HALL_TMR14_IRQHandler /* TMR8 Trigger and hall and TMR14 */ - .word TMR8_CH_IRQHandler /* TMR8 Channel */ - .word ADC3_IRQHandler /* ADC3 */ - .word XMC_IRQHandler /* XMC */ - .word SDIO1_IRQHandler /* SDIO1 */ - .word TMR5_GLOBAL_IRQHandler /* TMR5 */ - .word SPI3_I2S3EXT_IRQHandler /* SPI3 & I2S3EXT */ - .word UART4_IRQHandler /* UART4 */ - .word UART5_IRQHandler /* UART5 */ - .word TMR6_GLOBAL_IRQHandler /* TMR6 */ - .word TMR7_GLOBAL_IRQHandler /* TMR7 */ - .word DMA2_Channel1_IRQHandler /* DMA2 Channel1 */ - .word DMA2_Channel2_IRQHandler /* DMA2 Channel2 */ - .word DMA2_Channel3_IRQHandler /* DMA2 Channel3 */ - .word DMA2_Channel4_5_IRQHandler /* DMA2 Channel4 & Channel5 */ - .word SDIO2_IRQHandler /* SDIO2 */ - .word I2C3_EVT_IRQHandler /* I2C3 Event */ - .word I2C3_ERR_IRQHandler /* I2C3 Error */ - .word SPI4_IRQHandler /* SPI4 */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word 0 /* Reserved */ - .word CAN2_TX_IRQHandler /* CAN2 TX */ - .word CAN2_RX0_IRQHandler /* CAN2 RX0 */ - .word CAN2_RX1_IRQHandler /* CAN2 RX1 */ - .word CAN2_SE_IRQHandler /* CAN2 SE */ - .word ACC_IRQHandler /* ACC */ - .word USBFS_MAPH_IRQHandler /* USB Map HP */ - .word USBFS_MAPL_IRQHandler /* USB Map LP */ - .word DMA2_Channel6_7_IRQHandler /* DMA2 Channel6 & Channel7 */ - .word USART6_IRQHandler /* USART6 */ - .word UART7_IRQHandler /* UART7 */ - .word UART8_IRQHandler /* UART8 */ - .word EMAC_IRQHandler /* EMAC */ - .word EMAC_WKUP_IRQHandler /* EMAC Wakeup */ - -/******************************************************************************* -* -* 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 WWDT_IRQHandler - .thumb_set WWDT_IRQHandler,Default_Handler - - .weak PVM_IRQHandler - .thumb_set PVM_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 CRM_IRQHandler - .thumb_set CRM_IRQHandler,Default_Handler - - .weak EXINT0_IRQHandler - .thumb_set EXINT0_IRQHandler,Default_Handler - - .weak EXINT1_IRQHandler - .thumb_set EXINT1_IRQHandler,Default_Handler - - .weak EXINT2_IRQHandler - .thumb_set EXINT2_IRQHandler,Default_Handler - - .weak EXINT3_IRQHandler - .thumb_set EXINT3_IRQHandler,Default_Handler - - .weak EXINT4_IRQHandler - .thumb_set EXINT4_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 USBFS_H_CAN1_TX_IRQHandler - .thumb_set USBFS_H_CAN1_TX_IRQHandler,Default_Handler - - .weak USBFS_L_CAN1_RX0_IRQHandler - .thumb_set USBFS_L_CAN1_RX0_IRQHandler,Default_Handler - - .weak CAN1_RX1_IRQHandler - .thumb_set CAN1_RX1_IRQHandler,Default_Handler - - .weak CAN1_SE_IRQHandler - .thumb_set CAN1_SE_IRQHandler,Default_Handler - - .weak EXINT9_5_IRQHandler - .thumb_set EXINT9_5_IRQHandler,Default_Handler - - .weak TMR1_BRK_TMR9_IRQHandler - .thumb_set TMR1_BRK_TMR9_IRQHandler,Default_Handler - - .weak TMR1_OVF_TMR10_IRQHandler - .thumb_set TMR1_OVF_TMR10_IRQHandler,Default_Handler - - .weak TMR1_TRG_HALL_TMR11_IRQHandler - .thumb_set TMR1_TRG_HALL_TMR11_IRQHandler,Default_Handler - - .weak TMR1_CH_IRQHandler - .thumb_set TMR1_CH_IRQHandler,Default_Handler - - .weak TMR2_GLOBAL_IRQHandler - .thumb_set TMR2_GLOBAL_IRQHandler,Default_Handler - - .weak TMR3_GLOBAL_IRQHandler - .thumb_set TMR3_GLOBAL_IRQHandler,Default_Handler - - .weak TMR4_GLOBAL_IRQHandler - .thumb_set TMR4_GLOBAL_IRQHandler,Default_Handler - - .weak I2C1_EVT_IRQHandler - .thumb_set I2C1_EVT_IRQHandler,Default_Handler - - .weak I2C1_ERR_IRQHandler - .thumb_set I2C1_ERR_IRQHandler,Default_Handler - - .weak I2C2_EVT_IRQHandler - .thumb_set I2C2_EVT_IRQHandler,Default_Handler - - .weak I2C2_ERR_IRQHandler - .thumb_set I2C2_ERR_IRQHandler,Default_Handler - - .weak SPI1_IRQHandler - .thumb_set SPI1_IRQHandler,Default_Handler - - .weak SPI2_I2S2EXT_IRQHandler - .thumb_set SPI2_I2S2EXT_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 EXINT15_10_IRQHandler - .thumb_set EXINT15_10_IRQHandler,Default_Handler - - .weak RTCAlarm_IRQHandler - .thumb_set RTCAlarm_IRQHandler,Default_Handler - - .weak USBFSWakeUp_IRQHandler - .thumb_set USBFSWakeUp_IRQHandler,Default_Handler - - .weak TMR8_BRK_TMR12_IRQHandler - .thumb_set TMR8_BRK_TMR12_IRQHandler,Default_Handler - - .weak TMR8_OVF_TMR13_IRQHandler - .thumb_set TMR8_OVF_TMR13_IRQHandler,Default_Handler - - .weak TMR8_TRG_HALL_TMR14_IRQHandler - .thumb_set TMR8_TRG_HALL_TMR14_IRQHandler,Default_Handler - - .weak TMR8_CH_IRQHandler - .thumb_set TMR8_CH_IRQHandler,Default_Handler - - .weak ADC3_IRQHandler - .thumb_set ADC3_IRQHandler,Default_Handler - - .weak XMC_IRQHandler - .thumb_set XMC_IRQHandler,Default_Handler - - .weak SDIO1_IRQHandler - .thumb_set SDIO1_IRQHandler,Default_Handler - - .weak TMR5_GLOBAL_IRQHandler - .thumb_set TMR5_GLOBAL_IRQHandler,Default_Handler - - .weak SPI3_I2S3EXT_IRQHandler - .thumb_set SPI3_I2S3EXT_IRQHandler,Default_Handler - - .weak UART4_IRQHandler - .thumb_set UART4_IRQHandler,Default_Handler - - .weak UART5_IRQHandler - .thumb_set UART5_IRQHandler,Default_Handler - - .weak TMR6_GLOBAL_IRQHandler - .thumb_set TMR6_GLOBAL_IRQHandler,Default_Handler - - .weak TMR7_GLOBAL_IRQHandler - .thumb_set TMR7_GLOBAL_IRQHandler,Default_Handler - - .weak DMA2_Channel1_IRQHandler - .thumb_set DMA2_Channel1_IRQHandler,Default_Handler - - .weak DMA2_Channel2_IRQHandler - .thumb_set DMA2_Channel2_IRQHandler,Default_Handler - - .weak DMA2_Channel3_IRQHandler - .thumb_set DMA2_Channel3_IRQHandler,Default_Handler - - .weak DMA2_Channel4_5_IRQHandler - .thumb_set DMA2_Channel4_5_IRQHandler,Default_Handler - - .weak SDIO2_IRQHandler - .thumb_set SDIO2_IRQHandler,Default_Handler - - .weak I2C3_EVT_IRQHandler - .thumb_set I2C3_EVT_IRQHandler,Default_Handler - - .weak I2C3_ERR_IRQHandler - .thumb_set I2C3_ERR_IRQHandler,Default_Handler - - .weak SPI4_IRQHandler - .thumb_set SPI4_IRQHandler,Default_Handler - - .weak CAN2_TX_IRQHandler - .thumb_set CAN2_TX_IRQHandler,Default_Handler - - .weak CAN2_RX0_IRQHandler - .thumb_set CAN2_RX0_IRQHandler ,Default_Handler - - .weak CAN2_RX1_IRQHandler - .thumb_set CAN2_RX1_IRQHandler ,Default_Handler - - .weak CAN2_SE_IRQHandler - .thumb_set CAN2_SE_IRQHandler,Default_Handler - - .weak ACC_IRQHandler - .thumb_set ACC_IRQHandler,Default_Handler - - .weak USBFS_MAPH_IRQHandler - .thumb_set USBFS_MAPH_IRQHandler,Default_Handler - - .weak USBFS_MAPL_IRQHandler - .thumb_set USBFS_MAPL_IRQHandler,Default_Handler - - .weak DMA2_Channel6_7_IRQHandler - .thumb_set DMA2_Channel6_7_IRQHandler,Default_Handler - - .weak USART6_IRQHandler - .thumb_set USART6_IRQHandler,Default_Handler - - .weak UART7_IRQHandler - .thumb_set UART7_IRQHandler,Default_Handler - - .weak UART8_IRQHandler - .thumb_set UART8_IRQHandler,Default_Handler - - .weak EMAC_IRQHandler - .thumb_set EMAC_IRQHandler,Default_Handler - - .weak EMAC_WKUP_IRQHandler - .thumb_set EMAC_WKUP_IRQHandler,Default_Handler diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxC.icf b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxC.icf deleted file mode 100644 index ddcaf1e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxC.icf +++ /dev/null @@ -1,30 +0,0 @@ -/*###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__ = 0x0803FFFF; -define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x20037FFF; -/*-Sizes-*/ -define symbol __ICFEDIT_size_cstack__ = 0x1000; -define symbol __ICFEDIT_size_heap__ = 0x1000; -/**** 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 }; \ No newline at end of file diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxE.icf b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxE.icf deleted file mode 100644 index d850b6e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxE.icf +++ /dev/null @@ -1,30 +0,0 @@ -/*###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__ = 0x0807FFFF; -define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x20037FFF; -/*-Sizes-*/ -define symbol __ICFEDIT_size_cstack__ = 0x1000; -define symbol __ICFEDIT_size_heap__ = 0x1000; -/**** 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 }; \ No newline at end of file diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxG.icf b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxG.icf deleted file mode 100644 index f7b2272..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxG.icf +++ /dev/null @@ -1,30 +0,0 @@ -/*###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__ = 0x080FFFFF; -define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x20037FFF; -/*-Sizes-*/ -define symbol __ICFEDIT_size_cstack__ = 0x1000; -define symbol __ICFEDIT_size_heap__ = 0x1000; -/**** 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 }; \ No newline at end of file diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xC.icf b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xC.icf deleted file mode 100644 index ddcaf1e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xC.icf +++ /dev/null @@ -1,30 +0,0 @@ -/*###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__ = 0x0803FFFF; -define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x20037FFF; -/*-Sizes-*/ -define symbol __ICFEDIT_size_cstack__ = 0x1000; -define symbol __ICFEDIT_size_heap__ = 0x1000; -/**** 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 }; \ No newline at end of file diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xE.icf b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xE.icf deleted file mode 100644 index d850b6e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xE.icf +++ /dev/null @@ -1,30 +0,0 @@ -/*###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__ = 0x0807FFFF; -define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x20037FFF; -/*-Sizes-*/ -define symbol __ICFEDIT_size_cstack__ = 0x1000; -define symbol __ICFEDIT_size_heap__ = 0x1000; -/**** 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 }; \ No newline at end of file diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xG.icf b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xG.icf deleted file mode 100644 index f7b2272..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/linker/AT32F407xG.icf +++ /dev/null @@ -1,30 +0,0 @@ -/*###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__ = 0x080FFFFF; -define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x20037FFF; -/*-Sizes-*/ -define symbol __ICFEDIT_size_cstack__ = 0x1000; -define symbol __ICFEDIT_size_heap__ = 0x1000; -/**** 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 }; \ No newline at end of file diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/startup_at32f403a_407.s b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/startup_at32f403a_407.s deleted file mode 100644 index 99d8330..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/iar/startup_at32f403a_407.s +++ /dev/null @@ -1,573 +0,0 @@ -;************************************************************************** -;* @file startup_at32f403a_407.s -;* @version v2.0.9 -;* @date 2022-04-25 -;* @brief at32f403a_407 startup file for IAR Systems -;************************************************************************** -; - -; Amount of memory (in bytes) allocated for Stack -; Tailor this value to your application needs -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; -; - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA -__vector_table - DCD sfe(CSTACK) - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDT_IRQHandler ; Window Watchdog Timer - DCD PVM_IRQHandler ; PVM through EXINT Line detect - DCD TAMPER_IRQHandler ; Tamper - DCD RTC_IRQHandler ; RTC - DCD FLASH_IRQHandler ; Flash - DCD CRM_IRQHandler ; CRM - DCD EXINT0_IRQHandler ; EXINT Line 0 - DCD EXINT1_IRQHandler ; EXINT Line 1 - DCD EXINT2_IRQHandler ; EXINT Line 2 - DCD EXINT3_IRQHandler ; EXINT Line 3 - DCD EXINT4_IRQHandler ; EXINT Line 4 - DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 - DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 - DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 - DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 - DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 - DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 - DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 - DCD ADC1_2_IRQHandler ; ADC1 & ADC2 - DCD USBFS_H_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX - DCD USBFS_L_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; CAN1 RX1 - DCD CAN1_SE_IRQHandler ; CAN1 SE - DCD EXINT9_5_IRQHandler ; EXINT Line [9:5] - DCD TMR1_BRK_TMR9_IRQHandler ; TMR1 Brake and TMR9 - DCD TMR1_OVF_TMR10_IRQHandler ; TMR1 Overflow and TMR10 - DCD TMR1_TRG_HALL_TMR11_IRQHandler ; TMR1 Trigger and hall and TMR11 - DCD TMR1_CH_IRQHandler ; TMR1 Channel - DCD TMR2_GLOBAL_IRQHandler ; TMR2 - DCD TMR3_GLOBAL_IRQHandler ; TMR3 - DCD TMR4_GLOBAL_IRQHandler ; TMR4 - DCD I2C1_EVT_IRQHandler ; I2C1 Event - DCD I2C1_ERR_IRQHandler ; I2C1 Error - DCD I2C2_EVT_IRQHandler ; I2C2 Event - DCD I2C2_ERR_IRQHandler ; I2C2 Error - DCD SPI1_IRQHandler ; SPI1 - DCD SPI2_I2S2EXT_IRQHandler ; SPI2 & I2S2EXT - DCD USART1_IRQHandler ; USART1 - DCD USART2_IRQHandler ; USART2 - DCD USART3_IRQHandler ; USART3 - DCD EXINT15_10_IRQHandler ; EXINT Line [15:10] - DCD RTCAlarm_IRQHandler ; RTC Alarm through EXINT Line - DCD USBFSWakeUp_IRQHandler ; USB Wakeup from suspend - DCD TMR8_BRK_TMR12_IRQHandler ; TMR8 Brake and TMR12 - DCD TMR8_OVF_TMR13_IRQHandler ; TMR8 Overflow and TMR13 - DCD TMR8_TRG_HALL_TMR14_IRQHandler ; TMR8 Trigger and hall and TMR14 - DCD TMR8_CH_IRQHandler ; TMR8 Channel - DCD ADC3_IRQHandler ; ADC3 - DCD XMC_IRQHandler ; XMC - DCD SDIO1_IRQHandler ; SDIO1 - DCD TMR5_GLOBAL_IRQHandler ; TMR5 - DCD SPI3_I2S3EXT_IRQHandler ; SPI3 & I2S3EXT - DCD UART4_IRQHandler ; UART4 - DCD UART5_IRQHandler ; UART5 - DCD TMR6_GLOBAL_IRQHandler ; TMR6 - DCD TMR7_GLOBAL_IRQHandler ; TMR7 - DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 - DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 - DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 - DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 - DCD SDIO2_IRQHandler ; SDIO2 - DCD I2C3_EVT_IRQHandler ; I2C3 Event - DCD I2C3_ERR_IRQHandler ; I2C3 Error - DCD SPI4_IRQHandler ; SPI4 - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD CAN2_TX_IRQHandler ; CAN2 TX - DCD CAN2_RX0_IRQHandler ; CAN2 RX0 - DCD CAN2_RX1_IRQHandler ; CAN2 RX1 - DCD CAN2_SE_IRQHandler ; CAN2 SE - DCD ACC_IRQHandler ; ACC - DCD USBFS_MAPH_IRQHandler ; USB Map HP - DCD USBFS_MAPL_IRQHandler ; USB Map LP - DCD DMA2_Channel6_7_IRQHandler ; DMA2 Channel6 & Channel7 - DCD USART6_IRQHandler ; USART6 - DCD UART7_IRQHandler ; UART7 - DCD UART8_IRQHandler ; UART8 - DCD EMAC_IRQHandler ; EMAC - DCD EMAC_WKUP_IRQHandler ; EMAC_WKUP - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:REORDER:NOROOT(2) -Reset_Handler - LDR R0, =SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:REORDER:NOROOT(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDT_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -WWDT_IRQHandler - B WWDT_IRQHandler - - PUBWEAK PVM_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -PVM_IRQHandler - B PVM_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FLASH_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -FLASH_IRQHandler - B FLASH_IRQHandler - - PUBWEAK CRM_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CRM_IRQHandler - B CRM_IRQHandler - - PUBWEAK EXINT0_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EXINT0_IRQHandler - B EXINT0_IRQHandler - - PUBWEAK EXINT1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EXINT1_IRQHandler - B EXINT1_IRQHandler - - PUBWEAK EXINT2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EXINT2_IRQHandler - B EXINT2_IRQHandler - - PUBWEAK EXINT3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EXINT3_IRQHandler - B EXINT3_IRQHandler - - PUBWEAK EXINT4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EXINT4_IRQHandler - B EXINT4_IRQHandler - - PUBWEAK DMA1_Channel1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel1_IRQHandler - B DMA1_Channel1_IRQHandler - - PUBWEAK DMA1_Channel2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel2_IRQHandler - B DMA1_Channel2_IRQHandler - - PUBWEAK DMA1_Channel3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel3_IRQHandler - B DMA1_Channel3_IRQHandler - - PUBWEAK DMA1_Channel4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel4_IRQHandler - B DMA1_Channel4_IRQHandler - - PUBWEAK DMA1_Channel5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel5_IRQHandler - B DMA1_Channel5_IRQHandler - - PUBWEAK DMA1_Channel6_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel6_IRQHandler - B DMA1_Channel6_IRQHandler - - PUBWEAK DMA1_Channel7_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA1_Channel7_IRQHandler - B DMA1_Channel7_IRQHandler - - PUBWEAK ADC1_2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -ADC1_2_IRQHandler - B ADC1_2_IRQHandler - - PUBWEAK USBFS_H_CAN1_TX_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBFS_H_CAN1_TX_IRQHandler - B USBFS_H_CAN1_TX_IRQHandler - - PUBWEAK USBFS_L_CAN1_RX0_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBFS_L_CAN1_RX0_IRQHandler - B USBFS_L_CAN1_RX0_IRQHandler - - PUBWEAK CAN1_RX1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN1_RX1_IRQHandler - B CAN1_RX1_IRQHandler - - PUBWEAK CAN1_SE_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN1_SE_IRQHandler - B CAN1_SE_IRQHandler - - PUBWEAK EXINT9_5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EXINT9_5_IRQHandler - B EXINT9_5_IRQHandler - - PUBWEAK TMR1_BRK_TMR9_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_BRK_TMR9_IRQHandler - B TMR1_BRK_TMR9_IRQHandler - - PUBWEAK TMR1_OVF_TMR10_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_OVF_TMR10_IRQHandler - B TMR1_OVF_TMR10_IRQHandler - - PUBWEAK TMR1_TRG_HALL_TMR11_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_TRG_HALL_TMR11_IRQHandler - B TMR1_TRG_HALL_TMR11_IRQHandler - - PUBWEAK TMR1_CH_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR1_CH_IRQHandler - B TMR1_CH_IRQHandler - - PUBWEAK TMR2_GLOBAL_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR2_GLOBAL_IRQHandler - B TMR2_GLOBAL_IRQHandler - - PUBWEAK TMR3_GLOBAL_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR3_GLOBAL_IRQHandler - B TMR3_GLOBAL_IRQHandler - - PUBWEAK TMR4_GLOBAL_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR4_GLOBAL_IRQHandler - B TMR4_GLOBAL_IRQHandler - - PUBWEAK I2C1_EVT_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C1_EVT_IRQHandler - B I2C1_EVT_IRQHandler - - PUBWEAK I2C1_ERR_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C1_ERR_IRQHandler - B I2C1_ERR_IRQHandler - - PUBWEAK I2C2_EVT_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C2_EVT_IRQHandler - B I2C2_EVT_IRQHandler - - PUBWEAK I2C2_ERR_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C2_ERR_IRQHandler - B I2C2_ERR_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK SPI2_I2S2EXT_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SPI2_I2S2EXT_IRQHandler - B SPI2_I2S2EXT_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK USART3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART3_IRQHandler - B USART3_IRQHandler - - PUBWEAK EXINT15_10_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EXINT15_10_IRQHandler - B EXINT15_10_IRQHandler - - PUBWEAK RTCAlarm_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -RTCAlarm_IRQHandler - B RTCAlarm_IRQHandler - - PUBWEAK USBFSWakeUp_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBFSWakeUp_IRQHandler - B USBFSWakeUp_IRQHandler - - PUBWEAK TMR8_BRK_TMR12_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR8_BRK_TMR12_IRQHandler - B TMR8_BRK_TMR12_IRQHandler - - PUBWEAK TMR8_OVF_TMR13_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR8_OVF_TMR13_IRQHandler - B TMR8_OVF_TMR13_IRQHandler - - PUBWEAK TMR8_TRG_HALL_TMR14_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR8_TRG_HALL_TMR14_IRQHandler - B TMR8_TRG_HALL_TMR14_IRQHandler - - PUBWEAK TMR8_CH_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR8_CH_IRQHandler - B TMR8_CH_IRQHandler - - PUBWEAK ADC3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -ADC3_IRQHandler - B ADC3_IRQHandler - - PUBWEAK XMC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -XMC_IRQHandler - B XMC_IRQHandler - - PUBWEAK SDIO1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SDIO1_IRQHandler - B SDIO1_IRQHandler - - PUBWEAK TMR5_GLOBAL_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR5_GLOBAL_IRQHandler - B TMR5_GLOBAL_IRQHandler - - PUBWEAK SPI3_I2S3EXT_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SPI3_I2S3EXT_IRQHandler - B SPI3_I2S3EXT_IRQHandler - - PUBWEAK UART4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -UART4_IRQHandler - B UART4_IRQHandler - - PUBWEAK UART5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -UART5_IRQHandler - B UART5_IRQHandler - - PUBWEAK TMR6_GLOBAL_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR6_GLOBAL_IRQHandler - B TMR6_GLOBAL_IRQHandler - - PUBWEAK TMR7_GLOBAL_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -TMR7_GLOBAL_IRQHandler - B TMR7_GLOBAL_IRQHandler - - PUBWEAK DMA2_Channel1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA2_Channel1_IRQHandler - B DMA2_Channel1_IRQHandler - - PUBWEAK DMA2_Channel2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA2_Channel2_IRQHandler - B DMA2_Channel2_IRQHandler - - PUBWEAK DMA2_Channel3_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA2_Channel3_IRQHandler - B DMA2_Channel3_IRQHandler - - PUBWEAK DMA2_Channel4_5_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA2_Channel4_5_IRQHandler - B DMA2_Channel4_5_IRQHandler - - PUBWEAK SDIO2_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SDIO2_IRQHandler - B SDIO2_IRQHandler - - PUBWEAK I2C3_EVT_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C3_EVT_IRQHandler - B I2C3_EVT_IRQHandler - - PUBWEAK I2C3_ERR_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -I2C3_ERR_IRQHandler - B I2C3_ERR_IRQHandler - - PUBWEAK SPI4_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -SPI4_IRQHandler - B SPI4_IRQHandler - - PUBWEAK CAN2_TX_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN2_TX_IRQHandler - B CAN2_TX_IRQHandler - - PUBWEAK CAN2_RX0_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN2_RX0_IRQHandler - B CAN2_RX0_IRQHandler - - PUBWEAK CAN2_RX1_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN2_RX1_IRQHandler - B CAN2_RX1_IRQHandler - - PUBWEAK CAN2_SE_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -CAN2_SE_IRQHandler - B CAN2_SE_IRQHandler - - PUBWEAK ACC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -ACC_IRQHandler - B ACC_IRQHandler - - PUBWEAK USBFS_MAPH_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBFS_MAPH_IRQHandler - B USBFS_MAPH_IRQHandler - - PUBWEAK USBFS_MAPL_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USBFS_MAPL_IRQHandler - B USBFS_MAPL_IRQHandler - - PUBWEAK DMA2_Channel6_7_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -DMA2_Channel6_7_IRQHandler - B DMA2_Channel6_7_IRQHandler - - PUBWEAK USART6_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -USART6_IRQHandler - B USART6_IRQHandler - - PUBWEAK UART7_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -UART7_IRQHandler - B UART7_IRQHandler - - PUBWEAK UART8_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -UART8_IRQHandler - B UART8_IRQHandler - - PUBWEAK EMAC_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EMAC_IRQHandler - B EMAC_IRQHandler - - PUBWEAK EMAC_WKUP_IRQHandler - SECTION .text:CODE:REORDER:NOROOT(1) -EMAC_WKUP_IRQHandler - B EMAC_WKUP_IRQHandler - - END diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/mdk/startup_at32f403a_407.s b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/mdk/startup_at32f403a_407.s deleted file mode 100644 index 3ca9b31..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/startup/mdk/startup_at32f403a_407.s +++ /dev/null @@ -1,391 +0,0 @@ -;************************************************************************** -;* @file startup_at32f403a_407.s -;* @version v2.0.9 -;* @date 2022-04-25 -;* @brief at32f403a_407 startup file for keil -;************************************************************************** -; - -; Amount of memory (in bytes) allocated for Stack -; Tailor this value to your application needs -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN=3 -Stack_Mem SPACE Stack_Size -__initial_sp - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000200 - - AREA HEAP, NOINIT, READWRITE, ALIGN=3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - PRESERVE8 - THUMB - - -; Vector Table Mapped to Address 0 at Reset - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDT_IRQHandler ; Window Watchdog Timer - DCD PVM_IRQHandler ; PVM through EXINT Line detect - DCD TAMPER_IRQHandler ; Tamper - DCD RTC_IRQHandler ; RTC - DCD FLASH_IRQHandler ; Flash - DCD CRM_IRQHandler ; CRM - DCD EXINT0_IRQHandler ; EXINT Line 0 - DCD EXINT1_IRQHandler ; EXINT Line 1 - DCD EXINT2_IRQHandler ; EXINT Line 2 - DCD EXINT3_IRQHandler ; EXINT Line 3 - DCD EXINT4_IRQHandler ; EXINT Line 4 - DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 - DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 - DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 - DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 - DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 - DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 - DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 - DCD ADC1_2_IRQHandler ; ADC1 & ADC2 - DCD USBFS_H_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX - DCD USBFS_L_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; CAN1 RX1 - DCD CAN1_SE_IRQHandler ; CAN1 SE - DCD EXINT9_5_IRQHandler ; EXINT Line [9:5] - DCD TMR1_BRK_TMR9_IRQHandler ; TMR1 Brake and TMR9 - DCD TMR1_OVF_TMR10_IRQHandler ; TMR1 overflow and TMR10 - DCD TMR1_TRG_HALL_TMR11_IRQHandler ; TMR1 Trigger and hall and TMR11 - DCD TMR1_CH_IRQHandler ; TMR1 channel - DCD TMR2_GLOBAL_IRQHandler ; TMR2 - DCD TMR3_GLOBAL_IRQHandler ; TMR3 - DCD TMR4_GLOBAL_IRQHandler ; TMR4 - DCD I2C1_EVT_IRQHandler ; I2C1 Event - DCD I2C1_ERR_IRQHandler ; I2C1 Error - DCD I2C2_EVT_IRQHandler ; I2C2 Event - DCD I2C2_ERR_IRQHandler ; I2C2 Error - DCD SPI1_IRQHandler ; SPI1 - DCD SPI2_I2S2EXT_IRQHandler ; SPI2 & I2S2EXT - DCD USART1_IRQHandler ; USART1 - DCD USART2_IRQHandler ; USART2 - DCD USART3_IRQHandler ; USART3 - DCD EXINT15_10_IRQHandler ; EXINT Line [15:10] - DCD RTCAlarm_IRQHandler ; RTC Alarm through EXINT Line - DCD USBFSWakeUp_IRQHandler ; USB Wakeup from suspend - DCD TMR8_BRK_TMR12_IRQHandler ; TMR8 Brake and TMR12 - DCD TMR8_OVF_TMR13_IRQHandler ; TMR8 overflow and TMR13 - DCD TMR8_TRG_HALL_TMR14_IRQHandler ; TMR8 Trigger and hall and TMR14 - DCD TMR8_CH_IRQHandler ; TMR8 channel - DCD ADC3_IRQHandler ; ADC3 - DCD XMC_IRQHandler ; XMC - DCD SDIO1_IRQHandler ; SDIO1 - DCD TMR5_GLOBAL_IRQHandler ; TMR5 - DCD SPI3_I2S3EXT_IRQHandler ; SPI3 & I2S3EXT - DCD UART4_IRQHandler ; UART4 - DCD UART5_IRQHandler ; UART5 - DCD TMR6_GLOBAL_IRQHandler ; TMR6 - DCD TMR7_GLOBAL_IRQHandler ; TMR7 - DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 - DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 - DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 - DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 - DCD SDIO2_IRQHandler ; SDIO2 - DCD I2C3_EVT_IRQHandler ; I2C3 Event - DCD I2C3_ERR_IRQHandler ; I2C3 Error - DCD SPI4_IRQHandler ; SPI4 - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD CAN2_TX_IRQHandler ; CAN2 TX - DCD CAN2_RX0_IRQHandler ; CAN2 RX0 - DCD CAN2_RX1_IRQHandler ; CAN2 RX1 - DCD CAN2_SE_IRQHandler ; CAN2 SE - DCD ACC_IRQHandler ; ACC - DCD USBFS_MAPH_IRQHandler ; USB Map High - DCD USBFS_MAPL_IRQHandler ; USB Map Low - DCD DMA2_Channel6_7_IRQHandler ; DMA2 Channel6 & Channel7 - DCD USART6_IRQHandler ; USART6 - DCD UART7_IRQHandler ; UART7 - DCD UART8_IRQHandler ; UART8 - DCD EMAC_IRQHandler ; EMAC - DCD EMAC_WKUP_IRQHandler ; EMAC_WKUP -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -; Reset handler -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT __main - IMPORT SystemInit - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -; Dummy Exception Handlers (infinite loops which can be modified) - -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP -HardFault_Handler\ - PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP -MemManage_Handler\ - PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP -BusFault_Handler\ - PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP -UsageFault_Handler\ - PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP -DebugMon_Handler\ - PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP -PendSV_Handler PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP -SysTick_Handler PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC - - EXPORT WWDT_IRQHandler [WEAK] - EXPORT PVM_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FLASH_IRQHandler [WEAK] - EXPORT CRM_IRQHandler [WEAK] - EXPORT EXINT0_IRQHandler [WEAK] - EXPORT EXINT1_IRQHandler [WEAK] - EXPORT EXINT2_IRQHandler [WEAK] - EXPORT EXINT3_IRQHandler [WEAK] - EXPORT EXINT4_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_IRQHandler [WEAK] - EXPORT DMA1_Channel4_IRQHandler [WEAK] - EXPORT DMA1_Channel5_IRQHandler [WEAK] - EXPORT DMA1_Channel6_IRQHandler [WEAK] - EXPORT DMA1_Channel7_IRQHandler [WEAK] - EXPORT ADC1_2_IRQHandler [WEAK] - EXPORT USBFS_H_CAN1_TX_IRQHandler [WEAK] - EXPORT USBFS_L_CAN1_RX0_IRQHandler [WEAK] - EXPORT CAN1_RX1_IRQHandler [WEAK] - EXPORT CAN1_SE_IRQHandler [WEAK] - EXPORT EXINT9_5_IRQHandler [WEAK] - EXPORT TMR1_BRK_TMR9_IRQHandler [WEAK] - EXPORT TMR1_OVF_TMR10_IRQHandler [WEAK] - EXPORT TMR1_TRG_HALL_TMR11_IRQHandler [WEAK] - EXPORT TMR1_CH_IRQHandler [WEAK] - EXPORT TMR2_GLOBAL_IRQHandler [WEAK] - EXPORT TMR3_GLOBAL_IRQHandler [WEAK] - EXPORT TMR4_GLOBAL_IRQHandler [WEAK] - EXPORT I2C1_EVT_IRQHandler [WEAK] - EXPORT I2C1_ERR_IRQHandler [WEAK] - EXPORT I2C2_EVT_IRQHandler [WEAK] - EXPORT I2C2_ERR_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT SPI2_I2S2EXT_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT USART3_IRQHandler [WEAK] - EXPORT EXINT15_10_IRQHandler [WEAK] - EXPORT RTCAlarm_IRQHandler [WEAK] - EXPORT USBFSWakeUp_IRQHandler [WEAK] - EXPORT TMR8_BRK_TMR12_IRQHandler [WEAK] - EXPORT TMR8_OVF_TMR13_IRQHandler [WEAK] - EXPORT TMR8_TRG_HALL_TMR14_IRQHandler [WEAK] - EXPORT TMR8_CH_IRQHandler [WEAK] - EXPORT ADC3_IRQHandler [WEAK] - EXPORT XMC_IRQHandler [WEAK] - EXPORT SDIO1_IRQHandler [WEAK] - EXPORT TMR5_GLOBAL_IRQHandler [WEAK] - EXPORT SPI3_I2S3EXT_IRQHandler [WEAK] - EXPORT UART4_IRQHandler [WEAK] - EXPORT UART5_IRQHandler [WEAK] - EXPORT TMR6_GLOBAL_IRQHandler [WEAK] - EXPORT TMR7_GLOBAL_IRQHandler [WEAK] - EXPORT DMA2_Channel1_IRQHandler [WEAK] - EXPORT DMA2_Channel2_IRQHandler [WEAK] - EXPORT DMA2_Channel3_IRQHandler [WEAK] - EXPORT DMA2_Channel4_5_IRQHandler [WEAK] - EXPORT SDIO2_IRQHandler [WEAK] - EXPORT I2C3_EVT_IRQHandler [WEAK] - EXPORT I2C3_ERR_IRQHandler [WEAK] - EXPORT SPI4_IRQHandler [WEAK] - EXPORT CAN2_TX_IRQHandler [WEAK] - EXPORT CAN2_RX0_IRQHandler [WEAK] - EXPORT CAN2_RX1_IRQHandler [WEAK] - EXPORT CAN2_SE_IRQHandler [WEAK] - EXPORT ACC_IRQHandler [WEAK] - EXPORT USBFS_MAPH_IRQHandler [WEAK] - EXPORT USBFS_MAPL_IRQHandler [WEAK] - EXPORT DMA2_Channel6_7_IRQHandler [WEAK] - EXPORT USART6_IRQHandler [WEAK] - EXPORT UART7_IRQHandler [WEAK] - EXPORT UART8_IRQHandler [WEAK] - EXPORT EMAC_IRQHandler [WEAK] - EXPORT EMAC_WKUP_IRQHandler [WEAK] - -WWDT_IRQHandler -PVM_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FLASH_IRQHandler -CRM_IRQHandler -EXINT0_IRQHandler -EXINT1_IRQHandler -EXINT2_IRQHandler -EXINT3_IRQHandler -EXINT4_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_IRQHandler -DMA1_Channel4_IRQHandler -DMA1_Channel5_IRQHandler -DMA1_Channel6_IRQHandler -DMA1_Channel7_IRQHandler -ADC1_2_IRQHandler -USBFS_H_CAN1_TX_IRQHandler -USBFS_L_CAN1_RX0_IRQHandler -CAN1_RX1_IRQHandler -CAN1_SE_IRQHandler -EXINT9_5_IRQHandler -TMR1_BRK_TMR9_IRQHandler -TMR1_OVF_TMR10_IRQHandler -TMR1_TRG_HALL_TMR11_IRQHandler -TMR1_CH_IRQHandler -TMR2_GLOBAL_IRQHandler -TMR3_GLOBAL_IRQHandler -TMR4_GLOBAL_IRQHandler -I2C1_EVT_IRQHandler -I2C1_ERR_IRQHandler -I2C2_EVT_IRQHandler -I2C2_ERR_IRQHandler -SPI1_IRQHandler -SPI2_I2S2EXT_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -USART3_IRQHandler -EXINT15_10_IRQHandler -RTCAlarm_IRQHandler -USBFSWakeUp_IRQHandler -TMR8_BRK_TMR12_IRQHandler -TMR8_OVF_TMR13_IRQHandler -TMR8_TRG_HALL_TMR14_IRQHandler -TMR8_CH_IRQHandler -ADC3_IRQHandler -XMC_IRQHandler -SDIO1_IRQHandler -TMR5_GLOBAL_IRQHandler -SPI3_I2S3EXT_IRQHandler -UART4_IRQHandler -UART5_IRQHandler -TMR6_GLOBAL_IRQHandler -TMR7_GLOBAL_IRQHandler -DMA2_Channel1_IRQHandler -DMA2_Channel2_IRQHandler -DMA2_Channel3_IRQHandler -DMA2_Channel4_5_IRQHandler -SDIO2_IRQHandler -I2C3_EVT_IRQHandler -I2C3_ERR_IRQHandler -SPI4_IRQHandler -CAN2_TX_IRQHandler -CAN2_RX0_IRQHandler -CAN2_RX1_IRQHandler -CAN2_SE_IRQHandler -ACC_IRQHandler -USBFS_MAPH_IRQHandler -USBFS_MAPL_IRQHandler -DMA2_Channel6_7_IRQHandler -USART6_IRQHandler -UART7_IRQHandler -UART8_IRQHandler -EMAC_IRQHandler -EMAC_WKUP_IRQHandler - B . - - ENDP - - ALIGN - -;******************************************************************************* -; User Stack and Heap initialization -;******************************************************************************* - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap - - LDR R0, = Heap_Mem - LDR R1, = (Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - - ALIGN - - ENDIF - - END diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/system_at32f403a_407.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/system_at32f403a_407.c deleted file mode 100644 index 1fea754..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/system_at32f403a_407.c +++ /dev/null @@ -1,193 +0,0 @@ -/** - ************************************************************************** - * @file system_at32f403a_407.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for cmsis cortex-m4 system source file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup AT32F403A_407_system - * @{ - */ - -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_system_private_defines - * @{ - */ -#define VECT_TAB_OFFSET 0x0 /*!< vector table base offset field. this value must be a multiple of 0x200. */ -/** - * @} - */ - -/** @addtogroup AT32F403A_407_system_private_variables - * @{ - */ -unsigned int system_core_clock = HICK_VALUE; /*!< system clock frequency (core clock) */ -/** - * @} - */ - -/** @addtogroup AT32F403A_407_system_private_functions - * @{ - */ - -/** - * @brief setup the microcontroller system - * initialize the flash interface. - * @note this function should be used only after reset. - * @param none - * @retval none - */ -void SystemInit (void) -{ -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U * 2U) | /* set cp10 full access */ - (3U << 11U * 2U) ); /* set cp11 full access */ -#endif - - /* reset the crm clock configuration to the default reset state(for debug purpose) */ - /* set hicken bit */ - CRM->ctrl_bit.hicken = TRUE; - - /* wait hick stable */ - while(CRM->ctrl_bit.hickstbl != SET); - - /* hick used as system clock */ - CRM->cfg_bit.sclksel = CRM_SCLK_HICK; - - /* wait sclk switch status */ - while(CRM->cfg_bit.sclksts != CRM_SCLK_HICK); - - /* reset cfg register, include sclk switch, ahbdiv, apb1div, apb2div, adcdiv, - clkout pllrcs, pllhextdiv, pllmult, usbdiv and pllrange bits */ - CRM->cfg = 0; - - /* reset hexten, hextbyps, cfden and pllen bits */ - CRM->ctrl &= ~(0x010D0000U); - - /* reset clkout[3], usbbufs, hickdiv, clkoutdiv */ - CRM->misc1 = 0; - - /* disable all interrupts enable and clear pending bits */ - CRM->clkint = 0x009F0000; - -#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 system_core_clock variable according to clock register values. - * the system_core_clock variable contains the core clock (hclk), it can - * be used by the user application to setup the systick timer or configure - * other parameters. - * @param none - * @retval none - */ -void system_core_clock_update(void) -{ - uint32_t hext_prediv = 0, pll_mult = 0, pll_mult_h = 0, pll_clock_source = 0, temp = 0, div_value = 0; - crm_sclk_type sclk_source; - - static const uint8_t sys_ahb_div_table[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - - /* get sclk source */ - sclk_source = crm_sysclk_switch_status_get(); - - switch(sclk_source) - { - case CRM_SCLK_HICK: - if(((CRM->misc3_bit.hick_to_sclk) != RESET) && ((CRM->misc1_bit.hickdiv) != RESET)) - system_core_clock = HICK_VALUE * 6; - else - system_core_clock = HICK_VALUE; - break; - case CRM_SCLK_HEXT: - system_core_clock = HEXT_VALUE; - break; - case CRM_SCLK_PLL: - pll_clock_source = CRM->cfg_bit.pllrcs; - { - /* get multiplication factor */ - pll_mult = CRM->cfg_bit.pllmult_l; - pll_mult_h = CRM->cfg_bit.pllmult_h; - /* process high bits */ - if((pll_mult_h != 0U) || (pll_mult == 15U)){ - pll_mult += ((16U * pll_mult_h) + 1U); - } - else - { - pll_mult += 2U; - } - - if (pll_clock_source == 0x00) - { - /* hick divided by 2 selected as pll clock entry */ - system_core_clock = (HICK_VALUE >> 1) * pll_mult; - } - else - { - /* hext selected as pll clock entry */ - if (CRM->cfg_bit.pllhextdiv != RESET) - { - hext_prediv = CRM->misc3_bit.hextdiv; - - /* hext clock divided by 2 */ - system_core_clock = (HEXT_VALUE / (hext_prediv + 2)) * pll_mult; - } - else - { - system_core_clock = HEXT_VALUE * pll_mult; - } - } - } - break; - default: - system_core_clock = HICK_VALUE; - break; - } - - /* compute sclk, ahbclk frequency */ - /* get ahb division */ - temp = CRM->cfg_bit.ahbdiv; - div_value = sys_ahb_div_table[temp]; - /* ahbclk frequency */ - system_core_clock = system_core_clock >> div_value; -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/system_at32f403a_407.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/system_at32f403a_407.h deleted file mode 100644 index dd23713..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/cm4/device_support/system_at32f403a_407.h +++ /dev/null @@ -1,86 +0,0 @@ -/** - ************************************************************************** - * @file system_at32f403a_407.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief cmsis cortex-m4 system header file. - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#ifndef __SYSTEM_AT32F403A_407_H -#define __SYSTEM_AT32F403A_407_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup AT32F403A_407_system - * @{ - */ - -/** @defgroup AT32F403A_407_system_clock_stable_definition - * @{ - */ - -#define HEXT_STABLE_DELAY (5000u) -#define PLL_STABLE_DELAY (500u) - -/** - * @} - */ - -/** @defgroup AT32F403A_407_system_exported_variables - * @{ - */ - -extern unsigned int system_core_clock; /*!< system clock frequency (core clock) */ - -/** - * @} - */ - -/** @defgroup AT32F403A_407_system_exported_functions - * @{ - */ - -extern void SystemInit(void); -extern void system_core_clock_update(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/Include/NEMath.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/Include/NEMath.h deleted file mode 100644 index bb32303..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/Include/NEMath.h +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright (c) 2016, 2019 ARM Limited. - * - * SPDX-License-Identifier: MIT - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef __ARM_COMPUTE_NEMATH_H__ -#define __ARM_COMPUTE_NEMATH_H__ - - -#if defined(ARM_MATH_NEON) -/** Calculate floor of a vector. - * - * @param[in] val Input vector value in F32 format. - * - * @return The calculated floor vector. - */ -static inline float32x4_t vfloorq_f32(float32x4_t val); - -/** Calculate inverse square root. - * - * @param[in] x Input value. - * - * @return The calculated inverse square root. - */ -static inline float32x2_t vinvsqrt_f32(float32x2_t x); - -/** Calculate inverse square root. - * - * @param[in] x Input value. - * - * @return The calculated inverse square root. - */ -static inline float32x4_t vinvsqrtq_f32(float32x4_t x); - -/** Calculate reciprocal. - * - * @param[in] x Input value. - * - * @return The calculated reciprocal. - */ -static inline float32x2_t vinv_f32(float32x2_t x); - -/** Calculate reciprocal. - * - * @param[in] x Input value. - * - * @return The calculated reciprocal. - */ -static inline float32x4_t vinvq_f32(float32x4_t x); - -/** Perform a 7th degree polynomial approximation using Estrin's method. - * - * @param[in] x Input vector value in F32 format. - * @param[in] coeffs Polynomial coefficients table. (array of flattened float32x4_t vectors) - * - * @return The calculated approximation. - */ -static inline float32x4_t vtaylor_polyq_f32(float32x4_t x, const float32_t *coeffs); - -/** Calculate exponential - * - * @param[in] x Input vector value in F32 format. - * - * @return The calculated exponent. - */ -static inline float32x4_t vexpq_f32(float32x4_t x); - -/** Calculate logarithm - * - * @param[in] x Input vector value in F32 format. - * - * @return The calculated logarithm. - */ -static inline float32x4_t vlogq_f32(float32x4_t x); - -/** Calculate hyperbolic tangent. - * - * tanh(x) = (e^2x - 1)/(e^2x + 1) - * - * @note We clamp x to [-5,5] to avoid overflowing issues. - * - * @param[in] val Input vector value in F32 format. - * - * @return The calculated Hyperbolic Tangent. - */ -static inline float32x4_t vtanhq_f32(float32x4_t val); - -/** Calculate n power of a number. - * - * pow(x,n) = e^(n*log(x)) - * - * @param[in] val Input vector value in F32 format. - * @param[in] n Powers to raise the input to. - * - * @return The calculated power. - */ -static inline float32x4_t vpowq_f32(float32x4_t val, float32x4_t n); - -#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC -/** Calculate hyperbolic tangent. - * - * tanh(x) = (e^2x - 1)/(e^2x + 1) - * - * @note We clamp x to [-5,5] to avoid overflowing issues. - * - * @param[in] val Input vector value in F32 format. - * - * @return The calculated Hyperbolic Tangent. - */ -static inline float16x8_t vtanhq_f16(float16x8_t val); - -/** Calculate reciprocal. - * - * @param[in] x Input value. - * - * @return The calculated reciprocal. - */ -static inline float16x4_t vinv_f16(float16x4_t x); - -/** Calculate reciprocal. - * - * @param[in] x Input value. - * - * @return The calculated reciprocal. - */ -static inline float16x8_t vinvq_f16(float16x8_t x); - -/** Calculate inverse square root. - * - * @param[in] x Input value. - * - * @return The calculated inverse square root. - */ -static inline float16x4_t vinvsqrt_f16(float16x4_t x); - -/** Calculate inverse square root. - * - * @param[in] x Input value. - * - * @return The calculated inverse square root. - */ -static inline float16x8_t vinvsqrtq_f16(float16x8_t x); - -/** Calculate exponential - * - * @param[in] x Input vector value in F16 format. - * - * @return The calculated exponent. - */ -static inline float16x8_t vexpq_f16(float16x8_t x); - -/** Calculate n power of a number. - * - * pow(x,n) = e^(n*log(x)) - * - * @param[in] val Input vector value in F16 format. - * @param[in] n Powers to raise the input to. - * - * @return The calculated power. - */ -static inline float16x8_t vpowq_f16(float16x8_t val, float16x8_t n); -#endif /* __ARM_FEATURE_FP16_VECTOR_ARITHMETIC */ - -/** Exponent polynomial coefficients */ -extern const float32_t exp_tab[4*8]; - - -/** Logarithm polynomial coefficients */ -extern const float32_t log_tab[4*8]; - -#ifndef DOXYGEN_SKIP_THIS -inline float32x4_t vfloorq_f32(float32x4_t val) -{ - static const float32_t CONST_1[4] = {1.f,1.f,1.f,1.f}; - - const int32x4_t z = vcvtq_s32_f32(val); - const float32x4_t r = vcvtq_f32_s32(z); - - return vbslq_f32(vcgtq_f32(r, val), vsubq_f32(r, vld1q_f32(CONST_1)), r); -} - -inline float32x2_t vinvsqrt_f32(float32x2_t x) -{ - float32x2_t sqrt_reciprocal = vrsqrte_f32(x); - sqrt_reciprocal = vmul_f32(vrsqrts_f32(vmul_f32(x, sqrt_reciprocal), sqrt_reciprocal), sqrt_reciprocal); - sqrt_reciprocal = vmul_f32(vrsqrts_f32(vmul_f32(x, sqrt_reciprocal), sqrt_reciprocal), sqrt_reciprocal); - - return sqrt_reciprocal; -} - -inline float32x4_t vinvsqrtq_f32(float32x4_t x) -{ - float32x4_t sqrt_reciprocal = vrsqrteq_f32(x); - sqrt_reciprocal = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x, sqrt_reciprocal), sqrt_reciprocal), sqrt_reciprocal); - sqrt_reciprocal = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x, sqrt_reciprocal), sqrt_reciprocal), sqrt_reciprocal); - - return sqrt_reciprocal; -} - -inline float32x2_t vinv_f32(float32x2_t x) -{ - float32x2_t recip = vrecpe_f32(x); - recip = vmul_f32(vrecps_f32(x, recip), recip); - recip = vmul_f32(vrecps_f32(x, recip), recip); - return recip; -} - -inline float32x4_t vinvq_f32(float32x4_t x) -{ - float32x4_t recip = vrecpeq_f32(x); - recip = vmulq_f32(vrecpsq_f32(x, recip), recip); - recip = vmulq_f32(vrecpsq_f32(x, recip), recip); - return recip; -} - -inline float32x4_t vtaylor_polyq_f32(float32x4_t x, const float32_t *coeffs) -{ - float32x4_t A = vmlaq_f32(vld1q_f32(&coeffs[4*0]), vld1q_f32(&coeffs[4*4]), x); - float32x4_t B = vmlaq_f32(vld1q_f32(&coeffs[4*2]), vld1q_f32(&coeffs[4*6]), x); - float32x4_t C = vmlaq_f32(vld1q_f32(&coeffs[4*1]), vld1q_f32(&coeffs[4*5]), x); - float32x4_t D = vmlaq_f32(vld1q_f32(&coeffs[4*3]), vld1q_f32(&coeffs[4*7]), x); - float32x4_t x2 = vmulq_f32(x, x); - float32x4_t x4 = vmulq_f32(x2, x2); - float32x4_t res = vmlaq_f32(vmlaq_f32(A, B, x2), vmlaq_f32(C, D, x2), x4); - return res; -} - -inline float32x4_t vexpq_f32(float32x4_t x) -{ - static const float32_t CONST_LN2[4] = {0.6931471805f,0.6931471805f,0.6931471805f,0.6931471805f}; // ln(2) - static const float32_t CONST_INV_LN2[4] = {1.4426950408f,1.4426950408f,1.4426950408f,1.4426950408f}; // 1/ln(2) - static const float32_t CONST_0[4] = {0.f,0.f,0.f,0.f}; - static const int32_t CONST_NEGATIVE_126[4] = {-126,-126,-126,-126}; - - // Perform range reduction [-log(2),log(2)] - int32x4_t m = vcvtq_s32_f32(vmulq_f32(x, vld1q_f32(CONST_INV_LN2))); - float32x4_t val = vmlsq_f32(x, vcvtq_f32_s32(m), vld1q_f32(CONST_LN2)); - - // Polynomial Approximation - float32x4_t poly = vtaylor_polyq_f32(val, exp_tab); - - // Reconstruct - poly = vreinterpretq_f32_s32(vqaddq_s32(vreinterpretq_s32_f32(poly), vqshlq_n_s32(m, 23))); - poly = vbslq_f32(vcltq_s32(m, vld1q_s32(CONST_NEGATIVE_126)), vld1q_f32(CONST_0), poly); - - return poly; -} - -inline float32x4_t vlogq_f32(float32x4_t x) -{ - static const int32_t CONST_127[4] = {127,127,127,127}; // 127 - static const float32_t CONST_LN2[4] = {0.6931471805f,0.6931471805f,0.6931471805f,0.6931471805f}; // ln(2) - - // Extract exponent - int32x4_t m = vsubq_s32(vreinterpretq_s32_u32(vshrq_n_u32(vreinterpretq_u32_f32(x), 23)), vld1q_s32(CONST_127)); - float32x4_t val = vreinterpretq_f32_s32(vsubq_s32(vreinterpretq_s32_f32(x), vshlq_n_s32(m, 23))); - - // Polynomial Approximation - float32x4_t poly = vtaylor_polyq_f32(val, log_tab); - - // Reconstruct - poly = vmlaq_f32(poly, vcvtq_f32_s32(m), vld1q_f32(CONST_LN2)); - - return poly; -} - -inline float32x4_t vtanhq_f32(float32x4_t val) -{ - static const float32_t CONST_1[4] = {1.f,1.f,1.f,1.f}; - static const float32_t CONST_2[4] = {2.f,2.f,2.f,2.f}; - static const float32_t CONST_MIN_TANH[4] = {-10.f,-10.f,-10.f,-10.f}; - static const float32_t CONST_MAX_TANH[4] = {10.f,10.f,10.f,10.f}; - - float32x4_t x = vminq_f32(vmaxq_f32(val, vld1q_f32(CONST_MIN_TANH)), vld1q_f32(CONST_MAX_TANH)); - float32x4_t exp2x = vexpq_f32(vmulq_f32(vld1q_f32(CONST_2), x)); - float32x4_t num = vsubq_f32(exp2x, vld1q_f32(CONST_1)); - float32x4_t den = vaddq_f32(exp2x, vld1q_f32(CONST_1)); - float32x4_t tanh = vmulq_f32(num, vinvq_f32(den)); - return tanh; -} - -inline float32x4_t vpowq_f32(float32x4_t val, float32x4_t n) -{ - return vexpq_f32(vmulq_f32(n, vlogq_f32(val))); -} -#endif /* DOXYGEN_SKIP_THIS */ - -#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC -/** Exponent polynomial coefficients */ -/** Logarithm polynomial coefficients */ -#ifndef DOXYGEN_SKIP_THIS -inline float16x8_t vfloorq_f16(float16x8_t val) -{ - static const float16_t CONST_1[8] = {1.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f}; - - const int16x8_t z = vcvtq_s16_f16(val); - const float16x8_t r = vcvtq_f16_s16(z); - - return vbslq_f16(vcgtq_f16(r, val), vsubq_f16(r, vld1q_f16(CONST_1)), r); -} -inline float16x4_t vinvsqrt_f16(float16x4_t x) -{ - float16x4_t sqrt_reciprocal = vrsqrte_f16(x); - sqrt_reciprocal = vmul_f16(vrsqrts_f16(vmul_f16(x, sqrt_reciprocal), sqrt_reciprocal), sqrt_reciprocal); - sqrt_reciprocal = vmul_f16(vrsqrts_f16(vmul_f16(x, sqrt_reciprocal), sqrt_reciprocal), sqrt_reciprocal); - return sqrt_reciprocal; -} - -inline float16x8_t vinvsqrtq_f16(float16x8_t x) -{ - float16x8_t sqrt_reciprocal = vrsqrteq_f16(x); - sqrt_reciprocal = vmulq_f16(vrsqrtsq_f16(vmulq_f16(x, sqrt_reciprocal), sqrt_reciprocal), sqrt_reciprocal); - sqrt_reciprocal = vmulq_f16(vrsqrtsq_f16(vmulq_f16(x, sqrt_reciprocal), sqrt_reciprocal), sqrt_reciprocal); - return sqrt_reciprocal; -} - -inline float16x4_t vinv_f16(float16x4_t x) -{ - float16x4_t recip = vrecpe_f16(x); - recip = vmul_f16(vrecps_f16(x, recip), recip); - recip = vmul_f16(vrecps_f16(x, recip), recip); - return recip; -} - -inline float16x8_t vinvq_f16(float16x8_t x) -{ - float16x8_t recip = vrecpeq_f16(x); - recip = vmulq_f16(vrecpsq_f16(x, recip), recip); - recip = vmulq_f16(vrecpsq_f16(x, recip), recip); - return recip; -} - -inline float16x8_t vtanhq_f16(float16x8_t val) -{ - const float16_t CONST_1[8] = {1.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f}; - const float16_t CONST_2[8] = {2.f,2.f,2.f,2.f,2.f,2.f,2.f,2.f}; - const float16_t CONST_MIN_TANH[8] = {-10.f,-10.f,-10.f,-10.f,-10.f,-10.f,-10.f,-10.f}; - const float16_t CONST_MAX_TANH[8] = {10.f,10.f,10.f,10.f,10.f,10.f,10.f,10.f}; - - const float16x8_t x = vminq_f16(vmaxq_f16(val, vld1q_f16(CONST_MIN_TANH)), vld1q_f16(CONST_MAX_TANH)); - const float16x8_t exp2x = vexpq_f16(vmulq_f16(vld1q_f16(CONST_2), x)); - const float16x8_t num = vsubq_f16(exp2x, vld1q_f16(CONST_1)); - const float16x8_t den = vaddq_f16(exp2x, vld1q_f16(CONST_1)); - const float16x8_t tanh = vmulq_f16(num, vinvq_f16(den)); - return tanh; -} - -inline float16x8_t vtaylor_polyq_f16(float16x8_t x, const float16_t *coeffs) -{ - const float16x8_t A = vaddq_f16(&coeffs[8*0], vmulq_f16(&coeffs[8*4], x)); - const float16x8_t B = vaddq_f16(&coeffs[8*2], vmulq_f16(&coeffs[8*6], x)); - const float16x8_t C = vaddq_f16(&coeffs[8*1], vmulq_f16(&coeffs[8*5], x)); - const float16x8_t D = vaddq_f16(&coeffs[8*3], vmulq_f16(&coeffs[8*7], x)); - const float16x8_t x2 = vmulq_f16(x, x); - const float16x8_t x4 = vmulq_f16(x2, x2); - const float16x8_t res = vaddq_f16(vaddq_f16(A, vmulq_f16(B, x2)), vmulq_f16(vaddq_f16(C, vmulq_f16(D, x2)), x4)); - return res; -} - -inline float16x8_t vexpq_f16(float16x8_t x) -{ - // TODO (COMPMID-1535) : Revisit FP16 approximations - const float32x4_t x_high = vcvt_f32_f16(vget_high_f16(x)); - const float32x4_t x_low = vcvt_f32_f16(vget_low_f16(x)); - - const float16x8_t res = vcvt_high_f16_f32(vcvt_f16_f32(vexpq_f32(x_low)), vexpq_f32(x_high)); - return res; -} - -inline float16x8_t vlogq_f16(float16x8_t x) -{ - // TODO (COMPMID-1535) : Revisit FP16 approximations - const float32x4_t x_high = vcvt_f32_f16(vget_high_f16(x)); - const float32x4_t x_low = vcvt_f32_f16(vget_low_f16(x)); - - const float16x8_t res = vcvt_high_f16_f32(vcvt_f16_f32(vlogq_f32(x_low)), vlogq_f32(x_high)); - return res; -} - -inline float16x8_t vpowq_f16(float16x8_t val, float16x8_t n) -{ - // TODO (giaiod01) - COMPMID-1535 - float32x4_t n0_f32 = vcvt_f32_f16(vget_low_f16(n)); - float32x4_t n1_f32 = vcvt_f32_f16(vget_high_f16(n)); - float32x4_t val0_f32 = vcvt_f32_f16(vget_low_f16(val)); - float32x4_t val1_f32 = vcvt_f32_f16(vget_high_f16(val)); - - float32x4_t res0_f32 = vexpq_f32(vmulq_f32(n0_f32, vlogq_f32(val0_f32))); - float32x4_t res1_f32 = vexpq_f32(vmulq_f32(n1_f32, vlogq_f32(val1_f32))); - - return vcombine_f16(vcvt_f16_f32(res0_f32), vcvt_f16_f32(res1_f32)); -} -#endif /* DOXYGEN_SKIP_THIS */ -#endif /* __ARM_FEATURE_FP16_VECTOR_ARITHMETIC */ -#endif -#endif /* __ARM_COMPUTE_NEMATH_H__ */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/LICENSE.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/LICENSE.txt deleted file mode 100644 index 5429278..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017-2019 ARM Software - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/README.md b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/README.md deleted file mode 100644 index 9c35076..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/README.md +++ /dev/null @@ -1,19 +0,0 @@ -README -====== - -This folder is containing two files imported, and slightly modified, from the ComputeLibrary: - - NEMath.h and arm_cl_tables.c - -In the original compute library, there are instead two other files: - - NEMath.h and NEMath.inl - -NEMath.inl is included from NEMath.h whereas in this CMSIS DSP implementation, there is no NEMath.inl and its content is copied into NEMath.h - -The tables contained in NEMath.inl have been moved to arm_cl_tables.c and finally the files are in C for the CMSIS DSP library and in C++ in the original Compute Library. - -Otherwise, the features and implementations are the same : a few optimized Neon functions. - -The license covering those files is different : It is a MIT license. -Other parts of the CMSIS-DSP are covered with an Apache-2.0 license. diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/Source/arm_cl_tables.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/Source/arm_cl_tables.c deleted file mode 100644 index bdd39a6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/ComputeLibrary/Source/arm_cl_tables.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2016, 2019 ARM Limited. - * - * SPDX-License-Identifier: MIT - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#include "arm_math.h" -#include "NEMath.h" - -#if defined(ARM_MATH_NEON) - -/** Exponent polynomial coefficients */ -const float32_t exp_tab[4*8] = -{ - 1.f,1.f,1.f,1.f, - 0.0416598916054f,0.0416598916054f,0.0416598916054f,0.0416598916054f, - 0.500000596046f,0.500000596046f,0.500000596046f,0.500000596046f, - 0.0014122662833f,0.0014122662833f,0.0014122662833f,0.0014122662833f, - 1.00000011921f,1.00000011921f,1.00000011921f,1.00000011921f, - 0.00833693705499f,0.00833693705499f,0.00833693705499f,0.00833693705499f, - 0.166665703058f,0.166665703058f,0.166665703058f,0.166665703058f, - 0.000195780929062f,0.000195780929062f,0.000195780929062f,0.000195780929062f -}; - -/** Logarithm polynomial coefficients */ -const float32_t log_tab[4*8] = -{ - -2.29561495781f,-2.29561495781f,-2.29561495781f,-2.29561495781f, - -2.47071170807f,-2.47071170807f,-2.47071170807f,-2.47071170807f, - -5.68692588806f,-5.68692588806f,-5.68692588806f,-5.68692588806f, - -0.165253549814f,-0.165253549814f,-0.165253549814f,-0.165253549814f, - 5.17591238022f,5.17591238022f,5.17591238022f,5.17591238022f, - 0.844007015228f,0.844007015228f,0.844007015228f,0.844007015228f, - 4.58445882797f,4.58445882797f,4.58445882797f,4.58445882797f, - 0.0141278216615f,0.0141278216615f,0.0141278216615f,0.0141278216615f -}; - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_sorting.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_sorting.h deleted file mode 100644 index cffbc67..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_sorting.h +++ /dev/null @@ -1,200 +0,0 @@ -/****************************************************************************** - * @file arm_sorting.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief Private header file for CMSIS DSP Library - ******************************************************************************/ -/* - * Copyright (c) 2010-2019 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_SORTING_H_ -#define _ARM_SORTING_H_ - -#include "arm_math.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - /** - * @param[in] S points to an instance of the sorting 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_bubble_sort_f32( - const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - /** - * @param[in] S points to an instance of the sorting 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_heap_sort_f32( - const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - /** - * @param[in] S points to an instance of the sorting 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_insertion_sort_f32( - const arm_sort_instance_f32 * S, - float32_t *pSrc, - float32_t* pDst, - uint32_t blockSize); - - /** - * @param[in] S points to an instance of the sorting 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_quick_sort_f32( - const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - /** - * @param[in] S points to an instance of the sorting 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_selection_sort_f32( - const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - /** - * @param[in] S points to an instance of the sorting 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_bitonic_sort_f32( - const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - -#if defined(ARM_MATH_NEON) - -#define vtrn256_128q(a, b) \ -do { \ - float32x4_t vtrn128_temp = a.val[1]; \ - a.val[1] = b.val[0]; \ - b.val[0] = vtrn128_temp ; \ -} while (0) - -#define vtrn128_64q(a, b) \ -do { \ - float32x2_t ab, cd, ef, gh; \ - ab = vget_low_f32(a); \ - ef = vget_low_f32(b); \ - cd = vget_high_f32(a); \ - gh = vget_high_f32(b); \ - a = vcombine_f32(ab, ef); \ - b = vcombine_f32(cd, gh); \ -} while (0) - -#define vtrn256_64q(a, b) \ -do { \ - float32x2_t a_0, a_1, a_2, a_3; \ - float32x2_t b_0, b_1, b_2, b_3; \ - a_0 = vget_low_f32(a.val[0]); \ - a_1 = vget_high_f32(a.val[0]); \ - a_2 = vget_low_f32(a.val[1]); \ - a_3 = vget_high_f32(a.val[1]); \ - b_0 = vget_low_f32(b.val[0]); \ - b_1 = vget_high_f32(b.val[0]); \ - b_2 = vget_low_f32(b.val[1]); \ - b_3 = vget_high_f32(b.val[1]); \ - a.val[0] = vcombine_f32(a_0, b_0); \ - a.val[1] = vcombine_f32(a_2, b_2); \ - b.val[0] = vcombine_f32(a_1, b_1); \ - b.val[1] = vcombine_f32(a_3, b_3); \ -} while (0) - -#define vtrn128_32q(a, b) \ -do { \ - float32x4x2_t vtrn32_tmp = vtrnq_f32((a), (b)); \ - (a) = vtrn32_tmp.val[0]; \ - (b) = vtrn32_tmp.val[1]; \ -} while (0) - -#define vtrn256_32q(a, b) \ -do { \ - float32x4x2_t vtrn32_tmp_1 = vtrnq_f32((a.val[0]), (b.val[0])); \ - float32x4x2_t vtrn32_tmp_2 = vtrnq_f32((a.val[1]), (b.val[1])); \ - a.val[0] = vtrn32_tmp_1.val[0]; \ - a.val[1] = vtrn32_tmp_2.val[0]; \ - b.val[0] = vtrn32_tmp_1.val[1]; \ - b.val[1] = vtrn32_tmp_2.val[1]; \ -} while (0) - -#define vminmaxq(a, b) \ - do { \ - float32x4_t minmax_tmp = (a); \ - (a) = vminq_f32((a), (b)); \ - (b) = vmaxq_f32(minmax_tmp, (b)); \ -} while (0) - -#define vminmax256q(a, b) \ - do { \ - float32x4x2_t minmax256_tmp = (a); \ - a.val[0] = vminq_f32(a.val[0], b.val[0]); \ - a.val[1] = vminq_f32(a.val[1], b.val[1]); \ - b.val[0] = vmaxq_f32(minmax256_tmp.val[0], b.val[0]); \ - b.val[1] = vmaxq_f32(minmax256_tmp.val[1], b.val[1]); \ -} while (0) - -#define vrev128q_f32(a) \ - vcombine_f32(vrev64_f32(vget_high_f32(a)), vrev64_f32(vget_low_f32(a))) - -#define vrev256q_f32(a) \ - do { \ - float32x4_t rev_tmp = vcombine_f32(vrev64_f32(vget_high_f32(a.val[0])), vrev64_f32(vget_low_f32(a.val[0]))); \ - a.val[0] = vcombine_f32(vrev64_f32(vget_high_f32(a.val[1])), vrev64_f32(vget_low_f32(a.val[1]))); \ - a.val[1] = rev_tmp; \ -} while (0) - -#define vldrev128q_f32(a, p) \ - do { \ - a = vld1q_f32(p); \ - a = vrev128q_f32(a); \ -} while (0) - -#endif /* ARM_MATH_NEON */ - -#ifdef __cplusplus -} -#endif - -#endif /* _ARM_SORTING_H */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_vec_fft.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_vec_fft.h deleted file mode 100644 index c2c0e40..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_vec_fft.h +++ /dev/null @@ -1,58 +0,0 @@ -/****************************************************************************** - * @file arm_vec_fft.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief Private header file for CMSIS DSP Library - ******************************************************************************/ -/* - * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_VEC_FFT_H_ -#define _ARM_VEC_FFT_H_ - -#include "arm_math.h" -#include "arm_helium_utils.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) - -#define MVE_CMPLX_ADD_A_ixB(A, B) vcaddq_rot90(A,B) -#define MVE_CMPLX_SUB_A_ixB(A,B) vcaddq_rot270(A,B) -#define MVE_CMPLX_MULT_FLT_AxB(A,B) vcmlaq_rot90(vcmulq(A, B), A, B) -#define MVE_CMPLX_MULT_FLT_Conj_AxB(A,B) vcmlaq_rot270(vcmulq(A, B), A, B) - -#define MVE_CMPLX_MULT_FX_AxB(A,B) vqdmladhxq(vqdmlsdhq((__typeof(A))vuninitializedq_s32(), A, B), A, B); -#define MVE_CMPLX_MULT_FX_AxConjB(A,B) vqdmladhq(vqdmlsdhxq((__typeof(A))vuninitializedq_s32(), A, B), A, B); - -#define MVE_CMPLX_ADD_FX_A_ixB(A, B) vhcaddq_rot90(A,B) -#define MVE_CMPLX_SUB_FX_A_ixB(A,B) vhcaddq_rot270(A,B) - - -#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)*/ - - -#ifdef __cplusplus -} -#endif - - -#endif /* _ARM_VEC_FFT_H_ */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_vec_filtering.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_vec_filtering.h deleted file mode 100644 index f9dc754..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/PrivateInclude/arm_vec_filtering.h +++ /dev/null @@ -1,1661 +0,0 @@ -/****************************************************************************** - * @file arm_vec_filtering.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief Private header file for CMSIS DSP Library - ******************************************************************************/ -/* - * Copyright (c) 2010-2019 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_VEC_FILTERING_H_ -#define _ARM_VEC_FILTERING_H_ - -#include "arm_math.h" -#include "arm_helium_utils.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) - -#define MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_F32(acc0, acc1, acc2, acc3, pX, pY, count)\ -{ \ - float32_t const *pSrcX, *pSrcY; \ - f32x4_t acc0Vec, acc1Vec, acc2Vec, acc3Vec, xVec, yVec; \ - uint32_t k; \ - \ - acc0Vec = vdupq_n_f32(0.0f); \ - acc1Vec = vdupq_n_f32(0.0f); \ - acc2Vec = vdupq_n_f32(0.0f); \ - acc3Vec = vdupq_n_f32(0.0f); \ - pSrcX = (float32_t const *) pX; \ - pSrcY = (float32_t const *) pY; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_f32(acc1Vec, xVec, yVec); \ - xVec = vldrwq_f32(&pSrcX[2]); \ - acc2Vec = vfmaq_f32(acc2Vec, xVec, yVec); \ - xVec = vldrwq_f32(&pSrcX[3]); \ - acc3Vec = vfmaq_f32(acc3Vec, xVec, yVec); \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - acc0Vec = vfmaq_f32(acc0Vec, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* loop + tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_m_f32(acc1Vec, xVec, yVec, p0); \ - xVec = vldrwq_f32(&pSrcX[2]); \ - acc2Vec = vfmaq_m_f32(acc2Vec, xVec, yVec, p0); \ - xVec = vldrwq_f32(&pSrcX[3]); \ - acc3Vec = vfmaq_m_f32(acc3Vec, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - acc0Vec = vfmaq_m_f32(acc0Vec, xVec, yVec, p0); \ - } \ - \ - acc0 = vecAddAcrossF32Mve(acc0Vec); \ - acc1 = vecAddAcrossF32Mve(acc1Vec); \ - acc2 = vecAddAcrossF32Mve(acc2Vec); \ - acc3 = vecAddAcrossF32Mve(acc3Vec); \ -} - -#define MVE_INTR_CORR_SINGLE_F32(acc, pX, pY, count) \ -{ \ - float32_t const *pSrcX, *pSrcY; \ - f32x4_t accVec, xVec, yVec; \ - uint32_t k; \ - \ - accVec = vdupq_n_f32(0.0f); \ - pSrcX = (float32_t const *) pX; \ - pSrcY = (float32_t const *) pY; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - accVec = vfmaq_f32(accVec, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - accVec = vfmaq_m_f32(accVec, xVec, yVec, p0);\ - } \ - acc = vecAddAcrossF32Mve(accVec); \ -} - -#define MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_F32(acc0, acc1, pX, pY, count)\ -{ \ - float32_t const *pSrcX, *pSrcY; \ - f32x4_t acc0Vec, acc1Vec, xVec, yVec; \ - uint32_t k; \ - \ - acc0Vec = vdupq_n_f32(0.0f); \ - acc1Vec = vdupq_n_f32(0.0f); \ - pSrcX = (float32_t const *) pX; \ - pSrcY = (float32_t const *) pY; \ - k = (count-1) >> 2; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_f32(acc1Vec, xVec, yVec); \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - acc0Vec = vfmaq_f32(acc0Vec, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires exact number of sample (count-1) */ \ - /* disable extra lanes in final MAC computation */ \ - k = (count-1) % 0x4U; \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_m_f32(acc1Vec, xVec, yVec, p0); \ - /* acc0 requires 1 additional sample (count) */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp32q(k+1); \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - acc0Vec = vfmaq_m_f32(acc0Vec, xVec, yVec, p0); \ - \ - acc0 = vecAddAcrossF32Mve(acc0Vec); \ - acc1 = vecAddAcrossF32Mve(acc1Vec); \ -} - -#define MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_F32(acc0, acc1, pX, pY, count)\ -{ \ - float32_t const *pSrcX, *pSrcY; \ - f32x4_t acc0Vec, acc1Vec, xVec, yVec; \ - uint32_t k; \ - \ - acc0Vec = vdupq_n_f32(0.0f); \ - acc1Vec = vdupq_n_f32(0.0f); \ - pSrcX = (float32_t const *) pX; \ - pSrcY = (float32_t const *) pY; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_f32(acc1Vec, xVec, yVec); \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - acc0Vec = vfmaq_f32(acc0Vec, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* loop + tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_m_f32(acc1Vec, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - acc0Vec = vfmaq_m_f32(acc0Vec, xVec, yVec, p0); \ - } \ - \ - acc0 = vecAddAcrossF32Mve(acc0Vec); \ - acc1 = vecAddAcrossF32Mve(acc1Vec); \ -} - -#define MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_F32(acc0, acc1, pX, pY, count)\ -{ \ - float32_t const *pSrcX, *pSrcY; \ - f32x4_t acc0Vec, acc1Vec, xVec, yVec; \ - uint32_t k; \ - \ - acc0Vec = vdupq_n_f32(0.0f); \ - acc1Vec = vdupq_n_f32(0.0f); \ - pSrcX = (float32_t const *) pX; \ - pSrcY = (float32_t const *) pY; \ - k = count >> 2; \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - yVec = vldrwq_f32(&pSrcY[-1]); \ - acc1Vec = vfmaq_f32(acc1Vec, xVec, yVec); \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - acc0Vec = vfmaq_f32(acc0Vec, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = count % 0x4U; \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires 1 additional sample */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - mve_pred16_t p0 = vctp32q(k+1); \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - yVec = vldrwq_f32(&pSrcY[-1]); \ - acc1Vec = vfmaq_m_f32(acc1Vec, xVec, yVec,p0); \ - /* acc0 requires exact number of sample */ \ - /* disable extra lanes in final MAC computation */ \ - p0 = vctp32q(k); \ - yVec = vld1q(pSrcY); \ - pSrcY += 4; \ - acc0Vec = vfmaq_m_f32(acc0Vec, xVec, yVec,p0); \ - \ - acc0 = vecAddAcrossF32Mve(acc0Vec); \ - acc1 = vecAddAcrossF32Mve(acc1Vec); \ -} - -#define MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_F32(acc0, acc1, pX, pY, count) \ -{ \ - float32_t const *pSrcX; \ - f32x4_t acc0Vec, acc1Vec, xVec, yVec; \ - uint32_t k; \ - \ - acc0Vec = vdupq_n_f32(0.0f); \ - acc1Vec = vdupq_n_f32(0.0f); \ - pSrcX = (float32_t const *) pX; \ - k = (count - 1) >> 2; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrwq_gather_shifted_offset_f32(pY, decrIdxVec); \ - pY-=4; \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_f32(acc1Vec, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0Vec = vfmaq_f32(acc0Vec, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = (count - 1) % 0x4U; \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vldrwq_gather_shifted_offset_f32(pY, decrIdxVec); \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_m_f32(acc1Vec, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - p0 = vctp32q(k+1); \ - acc0Vec = vfmaq_m_f32(acc0Vec, xVec, yVec, p0); \ - \ - acc0 = vecAddAcrossF32Mve(acc0Vec); \ - acc1 = vecAddAcrossF32Mve(acc1Vec); \ -} - -#define MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_F32(acc0, acc1, pX, pY, count) \ -{ \ - float32_t const *pSrcX; \ - f32x4_t acc0Vec, acc1Vec, xVec, yVec; \ - uint32_t k; \ - \ - acc0Vec = vdupq_n_f32(0.0f); \ - acc1Vec = vdupq_n_f32(0.0f); \ - pSrcX = (float32_t const *) pX; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrwq_gather_shifted_offset_f32(pY, decrIdxVec); \ - pY-=4; \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_f32(acc1Vec, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0Vec = vfmaq_f32(acc0Vec, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vldrwq_gather_shifted_offset_f32(pY, decrIdxVec); \ - xVec = vldrwq_f32(&pSrcX[1]); \ - acc1Vec = vfmaq_m_f32(acc1Vec, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0Vec = vfmaq_m_f32(acc0Vec, xVec, yVec, p0); \ - } \ - acc0 = vecAddAcrossF32Mve(acc0Vec); \ - acc1 = vecAddAcrossF32Mve(acc1Vec); \ -} - -#define MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_F32(acc0, acc1, pX, pY, count) \ -{ \ - float32_t const *pSrcX; \ - const float32_t *pY1 = pY + 1; \ - f32x4_t acc0Vec, acc1Vec, xVec, yVec; \ - uint32_t k; \ - \ - acc0Vec = vdupq_n_f32(0.0f); \ - acc1Vec = vdupq_n_f32(0.0f); \ - pSrcX = (float32_t const *) pX; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vldrwq_gather_shifted_offset_f32(pY, decrIdxVec); \ - pY-=4; \ - acc0Vec = vfmaq_f32(acc0Vec, xVec, yVec); \ - yVec = vldrwq_gather_shifted_offset_f32(pY1, decrIdxVec); \ - pY1-=4; \ - acc1Vec = vfmaq_f32(acc1Vec, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = count % 0x4U; \ - /* use predication to finalize MAC sum */ \ - /* acc0 requires exact number of sample */ \ - /* disable extra lanes in final MAC computation */ \ - mve_pred16_t p0 = vctp32q(k); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vldrwq_gather_shifted_offset_f32(pY, decrIdxVec); \ - acc0Vec = vfmaq_m_f32(acc0Vec, xVec, yVec, p0); \ - yVec = vldrwq_gather_shifted_offset_f32(pY1, decrIdxVec); \ - /* acc1 requires 1 additional sample */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp32q(k+1); \ - acc1Vec = vfmaq_m_f32(acc1Vec, xVec, yVec, p0); \ - \ - acc0 = vecAddAcrossF32Mve(acc0Vec); \ - acc1 = vecAddAcrossF32Mve(acc1Vec); \ -} - -#define MVE_INTR_CONV_SINGLE_F32(acc, pX, pY, count) \ -{ \ - float32_t const *pSrcX; \ - f32x4_t accVec, xVec, yVec; \ - uint32_t k; \ - \ - accVec = vdupq_n_f32(0.0f); \ - pSrcX = (float32_t const *) pX; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrwq_gather_shifted_offset_f32(pY, decrIdxVec); \ - pY-=4; \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - accVec = vfmaq_f32(accVec, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vldrwq_gather_shifted_offset_f32(pY, decrIdxVec); \ - accVec = vfmaq_m_f32(accVec, xVec, yVec, p0); \ - } \ - acc = vecAddAcrossF32Mve(accVec); \ -} - -#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)*/ - -#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) - -#define MVE_INTR_CONV_SINGLE_Q31(acc, pX, pY, count) \ -{ \ - q31_t const *pSrcX; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - pY-=4; \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc = vmlaldavaq(acc, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - acc = vmlaldavaq_p(acc, xVec, yVec, p0); \ - } \ - acc = asrl(acc, 31); \ -} - - - -#define MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_Q31(acc0, acc1, pX, pY, count) \ -{ \ - q31_t const *pSrcX; \ - const q31_t *pY1 = pY + 1; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - pY-=4; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - yVec = vldrwq_gather_shifted_offset_s32(pY1, decrIdxVec); \ - pY1-=4; \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = count % 0x4U; \ - /* use predication to finalize MAC sum */ \ - /* acc0 requires exact number of sample */ \ - /* disable extra lanes in final MAC computation */ \ - mve_pred16_t p0 = vctp32q(k); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - yVec = vldrwq_gather_shifted_offset_s32(pY1, decrIdxVec); \ - /* acc1 requires 1 additional sample */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp32q(k+1); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - \ - acc0 = asrl(acc0, 31); \ - acc1 = asrl(acc1, 31); \ -} - - - - -#define MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_Q31(acc0, acc1, pX, pY, count)\ -{ \ - q31_t const *pSrcX; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - k = (count-1) >> 2; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - pY-=4; \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = (count - 1) % 0x4U; \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires exact number of sample (count-1) */ \ - /* disable extra lanes in final MAC computation */ \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - /* acc0 requires 1 additional sample (count) */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp32q(k+1); \ - xVec = vld1q(pSrcX); \ - pSrcX += 4; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - \ - acc0 = asrl(acc0, 31); \ - acc1 = asrl(acc1, 31); \ -} - - - -#define MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_Q31(acc0, acc1, pX, pY, count) \ -{ \ - q31_t const *pSrcX; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - pY-=4; \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - } \ - acc0 = asrl(acc0, 31); \ - acc1 = asrl(acc1, 31); \ -} - - - -#define MVE_INTR_CONV_QUAD_INC_X_FIXED_SIZE_Q31(acc0, acc1, acc2, acc3, pX, pY, count) \ -{ \ - q31_t const *pSrcX; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - pY-=4; \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vldrwq_s32(&pSrcX[2]); \ - acc2 = vmlaldavaq(acc2, xVec, yVec); \ - xVec = vldrwq_s32(&pSrcX[3]); \ - acc3 = vmlaldavaq(acc3, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vldrwq_gather_shifted_offset_s32(pY, decrIdxVec); \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - xVec = vldrwq_s32(&pSrcX[2]); \ - acc2 = vmlaldavaq_p(acc2, xVec, yVec, p0); \ - xVec = vldrwq_s32(&pSrcX[3]); \ - acc3 = vmlaldavaq_p(acc3, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - } \ - acc0 = asrl(acc0, 31); \ - acc1 = asrl(acc1, 31); \ - acc2 = asrl(acc2, 31); \ - acc3 = asrl(acc3, 31); \ -} - -#define MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_Q31(acc0, acc1, pX, pY, count) \ -{ \ - q31_t const *pSrcX, *pSrcY; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - pSrcY = (q31_t const *) pY; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vldrwq_s32(&pSrcY[-1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = count % 0x4U; \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires 1 additional sample */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - mve_pred16_t p0 = vctp32q(k+1); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vldrwq_s32(&pSrcY[-1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec,p0); \ - /* acc0 requires exact number of sample */ \ - /* disable extra lanes in final MAC computation */ \ - p0 = vctp32q(k); \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec,p0); \ - \ - acc0 = asrl(acc0, 31); \ - acc1 = asrl(acc1, 31); \ -} - -#define MVE_INTR_CORR_SINGLE_Q31(acc, pX, pY, count) \ -{ \ - q31_t const *pSrcX, *pSrcY; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - pSrcY = (q31_t const *) pY; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - acc = vmlaldavaq(acc, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - acc = vmlaldavaq_p(acc, xVec, yVec, p0); \ - } \ - acc = asrl(acc, 31); \ -} - -#define MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_Q31(acc0, acc1, acc2, acc3, pX, pY, count) \ -{ \ - q31_t const *pSrcX, *pSrcY; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - pSrcY = (q31_t const *) pY; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vldrwq_s32(&pSrcX[2]); \ - acc2 = vmlaldavaq(acc2, xVec, yVec); \ - xVec = vldrwq_s32(&pSrcX[3]); \ - acc3 = vmlaldavaq(acc3, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* loop + tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - xVec = vldrwq_s32(&pSrcX[2]); \ - acc2 = vmlaldavaq_p(acc2, xVec, yVec, p0); \ - xVec = vldrwq_s32(&pSrcX[3]); \ - acc3 = vmlaldavaq_p(acc3, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - } \ - \ - acc0 = asrl(acc0, 31); \ - acc1 = asrl(acc1, 31); \ - acc2 = asrl(acc2, 31); \ - acc3 = asrl(acc3, 31); \ -} - -#define MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_Q31(acc0, acc1, pX, pY, count) \ -{ \ - q31_t const *pSrcX, *pSrcY; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - pSrcY = (q31_t const *) pY; \ - k = count >> 2; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* loop + tail predication expected here */ \ - k = count % 0x4U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - } \ - \ - acc0 = asrl(acc0, 31); \ - acc1 = asrl(acc1, 31); \ -} - -#define MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_Q31(acc0, acc1, pX, pY, count) \ -{ \ - q31_t const *pSrcX, *pSrcY; \ - q31x4_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q31_t const *) pX; \ - pSrcY = (q31_t const *) pY; \ - k = (count-1) >> 2; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires exact number of sample (count-1) */ \ - /* disable extra lanes in final MAC computation */ \ - k = (count-1) % 0x4U; \ - mve_pred16_t p0 = vctp32q(k); \ - yVec = vld1q(pSrcY); pSrcY += 4; \ - xVec = vldrwq_s32(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - /* acc0 requires 1 additional sample (count) */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp32q(k+1); \ - xVec = vld1q(pSrcX); pSrcX += 4; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - \ - acc0 = asrl(acc0, 31); \ - acc1 = asrl(acc1, 31); \ -} - -#define MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_Q15(acc0, acc1, pX, pY, count) \ -{ \ - q15_t const *pSrcX, *pSrcY; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - pSrcY = (q15_t const *) pY; \ - k = count >> 3; \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - yVec = vldrhq_s16(&pSrcY[-1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = count % 0x8U; \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires 1 additional sample */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - mve_pred16_t p0 = vctp16q(k+1); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - yVec = vldrhq_s16(&pSrcY[-1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec,p0); \ - /* acc0 requires exact number of sample */ \ - /* disable extra lanes in final MAC computation */ \ - p0 = vctp16q(k); \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec,p0); \ - \ - acc0 = asrl(acc0, 15); \ - acc1 = asrl(acc1, 15); \ - acc0 = __SSAT(acc0, 16); \ - acc1 = __SSAT(acc1, 16); \ -} - -#define MVE_INTR_CORR_SINGLE_Q15(acc, pX, pY, count) \ -{ \ - q15_t const *pSrcX, *pSrcY; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - pSrcY = (q15_t const *) pY; \ - k = count >> 3; \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - acc = vmlaldavaq(acc, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* tail predication expected here */ \ - k = count % 0x8U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp16q(k); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - acc = vmlaldavaq_p(acc, xVec, yVec, p0); \ - } \ - acc = asrl(acc, 15); \ - acc = __SSAT(acc, 16); \ -} - -#define MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_Q15(acc0, acc1, acc2, acc3, pX, pY, count) \ -{ \ - q15_t const *pSrcX, *pSrcY; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - pSrcY = (q15_t const *) pY; \ - k = count >> 3; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vldrhq_s16(&pSrcX[2]); \ - acc2 = vmlaldavaq(acc2, xVec, yVec); \ - xVec = vldrhq_s16(&pSrcX[3]); \ - acc3 = vmlaldavaq(acc3, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* loop + tail predication expected here */ \ - k = count % 0x8U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp16q(k); \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - xVec = vldrhq_s16(&pSrcX[2]); \ - acc2 = vmlaldavaq_p(acc2, xVec, yVec, p0); \ - xVec = vldrhq_s16(&pSrcX[3]); \ - acc3 = vmlaldavaq_p(acc3, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - } \ - \ - acc0 = asrl(acc0, 15); \ - acc1 = asrl(acc1, 15); \ - acc2 = asrl(acc2, 15); \ - acc3 = asrl(acc3, 15); \ - acc0 = __SSAT(acc0, 16); \ - acc1 = __SSAT(acc1, 16); \ - acc2 = __SSAT(acc2, 16); \ - acc3 = __SSAT(acc3, 16); \ -} - -#define MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_Q15(acc0, acc1, pX, pY, count) \ -{ \ - q15_t const *pSrcX, *pSrcY; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - pSrcY = (q15_t const *) pY; \ - k = count >> 3; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* loop + tail predication expected here */ \ - k = count % 0x8U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp16q(k); \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - } \ - \ - acc0 = asrl(acc0, 15); \ - acc1 = asrl(acc1, 15); \ - acc0 = __SSAT(acc0, 16); \ - acc1 = __SSAT(acc1, 16); \ -} - -#define MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_Q15(acc0, acc1, pX, pY, count) \ -{ \ - q15_t const *pSrcX, *pSrcY; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - pSrcY = (q15_t const *) pY; \ - k = (count-1) >> 3; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires exact number of sample (count-1) */ \ - /* disable extra lanes in final MAC computation */ \ - k = (count-1) % 0x8U; \ - mve_pred16_t p0 = vctp16q(k); \ - yVec = vld1q(pSrcY); pSrcY += 8; \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - /* acc0 requires 1 additional sample (count) */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp16q(k+1); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - \ - acc0 = asrl(acc0, 15); \ - acc1 = asrl(acc1, 15); \ - acc0 = __SSAT(acc0, 16); \ - acc1 = __SSAT(acc1, 16); \ -} - -#define MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_Q15(acc0, acc1, pX, pY, count) \ -{ \ - q15_t const *pSrcX; \ - const q15_t *pY1 = pY + 1; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - k = count >> 3; \ - \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - pY-=8; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - yVec = vldrhq_gather_shifted_offset_s16(pY1, decrIdxVec); \ - pY1-=8; \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = count % 0x8U; \ - /* use predication to finalize MAC sum */ \ - /* acc0 requires exact number of sample */ \ - /* disable extra lanes in final MAC computation */ \ - mve_pred16_t p0 = vctp16q(k); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - yVec = vldrhq_gather_shifted_offset_s16(pY1, decrIdxVec); \ - /* acc1 requires 1 additional sample */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp16q(k+1); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - \ - acc0 = asrl(acc0, 15); \ - acc1 = asrl(acc1, 15); \ - acc0 = __SSAT(acc0, 16); \ - acc1 = __SSAT(acc1, 16); \ -} - -#define MVE_INTR_CONV_SINGLE_Q15(acc, pX, pY, count) \ -{ \ - q15_t const *pSrcX; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - k = count >> 3; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - pY-=8; \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc = vmlaldavaq(acc, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x8U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp16q(k); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - acc = vmlaldavaq_p(acc, xVec, yVec, p0); \ - } \ - acc = asrl(acc, 15); \ - acc = __SSAT(acc, 16); \ -} - -#define MVE_INTR_CONV_QUAD_INC_X_FIXED_SIZE_Q15(acc0, acc1, acc2, acc3, pX, pY, count) \ -{ \ - q15_t const *pSrcX; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - k = count >> 3; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - pY-=8; \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vldrhq_s16(&pSrcX[2]); \ - acc2 = vmlaldavaq(acc2, xVec, yVec); \ - xVec = vldrhq_s16(&pSrcX[3]); \ - acc3 = vmlaldavaq(acc3, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x8U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp16q(k); \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - xVec = vldrhq_s16(&pSrcX[2]); \ - acc2 = vmlaldavaq_p(acc2, xVec, yVec, p0); \ - xVec = vldrhq_s16(&pSrcX[3]); \ - acc3 = vmlaldavaq_p(acc3, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - } \ - acc0 = asrl(acc0, 15); \ - acc1 = asrl(acc1, 15); \ - acc2 = asrl(acc2, 15); \ - acc3 = asrl(acc3, 15); \ - acc0 = __SSAT(acc0, 16); \ - acc1 = __SSAT(acc1, 16); \ - acc2 = __SSAT(acc2, 16); \ - acc3 = __SSAT(acc3, 16); \ -} - -#define MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_Q15(acc0, acc1, pX, pY, count) \ -{ \ - q15_t const *pSrcX; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - k = count >> 3; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - pY-=8; \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x8U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp16q(k); \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - } \ - acc0 = asrl(acc0, 15); \ - acc1 = asrl(acc1, 15); \ - acc0 = __SSAT(acc0, 16); \ - acc1 = __SSAT(acc1, 16); \ -} - -#define MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_Q15(acc0, acc1, pX, pY, count) \ -{ \ - q15_t const *pSrcX; \ - q15x8_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q15_t const *) pX; \ - k = (count-1) >> 3; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - pY-=8; \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = (count - 1) % 0x8U; \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires exact number of sample (count-1) */ \ - /* disable extra lanes in final MAC computation */ \ - mve_pred16_t p0 = vctp16q(k); \ - yVec = vldrhq_gather_shifted_offset_s16(pY, decrIdxVec); \ - xVec = vldrhq_s16(&pSrcX[1]); \ - acc1 = vmlaldavaq_p(acc1, xVec, yVec, p0); \ - /* acc0 requires 1 additional sample (count) */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp16q(k+1); \ - xVec = vld1q(pSrcX); pSrcX += 8; \ - acc0 = vmlaldavaq_p(acc0, xVec, yVec, p0); \ - \ - acc0 = asrl(acc0, 15); \ - acc1 = asrl(acc1, 15); \ - acc0 = __SSAT(acc0, 16); \ - acc1 = __SSAT(acc1, 16); \ -} - -#define MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_Q7(acc0, acc1, pX, pY, count) \ -{ \ - q7_t const *pSrcX, *pSrcY; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - pSrcY = (q7_t const *) pY; \ - k = count >> 4; \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - yVec = vldrbq_s8(&pSrcY[-1]); \ - acc1 = vmladavaq(acc1, xVec, yVec); \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - acc0 = vmladavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = count % 0x10U; \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires 1 additional sample */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - mve_pred16_t p0 = vctp8q(k+1); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - yVec = vldrbq_s8(&pSrcY[-1]); \ - acc1 = vmladavaq_p(acc1, xVec, yVec,p0); \ - /* acc0 requires exact number of sample */ \ - /* disable extra lanes in final MAC computation */ \ - p0 = vctp8q(k); \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - acc0 = vmladavaq_p(acc0, xVec, yVec,p0); \ - \ - acc0 = (acc0 >> 7); \ - acc1 = (acc1 >> 7); \ - acc0 = __SSAT(acc0, 8); \ - acc1 = __SSAT(acc1, 8); \ -} - -#define MVE_INTR_CORR_SINGLE_Q7(acc, pX, pY, count) \ -{ \ - q7_t const *pSrcX, *pSrcY; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - pSrcY = (q7_t const *) pY; \ - k = count >> 4; \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - acc = vmladavaq(acc, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* tail predication expected here */ \ - k = count % 0x10U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp8q(k); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - acc = vmladavaq_p(acc, xVec, yVec, p0); \ - } \ - acc =(acc >> 7); \ - acc = __SSAT(acc, 8); \ -} - -#define MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_Q7(acc0, acc1, acc2, acc3, pX, pY, count) \ -{ \ - q7_t const *pSrcX, *pSrcY; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - pSrcY = (q7_t const *) pY; \ - k = count >> 4; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq(acc1, xVec, yVec); \ - xVec = vldrbq_s8(&pSrcX[2]); \ - acc2 = vmladavaq(acc2, xVec, yVec); \ - xVec = vldrbq_s8(&pSrcX[3]); \ - acc3 = vmladavaq(acc3, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* loop + tail predication expected here */ \ - k = count % 0x10U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp8q(k); \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq_p(acc1, xVec, yVec, p0); \ - xVec = vldrbq_s8(&pSrcX[2]); \ - acc2 = vmladavaq_p(acc2, xVec, yVec, p0); \ - xVec = vldrbq_s8(&pSrcX[3]); \ - acc3 = vmladavaq_p(acc3, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq_p(acc0, xVec, yVec, p0); \ - } \ - \ - acc0 = (acc0 >> 7); \ - acc1 = (acc1 >> 7); \ - acc2 = (acc2 >> 7); \ - acc3 = (acc3 >> 7); \ - acc0 = __SSAT(acc0, 8); \ - acc1 = __SSAT(acc1, 8); \ - acc2 = __SSAT(acc2, 8); \ - acc3 = __SSAT(acc3, 8); \ -} - -#define MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_Q7(acc0, acc1, pX, pY, count) \ -{ \ - q7_t const *pSrcX, *pSrcY; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - pSrcY = (q7_t const *) pY; \ - k = count >> 4; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* loop + tail predication expected here */ \ - k = count % 0x10U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp8q(k); \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq_p(acc1, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq_p(acc0, xVec, yVec, p0); \ - } \ - \ - acc0 = (acc0 >> 7); \ - acc1 = (acc1 >> 7); \ - acc0 = __SSAT(acc0, 8); \ - acc1 = __SSAT(acc1, 8); \ -} - -#define MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_Q7(acc0, acc1, pX, pY, count) \ -{ \ - q7_t const *pSrcX, *pSrcY; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - pSrcY = (q7_t const *) pY; \ - k = (count-1) >> 4; \ - \ - while (k > 0U) \ - { \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires exact number of sample (count-1) */ \ - /* disable extra lanes in final MAC computation */ \ - k = (count-1) % 0x10U; \ - mve_pred16_t p0 = vctp8q(k); \ - yVec = vld1q(pSrcY); pSrcY += 16; \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq_p(acc1, xVec, yVec, p0); \ - /* acc0 requires 1 additional sample (count) */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp8q(k+1); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq_p(acc0, xVec, yVec, p0); \ - \ - acc0 = (acc0 >> 7); \ - acc1 = (acc1 >> 7); \ - acc0 = __SSAT(acc0, 8); \ - acc1 = __SSAT(acc1, 8); \ -} - -#define MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_Q7(acc0, acc1, pX, pY, count) \ -{ \ - q7_t const *pSrcX; \ - const q7_t *pY1 = pY + 1; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - k = count >> 4; \ - \ - while (k > 0U) \ - { \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - pY-=16; \ - acc0 = vmladavaq(acc0, xVec, yVec); \ - yVec = vldrbq_gather_offset_s8(pY1, decrIdxVec); \ - pY1-=16; \ - acc1 = vmladavaq(acc1, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = count % 0x10U; \ - /* use predication to finalize MAC sum */ \ - /* acc0 requires exact number of sample */ \ - /* disable extra lanes in final MAC computation */ \ - mve_pred16_t p0 = vctp8q(k); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - acc0 = vmladavaq_p(acc0, xVec, yVec, p0); \ - yVec = vldrbq_gather_offset_s8(pY1, decrIdxVec); \ - /* acc1 requires 1 additional sample */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp8q(k+1); \ - acc1 = vmladavaq_p(acc1, xVec, yVec, p0); \ - \ - acc0 = (acc0 >> 7); \ - acc1 = (acc1 >> 7); \ - acc0 = __SSAT(acc0, 8); \ - acc1 = __SSAT(acc1, 8); \ -} - -#define MVE_INTR_CONV_SINGLE_Q7(acc, pX, pY, count) \ -{ \ - q7_t const *pSrcX; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - k = count >> 4; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - pY-=16; \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc = vmladavaq(acc, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x10U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp8q(k); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - acc = vmladavaq_p(acc, xVec, yVec, p0); \ - } \ - acc = __SSAT(acc >> 7, 8); \ -} - -#define MVE_INTR_CONV_QUAD_INC_X_FIXED_SIZE_Q7(acc0, acc1, acc2, acc3, pX, pY, count) \ -{ \ - q7_t const *pSrcX; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - k = count >> 4; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - pY-=16; \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq(acc1, xVec, yVec); \ - xVec = vldrbq_s8(&pSrcX[2]); \ - acc2 = vmladavaq(acc2, xVec, yVec); \ - xVec = vldrbq_s8(&pSrcX[3]); \ - acc3 = vmladavaq(acc3, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x10U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp8q(k); \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq_p(acc1, xVec, yVec, p0); \ - xVec = vldrbq_s8(&pSrcX[2]); \ - acc2 = vmladavaq_p(acc2, xVec, yVec, p0); \ - xVec = vldrbq_s8(&pSrcX[3]); \ - acc3 = vmladavaq_p(acc3, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq_p(acc0, xVec, yVec, p0); \ - } \ - acc0 = __SSAT(acc0 >> 7, 8); \ - acc1 = __SSAT(acc1 >> 7, 8); \ - acc2 = __SSAT(acc2 >> 7, 8); \ - acc3 = __SSAT(acc3 >> 7, 8); \ -} - -#define MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_Q7(acc0, acc1, pX, pY, count) \ -{ \ - q7_t const *pSrcX; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - k = count >> 4; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - pY-=16; \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - /* Loop with tail predication expected here */ \ - k = count % 0x10U; \ - if (k > 0U) \ - { \ - mve_pred16_t p0 = vctp8q(k); \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq_p(acc1, xVec, yVec, p0); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq_p(acc0, xVec, yVec, p0); \ - } \ - acc0 = __SSAT(acc0 >> 7, 8); \ - acc1 = __SSAT(acc1 >> 7, 8); \ -} - - -#define MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_Q7(acc0, acc1, pX, pY, count) \ -{ \ - q7_t const *pSrcX; \ - q7x16_t xVec, yVec; \ - uint32_t k; \ - \ - pSrcX = (q7_t const *) pX; \ - k = (count-1) >> 4; \ - \ - while (k > 0U) \ - { \ - /* note */ \ - /* could can be more efficient using Vector Scatter Store: */ \ - /* + pre-increment + WB */ \ - /* To be revisited when intrinsic available */ \ - /* SDCOMP-52618 */ \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - pY-=16; \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq(acc1, xVec, yVec); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq(acc0, xVec, yVec); \ - /* Decrement the loop counter */ \ - k--; \ - } \ - k = (count - 1) % 0x10U; \ - /* use predication to finalize MAC sum */ \ - /* acc1 requires exact number of sample (count-1) */ \ - /* disable extra lanes in final MAC computation */ \ - mve_pred16_t p0 = vctp8q(k); \ - yVec = vldrbq_gather_offset_s8(pY, decrIdxVec); \ - xVec = vldrbq_s8(&pSrcX[1]); \ - acc1 = vmladavaq_p(acc1, xVec, yVec, p0); \ - /* acc0 requires 1 additional sample (count) */ \ - /* so add 1 to unmask an extra lane in final MAC computation */ \ - p0 = vctp8q(k+1); \ - xVec = vld1q(pSrcX); pSrcX += 16; \ - acc0 = vmladavaq_p(acc0, xVec, yVec, p0); \ - \ - acc0 = (acc0 >> 7); \ - acc1 = (acc1 >> 7); \ - acc0 = __SSAT(acc0, 8); \ - acc1 = __SSAT(acc1, 8); \ -} - -#endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ - -#ifdef __cplusplus -} -#endif - - -#endif /* _ARM_VEC_FILTERING_H_ */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/BasicMathFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/BasicMathFunctions.c deleted file mode 100644 index 3532f78..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/BasicMathFunctions.c +++ /dev/null @@ -1,75 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: BasicMathFunctions.c - * Description: Combination of all basic math function source files. - * - * $Date: 16. March 2020 - * $Revision: V1.1.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_abs_f32.c" -#include "arm_abs_q15.c" -#include "arm_abs_q31.c" -#include "arm_abs_q7.c" -#include "arm_add_f32.c" -#include "arm_add_q15.c" -#include "arm_add_q31.c" -#include "arm_add_q7.c" -#include "arm_and_u16.c" -#include "arm_and_u32.c" -#include "arm_and_u8.c" -#include "arm_dot_prod_f32.c" -#include "arm_dot_prod_q15.c" -#include "arm_dot_prod_q31.c" -#include "arm_dot_prod_q7.c" -#include "arm_mult_f32.c" -#include "arm_mult_q15.c" -#include "arm_mult_q31.c" -#include "arm_mult_q7.c" -#include "arm_negate_f32.c" -#include "arm_negate_q15.c" -#include "arm_negate_q31.c" -#include "arm_negate_q7.c" -#include "arm_not_u16.c" -#include "arm_not_u32.c" -#include "arm_not_u8.c" -#include "arm_offset_f32.c" -#include "arm_offset_q15.c" -#include "arm_offset_q31.c" -#include "arm_offset_q7.c" -#include "arm_or_u16.c" -#include "arm_or_u32.c" -#include "arm_or_u8.c" -#include "arm_scale_f32.c" -#include "arm_scale_q15.c" -#include "arm_scale_q31.c" -#include "arm_scale_q7.c" -#include "arm_shift_q15.c" -#include "arm_shift_q31.c" -#include "arm_shift_q7.c" -#include "arm_sub_f32.c" -#include "arm_sub_q15.c" -#include "arm_sub_q31.c" -#include "arm_sub_q7.c" -#include "arm_xor_u16.c" -#include "arm_xor_u32.c" -#include "arm_xor_u8.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/CMakeLists.txt deleted file mode 100644 index ee3e215..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPBasicMath) - -include(configLib) -include(configDsp) - -file(GLOB SRC "./*_*.c") - -add_library(CMSISDSPBasicMath STATIC ${SRC}) - -configLib(CMSISDSPBasicMath ${ROOT}) -configDsp(CMSISDSPBasicMath ${ROOT}) - -### Includes -target_include_directories(CMSISDSPBasicMath PUBLIC "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_f32.c deleted file mode 100644 index a70e700..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_f32.c +++ /dev/null @@ -1,196 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_abs_f32.c - * Description: Floating-point vector absolute value - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 vector - @param[out] pDst points to the output vector - @param[in] blockSize number of samples in each vector - @return none - */ - - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_abs_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - f32x4_t vec1; - f32x4_t res; - - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute values and then store the results in the destination buffer. */ - vec1 = vld1q(pSrc); - res = vabsq(vec1); - vst1q(pDst, res); - - /* Increment pointers */ - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - - - if (blkCnt > 0U) - { - /* C = |A| */ - mve_pred16_t p0 = vctp32q(blkCnt); - vec1 = vld1q(pSrc); - vstrwq_p(pDst, vabsq(vec1), p0); - } - -} - -#else -void arm_abs_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t vec1; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute values and then store the results in the destination buffer. */ - vec1 = vld1q_f32(pSrc); - res = vabsq_f32(vec1); - vst1q_f32(pDst, res); - - /* Increment pointers */ - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute and store result in destination buffer. */ - *pDst++ = fabsf(*pSrc++); - - *pDst++ = fabsf(*pSrc++); - - *pDst++ = fabsf(*pSrc++); - - *pDst++ = fabsf(*pSrc++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute and store result in destination buffer. */ - *pDst++ = fabsf(*pSrc++); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ -/** - @} end of BasicAbs group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q15.c deleted file mode 100644 index 854fbd9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q15.c +++ /dev/null @@ -1,178 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_abs_q15.c - * Description: Q15 vector absolute value - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicAbs - @{ - */ - -/** - @brief Q15 vector absolute value. - @param[in] pSrc points to the input vector - @param[out] pDst points to the output vector - @param[in] blockSize number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - The Q15 value -1 (0x8000) will be saturated to the maximum allowable positive value 0x7FFF. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_abs_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* - * C = |A| - * Calculate absolute and then store the results in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vst1q(pDst, vqabsq(vecSrc)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 8; - pDst += 8; - } - /* - * tail - */ - blkCnt = blockSize & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecSrc = vld1q(pSrc); - vstrhq_p(pDst, vqabsq(vecSrc), p0); - } -} - -#else -void arm_abs_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - q15_t in; /* Temporary input variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute of input (if -1 then saturated to 0x7fff) and store result in destination buffer. */ - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute of input (if -1 then saturated to 0x7fff) and store result in destination buffer. */ - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicAbs group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q31.c deleted file mode 100644 index 59ef7fe..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q31.c +++ /dev/null @@ -1,208 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_abs_q31.c - * Description: Q31 vector absolute value - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicAbs - @{ - */ - -/** - @brief Q31 vector absolute value. - @param[in] pSrc points to the input vector - @param[out] pDst points to the output vector - @param[in] blockSize number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - The Q31 value -1 (0x80000000) will be saturated to the maximum allowable positive value 0x7FFFFFFF. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_abs_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counters */ - q31x4_t vecSrc; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - /* - * C = |A| - * Calculate absolute and then store the results in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vst1q(pDst, vqabsq(vecSrc)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * Advance vector source and destination pointers - */ - pSrc += 4; - pDst += 4; - } - /* - * Tail - */ - blkCnt = blockSize & 3; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecSrc = vld1q(pSrc); - vstrwq_p(pDst, vqabsq(vecSrc), p0); - } -} - -#else -void arm_abs_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t in; /* Temporary variable */ - -#if defined(ARM_MATH_NEON) - int32x4_t vec1; - int32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = |A| */ - /* Calculate absolute and then store the results in the destination buffer. */ - - vec1 = vld1q_s32(pSrc); - res = vqabsq_s32(vec1); - vst1q_s32(pDst, res); - - /* Increment pointers */ - pSrc += 4; - pDst += 4; - - /* Decrement the blockSize loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute of input (if -1 then saturated to 0x7fffffff) and store result in destination buffer. */ - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined (ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute of input (if -1 then saturated to 0x7fffffff) and store result in destination buffer. */ - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* #if defined (ARM_MATH_MVEI) */ -/** - @} end of BasicAbs group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q7.c deleted file mode 100644 index e016286..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_abs_q7.c +++ /dev/null @@ -1,180 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_abs_q7.c - * Description: Q7 vector absolute value - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicAbs - @{ - */ - -/** - @brief Q7 vector absolute value. - @param[in] pSrc points to the input vector - @param[out] pDst points to the output vector - @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 - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - The Q7 value -1 (0x80) will be saturated to the maximum allowable positive value 0x7F. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_abs_q7( - const q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecSrc; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - /* - * C = |A| - * Calculate absolute and then store the results in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vst1q(pDst, vqabsq(vecSrc)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 16; - pDst += 16; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecSrc = vld1q(pSrc); - vstrbq_p(pDst, vqabsq(vecSrc), p0); - } -} - -#else -void arm_abs_q7( - const q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - q7_t in; /* Temporary input variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute of input (if -1 then saturated to 0x7f) and store result in destination buffer. */ - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q7_t)__QSUB8(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q7_t)__QSUB8(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q7_t)__QSUB8(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q7_t)__QSUB8(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute of input (if -1 then saturated to 0x7f) and store result in destination buffer. */ - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = (in > 0) ? in : (q7_t) __QSUB8(0, in); -#else - *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicAbs group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_f32.c deleted file mode 100644 index ebf6d7e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_f32.c +++ /dev/null @@ -1,199 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_add_f32.c - * Description: Floating-point vector addition - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 first input vector - @param[in] pSrcB points to second input vector - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_add_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - - f32x4_t vec1; - f32x4_t vec2; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and then store the results in the destination buffer. */ - vec1 = vld1q(pSrcA); - vec2 = vld1q(pSrcB); - res = vaddq(vec1, vec2); - vst1q(pDst, res); - - /* Increment pointers */ - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - - if (blkCnt > 0U) - { - /* C = A + B */ - mve_pred16_t p0 = vctp32q(blkCnt); - vec1 = vld1q(pSrcA); - vec2 = vld1q(pSrcB); - vstrwq_p(pDst, vaddq(vec1,vec2), p0); - } - -} - -#else -void arm_add_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t vec1; - f32x4_t vec2; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and then store the results in the destination buffer. */ - vec1 = vld1q_f32(pSrcA); - vec2 = vld1q_f32(pSrcB); - res = vaddq_f32(vec1, vec2); - vst1q_f32(pDst, res); - - /* Increment pointers */ - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and store result in destination buffer. */ - *pDst++ = (*pSrcA++) + (*pSrcB++); - *pDst++ = (*pSrcA++) + (*pSrcB++); - *pDst++ = (*pSrcA++) + (*pSrcB++); - *pDst++ = (*pSrcA++) + (*pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and store result in destination buffer. */ - *pDst++ = (*pSrcA++) + (*pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BasicAdd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q15.c deleted file mode 100644 index ff8ae06..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q15.c +++ /dev/null @@ -1,176 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_add_q15.c - * Description: Q15 vector addition - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_add_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecA; - q15x8_t vecB; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* - * C = A + B - * Add and then store the results in the destination buffer. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vst1q(pDst, vqaddq(vecA, vecB)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 8; - pSrcB += 8; - pDst += 8; - } - /* - * tail - */ - blkCnt = blockSize & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vstrhq_p(pDst, vqaddq(vecA, vecB), p0); - } -} - -#else -void arm_add_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q31_t inA1, inA2; - q31_t inB1, inB2; -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + B */ - -#if defined (ARM_MATH_DSP) - /* read 2 times 2 samples at a time from sourceA */ - inA1 = read_q15x2_ia ((q15_t **) &pSrcA); - inA2 = read_q15x2_ia ((q15_t **) &pSrcA); - /* read 2 times 2 samples at a time from sourceB */ - inB1 = read_q15x2_ia ((q15_t **) &pSrcB); - inB2 = read_q15x2_ia ((q15_t **) &pSrcB); - - /* Add and store 2 times 2 samples at a time */ - write_q15x2_ia (&pDst, __QADD16(inA1, inB1)); - write_q15x2_ia (&pDst, __QADD16(inA2, inB2)); -#else - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and store result in destination buffer. */ -#if defined (ARM_MATH_DSP) - *pDst++ = (q15_t) __QADD16(*pSrcA++, *pSrcB++); -#else - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ -/** - @} end of BasicAdd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q31.c deleted file mode 100644 index 06937e7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q31.c +++ /dev/null @@ -1,159 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_add_q31.c - * Description: Q31 vector addition - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_add_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - q31x4_t vecA; - q31x4_t vecB; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* - * C = A + B - * Add and then store the results in the destination buffer. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vst1q(pDst, vqaddq(vecA, vecB)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 4; - pSrcB += 4; - pDst += 4; - } - /* - * tail - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vstrwq_p(pDst, vqaddq(vecA, vecB), p0); - } -} - -#else -void arm_add_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and store result in destination buffer. */ - *pDst++ = __QADD(*pSrcA++, *pSrcB++); - - *pDst++ = __QADD(*pSrcA++, *pSrcB++); - - *pDst++ = __QADD(*pSrcA++, *pSrcB++); - - *pDst++ = __QADD(*pSrcA++, *pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and store result in destination buffer. */ - *pDst++ = __QADD(*pSrcA++, *pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#endif /* defined(ARM_MATH_MVEI) */ -/** - @} end of BasicAdd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q7.c deleted file mode 100644 index 8836c85..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_add_q7.c +++ /dev/null @@ -1,158 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_add_q7.c - * Description: Q7 vector addition - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q7 range [0x80 0x7F] are saturated. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_add_q7( - const q7_t * pSrcA, - const q7_t * pSrcB, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecA; - q7x16_t vecB; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - /* - * C = A + B - * Add and then store the results in the destination buffer. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vst1q(pDst, vqaddq(vecA, vecB)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 16; - pSrcB += 16; - pDst += 16; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vstrbq_p(pDst, vqaddq(vecA, vecB), p0); - } -} -#else -void arm_add_q7( - const q7_t * pSrcA, - const q7_t * pSrcB, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + B */ - -#if defined (ARM_MATH_DSP) - /* Add and store result in destination buffer (4 samples at a time). */ - write_q7x4_ia (&pDst, __QADD8 (read_q7x4_ia ((q7_t **) &pSrcA), read_q7x4_ia ((q7_t **) &pSrcB))); -#else - *pDst++ = (q7_t) __SSAT ((q15_t) *pSrcA++ + *pSrcB++, 8); - *pDst++ = (q7_t) __SSAT ((q15_t) *pSrcA++ + *pSrcB++, 8); - *pDst++ = (q7_t) __SSAT ((q15_t) *pSrcA++ + *pSrcB++, 8); - *pDst++ = (q7_t) __SSAT ((q15_t) *pSrcA++ + *pSrcB++, 8); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and store result in destination buffer. */ - *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ + *pSrcB++, 8); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ -/** - @} end of BasicAdd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u16.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u16.c deleted file mode 100644 index 684df9a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u16.c +++ /dev/null @@ -1,137 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_and_u16.c - * Description: uint16_t bitwise AND - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @defgroup And Vector bitwise AND - - Compute the logical bitwise AND. - - There are separate functions for uint32_t, uint16_t, and uint7_t data types. - */ - -/** - @addtogroup And - @{ - */ - -/** - @brief Compute the logical bitwise AND of two fixed-point vectors. - @param[in] pSrcA points to input vector A - @param[in] pSrcB points to input vector B - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_and_u16( - const uint16_t * pSrcA, - const uint16_t * pSrcB, - uint16_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q15x8_t vecSrcA, vecSrcB; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vst1q(pDst, vandq_u16(vecSrcA, vecSrcB) ); - - pSrcA += 8; - pSrcB += 8; - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 7; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - vstrhq_p(pDst, vandq_u16(vecSrcA, vecSrcB), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint16x8_t vecA, vecB; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3U; - - while (blkCnt > 0U) - { - vecA = vld1q_u16(pSrcA); - vecB = vld1q_u16(pSrcB); - - vst1q_u16(pDst, vandq_u16(vecA, vecB) ); - - pSrcA += 8; - pSrcB += 8; - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 7; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = (*pSrcA++)&(*pSrcB++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of And group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u32.c deleted file mode 100644 index 0a02744..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u32.c +++ /dev/null @@ -1,129 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_and_u32.c - * Description: uint32_t bitwise AND - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup And - @{ - */ - -/** - @brief Compute the logical bitwise AND of two fixed-point vectors. - @param[in] pSrcA points to input vector A - @param[in] pSrcB points to input vector B - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_and_u32( - const uint32_t * pSrcA, - const uint32_t * pSrcB, - uint32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q31x4_t vecSrcA, vecSrcB; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vst1q(pDst, vandq_u32(vecSrcA, vecSrcB) ); - - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - vstrwq_p(pDst, vandq_u32(vecSrcA, vecSrcB), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint32x4_t vecA, vecB; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - vecA = vld1q_u32(pSrcA); - vecB = vld1q_u32(pSrcB); - - vst1q_u32(pDst, vandq_u32(vecA, vecB) ); - - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = (*pSrcA++)&(*pSrcB++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of And group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u8.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u8.c deleted file mode 100644 index 00f72ec..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_and_u8.c +++ /dev/null @@ -1,130 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_and_u8.c - * Description: uint8_t bitwise AND - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - - -/** - @addtogroup And - @{ - */ - -/** - @brief Compute the logical bitwise AND of two fixed-point vectors. - @param[in] pSrcA points to input vector A - @param[in] pSrcB points to input vector B - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_and_u8( - const uint8_t * pSrcA, - const uint8_t * pSrcB, - uint8_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q7x16_t vecSrcA, vecSrcB; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vst1q(pDst, vandq_u8(vecSrcA, vecSrcB) ); - - pSrcA += 16; - pSrcB += 16; - pDst += 16; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0xF; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - vstrbq_p(pDst, vandq_u8(vecSrcA, vecSrcB), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint8x16_t vecA, vecB; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4U; - - while (blkCnt > 0U) - { - vecA = vld1q_u8(pSrcA); - vecB = vld1q_u8(pSrcB); - - vst1q_u8(pDst, vandq_u8(vecA, vecB) ); - - pSrcA += 16; - pSrcB += 16; - pDst += 16; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0xF; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = (*pSrcA++)&(*pSrcB++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of And group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_f32.c deleted file mode 100644 index 3d4388f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_f32.c +++ /dev/null @@ -1,226 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dot_prod_f32.c - * Description: Floating-point dot product - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @defgroup BasicDotProd 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 BasicDotProd - @{ - */ - -/** - @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 - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - - -void arm_dot_prod_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - uint32_t blockSize, - float32_t * result) -{ - f32x4_t vecA, vecB; - f32x4_t vecSum; - uint32_t blkCnt; - float32_t sum = 0.0f; - vecSum = vdupq_n_f32(0.0f); - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - 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. - * and advance vector source and destination pointers - */ - vecA = vld1q(pSrcA); - pSrcA += 4; - - vecB = vld1q(pSrcB); - pSrcB += 4; - - vecSum = vfmaq(vecSum, vecA, vecB); - /* - * Decrement the blockSize loop counter - */ - blkCnt --; - } - - - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ - - mve_pred16_t p0 = vctp32q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vecSum = vfmaq_m(vecSum, vecA, vecB, p0); - } - - sum = vecAddAcrossF32Mve(vecSum); - - /* Store result in destination buffer */ - *result = sum; - -} - -#else - -void arm_dot_prod_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - uint32_t blockSize, - float32_t * result) -{ - uint32_t blkCnt; /* Loop counter */ - float32_t sum = 0.0f; /* Temporary return variable */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t vec1; - f32x4_t vec2; - f32x4_t accum = vdupq_n_f32(0); - f32x2_t tmp = vdup_n_f32(0); - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - vec1 = vld1q_f32(pSrcA); - vec2 = vld1q_f32(pSrcB); - - 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. */ - - accum = vmlaq_f32(accum, vec1, vec2); - - /* Increment pointers */ - pSrcA += 4; - pSrcB += 4; - - vec1 = vld1q_f32(pSrcA); - vec2 = vld1q_f32(pSrcB); - - /* Decrement the loop counter */ - blkCnt--; - } - -#if __aarch64__ - sum = vpadds_f32(vpadd_f32(vget_low_f32(accum), vget_high_f32(accum))); -#else - tmp = vpadd_f32(vget_low_f32(accum), vget_high_f32(accum)); - sum = vget_lane_f32(tmp, 0) + vget_lane_f32(tmp, 1); - -#endif - - /* Tail */ - blkCnt = blockSize & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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 store result in a temporary buffer. */ - sum += (*pSrcA++) * (*pSrcB++); - - sum += (*pSrcA++) * (*pSrcB++); - - sum += (*pSrcA++) * (*pSrcB++); - - sum += (*pSrcA++) * (*pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - 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 store result in a temporary buffer. */ - sum += (*pSrcA++) * (*pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store result in destination buffer */ - *result = sum; -} - -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ -/** - @} end of BasicDotProd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q15.c deleted file mode 100644 index 7a6a525..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q15.c +++ /dev/null @@ -1,172 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dot_prod_q15.c - * Description: Q15 dot product - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicDotProd - @{ - */ - -/** - @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 - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_dot_prod_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - uint32_t blockSize, - q63_t * result) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecA; - q15x8_t vecB; - q63_t sum = 0LL; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - 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. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - sum = vmlaldavaq(sum, vecA, vecB); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 8; - pSrcB += 8; - } - /* - * tail - */ - blkCnt = blockSize & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - sum = vmlaldavaq_p(sum, vecA, vecB, p0); - } - - *result = sum; -} - -#else -void arm_dot_prod_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - uint32_t blockSize, - q63_t * result) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t sum = 0; /* Temporary return variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ - -#if defined (ARM_MATH_DSP) - /* Calculate dot product and store result in a temporary buffer. */ - sum = __SMLALD(read_q15x2_ia ((q15_t **) &pSrcA), read_q15x2_ia ((q15_t **) &pSrcB), sum); - sum = __SMLALD(read_q15x2_ia ((q15_t **) &pSrcA), read_q15x2_ia ((q15_t **) &pSrcB), sum); -#else - sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); - sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); - sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); - sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 store result in a temporary buffer. */ -//#if defined (ARM_MATH_DSP) -// sum = __SMLALD(*pSrcA++, *pSrcB++, sum); -//#else - sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); -//#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store result in destination buffer in 34.30 format */ - *result = sum; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicDotProd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q31.c deleted file mode 100644 index 0606f94..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q31.c +++ /dev/null @@ -1,174 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dot_prod_q31.c - * Description: Q31 dot product - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicDotProd - @{ - */ - -/** - @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 - - @par Scaling and Overflow Behavior - 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. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_dot_prod_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - uint32_t blockSize, - q63_t * result) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecA; - q31x4_t vecB; - q63_t sum = 0LL; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - 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. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - sum = vrmlaldavhaq(sum, vecA, vecB); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 4; - pSrcB += 4; - } - /* - * tail - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - sum = vrmlaldavhaq_p(sum, vecA, vecB, p0); - } - - /* - * vrmlaldavhaq provides extra intermediate accumulator headroom. - * limiting the need of intermediate scaling - * Scalar variant uses 2.48 accu format by right shifting accumulators by 14. - * 16.48 output conversion is performed outside the loop by scaling accu. by 6 - */ - *result = asrl(sum, (14 - 8)); -} - -#else -void arm_dot_prod_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - uint32_t blockSize, - q63_t * result) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t sum = 0; /* Temporary return variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - 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 store result in a temporary buffer. */ - sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; - - sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; - - sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; - - sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 store result in a temporary buffer. */ - sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store result in destination buffer in 16.48 format */ - *result = sum; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicDotProd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q7.c deleted file mode 100644 index dff7ece..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_dot_prod_q7.c +++ /dev/null @@ -1,191 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dot_prod_q7.c - * Description: Q7 dot product - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicDotProd - @{ - */ - -/** - @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 - - @par Scaling and Overflow Behavior - 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. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_dot_prod_q7( - const q7_t * pSrcA, - const q7_t * pSrcB, - uint32_t blockSize, - q31_t * result) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecA; - q7x16_t vecB; - q31_t sum = 0; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - 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. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - sum = vmladavaq(sum, vecA, vecB); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 16; - pSrcB += 16; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - sum = vmladavaq_p(sum, vecA, vecB, p0); - } - - *result = sum; -} -#else -void arm_dot_prod_q7( - const q7_t * pSrcA, - const q7_t * pSrcB, - uint32_t blockSize, - q31_t * result) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t sum = 0; /* Temporary return variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q31_t input1, input2; /* Temporary variables */ - q31_t inA1, inA2, inB1, inB2; /* Temporary variables */ -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ - -#if defined (ARM_MATH_DSP) - /* read 4 samples at a time from sourceA */ - input1 = read_q7x4_ia ((q7_t **) &pSrcA); - /* read 4 samples at a time from sourceB */ - input2 = read_q7x4_ia ((q7_t **) &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); -#else - sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); - sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); - sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); - sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 store result in a temporary buffer. */ -//#if defined (ARM_MATH_DSP) -// sum = __SMLAD(*pSrcA++, *pSrcB++, sum); -//#else - sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); -//#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store result in destination buffer in 18.14 format */ - *result = sum; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicDotProd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_f32.c deleted file mode 100644 index ad39ecb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_f32.c +++ /dev/null @@ -1,200 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mult_f32.c - * Description: Floating-point vector multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_mult_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - - f32x4_t vec1; - f32x4_t vec2; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and then store the results in the destination buffer. */ - vec1 = vld1q(pSrcA); - vec2 = vld1q(pSrcB); - res = vmulq(vec1, vec2); - vst1q(pDst, res); - - /* Increment pointers */ - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - if (blkCnt > 0U) - { - /* C = A + B */ - mve_pred16_t p0 = vctp32q(blkCnt); - vec1 = vld1q(pSrcA); - vec2 = vld1q(pSrcB); - vstrwq_p(pDst, vmulq(vec1,vec2), p0); - } - -} - -#else -void arm_mult_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t vec1; - f32x4_t vec2; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * B */ - - /* Multiply the inputs and then store the results in the destination buffer. */ - vec1 = vld1q_f32(pSrcA); - vec2 = vld1q_f32(pSrcB); - res = vmulq_f32(vec1, vec2); - vst1q_f32(pDst, res); - - /* Increment pointers */ - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * B */ - - /* Multiply inputs and store result in destination buffer. */ - *pDst++ = (*pSrcA++) * (*pSrcB++); - - *pDst++ = (*pSrcA++) * (*pSrcB++); - - *pDst++ = (*pSrcA++) * (*pSrcB++); - - *pDst++ = (*pSrcA++) * (*pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* C = A * B */ - - /* Multiply input and store result in destination buffer. */ - *pDst++ = (*pSrcA++) * (*pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BasicMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q15.c deleted file mode 100644 index 8e9dc79..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q15.c +++ /dev/null @@ -1,192 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mult_q15.c - * Description: Q15 vector multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicMult - @{ - */ - -/** - @brief Q15 vector multiplication - @param[in] pSrcA points to first input vector - @param[in] pSrcB points to second input vector - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_mult_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecA, vecB; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* - * C = A * B - * Multiply the inputs and then store the results in the destination buffer. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vst1q(pDst, vqdmulhq(vecA, vecB)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 8; - pSrcB += 8; - pDst += 8; - } - /* - * tail - */ - blkCnt = blockSize & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vstrhq_p(pDst, vqdmulhq(vecA, vecB), p0); - } -} - -#else -void arm_mult_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - 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 */ -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * B */ - -#if defined (ARM_MATH_DSP) - /* read 2 samples at a time from sourceA */ - inA1 = read_q15x2_ia ((q15_t **) &pSrcA); - /* read 2 samples at a time from sourceB */ - inB1 = read_q15x2_ia ((q15_t **) &pSrcB); - /* read 2 samples at a time from sourceA */ - inA2 = read_q15x2_ia ((q15_t **) &pSrcA); - /* read 2 samples at a time from sourceB */ - inB2 = read_q15x2_ia ((q15_t **) &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 result to destination */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pDst, __PKHBT(out2, out1, 16)); - write_q15x2_ia (&pDst, __PKHBT(out4, out3, 16)); -#else - write_q15x2_ia (&pDst, __PKHBT(out1, out2, 16)); - write_q15x2_ia (&pDst, __PKHBT(out3, out4, 16)); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - -#else - *pDst++ = (q15_t) __SSAT((((q31_t) (*pSrcA++) * (*pSrcB++)) >> 15), 16); - *pDst++ = (q15_t) __SSAT((((q31_t) (*pSrcA++) * (*pSrcB++)) >> 15), 16); - *pDst++ = (q15_t) __SSAT((((q31_t) (*pSrcA++) * (*pSrcB++)) >> 15), 16); - *pDst++ = (q15_t) __SSAT((((q31_t) (*pSrcA++) * (*pSrcB++)) >> 15), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A * B */ - - /* Multiply inputs and store result in destination buffer. */ - *pDst++ = (q15_t) __SSAT((((q31_t) (*pSrcA++) * (*pSrcB++)) >> 15), 16); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q31.c deleted file mode 100644 index 606c000..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q31.c +++ /dev/null @@ -1,168 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mult_q31.c - * Description: Q31 vector multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] are saturated. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_mult_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecA, vecB; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* - * C = A * B - * Multiply the inputs and then store the results in the destination buffer. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vst1q(pDst, vqdmulhq(vecA, vecB)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 4; - pSrcB += 4; - pDst += 4; - } - /* - * tail - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vstrwq_p(pDst, vqdmulhq(vecA, vecB), p0); - } -} - -#else -void arm_mult_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t out; /* Temporary output variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * B */ - - /* Multiply inputs and store result in destination buffer. */ - out = ((q63_t) *pSrcA++ * *pSrcB++) >> 32; - out = __SSAT(out, 31); - *pDst++ = out << 1U; - - out = ((q63_t) *pSrcA++ * *pSrcB++) >> 32; - out = __SSAT(out, 31); - *pDst++ = out << 1U; - - out = ((q63_t) *pSrcA++ * *pSrcB++) >> 32; - out = __SSAT(out, 31); - *pDst++ = out << 1U; - - out = ((q63_t) *pSrcA++ * *pSrcB++) >> 32; - out = __SSAT(out, 31); - *pDst++ = out << 1U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A * B */ - - /* Multiply inputs and store result in destination buffer. */ - out = ((q63_t) *pSrcA++ * *pSrcB++) >> 32; - out = __SSAT(out, 31); - *pDst++ = out << 1U; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q7.c deleted file mode 100644 index 06f56d3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_mult_q7.c +++ /dev/null @@ -1,168 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mult_q7.c - * Description: Q7 vector multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q7 range [0x80 0x7F] are saturated. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_mult_q7( - const q7_t * pSrcA, - const q7_t * pSrcB, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecA, vecB; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - /* - * C = A * B - * Multiply the inputs and then store the results in the destination buffer. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vst1q(pDst, vqdmulhq(vecA, vecB)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 16; - pSrcB += 16; - pDst += 16; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vstrbq_p(pDst, vqdmulhq(vecA, vecB), p0); - } -} - -#else -void arm_mult_q7( - const q7_t * pSrcA, - const q7_t * pSrcB, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q7_t out1, out2, out3, out4; /* Temporary output variables */ -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * B */ - -#if defined (ARM_MATH_DSP) - /* Multiply inputs and store 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); - - /* Pack and store result in destination buffer (in single write) */ - write_q7x4_ia (&pDst, __PACKq7(out1, out2, out3, out4)); -#else - *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); - *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); - *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); - *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A * B */ - - /* Multiply input and store result in destination buffer. */ - *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_f32.c deleted file mode 100644 index 7e8a3f9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_f32.c +++ /dev/null @@ -1,192 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_negate_f32.c - * Description: Negates floating-point vectors - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @defgroup BasicNegate 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 BasicNegate - @{ - */ - -/** - @brief Negates the elements of a floating-point vector. - @param[in] pSrc points to input vector. - @param[out] pDst points to output vector. - @param[in] blockSize number of samples in each vector. - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_negate_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - f32x4_t vec1; - f32x4_t res; - - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - /* C = |A| */ - - /* Calculate absolute values and then store the results in the destination buffer. */ - vec1 = vld1q(pSrc); - res = vnegq(vec1); - vst1q(pDst, res); - - /* Increment pointers */ - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - if (blkCnt > 0U) - { - /* C = |A| */ - mve_pred16_t p0 = vctp32q(blkCnt); - vec1 = vld1q((float32_t const *) pSrc); - vstrwq_p(pDst, vnegq(vec1), p0); - } - -} - -#else -void arm_negate_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_NEON_EXPERIMENTAL) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t vec1; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = -A */ - - /* Negate and then store the results in the destination buffer. */ - vec1 = vld1q_f32(pSrc); - res = vnegq_f32(vec1); - vst1q_f32(pDst, res); - - /* Increment pointers */ - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = -A */ - - /* Negate and store result in destination buffer. */ - *pDst++ = -*pSrc++; - - *pDst++ = -*pSrc++; - - *pDst++ = -*pSrc++; - - *pDst++ = -*pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON_EXPERIMENTAL) */ - - while (blkCnt > 0U) - { - /* C = -A */ - - /* Negate and store result in destination buffer. */ - *pDst++ = -*pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BasicNegate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q15.c deleted file mode 100644 index ea0b008..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q15.c +++ /dev/null @@ -1,171 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_negate_q15.c - * Description: Negates Q15 vectors - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicNegate - @{ - */ - -/** - @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 each vector. - @return none - - @par Conditions for optimum performance - Input and output buffers should be aligned by 32-bit - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - The Q15 value -1 (0x8000) is saturated to the maximum allowable positive value 0x7FFF. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_negate_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* - * C = -A - * Negate and then store the results in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vst1q(pDst, vqnegq(vecSrc)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 8; - pDst += 8; - } - /* - * tail - */ - blkCnt = blockSize & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecSrc = vld1q(pSrc); - vstrhq_p(pDst, vqnegq(vecSrc), p0); - } -} - -#else -void arm_negate_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - q15_t in; /* Temporary input variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q31_t in1; /* Temporary input variables */ -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = -A */ - -#if defined (ARM_MATH_DSP) - /* Negate and store result in destination buffer (2 samples at a time). */ - in1 = read_q15x2_ia ((q15_t **) &pSrc); - write_q15x2_ia (&pDst, __QSUB16(0, in1)); - - in1 = read_q15x2_ia ((q15_t **) &pSrc); - write_q15x2_ia (&pDst, __QSUB16(0, in1)); -#else - in = *pSrc++; - *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; - - in = *pSrc++; - *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; - - in = *pSrc++; - *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; - - in = *pSrc++; - *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = -A */ - - /* Negate and store result in destination buffer. */ - in = *pSrc++; - *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicNegate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q31.c deleted file mode 100644 index f962fe4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q31.c +++ /dev/null @@ -1,178 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_negate_q31.c - * Description: Negates Q31 vectors - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicNegate - @{ - */ - -/** - @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 each vector. - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - The Q31 value -1 (0x80000000) is saturated to the maximum allowable positive value 0x7FFFFFFF. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_negate_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecSrc; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* - * C = -A - * Negate and then store the results in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vst1q(pDst, vqnegq(vecSrc)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 4; - pDst += 4; - } - /* - * tail - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecSrc = vld1q(pSrc); - vstrwq_p(pDst, vqnegq(vecSrc), p0); - } -} - -#else -void arm_negate_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t in; /* Temporary input variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = -A */ - - /* Negate and store result in destination buffer. */ - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = -A */ - - /* Negate and store result in destination buffer. */ - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicNegate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q7.c deleted file mode 100644 index 03ace0e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_negate_q7.c +++ /dev/null @@ -1,171 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_negate_q7.c - * Description: Negates Q7 vectors - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicNegate - @{ - */ - -/** - @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 each vector. - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - The Q7 value -1 (0x80) is saturated to the maximum allowable positive value 0x7F. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_negate_q7( - const q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecSrc; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - /* - * C = -A - * Negate and then store the results in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vst1q(pDst, vqnegq(vecSrc)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 16; - pDst += 16; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecSrc = vld1q(pSrc); - vstrbq_p(pDst, vqnegq(vecSrc), p0); - } -} - -#else -void arm_negate_q7( - const q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - q7_t in; /* Temporary input variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q31_t in1; /* Temporary input variable */ -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = -A */ - -#if defined (ARM_MATH_DSP) - /* Negate and store result in destination buffer (4 samples at a time). */ - in1 = read_q7x4_ia ((q7_t **) &pSrc); - write_q7x4_ia (&pDst, __QSUB8(0, in1)); -#else - in = *pSrc++; - *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; - - in = *pSrc++; - *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; - - in = *pSrc++; - *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; - - in = *pSrc++; - *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = -A */ - - /* Negate and store result in destination buffer. */ - in = *pSrc++; - -#if defined (ARM_MATH_DSP) - *pDst++ = (q7_t) __QSUB8(0, in); -#else - *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicNegate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u16.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u16.c deleted file mode 100644 index e21ee2f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u16.c +++ /dev/null @@ -1,130 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_not_u16.c - * Description: uint16_t bitwise NOT - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @defgroup Not Vector bitwise NOT - - Compute the logical bitwise NOT. - - There are separate functions for uint32_t, uint16_t, and uint8_t data types. - */ - -/** - @addtogroup Not - @{ - */ - -/** - @brief Compute the logical bitwise NOT of a fixed-point vector. - @param[in] pSrc points to input vector - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_not_u16( - const uint16_t * pSrc, - uint16_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q15x8_t vecSrc; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - - while (blkCnt > 0U) - { - vecSrc = vld1q(pSrc); - - vst1q(pDst, vmvnq_u16(vecSrc) ); - - pSrc += 8; - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 7; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecSrc = vld1q(pSrc); - vstrhq_p(pDst, vmvnq_u16(vecSrc), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint16x8_t inV; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3U; - - while (blkCnt > 0U) - { - inV = vld1q_u16(pSrc); - - vst1q_u16(pDst, vmvnq_u16(inV) ); - - pSrc += 8; - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 7; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = ~(*pSrc++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of Not group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u32.c deleted file mode 100644 index 4dfa8df..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u32.c +++ /dev/null @@ -1,122 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_not_u32.c - * Description: uint32_t bitwise NOT - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup Not - @{ - */ - -/** - @brief Compute the logical bitwise NOT of a fixed-point vector. - @param[in] pSrc points to input vector - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_not_u32( - const uint32_t * pSrc, - uint32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q31x4_t vecSrc; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - vecSrc = vld1q(pSrc); - - vst1q(pDst, vmvnq_u32(vecSrc) ); - - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecSrc = vld1q(pSrc); - vstrwq_p(pDst, vmvnq_u32(vecSrc), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint32x4_t inV; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - inV = vld1q_u32(pSrc); - - vst1q_u32(pDst, vmvnq_u32(inV) ); - - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = ~(*pSrc++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of Not group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u8.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u8.c deleted file mode 100644 index cccc16b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_not_u8.c +++ /dev/null @@ -1,122 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_not_u8.c - * Description: uint8_t bitwise NOT - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup Not - @{ - */ - -/** - @brief Compute the logical bitwise NOT of a fixed-point vector. - @param[in] pSrc points to input vector - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_not_u8( - const uint8_t * pSrc, - uint8_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q7x16_t vecSrc; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - - while (blkCnt > 0U) - { - vecSrc = vld1q(pSrc); - - vst1q(pDst, vmvnq_u8(vecSrc) ); - - pSrc += 16; - pDst += 16; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0xF; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecSrc = vld1q(pSrc); - vstrbq_p(pDst, vmvnq_u8(vecSrc), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint8x16_t inV; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4U; - - while (blkCnt > 0U) - { - inV = vld1q_u8(pSrc); - - vst1q_u8(pDst, vmvnq_u8(inV) ); - - pSrc += 16; - pDst += 16; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0xF; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = ~(*pSrc++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of Not group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_f32.c deleted file mode 100644 index 67cf4ce..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_f32.c +++ /dev/null @@ -1,196 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_offset_f32.c - * Description: Floating-point vector offset - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @defgroup BasicOffset 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 BasicOffset - @{ - */ - -/** - @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 each vector - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_offset_f32( - const float32_t * pSrc, - float32_t offset, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - - f32x4_t vec1; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - /* C = A + offset */ - - /* Add offset and then store the results in the destination buffer. */ - vec1 = vld1q(pSrc); - res = vaddq(vec1,offset); - vst1q(pDst, res); - - /* Increment pointers */ - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vec1 = vld1q((float32_t const *) pSrc); - vstrwq_p(pDst, vaddq(vec1, offset), p0); - } - - -} - -#else -void arm_offset_f32( - const float32_t * pSrc, - float32_t offset, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_NEON_EXPERIMENTAL) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t vec1; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + offset */ - - /* Add offset and then store the results in the destination buffer. */ - vec1 = vld1q_f32(pSrc); - res = vaddq_f32(vec1,vdupq_n_f32(offset)); - vst1q_f32(pDst, res); - - /* Increment pointers */ - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + offset */ - - /* Add offset and store result in destination buffer. */ - *pDst++ = (*pSrc++) + offset; - - *pDst++ = (*pSrc++) + offset; - - *pDst++ = (*pSrc++) + offset; - - *pDst++ = (*pSrc++) + offset; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON_EXPERIMENTAL) */ - - while (blkCnt > 0U) - { - /* C = A + offset */ - - /* Add offset and store result in destination buffer. */ - *pDst++ = (*pSrc++) + offset; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BasicOffset group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q15.c deleted file mode 100644 index 81f820b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q15.c +++ /dev/null @@ -1,168 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_offset_q15.c - * Description: Q15 vector offset - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicOffset - @{ - */ - -/** - @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 each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_offset_q15( - const q15_t * pSrc, - q15_t offset, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* - * C = A + offset - * Add offset and then store the result in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vst1q(pDst, vqaddq(vecSrc, offset)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 8; - pDst += 8; - } - /* - * tail - */ - blkCnt = blockSize & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecSrc = vld1q(pSrc); - vstrhq_p(pDst, vqaddq(vecSrc, offset), p0); - } -} - - -#else -void arm_offset_q15( - const q15_t * pSrc, - q15_t offset, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q31_t offset_packed; /* Offset packed to 32 bit */ - - /* Offset is packed to 32 bit in order to use SIMD32 for addition */ - offset_packed = __PKHBT(offset, offset, 16); -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + offset */ - -#if defined (ARM_MATH_DSP) - /* Add offset and store result in destination buffer (2 samples at a time). */ - write_q15x2_ia (&pDst, __QADD16(read_q15x2_ia ((q15_t **) &pSrc), offset_packed)); - write_q15x2_ia (&pDst, __QADD16(read_q15x2_ia ((q15_t **) &pSrc), offset_packed)); -#else - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A + offset */ - - /* Add offset and store result in destination buffer. */ -#if defined (ARM_MATH_DSP) - *pDst++ = (q15_t) __QADD16(*pSrc++, offset); -#else - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicOffset group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q31.c deleted file mode 100644 index bdc8cf3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q31.c +++ /dev/null @@ -1,175 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_offset_q31.c - * Description: Q31 vector offset - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicOffset - @{ - */ - -/** - @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 each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_offset_q31( - const q31_t * pSrc, - q31_t offset, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecSrc; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* - * C = A + offset - * Add offset and then store the result in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vst1q(pDst, vqaddq(vecSrc, offset)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 4; - pDst += 4; - } - /* - * tail - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecSrc = vld1q(pSrc); - vstrwq_p(pDst, vqaddq(vecSrc, offset), p0); - } -} - -#else -void arm_offset_q31( - const q31_t * pSrc, - q31_t offset, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + offset */ - - /* Add offset and store result in destination buffer. */ -#if defined (ARM_MATH_DSP) - *pDst++ = __QADD(*pSrc++, offset); -#else - *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); -#endif - -#if defined (ARM_MATH_DSP) - *pDst++ = __QADD(*pSrc++, offset); -#else - *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); -#endif - -#if defined (ARM_MATH_DSP) - *pDst++ = __QADD(*pSrc++, offset); -#else - *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); -#endif - -#if defined (ARM_MATH_DSP) - *pDst++ = __QADD(*pSrc++, offset); -#else - *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A + offset */ - - /* Add offset and store result in destination buffer. */ -#if defined (ARM_MATH_DSP) - *pDst++ = __QADD(*pSrc++, offset); -#else - *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicOffset group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q7.c deleted file mode 100644 index a9de6cc..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_offset_q7.c +++ /dev/null @@ -1,162 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_offset_q7.c - * Description: Q7 vector offset - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicOffset - @{ - */ - -/** - @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 each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q7 range [0x80 0x7F] are saturated. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_offset_q7( - const q7_t * pSrc, - q7_t offset, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecSrc; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - /* - * C = A + offset - * Add offset and then store the result in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vst1q(pDst, vqaddq(vecSrc, offset)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 16; - pDst += 16; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecSrc = vld1q(pSrc); - vstrbq_p(pDst, vqaddq(vecSrc, offset), p0); - } -} - -#else -void arm_offset_q7( - const q7_t * pSrc, - q7_t offset, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q31_t offset_packed; /* Offset packed to 32 bit */ - - /* Offset is packed to 32 bit in order to use SIMD32 for addition */ - offset_packed = __PACKq7(offset, offset, offset, offset); -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + offset */ - -#if defined (ARM_MATH_DSP) - /* Add offset and store result in destination buffer (4 samples at a time). */ - write_q7x4_ia (&pDst, __QADD8(read_q7x4_ia ((q7_t **) &pSrc), offset_packed)); -#else - *pDst++ = (q7_t) __SSAT(*pSrc++ + offset, 8); - *pDst++ = (q7_t) __SSAT(*pSrc++ + offset, 8); - *pDst++ = (q7_t) __SSAT(*pSrc++ + offset, 8); - *pDst++ = (q7_t) __SSAT(*pSrc++ + offset, 8); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A + offset */ - - /* Add offset and store result in destination buffer. */ - *pDst++ = (q7_t) __SSAT((q15_t) *pSrc++ + offset, 8); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicOffset group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u16.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u16.c deleted file mode 100644 index 8f2abbc..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u16.c +++ /dev/null @@ -1,137 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_or_u16.c - * Description: uint16_t bitwise inclusive OR - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @defgroup Or Vector bitwise inclusive OR - - Compute the logical bitwise OR. - - There are separate functions for uint32_t, uint16_t, and uint8_t data types. - */ - -/** - @addtogroup Or - @{ - */ - -/** - @brief Compute the logical bitwise OR of two fixed-point vectors. - @param[in] pSrcA points to input vector A - @param[in] pSrcB points to input vector B - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_or_u16( - const uint16_t * pSrcA, - const uint16_t * pSrcB, - uint16_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q15x8_t vecSrcA, vecSrcB; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vst1q(pDst, vorrq_u16(vecSrcA, vecSrcB) ); - - pSrcA += 8; - pSrcB += 8; - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 7; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - vstrhq_p(pDst, vorrq_u16(vecSrcA, vecSrcB), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint16x8_t vecA, vecB; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3U; - - while (blkCnt > 0U) - { - vecA = vld1q_u16(pSrcA); - vecB = vld1q_u16(pSrcB); - - vst1q_u16(pDst, vorrq_u16(vecA, vecB) ); - - pSrcA += 8; - pSrcB += 8; - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 7; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = (*pSrcA++)|(*pSrcB++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of Or group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u32.c deleted file mode 100644 index 66b97c0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u32.c +++ /dev/null @@ -1,128 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_or_u32.c - * Description: uint32_t bitwise inclusive OR - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup Or - @{ - */ - -/** - @brief Compute the logical bitwise OR of two fixed-point vectors. - @param[in] pSrcA points to input vector A - @param[in] pSrcB points to input vector B - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_or_u32( - const uint32_t * pSrcA, - const uint32_t * pSrcB, - uint32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q31x4_t vecSrcA, vecSrcB; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vst1q(pDst, vorrq_u32(vecSrcA, vecSrcB) ); - - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - vstrwq_p(pDst, vorrq_u32(vecSrcA, vecSrcB), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint32x4_t vecA, vecB; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - vecA = vld1q_u32(pSrcA); - vecB = vld1q_u32(pSrcB); - - vst1q_u32(pDst, vorrq_u32(vecA, vecB) ); - - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = (*pSrcA++)|(*pSrcB++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} -/** - @} end of Or group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u8.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u8.c deleted file mode 100644 index 32ef686..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_or_u8.c +++ /dev/null @@ -1,128 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_or_u8.c - * Description: uint8_t bitwise inclusive OR - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup Or - @{ - */ - -/** - @brief Compute the logical bitwise OR of two fixed-point vectors. - @param[in] pSrcA points to input vector A - @param[in] pSrcB points to input vector B - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_or_u8( - const uint8_t * pSrcA, - const uint8_t * pSrcB, - uint8_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q7x16_t vecSrcA, vecSrcB; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vst1q(pDst, vorrq_u8(vecSrcA, vecSrcB) ); - - pSrcA += 16; - pSrcB += 16; - pDst += 16; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0xF; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - vstrbq_p(pDst, vorrq_u8(vecSrcA, vecSrcB), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint8x16_t vecA, vecB; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4U; - - while (blkCnt > 0U) - { - vecA = vld1q_u8(pSrcA); - vecB = vld1q_u8(pSrcB); - - vst1q_u8(pDst, vorrq_u8(vecA, vecB) ); - - pSrcA += 16; - pSrcB += 16; - pDst += 16; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0xF; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = (*pSrcA++)|(*pSrcB++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} -/** - @} end of Or group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_f32.c deleted file mode 100644 index 9fb59e3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_f32.c +++ /dev/null @@ -1,216 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_scale_f32.c - * Description: Multiplies a floating-point vector by a scalar - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @defgroup BasicScale 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 BasicScale - @{ - */ - -/** - @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 each vector - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_scale_f32( - const float32_t * pSrc, - float32_t scale, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - - f32x4_t vec1; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + offset */ - - /* Add offset and then store the results in the destination buffer. */ - vec1 = vld1q(pSrc); - res = vmulq(vec1,scale); - vst1q(pDst, res); - - /* Increment pointers */ - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vec1 = vld1q((float32_t const *) pSrc); - vstrwq_p(pDst, vmulq(vec1, scale), p0); - } - - -} - -#else -void arm_scale_f32( - const float32_t *pSrc, - float32_t scale, - float32_t *pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ -#if defined(ARM_MATH_NEON_EXPERIMENTAL) - f32x4_t vec1; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * scale */ - - /* Scale the input and then store the results in the destination buffer. */ - vec1 = vld1q_f32(pSrc); - res = vmulq_f32(vec1, vdupq_n_f32(scale)); - vst1q_f32(pDst, res); - - /* Increment pointers */ - pSrc += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - float32_t in1, in2, in3, in4; - - /* C = A * scale */ - - /* Scale input and store result in destination buffer. */ - in1 = (*pSrc++) * scale; - - in2 = (*pSrc++) * scale; - - in3 = (*pSrc++) * scale; - - in4 = (*pSrc++) * scale; - - *pDst++ = in1; - *pDst++ = in2; - *pDst++ = in3; - *pDst++ = in4; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON_EXPERIMENTAL) */ - - while (blkCnt > 0U) - { - /* C = A * scale */ - - /* Scale input and store result in destination buffer. */ - *pDst++ = (*pSrc++) * scale; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BasicScale group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q15.c deleted file mode 100644 index 159c7db..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q15.c +++ /dev/null @@ -1,201 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_scale_q15.c - * Description: Multiplies a Q15 vector by a scalar - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicScale - @{ - */ - -/** - @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 each vector - @return none - - @par Scaling and Overflow Behavior - 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. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_scale_q15( - const q15_t * pSrc, - q15_t scaleFract, - int8_t shift, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - q15x8_t vecDst; - - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - - while (blkCnt > 0U) - { - /* - * C = A * scale - * Scale the input and then store the result in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vecDst = vmulhq(vecSrc, vdupq_n_s16(scaleFract)); - vecDst = vqshlq_r(vecDst, shift + 1); - vst1q(pDst, vecDst); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 8; - pDst += 8; - } - /* - * tail - */ - blkCnt = blockSize & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt);; - vecSrc = vld1q(pSrc); - vecDst = vmulhq(vecSrc, vdupq_n_s16(scaleFract)); - vecDst = vqshlq_r(vecDst, shift + 1); - vstrhq_p(pDst, vecDst, p0); - } - -} - - -#else -void arm_scale_q15( - const q15_t *pSrc, - q15_t scaleFract, - int8_t shift, - q15_t *pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - int8_t kShift = 15 - shift; /* Shift to apply after scaling */ - -#if defined (ARM_MATH_LOOPUNROLL) -#if defined (ARM_MATH_DSP) - q31_t inA1, inA2; - q31_t out1, out2, out3, out4; /* Temporary output variables */ - q15_t in1, in2, in3, in4; /* Temporary input variables */ -#endif -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * scale */ - -#if defined (ARM_MATH_DSP) - /* read 2 times 2 samples at a time from source */ - inA1 = read_q15x2_ia ((q15_t **) &pSrc); - inA2 = read_q15x2_ia ((q15_t **) &pSrc); - - /* Scale inputs and store result in temporary variables - * 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 result to destination */ - write_q15x2_ia (&pDst, __PKHBT(in2, in1, 16)); - write_q15x2_ia (&pDst, __PKHBT(in4, in3, 16)); -#else - *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); - *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); - *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); - *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A * scale */ - - /* Scale input and store result in destination buffer. */ - *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicScale group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q31.c deleted file mode 100644 index e4639bb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q31.c +++ /dev/null @@ -1,244 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_scale_q31.c - * Description: Multiplies a Q31 vector by a scalar - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicScale - @{ - */ - -/** - @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 each vector - @return none - - @par Scaling and Overflow Behavior - 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. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_scale_q31( - const q31_t * pSrc, - q31_t scaleFract, - int8_t shift, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecSrc; - q31x4_t vecDst; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* - * C = A * scale - * Scale the input and then store the result in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vecDst = vmulhq(vecSrc, vdupq_n_s32(scaleFract)); - vecDst = vqshlq_r(vecDst, shift + 1); - vst1q(pDst, vecDst); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 4; - pDst += 4; - } - /* - * tail - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecSrc = vld1q(pSrc); - vecDst = vmulhq(vecSrc, vdupq_n_s32(scaleFract)); - vecDst = vqshlq_r(vecDst, shift + 1); - vstrwq_p(pDst, vecDst, p0); - } -} - -#else -void arm_scale_q31( - const q31_t *pSrc, - q31_t scaleFract, - int8_t shift, - q31_t *pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t in, out; /* Temporary variables */ - int8_t kShift = shift + 1; /* Shift to apply after scaling */ - int8_t sign = (kShift & 0x80); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - if (sign == 0U) - { - while (blkCnt > 0U) - { - /* C = A * scale */ - - /* Scale input and store result in destination buffer. */ - in = *pSrc++; /* read input from source */ - in = ((q63_t) in * scaleFract) >> 32; /* multiply input with scaler value */ - out = in << kShift; /* apply shifting */ - if (in != (out >> kShift)) /* saturate the result */ - out = 0x7FFFFFFF ^ (in >> 31); - *pDst++ = out; /* Store result destination */ - - in = *pSrc++; - in = ((q63_t) in * scaleFract) >> 32; - out = in << kShift; - if (in != (out >> kShift)) - out = 0x7FFFFFFF ^ (in >> 31); - *pDst++ = out; - - in = *pSrc++; - in = ((q63_t) in * scaleFract) >> 32; - out = in << kShift; - if (in != (out >> kShift)) - out = 0x7FFFFFFF ^ (in >> 31); - *pDst++ = out; - - in = *pSrc++; - in = ((q63_t) in * scaleFract) >> 32; - out = in << kShift; - if (in != (out >> kShift)) - out = 0x7FFFFFFF ^ (in >> 31); - *pDst++ = out; - - /* Decrement loop counter */ - blkCnt--; - } - } - else - { - while (blkCnt > 0U) - { - /* C = A * scale */ - - /* Scale input and store result in destination buffer. */ - in = *pSrc++; /* read four inputs from source */ - in = ((q63_t) in * scaleFract) >> 32; /* multiply input with scaler value */ - out = in >> -kShift; /* apply shifting */ - *pDst++ = out; /* Store result destination */ - - in = *pSrc++; - in = ((q63_t) in * scaleFract) >> 32; - out = in >> -kShift; - *pDst++ = out; - - in = *pSrc++; - in = ((q63_t) in * scaleFract) >> 32; - out = in >> -kShift; - *pDst++ = out; - - in = *pSrc++; - in = ((q63_t) in * scaleFract) >> 32; - out = in >> -kShift; - *pDst++ = out; - - /* Decrement loop counter */ - blkCnt--; - } - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - if (sign == 0U) - { - while (blkCnt > 0U) - { - /* C = A * scale */ - - /* Scale input and store result in destination buffer. */ - in = *pSrc++; - in = ((q63_t) in * scaleFract) >> 32; - out = in << kShift; - if (in != (out >> kShift)) - out = 0x7FFFFFFF ^ (in >> 31); - *pDst++ = out; - - /* Decrement loop counter */ - blkCnt--; - } - } - else - { - while (blkCnt > 0U) - { - /* C = A * scale */ - - /* Scale input and store result in destination buffer. */ - in = *pSrc++; - in = ((q63_t) in * scaleFract) >> 32; - out = in >> -kShift; - *pDst++ = out; - - /* Decrement loop counter */ - blkCnt--; - } - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicScale group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q7.c deleted file mode 100644 index d123537..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_scale_q7.c +++ /dev/null @@ -1,186 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_scale_q7.c - * Description: Multiplies a Q7 vector by a scalar - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicScale - @{ - */ - -/** - @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 each vector - @return none - - @par Scaling and Overflow Behavior - 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. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - - -void arm_scale_q7( - const q7_t * pSrc, - q7_t scaleFract, - int8_t shift, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecSrc; - q7x16_t vecDst; - - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - - while (blkCnt > 0U) - { - /* - * C = A * scale - * Scale the input and then store the result in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vecDst = vmulhq(vecSrc, vdupq_n_s8(scaleFract)); - vecDst = vqshlq_r(vecDst, shift + 1); - vst1q(pDst, vecDst); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 16; - pDst += 16; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecSrc = vld1q(pSrc); - vecDst = vmulhq(vecSrc, vdupq_n_s8(scaleFract)); - vecDst = vqshlq_r(vecDst, shift + 1); - vstrbq_p(pDst, vecDst, p0); - } - -} - -#else -void arm_scale_q7( - const q7_t * pSrc, - q7_t scaleFract, - int8_t shift, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - int8_t kShift = 7 - shift; /* Shift to apply after scaling */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q7_t in1, in2, in3, in4; /* Temporary input variables */ - q7_t out1, out2, out3, out4; /* Temporary output variables */ -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * scale */ - -#if defined (ARM_MATH_DSP) - /* Reading 4 inputs from memory */ - in1 = *pSrc++; - in2 = *pSrc++; - in3 = *pSrc++; - in4 = *pSrc++; - - /* Scale inputs and store result in the temporary variable. */ - 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)); - - /* Pack and store result in destination buffer (in single write) */ - write_q7x4_ia (&pDst, __PACKq7(out1, out2, out3, out4)); -#else - *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); - *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); - *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); - *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A * scale */ - - /* Scale input and store result in destination buffer. */ - *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicScale group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q15.c deleted file mode 100644 index 0de2eb4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q15.c +++ /dev/null @@ -1,251 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_shift_q15.c - * Description: Shifts the elements of a Q15 vector by a specified number of bits - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicShift - @{ - */ - -/** - @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 each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_shift_q15( - const q15_t * pSrc, - int8_t shiftBits, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - q15x8_t vecDst; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* - * C = A (>> or <<) shiftBits - * Shift the input and then store the result in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vecDst = vqshlq_r(vecSrc, shiftBits); - vst1q(pDst, vecDst); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 8; - pDst += 8; - } - /* - * tail - */ - blkCnt = blockSize & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecSrc = vld1q(pSrc); - vecDst = vqshlq_r(vecSrc, shiftBits); - vstrhq_p(pDst, vecDst, p0); - } -} - -#else -void arm_shift_q15( - const q15_t * pSrc, - int8_t shiftBits, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - uint8_t sign = (shiftBits & 0x80); /* Sign of shiftBits */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q15_t in1, in2; /* Temporary input variables */ -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - /* If the shift value is positive then do right shift else left shift */ - if (sign == 0U) - { - while (blkCnt > 0U) - { - /* C = A << shiftBits */ - -#if defined (ARM_MATH_DSP) - /* read 2 samples from source */ - in1 = *pSrc++; - in2 = *pSrc++; - - /* Shift the inputs and then store the results in the destination buffer. */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pDst, __PKHBT(__SSAT((in1 << shiftBits), 16), - __SSAT((in2 << shiftBits), 16), 16)); -#else - write_q15x2_ia (&pDst, __PKHBT(__SSAT((in2 << shiftBits), 16), - __SSAT((in1 << shiftBits), 16), 16)); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - - /* read 2 samples from source */ - in1 = *pSrc++; - in2 = *pSrc++; - -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pDst, __PKHBT(__SSAT((in1 << shiftBits), 16), - __SSAT((in2 << shiftBits), 16), 16)); -#else - write_q15x2_ia (&pDst, __PKHBT(__SSAT((in2 << shiftBits), 16), - __SSAT((in1 << shiftBits), 16), 16)); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - -#else - *pDst++ = __SSAT(((q31_t) *pSrc++ << shiftBits), 16); - *pDst++ = __SSAT(((q31_t) *pSrc++ << shiftBits), 16); - *pDst++ = __SSAT(((q31_t) *pSrc++ << shiftBits), 16); - *pDst++ = __SSAT(((q31_t) *pSrc++ << shiftBits), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - } - else - { - while (blkCnt > 0U) - { - /* C = A >> shiftBits */ - -#if defined (ARM_MATH_DSP) - /* read 2 samples from source */ - in1 = *pSrc++; - in2 = *pSrc++; - - /* Shift the inputs and then store the results in the destination buffer. */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pDst, __PKHBT((in1 >> -shiftBits), - (in2 >> -shiftBits), 16)); -#else - write_q15x2_ia (&pDst, __PKHBT((in2 >> -shiftBits), - (in1 >> -shiftBits), 16)); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - - /* read 2 samples from source */ - in1 = *pSrc++; - in2 = *pSrc++; - -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pDst, __PKHBT((in1 >> -shiftBits), - (in2 >> -shiftBits), 16)); -#else - write_q15x2_ia (&pDst, __PKHBT((in2 >> -shiftBits), - (in1 >> -shiftBits), 16)); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - -#else - *pDst++ = (*pSrc++ >> -shiftBits); - *pDst++ = (*pSrc++ >> -shiftBits); - *pDst++ = (*pSrc++ >> -shiftBits); - *pDst++ = (*pSrc++ >> -shiftBits); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* If the shift value is positive then do right shift else left shift */ - if (sign == 0U) - { - while (blkCnt > 0U) - { - /* C = A << shiftBits */ - - /* Shift input and store result in destination buffer. */ - *pDst++ = __SSAT(((q31_t) *pSrc++ << shiftBits), 16); - - /* Decrement loop counter */ - blkCnt--; - } - } - else - { - while (blkCnt > 0U) - { - /* C = A >> shiftBits */ - - /* Shift input and store result in destination buffer. */ - *pDst++ = (*pSrc++ >> -shiftBits); - - /* Decrement loop counter */ - blkCnt--; - } - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicShift group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q31.c deleted file mode 100644 index c8cd660..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q31.c +++ /dev/null @@ -1,232 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_shift_q31.c - * Description: Shifts the elements of a Q31 vector by a specified number of bits - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ -/** - @defgroup BasicShift 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 BasicShift - @{ - */ - -/** - @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 - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_shift_q31( - const q31_t * pSrc, - int8_t shiftBits, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecSrc; - q31x4_t vecDst; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* - * C = A (>> or <<) shiftBits - * Shift the input and then store the result in the destination buffer. - */ - vecSrc = vld1q((q31_t const *) pSrc); - vecDst = vqshlq_r(vecSrc, shiftBits); - vst1q(pDst, vecDst); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 4; - pDst += 4; - } - /* - * tail - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecSrc = vld1q((q31_t const *) pSrc); - vecDst = vqshlq_r(vecSrc, shiftBits); - vstrwq_p(pDst, vecDst, p0); - } -} - - -#else -void arm_shift_q31( - const 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 */ - -#if defined (ARM_MATH_LOOPUNROLL) - - q31_t in, out; /* Temporary variables */ - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - /* If the shift value is positive then do right shift else left shift */ - if (sign == 0U) - { - while (blkCnt > 0U) - { - /* C = A << shiftBits */ - - /* Shift input and store result in destination buffer. */ - in = *pSrc++; - out = in << shiftBits; - if (in != (out >> shiftBits)) - out = 0x7FFFFFFF ^ (in >> 31); - *pDst++ = out; - - in = *pSrc++; - out = in << shiftBits; - if (in != (out >> shiftBits)) - out = 0x7FFFFFFF ^ (in >> 31); - *pDst++ = out; - - in = *pSrc++; - out = in << shiftBits; - if (in != (out >> shiftBits)) - out = 0x7FFFFFFF ^ (in >> 31); - *pDst++ = out; - - in = *pSrc++; - out = in << shiftBits; - if (in != (out >> shiftBits)) - out = 0x7FFFFFFF ^ (in >> 31); - *pDst++ = out; - - /* Decrement loop counter */ - blkCnt--; - } - } - else - { - while (blkCnt > 0U) - { - /* C = A >> shiftBits */ - - /* Shift input and store results in destination buffer. */ - *pDst++ = (*pSrc++ >> -shiftBits); - *pDst++ = (*pSrc++ >> -shiftBits); - *pDst++ = (*pSrc++ >> -shiftBits); - *pDst++ = (*pSrc++ >> -shiftBits); - - /* Decrement loop counter */ - blkCnt--; - } - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* If the shift value is positive then do right shift else left shift */ - if (sign == 0U) - { - while (blkCnt > 0U) - { - /* C = A << shiftBits */ - - /* Shift input and store result in destination buffer. */ - *pDst++ = clip_q63_to_q31((q63_t) *pSrc++ << shiftBits); - - /* Decrement loop counter */ - blkCnt--; - } - } - else - { - while (blkCnt > 0U) - { - /* C = A >> shiftBits */ - - /* Shift input and store result in destination buffer. */ - *pDst++ = (*pSrc++ >> -shiftBits); - - /* Decrement loop counter */ - blkCnt--; - } - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicShift group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q7.c deleted file mode 100644 index ecfe198..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_shift_q7.c +++ /dev/null @@ -1,225 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_shift_q7.c - * Description: Processing function for the Q7 Shifting - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup BasicShift - @{ - */ - -/** - @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 each vector - @return none - - @par onditions for optimum performance - Input and output buffers should be aligned by 32-bit - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q7 range [0x80 0x7F] are saturated. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_shift_q7( - const q7_t * pSrc, - int8_t shiftBits, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecSrc; - q7x16_t vecDst; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - /* - * C = A (>> or <<) shiftBits - * Shift the input and then store the result in the destination buffer. - */ - vecSrc = vld1q(pSrc); - vecDst = vqshlq_r(vecSrc, shiftBits); - vst1q(pDst, vecDst); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrc += 16; - pDst += 16; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecSrc = vld1q(pSrc); - vecDst = vqshlq_r(vecSrc, shiftBits); - vstrbq_p(pDst, vecDst, p0); - } -} - -#else -void arm_shift_q7( - const q7_t * pSrc, - int8_t shiftBits, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - uint8_t sign = (shiftBits & 0x80); /* Sign of shiftBits */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q7_t in1, in2, in3, in4; /* Temporary input variables */ -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - /* If the shift value is positive then do right shift else left shift */ - if (sign == 0U) - { - while (blkCnt > 0U) - { - /* C = A << shiftBits */ - -#if defined (ARM_MATH_DSP) - /* Read 4 inputs */ - in1 = *pSrc++; - in2 = *pSrc++; - in3 = *pSrc++; - in4 = *pSrc++; - - /* Pack and store result in destination buffer (in single write) */ - write_q7x4_ia (&pDst, __PACKq7(__SSAT((in1 << shiftBits), 8), - __SSAT((in2 << shiftBits), 8), - __SSAT((in3 << shiftBits), 8), - __SSAT((in4 << shiftBits), 8) )); -#else - *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); - *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); - *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); - *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - } - else - { - while (blkCnt > 0U) - { - /* C = A >> shiftBits */ - -#if defined (ARM_MATH_DSP) - /* Read 4 inputs */ - in1 = *pSrc++; - in2 = *pSrc++; - in3 = *pSrc++; - in4 = *pSrc++; - - /* Pack and store result in destination buffer (in single write) */ - write_q7x4_ia (&pDst, __PACKq7((in1 >> -shiftBits), - (in2 >> -shiftBits), - (in3 >> -shiftBits), - (in4 >> -shiftBits) )); -#else - *pDst++ = (*pSrc++ >> -shiftBits); - *pDst++ = (*pSrc++ >> -shiftBits); - *pDst++ = (*pSrc++ >> -shiftBits); - *pDst++ = (*pSrc++ >> -shiftBits); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* If the shift value is positive then do right shift else left shift */ - if (sign == 0U) - { - while (blkCnt > 0U) - { - /* C = A << shiftBits */ - - /* Shift input and store result in destination buffer. */ - *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); - - /* Decrement loop counter */ - blkCnt--; - } - } - else - { - while (blkCnt > 0U) - { - /* C = A >> shiftBits */ - - /* Shift input and store result in destination buffer. */ - *pDst++ = (*pSrc++ >> -shiftBits); - - /* Decrement loop counter */ - blkCnt--; - } - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicShift group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_f32.c deleted file mode 100644 index 34dbedc..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_f32.c +++ /dev/null @@ -1,202 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sub_f32.c - * Description: Floating-point vector subtraction - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_sub_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - - f32x4_t vec1; - f32x4_t vec2; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A + B */ - - /* Add and then store the results in the destination buffer. */ - vec1 = vld1q(pSrcA); - vec2 = vld1q(pSrcB); - res = vsubq(vec1, vec2); - vst1q(pDst, res); - - /* Increment pointers */ - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - - if (blkCnt > 0U) - { - /* C = A + B */ - mve_pred16_t p0 = vctp32q(blkCnt); - vec1 = vld1q(pSrcA); - vec2 = vld1q(pSrcB); - vstrwq_p(pDst, vsubq(vec1,vec2), p0); - } - -} - -#else -void arm_sub_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t vec1; - f32x4_t vec2; - f32x4_t res; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A - B */ - - /* Subtract and then store the results in the destination buffer. */ - vec1 = vld1q_f32(pSrcA); - vec2 = vld1q_f32(pSrcB); - res = vsubq_f32(vec1, vec2); - vst1q_f32(pDst, res); - - /* Increment pointers */ - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A - B */ - - /* Subtract and store result in destination buffer. */ - *pDst++ = (*pSrcA++) - (*pSrcB++); - - *pDst++ = (*pSrcA++) - (*pSrcB++); - - *pDst++ = (*pSrcA++) - (*pSrcB++); - - *pDst++ = (*pSrcA++) - (*pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* C = A - B */ - - /* Subtract and store result in destination buffer. */ - *pDst++ = (*pSrcA++) - (*pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BasicSub group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q15.c deleted file mode 100644 index b4b267b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q15.c +++ /dev/null @@ -1,178 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sub_q15.c - * Description: Q15 vector subtraction - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_sub_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecA; - q15x8_t vecB; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* - * C = A - B - * Subtract and then store the results in the destination buffer. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vst1q(pDst, vqsubq(vecA, vecB)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 8; - pSrcB += 8; - pDst += 8; - } - /* - * tail - */ - blkCnt = blockSize & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vstrhq_p(pDst, vqsubq(vecA, vecB), p0); - } -} - - -#else -void arm_sub_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - q31_t inA1, inA2; - q31_t inB1, inB2; -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A - B */ - -#if defined (ARM_MATH_DSP) - /* read 2 times 2 samples at a time from sourceA */ - inA1 = read_q15x2_ia ((q15_t **) &pSrcA); - inA2 = read_q15x2_ia ((q15_t **) &pSrcA); - /* read 2 times 2 samples at a time from sourceB */ - inB1 = read_q15x2_ia ((q15_t **) &pSrcB); - inB2 = read_q15x2_ia ((q15_t **) &pSrcB); - - /* Subtract and store 2 times 2 samples at a time */ - write_q15x2_ia (&pDst, __QSUB16(inA1, inB1)); - write_q15x2_ia (&pDst, __QSUB16(inA2, inB2)); -#else - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A - B */ - - /* Subtract and store result in destination buffer. */ -#if defined (ARM_MATH_DSP) - *pDst++ = (q15_t) __QSUB16(*pSrcA++, *pSrcB++); -#else - *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicSub group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q31.c deleted file mode 100644 index 4647d10..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q31.c +++ /dev/null @@ -1,159 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sub_q31.c - * Description: Q31 vector subtraction - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_sub_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - q31x4_t vecA; - q31x4_t vecB; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* - * C = A + B - * Add and then store the results in the destination buffer. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vst1q(pDst, vqsubq(vecA, vecB)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 4; - pSrcB += 4; - pDst += 4; - } - /* - * tail - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vstrwq_p(pDst, vqsubq(vecA, vecB), p0); - } -} - -#else -void arm_sub_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A - B */ - - /* Subtract and store result in destination buffer. */ - *pDst++ = __QSUB(*pSrcA++, *pSrcB++); - - *pDst++ = __QSUB(*pSrcA++, *pSrcB++); - - *pDst++ = __QSUB(*pSrcA++, *pSrcB++); - - *pDst++ = __QSUB(*pSrcA++, *pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A - B */ - - /* Subtract and store result in destination buffer. */ - *pDst++ = __QSUB(*pSrcA++, *pSrcB++); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicSub group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q7.c deleted file mode 100644 index e34e74e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_sub_q7.c +++ /dev/null @@ -1,158 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sub_q7.c - * Description: Q7 vector subtraction - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q7 range [0x80 0x7F] will be saturated. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_sub_q7( - const q7_t * pSrcA, - const q7_t * pSrcB, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecA; - q7x16_t vecB; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - /* - * C = A - B - * Subtract and then store the results in the destination buffer. - */ - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vst1q(pDst, vqsubq(vecA, vecB)); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - /* - * advance vector source and destination pointers - */ - pSrcA += 16; - pSrcB += 16; - pDst += 16; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - vstrbq_p(pDst, vqsubq(vecA, vecB), p0); - } -} -#else -void arm_sub_q7( - const q7_t * pSrcA, - const q7_t * pSrcB, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A - B */ - -#if defined (ARM_MATH_DSP) - /* Subtract and store result in destination buffer (4 samples at a time). */ - write_q7x4_ia (&pDst, __QSUB8(read_q7x4_ia ((q7_t **) &pSrcA), read_q7x4_ia ((q7_t **) &pSrcB))); -#else - *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); - *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); - *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); - *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A - B */ - - /* Subtract and store result in destination buffer. */ - *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicSub group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u16.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u16.c deleted file mode 100644 index 0296037..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u16.c +++ /dev/null @@ -1,137 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_xor_u16.c - * Description: uint16_t bitwise exclusive OR - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @defgroup Xor Vector bitwise exclusive OR - - Compute the logical bitwise XOR. - - There are separate functions for uint32_t, uint16_t, and uint8_t data types. - */ - -/** - @addtogroup Xor - @{ - */ - -/** - @brief Compute the logical bitwise XOR of two fixed-point vectors. - @param[in] pSrcA points to input vector A - @param[in] pSrcB points to input vector B - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_xor_u16( - const uint16_t * pSrcA, - const uint16_t * pSrcB, - uint16_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q15x8_t vecSrcA, vecSrcB; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vst1q(pDst, veorq_u16(vecSrcA, vecSrcB) ); - - pSrcA += 8; - pSrcB += 8; - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 7; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - vstrhq_p(pDst, veorq_u16(vecSrcA, vecSrcB), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint16x8_t vecA, vecB; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3U; - - while (blkCnt > 0U) - { - vecA = vld1q_u16(pSrcA); - vecB = vld1q_u16(pSrcB); - - vst1q_u16(pDst, veorq_u16(vecA, vecB) ); - - pSrcA += 8; - pSrcB += 8; - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 7; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = (*pSrcA++)^(*pSrcB++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of Xor group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u32.c deleted file mode 100644 index 526a1a0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u32.c +++ /dev/null @@ -1,129 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_xor_u32.c - * Description: uint32_t bitwise exclusive OR - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup Xor - @{ - */ - -/** - @brief Compute the logical bitwise XOR of two fixed-point vectors. - @param[in] pSrcA points to input vector A - @param[in] pSrcB points to input vector B - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_xor_u32( - const uint32_t * pSrcA, - const uint32_t * pSrcB, - uint32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q31x4_t vecSrcA, vecSrcB; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vst1q(pDst, veorq_u32(vecSrcA, vecSrcB) ); - - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - vstrwq_p(pDst, veorq_u32(vecSrcA, vecSrcB), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint32x4_t vecA, vecB; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - vecA = vld1q_u32(pSrcA); - vecB = vld1q_u32(pSrcB); - - vst1q_u32(pDst, veorq_u32(vecA, vecB) ); - - pSrcA += 4; - pSrcB += 4; - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = (*pSrcA++)^(*pSrcB++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of Xor group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u8.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u8.c deleted file mode 100644 index 769e27c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BasicMathFunctions/arm_xor_u8.c +++ /dev/null @@ -1,129 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_xor_u8.c - * Description: uint8_t bitwise exclusive OR - * - * $Date: 14 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMath - */ - -/** - @addtogroup Xor - @{ - */ - -/** - @brief Compute the logical bitwise XOR of two fixed-point vectors. - @param[in] pSrcA points to input vector A - @param[in] pSrcB points to input vector B - @param[out] pDst points to output vector - @param[in] blockSize number of samples in each vector - @return none - */ - -void arm_xor_u8( - const uint8_t * pSrcA, - const uint8_t * pSrcB, - uint8_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - q7x16_t vecSrcA, vecSrcB; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vst1q(pDst, veorq_u8(vecSrcA, vecSrcB) ); - - pSrcA += 16; - pSrcB += 16; - pDst += 16; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0xF; - - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - vstrbq_p(pDst, veorq_u8(vecSrcA, vecSrcB), p0); - } -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - uint8x16_t vecA, vecB; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4U; - - while (blkCnt > 0U) - { - vecA = vld1q_u8(pSrcA); - vecB = vld1q_u8(pSrcB); - - vst1q_u8(pDst, veorq_u8(vecA, vecB) ); - - pSrcA += 16; - pSrcB += 16; - pDst += 16; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0xF; -#else - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; -#endif - - while (blkCnt > 0U) - { - *pDst++ = (*pSrcA++)^(*pSrcB++); - - /* Decrement the loop counter */ - blkCnt--; - } -#endif /* if defined(ARM_MATH_MVEI) */ -} - -/** - @} end of Xor group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/BayesFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/BayesFunctions.c deleted file mode 100644 index 4a553dc..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/BayesFunctions.c +++ /dev/null @@ -1,29 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: BayesFunctions.c - * Description: Combination of all bayes function source files. - * - * $Date: 16. March 2020 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_gaussian_naive_bayes_predict_f32.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/CMakeLists.txt deleted file mode 100644 index 5f5ee4a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPBayes) - -include(configLib) -include(configDsp) - -file(GLOB SRC "./*_*.c") - -add_library(CMSISDSPBayes STATIC ${SRC}) - -configLib(CMSISDSPBayes ${ROOT}) -configDsp(CMSISDSPBayes ${ROOT}) - -### Includes -target_include_directories(CMSISDSPBayes PUBLIC "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/arm_gaussian_naive_bayes_predict_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/arm_gaussian_naive_bayes_predict_f32.c deleted file mode 100644 index 5a5cecb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/BayesFunctions/arm_gaussian_naive_bayes_predict_f32.c +++ /dev/null @@ -1,397 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_naive_gaussian_bayes_predict_f32 - * Description: Naive Gaussian Bayesian Estimator - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - -#define PI_F 3.1415926535897932384626433832795f -#define DPI_F (2.0f*3.1415926535897932384626433832795f) - -/** - * @addtogroup groupBayes - * @{ - */ - -/** - * @brief Naive Gaussian Bayesian Estimator - * - * @param[in] *S points to a naive bayes instance structure - * @param[in] *in points to the elements of the input vector. - * @param[in] *pBuffer points to a buffer of length numberOfClasses - * @return The predicted class - * - * @par If the number of classes is big, MVE version will consume lot of - * stack since the log prior are computed on the stack. - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -uint32_t arm_gaussian_naive_bayes_predict_f32(const arm_gaussian_naive_bayes_instance_f32 *S, - const float32_t * in, - float32_t *pBuffer) -{ - uint32_t nbClass; - const float32_t *pTheta = S->theta; - const float32_t *pSigma = S->sigma; - float32_t *buffer = pBuffer; - const float32_t *pIn = in; - float32_t result; - f32x4_t vsigma; - float32_t tmp; - f32x4_t vacc1, vacc2; - uint32_t index; - float32_t logclassPriors[S->numberOfClasses]; - float32_t *pLogPrior = logclassPriors; - - arm_vlog_f32((float32_t *) S->classPriors, logclassPriors, S->numberOfClasses); - - pTheta = S->theta; - pSigma = S->sigma; - - for (nbClass = 0; nbClass < S->numberOfClasses; nbClass++) { - pIn = in; - - vacc1 = vdupq_n_f32(0); - vacc2 = vdupq_n_f32(0); - - uint32_t blkCnt =S->vectorDimension >> 2; - while (blkCnt > 0U) { - f32x4_t vinvSigma, vtmp; - - vsigma = vaddq_n_f32(vld1q(pSigma), S->epsilon); - vacc1 = vaddq(vacc1, vlogq_f32(vmulq_n_f32(vsigma, 2.0f * PI))); - - vinvSigma = vrecip_medprec_f32(vsigma); - - vtmp = vsubq(vld1q(pIn), vld1q(pTheta)); - /* squaring */ - vtmp = vmulq(vtmp, vtmp); - - vacc2 = vfmaq(vacc2, vtmp, vinvSigma); - - pIn += 4; - pTheta += 4; - pSigma += 4; - blkCnt--; - } - - blkCnt = S->vectorDimension & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vinvSigma, vtmp; - - vsigma = vaddq_n_f32(vld1q(pSigma), S->epsilon); - vacc1 = - vaddq_m_f32(vacc1, vacc1, vlogq_f32(vmulq_n_f32(vsigma, 2.0f * PI)), p0); - - vinvSigma = vrecip_medprec_f32(vsigma); - - vtmp = vsubq(vld1q(pIn), vld1q(pTheta)); - /* squaring */ - vtmp = vmulq(vtmp, vtmp); - - vacc2 = vfmaq_m_f32(vacc2, vtmp, vinvSigma, p0); - - pTheta += blkCnt; - pSigma += blkCnt; - } - - tmp = -0.5f * vecAddAcrossF32Mve(vacc1); - tmp -= 0.5f * vecAddAcrossF32Mve(vacc2); - - *buffer = tmp + *pLogPrior++; - buffer++; - } - - arm_max_f32(pBuffer, S->numberOfClasses, &result, &index); - - return (index); -} - -#else - -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - - - -uint32_t arm_gaussian_naive_bayes_predict_f32(const arm_gaussian_naive_bayes_instance_f32 *S, - const float32_t * in, - float32_t *pBuffer) -{ - - const float32_t *pPrior = S->classPriors; - - const float32_t *pTheta = S->theta; - const float32_t *pSigma = S->sigma; - - const float32_t *pTheta1 = S->theta + S->vectorDimension; - const float32_t *pSigma1 = S->sigma + S->vectorDimension; - - float32_t *buffer = pBuffer; - const float32_t *pIn=in; - - float32_t result; - float32_t sigma,sigma1; - float32_t tmp,tmp1; - uint32_t index; - uint32_t vecBlkCnt; - uint32_t classBlkCnt; - float32x4_t epsilonV; - float32x4_t sigmaV,sigmaV1; - float32x4_t tmpV,tmpVb,tmpV1; - float32x2_t tmpV2; - float32x4_t thetaV,thetaV1; - float32x4_t inV; - - epsilonV = vdupq_n_f32(S->epsilon); - - classBlkCnt = S->numberOfClasses >> 1; - while(classBlkCnt > 0) - { - - - pIn = in; - - tmp = logf(*pPrior++); - tmp1 = logf(*pPrior++); - tmpV = vdupq_n_f32(0.0f); - tmpV1 = vdupq_n_f32(0.0f); - - vecBlkCnt = S->vectorDimension >> 2; - while(vecBlkCnt > 0) - { - sigmaV = vld1q_f32(pSigma); - thetaV = vld1q_f32(pTheta); - - sigmaV1 = vld1q_f32(pSigma1); - thetaV1 = vld1q_f32(pTheta1); - - inV = vld1q_f32(pIn); - - sigmaV = vaddq_f32(sigmaV, epsilonV); - sigmaV1 = vaddq_f32(sigmaV1, epsilonV); - - tmpVb = vmulq_n_f32(sigmaV,DPI_F); - tmpVb = vlogq_f32(tmpVb); - tmpV = vmlsq_n_f32(tmpV,tmpVb,0.5f); - - tmpVb = vmulq_n_f32(sigmaV1,DPI_F); - tmpVb = vlogq_f32(tmpVb); - tmpV1 = vmlsq_n_f32(tmpV1,tmpVb,0.5f); - - tmpVb = vsubq_f32(inV,thetaV); - tmpVb = vmulq_f32(tmpVb,tmpVb); - tmpVb = vmulq_f32(tmpVb, vinvq_f32(sigmaV)); - tmpV = vmlsq_n_f32(tmpV,tmpVb,0.5f); - - tmpVb = vsubq_f32(inV,thetaV1); - tmpVb = vmulq_f32(tmpVb,tmpVb); - tmpVb = vmulq_f32(tmpVb, vinvq_f32(sigmaV1)); - tmpV1 = vmlsq_n_f32(tmpV1,tmpVb,0.5f); - - pIn += 4; - pTheta += 4; - pSigma += 4; - pTheta1 += 4; - pSigma1 += 4; - - vecBlkCnt--; - } - tmpV2 = vpadd_f32(vget_low_f32(tmpV),vget_high_f32(tmpV)); - tmp += vget_lane_f32(tmpV2, 0) + vget_lane_f32(tmpV2, 1); - - tmpV2 = vpadd_f32(vget_low_f32(tmpV1),vget_high_f32(tmpV1)); - tmp1 += vget_lane_f32(tmpV2, 0) + vget_lane_f32(tmpV2, 1); - - vecBlkCnt = S->vectorDimension & 3; - while(vecBlkCnt > 0) - { - sigma = *pSigma + S->epsilon; - sigma1 = *pSigma1 + S->epsilon; - - tmp -= 0.5f*logf(2.0f * PI_F * sigma); - tmp -= 0.5f*(*pIn - *pTheta) * (*pIn - *pTheta) / sigma; - - tmp1 -= 0.5f*logf(2.0f * PI_F * sigma1); - tmp1 -= 0.5f*(*pIn - *pTheta1) * (*pIn - *pTheta1) / sigma1; - - pIn++; - pTheta++; - pSigma++; - pTheta1++; - pSigma1++; - vecBlkCnt--; - } - - *buffer++ = tmp; - *buffer++ = tmp1; - - pSigma += S->vectorDimension; - pTheta += S->vectorDimension; - pSigma1 += S->vectorDimension; - pTheta1 += S->vectorDimension; - - classBlkCnt--; - } - - classBlkCnt = S->numberOfClasses & 1; - - while(classBlkCnt > 0) - { - - - pIn = in; - - tmp = logf(*pPrior++); - tmpV = vdupq_n_f32(0.0f); - - vecBlkCnt = S->vectorDimension >> 2; - while(vecBlkCnt > 0) - { - sigmaV = vld1q_f32(pSigma); - thetaV = vld1q_f32(pTheta); - inV = vld1q_f32(pIn); - - sigmaV = vaddq_f32(sigmaV, epsilonV); - - tmpVb = vmulq_n_f32(sigmaV,DPI_F); - tmpVb = vlogq_f32(tmpVb); - tmpV = vmlsq_n_f32(tmpV,tmpVb,0.5f); - - tmpVb = vsubq_f32(inV,thetaV); - tmpVb = vmulq_f32(tmpVb,tmpVb); - tmpVb = vmulq_f32(tmpVb, vinvq_f32(sigmaV)); - tmpV = vmlsq_n_f32(tmpV,tmpVb,0.5f); - - pIn += 4; - pTheta += 4; - pSigma += 4; - - vecBlkCnt--; - } - tmpV2 = vpadd_f32(vget_low_f32(tmpV),vget_high_f32(tmpV)); - tmp += vget_lane_f32(tmpV2, 0) + vget_lane_f32(tmpV2, 1); - - vecBlkCnt = S->vectorDimension & 3; - while(vecBlkCnt > 0) - { - sigma = *pSigma + S->epsilon; - tmp -= 0.5f*logf(2.0f * PI_F * sigma); - tmp -= 0.5f*(*pIn - *pTheta) * (*pIn - *pTheta) / sigma; - - pIn++; - pTheta++; - pSigma++; - vecBlkCnt--; - } - - *buffer++ = tmp; - - classBlkCnt--; - } - - arm_max_f32(pBuffer,S->numberOfClasses,&result,&index); - - return(index); -} - -#else - -/** - * @brief Naive Gaussian Bayesian Estimator - * - * @param[in] *S points to a naive bayes instance structure - * @param[in] *in points to the elements of the input vector. - * @param[in] *pBuffer points to a buffer of length numberOfClasses - * @return The predicted class - * - */ -uint32_t arm_gaussian_naive_bayes_predict_f32(const arm_gaussian_naive_bayes_instance_f32 *S, - const float32_t * in, - float32_t *pBuffer) -{ - uint32_t nbClass; - uint32_t nbDim; - const float32_t *pPrior = S->classPriors; - const float32_t *pTheta = S->theta; - const float32_t *pSigma = S->sigma; - float32_t *buffer = pBuffer; - const float32_t *pIn=in; - float32_t result; - float32_t sigma; - float32_t tmp; - float32_t acc1,acc2; - uint32_t index; - - pTheta=S->theta; - pSigma=S->sigma; - - for(nbClass = 0; nbClass < S->numberOfClasses; nbClass++) - { - - - pIn = in; - - tmp = 0.0; - acc1 = 0.0f; - acc2 = 0.0f; - for(nbDim = 0; nbDim < S->vectorDimension; nbDim++) - { - sigma = *pSigma + S->epsilon; - acc1 += logf(2.0f * PI_F * sigma); - acc2 += (*pIn - *pTheta) * (*pIn - *pTheta) / sigma; - - pIn++; - pTheta++; - pSigma++; - } - - tmp = -0.5f * acc1; - tmp -= 0.5f * acc2; - - - *buffer = tmp + logf(*pPrior++); - buffer++; - } - - arm_max_f32(pBuffer,S->numberOfClasses,&result,&index); - - return(index); -} - -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of groupBayes group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CMakeLists.txt deleted file mode 100644 index 5f70a45..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CMakeLists.txt +++ /dev/null @@ -1,280 +0,0 @@ -cmake_minimum_required (VERSION 3.6) -cmake_policy(SET CMP0077 NEW) -project(CMSISDSP) - -# DSP Sources -SET(DSP ${ROOT}/CMSIS/DSP) - -list(APPEND CMAKE_MODULE_PATH ${DSP}/Source) -list(APPEND CMAKE_MODULE_PATH ${DSP}) - - -include(configLib) - - -option(NEON "Neon acceleration" OFF) -option(NEONEXPERIMENTAL "Neon experimental acceleration" OFF) -option(LOOPUNROLL "Loop unrolling" ON) -option(ROUNDING "Rounding" OFF) -option(MATRIXCHECK "Matrix Checks" OFF) -option(HELIUM "Helium acceleration (MVEF and MVEI supported)" OFF) -option(MVEF "MVEF intrinsics supported" OFF) -option(MVEI "MVEI intrinsics supported" OFF) - -# Select which parts of the CMSIS-DSP must be compiled. -# There are some dependencies between the parts but they are not tracked -# by this cmake. So, enabling some functions may require to enable some -# other ones. -option(BASICMATH "Basic Math Functions" ON) -option(COMPLEXMATH "Complex Math Functions" ON) -option(CONTROLLER "Controller Functions" ON) -option(FASTMATH "Fast Math Functions" ON) -option(FILTERING "Filtering Functions" ON) -option(MATRIX "Matrix Functions" ON) -option(STATISTICS "Statistics Functions" ON) -option(SUPPORT "Support Functions" ON) -option(TRANSFORM "Transform Functions" ON) -option(SVM "Support Vector Machine Functions" ON) -option(BAYES "Bayesian Estimators" ON) -option(DISTANCE "Distance Functions" ON) - -# When OFF it is the default behavior : all tables are included. -option(CONFIGTABLE "Configuration of table allowed" OFF) - -# When CONFIGTABLE is ON, select if all interpolation tables must be included -option(ALLFAST "All interpolation tables included" OFF) -# When CONFIGTABLE is ON, select if all FFT tables must be included -option(ALLFFT "All fft tables included" OFF) - -# Features which require inclusion of a data table. -# Since some tables may be big, the corresponding feature can be -# disabled. -# Those options are taken into account only when CONFIGTABLE is ON -option(ARM_COS_F32 "cos f32" OFF) -option(ARM_COS_Q31 "cos q31" OFF) -option(ARM_COS_Q15 "cos q15" OFF) -option(ARM_SIN_F32 "sin f32" OFF) -option(ARM_SIN_Q31 "sin q31" OFF) -option(ARM_SIN_Q15 "sin q15" OFF) -option(ARM_SIN_COS_F32 "sin cos f32" OFF) -option(ARM_SIN_COS_Q31 "sin cos q31" OFF) - -option(ARM_LMS_NORM_Q31 "lms norm q31" OFF) -option(ARM_LMS_NORM_Q15 "lms norm q15" OFF) - -option(CFFT_F64_16 "cfft f64 16" OFF) -option(CFFT_F64_32 "cfft f64 32" OFF) -option(CFFT_F64_64 "cfft f64 64" OFF) -option(CFFT_F64_128 "cfft f64 128" OFF) -option(CFFT_F64_256 "cfft f64 256" OFF) -option(CFFT_F64_512 "cfft f64 512" OFF) -option(CFFT_F64_1024 "cfft f64 1024" OFF) -option(CFFT_F64_2048 "cfft f64 2048" OFF) -option(CFFT_F64_4096 "cfft f64 4096" OFF) - -option(CFFT_F32_16 "cfft f32 16" OFF) -option(CFFT_F32_32 "cfft f32 32" OFF) -option(CFFT_F32_64 "cfft f32 64" OFF) -option(CFFT_F32_128 "cfft f32 128" OFF) -option(CFFT_F32_256 "cfft f32 256" OFF) -option(CFFT_F32_512 "cfft f32 512" OFF) -option(CFFT_F32_1024 "cfft f32 1024" OFF) -option(CFFT_F32_2048 "cfft f32 2048" OFF) -option(CFFT_F32_4096 "cfft f32 4096" OFF) - -option(CFFT_Q31_16 "cfft q31 16" OFF) -option(CFFT_Q31_32 "cfft q31 32" OFF) -option(CFFT_Q31_64 "cfft q31 64" OFF) -option(CFFT_Q31_128 "cfft q31 128" OFF) -option(CFFT_Q31_256 "cfft q31 256" OFF) -option(CFFT_Q31_512 "cfft q31 512" OFF) -option(CFFT_Q31_1024 "cfft q31 1024" OFF) -option(CFFT_Q31_2048 "cfft q31 2048" OFF) -option(CFFT_Q31_4096 "cfft q31 4096" OFF) - -option(CFFT_Q15_16 "cfft q15 16" OFF) -option(CFFT_Q15_32 "cfft q15 32" OFF) -option(CFFT_Q15_64 "cfft q15 64" OFF) -option(CFFT_Q15_128 "cfft q15 128" OFF) -option(CFFT_Q15_256 "cfft q15 256" OFF) -option(CFFT_Q15_512 "cfft q15 512" OFF) -option(CFFT_Q15_1024 "cfft q15 1024" OFF) -option(CFFT_Q15_2048 "cfft q15 2048" OFF) -option(CFFT_Q15_4096 "cfft q15 4096" OFF) - -option(RFFT_FAST_F32_32 "rfft fast f32 32" OFF) -option(RFFT_FAST_F32_64 "rfft fast f32 64" OFF) -option(RFFT_FAST_F32_128 "rfft fast f32 128" OFF) -option(RFFT_FAST_F32_256 "rfft fast f32 256" OFF) -option(RFFT_FAST_F32_512 "rfft fast f32 512" OFF) -option(RFFT_FAST_F32_1024 "rfft fast f32 1024" OFF) -option(RFFT_FAST_F32_2048 "rfft fast f32 2048" OFF) -option(RFFT_FAST_F32_4096 "rfft fast f32 4096" OFF) - - -option(RFFT_F32_128 "rfft f32 128" OFF) -option(RFFT_F32_512 "rfft f32 512" OFF) -option(RFFT_F32_2048 "rfft f32 2048" OFF) -option(RFFT_F32_8192 "rfft f32 8192" OFF) - -option(RFFT_FAST_F64_32 "rfft fast f64 32" OFF) -option(RFFT_FAST_F64_64 "rfft fast f64 64" OFF) -option(RFFT_FAST_F64_128 "rfft fast f64 128" OFF) -option(RFFT_FAST_F64_256 "rfft fast f64 256" OFF) -option(RFFT_FAST_F64_512 "rfft fast f64 512" OFF) -option(RFFT_FAST_F64_1024 "rfft fast f64 1024" OFF) -option(RFFT_FAST_F64_2048 "rfft fast f64 2048" OFF) -option(RFFT_FAST_F64_4096 "rfft fast f64 4096" OFF) - - -option(RFFT_F64_128 "rfft f64 128" OFF) -option(RFFT_F64_512 "rfft f64 512" OFF) -option(RFFT_F64_2048 "rfft f64 2048" OFF) -option(RFFT_F64_8192 "rfft f64 8192" OFF) - -option(RFFT_Q31_32 "rfft q31 32" OFF) -option(RFFT_Q31_64 "rfft q31 64" OFF) -option(RFFT_Q31_128 "rfft q31 128" OFF) -option(RFFT_Q31_256 "rfft q31 256" OFF) -option(RFFT_Q31_512 "rfft q31 512" OFF) -option(RFFT_Q31_1024 "rfft q31 1024" OFF) -option(RFFT_Q31_2048 "rfft q31 2048" OFF) -option(RFFT_Q31_4096 "rfft q31 4096" OFF) -option(RFFT_Q31_8192 "rfft q31 8192" OFF) - -option(RFFT_Q15_32 "rfft q15 32" OFF) -option(RFFT_Q15_64 "rfft q15 64" OFF) -option(RFFT_Q15_128 "rfft q15 128" OFF) -option(RFFT_Q15_256 "rfft q15 256" OFF) -option(RFFT_Q15_512 "rfft q15 512" OFF) -option(RFFT_Q15_1024 "rfft q15 1024" OFF) -option(RFFT_Q15_2048 "rfft q15 2048" OFF) -option(RFFT_Q15_4096 "rfft q15 4096" OFF) -option(RFFT_Q15_8192 "rfft q15 8192" OFF) - -option(DCT4_F32_128 "dct4 f32 128" OFF) -option(DCT4_F32_512 "dct4 f32 512" OFF) -option(DCT4_F32_2048 "dct4 f32 2048" OFF) -option(DCT4_F32_8192 "dct4 f32 8192" OFF) - -option(DCT4_Q31_128 "dct4 q31 128" OFF) -option(DCT4_Q31_512 "dct4 q31 512" OFF) -option(DCT4_Q31_2048 "dct4 q31 2048" OFF) -option(DCT4_Q31_8192 "dct4 q31 8192" OFF) - -option(DCT4_Q15_128 "dct4 q15 128" OFF) -option(DCT4_Q15_512 "dct4 q15 512" OFF) -option(DCT4_Q15_2048 "dct4 q15 2048" OFF) -option(DCT4_Q15_8192 "dct4 q15 8192" OFF) - - -########################### -# -# CMSIS DSP -# -########################### - - - -add_library(CMSISDSP INTERFACE) - -if (BASICMATH) - add_subdirectory(BasicMathFunctions) - target_link_libraries(CMSISDSP INTERFACE CMSISDSPBasicMath) -endif() - -if (COMPLEXMATH) - add_subdirectory(ComplexMathFunctions) - target_link_libraries(CMSISDSP INTERFACE CMSISDSPComplexMath) -endif() - -if (CONTROLLER) - add_subdirectory(ControllerFunctions) - # Fast tables inclusion is allowed - if (CONFIGTABLE) - target_compile_definitions(CMSISDSPController PUBLIC ARM_FAST_ALLOW_TABLES) - endif() - target_link_libraries(CMSISDSP INTERFACE CMSISDSPController) -endif() - -if (FASTMATH) - add_subdirectory(FastMathFunctions) - # Fast tables inclusion is allowed - if (CONFIGTABLE) - target_compile_definitions(CMSISDSPFastMath PUBLIC ARM_FAST_ALLOW_TABLES) - endif() - target_link_libraries(CMSISDSP INTERFACE CMSISDSPFastMath) -endif() - -if (FILTERING) - add_subdirectory(FilteringFunctions) - # Fast tables inclusion is allowed - if (CONFIGTABLE) - target_compile_definitions(CMSISDSPFiltering PUBLIC ARM_FAST_ALLOW_TABLES) - endif() - target_link_libraries(CMSISDSP INTERFACE CMSISDSPFiltering) -endif() - -if (MATRIX) - add_subdirectory(MatrixFunctions) - target_link_libraries(CMSISDSP INTERFACE CMSISDSPMatrix) -endif() - -if (STATISTICS) - add_subdirectory(StatisticsFunctions) - target_link_libraries(CMSISDSP INTERFACE CMSISDSPStatistics) -endif() - -if (SUPPORT) - add_subdirectory(SupportFunctions) - target_link_libraries(CMSISDSP INTERFACE CMSISDSPSupport) -endif() - -if (TRANSFORM) - add_subdirectory(TransformFunctions) - # FFT tables inclusion is allowed - if (CONFIGTABLE) - target_compile_definitions(CMSISDSPTransform PUBLIC ARM_FFT_ALLOW_TABLES) - endif() - target_link_libraries(CMSISDSP INTERFACE CMSISDSPTransform) -endif() - -if (FILTERING OR CONTROLLER OR FASTMATH OR TRANSFORM OR SVM OR DISTANCE) - add_subdirectory(CommonTables) - if (TRANSFORM) - # FFT tables inclusion is allowed - if (CONFIGTABLE) - target_compile_definitions(CMSISDSPCommon PUBLIC ARM_FFT_ALLOW_TABLES) - endif() - endif() - if (FILTERING OR CONTROLLER OR FASTMATH) - # Select which tables to include - if (CONFIGTABLE) - target_compile_definitions(CMSISDSPCommon PUBLIC ARM_FAST_ALLOW_TABLES) - endif() - endif() - target_link_libraries(CMSISDSP INTERFACE CMSISDSPCommon) - # Common project is adding ComputeLibrary tables used by SVM and Distance - # when NEon is ON. -endif() - -if (SVM) - add_subdirectory(SVMFunctions) - target_link_libraries(CMSISDSP INTERFACE CMSISDSPSVM) -endif() - -if (BAYES) - add_subdirectory(BayesFunctions) - target_link_libraries(CMSISDSP INTERFACE CMSISDSPBayes) -endif() - -if (DISTANCE) - add_subdirectory(DistanceFunctions) - target_link_libraries(CMSISDSP INTERFACE CMSISDSPDistance) -endif() - -### Includes -target_include_directories(CMSISDSP INTERFACE "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/CMakeLists.txt deleted file mode 100644 index e7dd65f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPCommon) - -include(configLib) -include(configDsp) - -add_library(CMSISDSPCommon STATIC arm_common_tables.c) - -configLib(CMSISDSPCommon ${ROOT}) -configDsp(CMSISDSPCommon ${ROOT}) - -if (CONFIGTABLE AND ALLFFT) - target_compile_definitions(CMSISDSPCommon PUBLIC ARM_ALL_FFT_TABLES) -endif() - -if (CONFIGTABLE AND ALLFAST) - target_compile_definitions(CMSISDSPCommon PUBLIC ARM_ALL_FAST_TABLES) -endif() - -include(fft) -fft(CMSISDSPCommon) - -include(interpol) -interpol(CMSISDSPCommon) - -target_sources(CMSISDSPCommon PRIVATE arm_const_structs.c) - - -### Includes -target_include_directories(CMSISDSPCommon PUBLIC "${DSP}/Include") - -if (NEON OR NEONEXPERIMENTAL) - target_sources(CMSISDSPCommon PRIVATE "${DSP}/ComputeLibrary/Source/arm_cl_tables.c") -endif() - -if (HELIUM OR MVEF) - target_sources(CMSISDSPCommon PRIVATE "${DSP}/Source/CommonTables/arm_mve_tables.c") -endif() - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/CommonTables.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/CommonTables.c deleted file mode 100644 index 1a387c3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/CommonTables.c +++ /dev/null @@ -1,31 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: CommonTables.c - * Description: Combination of all common table source files. - * - * $Date: 08. January 2020 - * $Revision: V1.1.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_common_tables.c" -#include "arm_const_structs.c" -#include "arm_mve_tables.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_common_tables.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_common_tables.c deleted file mode 100644 index 345cee3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_common_tables.c +++ /dev/null @@ -1,70552 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_common_tables.c - * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -/** - @ingroup ComplexFFT - */ - -/** - @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< logN2; i++)
    -    {
    -      a[i] = l & (1 << i);
    -    }
    -    for (j = 0; j < logN2; j++)
    -    {
    -      if (a[j] != 0)
    -      y[l] += (1 << ((logN2 - 1) - j));
    -    }
    -    y[l] = y[l] >> 1;
    -   } 
    - @par - where N = 4096, logN2 = 12 - @par - N is the maximum FFT Size supported -*/ - -/** - @brief Table for bit reversal process -*/ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREV_1024) -const uint16_t armBitRevTable[1024] = { - 0x400, 0x200, 0x600, 0x100, 0x500, 0x300, 0x700, 0x080, 0x480, 0x280, - 0x680, 0x180, 0x580, 0x380, 0x780, 0x040, 0x440, 0x240, 0x640, 0x140, - 0x540, 0x340, 0x740, 0x0c0, 0x4c0, 0x2c0, 0x6c0, 0x1c0, 0x5c0, 0x3c0, - 0x7c0, 0x020, 0x420, 0x220, 0x620, 0x120, 0x520, 0x320, 0x720, 0x0a0, - 0x4a0, 0x2a0, 0x6a0, 0x1a0, 0x5a0, 0x3a0, 0x7a0, 0x060, 0x460, 0x260, - 0x660, 0x160, 0x560, 0x360, 0x760, 0x0e0, 0x4e0, 0x2e0, 0x6e0, 0x1e0, - 0x5e0, 0x3e0, 0x7e0, 0x010, 0x410, 0x210, 0x610, 0x110, 0x510, 0x310, - 0x710, 0x090, 0x490, 0x290, 0x690, 0x190, 0x590, 0x390, 0x790, 0x050, - 0x450, 0x250, 0x650, 0x150, 0x550, 0x350, 0x750, 0x0d0, 0x4d0, 0x2d0, - 0x6d0, 0x1d0, 0x5d0, 0x3d0, 0x7d0, 0x030, 0x430, 0x230, 0x630, 0x130, - 0x530, 0x330, 0x730, 0x0b0, 0x4b0, 0x2b0, 0x6b0, 0x1b0, 0x5b0, 0x3b0, - 0x7b0, 0x070, 0x470, 0x270, 0x670, 0x170, 0x570, 0x370, 0x770, 0x0f0, - 0x4f0, 0x2f0, 0x6f0, 0x1f0, 0x5f0, 0x3f0, 0x7f0, 0x008, 0x408, 0x208, - 0x608, 0x108, 0x508, 0x308, 0x708, 0x088, 0x488, 0x288, 0x688, 0x188, - 0x588, 0x388, 0x788, 0x048, 0x448, 0x248, 0x648, 0x148, 0x548, 0x348, - 0x748, 0x0c8, 0x4c8, 0x2c8, 0x6c8, 0x1c8, 0x5c8, 0x3c8, 0x7c8, 0x028, - 0x428, 0x228, 0x628, 0x128, 0x528, 0x328, 0x728, 0x0a8, 0x4a8, 0x2a8, - 0x6a8, 0x1a8, 0x5a8, 0x3a8, 0x7a8, 0x068, 0x468, 0x268, 0x668, 0x168, - 0x568, 0x368, 0x768, 0x0e8, 0x4e8, 0x2e8, 0x6e8, 0x1e8, 0x5e8, 0x3e8, - 0x7e8, 0x018, 0x418, 0x218, 0x618, 0x118, 0x518, 0x318, 0x718, 0x098, - 0x498, 0x298, 0x698, 0x198, 0x598, 0x398, 0x798, 0x058, 0x458, 0x258, - 0x658, 0x158, 0x558, 0x358, 0x758, 0x0d8, 0x4d8, 0x2d8, 0x6d8, 0x1d8, - 0x5d8, 0x3d8, 0x7d8, 0x038, 0x438, 0x238, 0x638, 0x138, 0x538, 0x338, - 0x738, 0x0b8, 0x4b8, 0x2b8, 0x6b8, 0x1b8, 0x5b8, 0x3b8, 0x7b8, 0x078, - 0x478, 0x278, 0x678, 0x178, 0x578, 0x378, 0x778, 0x0f8, 0x4f8, 0x2f8, - 0x6f8, 0x1f8, 0x5f8, 0x3f8, 0x7f8, 0x004, 0x404, 0x204, 0x604, 0x104, - 0x504, 0x304, 0x704, 0x084, 0x484, 0x284, 0x684, 0x184, 0x584, 0x384, - 0x784, 0x044, 0x444, 0x244, 0x644, 0x144, 0x544, 0x344, 0x744, 0x0c4, - 0x4c4, 0x2c4, 0x6c4, 0x1c4, 0x5c4, 0x3c4, 0x7c4, 0x024, 0x424, 0x224, - 0x624, 0x124, 0x524, 0x324, 0x724, 0x0a4, 0x4a4, 0x2a4, 0x6a4, 0x1a4, - 0x5a4, 0x3a4, 0x7a4, 0x064, 0x464, 0x264, 0x664, 0x164, 0x564, 0x364, - 0x764, 0x0e4, 0x4e4, 0x2e4, 0x6e4, 0x1e4, 0x5e4, 0x3e4, 0x7e4, 0x014, - 0x414, 0x214, 0x614, 0x114, 0x514, 0x314, 0x714, 0x094, 0x494, 0x294, - 0x694, 0x194, 0x594, 0x394, 0x794, 0x054, 0x454, 0x254, 0x654, 0x154, - 0x554, 0x354, 0x754, 0x0d4, 0x4d4, 0x2d4, 0x6d4, 0x1d4, 0x5d4, 0x3d4, - 0x7d4, 0x034, 0x434, 0x234, 0x634, 0x134, 0x534, 0x334, 0x734, 0x0b4, - 0x4b4, 0x2b4, 0x6b4, 0x1b4, 0x5b4, 0x3b4, 0x7b4, 0x074, 0x474, 0x274, - 0x674, 0x174, 0x574, 0x374, 0x774, 0x0f4, 0x4f4, 0x2f4, 0x6f4, 0x1f4, - 0x5f4, 0x3f4, 0x7f4, 0x00c, 0x40c, 0x20c, 0x60c, 0x10c, 0x50c, 0x30c, - 0x70c, 0x08c, 0x48c, 0x28c, 0x68c, 0x18c, 0x58c, 0x38c, 0x78c, 0x04c, - 0x44c, 0x24c, 0x64c, 0x14c, 0x54c, 0x34c, 0x74c, 0x0cc, 0x4cc, 0x2cc, - 0x6cc, 0x1cc, 0x5cc, 0x3cc, 0x7cc, 0x02c, 0x42c, 0x22c, 0x62c, 0x12c, - 0x52c, 0x32c, 0x72c, 0x0ac, 0x4ac, 0x2ac, 0x6ac, 0x1ac, 0x5ac, 0x3ac, - 0x7ac, 0x06c, 0x46c, 0x26c, 0x66c, 0x16c, 0x56c, 0x36c, 0x76c, 0x0ec, - 0x4ec, 0x2ec, 0x6ec, 0x1ec, 0x5ec, 0x3ec, 0x7ec, 0x01c, 0x41c, 0x21c, - 0x61c, 0x11c, 0x51c, 0x31c, 0x71c, 0x09c, 0x49c, 0x29c, 0x69c, 0x19c, - 0x59c, 0x39c, 0x79c, 0x05c, 0x45c, 0x25c, 0x65c, 0x15c, 0x55c, 0x35c, - 0x75c, 0x0dc, 0x4dc, 0x2dc, 0x6dc, 0x1dc, 0x5dc, 0x3dc, 0x7dc, 0x03c, - 0x43c, 0x23c, 0x63c, 0x13c, 0x53c, 0x33c, 0x73c, 0x0bc, 0x4bc, 0x2bc, - 0x6bc, 0x1bc, 0x5bc, 0x3bc, 0x7bc, 0x07c, 0x47c, 0x27c, 0x67c, 0x17c, - 0x57c, 0x37c, 0x77c, 0x0fc, 0x4fc, 0x2fc, 0x6fc, 0x1fc, 0x5fc, 0x3fc, - 0x7fc, 0x002, 0x402, 0x202, 0x602, 0x102, 0x502, 0x302, 0x702, 0x082, - 0x482, 0x282, 0x682, 0x182, 0x582, 0x382, 0x782, 0x042, 0x442, 0x242, - 0x642, 0x142, 0x542, 0x342, 0x742, 0x0c2, 0x4c2, 0x2c2, 0x6c2, 0x1c2, - 0x5c2, 0x3c2, 0x7c2, 0x022, 0x422, 0x222, 0x622, 0x122, 0x522, 0x322, - 0x722, 0x0a2, 0x4a2, 0x2a2, 0x6a2, 0x1a2, 0x5a2, 0x3a2, 0x7a2, 0x062, - 0x462, 0x262, 0x662, 0x162, 0x562, 0x362, 0x762, 0x0e2, 0x4e2, 0x2e2, - 0x6e2, 0x1e2, 0x5e2, 0x3e2, 0x7e2, 0x012, 0x412, 0x212, 0x612, 0x112, - 0x512, 0x312, 0x712, 0x092, 0x492, 0x292, 0x692, 0x192, 0x592, 0x392, - 0x792, 0x052, 0x452, 0x252, 0x652, 0x152, 0x552, 0x352, 0x752, 0x0d2, - 0x4d2, 0x2d2, 0x6d2, 0x1d2, 0x5d2, 0x3d2, 0x7d2, 0x032, 0x432, 0x232, - 0x632, 0x132, 0x532, 0x332, 0x732, 0x0b2, 0x4b2, 0x2b2, 0x6b2, 0x1b2, - 0x5b2, 0x3b2, 0x7b2, 0x072, 0x472, 0x272, 0x672, 0x172, 0x572, 0x372, - 0x772, 0x0f2, 0x4f2, 0x2f2, 0x6f2, 0x1f2, 0x5f2, 0x3f2, 0x7f2, 0x00a, - 0x40a, 0x20a, 0x60a, 0x10a, 0x50a, 0x30a, 0x70a, 0x08a, 0x48a, 0x28a, - 0x68a, 0x18a, 0x58a, 0x38a, 0x78a, 0x04a, 0x44a, 0x24a, 0x64a, 0x14a, - 0x54a, 0x34a, 0x74a, 0x0ca, 0x4ca, 0x2ca, 0x6ca, 0x1ca, 0x5ca, 0x3ca, - 0x7ca, 0x02a, 0x42a, 0x22a, 0x62a, 0x12a, 0x52a, 0x32a, 0x72a, 0x0aa, - 0x4aa, 0x2aa, 0x6aa, 0x1aa, 0x5aa, 0x3aa, 0x7aa, 0x06a, 0x46a, 0x26a, - 0x66a, 0x16a, 0x56a, 0x36a, 0x76a, 0x0ea, 0x4ea, 0x2ea, 0x6ea, 0x1ea, - 0x5ea, 0x3ea, 0x7ea, 0x01a, 0x41a, 0x21a, 0x61a, 0x11a, 0x51a, 0x31a, - 0x71a, 0x09a, 0x49a, 0x29a, 0x69a, 0x19a, 0x59a, 0x39a, 0x79a, 0x5a, - 0x45a, 0x25a, 0x65a, 0x15a, 0x55a, 0x35a, 0x75a, 0x0da, 0x4da, 0x2da, - 0x6da, 0x1da, 0x5da, 0x3da, 0x7da, 0x03a, 0x43a, 0x23a, 0x63a, 0x13a, - 0x53a, 0x33a, 0x73a, 0x0ba, 0x4ba, 0x2ba, 0x6ba, 0x1ba, 0x5ba, 0x3ba, - 0x7ba, 0x07a, 0x47a, 0x27a, 0x67a, 0x17a, 0x57a, 0x37a, 0x77a, 0x0fa, - 0x4fa, 0x2fa, 0x6fa, 0x1fa, 0x5fa, 0x3fa, 0x7fa, 0x006, 0x406, 0x206, - 0x606, 0x106, 0x506, 0x306, 0x706, 0x086, 0x486, 0x286, 0x686, 0x186, - 0x586, 0x386, 0x786, 0x046, 0x446, 0x246, 0x646, 0x146, 0x546, 0x346, - 0x746, 0x0c6, 0x4c6, 0x2c6, 0x6c6, 0x1c6, 0x5c6, 0x3c6, 0x7c6, 0x026, - 0x426, 0x226, 0x626, 0x126, 0x526, 0x326, 0x726, 0x0a6, 0x4a6, 0x2a6, - 0x6a6, 0x1a6, 0x5a6, 0x3a6, 0x7a6, 0x066, 0x466, 0x266, 0x666, 0x166, - 0x566, 0x366, 0x766, 0x0e6, 0x4e6, 0x2e6, 0x6e6, 0x1e6, 0x5e6, 0x3e6, - 0x7e6, 0x016, 0x416, 0x216, 0x616, 0x116, 0x516, 0x316, 0x716, 0x096, - 0x496, 0x296, 0x696, 0x196, 0x596, 0x396, 0x796, 0x056, 0x456, 0x256, - 0x656, 0x156, 0x556, 0x356, 0x756, 0x0d6, 0x4d6, 0x2d6, 0x6d6, 0x1d6, - 0x5d6, 0x3d6, 0x7d6, 0x036, 0x436, 0x236, 0x636, 0x136, 0x536, 0x336, - 0x736, 0x0b6, 0x4b6, 0x2b6, 0x6b6, 0x1b6, 0x5b6, 0x3b6, 0x7b6, 0x076, - 0x476, 0x276, 0x676, 0x176, 0x576, 0x376, 0x776, 0x0f6, 0x4f6, 0x2f6, - 0x6f6, 0x1f6, 0x5f6, 0x3f6, 0x7f6, 0x00e, 0x40e, 0x20e, 0x60e, 0x10e, - 0x50e, 0x30e, 0x70e, 0x08e, 0x48e, 0x28e, 0x68e, 0x18e, 0x58e, 0x38e, - 0x78e, 0x04e, 0x44e, 0x24e, 0x64e, 0x14e, 0x54e, 0x34e, 0x74e, 0x0ce, - 0x4ce, 0x2ce, 0x6ce, 0x1ce, 0x5ce, 0x3ce, 0x7ce, 0x02e, 0x42e, 0x22e, - 0x62e, 0x12e, 0x52e, 0x32e, 0x72e, 0x0ae, 0x4ae, 0x2ae, 0x6ae, 0x1ae, - 0x5ae, 0x3ae, 0x7ae, 0x06e, 0x46e, 0x26e, 0x66e, 0x16e, 0x56e, 0x36e, - 0x76e, 0x0ee, 0x4ee, 0x2ee, 0x6ee, 0x1ee, 0x5ee, 0x3ee, 0x7ee, 0x01e, - 0x41e, 0x21e, 0x61e, 0x11e, 0x51e, 0x31e, 0x71e, 0x09e, 0x49e, 0x29e, - 0x69e, 0x19e, 0x59e, 0x39e, 0x79e, 0x05e, 0x45e, 0x25e, 0x65e, 0x15e, - 0x55e, 0x35e, 0x75e, 0x0de, 0x4de, 0x2de, 0x6de, 0x1de, 0x5de, 0x3de, - 0x7de, 0x03e, 0x43e, 0x23e, 0x63e, 0x13e, 0x53e, 0x33e, 0x73e, 0x0be, - 0x4be, 0x2be, 0x6be, 0x1be, 0x5be, 0x3be, 0x7be, 0x07e, 0x47e, 0x27e, - 0x67e, 0x17e, 0x57e, 0x37e, 0x77e, 0x0fe, 0x4fe, 0x2fe, 0x6fe, 0x1fe, - 0x5fe, 0x3fe, 0x7fe, 0x001 -}; -#endif - -/** - @brief Double Precision Floating-point Twiddle factors Table Generation -*/ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_16) -/** - @par - Example code for Double Precision Floating-point Twiddle factors Generation: - @par -
    for (i = 0; i < N/; i++)
    -  {
    - 	twiddleCoef[2*i]   = cos(i * 2*PI/(double)N);
    - 	twiddleCoef[2*i+1] = sin(i * 2*PI/(double)N);
    -  } 
    - @par - where N = 16, PI = 3.14159265358979 - @par - Cos and Sin values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_16[32] = { - 0x3ff0000000000000, 0x0000000000000000, // 1, 0' - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268' - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711' - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388' - 0x0000000000000000, 0x3ff0000000000000, // 0, 1' - 0xbfd87de2a6aea963, 0x3fed906bcf328d46, //-0.38268, 0.92388' - 0xbfe6a09e667f3bcc, 0x3fe6a09e667f3bcc, //-0.70711, 0.70711' - 0xbfed906bcf328d46, 0x3fd87de2a6aea963, //-0.92388, 0.38268' - 0xbff0000000000000, 0x0000000000000000, // -1, 0' - 0xbfed906bcf328d46, 0xbfd87de2a6aea963, //-0.92388,-0.38268' - 0xbfe6a09e667f3bcc, 0xbfe6a09e667f3bcc, //-0.70711,-0.70711' - 0xbfd87de2a6aea963, 0xbfed906bcf328d46, //-0.38268,-0.92388' - 0x0000000000000000, 0xbff0000000000000, // 0, -1' - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268,-0.92388' - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711,-0.70711' - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388,-0.38268' -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_32) - -/** - @par - Example code for Double Precision Floating-point Twiddle factors Generation: - @par -
    for (i = 0; i< N/; i++)
    -  {
    - 	twiddleCoef[2*i]   = cos(i * 2*PI/N);
    - 	twiddleCoef[2*i+1] = sin(i * 2*PI/N);
    -  } 
    - @par - where N = 32, PI = 3.14159265358979 - @par - Cos and Sin values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_32[64] = { - 0x3ff0000000000000, 0x0000000000000000, // 1, 0' - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509' - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268' - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557' - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711' - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147' - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388' - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079' - 0x0000000000000000, 0x3ff0000000000000, // 0, 1' - 0xbfc8f8b83c69a60a, 0x3fef6297cff75cb0, //-0.19509, 0.98079' - 0xbfd87de2a6aea963, 0x3fed906bcf328d46, //-0.38268, 0.92388' - 0xbfe1c73b39ae68c8, 0x3fea9b66290ea1a3, //-0.55557, 0.83147' - 0xbfe6a09e667f3bcc, 0x3fe6a09e667f3bcc, //-0.70711, 0.70711' - 0xbfea9b66290ea1a3, 0x3fe1c73b39ae68c8, //-0.83147, 0.55557' - 0xbfed906bcf328d46, 0x3fd87de2a6aea963, //-0.92388, 0.38268' - 0xbfef6297cff75cb0, 0x3fc8f8b83c69a60a, //-0.98079, 0.19509' - 0xbff0000000000000, 0x0000000000000000, // -1, 0' - 0xbfef6297cff75cb0, 0xbfc8f8b83c69a60a, //-0.98079,-0.19509' - 0xbfed906bcf328d46, 0xbfd87de2a6aea963, //-0.92388,-0.38268' - 0xbfea9b66290ea1a3, 0xbfe1c73b39ae68c8, //-0.83147,-0.55557' - 0xbfe6a09e667f3bcc, 0xbfe6a09e667f3bcc, //-0.70711,-0.70711' - 0xbfe1c73b39ae68c8, 0xbfea9b66290ea1a3, //-0.55557,-0.83147' - 0xbfd87de2a6aea963, 0xbfed906bcf328d46, //-0.38268,-0.92388' - 0xbfc8f8b83c69a60a, 0xbfef6297cff75cb0, //-0.19509,-0.98079' - 0x0000000000000000, 0xbff0000000000000, // 0, -1' - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509,-0.98079' - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268,-0.92388' - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557,-0.83147' - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711,-0.70711' - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147,-0.55557' - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388,-0.38268' - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079,-0.19509' -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_64) -/** - @par - Example code for Double Precision 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, PI = 3.14159265358979 - @par - Cos and Sin values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_64[128] = { - 0x3ff0000000000000, 0x0000000000000000, // 1, 0' - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017' - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509' - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028' - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268' - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714' - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557' - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439' - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711' - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301' - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147' - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192' - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388' - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694' - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079' - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518' - 0x0000000000000000, 0x3ff0000000000000, // 0, 1' - 0xbfb917a6bc29b42c, 0x3fefd88da3d12526, //-0.098017, 0.99518' - 0xbfc8f8b83c69a60a, 0x3fef6297cff75cb0, // -0.19509, 0.98079' - 0xbfd294062ed59f05, 0x3fee9f4156c62dda, // -0.29028, 0.95694' - 0xbfd87de2a6aea963, 0x3fed906bcf328d46, // -0.38268, 0.92388' - 0xbfde2b5d3806f63b, 0x3fec38b2f180bdb1, // -0.4714, 0.88192' - 0xbfe1c73b39ae68c8, 0x3fea9b66290ea1a3, // -0.55557, 0.83147' - 0xbfe44cf325091dd6, 0x3fe8bc806b151741, // -0.63439, 0.77301' - 0xbfe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // -0.70711, 0.70711' - 0xbfe8bc806b151741, 0x3fe44cf325091dd6, // -0.77301, 0.63439' - 0xbfea9b66290ea1a3, 0x3fe1c73b39ae68c8, // -0.83147, 0.55557' - 0xbfec38b2f180bdb1, 0x3fde2b5d3806f63b, // -0.88192, 0.4714' - 0xbfed906bcf328d46, 0x3fd87de2a6aea963, // -0.92388, 0.38268' - 0xbfee9f4156c62dda, 0x3fd294062ed59f05, // -0.95694, 0.29028' - 0xbfef6297cff75cb0, 0x3fc8f8b83c69a60a, // -0.98079, 0.19509' - 0xbfefd88da3d12526, 0x3fb917a6bc29b42c, // -0.99518, 0.098017' - 0xbff0000000000000, 0x0000000000000000, // -1, 0' - 0xbfefd88da3d12526, 0xbfb917a6bc29b42c, // -0.99518,-0.098017' - 0xbfef6297cff75cb0, 0xbfc8f8b83c69a60a, // -0.98079, -0.19509' - 0xbfee9f4156c62dda, 0xbfd294062ed59f05, // -0.95694, -0.29028' - 0xbfed906bcf328d46, 0xbfd87de2a6aea963, // -0.92388, -0.38268' - 0xbfec38b2f180bdb1, 0xbfde2b5d3806f63b, // -0.88192, -0.4714' - 0xbfea9b66290ea1a3, 0xbfe1c73b39ae68c8, // -0.83147, -0.55557' - 0xbfe8bc806b151741, 0xbfe44cf325091dd6, // -0.77301, -0.63439' - 0xbfe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // -0.70711, -0.70711' - 0xbfe44cf325091dd6, 0xbfe8bc806b151741, // -0.63439, -0.77301' - 0xbfe1c73b39ae68c8, 0xbfea9b66290ea1a3, // -0.55557, -0.83147' - 0xbfde2b5d3806f63b, 0xbfec38b2f180bdb1, // -0.4714, -0.88192' - 0xbfd87de2a6aea963, 0xbfed906bcf328d46, // -0.38268, -0.92388' - 0xbfd294062ed59f05, 0xbfee9f4156c62dda, // -0.29028, -0.95694' - 0xbfc8f8b83c69a60a, 0xbfef6297cff75cb0, // -0.19509, -0.98079' - 0xbfb917a6bc29b42c, 0xbfefd88da3d12526, //-0.098017, -0.99518' - 0x0000000000000000, 0xbff0000000000000, // 0, -1' - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518' - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079' - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694' - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388' - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192' - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147' - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301' - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711' - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439' - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557' - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714' - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268' - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028' - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509' - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518,-0.098017' - }; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_128) -/** - @par - Example code for Double Precision 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, PI = 3.14159265358979 - @par - Cos and Sin values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_128[256] = { - 0x3ff0000000000000, 0x0000000000000000, // 1, 0' - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068' - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017' - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673' - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509' - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298' - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028' - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689' - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268' - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756' - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714' - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141' - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557' - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957' - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439' - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156' - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711' - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095' - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301' - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321' - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147' - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773' - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192' - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399' - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388' - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154' - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694' - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003' - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079' - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918' - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518' - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, // 0.049068, 0.9988' - 0x0000000000000000, 0x3ff0000000000000, // 0, 1' - 0xbfa91f65f10dd814, 0x3feff621e3796d7e, //-0.049068, 0.9988' - 0xbfb917a6bc29b42c, 0x3fefd88da3d12526, //-0.098017, 0.99518' - 0xbfc2c8106e8e613a, 0x3fefa7557f08a517, // -0.14673, 0.98918' - 0xbfc8f8b83c69a60a, 0x3fef6297cff75cb0, // -0.19509, 0.98079' - 0xbfcf19f97b215f1a, 0x3fef0a7efb9230d7, // -0.24298, 0.97003' - 0xbfd294062ed59f05, 0x3fee9f4156c62dda, // -0.29028, 0.95694' - 0xbfd58f9a75ab1fdd, 0x3fee212104f686e5, // -0.33689, 0.94154' - 0xbfd87de2a6aea963, 0x3fed906bcf328d46, // -0.38268, 0.92388' - 0xbfdb5d1009e15cc0, 0x3feced7af43cc773, // -0.42756, 0.90399' - 0xbfde2b5d3806f63b, 0x3fec38b2f180bdb1, // -0.4714, 0.88192' - 0xbfe073879922ffed, 0x3feb728345196e3e, // -0.5141, 0.85773' - 0xbfe1c73b39ae68c8, 0x3fea9b66290ea1a3, // -0.55557, 0.83147' - 0xbfe30ff7fce17035, 0x3fe9b3e047f38741, // -0.5957, 0.80321' - 0xbfe44cf325091dd6, 0x3fe8bc806b151741, // -0.63439, 0.77301' - 0xbfe57d69348cec9f, 0x3fe7b5df226aafb0, // -0.67156, 0.74095' - 0xbfe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // -0.70711, 0.70711' - 0xbfe7b5df226aafb0, 0x3fe57d69348cec9f, // -0.74095, 0.67156' - 0xbfe8bc806b151741, 0x3fe44cf325091dd6, // -0.77301, 0.63439' - 0xbfe9b3e047f38741, 0x3fe30ff7fce17035, // -0.80321, 0.5957' - 0xbfea9b66290ea1a3, 0x3fe1c73b39ae68c8, // -0.83147, 0.55557' - 0xbfeb728345196e3e, 0x3fe073879922ffed, // -0.85773, 0.5141' - 0xbfec38b2f180bdb1, 0x3fde2b5d3806f63b, // -0.88192, 0.4714' - 0xbfeced7af43cc773, 0x3fdb5d1009e15cc0, // -0.90399, 0.42756' - 0xbfed906bcf328d46, 0x3fd87de2a6aea963, // -0.92388, 0.38268' - 0xbfee212104f686e5, 0x3fd58f9a75ab1fdd, // -0.94154, 0.33689' - 0xbfee9f4156c62dda, 0x3fd294062ed59f05, // -0.95694, 0.29028' - 0xbfef0a7efb9230d7, 0x3fcf19f97b215f1a, // -0.97003, 0.24298' - 0xbfef6297cff75cb0, 0x3fc8f8b83c69a60a, // -0.98079, 0.19509' - 0xbfefa7557f08a517, 0x3fc2c8106e8e613a, // -0.98918, 0.14673' - 0xbfefd88da3d12526, 0x3fb917a6bc29b42c, // -0.99518, 0.098017' - 0xbfeff621e3796d7e, 0x3fa91f65f10dd814, // -0.9988, 0.049068' - 0xbff0000000000000, 0x0000000000000000, // -1, 0' - 0xbfeff621e3796d7e, 0xbfa91f65f10dd814, // -0.9988,-0.049068' - 0xbfefd88da3d12526, 0xbfb917a6bc29b42c, // -0.99518,-0.098017' - 0xbfefa7557f08a517, 0xbfc2c8106e8e613a, // -0.98918, -0.14673' - 0xbfef6297cff75cb0, 0xbfc8f8b83c69a60a, // -0.98079, -0.19509' - 0xbfef0a7efb9230d7, 0xbfcf19f97b215f1a, // -0.97003, -0.24298' - 0xbfee9f4156c62dda, 0xbfd294062ed59f05, // -0.95694, -0.29028' - 0xbfee212104f686e5, 0xbfd58f9a75ab1fdd, // -0.94154, -0.33689' - 0xbfed906bcf328d46, 0xbfd87de2a6aea963, // -0.92388, -0.38268' - 0xbfeced7af43cc773, 0xbfdb5d1009e15cc0, // -0.90399, -0.42756' - 0xbfec38b2f180bdb1, 0xbfde2b5d3806f63b, // -0.88192, -0.4714' - 0xbfeb728345196e3e, 0xbfe073879922ffed, // -0.85773, -0.5141' - 0xbfea9b66290ea1a3, 0xbfe1c73b39ae68c8, // -0.83147, -0.55557' - 0xbfe9b3e047f38741, 0xbfe30ff7fce17035, // -0.80321, -0.5957' - 0xbfe8bc806b151741, 0xbfe44cf325091dd6, // -0.77301, -0.63439' - 0xbfe7b5df226aafb0, 0xbfe57d69348cec9f, // -0.74095, -0.67156' - 0xbfe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // -0.70711, -0.70711' - 0xbfe57d69348cec9f, 0xbfe7b5df226aafb0, // -0.67156, -0.74095' - 0xbfe44cf325091dd6, 0xbfe8bc806b151741, // -0.63439, -0.77301' - 0xbfe30ff7fce17035, 0xbfe9b3e047f38741, // -0.5957, -0.80321' - 0xbfe1c73b39ae68c8, 0xbfea9b66290ea1a3, // -0.55557, -0.83147' - 0xbfe073879922ffed, 0xbfeb728345196e3e, // -0.5141, -0.85773' - 0xbfde2b5d3806f63b, 0xbfec38b2f180bdb1, // -0.4714, -0.88192' - 0xbfdb5d1009e15cc0, 0xbfeced7af43cc773, // -0.42756, -0.90399' - 0xbfd87de2a6aea963, 0xbfed906bcf328d46, // -0.38268, -0.92388' - 0xbfd58f9a75ab1fdd, 0xbfee212104f686e5, // -0.33689, -0.94154' - 0xbfd294062ed59f05, 0xbfee9f4156c62dda, // -0.29028, -0.95694' - 0xbfcf19f97b215f1a, 0xbfef0a7efb9230d7, // -0.24298, -0.97003' - 0xbfc8f8b83c69a60a, 0xbfef6297cff75cb0, // -0.19509, -0.98079' - 0xbfc2c8106e8e613a, 0xbfefa7557f08a517, // -0.14673, -0.98918' - 0xbfb917a6bc29b42c, 0xbfefd88da3d12526, //-0.098017, -0.99518' - 0xbfa91f65f10dd814, 0xbfeff621e3796d7e, //-0.049068, -0.9988' - 0x0000000000000000, 0xbff0000000000000, // 0, -1' - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, // 0.049068, -0.9988' - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518' - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918' - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079' - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003' - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694' - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154' - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388' - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399' - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192' - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773' - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147' - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321' - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301' - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095' - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711' - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156' - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439' - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957' - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557' - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141' - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714' - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756' - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268' - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689' - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028' - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298' - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509' - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673' - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518,-0.098017' - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988,-0.049068' -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_256) -/** - @par - Example code for Double Precision 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, PI = 3.14159265358979 - @par - Cos and Sin values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_256[512] = { - 0x3ff0000000000000, 0x0000000000000000, // 1, 0 - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541 - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068 - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565 - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017 - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241 - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673 - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096 - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509 - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191 - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298 - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671 - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028 - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368 - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689 - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599 - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268 - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524 - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756 - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961 - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714 - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929 - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141 - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535 - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557 - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581 - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957 - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523 - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439 - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317 - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156 - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954 - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711 - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425 - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095 - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721 - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301 - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835 - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321 - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758 - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147 - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485 - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773 - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009 - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192 - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322 - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399 - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421 - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388 - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299 - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154 - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953 - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694 - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378 - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003 - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757 - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079 - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528 - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918 - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248 - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518 - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, // 0.073565, 0.99729 - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, // 0.049068, 0.9988 - 0x3f992155f7a3667e, 0x3feffd886084cd0d, // 0.024541, 0.9997 - 0x0000000000000000, 0x3ff0000000000000, // 0, 1 - 0xbf992155f7a3667e, 0x3feffd886084cd0d, //-0.024541, 0.9997 - 0xbfa91f65f10dd814, 0x3feff621e3796d7e, //-0.049068, 0.9988 - 0xbfb2d52092ce19f6, 0x3fefe9cdad01883a, //-0.073565, 0.99729 - 0xbfb917a6bc29b42c, 0x3fefd88da3d12526, //-0.098017, 0.99518 - 0xbfbf564e56a9730e, 0x3fefc26470e19fd3, // -0.12241, 0.99248 - 0xbfc2c8106e8e613a, 0x3fefa7557f08a517, // -0.14673, 0.98918 - 0xbfc5e214448b3fc6, 0x3fef8764fa714ba9, // -0.17096, 0.98528 - 0xbfc8f8b83c69a60a, 0x3fef6297cff75cb0, // -0.19509, 0.98079 - 0xbfcc0b826a7e4f63, 0x3fef38f3ac64e589, // -0.2191, 0.9757 - 0xbfcf19f97b215f1a, 0x3fef0a7efb9230d7, // -0.24298, 0.97003 - 0xbfd111d262b1f677, 0x3feed740e7684963, // -0.26671, 0.96378 - 0xbfd294062ed59f05, 0x3fee9f4156c62dda, // -0.29028, 0.95694 - 0xbfd4135c94176602, 0x3fee6288ec48e112, // -0.31368, 0.94953 - 0xbfd58f9a75ab1fdd, 0x3fee212104f686e5, // -0.33689, 0.94154 - 0xbfd7088530fa459e, 0x3feddb13b6ccc23d, // -0.3599, 0.93299 - 0xbfd87de2a6aea963, 0x3fed906bcf328d46, // -0.38268, 0.92388 - 0xbfd9ef7943a8ed8a, 0x3fed4134d14dc93a, // -0.40524, 0.91421 - 0xbfdb5d1009e15cc0, 0x3feced7af43cc773, // -0.42756, 0.90399 - 0xbfdcc66e9931c45d, 0x3fec954b213411f5, // -0.44961, 0.89322 - 0xbfde2b5d3806f63b, 0x3fec38b2f180bdb1, // -0.4714, 0.88192 - 0xbfdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // -0.4929, 0.87009 - 0xbfe073879922ffed, 0x3feb728345196e3e, // -0.5141, 0.85773 - 0xbfe11eb3541b4b22, 0x3feb090a58150200, // -0.535, 0.84485 - 0xbfe1c73b39ae68c8, 0x3fea9b66290ea1a3, // -0.55557, 0.83147 - 0xbfe26d054cdd12df, 0x3fea29a7a0462782, // -0.57581, 0.81758 - 0xbfe30ff7fce17035, 0x3fe9b3e047f38741, // -0.5957, 0.80321 - 0xbfe3affa292050b9, 0x3fe93a22499263fc, // -0.61523, 0.78835 - 0xbfe44cf325091dd6, 0x3fe8bc806b151741, // -0.63439, 0.77301 - 0xbfe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // -0.65317, 0.75721 - 0xbfe57d69348cec9f, 0x3fe7b5df226aafb0, // -0.67156, 0.74095 - 0xbfe610b7551d2cde, 0x3fe72d0837efff97, // -0.68954, 0.72425 - 0xbfe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // -0.70711, 0.70711 - 0xbfe72d0837efff97, 0x3fe610b7551d2cde, // -0.72425, 0.68954 - 0xbfe7b5df226aafb0, 0x3fe57d69348cec9f, // -0.74095, 0.67156 - 0xbfe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // -0.75721, 0.65317 - 0xbfe8bc806b151741, 0x3fe44cf325091dd6, // -0.77301, 0.63439 - 0xbfe93a22499263fc, 0x3fe3affa292050b9, // -0.78835, 0.61523 - 0xbfe9b3e047f38741, 0x3fe30ff7fce17035, // -0.80321, 0.5957 - 0xbfea29a7a0462782, 0x3fe26d054cdd12df, // -0.81758, 0.57581 - 0xbfea9b66290ea1a3, 0x3fe1c73b39ae68c8, // -0.83147, 0.55557 - 0xbfeb090a58150200, 0x3fe11eb3541b4b22, // -0.84485, 0.535 - 0xbfeb728345196e3e, 0x3fe073879922ffed, // -0.85773, 0.5141 - 0xbfebd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // -0.87009, 0.4929 - 0xbfec38b2f180bdb1, 0x3fde2b5d3806f63b, // -0.88192, 0.4714 - 0xbfec954b213411f5, 0x3fdcc66e9931c45d, // -0.89322, 0.44961 - 0xbfeced7af43cc773, 0x3fdb5d1009e15cc0, // -0.90399, 0.42756 - 0xbfed4134d14dc93a, 0x3fd9ef7943a8ed8a, // -0.91421, 0.40524 - 0xbfed906bcf328d46, 0x3fd87de2a6aea963, // -0.92388, 0.38268 - 0xbfeddb13b6ccc23d, 0x3fd7088530fa459e, // -0.93299, 0.3599 - 0xbfee212104f686e5, 0x3fd58f9a75ab1fdd, // -0.94154, 0.33689 - 0xbfee6288ec48e112, 0x3fd4135c94176602, // -0.94953, 0.31368 - 0xbfee9f4156c62dda, 0x3fd294062ed59f05, // -0.95694, 0.29028 - 0xbfeed740e7684963, 0x3fd111d262b1f677, // -0.96378, 0.26671 - 0xbfef0a7efb9230d7, 0x3fcf19f97b215f1a, // -0.97003, 0.24298 - 0xbfef38f3ac64e589, 0x3fcc0b826a7e4f63, // -0.9757, 0.2191 - 0xbfef6297cff75cb0, 0x3fc8f8b83c69a60a, // -0.98079, 0.19509 - 0xbfef8764fa714ba9, 0x3fc5e214448b3fc6, // -0.98528, 0.17096 - 0xbfefa7557f08a517, 0x3fc2c8106e8e613a, // -0.98918, 0.14673 - 0xbfefc26470e19fd3, 0x3fbf564e56a9730e, // -0.99248, 0.12241 - 0xbfefd88da3d12526, 0x3fb917a6bc29b42c, // -0.99518, 0.098017 - 0xbfefe9cdad01883a, 0x3fb2d52092ce19f6, // -0.99729, 0.073565 - 0xbfeff621e3796d7e, 0x3fa91f65f10dd814, // -0.9988, 0.049068 - 0xbfeffd886084cd0d, 0x3f992155f7a3667e, // -0.9997, 0.024541 - 0xbff0000000000000, 0x0000000000000000, // -1, 0 - 0xbfeffd886084cd0d, 0xbf992155f7a3667e, // -0.9997,-0.024541 - 0xbfeff621e3796d7e, 0xbfa91f65f10dd814, // -0.9988,-0.049068 - 0xbfefe9cdad01883a, 0xbfb2d52092ce19f6, // -0.99729,-0.073565 - 0xbfefd88da3d12526, 0xbfb917a6bc29b42c, // -0.99518,-0.098017 - 0xbfefc26470e19fd3, 0xbfbf564e56a9730e, // -0.99248, -0.12241 - 0xbfefa7557f08a517, 0xbfc2c8106e8e613a, // -0.98918, -0.14673 - 0xbfef8764fa714ba9, 0xbfc5e214448b3fc6, // -0.98528, -0.17096 - 0xbfef6297cff75cb0, 0xbfc8f8b83c69a60a, // -0.98079, -0.19509 - 0xbfef38f3ac64e589, 0xbfcc0b826a7e4f63, // -0.9757, -0.2191 - 0xbfef0a7efb9230d7, 0xbfcf19f97b215f1a, // -0.97003, -0.24298 - 0xbfeed740e7684963, 0xbfd111d262b1f677, // -0.96378, -0.26671 - 0xbfee9f4156c62dda, 0xbfd294062ed59f05, // -0.95694, -0.29028 - 0xbfee6288ec48e112, 0xbfd4135c94176602, // -0.94953, -0.31368 - 0xbfee212104f686e5, 0xbfd58f9a75ab1fdd, // -0.94154, -0.33689 - 0xbfeddb13b6ccc23d, 0xbfd7088530fa459e, // -0.93299, -0.3599 - 0xbfed906bcf328d46, 0xbfd87de2a6aea963, // -0.92388, -0.38268 - 0xbfed4134d14dc93a, 0xbfd9ef7943a8ed8a, // -0.91421, -0.40524 - 0xbfeced7af43cc773, 0xbfdb5d1009e15cc0, // -0.90399, -0.42756 - 0xbfec954b213411f5, 0xbfdcc66e9931c45d, // -0.89322, -0.44961 - 0xbfec38b2f180bdb1, 0xbfde2b5d3806f63b, // -0.88192, -0.4714 - 0xbfebd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // -0.87009, -0.4929 - 0xbfeb728345196e3e, 0xbfe073879922ffed, // -0.85773, -0.5141 - 0xbfeb090a58150200, 0xbfe11eb3541b4b22, // -0.84485, -0.535 - 0xbfea9b66290ea1a3, 0xbfe1c73b39ae68c8, // -0.83147, -0.55557 - 0xbfea29a7a0462782, 0xbfe26d054cdd12df, // -0.81758, -0.57581 - 0xbfe9b3e047f38741, 0xbfe30ff7fce17035, // -0.80321, -0.5957 - 0xbfe93a22499263fc, 0xbfe3affa292050b9, // -0.78835, -0.61523 - 0xbfe8bc806b151741, 0xbfe44cf325091dd6, // -0.77301, -0.63439 - 0xbfe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // -0.75721, -0.65317 - 0xbfe7b5df226aafb0, 0xbfe57d69348cec9f, // -0.74095, -0.67156 - 0xbfe72d0837efff97, 0xbfe610b7551d2cde, // -0.72425, -0.68954 - 0xbfe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // -0.70711, -0.70711 - 0xbfe610b7551d2cde, 0xbfe72d0837efff97, // -0.68954, -0.72425 - 0xbfe57d69348cec9f, 0xbfe7b5df226aafb0, // -0.67156, -0.74095 - 0xbfe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // -0.65317, -0.75721 - 0xbfe44cf325091dd6, 0xbfe8bc806b151741, // -0.63439, -0.77301 - 0xbfe3affa292050b9, 0xbfe93a22499263fc, // -0.61523, -0.78835 - 0xbfe30ff7fce17035, 0xbfe9b3e047f38741, // -0.5957, -0.80321 - 0xbfe26d054cdd12df, 0xbfea29a7a0462782, // -0.57581, -0.81758 - 0xbfe1c73b39ae68c8, 0xbfea9b66290ea1a3, // -0.55557, -0.83147 - 0xbfe11eb3541b4b22, 0xbfeb090a58150200, // -0.535, -0.84485 - 0xbfe073879922ffed, 0xbfeb728345196e3e, // -0.5141, -0.85773 - 0xbfdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // -0.4929, -0.87009 - 0xbfde2b5d3806f63b, 0xbfec38b2f180bdb1, // -0.4714, -0.88192 - 0xbfdcc66e9931c45d, 0xbfec954b213411f5, // -0.44961, -0.89322 - 0xbfdb5d1009e15cc0, 0xbfeced7af43cc773, // -0.42756, -0.90399 - 0xbfd9ef7943a8ed8a, 0xbfed4134d14dc93a, // -0.40524, -0.91421 - 0xbfd87de2a6aea963, 0xbfed906bcf328d46, // -0.38268, -0.92388 - 0xbfd7088530fa459e, 0xbfeddb13b6ccc23d, // -0.3599, -0.93299 - 0xbfd58f9a75ab1fdd, 0xbfee212104f686e5, // -0.33689, -0.94154 - 0xbfd4135c94176602, 0xbfee6288ec48e112, // -0.31368, -0.94953 - 0xbfd294062ed59f05, 0xbfee9f4156c62dda, // -0.29028, -0.95694 - 0xbfd111d262b1f677, 0xbfeed740e7684963, // -0.26671, -0.96378 - 0xbfcf19f97b215f1a, 0xbfef0a7efb9230d7, // -0.24298, -0.97003 - 0xbfcc0b826a7e4f63, 0xbfef38f3ac64e589, // -0.2191, -0.9757 - 0xbfc8f8b83c69a60a, 0xbfef6297cff75cb0, // -0.19509, -0.98079 - 0xbfc5e214448b3fc6, 0xbfef8764fa714ba9, // -0.17096, -0.98528 - 0xbfc2c8106e8e613a, 0xbfefa7557f08a517, // -0.14673, -0.98918 - 0xbfbf564e56a9730e, 0xbfefc26470e19fd3, // -0.12241, -0.99248 - 0xbfb917a6bc29b42c, 0xbfefd88da3d12526, //-0.098017, -0.99518 - 0xbfb2d52092ce19f6, 0xbfefe9cdad01883a, //-0.073565, -0.99729 - 0xbfa91f65f10dd814, 0xbfeff621e3796d7e, //-0.049068, -0.9988 - 0xbf992155f7a3667e, 0xbfeffd886084cd0d, //-0.024541, -0.9997 - 0x0000000000000000, 0xbff0000000000000, // 0, -1 - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, // 0.024541, -0.9997 - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, // 0.049068, -0.9988 - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, // 0.073565, -0.99729 - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518 - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248 - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918 - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528 - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079 - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757 - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003 - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378 - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694 - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953 - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154 - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299 - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388 - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421 - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399 - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322 - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192 - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009 - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773 - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485 - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147 - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758 - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321 - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835 - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301 - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721 - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095 - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425 - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711 - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954 - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156 - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317 - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439 - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523 - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957 - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581 - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557 - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535 - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141 - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929 - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714 - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961 - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756 - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524 - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268 - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599 - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689 - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368 - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028 - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671 - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298 - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191 - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509 - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096 - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673 - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241 - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518,-0.098017 - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729,-0.073565 - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988,-0.049068 - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997,-0.024541 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_512) -/** - @par - Example code for Double Precision 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, PI = 3.14159265358979 - @par - Cos and Sin values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_512[1024] = { - 0x3ff0000000000000, 0x0000000000000000, // 1, 0 - 0x3fefff62169b92db, 0x3f8921d1fcdec784, // 0.99992, 0.012272 - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541 - 0x3feffa72effef75d, 0x3fa2d865759455cd, // 0.99932, 0.036807 - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068 - 0x3feff095658e71ad, 0x3faf656e79f820e0, // 0.99812, 0.061321 - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565 - 0x3fefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // 0.99631, 0.085797 - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017 - 0x3fefce15fd6da67b, 0x3fbc3785c79ec2d5, // 0.99391, 0.11022 - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241 - 0x3fefb5797195d741, 0x3fc139f0cedaf576, // 0.9909, 0.13458 - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673 - 0x3fef97f924c9099b, 0x3fc45576b1293e5a, // 0.9873, 0.15886 - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096 - 0x3fef7599a3a12077, 0x3fc76dd9de50bf31, // 0.98311, 0.18304 - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509 - 0x3fef4e603b0b2f2d, 0x3fca82a025b00451, // 0.97832, 0.20711 - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191 - 0x3fef2252f7763ada, 0x3fcd934fe5454311, // 0.97294, 0.23106 - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298 - 0x3feef178a3e473c2, 0x3fd04fb80e37fdae, // 0.96698, 0.25487 - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671 - 0x3feebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // 0.96043, 0.27852 - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028 - 0x3fee817bab4cd10d, 0x3fd35410c2e18152, // 0.95331, 0.30201 - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368 - 0x3fee426a4b2bc17e, 0x3fd4d1e24278e76a, // 0.94561, 0.32531 - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689 - 0x3fedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // 0.93734, 0.34842 - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599 - 0x3fedb6526238a09b, 0x3fd7c3a9311dcce7, // 0.92851, 0.37132 - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268 - 0x3fed696173c9e68b, 0x3fd9372a63bc93d7, // 0.91911, 0.39399 - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524 - 0x3fed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // 0.90917, 0.41643 - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756 - 0x3fecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // 0.89867, 0.43862 - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961 - 0x3fec678b3488739b, 0x3fdd79775b86e389, // 0.88764, 0.46054 - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714 - 0x3fec08c426725549, 0x3fdedc1952ef78d5, // 0.87607, 0.48218 - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929 - 0x3feba5aa673590d2, 0x3fe01cfc874c3eb7, // 0.86397, 0.50354 - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141 - 0x3feb3e4d3ef55712, 0x3fe0c9704d5d898f, // 0.85136, 0.52459 - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535 - 0x3fead2bc9e21d511, 0x3fe1734d63dedb49, // 0.83822, 0.54532 - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557 - 0x3fea63091b02fae2, 0x3fe21a799933eb58, // 0.82459, 0.56573 - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581 - 0x3fe9ef43ef29af94, 0x3fe2bedb25faf3ea, // 0.81046, 0.5858 - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957 - 0x3fe9777ef4c7d742, 0x3fe36058b10659f3, // 0.79584, 0.60551 - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523 - 0x3fe8fbcca3ef940d, 0x3fe3fed9534556d4, // 0.78074, 0.62486 - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439 - 0x3fe87c400fba2ebf, 0x3fe49a449b9b0938, // 0.76517, 0.64383 - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317 - 0x3fe7f8ece3571771, 0x3fe5328292a35596, // 0.74914, 0.66242 - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156 - 0x3fe771e75f037261, 0x3fe5c77bbe65018c, // 0.73265, 0.6806 - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954 - 0x3fe6e74454eaa8ae, 0x3fe6591925f0783e, // 0.71573, 0.69838 - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711 - 0x3fe6591925f0783e, 0x3fe6e74454eaa8ae, // 0.69838, 0.71573 - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425 - 0x3fe5c77bbe65018c, 0x3fe771e75f037261, // 0.6806, 0.73265 - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095 - 0x3fe5328292a35596, 0x3fe7f8ece3571771, // 0.66242, 0.74914 - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721 - 0x3fe49a449b9b0938, 0x3fe87c400fba2ebf, // 0.64383, 0.76517 - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301 - 0x3fe3fed9534556d4, 0x3fe8fbcca3ef940d, // 0.62486, 0.78074 - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835 - 0x3fe36058b10659f3, 0x3fe9777ef4c7d742, // 0.60551, 0.79584 - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321 - 0x3fe2bedb25faf3ea, 0x3fe9ef43ef29af94, // 0.5858, 0.81046 - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758 - 0x3fe21a799933eb58, 0x3fea63091b02fae2, // 0.56573, 0.82459 - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147 - 0x3fe1734d63dedb49, 0x3fead2bc9e21d511, // 0.54532, 0.83822 - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485 - 0x3fe0c9704d5d898f, 0x3feb3e4d3ef55712, // 0.52459, 0.85136 - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773 - 0x3fe01cfc874c3eb7, 0x3feba5aa673590d2, // 0.50354, 0.86397 - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009 - 0x3fdedc1952ef78d5, 0x3fec08c426725549, // 0.48218, 0.87607 - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192 - 0x3fdd79775b86e389, 0x3fec678b3488739b, // 0.46054, 0.88764 - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322 - 0x3fdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // 0.43862, 0.89867 - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399 - 0x3fdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // 0.41643, 0.90917 - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421 - 0x3fd9372a63bc93d7, 0x3fed696173c9e68b, // 0.39399, 0.91911 - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388 - 0x3fd7c3a9311dcce7, 0x3fedb6526238a09b, // 0.37132, 0.92851 - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299 - 0x3fd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // 0.34842, 0.93734 - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154 - 0x3fd4d1e24278e76a, 0x3fee426a4b2bc17e, // 0.32531, 0.94561 - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953 - 0x3fd35410c2e18152, 0x3fee817bab4cd10d, // 0.30201, 0.95331 - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694 - 0x3fd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // 0.27852, 0.96043 - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378 - 0x3fd04fb80e37fdae, 0x3feef178a3e473c2, // 0.25487, 0.96698 - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003 - 0x3fcd934fe5454311, 0x3fef2252f7763ada, // 0.23106, 0.97294 - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757 - 0x3fca82a025b00451, 0x3fef4e603b0b2f2d, // 0.20711, 0.97832 - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079 - 0x3fc76dd9de50bf31, 0x3fef7599a3a12077, // 0.18304, 0.98311 - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528 - 0x3fc45576b1293e5a, 0x3fef97f924c9099b, // 0.15886, 0.9873 - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918 - 0x3fc139f0cedaf576, 0x3fefb5797195d741, // 0.13458, 0.9909 - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248 - 0x3fbc3785c79ec2d5, 0x3fefce15fd6da67b, // 0.11022, 0.99391 - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518 - 0x3fb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // 0.085797, 0.99631 - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, // 0.073565, 0.99729 - 0x3faf656e79f820e0, 0x3feff095658e71ad, // 0.061321, 0.99812 - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, // 0.049068, 0.9988 - 0x3fa2d865759455cd, 0x3feffa72effef75d, // 0.036807, 0.99932 - 0x3f992155f7a3667e, 0x3feffd886084cd0d, // 0.024541, 0.9997 - 0x3f8921d1fcdec784, 0x3fefff62169b92db, // 0.012272, 0.99992 - 0x0000000000000000, 0x3ff0000000000000, // 0, 1 - 0xbf8921d1fcdec784, 0x3fefff62169b92db, //-0.012272, 0.99992 - 0xbf992155f7a3667e, 0x3feffd886084cd0d, //-0.024541, 0.9997 - 0xbfa2d865759455cd, 0x3feffa72effef75d, //-0.036807, 0.99932 - 0xbfa91f65f10dd814, 0x3feff621e3796d7e, //-0.049068, 0.9988 - 0xbfaf656e79f820e0, 0x3feff095658e71ad, //-0.061321, 0.99812 - 0xbfb2d52092ce19f6, 0x3fefe9cdad01883a, //-0.073565, 0.99729 - 0xbfb5f6d00a9aa419, 0x3fefe1cafcbd5b09, //-0.085797, 0.99631 - 0xbfb917a6bc29b42c, 0x3fefd88da3d12526, //-0.098017, 0.99518 - 0xbfbc3785c79ec2d5, 0x3fefce15fd6da67b, // -0.11022, 0.99391 - 0xbfbf564e56a9730e, 0x3fefc26470e19fd3, // -0.12241, 0.99248 - 0xbfc139f0cedaf576, 0x3fefb5797195d741, // -0.13458, 0.9909 - 0xbfc2c8106e8e613a, 0x3fefa7557f08a517, // -0.14673, 0.98918 - 0xbfc45576b1293e5a, 0x3fef97f924c9099b, // -0.15886, 0.9873 - 0xbfc5e214448b3fc6, 0x3fef8764fa714ba9, // -0.17096, 0.98528 - 0xbfc76dd9de50bf31, 0x3fef7599a3a12077, // -0.18304, 0.98311 - 0xbfc8f8b83c69a60a, 0x3fef6297cff75cb0, // -0.19509, 0.98079 - 0xbfca82a025b00451, 0x3fef4e603b0b2f2d, // -0.20711, 0.97832 - 0xbfcc0b826a7e4f63, 0x3fef38f3ac64e589, // -0.2191, 0.9757 - 0xbfcd934fe5454311, 0x3fef2252f7763ada, // -0.23106, 0.97294 - 0xbfcf19f97b215f1a, 0x3fef0a7efb9230d7, // -0.24298, 0.97003 - 0xbfd04fb80e37fdae, 0x3feef178a3e473c2, // -0.25487, 0.96698 - 0xbfd111d262b1f677, 0x3feed740e7684963, // -0.26671, 0.96378 - 0xbfd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // -0.27852, 0.96043 - 0xbfd294062ed59f05, 0x3fee9f4156c62dda, // -0.29028, 0.95694 - 0xbfd35410c2e18152, 0x3fee817bab4cd10d, // -0.30201, 0.95331 - 0xbfd4135c94176602, 0x3fee6288ec48e112, // -0.31368, 0.94953 - 0xbfd4d1e24278e76a, 0x3fee426a4b2bc17e, // -0.32531, 0.94561 - 0xbfd58f9a75ab1fdd, 0x3fee212104f686e5, // -0.33689, 0.94154 - 0xbfd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // -0.34842, 0.93734 - 0xbfd7088530fa459e, 0x3feddb13b6ccc23d, // -0.3599, 0.93299 - 0xbfd7c3a9311dcce7, 0x3fedb6526238a09b, // -0.37132, 0.92851 - 0xbfd87de2a6aea963, 0x3fed906bcf328d46, // -0.38268, 0.92388 - 0xbfd9372a63bc93d7, 0x3fed696173c9e68b, // -0.39399, 0.91911 - 0xbfd9ef7943a8ed8a, 0x3fed4134d14dc93a, // -0.40524, 0.91421 - 0xbfdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // -0.41643, 0.90917 - 0xbfdb5d1009e15cc0, 0x3feced7af43cc773, // -0.42756, 0.90399 - 0xbfdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // -0.43862, 0.89867 - 0xbfdcc66e9931c45d, 0x3fec954b213411f5, // -0.44961, 0.89322 - 0xbfdd79775b86e389, 0x3fec678b3488739b, // -0.46054, 0.88764 - 0xbfde2b5d3806f63b, 0x3fec38b2f180bdb1, // -0.4714, 0.88192 - 0xbfdedc1952ef78d5, 0x3fec08c426725549, // -0.48218, 0.87607 - 0xbfdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // -0.4929, 0.87009 - 0xbfe01cfc874c3eb7, 0x3feba5aa673590d2, // -0.50354, 0.86397 - 0xbfe073879922ffed, 0x3feb728345196e3e, // -0.5141, 0.85773 - 0xbfe0c9704d5d898f, 0x3feb3e4d3ef55712, // -0.52459, 0.85136 - 0xbfe11eb3541b4b22, 0x3feb090a58150200, // -0.535, 0.84485 - 0xbfe1734d63dedb49, 0x3fead2bc9e21d511, // -0.54532, 0.83822 - 0xbfe1c73b39ae68c8, 0x3fea9b66290ea1a3, // -0.55557, 0.83147 - 0xbfe21a799933eb58, 0x3fea63091b02fae2, // -0.56573, 0.82459 - 0xbfe26d054cdd12df, 0x3fea29a7a0462782, // -0.57581, 0.81758 - 0xbfe2bedb25faf3ea, 0x3fe9ef43ef29af94, // -0.5858, 0.81046 - 0xbfe30ff7fce17035, 0x3fe9b3e047f38741, // -0.5957, 0.80321 - 0xbfe36058b10659f3, 0x3fe9777ef4c7d742, // -0.60551, 0.79584 - 0xbfe3affa292050b9, 0x3fe93a22499263fc, // -0.61523, 0.78835 - 0xbfe3fed9534556d4, 0x3fe8fbcca3ef940d, // -0.62486, 0.78074 - 0xbfe44cf325091dd6, 0x3fe8bc806b151741, // -0.63439, 0.77301 - 0xbfe49a449b9b0938, 0x3fe87c400fba2ebf, // -0.64383, 0.76517 - 0xbfe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // -0.65317, 0.75721 - 0xbfe5328292a35596, 0x3fe7f8ece3571771, // -0.66242, 0.74914 - 0xbfe57d69348cec9f, 0x3fe7b5df226aafb0, // -0.67156, 0.74095 - 0xbfe5c77bbe65018c, 0x3fe771e75f037261, // -0.6806, 0.73265 - 0xbfe610b7551d2cde, 0x3fe72d0837efff97, // -0.68954, 0.72425 - 0xbfe6591925f0783e, 0x3fe6e74454eaa8ae, // -0.69838, 0.71573 - 0xbfe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // -0.70711, 0.70711 - 0xbfe6e74454eaa8ae, 0x3fe6591925f0783e, // -0.71573, 0.69838 - 0xbfe72d0837efff97, 0x3fe610b7551d2cde, // -0.72425, 0.68954 - 0xbfe771e75f037261, 0x3fe5c77bbe65018c, // -0.73265, 0.6806 - 0xbfe7b5df226aafb0, 0x3fe57d69348cec9f, // -0.74095, 0.67156 - 0xbfe7f8ece3571771, 0x3fe5328292a35596, // -0.74914, 0.66242 - 0xbfe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // -0.75721, 0.65317 - 0xbfe87c400fba2ebf, 0x3fe49a449b9b0938, // -0.76517, 0.64383 - 0xbfe8bc806b151741, 0x3fe44cf325091dd6, // -0.77301, 0.63439 - 0xbfe8fbcca3ef940d, 0x3fe3fed9534556d4, // -0.78074, 0.62486 - 0xbfe93a22499263fc, 0x3fe3affa292050b9, // -0.78835, 0.61523 - 0xbfe9777ef4c7d742, 0x3fe36058b10659f3, // -0.79584, 0.60551 - 0xbfe9b3e047f38741, 0x3fe30ff7fce17035, // -0.80321, 0.5957 - 0xbfe9ef43ef29af94, 0x3fe2bedb25faf3ea, // -0.81046, 0.5858 - 0xbfea29a7a0462782, 0x3fe26d054cdd12df, // -0.81758, 0.57581 - 0xbfea63091b02fae2, 0x3fe21a799933eb58, // -0.82459, 0.56573 - 0xbfea9b66290ea1a3, 0x3fe1c73b39ae68c8, // -0.83147, 0.55557 - 0xbfead2bc9e21d511, 0x3fe1734d63dedb49, // -0.83822, 0.54532 - 0xbfeb090a58150200, 0x3fe11eb3541b4b22, // -0.84485, 0.535 - 0xbfeb3e4d3ef55712, 0x3fe0c9704d5d898f, // -0.85136, 0.52459 - 0xbfeb728345196e3e, 0x3fe073879922ffed, // -0.85773, 0.5141 - 0xbfeba5aa673590d2, 0x3fe01cfc874c3eb7, // -0.86397, 0.50354 - 0xbfebd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // -0.87009, 0.4929 - 0xbfec08c426725549, 0x3fdedc1952ef78d5, // -0.87607, 0.48218 - 0xbfec38b2f180bdb1, 0x3fde2b5d3806f63b, // -0.88192, 0.4714 - 0xbfec678b3488739b, 0x3fdd79775b86e389, // -0.88764, 0.46054 - 0xbfec954b213411f5, 0x3fdcc66e9931c45d, // -0.89322, 0.44961 - 0xbfecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // -0.89867, 0.43862 - 0xbfeced7af43cc773, 0x3fdb5d1009e15cc0, // -0.90399, 0.42756 - 0xbfed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // -0.90917, 0.41643 - 0xbfed4134d14dc93a, 0x3fd9ef7943a8ed8a, // -0.91421, 0.40524 - 0xbfed696173c9e68b, 0x3fd9372a63bc93d7, // -0.91911, 0.39399 - 0xbfed906bcf328d46, 0x3fd87de2a6aea963, // -0.92388, 0.38268 - 0xbfedb6526238a09b, 0x3fd7c3a9311dcce7, // -0.92851, 0.37132 - 0xbfeddb13b6ccc23d, 0x3fd7088530fa459e, // -0.93299, 0.3599 - 0xbfedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // -0.93734, 0.34842 - 0xbfee212104f686e5, 0x3fd58f9a75ab1fdd, // -0.94154, 0.33689 - 0xbfee426a4b2bc17e, 0x3fd4d1e24278e76a, // -0.94561, 0.32531 - 0xbfee6288ec48e112, 0x3fd4135c94176602, // -0.94953, 0.31368 - 0xbfee817bab4cd10d, 0x3fd35410c2e18152, // -0.95331, 0.30201 - 0xbfee9f4156c62dda, 0x3fd294062ed59f05, // -0.95694, 0.29028 - 0xbfeebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // -0.96043, 0.27852 - 0xbfeed740e7684963, 0x3fd111d262b1f677, // -0.96378, 0.26671 - 0xbfeef178a3e473c2, 0x3fd04fb80e37fdae, // -0.96698, 0.25487 - 0xbfef0a7efb9230d7, 0x3fcf19f97b215f1a, // -0.97003, 0.24298 - 0xbfef2252f7763ada, 0x3fcd934fe5454311, // -0.97294, 0.23106 - 0xbfef38f3ac64e589, 0x3fcc0b826a7e4f63, // -0.9757, 0.2191 - 0xbfef4e603b0b2f2d, 0x3fca82a025b00451, // -0.97832, 0.20711 - 0xbfef6297cff75cb0, 0x3fc8f8b83c69a60a, // -0.98079, 0.19509 - 0xbfef7599a3a12077, 0x3fc76dd9de50bf31, // -0.98311, 0.18304 - 0xbfef8764fa714ba9, 0x3fc5e214448b3fc6, // -0.98528, 0.17096 - 0xbfef97f924c9099b, 0x3fc45576b1293e5a, // -0.9873, 0.15886 - 0xbfefa7557f08a517, 0x3fc2c8106e8e613a, // -0.98918, 0.14673 - 0xbfefb5797195d741, 0x3fc139f0cedaf576, // -0.9909, 0.13458 - 0xbfefc26470e19fd3, 0x3fbf564e56a9730e, // -0.99248, 0.12241 - 0xbfefce15fd6da67b, 0x3fbc3785c79ec2d5, // -0.99391, 0.11022 - 0xbfefd88da3d12526, 0x3fb917a6bc29b42c, // -0.99518, 0.098017 - 0xbfefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // -0.99631, 0.085797 - 0xbfefe9cdad01883a, 0x3fb2d52092ce19f6, // -0.99729, 0.073565 - 0xbfeff095658e71ad, 0x3faf656e79f820e0, // -0.99812, 0.061321 - 0xbfeff621e3796d7e, 0x3fa91f65f10dd814, // -0.9988, 0.049068 - 0xbfeffa72effef75d, 0x3fa2d865759455cd, // -0.99932, 0.036807 - 0xbfeffd886084cd0d, 0x3f992155f7a3667e, // -0.9997, 0.024541 - 0xbfefff62169b92db, 0x3f8921d1fcdec784, // -0.99992, 0.012272 - 0xbff0000000000000, 0x0000000000000000, // -1, 0 - 0xbfefff62169b92db, 0xbf8921d1fcdec784, // -0.99992,-0.012272 - 0xbfeffd886084cd0d, 0xbf992155f7a3667e, // -0.9997,-0.024541 - 0xbfeffa72effef75d, 0xbfa2d865759455cd, // -0.99932,-0.036807 - 0xbfeff621e3796d7e, 0xbfa91f65f10dd814, // -0.9988,-0.049068 - 0xbfeff095658e71ad, 0xbfaf656e79f820e0, // -0.99812,-0.061321 - 0xbfefe9cdad01883a, 0xbfb2d52092ce19f6, // -0.99729,-0.073565 - 0xbfefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // -0.99631,-0.085797 - 0xbfefd88da3d12526, 0xbfb917a6bc29b42c, // -0.99518,-0.098017 - 0xbfefce15fd6da67b, 0xbfbc3785c79ec2d5, // -0.99391, -0.11022 - 0xbfefc26470e19fd3, 0xbfbf564e56a9730e, // -0.99248, -0.12241 - 0xbfefb5797195d741, 0xbfc139f0cedaf576, // -0.9909, -0.13458 - 0xbfefa7557f08a517, 0xbfc2c8106e8e613a, // -0.98918, -0.14673 - 0xbfef97f924c9099b, 0xbfc45576b1293e5a, // -0.9873, -0.15886 - 0xbfef8764fa714ba9, 0xbfc5e214448b3fc6, // -0.98528, -0.17096 - 0xbfef7599a3a12077, 0xbfc76dd9de50bf31, // -0.98311, -0.18304 - 0xbfef6297cff75cb0, 0xbfc8f8b83c69a60a, // -0.98079, -0.19509 - 0xbfef4e603b0b2f2d, 0xbfca82a025b00451, // -0.97832, -0.20711 - 0xbfef38f3ac64e589, 0xbfcc0b826a7e4f63, // -0.9757, -0.2191 - 0xbfef2252f7763ada, 0xbfcd934fe5454311, // -0.97294, -0.23106 - 0xbfef0a7efb9230d7, 0xbfcf19f97b215f1a, // -0.97003, -0.24298 - 0xbfeef178a3e473c2, 0xbfd04fb80e37fdae, // -0.96698, -0.25487 - 0xbfeed740e7684963, 0xbfd111d262b1f677, // -0.96378, -0.26671 - 0xbfeebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // -0.96043, -0.27852 - 0xbfee9f4156c62dda, 0xbfd294062ed59f05, // -0.95694, -0.29028 - 0xbfee817bab4cd10d, 0xbfd35410c2e18152, // -0.95331, -0.30201 - 0xbfee6288ec48e112, 0xbfd4135c94176602, // -0.94953, -0.31368 - 0xbfee426a4b2bc17e, 0xbfd4d1e24278e76a, // -0.94561, -0.32531 - 0xbfee212104f686e5, 0xbfd58f9a75ab1fdd, // -0.94154, -0.33689 - 0xbfedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // -0.93734, -0.34842 - 0xbfeddb13b6ccc23d, 0xbfd7088530fa459e, // -0.93299, -0.3599 - 0xbfedb6526238a09b, 0xbfd7c3a9311dcce7, // -0.92851, -0.37132 - 0xbfed906bcf328d46, 0xbfd87de2a6aea963, // -0.92388, -0.38268 - 0xbfed696173c9e68b, 0xbfd9372a63bc93d7, // -0.91911, -0.39399 - 0xbfed4134d14dc93a, 0xbfd9ef7943a8ed8a, // -0.91421, -0.40524 - 0xbfed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // -0.90917, -0.41643 - 0xbfeced7af43cc773, 0xbfdb5d1009e15cc0, // -0.90399, -0.42756 - 0xbfecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // -0.89867, -0.43862 - 0xbfec954b213411f5, 0xbfdcc66e9931c45d, // -0.89322, -0.44961 - 0xbfec678b3488739b, 0xbfdd79775b86e389, // -0.88764, -0.46054 - 0xbfec38b2f180bdb1, 0xbfde2b5d3806f63b, // -0.88192, -0.4714 - 0xbfec08c426725549, 0xbfdedc1952ef78d5, // -0.87607, -0.48218 - 0xbfebd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // -0.87009, -0.4929 - 0xbfeba5aa673590d2, 0xbfe01cfc874c3eb7, // -0.86397, -0.50354 - 0xbfeb728345196e3e, 0xbfe073879922ffed, // -0.85773, -0.5141 - 0xbfeb3e4d3ef55712, 0xbfe0c9704d5d898f, // -0.85136, -0.52459 - 0xbfeb090a58150200, 0xbfe11eb3541b4b22, // -0.84485, -0.535 - 0xbfead2bc9e21d511, 0xbfe1734d63dedb49, // -0.83822, -0.54532 - 0xbfea9b66290ea1a3, 0xbfe1c73b39ae68c8, // -0.83147, -0.55557 - 0xbfea63091b02fae2, 0xbfe21a799933eb58, // -0.82459, -0.56573 - 0xbfea29a7a0462782, 0xbfe26d054cdd12df, // -0.81758, -0.57581 - 0xbfe9ef43ef29af94, 0xbfe2bedb25faf3ea, // -0.81046, -0.5858 - 0xbfe9b3e047f38741, 0xbfe30ff7fce17035, // -0.80321, -0.5957 - 0xbfe9777ef4c7d742, 0xbfe36058b10659f3, // -0.79584, -0.60551 - 0xbfe93a22499263fc, 0xbfe3affa292050b9, // -0.78835, -0.61523 - 0xbfe8fbcca3ef940d, 0xbfe3fed9534556d4, // -0.78074, -0.62486 - 0xbfe8bc806b151741, 0xbfe44cf325091dd6, // -0.77301, -0.63439 - 0xbfe87c400fba2ebf, 0xbfe49a449b9b0938, // -0.76517, -0.64383 - 0xbfe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // -0.75721, -0.65317 - 0xbfe7f8ece3571771, 0xbfe5328292a35596, // -0.74914, -0.66242 - 0xbfe7b5df226aafb0, 0xbfe57d69348cec9f, // -0.74095, -0.67156 - 0xbfe771e75f037261, 0xbfe5c77bbe65018c, // -0.73265, -0.6806 - 0xbfe72d0837efff97, 0xbfe610b7551d2cde, // -0.72425, -0.68954 - 0xbfe6e74454eaa8ae, 0xbfe6591925f0783e, // -0.71573, -0.69838 - 0xbfe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // -0.70711, -0.70711 - 0xbfe6591925f0783e, 0xbfe6e74454eaa8ae, // -0.69838, -0.71573 - 0xbfe610b7551d2cde, 0xbfe72d0837efff97, // -0.68954, -0.72425 - 0xbfe5c77bbe65018c, 0xbfe771e75f037261, // -0.6806, -0.73265 - 0xbfe57d69348cec9f, 0xbfe7b5df226aafb0, // -0.67156, -0.74095 - 0xbfe5328292a35596, 0xbfe7f8ece3571771, // -0.66242, -0.74914 - 0xbfe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // -0.65317, -0.75721 - 0xbfe49a449b9b0938, 0xbfe87c400fba2ebf, // -0.64383, -0.76517 - 0xbfe44cf325091dd6, 0xbfe8bc806b151741, // -0.63439, -0.77301 - 0xbfe3fed9534556d4, 0xbfe8fbcca3ef940d, // -0.62486, -0.78074 - 0xbfe3affa292050b9, 0xbfe93a22499263fc, // -0.61523, -0.78835 - 0xbfe36058b10659f3, 0xbfe9777ef4c7d742, // -0.60551, -0.79584 - 0xbfe30ff7fce17035, 0xbfe9b3e047f38741, // -0.5957, -0.80321 - 0xbfe2bedb25faf3ea, 0xbfe9ef43ef29af94, // -0.5858, -0.81046 - 0xbfe26d054cdd12df, 0xbfea29a7a0462782, // -0.57581, -0.81758 - 0xbfe21a799933eb58, 0xbfea63091b02fae2, // -0.56573, -0.82459 - 0xbfe1c73b39ae68c8, 0xbfea9b66290ea1a3, // -0.55557, -0.83147 - 0xbfe1734d63dedb49, 0xbfead2bc9e21d511, // -0.54532, -0.83822 - 0xbfe11eb3541b4b22, 0xbfeb090a58150200, // -0.535, -0.84485 - 0xbfe0c9704d5d898f, 0xbfeb3e4d3ef55712, // -0.52459, -0.85136 - 0xbfe073879922ffed, 0xbfeb728345196e3e, // -0.5141, -0.85773 - 0xbfe01cfc874c3eb7, 0xbfeba5aa673590d2, // -0.50354, -0.86397 - 0xbfdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // -0.4929, -0.87009 - 0xbfdedc1952ef78d5, 0xbfec08c426725549, // -0.48218, -0.87607 - 0xbfde2b5d3806f63b, 0xbfec38b2f180bdb1, // -0.4714, -0.88192 - 0xbfdd79775b86e389, 0xbfec678b3488739b, // -0.46054, -0.88764 - 0xbfdcc66e9931c45d, 0xbfec954b213411f5, // -0.44961, -0.89322 - 0xbfdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // -0.43862, -0.89867 - 0xbfdb5d1009e15cc0, 0xbfeced7af43cc773, // -0.42756, -0.90399 - 0xbfdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // -0.41643, -0.90917 - 0xbfd9ef7943a8ed8a, 0xbfed4134d14dc93a, // -0.40524, -0.91421 - 0xbfd9372a63bc93d7, 0xbfed696173c9e68b, // -0.39399, -0.91911 - 0xbfd87de2a6aea963, 0xbfed906bcf328d46, // -0.38268, -0.92388 - 0xbfd7c3a9311dcce7, 0xbfedb6526238a09b, // -0.37132, -0.92851 - 0xbfd7088530fa459e, 0xbfeddb13b6ccc23d, // -0.3599, -0.93299 - 0xbfd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // -0.34842, -0.93734 - 0xbfd58f9a75ab1fdd, 0xbfee212104f686e5, // -0.33689, -0.94154 - 0xbfd4d1e24278e76a, 0xbfee426a4b2bc17e, // -0.32531, -0.94561 - 0xbfd4135c94176602, 0xbfee6288ec48e112, // -0.31368, -0.94953 - 0xbfd35410c2e18152, 0xbfee817bab4cd10d, // -0.30201, -0.95331 - 0xbfd294062ed59f05, 0xbfee9f4156c62dda, // -0.29028, -0.95694 - 0xbfd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // -0.27852, -0.96043 - 0xbfd111d262b1f677, 0xbfeed740e7684963, // -0.26671, -0.96378 - 0xbfd04fb80e37fdae, 0xbfeef178a3e473c2, // -0.25487, -0.96698 - 0xbfcf19f97b215f1a, 0xbfef0a7efb9230d7, // -0.24298, -0.97003 - 0xbfcd934fe5454311, 0xbfef2252f7763ada, // -0.23106, -0.97294 - 0xbfcc0b826a7e4f63, 0xbfef38f3ac64e589, // -0.2191, -0.9757 - 0xbfca82a025b00451, 0xbfef4e603b0b2f2d, // -0.20711, -0.97832 - 0xbfc8f8b83c69a60a, 0xbfef6297cff75cb0, // -0.19509, -0.98079 - 0xbfc76dd9de50bf31, 0xbfef7599a3a12077, // -0.18304, -0.98311 - 0xbfc5e214448b3fc6, 0xbfef8764fa714ba9, // -0.17096, -0.98528 - 0xbfc45576b1293e5a, 0xbfef97f924c9099b, // -0.15886, -0.9873 - 0xbfc2c8106e8e613a, 0xbfefa7557f08a517, // -0.14673, -0.98918 - 0xbfc139f0cedaf576, 0xbfefb5797195d741, // -0.13458, -0.9909 - 0xbfbf564e56a9730e, 0xbfefc26470e19fd3, // -0.12241, -0.99248 - 0xbfbc3785c79ec2d5, 0xbfefce15fd6da67b, // -0.11022, -0.99391 - 0xbfb917a6bc29b42c, 0xbfefd88da3d12526, //-0.098017, -0.99518 - 0xbfb5f6d00a9aa419, 0xbfefe1cafcbd5b09, //-0.085797, -0.99631 - 0xbfb2d52092ce19f6, 0xbfefe9cdad01883a, //-0.073565, -0.99729 - 0xbfaf656e79f820e0, 0xbfeff095658e71ad, //-0.061321, -0.99812 - 0xbfa91f65f10dd814, 0xbfeff621e3796d7e, //-0.049068, -0.9988 - 0xbfa2d865759455cd, 0xbfeffa72effef75d, //-0.036807, -0.99932 - 0xbf992155f7a3667e, 0xbfeffd886084cd0d, //-0.024541, -0.9997 - 0xbf8921d1fcdec784, 0xbfefff62169b92db, //-0.012272, -0.99992 - 0x0000000000000000, 0xbff0000000000000, // 0, -1 - 0x3f8921d1fcdec784, 0xbfefff62169b92db, // 0.012272, -0.99992 - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, // 0.024541, -0.9997 - 0x3fa2d865759455cd, 0xbfeffa72effef75d, // 0.036807, -0.99932 - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, // 0.049068, -0.9988 - 0x3faf656e79f820e0, 0xbfeff095658e71ad, // 0.061321, -0.99812 - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, // 0.073565, -0.99729 - 0x3fb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // 0.085797, -0.99631 - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518 - 0x3fbc3785c79ec2d5, 0xbfefce15fd6da67b, // 0.11022, -0.99391 - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248 - 0x3fc139f0cedaf576, 0xbfefb5797195d741, // 0.13458, -0.9909 - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918 - 0x3fc45576b1293e5a, 0xbfef97f924c9099b, // 0.15886, -0.9873 - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528 - 0x3fc76dd9de50bf31, 0xbfef7599a3a12077, // 0.18304, -0.98311 - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079 - 0x3fca82a025b00451, 0xbfef4e603b0b2f2d, // 0.20711, -0.97832 - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757 - 0x3fcd934fe5454311, 0xbfef2252f7763ada, // 0.23106, -0.97294 - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003 - 0x3fd04fb80e37fdae, 0xbfeef178a3e473c2, // 0.25487, -0.96698 - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378 - 0x3fd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // 0.27852, -0.96043 - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694 - 0x3fd35410c2e18152, 0xbfee817bab4cd10d, // 0.30201, -0.95331 - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953 - 0x3fd4d1e24278e76a, 0xbfee426a4b2bc17e, // 0.32531, -0.94561 - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154 - 0x3fd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // 0.34842, -0.93734 - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299 - 0x3fd7c3a9311dcce7, 0xbfedb6526238a09b, // 0.37132, -0.92851 - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388 - 0x3fd9372a63bc93d7, 0xbfed696173c9e68b, // 0.39399, -0.91911 - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421 - 0x3fdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // 0.41643, -0.90917 - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399 - 0x3fdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // 0.43862, -0.89867 - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322 - 0x3fdd79775b86e389, 0xbfec678b3488739b, // 0.46054, -0.88764 - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192 - 0x3fdedc1952ef78d5, 0xbfec08c426725549, // 0.48218, -0.87607 - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009 - 0x3fe01cfc874c3eb7, 0xbfeba5aa673590d2, // 0.50354, -0.86397 - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773 - 0x3fe0c9704d5d898f, 0xbfeb3e4d3ef55712, // 0.52459, -0.85136 - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485 - 0x3fe1734d63dedb49, 0xbfead2bc9e21d511, // 0.54532, -0.83822 - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147 - 0x3fe21a799933eb58, 0xbfea63091b02fae2, // 0.56573, -0.82459 - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758 - 0x3fe2bedb25faf3ea, 0xbfe9ef43ef29af94, // 0.5858, -0.81046 - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321 - 0x3fe36058b10659f3, 0xbfe9777ef4c7d742, // 0.60551, -0.79584 - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835 - 0x3fe3fed9534556d4, 0xbfe8fbcca3ef940d, // 0.62486, -0.78074 - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301 - 0x3fe49a449b9b0938, 0xbfe87c400fba2ebf, // 0.64383, -0.76517 - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721 - 0x3fe5328292a35596, 0xbfe7f8ece3571771, // 0.66242, -0.74914 - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095 - 0x3fe5c77bbe65018c, 0xbfe771e75f037261, // 0.6806, -0.73265 - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425 - 0x3fe6591925f0783e, 0xbfe6e74454eaa8ae, // 0.69838, -0.71573 - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711 - 0x3fe6e74454eaa8ae, 0xbfe6591925f0783e, // 0.71573, -0.69838 - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954 - 0x3fe771e75f037261, 0xbfe5c77bbe65018c, // 0.73265, -0.6806 - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156 - 0x3fe7f8ece3571771, 0xbfe5328292a35596, // 0.74914, -0.66242 - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317 - 0x3fe87c400fba2ebf, 0xbfe49a449b9b0938, // 0.76517, -0.64383 - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439 - 0x3fe8fbcca3ef940d, 0xbfe3fed9534556d4, // 0.78074, -0.62486 - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523 - 0x3fe9777ef4c7d742, 0xbfe36058b10659f3, // 0.79584, -0.60551 - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957 - 0x3fe9ef43ef29af94, 0xbfe2bedb25faf3ea, // 0.81046, -0.5858 - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581 - 0x3fea63091b02fae2, 0xbfe21a799933eb58, // 0.82459, -0.56573 - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557 - 0x3fead2bc9e21d511, 0xbfe1734d63dedb49, // 0.83822, -0.54532 - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535 - 0x3feb3e4d3ef55712, 0xbfe0c9704d5d898f, // 0.85136, -0.52459 - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141 - 0x3feba5aa673590d2, 0xbfe01cfc874c3eb7, // 0.86397, -0.50354 - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929 - 0x3fec08c426725549, 0xbfdedc1952ef78d5, // 0.87607, -0.48218 - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714 - 0x3fec678b3488739b, 0xbfdd79775b86e389, // 0.88764, -0.46054 - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961 - 0x3fecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // 0.89867, -0.43862 - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756 - 0x3fed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // 0.90917, -0.41643 - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524 - 0x3fed696173c9e68b, 0xbfd9372a63bc93d7, // 0.91911, -0.39399 - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268 - 0x3fedb6526238a09b, 0xbfd7c3a9311dcce7, // 0.92851, -0.37132 - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599 - 0x3fedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // 0.93734, -0.34842 - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689 - 0x3fee426a4b2bc17e, 0xbfd4d1e24278e76a, // 0.94561, -0.32531 - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368 - 0x3fee817bab4cd10d, 0xbfd35410c2e18152, // 0.95331, -0.30201 - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028 - 0x3feebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // 0.96043, -0.27852 - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671 - 0x3feef178a3e473c2, 0xbfd04fb80e37fdae, // 0.96698, -0.25487 - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298 - 0x3fef2252f7763ada, 0xbfcd934fe5454311, // 0.97294, -0.23106 - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191 - 0x3fef4e603b0b2f2d, 0xbfca82a025b00451, // 0.97832, -0.20711 - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509 - 0x3fef7599a3a12077, 0xbfc76dd9de50bf31, // 0.98311, -0.18304 - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096 - 0x3fef97f924c9099b, 0xbfc45576b1293e5a, // 0.9873, -0.15886 - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673 - 0x3fefb5797195d741, 0xbfc139f0cedaf576, // 0.9909, -0.13458 - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241 - 0x3fefce15fd6da67b, 0xbfbc3785c79ec2d5, // 0.99391, -0.11022 - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518,-0.098017 - 0x3fefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // 0.99631,-0.085797 - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729,-0.073565 - 0x3feff095658e71ad, 0xbfaf656e79f820e0, // 0.99812,-0.061321 - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988,-0.049068 - 0x3feffa72effef75d, 0xbfa2d865759455cd, // 0.99932,-0.036807 - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997,-0.024541 - 0x3fefff62169b92db, 0xbf8921d1fcdec784, // 0.99992,-0.012272 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_1024) -/** - @par - Example code for Double Precision 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, PI = 3.14159265358979 - @par - Cos and Sin values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_1024[2048] = { - 0x3ff0000000000000, 0x0000000000000000, // 1, 0 - 0x3fefffd8858e8a92, 0x3f7921f0fe670071, // 0.99998, 0.0061359 - 0x3fefff62169b92db, 0x3f8921d1fcdec784, // 0.99992, 0.012272 - 0x3feffe9cb44b51a1, 0x3f92d936bbe30efd, // 0.99983, 0.018407 - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541 - 0x3feffc251df1d3f8, 0x3f9f693731d1cf01, // 0.99953, 0.030675 - 0x3feffa72effef75d, 0x3fa2d865759455cd, // 0.99932, 0.036807 - 0x3feff871dadb81df, 0x3fa5fc00d290cd43, // 0.99908, 0.042938 - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068 - 0x3feff3830f8d575c, 0x3fac428d12c0d7e3, // 0.99848, 0.055195 - 0x3feff095658e71ad, 0x3faf656e79f820e0, // 0.99812, 0.061321 - 0x3fefed58ecb673c4, 0x3fb1440134d709b2, // 0.99772, 0.067444 - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565 - 0x3fefe5f3af2e3940, 0x3fb4661179272096, // 0.99682, 0.079682 - 0x3fefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // 0.99631, 0.085797 - 0x3fefdd539ff1f456, 0x3fb787586a5d5b21, // 0.99577, 0.091909 - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017 - 0x3fefd37914220b84, 0x3fbaa7b724495c04, // 0.99456, 0.10412 - 0x3fefce15fd6da67b, 0x3fbc3785c79ec2d5, // 0.99391, 0.11022 - 0x3fefc8646cfeb721, 0x3fbdc70ecbae9fc8, // 0.99321, 0.11632 - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241 - 0x3fefbc1617e44186, 0x3fc072a047ba831d, // 0.99171, 0.1285 - 0x3fefb5797195d741, 0x3fc139f0cedaf576, // 0.9909, 0.13458 - 0x3fefae8e8e46cfbb, 0x3fc20116d4ec7bce, // 0.99006, 0.14066 - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673 - 0x3fef9fce55adb2c8, 0x3fc38edbb0cd8d14, // 0.98826, 0.1528 - 0x3fef97f924c9099b, 0x3fc45576b1293e5a, // 0.9873, 0.15886 - 0x3fef8fd5ffae41db, 0x3fc51bdf8597c5f2, // 0.98631, 0.16491 - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096 - 0x3fef7ea629e63d6e, 0x3fc6a81304f64ab2, // 0.98421, 0.177 - 0x3fef7599a3a12077, 0x3fc76dd9de50bf31, // 0.98311, 0.18304 - 0x3fef6c3f7df5bbb7, 0x3fc83366e89c64c5, // 0.98196, 0.18907 - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509 - 0x3fef58a2b1789e84, 0x3fc9bdcbf2dc4366, // 0.97957, 0.2011 - 0x3fef4e603b0b2f2d, 0x3fca82a025b00451, // 0.97832, 0.20711 - 0x3fef43d085ff92dd, 0x3fcb4732ef3d6722, // 0.97703, 0.21311 - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191 - 0x3fef2dc9c9089a9d, 0x3fcccf8cb312b286, // 0.97434, 0.22508 - 0x3fef2252f7763ada, 0x3fcd934fe5454311, // 0.97294, 0.23106 - 0x3fef168f53f7205d, 0x3fce56ca1e101a1b, // 0.9715, 0.23702 - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298 - 0x3feefe220c0b95ec, 0x3fcfdcdc1adfedf8, // 0.96852, 0.24893 - 0x3feef178a3e473c2, 0x3fd04fb80e37fdae, // 0.96698, 0.25487 - 0x3feee482e25a9dbc, 0x3fd0b0d9cfdbdb90, // 0.96539, 0.26079 - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671 - 0x3feec9b2d3c3bf84, 0x3fd172a0d7765177, // 0.96212, 0.27262 - 0x3feebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // 0.96043, 0.27852 - 0x3feeadb2e8e7a88e, 0x3fd233bbabc3bb72, // 0.9587, 0.28441 - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028 - 0x3fee9084361df7f3, 0x3fd2f422daec0386, // 0.95514, 0.29615 - 0x3fee817bab4cd10d, 0x3fd35410c2e18152, // 0.95331, 0.30201 - 0x3fee7227db6a9744, 0x3fd3b3cefa0414b7, // 0.95144, 0.30785 - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368 - 0x3fee529f04729ffc, 0x3fd472b8a5571054, // 0.94759, 0.3195 - 0x3fee426a4b2bc17e, 0x3fd4d1e24278e76a, // 0.94561, 0.32531 - 0x3fee31eae870ce25, 0x3fd530d880af3c24, // 0.94359, 0.33111 - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689 - 0x3fee100cca2980ac, 0x3fd5ee27379ea693, // 0.93946, 0.34266 - 0x3fedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // 0.93734, 0.34842 - 0x3feded05f7de47da, 0x3fd6aa9d7dc77e16, // 0.93518, 0.35416 - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599 - 0x3fedc8d7cb410260, 0x3fd766340f2418f6, // 0.93077, 0.36561 - 0x3fedb6526238a09b, 0x3fd7c3a9311dcce7, // 0.92851, 0.37132 - 0x3feda383a9668988, 0x3fd820e3b04eaac4, // 0.92621, 0.37701 - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268 - 0x3fed7d0b02b8ecf9, 0x3fd8daa52ec8a4af, // 0.92151, 0.38835 - 0x3fed696173c9e68b, 0x3fd9372a63bc93d7, // 0.91911, 0.39399 - 0x3fed556f52e93eb1, 0x3fd993716141bdfe, // 0.91668, 0.39962 - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524 - 0x3fed2cb220e0ef9f, 0x3fda4b4127dea1e4, // 0.91171, 0.41084 - 0x3fed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // 0.90917, 0.41643 - 0x3fed02d4feb2bd92, 0x3fdb020d6c7f4009, // 0.9066, 0.422 - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756 - 0x3fecd7d9898b32f6, 0x3fdbb7cf2304bd01, // 0.90135, 0.43309 - 0x3fecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // 0.89867, 0.43862 - 0x3fecabc169a0b901, 0x3fdc6c7f4997000a, // 0.89597, 0.44412 - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961 - 0x3fec7e8e52233cf3, 0x3fdd2016e8e9db5b, // 0.89045, 0.45508 - 0x3fec678b3488739b, 0x3fdd79775b86e389, // 0.88764, 0.46054 - 0x3fec5042012b6907, 0x3fddd28f1481cc58, // 0.8848, 0.46598 - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714 - 0x3fec20de3fa971b0, 0x3fde83e0eaf85113, // 0.87901, 0.4768 - 0x3fec08c426725549, 0x3fdedc1952ef78d5, // 0.87607, 0.48218 - 0x3febf064e15377dd, 0x3fdf3405963fd068, // 0.87309, 0.48755 - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929 - 0x3febbed7c49380ea, 0x3fdfe2f64be7120f, // 0.86705, 0.49823 - 0x3feba5aa673590d2, 0x3fe01cfc874c3eb7, // 0.86397, 0.50354 - 0x3feb8c38d27504e9, 0x3fe0485626ae221a, // 0.86087, 0.50883 - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141 - 0x3feb5889fe921405, 0x3fe09e907417c5e1, // 0.85456, 0.51936 - 0x3feb3e4d3ef55712, 0x3fe0c9704d5d898f, // 0.85136, 0.52459 - 0x3feb23cd470013b4, 0x3fe0f426bb2a8e7d, // 0.84812, 0.5298 - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535 - 0x3feaee04b43c1474, 0x3fe14915af336ceb, // 0.84155, 0.54017 - 0x3fead2bc9e21d511, 0x3fe1734d63dedb49, // 0.83822, 0.54532 - 0x3feab7325916c0d4, 0x3fe19d5a09f2b9b8, // 0.83486, 0.55046 - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557 - 0x3fea7f58529fe69d, 0x3fe1f0f08bbc861b, // 0.82805, 0.56066 - 0x3fea63091b02fae2, 0x3fe21a799933eb58, // 0.82459, 0.56573 - 0x3fea4678c8119ac8, 0x3fe243d5fb98ac1f, // 0.8211, 0.57078 - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581 - 0x3fea0c95eabaf937, 0x3fe2960727629ca8, // 0.81404, 0.58081 - 0x3fe9ef43ef29af94, 0x3fe2bedb25faf3ea, // 0.81046, 0.5858 - 0x3fe9d1b1f5ea80d6, 0x3fe2e780e3e8ea16, // 0.80685, 0.59076 - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957 - 0x3fe995cf2ed80d22, 0x3fe338400d0c8e57, // 0.79954, 0.60062 - 0x3fe9777ef4c7d742, 0x3fe36058b10659f3, // 0.79584, 0.60551 - 0x3fe958efe48e6dd7, 0x3fe3884185dfeb22, // 0.79211, 0.61038 - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523 - 0x3fe91b166fd49da2, 0x3fe3d78238c58343, // 0.78456, 0.62006 - 0x3fe8fbcca3ef940d, 0x3fe3fed9534556d4, // 0.78074, 0.62486 - 0x3fe8dc45331698cc, 0x3fe425ff178e6bb1, // 0.77689, 0.62964 - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439 - 0x3fe89c7e9a4dd4ab, 0x3fe473b51b987347, // 0.7691, 0.63912 - 0x3fe87c400fba2ebf, 0x3fe49a449b9b0938, // 0.76517, 0.64383 - 0x3fe85bc51ae958cc, 0x3fe4c0a145ec0004, // 0.7612, 0.64851 - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317 - 0x3fe81a1b33b57acc, 0x3fe50cc09f59a09b, // 0.75319, 0.65781 - 0x3fe7f8ece3571771, 0x3fe5328292a35596, // 0.74914, 0.66242 - 0x3fe7d7836cc33db2, 0x3fe5581038975137, // 0.74506, 0.667 - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156 - 0x3fe79400574f55e4, 0x3fe5a28d2a5d7250, // 0.73682, 0.67609 - 0x3fe771e75f037261, 0x3fe5c77bbe65018c, // 0.73265, 0.6806 - 0x3fe74f948da8d28d, 0x3fe5ec3495837074, // 0.72846, 0.68508 - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954 - 0x3fe70a42b3176d7a, 0x3fe63503a31c1be8, // 0.72, 0.69397 - 0x3fe6e74454eaa8ae, 0x3fe6591925f0783e, // 0.71573, 0.69838 - 0x3fe6c40d73c18275, 0x3fe67cf78491af10, // 0.71143, 0.70275 - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711 - 0x3fe67cf78491af10, 0x3fe6c40d73c18275, // 0.70275, 0.71143 - 0x3fe6591925f0783e, 0x3fe6e74454eaa8ae, // 0.69838, 0.71573 - 0x3fe63503a31c1be8, 0x3fe70a42b3176d7a, // 0.69397, 0.72 - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425 - 0x3fe5ec3495837074, 0x3fe74f948da8d28d, // 0.68508, 0.72846 - 0x3fe5c77bbe65018c, 0x3fe771e75f037261, // 0.6806, 0.73265 - 0x3fe5a28d2a5d7250, 0x3fe79400574f55e4, // 0.67609, 0.73682 - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095 - 0x3fe5581038975137, 0x3fe7d7836cc33db2, // 0.667, 0.74506 - 0x3fe5328292a35596, 0x3fe7f8ece3571771, // 0.66242, 0.74914 - 0x3fe50cc09f59a09b, 0x3fe81a1b33b57acc, // 0.65781, 0.75319 - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721 - 0x3fe4c0a145ec0004, 0x3fe85bc51ae958cc, // 0.64851, 0.7612 - 0x3fe49a449b9b0938, 0x3fe87c400fba2ebf, // 0.64383, 0.76517 - 0x3fe473b51b987347, 0x3fe89c7e9a4dd4ab, // 0.63912, 0.7691 - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301 - 0x3fe425ff178e6bb1, 0x3fe8dc45331698cc, // 0.62964, 0.77689 - 0x3fe3fed9534556d4, 0x3fe8fbcca3ef940d, // 0.62486, 0.78074 - 0x3fe3d78238c58343, 0x3fe91b166fd49da2, // 0.62006, 0.78456 - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835 - 0x3fe3884185dfeb22, 0x3fe958efe48e6dd7, // 0.61038, 0.79211 - 0x3fe36058b10659f3, 0x3fe9777ef4c7d742, // 0.60551, 0.79584 - 0x3fe338400d0c8e57, 0x3fe995cf2ed80d22, // 0.60062, 0.79954 - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321 - 0x3fe2e780e3e8ea16, 0x3fe9d1b1f5ea80d6, // 0.59076, 0.80685 - 0x3fe2bedb25faf3ea, 0x3fe9ef43ef29af94, // 0.5858, 0.81046 - 0x3fe2960727629ca8, 0x3fea0c95eabaf937, // 0.58081, 0.81404 - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758 - 0x3fe243d5fb98ac1f, 0x3fea4678c8119ac8, // 0.57078, 0.8211 - 0x3fe21a799933eb58, 0x3fea63091b02fae2, // 0.56573, 0.82459 - 0x3fe1f0f08bbc861b, 0x3fea7f58529fe69d, // 0.56066, 0.82805 - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147 - 0x3fe19d5a09f2b9b8, 0x3feab7325916c0d4, // 0.55046, 0.83486 - 0x3fe1734d63dedb49, 0x3fead2bc9e21d511, // 0.54532, 0.83822 - 0x3fe14915af336ceb, 0x3feaee04b43c1474, // 0.54017, 0.84155 - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485 - 0x3fe0f426bb2a8e7d, 0x3feb23cd470013b4, // 0.5298, 0.84812 - 0x3fe0c9704d5d898f, 0x3feb3e4d3ef55712, // 0.52459, 0.85136 - 0x3fe09e907417c5e1, 0x3feb5889fe921405, // 0.51936, 0.85456 - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773 - 0x3fe0485626ae221a, 0x3feb8c38d27504e9, // 0.50883, 0.86087 - 0x3fe01cfc874c3eb7, 0x3feba5aa673590d2, // 0.50354, 0.86397 - 0x3fdfe2f64be7120f, 0x3febbed7c49380ea, // 0.49823, 0.86705 - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009 - 0x3fdf3405963fd068, 0x3febf064e15377dd, // 0.48755, 0.87309 - 0x3fdedc1952ef78d5, 0x3fec08c426725549, // 0.48218, 0.87607 - 0x3fde83e0eaf85113, 0x3fec20de3fa971b0, // 0.4768, 0.87901 - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192 - 0x3fddd28f1481cc58, 0x3fec5042012b6907, // 0.46598, 0.8848 - 0x3fdd79775b86e389, 0x3fec678b3488739b, // 0.46054, 0.88764 - 0x3fdd2016e8e9db5b, 0x3fec7e8e52233cf3, // 0.45508, 0.89045 - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322 - 0x3fdc6c7f4997000a, 0x3fecabc169a0b901, // 0.44412, 0.89597 - 0x3fdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // 0.43862, 0.89867 - 0x3fdbb7cf2304bd01, 0x3fecd7d9898b32f6, // 0.43309, 0.90135 - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399 - 0x3fdb020d6c7f4009, 0x3fed02d4feb2bd92, // 0.422, 0.9066 - 0x3fdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // 0.41643, 0.90917 - 0x3fda4b4127dea1e4, 0x3fed2cb220e0ef9f, // 0.41084, 0.91171 - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421 - 0x3fd993716141bdfe, 0x3fed556f52e93eb1, // 0.39962, 0.91668 - 0x3fd9372a63bc93d7, 0x3fed696173c9e68b, // 0.39399, 0.91911 - 0x3fd8daa52ec8a4af, 0x3fed7d0b02b8ecf9, // 0.38835, 0.92151 - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388 - 0x3fd820e3b04eaac4, 0x3feda383a9668988, // 0.37701, 0.92621 - 0x3fd7c3a9311dcce7, 0x3fedb6526238a09b, // 0.37132, 0.92851 - 0x3fd766340f2418f6, 0x3fedc8d7cb410260, // 0.36561, 0.93077 - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299 - 0x3fd6aa9d7dc77e16, 0x3feded05f7de47da, // 0.35416, 0.93518 - 0x3fd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // 0.34842, 0.93734 - 0x3fd5ee27379ea693, 0x3fee100cca2980ac, // 0.34266, 0.93946 - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154 - 0x3fd530d880af3c24, 0x3fee31eae870ce25, // 0.33111, 0.94359 - 0x3fd4d1e24278e76a, 0x3fee426a4b2bc17e, // 0.32531, 0.94561 - 0x3fd472b8a5571054, 0x3fee529f04729ffc, // 0.3195, 0.94759 - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953 - 0x3fd3b3cefa0414b7, 0x3fee7227db6a9744, // 0.30785, 0.95144 - 0x3fd35410c2e18152, 0x3fee817bab4cd10d, // 0.30201, 0.95331 - 0x3fd2f422daec0386, 0x3fee9084361df7f3, // 0.29615, 0.95514 - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694 - 0x3fd233bbabc3bb72, 0x3feeadb2e8e7a88e, // 0.28441, 0.9587 - 0x3fd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // 0.27852, 0.96043 - 0x3fd172a0d7765177, 0x3feec9b2d3c3bf84, // 0.27262, 0.96212 - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378 - 0x3fd0b0d9cfdbdb90, 0x3feee482e25a9dbc, // 0.26079, 0.96539 - 0x3fd04fb80e37fdae, 0x3feef178a3e473c2, // 0.25487, 0.96698 - 0x3fcfdcdc1adfedf8, 0x3feefe220c0b95ec, // 0.24893, 0.96852 - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003 - 0x3fce56ca1e101a1b, 0x3fef168f53f7205d, // 0.23702, 0.9715 - 0x3fcd934fe5454311, 0x3fef2252f7763ada, // 0.23106, 0.97294 - 0x3fcccf8cb312b286, 0x3fef2dc9c9089a9d, // 0.22508, 0.97434 - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757 - 0x3fcb4732ef3d6722, 0x3fef43d085ff92dd, // 0.21311, 0.97703 - 0x3fca82a025b00451, 0x3fef4e603b0b2f2d, // 0.20711, 0.97832 - 0x3fc9bdcbf2dc4366, 0x3fef58a2b1789e84, // 0.2011, 0.97957 - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079 - 0x3fc83366e89c64c5, 0x3fef6c3f7df5bbb7, // 0.18907, 0.98196 - 0x3fc76dd9de50bf31, 0x3fef7599a3a12077, // 0.18304, 0.98311 - 0x3fc6a81304f64ab2, 0x3fef7ea629e63d6e, // 0.177, 0.98421 - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528 - 0x3fc51bdf8597c5f2, 0x3fef8fd5ffae41db, // 0.16491, 0.98631 - 0x3fc45576b1293e5a, 0x3fef97f924c9099b, // 0.15886, 0.9873 - 0x3fc38edbb0cd8d14, 0x3fef9fce55adb2c8, // 0.1528, 0.98826 - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918 - 0x3fc20116d4ec7bce, 0x3fefae8e8e46cfbb, // 0.14066, 0.99006 - 0x3fc139f0cedaf576, 0x3fefb5797195d741, // 0.13458, 0.9909 - 0x3fc072a047ba831d, 0x3fefbc1617e44186, // 0.1285, 0.99171 - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248 - 0x3fbdc70ecbae9fc8, 0x3fefc8646cfeb721, // 0.11632, 0.99321 - 0x3fbc3785c79ec2d5, 0x3fefce15fd6da67b, // 0.11022, 0.99391 - 0x3fbaa7b724495c04, 0x3fefd37914220b84, // 0.10412, 0.99456 - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518 - 0x3fb787586a5d5b21, 0x3fefdd539ff1f456, // 0.091909, 0.99577 - 0x3fb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // 0.085797, 0.99631 - 0x3fb4661179272096, 0x3fefe5f3af2e3940, // 0.079682, 0.99682 - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, // 0.073565, 0.99729 - 0x3fb1440134d709b2, 0x3fefed58ecb673c4, // 0.067444, 0.99772 - 0x3faf656e79f820e0, 0x3feff095658e71ad, // 0.061321, 0.99812 - 0x3fac428d12c0d7e3, 0x3feff3830f8d575c, // 0.055195, 0.99848 - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, // 0.049068, 0.9988 - 0x3fa5fc00d290cd43, 0x3feff871dadb81df, // 0.042938, 0.99908 - 0x3fa2d865759455cd, 0x3feffa72effef75d, // 0.036807, 0.99932 - 0x3f9f693731d1cf01, 0x3feffc251df1d3f8, // 0.030675, 0.99953 - 0x3f992155f7a3667e, 0x3feffd886084cd0d, // 0.024541, 0.9997 - 0x3f92d936bbe30efd, 0x3feffe9cb44b51a1, // 0.018407, 0.99983 - 0x3f8921d1fcdec784, 0x3fefff62169b92db, // 0.012272, 0.99992 - 0x3f7921f0fe670071, 0x3fefffd8858e8a92, // 0.0061359, 0.99998 - 0x0000000000000000, 0x3ff0000000000000, // 0, 1 - 0xbf7921f0fe670071, 0x3fefffd8858e8a92, //-0.0061359, 0.99998 - 0xbf8921d1fcdec784, 0x3fefff62169b92db, // -0.012272, 0.99992 - 0xbf92d936bbe30efd, 0x3feffe9cb44b51a1, // -0.018407, 0.99983 - 0xbf992155f7a3667e, 0x3feffd886084cd0d, // -0.024541, 0.9997 - 0xbf9f693731d1cf01, 0x3feffc251df1d3f8, // -0.030675, 0.99953 - 0xbfa2d865759455cd, 0x3feffa72effef75d, // -0.036807, 0.99932 - 0xbfa5fc00d290cd43, 0x3feff871dadb81df, // -0.042938, 0.99908 - 0xbfa91f65f10dd814, 0x3feff621e3796d7e, // -0.049068, 0.9988 - 0xbfac428d12c0d7e3, 0x3feff3830f8d575c, // -0.055195, 0.99848 - 0xbfaf656e79f820e0, 0x3feff095658e71ad, // -0.061321, 0.99812 - 0xbfb1440134d709b2, 0x3fefed58ecb673c4, // -0.067444, 0.99772 - 0xbfb2d52092ce19f6, 0x3fefe9cdad01883a, // -0.073565, 0.99729 - 0xbfb4661179272096, 0x3fefe5f3af2e3940, // -0.079682, 0.99682 - 0xbfb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // -0.085797, 0.99631 - 0xbfb787586a5d5b21, 0x3fefdd539ff1f456, // -0.091909, 0.99577 - 0xbfb917a6bc29b42c, 0x3fefd88da3d12526, // -0.098017, 0.99518 - 0xbfbaa7b724495c04, 0x3fefd37914220b84, // -0.10412, 0.99456 - 0xbfbc3785c79ec2d5, 0x3fefce15fd6da67b, // -0.11022, 0.99391 - 0xbfbdc70ecbae9fc8, 0x3fefc8646cfeb721, // -0.11632, 0.99321 - 0xbfbf564e56a9730e, 0x3fefc26470e19fd3, // -0.12241, 0.99248 - 0xbfc072a047ba831d, 0x3fefbc1617e44186, // -0.1285, 0.99171 - 0xbfc139f0cedaf576, 0x3fefb5797195d741, // -0.13458, 0.9909 - 0xbfc20116d4ec7bce, 0x3fefae8e8e46cfbb, // -0.14066, 0.99006 - 0xbfc2c8106e8e613a, 0x3fefa7557f08a517, // -0.14673, 0.98918 - 0xbfc38edbb0cd8d14, 0x3fef9fce55adb2c8, // -0.1528, 0.98826 - 0xbfc45576b1293e5a, 0x3fef97f924c9099b, // -0.15886, 0.9873 - 0xbfc51bdf8597c5f2, 0x3fef8fd5ffae41db, // -0.16491, 0.98631 - 0xbfc5e214448b3fc6, 0x3fef8764fa714ba9, // -0.17096, 0.98528 - 0xbfc6a81304f64ab2, 0x3fef7ea629e63d6e, // -0.177, 0.98421 - 0xbfc76dd9de50bf31, 0x3fef7599a3a12077, // -0.18304, 0.98311 - 0xbfc83366e89c64c5, 0x3fef6c3f7df5bbb7, // -0.18907, 0.98196 - 0xbfc8f8b83c69a60a, 0x3fef6297cff75cb0, // -0.19509, 0.98079 - 0xbfc9bdcbf2dc4366, 0x3fef58a2b1789e84, // -0.2011, 0.97957 - 0xbfca82a025b00451, 0x3fef4e603b0b2f2d, // -0.20711, 0.97832 - 0xbfcb4732ef3d6722, 0x3fef43d085ff92dd, // -0.21311, 0.97703 - 0xbfcc0b826a7e4f63, 0x3fef38f3ac64e589, // -0.2191, 0.9757 - 0xbfcccf8cb312b286, 0x3fef2dc9c9089a9d, // -0.22508, 0.97434 - 0xbfcd934fe5454311, 0x3fef2252f7763ada, // -0.23106, 0.97294 - 0xbfce56ca1e101a1b, 0x3fef168f53f7205d, // -0.23702, 0.9715 - 0xbfcf19f97b215f1a, 0x3fef0a7efb9230d7, // -0.24298, 0.97003 - 0xbfcfdcdc1adfedf8, 0x3feefe220c0b95ec, // -0.24893, 0.96852 - 0xbfd04fb80e37fdae, 0x3feef178a3e473c2, // -0.25487, 0.96698 - 0xbfd0b0d9cfdbdb90, 0x3feee482e25a9dbc, // -0.26079, 0.96539 - 0xbfd111d262b1f677, 0x3feed740e7684963, // -0.26671, 0.96378 - 0xbfd172a0d7765177, 0x3feec9b2d3c3bf84, // -0.27262, 0.96212 - 0xbfd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // -0.27852, 0.96043 - 0xbfd233bbabc3bb72, 0x3feeadb2e8e7a88e, // -0.28441, 0.9587 - 0xbfd294062ed59f05, 0x3fee9f4156c62dda, // -0.29028, 0.95694 - 0xbfd2f422daec0386, 0x3fee9084361df7f3, // -0.29615, 0.95514 - 0xbfd35410c2e18152, 0x3fee817bab4cd10d, // -0.30201, 0.95331 - 0xbfd3b3cefa0414b7, 0x3fee7227db6a9744, // -0.30785, 0.95144 - 0xbfd4135c94176602, 0x3fee6288ec48e112, // -0.31368, 0.94953 - 0xbfd472b8a5571054, 0x3fee529f04729ffc, // -0.3195, 0.94759 - 0xbfd4d1e24278e76a, 0x3fee426a4b2bc17e, // -0.32531, 0.94561 - 0xbfd530d880af3c24, 0x3fee31eae870ce25, // -0.33111, 0.94359 - 0xbfd58f9a75ab1fdd, 0x3fee212104f686e5, // -0.33689, 0.94154 - 0xbfd5ee27379ea693, 0x3fee100cca2980ac, // -0.34266, 0.93946 - 0xbfd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // -0.34842, 0.93734 - 0xbfd6aa9d7dc77e16, 0x3feded05f7de47da, // -0.35416, 0.93518 - 0xbfd7088530fa459e, 0x3feddb13b6ccc23d, // -0.3599, 0.93299 - 0xbfd766340f2418f6, 0x3fedc8d7cb410260, // -0.36561, 0.93077 - 0xbfd7c3a9311dcce7, 0x3fedb6526238a09b, // -0.37132, 0.92851 - 0xbfd820e3b04eaac4, 0x3feda383a9668988, // -0.37701, 0.92621 - 0xbfd87de2a6aea963, 0x3fed906bcf328d46, // -0.38268, 0.92388 - 0xbfd8daa52ec8a4af, 0x3fed7d0b02b8ecf9, // -0.38835, 0.92151 - 0xbfd9372a63bc93d7, 0x3fed696173c9e68b, // -0.39399, 0.91911 - 0xbfd993716141bdfe, 0x3fed556f52e93eb1, // -0.39962, 0.91668 - 0xbfd9ef7943a8ed8a, 0x3fed4134d14dc93a, // -0.40524, 0.91421 - 0xbfda4b4127dea1e4, 0x3fed2cb220e0ef9f, // -0.41084, 0.91171 - 0xbfdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // -0.41643, 0.90917 - 0xbfdb020d6c7f4009, 0x3fed02d4feb2bd92, // -0.422, 0.9066 - 0xbfdb5d1009e15cc0, 0x3feced7af43cc773, // -0.42756, 0.90399 - 0xbfdbb7cf2304bd01, 0x3fecd7d9898b32f6, // -0.43309, 0.90135 - 0xbfdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // -0.43862, 0.89867 - 0xbfdc6c7f4997000a, 0x3fecabc169a0b901, // -0.44412, 0.89597 - 0xbfdcc66e9931c45d, 0x3fec954b213411f5, // -0.44961, 0.89322 - 0xbfdd2016e8e9db5b, 0x3fec7e8e52233cf3, // -0.45508, 0.89045 - 0xbfdd79775b86e389, 0x3fec678b3488739b, // -0.46054, 0.88764 - 0xbfddd28f1481cc58, 0x3fec5042012b6907, // -0.46598, 0.8848 - 0xbfde2b5d3806f63b, 0x3fec38b2f180bdb1, // -0.4714, 0.88192 - 0xbfde83e0eaf85113, 0x3fec20de3fa971b0, // -0.4768, 0.87901 - 0xbfdedc1952ef78d5, 0x3fec08c426725549, // -0.48218, 0.87607 - 0xbfdf3405963fd068, 0x3febf064e15377dd, // -0.48755, 0.87309 - 0xbfdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // -0.4929, 0.87009 - 0xbfdfe2f64be7120f, 0x3febbed7c49380ea, // -0.49823, 0.86705 - 0xbfe01cfc874c3eb7, 0x3feba5aa673590d2, // -0.50354, 0.86397 - 0xbfe0485626ae221a, 0x3feb8c38d27504e9, // -0.50883, 0.86087 - 0xbfe073879922ffed, 0x3feb728345196e3e, // -0.5141, 0.85773 - 0xbfe09e907417c5e1, 0x3feb5889fe921405, // -0.51936, 0.85456 - 0xbfe0c9704d5d898f, 0x3feb3e4d3ef55712, // -0.52459, 0.85136 - 0xbfe0f426bb2a8e7d, 0x3feb23cd470013b4, // -0.5298, 0.84812 - 0xbfe11eb3541b4b22, 0x3feb090a58150200, // -0.535, 0.84485 - 0xbfe14915af336ceb, 0x3feaee04b43c1474, // -0.54017, 0.84155 - 0xbfe1734d63dedb49, 0x3fead2bc9e21d511, // -0.54532, 0.83822 - 0xbfe19d5a09f2b9b8, 0x3feab7325916c0d4, // -0.55046, 0.83486 - 0xbfe1c73b39ae68c8, 0x3fea9b66290ea1a3, // -0.55557, 0.83147 - 0xbfe1f0f08bbc861b, 0x3fea7f58529fe69d, // -0.56066, 0.82805 - 0xbfe21a799933eb58, 0x3fea63091b02fae2, // -0.56573, 0.82459 - 0xbfe243d5fb98ac1f, 0x3fea4678c8119ac8, // -0.57078, 0.8211 - 0xbfe26d054cdd12df, 0x3fea29a7a0462782, // -0.57581, 0.81758 - 0xbfe2960727629ca8, 0x3fea0c95eabaf937, // -0.58081, 0.81404 - 0xbfe2bedb25faf3ea, 0x3fe9ef43ef29af94, // -0.5858, 0.81046 - 0xbfe2e780e3e8ea16, 0x3fe9d1b1f5ea80d6, // -0.59076, 0.80685 - 0xbfe30ff7fce17035, 0x3fe9b3e047f38741, // -0.5957, 0.80321 - 0xbfe338400d0c8e57, 0x3fe995cf2ed80d22, // -0.60062, 0.79954 - 0xbfe36058b10659f3, 0x3fe9777ef4c7d742, // -0.60551, 0.79584 - 0xbfe3884185dfeb22, 0x3fe958efe48e6dd7, // -0.61038, 0.79211 - 0xbfe3affa292050b9, 0x3fe93a22499263fc, // -0.61523, 0.78835 - 0xbfe3d78238c58343, 0x3fe91b166fd49da2, // -0.62006, 0.78456 - 0xbfe3fed9534556d4, 0x3fe8fbcca3ef940d, // -0.62486, 0.78074 - 0xbfe425ff178e6bb1, 0x3fe8dc45331698cc, // -0.62964, 0.77689 - 0xbfe44cf325091dd6, 0x3fe8bc806b151741, // -0.63439, 0.77301 - 0xbfe473b51b987347, 0x3fe89c7e9a4dd4ab, // -0.63912, 0.7691 - 0xbfe49a449b9b0938, 0x3fe87c400fba2ebf, // -0.64383, 0.76517 - 0xbfe4c0a145ec0004, 0x3fe85bc51ae958cc, // -0.64851, 0.7612 - 0xbfe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // -0.65317, 0.75721 - 0xbfe50cc09f59a09b, 0x3fe81a1b33b57acc, // -0.65781, 0.75319 - 0xbfe5328292a35596, 0x3fe7f8ece3571771, // -0.66242, 0.74914 - 0xbfe5581038975137, 0x3fe7d7836cc33db2, // -0.667, 0.74506 - 0xbfe57d69348cec9f, 0x3fe7b5df226aafb0, // -0.67156, 0.74095 - 0xbfe5a28d2a5d7250, 0x3fe79400574f55e4, // -0.67609, 0.73682 - 0xbfe5c77bbe65018c, 0x3fe771e75f037261, // -0.6806, 0.73265 - 0xbfe5ec3495837074, 0x3fe74f948da8d28d, // -0.68508, 0.72846 - 0xbfe610b7551d2cde, 0x3fe72d0837efff97, // -0.68954, 0.72425 - 0xbfe63503a31c1be8, 0x3fe70a42b3176d7a, // -0.69397, 0.72 - 0xbfe6591925f0783e, 0x3fe6e74454eaa8ae, // -0.69838, 0.71573 - 0xbfe67cf78491af10, 0x3fe6c40d73c18275, // -0.70275, 0.71143 - 0xbfe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // -0.70711, 0.70711 - 0xbfe6c40d73c18275, 0x3fe67cf78491af10, // -0.71143, 0.70275 - 0xbfe6e74454eaa8ae, 0x3fe6591925f0783e, // -0.71573, 0.69838 - 0xbfe70a42b3176d7a, 0x3fe63503a31c1be8, // -0.72, 0.69397 - 0xbfe72d0837efff97, 0x3fe610b7551d2cde, // -0.72425, 0.68954 - 0xbfe74f948da8d28d, 0x3fe5ec3495837074, // -0.72846, 0.68508 - 0xbfe771e75f037261, 0x3fe5c77bbe65018c, // -0.73265, 0.6806 - 0xbfe79400574f55e4, 0x3fe5a28d2a5d7250, // -0.73682, 0.67609 - 0xbfe7b5df226aafb0, 0x3fe57d69348cec9f, // -0.74095, 0.67156 - 0xbfe7d7836cc33db2, 0x3fe5581038975137, // -0.74506, 0.667 - 0xbfe7f8ece3571771, 0x3fe5328292a35596, // -0.74914, 0.66242 - 0xbfe81a1b33b57acc, 0x3fe50cc09f59a09b, // -0.75319, 0.65781 - 0xbfe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // -0.75721, 0.65317 - 0xbfe85bc51ae958cc, 0x3fe4c0a145ec0004, // -0.7612, 0.64851 - 0xbfe87c400fba2ebf, 0x3fe49a449b9b0938, // -0.76517, 0.64383 - 0xbfe89c7e9a4dd4ab, 0x3fe473b51b987347, // -0.7691, 0.63912 - 0xbfe8bc806b151741, 0x3fe44cf325091dd6, // -0.77301, 0.63439 - 0xbfe8dc45331698cc, 0x3fe425ff178e6bb1, // -0.77689, 0.62964 - 0xbfe8fbcca3ef940d, 0x3fe3fed9534556d4, // -0.78074, 0.62486 - 0xbfe91b166fd49da2, 0x3fe3d78238c58343, // -0.78456, 0.62006 - 0xbfe93a22499263fc, 0x3fe3affa292050b9, // -0.78835, 0.61523 - 0xbfe958efe48e6dd7, 0x3fe3884185dfeb22, // -0.79211, 0.61038 - 0xbfe9777ef4c7d742, 0x3fe36058b10659f3, // -0.79584, 0.60551 - 0xbfe995cf2ed80d22, 0x3fe338400d0c8e57, // -0.79954, 0.60062 - 0xbfe9b3e047f38741, 0x3fe30ff7fce17035, // -0.80321, 0.5957 - 0xbfe9d1b1f5ea80d6, 0x3fe2e780e3e8ea16, // -0.80685, 0.59076 - 0xbfe9ef43ef29af94, 0x3fe2bedb25faf3ea, // -0.81046, 0.5858 - 0xbfea0c95eabaf937, 0x3fe2960727629ca8, // -0.81404, 0.58081 - 0xbfea29a7a0462782, 0x3fe26d054cdd12df, // -0.81758, 0.57581 - 0xbfea4678c8119ac8, 0x3fe243d5fb98ac1f, // -0.8211, 0.57078 - 0xbfea63091b02fae2, 0x3fe21a799933eb58, // -0.82459, 0.56573 - 0xbfea7f58529fe69d, 0x3fe1f0f08bbc861b, // -0.82805, 0.56066 - 0xbfea9b66290ea1a3, 0x3fe1c73b39ae68c8, // -0.83147, 0.55557 - 0xbfeab7325916c0d4, 0x3fe19d5a09f2b9b8, // -0.83486, 0.55046 - 0xbfead2bc9e21d511, 0x3fe1734d63dedb49, // -0.83822, 0.54532 - 0xbfeaee04b43c1474, 0x3fe14915af336ceb, // -0.84155, 0.54017 - 0xbfeb090a58150200, 0x3fe11eb3541b4b22, // -0.84485, 0.535 - 0xbfeb23cd470013b4, 0x3fe0f426bb2a8e7d, // -0.84812, 0.5298 - 0xbfeb3e4d3ef55712, 0x3fe0c9704d5d898f, // -0.85136, 0.52459 - 0xbfeb5889fe921405, 0x3fe09e907417c5e1, // -0.85456, 0.51936 - 0xbfeb728345196e3e, 0x3fe073879922ffed, // -0.85773, 0.5141 - 0xbfeb8c38d27504e9, 0x3fe0485626ae221a, // -0.86087, 0.50883 - 0xbfeba5aa673590d2, 0x3fe01cfc874c3eb7, // -0.86397, 0.50354 - 0xbfebbed7c49380ea, 0x3fdfe2f64be7120f, // -0.86705, 0.49823 - 0xbfebd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // -0.87009, 0.4929 - 0xbfebf064e15377dd, 0x3fdf3405963fd068, // -0.87309, 0.48755 - 0xbfec08c426725549, 0x3fdedc1952ef78d5, // -0.87607, 0.48218 - 0xbfec20de3fa971b0, 0x3fde83e0eaf85113, // -0.87901, 0.4768 - 0xbfec38b2f180bdb1, 0x3fde2b5d3806f63b, // -0.88192, 0.4714 - 0xbfec5042012b6907, 0x3fddd28f1481cc58, // -0.8848, 0.46598 - 0xbfec678b3488739b, 0x3fdd79775b86e389, // -0.88764, 0.46054 - 0xbfec7e8e52233cf3, 0x3fdd2016e8e9db5b, // -0.89045, 0.45508 - 0xbfec954b213411f5, 0x3fdcc66e9931c45d, // -0.89322, 0.44961 - 0xbfecabc169a0b901, 0x3fdc6c7f4997000a, // -0.89597, 0.44412 - 0xbfecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // -0.89867, 0.43862 - 0xbfecd7d9898b32f6, 0x3fdbb7cf2304bd01, // -0.90135, 0.43309 - 0xbfeced7af43cc773, 0x3fdb5d1009e15cc0, // -0.90399, 0.42756 - 0xbfed02d4feb2bd92, 0x3fdb020d6c7f4009, // -0.9066, 0.422 - 0xbfed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // -0.90917, 0.41643 - 0xbfed2cb220e0ef9f, 0x3fda4b4127dea1e4, // -0.91171, 0.41084 - 0xbfed4134d14dc93a, 0x3fd9ef7943a8ed8a, // -0.91421, 0.40524 - 0xbfed556f52e93eb1, 0x3fd993716141bdfe, // -0.91668, 0.39962 - 0xbfed696173c9e68b, 0x3fd9372a63bc93d7, // -0.91911, 0.39399 - 0xbfed7d0b02b8ecf9, 0x3fd8daa52ec8a4af, // -0.92151, 0.38835 - 0xbfed906bcf328d46, 0x3fd87de2a6aea963, // -0.92388, 0.38268 - 0xbfeda383a9668988, 0x3fd820e3b04eaac4, // -0.92621, 0.37701 - 0xbfedb6526238a09b, 0x3fd7c3a9311dcce7, // -0.92851, 0.37132 - 0xbfedc8d7cb410260, 0x3fd766340f2418f6, // -0.93077, 0.36561 - 0xbfeddb13b6ccc23d, 0x3fd7088530fa459e, // -0.93299, 0.3599 - 0xbfeded05f7de47da, 0x3fd6aa9d7dc77e16, // -0.93518, 0.35416 - 0xbfedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // -0.93734, 0.34842 - 0xbfee100cca2980ac, 0x3fd5ee27379ea693, // -0.93946, 0.34266 - 0xbfee212104f686e5, 0x3fd58f9a75ab1fdd, // -0.94154, 0.33689 - 0xbfee31eae870ce25, 0x3fd530d880af3c24, // -0.94359, 0.33111 - 0xbfee426a4b2bc17e, 0x3fd4d1e24278e76a, // -0.94561, 0.32531 - 0xbfee529f04729ffc, 0x3fd472b8a5571054, // -0.94759, 0.3195 - 0xbfee6288ec48e112, 0x3fd4135c94176602, // -0.94953, 0.31368 - 0xbfee7227db6a9744, 0x3fd3b3cefa0414b7, // -0.95144, 0.30785 - 0xbfee817bab4cd10d, 0x3fd35410c2e18152, // -0.95331, 0.30201 - 0xbfee9084361df7f3, 0x3fd2f422daec0386, // -0.95514, 0.29615 - 0xbfee9f4156c62dda, 0x3fd294062ed59f05, // -0.95694, 0.29028 - 0xbfeeadb2e8e7a88e, 0x3fd233bbabc3bb72, // -0.9587, 0.28441 - 0xbfeebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // -0.96043, 0.27852 - 0xbfeec9b2d3c3bf84, 0x3fd172a0d7765177, // -0.96212, 0.27262 - 0xbfeed740e7684963, 0x3fd111d262b1f677, // -0.96378, 0.26671 - 0xbfeee482e25a9dbc, 0x3fd0b0d9cfdbdb90, // -0.96539, 0.26079 - 0xbfeef178a3e473c2, 0x3fd04fb80e37fdae, // -0.96698, 0.25487 - 0xbfeefe220c0b95ec, 0x3fcfdcdc1adfedf8, // -0.96852, 0.24893 - 0xbfef0a7efb9230d7, 0x3fcf19f97b215f1a, // -0.97003, 0.24298 - 0xbfef168f53f7205d, 0x3fce56ca1e101a1b, // -0.9715, 0.23702 - 0xbfef2252f7763ada, 0x3fcd934fe5454311, // -0.97294, 0.23106 - 0xbfef2dc9c9089a9d, 0x3fcccf8cb312b286, // -0.97434, 0.22508 - 0xbfef38f3ac64e589, 0x3fcc0b826a7e4f63, // -0.9757, 0.2191 - 0xbfef43d085ff92dd, 0x3fcb4732ef3d6722, // -0.97703, 0.21311 - 0xbfef4e603b0b2f2d, 0x3fca82a025b00451, // -0.97832, 0.20711 - 0xbfef58a2b1789e84, 0x3fc9bdcbf2dc4366, // -0.97957, 0.2011 - 0xbfef6297cff75cb0, 0x3fc8f8b83c69a60a, // -0.98079, 0.19509 - 0xbfef6c3f7df5bbb7, 0x3fc83366e89c64c5, // -0.98196, 0.18907 - 0xbfef7599a3a12077, 0x3fc76dd9de50bf31, // -0.98311, 0.18304 - 0xbfef7ea629e63d6e, 0x3fc6a81304f64ab2, // -0.98421, 0.177 - 0xbfef8764fa714ba9, 0x3fc5e214448b3fc6, // -0.98528, 0.17096 - 0xbfef8fd5ffae41db, 0x3fc51bdf8597c5f2, // -0.98631, 0.16491 - 0xbfef97f924c9099b, 0x3fc45576b1293e5a, // -0.9873, 0.15886 - 0xbfef9fce55adb2c8, 0x3fc38edbb0cd8d14, // -0.98826, 0.1528 - 0xbfefa7557f08a517, 0x3fc2c8106e8e613a, // -0.98918, 0.14673 - 0xbfefae8e8e46cfbb, 0x3fc20116d4ec7bce, // -0.99006, 0.14066 - 0xbfefb5797195d741, 0x3fc139f0cedaf576, // -0.9909, 0.13458 - 0xbfefbc1617e44186, 0x3fc072a047ba831d, // -0.99171, 0.1285 - 0xbfefc26470e19fd3, 0x3fbf564e56a9730e, // -0.99248, 0.12241 - 0xbfefc8646cfeb721, 0x3fbdc70ecbae9fc8, // -0.99321, 0.11632 - 0xbfefce15fd6da67b, 0x3fbc3785c79ec2d5, // -0.99391, 0.11022 - 0xbfefd37914220b84, 0x3fbaa7b724495c04, // -0.99456, 0.10412 - 0xbfefd88da3d12526, 0x3fb917a6bc29b42c, // -0.99518, 0.098017 - 0xbfefdd539ff1f456, 0x3fb787586a5d5b21, // -0.99577, 0.091909 - 0xbfefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // -0.99631, 0.085797 - 0xbfefe5f3af2e3940, 0x3fb4661179272096, // -0.99682, 0.079682 - 0xbfefe9cdad01883a, 0x3fb2d52092ce19f6, // -0.99729, 0.073565 - 0xbfefed58ecb673c4, 0x3fb1440134d709b2, // -0.99772, 0.067444 - 0xbfeff095658e71ad, 0x3faf656e79f820e0, // -0.99812, 0.061321 - 0xbfeff3830f8d575c, 0x3fac428d12c0d7e3, // -0.99848, 0.055195 - 0xbfeff621e3796d7e, 0x3fa91f65f10dd814, // -0.9988, 0.049068 - 0xbfeff871dadb81df, 0x3fa5fc00d290cd43, // -0.99908, 0.042938 - 0xbfeffa72effef75d, 0x3fa2d865759455cd, // -0.99932, 0.036807 - 0xbfeffc251df1d3f8, 0x3f9f693731d1cf01, // -0.99953, 0.030675 - 0xbfeffd886084cd0d, 0x3f992155f7a3667e, // -0.9997, 0.024541 - 0xbfeffe9cb44b51a1, 0x3f92d936bbe30efd, // -0.99983, 0.018407 - 0xbfefff62169b92db, 0x3f8921d1fcdec784, // -0.99992, 0.012272 - 0xbfefffd8858e8a92, 0x3f7921f0fe670071, // -0.99998, 0.0061359 - 0xbff0000000000000, 0x0000000000000000, // -1, 0 - 0xbfefffd8858e8a92, 0xbf7921f0fe670071, // -0.99998,-0.0061359 - 0xbfefff62169b92db, 0xbf8921d1fcdec784, // -0.99992, -0.012272 - 0xbfeffe9cb44b51a1, 0xbf92d936bbe30efd, // -0.99983, -0.018407 - 0xbfeffd886084cd0d, 0xbf992155f7a3667e, // -0.9997, -0.024541 - 0xbfeffc251df1d3f8, 0xbf9f693731d1cf01, // -0.99953, -0.030675 - 0xbfeffa72effef75d, 0xbfa2d865759455cd, // -0.99932, -0.036807 - 0xbfeff871dadb81df, 0xbfa5fc00d290cd43, // -0.99908, -0.042938 - 0xbfeff621e3796d7e, 0xbfa91f65f10dd814, // -0.9988, -0.049068 - 0xbfeff3830f8d575c, 0xbfac428d12c0d7e3, // -0.99848, -0.055195 - 0xbfeff095658e71ad, 0xbfaf656e79f820e0, // -0.99812, -0.061321 - 0xbfefed58ecb673c4, 0xbfb1440134d709b2, // -0.99772, -0.067444 - 0xbfefe9cdad01883a, 0xbfb2d52092ce19f6, // -0.99729, -0.073565 - 0xbfefe5f3af2e3940, 0xbfb4661179272096, // -0.99682, -0.079682 - 0xbfefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // -0.99631, -0.085797 - 0xbfefdd539ff1f456, 0xbfb787586a5d5b21, // -0.99577, -0.091909 - 0xbfefd88da3d12526, 0xbfb917a6bc29b42c, // -0.99518, -0.098017 - 0xbfefd37914220b84, 0xbfbaa7b724495c04, // -0.99456, -0.10412 - 0xbfefce15fd6da67b, 0xbfbc3785c79ec2d5, // -0.99391, -0.11022 - 0xbfefc8646cfeb721, 0xbfbdc70ecbae9fc8, // -0.99321, -0.11632 - 0xbfefc26470e19fd3, 0xbfbf564e56a9730e, // -0.99248, -0.12241 - 0xbfefbc1617e44186, 0xbfc072a047ba831d, // -0.99171, -0.1285 - 0xbfefb5797195d741, 0xbfc139f0cedaf576, // -0.9909, -0.13458 - 0xbfefae8e8e46cfbb, 0xbfc20116d4ec7bce, // -0.99006, -0.14066 - 0xbfefa7557f08a517, 0xbfc2c8106e8e613a, // -0.98918, -0.14673 - 0xbfef9fce55adb2c8, 0xbfc38edbb0cd8d14, // -0.98826, -0.1528 - 0xbfef97f924c9099b, 0xbfc45576b1293e5a, // -0.9873, -0.15886 - 0xbfef8fd5ffae41db, 0xbfc51bdf8597c5f2, // -0.98631, -0.16491 - 0xbfef8764fa714ba9, 0xbfc5e214448b3fc6, // -0.98528, -0.17096 - 0xbfef7ea629e63d6e, 0xbfc6a81304f64ab2, // -0.98421, -0.177 - 0xbfef7599a3a12077, 0xbfc76dd9de50bf31, // -0.98311, -0.18304 - 0xbfef6c3f7df5bbb7, 0xbfc83366e89c64c5, // -0.98196, -0.18907 - 0xbfef6297cff75cb0, 0xbfc8f8b83c69a60a, // -0.98079, -0.19509 - 0xbfef58a2b1789e84, 0xbfc9bdcbf2dc4366, // -0.97957, -0.2011 - 0xbfef4e603b0b2f2d, 0xbfca82a025b00451, // -0.97832, -0.20711 - 0xbfef43d085ff92dd, 0xbfcb4732ef3d6722, // -0.97703, -0.21311 - 0xbfef38f3ac64e589, 0xbfcc0b826a7e4f63, // -0.9757, -0.2191 - 0xbfef2dc9c9089a9d, 0xbfcccf8cb312b286, // -0.97434, -0.22508 - 0xbfef2252f7763ada, 0xbfcd934fe5454311, // -0.97294, -0.23106 - 0xbfef168f53f7205d, 0xbfce56ca1e101a1b, // -0.9715, -0.23702 - 0xbfef0a7efb9230d7, 0xbfcf19f97b215f1a, // -0.97003, -0.24298 - 0xbfeefe220c0b95ec, 0xbfcfdcdc1adfedf8, // -0.96852, -0.24893 - 0xbfeef178a3e473c2, 0xbfd04fb80e37fdae, // -0.96698, -0.25487 - 0xbfeee482e25a9dbc, 0xbfd0b0d9cfdbdb90, // -0.96539, -0.26079 - 0xbfeed740e7684963, 0xbfd111d262b1f677, // -0.96378, -0.26671 - 0xbfeec9b2d3c3bf84, 0xbfd172a0d7765177, // -0.96212, -0.27262 - 0xbfeebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // -0.96043, -0.27852 - 0xbfeeadb2e8e7a88e, 0xbfd233bbabc3bb72, // -0.9587, -0.28441 - 0xbfee9f4156c62dda, 0xbfd294062ed59f05, // -0.95694, -0.29028 - 0xbfee9084361df7f3, 0xbfd2f422daec0386, // -0.95514, -0.29615 - 0xbfee817bab4cd10d, 0xbfd35410c2e18152, // -0.95331, -0.30201 - 0xbfee7227db6a9744, 0xbfd3b3cefa0414b7, // -0.95144, -0.30785 - 0xbfee6288ec48e112, 0xbfd4135c94176602, // -0.94953, -0.31368 - 0xbfee529f04729ffc, 0xbfd472b8a5571054, // -0.94759, -0.3195 - 0xbfee426a4b2bc17e, 0xbfd4d1e24278e76a, // -0.94561, -0.32531 - 0xbfee31eae870ce25, 0xbfd530d880af3c24, // -0.94359, -0.33111 - 0xbfee212104f686e5, 0xbfd58f9a75ab1fdd, // -0.94154, -0.33689 - 0xbfee100cca2980ac, 0xbfd5ee27379ea693, // -0.93946, -0.34266 - 0xbfedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // -0.93734, -0.34842 - 0xbfeded05f7de47da, 0xbfd6aa9d7dc77e16, // -0.93518, -0.35416 - 0xbfeddb13b6ccc23d, 0xbfd7088530fa459e, // -0.93299, -0.3599 - 0xbfedc8d7cb410260, 0xbfd766340f2418f6, // -0.93077, -0.36561 - 0xbfedb6526238a09b, 0xbfd7c3a9311dcce7, // -0.92851, -0.37132 - 0xbfeda383a9668988, 0xbfd820e3b04eaac4, // -0.92621, -0.37701 - 0xbfed906bcf328d46, 0xbfd87de2a6aea963, // -0.92388, -0.38268 - 0xbfed7d0b02b8ecf9, 0xbfd8daa52ec8a4af, // -0.92151, -0.38835 - 0xbfed696173c9e68b, 0xbfd9372a63bc93d7, // -0.91911, -0.39399 - 0xbfed556f52e93eb1, 0xbfd993716141bdfe, // -0.91668, -0.39962 - 0xbfed4134d14dc93a, 0xbfd9ef7943a8ed8a, // -0.91421, -0.40524 - 0xbfed2cb220e0ef9f, 0xbfda4b4127dea1e4, // -0.91171, -0.41084 - 0xbfed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // -0.90917, -0.41643 - 0xbfed02d4feb2bd92, 0xbfdb020d6c7f4009, // -0.9066, -0.422 - 0xbfeced7af43cc773, 0xbfdb5d1009e15cc0, // -0.90399, -0.42756 - 0xbfecd7d9898b32f6, 0xbfdbb7cf2304bd01, // -0.90135, -0.43309 - 0xbfecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // -0.89867, -0.43862 - 0xbfecabc169a0b901, 0xbfdc6c7f4997000a, // -0.89597, -0.44412 - 0xbfec954b213411f5, 0xbfdcc66e9931c45d, // -0.89322, -0.44961 - 0xbfec7e8e52233cf3, 0xbfdd2016e8e9db5b, // -0.89045, -0.45508 - 0xbfec678b3488739b, 0xbfdd79775b86e389, // -0.88764, -0.46054 - 0xbfec5042012b6907, 0xbfddd28f1481cc58, // -0.8848, -0.46598 - 0xbfec38b2f180bdb1, 0xbfde2b5d3806f63b, // -0.88192, -0.4714 - 0xbfec20de3fa971b0, 0xbfde83e0eaf85113, // -0.87901, -0.4768 - 0xbfec08c426725549, 0xbfdedc1952ef78d5, // -0.87607, -0.48218 - 0xbfebf064e15377dd, 0xbfdf3405963fd068, // -0.87309, -0.48755 - 0xbfebd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // -0.87009, -0.4929 - 0xbfebbed7c49380ea, 0xbfdfe2f64be7120f, // -0.86705, -0.49823 - 0xbfeba5aa673590d2, 0xbfe01cfc874c3eb7, // -0.86397, -0.50354 - 0xbfeb8c38d27504e9, 0xbfe0485626ae221a, // -0.86087, -0.50883 - 0xbfeb728345196e3e, 0xbfe073879922ffed, // -0.85773, -0.5141 - 0xbfeb5889fe921405, 0xbfe09e907417c5e1, // -0.85456, -0.51936 - 0xbfeb3e4d3ef55712, 0xbfe0c9704d5d898f, // -0.85136, -0.52459 - 0xbfeb23cd470013b4, 0xbfe0f426bb2a8e7d, // -0.84812, -0.5298 - 0xbfeb090a58150200, 0xbfe11eb3541b4b22, // -0.84485, -0.535 - 0xbfeaee04b43c1474, 0xbfe14915af336ceb, // -0.84155, -0.54017 - 0xbfead2bc9e21d511, 0xbfe1734d63dedb49, // -0.83822, -0.54532 - 0xbfeab7325916c0d4, 0xbfe19d5a09f2b9b8, // -0.83486, -0.55046 - 0xbfea9b66290ea1a3, 0xbfe1c73b39ae68c8, // -0.83147, -0.55557 - 0xbfea7f58529fe69d, 0xbfe1f0f08bbc861b, // -0.82805, -0.56066 - 0xbfea63091b02fae2, 0xbfe21a799933eb58, // -0.82459, -0.56573 - 0xbfea4678c8119ac8, 0xbfe243d5fb98ac1f, // -0.8211, -0.57078 - 0xbfea29a7a0462782, 0xbfe26d054cdd12df, // -0.81758, -0.57581 - 0xbfea0c95eabaf937, 0xbfe2960727629ca8, // -0.81404, -0.58081 - 0xbfe9ef43ef29af94, 0xbfe2bedb25faf3ea, // -0.81046, -0.5858 - 0xbfe9d1b1f5ea80d6, 0xbfe2e780e3e8ea16, // -0.80685, -0.59076 - 0xbfe9b3e047f38741, 0xbfe30ff7fce17035, // -0.80321, -0.5957 - 0xbfe995cf2ed80d22, 0xbfe338400d0c8e57, // -0.79954, -0.60062 - 0xbfe9777ef4c7d742, 0xbfe36058b10659f3, // -0.79584, -0.60551 - 0xbfe958efe48e6dd7, 0xbfe3884185dfeb22, // -0.79211, -0.61038 - 0xbfe93a22499263fc, 0xbfe3affa292050b9, // -0.78835, -0.61523 - 0xbfe91b166fd49da2, 0xbfe3d78238c58343, // -0.78456, -0.62006 - 0xbfe8fbcca3ef940d, 0xbfe3fed9534556d4, // -0.78074, -0.62486 - 0xbfe8dc45331698cc, 0xbfe425ff178e6bb1, // -0.77689, -0.62964 - 0xbfe8bc806b151741, 0xbfe44cf325091dd6, // -0.77301, -0.63439 - 0xbfe89c7e9a4dd4ab, 0xbfe473b51b987347, // -0.7691, -0.63912 - 0xbfe87c400fba2ebf, 0xbfe49a449b9b0938, // -0.76517, -0.64383 - 0xbfe85bc51ae958cc, 0xbfe4c0a145ec0004, // -0.7612, -0.64851 - 0xbfe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // -0.75721, -0.65317 - 0xbfe81a1b33b57acc, 0xbfe50cc09f59a09b, // -0.75319, -0.65781 - 0xbfe7f8ece3571771, 0xbfe5328292a35596, // -0.74914, -0.66242 - 0xbfe7d7836cc33db2, 0xbfe5581038975137, // -0.74506, -0.667 - 0xbfe7b5df226aafb0, 0xbfe57d69348cec9f, // -0.74095, -0.67156 - 0xbfe79400574f55e4, 0xbfe5a28d2a5d7250, // -0.73682, -0.67609 - 0xbfe771e75f037261, 0xbfe5c77bbe65018c, // -0.73265, -0.6806 - 0xbfe74f948da8d28d, 0xbfe5ec3495837074, // -0.72846, -0.68508 - 0xbfe72d0837efff97, 0xbfe610b7551d2cde, // -0.72425, -0.68954 - 0xbfe70a42b3176d7a, 0xbfe63503a31c1be8, // -0.72, -0.69397 - 0xbfe6e74454eaa8ae, 0xbfe6591925f0783e, // -0.71573, -0.69838 - 0xbfe6c40d73c18275, 0xbfe67cf78491af10, // -0.71143, -0.70275 - 0xbfe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // -0.70711, -0.70711 - 0xbfe67cf78491af10, 0xbfe6c40d73c18275, // -0.70275, -0.71143 - 0xbfe6591925f0783e, 0xbfe6e74454eaa8ae, // -0.69838, -0.71573 - 0xbfe63503a31c1be8, 0xbfe70a42b3176d7a, // -0.69397, -0.72 - 0xbfe610b7551d2cde, 0xbfe72d0837efff97, // -0.68954, -0.72425 - 0xbfe5ec3495837074, 0xbfe74f948da8d28d, // -0.68508, -0.72846 - 0xbfe5c77bbe65018c, 0xbfe771e75f037261, // -0.6806, -0.73265 - 0xbfe5a28d2a5d7250, 0xbfe79400574f55e4, // -0.67609, -0.73682 - 0xbfe57d69348cec9f, 0xbfe7b5df226aafb0, // -0.67156, -0.74095 - 0xbfe5581038975137, 0xbfe7d7836cc33db2, // -0.667, -0.74506 - 0xbfe5328292a35596, 0xbfe7f8ece3571771, // -0.66242, -0.74914 - 0xbfe50cc09f59a09b, 0xbfe81a1b33b57acc, // -0.65781, -0.75319 - 0xbfe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // -0.65317, -0.75721 - 0xbfe4c0a145ec0004, 0xbfe85bc51ae958cc, // -0.64851, -0.7612 - 0xbfe49a449b9b0938, 0xbfe87c400fba2ebf, // -0.64383, -0.76517 - 0xbfe473b51b987347, 0xbfe89c7e9a4dd4ab, // -0.63912, -0.7691 - 0xbfe44cf325091dd6, 0xbfe8bc806b151741, // -0.63439, -0.77301 - 0xbfe425ff178e6bb1, 0xbfe8dc45331698cc, // -0.62964, -0.77689 - 0xbfe3fed9534556d4, 0xbfe8fbcca3ef940d, // -0.62486, -0.78074 - 0xbfe3d78238c58343, 0xbfe91b166fd49da2, // -0.62006, -0.78456 - 0xbfe3affa292050b9, 0xbfe93a22499263fc, // -0.61523, -0.78835 - 0xbfe3884185dfeb22, 0xbfe958efe48e6dd7, // -0.61038, -0.79211 - 0xbfe36058b10659f3, 0xbfe9777ef4c7d742, // -0.60551, -0.79584 - 0xbfe338400d0c8e57, 0xbfe995cf2ed80d22, // -0.60062, -0.79954 - 0xbfe30ff7fce17035, 0xbfe9b3e047f38741, // -0.5957, -0.80321 - 0xbfe2e780e3e8ea16, 0xbfe9d1b1f5ea80d6, // -0.59076, -0.80685 - 0xbfe2bedb25faf3ea, 0xbfe9ef43ef29af94, // -0.5858, -0.81046 - 0xbfe2960727629ca8, 0xbfea0c95eabaf937, // -0.58081, -0.81404 - 0xbfe26d054cdd12df, 0xbfea29a7a0462782, // -0.57581, -0.81758 - 0xbfe243d5fb98ac1f, 0xbfea4678c8119ac8, // -0.57078, -0.8211 - 0xbfe21a799933eb58, 0xbfea63091b02fae2, // -0.56573, -0.82459 - 0xbfe1f0f08bbc861b, 0xbfea7f58529fe69d, // -0.56066, -0.82805 - 0xbfe1c73b39ae68c8, 0xbfea9b66290ea1a3, // -0.55557, -0.83147 - 0xbfe19d5a09f2b9b8, 0xbfeab7325916c0d4, // -0.55046, -0.83486 - 0xbfe1734d63dedb49, 0xbfead2bc9e21d511, // -0.54532, -0.83822 - 0xbfe14915af336ceb, 0xbfeaee04b43c1474, // -0.54017, -0.84155 - 0xbfe11eb3541b4b22, 0xbfeb090a58150200, // -0.535, -0.84485 - 0xbfe0f426bb2a8e7d, 0xbfeb23cd470013b4, // -0.5298, -0.84812 - 0xbfe0c9704d5d898f, 0xbfeb3e4d3ef55712, // -0.52459, -0.85136 - 0xbfe09e907417c5e1, 0xbfeb5889fe921405, // -0.51936, -0.85456 - 0xbfe073879922ffed, 0xbfeb728345196e3e, // -0.5141, -0.85773 - 0xbfe0485626ae221a, 0xbfeb8c38d27504e9, // -0.50883, -0.86087 - 0xbfe01cfc874c3eb7, 0xbfeba5aa673590d2, // -0.50354, -0.86397 - 0xbfdfe2f64be7120f, 0xbfebbed7c49380ea, // -0.49823, -0.86705 - 0xbfdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // -0.4929, -0.87009 - 0xbfdf3405963fd068, 0xbfebf064e15377dd, // -0.48755, -0.87309 - 0xbfdedc1952ef78d5, 0xbfec08c426725549, // -0.48218, -0.87607 - 0xbfde83e0eaf85113, 0xbfec20de3fa971b0, // -0.4768, -0.87901 - 0xbfde2b5d3806f63b, 0xbfec38b2f180bdb1, // -0.4714, -0.88192 - 0xbfddd28f1481cc58, 0xbfec5042012b6907, // -0.46598, -0.8848 - 0xbfdd79775b86e389, 0xbfec678b3488739b, // -0.46054, -0.88764 - 0xbfdd2016e8e9db5b, 0xbfec7e8e52233cf3, // -0.45508, -0.89045 - 0xbfdcc66e9931c45d, 0xbfec954b213411f5, // -0.44961, -0.89322 - 0xbfdc6c7f4997000a, 0xbfecabc169a0b901, // -0.44412, -0.89597 - 0xbfdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // -0.43862, -0.89867 - 0xbfdbb7cf2304bd01, 0xbfecd7d9898b32f6, // -0.43309, -0.90135 - 0xbfdb5d1009e15cc0, 0xbfeced7af43cc773, // -0.42756, -0.90399 - 0xbfdb020d6c7f4009, 0xbfed02d4feb2bd92, // -0.422, -0.9066 - 0xbfdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // -0.41643, -0.90917 - 0xbfda4b4127dea1e4, 0xbfed2cb220e0ef9f, // -0.41084, -0.91171 - 0xbfd9ef7943a8ed8a, 0xbfed4134d14dc93a, // -0.40524, -0.91421 - 0xbfd993716141bdfe, 0xbfed556f52e93eb1, // -0.39962, -0.91668 - 0xbfd9372a63bc93d7, 0xbfed696173c9e68b, // -0.39399, -0.91911 - 0xbfd8daa52ec8a4af, 0xbfed7d0b02b8ecf9, // -0.38835, -0.92151 - 0xbfd87de2a6aea963, 0xbfed906bcf328d46, // -0.38268, -0.92388 - 0xbfd820e3b04eaac4, 0xbfeda383a9668988, // -0.37701, -0.92621 - 0xbfd7c3a9311dcce7, 0xbfedb6526238a09b, // -0.37132, -0.92851 - 0xbfd766340f2418f6, 0xbfedc8d7cb410260, // -0.36561, -0.93077 - 0xbfd7088530fa459e, 0xbfeddb13b6ccc23d, // -0.3599, -0.93299 - 0xbfd6aa9d7dc77e16, 0xbfeded05f7de47da, // -0.35416, -0.93518 - 0xbfd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // -0.34842, -0.93734 - 0xbfd5ee27379ea693, 0xbfee100cca2980ac, // -0.34266, -0.93946 - 0xbfd58f9a75ab1fdd, 0xbfee212104f686e5, // -0.33689, -0.94154 - 0xbfd530d880af3c24, 0xbfee31eae870ce25, // -0.33111, -0.94359 - 0xbfd4d1e24278e76a, 0xbfee426a4b2bc17e, // -0.32531, -0.94561 - 0xbfd472b8a5571054, 0xbfee529f04729ffc, // -0.3195, -0.94759 - 0xbfd4135c94176602, 0xbfee6288ec48e112, // -0.31368, -0.94953 - 0xbfd3b3cefa0414b7, 0xbfee7227db6a9744, // -0.30785, -0.95144 - 0xbfd35410c2e18152, 0xbfee817bab4cd10d, // -0.30201, -0.95331 - 0xbfd2f422daec0386, 0xbfee9084361df7f3, // -0.29615, -0.95514 - 0xbfd294062ed59f05, 0xbfee9f4156c62dda, // -0.29028, -0.95694 - 0xbfd233bbabc3bb72, 0xbfeeadb2e8e7a88e, // -0.28441, -0.9587 - 0xbfd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // -0.27852, -0.96043 - 0xbfd172a0d7765177, 0xbfeec9b2d3c3bf84, // -0.27262, -0.96212 - 0xbfd111d262b1f677, 0xbfeed740e7684963, // -0.26671, -0.96378 - 0xbfd0b0d9cfdbdb90, 0xbfeee482e25a9dbc, // -0.26079, -0.96539 - 0xbfd04fb80e37fdae, 0xbfeef178a3e473c2, // -0.25487, -0.96698 - 0xbfcfdcdc1adfedf8, 0xbfeefe220c0b95ec, // -0.24893, -0.96852 - 0xbfcf19f97b215f1a, 0xbfef0a7efb9230d7, // -0.24298, -0.97003 - 0xbfce56ca1e101a1b, 0xbfef168f53f7205d, // -0.23702, -0.9715 - 0xbfcd934fe5454311, 0xbfef2252f7763ada, // -0.23106, -0.97294 - 0xbfcccf8cb312b286, 0xbfef2dc9c9089a9d, // -0.22508, -0.97434 - 0xbfcc0b826a7e4f63, 0xbfef38f3ac64e589, // -0.2191, -0.9757 - 0xbfcb4732ef3d6722, 0xbfef43d085ff92dd, // -0.21311, -0.97703 - 0xbfca82a025b00451, 0xbfef4e603b0b2f2d, // -0.20711, -0.97832 - 0xbfc9bdcbf2dc4366, 0xbfef58a2b1789e84, // -0.2011, -0.97957 - 0xbfc8f8b83c69a60a, 0xbfef6297cff75cb0, // -0.19509, -0.98079 - 0xbfc83366e89c64c5, 0xbfef6c3f7df5bbb7, // -0.18907, -0.98196 - 0xbfc76dd9de50bf31, 0xbfef7599a3a12077, // -0.18304, -0.98311 - 0xbfc6a81304f64ab2, 0xbfef7ea629e63d6e, // -0.177, -0.98421 - 0xbfc5e214448b3fc6, 0xbfef8764fa714ba9, // -0.17096, -0.98528 - 0xbfc51bdf8597c5f2, 0xbfef8fd5ffae41db, // -0.16491, -0.98631 - 0xbfc45576b1293e5a, 0xbfef97f924c9099b, // -0.15886, -0.9873 - 0xbfc38edbb0cd8d14, 0xbfef9fce55adb2c8, // -0.1528, -0.98826 - 0xbfc2c8106e8e613a, 0xbfefa7557f08a517, // -0.14673, -0.98918 - 0xbfc20116d4ec7bce, 0xbfefae8e8e46cfbb, // -0.14066, -0.99006 - 0xbfc139f0cedaf576, 0xbfefb5797195d741, // -0.13458, -0.9909 - 0xbfc072a047ba831d, 0xbfefbc1617e44186, // -0.1285, -0.99171 - 0xbfbf564e56a9730e, 0xbfefc26470e19fd3, // -0.12241, -0.99248 - 0xbfbdc70ecbae9fc8, 0xbfefc8646cfeb721, // -0.11632, -0.99321 - 0xbfbc3785c79ec2d5, 0xbfefce15fd6da67b, // -0.11022, -0.99391 - 0xbfbaa7b724495c04, 0xbfefd37914220b84, // -0.10412, -0.99456 - 0xbfb917a6bc29b42c, 0xbfefd88da3d12526, // -0.098017, -0.99518 - 0xbfb787586a5d5b21, 0xbfefdd539ff1f456, // -0.091909, -0.99577 - 0xbfb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // -0.085797, -0.99631 - 0xbfb4661179272096, 0xbfefe5f3af2e3940, // -0.079682, -0.99682 - 0xbfb2d52092ce19f6, 0xbfefe9cdad01883a, // -0.073565, -0.99729 - 0xbfb1440134d709b2, 0xbfefed58ecb673c4, // -0.067444, -0.99772 - 0xbfaf656e79f820e0, 0xbfeff095658e71ad, // -0.061321, -0.99812 - 0xbfac428d12c0d7e3, 0xbfeff3830f8d575c, // -0.055195, -0.99848 - 0xbfa91f65f10dd814, 0xbfeff621e3796d7e, // -0.049068, -0.9988 - 0xbfa5fc00d290cd43, 0xbfeff871dadb81df, // -0.042938, -0.99908 - 0xbfa2d865759455cd, 0xbfeffa72effef75d, // -0.036807, -0.99932 - 0xbf9f693731d1cf01, 0xbfeffc251df1d3f8, // -0.030675, -0.99953 - 0xbf992155f7a3667e, 0xbfeffd886084cd0d, // -0.024541, -0.9997 - 0xbf92d936bbe30efd, 0xbfeffe9cb44b51a1, // -0.018407, -0.99983 - 0xbf8921d1fcdec784, 0xbfefff62169b92db, // -0.012272, -0.99992 - 0xbf7921f0fe670071, 0xbfefffd8858e8a92, //-0.0061359, -0.99998 - 0x0000000000000000, 0xbff0000000000000, // 0, -1 - 0x3f7921f0fe670071, 0xbfefffd8858e8a92, // 0.0061359, -0.99998 - 0x3f8921d1fcdec784, 0xbfefff62169b92db, // 0.012272, -0.99992 - 0x3f92d936bbe30efd, 0xbfeffe9cb44b51a1, // 0.018407, -0.99983 - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, // 0.024541, -0.9997 - 0x3f9f693731d1cf01, 0xbfeffc251df1d3f8, // 0.030675, -0.99953 - 0x3fa2d865759455cd, 0xbfeffa72effef75d, // 0.036807, -0.99932 - 0x3fa5fc00d290cd43, 0xbfeff871dadb81df, // 0.042938, -0.99908 - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, // 0.049068, -0.9988 - 0x3fac428d12c0d7e3, 0xbfeff3830f8d575c, // 0.055195, -0.99848 - 0x3faf656e79f820e0, 0xbfeff095658e71ad, // 0.061321, -0.99812 - 0x3fb1440134d709b2, 0xbfefed58ecb673c4, // 0.067444, -0.99772 - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, // 0.073565, -0.99729 - 0x3fb4661179272096, 0xbfefe5f3af2e3940, // 0.079682, -0.99682 - 0x3fb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // 0.085797, -0.99631 - 0x3fb787586a5d5b21, 0xbfefdd539ff1f456, // 0.091909, -0.99577 - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518 - 0x3fbaa7b724495c04, 0xbfefd37914220b84, // 0.10412, -0.99456 - 0x3fbc3785c79ec2d5, 0xbfefce15fd6da67b, // 0.11022, -0.99391 - 0x3fbdc70ecbae9fc8, 0xbfefc8646cfeb721, // 0.11632, -0.99321 - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248 - 0x3fc072a047ba831d, 0xbfefbc1617e44186, // 0.1285, -0.99171 - 0x3fc139f0cedaf576, 0xbfefb5797195d741, // 0.13458, -0.9909 - 0x3fc20116d4ec7bce, 0xbfefae8e8e46cfbb, // 0.14066, -0.99006 - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918 - 0x3fc38edbb0cd8d14, 0xbfef9fce55adb2c8, // 0.1528, -0.98826 - 0x3fc45576b1293e5a, 0xbfef97f924c9099b, // 0.15886, -0.9873 - 0x3fc51bdf8597c5f2, 0xbfef8fd5ffae41db, // 0.16491, -0.98631 - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528 - 0x3fc6a81304f64ab2, 0xbfef7ea629e63d6e, // 0.177, -0.98421 - 0x3fc76dd9de50bf31, 0xbfef7599a3a12077, // 0.18304, -0.98311 - 0x3fc83366e89c64c5, 0xbfef6c3f7df5bbb7, // 0.18907, -0.98196 - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079 - 0x3fc9bdcbf2dc4366, 0xbfef58a2b1789e84, // 0.2011, -0.97957 - 0x3fca82a025b00451, 0xbfef4e603b0b2f2d, // 0.20711, -0.97832 - 0x3fcb4732ef3d6722, 0xbfef43d085ff92dd, // 0.21311, -0.97703 - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757 - 0x3fcccf8cb312b286, 0xbfef2dc9c9089a9d, // 0.22508, -0.97434 - 0x3fcd934fe5454311, 0xbfef2252f7763ada, // 0.23106, -0.97294 - 0x3fce56ca1e101a1b, 0xbfef168f53f7205d, // 0.23702, -0.9715 - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003 - 0x3fcfdcdc1adfedf8, 0xbfeefe220c0b95ec, // 0.24893, -0.96852 - 0x3fd04fb80e37fdae, 0xbfeef178a3e473c2, // 0.25487, -0.96698 - 0x3fd0b0d9cfdbdb90, 0xbfeee482e25a9dbc, // 0.26079, -0.96539 - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378 - 0x3fd172a0d7765177, 0xbfeec9b2d3c3bf84, // 0.27262, -0.96212 - 0x3fd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // 0.27852, -0.96043 - 0x3fd233bbabc3bb72, 0xbfeeadb2e8e7a88e, // 0.28441, -0.9587 - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694 - 0x3fd2f422daec0386, 0xbfee9084361df7f3, // 0.29615, -0.95514 - 0x3fd35410c2e18152, 0xbfee817bab4cd10d, // 0.30201, -0.95331 - 0x3fd3b3cefa0414b7, 0xbfee7227db6a9744, // 0.30785, -0.95144 - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953 - 0x3fd472b8a5571054, 0xbfee529f04729ffc, // 0.3195, -0.94759 - 0x3fd4d1e24278e76a, 0xbfee426a4b2bc17e, // 0.32531, -0.94561 - 0x3fd530d880af3c24, 0xbfee31eae870ce25, // 0.33111, -0.94359 - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154 - 0x3fd5ee27379ea693, 0xbfee100cca2980ac, // 0.34266, -0.93946 - 0x3fd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // 0.34842, -0.93734 - 0x3fd6aa9d7dc77e16, 0xbfeded05f7de47da, // 0.35416, -0.93518 - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299 - 0x3fd766340f2418f6, 0xbfedc8d7cb410260, // 0.36561, -0.93077 - 0x3fd7c3a9311dcce7, 0xbfedb6526238a09b, // 0.37132, -0.92851 - 0x3fd820e3b04eaac4, 0xbfeda383a9668988, // 0.37701, -0.92621 - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388 - 0x3fd8daa52ec8a4af, 0xbfed7d0b02b8ecf9, // 0.38835, -0.92151 - 0x3fd9372a63bc93d7, 0xbfed696173c9e68b, // 0.39399, -0.91911 - 0x3fd993716141bdfe, 0xbfed556f52e93eb1, // 0.39962, -0.91668 - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421 - 0x3fda4b4127dea1e4, 0xbfed2cb220e0ef9f, // 0.41084, -0.91171 - 0x3fdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // 0.41643, -0.90917 - 0x3fdb020d6c7f4009, 0xbfed02d4feb2bd92, // 0.422, -0.9066 - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399 - 0x3fdbb7cf2304bd01, 0xbfecd7d9898b32f6, // 0.43309, -0.90135 - 0x3fdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // 0.43862, -0.89867 - 0x3fdc6c7f4997000a, 0xbfecabc169a0b901, // 0.44412, -0.89597 - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322 - 0x3fdd2016e8e9db5b, 0xbfec7e8e52233cf3, // 0.45508, -0.89045 - 0x3fdd79775b86e389, 0xbfec678b3488739b, // 0.46054, -0.88764 - 0x3fddd28f1481cc58, 0xbfec5042012b6907, // 0.46598, -0.8848 - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192 - 0x3fde83e0eaf85113, 0xbfec20de3fa971b0, // 0.4768, -0.87901 - 0x3fdedc1952ef78d5, 0xbfec08c426725549, // 0.48218, -0.87607 - 0x3fdf3405963fd068, 0xbfebf064e15377dd, // 0.48755, -0.87309 - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009 - 0x3fdfe2f64be7120f, 0xbfebbed7c49380ea, // 0.49823, -0.86705 - 0x3fe01cfc874c3eb7, 0xbfeba5aa673590d2, // 0.50354, -0.86397 - 0x3fe0485626ae221a, 0xbfeb8c38d27504e9, // 0.50883, -0.86087 - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773 - 0x3fe09e907417c5e1, 0xbfeb5889fe921405, // 0.51936, -0.85456 - 0x3fe0c9704d5d898f, 0xbfeb3e4d3ef55712, // 0.52459, -0.85136 - 0x3fe0f426bb2a8e7d, 0xbfeb23cd470013b4, // 0.5298, -0.84812 - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485 - 0x3fe14915af336ceb, 0xbfeaee04b43c1474, // 0.54017, -0.84155 - 0x3fe1734d63dedb49, 0xbfead2bc9e21d511, // 0.54532, -0.83822 - 0x3fe19d5a09f2b9b8, 0xbfeab7325916c0d4, // 0.55046, -0.83486 - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147 - 0x3fe1f0f08bbc861b, 0xbfea7f58529fe69d, // 0.56066, -0.82805 - 0x3fe21a799933eb58, 0xbfea63091b02fae2, // 0.56573, -0.82459 - 0x3fe243d5fb98ac1f, 0xbfea4678c8119ac8, // 0.57078, -0.8211 - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758 - 0x3fe2960727629ca8, 0xbfea0c95eabaf937, // 0.58081, -0.81404 - 0x3fe2bedb25faf3ea, 0xbfe9ef43ef29af94, // 0.5858, -0.81046 - 0x3fe2e780e3e8ea16, 0xbfe9d1b1f5ea80d6, // 0.59076, -0.80685 - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321 - 0x3fe338400d0c8e57, 0xbfe995cf2ed80d22, // 0.60062, -0.79954 - 0x3fe36058b10659f3, 0xbfe9777ef4c7d742, // 0.60551, -0.79584 - 0x3fe3884185dfeb22, 0xbfe958efe48e6dd7, // 0.61038, -0.79211 - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835 - 0x3fe3d78238c58343, 0xbfe91b166fd49da2, // 0.62006, -0.78456 - 0x3fe3fed9534556d4, 0xbfe8fbcca3ef940d, // 0.62486, -0.78074 - 0x3fe425ff178e6bb1, 0xbfe8dc45331698cc, // 0.62964, -0.77689 - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301 - 0x3fe473b51b987347, 0xbfe89c7e9a4dd4ab, // 0.63912, -0.7691 - 0x3fe49a449b9b0938, 0xbfe87c400fba2ebf, // 0.64383, -0.76517 - 0x3fe4c0a145ec0004, 0xbfe85bc51ae958cc, // 0.64851, -0.7612 - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721 - 0x3fe50cc09f59a09b, 0xbfe81a1b33b57acc, // 0.65781, -0.75319 - 0x3fe5328292a35596, 0xbfe7f8ece3571771, // 0.66242, -0.74914 - 0x3fe5581038975137, 0xbfe7d7836cc33db2, // 0.667, -0.74506 - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095 - 0x3fe5a28d2a5d7250, 0xbfe79400574f55e4, // 0.67609, -0.73682 - 0x3fe5c77bbe65018c, 0xbfe771e75f037261, // 0.6806, -0.73265 - 0x3fe5ec3495837074, 0xbfe74f948da8d28d, // 0.68508, -0.72846 - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425 - 0x3fe63503a31c1be8, 0xbfe70a42b3176d7a, // 0.69397, -0.72 - 0x3fe6591925f0783e, 0xbfe6e74454eaa8ae, // 0.69838, -0.71573 - 0x3fe67cf78491af10, 0xbfe6c40d73c18275, // 0.70275, -0.71143 - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711 - 0x3fe6c40d73c18275, 0xbfe67cf78491af10, // 0.71143, -0.70275 - 0x3fe6e74454eaa8ae, 0xbfe6591925f0783e, // 0.71573, -0.69838 - 0x3fe70a42b3176d7a, 0xbfe63503a31c1be8, // 0.72, -0.69397 - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954 - 0x3fe74f948da8d28d, 0xbfe5ec3495837074, // 0.72846, -0.68508 - 0x3fe771e75f037261, 0xbfe5c77bbe65018c, // 0.73265, -0.6806 - 0x3fe79400574f55e4, 0xbfe5a28d2a5d7250, // 0.73682, -0.67609 - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156 - 0x3fe7d7836cc33db2, 0xbfe5581038975137, // 0.74506, -0.667 - 0x3fe7f8ece3571771, 0xbfe5328292a35596, // 0.74914, -0.66242 - 0x3fe81a1b33b57acc, 0xbfe50cc09f59a09b, // 0.75319, -0.65781 - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317 - 0x3fe85bc51ae958cc, 0xbfe4c0a145ec0004, // 0.7612, -0.64851 - 0x3fe87c400fba2ebf, 0xbfe49a449b9b0938, // 0.76517, -0.64383 - 0x3fe89c7e9a4dd4ab, 0xbfe473b51b987347, // 0.7691, -0.63912 - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439 - 0x3fe8dc45331698cc, 0xbfe425ff178e6bb1, // 0.77689, -0.62964 - 0x3fe8fbcca3ef940d, 0xbfe3fed9534556d4, // 0.78074, -0.62486 - 0x3fe91b166fd49da2, 0xbfe3d78238c58343, // 0.78456, -0.62006 - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523 - 0x3fe958efe48e6dd7, 0xbfe3884185dfeb22, // 0.79211, -0.61038 - 0x3fe9777ef4c7d742, 0xbfe36058b10659f3, // 0.79584, -0.60551 - 0x3fe995cf2ed80d22, 0xbfe338400d0c8e57, // 0.79954, -0.60062 - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957 - 0x3fe9d1b1f5ea80d6, 0xbfe2e780e3e8ea16, // 0.80685, -0.59076 - 0x3fe9ef43ef29af94, 0xbfe2bedb25faf3ea, // 0.81046, -0.5858 - 0x3fea0c95eabaf937, 0xbfe2960727629ca8, // 0.81404, -0.58081 - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581 - 0x3fea4678c8119ac8, 0xbfe243d5fb98ac1f, // 0.8211, -0.57078 - 0x3fea63091b02fae2, 0xbfe21a799933eb58, // 0.82459, -0.56573 - 0x3fea7f58529fe69d, 0xbfe1f0f08bbc861b, // 0.82805, -0.56066 - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557 - 0x3feab7325916c0d4, 0xbfe19d5a09f2b9b8, // 0.83486, -0.55046 - 0x3fead2bc9e21d511, 0xbfe1734d63dedb49, // 0.83822, -0.54532 - 0x3feaee04b43c1474, 0xbfe14915af336ceb, // 0.84155, -0.54017 - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535 - 0x3feb23cd470013b4, 0xbfe0f426bb2a8e7d, // 0.84812, -0.5298 - 0x3feb3e4d3ef55712, 0xbfe0c9704d5d898f, // 0.85136, -0.52459 - 0x3feb5889fe921405, 0xbfe09e907417c5e1, // 0.85456, -0.51936 - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141 - 0x3feb8c38d27504e9, 0xbfe0485626ae221a, // 0.86087, -0.50883 - 0x3feba5aa673590d2, 0xbfe01cfc874c3eb7, // 0.86397, -0.50354 - 0x3febbed7c49380ea, 0xbfdfe2f64be7120f, // 0.86705, -0.49823 - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929 - 0x3febf064e15377dd, 0xbfdf3405963fd068, // 0.87309, -0.48755 - 0x3fec08c426725549, 0xbfdedc1952ef78d5, // 0.87607, -0.48218 - 0x3fec20de3fa971b0, 0xbfde83e0eaf85113, // 0.87901, -0.4768 - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714 - 0x3fec5042012b6907, 0xbfddd28f1481cc58, // 0.8848, -0.46598 - 0x3fec678b3488739b, 0xbfdd79775b86e389, // 0.88764, -0.46054 - 0x3fec7e8e52233cf3, 0xbfdd2016e8e9db5b, // 0.89045, -0.45508 - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961 - 0x3fecabc169a0b901, 0xbfdc6c7f4997000a, // 0.89597, -0.44412 - 0x3fecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // 0.89867, -0.43862 - 0x3fecd7d9898b32f6, 0xbfdbb7cf2304bd01, // 0.90135, -0.43309 - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756 - 0x3fed02d4feb2bd92, 0xbfdb020d6c7f4009, // 0.9066, -0.422 - 0x3fed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // 0.90917, -0.41643 - 0x3fed2cb220e0ef9f, 0xbfda4b4127dea1e4, // 0.91171, -0.41084 - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524 - 0x3fed556f52e93eb1, 0xbfd993716141bdfe, // 0.91668, -0.39962 - 0x3fed696173c9e68b, 0xbfd9372a63bc93d7, // 0.91911, -0.39399 - 0x3fed7d0b02b8ecf9, 0xbfd8daa52ec8a4af, // 0.92151, -0.38835 - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268 - 0x3feda383a9668988, 0xbfd820e3b04eaac4, // 0.92621, -0.37701 - 0x3fedb6526238a09b, 0xbfd7c3a9311dcce7, // 0.92851, -0.37132 - 0x3fedc8d7cb410260, 0xbfd766340f2418f6, // 0.93077, -0.36561 - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599 - 0x3feded05f7de47da, 0xbfd6aa9d7dc77e16, // 0.93518, -0.35416 - 0x3fedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // 0.93734, -0.34842 - 0x3fee100cca2980ac, 0xbfd5ee27379ea693, // 0.93946, -0.34266 - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689 - 0x3fee31eae870ce25, 0xbfd530d880af3c24, // 0.94359, -0.33111 - 0x3fee426a4b2bc17e, 0xbfd4d1e24278e76a, // 0.94561, -0.32531 - 0x3fee529f04729ffc, 0xbfd472b8a5571054, // 0.94759, -0.3195 - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368 - 0x3fee7227db6a9744, 0xbfd3b3cefa0414b7, // 0.95144, -0.30785 - 0x3fee817bab4cd10d, 0xbfd35410c2e18152, // 0.95331, -0.30201 - 0x3fee9084361df7f3, 0xbfd2f422daec0386, // 0.95514, -0.29615 - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028 - 0x3feeadb2e8e7a88e, 0xbfd233bbabc3bb72, // 0.9587, -0.28441 - 0x3feebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // 0.96043, -0.27852 - 0x3feec9b2d3c3bf84, 0xbfd172a0d7765177, // 0.96212, -0.27262 - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671 - 0x3feee482e25a9dbc, 0xbfd0b0d9cfdbdb90, // 0.96539, -0.26079 - 0x3feef178a3e473c2, 0xbfd04fb80e37fdae, // 0.96698, -0.25487 - 0x3feefe220c0b95ec, 0xbfcfdcdc1adfedf8, // 0.96852, -0.24893 - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298 - 0x3fef168f53f7205d, 0xbfce56ca1e101a1b, // 0.9715, -0.23702 - 0x3fef2252f7763ada, 0xbfcd934fe5454311, // 0.97294, -0.23106 - 0x3fef2dc9c9089a9d, 0xbfcccf8cb312b286, // 0.97434, -0.22508 - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191 - 0x3fef43d085ff92dd, 0xbfcb4732ef3d6722, // 0.97703, -0.21311 - 0x3fef4e603b0b2f2d, 0xbfca82a025b00451, // 0.97832, -0.20711 - 0x3fef58a2b1789e84, 0xbfc9bdcbf2dc4366, // 0.97957, -0.2011 - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509 - 0x3fef6c3f7df5bbb7, 0xbfc83366e89c64c5, // 0.98196, -0.18907 - 0x3fef7599a3a12077, 0xbfc76dd9de50bf31, // 0.98311, -0.18304 - 0x3fef7ea629e63d6e, 0xbfc6a81304f64ab2, // 0.98421, -0.177 - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096 - 0x3fef8fd5ffae41db, 0xbfc51bdf8597c5f2, // 0.98631, -0.16491 - 0x3fef97f924c9099b, 0xbfc45576b1293e5a, // 0.9873, -0.15886 - 0x3fef9fce55adb2c8, 0xbfc38edbb0cd8d14, // 0.98826, -0.1528 - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673 - 0x3fefae8e8e46cfbb, 0xbfc20116d4ec7bce, // 0.99006, -0.14066 - 0x3fefb5797195d741, 0xbfc139f0cedaf576, // 0.9909, -0.13458 - 0x3fefbc1617e44186, 0xbfc072a047ba831d, // 0.99171, -0.1285 - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241 - 0x3fefc8646cfeb721, 0xbfbdc70ecbae9fc8, // 0.99321, -0.11632 - 0x3fefce15fd6da67b, 0xbfbc3785c79ec2d5, // 0.99391, -0.11022 - 0x3fefd37914220b84, 0xbfbaa7b724495c04, // 0.99456, -0.10412 - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518, -0.098017 - 0x3fefdd539ff1f456, 0xbfb787586a5d5b21, // 0.99577, -0.091909 - 0x3fefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // 0.99631, -0.085797 - 0x3fefe5f3af2e3940, 0xbfb4661179272096, // 0.99682, -0.079682 - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729, -0.073565 - 0x3fefed58ecb673c4, 0xbfb1440134d709b2, // 0.99772, -0.067444 - 0x3feff095658e71ad, 0xbfaf656e79f820e0, // 0.99812, -0.061321 - 0x3feff3830f8d575c, 0xbfac428d12c0d7e3, // 0.99848, -0.055195 - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988, -0.049068 - 0x3feff871dadb81df, 0xbfa5fc00d290cd43, // 0.99908, -0.042938 - 0x3feffa72effef75d, 0xbfa2d865759455cd, // 0.99932, -0.036807 - 0x3feffc251df1d3f8, 0xbf9f693731d1cf01, // 0.99953, -0.030675 - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997, -0.024541 - 0x3feffe9cb44b51a1, 0xbf92d936bbe30efd, // 0.99983, -0.018407 - 0x3fefff62169b92db, 0xbf8921d1fcdec784, // 0.99992, -0.012272 - 0x3fefffd8858e8a92, 0xbf7921f0fe670071, // 0.99998,-0.0061359 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_2048) -/** - @par - Example code for Double Precision 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, PI = 3.14159265358979 - @par - Cos and Sin values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_2048[4096] = { - 0x3ff0000000000000, 0x0000000000000000, // 1, 0 - 0x3feffff621621d02, 0x3f6921f8becca4ba, // 1, 0.003068 - 0x3fefffd8858e8a92, 0x3f7921f0fe670071, // 0.99998, 0.0061359 - 0x3fefffa72c978c4f, 0x3f82d96b0e509703, // 0.99996, 0.0092038 - 0x3fefff62169b92db, 0x3f8921d1fcdec784, // 0.99992, 0.012272 - 0x3fefff0943c53bd1, 0x3f8f6a296ab997ca, // 0.99988, 0.015339 - 0x3feffe9cb44b51a1, 0x3f92d936bbe30efd, // 0.99983, 0.018407 - 0x3feffe1c6870cb77, 0x3f95fd4d21fab226, // 0.99977, 0.021474 - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541 - 0x3feffce09ce2a679, 0x3f9c454f4ce53b1c, // 0.99962, 0.027608 - 0x3feffc251df1d3f8, 0x3f9f693731d1cf01, // 0.99953, 0.030675 - 0x3feffb55e425fdae, 0x3fa14685db42c17e, // 0.99943, 0.033741 - 0x3feffa72effef75d, 0x3fa2d865759455cd, // 0.99932, 0.036807 - 0x3feff97c4208c014, 0x3fa46a396ff86179, // 0.9992, 0.039873 - 0x3feff871dadb81df, 0x3fa5fc00d290cd43, // 0.99908, 0.042938 - 0x3feff753bb1b9164, 0x3fa78dbaa5874685, // 0.99894, 0.046003 - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068 - 0x3feff4dc54b1bed3, 0x3faab101bd5f8317, // 0.99864, 0.052132 - 0x3feff3830f8d575c, 0x3fac428d12c0d7e3, // 0.99848, 0.055195 - 0x3feff21614e131ed, 0x3fadd406f9808ec8, // 0.9983, 0.058258 - 0x3feff095658e71ad, 0x3faf656e79f820e0, // 0.99812, 0.061321 - 0x3fefef0102826191, 0x3fb07b614e463064, // 0.99793, 0.064383 - 0x3fefed58ecb673c4, 0x3fb1440134d709b2, // 0.99772, 0.067444 - 0x3fefeb9d2530410f, 0x3fb20c9674ed444c, // 0.99751, 0.070505 - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565 - 0x3fefe7ea85482d60, 0x3fb39d9f12c5a299, // 0.99706, 0.076624 - 0x3fefe5f3af2e3940, 0x3fb4661179272096, // 0.99682, 0.079682 - 0x3fefe3e92be9d886, 0x3fb52e774a4d4d0a, // 0.99657, 0.08274 - 0x3fefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // 0.99631, 0.085797 - 0x3fefdf9922f73307, 0x3fb6bf1b3e79b129, // 0.99604, 0.088854 - 0x3fefdd539ff1f456, 0x3fb787586a5d5b21, // 0.99577, 0.091909 - 0x3fefdafa7514538c, 0x3fb84f8712c130a0, // 0.99548, 0.094963 - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017 - 0x3fefd60d2da75c9e, 0x3fb9dfb6eb24a85c, // 0.99488, 0.10107 - 0x3fefd37914220b84, 0x3fbaa7b724495c04, // 0.99456, 0.10412 - 0x3fefd0d158d86087, 0x3fbb6fa6ec38f64c, // 0.99424, 0.10717 - 0x3fefce15fd6da67b, 0x3fbc3785c79ec2d5, // 0.99391, 0.11022 - 0x3fefcb4703914354, 0x3fbcff533b307dc1, // 0.99356, 0.11327 - 0x3fefc8646cfeb721, 0x3fbdc70ecbae9fc8, // 0.99321, 0.11632 - 0x3fefc56e3b7d9af6, 0x3fbe8eb7fde4aa3e, // 0.99285, 0.11937 - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241 - 0x3fefbf470f0a8d88, 0x3fc00ee8ad6fb85b, // 0.9921, 0.12545 - 0x3fefbc1617e44186, 0x3fc072a047ba831d, // 0.99171, 0.1285 - 0x3fefb8d18d66adb7, 0x3fc0d64dbcb26786, // 0.99131, 0.13154 - 0x3fefb5797195d741, 0x3fc139f0cedaf576, // 0.9909, 0.13458 - 0x3fefb20dc681d54d, 0x3fc19d8940be24e7, // 0.99049, 0.13762 - 0x3fefae8e8e46cfbb, 0x3fc20116d4ec7bce, // 0.99006, 0.14066 - 0x3fefaafbcb0cfddc, 0x3fc264994dfd340a, // 0.98962, 0.1437 - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673 - 0x3fefa39bac7a1791, 0x3fc32b7bf94516a7, // 0.98872, 0.14976 - 0x3fef9fce55adb2c8, 0x3fc38edbb0cd8d14, // 0.98826, 0.1528 - 0x3fef9bed7cfbde29, 0x3fc3f22f57db4893, // 0.98778, 0.15583 - 0x3fef97f924c9099b, 0x3fc45576b1293e5a, // 0.9873, 0.15886 - 0x3fef93f14f85ac08, 0x3fc4b8b17f79fa88, // 0.98681, 0.16189 - 0x3fef8fd5ffae41db, 0x3fc51bdf8597c5f2, // 0.98631, 0.16491 - 0x3fef8ba737cb4b78, 0x3fc57f008654cbde, // 0.9858, 0.16794 - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096 - 0x3fef830f4a40c60c, 0x3fc6451a831d830d, // 0.98475, 0.17398 - 0x3fef7ea629e63d6e, 0x3fc6a81304f64ab2, // 0.98421, 0.177 - 0x3fef7a299c1a322a, 0x3fc70afd8d08c4ff, // 0.98366, 0.18002 - 0x3fef7599a3a12077, 0x3fc76dd9de50bf31, // 0.98311, 0.18304 - 0x3fef70f6434b7eb7, 0x3fc7d0a7bbd2cb1b, // 0.98254, 0.18606 - 0x3fef6c3f7df5bbb7, 0x3fc83366e89c64c5, // 0.98196, 0.18907 - 0x3fef677556883cee, 0x3fc8961727c41804, // 0.98138, 0.19208 - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509 - 0x3fef5da6ed43685d, 0x3fc95b49e9b62af9, // 0.98018, 0.1981 - 0x3fef58a2b1789e84, 0x3fc9bdcbf2dc4366, // 0.97957, 0.2011 - 0x3fef538b1faf2d07, 0x3fca203e1b1831da, // 0.97895, 0.20411 - 0x3fef4e603b0b2f2d, 0x3fca82a025b00451, // 0.97832, 0.20711 - 0x3fef492206bcabb4, 0x3fcae4f1d5f3b9ab, // 0.97768, 0.21011 - 0x3fef43d085ff92dd, 0x3fcb4732ef3d6722, // 0.97703, 0.21311 - 0x3fef3e6bbc1bbc65, 0x3fcba96334f15dad, // 0.97637, 0.21611 - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191 - 0x3fef33685a3aaef0, 0x3fcc6d90535d74dc, // 0.97503, 0.22209 - 0x3fef2dc9c9089a9d, 0x3fcccf8cb312b286, // 0.97434, 0.22508 - 0x3fef2817fc4609ce, 0x3fcd31774d2cbdee, // 0.97364, 0.22807 - 0x3fef2252f7763ada, 0x3fcd934fe5454311, // 0.97294, 0.23106 - 0x3fef1c7abe284708, 0x3fcdf5163f01099a, // 0.97223, 0.23404 - 0x3fef168f53f7205d, 0x3fce56ca1e101a1b, // 0.9715, 0.23702 - 0x3fef1090bc898f5f, 0x3fceb86b462de348, // 0.97077, 0.24 - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298 - 0x3fef045a14cf738c, 0x3fcf7b7480bd3801, // 0.96928, 0.24596 - 0x3feefe220c0b95ec, 0x3fcfdcdc1adfedf8, // 0.96852, 0.24893 - 0x3feef7d6e51ca3c0, 0x3fd01f1806b9fdd2, // 0.96775, 0.2519 - 0x3feef178a3e473c2, 0x3fd04fb80e37fdae, // 0.96698, 0.25487 - 0x3feeeb074c50a544, 0x3fd0804e05eb661e, // 0.96619, 0.25783 - 0x3feee482e25a9dbc, 0x3fd0b0d9cfdbdb90, // 0.96539, 0.26079 - 0x3feeddeb6a078651, 0x3fd0e15b4e1749cd, // 0.96459, 0.26375 - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671 - 0x3feed0835e999009, 0x3fd1423eefc69378, // 0.96295, 0.26967 - 0x3feec9b2d3c3bf84, 0x3fd172a0d7765177, // 0.96212, 0.27262 - 0x3feec2cf4b1af6b2, 0x3fd1a2f7fbe8f243, // 0.96128, 0.27557 - 0x3feebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // 0.96043, 0.27852 - 0x3feeb4cf515b8811, 0x3fd2038583d727bd, // 0.95957, 0.28146 - 0x3feeadb2e8e7a88e, 0x3fd233bbabc3bb72, // 0.9587, 0.28441 - 0x3feea68393e65800, 0x3fd263e6995554ba, // 0.95783, 0.28735 - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028 - 0x3fee97ec36016b30, 0x3fd2c41a4e954520, // 0.95605, 0.29322 - 0x3fee9084361df7f3, 0x3fd2f422daec0386, // 0.95514, 0.29615 - 0x3fee89095bad6025, 0x3fd3241fb638baaf, // 0.95423, 0.29908 - 0x3fee817bab4cd10d, 0x3fd35410c2e18152, // 0.95331, 0.30201 - 0x3fee79db29a5165a, 0x3fd383f5e353b6aa, // 0.95238, 0.30493 - 0x3fee7227db6a9744, 0x3fd3b3cefa0414b7, // 0.95144, 0.30785 - 0x3fee6a61c55d53a7, 0x3fd3e39be96ec271, // 0.95049, 0.31077 - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368 - 0x3fee5a9d550467d3, 0x3fd44310dc8936f0, // 0.94856, 0.31659 - 0x3fee529f04729ffc, 0x3fd472b8a5571054, // 0.94759, 0.3195 - 0x3fee4a8dff81ce5e, 0x3fd4a253d11b82f3, // 0.9466, 0.32241 - 0x3fee426a4b2bc17e, 0x3fd4d1e24278e76a, // 0.94561, 0.32531 - 0x3fee3a33ec75ce85, 0x3fd50163dc197047, // 0.9446, 0.32821 - 0x3fee31eae870ce25, 0x3fd530d880af3c24, // 0.94359, 0.33111 - 0x3fee298f4439197a, 0x3fd5604012f467b4, // 0.94257, 0.334 - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689 - 0x3fee18a02fdc66d9, 0x3fd5bee78b9db3b6, // 0.94051, 0.33978 - 0x3fee100cca2980ac, 0x3fd5ee27379ea693, // 0.93946, 0.34266 - 0x3fee0766d9280f54, 0x3fd61d595c88c203, // 0.9384, 0.34554 - 0x3fedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // 0.93734, 0.34842 - 0x3fedf5e36a9ba59c, 0x3fd67b949cad63ca, // 0.93627, 0.35129 - 0x3feded05f7de47da, 0x3fd6aa9d7dc77e16, // 0.93518, 0.35416 - 0x3fede4160f6d8d81, 0x3fd6d998638a0cb5, // 0.93409, 0.35703 - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599 - 0x3fedd1fef38a915a, 0x3fd73763c9261092, // 0.93188, 0.36276 - 0x3fedc8d7cb410260, 0x3fd766340f2418f6, // 0.93077, 0.36561 - 0x3fedbf9e4395759a, 0x3fd794f5e613dfae, // 0.92964, 0.36847 - 0x3fedb6526238a09b, 0x3fd7c3a9311dcce7, // 0.92851, 0.37132 - 0x3fedacf42ce68ab9, 0x3fd7f24dd37341e3, // 0.92736, 0.37416 - 0x3feda383a9668988, 0x3fd820e3b04eaac4, // 0.92621, 0.37701 - 0x3fed9a00dd8b3d46, 0x3fd84f6aaaf3903f, // 0.92505, 0.37985 - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268 - 0x3fed86c48445a450, 0x3fd8ac4b86d5ed44, // 0.9227, 0.38552 - 0x3fed7d0b02b8ecf9, 0x3fd8daa52ec8a4af, // 0.92151, 0.38835 - 0x3fed733f508c0dff, 0x3fd908ef81ef7bd1, // 0.92032, 0.39117 - 0x3fed696173c9e68b, 0x3fd9372a63bc93d7, // 0.91911, 0.39399 - 0x3fed5f7172888a7f, 0x3fd96555b7ab948f, // 0.9179, 0.39681 - 0x3fed556f52e93eb1, 0x3fd993716141bdfe, // 0.91668, 0.39962 - 0x3fed4b5b1b187524, 0x3fd9c17d440df9f2, // 0.91545, 0.40243 - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524 - 0x3fed36fc7bcbfbdc, 0x3fda1d6543b50ac0, // 0.91296, 0.40804 - 0x3fed2cb220e0ef9f, 0x3fda4b4127dea1e4, // 0.91171, 0.41084 - 0x3fed2255c6e5a4e1, 0x3fda790cd3dbf31a, // 0.91044, 0.41364 - 0x3fed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // 0.90917, 0.41643 - 0x3fed0d672f59d2b9, 0x3fdad473125cdc08, // 0.90789, 0.41922 - 0x3fed02d4feb2bd92, 0x3fdb020d6c7f4009, // 0.9066, 0.422 - 0x3fecf830e8ce467b, 0x3fdb2f971db31972, // 0.9053, 0.42478 - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756 - 0x3fece2b32799a060, 0x3fdb8a7814fd5693, // 0.90267, 0.43033 - 0x3fecd7d9898b32f6, 0x3fdbb7cf2304bd01, // 0.90135, 0.43309 - 0x3fecccee20c2de9f, 0x3fdbe51517ffc0d9, // 0.90002, 0.43586 - 0x3fecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // 0.89867, 0.43862 - 0x3fecb6e20a00da99, 0x3fdc3f6d47263129, // 0.89732, 0.44137 - 0x3fecabc169a0b901, 0x3fdc6c7f4997000a, // 0.89597, 0.44412 - 0x3feca08f19b9c449, 0x3fdc997fc3865388, // 0.8946, 0.44687 - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961 - 0x3fec89f587029c13, 0x3fdcf34baee1cd21, // 0.89184, 0.45235 - 0x3fec7e8e52233cf3, 0x3fdd2016e8e9db5b, // 0.89045, 0.45508 - 0x3fec7315899eaad7, 0x3fdd4cd02ba8609c, // 0.88905, 0.45781 - 0x3fec678b3488739b, 0x3fdd79775b86e389, // 0.88764, 0.46054 - 0x3fec5bef59fef85a, 0x3fdda60c5cfa10d8, // 0.88622, 0.46326 - 0x3fec5042012b6907, 0x3fddd28f1481cc58, // 0.8848, 0.46598 - 0x3fec44833141c004, 0x3fddfeff66a941de, // 0.88336, 0.46869 - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714 - 0x3fec2cd14931e3f1, 0x3fde57a86d3cd824, // 0.88047, 0.4741 - 0x3fec20de3fa971b0, 0x3fde83e0eaf85113, // 0.87901, 0.4768 - 0x3fec14d9dc465e58, 0x3fdeb00695f25620, // 0.87755, 0.47949 - 0x3fec08c426725549, 0x3fdedc1952ef78d5, // 0.87607, 0.48218 - 0x3febfc9d25a1b147, 0x3fdf081906bff7fd, // 0.87459, 0.48487 - 0x3febf064e15377dd, 0x3fdf3405963fd068, // 0.87309, 0.48755 - 0x3febe41b611154c1, 0x3fdf5fdee656cda3, // 0.8716, 0.49023 - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929 - 0x3febcb54cb0d2327, 0x3fdfb7575c24d2de, // 0.86857, 0.49557 - 0x3febbed7c49380ea, 0x3fdfe2f64be7120f, // 0.86705, 0.49823 - 0x3febb249a0b6c40d, 0x3fe00740c82b82e0, // 0.86551, 0.50089 - 0x3feba5aa673590d2, 0x3fe01cfc874c3eb7, // 0.86397, 0.50354 - 0x3feb98fa1fd9155e, 0x3fe032ae55edbd95, // 0.86242, 0.50619 - 0x3feb8c38d27504e9, 0x3fe0485626ae221a, // 0.86087, 0.50883 - 0x3feb7f6686e792ea, 0x3fe05df3ec31b8b6, // 0.8593, 0.51147 - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141 - 0x3feb658f14fdbc47, 0x3fe089112032b08c, // 0.85615, 0.51673 - 0x3feb5889fe921405, 0x3fe09e907417c5e1, // 0.85456, 0.51936 - 0x3feb4b7409de7925, 0x3fe0b405878f85ec, // 0.85296, 0.52198 - 0x3feb3e4d3ef55712, 0x3fe0c9704d5d898f, // 0.85136, 0.52459 - 0x3feb3115a5f37bf4, 0x3fe0ded0b84bc4b5, // 0.84974, 0.5272 - 0x3feb23cd470013b4, 0x3fe0f426bb2a8e7d, // 0.84812, 0.5298 - 0x3feb16742a4ca2f5, 0x3fe1097248d0a956, // 0.84649, 0.5324 - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535 - 0x3feafb8fd89f57b6, 0x3fe133e9cfee254e, // 0.84321, 0.53759 - 0x3feaee04b43c1474, 0x3fe14915af336ceb, // 0.84155, 0.54017 - 0x3feae068f345ecef, 0x3fe15e36e4dbe2bc, // 0.83989, 0.54275 - 0x3fead2bc9e21d511, 0x3fe1734d63dedb49, // 0.83822, 0.54532 - 0x3feac4ffbd3efac8, 0x3fe188591f3a46e5, // 0.83655, 0.54789 - 0x3feab7325916c0d4, 0x3fe19d5a09f2b9b8, // 0.83486, 0.55046 - 0x3feaa9547a2cb98e, 0x3fe1b250171373be, // 0.83317, 0.55302 - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557 - 0x3fea8d676e545ad2, 0x3fe1dc1b64dc4872, // 0.82976, 0.55812 - 0x3fea7f58529fe69d, 0x3fe1f0f08bbc861b, // 0.82805, 0.56066 - 0x3fea7138de9d60f5, 0x3fe205baa17560d6, // 0.82632, 0.5632 - 0x3fea63091b02fae2, 0x3fe21a799933eb58, // 0.82459, 0.56573 - 0x3fea54c91090f524, 0x3fe22f2d662c13e1, // 0.82285, 0.56826 - 0x3fea4678c8119ac8, 0x3fe243d5fb98ac1f, // 0.8211, 0.57078 - 0x3fea38184a593bc6, 0x3fe258734cbb7110, // 0.81935, 0.5733 - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581 - 0x3fea1b26d2c0a75e, 0x3fe2818bef4d3cba, // 0.81581, 0.57831 - 0x3fea0c95eabaf937, 0x3fe2960727629ca8, // 0.81404, 0.58081 - 0x3fe9fdf4f13149de, 0x3fe2aa76e87aeb58, // 0.81225, 0.58331 - 0x3fe9ef43ef29af94, 0x3fe2bedb25faf3ea, // 0.81046, 0.5858 - 0x3fe9e082edb42472, 0x3fe2d333d34e9bb7, // 0.80866, 0.58828 - 0x3fe9d1b1f5ea80d6, 0x3fe2e780e3e8ea16, // 0.80685, 0.59076 - 0x3fe9c2d110f075c3, 0x3fe2fbc24b441015, // 0.80503, 0.59323 - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957 - 0x3fe9a4dfa42b06b2, 0x3fe32421ec49a620, // 0.80138, 0.59816 - 0x3fe995cf2ed80d22, 0x3fe338400d0c8e57, // 0.79954, 0.60062 - 0x3fe986aef1457594, 0x3fe34c5252c14de1, // 0.79769, 0.60307 - 0x3fe9777ef4c7d742, 0x3fe36058b10659f3, // 0.79584, 0.60551 - 0x3fe9683f42bd7fe1, 0x3fe374531b817f8d, // 0.79398, 0.60795 - 0x3fe958efe48e6dd7, 0x3fe3884185dfeb22, // 0.79211, 0.61038 - 0x3fe94990e3ac4a6c, 0x3fe39c23e3d63029, // 0.79023, 0.61281 - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523 - 0x3fe92aa41fc5a815, 0x3fe3c3c44981c517, // 0.78646, 0.61765 - 0x3fe91b166fd49da2, 0x3fe3d78238c58343, // 0.78456, 0.62006 - 0x3fe90b7943575efe, 0x3fe3eb33eabe0680, // 0.78265, 0.62246 - 0x3fe8fbcca3ef940d, 0x3fe3fed9534556d4, // 0.78074, 0.62486 - 0x3fe8ec109b486c49, 0x3fe41272663d108c, // 0.77882, 0.62725 - 0x3fe8dc45331698cc, 0x3fe425ff178e6bb1, // 0.77689, 0.62964 - 0x3fe8cc6a75184655, 0x3fe4397f5b2a4380, // 0.77495, 0.63202 - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439 - 0x3fe8ac871ede1d88, 0x3fe4605a692b32a2, // 0.77106, 0.63676 - 0x3fe89c7e9a4dd4ab, 0x3fe473b51b987347, // 0.7691, 0.63912 - 0x3fe88c66e7481ba1, 0x3fe48703306091fe, // 0.76714, 0.64148 - 0x3fe87c400fba2ebf, 0x3fe49a449b9b0938, // 0.76517, 0.64383 - 0x3fe86c0a1d9aa195, 0x3fe4ad79516722f0, // 0.76319, 0.64618 - 0x3fe85bc51ae958cc, 0x3fe4c0a145ec0004, // 0.7612, 0.64851 - 0x3fe84b7111af83f9, 0x3fe4d3bc6d589f80, // 0.75921, 0.65085 - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317 - 0x3fe82a9c13f545ff, 0x3fe4f9cc25cca486, // 0.7552, 0.65549 - 0x3fe81a1b33b57acc, 0x3fe50cc09f59a09b, // 0.75319, 0.65781 - 0x3fe8098b756e52fa, 0x3fe51fa81cd99aa6, // 0.75117, 0.66011 - 0x3fe7f8ece3571771, 0x3fe5328292a35596, // 0.74914, 0.66242 - 0x3fe7e83f87b03686, 0x3fe5454ff5159dfb, // 0.7471, 0.66471 - 0x3fe7d7836cc33db2, 0x3fe5581038975137, // 0.74506, 0.667 - 0x3fe7c6b89ce2d333, 0x3fe56ac35197649e, // 0.74301, 0.66928 - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156 - 0x3fe7a4f707bf97d2, 0x3fe59001d5f723df, // 0.73889, 0.67383 - 0x3fe79400574f55e4, 0x3fe5a28d2a5d7250, // 0.73682, 0.67609 - 0x3fe782fb1b90b35b, 0x3fe5b50b264f7448, // 0.73474, 0.67835 - 0x3fe771e75f037261, 0x3fe5c77bbe65018c, // 0.73265, 0.6806 - 0x3fe760c52c304764, 0x3fe5d9dee73e345c, // 0.73056, 0.68285 - 0x3fe74f948da8d28d, 0x3fe5ec3495837074, // 0.72846, 0.68508 - 0x3fe73e558e079942, 0x3fe5fe7cbde56a0f, // 0.72636, 0.68732 - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954 - 0x3fe71bac960e41bf, 0x3fe622e44fec22ff, // 0.72213, 0.69176 - 0x3fe70a42b3176d7a, 0x3fe63503a31c1be8, // 0.72, 0.69397 - 0x3fe6f8ca99c95b75, 0x3fe64715437f535b, // 0.71787, 0.69618 - 0x3fe6e74454eaa8ae, 0x3fe6591925f0783e, // 0.71573, 0.69838 - 0x3fe6d5afef4aafcc, 0x3fe66b0f3f52b386, // 0.71358, 0.70057 - 0x3fe6c40d73c18275, 0x3fe67cf78491af10, // 0.71143, 0.70275 - 0x3fe6b25ced2fe29c, 0x3fe68ed1eaa19c71, // 0.70927, 0.70493 - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711 - 0x3fe68ed1eaa19c71, 0x3fe6b25ced2fe29c, // 0.70493, 0.70927 - 0x3fe67cf78491af10, 0x3fe6c40d73c18275, // 0.70275, 0.71143 - 0x3fe66b0f3f52b386, 0x3fe6d5afef4aafcc, // 0.70057, 0.71358 - 0x3fe6591925f0783e, 0x3fe6e74454eaa8ae, // 0.69838, 0.71573 - 0x3fe64715437f535b, 0x3fe6f8ca99c95b75, // 0.69618, 0.71787 - 0x3fe63503a31c1be8, 0x3fe70a42b3176d7a, // 0.69397, 0.72 - 0x3fe622e44fec22ff, 0x3fe71bac960e41bf, // 0.69176, 0.72213 - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425 - 0x3fe5fe7cbde56a0f, 0x3fe73e558e079942, // 0.68732, 0.72636 - 0x3fe5ec3495837074, 0x3fe74f948da8d28d, // 0.68508, 0.72846 - 0x3fe5d9dee73e345c, 0x3fe760c52c304764, // 0.68285, 0.73056 - 0x3fe5c77bbe65018c, 0x3fe771e75f037261, // 0.6806, 0.73265 - 0x3fe5b50b264f7448, 0x3fe782fb1b90b35b, // 0.67835, 0.73474 - 0x3fe5a28d2a5d7250, 0x3fe79400574f55e4, // 0.67609, 0.73682 - 0x3fe59001d5f723df, 0x3fe7a4f707bf97d2, // 0.67383, 0.73889 - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095 - 0x3fe56ac35197649e, 0x3fe7c6b89ce2d333, // 0.66928, 0.74301 - 0x3fe5581038975137, 0x3fe7d7836cc33db2, // 0.667, 0.74506 - 0x3fe5454ff5159dfb, 0x3fe7e83f87b03686, // 0.66471, 0.7471 - 0x3fe5328292a35596, 0x3fe7f8ece3571771, // 0.66242, 0.74914 - 0x3fe51fa81cd99aa6, 0x3fe8098b756e52fa, // 0.66011, 0.75117 - 0x3fe50cc09f59a09b, 0x3fe81a1b33b57acc, // 0.65781, 0.75319 - 0x3fe4f9cc25cca486, 0x3fe82a9c13f545ff, // 0.65549, 0.7552 - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721 - 0x3fe4d3bc6d589f80, 0x3fe84b7111af83f9, // 0.65085, 0.75921 - 0x3fe4c0a145ec0004, 0x3fe85bc51ae958cc, // 0.64851, 0.7612 - 0x3fe4ad79516722f0, 0x3fe86c0a1d9aa195, // 0.64618, 0.76319 - 0x3fe49a449b9b0938, 0x3fe87c400fba2ebf, // 0.64383, 0.76517 - 0x3fe48703306091fe, 0x3fe88c66e7481ba1, // 0.64148, 0.76714 - 0x3fe473b51b987347, 0x3fe89c7e9a4dd4ab, // 0.63912, 0.7691 - 0x3fe4605a692b32a2, 0x3fe8ac871ede1d88, // 0.63676, 0.77106 - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301 - 0x3fe4397f5b2a4380, 0x3fe8cc6a75184655, // 0.63202, 0.77495 - 0x3fe425ff178e6bb1, 0x3fe8dc45331698cc, // 0.62964, 0.77689 - 0x3fe41272663d108c, 0x3fe8ec109b486c49, // 0.62725, 0.77882 - 0x3fe3fed9534556d4, 0x3fe8fbcca3ef940d, // 0.62486, 0.78074 - 0x3fe3eb33eabe0680, 0x3fe90b7943575efe, // 0.62246, 0.78265 - 0x3fe3d78238c58343, 0x3fe91b166fd49da2, // 0.62006, 0.78456 - 0x3fe3c3c44981c517, 0x3fe92aa41fc5a815, // 0.61765, 0.78646 - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835 - 0x3fe39c23e3d63029, 0x3fe94990e3ac4a6c, // 0.61281, 0.79023 - 0x3fe3884185dfeb22, 0x3fe958efe48e6dd7, // 0.61038, 0.79211 - 0x3fe374531b817f8d, 0x3fe9683f42bd7fe1, // 0.60795, 0.79398 - 0x3fe36058b10659f3, 0x3fe9777ef4c7d742, // 0.60551, 0.79584 - 0x3fe34c5252c14de1, 0x3fe986aef1457594, // 0.60307, 0.79769 - 0x3fe338400d0c8e57, 0x3fe995cf2ed80d22, // 0.60062, 0.79954 - 0x3fe32421ec49a620, 0x3fe9a4dfa42b06b2, // 0.59816, 0.80138 - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321 - 0x3fe2fbc24b441015, 0x3fe9c2d110f075c3, // 0.59323, 0.80503 - 0x3fe2e780e3e8ea16, 0x3fe9d1b1f5ea80d6, // 0.59076, 0.80685 - 0x3fe2d333d34e9bb7, 0x3fe9e082edb42472, // 0.58828, 0.80866 - 0x3fe2bedb25faf3ea, 0x3fe9ef43ef29af94, // 0.5858, 0.81046 - 0x3fe2aa76e87aeb58, 0x3fe9fdf4f13149de, // 0.58331, 0.81225 - 0x3fe2960727629ca8, 0x3fea0c95eabaf937, // 0.58081, 0.81404 - 0x3fe2818bef4d3cba, 0x3fea1b26d2c0a75e, // 0.57831, 0.81581 - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758 - 0x3fe258734cbb7110, 0x3fea38184a593bc6, // 0.5733, 0.81935 - 0x3fe243d5fb98ac1f, 0x3fea4678c8119ac8, // 0.57078, 0.8211 - 0x3fe22f2d662c13e1, 0x3fea54c91090f524, // 0.56826, 0.82285 - 0x3fe21a799933eb58, 0x3fea63091b02fae2, // 0.56573, 0.82459 - 0x3fe205baa17560d6, 0x3fea7138de9d60f5, // 0.5632, 0.82632 - 0x3fe1f0f08bbc861b, 0x3fea7f58529fe69d, // 0.56066, 0.82805 - 0x3fe1dc1b64dc4872, 0x3fea8d676e545ad2, // 0.55812, 0.82976 - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147 - 0x3fe1b250171373be, 0x3feaa9547a2cb98e, // 0.55302, 0.83317 - 0x3fe19d5a09f2b9b8, 0x3feab7325916c0d4, // 0.55046, 0.83486 - 0x3fe188591f3a46e5, 0x3feac4ffbd3efac8, // 0.54789, 0.83655 - 0x3fe1734d63dedb49, 0x3fead2bc9e21d511, // 0.54532, 0.83822 - 0x3fe15e36e4dbe2bc, 0x3feae068f345ecef, // 0.54275, 0.83989 - 0x3fe14915af336ceb, 0x3feaee04b43c1474, // 0.54017, 0.84155 - 0x3fe133e9cfee254e, 0x3feafb8fd89f57b6, // 0.53759, 0.84321 - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485 - 0x3fe1097248d0a956, 0x3feb16742a4ca2f5, // 0.5324, 0.84649 - 0x3fe0f426bb2a8e7d, 0x3feb23cd470013b4, // 0.5298, 0.84812 - 0x3fe0ded0b84bc4b5, 0x3feb3115a5f37bf4, // 0.5272, 0.84974 - 0x3fe0c9704d5d898f, 0x3feb3e4d3ef55712, // 0.52459, 0.85136 - 0x3fe0b405878f85ec, 0x3feb4b7409de7925, // 0.52198, 0.85296 - 0x3fe09e907417c5e1, 0x3feb5889fe921405, // 0.51936, 0.85456 - 0x3fe089112032b08c, 0x3feb658f14fdbc47, // 0.51673, 0.85615 - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773 - 0x3fe05df3ec31b8b6, 0x3feb7f6686e792ea, // 0.51147, 0.8593 - 0x3fe0485626ae221a, 0x3feb8c38d27504e9, // 0.50883, 0.86087 - 0x3fe032ae55edbd95, 0x3feb98fa1fd9155e, // 0.50619, 0.86242 - 0x3fe01cfc874c3eb7, 0x3feba5aa673590d2, // 0.50354, 0.86397 - 0x3fe00740c82b82e0, 0x3febb249a0b6c40d, // 0.50089, 0.86551 - 0x3fdfe2f64be7120f, 0x3febbed7c49380ea, // 0.49823, 0.86705 - 0x3fdfb7575c24d2de, 0x3febcb54cb0d2327, // 0.49557, 0.86857 - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009 - 0x3fdf5fdee656cda3, 0x3febe41b611154c1, // 0.49023, 0.8716 - 0x3fdf3405963fd068, 0x3febf064e15377dd, // 0.48755, 0.87309 - 0x3fdf081906bff7fd, 0x3febfc9d25a1b147, // 0.48487, 0.87459 - 0x3fdedc1952ef78d5, 0x3fec08c426725549, // 0.48218, 0.87607 - 0x3fdeb00695f25620, 0x3fec14d9dc465e58, // 0.47949, 0.87755 - 0x3fde83e0eaf85113, 0x3fec20de3fa971b0, // 0.4768, 0.87901 - 0x3fde57a86d3cd824, 0x3fec2cd14931e3f1, // 0.4741, 0.88047 - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192 - 0x3fddfeff66a941de, 0x3fec44833141c004, // 0.46869, 0.88336 - 0x3fddd28f1481cc58, 0x3fec5042012b6907, // 0.46598, 0.8848 - 0x3fdda60c5cfa10d8, 0x3fec5bef59fef85a, // 0.46326, 0.88622 - 0x3fdd79775b86e389, 0x3fec678b3488739b, // 0.46054, 0.88764 - 0x3fdd4cd02ba8609c, 0x3fec7315899eaad7, // 0.45781, 0.88905 - 0x3fdd2016e8e9db5b, 0x3fec7e8e52233cf3, // 0.45508, 0.89045 - 0x3fdcf34baee1cd21, 0x3fec89f587029c13, // 0.45235, 0.89184 - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322 - 0x3fdc997fc3865388, 0x3feca08f19b9c449, // 0.44687, 0.8946 - 0x3fdc6c7f4997000a, 0x3fecabc169a0b901, // 0.44412, 0.89597 - 0x3fdc3f6d47263129, 0x3fecb6e20a00da99, // 0.44137, 0.89732 - 0x3fdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // 0.43862, 0.89867 - 0x3fdbe51517ffc0d9, 0x3fecccee20c2de9f, // 0.43586, 0.90002 - 0x3fdbb7cf2304bd01, 0x3fecd7d9898b32f6, // 0.43309, 0.90135 - 0x3fdb8a7814fd5693, 0x3fece2b32799a060, // 0.43033, 0.90267 - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399 - 0x3fdb2f971db31972, 0x3fecf830e8ce467b, // 0.42478, 0.9053 - 0x3fdb020d6c7f4009, 0x3fed02d4feb2bd92, // 0.422, 0.9066 - 0x3fdad473125cdc08, 0x3fed0d672f59d2b9, // 0.41922, 0.90789 - 0x3fdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // 0.41643, 0.90917 - 0x3fda790cd3dbf31a, 0x3fed2255c6e5a4e1, // 0.41364, 0.91044 - 0x3fda4b4127dea1e4, 0x3fed2cb220e0ef9f, // 0.41084, 0.91171 - 0x3fda1d6543b50ac0, 0x3fed36fc7bcbfbdc, // 0.40804, 0.91296 - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421 - 0x3fd9c17d440df9f2, 0x3fed4b5b1b187524, // 0.40243, 0.91545 - 0x3fd993716141bdfe, 0x3fed556f52e93eb1, // 0.39962, 0.91668 - 0x3fd96555b7ab948f, 0x3fed5f7172888a7f, // 0.39681, 0.9179 - 0x3fd9372a63bc93d7, 0x3fed696173c9e68b, // 0.39399, 0.91911 - 0x3fd908ef81ef7bd1, 0x3fed733f508c0dff, // 0.39117, 0.92032 - 0x3fd8daa52ec8a4af, 0x3fed7d0b02b8ecf9, // 0.38835, 0.92151 - 0x3fd8ac4b86d5ed44, 0x3fed86c48445a450, // 0.38552, 0.9227 - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388 - 0x3fd84f6aaaf3903f, 0x3fed9a00dd8b3d46, // 0.37985, 0.92505 - 0x3fd820e3b04eaac4, 0x3feda383a9668988, // 0.37701, 0.92621 - 0x3fd7f24dd37341e3, 0x3fedacf42ce68ab9, // 0.37416, 0.92736 - 0x3fd7c3a9311dcce7, 0x3fedb6526238a09b, // 0.37132, 0.92851 - 0x3fd794f5e613dfae, 0x3fedbf9e4395759a, // 0.36847, 0.92964 - 0x3fd766340f2418f6, 0x3fedc8d7cb410260, // 0.36561, 0.93077 - 0x3fd73763c9261092, 0x3fedd1fef38a915a, // 0.36276, 0.93188 - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299 - 0x3fd6d998638a0cb5, 0x3fede4160f6d8d81, // 0.35703, 0.93409 - 0x3fd6aa9d7dc77e16, 0x3feded05f7de47da, // 0.35416, 0.93518 - 0x3fd67b949cad63ca, 0x3fedf5e36a9ba59c, // 0.35129, 0.93627 - 0x3fd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // 0.34842, 0.93734 - 0x3fd61d595c88c203, 0x3fee0766d9280f54, // 0.34554, 0.9384 - 0x3fd5ee27379ea693, 0x3fee100cca2980ac, // 0.34266, 0.93946 - 0x3fd5bee78b9db3b6, 0x3fee18a02fdc66d9, // 0.33978, 0.94051 - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154 - 0x3fd5604012f467b4, 0x3fee298f4439197a, // 0.334, 0.94257 - 0x3fd530d880af3c24, 0x3fee31eae870ce25, // 0.33111, 0.94359 - 0x3fd50163dc197047, 0x3fee3a33ec75ce85, // 0.32821, 0.9446 - 0x3fd4d1e24278e76a, 0x3fee426a4b2bc17e, // 0.32531, 0.94561 - 0x3fd4a253d11b82f3, 0x3fee4a8dff81ce5e, // 0.32241, 0.9466 - 0x3fd472b8a5571054, 0x3fee529f04729ffc, // 0.3195, 0.94759 - 0x3fd44310dc8936f0, 0x3fee5a9d550467d3, // 0.31659, 0.94856 - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953 - 0x3fd3e39be96ec271, 0x3fee6a61c55d53a7, // 0.31077, 0.95049 - 0x3fd3b3cefa0414b7, 0x3fee7227db6a9744, // 0.30785, 0.95144 - 0x3fd383f5e353b6aa, 0x3fee79db29a5165a, // 0.30493, 0.95238 - 0x3fd35410c2e18152, 0x3fee817bab4cd10d, // 0.30201, 0.95331 - 0x3fd3241fb638baaf, 0x3fee89095bad6025, // 0.29908, 0.95423 - 0x3fd2f422daec0386, 0x3fee9084361df7f3, // 0.29615, 0.95514 - 0x3fd2c41a4e954520, 0x3fee97ec36016b30, // 0.29322, 0.95605 - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694 - 0x3fd263e6995554ba, 0x3feea68393e65800, // 0.28735, 0.95783 - 0x3fd233bbabc3bb72, 0x3feeadb2e8e7a88e, // 0.28441, 0.9587 - 0x3fd2038583d727bd, 0x3feeb4cf515b8811, // 0.28146, 0.95957 - 0x3fd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // 0.27852, 0.96043 - 0x3fd1a2f7fbe8f243, 0x3feec2cf4b1af6b2, // 0.27557, 0.96128 - 0x3fd172a0d7765177, 0x3feec9b2d3c3bf84, // 0.27262, 0.96212 - 0x3fd1423eefc69378, 0x3feed0835e999009, // 0.26967, 0.96295 - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378 - 0x3fd0e15b4e1749cd, 0x3feeddeb6a078651, // 0.26375, 0.96459 - 0x3fd0b0d9cfdbdb90, 0x3feee482e25a9dbc, // 0.26079, 0.96539 - 0x3fd0804e05eb661e, 0x3feeeb074c50a544, // 0.25783, 0.96619 - 0x3fd04fb80e37fdae, 0x3feef178a3e473c2, // 0.25487, 0.96698 - 0x3fd01f1806b9fdd2, 0x3feef7d6e51ca3c0, // 0.2519, 0.96775 - 0x3fcfdcdc1adfedf8, 0x3feefe220c0b95ec, // 0.24893, 0.96852 - 0x3fcf7b7480bd3801, 0x3fef045a14cf738c, // 0.24596, 0.96928 - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003 - 0x3fceb86b462de348, 0x3fef1090bc898f5f, // 0.24, 0.97077 - 0x3fce56ca1e101a1b, 0x3fef168f53f7205d, // 0.23702, 0.9715 - 0x3fcdf5163f01099a, 0x3fef1c7abe284708, // 0.23404, 0.97223 - 0x3fcd934fe5454311, 0x3fef2252f7763ada, // 0.23106, 0.97294 - 0x3fcd31774d2cbdee, 0x3fef2817fc4609ce, // 0.22807, 0.97364 - 0x3fcccf8cb312b286, 0x3fef2dc9c9089a9d, // 0.22508, 0.97434 - 0x3fcc6d90535d74dc, 0x3fef33685a3aaef0, // 0.22209, 0.97503 - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757 - 0x3fcba96334f15dad, 0x3fef3e6bbc1bbc65, // 0.21611, 0.97637 - 0x3fcb4732ef3d6722, 0x3fef43d085ff92dd, // 0.21311, 0.97703 - 0x3fcae4f1d5f3b9ab, 0x3fef492206bcabb4, // 0.21011, 0.97768 - 0x3fca82a025b00451, 0x3fef4e603b0b2f2d, // 0.20711, 0.97832 - 0x3fca203e1b1831da, 0x3fef538b1faf2d07, // 0.20411, 0.97895 - 0x3fc9bdcbf2dc4366, 0x3fef58a2b1789e84, // 0.2011, 0.97957 - 0x3fc95b49e9b62af9, 0x3fef5da6ed43685d, // 0.1981, 0.98018 - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079 - 0x3fc8961727c41804, 0x3fef677556883cee, // 0.19208, 0.98138 - 0x3fc83366e89c64c5, 0x3fef6c3f7df5bbb7, // 0.18907, 0.98196 - 0x3fc7d0a7bbd2cb1b, 0x3fef70f6434b7eb7, // 0.18606, 0.98254 - 0x3fc76dd9de50bf31, 0x3fef7599a3a12077, // 0.18304, 0.98311 - 0x3fc70afd8d08c4ff, 0x3fef7a299c1a322a, // 0.18002, 0.98366 - 0x3fc6a81304f64ab2, 0x3fef7ea629e63d6e, // 0.177, 0.98421 - 0x3fc6451a831d830d, 0x3fef830f4a40c60c, // 0.17398, 0.98475 - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528 - 0x3fc57f008654cbde, 0x3fef8ba737cb4b78, // 0.16794, 0.9858 - 0x3fc51bdf8597c5f2, 0x3fef8fd5ffae41db, // 0.16491, 0.98631 - 0x3fc4b8b17f79fa88, 0x3fef93f14f85ac08, // 0.16189, 0.98681 - 0x3fc45576b1293e5a, 0x3fef97f924c9099b, // 0.15886, 0.9873 - 0x3fc3f22f57db4893, 0x3fef9bed7cfbde29, // 0.15583, 0.98778 - 0x3fc38edbb0cd8d14, 0x3fef9fce55adb2c8, // 0.1528, 0.98826 - 0x3fc32b7bf94516a7, 0x3fefa39bac7a1791, // 0.14976, 0.98872 - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918 - 0x3fc264994dfd340a, 0x3fefaafbcb0cfddc, // 0.1437, 0.98962 - 0x3fc20116d4ec7bce, 0x3fefae8e8e46cfbb, // 0.14066, 0.99006 - 0x3fc19d8940be24e7, 0x3fefb20dc681d54d, // 0.13762, 0.99049 - 0x3fc139f0cedaf576, 0x3fefb5797195d741, // 0.13458, 0.9909 - 0x3fc0d64dbcb26786, 0x3fefb8d18d66adb7, // 0.13154, 0.99131 - 0x3fc072a047ba831d, 0x3fefbc1617e44186, // 0.1285, 0.99171 - 0x3fc00ee8ad6fb85b, 0x3fefbf470f0a8d88, // 0.12545, 0.9921 - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248 - 0x3fbe8eb7fde4aa3e, 0x3fefc56e3b7d9af6, // 0.11937, 0.99285 - 0x3fbdc70ecbae9fc8, 0x3fefc8646cfeb721, // 0.11632, 0.99321 - 0x3fbcff533b307dc1, 0x3fefcb4703914354, // 0.11327, 0.99356 - 0x3fbc3785c79ec2d5, 0x3fefce15fd6da67b, // 0.11022, 0.99391 - 0x3fbb6fa6ec38f64c, 0x3fefd0d158d86087, // 0.10717, 0.99424 - 0x3fbaa7b724495c04, 0x3fefd37914220b84, // 0.10412, 0.99456 - 0x3fb9dfb6eb24a85c, 0x3fefd60d2da75c9e, // 0.10107, 0.99488 - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518 - 0x3fb84f8712c130a0, 0x3fefdafa7514538c, // 0.094963, 0.99548 - 0x3fb787586a5d5b21, 0x3fefdd539ff1f456, // 0.091909, 0.99577 - 0x3fb6bf1b3e79b129, 0x3fefdf9922f73307, // 0.088854, 0.99604 - 0x3fb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // 0.085797, 0.99631 - 0x3fb52e774a4d4d0a, 0x3fefe3e92be9d886, // 0.08274, 0.99657 - 0x3fb4661179272096, 0x3fefe5f3af2e3940, // 0.079682, 0.99682 - 0x3fb39d9f12c5a299, 0x3fefe7ea85482d60, // 0.076624, 0.99706 - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, // 0.073565, 0.99729 - 0x3fb20c9674ed444c, 0x3fefeb9d2530410f, // 0.070505, 0.99751 - 0x3fb1440134d709b2, 0x3fefed58ecb673c4, // 0.067444, 0.99772 - 0x3fb07b614e463064, 0x3fefef0102826191, // 0.064383, 0.99793 - 0x3faf656e79f820e0, 0x3feff095658e71ad, // 0.061321, 0.99812 - 0x3fadd406f9808ec8, 0x3feff21614e131ed, // 0.058258, 0.9983 - 0x3fac428d12c0d7e3, 0x3feff3830f8d575c, // 0.055195, 0.99848 - 0x3faab101bd5f8317, 0x3feff4dc54b1bed3, // 0.052132, 0.99864 - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, // 0.049068, 0.9988 - 0x3fa78dbaa5874685, 0x3feff753bb1b9164, // 0.046003, 0.99894 - 0x3fa5fc00d290cd43, 0x3feff871dadb81df, // 0.042938, 0.99908 - 0x3fa46a396ff86179, 0x3feff97c4208c014, // 0.039873, 0.9992 - 0x3fa2d865759455cd, 0x3feffa72effef75d, // 0.036807, 0.99932 - 0x3fa14685db42c17e, 0x3feffb55e425fdae, // 0.033741, 0.99943 - 0x3f9f693731d1cf01, 0x3feffc251df1d3f8, // 0.030675, 0.99953 - 0x3f9c454f4ce53b1c, 0x3feffce09ce2a679, // 0.027608, 0.99962 - 0x3f992155f7a3667e, 0x3feffd886084cd0d, // 0.024541, 0.9997 - 0x3f95fd4d21fab226, 0x3feffe1c6870cb77, // 0.021474, 0.99977 - 0x3f92d936bbe30efd, 0x3feffe9cb44b51a1, // 0.018407, 0.99983 - 0x3f8f6a296ab997ca, 0x3fefff0943c53bd1, // 0.015339, 0.99988 - 0x3f8921d1fcdec784, 0x3fefff62169b92db, // 0.012272, 0.99992 - 0x3f82d96b0e509703, 0x3fefffa72c978c4f, // 0.0092038, 0.99996 - 0x3f7921f0fe670071, 0x3fefffd8858e8a92, // 0.0061359, 0.99998 - 0x3f6921f8becca4ba, 0x3feffff621621d02, // 0.003068, 1 - 0x0000000000000000, 0x3ff0000000000000, // 0, 1 - 0xbf6921f8becca4ba, 0x3feffff621621d02, // -0.003068, 1 - 0xbf7921f0fe670071, 0x3fefffd8858e8a92, //-0.0061359, 0.99998 - 0xbf82d96b0e509703, 0x3fefffa72c978c4f, //-0.0092038, 0.99996 - 0xbf8921d1fcdec784, 0x3fefff62169b92db, // -0.012272, 0.99992 - 0xbf8f6a296ab997ca, 0x3fefff0943c53bd1, // -0.015339, 0.99988 - 0xbf92d936bbe30efd, 0x3feffe9cb44b51a1, // -0.018407, 0.99983 - 0xbf95fd4d21fab226, 0x3feffe1c6870cb77, // -0.021474, 0.99977 - 0xbf992155f7a3667e, 0x3feffd886084cd0d, // -0.024541, 0.9997 - 0xbf9c454f4ce53b1c, 0x3feffce09ce2a679, // -0.027608, 0.99962 - 0xbf9f693731d1cf01, 0x3feffc251df1d3f8, // -0.030675, 0.99953 - 0xbfa14685db42c17e, 0x3feffb55e425fdae, // -0.033741, 0.99943 - 0xbfa2d865759455cd, 0x3feffa72effef75d, // -0.036807, 0.99932 - 0xbfa46a396ff86179, 0x3feff97c4208c014, // -0.039873, 0.9992 - 0xbfa5fc00d290cd43, 0x3feff871dadb81df, // -0.042938, 0.99908 - 0xbfa78dbaa5874685, 0x3feff753bb1b9164, // -0.046003, 0.99894 - 0xbfa91f65f10dd814, 0x3feff621e3796d7e, // -0.049068, 0.9988 - 0xbfaab101bd5f8317, 0x3feff4dc54b1bed3, // -0.052132, 0.99864 - 0xbfac428d12c0d7e3, 0x3feff3830f8d575c, // -0.055195, 0.99848 - 0xbfadd406f9808ec8, 0x3feff21614e131ed, // -0.058258, 0.9983 - 0xbfaf656e79f820e0, 0x3feff095658e71ad, // -0.061321, 0.99812 - 0xbfb07b614e463064, 0x3fefef0102826191, // -0.064383, 0.99793 - 0xbfb1440134d709b2, 0x3fefed58ecb673c4, // -0.067444, 0.99772 - 0xbfb20c9674ed444c, 0x3fefeb9d2530410f, // -0.070505, 0.99751 - 0xbfb2d52092ce19f6, 0x3fefe9cdad01883a, // -0.073565, 0.99729 - 0xbfb39d9f12c5a299, 0x3fefe7ea85482d60, // -0.076624, 0.99706 - 0xbfb4661179272096, 0x3fefe5f3af2e3940, // -0.079682, 0.99682 - 0xbfb52e774a4d4d0a, 0x3fefe3e92be9d886, // -0.08274, 0.99657 - 0xbfb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // -0.085797, 0.99631 - 0xbfb6bf1b3e79b129, 0x3fefdf9922f73307, // -0.088854, 0.99604 - 0xbfb787586a5d5b21, 0x3fefdd539ff1f456, // -0.091909, 0.99577 - 0xbfb84f8712c130a0, 0x3fefdafa7514538c, // -0.094963, 0.99548 - 0xbfb917a6bc29b42c, 0x3fefd88da3d12526, // -0.098017, 0.99518 - 0xbfb9dfb6eb24a85c, 0x3fefd60d2da75c9e, // -0.10107, 0.99488 - 0xbfbaa7b724495c04, 0x3fefd37914220b84, // -0.10412, 0.99456 - 0xbfbb6fa6ec38f64c, 0x3fefd0d158d86087, // -0.10717, 0.99424 - 0xbfbc3785c79ec2d5, 0x3fefce15fd6da67b, // -0.11022, 0.99391 - 0xbfbcff533b307dc1, 0x3fefcb4703914354, // -0.11327, 0.99356 - 0xbfbdc70ecbae9fc8, 0x3fefc8646cfeb721, // -0.11632, 0.99321 - 0xbfbe8eb7fde4aa3e, 0x3fefc56e3b7d9af6, // -0.11937, 0.99285 - 0xbfbf564e56a9730e, 0x3fefc26470e19fd3, // -0.12241, 0.99248 - 0xbfc00ee8ad6fb85b, 0x3fefbf470f0a8d88, // -0.12545, 0.9921 - 0xbfc072a047ba831d, 0x3fefbc1617e44186, // -0.1285, 0.99171 - 0xbfc0d64dbcb26786, 0x3fefb8d18d66adb7, // -0.13154, 0.99131 - 0xbfc139f0cedaf576, 0x3fefb5797195d741, // -0.13458, 0.9909 - 0xbfc19d8940be24e7, 0x3fefb20dc681d54d, // -0.13762, 0.99049 - 0xbfc20116d4ec7bce, 0x3fefae8e8e46cfbb, // -0.14066, 0.99006 - 0xbfc264994dfd340a, 0x3fefaafbcb0cfddc, // -0.1437, 0.98962 - 0xbfc2c8106e8e613a, 0x3fefa7557f08a517, // -0.14673, 0.98918 - 0xbfc32b7bf94516a7, 0x3fefa39bac7a1791, // -0.14976, 0.98872 - 0xbfc38edbb0cd8d14, 0x3fef9fce55adb2c8, // -0.1528, 0.98826 - 0xbfc3f22f57db4893, 0x3fef9bed7cfbde29, // -0.15583, 0.98778 - 0xbfc45576b1293e5a, 0x3fef97f924c9099b, // -0.15886, 0.9873 - 0xbfc4b8b17f79fa88, 0x3fef93f14f85ac08, // -0.16189, 0.98681 - 0xbfc51bdf8597c5f2, 0x3fef8fd5ffae41db, // -0.16491, 0.98631 - 0xbfc57f008654cbde, 0x3fef8ba737cb4b78, // -0.16794, 0.9858 - 0xbfc5e214448b3fc6, 0x3fef8764fa714ba9, // -0.17096, 0.98528 - 0xbfc6451a831d830d, 0x3fef830f4a40c60c, // -0.17398, 0.98475 - 0xbfc6a81304f64ab2, 0x3fef7ea629e63d6e, // -0.177, 0.98421 - 0xbfc70afd8d08c4ff, 0x3fef7a299c1a322a, // -0.18002, 0.98366 - 0xbfc76dd9de50bf31, 0x3fef7599a3a12077, // -0.18304, 0.98311 - 0xbfc7d0a7bbd2cb1b, 0x3fef70f6434b7eb7, // -0.18606, 0.98254 - 0xbfc83366e89c64c5, 0x3fef6c3f7df5bbb7, // -0.18907, 0.98196 - 0xbfc8961727c41804, 0x3fef677556883cee, // -0.19208, 0.98138 - 0xbfc8f8b83c69a60a, 0x3fef6297cff75cb0, // -0.19509, 0.98079 - 0xbfc95b49e9b62af9, 0x3fef5da6ed43685d, // -0.1981, 0.98018 - 0xbfc9bdcbf2dc4366, 0x3fef58a2b1789e84, // -0.2011, 0.97957 - 0xbfca203e1b1831da, 0x3fef538b1faf2d07, // -0.20411, 0.97895 - 0xbfca82a025b00451, 0x3fef4e603b0b2f2d, // -0.20711, 0.97832 - 0xbfcae4f1d5f3b9ab, 0x3fef492206bcabb4, // -0.21011, 0.97768 - 0xbfcb4732ef3d6722, 0x3fef43d085ff92dd, // -0.21311, 0.97703 - 0xbfcba96334f15dad, 0x3fef3e6bbc1bbc65, // -0.21611, 0.97637 - 0xbfcc0b826a7e4f63, 0x3fef38f3ac64e589, // -0.2191, 0.9757 - 0xbfcc6d90535d74dc, 0x3fef33685a3aaef0, // -0.22209, 0.97503 - 0xbfcccf8cb312b286, 0x3fef2dc9c9089a9d, // -0.22508, 0.97434 - 0xbfcd31774d2cbdee, 0x3fef2817fc4609ce, // -0.22807, 0.97364 - 0xbfcd934fe5454311, 0x3fef2252f7763ada, // -0.23106, 0.97294 - 0xbfcdf5163f01099a, 0x3fef1c7abe284708, // -0.23404, 0.97223 - 0xbfce56ca1e101a1b, 0x3fef168f53f7205d, // -0.23702, 0.9715 - 0xbfceb86b462de348, 0x3fef1090bc898f5f, // -0.24, 0.97077 - 0xbfcf19f97b215f1a, 0x3fef0a7efb9230d7, // -0.24298, 0.97003 - 0xbfcf7b7480bd3801, 0x3fef045a14cf738c, // -0.24596, 0.96928 - 0xbfcfdcdc1adfedf8, 0x3feefe220c0b95ec, // -0.24893, 0.96852 - 0xbfd01f1806b9fdd2, 0x3feef7d6e51ca3c0, // -0.2519, 0.96775 - 0xbfd04fb80e37fdae, 0x3feef178a3e473c2, // -0.25487, 0.96698 - 0xbfd0804e05eb661e, 0x3feeeb074c50a544, // -0.25783, 0.96619 - 0xbfd0b0d9cfdbdb90, 0x3feee482e25a9dbc, // -0.26079, 0.96539 - 0xbfd0e15b4e1749cd, 0x3feeddeb6a078651, // -0.26375, 0.96459 - 0xbfd111d262b1f677, 0x3feed740e7684963, // -0.26671, 0.96378 - 0xbfd1423eefc69378, 0x3feed0835e999009, // -0.26967, 0.96295 - 0xbfd172a0d7765177, 0x3feec9b2d3c3bf84, // -0.27262, 0.96212 - 0xbfd1a2f7fbe8f243, 0x3feec2cf4b1af6b2, // -0.27557, 0.96128 - 0xbfd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // -0.27852, 0.96043 - 0xbfd2038583d727bd, 0x3feeb4cf515b8811, // -0.28146, 0.95957 - 0xbfd233bbabc3bb72, 0x3feeadb2e8e7a88e, // -0.28441, 0.9587 - 0xbfd263e6995554ba, 0x3feea68393e65800, // -0.28735, 0.95783 - 0xbfd294062ed59f05, 0x3fee9f4156c62dda, // -0.29028, 0.95694 - 0xbfd2c41a4e954520, 0x3fee97ec36016b30, // -0.29322, 0.95605 - 0xbfd2f422daec0386, 0x3fee9084361df7f3, // -0.29615, 0.95514 - 0xbfd3241fb638baaf, 0x3fee89095bad6025, // -0.29908, 0.95423 - 0xbfd35410c2e18152, 0x3fee817bab4cd10d, // -0.30201, 0.95331 - 0xbfd383f5e353b6aa, 0x3fee79db29a5165a, // -0.30493, 0.95238 - 0xbfd3b3cefa0414b7, 0x3fee7227db6a9744, // -0.30785, 0.95144 - 0xbfd3e39be96ec271, 0x3fee6a61c55d53a7, // -0.31077, 0.95049 - 0xbfd4135c94176602, 0x3fee6288ec48e112, // -0.31368, 0.94953 - 0xbfd44310dc8936f0, 0x3fee5a9d550467d3, // -0.31659, 0.94856 - 0xbfd472b8a5571054, 0x3fee529f04729ffc, // -0.3195, 0.94759 - 0xbfd4a253d11b82f3, 0x3fee4a8dff81ce5e, // -0.32241, 0.9466 - 0xbfd4d1e24278e76a, 0x3fee426a4b2bc17e, // -0.32531, 0.94561 - 0xbfd50163dc197047, 0x3fee3a33ec75ce85, // -0.32821, 0.9446 - 0xbfd530d880af3c24, 0x3fee31eae870ce25, // -0.33111, 0.94359 - 0xbfd5604012f467b4, 0x3fee298f4439197a, // -0.334, 0.94257 - 0xbfd58f9a75ab1fdd, 0x3fee212104f686e5, // -0.33689, 0.94154 - 0xbfd5bee78b9db3b6, 0x3fee18a02fdc66d9, // -0.33978, 0.94051 - 0xbfd5ee27379ea693, 0x3fee100cca2980ac, // -0.34266, 0.93946 - 0xbfd61d595c88c203, 0x3fee0766d9280f54, // -0.34554, 0.9384 - 0xbfd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // -0.34842, 0.93734 - 0xbfd67b949cad63ca, 0x3fedf5e36a9ba59c, // -0.35129, 0.93627 - 0xbfd6aa9d7dc77e16, 0x3feded05f7de47da, // -0.35416, 0.93518 - 0xbfd6d998638a0cb5, 0x3fede4160f6d8d81, // -0.35703, 0.93409 - 0xbfd7088530fa459e, 0x3feddb13b6ccc23d, // -0.3599, 0.93299 - 0xbfd73763c9261092, 0x3fedd1fef38a915a, // -0.36276, 0.93188 - 0xbfd766340f2418f6, 0x3fedc8d7cb410260, // -0.36561, 0.93077 - 0xbfd794f5e613dfae, 0x3fedbf9e4395759a, // -0.36847, 0.92964 - 0xbfd7c3a9311dcce7, 0x3fedb6526238a09b, // -0.37132, 0.92851 - 0xbfd7f24dd37341e3, 0x3fedacf42ce68ab9, // -0.37416, 0.92736 - 0xbfd820e3b04eaac4, 0x3feda383a9668988, // -0.37701, 0.92621 - 0xbfd84f6aaaf3903f, 0x3fed9a00dd8b3d46, // -0.37985, 0.92505 - 0xbfd87de2a6aea963, 0x3fed906bcf328d46, // -0.38268, 0.92388 - 0xbfd8ac4b86d5ed44, 0x3fed86c48445a450, // -0.38552, 0.9227 - 0xbfd8daa52ec8a4af, 0x3fed7d0b02b8ecf9, // -0.38835, 0.92151 - 0xbfd908ef81ef7bd1, 0x3fed733f508c0dff, // -0.39117, 0.92032 - 0xbfd9372a63bc93d7, 0x3fed696173c9e68b, // -0.39399, 0.91911 - 0xbfd96555b7ab948f, 0x3fed5f7172888a7f, // -0.39681, 0.9179 - 0xbfd993716141bdfe, 0x3fed556f52e93eb1, // -0.39962, 0.91668 - 0xbfd9c17d440df9f2, 0x3fed4b5b1b187524, // -0.40243, 0.91545 - 0xbfd9ef7943a8ed8a, 0x3fed4134d14dc93a, // -0.40524, 0.91421 - 0xbfda1d6543b50ac0, 0x3fed36fc7bcbfbdc, // -0.40804, 0.91296 - 0xbfda4b4127dea1e4, 0x3fed2cb220e0ef9f, // -0.41084, 0.91171 - 0xbfda790cd3dbf31a, 0x3fed2255c6e5a4e1, // -0.41364, 0.91044 - 0xbfdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // -0.41643, 0.90917 - 0xbfdad473125cdc08, 0x3fed0d672f59d2b9, // -0.41922, 0.90789 - 0xbfdb020d6c7f4009, 0x3fed02d4feb2bd92, // -0.422, 0.9066 - 0xbfdb2f971db31972, 0x3fecf830e8ce467b, // -0.42478, 0.9053 - 0xbfdb5d1009e15cc0, 0x3feced7af43cc773, // -0.42756, 0.90399 - 0xbfdb8a7814fd5693, 0x3fece2b32799a060, // -0.43033, 0.90267 - 0xbfdbb7cf2304bd01, 0x3fecd7d9898b32f6, // -0.43309, 0.90135 - 0xbfdbe51517ffc0d9, 0x3fecccee20c2de9f, // -0.43586, 0.90002 - 0xbfdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // -0.43862, 0.89867 - 0xbfdc3f6d47263129, 0x3fecb6e20a00da99, // -0.44137, 0.89732 - 0xbfdc6c7f4997000a, 0x3fecabc169a0b901, // -0.44412, 0.89597 - 0xbfdc997fc3865388, 0x3feca08f19b9c449, // -0.44687, 0.8946 - 0xbfdcc66e9931c45d, 0x3fec954b213411f5, // -0.44961, 0.89322 - 0xbfdcf34baee1cd21, 0x3fec89f587029c13, // -0.45235, 0.89184 - 0xbfdd2016e8e9db5b, 0x3fec7e8e52233cf3, // -0.45508, 0.89045 - 0xbfdd4cd02ba8609c, 0x3fec7315899eaad7, // -0.45781, 0.88905 - 0xbfdd79775b86e389, 0x3fec678b3488739b, // -0.46054, 0.88764 - 0xbfdda60c5cfa10d8, 0x3fec5bef59fef85a, // -0.46326, 0.88622 - 0xbfddd28f1481cc58, 0x3fec5042012b6907, // -0.46598, 0.8848 - 0xbfddfeff66a941de, 0x3fec44833141c004, // -0.46869, 0.88336 - 0xbfde2b5d3806f63b, 0x3fec38b2f180bdb1, // -0.4714, 0.88192 - 0xbfde57a86d3cd824, 0x3fec2cd14931e3f1, // -0.4741, 0.88047 - 0xbfde83e0eaf85113, 0x3fec20de3fa971b0, // -0.4768, 0.87901 - 0xbfdeb00695f25620, 0x3fec14d9dc465e58, // -0.47949, 0.87755 - 0xbfdedc1952ef78d5, 0x3fec08c426725549, // -0.48218, 0.87607 - 0xbfdf081906bff7fd, 0x3febfc9d25a1b147, // -0.48487, 0.87459 - 0xbfdf3405963fd068, 0x3febf064e15377dd, // -0.48755, 0.87309 - 0xbfdf5fdee656cda3, 0x3febe41b611154c1, // -0.49023, 0.8716 - 0xbfdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // -0.4929, 0.87009 - 0xbfdfb7575c24d2de, 0x3febcb54cb0d2327, // -0.49557, 0.86857 - 0xbfdfe2f64be7120f, 0x3febbed7c49380ea, // -0.49823, 0.86705 - 0xbfe00740c82b82e0, 0x3febb249a0b6c40d, // -0.50089, 0.86551 - 0xbfe01cfc874c3eb7, 0x3feba5aa673590d2, // -0.50354, 0.86397 - 0xbfe032ae55edbd95, 0x3feb98fa1fd9155e, // -0.50619, 0.86242 - 0xbfe0485626ae221a, 0x3feb8c38d27504e9, // -0.50883, 0.86087 - 0xbfe05df3ec31b8b6, 0x3feb7f6686e792ea, // -0.51147, 0.8593 - 0xbfe073879922ffed, 0x3feb728345196e3e, // -0.5141, 0.85773 - 0xbfe089112032b08c, 0x3feb658f14fdbc47, // -0.51673, 0.85615 - 0xbfe09e907417c5e1, 0x3feb5889fe921405, // -0.51936, 0.85456 - 0xbfe0b405878f85ec, 0x3feb4b7409de7925, // -0.52198, 0.85296 - 0xbfe0c9704d5d898f, 0x3feb3e4d3ef55712, // -0.52459, 0.85136 - 0xbfe0ded0b84bc4b5, 0x3feb3115a5f37bf4, // -0.5272, 0.84974 - 0xbfe0f426bb2a8e7d, 0x3feb23cd470013b4, // -0.5298, 0.84812 - 0xbfe1097248d0a956, 0x3feb16742a4ca2f5, // -0.5324, 0.84649 - 0xbfe11eb3541b4b22, 0x3feb090a58150200, // -0.535, 0.84485 - 0xbfe133e9cfee254e, 0x3feafb8fd89f57b6, // -0.53759, 0.84321 - 0xbfe14915af336ceb, 0x3feaee04b43c1474, // -0.54017, 0.84155 - 0xbfe15e36e4dbe2bc, 0x3feae068f345ecef, // -0.54275, 0.83989 - 0xbfe1734d63dedb49, 0x3fead2bc9e21d511, // -0.54532, 0.83822 - 0xbfe188591f3a46e5, 0x3feac4ffbd3efac8, // -0.54789, 0.83655 - 0xbfe19d5a09f2b9b8, 0x3feab7325916c0d4, // -0.55046, 0.83486 - 0xbfe1b250171373be, 0x3feaa9547a2cb98e, // -0.55302, 0.83317 - 0xbfe1c73b39ae68c8, 0x3fea9b66290ea1a3, // -0.55557, 0.83147 - 0xbfe1dc1b64dc4872, 0x3fea8d676e545ad2, // -0.55812, 0.82976 - 0xbfe1f0f08bbc861b, 0x3fea7f58529fe69d, // -0.56066, 0.82805 - 0xbfe205baa17560d6, 0x3fea7138de9d60f5, // -0.5632, 0.82632 - 0xbfe21a799933eb58, 0x3fea63091b02fae2, // -0.56573, 0.82459 - 0xbfe22f2d662c13e1, 0x3fea54c91090f524, // -0.56826, 0.82285 - 0xbfe243d5fb98ac1f, 0x3fea4678c8119ac8, // -0.57078, 0.8211 - 0xbfe258734cbb7110, 0x3fea38184a593bc6, // -0.5733, 0.81935 - 0xbfe26d054cdd12df, 0x3fea29a7a0462782, // -0.57581, 0.81758 - 0xbfe2818bef4d3cba, 0x3fea1b26d2c0a75e, // -0.57831, 0.81581 - 0xbfe2960727629ca8, 0x3fea0c95eabaf937, // -0.58081, 0.81404 - 0xbfe2aa76e87aeb58, 0x3fe9fdf4f13149de, // -0.58331, 0.81225 - 0xbfe2bedb25faf3ea, 0x3fe9ef43ef29af94, // -0.5858, 0.81046 - 0xbfe2d333d34e9bb7, 0x3fe9e082edb42472, // -0.58828, 0.80866 - 0xbfe2e780e3e8ea16, 0x3fe9d1b1f5ea80d6, // -0.59076, 0.80685 - 0xbfe2fbc24b441015, 0x3fe9c2d110f075c3, // -0.59323, 0.80503 - 0xbfe30ff7fce17035, 0x3fe9b3e047f38741, // -0.5957, 0.80321 - 0xbfe32421ec49a620, 0x3fe9a4dfa42b06b2, // -0.59816, 0.80138 - 0xbfe338400d0c8e57, 0x3fe995cf2ed80d22, // -0.60062, 0.79954 - 0xbfe34c5252c14de1, 0x3fe986aef1457594, // -0.60307, 0.79769 - 0xbfe36058b10659f3, 0x3fe9777ef4c7d742, // -0.60551, 0.79584 - 0xbfe374531b817f8d, 0x3fe9683f42bd7fe1, // -0.60795, 0.79398 - 0xbfe3884185dfeb22, 0x3fe958efe48e6dd7, // -0.61038, 0.79211 - 0xbfe39c23e3d63029, 0x3fe94990e3ac4a6c, // -0.61281, 0.79023 - 0xbfe3affa292050b9, 0x3fe93a22499263fc, // -0.61523, 0.78835 - 0xbfe3c3c44981c517, 0x3fe92aa41fc5a815, // -0.61765, 0.78646 - 0xbfe3d78238c58343, 0x3fe91b166fd49da2, // -0.62006, 0.78456 - 0xbfe3eb33eabe0680, 0x3fe90b7943575efe, // -0.62246, 0.78265 - 0xbfe3fed9534556d4, 0x3fe8fbcca3ef940d, // -0.62486, 0.78074 - 0xbfe41272663d108c, 0x3fe8ec109b486c49, // -0.62725, 0.77882 - 0xbfe425ff178e6bb1, 0x3fe8dc45331698cc, // -0.62964, 0.77689 - 0xbfe4397f5b2a4380, 0x3fe8cc6a75184655, // -0.63202, 0.77495 - 0xbfe44cf325091dd6, 0x3fe8bc806b151741, // -0.63439, 0.77301 - 0xbfe4605a692b32a2, 0x3fe8ac871ede1d88, // -0.63676, 0.77106 - 0xbfe473b51b987347, 0x3fe89c7e9a4dd4ab, // -0.63912, 0.7691 - 0xbfe48703306091fe, 0x3fe88c66e7481ba1, // -0.64148, 0.76714 - 0xbfe49a449b9b0938, 0x3fe87c400fba2ebf, // -0.64383, 0.76517 - 0xbfe4ad79516722f0, 0x3fe86c0a1d9aa195, // -0.64618, 0.76319 - 0xbfe4c0a145ec0004, 0x3fe85bc51ae958cc, // -0.64851, 0.7612 - 0xbfe4d3bc6d589f80, 0x3fe84b7111af83f9, // -0.65085, 0.75921 - 0xbfe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // -0.65317, 0.75721 - 0xbfe4f9cc25cca486, 0x3fe82a9c13f545ff, // -0.65549, 0.7552 - 0xbfe50cc09f59a09b, 0x3fe81a1b33b57acc, // -0.65781, 0.75319 - 0xbfe51fa81cd99aa6, 0x3fe8098b756e52fa, // -0.66011, 0.75117 - 0xbfe5328292a35596, 0x3fe7f8ece3571771, // -0.66242, 0.74914 - 0xbfe5454ff5159dfb, 0x3fe7e83f87b03686, // -0.66471, 0.7471 - 0xbfe5581038975137, 0x3fe7d7836cc33db2, // -0.667, 0.74506 - 0xbfe56ac35197649e, 0x3fe7c6b89ce2d333, // -0.66928, 0.74301 - 0xbfe57d69348cec9f, 0x3fe7b5df226aafb0, // -0.67156, 0.74095 - 0xbfe59001d5f723df, 0x3fe7a4f707bf97d2, // -0.67383, 0.73889 - 0xbfe5a28d2a5d7250, 0x3fe79400574f55e4, // -0.67609, 0.73682 - 0xbfe5b50b264f7448, 0x3fe782fb1b90b35b, // -0.67835, 0.73474 - 0xbfe5c77bbe65018c, 0x3fe771e75f037261, // -0.6806, 0.73265 - 0xbfe5d9dee73e345c, 0x3fe760c52c304764, // -0.68285, 0.73056 - 0xbfe5ec3495837074, 0x3fe74f948da8d28d, // -0.68508, 0.72846 - 0xbfe5fe7cbde56a0f, 0x3fe73e558e079942, // -0.68732, 0.72636 - 0xbfe610b7551d2cde, 0x3fe72d0837efff97, // -0.68954, 0.72425 - 0xbfe622e44fec22ff, 0x3fe71bac960e41bf, // -0.69176, 0.72213 - 0xbfe63503a31c1be8, 0x3fe70a42b3176d7a, // -0.69397, 0.72 - 0xbfe64715437f535b, 0x3fe6f8ca99c95b75, // -0.69618, 0.71787 - 0xbfe6591925f0783e, 0x3fe6e74454eaa8ae, // -0.69838, 0.71573 - 0xbfe66b0f3f52b386, 0x3fe6d5afef4aafcc, // -0.70057, 0.71358 - 0xbfe67cf78491af10, 0x3fe6c40d73c18275, // -0.70275, 0.71143 - 0xbfe68ed1eaa19c71, 0x3fe6b25ced2fe29c, // -0.70493, 0.70927 - 0xbfe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // -0.70711, 0.70711 - 0xbfe6b25ced2fe29c, 0x3fe68ed1eaa19c71, // -0.70927, 0.70493 - 0xbfe6c40d73c18275, 0x3fe67cf78491af10, // -0.71143, 0.70275 - 0xbfe6d5afef4aafcc, 0x3fe66b0f3f52b386, // -0.71358, 0.70057 - 0xbfe6e74454eaa8ae, 0x3fe6591925f0783e, // -0.71573, 0.69838 - 0xbfe6f8ca99c95b75, 0x3fe64715437f535b, // -0.71787, 0.69618 - 0xbfe70a42b3176d7a, 0x3fe63503a31c1be8, // -0.72, 0.69397 - 0xbfe71bac960e41bf, 0x3fe622e44fec22ff, // -0.72213, 0.69176 - 0xbfe72d0837efff97, 0x3fe610b7551d2cde, // -0.72425, 0.68954 - 0xbfe73e558e079942, 0x3fe5fe7cbde56a0f, // -0.72636, 0.68732 - 0xbfe74f948da8d28d, 0x3fe5ec3495837074, // -0.72846, 0.68508 - 0xbfe760c52c304764, 0x3fe5d9dee73e345c, // -0.73056, 0.68285 - 0xbfe771e75f037261, 0x3fe5c77bbe65018c, // -0.73265, 0.6806 - 0xbfe782fb1b90b35b, 0x3fe5b50b264f7448, // -0.73474, 0.67835 - 0xbfe79400574f55e4, 0x3fe5a28d2a5d7250, // -0.73682, 0.67609 - 0xbfe7a4f707bf97d2, 0x3fe59001d5f723df, // -0.73889, 0.67383 - 0xbfe7b5df226aafb0, 0x3fe57d69348cec9f, // -0.74095, 0.67156 - 0xbfe7c6b89ce2d333, 0x3fe56ac35197649e, // -0.74301, 0.66928 - 0xbfe7d7836cc33db2, 0x3fe5581038975137, // -0.74506, 0.667 - 0xbfe7e83f87b03686, 0x3fe5454ff5159dfb, // -0.7471, 0.66471 - 0xbfe7f8ece3571771, 0x3fe5328292a35596, // -0.74914, 0.66242 - 0xbfe8098b756e52fa, 0x3fe51fa81cd99aa6, // -0.75117, 0.66011 - 0xbfe81a1b33b57acc, 0x3fe50cc09f59a09b, // -0.75319, 0.65781 - 0xbfe82a9c13f545ff, 0x3fe4f9cc25cca486, // -0.7552, 0.65549 - 0xbfe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // -0.75721, 0.65317 - 0xbfe84b7111af83f9, 0x3fe4d3bc6d589f80, // -0.75921, 0.65085 - 0xbfe85bc51ae958cc, 0x3fe4c0a145ec0004, // -0.7612, 0.64851 - 0xbfe86c0a1d9aa195, 0x3fe4ad79516722f0, // -0.76319, 0.64618 - 0xbfe87c400fba2ebf, 0x3fe49a449b9b0938, // -0.76517, 0.64383 - 0xbfe88c66e7481ba1, 0x3fe48703306091fe, // -0.76714, 0.64148 - 0xbfe89c7e9a4dd4ab, 0x3fe473b51b987347, // -0.7691, 0.63912 - 0xbfe8ac871ede1d88, 0x3fe4605a692b32a2, // -0.77106, 0.63676 - 0xbfe8bc806b151741, 0x3fe44cf325091dd6, // -0.77301, 0.63439 - 0xbfe8cc6a75184655, 0x3fe4397f5b2a4380, // -0.77495, 0.63202 - 0xbfe8dc45331698cc, 0x3fe425ff178e6bb1, // -0.77689, 0.62964 - 0xbfe8ec109b486c49, 0x3fe41272663d108c, // -0.77882, 0.62725 - 0xbfe8fbcca3ef940d, 0x3fe3fed9534556d4, // -0.78074, 0.62486 - 0xbfe90b7943575efe, 0x3fe3eb33eabe0680, // -0.78265, 0.62246 - 0xbfe91b166fd49da2, 0x3fe3d78238c58343, // -0.78456, 0.62006 - 0xbfe92aa41fc5a815, 0x3fe3c3c44981c517, // -0.78646, 0.61765 - 0xbfe93a22499263fc, 0x3fe3affa292050b9, // -0.78835, 0.61523 - 0xbfe94990e3ac4a6c, 0x3fe39c23e3d63029, // -0.79023, 0.61281 - 0xbfe958efe48e6dd7, 0x3fe3884185dfeb22, // -0.79211, 0.61038 - 0xbfe9683f42bd7fe1, 0x3fe374531b817f8d, // -0.79398, 0.60795 - 0xbfe9777ef4c7d742, 0x3fe36058b10659f3, // -0.79584, 0.60551 - 0xbfe986aef1457594, 0x3fe34c5252c14de1, // -0.79769, 0.60307 - 0xbfe995cf2ed80d22, 0x3fe338400d0c8e57, // -0.79954, 0.60062 - 0xbfe9a4dfa42b06b2, 0x3fe32421ec49a620, // -0.80138, 0.59816 - 0xbfe9b3e047f38741, 0x3fe30ff7fce17035, // -0.80321, 0.5957 - 0xbfe9c2d110f075c3, 0x3fe2fbc24b441015, // -0.80503, 0.59323 - 0xbfe9d1b1f5ea80d6, 0x3fe2e780e3e8ea16, // -0.80685, 0.59076 - 0xbfe9e082edb42472, 0x3fe2d333d34e9bb7, // -0.80866, 0.58828 - 0xbfe9ef43ef29af94, 0x3fe2bedb25faf3ea, // -0.81046, 0.5858 - 0xbfe9fdf4f13149de, 0x3fe2aa76e87aeb58, // -0.81225, 0.58331 - 0xbfea0c95eabaf937, 0x3fe2960727629ca8, // -0.81404, 0.58081 - 0xbfea1b26d2c0a75e, 0x3fe2818bef4d3cba, // -0.81581, 0.57831 - 0xbfea29a7a0462782, 0x3fe26d054cdd12df, // -0.81758, 0.57581 - 0xbfea38184a593bc6, 0x3fe258734cbb7110, // -0.81935, 0.5733 - 0xbfea4678c8119ac8, 0x3fe243d5fb98ac1f, // -0.8211, 0.57078 - 0xbfea54c91090f524, 0x3fe22f2d662c13e1, // -0.82285, 0.56826 - 0xbfea63091b02fae2, 0x3fe21a799933eb58, // -0.82459, 0.56573 - 0xbfea7138de9d60f5, 0x3fe205baa17560d6, // -0.82632, 0.5632 - 0xbfea7f58529fe69d, 0x3fe1f0f08bbc861b, // -0.82805, 0.56066 - 0xbfea8d676e545ad2, 0x3fe1dc1b64dc4872, // -0.82976, 0.55812 - 0xbfea9b66290ea1a3, 0x3fe1c73b39ae68c8, // -0.83147, 0.55557 - 0xbfeaa9547a2cb98e, 0x3fe1b250171373be, // -0.83317, 0.55302 - 0xbfeab7325916c0d4, 0x3fe19d5a09f2b9b8, // -0.83486, 0.55046 - 0xbfeac4ffbd3efac8, 0x3fe188591f3a46e5, // -0.83655, 0.54789 - 0xbfead2bc9e21d511, 0x3fe1734d63dedb49, // -0.83822, 0.54532 - 0xbfeae068f345ecef, 0x3fe15e36e4dbe2bc, // -0.83989, 0.54275 - 0xbfeaee04b43c1474, 0x3fe14915af336ceb, // -0.84155, 0.54017 - 0xbfeafb8fd89f57b6, 0x3fe133e9cfee254e, // -0.84321, 0.53759 - 0xbfeb090a58150200, 0x3fe11eb3541b4b22, // -0.84485, 0.535 - 0xbfeb16742a4ca2f5, 0x3fe1097248d0a956, // -0.84649, 0.5324 - 0xbfeb23cd470013b4, 0x3fe0f426bb2a8e7d, // -0.84812, 0.5298 - 0xbfeb3115a5f37bf4, 0x3fe0ded0b84bc4b5, // -0.84974, 0.5272 - 0xbfeb3e4d3ef55712, 0x3fe0c9704d5d898f, // -0.85136, 0.52459 - 0xbfeb4b7409de7925, 0x3fe0b405878f85ec, // -0.85296, 0.52198 - 0xbfeb5889fe921405, 0x3fe09e907417c5e1, // -0.85456, 0.51936 - 0xbfeb658f14fdbc47, 0x3fe089112032b08c, // -0.85615, 0.51673 - 0xbfeb728345196e3e, 0x3fe073879922ffed, // -0.85773, 0.5141 - 0xbfeb7f6686e792ea, 0x3fe05df3ec31b8b6, // -0.8593, 0.51147 - 0xbfeb8c38d27504e9, 0x3fe0485626ae221a, // -0.86087, 0.50883 - 0xbfeb98fa1fd9155e, 0x3fe032ae55edbd95, // -0.86242, 0.50619 - 0xbfeba5aa673590d2, 0x3fe01cfc874c3eb7, // -0.86397, 0.50354 - 0xbfebb249a0b6c40d, 0x3fe00740c82b82e0, // -0.86551, 0.50089 - 0xbfebbed7c49380ea, 0x3fdfe2f64be7120f, // -0.86705, 0.49823 - 0xbfebcb54cb0d2327, 0x3fdfb7575c24d2de, // -0.86857, 0.49557 - 0xbfebd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // -0.87009, 0.4929 - 0xbfebe41b611154c1, 0x3fdf5fdee656cda3, // -0.8716, 0.49023 - 0xbfebf064e15377dd, 0x3fdf3405963fd068, // -0.87309, 0.48755 - 0xbfebfc9d25a1b147, 0x3fdf081906bff7fd, // -0.87459, 0.48487 - 0xbfec08c426725549, 0x3fdedc1952ef78d5, // -0.87607, 0.48218 - 0xbfec14d9dc465e58, 0x3fdeb00695f25620, // -0.87755, 0.47949 - 0xbfec20de3fa971b0, 0x3fde83e0eaf85113, // -0.87901, 0.4768 - 0xbfec2cd14931e3f1, 0x3fde57a86d3cd824, // -0.88047, 0.4741 - 0xbfec38b2f180bdb1, 0x3fde2b5d3806f63b, // -0.88192, 0.4714 - 0xbfec44833141c004, 0x3fddfeff66a941de, // -0.88336, 0.46869 - 0xbfec5042012b6907, 0x3fddd28f1481cc58, // -0.8848, 0.46598 - 0xbfec5bef59fef85a, 0x3fdda60c5cfa10d8, // -0.88622, 0.46326 - 0xbfec678b3488739b, 0x3fdd79775b86e389, // -0.88764, 0.46054 - 0xbfec7315899eaad7, 0x3fdd4cd02ba8609c, // -0.88905, 0.45781 - 0xbfec7e8e52233cf3, 0x3fdd2016e8e9db5b, // -0.89045, 0.45508 - 0xbfec89f587029c13, 0x3fdcf34baee1cd21, // -0.89184, 0.45235 - 0xbfec954b213411f5, 0x3fdcc66e9931c45d, // -0.89322, 0.44961 - 0xbfeca08f19b9c449, 0x3fdc997fc3865388, // -0.8946, 0.44687 - 0xbfecabc169a0b901, 0x3fdc6c7f4997000a, // -0.89597, 0.44412 - 0xbfecb6e20a00da99, 0x3fdc3f6d47263129, // -0.89732, 0.44137 - 0xbfecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // -0.89867, 0.43862 - 0xbfecccee20c2de9f, 0x3fdbe51517ffc0d9, // -0.90002, 0.43586 - 0xbfecd7d9898b32f6, 0x3fdbb7cf2304bd01, // -0.90135, 0.43309 - 0xbfece2b32799a060, 0x3fdb8a7814fd5693, // -0.90267, 0.43033 - 0xbfeced7af43cc773, 0x3fdb5d1009e15cc0, // -0.90399, 0.42756 - 0xbfecf830e8ce467b, 0x3fdb2f971db31972, // -0.9053, 0.42478 - 0xbfed02d4feb2bd92, 0x3fdb020d6c7f4009, // -0.9066, 0.422 - 0xbfed0d672f59d2b9, 0x3fdad473125cdc08, // -0.90789, 0.41922 - 0xbfed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // -0.90917, 0.41643 - 0xbfed2255c6e5a4e1, 0x3fda790cd3dbf31a, // -0.91044, 0.41364 - 0xbfed2cb220e0ef9f, 0x3fda4b4127dea1e4, // -0.91171, 0.41084 - 0xbfed36fc7bcbfbdc, 0x3fda1d6543b50ac0, // -0.91296, 0.40804 - 0xbfed4134d14dc93a, 0x3fd9ef7943a8ed8a, // -0.91421, 0.40524 - 0xbfed4b5b1b187524, 0x3fd9c17d440df9f2, // -0.91545, 0.40243 - 0xbfed556f52e93eb1, 0x3fd993716141bdfe, // -0.91668, 0.39962 - 0xbfed5f7172888a7f, 0x3fd96555b7ab948f, // -0.9179, 0.39681 - 0xbfed696173c9e68b, 0x3fd9372a63bc93d7, // -0.91911, 0.39399 - 0xbfed733f508c0dff, 0x3fd908ef81ef7bd1, // -0.92032, 0.39117 - 0xbfed7d0b02b8ecf9, 0x3fd8daa52ec8a4af, // -0.92151, 0.38835 - 0xbfed86c48445a450, 0x3fd8ac4b86d5ed44, // -0.9227, 0.38552 - 0xbfed906bcf328d46, 0x3fd87de2a6aea963, // -0.92388, 0.38268 - 0xbfed9a00dd8b3d46, 0x3fd84f6aaaf3903f, // -0.92505, 0.37985 - 0xbfeda383a9668988, 0x3fd820e3b04eaac4, // -0.92621, 0.37701 - 0xbfedacf42ce68ab9, 0x3fd7f24dd37341e3, // -0.92736, 0.37416 - 0xbfedb6526238a09b, 0x3fd7c3a9311dcce7, // -0.92851, 0.37132 - 0xbfedbf9e4395759a, 0x3fd794f5e613dfae, // -0.92964, 0.36847 - 0xbfedc8d7cb410260, 0x3fd766340f2418f6, // -0.93077, 0.36561 - 0xbfedd1fef38a915a, 0x3fd73763c9261092, // -0.93188, 0.36276 - 0xbfeddb13b6ccc23d, 0x3fd7088530fa459e, // -0.93299, 0.3599 - 0xbfede4160f6d8d81, 0x3fd6d998638a0cb5, // -0.93409, 0.35703 - 0xbfeded05f7de47da, 0x3fd6aa9d7dc77e16, // -0.93518, 0.35416 - 0xbfedf5e36a9ba59c, 0x3fd67b949cad63ca, // -0.93627, 0.35129 - 0xbfedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // -0.93734, 0.34842 - 0xbfee0766d9280f54, 0x3fd61d595c88c203, // -0.9384, 0.34554 - 0xbfee100cca2980ac, 0x3fd5ee27379ea693, // -0.93946, 0.34266 - 0xbfee18a02fdc66d9, 0x3fd5bee78b9db3b6, // -0.94051, 0.33978 - 0xbfee212104f686e5, 0x3fd58f9a75ab1fdd, // -0.94154, 0.33689 - 0xbfee298f4439197a, 0x3fd5604012f467b4, // -0.94257, 0.334 - 0xbfee31eae870ce25, 0x3fd530d880af3c24, // -0.94359, 0.33111 - 0xbfee3a33ec75ce85, 0x3fd50163dc197047, // -0.9446, 0.32821 - 0xbfee426a4b2bc17e, 0x3fd4d1e24278e76a, // -0.94561, 0.32531 - 0xbfee4a8dff81ce5e, 0x3fd4a253d11b82f3, // -0.9466, 0.32241 - 0xbfee529f04729ffc, 0x3fd472b8a5571054, // -0.94759, 0.3195 - 0xbfee5a9d550467d3, 0x3fd44310dc8936f0, // -0.94856, 0.31659 - 0xbfee6288ec48e112, 0x3fd4135c94176602, // -0.94953, 0.31368 - 0xbfee6a61c55d53a7, 0x3fd3e39be96ec271, // -0.95049, 0.31077 - 0xbfee7227db6a9744, 0x3fd3b3cefa0414b7, // -0.95144, 0.30785 - 0xbfee79db29a5165a, 0x3fd383f5e353b6aa, // -0.95238, 0.30493 - 0xbfee817bab4cd10d, 0x3fd35410c2e18152, // -0.95331, 0.30201 - 0xbfee89095bad6025, 0x3fd3241fb638baaf, // -0.95423, 0.29908 - 0xbfee9084361df7f3, 0x3fd2f422daec0386, // -0.95514, 0.29615 - 0xbfee97ec36016b30, 0x3fd2c41a4e954520, // -0.95605, 0.29322 - 0xbfee9f4156c62dda, 0x3fd294062ed59f05, // -0.95694, 0.29028 - 0xbfeea68393e65800, 0x3fd263e6995554ba, // -0.95783, 0.28735 - 0xbfeeadb2e8e7a88e, 0x3fd233bbabc3bb72, // -0.9587, 0.28441 - 0xbfeeb4cf515b8811, 0x3fd2038583d727bd, // -0.95957, 0.28146 - 0xbfeebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // -0.96043, 0.27852 - 0xbfeec2cf4b1af6b2, 0x3fd1a2f7fbe8f243, // -0.96128, 0.27557 - 0xbfeec9b2d3c3bf84, 0x3fd172a0d7765177, // -0.96212, 0.27262 - 0xbfeed0835e999009, 0x3fd1423eefc69378, // -0.96295, 0.26967 - 0xbfeed740e7684963, 0x3fd111d262b1f677, // -0.96378, 0.26671 - 0xbfeeddeb6a078651, 0x3fd0e15b4e1749cd, // -0.96459, 0.26375 - 0xbfeee482e25a9dbc, 0x3fd0b0d9cfdbdb90, // -0.96539, 0.26079 - 0xbfeeeb074c50a544, 0x3fd0804e05eb661e, // -0.96619, 0.25783 - 0xbfeef178a3e473c2, 0x3fd04fb80e37fdae, // -0.96698, 0.25487 - 0xbfeef7d6e51ca3c0, 0x3fd01f1806b9fdd2, // -0.96775, 0.2519 - 0xbfeefe220c0b95ec, 0x3fcfdcdc1adfedf8, // -0.96852, 0.24893 - 0xbfef045a14cf738c, 0x3fcf7b7480bd3801, // -0.96928, 0.24596 - 0xbfef0a7efb9230d7, 0x3fcf19f97b215f1a, // -0.97003, 0.24298 - 0xbfef1090bc898f5f, 0x3fceb86b462de348, // -0.97077, 0.24 - 0xbfef168f53f7205d, 0x3fce56ca1e101a1b, // -0.9715, 0.23702 - 0xbfef1c7abe284708, 0x3fcdf5163f01099a, // -0.97223, 0.23404 - 0xbfef2252f7763ada, 0x3fcd934fe5454311, // -0.97294, 0.23106 - 0xbfef2817fc4609ce, 0x3fcd31774d2cbdee, // -0.97364, 0.22807 - 0xbfef2dc9c9089a9d, 0x3fcccf8cb312b286, // -0.97434, 0.22508 - 0xbfef33685a3aaef0, 0x3fcc6d90535d74dc, // -0.97503, 0.22209 - 0xbfef38f3ac64e589, 0x3fcc0b826a7e4f63, // -0.9757, 0.2191 - 0xbfef3e6bbc1bbc65, 0x3fcba96334f15dad, // -0.97637, 0.21611 - 0xbfef43d085ff92dd, 0x3fcb4732ef3d6722, // -0.97703, 0.21311 - 0xbfef492206bcabb4, 0x3fcae4f1d5f3b9ab, // -0.97768, 0.21011 - 0xbfef4e603b0b2f2d, 0x3fca82a025b00451, // -0.97832, 0.20711 - 0xbfef538b1faf2d07, 0x3fca203e1b1831da, // -0.97895, 0.20411 - 0xbfef58a2b1789e84, 0x3fc9bdcbf2dc4366, // -0.97957, 0.2011 - 0xbfef5da6ed43685d, 0x3fc95b49e9b62af9, // -0.98018, 0.1981 - 0xbfef6297cff75cb0, 0x3fc8f8b83c69a60a, // -0.98079, 0.19509 - 0xbfef677556883cee, 0x3fc8961727c41804, // -0.98138, 0.19208 - 0xbfef6c3f7df5bbb7, 0x3fc83366e89c64c5, // -0.98196, 0.18907 - 0xbfef70f6434b7eb7, 0x3fc7d0a7bbd2cb1b, // -0.98254, 0.18606 - 0xbfef7599a3a12077, 0x3fc76dd9de50bf31, // -0.98311, 0.18304 - 0xbfef7a299c1a322a, 0x3fc70afd8d08c4ff, // -0.98366, 0.18002 - 0xbfef7ea629e63d6e, 0x3fc6a81304f64ab2, // -0.98421, 0.177 - 0xbfef830f4a40c60c, 0x3fc6451a831d830d, // -0.98475, 0.17398 - 0xbfef8764fa714ba9, 0x3fc5e214448b3fc6, // -0.98528, 0.17096 - 0xbfef8ba737cb4b78, 0x3fc57f008654cbde, // -0.9858, 0.16794 - 0xbfef8fd5ffae41db, 0x3fc51bdf8597c5f2, // -0.98631, 0.16491 - 0xbfef93f14f85ac08, 0x3fc4b8b17f79fa88, // -0.98681, 0.16189 - 0xbfef97f924c9099b, 0x3fc45576b1293e5a, // -0.9873, 0.15886 - 0xbfef9bed7cfbde29, 0x3fc3f22f57db4893, // -0.98778, 0.15583 - 0xbfef9fce55adb2c8, 0x3fc38edbb0cd8d14, // -0.98826, 0.1528 - 0xbfefa39bac7a1791, 0x3fc32b7bf94516a7, // -0.98872, 0.14976 - 0xbfefa7557f08a517, 0x3fc2c8106e8e613a, // -0.98918, 0.14673 - 0xbfefaafbcb0cfddc, 0x3fc264994dfd340a, // -0.98962, 0.1437 - 0xbfefae8e8e46cfbb, 0x3fc20116d4ec7bce, // -0.99006, 0.14066 - 0xbfefb20dc681d54d, 0x3fc19d8940be24e7, // -0.99049, 0.13762 - 0xbfefb5797195d741, 0x3fc139f0cedaf576, // -0.9909, 0.13458 - 0xbfefb8d18d66adb7, 0x3fc0d64dbcb26786, // -0.99131, 0.13154 - 0xbfefbc1617e44186, 0x3fc072a047ba831d, // -0.99171, 0.1285 - 0xbfefbf470f0a8d88, 0x3fc00ee8ad6fb85b, // -0.9921, 0.12545 - 0xbfefc26470e19fd3, 0x3fbf564e56a9730e, // -0.99248, 0.12241 - 0xbfefc56e3b7d9af6, 0x3fbe8eb7fde4aa3e, // -0.99285, 0.11937 - 0xbfefc8646cfeb721, 0x3fbdc70ecbae9fc8, // -0.99321, 0.11632 - 0xbfefcb4703914354, 0x3fbcff533b307dc1, // -0.99356, 0.11327 - 0xbfefce15fd6da67b, 0x3fbc3785c79ec2d5, // -0.99391, 0.11022 - 0xbfefd0d158d86087, 0x3fbb6fa6ec38f64c, // -0.99424, 0.10717 - 0xbfefd37914220b84, 0x3fbaa7b724495c04, // -0.99456, 0.10412 - 0xbfefd60d2da75c9e, 0x3fb9dfb6eb24a85c, // -0.99488, 0.10107 - 0xbfefd88da3d12526, 0x3fb917a6bc29b42c, // -0.99518, 0.098017 - 0xbfefdafa7514538c, 0x3fb84f8712c130a0, // -0.99548, 0.094963 - 0xbfefdd539ff1f456, 0x3fb787586a5d5b21, // -0.99577, 0.091909 - 0xbfefdf9922f73307, 0x3fb6bf1b3e79b129, // -0.99604, 0.088854 - 0xbfefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // -0.99631, 0.085797 - 0xbfefe3e92be9d886, 0x3fb52e774a4d4d0a, // -0.99657, 0.08274 - 0xbfefe5f3af2e3940, 0x3fb4661179272096, // -0.99682, 0.079682 - 0xbfefe7ea85482d60, 0x3fb39d9f12c5a299, // -0.99706, 0.076624 - 0xbfefe9cdad01883a, 0x3fb2d52092ce19f6, // -0.99729, 0.073565 - 0xbfefeb9d2530410f, 0x3fb20c9674ed444c, // -0.99751, 0.070505 - 0xbfefed58ecb673c4, 0x3fb1440134d709b2, // -0.99772, 0.067444 - 0xbfefef0102826191, 0x3fb07b614e463064, // -0.99793, 0.064383 - 0xbfeff095658e71ad, 0x3faf656e79f820e0, // -0.99812, 0.061321 - 0xbfeff21614e131ed, 0x3fadd406f9808ec8, // -0.9983, 0.058258 - 0xbfeff3830f8d575c, 0x3fac428d12c0d7e3, // -0.99848, 0.055195 - 0xbfeff4dc54b1bed3, 0x3faab101bd5f8317, // -0.99864, 0.052132 - 0xbfeff621e3796d7e, 0x3fa91f65f10dd814, // -0.9988, 0.049068 - 0xbfeff753bb1b9164, 0x3fa78dbaa5874685, // -0.99894, 0.046003 - 0xbfeff871dadb81df, 0x3fa5fc00d290cd43, // -0.99908, 0.042938 - 0xbfeff97c4208c014, 0x3fa46a396ff86179, // -0.9992, 0.039873 - 0xbfeffa72effef75d, 0x3fa2d865759455cd, // -0.99932, 0.036807 - 0xbfeffb55e425fdae, 0x3fa14685db42c17e, // -0.99943, 0.033741 - 0xbfeffc251df1d3f8, 0x3f9f693731d1cf01, // -0.99953, 0.030675 - 0xbfeffce09ce2a679, 0x3f9c454f4ce53b1c, // -0.99962, 0.027608 - 0xbfeffd886084cd0d, 0x3f992155f7a3667e, // -0.9997, 0.024541 - 0xbfeffe1c6870cb77, 0x3f95fd4d21fab226, // -0.99977, 0.021474 - 0xbfeffe9cb44b51a1, 0x3f92d936bbe30efd, // -0.99983, 0.018407 - 0xbfefff0943c53bd1, 0x3f8f6a296ab997ca, // -0.99988, 0.015339 - 0xbfefff62169b92db, 0x3f8921d1fcdec784, // -0.99992, 0.012272 - 0xbfefffa72c978c4f, 0x3f82d96b0e509703, // -0.99996, 0.0092038 - 0xbfefffd8858e8a92, 0x3f7921f0fe670071, // -0.99998, 0.0061359 - 0xbfeffff621621d02, 0x3f6921f8becca4ba, // -1, 0.003068 - 0xbff0000000000000, 0x0000000000000000, // -1, 0 - 0xbfeffff621621d02, 0xbf6921f8becca4ba, // -1, -0.003068 - 0xbfefffd8858e8a92, 0xbf7921f0fe670071, // -0.99998,-0.0061359 - 0xbfefffa72c978c4f, 0xbf82d96b0e509703, // -0.99996,-0.0092038 - 0xbfefff62169b92db, 0xbf8921d1fcdec784, // -0.99992, -0.012272 - 0xbfefff0943c53bd1, 0xbf8f6a296ab997ca, // -0.99988, -0.015339 - 0xbfeffe9cb44b51a1, 0xbf92d936bbe30efd, // -0.99983, -0.018407 - 0xbfeffe1c6870cb77, 0xbf95fd4d21fab226, // -0.99977, -0.021474 - 0xbfeffd886084cd0d, 0xbf992155f7a3667e, // -0.9997, -0.024541 - 0xbfeffce09ce2a679, 0xbf9c454f4ce53b1c, // -0.99962, -0.027608 - 0xbfeffc251df1d3f8, 0xbf9f693731d1cf01, // -0.99953, -0.030675 - 0xbfeffb55e425fdae, 0xbfa14685db42c17e, // -0.99943, -0.033741 - 0xbfeffa72effef75d, 0xbfa2d865759455cd, // -0.99932, -0.036807 - 0xbfeff97c4208c014, 0xbfa46a396ff86179, // -0.9992, -0.039873 - 0xbfeff871dadb81df, 0xbfa5fc00d290cd43, // -0.99908, -0.042938 - 0xbfeff753bb1b9164, 0xbfa78dbaa5874685, // -0.99894, -0.046003 - 0xbfeff621e3796d7e, 0xbfa91f65f10dd814, // -0.9988, -0.049068 - 0xbfeff4dc54b1bed3, 0xbfaab101bd5f8317, // -0.99864, -0.052132 - 0xbfeff3830f8d575c, 0xbfac428d12c0d7e3, // -0.99848, -0.055195 - 0xbfeff21614e131ed, 0xbfadd406f9808ec8, // -0.9983, -0.058258 - 0xbfeff095658e71ad, 0xbfaf656e79f820e0, // -0.99812, -0.061321 - 0xbfefef0102826191, 0xbfb07b614e463064, // -0.99793, -0.064383 - 0xbfefed58ecb673c4, 0xbfb1440134d709b2, // -0.99772, -0.067444 - 0xbfefeb9d2530410f, 0xbfb20c9674ed444c, // -0.99751, -0.070505 - 0xbfefe9cdad01883a, 0xbfb2d52092ce19f6, // -0.99729, -0.073565 - 0xbfefe7ea85482d60, 0xbfb39d9f12c5a299, // -0.99706, -0.076624 - 0xbfefe5f3af2e3940, 0xbfb4661179272096, // -0.99682, -0.079682 - 0xbfefe3e92be9d886, 0xbfb52e774a4d4d0a, // -0.99657, -0.08274 - 0xbfefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // -0.99631, -0.085797 - 0xbfefdf9922f73307, 0xbfb6bf1b3e79b129, // -0.99604, -0.088854 - 0xbfefdd539ff1f456, 0xbfb787586a5d5b21, // -0.99577, -0.091909 - 0xbfefdafa7514538c, 0xbfb84f8712c130a0, // -0.99548, -0.094963 - 0xbfefd88da3d12526, 0xbfb917a6bc29b42c, // -0.99518, -0.098017 - 0xbfefd60d2da75c9e, 0xbfb9dfb6eb24a85c, // -0.99488, -0.10107 - 0xbfefd37914220b84, 0xbfbaa7b724495c04, // -0.99456, -0.10412 - 0xbfefd0d158d86087, 0xbfbb6fa6ec38f64c, // -0.99424, -0.10717 - 0xbfefce15fd6da67b, 0xbfbc3785c79ec2d5, // -0.99391, -0.11022 - 0xbfefcb4703914354, 0xbfbcff533b307dc1, // -0.99356, -0.11327 - 0xbfefc8646cfeb721, 0xbfbdc70ecbae9fc8, // -0.99321, -0.11632 - 0xbfefc56e3b7d9af6, 0xbfbe8eb7fde4aa3e, // -0.99285, -0.11937 - 0xbfefc26470e19fd3, 0xbfbf564e56a9730e, // -0.99248, -0.12241 - 0xbfefbf470f0a8d88, 0xbfc00ee8ad6fb85b, // -0.9921, -0.12545 - 0xbfefbc1617e44186, 0xbfc072a047ba831d, // -0.99171, -0.1285 - 0xbfefb8d18d66adb7, 0xbfc0d64dbcb26786, // -0.99131, -0.13154 - 0xbfefb5797195d741, 0xbfc139f0cedaf576, // -0.9909, -0.13458 - 0xbfefb20dc681d54d, 0xbfc19d8940be24e7, // -0.99049, -0.13762 - 0xbfefae8e8e46cfbb, 0xbfc20116d4ec7bce, // -0.99006, -0.14066 - 0xbfefaafbcb0cfddc, 0xbfc264994dfd340a, // -0.98962, -0.1437 - 0xbfefa7557f08a517, 0xbfc2c8106e8e613a, // -0.98918, -0.14673 - 0xbfefa39bac7a1791, 0xbfc32b7bf94516a7, // -0.98872, -0.14976 - 0xbfef9fce55adb2c8, 0xbfc38edbb0cd8d14, // -0.98826, -0.1528 - 0xbfef9bed7cfbde29, 0xbfc3f22f57db4893, // -0.98778, -0.15583 - 0xbfef97f924c9099b, 0xbfc45576b1293e5a, // -0.9873, -0.15886 - 0xbfef93f14f85ac08, 0xbfc4b8b17f79fa88, // -0.98681, -0.16189 - 0xbfef8fd5ffae41db, 0xbfc51bdf8597c5f2, // -0.98631, -0.16491 - 0xbfef8ba737cb4b78, 0xbfc57f008654cbde, // -0.9858, -0.16794 - 0xbfef8764fa714ba9, 0xbfc5e214448b3fc6, // -0.98528, -0.17096 - 0xbfef830f4a40c60c, 0xbfc6451a831d830d, // -0.98475, -0.17398 - 0xbfef7ea629e63d6e, 0xbfc6a81304f64ab2, // -0.98421, -0.177 - 0xbfef7a299c1a322a, 0xbfc70afd8d08c4ff, // -0.98366, -0.18002 - 0xbfef7599a3a12077, 0xbfc76dd9de50bf31, // -0.98311, -0.18304 - 0xbfef70f6434b7eb7, 0xbfc7d0a7bbd2cb1b, // -0.98254, -0.18606 - 0xbfef6c3f7df5bbb7, 0xbfc83366e89c64c5, // -0.98196, -0.18907 - 0xbfef677556883cee, 0xbfc8961727c41804, // -0.98138, -0.19208 - 0xbfef6297cff75cb0, 0xbfc8f8b83c69a60a, // -0.98079, -0.19509 - 0xbfef5da6ed43685d, 0xbfc95b49e9b62af9, // -0.98018, -0.1981 - 0xbfef58a2b1789e84, 0xbfc9bdcbf2dc4366, // -0.97957, -0.2011 - 0xbfef538b1faf2d07, 0xbfca203e1b1831da, // -0.97895, -0.20411 - 0xbfef4e603b0b2f2d, 0xbfca82a025b00451, // -0.97832, -0.20711 - 0xbfef492206bcabb4, 0xbfcae4f1d5f3b9ab, // -0.97768, -0.21011 - 0xbfef43d085ff92dd, 0xbfcb4732ef3d6722, // -0.97703, -0.21311 - 0xbfef3e6bbc1bbc65, 0xbfcba96334f15dad, // -0.97637, -0.21611 - 0xbfef38f3ac64e589, 0xbfcc0b826a7e4f63, // -0.9757, -0.2191 - 0xbfef33685a3aaef0, 0xbfcc6d90535d74dc, // -0.97503, -0.22209 - 0xbfef2dc9c9089a9d, 0xbfcccf8cb312b286, // -0.97434, -0.22508 - 0xbfef2817fc4609ce, 0xbfcd31774d2cbdee, // -0.97364, -0.22807 - 0xbfef2252f7763ada, 0xbfcd934fe5454311, // -0.97294, -0.23106 - 0xbfef1c7abe284708, 0xbfcdf5163f01099a, // -0.97223, -0.23404 - 0xbfef168f53f7205d, 0xbfce56ca1e101a1b, // -0.9715, -0.23702 - 0xbfef1090bc898f5f, 0xbfceb86b462de348, // -0.97077, -0.24 - 0xbfef0a7efb9230d7, 0xbfcf19f97b215f1a, // -0.97003, -0.24298 - 0xbfef045a14cf738c, 0xbfcf7b7480bd3801, // -0.96928, -0.24596 - 0xbfeefe220c0b95ec, 0xbfcfdcdc1adfedf8, // -0.96852, -0.24893 - 0xbfeef7d6e51ca3c0, 0xbfd01f1806b9fdd2, // -0.96775, -0.2519 - 0xbfeef178a3e473c2, 0xbfd04fb80e37fdae, // -0.96698, -0.25487 - 0xbfeeeb074c50a544, 0xbfd0804e05eb661e, // -0.96619, -0.25783 - 0xbfeee482e25a9dbc, 0xbfd0b0d9cfdbdb90, // -0.96539, -0.26079 - 0xbfeeddeb6a078651, 0xbfd0e15b4e1749cd, // -0.96459, -0.26375 - 0xbfeed740e7684963, 0xbfd111d262b1f677, // -0.96378, -0.26671 - 0xbfeed0835e999009, 0xbfd1423eefc69378, // -0.96295, -0.26967 - 0xbfeec9b2d3c3bf84, 0xbfd172a0d7765177, // -0.96212, -0.27262 - 0xbfeec2cf4b1af6b2, 0xbfd1a2f7fbe8f243, // -0.96128, -0.27557 - 0xbfeebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // -0.96043, -0.27852 - 0xbfeeb4cf515b8811, 0xbfd2038583d727bd, // -0.95957, -0.28146 - 0xbfeeadb2e8e7a88e, 0xbfd233bbabc3bb72, // -0.9587, -0.28441 - 0xbfeea68393e65800, 0xbfd263e6995554ba, // -0.95783, -0.28735 - 0xbfee9f4156c62dda, 0xbfd294062ed59f05, // -0.95694, -0.29028 - 0xbfee97ec36016b30, 0xbfd2c41a4e954520, // -0.95605, -0.29322 - 0xbfee9084361df7f3, 0xbfd2f422daec0386, // -0.95514, -0.29615 - 0xbfee89095bad6025, 0xbfd3241fb638baaf, // -0.95423, -0.29908 - 0xbfee817bab4cd10d, 0xbfd35410c2e18152, // -0.95331, -0.30201 - 0xbfee79db29a5165a, 0xbfd383f5e353b6aa, // -0.95238, -0.30493 - 0xbfee7227db6a9744, 0xbfd3b3cefa0414b7, // -0.95144, -0.30785 - 0xbfee6a61c55d53a7, 0xbfd3e39be96ec271, // -0.95049, -0.31077 - 0xbfee6288ec48e112, 0xbfd4135c94176602, // -0.94953, -0.31368 - 0xbfee5a9d550467d3, 0xbfd44310dc8936f0, // -0.94856, -0.31659 - 0xbfee529f04729ffc, 0xbfd472b8a5571054, // -0.94759, -0.3195 - 0xbfee4a8dff81ce5e, 0xbfd4a253d11b82f3, // -0.9466, -0.32241 - 0xbfee426a4b2bc17e, 0xbfd4d1e24278e76a, // -0.94561, -0.32531 - 0xbfee3a33ec75ce85, 0xbfd50163dc197047, // -0.9446, -0.32821 - 0xbfee31eae870ce25, 0xbfd530d880af3c24, // -0.94359, -0.33111 - 0xbfee298f4439197a, 0xbfd5604012f467b4, // -0.94257, -0.334 - 0xbfee212104f686e5, 0xbfd58f9a75ab1fdd, // -0.94154, -0.33689 - 0xbfee18a02fdc66d9, 0xbfd5bee78b9db3b6, // -0.94051, -0.33978 - 0xbfee100cca2980ac, 0xbfd5ee27379ea693, // -0.93946, -0.34266 - 0xbfee0766d9280f54, 0xbfd61d595c88c203, // -0.9384, -0.34554 - 0xbfedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // -0.93734, -0.34842 - 0xbfedf5e36a9ba59c, 0xbfd67b949cad63ca, // -0.93627, -0.35129 - 0xbfeded05f7de47da, 0xbfd6aa9d7dc77e16, // -0.93518, -0.35416 - 0xbfede4160f6d8d81, 0xbfd6d998638a0cb5, // -0.93409, -0.35703 - 0xbfeddb13b6ccc23d, 0xbfd7088530fa459e, // -0.93299, -0.3599 - 0xbfedd1fef38a915a, 0xbfd73763c9261092, // -0.93188, -0.36276 - 0xbfedc8d7cb410260, 0xbfd766340f2418f6, // -0.93077, -0.36561 - 0xbfedbf9e4395759a, 0xbfd794f5e613dfae, // -0.92964, -0.36847 - 0xbfedb6526238a09b, 0xbfd7c3a9311dcce7, // -0.92851, -0.37132 - 0xbfedacf42ce68ab9, 0xbfd7f24dd37341e3, // -0.92736, -0.37416 - 0xbfeda383a9668988, 0xbfd820e3b04eaac4, // -0.92621, -0.37701 - 0xbfed9a00dd8b3d46, 0xbfd84f6aaaf3903f, // -0.92505, -0.37985 - 0xbfed906bcf328d46, 0xbfd87de2a6aea963, // -0.92388, -0.38268 - 0xbfed86c48445a450, 0xbfd8ac4b86d5ed44, // -0.9227, -0.38552 - 0xbfed7d0b02b8ecf9, 0xbfd8daa52ec8a4af, // -0.92151, -0.38835 - 0xbfed733f508c0dff, 0xbfd908ef81ef7bd1, // -0.92032, -0.39117 - 0xbfed696173c9e68b, 0xbfd9372a63bc93d7, // -0.91911, -0.39399 - 0xbfed5f7172888a7f, 0xbfd96555b7ab948f, // -0.9179, -0.39681 - 0xbfed556f52e93eb1, 0xbfd993716141bdfe, // -0.91668, -0.39962 - 0xbfed4b5b1b187524, 0xbfd9c17d440df9f2, // -0.91545, -0.40243 - 0xbfed4134d14dc93a, 0xbfd9ef7943a8ed8a, // -0.91421, -0.40524 - 0xbfed36fc7bcbfbdc, 0xbfda1d6543b50ac0, // -0.91296, -0.40804 - 0xbfed2cb220e0ef9f, 0xbfda4b4127dea1e4, // -0.91171, -0.41084 - 0xbfed2255c6e5a4e1, 0xbfda790cd3dbf31a, // -0.91044, -0.41364 - 0xbfed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // -0.90917, -0.41643 - 0xbfed0d672f59d2b9, 0xbfdad473125cdc08, // -0.90789, -0.41922 - 0xbfed02d4feb2bd92, 0xbfdb020d6c7f4009, // -0.9066, -0.422 - 0xbfecf830e8ce467b, 0xbfdb2f971db31972, // -0.9053, -0.42478 - 0xbfeced7af43cc773, 0xbfdb5d1009e15cc0, // -0.90399, -0.42756 - 0xbfece2b32799a060, 0xbfdb8a7814fd5693, // -0.90267, -0.43033 - 0xbfecd7d9898b32f6, 0xbfdbb7cf2304bd01, // -0.90135, -0.43309 - 0xbfecccee20c2de9f, 0xbfdbe51517ffc0d9, // -0.90002, -0.43586 - 0xbfecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // -0.89867, -0.43862 - 0xbfecb6e20a00da99, 0xbfdc3f6d47263129, // -0.89732, -0.44137 - 0xbfecabc169a0b901, 0xbfdc6c7f4997000a, // -0.89597, -0.44412 - 0xbfeca08f19b9c449, 0xbfdc997fc3865388, // -0.8946, -0.44687 - 0xbfec954b213411f5, 0xbfdcc66e9931c45d, // -0.89322, -0.44961 - 0xbfec89f587029c13, 0xbfdcf34baee1cd21, // -0.89184, -0.45235 - 0xbfec7e8e52233cf3, 0xbfdd2016e8e9db5b, // -0.89045, -0.45508 - 0xbfec7315899eaad7, 0xbfdd4cd02ba8609c, // -0.88905, -0.45781 - 0xbfec678b3488739b, 0xbfdd79775b86e389, // -0.88764, -0.46054 - 0xbfec5bef59fef85a, 0xbfdda60c5cfa10d8, // -0.88622, -0.46326 - 0xbfec5042012b6907, 0xbfddd28f1481cc58, // -0.8848, -0.46598 - 0xbfec44833141c004, 0xbfddfeff66a941de, // -0.88336, -0.46869 - 0xbfec38b2f180bdb1, 0xbfde2b5d3806f63b, // -0.88192, -0.4714 - 0xbfec2cd14931e3f1, 0xbfde57a86d3cd824, // -0.88047, -0.4741 - 0xbfec20de3fa971b0, 0xbfde83e0eaf85113, // -0.87901, -0.4768 - 0xbfec14d9dc465e58, 0xbfdeb00695f25620, // -0.87755, -0.47949 - 0xbfec08c426725549, 0xbfdedc1952ef78d5, // -0.87607, -0.48218 - 0xbfebfc9d25a1b147, 0xbfdf081906bff7fd, // -0.87459, -0.48487 - 0xbfebf064e15377dd, 0xbfdf3405963fd068, // -0.87309, -0.48755 - 0xbfebe41b611154c1, 0xbfdf5fdee656cda3, // -0.8716, -0.49023 - 0xbfebd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // -0.87009, -0.4929 - 0xbfebcb54cb0d2327, 0xbfdfb7575c24d2de, // -0.86857, -0.49557 - 0xbfebbed7c49380ea, 0xbfdfe2f64be7120f, // -0.86705, -0.49823 - 0xbfebb249a0b6c40d, 0xbfe00740c82b82e0, // -0.86551, -0.50089 - 0xbfeba5aa673590d2, 0xbfe01cfc874c3eb7, // -0.86397, -0.50354 - 0xbfeb98fa1fd9155e, 0xbfe032ae55edbd95, // -0.86242, -0.50619 - 0xbfeb8c38d27504e9, 0xbfe0485626ae221a, // -0.86087, -0.50883 - 0xbfeb7f6686e792ea, 0xbfe05df3ec31b8b6, // -0.8593, -0.51147 - 0xbfeb728345196e3e, 0xbfe073879922ffed, // -0.85773, -0.5141 - 0xbfeb658f14fdbc47, 0xbfe089112032b08c, // -0.85615, -0.51673 - 0xbfeb5889fe921405, 0xbfe09e907417c5e1, // -0.85456, -0.51936 - 0xbfeb4b7409de7925, 0xbfe0b405878f85ec, // -0.85296, -0.52198 - 0xbfeb3e4d3ef55712, 0xbfe0c9704d5d898f, // -0.85136, -0.52459 - 0xbfeb3115a5f37bf4, 0xbfe0ded0b84bc4b5, // -0.84974, -0.5272 - 0xbfeb23cd470013b4, 0xbfe0f426bb2a8e7d, // -0.84812, -0.5298 - 0xbfeb16742a4ca2f5, 0xbfe1097248d0a956, // -0.84649, -0.5324 - 0xbfeb090a58150200, 0xbfe11eb3541b4b22, // -0.84485, -0.535 - 0xbfeafb8fd89f57b6, 0xbfe133e9cfee254e, // -0.84321, -0.53759 - 0xbfeaee04b43c1474, 0xbfe14915af336ceb, // -0.84155, -0.54017 - 0xbfeae068f345ecef, 0xbfe15e36e4dbe2bc, // -0.83989, -0.54275 - 0xbfead2bc9e21d511, 0xbfe1734d63dedb49, // -0.83822, -0.54532 - 0xbfeac4ffbd3efac8, 0xbfe188591f3a46e5, // -0.83655, -0.54789 - 0xbfeab7325916c0d4, 0xbfe19d5a09f2b9b8, // -0.83486, -0.55046 - 0xbfeaa9547a2cb98e, 0xbfe1b250171373be, // -0.83317, -0.55302 - 0xbfea9b66290ea1a3, 0xbfe1c73b39ae68c8, // -0.83147, -0.55557 - 0xbfea8d676e545ad2, 0xbfe1dc1b64dc4872, // -0.82976, -0.55812 - 0xbfea7f58529fe69d, 0xbfe1f0f08bbc861b, // -0.82805, -0.56066 - 0xbfea7138de9d60f5, 0xbfe205baa17560d6, // -0.82632, -0.5632 - 0xbfea63091b02fae2, 0xbfe21a799933eb58, // -0.82459, -0.56573 - 0xbfea54c91090f524, 0xbfe22f2d662c13e1, // -0.82285, -0.56826 - 0xbfea4678c8119ac8, 0xbfe243d5fb98ac1f, // -0.8211, -0.57078 - 0xbfea38184a593bc6, 0xbfe258734cbb7110, // -0.81935, -0.5733 - 0xbfea29a7a0462782, 0xbfe26d054cdd12df, // -0.81758, -0.57581 - 0xbfea1b26d2c0a75e, 0xbfe2818bef4d3cba, // -0.81581, -0.57831 - 0xbfea0c95eabaf937, 0xbfe2960727629ca8, // -0.81404, -0.58081 - 0xbfe9fdf4f13149de, 0xbfe2aa76e87aeb58, // -0.81225, -0.58331 - 0xbfe9ef43ef29af94, 0xbfe2bedb25faf3ea, // -0.81046, -0.5858 - 0xbfe9e082edb42472, 0xbfe2d333d34e9bb7, // -0.80866, -0.58828 - 0xbfe9d1b1f5ea80d6, 0xbfe2e780e3e8ea16, // -0.80685, -0.59076 - 0xbfe9c2d110f075c3, 0xbfe2fbc24b441015, // -0.80503, -0.59323 - 0xbfe9b3e047f38741, 0xbfe30ff7fce17035, // -0.80321, -0.5957 - 0xbfe9a4dfa42b06b2, 0xbfe32421ec49a620, // -0.80138, -0.59816 - 0xbfe995cf2ed80d22, 0xbfe338400d0c8e57, // -0.79954, -0.60062 - 0xbfe986aef1457594, 0xbfe34c5252c14de1, // -0.79769, -0.60307 - 0xbfe9777ef4c7d742, 0xbfe36058b10659f3, // -0.79584, -0.60551 - 0xbfe9683f42bd7fe1, 0xbfe374531b817f8d, // -0.79398, -0.60795 - 0xbfe958efe48e6dd7, 0xbfe3884185dfeb22, // -0.79211, -0.61038 - 0xbfe94990e3ac4a6c, 0xbfe39c23e3d63029, // -0.79023, -0.61281 - 0xbfe93a22499263fc, 0xbfe3affa292050b9, // -0.78835, -0.61523 - 0xbfe92aa41fc5a815, 0xbfe3c3c44981c517, // -0.78646, -0.61765 - 0xbfe91b166fd49da2, 0xbfe3d78238c58343, // -0.78456, -0.62006 - 0xbfe90b7943575efe, 0xbfe3eb33eabe0680, // -0.78265, -0.62246 - 0xbfe8fbcca3ef940d, 0xbfe3fed9534556d4, // -0.78074, -0.62486 - 0xbfe8ec109b486c49, 0xbfe41272663d108c, // -0.77882, -0.62725 - 0xbfe8dc45331698cc, 0xbfe425ff178e6bb1, // -0.77689, -0.62964 - 0xbfe8cc6a75184655, 0xbfe4397f5b2a4380, // -0.77495, -0.63202 - 0xbfe8bc806b151741, 0xbfe44cf325091dd6, // -0.77301, -0.63439 - 0xbfe8ac871ede1d88, 0xbfe4605a692b32a2, // -0.77106, -0.63676 - 0xbfe89c7e9a4dd4ab, 0xbfe473b51b987347, // -0.7691, -0.63912 - 0xbfe88c66e7481ba1, 0xbfe48703306091fe, // -0.76714, -0.64148 - 0xbfe87c400fba2ebf, 0xbfe49a449b9b0938, // -0.76517, -0.64383 - 0xbfe86c0a1d9aa195, 0xbfe4ad79516722f0, // -0.76319, -0.64618 - 0xbfe85bc51ae958cc, 0xbfe4c0a145ec0004, // -0.7612, -0.64851 - 0xbfe84b7111af83f9, 0xbfe4d3bc6d589f80, // -0.75921, -0.65085 - 0xbfe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // -0.75721, -0.65317 - 0xbfe82a9c13f545ff, 0xbfe4f9cc25cca486, // -0.7552, -0.65549 - 0xbfe81a1b33b57acc, 0xbfe50cc09f59a09b, // -0.75319, -0.65781 - 0xbfe8098b756e52fa, 0xbfe51fa81cd99aa6, // -0.75117, -0.66011 - 0xbfe7f8ece3571771, 0xbfe5328292a35596, // -0.74914, -0.66242 - 0xbfe7e83f87b03686, 0xbfe5454ff5159dfb, // -0.7471, -0.66471 - 0xbfe7d7836cc33db2, 0xbfe5581038975137, // -0.74506, -0.667 - 0xbfe7c6b89ce2d333, 0xbfe56ac35197649e, // -0.74301, -0.66928 - 0xbfe7b5df226aafb0, 0xbfe57d69348cec9f, // -0.74095, -0.67156 - 0xbfe7a4f707bf97d2, 0xbfe59001d5f723df, // -0.73889, -0.67383 - 0xbfe79400574f55e4, 0xbfe5a28d2a5d7250, // -0.73682, -0.67609 - 0xbfe782fb1b90b35b, 0xbfe5b50b264f7448, // -0.73474, -0.67835 - 0xbfe771e75f037261, 0xbfe5c77bbe65018c, // -0.73265, -0.6806 - 0xbfe760c52c304764, 0xbfe5d9dee73e345c, // -0.73056, -0.68285 - 0xbfe74f948da8d28d, 0xbfe5ec3495837074, // -0.72846, -0.68508 - 0xbfe73e558e079942, 0xbfe5fe7cbde56a0f, // -0.72636, -0.68732 - 0xbfe72d0837efff97, 0xbfe610b7551d2cde, // -0.72425, -0.68954 - 0xbfe71bac960e41bf, 0xbfe622e44fec22ff, // -0.72213, -0.69176 - 0xbfe70a42b3176d7a, 0xbfe63503a31c1be8, // -0.72, -0.69397 - 0xbfe6f8ca99c95b75, 0xbfe64715437f535b, // -0.71787, -0.69618 - 0xbfe6e74454eaa8ae, 0xbfe6591925f0783e, // -0.71573, -0.69838 - 0xbfe6d5afef4aafcc, 0xbfe66b0f3f52b386, // -0.71358, -0.70057 - 0xbfe6c40d73c18275, 0xbfe67cf78491af10, // -0.71143, -0.70275 - 0xbfe6b25ced2fe29c, 0xbfe68ed1eaa19c71, // -0.70927, -0.70493 - 0xbfe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // -0.70711, -0.70711 - 0xbfe68ed1eaa19c71, 0xbfe6b25ced2fe29c, // -0.70493, -0.70927 - 0xbfe67cf78491af10, 0xbfe6c40d73c18275, // -0.70275, -0.71143 - 0xbfe66b0f3f52b386, 0xbfe6d5afef4aafcc, // -0.70057, -0.71358 - 0xbfe6591925f0783e, 0xbfe6e74454eaa8ae, // -0.69838, -0.71573 - 0xbfe64715437f535b, 0xbfe6f8ca99c95b75, // -0.69618, -0.71787 - 0xbfe63503a31c1be8, 0xbfe70a42b3176d7a, // -0.69397, -0.72 - 0xbfe622e44fec22ff, 0xbfe71bac960e41bf, // -0.69176, -0.72213 - 0xbfe610b7551d2cde, 0xbfe72d0837efff97, // -0.68954, -0.72425 - 0xbfe5fe7cbde56a0f, 0xbfe73e558e079942, // -0.68732, -0.72636 - 0xbfe5ec3495837074, 0xbfe74f948da8d28d, // -0.68508, -0.72846 - 0xbfe5d9dee73e345c, 0xbfe760c52c304764, // -0.68285, -0.73056 - 0xbfe5c77bbe65018c, 0xbfe771e75f037261, // -0.6806, -0.73265 - 0xbfe5b50b264f7448, 0xbfe782fb1b90b35b, // -0.67835, -0.73474 - 0xbfe5a28d2a5d7250, 0xbfe79400574f55e4, // -0.67609, -0.73682 - 0xbfe59001d5f723df, 0xbfe7a4f707bf97d2, // -0.67383, -0.73889 - 0xbfe57d69348cec9f, 0xbfe7b5df226aafb0, // -0.67156, -0.74095 - 0xbfe56ac35197649e, 0xbfe7c6b89ce2d333, // -0.66928, -0.74301 - 0xbfe5581038975137, 0xbfe7d7836cc33db2, // -0.667, -0.74506 - 0xbfe5454ff5159dfb, 0xbfe7e83f87b03686, // -0.66471, -0.7471 - 0xbfe5328292a35596, 0xbfe7f8ece3571771, // -0.66242, -0.74914 - 0xbfe51fa81cd99aa6, 0xbfe8098b756e52fa, // -0.66011, -0.75117 - 0xbfe50cc09f59a09b, 0xbfe81a1b33b57acc, // -0.65781, -0.75319 - 0xbfe4f9cc25cca486, 0xbfe82a9c13f545ff, // -0.65549, -0.7552 - 0xbfe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // -0.65317, -0.75721 - 0xbfe4d3bc6d589f80, 0xbfe84b7111af83f9, // -0.65085, -0.75921 - 0xbfe4c0a145ec0004, 0xbfe85bc51ae958cc, // -0.64851, -0.7612 - 0xbfe4ad79516722f0, 0xbfe86c0a1d9aa195, // -0.64618, -0.76319 - 0xbfe49a449b9b0938, 0xbfe87c400fba2ebf, // -0.64383, -0.76517 - 0xbfe48703306091fe, 0xbfe88c66e7481ba1, // -0.64148, -0.76714 - 0xbfe473b51b987347, 0xbfe89c7e9a4dd4ab, // -0.63912, -0.7691 - 0xbfe4605a692b32a2, 0xbfe8ac871ede1d88, // -0.63676, -0.77106 - 0xbfe44cf325091dd6, 0xbfe8bc806b151741, // -0.63439, -0.77301 - 0xbfe4397f5b2a4380, 0xbfe8cc6a75184655, // -0.63202, -0.77495 - 0xbfe425ff178e6bb1, 0xbfe8dc45331698cc, // -0.62964, -0.77689 - 0xbfe41272663d108c, 0xbfe8ec109b486c49, // -0.62725, -0.77882 - 0xbfe3fed9534556d4, 0xbfe8fbcca3ef940d, // -0.62486, -0.78074 - 0xbfe3eb33eabe0680, 0xbfe90b7943575efe, // -0.62246, -0.78265 - 0xbfe3d78238c58343, 0xbfe91b166fd49da2, // -0.62006, -0.78456 - 0xbfe3c3c44981c517, 0xbfe92aa41fc5a815, // -0.61765, -0.78646 - 0xbfe3affa292050b9, 0xbfe93a22499263fc, // -0.61523, -0.78835 - 0xbfe39c23e3d63029, 0xbfe94990e3ac4a6c, // -0.61281, -0.79023 - 0xbfe3884185dfeb22, 0xbfe958efe48e6dd7, // -0.61038, -0.79211 - 0xbfe374531b817f8d, 0xbfe9683f42bd7fe1, // -0.60795, -0.79398 - 0xbfe36058b10659f3, 0xbfe9777ef4c7d742, // -0.60551, -0.79584 - 0xbfe34c5252c14de1, 0xbfe986aef1457594, // -0.60307, -0.79769 - 0xbfe338400d0c8e57, 0xbfe995cf2ed80d22, // -0.60062, -0.79954 - 0xbfe32421ec49a620, 0xbfe9a4dfa42b06b2, // -0.59816, -0.80138 - 0xbfe30ff7fce17035, 0xbfe9b3e047f38741, // -0.5957, -0.80321 - 0xbfe2fbc24b441015, 0xbfe9c2d110f075c3, // -0.59323, -0.80503 - 0xbfe2e780e3e8ea16, 0xbfe9d1b1f5ea80d6, // -0.59076, -0.80685 - 0xbfe2d333d34e9bb7, 0xbfe9e082edb42472, // -0.58828, -0.80866 - 0xbfe2bedb25faf3ea, 0xbfe9ef43ef29af94, // -0.5858, -0.81046 - 0xbfe2aa76e87aeb58, 0xbfe9fdf4f13149de, // -0.58331, -0.81225 - 0xbfe2960727629ca8, 0xbfea0c95eabaf937, // -0.58081, -0.81404 - 0xbfe2818bef4d3cba, 0xbfea1b26d2c0a75e, // -0.57831, -0.81581 - 0xbfe26d054cdd12df, 0xbfea29a7a0462782, // -0.57581, -0.81758 - 0xbfe258734cbb7110, 0xbfea38184a593bc6, // -0.5733, -0.81935 - 0xbfe243d5fb98ac1f, 0xbfea4678c8119ac8, // -0.57078, -0.8211 - 0xbfe22f2d662c13e1, 0xbfea54c91090f524, // -0.56826, -0.82285 - 0xbfe21a799933eb58, 0xbfea63091b02fae2, // -0.56573, -0.82459 - 0xbfe205baa17560d6, 0xbfea7138de9d60f5, // -0.5632, -0.82632 - 0xbfe1f0f08bbc861b, 0xbfea7f58529fe69d, // -0.56066, -0.82805 - 0xbfe1dc1b64dc4872, 0xbfea8d676e545ad2, // -0.55812, -0.82976 - 0xbfe1c73b39ae68c8, 0xbfea9b66290ea1a3, // -0.55557, -0.83147 - 0xbfe1b250171373be, 0xbfeaa9547a2cb98e, // -0.55302, -0.83317 - 0xbfe19d5a09f2b9b8, 0xbfeab7325916c0d4, // -0.55046, -0.83486 - 0xbfe188591f3a46e5, 0xbfeac4ffbd3efac8, // -0.54789, -0.83655 - 0xbfe1734d63dedb49, 0xbfead2bc9e21d511, // -0.54532, -0.83822 - 0xbfe15e36e4dbe2bc, 0xbfeae068f345ecef, // -0.54275, -0.83989 - 0xbfe14915af336ceb, 0xbfeaee04b43c1474, // -0.54017, -0.84155 - 0xbfe133e9cfee254e, 0xbfeafb8fd89f57b6, // -0.53759, -0.84321 - 0xbfe11eb3541b4b22, 0xbfeb090a58150200, // -0.535, -0.84485 - 0xbfe1097248d0a956, 0xbfeb16742a4ca2f5, // -0.5324, -0.84649 - 0xbfe0f426bb2a8e7d, 0xbfeb23cd470013b4, // -0.5298, -0.84812 - 0xbfe0ded0b84bc4b5, 0xbfeb3115a5f37bf4, // -0.5272, -0.84974 - 0xbfe0c9704d5d898f, 0xbfeb3e4d3ef55712, // -0.52459, -0.85136 - 0xbfe0b405878f85ec, 0xbfeb4b7409de7925, // -0.52198, -0.85296 - 0xbfe09e907417c5e1, 0xbfeb5889fe921405, // -0.51936, -0.85456 - 0xbfe089112032b08c, 0xbfeb658f14fdbc47, // -0.51673, -0.85615 - 0xbfe073879922ffed, 0xbfeb728345196e3e, // -0.5141, -0.85773 - 0xbfe05df3ec31b8b6, 0xbfeb7f6686e792ea, // -0.51147, -0.8593 - 0xbfe0485626ae221a, 0xbfeb8c38d27504e9, // -0.50883, -0.86087 - 0xbfe032ae55edbd95, 0xbfeb98fa1fd9155e, // -0.50619, -0.86242 - 0xbfe01cfc874c3eb7, 0xbfeba5aa673590d2, // -0.50354, -0.86397 - 0xbfe00740c82b82e0, 0xbfebb249a0b6c40d, // -0.50089, -0.86551 - 0xbfdfe2f64be7120f, 0xbfebbed7c49380ea, // -0.49823, -0.86705 - 0xbfdfb7575c24d2de, 0xbfebcb54cb0d2327, // -0.49557, -0.86857 - 0xbfdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // -0.4929, -0.87009 - 0xbfdf5fdee656cda3, 0xbfebe41b611154c1, // -0.49023, -0.8716 - 0xbfdf3405963fd068, 0xbfebf064e15377dd, // -0.48755, -0.87309 - 0xbfdf081906bff7fd, 0xbfebfc9d25a1b147, // -0.48487, -0.87459 - 0xbfdedc1952ef78d5, 0xbfec08c426725549, // -0.48218, -0.87607 - 0xbfdeb00695f25620, 0xbfec14d9dc465e58, // -0.47949, -0.87755 - 0xbfde83e0eaf85113, 0xbfec20de3fa971b0, // -0.4768, -0.87901 - 0xbfde57a86d3cd824, 0xbfec2cd14931e3f1, // -0.4741, -0.88047 - 0xbfde2b5d3806f63b, 0xbfec38b2f180bdb1, // -0.4714, -0.88192 - 0xbfddfeff66a941de, 0xbfec44833141c004, // -0.46869, -0.88336 - 0xbfddd28f1481cc58, 0xbfec5042012b6907, // -0.46598, -0.8848 - 0xbfdda60c5cfa10d8, 0xbfec5bef59fef85a, // -0.46326, -0.88622 - 0xbfdd79775b86e389, 0xbfec678b3488739b, // -0.46054, -0.88764 - 0xbfdd4cd02ba8609c, 0xbfec7315899eaad7, // -0.45781, -0.88905 - 0xbfdd2016e8e9db5b, 0xbfec7e8e52233cf3, // -0.45508, -0.89045 - 0xbfdcf34baee1cd21, 0xbfec89f587029c13, // -0.45235, -0.89184 - 0xbfdcc66e9931c45d, 0xbfec954b213411f5, // -0.44961, -0.89322 - 0xbfdc997fc3865388, 0xbfeca08f19b9c449, // -0.44687, -0.8946 - 0xbfdc6c7f4997000a, 0xbfecabc169a0b901, // -0.44412, -0.89597 - 0xbfdc3f6d47263129, 0xbfecb6e20a00da99, // -0.44137, -0.89732 - 0xbfdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // -0.43862, -0.89867 - 0xbfdbe51517ffc0d9, 0xbfecccee20c2de9f, // -0.43586, -0.90002 - 0xbfdbb7cf2304bd01, 0xbfecd7d9898b32f6, // -0.43309, -0.90135 - 0xbfdb8a7814fd5693, 0xbfece2b32799a060, // -0.43033, -0.90267 - 0xbfdb5d1009e15cc0, 0xbfeced7af43cc773, // -0.42756, -0.90399 - 0xbfdb2f971db31972, 0xbfecf830e8ce467b, // -0.42478, -0.9053 - 0xbfdb020d6c7f4009, 0xbfed02d4feb2bd92, // -0.422, -0.9066 - 0xbfdad473125cdc08, 0xbfed0d672f59d2b9, // -0.41922, -0.90789 - 0xbfdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // -0.41643, -0.90917 - 0xbfda790cd3dbf31a, 0xbfed2255c6e5a4e1, // -0.41364, -0.91044 - 0xbfda4b4127dea1e4, 0xbfed2cb220e0ef9f, // -0.41084, -0.91171 - 0xbfda1d6543b50ac0, 0xbfed36fc7bcbfbdc, // -0.40804, -0.91296 - 0xbfd9ef7943a8ed8a, 0xbfed4134d14dc93a, // -0.40524, -0.91421 - 0xbfd9c17d440df9f2, 0xbfed4b5b1b187524, // -0.40243, -0.91545 - 0xbfd993716141bdfe, 0xbfed556f52e93eb1, // -0.39962, -0.91668 - 0xbfd96555b7ab948f, 0xbfed5f7172888a7f, // -0.39681, -0.9179 - 0xbfd9372a63bc93d7, 0xbfed696173c9e68b, // -0.39399, -0.91911 - 0xbfd908ef81ef7bd1, 0xbfed733f508c0dff, // -0.39117, -0.92032 - 0xbfd8daa52ec8a4af, 0xbfed7d0b02b8ecf9, // -0.38835, -0.92151 - 0xbfd8ac4b86d5ed44, 0xbfed86c48445a450, // -0.38552, -0.9227 - 0xbfd87de2a6aea963, 0xbfed906bcf328d46, // -0.38268, -0.92388 - 0xbfd84f6aaaf3903f, 0xbfed9a00dd8b3d46, // -0.37985, -0.92505 - 0xbfd820e3b04eaac4, 0xbfeda383a9668988, // -0.37701, -0.92621 - 0xbfd7f24dd37341e3, 0xbfedacf42ce68ab9, // -0.37416, -0.92736 - 0xbfd7c3a9311dcce7, 0xbfedb6526238a09b, // -0.37132, -0.92851 - 0xbfd794f5e613dfae, 0xbfedbf9e4395759a, // -0.36847, -0.92964 - 0xbfd766340f2418f6, 0xbfedc8d7cb410260, // -0.36561, -0.93077 - 0xbfd73763c9261092, 0xbfedd1fef38a915a, // -0.36276, -0.93188 - 0xbfd7088530fa459e, 0xbfeddb13b6ccc23d, // -0.3599, -0.93299 - 0xbfd6d998638a0cb5, 0xbfede4160f6d8d81, // -0.35703, -0.93409 - 0xbfd6aa9d7dc77e16, 0xbfeded05f7de47da, // -0.35416, -0.93518 - 0xbfd67b949cad63ca, 0xbfedf5e36a9ba59c, // -0.35129, -0.93627 - 0xbfd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // -0.34842, -0.93734 - 0xbfd61d595c88c203, 0xbfee0766d9280f54, // -0.34554, -0.9384 - 0xbfd5ee27379ea693, 0xbfee100cca2980ac, // -0.34266, -0.93946 - 0xbfd5bee78b9db3b6, 0xbfee18a02fdc66d9, // -0.33978, -0.94051 - 0xbfd58f9a75ab1fdd, 0xbfee212104f686e5, // -0.33689, -0.94154 - 0xbfd5604012f467b4, 0xbfee298f4439197a, // -0.334, -0.94257 - 0xbfd530d880af3c24, 0xbfee31eae870ce25, // -0.33111, -0.94359 - 0xbfd50163dc197047, 0xbfee3a33ec75ce85, // -0.32821, -0.9446 - 0xbfd4d1e24278e76a, 0xbfee426a4b2bc17e, // -0.32531, -0.94561 - 0xbfd4a253d11b82f3, 0xbfee4a8dff81ce5e, // -0.32241, -0.9466 - 0xbfd472b8a5571054, 0xbfee529f04729ffc, // -0.3195, -0.94759 - 0xbfd44310dc8936f0, 0xbfee5a9d550467d3, // -0.31659, -0.94856 - 0xbfd4135c94176602, 0xbfee6288ec48e112, // -0.31368, -0.94953 - 0xbfd3e39be96ec271, 0xbfee6a61c55d53a7, // -0.31077, -0.95049 - 0xbfd3b3cefa0414b7, 0xbfee7227db6a9744, // -0.30785, -0.95144 - 0xbfd383f5e353b6aa, 0xbfee79db29a5165a, // -0.30493, -0.95238 - 0xbfd35410c2e18152, 0xbfee817bab4cd10d, // -0.30201, -0.95331 - 0xbfd3241fb638baaf, 0xbfee89095bad6025, // -0.29908, -0.95423 - 0xbfd2f422daec0386, 0xbfee9084361df7f3, // -0.29615, -0.95514 - 0xbfd2c41a4e954520, 0xbfee97ec36016b30, // -0.29322, -0.95605 - 0xbfd294062ed59f05, 0xbfee9f4156c62dda, // -0.29028, -0.95694 - 0xbfd263e6995554ba, 0xbfeea68393e65800, // -0.28735, -0.95783 - 0xbfd233bbabc3bb72, 0xbfeeadb2e8e7a88e, // -0.28441, -0.9587 - 0xbfd2038583d727bd, 0xbfeeb4cf515b8811, // -0.28146, -0.95957 - 0xbfd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // -0.27852, -0.96043 - 0xbfd1a2f7fbe8f243, 0xbfeec2cf4b1af6b2, // -0.27557, -0.96128 - 0xbfd172a0d7765177, 0xbfeec9b2d3c3bf84, // -0.27262, -0.96212 - 0xbfd1423eefc69378, 0xbfeed0835e999009, // -0.26967, -0.96295 - 0xbfd111d262b1f677, 0xbfeed740e7684963, // -0.26671, -0.96378 - 0xbfd0e15b4e1749cd, 0xbfeeddeb6a078651, // -0.26375, -0.96459 - 0xbfd0b0d9cfdbdb90, 0xbfeee482e25a9dbc, // -0.26079, -0.96539 - 0xbfd0804e05eb661e, 0xbfeeeb074c50a544, // -0.25783, -0.96619 - 0xbfd04fb80e37fdae, 0xbfeef178a3e473c2, // -0.25487, -0.96698 - 0xbfd01f1806b9fdd2, 0xbfeef7d6e51ca3c0, // -0.2519, -0.96775 - 0xbfcfdcdc1adfedf8, 0xbfeefe220c0b95ec, // -0.24893, -0.96852 - 0xbfcf7b7480bd3801, 0xbfef045a14cf738c, // -0.24596, -0.96928 - 0xbfcf19f97b215f1a, 0xbfef0a7efb9230d7, // -0.24298, -0.97003 - 0xbfceb86b462de348, 0xbfef1090bc898f5f, // -0.24, -0.97077 - 0xbfce56ca1e101a1b, 0xbfef168f53f7205d, // -0.23702, -0.9715 - 0xbfcdf5163f01099a, 0xbfef1c7abe284708, // -0.23404, -0.97223 - 0xbfcd934fe5454311, 0xbfef2252f7763ada, // -0.23106, -0.97294 - 0xbfcd31774d2cbdee, 0xbfef2817fc4609ce, // -0.22807, -0.97364 - 0xbfcccf8cb312b286, 0xbfef2dc9c9089a9d, // -0.22508, -0.97434 - 0xbfcc6d90535d74dc, 0xbfef33685a3aaef0, // -0.22209, -0.97503 - 0xbfcc0b826a7e4f63, 0xbfef38f3ac64e589, // -0.2191, -0.9757 - 0xbfcba96334f15dad, 0xbfef3e6bbc1bbc65, // -0.21611, -0.97637 - 0xbfcb4732ef3d6722, 0xbfef43d085ff92dd, // -0.21311, -0.97703 - 0xbfcae4f1d5f3b9ab, 0xbfef492206bcabb4, // -0.21011, -0.97768 - 0xbfca82a025b00451, 0xbfef4e603b0b2f2d, // -0.20711, -0.97832 - 0xbfca203e1b1831da, 0xbfef538b1faf2d07, // -0.20411, -0.97895 - 0xbfc9bdcbf2dc4366, 0xbfef58a2b1789e84, // -0.2011, -0.97957 - 0xbfc95b49e9b62af9, 0xbfef5da6ed43685d, // -0.1981, -0.98018 - 0xbfc8f8b83c69a60a, 0xbfef6297cff75cb0, // -0.19509, -0.98079 - 0xbfc8961727c41804, 0xbfef677556883cee, // -0.19208, -0.98138 - 0xbfc83366e89c64c5, 0xbfef6c3f7df5bbb7, // -0.18907, -0.98196 - 0xbfc7d0a7bbd2cb1b, 0xbfef70f6434b7eb7, // -0.18606, -0.98254 - 0xbfc76dd9de50bf31, 0xbfef7599a3a12077, // -0.18304, -0.98311 - 0xbfc70afd8d08c4ff, 0xbfef7a299c1a322a, // -0.18002, -0.98366 - 0xbfc6a81304f64ab2, 0xbfef7ea629e63d6e, // -0.177, -0.98421 - 0xbfc6451a831d830d, 0xbfef830f4a40c60c, // -0.17398, -0.98475 - 0xbfc5e214448b3fc6, 0xbfef8764fa714ba9, // -0.17096, -0.98528 - 0xbfc57f008654cbde, 0xbfef8ba737cb4b78, // -0.16794, -0.9858 - 0xbfc51bdf8597c5f2, 0xbfef8fd5ffae41db, // -0.16491, -0.98631 - 0xbfc4b8b17f79fa88, 0xbfef93f14f85ac08, // -0.16189, -0.98681 - 0xbfc45576b1293e5a, 0xbfef97f924c9099b, // -0.15886, -0.9873 - 0xbfc3f22f57db4893, 0xbfef9bed7cfbde29, // -0.15583, -0.98778 - 0xbfc38edbb0cd8d14, 0xbfef9fce55adb2c8, // -0.1528, -0.98826 - 0xbfc32b7bf94516a7, 0xbfefa39bac7a1791, // -0.14976, -0.98872 - 0xbfc2c8106e8e613a, 0xbfefa7557f08a517, // -0.14673, -0.98918 - 0xbfc264994dfd340a, 0xbfefaafbcb0cfddc, // -0.1437, -0.98962 - 0xbfc20116d4ec7bce, 0xbfefae8e8e46cfbb, // -0.14066, -0.99006 - 0xbfc19d8940be24e7, 0xbfefb20dc681d54d, // -0.13762, -0.99049 - 0xbfc139f0cedaf576, 0xbfefb5797195d741, // -0.13458, -0.9909 - 0xbfc0d64dbcb26786, 0xbfefb8d18d66adb7, // -0.13154, -0.99131 - 0xbfc072a047ba831d, 0xbfefbc1617e44186, // -0.1285, -0.99171 - 0xbfc00ee8ad6fb85b, 0xbfefbf470f0a8d88, // -0.12545, -0.9921 - 0xbfbf564e56a9730e, 0xbfefc26470e19fd3, // -0.12241, -0.99248 - 0xbfbe8eb7fde4aa3e, 0xbfefc56e3b7d9af6, // -0.11937, -0.99285 - 0xbfbdc70ecbae9fc8, 0xbfefc8646cfeb721, // -0.11632, -0.99321 - 0xbfbcff533b307dc1, 0xbfefcb4703914354, // -0.11327, -0.99356 - 0xbfbc3785c79ec2d5, 0xbfefce15fd6da67b, // -0.11022, -0.99391 - 0xbfbb6fa6ec38f64c, 0xbfefd0d158d86087, // -0.10717, -0.99424 - 0xbfbaa7b724495c04, 0xbfefd37914220b84, // -0.10412, -0.99456 - 0xbfb9dfb6eb24a85c, 0xbfefd60d2da75c9e, // -0.10107, -0.99488 - 0xbfb917a6bc29b42c, 0xbfefd88da3d12526, // -0.098017, -0.99518 - 0xbfb84f8712c130a0, 0xbfefdafa7514538c, // -0.094963, -0.99548 - 0xbfb787586a5d5b21, 0xbfefdd539ff1f456, // -0.091909, -0.99577 - 0xbfb6bf1b3e79b129, 0xbfefdf9922f73307, // -0.088854, -0.99604 - 0xbfb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // -0.085797, -0.99631 - 0xbfb52e774a4d4d0a, 0xbfefe3e92be9d886, // -0.08274, -0.99657 - 0xbfb4661179272096, 0xbfefe5f3af2e3940, // -0.079682, -0.99682 - 0xbfb39d9f12c5a299, 0xbfefe7ea85482d60, // -0.076624, -0.99706 - 0xbfb2d52092ce19f6, 0xbfefe9cdad01883a, // -0.073565, -0.99729 - 0xbfb20c9674ed444c, 0xbfefeb9d2530410f, // -0.070505, -0.99751 - 0xbfb1440134d709b2, 0xbfefed58ecb673c4, // -0.067444, -0.99772 - 0xbfb07b614e463064, 0xbfefef0102826191, // -0.064383, -0.99793 - 0xbfaf656e79f820e0, 0xbfeff095658e71ad, // -0.061321, -0.99812 - 0xbfadd406f9808ec8, 0xbfeff21614e131ed, // -0.058258, -0.9983 - 0xbfac428d12c0d7e3, 0xbfeff3830f8d575c, // -0.055195, -0.99848 - 0xbfaab101bd5f8317, 0xbfeff4dc54b1bed3, // -0.052132, -0.99864 - 0xbfa91f65f10dd814, 0xbfeff621e3796d7e, // -0.049068, -0.9988 - 0xbfa78dbaa5874685, 0xbfeff753bb1b9164, // -0.046003, -0.99894 - 0xbfa5fc00d290cd43, 0xbfeff871dadb81df, // -0.042938, -0.99908 - 0xbfa46a396ff86179, 0xbfeff97c4208c014, // -0.039873, -0.9992 - 0xbfa2d865759455cd, 0xbfeffa72effef75d, // -0.036807, -0.99932 - 0xbfa14685db42c17e, 0xbfeffb55e425fdae, // -0.033741, -0.99943 - 0xbf9f693731d1cf01, 0xbfeffc251df1d3f8, // -0.030675, -0.99953 - 0xbf9c454f4ce53b1c, 0xbfeffce09ce2a679, // -0.027608, -0.99962 - 0xbf992155f7a3667e, 0xbfeffd886084cd0d, // -0.024541, -0.9997 - 0xbf95fd4d21fab226, 0xbfeffe1c6870cb77, // -0.021474, -0.99977 - 0xbf92d936bbe30efd, 0xbfeffe9cb44b51a1, // -0.018407, -0.99983 - 0xbf8f6a296ab997ca, 0xbfefff0943c53bd1, // -0.015339, -0.99988 - 0xbf8921d1fcdec784, 0xbfefff62169b92db, // -0.012272, -0.99992 - 0xbf82d96b0e509703, 0xbfefffa72c978c4f, //-0.0092038, -0.99996 - 0xbf7921f0fe670071, 0xbfefffd8858e8a92, //-0.0061359, -0.99998 - 0xbf6921f8becca4ba, 0xbfeffff621621d02, // -0.003068, -1 - 0x0000000000000000, 0xbff0000000000000, // 0, -1 - 0x3f6921f8becca4ba, 0xbfeffff621621d02, // 0.003068, -1 - 0x3f7921f0fe670071, 0xbfefffd8858e8a92, // 0.0061359, -0.99998 - 0x3f82d96b0e509703, 0xbfefffa72c978c4f, // 0.0092038, -0.99996 - 0x3f8921d1fcdec784, 0xbfefff62169b92db, // 0.012272, -0.99992 - 0x3f8f6a296ab997ca, 0xbfefff0943c53bd1, // 0.015339, -0.99988 - 0x3f92d936bbe30efd, 0xbfeffe9cb44b51a1, // 0.018407, -0.99983 - 0x3f95fd4d21fab226, 0xbfeffe1c6870cb77, // 0.021474, -0.99977 - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, // 0.024541, -0.9997 - 0x3f9c454f4ce53b1c, 0xbfeffce09ce2a679, // 0.027608, -0.99962 - 0x3f9f693731d1cf01, 0xbfeffc251df1d3f8, // 0.030675, -0.99953 - 0x3fa14685db42c17e, 0xbfeffb55e425fdae, // 0.033741, -0.99943 - 0x3fa2d865759455cd, 0xbfeffa72effef75d, // 0.036807, -0.99932 - 0x3fa46a396ff86179, 0xbfeff97c4208c014, // 0.039873, -0.9992 - 0x3fa5fc00d290cd43, 0xbfeff871dadb81df, // 0.042938, -0.99908 - 0x3fa78dbaa5874685, 0xbfeff753bb1b9164, // 0.046003, -0.99894 - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, // 0.049068, -0.9988 - 0x3faab101bd5f8317, 0xbfeff4dc54b1bed3, // 0.052132, -0.99864 - 0x3fac428d12c0d7e3, 0xbfeff3830f8d575c, // 0.055195, -0.99848 - 0x3fadd406f9808ec8, 0xbfeff21614e131ed, // 0.058258, -0.9983 - 0x3faf656e79f820e0, 0xbfeff095658e71ad, // 0.061321, -0.99812 - 0x3fb07b614e463064, 0xbfefef0102826191, // 0.064383, -0.99793 - 0x3fb1440134d709b2, 0xbfefed58ecb673c4, // 0.067444, -0.99772 - 0x3fb20c9674ed444c, 0xbfefeb9d2530410f, // 0.070505, -0.99751 - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, // 0.073565, -0.99729 - 0x3fb39d9f12c5a299, 0xbfefe7ea85482d60, // 0.076624, -0.99706 - 0x3fb4661179272096, 0xbfefe5f3af2e3940, // 0.079682, -0.99682 - 0x3fb52e774a4d4d0a, 0xbfefe3e92be9d886, // 0.08274, -0.99657 - 0x3fb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // 0.085797, -0.99631 - 0x3fb6bf1b3e79b129, 0xbfefdf9922f73307, // 0.088854, -0.99604 - 0x3fb787586a5d5b21, 0xbfefdd539ff1f456, // 0.091909, -0.99577 - 0x3fb84f8712c130a0, 0xbfefdafa7514538c, // 0.094963, -0.99548 - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518 - 0x3fb9dfb6eb24a85c, 0xbfefd60d2da75c9e, // 0.10107, -0.99488 - 0x3fbaa7b724495c04, 0xbfefd37914220b84, // 0.10412, -0.99456 - 0x3fbb6fa6ec38f64c, 0xbfefd0d158d86087, // 0.10717, -0.99424 - 0x3fbc3785c79ec2d5, 0xbfefce15fd6da67b, // 0.11022, -0.99391 - 0x3fbcff533b307dc1, 0xbfefcb4703914354, // 0.11327, -0.99356 - 0x3fbdc70ecbae9fc8, 0xbfefc8646cfeb721, // 0.11632, -0.99321 - 0x3fbe8eb7fde4aa3e, 0xbfefc56e3b7d9af6, // 0.11937, -0.99285 - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248 - 0x3fc00ee8ad6fb85b, 0xbfefbf470f0a8d88, // 0.12545, -0.9921 - 0x3fc072a047ba831d, 0xbfefbc1617e44186, // 0.1285, -0.99171 - 0x3fc0d64dbcb26786, 0xbfefb8d18d66adb7, // 0.13154, -0.99131 - 0x3fc139f0cedaf576, 0xbfefb5797195d741, // 0.13458, -0.9909 - 0x3fc19d8940be24e7, 0xbfefb20dc681d54d, // 0.13762, -0.99049 - 0x3fc20116d4ec7bce, 0xbfefae8e8e46cfbb, // 0.14066, -0.99006 - 0x3fc264994dfd340a, 0xbfefaafbcb0cfddc, // 0.1437, -0.98962 - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918 - 0x3fc32b7bf94516a7, 0xbfefa39bac7a1791, // 0.14976, -0.98872 - 0x3fc38edbb0cd8d14, 0xbfef9fce55adb2c8, // 0.1528, -0.98826 - 0x3fc3f22f57db4893, 0xbfef9bed7cfbde29, // 0.15583, -0.98778 - 0x3fc45576b1293e5a, 0xbfef97f924c9099b, // 0.15886, -0.9873 - 0x3fc4b8b17f79fa88, 0xbfef93f14f85ac08, // 0.16189, -0.98681 - 0x3fc51bdf8597c5f2, 0xbfef8fd5ffae41db, // 0.16491, -0.98631 - 0x3fc57f008654cbde, 0xbfef8ba737cb4b78, // 0.16794, -0.9858 - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528 - 0x3fc6451a831d830d, 0xbfef830f4a40c60c, // 0.17398, -0.98475 - 0x3fc6a81304f64ab2, 0xbfef7ea629e63d6e, // 0.177, -0.98421 - 0x3fc70afd8d08c4ff, 0xbfef7a299c1a322a, // 0.18002, -0.98366 - 0x3fc76dd9de50bf31, 0xbfef7599a3a12077, // 0.18304, -0.98311 - 0x3fc7d0a7bbd2cb1b, 0xbfef70f6434b7eb7, // 0.18606, -0.98254 - 0x3fc83366e89c64c5, 0xbfef6c3f7df5bbb7, // 0.18907, -0.98196 - 0x3fc8961727c41804, 0xbfef677556883cee, // 0.19208, -0.98138 - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079 - 0x3fc95b49e9b62af9, 0xbfef5da6ed43685d, // 0.1981, -0.98018 - 0x3fc9bdcbf2dc4366, 0xbfef58a2b1789e84, // 0.2011, -0.97957 - 0x3fca203e1b1831da, 0xbfef538b1faf2d07, // 0.20411, -0.97895 - 0x3fca82a025b00451, 0xbfef4e603b0b2f2d, // 0.20711, -0.97832 - 0x3fcae4f1d5f3b9ab, 0xbfef492206bcabb4, // 0.21011, -0.97768 - 0x3fcb4732ef3d6722, 0xbfef43d085ff92dd, // 0.21311, -0.97703 - 0x3fcba96334f15dad, 0xbfef3e6bbc1bbc65, // 0.21611, -0.97637 - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757 - 0x3fcc6d90535d74dc, 0xbfef33685a3aaef0, // 0.22209, -0.97503 - 0x3fcccf8cb312b286, 0xbfef2dc9c9089a9d, // 0.22508, -0.97434 - 0x3fcd31774d2cbdee, 0xbfef2817fc4609ce, // 0.22807, -0.97364 - 0x3fcd934fe5454311, 0xbfef2252f7763ada, // 0.23106, -0.97294 - 0x3fcdf5163f01099a, 0xbfef1c7abe284708, // 0.23404, -0.97223 - 0x3fce56ca1e101a1b, 0xbfef168f53f7205d, // 0.23702, -0.9715 - 0x3fceb86b462de348, 0xbfef1090bc898f5f, // 0.24, -0.97077 - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003 - 0x3fcf7b7480bd3801, 0xbfef045a14cf738c, // 0.24596, -0.96928 - 0x3fcfdcdc1adfedf8, 0xbfeefe220c0b95ec, // 0.24893, -0.96852 - 0x3fd01f1806b9fdd2, 0xbfeef7d6e51ca3c0, // 0.2519, -0.96775 - 0x3fd04fb80e37fdae, 0xbfeef178a3e473c2, // 0.25487, -0.96698 - 0x3fd0804e05eb661e, 0xbfeeeb074c50a544, // 0.25783, -0.96619 - 0x3fd0b0d9cfdbdb90, 0xbfeee482e25a9dbc, // 0.26079, -0.96539 - 0x3fd0e15b4e1749cd, 0xbfeeddeb6a078651, // 0.26375, -0.96459 - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378 - 0x3fd1423eefc69378, 0xbfeed0835e999009, // 0.26967, -0.96295 - 0x3fd172a0d7765177, 0xbfeec9b2d3c3bf84, // 0.27262, -0.96212 - 0x3fd1a2f7fbe8f243, 0xbfeec2cf4b1af6b2, // 0.27557, -0.96128 - 0x3fd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // 0.27852, -0.96043 - 0x3fd2038583d727bd, 0xbfeeb4cf515b8811, // 0.28146, -0.95957 - 0x3fd233bbabc3bb72, 0xbfeeadb2e8e7a88e, // 0.28441, -0.9587 - 0x3fd263e6995554ba, 0xbfeea68393e65800, // 0.28735, -0.95783 - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694 - 0x3fd2c41a4e954520, 0xbfee97ec36016b30, // 0.29322, -0.95605 - 0x3fd2f422daec0386, 0xbfee9084361df7f3, // 0.29615, -0.95514 - 0x3fd3241fb638baaf, 0xbfee89095bad6025, // 0.29908, -0.95423 - 0x3fd35410c2e18152, 0xbfee817bab4cd10d, // 0.30201, -0.95331 - 0x3fd383f5e353b6aa, 0xbfee79db29a5165a, // 0.30493, -0.95238 - 0x3fd3b3cefa0414b7, 0xbfee7227db6a9744, // 0.30785, -0.95144 - 0x3fd3e39be96ec271, 0xbfee6a61c55d53a7, // 0.31077, -0.95049 - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953 - 0x3fd44310dc8936f0, 0xbfee5a9d550467d3, // 0.31659, -0.94856 - 0x3fd472b8a5571054, 0xbfee529f04729ffc, // 0.3195, -0.94759 - 0x3fd4a253d11b82f3, 0xbfee4a8dff81ce5e, // 0.32241, -0.9466 - 0x3fd4d1e24278e76a, 0xbfee426a4b2bc17e, // 0.32531, -0.94561 - 0x3fd50163dc197047, 0xbfee3a33ec75ce85, // 0.32821, -0.9446 - 0x3fd530d880af3c24, 0xbfee31eae870ce25, // 0.33111, -0.94359 - 0x3fd5604012f467b4, 0xbfee298f4439197a, // 0.334, -0.94257 - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154 - 0x3fd5bee78b9db3b6, 0xbfee18a02fdc66d9, // 0.33978, -0.94051 - 0x3fd5ee27379ea693, 0xbfee100cca2980ac, // 0.34266, -0.93946 - 0x3fd61d595c88c203, 0xbfee0766d9280f54, // 0.34554, -0.9384 - 0x3fd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // 0.34842, -0.93734 - 0x3fd67b949cad63ca, 0xbfedf5e36a9ba59c, // 0.35129, -0.93627 - 0x3fd6aa9d7dc77e16, 0xbfeded05f7de47da, // 0.35416, -0.93518 - 0x3fd6d998638a0cb5, 0xbfede4160f6d8d81, // 0.35703, -0.93409 - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299 - 0x3fd73763c9261092, 0xbfedd1fef38a915a, // 0.36276, -0.93188 - 0x3fd766340f2418f6, 0xbfedc8d7cb410260, // 0.36561, -0.93077 - 0x3fd794f5e613dfae, 0xbfedbf9e4395759a, // 0.36847, -0.92964 - 0x3fd7c3a9311dcce7, 0xbfedb6526238a09b, // 0.37132, -0.92851 - 0x3fd7f24dd37341e3, 0xbfedacf42ce68ab9, // 0.37416, -0.92736 - 0x3fd820e3b04eaac4, 0xbfeda383a9668988, // 0.37701, -0.92621 - 0x3fd84f6aaaf3903f, 0xbfed9a00dd8b3d46, // 0.37985, -0.92505 - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388 - 0x3fd8ac4b86d5ed44, 0xbfed86c48445a450, // 0.38552, -0.9227 - 0x3fd8daa52ec8a4af, 0xbfed7d0b02b8ecf9, // 0.38835, -0.92151 - 0x3fd908ef81ef7bd1, 0xbfed733f508c0dff, // 0.39117, -0.92032 - 0x3fd9372a63bc93d7, 0xbfed696173c9e68b, // 0.39399, -0.91911 - 0x3fd96555b7ab948f, 0xbfed5f7172888a7f, // 0.39681, -0.9179 - 0x3fd993716141bdfe, 0xbfed556f52e93eb1, // 0.39962, -0.91668 - 0x3fd9c17d440df9f2, 0xbfed4b5b1b187524, // 0.40243, -0.91545 - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421 - 0x3fda1d6543b50ac0, 0xbfed36fc7bcbfbdc, // 0.40804, -0.91296 - 0x3fda4b4127dea1e4, 0xbfed2cb220e0ef9f, // 0.41084, -0.91171 - 0x3fda790cd3dbf31a, 0xbfed2255c6e5a4e1, // 0.41364, -0.91044 - 0x3fdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // 0.41643, -0.90917 - 0x3fdad473125cdc08, 0xbfed0d672f59d2b9, // 0.41922, -0.90789 - 0x3fdb020d6c7f4009, 0xbfed02d4feb2bd92, // 0.422, -0.9066 - 0x3fdb2f971db31972, 0xbfecf830e8ce467b, // 0.42478, -0.9053 - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399 - 0x3fdb8a7814fd5693, 0xbfece2b32799a060, // 0.43033, -0.90267 - 0x3fdbb7cf2304bd01, 0xbfecd7d9898b32f6, // 0.43309, -0.90135 - 0x3fdbe51517ffc0d9, 0xbfecccee20c2de9f, // 0.43586, -0.90002 - 0x3fdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // 0.43862, -0.89867 - 0x3fdc3f6d47263129, 0xbfecb6e20a00da99, // 0.44137, -0.89732 - 0x3fdc6c7f4997000a, 0xbfecabc169a0b901, // 0.44412, -0.89597 - 0x3fdc997fc3865388, 0xbfeca08f19b9c449, // 0.44687, -0.8946 - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322 - 0x3fdcf34baee1cd21, 0xbfec89f587029c13, // 0.45235, -0.89184 - 0x3fdd2016e8e9db5b, 0xbfec7e8e52233cf3, // 0.45508, -0.89045 - 0x3fdd4cd02ba8609c, 0xbfec7315899eaad7, // 0.45781, -0.88905 - 0x3fdd79775b86e389, 0xbfec678b3488739b, // 0.46054, -0.88764 - 0x3fdda60c5cfa10d8, 0xbfec5bef59fef85a, // 0.46326, -0.88622 - 0x3fddd28f1481cc58, 0xbfec5042012b6907, // 0.46598, -0.8848 - 0x3fddfeff66a941de, 0xbfec44833141c004, // 0.46869, -0.88336 - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192 - 0x3fde57a86d3cd824, 0xbfec2cd14931e3f1, // 0.4741, -0.88047 - 0x3fde83e0eaf85113, 0xbfec20de3fa971b0, // 0.4768, -0.87901 - 0x3fdeb00695f25620, 0xbfec14d9dc465e58, // 0.47949, -0.87755 - 0x3fdedc1952ef78d5, 0xbfec08c426725549, // 0.48218, -0.87607 - 0x3fdf081906bff7fd, 0xbfebfc9d25a1b147, // 0.48487, -0.87459 - 0x3fdf3405963fd068, 0xbfebf064e15377dd, // 0.48755, -0.87309 - 0x3fdf5fdee656cda3, 0xbfebe41b611154c1, // 0.49023, -0.8716 - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009 - 0x3fdfb7575c24d2de, 0xbfebcb54cb0d2327, // 0.49557, -0.86857 - 0x3fdfe2f64be7120f, 0xbfebbed7c49380ea, // 0.49823, -0.86705 - 0x3fe00740c82b82e0, 0xbfebb249a0b6c40d, // 0.50089, -0.86551 - 0x3fe01cfc874c3eb7, 0xbfeba5aa673590d2, // 0.50354, -0.86397 - 0x3fe032ae55edbd95, 0xbfeb98fa1fd9155e, // 0.50619, -0.86242 - 0x3fe0485626ae221a, 0xbfeb8c38d27504e9, // 0.50883, -0.86087 - 0x3fe05df3ec31b8b6, 0xbfeb7f6686e792ea, // 0.51147, -0.8593 - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773 - 0x3fe089112032b08c, 0xbfeb658f14fdbc47, // 0.51673, -0.85615 - 0x3fe09e907417c5e1, 0xbfeb5889fe921405, // 0.51936, -0.85456 - 0x3fe0b405878f85ec, 0xbfeb4b7409de7925, // 0.52198, -0.85296 - 0x3fe0c9704d5d898f, 0xbfeb3e4d3ef55712, // 0.52459, -0.85136 - 0x3fe0ded0b84bc4b5, 0xbfeb3115a5f37bf4, // 0.5272, -0.84974 - 0x3fe0f426bb2a8e7d, 0xbfeb23cd470013b4, // 0.5298, -0.84812 - 0x3fe1097248d0a956, 0xbfeb16742a4ca2f5, // 0.5324, -0.84649 - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485 - 0x3fe133e9cfee254e, 0xbfeafb8fd89f57b6, // 0.53759, -0.84321 - 0x3fe14915af336ceb, 0xbfeaee04b43c1474, // 0.54017, -0.84155 - 0x3fe15e36e4dbe2bc, 0xbfeae068f345ecef, // 0.54275, -0.83989 - 0x3fe1734d63dedb49, 0xbfead2bc9e21d511, // 0.54532, -0.83822 - 0x3fe188591f3a46e5, 0xbfeac4ffbd3efac8, // 0.54789, -0.83655 - 0x3fe19d5a09f2b9b8, 0xbfeab7325916c0d4, // 0.55046, -0.83486 - 0x3fe1b250171373be, 0xbfeaa9547a2cb98e, // 0.55302, -0.83317 - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147 - 0x3fe1dc1b64dc4872, 0xbfea8d676e545ad2, // 0.55812, -0.82976 - 0x3fe1f0f08bbc861b, 0xbfea7f58529fe69d, // 0.56066, -0.82805 - 0x3fe205baa17560d6, 0xbfea7138de9d60f5, // 0.5632, -0.82632 - 0x3fe21a799933eb58, 0xbfea63091b02fae2, // 0.56573, -0.82459 - 0x3fe22f2d662c13e1, 0xbfea54c91090f524, // 0.56826, -0.82285 - 0x3fe243d5fb98ac1f, 0xbfea4678c8119ac8, // 0.57078, -0.8211 - 0x3fe258734cbb7110, 0xbfea38184a593bc6, // 0.5733, -0.81935 - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758 - 0x3fe2818bef4d3cba, 0xbfea1b26d2c0a75e, // 0.57831, -0.81581 - 0x3fe2960727629ca8, 0xbfea0c95eabaf937, // 0.58081, -0.81404 - 0x3fe2aa76e87aeb58, 0xbfe9fdf4f13149de, // 0.58331, -0.81225 - 0x3fe2bedb25faf3ea, 0xbfe9ef43ef29af94, // 0.5858, -0.81046 - 0x3fe2d333d34e9bb7, 0xbfe9e082edb42472, // 0.58828, -0.80866 - 0x3fe2e780e3e8ea16, 0xbfe9d1b1f5ea80d6, // 0.59076, -0.80685 - 0x3fe2fbc24b441015, 0xbfe9c2d110f075c3, // 0.59323, -0.80503 - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321 - 0x3fe32421ec49a620, 0xbfe9a4dfa42b06b2, // 0.59816, -0.80138 - 0x3fe338400d0c8e57, 0xbfe995cf2ed80d22, // 0.60062, -0.79954 - 0x3fe34c5252c14de1, 0xbfe986aef1457594, // 0.60307, -0.79769 - 0x3fe36058b10659f3, 0xbfe9777ef4c7d742, // 0.60551, -0.79584 - 0x3fe374531b817f8d, 0xbfe9683f42bd7fe1, // 0.60795, -0.79398 - 0x3fe3884185dfeb22, 0xbfe958efe48e6dd7, // 0.61038, -0.79211 - 0x3fe39c23e3d63029, 0xbfe94990e3ac4a6c, // 0.61281, -0.79023 - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835 - 0x3fe3c3c44981c517, 0xbfe92aa41fc5a815, // 0.61765, -0.78646 - 0x3fe3d78238c58343, 0xbfe91b166fd49da2, // 0.62006, -0.78456 - 0x3fe3eb33eabe0680, 0xbfe90b7943575efe, // 0.62246, -0.78265 - 0x3fe3fed9534556d4, 0xbfe8fbcca3ef940d, // 0.62486, -0.78074 - 0x3fe41272663d108c, 0xbfe8ec109b486c49, // 0.62725, -0.77882 - 0x3fe425ff178e6bb1, 0xbfe8dc45331698cc, // 0.62964, -0.77689 - 0x3fe4397f5b2a4380, 0xbfe8cc6a75184655, // 0.63202, -0.77495 - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301 - 0x3fe4605a692b32a2, 0xbfe8ac871ede1d88, // 0.63676, -0.77106 - 0x3fe473b51b987347, 0xbfe89c7e9a4dd4ab, // 0.63912, -0.7691 - 0x3fe48703306091fe, 0xbfe88c66e7481ba1, // 0.64148, -0.76714 - 0x3fe49a449b9b0938, 0xbfe87c400fba2ebf, // 0.64383, -0.76517 - 0x3fe4ad79516722f0, 0xbfe86c0a1d9aa195, // 0.64618, -0.76319 - 0x3fe4c0a145ec0004, 0xbfe85bc51ae958cc, // 0.64851, -0.7612 - 0x3fe4d3bc6d589f80, 0xbfe84b7111af83f9, // 0.65085, -0.75921 - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721 - 0x3fe4f9cc25cca486, 0xbfe82a9c13f545ff, // 0.65549, -0.7552 - 0x3fe50cc09f59a09b, 0xbfe81a1b33b57acc, // 0.65781, -0.75319 - 0x3fe51fa81cd99aa6, 0xbfe8098b756e52fa, // 0.66011, -0.75117 - 0x3fe5328292a35596, 0xbfe7f8ece3571771, // 0.66242, -0.74914 - 0x3fe5454ff5159dfb, 0xbfe7e83f87b03686, // 0.66471, -0.7471 - 0x3fe5581038975137, 0xbfe7d7836cc33db2, // 0.667, -0.74506 - 0x3fe56ac35197649e, 0xbfe7c6b89ce2d333, // 0.66928, -0.74301 - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095 - 0x3fe59001d5f723df, 0xbfe7a4f707bf97d2, // 0.67383, -0.73889 - 0x3fe5a28d2a5d7250, 0xbfe79400574f55e4, // 0.67609, -0.73682 - 0x3fe5b50b264f7448, 0xbfe782fb1b90b35b, // 0.67835, -0.73474 - 0x3fe5c77bbe65018c, 0xbfe771e75f037261, // 0.6806, -0.73265 - 0x3fe5d9dee73e345c, 0xbfe760c52c304764, // 0.68285, -0.73056 - 0x3fe5ec3495837074, 0xbfe74f948da8d28d, // 0.68508, -0.72846 - 0x3fe5fe7cbde56a0f, 0xbfe73e558e079942, // 0.68732, -0.72636 - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425 - 0x3fe622e44fec22ff, 0xbfe71bac960e41bf, // 0.69176, -0.72213 - 0x3fe63503a31c1be8, 0xbfe70a42b3176d7a, // 0.69397, -0.72 - 0x3fe64715437f535b, 0xbfe6f8ca99c95b75, // 0.69618, -0.71787 - 0x3fe6591925f0783e, 0xbfe6e74454eaa8ae, // 0.69838, -0.71573 - 0x3fe66b0f3f52b386, 0xbfe6d5afef4aafcc, // 0.70057, -0.71358 - 0x3fe67cf78491af10, 0xbfe6c40d73c18275, // 0.70275, -0.71143 - 0x3fe68ed1eaa19c71, 0xbfe6b25ced2fe29c, // 0.70493, -0.70927 - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711 - 0x3fe6b25ced2fe29c, 0xbfe68ed1eaa19c71, // 0.70927, -0.70493 - 0x3fe6c40d73c18275, 0xbfe67cf78491af10, // 0.71143, -0.70275 - 0x3fe6d5afef4aafcc, 0xbfe66b0f3f52b386, // 0.71358, -0.70057 - 0x3fe6e74454eaa8ae, 0xbfe6591925f0783e, // 0.71573, -0.69838 - 0x3fe6f8ca99c95b75, 0xbfe64715437f535b, // 0.71787, -0.69618 - 0x3fe70a42b3176d7a, 0xbfe63503a31c1be8, // 0.72, -0.69397 - 0x3fe71bac960e41bf, 0xbfe622e44fec22ff, // 0.72213, -0.69176 - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954 - 0x3fe73e558e079942, 0xbfe5fe7cbde56a0f, // 0.72636, -0.68732 - 0x3fe74f948da8d28d, 0xbfe5ec3495837074, // 0.72846, -0.68508 - 0x3fe760c52c304764, 0xbfe5d9dee73e345c, // 0.73056, -0.68285 - 0x3fe771e75f037261, 0xbfe5c77bbe65018c, // 0.73265, -0.6806 - 0x3fe782fb1b90b35b, 0xbfe5b50b264f7448, // 0.73474, -0.67835 - 0x3fe79400574f55e4, 0xbfe5a28d2a5d7250, // 0.73682, -0.67609 - 0x3fe7a4f707bf97d2, 0xbfe59001d5f723df, // 0.73889, -0.67383 - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156 - 0x3fe7c6b89ce2d333, 0xbfe56ac35197649e, // 0.74301, -0.66928 - 0x3fe7d7836cc33db2, 0xbfe5581038975137, // 0.74506, -0.667 - 0x3fe7e83f87b03686, 0xbfe5454ff5159dfb, // 0.7471, -0.66471 - 0x3fe7f8ece3571771, 0xbfe5328292a35596, // 0.74914, -0.66242 - 0x3fe8098b756e52fa, 0xbfe51fa81cd99aa6, // 0.75117, -0.66011 - 0x3fe81a1b33b57acc, 0xbfe50cc09f59a09b, // 0.75319, -0.65781 - 0x3fe82a9c13f545ff, 0xbfe4f9cc25cca486, // 0.7552, -0.65549 - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317 - 0x3fe84b7111af83f9, 0xbfe4d3bc6d589f80, // 0.75921, -0.65085 - 0x3fe85bc51ae958cc, 0xbfe4c0a145ec0004, // 0.7612, -0.64851 - 0x3fe86c0a1d9aa195, 0xbfe4ad79516722f0, // 0.76319, -0.64618 - 0x3fe87c400fba2ebf, 0xbfe49a449b9b0938, // 0.76517, -0.64383 - 0x3fe88c66e7481ba1, 0xbfe48703306091fe, // 0.76714, -0.64148 - 0x3fe89c7e9a4dd4ab, 0xbfe473b51b987347, // 0.7691, -0.63912 - 0x3fe8ac871ede1d88, 0xbfe4605a692b32a2, // 0.77106, -0.63676 - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439 - 0x3fe8cc6a75184655, 0xbfe4397f5b2a4380, // 0.77495, -0.63202 - 0x3fe8dc45331698cc, 0xbfe425ff178e6bb1, // 0.77689, -0.62964 - 0x3fe8ec109b486c49, 0xbfe41272663d108c, // 0.77882, -0.62725 - 0x3fe8fbcca3ef940d, 0xbfe3fed9534556d4, // 0.78074, -0.62486 - 0x3fe90b7943575efe, 0xbfe3eb33eabe0680, // 0.78265, -0.62246 - 0x3fe91b166fd49da2, 0xbfe3d78238c58343, // 0.78456, -0.62006 - 0x3fe92aa41fc5a815, 0xbfe3c3c44981c517, // 0.78646, -0.61765 - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523 - 0x3fe94990e3ac4a6c, 0xbfe39c23e3d63029, // 0.79023, -0.61281 - 0x3fe958efe48e6dd7, 0xbfe3884185dfeb22, // 0.79211, -0.61038 - 0x3fe9683f42bd7fe1, 0xbfe374531b817f8d, // 0.79398, -0.60795 - 0x3fe9777ef4c7d742, 0xbfe36058b10659f3, // 0.79584, -0.60551 - 0x3fe986aef1457594, 0xbfe34c5252c14de1, // 0.79769, -0.60307 - 0x3fe995cf2ed80d22, 0xbfe338400d0c8e57, // 0.79954, -0.60062 - 0x3fe9a4dfa42b06b2, 0xbfe32421ec49a620, // 0.80138, -0.59816 - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957 - 0x3fe9c2d110f075c3, 0xbfe2fbc24b441015, // 0.80503, -0.59323 - 0x3fe9d1b1f5ea80d6, 0xbfe2e780e3e8ea16, // 0.80685, -0.59076 - 0x3fe9e082edb42472, 0xbfe2d333d34e9bb7, // 0.80866, -0.58828 - 0x3fe9ef43ef29af94, 0xbfe2bedb25faf3ea, // 0.81046, -0.5858 - 0x3fe9fdf4f13149de, 0xbfe2aa76e87aeb58, // 0.81225, -0.58331 - 0x3fea0c95eabaf937, 0xbfe2960727629ca8, // 0.81404, -0.58081 - 0x3fea1b26d2c0a75e, 0xbfe2818bef4d3cba, // 0.81581, -0.57831 - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581 - 0x3fea38184a593bc6, 0xbfe258734cbb7110, // 0.81935, -0.5733 - 0x3fea4678c8119ac8, 0xbfe243d5fb98ac1f, // 0.8211, -0.57078 - 0x3fea54c91090f524, 0xbfe22f2d662c13e1, // 0.82285, -0.56826 - 0x3fea63091b02fae2, 0xbfe21a799933eb58, // 0.82459, -0.56573 - 0x3fea7138de9d60f5, 0xbfe205baa17560d6, // 0.82632, -0.5632 - 0x3fea7f58529fe69d, 0xbfe1f0f08bbc861b, // 0.82805, -0.56066 - 0x3fea8d676e545ad2, 0xbfe1dc1b64dc4872, // 0.82976, -0.55812 - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557 - 0x3feaa9547a2cb98e, 0xbfe1b250171373be, // 0.83317, -0.55302 - 0x3feab7325916c0d4, 0xbfe19d5a09f2b9b8, // 0.83486, -0.55046 - 0x3feac4ffbd3efac8, 0xbfe188591f3a46e5, // 0.83655, -0.54789 - 0x3fead2bc9e21d511, 0xbfe1734d63dedb49, // 0.83822, -0.54532 - 0x3feae068f345ecef, 0xbfe15e36e4dbe2bc, // 0.83989, -0.54275 - 0x3feaee04b43c1474, 0xbfe14915af336ceb, // 0.84155, -0.54017 - 0x3feafb8fd89f57b6, 0xbfe133e9cfee254e, // 0.84321, -0.53759 - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535 - 0x3feb16742a4ca2f5, 0xbfe1097248d0a956, // 0.84649, -0.5324 - 0x3feb23cd470013b4, 0xbfe0f426bb2a8e7d, // 0.84812, -0.5298 - 0x3feb3115a5f37bf4, 0xbfe0ded0b84bc4b5, // 0.84974, -0.5272 - 0x3feb3e4d3ef55712, 0xbfe0c9704d5d898f, // 0.85136, -0.52459 - 0x3feb4b7409de7925, 0xbfe0b405878f85ec, // 0.85296, -0.52198 - 0x3feb5889fe921405, 0xbfe09e907417c5e1, // 0.85456, -0.51936 - 0x3feb658f14fdbc47, 0xbfe089112032b08c, // 0.85615, -0.51673 - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141 - 0x3feb7f6686e792ea, 0xbfe05df3ec31b8b6, // 0.8593, -0.51147 - 0x3feb8c38d27504e9, 0xbfe0485626ae221a, // 0.86087, -0.50883 - 0x3feb98fa1fd9155e, 0xbfe032ae55edbd95, // 0.86242, -0.50619 - 0x3feba5aa673590d2, 0xbfe01cfc874c3eb7, // 0.86397, -0.50354 - 0x3febb249a0b6c40d, 0xbfe00740c82b82e0, // 0.86551, -0.50089 - 0x3febbed7c49380ea, 0xbfdfe2f64be7120f, // 0.86705, -0.49823 - 0x3febcb54cb0d2327, 0xbfdfb7575c24d2de, // 0.86857, -0.49557 - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929 - 0x3febe41b611154c1, 0xbfdf5fdee656cda3, // 0.8716, -0.49023 - 0x3febf064e15377dd, 0xbfdf3405963fd068, // 0.87309, -0.48755 - 0x3febfc9d25a1b147, 0xbfdf081906bff7fd, // 0.87459, -0.48487 - 0x3fec08c426725549, 0xbfdedc1952ef78d5, // 0.87607, -0.48218 - 0x3fec14d9dc465e58, 0xbfdeb00695f25620, // 0.87755, -0.47949 - 0x3fec20de3fa971b0, 0xbfde83e0eaf85113, // 0.87901, -0.4768 - 0x3fec2cd14931e3f1, 0xbfde57a86d3cd824, // 0.88047, -0.4741 - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714 - 0x3fec44833141c004, 0xbfddfeff66a941de, // 0.88336, -0.46869 - 0x3fec5042012b6907, 0xbfddd28f1481cc58, // 0.8848, -0.46598 - 0x3fec5bef59fef85a, 0xbfdda60c5cfa10d8, // 0.88622, -0.46326 - 0x3fec678b3488739b, 0xbfdd79775b86e389, // 0.88764, -0.46054 - 0x3fec7315899eaad7, 0xbfdd4cd02ba8609c, // 0.88905, -0.45781 - 0x3fec7e8e52233cf3, 0xbfdd2016e8e9db5b, // 0.89045, -0.45508 - 0x3fec89f587029c13, 0xbfdcf34baee1cd21, // 0.89184, -0.45235 - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961 - 0x3feca08f19b9c449, 0xbfdc997fc3865388, // 0.8946, -0.44687 - 0x3fecabc169a0b901, 0xbfdc6c7f4997000a, // 0.89597, -0.44412 - 0x3fecb6e20a00da99, 0xbfdc3f6d47263129, // 0.89732, -0.44137 - 0x3fecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // 0.89867, -0.43862 - 0x3fecccee20c2de9f, 0xbfdbe51517ffc0d9, // 0.90002, -0.43586 - 0x3fecd7d9898b32f6, 0xbfdbb7cf2304bd01, // 0.90135, -0.43309 - 0x3fece2b32799a060, 0xbfdb8a7814fd5693, // 0.90267, -0.43033 - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756 - 0x3fecf830e8ce467b, 0xbfdb2f971db31972, // 0.9053, -0.42478 - 0x3fed02d4feb2bd92, 0xbfdb020d6c7f4009, // 0.9066, -0.422 - 0x3fed0d672f59d2b9, 0xbfdad473125cdc08, // 0.90789, -0.41922 - 0x3fed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // 0.90917, -0.41643 - 0x3fed2255c6e5a4e1, 0xbfda790cd3dbf31a, // 0.91044, -0.41364 - 0x3fed2cb220e0ef9f, 0xbfda4b4127dea1e4, // 0.91171, -0.41084 - 0x3fed36fc7bcbfbdc, 0xbfda1d6543b50ac0, // 0.91296, -0.40804 - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524 - 0x3fed4b5b1b187524, 0xbfd9c17d440df9f2, // 0.91545, -0.40243 - 0x3fed556f52e93eb1, 0xbfd993716141bdfe, // 0.91668, -0.39962 - 0x3fed5f7172888a7f, 0xbfd96555b7ab948f, // 0.9179, -0.39681 - 0x3fed696173c9e68b, 0xbfd9372a63bc93d7, // 0.91911, -0.39399 - 0x3fed733f508c0dff, 0xbfd908ef81ef7bd1, // 0.92032, -0.39117 - 0x3fed7d0b02b8ecf9, 0xbfd8daa52ec8a4af, // 0.92151, -0.38835 - 0x3fed86c48445a450, 0xbfd8ac4b86d5ed44, // 0.9227, -0.38552 - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268 - 0x3fed9a00dd8b3d46, 0xbfd84f6aaaf3903f, // 0.92505, -0.37985 - 0x3feda383a9668988, 0xbfd820e3b04eaac4, // 0.92621, -0.37701 - 0x3fedacf42ce68ab9, 0xbfd7f24dd37341e3, // 0.92736, -0.37416 - 0x3fedb6526238a09b, 0xbfd7c3a9311dcce7, // 0.92851, -0.37132 - 0x3fedbf9e4395759a, 0xbfd794f5e613dfae, // 0.92964, -0.36847 - 0x3fedc8d7cb410260, 0xbfd766340f2418f6, // 0.93077, -0.36561 - 0x3fedd1fef38a915a, 0xbfd73763c9261092, // 0.93188, -0.36276 - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599 - 0x3fede4160f6d8d81, 0xbfd6d998638a0cb5, // 0.93409, -0.35703 - 0x3feded05f7de47da, 0xbfd6aa9d7dc77e16, // 0.93518, -0.35416 - 0x3fedf5e36a9ba59c, 0xbfd67b949cad63ca, // 0.93627, -0.35129 - 0x3fedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // 0.93734, -0.34842 - 0x3fee0766d9280f54, 0xbfd61d595c88c203, // 0.9384, -0.34554 - 0x3fee100cca2980ac, 0xbfd5ee27379ea693, // 0.93946, -0.34266 - 0x3fee18a02fdc66d9, 0xbfd5bee78b9db3b6, // 0.94051, -0.33978 - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689 - 0x3fee298f4439197a, 0xbfd5604012f467b4, // 0.94257, -0.334 - 0x3fee31eae870ce25, 0xbfd530d880af3c24, // 0.94359, -0.33111 - 0x3fee3a33ec75ce85, 0xbfd50163dc197047, // 0.9446, -0.32821 - 0x3fee426a4b2bc17e, 0xbfd4d1e24278e76a, // 0.94561, -0.32531 - 0x3fee4a8dff81ce5e, 0xbfd4a253d11b82f3, // 0.9466, -0.32241 - 0x3fee529f04729ffc, 0xbfd472b8a5571054, // 0.94759, -0.3195 - 0x3fee5a9d550467d3, 0xbfd44310dc8936f0, // 0.94856, -0.31659 - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368 - 0x3fee6a61c55d53a7, 0xbfd3e39be96ec271, // 0.95049, -0.31077 - 0x3fee7227db6a9744, 0xbfd3b3cefa0414b7, // 0.95144, -0.30785 - 0x3fee79db29a5165a, 0xbfd383f5e353b6aa, // 0.95238, -0.30493 - 0x3fee817bab4cd10d, 0xbfd35410c2e18152, // 0.95331, -0.30201 - 0x3fee89095bad6025, 0xbfd3241fb638baaf, // 0.95423, -0.29908 - 0x3fee9084361df7f3, 0xbfd2f422daec0386, // 0.95514, -0.29615 - 0x3fee97ec36016b30, 0xbfd2c41a4e954520, // 0.95605, -0.29322 - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028 - 0x3feea68393e65800, 0xbfd263e6995554ba, // 0.95783, -0.28735 - 0x3feeadb2e8e7a88e, 0xbfd233bbabc3bb72, // 0.9587, -0.28441 - 0x3feeb4cf515b8811, 0xbfd2038583d727bd, // 0.95957, -0.28146 - 0x3feebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // 0.96043, -0.27852 - 0x3feec2cf4b1af6b2, 0xbfd1a2f7fbe8f243, // 0.96128, -0.27557 - 0x3feec9b2d3c3bf84, 0xbfd172a0d7765177, // 0.96212, -0.27262 - 0x3feed0835e999009, 0xbfd1423eefc69378, // 0.96295, -0.26967 - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671 - 0x3feeddeb6a078651, 0xbfd0e15b4e1749cd, // 0.96459, -0.26375 - 0x3feee482e25a9dbc, 0xbfd0b0d9cfdbdb90, // 0.96539, -0.26079 - 0x3feeeb074c50a544, 0xbfd0804e05eb661e, // 0.96619, -0.25783 - 0x3feef178a3e473c2, 0xbfd04fb80e37fdae, // 0.96698, -0.25487 - 0x3feef7d6e51ca3c0, 0xbfd01f1806b9fdd2, // 0.96775, -0.2519 - 0x3feefe220c0b95ec, 0xbfcfdcdc1adfedf8, // 0.96852, -0.24893 - 0x3fef045a14cf738c, 0xbfcf7b7480bd3801, // 0.96928, -0.24596 - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298 - 0x3fef1090bc898f5f, 0xbfceb86b462de348, // 0.97077, -0.24 - 0x3fef168f53f7205d, 0xbfce56ca1e101a1b, // 0.9715, -0.23702 - 0x3fef1c7abe284708, 0xbfcdf5163f01099a, // 0.97223, -0.23404 - 0x3fef2252f7763ada, 0xbfcd934fe5454311, // 0.97294, -0.23106 - 0x3fef2817fc4609ce, 0xbfcd31774d2cbdee, // 0.97364, -0.22807 - 0x3fef2dc9c9089a9d, 0xbfcccf8cb312b286, // 0.97434, -0.22508 - 0x3fef33685a3aaef0, 0xbfcc6d90535d74dc, // 0.97503, -0.22209 - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191 - 0x3fef3e6bbc1bbc65, 0xbfcba96334f15dad, // 0.97637, -0.21611 - 0x3fef43d085ff92dd, 0xbfcb4732ef3d6722, // 0.97703, -0.21311 - 0x3fef492206bcabb4, 0xbfcae4f1d5f3b9ab, // 0.97768, -0.21011 - 0x3fef4e603b0b2f2d, 0xbfca82a025b00451, // 0.97832, -0.20711 - 0x3fef538b1faf2d07, 0xbfca203e1b1831da, // 0.97895, -0.20411 - 0x3fef58a2b1789e84, 0xbfc9bdcbf2dc4366, // 0.97957, -0.2011 - 0x3fef5da6ed43685d, 0xbfc95b49e9b62af9, // 0.98018, -0.1981 - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509 - 0x3fef677556883cee, 0xbfc8961727c41804, // 0.98138, -0.19208 - 0x3fef6c3f7df5bbb7, 0xbfc83366e89c64c5, // 0.98196, -0.18907 - 0x3fef70f6434b7eb7, 0xbfc7d0a7bbd2cb1b, // 0.98254, -0.18606 - 0x3fef7599a3a12077, 0xbfc76dd9de50bf31, // 0.98311, -0.18304 - 0x3fef7a299c1a322a, 0xbfc70afd8d08c4ff, // 0.98366, -0.18002 - 0x3fef7ea629e63d6e, 0xbfc6a81304f64ab2, // 0.98421, -0.177 - 0x3fef830f4a40c60c, 0xbfc6451a831d830d, // 0.98475, -0.17398 - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096 - 0x3fef8ba737cb4b78, 0xbfc57f008654cbde, // 0.9858, -0.16794 - 0x3fef8fd5ffae41db, 0xbfc51bdf8597c5f2, // 0.98631, -0.16491 - 0x3fef93f14f85ac08, 0xbfc4b8b17f79fa88, // 0.98681, -0.16189 - 0x3fef97f924c9099b, 0xbfc45576b1293e5a, // 0.9873, -0.15886 - 0x3fef9bed7cfbde29, 0xbfc3f22f57db4893, // 0.98778, -0.15583 - 0x3fef9fce55adb2c8, 0xbfc38edbb0cd8d14, // 0.98826, -0.1528 - 0x3fefa39bac7a1791, 0xbfc32b7bf94516a7, // 0.98872, -0.14976 - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673 - 0x3fefaafbcb0cfddc, 0xbfc264994dfd340a, // 0.98962, -0.1437 - 0x3fefae8e8e46cfbb, 0xbfc20116d4ec7bce, // 0.99006, -0.14066 - 0x3fefb20dc681d54d, 0xbfc19d8940be24e7, // 0.99049, -0.13762 - 0x3fefb5797195d741, 0xbfc139f0cedaf576, // 0.9909, -0.13458 - 0x3fefb8d18d66adb7, 0xbfc0d64dbcb26786, // 0.99131, -0.13154 - 0x3fefbc1617e44186, 0xbfc072a047ba831d, // 0.99171, -0.1285 - 0x3fefbf470f0a8d88, 0xbfc00ee8ad6fb85b, // 0.9921, -0.12545 - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241 - 0x3fefc56e3b7d9af6, 0xbfbe8eb7fde4aa3e, // 0.99285, -0.11937 - 0x3fefc8646cfeb721, 0xbfbdc70ecbae9fc8, // 0.99321, -0.11632 - 0x3fefcb4703914354, 0xbfbcff533b307dc1, // 0.99356, -0.11327 - 0x3fefce15fd6da67b, 0xbfbc3785c79ec2d5, // 0.99391, -0.11022 - 0x3fefd0d158d86087, 0xbfbb6fa6ec38f64c, // 0.99424, -0.10717 - 0x3fefd37914220b84, 0xbfbaa7b724495c04, // 0.99456, -0.10412 - 0x3fefd60d2da75c9e, 0xbfb9dfb6eb24a85c, // 0.99488, -0.10107 - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518, -0.098017 - 0x3fefdafa7514538c, 0xbfb84f8712c130a0, // 0.99548, -0.094963 - 0x3fefdd539ff1f456, 0xbfb787586a5d5b21, // 0.99577, -0.091909 - 0x3fefdf9922f73307, 0xbfb6bf1b3e79b129, // 0.99604, -0.088854 - 0x3fefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // 0.99631, -0.085797 - 0x3fefe3e92be9d886, 0xbfb52e774a4d4d0a, // 0.99657, -0.08274 - 0x3fefe5f3af2e3940, 0xbfb4661179272096, // 0.99682, -0.079682 - 0x3fefe7ea85482d60, 0xbfb39d9f12c5a299, // 0.99706, -0.076624 - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729, -0.073565 - 0x3fefeb9d2530410f, 0xbfb20c9674ed444c, // 0.99751, -0.070505 - 0x3fefed58ecb673c4, 0xbfb1440134d709b2, // 0.99772, -0.067444 - 0x3fefef0102826191, 0xbfb07b614e463064, // 0.99793, -0.064383 - 0x3feff095658e71ad, 0xbfaf656e79f820e0, // 0.99812, -0.061321 - 0x3feff21614e131ed, 0xbfadd406f9808ec8, // 0.9983, -0.058258 - 0x3feff3830f8d575c, 0xbfac428d12c0d7e3, // 0.99848, -0.055195 - 0x3feff4dc54b1bed3, 0xbfaab101bd5f8317, // 0.99864, -0.052132 - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988, -0.049068 - 0x3feff753bb1b9164, 0xbfa78dbaa5874685, // 0.99894, -0.046003 - 0x3feff871dadb81df, 0xbfa5fc00d290cd43, // 0.99908, -0.042938 - 0x3feff97c4208c014, 0xbfa46a396ff86179, // 0.9992, -0.039873 - 0x3feffa72effef75d, 0xbfa2d865759455cd, // 0.99932, -0.036807 - 0x3feffb55e425fdae, 0xbfa14685db42c17e, // 0.99943, -0.033741 - 0x3feffc251df1d3f8, 0xbf9f693731d1cf01, // 0.99953, -0.030675 - 0x3feffce09ce2a679, 0xbf9c454f4ce53b1c, // 0.99962, -0.027608 - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997, -0.024541 - 0x3feffe1c6870cb77, 0xbf95fd4d21fab226, // 0.99977, -0.021474 - 0x3feffe9cb44b51a1, 0xbf92d936bbe30efd, // 0.99983, -0.018407 - 0x3fefff0943c53bd1, 0xbf8f6a296ab997ca, // 0.99988, -0.015339 - 0x3fefff62169b92db, 0xbf8921d1fcdec784, // 0.99992, -0.012272 - 0x3fefffa72c978c4f, 0xbf82d96b0e509703, // 0.99996,-0.0092038 - 0x3fefffd8858e8a92, 0xbf7921f0fe670071, // 0.99998,-0.0061359 - 0x3feffff621621d02, 0xbf6921f8becca4ba, // 1, -0.003068 - -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_4096) -/** - @par - Example code for Double Precision 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, PI = 3.14159265358979 - @par - Cos and Sin values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_4096[8192] = { - 0x3ff0000000000000, 0x0000000000000000, // 1, 0 - 0x3feffffd88586ee6, 0x3f5921faaee6472d, // 1, 0.001534 - 0x3feffff621621d02, 0x3f6921f8becca4ba, // 1, 0.003068 - 0x3fefffe9cb1e2e8d, 0x3f72d97822f996bc, // 0.99999, 0.0046019 - 0x3fefffd8858e8a92, 0x3f7921f0fe670071, // 0.99998, 0.0061359 - 0x3fefffc250b5daef, 0x3f7f6a65f9a2a3c5, // 0.99997, 0.0076698 - 0x3fefffa72c978c4f, 0x3f82d96b0e509703, // 0.99996, 0.0092038 - 0x3fefff871937ce2f, 0x3f85fda037ac05e0, // 0.99994, 0.010738 - 0x3fefff62169b92db, 0x3f8921d1fcdec784, // 0.99992, 0.012272 - 0x3fefff3824c88f6f, 0x3f8c45ffe1e48ad9, // 0.9999, 0.013805 - 0x3fefff0943c53bd1, 0x3f8f6a296ab997ca, // 0.99988, 0.015339 - 0x3feffed57398d2b7, 0x3f9147270dad7132, // 0.99986, 0.016873 - 0x3feffe9cb44b51a1, 0x3f92d936bbe30efd, // 0.99983, 0.018407 - 0x3feffe5f05e578db, 0x3f946b4381fce81c, // 0.9998, 0.01994 - 0x3feffe1c6870cb77, 0x3f95fd4d21fab226, // 0.99977, 0.021474 - 0x3feffdd4dbf78f52, 0x3f978f535ddc9f03, // 0.99974, 0.023008 - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541 - 0x3feffd36f624500c, 0x3f9ab354b1504fca, // 0.99966, 0.026075 - 0x3feffce09ce2a679, 0x3f9c454f4ce53b1c, // 0.99962, 0.027608 - 0x3feffc8554cd213a, 0x3f9dd7458c64ab39, // 0.99958, 0.029142 - 0x3feffc251df1d3f8, 0x3f9f693731d1cf01, // 0.99953, 0.030675 - 0x3feffbbff85f9515, 0x3fa07d91ff984580, // 0.99948, 0.032208 - 0x3feffb55e425fdae, 0x3fa14685db42c17e, // 0.99943, 0.033741 - 0x3feffae6e1556998, 0x3fa20f770ceb11c6, // 0.99938, 0.035274 - 0x3feffa72effef75d, 0x3fa2d865759455cd, // 0.99932, 0.036807 - 0x3feff9fa10348837, 0x3fa3a150f6421afc, // 0.99926, 0.03834 - 0x3feff97c4208c014, 0x3fa46a396ff86179, // 0.9992, 0.039873 - 0x3feff8f9858f058b, 0x3fa5331ec3bba0eb, // 0.99914, 0.041406 - 0x3feff871dadb81df, 0x3fa5fc00d290cd43, // 0.99908, 0.042938 - 0x3feff7e5420320f9, 0x3fa6c4df7d7d5b84, // 0.99901, 0.044471 - 0x3feff753bb1b9164, 0x3fa78dbaa5874685, // 0.99894, 0.046003 - 0x3feff6bd463b444d, 0x3fa856922bb513c1, // 0.99887, 0.047535 - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068 - 0x3feff58192ee0358, 0x3fa9e835d6993c87, // 0.99872, 0.0506 - 0x3feff4dc54b1bed3, 0x3faab101bd5f8317, // 0.99864, 0.052132 - 0x3feff43228de1b77, 0x3fab79c986698b78, // 0.99856, 0.053664 - 0x3feff3830f8d575c, 0x3fac428d12c0d7e3, // 0.99848, 0.055195 - 0x3feff2cf08da7321, 0x3fad0b4c436f91d0, // 0.99839, 0.056727 - 0x3feff21614e131ed, 0x3fadd406f9808ec8, // 0.9983, 0.058258 - 0x3feff15833be1965, 0x3fae9cbd15ff5527, // 0.99821, 0.05979 - 0x3feff095658e71ad, 0x3faf656e79f820e0, // 0.99812, 0.061321 - 0x3fefefcdaa704562, 0x3fb0170d833bf421, // 0.99802, 0.062852 - 0x3fefef0102826191, 0x3fb07b614e463064, // 0.99793, 0.064383 - 0x3fefee2f6de455ba, 0x3fb0dfb28ea201e6, // 0.99783, 0.065913 - 0x3fefed58ecb673c4, 0x3fb1440134d709b2, // 0.99772, 0.067444 - 0x3fefec7d7f19cffc, 0x3fb1a84d316d4f8a, // 0.99762, 0.068974 - 0x3fefeb9d2530410f, 0x3fb20c9674ed444c, // 0.99751, 0.070505 - 0x3fefeab7df1c6005, 0x3fb270dcefdfc45b, // 0.9974, 0.072035 - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565 - 0x3fefe8de8f03d75c, 0x3fb339614e41ffa5, // 0.99718, 0.075094 - 0x3fefe7ea85482d60, 0x3fb39d9f12c5a299, // 0.99706, 0.076624 - 0x3fefe6f18ff42c84, 0x3fb401d9d0e3a507, // 0.99694, 0.078153 - 0x3fefe5f3af2e3940, 0x3fb4661179272096, // 0.99682, 0.079682 - 0x3fefe4f0e31d7a4a, 0x3fb4ca45fc1ba8b6, // 0.9967, 0.081211 - 0x3fefe3e92be9d886, 0x3fb52e774a4d4d0a, // 0.99657, 0.08274 - 0x3fefe2dc89bbff08, 0x3fb592a554489bc8, // 0.99644, 0.084269 - 0x3fefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // 0.99631, 0.085797 - 0x3fefe0b485181be3, 0x3fb65af75dd0f87b, // 0.99618, 0.087326 - 0x3fefdf9922f73307, 0x3fb6bf1b3e79b129, // 0.99604, 0.088854 - 0x3fefde78d68653fd, 0x3fb7233b9d236e71, // 0.99591, 0.090381 - 0x3fefdd539ff1f456, 0x3fb787586a5d5b21, // 0.99577, 0.091909 - 0x3fefdc297f674ba9, 0x3fb7eb7196b72ee4, // 0.99563, 0.093436 - 0x3fefdafa7514538c, 0x3fb84f8712c130a0, // 0.99548, 0.094963 - 0x3fefd9c68127c78c, 0x3fb8b398cf0c38e0, // 0.99533, 0.09649 - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017 - 0x3fefd74fdd40abbf, 0x3fb97bb0caaba56f, // 0.99503, 0.099544 - 0x3fefd60d2da75c9e, 0x3fb9dfb6eb24a85c, // 0.99488, 0.10107 - 0x3fefd4c59536fae4, 0x3fba43b90e27f3c4, // 0.99472, 0.1026 - 0x3fefd37914220b84, 0x3fbaa7b724495c04, // 0.99456, 0.10412 - 0x3fefd227aa9bd53b, 0x3fbb0bb11e1d5559, // 0.9944, 0.10565 - 0x3fefd0d158d86087, 0x3fbb6fa6ec38f64c, // 0.99424, 0.10717 - 0x3fefcf761f0c77a3, 0x3fbbd3987f31fa0e, // 0.99407, 0.1087 - 0x3fefce15fd6da67b, 0x3fbc3785c79ec2d5, // 0.99391, 0.11022 - 0x3fefccb0f4323aa3, 0x3fbc9b6eb6165c42, // 0.99374, 0.11175 - 0x3fefcb4703914354, 0x3fbcff533b307dc1, // 0.99356, 0.11327 - 0x3fefc9d82bc2915e, 0x3fbd633347858ce4, // 0.99339, 0.11479 - 0x3fefc8646cfeb721, 0x3fbdc70ecbae9fc8, // 0.99321, 0.11632 - 0x3fefc6ebc77f0887, 0x3fbe2ae5b8457f77, // 0.99303, 0.11784 - 0x3fefc56e3b7d9af6, 0x3fbe8eb7fde4aa3e, // 0.99285, 0.11937 - 0x3fefc3ebc935454c, 0x3fbef2858d27561b, // 0.99267, 0.12089 - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241 - 0x3fefc0d832bf043a, 0x3fbfba124b07ad85, // 0.99229, 0.12393 - 0x3fefbf470f0a8d88, 0x3fc00ee8ad6fb85b, // 0.9921, 0.12545 - 0x3fefbdb106021816, 0x3fc040c5bb67747e, // 0.99191, 0.12698 - 0x3fefbc1617e44186, 0x3fc072a047ba831d, // 0.99171, 0.1285 - 0x3fefba7644f068b5, 0x3fc0a4784ab8bf1d, // 0.99151, 0.13002 - 0x3fefb8d18d66adb7, 0x3fc0d64dbcb26786, // 0.99131, 0.13154 - 0x3fefb727f187f1c7, 0x3fc1082095f820b0, // 0.99111, 0.13306 - 0x3fefb5797195d741, 0x3fc139f0cedaf576, // 0.9909, 0.13458 - 0x3fefb3c60dd2c199, 0x3fc16bbe5fac5865, // 0.9907, 0.1361 - 0x3fefb20dc681d54d, 0x3fc19d8940be24e7, // 0.99049, 0.13762 - 0x3fefb0509be6f7db, 0x3fc1cf516a62a077, // 0.99027, 0.13914 - 0x3fefae8e8e46cfbb, 0x3fc20116d4ec7bce, // 0.99006, 0.14066 - 0x3fefacc79de6c44f, 0x3fc232d978aed413, // 0.98984, 0.14218 - 0x3fefaafbcb0cfddc, 0x3fc264994dfd340a, // 0.98962, 0.1437 - 0x3fefa92b1600657c, 0x3fc296564d2b953e, // 0.9894, 0.14521 - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673 - 0x3fefa57b066e2754, 0x3fc2f9c7aa7a72af, // 0.98895, 0.14825 - 0x3fefa39bac7a1791, 0x3fc32b7bf94516a7, // 0.98872, 0.14976 - 0x3fefa1b7717661d5, 0x3fc35d2d53440db2, // 0.98849, 0.15128 - 0x3fef9fce55adb2c8, 0x3fc38edbb0cd8d14, // 0.98826, 0.1528 - 0x3fef9de0596b77a3, 0x3fc3c0870a383ff6, // 0.98802, 0.15431 - 0x3fef9bed7cfbde29, 0x3fc3f22f57db4893, // 0.98778, 0.15583 - 0x3fef99f5c0abd496, 0x3fc423d4920e4166, // 0.98754, 0.15734 - 0x3fef97f924c9099b, 0x3fc45576b1293e5a, // 0.9873, 0.15886 - 0x3fef95f7a9a1ec47, 0x3fc48715ad84cdf5, // 0.98706, 0.16037 - 0x3fef93f14f85ac08, 0x3fc4b8b17f79fa88, // 0.98681, 0.16189 - 0x3fef91e616c43891, 0x3fc4ea4a1f624b61, // 0.98656, 0.1634 - 0x3fef8fd5ffae41db, 0x3fc51bdf8597c5f2, // 0.98631, 0.16491 - 0x3fef8dc10a95380d, 0x3fc54d71aa74ef02, // 0.98605, 0.16643 - 0x3fef8ba737cb4b78, 0x3fc57f008654cbde, // 0.9858, 0.16794 - 0x3fef898887a36c84, 0x3fc5b08c1192e381, // 0.98554, 0.16945 - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096 - 0x3fef853c9089595e, 0x3fc61399179a6e94, // 0.98501, 0.17247 - 0x3fef830f4a40c60c, 0x3fc6451a831d830d, // 0.98475, 0.17398 - 0x3fef80dd27ed8204, 0x3fc676987f7216b8, // 0.98448, 0.17549 - 0x3fef7ea629e63d6e, 0x3fc6a81304f64ab2, // 0.98421, 0.177 - 0x3fef7c6a50826840, 0x3fc6d98a0c08c8da, // 0.98394, 0.17851 - 0x3fef7a299c1a322a, 0x3fc70afd8d08c4ff, // 0.98366, 0.18002 - 0x3fef77e40d068a90, 0x3fc73c6d8055fe0a, // 0.98339, 0.18153 - 0x3fef7599a3a12077, 0x3fc76dd9de50bf31, // 0.98311, 0.18304 - 0x3fef734a60446279, 0x3fc79f429f59e11d, // 0.98282, 0.18455 - 0x3fef70f6434b7eb7, 0x3fc7d0a7bbd2cb1b, // 0.98254, 0.18606 - 0x3fef6e9d4d1262ca, 0x3fc802092c1d744b, // 0.98225, 0.18756 - 0x3fef6c3f7df5bbb7, 0x3fc83366e89c64c5, // 0.98196, 0.18907 - 0x3fef69dcd652f5de, 0x3fc864c0e9b2b6cf, // 0.98167, 0.19057 - 0x3fef677556883cee, 0x3fc8961727c41804, // 0.98138, 0.19208 - 0x3fef6508fef47bd5, 0x3fc8c7699b34ca7e, // 0.98108, 0.19359 - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509 - 0x3fef6021c9f148c2, 0x3fc92a0303c8194f, // 0.98048, 0.19659 - 0x3fef5da6ed43685d, 0x3fc95b49e9b62af9, // 0.98018, 0.1981 - 0x3fef5b273a4fa2d9, 0x3fc98c8ce69a7aec, // 0.97988, 0.1996 - 0x3fef58a2b1789e84, 0x3fc9bdcbf2dc4366, // 0.97957, 0.2011 - 0x3fef56195321c090, 0x3fc9ef0706e35a35, // 0.97926, 0.20261 - 0x3fef538b1faf2d07, 0x3fca203e1b1831da, // 0.97895, 0.20411 - 0x3fef50f81785c6b9, 0x3fca517127e3dabc, // 0.97863, 0.20561 - 0x3fef4e603b0b2f2d, 0x3fca82a025b00451, // 0.97832, 0.20711 - 0x3fef4bc38aa5c694, 0x3fcab3cb0ce6fe44, // 0.978, 0.20861 - 0x3fef492206bcabb4, 0x3fcae4f1d5f3b9ab, // 0.97768, 0.21011 - 0x3fef467bafb7bbe0, 0x3fcb16147941ca2a, // 0.97735, 0.21161 - 0x3fef43d085ff92dd, 0x3fcb4732ef3d6722, // 0.97703, 0.21311 - 0x3fef412089fd8adc, 0x3fcb784d30536cda, // 0.9767, 0.21461 - 0x3fef3e6bbc1bbc65, 0x3fcba96334f15dad, // 0.97637, 0.21611 - 0x3fef3bb21cc4fe47, 0x3fcbda74f5856330, // 0.97604, 0.2176 - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191 - 0x3fef36306b67c556, 0x3fcc3c8b8c4b9dd7, // 0.97536, 0.2206 - 0x3fef33685a3aaef0, 0x3fcc6d90535d74dc, // 0.97503, 0.22209 - 0x3fef309b794b719f, 0x3fcc9e90b824a6a9, // 0.97468, 0.22359 - 0x3fef2dc9c9089a9d, 0x3fcccf8cb312b286, // 0.97434, 0.22508 - 0x3fef2af349e17507, 0x3fcd00843c99c5f9, // 0.97399, 0.22658 - 0x3fef2817fc4609ce, 0x3fcd31774d2cbdee, // 0.97364, 0.22807 - 0x3fef2537e0a71f9f, 0x3fcd6265dd3f27e3, // 0.97329, 0.22957 - 0x3fef2252f7763ada, 0x3fcd934fe5454311, // 0.97294, 0.23106 - 0x3fef1f6941259d7a, 0x3fcdc4355db40195, // 0.97258, 0.23255 - 0x3fef1c7abe284708, 0x3fcdf5163f01099a, // 0.97223, 0.23404 - 0x3fef19876ef1f486, 0x3fce25f281a2b684, // 0.97187, 0.23553 - 0x3fef168f53f7205d, 0x3fce56ca1e101a1b, // 0.9715, 0.23702 - 0x3fef13926dad024e, 0x3fce879d0cc0fdaf, // 0.97114, 0.23851 - 0x3fef1090bc898f5f, 0x3fceb86b462de348, // 0.97077, 0.24 - 0x3fef0d8a410379c5, 0x3fcee934c2d006c7, // 0.9704, 0.24149 - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298 - 0x3fef076eecade0fa, 0x3fcf4ab9679c9f5c, // 0.96966, 0.24447 - 0x3fef045a14cf738c, 0x3fcf7b7480bd3801, // 0.96928, 0.24596 - 0x3fef014074708ed3, 0x3fcfac2abeff57ff, // 0.9689, 0.24744 - 0x3feefe220c0b95ec, 0x3fcfdcdc1adfedf8, // 0.96852, 0.24893 - 0x3feefafedc1ba8b7, 0x3fd006c4466e54af, // 0.96814, 0.25041 - 0x3feef7d6e51ca3c0, 0x3fd01f1806b9fdd2, // 0.96775, 0.2519 - 0x3feef4aa278b2032, 0x3fd037694a928cac, // 0.96737, 0.25338 - 0x3feef178a3e473c2, 0x3fd04fb80e37fdae, // 0.96698, 0.25487 - 0x3feeee425aa6b09a, 0x3fd068044deab002, // 0.96658, 0.25635 - 0x3feeeb074c50a544, 0x3fd0804e05eb661e, // 0.96619, 0.25783 - 0x3feee7c77961dc9e, 0x3fd09895327b465e, // 0.96579, 0.25931 - 0x3feee482e25a9dbc, 0x3fd0b0d9cfdbdb90, // 0.96539, 0.26079 - 0x3feee13987bbebdc, 0x3fd0c91bda4f158d, // 0.96499, 0.26227 - 0x3feeddeb6a078651, 0x3fd0e15b4e1749cd, // 0.96459, 0.26375 - 0x3feeda9889bfe86a, 0x3fd0f998277733f7, // 0.96418, 0.26523 - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671 - 0x3feed3e483849c51, 0x3fd12a09fc0b1b12, // 0.96337, 0.26819 - 0x3feed0835e999009, 0x3fd1423eefc69378, // 0.96295, 0.26967 - 0x3feecd1d792c8f10, 0x3fd15a713a28b9d9, // 0.96254, 0.27115 - 0x3feec9b2d3c3bf84, 0x3fd172a0d7765177, // 0.96212, 0.27262 - 0x3feec6436ee60309, 0x3fd18acdc3f4873a, // 0.9617, 0.2741 - 0x3feec2cf4b1af6b2, 0x3fd1a2f7fbe8f243, // 0.96128, 0.27557 - 0x3feebf5668eaf2ef, 0x3fd1bb1f7b999480, // 0.96086, 0.27705 - 0x3feebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // 0.96043, 0.27852 - 0x3feeb8566b810f2a, 0x3fd1eb6643499fbb, // 0.96, 0.27999 - 0x3feeb4cf515b8811, 0x3fd2038583d727bd, // 0.95957, 0.28146 - 0x3feeb1437af9bb34, 0x3fd21ba1fd3d2623, // 0.95914, 0.28294 - 0x3feeadb2e8e7a88e, 0x3fd233bbabc3bb72, // 0.9587, 0.28441 - 0x3feeaa1d9bb20af3, 0x3fd24bd28bb37672, // 0.95827, 0.28588 - 0x3feea68393e65800, 0x3fd263e6995554ba, // 0.95783, 0.28735 - 0x3feea2e4d212c000, 0x3fd27bf7d0f2c346, // 0.95738, 0.28882 - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028 - 0x3fee9b99229046f8, 0x3fd2ac11af483572, // 0.95649, 0.29175 - 0x3fee97ec36016b30, 0x3fd2c41a4e954520, // 0.95605, 0.29322 - 0x3fee943a91aab4b4, 0x3fd2dc200907fe51, // 0.95559, 0.29469 - 0x3fee9084361df7f3, 0x3fd2f422daec0386, // 0.95514, 0.29615 - 0x3fee8cc923edc388, 0x3fd30c22c08d6a13, // 0.95469, 0.29762 - 0x3fee89095bad6025, 0x3fd3241fb638baaf, // 0.95423, 0.29908 - 0x3fee8544ddf0d075, 0x3fd33c19b83af207, // 0.95377, 0.30054 - 0x3fee817bab4cd10d, 0x3fd35410c2e18152, // 0.95331, 0.30201 - 0x3fee7dadc456d850, 0x3fd36c04d27a4edf, // 0.95284, 0.30347 - 0x3fee79db29a5165a, 0x3fd383f5e353b6aa, // 0.95238, 0.30493 - 0x3fee7603dbce74e9, 0x3fd39be3f1bc8aef, // 0.95191, 0.30639 - 0x3fee7227db6a9744, 0x3fd3b3cefa0414b7, // 0.95144, 0.30785 - 0x3fee6e472911da27, 0x3fd3cbb6f87a146e, // 0.95096, 0.30931 - 0x3fee6a61c55d53a7, 0x3fd3e39be96ec271, // 0.95049, 0.31077 - 0x3fee6677b0e6d31e, 0x3fd3fb7dc932cfa4, // 0.95001, 0.31222 - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368 - 0x3fee5e95781ebf1c, 0x3fd42b38466e2928, // 0.94905, 0.31514 - 0x3fee5a9d550467d3, 0x3fd44310dc8936f0, // 0.94856, 0.31659 - 0x3fee56a083968eb1, 0x3fd45ae652bb2800, // 0.94807, 0.31805 - 0x3fee529f04729ffc, 0x3fd472b8a5571054, // 0.94759, 0.3195 - 0x3fee4e98d836c0af, 0x3fd48a87d0b07fd7, // 0.94709, 0.32096 - 0x3fee4a8dff81ce5e, 0x3fd4a253d11b82f3, // 0.9466, 0.32241 - 0x3fee467e7af35f23, 0x3fd4ba1ca2eca31c, // 0.94611, 0.32386 - 0x3fee426a4b2bc17e, 0x3fd4d1e24278e76a, // 0.94561, 0.32531 - 0x3fee3e5170cbfc46, 0x3fd4e9a4ac15d520, // 0.94511, 0.32676 - 0x3fee3a33ec75ce85, 0x3fd50163dc197047, // 0.9446, 0.32821 - 0x3fee3611becbaf69, 0x3fd5191fceda3c35, // 0.9441, 0.32966 - 0x3fee31eae870ce25, 0x3fd530d880af3c24, // 0.94359, 0.33111 - 0x3fee2dbf6a0911d9, 0x3fd5488dedeff3be, // 0.94308, 0.33255 - 0x3fee298f4439197a, 0x3fd5604012f467b4, // 0.94257, 0.334 - 0x3fee255a77a63bb8, 0x3fd577eeec151e47, // 0.94206, 0.33545 - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689 - 0x3fee1ce2ecd0c0d8, 0x3fd5a742ac0ff78d, // 0.94103, 0.33833 - 0x3fee18a02fdc66d9, 0x3fd5bee78b9db3b6, // 0.94051, 0.33978 - 0x3fee1458cec1ad83, 0x3fd5d68910aee686, // 0.93998, 0.34122 - 0x3fee100cca2980ac, 0x3fd5ee27379ea693, // 0.93946, 0.34266 - 0x3fee0bbc22bd8349, 0x3fd605c1fcc88f63, // 0.93893, 0.3441 - 0x3fee0766d9280f54, 0x3fd61d595c88c203, // 0.9384, 0.34554 - 0x3fee030cee1435b8, 0x3fd634ed533be58e, // 0.93787, 0.34698 - 0x3fedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // 0.93734, 0.34842 - 0x3fedfa4b3621271d, 0x3fd6640af6f03d9e, // 0.9368, 0.34986 - 0x3fedf5e36a9ba59c, 0x3fd67b949cad63ca, // 0.93627, 0.35129 - 0x3fedf177004b2534, 0x3fd6931acad55f51, // 0.93573, 0.35273 - 0x3feded05f7de47da, 0x3fd6aa9d7dc77e16, // 0.93518, 0.35416 - 0x3fede890520465ce, 0x3fd6c21cb1e39771, // 0.93464, 0.3556 - 0x3fede4160f6d8d81, 0x3fd6d998638a0cb5, // 0.93409, 0.35703 - 0x3feddf9730ca837b, 0x3fd6f1108f1bc9c5, // 0.93354, 0.35846 - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599 - 0x3fedd68ba2267a25, 0x3fd71ff6458782ec, // 0.93244, 0.36133 - 0x3fedd1fef38a915a, 0x3fd73763c9261092, // 0.93188, 0.36276 - 0x3fedcd6dabaca3a5, 0x3fd74ecdb8390a3e, // 0.93133, 0.36418 - 0x3fedc8d7cb410260, 0x3fd766340f2418f6, // 0.93077, 0.36561 - 0x3fedc43d52fcb453, 0x3fd77d96ca4b73a6, // 0.93021, 0.36704 - 0x3fedbf9e4395759a, 0x3fd794f5e613dfae, // 0.92964, 0.36847 - 0x3fedbafa9dc1b78d, 0x3fd7ac515ee2b172, // 0.92907, 0.36989 - 0x3fedb6526238a09b, 0x3fd7c3a9311dcce7, // 0.92851, 0.37132 - 0x3fedb1a591b20c38, 0x3fd7dafd592ba621, // 0.92794, 0.37274 - 0x3fedacf42ce68ab9, 0x3fd7f24dd37341e3, // 0.92736, 0.37416 - 0x3feda83e348f613b, 0x3fd8099a9c5c362d, // 0.92679, 0.37559 - 0x3feda383a9668988, 0x3fd820e3b04eaac4, // 0.92621, 0.37701 - 0x3fed9ec48c26b1f3, 0x3fd838290bb359c8, // 0.92563, 0.37843 - 0x3fed9a00dd8b3d46, 0x3fd84f6aaaf3903f, // 0.92505, 0.37985 - 0x3fed95389e50429b, 0x3fd866a88a792ea0, // 0.92447, 0.38127 - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268 - 0x3fed8b9a70ef9cb4, 0x3fd89518fbff098e, // 0.92329, 0.3841 - 0x3fed86c48445a450, 0x3fd8ac4b86d5ed44, // 0.9227, 0.38552 - 0x3fed81ea09f38b63, 0x3fd8c37a439f884f, // 0.92211, 0.38693 - 0x3fed7d0b02b8ecf9, 0x3fd8daa52ec8a4af, // 0.92151, 0.38835 - 0x3fed78276f5617c6, 0x3fd8f1cc44bea329, // 0.92092, 0.38976 - 0x3fed733f508c0dff, 0x3fd908ef81ef7bd1, // 0.92032, 0.39117 - 0x3fed6e52a71c8547, 0x3fd9200ee2c9be97, // 0.91972, 0.39258 - 0x3fed696173c9e68b, 0x3fd9372a63bc93d7, // 0.91911, 0.39399 - 0x3fed646bb7574de5, 0x3fd94e420137bce3, // 0.91851, 0.3954 - 0x3fed5f7172888a7f, 0x3fd96555b7ab948f, // 0.9179, 0.39681 - 0x3fed5a72a6221e73, 0x3fd97c6583890fc2, // 0.91729, 0.39822 - 0x3fed556f52e93eb1, 0x3fd993716141bdfe, // 0.91668, 0.39962 - 0x3fed506779a3d2d9, 0x3fd9aa794d47c9ee, // 0.91606, 0.40103 - 0x3fed4b5b1b187524, 0x3fd9c17d440df9f2, // 0.91545, 0.40243 - 0x3fed464a380e7242, 0x3fd9d87d4207b0ab, // 0.91483, 0.40384 - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524 - 0x3fed3c1ae79f2b4e, 0x3fda067145664d57, // 0.91359, 0.40664 - 0x3fed36fc7bcbfbdc, 0x3fda1d6543b50ac0, // 0.91296, 0.40804 - 0x3fed31d98e9e503a, 0x3fda34553b0afee5, // 0.91234, 0.40944 - 0x3fed2cb220e0ef9f, 0x3fda4b4127dea1e4, // 0.91171, 0.41084 - 0x3fed2786335f52fc, 0x3fda622906a70b63, // 0.91107, 0.41224 - 0x3fed2255c6e5a4e1, 0x3fda790cd3dbf31a, // 0.91044, 0.41364 - 0x3fed1d20dc40c15c, 0x3fda8fec8bf5b166, // 0.90981, 0.41503 - 0x3fed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // 0.90917, 0.41643 - 0x3fed12a98fac410c, 0x3fdabd9faebc3980, // 0.90853, 0.41782 - 0x3fed0d672f59d2b9, 0x3fdad473125cdc08, // 0.90789, 0.41922 - 0x3fed082054168bac, 0x3fdaeb4252ca07ab, // 0.90724, 0.42061 - 0x3fed02d4feb2bd92, 0x3fdb020d6c7f4009, // 0.9066, 0.422 - 0x3fecfd852fff6ad4, 0x3fdb18d45bf8aca6, // 0.90595, 0.42339 - 0x3fecf830e8ce467b, 0x3fdb2f971db31972, // 0.9053, 0.42478 - 0x3fecf2d829f1b40e, 0x3fdb4655ae2bf757, // 0.90464, 0.42617 - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756 - 0x3fece819488344ce, 0x3fdb73c62d520624, // 0.90333, 0.42894 - 0x3fece2b32799a060, 0x3fdb8a7814fd5693, // 0.90267, 0.43033 - 0x3fecdd489254fe65, 0x3fdba125bd63583e, // 0.90201, 0.43171 - 0x3fecd7d9898b32f6, 0x3fdbb7cf2304bd01, // 0.90135, 0.43309 - 0x3fecd2660e12c1e6, 0x3fdbce744262deee, // 0.90068, 0.43448 - 0x3fecccee20c2de9f, 0x3fdbe51517ffc0d9, // 0.90002, 0.43586 - 0x3fecc771c2736c09, 0x3fdbfbb1a05e0edc, // 0.89935, 0.43724 - 0x3fecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // 0.89867, 0.43862 - 0x3fecbc6bb638d10b, 0x3fdc28ddbb6cf145, // 0.898, 0.43999 - 0x3fecb6e20a00da99, 0x3fdc3f6d47263129, // 0.89732, 0.44137 - 0x3fecb153f02fb87d, 0x3fdc55f877b23537, // 0.89665, 0.44275 - 0x3fecabc169a0b901, 0x3fdc6c7f4997000a, // 0.89597, 0.44412 - 0x3feca62a772fd919, 0x3fdc8301b95b40c2, // 0.89528, 0.4455 - 0x3feca08f19b9c449, 0x3fdc997fc3865388, // 0.8946, 0.44687 - 0x3fec9aef521bd480, 0x3fdcaff964a0421d, // 0.89391, 0.44824 - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961 - 0x3fec8fa287e13305, 0x3fdcdcdf5dc440ce, // 0.89253, 0.45098 - 0x3fec89f587029c13, 0x3fdcf34baee1cd21, // 0.89184, 0.45235 - 0x3fec84441f785f61, 0x3fdd09b389152ec1, // 0.89115, 0.45372 - 0x3fec7e8e52233cf3, 0x3fdd2016e8e9db5b, // 0.89045, 0.45508 - 0x3fec78d41fe4a267, 0x3fdd3675caebf962, // 0.88975, 0.45645 - 0x3fec7315899eaad7, 0x3fdd4cd02ba8609c, // 0.88905, 0.45781 - 0x3fec6d5290341eb2, 0x3fdd632607ac9aa9, // 0.88835, 0.45918 - 0x3fec678b3488739b, 0x3fdd79775b86e389, // 0.88764, 0.46054 - 0x3fec61bf777fcc48, 0x3fdd8fc423c62a25, // 0.88693, 0.4619 - 0x3fec5bef59fef85a, 0x3fdda60c5cfa10d8, // 0.88622, 0.46326 - 0x3fec561adceb743e, 0x3fddbc5003b2edf8, // 0.88551, 0.46462 - 0x3fec5042012b6907, 0x3fddd28f1481cc58, // 0.8848, 0.46598 - 0x3fec4a64c7a5ac4c, 0x3fdde8c98bf86bd6, // 0.88408, 0.46733 - 0x3fec44833141c004, 0x3fddfeff66a941de, // 0.88336, 0.46869 - 0x3fec3e9d3ee7d262, 0x3fde1530a12779f4, // 0.88264, 0.47004 - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714 - 0x3fec32c449f60831, 0x3fde418527dc4ffa, // 0.8812, 0.47275 - 0x3fec2cd14931e3f1, 0x3fde57a86d3cd824, // 0.88047, 0.4741 - 0x3fec26d9f01f2eaf, 0x3fde6dc704be97e2, // 0.87974, 0.47545 - 0x3fec20de3fa971b0, 0x3fde83e0eaf85113, // 0.87901, 0.4768 - 0x3fec1ade38bce19b, 0x3fde99f61c817eda, // 0.87828, 0.47815 - 0x3fec14d9dc465e58, 0x3fdeb00695f25620, // 0.87755, 0.47949 - 0x3fec0ed12b3372e9, 0x3fdec61253e3c61b, // 0.87681, 0.48084 - 0x3fec08c426725549, 0x3fdedc1952ef78d5, // 0.87607, 0.48218 - 0x3fec02b2cef1e641, 0x3fdef21b8fafd3b5, // 0.87533, 0.48353 - 0x3febfc9d25a1b147, 0x3fdf081906bff7fd, // 0.87459, 0.48487 - 0x3febf6832b71ec5b, 0x3fdf1e11b4bbc35c, // 0.87384, 0.48621 - 0x3febf064e15377dd, 0x3fdf3405963fd068, // 0.87309, 0.48755 - 0x3febea424837de6d, 0x3fdf49f4a7e97729, // 0.87235, 0.48889 - 0x3febe41b611154c1, 0x3fdf5fdee656cda3, // 0.8716, 0.49023 - 0x3febddf02cd2b983, 0x3fdf75c44e26a852, // 0.87084, 0.49156 - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929 - 0x3febd18ce0dc19d6, 0x3fdfa1808c6cf7e0, // 0.86933, 0.49423 - 0x3febcb54cb0d2327, 0x3fdfb7575c24d2de, // 0.86857, 0.49557 - 0x3febc5186bf8361d, 0x3fdfcd2947c1ff57, // 0.86781, 0.4969 - 0x3febbed7c49380ea, 0x3fdfe2f64be7120f, // 0.86705, 0.49823 - 0x3febb892d5d5dad5, 0x3fdff8be6537615e, // 0.86628, 0.49956 - 0x3febb249a0b6c40d, 0x3fe00740c82b82e0, // 0.86551, 0.50089 - 0x3febabfc262e6586, 0x3fe0121fe4f56d2c, // 0.86474, 0.50221 - 0x3feba5aa673590d2, 0x3fe01cfc874c3eb7, // 0.86397, 0.50354 - 0x3feb9f5464c5bffc, 0x3fe027d6ad83287e, // 0.8632, 0.50486 - 0x3feb98fa1fd9155e, 0x3fe032ae55edbd95, // 0.86242, 0.50619 - 0x3feb929b996a5b7f, 0x3fe03d837edff370, // 0.86165, 0.50751 - 0x3feb8c38d27504e9, 0x3fe0485626ae221a, // 0.86087, 0.50883 - 0x3feb85d1cbf52c02, 0x3fe053264bad0483, // 0.86009, 0.51015 - 0x3feb7f6686e792ea, 0x3fe05df3ec31b8b6, // 0.8593, 0.51147 - 0x3feb78f70449a34b, 0x3fe068bf0691c028, // 0.85852, 0.51279 - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141 - 0x3feb6c0b4a55ac17, 0x3fe07e4da23bc102, // 0.85694, 0.51542 - 0x3feb658f14fdbc47, 0x3fe089112032b08c, // 0.85615, 0.51673 - 0x3feb5f0ea611a532, 0x3fe093d2115ee018, // 0.85535, 0.51804 - 0x3feb5889fe921405, 0x3fe09e907417c5e1, // 0.85456, 0.51936 - 0x3feb52011f805c92, 0x3fe0a94c46b53d0b, // 0.85376, 0.52067 - 0x3feb4b7409de7925, 0x3fe0b405878f85ec, // 0.85296, 0.52198 - 0x3feb44e2beaf0a61, 0x3fe0bebc34ff4646, // 0.85216, 0.52328 - 0x3feb3e4d3ef55712, 0x3fe0c9704d5d898f, // 0.85136, 0.52459 - 0x3feb37b38bb54c09, 0x3fe0d421cf03c12b, // 0.85055, 0.5259 - 0x3feb3115a5f37bf4, 0x3fe0ded0b84bc4b5, // 0.84974, 0.5272 - 0x3feb2a738eb51f33, 0x3fe0e97d078fd23b, // 0.84893, 0.5285 - 0x3feb23cd470013b4, 0x3fe0f426bb2a8e7d, // 0.84812, 0.5298 - 0x3feb1d22cfdadcc6, 0x3fe0fecdd1770537, // 0.84731, 0.5311 - 0x3feb16742a4ca2f5, 0x3fe1097248d0a956, // 0.84649, 0.5324 - 0x3feb0fc1575d33db, 0x3fe114141f935545, // 0.84567, 0.5337 - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535 - 0x3feb024f2d7d24a9, 0x3fe1294fe4c5350a, // 0.84403, 0.53629 - 0x3feafb8fd89f57b6, 0x3fe133e9cfee254e, // 0.84321, 0.53759 - 0x3feaf4cc5a85fb73, 0x3fe13e8113f396c1, // 0.84238, 0.53888 - 0x3feaee04b43c1474, 0x3fe14915af336ceb, // 0.84155, 0.54017 - 0x3feae738e6cd4b67, 0x3fe153a7a00bf453, // 0.84073, 0.54146 - 0x3feae068f345ecef, 0x3fe15e36e4dbe2bc, // 0.83989, 0.54275 - 0x3fead994dab2e979, 0x3fe168c37c025764, // 0.83906, 0.54404 - 0x3fead2bc9e21d511, 0x3fe1734d63dedb49, // 0.83822, 0.54532 - 0x3feacbe03ea0e73b, 0x3fe17dd49ad16161, // 0.83739, 0.54661 - 0x3feac4ffbd3efac8, 0x3fe188591f3a46e5, // 0.83655, 0.54789 - 0x3feabe1b1b0b8dac, 0x3fe192daef7a5386, // 0.83571, 0.54918 - 0x3feab7325916c0d4, 0x3fe19d5a09f2b9b8, // 0.83486, 0.55046 - 0x3feab045787157ff, 0x3fe1a7d66d0516e6, // 0.83402, 0.55174 - 0x3feaa9547a2cb98e, 0x3fe1b250171373be, // 0.83317, 0.55302 - 0x3feaa25f5f5aee60, 0x3fe1bcc706804467, // 0.83232, 0.55429 - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557 - 0x3fea9468d85b20ae, 0x3fe1d1acaf012cc2, // 0.83062, 0.55685 - 0x3fea8d676e545ad2, 0x3fe1dc1b64dc4872, // 0.82976, 0.55812 - 0x3fea8661ec0ee133, 0x3fe1e68759a3e074, // 0.8289, 0.55939 - 0x3fea7f58529fe69d, 0x3fe1f0f08bbc861b, // 0.82805, 0.56066 - 0x3fea784aa31d3f55, 0x3fe1fb56f98b37b8, // 0.82718, 0.56193 - 0x3fea7138de9d60f5, 0x3fe205baa17560d6, // 0.82632, 0.5632 - 0x3fea6a230637623b, 0x3fe2101b81e0da78, // 0.82546, 0.56447 - 0x3fea63091b02fae2, 0x3fe21a799933eb58, // 0.82459, 0.56573 - 0x3fea5beb1e188375, 0x3fe224d4e5d5482e, // 0.82372, 0.567 - 0x3fea54c91090f524, 0x3fe22f2d662c13e1, // 0.82285, 0.56826 - 0x3fea4da2f385e997, 0x3fe23983189fdfd5, // 0.82198, 0.56952 - 0x3fea4678c8119ac8, 0x3fe243d5fb98ac1f, // 0.8211, 0.57078 - 0x3fea3f4a8f4ee2d2, 0x3fe24e260d7ee7c9, // 0.82023, 0.57204 - 0x3fea38184a593bc6, 0x3fe258734cbb7110, // 0.81935, 0.5733 - 0x3fea30e1fa4cbf81, 0x3fe262bdb7b795a2, // 0.81847, 0.57455 - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581 - 0x3fea22693d62ccb9, 0x3fe2774a0a961612, // 0.8167, 0.57706 - 0x3fea1b26d2c0a75e, 0x3fe2818bef4d3cba, // 0.81581, 0.57831 - 0x3fea13e0617e4ec7, 0x3fe28bcaf96d94ba, // 0.81493, 0.57956 - 0x3fea0c95eabaf937, 0x3fe2960727629ca8, // 0.81404, 0.58081 - 0x3fea05476f967bb5, 0x3fe2a040779843fb, // 0.81314, 0.58206 - 0x3fe9fdf4f13149de, 0x3fe2aa76e87aeb58, // 0.81225, 0.58331 - 0x3fe9f69e70ac75bc, 0x3fe2b4aa787764c4, // 0.81135, 0.58455 - 0x3fe9ef43ef29af94, 0x3fe2bedb25faf3ea, // 0.81046, 0.5858 - 0x3fe9e7e56dcb45bd, 0x3fe2c908ef734e57, // 0.80956, 0.58704 - 0x3fe9e082edb42472, 0x3fe2d333d34e9bb7, // 0.80866, 0.58828 - 0x3fe9d91c7007d5a6, 0x3fe2dd5bcffb7616, // 0.80775, 0.58952 - 0x3fe9d1b1f5ea80d6, 0x3fe2e780e3e8ea16, // 0.80685, 0.59076 - 0x3fe9ca438080eadb, 0x3fe2f1a30d86773a, // 0.80594, 0.592 - 0x3fe9c2d110f075c3, 0x3fe2fbc24b441015, // 0.80503, 0.59323 - 0x3fe9bb5aa85f2098, 0x3fe305de9b921a94, // 0.80412, 0.59447 - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957 - 0x3fe9ac61f0d4e247, 0x3fe31a0e6da35e44, // 0.80229, 0.59693 - 0x3fe9a4dfa42b06b2, 0x3fe32421ec49a620, // 0.80138, 0.59816 - 0x3fe99d59631e65d5, 0x3fe32e3277467d6b, // 0.80046, 0.59939 - 0x3fe995cf2ed80d22, 0x3fe338400d0c8e57, // 0.79954, 0.60062 - 0x3fe98e410881a600, 0x3fe3424aac0ef7d6, // 0.79861, 0.60184 - 0x3fe986aef1457594, 0x3fe34c5252c14de1, // 0.79769, 0.60307 - 0x3fe97f18ea4e5c9e, 0x3fe35656ff9799ae, // 0.79676, 0.60429 - 0x3fe9777ef4c7d742, 0x3fe36058b10659f3, // 0.79584, 0.60551 - 0x3fe96fe111ddfce0, 0x3fe36a576582831b, // 0.79491, 0.60673 - 0x3fe9683f42bd7fe1, 0x3fe374531b817f8d, // 0.79398, 0.60795 - 0x3fe960998893ad8c, 0x3fe37e4bd1792fe2, // 0.79304, 0.60917 - 0x3fe958efe48e6dd7, 0x3fe3884185dfeb22, // 0.79211, 0.61038 - 0x3fe9514257dc4335, 0x3fe39234372c7f04, // 0.79117, 0.6116 - 0x3fe94990e3ac4a6c, 0x3fe39c23e3d63029, // 0.79023, 0.61281 - 0x3fe941db892e3a65, 0x3fe3a6108a54ba58, // 0.78929, 0.61402 - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523 - 0x3fe932652609b1cf, 0x3fe3b9e0beb19e18, // 0.7874, 0.61644 - 0x3fe92aa41fc5a815, 0x3fe3c3c44981c517, // 0.78646, 0.61765 - 0x3fe922df37f8646a, 0x3fe3cda4c80a6076, // 0.78551, 0.61885 - 0x3fe91b166fd49da2, 0x3fe3d78238c58343, // 0.78456, 0.62006 - 0x3fe91349c88da398, 0x3fe3e15c9a2db922, // 0.7836, 0.62126 - 0x3fe90b7943575efe, 0x3fe3eb33eabe0680, // 0.78265, 0.62246 - 0x3fe903a4e1665133, 0x3fe3f50828f1e8d2, // 0.78169, 0.62366 - 0x3fe8fbcca3ef940d, 0x3fe3fed9534556d4, // 0.78074, 0.62486 - 0x3fe8f3f08c28d9ac, 0x3fe408a76834c0c0, // 0.77978, 0.62606 - 0x3fe8ec109b486c49, 0x3fe41272663d108c, // 0.77882, 0.62725 - 0x3fe8e42cd2852e0a, 0x3fe41c3a4bdbaa26, // 0.77785, 0.62845 - 0x3fe8dc45331698cc, 0x3fe425ff178e6bb1, // 0.77689, 0.62964 - 0x3fe8d459be34bdfa, 0x3fe42fc0c7d3adbb, // 0.77592, 0.63083 - 0x3fe8cc6a75184655, 0x3fe4397f5b2a4380, // 0.77495, 0.63202 - 0x3fe8c47758fa71cb, 0x3fe4433ad0117b1d, // 0.77398, 0.63321 - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439 - 0x3fe8b485aca2a468, 0x3fe456a858917046, // 0.77204, 0.63558 - 0x3fe8ac871ede1d88, 0x3fe4605a692b32a2, // 0.77106, 0.63676 - 0x3fe8a484c3031d50, 0x3fe46a095557a0f1, // 0.77008, 0.63794 - 0x3fe89c7e9a4dd4ab, 0x3fe473b51b987347, // 0.7691, 0.63912 - 0x3fe89474a5fb0a84, 0x3fe47d5dba6fde01, // 0.76812, 0.6403 - 0x3fe88c66e7481ba1, 0x3fe48703306091fe, // 0.76714, 0.64148 - 0x3fe884555f72fa6b, 0x3fe490a57bedbcdf, // 0.76615, 0.64266 - 0x3fe87c400fba2ebf, 0x3fe49a449b9b0938, // 0.76517, 0.64383 - 0x3fe87426f95cd5bd, 0x3fe4a3e08dec9ed6, // 0.76418, 0.645 - 0x3fe86c0a1d9aa195, 0x3fe4ad79516722f0, // 0.76319, 0.64618 - 0x3fe863e97db3d95a, 0x3fe4b70ee48fb869, // 0.7622, 0.64735 - 0x3fe85bc51ae958cc, 0x3fe4c0a145ec0004, // 0.7612, 0.64851 - 0x3fe8539cf67c9029, 0x3fe4ca30740218a3, // 0.76021, 0.64968 - 0x3fe84b7111af83f9, 0x3fe4d3bc6d589f80, // 0.75921, 0.65085 - 0x3fe843416dc4cce2, 0x3fe4dd453076b064, // 0.75821, 0.65201 - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317 - 0x3fe832d6eda3a3e0, 0x3fe4f04d0e2859aa, // 0.75621, 0.65433 - 0x3fe82a9c13f545ff, 0x3fe4f9cc25cca486, // 0.7552, 0.65549 - 0x3fe8225d803964e5, 0x3fe503480159ded2, // 0.75419, 0.65665 - 0x3fe81a1b33b57acc, 0x3fe50cc09f59a09b, // 0.75319, 0.65781 - 0x3fe811d52faf94dc, 0x3fe51635fe5601d7, // 0.75218, 0.65896 - 0x3fe8098b756e52fa, 0x3fe51fa81cd99aa6, // 0.75117, 0.66011 - 0x3fe8013e0638e795, 0x3fe52916f96f8388, // 0.75015, 0.66127 - 0x3fe7f8ece3571771, 0x3fe5328292a35596, // 0.74914, 0.66242 - 0x3fe7f0980e113978, 0x3fe53beae7012abe, // 0.74812, 0.66356 - 0x3fe7e83f87b03686, 0x3fe5454ff5159dfb, // 0.7471, 0.66471 - 0x3fe7dfe3517d8937, 0x3fe54eb1bb6dcb8f, // 0.74608, 0.66586 - 0x3fe7d7836cc33db2, 0x3fe5581038975137, // 0.74506, 0.667 - 0x3fe7cf1fdacbf179, 0x3fe5616b6b204e6e, // 0.74403, 0.66814 - 0x3fe7c6b89ce2d333, 0x3fe56ac35197649e, // 0.74301, 0.66928 - 0x3fe7be4db453a27c, 0x3fe57417ea8bb75c, // 0.74198, 0.67042 - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156 - 0x3fe7ad6ce874dbb6, 0x3fe586b72e2b2cfd, // 0.73992, 0.67269 - 0x3fe7a4f707bf97d2, 0x3fe59001d5f723df, // 0.73889, 0.67383 - 0x3fe79c7d8198e56e, 0x3fe599492a81ffbc, // 0.73785, 0.67496 - 0x3fe79400574f55e4, 0x3fe5a28d2a5d7250, // 0.73682, 0.67609 - 0x3fe78b7f8a320a52, 0x3fe5abcdd41bb0d8, // 0.73578, 0.67722 - 0x3fe782fb1b90b35b, 0x3fe5b50b264f7448, // 0.73474, 0.67835 - 0x3fe77a730cbb9100, 0x3fe5be451f8bf980, // 0.7337, 0.67948 - 0x3fe771e75f037261, 0x3fe5c77bbe65018c, // 0.73265, 0.6806 - 0x3fe7695813b9b594, 0x3fe5d0af016ed1d4, // 0.73161, 0.68172 - 0x3fe760c52c304764, 0x3fe5d9dee73e345c, // 0.73056, 0.68285 - 0x3fe7582ea9b9a329, 0x3fe5e30b6e6877f3, // 0.72951, 0.68397 - 0x3fe74f948da8d28d, 0x3fe5ec3495837074, // 0.72846, 0.68508 - 0x3fe746f6d9516d59, 0x3fe5f55a5b2576f8, // 0.72741, 0.6862 - 0x3fe73e558e079942, 0x3fe5fe7cbde56a0f, // 0.72636, 0.68732 - 0x3fe735b0ad2009b2, 0x3fe6079bbc5aadfa, // 0.7253, 0.68843 - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954 - 0x3fe7245c2fcd492a, 0x3fe619cf86c55702, // 0.72319, 0.69065 - 0x3fe71bac960e41bf, 0x3fe622e44fec22ff, // 0.72213, 0.69176 - 0x3fe712f96c09d18d, 0x3fe62bf5af2b0dfd, // 0.72107, 0.69287 - 0x3fe70a42b3176d7a, 0x3fe63503a31c1be8, // 0.72, 0.69397 - 0x3fe701886c8f16e6, 0x3fe63e0e2a59d7aa, // 0.71894, 0.69508 - 0x3fe6f8ca99c95b75, 0x3fe64715437f535b, // 0.71787, 0.69618 - 0x3fe6f0093c1f54de, 0x3fe65018ed28287f, // 0.7168, 0.69728 - 0x3fe6e74454eaa8ae, 0x3fe6591925f0783e, // 0.71573, 0.69838 - 0x3fe6de7be585881d, 0x3fe66215ec74eb91, // 0.71466, 0.69947 - 0x3fe6d5afef4aafcc, 0x3fe66b0f3f52b386, // 0.71358, 0.70057 - 0x3fe6cce07395679f, 0x3fe674051d27896c, // 0.71251, 0.70166 - 0x3fe6c40d73c18275, 0x3fe67cf78491af10, // 0.71143, 0.70275 - 0x3fe6bb36f12b5e06, 0x3fe685e6742feeef, // 0.71035, 0.70385 - 0x3fe6b25ced2fe29c, 0x3fe68ed1eaa19c71, // 0.70927, 0.70493 - 0x3fe6a97f692c82ea, 0x3fe697b9e686941c, // 0.70819, 0.70602 - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711 - 0x3fe697b9e686941c, 0x3fe6a97f692c82ea, // 0.70602, 0.70819 - 0x3fe68ed1eaa19c71, 0x3fe6b25ced2fe29c, // 0.70493, 0.70927 - 0x3fe685e6742feeef, 0x3fe6bb36f12b5e06, // 0.70385, 0.71035 - 0x3fe67cf78491af10, 0x3fe6c40d73c18275, // 0.70275, 0.71143 - 0x3fe674051d27896c, 0x3fe6cce07395679f, // 0.70166, 0.71251 - 0x3fe66b0f3f52b386, 0x3fe6d5afef4aafcc, // 0.70057, 0.71358 - 0x3fe66215ec74eb91, 0x3fe6de7be585881d, // 0.69947, 0.71466 - 0x3fe6591925f0783e, 0x3fe6e74454eaa8ae, // 0.69838, 0.71573 - 0x3fe65018ed28287f, 0x3fe6f0093c1f54de, // 0.69728, 0.7168 - 0x3fe64715437f535b, 0x3fe6f8ca99c95b75, // 0.69618, 0.71787 - 0x3fe63e0e2a59d7aa, 0x3fe701886c8f16e6, // 0.69508, 0.71894 - 0x3fe63503a31c1be8, 0x3fe70a42b3176d7a, // 0.69397, 0.72 - 0x3fe62bf5af2b0dfd, 0x3fe712f96c09d18d, // 0.69287, 0.72107 - 0x3fe622e44fec22ff, 0x3fe71bac960e41bf, // 0.69176, 0.72213 - 0x3fe619cf86c55702, 0x3fe7245c2fcd492a, // 0.69065, 0.72319 - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425 - 0x3fe6079bbc5aadfa, 0x3fe735b0ad2009b2, // 0.68843, 0.7253 - 0x3fe5fe7cbde56a0f, 0x3fe73e558e079942, // 0.68732, 0.72636 - 0x3fe5f55a5b2576f8, 0x3fe746f6d9516d59, // 0.6862, 0.72741 - 0x3fe5ec3495837074, 0x3fe74f948da8d28d, // 0.68508, 0.72846 - 0x3fe5e30b6e6877f3, 0x3fe7582ea9b9a329, // 0.68397, 0.72951 - 0x3fe5d9dee73e345c, 0x3fe760c52c304764, // 0.68285, 0.73056 - 0x3fe5d0af016ed1d4, 0x3fe7695813b9b594, // 0.68172, 0.73161 - 0x3fe5c77bbe65018c, 0x3fe771e75f037261, // 0.6806, 0.73265 - 0x3fe5be451f8bf980, 0x3fe77a730cbb9100, // 0.67948, 0.7337 - 0x3fe5b50b264f7448, 0x3fe782fb1b90b35b, // 0.67835, 0.73474 - 0x3fe5abcdd41bb0d8, 0x3fe78b7f8a320a52, // 0.67722, 0.73578 - 0x3fe5a28d2a5d7250, 0x3fe79400574f55e4, // 0.67609, 0.73682 - 0x3fe599492a81ffbc, 0x3fe79c7d8198e56e, // 0.67496, 0.73785 - 0x3fe59001d5f723df, 0x3fe7a4f707bf97d2, // 0.67383, 0.73889 - 0x3fe586b72e2b2cfd, 0x3fe7ad6ce874dbb6, // 0.67269, 0.73992 - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095 - 0x3fe57417ea8bb75c, 0x3fe7be4db453a27c, // 0.67042, 0.74198 - 0x3fe56ac35197649e, 0x3fe7c6b89ce2d333, // 0.66928, 0.74301 - 0x3fe5616b6b204e6e, 0x3fe7cf1fdacbf179, // 0.66814, 0.74403 - 0x3fe5581038975137, 0x3fe7d7836cc33db2, // 0.667, 0.74506 - 0x3fe54eb1bb6dcb8f, 0x3fe7dfe3517d8937, // 0.66586, 0.74608 - 0x3fe5454ff5159dfb, 0x3fe7e83f87b03686, // 0.66471, 0.7471 - 0x3fe53beae7012abe, 0x3fe7f0980e113978, // 0.66356, 0.74812 - 0x3fe5328292a35596, 0x3fe7f8ece3571771, // 0.66242, 0.74914 - 0x3fe52916f96f8388, 0x3fe8013e0638e795, // 0.66127, 0.75015 - 0x3fe51fa81cd99aa6, 0x3fe8098b756e52fa, // 0.66011, 0.75117 - 0x3fe51635fe5601d7, 0x3fe811d52faf94dc, // 0.65896, 0.75218 - 0x3fe50cc09f59a09b, 0x3fe81a1b33b57acc, // 0.65781, 0.75319 - 0x3fe503480159ded2, 0x3fe8225d803964e5, // 0.65665, 0.75419 - 0x3fe4f9cc25cca486, 0x3fe82a9c13f545ff, // 0.65549, 0.7552 - 0x3fe4f04d0e2859aa, 0x3fe832d6eda3a3e0, // 0.65433, 0.75621 - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721 - 0x3fe4dd453076b064, 0x3fe843416dc4cce2, // 0.65201, 0.75821 - 0x3fe4d3bc6d589f80, 0x3fe84b7111af83f9, // 0.65085, 0.75921 - 0x3fe4ca30740218a3, 0x3fe8539cf67c9029, // 0.64968, 0.76021 - 0x3fe4c0a145ec0004, 0x3fe85bc51ae958cc, // 0.64851, 0.7612 - 0x3fe4b70ee48fb869, 0x3fe863e97db3d95a, // 0.64735, 0.7622 - 0x3fe4ad79516722f0, 0x3fe86c0a1d9aa195, // 0.64618, 0.76319 - 0x3fe4a3e08dec9ed6, 0x3fe87426f95cd5bd, // 0.645, 0.76418 - 0x3fe49a449b9b0938, 0x3fe87c400fba2ebf, // 0.64383, 0.76517 - 0x3fe490a57bedbcdf, 0x3fe884555f72fa6b, // 0.64266, 0.76615 - 0x3fe48703306091fe, 0x3fe88c66e7481ba1, // 0.64148, 0.76714 - 0x3fe47d5dba6fde01, 0x3fe89474a5fb0a84, // 0.6403, 0.76812 - 0x3fe473b51b987347, 0x3fe89c7e9a4dd4ab, // 0.63912, 0.7691 - 0x3fe46a095557a0f1, 0x3fe8a484c3031d50, // 0.63794, 0.77008 - 0x3fe4605a692b32a2, 0x3fe8ac871ede1d88, // 0.63676, 0.77106 - 0x3fe456a858917046, 0x3fe8b485aca2a468, // 0.63558, 0.77204 - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301 - 0x3fe4433ad0117b1d, 0x3fe8c47758fa71cb, // 0.63321, 0.77398 - 0x3fe4397f5b2a4380, 0x3fe8cc6a75184655, // 0.63202, 0.77495 - 0x3fe42fc0c7d3adbb, 0x3fe8d459be34bdfa, // 0.63083, 0.77592 - 0x3fe425ff178e6bb1, 0x3fe8dc45331698cc, // 0.62964, 0.77689 - 0x3fe41c3a4bdbaa26, 0x3fe8e42cd2852e0a, // 0.62845, 0.77785 - 0x3fe41272663d108c, 0x3fe8ec109b486c49, // 0.62725, 0.77882 - 0x3fe408a76834c0c0, 0x3fe8f3f08c28d9ac, // 0.62606, 0.77978 - 0x3fe3fed9534556d4, 0x3fe8fbcca3ef940d, // 0.62486, 0.78074 - 0x3fe3f50828f1e8d2, 0x3fe903a4e1665133, // 0.62366, 0.78169 - 0x3fe3eb33eabe0680, 0x3fe90b7943575efe, // 0.62246, 0.78265 - 0x3fe3e15c9a2db922, 0x3fe91349c88da398, // 0.62126, 0.7836 - 0x3fe3d78238c58343, 0x3fe91b166fd49da2, // 0.62006, 0.78456 - 0x3fe3cda4c80a6076, 0x3fe922df37f8646a, // 0.61885, 0.78551 - 0x3fe3c3c44981c517, 0x3fe92aa41fc5a815, // 0.61765, 0.78646 - 0x3fe3b9e0beb19e18, 0x3fe932652609b1cf, // 0.61644, 0.7874 - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835 - 0x3fe3a6108a54ba58, 0x3fe941db892e3a65, // 0.61402, 0.78929 - 0x3fe39c23e3d63029, 0x3fe94990e3ac4a6c, // 0.61281, 0.79023 - 0x3fe39234372c7f04, 0x3fe9514257dc4335, // 0.6116, 0.79117 - 0x3fe3884185dfeb22, 0x3fe958efe48e6dd7, // 0.61038, 0.79211 - 0x3fe37e4bd1792fe2, 0x3fe960998893ad8c, // 0.60917, 0.79304 - 0x3fe374531b817f8d, 0x3fe9683f42bd7fe1, // 0.60795, 0.79398 - 0x3fe36a576582831b, 0x3fe96fe111ddfce0, // 0.60673, 0.79491 - 0x3fe36058b10659f3, 0x3fe9777ef4c7d742, // 0.60551, 0.79584 - 0x3fe35656ff9799ae, 0x3fe97f18ea4e5c9e, // 0.60429, 0.79676 - 0x3fe34c5252c14de1, 0x3fe986aef1457594, // 0.60307, 0.79769 - 0x3fe3424aac0ef7d6, 0x3fe98e410881a600, // 0.60184, 0.79861 - 0x3fe338400d0c8e57, 0x3fe995cf2ed80d22, // 0.60062, 0.79954 - 0x3fe32e3277467d6b, 0x3fe99d59631e65d5, // 0.59939, 0.80046 - 0x3fe32421ec49a620, 0x3fe9a4dfa42b06b2, // 0.59816, 0.80138 - 0x3fe31a0e6da35e44, 0x3fe9ac61f0d4e247, // 0.59693, 0.80229 - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321 - 0x3fe305de9b921a94, 0x3fe9bb5aa85f2098, // 0.59447, 0.80412 - 0x3fe2fbc24b441015, 0x3fe9c2d110f075c3, // 0.59323, 0.80503 - 0x3fe2f1a30d86773a, 0x3fe9ca438080eadb, // 0.592, 0.80594 - 0x3fe2e780e3e8ea16, 0x3fe9d1b1f5ea80d6, // 0.59076, 0.80685 - 0x3fe2dd5bcffb7616, 0x3fe9d91c7007d5a6, // 0.58952, 0.80775 - 0x3fe2d333d34e9bb7, 0x3fe9e082edb42472, // 0.58828, 0.80866 - 0x3fe2c908ef734e57, 0x3fe9e7e56dcb45bd, // 0.58704, 0.80956 - 0x3fe2bedb25faf3ea, 0x3fe9ef43ef29af94, // 0.5858, 0.81046 - 0x3fe2b4aa787764c4, 0x3fe9f69e70ac75bc, // 0.58455, 0.81135 - 0x3fe2aa76e87aeb58, 0x3fe9fdf4f13149de, // 0.58331, 0.81225 - 0x3fe2a040779843fb, 0x3fea05476f967bb5, // 0.58206, 0.81314 - 0x3fe2960727629ca8, 0x3fea0c95eabaf937, // 0.58081, 0.81404 - 0x3fe28bcaf96d94ba, 0x3fea13e0617e4ec7, // 0.57956, 0.81493 - 0x3fe2818bef4d3cba, 0x3fea1b26d2c0a75e, // 0.57831, 0.81581 - 0x3fe2774a0a961612, 0x3fea22693d62ccb9, // 0.57706, 0.8167 - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758 - 0x3fe262bdb7b795a2, 0x3fea30e1fa4cbf81, // 0.57455, 0.81847 - 0x3fe258734cbb7110, 0x3fea38184a593bc6, // 0.5733, 0.81935 - 0x3fe24e260d7ee7c9, 0x3fea3f4a8f4ee2d2, // 0.57204, 0.82023 - 0x3fe243d5fb98ac1f, 0x3fea4678c8119ac8, // 0.57078, 0.8211 - 0x3fe23983189fdfd5, 0x3fea4da2f385e997, // 0.56952, 0.82198 - 0x3fe22f2d662c13e1, 0x3fea54c91090f524, // 0.56826, 0.82285 - 0x3fe224d4e5d5482e, 0x3fea5beb1e188375, // 0.567, 0.82372 - 0x3fe21a799933eb58, 0x3fea63091b02fae2, // 0.56573, 0.82459 - 0x3fe2101b81e0da78, 0x3fea6a230637623b, // 0.56447, 0.82546 - 0x3fe205baa17560d6, 0x3fea7138de9d60f5, // 0.5632, 0.82632 - 0x3fe1fb56f98b37b8, 0x3fea784aa31d3f55, // 0.56193, 0.82718 - 0x3fe1f0f08bbc861b, 0x3fea7f58529fe69d, // 0.56066, 0.82805 - 0x3fe1e68759a3e074, 0x3fea8661ec0ee133, // 0.55939, 0.8289 - 0x3fe1dc1b64dc4872, 0x3fea8d676e545ad2, // 0.55812, 0.82976 - 0x3fe1d1acaf012cc2, 0x3fea9468d85b20ae, // 0.55685, 0.83062 - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147 - 0x3fe1bcc706804467, 0x3feaa25f5f5aee60, // 0.55429, 0.83232 - 0x3fe1b250171373be, 0x3feaa9547a2cb98e, // 0.55302, 0.83317 - 0x3fe1a7d66d0516e6, 0x3feab045787157ff, // 0.55174, 0.83402 - 0x3fe19d5a09f2b9b8, 0x3feab7325916c0d4, // 0.55046, 0.83486 - 0x3fe192daef7a5386, 0x3feabe1b1b0b8dac, // 0.54918, 0.83571 - 0x3fe188591f3a46e5, 0x3feac4ffbd3efac8, // 0.54789, 0.83655 - 0x3fe17dd49ad16161, 0x3feacbe03ea0e73b, // 0.54661, 0.83739 - 0x3fe1734d63dedb49, 0x3fead2bc9e21d511, // 0.54532, 0.83822 - 0x3fe168c37c025764, 0x3fead994dab2e979, // 0.54404, 0.83906 - 0x3fe15e36e4dbe2bc, 0x3feae068f345ecef, // 0.54275, 0.83989 - 0x3fe153a7a00bf453, 0x3feae738e6cd4b67, // 0.54146, 0.84073 - 0x3fe14915af336ceb, 0x3feaee04b43c1474, // 0.54017, 0.84155 - 0x3fe13e8113f396c1, 0x3feaf4cc5a85fb73, // 0.53888, 0.84238 - 0x3fe133e9cfee254e, 0x3feafb8fd89f57b6, // 0.53759, 0.84321 - 0x3fe1294fe4c5350a, 0x3feb024f2d7d24a9, // 0.53629, 0.84403 - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485 - 0x3fe114141f935545, 0x3feb0fc1575d33db, // 0.5337, 0.84567 - 0x3fe1097248d0a956, 0x3feb16742a4ca2f5, // 0.5324, 0.84649 - 0x3fe0fecdd1770537, 0x3feb1d22cfdadcc6, // 0.5311, 0.84731 - 0x3fe0f426bb2a8e7d, 0x3feb23cd470013b4, // 0.5298, 0.84812 - 0x3fe0e97d078fd23b, 0x3feb2a738eb51f33, // 0.5285, 0.84893 - 0x3fe0ded0b84bc4b5, 0x3feb3115a5f37bf4, // 0.5272, 0.84974 - 0x3fe0d421cf03c12b, 0x3feb37b38bb54c09, // 0.5259, 0.85055 - 0x3fe0c9704d5d898f, 0x3feb3e4d3ef55712, // 0.52459, 0.85136 - 0x3fe0bebc34ff4646, 0x3feb44e2beaf0a61, // 0.52328, 0.85216 - 0x3fe0b405878f85ec, 0x3feb4b7409de7925, // 0.52198, 0.85296 - 0x3fe0a94c46b53d0b, 0x3feb52011f805c92, // 0.52067, 0.85376 - 0x3fe09e907417c5e1, 0x3feb5889fe921405, // 0.51936, 0.85456 - 0x3fe093d2115ee018, 0x3feb5f0ea611a532, // 0.51804, 0.85535 - 0x3fe089112032b08c, 0x3feb658f14fdbc47, // 0.51673, 0.85615 - 0x3fe07e4da23bc102, 0x3feb6c0b4a55ac17, // 0.51542, 0.85694 - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773 - 0x3fe068bf0691c028, 0x3feb78f70449a34b, // 0.51279, 0.85852 - 0x3fe05df3ec31b8b6, 0x3feb7f6686e792ea, // 0.51147, 0.8593 - 0x3fe053264bad0483, 0x3feb85d1cbf52c02, // 0.51015, 0.86009 - 0x3fe0485626ae221a, 0x3feb8c38d27504e9, // 0.50883, 0.86087 - 0x3fe03d837edff370, 0x3feb929b996a5b7f, // 0.50751, 0.86165 - 0x3fe032ae55edbd95, 0x3feb98fa1fd9155e, // 0.50619, 0.86242 - 0x3fe027d6ad83287e, 0x3feb9f5464c5bffc, // 0.50486, 0.8632 - 0x3fe01cfc874c3eb7, 0x3feba5aa673590d2, // 0.50354, 0.86397 - 0x3fe0121fe4f56d2c, 0x3febabfc262e6586, // 0.50221, 0.86474 - 0x3fe00740c82b82e0, 0x3febb249a0b6c40d, // 0.50089, 0.86551 - 0x3fdff8be6537615e, 0x3febb892d5d5dad5, // 0.49956, 0.86628 - 0x3fdfe2f64be7120f, 0x3febbed7c49380ea, // 0.49823, 0.86705 - 0x3fdfcd2947c1ff57, 0x3febc5186bf8361d, // 0.4969, 0.86781 - 0x3fdfb7575c24d2de, 0x3febcb54cb0d2327, // 0.49557, 0.86857 - 0x3fdfa1808c6cf7e0, 0x3febd18ce0dc19d6, // 0.49423, 0.86933 - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009 - 0x3fdf75c44e26a852, 0x3febddf02cd2b983, // 0.49156, 0.87084 - 0x3fdf5fdee656cda3, 0x3febe41b611154c1, // 0.49023, 0.8716 - 0x3fdf49f4a7e97729, 0x3febea424837de6d, // 0.48889, 0.87235 - 0x3fdf3405963fd068, 0x3febf064e15377dd, // 0.48755, 0.87309 - 0x3fdf1e11b4bbc35c, 0x3febf6832b71ec5b, // 0.48621, 0.87384 - 0x3fdf081906bff7fd, 0x3febfc9d25a1b147, // 0.48487, 0.87459 - 0x3fdef21b8fafd3b5, 0x3fec02b2cef1e641, // 0.48353, 0.87533 - 0x3fdedc1952ef78d5, 0x3fec08c426725549, // 0.48218, 0.87607 - 0x3fdec61253e3c61b, 0x3fec0ed12b3372e9, // 0.48084, 0.87681 - 0x3fdeb00695f25620, 0x3fec14d9dc465e58, // 0.47949, 0.87755 - 0x3fde99f61c817eda, 0x3fec1ade38bce19b, // 0.47815, 0.87828 - 0x3fde83e0eaf85113, 0x3fec20de3fa971b0, // 0.4768, 0.87901 - 0x3fde6dc704be97e2, 0x3fec26d9f01f2eaf, // 0.47545, 0.87974 - 0x3fde57a86d3cd824, 0x3fec2cd14931e3f1, // 0.4741, 0.88047 - 0x3fde418527dc4ffa, 0x3fec32c449f60831, // 0.47275, 0.8812 - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192 - 0x3fde1530a12779f4, 0x3fec3e9d3ee7d262, // 0.47004, 0.88264 - 0x3fddfeff66a941de, 0x3fec44833141c004, // 0.46869, 0.88336 - 0x3fdde8c98bf86bd6, 0x3fec4a64c7a5ac4c, // 0.46733, 0.88408 - 0x3fddd28f1481cc58, 0x3fec5042012b6907, // 0.46598, 0.8848 - 0x3fddbc5003b2edf8, 0x3fec561adceb743e, // 0.46462, 0.88551 - 0x3fdda60c5cfa10d8, 0x3fec5bef59fef85a, // 0.46326, 0.88622 - 0x3fdd8fc423c62a25, 0x3fec61bf777fcc48, // 0.4619, 0.88693 - 0x3fdd79775b86e389, 0x3fec678b3488739b, // 0.46054, 0.88764 - 0x3fdd632607ac9aa9, 0x3fec6d5290341eb2, // 0.45918, 0.88835 - 0x3fdd4cd02ba8609c, 0x3fec7315899eaad7, // 0.45781, 0.88905 - 0x3fdd3675caebf962, 0x3fec78d41fe4a267, // 0.45645, 0.88975 - 0x3fdd2016e8e9db5b, 0x3fec7e8e52233cf3, // 0.45508, 0.89045 - 0x3fdd09b389152ec1, 0x3fec84441f785f61, // 0.45372, 0.89115 - 0x3fdcf34baee1cd21, 0x3fec89f587029c13, // 0.45235, 0.89184 - 0x3fdcdcdf5dc440ce, 0x3fec8fa287e13305, // 0.45098, 0.89253 - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322 - 0x3fdcaff964a0421d, 0x3fec9aef521bd480, // 0.44824, 0.89391 - 0x3fdc997fc3865388, 0x3feca08f19b9c449, // 0.44687, 0.8946 - 0x3fdc8301b95b40c2, 0x3feca62a772fd919, // 0.4455, 0.89528 - 0x3fdc6c7f4997000a, 0x3fecabc169a0b901, // 0.44412, 0.89597 - 0x3fdc55f877b23537, 0x3fecb153f02fb87d, // 0.44275, 0.89665 - 0x3fdc3f6d47263129, 0x3fecb6e20a00da99, // 0.44137, 0.89732 - 0x3fdc28ddbb6cf145, 0x3fecbc6bb638d10b, // 0.43999, 0.898 - 0x3fdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // 0.43862, 0.89867 - 0x3fdbfbb1a05e0edc, 0x3fecc771c2736c09, // 0.43724, 0.89935 - 0x3fdbe51517ffc0d9, 0x3fecccee20c2de9f, // 0.43586, 0.90002 - 0x3fdbce744262deee, 0x3fecd2660e12c1e6, // 0.43448, 0.90068 - 0x3fdbb7cf2304bd01, 0x3fecd7d9898b32f6, // 0.43309, 0.90135 - 0x3fdba125bd63583e, 0x3fecdd489254fe65, // 0.43171, 0.90201 - 0x3fdb8a7814fd5693, 0x3fece2b32799a060, // 0.43033, 0.90267 - 0x3fdb73c62d520624, 0x3fece819488344ce, // 0.42894, 0.90333 - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399 - 0x3fdb4655ae2bf757, 0x3fecf2d829f1b40e, // 0.42617, 0.90464 - 0x3fdb2f971db31972, 0x3fecf830e8ce467b, // 0.42478, 0.9053 - 0x3fdb18d45bf8aca6, 0x3fecfd852fff6ad4, // 0.42339, 0.90595 - 0x3fdb020d6c7f4009, 0x3fed02d4feb2bd92, // 0.422, 0.9066 - 0x3fdaeb4252ca07ab, 0x3fed082054168bac, // 0.42061, 0.90724 - 0x3fdad473125cdc08, 0x3fed0d672f59d2b9, // 0.41922, 0.90789 - 0x3fdabd9faebc3980, 0x3fed12a98fac410c, // 0.41782, 0.90853 - 0x3fdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // 0.41643, 0.90917 - 0x3fda8fec8bf5b166, 0x3fed1d20dc40c15c, // 0.41503, 0.90981 - 0x3fda790cd3dbf31a, 0x3fed2255c6e5a4e1, // 0.41364, 0.91044 - 0x3fda622906a70b63, 0x3fed2786335f52fc, // 0.41224, 0.91107 - 0x3fda4b4127dea1e4, 0x3fed2cb220e0ef9f, // 0.41084, 0.91171 - 0x3fda34553b0afee5, 0x3fed31d98e9e503a, // 0.40944, 0.91234 - 0x3fda1d6543b50ac0, 0x3fed36fc7bcbfbdc, // 0.40804, 0.91296 - 0x3fda067145664d57, 0x3fed3c1ae79f2b4e, // 0.40664, 0.91359 - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421 - 0x3fd9d87d4207b0ab, 0x3fed464a380e7242, // 0.40384, 0.91483 - 0x3fd9c17d440df9f2, 0x3fed4b5b1b187524, // 0.40243, 0.91545 - 0x3fd9aa794d47c9ee, 0x3fed506779a3d2d9, // 0.40103, 0.91606 - 0x3fd993716141bdfe, 0x3fed556f52e93eb1, // 0.39962, 0.91668 - 0x3fd97c6583890fc2, 0x3fed5a72a6221e73, // 0.39822, 0.91729 - 0x3fd96555b7ab948f, 0x3fed5f7172888a7f, // 0.39681, 0.9179 - 0x3fd94e420137bce3, 0x3fed646bb7574de5, // 0.3954, 0.91851 - 0x3fd9372a63bc93d7, 0x3fed696173c9e68b, // 0.39399, 0.91911 - 0x3fd9200ee2c9be97, 0x3fed6e52a71c8547, // 0.39258, 0.91972 - 0x3fd908ef81ef7bd1, 0x3fed733f508c0dff, // 0.39117, 0.92032 - 0x3fd8f1cc44bea329, 0x3fed78276f5617c6, // 0.38976, 0.92092 - 0x3fd8daa52ec8a4af, 0x3fed7d0b02b8ecf9, // 0.38835, 0.92151 - 0x3fd8c37a439f884f, 0x3fed81ea09f38b63, // 0.38693, 0.92211 - 0x3fd8ac4b86d5ed44, 0x3fed86c48445a450, // 0.38552, 0.9227 - 0x3fd89518fbff098e, 0x3fed8b9a70ef9cb4, // 0.3841, 0.92329 - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388 - 0x3fd866a88a792ea0, 0x3fed95389e50429b, // 0.38127, 0.92447 - 0x3fd84f6aaaf3903f, 0x3fed9a00dd8b3d46, // 0.37985, 0.92505 - 0x3fd838290bb359c8, 0x3fed9ec48c26b1f3, // 0.37843, 0.92563 - 0x3fd820e3b04eaac4, 0x3feda383a9668988, // 0.37701, 0.92621 - 0x3fd8099a9c5c362d, 0x3feda83e348f613b, // 0.37559, 0.92679 - 0x3fd7f24dd37341e3, 0x3fedacf42ce68ab9, // 0.37416, 0.92736 - 0x3fd7dafd592ba621, 0x3fedb1a591b20c38, // 0.37274, 0.92794 - 0x3fd7c3a9311dcce7, 0x3fedb6526238a09b, // 0.37132, 0.92851 - 0x3fd7ac515ee2b172, 0x3fedbafa9dc1b78d, // 0.36989, 0.92907 - 0x3fd794f5e613dfae, 0x3fedbf9e4395759a, // 0.36847, 0.92964 - 0x3fd77d96ca4b73a6, 0x3fedc43d52fcb453, // 0.36704, 0.93021 - 0x3fd766340f2418f6, 0x3fedc8d7cb410260, // 0.36561, 0.93077 - 0x3fd74ecdb8390a3e, 0x3fedcd6dabaca3a5, // 0.36418, 0.93133 - 0x3fd73763c9261092, 0x3fedd1fef38a915a, // 0.36276, 0.93188 - 0x3fd71ff6458782ec, 0x3fedd68ba2267a25, // 0.36133, 0.93244 - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299 - 0x3fd6f1108f1bc9c5, 0x3feddf9730ca837b, // 0.35846, 0.93354 - 0x3fd6d998638a0cb5, 0x3fede4160f6d8d81, // 0.35703, 0.93409 - 0x3fd6c21cb1e39771, 0x3fede890520465ce, // 0.3556, 0.93464 - 0x3fd6aa9d7dc77e16, 0x3feded05f7de47da, // 0.35416, 0.93518 - 0x3fd6931acad55f51, 0x3fedf177004b2534, // 0.35273, 0.93573 - 0x3fd67b949cad63ca, 0x3fedf5e36a9ba59c, // 0.35129, 0.93627 - 0x3fd6640af6f03d9e, 0x3fedfa4b3621271d, // 0.34986, 0.9368 - 0x3fd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // 0.34842, 0.93734 - 0x3fd634ed533be58e, 0x3fee030cee1435b8, // 0.34698, 0.93787 - 0x3fd61d595c88c203, 0x3fee0766d9280f54, // 0.34554, 0.9384 - 0x3fd605c1fcc88f63, 0x3fee0bbc22bd8349, // 0.3441, 0.93893 - 0x3fd5ee27379ea693, 0x3fee100cca2980ac, // 0.34266, 0.93946 - 0x3fd5d68910aee686, 0x3fee1458cec1ad83, // 0.34122, 0.93998 - 0x3fd5bee78b9db3b6, 0x3fee18a02fdc66d9, // 0.33978, 0.94051 - 0x3fd5a742ac0ff78d, 0x3fee1ce2ecd0c0d8, // 0.33833, 0.94103 - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154 - 0x3fd577eeec151e47, 0x3fee255a77a63bb8, // 0.33545, 0.94206 - 0x3fd5604012f467b4, 0x3fee298f4439197a, // 0.334, 0.94257 - 0x3fd5488dedeff3be, 0x3fee2dbf6a0911d9, // 0.33255, 0.94308 - 0x3fd530d880af3c24, 0x3fee31eae870ce25, // 0.33111, 0.94359 - 0x3fd5191fceda3c35, 0x3fee3611becbaf69, // 0.32966, 0.9441 - 0x3fd50163dc197047, 0x3fee3a33ec75ce85, // 0.32821, 0.9446 - 0x3fd4e9a4ac15d520, 0x3fee3e5170cbfc46, // 0.32676, 0.94511 - 0x3fd4d1e24278e76a, 0x3fee426a4b2bc17e, // 0.32531, 0.94561 - 0x3fd4ba1ca2eca31c, 0x3fee467e7af35f23, // 0.32386, 0.94611 - 0x3fd4a253d11b82f3, 0x3fee4a8dff81ce5e, // 0.32241, 0.9466 - 0x3fd48a87d0b07fd7, 0x3fee4e98d836c0af, // 0.32096, 0.94709 - 0x3fd472b8a5571054, 0x3fee529f04729ffc, // 0.3195, 0.94759 - 0x3fd45ae652bb2800, 0x3fee56a083968eb1, // 0.31805, 0.94807 - 0x3fd44310dc8936f0, 0x3fee5a9d550467d3, // 0.31659, 0.94856 - 0x3fd42b38466e2928, 0x3fee5e95781ebf1c, // 0.31514, 0.94905 - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953 - 0x3fd3fb7dc932cfa4, 0x3fee6677b0e6d31e, // 0.31222, 0.95001 - 0x3fd3e39be96ec271, 0x3fee6a61c55d53a7, // 0.31077, 0.95049 - 0x3fd3cbb6f87a146e, 0x3fee6e472911da27, // 0.30931, 0.95096 - 0x3fd3b3cefa0414b7, 0x3fee7227db6a9744, // 0.30785, 0.95144 - 0x3fd39be3f1bc8aef, 0x3fee7603dbce74e9, // 0.30639, 0.95191 - 0x3fd383f5e353b6aa, 0x3fee79db29a5165a, // 0.30493, 0.95238 - 0x3fd36c04d27a4edf, 0x3fee7dadc456d850, // 0.30347, 0.95284 - 0x3fd35410c2e18152, 0x3fee817bab4cd10d, // 0.30201, 0.95331 - 0x3fd33c19b83af207, 0x3fee8544ddf0d075, // 0.30054, 0.95377 - 0x3fd3241fb638baaf, 0x3fee89095bad6025, // 0.29908, 0.95423 - 0x3fd30c22c08d6a13, 0x3fee8cc923edc388, // 0.29762, 0.95469 - 0x3fd2f422daec0386, 0x3fee9084361df7f3, // 0.29615, 0.95514 - 0x3fd2dc200907fe51, 0x3fee943a91aab4b4, // 0.29469, 0.95559 - 0x3fd2c41a4e954520, 0x3fee97ec36016b30, // 0.29322, 0.95605 - 0x3fd2ac11af483572, 0x3fee9b99229046f8, // 0.29175, 0.95649 - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694 - 0x3fd27bf7d0f2c346, 0x3feea2e4d212c000, // 0.28882, 0.95738 - 0x3fd263e6995554ba, 0x3feea68393e65800, // 0.28735, 0.95783 - 0x3fd24bd28bb37672, 0x3feeaa1d9bb20af3, // 0.28588, 0.95827 - 0x3fd233bbabc3bb72, 0x3feeadb2e8e7a88e, // 0.28441, 0.9587 - 0x3fd21ba1fd3d2623, 0x3feeb1437af9bb34, // 0.28294, 0.95914 - 0x3fd2038583d727bd, 0x3feeb4cf515b8811, // 0.28146, 0.95957 - 0x3fd1eb6643499fbb, 0x3feeb8566b810f2a, // 0.27999, 0.96 - 0x3fd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // 0.27852, 0.96043 - 0x3fd1bb1f7b999480, 0x3feebf5668eaf2ef, // 0.27705, 0.96086 - 0x3fd1a2f7fbe8f243, 0x3feec2cf4b1af6b2, // 0.27557, 0.96128 - 0x3fd18acdc3f4873a, 0x3feec6436ee60309, // 0.2741, 0.9617 - 0x3fd172a0d7765177, 0x3feec9b2d3c3bf84, // 0.27262, 0.96212 - 0x3fd15a713a28b9d9, 0x3feecd1d792c8f10, // 0.27115, 0.96254 - 0x3fd1423eefc69378, 0x3feed0835e999009, // 0.26967, 0.96295 - 0x3fd12a09fc0b1b12, 0x3feed3e483849c51, // 0.26819, 0.96337 - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378 - 0x3fd0f998277733f7, 0x3feeda9889bfe86a, // 0.26523, 0.96418 - 0x3fd0e15b4e1749cd, 0x3feeddeb6a078651, // 0.26375, 0.96459 - 0x3fd0c91bda4f158d, 0x3feee13987bbebdc, // 0.26227, 0.96499 - 0x3fd0b0d9cfdbdb90, 0x3feee482e25a9dbc, // 0.26079, 0.96539 - 0x3fd09895327b465e, 0x3feee7c77961dc9e, // 0.25931, 0.96579 - 0x3fd0804e05eb661e, 0x3feeeb074c50a544, // 0.25783, 0.96619 - 0x3fd068044deab002, 0x3feeee425aa6b09a, // 0.25635, 0.96658 - 0x3fd04fb80e37fdae, 0x3feef178a3e473c2, // 0.25487, 0.96698 - 0x3fd037694a928cac, 0x3feef4aa278b2032, // 0.25338, 0.96737 - 0x3fd01f1806b9fdd2, 0x3feef7d6e51ca3c0, // 0.2519, 0.96775 - 0x3fd006c4466e54af, 0x3feefafedc1ba8b7, // 0.25041, 0.96814 - 0x3fcfdcdc1adfedf8, 0x3feefe220c0b95ec, // 0.24893, 0.96852 - 0x3fcfac2abeff57ff, 0x3fef014074708ed3, // 0.24744, 0.9689 - 0x3fcf7b7480bd3801, 0x3fef045a14cf738c, // 0.24596, 0.96928 - 0x3fcf4ab9679c9f5c, 0x3fef076eecade0fa, // 0.24447, 0.96966 - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003 - 0x3fcee934c2d006c7, 0x3fef0d8a410379c5, // 0.24149, 0.9704 - 0x3fceb86b462de348, 0x3fef1090bc898f5f, // 0.24, 0.97077 - 0x3fce879d0cc0fdaf, 0x3fef13926dad024e, // 0.23851, 0.97114 - 0x3fce56ca1e101a1b, 0x3fef168f53f7205d, // 0.23702, 0.9715 - 0x3fce25f281a2b684, 0x3fef19876ef1f486, // 0.23553, 0.97187 - 0x3fcdf5163f01099a, 0x3fef1c7abe284708, // 0.23404, 0.97223 - 0x3fcdc4355db40195, 0x3fef1f6941259d7a, // 0.23255, 0.97258 - 0x3fcd934fe5454311, 0x3fef2252f7763ada, // 0.23106, 0.97294 - 0x3fcd6265dd3f27e3, 0x3fef2537e0a71f9f, // 0.22957, 0.97329 - 0x3fcd31774d2cbdee, 0x3fef2817fc4609ce, // 0.22807, 0.97364 - 0x3fcd00843c99c5f9, 0x3fef2af349e17507, // 0.22658, 0.97399 - 0x3fcccf8cb312b286, 0x3fef2dc9c9089a9d, // 0.22508, 0.97434 - 0x3fcc9e90b824a6a9, 0x3fef309b794b719f, // 0.22359, 0.97468 - 0x3fcc6d90535d74dc, 0x3fef33685a3aaef0, // 0.22209, 0.97503 - 0x3fcc3c8b8c4b9dd7, 0x3fef36306b67c556, // 0.2206, 0.97536 - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757 - 0x3fcbda74f5856330, 0x3fef3bb21cc4fe47, // 0.2176, 0.97604 - 0x3fcba96334f15dad, 0x3fef3e6bbc1bbc65, // 0.21611, 0.97637 - 0x3fcb784d30536cda, 0x3fef412089fd8adc, // 0.21461, 0.9767 - 0x3fcb4732ef3d6722, 0x3fef43d085ff92dd, // 0.21311, 0.97703 - 0x3fcb16147941ca2a, 0x3fef467bafb7bbe0, // 0.21161, 0.97735 - 0x3fcae4f1d5f3b9ab, 0x3fef492206bcabb4, // 0.21011, 0.97768 - 0x3fcab3cb0ce6fe44, 0x3fef4bc38aa5c694, // 0.20861, 0.978 - 0x3fca82a025b00451, 0x3fef4e603b0b2f2d, // 0.20711, 0.97832 - 0x3fca517127e3dabc, 0x3fef50f81785c6b9, // 0.20561, 0.97863 - 0x3fca203e1b1831da, 0x3fef538b1faf2d07, // 0.20411, 0.97895 - 0x3fc9ef0706e35a35, 0x3fef56195321c090, // 0.20261, 0.97926 - 0x3fc9bdcbf2dc4366, 0x3fef58a2b1789e84, // 0.2011, 0.97957 - 0x3fc98c8ce69a7aec, 0x3fef5b273a4fa2d9, // 0.1996, 0.97988 - 0x3fc95b49e9b62af9, 0x3fef5da6ed43685d, // 0.1981, 0.98018 - 0x3fc92a0303c8194f, 0x3fef6021c9f148c2, // 0.19659, 0.98048 - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079 - 0x3fc8c7699b34ca7e, 0x3fef6508fef47bd5, // 0.19359, 0.98108 - 0x3fc8961727c41804, 0x3fef677556883cee, // 0.19208, 0.98138 - 0x3fc864c0e9b2b6cf, 0x3fef69dcd652f5de, // 0.19057, 0.98167 - 0x3fc83366e89c64c5, 0x3fef6c3f7df5bbb7, // 0.18907, 0.98196 - 0x3fc802092c1d744b, 0x3fef6e9d4d1262ca, // 0.18756, 0.98225 - 0x3fc7d0a7bbd2cb1b, 0x3fef70f6434b7eb7, // 0.18606, 0.98254 - 0x3fc79f429f59e11d, 0x3fef734a60446279, // 0.18455, 0.98282 - 0x3fc76dd9de50bf31, 0x3fef7599a3a12077, // 0.18304, 0.98311 - 0x3fc73c6d8055fe0a, 0x3fef77e40d068a90, // 0.18153, 0.98339 - 0x3fc70afd8d08c4ff, 0x3fef7a299c1a322a, // 0.18002, 0.98366 - 0x3fc6d98a0c08c8da, 0x3fef7c6a50826840, // 0.17851, 0.98394 - 0x3fc6a81304f64ab2, 0x3fef7ea629e63d6e, // 0.177, 0.98421 - 0x3fc676987f7216b8, 0x3fef80dd27ed8204, // 0.17549, 0.98448 - 0x3fc6451a831d830d, 0x3fef830f4a40c60c, // 0.17398, 0.98475 - 0x3fc61399179a6e94, 0x3fef853c9089595e, // 0.17247, 0.98501 - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528 - 0x3fc5b08c1192e381, 0x3fef898887a36c84, // 0.16945, 0.98554 - 0x3fc57f008654cbde, 0x3fef8ba737cb4b78, // 0.16794, 0.9858 - 0x3fc54d71aa74ef02, 0x3fef8dc10a95380d, // 0.16643, 0.98605 - 0x3fc51bdf8597c5f2, 0x3fef8fd5ffae41db, // 0.16491, 0.98631 - 0x3fc4ea4a1f624b61, 0x3fef91e616c43891, // 0.1634, 0.98656 - 0x3fc4b8b17f79fa88, 0x3fef93f14f85ac08, // 0.16189, 0.98681 - 0x3fc48715ad84cdf5, 0x3fef95f7a9a1ec47, // 0.16037, 0.98706 - 0x3fc45576b1293e5a, 0x3fef97f924c9099b, // 0.15886, 0.9873 - 0x3fc423d4920e4166, 0x3fef99f5c0abd496, // 0.15734, 0.98754 - 0x3fc3f22f57db4893, 0x3fef9bed7cfbde29, // 0.15583, 0.98778 - 0x3fc3c0870a383ff6, 0x3fef9de0596b77a3, // 0.15431, 0.98802 - 0x3fc38edbb0cd8d14, 0x3fef9fce55adb2c8, // 0.1528, 0.98826 - 0x3fc35d2d53440db2, 0x3fefa1b7717661d5, // 0.15128, 0.98849 - 0x3fc32b7bf94516a7, 0x3fefa39bac7a1791, // 0.14976, 0.98872 - 0x3fc2f9c7aa7a72af, 0x3fefa57b066e2754, // 0.14825, 0.98895 - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918 - 0x3fc296564d2b953e, 0x3fefa92b1600657c, // 0.14521, 0.9894 - 0x3fc264994dfd340a, 0x3fefaafbcb0cfddc, // 0.1437, 0.98962 - 0x3fc232d978aed413, 0x3fefacc79de6c44f, // 0.14218, 0.98984 - 0x3fc20116d4ec7bce, 0x3fefae8e8e46cfbb, // 0.14066, 0.99006 - 0x3fc1cf516a62a077, 0x3fefb0509be6f7db, // 0.13914, 0.99027 - 0x3fc19d8940be24e7, 0x3fefb20dc681d54d, // 0.13762, 0.99049 - 0x3fc16bbe5fac5865, 0x3fefb3c60dd2c199, // 0.1361, 0.9907 - 0x3fc139f0cedaf576, 0x3fefb5797195d741, // 0.13458, 0.9909 - 0x3fc1082095f820b0, 0x3fefb727f187f1c7, // 0.13306, 0.99111 - 0x3fc0d64dbcb26786, 0x3fefb8d18d66adb7, // 0.13154, 0.99131 - 0x3fc0a4784ab8bf1d, 0x3fefba7644f068b5, // 0.13002, 0.99151 - 0x3fc072a047ba831d, 0x3fefbc1617e44186, // 0.1285, 0.99171 - 0x3fc040c5bb67747e, 0x3fefbdb106021816, // 0.12698, 0.99191 - 0x3fc00ee8ad6fb85b, 0x3fefbf470f0a8d88, // 0.12545, 0.9921 - 0x3fbfba124b07ad85, 0x3fefc0d832bf043a, // 0.12393, 0.99229 - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248 - 0x3fbef2858d27561b, 0x3fefc3ebc935454c, // 0.12089, 0.99267 - 0x3fbe8eb7fde4aa3e, 0x3fefc56e3b7d9af6, // 0.11937, 0.99285 - 0x3fbe2ae5b8457f77, 0x3fefc6ebc77f0887, // 0.11784, 0.99303 - 0x3fbdc70ecbae9fc8, 0x3fefc8646cfeb721, // 0.11632, 0.99321 - 0x3fbd633347858ce4, 0x3fefc9d82bc2915e, // 0.11479, 0.99339 - 0x3fbcff533b307dc1, 0x3fefcb4703914354, // 0.11327, 0.99356 - 0x3fbc9b6eb6165c42, 0x3fefccb0f4323aa3, // 0.11175, 0.99374 - 0x3fbc3785c79ec2d5, 0x3fefce15fd6da67b, // 0.11022, 0.99391 - 0x3fbbd3987f31fa0e, 0x3fefcf761f0c77a3, // 0.1087, 0.99407 - 0x3fbb6fa6ec38f64c, 0x3fefd0d158d86087, // 0.10717, 0.99424 - 0x3fbb0bb11e1d5559, 0x3fefd227aa9bd53b, // 0.10565, 0.9944 - 0x3fbaa7b724495c04, 0x3fefd37914220b84, // 0.10412, 0.99456 - 0x3fba43b90e27f3c4, 0x3fefd4c59536fae4, // 0.1026, 0.99472 - 0x3fb9dfb6eb24a85c, 0x3fefd60d2da75c9e, // 0.10107, 0.99488 - 0x3fb97bb0caaba56f, 0x3fefd74fdd40abbf, // 0.099544, 0.99503 - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518 - 0x3fb8b398cf0c38e0, 0x3fefd9c68127c78c, // 0.09649, 0.99533 - 0x3fb84f8712c130a0, 0x3fefdafa7514538c, // 0.094963, 0.99548 - 0x3fb7eb7196b72ee4, 0x3fefdc297f674ba9, // 0.093436, 0.99563 - 0x3fb787586a5d5b21, 0x3fefdd539ff1f456, // 0.091909, 0.99577 - 0x3fb7233b9d236e71, 0x3fefde78d68653fd, // 0.090381, 0.99591 - 0x3fb6bf1b3e79b129, 0x3fefdf9922f73307, // 0.088854, 0.99604 - 0x3fb65af75dd0f87b, 0x3fefe0b485181be3, // 0.087326, 0.99618 - 0x3fb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // 0.085797, 0.99631 - 0x3fb592a554489bc8, 0x3fefe2dc89bbff08, // 0.084269, 0.99644 - 0x3fb52e774a4d4d0a, 0x3fefe3e92be9d886, // 0.08274, 0.99657 - 0x3fb4ca45fc1ba8b6, 0x3fefe4f0e31d7a4a, // 0.081211, 0.9967 - 0x3fb4661179272096, 0x3fefe5f3af2e3940, // 0.079682, 0.99682 - 0x3fb401d9d0e3a507, 0x3fefe6f18ff42c84, // 0.078153, 0.99694 - 0x3fb39d9f12c5a299, 0x3fefe7ea85482d60, // 0.076624, 0.99706 - 0x3fb339614e41ffa5, 0x3fefe8de8f03d75c, // 0.075094, 0.99718 - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, // 0.073565, 0.99729 - 0x3fb270dcefdfc45b, 0x3fefeab7df1c6005, // 0.072035, 0.9974 - 0x3fb20c9674ed444c, 0x3fefeb9d2530410f, // 0.070505, 0.99751 - 0x3fb1a84d316d4f8a, 0x3fefec7d7f19cffc, // 0.068974, 0.99762 - 0x3fb1440134d709b2, 0x3fefed58ecb673c4, // 0.067444, 0.99772 - 0x3fb0dfb28ea201e6, 0x3fefee2f6de455ba, // 0.065913, 0.99783 - 0x3fb07b614e463064, 0x3fefef0102826191, // 0.064383, 0.99793 - 0x3fb0170d833bf421, 0x3fefefcdaa704562, // 0.062852, 0.99802 - 0x3faf656e79f820e0, 0x3feff095658e71ad, // 0.061321, 0.99812 - 0x3fae9cbd15ff5527, 0x3feff15833be1965, // 0.05979, 0.99821 - 0x3fadd406f9808ec8, 0x3feff21614e131ed, // 0.058258, 0.9983 - 0x3fad0b4c436f91d0, 0x3feff2cf08da7321, // 0.056727, 0.99839 - 0x3fac428d12c0d7e3, 0x3feff3830f8d575c, // 0.055195, 0.99848 - 0x3fab79c986698b78, 0x3feff43228de1b77, // 0.053664, 0.99856 - 0x3faab101bd5f8317, 0x3feff4dc54b1bed3, // 0.052132, 0.99864 - 0x3fa9e835d6993c87, 0x3feff58192ee0358, // 0.0506, 0.99872 - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, // 0.049068, 0.9988 - 0x3fa856922bb513c1, 0x3feff6bd463b444d, // 0.047535, 0.99887 - 0x3fa78dbaa5874685, 0x3feff753bb1b9164, // 0.046003, 0.99894 - 0x3fa6c4df7d7d5b84, 0x3feff7e5420320f9, // 0.044471, 0.99901 - 0x3fa5fc00d290cd43, 0x3feff871dadb81df, // 0.042938, 0.99908 - 0x3fa5331ec3bba0eb, 0x3feff8f9858f058b, // 0.041406, 0.99914 - 0x3fa46a396ff86179, 0x3feff97c4208c014, // 0.039873, 0.9992 - 0x3fa3a150f6421afc, 0x3feff9fa10348837, // 0.03834, 0.99926 - 0x3fa2d865759455cd, 0x3feffa72effef75d, // 0.036807, 0.99932 - 0x3fa20f770ceb11c6, 0x3feffae6e1556998, // 0.035274, 0.99938 - 0x3fa14685db42c17e, 0x3feffb55e425fdae, // 0.033741, 0.99943 - 0x3fa07d91ff984580, 0x3feffbbff85f9515, // 0.032208, 0.99948 - 0x3f9f693731d1cf01, 0x3feffc251df1d3f8, // 0.030675, 0.99953 - 0x3f9dd7458c64ab39, 0x3feffc8554cd213a, // 0.029142, 0.99958 - 0x3f9c454f4ce53b1c, 0x3feffce09ce2a679, // 0.027608, 0.99962 - 0x3f9ab354b1504fca, 0x3feffd36f624500c, // 0.026075, 0.99966 - 0x3f992155f7a3667e, 0x3feffd886084cd0d, // 0.024541, 0.9997 - 0x3f978f535ddc9f03, 0x3feffdd4dbf78f52, // 0.023008, 0.99974 - 0x3f95fd4d21fab226, 0x3feffe1c6870cb77, // 0.021474, 0.99977 - 0x3f946b4381fce81c, 0x3feffe5f05e578db, // 0.01994, 0.9998 - 0x3f92d936bbe30efd, 0x3feffe9cb44b51a1, // 0.018407, 0.99983 - 0x3f9147270dad7132, 0x3feffed57398d2b7, // 0.016873, 0.99986 - 0x3f8f6a296ab997ca, 0x3fefff0943c53bd1, // 0.015339, 0.99988 - 0x3f8c45ffe1e48ad9, 0x3fefff3824c88f6f, // 0.013805, 0.9999 - 0x3f8921d1fcdec784, 0x3fefff62169b92db, // 0.012272, 0.99992 - 0x3f85fda037ac05e0, 0x3fefff871937ce2f, // 0.010738, 0.99994 - 0x3f82d96b0e509703, 0x3fefffa72c978c4f, // 0.0092038, 0.99996 - 0x3f7f6a65f9a2a3c5, 0x3fefffc250b5daef, // 0.0076698, 0.99997 - 0x3f7921f0fe670071, 0x3fefffd8858e8a92, // 0.0061359, 0.99998 - 0x3f72d97822f996bc, 0x3fefffe9cb1e2e8d, // 0.0046019, 0.99999 - 0x3f6921f8becca4ba, 0x3feffff621621d02, // 0.003068, 1 - 0x3f5921faaee6472d, 0x3feffffd88586ee6, // 0.001534, 1 - 0x0000000000000000, 0x3ff0000000000000, // 0, 1 - 0xbf5921faaee6472d, 0x3feffffd88586ee6, // -0.001534, 1 - 0xbf6921f8becca4ba, 0x3feffff621621d02, // -0.003068, 1 - 0xbf72d97822f996bc, 0x3fefffe9cb1e2e8d, //-0.0046019, 0.99999 - 0xbf7921f0fe670071, 0x3fefffd8858e8a92, //-0.0061359, 0.99998 - 0xbf7f6a65f9a2a3c5, 0x3fefffc250b5daef, //-0.0076698, 0.99997 - 0xbf82d96b0e509703, 0x3fefffa72c978c4f, //-0.0092038, 0.99996 - 0xbf85fda037ac05e0, 0x3fefff871937ce2f, // -0.010738, 0.99994 - 0xbf8921d1fcdec784, 0x3fefff62169b92db, // -0.012272, 0.99992 - 0xbf8c45ffe1e48ad9, 0x3fefff3824c88f6f, // -0.013805, 0.9999 - 0xbf8f6a296ab997ca, 0x3fefff0943c53bd1, // -0.015339, 0.99988 - 0xbf9147270dad7132, 0x3feffed57398d2b7, // -0.016873, 0.99986 - 0xbf92d936bbe30efd, 0x3feffe9cb44b51a1, // -0.018407, 0.99983 - 0xbf946b4381fce81c, 0x3feffe5f05e578db, // -0.01994, 0.9998 - 0xbf95fd4d21fab226, 0x3feffe1c6870cb77, // -0.021474, 0.99977 - 0xbf978f535ddc9f03, 0x3feffdd4dbf78f52, // -0.023008, 0.99974 - 0xbf992155f7a3667e, 0x3feffd886084cd0d, // -0.024541, 0.9997 - 0xbf9ab354b1504fca, 0x3feffd36f624500c, // -0.026075, 0.99966 - 0xbf9c454f4ce53b1c, 0x3feffce09ce2a679, // -0.027608, 0.99962 - 0xbf9dd7458c64ab39, 0x3feffc8554cd213a, // -0.029142, 0.99958 - 0xbf9f693731d1cf01, 0x3feffc251df1d3f8, // -0.030675, 0.99953 - 0xbfa07d91ff984580, 0x3feffbbff85f9515, // -0.032208, 0.99948 - 0xbfa14685db42c17e, 0x3feffb55e425fdae, // -0.033741, 0.99943 - 0xbfa20f770ceb11c6, 0x3feffae6e1556998, // -0.035274, 0.99938 - 0xbfa2d865759455cd, 0x3feffa72effef75d, // -0.036807, 0.99932 - 0xbfa3a150f6421afc, 0x3feff9fa10348837, // -0.03834, 0.99926 - 0xbfa46a396ff86179, 0x3feff97c4208c014, // -0.039873, 0.9992 - 0xbfa5331ec3bba0eb, 0x3feff8f9858f058b, // -0.041406, 0.99914 - 0xbfa5fc00d290cd43, 0x3feff871dadb81df, // -0.042938, 0.99908 - 0xbfa6c4df7d7d5b84, 0x3feff7e5420320f9, // -0.044471, 0.99901 - 0xbfa78dbaa5874685, 0x3feff753bb1b9164, // -0.046003, 0.99894 - 0xbfa856922bb513c1, 0x3feff6bd463b444d, // -0.047535, 0.99887 - 0xbfa91f65f10dd814, 0x3feff621e3796d7e, // -0.049068, 0.9988 - 0xbfa9e835d6993c87, 0x3feff58192ee0358, // -0.0506, 0.99872 - 0xbfaab101bd5f8317, 0x3feff4dc54b1bed3, // -0.052132, 0.99864 - 0xbfab79c986698b78, 0x3feff43228de1b77, // -0.053664, 0.99856 - 0xbfac428d12c0d7e3, 0x3feff3830f8d575c, // -0.055195, 0.99848 - 0xbfad0b4c436f91d0, 0x3feff2cf08da7321, // -0.056727, 0.99839 - 0xbfadd406f9808ec8, 0x3feff21614e131ed, // -0.058258, 0.9983 - 0xbfae9cbd15ff5527, 0x3feff15833be1965, // -0.05979, 0.99821 - 0xbfaf656e79f820e0, 0x3feff095658e71ad, // -0.061321, 0.99812 - 0xbfb0170d833bf421, 0x3fefefcdaa704562, // -0.062852, 0.99802 - 0xbfb07b614e463064, 0x3fefef0102826191, // -0.064383, 0.99793 - 0xbfb0dfb28ea201e6, 0x3fefee2f6de455ba, // -0.065913, 0.99783 - 0xbfb1440134d709b2, 0x3fefed58ecb673c4, // -0.067444, 0.99772 - 0xbfb1a84d316d4f8a, 0x3fefec7d7f19cffc, // -0.068974, 0.99762 - 0xbfb20c9674ed444c, 0x3fefeb9d2530410f, // -0.070505, 0.99751 - 0xbfb270dcefdfc45b, 0x3fefeab7df1c6005, // -0.072035, 0.9974 - 0xbfb2d52092ce19f6, 0x3fefe9cdad01883a, // -0.073565, 0.99729 - 0xbfb339614e41ffa5, 0x3fefe8de8f03d75c, // -0.075094, 0.99718 - 0xbfb39d9f12c5a299, 0x3fefe7ea85482d60, // -0.076624, 0.99706 - 0xbfb401d9d0e3a507, 0x3fefe6f18ff42c84, // -0.078153, 0.99694 - 0xbfb4661179272096, 0x3fefe5f3af2e3940, // -0.079682, 0.99682 - 0xbfb4ca45fc1ba8b6, 0x3fefe4f0e31d7a4a, // -0.081211, 0.9967 - 0xbfb52e774a4d4d0a, 0x3fefe3e92be9d886, // -0.08274, 0.99657 - 0xbfb592a554489bc8, 0x3fefe2dc89bbff08, // -0.084269, 0.99644 - 0xbfb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // -0.085797, 0.99631 - 0xbfb65af75dd0f87b, 0x3fefe0b485181be3, // -0.087326, 0.99618 - 0xbfb6bf1b3e79b129, 0x3fefdf9922f73307, // -0.088854, 0.99604 - 0xbfb7233b9d236e71, 0x3fefde78d68653fd, // -0.090381, 0.99591 - 0xbfb787586a5d5b21, 0x3fefdd539ff1f456, // -0.091909, 0.99577 - 0xbfb7eb7196b72ee4, 0x3fefdc297f674ba9, // -0.093436, 0.99563 - 0xbfb84f8712c130a0, 0x3fefdafa7514538c, // -0.094963, 0.99548 - 0xbfb8b398cf0c38e0, 0x3fefd9c68127c78c, // -0.09649, 0.99533 - 0xbfb917a6bc29b42c, 0x3fefd88da3d12526, // -0.098017, 0.99518 - 0xbfb97bb0caaba56f, 0x3fefd74fdd40abbf, // -0.099544, 0.99503 - 0xbfb9dfb6eb24a85c, 0x3fefd60d2da75c9e, // -0.10107, 0.99488 - 0xbfba43b90e27f3c4, 0x3fefd4c59536fae4, // -0.1026, 0.99472 - 0xbfbaa7b724495c04, 0x3fefd37914220b84, // -0.10412, 0.99456 - 0xbfbb0bb11e1d5559, 0x3fefd227aa9bd53b, // -0.10565, 0.9944 - 0xbfbb6fa6ec38f64c, 0x3fefd0d158d86087, // -0.10717, 0.99424 - 0xbfbbd3987f31fa0e, 0x3fefcf761f0c77a3, // -0.1087, 0.99407 - 0xbfbc3785c79ec2d5, 0x3fefce15fd6da67b, // -0.11022, 0.99391 - 0xbfbc9b6eb6165c42, 0x3fefccb0f4323aa3, // -0.11175, 0.99374 - 0xbfbcff533b307dc1, 0x3fefcb4703914354, // -0.11327, 0.99356 - 0xbfbd633347858ce4, 0x3fefc9d82bc2915e, // -0.11479, 0.99339 - 0xbfbdc70ecbae9fc8, 0x3fefc8646cfeb721, // -0.11632, 0.99321 - 0xbfbe2ae5b8457f77, 0x3fefc6ebc77f0887, // -0.11784, 0.99303 - 0xbfbe8eb7fde4aa3e, 0x3fefc56e3b7d9af6, // -0.11937, 0.99285 - 0xbfbef2858d27561b, 0x3fefc3ebc935454c, // -0.12089, 0.99267 - 0xbfbf564e56a9730e, 0x3fefc26470e19fd3, // -0.12241, 0.99248 - 0xbfbfba124b07ad85, 0x3fefc0d832bf043a, // -0.12393, 0.99229 - 0xbfc00ee8ad6fb85b, 0x3fefbf470f0a8d88, // -0.12545, 0.9921 - 0xbfc040c5bb67747e, 0x3fefbdb106021816, // -0.12698, 0.99191 - 0xbfc072a047ba831d, 0x3fefbc1617e44186, // -0.1285, 0.99171 - 0xbfc0a4784ab8bf1d, 0x3fefba7644f068b5, // -0.13002, 0.99151 - 0xbfc0d64dbcb26786, 0x3fefb8d18d66adb7, // -0.13154, 0.99131 - 0xbfc1082095f820b0, 0x3fefb727f187f1c7, // -0.13306, 0.99111 - 0xbfc139f0cedaf576, 0x3fefb5797195d741, // -0.13458, 0.9909 - 0xbfc16bbe5fac5865, 0x3fefb3c60dd2c199, // -0.1361, 0.9907 - 0xbfc19d8940be24e7, 0x3fefb20dc681d54d, // -0.13762, 0.99049 - 0xbfc1cf516a62a077, 0x3fefb0509be6f7db, // -0.13914, 0.99027 - 0xbfc20116d4ec7bce, 0x3fefae8e8e46cfbb, // -0.14066, 0.99006 - 0xbfc232d978aed413, 0x3fefacc79de6c44f, // -0.14218, 0.98984 - 0xbfc264994dfd340a, 0x3fefaafbcb0cfddc, // -0.1437, 0.98962 - 0xbfc296564d2b953e, 0x3fefa92b1600657c, // -0.14521, 0.9894 - 0xbfc2c8106e8e613a, 0x3fefa7557f08a517, // -0.14673, 0.98918 - 0xbfc2f9c7aa7a72af, 0x3fefa57b066e2754, // -0.14825, 0.98895 - 0xbfc32b7bf94516a7, 0x3fefa39bac7a1791, // -0.14976, 0.98872 - 0xbfc35d2d53440db2, 0x3fefa1b7717661d5, // -0.15128, 0.98849 - 0xbfc38edbb0cd8d14, 0x3fef9fce55adb2c8, // -0.1528, 0.98826 - 0xbfc3c0870a383ff6, 0x3fef9de0596b77a3, // -0.15431, 0.98802 - 0xbfc3f22f57db4893, 0x3fef9bed7cfbde29, // -0.15583, 0.98778 - 0xbfc423d4920e4166, 0x3fef99f5c0abd496, // -0.15734, 0.98754 - 0xbfc45576b1293e5a, 0x3fef97f924c9099b, // -0.15886, 0.9873 - 0xbfc48715ad84cdf5, 0x3fef95f7a9a1ec47, // -0.16037, 0.98706 - 0xbfc4b8b17f79fa88, 0x3fef93f14f85ac08, // -0.16189, 0.98681 - 0xbfc4ea4a1f624b61, 0x3fef91e616c43891, // -0.1634, 0.98656 - 0xbfc51bdf8597c5f2, 0x3fef8fd5ffae41db, // -0.16491, 0.98631 - 0xbfc54d71aa74ef02, 0x3fef8dc10a95380d, // -0.16643, 0.98605 - 0xbfc57f008654cbde, 0x3fef8ba737cb4b78, // -0.16794, 0.9858 - 0xbfc5b08c1192e381, 0x3fef898887a36c84, // -0.16945, 0.98554 - 0xbfc5e214448b3fc6, 0x3fef8764fa714ba9, // -0.17096, 0.98528 - 0xbfc61399179a6e94, 0x3fef853c9089595e, // -0.17247, 0.98501 - 0xbfc6451a831d830d, 0x3fef830f4a40c60c, // -0.17398, 0.98475 - 0xbfc676987f7216b8, 0x3fef80dd27ed8204, // -0.17549, 0.98448 - 0xbfc6a81304f64ab2, 0x3fef7ea629e63d6e, // -0.177, 0.98421 - 0xbfc6d98a0c08c8da, 0x3fef7c6a50826840, // -0.17851, 0.98394 - 0xbfc70afd8d08c4ff, 0x3fef7a299c1a322a, // -0.18002, 0.98366 - 0xbfc73c6d8055fe0a, 0x3fef77e40d068a90, // -0.18153, 0.98339 - 0xbfc76dd9de50bf31, 0x3fef7599a3a12077, // -0.18304, 0.98311 - 0xbfc79f429f59e11d, 0x3fef734a60446279, // -0.18455, 0.98282 - 0xbfc7d0a7bbd2cb1b, 0x3fef70f6434b7eb7, // -0.18606, 0.98254 - 0xbfc802092c1d744b, 0x3fef6e9d4d1262ca, // -0.18756, 0.98225 - 0xbfc83366e89c64c5, 0x3fef6c3f7df5bbb7, // -0.18907, 0.98196 - 0xbfc864c0e9b2b6cf, 0x3fef69dcd652f5de, // -0.19057, 0.98167 - 0xbfc8961727c41804, 0x3fef677556883cee, // -0.19208, 0.98138 - 0xbfc8c7699b34ca7e, 0x3fef6508fef47bd5, // -0.19359, 0.98108 - 0xbfc8f8b83c69a60a, 0x3fef6297cff75cb0, // -0.19509, 0.98079 - 0xbfc92a0303c8194f, 0x3fef6021c9f148c2, // -0.19659, 0.98048 - 0xbfc95b49e9b62af9, 0x3fef5da6ed43685d, // -0.1981, 0.98018 - 0xbfc98c8ce69a7aec, 0x3fef5b273a4fa2d9, // -0.1996, 0.97988 - 0xbfc9bdcbf2dc4366, 0x3fef58a2b1789e84, // -0.2011, 0.97957 - 0xbfc9ef0706e35a35, 0x3fef56195321c090, // -0.20261, 0.97926 - 0xbfca203e1b1831da, 0x3fef538b1faf2d07, // -0.20411, 0.97895 - 0xbfca517127e3dabc, 0x3fef50f81785c6b9, // -0.20561, 0.97863 - 0xbfca82a025b00451, 0x3fef4e603b0b2f2d, // -0.20711, 0.97832 - 0xbfcab3cb0ce6fe44, 0x3fef4bc38aa5c694, // -0.20861, 0.978 - 0xbfcae4f1d5f3b9ab, 0x3fef492206bcabb4, // -0.21011, 0.97768 - 0xbfcb16147941ca2a, 0x3fef467bafb7bbe0, // -0.21161, 0.97735 - 0xbfcb4732ef3d6722, 0x3fef43d085ff92dd, // -0.21311, 0.97703 - 0xbfcb784d30536cda, 0x3fef412089fd8adc, // -0.21461, 0.9767 - 0xbfcba96334f15dad, 0x3fef3e6bbc1bbc65, // -0.21611, 0.97637 - 0xbfcbda74f5856330, 0x3fef3bb21cc4fe47, // -0.2176, 0.97604 - 0xbfcc0b826a7e4f63, 0x3fef38f3ac64e589, // -0.2191, 0.9757 - 0xbfcc3c8b8c4b9dd7, 0x3fef36306b67c556, // -0.2206, 0.97536 - 0xbfcc6d90535d74dc, 0x3fef33685a3aaef0, // -0.22209, 0.97503 - 0xbfcc9e90b824a6a9, 0x3fef309b794b719f, // -0.22359, 0.97468 - 0xbfcccf8cb312b286, 0x3fef2dc9c9089a9d, // -0.22508, 0.97434 - 0xbfcd00843c99c5f9, 0x3fef2af349e17507, // -0.22658, 0.97399 - 0xbfcd31774d2cbdee, 0x3fef2817fc4609ce, // -0.22807, 0.97364 - 0xbfcd6265dd3f27e3, 0x3fef2537e0a71f9f, // -0.22957, 0.97329 - 0xbfcd934fe5454311, 0x3fef2252f7763ada, // -0.23106, 0.97294 - 0xbfcdc4355db40195, 0x3fef1f6941259d7a, // -0.23255, 0.97258 - 0xbfcdf5163f01099a, 0x3fef1c7abe284708, // -0.23404, 0.97223 - 0xbfce25f281a2b684, 0x3fef19876ef1f486, // -0.23553, 0.97187 - 0xbfce56ca1e101a1b, 0x3fef168f53f7205d, // -0.23702, 0.9715 - 0xbfce879d0cc0fdaf, 0x3fef13926dad024e, // -0.23851, 0.97114 - 0xbfceb86b462de348, 0x3fef1090bc898f5f, // -0.24, 0.97077 - 0xbfcee934c2d006c7, 0x3fef0d8a410379c5, // -0.24149, 0.9704 - 0xbfcf19f97b215f1a, 0x3fef0a7efb9230d7, // -0.24298, 0.97003 - 0xbfcf4ab9679c9f5c, 0x3fef076eecade0fa, // -0.24447, 0.96966 - 0xbfcf7b7480bd3801, 0x3fef045a14cf738c, // -0.24596, 0.96928 - 0xbfcfac2abeff57ff, 0x3fef014074708ed3, // -0.24744, 0.9689 - 0xbfcfdcdc1adfedf8, 0x3feefe220c0b95ec, // -0.24893, 0.96852 - 0xbfd006c4466e54af, 0x3feefafedc1ba8b7, // -0.25041, 0.96814 - 0xbfd01f1806b9fdd2, 0x3feef7d6e51ca3c0, // -0.2519, 0.96775 - 0xbfd037694a928cac, 0x3feef4aa278b2032, // -0.25338, 0.96737 - 0xbfd04fb80e37fdae, 0x3feef178a3e473c2, // -0.25487, 0.96698 - 0xbfd068044deab002, 0x3feeee425aa6b09a, // -0.25635, 0.96658 - 0xbfd0804e05eb661e, 0x3feeeb074c50a544, // -0.25783, 0.96619 - 0xbfd09895327b465e, 0x3feee7c77961dc9e, // -0.25931, 0.96579 - 0xbfd0b0d9cfdbdb90, 0x3feee482e25a9dbc, // -0.26079, 0.96539 - 0xbfd0c91bda4f158d, 0x3feee13987bbebdc, // -0.26227, 0.96499 - 0xbfd0e15b4e1749cd, 0x3feeddeb6a078651, // -0.26375, 0.96459 - 0xbfd0f998277733f7, 0x3feeda9889bfe86a, // -0.26523, 0.96418 - 0xbfd111d262b1f677, 0x3feed740e7684963, // -0.26671, 0.96378 - 0xbfd12a09fc0b1b12, 0x3feed3e483849c51, // -0.26819, 0.96337 - 0xbfd1423eefc69378, 0x3feed0835e999009, // -0.26967, 0.96295 - 0xbfd15a713a28b9d9, 0x3feecd1d792c8f10, // -0.27115, 0.96254 - 0xbfd172a0d7765177, 0x3feec9b2d3c3bf84, // -0.27262, 0.96212 - 0xbfd18acdc3f4873a, 0x3feec6436ee60309, // -0.2741, 0.9617 - 0xbfd1a2f7fbe8f243, 0x3feec2cf4b1af6b2, // -0.27557, 0.96128 - 0xbfd1bb1f7b999480, 0x3feebf5668eaf2ef, // -0.27705, 0.96086 - 0xbfd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // -0.27852, 0.96043 - 0xbfd1eb6643499fbb, 0x3feeb8566b810f2a, // -0.27999, 0.96 - 0xbfd2038583d727bd, 0x3feeb4cf515b8811, // -0.28146, 0.95957 - 0xbfd21ba1fd3d2623, 0x3feeb1437af9bb34, // -0.28294, 0.95914 - 0xbfd233bbabc3bb72, 0x3feeadb2e8e7a88e, // -0.28441, 0.9587 - 0xbfd24bd28bb37672, 0x3feeaa1d9bb20af3, // -0.28588, 0.95827 - 0xbfd263e6995554ba, 0x3feea68393e65800, // -0.28735, 0.95783 - 0xbfd27bf7d0f2c346, 0x3feea2e4d212c000, // -0.28882, 0.95738 - 0xbfd294062ed59f05, 0x3fee9f4156c62dda, // -0.29028, 0.95694 - 0xbfd2ac11af483572, 0x3fee9b99229046f8, // -0.29175, 0.95649 - 0xbfd2c41a4e954520, 0x3fee97ec36016b30, // -0.29322, 0.95605 - 0xbfd2dc200907fe51, 0x3fee943a91aab4b4, // -0.29469, 0.95559 - 0xbfd2f422daec0386, 0x3fee9084361df7f3, // -0.29615, 0.95514 - 0xbfd30c22c08d6a13, 0x3fee8cc923edc388, // -0.29762, 0.95469 - 0xbfd3241fb638baaf, 0x3fee89095bad6025, // -0.29908, 0.95423 - 0xbfd33c19b83af207, 0x3fee8544ddf0d075, // -0.30054, 0.95377 - 0xbfd35410c2e18152, 0x3fee817bab4cd10d, // -0.30201, 0.95331 - 0xbfd36c04d27a4edf, 0x3fee7dadc456d850, // -0.30347, 0.95284 - 0xbfd383f5e353b6aa, 0x3fee79db29a5165a, // -0.30493, 0.95238 - 0xbfd39be3f1bc8aef, 0x3fee7603dbce74e9, // -0.30639, 0.95191 - 0xbfd3b3cefa0414b7, 0x3fee7227db6a9744, // -0.30785, 0.95144 - 0xbfd3cbb6f87a146e, 0x3fee6e472911da27, // -0.30931, 0.95096 - 0xbfd3e39be96ec271, 0x3fee6a61c55d53a7, // -0.31077, 0.95049 - 0xbfd3fb7dc932cfa4, 0x3fee6677b0e6d31e, // -0.31222, 0.95001 - 0xbfd4135c94176602, 0x3fee6288ec48e112, // -0.31368, 0.94953 - 0xbfd42b38466e2928, 0x3fee5e95781ebf1c, // -0.31514, 0.94905 - 0xbfd44310dc8936f0, 0x3fee5a9d550467d3, // -0.31659, 0.94856 - 0xbfd45ae652bb2800, 0x3fee56a083968eb1, // -0.31805, 0.94807 - 0xbfd472b8a5571054, 0x3fee529f04729ffc, // -0.3195, 0.94759 - 0xbfd48a87d0b07fd7, 0x3fee4e98d836c0af, // -0.32096, 0.94709 - 0xbfd4a253d11b82f3, 0x3fee4a8dff81ce5e, // -0.32241, 0.9466 - 0xbfd4ba1ca2eca31c, 0x3fee467e7af35f23, // -0.32386, 0.94611 - 0xbfd4d1e24278e76a, 0x3fee426a4b2bc17e, // -0.32531, 0.94561 - 0xbfd4e9a4ac15d520, 0x3fee3e5170cbfc46, // -0.32676, 0.94511 - 0xbfd50163dc197047, 0x3fee3a33ec75ce85, // -0.32821, 0.9446 - 0xbfd5191fceda3c35, 0x3fee3611becbaf69, // -0.32966, 0.9441 - 0xbfd530d880af3c24, 0x3fee31eae870ce25, // -0.33111, 0.94359 - 0xbfd5488dedeff3be, 0x3fee2dbf6a0911d9, // -0.33255, 0.94308 - 0xbfd5604012f467b4, 0x3fee298f4439197a, // -0.334, 0.94257 - 0xbfd577eeec151e47, 0x3fee255a77a63bb8, // -0.33545, 0.94206 - 0xbfd58f9a75ab1fdd, 0x3fee212104f686e5, // -0.33689, 0.94154 - 0xbfd5a742ac0ff78d, 0x3fee1ce2ecd0c0d8, // -0.33833, 0.94103 - 0xbfd5bee78b9db3b6, 0x3fee18a02fdc66d9, // -0.33978, 0.94051 - 0xbfd5d68910aee686, 0x3fee1458cec1ad83, // -0.34122, 0.93998 - 0xbfd5ee27379ea693, 0x3fee100cca2980ac, // -0.34266, 0.93946 - 0xbfd605c1fcc88f63, 0x3fee0bbc22bd8349, // -0.3441, 0.93893 - 0xbfd61d595c88c203, 0x3fee0766d9280f54, // -0.34554, 0.9384 - 0xbfd634ed533be58e, 0x3fee030cee1435b8, // -0.34698, 0.93787 - 0xbfd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // -0.34842, 0.93734 - 0xbfd6640af6f03d9e, 0x3fedfa4b3621271d, // -0.34986, 0.9368 - 0xbfd67b949cad63ca, 0x3fedf5e36a9ba59c, // -0.35129, 0.93627 - 0xbfd6931acad55f51, 0x3fedf177004b2534, // -0.35273, 0.93573 - 0xbfd6aa9d7dc77e16, 0x3feded05f7de47da, // -0.35416, 0.93518 - 0xbfd6c21cb1e39771, 0x3fede890520465ce, // -0.3556, 0.93464 - 0xbfd6d998638a0cb5, 0x3fede4160f6d8d81, // -0.35703, 0.93409 - 0xbfd6f1108f1bc9c5, 0x3feddf9730ca837b, // -0.35846, 0.93354 - 0xbfd7088530fa459e, 0x3feddb13b6ccc23d, // -0.3599, 0.93299 - 0xbfd71ff6458782ec, 0x3fedd68ba2267a25, // -0.36133, 0.93244 - 0xbfd73763c9261092, 0x3fedd1fef38a915a, // -0.36276, 0.93188 - 0xbfd74ecdb8390a3e, 0x3fedcd6dabaca3a5, // -0.36418, 0.93133 - 0xbfd766340f2418f6, 0x3fedc8d7cb410260, // -0.36561, 0.93077 - 0xbfd77d96ca4b73a6, 0x3fedc43d52fcb453, // -0.36704, 0.93021 - 0xbfd794f5e613dfae, 0x3fedbf9e4395759a, // -0.36847, 0.92964 - 0xbfd7ac515ee2b172, 0x3fedbafa9dc1b78d, // -0.36989, 0.92907 - 0xbfd7c3a9311dcce7, 0x3fedb6526238a09b, // -0.37132, 0.92851 - 0xbfd7dafd592ba621, 0x3fedb1a591b20c38, // -0.37274, 0.92794 - 0xbfd7f24dd37341e3, 0x3fedacf42ce68ab9, // -0.37416, 0.92736 - 0xbfd8099a9c5c362d, 0x3feda83e348f613b, // -0.37559, 0.92679 - 0xbfd820e3b04eaac4, 0x3feda383a9668988, // -0.37701, 0.92621 - 0xbfd838290bb359c8, 0x3fed9ec48c26b1f3, // -0.37843, 0.92563 - 0xbfd84f6aaaf3903f, 0x3fed9a00dd8b3d46, // -0.37985, 0.92505 - 0xbfd866a88a792ea0, 0x3fed95389e50429b, // -0.38127, 0.92447 - 0xbfd87de2a6aea963, 0x3fed906bcf328d46, // -0.38268, 0.92388 - 0xbfd89518fbff098e, 0x3fed8b9a70ef9cb4, // -0.3841, 0.92329 - 0xbfd8ac4b86d5ed44, 0x3fed86c48445a450, // -0.38552, 0.9227 - 0xbfd8c37a439f884f, 0x3fed81ea09f38b63, // -0.38693, 0.92211 - 0xbfd8daa52ec8a4af, 0x3fed7d0b02b8ecf9, // -0.38835, 0.92151 - 0xbfd8f1cc44bea329, 0x3fed78276f5617c6, // -0.38976, 0.92092 - 0xbfd908ef81ef7bd1, 0x3fed733f508c0dff, // -0.39117, 0.92032 - 0xbfd9200ee2c9be97, 0x3fed6e52a71c8547, // -0.39258, 0.91972 - 0xbfd9372a63bc93d7, 0x3fed696173c9e68b, // -0.39399, 0.91911 - 0xbfd94e420137bce3, 0x3fed646bb7574de5, // -0.3954, 0.91851 - 0xbfd96555b7ab948f, 0x3fed5f7172888a7f, // -0.39681, 0.9179 - 0xbfd97c6583890fc2, 0x3fed5a72a6221e73, // -0.39822, 0.91729 - 0xbfd993716141bdfe, 0x3fed556f52e93eb1, // -0.39962, 0.91668 - 0xbfd9aa794d47c9ee, 0x3fed506779a3d2d9, // -0.40103, 0.91606 - 0xbfd9c17d440df9f2, 0x3fed4b5b1b187524, // -0.40243, 0.91545 - 0xbfd9d87d4207b0ab, 0x3fed464a380e7242, // -0.40384, 0.91483 - 0xbfd9ef7943a8ed8a, 0x3fed4134d14dc93a, // -0.40524, 0.91421 - 0xbfda067145664d57, 0x3fed3c1ae79f2b4e, // -0.40664, 0.91359 - 0xbfda1d6543b50ac0, 0x3fed36fc7bcbfbdc, // -0.40804, 0.91296 - 0xbfda34553b0afee5, 0x3fed31d98e9e503a, // -0.40944, 0.91234 - 0xbfda4b4127dea1e4, 0x3fed2cb220e0ef9f, // -0.41084, 0.91171 - 0xbfda622906a70b63, 0x3fed2786335f52fc, // -0.41224, 0.91107 - 0xbfda790cd3dbf31a, 0x3fed2255c6e5a4e1, // -0.41364, 0.91044 - 0xbfda8fec8bf5b166, 0x3fed1d20dc40c15c, // -0.41503, 0.90981 - 0xbfdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // -0.41643, 0.90917 - 0xbfdabd9faebc3980, 0x3fed12a98fac410c, // -0.41782, 0.90853 - 0xbfdad473125cdc08, 0x3fed0d672f59d2b9, // -0.41922, 0.90789 - 0xbfdaeb4252ca07ab, 0x3fed082054168bac, // -0.42061, 0.90724 - 0xbfdb020d6c7f4009, 0x3fed02d4feb2bd92, // -0.422, 0.9066 - 0xbfdb18d45bf8aca6, 0x3fecfd852fff6ad4, // -0.42339, 0.90595 - 0xbfdb2f971db31972, 0x3fecf830e8ce467b, // -0.42478, 0.9053 - 0xbfdb4655ae2bf757, 0x3fecf2d829f1b40e, // -0.42617, 0.90464 - 0xbfdb5d1009e15cc0, 0x3feced7af43cc773, // -0.42756, 0.90399 - 0xbfdb73c62d520624, 0x3fece819488344ce, // -0.42894, 0.90333 - 0xbfdb8a7814fd5693, 0x3fece2b32799a060, // -0.43033, 0.90267 - 0xbfdba125bd63583e, 0x3fecdd489254fe65, // -0.43171, 0.90201 - 0xbfdbb7cf2304bd01, 0x3fecd7d9898b32f6, // -0.43309, 0.90135 - 0xbfdbce744262deee, 0x3fecd2660e12c1e6, // -0.43448, 0.90068 - 0xbfdbe51517ffc0d9, 0x3fecccee20c2de9f, // -0.43586, 0.90002 - 0xbfdbfbb1a05e0edc, 0x3fecc771c2736c09, // -0.43724, 0.89935 - 0xbfdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // -0.43862, 0.89867 - 0xbfdc28ddbb6cf145, 0x3fecbc6bb638d10b, // -0.43999, 0.898 - 0xbfdc3f6d47263129, 0x3fecb6e20a00da99, // -0.44137, 0.89732 - 0xbfdc55f877b23537, 0x3fecb153f02fb87d, // -0.44275, 0.89665 - 0xbfdc6c7f4997000a, 0x3fecabc169a0b901, // -0.44412, 0.89597 - 0xbfdc8301b95b40c2, 0x3feca62a772fd919, // -0.4455, 0.89528 - 0xbfdc997fc3865388, 0x3feca08f19b9c449, // -0.44687, 0.8946 - 0xbfdcaff964a0421d, 0x3fec9aef521bd480, // -0.44824, 0.89391 - 0xbfdcc66e9931c45d, 0x3fec954b213411f5, // -0.44961, 0.89322 - 0xbfdcdcdf5dc440ce, 0x3fec8fa287e13305, // -0.45098, 0.89253 - 0xbfdcf34baee1cd21, 0x3fec89f587029c13, // -0.45235, 0.89184 - 0xbfdd09b389152ec1, 0x3fec84441f785f61, // -0.45372, 0.89115 - 0xbfdd2016e8e9db5b, 0x3fec7e8e52233cf3, // -0.45508, 0.89045 - 0xbfdd3675caebf962, 0x3fec78d41fe4a267, // -0.45645, 0.88975 - 0xbfdd4cd02ba8609c, 0x3fec7315899eaad7, // -0.45781, 0.88905 - 0xbfdd632607ac9aa9, 0x3fec6d5290341eb2, // -0.45918, 0.88835 - 0xbfdd79775b86e389, 0x3fec678b3488739b, // -0.46054, 0.88764 - 0xbfdd8fc423c62a25, 0x3fec61bf777fcc48, // -0.4619, 0.88693 - 0xbfdda60c5cfa10d8, 0x3fec5bef59fef85a, // -0.46326, 0.88622 - 0xbfddbc5003b2edf8, 0x3fec561adceb743e, // -0.46462, 0.88551 - 0xbfddd28f1481cc58, 0x3fec5042012b6907, // -0.46598, 0.8848 - 0xbfdde8c98bf86bd6, 0x3fec4a64c7a5ac4c, // -0.46733, 0.88408 - 0xbfddfeff66a941de, 0x3fec44833141c004, // -0.46869, 0.88336 - 0xbfde1530a12779f4, 0x3fec3e9d3ee7d262, // -0.47004, 0.88264 - 0xbfde2b5d3806f63b, 0x3fec38b2f180bdb1, // -0.4714, 0.88192 - 0xbfde418527dc4ffa, 0x3fec32c449f60831, // -0.47275, 0.8812 - 0xbfde57a86d3cd824, 0x3fec2cd14931e3f1, // -0.4741, 0.88047 - 0xbfde6dc704be97e2, 0x3fec26d9f01f2eaf, // -0.47545, 0.87974 - 0xbfde83e0eaf85113, 0x3fec20de3fa971b0, // -0.4768, 0.87901 - 0xbfde99f61c817eda, 0x3fec1ade38bce19b, // -0.47815, 0.87828 - 0xbfdeb00695f25620, 0x3fec14d9dc465e58, // -0.47949, 0.87755 - 0xbfdec61253e3c61b, 0x3fec0ed12b3372e9, // -0.48084, 0.87681 - 0xbfdedc1952ef78d5, 0x3fec08c426725549, // -0.48218, 0.87607 - 0xbfdef21b8fafd3b5, 0x3fec02b2cef1e641, // -0.48353, 0.87533 - 0xbfdf081906bff7fd, 0x3febfc9d25a1b147, // -0.48487, 0.87459 - 0xbfdf1e11b4bbc35c, 0x3febf6832b71ec5b, // -0.48621, 0.87384 - 0xbfdf3405963fd068, 0x3febf064e15377dd, // -0.48755, 0.87309 - 0xbfdf49f4a7e97729, 0x3febea424837de6d, // -0.48889, 0.87235 - 0xbfdf5fdee656cda3, 0x3febe41b611154c1, // -0.49023, 0.8716 - 0xbfdf75c44e26a852, 0x3febddf02cd2b983, // -0.49156, 0.87084 - 0xbfdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // -0.4929, 0.87009 - 0xbfdfa1808c6cf7e0, 0x3febd18ce0dc19d6, // -0.49423, 0.86933 - 0xbfdfb7575c24d2de, 0x3febcb54cb0d2327, // -0.49557, 0.86857 - 0xbfdfcd2947c1ff57, 0x3febc5186bf8361d, // -0.4969, 0.86781 - 0xbfdfe2f64be7120f, 0x3febbed7c49380ea, // -0.49823, 0.86705 - 0xbfdff8be6537615e, 0x3febb892d5d5dad5, // -0.49956, 0.86628 - 0xbfe00740c82b82e0, 0x3febb249a0b6c40d, // -0.50089, 0.86551 - 0xbfe0121fe4f56d2c, 0x3febabfc262e6586, // -0.50221, 0.86474 - 0xbfe01cfc874c3eb7, 0x3feba5aa673590d2, // -0.50354, 0.86397 - 0xbfe027d6ad83287e, 0x3feb9f5464c5bffc, // -0.50486, 0.8632 - 0xbfe032ae55edbd95, 0x3feb98fa1fd9155e, // -0.50619, 0.86242 - 0xbfe03d837edff370, 0x3feb929b996a5b7f, // -0.50751, 0.86165 - 0xbfe0485626ae221a, 0x3feb8c38d27504e9, // -0.50883, 0.86087 - 0xbfe053264bad0483, 0x3feb85d1cbf52c02, // -0.51015, 0.86009 - 0xbfe05df3ec31b8b6, 0x3feb7f6686e792ea, // -0.51147, 0.8593 - 0xbfe068bf0691c028, 0x3feb78f70449a34b, // -0.51279, 0.85852 - 0xbfe073879922ffed, 0x3feb728345196e3e, // -0.5141, 0.85773 - 0xbfe07e4da23bc102, 0x3feb6c0b4a55ac17, // -0.51542, 0.85694 - 0xbfe089112032b08c, 0x3feb658f14fdbc47, // -0.51673, 0.85615 - 0xbfe093d2115ee018, 0x3feb5f0ea611a532, // -0.51804, 0.85535 - 0xbfe09e907417c5e1, 0x3feb5889fe921405, // -0.51936, 0.85456 - 0xbfe0a94c46b53d0b, 0x3feb52011f805c92, // -0.52067, 0.85376 - 0xbfe0b405878f85ec, 0x3feb4b7409de7925, // -0.52198, 0.85296 - 0xbfe0bebc34ff4646, 0x3feb44e2beaf0a61, // -0.52328, 0.85216 - 0xbfe0c9704d5d898f, 0x3feb3e4d3ef55712, // -0.52459, 0.85136 - 0xbfe0d421cf03c12b, 0x3feb37b38bb54c09, // -0.5259, 0.85055 - 0xbfe0ded0b84bc4b5, 0x3feb3115a5f37bf4, // -0.5272, 0.84974 - 0xbfe0e97d078fd23b, 0x3feb2a738eb51f33, // -0.5285, 0.84893 - 0xbfe0f426bb2a8e7d, 0x3feb23cd470013b4, // -0.5298, 0.84812 - 0xbfe0fecdd1770537, 0x3feb1d22cfdadcc6, // -0.5311, 0.84731 - 0xbfe1097248d0a956, 0x3feb16742a4ca2f5, // -0.5324, 0.84649 - 0xbfe114141f935545, 0x3feb0fc1575d33db, // -0.5337, 0.84567 - 0xbfe11eb3541b4b22, 0x3feb090a58150200, // -0.535, 0.84485 - 0xbfe1294fe4c5350a, 0x3feb024f2d7d24a9, // -0.53629, 0.84403 - 0xbfe133e9cfee254e, 0x3feafb8fd89f57b6, // -0.53759, 0.84321 - 0xbfe13e8113f396c1, 0x3feaf4cc5a85fb73, // -0.53888, 0.84238 - 0xbfe14915af336ceb, 0x3feaee04b43c1474, // -0.54017, 0.84155 - 0xbfe153a7a00bf453, 0x3feae738e6cd4b67, // -0.54146, 0.84073 - 0xbfe15e36e4dbe2bc, 0x3feae068f345ecef, // -0.54275, 0.83989 - 0xbfe168c37c025764, 0x3fead994dab2e979, // -0.54404, 0.83906 - 0xbfe1734d63dedb49, 0x3fead2bc9e21d511, // -0.54532, 0.83822 - 0xbfe17dd49ad16161, 0x3feacbe03ea0e73b, // -0.54661, 0.83739 - 0xbfe188591f3a46e5, 0x3feac4ffbd3efac8, // -0.54789, 0.83655 - 0xbfe192daef7a5386, 0x3feabe1b1b0b8dac, // -0.54918, 0.83571 - 0xbfe19d5a09f2b9b8, 0x3feab7325916c0d4, // -0.55046, 0.83486 - 0xbfe1a7d66d0516e6, 0x3feab045787157ff, // -0.55174, 0.83402 - 0xbfe1b250171373be, 0x3feaa9547a2cb98e, // -0.55302, 0.83317 - 0xbfe1bcc706804467, 0x3feaa25f5f5aee60, // -0.55429, 0.83232 - 0xbfe1c73b39ae68c8, 0x3fea9b66290ea1a3, // -0.55557, 0.83147 - 0xbfe1d1acaf012cc2, 0x3fea9468d85b20ae, // -0.55685, 0.83062 - 0xbfe1dc1b64dc4872, 0x3fea8d676e545ad2, // -0.55812, 0.82976 - 0xbfe1e68759a3e074, 0x3fea8661ec0ee133, // -0.55939, 0.8289 - 0xbfe1f0f08bbc861b, 0x3fea7f58529fe69d, // -0.56066, 0.82805 - 0xbfe1fb56f98b37b8, 0x3fea784aa31d3f55, // -0.56193, 0.82718 - 0xbfe205baa17560d6, 0x3fea7138de9d60f5, // -0.5632, 0.82632 - 0xbfe2101b81e0da78, 0x3fea6a230637623b, // -0.56447, 0.82546 - 0xbfe21a799933eb58, 0x3fea63091b02fae2, // -0.56573, 0.82459 - 0xbfe224d4e5d5482e, 0x3fea5beb1e188375, // -0.567, 0.82372 - 0xbfe22f2d662c13e1, 0x3fea54c91090f524, // -0.56826, 0.82285 - 0xbfe23983189fdfd5, 0x3fea4da2f385e997, // -0.56952, 0.82198 - 0xbfe243d5fb98ac1f, 0x3fea4678c8119ac8, // -0.57078, 0.8211 - 0xbfe24e260d7ee7c9, 0x3fea3f4a8f4ee2d2, // -0.57204, 0.82023 - 0xbfe258734cbb7110, 0x3fea38184a593bc6, // -0.5733, 0.81935 - 0xbfe262bdb7b795a2, 0x3fea30e1fa4cbf81, // -0.57455, 0.81847 - 0xbfe26d054cdd12df, 0x3fea29a7a0462782, // -0.57581, 0.81758 - 0xbfe2774a0a961612, 0x3fea22693d62ccb9, // -0.57706, 0.8167 - 0xbfe2818bef4d3cba, 0x3fea1b26d2c0a75e, // -0.57831, 0.81581 - 0xbfe28bcaf96d94ba, 0x3fea13e0617e4ec7, // -0.57956, 0.81493 - 0xbfe2960727629ca8, 0x3fea0c95eabaf937, // -0.58081, 0.81404 - 0xbfe2a040779843fb, 0x3fea05476f967bb5, // -0.58206, 0.81314 - 0xbfe2aa76e87aeb58, 0x3fe9fdf4f13149de, // -0.58331, 0.81225 - 0xbfe2b4aa787764c4, 0x3fe9f69e70ac75bc, // -0.58455, 0.81135 - 0xbfe2bedb25faf3ea, 0x3fe9ef43ef29af94, // -0.5858, 0.81046 - 0xbfe2c908ef734e57, 0x3fe9e7e56dcb45bd, // -0.58704, 0.80956 - 0xbfe2d333d34e9bb7, 0x3fe9e082edb42472, // -0.58828, 0.80866 - 0xbfe2dd5bcffb7616, 0x3fe9d91c7007d5a6, // -0.58952, 0.80775 - 0xbfe2e780e3e8ea16, 0x3fe9d1b1f5ea80d6, // -0.59076, 0.80685 - 0xbfe2f1a30d86773a, 0x3fe9ca438080eadb, // -0.592, 0.80594 - 0xbfe2fbc24b441015, 0x3fe9c2d110f075c3, // -0.59323, 0.80503 - 0xbfe305de9b921a94, 0x3fe9bb5aa85f2098, // -0.59447, 0.80412 - 0xbfe30ff7fce17035, 0x3fe9b3e047f38741, // -0.5957, 0.80321 - 0xbfe31a0e6da35e44, 0x3fe9ac61f0d4e247, // -0.59693, 0.80229 - 0xbfe32421ec49a620, 0x3fe9a4dfa42b06b2, // -0.59816, 0.80138 - 0xbfe32e3277467d6b, 0x3fe99d59631e65d5, // -0.59939, 0.80046 - 0xbfe338400d0c8e57, 0x3fe995cf2ed80d22, // -0.60062, 0.79954 - 0xbfe3424aac0ef7d6, 0x3fe98e410881a600, // -0.60184, 0.79861 - 0xbfe34c5252c14de1, 0x3fe986aef1457594, // -0.60307, 0.79769 - 0xbfe35656ff9799ae, 0x3fe97f18ea4e5c9e, // -0.60429, 0.79676 - 0xbfe36058b10659f3, 0x3fe9777ef4c7d742, // -0.60551, 0.79584 - 0xbfe36a576582831b, 0x3fe96fe111ddfce0, // -0.60673, 0.79491 - 0xbfe374531b817f8d, 0x3fe9683f42bd7fe1, // -0.60795, 0.79398 - 0xbfe37e4bd1792fe2, 0x3fe960998893ad8c, // -0.60917, 0.79304 - 0xbfe3884185dfeb22, 0x3fe958efe48e6dd7, // -0.61038, 0.79211 - 0xbfe39234372c7f04, 0x3fe9514257dc4335, // -0.6116, 0.79117 - 0xbfe39c23e3d63029, 0x3fe94990e3ac4a6c, // -0.61281, 0.79023 - 0xbfe3a6108a54ba58, 0x3fe941db892e3a65, // -0.61402, 0.78929 - 0xbfe3affa292050b9, 0x3fe93a22499263fc, // -0.61523, 0.78835 - 0xbfe3b9e0beb19e18, 0x3fe932652609b1cf, // -0.61644, 0.7874 - 0xbfe3c3c44981c517, 0x3fe92aa41fc5a815, // -0.61765, 0.78646 - 0xbfe3cda4c80a6076, 0x3fe922df37f8646a, // -0.61885, 0.78551 - 0xbfe3d78238c58343, 0x3fe91b166fd49da2, // -0.62006, 0.78456 - 0xbfe3e15c9a2db922, 0x3fe91349c88da398, // -0.62126, 0.7836 - 0xbfe3eb33eabe0680, 0x3fe90b7943575efe, // -0.62246, 0.78265 - 0xbfe3f50828f1e8d2, 0x3fe903a4e1665133, // -0.62366, 0.78169 - 0xbfe3fed9534556d4, 0x3fe8fbcca3ef940d, // -0.62486, 0.78074 - 0xbfe408a76834c0c0, 0x3fe8f3f08c28d9ac, // -0.62606, 0.77978 - 0xbfe41272663d108c, 0x3fe8ec109b486c49, // -0.62725, 0.77882 - 0xbfe41c3a4bdbaa26, 0x3fe8e42cd2852e0a, // -0.62845, 0.77785 - 0xbfe425ff178e6bb1, 0x3fe8dc45331698cc, // -0.62964, 0.77689 - 0xbfe42fc0c7d3adbb, 0x3fe8d459be34bdfa, // -0.63083, 0.77592 - 0xbfe4397f5b2a4380, 0x3fe8cc6a75184655, // -0.63202, 0.77495 - 0xbfe4433ad0117b1d, 0x3fe8c47758fa71cb, // -0.63321, 0.77398 - 0xbfe44cf325091dd6, 0x3fe8bc806b151741, // -0.63439, 0.77301 - 0xbfe456a858917046, 0x3fe8b485aca2a468, // -0.63558, 0.77204 - 0xbfe4605a692b32a2, 0x3fe8ac871ede1d88, // -0.63676, 0.77106 - 0xbfe46a095557a0f1, 0x3fe8a484c3031d50, // -0.63794, 0.77008 - 0xbfe473b51b987347, 0x3fe89c7e9a4dd4ab, // -0.63912, 0.7691 - 0xbfe47d5dba6fde01, 0x3fe89474a5fb0a84, // -0.6403, 0.76812 - 0xbfe48703306091fe, 0x3fe88c66e7481ba1, // -0.64148, 0.76714 - 0xbfe490a57bedbcdf, 0x3fe884555f72fa6b, // -0.64266, 0.76615 - 0xbfe49a449b9b0938, 0x3fe87c400fba2ebf, // -0.64383, 0.76517 - 0xbfe4a3e08dec9ed6, 0x3fe87426f95cd5bd, // -0.645, 0.76418 - 0xbfe4ad79516722f0, 0x3fe86c0a1d9aa195, // -0.64618, 0.76319 - 0xbfe4b70ee48fb869, 0x3fe863e97db3d95a, // -0.64735, 0.7622 - 0xbfe4c0a145ec0004, 0x3fe85bc51ae958cc, // -0.64851, 0.7612 - 0xbfe4ca30740218a3, 0x3fe8539cf67c9029, // -0.64968, 0.76021 - 0xbfe4d3bc6d589f80, 0x3fe84b7111af83f9, // -0.65085, 0.75921 - 0xbfe4dd453076b064, 0x3fe843416dc4cce2, // -0.65201, 0.75821 - 0xbfe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // -0.65317, 0.75721 - 0xbfe4f04d0e2859aa, 0x3fe832d6eda3a3e0, // -0.65433, 0.75621 - 0xbfe4f9cc25cca486, 0x3fe82a9c13f545ff, // -0.65549, 0.7552 - 0xbfe503480159ded2, 0x3fe8225d803964e5, // -0.65665, 0.75419 - 0xbfe50cc09f59a09b, 0x3fe81a1b33b57acc, // -0.65781, 0.75319 - 0xbfe51635fe5601d7, 0x3fe811d52faf94dc, // -0.65896, 0.75218 - 0xbfe51fa81cd99aa6, 0x3fe8098b756e52fa, // -0.66011, 0.75117 - 0xbfe52916f96f8388, 0x3fe8013e0638e795, // -0.66127, 0.75015 - 0xbfe5328292a35596, 0x3fe7f8ece3571771, // -0.66242, 0.74914 - 0xbfe53beae7012abe, 0x3fe7f0980e113978, // -0.66356, 0.74812 - 0xbfe5454ff5159dfb, 0x3fe7e83f87b03686, // -0.66471, 0.7471 - 0xbfe54eb1bb6dcb8f, 0x3fe7dfe3517d8937, // -0.66586, 0.74608 - 0xbfe5581038975137, 0x3fe7d7836cc33db2, // -0.667, 0.74506 - 0xbfe5616b6b204e6e, 0x3fe7cf1fdacbf179, // -0.66814, 0.74403 - 0xbfe56ac35197649e, 0x3fe7c6b89ce2d333, // -0.66928, 0.74301 - 0xbfe57417ea8bb75c, 0x3fe7be4db453a27c, // -0.67042, 0.74198 - 0xbfe57d69348cec9f, 0x3fe7b5df226aafb0, // -0.67156, 0.74095 - 0xbfe586b72e2b2cfd, 0x3fe7ad6ce874dbb6, // -0.67269, 0.73992 - 0xbfe59001d5f723df, 0x3fe7a4f707bf97d2, // -0.67383, 0.73889 - 0xbfe599492a81ffbc, 0x3fe79c7d8198e56e, // -0.67496, 0.73785 - 0xbfe5a28d2a5d7250, 0x3fe79400574f55e4, // -0.67609, 0.73682 - 0xbfe5abcdd41bb0d8, 0x3fe78b7f8a320a52, // -0.67722, 0.73578 - 0xbfe5b50b264f7448, 0x3fe782fb1b90b35b, // -0.67835, 0.73474 - 0xbfe5be451f8bf980, 0x3fe77a730cbb9100, // -0.67948, 0.7337 - 0xbfe5c77bbe65018c, 0x3fe771e75f037261, // -0.6806, 0.73265 - 0xbfe5d0af016ed1d4, 0x3fe7695813b9b594, // -0.68172, 0.73161 - 0xbfe5d9dee73e345c, 0x3fe760c52c304764, // -0.68285, 0.73056 - 0xbfe5e30b6e6877f3, 0x3fe7582ea9b9a329, // -0.68397, 0.72951 - 0xbfe5ec3495837074, 0x3fe74f948da8d28d, // -0.68508, 0.72846 - 0xbfe5f55a5b2576f8, 0x3fe746f6d9516d59, // -0.6862, 0.72741 - 0xbfe5fe7cbde56a0f, 0x3fe73e558e079942, // -0.68732, 0.72636 - 0xbfe6079bbc5aadfa, 0x3fe735b0ad2009b2, // -0.68843, 0.7253 - 0xbfe610b7551d2cde, 0x3fe72d0837efff97, // -0.68954, 0.72425 - 0xbfe619cf86c55702, 0x3fe7245c2fcd492a, // -0.69065, 0.72319 - 0xbfe622e44fec22ff, 0x3fe71bac960e41bf, // -0.69176, 0.72213 - 0xbfe62bf5af2b0dfd, 0x3fe712f96c09d18d, // -0.69287, 0.72107 - 0xbfe63503a31c1be8, 0x3fe70a42b3176d7a, // -0.69397, 0.72 - 0xbfe63e0e2a59d7aa, 0x3fe701886c8f16e6, // -0.69508, 0.71894 - 0xbfe64715437f535b, 0x3fe6f8ca99c95b75, // -0.69618, 0.71787 - 0xbfe65018ed28287f, 0x3fe6f0093c1f54de, // -0.69728, 0.7168 - 0xbfe6591925f0783e, 0x3fe6e74454eaa8ae, // -0.69838, 0.71573 - 0xbfe66215ec74eb91, 0x3fe6de7be585881d, // -0.69947, 0.71466 - 0xbfe66b0f3f52b386, 0x3fe6d5afef4aafcc, // -0.70057, 0.71358 - 0xbfe674051d27896c, 0x3fe6cce07395679f, // -0.70166, 0.71251 - 0xbfe67cf78491af10, 0x3fe6c40d73c18275, // -0.70275, 0.71143 - 0xbfe685e6742feeef, 0x3fe6bb36f12b5e06, // -0.70385, 0.71035 - 0xbfe68ed1eaa19c71, 0x3fe6b25ced2fe29c, // -0.70493, 0.70927 - 0xbfe697b9e686941c, 0x3fe6a97f692c82ea, // -0.70602, 0.70819 - 0xbfe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // -0.70711, 0.70711 - 0xbfe6a97f692c82ea, 0x3fe697b9e686941c, // -0.70819, 0.70602 - 0xbfe6b25ced2fe29c, 0x3fe68ed1eaa19c71, // -0.70927, 0.70493 - 0xbfe6bb36f12b5e06, 0x3fe685e6742feeef, // -0.71035, 0.70385 - 0xbfe6c40d73c18275, 0x3fe67cf78491af10, // -0.71143, 0.70275 - 0xbfe6cce07395679f, 0x3fe674051d27896c, // -0.71251, 0.70166 - 0xbfe6d5afef4aafcc, 0x3fe66b0f3f52b386, // -0.71358, 0.70057 - 0xbfe6de7be585881d, 0x3fe66215ec74eb91, // -0.71466, 0.69947 - 0xbfe6e74454eaa8ae, 0x3fe6591925f0783e, // -0.71573, 0.69838 - 0xbfe6f0093c1f54de, 0x3fe65018ed28287f, // -0.7168, 0.69728 - 0xbfe6f8ca99c95b75, 0x3fe64715437f535b, // -0.71787, 0.69618 - 0xbfe701886c8f16e6, 0x3fe63e0e2a59d7aa, // -0.71894, 0.69508 - 0xbfe70a42b3176d7a, 0x3fe63503a31c1be8, // -0.72, 0.69397 - 0xbfe712f96c09d18d, 0x3fe62bf5af2b0dfd, // -0.72107, 0.69287 - 0xbfe71bac960e41bf, 0x3fe622e44fec22ff, // -0.72213, 0.69176 - 0xbfe7245c2fcd492a, 0x3fe619cf86c55702, // -0.72319, 0.69065 - 0xbfe72d0837efff97, 0x3fe610b7551d2cde, // -0.72425, 0.68954 - 0xbfe735b0ad2009b2, 0x3fe6079bbc5aadfa, // -0.7253, 0.68843 - 0xbfe73e558e079942, 0x3fe5fe7cbde56a0f, // -0.72636, 0.68732 - 0xbfe746f6d9516d59, 0x3fe5f55a5b2576f8, // -0.72741, 0.6862 - 0xbfe74f948da8d28d, 0x3fe5ec3495837074, // -0.72846, 0.68508 - 0xbfe7582ea9b9a329, 0x3fe5e30b6e6877f3, // -0.72951, 0.68397 - 0xbfe760c52c304764, 0x3fe5d9dee73e345c, // -0.73056, 0.68285 - 0xbfe7695813b9b594, 0x3fe5d0af016ed1d4, // -0.73161, 0.68172 - 0xbfe771e75f037261, 0x3fe5c77bbe65018c, // -0.73265, 0.6806 - 0xbfe77a730cbb9100, 0x3fe5be451f8bf980, // -0.7337, 0.67948 - 0xbfe782fb1b90b35b, 0x3fe5b50b264f7448, // -0.73474, 0.67835 - 0xbfe78b7f8a320a52, 0x3fe5abcdd41bb0d8, // -0.73578, 0.67722 - 0xbfe79400574f55e4, 0x3fe5a28d2a5d7250, // -0.73682, 0.67609 - 0xbfe79c7d8198e56e, 0x3fe599492a81ffbc, // -0.73785, 0.67496 - 0xbfe7a4f707bf97d2, 0x3fe59001d5f723df, // -0.73889, 0.67383 - 0xbfe7ad6ce874dbb6, 0x3fe586b72e2b2cfd, // -0.73992, 0.67269 - 0xbfe7b5df226aafb0, 0x3fe57d69348cec9f, // -0.74095, 0.67156 - 0xbfe7be4db453a27c, 0x3fe57417ea8bb75c, // -0.74198, 0.67042 - 0xbfe7c6b89ce2d333, 0x3fe56ac35197649e, // -0.74301, 0.66928 - 0xbfe7cf1fdacbf179, 0x3fe5616b6b204e6e, // -0.74403, 0.66814 - 0xbfe7d7836cc33db2, 0x3fe5581038975137, // -0.74506, 0.667 - 0xbfe7dfe3517d8937, 0x3fe54eb1bb6dcb8f, // -0.74608, 0.66586 - 0xbfe7e83f87b03686, 0x3fe5454ff5159dfb, // -0.7471, 0.66471 - 0xbfe7f0980e113978, 0x3fe53beae7012abe, // -0.74812, 0.66356 - 0xbfe7f8ece3571771, 0x3fe5328292a35596, // -0.74914, 0.66242 - 0xbfe8013e0638e795, 0x3fe52916f96f8388, // -0.75015, 0.66127 - 0xbfe8098b756e52fa, 0x3fe51fa81cd99aa6, // -0.75117, 0.66011 - 0xbfe811d52faf94dc, 0x3fe51635fe5601d7, // -0.75218, 0.65896 - 0xbfe81a1b33b57acc, 0x3fe50cc09f59a09b, // -0.75319, 0.65781 - 0xbfe8225d803964e5, 0x3fe503480159ded2, // -0.75419, 0.65665 - 0xbfe82a9c13f545ff, 0x3fe4f9cc25cca486, // -0.7552, 0.65549 - 0xbfe832d6eda3a3e0, 0x3fe4f04d0e2859aa, // -0.75621, 0.65433 - 0xbfe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // -0.75721, 0.65317 - 0xbfe843416dc4cce2, 0x3fe4dd453076b064, // -0.75821, 0.65201 - 0xbfe84b7111af83f9, 0x3fe4d3bc6d589f80, // -0.75921, 0.65085 - 0xbfe8539cf67c9029, 0x3fe4ca30740218a3, // -0.76021, 0.64968 - 0xbfe85bc51ae958cc, 0x3fe4c0a145ec0004, // -0.7612, 0.64851 - 0xbfe863e97db3d95a, 0x3fe4b70ee48fb869, // -0.7622, 0.64735 - 0xbfe86c0a1d9aa195, 0x3fe4ad79516722f0, // -0.76319, 0.64618 - 0xbfe87426f95cd5bd, 0x3fe4a3e08dec9ed6, // -0.76418, 0.645 - 0xbfe87c400fba2ebf, 0x3fe49a449b9b0938, // -0.76517, 0.64383 - 0xbfe884555f72fa6b, 0x3fe490a57bedbcdf, // -0.76615, 0.64266 - 0xbfe88c66e7481ba1, 0x3fe48703306091fe, // -0.76714, 0.64148 - 0xbfe89474a5fb0a84, 0x3fe47d5dba6fde01, // -0.76812, 0.6403 - 0xbfe89c7e9a4dd4ab, 0x3fe473b51b987347, // -0.7691, 0.63912 - 0xbfe8a484c3031d50, 0x3fe46a095557a0f1, // -0.77008, 0.63794 - 0xbfe8ac871ede1d88, 0x3fe4605a692b32a2, // -0.77106, 0.63676 - 0xbfe8b485aca2a468, 0x3fe456a858917046, // -0.77204, 0.63558 - 0xbfe8bc806b151741, 0x3fe44cf325091dd6, // -0.77301, 0.63439 - 0xbfe8c47758fa71cb, 0x3fe4433ad0117b1d, // -0.77398, 0.63321 - 0xbfe8cc6a75184655, 0x3fe4397f5b2a4380, // -0.77495, 0.63202 - 0xbfe8d459be34bdfa, 0x3fe42fc0c7d3adbb, // -0.77592, 0.63083 - 0xbfe8dc45331698cc, 0x3fe425ff178e6bb1, // -0.77689, 0.62964 - 0xbfe8e42cd2852e0a, 0x3fe41c3a4bdbaa26, // -0.77785, 0.62845 - 0xbfe8ec109b486c49, 0x3fe41272663d108c, // -0.77882, 0.62725 - 0xbfe8f3f08c28d9ac, 0x3fe408a76834c0c0, // -0.77978, 0.62606 - 0xbfe8fbcca3ef940d, 0x3fe3fed9534556d4, // -0.78074, 0.62486 - 0xbfe903a4e1665133, 0x3fe3f50828f1e8d2, // -0.78169, 0.62366 - 0xbfe90b7943575efe, 0x3fe3eb33eabe0680, // -0.78265, 0.62246 - 0xbfe91349c88da398, 0x3fe3e15c9a2db922, // -0.7836, 0.62126 - 0xbfe91b166fd49da2, 0x3fe3d78238c58343, // -0.78456, 0.62006 - 0xbfe922df37f8646a, 0x3fe3cda4c80a6076, // -0.78551, 0.61885 - 0xbfe92aa41fc5a815, 0x3fe3c3c44981c517, // -0.78646, 0.61765 - 0xbfe932652609b1cf, 0x3fe3b9e0beb19e18, // -0.7874, 0.61644 - 0xbfe93a22499263fc, 0x3fe3affa292050b9, // -0.78835, 0.61523 - 0xbfe941db892e3a65, 0x3fe3a6108a54ba58, // -0.78929, 0.61402 - 0xbfe94990e3ac4a6c, 0x3fe39c23e3d63029, // -0.79023, 0.61281 - 0xbfe9514257dc4335, 0x3fe39234372c7f04, // -0.79117, 0.6116 - 0xbfe958efe48e6dd7, 0x3fe3884185dfeb22, // -0.79211, 0.61038 - 0xbfe960998893ad8c, 0x3fe37e4bd1792fe2, // -0.79304, 0.60917 - 0xbfe9683f42bd7fe1, 0x3fe374531b817f8d, // -0.79398, 0.60795 - 0xbfe96fe111ddfce0, 0x3fe36a576582831b, // -0.79491, 0.60673 - 0xbfe9777ef4c7d742, 0x3fe36058b10659f3, // -0.79584, 0.60551 - 0xbfe97f18ea4e5c9e, 0x3fe35656ff9799ae, // -0.79676, 0.60429 - 0xbfe986aef1457594, 0x3fe34c5252c14de1, // -0.79769, 0.60307 - 0xbfe98e410881a600, 0x3fe3424aac0ef7d6, // -0.79861, 0.60184 - 0xbfe995cf2ed80d22, 0x3fe338400d0c8e57, // -0.79954, 0.60062 - 0xbfe99d59631e65d5, 0x3fe32e3277467d6b, // -0.80046, 0.59939 - 0xbfe9a4dfa42b06b2, 0x3fe32421ec49a620, // -0.80138, 0.59816 - 0xbfe9ac61f0d4e247, 0x3fe31a0e6da35e44, // -0.80229, 0.59693 - 0xbfe9b3e047f38741, 0x3fe30ff7fce17035, // -0.80321, 0.5957 - 0xbfe9bb5aa85f2098, 0x3fe305de9b921a94, // -0.80412, 0.59447 - 0xbfe9c2d110f075c3, 0x3fe2fbc24b441015, // -0.80503, 0.59323 - 0xbfe9ca438080eadb, 0x3fe2f1a30d86773a, // -0.80594, 0.592 - 0xbfe9d1b1f5ea80d6, 0x3fe2e780e3e8ea16, // -0.80685, 0.59076 - 0xbfe9d91c7007d5a6, 0x3fe2dd5bcffb7616, // -0.80775, 0.58952 - 0xbfe9e082edb42472, 0x3fe2d333d34e9bb7, // -0.80866, 0.58828 - 0xbfe9e7e56dcb45bd, 0x3fe2c908ef734e57, // -0.80956, 0.58704 - 0xbfe9ef43ef29af94, 0x3fe2bedb25faf3ea, // -0.81046, 0.5858 - 0xbfe9f69e70ac75bc, 0x3fe2b4aa787764c4, // -0.81135, 0.58455 - 0xbfe9fdf4f13149de, 0x3fe2aa76e87aeb58, // -0.81225, 0.58331 - 0xbfea05476f967bb5, 0x3fe2a040779843fb, // -0.81314, 0.58206 - 0xbfea0c95eabaf937, 0x3fe2960727629ca8, // -0.81404, 0.58081 - 0xbfea13e0617e4ec7, 0x3fe28bcaf96d94ba, // -0.81493, 0.57956 - 0xbfea1b26d2c0a75e, 0x3fe2818bef4d3cba, // -0.81581, 0.57831 - 0xbfea22693d62ccb9, 0x3fe2774a0a961612, // -0.8167, 0.57706 - 0xbfea29a7a0462782, 0x3fe26d054cdd12df, // -0.81758, 0.57581 - 0xbfea30e1fa4cbf81, 0x3fe262bdb7b795a2, // -0.81847, 0.57455 - 0xbfea38184a593bc6, 0x3fe258734cbb7110, // -0.81935, 0.5733 - 0xbfea3f4a8f4ee2d2, 0x3fe24e260d7ee7c9, // -0.82023, 0.57204 - 0xbfea4678c8119ac8, 0x3fe243d5fb98ac1f, // -0.8211, 0.57078 - 0xbfea4da2f385e997, 0x3fe23983189fdfd5, // -0.82198, 0.56952 - 0xbfea54c91090f524, 0x3fe22f2d662c13e1, // -0.82285, 0.56826 - 0xbfea5beb1e188375, 0x3fe224d4e5d5482e, // -0.82372, 0.567 - 0xbfea63091b02fae2, 0x3fe21a799933eb58, // -0.82459, 0.56573 - 0xbfea6a230637623b, 0x3fe2101b81e0da78, // -0.82546, 0.56447 - 0xbfea7138de9d60f5, 0x3fe205baa17560d6, // -0.82632, 0.5632 - 0xbfea784aa31d3f55, 0x3fe1fb56f98b37b8, // -0.82718, 0.56193 - 0xbfea7f58529fe69d, 0x3fe1f0f08bbc861b, // -0.82805, 0.56066 - 0xbfea8661ec0ee133, 0x3fe1e68759a3e074, // -0.8289, 0.55939 - 0xbfea8d676e545ad2, 0x3fe1dc1b64dc4872, // -0.82976, 0.55812 - 0xbfea9468d85b20ae, 0x3fe1d1acaf012cc2, // -0.83062, 0.55685 - 0xbfea9b66290ea1a3, 0x3fe1c73b39ae68c8, // -0.83147, 0.55557 - 0xbfeaa25f5f5aee60, 0x3fe1bcc706804467, // -0.83232, 0.55429 - 0xbfeaa9547a2cb98e, 0x3fe1b250171373be, // -0.83317, 0.55302 - 0xbfeab045787157ff, 0x3fe1a7d66d0516e6, // -0.83402, 0.55174 - 0xbfeab7325916c0d4, 0x3fe19d5a09f2b9b8, // -0.83486, 0.55046 - 0xbfeabe1b1b0b8dac, 0x3fe192daef7a5386, // -0.83571, 0.54918 - 0xbfeac4ffbd3efac8, 0x3fe188591f3a46e5, // -0.83655, 0.54789 - 0xbfeacbe03ea0e73b, 0x3fe17dd49ad16161, // -0.83739, 0.54661 - 0xbfead2bc9e21d511, 0x3fe1734d63dedb49, // -0.83822, 0.54532 - 0xbfead994dab2e979, 0x3fe168c37c025764, // -0.83906, 0.54404 - 0xbfeae068f345ecef, 0x3fe15e36e4dbe2bc, // -0.83989, 0.54275 - 0xbfeae738e6cd4b67, 0x3fe153a7a00bf453, // -0.84073, 0.54146 - 0xbfeaee04b43c1474, 0x3fe14915af336ceb, // -0.84155, 0.54017 - 0xbfeaf4cc5a85fb73, 0x3fe13e8113f396c1, // -0.84238, 0.53888 - 0xbfeafb8fd89f57b6, 0x3fe133e9cfee254e, // -0.84321, 0.53759 - 0xbfeb024f2d7d24a9, 0x3fe1294fe4c5350a, // -0.84403, 0.53629 - 0xbfeb090a58150200, 0x3fe11eb3541b4b22, // -0.84485, 0.535 - 0xbfeb0fc1575d33db, 0x3fe114141f935545, // -0.84567, 0.5337 - 0xbfeb16742a4ca2f5, 0x3fe1097248d0a956, // -0.84649, 0.5324 - 0xbfeb1d22cfdadcc6, 0x3fe0fecdd1770537, // -0.84731, 0.5311 - 0xbfeb23cd470013b4, 0x3fe0f426bb2a8e7d, // -0.84812, 0.5298 - 0xbfeb2a738eb51f33, 0x3fe0e97d078fd23b, // -0.84893, 0.5285 - 0xbfeb3115a5f37bf4, 0x3fe0ded0b84bc4b5, // -0.84974, 0.5272 - 0xbfeb37b38bb54c09, 0x3fe0d421cf03c12b, // -0.85055, 0.5259 - 0xbfeb3e4d3ef55712, 0x3fe0c9704d5d898f, // -0.85136, 0.52459 - 0xbfeb44e2beaf0a61, 0x3fe0bebc34ff4646, // -0.85216, 0.52328 - 0xbfeb4b7409de7925, 0x3fe0b405878f85ec, // -0.85296, 0.52198 - 0xbfeb52011f805c92, 0x3fe0a94c46b53d0b, // -0.85376, 0.52067 - 0xbfeb5889fe921405, 0x3fe09e907417c5e1, // -0.85456, 0.51936 - 0xbfeb5f0ea611a532, 0x3fe093d2115ee018, // -0.85535, 0.51804 - 0xbfeb658f14fdbc47, 0x3fe089112032b08c, // -0.85615, 0.51673 - 0xbfeb6c0b4a55ac17, 0x3fe07e4da23bc102, // -0.85694, 0.51542 - 0xbfeb728345196e3e, 0x3fe073879922ffed, // -0.85773, 0.5141 - 0xbfeb78f70449a34b, 0x3fe068bf0691c028, // -0.85852, 0.51279 - 0xbfeb7f6686e792ea, 0x3fe05df3ec31b8b6, // -0.8593, 0.51147 - 0xbfeb85d1cbf52c02, 0x3fe053264bad0483, // -0.86009, 0.51015 - 0xbfeb8c38d27504e9, 0x3fe0485626ae221a, // -0.86087, 0.50883 - 0xbfeb929b996a5b7f, 0x3fe03d837edff370, // -0.86165, 0.50751 - 0xbfeb98fa1fd9155e, 0x3fe032ae55edbd95, // -0.86242, 0.50619 - 0xbfeb9f5464c5bffc, 0x3fe027d6ad83287e, // -0.8632, 0.50486 - 0xbfeba5aa673590d2, 0x3fe01cfc874c3eb7, // -0.86397, 0.50354 - 0xbfebabfc262e6586, 0x3fe0121fe4f56d2c, // -0.86474, 0.50221 - 0xbfebb249a0b6c40d, 0x3fe00740c82b82e0, // -0.86551, 0.50089 - 0xbfebb892d5d5dad5, 0x3fdff8be6537615e, // -0.86628, 0.49956 - 0xbfebbed7c49380ea, 0x3fdfe2f64be7120f, // -0.86705, 0.49823 - 0xbfebc5186bf8361d, 0x3fdfcd2947c1ff57, // -0.86781, 0.4969 - 0xbfebcb54cb0d2327, 0x3fdfb7575c24d2de, // -0.86857, 0.49557 - 0xbfebd18ce0dc19d6, 0x3fdfa1808c6cf7e0, // -0.86933, 0.49423 - 0xbfebd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // -0.87009, 0.4929 - 0xbfebddf02cd2b983, 0x3fdf75c44e26a852, // -0.87084, 0.49156 - 0xbfebe41b611154c1, 0x3fdf5fdee656cda3, // -0.8716, 0.49023 - 0xbfebea424837de6d, 0x3fdf49f4a7e97729, // -0.87235, 0.48889 - 0xbfebf064e15377dd, 0x3fdf3405963fd068, // -0.87309, 0.48755 - 0xbfebf6832b71ec5b, 0x3fdf1e11b4bbc35c, // -0.87384, 0.48621 - 0xbfebfc9d25a1b147, 0x3fdf081906bff7fd, // -0.87459, 0.48487 - 0xbfec02b2cef1e641, 0x3fdef21b8fafd3b5, // -0.87533, 0.48353 - 0xbfec08c426725549, 0x3fdedc1952ef78d5, // -0.87607, 0.48218 - 0xbfec0ed12b3372e9, 0x3fdec61253e3c61b, // -0.87681, 0.48084 - 0xbfec14d9dc465e58, 0x3fdeb00695f25620, // -0.87755, 0.47949 - 0xbfec1ade38bce19b, 0x3fde99f61c817eda, // -0.87828, 0.47815 - 0xbfec20de3fa971b0, 0x3fde83e0eaf85113, // -0.87901, 0.4768 - 0xbfec26d9f01f2eaf, 0x3fde6dc704be97e2, // -0.87974, 0.47545 - 0xbfec2cd14931e3f1, 0x3fde57a86d3cd824, // -0.88047, 0.4741 - 0xbfec32c449f60831, 0x3fde418527dc4ffa, // -0.8812, 0.47275 - 0xbfec38b2f180bdb1, 0x3fde2b5d3806f63b, // -0.88192, 0.4714 - 0xbfec3e9d3ee7d262, 0x3fde1530a12779f4, // -0.88264, 0.47004 - 0xbfec44833141c004, 0x3fddfeff66a941de, // -0.88336, 0.46869 - 0xbfec4a64c7a5ac4c, 0x3fdde8c98bf86bd6, // -0.88408, 0.46733 - 0xbfec5042012b6907, 0x3fddd28f1481cc58, // -0.8848, 0.46598 - 0xbfec561adceb743e, 0x3fddbc5003b2edf8, // -0.88551, 0.46462 - 0xbfec5bef59fef85a, 0x3fdda60c5cfa10d8, // -0.88622, 0.46326 - 0xbfec61bf777fcc48, 0x3fdd8fc423c62a25, // -0.88693, 0.4619 - 0xbfec678b3488739b, 0x3fdd79775b86e389, // -0.88764, 0.46054 - 0xbfec6d5290341eb2, 0x3fdd632607ac9aa9, // -0.88835, 0.45918 - 0xbfec7315899eaad7, 0x3fdd4cd02ba8609c, // -0.88905, 0.45781 - 0xbfec78d41fe4a267, 0x3fdd3675caebf962, // -0.88975, 0.45645 - 0xbfec7e8e52233cf3, 0x3fdd2016e8e9db5b, // -0.89045, 0.45508 - 0xbfec84441f785f61, 0x3fdd09b389152ec1, // -0.89115, 0.45372 - 0xbfec89f587029c13, 0x3fdcf34baee1cd21, // -0.89184, 0.45235 - 0xbfec8fa287e13305, 0x3fdcdcdf5dc440ce, // -0.89253, 0.45098 - 0xbfec954b213411f5, 0x3fdcc66e9931c45d, // -0.89322, 0.44961 - 0xbfec9aef521bd480, 0x3fdcaff964a0421d, // -0.89391, 0.44824 - 0xbfeca08f19b9c449, 0x3fdc997fc3865388, // -0.8946, 0.44687 - 0xbfeca62a772fd919, 0x3fdc8301b95b40c2, // -0.89528, 0.4455 - 0xbfecabc169a0b901, 0x3fdc6c7f4997000a, // -0.89597, 0.44412 - 0xbfecb153f02fb87d, 0x3fdc55f877b23537, // -0.89665, 0.44275 - 0xbfecb6e20a00da99, 0x3fdc3f6d47263129, // -0.89732, 0.44137 - 0xbfecbc6bb638d10b, 0x3fdc28ddbb6cf145, // -0.898, 0.43999 - 0xbfecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // -0.89867, 0.43862 - 0xbfecc771c2736c09, 0x3fdbfbb1a05e0edc, // -0.89935, 0.43724 - 0xbfecccee20c2de9f, 0x3fdbe51517ffc0d9, // -0.90002, 0.43586 - 0xbfecd2660e12c1e6, 0x3fdbce744262deee, // -0.90068, 0.43448 - 0xbfecd7d9898b32f6, 0x3fdbb7cf2304bd01, // -0.90135, 0.43309 - 0xbfecdd489254fe65, 0x3fdba125bd63583e, // -0.90201, 0.43171 - 0xbfece2b32799a060, 0x3fdb8a7814fd5693, // -0.90267, 0.43033 - 0xbfece819488344ce, 0x3fdb73c62d520624, // -0.90333, 0.42894 - 0xbfeced7af43cc773, 0x3fdb5d1009e15cc0, // -0.90399, 0.42756 - 0xbfecf2d829f1b40e, 0x3fdb4655ae2bf757, // -0.90464, 0.42617 - 0xbfecf830e8ce467b, 0x3fdb2f971db31972, // -0.9053, 0.42478 - 0xbfecfd852fff6ad4, 0x3fdb18d45bf8aca6, // -0.90595, 0.42339 - 0xbfed02d4feb2bd92, 0x3fdb020d6c7f4009, // -0.9066, 0.422 - 0xbfed082054168bac, 0x3fdaeb4252ca07ab, // -0.90724, 0.42061 - 0xbfed0d672f59d2b9, 0x3fdad473125cdc08, // -0.90789, 0.41922 - 0xbfed12a98fac410c, 0x3fdabd9faebc3980, // -0.90853, 0.41782 - 0xbfed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // -0.90917, 0.41643 - 0xbfed1d20dc40c15c, 0x3fda8fec8bf5b166, // -0.90981, 0.41503 - 0xbfed2255c6e5a4e1, 0x3fda790cd3dbf31a, // -0.91044, 0.41364 - 0xbfed2786335f52fc, 0x3fda622906a70b63, // -0.91107, 0.41224 - 0xbfed2cb220e0ef9f, 0x3fda4b4127dea1e4, // -0.91171, 0.41084 - 0xbfed31d98e9e503a, 0x3fda34553b0afee5, // -0.91234, 0.40944 - 0xbfed36fc7bcbfbdc, 0x3fda1d6543b50ac0, // -0.91296, 0.40804 - 0xbfed3c1ae79f2b4e, 0x3fda067145664d57, // -0.91359, 0.40664 - 0xbfed4134d14dc93a, 0x3fd9ef7943a8ed8a, // -0.91421, 0.40524 - 0xbfed464a380e7242, 0x3fd9d87d4207b0ab, // -0.91483, 0.40384 - 0xbfed4b5b1b187524, 0x3fd9c17d440df9f2, // -0.91545, 0.40243 - 0xbfed506779a3d2d9, 0x3fd9aa794d47c9ee, // -0.91606, 0.40103 - 0xbfed556f52e93eb1, 0x3fd993716141bdfe, // -0.91668, 0.39962 - 0xbfed5a72a6221e73, 0x3fd97c6583890fc2, // -0.91729, 0.39822 - 0xbfed5f7172888a7f, 0x3fd96555b7ab948f, // -0.9179, 0.39681 - 0xbfed646bb7574de5, 0x3fd94e420137bce3, // -0.91851, 0.3954 - 0xbfed696173c9e68b, 0x3fd9372a63bc93d7, // -0.91911, 0.39399 - 0xbfed6e52a71c8547, 0x3fd9200ee2c9be97, // -0.91972, 0.39258 - 0xbfed733f508c0dff, 0x3fd908ef81ef7bd1, // -0.92032, 0.39117 - 0xbfed78276f5617c6, 0x3fd8f1cc44bea329, // -0.92092, 0.38976 - 0xbfed7d0b02b8ecf9, 0x3fd8daa52ec8a4af, // -0.92151, 0.38835 - 0xbfed81ea09f38b63, 0x3fd8c37a439f884f, // -0.92211, 0.38693 - 0xbfed86c48445a450, 0x3fd8ac4b86d5ed44, // -0.9227, 0.38552 - 0xbfed8b9a70ef9cb4, 0x3fd89518fbff098e, // -0.92329, 0.3841 - 0xbfed906bcf328d46, 0x3fd87de2a6aea963, // -0.92388, 0.38268 - 0xbfed95389e50429b, 0x3fd866a88a792ea0, // -0.92447, 0.38127 - 0xbfed9a00dd8b3d46, 0x3fd84f6aaaf3903f, // -0.92505, 0.37985 - 0xbfed9ec48c26b1f3, 0x3fd838290bb359c8, // -0.92563, 0.37843 - 0xbfeda383a9668988, 0x3fd820e3b04eaac4, // -0.92621, 0.37701 - 0xbfeda83e348f613b, 0x3fd8099a9c5c362d, // -0.92679, 0.37559 - 0xbfedacf42ce68ab9, 0x3fd7f24dd37341e3, // -0.92736, 0.37416 - 0xbfedb1a591b20c38, 0x3fd7dafd592ba621, // -0.92794, 0.37274 - 0xbfedb6526238a09b, 0x3fd7c3a9311dcce7, // -0.92851, 0.37132 - 0xbfedbafa9dc1b78d, 0x3fd7ac515ee2b172, // -0.92907, 0.36989 - 0xbfedbf9e4395759a, 0x3fd794f5e613dfae, // -0.92964, 0.36847 - 0xbfedc43d52fcb453, 0x3fd77d96ca4b73a6, // -0.93021, 0.36704 - 0xbfedc8d7cb410260, 0x3fd766340f2418f6, // -0.93077, 0.36561 - 0xbfedcd6dabaca3a5, 0x3fd74ecdb8390a3e, // -0.93133, 0.36418 - 0xbfedd1fef38a915a, 0x3fd73763c9261092, // -0.93188, 0.36276 - 0xbfedd68ba2267a25, 0x3fd71ff6458782ec, // -0.93244, 0.36133 - 0xbfeddb13b6ccc23d, 0x3fd7088530fa459e, // -0.93299, 0.3599 - 0xbfeddf9730ca837b, 0x3fd6f1108f1bc9c5, // -0.93354, 0.35846 - 0xbfede4160f6d8d81, 0x3fd6d998638a0cb5, // -0.93409, 0.35703 - 0xbfede890520465ce, 0x3fd6c21cb1e39771, // -0.93464, 0.3556 - 0xbfeded05f7de47da, 0x3fd6aa9d7dc77e16, // -0.93518, 0.35416 - 0xbfedf177004b2534, 0x3fd6931acad55f51, // -0.93573, 0.35273 - 0xbfedf5e36a9ba59c, 0x3fd67b949cad63ca, // -0.93627, 0.35129 - 0xbfedfa4b3621271d, 0x3fd6640af6f03d9e, // -0.9368, 0.34986 - 0xbfedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // -0.93734, 0.34842 - 0xbfee030cee1435b8, 0x3fd634ed533be58e, // -0.93787, 0.34698 - 0xbfee0766d9280f54, 0x3fd61d595c88c203, // -0.9384, 0.34554 - 0xbfee0bbc22bd8349, 0x3fd605c1fcc88f63, // -0.93893, 0.3441 - 0xbfee100cca2980ac, 0x3fd5ee27379ea693, // -0.93946, 0.34266 - 0xbfee1458cec1ad83, 0x3fd5d68910aee686, // -0.93998, 0.34122 - 0xbfee18a02fdc66d9, 0x3fd5bee78b9db3b6, // -0.94051, 0.33978 - 0xbfee1ce2ecd0c0d8, 0x3fd5a742ac0ff78d, // -0.94103, 0.33833 - 0xbfee212104f686e5, 0x3fd58f9a75ab1fdd, // -0.94154, 0.33689 - 0xbfee255a77a63bb8, 0x3fd577eeec151e47, // -0.94206, 0.33545 - 0xbfee298f4439197a, 0x3fd5604012f467b4, // -0.94257, 0.334 - 0xbfee2dbf6a0911d9, 0x3fd5488dedeff3be, // -0.94308, 0.33255 - 0xbfee31eae870ce25, 0x3fd530d880af3c24, // -0.94359, 0.33111 - 0xbfee3611becbaf69, 0x3fd5191fceda3c35, // -0.9441, 0.32966 - 0xbfee3a33ec75ce85, 0x3fd50163dc197047, // -0.9446, 0.32821 - 0xbfee3e5170cbfc46, 0x3fd4e9a4ac15d520, // -0.94511, 0.32676 - 0xbfee426a4b2bc17e, 0x3fd4d1e24278e76a, // -0.94561, 0.32531 - 0xbfee467e7af35f23, 0x3fd4ba1ca2eca31c, // -0.94611, 0.32386 - 0xbfee4a8dff81ce5e, 0x3fd4a253d11b82f3, // -0.9466, 0.32241 - 0xbfee4e98d836c0af, 0x3fd48a87d0b07fd7, // -0.94709, 0.32096 - 0xbfee529f04729ffc, 0x3fd472b8a5571054, // -0.94759, 0.3195 - 0xbfee56a083968eb1, 0x3fd45ae652bb2800, // -0.94807, 0.31805 - 0xbfee5a9d550467d3, 0x3fd44310dc8936f0, // -0.94856, 0.31659 - 0xbfee5e95781ebf1c, 0x3fd42b38466e2928, // -0.94905, 0.31514 - 0xbfee6288ec48e112, 0x3fd4135c94176602, // -0.94953, 0.31368 - 0xbfee6677b0e6d31e, 0x3fd3fb7dc932cfa4, // -0.95001, 0.31222 - 0xbfee6a61c55d53a7, 0x3fd3e39be96ec271, // -0.95049, 0.31077 - 0xbfee6e472911da27, 0x3fd3cbb6f87a146e, // -0.95096, 0.30931 - 0xbfee7227db6a9744, 0x3fd3b3cefa0414b7, // -0.95144, 0.30785 - 0xbfee7603dbce74e9, 0x3fd39be3f1bc8aef, // -0.95191, 0.30639 - 0xbfee79db29a5165a, 0x3fd383f5e353b6aa, // -0.95238, 0.30493 - 0xbfee7dadc456d850, 0x3fd36c04d27a4edf, // -0.95284, 0.30347 - 0xbfee817bab4cd10d, 0x3fd35410c2e18152, // -0.95331, 0.30201 - 0xbfee8544ddf0d075, 0x3fd33c19b83af207, // -0.95377, 0.30054 - 0xbfee89095bad6025, 0x3fd3241fb638baaf, // -0.95423, 0.29908 - 0xbfee8cc923edc388, 0x3fd30c22c08d6a13, // -0.95469, 0.29762 - 0xbfee9084361df7f3, 0x3fd2f422daec0386, // -0.95514, 0.29615 - 0xbfee943a91aab4b4, 0x3fd2dc200907fe51, // -0.95559, 0.29469 - 0xbfee97ec36016b30, 0x3fd2c41a4e954520, // -0.95605, 0.29322 - 0xbfee9b99229046f8, 0x3fd2ac11af483572, // -0.95649, 0.29175 - 0xbfee9f4156c62dda, 0x3fd294062ed59f05, // -0.95694, 0.29028 - 0xbfeea2e4d212c000, 0x3fd27bf7d0f2c346, // -0.95738, 0.28882 - 0xbfeea68393e65800, 0x3fd263e6995554ba, // -0.95783, 0.28735 - 0xbfeeaa1d9bb20af3, 0x3fd24bd28bb37672, // -0.95827, 0.28588 - 0xbfeeadb2e8e7a88e, 0x3fd233bbabc3bb72, // -0.9587, 0.28441 - 0xbfeeb1437af9bb34, 0x3fd21ba1fd3d2623, // -0.95914, 0.28294 - 0xbfeeb4cf515b8811, 0x3fd2038583d727bd, // -0.95957, 0.28146 - 0xbfeeb8566b810f2a, 0x3fd1eb6643499fbb, // -0.96, 0.27999 - 0xbfeebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // -0.96043, 0.27852 - 0xbfeebf5668eaf2ef, 0x3fd1bb1f7b999480, // -0.96086, 0.27705 - 0xbfeec2cf4b1af6b2, 0x3fd1a2f7fbe8f243, // -0.96128, 0.27557 - 0xbfeec6436ee60309, 0x3fd18acdc3f4873a, // -0.9617, 0.2741 - 0xbfeec9b2d3c3bf84, 0x3fd172a0d7765177, // -0.96212, 0.27262 - 0xbfeecd1d792c8f10, 0x3fd15a713a28b9d9, // -0.96254, 0.27115 - 0xbfeed0835e999009, 0x3fd1423eefc69378, // -0.96295, 0.26967 - 0xbfeed3e483849c51, 0x3fd12a09fc0b1b12, // -0.96337, 0.26819 - 0xbfeed740e7684963, 0x3fd111d262b1f677, // -0.96378, 0.26671 - 0xbfeeda9889bfe86a, 0x3fd0f998277733f7, // -0.96418, 0.26523 - 0xbfeeddeb6a078651, 0x3fd0e15b4e1749cd, // -0.96459, 0.26375 - 0xbfeee13987bbebdc, 0x3fd0c91bda4f158d, // -0.96499, 0.26227 - 0xbfeee482e25a9dbc, 0x3fd0b0d9cfdbdb90, // -0.96539, 0.26079 - 0xbfeee7c77961dc9e, 0x3fd09895327b465e, // -0.96579, 0.25931 - 0xbfeeeb074c50a544, 0x3fd0804e05eb661e, // -0.96619, 0.25783 - 0xbfeeee425aa6b09a, 0x3fd068044deab002, // -0.96658, 0.25635 - 0xbfeef178a3e473c2, 0x3fd04fb80e37fdae, // -0.96698, 0.25487 - 0xbfeef4aa278b2032, 0x3fd037694a928cac, // -0.96737, 0.25338 - 0xbfeef7d6e51ca3c0, 0x3fd01f1806b9fdd2, // -0.96775, 0.2519 - 0xbfeefafedc1ba8b7, 0x3fd006c4466e54af, // -0.96814, 0.25041 - 0xbfeefe220c0b95ec, 0x3fcfdcdc1adfedf8, // -0.96852, 0.24893 - 0xbfef014074708ed3, 0x3fcfac2abeff57ff, // -0.9689, 0.24744 - 0xbfef045a14cf738c, 0x3fcf7b7480bd3801, // -0.96928, 0.24596 - 0xbfef076eecade0fa, 0x3fcf4ab9679c9f5c, // -0.96966, 0.24447 - 0xbfef0a7efb9230d7, 0x3fcf19f97b215f1a, // -0.97003, 0.24298 - 0xbfef0d8a410379c5, 0x3fcee934c2d006c7, // -0.9704, 0.24149 - 0xbfef1090bc898f5f, 0x3fceb86b462de348, // -0.97077, 0.24 - 0xbfef13926dad024e, 0x3fce879d0cc0fdaf, // -0.97114, 0.23851 - 0xbfef168f53f7205d, 0x3fce56ca1e101a1b, // -0.9715, 0.23702 - 0xbfef19876ef1f486, 0x3fce25f281a2b684, // -0.97187, 0.23553 - 0xbfef1c7abe284708, 0x3fcdf5163f01099a, // -0.97223, 0.23404 - 0xbfef1f6941259d7a, 0x3fcdc4355db40195, // -0.97258, 0.23255 - 0xbfef2252f7763ada, 0x3fcd934fe5454311, // -0.97294, 0.23106 - 0xbfef2537e0a71f9f, 0x3fcd6265dd3f27e3, // -0.97329, 0.22957 - 0xbfef2817fc4609ce, 0x3fcd31774d2cbdee, // -0.97364, 0.22807 - 0xbfef2af349e17507, 0x3fcd00843c99c5f9, // -0.97399, 0.22658 - 0xbfef2dc9c9089a9d, 0x3fcccf8cb312b286, // -0.97434, 0.22508 - 0xbfef309b794b719f, 0x3fcc9e90b824a6a9, // -0.97468, 0.22359 - 0xbfef33685a3aaef0, 0x3fcc6d90535d74dc, // -0.97503, 0.22209 - 0xbfef36306b67c556, 0x3fcc3c8b8c4b9dd7, // -0.97536, 0.2206 - 0xbfef38f3ac64e589, 0x3fcc0b826a7e4f63, // -0.9757, 0.2191 - 0xbfef3bb21cc4fe47, 0x3fcbda74f5856330, // -0.97604, 0.2176 - 0xbfef3e6bbc1bbc65, 0x3fcba96334f15dad, // -0.97637, 0.21611 - 0xbfef412089fd8adc, 0x3fcb784d30536cda, // -0.9767, 0.21461 - 0xbfef43d085ff92dd, 0x3fcb4732ef3d6722, // -0.97703, 0.21311 - 0xbfef467bafb7bbe0, 0x3fcb16147941ca2a, // -0.97735, 0.21161 - 0xbfef492206bcabb4, 0x3fcae4f1d5f3b9ab, // -0.97768, 0.21011 - 0xbfef4bc38aa5c694, 0x3fcab3cb0ce6fe44, // -0.978, 0.20861 - 0xbfef4e603b0b2f2d, 0x3fca82a025b00451, // -0.97832, 0.20711 - 0xbfef50f81785c6b9, 0x3fca517127e3dabc, // -0.97863, 0.20561 - 0xbfef538b1faf2d07, 0x3fca203e1b1831da, // -0.97895, 0.20411 - 0xbfef56195321c090, 0x3fc9ef0706e35a35, // -0.97926, 0.20261 - 0xbfef58a2b1789e84, 0x3fc9bdcbf2dc4366, // -0.97957, 0.2011 - 0xbfef5b273a4fa2d9, 0x3fc98c8ce69a7aec, // -0.97988, 0.1996 - 0xbfef5da6ed43685d, 0x3fc95b49e9b62af9, // -0.98018, 0.1981 - 0xbfef6021c9f148c2, 0x3fc92a0303c8194f, // -0.98048, 0.19659 - 0xbfef6297cff75cb0, 0x3fc8f8b83c69a60a, // -0.98079, 0.19509 - 0xbfef6508fef47bd5, 0x3fc8c7699b34ca7e, // -0.98108, 0.19359 - 0xbfef677556883cee, 0x3fc8961727c41804, // -0.98138, 0.19208 - 0xbfef69dcd652f5de, 0x3fc864c0e9b2b6cf, // -0.98167, 0.19057 - 0xbfef6c3f7df5bbb7, 0x3fc83366e89c64c5, // -0.98196, 0.18907 - 0xbfef6e9d4d1262ca, 0x3fc802092c1d744b, // -0.98225, 0.18756 - 0xbfef70f6434b7eb7, 0x3fc7d0a7bbd2cb1b, // -0.98254, 0.18606 - 0xbfef734a60446279, 0x3fc79f429f59e11d, // -0.98282, 0.18455 - 0xbfef7599a3a12077, 0x3fc76dd9de50bf31, // -0.98311, 0.18304 - 0xbfef77e40d068a90, 0x3fc73c6d8055fe0a, // -0.98339, 0.18153 - 0xbfef7a299c1a322a, 0x3fc70afd8d08c4ff, // -0.98366, 0.18002 - 0xbfef7c6a50826840, 0x3fc6d98a0c08c8da, // -0.98394, 0.17851 - 0xbfef7ea629e63d6e, 0x3fc6a81304f64ab2, // -0.98421, 0.177 - 0xbfef80dd27ed8204, 0x3fc676987f7216b8, // -0.98448, 0.17549 - 0xbfef830f4a40c60c, 0x3fc6451a831d830d, // -0.98475, 0.17398 - 0xbfef853c9089595e, 0x3fc61399179a6e94, // -0.98501, 0.17247 - 0xbfef8764fa714ba9, 0x3fc5e214448b3fc6, // -0.98528, 0.17096 - 0xbfef898887a36c84, 0x3fc5b08c1192e381, // -0.98554, 0.16945 - 0xbfef8ba737cb4b78, 0x3fc57f008654cbde, // -0.9858, 0.16794 - 0xbfef8dc10a95380d, 0x3fc54d71aa74ef02, // -0.98605, 0.16643 - 0xbfef8fd5ffae41db, 0x3fc51bdf8597c5f2, // -0.98631, 0.16491 - 0xbfef91e616c43891, 0x3fc4ea4a1f624b61, // -0.98656, 0.1634 - 0xbfef93f14f85ac08, 0x3fc4b8b17f79fa88, // -0.98681, 0.16189 - 0xbfef95f7a9a1ec47, 0x3fc48715ad84cdf5, // -0.98706, 0.16037 - 0xbfef97f924c9099b, 0x3fc45576b1293e5a, // -0.9873, 0.15886 - 0xbfef99f5c0abd496, 0x3fc423d4920e4166, // -0.98754, 0.15734 - 0xbfef9bed7cfbde29, 0x3fc3f22f57db4893, // -0.98778, 0.15583 - 0xbfef9de0596b77a3, 0x3fc3c0870a383ff6, // -0.98802, 0.15431 - 0xbfef9fce55adb2c8, 0x3fc38edbb0cd8d14, // -0.98826, 0.1528 - 0xbfefa1b7717661d5, 0x3fc35d2d53440db2, // -0.98849, 0.15128 - 0xbfefa39bac7a1791, 0x3fc32b7bf94516a7, // -0.98872, 0.14976 - 0xbfefa57b066e2754, 0x3fc2f9c7aa7a72af, // -0.98895, 0.14825 - 0xbfefa7557f08a517, 0x3fc2c8106e8e613a, // -0.98918, 0.14673 - 0xbfefa92b1600657c, 0x3fc296564d2b953e, // -0.9894, 0.14521 - 0xbfefaafbcb0cfddc, 0x3fc264994dfd340a, // -0.98962, 0.1437 - 0xbfefacc79de6c44f, 0x3fc232d978aed413, // -0.98984, 0.14218 - 0xbfefae8e8e46cfbb, 0x3fc20116d4ec7bce, // -0.99006, 0.14066 - 0xbfefb0509be6f7db, 0x3fc1cf516a62a077, // -0.99027, 0.13914 - 0xbfefb20dc681d54d, 0x3fc19d8940be24e7, // -0.99049, 0.13762 - 0xbfefb3c60dd2c199, 0x3fc16bbe5fac5865, // -0.9907, 0.1361 - 0xbfefb5797195d741, 0x3fc139f0cedaf576, // -0.9909, 0.13458 - 0xbfefb727f187f1c7, 0x3fc1082095f820b0, // -0.99111, 0.13306 - 0xbfefb8d18d66adb7, 0x3fc0d64dbcb26786, // -0.99131, 0.13154 - 0xbfefba7644f068b5, 0x3fc0a4784ab8bf1d, // -0.99151, 0.13002 - 0xbfefbc1617e44186, 0x3fc072a047ba831d, // -0.99171, 0.1285 - 0xbfefbdb106021816, 0x3fc040c5bb67747e, // -0.99191, 0.12698 - 0xbfefbf470f0a8d88, 0x3fc00ee8ad6fb85b, // -0.9921, 0.12545 - 0xbfefc0d832bf043a, 0x3fbfba124b07ad85, // -0.99229, 0.12393 - 0xbfefc26470e19fd3, 0x3fbf564e56a9730e, // -0.99248, 0.12241 - 0xbfefc3ebc935454c, 0x3fbef2858d27561b, // -0.99267, 0.12089 - 0xbfefc56e3b7d9af6, 0x3fbe8eb7fde4aa3e, // -0.99285, 0.11937 - 0xbfefc6ebc77f0887, 0x3fbe2ae5b8457f77, // -0.99303, 0.11784 - 0xbfefc8646cfeb721, 0x3fbdc70ecbae9fc8, // -0.99321, 0.11632 - 0xbfefc9d82bc2915e, 0x3fbd633347858ce4, // -0.99339, 0.11479 - 0xbfefcb4703914354, 0x3fbcff533b307dc1, // -0.99356, 0.11327 - 0xbfefccb0f4323aa3, 0x3fbc9b6eb6165c42, // -0.99374, 0.11175 - 0xbfefce15fd6da67b, 0x3fbc3785c79ec2d5, // -0.99391, 0.11022 - 0xbfefcf761f0c77a3, 0x3fbbd3987f31fa0e, // -0.99407, 0.1087 - 0xbfefd0d158d86087, 0x3fbb6fa6ec38f64c, // -0.99424, 0.10717 - 0xbfefd227aa9bd53b, 0x3fbb0bb11e1d5559, // -0.9944, 0.10565 - 0xbfefd37914220b84, 0x3fbaa7b724495c04, // -0.99456, 0.10412 - 0xbfefd4c59536fae4, 0x3fba43b90e27f3c4, // -0.99472, 0.1026 - 0xbfefd60d2da75c9e, 0x3fb9dfb6eb24a85c, // -0.99488, 0.10107 - 0xbfefd74fdd40abbf, 0x3fb97bb0caaba56f, // -0.99503, 0.099544 - 0xbfefd88da3d12526, 0x3fb917a6bc29b42c, // -0.99518, 0.098017 - 0xbfefd9c68127c78c, 0x3fb8b398cf0c38e0, // -0.99533, 0.09649 - 0xbfefdafa7514538c, 0x3fb84f8712c130a0, // -0.99548, 0.094963 - 0xbfefdc297f674ba9, 0x3fb7eb7196b72ee4, // -0.99563, 0.093436 - 0xbfefdd539ff1f456, 0x3fb787586a5d5b21, // -0.99577, 0.091909 - 0xbfefde78d68653fd, 0x3fb7233b9d236e71, // -0.99591, 0.090381 - 0xbfefdf9922f73307, 0x3fb6bf1b3e79b129, // -0.99604, 0.088854 - 0xbfefe0b485181be3, 0x3fb65af75dd0f87b, // -0.99618, 0.087326 - 0xbfefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // -0.99631, 0.085797 - 0xbfefe2dc89bbff08, 0x3fb592a554489bc8, // -0.99644, 0.084269 - 0xbfefe3e92be9d886, 0x3fb52e774a4d4d0a, // -0.99657, 0.08274 - 0xbfefe4f0e31d7a4a, 0x3fb4ca45fc1ba8b6, // -0.9967, 0.081211 - 0xbfefe5f3af2e3940, 0x3fb4661179272096, // -0.99682, 0.079682 - 0xbfefe6f18ff42c84, 0x3fb401d9d0e3a507, // -0.99694, 0.078153 - 0xbfefe7ea85482d60, 0x3fb39d9f12c5a299, // -0.99706, 0.076624 - 0xbfefe8de8f03d75c, 0x3fb339614e41ffa5, // -0.99718, 0.075094 - 0xbfefe9cdad01883a, 0x3fb2d52092ce19f6, // -0.99729, 0.073565 - 0xbfefeab7df1c6005, 0x3fb270dcefdfc45b, // -0.9974, 0.072035 - 0xbfefeb9d2530410f, 0x3fb20c9674ed444c, // -0.99751, 0.070505 - 0xbfefec7d7f19cffc, 0x3fb1a84d316d4f8a, // -0.99762, 0.068974 - 0xbfefed58ecb673c4, 0x3fb1440134d709b2, // -0.99772, 0.067444 - 0xbfefee2f6de455ba, 0x3fb0dfb28ea201e6, // -0.99783, 0.065913 - 0xbfefef0102826191, 0x3fb07b614e463064, // -0.99793, 0.064383 - 0xbfefefcdaa704562, 0x3fb0170d833bf421, // -0.99802, 0.062852 - 0xbfeff095658e71ad, 0x3faf656e79f820e0, // -0.99812, 0.061321 - 0xbfeff15833be1965, 0x3fae9cbd15ff5527, // -0.99821, 0.05979 - 0xbfeff21614e131ed, 0x3fadd406f9808ec8, // -0.9983, 0.058258 - 0xbfeff2cf08da7321, 0x3fad0b4c436f91d0, // -0.99839, 0.056727 - 0xbfeff3830f8d575c, 0x3fac428d12c0d7e3, // -0.99848, 0.055195 - 0xbfeff43228de1b77, 0x3fab79c986698b78, // -0.99856, 0.053664 - 0xbfeff4dc54b1bed3, 0x3faab101bd5f8317, // -0.99864, 0.052132 - 0xbfeff58192ee0358, 0x3fa9e835d6993c87, // -0.99872, 0.0506 - 0xbfeff621e3796d7e, 0x3fa91f65f10dd814, // -0.9988, 0.049068 - 0xbfeff6bd463b444d, 0x3fa856922bb513c1, // -0.99887, 0.047535 - 0xbfeff753bb1b9164, 0x3fa78dbaa5874685, // -0.99894, 0.046003 - 0xbfeff7e5420320f9, 0x3fa6c4df7d7d5b84, // -0.99901, 0.044471 - 0xbfeff871dadb81df, 0x3fa5fc00d290cd43, // -0.99908, 0.042938 - 0xbfeff8f9858f058b, 0x3fa5331ec3bba0eb, // -0.99914, 0.041406 - 0xbfeff97c4208c014, 0x3fa46a396ff86179, // -0.9992, 0.039873 - 0xbfeff9fa10348837, 0x3fa3a150f6421afc, // -0.99926, 0.03834 - 0xbfeffa72effef75d, 0x3fa2d865759455cd, // -0.99932, 0.036807 - 0xbfeffae6e1556998, 0x3fa20f770ceb11c6, // -0.99938, 0.035274 - 0xbfeffb55e425fdae, 0x3fa14685db42c17e, // -0.99943, 0.033741 - 0xbfeffbbff85f9515, 0x3fa07d91ff984580, // -0.99948, 0.032208 - 0xbfeffc251df1d3f8, 0x3f9f693731d1cf01, // -0.99953, 0.030675 - 0xbfeffc8554cd213a, 0x3f9dd7458c64ab39, // -0.99958, 0.029142 - 0xbfeffce09ce2a679, 0x3f9c454f4ce53b1c, // -0.99962, 0.027608 - 0xbfeffd36f624500c, 0x3f9ab354b1504fca, // -0.99966, 0.026075 - 0xbfeffd886084cd0d, 0x3f992155f7a3667e, // -0.9997, 0.024541 - 0xbfeffdd4dbf78f52, 0x3f978f535ddc9f03, // -0.99974, 0.023008 - 0xbfeffe1c6870cb77, 0x3f95fd4d21fab226, // -0.99977, 0.021474 - 0xbfeffe5f05e578db, 0x3f946b4381fce81c, // -0.9998, 0.01994 - 0xbfeffe9cb44b51a1, 0x3f92d936bbe30efd, // -0.99983, 0.018407 - 0xbfeffed57398d2b7, 0x3f9147270dad7132, // -0.99986, 0.016873 - 0xbfefff0943c53bd1, 0x3f8f6a296ab997ca, // -0.99988, 0.015339 - 0xbfefff3824c88f6f, 0x3f8c45ffe1e48ad9, // -0.9999, 0.013805 - 0xbfefff62169b92db, 0x3f8921d1fcdec784, // -0.99992, 0.012272 - 0xbfefff871937ce2f, 0x3f85fda037ac05e0, // -0.99994, 0.010738 - 0xbfefffa72c978c4f, 0x3f82d96b0e509703, // -0.99996, 0.0092038 - 0xbfefffc250b5daef, 0x3f7f6a65f9a2a3c5, // -0.99997, 0.0076698 - 0xbfefffd8858e8a92, 0x3f7921f0fe670071, // -0.99998, 0.0061359 - 0xbfefffe9cb1e2e8d, 0x3f72d97822f996bc, // -0.99999, 0.0046019 - 0xbfeffff621621d02, 0x3f6921f8becca4ba, // -1, 0.003068 - 0xbfeffffd88586ee6, 0x3f5921faaee6472d, // -1, 0.001534 - 0xbff0000000000000, 0x0000000000000000, // -1, 0 - 0xbfeffffd88586ee6, 0xbf5921faaee6472d, // -1, -0.001534 - 0xbfeffff621621d02, 0xbf6921f8becca4ba, // -1, -0.003068 - 0xbfefffe9cb1e2e8d, 0xbf72d97822f996bc, // -0.99999,-0.0046019 - 0xbfefffd8858e8a92, 0xbf7921f0fe670071, // -0.99998,-0.0061359 - 0xbfefffc250b5daef, 0xbf7f6a65f9a2a3c5, // -0.99997,-0.0076698 - 0xbfefffa72c978c4f, 0xbf82d96b0e509703, // -0.99996,-0.0092038 - 0xbfefff871937ce2f, 0xbf85fda037ac05e0, // -0.99994, -0.010738 - 0xbfefff62169b92db, 0xbf8921d1fcdec784, // -0.99992, -0.012272 - 0xbfefff3824c88f6f, 0xbf8c45ffe1e48ad9, // -0.9999, -0.013805 - 0xbfefff0943c53bd1, 0xbf8f6a296ab997ca, // -0.99988, -0.015339 - 0xbfeffed57398d2b7, 0xbf9147270dad7132, // -0.99986, -0.016873 - 0xbfeffe9cb44b51a1, 0xbf92d936bbe30efd, // -0.99983, -0.018407 - 0xbfeffe5f05e578db, 0xbf946b4381fce81c, // -0.9998, -0.01994 - 0xbfeffe1c6870cb77, 0xbf95fd4d21fab226, // -0.99977, -0.021474 - 0xbfeffdd4dbf78f52, 0xbf978f535ddc9f03, // -0.99974, -0.023008 - 0xbfeffd886084cd0d, 0xbf992155f7a3667e, // -0.9997, -0.024541 - 0xbfeffd36f624500c, 0xbf9ab354b1504fca, // -0.99966, -0.026075 - 0xbfeffce09ce2a679, 0xbf9c454f4ce53b1c, // -0.99962, -0.027608 - 0xbfeffc8554cd213a, 0xbf9dd7458c64ab39, // -0.99958, -0.029142 - 0xbfeffc251df1d3f8, 0xbf9f693731d1cf01, // -0.99953, -0.030675 - 0xbfeffbbff85f9515, 0xbfa07d91ff984580, // -0.99948, -0.032208 - 0xbfeffb55e425fdae, 0xbfa14685db42c17e, // -0.99943, -0.033741 - 0xbfeffae6e1556998, 0xbfa20f770ceb11c6, // -0.99938, -0.035274 - 0xbfeffa72effef75d, 0xbfa2d865759455cd, // -0.99932, -0.036807 - 0xbfeff9fa10348837, 0xbfa3a150f6421afc, // -0.99926, -0.03834 - 0xbfeff97c4208c014, 0xbfa46a396ff86179, // -0.9992, -0.039873 - 0xbfeff8f9858f058b, 0xbfa5331ec3bba0eb, // -0.99914, -0.041406 - 0xbfeff871dadb81df, 0xbfa5fc00d290cd43, // -0.99908, -0.042938 - 0xbfeff7e5420320f9, 0xbfa6c4df7d7d5b84, // -0.99901, -0.044471 - 0xbfeff753bb1b9164, 0xbfa78dbaa5874685, // -0.99894, -0.046003 - 0xbfeff6bd463b444d, 0xbfa856922bb513c1, // -0.99887, -0.047535 - 0xbfeff621e3796d7e, 0xbfa91f65f10dd814, // -0.9988, -0.049068 - 0xbfeff58192ee0358, 0xbfa9e835d6993c87, // -0.99872, -0.0506 - 0xbfeff4dc54b1bed3, 0xbfaab101bd5f8317, // -0.99864, -0.052132 - 0xbfeff43228de1b77, 0xbfab79c986698b78, // -0.99856, -0.053664 - 0xbfeff3830f8d575c, 0xbfac428d12c0d7e3, // -0.99848, -0.055195 - 0xbfeff2cf08da7321, 0xbfad0b4c436f91d0, // -0.99839, -0.056727 - 0xbfeff21614e131ed, 0xbfadd406f9808ec8, // -0.9983, -0.058258 - 0xbfeff15833be1965, 0xbfae9cbd15ff5527, // -0.99821, -0.05979 - 0xbfeff095658e71ad, 0xbfaf656e79f820e0, // -0.99812, -0.061321 - 0xbfefefcdaa704562, 0xbfb0170d833bf421, // -0.99802, -0.062852 - 0xbfefef0102826191, 0xbfb07b614e463064, // -0.99793, -0.064383 - 0xbfefee2f6de455ba, 0xbfb0dfb28ea201e6, // -0.99783, -0.065913 - 0xbfefed58ecb673c4, 0xbfb1440134d709b2, // -0.99772, -0.067444 - 0xbfefec7d7f19cffc, 0xbfb1a84d316d4f8a, // -0.99762, -0.068974 - 0xbfefeb9d2530410f, 0xbfb20c9674ed444c, // -0.99751, -0.070505 - 0xbfefeab7df1c6005, 0xbfb270dcefdfc45b, // -0.9974, -0.072035 - 0xbfefe9cdad01883a, 0xbfb2d52092ce19f6, // -0.99729, -0.073565 - 0xbfefe8de8f03d75c, 0xbfb339614e41ffa5, // -0.99718, -0.075094 - 0xbfefe7ea85482d60, 0xbfb39d9f12c5a299, // -0.99706, -0.076624 - 0xbfefe6f18ff42c84, 0xbfb401d9d0e3a507, // -0.99694, -0.078153 - 0xbfefe5f3af2e3940, 0xbfb4661179272096, // -0.99682, -0.079682 - 0xbfefe4f0e31d7a4a, 0xbfb4ca45fc1ba8b6, // -0.9967, -0.081211 - 0xbfefe3e92be9d886, 0xbfb52e774a4d4d0a, // -0.99657, -0.08274 - 0xbfefe2dc89bbff08, 0xbfb592a554489bc8, // -0.99644, -0.084269 - 0xbfefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // -0.99631, -0.085797 - 0xbfefe0b485181be3, 0xbfb65af75dd0f87b, // -0.99618, -0.087326 - 0xbfefdf9922f73307, 0xbfb6bf1b3e79b129, // -0.99604, -0.088854 - 0xbfefde78d68653fd, 0xbfb7233b9d236e71, // -0.99591, -0.090381 - 0xbfefdd539ff1f456, 0xbfb787586a5d5b21, // -0.99577, -0.091909 - 0xbfefdc297f674ba9, 0xbfb7eb7196b72ee4, // -0.99563, -0.093436 - 0xbfefdafa7514538c, 0xbfb84f8712c130a0, // -0.99548, -0.094963 - 0xbfefd9c68127c78c, 0xbfb8b398cf0c38e0, // -0.99533, -0.09649 - 0xbfefd88da3d12526, 0xbfb917a6bc29b42c, // -0.99518, -0.098017 - 0xbfefd74fdd40abbf, 0xbfb97bb0caaba56f, // -0.99503, -0.099544 - 0xbfefd60d2da75c9e, 0xbfb9dfb6eb24a85c, // -0.99488, -0.10107 - 0xbfefd4c59536fae4, 0xbfba43b90e27f3c4, // -0.99472, -0.1026 - 0xbfefd37914220b84, 0xbfbaa7b724495c04, // -0.99456, -0.10412 - 0xbfefd227aa9bd53b, 0xbfbb0bb11e1d5559, // -0.9944, -0.10565 - 0xbfefd0d158d86087, 0xbfbb6fa6ec38f64c, // -0.99424, -0.10717 - 0xbfefcf761f0c77a3, 0xbfbbd3987f31fa0e, // -0.99407, -0.1087 - 0xbfefce15fd6da67b, 0xbfbc3785c79ec2d5, // -0.99391, -0.11022 - 0xbfefccb0f4323aa3, 0xbfbc9b6eb6165c42, // -0.99374, -0.11175 - 0xbfefcb4703914354, 0xbfbcff533b307dc1, // -0.99356, -0.11327 - 0xbfefc9d82bc2915e, 0xbfbd633347858ce4, // -0.99339, -0.11479 - 0xbfefc8646cfeb721, 0xbfbdc70ecbae9fc8, // -0.99321, -0.11632 - 0xbfefc6ebc77f0887, 0xbfbe2ae5b8457f77, // -0.99303, -0.11784 - 0xbfefc56e3b7d9af6, 0xbfbe8eb7fde4aa3e, // -0.99285, -0.11937 - 0xbfefc3ebc935454c, 0xbfbef2858d27561b, // -0.99267, -0.12089 - 0xbfefc26470e19fd3, 0xbfbf564e56a9730e, // -0.99248, -0.12241 - 0xbfefc0d832bf043a, 0xbfbfba124b07ad85, // -0.99229, -0.12393 - 0xbfefbf470f0a8d88, 0xbfc00ee8ad6fb85b, // -0.9921, -0.12545 - 0xbfefbdb106021816, 0xbfc040c5bb67747e, // -0.99191, -0.12698 - 0xbfefbc1617e44186, 0xbfc072a047ba831d, // -0.99171, -0.1285 - 0xbfefba7644f068b5, 0xbfc0a4784ab8bf1d, // -0.99151, -0.13002 - 0xbfefb8d18d66adb7, 0xbfc0d64dbcb26786, // -0.99131, -0.13154 - 0xbfefb727f187f1c7, 0xbfc1082095f820b0, // -0.99111, -0.13306 - 0xbfefb5797195d741, 0xbfc139f0cedaf576, // -0.9909, -0.13458 - 0xbfefb3c60dd2c199, 0xbfc16bbe5fac5865, // -0.9907, -0.1361 - 0xbfefb20dc681d54d, 0xbfc19d8940be24e7, // -0.99049, -0.13762 - 0xbfefb0509be6f7db, 0xbfc1cf516a62a077, // -0.99027, -0.13914 - 0xbfefae8e8e46cfbb, 0xbfc20116d4ec7bce, // -0.99006, -0.14066 - 0xbfefacc79de6c44f, 0xbfc232d978aed413, // -0.98984, -0.14218 - 0xbfefaafbcb0cfddc, 0xbfc264994dfd340a, // -0.98962, -0.1437 - 0xbfefa92b1600657c, 0xbfc296564d2b953e, // -0.9894, -0.14521 - 0xbfefa7557f08a517, 0xbfc2c8106e8e613a, // -0.98918, -0.14673 - 0xbfefa57b066e2754, 0xbfc2f9c7aa7a72af, // -0.98895, -0.14825 - 0xbfefa39bac7a1791, 0xbfc32b7bf94516a7, // -0.98872, -0.14976 - 0xbfefa1b7717661d5, 0xbfc35d2d53440db2, // -0.98849, -0.15128 - 0xbfef9fce55adb2c8, 0xbfc38edbb0cd8d14, // -0.98826, -0.1528 - 0xbfef9de0596b77a3, 0xbfc3c0870a383ff6, // -0.98802, -0.15431 - 0xbfef9bed7cfbde29, 0xbfc3f22f57db4893, // -0.98778, -0.15583 - 0xbfef99f5c0abd496, 0xbfc423d4920e4166, // -0.98754, -0.15734 - 0xbfef97f924c9099b, 0xbfc45576b1293e5a, // -0.9873, -0.15886 - 0xbfef95f7a9a1ec47, 0xbfc48715ad84cdf5, // -0.98706, -0.16037 - 0xbfef93f14f85ac08, 0xbfc4b8b17f79fa88, // -0.98681, -0.16189 - 0xbfef91e616c43891, 0xbfc4ea4a1f624b61, // -0.98656, -0.1634 - 0xbfef8fd5ffae41db, 0xbfc51bdf8597c5f2, // -0.98631, -0.16491 - 0xbfef8dc10a95380d, 0xbfc54d71aa74ef02, // -0.98605, -0.16643 - 0xbfef8ba737cb4b78, 0xbfc57f008654cbde, // -0.9858, -0.16794 - 0xbfef898887a36c84, 0xbfc5b08c1192e381, // -0.98554, -0.16945 - 0xbfef8764fa714ba9, 0xbfc5e214448b3fc6, // -0.98528, -0.17096 - 0xbfef853c9089595e, 0xbfc61399179a6e94, // -0.98501, -0.17247 - 0xbfef830f4a40c60c, 0xbfc6451a831d830d, // -0.98475, -0.17398 - 0xbfef80dd27ed8204, 0xbfc676987f7216b8, // -0.98448, -0.17549 - 0xbfef7ea629e63d6e, 0xbfc6a81304f64ab2, // -0.98421, -0.177 - 0xbfef7c6a50826840, 0xbfc6d98a0c08c8da, // -0.98394, -0.17851 - 0xbfef7a299c1a322a, 0xbfc70afd8d08c4ff, // -0.98366, -0.18002 - 0xbfef77e40d068a90, 0xbfc73c6d8055fe0a, // -0.98339, -0.18153 - 0xbfef7599a3a12077, 0xbfc76dd9de50bf31, // -0.98311, -0.18304 - 0xbfef734a60446279, 0xbfc79f429f59e11d, // -0.98282, -0.18455 - 0xbfef70f6434b7eb7, 0xbfc7d0a7bbd2cb1b, // -0.98254, -0.18606 - 0xbfef6e9d4d1262ca, 0xbfc802092c1d744b, // -0.98225, -0.18756 - 0xbfef6c3f7df5bbb7, 0xbfc83366e89c64c5, // -0.98196, -0.18907 - 0xbfef69dcd652f5de, 0xbfc864c0e9b2b6cf, // -0.98167, -0.19057 - 0xbfef677556883cee, 0xbfc8961727c41804, // -0.98138, -0.19208 - 0xbfef6508fef47bd5, 0xbfc8c7699b34ca7e, // -0.98108, -0.19359 - 0xbfef6297cff75cb0, 0xbfc8f8b83c69a60a, // -0.98079, -0.19509 - 0xbfef6021c9f148c2, 0xbfc92a0303c8194f, // -0.98048, -0.19659 - 0xbfef5da6ed43685d, 0xbfc95b49e9b62af9, // -0.98018, -0.1981 - 0xbfef5b273a4fa2d9, 0xbfc98c8ce69a7aec, // -0.97988, -0.1996 - 0xbfef58a2b1789e84, 0xbfc9bdcbf2dc4366, // -0.97957, -0.2011 - 0xbfef56195321c090, 0xbfc9ef0706e35a35, // -0.97926, -0.20261 - 0xbfef538b1faf2d07, 0xbfca203e1b1831da, // -0.97895, -0.20411 - 0xbfef50f81785c6b9, 0xbfca517127e3dabc, // -0.97863, -0.20561 - 0xbfef4e603b0b2f2d, 0xbfca82a025b00451, // -0.97832, -0.20711 - 0xbfef4bc38aa5c694, 0xbfcab3cb0ce6fe44, // -0.978, -0.20861 - 0xbfef492206bcabb4, 0xbfcae4f1d5f3b9ab, // -0.97768, -0.21011 - 0xbfef467bafb7bbe0, 0xbfcb16147941ca2a, // -0.97735, -0.21161 - 0xbfef43d085ff92dd, 0xbfcb4732ef3d6722, // -0.97703, -0.21311 - 0xbfef412089fd8adc, 0xbfcb784d30536cda, // -0.9767, -0.21461 - 0xbfef3e6bbc1bbc65, 0xbfcba96334f15dad, // -0.97637, -0.21611 - 0xbfef3bb21cc4fe47, 0xbfcbda74f5856330, // -0.97604, -0.2176 - 0xbfef38f3ac64e589, 0xbfcc0b826a7e4f63, // -0.9757, -0.2191 - 0xbfef36306b67c556, 0xbfcc3c8b8c4b9dd7, // -0.97536, -0.2206 - 0xbfef33685a3aaef0, 0xbfcc6d90535d74dc, // -0.97503, -0.22209 - 0xbfef309b794b719f, 0xbfcc9e90b824a6a9, // -0.97468, -0.22359 - 0xbfef2dc9c9089a9d, 0xbfcccf8cb312b286, // -0.97434, -0.22508 - 0xbfef2af349e17507, 0xbfcd00843c99c5f9, // -0.97399, -0.22658 - 0xbfef2817fc4609ce, 0xbfcd31774d2cbdee, // -0.97364, -0.22807 - 0xbfef2537e0a71f9f, 0xbfcd6265dd3f27e3, // -0.97329, -0.22957 - 0xbfef2252f7763ada, 0xbfcd934fe5454311, // -0.97294, -0.23106 - 0xbfef1f6941259d7a, 0xbfcdc4355db40195, // -0.97258, -0.23255 - 0xbfef1c7abe284708, 0xbfcdf5163f01099a, // -0.97223, -0.23404 - 0xbfef19876ef1f486, 0xbfce25f281a2b684, // -0.97187, -0.23553 - 0xbfef168f53f7205d, 0xbfce56ca1e101a1b, // -0.9715, -0.23702 - 0xbfef13926dad024e, 0xbfce879d0cc0fdaf, // -0.97114, -0.23851 - 0xbfef1090bc898f5f, 0xbfceb86b462de348, // -0.97077, -0.24 - 0xbfef0d8a410379c5, 0xbfcee934c2d006c7, // -0.9704, -0.24149 - 0xbfef0a7efb9230d7, 0xbfcf19f97b215f1a, // -0.97003, -0.24298 - 0xbfef076eecade0fa, 0xbfcf4ab9679c9f5c, // -0.96966, -0.24447 - 0xbfef045a14cf738c, 0xbfcf7b7480bd3801, // -0.96928, -0.24596 - 0xbfef014074708ed3, 0xbfcfac2abeff57ff, // -0.9689, -0.24744 - 0xbfeefe220c0b95ec, 0xbfcfdcdc1adfedf8, // -0.96852, -0.24893 - 0xbfeefafedc1ba8b7, 0xbfd006c4466e54af, // -0.96814, -0.25041 - 0xbfeef7d6e51ca3c0, 0xbfd01f1806b9fdd2, // -0.96775, -0.2519 - 0xbfeef4aa278b2032, 0xbfd037694a928cac, // -0.96737, -0.25338 - 0xbfeef178a3e473c2, 0xbfd04fb80e37fdae, // -0.96698, -0.25487 - 0xbfeeee425aa6b09a, 0xbfd068044deab002, // -0.96658, -0.25635 - 0xbfeeeb074c50a544, 0xbfd0804e05eb661e, // -0.96619, -0.25783 - 0xbfeee7c77961dc9e, 0xbfd09895327b465e, // -0.96579, -0.25931 - 0xbfeee482e25a9dbc, 0xbfd0b0d9cfdbdb90, // -0.96539, -0.26079 - 0xbfeee13987bbebdc, 0xbfd0c91bda4f158d, // -0.96499, -0.26227 - 0xbfeeddeb6a078651, 0xbfd0e15b4e1749cd, // -0.96459, -0.26375 - 0xbfeeda9889bfe86a, 0xbfd0f998277733f7, // -0.96418, -0.26523 - 0xbfeed740e7684963, 0xbfd111d262b1f677, // -0.96378, -0.26671 - 0xbfeed3e483849c51, 0xbfd12a09fc0b1b12, // -0.96337, -0.26819 - 0xbfeed0835e999009, 0xbfd1423eefc69378, // -0.96295, -0.26967 - 0xbfeecd1d792c8f10, 0xbfd15a713a28b9d9, // -0.96254, -0.27115 - 0xbfeec9b2d3c3bf84, 0xbfd172a0d7765177, // -0.96212, -0.27262 - 0xbfeec6436ee60309, 0xbfd18acdc3f4873a, // -0.9617, -0.2741 - 0xbfeec2cf4b1af6b2, 0xbfd1a2f7fbe8f243, // -0.96128, -0.27557 - 0xbfeebf5668eaf2ef, 0xbfd1bb1f7b999480, // -0.96086, -0.27705 - 0xbfeebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // -0.96043, -0.27852 - 0xbfeeb8566b810f2a, 0xbfd1eb6643499fbb, // -0.96, -0.27999 - 0xbfeeb4cf515b8811, 0xbfd2038583d727bd, // -0.95957, -0.28146 - 0xbfeeb1437af9bb34, 0xbfd21ba1fd3d2623, // -0.95914, -0.28294 - 0xbfeeadb2e8e7a88e, 0xbfd233bbabc3bb72, // -0.9587, -0.28441 - 0xbfeeaa1d9bb20af3, 0xbfd24bd28bb37672, // -0.95827, -0.28588 - 0xbfeea68393e65800, 0xbfd263e6995554ba, // -0.95783, -0.28735 - 0xbfeea2e4d212c000, 0xbfd27bf7d0f2c346, // -0.95738, -0.28882 - 0xbfee9f4156c62dda, 0xbfd294062ed59f05, // -0.95694, -0.29028 - 0xbfee9b99229046f8, 0xbfd2ac11af483572, // -0.95649, -0.29175 - 0xbfee97ec36016b30, 0xbfd2c41a4e954520, // -0.95605, -0.29322 - 0xbfee943a91aab4b4, 0xbfd2dc200907fe51, // -0.95559, -0.29469 - 0xbfee9084361df7f3, 0xbfd2f422daec0386, // -0.95514, -0.29615 - 0xbfee8cc923edc388, 0xbfd30c22c08d6a13, // -0.95469, -0.29762 - 0xbfee89095bad6025, 0xbfd3241fb638baaf, // -0.95423, -0.29908 - 0xbfee8544ddf0d075, 0xbfd33c19b83af207, // -0.95377, -0.30054 - 0xbfee817bab4cd10d, 0xbfd35410c2e18152, // -0.95331, -0.30201 - 0xbfee7dadc456d850, 0xbfd36c04d27a4edf, // -0.95284, -0.30347 - 0xbfee79db29a5165a, 0xbfd383f5e353b6aa, // -0.95238, -0.30493 - 0xbfee7603dbce74e9, 0xbfd39be3f1bc8aef, // -0.95191, -0.30639 - 0xbfee7227db6a9744, 0xbfd3b3cefa0414b7, // -0.95144, -0.30785 - 0xbfee6e472911da27, 0xbfd3cbb6f87a146e, // -0.95096, -0.30931 - 0xbfee6a61c55d53a7, 0xbfd3e39be96ec271, // -0.95049, -0.31077 - 0xbfee6677b0e6d31e, 0xbfd3fb7dc932cfa4, // -0.95001, -0.31222 - 0xbfee6288ec48e112, 0xbfd4135c94176602, // -0.94953, -0.31368 - 0xbfee5e95781ebf1c, 0xbfd42b38466e2928, // -0.94905, -0.31514 - 0xbfee5a9d550467d3, 0xbfd44310dc8936f0, // -0.94856, -0.31659 - 0xbfee56a083968eb1, 0xbfd45ae652bb2800, // -0.94807, -0.31805 - 0xbfee529f04729ffc, 0xbfd472b8a5571054, // -0.94759, -0.3195 - 0xbfee4e98d836c0af, 0xbfd48a87d0b07fd7, // -0.94709, -0.32096 - 0xbfee4a8dff81ce5e, 0xbfd4a253d11b82f3, // -0.9466, -0.32241 - 0xbfee467e7af35f23, 0xbfd4ba1ca2eca31c, // -0.94611, -0.32386 - 0xbfee426a4b2bc17e, 0xbfd4d1e24278e76a, // -0.94561, -0.32531 - 0xbfee3e5170cbfc46, 0xbfd4e9a4ac15d520, // -0.94511, -0.32676 - 0xbfee3a33ec75ce85, 0xbfd50163dc197047, // -0.9446, -0.32821 - 0xbfee3611becbaf69, 0xbfd5191fceda3c35, // -0.9441, -0.32966 - 0xbfee31eae870ce25, 0xbfd530d880af3c24, // -0.94359, -0.33111 - 0xbfee2dbf6a0911d9, 0xbfd5488dedeff3be, // -0.94308, -0.33255 - 0xbfee298f4439197a, 0xbfd5604012f467b4, // -0.94257, -0.334 - 0xbfee255a77a63bb8, 0xbfd577eeec151e47, // -0.94206, -0.33545 - 0xbfee212104f686e5, 0xbfd58f9a75ab1fdd, // -0.94154, -0.33689 - 0xbfee1ce2ecd0c0d8, 0xbfd5a742ac0ff78d, // -0.94103, -0.33833 - 0xbfee18a02fdc66d9, 0xbfd5bee78b9db3b6, // -0.94051, -0.33978 - 0xbfee1458cec1ad83, 0xbfd5d68910aee686, // -0.93998, -0.34122 - 0xbfee100cca2980ac, 0xbfd5ee27379ea693, // -0.93946, -0.34266 - 0xbfee0bbc22bd8349, 0xbfd605c1fcc88f63, // -0.93893, -0.3441 - 0xbfee0766d9280f54, 0xbfd61d595c88c203, // -0.9384, -0.34554 - 0xbfee030cee1435b8, 0xbfd634ed533be58e, // -0.93787, -0.34698 - 0xbfedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // -0.93734, -0.34842 - 0xbfedfa4b3621271d, 0xbfd6640af6f03d9e, // -0.9368, -0.34986 - 0xbfedf5e36a9ba59c, 0xbfd67b949cad63ca, // -0.93627, -0.35129 - 0xbfedf177004b2534, 0xbfd6931acad55f51, // -0.93573, -0.35273 - 0xbfeded05f7de47da, 0xbfd6aa9d7dc77e16, // -0.93518, -0.35416 - 0xbfede890520465ce, 0xbfd6c21cb1e39771, // -0.93464, -0.3556 - 0xbfede4160f6d8d81, 0xbfd6d998638a0cb5, // -0.93409, -0.35703 - 0xbfeddf9730ca837b, 0xbfd6f1108f1bc9c5, // -0.93354, -0.35846 - 0xbfeddb13b6ccc23d, 0xbfd7088530fa459e, // -0.93299, -0.3599 - 0xbfedd68ba2267a25, 0xbfd71ff6458782ec, // -0.93244, -0.36133 - 0xbfedd1fef38a915a, 0xbfd73763c9261092, // -0.93188, -0.36276 - 0xbfedcd6dabaca3a5, 0xbfd74ecdb8390a3e, // -0.93133, -0.36418 - 0xbfedc8d7cb410260, 0xbfd766340f2418f6, // -0.93077, -0.36561 - 0xbfedc43d52fcb453, 0xbfd77d96ca4b73a6, // -0.93021, -0.36704 - 0xbfedbf9e4395759a, 0xbfd794f5e613dfae, // -0.92964, -0.36847 - 0xbfedbafa9dc1b78d, 0xbfd7ac515ee2b172, // -0.92907, -0.36989 - 0xbfedb6526238a09b, 0xbfd7c3a9311dcce7, // -0.92851, -0.37132 - 0xbfedb1a591b20c38, 0xbfd7dafd592ba621, // -0.92794, -0.37274 - 0xbfedacf42ce68ab9, 0xbfd7f24dd37341e3, // -0.92736, -0.37416 - 0xbfeda83e348f613b, 0xbfd8099a9c5c362d, // -0.92679, -0.37559 - 0xbfeda383a9668988, 0xbfd820e3b04eaac4, // -0.92621, -0.37701 - 0xbfed9ec48c26b1f3, 0xbfd838290bb359c8, // -0.92563, -0.37843 - 0xbfed9a00dd8b3d46, 0xbfd84f6aaaf3903f, // -0.92505, -0.37985 - 0xbfed95389e50429b, 0xbfd866a88a792ea0, // -0.92447, -0.38127 - 0xbfed906bcf328d46, 0xbfd87de2a6aea963, // -0.92388, -0.38268 - 0xbfed8b9a70ef9cb4, 0xbfd89518fbff098e, // -0.92329, -0.3841 - 0xbfed86c48445a450, 0xbfd8ac4b86d5ed44, // -0.9227, -0.38552 - 0xbfed81ea09f38b63, 0xbfd8c37a439f884f, // -0.92211, -0.38693 - 0xbfed7d0b02b8ecf9, 0xbfd8daa52ec8a4af, // -0.92151, -0.38835 - 0xbfed78276f5617c6, 0xbfd8f1cc44bea329, // -0.92092, -0.38976 - 0xbfed733f508c0dff, 0xbfd908ef81ef7bd1, // -0.92032, -0.39117 - 0xbfed6e52a71c8547, 0xbfd9200ee2c9be97, // -0.91972, -0.39258 - 0xbfed696173c9e68b, 0xbfd9372a63bc93d7, // -0.91911, -0.39399 - 0xbfed646bb7574de5, 0xbfd94e420137bce3, // -0.91851, -0.3954 - 0xbfed5f7172888a7f, 0xbfd96555b7ab948f, // -0.9179, -0.39681 - 0xbfed5a72a6221e73, 0xbfd97c6583890fc2, // -0.91729, -0.39822 - 0xbfed556f52e93eb1, 0xbfd993716141bdfe, // -0.91668, -0.39962 - 0xbfed506779a3d2d9, 0xbfd9aa794d47c9ee, // -0.91606, -0.40103 - 0xbfed4b5b1b187524, 0xbfd9c17d440df9f2, // -0.91545, -0.40243 - 0xbfed464a380e7242, 0xbfd9d87d4207b0ab, // -0.91483, -0.40384 - 0xbfed4134d14dc93a, 0xbfd9ef7943a8ed8a, // -0.91421, -0.40524 - 0xbfed3c1ae79f2b4e, 0xbfda067145664d57, // -0.91359, -0.40664 - 0xbfed36fc7bcbfbdc, 0xbfda1d6543b50ac0, // -0.91296, -0.40804 - 0xbfed31d98e9e503a, 0xbfda34553b0afee5, // -0.91234, -0.40944 - 0xbfed2cb220e0ef9f, 0xbfda4b4127dea1e4, // -0.91171, -0.41084 - 0xbfed2786335f52fc, 0xbfda622906a70b63, // -0.91107, -0.41224 - 0xbfed2255c6e5a4e1, 0xbfda790cd3dbf31a, // -0.91044, -0.41364 - 0xbfed1d20dc40c15c, 0xbfda8fec8bf5b166, // -0.90981, -0.41503 - 0xbfed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // -0.90917, -0.41643 - 0xbfed12a98fac410c, 0xbfdabd9faebc3980, // -0.90853, -0.41782 - 0xbfed0d672f59d2b9, 0xbfdad473125cdc08, // -0.90789, -0.41922 - 0xbfed082054168bac, 0xbfdaeb4252ca07ab, // -0.90724, -0.42061 - 0xbfed02d4feb2bd92, 0xbfdb020d6c7f4009, // -0.9066, -0.422 - 0xbfecfd852fff6ad4, 0xbfdb18d45bf8aca6, // -0.90595, -0.42339 - 0xbfecf830e8ce467b, 0xbfdb2f971db31972, // -0.9053, -0.42478 - 0xbfecf2d829f1b40e, 0xbfdb4655ae2bf757, // -0.90464, -0.42617 - 0xbfeced7af43cc773, 0xbfdb5d1009e15cc0, // -0.90399, -0.42756 - 0xbfece819488344ce, 0xbfdb73c62d520624, // -0.90333, -0.42894 - 0xbfece2b32799a060, 0xbfdb8a7814fd5693, // -0.90267, -0.43033 - 0xbfecdd489254fe65, 0xbfdba125bd63583e, // -0.90201, -0.43171 - 0xbfecd7d9898b32f6, 0xbfdbb7cf2304bd01, // -0.90135, -0.43309 - 0xbfecd2660e12c1e6, 0xbfdbce744262deee, // -0.90068, -0.43448 - 0xbfecccee20c2de9f, 0xbfdbe51517ffc0d9, // -0.90002, -0.43586 - 0xbfecc771c2736c09, 0xbfdbfbb1a05e0edc, // -0.89935, -0.43724 - 0xbfecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // -0.89867, -0.43862 - 0xbfecbc6bb638d10b, 0xbfdc28ddbb6cf145, // -0.898, -0.43999 - 0xbfecb6e20a00da99, 0xbfdc3f6d47263129, // -0.89732, -0.44137 - 0xbfecb153f02fb87d, 0xbfdc55f877b23537, // -0.89665, -0.44275 - 0xbfecabc169a0b901, 0xbfdc6c7f4997000a, // -0.89597, -0.44412 - 0xbfeca62a772fd919, 0xbfdc8301b95b40c2, // -0.89528, -0.4455 - 0xbfeca08f19b9c449, 0xbfdc997fc3865388, // -0.8946, -0.44687 - 0xbfec9aef521bd480, 0xbfdcaff964a0421d, // -0.89391, -0.44824 - 0xbfec954b213411f5, 0xbfdcc66e9931c45d, // -0.89322, -0.44961 - 0xbfec8fa287e13305, 0xbfdcdcdf5dc440ce, // -0.89253, -0.45098 - 0xbfec89f587029c13, 0xbfdcf34baee1cd21, // -0.89184, -0.45235 - 0xbfec84441f785f61, 0xbfdd09b389152ec1, // -0.89115, -0.45372 - 0xbfec7e8e52233cf3, 0xbfdd2016e8e9db5b, // -0.89045, -0.45508 - 0xbfec78d41fe4a267, 0xbfdd3675caebf962, // -0.88975, -0.45645 - 0xbfec7315899eaad7, 0xbfdd4cd02ba8609c, // -0.88905, -0.45781 - 0xbfec6d5290341eb2, 0xbfdd632607ac9aa9, // -0.88835, -0.45918 - 0xbfec678b3488739b, 0xbfdd79775b86e389, // -0.88764, -0.46054 - 0xbfec61bf777fcc48, 0xbfdd8fc423c62a25, // -0.88693, -0.4619 - 0xbfec5bef59fef85a, 0xbfdda60c5cfa10d8, // -0.88622, -0.46326 - 0xbfec561adceb743e, 0xbfddbc5003b2edf8, // -0.88551, -0.46462 - 0xbfec5042012b6907, 0xbfddd28f1481cc58, // -0.8848, -0.46598 - 0xbfec4a64c7a5ac4c, 0xbfdde8c98bf86bd6, // -0.88408, -0.46733 - 0xbfec44833141c004, 0xbfddfeff66a941de, // -0.88336, -0.46869 - 0xbfec3e9d3ee7d262, 0xbfde1530a12779f4, // -0.88264, -0.47004 - 0xbfec38b2f180bdb1, 0xbfde2b5d3806f63b, // -0.88192, -0.4714 - 0xbfec32c449f60831, 0xbfde418527dc4ffa, // -0.8812, -0.47275 - 0xbfec2cd14931e3f1, 0xbfde57a86d3cd824, // -0.88047, -0.4741 - 0xbfec26d9f01f2eaf, 0xbfde6dc704be97e2, // -0.87974, -0.47545 - 0xbfec20de3fa971b0, 0xbfde83e0eaf85113, // -0.87901, -0.4768 - 0xbfec1ade38bce19b, 0xbfde99f61c817eda, // -0.87828, -0.47815 - 0xbfec14d9dc465e58, 0xbfdeb00695f25620, // -0.87755, -0.47949 - 0xbfec0ed12b3372e9, 0xbfdec61253e3c61b, // -0.87681, -0.48084 - 0xbfec08c426725549, 0xbfdedc1952ef78d5, // -0.87607, -0.48218 - 0xbfec02b2cef1e641, 0xbfdef21b8fafd3b5, // -0.87533, -0.48353 - 0xbfebfc9d25a1b147, 0xbfdf081906bff7fd, // -0.87459, -0.48487 - 0xbfebf6832b71ec5b, 0xbfdf1e11b4bbc35c, // -0.87384, -0.48621 - 0xbfebf064e15377dd, 0xbfdf3405963fd068, // -0.87309, -0.48755 - 0xbfebea424837de6d, 0xbfdf49f4a7e97729, // -0.87235, -0.48889 - 0xbfebe41b611154c1, 0xbfdf5fdee656cda3, // -0.8716, -0.49023 - 0xbfebddf02cd2b983, 0xbfdf75c44e26a852, // -0.87084, -0.49156 - 0xbfebd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // -0.87009, -0.4929 - 0xbfebd18ce0dc19d6, 0xbfdfa1808c6cf7e0, // -0.86933, -0.49423 - 0xbfebcb54cb0d2327, 0xbfdfb7575c24d2de, // -0.86857, -0.49557 - 0xbfebc5186bf8361d, 0xbfdfcd2947c1ff57, // -0.86781, -0.4969 - 0xbfebbed7c49380ea, 0xbfdfe2f64be7120f, // -0.86705, -0.49823 - 0xbfebb892d5d5dad5, 0xbfdff8be6537615e, // -0.86628, -0.49956 - 0xbfebb249a0b6c40d, 0xbfe00740c82b82e0, // -0.86551, -0.50089 - 0xbfebabfc262e6586, 0xbfe0121fe4f56d2c, // -0.86474, -0.50221 - 0xbfeba5aa673590d2, 0xbfe01cfc874c3eb7, // -0.86397, -0.50354 - 0xbfeb9f5464c5bffc, 0xbfe027d6ad83287e, // -0.8632, -0.50486 - 0xbfeb98fa1fd9155e, 0xbfe032ae55edbd95, // -0.86242, -0.50619 - 0xbfeb929b996a5b7f, 0xbfe03d837edff370, // -0.86165, -0.50751 - 0xbfeb8c38d27504e9, 0xbfe0485626ae221a, // -0.86087, -0.50883 - 0xbfeb85d1cbf52c02, 0xbfe053264bad0483, // -0.86009, -0.51015 - 0xbfeb7f6686e792ea, 0xbfe05df3ec31b8b6, // -0.8593, -0.51147 - 0xbfeb78f70449a34b, 0xbfe068bf0691c028, // -0.85852, -0.51279 - 0xbfeb728345196e3e, 0xbfe073879922ffed, // -0.85773, -0.5141 - 0xbfeb6c0b4a55ac17, 0xbfe07e4da23bc102, // -0.85694, -0.51542 - 0xbfeb658f14fdbc47, 0xbfe089112032b08c, // -0.85615, -0.51673 - 0xbfeb5f0ea611a532, 0xbfe093d2115ee018, // -0.85535, -0.51804 - 0xbfeb5889fe921405, 0xbfe09e907417c5e1, // -0.85456, -0.51936 - 0xbfeb52011f805c92, 0xbfe0a94c46b53d0b, // -0.85376, -0.52067 - 0xbfeb4b7409de7925, 0xbfe0b405878f85ec, // -0.85296, -0.52198 - 0xbfeb44e2beaf0a61, 0xbfe0bebc34ff4646, // -0.85216, -0.52328 - 0xbfeb3e4d3ef55712, 0xbfe0c9704d5d898f, // -0.85136, -0.52459 - 0xbfeb37b38bb54c09, 0xbfe0d421cf03c12b, // -0.85055, -0.5259 - 0xbfeb3115a5f37bf4, 0xbfe0ded0b84bc4b5, // -0.84974, -0.5272 - 0xbfeb2a738eb51f33, 0xbfe0e97d078fd23b, // -0.84893, -0.5285 - 0xbfeb23cd470013b4, 0xbfe0f426bb2a8e7d, // -0.84812, -0.5298 - 0xbfeb1d22cfdadcc6, 0xbfe0fecdd1770537, // -0.84731, -0.5311 - 0xbfeb16742a4ca2f5, 0xbfe1097248d0a956, // -0.84649, -0.5324 - 0xbfeb0fc1575d33db, 0xbfe114141f935545, // -0.84567, -0.5337 - 0xbfeb090a58150200, 0xbfe11eb3541b4b22, // -0.84485, -0.535 - 0xbfeb024f2d7d24a9, 0xbfe1294fe4c5350a, // -0.84403, -0.53629 - 0xbfeafb8fd89f57b6, 0xbfe133e9cfee254e, // -0.84321, -0.53759 - 0xbfeaf4cc5a85fb73, 0xbfe13e8113f396c1, // -0.84238, -0.53888 - 0xbfeaee04b43c1474, 0xbfe14915af336ceb, // -0.84155, -0.54017 - 0xbfeae738e6cd4b67, 0xbfe153a7a00bf453, // -0.84073, -0.54146 - 0xbfeae068f345ecef, 0xbfe15e36e4dbe2bc, // -0.83989, -0.54275 - 0xbfead994dab2e979, 0xbfe168c37c025764, // -0.83906, -0.54404 - 0xbfead2bc9e21d511, 0xbfe1734d63dedb49, // -0.83822, -0.54532 - 0xbfeacbe03ea0e73b, 0xbfe17dd49ad16161, // -0.83739, -0.54661 - 0xbfeac4ffbd3efac8, 0xbfe188591f3a46e5, // -0.83655, -0.54789 - 0xbfeabe1b1b0b8dac, 0xbfe192daef7a5386, // -0.83571, -0.54918 - 0xbfeab7325916c0d4, 0xbfe19d5a09f2b9b8, // -0.83486, -0.55046 - 0xbfeab045787157ff, 0xbfe1a7d66d0516e6, // -0.83402, -0.55174 - 0xbfeaa9547a2cb98e, 0xbfe1b250171373be, // -0.83317, -0.55302 - 0xbfeaa25f5f5aee60, 0xbfe1bcc706804467, // -0.83232, -0.55429 - 0xbfea9b66290ea1a3, 0xbfe1c73b39ae68c8, // -0.83147, -0.55557 - 0xbfea9468d85b20ae, 0xbfe1d1acaf012cc2, // -0.83062, -0.55685 - 0xbfea8d676e545ad2, 0xbfe1dc1b64dc4872, // -0.82976, -0.55812 - 0xbfea8661ec0ee133, 0xbfe1e68759a3e074, // -0.8289, -0.55939 - 0xbfea7f58529fe69d, 0xbfe1f0f08bbc861b, // -0.82805, -0.56066 - 0xbfea784aa31d3f55, 0xbfe1fb56f98b37b8, // -0.82718, -0.56193 - 0xbfea7138de9d60f5, 0xbfe205baa17560d6, // -0.82632, -0.5632 - 0xbfea6a230637623b, 0xbfe2101b81e0da78, // -0.82546, -0.56447 - 0xbfea63091b02fae2, 0xbfe21a799933eb58, // -0.82459, -0.56573 - 0xbfea5beb1e188375, 0xbfe224d4e5d5482e, // -0.82372, -0.567 - 0xbfea54c91090f524, 0xbfe22f2d662c13e1, // -0.82285, -0.56826 - 0xbfea4da2f385e997, 0xbfe23983189fdfd5, // -0.82198, -0.56952 - 0xbfea4678c8119ac8, 0xbfe243d5fb98ac1f, // -0.8211, -0.57078 - 0xbfea3f4a8f4ee2d2, 0xbfe24e260d7ee7c9, // -0.82023, -0.57204 - 0xbfea38184a593bc6, 0xbfe258734cbb7110, // -0.81935, -0.5733 - 0xbfea30e1fa4cbf81, 0xbfe262bdb7b795a2, // -0.81847, -0.57455 - 0xbfea29a7a0462782, 0xbfe26d054cdd12df, // -0.81758, -0.57581 - 0xbfea22693d62ccb9, 0xbfe2774a0a961612, // -0.8167, -0.57706 - 0xbfea1b26d2c0a75e, 0xbfe2818bef4d3cba, // -0.81581, -0.57831 - 0xbfea13e0617e4ec7, 0xbfe28bcaf96d94ba, // -0.81493, -0.57956 - 0xbfea0c95eabaf937, 0xbfe2960727629ca8, // -0.81404, -0.58081 - 0xbfea05476f967bb5, 0xbfe2a040779843fb, // -0.81314, -0.58206 - 0xbfe9fdf4f13149de, 0xbfe2aa76e87aeb58, // -0.81225, -0.58331 - 0xbfe9f69e70ac75bc, 0xbfe2b4aa787764c4, // -0.81135, -0.58455 - 0xbfe9ef43ef29af94, 0xbfe2bedb25faf3ea, // -0.81046, -0.5858 - 0xbfe9e7e56dcb45bd, 0xbfe2c908ef734e57, // -0.80956, -0.58704 - 0xbfe9e082edb42472, 0xbfe2d333d34e9bb7, // -0.80866, -0.58828 - 0xbfe9d91c7007d5a6, 0xbfe2dd5bcffb7616, // -0.80775, -0.58952 - 0xbfe9d1b1f5ea80d6, 0xbfe2e780e3e8ea16, // -0.80685, -0.59076 - 0xbfe9ca438080eadb, 0xbfe2f1a30d86773a, // -0.80594, -0.592 - 0xbfe9c2d110f075c3, 0xbfe2fbc24b441015, // -0.80503, -0.59323 - 0xbfe9bb5aa85f2098, 0xbfe305de9b921a94, // -0.80412, -0.59447 - 0xbfe9b3e047f38741, 0xbfe30ff7fce17035, // -0.80321, -0.5957 - 0xbfe9ac61f0d4e247, 0xbfe31a0e6da35e44, // -0.80229, -0.59693 - 0xbfe9a4dfa42b06b2, 0xbfe32421ec49a620, // -0.80138, -0.59816 - 0xbfe99d59631e65d5, 0xbfe32e3277467d6b, // -0.80046, -0.59939 - 0xbfe995cf2ed80d22, 0xbfe338400d0c8e57, // -0.79954, -0.60062 - 0xbfe98e410881a600, 0xbfe3424aac0ef7d6, // -0.79861, -0.60184 - 0xbfe986aef1457594, 0xbfe34c5252c14de1, // -0.79769, -0.60307 - 0xbfe97f18ea4e5c9e, 0xbfe35656ff9799ae, // -0.79676, -0.60429 - 0xbfe9777ef4c7d742, 0xbfe36058b10659f3, // -0.79584, -0.60551 - 0xbfe96fe111ddfce0, 0xbfe36a576582831b, // -0.79491, -0.60673 - 0xbfe9683f42bd7fe1, 0xbfe374531b817f8d, // -0.79398, -0.60795 - 0xbfe960998893ad8c, 0xbfe37e4bd1792fe2, // -0.79304, -0.60917 - 0xbfe958efe48e6dd7, 0xbfe3884185dfeb22, // -0.79211, -0.61038 - 0xbfe9514257dc4335, 0xbfe39234372c7f04, // -0.79117, -0.6116 - 0xbfe94990e3ac4a6c, 0xbfe39c23e3d63029, // -0.79023, -0.61281 - 0xbfe941db892e3a65, 0xbfe3a6108a54ba58, // -0.78929, -0.61402 - 0xbfe93a22499263fc, 0xbfe3affa292050b9, // -0.78835, -0.61523 - 0xbfe932652609b1cf, 0xbfe3b9e0beb19e18, // -0.7874, -0.61644 - 0xbfe92aa41fc5a815, 0xbfe3c3c44981c517, // -0.78646, -0.61765 - 0xbfe922df37f8646a, 0xbfe3cda4c80a6076, // -0.78551, -0.61885 - 0xbfe91b166fd49da2, 0xbfe3d78238c58343, // -0.78456, -0.62006 - 0xbfe91349c88da398, 0xbfe3e15c9a2db922, // -0.7836, -0.62126 - 0xbfe90b7943575efe, 0xbfe3eb33eabe0680, // -0.78265, -0.62246 - 0xbfe903a4e1665133, 0xbfe3f50828f1e8d2, // -0.78169, -0.62366 - 0xbfe8fbcca3ef940d, 0xbfe3fed9534556d4, // -0.78074, -0.62486 - 0xbfe8f3f08c28d9ac, 0xbfe408a76834c0c0, // -0.77978, -0.62606 - 0xbfe8ec109b486c49, 0xbfe41272663d108c, // -0.77882, -0.62725 - 0xbfe8e42cd2852e0a, 0xbfe41c3a4bdbaa26, // -0.77785, -0.62845 - 0xbfe8dc45331698cc, 0xbfe425ff178e6bb1, // -0.77689, -0.62964 - 0xbfe8d459be34bdfa, 0xbfe42fc0c7d3adbb, // -0.77592, -0.63083 - 0xbfe8cc6a75184655, 0xbfe4397f5b2a4380, // -0.77495, -0.63202 - 0xbfe8c47758fa71cb, 0xbfe4433ad0117b1d, // -0.77398, -0.63321 - 0xbfe8bc806b151741, 0xbfe44cf325091dd6, // -0.77301, -0.63439 - 0xbfe8b485aca2a468, 0xbfe456a858917046, // -0.77204, -0.63558 - 0xbfe8ac871ede1d88, 0xbfe4605a692b32a2, // -0.77106, -0.63676 - 0xbfe8a484c3031d50, 0xbfe46a095557a0f1, // -0.77008, -0.63794 - 0xbfe89c7e9a4dd4ab, 0xbfe473b51b987347, // -0.7691, -0.63912 - 0xbfe89474a5fb0a84, 0xbfe47d5dba6fde01, // -0.76812, -0.6403 - 0xbfe88c66e7481ba1, 0xbfe48703306091fe, // -0.76714, -0.64148 - 0xbfe884555f72fa6b, 0xbfe490a57bedbcdf, // -0.76615, -0.64266 - 0xbfe87c400fba2ebf, 0xbfe49a449b9b0938, // -0.76517, -0.64383 - 0xbfe87426f95cd5bd, 0xbfe4a3e08dec9ed6, // -0.76418, -0.645 - 0xbfe86c0a1d9aa195, 0xbfe4ad79516722f0, // -0.76319, -0.64618 - 0xbfe863e97db3d95a, 0xbfe4b70ee48fb869, // -0.7622, -0.64735 - 0xbfe85bc51ae958cc, 0xbfe4c0a145ec0004, // -0.7612, -0.64851 - 0xbfe8539cf67c9029, 0xbfe4ca30740218a3, // -0.76021, -0.64968 - 0xbfe84b7111af83f9, 0xbfe4d3bc6d589f80, // -0.75921, -0.65085 - 0xbfe843416dc4cce2, 0xbfe4dd453076b064, // -0.75821, -0.65201 - 0xbfe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // -0.75721, -0.65317 - 0xbfe832d6eda3a3e0, 0xbfe4f04d0e2859aa, // -0.75621, -0.65433 - 0xbfe82a9c13f545ff, 0xbfe4f9cc25cca486, // -0.7552, -0.65549 - 0xbfe8225d803964e5, 0xbfe503480159ded2, // -0.75419, -0.65665 - 0xbfe81a1b33b57acc, 0xbfe50cc09f59a09b, // -0.75319, -0.65781 - 0xbfe811d52faf94dc, 0xbfe51635fe5601d7, // -0.75218, -0.65896 - 0xbfe8098b756e52fa, 0xbfe51fa81cd99aa6, // -0.75117, -0.66011 - 0xbfe8013e0638e795, 0xbfe52916f96f8388, // -0.75015, -0.66127 - 0xbfe7f8ece3571771, 0xbfe5328292a35596, // -0.74914, -0.66242 - 0xbfe7f0980e113978, 0xbfe53beae7012abe, // -0.74812, -0.66356 - 0xbfe7e83f87b03686, 0xbfe5454ff5159dfb, // -0.7471, -0.66471 - 0xbfe7dfe3517d8937, 0xbfe54eb1bb6dcb8f, // -0.74608, -0.66586 - 0xbfe7d7836cc33db2, 0xbfe5581038975137, // -0.74506, -0.667 - 0xbfe7cf1fdacbf179, 0xbfe5616b6b204e6e, // -0.74403, -0.66814 - 0xbfe7c6b89ce2d333, 0xbfe56ac35197649e, // -0.74301, -0.66928 - 0xbfe7be4db453a27c, 0xbfe57417ea8bb75c, // -0.74198, -0.67042 - 0xbfe7b5df226aafb0, 0xbfe57d69348cec9f, // -0.74095, -0.67156 - 0xbfe7ad6ce874dbb6, 0xbfe586b72e2b2cfd, // -0.73992, -0.67269 - 0xbfe7a4f707bf97d2, 0xbfe59001d5f723df, // -0.73889, -0.67383 - 0xbfe79c7d8198e56e, 0xbfe599492a81ffbc, // -0.73785, -0.67496 - 0xbfe79400574f55e4, 0xbfe5a28d2a5d7250, // -0.73682, -0.67609 - 0xbfe78b7f8a320a52, 0xbfe5abcdd41bb0d8, // -0.73578, -0.67722 - 0xbfe782fb1b90b35b, 0xbfe5b50b264f7448, // -0.73474, -0.67835 - 0xbfe77a730cbb9100, 0xbfe5be451f8bf980, // -0.7337, -0.67948 - 0xbfe771e75f037261, 0xbfe5c77bbe65018c, // -0.73265, -0.6806 - 0xbfe7695813b9b594, 0xbfe5d0af016ed1d4, // -0.73161, -0.68172 - 0xbfe760c52c304764, 0xbfe5d9dee73e345c, // -0.73056, -0.68285 - 0xbfe7582ea9b9a329, 0xbfe5e30b6e6877f3, // -0.72951, -0.68397 - 0xbfe74f948da8d28d, 0xbfe5ec3495837074, // -0.72846, -0.68508 - 0xbfe746f6d9516d59, 0xbfe5f55a5b2576f8, // -0.72741, -0.6862 - 0xbfe73e558e079942, 0xbfe5fe7cbde56a0f, // -0.72636, -0.68732 - 0xbfe735b0ad2009b2, 0xbfe6079bbc5aadfa, // -0.7253, -0.68843 - 0xbfe72d0837efff97, 0xbfe610b7551d2cde, // -0.72425, -0.68954 - 0xbfe7245c2fcd492a, 0xbfe619cf86c55702, // -0.72319, -0.69065 - 0xbfe71bac960e41bf, 0xbfe622e44fec22ff, // -0.72213, -0.69176 - 0xbfe712f96c09d18d, 0xbfe62bf5af2b0dfd, // -0.72107, -0.69287 - 0xbfe70a42b3176d7a, 0xbfe63503a31c1be8, // -0.72, -0.69397 - 0xbfe701886c8f16e6, 0xbfe63e0e2a59d7aa, // -0.71894, -0.69508 - 0xbfe6f8ca99c95b75, 0xbfe64715437f535b, // -0.71787, -0.69618 - 0xbfe6f0093c1f54de, 0xbfe65018ed28287f, // -0.7168, -0.69728 - 0xbfe6e74454eaa8ae, 0xbfe6591925f0783e, // -0.71573, -0.69838 - 0xbfe6de7be585881d, 0xbfe66215ec74eb91, // -0.71466, -0.69947 - 0xbfe6d5afef4aafcc, 0xbfe66b0f3f52b386, // -0.71358, -0.70057 - 0xbfe6cce07395679f, 0xbfe674051d27896c, // -0.71251, -0.70166 - 0xbfe6c40d73c18275, 0xbfe67cf78491af10, // -0.71143, -0.70275 - 0xbfe6bb36f12b5e06, 0xbfe685e6742feeef, // -0.71035, -0.70385 - 0xbfe6b25ced2fe29c, 0xbfe68ed1eaa19c71, // -0.70927, -0.70493 - 0xbfe6a97f692c82ea, 0xbfe697b9e686941c, // -0.70819, -0.70602 - 0xbfe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // -0.70711, -0.70711 - 0xbfe697b9e686941c, 0xbfe6a97f692c82ea, // -0.70602, -0.70819 - 0xbfe68ed1eaa19c71, 0xbfe6b25ced2fe29c, // -0.70493, -0.70927 - 0xbfe685e6742feeef, 0xbfe6bb36f12b5e06, // -0.70385, -0.71035 - 0xbfe67cf78491af10, 0xbfe6c40d73c18275, // -0.70275, -0.71143 - 0xbfe674051d27896c, 0xbfe6cce07395679f, // -0.70166, -0.71251 - 0xbfe66b0f3f52b386, 0xbfe6d5afef4aafcc, // -0.70057, -0.71358 - 0xbfe66215ec74eb91, 0xbfe6de7be585881d, // -0.69947, -0.71466 - 0xbfe6591925f0783e, 0xbfe6e74454eaa8ae, // -0.69838, -0.71573 - 0xbfe65018ed28287f, 0xbfe6f0093c1f54de, // -0.69728, -0.7168 - 0xbfe64715437f535b, 0xbfe6f8ca99c95b75, // -0.69618, -0.71787 - 0xbfe63e0e2a59d7aa, 0xbfe701886c8f16e6, // -0.69508, -0.71894 - 0xbfe63503a31c1be8, 0xbfe70a42b3176d7a, // -0.69397, -0.72 - 0xbfe62bf5af2b0dfd, 0xbfe712f96c09d18d, // -0.69287, -0.72107 - 0xbfe622e44fec22ff, 0xbfe71bac960e41bf, // -0.69176, -0.72213 - 0xbfe619cf86c55702, 0xbfe7245c2fcd492a, // -0.69065, -0.72319 - 0xbfe610b7551d2cde, 0xbfe72d0837efff97, // -0.68954, -0.72425 - 0xbfe6079bbc5aadfa, 0xbfe735b0ad2009b2, // -0.68843, -0.7253 - 0xbfe5fe7cbde56a0f, 0xbfe73e558e079942, // -0.68732, -0.72636 - 0xbfe5f55a5b2576f8, 0xbfe746f6d9516d59, // -0.6862, -0.72741 - 0xbfe5ec3495837074, 0xbfe74f948da8d28d, // -0.68508, -0.72846 - 0xbfe5e30b6e6877f3, 0xbfe7582ea9b9a329, // -0.68397, -0.72951 - 0xbfe5d9dee73e345c, 0xbfe760c52c304764, // -0.68285, -0.73056 - 0xbfe5d0af016ed1d4, 0xbfe7695813b9b594, // -0.68172, -0.73161 - 0xbfe5c77bbe65018c, 0xbfe771e75f037261, // -0.6806, -0.73265 - 0xbfe5be451f8bf980, 0xbfe77a730cbb9100, // -0.67948, -0.7337 - 0xbfe5b50b264f7448, 0xbfe782fb1b90b35b, // -0.67835, -0.73474 - 0xbfe5abcdd41bb0d8, 0xbfe78b7f8a320a52, // -0.67722, -0.73578 - 0xbfe5a28d2a5d7250, 0xbfe79400574f55e4, // -0.67609, -0.73682 - 0xbfe599492a81ffbc, 0xbfe79c7d8198e56e, // -0.67496, -0.73785 - 0xbfe59001d5f723df, 0xbfe7a4f707bf97d2, // -0.67383, -0.73889 - 0xbfe586b72e2b2cfd, 0xbfe7ad6ce874dbb6, // -0.67269, -0.73992 - 0xbfe57d69348cec9f, 0xbfe7b5df226aafb0, // -0.67156, -0.74095 - 0xbfe57417ea8bb75c, 0xbfe7be4db453a27c, // -0.67042, -0.74198 - 0xbfe56ac35197649e, 0xbfe7c6b89ce2d333, // -0.66928, -0.74301 - 0xbfe5616b6b204e6e, 0xbfe7cf1fdacbf179, // -0.66814, -0.74403 - 0xbfe5581038975137, 0xbfe7d7836cc33db2, // -0.667, -0.74506 - 0xbfe54eb1bb6dcb8f, 0xbfe7dfe3517d8937, // -0.66586, -0.74608 - 0xbfe5454ff5159dfb, 0xbfe7e83f87b03686, // -0.66471, -0.7471 - 0xbfe53beae7012abe, 0xbfe7f0980e113978, // -0.66356, -0.74812 - 0xbfe5328292a35596, 0xbfe7f8ece3571771, // -0.66242, -0.74914 - 0xbfe52916f96f8388, 0xbfe8013e0638e795, // -0.66127, -0.75015 - 0xbfe51fa81cd99aa6, 0xbfe8098b756e52fa, // -0.66011, -0.75117 - 0xbfe51635fe5601d7, 0xbfe811d52faf94dc, // -0.65896, -0.75218 - 0xbfe50cc09f59a09b, 0xbfe81a1b33b57acc, // -0.65781, -0.75319 - 0xbfe503480159ded2, 0xbfe8225d803964e5, // -0.65665, -0.75419 - 0xbfe4f9cc25cca486, 0xbfe82a9c13f545ff, // -0.65549, -0.7552 - 0xbfe4f04d0e2859aa, 0xbfe832d6eda3a3e0, // -0.65433, -0.75621 - 0xbfe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // -0.65317, -0.75721 - 0xbfe4dd453076b064, 0xbfe843416dc4cce2, // -0.65201, -0.75821 - 0xbfe4d3bc6d589f80, 0xbfe84b7111af83f9, // -0.65085, -0.75921 - 0xbfe4ca30740218a3, 0xbfe8539cf67c9029, // -0.64968, -0.76021 - 0xbfe4c0a145ec0004, 0xbfe85bc51ae958cc, // -0.64851, -0.7612 - 0xbfe4b70ee48fb869, 0xbfe863e97db3d95a, // -0.64735, -0.7622 - 0xbfe4ad79516722f0, 0xbfe86c0a1d9aa195, // -0.64618, -0.76319 - 0xbfe4a3e08dec9ed6, 0xbfe87426f95cd5bd, // -0.645, -0.76418 - 0xbfe49a449b9b0938, 0xbfe87c400fba2ebf, // -0.64383, -0.76517 - 0xbfe490a57bedbcdf, 0xbfe884555f72fa6b, // -0.64266, -0.76615 - 0xbfe48703306091fe, 0xbfe88c66e7481ba1, // -0.64148, -0.76714 - 0xbfe47d5dba6fde01, 0xbfe89474a5fb0a84, // -0.6403, -0.76812 - 0xbfe473b51b987347, 0xbfe89c7e9a4dd4ab, // -0.63912, -0.7691 - 0xbfe46a095557a0f1, 0xbfe8a484c3031d50, // -0.63794, -0.77008 - 0xbfe4605a692b32a2, 0xbfe8ac871ede1d88, // -0.63676, -0.77106 - 0xbfe456a858917046, 0xbfe8b485aca2a468, // -0.63558, -0.77204 - 0xbfe44cf325091dd6, 0xbfe8bc806b151741, // -0.63439, -0.77301 - 0xbfe4433ad0117b1d, 0xbfe8c47758fa71cb, // -0.63321, -0.77398 - 0xbfe4397f5b2a4380, 0xbfe8cc6a75184655, // -0.63202, -0.77495 - 0xbfe42fc0c7d3adbb, 0xbfe8d459be34bdfa, // -0.63083, -0.77592 - 0xbfe425ff178e6bb1, 0xbfe8dc45331698cc, // -0.62964, -0.77689 - 0xbfe41c3a4bdbaa26, 0xbfe8e42cd2852e0a, // -0.62845, -0.77785 - 0xbfe41272663d108c, 0xbfe8ec109b486c49, // -0.62725, -0.77882 - 0xbfe408a76834c0c0, 0xbfe8f3f08c28d9ac, // -0.62606, -0.77978 - 0xbfe3fed9534556d4, 0xbfe8fbcca3ef940d, // -0.62486, -0.78074 - 0xbfe3f50828f1e8d2, 0xbfe903a4e1665133, // -0.62366, -0.78169 - 0xbfe3eb33eabe0680, 0xbfe90b7943575efe, // -0.62246, -0.78265 - 0xbfe3e15c9a2db922, 0xbfe91349c88da398, // -0.62126, -0.7836 - 0xbfe3d78238c58343, 0xbfe91b166fd49da2, // -0.62006, -0.78456 - 0xbfe3cda4c80a6076, 0xbfe922df37f8646a, // -0.61885, -0.78551 - 0xbfe3c3c44981c517, 0xbfe92aa41fc5a815, // -0.61765, -0.78646 - 0xbfe3b9e0beb19e18, 0xbfe932652609b1cf, // -0.61644, -0.7874 - 0xbfe3affa292050b9, 0xbfe93a22499263fc, // -0.61523, -0.78835 - 0xbfe3a6108a54ba58, 0xbfe941db892e3a65, // -0.61402, -0.78929 - 0xbfe39c23e3d63029, 0xbfe94990e3ac4a6c, // -0.61281, -0.79023 - 0xbfe39234372c7f04, 0xbfe9514257dc4335, // -0.6116, -0.79117 - 0xbfe3884185dfeb22, 0xbfe958efe48e6dd7, // -0.61038, -0.79211 - 0xbfe37e4bd1792fe2, 0xbfe960998893ad8c, // -0.60917, -0.79304 - 0xbfe374531b817f8d, 0xbfe9683f42bd7fe1, // -0.60795, -0.79398 - 0xbfe36a576582831b, 0xbfe96fe111ddfce0, // -0.60673, -0.79491 - 0xbfe36058b10659f3, 0xbfe9777ef4c7d742, // -0.60551, -0.79584 - 0xbfe35656ff9799ae, 0xbfe97f18ea4e5c9e, // -0.60429, -0.79676 - 0xbfe34c5252c14de1, 0xbfe986aef1457594, // -0.60307, -0.79769 - 0xbfe3424aac0ef7d6, 0xbfe98e410881a600, // -0.60184, -0.79861 - 0xbfe338400d0c8e57, 0xbfe995cf2ed80d22, // -0.60062, -0.79954 - 0xbfe32e3277467d6b, 0xbfe99d59631e65d5, // -0.59939, -0.80046 - 0xbfe32421ec49a620, 0xbfe9a4dfa42b06b2, // -0.59816, -0.80138 - 0xbfe31a0e6da35e44, 0xbfe9ac61f0d4e247, // -0.59693, -0.80229 - 0xbfe30ff7fce17035, 0xbfe9b3e047f38741, // -0.5957, -0.80321 - 0xbfe305de9b921a94, 0xbfe9bb5aa85f2098, // -0.59447, -0.80412 - 0xbfe2fbc24b441015, 0xbfe9c2d110f075c3, // -0.59323, -0.80503 - 0xbfe2f1a30d86773a, 0xbfe9ca438080eadb, // -0.592, -0.80594 - 0xbfe2e780e3e8ea16, 0xbfe9d1b1f5ea80d6, // -0.59076, -0.80685 - 0xbfe2dd5bcffb7616, 0xbfe9d91c7007d5a6, // -0.58952, -0.80775 - 0xbfe2d333d34e9bb7, 0xbfe9e082edb42472, // -0.58828, -0.80866 - 0xbfe2c908ef734e57, 0xbfe9e7e56dcb45bd, // -0.58704, -0.80956 - 0xbfe2bedb25faf3ea, 0xbfe9ef43ef29af94, // -0.5858, -0.81046 - 0xbfe2b4aa787764c4, 0xbfe9f69e70ac75bc, // -0.58455, -0.81135 - 0xbfe2aa76e87aeb58, 0xbfe9fdf4f13149de, // -0.58331, -0.81225 - 0xbfe2a040779843fb, 0xbfea05476f967bb5, // -0.58206, -0.81314 - 0xbfe2960727629ca8, 0xbfea0c95eabaf937, // -0.58081, -0.81404 - 0xbfe28bcaf96d94ba, 0xbfea13e0617e4ec7, // -0.57956, -0.81493 - 0xbfe2818bef4d3cba, 0xbfea1b26d2c0a75e, // -0.57831, -0.81581 - 0xbfe2774a0a961612, 0xbfea22693d62ccb9, // -0.57706, -0.8167 - 0xbfe26d054cdd12df, 0xbfea29a7a0462782, // -0.57581, -0.81758 - 0xbfe262bdb7b795a2, 0xbfea30e1fa4cbf81, // -0.57455, -0.81847 - 0xbfe258734cbb7110, 0xbfea38184a593bc6, // -0.5733, -0.81935 - 0xbfe24e260d7ee7c9, 0xbfea3f4a8f4ee2d2, // -0.57204, -0.82023 - 0xbfe243d5fb98ac1f, 0xbfea4678c8119ac8, // -0.57078, -0.8211 - 0xbfe23983189fdfd5, 0xbfea4da2f385e997, // -0.56952, -0.82198 - 0xbfe22f2d662c13e1, 0xbfea54c91090f524, // -0.56826, -0.82285 - 0xbfe224d4e5d5482e, 0xbfea5beb1e188375, // -0.567, -0.82372 - 0xbfe21a799933eb58, 0xbfea63091b02fae2, // -0.56573, -0.82459 - 0xbfe2101b81e0da78, 0xbfea6a230637623b, // -0.56447, -0.82546 - 0xbfe205baa17560d6, 0xbfea7138de9d60f5, // -0.5632, -0.82632 - 0xbfe1fb56f98b37b8, 0xbfea784aa31d3f55, // -0.56193, -0.82718 - 0xbfe1f0f08bbc861b, 0xbfea7f58529fe69d, // -0.56066, -0.82805 - 0xbfe1e68759a3e074, 0xbfea8661ec0ee133, // -0.55939, -0.8289 - 0xbfe1dc1b64dc4872, 0xbfea8d676e545ad2, // -0.55812, -0.82976 - 0xbfe1d1acaf012cc2, 0xbfea9468d85b20ae, // -0.55685, -0.83062 - 0xbfe1c73b39ae68c8, 0xbfea9b66290ea1a3, // -0.55557, -0.83147 - 0xbfe1bcc706804467, 0xbfeaa25f5f5aee60, // -0.55429, -0.83232 - 0xbfe1b250171373be, 0xbfeaa9547a2cb98e, // -0.55302, -0.83317 - 0xbfe1a7d66d0516e6, 0xbfeab045787157ff, // -0.55174, -0.83402 - 0xbfe19d5a09f2b9b8, 0xbfeab7325916c0d4, // -0.55046, -0.83486 - 0xbfe192daef7a5386, 0xbfeabe1b1b0b8dac, // -0.54918, -0.83571 - 0xbfe188591f3a46e5, 0xbfeac4ffbd3efac8, // -0.54789, -0.83655 - 0xbfe17dd49ad16161, 0xbfeacbe03ea0e73b, // -0.54661, -0.83739 - 0xbfe1734d63dedb49, 0xbfead2bc9e21d511, // -0.54532, -0.83822 - 0xbfe168c37c025764, 0xbfead994dab2e979, // -0.54404, -0.83906 - 0xbfe15e36e4dbe2bc, 0xbfeae068f345ecef, // -0.54275, -0.83989 - 0xbfe153a7a00bf453, 0xbfeae738e6cd4b67, // -0.54146, -0.84073 - 0xbfe14915af336ceb, 0xbfeaee04b43c1474, // -0.54017, -0.84155 - 0xbfe13e8113f396c1, 0xbfeaf4cc5a85fb73, // -0.53888, -0.84238 - 0xbfe133e9cfee254e, 0xbfeafb8fd89f57b6, // -0.53759, -0.84321 - 0xbfe1294fe4c5350a, 0xbfeb024f2d7d24a9, // -0.53629, -0.84403 - 0xbfe11eb3541b4b22, 0xbfeb090a58150200, // -0.535, -0.84485 - 0xbfe114141f935545, 0xbfeb0fc1575d33db, // -0.5337, -0.84567 - 0xbfe1097248d0a956, 0xbfeb16742a4ca2f5, // -0.5324, -0.84649 - 0xbfe0fecdd1770537, 0xbfeb1d22cfdadcc6, // -0.5311, -0.84731 - 0xbfe0f426bb2a8e7d, 0xbfeb23cd470013b4, // -0.5298, -0.84812 - 0xbfe0e97d078fd23b, 0xbfeb2a738eb51f33, // -0.5285, -0.84893 - 0xbfe0ded0b84bc4b5, 0xbfeb3115a5f37bf4, // -0.5272, -0.84974 - 0xbfe0d421cf03c12b, 0xbfeb37b38bb54c09, // -0.5259, -0.85055 - 0xbfe0c9704d5d898f, 0xbfeb3e4d3ef55712, // -0.52459, -0.85136 - 0xbfe0bebc34ff4646, 0xbfeb44e2beaf0a61, // -0.52328, -0.85216 - 0xbfe0b405878f85ec, 0xbfeb4b7409de7925, // -0.52198, -0.85296 - 0xbfe0a94c46b53d0b, 0xbfeb52011f805c92, // -0.52067, -0.85376 - 0xbfe09e907417c5e1, 0xbfeb5889fe921405, // -0.51936, -0.85456 - 0xbfe093d2115ee018, 0xbfeb5f0ea611a532, // -0.51804, -0.85535 - 0xbfe089112032b08c, 0xbfeb658f14fdbc47, // -0.51673, -0.85615 - 0xbfe07e4da23bc102, 0xbfeb6c0b4a55ac17, // -0.51542, -0.85694 - 0xbfe073879922ffed, 0xbfeb728345196e3e, // -0.5141, -0.85773 - 0xbfe068bf0691c028, 0xbfeb78f70449a34b, // -0.51279, -0.85852 - 0xbfe05df3ec31b8b6, 0xbfeb7f6686e792ea, // -0.51147, -0.8593 - 0xbfe053264bad0483, 0xbfeb85d1cbf52c02, // -0.51015, -0.86009 - 0xbfe0485626ae221a, 0xbfeb8c38d27504e9, // -0.50883, -0.86087 - 0xbfe03d837edff370, 0xbfeb929b996a5b7f, // -0.50751, -0.86165 - 0xbfe032ae55edbd95, 0xbfeb98fa1fd9155e, // -0.50619, -0.86242 - 0xbfe027d6ad83287e, 0xbfeb9f5464c5bffc, // -0.50486, -0.8632 - 0xbfe01cfc874c3eb7, 0xbfeba5aa673590d2, // -0.50354, -0.86397 - 0xbfe0121fe4f56d2c, 0xbfebabfc262e6586, // -0.50221, -0.86474 - 0xbfe00740c82b82e0, 0xbfebb249a0b6c40d, // -0.50089, -0.86551 - 0xbfdff8be6537615e, 0xbfebb892d5d5dad5, // -0.49956, -0.86628 - 0xbfdfe2f64be7120f, 0xbfebbed7c49380ea, // -0.49823, -0.86705 - 0xbfdfcd2947c1ff57, 0xbfebc5186bf8361d, // -0.4969, -0.86781 - 0xbfdfb7575c24d2de, 0xbfebcb54cb0d2327, // -0.49557, -0.86857 - 0xbfdfa1808c6cf7e0, 0xbfebd18ce0dc19d6, // -0.49423, -0.86933 - 0xbfdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // -0.4929, -0.87009 - 0xbfdf75c44e26a852, 0xbfebddf02cd2b983, // -0.49156, -0.87084 - 0xbfdf5fdee656cda3, 0xbfebe41b611154c1, // -0.49023, -0.8716 - 0xbfdf49f4a7e97729, 0xbfebea424837de6d, // -0.48889, -0.87235 - 0xbfdf3405963fd068, 0xbfebf064e15377dd, // -0.48755, -0.87309 - 0xbfdf1e11b4bbc35c, 0xbfebf6832b71ec5b, // -0.48621, -0.87384 - 0xbfdf081906bff7fd, 0xbfebfc9d25a1b147, // -0.48487, -0.87459 - 0xbfdef21b8fafd3b5, 0xbfec02b2cef1e641, // -0.48353, -0.87533 - 0xbfdedc1952ef78d5, 0xbfec08c426725549, // -0.48218, -0.87607 - 0xbfdec61253e3c61b, 0xbfec0ed12b3372e9, // -0.48084, -0.87681 - 0xbfdeb00695f25620, 0xbfec14d9dc465e58, // -0.47949, -0.87755 - 0xbfde99f61c817eda, 0xbfec1ade38bce19b, // -0.47815, -0.87828 - 0xbfde83e0eaf85113, 0xbfec20de3fa971b0, // -0.4768, -0.87901 - 0xbfde6dc704be97e2, 0xbfec26d9f01f2eaf, // -0.47545, -0.87974 - 0xbfde57a86d3cd824, 0xbfec2cd14931e3f1, // -0.4741, -0.88047 - 0xbfde418527dc4ffa, 0xbfec32c449f60831, // -0.47275, -0.8812 - 0xbfde2b5d3806f63b, 0xbfec38b2f180bdb1, // -0.4714, -0.88192 - 0xbfde1530a12779f4, 0xbfec3e9d3ee7d262, // -0.47004, -0.88264 - 0xbfddfeff66a941de, 0xbfec44833141c004, // -0.46869, -0.88336 - 0xbfdde8c98bf86bd6, 0xbfec4a64c7a5ac4c, // -0.46733, -0.88408 - 0xbfddd28f1481cc58, 0xbfec5042012b6907, // -0.46598, -0.8848 - 0xbfddbc5003b2edf8, 0xbfec561adceb743e, // -0.46462, -0.88551 - 0xbfdda60c5cfa10d8, 0xbfec5bef59fef85a, // -0.46326, -0.88622 - 0xbfdd8fc423c62a25, 0xbfec61bf777fcc48, // -0.4619, -0.88693 - 0xbfdd79775b86e389, 0xbfec678b3488739b, // -0.46054, -0.88764 - 0xbfdd632607ac9aa9, 0xbfec6d5290341eb2, // -0.45918, -0.88835 - 0xbfdd4cd02ba8609c, 0xbfec7315899eaad7, // -0.45781, -0.88905 - 0xbfdd3675caebf962, 0xbfec78d41fe4a267, // -0.45645, -0.88975 - 0xbfdd2016e8e9db5b, 0xbfec7e8e52233cf3, // -0.45508, -0.89045 - 0xbfdd09b389152ec1, 0xbfec84441f785f61, // -0.45372, -0.89115 - 0xbfdcf34baee1cd21, 0xbfec89f587029c13, // -0.45235, -0.89184 - 0xbfdcdcdf5dc440ce, 0xbfec8fa287e13305, // -0.45098, -0.89253 - 0xbfdcc66e9931c45d, 0xbfec954b213411f5, // -0.44961, -0.89322 - 0xbfdcaff964a0421d, 0xbfec9aef521bd480, // -0.44824, -0.89391 - 0xbfdc997fc3865388, 0xbfeca08f19b9c449, // -0.44687, -0.8946 - 0xbfdc8301b95b40c2, 0xbfeca62a772fd919, // -0.4455, -0.89528 - 0xbfdc6c7f4997000a, 0xbfecabc169a0b901, // -0.44412, -0.89597 - 0xbfdc55f877b23537, 0xbfecb153f02fb87d, // -0.44275, -0.89665 - 0xbfdc3f6d47263129, 0xbfecb6e20a00da99, // -0.44137, -0.89732 - 0xbfdc28ddbb6cf145, 0xbfecbc6bb638d10b, // -0.43999, -0.898 - 0xbfdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // -0.43862, -0.89867 - 0xbfdbfbb1a05e0edc, 0xbfecc771c2736c09, // -0.43724, -0.89935 - 0xbfdbe51517ffc0d9, 0xbfecccee20c2de9f, // -0.43586, -0.90002 - 0xbfdbce744262deee, 0xbfecd2660e12c1e6, // -0.43448, -0.90068 - 0xbfdbb7cf2304bd01, 0xbfecd7d9898b32f6, // -0.43309, -0.90135 - 0xbfdba125bd63583e, 0xbfecdd489254fe65, // -0.43171, -0.90201 - 0xbfdb8a7814fd5693, 0xbfece2b32799a060, // -0.43033, -0.90267 - 0xbfdb73c62d520624, 0xbfece819488344ce, // -0.42894, -0.90333 - 0xbfdb5d1009e15cc0, 0xbfeced7af43cc773, // -0.42756, -0.90399 - 0xbfdb4655ae2bf757, 0xbfecf2d829f1b40e, // -0.42617, -0.90464 - 0xbfdb2f971db31972, 0xbfecf830e8ce467b, // -0.42478, -0.9053 - 0xbfdb18d45bf8aca6, 0xbfecfd852fff6ad4, // -0.42339, -0.90595 - 0xbfdb020d6c7f4009, 0xbfed02d4feb2bd92, // -0.422, -0.9066 - 0xbfdaeb4252ca07ab, 0xbfed082054168bac, // -0.42061, -0.90724 - 0xbfdad473125cdc08, 0xbfed0d672f59d2b9, // -0.41922, -0.90789 - 0xbfdabd9faebc3980, 0xbfed12a98fac410c, // -0.41782, -0.90853 - 0xbfdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // -0.41643, -0.90917 - 0xbfda8fec8bf5b166, 0xbfed1d20dc40c15c, // -0.41503, -0.90981 - 0xbfda790cd3dbf31a, 0xbfed2255c6e5a4e1, // -0.41364, -0.91044 - 0xbfda622906a70b63, 0xbfed2786335f52fc, // -0.41224, -0.91107 - 0xbfda4b4127dea1e4, 0xbfed2cb220e0ef9f, // -0.41084, -0.91171 - 0xbfda34553b0afee5, 0xbfed31d98e9e503a, // -0.40944, -0.91234 - 0xbfda1d6543b50ac0, 0xbfed36fc7bcbfbdc, // -0.40804, -0.91296 - 0xbfda067145664d57, 0xbfed3c1ae79f2b4e, // -0.40664, -0.91359 - 0xbfd9ef7943a8ed8a, 0xbfed4134d14dc93a, // -0.40524, -0.91421 - 0xbfd9d87d4207b0ab, 0xbfed464a380e7242, // -0.40384, -0.91483 - 0xbfd9c17d440df9f2, 0xbfed4b5b1b187524, // -0.40243, -0.91545 - 0xbfd9aa794d47c9ee, 0xbfed506779a3d2d9, // -0.40103, -0.91606 - 0xbfd993716141bdfe, 0xbfed556f52e93eb1, // -0.39962, -0.91668 - 0xbfd97c6583890fc2, 0xbfed5a72a6221e73, // -0.39822, -0.91729 - 0xbfd96555b7ab948f, 0xbfed5f7172888a7f, // -0.39681, -0.9179 - 0xbfd94e420137bce3, 0xbfed646bb7574de5, // -0.3954, -0.91851 - 0xbfd9372a63bc93d7, 0xbfed696173c9e68b, // -0.39399, -0.91911 - 0xbfd9200ee2c9be97, 0xbfed6e52a71c8547, // -0.39258, -0.91972 - 0xbfd908ef81ef7bd1, 0xbfed733f508c0dff, // -0.39117, -0.92032 - 0xbfd8f1cc44bea329, 0xbfed78276f5617c6, // -0.38976, -0.92092 - 0xbfd8daa52ec8a4af, 0xbfed7d0b02b8ecf9, // -0.38835, -0.92151 - 0xbfd8c37a439f884f, 0xbfed81ea09f38b63, // -0.38693, -0.92211 - 0xbfd8ac4b86d5ed44, 0xbfed86c48445a450, // -0.38552, -0.9227 - 0xbfd89518fbff098e, 0xbfed8b9a70ef9cb4, // -0.3841, -0.92329 - 0xbfd87de2a6aea963, 0xbfed906bcf328d46, // -0.38268, -0.92388 - 0xbfd866a88a792ea0, 0xbfed95389e50429b, // -0.38127, -0.92447 - 0xbfd84f6aaaf3903f, 0xbfed9a00dd8b3d46, // -0.37985, -0.92505 - 0xbfd838290bb359c8, 0xbfed9ec48c26b1f3, // -0.37843, -0.92563 - 0xbfd820e3b04eaac4, 0xbfeda383a9668988, // -0.37701, -0.92621 - 0xbfd8099a9c5c362d, 0xbfeda83e348f613b, // -0.37559, -0.92679 - 0xbfd7f24dd37341e3, 0xbfedacf42ce68ab9, // -0.37416, -0.92736 - 0xbfd7dafd592ba621, 0xbfedb1a591b20c38, // -0.37274, -0.92794 - 0xbfd7c3a9311dcce7, 0xbfedb6526238a09b, // -0.37132, -0.92851 - 0xbfd7ac515ee2b172, 0xbfedbafa9dc1b78d, // -0.36989, -0.92907 - 0xbfd794f5e613dfae, 0xbfedbf9e4395759a, // -0.36847, -0.92964 - 0xbfd77d96ca4b73a6, 0xbfedc43d52fcb453, // -0.36704, -0.93021 - 0xbfd766340f2418f6, 0xbfedc8d7cb410260, // -0.36561, -0.93077 - 0xbfd74ecdb8390a3e, 0xbfedcd6dabaca3a5, // -0.36418, -0.93133 - 0xbfd73763c9261092, 0xbfedd1fef38a915a, // -0.36276, -0.93188 - 0xbfd71ff6458782ec, 0xbfedd68ba2267a25, // -0.36133, -0.93244 - 0xbfd7088530fa459e, 0xbfeddb13b6ccc23d, // -0.3599, -0.93299 - 0xbfd6f1108f1bc9c5, 0xbfeddf9730ca837b, // -0.35846, -0.93354 - 0xbfd6d998638a0cb5, 0xbfede4160f6d8d81, // -0.35703, -0.93409 - 0xbfd6c21cb1e39771, 0xbfede890520465ce, // -0.3556, -0.93464 - 0xbfd6aa9d7dc77e16, 0xbfeded05f7de47da, // -0.35416, -0.93518 - 0xbfd6931acad55f51, 0xbfedf177004b2534, // -0.35273, -0.93573 - 0xbfd67b949cad63ca, 0xbfedf5e36a9ba59c, // -0.35129, -0.93627 - 0xbfd6640af6f03d9e, 0xbfedfa4b3621271d, // -0.34986, -0.9368 - 0xbfd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // -0.34842, -0.93734 - 0xbfd634ed533be58e, 0xbfee030cee1435b8, // -0.34698, -0.93787 - 0xbfd61d595c88c203, 0xbfee0766d9280f54, // -0.34554, -0.9384 - 0xbfd605c1fcc88f63, 0xbfee0bbc22bd8349, // -0.3441, -0.93893 - 0xbfd5ee27379ea693, 0xbfee100cca2980ac, // -0.34266, -0.93946 - 0xbfd5d68910aee686, 0xbfee1458cec1ad83, // -0.34122, -0.93998 - 0xbfd5bee78b9db3b6, 0xbfee18a02fdc66d9, // -0.33978, -0.94051 - 0xbfd5a742ac0ff78d, 0xbfee1ce2ecd0c0d8, // -0.33833, -0.94103 - 0xbfd58f9a75ab1fdd, 0xbfee212104f686e5, // -0.33689, -0.94154 - 0xbfd577eeec151e47, 0xbfee255a77a63bb8, // -0.33545, -0.94206 - 0xbfd5604012f467b4, 0xbfee298f4439197a, // -0.334, -0.94257 - 0xbfd5488dedeff3be, 0xbfee2dbf6a0911d9, // -0.33255, -0.94308 - 0xbfd530d880af3c24, 0xbfee31eae870ce25, // -0.33111, -0.94359 - 0xbfd5191fceda3c35, 0xbfee3611becbaf69, // -0.32966, -0.9441 - 0xbfd50163dc197047, 0xbfee3a33ec75ce85, // -0.32821, -0.9446 - 0xbfd4e9a4ac15d520, 0xbfee3e5170cbfc46, // -0.32676, -0.94511 - 0xbfd4d1e24278e76a, 0xbfee426a4b2bc17e, // -0.32531, -0.94561 - 0xbfd4ba1ca2eca31c, 0xbfee467e7af35f23, // -0.32386, -0.94611 - 0xbfd4a253d11b82f3, 0xbfee4a8dff81ce5e, // -0.32241, -0.9466 - 0xbfd48a87d0b07fd7, 0xbfee4e98d836c0af, // -0.32096, -0.94709 - 0xbfd472b8a5571054, 0xbfee529f04729ffc, // -0.3195, -0.94759 - 0xbfd45ae652bb2800, 0xbfee56a083968eb1, // -0.31805, -0.94807 - 0xbfd44310dc8936f0, 0xbfee5a9d550467d3, // -0.31659, -0.94856 - 0xbfd42b38466e2928, 0xbfee5e95781ebf1c, // -0.31514, -0.94905 - 0xbfd4135c94176602, 0xbfee6288ec48e112, // -0.31368, -0.94953 - 0xbfd3fb7dc932cfa4, 0xbfee6677b0e6d31e, // -0.31222, -0.95001 - 0xbfd3e39be96ec271, 0xbfee6a61c55d53a7, // -0.31077, -0.95049 - 0xbfd3cbb6f87a146e, 0xbfee6e472911da27, // -0.30931, -0.95096 - 0xbfd3b3cefa0414b7, 0xbfee7227db6a9744, // -0.30785, -0.95144 - 0xbfd39be3f1bc8aef, 0xbfee7603dbce74e9, // -0.30639, -0.95191 - 0xbfd383f5e353b6aa, 0xbfee79db29a5165a, // -0.30493, -0.95238 - 0xbfd36c04d27a4edf, 0xbfee7dadc456d850, // -0.30347, -0.95284 - 0xbfd35410c2e18152, 0xbfee817bab4cd10d, // -0.30201, -0.95331 - 0xbfd33c19b83af207, 0xbfee8544ddf0d075, // -0.30054, -0.95377 - 0xbfd3241fb638baaf, 0xbfee89095bad6025, // -0.29908, -0.95423 - 0xbfd30c22c08d6a13, 0xbfee8cc923edc388, // -0.29762, -0.95469 - 0xbfd2f422daec0386, 0xbfee9084361df7f3, // -0.29615, -0.95514 - 0xbfd2dc200907fe51, 0xbfee943a91aab4b4, // -0.29469, -0.95559 - 0xbfd2c41a4e954520, 0xbfee97ec36016b30, // -0.29322, -0.95605 - 0xbfd2ac11af483572, 0xbfee9b99229046f8, // -0.29175, -0.95649 - 0xbfd294062ed59f05, 0xbfee9f4156c62dda, // -0.29028, -0.95694 - 0xbfd27bf7d0f2c346, 0xbfeea2e4d212c000, // -0.28882, -0.95738 - 0xbfd263e6995554ba, 0xbfeea68393e65800, // -0.28735, -0.95783 - 0xbfd24bd28bb37672, 0xbfeeaa1d9bb20af3, // -0.28588, -0.95827 - 0xbfd233bbabc3bb72, 0xbfeeadb2e8e7a88e, // -0.28441, -0.9587 - 0xbfd21ba1fd3d2623, 0xbfeeb1437af9bb34, // -0.28294, -0.95914 - 0xbfd2038583d727bd, 0xbfeeb4cf515b8811, // -0.28146, -0.95957 - 0xbfd1eb6643499fbb, 0xbfeeb8566b810f2a, // -0.27999, -0.96 - 0xbfd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // -0.27852, -0.96043 - 0xbfd1bb1f7b999480, 0xbfeebf5668eaf2ef, // -0.27705, -0.96086 - 0xbfd1a2f7fbe8f243, 0xbfeec2cf4b1af6b2, // -0.27557, -0.96128 - 0xbfd18acdc3f4873a, 0xbfeec6436ee60309, // -0.2741, -0.9617 - 0xbfd172a0d7765177, 0xbfeec9b2d3c3bf84, // -0.27262, -0.96212 - 0xbfd15a713a28b9d9, 0xbfeecd1d792c8f10, // -0.27115, -0.96254 - 0xbfd1423eefc69378, 0xbfeed0835e999009, // -0.26967, -0.96295 - 0xbfd12a09fc0b1b12, 0xbfeed3e483849c51, // -0.26819, -0.96337 - 0xbfd111d262b1f677, 0xbfeed740e7684963, // -0.26671, -0.96378 - 0xbfd0f998277733f7, 0xbfeeda9889bfe86a, // -0.26523, -0.96418 - 0xbfd0e15b4e1749cd, 0xbfeeddeb6a078651, // -0.26375, -0.96459 - 0xbfd0c91bda4f158d, 0xbfeee13987bbebdc, // -0.26227, -0.96499 - 0xbfd0b0d9cfdbdb90, 0xbfeee482e25a9dbc, // -0.26079, -0.96539 - 0xbfd09895327b465e, 0xbfeee7c77961dc9e, // -0.25931, -0.96579 - 0xbfd0804e05eb661e, 0xbfeeeb074c50a544, // -0.25783, -0.96619 - 0xbfd068044deab002, 0xbfeeee425aa6b09a, // -0.25635, -0.96658 - 0xbfd04fb80e37fdae, 0xbfeef178a3e473c2, // -0.25487, -0.96698 - 0xbfd037694a928cac, 0xbfeef4aa278b2032, // -0.25338, -0.96737 - 0xbfd01f1806b9fdd2, 0xbfeef7d6e51ca3c0, // -0.2519, -0.96775 - 0xbfd006c4466e54af, 0xbfeefafedc1ba8b7, // -0.25041, -0.96814 - 0xbfcfdcdc1adfedf8, 0xbfeefe220c0b95ec, // -0.24893, -0.96852 - 0xbfcfac2abeff57ff, 0xbfef014074708ed3, // -0.24744, -0.9689 - 0xbfcf7b7480bd3801, 0xbfef045a14cf738c, // -0.24596, -0.96928 - 0xbfcf4ab9679c9f5c, 0xbfef076eecade0fa, // -0.24447, -0.96966 - 0xbfcf19f97b215f1a, 0xbfef0a7efb9230d7, // -0.24298, -0.97003 - 0xbfcee934c2d006c7, 0xbfef0d8a410379c5, // -0.24149, -0.9704 - 0xbfceb86b462de348, 0xbfef1090bc898f5f, // -0.24, -0.97077 - 0xbfce879d0cc0fdaf, 0xbfef13926dad024e, // -0.23851, -0.97114 - 0xbfce56ca1e101a1b, 0xbfef168f53f7205d, // -0.23702, -0.9715 - 0xbfce25f281a2b684, 0xbfef19876ef1f486, // -0.23553, -0.97187 - 0xbfcdf5163f01099a, 0xbfef1c7abe284708, // -0.23404, -0.97223 - 0xbfcdc4355db40195, 0xbfef1f6941259d7a, // -0.23255, -0.97258 - 0xbfcd934fe5454311, 0xbfef2252f7763ada, // -0.23106, -0.97294 - 0xbfcd6265dd3f27e3, 0xbfef2537e0a71f9f, // -0.22957, -0.97329 - 0xbfcd31774d2cbdee, 0xbfef2817fc4609ce, // -0.22807, -0.97364 - 0xbfcd00843c99c5f9, 0xbfef2af349e17507, // -0.22658, -0.97399 - 0xbfcccf8cb312b286, 0xbfef2dc9c9089a9d, // -0.22508, -0.97434 - 0xbfcc9e90b824a6a9, 0xbfef309b794b719f, // -0.22359, -0.97468 - 0xbfcc6d90535d74dc, 0xbfef33685a3aaef0, // -0.22209, -0.97503 - 0xbfcc3c8b8c4b9dd7, 0xbfef36306b67c556, // -0.2206, -0.97536 - 0xbfcc0b826a7e4f63, 0xbfef38f3ac64e589, // -0.2191, -0.9757 - 0xbfcbda74f5856330, 0xbfef3bb21cc4fe47, // -0.2176, -0.97604 - 0xbfcba96334f15dad, 0xbfef3e6bbc1bbc65, // -0.21611, -0.97637 - 0xbfcb784d30536cda, 0xbfef412089fd8adc, // -0.21461, -0.9767 - 0xbfcb4732ef3d6722, 0xbfef43d085ff92dd, // -0.21311, -0.97703 - 0xbfcb16147941ca2a, 0xbfef467bafb7bbe0, // -0.21161, -0.97735 - 0xbfcae4f1d5f3b9ab, 0xbfef492206bcabb4, // -0.21011, -0.97768 - 0xbfcab3cb0ce6fe44, 0xbfef4bc38aa5c694, // -0.20861, -0.978 - 0xbfca82a025b00451, 0xbfef4e603b0b2f2d, // -0.20711, -0.97832 - 0xbfca517127e3dabc, 0xbfef50f81785c6b9, // -0.20561, -0.97863 - 0xbfca203e1b1831da, 0xbfef538b1faf2d07, // -0.20411, -0.97895 - 0xbfc9ef0706e35a35, 0xbfef56195321c090, // -0.20261, -0.97926 - 0xbfc9bdcbf2dc4366, 0xbfef58a2b1789e84, // -0.2011, -0.97957 - 0xbfc98c8ce69a7aec, 0xbfef5b273a4fa2d9, // -0.1996, -0.97988 - 0xbfc95b49e9b62af9, 0xbfef5da6ed43685d, // -0.1981, -0.98018 - 0xbfc92a0303c8194f, 0xbfef6021c9f148c2, // -0.19659, -0.98048 - 0xbfc8f8b83c69a60a, 0xbfef6297cff75cb0, // -0.19509, -0.98079 - 0xbfc8c7699b34ca7e, 0xbfef6508fef47bd5, // -0.19359, -0.98108 - 0xbfc8961727c41804, 0xbfef677556883cee, // -0.19208, -0.98138 - 0xbfc864c0e9b2b6cf, 0xbfef69dcd652f5de, // -0.19057, -0.98167 - 0xbfc83366e89c64c5, 0xbfef6c3f7df5bbb7, // -0.18907, -0.98196 - 0xbfc802092c1d744b, 0xbfef6e9d4d1262ca, // -0.18756, -0.98225 - 0xbfc7d0a7bbd2cb1b, 0xbfef70f6434b7eb7, // -0.18606, -0.98254 - 0xbfc79f429f59e11d, 0xbfef734a60446279, // -0.18455, -0.98282 - 0xbfc76dd9de50bf31, 0xbfef7599a3a12077, // -0.18304, -0.98311 - 0xbfc73c6d8055fe0a, 0xbfef77e40d068a90, // -0.18153, -0.98339 - 0xbfc70afd8d08c4ff, 0xbfef7a299c1a322a, // -0.18002, -0.98366 - 0xbfc6d98a0c08c8da, 0xbfef7c6a50826840, // -0.17851, -0.98394 - 0xbfc6a81304f64ab2, 0xbfef7ea629e63d6e, // -0.177, -0.98421 - 0xbfc676987f7216b8, 0xbfef80dd27ed8204, // -0.17549, -0.98448 - 0xbfc6451a831d830d, 0xbfef830f4a40c60c, // -0.17398, -0.98475 - 0xbfc61399179a6e94, 0xbfef853c9089595e, // -0.17247, -0.98501 - 0xbfc5e214448b3fc6, 0xbfef8764fa714ba9, // -0.17096, -0.98528 - 0xbfc5b08c1192e381, 0xbfef898887a36c84, // -0.16945, -0.98554 - 0xbfc57f008654cbde, 0xbfef8ba737cb4b78, // -0.16794, -0.9858 - 0xbfc54d71aa74ef02, 0xbfef8dc10a95380d, // -0.16643, -0.98605 - 0xbfc51bdf8597c5f2, 0xbfef8fd5ffae41db, // -0.16491, -0.98631 - 0xbfc4ea4a1f624b61, 0xbfef91e616c43891, // -0.1634, -0.98656 - 0xbfc4b8b17f79fa88, 0xbfef93f14f85ac08, // -0.16189, -0.98681 - 0xbfc48715ad84cdf5, 0xbfef95f7a9a1ec47, // -0.16037, -0.98706 - 0xbfc45576b1293e5a, 0xbfef97f924c9099b, // -0.15886, -0.9873 - 0xbfc423d4920e4166, 0xbfef99f5c0abd496, // -0.15734, -0.98754 - 0xbfc3f22f57db4893, 0xbfef9bed7cfbde29, // -0.15583, -0.98778 - 0xbfc3c0870a383ff6, 0xbfef9de0596b77a3, // -0.15431, -0.98802 - 0xbfc38edbb0cd8d14, 0xbfef9fce55adb2c8, // -0.1528, -0.98826 - 0xbfc35d2d53440db2, 0xbfefa1b7717661d5, // -0.15128, -0.98849 - 0xbfc32b7bf94516a7, 0xbfefa39bac7a1791, // -0.14976, -0.98872 - 0xbfc2f9c7aa7a72af, 0xbfefa57b066e2754, // -0.14825, -0.98895 - 0xbfc2c8106e8e613a, 0xbfefa7557f08a517, // -0.14673, -0.98918 - 0xbfc296564d2b953e, 0xbfefa92b1600657c, // -0.14521, -0.9894 - 0xbfc264994dfd340a, 0xbfefaafbcb0cfddc, // -0.1437, -0.98962 - 0xbfc232d978aed413, 0xbfefacc79de6c44f, // -0.14218, -0.98984 - 0xbfc20116d4ec7bce, 0xbfefae8e8e46cfbb, // -0.14066, -0.99006 - 0xbfc1cf516a62a077, 0xbfefb0509be6f7db, // -0.13914, -0.99027 - 0xbfc19d8940be24e7, 0xbfefb20dc681d54d, // -0.13762, -0.99049 - 0xbfc16bbe5fac5865, 0xbfefb3c60dd2c199, // -0.1361, -0.9907 - 0xbfc139f0cedaf576, 0xbfefb5797195d741, // -0.13458, -0.9909 - 0xbfc1082095f820b0, 0xbfefb727f187f1c7, // -0.13306, -0.99111 - 0xbfc0d64dbcb26786, 0xbfefb8d18d66adb7, // -0.13154, -0.99131 - 0xbfc0a4784ab8bf1d, 0xbfefba7644f068b5, // -0.13002, -0.99151 - 0xbfc072a047ba831d, 0xbfefbc1617e44186, // -0.1285, -0.99171 - 0xbfc040c5bb67747e, 0xbfefbdb106021816, // -0.12698, -0.99191 - 0xbfc00ee8ad6fb85b, 0xbfefbf470f0a8d88, // -0.12545, -0.9921 - 0xbfbfba124b07ad85, 0xbfefc0d832bf043a, // -0.12393, -0.99229 - 0xbfbf564e56a9730e, 0xbfefc26470e19fd3, // -0.12241, -0.99248 - 0xbfbef2858d27561b, 0xbfefc3ebc935454c, // -0.12089, -0.99267 - 0xbfbe8eb7fde4aa3e, 0xbfefc56e3b7d9af6, // -0.11937, -0.99285 - 0xbfbe2ae5b8457f77, 0xbfefc6ebc77f0887, // -0.11784, -0.99303 - 0xbfbdc70ecbae9fc8, 0xbfefc8646cfeb721, // -0.11632, -0.99321 - 0xbfbd633347858ce4, 0xbfefc9d82bc2915e, // -0.11479, -0.99339 - 0xbfbcff533b307dc1, 0xbfefcb4703914354, // -0.11327, -0.99356 - 0xbfbc9b6eb6165c42, 0xbfefccb0f4323aa3, // -0.11175, -0.99374 - 0xbfbc3785c79ec2d5, 0xbfefce15fd6da67b, // -0.11022, -0.99391 - 0xbfbbd3987f31fa0e, 0xbfefcf761f0c77a3, // -0.1087, -0.99407 - 0xbfbb6fa6ec38f64c, 0xbfefd0d158d86087, // -0.10717, -0.99424 - 0xbfbb0bb11e1d5559, 0xbfefd227aa9bd53b, // -0.10565, -0.9944 - 0xbfbaa7b724495c04, 0xbfefd37914220b84, // -0.10412, -0.99456 - 0xbfba43b90e27f3c4, 0xbfefd4c59536fae4, // -0.1026, -0.99472 - 0xbfb9dfb6eb24a85c, 0xbfefd60d2da75c9e, // -0.10107, -0.99488 - 0xbfb97bb0caaba56f, 0xbfefd74fdd40abbf, // -0.099544, -0.99503 - 0xbfb917a6bc29b42c, 0xbfefd88da3d12526, // -0.098017, -0.99518 - 0xbfb8b398cf0c38e0, 0xbfefd9c68127c78c, // -0.09649, -0.99533 - 0xbfb84f8712c130a0, 0xbfefdafa7514538c, // -0.094963, -0.99548 - 0xbfb7eb7196b72ee4, 0xbfefdc297f674ba9, // -0.093436, -0.99563 - 0xbfb787586a5d5b21, 0xbfefdd539ff1f456, // -0.091909, -0.99577 - 0xbfb7233b9d236e71, 0xbfefde78d68653fd, // -0.090381, -0.99591 - 0xbfb6bf1b3e79b129, 0xbfefdf9922f73307, // -0.088854, -0.99604 - 0xbfb65af75dd0f87b, 0xbfefe0b485181be3, // -0.087326, -0.99618 - 0xbfb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // -0.085797, -0.99631 - 0xbfb592a554489bc8, 0xbfefe2dc89bbff08, // -0.084269, -0.99644 - 0xbfb52e774a4d4d0a, 0xbfefe3e92be9d886, // -0.08274, -0.99657 - 0xbfb4ca45fc1ba8b6, 0xbfefe4f0e31d7a4a, // -0.081211, -0.9967 - 0xbfb4661179272096, 0xbfefe5f3af2e3940, // -0.079682, -0.99682 - 0xbfb401d9d0e3a507, 0xbfefe6f18ff42c84, // -0.078153, -0.99694 - 0xbfb39d9f12c5a299, 0xbfefe7ea85482d60, // -0.076624, -0.99706 - 0xbfb339614e41ffa5, 0xbfefe8de8f03d75c, // -0.075094, -0.99718 - 0xbfb2d52092ce19f6, 0xbfefe9cdad01883a, // -0.073565, -0.99729 - 0xbfb270dcefdfc45b, 0xbfefeab7df1c6005, // -0.072035, -0.9974 - 0xbfb20c9674ed444c, 0xbfefeb9d2530410f, // -0.070505, -0.99751 - 0xbfb1a84d316d4f8a, 0xbfefec7d7f19cffc, // -0.068974, -0.99762 - 0xbfb1440134d709b2, 0xbfefed58ecb673c4, // -0.067444, -0.99772 - 0xbfb0dfb28ea201e6, 0xbfefee2f6de455ba, // -0.065913, -0.99783 - 0xbfb07b614e463064, 0xbfefef0102826191, // -0.064383, -0.99793 - 0xbfb0170d833bf421, 0xbfefefcdaa704562, // -0.062852, -0.99802 - 0xbfaf656e79f820e0, 0xbfeff095658e71ad, // -0.061321, -0.99812 - 0xbfae9cbd15ff5527, 0xbfeff15833be1965, // -0.05979, -0.99821 - 0xbfadd406f9808ec8, 0xbfeff21614e131ed, // -0.058258, -0.9983 - 0xbfad0b4c436f91d0, 0xbfeff2cf08da7321, // -0.056727, -0.99839 - 0xbfac428d12c0d7e3, 0xbfeff3830f8d575c, // -0.055195, -0.99848 - 0xbfab79c986698b78, 0xbfeff43228de1b77, // -0.053664, -0.99856 - 0xbfaab101bd5f8317, 0xbfeff4dc54b1bed3, // -0.052132, -0.99864 - 0xbfa9e835d6993c87, 0xbfeff58192ee0358, // -0.0506, -0.99872 - 0xbfa91f65f10dd814, 0xbfeff621e3796d7e, // -0.049068, -0.9988 - 0xbfa856922bb513c1, 0xbfeff6bd463b444d, // -0.047535, -0.99887 - 0xbfa78dbaa5874685, 0xbfeff753bb1b9164, // -0.046003, -0.99894 - 0xbfa6c4df7d7d5b84, 0xbfeff7e5420320f9, // -0.044471, -0.99901 - 0xbfa5fc00d290cd43, 0xbfeff871dadb81df, // -0.042938, -0.99908 - 0xbfa5331ec3bba0eb, 0xbfeff8f9858f058b, // -0.041406, -0.99914 - 0xbfa46a396ff86179, 0xbfeff97c4208c014, // -0.039873, -0.9992 - 0xbfa3a150f6421afc, 0xbfeff9fa10348837, // -0.03834, -0.99926 - 0xbfa2d865759455cd, 0xbfeffa72effef75d, // -0.036807, -0.99932 - 0xbfa20f770ceb11c6, 0xbfeffae6e1556998, // -0.035274, -0.99938 - 0xbfa14685db42c17e, 0xbfeffb55e425fdae, // -0.033741, -0.99943 - 0xbfa07d91ff984580, 0xbfeffbbff85f9515, // -0.032208, -0.99948 - 0xbf9f693731d1cf01, 0xbfeffc251df1d3f8, // -0.030675, -0.99953 - 0xbf9dd7458c64ab39, 0xbfeffc8554cd213a, // -0.029142, -0.99958 - 0xbf9c454f4ce53b1c, 0xbfeffce09ce2a679, // -0.027608, -0.99962 - 0xbf9ab354b1504fca, 0xbfeffd36f624500c, // -0.026075, -0.99966 - 0xbf992155f7a3667e, 0xbfeffd886084cd0d, // -0.024541, -0.9997 - 0xbf978f535ddc9f03, 0xbfeffdd4dbf78f52, // -0.023008, -0.99974 - 0xbf95fd4d21fab226, 0xbfeffe1c6870cb77, // -0.021474, -0.99977 - 0xbf946b4381fce81c, 0xbfeffe5f05e578db, // -0.01994, -0.9998 - 0xbf92d936bbe30efd, 0xbfeffe9cb44b51a1, // -0.018407, -0.99983 - 0xbf9147270dad7132, 0xbfeffed57398d2b7, // -0.016873, -0.99986 - 0xbf8f6a296ab997ca, 0xbfefff0943c53bd1, // -0.015339, -0.99988 - 0xbf8c45ffe1e48ad9, 0xbfefff3824c88f6f, // -0.013805, -0.9999 - 0xbf8921d1fcdec784, 0xbfefff62169b92db, // -0.012272, -0.99992 - 0xbf85fda037ac05e0, 0xbfefff871937ce2f, // -0.010738, -0.99994 - 0xbf82d96b0e509703, 0xbfefffa72c978c4f, //-0.0092038, -0.99996 - 0xbf7f6a65f9a2a3c5, 0xbfefffc250b5daef, //-0.0076698, -0.99997 - 0xbf7921f0fe670071, 0xbfefffd8858e8a92, //-0.0061359, -0.99998 - 0xbf72d97822f996bc, 0xbfefffe9cb1e2e8d, //-0.0046019, -0.99999 - 0xbf6921f8becca4ba, 0xbfeffff621621d02, // -0.003068, -1 - 0xbf5921faaee6472d, 0xbfeffffd88586ee6, // -0.001534, -1 - 0x0000000000000000, 0xbff0000000000000, // 0, -1 - 0x3f5921faaee6472d, 0xbfeffffd88586ee6, // 0.001534, -1 - 0x3f6921f8becca4ba, 0xbfeffff621621d02, // 0.003068, -1 - 0x3f72d97822f996bc, 0xbfefffe9cb1e2e8d, // 0.0046019, -0.99999 - 0x3f7921f0fe670071, 0xbfefffd8858e8a92, // 0.0061359, -0.99998 - 0x3f7f6a65f9a2a3c5, 0xbfefffc250b5daef, // 0.0076698, -0.99997 - 0x3f82d96b0e509703, 0xbfefffa72c978c4f, // 0.0092038, -0.99996 - 0x3f85fda037ac05e0, 0xbfefff871937ce2f, // 0.010738, -0.99994 - 0x3f8921d1fcdec784, 0xbfefff62169b92db, // 0.012272, -0.99992 - 0x3f8c45ffe1e48ad9, 0xbfefff3824c88f6f, // 0.013805, -0.9999 - 0x3f8f6a296ab997ca, 0xbfefff0943c53bd1, // 0.015339, -0.99988 - 0x3f9147270dad7132, 0xbfeffed57398d2b7, // 0.016873, -0.99986 - 0x3f92d936bbe30efd, 0xbfeffe9cb44b51a1, // 0.018407, -0.99983 - 0x3f946b4381fce81c, 0xbfeffe5f05e578db, // 0.01994, -0.9998 - 0x3f95fd4d21fab226, 0xbfeffe1c6870cb77, // 0.021474, -0.99977 - 0x3f978f535ddc9f03, 0xbfeffdd4dbf78f52, // 0.023008, -0.99974 - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, // 0.024541, -0.9997 - 0x3f9ab354b1504fca, 0xbfeffd36f624500c, // 0.026075, -0.99966 - 0x3f9c454f4ce53b1c, 0xbfeffce09ce2a679, // 0.027608, -0.99962 - 0x3f9dd7458c64ab39, 0xbfeffc8554cd213a, // 0.029142, -0.99958 - 0x3f9f693731d1cf01, 0xbfeffc251df1d3f8, // 0.030675, -0.99953 - 0x3fa07d91ff984580, 0xbfeffbbff85f9515, // 0.032208, -0.99948 - 0x3fa14685db42c17e, 0xbfeffb55e425fdae, // 0.033741, -0.99943 - 0x3fa20f770ceb11c6, 0xbfeffae6e1556998, // 0.035274, -0.99938 - 0x3fa2d865759455cd, 0xbfeffa72effef75d, // 0.036807, -0.99932 - 0x3fa3a150f6421afc, 0xbfeff9fa10348837, // 0.03834, -0.99926 - 0x3fa46a396ff86179, 0xbfeff97c4208c014, // 0.039873, -0.9992 - 0x3fa5331ec3bba0eb, 0xbfeff8f9858f058b, // 0.041406, -0.99914 - 0x3fa5fc00d290cd43, 0xbfeff871dadb81df, // 0.042938, -0.99908 - 0x3fa6c4df7d7d5b84, 0xbfeff7e5420320f9, // 0.044471, -0.99901 - 0x3fa78dbaa5874685, 0xbfeff753bb1b9164, // 0.046003, -0.99894 - 0x3fa856922bb513c1, 0xbfeff6bd463b444d, // 0.047535, -0.99887 - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, // 0.049068, -0.9988 - 0x3fa9e835d6993c87, 0xbfeff58192ee0358, // 0.0506, -0.99872 - 0x3faab101bd5f8317, 0xbfeff4dc54b1bed3, // 0.052132, -0.99864 - 0x3fab79c986698b78, 0xbfeff43228de1b77, // 0.053664, -0.99856 - 0x3fac428d12c0d7e3, 0xbfeff3830f8d575c, // 0.055195, -0.99848 - 0x3fad0b4c436f91d0, 0xbfeff2cf08da7321, // 0.056727, -0.99839 - 0x3fadd406f9808ec8, 0xbfeff21614e131ed, // 0.058258, -0.9983 - 0x3fae9cbd15ff5527, 0xbfeff15833be1965, // 0.05979, -0.99821 - 0x3faf656e79f820e0, 0xbfeff095658e71ad, // 0.061321, -0.99812 - 0x3fb0170d833bf421, 0xbfefefcdaa704562, // 0.062852, -0.99802 - 0x3fb07b614e463064, 0xbfefef0102826191, // 0.064383, -0.99793 - 0x3fb0dfb28ea201e6, 0xbfefee2f6de455ba, // 0.065913, -0.99783 - 0x3fb1440134d709b2, 0xbfefed58ecb673c4, // 0.067444, -0.99772 - 0x3fb1a84d316d4f8a, 0xbfefec7d7f19cffc, // 0.068974, -0.99762 - 0x3fb20c9674ed444c, 0xbfefeb9d2530410f, // 0.070505, -0.99751 - 0x3fb270dcefdfc45b, 0xbfefeab7df1c6005, // 0.072035, -0.9974 - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, // 0.073565, -0.99729 - 0x3fb339614e41ffa5, 0xbfefe8de8f03d75c, // 0.075094, -0.99718 - 0x3fb39d9f12c5a299, 0xbfefe7ea85482d60, // 0.076624, -0.99706 - 0x3fb401d9d0e3a507, 0xbfefe6f18ff42c84, // 0.078153, -0.99694 - 0x3fb4661179272096, 0xbfefe5f3af2e3940, // 0.079682, -0.99682 - 0x3fb4ca45fc1ba8b6, 0xbfefe4f0e31d7a4a, // 0.081211, -0.9967 - 0x3fb52e774a4d4d0a, 0xbfefe3e92be9d886, // 0.08274, -0.99657 - 0x3fb592a554489bc8, 0xbfefe2dc89bbff08, // 0.084269, -0.99644 - 0x3fb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // 0.085797, -0.99631 - 0x3fb65af75dd0f87b, 0xbfefe0b485181be3, // 0.087326, -0.99618 - 0x3fb6bf1b3e79b129, 0xbfefdf9922f73307, // 0.088854, -0.99604 - 0x3fb7233b9d236e71, 0xbfefde78d68653fd, // 0.090381, -0.99591 - 0x3fb787586a5d5b21, 0xbfefdd539ff1f456, // 0.091909, -0.99577 - 0x3fb7eb7196b72ee4, 0xbfefdc297f674ba9, // 0.093436, -0.99563 - 0x3fb84f8712c130a0, 0xbfefdafa7514538c, // 0.094963, -0.99548 - 0x3fb8b398cf0c38e0, 0xbfefd9c68127c78c, // 0.09649, -0.99533 - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518 - 0x3fb97bb0caaba56f, 0xbfefd74fdd40abbf, // 0.099544, -0.99503 - 0x3fb9dfb6eb24a85c, 0xbfefd60d2da75c9e, // 0.10107, -0.99488 - 0x3fba43b90e27f3c4, 0xbfefd4c59536fae4, // 0.1026, -0.99472 - 0x3fbaa7b724495c04, 0xbfefd37914220b84, // 0.10412, -0.99456 - 0x3fbb0bb11e1d5559, 0xbfefd227aa9bd53b, // 0.10565, -0.9944 - 0x3fbb6fa6ec38f64c, 0xbfefd0d158d86087, // 0.10717, -0.99424 - 0x3fbbd3987f31fa0e, 0xbfefcf761f0c77a3, // 0.1087, -0.99407 - 0x3fbc3785c79ec2d5, 0xbfefce15fd6da67b, // 0.11022, -0.99391 - 0x3fbc9b6eb6165c42, 0xbfefccb0f4323aa3, // 0.11175, -0.99374 - 0x3fbcff533b307dc1, 0xbfefcb4703914354, // 0.11327, -0.99356 - 0x3fbd633347858ce4, 0xbfefc9d82bc2915e, // 0.11479, -0.99339 - 0x3fbdc70ecbae9fc8, 0xbfefc8646cfeb721, // 0.11632, -0.99321 - 0x3fbe2ae5b8457f77, 0xbfefc6ebc77f0887, // 0.11784, -0.99303 - 0x3fbe8eb7fde4aa3e, 0xbfefc56e3b7d9af6, // 0.11937, -0.99285 - 0x3fbef2858d27561b, 0xbfefc3ebc935454c, // 0.12089, -0.99267 - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248 - 0x3fbfba124b07ad85, 0xbfefc0d832bf043a, // 0.12393, -0.99229 - 0x3fc00ee8ad6fb85b, 0xbfefbf470f0a8d88, // 0.12545, -0.9921 - 0x3fc040c5bb67747e, 0xbfefbdb106021816, // 0.12698, -0.99191 - 0x3fc072a047ba831d, 0xbfefbc1617e44186, // 0.1285, -0.99171 - 0x3fc0a4784ab8bf1d, 0xbfefba7644f068b5, // 0.13002, -0.99151 - 0x3fc0d64dbcb26786, 0xbfefb8d18d66adb7, // 0.13154, -0.99131 - 0x3fc1082095f820b0, 0xbfefb727f187f1c7, // 0.13306, -0.99111 - 0x3fc139f0cedaf576, 0xbfefb5797195d741, // 0.13458, -0.9909 - 0x3fc16bbe5fac5865, 0xbfefb3c60dd2c199, // 0.1361, -0.9907 - 0x3fc19d8940be24e7, 0xbfefb20dc681d54d, // 0.13762, -0.99049 - 0x3fc1cf516a62a077, 0xbfefb0509be6f7db, // 0.13914, -0.99027 - 0x3fc20116d4ec7bce, 0xbfefae8e8e46cfbb, // 0.14066, -0.99006 - 0x3fc232d978aed413, 0xbfefacc79de6c44f, // 0.14218, -0.98984 - 0x3fc264994dfd340a, 0xbfefaafbcb0cfddc, // 0.1437, -0.98962 - 0x3fc296564d2b953e, 0xbfefa92b1600657c, // 0.14521, -0.9894 - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918 - 0x3fc2f9c7aa7a72af, 0xbfefa57b066e2754, // 0.14825, -0.98895 - 0x3fc32b7bf94516a7, 0xbfefa39bac7a1791, // 0.14976, -0.98872 - 0x3fc35d2d53440db2, 0xbfefa1b7717661d5, // 0.15128, -0.98849 - 0x3fc38edbb0cd8d14, 0xbfef9fce55adb2c8, // 0.1528, -0.98826 - 0x3fc3c0870a383ff6, 0xbfef9de0596b77a3, // 0.15431, -0.98802 - 0x3fc3f22f57db4893, 0xbfef9bed7cfbde29, // 0.15583, -0.98778 - 0x3fc423d4920e4166, 0xbfef99f5c0abd496, // 0.15734, -0.98754 - 0x3fc45576b1293e5a, 0xbfef97f924c9099b, // 0.15886, -0.9873 - 0x3fc48715ad84cdf5, 0xbfef95f7a9a1ec47, // 0.16037, -0.98706 - 0x3fc4b8b17f79fa88, 0xbfef93f14f85ac08, // 0.16189, -0.98681 - 0x3fc4ea4a1f624b61, 0xbfef91e616c43891, // 0.1634, -0.98656 - 0x3fc51bdf8597c5f2, 0xbfef8fd5ffae41db, // 0.16491, -0.98631 - 0x3fc54d71aa74ef02, 0xbfef8dc10a95380d, // 0.16643, -0.98605 - 0x3fc57f008654cbde, 0xbfef8ba737cb4b78, // 0.16794, -0.9858 - 0x3fc5b08c1192e381, 0xbfef898887a36c84, // 0.16945, -0.98554 - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528 - 0x3fc61399179a6e94, 0xbfef853c9089595e, // 0.17247, -0.98501 - 0x3fc6451a831d830d, 0xbfef830f4a40c60c, // 0.17398, -0.98475 - 0x3fc676987f7216b8, 0xbfef80dd27ed8204, // 0.17549, -0.98448 - 0x3fc6a81304f64ab2, 0xbfef7ea629e63d6e, // 0.177, -0.98421 - 0x3fc6d98a0c08c8da, 0xbfef7c6a50826840, // 0.17851, -0.98394 - 0x3fc70afd8d08c4ff, 0xbfef7a299c1a322a, // 0.18002, -0.98366 - 0x3fc73c6d8055fe0a, 0xbfef77e40d068a90, // 0.18153, -0.98339 - 0x3fc76dd9de50bf31, 0xbfef7599a3a12077, // 0.18304, -0.98311 - 0x3fc79f429f59e11d, 0xbfef734a60446279, // 0.18455, -0.98282 - 0x3fc7d0a7bbd2cb1b, 0xbfef70f6434b7eb7, // 0.18606, -0.98254 - 0x3fc802092c1d744b, 0xbfef6e9d4d1262ca, // 0.18756, -0.98225 - 0x3fc83366e89c64c5, 0xbfef6c3f7df5bbb7, // 0.18907, -0.98196 - 0x3fc864c0e9b2b6cf, 0xbfef69dcd652f5de, // 0.19057, -0.98167 - 0x3fc8961727c41804, 0xbfef677556883cee, // 0.19208, -0.98138 - 0x3fc8c7699b34ca7e, 0xbfef6508fef47bd5, // 0.19359, -0.98108 - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079 - 0x3fc92a0303c8194f, 0xbfef6021c9f148c2, // 0.19659, -0.98048 - 0x3fc95b49e9b62af9, 0xbfef5da6ed43685d, // 0.1981, -0.98018 - 0x3fc98c8ce69a7aec, 0xbfef5b273a4fa2d9, // 0.1996, -0.97988 - 0x3fc9bdcbf2dc4366, 0xbfef58a2b1789e84, // 0.2011, -0.97957 - 0x3fc9ef0706e35a35, 0xbfef56195321c090, // 0.20261, -0.97926 - 0x3fca203e1b1831da, 0xbfef538b1faf2d07, // 0.20411, -0.97895 - 0x3fca517127e3dabc, 0xbfef50f81785c6b9, // 0.20561, -0.97863 - 0x3fca82a025b00451, 0xbfef4e603b0b2f2d, // 0.20711, -0.97832 - 0x3fcab3cb0ce6fe44, 0xbfef4bc38aa5c694, // 0.20861, -0.978 - 0x3fcae4f1d5f3b9ab, 0xbfef492206bcabb4, // 0.21011, -0.97768 - 0x3fcb16147941ca2a, 0xbfef467bafb7bbe0, // 0.21161, -0.97735 - 0x3fcb4732ef3d6722, 0xbfef43d085ff92dd, // 0.21311, -0.97703 - 0x3fcb784d30536cda, 0xbfef412089fd8adc, // 0.21461, -0.9767 - 0x3fcba96334f15dad, 0xbfef3e6bbc1bbc65, // 0.21611, -0.97637 - 0x3fcbda74f5856330, 0xbfef3bb21cc4fe47, // 0.2176, -0.97604 - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757 - 0x3fcc3c8b8c4b9dd7, 0xbfef36306b67c556, // 0.2206, -0.97536 - 0x3fcc6d90535d74dc, 0xbfef33685a3aaef0, // 0.22209, -0.97503 - 0x3fcc9e90b824a6a9, 0xbfef309b794b719f, // 0.22359, -0.97468 - 0x3fcccf8cb312b286, 0xbfef2dc9c9089a9d, // 0.22508, -0.97434 - 0x3fcd00843c99c5f9, 0xbfef2af349e17507, // 0.22658, -0.97399 - 0x3fcd31774d2cbdee, 0xbfef2817fc4609ce, // 0.22807, -0.97364 - 0x3fcd6265dd3f27e3, 0xbfef2537e0a71f9f, // 0.22957, -0.97329 - 0x3fcd934fe5454311, 0xbfef2252f7763ada, // 0.23106, -0.97294 - 0x3fcdc4355db40195, 0xbfef1f6941259d7a, // 0.23255, -0.97258 - 0x3fcdf5163f01099a, 0xbfef1c7abe284708, // 0.23404, -0.97223 - 0x3fce25f281a2b684, 0xbfef19876ef1f486, // 0.23553, -0.97187 - 0x3fce56ca1e101a1b, 0xbfef168f53f7205d, // 0.23702, -0.9715 - 0x3fce879d0cc0fdaf, 0xbfef13926dad024e, // 0.23851, -0.97114 - 0x3fceb86b462de348, 0xbfef1090bc898f5f, // 0.24, -0.97077 - 0x3fcee934c2d006c7, 0xbfef0d8a410379c5, // 0.24149, -0.9704 - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003 - 0x3fcf4ab9679c9f5c, 0xbfef076eecade0fa, // 0.24447, -0.96966 - 0x3fcf7b7480bd3801, 0xbfef045a14cf738c, // 0.24596, -0.96928 - 0x3fcfac2abeff57ff, 0xbfef014074708ed3, // 0.24744, -0.9689 - 0x3fcfdcdc1adfedf8, 0xbfeefe220c0b95ec, // 0.24893, -0.96852 - 0x3fd006c4466e54af, 0xbfeefafedc1ba8b7, // 0.25041, -0.96814 - 0x3fd01f1806b9fdd2, 0xbfeef7d6e51ca3c0, // 0.2519, -0.96775 - 0x3fd037694a928cac, 0xbfeef4aa278b2032, // 0.25338, -0.96737 - 0x3fd04fb80e37fdae, 0xbfeef178a3e473c2, // 0.25487, -0.96698 - 0x3fd068044deab002, 0xbfeeee425aa6b09a, // 0.25635, -0.96658 - 0x3fd0804e05eb661e, 0xbfeeeb074c50a544, // 0.25783, -0.96619 - 0x3fd09895327b465e, 0xbfeee7c77961dc9e, // 0.25931, -0.96579 - 0x3fd0b0d9cfdbdb90, 0xbfeee482e25a9dbc, // 0.26079, -0.96539 - 0x3fd0c91bda4f158d, 0xbfeee13987bbebdc, // 0.26227, -0.96499 - 0x3fd0e15b4e1749cd, 0xbfeeddeb6a078651, // 0.26375, -0.96459 - 0x3fd0f998277733f7, 0xbfeeda9889bfe86a, // 0.26523, -0.96418 - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378 - 0x3fd12a09fc0b1b12, 0xbfeed3e483849c51, // 0.26819, -0.96337 - 0x3fd1423eefc69378, 0xbfeed0835e999009, // 0.26967, -0.96295 - 0x3fd15a713a28b9d9, 0xbfeecd1d792c8f10, // 0.27115, -0.96254 - 0x3fd172a0d7765177, 0xbfeec9b2d3c3bf84, // 0.27262, -0.96212 - 0x3fd18acdc3f4873a, 0xbfeec6436ee60309, // 0.2741, -0.9617 - 0x3fd1a2f7fbe8f243, 0xbfeec2cf4b1af6b2, // 0.27557, -0.96128 - 0x3fd1bb1f7b999480, 0xbfeebf5668eaf2ef, // 0.27705, -0.96086 - 0x3fd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // 0.27852, -0.96043 - 0x3fd1eb6643499fbb, 0xbfeeb8566b810f2a, // 0.27999, -0.96 - 0x3fd2038583d727bd, 0xbfeeb4cf515b8811, // 0.28146, -0.95957 - 0x3fd21ba1fd3d2623, 0xbfeeb1437af9bb34, // 0.28294, -0.95914 - 0x3fd233bbabc3bb72, 0xbfeeadb2e8e7a88e, // 0.28441, -0.9587 - 0x3fd24bd28bb37672, 0xbfeeaa1d9bb20af3, // 0.28588, -0.95827 - 0x3fd263e6995554ba, 0xbfeea68393e65800, // 0.28735, -0.95783 - 0x3fd27bf7d0f2c346, 0xbfeea2e4d212c000, // 0.28882, -0.95738 - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694 - 0x3fd2ac11af483572, 0xbfee9b99229046f8, // 0.29175, -0.95649 - 0x3fd2c41a4e954520, 0xbfee97ec36016b30, // 0.29322, -0.95605 - 0x3fd2dc200907fe51, 0xbfee943a91aab4b4, // 0.29469, -0.95559 - 0x3fd2f422daec0386, 0xbfee9084361df7f3, // 0.29615, -0.95514 - 0x3fd30c22c08d6a13, 0xbfee8cc923edc388, // 0.29762, -0.95469 - 0x3fd3241fb638baaf, 0xbfee89095bad6025, // 0.29908, -0.95423 - 0x3fd33c19b83af207, 0xbfee8544ddf0d075, // 0.30054, -0.95377 - 0x3fd35410c2e18152, 0xbfee817bab4cd10d, // 0.30201, -0.95331 - 0x3fd36c04d27a4edf, 0xbfee7dadc456d850, // 0.30347, -0.95284 - 0x3fd383f5e353b6aa, 0xbfee79db29a5165a, // 0.30493, -0.95238 - 0x3fd39be3f1bc8aef, 0xbfee7603dbce74e9, // 0.30639, -0.95191 - 0x3fd3b3cefa0414b7, 0xbfee7227db6a9744, // 0.30785, -0.95144 - 0x3fd3cbb6f87a146e, 0xbfee6e472911da27, // 0.30931, -0.95096 - 0x3fd3e39be96ec271, 0xbfee6a61c55d53a7, // 0.31077, -0.95049 - 0x3fd3fb7dc932cfa4, 0xbfee6677b0e6d31e, // 0.31222, -0.95001 - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953 - 0x3fd42b38466e2928, 0xbfee5e95781ebf1c, // 0.31514, -0.94905 - 0x3fd44310dc8936f0, 0xbfee5a9d550467d3, // 0.31659, -0.94856 - 0x3fd45ae652bb2800, 0xbfee56a083968eb1, // 0.31805, -0.94807 - 0x3fd472b8a5571054, 0xbfee529f04729ffc, // 0.3195, -0.94759 - 0x3fd48a87d0b07fd7, 0xbfee4e98d836c0af, // 0.32096, -0.94709 - 0x3fd4a253d11b82f3, 0xbfee4a8dff81ce5e, // 0.32241, -0.9466 - 0x3fd4ba1ca2eca31c, 0xbfee467e7af35f23, // 0.32386, -0.94611 - 0x3fd4d1e24278e76a, 0xbfee426a4b2bc17e, // 0.32531, -0.94561 - 0x3fd4e9a4ac15d520, 0xbfee3e5170cbfc46, // 0.32676, -0.94511 - 0x3fd50163dc197047, 0xbfee3a33ec75ce85, // 0.32821, -0.9446 - 0x3fd5191fceda3c35, 0xbfee3611becbaf69, // 0.32966, -0.9441 - 0x3fd530d880af3c24, 0xbfee31eae870ce25, // 0.33111, -0.94359 - 0x3fd5488dedeff3be, 0xbfee2dbf6a0911d9, // 0.33255, -0.94308 - 0x3fd5604012f467b4, 0xbfee298f4439197a, // 0.334, -0.94257 - 0x3fd577eeec151e47, 0xbfee255a77a63bb8, // 0.33545, -0.94206 - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154 - 0x3fd5a742ac0ff78d, 0xbfee1ce2ecd0c0d8, // 0.33833, -0.94103 - 0x3fd5bee78b9db3b6, 0xbfee18a02fdc66d9, // 0.33978, -0.94051 - 0x3fd5d68910aee686, 0xbfee1458cec1ad83, // 0.34122, -0.93998 - 0x3fd5ee27379ea693, 0xbfee100cca2980ac, // 0.34266, -0.93946 - 0x3fd605c1fcc88f63, 0xbfee0bbc22bd8349, // 0.3441, -0.93893 - 0x3fd61d595c88c203, 0xbfee0766d9280f54, // 0.34554, -0.9384 - 0x3fd634ed533be58e, 0xbfee030cee1435b8, // 0.34698, -0.93787 - 0x3fd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // 0.34842, -0.93734 - 0x3fd6640af6f03d9e, 0xbfedfa4b3621271d, // 0.34986, -0.9368 - 0x3fd67b949cad63ca, 0xbfedf5e36a9ba59c, // 0.35129, -0.93627 - 0x3fd6931acad55f51, 0xbfedf177004b2534, // 0.35273, -0.93573 - 0x3fd6aa9d7dc77e16, 0xbfeded05f7de47da, // 0.35416, -0.93518 - 0x3fd6c21cb1e39771, 0xbfede890520465ce, // 0.3556, -0.93464 - 0x3fd6d998638a0cb5, 0xbfede4160f6d8d81, // 0.35703, -0.93409 - 0x3fd6f1108f1bc9c5, 0xbfeddf9730ca837b, // 0.35846, -0.93354 - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299 - 0x3fd71ff6458782ec, 0xbfedd68ba2267a25, // 0.36133, -0.93244 - 0x3fd73763c9261092, 0xbfedd1fef38a915a, // 0.36276, -0.93188 - 0x3fd74ecdb8390a3e, 0xbfedcd6dabaca3a5, // 0.36418, -0.93133 - 0x3fd766340f2418f6, 0xbfedc8d7cb410260, // 0.36561, -0.93077 - 0x3fd77d96ca4b73a6, 0xbfedc43d52fcb453, // 0.36704, -0.93021 - 0x3fd794f5e613dfae, 0xbfedbf9e4395759a, // 0.36847, -0.92964 - 0x3fd7ac515ee2b172, 0xbfedbafa9dc1b78d, // 0.36989, -0.92907 - 0x3fd7c3a9311dcce7, 0xbfedb6526238a09b, // 0.37132, -0.92851 - 0x3fd7dafd592ba621, 0xbfedb1a591b20c38, // 0.37274, -0.92794 - 0x3fd7f24dd37341e3, 0xbfedacf42ce68ab9, // 0.37416, -0.92736 - 0x3fd8099a9c5c362d, 0xbfeda83e348f613b, // 0.37559, -0.92679 - 0x3fd820e3b04eaac4, 0xbfeda383a9668988, // 0.37701, -0.92621 - 0x3fd838290bb359c8, 0xbfed9ec48c26b1f3, // 0.37843, -0.92563 - 0x3fd84f6aaaf3903f, 0xbfed9a00dd8b3d46, // 0.37985, -0.92505 - 0x3fd866a88a792ea0, 0xbfed95389e50429b, // 0.38127, -0.92447 - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388 - 0x3fd89518fbff098e, 0xbfed8b9a70ef9cb4, // 0.3841, -0.92329 - 0x3fd8ac4b86d5ed44, 0xbfed86c48445a450, // 0.38552, -0.9227 - 0x3fd8c37a439f884f, 0xbfed81ea09f38b63, // 0.38693, -0.92211 - 0x3fd8daa52ec8a4af, 0xbfed7d0b02b8ecf9, // 0.38835, -0.92151 - 0x3fd8f1cc44bea329, 0xbfed78276f5617c6, // 0.38976, -0.92092 - 0x3fd908ef81ef7bd1, 0xbfed733f508c0dff, // 0.39117, -0.92032 - 0x3fd9200ee2c9be97, 0xbfed6e52a71c8547, // 0.39258, -0.91972 - 0x3fd9372a63bc93d7, 0xbfed696173c9e68b, // 0.39399, -0.91911 - 0x3fd94e420137bce3, 0xbfed646bb7574de5, // 0.3954, -0.91851 - 0x3fd96555b7ab948f, 0xbfed5f7172888a7f, // 0.39681, -0.9179 - 0x3fd97c6583890fc2, 0xbfed5a72a6221e73, // 0.39822, -0.91729 - 0x3fd993716141bdfe, 0xbfed556f52e93eb1, // 0.39962, -0.91668 - 0x3fd9aa794d47c9ee, 0xbfed506779a3d2d9, // 0.40103, -0.91606 - 0x3fd9c17d440df9f2, 0xbfed4b5b1b187524, // 0.40243, -0.91545 - 0x3fd9d87d4207b0ab, 0xbfed464a380e7242, // 0.40384, -0.91483 - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421 - 0x3fda067145664d57, 0xbfed3c1ae79f2b4e, // 0.40664, -0.91359 - 0x3fda1d6543b50ac0, 0xbfed36fc7bcbfbdc, // 0.40804, -0.91296 - 0x3fda34553b0afee5, 0xbfed31d98e9e503a, // 0.40944, -0.91234 - 0x3fda4b4127dea1e4, 0xbfed2cb220e0ef9f, // 0.41084, -0.91171 - 0x3fda622906a70b63, 0xbfed2786335f52fc, // 0.41224, -0.91107 - 0x3fda790cd3dbf31a, 0xbfed2255c6e5a4e1, // 0.41364, -0.91044 - 0x3fda8fec8bf5b166, 0xbfed1d20dc40c15c, // 0.41503, -0.90981 - 0x3fdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // 0.41643, -0.90917 - 0x3fdabd9faebc3980, 0xbfed12a98fac410c, // 0.41782, -0.90853 - 0x3fdad473125cdc08, 0xbfed0d672f59d2b9, // 0.41922, -0.90789 - 0x3fdaeb4252ca07ab, 0xbfed082054168bac, // 0.42061, -0.90724 - 0x3fdb020d6c7f4009, 0xbfed02d4feb2bd92, // 0.422, -0.9066 - 0x3fdb18d45bf8aca6, 0xbfecfd852fff6ad4, // 0.42339, -0.90595 - 0x3fdb2f971db31972, 0xbfecf830e8ce467b, // 0.42478, -0.9053 - 0x3fdb4655ae2bf757, 0xbfecf2d829f1b40e, // 0.42617, -0.90464 - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399 - 0x3fdb73c62d520624, 0xbfece819488344ce, // 0.42894, -0.90333 - 0x3fdb8a7814fd5693, 0xbfece2b32799a060, // 0.43033, -0.90267 - 0x3fdba125bd63583e, 0xbfecdd489254fe65, // 0.43171, -0.90201 - 0x3fdbb7cf2304bd01, 0xbfecd7d9898b32f6, // 0.43309, -0.90135 - 0x3fdbce744262deee, 0xbfecd2660e12c1e6, // 0.43448, -0.90068 - 0x3fdbe51517ffc0d9, 0xbfecccee20c2de9f, // 0.43586, -0.90002 - 0x3fdbfbb1a05e0edc, 0xbfecc771c2736c09, // 0.43724, -0.89935 - 0x3fdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // 0.43862, -0.89867 - 0x3fdc28ddbb6cf145, 0xbfecbc6bb638d10b, // 0.43999, -0.898 - 0x3fdc3f6d47263129, 0xbfecb6e20a00da99, // 0.44137, -0.89732 - 0x3fdc55f877b23537, 0xbfecb153f02fb87d, // 0.44275, -0.89665 - 0x3fdc6c7f4997000a, 0xbfecabc169a0b901, // 0.44412, -0.89597 - 0x3fdc8301b95b40c2, 0xbfeca62a772fd919, // 0.4455, -0.89528 - 0x3fdc997fc3865388, 0xbfeca08f19b9c449, // 0.44687, -0.8946 - 0x3fdcaff964a0421d, 0xbfec9aef521bd480, // 0.44824, -0.89391 - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322 - 0x3fdcdcdf5dc440ce, 0xbfec8fa287e13305, // 0.45098, -0.89253 - 0x3fdcf34baee1cd21, 0xbfec89f587029c13, // 0.45235, -0.89184 - 0x3fdd09b389152ec1, 0xbfec84441f785f61, // 0.45372, -0.89115 - 0x3fdd2016e8e9db5b, 0xbfec7e8e52233cf3, // 0.45508, -0.89045 - 0x3fdd3675caebf962, 0xbfec78d41fe4a267, // 0.45645, -0.88975 - 0x3fdd4cd02ba8609c, 0xbfec7315899eaad7, // 0.45781, -0.88905 - 0x3fdd632607ac9aa9, 0xbfec6d5290341eb2, // 0.45918, -0.88835 - 0x3fdd79775b86e389, 0xbfec678b3488739b, // 0.46054, -0.88764 - 0x3fdd8fc423c62a25, 0xbfec61bf777fcc48, // 0.4619, -0.88693 - 0x3fdda60c5cfa10d8, 0xbfec5bef59fef85a, // 0.46326, -0.88622 - 0x3fddbc5003b2edf8, 0xbfec561adceb743e, // 0.46462, -0.88551 - 0x3fddd28f1481cc58, 0xbfec5042012b6907, // 0.46598, -0.8848 - 0x3fdde8c98bf86bd6, 0xbfec4a64c7a5ac4c, // 0.46733, -0.88408 - 0x3fddfeff66a941de, 0xbfec44833141c004, // 0.46869, -0.88336 - 0x3fde1530a12779f4, 0xbfec3e9d3ee7d262, // 0.47004, -0.88264 - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192 - 0x3fde418527dc4ffa, 0xbfec32c449f60831, // 0.47275, -0.8812 - 0x3fde57a86d3cd824, 0xbfec2cd14931e3f1, // 0.4741, -0.88047 - 0x3fde6dc704be97e2, 0xbfec26d9f01f2eaf, // 0.47545, -0.87974 - 0x3fde83e0eaf85113, 0xbfec20de3fa971b0, // 0.4768, -0.87901 - 0x3fde99f61c817eda, 0xbfec1ade38bce19b, // 0.47815, -0.87828 - 0x3fdeb00695f25620, 0xbfec14d9dc465e58, // 0.47949, -0.87755 - 0x3fdec61253e3c61b, 0xbfec0ed12b3372e9, // 0.48084, -0.87681 - 0x3fdedc1952ef78d5, 0xbfec08c426725549, // 0.48218, -0.87607 - 0x3fdef21b8fafd3b5, 0xbfec02b2cef1e641, // 0.48353, -0.87533 - 0x3fdf081906bff7fd, 0xbfebfc9d25a1b147, // 0.48487, -0.87459 - 0x3fdf1e11b4bbc35c, 0xbfebf6832b71ec5b, // 0.48621, -0.87384 - 0x3fdf3405963fd068, 0xbfebf064e15377dd, // 0.48755, -0.87309 - 0x3fdf49f4a7e97729, 0xbfebea424837de6d, // 0.48889, -0.87235 - 0x3fdf5fdee656cda3, 0xbfebe41b611154c1, // 0.49023, -0.8716 - 0x3fdf75c44e26a852, 0xbfebddf02cd2b983, // 0.49156, -0.87084 - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009 - 0x3fdfa1808c6cf7e0, 0xbfebd18ce0dc19d6, // 0.49423, -0.86933 - 0x3fdfb7575c24d2de, 0xbfebcb54cb0d2327, // 0.49557, -0.86857 - 0x3fdfcd2947c1ff57, 0xbfebc5186bf8361d, // 0.4969, -0.86781 - 0x3fdfe2f64be7120f, 0xbfebbed7c49380ea, // 0.49823, -0.86705 - 0x3fdff8be6537615e, 0xbfebb892d5d5dad5, // 0.49956, -0.86628 - 0x3fe00740c82b82e0, 0xbfebb249a0b6c40d, // 0.50089, -0.86551 - 0x3fe0121fe4f56d2c, 0xbfebabfc262e6586, // 0.50221, -0.86474 - 0x3fe01cfc874c3eb7, 0xbfeba5aa673590d2, // 0.50354, -0.86397 - 0x3fe027d6ad83287e, 0xbfeb9f5464c5bffc, // 0.50486, -0.8632 - 0x3fe032ae55edbd95, 0xbfeb98fa1fd9155e, // 0.50619, -0.86242 - 0x3fe03d837edff370, 0xbfeb929b996a5b7f, // 0.50751, -0.86165 - 0x3fe0485626ae221a, 0xbfeb8c38d27504e9, // 0.50883, -0.86087 - 0x3fe053264bad0483, 0xbfeb85d1cbf52c02, // 0.51015, -0.86009 - 0x3fe05df3ec31b8b6, 0xbfeb7f6686e792ea, // 0.51147, -0.8593 - 0x3fe068bf0691c028, 0xbfeb78f70449a34b, // 0.51279, -0.85852 - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773 - 0x3fe07e4da23bc102, 0xbfeb6c0b4a55ac17, // 0.51542, -0.85694 - 0x3fe089112032b08c, 0xbfeb658f14fdbc47, // 0.51673, -0.85615 - 0x3fe093d2115ee018, 0xbfeb5f0ea611a532, // 0.51804, -0.85535 - 0x3fe09e907417c5e1, 0xbfeb5889fe921405, // 0.51936, -0.85456 - 0x3fe0a94c46b53d0b, 0xbfeb52011f805c92, // 0.52067, -0.85376 - 0x3fe0b405878f85ec, 0xbfeb4b7409de7925, // 0.52198, -0.85296 - 0x3fe0bebc34ff4646, 0xbfeb44e2beaf0a61, // 0.52328, -0.85216 - 0x3fe0c9704d5d898f, 0xbfeb3e4d3ef55712, // 0.52459, -0.85136 - 0x3fe0d421cf03c12b, 0xbfeb37b38bb54c09, // 0.5259, -0.85055 - 0x3fe0ded0b84bc4b5, 0xbfeb3115a5f37bf4, // 0.5272, -0.84974 - 0x3fe0e97d078fd23b, 0xbfeb2a738eb51f33, // 0.5285, -0.84893 - 0x3fe0f426bb2a8e7d, 0xbfeb23cd470013b4, // 0.5298, -0.84812 - 0x3fe0fecdd1770537, 0xbfeb1d22cfdadcc6, // 0.5311, -0.84731 - 0x3fe1097248d0a956, 0xbfeb16742a4ca2f5, // 0.5324, -0.84649 - 0x3fe114141f935545, 0xbfeb0fc1575d33db, // 0.5337, -0.84567 - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485 - 0x3fe1294fe4c5350a, 0xbfeb024f2d7d24a9, // 0.53629, -0.84403 - 0x3fe133e9cfee254e, 0xbfeafb8fd89f57b6, // 0.53759, -0.84321 - 0x3fe13e8113f396c1, 0xbfeaf4cc5a85fb73, // 0.53888, -0.84238 - 0x3fe14915af336ceb, 0xbfeaee04b43c1474, // 0.54017, -0.84155 - 0x3fe153a7a00bf453, 0xbfeae738e6cd4b67, // 0.54146, -0.84073 - 0x3fe15e36e4dbe2bc, 0xbfeae068f345ecef, // 0.54275, -0.83989 - 0x3fe168c37c025764, 0xbfead994dab2e979, // 0.54404, -0.83906 - 0x3fe1734d63dedb49, 0xbfead2bc9e21d511, // 0.54532, -0.83822 - 0x3fe17dd49ad16161, 0xbfeacbe03ea0e73b, // 0.54661, -0.83739 - 0x3fe188591f3a46e5, 0xbfeac4ffbd3efac8, // 0.54789, -0.83655 - 0x3fe192daef7a5386, 0xbfeabe1b1b0b8dac, // 0.54918, -0.83571 - 0x3fe19d5a09f2b9b8, 0xbfeab7325916c0d4, // 0.55046, -0.83486 - 0x3fe1a7d66d0516e6, 0xbfeab045787157ff, // 0.55174, -0.83402 - 0x3fe1b250171373be, 0xbfeaa9547a2cb98e, // 0.55302, -0.83317 - 0x3fe1bcc706804467, 0xbfeaa25f5f5aee60, // 0.55429, -0.83232 - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147 - 0x3fe1d1acaf012cc2, 0xbfea9468d85b20ae, // 0.55685, -0.83062 - 0x3fe1dc1b64dc4872, 0xbfea8d676e545ad2, // 0.55812, -0.82976 - 0x3fe1e68759a3e074, 0xbfea8661ec0ee133, // 0.55939, -0.8289 - 0x3fe1f0f08bbc861b, 0xbfea7f58529fe69d, // 0.56066, -0.82805 - 0x3fe1fb56f98b37b8, 0xbfea784aa31d3f55, // 0.56193, -0.82718 - 0x3fe205baa17560d6, 0xbfea7138de9d60f5, // 0.5632, -0.82632 - 0x3fe2101b81e0da78, 0xbfea6a230637623b, // 0.56447, -0.82546 - 0x3fe21a799933eb58, 0xbfea63091b02fae2, // 0.56573, -0.82459 - 0x3fe224d4e5d5482e, 0xbfea5beb1e188375, // 0.567, -0.82372 - 0x3fe22f2d662c13e1, 0xbfea54c91090f524, // 0.56826, -0.82285 - 0x3fe23983189fdfd5, 0xbfea4da2f385e997, // 0.56952, -0.82198 - 0x3fe243d5fb98ac1f, 0xbfea4678c8119ac8, // 0.57078, -0.8211 - 0x3fe24e260d7ee7c9, 0xbfea3f4a8f4ee2d2, // 0.57204, -0.82023 - 0x3fe258734cbb7110, 0xbfea38184a593bc6, // 0.5733, -0.81935 - 0x3fe262bdb7b795a2, 0xbfea30e1fa4cbf81, // 0.57455, -0.81847 - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758 - 0x3fe2774a0a961612, 0xbfea22693d62ccb9, // 0.57706, -0.8167 - 0x3fe2818bef4d3cba, 0xbfea1b26d2c0a75e, // 0.57831, -0.81581 - 0x3fe28bcaf96d94ba, 0xbfea13e0617e4ec7, // 0.57956, -0.81493 - 0x3fe2960727629ca8, 0xbfea0c95eabaf937, // 0.58081, -0.81404 - 0x3fe2a040779843fb, 0xbfea05476f967bb5, // 0.58206, -0.81314 - 0x3fe2aa76e87aeb58, 0xbfe9fdf4f13149de, // 0.58331, -0.81225 - 0x3fe2b4aa787764c4, 0xbfe9f69e70ac75bc, // 0.58455, -0.81135 - 0x3fe2bedb25faf3ea, 0xbfe9ef43ef29af94, // 0.5858, -0.81046 - 0x3fe2c908ef734e57, 0xbfe9e7e56dcb45bd, // 0.58704, -0.80956 - 0x3fe2d333d34e9bb7, 0xbfe9e082edb42472, // 0.58828, -0.80866 - 0x3fe2dd5bcffb7616, 0xbfe9d91c7007d5a6, // 0.58952, -0.80775 - 0x3fe2e780e3e8ea16, 0xbfe9d1b1f5ea80d6, // 0.59076, -0.80685 - 0x3fe2f1a30d86773a, 0xbfe9ca438080eadb, // 0.592, -0.80594 - 0x3fe2fbc24b441015, 0xbfe9c2d110f075c3, // 0.59323, -0.80503 - 0x3fe305de9b921a94, 0xbfe9bb5aa85f2098, // 0.59447, -0.80412 - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321 - 0x3fe31a0e6da35e44, 0xbfe9ac61f0d4e247, // 0.59693, -0.80229 - 0x3fe32421ec49a620, 0xbfe9a4dfa42b06b2, // 0.59816, -0.80138 - 0x3fe32e3277467d6b, 0xbfe99d59631e65d5, // 0.59939, -0.80046 - 0x3fe338400d0c8e57, 0xbfe995cf2ed80d22, // 0.60062, -0.79954 - 0x3fe3424aac0ef7d6, 0xbfe98e410881a600, // 0.60184, -0.79861 - 0x3fe34c5252c14de1, 0xbfe986aef1457594, // 0.60307, -0.79769 - 0x3fe35656ff9799ae, 0xbfe97f18ea4e5c9e, // 0.60429, -0.79676 - 0x3fe36058b10659f3, 0xbfe9777ef4c7d742, // 0.60551, -0.79584 - 0x3fe36a576582831b, 0xbfe96fe111ddfce0, // 0.60673, -0.79491 - 0x3fe374531b817f8d, 0xbfe9683f42bd7fe1, // 0.60795, -0.79398 - 0x3fe37e4bd1792fe2, 0xbfe960998893ad8c, // 0.60917, -0.79304 - 0x3fe3884185dfeb22, 0xbfe958efe48e6dd7, // 0.61038, -0.79211 - 0x3fe39234372c7f04, 0xbfe9514257dc4335, // 0.6116, -0.79117 - 0x3fe39c23e3d63029, 0xbfe94990e3ac4a6c, // 0.61281, -0.79023 - 0x3fe3a6108a54ba58, 0xbfe941db892e3a65, // 0.61402, -0.78929 - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835 - 0x3fe3b9e0beb19e18, 0xbfe932652609b1cf, // 0.61644, -0.7874 - 0x3fe3c3c44981c517, 0xbfe92aa41fc5a815, // 0.61765, -0.78646 - 0x3fe3cda4c80a6076, 0xbfe922df37f8646a, // 0.61885, -0.78551 - 0x3fe3d78238c58343, 0xbfe91b166fd49da2, // 0.62006, -0.78456 - 0x3fe3e15c9a2db922, 0xbfe91349c88da398, // 0.62126, -0.7836 - 0x3fe3eb33eabe0680, 0xbfe90b7943575efe, // 0.62246, -0.78265 - 0x3fe3f50828f1e8d2, 0xbfe903a4e1665133, // 0.62366, -0.78169 - 0x3fe3fed9534556d4, 0xbfe8fbcca3ef940d, // 0.62486, -0.78074 - 0x3fe408a76834c0c0, 0xbfe8f3f08c28d9ac, // 0.62606, -0.77978 - 0x3fe41272663d108c, 0xbfe8ec109b486c49, // 0.62725, -0.77882 - 0x3fe41c3a4bdbaa26, 0xbfe8e42cd2852e0a, // 0.62845, -0.77785 - 0x3fe425ff178e6bb1, 0xbfe8dc45331698cc, // 0.62964, -0.77689 - 0x3fe42fc0c7d3adbb, 0xbfe8d459be34bdfa, // 0.63083, -0.77592 - 0x3fe4397f5b2a4380, 0xbfe8cc6a75184655, // 0.63202, -0.77495 - 0x3fe4433ad0117b1d, 0xbfe8c47758fa71cb, // 0.63321, -0.77398 - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301 - 0x3fe456a858917046, 0xbfe8b485aca2a468, // 0.63558, -0.77204 - 0x3fe4605a692b32a2, 0xbfe8ac871ede1d88, // 0.63676, -0.77106 - 0x3fe46a095557a0f1, 0xbfe8a484c3031d50, // 0.63794, -0.77008 - 0x3fe473b51b987347, 0xbfe89c7e9a4dd4ab, // 0.63912, -0.7691 - 0x3fe47d5dba6fde01, 0xbfe89474a5fb0a84, // 0.6403, -0.76812 - 0x3fe48703306091fe, 0xbfe88c66e7481ba1, // 0.64148, -0.76714 - 0x3fe490a57bedbcdf, 0xbfe884555f72fa6b, // 0.64266, -0.76615 - 0x3fe49a449b9b0938, 0xbfe87c400fba2ebf, // 0.64383, -0.76517 - 0x3fe4a3e08dec9ed6, 0xbfe87426f95cd5bd, // 0.645, -0.76418 - 0x3fe4ad79516722f0, 0xbfe86c0a1d9aa195, // 0.64618, -0.76319 - 0x3fe4b70ee48fb869, 0xbfe863e97db3d95a, // 0.64735, -0.7622 - 0x3fe4c0a145ec0004, 0xbfe85bc51ae958cc, // 0.64851, -0.7612 - 0x3fe4ca30740218a3, 0xbfe8539cf67c9029, // 0.64968, -0.76021 - 0x3fe4d3bc6d589f80, 0xbfe84b7111af83f9, // 0.65085, -0.75921 - 0x3fe4dd453076b064, 0xbfe843416dc4cce2, // 0.65201, -0.75821 - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721 - 0x3fe4f04d0e2859aa, 0xbfe832d6eda3a3e0, // 0.65433, -0.75621 - 0x3fe4f9cc25cca486, 0xbfe82a9c13f545ff, // 0.65549, -0.7552 - 0x3fe503480159ded2, 0xbfe8225d803964e5, // 0.65665, -0.75419 - 0x3fe50cc09f59a09b, 0xbfe81a1b33b57acc, // 0.65781, -0.75319 - 0x3fe51635fe5601d7, 0xbfe811d52faf94dc, // 0.65896, -0.75218 - 0x3fe51fa81cd99aa6, 0xbfe8098b756e52fa, // 0.66011, -0.75117 - 0x3fe52916f96f8388, 0xbfe8013e0638e795, // 0.66127, -0.75015 - 0x3fe5328292a35596, 0xbfe7f8ece3571771, // 0.66242, -0.74914 - 0x3fe53beae7012abe, 0xbfe7f0980e113978, // 0.66356, -0.74812 - 0x3fe5454ff5159dfb, 0xbfe7e83f87b03686, // 0.66471, -0.7471 - 0x3fe54eb1bb6dcb8f, 0xbfe7dfe3517d8937, // 0.66586, -0.74608 - 0x3fe5581038975137, 0xbfe7d7836cc33db2, // 0.667, -0.74506 - 0x3fe5616b6b204e6e, 0xbfe7cf1fdacbf179, // 0.66814, -0.74403 - 0x3fe56ac35197649e, 0xbfe7c6b89ce2d333, // 0.66928, -0.74301 - 0x3fe57417ea8bb75c, 0xbfe7be4db453a27c, // 0.67042, -0.74198 - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095 - 0x3fe586b72e2b2cfd, 0xbfe7ad6ce874dbb6, // 0.67269, -0.73992 - 0x3fe59001d5f723df, 0xbfe7a4f707bf97d2, // 0.67383, -0.73889 - 0x3fe599492a81ffbc, 0xbfe79c7d8198e56e, // 0.67496, -0.73785 - 0x3fe5a28d2a5d7250, 0xbfe79400574f55e4, // 0.67609, -0.73682 - 0x3fe5abcdd41bb0d8, 0xbfe78b7f8a320a52, // 0.67722, -0.73578 - 0x3fe5b50b264f7448, 0xbfe782fb1b90b35b, // 0.67835, -0.73474 - 0x3fe5be451f8bf980, 0xbfe77a730cbb9100, // 0.67948, -0.7337 - 0x3fe5c77bbe65018c, 0xbfe771e75f037261, // 0.6806, -0.73265 - 0x3fe5d0af016ed1d4, 0xbfe7695813b9b594, // 0.68172, -0.73161 - 0x3fe5d9dee73e345c, 0xbfe760c52c304764, // 0.68285, -0.73056 - 0x3fe5e30b6e6877f3, 0xbfe7582ea9b9a329, // 0.68397, -0.72951 - 0x3fe5ec3495837074, 0xbfe74f948da8d28d, // 0.68508, -0.72846 - 0x3fe5f55a5b2576f8, 0xbfe746f6d9516d59, // 0.6862, -0.72741 - 0x3fe5fe7cbde56a0f, 0xbfe73e558e079942, // 0.68732, -0.72636 - 0x3fe6079bbc5aadfa, 0xbfe735b0ad2009b2, // 0.68843, -0.7253 - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425 - 0x3fe619cf86c55702, 0xbfe7245c2fcd492a, // 0.69065, -0.72319 - 0x3fe622e44fec22ff, 0xbfe71bac960e41bf, // 0.69176, -0.72213 - 0x3fe62bf5af2b0dfd, 0xbfe712f96c09d18d, // 0.69287, -0.72107 - 0x3fe63503a31c1be8, 0xbfe70a42b3176d7a, // 0.69397, -0.72 - 0x3fe63e0e2a59d7aa, 0xbfe701886c8f16e6, // 0.69508, -0.71894 - 0x3fe64715437f535b, 0xbfe6f8ca99c95b75, // 0.69618, -0.71787 - 0x3fe65018ed28287f, 0xbfe6f0093c1f54de, // 0.69728, -0.7168 - 0x3fe6591925f0783e, 0xbfe6e74454eaa8ae, // 0.69838, -0.71573 - 0x3fe66215ec74eb91, 0xbfe6de7be585881d, // 0.69947, -0.71466 - 0x3fe66b0f3f52b386, 0xbfe6d5afef4aafcc, // 0.70057, -0.71358 - 0x3fe674051d27896c, 0xbfe6cce07395679f, // 0.70166, -0.71251 - 0x3fe67cf78491af10, 0xbfe6c40d73c18275, // 0.70275, -0.71143 - 0x3fe685e6742feeef, 0xbfe6bb36f12b5e06, // 0.70385, -0.71035 - 0x3fe68ed1eaa19c71, 0xbfe6b25ced2fe29c, // 0.70493, -0.70927 - 0x3fe697b9e686941c, 0xbfe6a97f692c82ea, // 0.70602, -0.70819 - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711 - 0x3fe6a97f692c82ea, 0xbfe697b9e686941c, // 0.70819, -0.70602 - 0x3fe6b25ced2fe29c, 0xbfe68ed1eaa19c71, // 0.70927, -0.70493 - 0x3fe6bb36f12b5e06, 0xbfe685e6742feeef, // 0.71035, -0.70385 - 0x3fe6c40d73c18275, 0xbfe67cf78491af10, // 0.71143, -0.70275 - 0x3fe6cce07395679f, 0xbfe674051d27896c, // 0.71251, -0.70166 - 0x3fe6d5afef4aafcc, 0xbfe66b0f3f52b386, // 0.71358, -0.70057 - 0x3fe6de7be585881d, 0xbfe66215ec74eb91, // 0.71466, -0.69947 - 0x3fe6e74454eaa8ae, 0xbfe6591925f0783e, // 0.71573, -0.69838 - 0x3fe6f0093c1f54de, 0xbfe65018ed28287f, // 0.7168, -0.69728 - 0x3fe6f8ca99c95b75, 0xbfe64715437f535b, // 0.71787, -0.69618 - 0x3fe701886c8f16e6, 0xbfe63e0e2a59d7aa, // 0.71894, -0.69508 - 0x3fe70a42b3176d7a, 0xbfe63503a31c1be8, // 0.72, -0.69397 - 0x3fe712f96c09d18d, 0xbfe62bf5af2b0dfd, // 0.72107, -0.69287 - 0x3fe71bac960e41bf, 0xbfe622e44fec22ff, // 0.72213, -0.69176 - 0x3fe7245c2fcd492a, 0xbfe619cf86c55702, // 0.72319, -0.69065 - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954 - 0x3fe735b0ad2009b2, 0xbfe6079bbc5aadfa, // 0.7253, -0.68843 - 0x3fe73e558e079942, 0xbfe5fe7cbde56a0f, // 0.72636, -0.68732 - 0x3fe746f6d9516d59, 0xbfe5f55a5b2576f8, // 0.72741, -0.6862 - 0x3fe74f948da8d28d, 0xbfe5ec3495837074, // 0.72846, -0.68508 - 0x3fe7582ea9b9a329, 0xbfe5e30b6e6877f3, // 0.72951, -0.68397 - 0x3fe760c52c304764, 0xbfe5d9dee73e345c, // 0.73056, -0.68285 - 0x3fe7695813b9b594, 0xbfe5d0af016ed1d4, // 0.73161, -0.68172 - 0x3fe771e75f037261, 0xbfe5c77bbe65018c, // 0.73265, -0.6806 - 0x3fe77a730cbb9100, 0xbfe5be451f8bf980, // 0.7337, -0.67948 - 0x3fe782fb1b90b35b, 0xbfe5b50b264f7448, // 0.73474, -0.67835 - 0x3fe78b7f8a320a52, 0xbfe5abcdd41bb0d8, // 0.73578, -0.67722 - 0x3fe79400574f55e4, 0xbfe5a28d2a5d7250, // 0.73682, -0.67609 - 0x3fe79c7d8198e56e, 0xbfe599492a81ffbc, // 0.73785, -0.67496 - 0x3fe7a4f707bf97d2, 0xbfe59001d5f723df, // 0.73889, -0.67383 - 0x3fe7ad6ce874dbb6, 0xbfe586b72e2b2cfd, // 0.73992, -0.67269 - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156 - 0x3fe7be4db453a27c, 0xbfe57417ea8bb75c, // 0.74198, -0.67042 - 0x3fe7c6b89ce2d333, 0xbfe56ac35197649e, // 0.74301, -0.66928 - 0x3fe7cf1fdacbf179, 0xbfe5616b6b204e6e, // 0.74403, -0.66814 - 0x3fe7d7836cc33db2, 0xbfe5581038975137, // 0.74506, -0.667 - 0x3fe7dfe3517d8937, 0xbfe54eb1bb6dcb8f, // 0.74608, -0.66586 - 0x3fe7e83f87b03686, 0xbfe5454ff5159dfb, // 0.7471, -0.66471 - 0x3fe7f0980e113978, 0xbfe53beae7012abe, // 0.74812, -0.66356 - 0x3fe7f8ece3571771, 0xbfe5328292a35596, // 0.74914, -0.66242 - 0x3fe8013e0638e795, 0xbfe52916f96f8388, // 0.75015, -0.66127 - 0x3fe8098b756e52fa, 0xbfe51fa81cd99aa6, // 0.75117, -0.66011 - 0x3fe811d52faf94dc, 0xbfe51635fe5601d7, // 0.75218, -0.65896 - 0x3fe81a1b33b57acc, 0xbfe50cc09f59a09b, // 0.75319, -0.65781 - 0x3fe8225d803964e5, 0xbfe503480159ded2, // 0.75419, -0.65665 - 0x3fe82a9c13f545ff, 0xbfe4f9cc25cca486, // 0.7552, -0.65549 - 0x3fe832d6eda3a3e0, 0xbfe4f04d0e2859aa, // 0.75621, -0.65433 - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317 - 0x3fe843416dc4cce2, 0xbfe4dd453076b064, // 0.75821, -0.65201 - 0x3fe84b7111af83f9, 0xbfe4d3bc6d589f80, // 0.75921, -0.65085 - 0x3fe8539cf67c9029, 0xbfe4ca30740218a3, // 0.76021, -0.64968 - 0x3fe85bc51ae958cc, 0xbfe4c0a145ec0004, // 0.7612, -0.64851 - 0x3fe863e97db3d95a, 0xbfe4b70ee48fb869, // 0.7622, -0.64735 - 0x3fe86c0a1d9aa195, 0xbfe4ad79516722f0, // 0.76319, -0.64618 - 0x3fe87426f95cd5bd, 0xbfe4a3e08dec9ed6, // 0.76418, -0.645 - 0x3fe87c400fba2ebf, 0xbfe49a449b9b0938, // 0.76517, -0.64383 - 0x3fe884555f72fa6b, 0xbfe490a57bedbcdf, // 0.76615, -0.64266 - 0x3fe88c66e7481ba1, 0xbfe48703306091fe, // 0.76714, -0.64148 - 0x3fe89474a5fb0a84, 0xbfe47d5dba6fde01, // 0.76812, -0.6403 - 0x3fe89c7e9a4dd4ab, 0xbfe473b51b987347, // 0.7691, -0.63912 - 0x3fe8a484c3031d50, 0xbfe46a095557a0f1, // 0.77008, -0.63794 - 0x3fe8ac871ede1d88, 0xbfe4605a692b32a2, // 0.77106, -0.63676 - 0x3fe8b485aca2a468, 0xbfe456a858917046, // 0.77204, -0.63558 - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439 - 0x3fe8c47758fa71cb, 0xbfe4433ad0117b1d, // 0.77398, -0.63321 - 0x3fe8cc6a75184655, 0xbfe4397f5b2a4380, // 0.77495, -0.63202 - 0x3fe8d459be34bdfa, 0xbfe42fc0c7d3adbb, // 0.77592, -0.63083 - 0x3fe8dc45331698cc, 0xbfe425ff178e6bb1, // 0.77689, -0.62964 - 0x3fe8e42cd2852e0a, 0xbfe41c3a4bdbaa26, // 0.77785, -0.62845 - 0x3fe8ec109b486c49, 0xbfe41272663d108c, // 0.77882, -0.62725 - 0x3fe8f3f08c28d9ac, 0xbfe408a76834c0c0, // 0.77978, -0.62606 - 0x3fe8fbcca3ef940d, 0xbfe3fed9534556d4, // 0.78074, -0.62486 - 0x3fe903a4e1665133, 0xbfe3f50828f1e8d2, // 0.78169, -0.62366 - 0x3fe90b7943575efe, 0xbfe3eb33eabe0680, // 0.78265, -0.62246 - 0x3fe91349c88da398, 0xbfe3e15c9a2db922, // 0.7836, -0.62126 - 0x3fe91b166fd49da2, 0xbfe3d78238c58343, // 0.78456, -0.62006 - 0x3fe922df37f8646a, 0xbfe3cda4c80a6076, // 0.78551, -0.61885 - 0x3fe92aa41fc5a815, 0xbfe3c3c44981c517, // 0.78646, -0.61765 - 0x3fe932652609b1cf, 0xbfe3b9e0beb19e18, // 0.7874, -0.61644 - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523 - 0x3fe941db892e3a65, 0xbfe3a6108a54ba58, // 0.78929, -0.61402 - 0x3fe94990e3ac4a6c, 0xbfe39c23e3d63029, // 0.79023, -0.61281 - 0x3fe9514257dc4335, 0xbfe39234372c7f04, // 0.79117, -0.6116 - 0x3fe958efe48e6dd7, 0xbfe3884185dfeb22, // 0.79211, -0.61038 - 0x3fe960998893ad8c, 0xbfe37e4bd1792fe2, // 0.79304, -0.60917 - 0x3fe9683f42bd7fe1, 0xbfe374531b817f8d, // 0.79398, -0.60795 - 0x3fe96fe111ddfce0, 0xbfe36a576582831b, // 0.79491, -0.60673 - 0x3fe9777ef4c7d742, 0xbfe36058b10659f3, // 0.79584, -0.60551 - 0x3fe97f18ea4e5c9e, 0xbfe35656ff9799ae, // 0.79676, -0.60429 - 0x3fe986aef1457594, 0xbfe34c5252c14de1, // 0.79769, -0.60307 - 0x3fe98e410881a600, 0xbfe3424aac0ef7d6, // 0.79861, -0.60184 - 0x3fe995cf2ed80d22, 0xbfe338400d0c8e57, // 0.79954, -0.60062 - 0x3fe99d59631e65d5, 0xbfe32e3277467d6b, // 0.80046, -0.59939 - 0x3fe9a4dfa42b06b2, 0xbfe32421ec49a620, // 0.80138, -0.59816 - 0x3fe9ac61f0d4e247, 0xbfe31a0e6da35e44, // 0.80229, -0.59693 - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957 - 0x3fe9bb5aa85f2098, 0xbfe305de9b921a94, // 0.80412, -0.59447 - 0x3fe9c2d110f075c3, 0xbfe2fbc24b441015, // 0.80503, -0.59323 - 0x3fe9ca438080eadb, 0xbfe2f1a30d86773a, // 0.80594, -0.592 - 0x3fe9d1b1f5ea80d6, 0xbfe2e780e3e8ea16, // 0.80685, -0.59076 - 0x3fe9d91c7007d5a6, 0xbfe2dd5bcffb7616, // 0.80775, -0.58952 - 0x3fe9e082edb42472, 0xbfe2d333d34e9bb7, // 0.80866, -0.58828 - 0x3fe9e7e56dcb45bd, 0xbfe2c908ef734e57, // 0.80956, -0.58704 - 0x3fe9ef43ef29af94, 0xbfe2bedb25faf3ea, // 0.81046, -0.5858 - 0x3fe9f69e70ac75bc, 0xbfe2b4aa787764c4, // 0.81135, -0.58455 - 0x3fe9fdf4f13149de, 0xbfe2aa76e87aeb58, // 0.81225, -0.58331 - 0x3fea05476f967bb5, 0xbfe2a040779843fb, // 0.81314, -0.58206 - 0x3fea0c95eabaf937, 0xbfe2960727629ca8, // 0.81404, -0.58081 - 0x3fea13e0617e4ec7, 0xbfe28bcaf96d94ba, // 0.81493, -0.57956 - 0x3fea1b26d2c0a75e, 0xbfe2818bef4d3cba, // 0.81581, -0.57831 - 0x3fea22693d62ccb9, 0xbfe2774a0a961612, // 0.8167, -0.57706 - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581 - 0x3fea30e1fa4cbf81, 0xbfe262bdb7b795a2, // 0.81847, -0.57455 - 0x3fea38184a593bc6, 0xbfe258734cbb7110, // 0.81935, -0.5733 - 0x3fea3f4a8f4ee2d2, 0xbfe24e260d7ee7c9, // 0.82023, -0.57204 - 0x3fea4678c8119ac8, 0xbfe243d5fb98ac1f, // 0.8211, -0.57078 - 0x3fea4da2f385e997, 0xbfe23983189fdfd5, // 0.82198, -0.56952 - 0x3fea54c91090f524, 0xbfe22f2d662c13e1, // 0.82285, -0.56826 - 0x3fea5beb1e188375, 0xbfe224d4e5d5482e, // 0.82372, -0.567 - 0x3fea63091b02fae2, 0xbfe21a799933eb58, // 0.82459, -0.56573 - 0x3fea6a230637623b, 0xbfe2101b81e0da78, // 0.82546, -0.56447 - 0x3fea7138de9d60f5, 0xbfe205baa17560d6, // 0.82632, -0.5632 - 0x3fea784aa31d3f55, 0xbfe1fb56f98b37b8, // 0.82718, -0.56193 - 0x3fea7f58529fe69d, 0xbfe1f0f08bbc861b, // 0.82805, -0.56066 - 0x3fea8661ec0ee133, 0xbfe1e68759a3e074, // 0.8289, -0.55939 - 0x3fea8d676e545ad2, 0xbfe1dc1b64dc4872, // 0.82976, -0.55812 - 0x3fea9468d85b20ae, 0xbfe1d1acaf012cc2, // 0.83062, -0.55685 - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557 - 0x3feaa25f5f5aee60, 0xbfe1bcc706804467, // 0.83232, -0.55429 - 0x3feaa9547a2cb98e, 0xbfe1b250171373be, // 0.83317, -0.55302 - 0x3feab045787157ff, 0xbfe1a7d66d0516e6, // 0.83402, -0.55174 - 0x3feab7325916c0d4, 0xbfe19d5a09f2b9b8, // 0.83486, -0.55046 - 0x3feabe1b1b0b8dac, 0xbfe192daef7a5386, // 0.83571, -0.54918 - 0x3feac4ffbd3efac8, 0xbfe188591f3a46e5, // 0.83655, -0.54789 - 0x3feacbe03ea0e73b, 0xbfe17dd49ad16161, // 0.83739, -0.54661 - 0x3fead2bc9e21d511, 0xbfe1734d63dedb49, // 0.83822, -0.54532 - 0x3fead994dab2e979, 0xbfe168c37c025764, // 0.83906, -0.54404 - 0x3feae068f345ecef, 0xbfe15e36e4dbe2bc, // 0.83989, -0.54275 - 0x3feae738e6cd4b67, 0xbfe153a7a00bf453, // 0.84073, -0.54146 - 0x3feaee04b43c1474, 0xbfe14915af336ceb, // 0.84155, -0.54017 - 0x3feaf4cc5a85fb73, 0xbfe13e8113f396c1, // 0.84238, -0.53888 - 0x3feafb8fd89f57b6, 0xbfe133e9cfee254e, // 0.84321, -0.53759 - 0x3feb024f2d7d24a9, 0xbfe1294fe4c5350a, // 0.84403, -0.53629 - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535 - 0x3feb0fc1575d33db, 0xbfe114141f935545, // 0.84567, -0.5337 - 0x3feb16742a4ca2f5, 0xbfe1097248d0a956, // 0.84649, -0.5324 - 0x3feb1d22cfdadcc6, 0xbfe0fecdd1770537, // 0.84731, -0.5311 - 0x3feb23cd470013b4, 0xbfe0f426bb2a8e7d, // 0.84812, -0.5298 - 0x3feb2a738eb51f33, 0xbfe0e97d078fd23b, // 0.84893, -0.5285 - 0x3feb3115a5f37bf4, 0xbfe0ded0b84bc4b5, // 0.84974, -0.5272 - 0x3feb37b38bb54c09, 0xbfe0d421cf03c12b, // 0.85055, -0.5259 - 0x3feb3e4d3ef55712, 0xbfe0c9704d5d898f, // 0.85136, -0.52459 - 0x3feb44e2beaf0a61, 0xbfe0bebc34ff4646, // 0.85216, -0.52328 - 0x3feb4b7409de7925, 0xbfe0b405878f85ec, // 0.85296, -0.52198 - 0x3feb52011f805c92, 0xbfe0a94c46b53d0b, // 0.85376, -0.52067 - 0x3feb5889fe921405, 0xbfe09e907417c5e1, // 0.85456, -0.51936 - 0x3feb5f0ea611a532, 0xbfe093d2115ee018, // 0.85535, -0.51804 - 0x3feb658f14fdbc47, 0xbfe089112032b08c, // 0.85615, -0.51673 - 0x3feb6c0b4a55ac17, 0xbfe07e4da23bc102, // 0.85694, -0.51542 - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141 - 0x3feb78f70449a34b, 0xbfe068bf0691c028, // 0.85852, -0.51279 - 0x3feb7f6686e792ea, 0xbfe05df3ec31b8b6, // 0.8593, -0.51147 - 0x3feb85d1cbf52c02, 0xbfe053264bad0483, // 0.86009, -0.51015 - 0x3feb8c38d27504e9, 0xbfe0485626ae221a, // 0.86087, -0.50883 - 0x3feb929b996a5b7f, 0xbfe03d837edff370, // 0.86165, -0.50751 - 0x3feb98fa1fd9155e, 0xbfe032ae55edbd95, // 0.86242, -0.50619 - 0x3feb9f5464c5bffc, 0xbfe027d6ad83287e, // 0.8632, -0.50486 - 0x3feba5aa673590d2, 0xbfe01cfc874c3eb7, // 0.86397, -0.50354 - 0x3febabfc262e6586, 0xbfe0121fe4f56d2c, // 0.86474, -0.50221 - 0x3febb249a0b6c40d, 0xbfe00740c82b82e0, // 0.86551, -0.50089 - 0x3febb892d5d5dad5, 0xbfdff8be6537615e, // 0.86628, -0.49956 - 0x3febbed7c49380ea, 0xbfdfe2f64be7120f, // 0.86705, -0.49823 - 0x3febc5186bf8361d, 0xbfdfcd2947c1ff57, // 0.86781, -0.4969 - 0x3febcb54cb0d2327, 0xbfdfb7575c24d2de, // 0.86857, -0.49557 - 0x3febd18ce0dc19d6, 0xbfdfa1808c6cf7e0, // 0.86933, -0.49423 - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929 - 0x3febddf02cd2b983, 0xbfdf75c44e26a852, // 0.87084, -0.49156 - 0x3febe41b611154c1, 0xbfdf5fdee656cda3, // 0.8716, -0.49023 - 0x3febea424837de6d, 0xbfdf49f4a7e97729, // 0.87235, -0.48889 - 0x3febf064e15377dd, 0xbfdf3405963fd068, // 0.87309, -0.48755 - 0x3febf6832b71ec5b, 0xbfdf1e11b4bbc35c, // 0.87384, -0.48621 - 0x3febfc9d25a1b147, 0xbfdf081906bff7fd, // 0.87459, -0.48487 - 0x3fec02b2cef1e641, 0xbfdef21b8fafd3b5, // 0.87533, -0.48353 - 0x3fec08c426725549, 0xbfdedc1952ef78d5, // 0.87607, -0.48218 - 0x3fec0ed12b3372e9, 0xbfdec61253e3c61b, // 0.87681, -0.48084 - 0x3fec14d9dc465e58, 0xbfdeb00695f25620, // 0.87755, -0.47949 - 0x3fec1ade38bce19b, 0xbfde99f61c817eda, // 0.87828, -0.47815 - 0x3fec20de3fa971b0, 0xbfde83e0eaf85113, // 0.87901, -0.4768 - 0x3fec26d9f01f2eaf, 0xbfde6dc704be97e2, // 0.87974, -0.47545 - 0x3fec2cd14931e3f1, 0xbfde57a86d3cd824, // 0.88047, -0.4741 - 0x3fec32c449f60831, 0xbfde418527dc4ffa, // 0.8812, -0.47275 - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714 - 0x3fec3e9d3ee7d262, 0xbfde1530a12779f4, // 0.88264, -0.47004 - 0x3fec44833141c004, 0xbfddfeff66a941de, // 0.88336, -0.46869 - 0x3fec4a64c7a5ac4c, 0xbfdde8c98bf86bd6, // 0.88408, -0.46733 - 0x3fec5042012b6907, 0xbfddd28f1481cc58, // 0.8848, -0.46598 - 0x3fec561adceb743e, 0xbfddbc5003b2edf8, // 0.88551, -0.46462 - 0x3fec5bef59fef85a, 0xbfdda60c5cfa10d8, // 0.88622, -0.46326 - 0x3fec61bf777fcc48, 0xbfdd8fc423c62a25, // 0.88693, -0.4619 - 0x3fec678b3488739b, 0xbfdd79775b86e389, // 0.88764, -0.46054 - 0x3fec6d5290341eb2, 0xbfdd632607ac9aa9, // 0.88835, -0.45918 - 0x3fec7315899eaad7, 0xbfdd4cd02ba8609c, // 0.88905, -0.45781 - 0x3fec78d41fe4a267, 0xbfdd3675caebf962, // 0.88975, -0.45645 - 0x3fec7e8e52233cf3, 0xbfdd2016e8e9db5b, // 0.89045, -0.45508 - 0x3fec84441f785f61, 0xbfdd09b389152ec1, // 0.89115, -0.45372 - 0x3fec89f587029c13, 0xbfdcf34baee1cd21, // 0.89184, -0.45235 - 0x3fec8fa287e13305, 0xbfdcdcdf5dc440ce, // 0.89253, -0.45098 - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961 - 0x3fec9aef521bd480, 0xbfdcaff964a0421d, // 0.89391, -0.44824 - 0x3feca08f19b9c449, 0xbfdc997fc3865388, // 0.8946, -0.44687 - 0x3feca62a772fd919, 0xbfdc8301b95b40c2, // 0.89528, -0.4455 - 0x3fecabc169a0b901, 0xbfdc6c7f4997000a, // 0.89597, -0.44412 - 0x3fecb153f02fb87d, 0xbfdc55f877b23537, // 0.89665, -0.44275 - 0x3fecb6e20a00da99, 0xbfdc3f6d47263129, // 0.89732, -0.44137 - 0x3fecbc6bb638d10b, 0xbfdc28ddbb6cf145, // 0.898, -0.43999 - 0x3fecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // 0.89867, -0.43862 - 0x3fecc771c2736c09, 0xbfdbfbb1a05e0edc, // 0.89935, -0.43724 - 0x3fecccee20c2de9f, 0xbfdbe51517ffc0d9, // 0.90002, -0.43586 - 0x3fecd2660e12c1e6, 0xbfdbce744262deee, // 0.90068, -0.43448 - 0x3fecd7d9898b32f6, 0xbfdbb7cf2304bd01, // 0.90135, -0.43309 - 0x3fecdd489254fe65, 0xbfdba125bd63583e, // 0.90201, -0.43171 - 0x3fece2b32799a060, 0xbfdb8a7814fd5693, // 0.90267, -0.43033 - 0x3fece819488344ce, 0xbfdb73c62d520624, // 0.90333, -0.42894 - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756 - 0x3fecf2d829f1b40e, 0xbfdb4655ae2bf757, // 0.90464, -0.42617 - 0x3fecf830e8ce467b, 0xbfdb2f971db31972, // 0.9053, -0.42478 - 0x3fecfd852fff6ad4, 0xbfdb18d45bf8aca6, // 0.90595, -0.42339 - 0x3fed02d4feb2bd92, 0xbfdb020d6c7f4009, // 0.9066, -0.422 - 0x3fed082054168bac, 0xbfdaeb4252ca07ab, // 0.90724, -0.42061 - 0x3fed0d672f59d2b9, 0xbfdad473125cdc08, // 0.90789, -0.41922 - 0x3fed12a98fac410c, 0xbfdabd9faebc3980, // 0.90853, -0.41782 - 0x3fed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // 0.90917, -0.41643 - 0x3fed1d20dc40c15c, 0xbfda8fec8bf5b166, // 0.90981, -0.41503 - 0x3fed2255c6e5a4e1, 0xbfda790cd3dbf31a, // 0.91044, -0.41364 - 0x3fed2786335f52fc, 0xbfda622906a70b63, // 0.91107, -0.41224 - 0x3fed2cb220e0ef9f, 0xbfda4b4127dea1e4, // 0.91171, -0.41084 - 0x3fed31d98e9e503a, 0xbfda34553b0afee5, // 0.91234, -0.40944 - 0x3fed36fc7bcbfbdc, 0xbfda1d6543b50ac0, // 0.91296, -0.40804 - 0x3fed3c1ae79f2b4e, 0xbfda067145664d57, // 0.91359, -0.40664 - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524 - 0x3fed464a380e7242, 0xbfd9d87d4207b0ab, // 0.91483, -0.40384 - 0x3fed4b5b1b187524, 0xbfd9c17d440df9f2, // 0.91545, -0.40243 - 0x3fed506779a3d2d9, 0xbfd9aa794d47c9ee, // 0.91606, -0.40103 - 0x3fed556f52e93eb1, 0xbfd993716141bdfe, // 0.91668, -0.39962 - 0x3fed5a72a6221e73, 0xbfd97c6583890fc2, // 0.91729, -0.39822 - 0x3fed5f7172888a7f, 0xbfd96555b7ab948f, // 0.9179, -0.39681 - 0x3fed646bb7574de5, 0xbfd94e420137bce3, // 0.91851, -0.3954 - 0x3fed696173c9e68b, 0xbfd9372a63bc93d7, // 0.91911, -0.39399 - 0x3fed6e52a71c8547, 0xbfd9200ee2c9be97, // 0.91972, -0.39258 - 0x3fed733f508c0dff, 0xbfd908ef81ef7bd1, // 0.92032, -0.39117 - 0x3fed78276f5617c6, 0xbfd8f1cc44bea329, // 0.92092, -0.38976 - 0x3fed7d0b02b8ecf9, 0xbfd8daa52ec8a4af, // 0.92151, -0.38835 - 0x3fed81ea09f38b63, 0xbfd8c37a439f884f, // 0.92211, -0.38693 - 0x3fed86c48445a450, 0xbfd8ac4b86d5ed44, // 0.9227, -0.38552 - 0x3fed8b9a70ef9cb4, 0xbfd89518fbff098e, // 0.92329, -0.3841 - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268 - 0x3fed95389e50429b, 0xbfd866a88a792ea0, // 0.92447, -0.38127 - 0x3fed9a00dd8b3d46, 0xbfd84f6aaaf3903f, // 0.92505, -0.37985 - 0x3fed9ec48c26b1f3, 0xbfd838290bb359c8, // 0.92563, -0.37843 - 0x3feda383a9668988, 0xbfd820e3b04eaac4, // 0.92621, -0.37701 - 0x3feda83e348f613b, 0xbfd8099a9c5c362d, // 0.92679, -0.37559 - 0x3fedacf42ce68ab9, 0xbfd7f24dd37341e3, // 0.92736, -0.37416 - 0x3fedb1a591b20c38, 0xbfd7dafd592ba621, // 0.92794, -0.37274 - 0x3fedb6526238a09b, 0xbfd7c3a9311dcce7, // 0.92851, -0.37132 - 0x3fedbafa9dc1b78d, 0xbfd7ac515ee2b172, // 0.92907, -0.36989 - 0x3fedbf9e4395759a, 0xbfd794f5e613dfae, // 0.92964, -0.36847 - 0x3fedc43d52fcb453, 0xbfd77d96ca4b73a6, // 0.93021, -0.36704 - 0x3fedc8d7cb410260, 0xbfd766340f2418f6, // 0.93077, -0.36561 - 0x3fedcd6dabaca3a5, 0xbfd74ecdb8390a3e, // 0.93133, -0.36418 - 0x3fedd1fef38a915a, 0xbfd73763c9261092, // 0.93188, -0.36276 - 0x3fedd68ba2267a25, 0xbfd71ff6458782ec, // 0.93244, -0.36133 - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599 - 0x3feddf9730ca837b, 0xbfd6f1108f1bc9c5, // 0.93354, -0.35846 - 0x3fede4160f6d8d81, 0xbfd6d998638a0cb5, // 0.93409, -0.35703 - 0x3fede890520465ce, 0xbfd6c21cb1e39771, // 0.93464, -0.3556 - 0x3feded05f7de47da, 0xbfd6aa9d7dc77e16, // 0.93518, -0.35416 - 0x3fedf177004b2534, 0xbfd6931acad55f51, // 0.93573, -0.35273 - 0x3fedf5e36a9ba59c, 0xbfd67b949cad63ca, // 0.93627, -0.35129 - 0x3fedfa4b3621271d, 0xbfd6640af6f03d9e, // 0.9368, -0.34986 - 0x3fedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // 0.93734, -0.34842 - 0x3fee030cee1435b8, 0xbfd634ed533be58e, // 0.93787, -0.34698 - 0x3fee0766d9280f54, 0xbfd61d595c88c203, // 0.9384, -0.34554 - 0x3fee0bbc22bd8349, 0xbfd605c1fcc88f63, // 0.93893, -0.3441 - 0x3fee100cca2980ac, 0xbfd5ee27379ea693, // 0.93946, -0.34266 - 0x3fee1458cec1ad83, 0xbfd5d68910aee686, // 0.93998, -0.34122 - 0x3fee18a02fdc66d9, 0xbfd5bee78b9db3b6, // 0.94051, -0.33978 - 0x3fee1ce2ecd0c0d8, 0xbfd5a742ac0ff78d, // 0.94103, -0.33833 - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689 - 0x3fee255a77a63bb8, 0xbfd577eeec151e47, // 0.94206, -0.33545 - 0x3fee298f4439197a, 0xbfd5604012f467b4, // 0.94257, -0.334 - 0x3fee2dbf6a0911d9, 0xbfd5488dedeff3be, // 0.94308, -0.33255 - 0x3fee31eae870ce25, 0xbfd530d880af3c24, // 0.94359, -0.33111 - 0x3fee3611becbaf69, 0xbfd5191fceda3c35, // 0.9441, -0.32966 - 0x3fee3a33ec75ce85, 0xbfd50163dc197047, // 0.9446, -0.32821 - 0x3fee3e5170cbfc46, 0xbfd4e9a4ac15d520, // 0.94511, -0.32676 - 0x3fee426a4b2bc17e, 0xbfd4d1e24278e76a, // 0.94561, -0.32531 - 0x3fee467e7af35f23, 0xbfd4ba1ca2eca31c, // 0.94611, -0.32386 - 0x3fee4a8dff81ce5e, 0xbfd4a253d11b82f3, // 0.9466, -0.32241 - 0x3fee4e98d836c0af, 0xbfd48a87d0b07fd7, // 0.94709, -0.32096 - 0x3fee529f04729ffc, 0xbfd472b8a5571054, // 0.94759, -0.3195 - 0x3fee56a083968eb1, 0xbfd45ae652bb2800, // 0.94807, -0.31805 - 0x3fee5a9d550467d3, 0xbfd44310dc8936f0, // 0.94856, -0.31659 - 0x3fee5e95781ebf1c, 0xbfd42b38466e2928, // 0.94905, -0.31514 - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368 - 0x3fee6677b0e6d31e, 0xbfd3fb7dc932cfa4, // 0.95001, -0.31222 - 0x3fee6a61c55d53a7, 0xbfd3e39be96ec271, // 0.95049, -0.31077 - 0x3fee6e472911da27, 0xbfd3cbb6f87a146e, // 0.95096, -0.30931 - 0x3fee7227db6a9744, 0xbfd3b3cefa0414b7, // 0.95144, -0.30785 - 0x3fee7603dbce74e9, 0xbfd39be3f1bc8aef, // 0.95191, -0.30639 - 0x3fee79db29a5165a, 0xbfd383f5e353b6aa, // 0.95238, -0.30493 - 0x3fee7dadc456d850, 0xbfd36c04d27a4edf, // 0.95284, -0.30347 - 0x3fee817bab4cd10d, 0xbfd35410c2e18152, // 0.95331, -0.30201 - 0x3fee8544ddf0d075, 0xbfd33c19b83af207, // 0.95377, -0.30054 - 0x3fee89095bad6025, 0xbfd3241fb638baaf, // 0.95423, -0.29908 - 0x3fee8cc923edc388, 0xbfd30c22c08d6a13, // 0.95469, -0.29762 - 0x3fee9084361df7f3, 0xbfd2f422daec0386, // 0.95514, -0.29615 - 0x3fee943a91aab4b4, 0xbfd2dc200907fe51, // 0.95559, -0.29469 - 0x3fee97ec36016b30, 0xbfd2c41a4e954520, // 0.95605, -0.29322 - 0x3fee9b99229046f8, 0xbfd2ac11af483572, // 0.95649, -0.29175 - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028 - 0x3feea2e4d212c000, 0xbfd27bf7d0f2c346, // 0.95738, -0.28882 - 0x3feea68393e65800, 0xbfd263e6995554ba, // 0.95783, -0.28735 - 0x3feeaa1d9bb20af3, 0xbfd24bd28bb37672, // 0.95827, -0.28588 - 0x3feeadb2e8e7a88e, 0xbfd233bbabc3bb72, // 0.9587, -0.28441 - 0x3feeb1437af9bb34, 0xbfd21ba1fd3d2623, // 0.95914, -0.28294 - 0x3feeb4cf515b8811, 0xbfd2038583d727bd, // 0.95957, -0.28146 - 0x3feeb8566b810f2a, 0xbfd1eb6643499fbb, // 0.96, -0.27999 - 0x3feebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // 0.96043, -0.27852 - 0x3feebf5668eaf2ef, 0xbfd1bb1f7b999480, // 0.96086, -0.27705 - 0x3feec2cf4b1af6b2, 0xbfd1a2f7fbe8f243, // 0.96128, -0.27557 - 0x3feec6436ee60309, 0xbfd18acdc3f4873a, // 0.9617, -0.2741 - 0x3feec9b2d3c3bf84, 0xbfd172a0d7765177, // 0.96212, -0.27262 - 0x3feecd1d792c8f10, 0xbfd15a713a28b9d9, // 0.96254, -0.27115 - 0x3feed0835e999009, 0xbfd1423eefc69378, // 0.96295, -0.26967 - 0x3feed3e483849c51, 0xbfd12a09fc0b1b12, // 0.96337, -0.26819 - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671 - 0x3feeda9889bfe86a, 0xbfd0f998277733f7, // 0.96418, -0.26523 - 0x3feeddeb6a078651, 0xbfd0e15b4e1749cd, // 0.96459, -0.26375 - 0x3feee13987bbebdc, 0xbfd0c91bda4f158d, // 0.96499, -0.26227 - 0x3feee482e25a9dbc, 0xbfd0b0d9cfdbdb90, // 0.96539, -0.26079 - 0x3feee7c77961dc9e, 0xbfd09895327b465e, // 0.96579, -0.25931 - 0x3feeeb074c50a544, 0xbfd0804e05eb661e, // 0.96619, -0.25783 - 0x3feeee425aa6b09a, 0xbfd068044deab002, // 0.96658, -0.25635 - 0x3feef178a3e473c2, 0xbfd04fb80e37fdae, // 0.96698, -0.25487 - 0x3feef4aa278b2032, 0xbfd037694a928cac, // 0.96737, -0.25338 - 0x3feef7d6e51ca3c0, 0xbfd01f1806b9fdd2, // 0.96775, -0.2519 - 0x3feefafedc1ba8b7, 0xbfd006c4466e54af, // 0.96814, -0.25041 - 0x3feefe220c0b95ec, 0xbfcfdcdc1adfedf8, // 0.96852, -0.24893 - 0x3fef014074708ed3, 0xbfcfac2abeff57ff, // 0.9689, -0.24744 - 0x3fef045a14cf738c, 0xbfcf7b7480bd3801, // 0.96928, -0.24596 - 0x3fef076eecade0fa, 0xbfcf4ab9679c9f5c, // 0.96966, -0.24447 - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298 - 0x3fef0d8a410379c5, 0xbfcee934c2d006c7, // 0.9704, -0.24149 - 0x3fef1090bc898f5f, 0xbfceb86b462de348, // 0.97077, -0.24 - 0x3fef13926dad024e, 0xbfce879d0cc0fdaf, // 0.97114, -0.23851 - 0x3fef168f53f7205d, 0xbfce56ca1e101a1b, // 0.9715, -0.23702 - 0x3fef19876ef1f486, 0xbfce25f281a2b684, // 0.97187, -0.23553 - 0x3fef1c7abe284708, 0xbfcdf5163f01099a, // 0.97223, -0.23404 - 0x3fef1f6941259d7a, 0xbfcdc4355db40195, // 0.97258, -0.23255 - 0x3fef2252f7763ada, 0xbfcd934fe5454311, // 0.97294, -0.23106 - 0x3fef2537e0a71f9f, 0xbfcd6265dd3f27e3, // 0.97329, -0.22957 - 0x3fef2817fc4609ce, 0xbfcd31774d2cbdee, // 0.97364, -0.22807 - 0x3fef2af349e17507, 0xbfcd00843c99c5f9, // 0.97399, -0.22658 - 0x3fef2dc9c9089a9d, 0xbfcccf8cb312b286, // 0.97434, -0.22508 - 0x3fef309b794b719f, 0xbfcc9e90b824a6a9, // 0.97468, -0.22359 - 0x3fef33685a3aaef0, 0xbfcc6d90535d74dc, // 0.97503, -0.22209 - 0x3fef36306b67c556, 0xbfcc3c8b8c4b9dd7, // 0.97536, -0.2206 - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191 - 0x3fef3bb21cc4fe47, 0xbfcbda74f5856330, // 0.97604, -0.2176 - 0x3fef3e6bbc1bbc65, 0xbfcba96334f15dad, // 0.97637, -0.21611 - 0x3fef412089fd8adc, 0xbfcb784d30536cda, // 0.9767, -0.21461 - 0x3fef43d085ff92dd, 0xbfcb4732ef3d6722, // 0.97703, -0.21311 - 0x3fef467bafb7bbe0, 0xbfcb16147941ca2a, // 0.97735, -0.21161 - 0x3fef492206bcabb4, 0xbfcae4f1d5f3b9ab, // 0.97768, -0.21011 - 0x3fef4bc38aa5c694, 0xbfcab3cb0ce6fe44, // 0.978, -0.20861 - 0x3fef4e603b0b2f2d, 0xbfca82a025b00451, // 0.97832, -0.20711 - 0x3fef50f81785c6b9, 0xbfca517127e3dabc, // 0.97863, -0.20561 - 0x3fef538b1faf2d07, 0xbfca203e1b1831da, // 0.97895, -0.20411 - 0x3fef56195321c090, 0xbfc9ef0706e35a35, // 0.97926, -0.20261 - 0x3fef58a2b1789e84, 0xbfc9bdcbf2dc4366, // 0.97957, -0.2011 - 0x3fef5b273a4fa2d9, 0xbfc98c8ce69a7aec, // 0.97988, -0.1996 - 0x3fef5da6ed43685d, 0xbfc95b49e9b62af9, // 0.98018, -0.1981 - 0x3fef6021c9f148c2, 0xbfc92a0303c8194f, // 0.98048, -0.19659 - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509 - 0x3fef6508fef47bd5, 0xbfc8c7699b34ca7e, // 0.98108, -0.19359 - 0x3fef677556883cee, 0xbfc8961727c41804, // 0.98138, -0.19208 - 0x3fef69dcd652f5de, 0xbfc864c0e9b2b6cf, // 0.98167, -0.19057 - 0x3fef6c3f7df5bbb7, 0xbfc83366e89c64c5, // 0.98196, -0.18907 - 0x3fef6e9d4d1262ca, 0xbfc802092c1d744b, // 0.98225, -0.18756 - 0x3fef70f6434b7eb7, 0xbfc7d0a7bbd2cb1b, // 0.98254, -0.18606 - 0x3fef734a60446279, 0xbfc79f429f59e11d, // 0.98282, -0.18455 - 0x3fef7599a3a12077, 0xbfc76dd9de50bf31, // 0.98311, -0.18304 - 0x3fef77e40d068a90, 0xbfc73c6d8055fe0a, // 0.98339, -0.18153 - 0x3fef7a299c1a322a, 0xbfc70afd8d08c4ff, // 0.98366, -0.18002 - 0x3fef7c6a50826840, 0xbfc6d98a0c08c8da, // 0.98394, -0.17851 - 0x3fef7ea629e63d6e, 0xbfc6a81304f64ab2, // 0.98421, -0.177 - 0x3fef80dd27ed8204, 0xbfc676987f7216b8, // 0.98448, -0.17549 - 0x3fef830f4a40c60c, 0xbfc6451a831d830d, // 0.98475, -0.17398 - 0x3fef853c9089595e, 0xbfc61399179a6e94, // 0.98501, -0.17247 - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096 - 0x3fef898887a36c84, 0xbfc5b08c1192e381, // 0.98554, -0.16945 - 0x3fef8ba737cb4b78, 0xbfc57f008654cbde, // 0.9858, -0.16794 - 0x3fef8dc10a95380d, 0xbfc54d71aa74ef02, // 0.98605, -0.16643 - 0x3fef8fd5ffae41db, 0xbfc51bdf8597c5f2, // 0.98631, -0.16491 - 0x3fef91e616c43891, 0xbfc4ea4a1f624b61, // 0.98656, -0.1634 - 0x3fef93f14f85ac08, 0xbfc4b8b17f79fa88, // 0.98681, -0.16189 - 0x3fef95f7a9a1ec47, 0xbfc48715ad84cdf5, // 0.98706, -0.16037 - 0x3fef97f924c9099b, 0xbfc45576b1293e5a, // 0.9873, -0.15886 - 0x3fef99f5c0abd496, 0xbfc423d4920e4166, // 0.98754, -0.15734 - 0x3fef9bed7cfbde29, 0xbfc3f22f57db4893, // 0.98778, -0.15583 - 0x3fef9de0596b77a3, 0xbfc3c0870a383ff6, // 0.98802, -0.15431 - 0x3fef9fce55adb2c8, 0xbfc38edbb0cd8d14, // 0.98826, -0.1528 - 0x3fefa1b7717661d5, 0xbfc35d2d53440db2, // 0.98849, -0.15128 - 0x3fefa39bac7a1791, 0xbfc32b7bf94516a7, // 0.98872, -0.14976 - 0x3fefa57b066e2754, 0xbfc2f9c7aa7a72af, // 0.98895, -0.14825 - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673 - 0x3fefa92b1600657c, 0xbfc296564d2b953e, // 0.9894, -0.14521 - 0x3fefaafbcb0cfddc, 0xbfc264994dfd340a, // 0.98962, -0.1437 - 0x3fefacc79de6c44f, 0xbfc232d978aed413, // 0.98984, -0.14218 - 0x3fefae8e8e46cfbb, 0xbfc20116d4ec7bce, // 0.99006, -0.14066 - 0x3fefb0509be6f7db, 0xbfc1cf516a62a077, // 0.99027, -0.13914 - 0x3fefb20dc681d54d, 0xbfc19d8940be24e7, // 0.99049, -0.13762 - 0x3fefb3c60dd2c199, 0xbfc16bbe5fac5865, // 0.9907, -0.1361 - 0x3fefb5797195d741, 0xbfc139f0cedaf576, // 0.9909, -0.13458 - 0x3fefb727f187f1c7, 0xbfc1082095f820b0, // 0.99111, -0.13306 - 0x3fefb8d18d66adb7, 0xbfc0d64dbcb26786, // 0.99131, -0.13154 - 0x3fefba7644f068b5, 0xbfc0a4784ab8bf1d, // 0.99151, -0.13002 - 0x3fefbc1617e44186, 0xbfc072a047ba831d, // 0.99171, -0.1285 - 0x3fefbdb106021816, 0xbfc040c5bb67747e, // 0.99191, -0.12698 - 0x3fefbf470f0a8d88, 0xbfc00ee8ad6fb85b, // 0.9921, -0.12545 - 0x3fefc0d832bf043a, 0xbfbfba124b07ad85, // 0.99229, -0.12393 - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241 - 0x3fefc3ebc935454c, 0xbfbef2858d27561b, // 0.99267, -0.12089 - 0x3fefc56e3b7d9af6, 0xbfbe8eb7fde4aa3e, // 0.99285, -0.11937 - 0x3fefc6ebc77f0887, 0xbfbe2ae5b8457f77, // 0.99303, -0.11784 - 0x3fefc8646cfeb721, 0xbfbdc70ecbae9fc8, // 0.99321, -0.11632 - 0x3fefc9d82bc2915e, 0xbfbd633347858ce4, // 0.99339, -0.11479 - 0x3fefcb4703914354, 0xbfbcff533b307dc1, // 0.99356, -0.11327 - 0x3fefccb0f4323aa3, 0xbfbc9b6eb6165c42, // 0.99374, -0.11175 - 0x3fefce15fd6da67b, 0xbfbc3785c79ec2d5, // 0.99391, -0.11022 - 0x3fefcf761f0c77a3, 0xbfbbd3987f31fa0e, // 0.99407, -0.1087 - 0x3fefd0d158d86087, 0xbfbb6fa6ec38f64c, // 0.99424, -0.10717 - 0x3fefd227aa9bd53b, 0xbfbb0bb11e1d5559, // 0.9944, -0.10565 - 0x3fefd37914220b84, 0xbfbaa7b724495c04, // 0.99456, -0.10412 - 0x3fefd4c59536fae4, 0xbfba43b90e27f3c4, // 0.99472, -0.1026 - 0x3fefd60d2da75c9e, 0xbfb9dfb6eb24a85c, // 0.99488, -0.10107 - 0x3fefd74fdd40abbf, 0xbfb97bb0caaba56f, // 0.99503, -0.099544 - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518, -0.098017 - 0x3fefd9c68127c78c, 0xbfb8b398cf0c38e0, // 0.99533, -0.09649 - 0x3fefdafa7514538c, 0xbfb84f8712c130a0, // 0.99548, -0.094963 - 0x3fefdc297f674ba9, 0xbfb7eb7196b72ee4, // 0.99563, -0.093436 - 0x3fefdd539ff1f456, 0xbfb787586a5d5b21, // 0.99577, -0.091909 - 0x3fefde78d68653fd, 0xbfb7233b9d236e71, // 0.99591, -0.090381 - 0x3fefdf9922f73307, 0xbfb6bf1b3e79b129, // 0.99604, -0.088854 - 0x3fefe0b485181be3, 0xbfb65af75dd0f87b, // 0.99618, -0.087326 - 0x3fefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // 0.99631, -0.085797 - 0x3fefe2dc89bbff08, 0xbfb592a554489bc8, // 0.99644, -0.084269 - 0x3fefe3e92be9d886, 0xbfb52e774a4d4d0a, // 0.99657, -0.08274 - 0x3fefe4f0e31d7a4a, 0xbfb4ca45fc1ba8b6, // 0.9967, -0.081211 - 0x3fefe5f3af2e3940, 0xbfb4661179272096, // 0.99682, -0.079682 - 0x3fefe6f18ff42c84, 0xbfb401d9d0e3a507, // 0.99694, -0.078153 - 0x3fefe7ea85482d60, 0xbfb39d9f12c5a299, // 0.99706, -0.076624 - 0x3fefe8de8f03d75c, 0xbfb339614e41ffa5, // 0.99718, -0.075094 - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729, -0.073565 - 0x3fefeab7df1c6005, 0xbfb270dcefdfc45b, // 0.9974, -0.072035 - 0x3fefeb9d2530410f, 0xbfb20c9674ed444c, // 0.99751, -0.070505 - 0x3fefec7d7f19cffc, 0xbfb1a84d316d4f8a, // 0.99762, -0.068974 - 0x3fefed58ecb673c4, 0xbfb1440134d709b2, // 0.99772, -0.067444 - 0x3fefee2f6de455ba, 0xbfb0dfb28ea201e6, // 0.99783, -0.065913 - 0x3fefef0102826191, 0xbfb07b614e463064, // 0.99793, -0.064383 - 0x3fefefcdaa704562, 0xbfb0170d833bf421, // 0.99802, -0.062852 - 0x3feff095658e71ad, 0xbfaf656e79f820e0, // 0.99812, -0.061321 - 0x3feff15833be1965, 0xbfae9cbd15ff5527, // 0.99821, -0.05979 - 0x3feff21614e131ed, 0xbfadd406f9808ec8, // 0.9983, -0.058258 - 0x3feff2cf08da7321, 0xbfad0b4c436f91d0, // 0.99839, -0.056727 - 0x3feff3830f8d575c, 0xbfac428d12c0d7e3, // 0.99848, -0.055195 - 0x3feff43228de1b77, 0xbfab79c986698b78, // 0.99856, -0.053664 - 0x3feff4dc54b1bed3, 0xbfaab101bd5f8317, // 0.99864, -0.052132 - 0x3feff58192ee0358, 0xbfa9e835d6993c87, // 0.99872, -0.0506 - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988, -0.049068 - 0x3feff6bd463b444d, 0xbfa856922bb513c1, // 0.99887, -0.047535 - 0x3feff753bb1b9164, 0xbfa78dbaa5874685, // 0.99894, -0.046003 - 0x3feff7e5420320f9, 0xbfa6c4df7d7d5b84, // 0.99901, -0.044471 - 0x3feff871dadb81df, 0xbfa5fc00d290cd43, // 0.99908, -0.042938 - 0x3feff8f9858f058b, 0xbfa5331ec3bba0eb, // 0.99914, -0.041406 - 0x3feff97c4208c014, 0xbfa46a396ff86179, // 0.9992, -0.039873 - 0x3feff9fa10348837, 0xbfa3a150f6421afc, // 0.99926, -0.03834 - 0x3feffa72effef75d, 0xbfa2d865759455cd, // 0.99932, -0.036807 - 0x3feffae6e1556998, 0xbfa20f770ceb11c6, // 0.99938, -0.035274 - 0x3feffb55e425fdae, 0xbfa14685db42c17e, // 0.99943, -0.033741 - 0x3feffbbff85f9515, 0xbfa07d91ff984580, // 0.99948, -0.032208 - 0x3feffc251df1d3f8, 0xbf9f693731d1cf01, // 0.99953, -0.030675 - 0x3feffc8554cd213a, 0xbf9dd7458c64ab39, // 0.99958, -0.029142 - 0x3feffce09ce2a679, 0xbf9c454f4ce53b1c, // 0.99962, -0.027608 - 0x3feffd36f624500c, 0xbf9ab354b1504fca, // 0.99966, -0.026075 - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997, -0.024541 - 0x3feffdd4dbf78f52, 0xbf978f535ddc9f03, // 0.99974, -0.023008 - 0x3feffe1c6870cb77, 0xbf95fd4d21fab226, // 0.99977, -0.021474 - 0x3feffe5f05e578db, 0xbf946b4381fce81c, // 0.9998, -0.01994 - 0x3feffe9cb44b51a1, 0xbf92d936bbe30efd, // 0.99983, -0.018407 - 0x3feffed57398d2b7, 0xbf9147270dad7132, // 0.99986, -0.016873 - 0x3fefff0943c53bd1, 0xbf8f6a296ab997ca, // 0.99988, -0.015339 - 0x3fefff3824c88f6f, 0xbf8c45ffe1e48ad9, // 0.9999, -0.013805 - 0x3fefff62169b92db, 0xbf8921d1fcdec784, // 0.99992, -0.012272 - 0x3fefff871937ce2f, 0xbf85fda037ac05e0, // 0.99994, -0.010738 - 0x3fefffa72c978c4f, 0xbf82d96b0e509703, // 0.99996,-0.0092038 - 0x3fefffc250b5daef, 0xbf7f6a65f9a2a3c5, // 0.99997,-0.0076698 - 0x3fefffd8858e8a92, 0xbf7921f0fe670071, // 0.99998,-0.0061359 - 0x3fefffe9cb1e2e8d, 0xbf72d97822f996bc, // 0.99999,-0.0046019 - 0x3feffff621621d02, 0xbf6921f8becca4ba, // 1, -0.003068 - 0x3feffffd88586ee6, 0xbf5921faaee6472d, // 1, -0.001534 - - -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -/** - @brief Floating-point Twiddle factors Table Generation -*/ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) -/** - @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, 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) - -/** - @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, 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) -/** - @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, 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) -/** - @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, 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) -/** - @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, 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) -/** - @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, 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) -/** - @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, 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) -/** - @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, 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) -/** - @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, 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - - -/** - @brief Q31 Twiddle factors Table -*/ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_16) -/** - @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, 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] = { - (q31_t)0x7FFFFFFF, (q31_t)0x00000000, - (q31_t)0x7641AF3C, (q31_t)0x30FBC54D, - (q31_t)0x5A82799A, (q31_t)0x5A82799A, - (q31_t)0x30FBC54D, (q31_t)0x7641AF3C, - (q31_t)0x00000000, (q31_t)0x7FFFFFFF, - (q31_t)0xCF043AB2, (q31_t)0x7641AF3C, - (q31_t)0xA57D8666, (q31_t)0x5A82799A, - (q31_t)0x89BE50C3, (q31_t)0x30FBC54D, - (q31_t)0x80000000, (q31_t)0x00000000, - (q31_t)0x89BE50C3, (q31_t)0xCF043AB2, - (q31_t)0xA57D8666, (q31_t)0xA57D8666, - (q31_t)0xCF043AB2, (q31_t)0x89BE50C3 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_32) -/** - @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, 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] = { - (q31_t)0x7FFFFFFF, (q31_t)0x00000000, - (q31_t)0x7D8A5F3F, (q31_t)0x18F8B83C, - (q31_t)0x7641AF3C, (q31_t)0x30FBC54D, - (q31_t)0x6A6D98A4, (q31_t)0x471CECE6, - (q31_t)0x5A82799A, (q31_t)0x5A82799A, - (q31_t)0x471CECE6, (q31_t)0x6A6D98A4, - (q31_t)0x30FBC54D, (q31_t)0x7641AF3C, - (q31_t)0x18F8B83C, (q31_t)0x7D8A5F3F, - (q31_t)0x00000000, (q31_t)0x7FFFFFFF, - (q31_t)0xE70747C3, (q31_t)0x7D8A5F3F, - (q31_t)0xCF043AB2, (q31_t)0x7641AF3C, - (q31_t)0xB8E31319, (q31_t)0x6A6D98A4, - (q31_t)0xA57D8666, (q31_t)0x5A82799A, - (q31_t)0x9592675B, (q31_t)0x471CECE6, - (q31_t)0x89BE50C3, (q31_t)0x30FBC54D, - (q31_t)0x8275A0C0, (q31_t)0x18F8B83C, - (q31_t)0x80000000, (q31_t)0x00000000, - (q31_t)0x8275A0C0, (q31_t)0xE70747C3, - (q31_t)0x89BE50C3, (q31_t)0xCF043AB2, - (q31_t)0x9592675B, (q31_t)0xB8E31319, - (q31_t)0xA57D8666, (q31_t)0xA57D8666, - (q31_t)0xB8E31319, (q31_t)0x9592675B, - (q31_t)0xCF043AB2, (q31_t)0x89BE50C3, - (q31_t)0xE70747C3, (q31_t)0x8275A0C0 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_64) -/** - @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, 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] = { - (q31_t)0x7FFFFFFF, (q31_t)0x00000000, (q31_t)0x7F62368F, - (q31_t)0x0C8BD35E, (q31_t)0x7D8A5F3F, (q31_t)0x18F8B83C, - (q31_t)0x7A7D055B, (q31_t)0x25280C5D, (q31_t)0x7641AF3C, - (q31_t)0x30FBC54D, (q31_t)0x70E2CBC6, (q31_t)0x3C56BA70, - (q31_t)0x6A6D98A4, (q31_t)0x471CECE6, (q31_t)0x62F201AC, - (q31_t)0x5133CC94, (q31_t)0x5A82799A, (q31_t)0x5A82799A, - (q31_t)0x5133CC94, (q31_t)0x62F201AC, (q31_t)0x471CECE6, - (q31_t)0x6A6D98A4, (q31_t)0x3C56BA70, (q31_t)0x70E2CBC6, - (q31_t)0x30FBC54D, (q31_t)0x7641AF3C, (q31_t)0x25280C5D, - (q31_t)0x7A7D055B, (q31_t)0x18F8B83C, (q31_t)0x7D8A5F3F, - (q31_t)0x0C8BD35E, (q31_t)0x7F62368F, (q31_t)0x00000000, - (q31_t)0x7FFFFFFF, (q31_t)0xF3742CA1, (q31_t)0x7F62368F, - (q31_t)0xE70747C3, (q31_t)0x7D8A5F3F, (q31_t)0xDAD7F3A2, - (q31_t)0x7A7D055B, (q31_t)0xCF043AB2, (q31_t)0x7641AF3C, - (q31_t)0xC3A9458F, (q31_t)0x70E2CBC6, (q31_t)0xB8E31319, - (q31_t)0x6A6D98A4, (q31_t)0xAECC336B, (q31_t)0x62F201AC, - (q31_t)0xA57D8666, (q31_t)0x5A82799A, (q31_t)0x9D0DFE53, - (q31_t)0x5133CC94, (q31_t)0x9592675B, (q31_t)0x471CECE6, - (q31_t)0x8F1D343A, (q31_t)0x3C56BA70, (q31_t)0x89BE50C3, - (q31_t)0x30FBC54D, (q31_t)0x8582FAA4, (q31_t)0x25280C5D, - (q31_t)0x8275A0C0, (q31_t)0x18F8B83C, (q31_t)0x809DC970, - (q31_t)0x0C8BD35E, (q31_t)0x80000000, (q31_t)0x00000000, - (q31_t)0x809DC970, (q31_t)0xF3742CA1, (q31_t)0x8275A0C0, - (q31_t)0xE70747C3, (q31_t)0x8582FAA4, (q31_t)0xDAD7F3A2, - (q31_t)0x89BE50C3, (q31_t)0xCF043AB2, (q31_t)0x8F1D343A, - (q31_t)0xC3A9458F, (q31_t)0x9592675B, (q31_t)0xB8E31319, - (q31_t)0x9D0DFE53, (q31_t)0xAECC336B, (q31_t)0xA57D8666, - (q31_t)0xA57D8666, (q31_t)0xAECC336B, (q31_t)0x9D0DFE53, - (q31_t)0xB8E31319, (q31_t)0x9592675B, (q31_t)0xC3A9458F, - (q31_t)0x8F1D343A, (q31_t)0xCF043AB2, (q31_t)0x89BE50C3, - (q31_t)0xDAD7F3A2, (q31_t)0x8582FAA4, (q31_t)0xE70747C3, - (q31_t)0x8275A0C0, (q31_t)0xF3742CA1, (q31_t)0x809DC970 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_128) -/** - @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, 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] = { - (q31_t)0x7FFFFFFF, (q31_t)0x00000000, (q31_t)0x7FD8878D, - (q31_t)0x0647D97C, (q31_t)0x7F62368F, (q31_t)0x0C8BD35E, - (q31_t)0x7E9D55FC, (q31_t)0x12C8106E, (q31_t)0x7D8A5F3F, - (q31_t)0x18F8B83C, (q31_t)0x7C29FBEE, (q31_t)0x1F19F97B, - (q31_t)0x7A7D055B, (q31_t)0x25280C5D, (q31_t)0x78848413, - (q31_t)0x2B1F34EB, (q31_t)0x7641AF3C, (q31_t)0x30FBC54D, - (q31_t)0x73B5EBD0, (q31_t)0x36BA2013, (q31_t)0x70E2CBC6, - (q31_t)0x3C56BA70, (q31_t)0x6DCA0D14, (q31_t)0x41CE1E64, - (q31_t)0x6A6D98A4, (q31_t)0x471CECE6, (q31_t)0x66CF811F, - (q31_t)0x4C3FDFF3, (q31_t)0x62F201AC, (q31_t)0x5133CC94, - (q31_t)0x5ED77C89, (q31_t)0x55F5A4D2, (q31_t)0x5A82799A, - (q31_t)0x5A82799A, (q31_t)0x55F5A4D2, (q31_t)0x5ED77C89, - (q31_t)0x5133CC94, (q31_t)0x62F201AC, (q31_t)0x4C3FDFF3, - (q31_t)0x66CF811F, (q31_t)0x471CECE6, (q31_t)0x6A6D98A4, - (q31_t)0x41CE1E64, (q31_t)0x6DCA0D14, (q31_t)0x3C56BA70, - (q31_t)0x70E2CBC6, (q31_t)0x36BA2013, (q31_t)0x73B5EBD0, - (q31_t)0x30FBC54D, (q31_t)0x7641AF3C, (q31_t)0x2B1F34EB, - (q31_t)0x78848413, (q31_t)0x25280C5D, (q31_t)0x7A7D055B, - (q31_t)0x1F19F97B, (q31_t)0x7C29FBEE, (q31_t)0x18F8B83C, - (q31_t)0x7D8A5F3F, (q31_t)0x12C8106E, (q31_t)0x7E9D55FC, - (q31_t)0x0C8BD35E, (q31_t)0x7F62368F, (q31_t)0x0647D97C, - (q31_t)0x7FD8878D, (q31_t)0x00000000, (q31_t)0x7FFFFFFF, - (q31_t)0xF9B82683, (q31_t)0x7FD8878D, (q31_t)0xF3742CA1, - (q31_t)0x7F62368F, (q31_t)0xED37EF91, (q31_t)0x7E9D55FC, - (q31_t)0xE70747C3, (q31_t)0x7D8A5F3F, (q31_t)0xE0E60684, - (q31_t)0x7C29FBEE, (q31_t)0xDAD7F3A2, (q31_t)0x7A7D055B, - (q31_t)0xD4E0CB14, (q31_t)0x78848413, (q31_t)0xCF043AB2, - (q31_t)0x7641AF3C, (q31_t)0xC945DFEC, (q31_t)0x73B5EBD0, - (q31_t)0xC3A9458F, (q31_t)0x70E2CBC6, (q31_t)0xBE31E19B, - (q31_t)0x6DCA0D14, (q31_t)0xB8E31319, (q31_t)0x6A6D98A4, - (q31_t)0xB3C0200C, (q31_t)0x66CF811F, (q31_t)0xAECC336B, - (q31_t)0x62F201AC, (q31_t)0xAA0A5B2D, (q31_t)0x5ED77C89, - (q31_t)0xA57D8666, (q31_t)0x5A82799A, (q31_t)0xA1288376, - (q31_t)0x55F5A4D2, (q31_t)0x9D0DFE53, (q31_t)0x5133CC94, - (q31_t)0x99307EE0, (q31_t)0x4C3FDFF3, (q31_t)0x9592675B, - (q31_t)0x471CECE6, (q31_t)0x9235F2EB, (q31_t)0x41CE1E64, - (q31_t)0x8F1D343A, (q31_t)0x3C56BA70, (q31_t)0x8C4A142F, - (q31_t)0x36BA2013, (q31_t)0x89BE50C3, (q31_t)0x30FBC54D, - (q31_t)0x877B7BEC, (q31_t)0x2B1F34EB, (q31_t)0x8582FAA4, - (q31_t)0x25280C5D, (q31_t)0x83D60411, (q31_t)0x1F19F97B, - (q31_t)0x8275A0C0, (q31_t)0x18F8B83C, (q31_t)0x8162AA03, - (q31_t)0x12C8106E, (q31_t)0x809DC970, (q31_t)0x0C8BD35E, - (q31_t)0x80277872, (q31_t)0x0647D97C, (q31_t)0x80000000, - (q31_t)0x00000000, (q31_t)0x80277872, (q31_t)0xF9B82683, - (q31_t)0x809DC970, (q31_t)0xF3742CA1, (q31_t)0x8162AA03, - (q31_t)0xED37EF91, (q31_t)0x8275A0C0, (q31_t)0xE70747C3, - (q31_t)0x83D60411, (q31_t)0xE0E60684, (q31_t)0x8582FAA4, - (q31_t)0xDAD7F3A2, (q31_t)0x877B7BEC, (q31_t)0xD4E0CB14, - (q31_t)0x89BE50C3, (q31_t)0xCF043AB2, (q31_t)0x8C4A142F, - (q31_t)0xC945DFEC, (q31_t)0x8F1D343A, (q31_t)0xC3A9458F, - (q31_t)0x9235F2EB, (q31_t)0xBE31E19B, (q31_t)0x9592675B, - (q31_t)0xB8E31319, (q31_t)0x99307EE0, (q31_t)0xB3C0200C, - (q31_t)0x9D0DFE53, (q31_t)0xAECC336B, (q31_t)0xA1288376, - (q31_t)0xAA0A5B2D, (q31_t)0xA57D8666, (q31_t)0xA57D8666, - (q31_t)0xAA0A5B2D, (q31_t)0xA1288376, (q31_t)0xAECC336B, - (q31_t)0x9D0DFE53, (q31_t)0xB3C0200C, (q31_t)0x99307EE0, - (q31_t)0xB8E31319, (q31_t)0x9592675B, (q31_t)0xBE31E19B, - (q31_t)0x9235F2EB, (q31_t)0xC3A9458F, (q31_t)0x8F1D343A, - (q31_t)0xC945DFEC, (q31_t)0x8C4A142F, (q31_t)0xCF043AB2, - (q31_t)0x89BE50C3, (q31_t)0xD4E0CB14, (q31_t)0x877B7BEC, - (q31_t)0xDAD7F3A2, (q31_t)0x8582FAA4, (q31_t)0xE0E60684, - (q31_t)0x83D60411, (q31_t)0xE70747C3, (q31_t)0x8275A0C0, - (q31_t)0xED37EF91, (q31_t)0x8162AA03, (q31_t)0xF3742CA1, - (q31_t)0x809DC970, (q31_t)0xF9B82683, (q31_t)0x80277872 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_256) -/** - @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, 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] = { - (q31_t)0x7FFFFFFF, (q31_t)0x00000000, (q31_t)0x7FF62182, - (q31_t)0x03242ABF, (q31_t)0x7FD8878D, (q31_t)0x0647D97C, - (q31_t)0x7FA736B4, (q31_t)0x096A9049, (q31_t)0x7F62368F, - (q31_t)0x0C8BD35E, (q31_t)0x7F0991C3, (q31_t)0x0FAB272B, - (q31_t)0x7E9D55FC, (q31_t)0x12C8106E, (q31_t)0x7E1D93E9, - (q31_t)0x15E21444, (q31_t)0x7D8A5F3F, (q31_t)0x18F8B83C, - (q31_t)0x7CE3CEB1, (q31_t)0x1C0B826A, (q31_t)0x7C29FBEE, - (q31_t)0x1F19F97B, (q31_t)0x7B5D039D, (q31_t)0x2223A4C5, - (q31_t)0x7A7D055B, (q31_t)0x25280C5D, (q31_t)0x798A23B1, - (q31_t)0x2826B928, (q31_t)0x78848413, (q31_t)0x2B1F34EB, - (q31_t)0x776C4EDB, (q31_t)0x2E110A62, (q31_t)0x7641AF3C, - (q31_t)0x30FBC54D, (q31_t)0x7504D345, (q31_t)0x33DEF287, - (q31_t)0x73B5EBD0, (q31_t)0x36BA2013, (q31_t)0x72552C84, - (q31_t)0x398CDD32, (q31_t)0x70E2CBC6, (q31_t)0x3C56BA70, - (q31_t)0x6F5F02B1, (q31_t)0x3F1749B7, (q31_t)0x6DCA0D14, - (q31_t)0x41CE1E64, (q31_t)0x6C242960, (q31_t)0x447ACD50, - (q31_t)0x6A6D98A4, (q31_t)0x471CECE6, (q31_t)0x68A69E81, - (q31_t)0x49B41533, (q31_t)0x66CF811F, (q31_t)0x4C3FDFF3, - (q31_t)0x64E88926, (q31_t)0x4EBFE8A4, (q31_t)0x62F201AC, - (q31_t)0x5133CC94, (q31_t)0x60EC3830, (q31_t)0x539B2AEF, - (q31_t)0x5ED77C89, (q31_t)0x55F5A4D2, (q31_t)0x5CB420DF, - (q31_t)0x5842DD54, (q31_t)0x5A82799A, (q31_t)0x5A82799A, - (q31_t)0x5842DD54, (q31_t)0x5CB420DF, (q31_t)0x55F5A4D2, - (q31_t)0x5ED77C89, (q31_t)0x539B2AEF, (q31_t)0x60EC3830, - (q31_t)0x5133CC94, (q31_t)0x62F201AC, (q31_t)0x4EBFE8A4, - (q31_t)0x64E88926, (q31_t)0x4C3FDFF3, (q31_t)0x66CF811F, - (q31_t)0x49B41533, (q31_t)0x68A69E81, (q31_t)0x471CECE6, - (q31_t)0x6A6D98A4, (q31_t)0x447ACD50, (q31_t)0x6C242960, - (q31_t)0x41CE1E64, (q31_t)0x6DCA0D14, (q31_t)0x3F1749B7, - (q31_t)0x6F5F02B1, (q31_t)0x3C56BA70, (q31_t)0x70E2CBC6, - (q31_t)0x398CDD32, (q31_t)0x72552C84, (q31_t)0x36BA2013, - (q31_t)0x73B5EBD0, (q31_t)0x33DEF287, (q31_t)0x7504D345, - (q31_t)0x30FBC54D, (q31_t)0x7641AF3C, (q31_t)0x2E110A62, - (q31_t)0x776C4EDB, (q31_t)0x2B1F34EB, (q31_t)0x78848413, - (q31_t)0x2826B928, (q31_t)0x798A23B1, (q31_t)0x25280C5D, - (q31_t)0x7A7D055B, (q31_t)0x2223A4C5, (q31_t)0x7B5D039D, - (q31_t)0x1F19F97B, (q31_t)0x7C29FBEE, (q31_t)0x1C0B826A, - (q31_t)0x7CE3CEB1, (q31_t)0x18F8B83C, (q31_t)0x7D8A5F3F, - (q31_t)0x15E21444, (q31_t)0x7E1D93E9, (q31_t)0x12C8106E, - (q31_t)0x7E9D55FC, (q31_t)0x0FAB272B, (q31_t)0x7F0991C3, - (q31_t)0x0C8BD35E, (q31_t)0x7F62368F, (q31_t)0x096A9049, - (q31_t)0x7FA736B4, (q31_t)0x0647D97C, (q31_t)0x7FD8878D, - (q31_t)0x03242ABF, (q31_t)0x7FF62182, (q31_t)0x00000000, - (q31_t)0x7FFFFFFF, (q31_t)0xFCDBD541, (q31_t)0x7FF62182, - (q31_t)0xF9B82683, (q31_t)0x7FD8878D, (q31_t)0xF6956FB6, - (q31_t)0x7FA736B4, (q31_t)0xF3742CA1, (q31_t)0x7F62368F, - (q31_t)0xF054D8D4, (q31_t)0x7F0991C3, (q31_t)0xED37EF91, - (q31_t)0x7E9D55FC, (q31_t)0xEA1DEBBB, (q31_t)0x7E1D93E9, - (q31_t)0xE70747C3, (q31_t)0x7D8A5F3F, (q31_t)0xE3F47D95, - (q31_t)0x7CE3CEB1, (q31_t)0xE0E60684, (q31_t)0x7C29FBEE, - (q31_t)0xDDDC5B3A, (q31_t)0x7B5D039D, (q31_t)0xDAD7F3A2, - (q31_t)0x7A7D055B, (q31_t)0xD7D946D7, (q31_t)0x798A23B1, - (q31_t)0xD4E0CB14, (q31_t)0x78848413, (q31_t)0xD1EEF59E, - (q31_t)0x776C4EDB, (q31_t)0xCF043AB2, (q31_t)0x7641AF3C, - (q31_t)0xCC210D78, (q31_t)0x7504D345, (q31_t)0xC945DFEC, - (q31_t)0x73B5EBD0, (q31_t)0xC67322CD, (q31_t)0x72552C84, - (q31_t)0xC3A9458F, (q31_t)0x70E2CBC6, (q31_t)0xC0E8B648, - (q31_t)0x6F5F02B1, (q31_t)0xBE31E19B, (q31_t)0x6DCA0D14, - (q31_t)0xBB8532AF, (q31_t)0x6C242960, (q31_t)0xB8E31319, - (q31_t)0x6A6D98A4, (q31_t)0xB64BEACC, (q31_t)0x68A69E81, - (q31_t)0xB3C0200C, (q31_t)0x66CF811F, (q31_t)0xB140175B, - (q31_t)0x64E88926, (q31_t)0xAECC336B, (q31_t)0x62F201AC, - (q31_t)0xAC64D510, (q31_t)0x60EC3830, (q31_t)0xAA0A5B2D, - (q31_t)0x5ED77C89, (q31_t)0xA7BD22AB, (q31_t)0x5CB420DF, - (q31_t)0xA57D8666, (q31_t)0x5A82799A, (q31_t)0xA34BDF20, - (q31_t)0x5842DD54, (q31_t)0xA1288376, (q31_t)0x55F5A4D2, - (q31_t)0x9F13C7D0, (q31_t)0x539B2AEF, (q31_t)0x9D0DFE53, - (q31_t)0x5133CC94, (q31_t)0x9B1776D9, (q31_t)0x4EBFE8A4, - (q31_t)0x99307EE0, (q31_t)0x4C3FDFF3, (q31_t)0x9759617E, - (q31_t)0x49B41533, (q31_t)0x9592675B, (q31_t)0x471CECE6, - (q31_t)0x93DBD69F, (q31_t)0x447ACD50, (q31_t)0x9235F2EB, - (q31_t)0x41CE1E64, (q31_t)0x90A0FD4E, (q31_t)0x3F1749B7, - (q31_t)0x8F1D343A, (q31_t)0x3C56BA70, (q31_t)0x8DAAD37B, - (q31_t)0x398CDD32, (q31_t)0x8C4A142F, (q31_t)0x36BA2013, - (q31_t)0x8AFB2CBA, (q31_t)0x33DEF287, (q31_t)0x89BE50C3, - (q31_t)0x30FBC54D, (q31_t)0x8893B124, (q31_t)0x2E110A62, - (q31_t)0x877B7BEC, (q31_t)0x2B1F34EB, (q31_t)0x8675DC4E, - (q31_t)0x2826B928, (q31_t)0x8582FAA4, (q31_t)0x25280C5D, - (q31_t)0x84A2FC62, (q31_t)0x2223A4C5, (q31_t)0x83D60411, - (q31_t)0x1F19F97B, (q31_t)0x831C314E, (q31_t)0x1C0B826A, - (q31_t)0x8275A0C0, (q31_t)0x18F8B83C, (q31_t)0x81E26C16, - (q31_t)0x15E21444, (q31_t)0x8162AA03, (q31_t)0x12C8106E, - (q31_t)0x80F66E3C, (q31_t)0x0FAB272B, (q31_t)0x809DC970, - (q31_t)0x0C8BD35E, (q31_t)0x8058C94C, (q31_t)0x096A9049, - (q31_t)0x80277872, (q31_t)0x0647D97C, (q31_t)0x8009DE7D, - (q31_t)0x03242ABF, (q31_t)0x80000000, (q31_t)0x00000000, - (q31_t)0x8009DE7D, (q31_t)0xFCDBD541, (q31_t)0x80277872, - (q31_t)0xF9B82683, (q31_t)0x8058C94C, (q31_t)0xF6956FB6, - (q31_t)0x809DC970, (q31_t)0xF3742CA1, (q31_t)0x80F66E3C, - (q31_t)0xF054D8D4, (q31_t)0x8162AA03, (q31_t)0xED37EF91, - (q31_t)0x81E26C16, (q31_t)0xEA1DEBBB, (q31_t)0x8275A0C0, - (q31_t)0xE70747C3, (q31_t)0x831C314E, (q31_t)0xE3F47D95, - (q31_t)0x83D60411, (q31_t)0xE0E60684, (q31_t)0x84A2FC62, - (q31_t)0xDDDC5B3A, (q31_t)0x8582FAA4, (q31_t)0xDAD7F3A2, - (q31_t)0x8675DC4E, (q31_t)0xD7D946D7, (q31_t)0x877B7BEC, - (q31_t)0xD4E0CB14, (q31_t)0x8893B124, (q31_t)0xD1EEF59E, - (q31_t)0x89BE50C3, (q31_t)0xCF043AB2, (q31_t)0x8AFB2CBA, - (q31_t)0xCC210D78, (q31_t)0x8C4A142F, (q31_t)0xC945DFEC, - (q31_t)0x8DAAD37B, (q31_t)0xC67322CD, (q31_t)0x8F1D343A, - (q31_t)0xC3A9458F, (q31_t)0x90A0FD4E, (q31_t)0xC0E8B648, - (q31_t)0x9235F2EB, (q31_t)0xBE31E19B, (q31_t)0x93DBD69F, - (q31_t)0xBB8532AF, (q31_t)0x9592675B, (q31_t)0xB8E31319, - (q31_t)0x9759617E, (q31_t)0xB64BEACC, (q31_t)0x99307EE0, - (q31_t)0xB3C0200C, (q31_t)0x9B1776D9, (q31_t)0xB140175B, - (q31_t)0x9D0DFE53, (q31_t)0xAECC336B, (q31_t)0x9F13C7D0, - (q31_t)0xAC64D510, (q31_t)0xA1288376, (q31_t)0xAA0A5B2D, - (q31_t)0xA34BDF20, (q31_t)0xA7BD22AB, (q31_t)0xA57D8666, - (q31_t)0xA57D8666, (q31_t)0xA7BD22AB, (q31_t)0xA34BDF20, - (q31_t)0xAA0A5B2D, (q31_t)0xA1288376, (q31_t)0xAC64D510, - (q31_t)0x9F13C7D0, (q31_t)0xAECC336B, (q31_t)0x9D0DFE53, - (q31_t)0xB140175B, (q31_t)0x9B1776D9, (q31_t)0xB3C0200C, - (q31_t)0x99307EE0, (q31_t)0xB64BEACC, (q31_t)0x9759617E, - (q31_t)0xB8E31319, (q31_t)0x9592675B, (q31_t)0xBB8532AF, - (q31_t)0x93DBD69F, (q31_t)0xBE31E19B, (q31_t)0x9235F2EB, - (q31_t)0xC0E8B648, (q31_t)0x90A0FD4E, (q31_t)0xC3A9458F, - (q31_t)0x8F1D343A, (q31_t)0xC67322CD, (q31_t)0x8DAAD37B, - (q31_t)0xC945DFEC, (q31_t)0x8C4A142F, (q31_t)0xCC210D78, - (q31_t)0x8AFB2CBA, (q31_t)0xCF043AB2, (q31_t)0x89BE50C3, - (q31_t)0xD1EEF59E, (q31_t)0x8893B124, (q31_t)0xD4E0CB14, - (q31_t)0x877B7BEC, (q31_t)0xD7D946D7, (q31_t)0x8675DC4E, - (q31_t)0xDAD7F3A2, (q31_t)0x8582FAA4, (q31_t)0xDDDC5B3A, - (q31_t)0x84A2FC62, (q31_t)0xE0E60684, (q31_t)0x83D60411, - (q31_t)0xE3F47D95, (q31_t)0x831C314E, (q31_t)0xE70747C3, - (q31_t)0x8275A0C0, (q31_t)0xEA1DEBBB, (q31_t)0x81E26C16, - (q31_t)0xED37EF91, (q31_t)0x8162AA03, (q31_t)0xF054D8D4, - (q31_t)0x80F66E3C, (q31_t)0xF3742CA1, (q31_t)0x809DC970, - (q31_t)0xF6956FB6, (q31_t)0x8058C94C, (q31_t)0xF9B82683, - (q31_t)0x80277872, (q31_t)0xFCDBD541, (q31_t)0x8009DE7D -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_512) -/** - @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, 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] = { - (q31_t)0x7FFFFFFF, (q31_t)0x00000000, (q31_t)0x7FFD885A, - (q31_t)0x01921D1F, (q31_t)0x7FF62182, (q31_t)0x03242ABF, - (q31_t)0x7FE9CBC0, (q31_t)0x04B6195D, (q31_t)0x7FD8878D, - (q31_t)0x0647D97C, (q31_t)0x7FC25596, (q31_t)0x07D95B9E, - (q31_t)0x7FA736B4, (q31_t)0x096A9049, (q31_t)0x7F872BF3, - (q31_t)0x0AFB6805, (q31_t)0x7F62368F, (q31_t)0x0C8BD35E, - (q31_t)0x7F3857F5, (q31_t)0x0E1BC2E3, (q31_t)0x7F0991C3, - (q31_t)0x0FAB272B, (q31_t)0x7ED5E5C6, (q31_t)0x1139F0CE, - (q31_t)0x7E9D55FC, (q31_t)0x12C8106E, (q31_t)0x7E5FE493, - (q31_t)0x145576B1, (q31_t)0x7E1D93E9, (q31_t)0x15E21444, - (q31_t)0x7DD6668E, (q31_t)0x176DD9DE, (q31_t)0x7D8A5F3F, - (q31_t)0x18F8B83C, (q31_t)0x7D3980EC, (q31_t)0x1A82A025, - (q31_t)0x7CE3CEB1, (q31_t)0x1C0B826A, (q31_t)0x7C894BDD, - (q31_t)0x1D934FE5, (q31_t)0x7C29FBEE, (q31_t)0x1F19F97B, - (q31_t)0x7BC5E28F, (q31_t)0x209F701C, (q31_t)0x7B5D039D, - (q31_t)0x2223A4C5, (q31_t)0x7AEF6323, (q31_t)0x23A6887E, - (q31_t)0x7A7D055B, (q31_t)0x25280C5D, (q31_t)0x7A05EEAD, - (q31_t)0x26A82185, (q31_t)0x798A23B1, (q31_t)0x2826B928, - (q31_t)0x7909A92C, (q31_t)0x29A3C484, (q31_t)0x78848413, - (q31_t)0x2B1F34EB, (q31_t)0x77FAB988, (q31_t)0x2C98FBBA, - (q31_t)0x776C4EDB, (q31_t)0x2E110A62, (q31_t)0x76D94988, - (q31_t)0x2F875262, (q31_t)0x7641AF3C, (q31_t)0x30FBC54D, - (q31_t)0x75A585CF, (q31_t)0x326E54C7, (q31_t)0x7504D345, - (q31_t)0x33DEF287, (q31_t)0x745F9DD1, (q31_t)0x354D9056, - (q31_t)0x73B5EBD0, (q31_t)0x36BA2013, (q31_t)0x7307C3D0, - (q31_t)0x382493B0, (q31_t)0x72552C84, (q31_t)0x398CDD32, - (q31_t)0x719E2CD2, (q31_t)0x3AF2EEB7, (q31_t)0x70E2CBC6, - (q31_t)0x3C56BA70, (q31_t)0x70231099, (q31_t)0x3DB832A5, - (q31_t)0x6F5F02B1, (q31_t)0x3F1749B7, (q31_t)0x6E96A99C, - (q31_t)0x4073F21D, (q31_t)0x6DCA0D14, (q31_t)0x41CE1E64, - (q31_t)0x6CF934FB, (q31_t)0x4325C135, (q31_t)0x6C242960, - (q31_t)0x447ACD50, (q31_t)0x6B4AF278, (q31_t)0x45CD358F, - (q31_t)0x6A6D98A4, (q31_t)0x471CECE6, (q31_t)0x698C246C, - (q31_t)0x4869E664, (q31_t)0x68A69E81, (q31_t)0x49B41533, - (q31_t)0x67BD0FBC, (q31_t)0x4AFB6C97, (q31_t)0x66CF811F, - (q31_t)0x4C3FDFF3, (q31_t)0x65DDFBD3, (q31_t)0x4D8162C4, - (q31_t)0x64E88926, (q31_t)0x4EBFE8A4, (q31_t)0x63EF328F, - (q31_t)0x4FFB654D, (q31_t)0x62F201AC, (q31_t)0x5133CC94, - (q31_t)0x61F1003E, (q31_t)0x5269126E, (q31_t)0x60EC3830, - (q31_t)0x539B2AEF, (q31_t)0x5FE3B38D, (q31_t)0x54CA0A4A, - (q31_t)0x5ED77C89, (q31_t)0x55F5A4D2, (q31_t)0x5DC79D7C, - (q31_t)0x571DEEF9, (q31_t)0x5CB420DF, (q31_t)0x5842DD54, - (q31_t)0x5B9D1153, (q31_t)0x59646497, (q31_t)0x5A82799A, - (q31_t)0x5A82799A, (q31_t)0x59646497, (q31_t)0x5B9D1153, - (q31_t)0x5842DD54, (q31_t)0x5CB420DF, (q31_t)0x571DEEF9, - (q31_t)0x5DC79D7C, (q31_t)0x55F5A4D2, (q31_t)0x5ED77C89, - (q31_t)0x54CA0A4A, (q31_t)0x5FE3B38D, (q31_t)0x539B2AEF, - (q31_t)0x60EC3830, (q31_t)0x5269126E, (q31_t)0x61F1003E, - (q31_t)0x5133CC94, (q31_t)0x62F201AC, (q31_t)0x4FFB654D, - (q31_t)0x63EF328F, (q31_t)0x4EBFE8A4, (q31_t)0x64E88926, - (q31_t)0x4D8162C4, (q31_t)0x65DDFBD3, (q31_t)0x4C3FDFF3, - (q31_t)0x66CF811F, (q31_t)0x4AFB6C97, (q31_t)0x67BD0FBC, - (q31_t)0x49B41533, (q31_t)0x68A69E81, (q31_t)0x4869E664, - (q31_t)0x698C246C, (q31_t)0x471CECE6, (q31_t)0x6A6D98A4, - (q31_t)0x45CD358F, (q31_t)0x6B4AF278, (q31_t)0x447ACD50, - (q31_t)0x6C242960, (q31_t)0x4325C135, (q31_t)0x6CF934FB, - (q31_t)0x41CE1E64, (q31_t)0x6DCA0D14, (q31_t)0x4073F21D, - (q31_t)0x6E96A99C, (q31_t)0x3F1749B7, (q31_t)0x6F5F02B1, - (q31_t)0x3DB832A5, (q31_t)0x70231099, (q31_t)0x3C56BA70, - (q31_t)0x70E2CBC6, (q31_t)0x3AF2EEB7, (q31_t)0x719E2CD2, - (q31_t)0x398CDD32, (q31_t)0x72552C84, (q31_t)0x382493B0, - (q31_t)0x7307C3D0, (q31_t)0x36BA2013, (q31_t)0x73B5EBD0, - (q31_t)0x354D9056, (q31_t)0x745F9DD1, (q31_t)0x33DEF287, - (q31_t)0x7504D345, (q31_t)0x326E54C7, (q31_t)0x75A585CF, - (q31_t)0x30FBC54D, (q31_t)0x7641AF3C, (q31_t)0x2F875262, - (q31_t)0x76D94988, (q31_t)0x2E110A62, (q31_t)0x776C4EDB, - (q31_t)0x2C98FBBA, (q31_t)0x77FAB988, (q31_t)0x2B1F34EB, - (q31_t)0x78848413, (q31_t)0x29A3C484, (q31_t)0x7909A92C, - (q31_t)0x2826B928, (q31_t)0x798A23B1, (q31_t)0x26A82185, - (q31_t)0x7A05EEAD, (q31_t)0x25280C5D, (q31_t)0x7A7D055B, - (q31_t)0x23A6887E, (q31_t)0x7AEF6323, (q31_t)0x2223A4C5, - (q31_t)0x7B5D039D, (q31_t)0x209F701C, (q31_t)0x7BC5E28F, - (q31_t)0x1F19F97B, (q31_t)0x7C29FBEE, (q31_t)0x1D934FE5, - (q31_t)0x7C894BDD, (q31_t)0x1C0B826A, (q31_t)0x7CE3CEB1, - (q31_t)0x1A82A025, (q31_t)0x7D3980EC, (q31_t)0x18F8B83C, - (q31_t)0x7D8A5F3F, (q31_t)0x176DD9DE, (q31_t)0x7DD6668E, - (q31_t)0x15E21444, (q31_t)0x7E1D93E9, (q31_t)0x145576B1, - (q31_t)0x7E5FE493, (q31_t)0x12C8106E, (q31_t)0x7E9D55FC, - (q31_t)0x1139F0CE, (q31_t)0x7ED5E5C6, (q31_t)0x0FAB272B, - (q31_t)0x7F0991C3, (q31_t)0x0E1BC2E3, (q31_t)0x7F3857F5, - (q31_t)0x0C8BD35E, (q31_t)0x7F62368F, (q31_t)0x0AFB6805, - (q31_t)0x7F872BF3, (q31_t)0x096A9049, (q31_t)0x7FA736B4, - (q31_t)0x07D95B9E, (q31_t)0x7FC25596, (q31_t)0x0647D97C, - (q31_t)0x7FD8878D, (q31_t)0x04B6195D, (q31_t)0x7FE9CBC0, - (q31_t)0x03242ABF, (q31_t)0x7FF62182, (q31_t)0x01921D1F, - (q31_t)0x7FFD885A, (q31_t)0x00000000, (q31_t)0x7FFFFFFF, - (q31_t)0xFE6DE2E0, (q31_t)0x7FFD885A, (q31_t)0xFCDBD541, - (q31_t)0x7FF62182, (q31_t)0xFB49E6A2, (q31_t)0x7FE9CBC0, - (q31_t)0xF9B82683, (q31_t)0x7FD8878D, (q31_t)0xF826A461, - (q31_t)0x7FC25596, (q31_t)0xF6956FB6, (q31_t)0x7FA736B4, - (q31_t)0xF50497FA, (q31_t)0x7F872BF3, (q31_t)0xF3742CA1, - (q31_t)0x7F62368F, (q31_t)0xF1E43D1C, (q31_t)0x7F3857F5, - (q31_t)0xF054D8D4, (q31_t)0x7F0991C3, (q31_t)0xEEC60F31, - (q31_t)0x7ED5E5C6, (q31_t)0xED37EF91, (q31_t)0x7E9D55FC, - (q31_t)0xEBAA894E, (q31_t)0x7E5FE493, (q31_t)0xEA1DEBBB, - (q31_t)0x7E1D93E9, (q31_t)0xE8922621, (q31_t)0x7DD6668E, - (q31_t)0xE70747C3, (q31_t)0x7D8A5F3F, (q31_t)0xE57D5FDA, - (q31_t)0x7D3980EC, (q31_t)0xE3F47D95, (q31_t)0x7CE3CEB1, - (q31_t)0xE26CB01A, (q31_t)0x7C894BDD, (q31_t)0xE0E60684, - (q31_t)0x7C29FBEE, (q31_t)0xDF608FE3, (q31_t)0x7BC5E28F, - (q31_t)0xDDDC5B3A, (q31_t)0x7B5D039D, (q31_t)0xDC597781, - (q31_t)0x7AEF6323, (q31_t)0xDAD7F3A2, (q31_t)0x7A7D055B, - (q31_t)0xD957DE7A, (q31_t)0x7A05EEAD, (q31_t)0xD7D946D7, - (q31_t)0x798A23B1, (q31_t)0xD65C3B7B, (q31_t)0x7909A92C, - (q31_t)0xD4E0CB14, (q31_t)0x78848413, (q31_t)0xD3670445, - (q31_t)0x77FAB988, (q31_t)0xD1EEF59E, (q31_t)0x776C4EDB, - (q31_t)0xD078AD9D, (q31_t)0x76D94988, (q31_t)0xCF043AB2, - (q31_t)0x7641AF3C, (q31_t)0xCD91AB38, (q31_t)0x75A585CF, - (q31_t)0xCC210D78, (q31_t)0x7504D345, (q31_t)0xCAB26FA9, - (q31_t)0x745F9DD1, (q31_t)0xC945DFEC, (q31_t)0x73B5EBD0, - (q31_t)0xC7DB6C50, (q31_t)0x7307C3D0, (q31_t)0xC67322CD, - (q31_t)0x72552C84, (q31_t)0xC50D1148, (q31_t)0x719E2CD2, - (q31_t)0xC3A9458F, (q31_t)0x70E2CBC6, (q31_t)0xC247CD5A, - (q31_t)0x70231099, (q31_t)0xC0E8B648, (q31_t)0x6F5F02B1, - (q31_t)0xBF8C0DE2, (q31_t)0x6E96A99C, (q31_t)0xBE31E19B, - (q31_t)0x6DCA0D14, (q31_t)0xBCDA3ECA, (q31_t)0x6CF934FB, - (q31_t)0xBB8532AF, (q31_t)0x6C242960, (q31_t)0xBA32CA70, - (q31_t)0x6B4AF278, (q31_t)0xB8E31319, (q31_t)0x6A6D98A4, - (q31_t)0xB796199B, (q31_t)0x698C246C, (q31_t)0xB64BEACC, - (q31_t)0x68A69E81, (q31_t)0xB5049368, (q31_t)0x67BD0FBC, - (q31_t)0xB3C0200C, (q31_t)0x66CF811F, (q31_t)0xB27E9D3B, - (q31_t)0x65DDFBD3, (q31_t)0xB140175B, (q31_t)0x64E88926, - (q31_t)0xB0049AB2, (q31_t)0x63EF328F, (q31_t)0xAECC336B, - (q31_t)0x62F201AC, (q31_t)0xAD96ED91, (q31_t)0x61F1003E, - (q31_t)0xAC64D510, (q31_t)0x60EC3830, (q31_t)0xAB35F5B5, - (q31_t)0x5FE3B38D, (q31_t)0xAA0A5B2D, (q31_t)0x5ED77C89, - (q31_t)0xA8E21106, (q31_t)0x5DC79D7C, (q31_t)0xA7BD22AB, - (q31_t)0x5CB420DF, (q31_t)0xA69B9B68, (q31_t)0x5B9D1153, - (q31_t)0xA57D8666, (q31_t)0x5A82799A, (q31_t)0xA462EEAC, - (q31_t)0x59646497, (q31_t)0xA34BDF20, (q31_t)0x5842DD54, - (q31_t)0xA2386283, (q31_t)0x571DEEF9, (q31_t)0xA1288376, - (q31_t)0x55F5A4D2, (q31_t)0xA01C4C72, (q31_t)0x54CA0A4A, - (q31_t)0x9F13C7D0, (q31_t)0x539B2AEF, (q31_t)0x9E0EFFC1, - (q31_t)0x5269126E, (q31_t)0x9D0DFE53, (q31_t)0x5133CC94, - (q31_t)0x9C10CD70, (q31_t)0x4FFB654D, (q31_t)0x9B1776D9, - (q31_t)0x4EBFE8A4, (q31_t)0x9A22042C, (q31_t)0x4D8162C4, - (q31_t)0x99307EE0, (q31_t)0x4C3FDFF3, (q31_t)0x9842F043, - (q31_t)0x4AFB6C97, (q31_t)0x9759617E, (q31_t)0x49B41533, - (q31_t)0x9673DB94, (q31_t)0x4869E664, (q31_t)0x9592675B, - (q31_t)0x471CECE6, (q31_t)0x94B50D87, (q31_t)0x45CD358F, - (q31_t)0x93DBD69F, (q31_t)0x447ACD50, (q31_t)0x9306CB04, - (q31_t)0x4325C135, (q31_t)0x9235F2EB, (q31_t)0x41CE1E64, - (q31_t)0x91695663, (q31_t)0x4073F21D, (q31_t)0x90A0FD4E, - (q31_t)0x3F1749B7, (q31_t)0x8FDCEF66, (q31_t)0x3DB832A5, - (q31_t)0x8F1D343A, (q31_t)0x3C56BA70, (q31_t)0x8E61D32D, - (q31_t)0x3AF2EEB7, (q31_t)0x8DAAD37B, (q31_t)0x398CDD32, - (q31_t)0x8CF83C30, (q31_t)0x382493B0, (q31_t)0x8C4A142F, - (q31_t)0x36BA2013, (q31_t)0x8BA0622F, (q31_t)0x354D9056, - (q31_t)0x8AFB2CBA, (q31_t)0x33DEF287, (q31_t)0x8A5A7A30, - (q31_t)0x326E54C7, (q31_t)0x89BE50C3, (q31_t)0x30FBC54D, - (q31_t)0x8926B677, (q31_t)0x2F875262, (q31_t)0x8893B124, - (q31_t)0x2E110A62, (q31_t)0x88054677, (q31_t)0x2C98FBBA, - (q31_t)0x877B7BEC, (q31_t)0x2B1F34EB, (q31_t)0x86F656D3, - (q31_t)0x29A3C484, (q31_t)0x8675DC4E, (q31_t)0x2826B928, - (q31_t)0x85FA1152, (q31_t)0x26A82185, (q31_t)0x8582FAA4, - (q31_t)0x25280C5D, (q31_t)0x85109CDC, (q31_t)0x23A6887E, - (q31_t)0x84A2FC62, (q31_t)0x2223A4C5, (q31_t)0x843A1D70, - (q31_t)0x209F701C, (q31_t)0x83D60411, (q31_t)0x1F19F97B, - (q31_t)0x8376B422, (q31_t)0x1D934FE5, (q31_t)0x831C314E, - (q31_t)0x1C0B826A, (q31_t)0x82C67F13, (q31_t)0x1A82A025, - (q31_t)0x8275A0C0, (q31_t)0x18F8B83C, (q31_t)0x82299971, - (q31_t)0x176DD9DE, (q31_t)0x81E26C16, (q31_t)0x15E21444, - (q31_t)0x81A01B6C, (q31_t)0x145576B1, (q31_t)0x8162AA03, - (q31_t)0x12C8106E, (q31_t)0x812A1A39, (q31_t)0x1139F0CE, - (q31_t)0x80F66E3C, (q31_t)0x0FAB272B, (q31_t)0x80C7A80A, - (q31_t)0x0E1BC2E3, (q31_t)0x809DC970, (q31_t)0x0C8BD35E, - (q31_t)0x8078D40D, (q31_t)0x0AFB6805, (q31_t)0x8058C94C, - (q31_t)0x096A9049, (q31_t)0x803DAA69, (q31_t)0x07D95B9E, - (q31_t)0x80277872, (q31_t)0x0647D97C, (q31_t)0x80163440, - (q31_t)0x04B6195D, (q31_t)0x8009DE7D, (q31_t)0x03242ABF, - (q31_t)0x800277A5, (q31_t)0x01921D1F, (q31_t)0x80000000, - (q31_t)0x00000000, (q31_t)0x800277A5, (q31_t)0xFE6DE2E0, - (q31_t)0x8009DE7D, (q31_t)0xFCDBD541, (q31_t)0x80163440, - (q31_t)0xFB49E6A2, (q31_t)0x80277872, (q31_t)0xF9B82683, - (q31_t)0x803DAA69, (q31_t)0xF826A461, (q31_t)0x8058C94C, - (q31_t)0xF6956FB6, (q31_t)0x8078D40D, (q31_t)0xF50497FA, - (q31_t)0x809DC970, (q31_t)0xF3742CA1, (q31_t)0x80C7A80A, - (q31_t)0xF1E43D1C, (q31_t)0x80F66E3C, (q31_t)0xF054D8D4, - (q31_t)0x812A1A39, (q31_t)0xEEC60F31, (q31_t)0x8162AA03, - (q31_t)0xED37EF91, (q31_t)0x81A01B6C, (q31_t)0xEBAA894E, - (q31_t)0x81E26C16, (q31_t)0xEA1DEBBB, (q31_t)0x82299971, - (q31_t)0xE8922621, (q31_t)0x8275A0C0, (q31_t)0xE70747C3, - (q31_t)0x82C67F13, (q31_t)0xE57D5FDA, (q31_t)0x831C314E, - (q31_t)0xE3F47D95, (q31_t)0x8376B422, (q31_t)0xE26CB01A, - (q31_t)0x83D60411, (q31_t)0xE0E60684, (q31_t)0x843A1D70, - (q31_t)0xDF608FE3, (q31_t)0x84A2FC62, (q31_t)0xDDDC5B3A, - (q31_t)0x85109CDC, (q31_t)0xDC597781, (q31_t)0x8582FAA4, - (q31_t)0xDAD7F3A2, (q31_t)0x85FA1152, (q31_t)0xD957DE7A, - (q31_t)0x8675DC4E, (q31_t)0xD7D946D7, (q31_t)0x86F656D3, - (q31_t)0xD65C3B7B, (q31_t)0x877B7BEC, (q31_t)0xD4E0CB14, - (q31_t)0x88054677, (q31_t)0xD3670445, (q31_t)0x8893B124, - (q31_t)0xD1EEF59E, (q31_t)0x8926B677, (q31_t)0xD078AD9D, - (q31_t)0x89BE50C3, (q31_t)0xCF043AB2, (q31_t)0x8A5A7A30, - (q31_t)0xCD91AB38, (q31_t)0x8AFB2CBA, (q31_t)0xCC210D78, - (q31_t)0x8BA0622F, (q31_t)0xCAB26FA9, (q31_t)0x8C4A142F, - (q31_t)0xC945DFEC, (q31_t)0x8CF83C30, (q31_t)0xC7DB6C50, - (q31_t)0x8DAAD37B, (q31_t)0xC67322CD, (q31_t)0x8E61D32D, - (q31_t)0xC50D1148, (q31_t)0x8F1D343A, (q31_t)0xC3A9458F, - (q31_t)0x8FDCEF66, (q31_t)0xC247CD5A, (q31_t)0x90A0FD4E, - (q31_t)0xC0E8B648, (q31_t)0x91695663, (q31_t)0xBF8C0DE2, - (q31_t)0x9235F2EB, (q31_t)0xBE31E19B, (q31_t)0x9306CB04, - (q31_t)0xBCDA3ECA, (q31_t)0x93DBD69F, (q31_t)0xBB8532AF, - (q31_t)0x94B50D87, (q31_t)0xBA32CA70, (q31_t)0x9592675B, - (q31_t)0xB8E31319, (q31_t)0x9673DB94, (q31_t)0xB796199B, - (q31_t)0x9759617E, (q31_t)0xB64BEACC, (q31_t)0x9842F043, - (q31_t)0xB5049368, (q31_t)0x99307EE0, (q31_t)0xB3C0200C, - (q31_t)0x9A22042C, (q31_t)0xB27E9D3B, (q31_t)0x9B1776D9, - (q31_t)0xB140175B, (q31_t)0x9C10CD70, (q31_t)0xB0049AB2, - (q31_t)0x9D0DFE53, (q31_t)0xAECC336B, (q31_t)0x9E0EFFC1, - (q31_t)0xAD96ED91, (q31_t)0x9F13C7D0, (q31_t)0xAC64D510, - (q31_t)0xA01C4C72, (q31_t)0xAB35F5B5, (q31_t)0xA1288376, - (q31_t)0xAA0A5B2D, (q31_t)0xA2386283, (q31_t)0xA8E21106, - (q31_t)0xA34BDF20, (q31_t)0xA7BD22AB, (q31_t)0xA462EEAC, - (q31_t)0xA69B9B68, (q31_t)0xA57D8666, (q31_t)0xA57D8666, - (q31_t)0xA69B9B68, (q31_t)0xA462EEAC, (q31_t)0xA7BD22AB, - (q31_t)0xA34BDF20, (q31_t)0xA8E21106, (q31_t)0xA2386283, - (q31_t)0xAA0A5B2D, (q31_t)0xA1288376, (q31_t)0xAB35F5B5, - (q31_t)0xA01C4C72, (q31_t)0xAC64D510, (q31_t)0x9F13C7D0, - (q31_t)0xAD96ED91, (q31_t)0x9E0EFFC1, (q31_t)0xAECC336B, - (q31_t)0x9D0DFE53, (q31_t)0xB0049AB2, (q31_t)0x9C10CD70, - (q31_t)0xB140175B, (q31_t)0x9B1776D9, (q31_t)0xB27E9D3B, - (q31_t)0x9A22042C, (q31_t)0xB3C0200C, (q31_t)0x99307EE0, - (q31_t)0xB5049368, (q31_t)0x9842F043, (q31_t)0xB64BEACC, - (q31_t)0x9759617E, (q31_t)0xB796199B, (q31_t)0x9673DB94, - (q31_t)0xB8E31319, (q31_t)0x9592675B, (q31_t)0xBA32CA70, - (q31_t)0x94B50D87, (q31_t)0xBB8532AF, (q31_t)0x93DBD69F, - (q31_t)0xBCDA3ECA, (q31_t)0x9306CB04, (q31_t)0xBE31E19B, - (q31_t)0x9235F2EB, (q31_t)0xBF8C0DE2, (q31_t)0x91695663, - (q31_t)0xC0E8B648, (q31_t)0x90A0FD4E, (q31_t)0xC247CD5A, - (q31_t)0x8FDCEF66, (q31_t)0xC3A9458F, (q31_t)0x8F1D343A, - (q31_t)0xC50D1148, (q31_t)0x8E61D32D, (q31_t)0xC67322CD, - (q31_t)0x8DAAD37B, (q31_t)0xC7DB6C50, (q31_t)0x8CF83C30, - (q31_t)0xC945DFEC, (q31_t)0x8C4A142F, (q31_t)0xCAB26FA9, - (q31_t)0x8BA0622F, (q31_t)0xCC210D78, (q31_t)0x8AFB2CBA, - (q31_t)0xCD91AB38, (q31_t)0x8A5A7A30, (q31_t)0xCF043AB2, - (q31_t)0x89BE50C3, (q31_t)0xD078AD9D, (q31_t)0x8926B677, - (q31_t)0xD1EEF59E, (q31_t)0x8893B124, (q31_t)0xD3670445, - (q31_t)0x88054677, (q31_t)0xD4E0CB14, (q31_t)0x877B7BEC, - (q31_t)0xD65C3B7B, (q31_t)0x86F656D3, (q31_t)0xD7D946D7, - (q31_t)0x8675DC4E, (q31_t)0xD957DE7A, (q31_t)0x85FA1152, - (q31_t)0xDAD7F3A2, (q31_t)0x8582FAA4, (q31_t)0xDC597781, - (q31_t)0x85109CDC, (q31_t)0xDDDC5B3A, (q31_t)0x84A2FC62, - (q31_t)0xDF608FE3, (q31_t)0x843A1D70, (q31_t)0xE0E60684, - (q31_t)0x83D60411, (q31_t)0xE26CB01A, (q31_t)0x8376B422, - (q31_t)0xE3F47D95, (q31_t)0x831C314E, (q31_t)0xE57D5FDA, - (q31_t)0x82C67F13, (q31_t)0xE70747C3, (q31_t)0x8275A0C0, - (q31_t)0xE8922621, (q31_t)0x82299971, (q31_t)0xEA1DEBBB, - (q31_t)0x81E26C16, (q31_t)0xEBAA894E, (q31_t)0x81A01B6C, - (q31_t)0xED37EF91, (q31_t)0x8162AA03, (q31_t)0xEEC60F31, - (q31_t)0x812A1A39, (q31_t)0xF054D8D4, (q31_t)0x80F66E3C, - (q31_t)0xF1E43D1C, (q31_t)0x80C7A80A, (q31_t)0xF3742CA1, - (q31_t)0x809DC970, (q31_t)0xF50497FA, (q31_t)0x8078D40D, - (q31_t)0xF6956FB6, (q31_t)0x8058C94C, (q31_t)0xF826A461, - (q31_t)0x803DAA69, (q31_t)0xF9B82683, (q31_t)0x80277872, - (q31_t)0xFB49E6A2, (q31_t)0x80163440, (q31_t)0xFCDBD541, - (q31_t)0x8009DE7D, (q31_t)0xFE6DE2E0, (q31_t)0x800277A5 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) -/** - @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, 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] = { - (q31_t)0x7FFFFFFF, (q31_t)0x00000000, (q31_t)0x7FFF6216, - (q31_t)0x00C90F88, (q31_t)0x7FFD885A, (q31_t)0x01921D1F, - (q31_t)0x7FFA72D1, (q31_t)0x025B26D7, (q31_t)0x7FF62182, - (q31_t)0x03242ABF, (q31_t)0x7FF09477, (q31_t)0x03ED26E6, - (q31_t)0x7FE9CBC0, (q31_t)0x04B6195D, (q31_t)0x7FE1C76B, - (q31_t)0x057F0034, (q31_t)0x7FD8878D, (q31_t)0x0647D97C, - (q31_t)0x7FCE0C3E, (q31_t)0x0710A344, (q31_t)0x7FC25596, - (q31_t)0x07D95B9E, (q31_t)0x7FB563B2, (q31_t)0x08A2009A, - (q31_t)0x7FA736B4, (q31_t)0x096A9049, (q31_t)0x7F97CEBC, - (q31_t)0x0A3308BC, (q31_t)0x7F872BF3, (q31_t)0x0AFB6805, - (q31_t)0x7F754E7F, (q31_t)0x0BC3AC35, (q31_t)0x7F62368F, - (q31_t)0x0C8BD35E, (q31_t)0x7F4DE450, (q31_t)0x0D53DB92, - (q31_t)0x7F3857F5, (q31_t)0x0E1BC2E3, (q31_t)0x7F2191B4, - (q31_t)0x0EE38765, (q31_t)0x7F0991C3, (q31_t)0x0FAB272B, - (q31_t)0x7EF0585F, (q31_t)0x1072A047, (q31_t)0x7ED5E5C6, - (q31_t)0x1139F0CE, (q31_t)0x7EBA3A39, (q31_t)0x120116D4, - (q31_t)0x7E9D55FC, (q31_t)0x12C8106E, (q31_t)0x7E7F3956, - (q31_t)0x138EDBB0, (q31_t)0x7E5FE493, (q31_t)0x145576B1, - (q31_t)0x7E3F57FE, (q31_t)0x151BDF85, (q31_t)0x7E1D93E9, - (q31_t)0x15E21444, (q31_t)0x7DFA98A7, (q31_t)0x16A81305, - (q31_t)0x7DD6668E, (q31_t)0x176DD9DE, (q31_t)0x7DB0FDF7, - (q31_t)0x183366E8, (q31_t)0x7D8A5F3F, (q31_t)0x18F8B83C, - (q31_t)0x7D628AC5, (q31_t)0x19BDCBF2, (q31_t)0x7D3980EC, - (q31_t)0x1A82A025, (q31_t)0x7D0F4218, (q31_t)0x1B4732EF, - (q31_t)0x7CE3CEB1, (q31_t)0x1C0B826A, (q31_t)0x7CB72724, - (q31_t)0x1CCF8CB3, (q31_t)0x7C894BDD, (q31_t)0x1D934FE5, - (q31_t)0x7C5A3D4F, (q31_t)0x1E56CA1E, (q31_t)0x7C29FBEE, - (q31_t)0x1F19F97B, (q31_t)0x7BF88830, (q31_t)0x1FDCDC1A, - (q31_t)0x7BC5E28F, (q31_t)0x209F701C, (q31_t)0x7B920B89, - (q31_t)0x2161B39F, (q31_t)0x7B5D039D, (q31_t)0x2223A4C5, - (q31_t)0x7B26CB4F, (q31_t)0x22E541AE, (q31_t)0x7AEF6323, - (q31_t)0x23A6887E, (q31_t)0x7AB6CBA3, (q31_t)0x24677757, - (q31_t)0x7A7D055B, (q31_t)0x25280C5D, (q31_t)0x7A4210D8, - (q31_t)0x25E845B5, (q31_t)0x7A05EEAD, (q31_t)0x26A82185, - (q31_t)0x79C89F6D, (q31_t)0x27679DF4, (q31_t)0x798A23B1, - (q31_t)0x2826B928, (q31_t)0x794A7C11, (q31_t)0x28E5714A, - (q31_t)0x7909A92C, (q31_t)0x29A3C484, (q31_t)0x78C7ABA1, - (q31_t)0x2A61B101, (q31_t)0x78848413, (q31_t)0x2B1F34EB, - (q31_t)0x78403328, (q31_t)0x2BDC4E6F, (q31_t)0x77FAB988, - (q31_t)0x2C98FBBA, (q31_t)0x77B417DF, (q31_t)0x2D553AFB, - (q31_t)0x776C4EDB, (q31_t)0x2E110A62, (q31_t)0x77235F2D, - (q31_t)0x2ECC681E, (q31_t)0x76D94988, (q31_t)0x2F875262, - (q31_t)0x768E0EA5, (q31_t)0x3041C760, (q31_t)0x7641AF3C, - (q31_t)0x30FBC54D, (q31_t)0x75F42C0A, (q31_t)0x31B54A5D, - (q31_t)0x75A585CF, (q31_t)0x326E54C7, (q31_t)0x7555BD4B, - (q31_t)0x3326E2C2, (q31_t)0x7504D345, (q31_t)0x33DEF287, - (q31_t)0x74B2C883, (q31_t)0x3496824F, (q31_t)0x745F9DD1, - (q31_t)0x354D9056, (q31_t)0x740B53FA, (q31_t)0x36041AD9, - (q31_t)0x73B5EBD0, (q31_t)0x36BA2013, (q31_t)0x735F6626, - (q31_t)0x376F9E46, (q31_t)0x7307C3D0, (q31_t)0x382493B0, - (q31_t)0x72AF05A6, (q31_t)0x38D8FE93, (q31_t)0x72552C84, - (q31_t)0x398CDD32, (q31_t)0x71FA3948, (q31_t)0x3A402DD1, - (q31_t)0x719E2CD2, (q31_t)0x3AF2EEB7, (q31_t)0x71410804, - (q31_t)0x3BA51E29, (q31_t)0x70E2CBC6, (q31_t)0x3C56BA70, - (q31_t)0x708378FE, (q31_t)0x3D07C1D5, (q31_t)0x70231099, - (q31_t)0x3DB832A5, (q31_t)0x6FC19385, (q31_t)0x3E680B2C, - (q31_t)0x6F5F02B1, (q31_t)0x3F1749B7, (q31_t)0x6EFB5F12, - (q31_t)0x3FC5EC97, (q31_t)0x6E96A99C, (q31_t)0x4073F21D, - (q31_t)0x6E30E349, (q31_t)0x4121589A, (q31_t)0x6DCA0D14, - (q31_t)0x41CE1E64, (q31_t)0x6D6227FA, (q31_t)0x427A41D0, - (q31_t)0x6CF934FB, (q31_t)0x4325C135, (q31_t)0x6C8F351C, - (q31_t)0x43D09AEC, (q31_t)0x6C242960, (q31_t)0x447ACD50, - (q31_t)0x6BB812D0, (q31_t)0x452456BC, (q31_t)0x6B4AF278, - (q31_t)0x45CD358F, (q31_t)0x6ADCC964, (q31_t)0x46756827, - (q31_t)0x6A6D98A4, (q31_t)0x471CECE6, (q31_t)0x69FD614A, - (q31_t)0x47C3C22E, (q31_t)0x698C246C, (q31_t)0x4869E664, - (q31_t)0x6919E320, (q31_t)0x490F57EE, (q31_t)0x68A69E81, - (q31_t)0x49B41533, (q31_t)0x683257AA, (q31_t)0x4A581C9D, - (q31_t)0x67BD0FBC, (q31_t)0x4AFB6C97, (q31_t)0x6746C7D7, - (q31_t)0x4B9E038F, (q31_t)0x66CF811F, (q31_t)0x4C3FDFF3, - (q31_t)0x66573CBB, (q31_t)0x4CE10034, (q31_t)0x65DDFBD3, - (q31_t)0x4D8162C4, (q31_t)0x6563BF92, (q31_t)0x4E210617, - (q31_t)0x64E88926, (q31_t)0x4EBFE8A4, (q31_t)0x646C59BF, - (q31_t)0x4F5E08E3, (q31_t)0x63EF328F, (q31_t)0x4FFB654D, - (q31_t)0x637114CC, (q31_t)0x5097FC5E, (q31_t)0x62F201AC, - (q31_t)0x5133CC94, (q31_t)0x6271FA69, (q31_t)0x51CED46E, - (q31_t)0x61F1003E, (q31_t)0x5269126E, (q31_t)0x616F146B, - (q31_t)0x53028517, (q31_t)0x60EC3830, (q31_t)0x539B2AEF, - (q31_t)0x60686CCE, (q31_t)0x5433027D, (q31_t)0x5FE3B38D, - (q31_t)0x54CA0A4A, (q31_t)0x5F5E0DB3, (q31_t)0x556040E2, - (q31_t)0x5ED77C89, (q31_t)0x55F5A4D2, (q31_t)0x5E50015D, - (q31_t)0x568A34A9, (q31_t)0x5DC79D7C, (q31_t)0x571DEEF9, - (q31_t)0x5D3E5236, (q31_t)0x57B0D256, (q31_t)0x5CB420DF, - (q31_t)0x5842DD54, (q31_t)0x5C290ACC, (q31_t)0x58D40E8C, - (q31_t)0x5B9D1153, (q31_t)0x59646497, (q31_t)0x5B1035CF, - (q31_t)0x59F3DE12, (q31_t)0x5A82799A, (q31_t)0x5A82799A, - (q31_t)0x59F3DE12, (q31_t)0x5B1035CF, (q31_t)0x59646497, - (q31_t)0x5B9D1153, (q31_t)0x58D40E8C, (q31_t)0x5C290ACC, - (q31_t)0x5842DD54, (q31_t)0x5CB420DF, (q31_t)0x57B0D256, - (q31_t)0x5D3E5236, (q31_t)0x571DEEF9, (q31_t)0x5DC79D7C, - (q31_t)0x568A34A9, (q31_t)0x5E50015D, (q31_t)0x55F5A4D2, - (q31_t)0x5ED77C89, (q31_t)0x556040E2, (q31_t)0x5F5E0DB3, - (q31_t)0x54CA0A4A, (q31_t)0x5FE3B38D, (q31_t)0x5433027D, - (q31_t)0x60686CCE, (q31_t)0x539B2AEF, (q31_t)0x60EC3830, - (q31_t)0x53028517, (q31_t)0x616F146B, (q31_t)0x5269126E, - (q31_t)0x61F1003E, (q31_t)0x51CED46E, (q31_t)0x6271FA69, - (q31_t)0x5133CC94, (q31_t)0x62F201AC, (q31_t)0x5097FC5E, - (q31_t)0x637114CC, (q31_t)0x4FFB654D, (q31_t)0x63EF328F, - (q31_t)0x4F5E08E3, (q31_t)0x646C59BF, (q31_t)0x4EBFE8A4, - (q31_t)0x64E88926, (q31_t)0x4E210617, (q31_t)0x6563BF92, - (q31_t)0x4D8162C4, (q31_t)0x65DDFBD3, (q31_t)0x4CE10034, - (q31_t)0x66573CBB, (q31_t)0x4C3FDFF3, (q31_t)0x66CF811F, - (q31_t)0x4B9E038F, (q31_t)0x6746C7D7, (q31_t)0x4AFB6C97, - (q31_t)0x67BD0FBC, (q31_t)0x4A581C9D, (q31_t)0x683257AA, - (q31_t)0x49B41533, (q31_t)0x68A69E81, (q31_t)0x490F57EE, - (q31_t)0x6919E320, (q31_t)0x4869E664, (q31_t)0x698C246C, - (q31_t)0x47C3C22E, (q31_t)0x69FD614A, (q31_t)0x471CECE6, - (q31_t)0x6A6D98A4, (q31_t)0x46756827, (q31_t)0x6ADCC964, - (q31_t)0x45CD358F, (q31_t)0x6B4AF278, (q31_t)0x452456BC, - (q31_t)0x6BB812D0, (q31_t)0x447ACD50, (q31_t)0x6C242960, - (q31_t)0x43D09AEC, (q31_t)0x6C8F351C, (q31_t)0x4325C135, - (q31_t)0x6CF934FB, (q31_t)0x427A41D0, (q31_t)0x6D6227FA, - (q31_t)0x41CE1E64, (q31_t)0x6DCA0D14, (q31_t)0x4121589A, - (q31_t)0x6E30E349, (q31_t)0x4073F21D, (q31_t)0x6E96A99C, - (q31_t)0x3FC5EC97, (q31_t)0x6EFB5F12, (q31_t)0x3F1749B7, - (q31_t)0x6F5F02B1, (q31_t)0x3E680B2C, (q31_t)0x6FC19385, - (q31_t)0x3DB832A5, (q31_t)0x70231099, (q31_t)0x3D07C1D5, - (q31_t)0x708378FE, (q31_t)0x3C56BA70, (q31_t)0x70E2CBC6, - (q31_t)0x3BA51E29, (q31_t)0x71410804, (q31_t)0x3AF2EEB7, - (q31_t)0x719E2CD2, (q31_t)0x3A402DD1, (q31_t)0x71FA3948, - (q31_t)0x398CDD32, (q31_t)0x72552C84, (q31_t)0x38D8FE93, - (q31_t)0x72AF05A6, (q31_t)0x382493B0, (q31_t)0x7307C3D0, - (q31_t)0x376F9E46, (q31_t)0x735F6626, (q31_t)0x36BA2013, - (q31_t)0x73B5EBD0, (q31_t)0x36041AD9, (q31_t)0x740B53FA, - (q31_t)0x354D9056, (q31_t)0x745F9DD1, (q31_t)0x3496824F, - (q31_t)0x74B2C883, (q31_t)0x33DEF287, (q31_t)0x7504D345, - (q31_t)0x3326E2C2, (q31_t)0x7555BD4B, (q31_t)0x326E54C7, - (q31_t)0x75A585CF, (q31_t)0x31B54A5D, (q31_t)0x75F42C0A, - (q31_t)0x30FBC54D, (q31_t)0x7641AF3C, (q31_t)0x3041C760, - (q31_t)0x768E0EA5, (q31_t)0x2F875262, (q31_t)0x76D94988, - (q31_t)0x2ECC681E, (q31_t)0x77235F2D, (q31_t)0x2E110A62, - (q31_t)0x776C4EDB, (q31_t)0x2D553AFB, (q31_t)0x77B417DF, - (q31_t)0x2C98FBBA, (q31_t)0x77FAB988, (q31_t)0x2BDC4E6F, - (q31_t)0x78403328, (q31_t)0x2B1F34EB, (q31_t)0x78848413, - (q31_t)0x2A61B101, (q31_t)0x78C7ABA1, (q31_t)0x29A3C484, - (q31_t)0x7909A92C, (q31_t)0x28E5714A, (q31_t)0x794A7C11, - (q31_t)0x2826B928, (q31_t)0x798A23B1, (q31_t)0x27679DF4, - (q31_t)0x79C89F6D, (q31_t)0x26A82185, (q31_t)0x7A05EEAD, - (q31_t)0x25E845B5, (q31_t)0x7A4210D8, (q31_t)0x25280C5D, - (q31_t)0x7A7D055B, (q31_t)0x24677757, (q31_t)0x7AB6CBA3, - (q31_t)0x23A6887E, (q31_t)0x7AEF6323, (q31_t)0x22E541AE, - (q31_t)0x7B26CB4F, (q31_t)0x2223A4C5, (q31_t)0x7B5D039D, - (q31_t)0x2161B39F, (q31_t)0x7B920B89, (q31_t)0x209F701C, - (q31_t)0x7BC5E28F, (q31_t)0x1FDCDC1A, (q31_t)0x7BF88830, - (q31_t)0x1F19F97B, (q31_t)0x7C29FBEE, (q31_t)0x1E56CA1E, - (q31_t)0x7C5A3D4F, (q31_t)0x1D934FE5, (q31_t)0x7C894BDD, - (q31_t)0x1CCF8CB3, (q31_t)0x7CB72724, (q31_t)0x1C0B826A, - (q31_t)0x7CE3CEB1, (q31_t)0x1B4732EF, (q31_t)0x7D0F4218, - (q31_t)0x1A82A025, (q31_t)0x7D3980EC, (q31_t)0x19BDCBF2, - (q31_t)0x7D628AC5, (q31_t)0x18F8B83C, (q31_t)0x7D8A5F3F, - (q31_t)0x183366E8, (q31_t)0x7DB0FDF7, (q31_t)0x176DD9DE, - (q31_t)0x7DD6668E, (q31_t)0x16A81305, (q31_t)0x7DFA98A7, - (q31_t)0x15E21444, (q31_t)0x7E1D93E9, (q31_t)0x151BDF85, - (q31_t)0x7E3F57FE, (q31_t)0x145576B1, (q31_t)0x7E5FE493, - (q31_t)0x138EDBB0, (q31_t)0x7E7F3956, (q31_t)0x12C8106E, - (q31_t)0x7E9D55FC, (q31_t)0x120116D4, (q31_t)0x7EBA3A39, - (q31_t)0x1139F0CE, (q31_t)0x7ED5E5C6, (q31_t)0x1072A047, - (q31_t)0x7EF0585F, (q31_t)0x0FAB272B, (q31_t)0x7F0991C3, - (q31_t)0x0EE38765, (q31_t)0x7F2191B4, (q31_t)0x0E1BC2E3, - (q31_t)0x7F3857F5, (q31_t)0x0D53DB92, (q31_t)0x7F4DE450, - (q31_t)0x0C8BD35E, (q31_t)0x7F62368F, (q31_t)0x0BC3AC35, - (q31_t)0x7F754E7F, (q31_t)0x0AFB6805, (q31_t)0x7F872BF3, - (q31_t)0x0A3308BC, (q31_t)0x7F97CEBC, (q31_t)0x096A9049, - (q31_t)0x7FA736B4, (q31_t)0x08A2009A, (q31_t)0x7FB563B2, - (q31_t)0x07D95B9E, (q31_t)0x7FC25596, (q31_t)0x0710A344, - (q31_t)0x7FCE0C3E, (q31_t)0x0647D97C, (q31_t)0x7FD8878D, - (q31_t)0x057F0034, (q31_t)0x7FE1C76B, (q31_t)0x04B6195D, - (q31_t)0x7FE9CBC0, (q31_t)0x03ED26E6, (q31_t)0x7FF09477, - (q31_t)0x03242ABF, (q31_t)0x7FF62182, (q31_t)0x025B26D7, - (q31_t)0x7FFA72D1, (q31_t)0x01921D1F, (q31_t)0x7FFD885A, - (q31_t)0x00C90F88, (q31_t)0x7FFF6216, (q31_t)0x00000000, - (q31_t)0x7FFFFFFF, (q31_t)0xFF36F078, (q31_t)0x7FFF6216, - (q31_t)0xFE6DE2E0, (q31_t)0x7FFD885A, (q31_t)0xFDA4D928, - (q31_t)0x7FFA72D1, (q31_t)0xFCDBD541, (q31_t)0x7FF62182, - (q31_t)0xFC12D919, (q31_t)0x7FF09477, (q31_t)0xFB49E6A2, - (q31_t)0x7FE9CBC0, (q31_t)0xFA80FFCB, (q31_t)0x7FE1C76B, - (q31_t)0xF9B82683, (q31_t)0x7FD8878D, (q31_t)0xF8EF5CBB, - (q31_t)0x7FCE0C3E, (q31_t)0xF826A461, (q31_t)0x7FC25596, - (q31_t)0xF75DFF65, (q31_t)0x7FB563B2, (q31_t)0xF6956FB6, - (q31_t)0x7FA736B4, (q31_t)0xF5CCF743, (q31_t)0x7F97CEBC, - (q31_t)0xF50497FA, (q31_t)0x7F872BF3, (q31_t)0xF43C53CA, - (q31_t)0x7F754E7F, (q31_t)0xF3742CA1, (q31_t)0x7F62368F, - (q31_t)0xF2AC246D, (q31_t)0x7F4DE450, (q31_t)0xF1E43D1C, - (q31_t)0x7F3857F5, (q31_t)0xF11C789A, (q31_t)0x7F2191B4, - (q31_t)0xF054D8D4, (q31_t)0x7F0991C3, (q31_t)0xEF8D5FB8, - (q31_t)0x7EF0585F, (q31_t)0xEEC60F31, (q31_t)0x7ED5E5C6, - (q31_t)0xEDFEE92B, (q31_t)0x7EBA3A39, (q31_t)0xED37EF91, - (q31_t)0x7E9D55FC, (q31_t)0xEC71244F, (q31_t)0x7E7F3956, - (q31_t)0xEBAA894E, (q31_t)0x7E5FE493, (q31_t)0xEAE4207A, - (q31_t)0x7E3F57FE, (q31_t)0xEA1DEBBB, (q31_t)0x7E1D93E9, - (q31_t)0xE957ECFB, (q31_t)0x7DFA98A7, (q31_t)0xE8922621, - (q31_t)0x7DD6668E, (q31_t)0xE7CC9917, (q31_t)0x7DB0FDF7, - (q31_t)0xE70747C3, (q31_t)0x7D8A5F3F, (q31_t)0xE642340D, - (q31_t)0x7D628AC5, (q31_t)0xE57D5FDA, (q31_t)0x7D3980EC, - (q31_t)0xE4B8CD10, (q31_t)0x7D0F4218, (q31_t)0xE3F47D95, - (q31_t)0x7CE3CEB1, (q31_t)0xE330734C, (q31_t)0x7CB72724, - (q31_t)0xE26CB01A, (q31_t)0x7C894BDD, (q31_t)0xE1A935E1, - (q31_t)0x7C5A3D4F, (q31_t)0xE0E60684, (q31_t)0x7C29FBEE, - (q31_t)0xE02323E5, (q31_t)0x7BF88830, (q31_t)0xDF608FE3, - (q31_t)0x7BC5E28F, (q31_t)0xDE9E4C60, (q31_t)0x7B920B89, - (q31_t)0xDDDC5B3A, (q31_t)0x7B5D039D, (q31_t)0xDD1ABE51, - (q31_t)0x7B26CB4F, (q31_t)0xDC597781, (q31_t)0x7AEF6323, - (q31_t)0xDB9888A8, (q31_t)0x7AB6CBA3, (q31_t)0xDAD7F3A2, - (q31_t)0x7A7D055B, (q31_t)0xDA17BA4A, (q31_t)0x7A4210D8, - (q31_t)0xD957DE7A, (q31_t)0x7A05EEAD, (q31_t)0xD898620C, - (q31_t)0x79C89F6D, (q31_t)0xD7D946D7, (q31_t)0x798A23B1, - (q31_t)0xD71A8EB5, (q31_t)0x794A7C11, (q31_t)0xD65C3B7B, - (q31_t)0x7909A92C, (q31_t)0xD59E4EFE, (q31_t)0x78C7ABA1, - (q31_t)0xD4E0CB14, (q31_t)0x78848413, (q31_t)0xD423B190, - (q31_t)0x78403328, (q31_t)0xD3670445, (q31_t)0x77FAB988, - (q31_t)0xD2AAC504, (q31_t)0x77B417DF, (q31_t)0xD1EEF59E, - (q31_t)0x776C4EDB, (q31_t)0xD13397E1, (q31_t)0x77235F2D, - (q31_t)0xD078AD9D, (q31_t)0x76D94988, (q31_t)0xCFBE389F, - (q31_t)0x768E0EA5, (q31_t)0xCF043AB2, (q31_t)0x7641AF3C, - (q31_t)0xCE4AB5A2, (q31_t)0x75F42C0A, (q31_t)0xCD91AB38, - (q31_t)0x75A585CF, (q31_t)0xCCD91D3D, (q31_t)0x7555BD4B, - (q31_t)0xCC210D78, (q31_t)0x7504D345, (q31_t)0xCB697DB0, - (q31_t)0x74B2C883, (q31_t)0xCAB26FA9, (q31_t)0x745F9DD1, - (q31_t)0xC9FBE527, (q31_t)0x740B53FA, (q31_t)0xC945DFEC, - (q31_t)0x73B5EBD0, (q31_t)0xC89061BA, (q31_t)0x735F6626, - (q31_t)0xC7DB6C50, (q31_t)0x7307C3D0, (q31_t)0xC727016C, - (q31_t)0x72AF05A6, (q31_t)0xC67322CD, (q31_t)0x72552C84, - (q31_t)0xC5BFD22E, (q31_t)0x71FA3948, (q31_t)0xC50D1148, - (q31_t)0x719E2CD2, (q31_t)0xC45AE1D7, (q31_t)0x71410804, - (q31_t)0xC3A9458F, (q31_t)0x70E2CBC6, (q31_t)0xC2F83E2A, - (q31_t)0x708378FE, (q31_t)0xC247CD5A, (q31_t)0x70231099, - (q31_t)0xC197F4D3, (q31_t)0x6FC19385, (q31_t)0xC0E8B648, - (q31_t)0x6F5F02B1, (q31_t)0xC03A1368, (q31_t)0x6EFB5F12, - (q31_t)0xBF8C0DE2, (q31_t)0x6E96A99C, (q31_t)0xBEDEA765, - (q31_t)0x6E30E349, (q31_t)0xBE31E19B, (q31_t)0x6DCA0D14, - (q31_t)0xBD85BE2F, (q31_t)0x6D6227FA, (q31_t)0xBCDA3ECA, - (q31_t)0x6CF934FB, (q31_t)0xBC2F6513, (q31_t)0x6C8F351C, - (q31_t)0xBB8532AF, (q31_t)0x6C242960, (q31_t)0xBADBA943, - (q31_t)0x6BB812D0, (q31_t)0xBA32CA70, (q31_t)0x6B4AF278, - (q31_t)0xB98A97D8, (q31_t)0x6ADCC964, (q31_t)0xB8E31319, - (q31_t)0x6A6D98A4, (q31_t)0xB83C3DD1, (q31_t)0x69FD614A, - (q31_t)0xB796199B, (q31_t)0x698C246C, (q31_t)0xB6F0A811, - (q31_t)0x6919E320, (q31_t)0xB64BEACC, (q31_t)0x68A69E81, - (q31_t)0xB5A7E362, (q31_t)0x683257AA, (q31_t)0xB5049368, - (q31_t)0x67BD0FBC, (q31_t)0xB461FC70, (q31_t)0x6746C7D7, - (q31_t)0xB3C0200C, (q31_t)0x66CF811F, (q31_t)0xB31EFFCB, - (q31_t)0x66573CBB, (q31_t)0xB27E9D3B, (q31_t)0x65DDFBD3, - (q31_t)0xB1DEF9E8, (q31_t)0x6563BF92, (q31_t)0xB140175B, - (q31_t)0x64E88926, (q31_t)0xB0A1F71C, (q31_t)0x646C59BF, - (q31_t)0xB0049AB2, (q31_t)0x63EF328F, (q31_t)0xAF6803A1, - (q31_t)0x637114CC, (q31_t)0xAECC336B, (q31_t)0x62F201AC, - (q31_t)0xAE312B91, (q31_t)0x6271FA69, (q31_t)0xAD96ED91, - (q31_t)0x61F1003E, (q31_t)0xACFD7AE8, (q31_t)0x616F146B, - (q31_t)0xAC64D510, (q31_t)0x60EC3830, (q31_t)0xABCCFD82, - (q31_t)0x60686CCE, (q31_t)0xAB35F5B5, (q31_t)0x5FE3B38D, - (q31_t)0xAA9FBF1D, (q31_t)0x5F5E0DB3, (q31_t)0xAA0A5B2D, - (q31_t)0x5ED77C89, (q31_t)0xA975CB56, (q31_t)0x5E50015D, - (q31_t)0xA8E21106, (q31_t)0x5DC79D7C, (q31_t)0xA84F2DA9, - (q31_t)0x5D3E5236, (q31_t)0xA7BD22AB, (q31_t)0x5CB420DF, - (q31_t)0xA72BF173, (q31_t)0x5C290ACC, (q31_t)0xA69B9B68, - (q31_t)0x5B9D1153, (q31_t)0xA60C21ED, (q31_t)0x5B1035CF, - (q31_t)0xA57D8666, (q31_t)0x5A82799A, (q31_t)0xA4EFCA31, - (q31_t)0x59F3DE12, (q31_t)0xA462EEAC, (q31_t)0x59646497, - (q31_t)0xA3D6F533, (q31_t)0x58D40E8C, (q31_t)0xA34BDF20, - (q31_t)0x5842DD54, (q31_t)0xA2C1ADC9, (q31_t)0x57B0D256, - (q31_t)0xA2386283, (q31_t)0x571DEEF9, (q31_t)0xA1AFFEA2, - (q31_t)0x568A34A9, (q31_t)0xA1288376, (q31_t)0x55F5A4D2, - (q31_t)0xA0A1F24C, (q31_t)0x556040E2, (q31_t)0xA01C4C72, - (q31_t)0x54CA0A4A, (q31_t)0x9F979331, (q31_t)0x5433027D, - (q31_t)0x9F13C7D0, (q31_t)0x539B2AEF, (q31_t)0x9E90EB94, - (q31_t)0x53028517, (q31_t)0x9E0EFFC1, (q31_t)0x5269126E, - (q31_t)0x9D8E0596, (q31_t)0x51CED46E, (q31_t)0x9D0DFE53, - (q31_t)0x5133CC94, (q31_t)0x9C8EEB33, (q31_t)0x5097FC5E, - (q31_t)0x9C10CD70, (q31_t)0x4FFB654D, (q31_t)0x9B93A640, - (q31_t)0x4F5E08E3, (q31_t)0x9B1776D9, (q31_t)0x4EBFE8A4, - (q31_t)0x9A9C406D, (q31_t)0x4E210617, (q31_t)0x9A22042C, - (q31_t)0x4D8162C4, (q31_t)0x99A8C344, (q31_t)0x4CE10034, - (q31_t)0x99307EE0, (q31_t)0x4C3FDFF3, (q31_t)0x98B93828, - (q31_t)0x4B9E038F, (q31_t)0x9842F043, (q31_t)0x4AFB6C97, - (q31_t)0x97CDA855, (q31_t)0x4A581C9D, (q31_t)0x9759617E, - (q31_t)0x49B41533, (q31_t)0x96E61CDF, (q31_t)0x490F57EE, - (q31_t)0x9673DB94, (q31_t)0x4869E664, (q31_t)0x96029EB5, - (q31_t)0x47C3C22E, (q31_t)0x9592675B, (q31_t)0x471CECE6, - (q31_t)0x9523369B, (q31_t)0x46756827, (q31_t)0x94B50D87, - (q31_t)0x45CD358F, (q31_t)0x9447ED2F, (q31_t)0x452456BC, - (q31_t)0x93DBD69F, (q31_t)0x447ACD50, (q31_t)0x9370CAE4, - (q31_t)0x43D09AEC, (q31_t)0x9306CB04, (q31_t)0x4325C135, - (q31_t)0x929DD805, (q31_t)0x427A41D0, (q31_t)0x9235F2EB, - (q31_t)0x41CE1E64, (q31_t)0x91CF1CB6, (q31_t)0x4121589A, - (q31_t)0x91695663, (q31_t)0x4073F21D, (q31_t)0x9104A0ED, - (q31_t)0x3FC5EC97, (q31_t)0x90A0FD4E, (q31_t)0x3F1749B7, - (q31_t)0x903E6C7A, (q31_t)0x3E680B2C, (q31_t)0x8FDCEF66, - (q31_t)0x3DB832A5, (q31_t)0x8F7C8701, (q31_t)0x3D07C1D5, - (q31_t)0x8F1D343A, (q31_t)0x3C56BA70, (q31_t)0x8EBEF7FB, - (q31_t)0x3BA51E29, (q31_t)0x8E61D32D, (q31_t)0x3AF2EEB7, - (q31_t)0x8E05C6B7, (q31_t)0x3A402DD1, (q31_t)0x8DAAD37B, - (q31_t)0x398CDD32, (q31_t)0x8D50FA59, (q31_t)0x38D8FE93, - (q31_t)0x8CF83C30, (q31_t)0x382493B0, (q31_t)0x8CA099D9, - (q31_t)0x376F9E46, (q31_t)0x8C4A142F, (q31_t)0x36BA2013, - (q31_t)0x8BF4AC05, (q31_t)0x36041AD9, (q31_t)0x8BA0622F, - (q31_t)0x354D9056, (q31_t)0x8B4D377C, (q31_t)0x3496824F, - (q31_t)0x8AFB2CBA, (q31_t)0x33DEF287, (q31_t)0x8AAA42B4, - (q31_t)0x3326E2C2, (q31_t)0x8A5A7A30, (q31_t)0x326E54C7, - (q31_t)0x8A0BD3F5, (q31_t)0x31B54A5D, (q31_t)0x89BE50C3, - (q31_t)0x30FBC54D, (q31_t)0x8971F15A, (q31_t)0x3041C760, - (q31_t)0x8926B677, (q31_t)0x2F875262, (q31_t)0x88DCA0D3, - (q31_t)0x2ECC681E, (q31_t)0x8893B124, (q31_t)0x2E110A62, - (q31_t)0x884BE820, (q31_t)0x2D553AFB, (q31_t)0x88054677, - (q31_t)0x2C98FBBA, (q31_t)0x87BFCCD7, (q31_t)0x2BDC4E6F, - (q31_t)0x877B7BEC, (q31_t)0x2B1F34EB, (q31_t)0x8738545E, - (q31_t)0x2A61B101, (q31_t)0x86F656D3, (q31_t)0x29A3C484, - (q31_t)0x86B583EE, (q31_t)0x28E5714A, (q31_t)0x8675DC4E, - (q31_t)0x2826B928, (q31_t)0x86376092, (q31_t)0x27679DF4, - (q31_t)0x85FA1152, (q31_t)0x26A82185, (q31_t)0x85BDEF27, - (q31_t)0x25E845B5, (q31_t)0x8582FAA4, (q31_t)0x25280C5D, - (q31_t)0x8549345C, (q31_t)0x24677757, (q31_t)0x85109CDC, - (q31_t)0x23A6887E, (q31_t)0x84D934B0, (q31_t)0x22E541AE, - (q31_t)0x84A2FC62, (q31_t)0x2223A4C5, (q31_t)0x846DF476, - (q31_t)0x2161B39F, (q31_t)0x843A1D70, (q31_t)0x209F701C, - (q31_t)0x840777CF, (q31_t)0x1FDCDC1A, (q31_t)0x83D60411, - (q31_t)0x1F19F97B, (q31_t)0x83A5C2B0, (q31_t)0x1E56CA1E, - (q31_t)0x8376B422, (q31_t)0x1D934FE5, (q31_t)0x8348D8DB, - (q31_t)0x1CCF8CB3, (q31_t)0x831C314E, (q31_t)0x1C0B826A, - (q31_t)0x82F0BDE8, (q31_t)0x1B4732EF, (q31_t)0x82C67F13, - (q31_t)0x1A82A025, (q31_t)0x829D753A, (q31_t)0x19BDCBF2, - (q31_t)0x8275A0C0, (q31_t)0x18F8B83C, (q31_t)0x824F0208, - (q31_t)0x183366E8, (q31_t)0x82299971, (q31_t)0x176DD9DE, - (q31_t)0x82056758, (q31_t)0x16A81305, (q31_t)0x81E26C16, - (q31_t)0x15E21444, (q31_t)0x81C0A801, (q31_t)0x151BDF85, - (q31_t)0x81A01B6C, (q31_t)0x145576B1, (q31_t)0x8180C6A9, - (q31_t)0x138EDBB0, (q31_t)0x8162AA03, (q31_t)0x12C8106E, - (q31_t)0x8145C5C6, (q31_t)0x120116D4, (q31_t)0x812A1A39, - (q31_t)0x1139F0CE, (q31_t)0x810FA7A0, (q31_t)0x1072A047, - (q31_t)0x80F66E3C, (q31_t)0x0FAB272B, (q31_t)0x80DE6E4C, - (q31_t)0x0EE38765, (q31_t)0x80C7A80A, (q31_t)0x0E1BC2E3, - (q31_t)0x80B21BAF, (q31_t)0x0D53DB92, (q31_t)0x809DC970, - (q31_t)0x0C8BD35E, (q31_t)0x808AB180, (q31_t)0x0BC3AC35, - (q31_t)0x8078D40D, (q31_t)0x0AFB6805, (q31_t)0x80683143, - (q31_t)0x0A3308BC, (q31_t)0x8058C94C, (q31_t)0x096A9049, - (q31_t)0x804A9C4D, (q31_t)0x08A2009A, (q31_t)0x803DAA69, - (q31_t)0x07D95B9E, (q31_t)0x8031F3C1, (q31_t)0x0710A344, - (q31_t)0x80277872, (q31_t)0x0647D97C, (q31_t)0x801E3894, - (q31_t)0x057F0034, (q31_t)0x80163440, (q31_t)0x04B6195D, - (q31_t)0x800F6B88, (q31_t)0x03ED26E6, (q31_t)0x8009DE7D, - (q31_t)0x03242ABF, (q31_t)0x80058D2E, (q31_t)0x025B26D7, - (q31_t)0x800277A5, (q31_t)0x01921D1F, (q31_t)0x80009DE9, - (q31_t)0x00C90F88, (q31_t)0x80000000, (q31_t)0x00000000, - (q31_t)0x80009DE9, (q31_t)0xFF36F078, (q31_t)0x800277A5, - (q31_t)0xFE6DE2E0, (q31_t)0x80058D2E, (q31_t)0xFDA4D928, - (q31_t)0x8009DE7D, (q31_t)0xFCDBD541, (q31_t)0x800F6B88, - (q31_t)0xFC12D919, (q31_t)0x80163440, (q31_t)0xFB49E6A2, - (q31_t)0x801E3894, (q31_t)0xFA80FFCB, (q31_t)0x80277872, - (q31_t)0xF9B82683, (q31_t)0x8031F3C1, (q31_t)0xF8EF5CBB, - (q31_t)0x803DAA69, (q31_t)0xF826A461, (q31_t)0x804A9C4D, - (q31_t)0xF75DFF65, (q31_t)0x8058C94C, (q31_t)0xF6956FB6, - (q31_t)0x80683143, (q31_t)0xF5CCF743, (q31_t)0x8078D40D, - (q31_t)0xF50497FA, (q31_t)0x808AB180, (q31_t)0xF43C53CA, - (q31_t)0x809DC970, (q31_t)0xF3742CA1, (q31_t)0x80B21BAF, - (q31_t)0xF2AC246D, (q31_t)0x80C7A80A, (q31_t)0xF1E43D1C, - (q31_t)0x80DE6E4C, (q31_t)0xF11C789A, (q31_t)0x80F66E3C, - (q31_t)0xF054D8D4, (q31_t)0x810FA7A0, (q31_t)0xEF8D5FB8, - (q31_t)0x812A1A39, (q31_t)0xEEC60F31, (q31_t)0x8145C5C6, - (q31_t)0xEDFEE92B, (q31_t)0x8162AA03, (q31_t)0xED37EF91, - (q31_t)0x8180C6A9, (q31_t)0xEC71244F, (q31_t)0x81A01B6C, - (q31_t)0xEBAA894E, (q31_t)0x81C0A801, (q31_t)0xEAE4207A, - (q31_t)0x81E26C16, (q31_t)0xEA1DEBBB, (q31_t)0x82056758, - (q31_t)0xE957ECFB, (q31_t)0x82299971, (q31_t)0xE8922621, - (q31_t)0x824F0208, (q31_t)0xE7CC9917, (q31_t)0x8275A0C0, - (q31_t)0xE70747C3, (q31_t)0x829D753A, (q31_t)0xE642340D, - (q31_t)0x82C67F13, (q31_t)0xE57D5FDA, (q31_t)0x82F0BDE8, - (q31_t)0xE4B8CD10, (q31_t)0x831C314E, (q31_t)0xE3F47D95, - (q31_t)0x8348D8DB, (q31_t)0xE330734C, (q31_t)0x8376B422, - (q31_t)0xE26CB01A, (q31_t)0x83A5C2B0, (q31_t)0xE1A935E1, - (q31_t)0x83D60411, (q31_t)0xE0E60684, (q31_t)0x840777CF, - (q31_t)0xE02323E5, (q31_t)0x843A1D70, (q31_t)0xDF608FE3, - (q31_t)0x846DF476, (q31_t)0xDE9E4C60, (q31_t)0x84A2FC62, - (q31_t)0xDDDC5B3A, (q31_t)0x84D934B0, (q31_t)0xDD1ABE51, - (q31_t)0x85109CDC, (q31_t)0xDC597781, (q31_t)0x8549345C, - (q31_t)0xDB9888A8, (q31_t)0x8582FAA4, (q31_t)0xDAD7F3A2, - (q31_t)0x85BDEF27, (q31_t)0xDA17BA4A, (q31_t)0x85FA1152, - (q31_t)0xD957DE7A, (q31_t)0x86376092, (q31_t)0xD898620C, - (q31_t)0x8675DC4E, (q31_t)0xD7D946D7, (q31_t)0x86B583EE, - (q31_t)0xD71A8EB5, (q31_t)0x86F656D3, (q31_t)0xD65C3B7B, - (q31_t)0x8738545E, (q31_t)0xD59E4EFE, (q31_t)0x877B7BEC, - (q31_t)0xD4E0CB14, (q31_t)0x87BFCCD7, (q31_t)0xD423B190, - (q31_t)0x88054677, (q31_t)0xD3670445, (q31_t)0x884BE820, - (q31_t)0xD2AAC504, (q31_t)0x8893B124, (q31_t)0xD1EEF59E, - (q31_t)0x88DCA0D3, (q31_t)0xD13397E1, (q31_t)0x8926B677, - (q31_t)0xD078AD9D, (q31_t)0x8971F15A, (q31_t)0xCFBE389F, - (q31_t)0x89BE50C3, (q31_t)0xCF043AB2, (q31_t)0x8A0BD3F5, - (q31_t)0xCE4AB5A2, (q31_t)0x8A5A7A30, (q31_t)0xCD91AB38, - (q31_t)0x8AAA42B4, (q31_t)0xCCD91D3D, (q31_t)0x8AFB2CBA, - (q31_t)0xCC210D78, (q31_t)0x8B4D377C, (q31_t)0xCB697DB0, - (q31_t)0x8BA0622F, (q31_t)0xCAB26FA9, (q31_t)0x8BF4AC05, - (q31_t)0xC9FBE527, (q31_t)0x8C4A142F, (q31_t)0xC945DFEC, - (q31_t)0x8CA099D9, (q31_t)0xC89061BA, (q31_t)0x8CF83C30, - (q31_t)0xC7DB6C50, (q31_t)0x8D50FA59, (q31_t)0xC727016C, - (q31_t)0x8DAAD37B, (q31_t)0xC67322CD, (q31_t)0x8E05C6B7, - (q31_t)0xC5BFD22E, (q31_t)0x8E61D32D, (q31_t)0xC50D1148, - (q31_t)0x8EBEF7FB, (q31_t)0xC45AE1D7, (q31_t)0x8F1D343A, - (q31_t)0xC3A9458F, (q31_t)0x8F7C8701, (q31_t)0xC2F83E2A, - (q31_t)0x8FDCEF66, (q31_t)0xC247CD5A, (q31_t)0x903E6C7A, - (q31_t)0xC197F4D3, (q31_t)0x90A0FD4E, (q31_t)0xC0E8B648, - (q31_t)0x9104A0ED, (q31_t)0xC03A1368, (q31_t)0x91695663, - (q31_t)0xBF8C0DE2, (q31_t)0x91CF1CB6, (q31_t)0xBEDEA765, - (q31_t)0x9235F2EB, (q31_t)0xBE31E19B, (q31_t)0x929DD805, - (q31_t)0xBD85BE2F, (q31_t)0x9306CB04, (q31_t)0xBCDA3ECA, - (q31_t)0x9370CAE4, (q31_t)0xBC2F6513, (q31_t)0x93DBD69F, - (q31_t)0xBB8532AF, (q31_t)0x9447ED2F, (q31_t)0xBADBA943, - (q31_t)0x94B50D87, (q31_t)0xBA32CA70, (q31_t)0x9523369B, - (q31_t)0xB98A97D8, (q31_t)0x9592675B, (q31_t)0xB8E31319, - (q31_t)0x96029EB5, (q31_t)0xB83C3DD1, (q31_t)0x9673DB94, - (q31_t)0xB796199B, (q31_t)0x96E61CDF, (q31_t)0xB6F0A811, - (q31_t)0x9759617E, (q31_t)0xB64BEACC, (q31_t)0x97CDA855, - (q31_t)0xB5A7E362, (q31_t)0x9842F043, (q31_t)0xB5049368, - (q31_t)0x98B93828, (q31_t)0xB461FC70, (q31_t)0x99307EE0, - (q31_t)0xB3C0200C, (q31_t)0x99A8C344, (q31_t)0xB31EFFCB, - (q31_t)0x9A22042C, (q31_t)0xB27E9D3B, (q31_t)0x9A9C406D, - (q31_t)0xB1DEF9E8, (q31_t)0x9B1776D9, (q31_t)0xB140175B, - (q31_t)0x9B93A640, (q31_t)0xB0A1F71C, (q31_t)0x9C10CD70, - (q31_t)0xB0049AB2, (q31_t)0x9C8EEB33, (q31_t)0xAF6803A1, - (q31_t)0x9D0DFE53, (q31_t)0xAECC336B, (q31_t)0x9D8E0596, - (q31_t)0xAE312B91, (q31_t)0x9E0EFFC1, (q31_t)0xAD96ED91, - (q31_t)0x9E90EB94, (q31_t)0xACFD7AE8, (q31_t)0x9F13C7D0, - (q31_t)0xAC64D510, (q31_t)0x9F979331, (q31_t)0xABCCFD82, - (q31_t)0xA01C4C72, (q31_t)0xAB35F5B5, (q31_t)0xA0A1F24C, - (q31_t)0xAA9FBF1D, (q31_t)0xA1288376, (q31_t)0xAA0A5B2D, - (q31_t)0xA1AFFEA2, (q31_t)0xA975CB56, (q31_t)0xA2386283, - (q31_t)0xA8E21106, (q31_t)0xA2C1ADC9, (q31_t)0xA84F2DA9, - (q31_t)0xA34BDF20, (q31_t)0xA7BD22AB, (q31_t)0xA3D6F533, - (q31_t)0xA72BF173, (q31_t)0xA462EEAC, (q31_t)0xA69B9B68, - (q31_t)0xA4EFCA31, (q31_t)0xA60C21ED, (q31_t)0xA57D8666, - (q31_t)0xA57D8666, (q31_t)0xA60C21ED, (q31_t)0xA4EFCA31, - (q31_t)0xA69B9B68, (q31_t)0xA462EEAC, (q31_t)0xA72BF173, - (q31_t)0xA3D6F533, (q31_t)0xA7BD22AB, (q31_t)0xA34BDF20, - (q31_t)0xA84F2DA9, (q31_t)0xA2C1ADC9, (q31_t)0xA8E21106, - (q31_t)0xA2386283, (q31_t)0xA975CB56, (q31_t)0xA1AFFEA2, - (q31_t)0xAA0A5B2D, (q31_t)0xA1288376, (q31_t)0xAA9FBF1D, - (q31_t)0xA0A1F24C, (q31_t)0xAB35F5B5, (q31_t)0xA01C4C72, - (q31_t)0xABCCFD82, (q31_t)0x9F979331, (q31_t)0xAC64D510, - (q31_t)0x9F13C7D0, (q31_t)0xACFD7AE8, (q31_t)0x9E90EB94, - (q31_t)0xAD96ED91, (q31_t)0x9E0EFFC1, (q31_t)0xAE312B91, - (q31_t)0x9D8E0596, (q31_t)0xAECC336B, (q31_t)0x9D0DFE53, - (q31_t)0xAF6803A1, (q31_t)0x9C8EEB33, (q31_t)0xB0049AB2, - (q31_t)0x9C10CD70, (q31_t)0xB0A1F71C, (q31_t)0x9B93A640, - (q31_t)0xB140175B, (q31_t)0x9B1776D9, (q31_t)0xB1DEF9E8, - (q31_t)0x9A9C406D, (q31_t)0xB27E9D3B, (q31_t)0x9A22042C, - (q31_t)0xB31EFFCB, (q31_t)0x99A8C344, (q31_t)0xB3C0200C, - (q31_t)0x99307EE0, (q31_t)0xB461FC70, (q31_t)0x98B93828, - (q31_t)0xB5049368, (q31_t)0x9842F043, (q31_t)0xB5A7E362, - (q31_t)0x97CDA855, (q31_t)0xB64BEACC, (q31_t)0x9759617E, - (q31_t)0xB6F0A811, (q31_t)0x96E61CDF, (q31_t)0xB796199B, - (q31_t)0x9673DB94, (q31_t)0xB83C3DD1, (q31_t)0x96029EB5, - (q31_t)0xB8E31319, (q31_t)0x9592675B, (q31_t)0xB98A97D8, - (q31_t)0x9523369B, (q31_t)0xBA32CA70, (q31_t)0x94B50D87, - (q31_t)0xBADBA943, (q31_t)0x9447ED2F, (q31_t)0xBB8532AF, - (q31_t)0x93DBD69F, (q31_t)0xBC2F6513, (q31_t)0x9370CAE4, - (q31_t)0xBCDA3ECA, (q31_t)0x9306CB04, (q31_t)0xBD85BE2F, - (q31_t)0x929DD805, (q31_t)0xBE31E19B, (q31_t)0x9235F2EB, - (q31_t)0xBEDEA765, (q31_t)0x91CF1CB6, (q31_t)0xBF8C0DE2, - (q31_t)0x91695663, (q31_t)0xC03A1368, (q31_t)0x9104A0ED, - (q31_t)0xC0E8B648, (q31_t)0x90A0FD4E, (q31_t)0xC197F4D3, - (q31_t)0x903E6C7A, (q31_t)0xC247CD5A, (q31_t)0x8FDCEF66, - (q31_t)0xC2F83E2A, (q31_t)0x8F7C8701, (q31_t)0xC3A9458F, - (q31_t)0x8F1D343A, (q31_t)0xC45AE1D7, (q31_t)0x8EBEF7FB, - (q31_t)0xC50D1148, (q31_t)0x8E61D32D, (q31_t)0xC5BFD22E, - (q31_t)0x8E05C6B7, (q31_t)0xC67322CD, (q31_t)0x8DAAD37B, - (q31_t)0xC727016C, (q31_t)0x8D50FA59, (q31_t)0xC7DB6C50, - (q31_t)0x8CF83C30, (q31_t)0xC89061BA, (q31_t)0x8CA099D9, - (q31_t)0xC945DFEC, (q31_t)0x8C4A142F, (q31_t)0xC9FBE527, - (q31_t)0x8BF4AC05, (q31_t)0xCAB26FA9, (q31_t)0x8BA0622F, - (q31_t)0xCB697DB0, (q31_t)0x8B4D377C, (q31_t)0xCC210D78, - (q31_t)0x8AFB2CBA, (q31_t)0xCCD91D3D, (q31_t)0x8AAA42B4, - (q31_t)0xCD91AB38, (q31_t)0x8A5A7A30, (q31_t)0xCE4AB5A2, - (q31_t)0x8A0BD3F5, (q31_t)0xCF043AB2, (q31_t)0x89BE50C3, - (q31_t)0xCFBE389F, (q31_t)0x8971F15A, (q31_t)0xD078AD9D, - (q31_t)0x8926B677, (q31_t)0xD13397E1, (q31_t)0x88DCA0D3, - (q31_t)0xD1EEF59E, (q31_t)0x8893B124, (q31_t)0xD2AAC504, - (q31_t)0x884BE820, (q31_t)0xD3670445, (q31_t)0x88054677, - (q31_t)0xD423B190, (q31_t)0x87BFCCD7, (q31_t)0xD4E0CB14, - (q31_t)0x877B7BEC, (q31_t)0xD59E4EFE, (q31_t)0x8738545E, - (q31_t)0xD65C3B7B, (q31_t)0x86F656D3, (q31_t)0xD71A8EB5, - (q31_t)0x86B583EE, (q31_t)0xD7D946D7, (q31_t)0x8675DC4E, - (q31_t)0xD898620C, (q31_t)0x86376092, (q31_t)0xD957DE7A, - (q31_t)0x85FA1152, (q31_t)0xDA17BA4A, (q31_t)0x85BDEF27, - (q31_t)0xDAD7F3A2, (q31_t)0x8582FAA4, (q31_t)0xDB9888A8, - (q31_t)0x8549345C, (q31_t)0xDC597781, (q31_t)0x85109CDC, - (q31_t)0xDD1ABE51, (q31_t)0x84D934B0, (q31_t)0xDDDC5B3A, - (q31_t)0x84A2FC62, (q31_t)0xDE9E4C60, (q31_t)0x846DF476, - (q31_t)0xDF608FE3, (q31_t)0x843A1D70, (q31_t)0xE02323E5, - (q31_t)0x840777CF, (q31_t)0xE0E60684, (q31_t)0x83D60411, - (q31_t)0xE1A935E1, (q31_t)0x83A5C2B0, (q31_t)0xE26CB01A, - (q31_t)0x8376B422, (q31_t)0xE330734C, (q31_t)0x8348D8DB, - (q31_t)0xE3F47D95, (q31_t)0x831C314E, (q31_t)0xE4B8CD10, - (q31_t)0x82F0BDE8, (q31_t)0xE57D5FDA, (q31_t)0x82C67F13, - (q31_t)0xE642340D, (q31_t)0x829D753A, (q31_t)0xE70747C3, - (q31_t)0x8275A0C0, (q31_t)0xE7CC9917, (q31_t)0x824F0208, - (q31_t)0xE8922621, (q31_t)0x82299971, (q31_t)0xE957ECFB, - (q31_t)0x82056758, (q31_t)0xEA1DEBBB, (q31_t)0x81E26C16, - (q31_t)0xEAE4207A, (q31_t)0x81C0A801, (q31_t)0xEBAA894E, - (q31_t)0x81A01B6C, (q31_t)0xEC71244F, (q31_t)0x8180C6A9, - (q31_t)0xED37EF91, (q31_t)0x8162AA03, (q31_t)0xEDFEE92B, - (q31_t)0x8145C5C6, (q31_t)0xEEC60F31, (q31_t)0x812A1A39, - (q31_t)0xEF8D5FB8, (q31_t)0x810FA7A0, (q31_t)0xF054D8D4, - (q31_t)0x80F66E3C, (q31_t)0xF11C789A, (q31_t)0x80DE6E4C, - (q31_t)0xF1E43D1C, (q31_t)0x80C7A80A, (q31_t)0xF2AC246D, - (q31_t)0x80B21BAF, (q31_t)0xF3742CA1, (q31_t)0x809DC970, - (q31_t)0xF43C53CA, (q31_t)0x808AB180, (q31_t)0xF50497FA, - (q31_t)0x8078D40D, (q31_t)0xF5CCF743, (q31_t)0x80683143, - (q31_t)0xF6956FB6, (q31_t)0x8058C94C, (q31_t)0xF75DFF65, - (q31_t)0x804A9C4D, (q31_t)0xF826A461, (q31_t)0x803DAA69, - (q31_t)0xF8EF5CBB, (q31_t)0x8031F3C1, (q31_t)0xF9B82683, - (q31_t)0x80277872, (q31_t)0xFA80FFCB, (q31_t)0x801E3894, - (q31_t)0xFB49E6A2, (q31_t)0x80163440, (q31_t)0xFC12D919, - (q31_t)0x800F6B88, (q31_t)0xFCDBD541, (q31_t)0x8009DE7D, - (q31_t)0xFDA4D928, (q31_t)0x80058D2E, (q31_t)0xFE6DE2E0, - (q31_t)0x800277A5, (q31_t)0xFF36F078, (q31_t)0x80009DE9 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) -/** - @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, 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] = { - (q31_t)0x7FFFFFFF, (q31_t)0x00000000, (q31_t)0x7FFFD885, - (q31_t)0x006487E3, (q31_t)0x7FFF6216, (q31_t)0x00C90F88, - (q31_t)0x7FFE9CB2, (q31_t)0x012D96B0, (q31_t)0x7FFD885A, - (q31_t)0x01921D1F, (q31_t)0x7FFC250F, (q31_t)0x01F6A296, - (q31_t)0x7FFA72D1, (q31_t)0x025B26D7, (q31_t)0x7FF871A1, - (q31_t)0x02BFA9A4, (q31_t)0x7FF62182, (q31_t)0x03242ABF, - (q31_t)0x7FF38273, (q31_t)0x0388A9E9, (q31_t)0x7FF09477, - (q31_t)0x03ED26E6, (q31_t)0x7FED5790, (q31_t)0x0451A176, - (q31_t)0x7FE9CBC0, (q31_t)0x04B6195D, (q31_t)0x7FE5F108, - (q31_t)0x051A8E5C, (q31_t)0x7FE1C76B, (q31_t)0x057F0034, - (q31_t)0x7FDD4EEC, (q31_t)0x05E36EA9, (q31_t)0x7FD8878D, - (q31_t)0x0647D97C, (q31_t)0x7FD37152, (q31_t)0x06AC406F, - (q31_t)0x7FCE0C3E, (q31_t)0x0710A344, (q31_t)0x7FC85853, - (q31_t)0x077501BE, (q31_t)0x7FC25596, (q31_t)0x07D95B9E, - (q31_t)0x7FBC040A, (q31_t)0x083DB0A7, (q31_t)0x7FB563B2, - (q31_t)0x08A2009A, (q31_t)0x7FAE7494, (q31_t)0x09064B3A, - (q31_t)0x7FA736B4, (q31_t)0x096A9049, (q31_t)0x7F9FAA15, - (q31_t)0x09CECF89, (q31_t)0x7F97CEBC, (q31_t)0x0A3308BC, - (q31_t)0x7F8FA4AF, (q31_t)0x0A973BA5, (q31_t)0x7F872BF3, - (q31_t)0x0AFB6805, (q31_t)0x7F7E648B, (q31_t)0x0B5F8D9F, - (q31_t)0x7F754E7F, (q31_t)0x0BC3AC35, (q31_t)0x7F6BE9D4, - (q31_t)0x0C27C389, (q31_t)0x7F62368F, (q31_t)0x0C8BD35E, - (q31_t)0x7F5834B6, (q31_t)0x0CEFDB75, (q31_t)0x7F4DE450, - (q31_t)0x0D53DB92, (q31_t)0x7F434563, (q31_t)0x0DB7D376, - (q31_t)0x7F3857F5, (q31_t)0x0E1BC2E3, (q31_t)0x7F2D1C0E, - (q31_t)0x0E7FA99D, (q31_t)0x7F2191B4, (q31_t)0x0EE38765, - (q31_t)0x7F15B8EE, (q31_t)0x0F475BFE, (q31_t)0x7F0991C3, - (q31_t)0x0FAB272B, (q31_t)0x7EFD1C3C, (q31_t)0x100EE8AD, - (q31_t)0x7EF0585F, (q31_t)0x1072A047, (q31_t)0x7EE34635, - (q31_t)0x10D64DBC, (q31_t)0x7ED5E5C6, (q31_t)0x1139F0CE, - (q31_t)0x7EC8371A, (q31_t)0x119D8940, (q31_t)0x7EBA3A39, - (q31_t)0x120116D4, (q31_t)0x7EABEF2C, (q31_t)0x1264994E, - (q31_t)0x7E9D55FC, (q31_t)0x12C8106E, (q31_t)0x7E8E6EB1, - (q31_t)0x132B7BF9, (q31_t)0x7E7F3956, (q31_t)0x138EDBB0, - (q31_t)0x7E6FB5F3, (q31_t)0x13F22F57, (q31_t)0x7E5FE493, - (q31_t)0x145576B1, (q31_t)0x7E4FC53E, (q31_t)0x14B8B17F, - (q31_t)0x7E3F57FE, (q31_t)0x151BDF85, (q31_t)0x7E2E9CDF, - (q31_t)0x157F0086, (q31_t)0x7E1D93E9, (q31_t)0x15E21444, - (q31_t)0x7E0C3D29, (q31_t)0x16451A83, (q31_t)0x7DFA98A7, - (q31_t)0x16A81305, (q31_t)0x7DE8A670, (q31_t)0x170AFD8D, - (q31_t)0x7DD6668E, (q31_t)0x176DD9DE, (q31_t)0x7DC3D90D, - (q31_t)0x17D0A7BB, (q31_t)0x7DB0FDF7, (q31_t)0x183366E8, - (q31_t)0x7D9DD55A, (q31_t)0x18961727, (q31_t)0x7D8A5F3F, - (q31_t)0x18F8B83C, (q31_t)0x7D769BB5, (q31_t)0x195B49E9, - (q31_t)0x7D628AC5, (q31_t)0x19BDCBF2, (q31_t)0x7D4E2C7E, - (q31_t)0x1A203E1B, (q31_t)0x7D3980EC, (q31_t)0x1A82A025, - (q31_t)0x7D24881A, (q31_t)0x1AE4F1D6, (q31_t)0x7D0F4218, - (q31_t)0x1B4732EF, (q31_t)0x7CF9AEF0, (q31_t)0x1BA96334, - (q31_t)0x7CE3CEB1, (q31_t)0x1C0B826A, (q31_t)0x7CCDA168, - (q31_t)0x1C6D9053, (q31_t)0x7CB72724, (q31_t)0x1CCF8CB3, - (q31_t)0x7CA05FF1, (q31_t)0x1D31774D, (q31_t)0x7C894BDD, - (q31_t)0x1D934FE5, (q31_t)0x7C71EAF8, (q31_t)0x1DF5163F, - (q31_t)0x7C5A3D4F, (q31_t)0x1E56CA1E, (q31_t)0x7C4242F2, - (q31_t)0x1EB86B46, (q31_t)0x7C29FBEE, (q31_t)0x1F19F97B, - (q31_t)0x7C116853, (q31_t)0x1F7B7480, (q31_t)0x7BF88830, - (q31_t)0x1FDCDC1A, (q31_t)0x7BDF5B94, (q31_t)0x203E300D, - (q31_t)0x7BC5E28F, (q31_t)0x209F701C, (q31_t)0x7BAC1D31, - (q31_t)0x21009C0B, (q31_t)0x7B920B89, (q31_t)0x2161B39F, - (q31_t)0x7B77ADA8, (q31_t)0x21C2B69C, (q31_t)0x7B5D039D, - (q31_t)0x2223A4C5, (q31_t)0x7B420D7A, (q31_t)0x22847DDF, - (q31_t)0x7B26CB4F, (q31_t)0x22E541AE, (q31_t)0x7B0B3D2C, - (q31_t)0x2345EFF7, (q31_t)0x7AEF6323, (q31_t)0x23A6887E, - (q31_t)0x7AD33D45, (q31_t)0x24070B07, (q31_t)0x7AB6CBA3, - (q31_t)0x24677757, (q31_t)0x7A9A0E4F, (q31_t)0x24C7CD32, - (q31_t)0x7A7D055B, (q31_t)0x25280C5D, (q31_t)0x7A5FB0D8, - (q31_t)0x2588349D, (q31_t)0x7A4210D8, (q31_t)0x25E845B5, - (q31_t)0x7A24256E, (q31_t)0x26483F6C, (q31_t)0x7A05EEAD, - (q31_t)0x26A82185, (q31_t)0x79E76CA6, (q31_t)0x2707EBC6, - (q31_t)0x79C89F6D, (q31_t)0x27679DF4, (q31_t)0x79A98715, - (q31_t)0x27C737D2, (q31_t)0x798A23B1, (q31_t)0x2826B928, - (q31_t)0x796A7554, (q31_t)0x288621B9, (q31_t)0x794A7C11, - (q31_t)0x28E5714A, (q31_t)0x792A37FE, (q31_t)0x2944A7A2, - (q31_t)0x7909A92C, (q31_t)0x29A3C484, (q31_t)0x78E8CFB1, - (q31_t)0x2A02C7B8, (q31_t)0x78C7ABA1, (q31_t)0x2A61B101, - (q31_t)0x78A63D10, (q31_t)0x2AC08025, (q31_t)0x78848413, - (q31_t)0x2B1F34EB, (q31_t)0x786280BF, (q31_t)0x2B7DCF17, - (q31_t)0x78403328, (q31_t)0x2BDC4E6F, (q31_t)0x781D9B64, - (q31_t)0x2C3AB2B9, (q31_t)0x77FAB988, (q31_t)0x2C98FBBA, - (q31_t)0x77D78DAA, (q31_t)0x2CF72939, (q31_t)0x77B417DF, - (q31_t)0x2D553AFB, (q31_t)0x7790583D, (q31_t)0x2DB330C7, - (q31_t)0x776C4EDB, (q31_t)0x2E110A62, (q31_t)0x7747FBCE, - (q31_t)0x2E6EC792, (q31_t)0x77235F2D, (q31_t)0x2ECC681E, - (q31_t)0x76FE790E, (q31_t)0x2F29EBCC, (q31_t)0x76D94988, - (q31_t)0x2F875262, (q31_t)0x76B3D0B3, (q31_t)0x2FE49BA6, - (q31_t)0x768E0EA5, (q31_t)0x3041C760, (q31_t)0x76680376, - (q31_t)0x309ED555, (q31_t)0x7641AF3C, (q31_t)0x30FBC54D, - (q31_t)0x761B1211, (q31_t)0x3158970D, (q31_t)0x75F42C0A, - (q31_t)0x31B54A5D, (q31_t)0x75CCFD42, (q31_t)0x3211DF03, - (q31_t)0x75A585CF, (q31_t)0x326E54C7, (q31_t)0x757DC5CA, - (q31_t)0x32CAAB6F, (q31_t)0x7555BD4B, (q31_t)0x3326E2C2, - (q31_t)0x752D6C6C, (q31_t)0x3382FA88, (q31_t)0x7504D345, - (q31_t)0x33DEF287, (q31_t)0x74DBF1EF, (q31_t)0x343ACA87, - (q31_t)0x74B2C883, (q31_t)0x3496824F, (q31_t)0x7489571B, - (q31_t)0x34F219A7, (q31_t)0x745F9DD1, (q31_t)0x354D9056, - (q31_t)0x74359CBD, (q31_t)0x35A8E624, (q31_t)0x740B53FA, - (q31_t)0x36041AD9, (q31_t)0x73E0C3A3, (q31_t)0x365F2E3B, - (q31_t)0x73B5EBD0, (q31_t)0x36BA2013, (q31_t)0x738ACC9E, - (q31_t)0x3714F02A, (q31_t)0x735F6626, (q31_t)0x376F9E46, - (q31_t)0x7333B883, (q31_t)0x37CA2A30, (q31_t)0x7307C3D0, - (q31_t)0x382493B0, (q31_t)0x72DB8828, (q31_t)0x387EDA8E, - (q31_t)0x72AF05A6, (q31_t)0x38D8FE93, (q31_t)0x72823C66, - (q31_t)0x3932FF87, (q31_t)0x72552C84, (q31_t)0x398CDD32, - (q31_t)0x7227D61C, (q31_t)0x39E6975D, (q31_t)0x71FA3948, - (q31_t)0x3A402DD1, (q31_t)0x71CC5626, (q31_t)0x3A99A057, - (q31_t)0x719E2CD2, (q31_t)0x3AF2EEB7, (q31_t)0x716FBD68, - (q31_t)0x3B4C18BA, (q31_t)0x71410804, (q31_t)0x3BA51E29, - (q31_t)0x71120CC5, (q31_t)0x3BFDFECD, (q31_t)0x70E2CBC6, - (q31_t)0x3C56BA70, (q31_t)0x70B34524, (q31_t)0x3CAF50DA, - (q31_t)0x708378FE, (q31_t)0x3D07C1D5, (q31_t)0x70536771, - (q31_t)0x3D600D2B, (q31_t)0x70231099, (q31_t)0x3DB832A5, - (q31_t)0x6FF27496, (q31_t)0x3E10320D, (q31_t)0x6FC19385, - (q31_t)0x3E680B2C, (q31_t)0x6F906D84, (q31_t)0x3EBFBDCC, - (q31_t)0x6F5F02B1, (q31_t)0x3F1749B7, (q31_t)0x6F2D532C, - (q31_t)0x3F6EAEB8, (q31_t)0x6EFB5F12, (q31_t)0x3FC5EC97, - (q31_t)0x6EC92682, (q31_t)0x401D0320, (q31_t)0x6E96A99C, - (q31_t)0x4073F21D, (q31_t)0x6E63E87F, (q31_t)0x40CAB957, - (q31_t)0x6E30E349, (q31_t)0x4121589A, (q31_t)0x6DFD9A1B, - (q31_t)0x4177CFB0, (q31_t)0x6DCA0D14, (q31_t)0x41CE1E64, - (q31_t)0x6D963C54, (q31_t)0x42244480, (q31_t)0x6D6227FA, - (q31_t)0x427A41D0, (q31_t)0x6D2DD027, (q31_t)0x42D0161E, - (q31_t)0x6CF934FB, (q31_t)0x4325C135, (q31_t)0x6CC45697, - (q31_t)0x437B42E1, (q31_t)0x6C8F351C, (q31_t)0x43D09AEC, - (q31_t)0x6C59D0A9, (q31_t)0x4425C923, (q31_t)0x6C242960, - (q31_t)0x447ACD50, (q31_t)0x6BEE3F62, (q31_t)0x44CFA73F, - (q31_t)0x6BB812D0, (q31_t)0x452456BC, (q31_t)0x6B81A3CD, - (q31_t)0x4578DB93, (q31_t)0x6B4AF278, (q31_t)0x45CD358F, - (q31_t)0x6B13FEF5, (q31_t)0x4621647C, (q31_t)0x6ADCC964, - (q31_t)0x46756827, (q31_t)0x6AA551E8, (q31_t)0x46C9405C, - (q31_t)0x6A6D98A4, (q31_t)0x471CECE6, (q31_t)0x6A359DB9, - (q31_t)0x47706D93, (q31_t)0x69FD614A, (q31_t)0x47C3C22E, - (q31_t)0x69C4E37A, (q31_t)0x4816EA85, (q31_t)0x698C246C, - (q31_t)0x4869E664, (q31_t)0x69532442, (q31_t)0x48BCB598, - (q31_t)0x6919E320, (q31_t)0x490F57EE, (q31_t)0x68E06129, - (q31_t)0x4961CD32, (q31_t)0x68A69E81, (q31_t)0x49B41533, - (q31_t)0x686C9B4B, (q31_t)0x4A062FBD, (q31_t)0x683257AA, - (q31_t)0x4A581C9D, (q31_t)0x67F7D3C4, (q31_t)0x4AA9DBA1, - (q31_t)0x67BD0FBC, (q31_t)0x4AFB6C97, (q31_t)0x67820BB6, - (q31_t)0x4B4CCF4D, (q31_t)0x6746C7D7, (q31_t)0x4B9E038F, - (q31_t)0x670B4443, (q31_t)0x4BEF092D, (q31_t)0x66CF811F, - (q31_t)0x4C3FDFF3, (q31_t)0x66937E90, (q31_t)0x4C9087B1, - (q31_t)0x66573CBB, (q31_t)0x4CE10034, (q31_t)0x661ABBC5, - (q31_t)0x4D31494B, (q31_t)0x65DDFBD3, (q31_t)0x4D8162C4, - (q31_t)0x65A0FD0B, (q31_t)0x4DD14C6E, (q31_t)0x6563BF92, - (q31_t)0x4E210617, (q31_t)0x6526438E, (q31_t)0x4E708F8F, - (q31_t)0x64E88926, (q31_t)0x4EBFE8A4, (q31_t)0x64AA907F, - (q31_t)0x4F0F1126, (q31_t)0x646C59BF, (q31_t)0x4F5E08E3, - (q31_t)0x642DE50D, (q31_t)0x4FACCFAB, (q31_t)0x63EF328F, - (q31_t)0x4FFB654D, (q31_t)0x63B0426D, (q31_t)0x5049C999, - (q31_t)0x637114CC, (q31_t)0x5097FC5E, (q31_t)0x6331A9D4, - (q31_t)0x50E5FD6C, (q31_t)0x62F201AC, (q31_t)0x5133CC94, - (q31_t)0x62B21C7B, (q31_t)0x518169A4, (q31_t)0x6271FA69, - (q31_t)0x51CED46E, (q31_t)0x62319B9D, (q31_t)0x521C0CC1, - (q31_t)0x61F1003E, (q31_t)0x5269126E, (q31_t)0x61B02876, - (q31_t)0x52B5E545, (q31_t)0x616F146B, (q31_t)0x53028517, - (q31_t)0x612DC446, (q31_t)0x534EF1B5, (q31_t)0x60EC3830, - (q31_t)0x539B2AEF, (q31_t)0x60AA704F, (q31_t)0x53E73097, - (q31_t)0x60686CCE, (q31_t)0x5433027D, (q31_t)0x60262DD5, - (q31_t)0x547EA073, (q31_t)0x5FE3B38D, (q31_t)0x54CA0A4A, - (q31_t)0x5FA0FE1E, (q31_t)0x55153FD4, (q31_t)0x5F5E0DB3, - (q31_t)0x556040E2, (q31_t)0x5F1AE273, (q31_t)0x55AB0D46, - (q31_t)0x5ED77C89, (q31_t)0x55F5A4D2, (q31_t)0x5E93DC1F, - (q31_t)0x56400757, (q31_t)0x5E50015D, (q31_t)0x568A34A9, - (q31_t)0x5E0BEC6E, (q31_t)0x56D42C99, (q31_t)0x5DC79D7C, - (q31_t)0x571DEEF9, (q31_t)0x5D8314B0, (q31_t)0x57677B9D, - (q31_t)0x5D3E5236, (q31_t)0x57B0D256, (q31_t)0x5CF95638, - (q31_t)0x57F9F2F7, (q31_t)0x5CB420DF, (q31_t)0x5842DD54, - (q31_t)0x5C6EB258, (q31_t)0x588B913F, (q31_t)0x5C290ACC, - (q31_t)0x58D40E8C, (q31_t)0x5BE32A67, (q31_t)0x591C550E, - (q31_t)0x5B9D1153, (q31_t)0x59646497, (q31_t)0x5B56BFBD, - (q31_t)0x59AC3CFD, (q31_t)0x5B1035CF, (q31_t)0x59F3DE12, - (q31_t)0x5AC973B4, (q31_t)0x5A3B47AA, (q31_t)0x5A82799A, - (q31_t)0x5A82799A, (q31_t)0x5A3B47AA, (q31_t)0x5AC973B4, - (q31_t)0x59F3DE12, (q31_t)0x5B1035CF, (q31_t)0x59AC3CFD, - (q31_t)0x5B56BFBD, (q31_t)0x59646497, (q31_t)0x5B9D1153, - (q31_t)0x591C550E, (q31_t)0x5BE32A67, (q31_t)0x58D40E8C, - (q31_t)0x5C290ACC, (q31_t)0x588B913F, (q31_t)0x5C6EB258, - (q31_t)0x5842DD54, (q31_t)0x5CB420DF, (q31_t)0x57F9F2F7, - (q31_t)0x5CF95638, (q31_t)0x57B0D256, (q31_t)0x5D3E5236, - (q31_t)0x57677B9D, (q31_t)0x5D8314B0, (q31_t)0x571DEEF9, - (q31_t)0x5DC79D7C, (q31_t)0x56D42C99, (q31_t)0x5E0BEC6E, - (q31_t)0x568A34A9, (q31_t)0x5E50015D, (q31_t)0x56400757, - (q31_t)0x5E93DC1F, (q31_t)0x55F5A4D2, (q31_t)0x5ED77C89, - (q31_t)0x55AB0D46, (q31_t)0x5F1AE273, (q31_t)0x556040E2, - (q31_t)0x5F5E0DB3, (q31_t)0x55153FD4, (q31_t)0x5FA0FE1E, - (q31_t)0x54CA0A4A, (q31_t)0x5FE3B38D, (q31_t)0x547EA073, - (q31_t)0x60262DD5, (q31_t)0x5433027D, (q31_t)0x60686CCE, - (q31_t)0x53E73097, (q31_t)0x60AA704F, (q31_t)0x539B2AEF, - (q31_t)0x60EC3830, (q31_t)0x534EF1B5, (q31_t)0x612DC446, - (q31_t)0x53028517, (q31_t)0x616F146B, (q31_t)0x52B5E545, - (q31_t)0x61B02876, (q31_t)0x5269126E, (q31_t)0x61F1003E, - (q31_t)0x521C0CC1, (q31_t)0x62319B9D, (q31_t)0x51CED46E, - (q31_t)0x6271FA69, (q31_t)0x518169A4, (q31_t)0x62B21C7B, - (q31_t)0x5133CC94, (q31_t)0x62F201AC, (q31_t)0x50E5FD6C, - (q31_t)0x6331A9D4, (q31_t)0x5097FC5E, (q31_t)0x637114CC, - (q31_t)0x5049C999, (q31_t)0x63B0426D, (q31_t)0x4FFB654D, - (q31_t)0x63EF328F, (q31_t)0x4FACCFAB, (q31_t)0x642DE50D, - (q31_t)0x4F5E08E3, (q31_t)0x646C59BF, (q31_t)0x4F0F1126, - (q31_t)0x64AA907F, (q31_t)0x4EBFE8A4, (q31_t)0x64E88926, - (q31_t)0x4E708F8F, (q31_t)0x6526438E, (q31_t)0x4E210617, - (q31_t)0x6563BF92, (q31_t)0x4DD14C6E, (q31_t)0x65A0FD0B, - (q31_t)0x4D8162C4, (q31_t)0x65DDFBD3, (q31_t)0x4D31494B, - (q31_t)0x661ABBC5, (q31_t)0x4CE10034, (q31_t)0x66573CBB, - (q31_t)0x4C9087B1, (q31_t)0x66937E90, (q31_t)0x4C3FDFF3, - (q31_t)0x66CF811F, (q31_t)0x4BEF092D, (q31_t)0x670B4443, - (q31_t)0x4B9E038F, (q31_t)0x6746C7D7, (q31_t)0x4B4CCF4D, - (q31_t)0x67820BB6, (q31_t)0x4AFB6C97, (q31_t)0x67BD0FBC, - (q31_t)0x4AA9DBA1, (q31_t)0x67F7D3C4, (q31_t)0x4A581C9D, - (q31_t)0x683257AA, (q31_t)0x4A062FBD, (q31_t)0x686C9B4B, - (q31_t)0x49B41533, (q31_t)0x68A69E81, (q31_t)0x4961CD32, - (q31_t)0x68E06129, (q31_t)0x490F57EE, (q31_t)0x6919E320, - (q31_t)0x48BCB598, (q31_t)0x69532442, (q31_t)0x4869E664, - (q31_t)0x698C246C, (q31_t)0x4816EA85, (q31_t)0x69C4E37A, - (q31_t)0x47C3C22E, (q31_t)0x69FD614A, (q31_t)0x47706D93, - (q31_t)0x6A359DB9, (q31_t)0x471CECE6, (q31_t)0x6A6D98A4, - (q31_t)0x46C9405C, (q31_t)0x6AA551E8, (q31_t)0x46756827, - (q31_t)0x6ADCC964, (q31_t)0x4621647C, (q31_t)0x6B13FEF5, - (q31_t)0x45CD358F, (q31_t)0x6B4AF278, (q31_t)0x4578DB93, - (q31_t)0x6B81A3CD, (q31_t)0x452456BC, (q31_t)0x6BB812D0, - (q31_t)0x44CFA73F, (q31_t)0x6BEE3F62, (q31_t)0x447ACD50, - (q31_t)0x6C242960, (q31_t)0x4425C923, (q31_t)0x6C59D0A9, - (q31_t)0x43D09AEC, (q31_t)0x6C8F351C, (q31_t)0x437B42E1, - (q31_t)0x6CC45697, (q31_t)0x4325C135, (q31_t)0x6CF934FB, - (q31_t)0x42D0161E, (q31_t)0x6D2DD027, (q31_t)0x427A41D0, - (q31_t)0x6D6227FA, (q31_t)0x42244480, (q31_t)0x6D963C54, - (q31_t)0x41CE1E64, (q31_t)0x6DCA0D14, (q31_t)0x4177CFB0, - (q31_t)0x6DFD9A1B, (q31_t)0x4121589A, (q31_t)0x6E30E349, - (q31_t)0x40CAB957, (q31_t)0x6E63E87F, (q31_t)0x4073F21D, - (q31_t)0x6E96A99C, (q31_t)0x401D0320, (q31_t)0x6EC92682, - (q31_t)0x3FC5EC97, (q31_t)0x6EFB5F12, (q31_t)0x3F6EAEB8, - (q31_t)0x6F2D532C, (q31_t)0x3F1749B7, (q31_t)0x6F5F02B1, - (q31_t)0x3EBFBDCC, (q31_t)0x6F906D84, (q31_t)0x3E680B2C, - (q31_t)0x6FC19385, (q31_t)0x3E10320D, (q31_t)0x6FF27496, - (q31_t)0x3DB832A5, (q31_t)0x70231099, (q31_t)0x3D600D2B, - (q31_t)0x70536771, (q31_t)0x3D07C1D5, (q31_t)0x708378FE, - (q31_t)0x3CAF50DA, (q31_t)0x70B34524, (q31_t)0x3C56BA70, - (q31_t)0x70E2CBC6, (q31_t)0x3BFDFECD, (q31_t)0x71120CC5, - (q31_t)0x3BA51E29, (q31_t)0x71410804, (q31_t)0x3B4C18BA, - (q31_t)0x716FBD68, (q31_t)0x3AF2EEB7, (q31_t)0x719E2CD2, - (q31_t)0x3A99A057, (q31_t)0x71CC5626, (q31_t)0x3A402DD1, - (q31_t)0x71FA3948, (q31_t)0x39E6975D, (q31_t)0x7227D61C, - (q31_t)0x398CDD32, (q31_t)0x72552C84, (q31_t)0x3932FF87, - (q31_t)0x72823C66, (q31_t)0x38D8FE93, (q31_t)0x72AF05A6, - (q31_t)0x387EDA8E, (q31_t)0x72DB8828, (q31_t)0x382493B0, - (q31_t)0x7307C3D0, (q31_t)0x37CA2A30, (q31_t)0x7333B883, - (q31_t)0x376F9E46, (q31_t)0x735F6626, (q31_t)0x3714F02A, - (q31_t)0x738ACC9E, (q31_t)0x36BA2013, (q31_t)0x73B5EBD0, - (q31_t)0x365F2E3B, (q31_t)0x73E0C3A3, (q31_t)0x36041AD9, - (q31_t)0x740B53FA, (q31_t)0x35A8E624, (q31_t)0x74359CBD, - (q31_t)0x354D9056, (q31_t)0x745F9DD1, (q31_t)0x34F219A7, - (q31_t)0x7489571B, (q31_t)0x3496824F, (q31_t)0x74B2C883, - (q31_t)0x343ACA87, (q31_t)0x74DBF1EF, (q31_t)0x33DEF287, - (q31_t)0x7504D345, (q31_t)0x3382FA88, (q31_t)0x752D6C6C, - (q31_t)0x3326E2C2, (q31_t)0x7555BD4B, (q31_t)0x32CAAB6F, - (q31_t)0x757DC5CA, (q31_t)0x326E54C7, (q31_t)0x75A585CF, - (q31_t)0x3211DF03, (q31_t)0x75CCFD42, (q31_t)0x31B54A5D, - (q31_t)0x75F42C0A, (q31_t)0x3158970D, (q31_t)0x761B1211, - (q31_t)0x30FBC54D, (q31_t)0x7641AF3C, (q31_t)0x309ED555, - (q31_t)0x76680376, (q31_t)0x3041C760, (q31_t)0x768E0EA5, - (q31_t)0x2FE49BA6, (q31_t)0x76B3D0B3, (q31_t)0x2F875262, - (q31_t)0x76D94988, (q31_t)0x2F29EBCC, (q31_t)0x76FE790E, - (q31_t)0x2ECC681E, (q31_t)0x77235F2D, (q31_t)0x2E6EC792, - (q31_t)0x7747FBCE, (q31_t)0x2E110A62, (q31_t)0x776C4EDB, - (q31_t)0x2DB330C7, (q31_t)0x7790583D, (q31_t)0x2D553AFB, - (q31_t)0x77B417DF, (q31_t)0x2CF72939, (q31_t)0x77D78DAA, - (q31_t)0x2C98FBBA, (q31_t)0x77FAB988, (q31_t)0x2C3AB2B9, - (q31_t)0x781D9B64, (q31_t)0x2BDC4E6F, (q31_t)0x78403328, - (q31_t)0x2B7DCF17, (q31_t)0x786280BF, (q31_t)0x2B1F34EB, - (q31_t)0x78848413, (q31_t)0x2AC08025, (q31_t)0x78A63D10, - (q31_t)0x2A61B101, (q31_t)0x78C7ABA1, (q31_t)0x2A02C7B8, - (q31_t)0x78E8CFB1, (q31_t)0x29A3C484, (q31_t)0x7909A92C, - (q31_t)0x2944A7A2, (q31_t)0x792A37FE, (q31_t)0x28E5714A, - (q31_t)0x794A7C11, (q31_t)0x288621B9, (q31_t)0x796A7554, - (q31_t)0x2826B928, (q31_t)0x798A23B1, (q31_t)0x27C737D2, - (q31_t)0x79A98715, (q31_t)0x27679DF4, (q31_t)0x79C89F6D, - (q31_t)0x2707EBC6, (q31_t)0x79E76CA6, (q31_t)0x26A82185, - (q31_t)0x7A05EEAD, (q31_t)0x26483F6C, (q31_t)0x7A24256E, - (q31_t)0x25E845B5, (q31_t)0x7A4210D8, (q31_t)0x2588349D, - (q31_t)0x7A5FB0D8, (q31_t)0x25280C5D, (q31_t)0x7A7D055B, - (q31_t)0x24C7CD32, (q31_t)0x7A9A0E4F, (q31_t)0x24677757, - (q31_t)0x7AB6CBA3, (q31_t)0x24070B07, (q31_t)0x7AD33D45, - (q31_t)0x23A6887E, (q31_t)0x7AEF6323, (q31_t)0x2345EFF7, - (q31_t)0x7B0B3D2C, (q31_t)0x22E541AE, (q31_t)0x7B26CB4F, - (q31_t)0x22847DDF, (q31_t)0x7B420D7A, (q31_t)0x2223A4C5, - (q31_t)0x7B5D039D, (q31_t)0x21C2B69C, (q31_t)0x7B77ADA8, - (q31_t)0x2161B39F, (q31_t)0x7B920B89, (q31_t)0x21009C0B, - (q31_t)0x7BAC1D31, (q31_t)0x209F701C, (q31_t)0x7BC5E28F, - (q31_t)0x203E300D, (q31_t)0x7BDF5B94, (q31_t)0x1FDCDC1A, - (q31_t)0x7BF88830, (q31_t)0x1F7B7480, (q31_t)0x7C116853, - (q31_t)0x1F19F97B, (q31_t)0x7C29FBEE, (q31_t)0x1EB86B46, - (q31_t)0x7C4242F2, (q31_t)0x1E56CA1E, (q31_t)0x7C5A3D4F, - (q31_t)0x1DF5163F, (q31_t)0x7C71EAF8, (q31_t)0x1D934FE5, - (q31_t)0x7C894BDD, (q31_t)0x1D31774D, (q31_t)0x7CA05FF1, - (q31_t)0x1CCF8CB3, (q31_t)0x7CB72724, (q31_t)0x1C6D9053, - (q31_t)0x7CCDA168, (q31_t)0x1C0B826A, (q31_t)0x7CE3CEB1, - (q31_t)0x1BA96334, (q31_t)0x7CF9AEF0, (q31_t)0x1B4732EF, - (q31_t)0x7D0F4218, (q31_t)0x1AE4F1D6, (q31_t)0x7D24881A, - (q31_t)0x1A82A025, (q31_t)0x7D3980EC, (q31_t)0x1A203E1B, - (q31_t)0x7D4E2C7E, (q31_t)0x19BDCBF2, (q31_t)0x7D628AC5, - (q31_t)0x195B49E9, (q31_t)0x7D769BB5, (q31_t)0x18F8B83C, - (q31_t)0x7D8A5F3F, (q31_t)0x18961727, (q31_t)0x7D9DD55A, - (q31_t)0x183366E8, (q31_t)0x7DB0FDF7, (q31_t)0x17D0A7BB, - (q31_t)0x7DC3D90D, (q31_t)0x176DD9DE, (q31_t)0x7DD6668E, - (q31_t)0x170AFD8D, (q31_t)0x7DE8A670, (q31_t)0x16A81305, - (q31_t)0x7DFA98A7, (q31_t)0x16451A83, (q31_t)0x7E0C3D29, - (q31_t)0x15E21444, (q31_t)0x7E1D93E9, (q31_t)0x157F0086, - (q31_t)0x7E2E9CDF, (q31_t)0x151BDF85, (q31_t)0x7E3F57FE, - (q31_t)0x14B8B17F, (q31_t)0x7E4FC53E, (q31_t)0x145576B1, - (q31_t)0x7E5FE493, (q31_t)0x13F22F57, (q31_t)0x7E6FB5F3, - (q31_t)0x138EDBB0, (q31_t)0x7E7F3956, (q31_t)0x132B7BF9, - (q31_t)0x7E8E6EB1, (q31_t)0x12C8106E, (q31_t)0x7E9D55FC, - (q31_t)0x1264994E, (q31_t)0x7EABEF2C, (q31_t)0x120116D4, - (q31_t)0x7EBA3A39, (q31_t)0x119D8940, (q31_t)0x7EC8371A, - (q31_t)0x1139F0CE, (q31_t)0x7ED5E5C6, (q31_t)0x10D64DBC, - (q31_t)0x7EE34635, (q31_t)0x1072A047, (q31_t)0x7EF0585F, - (q31_t)0x100EE8AD, (q31_t)0x7EFD1C3C, (q31_t)0x0FAB272B, - (q31_t)0x7F0991C3, (q31_t)0x0F475BFE, (q31_t)0x7F15B8EE, - (q31_t)0x0EE38765, (q31_t)0x7F2191B4, (q31_t)0x0E7FA99D, - (q31_t)0x7F2D1C0E, (q31_t)0x0E1BC2E3, (q31_t)0x7F3857F5, - (q31_t)0x0DB7D376, (q31_t)0x7F434563, (q31_t)0x0D53DB92, - (q31_t)0x7F4DE450, (q31_t)0x0CEFDB75, (q31_t)0x7F5834B6, - (q31_t)0x0C8BD35E, (q31_t)0x7F62368F, (q31_t)0x0C27C389, - (q31_t)0x7F6BE9D4, (q31_t)0x0BC3AC35, (q31_t)0x7F754E7F, - (q31_t)0x0B5F8D9F, (q31_t)0x7F7E648B, (q31_t)0x0AFB6805, - (q31_t)0x7F872BF3, (q31_t)0x0A973BA5, (q31_t)0x7F8FA4AF, - (q31_t)0x0A3308BC, (q31_t)0x7F97CEBC, (q31_t)0x09CECF89, - (q31_t)0x7F9FAA15, (q31_t)0x096A9049, (q31_t)0x7FA736B4, - (q31_t)0x09064B3A, (q31_t)0x7FAE7494, (q31_t)0x08A2009A, - (q31_t)0x7FB563B2, (q31_t)0x083DB0A7, (q31_t)0x7FBC040A, - (q31_t)0x07D95B9E, (q31_t)0x7FC25596, (q31_t)0x077501BE, - (q31_t)0x7FC85853, (q31_t)0x0710A344, (q31_t)0x7FCE0C3E, - (q31_t)0x06AC406F, (q31_t)0x7FD37152, (q31_t)0x0647D97C, - (q31_t)0x7FD8878D, (q31_t)0x05E36EA9, (q31_t)0x7FDD4EEC, - (q31_t)0x057F0034, (q31_t)0x7FE1C76B, (q31_t)0x051A8E5C, - (q31_t)0x7FE5F108, (q31_t)0x04B6195D, (q31_t)0x7FE9CBC0, - (q31_t)0x0451A176, (q31_t)0x7FED5790, (q31_t)0x03ED26E6, - (q31_t)0x7FF09477, (q31_t)0x0388A9E9, (q31_t)0x7FF38273, - (q31_t)0x03242ABF, (q31_t)0x7FF62182, (q31_t)0x02BFA9A4, - (q31_t)0x7FF871A1, (q31_t)0x025B26D7, (q31_t)0x7FFA72D1, - (q31_t)0x01F6A296, (q31_t)0x7FFC250F, (q31_t)0x01921D1F, - (q31_t)0x7FFD885A, (q31_t)0x012D96B0, (q31_t)0x7FFE9CB2, - (q31_t)0x00C90F88, (q31_t)0x7FFF6216, (q31_t)0x006487E3, - (q31_t)0x7FFFD885, (q31_t)0x00000000, (q31_t)0x7FFFFFFF, - (q31_t)0xFF9B781D, (q31_t)0x7FFFD885, (q31_t)0xFF36F078, - (q31_t)0x7FFF6216, (q31_t)0xFED2694F, (q31_t)0x7FFE9CB2, - (q31_t)0xFE6DE2E0, (q31_t)0x7FFD885A, (q31_t)0xFE095D69, - (q31_t)0x7FFC250F, (q31_t)0xFDA4D928, (q31_t)0x7FFA72D1, - (q31_t)0xFD40565B, (q31_t)0x7FF871A1, (q31_t)0xFCDBD541, - (q31_t)0x7FF62182, (q31_t)0xFC775616, (q31_t)0x7FF38273, - (q31_t)0xFC12D919, (q31_t)0x7FF09477, (q31_t)0xFBAE5E89, - (q31_t)0x7FED5790, (q31_t)0xFB49E6A2, (q31_t)0x7FE9CBC0, - (q31_t)0xFAE571A4, (q31_t)0x7FE5F108, (q31_t)0xFA80FFCB, - (q31_t)0x7FE1C76B, (q31_t)0xFA1C9156, (q31_t)0x7FDD4EEC, - (q31_t)0xF9B82683, (q31_t)0x7FD8878D, (q31_t)0xF953BF90, - (q31_t)0x7FD37152, (q31_t)0xF8EF5CBB, (q31_t)0x7FCE0C3E, - (q31_t)0xF88AFE41, (q31_t)0x7FC85853, (q31_t)0xF826A461, - (q31_t)0x7FC25596, (q31_t)0xF7C24F58, (q31_t)0x7FBC040A, - (q31_t)0xF75DFF65, (q31_t)0x7FB563B2, (q31_t)0xF6F9B4C5, - (q31_t)0x7FAE7494, (q31_t)0xF6956FB6, (q31_t)0x7FA736B4, - (q31_t)0xF6313076, (q31_t)0x7F9FAA15, (q31_t)0xF5CCF743, - (q31_t)0x7F97CEBC, (q31_t)0xF568C45A, (q31_t)0x7F8FA4AF, - (q31_t)0xF50497FA, (q31_t)0x7F872BF3, (q31_t)0xF4A07260, - (q31_t)0x7F7E648B, (q31_t)0xF43C53CA, (q31_t)0x7F754E7F, - (q31_t)0xF3D83C76, (q31_t)0x7F6BE9D4, (q31_t)0xF3742CA1, - (q31_t)0x7F62368F, (q31_t)0xF310248A, (q31_t)0x7F5834B6, - (q31_t)0xF2AC246D, (q31_t)0x7F4DE450, (q31_t)0xF2482C89, - (q31_t)0x7F434563, (q31_t)0xF1E43D1C, (q31_t)0x7F3857F5, - (q31_t)0xF1805662, (q31_t)0x7F2D1C0E, (q31_t)0xF11C789A, - (q31_t)0x7F2191B4, (q31_t)0xF0B8A401, (q31_t)0x7F15B8EE, - (q31_t)0xF054D8D4, (q31_t)0x7F0991C3, (q31_t)0xEFF11752, - (q31_t)0x7EFD1C3C, (q31_t)0xEF8D5FB8, (q31_t)0x7EF0585F, - (q31_t)0xEF29B243, (q31_t)0x7EE34635, (q31_t)0xEEC60F31, - (q31_t)0x7ED5E5C6, (q31_t)0xEE6276BF, (q31_t)0x7EC8371A, - (q31_t)0xEDFEE92B, (q31_t)0x7EBA3A39, (q31_t)0xED9B66B2, - (q31_t)0x7EABEF2C, (q31_t)0xED37EF91, (q31_t)0x7E9D55FC, - (q31_t)0xECD48406, (q31_t)0x7E8E6EB1, (q31_t)0xEC71244F, - (q31_t)0x7E7F3956, (q31_t)0xEC0DD0A8, (q31_t)0x7E6FB5F3, - (q31_t)0xEBAA894E, (q31_t)0x7E5FE493, (q31_t)0xEB474E80, - (q31_t)0x7E4FC53E, (q31_t)0xEAE4207A, (q31_t)0x7E3F57FE, - (q31_t)0xEA80FF79, (q31_t)0x7E2E9CDF, (q31_t)0xEA1DEBBB, - (q31_t)0x7E1D93E9, (q31_t)0xE9BAE57C, (q31_t)0x7E0C3D29, - (q31_t)0xE957ECFB, (q31_t)0x7DFA98A7, (q31_t)0xE8F50273, - (q31_t)0x7DE8A670, (q31_t)0xE8922621, (q31_t)0x7DD6668E, - (q31_t)0xE82F5844, (q31_t)0x7DC3D90D, (q31_t)0xE7CC9917, - (q31_t)0x7DB0FDF7, (q31_t)0xE769E8D8, (q31_t)0x7D9DD55A, - (q31_t)0xE70747C3, (q31_t)0x7D8A5F3F, (q31_t)0xE6A4B616, - (q31_t)0x7D769BB5, (q31_t)0xE642340D, (q31_t)0x7D628AC5, - (q31_t)0xE5DFC1E4, (q31_t)0x7D4E2C7E, (q31_t)0xE57D5FDA, - (q31_t)0x7D3980EC, (q31_t)0xE51B0E2A, (q31_t)0x7D24881A, - (q31_t)0xE4B8CD10, (q31_t)0x7D0F4218, (q31_t)0xE4569CCB, - (q31_t)0x7CF9AEF0, (q31_t)0xE3F47D95, (q31_t)0x7CE3CEB1, - (q31_t)0xE3926FAC, (q31_t)0x7CCDA168, (q31_t)0xE330734C, - (q31_t)0x7CB72724, (q31_t)0xE2CE88B2, (q31_t)0x7CA05FF1, - (q31_t)0xE26CB01A, (q31_t)0x7C894BDD, (q31_t)0xE20AE9C1, - (q31_t)0x7C71EAF8, (q31_t)0xE1A935E1, (q31_t)0x7C5A3D4F, - (q31_t)0xE14794B9, (q31_t)0x7C4242F2, (q31_t)0xE0E60684, - (q31_t)0x7C29FBEE, (q31_t)0xE0848B7F, (q31_t)0x7C116853, - (q31_t)0xE02323E5, (q31_t)0x7BF88830, (q31_t)0xDFC1CFF2, - (q31_t)0x7BDF5B94, (q31_t)0xDF608FE3, (q31_t)0x7BC5E28F, - (q31_t)0xDEFF63F4, (q31_t)0x7BAC1D31, (q31_t)0xDE9E4C60, - (q31_t)0x7B920B89, (q31_t)0xDE3D4963, (q31_t)0x7B77ADA8, - (q31_t)0xDDDC5B3A, (q31_t)0x7B5D039D, (q31_t)0xDD7B8220, - (q31_t)0x7B420D7A, (q31_t)0xDD1ABE51, (q31_t)0x7B26CB4F, - (q31_t)0xDCBA1008, (q31_t)0x7B0B3D2C, (q31_t)0xDC597781, - (q31_t)0x7AEF6323, (q31_t)0xDBF8F4F8, (q31_t)0x7AD33D45, - (q31_t)0xDB9888A8, (q31_t)0x7AB6CBA3, (q31_t)0xDB3832CD, - (q31_t)0x7A9A0E4F, (q31_t)0xDAD7F3A2, (q31_t)0x7A7D055B, - (q31_t)0xDA77CB62, (q31_t)0x7A5FB0D8, (q31_t)0xDA17BA4A, - (q31_t)0x7A4210D8, (q31_t)0xD9B7C093, (q31_t)0x7A24256E, - (q31_t)0xD957DE7A, (q31_t)0x7A05EEAD, (q31_t)0xD8F81439, - (q31_t)0x79E76CA6, (q31_t)0xD898620C, (q31_t)0x79C89F6D, - (q31_t)0xD838C82D, (q31_t)0x79A98715, (q31_t)0xD7D946D7, - (q31_t)0x798A23B1, (q31_t)0xD779DE46, (q31_t)0x796A7554, - (q31_t)0xD71A8EB5, (q31_t)0x794A7C11, (q31_t)0xD6BB585D, - (q31_t)0x792A37FE, (q31_t)0xD65C3B7B, (q31_t)0x7909A92C, - (q31_t)0xD5FD3847, (q31_t)0x78E8CFB1, (q31_t)0xD59E4EFE, - (q31_t)0x78C7ABA1, (q31_t)0xD53F7FDA, (q31_t)0x78A63D10, - (q31_t)0xD4E0CB14, (q31_t)0x78848413, (q31_t)0xD48230E8, - (q31_t)0x786280BF, (q31_t)0xD423B190, (q31_t)0x78403328, - (q31_t)0xD3C54D46, (q31_t)0x781D9B64, (q31_t)0xD3670445, - (q31_t)0x77FAB988, (q31_t)0xD308D6C6, (q31_t)0x77D78DAA, - (q31_t)0xD2AAC504, (q31_t)0x77B417DF, (q31_t)0xD24CCF38, - (q31_t)0x7790583D, (q31_t)0xD1EEF59E, (q31_t)0x776C4EDB, - (q31_t)0xD191386D, (q31_t)0x7747FBCE, (q31_t)0xD13397E1, - (q31_t)0x77235F2D, (q31_t)0xD0D61433, (q31_t)0x76FE790E, - (q31_t)0xD078AD9D, (q31_t)0x76D94988, (q31_t)0xD01B6459, - (q31_t)0x76B3D0B3, (q31_t)0xCFBE389F, (q31_t)0x768E0EA5, - (q31_t)0xCF612AAA, (q31_t)0x76680376, (q31_t)0xCF043AB2, - (q31_t)0x7641AF3C, (q31_t)0xCEA768F2, (q31_t)0x761B1211, - (q31_t)0xCE4AB5A2, (q31_t)0x75F42C0A, (q31_t)0xCDEE20FC, - (q31_t)0x75CCFD42, (q31_t)0xCD91AB38, (q31_t)0x75A585CF, - (q31_t)0xCD355490, (q31_t)0x757DC5CA, (q31_t)0xCCD91D3D, - (q31_t)0x7555BD4B, (q31_t)0xCC7D0577, (q31_t)0x752D6C6C, - (q31_t)0xCC210D78, (q31_t)0x7504D345, (q31_t)0xCBC53578, - (q31_t)0x74DBF1EF, (q31_t)0xCB697DB0, (q31_t)0x74B2C883, - (q31_t)0xCB0DE658, (q31_t)0x7489571B, (q31_t)0xCAB26FA9, - (q31_t)0x745F9DD1, (q31_t)0xCA5719DB, (q31_t)0x74359CBD, - (q31_t)0xC9FBE527, (q31_t)0x740B53FA, (q31_t)0xC9A0D1C4, - (q31_t)0x73E0C3A3, (q31_t)0xC945DFEC, (q31_t)0x73B5EBD0, - (q31_t)0xC8EB0FD6, (q31_t)0x738ACC9E, (q31_t)0xC89061BA, - (q31_t)0x735F6626, (q31_t)0xC835D5D0, (q31_t)0x7333B883, - (q31_t)0xC7DB6C50, (q31_t)0x7307C3D0, (q31_t)0xC7812571, - (q31_t)0x72DB8828, (q31_t)0xC727016C, (q31_t)0x72AF05A6, - (q31_t)0xC6CD0079, (q31_t)0x72823C66, (q31_t)0xC67322CD, - (q31_t)0x72552C84, (q31_t)0xC61968A2, (q31_t)0x7227D61C, - (q31_t)0xC5BFD22E, (q31_t)0x71FA3948, (q31_t)0xC5665FA8, - (q31_t)0x71CC5626, (q31_t)0xC50D1148, (q31_t)0x719E2CD2, - (q31_t)0xC4B3E746, (q31_t)0x716FBD68, (q31_t)0xC45AE1D7, - (q31_t)0x71410804, (q31_t)0xC4020132, (q31_t)0x71120CC5, - (q31_t)0xC3A9458F, (q31_t)0x70E2CBC6, (q31_t)0xC350AF25, - (q31_t)0x70B34524, (q31_t)0xC2F83E2A, (q31_t)0x708378FE, - (q31_t)0xC29FF2D4, (q31_t)0x70536771, (q31_t)0xC247CD5A, - (q31_t)0x70231099, (q31_t)0xC1EFCDF2, (q31_t)0x6FF27496, - (q31_t)0xC197F4D3, (q31_t)0x6FC19385, (q31_t)0xC1404233, - (q31_t)0x6F906D84, (q31_t)0xC0E8B648, (q31_t)0x6F5F02B1, - (q31_t)0xC0915147, (q31_t)0x6F2D532C, (q31_t)0xC03A1368, - (q31_t)0x6EFB5F12, (q31_t)0xBFE2FCDF, (q31_t)0x6EC92682, - (q31_t)0xBF8C0DE2, (q31_t)0x6E96A99C, (q31_t)0xBF3546A8, - (q31_t)0x6E63E87F, (q31_t)0xBEDEA765, (q31_t)0x6E30E349, - (q31_t)0xBE88304F, (q31_t)0x6DFD9A1B, (q31_t)0xBE31E19B, - (q31_t)0x6DCA0D14, (q31_t)0xBDDBBB7F, (q31_t)0x6D963C54, - (q31_t)0xBD85BE2F, (q31_t)0x6D6227FA, (q31_t)0xBD2FE9E1, - (q31_t)0x6D2DD027, (q31_t)0xBCDA3ECA, (q31_t)0x6CF934FB, - (q31_t)0xBC84BD1E, (q31_t)0x6CC45697, (q31_t)0xBC2F6513, - (q31_t)0x6C8F351C, (q31_t)0xBBDA36DC, (q31_t)0x6C59D0A9, - (q31_t)0xBB8532AF, (q31_t)0x6C242960, (q31_t)0xBB3058C0, - (q31_t)0x6BEE3F62, (q31_t)0xBADBA943, (q31_t)0x6BB812D0, - (q31_t)0xBA87246C, (q31_t)0x6B81A3CD, (q31_t)0xBA32CA70, - (q31_t)0x6B4AF278, (q31_t)0xB9DE9B83, (q31_t)0x6B13FEF5, - (q31_t)0xB98A97D8, (q31_t)0x6ADCC964, (q31_t)0xB936BFA3, - (q31_t)0x6AA551E8, (q31_t)0xB8E31319, (q31_t)0x6A6D98A4, - (q31_t)0xB88F926C, (q31_t)0x6A359DB9, (q31_t)0xB83C3DD1, - (q31_t)0x69FD614A, (q31_t)0xB7E9157A, (q31_t)0x69C4E37A, - (q31_t)0xB796199B, (q31_t)0x698C246C, (q31_t)0xB7434A67, - (q31_t)0x69532442, (q31_t)0xB6F0A811, (q31_t)0x6919E320, - (q31_t)0xB69E32CD, (q31_t)0x68E06129, (q31_t)0xB64BEACC, - (q31_t)0x68A69E81, (q31_t)0xB5F9D042, (q31_t)0x686C9B4B, - (q31_t)0xB5A7E362, (q31_t)0x683257AA, (q31_t)0xB556245E, - (q31_t)0x67F7D3C4, (q31_t)0xB5049368, (q31_t)0x67BD0FBC, - (q31_t)0xB4B330B2, (q31_t)0x67820BB6, (q31_t)0xB461FC70, - (q31_t)0x6746C7D7, (q31_t)0xB410F6D2, (q31_t)0x670B4443, - (q31_t)0xB3C0200C, (q31_t)0x66CF811F, (q31_t)0xB36F784E, - (q31_t)0x66937E90, (q31_t)0xB31EFFCB, (q31_t)0x66573CBB, - (q31_t)0xB2CEB6B5, (q31_t)0x661ABBC5, (q31_t)0xB27E9D3B, - (q31_t)0x65DDFBD3, (q31_t)0xB22EB392, (q31_t)0x65A0FD0B, - (q31_t)0xB1DEF9E8, (q31_t)0x6563BF92, (q31_t)0xB18F7070, - (q31_t)0x6526438E, (q31_t)0xB140175B, (q31_t)0x64E88926, - (q31_t)0xB0F0EEDA, (q31_t)0x64AA907F, (q31_t)0xB0A1F71C, - (q31_t)0x646C59BF, (q31_t)0xB0533055, (q31_t)0x642DE50D, - (q31_t)0xB0049AB2, (q31_t)0x63EF328F, (q31_t)0xAFB63667, - (q31_t)0x63B0426D, (q31_t)0xAF6803A1, (q31_t)0x637114CC, - (q31_t)0xAF1A0293, (q31_t)0x6331A9D4, (q31_t)0xAECC336B, - (q31_t)0x62F201AC, (q31_t)0xAE7E965B, (q31_t)0x62B21C7B, - (q31_t)0xAE312B91, (q31_t)0x6271FA69, (q31_t)0xADE3F33E, - (q31_t)0x62319B9D, (q31_t)0xAD96ED91, (q31_t)0x61F1003E, - (q31_t)0xAD4A1ABA, (q31_t)0x61B02876, (q31_t)0xACFD7AE8, - (q31_t)0x616F146B, (q31_t)0xACB10E4A, (q31_t)0x612DC446, - (q31_t)0xAC64D510, (q31_t)0x60EC3830, (q31_t)0xAC18CF68, - (q31_t)0x60AA704F, (q31_t)0xABCCFD82, (q31_t)0x60686CCE, - (q31_t)0xAB815F8C, (q31_t)0x60262DD5, (q31_t)0xAB35F5B5, - (q31_t)0x5FE3B38D, (q31_t)0xAAEAC02B, (q31_t)0x5FA0FE1E, - (q31_t)0xAA9FBF1D, (q31_t)0x5F5E0DB3, (q31_t)0xAA54F2B9, - (q31_t)0x5F1AE273, (q31_t)0xAA0A5B2D, (q31_t)0x5ED77C89, - (q31_t)0xA9BFF8A8, (q31_t)0x5E93DC1F, (q31_t)0xA975CB56, - (q31_t)0x5E50015D, (q31_t)0xA92BD366, (q31_t)0x5E0BEC6E, - (q31_t)0xA8E21106, (q31_t)0x5DC79D7C, (q31_t)0xA8988463, - (q31_t)0x5D8314B0, (q31_t)0xA84F2DA9, (q31_t)0x5D3E5236, - (q31_t)0xA8060D08, (q31_t)0x5CF95638, (q31_t)0xA7BD22AB, - (q31_t)0x5CB420DF, (q31_t)0xA7746EC0, (q31_t)0x5C6EB258, - (q31_t)0xA72BF173, (q31_t)0x5C290ACC, (q31_t)0xA6E3AAF2, - (q31_t)0x5BE32A67, (q31_t)0xA69B9B68, (q31_t)0x5B9D1153, - (q31_t)0xA653C302, (q31_t)0x5B56BFBD, (q31_t)0xA60C21ED, - (q31_t)0x5B1035CF, (q31_t)0xA5C4B855, (q31_t)0x5AC973B4, - (q31_t)0xA57D8666, (q31_t)0x5A82799A, (q31_t)0xA5368C4B, - (q31_t)0x5A3B47AA, (q31_t)0xA4EFCA31, (q31_t)0x59F3DE12, - (q31_t)0xA4A94042, (q31_t)0x59AC3CFD, (q31_t)0xA462EEAC, - (q31_t)0x59646497, (q31_t)0xA41CD598, (q31_t)0x591C550E, - (q31_t)0xA3D6F533, (q31_t)0x58D40E8C, (q31_t)0xA3914DA7, - (q31_t)0x588B913F, (q31_t)0xA34BDF20, (q31_t)0x5842DD54, - (q31_t)0xA306A9C7, (q31_t)0x57F9F2F7, (q31_t)0xA2C1ADC9, - (q31_t)0x57B0D256, (q31_t)0xA27CEB4F, (q31_t)0x57677B9D, - (q31_t)0xA2386283, (q31_t)0x571DEEF9, (q31_t)0xA1F41391, - (q31_t)0x56D42C99, (q31_t)0xA1AFFEA2, (q31_t)0x568A34A9, - (q31_t)0xA16C23E1, (q31_t)0x56400757, (q31_t)0xA1288376, - (q31_t)0x55F5A4D2, (q31_t)0xA0E51D8C, (q31_t)0x55AB0D46, - (q31_t)0xA0A1F24C, (q31_t)0x556040E2, (q31_t)0xA05F01E1, - (q31_t)0x55153FD4, (q31_t)0xA01C4C72, (q31_t)0x54CA0A4A, - (q31_t)0x9FD9D22A, (q31_t)0x547EA073, (q31_t)0x9F979331, - (q31_t)0x5433027D, (q31_t)0x9F558FB0, (q31_t)0x53E73097, - (q31_t)0x9F13C7D0, (q31_t)0x539B2AEF, (q31_t)0x9ED23BB9, - (q31_t)0x534EF1B5, (q31_t)0x9E90EB94, (q31_t)0x53028517, - (q31_t)0x9E4FD789, (q31_t)0x52B5E545, (q31_t)0x9E0EFFC1, - (q31_t)0x5269126E, (q31_t)0x9DCE6462, (q31_t)0x521C0CC1, - (q31_t)0x9D8E0596, (q31_t)0x51CED46E, (q31_t)0x9D4DE384, - (q31_t)0x518169A4, (q31_t)0x9D0DFE53, (q31_t)0x5133CC94, - (q31_t)0x9CCE562B, (q31_t)0x50E5FD6C, (q31_t)0x9C8EEB33, - (q31_t)0x5097FC5E, (q31_t)0x9C4FBD92, (q31_t)0x5049C999, - (q31_t)0x9C10CD70, (q31_t)0x4FFB654D, (q31_t)0x9BD21AF2, - (q31_t)0x4FACCFAB, (q31_t)0x9B93A640, (q31_t)0x4F5E08E3, - (q31_t)0x9B556F80, (q31_t)0x4F0F1126, (q31_t)0x9B1776D9, - (q31_t)0x4EBFE8A4, (q31_t)0x9AD9BC71, (q31_t)0x4E708F8F, - (q31_t)0x9A9C406D, (q31_t)0x4E210617, (q31_t)0x9A5F02F5, - (q31_t)0x4DD14C6E, (q31_t)0x9A22042C, (q31_t)0x4D8162C4, - (q31_t)0x99E5443A, (q31_t)0x4D31494B, (q31_t)0x99A8C344, - (q31_t)0x4CE10034, (q31_t)0x996C816F, (q31_t)0x4C9087B1, - (q31_t)0x99307EE0, (q31_t)0x4C3FDFF3, (q31_t)0x98F4BBBC, - (q31_t)0x4BEF092D, (q31_t)0x98B93828, (q31_t)0x4B9E038F, - (q31_t)0x987DF449, (q31_t)0x4B4CCF4D, (q31_t)0x9842F043, - (q31_t)0x4AFB6C97, (q31_t)0x98082C3B, (q31_t)0x4AA9DBA1, - (q31_t)0x97CDA855, (q31_t)0x4A581C9D, (q31_t)0x979364B5, - (q31_t)0x4A062FBD, (q31_t)0x9759617E, (q31_t)0x49B41533, - (q31_t)0x971F9ED6, (q31_t)0x4961CD32, (q31_t)0x96E61CDF, - (q31_t)0x490F57EE, (q31_t)0x96ACDBBD, (q31_t)0x48BCB598, - (q31_t)0x9673DB94, (q31_t)0x4869E664, (q31_t)0x963B1C85, - (q31_t)0x4816EA85, (q31_t)0x96029EB5, (q31_t)0x47C3C22E, - (q31_t)0x95CA6246, (q31_t)0x47706D93, (q31_t)0x9592675B, - (q31_t)0x471CECE6, (q31_t)0x955AAE17, (q31_t)0x46C9405C, - (q31_t)0x9523369B, (q31_t)0x46756827, (q31_t)0x94EC010B, - (q31_t)0x4621647C, (q31_t)0x94B50D87, (q31_t)0x45CD358F, - (q31_t)0x947E5C32, (q31_t)0x4578DB93, (q31_t)0x9447ED2F, - (q31_t)0x452456BC, (q31_t)0x9411C09D, (q31_t)0x44CFA73F, - (q31_t)0x93DBD69F, (q31_t)0x447ACD50, (q31_t)0x93A62F56, - (q31_t)0x4425C923, (q31_t)0x9370CAE4, (q31_t)0x43D09AEC, - (q31_t)0x933BA968, (q31_t)0x437B42E1, (q31_t)0x9306CB04, - (q31_t)0x4325C135, (q31_t)0x92D22FD8, (q31_t)0x42D0161E, - (q31_t)0x929DD805, (q31_t)0x427A41D0, (q31_t)0x9269C3AC, - (q31_t)0x42244480, (q31_t)0x9235F2EB, (q31_t)0x41CE1E64, - (q31_t)0x920265E4, (q31_t)0x4177CFB0, (q31_t)0x91CF1CB6, - (q31_t)0x4121589A, (q31_t)0x919C1780, (q31_t)0x40CAB957, - (q31_t)0x91695663, (q31_t)0x4073F21D, (q31_t)0x9136D97D, - (q31_t)0x401D0320, (q31_t)0x9104A0ED, (q31_t)0x3FC5EC97, - (q31_t)0x90D2ACD3, (q31_t)0x3F6EAEB8, (q31_t)0x90A0FD4E, - (q31_t)0x3F1749B7, (q31_t)0x906F927B, (q31_t)0x3EBFBDCC, - (q31_t)0x903E6C7A, (q31_t)0x3E680B2C, (q31_t)0x900D8B69, - (q31_t)0x3E10320D, (q31_t)0x8FDCEF66, (q31_t)0x3DB832A5, - (q31_t)0x8FAC988E, (q31_t)0x3D600D2B, (q31_t)0x8F7C8701, - (q31_t)0x3D07C1D5, (q31_t)0x8F4CBADB, (q31_t)0x3CAF50DA, - (q31_t)0x8F1D343A, (q31_t)0x3C56BA70, (q31_t)0x8EEDF33B, - (q31_t)0x3BFDFECD, (q31_t)0x8EBEF7FB, (q31_t)0x3BA51E29, - (q31_t)0x8E904298, (q31_t)0x3B4C18BA, (q31_t)0x8E61D32D, - (q31_t)0x3AF2EEB7, (q31_t)0x8E33A9D9, (q31_t)0x3A99A057, - (q31_t)0x8E05C6B7, (q31_t)0x3A402DD1, (q31_t)0x8DD829E4, - (q31_t)0x39E6975D, (q31_t)0x8DAAD37B, (q31_t)0x398CDD32, - (q31_t)0x8D7DC399, (q31_t)0x3932FF87, (q31_t)0x8D50FA59, - (q31_t)0x38D8FE93, (q31_t)0x8D2477D8, (q31_t)0x387EDA8E, - (q31_t)0x8CF83C30, (q31_t)0x382493B0, (q31_t)0x8CCC477D, - (q31_t)0x37CA2A30, (q31_t)0x8CA099D9, (q31_t)0x376F9E46, - (q31_t)0x8C753361, (q31_t)0x3714F02A, (q31_t)0x8C4A142F, - (q31_t)0x36BA2013, (q31_t)0x8C1F3C5C, (q31_t)0x365F2E3B, - (q31_t)0x8BF4AC05, (q31_t)0x36041AD9, (q31_t)0x8BCA6342, - (q31_t)0x35A8E624, (q31_t)0x8BA0622F, (q31_t)0x354D9056, - (q31_t)0x8B76A8E4, (q31_t)0x34F219A7, (q31_t)0x8B4D377C, - (q31_t)0x3496824F, (q31_t)0x8B240E10, (q31_t)0x343ACA87, - (q31_t)0x8AFB2CBA, (q31_t)0x33DEF287, (q31_t)0x8AD29393, - (q31_t)0x3382FA88, (q31_t)0x8AAA42B4, (q31_t)0x3326E2C2, - (q31_t)0x8A823A35, (q31_t)0x32CAAB6F, (q31_t)0x8A5A7A30, - (q31_t)0x326E54C7, (q31_t)0x8A3302BD, (q31_t)0x3211DF03, - (q31_t)0x8A0BD3F5, (q31_t)0x31B54A5D, (q31_t)0x89E4EDEE, - (q31_t)0x3158970D, (q31_t)0x89BE50C3, (q31_t)0x30FBC54D, - (q31_t)0x8997FC89, (q31_t)0x309ED555, (q31_t)0x8971F15A, - (q31_t)0x3041C760, (q31_t)0x894C2F4C, (q31_t)0x2FE49BA6, - (q31_t)0x8926B677, (q31_t)0x2F875262, (q31_t)0x890186F1, - (q31_t)0x2F29EBCC, (q31_t)0x88DCA0D3, (q31_t)0x2ECC681E, - (q31_t)0x88B80431, (q31_t)0x2E6EC792, (q31_t)0x8893B124, - (q31_t)0x2E110A62, (q31_t)0x886FA7C2, (q31_t)0x2DB330C7, - (q31_t)0x884BE820, (q31_t)0x2D553AFB, (q31_t)0x88287255, - (q31_t)0x2CF72939, (q31_t)0x88054677, (q31_t)0x2C98FBBA, - (q31_t)0x87E2649B, (q31_t)0x2C3AB2B9, (q31_t)0x87BFCCD7, - (q31_t)0x2BDC4E6F, (q31_t)0x879D7F40, (q31_t)0x2B7DCF17, - (q31_t)0x877B7BEC, (q31_t)0x2B1F34EB, (q31_t)0x8759C2EF, - (q31_t)0x2AC08025, (q31_t)0x8738545E, (q31_t)0x2A61B101, - (q31_t)0x8717304E, (q31_t)0x2A02C7B8, (q31_t)0x86F656D3, - (q31_t)0x29A3C484, (q31_t)0x86D5C802, (q31_t)0x2944A7A2, - (q31_t)0x86B583EE, (q31_t)0x28E5714A, (q31_t)0x86958AAB, - (q31_t)0x288621B9, (q31_t)0x8675DC4E, (q31_t)0x2826B928, - (q31_t)0x865678EA, (q31_t)0x27C737D2, (q31_t)0x86376092, - (q31_t)0x27679DF4, (q31_t)0x86189359, (q31_t)0x2707EBC6, - (q31_t)0x85FA1152, (q31_t)0x26A82185, (q31_t)0x85DBDA91, - (q31_t)0x26483F6C, (q31_t)0x85BDEF27, (q31_t)0x25E845B5, - (q31_t)0x85A04F28, (q31_t)0x2588349D, (q31_t)0x8582FAA4, - (q31_t)0x25280C5D, (q31_t)0x8565F1B0, (q31_t)0x24C7CD32, - (q31_t)0x8549345C, (q31_t)0x24677757, (q31_t)0x852CC2BA, - (q31_t)0x24070B07, (q31_t)0x85109CDC, (q31_t)0x23A6887E, - (q31_t)0x84F4C2D3, (q31_t)0x2345EFF7, (q31_t)0x84D934B0, - (q31_t)0x22E541AE, (q31_t)0x84BDF285, (q31_t)0x22847DDF, - (q31_t)0x84A2FC62, (q31_t)0x2223A4C5, (q31_t)0x84885257, - (q31_t)0x21C2B69C, (q31_t)0x846DF476, (q31_t)0x2161B39F, - (q31_t)0x8453E2CE, (q31_t)0x21009C0B, (q31_t)0x843A1D70, - (q31_t)0x209F701C, (q31_t)0x8420A46B, (q31_t)0x203E300D, - (q31_t)0x840777CF, (q31_t)0x1FDCDC1A, (q31_t)0x83EE97AC, - (q31_t)0x1F7B7480, (q31_t)0x83D60411, (q31_t)0x1F19F97B, - (q31_t)0x83BDBD0D, (q31_t)0x1EB86B46, (q31_t)0x83A5C2B0, - (q31_t)0x1E56CA1E, (q31_t)0x838E1507, (q31_t)0x1DF5163F, - (q31_t)0x8376B422, (q31_t)0x1D934FE5, (q31_t)0x835FA00E, - (q31_t)0x1D31774D, (q31_t)0x8348D8DB, (q31_t)0x1CCF8CB3, - (q31_t)0x83325E97, (q31_t)0x1C6D9053, (q31_t)0x831C314E, - (q31_t)0x1C0B826A, (q31_t)0x8306510F, (q31_t)0x1BA96334, - (q31_t)0x82F0BDE8, (q31_t)0x1B4732EF, (q31_t)0x82DB77E5, - (q31_t)0x1AE4F1D6, (q31_t)0x82C67F13, (q31_t)0x1A82A025, - (q31_t)0x82B1D381, (q31_t)0x1A203E1B, (q31_t)0x829D753A, - (q31_t)0x19BDCBF2, (q31_t)0x8289644A, (q31_t)0x195B49E9, - (q31_t)0x8275A0C0, (q31_t)0x18F8B83C, (q31_t)0x82622AA5, - (q31_t)0x18961727, (q31_t)0x824F0208, (q31_t)0x183366E8, - (q31_t)0x823C26F2, (q31_t)0x17D0A7BB, (q31_t)0x82299971, - (q31_t)0x176DD9DE, (q31_t)0x8217598F, (q31_t)0x170AFD8D, - (q31_t)0x82056758, (q31_t)0x16A81305, (q31_t)0x81F3C2D7, - (q31_t)0x16451A83, (q31_t)0x81E26C16, (q31_t)0x15E21444, - (q31_t)0x81D16320, (q31_t)0x157F0086, (q31_t)0x81C0A801, - (q31_t)0x151BDF85, (q31_t)0x81B03AC1, (q31_t)0x14B8B17F, - (q31_t)0x81A01B6C, (q31_t)0x145576B1, (q31_t)0x81904A0C, - (q31_t)0x13F22F57, (q31_t)0x8180C6A9, (q31_t)0x138EDBB0, - (q31_t)0x8171914E, (q31_t)0x132B7BF9, (q31_t)0x8162AA03, - (q31_t)0x12C8106E, (q31_t)0x815410D3, (q31_t)0x1264994E, - (q31_t)0x8145C5C6, (q31_t)0x120116D4, (q31_t)0x8137C8E6, - (q31_t)0x119D8940, (q31_t)0x812A1A39, (q31_t)0x1139F0CE, - (q31_t)0x811CB9CA, (q31_t)0x10D64DBC, (q31_t)0x810FA7A0, - (q31_t)0x1072A047, (q31_t)0x8102E3C3, (q31_t)0x100EE8AD, - (q31_t)0x80F66E3C, (q31_t)0x0FAB272B, (q31_t)0x80EA4712, - (q31_t)0x0F475BFE, (q31_t)0x80DE6E4C, (q31_t)0x0EE38765, - (q31_t)0x80D2E3F1, (q31_t)0x0E7FA99D, (q31_t)0x80C7A80A, - (q31_t)0x0E1BC2E3, (q31_t)0x80BCBA9C, (q31_t)0x0DB7D376, - (q31_t)0x80B21BAF, (q31_t)0x0D53DB92, (q31_t)0x80A7CB49, - (q31_t)0x0CEFDB75, (q31_t)0x809DC970, (q31_t)0x0C8BD35E, - (q31_t)0x8094162B, (q31_t)0x0C27C389, (q31_t)0x808AB180, - (q31_t)0x0BC3AC35, (q31_t)0x80819B74, (q31_t)0x0B5F8D9F, - (q31_t)0x8078D40D, (q31_t)0x0AFB6805, (q31_t)0x80705B50, - (q31_t)0x0A973BA5, (q31_t)0x80683143, (q31_t)0x0A3308BC, - (q31_t)0x806055EA, (q31_t)0x09CECF89, (q31_t)0x8058C94C, - (q31_t)0x096A9049, (q31_t)0x80518B6B, (q31_t)0x09064B3A, - (q31_t)0x804A9C4D, (q31_t)0x08A2009A, (q31_t)0x8043FBF6, - (q31_t)0x083DB0A7, (q31_t)0x803DAA69, (q31_t)0x07D95B9E, - (q31_t)0x8037A7AC, (q31_t)0x077501BE, (q31_t)0x8031F3C1, - (q31_t)0x0710A344, (q31_t)0x802C8EAD, (q31_t)0x06AC406F, - (q31_t)0x80277872, (q31_t)0x0647D97C, (q31_t)0x8022B113, - (q31_t)0x05E36EA9, (q31_t)0x801E3894, (q31_t)0x057F0034, - (q31_t)0x801A0EF7, (q31_t)0x051A8E5C, (q31_t)0x80163440, - (q31_t)0x04B6195D, (q31_t)0x8012A86F, (q31_t)0x0451A176, - (q31_t)0x800F6B88, (q31_t)0x03ED26E6, (q31_t)0x800C7D8C, - (q31_t)0x0388A9E9, (q31_t)0x8009DE7D, (q31_t)0x03242ABF, - (q31_t)0x80078E5E, (q31_t)0x02BFA9A4, (q31_t)0x80058D2E, - (q31_t)0x025B26D7, (q31_t)0x8003DAF0, (q31_t)0x01F6A296, - (q31_t)0x800277A5, (q31_t)0x01921D1F, (q31_t)0x8001634D, - (q31_t)0x012D96B0, (q31_t)0x80009DE9, (q31_t)0x00C90F88, - (q31_t)0x8000277A, (q31_t)0x006487E3, (q31_t)0x80000000, - (q31_t)0x00000000, (q31_t)0x8000277A, (q31_t)0xFF9B781D, - (q31_t)0x80009DE9, (q31_t)0xFF36F078, (q31_t)0x8001634D, - (q31_t)0xFED2694F, (q31_t)0x800277A5, (q31_t)0xFE6DE2E0, - (q31_t)0x8003DAF0, (q31_t)0xFE095D69, (q31_t)0x80058D2E, - (q31_t)0xFDA4D928, (q31_t)0x80078E5E, (q31_t)0xFD40565B, - (q31_t)0x8009DE7D, (q31_t)0xFCDBD541, (q31_t)0x800C7D8C, - (q31_t)0xFC775616, (q31_t)0x800F6B88, (q31_t)0xFC12D919, - (q31_t)0x8012A86F, (q31_t)0xFBAE5E89, (q31_t)0x80163440, - (q31_t)0xFB49E6A2, (q31_t)0x801A0EF7, (q31_t)0xFAE571A4, - (q31_t)0x801E3894, (q31_t)0xFA80FFCB, (q31_t)0x8022B113, - (q31_t)0xFA1C9156, (q31_t)0x80277872, (q31_t)0xF9B82683, - (q31_t)0x802C8EAD, (q31_t)0xF953BF90, (q31_t)0x8031F3C1, - (q31_t)0xF8EF5CBB, (q31_t)0x8037A7AC, (q31_t)0xF88AFE41, - (q31_t)0x803DAA69, (q31_t)0xF826A461, (q31_t)0x8043FBF6, - (q31_t)0xF7C24F58, (q31_t)0x804A9C4D, (q31_t)0xF75DFF65, - (q31_t)0x80518B6B, (q31_t)0xF6F9B4C5, (q31_t)0x8058C94C, - (q31_t)0xF6956FB6, (q31_t)0x806055EA, (q31_t)0xF6313076, - (q31_t)0x80683143, (q31_t)0xF5CCF743, (q31_t)0x80705B50, - (q31_t)0xF568C45A, (q31_t)0x8078D40D, (q31_t)0xF50497FA, - (q31_t)0x80819B74, (q31_t)0xF4A07260, (q31_t)0x808AB180, - (q31_t)0xF43C53CA, (q31_t)0x8094162B, (q31_t)0xF3D83C76, - (q31_t)0x809DC970, (q31_t)0xF3742CA1, (q31_t)0x80A7CB49, - (q31_t)0xF310248A, (q31_t)0x80B21BAF, (q31_t)0xF2AC246D, - (q31_t)0x80BCBA9C, (q31_t)0xF2482C89, (q31_t)0x80C7A80A, - (q31_t)0xF1E43D1C, (q31_t)0x80D2E3F1, (q31_t)0xF1805662, - (q31_t)0x80DE6E4C, (q31_t)0xF11C789A, (q31_t)0x80EA4712, - (q31_t)0xF0B8A401, (q31_t)0x80F66E3C, (q31_t)0xF054D8D4, - (q31_t)0x8102E3C3, (q31_t)0xEFF11752, (q31_t)0x810FA7A0, - (q31_t)0xEF8D5FB8, (q31_t)0x811CB9CA, (q31_t)0xEF29B243, - (q31_t)0x812A1A39, (q31_t)0xEEC60F31, (q31_t)0x8137C8E6, - (q31_t)0xEE6276BF, (q31_t)0x8145C5C6, (q31_t)0xEDFEE92B, - (q31_t)0x815410D3, (q31_t)0xED9B66B2, (q31_t)0x8162AA03, - (q31_t)0xED37EF91, (q31_t)0x8171914E, (q31_t)0xECD48406, - (q31_t)0x8180C6A9, (q31_t)0xEC71244F, (q31_t)0x81904A0C, - (q31_t)0xEC0DD0A8, (q31_t)0x81A01B6C, (q31_t)0xEBAA894E, - (q31_t)0x81B03AC1, (q31_t)0xEB474E80, (q31_t)0x81C0A801, - (q31_t)0xEAE4207A, (q31_t)0x81D16320, (q31_t)0xEA80FF79, - (q31_t)0x81E26C16, (q31_t)0xEA1DEBBB, (q31_t)0x81F3C2D7, - (q31_t)0xE9BAE57C, (q31_t)0x82056758, (q31_t)0xE957ECFB, - (q31_t)0x8217598F, (q31_t)0xE8F50273, (q31_t)0x82299971, - (q31_t)0xE8922621, (q31_t)0x823C26F2, (q31_t)0xE82F5844, - (q31_t)0x824F0208, (q31_t)0xE7CC9917, (q31_t)0x82622AA5, - (q31_t)0xE769E8D8, (q31_t)0x8275A0C0, (q31_t)0xE70747C3, - (q31_t)0x8289644A, (q31_t)0xE6A4B616, (q31_t)0x829D753A, - (q31_t)0xE642340D, (q31_t)0x82B1D381, (q31_t)0xE5DFC1E4, - (q31_t)0x82C67F13, (q31_t)0xE57D5FDA, (q31_t)0x82DB77E5, - (q31_t)0xE51B0E2A, (q31_t)0x82F0BDE8, (q31_t)0xE4B8CD10, - (q31_t)0x8306510F, (q31_t)0xE4569CCB, (q31_t)0x831C314E, - (q31_t)0xE3F47D95, (q31_t)0x83325E97, (q31_t)0xE3926FAC, - (q31_t)0x8348D8DB, (q31_t)0xE330734C, (q31_t)0x835FA00E, - (q31_t)0xE2CE88B2, (q31_t)0x8376B422, (q31_t)0xE26CB01A, - (q31_t)0x838E1507, (q31_t)0xE20AE9C1, (q31_t)0x83A5C2B0, - (q31_t)0xE1A935E1, (q31_t)0x83BDBD0D, (q31_t)0xE14794B9, - (q31_t)0x83D60411, (q31_t)0xE0E60684, (q31_t)0x83EE97AC, - (q31_t)0xE0848B7F, (q31_t)0x840777CF, (q31_t)0xE02323E5, - (q31_t)0x8420A46B, (q31_t)0xDFC1CFF2, (q31_t)0x843A1D70, - (q31_t)0xDF608FE3, (q31_t)0x8453E2CE, (q31_t)0xDEFF63F4, - (q31_t)0x846DF476, (q31_t)0xDE9E4C60, (q31_t)0x84885257, - (q31_t)0xDE3D4963, (q31_t)0x84A2FC62, (q31_t)0xDDDC5B3A, - (q31_t)0x84BDF285, (q31_t)0xDD7B8220, (q31_t)0x84D934B0, - (q31_t)0xDD1ABE51, (q31_t)0x84F4C2D3, (q31_t)0xDCBA1008, - (q31_t)0x85109CDC, (q31_t)0xDC597781, (q31_t)0x852CC2BA, - (q31_t)0xDBF8F4F8, (q31_t)0x8549345C, (q31_t)0xDB9888A8, - (q31_t)0x8565F1B0, (q31_t)0xDB3832CD, (q31_t)0x8582FAA4, - (q31_t)0xDAD7F3A2, (q31_t)0x85A04F28, (q31_t)0xDA77CB62, - (q31_t)0x85BDEF27, (q31_t)0xDA17BA4A, (q31_t)0x85DBDA91, - (q31_t)0xD9B7C093, (q31_t)0x85FA1152, (q31_t)0xD957DE7A, - (q31_t)0x86189359, (q31_t)0xD8F81439, (q31_t)0x86376092, - (q31_t)0xD898620C, (q31_t)0x865678EA, (q31_t)0xD838C82D, - (q31_t)0x8675DC4E, (q31_t)0xD7D946D7, (q31_t)0x86958AAB, - (q31_t)0xD779DE46, (q31_t)0x86B583EE, (q31_t)0xD71A8EB5, - (q31_t)0x86D5C802, (q31_t)0xD6BB585D, (q31_t)0x86F656D3, - (q31_t)0xD65C3B7B, (q31_t)0x8717304E, (q31_t)0xD5FD3847, - (q31_t)0x8738545E, (q31_t)0xD59E4EFE, (q31_t)0x8759C2EF, - (q31_t)0xD53F7FDA, (q31_t)0x877B7BEC, (q31_t)0xD4E0CB14, - (q31_t)0x879D7F40, (q31_t)0xD48230E8, (q31_t)0x87BFCCD7, - (q31_t)0xD423B190, (q31_t)0x87E2649B, (q31_t)0xD3C54D46, - (q31_t)0x88054677, (q31_t)0xD3670445, (q31_t)0x88287255, - (q31_t)0xD308D6C6, (q31_t)0x884BE820, (q31_t)0xD2AAC504, - (q31_t)0x886FA7C2, (q31_t)0xD24CCF38, (q31_t)0x8893B124, - (q31_t)0xD1EEF59E, (q31_t)0x88B80431, (q31_t)0xD191386D, - (q31_t)0x88DCA0D3, (q31_t)0xD13397E1, (q31_t)0x890186F1, - (q31_t)0xD0D61433, (q31_t)0x8926B677, (q31_t)0xD078AD9D, - (q31_t)0x894C2F4C, (q31_t)0xD01B6459, (q31_t)0x8971F15A, - (q31_t)0xCFBE389F, (q31_t)0x8997FC89, (q31_t)0xCF612AAA, - (q31_t)0x89BE50C3, (q31_t)0xCF043AB2, (q31_t)0x89E4EDEE, - (q31_t)0xCEA768F2, (q31_t)0x8A0BD3F5, (q31_t)0xCE4AB5A2, - (q31_t)0x8A3302BD, (q31_t)0xCDEE20FC, (q31_t)0x8A5A7A30, - (q31_t)0xCD91AB38, (q31_t)0x8A823A35, (q31_t)0xCD355490, - (q31_t)0x8AAA42B4, (q31_t)0xCCD91D3D, (q31_t)0x8AD29393, - (q31_t)0xCC7D0577, (q31_t)0x8AFB2CBA, (q31_t)0xCC210D78, - (q31_t)0x8B240E10, (q31_t)0xCBC53578, (q31_t)0x8B4D377C, - (q31_t)0xCB697DB0, (q31_t)0x8B76A8E4, (q31_t)0xCB0DE658, - (q31_t)0x8BA0622F, (q31_t)0xCAB26FA9, (q31_t)0x8BCA6342, - (q31_t)0xCA5719DB, (q31_t)0x8BF4AC05, (q31_t)0xC9FBE527, - (q31_t)0x8C1F3C5C, (q31_t)0xC9A0D1C4, (q31_t)0x8C4A142F, - (q31_t)0xC945DFEC, (q31_t)0x8C753361, (q31_t)0xC8EB0FD6, - (q31_t)0x8CA099D9, (q31_t)0xC89061BA, (q31_t)0x8CCC477D, - (q31_t)0xC835D5D0, (q31_t)0x8CF83C30, (q31_t)0xC7DB6C50, - (q31_t)0x8D2477D8, (q31_t)0xC7812571, (q31_t)0x8D50FA59, - (q31_t)0xC727016C, (q31_t)0x8D7DC399, (q31_t)0xC6CD0079, - (q31_t)0x8DAAD37B, (q31_t)0xC67322CD, (q31_t)0x8DD829E4, - (q31_t)0xC61968A2, (q31_t)0x8E05C6B7, (q31_t)0xC5BFD22E, - (q31_t)0x8E33A9D9, (q31_t)0xC5665FA8, (q31_t)0x8E61D32D, - (q31_t)0xC50D1148, (q31_t)0x8E904298, (q31_t)0xC4B3E746, - (q31_t)0x8EBEF7FB, (q31_t)0xC45AE1D7, (q31_t)0x8EEDF33B, - (q31_t)0xC4020132, (q31_t)0x8F1D343A, (q31_t)0xC3A9458F, - (q31_t)0x8F4CBADB, (q31_t)0xC350AF25, (q31_t)0x8F7C8701, - (q31_t)0xC2F83E2A, (q31_t)0x8FAC988E, (q31_t)0xC29FF2D4, - (q31_t)0x8FDCEF66, (q31_t)0xC247CD5A, (q31_t)0x900D8B69, - (q31_t)0xC1EFCDF2, (q31_t)0x903E6C7A, (q31_t)0xC197F4D3, - (q31_t)0x906F927B, (q31_t)0xC1404233, (q31_t)0x90A0FD4E, - (q31_t)0xC0E8B648, (q31_t)0x90D2ACD3, (q31_t)0xC0915147, - (q31_t)0x9104A0ED, (q31_t)0xC03A1368, (q31_t)0x9136D97D, - (q31_t)0xBFE2FCDF, (q31_t)0x91695663, (q31_t)0xBF8C0DE2, - (q31_t)0x919C1780, (q31_t)0xBF3546A8, (q31_t)0x91CF1CB6, - (q31_t)0xBEDEA765, (q31_t)0x920265E4, (q31_t)0xBE88304F, - (q31_t)0x9235F2EB, (q31_t)0xBE31E19B, (q31_t)0x9269C3AC, - (q31_t)0xBDDBBB7F, (q31_t)0x929DD805, (q31_t)0xBD85BE2F, - (q31_t)0x92D22FD8, (q31_t)0xBD2FE9E1, (q31_t)0x9306CB04, - (q31_t)0xBCDA3ECA, (q31_t)0x933BA968, (q31_t)0xBC84BD1E, - (q31_t)0x9370CAE4, (q31_t)0xBC2F6513, (q31_t)0x93A62F56, - (q31_t)0xBBDA36DC, (q31_t)0x93DBD69F, (q31_t)0xBB8532AF, - (q31_t)0x9411C09D, (q31_t)0xBB3058C0, (q31_t)0x9447ED2F, - (q31_t)0xBADBA943, (q31_t)0x947E5C32, (q31_t)0xBA87246C, - (q31_t)0x94B50D87, (q31_t)0xBA32CA70, (q31_t)0x94EC010B, - (q31_t)0xB9DE9B83, (q31_t)0x9523369B, (q31_t)0xB98A97D8, - (q31_t)0x955AAE17, (q31_t)0xB936BFA3, (q31_t)0x9592675B, - (q31_t)0xB8E31319, (q31_t)0x95CA6246, (q31_t)0xB88F926C, - (q31_t)0x96029EB5, (q31_t)0xB83C3DD1, (q31_t)0x963B1C85, - (q31_t)0xB7E9157A, (q31_t)0x9673DB94, (q31_t)0xB796199B, - (q31_t)0x96ACDBBD, (q31_t)0xB7434A67, (q31_t)0x96E61CDF, - (q31_t)0xB6F0A811, (q31_t)0x971F9ED6, (q31_t)0xB69E32CD, - (q31_t)0x9759617E, (q31_t)0xB64BEACC, (q31_t)0x979364B5, - (q31_t)0xB5F9D042, (q31_t)0x97CDA855, (q31_t)0xB5A7E362, - (q31_t)0x98082C3B, (q31_t)0xB556245E, (q31_t)0x9842F043, - (q31_t)0xB5049368, (q31_t)0x987DF449, (q31_t)0xB4B330B2, - (q31_t)0x98B93828, (q31_t)0xB461FC70, (q31_t)0x98F4BBBC, - (q31_t)0xB410F6D2, (q31_t)0x99307EE0, (q31_t)0xB3C0200C, - (q31_t)0x996C816F, (q31_t)0xB36F784E, (q31_t)0x99A8C344, - (q31_t)0xB31EFFCB, (q31_t)0x99E5443A, (q31_t)0xB2CEB6B5, - (q31_t)0x9A22042C, (q31_t)0xB27E9D3B, (q31_t)0x9A5F02F5, - (q31_t)0xB22EB392, (q31_t)0x9A9C406D, (q31_t)0xB1DEF9E8, - (q31_t)0x9AD9BC71, (q31_t)0xB18F7070, (q31_t)0x9B1776D9, - (q31_t)0xB140175B, (q31_t)0x9B556F80, (q31_t)0xB0F0EEDA, - (q31_t)0x9B93A640, (q31_t)0xB0A1F71C, (q31_t)0x9BD21AF2, - (q31_t)0xB0533055, (q31_t)0x9C10CD70, (q31_t)0xB0049AB2, - (q31_t)0x9C4FBD92, (q31_t)0xAFB63667, (q31_t)0x9C8EEB33, - (q31_t)0xAF6803A1, (q31_t)0x9CCE562B, (q31_t)0xAF1A0293, - (q31_t)0x9D0DFE53, (q31_t)0xAECC336B, (q31_t)0x9D4DE384, - (q31_t)0xAE7E965B, (q31_t)0x9D8E0596, (q31_t)0xAE312B91, - (q31_t)0x9DCE6462, (q31_t)0xADE3F33E, (q31_t)0x9E0EFFC1, - (q31_t)0xAD96ED91, (q31_t)0x9E4FD789, (q31_t)0xAD4A1ABA, - (q31_t)0x9E90EB94, (q31_t)0xACFD7AE8, (q31_t)0x9ED23BB9, - (q31_t)0xACB10E4A, (q31_t)0x9F13C7D0, (q31_t)0xAC64D510, - (q31_t)0x9F558FB0, (q31_t)0xAC18CF68, (q31_t)0x9F979331, - (q31_t)0xABCCFD82, (q31_t)0x9FD9D22A, (q31_t)0xAB815F8C, - (q31_t)0xA01C4C72, (q31_t)0xAB35F5B5, (q31_t)0xA05F01E1, - (q31_t)0xAAEAC02B, (q31_t)0xA0A1F24C, (q31_t)0xAA9FBF1D, - (q31_t)0xA0E51D8C, (q31_t)0xAA54F2B9, (q31_t)0xA1288376, - (q31_t)0xAA0A5B2D, (q31_t)0xA16C23E1, (q31_t)0xA9BFF8A8, - (q31_t)0xA1AFFEA2, (q31_t)0xA975CB56, (q31_t)0xA1F41391, - (q31_t)0xA92BD366, (q31_t)0xA2386283, (q31_t)0xA8E21106, - (q31_t)0xA27CEB4F, (q31_t)0xA8988463, (q31_t)0xA2C1ADC9, - (q31_t)0xA84F2DA9, (q31_t)0xA306A9C7, (q31_t)0xA8060D08, - (q31_t)0xA34BDF20, (q31_t)0xA7BD22AB, (q31_t)0xA3914DA7, - (q31_t)0xA7746EC0, (q31_t)0xA3D6F533, (q31_t)0xA72BF173, - (q31_t)0xA41CD598, (q31_t)0xA6E3AAF2, (q31_t)0xA462EEAC, - (q31_t)0xA69B9B68, (q31_t)0xA4A94042, (q31_t)0xA653C302, - (q31_t)0xA4EFCA31, (q31_t)0xA60C21ED, (q31_t)0xA5368C4B, - (q31_t)0xA5C4B855, (q31_t)0xA57D8666, (q31_t)0xA57D8666, - (q31_t)0xA5C4B855, (q31_t)0xA5368C4B, (q31_t)0xA60C21ED, - (q31_t)0xA4EFCA31, (q31_t)0xA653C302, (q31_t)0xA4A94042, - (q31_t)0xA69B9B68, (q31_t)0xA462EEAC, (q31_t)0xA6E3AAF2, - (q31_t)0xA41CD598, (q31_t)0xA72BF173, (q31_t)0xA3D6F533, - (q31_t)0xA7746EC0, (q31_t)0xA3914DA7, (q31_t)0xA7BD22AB, - (q31_t)0xA34BDF20, (q31_t)0xA8060D08, (q31_t)0xA306A9C7, - (q31_t)0xA84F2DA9, (q31_t)0xA2C1ADC9, (q31_t)0xA8988463, - (q31_t)0xA27CEB4F, (q31_t)0xA8E21106, (q31_t)0xA2386283, - (q31_t)0xA92BD366, (q31_t)0xA1F41391, (q31_t)0xA975CB56, - (q31_t)0xA1AFFEA2, (q31_t)0xA9BFF8A8, (q31_t)0xA16C23E1, - (q31_t)0xAA0A5B2D, (q31_t)0xA1288376, (q31_t)0xAA54F2B9, - (q31_t)0xA0E51D8C, (q31_t)0xAA9FBF1D, (q31_t)0xA0A1F24C, - (q31_t)0xAAEAC02B, (q31_t)0xA05F01E1, (q31_t)0xAB35F5B5, - (q31_t)0xA01C4C72, (q31_t)0xAB815F8C, (q31_t)0x9FD9D22A, - (q31_t)0xABCCFD82, (q31_t)0x9F979331, (q31_t)0xAC18CF68, - (q31_t)0x9F558FB0, (q31_t)0xAC64D510, (q31_t)0x9F13C7D0, - (q31_t)0xACB10E4A, (q31_t)0x9ED23BB9, (q31_t)0xACFD7AE8, - (q31_t)0x9E90EB94, (q31_t)0xAD4A1ABA, (q31_t)0x9E4FD789, - (q31_t)0xAD96ED91, (q31_t)0x9E0EFFC1, (q31_t)0xADE3F33E, - (q31_t)0x9DCE6462, (q31_t)0xAE312B91, (q31_t)0x9D8E0596, - (q31_t)0xAE7E965B, (q31_t)0x9D4DE384, (q31_t)0xAECC336B, - (q31_t)0x9D0DFE53, (q31_t)0xAF1A0293, (q31_t)0x9CCE562B, - (q31_t)0xAF6803A1, (q31_t)0x9C8EEB33, (q31_t)0xAFB63667, - (q31_t)0x9C4FBD92, (q31_t)0xB0049AB2, (q31_t)0x9C10CD70, - (q31_t)0xB0533055, (q31_t)0x9BD21AF2, (q31_t)0xB0A1F71C, - (q31_t)0x9B93A640, (q31_t)0xB0F0EEDA, (q31_t)0x9B556F80, - (q31_t)0xB140175B, (q31_t)0x9B1776D9, (q31_t)0xB18F7070, - (q31_t)0x9AD9BC71, (q31_t)0xB1DEF9E8, (q31_t)0x9A9C406D, - (q31_t)0xB22EB392, (q31_t)0x9A5F02F5, (q31_t)0xB27E9D3B, - (q31_t)0x9A22042C, (q31_t)0xB2CEB6B5, (q31_t)0x99E5443A, - (q31_t)0xB31EFFCB, (q31_t)0x99A8C344, (q31_t)0xB36F784E, - (q31_t)0x996C816F, (q31_t)0xB3C0200C, (q31_t)0x99307EE0, - (q31_t)0xB410F6D2, (q31_t)0x98F4BBBC, (q31_t)0xB461FC70, - (q31_t)0x98B93828, (q31_t)0xB4B330B2, (q31_t)0x987DF449, - (q31_t)0xB5049368, (q31_t)0x9842F043, (q31_t)0xB556245E, - (q31_t)0x98082C3B, (q31_t)0xB5A7E362, (q31_t)0x97CDA855, - (q31_t)0xB5F9D042, (q31_t)0x979364B5, (q31_t)0xB64BEACC, - (q31_t)0x9759617E, (q31_t)0xB69E32CD, (q31_t)0x971F9ED6, - (q31_t)0xB6F0A811, (q31_t)0x96E61CDF, (q31_t)0xB7434A67, - (q31_t)0x96ACDBBD, (q31_t)0xB796199B, (q31_t)0x9673DB94, - (q31_t)0xB7E9157A, (q31_t)0x963B1C85, (q31_t)0xB83C3DD1, - (q31_t)0x96029EB5, (q31_t)0xB88F926C, (q31_t)0x95CA6246, - (q31_t)0xB8E31319, (q31_t)0x9592675B, (q31_t)0xB936BFA3, - (q31_t)0x955AAE17, (q31_t)0xB98A97D8, (q31_t)0x9523369B, - (q31_t)0xB9DE9B83, (q31_t)0x94EC010B, (q31_t)0xBA32CA70, - (q31_t)0x94B50D87, (q31_t)0xBA87246C, (q31_t)0x947E5C32, - (q31_t)0xBADBA943, (q31_t)0x9447ED2F, (q31_t)0xBB3058C0, - (q31_t)0x9411C09D, (q31_t)0xBB8532AF, (q31_t)0x93DBD69F, - (q31_t)0xBBDA36DC, (q31_t)0x93A62F56, (q31_t)0xBC2F6513, - (q31_t)0x9370CAE4, (q31_t)0xBC84BD1E, (q31_t)0x933BA968, - (q31_t)0xBCDA3ECA, (q31_t)0x9306CB04, (q31_t)0xBD2FE9E1, - (q31_t)0x92D22FD8, (q31_t)0xBD85BE2F, (q31_t)0x929DD805, - (q31_t)0xBDDBBB7F, (q31_t)0x9269C3AC, (q31_t)0xBE31E19B, - (q31_t)0x9235F2EB, (q31_t)0xBE88304F, (q31_t)0x920265E4, - (q31_t)0xBEDEA765, (q31_t)0x91CF1CB6, (q31_t)0xBF3546A8, - (q31_t)0x919C1780, (q31_t)0xBF8C0DE2, (q31_t)0x91695663, - (q31_t)0xBFE2FCDF, (q31_t)0x9136D97D, (q31_t)0xC03A1368, - (q31_t)0x9104A0ED, (q31_t)0xC0915147, (q31_t)0x90D2ACD3, - (q31_t)0xC0E8B648, (q31_t)0x90A0FD4E, (q31_t)0xC1404233, - (q31_t)0x906F927B, (q31_t)0xC197F4D3, (q31_t)0x903E6C7A, - (q31_t)0xC1EFCDF2, (q31_t)0x900D8B69, (q31_t)0xC247CD5A, - (q31_t)0x8FDCEF66, (q31_t)0xC29FF2D4, (q31_t)0x8FAC988E, - (q31_t)0xC2F83E2A, (q31_t)0x8F7C8701, (q31_t)0xC350AF25, - (q31_t)0x8F4CBADB, (q31_t)0xC3A9458F, (q31_t)0x8F1D343A, - (q31_t)0xC4020132, (q31_t)0x8EEDF33B, (q31_t)0xC45AE1D7, - (q31_t)0x8EBEF7FB, (q31_t)0xC4B3E746, (q31_t)0x8E904298, - (q31_t)0xC50D1148, (q31_t)0x8E61D32D, (q31_t)0xC5665FA8, - (q31_t)0x8E33A9D9, (q31_t)0xC5BFD22E, (q31_t)0x8E05C6B7, - (q31_t)0xC61968A2, (q31_t)0x8DD829E4, (q31_t)0xC67322CD, - (q31_t)0x8DAAD37B, (q31_t)0xC6CD0079, (q31_t)0x8D7DC399, - (q31_t)0xC727016C, (q31_t)0x8D50FA59, (q31_t)0xC7812571, - (q31_t)0x8D2477D8, (q31_t)0xC7DB6C50, (q31_t)0x8CF83C30, - (q31_t)0xC835D5D0, (q31_t)0x8CCC477D, (q31_t)0xC89061BA, - (q31_t)0x8CA099D9, (q31_t)0xC8EB0FD6, (q31_t)0x8C753361, - (q31_t)0xC945DFEC, (q31_t)0x8C4A142F, (q31_t)0xC9A0D1C4, - (q31_t)0x8C1F3C5C, (q31_t)0xC9FBE527, (q31_t)0x8BF4AC05, - (q31_t)0xCA5719DB, (q31_t)0x8BCA6342, (q31_t)0xCAB26FA9, - (q31_t)0x8BA0622F, (q31_t)0xCB0DE658, (q31_t)0x8B76A8E4, - (q31_t)0xCB697DB0, (q31_t)0x8B4D377C, (q31_t)0xCBC53578, - (q31_t)0x8B240E10, (q31_t)0xCC210D78, (q31_t)0x8AFB2CBA, - (q31_t)0xCC7D0577, (q31_t)0x8AD29393, (q31_t)0xCCD91D3D, - (q31_t)0x8AAA42B4, (q31_t)0xCD355490, (q31_t)0x8A823A35, - (q31_t)0xCD91AB38, (q31_t)0x8A5A7A30, (q31_t)0xCDEE20FC, - (q31_t)0x8A3302BD, (q31_t)0xCE4AB5A2, (q31_t)0x8A0BD3F5, - (q31_t)0xCEA768F2, (q31_t)0x89E4EDEE, (q31_t)0xCF043AB2, - (q31_t)0x89BE50C3, (q31_t)0xCF612AAA, (q31_t)0x8997FC89, - (q31_t)0xCFBE389F, (q31_t)0x8971F15A, (q31_t)0xD01B6459, - (q31_t)0x894C2F4C, (q31_t)0xD078AD9D, (q31_t)0x8926B677, - (q31_t)0xD0D61433, (q31_t)0x890186F1, (q31_t)0xD13397E1, - (q31_t)0x88DCA0D3, (q31_t)0xD191386D, (q31_t)0x88B80431, - (q31_t)0xD1EEF59E, (q31_t)0x8893B124, (q31_t)0xD24CCF38, - (q31_t)0x886FA7C2, (q31_t)0xD2AAC504, (q31_t)0x884BE820, - (q31_t)0xD308D6C6, (q31_t)0x88287255, (q31_t)0xD3670445, - (q31_t)0x88054677, (q31_t)0xD3C54D46, (q31_t)0x87E2649B, - (q31_t)0xD423B190, (q31_t)0x87BFCCD7, (q31_t)0xD48230E8, - (q31_t)0x879D7F40, (q31_t)0xD4E0CB14, (q31_t)0x877B7BEC, - (q31_t)0xD53F7FDA, (q31_t)0x8759C2EF, (q31_t)0xD59E4EFE, - (q31_t)0x8738545E, (q31_t)0xD5FD3847, (q31_t)0x8717304E, - (q31_t)0xD65C3B7B, (q31_t)0x86F656D3, (q31_t)0xD6BB585D, - (q31_t)0x86D5C802, (q31_t)0xD71A8EB5, (q31_t)0x86B583EE, - (q31_t)0xD779DE46, (q31_t)0x86958AAB, (q31_t)0xD7D946D7, - (q31_t)0x8675DC4E, (q31_t)0xD838C82D, (q31_t)0x865678EA, - (q31_t)0xD898620C, (q31_t)0x86376092, (q31_t)0xD8F81439, - (q31_t)0x86189359, (q31_t)0xD957DE7A, (q31_t)0x85FA1152, - (q31_t)0xD9B7C093, (q31_t)0x85DBDA91, (q31_t)0xDA17BA4A, - (q31_t)0x85BDEF27, (q31_t)0xDA77CB62, (q31_t)0x85A04F28, - (q31_t)0xDAD7F3A2, (q31_t)0x8582FAA4, (q31_t)0xDB3832CD, - (q31_t)0x8565F1B0, (q31_t)0xDB9888A8, (q31_t)0x8549345C, - (q31_t)0xDBF8F4F8, (q31_t)0x852CC2BA, (q31_t)0xDC597781, - (q31_t)0x85109CDC, (q31_t)0xDCBA1008, (q31_t)0x84F4C2D3, - (q31_t)0xDD1ABE51, (q31_t)0x84D934B0, (q31_t)0xDD7B8220, - (q31_t)0x84BDF285, (q31_t)0xDDDC5B3A, (q31_t)0x84A2FC62, - (q31_t)0xDE3D4963, (q31_t)0x84885257, (q31_t)0xDE9E4C60, - (q31_t)0x846DF476, (q31_t)0xDEFF63F4, (q31_t)0x8453E2CE, - (q31_t)0xDF608FE3, (q31_t)0x843A1D70, (q31_t)0xDFC1CFF2, - (q31_t)0x8420A46B, (q31_t)0xE02323E5, (q31_t)0x840777CF, - (q31_t)0xE0848B7F, (q31_t)0x83EE97AC, (q31_t)0xE0E60684, - (q31_t)0x83D60411, (q31_t)0xE14794B9, (q31_t)0x83BDBD0D, - (q31_t)0xE1A935E1, (q31_t)0x83A5C2B0, (q31_t)0xE20AE9C1, - (q31_t)0x838E1507, (q31_t)0xE26CB01A, (q31_t)0x8376B422, - (q31_t)0xE2CE88B2, (q31_t)0x835FA00E, (q31_t)0xE330734C, - (q31_t)0x8348D8DB, (q31_t)0xE3926FAC, (q31_t)0x83325E97, - (q31_t)0xE3F47D95, (q31_t)0x831C314E, (q31_t)0xE4569CCB, - (q31_t)0x8306510F, (q31_t)0xE4B8CD10, (q31_t)0x82F0BDE8, - (q31_t)0xE51B0E2A, (q31_t)0x82DB77E5, (q31_t)0xE57D5FDA, - (q31_t)0x82C67F13, (q31_t)0xE5DFC1E4, (q31_t)0x82B1D381, - (q31_t)0xE642340D, (q31_t)0x829D753A, (q31_t)0xE6A4B616, - (q31_t)0x8289644A, (q31_t)0xE70747C3, (q31_t)0x8275A0C0, - (q31_t)0xE769E8D8, (q31_t)0x82622AA5, (q31_t)0xE7CC9917, - (q31_t)0x824F0208, (q31_t)0xE82F5844, (q31_t)0x823C26F2, - (q31_t)0xE8922621, (q31_t)0x82299971, (q31_t)0xE8F50273, - (q31_t)0x8217598F, (q31_t)0xE957ECFB, (q31_t)0x82056758, - (q31_t)0xE9BAE57C, (q31_t)0x81F3C2D7, (q31_t)0xEA1DEBBB, - (q31_t)0x81E26C16, (q31_t)0xEA80FF79, (q31_t)0x81D16320, - (q31_t)0xEAE4207A, (q31_t)0x81C0A801, (q31_t)0xEB474E80, - (q31_t)0x81B03AC1, (q31_t)0xEBAA894E, (q31_t)0x81A01B6C, - (q31_t)0xEC0DD0A8, (q31_t)0x81904A0C, (q31_t)0xEC71244F, - (q31_t)0x8180C6A9, (q31_t)0xECD48406, (q31_t)0x8171914E, - (q31_t)0xED37EF91, (q31_t)0x8162AA03, (q31_t)0xED9B66B2, - (q31_t)0x815410D3, (q31_t)0xEDFEE92B, (q31_t)0x8145C5C6, - (q31_t)0xEE6276BF, (q31_t)0x8137C8E6, (q31_t)0xEEC60F31, - (q31_t)0x812A1A39, (q31_t)0xEF29B243, (q31_t)0x811CB9CA, - (q31_t)0xEF8D5FB8, (q31_t)0x810FA7A0, (q31_t)0xEFF11752, - (q31_t)0x8102E3C3, (q31_t)0xF054D8D4, (q31_t)0x80F66E3C, - (q31_t)0xF0B8A401, (q31_t)0x80EA4712, (q31_t)0xF11C789A, - (q31_t)0x80DE6E4C, (q31_t)0xF1805662, (q31_t)0x80D2E3F1, - (q31_t)0xF1E43D1C, (q31_t)0x80C7A80A, (q31_t)0xF2482C89, - (q31_t)0x80BCBA9C, (q31_t)0xF2AC246D, (q31_t)0x80B21BAF, - (q31_t)0xF310248A, (q31_t)0x80A7CB49, (q31_t)0xF3742CA1, - (q31_t)0x809DC970, (q31_t)0xF3D83C76, (q31_t)0x8094162B, - (q31_t)0xF43C53CA, (q31_t)0x808AB180, (q31_t)0xF4A07260, - (q31_t)0x80819B74, (q31_t)0xF50497FA, (q31_t)0x8078D40D, - (q31_t)0xF568C45A, (q31_t)0x80705B50, (q31_t)0xF5CCF743, - (q31_t)0x80683143, (q31_t)0xF6313076, (q31_t)0x806055EA, - (q31_t)0xF6956FB6, (q31_t)0x8058C94C, (q31_t)0xF6F9B4C5, - (q31_t)0x80518B6B, (q31_t)0xF75DFF65, (q31_t)0x804A9C4D, - (q31_t)0xF7C24F58, (q31_t)0x8043FBF6, (q31_t)0xF826A461, - (q31_t)0x803DAA69, (q31_t)0xF88AFE41, (q31_t)0x8037A7AC, - (q31_t)0xF8EF5CBB, (q31_t)0x8031F3C1, (q31_t)0xF953BF90, - (q31_t)0x802C8EAD, (q31_t)0xF9B82683, (q31_t)0x80277872, - (q31_t)0xFA1C9156, (q31_t)0x8022B113, (q31_t)0xFA80FFCB, - (q31_t)0x801E3894, (q31_t)0xFAE571A4, (q31_t)0x801A0EF7, - (q31_t)0xFB49E6A2, (q31_t)0x80163440, (q31_t)0xFBAE5E89, - (q31_t)0x8012A86F, (q31_t)0xFC12D919, (q31_t)0x800F6B88, - (q31_t)0xFC775616, (q31_t)0x800C7D8C, (q31_t)0xFCDBD541, - (q31_t)0x8009DE7D, (q31_t)0xFD40565B, (q31_t)0x80078E5E, - (q31_t)0xFDA4D928, (q31_t)0x80058D2E, (q31_t)0xFE095D69, - (q31_t)0x8003DAF0, (q31_t)0xFE6DE2E0, (q31_t)0x800277A5, - (q31_t)0xFED2694F, (q31_t)0x8001634D, (q31_t)0xFF36F078, - (q31_t)0x80009DE9, (q31_t)0xFF9B781D, (q31_t)0x8000277A -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) -/** - @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, 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] = -{ - (q31_t)0x7FFFFFFF, (q31_t)0x00000000, (q31_t)0x7FFFF621, - (q31_t)0x003243F5, (q31_t)0x7FFFD885, (q31_t)0x006487E3, - (q31_t)0x7FFFA72C, (q31_t)0x0096CBC1, (q31_t)0x7FFF6216, - (q31_t)0x00C90F88, (q31_t)0x7FFF0942, (q31_t)0x00FB532F, - (q31_t)0x7FFE9CB2, (q31_t)0x012D96B0, (q31_t)0x7FFE1C64, - (q31_t)0x015FDA03, (q31_t)0x7FFD885A, (q31_t)0x01921D1F, - (q31_t)0x7FFCE093, (q31_t)0x01C45FFE, (q31_t)0x7FFC250F, - (q31_t)0x01F6A296, (q31_t)0x7FFB55CE, (q31_t)0x0228E4E1, - (q31_t)0x7FFA72D1, (q31_t)0x025B26D7, (q31_t)0x7FF97C17, - (q31_t)0x028D6870, (q31_t)0x7FF871A1, (q31_t)0x02BFA9A4, - (q31_t)0x7FF7536F, (q31_t)0x02F1EA6B, (q31_t)0x7FF62182, - (q31_t)0x03242ABF, (q31_t)0x7FF4DBD8, (q31_t)0x03566A96, - (q31_t)0x7FF38273, (q31_t)0x0388A9E9, (q31_t)0x7FF21553, - (q31_t)0x03BAE8B1, (q31_t)0x7FF09477, (q31_t)0x03ED26E6, - (q31_t)0x7FEEFFE1, (q31_t)0x041F647F, (q31_t)0x7FED5790, - (q31_t)0x0451A176, (q31_t)0x7FEB9B85, (q31_t)0x0483DDC3, - (q31_t)0x7FE9CBC0, (q31_t)0x04B6195D, (q31_t)0x7FE7E840, - (q31_t)0x04E8543D, (q31_t)0x7FE5F108, (q31_t)0x051A8E5C, - (q31_t)0x7FE3E616, (q31_t)0x054CC7B0, (q31_t)0x7FE1C76B, - (q31_t)0x057F0034, (q31_t)0x7FDF9508, (q31_t)0x05B137DF, - (q31_t)0x7FDD4EEC, (q31_t)0x05E36EA9, (q31_t)0x7FDAF518, - (q31_t)0x0615A48A, (q31_t)0x7FD8878D, (q31_t)0x0647D97C, - (q31_t)0x7FD6064B, (q31_t)0x067A0D75, (q31_t)0x7FD37152, - (q31_t)0x06AC406F, (q31_t)0x7FD0C8A3, (q31_t)0x06DE7261, - (q31_t)0x7FCE0C3E, (q31_t)0x0710A344, (q31_t)0x7FCB3C23, - (q31_t)0x0742D310, (q31_t)0x7FC85853, (q31_t)0x077501BE, - (q31_t)0x7FC560CF, (q31_t)0x07A72F45, (q31_t)0x7FC25596, - (q31_t)0x07D95B9E, (q31_t)0x7FBF36A9, (q31_t)0x080B86C1, - (q31_t)0x7FBC040A, (q31_t)0x083DB0A7, (q31_t)0x7FB8BDB7, - (q31_t)0x086FD947, (q31_t)0x7FB563B2, (q31_t)0x08A2009A, - (q31_t)0x7FB1F5FC, (q31_t)0x08D42698, (q31_t)0x7FAE7494, - (q31_t)0x09064B3A, (q31_t)0x7FAADF7C, (q31_t)0x09386E77, - (q31_t)0x7FA736B4, (q31_t)0x096A9049, (q31_t)0x7FA37A3C, - (q31_t)0x099CB0A7, (q31_t)0x7F9FAA15, (q31_t)0x09CECF89, - (q31_t)0x7F9BC63F, (q31_t)0x0A00ECE8, (q31_t)0x7F97CEBC, - (q31_t)0x0A3308BC, (q31_t)0x7F93C38C, (q31_t)0x0A6522FE, - (q31_t)0x7F8FA4AF, (q31_t)0x0A973BA5, (q31_t)0x7F8B7226, - (q31_t)0x0AC952AA, (q31_t)0x7F872BF3, (q31_t)0x0AFB6805, - (q31_t)0x7F82D214, (q31_t)0x0B2D7BAE, (q31_t)0x7F7E648B, - (q31_t)0x0B5F8D9F, (q31_t)0x7F79E35A, (q31_t)0x0B919DCE, - (q31_t)0x7F754E7F, (q31_t)0x0BC3AC35, (q31_t)0x7F70A5FD, - (q31_t)0x0BF5B8CB, (q31_t)0x7F6BE9D4, (q31_t)0x0C27C389, - (q31_t)0x7F671A04, (q31_t)0x0C59CC67, (q31_t)0x7F62368F, - (q31_t)0x0C8BD35E, (q31_t)0x7F5D3F75, (q31_t)0x0CBDD865, - (q31_t)0x7F5834B6, (q31_t)0x0CEFDB75, (q31_t)0x7F531654, - (q31_t)0x0D21DC87, (q31_t)0x7F4DE450, (q31_t)0x0D53DB92, - (q31_t)0x7F489EAA, (q31_t)0x0D85D88F, (q31_t)0x7F434563, - (q31_t)0x0DB7D376, (q31_t)0x7F3DD87C, (q31_t)0x0DE9CC3F, - (q31_t)0x7F3857F5, (q31_t)0x0E1BC2E3, (q31_t)0x7F32C3D0, - (q31_t)0x0E4DB75B, (q31_t)0x7F2D1C0E, (q31_t)0x0E7FA99D, - (q31_t)0x7F2760AF, (q31_t)0x0EB199A3, (q31_t)0x7F2191B4, - (q31_t)0x0EE38765, (q31_t)0x7F1BAF1E, (q31_t)0x0F1572DC, - (q31_t)0x7F15B8EE, (q31_t)0x0F475BFE, (q31_t)0x7F0FAF24, - (q31_t)0x0F7942C6, (q31_t)0x7F0991C3, (q31_t)0x0FAB272B, - (q31_t)0x7F0360CB, (q31_t)0x0FDD0925, (q31_t)0x7EFD1C3C, - (q31_t)0x100EE8AD, (q31_t)0x7EF6C418, (q31_t)0x1040C5BB, - (q31_t)0x7EF0585F, (q31_t)0x1072A047, (q31_t)0x7EE9D913, - (q31_t)0x10A4784A, (q31_t)0x7EE34635, (q31_t)0x10D64DBC, - (q31_t)0x7EDC9FC6, (q31_t)0x11082096, (q31_t)0x7ED5E5C6, - (q31_t)0x1139F0CE, (q31_t)0x7ECF1837, (q31_t)0x116BBE5F, - (q31_t)0x7EC8371A, (q31_t)0x119D8940, (q31_t)0x7EC1426F, - (q31_t)0x11CF516A, (q31_t)0x7EBA3A39, (q31_t)0x120116D4, - (q31_t)0x7EB31E77, (q31_t)0x1232D978, (q31_t)0x7EABEF2C, - (q31_t)0x1264994E, (q31_t)0x7EA4AC58, (q31_t)0x1296564D, - (q31_t)0x7E9D55FC, (q31_t)0x12C8106E, (q31_t)0x7E95EC19, - (q31_t)0x12F9C7AA, (q31_t)0x7E8E6EB1, (q31_t)0x132B7BF9, - (q31_t)0x7E86DDC5, (q31_t)0x135D2D53, (q31_t)0x7E7F3956, - (q31_t)0x138EDBB0, (q31_t)0x7E778165, (q31_t)0x13C0870A, - (q31_t)0x7E6FB5F3, (q31_t)0x13F22F57, (q31_t)0x7E67D702, - (q31_t)0x1423D492, (q31_t)0x7E5FE493, (q31_t)0x145576B1, - (q31_t)0x7E57DEA6, (q31_t)0x148715AD, (q31_t)0x7E4FC53E, - (q31_t)0x14B8B17F, (q31_t)0x7E47985B, (q31_t)0x14EA4A1F, - (q31_t)0x7E3F57FE, (q31_t)0x151BDF85, (q31_t)0x7E37042A, - (q31_t)0x154D71AA, (q31_t)0x7E2E9CDF, (q31_t)0x157F0086, - (q31_t)0x7E26221E, (q31_t)0x15B08C11, (q31_t)0x7E1D93E9, - (q31_t)0x15E21444, (q31_t)0x7E14F242, (q31_t)0x16139917, - (q31_t)0x7E0C3D29, (q31_t)0x16451A83, (q31_t)0x7E03749F, - (q31_t)0x1676987F, (q31_t)0x7DFA98A7, (q31_t)0x16A81305, - (q31_t)0x7DF1A942, (q31_t)0x16D98A0C, (q31_t)0x7DE8A670, - (q31_t)0x170AFD8D, (q31_t)0x7DDF9034, (q31_t)0x173C6D80, - (q31_t)0x7DD6668E, (q31_t)0x176DD9DE, (q31_t)0x7DCD2981, - (q31_t)0x179F429F, (q31_t)0x7DC3D90D, (q31_t)0x17D0A7BB, - (q31_t)0x7DBA7534, (q31_t)0x1802092C, (q31_t)0x7DB0FDF7, - (q31_t)0x183366E8, (q31_t)0x7DA77359, (q31_t)0x1864C0E9, - (q31_t)0x7D9DD55A, (q31_t)0x18961727, (q31_t)0x7D9423FB, - (q31_t)0x18C7699B, (q31_t)0x7D8A5F3F, (q31_t)0x18F8B83C, - (q31_t)0x7D808727, (q31_t)0x192A0303, (q31_t)0x7D769BB5, - (q31_t)0x195B49E9, (q31_t)0x7D6C9CE9, (q31_t)0x198C8CE6, - (q31_t)0x7D628AC5, (q31_t)0x19BDCBF2, (q31_t)0x7D58654C, - (q31_t)0x19EF0706, (q31_t)0x7D4E2C7E, (q31_t)0x1A203E1B, - (q31_t)0x7D43E05E, (q31_t)0x1A517127, (q31_t)0x7D3980EC, - (q31_t)0x1A82A025, (q31_t)0x7D2F0E2A, (q31_t)0x1AB3CB0C, - (q31_t)0x7D24881A, (q31_t)0x1AE4F1D6, (q31_t)0x7D19EEBE, - (q31_t)0x1B161479, (q31_t)0x7D0F4218, (q31_t)0x1B4732EF, - (q31_t)0x7D048228, (q31_t)0x1B784D30, (q31_t)0x7CF9AEF0, - (q31_t)0x1BA96334, (q31_t)0x7CEEC873, (q31_t)0x1BDA74F5, - (q31_t)0x7CE3CEB1, (q31_t)0x1C0B826A, (q31_t)0x7CD8C1AD, - (q31_t)0x1C3C8B8C, (q31_t)0x7CCDA168, (q31_t)0x1C6D9053, - (q31_t)0x7CC26DE5, (q31_t)0x1C9E90B8, (q31_t)0x7CB72724, - (q31_t)0x1CCF8CB3, (q31_t)0x7CABCD27, (q31_t)0x1D00843C, - (q31_t)0x7CA05FF1, (q31_t)0x1D31774D, (q31_t)0x7C94DF82, - (q31_t)0x1D6265DD, (q31_t)0x7C894BDD, (q31_t)0x1D934FE5, - (q31_t)0x7C7DA504, (q31_t)0x1DC4355D, (q31_t)0x7C71EAF8, - (q31_t)0x1DF5163F, (q31_t)0x7C661DBB, (q31_t)0x1E25F281, - (q31_t)0x7C5A3D4F, (q31_t)0x1E56CA1E, (q31_t)0x7C4E49B6, - (q31_t)0x1E879D0C, (q31_t)0x7C4242F2, (q31_t)0x1EB86B46, - (q31_t)0x7C362904, (q31_t)0x1EE934C2, (q31_t)0x7C29FBEE, - (q31_t)0x1F19F97B, (q31_t)0x7C1DBBB2, (q31_t)0x1F4AB967, - (q31_t)0x7C116853, (q31_t)0x1F7B7480, (q31_t)0x7C0501D1, - (q31_t)0x1FAC2ABF, (q31_t)0x7BF88830, (q31_t)0x1FDCDC1A, - (q31_t)0x7BEBFB70, (q31_t)0x200D888C, (q31_t)0x7BDF5B94, - (q31_t)0x203E300D, (q31_t)0x7BD2A89E, (q31_t)0x206ED295, - (q31_t)0x7BC5E28F, (q31_t)0x209F701C, (q31_t)0x7BB9096A, - (q31_t)0x20D0089B, (q31_t)0x7BAC1D31, (q31_t)0x21009C0B, - (q31_t)0x7B9F1DE5, (q31_t)0x21312A65, (q31_t)0x7B920B89, - (q31_t)0x2161B39F, (q31_t)0x7B84E61E, (q31_t)0x219237B4, - (q31_t)0x7B77ADA8, (q31_t)0x21C2B69C, (q31_t)0x7B6A6227, - (q31_t)0x21F3304E, (q31_t)0x7B5D039D, (q31_t)0x2223A4C5, - (q31_t)0x7B4F920E, (q31_t)0x225413F8, (q31_t)0x7B420D7A, - (q31_t)0x22847DDF, (q31_t)0x7B3475E4, (q31_t)0x22B4E274, - (q31_t)0x7B26CB4F, (q31_t)0x22E541AE, (q31_t)0x7B190DBB, - (q31_t)0x23159B87, (q31_t)0x7B0B3D2C, (q31_t)0x2345EFF7, - (q31_t)0x7AFD59A3, (q31_t)0x23763EF7, (q31_t)0x7AEF6323, - (q31_t)0x23A6887E, (q31_t)0x7AE159AE, (q31_t)0x23D6CC86, - (q31_t)0x7AD33D45, (q31_t)0x24070B07, (q31_t)0x7AC50DEB, - (q31_t)0x243743FA, (q31_t)0x7AB6CBA3, (q31_t)0x24677757, - (q31_t)0x7AA8766E, (q31_t)0x2497A517, (q31_t)0x7A9A0E4F, - (q31_t)0x24C7CD32, (q31_t)0x7A8B9348, (q31_t)0x24F7EFA1, - (q31_t)0x7A7D055B, (q31_t)0x25280C5D, (q31_t)0x7A6E648A, - (q31_t)0x2558235E, (q31_t)0x7A5FB0D8, (q31_t)0x2588349D, - (q31_t)0x7A50EA46, (q31_t)0x25B84012, (q31_t)0x7A4210D8, - (q31_t)0x25E845B5, (q31_t)0x7A33248F, (q31_t)0x26184581, - (q31_t)0x7A24256E, (q31_t)0x26483F6C, (q31_t)0x7A151377, - (q31_t)0x26783370, (q31_t)0x7A05EEAD, (q31_t)0x26A82185, - (q31_t)0x79F6B711, (q31_t)0x26D809A5, (q31_t)0x79E76CA6, - (q31_t)0x2707EBC6, (q31_t)0x79D80F6F, (q31_t)0x2737C7E3, - (q31_t)0x79C89F6D, (q31_t)0x27679DF4, (q31_t)0x79B91CA4, - (q31_t)0x27976DF1, (q31_t)0x79A98715, (q31_t)0x27C737D2, - (q31_t)0x7999DEC3, (q31_t)0x27F6FB92, (q31_t)0x798A23B1, - (q31_t)0x2826B928, (q31_t)0x797A55E0, (q31_t)0x2856708C, - (q31_t)0x796A7554, (q31_t)0x288621B9, (q31_t)0x795A820E, - (q31_t)0x28B5CCA5, (q31_t)0x794A7C11, (q31_t)0x28E5714A, - (q31_t)0x793A6360, (q31_t)0x29150FA1, (q31_t)0x792A37FE, - (q31_t)0x2944A7A2, (q31_t)0x7919F9EB, (q31_t)0x29743945, - (q31_t)0x7909A92C, (q31_t)0x29A3C484, (q31_t)0x78F945C3, - (q31_t)0x29D34958, (q31_t)0x78E8CFB1, (q31_t)0x2A02C7B8, - (q31_t)0x78D846FB, (q31_t)0x2A323F9D, (q31_t)0x78C7ABA1, - (q31_t)0x2A61B101, (q31_t)0x78B6FDA8, (q31_t)0x2A911BDB, - (q31_t)0x78A63D10, (q31_t)0x2AC08025, (q31_t)0x789569DE, - (q31_t)0x2AEFDDD8, (q31_t)0x78848413, (q31_t)0x2B1F34EB, - (q31_t)0x78738BB3, (q31_t)0x2B4E8558, (q31_t)0x786280BF, - (q31_t)0x2B7DCF17, (q31_t)0x7851633B, (q31_t)0x2BAD1221, - (q31_t)0x78403328, (q31_t)0x2BDC4E6F, (q31_t)0x782EF08B, - (q31_t)0x2C0B83F9, (q31_t)0x781D9B64, (q31_t)0x2C3AB2B9, - (q31_t)0x780C33B8, (q31_t)0x2C69DAA6, (q31_t)0x77FAB988, - (q31_t)0x2C98FBBA, (q31_t)0x77E92CD8, (q31_t)0x2CC815ED, - (q31_t)0x77D78DAA, (q31_t)0x2CF72939, (q31_t)0x77C5DC01, - (q31_t)0x2D263595, (q31_t)0x77B417DF, (q31_t)0x2D553AFB, - (q31_t)0x77A24148, (q31_t)0x2D843963, (q31_t)0x7790583D, - (q31_t)0x2DB330C7, (q31_t)0x777E5CC3, (q31_t)0x2DE2211E, - (q31_t)0x776C4EDB, (q31_t)0x2E110A62, (q31_t)0x775A2E88, - (q31_t)0x2E3FEC8B, (q31_t)0x7747FBCE, (q31_t)0x2E6EC792, - (q31_t)0x7735B6AE, (q31_t)0x2E9D9B70, (q31_t)0x77235F2D, - (q31_t)0x2ECC681E, (q31_t)0x7710F54B, (q31_t)0x2EFB2D94, - (q31_t)0x76FE790E, (q31_t)0x2F29EBCC, (q31_t)0x76EBEA77, - (q31_t)0x2F58A2BD, (q31_t)0x76D94988, (q31_t)0x2F875262, - (q31_t)0x76C69646, (q31_t)0x2FB5FAB2, (q31_t)0x76B3D0B3, - (q31_t)0x2FE49BA6, (q31_t)0x76A0F8D2, (q31_t)0x30133538, - (q31_t)0x768E0EA5, (q31_t)0x3041C760, (q31_t)0x767B1230, - (q31_t)0x30705217, (q31_t)0x76680376, (q31_t)0x309ED555, - (q31_t)0x7654E279, (q31_t)0x30CD5114, (q31_t)0x7641AF3C, - (q31_t)0x30FBC54D, (q31_t)0x762E69C3, (q31_t)0x312A31F8, - (q31_t)0x761B1211, (q31_t)0x3158970D, (q31_t)0x7607A827, - (q31_t)0x3186F487, (q31_t)0x75F42C0A, (q31_t)0x31B54A5D, - (q31_t)0x75E09DBD, (q31_t)0x31E39889, (q31_t)0x75CCFD42, - (q31_t)0x3211DF03, (q31_t)0x75B94A9C, (q31_t)0x32401DC5, - (q31_t)0x75A585CF, (q31_t)0x326E54C7, (q31_t)0x7591AEDD, - (q31_t)0x329C8402, (q31_t)0x757DC5CA, (q31_t)0x32CAAB6F, - (q31_t)0x7569CA98, (q31_t)0x32F8CB07, (q31_t)0x7555BD4B, - (q31_t)0x3326E2C2, (q31_t)0x75419DE6, (q31_t)0x3354F29A, - (q31_t)0x752D6C6C, (q31_t)0x3382FA88, (q31_t)0x751928E0, - (q31_t)0x33B0FA84, (q31_t)0x7504D345, (q31_t)0x33DEF287, - (q31_t)0x74F06B9E, (q31_t)0x340CE28A, (q31_t)0x74DBF1EF, - (q31_t)0x343ACA87, (q31_t)0x74C7663A, (q31_t)0x3468AA76, - (q31_t)0x74B2C883, (q31_t)0x3496824F, (q31_t)0x749E18CD, - (q31_t)0x34C4520D, (q31_t)0x7489571B, (q31_t)0x34F219A7, - (q31_t)0x74748371, (q31_t)0x351FD917, (q31_t)0x745F9DD1, - (q31_t)0x354D9056, (q31_t)0x744AA63E, (q31_t)0x357B3F5D, - (q31_t)0x74359CBD, (q31_t)0x35A8E624, (q31_t)0x74208150, - (q31_t)0x35D684A5, (q31_t)0x740B53FA, (q31_t)0x36041AD9, - (q31_t)0x73F614C0, (q31_t)0x3631A8B7, (q31_t)0x73E0C3A3, - (q31_t)0x365F2E3B, (q31_t)0x73CB60A7, (q31_t)0x368CAB5C, - (q31_t)0x73B5EBD0, (q31_t)0x36BA2013, (q31_t)0x73A06522, - (q31_t)0x36E78C5A, (q31_t)0x738ACC9E, (q31_t)0x3714F02A, - (q31_t)0x73752249, (q31_t)0x37424B7A, (q31_t)0x735F6626, - (q31_t)0x376F9E46, (q31_t)0x73499838, (q31_t)0x379CE884, - (q31_t)0x7333B883, (q31_t)0x37CA2A30, (q31_t)0x731DC709, - (q31_t)0x37F76340, (q31_t)0x7307C3D0, (q31_t)0x382493B0, - (q31_t)0x72F1AED8, (q31_t)0x3851BB76, (q31_t)0x72DB8828, - (q31_t)0x387EDA8E, (q31_t)0x72C54FC0, (q31_t)0x38ABF0EF, - (q31_t)0x72AF05A6, (q31_t)0x38D8FE93, (q31_t)0x7298A9DC, - (q31_t)0x39060372, (q31_t)0x72823C66, (q31_t)0x3932FF87, - (q31_t)0x726BBD48, (q31_t)0x395FF2C9, (q31_t)0x72552C84, - (q31_t)0x398CDD32, (q31_t)0x723E8A1F, (q31_t)0x39B9BEBB, - (q31_t)0x7227D61C, (q31_t)0x39E6975D, (q31_t)0x7211107D, - (q31_t)0x3A136712, (q31_t)0x71FA3948, (q31_t)0x3A402DD1, - (q31_t)0x71E3507F, (q31_t)0x3A6CEB95, (q31_t)0x71CC5626, - (q31_t)0x3A99A057, (q31_t)0x71B54A40, (q31_t)0x3AC64C0F, - (q31_t)0x719E2CD2, (q31_t)0x3AF2EEB7, (q31_t)0x7186FDDE, - (q31_t)0x3B1F8847, (q31_t)0x716FBD68, (q31_t)0x3B4C18BA, - (q31_t)0x71586B73, (q31_t)0x3B78A007, (q31_t)0x71410804, - (q31_t)0x3BA51E29, (q31_t)0x7129931E, (q31_t)0x3BD19317, - (q31_t)0x71120CC5, (q31_t)0x3BFDFECD, (q31_t)0x70FA74FB, - (q31_t)0x3C2A6142, (q31_t)0x70E2CBC6, (q31_t)0x3C56BA70, - (q31_t)0x70CB1127, (q31_t)0x3C830A4F, (q31_t)0x70B34524, - (q31_t)0x3CAF50DA, (q31_t)0x709B67C0, (q31_t)0x3CDB8E09, - (q31_t)0x708378FE, (q31_t)0x3D07C1D5, (q31_t)0x706B78E3, - (q31_t)0x3D33EC39, (q31_t)0x70536771, (q31_t)0x3D600D2B, - (q31_t)0x703B44AC, (q31_t)0x3D8C24A7, (q31_t)0x70231099, - (q31_t)0x3DB832A5, (q31_t)0x700ACB3B, (q31_t)0x3DE4371F, - (q31_t)0x6FF27496, (q31_t)0x3E10320D, (q31_t)0x6FDA0CAD, - (q31_t)0x3E3C2369, (q31_t)0x6FC19385, (q31_t)0x3E680B2C, - (q31_t)0x6FA90920, (q31_t)0x3E93E94F, (q31_t)0x6F906D84, - (q31_t)0x3EBFBDCC, (q31_t)0x6F77C0B3, (q31_t)0x3EEB889C, - (q31_t)0x6F5F02B1, (q31_t)0x3F1749B7, (q31_t)0x6F463383, - (q31_t)0x3F430118, (q31_t)0x6F2D532C, (q31_t)0x3F6EAEB8, - (q31_t)0x6F1461AF, (q31_t)0x3F9A528F, (q31_t)0x6EFB5F12, - (q31_t)0x3FC5EC97, (q31_t)0x6EE24B57, (q31_t)0x3FF17CCA, - (q31_t)0x6EC92682, (q31_t)0x401D0320, (q31_t)0x6EAFF098, - (q31_t)0x40487F93, (q31_t)0x6E96A99C, (q31_t)0x4073F21D, - (q31_t)0x6E7D5193, (q31_t)0x409F5AB6, (q31_t)0x6E63E87F, - (q31_t)0x40CAB957, (q31_t)0x6E4A6E65, (q31_t)0x40F60DFB, - (q31_t)0x6E30E349, (q31_t)0x4121589A, (q31_t)0x6E17472F, - (q31_t)0x414C992E, (q31_t)0x6DFD9A1B, (q31_t)0x4177CFB0, - (q31_t)0x6DE3DC11, (q31_t)0x41A2FC1A, (q31_t)0x6DCA0D14, - (q31_t)0x41CE1E64, (q31_t)0x6DB02D29, (q31_t)0x41F93688, - (q31_t)0x6D963C54, (q31_t)0x42244480, (q31_t)0x6D7C3A98, - (q31_t)0x424F4845, (q31_t)0x6D6227FA, (q31_t)0x427A41D0, - (q31_t)0x6D48047E, (q31_t)0x42A5311A, (q31_t)0x6D2DD027, - (q31_t)0x42D0161E, (q31_t)0x6D138AFA, (q31_t)0x42FAF0D4, - (q31_t)0x6CF934FB, (q31_t)0x4325C135, (q31_t)0x6CDECE2E, - (q31_t)0x4350873C, (q31_t)0x6CC45697, (q31_t)0x437B42E1, - (q31_t)0x6CA9CE3A, (q31_t)0x43A5F41E, (q31_t)0x6C8F351C, - (q31_t)0x43D09AEC, (q31_t)0x6C748B3F, (q31_t)0x43FB3745, - (q31_t)0x6C59D0A9, (q31_t)0x4425C923, (q31_t)0x6C3F055D, - (q31_t)0x4450507E, (q31_t)0x6C242960, (q31_t)0x447ACD50, - (q31_t)0x6C093CB6, (q31_t)0x44A53F93, (q31_t)0x6BEE3F62, - (q31_t)0x44CFA73F, (q31_t)0x6BD3316A, (q31_t)0x44FA044F, - (q31_t)0x6BB812D0, (q31_t)0x452456BC, (q31_t)0x6B9CE39B, - (q31_t)0x454E9E80, (q31_t)0x6B81A3CD, (q31_t)0x4578DB93, - (q31_t)0x6B66536A, (q31_t)0x45A30DF0, (q31_t)0x6B4AF278, - (q31_t)0x45CD358F, (q31_t)0x6B2F80FA, (q31_t)0x45F7526B, - (q31_t)0x6B13FEF5, (q31_t)0x4621647C, (q31_t)0x6AF86C6C, - (q31_t)0x464B6BBD, (q31_t)0x6ADCC964, (q31_t)0x46756827, - (q31_t)0x6AC115E1, (q31_t)0x469F59B4, (q31_t)0x6AA551E8, - (q31_t)0x46C9405C, (q31_t)0x6A897D7D, (q31_t)0x46F31C1A, - (q31_t)0x6A6D98A4, (q31_t)0x471CECE6, (q31_t)0x6A51A361, - (q31_t)0x4746B2BC, (q31_t)0x6A359DB9, (q31_t)0x47706D93, - (q31_t)0x6A1987B0, (q31_t)0x479A1D66, (q31_t)0x69FD614A, - (q31_t)0x47C3C22E, (q31_t)0x69E12A8C, (q31_t)0x47ED5BE6, - (q31_t)0x69C4E37A, (q31_t)0x4816EA85, (q31_t)0x69A88C18, - (q31_t)0x48406E07, (q31_t)0x698C246C, (q31_t)0x4869E664, - (q31_t)0x696FAC78, (q31_t)0x48935397, (q31_t)0x69532442, - (q31_t)0x48BCB598, (q31_t)0x69368BCE, (q31_t)0x48E60C62, - (q31_t)0x6919E320, (q31_t)0x490F57EE, (q31_t)0x68FD2A3D, - (q31_t)0x49389836, (q31_t)0x68E06129, (q31_t)0x4961CD32, - (q31_t)0x68C387E9, (q31_t)0x498AF6DE, (q31_t)0x68A69E81, - (q31_t)0x49B41533, (q31_t)0x6889A4F5, (q31_t)0x49DD282A, - (q31_t)0x686C9B4B, (q31_t)0x4A062FBD, (q31_t)0x684F8186, - (q31_t)0x4A2F2BE5, (q31_t)0x683257AA, (q31_t)0x4A581C9D, - (q31_t)0x68151DBE, (q31_t)0x4A8101DE, (q31_t)0x67F7D3C4, - (q31_t)0x4AA9DBA1, (q31_t)0x67DA79C2, (q31_t)0x4AD2A9E1, - (q31_t)0x67BD0FBC, (q31_t)0x4AFB6C97, (q31_t)0x679F95B7, - (q31_t)0x4B2423BD, (q31_t)0x67820BB6, (q31_t)0x4B4CCF4D, - (q31_t)0x676471C0, (q31_t)0x4B756F3F, (q31_t)0x6746C7D7, - (q31_t)0x4B9E038F, (q31_t)0x67290E02, (q31_t)0x4BC68C36, - (q31_t)0x670B4443, (q31_t)0x4BEF092D, (q31_t)0x66ED6AA1, - (q31_t)0x4C177A6E, (q31_t)0x66CF811F, (q31_t)0x4C3FDFF3, - (q31_t)0x66B187C3, (q31_t)0x4C6839B6, (q31_t)0x66937E90, - (q31_t)0x4C9087B1, (q31_t)0x6675658C, (q31_t)0x4CB8C9DD, - (q31_t)0x66573CBB, (q31_t)0x4CE10034, (q31_t)0x66390422, - (q31_t)0x4D092AB0, (q31_t)0x661ABBC5, (q31_t)0x4D31494B, - (q31_t)0x65FC63A9, (q31_t)0x4D595BFE, (q31_t)0x65DDFBD3, - (q31_t)0x4D8162C4, (q31_t)0x65BF8447, (q31_t)0x4DA95D96, - (q31_t)0x65A0FD0B, (q31_t)0x4DD14C6E, (q31_t)0x65826622, - (q31_t)0x4DF92F45, (q31_t)0x6563BF92, (q31_t)0x4E210617, - (q31_t)0x6545095F, (q31_t)0x4E48D0DC, (q31_t)0x6526438E, - (q31_t)0x4E708F8F, (q31_t)0x65076E24, (q31_t)0x4E984229, - (q31_t)0x64E88926, (q31_t)0x4EBFE8A4, (q31_t)0x64C99498, - (q31_t)0x4EE782FA, (q31_t)0x64AA907F, (q31_t)0x4F0F1126, - (q31_t)0x648B7CDF, (q31_t)0x4F369320, (q31_t)0x646C59BF, - (q31_t)0x4F5E08E3, (q31_t)0x644D2722, (q31_t)0x4F857268, - (q31_t)0x642DE50D, (q31_t)0x4FACCFAB, (q31_t)0x640E9385, - (q31_t)0x4FD420A3, (q31_t)0x63EF328F, (q31_t)0x4FFB654D, - (q31_t)0x63CFC230, (q31_t)0x50229DA0, (q31_t)0x63B0426D, - (q31_t)0x5049C999, (q31_t)0x6390B34A, (q31_t)0x5070E92F, - (q31_t)0x637114CC, (q31_t)0x5097FC5E, (q31_t)0x635166F8, - (q31_t)0x50BF031F, (q31_t)0x6331A9D4, (q31_t)0x50E5FD6C, - (q31_t)0x6311DD63, (q31_t)0x510CEB40, (q31_t)0x62F201AC, - (q31_t)0x5133CC94, (q31_t)0x62D216B2, (q31_t)0x515AA162, - (q31_t)0x62B21C7B, (q31_t)0x518169A4, (q31_t)0x6292130C, - (q31_t)0x51A82555, (q31_t)0x6271FA69, (q31_t)0x51CED46E, - (q31_t)0x6251D297, (q31_t)0x51F576E9, (q31_t)0x62319B9D, - (q31_t)0x521C0CC1, (q31_t)0x6211557D, (q31_t)0x524295EF, - (q31_t)0x61F1003E, (q31_t)0x5269126E, (q31_t)0x61D09BE5, - (q31_t)0x528F8237, (q31_t)0x61B02876, (q31_t)0x52B5E545, - (q31_t)0x618FA5F6, (q31_t)0x52DC3B92, (q31_t)0x616F146B, - (q31_t)0x53028517, (q31_t)0x614E73D9, (q31_t)0x5328C1D0, - (q31_t)0x612DC446, (q31_t)0x534EF1B5, (q31_t)0x610D05B7, - (q31_t)0x537514C1, (q31_t)0x60EC3830, (q31_t)0x539B2AEF, - (q31_t)0x60CB5BB6, (q31_t)0x53C13438, (q31_t)0x60AA704F, - (q31_t)0x53E73097, (q31_t)0x60897600, (q31_t)0x540D2005, - (q31_t)0x60686CCE, (q31_t)0x5433027D, (q31_t)0x604754BE, - (q31_t)0x5458D7F9, (q31_t)0x60262DD5, (q31_t)0x547EA073, - (q31_t)0x6004F818, (q31_t)0x54A45BE5, (q31_t)0x5FE3B38D, - (q31_t)0x54CA0A4A, (q31_t)0x5FC26038, (q31_t)0x54EFAB9C, - (q31_t)0x5FA0FE1E, (q31_t)0x55153FD4, (q31_t)0x5F7F8D46, - (q31_t)0x553AC6ED, (q31_t)0x5F5E0DB3, (q31_t)0x556040E2, - (q31_t)0x5F3C7F6B, (q31_t)0x5585ADAC, (q31_t)0x5F1AE273, - (q31_t)0x55AB0D46, (q31_t)0x5EF936D1, (q31_t)0x55D05FAA, - (q31_t)0x5ED77C89, (q31_t)0x55F5A4D2, (q31_t)0x5EB5B3A1, - (q31_t)0x561ADCB8, (q31_t)0x5E93DC1F, (q31_t)0x56400757, - (q31_t)0x5E71F606, (q31_t)0x566524AA, (q31_t)0x5E50015D, - (q31_t)0x568A34A9, (q31_t)0x5E2DFE28, (q31_t)0x56AF3750, - (q31_t)0x5E0BEC6E, (q31_t)0x56D42C99, (q31_t)0x5DE9CC32, - (q31_t)0x56F9147E, (q31_t)0x5DC79D7C, (q31_t)0x571DEEF9, - (q31_t)0x5DA5604E, (q31_t)0x5742BC05, (q31_t)0x5D8314B0, - (q31_t)0x57677B9D, (q31_t)0x5D60BAA6, (q31_t)0x578C2DB9, - (q31_t)0x5D3E5236, (q31_t)0x57B0D256, (q31_t)0x5D1BDB65, - (q31_t)0x57D5696C, (q31_t)0x5CF95638, (q31_t)0x57F9F2F7, - (q31_t)0x5CD6C2B4, (q31_t)0x581E6EF1, (q31_t)0x5CB420DF, - (q31_t)0x5842DD54, (q31_t)0x5C9170BF, (q31_t)0x58673E1B, - (q31_t)0x5C6EB258, (q31_t)0x588B913F, (q31_t)0x5C4BE5B0, - (q31_t)0x58AFD6BC, (q31_t)0x5C290ACC, (q31_t)0x58D40E8C, - (q31_t)0x5C0621B2, (q31_t)0x58F838A9, (q31_t)0x5BE32A67, - (q31_t)0x591C550E, (q31_t)0x5BC024F0, (q31_t)0x594063B4, - (q31_t)0x5B9D1153, (q31_t)0x59646497, (q31_t)0x5B79EF96, - (q31_t)0x598857B1, (q31_t)0x5B56BFBD, (q31_t)0x59AC3CFD, - (q31_t)0x5B3381CE, (q31_t)0x59D01474, (q31_t)0x5B1035CF, - (q31_t)0x59F3DE12, (q31_t)0x5AECDBC4, (q31_t)0x5A1799D0, - (q31_t)0x5AC973B4, (q31_t)0x5A3B47AA, (q31_t)0x5AA5FDA4, - (q31_t)0x5A5EE79A, (q31_t)0x5A82799A, (q31_t)0x5A82799A, - (q31_t)0x5A5EE79A, (q31_t)0x5AA5FDA4, (q31_t)0x5A3B47AA, - (q31_t)0x5AC973B4, (q31_t)0x5A1799D0, (q31_t)0x5AECDBC4, - (q31_t)0x59F3DE12, (q31_t)0x5B1035CF, (q31_t)0x59D01474, - (q31_t)0x5B3381CE, (q31_t)0x59AC3CFD, (q31_t)0x5B56BFBD, - (q31_t)0x598857B1, (q31_t)0x5B79EF96, (q31_t)0x59646497, - (q31_t)0x5B9D1153, (q31_t)0x594063B4, (q31_t)0x5BC024F0, - (q31_t)0x591C550E, (q31_t)0x5BE32A67, (q31_t)0x58F838A9, - (q31_t)0x5C0621B2, (q31_t)0x58D40E8C, (q31_t)0x5C290ACC, - (q31_t)0x58AFD6BC, (q31_t)0x5C4BE5B0, (q31_t)0x588B913F, - (q31_t)0x5C6EB258, (q31_t)0x58673E1B, (q31_t)0x5C9170BF, - (q31_t)0x5842DD54, (q31_t)0x5CB420DF, (q31_t)0x581E6EF1, - (q31_t)0x5CD6C2B4, (q31_t)0x57F9F2F7, (q31_t)0x5CF95638, - (q31_t)0x57D5696C, (q31_t)0x5D1BDB65, (q31_t)0x57B0D256, - (q31_t)0x5D3E5236, (q31_t)0x578C2DB9, (q31_t)0x5D60BAA6, - (q31_t)0x57677B9D, (q31_t)0x5D8314B0, (q31_t)0x5742BC05, - (q31_t)0x5DA5604E, (q31_t)0x571DEEF9, (q31_t)0x5DC79D7C, - (q31_t)0x56F9147E, (q31_t)0x5DE9CC32, (q31_t)0x56D42C99, - (q31_t)0x5E0BEC6E, (q31_t)0x56AF3750, (q31_t)0x5E2DFE28, - (q31_t)0x568A34A9, (q31_t)0x5E50015D, (q31_t)0x566524AA, - (q31_t)0x5E71F606, (q31_t)0x56400757, (q31_t)0x5E93DC1F, - (q31_t)0x561ADCB8, (q31_t)0x5EB5B3A1, (q31_t)0x55F5A4D2, - (q31_t)0x5ED77C89, (q31_t)0x55D05FAA, (q31_t)0x5EF936D1, - (q31_t)0x55AB0D46, (q31_t)0x5F1AE273, (q31_t)0x5585ADAC, - (q31_t)0x5F3C7F6B, (q31_t)0x556040E2, (q31_t)0x5F5E0DB3, - (q31_t)0x553AC6ED, (q31_t)0x5F7F8D46, (q31_t)0x55153FD4, - (q31_t)0x5FA0FE1E, (q31_t)0x54EFAB9C, (q31_t)0x5FC26038, - (q31_t)0x54CA0A4A, (q31_t)0x5FE3B38D, (q31_t)0x54A45BE5, - (q31_t)0x6004F818, (q31_t)0x547EA073, (q31_t)0x60262DD5, - (q31_t)0x5458D7F9, (q31_t)0x604754BE, (q31_t)0x5433027D, - (q31_t)0x60686CCE, (q31_t)0x540D2005, (q31_t)0x60897600, - (q31_t)0x53E73097, (q31_t)0x60AA704F, (q31_t)0x53C13438, - (q31_t)0x60CB5BB6, (q31_t)0x539B2AEF, (q31_t)0x60EC3830, - (q31_t)0x537514C1, (q31_t)0x610D05B7, (q31_t)0x534EF1B5, - (q31_t)0x612DC446, (q31_t)0x5328C1D0, (q31_t)0x614E73D9, - (q31_t)0x53028517, (q31_t)0x616F146B, (q31_t)0x52DC3B92, - (q31_t)0x618FA5F6, (q31_t)0x52B5E545, (q31_t)0x61B02876, - (q31_t)0x528F8237, (q31_t)0x61D09BE5, (q31_t)0x5269126E, - (q31_t)0x61F1003E, (q31_t)0x524295EF, (q31_t)0x6211557D, - (q31_t)0x521C0CC1, (q31_t)0x62319B9D, (q31_t)0x51F576E9, - (q31_t)0x6251D297, (q31_t)0x51CED46E, (q31_t)0x6271FA69, - (q31_t)0x51A82555, (q31_t)0x6292130C, (q31_t)0x518169A4, - (q31_t)0x62B21C7B, (q31_t)0x515AA162, (q31_t)0x62D216B2, - (q31_t)0x5133CC94, (q31_t)0x62F201AC, (q31_t)0x510CEB40, - (q31_t)0x6311DD63, (q31_t)0x50E5FD6C, (q31_t)0x6331A9D4, - (q31_t)0x50BF031F, (q31_t)0x635166F8, (q31_t)0x5097FC5E, - (q31_t)0x637114CC, (q31_t)0x5070E92F, (q31_t)0x6390B34A, - (q31_t)0x5049C999, (q31_t)0x63B0426D, (q31_t)0x50229DA0, - (q31_t)0x63CFC230, (q31_t)0x4FFB654D, (q31_t)0x63EF328F, - (q31_t)0x4FD420A3, (q31_t)0x640E9385, (q31_t)0x4FACCFAB, - (q31_t)0x642DE50D, (q31_t)0x4F857268, (q31_t)0x644D2722, - (q31_t)0x4F5E08E3, (q31_t)0x646C59BF, (q31_t)0x4F369320, - (q31_t)0x648B7CDF, (q31_t)0x4F0F1126, (q31_t)0x64AA907F, - (q31_t)0x4EE782FA, (q31_t)0x64C99498, (q31_t)0x4EBFE8A4, - (q31_t)0x64E88926, (q31_t)0x4E984229, (q31_t)0x65076E24, - (q31_t)0x4E708F8F, (q31_t)0x6526438E, (q31_t)0x4E48D0DC, - (q31_t)0x6545095F, (q31_t)0x4E210617, (q31_t)0x6563BF92, - (q31_t)0x4DF92F45, (q31_t)0x65826622, (q31_t)0x4DD14C6E, - (q31_t)0x65A0FD0B, (q31_t)0x4DA95D96, (q31_t)0x65BF8447, - (q31_t)0x4D8162C4, (q31_t)0x65DDFBD3, (q31_t)0x4D595BFE, - (q31_t)0x65FC63A9, (q31_t)0x4D31494B, (q31_t)0x661ABBC5, - (q31_t)0x4D092AB0, (q31_t)0x66390422, (q31_t)0x4CE10034, - (q31_t)0x66573CBB, (q31_t)0x4CB8C9DD, (q31_t)0x6675658C, - (q31_t)0x4C9087B1, (q31_t)0x66937E90, (q31_t)0x4C6839B6, - (q31_t)0x66B187C3, (q31_t)0x4C3FDFF3, (q31_t)0x66CF811F, - (q31_t)0x4C177A6E, (q31_t)0x66ED6AA1, (q31_t)0x4BEF092D, - (q31_t)0x670B4443, (q31_t)0x4BC68C36, (q31_t)0x67290E02, - (q31_t)0x4B9E038F, (q31_t)0x6746C7D7, (q31_t)0x4B756F3F, - (q31_t)0x676471C0, (q31_t)0x4B4CCF4D, (q31_t)0x67820BB6, - (q31_t)0x4B2423BD, (q31_t)0x679F95B7, (q31_t)0x4AFB6C97, - (q31_t)0x67BD0FBC, (q31_t)0x4AD2A9E1, (q31_t)0x67DA79C2, - (q31_t)0x4AA9DBA1, (q31_t)0x67F7D3C4, (q31_t)0x4A8101DE, - (q31_t)0x68151DBE, (q31_t)0x4A581C9D, (q31_t)0x683257AA, - (q31_t)0x4A2F2BE5, (q31_t)0x684F8186, (q31_t)0x4A062FBD, - (q31_t)0x686C9B4B, (q31_t)0x49DD282A, (q31_t)0x6889A4F5, - (q31_t)0x49B41533, (q31_t)0x68A69E81, (q31_t)0x498AF6DE, - (q31_t)0x68C387E9, (q31_t)0x4961CD32, (q31_t)0x68E06129, - (q31_t)0x49389836, (q31_t)0x68FD2A3D, (q31_t)0x490F57EE, - (q31_t)0x6919E320, (q31_t)0x48E60C62, (q31_t)0x69368BCE, - (q31_t)0x48BCB598, (q31_t)0x69532442, (q31_t)0x48935397, - (q31_t)0x696FAC78, (q31_t)0x4869E664, (q31_t)0x698C246C, - (q31_t)0x48406E07, (q31_t)0x69A88C18, (q31_t)0x4816EA85, - (q31_t)0x69C4E37A, (q31_t)0x47ED5BE6, (q31_t)0x69E12A8C, - (q31_t)0x47C3C22E, (q31_t)0x69FD614A, (q31_t)0x479A1D66, - (q31_t)0x6A1987B0, (q31_t)0x47706D93, (q31_t)0x6A359DB9, - (q31_t)0x4746B2BC, (q31_t)0x6A51A361, (q31_t)0x471CECE6, - (q31_t)0x6A6D98A4, (q31_t)0x46F31C1A, (q31_t)0x6A897D7D, - (q31_t)0x46C9405C, (q31_t)0x6AA551E8, (q31_t)0x469F59B4, - (q31_t)0x6AC115E1, (q31_t)0x46756827, (q31_t)0x6ADCC964, - (q31_t)0x464B6BBD, (q31_t)0x6AF86C6C, (q31_t)0x4621647C, - (q31_t)0x6B13FEF5, (q31_t)0x45F7526B, (q31_t)0x6B2F80FA, - (q31_t)0x45CD358F, (q31_t)0x6B4AF278, (q31_t)0x45A30DF0, - (q31_t)0x6B66536A, (q31_t)0x4578DB93, (q31_t)0x6B81A3CD, - (q31_t)0x454E9E80, (q31_t)0x6B9CE39B, (q31_t)0x452456BC, - (q31_t)0x6BB812D0, (q31_t)0x44FA044F, (q31_t)0x6BD3316A, - (q31_t)0x44CFA73F, (q31_t)0x6BEE3F62, (q31_t)0x44A53F93, - (q31_t)0x6C093CB6, (q31_t)0x447ACD50, (q31_t)0x6C242960, - (q31_t)0x4450507E, (q31_t)0x6C3F055D, (q31_t)0x4425C923, - (q31_t)0x6C59D0A9, (q31_t)0x43FB3745, (q31_t)0x6C748B3F, - (q31_t)0x43D09AEC, (q31_t)0x6C8F351C, (q31_t)0x43A5F41E, - (q31_t)0x6CA9CE3A, (q31_t)0x437B42E1, (q31_t)0x6CC45697, - (q31_t)0x4350873C, (q31_t)0x6CDECE2E, (q31_t)0x4325C135, - (q31_t)0x6CF934FB, (q31_t)0x42FAF0D4, (q31_t)0x6D138AFA, - (q31_t)0x42D0161E, (q31_t)0x6D2DD027, (q31_t)0x42A5311A, - (q31_t)0x6D48047E, (q31_t)0x427A41D0, (q31_t)0x6D6227FA, - (q31_t)0x424F4845, (q31_t)0x6D7C3A98, (q31_t)0x42244480, - (q31_t)0x6D963C54, (q31_t)0x41F93688, (q31_t)0x6DB02D29, - (q31_t)0x41CE1E64, (q31_t)0x6DCA0D14, (q31_t)0x41A2FC1A, - (q31_t)0x6DE3DC11, (q31_t)0x4177CFB0, (q31_t)0x6DFD9A1B, - (q31_t)0x414C992E, (q31_t)0x6E17472F, (q31_t)0x4121589A, - (q31_t)0x6E30E349, (q31_t)0x40F60DFB, (q31_t)0x6E4A6E65, - (q31_t)0x40CAB957, (q31_t)0x6E63E87F, (q31_t)0x409F5AB6, - (q31_t)0x6E7D5193, (q31_t)0x4073F21D, (q31_t)0x6E96A99C, - (q31_t)0x40487F93, (q31_t)0x6EAFF098, (q31_t)0x401D0320, - (q31_t)0x6EC92682, (q31_t)0x3FF17CCA, (q31_t)0x6EE24B57, - (q31_t)0x3FC5EC97, (q31_t)0x6EFB5F12, (q31_t)0x3F9A528F, - (q31_t)0x6F1461AF, (q31_t)0x3F6EAEB8, (q31_t)0x6F2D532C, - (q31_t)0x3F430118, (q31_t)0x6F463383, (q31_t)0x3F1749B7, - (q31_t)0x6F5F02B1, (q31_t)0x3EEB889C, (q31_t)0x6F77C0B3, - (q31_t)0x3EBFBDCC, (q31_t)0x6F906D84, (q31_t)0x3E93E94F, - (q31_t)0x6FA90920, (q31_t)0x3E680B2C, (q31_t)0x6FC19385, - (q31_t)0x3E3C2369, (q31_t)0x6FDA0CAD, (q31_t)0x3E10320D, - (q31_t)0x6FF27496, (q31_t)0x3DE4371F, (q31_t)0x700ACB3B, - (q31_t)0x3DB832A5, (q31_t)0x70231099, (q31_t)0x3D8C24A7, - (q31_t)0x703B44AC, (q31_t)0x3D600D2B, (q31_t)0x70536771, - (q31_t)0x3D33EC39, (q31_t)0x706B78E3, (q31_t)0x3D07C1D5, - (q31_t)0x708378FE, (q31_t)0x3CDB8E09, (q31_t)0x709B67C0, - (q31_t)0x3CAF50DA, (q31_t)0x70B34524, (q31_t)0x3C830A4F, - (q31_t)0x70CB1127, (q31_t)0x3C56BA70, (q31_t)0x70E2CBC6, - (q31_t)0x3C2A6142, (q31_t)0x70FA74FB, (q31_t)0x3BFDFECD, - (q31_t)0x71120CC5, (q31_t)0x3BD19317, (q31_t)0x7129931E, - (q31_t)0x3BA51E29, (q31_t)0x71410804, (q31_t)0x3B78A007, - (q31_t)0x71586B73, (q31_t)0x3B4C18BA, (q31_t)0x716FBD68, - (q31_t)0x3B1F8847, (q31_t)0x7186FDDE, (q31_t)0x3AF2EEB7, - (q31_t)0x719E2CD2, (q31_t)0x3AC64C0F, (q31_t)0x71B54A40, - (q31_t)0x3A99A057, (q31_t)0x71CC5626, (q31_t)0x3A6CEB95, - (q31_t)0x71E3507F, (q31_t)0x3A402DD1, (q31_t)0x71FA3948, - (q31_t)0x3A136712, (q31_t)0x7211107D, (q31_t)0x39E6975D, - (q31_t)0x7227D61C, (q31_t)0x39B9BEBB, (q31_t)0x723E8A1F, - (q31_t)0x398CDD32, (q31_t)0x72552C84, (q31_t)0x395FF2C9, - (q31_t)0x726BBD48, (q31_t)0x3932FF87, (q31_t)0x72823C66, - (q31_t)0x39060372, (q31_t)0x7298A9DC, (q31_t)0x38D8FE93, - (q31_t)0x72AF05A6, (q31_t)0x38ABF0EF, (q31_t)0x72C54FC0, - (q31_t)0x387EDA8E, (q31_t)0x72DB8828, (q31_t)0x3851BB76, - (q31_t)0x72F1AED8, (q31_t)0x382493B0, (q31_t)0x7307C3D0, - (q31_t)0x37F76340, (q31_t)0x731DC709, (q31_t)0x37CA2A30, - (q31_t)0x7333B883, (q31_t)0x379CE884, (q31_t)0x73499838, - (q31_t)0x376F9E46, (q31_t)0x735F6626, (q31_t)0x37424B7A, - (q31_t)0x73752249, (q31_t)0x3714F02A, (q31_t)0x738ACC9E, - (q31_t)0x36E78C5A, (q31_t)0x73A06522, (q31_t)0x36BA2013, - (q31_t)0x73B5EBD0, (q31_t)0x368CAB5C, (q31_t)0x73CB60A7, - (q31_t)0x365F2E3B, (q31_t)0x73E0C3A3, (q31_t)0x3631A8B7, - (q31_t)0x73F614C0, (q31_t)0x36041AD9, (q31_t)0x740B53FA, - (q31_t)0x35D684A5, (q31_t)0x74208150, (q31_t)0x35A8E624, - (q31_t)0x74359CBD, (q31_t)0x357B3F5D, (q31_t)0x744AA63E, - (q31_t)0x354D9056, (q31_t)0x745F9DD1, (q31_t)0x351FD917, - (q31_t)0x74748371, (q31_t)0x34F219A7, (q31_t)0x7489571B, - (q31_t)0x34C4520D, (q31_t)0x749E18CD, (q31_t)0x3496824F, - (q31_t)0x74B2C883, (q31_t)0x3468AA76, (q31_t)0x74C7663A, - (q31_t)0x343ACA87, (q31_t)0x74DBF1EF, (q31_t)0x340CE28A, - (q31_t)0x74F06B9E, (q31_t)0x33DEF287, (q31_t)0x7504D345, - (q31_t)0x33B0FA84, (q31_t)0x751928E0, (q31_t)0x3382FA88, - (q31_t)0x752D6C6C, (q31_t)0x3354F29A, (q31_t)0x75419DE6, - (q31_t)0x3326E2C2, (q31_t)0x7555BD4B, (q31_t)0x32F8CB07, - (q31_t)0x7569CA98, (q31_t)0x32CAAB6F, (q31_t)0x757DC5CA, - (q31_t)0x329C8402, (q31_t)0x7591AEDD, (q31_t)0x326E54C7, - (q31_t)0x75A585CF, (q31_t)0x32401DC5, (q31_t)0x75B94A9C, - (q31_t)0x3211DF03, (q31_t)0x75CCFD42, (q31_t)0x31E39889, - (q31_t)0x75E09DBD, (q31_t)0x31B54A5D, (q31_t)0x75F42C0A, - (q31_t)0x3186F487, (q31_t)0x7607A827, (q31_t)0x3158970D, - (q31_t)0x761B1211, (q31_t)0x312A31F8, (q31_t)0x762E69C3, - (q31_t)0x30FBC54D, (q31_t)0x7641AF3C, (q31_t)0x30CD5114, - (q31_t)0x7654E279, (q31_t)0x309ED555, (q31_t)0x76680376, - (q31_t)0x30705217, (q31_t)0x767B1230, (q31_t)0x3041C760, - (q31_t)0x768E0EA5, (q31_t)0x30133538, (q31_t)0x76A0F8D2, - (q31_t)0x2FE49BA6, (q31_t)0x76B3D0B3, (q31_t)0x2FB5FAB2, - (q31_t)0x76C69646, (q31_t)0x2F875262, (q31_t)0x76D94988, - (q31_t)0x2F58A2BD, (q31_t)0x76EBEA77, (q31_t)0x2F29EBCC, - (q31_t)0x76FE790E, (q31_t)0x2EFB2D94, (q31_t)0x7710F54B, - (q31_t)0x2ECC681E, (q31_t)0x77235F2D, (q31_t)0x2E9D9B70, - (q31_t)0x7735B6AE, (q31_t)0x2E6EC792, (q31_t)0x7747FBCE, - (q31_t)0x2E3FEC8B, (q31_t)0x775A2E88, (q31_t)0x2E110A62, - (q31_t)0x776C4EDB, (q31_t)0x2DE2211E, (q31_t)0x777E5CC3, - (q31_t)0x2DB330C7, (q31_t)0x7790583D, (q31_t)0x2D843963, - (q31_t)0x77A24148, (q31_t)0x2D553AFB, (q31_t)0x77B417DF, - (q31_t)0x2D263595, (q31_t)0x77C5DC01, (q31_t)0x2CF72939, - (q31_t)0x77D78DAA, (q31_t)0x2CC815ED, (q31_t)0x77E92CD8, - (q31_t)0x2C98FBBA, (q31_t)0x77FAB988, (q31_t)0x2C69DAA6, - (q31_t)0x780C33B8, (q31_t)0x2C3AB2B9, (q31_t)0x781D9B64, - (q31_t)0x2C0B83F9, (q31_t)0x782EF08B, (q31_t)0x2BDC4E6F, - (q31_t)0x78403328, (q31_t)0x2BAD1221, (q31_t)0x7851633B, - (q31_t)0x2B7DCF17, (q31_t)0x786280BF, (q31_t)0x2B4E8558, - (q31_t)0x78738BB3, (q31_t)0x2B1F34EB, (q31_t)0x78848413, - (q31_t)0x2AEFDDD8, (q31_t)0x789569DE, (q31_t)0x2AC08025, - (q31_t)0x78A63D10, (q31_t)0x2A911BDB, (q31_t)0x78B6FDA8, - (q31_t)0x2A61B101, (q31_t)0x78C7ABA1, (q31_t)0x2A323F9D, - (q31_t)0x78D846FB, (q31_t)0x2A02C7B8, (q31_t)0x78E8CFB1, - (q31_t)0x29D34958, (q31_t)0x78F945C3, (q31_t)0x29A3C484, - (q31_t)0x7909A92C, (q31_t)0x29743945, (q31_t)0x7919F9EB, - (q31_t)0x2944A7A2, (q31_t)0x792A37FE, (q31_t)0x29150FA1, - (q31_t)0x793A6360, (q31_t)0x28E5714A, (q31_t)0x794A7C11, - (q31_t)0x28B5CCA5, (q31_t)0x795A820E, (q31_t)0x288621B9, - (q31_t)0x796A7554, (q31_t)0x2856708C, (q31_t)0x797A55E0, - (q31_t)0x2826B928, (q31_t)0x798A23B1, (q31_t)0x27F6FB92, - (q31_t)0x7999DEC3, (q31_t)0x27C737D2, (q31_t)0x79A98715, - (q31_t)0x27976DF1, (q31_t)0x79B91CA4, (q31_t)0x27679DF4, - (q31_t)0x79C89F6D, (q31_t)0x2737C7E3, (q31_t)0x79D80F6F, - (q31_t)0x2707EBC6, (q31_t)0x79E76CA6, (q31_t)0x26D809A5, - (q31_t)0x79F6B711, (q31_t)0x26A82185, (q31_t)0x7A05EEAD, - (q31_t)0x26783370, (q31_t)0x7A151377, (q31_t)0x26483F6C, - (q31_t)0x7A24256E, (q31_t)0x26184581, (q31_t)0x7A33248F, - (q31_t)0x25E845B5, (q31_t)0x7A4210D8, (q31_t)0x25B84012, - (q31_t)0x7A50EA46, (q31_t)0x2588349D, (q31_t)0x7A5FB0D8, - (q31_t)0x2558235E, (q31_t)0x7A6E648A, (q31_t)0x25280C5D, - (q31_t)0x7A7D055B, (q31_t)0x24F7EFA1, (q31_t)0x7A8B9348, - (q31_t)0x24C7CD32, (q31_t)0x7A9A0E4F, (q31_t)0x2497A517, - (q31_t)0x7AA8766E, (q31_t)0x24677757, (q31_t)0x7AB6CBA3, - (q31_t)0x243743FA, (q31_t)0x7AC50DEB, (q31_t)0x24070B07, - (q31_t)0x7AD33D45, (q31_t)0x23D6CC86, (q31_t)0x7AE159AE, - (q31_t)0x23A6887E, (q31_t)0x7AEF6323, (q31_t)0x23763EF7, - (q31_t)0x7AFD59A3, (q31_t)0x2345EFF7, (q31_t)0x7B0B3D2C, - (q31_t)0x23159B87, (q31_t)0x7B190DBB, (q31_t)0x22E541AE, - (q31_t)0x7B26CB4F, (q31_t)0x22B4E274, (q31_t)0x7B3475E4, - (q31_t)0x22847DDF, (q31_t)0x7B420D7A, (q31_t)0x225413F8, - (q31_t)0x7B4F920E, (q31_t)0x2223A4C5, (q31_t)0x7B5D039D, - (q31_t)0x21F3304E, (q31_t)0x7B6A6227, (q31_t)0x21C2B69C, - (q31_t)0x7B77ADA8, (q31_t)0x219237B4, (q31_t)0x7B84E61E, - (q31_t)0x2161B39F, (q31_t)0x7B920B89, (q31_t)0x21312A65, - (q31_t)0x7B9F1DE5, (q31_t)0x21009C0B, (q31_t)0x7BAC1D31, - (q31_t)0x20D0089B, (q31_t)0x7BB9096A, (q31_t)0x209F701C, - (q31_t)0x7BC5E28F, (q31_t)0x206ED295, (q31_t)0x7BD2A89E, - (q31_t)0x203E300D, (q31_t)0x7BDF5B94, (q31_t)0x200D888C, - (q31_t)0x7BEBFB70, (q31_t)0x1FDCDC1A, (q31_t)0x7BF88830, - (q31_t)0x1FAC2ABF, (q31_t)0x7C0501D1, (q31_t)0x1F7B7480, - (q31_t)0x7C116853, (q31_t)0x1F4AB967, (q31_t)0x7C1DBBB2, - (q31_t)0x1F19F97B, (q31_t)0x7C29FBEE, (q31_t)0x1EE934C2, - (q31_t)0x7C362904, (q31_t)0x1EB86B46, (q31_t)0x7C4242F2, - (q31_t)0x1E879D0C, (q31_t)0x7C4E49B6, (q31_t)0x1E56CA1E, - (q31_t)0x7C5A3D4F, (q31_t)0x1E25F281, (q31_t)0x7C661DBB, - (q31_t)0x1DF5163F, (q31_t)0x7C71EAF8, (q31_t)0x1DC4355D, - (q31_t)0x7C7DA504, (q31_t)0x1D934FE5, (q31_t)0x7C894BDD, - (q31_t)0x1D6265DD, (q31_t)0x7C94DF82, (q31_t)0x1D31774D, - (q31_t)0x7CA05FF1, (q31_t)0x1D00843C, (q31_t)0x7CABCD27, - (q31_t)0x1CCF8CB3, (q31_t)0x7CB72724, (q31_t)0x1C9E90B8, - (q31_t)0x7CC26DE5, (q31_t)0x1C6D9053, (q31_t)0x7CCDA168, - (q31_t)0x1C3C8B8C, (q31_t)0x7CD8C1AD, (q31_t)0x1C0B826A, - (q31_t)0x7CE3CEB1, (q31_t)0x1BDA74F5, (q31_t)0x7CEEC873, - (q31_t)0x1BA96334, (q31_t)0x7CF9AEF0, (q31_t)0x1B784D30, - (q31_t)0x7D048228, (q31_t)0x1B4732EF, (q31_t)0x7D0F4218, - (q31_t)0x1B161479, (q31_t)0x7D19EEBE, (q31_t)0x1AE4F1D6, - (q31_t)0x7D24881A, (q31_t)0x1AB3CB0C, (q31_t)0x7D2F0E2A, - (q31_t)0x1A82A025, (q31_t)0x7D3980EC, (q31_t)0x1A517127, - (q31_t)0x7D43E05E, (q31_t)0x1A203E1B, (q31_t)0x7D4E2C7E, - (q31_t)0x19EF0706, (q31_t)0x7D58654C, (q31_t)0x19BDCBF2, - (q31_t)0x7D628AC5, (q31_t)0x198C8CE6, (q31_t)0x7D6C9CE9, - (q31_t)0x195B49E9, (q31_t)0x7D769BB5, (q31_t)0x192A0303, - (q31_t)0x7D808727, (q31_t)0x18F8B83C, (q31_t)0x7D8A5F3F, - (q31_t)0x18C7699B, (q31_t)0x7D9423FB, (q31_t)0x18961727, - (q31_t)0x7D9DD55A, (q31_t)0x1864C0E9, (q31_t)0x7DA77359, - (q31_t)0x183366E8, (q31_t)0x7DB0FDF7, (q31_t)0x1802092C, - (q31_t)0x7DBA7534, (q31_t)0x17D0A7BB, (q31_t)0x7DC3D90D, - (q31_t)0x179F429F, (q31_t)0x7DCD2981, (q31_t)0x176DD9DE, - (q31_t)0x7DD6668E, (q31_t)0x173C6D80, (q31_t)0x7DDF9034, - (q31_t)0x170AFD8D, (q31_t)0x7DE8A670, (q31_t)0x16D98A0C, - (q31_t)0x7DF1A942, (q31_t)0x16A81305, (q31_t)0x7DFA98A7, - (q31_t)0x1676987F, (q31_t)0x7E03749F, (q31_t)0x16451A83, - (q31_t)0x7E0C3D29, (q31_t)0x16139917, (q31_t)0x7E14F242, - (q31_t)0x15E21444, (q31_t)0x7E1D93E9, (q31_t)0x15B08C11, - (q31_t)0x7E26221E, (q31_t)0x157F0086, (q31_t)0x7E2E9CDF, - (q31_t)0x154D71AA, (q31_t)0x7E37042A, (q31_t)0x151BDF85, - (q31_t)0x7E3F57FE, (q31_t)0x14EA4A1F, (q31_t)0x7E47985B, - (q31_t)0x14B8B17F, (q31_t)0x7E4FC53E, (q31_t)0x148715AD, - (q31_t)0x7E57DEA6, (q31_t)0x145576B1, (q31_t)0x7E5FE493, - (q31_t)0x1423D492, (q31_t)0x7E67D702, (q31_t)0x13F22F57, - (q31_t)0x7E6FB5F3, (q31_t)0x13C0870A, (q31_t)0x7E778165, - (q31_t)0x138EDBB0, (q31_t)0x7E7F3956, (q31_t)0x135D2D53, - (q31_t)0x7E86DDC5, (q31_t)0x132B7BF9, (q31_t)0x7E8E6EB1, - (q31_t)0x12F9C7AA, (q31_t)0x7E95EC19, (q31_t)0x12C8106E, - (q31_t)0x7E9D55FC, (q31_t)0x1296564D, (q31_t)0x7EA4AC58, - (q31_t)0x1264994E, (q31_t)0x7EABEF2C, (q31_t)0x1232D978, - (q31_t)0x7EB31E77, (q31_t)0x120116D4, (q31_t)0x7EBA3A39, - (q31_t)0x11CF516A, (q31_t)0x7EC1426F, (q31_t)0x119D8940, - (q31_t)0x7EC8371A, (q31_t)0x116BBE5F, (q31_t)0x7ECF1837, - (q31_t)0x1139F0CE, (q31_t)0x7ED5E5C6, (q31_t)0x11082096, - (q31_t)0x7EDC9FC6, (q31_t)0x10D64DBC, (q31_t)0x7EE34635, - (q31_t)0x10A4784A, (q31_t)0x7EE9D913, (q31_t)0x1072A047, - (q31_t)0x7EF0585F, (q31_t)0x1040C5BB, (q31_t)0x7EF6C418, - (q31_t)0x100EE8AD, (q31_t)0x7EFD1C3C, (q31_t)0x0FDD0925, - (q31_t)0x7F0360CB, (q31_t)0x0FAB272B, (q31_t)0x7F0991C3, - (q31_t)0x0F7942C6, (q31_t)0x7F0FAF24, (q31_t)0x0F475BFE, - (q31_t)0x7F15B8EE, (q31_t)0x0F1572DC, (q31_t)0x7F1BAF1E, - (q31_t)0x0EE38765, (q31_t)0x7F2191B4, (q31_t)0x0EB199A3, - (q31_t)0x7F2760AF, (q31_t)0x0E7FA99D, (q31_t)0x7F2D1C0E, - (q31_t)0x0E4DB75B, (q31_t)0x7F32C3D0, (q31_t)0x0E1BC2E3, - (q31_t)0x7F3857F5, (q31_t)0x0DE9CC3F, (q31_t)0x7F3DD87C, - (q31_t)0x0DB7D376, (q31_t)0x7F434563, (q31_t)0x0D85D88F, - (q31_t)0x7F489EAA, (q31_t)0x0D53DB92, (q31_t)0x7F4DE450, - (q31_t)0x0D21DC87, (q31_t)0x7F531654, (q31_t)0x0CEFDB75, - (q31_t)0x7F5834B6, (q31_t)0x0CBDD865, (q31_t)0x7F5D3F75, - (q31_t)0x0C8BD35E, (q31_t)0x7F62368F, (q31_t)0x0C59CC67, - (q31_t)0x7F671A04, (q31_t)0x0C27C389, (q31_t)0x7F6BE9D4, - (q31_t)0x0BF5B8CB, (q31_t)0x7F70A5FD, (q31_t)0x0BC3AC35, - (q31_t)0x7F754E7F, (q31_t)0x0B919DCE, (q31_t)0x7F79E35A, - (q31_t)0x0B5F8D9F, (q31_t)0x7F7E648B, (q31_t)0x0B2D7BAE, - (q31_t)0x7F82D214, (q31_t)0x0AFB6805, (q31_t)0x7F872BF3, - (q31_t)0x0AC952AA, (q31_t)0x7F8B7226, (q31_t)0x0A973BA5, - (q31_t)0x7F8FA4AF, (q31_t)0x0A6522FE, (q31_t)0x7F93C38C, - (q31_t)0x0A3308BC, (q31_t)0x7F97CEBC, (q31_t)0x0A00ECE8, - (q31_t)0x7F9BC63F, (q31_t)0x09CECF89, (q31_t)0x7F9FAA15, - (q31_t)0x099CB0A7, (q31_t)0x7FA37A3C, (q31_t)0x096A9049, - (q31_t)0x7FA736B4, (q31_t)0x09386E77, (q31_t)0x7FAADF7C, - (q31_t)0x09064B3A, (q31_t)0x7FAE7494, (q31_t)0x08D42698, - (q31_t)0x7FB1F5FC, (q31_t)0x08A2009A, (q31_t)0x7FB563B2, - (q31_t)0x086FD947, (q31_t)0x7FB8BDB7, (q31_t)0x083DB0A7, - (q31_t)0x7FBC040A, (q31_t)0x080B86C1, (q31_t)0x7FBF36A9, - (q31_t)0x07D95B9E, (q31_t)0x7FC25596, (q31_t)0x07A72F45, - (q31_t)0x7FC560CF, (q31_t)0x077501BE, (q31_t)0x7FC85853, - (q31_t)0x0742D310, (q31_t)0x7FCB3C23, (q31_t)0x0710A344, - (q31_t)0x7FCE0C3E, (q31_t)0x06DE7261, (q31_t)0x7FD0C8A3, - (q31_t)0x06AC406F, (q31_t)0x7FD37152, (q31_t)0x067A0D75, - (q31_t)0x7FD6064B, (q31_t)0x0647D97C, (q31_t)0x7FD8878D, - (q31_t)0x0615A48A, (q31_t)0x7FDAF518, (q31_t)0x05E36EA9, - (q31_t)0x7FDD4EEC, (q31_t)0x05B137DF, (q31_t)0x7FDF9508, - (q31_t)0x057F0034, (q31_t)0x7FE1C76B, (q31_t)0x054CC7B0, - (q31_t)0x7FE3E616, (q31_t)0x051A8E5C, (q31_t)0x7FE5F108, - (q31_t)0x04E8543D, (q31_t)0x7FE7E840, (q31_t)0x04B6195D, - (q31_t)0x7FE9CBC0, (q31_t)0x0483DDC3, (q31_t)0x7FEB9B85, - (q31_t)0x0451A176, (q31_t)0x7FED5790, (q31_t)0x041F647F, - (q31_t)0x7FEEFFE1, (q31_t)0x03ED26E6, (q31_t)0x7FF09477, - (q31_t)0x03BAE8B1, (q31_t)0x7FF21553, (q31_t)0x0388A9E9, - (q31_t)0x7FF38273, (q31_t)0x03566A96, (q31_t)0x7FF4DBD8, - (q31_t)0x03242ABF, (q31_t)0x7FF62182, (q31_t)0x02F1EA6B, - (q31_t)0x7FF7536F, (q31_t)0x02BFA9A4, (q31_t)0x7FF871A1, - (q31_t)0x028D6870, (q31_t)0x7FF97C17, (q31_t)0x025B26D7, - (q31_t)0x7FFA72D1, (q31_t)0x0228E4E1, (q31_t)0x7FFB55CE, - (q31_t)0x01F6A296, (q31_t)0x7FFC250F, (q31_t)0x01C45FFE, - (q31_t)0x7FFCE093, (q31_t)0x01921D1F, (q31_t)0x7FFD885A, - (q31_t)0x015FDA03, (q31_t)0x7FFE1C64, (q31_t)0x012D96B0, - (q31_t)0x7FFE9CB2, (q31_t)0x00FB532F, (q31_t)0x7FFF0942, - (q31_t)0x00C90F88, (q31_t)0x7FFF6216, (q31_t)0x0096CBC1, - (q31_t)0x7FFFA72C, (q31_t)0x006487E3, (q31_t)0x7FFFD885, - (q31_t)0x003243F5, (q31_t)0x7FFFF621, (q31_t)0x00000000, - (q31_t)0x7FFFFFFF, (q31_t)0xFFCDBC0A, (q31_t)0x7FFFF621, - (q31_t)0xFF9B781D, (q31_t)0x7FFFD885, (q31_t)0xFF69343E, - (q31_t)0x7FFFA72C, (q31_t)0xFF36F078, (q31_t)0x7FFF6216, - (q31_t)0xFF04ACD0, (q31_t)0x7FFF0942, (q31_t)0xFED2694F, - (q31_t)0x7FFE9CB2, (q31_t)0xFEA025FC, (q31_t)0x7FFE1C64, - (q31_t)0xFE6DE2E0, (q31_t)0x7FFD885A, (q31_t)0xFE3BA001, - (q31_t)0x7FFCE093, (q31_t)0xFE095D69, (q31_t)0x7FFC250F, - (q31_t)0xFDD71B1E, (q31_t)0x7FFB55CE, (q31_t)0xFDA4D928, - (q31_t)0x7FFA72D1, (q31_t)0xFD72978F, (q31_t)0x7FF97C17, - (q31_t)0xFD40565B, (q31_t)0x7FF871A1, (q31_t)0xFD0E1594, - (q31_t)0x7FF7536F, (q31_t)0xFCDBD541, (q31_t)0x7FF62182, - (q31_t)0xFCA99569, (q31_t)0x7FF4DBD8, (q31_t)0xFC775616, - (q31_t)0x7FF38273, (q31_t)0xFC45174E, (q31_t)0x7FF21553, - (q31_t)0xFC12D919, (q31_t)0x7FF09477, (q31_t)0xFBE09B80, - (q31_t)0x7FEEFFE1, (q31_t)0xFBAE5E89, (q31_t)0x7FED5790, - (q31_t)0xFB7C223C, (q31_t)0x7FEB9B85, (q31_t)0xFB49E6A2, - (q31_t)0x7FE9CBC0, (q31_t)0xFB17ABC2, (q31_t)0x7FE7E840, - (q31_t)0xFAE571A4, (q31_t)0x7FE5F108, (q31_t)0xFAB3384F, - (q31_t)0x7FE3E616, (q31_t)0xFA80FFCB, (q31_t)0x7FE1C76B, - (q31_t)0xFA4EC820, (q31_t)0x7FDF9508, (q31_t)0xFA1C9156, - (q31_t)0x7FDD4EEC, (q31_t)0xF9EA5B75, (q31_t)0x7FDAF518, - (q31_t)0xF9B82683, (q31_t)0x7FD8878D, (q31_t)0xF985F28A, - (q31_t)0x7FD6064B, (q31_t)0xF953BF90, (q31_t)0x7FD37152, - (q31_t)0xF9218D9E, (q31_t)0x7FD0C8A3, (q31_t)0xF8EF5CBB, - (q31_t)0x7FCE0C3E, (q31_t)0xF8BD2CEF, (q31_t)0x7FCB3C23, - (q31_t)0xF88AFE41, (q31_t)0x7FC85853, (q31_t)0xF858D0BA, - (q31_t)0x7FC560CF, (q31_t)0xF826A461, (q31_t)0x7FC25596, - (q31_t)0xF7F4793E, (q31_t)0x7FBF36A9, (q31_t)0xF7C24F58, - (q31_t)0x7FBC040A, (q31_t)0xF79026B8, (q31_t)0x7FB8BDB7, - (q31_t)0xF75DFF65, (q31_t)0x7FB563B2, (q31_t)0xF72BD967, - (q31_t)0x7FB1F5FC, (q31_t)0xF6F9B4C5, (q31_t)0x7FAE7494, - (q31_t)0xF6C79188, (q31_t)0x7FAADF7C, (q31_t)0xF6956FB6, - (q31_t)0x7FA736B4, (q31_t)0xF6634F58, (q31_t)0x7FA37A3C, - (q31_t)0xF6313076, (q31_t)0x7F9FAA15, (q31_t)0xF5FF1317, - (q31_t)0x7F9BC63F, (q31_t)0xF5CCF743, (q31_t)0x7F97CEBC, - (q31_t)0xF59ADD01, (q31_t)0x7F93C38C, (q31_t)0xF568C45A, - (q31_t)0x7F8FA4AF, (q31_t)0xF536AD55, (q31_t)0x7F8B7226, - (q31_t)0xF50497FA, (q31_t)0x7F872BF3, (q31_t)0xF4D28451, - (q31_t)0x7F82D214, (q31_t)0xF4A07260, (q31_t)0x7F7E648B, - (q31_t)0xF46E6231, (q31_t)0x7F79E35A, (q31_t)0xF43C53CA, - (q31_t)0x7F754E7F, (q31_t)0xF40A4734, (q31_t)0x7F70A5FD, - (q31_t)0xF3D83C76, (q31_t)0x7F6BE9D4, (q31_t)0xF3A63398, - (q31_t)0x7F671A04, (q31_t)0xF3742CA1, (q31_t)0x7F62368F, - (q31_t)0xF342279A, (q31_t)0x7F5D3F75, (q31_t)0xF310248A, - (q31_t)0x7F5834B6, (q31_t)0xF2DE2378, (q31_t)0x7F531654, - (q31_t)0xF2AC246D, (q31_t)0x7F4DE450, (q31_t)0xF27A2770, - (q31_t)0x7F489EAA, (q31_t)0xF2482C89, (q31_t)0x7F434563, - (q31_t)0xF21633C0, (q31_t)0x7F3DD87C, (q31_t)0xF1E43D1C, - (q31_t)0x7F3857F5, (q31_t)0xF1B248A5, (q31_t)0x7F32C3D0, - (q31_t)0xF1805662, (q31_t)0x7F2D1C0E, (q31_t)0xF14E665C, - (q31_t)0x7F2760AF, (q31_t)0xF11C789A, (q31_t)0x7F2191B4, - (q31_t)0xF0EA8D23, (q31_t)0x7F1BAF1E, (q31_t)0xF0B8A401, - (q31_t)0x7F15B8EE, (q31_t)0xF086BD39, (q31_t)0x7F0FAF24, - (q31_t)0xF054D8D4, (q31_t)0x7F0991C3, (q31_t)0xF022F6DA, - (q31_t)0x7F0360CB, (q31_t)0xEFF11752, (q31_t)0x7EFD1C3C, - (q31_t)0xEFBF3A44, (q31_t)0x7EF6C418, (q31_t)0xEF8D5FB8, - (q31_t)0x7EF0585F, (q31_t)0xEF5B87B5, (q31_t)0x7EE9D913, - (q31_t)0xEF29B243, (q31_t)0x7EE34635, (q31_t)0xEEF7DF6A, - (q31_t)0x7EDC9FC6, (q31_t)0xEEC60F31, (q31_t)0x7ED5E5C6, - (q31_t)0xEE9441A0, (q31_t)0x7ECF1837, (q31_t)0xEE6276BF, - (q31_t)0x7EC8371A, (q31_t)0xEE30AE95, (q31_t)0x7EC1426F, - (q31_t)0xEDFEE92B, (q31_t)0x7EBA3A39, (q31_t)0xEDCD2687, - (q31_t)0x7EB31E77, (q31_t)0xED9B66B2, (q31_t)0x7EABEF2C, - (q31_t)0xED69A9B2, (q31_t)0x7EA4AC58, (q31_t)0xED37EF91, - (q31_t)0x7E9D55FC, (q31_t)0xED063855, (q31_t)0x7E95EC19, - (q31_t)0xECD48406, (q31_t)0x7E8E6EB1, (q31_t)0xECA2D2AC, - (q31_t)0x7E86DDC5, (q31_t)0xEC71244F, (q31_t)0x7E7F3956, - (q31_t)0xEC3F78F5, (q31_t)0x7E778165, (q31_t)0xEC0DD0A8, - (q31_t)0x7E6FB5F3, (q31_t)0xEBDC2B6D, (q31_t)0x7E67D702, - (q31_t)0xEBAA894E, (q31_t)0x7E5FE493, (q31_t)0xEB78EA52, - (q31_t)0x7E57DEA6, (q31_t)0xEB474E80, (q31_t)0x7E4FC53E, - (q31_t)0xEB15B5E0, (q31_t)0x7E47985B, (q31_t)0xEAE4207A, - (q31_t)0x7E3F57FE, (q31_t)0xEAB28E55, (q31_t)0x7E37042A, - (q31_t)0xEA80FF79, (q31_t)0x7E2E9CDF, (q31_t)0xEA4F73EE, - (q31_t)0x7E26221E, (q31_t)0xEA1DEBBB, (q31_t)0x7E1D93E9, - (q31_t)0xE9EC66E8, (q31_t)0x7E14F242, (q31_t)0xE9BAE57C, - (q31_t)0x7E0C3D29, (q31_t)0xE9896780, (q31_t)0x7E03749F, - (q31_t)0xE957ECFB, (q31_t)0x7DFA98A7, (q31_t)0xE92675F4, - (q31_t)0x7DF1A942, (q31_t)0xE8F50273, (q31_t)0x7DE8A670, - (q31_t)0xE8C3927F, (q31_t)0x7DDF9034, (q31_t)0xE8922621, - (q31_t)0x7DD6668E, (q31_t)0xE860BD60, (q31_t)0x7DCD2981, - (q31_t)0xE82F5844, (q31_t)0x7DC3D90D, (q31_t)0xE7FDF6D3, - (q31_t)0x7DBA7534, (q31_t)0xE7CC9917, (q31_t)0x7DB0FDF7, - (q31_t)0xE79B3F16, (q31_t)0x7DA77359, (q31_t)0xE769E8D8, - (q31_t)0x7D9DD55A, (q31_t)0xE7389664, (q31_t)0x7D9423FB, - (q31_t)0xE70747C3, (q31_t)0x7D8A5F3F, (q31_t)0xE6D5FCFC, - (q31_t)0x7D808727, (q31_t)0xE6A4B616, (q31_t)0x7D769BB5, - (q31_t)0xE6737319, (q31_t)0x7D6C9CE9, (q31_t)0xE642340D, - (q31_t)0x7D628AC5, (q31_t)0xE610F8F9, (q31_t)0x7D58654C, - (q31_t)0xE5DFC1E4, (q31_t)0x7D4E2C7E, (q31_t)0xE5AE8ED8, - (q31_t)0x7D43E05E, (q31_t)0xE57D5FDA, (q31_t)0x7D3980EC, - (q31_t)0xE54C34F3, (q31_t)0x7D2F0E2A, (q31_t)0xE51B0E2A, - (q31_t)0x7D24881A, (q31_t)0xE4E9EB86, (q31_t)0x7D19EEBE, - (q31_t)0xE4B8CD10, (q31_t)0x7D0F4218, (q31_t)0xE487B2CF, - (q31_t)0x7D048228, (q31_t)0xE4569CCB, (q31_t)0x7CF9AEF0, - (q31_t)0xE4258B0A, (q31_t)0x7CEEC873, (q31_t)0xE3F47D95, - (q31_t)0x7CE3CEB1, (q31_t)0xE3C37473, (q31_t)0x7CD8C1AD, - (q31_t)0xE3926FAC, (q31_t)0x7CCDA168, (q31_t)0xE3616F47, - (q31_t)0x7CC26DE5, (q31_t)0xE330734C, (q31_t)0x7CB72724, - (q31_t)0xE2FF7BC3, (q31_t)0x7CABCD27, (q31_t)0xE2CE88B2, - (q31_t)0x7CA05FF1, (q31_t)0xE29D9A22, (q31_t)0x7C94DF82, - (q31_t)0xE26CB01A, (q31_t)0x7C894BDD, (q31_t)0xE23BCAA2, - (q31_t)0x7C7DA504, (q31_t)0xE20AE9C1, (q31_t)0x7C71EAF8, - (q31_t)0xE1DA0D7E, (q31_t)0x7C661DBB, (q31_t)0xE1A935E1, - (q31_t)0x7C5A3D4F, (q31_t)0xE17862F3, (q31_t)0x7C4E49B6, - (q31_t)0xE14794B9, (q31_t)0x7C4242F2, (q31_t)0xE116CB3D, - (q31_t)0x7C362904, (q31_t)0xE0E60684, (q31_t)0x7C29FBEE, - (q31_t)0xE0B54698, (q31_t)0x7C1DBBB2, (q31_t)0xE0848B7F, - (q31_t)0x7C116853, (q31_t)0xE053D541, (q31_t)0x7C0501D1, - (q31_t)0xE02323E5, (q31_t)0x7BF88830, (q31_t)0xDFF27773, - (q31_t)0x7BEBFB70, (q31_t)0xDFC1CFF2, (q31_t)0x7BDF5B94, - (q31_t)0xDF912D6A, (q31_t)0x7BD2A89E, (q31_t)0xDF608FE3, - (q31_t)0x7BC5E28F, (q31_t)0xDF2FF764, (q31_t)0x7BB9096A, - (q31_t)0xDEFF63F4, (q31_t)0x7BAC1D31, (q31_t)0xDECED59B, - (q31_t)0x7B9F1DE5, (q31_t)0xDE9E4C60, (q31_t)0x7B920B89, - (q31_t)0xDE6DC84B, (q31_t)0x7B84E61E, (q31_t)0xDE3D4963, - (q31_t)0x7B77ADA8, (q31_t)0xDE0CCFB1, (q31_t)0x7B6A6227, - (q31_t)0xDDDC5B3A, (q31_t)0x7B5D039D, (q31_t)0xDDABEC07, - (q31_t)0x7B4F920E, (q31_t)0xDD7B8220, (q31_t)0x7B420D7A, - (q31_t)0xDD4B1D8B, (q31_t)0x7B3475E4, (q31_t)0xDD1ABE51, - (q31_t)0x7B26CB4F, (q31_t)0xDCEA6478, (q31_t)0x7B190DBB, - (q31_t)0xDCBA1008, (q31_t)0x7B0B3D2C, (q31_t)0xDC89C108, - (q31_t)0x7AFD59A3, (q31_t)0xDC597781, (q31_t)0x7AEF6323, - (q31_t)0xDC293379, (q31_t)0x7AE159AE, (q31_t)0xDBF8F4F8, - (q31_t)0x7AD33D45, (q31_t)0xDBC8BC05, (q31_t)0x7AC50DEB, - (q31_t)0xDB9888A8, (q31_t)0x7AB6CBA3, (q31_t)0xDB685AE8, - (q31_t)0x7AA8766E, (q31_t)0xDB3832CD, (q31_t)0x7A9A0E4F, - (q31_t)0xDB08105E, (q31_t)0x7A8B9348, (q31_t)0xDAD7F3A2, - (q31_t)0x7A7D055B, (q31_t)0xDAA7DCA1, (q31_t)0x7A6E648A, - (q31_t)0xDA77CB62, (q31_t)0x7A5FB0D8, (q31_t)0xDA47BFED, - (q31_t)0x7A50EA46, (q31_t)0xDA17BA4A, (q31_t)0x7A4210D8, - (q31_t)0xD9E7BA7E, (q31_t)0x7A33248F, (q31_t)0xD9B7C093, - (q31_t)0x7A24256E, (q31_t)0xD987CC8F, (q31_t)0x7A151377, - (q31_t)0xD957DE7A, (q31_t)0x7A05EEAD, (q31_t)0xD927F65B, - (q31_t)0x79F6B711, (q31_t)0xD8F81439, (q31_t)0x79E76CA6, - (q31_t)0xD8C8381C, (q31_t)0x79D80F6F, (q31_t)0xD898620C, - (q31_t)0x79C89F6D, (q31_t)0xD868920F, (q31_t)0x79B91CA4, - (q31_t)0xD838C82D, (q31_t)0x79A98715, (q31_t)0xD809046D, - (q31_t)0x7999DEC3, (q31_t)0xD7D946D7, (q31_t)0x798A23B1, - (q31_t)0xD7A98F73, (q31_t)0x797A55E0, (q31_t)0xD779DE46, - (q31_t)0x796A7554, (q31_t)0xD74A335A, (q31_t)0x795A820E, - (q31_t)0xD71A8EB5, (q31_t)0x794A7C11, (q31_t)0xD6EAF05E, - (q31_t)0x793A6360, (q31_t)0xD6BB585D, (q31_t)0x792A37FE, - (q31_t)0xD68BC6BA, (q31_t)0x7919F9EB, (q31_t)0xD65C3B7B, - (q31_t)0x7909A92C, (q31_t)0xD62CB6A7, (q31_t)0x78F945C3, - (q31_t)0xD5FD3847, (q31_t)0x78E8CFB1, (q31_t)0xD5CDC062, - (q31_t)0x78D846FB, (q31_t)0xD59E4EFE, (q31_t)0x78C7ABA1, - (q31_t)0xD56EE424, (q31_t)0x78B6FDA8, (q31_t)0xD53F7FDA, - (q31_t)0x78A63D10, (q31_t)0xD5102227, (q31_t)0x789569DE, - (q31_t)0xD4E0CB14, (q31_t)0x78848413, (q31_t)0xD4B17AA7, - (q31_t)0x78738BB3, (q31_t)0xD48230E8, (q31_t)0x786280BF, - (q31_t)0xD452EDDE, (q31_t)0x7851633B, (q31_t)0xD423B190, - (q31_t)0x78403328, (q31_t)0xD3F47C06, (q31_t)0x782EF08B, - (q31_t)0xD3C54D46, (q31_t)0x781D9B64, (q31_t)0xD3962559, - (q31_t)0x780C33B8, (q31_t)0xD3670445, (q31_t)0x77FAB988, - (q31_t)0xD337EA12, (q31_t)0x77E92CD8, (q31_t)0xD308D6C6, - (q31_t)0x77D78DAA, (q31_t)0xD2D9CA6A, (q31_t)0x77C5DC01, - (q31_t)0xD2AAC504, (q31_t)0x77B417DF, (q31_t)0xD27BC69C, - (q31_t)0x77A24148, (q31_t)0xD24CCF38, (q31_t)0x7790583D, - (q31_t)0xD21DDEE1, (q31_t)0x777E5CC3, (q31_t)0xD1EEF59E, - (q31_t)0x776C4EDB, (q31_t)0xD1C01374, (q31_t)0x775A2E88, - (q31_t)0xD191386D, (q31_t)0x7747FBCE, (q31_t)0xD162648F, - (q31_t)0x7735B6AE, (q31_t)0xD13397E1, (q31_t)0x77235F2D, - (q31_t)0xD104D26B, (q31_t)0x7710F54B, (q31_t)0xD0D61433, - (q31_t)0x76FE790E, (q31_t)0xD0A75D42, (q31_t)0x76EBEA77, - (q31_t)0xD078AD9D, (q31_t)0x76D94988, (q31_t)0xD04A054D, - (q31_t)0x76C69646, (q31_t)0xD01B6459, (q31_t)0x76B3D0B3, - (q31_t)0xCFECCAC7, (q31_t)0x76A0F8D2, (q31_t)0xCFBE389F, - (q31_t)0x768E0EA5, (q31_t)0xCF8FADE8, (q31_t)0x767B1230, - (q31_t)0xCF612AAA, (q31_t)0x76680376, (q31_t)0xCF32AEEB, - (q31_t)0x7654E279, (q31_t)0xCF043AB2, (q31_t)0x7641AF3C, - (q31_t)0xCED5CE08, (q31_t)0x762E69C3, (q31_t)0xCEA768F2, - (q31_t)0x761B1211, (q31_t)0xCE790B78, (q31_t)0x7607A827, - (q31_t)0xCE4AB5A2, (q31_t)0x75F42C0A, (q31_t)0xCE1C6776, - (q31_t)0x75E09DBD, (q31_t)0xCDEE20FC, (q31_t)0x75CCFD42, - (q31_t)0xCDBFE23A, (q31_t)0x75B94A9C, (q31_t)0xCD91AB38, - (q31_t)0x75A585CF, (q31_t)0xCD637BFD, (q31_t)0x7591AEDD, - (q31_t)0xCD355490, (q31_t)0x757DC5CA, (q31_t)0xCD0734F8, - (q31_t)0x7569CA98, (q31_t)0xCCD91D3D, (q31_t)0x7555BD4B, - (q31_t)0xCCAB0D65, (q31_t)0x75419DE6, (q31_t)0xCC7D0577, - (q31_t)0x752D6C6C, (q31_t)0xCC4F057B, (q31_t)0x751928E0, - (q31_t)0xCC210D78, (q31_t)0x7504D345, (q31_t)0xCBF31D75, - (q31_t)0x74F06B9E, (q31_t)0xCBC53578, (q31_t)0x74DBF1EF, - (q31_t)0xCB975589, (q31_t)0x74C7663A, (q31_t)0xCB697DB0, - (q31_t)0x74B2C883, (q31_t)0xCB3BADF2, (q31_t)0x749E18CD, - (q31_t)0xCB0DE658, (q31_t)0x7489571B, (q31_t)0xCAE026E8, - (q31_t)0x74748371, (q31_t)0xCAB26FA9, (q31_t)0x745F9DD1, - (q31_t)0xCA84C0A2, (q31_t)0x744AA63E, (q31_t)0xCA5719DB, - (q31_t)0x74359CBD, (q31_t)0xCA297B5A, (q31_t)0x74208150, - (q31_t)0xC9FBE527, (q31_t)0x740B53FA, (q31_t)0xC9CE5748, - (q31_t)0x73F614C0, (q31_t)0xC9A0D1C4, (q31_t)0x73E0C3A3, - (q31_t)0xC97354A3, (q31_t)0x73CB60A7, (q31_t)0xC945DFEC, - (q31_t)0x73B5EBD0, (q31_t)0xC91873A5, (q31_t)0x73A06522, - (q31_t)0xC8EB0FD6, (q31_t)0x738ACC9E, (q31_t)0xC8BDB485, - (q31_t)0x73752249, (q31_t)0xC89061BA, (q31_t)0x735F6626, - (q31_t)0xC863177B, (q31_t)0x73499838, (q31_t)0xC835D5D0, - (q31_t)0x7333B883, (q31_t)0xC8089CBF, (q31_t)0x731DC709, - (q31_t)0xC7DB6C50, (q31_t)0x7307C3D0, (q31_t)0xC7AE4489, - (q31_t)0x72F1AED8, (q31_t)0xC7812571, (q31_t)0x72DB8828, - (q31_t)0xC7540F10, (q31_t)0x72C54FC0, (q31_t)0xC727016C, - (q31_t)0x72AF05A6, (q31_t)0xC6F9FC8D, (q31_t)0x7298A9DC, - (q31_t)0xC6CD0079, (q31_t)0x72823C66, (q31_t)0xC6A00D36, - (q31_t)0x726BBD48, (q31_t)0xC67322CD, (q31_t)0x72552C84, - (q31_t)0xC6464144, (q31_t)0x723E8A1F, (q31_t)0xC61968A2, - (q31_t)0x7227D61C, (q31_t)0xC5EC98ED, (q31_t)0x7211107D, - (q31_t)0xC5BFD22E, (q31_t)0x71FA3948, (q31_t)0xC593146A, - (q31_t)0x71E3507F, (q31_t)0xC5665FA8, (q31_t)0x71CC5626, - (q31_t)0xC539B3F0, (q31_t)0x71B54A40, (q31_t)0xC50D1148, - (q31_t)0x719E2CD2, (q31_t)0xC4E077B8, (q31_t)0x7186FDDE, - (q31_t)0xC4B3E746, (q31_t)0x716FBD68, (q31_t)0xC4875FF8, - (q31_t)0x71586B73, (q31_t)0xC45AE1D7, (q31_t)0x71410804, - (q31_t)0xC42E6CE8, (q31_t)0x7129931E, (q31_t)0xC4020132, - (q31_t)0x71120CC5, (q31_t)0xC3D59EBD, (q31_t)0x70FA74FB, - (q31_t)0xC3A9458F, (q31_t)0x70E2CBC6, (q31_t)0xC37CF5B0, - (q31_t)0x70CB1127, (q31_t)0xC350AF25, (q31_t)0x70B34524, - (q31_t)0xC32471F6, (q31_t)0x709B67C0, (q31_t)0xC2F83E2A, - (q31_t)0x708378FE, (q31_t)0xC2CC13C7, (q31_t)0x706B78E3, - (q31_t)0xC29FF2D4, (q31_t)0x70536771, (q31_t)0xC273DB58, - (q31_t)0x703B44AC, (q31_t)0xC247CD5A, (q31_t)0x70231099, - (q31_t)0xC21BC8E0, (q31_t)0x700ACB3B, (q31_t)0xC1EFCDF2, - (q31_t)0x6FF27496, (q31_t)0xC1C3DC96, (q31_t)0x6FDA0CAD, - (q31_t)0xC197F4D3, (q31_t)0x6FC19385, (q31_t)0xC16C16B0, - (q31_t)0x6FA90920, (q31_t)0xC1404233, (q31_t)0x6F906D84, - (q31_t)0xC1147763, (q31_t)0x6F77C0B3, (q31_t)0xC0E8B648, - (q31_t)0x6F5F02B1, (q31_t)0xC0BCFEE7, (q31_t)0x6F463383, - (q31_t)0xC0915147, (q31_t)0x6F2D532C, (q31_t)0xC065AD70, - (q31_t)0x6F1461AF, (q31_t)0xC03A1368, (q31_t)0x6EFB5F12, - (q31_t)0xC00E8335, (q31_t)0x6EE24B57, (q31_t)0xBFE2FCDF, - (q31_t)0x6EC92682, (q31_t)0xBFB7806C, (q31_t)0x6EAFF098, - (q31_t)0xBF8C0DE2, (q31_t)0x6E96A99C, (q31_t)0xBF60A54A, - (q31_t)0x6E7D5193, (q31_t)0xBF3546A8, (q31_t)0x6E63E87F, - (q31_t)0xBF09F204, (q31_t)0x6E4A6E65, (q31_t)0xBEDEA765, - (q31_t)0x6E30E349, (q31_t)0xBEB366D1, (q31_t)0x6E17472F, - (q31_t)0xBE88304F, (q31_t)0x6DFD9A1B, (q31_t)0xBE5D03E5, - (q31_t)0x6DE3DC11, (q31_t)0xBE31E19B, (q31_t)0x6DCA0D14, - (q31_t)0xBE06C977, (q31_t)0x6DB02D29, (q31_t)0xBDDBBB7F, - (q31_t)0x6D963C54, (q31_t)0xBDB0B7BA, (q31_t)0x6D7C3A98, - (q31_t)0xBD85BE2F, (q31_t)0x6D6227FA, (q31_t)0xBD5ACEE5, - (q31_t)0x6D48047E, (q31_t)0xBD2FE9E1, (q31_t)0x6D2DD027, - (q31_t)0xBD050F2C, (q31_t)0x6D138AFA, (q31_t)0xBCDA3ECA, - (q31_t)0x6CF934FB, (q31_t)0xBCAF78C3, (q31_t)0x6CDECE2E, - (q31_t)0xBC84BD1E, (q31_t)0x6CC45697, (q31_t)0xBC5A0BE1, - (q31_t)0x6CA9CE3A, (q31_t)0xBC2F6513, (q31_t)0x6C8F351C, - (q31_t)0xBC04C8BA, (q31_t)0x6C748B3F, (q31_t)0xBBDA36DC, - (q31_t)0x6C59D0A9, (q31_t)0xBBAFAF81, (q31_t)0x6C3F055D, - (q31_t)0xBB8532AF, (q31_t)0x6C242960, (q31_t)0xBB5AC06C, - (q31_t)0x6C093CB6, (q31_t)0xBB3058C0, (q31_t)0x6BEE3F62, - (q31_t)0xBB05FBB0, (q31_t)0x6BD3316A, (q31_t)0xBADBA943, - (q31_t)0x6BB812D0, (q31_t)0xBAB1617F, (q31_t)0x6B9CE39B, - (q31_t)0xBA87246C, (q31_t)0x6B81A3CD, (q31_t)0xBA5CF210, - (q31_t)0x6B66536A, (q31_t)0xBA32CA70, (q31_t)0x6B4AF278, - (q31_t)0xBA08AD94, (q31_t)0x6B2F80FA, (q31_t)0xB9DE9B83, - (q31_t)0x6B13FEF5, (q31_t)0xB9B49442, (q31_t)0x6AF86C6C, - (q31_t)0xB98A97D8, (q31_t)0x6ADCC964, (q31_t)0xB960A64B, - (q31_t)0x6AC115E1, (q31_t)0xB936BFA3, (q31_t)0x6AA551E8, - (q31_t)0xB90CE3E6, (q31_t)0x6A897D7D, (q31_t)0xB8E31319, - (q31_t)0x6A6D98A4, (q31_t)0xB8B94D44, (q31_t)0x6A51A361, - (q31_t)0xB88F926C, (q31_t)0x6A359DB9, (q31_t)0xB865E299, - (q31_t)0x6A1987B0, (q31_t)0xB83C3DD1, (q31_t)0x69FD614A, - (q31_t)0xB812A419, (q31_t)0x69E12A8C, (q31_t)0xB7E9157A, - (q31_t)0x69C4E37A, (q31_t)0xB7BF91F8, (q31_t)0x69A88C18, - (q31_t)0xB796199B, (q31_t)0x698C246C, (q31_t)0xB76CAC68, - (q31_t)0x696FAC78, (q31_t)0xB7434A67, (q31_t)0x69532442, - (q31_t)0xB719F39D, (q31_t)0x69368BCE, (q31_t)0xB6F0A811, - (q31_t)0x6919E320, (q31_t)0xB6C767CA, (q31_t)0x68FD2A3D, - (q31_t)0xB69E32CD, (q31_t)0x68E06129, (q31_t)0xB6750921, - (q31_t)0x68C387E9, (q31_t)0xB64BEACC, (q31_t)0x68A69E81, - (q31_t)0xB622D7D5, (q31_t)0x6889A4F5, (q31_t)0xB5F9D042, - (q31_t)0x686C9B4B, (q31_t)0xB5D0D41A, (q31_t)0x684F8186, - (q31_t)0xB5A7E362, (q31_t)0x683257AA, (q31_t)0xB57EFE21, - (q31_t)0x68151DBE, (q31_t)0xB556245E, (q31_t)0x67F7D3C4, - (q31_t)0xB52D561E, (q31_t)0x67DA79C2, (q31_t)0xB5049368, - (q31_t)0x67BD0FBC, (q31_t)0xB4DBDC42, (q31_t)0x679F95B7, - (q31_t)0xB4B330B2, (q31_t)0x67820BB6, (q31_t)0xB48A90C0, - (q31_t)0x676471C0, (q31_t)0xB461FC70, (q31_t)0x6746C7D7, - (q31_t)0xB43973C9, (q31_t)0x67290E02, (q31_t)0xB410F6D2, - (q31_t)0x670B4443, (q31_t)0xB3E88591, (q31_t)0x66ED6AA1, - (q31_t)0xB3C0200C, (q31_t)0x66CF811F, (q31_t)0xB397C649, - (q31_t)0x66B187C3, (q31_t)0xB36F784E, (q31_t)0x66937E90, - (q31_t)0xB3473622, (q31_t)0x6675658C, (q31_t)0xB31EFFCB, - (q31_t)0x66573CBB, (q31_t)0xB2F6D54F, (q31_t)0x66390422, - (q31_t)0xB2CEB6B5, (q31_t)0x661ABBC5, (q31_t)0xB2A6A401, - (q31_t)0x65FC63A9, (q31_t)0xB27E9D3B, (q31_t)0x65DDFBD3, - (q31_t)0xB256A26A, (q31_t)0x65BF8447, (q31_t)0xB22EB392, - (q31_t)0x65A0FD0B, (q31_t)0xB206D0BA, (q31_t)0x65826622, - (q31_t)0xB1DEF9E8, (q31_t)0x6563BF92, (q31_t)0xB1B72F23, - (q31_t)0x6545095F, (q31_t)0xB18F7070, (q31_t)0x6526438E, - (q31_t)0xB167BDD6, (q31_t)0x65076E24, (q31_t)0xB140175B, - (q31_t)0x64E88926, (q31_t)0xB1187D05, (q31_t)0x64C99498, - (q31_t)0xB0F0EEDA, (q31_t)0x64AA907F, (q31_t)0xB0C96CDF, - (q31_t)0x648B7CDF, (q31_t)0xB0A1F71C, (q31_t)0x646C59BF, - (q31_t)0xB07A8D97, (q31_t)0x644D2722, (q31_t)0xB0533055, - (q31_t)0x642DE50D, (q31_t)0xB02BDF5C, (q31_t)0x640E9385, - (q31_t)0xB0049AB2, (q31_t)0x63EF328F, (q31_t)0xAFDD625F, - (q31_t)0x63CFC230, (q31_t)0xAFB63667, (q31_t)0x63B0426D, - (q31_t)0xAF8F16D0, (q31_t)0x6390B34A, (q31_t)0xAF6803A1, - (q31_t)0x637114CC, (q31_t)0xAF40FCE0, (q31_t)0x635166F8, - (q31_t)0xAF1A0293, (q31_t)0x6331A9D4, (q31_t)0xAEF314BF, - (q31_t)0x6311DD63, (q31_t)0xAECC336B, (q31_t)0x62F201AC, - (q31_t)0xAEA55E9D, (q31_t)0x62D216B2, (q31_t)0xAE7E965B, - (q31_t)0x62B21C7B, (q31_t)0xAE57DAAA, (q31_t)0x6292130C, - (q31_t)0xAE312B91, (q31_t)0x6271FA69, (q31_t)0xAE0A8916, - (q31_t)0x6251D297, (q31_t)0xADE3F33E, (q31_t)0x62319B9D, - (q31_t)0xADBD6A10, (q31_t)0x6211557D, (q31_t)0xAD96ED91, - (q31_t)0x61F1003E, (q31_t)0xAD707DC8, (q31_t)0x61D09BE5, - (q31_t)0xAD4A1ABA, (q31_t)0x61B02876, (q31_t)0xAD23C46D, - (q31_t)0x618FA5F6, (q31_t)0xACFD7AE8, (q31_t)0x616F146B, - (q31_t)0xACD73E30, (q31_t)0x614E73D9, (q31_t)0xACB10E4A, - (q31_t)0x612DC446, (q31_t)0xAC8AEB3E, (q31_t)0x610D05B7, - (q31_t)0xAC64D510, (q31_t)0x60EC3830, (q31_t)0xAC3ECBC7, - (q31_t)0x60CB5BB6, (q31_t)0xAC18CF68, (q31_t)0x60AA704F, - (q31_t)0xABF2DFFA, (q31_t)0x60897600, (q31_t)0xABCCFD82, - (q31_t)0x60686CCE, (q31_t)0xABA72806, (q31_t)0x604754BE, - (q31_t)0xAB815F8C, (q31_t)0x60262DD5, (q31_t)0xAB5BA41A, - (q31_t)0x6004F818, (q31_t)0xAB35F5B5, (q31_t)0x5FE3B38D, - (q31_t)0xAB105464, (q31_t)0x5FC26038, (q31_t)0xAAEAC02B, - (q31_t)0x5FA0FE1E, (q31_t)0xAAC53912, (q31_t)0x5F7F8D46, - (q31_t)0xAA9FBF1D, (q31_t)0x5F5E0DB3, (q31_t)0xAA7A5253, - (q31_t)0x5F3C7F6B, (q31_t)0xAA54F2B9, (q31_t)0x5F1AE273, - (q31_t)0xAA2FA055, (q31_t)0x5EF936D1, (q31_t)0xAA0A5B2D, - (q31_t)0x5ED77C89, (q31_t)0xA9E52347, (q31_t)0x5EB5B3A1, - (q31_t)0xA9BFF8A8, (q31_t)0x5E93DC1F, (q31_t)0xA99ADB56, - (q31_t)0x5E71F606, (q31_t)0xA975CB56, (q31_t)0x5E50015D, - (q31_t)0xA950C8AF, (q31_t)0x5E2DFE28, (q31_t)0xA92BD366, - (q31_t)0x5E0BEC6E, (q31_t)0xA906EB81, (q31_t)0x5DE9CC32, - (q31_t)0xA8E21106, (q31_t)0x5DC79D7C, (q31_t)0xA8BD43FA, - (q31_t)0x5DA5604E, (q31_t)0xA8988463, (q31_t)0x5D8314B0, - (q31_t)0xA873D246, (q31_t)0x5D60BAA6, (q31_t)0xA84F2DA9, - (q31_t)0x5D3E5236, (q31_t)0xA82A9693, (q31_t)0x5D1BDB65, - (q31_t)0xA8060D08, (q31_t)0x5CF95638, (q31_t)0xA7E1910E, - (q31_t)0x5CD6C2B4, (q31_t)0xA7BD22AB, (q31_t)0x5CB420DF, - (q31_t)0xA798C1E4, (q31_t)0x5C9170BF, (q31_t)0xA7746EC0, - (q31_t)0x5C6EB258, (q31_t)0xA7502943, (q31_t)0x5C4BE5B0, - (q31_t)0xA72BF173, (q31_t)0x5C290ACC, (q31_t)0xA707C756, - (q31_t)0x5C0621B2, (q31_t)0xA6E3AAF2, (q31_t)0x5BE32A67, - (q31_t)0xA6BF9C4B, (q31_t)0x5BC024F0, (q31_t)0xA69B9B68, - (q31_t)0x5B9D1153, (q31_t)0xA677A84E, (q31_t)0x5B79EF96, - (q31_t)0xA653C302, (q31_t)0x5B56BFBD, (q31_t)0xA62FEB8B, - (q31_t)0x5B3381CE, (q31_t)0xA60C21ED, (q31_t)0x5B1035CF, - (q31_t)0xA5E8662F, (q31_t)0x5AECDBC4, (q31_t)0xA5C4B855, - (q31_t)0x5AC973B4, (q31_t)0xA5A11865, (q31_t)0x5AA5FDA4, - (q31_t)0xA57D8666, (q31_t)0x5A82799A, (q31_t)0xA55A025B, - (q31_t)0x5A5EE79A, (q31_t)0xA5368C4B, (q31_t)0x5A3B47AA, - (q31_t)0xA513243B, (q31_t)0x5A1799D0, (q31_t)0xA4EFCA31, - (q31_t)0x59F3DE12, (q31_t)0xA4CC7E31, (q31_t)0x59D01474, - (q31_t)0xA4A94042, (q31_t)0x59AC3CFD, (q31_t)0xA4861069, - (q31_t)0x598857B1, (q31_t)0xA462EEAC, (q31_t)0x59646497, - (q31_t)0xA43FDB0F, (q31_t)0x594063B4, (q31_t)0xA41CD598, - (q31_t)0x591C550E, (q31_t)0xA3F9DE4D, (q31_t)0x58F838A9, - (q31_t)0xA3D6F533, (q31_t)0x58D40E8C, (q31_t)0xA3B41A4F, - (q31_t)0x58AFD6BC, (q31_t)0xA3914DA7, (q31_t)0x588B913F, - (q31_t)0xA36E8F40, (q31_t)0x58673E1B, (q31_t)0xA34BDF20, - (q31_t)0x5842DD54, (q31_t)0xA3293D4B, (q31_t)0x581E6EF1, - (q31_t)0xA306A9C7, (q31_t)0x57F9F2F7, (q31_t)0xA2E4249A, - (q31_t)0x57D5696C, (q31_t)0xA2C1ADC9, (q31_t)0x57B0D256, - (q31_t)0xA29F4559, (q31_t)0x578C2DB9, (q31_t)0xA27CEB4F, - (q31_t)0x57677B9D, (q31_t)0xA25A9FB1, (q31_t)0x5742BC05, - (q31_t)0xA2386283, (q31_t)0x571DEEF9, (q31_t)0xA21633CD, - (q31_t)0x56F9147E, (q31_t)0xA1F41391, (q31_t)0x56D42C99, - (q31_t)0xA1D201D7, (q31_t)0x56AF3750, (q31_t)0xA1AFFEA2, - (q31_t)0x568A34A9, (q31_t)0xA18E09F9, (q31_t)0x566524AA, - (q31_t)0xA16C23E1, (q31_t)0x56400757, (q31_t)0xA14A4C5E, - (q31_t)0x561ADCB8, (q31_t)0xA1288376, (q31_t)0x55F5A4D2, - (q31_t)0xA106C92E, (q31_t)0x55D05FAA, (q31_t)0xA0E51D8C, - (q31_t)0x55AB0D46, (q31_t)0xA0C38094, (q31_t)0x5585ADAC, - (q31_t)0xA0A1F24C, (q31_t)0x556040E2, (q31_t)0xA08072BA, - (q31_t)0x553AC6ED, (q31_t)0xA05F01E1, (q31_t)0x55153FD4, - (q31_t)0xA03D9FC7, (q31_t)0x54EFAB9C, (q31_t)0xA01C4C72, - (q31_t)0x54CA0A4A, (q31_t)0x9FFB07E7, (q31_t)0x54A45BE5, - (q31_t)0x9FD9D22A, (q31_t)0x547EA073, (q31_t)0x9FB8AB41, - (q31_t)0x5458D7F9, (q31_t)0x9F979331, (q31_t)0x5433027D, - (q31_t)0x9F7689FF, (q31_t)0x540D2005, (q31_t)0x9F558FB0, - (q31_t)0x53E73097, (q31_t)0x9F34A449, (q31_t)0x53C13438, - (q31_t)0x9F13C7D0, (q31_t)0x539B2AEF, (q31_t)0x9EF2FA48, - (q31_t)0x537514C1, (q31_t)0x9ED23BB9, (q31_t)0x534EF1B5, - (q31_t)0x9EB18C26, (q31_t)0x5328C1D0, (q31_t)0x9E90EB94, - (q31_t)0x53028517, (q31_t)0x9E705A09, (q31_t)0x52DC3B92, - (q31_t)0x9E4FD789, (q31_t)0x52B5E545, (q31_t)0x9E2F641A, - (q31_t)0x528F8237, (q31_t)0x9E0EFFC1, (q31_t)0x5269126E, - (q31_t)0x9DEEAA82, (q31_t)0x524295EF, (q31_t)0x9DCE6462, - (q31_t)0x521C0CC1, (q31_t)0x9DAE2D68, (q31_t)0x51F576E9, - (q31_t)0x9D8E0596, (q31_t)0x51CED46E, (q31_t)0x9D6DECF4, - (q31_t)0x51A82555, (q31_t)0x9D4DE384, (q31_t)0x518169A4, - (q31_t)0x9D2DE94D, (q31_t)0x515AA162, (q31_t)0x9D0DFE53, - (q31_t)0x5133CC94, (q31_t)0x9CEE229C, (q31_t)0x510CEB40, - (q31_t)0x9CCE562B, (q31_t)0x50E5FD6C, (q31_t)0x9CAE9907, - (q31_t)0x50BF031F, (q31_t)0x9C8EEB33, (q31_t)0x5097FC5E, - (q31_t)0x9C6F4CB5, (q31_t)0x5070E92F, (q31_t)0x9C4FBD92, - (q31_t)0x5049C999, (q31_t)0x9C303DCF, (q31_t)0x50229DA0, - (q31_t)0x9C10CD70, (q31_t)0x4FFB654D, (q31_t)0x9BF16C7A, - (q31_t)0x4FD420A3, (q31_t)0x9BD21AF2, (q31_t)0x4FACCFAB, - (q31_t)0x9BB2D8DD, (q31_t)0x4F857268, (q31_t)0x9B93A640, - (q31_t)0x4F5E08E3, (q31_t)0x9B748320, (q31_t)0x4F369320, - (q31_t)0x9B556F80, (q31_t)0x4F0F1126, (q31_t)0x9B366B67, - (q31_t)0x4EE782FA, (q31_t)0x9B1776D9, (q31_t)0x4EBFE8A4, - (q31_t)0x9AF891DB, (q31_t)0x4E984229, (q31_t)0x9AD9BC71, - (q31_t)0x4E708F8F, (q31_t)0x9ABAF6A0, (q31_t)0x4E48D0DC, - (q31_t)0x9A9C406D, (q31_t)0x4E210617, (q31_t)0x9A7D99DD, - (q31_t)0x4DF92F45, (q31_t)0x9A5F02F5, (q31_t)0x4DD14C6E, - (q31_t)0x9A407BB8, (q31_t)0x4DA95D96, (q31_t)0x9A22042C, - (q31_t)0x4D8162C4, (q31_t)0x9A039C56, (q31_t)0x4D595BFE, - (q31_t)0x99E5443A, (q31_t)0x4D31494B, (q31_t)0x99C6FBDE, - (q31_t)0x4D092AB0, (q31_t)0x99A8C344, (q31_t)0x4CE10034, - (q31_t)0x998A9A73, (q31_t)0x4CB8C9DD, (q31_t)0x996C816F, - (q31_t)0x4C9087B1, (q31_t)0x994E783C, (q31_t)0x4C6839B6, - (q31_t)0x99307EE0, (q31_t)0x4C3FDFF3, (q31_t)0x9912955E, - (q31_t)0x4C177A6E, (q31_t)0x98F4BBBC, (q31_t)0x4BEF092D, - (q31_t)0x98D6F1FE, (q31_t)0x4BC68C36, (q31_t)0x98B93828, - (q31_t)0x4B9E038F, (q31_t)0x989B8E3F, (q31_t)0x4B756F3F, - (q31_t)0x987DF449, (q31_t)0x4B4CCF4D, (q31_t)0x98606A48, - (q31_t)0x4B2423BD, (q31_t)0x9842F043, (q31_t)0x4AFB6C97, - (q31_t)0x9825863D, (q31_t)0x4AD2A9E1, (q31_t)0x98082C3B, - (q31_t)0x4AA9DBA1, (q31_t)0x97EAE241, (q31_t)0x4A8101DE, - (q31_t)0x97CDA855, (q31_t)0x4A581C9D, (q31_t)0x97B07E7A, - (q31_t)0x4A2F2BE5, (q31_t)0x979364B5, (q31_t)0x4A062FBD, - (q31_t)0x97765B0A, (q31_t)0x49DD282A, (q31_t)0x9759617E, - (q31_t)0x49B41533, (q31_t)0x973C7816, (q31_t)0x498AF6DE, - (q31_t)0x971F9ED6, (q31_t)0x4961CD32, (q31_t)0x9702D5C2, - (q31_t)0x49389836, (q31_t)0x96E61CDF, (q31_t)0x490F57EE, - (q31_t)0x96C97431, (q31_t)0x48E60C62, (q31_t)0x96ACDBBD, - (q31_t)0x48BCB598, (q31_t)0x96905387, (q31_t)0x48935397, - (q31_t)0x9673DB94, (q31_t)0x4869E664, (q31_t)0x965773E7, - (q31_t)0x48406E07, (q31_t)0x963B1C85, (q31_t)0x4816EA85, - (q31_t)0x961ED573, (q31_t)0x47ED5BE6, (q31_t)0x96029EB5, - (q31_t)0x47C3C22E, (q31_t)0x95E6784F, (q31_t)0x479A1D66, - (q31_t)0x95CA6246, (q31_t)0x47706D93, (q31_t)0x95AE5C9E, - (q31_t)0x4746B2BC, (q31_t)0x9592675B, (q31_t)0x471CECE6, - (q31_t)0x95768282, (q31_t)0x46F31C1A, (q31_t)0x955AAE17, - (q31_t)0x46C9405C, (q31_t)0x953EEA1E, (q31_t)0x469F59B4, - (q31_t)0x9523369B, (q31_t)0x46756827, (q31_t)0x95079393, - (q31_t)0x464B6BBD, (q31_t)0x94EC010B, (q31_t)0x4621647C, - (q31_t)0x94D07F05, (q31_t)0x45F7526B, (q31_t)0x94B50D87, - (q31_t)0x45CD358F, (q31_t)0x9499AC95, (q31_t)0x45A30DF0, - (q31_t)0x947E5C32, (q31_t)0x4578DB93, (q31_t)0x94631C64, - (q31_t)0x454E9E80, (q31_t)0x9447ED2F, (q31_t)0x452456BC, - (q31_t)0x942CCE95, (q31_t)0x44FA044F, (q31_t)0x9411C09D, - (q31_t)0x44CFA73F, (q31_t)0x93F6C34A, (q31_t)0x44A53F93, - (q31_t)0x93DBD69F, (q31_t)0x447ACD50, (q31_t)0x93C0FAA2, - (q31_t)0x4450507E, (q31_t)0x93A62F56, (q31_t)0x4425C923, - (q31_t)0x938B74C0, (q31_t)0x43FB3745, (q31_t)0x9370CAE4, - (q31_t)0x43D09AEC, (q31_t)0x935631C5, (q31_t)0x43A5F41E, - (q31_t)0x933BA968, (q31_t)0x437B42E1, (q31_t)0x932131D1, - (q31_t)0x4350873C, (q31_t)0x9306CB04, (q31_t)0x4325C135, - (q31_t)0x92EC7505, (q31_t)0x42FAF0D4, (q31_t)0x92D22FD8, - (q31_t)0x42D0161E, (q31_t)0x92B7FB82, (q31_t)0x42A5311A, - (q31_t)0x929DD805, (q31_t)0x427A41D0, (q31_t)0x9283C567, - (q31_t)0x424F4845, (q31_t)0x9269C3AC, (q31_t)0x42244480, - (q31_t)0x924FD2D6, (q31_t)0x41F93688, (q31_t)0x9235F2EB, - (q31_t)0x41CE1E64, (q31_t)0x921C23EE, (q31_t)0x41A2FC1A, - (q31_t)0x920265E4, (q31_t)0x4177CFB0, (q31_t)0x91E8B8D0, - (q31_t)0x414C992E, (q31_t)0x91CF1CB6, (q31_t)0x4121589A, - (q31_t)0x91B5919A, (q31_t)0x40F60DFB, (q31_t)0x919C1780, - (q31_t)0x40CAB957, (q31_t)0x9182AE6C, (q31_t)0x409F5AB6, - (q31_t)0x91695663, (q31_t)0x4073F21D, (q31_t)0x91500F67, - (q31_t)0x40487F93, (q31_t)0x9136D97D, (q31_t)0x401D0320, - (q31_t)0x911DB4A8, (q31_t)0x3FF17CCA, (q31_t)0x9104A0ED, - (q31_t)0x3FC5EC97, (q31_t)0x90EB9E50, (q31_t)0x3F9A528F, - (q31_t)0x90D2ACD3, (q31_t)0x3F6EAEB8, (q31_t)0x90B9CC7C, - (q31_t)0x3F430118, (q31_t)0x90A0FD4E, (q31_t)0x3F1749B7, - (q31_t)0x90883F4C, (q31_t)0x3EEB889C, (q31_t)0x906F927B, - (q31_t)0x3EBFBDCC, (q31_t)0x9056F6DF, (q31_t)0x3E93E94F, - (q31_t)0x903E6C7A, (q31_t)0x3E680B2C, (q31_t)0x9025F352, - (q31_t)0x3E3C2369, (q31_t)0x900D8B69, (q31_t)0x3E10320D, - (q31_t)0x8FF534C4, (q31_t)0x3DE4371F, (q31_t)0x8FDCEF66, - (q31_t)0x3DB832A5, (q31_t)0x8FC4BB53, (q31_t)0x3D8C24A7, - (q31_t)0x8FAC988E, (q31_t)0x3D600D2B, (q31_t)0x8F94871D, - (q31_t)0x3D33EC39, (q31_t)0x8F7C8701, (q31_t)0x3D07C1D5, - (q31_t)0x8F64983F, (q31_t)0x3CDB8E09, (q31_t)0x8F4CBADB, - (q31_t)0x3CAF50DA, (q31_t)0x8F34EED8, (q31_t)0x3C830A4F, - (q31_t)0x8F1D343A, (q31_t)0x3C56BA70, (q31_t)0x8F058B04, - (q31_t)0x3C2A6142, (q31_t)0x8EEDF33B, (q31_t)0x3BFDFECD, - (q31_t)0x8ED66CE1, (q31_t)0x3BD19317, (q31_t)0x8EBEF7FB, - (q31_t)0x3BA51E29, (q31_t)0x8EA7948C, (q31_t)0x3B78A007, - (q31_t)0x8E904298, (q31_t)0x3B4C18BA, (q31_t)0x8E790222, - (q31_t)0x3B1F8847, (q31_t)0x8E61D32D, (q31_t)0x3AF2EEB7, - (q31_t)0x8E4AB5BF, (q31_t)0x3AC64C0F, (q31_t)0x8E33A9D9, - (q31_t)0x3A99A057, (q31_t)0x8E1CAF80, (q31_t)0x3A6CEB95, - (q31_t)0x8E05C6B7, (q31_t)0x3A402DD1, (q31_t)0x8DEEEF82, - (q31_t)0x3A136712, (q31_t)0x8DD829E4, (q31_t)0x39E6975D, - (q31_t)0x8DC175E0, (q31_t)0x39B9BEBB, (q31_t)0x8DAAD37B, - (q31_t)0x398CDD32, (q31_t)0x8D9442B7, (q31_t)0x395FF2C9, - (q31_t)0x8D7DC399, (q31_t)0x3932FF87, (q31_t)0x8D675623, - (q31_t)0x39060372, (q31_t)0x8D50FA59, (q31_t)0x38D8FE93, - (q31_t)0x8D3AB03F, (q31_t)0x38ABF0EF, (q31_t)0x8D2477D8, - (q31_t)0x387EDA8E, (q31_t)0x8D0E5127, (q31_t)0x3851BB76, - (q31_t)0x8CF83C30, (q31_t)0x382493B0, (q31_t)0x8CE238F6, - (q31_t)0x37F76340, (q31_t)0x8CCC477D, (q31_t)0x37CA2A30, - (q31_t)0x8CB667C7, (q31_t)0x379CE884, (q31_t)0x8CA099D9, - (q31_t)0x376F9E46, (q31_t)0x8C8ADDB6, (q31_t)0x37424B7A, - (q31_t)0x8C753361, (q31_t)0x3714F02A, (q31_t)0x8C5F9ADD, - (q31_t)0x36E78C5A, (q31_t)0x8C4A142F, (q31_t)0x36BA2013, - (q31_t)0x8C349F58, (q31_t)0x368CAB5C, (q31_t)0x8C1F3C5C, - (q31_t)0x365F2E3B, (q31_t)0x8C09EB40, (q31_t)0x3631A8B7, - (q31_t)0x8BF4AC05, (q31_t)0x36041AD9, (q31_t)0x8BDF7EAF, - (q31_t)0x35D684A5, (q31_t)0x8BCA6342, (q31_t)0x35A8E624, - (q31_t)0x8BB559C1, (q31_t)0x357B3F5D, (q31_t)0x8BA0622F, - (q31_t)0x354D9056, (q31_t)0x8B8B7C8F, (q31_t)0x351FD917, - (q31_t)0x8B76A8E4, (q31_t)0x34F219A7, (q31_t)0x8B61E732, - (q31_t)0x34C4520D, (q31_t)0x8B4D377C, (q31_t)0x3496824F, - (q31_t)0x8B3899C5, (q31_t)0x3468AA76, (q31_t)0x8B240E10, - (q31_t)0x343ACA87, (q31_t)0x8B0F9461, (q31_t)0x340CE28A, - (q31_t)0x8AFB2CBA, (q31_t)0x33DEF287, (q31_t)0x8AE6D71F, - (q31_t)0x33B0FA84, (q31_t)0x8AD29393, (q31_t)0x3382FA88, - (q31_t)0x8ABE6219, (q31_t)0x3354F29A, (q31_t)0x8AAA42B4, - (q31_t)0x3326E2C2, (q31_t)0x8A963567, (q31_t)0x32F8CB07, - (q31_t)0x8A823A35, (q31_t)0x32CAAB6F, (q31_t)0x8A6E5122, - (q31_t)0x329C8402, (q31_t)0x8A5A7A30, (q31_t)0x326E54C7, - (q31_t)0x8A46B563, (q31_t)0x32401DC5, (q31_t)0x8A3302BD, - (q31_t)0x3211DF03, (q31_t)0x8A1F6242, (q31_t)0x31E39889, - (q31_t)0x8A0BD3F5, (q31_t)0x31B54A5D, (q31_t)0x89F857D8, - (q31_t)0x3186F487, (q31_t)0x89E4EDEE, (q31_t)0x3158970D, - (q31_t)0x89D1963C, (q31_t)0x312A31F8, (q31_t)0x89BE50C3, - (q31_t)0x30FBC54D, (q31_t)0x89AB1D86, (q31_t)0x30CD5114, - (q31_t)0x8997FC89, (q31_t)0x309ED555, (q31_t)0x8984EDCF, - (q31_t)0x30705217, (q31_t)0x8971F15A, (q31_t)0x3041C760, - (q31_t)0x895F072D, (q31_t)0x30133538, (q31_t)0x894C2F4C, - (q31_t)0x2FE49BA6, (q31_t)0x893969B9, (q31_t)0x2FB5FAB2, - (q31_t)0x8926B677, (q31_t)0x2F875262, (q31_t)0x89141589, - (q31_t)0x2F58A2BD, (q31_t)0x890186F1, (q31_t)0x2F29EBCC, - (q31_t)0x88EF0AB4, (q31_t)0x2EFB2D94, (q31_t)0x88DCA0D3, - (q31_t)0x2ECC681E, (q31_t)0x88CA4951, (q31_t)0x2E9D9B70, - (q31_t)0x88B80431, (q31_t)0x2E6EC792, (q31_t)0x88A5D177, - (q31_t)0x2E3FEC8B, (q31_t)0x8893B124, (q31_t)0x2E110A62, - (q31_t)0x8881A33C, (q31_t)0x2DE2211E, (q31_t)0x886FA7C2, - (q31_t)0x2DB330C7, (q31_t)0x885DBEB7, (q31_t)0x2D843963, - (q31_t)0x884BE820, (q31_t)0x2D553AFB, (q31_t)0x883A23FE, - (q31_t)0x2D263595, (q31_t)0x88287255, (q31_t)0x2CF72939, - (q31_t)0x8816D327, (q31_t)0x2CC815ED, (q31_t)0x88054677, - (q31_t)0x2C98FBBA, (q31_t)0x87F3CC47, (q31_t)0x2C69DAA6, - (q31_t)0x87E2649B, (q31_t)0x2C3AB2B9, (q31_t)0x87D10F75, - (q31_t)0x2C0B83F9, (q31_t)0x87BFCCD7, (q31_t)0x2BDC4E6F, - (q31_t)0x87AE9CC5, (q31_t)0x2BAD1221, (q31_t)0x879D7F40, - (q31_t)0x2B7DCF17, (q31_t)0x878C744C, (q31_t)0x2B4E8558, - (q31_t)0x877B7BEC, (q31_t)0x2B1F34EB, (q31_t)0x876A9621, - (q31_t)0x2AEFDDD8, (q31_t)0x8759C2EF, (q31_t)0x2AC08025, - (q31_t)0x87490257, (q31_t)0x2A911BDB, (q31_t)0x8738545E, - (q31_t)0x2A61B101, (q31_t)0x8727B904, (q31_t)0x2A323F9D, - (q31_t)0x8717304E, (q31_t)0x2A02C7B8, (q31_t)0x8706BA3C, - (q31_t)0x29D34958, (q31_t)0x86F656D3, (q31_t)0x29A3C484, - (q31_t)0x86E60614, (q31_t)0x29743945, (q31_t)0x86D5C802, - (q31_t)0x2944A7A2, (q31_t)0x86C59C9F, (q31_t)0x29150FA1, - (q31_t)0x86B583EE, (q31_t)0x28E5714A, (q31_t)0x86A57DF1, - (q31_t)0x28B5CCA5, (q31_t)0x86958AAB, (q31_t)0x288621B9, - (q31_t)0x8685AA1F, (q31_t)0x2856708C, (q31_t)0x8675DC4E, - (q31_t)0x2826B928, (q31_t)0x8666213C, (q31_t)0x27F6FB92, - (q31_t)0x865678EA, (q31_t)0x27C737D2, (q31_t)0x8646E35B, - (q31_t)0x27976DF1, (q31_t)0x86376092, (q31_t)0x27679DF4, - (q31_t)0x8627F090, (q31_t)0x2737C7E3, (q31_t)0x86189359, - (q31_t)0x2707EBC6, (q31_t)0x860948EE, (q31_t)0x26D809A5, - (q31_t)0x85FA1152, (q31_t)0x26A82185, (q31_t)0x85EAEC88, - (q31_t)0x26783370, (q31_t)0x85DBDA91, (q31_t)0x26483F6C, - (q31_t)0x85CCDB70, (q31_t)0x26184581, (q31_t)0x85BDEF27, - (q31_t)0x25E845B5, (q31_t)0x85AF15B9, (q31_t)0x25B84012, - (q31_t)0x85A04F28, (q31_t)0x2588349D, (q31_t)0x85919B75, - (q31_t)0x2558235E, (q31_t)0x8582FAA4, (q31_t)0x25280C5D, - (q31_t)0x85746CB7, (q31_t)0x24F7EFA1, (q31_t)0x8565F1B0, - (q31_t)0x24C7CD32, (q31_t)0x85578991, (q31_t)0x2497A517, - (q31_t)0x8549345C, (q31_t)0x24677757, (q31_t)0x853AF214, - (q31_t)0x243743FA, (q31_t)0x852CC2BA, (q31_t)0x24070B07, - (q31_t)0x851EA652, (q31_t)0x23D6CC86, (q31_t)0x85109CDC, - (q31_t)0x23A6887E, (q31_t)0x8502A65C, (q31_t)0x23763EF7, - (q31_t)0x84F4C2D3, (q31_t)0x2345EFF7, (q31_t)0x84E6F244, - (q31_t)0x23159B87, (q31_t)0x84D934B0, (q31_t)0x22E541AE, - (q31_t)0x84CB8A1B, (q31_t)0x22B4E274, (q31_t)0x84BDF285, - (q31_t)0x22847DDF, (q31_t)0x84B06DF1, (q31_t)0x225413F8, - (q31_t)0x84A2FC62, (q31_t)0x2223A4C5, (q31_t)0x84959DD9, - (q31_t)0x21F3304E, (q31_t)0x84885257, (q31_t)0x21C2B69C, - (q31_t)0x847B19E1, (q31_t)0x219237B4, (q31_t)0x846DF476, - (q31_t)0x2161B39F, (q31_t)0x8460E21A, (q31_t)0x21312A65, - (q31_t)0x8453E2CE, (q31_t)0x21009C0B, (q31_t)0x8446F695, - (q31_t)0x20D0089B, (q31_t)0x843A1D70, (q31_t)0x209F701C, - (q31_t)0x842D5761, (q31_t)0x206ED295, (q31_t)0x8420A46B, - (q31_t)0x203E300D, (q31_t)0x8414048F, (q31_t)0x200D888C, - (q31_t)0x840777CF, (q31_t)0x1FDCDC1A, (q31_t)0x83FAFE2E, - (q31_t)0x1FAC2ABF, (q31_t)0x83EE97AC, (q31_t)0x1F7B7480, - (q31_t)0x83E2444D, (q31_t)0x1F4AB967, (q31_t)0x83D60411, - (q31_t)0x1F19F97B, (q31_t)0x83C9D6FB, (q31_t)0x1EE934C2, - (q31_t)0x83BDBD0D, (q31_t)0x1EB86B46, (q31_t)0x83B1B649, - (q31_t)0x1E879D0C, (q31_t)0x83A5C2B0, (q31_t)0x1E56CA1E, - (q31_t)0x8399E244, (q31_t)0x1E25F281, (q31_t)0x838E1507, - (q31_t)0x1DF5163F, (q31_t)0x83825AFB, (q31_t)0x1DC4355D, - (q31_t)0x8376B422, (q31_t)0x1D934FE5, (q31_t)0x836B207D, - (q31_t)0x1D6265DD, (q31_t)0x835FA00E, (q31_t)0x1D31774D, - (q31_t)0x835432D8, (q31_t)0x1D00843C, (q31_t)0x8348D8DB, - (q31_t)0x1CCF8CB3, (q31_t)0x833D921A, (q31_t)0x1C9E90B8, - (q31_t)0x83325E97, (q31_t)0x1C6D9053, (q31_t)0x83273E52, - (q31_t)0x1C3C8B8C, (q31_t)0x831C314E, (q31_t)0x1C0B826A, - (q31_t)0x8311378C, (q31_t)0x1BDA74F5, (q31_t)0x8306510F, - (q31_t)0x1BA96334, (q31_t)0x82FB7DD8, (q31_t)0x1B784D30, - (q31_t)0x82F0BDE8, (q31_t)0x1B4732EF, (q31_t)0x82E61141, - (q31_t)0x1B161479, (q31_t)0x82DB77E5, (q31_t)0x1AE4F1D6, - (q31_t)0x82D0F1D5, (q31_t)0x1AB3CB0C, (q31_t)0x82C67F13, - (q31_t)0x1A82A025, (q31_t)0x82BC1FA1, (q31_t)0x1A517127, - (q31_t)0x82B1D381, (q31_t)0x1A203E1B, (q31_t)0x82A79AB3, - (q31_t)0x19EF0706, (q31_t)0x829D753A, (q31_t)0x19BDCBF2, - (q31_t)0x82936316, (q31_t)0x198C8CE6, (q31_t)0x8289644A, - (q31_t)0x195B49E9, (q31_t)0x827F78D8, (q31_t)0x192A0303, - (q31_t)0x8275A0C0, (q31_t)0x18F8B83C, (q31_t)0x826BDC04, - (q31_t)0x18C7699B, (q31_t)0x82622AA5, (q31_t)0x18961727, - (q31_t)0x82588CA6, (q31_t)0x1864C0E9, (q31_t)0x824F0208, - (q31_t)0x183366E8, (q31_t)0x82458ACB, (q31_t)0x1802092C, - (q31_t)0x823C26F2, (q31_t)0x17D0A7BB, (q31_t)0x8232D67E, - (q31_t)0x179F429F, (q31_t)0x82299971, (q31_t)0x176DD9DE, - (q31_t)0x82206FCB, (q31_t)0x173C6D80, (q31_t)0x8217598F, - (q31_t)0x170AFD8D, (q31_t)0x820E56BE, (q31_t)0x16D98A0C, - (q31_t)0x82056758, (q31_t)0x16A81305, (q31_t)0x81FC8B60, - (q31_t)0x1676987F, (q31_t)0x81F3C2D7, (q31_t)0x16451A83, - (q31_t)0x81EB0DBD, (q31_t)0x16139917, (q31_t)0x81E26C16, - (q31_t)0x15E21444, (q31_t)0x81D9DDE1, (q31_t)0x15B08C11, - (q31_t)0x81D16320, (q31_t)0x157F0086, (q31_t)0x81C8FBD5, - (q31_t)0x154D71AA, (q31_t)0x81C0A801, (q31_t)0x151BDF85, - (q31_t)0x81B867A4, (q31_t)0x14EA4A1F, (q31_t)0x81B03AC1, - (q31_t)0x14B8B17F, (q31_t)0x81A82159, (q31_t)0x148715AD, - (q31_t)0x81A01B6C, (q31_t)0x145576B1, (q31_t)0x819828FD, - (q31_t)0x1423D492, (q31_t)0x81904A0C, (q31_t)0x13F22F57, - (q31_t)0x81887E9A, (q31_t)0x13C0870A, (q31_t)0x8180C6A9, - (q31_t)0x138EDBB0, (q31_t)0x8179223A, (q31_t)0x135D2D53, - (q31_t)0x8171914E, (q31_t)0x132B7BF9, (q31_t)0x816A13E6, - (q31_t)0x12F9C7AA, (q31_t)0x8162AA03, (q31_t)0x12C8106E, - (q31_t)0x815B53A8, (q31_t)0x1296564D, (q31_t)0x815410D3, - (q31_t)0x1264994E, (q31_t)0x814CE188, (q31_t)0x1232D978, - (q31_t)0x8145C5C6, (q31_t)0x120116D4, (q31_t)0x813EBD90, - (q31_t)0x11CF516A, (q31_t)0x8137C8E6, (q31_t)0x119D8940, - (q31_t)0x8130E7C8, (q31_t)0x116BBE5F, (q31_t)0x812A1A39, - (q31_t)0x1139F0CE, (q31_t)0x81236039, (q31_t)0x11082096, - (q31_t)0x811CB9CA, (q31_t)0x10D64DBC, (q31_t)0x811626EC, - (q31_t)0x10A4784A, (q31_t)0x810FA7A0, (q31_t)0x1072A047, - (q31_t)0x81093BE8, (q31_t)0x1040C5BB, (q31_t)0x8102E3C3, - (q31_t)0x100EE8AD, (q31_t)0x80FC9F35, (q31_t)0x0FDD0925, - (q31_t)0x80F66E3C, (q31_t)0x0FAB272B, (q31_t)0x80F050DB, - (q31_t)0x0F7942C6, (q31_t)0x80EA4712, (q31_t)0x0F475BFE, - (q31_t)0x80E450E2, (q31_t)0x0F1572DC, (q31_t)0x80DE6E4C, - (q31_t)0x0EE38765, (q31_t)0x80D89F51, (q31_t)0x0EB199A3, - (q31_t)0x80D2E3F1, (q31_t)0x0E7FA99D, (q31_t)0x80CD3C2F, - (q31_t)0x0E4DB75B, (q31_t)0x80C7A80A, (q31_t)0x0E1BC2E3, - (q31_t)0x80C22783, (q31_t)0x0DE9CC3F, (q31_t)0x80BCBA9C, - (q31_t)0x0DB7D376, (q31_t)0x80B76155, (q31_t)0x0D85D88F, - (q31_t)0x80B21BAF, (q31_t)0x0D53DB92, (q31_t)0x80ACE9AB, - (q31_t)0x0D21DC87, (q31_t)0x80A7CB49, (q31_t)0x0CEFDB75, - (q31_t)0x80A2C08B, (q31_t)0x0CBDD865, (q31_t)0x809DC970, - (q31_t)0x0C8BD35E, (q31_t)0x8098E5FB, (q31_t)0x0C59CC67, - (q31_t)0x8094162B, (q31_t)0x0C27C389, (q31_t)0x808F5A02, - (q31_t)0x0BF5B8CB, (q31_t)0x808AB180, (q31_t)0x0BC3AC35, - (q31_t)0x80861CA5, (q31_t)0x0B919DCE, (q31_t)0x80819B74, - (q31_t)0x0B5F8D9F, (q31_t)0x807D2DEB, (q31_t)0x0B2D7BAE, - (q31_t)0x8078D40D, (q31_t)0x0AFB6805, (q31_t)0x80748DD9, - (q31_t)0x0AC952AA, (q31_t)0x80705B50, (q31_t)0x0A973BA5, - (q31_t)0x806C3C73, (q31_t)0x0A6522FE, (q31_t)0x80683143, - (q31_t)0x0A3308BC, (q31_t)0x806439C0, (q31_t)0x0A00ECE8, - (q31_t)0x806055EA, (q31_t)0x09CECF89, (q31_t)0x805C85C3, - (q31_t)0x099CB0A7, (q31_t)0x8058C94C, (q31_t)0x096A9049, - (q31_t)0x80552083, (q31_t)0x09386E77, (q31_t)0x80518B6B, - (q31_t)0x09064B3A, (q31_t)0x804E0A03, (q31_t)0x08D42698, - (q31_t)0x804A9C4D, (q31_t)0x08A2009A, (q31_t)0x80474248, - (q31_t)0x086FD947, (q31_t)0x8043FBF6, (q31_t)0x083DB0A7, - (q31_t)0x8040C956, (q31_t)0x080B86C1, (q31_t)0x803DAA69, - (q31_t)0x07D95B9E, (q31_t)0x803A9F31, (q31_t)0x07A72F45, - (q31_t)0x8037A7AC, (q31_t)0x077501BE, (q31_t)0x8034C3DC, - (q31_t)0x0742D310, (q31_t)0x8031F3C1, (q31_t)0x0710A344, - (q31_t)0x802F375C, (q31_t)0x06DE7261, (q31_t)0x802C8EAD, - (q31_t)0x06AC406F, (q31_t)0x8029F9B4, (q31_t)0x067A0D75, - (q31_t)0x80277872, (q31_t)0x0647D97C, (q31_t)0x80250AE7, - (q31_t)0x0615A48A, (q31_t)0x8022B113, (q31_t)0x05E36EA9, - (q31_t)0x80206AF8, (q31_t)0x05B137DF, (q31_t)0x801E3894, - (q31_t)0x057F0034, (q31_t)0x801C19E9, (q31_t)0x054CC7B0, - (q31_t)0x801A0EF7, (q31_t)0x051A8E5C, (q31_t)0x801817BF, - (q31_t)0x04E8543D, (q31_t)0x80163440, (q31_t)0x04B6195D, - (q31_t)0x8014647A, (q31_t)0x0483DDC3, (q31_t)0x8012A86F, - (q31_t)0x0451A176, (q31_t)0x8011001E, (q31_t)0x041F647F, - (q31_t)0x800F6B88, (q31_t)0x03ED26E6, (q31_t)0x800DEAAC, - (q31_t)0x03BAE8B1, (q31_t)0x800C7D8C, (q31_t)0x0388A9E9, - (q31_t)0x800B2427, (q31_t)0x03566A96, (q31_t)0x8009DE7D, - (q31_t)0x03242ABF, (q31_t)0x8008AC90, (q31_t)0x02F1EA6B, - (q31_t)0x80078E5E, (q31_t)0x02BFA9A4, (q31_t)0x800683E8, - (q31_t)0x028D6870, (q31_t)0x80058D2E, (q31_t)0x025B26D7, - (q31_t)0x8004AA31, (q31_t)0x0228E4E1, (q31_t)0x8003DAF0, - (q31_t)0x01F6A296, (q31_t)0x80031F6C, (q31_t)0x01C45FFE, - (q31_t)0x800277A5, (q31_t)0x01921D1F, (q31_t)0x8001E39B, - (q31_t)0x015FDA03, (q31_t)0x8001634D, (q31_t)0x012D96B0, - (q31_t)0x8000F6BD, (q31_t)0x00FB532F, (q31_t)0x80009DE9, - (q31_t)0x00C90F88, (q31_t)0x800058D3, (q31_t)0x0096CBC1, - (q31_t)0x8000277A, (q31_t)0x006487E3, (q31_t)0x800009DE, - (q31_t)0x003243F5, (q31_t)0x80000000, (q31_t)0x00000000, - (q31_t)0x800009DE, (q31_t)0xFFCDBC0A, (q31_t)0x8000277A, - (q31_t)0xFF9B781D, (q31_t)0x800058D3, (q31_t)0xFF69343E, - (q31_t)0x80009DE9, (q31_t)0xFF36F078, (q31_t)0x8000F6BD, - (q31_t)0xFF04ACD0, (q31_t)0x8001634D, (q31_t)0xFED2694F, - (q31_t)0x8001E39B, (q31_t)0xFEA025FC, (q31_t)0x800277A5, - (q31_t)0xFE6DE2E0, (q31_t)0x80031F6C, (q31_t)0xFE3BA001, - (q31_t)0x8003DAF0, (q31_t)0xFE095D69, (q31_t)0x8004AA31, - (q31_t)0xFDD71B1E, (q31_t)0x80058D2E, (q31_t)0xFDA4D928, - (q31_t)0x800683E8, (q31_t)0xFD72978F, (q31_t)0x80078E5E, - (q31_t)0xFD40565B, (q31_t)0x8008AC90, (q31_t)0xFD0E1594, - (q31_t)0x8009DE7D, (q31_t)0xFCDBD541, (q31_t)0x800B2427, - (q31_t)0xFCA99569, (q31_t)0x800C7D8C, (q31_t)0xFC775616, - (q31_t)0x800DEAAC, (q31_t)0xFC45174E, (q31_t)0x800F6B88, - (q31_t)0xFC12D919, (q31_t)0x8011001E, (q31_t)0xFBE09B80, - (q31_t)0x8012A86F, (q31_t)0xFBAE5E89, (q31_t)0x8014647A, - (q31_t)0xFB7C223C, (q31_t)0x80163440, (q31_t)0xFB49E6A2, - (q31_t)0x801817BF, (q31_t)0xFB17ABC2, (q31_t)0x801A0EF7, - (q31_t)0xFAE571A4, (q31_t)0x801C19E9, (q31_t)0xFAB3384F, - (q31_t)0x801E3894, (q31_t)0xFA80FFCB, (q31_t)0x80206AF8, - (q31_t)0xFA4EC820, (q31_t)0x8022B113, (q31_t)0xFA1C9156, - (q31_t)0x80250AE7, (q31_t)0xF9EA5B75, (q31_t)0x80277872, - (q31_t)0xF9B82683, (q31_t)0x8029F9B4, (q31_t)0xF985F28A, - (q31_t)0x802C8EAD, (q31_t)0xF953BF90, (q31_t)0x802F375C, - (q31_t)0xF9218D9E, (q31_t)0x8031F3C1, (q31_t)0xF8EF5CBB, - (q31_t)0x8034C3DC, (q31_t)0xF8BD2CEF, (q31_t)0x8037A7AC, - (q31_t)0xF88AFE41, (q31_t)0x803A9F31, (q31_t)0xF858D0BA, - (q31_t)0x803DAA69, (q31_t)0xF826A461, (q31_t)0x8040C956, - (q31_t)0xF7F4793E, (q31_t)0x8043FBF6, (q31_t)0xF7C24F58, - (q31_t)0x80474248, (q31_t)0xF79026B8, (q31_t)0x804A9C4D, - (q31_t)0xF75DFF65, (q31_t)0x804E0A03, (q31_t)0xF72BD967, - (q31_t)0x80518B6B, (q31_t)0xF6F9B4C5, (q31_t)0x80552083, - (q31_t)0xF6C79188, (q31_t)0x8058C94C, (q31_t)0xF6956FB6, - (q31_t)0x805C85C3, (q31_t)0xF6634F58, (q31_t)0x806055EA, - (q31_t)0xF6313076, (q31_t)0x806439C0, (q31_t)0xF5FF1317, - (q31_t)0x80683143, (q31_t)0xF5CCF743, (q31_t)0x806C3C73, - (q31_t)0xF59ADD01, (q31_t)0x80705B50, (q31_t)0xF568C45A, - (q31_t)0x80748DD9, (q31_t)0xF536AD55, (q31_t)0x8078D40D, - (q31_t)0xF50497FA, (q31_t)0x807D2DEB, (q31_t)0xF4D28451, - (q31_t)0x80819B74, (q31_t)0xF4A07260, (q31_t)0x80861CA5, - (q31_t)0xF46E6231, (q31_t)0x808AB180, (q31_t)0xF43C53CA, - (q31_t)0x808F5A02, (q31_t)0xF40A4734, (q31_t)0x8094162B, - (q31_t)0xF3D83C76, (q31_t)0x8098E5FB, (q31_t)0xF3A63398, - (q31_t)0x809DC970, (q31_t)0xF3742CA1, (q31_t)0x80A2C08B, - (q31_t)0xF342279A, (q31_t)0x80A7CB49, (q31_t)0xF310248A, - (q31_t)0x80ACE9AB, (q31_t)0xF2DE2378, (q31_t)0x80B21BAF, - (q31_t)0xF2AC246D, (q31_t)0x80B76155, (q31_t)0xF27A2770, - (q31_t)0x80BCBA9C, (q31_t)0xF2482C89, (q31_t)0x80C22783, - (q31_t)0xF21633C0, (q31_t)0x80C7A80A, (q31_t)0xF1E43D1C, - (q31_t)0x80CD3C2F, (q31_t)0xF1B248A5, (q31_t)0x80D2E3F1, - (q31_t)0xF1805662, (q31_t)0x80D89F51, (q31_t)0xF14E665C, - (q31_t)0x80DE6E4C, (q31_t)0xF11C789A, (q31_t)0x80E450E2, - (q31_t)0xF0EA8D23, (q31_t)0x80EA4712, (q31_t)0xF0B8A401, - (q31_t)0x80F050DB, (q31_t)0xF086BD39, (q31_t)0x80F66E3C, - (q31_t)0xF054D8D4, (q31_t)0x80FC9F35, (q31_t)0xF022F6DA, - (q31_t)0x8102E3C3, (q31_t)0xEFF11752, (q31_t)0x81093BE8, - (q31_t)0xEFBF3A44, (q31_t)0x810FA7A0, (q31_t)0xEF8D5FB8, - (q31_t)0x811626EC, (q31_t)0xEF5B87B5, (q31_t)0x811CB9CA, - (q31_t)0xEF29B243, (q31_t)0x81236039, (q31_t)0xEEF7DF6A, - (q31_t)0x812A1A39, (q31_t)0xEEC60F31, (q31_t)0x8130E7C8, - (q31_t)0xEE9441A0, (q31_t)0x8137C8E6, (q31_t)0xEE6276BF, - (q31_t)0x813EBD90, (q31_t)0xEE30AE95, (q31_t)0x8145C5C6, - (q31_t)0xEDFEE92B, (q31_t)0x814CE188, (q31_t)0xEDCD2687, - (q31_t)0x815410D3, (q31_t)0xED9B66B2, (q31_t)0x815B53A8, - (q31_t)0xED69A9B2, (q31_t)0x8162AA03, (q31_t)0xED37EF91, - (q31_t)0x816A13E6, (q31_t)0xED063855, (q31_t)0x8171914E, - (q31_t)0xECD48406, (q31_t)0x8179223A, (q31_t)0xECA2D2AC, - (q31_t)0x8180C6A9, (q31_t)0xEC71244F, (q31_t)0x81887E9A, - (q31_t)0xEC3F78F5, (q31_t)0x81904A0C, (q31_t)0xEC0DD0A8, - (q31_t)0x819828FD, (q31_t)0xEBDC2B6D, (q31_t)0x81A01B6C, - (q31_t)0xEBAA894E, (q31_t)0x81A82159, (q31_t)0xEB78EA52, - (q31_t)0x81B03AC1, (q31_t)0xEB474E80, (q31_t)0x81B867A4, - (q31_t)0xEB15B5E0, (q31_t)0x81C0A801, (q31_t)0xEAE4207A, - (q31_t)0x81C8FBD5, (q31_t)0xEAB28E55, (q31_t)0x81D16320, - (q31_t)0xEA80FF79, (q31_t)0x81D9DDE1, (q31_t)0xEA4F73EE, - (q31_t)0x81E26C16, (q31_t)0xEA1DEBBB, (q31_t)0x81EB0DBD, - (q31_t)0xE9EC66E8, (q31_t)0x81F3C2D7, (q31_t)0xE9BAE57C, - (q31_t)0x81FC8B60, (q31_t)0xE9896780, (q31_t)0x82056758, - (q31_t)0xE957ECFB, (q31_t)0x820E56BE, (q31_t)0xE92675F4, - (q31_t)0x8217598F, (q31_t)0xE8F50273, (q31_t)0x82206FCB, - (q31_t)0xE8C3927F, (q31_t)0x82299971, (q31_t)0xE8922621, - (q31_t)0x8232D67E, (q31_t)0xE860BD60, (q31_t)0x823C26F2, - (q31_t)0xE82F5844, (q31_t)0x82458ACB, (q31_t)0xE7FDF6D3, - (q31_t)0x824F0208, (q31_t)0xE7CC9917, (q31_t)0x82588CA6, - (q31_t)0xE79B3F16, (q31_t)0x82622AA5, (q31_t)0xE769E8D8, - (q31_t)0x826BDC04, (q31_t)0xE7389664, (q31_t)0x8275A0C0, - (q31_t)0xE70747C3, (q31_t)0x827F78D8, (q31_t)0xE6D5FCFC, - (q31_t)0x8289644A, (q31_t)0xE6A4B616, (q31_t)0x82936316, - (q31_t)0xE6737319, (q31_t)0x829D753A, (q31_t)0xE642340D, - (q31_t)0x82A79AB3, (q31_t)0xE610F8F9, (q31_t)0x82B1D381, - (q31_t)0xE5DFC1E4, (q31_t)0x82BC1FA1, (q31_t)0xE5AE8ED8, - (q31_t)0x82C67F13, (q31_t)0xE57D5FDA, (q31_t)0x82D0F1D5, - (q31_t)0xE54C34F3, (q31_t)0x82DB77E5, (q31_t)0xE51B0E2A, - (q31_t)0x82E61141, (q31_t)0xE4E9EB86, (q31_t)0x82F0BDE8, - (q31_t)0xE4B8CD10, (q31_t)0x82FB7DD8, (q31_t)0xE487B2CF, - (q31_t)0x8306510F, (q31_t)0xE4569CCB, (q31_t)0x8311378C, - (q31_t)0xE4258B0A, (q31_t)0x831C314E, (q31_t)0xE3F47D95, - (q31_t)0x83273E52, (q31_t)0xE3C37473, (q31_t)0x83325E97, - (q31_t)0xE3926FAC, (q31_t)0x833D921A, (q31_t)0xE3616F47, - (q31_t)0x8348D8DB, (q31_t)0xE330734C, (q31_t)0x835432D8, - (q31_t)0xE2FF7BC3, (q31_t)0x835FA00E, (q31_t)0xE2CE88B2, - (q31_t)0x836B207D, (q31_t)0xE29D9A22, (q31_t)0x8376B422, - (q31_t)0xE26CB01A, (q31_t)0x83825AFB, (q31_t)0xE23BCAA2, - (q31_t)0x838E1507, (q31_t)0xE20AE9C1, (q31_t)0x8399E244, - (q31_t)0xE1DA0D7E, (q31_t)0x83A5C2B0, (q31_t)0xE1A935E1, - (q31_t)0x83B1B649, (q31_t)0xE17862F3, (q31_t)0x83BDBD0D, - (q31_t)0xE14794B9, (q31_t)0x83C9D6FB, (q31_t)0xE116CB3D, - (q31_t)0x83D60411, (q31_t)0xE0E60684, (q31_t)0x83E2444D, - (q31_t)0xE0B54698, (q31_t)0x83EE97AC, (q31_t)0xE0848B7F, - (q31_t)0x83FAFE2E, (q31_t)0xE053D541, (q31_t)0x840777CF, - (q31_t)0xE02323E5, (q31_t)0x8414048F, (q31_t)0xDFF27773, - (q31_t)0x8420A46B, (q31_t)0xDFC1CFF2, (q31_t)0x842D5761, - (q31_t)0xDF912D6A, (q31_t)0x843A1D70, (q31_t)0xDF608FE3, - (q31_t)0x8446F695, (q31_t)0xDF2FF764, (q31_t)0x8453E2CE, - (q31_t)0xDEFF63F4, (q31_t)0x8460E21A, (q31_t)0xDECED59B, - (q31_t)0x846DF476, (q31_t)0xDE9E4C60, (q31_t)0x847B19E1, - (q31_t)0xDE6DC84B, (q31_t)0x84885257, (q31_t)0xDE3D4963, - (q31_t)0x84959DD9, (q31_t)0xDE0CCFB1, (q31_t)0x84A2FC62, - (q31_t)0xDDDC5B3A, (q31_t)0x84B06DF1, (q31_t)0xDDABEC07, - (q31_t)0x84BDF285, (q31_t)0xDD7B8220, (q31_t)0x84CB8A1B, - (q31_t)0xDD4B1D8B, (q31_t)0x84D934B0, (q31_t)0xDD1ABE51, - (q31_t)0x84E6F244, (q31_t)0xDCEA6478, (q31_t)0x84F4C2D3, - (q31_t)0xDCBA1008, (q31_t)0x8502A65C, (q31_t)0xDC89C108, - (q31_t)0x85109CDC, (q31_t)0xDC597781, (q31_t)0x851EA652, - (q31_t)0xDC293379, (q31_t)0x852CC2BA, (q31_t)0xDBF8F4F8, - (q31_t)0x853AF214, (q31_t)0xDBC8BC05, (q31_t)0x8549345C, - (q31_t)0xDB9888A8, (q31_t)0x85578991, (q31_t)0xDB685AE8, - (q31_t)0x8565F1B0, (q31_t)0xDB3832CD, (q31_t)0x85746CB7, - (q31_t)0xDB08105E, (q31_t)0x8582FAA4, (q31_t)0xDAD7F3A2, - (q31_t)0x85919B75, (q31_t)0xDAA7DCA1, (q31_t)0x85A04F28, - (q31_t)0xDA77CB62, (q31_t)0x85AF15B9, (q31_t)0xDA47BFED, - (q31_t)0x85BDEF27, (q31_t)0xDA17BA4A, (q31_t)0x85CCDB70, - (q31_t)0xD9E7BA7E, (q31_t)0x85DBDA91, (q31_t)0xD9B7C093, - (q31_t)0x85EAEC88, (q31_t)0xD987CC8F, (q31_t)0x85FA1152, - (q31_t)0xD957DE7A, (q31_t)0x860948EE, (q31_t)0xD927F65B, - (q31_t)0x86189359, (q31_t)0xD8F81439, (q31_t)0x8627F090, - (q31_t)0xD8C8381C, (q31_t)0x86376092, (q31_t)0xD898620C, - (q31_t)0x8646E35B, (q31_t)0xD868920F, (q31_t)0x865678EA, - (q31_t)0xD838C82D, (q31_t)0x8666213C, (q31_t)0xD809046D, - (q31_t)0x8675DC4E, (q31_t)0xD7D946D7, (q31_t)0x8685AA1F, - (q31_t)0xD7A98F73, (q31_t)0x86958AAB, (q31_t)0xD779DE46, - (q31_t)0x86A57DF1, (q31_t)0xD74A335A, (q31_t)0x86B583EE, - (q31_t)0xD71A8EB5, (q31_t)0x86C59C9F, (q31_t)0xD6EAF05E, - (q31_t)0x86D5C802, (q31_t)0xD6BB585D, (q31_t)0x86E60614, - (q31_t)0xD68BC6BA, (q31_t)0x86F656D3, (q31_t)0xD65C3B7B, - (q31_t)0x8706BA3C, (q31_t)0xD62CB6A7, (q31_t)0x8717304E, - (q31_t)0xD5FD3847, (q31_t)0x8727B904, (q31_t)0xD5CDC062, - (q31_t)0x8738545E, (q31_t)0xD59E4EFE, (q31_t)0x87490257, - (q31_t)0xD56EE424, (q31_t)0x8759C2EF, (q31_t)0xD53F7FDA, - (q31_t)0x876A9621, (q31_t)0xD5102227, (q31_t)0x877B7BEC, - (q31_t)0xD4E0CB14, (q31_t)0x878C744C, (q31_t)0xD4B17AA7, - (q31_t)0x879D7F40, (q31_t)0xD48230E8, (q31_t)0x87AE9CC5, - (q31_t)0xD452EDDE, (q31_t)0x87BFCCD7, (q31_t)0xD423B190, - (q31_t)0x87D10F75, (q31_t)0xD3F47C06, (q31_t)0x87E2649B, - (q31_t)0xD3C54D46, (q31_t)0x87F3CC47, (q31_t)0xD3962559, - (q31_t)0x88054677, (q31_t)0xD3670445, (q31_t)0x8816D327, - (q31_t)0xD337EA12, (q31_t)0x88287255, (q31_t)0xD308D6C6, - (q31_t)0x883A23FE, (q31_t)0xD2D9CA6A, (q31_t)0x884BE820, - (q31_t)0xD2AAC504, (q31_t)0x885DBEB7, (q31_t)0xD27BC69C, - (q31_t)0x886FA7C2, (q31_t)0xD24CCF38, (q31_t)0x8881A33C, - (q31_t)0xD21DDEE1, (q31_t)0x8893B124, (q31_t)0xD1EEF59E, - (q31_t)0x88A5D177, (q31_t)0xD1C01374, (q31_t)0x88B80431, - (q31_t)0xD191386D, (q31_t)0x88CA4951, (q31_t)0xD162648F, - (q31_t)0x88DCA0D3, (q31_t)0xD13397E1, (q31_t)0x88EF0AB4, - (q31_t)0xD104D26B, (q31_t)0x890186F1, (q31_t)0xD0D61433, - (q31_t)0x89141589, (q31_t)0xD0A75D42, (q31_t)0x8926B677, - (q31_t)0xD078AD9D, (q31_t)0x893969B9, (q31_t)0xD04A054D, - (q31_t)0x894C2F4C, (q31_t)0xD01B6459, (q31_t)0x895F072D, - (q31_t)0xCFECCAC7, (q31_t)0x8971F15A, (q31_t)0xCFBE389F, - (q31_t)0x8984EDCF, (q31_t)0xCF8FADE8, (q31_t)0x8997FC89, - (q31_t)0xCF612AAA, (q31_t)0x89AB1D86, (q31_t)0xCF32AEEB, - (q31_t)0x89BE50C3, (q31_t)0xCF043AB2, (q31_t)0x89D1963C, - (q31_t)0xCED5CE08, (q31_t)0x89E4EDEE, (q31_t)0xCEA768F2, - (q31_t)0x89F857D8, (q31_t)0xCE790B78, (q31_t)0x8A0BD3F5, - (q31_t)0xCE4AB5A2, (q31_t)0x8A1F6242, (q31_t)0xCE1C6776, - (q31_t)0x8A3302BD, (q31_t)0xCDEE20FC, (q31_t)0x8A46B563, - (q31_t)0xCDBFE23A, (q31_t)0x8A5A7A30, (q31_t)0xCD91AB38, - (q31_t)0x8A6E5122, (q31_t)0xCD637BFD, (q31_t)0x8A823A35, - (q31_t)0xCD355490, (q31_t)0x8A963567, (q31_t)0xCD0734F8, - (q31_t)0x8AAA42B4, (q31_t)0xCCD91D3D, (q31_t)0x8ABE6219, - (q31_t)0xCCAB0D65, (q31_t)0x8AD29393, (q31_t)0xCC7D0577, - (q31_t)0x8AE6D71F, (q31_t)0xCC4F057B, (q31_t)0x8AFB2CBA, - (q31_t)0xCC210D78, (q31_t)0x8B0F9461, (q31_t)0xCBF31D75, - (q31_t)0x8B240E10, (q31_t)0xCBC53578, (q31_t)0x8B3899C5, - (q31_t)0xCB975589, (q31_t)0x8B4D377C, (q31_t)0xCB697DB0, - (q31_t)0x8B61E732, (q31_t)0xCB3BADF2, (q31_t)0x8B76A8E4, - (q31_t)0xCB0DE658, (q31_t)0x8B8B7C8F, (q31_t)0xCAE026E8, - (q31_t)0x8BA0622F, (q31_t)0xCAB26FA9, (q31_t)0x8BB559C1, - (q31_t)0xCA84C0A2, (q31_t)0x8BCA6342, (q31_t)0xCA5719DB, - (q31_t)0x8BDF7EAF, (q31_t)0xCA297B5A, (q31_t)0x8BF4AC05, - (q31_t)0xC9FBE527, (q31_t)0x8C09EB40, (q31_t)0xC9CE5748, - (q31_t)0x8C1F3C5C, (q31_t)0xC9A0D1C4, (q31_t)0x8C349F58, - (q31_t)0xC97354A3, (q31_t)0x8C4A142F, (q31_t)0xC945DFEC, - (q31_t)0x8C5F9ADD, (q31_t)0xC91873A5, (q31_t)0x8C753361, - (q31_t)0xC8EB0FD6, (q31_t)0x8C8ADDB6, (q31_t)0xC8BDB485, - (q31_t)0x8CA099D9, (q31_t)0xC89061BA, (q31_t)0x8CB667C7, - (q31_t)0xC863177B, (q31_t)0x8CCC477D, (q31_t)0xC835D5D0, - (q31_t)0x8CE238F6, (q31_t)0xC8089CBF, (q31_t)0x8CF83C30, - (q31_t)0xC7DB6C50, (q31_t)0x8D0E5127, (q31_t)0xC7AE4489, - (q31_t)0x8D2477D8, (q31_t)0xC7812571, (q31_t)0x8D3AB03F, - (q31_t)0xC7540F10, (q31_t)0x8D50FA59, (q31_t)0xC727016C, - (q31_t)0x8D675623, (q31_t)0xC6F9FC8D, (q31_t)0x8D7DC399, - (q31_t)0xC6CD0079, (q31_t)0x8D9442B7, (q31_t)0xC6A00D36, - (q31_t)0x8DAAD37B, (q31_t)0xC67322CD, (q31_t)0x8DC175E0, - (q31_t)0xC6464144, (q31_t)0x8DD829E4, (q31_t)0xC61968A2, - (q31_t)0x8DEEEF82, (q31_t)0xC5EC98ED, (q31_t)0x8E05C6B7, - (q31_t)0xC5BFD22E, (q31_t)0x8E1CAF80, (q31_t)0xC593146A, - (q31_t)0x8E33A9D9, (q31_t)0xC5665FA8, (q31_t)0x8E4AB5BF, - (q31_t)0xC539B3F0, (q31_t)0x8E61D32D, (q31_t)0xC50D1148, - (q31_t)0x8E790222, (q31_t)0xC4E077B8, (q31_t)0x8E904298, - (q31_t)0xC4B3E746, (q31_t)0x8EA7948C, (q31_t)0xC4875FF8, - (q31_t)0x8EBEF7FB, (q31_t)0xC45AE1D7, (q31_t)0x8ED66CE1, - (q31_t)0xC42E6CE8, (q31_t)0x8EEDF33B, (q31_t)0xC4020132, - (q31_t)0x8F058B04, (q31_t)0xC3D59EBD, (q31_t)0x8F1D343A, - (q31_t)0xC3A9458F, (q31_t)0x8F34EED8, (q31_t)0xC37CF5B0, - (q31_t)0x8F4CBADB, (q31_t)0xC350AF25, (q31_t)0x8F64983F, - (q31_t)0xC32471F6, (q31_t)0x8F7C8701, (q31_t)0xC2F83E2A, - (q31_t)0x8F94871D, (q31_t)0xC2CC13C7, (q31_t)0x8FAC988E, - (q31_t)0xC29FF2D4, (q31_t)0x8FC4BB53, (q31_t)0xC273DB58, - (q31_t)0x8FDCEF66, (q31_t)0xC247CD5A, (q31_t)0x8FF534C4, - (q31_t)0xC21BC8E0, (q31_t)0x900D8B69, (q31_t)0xC1EFCDF2, - (q31_t)0x9025F352, (q31_t)0xC1C3DC96, (q31_t)0x903E6C7A, - (q31_t)0xC197F4D3, (q31_t)0x9056F6DF, (q31_t)0xC16C16B0, - (q31_t)0x906F927B, (q31_t)0xC1404233, (q31_t)0x90883F4C, - (q31_t)0xC1147763, (q31_t)0x90A0FD4E, (q31_t)0xC0E8B648, - (q31_t)0x90B9CC7C, (q31_t)0xC0BCFEE7, (q31_t)0x90D2ACD3, - (q31_t)0xC0915147, (q31_t)0x90EB9E50, (q31_t)0xC065AD70, - (q31_t)0x9104A0ED, (q31_t)0xC03A1368, (q31_t)0x911DB4A8, - (q31_t)0xC00E8335, (q31_t)0x9136D97D, (q31_t)0xBFE2FCDF, - (q31_t)0x91500F67, (q31_t)0xBFB7806C, (q31_t)0x91695663, - (q31_t)0xBF8C0DE2, (q31_t)0x9182AE6C, (q31_t)0xBF60A54A, - (q31_t)0x919C1780, (q31_t)0xBF3546A8, (q31_t)0x91B5919A, - (q31_t)0xBF09F204, (q31_t)0x91CF1CB6, (q31_t)0xBEDEA765, - (q31_t)0x91E8B8D0, (q31_t)0xBEB366D1, (q31_t)0x920265E4, - (q31_t)0xBE88304F, (q31_t)0x921C23EE, (q31_t)0xBE5D03E5, - (q31_t)0x9235F2EB, (q31_t)0xBE31E19B, (q31_t)0x924FD2D6, - (q31_t)0xBE06C977, (q31_t)0x9269C3AC, (q31_t)0xBDDBBB7F, - (q31_t)0x9283C567, (q31_t)0xBDB0B7BA, (q31_t)0x929DD805, - (q31_t)0xBD85BE2F, (q31_t)0x92B7FB82, (q31_t)0xBD5ACEE5, - (q31_t)0x92D22FD8, (q31_t)0xBD2FE9E1, (q31_t)0x92EC7505, - (q31_t)0xBD050F2C, (q31_t)0x9306CB04, (q31_t)0xBCDA3ECA, - (q31_t)0x932131D1, (q31_t)0xBCAF78C3, (q31_t)0x933BA968, - (q31_t)0xBC84BD1E, (q31_t)0x935631C5, (q31_t)0xBC5A0BE1, - (q31_t)0x9370CAE4, (q31_t)0xBC2F6513, (q31_t)0x938B74C0, - (q31_t)0xBC04C8BA, (q31_t)0x93A62F56, (q31_t)0xBBDA36DC, - (q31_t)0x93C0FAA2, (q31_t)0xBBAFAF81, (q31_t)0x93DBD69F, - (q31_t)0xBB8532AF, (q31_t)0x93F6C34A, (q31_t)0xBB5AC06C, - (q31_t)0x9411C09D, (q31_t)0xBB3058C0, (q31_t)0x942CCE95, - (q31_t)0xBB05FBB0, (q31_t)0x9447ED2F, (q31_t)0xBADBA943, - (q31_t)0x94631C64, (q31_t)0xBAB1617F, (q31_t)0x947E5C32, - (q31_t)0xBA87246C, (q31_t)0x9499AC95, (q31_t)0xBA5CF210, - (q31_t)0x94B50D87, (q31_t)0xBA32CA70, (q31_t)0x94D07F05, - (q31_t)0xBA08AD94, (q31_t)0x94EC010B, (q31_t)0xB9DE9B83, - (q31_t)0x95079393, (q31_t)0xB9B49442, (q31_t)0x9523369B, - (q31_t)0xB98A97D8, (q31_t)0x953EEA1E, (q31_t)0xB960A64B, - (q31_t)0x955AAE17, (q31_t)0xB936BFA3, (q31_t)0x95768282, - (q31_t)0xB90CE3E6, (q31_t)0x9592675B, (q31_t)0xB8E31319, - (q31_t)0x95AE5C9E, (q31_t)0xB8B94D44, (q31_t)0x95CA6246, - (q31_t)0xB88F926C, (q31_t)0x95E6784F, (q31_t)0xB865E299, - (q31_t)0x96029EB5, (q31_t)0xB83C3DD1, (q31_t)0x961ED573, - (q31_t)0xB812A419, (q31_t)0x963B1C85, (q31_t)0xB7E9157A, - (q31_t)0x965773E7, (q31_t)0xB7BF91F8, (q31_t)0x9673DB94, - (q31_t)0xB796199B, (q31_t)0x96905387, (q31_t)0xB76CAC68, - (q31_t)0x96ACDBBD, (q31_t)0xB7434A67, (q31_t)0x96C97431, - (q31_t)0xB719F39D, (q31_t)0x96E61CDF, (q31_t)0xB6F0A811, - (q31_t)0x9702D5C2, (q31_t)0xB6C767CA, (q31_t)0x971F9ED6, - (q31_t)0xB69E32CD, (q31_t)0x973C7816, (q31_t)0xB6750921, - (q31_t)0x9759617E, (q31_t)0xB64BEACC, (q31_t)0x97765B0A, - (q31_t)0xB622D7D5, (q31_t)0x979364B5, (q31_t)0xB5F9D042, - (q31_t)0x97B07E7A, (q31_t)0xB5D0D41A, (q31_t)0x97CDA855, - (q31_t)0xB5A7E362, (q31_t)0x97EAE241, (q31_t)0xB57EFE21, - (q31_t)0x98082C3B, (q31_t)0xB556245E, (q31_t)0x9825863D, - (q31_t)0xB52D561E, (q31_t)0x9842F043, (q31_t)0xB5049368, - (q31_t)0x98606A48, (q31_t)0xB4DBDC42, (q31_t)0x987DF449, - (q31_t)0xB4B330B2, (q31_t)0x989B8E3F, (q31_t)0xB48A90C0, - (q31_t)0x98B93828, (q31_t)0xB461FC70, (q31_t)0x98D6F1FE, - (q31_t)0xB43973C9, (q31_t)0x98F4BBBC, (q31_t)0xB410F6D2, - (q31_t)0x9912955E, (q31_t)0xB3E88591, (q31_t)0x99307EE0, - (q31_t)0xB3C0200C, (q31_t)0x994E783C, (q31_t)0xB397C649, - (q31_t)0x996C816F, (q31_t)0xB36F784E, (q31_t)0x998A9A73, - (q31_t)0xB3473622, (q31_t)0x99A8C344, (q31_t)0xB31EFFCB, - (q31_t)0x99C6FBDE, (q31_t)0xB2F6D54F, (q31_t)0x99E5443A, - (q31_t)0xB2CEB6B5, (q31_t)0x9A039C56, (q31_t)0xB2A6A401, - (q31_t)0x9A22042C, (q31_t)0xB27E9D3B, (q31_t)0x9A407BB8, - (q31_t)0xB256A26A, (q31_t)0x9A5F02F5, (q31_t)0xB22EB392, - (q31_t)0x9A7D99DD, (q31_t)0xB206D0BA, (q31_t)0x9A9C406D, - (q31_t)0xB1DEF9E8, (q31_t)0x9ABAF6A0, (q31_t)0xB1B72F23, - (q31_t)0x9AD9BC71, (q31_t)0xB18F7070, (q31_t)0x9AF891DB, - (q31_t)0xB167BDD6, (q31_t)0x9B1776D9, (q31_t)0xB140175B, - (q31_t)0x9B366B67, (q31_t)0xB1187D05, (q31_t)0x9B556F80, - (q31_t)0xB0F0EEDA, (q31_t)0x9B748320, (q31_t)0xB0C96CDF, - (q31_t)0x9B93A640, (q31_t)0xB0A1F71C, (q31_t)0x9BB2D8DD, - (q31_t)0xB07A8D97, (q31_t)0x9BD21AF2, (q31_t)0xB0533055, - (q31_t)0x9BF16C7A, (q31_t)0xB02BDF5C, (q31_t)0x9C10CD70, - (q31_t)0xB0049AB2, (q31_t)0x9C303DCF, (q31_t)0xAFDD625F, - (q31_t)0x9C4FBD92, (q31_t)0xAFB63667, (q31_t)0x9C6F4CB5, - (q31_t)0xAF8F16D0, (q31_t)0x9C8EEB33, (q31_t)0xAF6803A1, - (q31_t)0x9CAE9907, (q31_t)0xAF40FCE0, (q31_t)0x9CCE562B, - (q31_t)0xAF1A0293, (q31_t)0x9CEE229C, (q31_t)0xAEF314BF, - (q31_t)0x9D0DFE53, (q31_t)0xAECC336B, (q31_t)0x9D2DE94D, - (q31_t)0xAEA55E9D, (q31_t)0x9D4DE384, (q31_t)0xAE7E965B, - (q31_t)0x9D6DECF4, (q31_t)0xAE57DAAA, (q31_t)0x9D8E0596, - (q31_t)0xAE312B91, (q31_t)0x9DAE2D68, (q31_t)0xAE0A8916, - (q31_t)0x9DCE6462, (q31_t)0xADE3F33E, (q31_t)0x9DEEAA82, - (q31_t)0xADBD6A10, (q31_t)0x9E0EFFC1, (q31_t)0xAD96ED91, - (q31_t)0x9E2F641A, (q31_t)0xAD707DC8, (q31_t)0x9E4FD789, - (q31_t)0xAD4A1ABA, (q31_t)0x9E705A09, (q31_t)0xAD23C46D, - (q31_t)0x9E90EB94, (q31_t)0xACFD7AE8, (q31_t)0x9EB18C26, - (q31_t)0xACD73E30, (q31_t)0x9ED23BB9, (q31_t)0xACB10E4A, - (q31_t)0x9EF2FA48, (q31_t)0xAC8AEB3E, (q31_t)0x9F13C7D0, - (q31_t)0xAC64D510, (q31_t)0x9F34A449, (q31_t)0xAC3ECBC7, - (q31_t)0x9F558FB0, (q31_t)0xAC18CF68, (q31_t)0x9F7689FF, - (q31_t)0xABF2DFFA, (q31_t)0x9F979331, (q31_t)0xABCCFD82, - (q31_t)0x9FB8AB41, (q31_t)0xABA72806, (q31_t)0x9FD9D22A, - (q31_t)0xAB815F8C, (q31_t)0x9FFB07E7, (q31_t)0xAB5BA41A, - (q31_t)0xA01C4C72, (q31_t)0xAB35F5B5, (q31_t)0xA03D9FC7, - (q31_t)0xAB105464, (q31_t)0xA05F01E1, (q31_t)0xAAEAC02B, - (q31_t)0xA08072BA, (q31_t)0xAAC53912, (q31_t)0xA0A1F24C, - (q31_t)0xAA9FBF1D, (q31_t)0xA0C38094, (q31_t)0xAA7A5253, - (q31_t)0xA0E51D8C, (q31_t)0xAA54F2B9, (q31_t)0xA106C92E, - (q31_t)0xAA2FA055, (q31_t)0xA1288376, (q31_t)0xAA0A5B2D, - (q31_t)0xA14A4C5E, (q31_t)0xA9E52347, (q31_t)0xA16C23E1, - (q31_t)0xA9BFF8A8, (q31_t)0xA18E09F9, (q31_t)0xA99ADB56, - (q31_t)0xA1AFFEA2, (q31_t)0xA975CB56, (q31_t)0xA1D201D7, - (q31_t)0xA950C8AF, (q31_t)0xA1F41391, (q31_t)0xA92BD366, - (q31_t)0xA21633CD, (q31_t)0xA906EB81, (q31_t)0xA2386283, - (q31_t)0xA8E21106, (q31_t)0xA25A9FB1, (q31_t)0xA8BD43FA, - (q31_t)0xA27CEB4F, (q31_t)0xA8988463, (q31_t)0xA29F4559, - (q31_t)0xA873D246, (q31_t)0xA2C1ADC9, (q31_t)0xA84F2DA9, - (q31_t)0xA2E4249A, (q31_t)0xA82A9693, (q31_t)0xA306A9C7, - (q31_t)0xA8060D08, (q31_t)0xA3293D4B, (q31_t)0xA7E1910E, - (q31_t)0xA34BDF20, (q31_t)0xA7BD22AB, (q31_t)0xA36E8F40, - (q31_t)0xA798C1E4, (q31_t)0xA3914DA7, (q31_t)0xA7746EC0, - (q31_t)0xA3B41A4F, (q31_t)0xA7502943, (q31_t)0xA3D6F533, - (q31_t)0xA72BF173, (q31_t)0xA3F9DE4D, (q31_t)0xA707C756, - (q31_t)0xA41CD598, (q31_t)0xA6E3AAF2, (q31_t)0xA43FDB0F, - (q31_t)0xA6BF9C4B, (q31_t)0xA462EEAC, (q31_t)0xA69B9B68, - (q31_t)0xA4861069, (q31_t)0xA677A84E, (q31_t)0xA4A94042, - (q31_t)0xA653C302, (q31_t)0xA4CC7E31, (q31_t)0xA62FEB8B, - (q31_t)0xA4EFCA31, (q31_t)0xA60C21ED, (q31_t)0xA513243B, - (q31_t)0xA5E8662F, (q31_t)0xA5368C4B, (q31_t)0xA5C4B855, - (q31_t)0xA55A025B, (q31_t)0xA5A11865, (q31_t)0xA57D8666, - (q31_t)0xA57D8666, (q31_t)0xA5A11865, (q31_t)0xA55A025B, - (q31_t)0xA5C4B855, (q31_t)0xA5368C4B, (q31_t)0xA5E8662F, - (q31_t)0xA513243B, (q31_t)0xA60C21ED, (q31_t)0xA4EFCA31, - (q31_t)0xA62FEB8B, (q31_t)0xA4CC7E31, (q31_t)0xA653C302, - (q31_t)0xA4A94042, (q31_t)0xA677A84E, (q31_t)0xA4861069, - (q31_t)0xA69B9B68, (q31_t)0xA462EEAC, (q31_t)0xA6BF9C4B, - (q31_t)0xA43FDB0F, (q31_t)0xA6E3AAF2, (q31_t)0xA41CD598, - (q31_t)0xA707C756, (q31_t)0xA3F9DE4D, (q31_t)0xA72BF173, - (q31_t)0xA3D6F533, (q31_t)0xA7502943, (q31_t)0xA3B41A4F, - (q31_t)0xA7746EC0, (q31_t)0xA3914DA7, (q31_t)0xA798C1E4, - (q31_t)0xA36E8F40, (q31_t)0xA7BD22AB, (q31_t)0xA34BDF20, - (q31_t)0xA7E1910E, (q31_t)0xA3293D4B, (q31_t)0xA8060D08, - (q31_t)0xA306A9C7, (q31_t)0xA82A9693, (q31_t)0xA2E4249A, - (q31_t)0xA84F2DA9, (q31_t)0xA2C1ADC9, (q31_t)0xA873D246, - (q31_t)0xA29F4559, (q31_t)0xA8988463, (q31_t)0xA27CEB4F, - (q31_t)0xA8BD43FA, (q31_t)0xA25A9FB1, (q31_t)0xA8E21106, - (q31_t)0xA2386283, (q31_t)0xA906EB81, (q31_t)0xA21633CD, - (q31_t)0xA92BD366, (q31_t)0xA1F41391, (q31_t)0xA950C8AF, - (q31_t)0xA1D201D7, (q31_t)0xA975CB56, (q31_t)0xA1AFFEA2, - (q31_t)0xA99ADB56, (q31_t)0xA18E09F9, (q31_t)0xA9BFF8A8, - (q31_t)0xA16C23E1, (q31_t)0xA9E52347, (q31_t)0xA14A4C5E, - (q31_t)0xAA0A5B2D, (q31_t)0xA1288376, (q31_t)0xAA2FA055, - (q31_t)0xA106C92E, (q31_t)0xAA54F2B9, (q31_t)0xA0E51D8C, - (q31_t)0xAA7A5253, (q31_t)0xA0C38094, (q31_t)0xAA9FBF1D, - (q31_t)0xA0A1F24C, (q31_t)0xAAC53912, (q31_t)0xA08072BA, - (q31_t)0xAAEAC02B, (q31_t)0xA05F01E1, (q31_t)0xAB105464, - (q31_t)0xA03D9FC7, (q31_t)0xAB35F5B5, (q31_t)0xA01C4C72, - (q31_t)0xAB5BA41A, (q31_t)0x9FFB07E7, (q31_t)0xAB815F8C, - (q31_t)0x9FD9D22A, (q31_t)0xABA72806, (q31_t)0x9FB8AB41, - (q31_t)0xABCCFD82, (q31_t)0x9F979331, (q31_t)0xABF2DFFA, - (q31_t)0x9F7689FF, (q31_t)0xAC18CF68, (q31_t)0x9F558FB0, - (q31_t)0xAC3ECBC7, (q31_t)0x9F34A449, (q31_t)0xAC64D510, - (q31_t)0x9F13C7D0, (q31_t)0xAC8AEB3E, (q31_t)0x9EF2FA48, - (q31_t)0xACB10E4A, (q31_t)0x9ED23BB9, (q31_t)0xACD73E30, - (q31_t)0x9EB18C26, (q31_t)0xACFD7AE8, (q31_t)0x9E90EB94, - (q31_t)0xAD23C46D, (q31_t)0x9E705A09, (q31_t)0xAD4A1ABA, - (q31_t)0x9E4FD789, (q31_t)0xAD707DC8, (q31_t)0x9E2F641A, - (q31_t)0xAD96ED91, (q31_t)0x9E0EFFC1, (q31_t)0xADBD6A10, - (q31_t)0x9DEEAA82, (q31_t)0xADE3F33E, (q31_t)0x9DCE6462, - (q31_t)0xAE0A8916, (q31_t)0x9DAE2D68, (q31_t)0xAE312B91, - (q31_t)0x9D8E0596, (q31_t)0xAE57DAAA, (q31_t)0x9D6DECF4, - (q31_t)0xAE7E965B, (q31_t)0x9D4DE384, (q31_t)0xAEA55E9D, - (q31_t)0x9D2DE94D, (q31_t)0xAECC336B, (q31_t)0x9D0DFE53, - (q31_t)0xAEF314BF, (q31_t)0x9CEE229C, (q31_t)0xAF1A0293, - (q31_t)0x9CCE562B, (q31_t)0xAF40FCE0, (q31_t)0x9CAE9907, - (q31_t)0xAF6803A1, (q31_t)0x9C8EEB33, (q31_t)0xAF8F16D0, - (q31_t)0x9C6F4CB5, (q31_t)0xAFB63667, (q31_t)0x9C4FBD92, - (q31_t)0xAFDD625F, (q31_t)0x9C303DCF, (q31_t)0xB0049AB2, - (q31_t)0x9C10CD70, (q31_t)0xB02BDF5C, (q31_t)0x9BF16C7A, - (q31_t)0xB0533055, (q31_t)0x9BD21AF2, (q31_t)0xB07A8D97, - (q31_t)0x9BB2D8DD, (q31_t)0xB0A1F71C, (q31_t)0x9B93A640, - (q31_t)0xB0C96CDF, (q31_t)0x9B748320, (q31_t)0xB0F0EEDA, - (q31_t)0x9B556F80, (q31_t)0xB1187D05, (q31_t)0x9B366B67, - (q31_t)0xB140175B, (q31_t)0x9B1776D9, (q31_t)0xB167BDD6, - (q31_t)0x9AF891DB, (q31_t)0xB18F7070, (q31_t)0x9AD9BC71, - (q31_t)0xB1B72F23, (q31_t)0x9ABAF6A0, (q31_t)0xB1DEF9E8, - (q31_t)0x9A9C406D, (q31_t)0xB206D0BA, (q31_t)0x9A7D99DD, - (q31_t)0xB22EB392, (q31_t)0x9A5F02F5, (q31_t)0xB256A26A, - (q31_t)0x9A407BB8, (q31_t)0xB27E9D3B, (q31_t)0x9A22042C, - (q31_t)0xB2A6A401, (q31_t)0x9A039C56, (q31_t)0xB2CEB6B5, - (q31_t)0x99E5443A, (q31_t)0xB2F6D54F, (q31_t)0x99C6FBDE, - (q31_t)0xB31EFFCB, (q31_t)0x99A8C344, (q31_t)0xB3473622, - (q31_t)0x998A9A73, (q31_t)0xB36F784E, (q31_t)0x996C816F, - (q31_t)0xB397C649, (q31_t)0x994E783C, (q31_t)0xB3C0200C, - (q31_t)0x99307EE0, (q31_t)0xB3E88591, (q31_t)0x9912955E, - (q31_t)0xB410F6D2, (q31_t)0x98F4BBBC, (q31_t)0xB43973C9, - (q31_t)0x98D6F1FE, (q31_t)0xB461FC70, (q31_t)0x98B93828, - (q31_t)0xB48A90C0, (q31_t)0x989B8E3F, (q31_t)0xB4B330B2, - (q31_t)0x987DF449, (q31_t)0xB4DBDC42, (q31_t)0x98606A48, - (q31_t)0xB5049368, (q31_t)0x9842F043, (q31_t)0xB52D561E, - (q31_t)0x9825863D, (q31_t)0xB556245E, (q31_t)0x98082C3B, - (q31_t)0xB57EFE21, (q31_t)0x97EAE241, (q31_t)0xB5A7E362, - (q31_t)0x97CDA855, (q31_t)0xB5D0D41A, (q31_t)0x97B07E7A, - (q31_t)0xB5F9D042, (q31_t)0x979364B5, (q31_t)0xB622D7D5, - (q31_t)0x97765B0A, (q31_t)0xB64BEACC, (q31_t)0x9759617E, - (q31_t)0xB6750921, (q31_t)0x973C7816, (q31_t)0xB69E32CD, - (q31_t)0x971F9ED6, (q31_t)0xB6C767CA, (q31_t)0x9702D5C2, - (q31_t)0xB6F0A811, (q31_t)0x96E61CDF, (q31_t)0xB719F39D, - (q31_t)0x96C97431, (q31_t)0xB7434A67, (q31_t)0x96ACDBBD, - (q31_t)0xB76CAC68, (q31_t)0x96905387, (q31_t)0xB796199B, - (q31_t)0x9673DB94, (q31_t)0xB7BF91F8, (q31_t)0x965773E7, - (q31_t)0xB7E9157A, (q31_t)0x963B1C85, (q31_t)0xB812A419, - (q31_t)0x961ED573, (q31_t)0xB83C3DD1, (q31_t)0x96029EB5, - (q31_t)0xB865E299, (q31_t)0x95E6784F, (q31_t)0xB88F926C, - (q31_t)0x95CA6246, (q31_t)0xB8B94D44, (q31_t)0x95AE5C9E, - (q31_t)0xB8E31319, (q31_t)0x9592675B, (q31_t)0xB90CE3E6, - (q31_t)0x95768282, (q31_t)0xB936BFA3, (q31_t)0x955AAE17, - (q31_t)0xB960A64B, (q31_t)0x953EEA1E, (q31_t)0xB98A97D8, - (q31_t)0x9523369B, (q31_t)0xB9B49442, (q31_t)0x95079393, - (q31_t)0xB9DE9B83, (q31_t)0x94EC010B, (q31_t)0xBA08AD94, - (q31_t)0x94D07F05, (q31_t)0xBA32CA70, (q31_t)0x94B50D87, - (q31_t)0xBA5CF210, (q31_t)0x9499AC95, (q31_t)0xBA87246C, - (q31_t)0x947E5C32, (q31_t)0xBAB1617F, (q31_t)0x94631C64, - (q31_t)0xBADBA943, (q31_t)0x9447ED2F, (q31_t)0xBB05FBB0, - (q31_t)0x942CCE95, (q31_t)0xBB3058C0, (q31_t)0x9411C09D, - (q31_t)0xBB5AC06C, (q31_t)0x93F6C34A, (q31_t)0xBB8532AF, - (q31_t)0x93DBD69F, (q31_t)0xBBAFAF81, (q31_t)0x93C0FAA2, - (q31_t)0xBBDA36DC, (q31_t)0x93A62F56, (q31_t)0xBC04C8BA, - (q31_t)0x938B74C0, (q31_t)0xBC2F6513, (q31_t)0x9370CAE4, - (q31_t)0xBC5A0BE1, (q31_t)0x935631C5, (q31_t)0xBC84BD1E, - (q31_t)0x933BA968, (q31_t)0xBCAF78C3, (q31_t)0x932131D1, - (q31_t)0xBCDA3ECA, (q31_t)0x9306CB04, (q31_t)0xBD050F2C, - (q31_t)0x92EC7505, (q31_t)0xBD2FE9E1, (q31_t)0x92D22FD8, - (q31_t)0xBD5ACEE5, (q31_t)0x92B7FB82, (q31_t)0xBD85BE2F, - (q31_t)0x929DD805, (q31_t)0xBDB0B7BA, (q31_t)0x9283C567, - (q31_t)0xBDDBBB7F, (q31_t)0x9269C3AC, (q31_t)0xBE06C977, - (q31_t)0x924FD2D6, (q31_t)0xBE31E19B, (q31_t)0x9235F2EB, - (q31_t)0xBE5D03E5, (q31_t)0x921C23EE, (q31_t)0xBE88304F, - (q31_t)0x920265E4, (q31_t)0xBEB366D1, (q31_t)0x91E8B8D0, - (q31_t)0xBEDEA765, (q31_t)0x91CF1CB6, (q31_t)0xBF09F204, - (q31_t)0x91B5919A, (q31_t)0xBF3546A8, (q31_t)0x919C1780, - (q31_t)0xBF60A54A, (q31_t)0x9182AE6C, (q31_t)0xBF8C0DE2, - (q31_t)0x91695663, (q31_t)0xBFB7806C, (q31_t)0x91500F67, - (q31_t)0xBFE2FCDF, (q31_t)0x9136D97D, (q31_t)0xC00E8335, - (q31_t)0x911DB4A8, (q31_t)0xC03A1368, (q31_t)0x9104A0ED, - (q31_t)0xC065AD70, (q31_t)0x90EB9E50, (q31_t)0xC0915147, - (q31_t)0x90D2ACD3, (q31_t)0xC0BCFEE7, (q31_t)0x90B9CC7C, - (q31_t)0xC0E8B648, (q31_t)0x90A0FD4E, (q31_t)0xC1147763, - (q31_t)0x90883F4C, (q31_t)0xC1404233, (q31_t)0x906F927B, - (q31_t)0xC16C16B0, (q31_t)0x9056F6DF, (q31_t)0xC197F4D3, - (q31_t)0x903E6C7A, (q31_t)0xC1C3DC96, (q31_t)0x9025F352, - (q31_t)0xC1EFCDF2, (q31_t)0x900D8B69, (q31_t)0xC21BC8E0, - (q31_t)0x8FF534C4, (q31_t)0xC247CD5A, (q31_t)0x8FDCEF66, - (q31_t)0xC273DB58, (q31_t)0x8FC4BB53, (q31_t)0xC29FF2D4, - (q31_t)0x8FAC988E, (q31_t)0xC2CC13C7, (q31_t)0x8F94871D, - (q31_t)0xC2F83E2A, (q31_t)0x8F7C8701, (q31_t)0xC32471F6, - (q31_t)0x8F64983F, (q31_t)0xC350AF25, (q31_t)0x8F4CBADB, - (q31_t)0xC37CF5B0, (q31_t)0x8F34EED8, (q31_t)0xC3A9458F, - (q31_t)0x8F1D343A, (q31_t)0xC3D59EBD, (q31_t)0x8F058B04, - (q31_t)0xC4020132, (q31_t)0x8EEDF33B, (q31_t)0xC42E6CE8, - (q31_t)0x8ED66CE1, (q31_t)0xC45AE1D7, (q31_t)0x8EBEF7FB, - (q31_t)0xC4875FF8, (q31_t)0x8EA7948C, (q31_t)0xC4B3E746, - (q31_t)0x8E904298, (q31_t)0xC4E077B8, (q31_t)0x8E790222, - (q31_t)0xC50D1148, (q31_t)0x8E61D32D, (q31_t)0xC539B3F0, - (q31_t)0x8E4AB5BF, (q31_t)0xC5665FA8, (q31_t)0x8E33A9D9, - (q31_t)0xC593146A, (q31_t)0x8E1CAF80, (q31_t)0xC5BFD22E, - (q31_t)0x8E05C6B7, (q31_t)0xC5EC98ED, (q31_t)0x8DEEEF82, - (q31_t)0xC61968A2, (q31_t)0x8DD829E4, (q31_t)0xC6464144, - (q31_t)0x8DC175E0, (q31_t)0xC67322CD, (q31_t)0x8DAAD37B, - (q31_t)0xC6A00D36, (q31_t)0x8D9442B7, (q31_t)0xC6CD0079, - (q31_t)0x8D7DC399, (q31_t)0xC6F9FC8D, (q31_t)0x8D675623, - (q31_t)0xC727016C, (q31_t)0x8D50FA59, (q31_t)0xC7540F10, - (q31_t)0x8D3AB03F, (q31_t)0xC7812571, (q31_t)0x8D2477D8, - (q31_t)0xC7AE4489, (q31_t)0x8D0E5127, (q31_t)0xC7DB6C50, - (q31_t)0x8CF83C30, (q31_t)0xC8089CBF, (q31_t)0x8CE238F6, - (q31_t)0xC835D5D0, (q31_t)0x8CCC477D, (q31_t)0xC863177B, - (q31_t)0x8CB667C7, (q31_t)0xC89061BA, (q31_t)0x8CA099D9, - (q31_t)0xC8BDB485, (q31_t)0x8C8ADDB6, (q31_t)0xC8EB0FD6, - (q31_t)0x8C753361, (q31_t)0xC91873A5, (q31_t)0x8C5F9ADD, - (q31_t)0xC945DFEC, (q31_t)0x8C4A142F, (q31_t)0xC97354A3, - (q31_t)0x8C349F58, (q31_t)0xC9A0D1C4, (q31_t)0x8C1F3C5C, - (q31_t)0xC9CE5748, (q31_t)0x8C09EB40, (q31_t)0xC9FBE527, - (q31_t)0x8BF4AC05, (q31_t)0xCA297B5A, (q31_t)0x8BDF7EAF, - (q31_t)0xCA5719DB, (q31_t)0x8BCA6342, (q31_t)0xCA84C0A2, - (q31_t)0x8BB559C1, (q31_t)0xCAB26FA9, (q31_t)0x8BA0622F, - (q31_t)0xCAE026E8, (q31_t)0x8B8B7C8F, (q31_t)0xCB0DE658, - (q31_t)0x8B76A8E4, (q31_t)0xCB3BADF2, (q31_t)0x8B61E732, - (q31_t)0xCB697DB0, (q31_t)0x8B4D377C, (q31_t)0xCB975589, - (q31_t)0x8B3899C5, (q31_t)0xCBC53578, (q31_t)0x8B240E10, - (q31_t)0xCBF31D75, (q31_t)0x8B0F9461, (q31_t)0xCC210D78, - (q31_t)0x8AFB2CBA, (q31_t)0xCC4F057B, (q31_t)0x8AE6D71F, - (q31_t)0xCC7D0577, (q31_t)0x8AD29393, (q31_t)0xCCAB0D65, - (q31_t)0x8ABE6219, (q31_t)0xCCD91D3D, (q31_t)0x8AAA42B4, - (q31_t)0xCD0734F8, (q31_t)0x8A963567, (q31_t)0xCD355490, - (q31_t)0x8A823A35, (q31_t)0xCD637BFD, (q31_t)0x8A6E5122, - (q31_t)0xCD91AB38, (q31_t)0x8A5A7A30, (q31_t)0xCDBFE23A, - (q31_t)0x8A46B563, (q31_t)0xCDEE20FC, (q31_t)0x8A3302BD, - (q31_t)0xCE1C6776, (q31_t)0x8A1F6242, (q31_t)0xCE4AB5A2, - (q31_t)0x8A0BD3F5, (q31_t)0xCE790B78, (q31_t)0x89F857D8, - (q31_t)0xCEA768F2, (q31_t)0x89E4EDEE, (q31_t)0xCED5CE08, - (q31_t)0x89D1963C, (q31_t)0xCF043AB2, (q31_t)0x89BE50C3, - (q31_t)0xCF32AEEB, (q31_t)0x89AB1D86, (q31_t)0xCF612AAA, - (q31_t)0x8997FC89, (q31_t)0xCF8FADE8, (q31_t)0x8984EDCF, - (q31_t)0xCFBE389F, (q31_t)0x8971F15A, (q31_t)0xCFECCAC7, - (q31_t)0x895F072D, (q31_t)0xD01B6459, (q31_t)0x894C2F4C, - (q31_t)0xD04A054D, (q31_t)0x893969B9, (q31_t)0xD078AD9D, - (q31_t)0x8926B677, (q31_t)0xD0A75D42, (q31_t)0x89141589, - (q31_t)0xD0D61433, (q31_t)0x890186F1, (q31_t)0xD104D26B, - (q31_t)0x88EF0AB4, (q31_t)0xD13397E1, (q31_t)0x88DCA0D3, - (q31_t)0xD162648F, (q31_t)0x88CA4951, (q31_t)0xD191386D, - (q31_t)0x88B80431, (q31_t)0xD1C01374, (q31_t)0x88A5D177, - (q31_t)0xD1EEF59E, (q31_t)0x8893B124, (q31_t)0xD21DDEE1, - (q31_t)0x8881A33C, (q31_t)0xD24CCF38, (q31_t)0x886FA7C2, - (q31_t)0xD27BC69C, (q31_t)0x885DBEB7, (q31_t)0xD2AAC504, - (q31_t)0x884BE820, (q31_t)0xD2D9CA6A, (q31_t)0x883A23FE, - (q31_t)0xD308D6C6, (q31_t)0x88287255, (q31_t)0xD337EA12, - (q31_t)0x8816D327, (q31_t)0xD3670445, (q31_t)0x88054677, - (q31_t)0xD3962559, (q31_t)0x87F3CC47, (q31_t)0xD3C54D46, - (q31_t)0x87E2649B, (q31_t)0xD3F47C06, (q31_t)0x87D10F75, - (q31_t)0xD423B190, (q31_t)0x87BFCCD7, (q31_t)0xD452EDDE, - (q31_t)0x87AE9CC5, (q31_t)0xD48230E8, (q31_t)0x879D7F40, - (q31_t)0xD4B17AA7, (q31_t)0x878C744C, (q31_t)0xD4E0CB14, - (q31_t)0x877B7BEC, (q31_t)0xD5102227, (q31_t)0x876A9621, - (q31_t)0xD53F7FDA, (q31_t)0x8759C2EF, (q31_t)0xD56EE424, - (q31_t)0x87490257, (q31_t)0xD59E4EFE, (q31_t)0x8738545E, - (q31_t)0xD5CDC062, (q31_t)0x8727B904, (q31_t)0xD5FD3847, - (q31_t)0x8717304E, (q31_t)0xD62CB6A7, (q31_t)0x8706BA3C, - (q31_t)0xD65C3B7B, (q31_t)0x86F656D3, (q31_t)0xD68BC6BA, - (q31_t)0x86E60614, (q31_t)0xD6BB585D, (q31_t)0x86D5C802, - (q31_t)0xD6EAF05E, (q31_t)0x86C59C9F, (q31_t)0xD71A8EB5, - (q31_t)0x86B583EE, (q31_t)0xD74A335A, (q31_t)0x86A57DF1, - (q31_t)0xD779DE46, (q31_t)0x86958AAB, (q31_t)0xD7A98F73, - (q31_t)0x8685AA1F, (q31_t)0xD7D946D7, (q31_t)0x8675DC4E, - (q31_t)0xD809046D, (q31_t)0x8666213C, (q31_t)0xD838C82D, - (q31_t)0x865678EA, (q31_t)0xD868920F, (q31_t)0x8646E35B, - (q31_t)0xD898620C, (q31_t)0x86376092, (q31_t)0xD8C8381C, - (q31_t)0x8627F090, (q31_t)0xD8F81439, (q31_t)0x86189359, - (q31_t)0xD927F65B, (q31_t)0x860948EE, (q31_t)0xD957DE7A, - (q31_t)0x85FA1152, (q31_t)0xD987CC8F, (q31_t)0x85EAEC88, - (q31_t)0xD9B7C093, (q31_t)0x85DBDA91, (q31_t)0xD9E7BA7E, - (q31_t)0x85CCDB70, (q31_t)0xDA17BA4A, (q31_t)0x85BDEF27, - (q31_t)0xDA47BFED, (q31_t)0x85AF15B9, (q31_t)0xDA77CB62, - (q31_t)0x85A04F28, (q31_t)0xDAA7DCA1, (q31_t)0x85919B75, - (q31_t)0xDAD7F3A2, (q31_t)0x8582FAA4, (q31_t)0xDB08105E, - (q31_t)0x85746CB7, (q31_t)0xDB3832CD, (q31_t)0x8565F1B0, - (q31_t)0xDB685AE8, (q31_t)0x85578991, (q31_t)0xDB9888A8, - (q31_t)0x8549345C, (q31_t)0xDBC8BC05, (q31_t)0x853AF214, - (q31_t)0xDBF8F4F8, (q31_t)0x852CC2BA, (q31_t)0xDC293379, - (q31_t)0x851EA652, (q31_t)0xDC597781, (q31_t)0x85109CDC, - (q31_t)0xDC89C108, (q31_t)0x8502A65C, (q31_t)0xDCBA1008, - (q31_t)0x84F4C2D3, (q31_t)0xDCEA6478, (q31_t)0x84E6F244, - (q31_t)0xDD1ABE51, (q31_t)0x84D934B0, (q31_t)0xDD4B1D8B, - (q31_t)0x84CB8A1B, (q31_t)0xDD7B8220, (q31_t)0x84BDF285, - (q31_t)0xDDABEC07, (q31_t)0x84B06DF1, (q31_t)0xDDDC5B3A, - (q31_t)0x84A2FC62, (q31_t)0xDE0CCFB1, (q31_t)0x84959DD9, - (q31_t)0xDE3D4963, (q31_t)0x84885257, (q31_t)0xDE6DC84B, - (q31_t)0x847B19E1, (q31_t)0xDE9E4C60, (q31_t)0x846DF476, - (q31_t)0xDECED59B, (q31_t)0x8460E21A, (q31_t)0xDEFF63F4, - (q31_t)0x8453E2CE, (q31_t)0xDF2FF764, (q31_t)0x8446F695, - (q31_t)0xDF608FE3, (q31_t)0x843A1D70, (q31_t)0xDF912D6A, - (q31_t)0x842D5761, (q31_t)0xDFC1CFF2, (q31_t)0x8420A46B, - (q31_t)0xDFF27773, (q31_t)0x8414048F, (q31_t)0xE02323E5, - (q31_t)0x840777CF, (q31_t)0xE053D541, (q31_t)0x83FAFE2E, - (q31_t)0xE0848B7F, (q31_t)0x83EE97AC, (q31_t)0xE0B54698, - (q31_t)0x83E2444D, (q31_t)0xE0E60684, (q31_t)0x83D60411, - (q31_t)0xE116CB3D, (q31_t)0x83C9D6FB, (q31_t)0xE14794B9, - (q31_t)0x83BDBD0D, (q31_t)0xE17862F3, (q31_t)0x83B1B649, - (q31_t)0xE1A935E1, (q31_t)0x83A5C2B0, (q31_t)0xE1DA0D7E, - (q31_t)0x8399E244, (q31_t)0xE20AE9C1, (q31_t)0x838E1507, - (q31_t)0xE23BCAA2, (q31_t)0x83825AFB, (q31_t)0xE26CB01A, - (q31_t)0x8376B422, (q31_t)0xE29D9A22, (q31_t)0x836B207D, - (q31_t)0xE2CE88B2, (q31_t)0x835FA00E, (q31_t)0xE2FF7BC3, - (q31_t)0x835432D8, (q31_t)0xE330734C, (q31_t)0x8348D8DB, - (q31_t)0xE3616F47, (q31_t)0x833D921A, (q31_t)0xE3926FAC, - (q31_t)0x83325E97, (q31_t)0xE3C37473, (q31_t)0x83273E52, - (q31_t)0xE3F47D95, (q31_t)0x831C314E, (q31_t)0xE4258B0A, - (q31_t)0x8311378C, (q31_t)0xE4569CCB, (q31_t)0x8306510F, - (q31_t)0xE487B2CF, (q31_t)0x82FB7DD8, (q31_t)0xE4B8CD10, - (q31_t)0x82F0BDE8, (q31_t)0xE4E9EB86, (q31_t)0x82E61141, - (q31_t)0xE51B0E2A, (q31_t)0x82DB77E5, (q31_t)0xE54C34F3, - (q31_t)0x82D0F1D5, (q31_t)0xE57D5FDA, (q31_t)0x82C67F13, - (q31_t)0xE5AE8ED8, (q31_t)0x82BC1FA1, (q31_t)0xE5DFC1E4, - (q31_t)0x82B1D381, (q31_t)0xE610F8F9, (q31_t)0x82A79AB3, - (q31_t)0xE642340D, (q31_t)0x829D753A, (q31_t)0xE6737319, - (q31_t)0x82936316, (q31_t)0xE6A4B616, (q31_t)0x8289644A, - (q31_t)0xE6D5FCFC, (q31_t)0x827F78D8, (q31_t)0xE70747C3, - (q31_t)0x8275A0C0, (q31_t)0xE7389664, (q31_t)0x826BDC04, - (q31_t)0xE769E8D8, (q31_t)0x82622AA5, (q31_t)0xE79B3F16, - (q31_t)0x82588CA6, (q31_t)0xE7CC9917, (q31_t)0x824F0208, - (q31_t)0xE7FDF6D3, (q31_t)0x82458ACB, (q31_t)0xE82F5844, - (q31_t)0x823C26F2, (q31_t)0xE860BD60, (q31_t)0x8232D67E, - (q31_t)0xE8922621, (q31_t)0x82299971, (q31_t)0xE8C3927F, - (q31_t)0x82206FCB, (q31_t)0xE8F50273, (q31_t)0x8217598F, - (q31_t)0xE92675F4, (q31_t)0x820E56BE, (q31_t)0xE957ECFB, - (q31_t)0x82056758, (q31_t)0xE9896780, (q31_t)0x81FC8B60, - (q31_t)0xE9BAE57C, (q31_t)0x81F3C2D7, (q31_t)0xE9EC66E8, - (q31_t)0x81EB0DBD, (q31_t)0xEA1DEBBB, (q31_t)0x81E26C16, - (q31_t)0xEA4F73EE, (q31_t)0x81D9DDE1, (q31_t)0xEA80FF79, - (q31_t)0x81D16320, (q31_t)0xEAB28E55, (q31_t)0x81C8FBD5, - (q31_t)0xEAE4207A, (q31_t)0x81C0A801, (q31_t)0xEB15B5E0, - (q31_t)0x81B867A4, (q31_t)0xEB474E80, (q31_t)0x81B03AC1, - (q31_t)0xEB78EA52, (q31_t)0x81A82159, (q31_t)0xEBAA894E, - (q31_t)0x81A01B6C, (q31_t)0xEBDC2B6D, (q31_t)0x819828FD, - (q31_t)0xEC0DD0A8, (q31_t)0x81904A0C, (q31_t)0xEC3F78F5, - (q31_t)0x81887E9A, (q31_t)0xEC71244F, (q31_t)0x8180C6A9, - (q31_t)0xECA2D2AC, (q31_t)0x8179223A, (q31_t)0xECD48406, - (q31_t)0x8171914E, (q31_t)0xED063855, (q31_t)0x816A13E6, - (q31_t)0xED37EF91, (q31_t)0x8162AA03, (q31_t)0xED69A9B2, - (q31_t)0x815B53A8, (q31_t)0xED9B66B2, (q31_t)0x815410D3, - (q31_t)0xEDCD2687, (q31_t)0x814CE188, (q31_t)0xEDFEE92B, - (q31_t)0x8145C5C6, (q31_t)0xEE30AE95, (q31_t)0x813EBD90, - (q31_t)0xEE6276BF, (q31_t)0x8137C8E6, (q31_t)0xEE9441A0, - (q31_t)0x8130E7C8, (q31_t)0xEEC60F31, (q31_t)0x812A1A39, - (q31_t)0xEEF7DF6A, (q31_t)0x81236039, (q31_t)0xEF29B243, - (q31_t)0x811CB9CA, (q31_t)0xEF5B87B5, (q31_t)0x811626EC, - (q31_t)0xEF8D5FB8, (q31_t)0x810FA7A0, (q31_t)0xEFBF3A44, - (q31_t)0x81093BE8, (q31_t)0xEFF11752, (q31_t)0x8102E3C3, - (q31_t)0xF022F6DA, (q31_t)0x80FC9F35, (q31_t)0xF054D8D4, - (q31_t)0x80F66E3C, (q31_t)0xF086BD39, (q31_t)0x80F050DB, - (q31_t)0xF0B8A401, (q31_t)0x80EA4712, (q31_t)0xF0EA8D23, - (q31_t)0x80E450E2, (q31_t)0xF11C789A, (q31_t)0x80DE6E4C, - (q31_t)0xF14E665C, (q31_t)0x80D89F51, (q31_t)0xF1805662, - (q31_t)0x80D2E3F1, (q31_t)0xF1B248A5, (q31_t)0x80CD3C2F, - (q31_t)0xF1E43D1C, (q31_t)0x80C7A80A, (q31_t)0xF21633C0, - (q31_t)0x80C22783, (q31_t)0xF2482C89, (q31_t)0x80BCBA9C, - (q31_t)0xF27A2770, (q31_t)0x80B76155, (q31_t)0xF2AC246D, - (q31_t)0x80B21BAF, (q31_t)0xF2DE2378, (q31_t)0x80ACE9AB, - (q31_t)0xF310248A, (q31_t)0x80A7CB49, (q31_t)0xF342279A, - (q31_t)0x80A2C08B, (q31_t)0xF3742CA1, (q31_t)0x809DC970, - (q31_t)0xF3A63398, (q31_t)0x8098E5FB, (q31_t)0xF3D83C76, - (q31_t)0x8094162B, (q31_t)0xF40A4734, (q31_t)0x808F5A02, - (q31_t)0xF43C53CA, (q31_t)0x808AB180, (q31_t)0xF46E6231, - (q31_t)0x80861CA5, (q31_t)0xF4A07260, (q31_t)0x80819B74, - (q31_t)0xF4D28451, (q31_t)0x807D2DEB, (q31_t)0xF50497FA, - (q31_t)0x8078D40D, (q31_t)0xF536AD55, (q31_t)0x80748DD9, - (q31_t)0xF568C45A, (q31_t)0x80705B50, (q31_t)0xF59ADD01, - (q31_t)0x806C3C73, (q31_t)0xF5CCF743, (q31_t)0x80683143, - (q31_t)0xF5FF1317, (q31_t)0x806439C0, (q31_t)0xF6313076, - (q31_t)0x806055EA, (q31_t)0xF6634F58, (q31_t)0x805C85C3, - (q31_t)0xF6956FB6, (q31_t)0x8058C94C, (q31_t)0xF6C79188, - (q31_t)0x80552083, (q31_t)0xF6F9B4C5, (q31_t)0x80518B6B, - (q31_t)0xF72BD967, (q31_t)0x804E0A03, (q31_t)0xF75DFF65, - (q31_t)0x804A9C4D, (q31_t)0xF79026B8, (q31_t)0x80474248, - (q31_t)0xF7C24F58, (q31_t)0x8043FBF6, (q31_t)0xF7F4793E, - (q31_t)0x8040C956, (q31_t)0xF826A461, (q31_t)0x803DAA69, - (q31_t)0xF858D0BA, (q31_t)0x803A9F31, (q31_t)0xF88AFE41, - (q31_t)0x8037A7AC, (q31_t)0xF8BD2CEF, (q31_t)0x8034C3DC, - (q31_t)0xF8EF5CBB, (q31_t)0x8031F3C1, (q31_t)0xF9218D9E, - (q31_t)0x802F375C, (q31_t)0xF953BF90, (q31_t)0x802C8EAD, - (q31_t)0xF985F28A, (q31_t)0x8029F9B4, (q31_t)0xF9B82683, - (q31_t)0x80277872, (q31_t)0xF9EA5B75, (q31_t)0x80250AE7, - (q31_t)0xFA1C9156, (q31_t)0x8022B113, (q31_t)0xFA4EC820, - (q31_t)0x80206AF8, (q31_t)0xFA80FFCB, (q31_t)0x801E3894, - (q31_t)0xFAB3384F, (q31_t)0x801C19E9, (q31_t)0xFAE571A4, - (q31_t)0x801A0EF7, (q31_t)0xFB17ABC2, (q31_t)0x801817BF, - (q31_t)0xFB49E6A2, (q31_t)0x80163440, (q31_t)0xFB7C223C, - (q31_t)0x8014647A, (q31_t)0xFBAE5E89, (q31_t)0x8012A86F, - (q31_t)0xFBE09B80, (q31_t)0x8011001E, (q31_t)0xFC12D919, - (q31_t)0x800F6B88, (q31_t)0xFC45174E, (q31_t)0x800DEAAC, - (q31_t)0xFC775616, (q31_t)0x800C7D8C, (q31_t)0xFCA99569, - (q31_t)0x800B2427, (q31_t)0xFCDBD541, (q31_t)0x8009DE7D, - (q31_t)0xFD0E1594, (q31_t)0x8008AC90, (q31_t)0xFD40565B, - (q31_t)0x80078E5E, (q31_t)0xFD72978F, (q31_t)0x800683E8, - (q31_t)0xFDA4D928, (q31_t)0x80058D2E, (q31_t)0xFDD71B1E, - (q31_t)0x8004AA31, (q31_t)0xFE095D69, (q31_t)0x8003DAF0, - (q31_t)0xFE3BA001, (q31_t)0x80031F6C, (q31_t)0xFE6DE2E0, - (q31_t)0x800277A5, (q31_t)0xFEA025FC, (q31_t)0x8001E39B, - (q31_t)0xFED2694F, (q31_t)0x8001634D, (q31_t)0xFF04ACD0, - (q31_t)0x8000F6BD, (q31_t)0xFF36F078, (q31_t)0x80009DE9, - (q31_t)0xFF69343E, (q31_t)0x800058D3, (q31_t)0xFF9B781D, - (q31_t)0x8000277A, (q31_t)0xFFCDBC0A, (q31_t)0x800009DE -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -/** - @brief q15 Twiddle factors Table -*/ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_16) - -/** - @par - Example code for q15 Twiddle factors Generation:: - @par -
    fori = 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, 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] = { - (q15_t)0x7FFF, (q15_t)0x0000, - (q15_t)0x7641, (q15_t)0x30FB, - (q15_t)0x5A82, (q15_t)0x5A82, - (q15_t)0x30FB, (q15_t)0x7641, - (q15_t)0x0000, (q15_t)0x7FFF, - (q15_t)0xCF04, (q15_t)0x7641, - (q15_t)0xA57D, (q15_t)0x5A82, - (q15_t)0x89BE, (q15_t)0x30FB, - (q15_t)0x8000, (q15_t)0x0000, - (q15_t)0x89BE, (q15_t)0xCF04, - (q15_t)0xA57D, (q15_t)0xA57D, - (q15_t)0xCF04, (q15_t)0x89BE -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_32) -/** - @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, 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] = { - (q15_t)0x7FFF, (q15_t)0x0000, - (q15_t)0x7D8A, (q15_t)0x18F8, - (q15_t)0x7641, (q15_t)0x30FB, - (q15_t)0x6A6D, (q15_t)0x471C, - (q15_t)0x5A82, (q15_t)0x5A82, - (q15_t)0x471C, (q15_t)0x6A6D, - (q15_t)0x30FB, (q15_t)0x7641, - (q15_t)0x18F8, (q15_t)0x7D8A, - (q15_t)0x0000, (q15_t)0x7FFF, - (q15_t)0xE707, (q15_t)0x7D8A, - (q15_t)0xCF04, (q15_t)0x7641, - (q15_t)0xB8E3, (q15_t)0x6A6D, - (q15_t)0xA57D, (q15_t)0x5A82, - (q15_t)0x9592, (q15_t)0x471C, - (q15_t)0x89BE, (q15_t)0x30FB, - (q15_t)0x8275, (q15_t)0x18F8, - (q15_t)0x8000, (q15_t)0x0000, - (q15_t)0x8275, (q15_t)0xE707, - (q15_t)0x89BE, (q15_t)0xCF04, - (q15_t)0x9592, (q15_t)0xB8E3, - (q15_t)0xA57D, (q15_t)0xA57D, - (q15_t)0xB8E3, (q15_t)0x9592, - (q15_t)0xCF04, (q15_t)0x89BE, - (q15_t)0xE707, (q15_t)0x8275 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_64) -/** - @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, 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] = { - (q15_t)0x7FFF, (q15_t)0x0000, (q15_t)0x7F62, (q15_t)0x0C8B, - (q15_t)0x7D8A, (q15_t)0x18F8, (q15_t)0x7A7D, (q15_t)0x2528, - (q15_t)0x7641, (q15_t)0x30FB, (q15_t)0x70E2, (q15_t)0x3C56, - (q15_t)0x6A6D, (q15_t)0x471C, (q15_t)0x62F2, (q15_t)0x5133, - (q15_t)0x5A82, (q15_t)0x5A82, (q15_t)0x5133, (q15_t)0x62F2, - (q15_t)0x471C, (q15_t)0x6A6D, (q15_t)0x3C56, (q15_t)0x70E2, - (q15_t)0x30FB, (q15_t)0x7641, (q15_t)0x2528, (q15_t)0x7A7D, - (q15_t)0x18F8, (q15_t)0x7D8A, (q15_t)0x0C8B, (q15_t)0x7F62, - (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0xF374, (q15_t)0x7F62, - (q15_t)0xE707, (q15_t)0x7D8A, (q15_t)0xDAD7, (q15_t)0x7A7D, - (q15_t)0xCF04, (q15_t)0x7641, (q15_t)0xC3A9, (q15_t)0x70E2, - (q15_t)0xB8E3, (q15_t)0x6A6D, (q15_t)0xAECC, (q15_t)0x62F2, - (q15_t)0xA57D, (q15_t)0x5A82, (q15_t)0x9D0D, (q15_t)0x5133, - (q15_t)0x9592, (q15_t)0x471C, (q15_t)0x8F1D, (q15_t)0x3C56, - (q15_t)0x89BE, (q15_t)0x30FB, (q15_t)0x8582, (q15_t)0x2528, - (q15_t)0x8275, (q15_t)0x18F8, (q15_t)0x809D, (q15_t)0x0C8B, - (q15_t)0x8000, (q15_t)0x0000, (q15_t)0x809D, (q15_t)0xF374, - (q15_t)0x8275, (q15_t)0xE707, (q15_t)0x8582, (q15_t)0xDAD7, - (q15_t)0x89BE, (q15_t)0xCF04, (q15_t)0x8F1D, (q15_t)0xC3A9, - (q15_t)0x9592, (q15_t)0xB8E3, (q15_t)0x9D0D, (q15_t)0xAECC, - (q15_t)0xA57D, (q15_t)0xA57D, (q15_t)0xAECC, (q15_t)0x9D0D, - (q15_t)0xB8E3, (q15_t)0x9592, (q15_t)0xC3A9, (q15_t)0x8F1D, - (q15_t)0xCF04, (q15_t)0x89BE, (q15_t)0xDAD7, (q15_t)0x8582, - (q15_t)0xE707, (q15_t)0x8275, (q15_t)0xF374, (q15_t)0x809D -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_128) -/** - @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, 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] = { - (q15_t)0x7FFF, (q15_t)0x0000, (q15_t)0x7FD8, (q15_t)0x0647, - (q15_t)0x7F62, (q15_t)0x0C8B, (q15_t)0x7E9D, (q15_t)0x12C8, - (q15_t)0x7D8A, (q15_t)0x18F8, (q15_t)0x7C29, (q15_t)0x1F19, - (q15_t)0x7A7D, (q15_t)0x2528, (q15_t)0x7884, (q15_t)0x2B1F, - (q15_t)0x7641, (q15_t)0x30FB, (q15_t)0x73B5, (q15_t)0x36BA, - (q15_t)0x70E2, (q15_t)0x3C56, (q15_t)0x6DCA, (q15_t)0x41CE, - (q15_t)0x6A6D, (q15_t)0x471C, (q15_t)0x66CF, (q15_t)0x4C3F, - (q15_t)0x62F2, (q15_t)0x5133, (q15_t)0x5ED7, (q15_t)0x55F5, - (q15_t)0x5A82, (q15_t)0x5A82, (q15_t)0x55F5, (q15_t)0x5ED7, - (q15_t)0x5133, (q15_t)0x62F2, (q15_t)0x4C3F, (q15_t)0x66CF, - (q15_t)0x471C, (q15_t)0x6A6D, (q15_t)0x41CE, (q15_t)0x6DCA, - (q15_t)0x3C56, (q15_t)0x70E2, (q15_t)0x36BA, (q15_t)0x73B5, - (q15_t)0x30FB, (q15_t)0x7641, (q15_t)0x2B1F, (q15_t)0x7884, - (q15_t)0x2528, (q15_t)0x7A7D, (q15_t)0x1F19, (q15_t)0x7C29, - (q15_t)0x18F8, (q15_t)0x7D8A, (q15_t)0x12C8, (q15_t)0x7E9D, - (q15_t)0x0C8B, (q15_t)0x7F62, (q15_t)0x0647, (q15_t)0x7FD8, - (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0xF9B8, (q15_t)0x7FD8, - (q15_t)0xF374, (q15_t)0x7F62, (q15_t)0xED37, (q15_t)0x7E9D, - (q15_t)0xE707, (q15_t)0x7D8A, (q15_t)0xE0E6, (q15_t)0x7C29, - (q15_t)0xDAD7, (q15_t)0x7A7D, (q15_t)0xD4E0, (q15_t)0x7884, - (q15_t)0xCF04, (q15_t)0x7641, (q15_t)0xC945, (q15_t)0x73B5, - (q15_t)0xC3A9, (q15_t)0x70E2, (q15_t)0xBE31, (q15_t)0x6DCA, - (q15_t)0xB8E3, (q15_t)0x6A6D, (q15_t)0xB3C0, (q15_t)0x66CF, - (q15_t)0xAECC, (q15_t)0x62F2, (q15_t)0xAA0A, (q15_t)0x5ED7, - (q15_t)0xA57D, (q15_t)0x5A82, (q15_t)0xA128, (q15_t)0x55F5, - (q15_t)0x9D0D, (q15_t)0x5133, (q15_t)0x9930, (q15_t)0x4C3F, - (q15_t)0x9592, (q15_t)0x471C, (q15_t)0x9235, (q15_t)0x41CE, - (q15_t)0x8F1D, (q15_t)0x3C56, (q15_t)0x8C4A, (q15_t)0x36BA, - (q15_t)0x89BE, (q15_t)0x30FB, (q15_t)0x877B, (q15_t)0x2B1F, - (q15_t)0x8582, (q15_t)0x2528, (q15_t)0x83D6, (q15_t)0x1F19, - (q15_t)0x8275, (q15_t)0x18F8, (q15_t)0x8162, (q15_t)0x12C8, - (q15_t)0x809D, (q15_t)0x0C8B, (q15_t)0x8027, (q15_t)0x0647, - (q15_t)0x8000, (q15_t)0x0000, (q15_t)0x8027, (q15_t)0xF9B8, - (q15_t)0x809D, (q15_t)0xF374, (q15_t)0x8162, (q15_t)0xED37, - (q15_t)0x8275, (q15_t)0xE707, (q15_t)0x83D6, (q15_t)0xE0E6, - (q15_t)0x8582, (q15_t)0xDAD7, (q15_t)0x877B, (q15_t)0xD4E0, - (q15_t)0x89BE, (q15_t)0xCF04, (q15_t)0x8C4A, (q15_t)0xC945, - (q15_t)0x8F1D, (q15_t)0xC3A9, (q15_t)0x9235, (q15_t)0xBE31, - (q15_t)0x9592, (q15_t)0xB8E3, (q15_t)0x9930, (q15_t)0xB3C0, - (q15_t)0x9D0D, (q15_t)0xAECC, (q15_t)0xA128, (q15_t)0xAA0A, - (q15_t)0xA57D, (q15_t)0xA57D, (q15_t)0xAA0A, (q15_t)0xA128, - (q15_t)0xAECC, (q15_t)0x9D0D, (q15_t)0xB3C0, (q15_t)0x9930, - (q15_t)0xB8E3, (q15_t)0x9592, (q15_t)0xBE31, (q15_t)0x9235, - (q15_t)0xC3A9, (q15_t)0x8F1D, (q15_t)0xC945, (q15_t)0x8C4A, - (q15_t)0xCF04, (q15_t)0x89BE, (q15_t)0xD4E0, (q15_t)0x877B, - (q15_t)0xDAD7, (q15_t)0x8582, (q15_t)0xE0E6, (q15_t)0x83D6, - (q15_t)0xE707, (q15_t)0x8275, (q15_t)0xED37, (q15_t)0x8162, - (q15_t)0xF374, (q15_t)0x809D, (q15_t)0xF9B8, (q15_t)0x8027 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_256) -/** - @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, 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] = { - (q15_t)0x7FFF, (q15_t)0x0000, (q15_t)0x7FF6, (q15_t)0x0324, - (q15_t)0x7FD8, (q15_t)0x0647, (q15_t)0x7FA7, (q15_t)0x096A, - (q15_t)0x7F62, (q15_t)0x0C8B, (q15_t)0x7F09, (q15_t)0x0FAB, - (q15_t)0x7E9D, (q15_t)0x12C8, (q15_t)0x7E1D, (q15_t)0x15E2, - (q15_t)0x7D8A, (q15_t)0x18F8, (q15_t)0x7CE3, (q15_t)0x1C0B, - (q15_t)0x7C29, (q15_t)0x1F19, (q15_t)0x7B5D, (q15_t)0x2223, - (q15_t)0x7A7D, (q15_t)0x2528, (q15_t)0x798A, (q15_t)0x2826, - (q15_t)0x7884, (q15_t)0x2B1F, (q15_t)0x776C, (q15_t)0x2E11, - (q15_t)0x7641, (q15_t)0x30FB, (q15_t)0x7504, (q15_t)0x33DE, - (q15_t)0x73B5, (q15_t)0x36BA, (q15_t)0x7255, (q15_t)0x398C, - (q15_t)0x70E2, (q15_t)0x3C56, (q15_t)0x6F5F, (q15_t)0x3F17, - (q15_t)0x6DCA, (q15_t)0x41CE, (q15_t)0x6C24, (q15_t)0x447A, - (q15_t)0x6A6D, (q15_t)0x471C, (q15_t)0x68A6, (q15_t)0x49B4, - (q15_t)0x66CF, (q15_t)0x4C3F, (q15_t)0x64E8, (q15_t)0x4EBF, - (q15_t)0x62F2, (q15_t)0x5133, (q15_t)0x60EC, (q15_t)0x539B, - (q15_t)0x5ED7, (q15_t)0x55F5, (q15_t)0x5CB4, (q15_t)0x5842, - (q15_t)0x5A82, (q15_t)0x5A82, (q15_t)0x5842, (q15_t)0x5CB4, - (q15_t)0x55F5, (q15_t)0x5ED7, (q15_t)0x539B, (q15_t)0x60EC, - (q15_t)0x5133, (q15_t)0x62F2, (q15_t)0x4EBF, (q15_t)0x64E8, - (q15_t)0x4C3F, (q15_t)0x66CF, (q15_t)0x49B4, (q15_t)0x68A6, - (q15_t)0x471C, (q15_t)0x6A6D, (q15_t)0x447A, (q15_t)0x6C24, - (q15_t)0x41CE, (q15_t)0x6DCA, (q15_t)0x3F17, (q15_t)0x6F5F, - (q15_t)0x3C56, (q15_t)0x70E2, (q15_t)0x398C, (q15_t)0x7255, - (q15_t)0x36BA, (q15_t)0x73B5, (q15_t)0x33DE, (q15_t)0x7504, - (q15_t)0x30FB, (q15_t)0x7641, (q15_t)0x2E11, (q15_t)0x776C, - (q15_t)0x2B1F, (q15_t)0x7884, (q15_t)0x2826, (q15_t)0x798A, - (q15_t)0x2528, (q15_t)0x7A7D, (q15_t)0x2223, (q15_t)0x7B5D, - (q15_t)0x1F19, (q15_t)0x7C29, (q15_t)0x1C0B, (q15_t)0x7CE3, - (q15_t)0x18F8, (q15_t)0x7D8A, (q15_t)0x15E2, (q15_t)0x7E1D, - (q15_t)0x12C8, (q15_t)0x7E9D, (q15_t)0x0FAB, (q15_t)0x7F09, - (q15_t)0x0C8B, (q15_t)0x7F62, (q15_t)0x096A, (q15_t)0x7FA7, - (q15_t)0x0647, (q15_t)0x7FD8, (q15_t)0x0324, (q15_t)0x7FF6, - (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0xFCDB, (q15_t)0x7FF6, - (q15_t)0xF9B8, (q15_t)0x7FD8, (q15_t)0xF695, (q15_t)0x7FA7, - (q15_t)0xF374, (q15_t)0x7F62, (q15_t)0xF054, (q15_t)0x7F09, - (q15_t)0xED37, (q15_t)0x7E9D, (q15_t)0xEA1D, (q15_t)0x7E1D, - (q15_t)0xE707, (q15_t)0x7D8A, (q15_t)0xE3F4, (q15_t)0x7CE3, - (q15_t)0xE0E6, (q15_t)0x7C29, (q15_t)0xDDDC, (q15_t)0x7B5D, - (q15_t)0xDAD7, (q15_t)0x7A7D, (q15_t)0xD7D9, (q15_t)0x798A, - (q15_t)0xD4E0, (q15_t)0x7884, (q15_t)0xD1EE, (q15_t)0x776C, - (q15_t)0xCF04, (q15_t)0x7641, (q15_t)0xCC21, (q15_t)0x7504, - (q15_t)0xC945, (q15_t)0x73B5, (q15_t)0xC673, (q15_t)0x7255, - (q15_t)0xC3A9, (q15_t)0x70E2, (q15_t)0xC0E8, (q15_t)0x6F5F, - (q15_t)0xBE31, (q15_t)0x6DCA, (q15_t)0xBB85, (q15_t)0x6C24, - (q15_t)0xB8E3, (q15_t)0x6A6D, (q15_t)0xB64B, (q15_t)0x68A6, - (q15_t)0xB3C0, (q15_t)0x66CF, (q15_t)0xB140, (q15_t)0x64E8, - (q15_t)0xAECC, (q15_t)0x62F2, (q15_t)0xAC64, (q15_t)0x60EC, - (q15_t)0xAA0A, (q15_t)0x5ED7, (q15_t)0xA7BD, (q15_t)0x5CB4, - (q15_t)0xA57D, (q15_t)0x5A82, (q15_t)0xA34B, (q15_t)0x5842, - (q15_t)0xA128, (q15_t)0x55F5, (q15_t)0x9F13, (q15_t)0x539B, - (q15_t)0x9D0D, (q15_t)0x5133, (q15_t)0x9B17, (q15_t)0x4EBF, - (q15_t)0x9930, (q15_t)0x4C3F, (q15_t)0x9759, (q15_t)0x49B4, - (q15_t)0x9592, (q15_t)0x471C, (q15_t)0x93DB, (q15_t)0x447A, - (q15_t)0x9235, (q15_t)0x41CE, (q15_t)0x90A0, (q15_t)0x3F17, - (q15_t)0x8F1D, (q15_t)0x3C56, (q15_t)0x8DAA, (q15_t)0x398C, - (q15_t)0x8C4A, (q15_t)0x36BA, (q15_t)0x8AFB, (q15_t)0x33DE, - (q15_t)0x89BE, (q15_t)0x30FB, (q15_t)0x8893, (q15_t)0x2E11, - (q15_t)0x877B, (q15_t)0x2B1F, (q15_t)0x8675, (q15_t)0x2826, - (q15_t)0x8582, (q15_t)0x2528, (q15_t)0x84A2, (q15_t)0x2223, - (q15_t)0x83D6, (q15_t)0x1F19, (q15_t)0x831C, (q15_t)0x1C0B, - (q15_t)0x8275, (q15_t)0x18F8, (q15_t)0x81E2, (q15_t)0x15E2, - (q15_t)0x8162, (q15_t)0x12C8, (q15_t)0x80F6, (q15_t)0x0FAB, - (q15_t)0x809D, (q15_t)0x0C8B, (q15_t)0x8058, (q15_t)0x096A, - (q15_t)0x8027, (q15_t)0x0647, (q15_t)0x8009, (q15_t)0x0324, - (q15_t)0x8000, (q15_t)0x0000, (q15_t)0x8009, (q15_t)0xFCDB, - (q15_t)0x8027, (q15_t)0xF9B8, (q15_t)0x8058, (q15_t)0xF695, - (q15_t)0x809D, (q15_t)0xF374, (q15_t)0x80F6, (q15_t)0xF054, - (q15_t)0x8162, (q15_t)0xED37, (q15_t)0x81E2, (q15_t)0xEA1D, - (q15_t)0x8275, (q15_t)0xE707, (q15_t)0x831C, (q15_t)0xE3F4, - (q15_t)0x83D6, (q15_t)0xE0E6, (q15_t)0x84A2, (q15_t)0xDDDC, - (q15_t)0x8582, (q15_t)0xDAD7, (q15_t)0x8675, (q15_t)0xD7D9, - (q15_t)0x877B, (q15_t)0xD4E0, (q15_t)0x8893, (q15_t)0xD1EE, - (q15_t)0x89BE, (q15_t)0xCF04, (q15_t)0x8AFB, (q15_t)0xCC21, - (q15_t)0x8C4A, (q15_t)0xC945, (q15_t)0x8DAA, (q15_t)0xC673, - (q15_t)0x8F1D, (q15_t)0xC3A9, (q15_t)0x90A0, (q15_t)0xC0E8, - (q15_t)0x9235, (q15_t)0xBE31, (q15_t)0x93DB, (q15_t)0xBB85, - (q15_t)0x9592, (q15_t)0xB8E3, (q15_t)0x9759, (q15_t)0xB64B, - (q15_t)0x9930, (q15_t)0xB3C0, (q15_t)0x9B17, (q15_t)0xB140, - (q15_t)0x9D0D, (q15_t)0xAECC, (q15_t)0x9F13, (q15_t)0xAC64, - (q15_t)0xA128, (q15_t)0xAA0A, (q15_t)0xA34B, (q15_t)0xA7BD, - (q15_t)0xA57D, (q15_t)0xA57D, (q15_t)0xA7BD, (q15_t)0xA34B, - (q15_t)0xAA0A, (q15_t)0xA128, (q15_t)0xAC64, (q15_t)0x9F13, - (q15_t)0xAECC, (q15_t)0x9D0D, (q15_t)0xB140, (q15_t)0x9B17, - (q15_t)0xB3C0, (q15_t)0x9930, (q15_t)0xB64B, (q15_t)0x9759, - (q15_t)0xB8E3, (q15_t)0x9592, (q15_t)0xBB85, (q15_t)0x93DB, - (q15_t)0xBE31, (q15_t)0x9235, (q15_t)0xC0E8, (q15_t)0x90A0, - (q15_t)0xC3A9, (q15_t)0x8F1D, (q15_t)0xC673, (q15_t)0x8DAA, - (q15_t)0xC945, (q15_t)0x8C4A, (q15_t)0xCC21, (q15_t)0x8AFB, - (q15_t)0xCF04, (q15_t)0x89BE, (q15_t)0xD1EE, (q15_t)0x8893, - (q15_t)0xD4E0, (q15_t)0x877B, (q15_t)0xD7D9, (q15_t)0x8675, - (q15_t)0xDAD7, (q15_t)0x8582, (q15_t)0xDDDC, (q15_t)0x84A2, - (q15_t)0xE0E6, (q15_t)0x83D6, (q15_t)0xE3F4, (q15_t)0x831C, - (q15_t)0xE707, (q15_t)0x8275, (q15_t)0xEA1D, (q15_t)0x81E2, - (q15_t)0xED37, (q15_t)0x8162, (q15_t)0xF054, (q15_t)0x80F6, - (q15_t)0xF374, (q15_t)0x809D, (q15_t)0xF695, (q15_t)0x8058, - (q15_t)0xF9B8, (q15_t)0x8027, (q15_t)0xFCDB, (q15_t)0x8009 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_512) -/** - @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, 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] = { - (q15_t)0x7FFF, (q15_t)0x0000, (q15_t)0x7FFD, (q15_t)0x0192, - (q15_t)0x7FF6, (q15_t)0x0324, (q15_t)0x7FE9, (q15_t)0x04B6, - (q15_t)0x7FD8, (q15_t)0x0647, (q15_t)0x7FC2, (q15_t)0x07D9, - (q15_t)0x7FA7, (q15_t)0x096A, (q15_t)0x7F87, (q15_t)0x0AFB, - (q15_t)0x7F62, (q15_t)0x0C8B, (q15_t)0x7F38, (q15_t)0x0E1B, - (q15_t)0x7F09, (q15_t)0x0FAB, (q15_t)0x7ED5, (q15_t)0x1139, - (q15_t)0x7E9D, (q15_t)0x12C8, (q15_t)0x7E5F, (q15_t)0x1455, - (q15_t)0x7E1D, (q15_t)0x15E2, (q15_t)0x7DD6, (q15_t)0x176D, - (q15_t)0x7D8A, (q15_t)0x18F8, (q15_t)0x7D39, (q15_t)0x1A82, - (q15_t)0x7CE3, (q15_t)0x1C0B, (q15_t)0x7C89, (q15_t)0x1D93, - (q15_t)0x7C29, (q15_t)0x1F19, (q15_t)0x7BC5, (q15_t)0x209F, - (q15_t)0x7B5D, (q15_t)0x2223, (q15_t)0x7AEF, (q15_t)0x23A6, - (q15_t)0x7A7D, (q15_t)0x2528, (q15_t)0x7A05, (q15_t)0x26A8, - (q15_t)0x798A, (q15_t)0x2826, (q15_t)0x7909, (q15_t)0x29A3, - (q15_t)0x7884, (q15_t)0x2B1F, (q15_t)0x77FA, (q15_t)0x2C98, - (q15_t)0x776C, (q15_t)0x2E11, (q15_t)0x76D9, (q15_t)0x2F87, - (q15_t)0x7641, (q15_t)0x30FB, (q15_t)0x75A5, (q15_t)0x326E, - (q15_t)0x7504, (q15_t)0x33DE, (q15_t)0x745F, (q15_t)0x354D, - (q15_t)0x73B5, (q15_t)0x36BA, (q15_t)0x7307, (q15_t)0x3824, - (q15_t)0x7255, (q15_t)0x398C, (q15_t)0x719E, (q15_t)0x3AF2, - (q15_t)0x70E2, (q15_t)0x3C56, (q15_t)0x7023, (q15_t)0x3DB8, - (q15_t)0x6F5F, (q15_t)0x3F17, (q15_t)0x6E96, (q15_t)0x4073, - (q15_t)0x6DCA, (q15_t)0x41CE, (q15_t)0x6CF9, (q15_t)0x4325, - (q15_t)0x6C24, (q15_t)0x447A, (q15_t)0x6B4A, (q15_t)0x45CD, - (q15_t)0x6A6D, (q15_t)0x471C, (q15_t)0x698C, (q15_t)0x4869, - (q15_t)0x68A6, (q15_t)0x49B4, (q15_t)0x67BD, (q15_t)0x4AFB, - (q15_t)0x66CF, (q15_t)0x4C3F, (q15_t)0x65DD, (q15_t)0x4D81, - (q15_t)0x64E8, (q15_t)0x4EBF, (q15_t)0x63EF, (q15_t)0x4FFB, - (q15_t)0x62F2, (q15_t)0x5133, (q15_t)0x61F1, (q15_t)0x5269, - (q15_t)0x60EC, (q15_t)0x539B, (q15_t)0x5FE3, (q15_t)0x54CA, - (q15_t)0x5ED7, (q15_t)0x55F5, (q15_t)0x5DC7, (q15_t)0x571D, - (q15_t)0x5CB4, (q15_t)0x5842, (q15_t)0x5B9D, (q15_t)0x5964, - (q15_t)0x5A82, (q15_t)0x5A82, (q15_t)0x5964, (q15_t)0x5B9D, - (q15_t)0x5842, (q15_t)0x5CB4, (q15_t)0x571D, (q15_t)0x5DC7, - (q15_t)0x55F5, (q15_t)0x5ED7, (q15_t)0x54CA, (q15_t)0x5FE3, - (q15_t)0x539B, (q15_t)0x60EC, (q15_t)0x5269, (q15_t)0x61F1, - (q15_t)0x5133, (q15_t)0x62F2, (q15_t)0x4FFB, (q15_t)0x63EF, - (q15_t)0x4EBF, (q15_t)0x64E8, (q15_t)0x4D81, (q15_t)0x65DD, - (q15_t)0x4C3F, (q15_t)0x66CF, (q15_t)0x4AFB, (q15_t)0x67BD, - (q15_t)0x49B4, (q15_t)0x68A6, (q15_t)0x4869, (q15_t)0x698C, - (q15_t)0x471C, (q15_t)0x6A6D, (q15_t)0x45CD, (q15_t)0x6B4A, - (q15_t)0x447A, (q15_t)0x6C24, (q15_t)0x4325, (q15_t)0x6CF9, - (q15_t)0x41CE, (q15_t)0x6DCA, (q15_t)0x4073, (q15_t)0x6E96, - (q15_t)0x3F17, (q15_t)0x6F5F, (q15_t)0x3DB8, (q15_t)0x7023, - (q15_t)0x3C56, (q15_t)0x70E2, (q15_t)0x3AF2, (q15_t)0x719E, - (q15_t)0x398C, (q15_t)0x7255, (q15_t)0x3824, (q15_t)0x7307, - (q15_t)0x36BA, (q15_t)0x73B5, (q15_t)0x354D, (q15_t)0x745F, - (q15_t)0x33DE, (q15_t)0x7504, (q15_t)0x326E, (q15_t)0x75A5, - (q15_t)0x30FB, (q15_t)0x7641, (q15_t)0x2F87, (q15_t)0x76D9, - (q15_t)0x2E11, (q15_t)0x776C, (q15_t)0x2C98, (q15_t)0x77FA, - (q15_t)0x2B1F, (q15_t)0x7884, (q15_t)0x29A3, (q15_t)0x7909, - (q15_t)0x2826, (q15_t)0x798A, (q15_t)0x26A8, (q15_t)0x7A05, - (q15_t)0x2528, (q15_t)0x7A7D, (q15_t)0x23A6, (q15_t)0x7AEF, - (q15_t)0x2223, (q15_t)0x7B5D, (q15_t)0x209F, (q15_t)0x7BC5, - (q15_t)0x1F19, (q15_t)0x7C29, (q15_t)0x1D93, (q15_t)0x7C89, - (q15_t)0x1C0B, (q15_t)0x7CE3, (q15_t)0x1A82, (q15_t)0x7D39, - (q15_t)0x18F8, (q15_t)0x7D8A, (q15_t)0x176D, (q15_t)0x7DD6, - (q15_t)0x15E2, (q15_t)0x7E1D, (q15_t)0x1455, (q15_t)0x7E5F, - (q15_t)0x12C8, (q15_t)0x7E9D, (q15_t)0x1139, (q15_t)0x7ED5, - (q15_t)0x0FAB, (q15_t)0x7F09, (q15_t)0x0E1B, (q15_t)0x7F38, - (q15_t)0x0C8B, (q15_t)0x7F62, (q15_t)0x0AFB, (q15_t)0x7F87, - (q15_t)0x096A, (q15_t)0x7FA7, (q15_t)0x07D9, (q15_t)0x7FC2, - (q15_t)0x0647, (q15_t)0x7FD8, (q15_t)0x04B6, (q15_t)0x7FE9, - (q15_t)0x0324, (q15_t)0x7FF6, (q15_t)0x0192, (q15_t)0x7FFD, - (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0xFE6D, (q15_t)0x7FFD, - (q15_t)0xFCDB, (q15_t)0x7FF6, (q15_t)0xFB49, (q15_t)0x7FE9, - (q15_t)0xF9B8, (q15_t)0x7FD8, (q15_t)0xF826, (q15_t)0x7FC2, - (q15_t)0xF695, (q15_t)0x7FA7, (q15_t)0xF504, (q15_t)0x7F87, - (q15_t)0xF374, (q15_t)0x7F62, (q15_t)0xF1E4, (q15_t)0x7F38, - (q15_t)0xF054, (q15_t)0x7F09, (q15_t)0xEEC6, (q15_t)0x7ED5, - (q15_t)0xED37, (q15_t)0x7E9D, (q15_t)0xEBAA, (q15_t)0x7E5F, - (q15_t)0xEA1D, (q15_t)0x7E1D, (q15_t)0xE892, (q15_t)0x7DD6, - (q15_t)0xE707, (q15_t)0x7D8A, (q15_t)0xE57D, (q15_t)0x7D39, - (q15_t)0xE3F4, (q15_t)0x7CE3, (q15_t)0xE26C, (q15_t)0x7C89, - (q15_t)0xE0E6, (q15_t)0x7C29, (q15_t)0xDF60, (q15_t)0x7BC5, - (q15_t)0xDDDC, (q15_t)0x7B5D, (q15_t)0xDC59, (q15_t)0x7AEF, - (q15_t)0xDAD7, (q15_t)0x7A7D, (q15_t)0xD957, (q15_t)0x7A05, - (q15_t)0xD7D9, (q15_t)0x798A, (q15_t)0xD65C, (q15_t)0x7909, - (q15_t)0xD4E0, (q15_t)0x7884, (q15_t)0xD367, (q15_t)0x77FA, - (q15_t)0xD1EE, (q15_t)0x776C, (q15_t)0xD078, (q15_t)0x76D9, - (q15_t)0xCF04, (q15_t)0x7641, (q15_t)0xCD91, (q15_t)0x75A5, - (q15_t)0xCC21, (q15_t)0x7504, (q15_t)0xCAB2, (q15_t)0x745F, - (q15_t)0xC945, (q15_t)0x73B5, (q15_t)0xC7DB, (q15_t)0x7307, - (q15_t)0xC673, (q15_t)0x7255, (q15_t)0xC50D, (q15_t)0x719E, - (q15_t)0xC3A9, (q15_t)0x70E2, (q15_t)0xC247, (q15_t)0x7023, - (q15_t)0xC0E8, (q15_t)0x6F5F, (q15_t)0xBF8C, (q15_t)0x6E96, - (q15_t)0xBE31, (q15_t)0x6DCA, (q15_t)0xBCDA, (q15_t)0x6CF9, - (q15_t)0xBB85, (q15_t)0x6C24, (q15_t)0xBA32, (q15_t)0x6B4A, - (q15_t)0xB8E3, (q15_t)0x6A6D, (q15_t)0xB796, (q15_t)0x698C, - (q15_t)0xB64B, (q15_t)0x68A6, (q15_t)0xB504, (q15_t)0x67BD, - (q15_t)0xB3C0, (q15_t)0x66CF, (q15_t)0xB27E, (q15_t)0x65DD, - (q15_t)0xB140, (q15_t)0x64E8, (q15_t)0xB004, (q15_t)0x63EF, - (q15_t)0xAECC, (q15_t)0x62F2, (q15_t)0xAD96, (q15_t)0x61F1, - (q15_t)0xAC64, (q15_t)0x60EC, (q15_t)0xAB35, (q15_t)0x5FE3, - (q15_t)0xAA0A, (q15_t)0x5ED7, (q15_t)0xA8E2, (q15_t)0x5DC7, - (q15_t)0xA7BD, (q15_t)0x5CB4, (q15_t)0xA69B, (q15_t)0x5B9D, - (q15_t)0xA57D, (q15_t)0x5A82, (q15_t)0xA462, (q15_t)0x5964, - (q15_t)0xA34B, (q15_t)0x5842, (q15_t)0xA238, (q15_t)0x571D, - (q15_t)0xA128, (q15_t)0x55F5, (q15_t)0xA01C, (q15_t)0x54CA, - (q15_t)0x9F13, (q15_t)0x539B, (q15_t)0x9E0E, (q15_t)0x5269, - (q15_t)0x9D0D, (q15_t)0x5133, (q15_t)0x9C10, (q15_t)0x4FFB, - (q15_t)0x9B17, (q15_t)0x4EBF, (q15_t)0x9A22, (q15_t)0x4D81, - (q15_t)0x9930, (q15_t)0x4C3F, (q15_t)0x9842, (q15_t)0x4AFB, - (q15_t)0x9759, (q15_t)0x49B4, (q15_t)0x9673, (q15_t)0x4869, - (q15_t)0x9592, (q15_t)0x471C, (q15_t)0x94B5, (q15_t)0x45CD, - (q15_t)0x93DB, (q15_t)0x447A, (q15_t)0x9306, (q15_t)0x4325, - (q15_t)0x9235, (q15_t)0x41CE, (q15_t)0x9169, (q15_t)0x4073, - (q15_t)0x90A0, (q15_t)0x3F17, (q15_t)0x8FDC, (q15_t)0x3DB8, - (q15_t)0x8F1D, (q15_t)0x3C56, (q15_t)0x8E61, (q15_t)0x3AF2, - (q15_t)0x8DAA, (q15_t)0x398C, (q15_t)0x8CF8, (q15_t)0x3824, - (q15_t)0x8C4A, (q15_t)0x36BA, (q15_t)0x8BA0, (q15_t)0x354D, - (q15_t)0x8AFB, (q15_t)0x33DE, (q15_t)0x8A5A, (q15_t)0x326E, - (q15_t)0x89BE, (q15_t)0x30FB, (q15_t)0x8926, (q15_t)0x2F87, - (q15_t)0x8893, (q15_t)0x2E11, (q15_t)0x8805, (q15_t)0x2C98, - (q15_t)0x877B, (q15_t)0x2B1F, (q15_t)0x86F6, (q15_t)0x29A3, - (q15_t)0x8675, (q15_t)0x2826, (q15_t)0x85FA, (q15_t)0x26A8, - (q15_t)0x8582, (q15_t)0x2528, (q15_t)0x8510, (q15_t)0x23A6, - (q15_t)0x84A2, (q15_t)0x2223, (q15_t)0x843A, (q15_t)0x209F, - (q15_t)0x83D6, (q15_t)0x1F19, (q15_t)0x8376, (q15_t)0x1D93, - (q15_t)0x831C, (q15_t)0x1C0B, (q15_t)0x82C6, (q15_t)0x1A82, - (q15_t)0x8275, (q15_t)0x18F8, (q15_t)0x8229, (q15_t)0x176D, - (q15_t)0x81E2, (q15_t)0x15E2, (q15_t)0x81A0, (q15_t)0x1455, - (q15_t)0x8162, (q15_t)0x12C8, (q15_t)0x812A, (q15_t)0x1139, - (q15_t)0x80F6, (q15_t)0x0FAB, (q15_t)0x80C7, (q15_t)0x0E1B, - (q15_t)0x809D, (q15_t)0x0C8B, (q15_t)0x8078, (q15_t)0x0AFB, - (q15_t)0x8058, (q15_t)0x096A, (q15_t)0x803D, (q15_t)0x07D9, - (q15_t)0x8027, (q15_t)0x0647, (q15_t)0x8016, (q15_t)0x04B6, - (q15_t)0x8009, (q15_t)0x0324, (q15_t)0x8002, (q15_t)0x0192, - (q15_t)0x8000, (q15_t)0x0000, (q15_t)0x8002, (q15_t)0xFE6D, - (q15_t)0x8009, (q15_t)0xFCDB, (q15_t)0x8016, (q15_t)0xFB49, - (q15_t)0x8027, (q15_t)0xF9B8, (q15_t)0x803D, (q15_t)0xF826, - (q15_t)0x8058, (q15_t)0xF695, (q15_t)0x8078, (q15_t)0xF504, - (q15_t)0x809D, (q15_t)0xF374, (q15_t)0x80C7, (q15_t)0xF1E4, - (q15_t)0x80F6, (q15_t)0xF054, (q15_t)0x812A, (q15_t)0xEEC6, - (q15_t)0x8162, (q15_t)0xED37, (q15_t)0x81A0, (q15_t)0xEBAA, - (q15_t)0x81E2, (q15_t)0xEA1D, (q15_t)0x8229, (q15_t)0xE892, - (q15_t)0x8275, (q15_t)0xE707, (q15_t)0x82C6, (q15_t)0xE57D, - (q15_t)0x831C, (q15_t)0xE3F4, (q15_t)0x8376, (q15_t)0xE26C, - (q15_t)0x83D6, (q15_t)0xE0E6, (q15_t)0x843A, (q15_t)0xDF60, - (q15_t)0x84A2, (q15_t)0xDDDC, (q15_t)0x8510, (q15_t)0xDC59, - (q15_t)0x8582, (q15_t)0xDAD7, (q15_t)0x85FA, (q15_t)0xD957, - (q15_t)0x8675, (q15_t)0xD7D9, (q15_t)0x86F6, (q15_t)0xD65C, - (q15_t)0x877B, (q15_t)0xD4E0, (q15_t)0x8805, (q15_t)0xD367, - (q15_t)0x8893, (q15_t)0xD1EE, (q15_t)0x8926, (q15_t)0xD078, - (q15_t)0x89BE, (q15_t)0xCF04, (q15_t)0x8A5A, (q15_t)0xCD91, - (q15_t)0x8AFB, (q15_t)0xCC21, (q15_t)0x8BA0, (q15_t)0xCAB2, - (q15_t)0x8C4A, (q15_t)0xC945, (q15_t)0x8CF8, (q15_t)0xC7DB, - (q15_t)0x8DAA, (q15_t)0xC673, (q15_t)0x8E61, (q15_t)0xC50D, - (q15_t)0x8F1D, (q15_t)0xC3A9, (q15_t)0x8FDC, (q15_t)0xC247, - (q15_t)0x90A0, (q15_t)0xC0E8, (q15_t)0x9169, (q15_t)0xBF8C, - (q15_t)0x9235, (q15_t)0xBE31, (q15_t)0x9306, (q15_t)0xBCDA, - (q15_t)0x93DB, (q15_t)0xBB85, (q15_t)0x94B5, (q15_t)0xBA32, - (q15_t)0x9592, (q15_t)0xB8E3, (q15_t)0x9673, (q15_t)0xB796, - (q15_t)0x9759, (q15_t)0xB64B, (q15_t)0x9842, (q15_t)0xB504, - (q15_t)0x9930, (q15_t)0xB3C0, (q15_t)0x9A22, (q15_t)0xB27E, - (q15_t)0x9B17, (q15_t)0xB140, (q15_t)0x9C10, (q15_t)0xB004, - (q15_t)0x9D0D, (q15_t)0xAECC, (q15_t)0x9E0E, (q15_t)0xAD96, - (q15_t)0x9F13, (q15_t)0xAC64, (q15_t)0xA01C, (q15_t)0xAB35, - (q15_t)0xA128, (q15_t)0xAA0A, (q15_t)0xA238, (q15_t)0xA8E2, - (q15_t)0xA34B, (q15_t)0xA7BD, (q15_t)0xA462, (q15_t)0xA69B, - (q15_t)0xA57D, (q15_t)0xA57D, (q15_t)0xA69B, (q15_t)0xA462, - (q15_t)0xA7BD, (q15_t)0xA34B, (q15_t)0xA8E2, (q15_t)0xA238, - (q15_t)0xAA0A, (q15_t)0xA128, (q15_t)0xAB35, (q15_t)0xA01C, - (q15_t)0xAC64, (q15_t)0x9F13, (q15_t)0xAD96, (q15_t)0x9E0E, - (q15_t)0xAECC, (q15_t)0x9D0D, (q15_t)0xB004, (q15_t)0x9C10, - (q15_t)0xB140, (q15_t)0x9B17, (q15_t)0xB27E, (q15_t)0x9A22, - (q15_t)0xB3C0, (q15_t)0x9930, (q15_t)0xB504, (q15_t)0x9842, - (q15_t)0xB64B, (q15_t)0x9759, (q15_t)0xB796, (q15_t)0x9673, - (q15_t)0xB8E3, (q15_t)0x9592, (q15_t)0xBA32, (q15_t)0x94B5, - (q15_t)0xBB85, (q15_t)0x93DB, (q15_t)0xBCDA, (q15_t)0x9306, - (q15_t)0xBE31, (q15_t)0x9235, (q15_t)0xBF8C, (q15_t)0x9169, - (q15_t)0xC0E8, (q15_t)0x90A0, (q15_t)0xC247, (q15_t)0x8FDC, - (q15_t)0xC3A9, (q15_t)0x8F1D, (q15_t)0xC50D, (q15_t)0x8E61, - (q15_t)0xC673, (q15_t)0x8DAA, (q15_t)0xC7DB, (q15_t)0x8CF8, - (q15_t)0xC945, (q15_t)0x8C4A, (q15_t)0xCAB2, (q15_t)0x8BA0, - (q15_t)0xCC21, (q15_t)0x8AFB, (q15_t)0xCD91, (q15_t)0x8A5A, - (q15_t)0xCF04, (q15_t)0x89BE, (q15_t)0xD078, (q15_t)0x8926, - (q15_t)0xD1EE, (q15_t)0x8893, (q15_t)0xD367, (q15_t)0x8805, - (q15_t)0xD4E0, (q15_t)0x877B, (q15_t)0xD65C, (q15_t)0x86F6, - (q15_t)0xD7D9, (q15_t)0x8675, (q15_t)0xD957, (q15_t)0x85FA, - (q15_t)0xDAD7, (q15_t)0x8582, (q15_t)0xDC59, (q15_t)0x8510, - (q15_t)0xDDDC, (q15_t)0x84A2, (q15_t)0xDF60, (q15_t)0x843A, - (q15_t)0xE0E6, (q15_t)0x83D6, (q15_t)0xE26C, (q15_t)0x8376, - (q15_t)0xE3F4, (q15_t)0x831C, (q15_t)0xE57D, (q15_t)0x82C6, - (q15_t)0xE707, (q15_t)0x8275, (q15_t)0xE892, (q15_t)0x8229, - (q15_t)0xEA1D, (q15_t)0x81E2, (q15_t)0xEBAA, (q15_t)0x81A0, - (q15_t)0xED37, (q15_t)0x8162, (q15_t)0xEEC6, (q15_t)0x812A, - (q15_t)0xF054, (q15_t)0x80F6, (q15_t)0xF1E4, (q15_t)0x80C7, - (q15_t)0xF374, (q15_t)0x809D, (q15_t)0xF504, (q15_t)0x8078, - (q15_t)0xF695, (q15_t)0x8058, (q15_t)0xF826, (q15_t)0x803D, - (q15_t)0xF9B8, (q15_t)0x8027, (q15_t)0xFB49, (q15_t)0x8016, - (q15_t)0xFCDB, (q15_t)0x8009, (q15_t)0xFE6D, (q15_t)0x8002 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) -/** - @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, 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] = { - (q15_t)0x7FFF, (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0x00C9, - (q15_t)0x7FFD, (q15_t)0x0192, (q15_t)0x7FFA, (q15_t)0x025B, - (q15_t)0x7FF6, (q15_t)0x0324, (q15_t)0x7FF0, (q15_t)0x03ED, - (q15_t)0x7FE9, (q15_t)0x04B6, (q15_t)0x7FE1, (q15_t)0x057F, - (q15_t)0x7FD8, (q15_t)0x0647, (q15_t)0x7FCE, (q15_t)0x0710, - (q15_t)0x7FC2, (q15_t)0x07D9, (q15_t)0x7FB5, (q15_t)0x08A2, - (q15_t)0x7FA7, (q15_t)0x096A, (q15_t)0x7F97, (q15_t)0x0A33, - (q15_t)0x7F87, (q15_t)0x0AFB, (q15_t)0x7F75, (q15_t)0x0BC3, - (q15_t)0x7F62, (q15_t)0x0C8B, (q15_t)0x7F4D, (q15_t)0x0D53, - (q15_t)0x7F38, (q15_t)0x0E1B, (q15_t)0x7F21, (q15_t)0x0EE3, - (q15_t)0x7F09, (q15_t)0x0FAB, (q15_t)0x7EF0, (q15_t)0x1072, - (q15_t)0x7ED5, (q15_t)0x1139, (q15_t)0x7EBA, (q15_t)0x1201, - (q15_t)0x7E9D, (q15_t)0x12C8, (q15_t)0x7E7F, (q15_t)0x138E, - (q15_t)0x7E5F, (q15_t)0x1455, (q15_t)0x7E3F, (q15_t)0x151B, - (q15_t)0x7E1D, (q15_t)0x15E2, (q15_t)0x7DFA, (q15_t)0x16A8, - (q15_t)0x7DD6, (q15_t)0x176D, (q15_t)0x7DB0, (q15_t)0x1833, - (q15_t)0x7D8A, (q15_t)0x18F8, (q15_t)0x7D62, (q15_t)0x19BD, - (q15_t)0x7D39, (q15_t)0x1A82, (q15_t)0x7D0F, (q15_t)0x1B47, - (q15_t)0x7CE3, (q15_t)0x1C0B, (q15_t)0x7CB7, (q15_t)0x1CCF, - (q15_t)0x7C89, (q15_t)0x1D93, (q15_t)0x7C5A, (q15_t)0x1E56, - (q15_t)0x7C29, (q15_t)0x1F19, (q15_t)0x7BF8, (q15_t)0x1FDC, - (q15_t)0x7BC5, (q15_t)0x209F, (q15_t)0x7B92, (q15_t)0x2161, - (q15_t)0x7B5D, (q15_t)0x2223, (q15_t)0x7B26, (q15_t)0x22E5, - (q15_t)0x7AEF, (q15_t)0x23A6, (q15_t)0x7AB6, (q15_t)0x2467, - (q15_t)0x7A7D, (q15_t)0x2528, (q15_t)0x7A42, (q15_t)0x25E8, - (q15_t)0x7A05, (q15_t)0x26A8, (q15_t)0x79C8, (q15_t)0x2767, - (q15_t)0x798A, (q15_t)0x2826, (q15_t)0x794A, (q15_t)0x28E5, - (q15_t)0x7909, (q15_t)0x29A3, (q15_t)0x78C7, (q15_t)0x2A61, - (q15_t)0x7884, (q15_t)0x2B1F, (q15_t)0x7840, (q15_t)0x2BDC, - (q15_t)0x77FA, (q15_t)0x2C98, (q15_t)0x77B4, (q15_t)0x2D55, - (q15_t)0x776C, (q15_t)0x2E11, (q15_t)0x7723, (q15_t)0x2ECC, - (q15_t)0x76D9, (q15_t)0x2F87, (q15_t)0x768E, (q15_t)0x3041, - (q15_t)0x7641, (q15_t)0x30FB, (q15_t)0x75F4, (q15_t)0x31B5, - (q15_t)0x75A5, (q15_t)0x326E, (q15_t)0x7555, (q15_t)0x3326, - (q15_t)0x7504, (q15_t)0x33DE, (q15_t)0x74B2, (q15_t)0x3496, - (q15_t)0x745F, (q15_t)0x354D, (q15_t)0x740B, (q15_t)0x3604, - (q15_t)0x73B5, (q15_t)0x36BA, (q15_t)0x735F, (q15_t)0x376F, - (q15_t)0x7307, (q15_t)0x3824, (q15_t)0x72AF, (q15_t)0x38D8, - (q15_t)0x7255, (q15_t)0x398C, (q15_t)0x71FA, (q15_t)0x3A40, - (q15_t)0x719E, (q15_t)0x3AF2, (q15_t)0x7141, (q15_t)0x3BA5, - (q15_t)0x70E2, (q15_t)0x3C56, (q15_t)0x7083, (q15_t)0x3D07, - (q15_t)0x7023, (q15_t)0x3DB8, (q15_t)0x6FC1, (q15_t)0x3E68, - (q15_t)0x6F5F, (q15_t)0x3F17, (q15_t)0x6EFB, (q15_t)0x3FC5, - (q15_t)0x6E96, (q15_t)0x4073, (q15_t)0x6E30, (q15_t)0x4121, - (q15_t)0x6DCA, (q15_t)0x41CE, (q15_t)0x6D62, (q15_t)0x427A, - (q15_t)0x6CF9, (q15_t)0x4325, (q15_t)0x6C8F, (q15_t)0x43D0, - (q15_t)0x6C24, (q15_t)0x447A, (q15_t)0x6BB8, (q15_t)0x4524, - (q15_t)0x6B4A, (q15_t)0x45CD, (q15_t)0x6ADC, (q15_t)0x4675, - (q15_t)0x6A6D, (q15_t)0x471C, (q15_t)0x69FD, (q15_t)0x47C3, - (q15_t)0x698C, (q15_t)0x4869, (q15_t)0x6919, (q15_t)0x490F, - (q15_t)0x68A6, (q15_t)0x49B4, (q15_t)0x6832, (q15_t)0x4A58, - (q15_t)0x67BD, (q15_t)0x4AFB, (q15_t)0x6746, (q15_t)0x4B9E, - (q15_t)0x66CF, (q15_t)0x4C3F, (q15_t)0x6657, (q15_t)0x4CE1, - (q15_t)0x65DD, (q15_t)0x4D81, (q15_t)0x6563, (q15_t)0x4E21, - (q15_t)0x64E8, (q15_t)0x4EBF, (q15_t)0x646C, (q15_t)0x4F5E, - (q15_t)0x63EF, (q15_t)0x4FFB, (q15_t)0x6371, (q15_t)0x5097, - (q15_t)0x62F2, (q15_t)0x5133, (q15_t)0x6271, (q15_t)0x51CE, - (q15_t)0x61F1, (q15_t)0x5269, (q15_t)0x616F, (q15_t)0x5302, - (q15_t)0x60EC, (q15_t)0x539B, (q15_t)0x6068, (q15_t)0x5433, - (q15_t)0x5FE3, (q15_t)0x54CA, (q15_t)0x5F5E, (q15_t)0x5560, - (q15_t)0x5ED7, (q15_t)0x55F5, (q15_t)0x5E50, (q15_t)0x568A, - (q15_t)0x5DC7, (q15_t)0x571D, (q15_t)0x5D3E, (q15_t)0x57B0, - (q15_t)0x5CB4, (q15_t)0x5842, (q15_t)0x5C29, (q15_t)0x58D4, - (q15_t)0x5B9D, (q15_t)0x5964, (q15_t)0x5B10, (q15_t)0x59F3, - (q15_t)0x5A82, (q15_t)0x5A82, (q15_t)0x59F3, (q15_t)0x5B10, - (q15_t)0x5964, (q15_t)0x5B9D, (q15_t)0x58D4, (q15_t)0x5C29, - (q15_t)0x5842, (q15_t)0x5CB4, (q15_t)0x57B0, (q15_t)0x5D3E, - (q15_t)0x571D, (q15_t)0x5DC7, (q15_t)0x568A, (q15_t)0x5E50, - (q15_t)0x55F5, (q15_t)0x5ED7, (q15_t)0x5560, (q15_t)0x5F5E, - (q15_t)0x54CA, (q15_t)0x5FE3, (q15_t)0x5433, (q15_t)0x6068, - (q15_t)0x539B, (q15_t)0x60EC, (q15_t)0x5302, (q15_t)0x616F, - (q15_t)0x5269, (q15_t)0x61F1, (q15_t)0x51CE, (q15_t)0x6271, - (q15_t)0x5133, (q15_t)0x62F2, (q15_t)0x5097, (q15_t)0x6371, - (q15_t)0x4FFB, (q15_t)0x63EF, (q15_t)0x4F5E, (q15_t)0x646C, - (q15_t)0x4EBF, (q15_t)0x64E8, (q15_t)0x4E21, (q15_t)0x6563, - (q15_t)0x4D81, (q15_t)0x65DD, (q15_t)0x4CE1, (q15_t)0x6657, - (q15_t)0x4C3F, (q15_t)0x66CF, (q15_t)0x4B9E, (q15_t)0x6746, - (q15_t)0x4AFB, (q15_t)0x67BD, (q15_t)0x4A58, (q15_t)0x6832, - (q15_t)0x49B4, (q15_t)0x68A6, (q15_t)0x490F, (q15_t)0x6919, - (q15_t)0x4869, (q15_t)0x698C, (q15_t)0x47C3, (q15_t)0x69FD, - (q15_t)0x471C, (q15_t)0x6A6D, (q15_t)0x4675, (q15_t)0x6ADC, - (q15_t)0x45CD, (q15_t)0x6B4A, (q15_t)0x4524, (q15_t)0x6BB8, - (q15_t)0x447A, (q15_t)0x6C24, (q15_t)0x43D0, (q15_t)0x6C8F, - (q15_t)0x4325, (q15_t)0x6CF9, (q15_t)0x427A, (q15_t)0x6D62, - (q15_t)0x41CE, (q15_t)0x6DCA, (q15_t)0x4121, (q15_t)0x6E30, - (q15_t)0x4073, (q15_t)0x6E96, (q15_t)0x3FC5, (q15_t)0x6EFB, - (q15_t)0x3F17, (q15_t)0x6F5F, (q15_t)0x3E68, (q15_t)0x6FC1, - (q15_t)0x3DB8, (q15_t)0x7023, (q15_t)0x3D07, (q15_t)0x7083, - (q15_t)0x3C56, (q15_t)0x70E2, (q15_t)0x3BA5, (q15_t)0x7141, - (q15_t)0x3AF2, (q15_t)0x719E, (q15_t)0x3A40, (q15_t)0x71FA, - (q15_t)0x398C, (q15_t)0x7255, (q15_t)0x38D8, (q15_t)0x72AF, - (q15_t)0x3824, (q15_t)0x7307, (q15_t)0x376F, (q15_t)0x735F, - (q15_t)0x36BA, (q15_t)0x73B5, (q15_t)0x3604, (q15_t)0x740B, - (q15_t)0x354D, (q15_t)0x745F, (q15_t)0x3496, (q15_t)0x74B2, - (q15_t)0x33DE, (q15_t)0x7504, (q15_t)0x3326, (q15_t)0x7555, - (q15_t)0x326E, (q15_t)0x75A5, (q15_t)0x31B5, (q15_t)0x75F4, - (q15_t)0x30FB, (q15_t)0x7641, (q15_t)0x3041, (q15_t)0x768E, - (q15_t)0x2F87, (q15_t)0x76D9, (q15_t)0x2ECC, (q15_t)0x7723, - (q15_t)0x2E11, (q15_t)0x776C, (q15_t)0x2D55, (q15_t)0x77B4, - (q15_t)0x2C98, (q15_t)0x77FA, (q15_t)0x2BDC, (q15_t)0x7840, - (q15_t)0x2B1F, (q15_t)0x7884, (q15_t)0x2A61, (q15_t)0x78C7, - (q15_t)0x29A3, (q15_t)0x7909, (q15_t)0x28E5, (q15_t)0x794A, - (q15_t)0x2826, (q15_t)0x798A, (q15_t)0x2767, (q15_t)0x79C8, - (q15_t)0x26A8, (q15_t)0x7A05, (q15_t)0x25E8, (q15_t)0x7A42, - (q15_t)0x2528, (q15_t)0x7A7D, (q15_t)0x2467, (q15_t)0x7AB6, - (q15_t)0x23A6, (q15_t)0x7AEF, (q15_t)0x22E5, (q15_t)0x7B26, - (q15_t)0x2223, (q15_t)0x7B5D, (q15_t)0x2161, (q15_t)0x7B92, - (q15_t)0x209F, (q15_t)0x7BC5, (q15_t)0x1FDC, (q15_t)0x7BF8, - (q15_t)0x1F19, (q15_t)0x7C29, (q15_t)0x1E56, (q15_t)0x7C5A, - (q15_t)0x1D93, (q15_t)0x7C89, (q15_t)0x1CCF, (q15_t)0x7CB7, - (q15_t)0x1C0B, (q15_t)0x7CE3, (q15_t)0x1B47, (q15_t)0x7D0F, - (q15_t)0x1A82, (q15_t)0x7D39, (q15_t)0x19BD, (q15_t)0x7D62, - (q15_t)0x18F8, (q15_t)0x7D8A, (q15_t)0x1833, (q15_t)0x7DB0, - (q15_t)0x176D, (q15_t)0x7DD6, (q15_t)0x16A8, (q15_t)0x7DFA, - (q15_t)0x15E2, (q15_t)0x7E1D, (q15_t)0x151B, (q15_t)0x7E3F, - (q15_t)0x1455, (q15_t)0x7E5F, (q15_t)0x138E, (q15_t)0x7E7F, - (q15_t)0x12C8, (q15_t)0x7E9D, (q15_t)0x1201, (q15_t)0x7EBA, - (q15_t)0x1139, (q15_t)0x7ED5, (q15_t)0x1072, (q15_t)0x7EF0, - (q15_t)0x0FAB, (q15_t)0x7F09, (q15_t)0x0EE3, (q15_t)0x7F21, - (q15_t)0x0E1B, (q15_t)0x7F38, (q15_t)0x0D53, (q15_t)0x7F4D, - (q15_t)0x0C8B, (q15_t)0x7F62, (q15_t)0x0BC3, (q15_t)0x7F75, - (q15_t)0x0AFB, (q15_t)0x7F87, (q15_t)0x0A33, (q15_t)0x7F97, - (q15_t)0x096A, (q15_t)0x7FA7, (q15_t)0x08A2, (q15_t)0x7FB5, - (q15_t)0x07D9, (q15_t)0x7FC2, (q15_t)0x0710, (q15_t)0x7FCE, - (q15_t)0x0647, (q15_t)0x7FD8, (q15_t)0x057F, (q15_t)0x7FE1, - (q15_t)0x04B6, (q15_t)0x7FE9, (q15_t)0x03ED, (q15_t)0x7FF0, - (q15_t)0x0324, (q15_t)0x7FF6, (q15_t)0x025B, (q15_t)0x7FFA, - (q15_t)0x0192, (q15_t)0x7FFD, (q15_t)0x00C9, (q15_t)0x7FFF, - (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0xFF36, (q15_t)0x7FFF, - (q15_t)0xFE6D, (q15_t)0x7FFD, (q15_t)0xFDA4, (q15_t)0x7FFA, - (q15_t)0xFCDB, (q15_t)0x7FF6, (q15_t)0xFC12, (q15_t)0x7FF0, - (q15_t)0xFB49, (q15_t)0x7FE9, (q15_t)0xFA80, (q15_t)0x7FE1, - (q15_t)0xF9B8, (q15_t)0x7FD8, (q15_t)0xF8EF, (q15_t)0x7FCE, - (q15_t)0xF826, (q15_t)0x7FC2, (q15_t)0xF75D, (q15_t)0x7FB5, - (q15_t)0xF695, (q15_t)0x7FA7, (q15_t)0xF5CC, (q15_t)0x7F97, - (q15_t)0xF504, (q15_t)0x7F87, (q15_t)0xF43C, (q15_t)0x7F75, - (q15_t)0xF374, (q15_t)0x7F62, (q15_t)0xF2AC, (q15_t)0x7F4D, - (q15_t)0xF1E4, (q15_t)0x7F38, (q15_t)0xF11C, (q15_t)0x7F21, - (q15_t)0xF054, (q15_t)0x7F09, (q15_t)0xEF8D, (q15_t)0x7EF0, - (q15_t)0xEEC6, (q15_t)0x7ED5, (q15_t)0xEDFE, (q15_t)0x7EBA, - (q15_t)0xED37, (q15_t)0x7E9D, (q15_t)0xEC71, (q15_t)0x7E7F, - (q15_t)0xEBAA, (q15_t)0x7E5F, (q15_t)0xEAE4, (q15_t)0x7E3F, - (q15_t)0xEA1D, (q15_t)0x7E1D, (q15_t)0xE957, (q15_t)0x7DFA, - (q15_t)0xE892, (q15_t)0x7DD6, (q15_t)0xE7CC, (q15_t)0x7DB0, - (q15_t)0xE707, (q15_t)0x7D8A, (q15_t)0xE642, (q15_t)0x7D62, - (q15_t)0xE57D, (q15_t)0x7D39, (q15_t)0xE4B8, (q15_t)0x7D0F, - (q15_t)0xE3F4, (q15_t)0x7CE3, (q15_t)0xE330, (q15_t)0x7CB7, - (q15_t)0xE26C, (q15_t)0x7C89, (q15_t)0xE1A9, (q15_t)0x7C5A, - (q15_t)0xE0E6, (q15_t)0x7C29, (q15_t)0xE023, (q15_t)0x7BF8, - (q15_t)0xDF60, (q15_t)0x7BC5, (q15_t)0xDE9E, (q15_t)0x7B92, - (q15_t)0xDDDC, (q15_t)0x7B5D, (q15_t)0xDD1A, (q15_t)0x7B26, - (q15_t)0xDC59, (q15_t)0x7AEF, (q15_t)0xDB98, (q15_t)0x7AB6, - (q15_t)0xDAD7, (q15_t)0x7A7D, (q15_t)0xDA17, (q15_t)0x7A42, - (q15_t)0xD957, (q15_t)0x7A05, (q15_t)0xD898, (q15_t)0x79C8, - (q15_t)0xD7D9, (q15_t)0x798A, (q15_t)0xD71A, (q15_t)0x794A, - (q15_t)0xD65C, (q15_t)0x7909, (q15_t)0xD59E, (q15_t)0x78C7, - (q15_t)0xD4E0, (q15_t)0x7884, (q15_t)0xD423, (q15_t)0x7840, - (q15_t)0xD367, (q15_t)0x77FA, (q15_t)0xD2AA, (q15_t)0x77B4, - (q15_t)0xD1EE, (q15_t)0x776C, (q15_t)0xD133, (q15_t)0x7723, - (q15_t)0xD078, (q15_t)0x76D9, (q15_t)0xCFBE, (q15_t)0x768E, - (q15_t)0xCF04, (q15_t)0x7641, (q15_t)0xCE4A, (q15_t)0x75F4, - (q15_t)0xCD91, (q15_t)0x75A5, (q15_t)0xCCD9, (q15_t)0x7555, - (q15_t)0xCC21, (q15_t)0x7504, (q15_t)0xCB69, (q15_t)0x74B2, - (q15_t)0xCAB2, (q15_t)0x745F, (q15_t)0xC9FB, (q15_t)0x740B, - (q15_t)0xC945, (q15_t)0x73B5, (q15_t)0xC890, (q15_t)0x735F, - (q15_t)0xC7DB, (q15_t)0x7307, (q15_t)0xC727, (q15_t)0x72AF, - (q15_t)0xC673, (q15_t)0x7255, (q15_t)0xC5BF, (q15_t)0x71FA, - (q15_t)0xC50D, (q15_t)0x719E, (q15_t)0xC45A, (q15_t)0x7141, - (q15_t)0xC3A9, (q15_t)0x70E2, (q15_t)0xC2F8, (q15_t)0x7083, - (q15_t)0xC247, (q15_t)0x7023, (q15_t)0xC197, (q15_t)0x6FC1, - (q15_t)0xC0E8, (q15_t)0x6F5F, (q15_t)0xC03A, (q15_t)0x6EFB, - (q15_t)0xBF8C, (q15_t)0x6E96, (q15_t)0xBEDE, (q15_t)0x6E30, - (q15_t)0xBE31, (q15_t)0x6DCA, (q15_t)0xBD85, (q15_t)0x6D62, - (q15_t)0xBCDA, (q15_t)0x6CF9, (q15_t)0xBC2F, (q15_t)0x6C8F, - (q15_t)0xBB85, (q15_t)0x6C24, (q15_t)0xBADB, (q15_t)0x6BB8, - (q15_t)0xBA32, (q15_t)0x6B4A, (q15_t)0xB98A, (q15_t)0x6ADC, - (q15_t)0xB8E3, (q15_t)0x6A6D, (q15_t)0xB83C, (q15_t)0x69FD, - (q15_t)0xB796, (q15_t)0x698C, (q15_t)0xB6F0, (q15_t)0x6919, - (q15_t)0xB64B, (q15_t)0x68A6, (q15_t)0xB5A7, (q15_t)0x6832, - (q15_t)0xB504, (q15_t)0x67BD, (q15_t)0xB461, (q15_t)0x6746, - (q15_t)0xB3C0, (q15_t)0x66CF, (q15_t)0xB31E, (q15_t)0x6657, - (q15_t)0xB27E, (q15_t)0x65DD, (q15_t)0xB1DE, (q15_t)0x6563, - (q15_t)0xB140, (q15_t)0x64E8, (q15_t)0xB0A1, (q15_t)0x646C, - (q15_t)0xB004, (q15_t)0x63EF, (q15_t)0xAF68, (q15_t)0x6371, - (q15_t)0xAECC, (q15_t)0x62F2, (q15_t)0xAE31, (q15_t)0x6271, - (q15_t)0xAD96, (q15_t)0x61F1, (q15_t)0xACFD, (q15_t)0x616F, - (q15_t)0xAC64, (q15_t)0x60EC, (q15_t)0xABCC, (q15_t)0x6068, - (q15_t)0xAB35, (q15_t)0x5FE3, (q15_t)0xAA9F, (q15_t)0x5F5E, - (q15_t)0xAA0A, (q15_t)0x5ED7, (q15_t)0xA975, (q15_t)0x5E50, - (q15_t)0xA8E2, (q15_t)0x5DC7, (q15_t)0xA84F, (q15_t)0x5D3E, - (q15_t)0xA7BD, (q15_t)0x5CB4, (q15_t)0xA72B, (q15_t)0x5C29, - (q15_t)0xA69B, (q15_t)0x5B9D, (q15_t)0xA60C, (q15_t)0x5B10, - (q15_t)0xA57D, (q15_t)0x5A82, (q15_t)0xA4EF, (q15_t)0x59F3, - (q15_t)0xA462, (q15_t)0x5964, (q15_t)0xA3D6, (q15_t)0x58D4, - (q15_t)0xA34B, (q15_t)0x5842, (q15_t)0xA2C1, (q15_t)0x57B0, - (q15_t)0xA238, (q15_t)0x571D, (q15_t)0xA1AF, (q15_t)0x568A, - (q15_t)0xA128, (q15_t)0x55F5, (q15_t)0xA0A1, (q15_t)0x5560, - (q15_t)0xA01C, (q15_t)0x54CA, (q15_t)0x9F97, (q15_t)0x5433, - (q15_t)0x9F13, (q15_t)0x539B, (q15_t)0x9E90, (q15_t)0x5302, - (q15_t)0x9E0E, (q15_t)0x5269, (q15_t)0x9D8E, (q15_t)0x51CE, - (q15_t)0x9D0D, (q15_t)0x5133, (q15_t)0x9C8E, (q15_t)0x5097, - (q15_t)0x9C10, (q15_t)0x4FFB, (q15_t)0x9B93, (q15_t)0x4F5E, - (q15_t)0x9B17, (q15_t)0x4EBF, (q15_t)0x9A9C, (q15_t)0x4E21, - (q15_t)0x9A22, (q15_t)0x4D81, (q15_t)0x99A8, (q15_t)0x4CE1, - (q15_t)0x9930, (q15_t)0x4C3F, (q15_t)0x98B9, (q15_t)0x4B9E, - (q15_t)0x9842, (q15_t)0x4AFB, (q15_t)0x97CD, (q15_t)0x4A58, - (q15_t)0x9759, (q15_t)0x49B4, (q15_t)0x96E6, (q15_t)0x490F, - (q15_t)0x9673, (q15_t)0x4869, (q15_t)0x9602, (q15_t)0x47C3, - (q15_t)0x9592, (q15_t)0x471C, (q15_t)0x9523, (q15_t)0x4675, - (q15_t)0x94B5, (q15_t)0x45CD, (q15_t)0x9447, (q15_t)0x4524, - (q15_t)0x93DB, (q15_t)0x447A, (q15_t)0x9370, (q15_t)0x43D0, - (q15_t)0x9306, (q15_t)0x4325, (q15_t)0x929D, (q15_t)0x427A, - (q15_t)0x9235, (q15_t)0x41CE, (q15_t)0x91CF, (q15_t)0x4121, - (q15_t)0x9169, (q15_t)0x4073, (q15_t)0x9104, (q15_t)0x3FC5, - (q15_t)0x90A0, (q15_t)0x3F17, (q15_t)0x903E, (q15_t)0x3E68, - (q15_t)0x8FDC, (q15_t)0x3DB8, (q15_t)0x8F7C, (q15_t)0x3D07, - (q15_t)0x8F1D, (q15_t)0x3C56, (q15_t)0x8EBE, (q15_t)0x3BA5, - (q15_t)0x8E61, (q15_t)0x3AF2, (q15_t)0x8E05, (q15_t)0x3A40, - (q15_t)0x8DAA, (q15_t)0x398C, (q15_t)0x8D50, (q15_t)0x38D8, - (q15_t)0x8CF8, (q15_t)0x3824, (q15_t)0x8CA0, (q15_t)0x376F, - (q15_t)0x8C4A, (q15_t)0x36BA, (q15_t)0x8BF4, (q15_t)0x3604, - (q15_t)0x8BA0, (q15_t)0x354D, (q15_t)0x8B4D, (q15_t)0x3496, - (q15_t)0x8AFB, (q15_t)0x33DE, (q15_t)0x8AAA, (q15_t)0x3326, - (q15_t)0x8A5A, (q15_t)0x326E, (q15_t)0x8A0B, (q15_t)0x31B5, - (q15_t)0x89BE, (q15_t)0x30FB, (q15_t)0x8971, (q15_t)0x3041, - (q15_t)0x8926, (q15_t)0x2F87, (q15_t)0x88DC, (q15_t)0x2ECC, - (q15_t)0x8893, (q15_t)0x2E11, (q15_t)0x884B, (q15_t)0x2D55, - (q15_t)0x8805, (q15_t)0x2C98, (q15_t)0x87BF, (q15_t)0x2BDC, - (q15_t)0x877B, (q15_t)0x2B1F, (q15_t)0x8738, (q15_t)0x2A61, - (q15_t)0x86F6, (q15_t)0x29A3, (q15_t)0x86B5, (q15_t)0x28E5, - (q15_t)0x8675, (q15_t)0x2826, (q15_t)0x8637, (q15_t)0x2767, - (q15_t)0x85FA, (q15_t)0x26A8, (q15_t)0x85BD, (q15_t)0x25E8, - (q15_t)0x8582, (q15_t)0x2528, (q15_t)0x8549, (q15_t)0x2467, - (q15_t)0x8510, (q15_t)0x23A6, (q15_t)0x84D9, (q15_t)0x22E5, - (q15_t)0x84A2, (q15_t)0x2223, (q15_t)0x846D, (q15_t)0x2161, - (q15_t)0x843A, (q15_t)0x209F, (q15_t)0x8407, (q15_t)0x1FDC, - (q15_t)0x83D6, (q15_t)0x1F19, (q15_t)0x83A5, (q15_t)0x1E56, - (q15_t)0x8376, (q15_t)0x1D93, (q15_t)0x8348, (q15_t)0x1CCF, - (q15_t)0x831C, (q15_t)0x1C0B, (q15_t)0x82F0, (q15_t)0x1B47, - (q15_t)0x82C6, (q15_t)0x1A82, (q15_t)0x829D, (q15_t)0x19BD, - (q15_t)0x8275, (q15_t)0x18F8, (q15_t)0x824F, (q15_t)0x1833, - (q15_t)0x8229, (q15_t)0x176D, (q15_t)0x8205, (q15_t)0x16A8, - (q15_t)0x81E2, (q15_t)0x15E2, (q15_t)0x81C0, (q15_t)0x151B, - (q15_t)0x81A0, (q15_t)0x1455, (q15_t)0x8180, (q15_t)0x138E, - (q15_t)0x8162, (q15_t)0x12C8, (q15_t)0x8145, (q15_t)0x1201, - (q15_t)0x812A, (q15_t)0x1139, (q15_t)0x810F, (q15_t)0x1072, - (q15_t)0x80F6, (q15_t)0x0FAB, (q15_t)0x80DE, (q15_t)0x0EE3, - (q15_t)0x80C7, (q15_t)0x0E1B, (q15_t)0x80B2, (q15_t)0x0D53, - (q15_t)0x809D, (q15_t)0x0C8B, (q15_t)0x808A, (q15_t)0x0BC3, - (q15_t)0x8078, (q15_t)0x0AFB, (q15_t)0x8068, (q15_t)0x0A33, - (q15_t)0x8058, (q15_t)0x096A, (q15_t)0x804A, (q15_t)0x08A2, - (q15_t)0x803D, (q15_t)0x07D9, (q15_t)0x8031, (q15_t)0x0710, - (q15_t)0x8027, (q15_t)0x0647, (q15_t)0x801E, (q15_t)0x057F, - (q15_t)0x8016, (q15_t)0x04B6, (q15_t)0x800F, (q15_t)0x03ED, - (q15_t)0x8009, (q15_t)0x0324, (q15_t)0x8005, (q15_t)0x025B, - (q15_t)0x8002, (q15_t)0x0192, (q15_t)0x8000, (q15_t)0x00C9, - (q15_t)0x8000, (q15_t)0x0000, (q15_t)0x8000, (q15_t)0xFF36, - (q15_t)0x8002, (q15_t)0xFE6D, (q15_t)0x8005, (q15_t)0xFDA4, - (q15_t)0x8009, (q15_t)0xFCDB, (q15_t)0x800F, (q15_t)0xFC12, - (q15_t)0x8016, (q15_t)0xFB49, (q15_t)0x801E, (q15_t)0xFA80, - (q15_t)0x8027, (q15_t)0xF9B8, (q15_t)0x8031, (q15_t)0xF8EF, - (q15_t)0x803D, (q15_t)0xF826, (q15_t)0x804A, (q15_t)0xF75D, - (q15_t)0x8058, (q15_t)0xF695, (q15_t)0x8068, (q15_t)0xF5CC, - (q15_t)0x8078, (q15_t)0xF504, (q15_t)0x808A, (q15_t)0xF43C, - (q15_t)0x809D, (q15_t)0xF374, (q15_t)0x80B2, (q15_t)0xF2AC, - (q15_t)0x80C7, (q15_t)0xF1E4, (q15_t)0x80DE, (q15_t)0xF11C, - (q15_t)0x80F6, (q15_t)0xF054, (q15_t)0x810F, (q15_t)0xEF8D, - (q15_t)0x812A, (q15_t)0xEEC6, (q15_t)0x8145, (q15_t)0xEDFE, - (q15_t)0x8162, (q15_t)0xED37, (q15_t)0x8180, (q15_t)0xEC71, - (q15_t)0x81A0, (q15_t)0xEBAA, (q15_t)0x81C0, (q15_t)0xEAE4, - (q15_t)0x81E2, (q15_t)0xEA1D, (q15_t)0x8205, (q15_t)0xE957, - (q15_t)0x8229, (q15_t)0xE892, (q15_t)0x824F, (q15_t)0xE7CC, - (q15_t)0x8275, (q15_t)0xE707, (q15_t)0x829D, (q15_t)0xE642, - (q15_t)0x82C6, (q15_t)0xE57D, (q15_t)0x82F0, (q15_t)0xE4B8, - (q15_t)0x831C, (q15_t)0xE3F4, (q15_t)0x8348, (q15_t)0xE330, - (q15_t)0x8376, (q15_t)0xE26C, (q15_t)0x83A5, (q15_t)0xE1A9, - (q15_t)0x83D6, (q15_t)0xE0E6, (q15_t)0x8407, (q15_t)0xE023, - (q15_t)0x843A, (q15_t)0xDF60, (q15_t)0x846D, (q15_t)0xDE9E, - (q15_t)0x84A2, (q15_t)0xDDDC, (q15_t)0x84D9, (q15_t)0xDD1A, - (q15_t)0x8510, (q15_t)0xDC59, (q15_t)0x8549, (q15_t)0xDB98, - (q15_t)0x8582, (q15_t)0xDAD7, (q15_t)0x85BD, (q15_t)0xDA17, - (q15_t)0x85FA, (q15_t)0xD957, (q15_t)0x8637, (q15_t)0xD898, - (q15_t)0x8675, (q15_t)0xD7D9, (q15_t)0x86B5, (q15_t)0xD71A, - (q15_t)0x86F6, (q15_t)0xD65C, (q15_t)0x8738, (q15_t)0xD59E, - (q15_t)0x877B, (q15_t)0xD4E0, (q15_t)0x87BF, (q15_t)0xD423, - (q15_t)0x8805, (q15_t)0xD367, (q15_t)0x884B, (q15_t)0xD2AA, - (q15_t)0x8893, (q15_t)0xD1EE, (q15_t)0x88DC, (q15_t)0xD133, - (q15_t)0x8926, (q15_t)0xD078, (q15_t)0x8971, (q15_t)0xCFBE, - (q15_t)0x89BE, (q15_t)0xCF04, (q15_t)0x8A0B, (q15_t)0xCE4A, - (q15_t)0x8A5A, (q15_t)0xCD91, (q15_t)0x8AAA, (q15_t)0xCCD9, - (q15_t)0x8AFB, (q15_t)0xCC21, (q15_t)0x8B4D, (q15_t)0xCB69, - (q15_t)0x8BA0, (q15_t)0xCAB2, (q15_t)0x8BF4, (q15_t)0xC9FB, - (q15_t)0x8C4A, (q15_t)0xC945, (q15_t)0x8CA0, (q15_t)0xC890, - (q15_t)0x8CF8, (q15_t)0xC7DB, (q15_t)0x8D50, (q15_t)0xC727, - (q15_t)0x8DAA, (q15_t)0xC673, (q15_t)0x8E05, (q15_t)0xC5BF, - (q15_t)0x8E61, (q15_t)0xC50D, (q15_t)0x8EBE, (q15_t)0xC45A, - (q15_t)0x8F1D, (q15_t)0xC3A9, (q15_t)0x8F7C, (q15_t)0xC2F8, - (q15_t)0x8FDC, (q15_t)0xC247, (q15_t)0x903E, (q15_t)0xC197, - (q15_t)0x90A0, (q15_t)0xC0E8, (q15_t)0x9104, (q15_t)0xC03A, - (q15_t)0x9169, (q15_t)0xBF8C, (q15_t)0x91CF, (q15_t)0xBEDE, - (q15_t)0x9235, (q15_t)0xBE31, (q15_t)0x929D, (q15_t)0xBD85, - (q15_t)0x9306, (q15_t)0xBCDA, (q15_t)0x9370, (q15_t)0xBC2F, - (q15_t)0x93DB, (q15_t)0xBB85, (q15_t)0x9447, (q15_t)0xBADB, - (q15_t)0x94B5, (q15_t)0xBA32, (q15_t)0x9523, (q15_t)0xB98A, - (q15_t)0x9592, (q15_t)0xB8E3, (q15_t)0x9602, (q15_t)0xB83C, - (q15_t)0x9673, (q15_t)0xB796, (q15_t)0x96E6, (q15_t)0xB6F0, - (q15_t)0x9759, (q15_t)0xB64B, (q15_t)0x97CD, (q15_t)0xB5A7, - (q15_t)0x9842, (q15_t)0xB504, (q15_t)0x98B9, (q15_t)0xB461, - (q15_t)0x9930, (q15_t)0xB3C0, (q15_t)0x99A8, (q15_t)0xB31E, - (q15_t)0x9A22, (q15_t)0xB27E, (q15_t)0x9A9C, (q15_t)0xB1DE, - (q15_t)0x9B17, (q15_t)0xB140, (q15_t)0x9B93, (q15_t)0xB0A1, - (q15_t)0x9C10, (q15_t)0xB004, (q15_t)0x9C8E, (q15_t)0xAF68, - (q15_t)0x9D0D, (q15_t)0xAECC, (q15_t)0x9D8E, (q15_t)0xAE31, - (q15_t)0x9E0E, (q15_t)0xAD96, (q15_t)0x9E90, (q15_t)0xACFD, - (q15_t)0x9F13, (q15_t)0xAC64, (q15_t)0x9F97, (q15_t)0xABCC, - (q15_t)0xA01C, (q15_t)0xAB35, (q15_t)0xA0A1, (q15_t)0xAA9F, - (q15_t)0xA128, (q15_t)0xAA0A, (q15_t)0xA1AF, (q15_t)0xA975, - (q15_t)0xA238, (q15_t)0xA8E2, (q15_t)0xA2C1, (q15_t)0xA84F, - (q15_t)0xA34B, (q15_t)0xA7BD, (q15_t)0xA3D6, (q15_t)0xA72B, - (q15_t)0xA462, (q15_t)0xA69B, (q15_t)0xA4EF, (q15_t)0xA60C, - (q15_t)0xA57D, (q15_t)0xA57D, (q15_t)0xA60C, (q15_t)0xA4EF, - (q15_t)0xA69B, (q15_t)0xA462, (q15_t)0xA72B, (q15_t)0xA3D6, - (q15_t)0xA7BD, (q15_t)0xA34B, (q15_t)0xA84F, (q15_t)0xA2C1, - (q15_t)0xA8E2, (q15_t)0xA238, (q15_t)0xA975, (q15_t)0xA1AF, - (q15_t)0xAA0A, (q15_t)0xA128, (q15_t)0xAA9F, (q15_t)0xA0A1, - (q15_t)0xAB35, (q15_t)0xA01C, (q15_t)0xABCC, (q15_t)0x9F97, - (q15_t)0xAC64, (q15_t)0x9F13, (q15_t)0xACFD, (q15_t)0x9E90, - (q15_t)0xAD96, (q15_t)0x9E0E, (q15_t)0xAE31, (q15_t)0x9D8E, - (q15_t)0xAECC, (q15_t)0x9D0D, (q15_t)0xAF68, (q15_t)0x9C8E, - (q15_t)0xB004, (q15_t)0x9C10, (q15_t)0xB0A1, (q15_t)0x9B93, - (q15_t)0xB140, (q15_t)0x9B17, (q15_t)0xB1DE, (q15_t)0x9A9C, - (q15_t)0xB27E, (q15_t)0x9A22, (q15_t)0xB31E, (q15_t)0x99A8, - (q15_t)0xB3C0, (q15_t)0x9930, (q15_t)0xB461, (q15_t)0x98B9, - (q15_t)0xB504, (q15_t)0x9842, (q15_t)0xB5A7, (q15_t)0x97CD, - (q15_t)0xB64B, (q15_t)0x9759, (q15_t)0xB6F0, (q15_t)0x96E6, - (q15_t)0xB796, (q15_t)0x9673, (q15_t)0xB83C, (q15_t)0x9602, - (q15_t)0xB8E3, (q15_t)0x9592, (q15_t)0xB98A, (q15_t)0x9523, - (q15_t)0xBA32, (q15_t)0x94B5, (q15_t)0xBADB, (q15_t)0x9447, - (q15_t)0xBB85, (q15_t)0x93DB, (q15_t)0xBC2F, (q15_t)0x9370, - (q15_t)0xBCDA, (q15_t)0x9306, (q15_t)0xBD85, (q15_t)0x929D, - (q15_t)0xBE31, (q15_t)0x9235, (q15_t)0xBEDE, (q15_t)0x91CF, - (q15_t)0xBF8C, (q15_t)0x9169, (q15_t)0xC03A, (q15_t)0x9104, - (q15_t)0xC0E8, (q15_t)0x90A0, (q15_t)0xC197, (q15_t)0x903E, - (q15_t)0xC247, (q15_t)0x8FDC, (q15_t)0xC2F8, (q15_t)0x8F7C, - (q15_t)0xC3A9, (q15_t)0x8F1D, (q15_t)0xC45A, (q15_t)0x8EBE, - (q15_t)0xC50D, (q15_t)0x8E61, (q15_t)0xC5BF, (q15_t)0x8E05, - (q15_t)0xC673, (q15_t)0x8DAA, (q15_t)0xC727, (q15_t)0x8D50, - (q15_t)0xC7DB, (q15_t)0x8CF8, (q15_t)0xC890, (q15_t)0x8CA0, - (q15_t)0xC945, (q15_t)0x8C4A, (q15_t)0xC9FB, (q15_t)0x8BF4, - (q15_t)0xCAB2, (q15_t)0x8BA0, (q15_t)0xCB69, (q15_t)0x8B4D, - (q15_t)0xCC21, (q15_t)0x8AFB, (q15_t)0xCCD9, (q15_t)0x8AAA, - (q15_t)0xCD91, (q15_t)0x8A5A, (q15_t)0xCE4A, (q15_t)0x8A0B, - (q15_t)0xCF04, (q15_t)0x89BE, (q15_t)0xCFBE, (q15_t)0x8971, - (q15_t)0xD078, (q15_t)0x8926, (q15_t)0xD133, (q15_t)0x88DC, - (q15_t)0xD1EE, (q15_t)0x8893, (q15_t)0xD2AA, (q15_t)0x884B, - (q15_t)0xD367, (q15_t)0x8805, (q15_t)0xD423, (q15_t)0x87BF, - (q15_t)0xD4E0, (q15_t)0x877B, (q15_t)0xD59E, (q15_t)0x8738, - (q15_t)0xD65C, (q15_t)0x86F6, (q15_t)0xD71A, (q15_t)0x86B5, - (q15_t)0xD7D9, (q15_t)0x8675, (q15_t)0xD898, (q15_t)0x8637, - (q15_t)0xD957, (q15_t)0x85FA, (q15_t)0xDA17, (q15_t)0x85BD, - (q15_t)0xDAD7, (q15_t)0x8582, (q15_t)0xDB98, (q15_t)0x8549, - (q15_t)0xDC59, (q15_t)0x8510, (q15_t)0xDD1A, (q15_t)0x84D9, - (q15_t)0xDDDC, (q15_t)0x84A2, (q15_t)0xDE9E, (q15_t)0x846D, - (q15_t)0xDF60, (q15_t)0x843A, (q15_t)0xE023, (q15_t)0x8407, - (q15_t)0xE0E6, (q15_t)0x83D6, (q15_t)0xE1A9, (q15_t)0x83A5, - (q15_t)0xE26C, (q15_t)0x8376, (q15_t)0xE330, (q15_t)0x8348, - (q15_t)0xE3F4, (q15_t)0x831C, (q15_t)0xE4B8, (q15_t)0x82F0, - (q15_t)0xE57D, (q15_t)0x82C6, (q15_t)0xE642, (q15_t)0x829D, - (q15_t)0xE707, (q15_t)0x8275, (q15_t)0xE7CC, (q15_t)0x824F, - (q15_t)0xE892, (q15_t)0x8229, (q15_t)0xE957, (q15_t)0x8205, - (q15_t)0xEA1D, (q15_t)0x81E2, (q15_t)0xEAE4, (q15_t)0x81C0, - (q15_t)0xEBAA, (q15_t)0x81A0, (q15_t)0xEC71, (q15_t)0x8180, - (q15_t)0xED37, (q15_t)0x8162, (q15_t)0xEDFE, (q15_t)0x8145, - (q15_t)0xEEC6, (q15_t)0x812A, (q15_t)0xEF8D, (q15_t)0x810F, - (q15_t)0xF054, (q15_t)0x80F6, (q15_t)0xF11C, (q15_t)0x80DE, - (q15_t)0xF1E4, (q15_t)0x80C7, (q15_t)0xF2AC, (q15_t)0x80B2, - (q15_t)0xF374, (q15_t)0x809D, (q15_t)0xF43C, (q15_t)0x808A, - (q15_t)0xF504, (q15_t)0x8078, (q15_t)0xF5CC, (q15_t)0x8068, - (q15_t)0xF695, (q15_t)0x8058, (q15_t)0xF75D, (q15_t)0x804A, - (q15_t)0xF826, (q15_t)0x803D, (q15_t)0xF8EF, (q15_t)0x8031, - (q15_t)0xF9B8, (q15_t)0x8027, (q15_t)0xFA80, (q15_t)0x801E, - (q15_t)0xFB49, (q15_t)0x8016, (q15_t)0xFC12, (q15_t)0x800F, - (q15_t)0xFCDB, (q15_t)0x8009, (q15_t)0xFDA4, (q15_t)0x8005, - (q15_t)0xFE6D, (q15_t)0x8002, (q15_t)0xFF36, (q15_t)0x8000 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) -/** - @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, 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] = { - (q15_t)0x7FFF, (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0x0064, - (q15_t)0x7FFF, (q15_t)0x00C9, (q15_t)0x7FFE, (q15_t)0x012D, - (q15_t)0x7FFD, (q15_t)0x0192, (q15_t)0x7FFC, (q15_t)0x01F6, - (q15_t)0x7FFA, (q15_t)0x025B, (q15_t)0x7FF8, (q15_t)0x02BF, - (q15_t)0x7FF6, (q15_t)0x0324, (q15_t)0x7FF3, (q15_t)0x0388, - (q15_t)0x7FF0, (q15_t)0x03ED, (q15_t)0x7FED, (q15_t)0x0451, - (q15_t)0x7FE9, (q15_t)0x04B6, (q15_t)0x7FE5, (q15_t)0x051A, - (q15_t)0x7FE1, (q15_t)0x057F, (q15_t)0x7FDD, (q15_t)0x05E3, - (q15_t)0x7FD8, (q15_t)0x0647, (q15_t)0x7FD3, (q15_t)0x06AC, - (q15_t)0x7FCE, (q15_t)0x0710, (q15_t)0x7FC8, (q15_t)0x0775, - (q15_t)0x7FC2, (q15_t)0x07D9, (q15_t)0x7FBC, (q15_t)0x083D, - (q15_t)0x7FB5, (q15_t)0x08A2, (q15_t)0x7FAE, (q15_t)0x0906, - (q15_t)0x7FA7, (q15_t)0x096A, (q15_t)0x7F9F, (q15_t)0x09CE, - (q15_t)0x7F97, (q15_t)0x0A33, (q15_t)0x7F8F, (q15_t)0x0A97, - (q15_t)0x7F87, (q15_t)0x0AFB, (q15_t)0x7F7E, (q15_t)0x0B5F, - (q15_t)0x7F75, (q15_t)0x0BC3, (q15_t)0x7F6B, (q15_t)0x0C27, - (q15_t)0x7F62, (q15_t)0x0C8B, (q15_t)0x7F58, (q15_t)0x0CEF, - (q15_t)0x7F4D, (q15_t)0x0D53, (q15_t)0x7F43, (q15_t)0x0DB7, - (q15_t)0x7F38, (q15_t)0x0E1B, (q15_t)0x7F2D, (q15_t)0x0E7F, - (q15_t)0x7F21, (q15_t)0x0EE3, (q15_t)0x7F15, (q15_t)0x0F47, - (q15_t)0x7F09, (q15_t)0x0FAB, (q15_t)0x7EFD, (q15_t)0x100E, - (q15_t)0x7EF0, (q15_t)0x1072, (q15_t)0x7EE3, (q15_t)0x10D6, - (q15_t)0x7ED5, (q15_t)0x1139, (q15_t)0x7EC8, (q15_t)0x119D, - (q15_t)0x7EBA, (q15_t)0x1201, (q15_t)0x7EAB, (q15_t)0x1264, - (q15_t)0x7E9D, (q15_t)0x12C8, (q15_t)0x7E8E, (q15_t)0x132B, - (q15_t)0x7E7F, (q15_t)0x138E, (q15_t)0x7E6F, (q15_t)0x13F2, - (q15_t)0x7E5F, (q15_t)0x1455, (q15_t)0x7E4F, (q15_t)0x14B8, - (q15_t)0x7E3F, (q15_t)0x151B, (q15_t)0x7E2E, (q15_t)0x157F, - (q15_t)0x7E1D, (q15_t)0x15E2, (q15_t)0x7E0C, (q15_t)0x1645, - (q15_t)0x7DFA, (q15_t)0x16A8, (q15_t)0x7DE8, (q15_t)0x170A, - (q15_t)0x7DD6, (q15_t)0x176D, (q15_t)0x7DC3, (q15_t)0x17D0, - (q15_t)0x7DB0, (q15_t)0x1833, (q15_t)0x7D9D, (q15_t)0x1896, - (q15_t)0x7D8A, (q15_t)0x18F8, (q15_t)0x7D76, (q15_t)0x195B, - (q15_t)0x7D62, (q15_t)0x19BD, (q15_t)0x7D4E, (q15_t)0x1A20, - (q15_t)0x7D39, (q15_t)0x1A82, (q15_t)0x7D24, (q15_t)0x1AE4, - (q15_t)0x7D0F, (q15_t)0x1B47, (q15_t)0x7CF9, (q15_t)0x1BA9, - (q15_t)0x7CE3, (q15_t)0x1C0B, (q15_t)0x7CCD, (q15_t)0x1C6D, - (q15_t)0x7CB7, (q15_t)0x1CCF, (q15_t)0x7CA0, (q15_t)0x1D31, - (q15_t)0x7C89, (q15_t)0x1D93, (q15_t)0x7C71, (q15_t)0x1DF5, - (q15_t)0x7C5A, (q15_t)0x1E56, (q15_t)0x7C42, (q15_t)0x1EB8, - (q15_t)0x7C29, (q15_t)0x1F19, (q15_t)0x7C11, (q15_t)0x1F7B, - (q15_t)0x7BF8, (q15_t)0x1FDC, (q15_t)0x7BDF, (q15_t)0x203E, - (q15_t)0x7BC5, (q15_t)0x209F, (q15_t)0x7BAC, (q15_t)0x2100, - (q15_t)0x7B92, (q15_t)0x2161, (q15_t)0x7B77, (q15_t)0x21C2, - (q15_t)0x7B5D, (q15_t)0x2223, (q15_t)0x7B42, (q15_t)0x2284, - (q15_t)0x7B26, (q15_t)0x22E5, (q15_t)0x7B0B, (q15_t)0x2345, - (q15_t)0x7AEF, (q15_t)0x23A6, (q15_t)0x7AD3, (q15_t)0x2407, - (q15_t)0x7AB6, (q15_t)0x2467, (q15_t)0x7A9A, (q15_t)0x24C7, - (q15_t)0x7A7D, (q15_t)0x2528, (q15_t)0x7A5F, (q15_t)0x2588, - (q15_t)0x7A42, (q15_t)0x25E8, (q15_t)0x7A24, (q15_t)0x2648, - (q15_t)0x7A05, (q15_t)0x26A8, (q15_t)0x79E7, (q15_t)0x2707, - (q15_t)0x79C8, (q15_t)0x2767, (q15_t)0x79A9, (q15_t)0x27C7, - (q15_t)0x798A, (q15_t)0x2826, (q15_t)0x796A, (q15_t)0x2886, - (q15_t)0x794A, (q15_t)0x28E5, (q15_t)0x792A, (q15_t)0x2944, - (q15_t)0x7909, (q15_t)0x29A3, (q15_t)0x78E8, (q15_t)0x2A02, - (q15_t)0x78C7, (q15_t)0x2A61, (q15_t)0x78A6, (q15_t)0x2AC0, - (q15_t)0x7884, (q15_t)0x2B1F, (q15_t)0x7862, (q15_t)0x2B7D, - (q15_t)0x7840, (q15_t)0x2BDC, (q15_t)0x781D, (q15_t)0x2C3A, - (q15_t)0x77FA, (q15_t)0x2C98, (q15_t)0x77D7, (q15_t)0x2CF7, - (q15_t)0x77B4, (q15_t)0x2D55, (q15_t)0x7790, (q15_t)0x2DB3, - (q15_t)0x776C, (q15_t)0x2E11, (q15_t)0x7747, (q15_t)0x2E6E, - (q15_t)0x7723, (q15_t)0x2ECC, (q15_t)0x76FE, (q15_t)0x2F29, - (q15_t)0x76D9, (q15_t)0x2F87, (q15_t)0x76B3, (q15_t)0x2FE4, - (q15_t)0x768E, (q15_t)0x3041, (q15_t)0x7668, (q15_t)0x309E, - (q15_t)0x7641, (q15_t)0x30FB, (q15_t)0x761B, (q15_t)0x3158, - (q15_t)0x75F4, (q15_t)0x31B5, (q15_t)0x75CC, (q15_t)0x3211, - (q15_t)0x75A5, (q15_t)0x326E, (q15_t)0x757D, (q15_t)0x32CA, - (q15_t)0x7555, (q15_t)0x3326, (q15_t)0x752D, (q15_t)0x3382, - (q15_t)0x7504, (q15_t)0x33DE, (q15_t)0x74DB, (q15_t)0x343A, - (q15_t)0x74B2, (q15_t)0x3496, (q15_t)0x7489, (q15_t)0x34F2, - (q15_t)0x745F, (q15_t)0x354D, (q15_t)0x7435, (q15_t)0x35A8, - (q15_t)0x740B, (q15_t)0x3604, (q15_t)0x73E0, (q15_t)0x365F, - (q15_t)0x73B5, (q15_t)0x36BA, (q15_t)0x738A, (q15_t)0x3714, - (q15_t)0x735F, (q15_t)0x376F, (q15_t)0x7333, (q15_t)0x37CA, - (q15_t)0x7307, (q15_t)0x3824, (q15_t)0x72DB, (q15_t)0x387E, - (q15_t)0x72AF, (q15_t)0x38D8, (q15_t)0x7282, (q15_t)0x3932, - (q15_t)0x7255, (q15_t)0x398C, (q15_t)0x7227, (q15_t)0x39E6, - (q15_t)0x71FA, (q15_t)0x3A40, (q15_t)0x71CC, (q15_t)0x3A99, - (q15_t)0x719E, (q15_t)0x3AF2, (q15_t)0x716F, (q15_t)0x3B4C, - (q15_t)0x7141, (q15_t)0x3BA5, (q15_t)0x7112, (q15_t)0x3BFD, - (q15_t)0x70E2, (q15_t)0x3C56, (q15_t)0x70B3, (q15_t)0x3CAF, - (q15_t)0x7083, (q15_t)0x3D07, (q15_t)0x7053, (q15_t)0x3D60, - (q15_t)0x7023, (q15_t)0x3DB8, (q15_t)0x6FF2, (q15_t)0x3E10, - (q15_t)0x6FC1, (q15_t)0x3E68, (q15_t)0x6F90, (q15_t)0x3EBF, - (q15_t)0x6F5F, (q15_t)0x3F17, (q15_t)0x6F2D, (q15_t)0x3F6E, - (q15_t)0x6EFB, (q15_t)0x3FC5, (q15_t)0x6EC9, (q15_t)0x401D, - (q15_t)0x6E96, (q15_t)0x4073, (q15_t)0x6E63, (q15_t)0x40CA, - (q15_t)0x6E30, (q15_t)0x4121, (q15_t)0x6DFD, (q15_t)0x4177, - (q15_t)0x6DCA, (q15_t)0x41CE, (q15_t)0x6D96, (q15_t)0x4224, - (q15_t)0x6D62, (q15_t)0x427A, (q15_t)0x6D2D, (q15_t)0x42D0, - (q15_t)0x6CF9, (q15_t)0x4325, (q15_t)0x6CC4, (q15_t)0x437B, - (q15_t)0x6C8F, (q15_t)0x43D0, (q15_t)0x6C59, (q15_t)0x4425, - (q15_t)0x6C24, (q15_t)0x447A, (q15_t)0x6BEE, (q15_t)0x44CF, - (q15_t)0x6BB8, (q15_t)0x4524, (q15_t)0x6B81, (q15_t)0x4578, - (q15_t)0x6B4A, (q15_t)0x45CD, (q15_t)0x6B13, (q15_t)0x4621, - (q15_t)0x6ADC, (q15_t)0x4675, (q15_t)0x6AA5, (q15_t)0x46C9, - (q15_t)0x6A6D, (q15_t)0x471C, (q15_t)0x6A35, (q15_t)0x4770, - (q15_t)0x69FD, (q15_t)0x47C3, (q15_t)0x69C4, (q15_t)0x4816, - (q15_t)0x698C, (q15_t)0x4869, (q15_t)0x6953, (q15_t)0x48BC, - (q15_t)0x6919, (q15_t)0x490F, (q15_t)0x68E0, (q15_t)0x4961, - (q15_t)0x68A6, (q15_t)0x49B4, (q15_t)0x686C, (q15_t)0x4A06, - (q15_t)0x6832, (q15_t)0x4A58, (q15_t)0x67F7, (q15_t)0x4AA9, - (q15_t)0x67BD, (q15_t)0x4AFB, (q15_t)0x6782, (q15_t)0x4B4C, - (q15_t)0x6746, (q15_t)0x4B9E, (q15_t)0x670B, (q15_t)0x4BEF, - (q15_t)0x66CF, (q15_t)0x4C3F, (q15_t)0x6693, (q15_t)0x4C90, - (q15_t)0x6657, (q15_t)0x4CE1, (q15_t)0x661A, (q15_t)0x4D31, - (q15_t)0x65DD, (q15_t)0x4D81, (q15_t)0x65A0, (q15_t)0x4DD1, - (q15_t)0x6563, (q15_t)0x4E21, (q15_t)0x6526, (q15_t)0x4E70, - (q15_t)0x64E8, (q15_t)0x4EBF, (q15_t)0x64AA, (q15_t)0x4F0F, - (q15_t)0x646C, (q15_t)0x4F5E, (q15_t)0x642D, (q15_t)0x4FAC, - (q15_t)0x63EF, (q15_t)0x4FFB, (q15_t)0x63B0, (q15_t)0x5049, - (q15_t)0x6371, (q15_t)0x5097, (q15_t)0x6331, (q15_t)0x50E5, - (q15_t)0x62F2, (q15_t)0x5133, (q15_t)0x62B2, (q15_t)0x5181, - (q15_t)0x6271, (q15_t)0x51CE, (q15_t)0x6231, (q15_t)0x521C, - (q15_t)0x61F1, (q15_t)0x5269, (q15_t)0x61B0, (q15_t)0x52B5, - (q15_t)0x616F, (q15_t)0x5302, (q15_t)0x612D, (q15_t)0x534E, - (q15_t)0x60EC, (q15_t)0x539B, (q15_t)0x60AA, (q15_t)0x53E7, - (q15_t)0x6068, (q15_t)0x5433, (q15_t)0x6026, (q15_t)0x547E, - (q15_t)0x5FE3, (q15_t)0x54CA, (q15_t)0x5FA0, (q15_t)0x5515, - (q15_t)0x5F5E, (q15_t)0x5560, (q15_t)0x5F1A, (q15_t)0x55AB, - (q15_t)0x5ED7, (q15_t)0x55F5, (q15_t)0x5E93, (q15_t)0x5640, - (q15_t)0x5E50, (q15_t)0x568A, (q15_t)0x5E0B, (q15_t)0x56D4, - (q15_t)0x5DC7, (q15_t)0x571D, (q15_t)0x5D83, (q15_t)0x5767, - (q15_t)0x5D3E, (q15_t)0x57B0, (q15_t)0x5CF9, (q15_t)0x57F9, - (q15_t)0x5CB4, (q15_t)0x5842, (q15_t)0x5C6E, (q15_t)0x588B, - (q15_t)0x5C29, (q15_t)0x58D4, (q15_t)0x5BE3, (q15_t)0x591C, - (q15_t)0x5B9D, (q15_t)0x5964, (q15_t)0x5B56, (q15_t)0x59AC, - (q15_t)0x5B10, (q15_t)0x59F3, (q15_t)0x5AC9, (q15_t)0x5A3B, - (q15_t)0x5A82, (q15_t)0x5A82, (q15_t)0x5A3B, (q15_t)0x5AC9, - (q15_t)0x59F3, (q15_t)0x5B10, (q15_t)0x59AC, (q15_t)0x5B56, - (q15_t)0x5964, (q15_t)0x5B9D, (q15_t)0x591C, (q15_t)0x5BE3, - (q15_t)0x58D4, (q15_t)0x5C29, (q15_t)0x588B, (q15_t)0x5C6E, - (q15_t)0x5842, (q15_t)0x5CB4, (q15_t)0x57F9, (q15_t)0x5CF9, - (q15_t)0x57B0, (q15_t)0x5D3E, (q15_t)0x5767, (q15_t)0x5D83, - (q15_t)0x571D, (q15_t)0x5DC7, (q15_t)0x56D4, (q15_t)0x5E0B, - (q15_t)0x568A, (q15_t)0x5E50, (q15_t)0x5640, (q15_t)0x5E93, - (q15_t)0x55F5, (q15_t)0x5ED7, (q15_t)0x55AB, (q15_t)0x5F1A, - (q15_t)0x5560, (q15_t)0x5F5E, (q15_t)0x5515, (q15_t)0x5FA0, - (q15_t)0x54CA, (q15_t)0x5FE3, (q15_t)0x547E, (q15_t)0x6026, - (q15_t)0x5433, (q15_t)0x6068, (q15_t)0x53E7, (q15_t)0x60AA, - (q15_t)0x539B, (q15_t)0x60EC, (q15_t)0x534E, (q15_t)0x612D, - (q15_t)0x5302, (q15_t)0x616F, (q15_t)0x52B5, (q15_t)0x61B0, - (q15_t)0x5269, (q15_t)0x61F1, (q15_t)0x521C, (q15_t)0x6231, - (q15_t)0x51CE, (q15_t)0x6271, (q15_t)0x5181, (q15_t)0x62B2, - (q15_t)0x5133, (q15_t)0x62F2, (q15_t)0x50E5, (q15_t)0x6331, - (q15_t)0x5097, (q15_t)0x6371, (q15_t)0x5049, (q15_t)0x63B0, - (q15_t)0x4FFB, (q15_t)0x63EF, (q15_t)0x4FAC, (q15_t)0x642D, - (q15_t)0x4F5E, (q15_t)0x646C, (q15_t)0x4F0F, (q15_t)0x64AA, - (q15_t)0x4EBF, (q15_t)0x64E8, (q15_t)0x4E70, (q15_t)0x6526, - (q15_t)0x4E21, (q15_t)0x6563, (q15_t)0x4DD1, (q15_t)0x65A0, - (q15_t)0x4D81, (q15_t)0x65DD, (q15_t)0x4D31, (q15_t)0x661A, - (q15_t)0x4CE1, (q15_t)0x6657, (q15_t)0x4C90, (q15_t)0x6693, - (q15_t)0x4C3F, (q15_t)0x66CF, (q15_t)0x4BEF, (q15_t)0x670B, - (q15_t)0x4B9E, (q15_t)0x6746, (q15_t)0x4B4C, (q15_t)0x6782, - (q15_t)0x4AFB, (q15_t)0x67BD, (q15_t)0x4AA9, (q15_t)0x67F7, - (q15_t)0x4A58, (q15_t)0x6832, (q15_t)0x4A06, (q15_t)0x686C, - (q15_t)0x49B4, (q15_t)0x68A6, (q15_t)0x4961, (q15_t)0x68E0, - (q15_t)0x490F, (q15_t)0x6919, (q15_t)0x48BC, (q15_t)0x6953, - (q15_t)0x4869, (q15_t)0x698C, (q15_t)0x4816, (q15_t)0x69C4, - (q15_t)0x47C3, (q15_t)0x69FD, (q15_t)0x4770, (q15_t)0x6A35, - (q15_t)0x471C, (q15_t)0x6A6D, (q15_t)0x46C9, (q15_t)0x6AA5, - (q15_t)0x4675, (q15_t)0x6ADC, (q15_t)0x4621, (q15_t)0x6B13, - (q15_t)0x45CD, (q15_t)0x6B4A, (q15_t)0x4578, (q15_t)0x6B81, - (q15_t)0x4524, (q15_t)0x6BB8, (q15_t)0x44CF, (q15_t)0x6BEE, - (q15_t)0x447A, (q15_t)0x6C24, (q15_t)0x4425, (q15_t)0x6C59, - (q15_t)0x43D0, (q15_t)0x6C8F, (q15_t)0x437B, (q15_t)0x6CC4, - (q15_t)0x4325, (q15_t)0x6CF9, (q15_t)0x42D0, (q15_t)0x6D2D, - (q15_t)0x427A, (q15_t)0x6D62, (q15_t)0x4224, (q15_t)0x6D96, - (q15_t)0x41CE, (q15_t)0x6DCA, (q15_t)0x4177, (q15_t)0x6DFD, - (q15_t)0x4121, (q15_t)0x6E30, (q15_t)0x40CA, (q15_t)0x6E63, - (q15_t)0x4073, (q15_t)0x6E96, (q15_t)0x401D, (q15_t)0x6EC9, - (q15_t)0x3FC5, (q15_t)0x6EFB, (q15_t)0x3F6E, (q15_t)0x6F2D, - (q15_t)0x3F17, (q15_t)0x6F5F, (q15_t)0x3EBF, (q15_t)0x6F90, - (q15_t)0x3E68, (q15_t)0x6FC1, (q15_t)0x3E10, (q15_t)0x6FF2, - (q15_t)0x3DB8, (q15_t)0x7023, (q15_t)0x3D60, (q15_t)0x7053, - (q15_t)0x3D07, (q15_t)0x7083, (q15_t)0x3CAF, (q15_t)0x70B3, - (q15_t)0x3C56, (q15_t)0x70E2, (q15_t)0x3BFD, (q15_t)0x7112, - (q15_t)0x3BA5, (q15_t)0x7141, (q15_t)0x3B4C, (q15_t)0x716F, - (q15_t)0x3AF2, (q15_t)0x719E, (q15_t)0x3A99, (q15_t)0x71CC, - (q15_t)0x3A40, (q15_t)0x71FA, (q15_t)0x39E6, (q15_t)0x7227, - (q15_t)0x398C, (q15_t)0x7255, (q15_t)0x3932, (q15_t)0x7282, - (q15_t)0x38D8, (q15_t)0x72AF, (q15_t)0x387E, (q15_t)0x72DB, - (q15_t)0x3824, (q15_t)0x7307, (q15_t)0x37CA, (q15_t)0x7333, - (q15_t)0x376F, (q15_t)0x735F, (q15_t)0x3714, (q15_t)0x738A, - (q15_t)0x36BA, (q15_t)0x73B5, (q15_t)0x365F, (q15_t)0x73E0, - (q15_t)0x3604, (q15_t)0x740B, (q15_t)0x35A8, (q15_t)0x7435, - (q15_t)0x354D, (q15_t)0x745F, (q15_t)0x34F2, (q15_t)0x7489, - (q15_t)0x3496, (q15_t)0x74B2, (q15_t)0x343A, (q15_t)0x74DB, - (q15_t)0x33DE, (q15_t)0x7504, (q15_t)0x3382, (q15_t)0x752D, - (q15_t)0x3326, (q15_t)0x7555, (q15_t)0x32CA, (q15_t)0x757D, - (q15_t)0x326E, (q15_t)0x75A5, (q15_t)0x3211, (q15_t)0x75CC, - (q15_t)0x31B5, (q15_t)0x75F4, (q15_t)0x3158, (q15_t)0x761B, - (q15_t)0x30FB, (q15_t)0x7641, (q15_t)0x309E, (q15_t)0x7668, - (q15_t)0x3041, (q15_t)0x768E, (q15_t)0x2FE4, (q15_t)0x76B3, - (q15_t)0x2F87, (q15_t)0x76D9, (q15_t)0x2F29, (q15_t)0x76FE, - (q15_t)0x2ECC, (q15_t)0x7723, (q15_t)0x2E6E, (q15_t)0x7747, - (q15_t)0x2E11, (q15_t)0x776C, (q15_t)0x2DB3, (q15_t)0x7790, - (q15_t)0x2D55, (q15_t)0x77B4, (q15_t)0x2CF7, (q15_t)0x77D7, - (q15_t)0x2C98, (q15_t)0x77FA, (q15_t)0x2C3A, (q15_t)0x781D, - (q15_t)0x2BDC, (q15_t)0x7840, (q15_t)0x2B7D, (q15_t)0x7862, - (q15_t)0x2B1F, (q15_t)0x7884, (q15_t)0x2AC0, (q15_t)0x78A6, - (q15_t)0x2A61, (q15_t)0x78C7, (q15_t)0x2A02, (q15_t)0x78E8, - (q15_t)0x29A3, (q15_t)0x7909, (q15_t)0x2944, (q15_t)0x792A, - (q15_t)0x28E5, (q15_t)0x794A, (q15_t)0x2886, (q15_t)0x796A, - (q15_t)0x2826, (q15_t)0x798A, (q15_t)0x27C7, (q15_t)0x79A9, - (q15_t)0x2767, (q15_t)0x79C8, (q15_t)0x2707, (q15_t)0x79E7, - (q15_t)0x26A8, (q15_t)0x7A05, (q15_t)0x2648, (q15_t)0x7A24, - (q15_t)0x25E8, (q15_t)0x7A42, (q15_t)0x2588, (q15_t)0x7A5F, - (q15_t)0x2528, (q15_t)0x7A7D, (q15_t)0x24C7, (q15_t)0x7A9A, - (q15_t)0x2467, (q15_t)0x7AB6, (q15_t)0x2407, (q15_t)0x7AD3, - (q15_t)0x23A6, (q15_t)0x7AEF, (q15_t)0x2345, (q15_t)0x7B0B, - (q15_t)0x22E5, (q15_t)0x7B26, (q15_t)0x2284, (q15_t)0x7B42, - (q15_t)0x2223, (q15_t)0x7B5D, (q15_t)0x21C2, (q15_t)0x7B77, - (q15_t)0x2161, (q15_t)0x7B92, (q15_t)0x2100, (q15_t)0x7BAC, - (q15_t)0x209F, (q15_t)0x7BC5, (q15_t)0x203E, (q15_t)0x7BDF, - (q15_t)0x1FDC, (q15_t)0x7BF8, (q15_t)0x1F7B, (q15_t)0x7C11, - (q15_t)0x1F19, (q15_t)0x7C29, (q15_t)0x1EB8, (q15_t)0x7C42, - (q15_t)0x1E56, (q15_t)0x7C5A, (q15_t)0x1DF5, (q15_t)0x7C71, - (q15_t)0x1D93, (q15_t)0x7C89, (q15_t)0x1D31, (q15_t)0x7CA0, - (q15_t)0x1CCF, (q15_t)0x7CB7, (q15_t)0x1C6D, (q15_t)0x7CCD, - (q15_t)0x1C0B, (q15_t)0x7CE3, (q15_t)0x1BA9, (q15_t)0x7CF9, - (q15_t)0x1B47, (q15_t)0x7D0F, (q15_t)0x1AE4, (q15_t)0x7D24, - (q15_t)0x1A82, (q15_t)0x7D39, (q15_t)0x1A20, (q15_t)0x7D4E, - (q15_t)0x19BD, (q15_t)0x7D62, (q15_t)0x195B, (q15_t)0x7D76, - (q15_t)0x18F8, (q15_t)0x7D8A, (q15_t)0x1896, (q15_t)0x7D9D, - (q15_t)0x1833, (q15_t)0x7DB0, (q15_t)0x17D0, (q15_t)0x7DC3, - (q15_t)0x176D, (q15_t)0x7DD6, (q15_t)0x170A, (q15_t)0x7DE8, - (q15_t)0x16A8, (q15_t)0x7DFA, (q15_t)0x1645, (q15_t)0x7E0C, - (q15_t)0x15E2, (q15_t)0x7E1D, (q15_t)0x157F, (q15_t)0x7E2E, - (q15_t)0x151B, (q15_t)0x7E3F, (q15_t)0x14B8, (q15_t)0x7E4F, - (q15_t)0x1455, (q15_t)0x7E5F, (q15_t)0x13F2, (q15_t)0x7E6F, - (q15_t)0x138E, (q15_t)0x7E7F, (q15_t)0x132B, (q15_t)0x7E8E, - (q15_t)0x12C8, (q15_t)0x7E9D, (q15_t)0x1264, (q15_t)0x7EAB, - (q15_t)0x1201, (q15_t)0x7EBA, (q15_t)0x119D, (q15_t)0x7EC8, - (q15_t)0x1139, (q15_t)0x7ED5, (q15_t)0x10D6, (q15_t)0x7EE3, - (q15_t)0x1072, (q15_t)0x7EF0, (q15_t)0x100E, (q15_t)0x7EFD, - (q15_t)0x0FAB, (q15_t)0x7F09, (q15_t)0x0F47, (q15_t)0x7F15, - (q15_t)0x0EE3, (q15_t)0x7F21, (q15_t)0x0E7F, (q15_t)0x7F2D, - (q15_t)0x0E1B, (q15_t)0x7F38, (q15_t)0x0DB7, (q15_t)0x7F43, - (q15_t)0x0D53, (q15_t)0x7F4D, (q15_t)0x0CEF, (q15_t)0x7F58, - (q15_t)0x0C8B, (q15_t)0x7F62, (q15_t)0x0C27, (q15_t)0x7F6B, - (q15_t)0x0BC3, (q15_t)0x7F75, (q15_t)0x0B5F, (q15_t)0x7F7E, - (q15_t)0x0AFB, (q15_t)0x7F87, (q15_t)0x0A97, (q15_t)0x7F8F, - (q15_t)0x0A33, (q15_t)0x7F97, (q15_t)0x09CE, (q15_t)0x7F9F, - (q15_t)0x096A, (q15_t)0x7FA7, (q15_t)0x0906, (q15_t)0x7FAE, - (q15_t)0x08A2, (q15_t)0x7FB5, (q15_t)0x083D, (q15_t)0x7FBC, - (q15_t)0x07D9, (q15_t)0x7FC2, (q15_t)0x0775, (q15_t)0x7FC8, - (q15_t)0x0710, (q15_t)0x7FCE, (q15_t)0x06AC, (q15_t)0x7FD3, - (q15_t)0x0647, (q15_t)0x7FD8, (q15_t)0x05E3, (q15_t)0x7FDD, - (q15_t)0x057F, (q15_t)0x7FE1, (q15_t)0x051A, (q15_t)0x7FE5, - (q15_t)0x04B6, (q15_t)0x7FE9, (q15_t)0x0451, (q15_t)0x7FED, - (q15_t)0x03ED, (q15_t)0x7FF0, (q15_t)0x0388, (q15_t)0x7FF3, - (q15_t)0x0324, (q15_t)0x7FF6, (q15_t)0x02BF, (q15_t)0x7FF8, - (q15_t)0x025B, (q15_t)0x7FFA, (q15_t)0x01F6, (q15_t)0x7FFC, - (q15_t)0x0192, (q15_t)0x7FFD, (q15_t)0x012D, (q15_t)0x7FFE, - (q15_t)0x00C9, (q15_t)0x7FFF, (q15_t)0x0064, (q15_t)0x7FFF, - (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0xFF9B, (q15_t)0x7FFF, - (q15_t)0xFF36, (q15_t)0x7FFF, (q15_t)0xFED2, (q15_t)0x7FFE, - (q15_t)0xFE6D, (q15_t)0x7FFD, (q15_t)0xFE09, (q15_t)0x7FFC, - (q15_t)0xFDA4, (q15_t)0x7FFA, (q15_t)0xFD40, (q15_t)0x7FF8, - (q15_t)0xFCDB, (q15_t)0x7FF6, (q15_t)0xFC77, (q15_t)0x7FF3, - (q15_t)0xFC12, (q15_t)0x7FF0, (q15_t)0xFBAE, (q15_t)0x7FED, - (q15_t)0xFB49, (q15_t)0x7FE9, (q15_t)0xFAE5, (q15_t)0x7FE5, - (q15_t)0xFA80, (q15_t)0x7FE1, (q15_t)0xFA1C, (q15_t)0x7FDD, - (q15_t)0xF9B8, (q15_t)0x7FD8, (q15_t)0xF953, (q15_t)0x7FD3, - (q15_t)0xF8EF, (q15_t)0x7FCE, (q15_t)0xF88A, (q15_t)0x7FC8, - (q15_t)0xF826, (q15_t)0x7FC2, (q15_t)0xF7C2, (q15_t)0x7FBC, - (q15_t)0xF75D, (q15_t)0x7FB5, (q15_t)0xF6F9, (q15_t)0x7FAE, - (q15_t)0xF695, (q15_t)0x7FA7, (q15_t)0xF631, (q15_t)0x7F9F, - (q15_t)0xF5CC, (q15_t)0x7F97, (q15_t)0xF568, (q15_t)0x7F8F, - (q15_t)0xF504, (q15_t)0x7F87, (q15_t)0xF4A0, (q15_t)0x7F7E, - (q15_t)0xF43C, (q15_t)0x7F75, (q15_t)0xF3D8, (q15_t)0x7F6B, - (q15_t)0xF374, (q15_t)0x7F62, (q15_t)0xF310, (q15_t)0x7F58, - (q15_t)0xF2AC, (q15_t)0x7F4D, (q15_t)0xF248, (q15_t)0x7F43, - (q15_t)0xF1E4, (q15_t)0x7F38, (q15_t)0xF180, (q15_t)0x7F2D, - (q15_t)0xF11C, (q15_t)0x7F21, (q15_t)0xF0B8, (q15_t)0x7F15, - (q15_t)0xF054, (q15_t)0x7F09, (q15_t)0xEFF1, (q15_t)0x7EFD, - (q15_t)0xEF8D, (q15_t)0x7EF0, (q15_t)0xEF29, (q15_t)0x7EE3, - (q15_t)0xEEC6, (q15_t)0x7ED5, (q15_t)0xEE62, (q15_t)0x7EC8, - (q15_t)0xEDFE, (q15_t)0x7EBA, (q15_t)0xED9B, (q15_t)0x7EAB, - (q15_t)0xED37, (q15_t)0x7E9D, (q15_t)0xECD4, (q15_t)0x7E8E, - (q15_t)0xEC71, (q15_t)0x7E7F, (q15_t)0xEC0D, (q15_t)0x7E6F, - (q15_t)0xEBAA, (q15_t)0x7E5F, (q15_t)0xEB47, (q15_t)0x7E4F, - (q15_t)0xEAE4, (q15_t)0x7E3F, (q15_t)0xEA80, (q15_t)0x7E2E, - (q15_t)0xEA1D, (q15_t)0x7E1D, (q15_t)0xE9BA, (q15_t)0x7E0C, - (q15_t)0xE957, (q15_t)0x7DFA, (q15_t)0xE8F5, (q15_t)0x7DE8, - (q15_t)0xE892, (q15_t)0x7DD6, (q15_t)0xE82F, (q15_t)0x7DC3, - (q15_t)0xE7CC, (q15_t)0x7DB0, (q15_t)0xE769, (q15_t)0x7D9D, - (q15_t)0xE707, (q15_t)0x7D8A, (q15_t)0xE6A4, (q15_t)0x7D76, - (q15_t)0xE642, (q15_t)0x7D62, (q15_t)0xE5DF, (q15_t)0x7D4E, - (q15_t)0xE57D, (q15_t)0x7D39, (q15_t)0xE51B, (q15_t)0x7D24, - (q15_t)0xE4B8, (q15_t)0x7D0F, (q15_t)0xE456, (q15_t)0x7CF9, - (q15_t)0xE3F4, (q15_t)0x7CE3, (q15_t)0xE392, (q15_t)0x7CCD, - (q15_t)0xE330, (q15_t)0x7CB7, (q15_t)0xE2CE, (q15_t)0x7CA0, - (q15_t)0xE26C, (q15_t)0x7C89, (q15_t)0xE20A, (q15_t)0x7C71, - (q15_t)0xE1A9, (q15_t)0x7C5A, (q15_t)0xE147, (q15_t)0x7C42, - (q15_t)0xE0E6, (q15_t)0x7C29, (q15_t)0xE084, (q15_t)0x7C11, - (q15_t)0xE023, (q15_t)0x7BF8, (q15_t)0xDFC1, (q15_t)0x7BDF, - (q15_t)0xDF60, (q15_t)0x7BC5, (q15_t)0xDEFF, (q15_t)0x7BAC, - (q15_t)0xDE9E, (q15_t)0x7B92, (q15_t)0xDE3D, (q15_t)0x7B77, - (q15_t)0xDDDC, (q15_t)0x7B5D, (q15_t)0xDD7B, (q15_t)0x7B42, - (q15_t)0xDD1A, (q15_t)0x7B26, (q15_t)0xDCBA, (q15_t)0x7B0B, - (q15_t)0xDC59, (q15_t)0x7AEF, (q15_t)0xDBF8, (q15_t)0x7AD3, - (q15_t)0xDB98, (q15_t)0x7AB6, (q15_t)0xDB38, (q15_t)0x7A9A, - (q15_t)0xDAD7, (q15_t)0x7A7D, (q15_t)0xDA77, (q15_t)0x7A5F, - (q15_t)0xDA17, (q15_t)0x7A42, (q15_t)0xD9B7, (q15_t)0x7A24, - (q15_t)0xD957, (q15_t)0x7A05, (q15_t)0xD8F8, (q15_t)0x79E7, - (q15_t)0xD898, (q15_t)0x79C8, (q15_t)0xD838, (q15_t)0x79A9, - (q15_t)0xD7D9, (q15_t)0x798A, (q15_t)0xD779, (q15_t)0x796A, - (q15_t)0xD71A, (q15_t)0x794A, (q15_t)0xD6BB, (q15_t)0x792A, - (q15_t)0xD65C, (q15_t)0x7909, (q15_t)0xD5FD, (q15_t)0x78E8, - (q15_t)0xD59E, (q15_t)0x78C7, (q15_t)0xD53F, (q15_t)0x78A6, - (q15_t)0xD4E0, (q15_t)0x7884, (q15_t)0xD482, (q15_t)0x7862, - (q15_t)0xD423, (q15_t)0x7840, (q15_t)0xD3C5, (q15_t)0x781D, - (q15_t)0xD367, (q15_t)0x77FA, (q15_t)0xD308, (q15_t)0x77D7, - (q15_t)0xD2AA, (q15_t)0x77B4, (q15_t)0xD24C, (q15_t)0x7790, - (q15_t)0xD1EE, (q15_t)0x776C, (q15_t)0xD191, (q15_t)0x7747, - (q15_t)0xD133, (q15_t)0x7723, (q15_t)0xD0D6, (q15_t)0x76FE, - (q15_t)0xD078, (q15_t)0x76D9, (q15_t)0xD01B, (q15_t)0x76B3, - (q15_t)0xCFBE, (q15_t)0x768E, (q15_t)0xCF61, (q15_t)0x7668, - (q15_t)0xCF04, (q15_t)0x7641, (q15_t)0xCEA7, (q15_t)0x761B, - (q15_t)0xCE4A, (q15_t)0x75F4, (q15_t)0xCDEE, (q15_t)0x75CC, - (q15_t)0xCD91, (q15_t)0x75A5, (q15_t)0xCD35, (q15_t)0x757D, - (q15_t)0xCCD9, (q15_t)0x7555, (q15_t)0xCC7D, (q15_t)0x752D, - (q15_t)0xCC21, (q15_t)0x7504, (q15_t)0xCBC5, (q15_t)0x74DB, - (q15_t)0xCB69, (q15_t)0x74B2, (q15_t)0xCB0D, (q15_t)0x7489, - (q15_t)0xCAB2, (q15_t)0x745F, (q15_t)0xCA57, (q15_t)0x7435, - (q15_t)0xC9FB, (q15_t)0x740B, (q15_t)0xC9A0, (q15_t)0x73E0, - (q15_t)0xC945, (q15_t)0x73B5, (q15_t)0xC8EB, (q15_t)0x738A, - (q15_t)0xC890, (q15_t)0x735F, (q15_t)0xC835, (q15_t)0x7333, - (q15_t)0xC7DB, (q15_t)0x7307, (q15_t)0xC781, (q15_t)0x72DB, - (q15_t)0xC727, (q15_t)0x72AF, (q15_t)0xC6CD, (q15_t)0x7282, - (q15_t)0xC673, (q15_t)0x7255, (q15_t)0xC619, (q15_t)0x7227, - (q15_t)0xC5BF, (q15_t)0x71FA, (q15_t)0xC566, (q15_t)0x71CC, - (q15_t)0xC50D, (q15_t)0x719E, (q15_t)0xC4B3, (q15_t)0x716F, - (q15_t)0xC45A, (q15_t)0x7141, (q15_t)0xC402, (q15_t)0x7112, - (q15_t)0xC3A9, (q15_t)0x70E2, (q15_t)0xC350, (q15_t)0x70B3, - (q15_t)0xC2F8, (q15_t)0x7083, (q15_t)0xC29F, (q15_t)0x7053, - (q15_t)0xC247, (q15_t)0x7023, (q15_t)0xC1EF, (q15_t)0x6FF2, - (q15_t)0xC197, (q15_t)0x6FC1, (q15_t)0xC140, (q15_t)0x6F90, - (q15_t)0xC0E8, (q15_t)0x6F5F, (q15_t)0xC091, (q15_t)0x6F2D, - (q15_t)0xC03A, (q15_t)0x6EFB, (q15_t)0xBFE2, (q15_t)0x6EC9, - (q15_t)0xBF8C, (q15_t)0x6E96, (q15_t)0xBF35, (q15_t)0x6E63, - (q15_t)0xBEDE, (q15_t)0x6E30, (q15_t)0xBE88, (q15_t)0x6DFD, - (q15_t)0xBE31, (q15_t)0x6DCA, (q15_t)0xBDDB, (q15_t)0x6D96, - (q15_t)0xBD85, (q15_t)0x6D62, (q15_t)0xBD2F, (q15_t)0x6D2D, - (q15_t)0xBCDA, (q15_t)0x6CF9, (q15_t)0xBC84, (q15_t)0x6CC4, - (q15_t)0xBC2F, (q15_t)0x6C8F, (q15_t)0xBBDA, (q15_t)0x6C59, - (q15_t)0xBB85, (q15_t)0x6C24, (q15_t)0xBB30, (q15_t)0x6BEE, - (q15_t)0xBADB, (q15_t)0x6BB8, (q15_t)0xBA87, (q15_t)0x6B81, - (q15_t)0xBA32, (q15_t)0x6B4A, (q15_t)0xB9DE, (q15_t)0x6B13, - (q15_t)0xB98A, (q15_t)0x6ADC, (q15_t)0xB936, (q15_t)0x6AA5, - (q15_t)0xB8E3, (q15_t)0x6A6D, (q15_t)0xB88F, (q15_t)0x6A35, - (q15_t)0xB83C, (q15_t)0x69FD, (q15_t)0xB7E9, (q15_t)0x69C4, - (q15_t)0xB796, (q15_t)0x698C, (q15_t)0xB743, (q15_t)0x6953, - (q15_t)0xB6F0, (q15_t)0x6919, (q15_t)0xB69E, (q15_t)0x68E0, - (q15_t)0xB64B, (q15_t)0x68A6, (q15_t)0xB5F9, (q15_t)0x686C, - (q15_t)0xB5A7, (q15_t)0x6832, (q15_t)0xB556, (q15_t)0x67F7, - (q15_t)0xB504, (q15_t)0x67BD, (q15_t)0xB4B3, (q15_t)0x6782, - (q15_t)0xB461, (q15_t)0x6746, (q15_t)0xB410, (q15_t)0x670B, - (q15_t)0xB3C0, (q15_t)0x66CF, (q15_t)0xB36F, (q15_t)0x6693, - (q15_t)0xB31E, (q15_t)0x6657, (q15_t)0xB2CE, (q15_t)0x661A, - (q15_t)0xB27E, (q15_t)0x65DD, (q15_t)0xB22E, (q15_t)0x65A0, - (q15_t)0xB1DE, (q15_t)0x6563, (q15_t)0xB18F, (q15_t)0x6526, - (q15_t)0xB140, (q15_t)0x64E8, (q15_t)0xB0F0, (q15_t)0x64AA, - (q15_t)0xB0A1, (q15_t)0x646C, (q15_t)0xB053, (q15_t)0x642D, - (q15_t)0xB004, (q15_t)0x63EF, (q15_t)0xAFB6, (q15_t)0x63B0, - (q15_t)0xAF68, (q15_t)0x6371, (q15_t)0xAF1A, (q15_t)0x6331, - (q15_t)0xAECC, (q15_t)0x62F2, (q15_t)0xAE7E, (q15_t)0x62B2, - (q15_t)0xAE31, (q15_t)0x6271, (q15_t)0xADE3, (q15_t)0x6231, - (q15_t)0xAD96, (q15_t)0x61F1, (q15_t)0xAD4A, (q15_t)0x61B0, - (q15_t)0xACFD, (q15_t)0x616F, (q15_t)0xACB1, (q15_t)0x612D, - (q15_t)0xAC64, (q15_t)0x60EC, (q15_t)0xAC18, (q15_t)0x60AA, - (q15_t)0xABCC, (q15_t)0x6068, (q15_t)0xAB81, (q15_t)0x6026, - (q15_t)0xAB35, (q15_t)0x5FE3, (q15_t)0xAAEA, (q15_t)0x5FA0, - (q15_t)0xAA9F, (q15_t)0x5F5E, (q15_t)0xAA54, (q15_t)0x5F1A, - (q15_t)0xAA0A, (q15_t)0x5ED7, (q15_t)0xA9BF, (q15_t)0x5E93, - (q15_t)0xA975, (q15_t)0x5E50, (q15_t)0xA92B, (q15_t)0x5E0B, - (q15_t)0xA8E2, (q15_t)0x5DC7, (q15_t)0xA898, (q15_t)0x5D83, - (q15_t)0xA84F, (q15_t)0x5D3E, (q15_t)0xA806, (q15_t)0x5CF9, - (q15_t)0xA7BD, (q15_t)0x5CB4, (q15_t)0xA774, (q15_t)0x5C6E, - (q15_t)0xA72B, (q15_t)0x5C29, (q15_t)0xA6E3, (q15_t)0x5BE3, - (q15_t)0xA69B, (q15_t)0x5B9D, (q15_t)0xA653, (q15_t)0x5B56, - (q15_t)0xA60C, (q15_t)0x5B10, (q15_t)0xA5C4, (q15_t)0x5AC9, - (q15_t)0xA57D, (q15_t)0x5A82, (q15_t)0xA536, (q15_t)0x5A3B, - (q15_t)0xA4EF, (q15_t)0x59F3, (q15_t)0xA4A9, (q15_t)0x59AC, - (q15_t)0xA462, (q15_t)0x5964, (q15_t)0xA41C, (q15_t)0x591C, - (q15_t)0xA3D6, (q15_t)0x58D4, (q15_t)0xA391, (q15_t)0x588B, - (q15_t)0xA34B, (q15_t)0x5842, (q15_t)0xA306, (q15_t)0x57F9, - (q15_t)0xA2C1, (q15_t)0x57B0, (q15_t)0xA27C, (q15_t)0x5767, - (q15_t)0xA238, (q15_t)0x571D, (q15_t)0xA1F4, (q15_t)0x56D4, - (q15_t)0xA1AF, (q15_t)0x568A, (q15_t)0xA16C, (q15_t)0x5640, - (q15_t)0xA128, (q15_t)0x55F5, (q15_t)0xA0E5, (q15_t)0x55AB, - (q15_t)0xA0A1, (q15_t)0x5560, (q15_t)0xA05F, (q15_t)0x5515, - (q15_t)0xA01C, (q15_t)0x54CA, (q15_t)0x9FD9, (q15_t)0x547E, - (q15_t)0x9F97, (q15_t)0x5433, (q15_t)0x9F55, (q15_t)0x53E7, - (q15_t)0x9F13, (q15_t)0x539B, (q15_t)0x9ED2, (q15_t)0x534E, - (q15_t)0x9E90, (q15_t)0x5302, (q15_t)0x9E4F, (q15_t)0x52B5, - (q15_t)0x9E0E, (q15_t)0x5269, (q15_t)0x9DCE, (q15_t)0x521C, - (q15_t)0x9D8E, (q15_t)0x51CE, (q15_t)0x9D4D, (q15_t)0x5181, - (q15_t)0x9D0D, (q15_t)0x5133, (q15_t)0x9CCE, (q15_t)0x50E5, - (q15_t)0x9C8E, (q15_t)0x5097, (q15_t)0x9C4F, (q15_t)0x5049, - (q15_t)0x9C10, (q15_t)0x4FFB, (q15_t)0x9BD2, (q15_t)0x4FAC, - (q15_t)0x9B93, (q15_t)0x4F5E, (q15_t)0x9B55, (q15_t)0x4F0F, - (q15_t)0x9B17, (q15_t)0x4EBF, (q15_t)0x9AD9, (q15_t)0x4E70, - (q15_t)0x9A9C, (q15_t)0x4E21, (q15_t)0x9A5F, (q15_t)0x4DD1, - (q15_t)0x9A22, (q15_t)0x4D81, (q15_t)0x99E5, (q15_t)0x4D31, - (q15_t)0x99A8, (q15_t)0x4CE1, (q15_t)0x996C, (q15_t)0x4C90, - (q15_t)0x9930, (q15_t)0x4C3F, (q15_t)0x98F4, (q15_t)0x4BEF, - (q15_t)0x98B9, (q15_t)0x4B9E, (q15_t)0x987D, (q15_t)0x4B4C, - (q15_t)0x9842, (q15_t)0x4AFB, (q15_t)0x9808, (q15_t)0x4AA9, - (q15_t)0x97CD, (q15_t)0x4A58, (q15_t)0x9793, (q15_t)0x4A06, - (q15_t)0x9759, (q15_t)0x49B4, (q15_t)0x971F, (q15_t)0x4961, - (q15_t)0x96E6, (q15_t)0x490F, (q15_t)0x96AC, (q15_t)0x48BC, - (q15_t)0x9673, (q15_t)0x4869, (q15_t)0x963B, (q15_t)0x4816, - (q15_t)0x9602, (q15_t)0x47C3, (q15_t)0x95CA, (q15_t)0x4770, - (q15_t)0x9592, (q15_t)0x471C, (q15_t)0x955A, (q15_t)0x46C9, - (q15_t)0x9523, (q15_t)0x4675, (q15_t)0x94EC, (q15_t)0x4621, - (q15_t)0x94B5, (q15_t)0x45CD, (q15_t)0x947E, (q15_t)0x4578, - (q15_t)0x9447, (q15_t)0x4524, (q15_t)0x9411, (q15_t)0x44CF, - (q15_t)0x93DB, (q15_t)0x447A, (q15_t)0x93A6, (q15_t)0x4425, - (q15_t)0x9370, (q15_t)0x43D0, (q15_t)0x933B, (q15_t)0x437B, - (q15_t)0x9306, (q15_t)0x4325, (q15_t)0x92D2, (q15_t)0x42D0, - (q15_t)0x929D, (q15_t)0x427A, (q15_t)0x9269, (q15_t)0x4224, - (q15_t)0x9235, (q15_t)0x41CE, (q15_t)0x9202, (q15_t)0x4177, - (q15_t)0x91CF, (q15_t)0x4121, (q15_t)0x919C, (q15_t)0x40CA, - (q15_t)0x9169, (q15_t)0x4073, (q15_t)0x9136, (q15_t)0x401D, - (q15_t)0x9104, (q15_t)0x3FC5, (q15_t)0x90D2, (q15_t)0x3F6E, - (q15_t)0x90A0, (q15_t)0x3F17, (q15_t)0x906F, (q15_t)0x3EBF, - (q15_t)0x903E, (q15_t)0x3E68, (q15_t)0x900D, (q15_t)0x3E10, - (q15_t)0x8FDC, (q15_t)0x3DB8, (q15_t)0x8FAC, (q15_t)0x3D60, - (q15_t)0x8F7C, (q15_t)0x3D07, (q15_t)0x8F4C, (q15_t)0x3CAF, - (q15_t)0x8F1D, (q15_t)0x3C56, (q15_t)0x8EED, (q15_t)0x3BFD, - (q15_t)0x8EBE, (q15_t)0x3BA5, (q15_t)0x8E90, (q15_t)0x3B4C, - (q15_t)0x8E61, (q15_t)0x3AF2, (q15_t)0x8E33, (q15_t)0x3A99, - (q15_t)0x8E05, (q15_t)0x3A40, (q15_t)0x8DD8, (q15_t)0x39E6, - (q15_t)0x8DAA, (q15_t)0x398C, (q15_t)0x8D7D, (q15_t)0x3932, - (q15_t)0x8D50, (q15_t)0x38D8, (q15_t)0x8D24, (q15_t)0x387E, - (q15_t)0x8CF8, (q15_t)0x3824, (q15_t)0x8CCC, (q15_t)0x37CA, - (q15_t)0x8CA0, (q15_t)0x376F, (q15_t)0x8C75, (q15_t)0x3714, - (q15_t)0x8C4A, (q15_t)0x36BA, (q15_t)0x8C1F, (q15_t)0x365F, - (q15_t)0x8BF4, (q15_t)0x3604, (q15_t)0x8BCA, (q15_t)0x35A8, - (q15_t)0x8BA0, (q15_t)0x354D, (q15_t)0x8B76, (q15_t)0x34F2, - (q15_t)0x8B4D, (q15_t)0x3496, (q15_t)0x8B24, (q15_t)0x343A, - (q15_t)0x8AFB, (q15_t)0x33DE, (q15_t)0x8AD2, (q15_t)0x3382, - (q15_t)0x8AAA, (q15_t)0x3326, (q15_t)0x8A82, (q15_t)0x32CA, - (q15_t)0x8A5A, (q15_t)0x326E, (q15_t)0x8A33, (q15_t)0x3211, - (q15_t)0x8A0B, (q15_t)0x31B5, (q15_t)0x89E4, (q15_t)0x3158, - (q15_t)0x89BE, (q15_t)0x30FB, (q15_t)0x8997, (q15_t)0x309E, - (q15_t)0x8971, (q15_t)0x3041, (q15_t)0x894C, (q15_t)0x2FE4, - (q15_t)0x8926, (q15_t)0x2F87, (q15_t)0x8901, (q15_t)0x2F29, - (q15_t)0x88DC, (q15_t)0x2ECC, (q15_t)0x88B8, (q15_t)0x2E6E, - (q15_t)0x8893, (q15_t)0x2E11, (q15_t)0x886F, (q15_t)0x2DB3, - (q15_t)0x884B, (q15_t)0x2D55, (q15_t)0x8828, (q15_t)0x2CF7, - (q15_t)0x8805, (q15_t)0x2C98, (q15_t)0x87E2, (q15_t)0x2C3A, - (q15_t)0x87BF, (q15_t)0x2BDC, (q15_t)0x879D, (q15_t)0x2B7D, - (q15_t)0x877B, (q15_t)0x2B1F, (q15_t)0x8759, (q15_t)0x2AC0, - (q15_t)0x8738, (q15_t)0x2A61, (q15_t)0x8717, (q15_t)0x2A02, - (q15_t)0x86F6, (q15_t)0x29A3, (q15_t)0x86D5, (q15_t)0x2944, - (q15_t)0x86B5, (q15_t)0x28E5, (q15_t)0x8695, (q15_t)0x2886, - (q15_t)0x8675, (q15_t)0x2826, (q15_t)0x8656, (q15_t)0x27C7, - (q15_t)0x8637, (q15_t)0x2767, (q15_t)0x8618, (q15_t)0x2707, - (q15_t)0x85FA, (q15_t)0x26A8, (q15_t)0x85DB, (q15_t)0x2648, - (q15_t)0x85BD, (q15_t)0x25E8, (q15_t)0x85A0, (q15_t)0x2588, - (q15_t)0x8582, (q15_t)0x2528, (q15_t)0x8565, (q15_t)0x24C7, - (q15_t)0x8549, (q15_t)0x2467, (q15_t)0x852C, (q15_t)0x2407, - (q15_t)0x8510, (q15_t)0x23A6, (q15_t)0x84F4, (q15_t)0x2345, - (q15_t)0x84D9, (q15_t)0x22E5, (q15_t)0x84BD, (q15_t)0x2284, - (q15_t)0x84A2, (q15_t)0x2223, (q15_t)0x8488, (q15_t)0x21C2, - (q15_t)0x846D, (q15_t)0x2161, (q15_t)0x8453, (q15_t)0x2100, - (q15_t)0x843A, (q15_t)0x209F, (q15_t)0x8420, (q15_t)0x203E, - (q15_t)0x8407, (q15_t)0x1FDC, (q15_t)0x83EE, (q15_t)0x1F7B, - (q15_t)0x83D6, (q15_t)0x1F19, (q15_t)0x83BD, (q15_t)0x1EB8, - (q15_t)0x83A5, (q15_t)0x1E56, (q15_t)0x838E, (q15_t)0x1DF5, - (q15_t)0x8376, (q15_t)0x1D93, (q15_t)0x835F, (q15_t)0x1D31, - (q15_t)0x8348, (q15_t)0x1CCF, (q15_t)0x8332, (q15_t)0x1C6D, - (q15_t)0x831C, (q15_t)0x1C0B, (q15_t)0x8306, (q15_t)0x1BA9, - (q15_t)0x82F0, (q15_t)0x1B47, (q15_t)0x82DB, (q15_t)0x1AE4, - (q15_t)0x82C6, (q15_t)0x1A82, (q15_t)0x82B1, (q15_t)0x1A20, - (q15_t)0x829D, (q15_t)0x19BD, (q15_t)0x8289, (q15_t)0x195B, - (q15_t)0x8275, (q15_t)0x18F8, (q15_t)0x8262, (q15_t)0x1896, - (q15_t)0x824F, (q15_t)0x1833, (q15_t)0x823C, (q15_t)0x17D0, - (q15_t)0x8229, (q15_t)0x176D, (q15_t)0x8217, (q15_t)0x170A, - (q15_t)0x8205, (q15_t)0x16A8, (q15_t)0x81F3, (q15_t)0x1645, - (q15_t)0x81E2, (q15_t)0x15E2, (q15_t)0x81D1, (q15_t)0x157F, - (q15_t)0x81C0, (q15_t)0x151B, (q15_t)0x81B0, (q15_t)0x14B8, - (q15_t)0x81A0, (q15_t)0x1455, (q15_t)0x8190, (q15_t)0x13F2, - (q15_t)0x8180, (q15_t)0x138E, (q15_t)0x8171, (q15_t)0x132B, - (q15_t)0x8162, (q15_t)0x12C8, (q15_t)0x8154, (q15_t)0x1264, - (q15_t)0x8145, (q15_t)0x1201, (q15_t)0x8137, (q15_t)0x119D, - (q15_t)0x812A, (q15_t)0x1139, (q15_t)0x811C, (q15_t)0x10D6, - (q15_t)0x810F, (q15_t)0x1072, (q15_t)0x8102, (q15_t)0x100E, - (q15_t)0x80F6, (q15_t)0x0FAB, (q15_t)0x80EA, (q15_t)0x0F47, - (q15_t)0x80DE, (q15_t)0x0EE3, (q15_t)0x80D2, (q15_t)0x0E7F, - (q15_t)0x80C7, (q15_t)0x0E1B, (q15_t)0x80BC, (q15_t)0x0DB7, - (q15_t)0x80B2, (q15_t)0x0D53, (q15_t)0x80A7, (q15_t)0x0CEF, - (q15_t)0x809D, (q15_t)0x0C8B, (q15_t)0x8094, (q15_t)0x0C27, - (q15_t)0x808A, (q15_t)0x0BC3, (q15_t)0x8081, (q15_t)0x0B5F, - (q15_t)0x8078, (q15_t)0x0AFB, (q15_t)0x8070, (q15_t)0x0A97, - (q15_t)0x8068, (q15_t)0x0A33, (q15_t)0x8060, (q15_t)0x09CE, - (q15_t)0x8058, (q15_t)0x096A, (q15_t)0x8051, (q15_t)0x0906, - (q15_t)0x804A, (q15_t)0x08A2, (q15_t)0x8043, (q15_t)0x083D, - (q15_t)0x803D, (q15_t)0x07D9, (q15_t)0x8037, (q15_t)0x0775, - (q15_t)0x8031, (q15_t)0x0710, (q15_t)0x802C, (q15_t)0x06AC, - (q15_t)0x8027, (q15_t)0x0647, (q15_t)0x8022, (q15_t)0x05E3, - (q15_t)0x801E, (q15_t)0x057F, (q15_t)0x801A, (q15_t)0x051A, - (q15_t)0x8016, (q15_t)0x04B6, (q15_t)0x8012, (q15_t)0x0451, - (q15_t)0x800F, (q15_t)0x03ED, (q15_t)0x800C, (q15_t)0x0388, - (q15_t)0x8009, (q15_t)0x0324, (q15_t)0x8007, (q15_t)0x02BF, - (q15_t)0x8005, (q15_t)0x025B, (q15_t)0x8003, (q15_t)0x01F6, - (q15_t)0x8002, (q15_t)0x0192, (q15_t)0x8001, (q15_t)0x012D, - (q15_t)0x8000, (q15_t)0x00C9, (q15_t)0x8000, (q15_t)0x0064, - (q15_t)0x8000, (q15_t)0x0000, (q15_t)0x8000, (q15_t)0xFF9B, - (q15_t)0x8000, (q15_t)0xFF36, (q15_t)0x8001, (q15_t)0xFED2, - (q15_t)0x8002, (q15_t)0xFE6D, (q15_t)0x8003, (q15_t)0xFE09, - (q15_t)0x8005, (q15_t)0xFDA4, (q15_t)0x8007, (q15_t)0xFD40, - (q15_t)0x8009, (q15_t)0xFCDB, (q15_t)0x800C, (q15_t)0xFC77, - (q15_t)0x800F, (q15_t)0xFC12, (q15_t)0x8012, (q15_t)0xFBAE, - (q15_t)0x8016, (q15_t)0xFB49, (q15_t)0x801A, (q15_t)0xFAE5, - (q15_t)0x801E, (q15_t)0xFA80, (q15_t)0x8022, (q15_t)0xFA1C, - (q15_t)0x8027, (q15_t)0xF9B8, (q15_t)0x802C, (q15_t)0xF953, - (q15_t)0x8031, (q15_t)0xF8EF, (q15_t)0x8037, (q15_t)0xF88A, - (q15_t)0x803D, (q15_t)0xF826, (q15_t)0x8043, (q15_t)0xF7C2, - (q15_t)0x804A, (q15_t)0xF75D, (q15_t)0x8051, (q15_t)0xF6F9, - (q15_t)0x8058, (q15_t)0xF695, (q15_t)0x8060, (q15_t)0xF631, - (q15_t)0x8068, (q15_t)0xF5CC, (q15_t)0x8070, (q15_t)0xF568, - (q15_t)0x8078, (q15_t)0xF504, (q15_t)0x8081, (q15_t)0xF4A0, - (q15_t)0x808A, (q15_t)0xF43C, (q15_t)0x8094, (q15_t)0xF3D8, - (q15_t)0x809D, (q15_t)0xF374, (q15_t)0x80A7, (q15_t)0xF310, - (q15_t)0x80B2, (q15_t)0xF2AC, (q15_t)0x80BC, (q15_t)0xF248, - (q15_t)0x80C7, (q15_t)0xF1E4, (q15_t)0x80D2, (q15_t)0xF180, - (q15_t)0x80DE, (q15_t)0xF11C, (q15_t)0x80EA, (q15_t)0xF0B8, - (q15_t)0x80F6, (q15_t)0xF054, (q15_t)0x8102, (q15_t)0xEFF1, - (q15_t)0x810F, (q15_t)0xEF8D, (q15_t)0x811C, (q15_t)0xEF29, - (q15_t)0x812A, (q15_t)0xEEC6, (q15_t)0x8137, (q15_t)0xEE62, - (q15_t)0x8145, (q15_t)0xEDFE, (q15_t)0x8154, (q15_t)0xED9B, - (q15_t)0x8162, (q15_t)0xED37, (q15_t)0x8171, (q15_t)0xECD4, - (q15_t)0x8180, (q15_t)0xEC71, (q15_t)0x8190, (q15_t)0xEC0D, - (q15_t)0x81A0, (q15_t)0xEBAA, (q15_t)0x81B0, (q15_t)0xEB47, - (q15_t)0x81C0, (q15_t)0xEAE4, (q15_t)0x81D1, (q15_t)0xEA80, - (q15_t)0x81E2, (q15_t)0xEA1D, (q15_t)0x81F3, (q15_t)0xE9BA, - (q15_t)0x8205, (q15_t)0xE957, (q15_t)0x8217, (q15_t)0xE8F5, - (q15_t)0x8229, (q15_t)0xE892, (q15_t)0x823C, (q15_t)0xE82F, - (q15_t)0x824F, (q15_t)0xE7CC, (q15_t)0x8262, (q15_t)0xE769, - (q15_t)0x8275, (q15_t)0xE707, (q15_t)0x8289, (q15_t)0xE6A4, - (q15_t)0x829D, (q15_t)0xE642, (q15_t)0x82B1, (q15_t)0xE5DF, - (q15_t)0x82C6, (q15_t)0xE57D, (q15_t)0x82DB, (q15_t)0xE51B, - (q15_t)0x82F0, (q15_t)0xE4B8, (q15_t)0x8306, (q15_t)0xE456, - (q15_t)0x831C, (q15_t)0xE3F4, (q15_t)0x8332, (q15_t)0xE392, - (q15_t)0x8348, (q15_t)0xE330, (q15_t)0x835F, (q15_t)0xE2CE, - (q15_t)0x8376, (q15_t)0xE26C, (q15_t)0x838E, (q15_t)0xE20A, - (q15_t)0x83A5, (q15_t)0xE1A9, (q15_t)0x83BD, (q15_t)0xE147, - (q15_t)0x83D6, (q15_t)0xE0E6, (q15_t)0x83EE, (q15_t)0xE084, - (q15_t)0x8407, (q15_t)0xE023, (q15_t)0x8420, (q15_t)0xDFC1, - (q15_t)0x843A, (q15_t)0xDF60, (q15_t)0x8453, (q15_t)0xDEFF, - (q15_t)0x846D, (q15_t)0xDE9E, (q15_t)0x8488, (q15_t)0xDE3D, - (q15_t)0x84A2, (q15_t)0xDDDC, (q15_t)0x84BD, (q15_t)0xDD7B, - (q15_t)0x84D9, (q15_t)0xDD1A, (q15_t)0x84F4, (q15_t)0xDCBA, - (q15_t)0x8510, (q15_t)0xDC59, (q15_t)0x852C, (q15_t)0xDBF8, - (q15_t)0x8549, (q15_t)0xDB98, (q15_t)0x8565, (q15_t)0xDB38, - (q15_t)0x8582, (q15_t)0xDAD7, (q15_t)0x85A0, (q15_t)0xDA77, - (q15_t)0x85BD, (q15_t)0xDA17, (q15_t)0x85DB, (q15_t)0xD9B7, - (q15_t)0x85FA, (q15_t)0xD957, (q15_t)0x8618, (q15_t)0xD8F8, - (q15_t)0x8637, (q15_t)0xD898, (q15_t)0x8656, (q15_t)0xD838, - (q15_t)0x8675, (q15_t)0xD7D9, (q15_t)0x8695, (q15_t)0xD779, - (q15_t)0x86B5, (q15_t)0xD71A, (q15_t)0x86D5, (q15_t)0xD6BB, - (q15_t)0x86F6, (q15_t)0xD65C, (q15_t)0x8717, (q15_t)0xD5FD, - (q15_t)0x8738, (q15_t)0xD59E, (q15_t)0x8759, (q15_t)0xD53F, - (q15_t)0x877B, (q15_t)0xD4E0, (q15_t)0x879D, (q15_t)0xD482, - (q15_t)0x87BF, (q15_t)0xD423, (q15_t)0x87E2, (q15_t)0xD3C5, - (q15_t)0x8805, (q15_t)0xD367, (q15_t)0x8828, (q15_t)0xD308, - (q15_t)0x884B, (q15_t)0xD2AA, (q15_t)0x886F, (q15_t)0xD24C, - (q15_t)0x8893, (q15_t)0xD1EE, (q15_t)0x88B8, (q15_t)0xD191, - (q15_t)0x88DC, (q15_t)0xD133, (q15_t)0x8901, (q15_t)0xD0D6, - (q15_t)0x8926, (q15_t)0xD078, (q15_t)0x894C, (q15_t)0xD01B, - (q15_t)0x8971, (q15_t)0xCFBE, (q15_t)0x8997, (q15_t)0xCF61, - (q15_t)0x89BE, (q15_t)0xCF04, (q15_t)0x89E4, (q15_t)0xCEA7, - (q15_t)0x8A0B, (q15_t)0xCE4A, (q15_t)0x8A33, (q15_t)0xCDEE, - (q15_t)0x8A5A, (q15_t)0xCD91, (q15_t)0x8A82, (q15_t)0xCD35, - (q15_t)0x8AAA, (q15_t)0xCCD9, (q15_t)0x8AD2, (q15_t)0xCC7D, - (q15_t)0x8AFB, (q15_t)0xCC21, (q15_t)0x8B24, (q15_t)0xCBC5, - (q15_t)0x8B4D, (q15_t)0xCB69, (q15_t)0x8B76, (q15_t)0xCB0D, - (q15_t)0x8BA0, (q15_t)0xCAB2, (q15_t)0x8BCA, (q15_t)0xCA57, - (q15_t)0x8BF4, (q15_t)0xC9FB, (q15_t)0x8C1F, (q15_t)0xC9A0, - (q15_t)0x8C4A, (q15_t)0xC945, (q15_t)0x8C75, (q15_t)0xC8EB, - (q15_t)0x8CA0, (q15_t)0xC890, (q15_t)0x8CCC, (q15_t)0xC835, - (q15_t)0x8CF8, (q15_t)0xC7DB, (q15_t)0x8D24, (q15_t)0xC781, - (q15_t)0x8D50, (q15_t)0xC727, (q15_t)0x8D7D, (q15_t)0xC6CD, - (q15_t)0x8DAA, (q15_t)0xC673, (q15_t)0x8DD8, (q15_t)0xC619, - (q15_t)0x8E05, (q15_t)0xC5BF, (q15_t)0x8E33, (q15_t)0xC566, - (q15_t)0x8E61, (q15_t)0xC50D, (q15_t)0x8E90, (q15_t)0xC4B3, - (q15_t)0x8EBE, (q15_t)0xC45A, (q15_t)0x8EED, (q15_t)0xC402, - (q15_t)0x8F1D, (q15_t)0xC3A9, (q15_t)0x8F4C, (q15_t)0xC350, - (q15_t)0x8F7C, (q15_t)0xC2F8, (q15_t)0x8FAC, (q15_t)0xC29F, - (q15_t)0x8FDC, (q15_t)0xC247, (q15_t)0x900D, (q15_t)0xC1EF, - (q15_t)0x903E, (q15_t)0xC197, (q15_t)0x906F, (q15_t)0xC140, - (q15_t)0x90A0, (q15_t)0xC0E8, (q15_t)0x90D2, (q15_t)0xC091, - (q15_t)0x9104, (q15_t)0xC03A, (q15_t)0x9136, (q15_t)0xBFE2, - (q15_t)0x9169, (q15_t)0xBF8C, (q15_t)0x919C, (q15_t)0xBF35, - (q15_t)0x91CF, (q15_t)0xBEDE, (q15_t)0x9202, (q15_t)0xBE88, - (q15_t)0x9235, (q15_t)0xBE31, (q15_t)0x9269, (q15_t)0xBDDB, - (q15_t)0x929D, (q15_t)0xBD85, (q15_t)0x92D2, (q15_t)0xBD2F, - (q15_t)0x9306, (q15_t)0xBCDA, (q15_t)0x933B, (q15_t)0xBC84, - (q15_t)0x9370, (q15_t)0xBC2F, (q15_t)0x93A6, (q15_t)0xBBDA, - (q15_t)0x93DB, (q15_t)0xBB85, (q15_t)0x9411, (q15_t)0xBB30, - (q15_t)0x9447, (q15_t)0xBADB, (q15_t)0x947E, (q15_t)0xBA87, - (q15_t)0x94B5, (q15_t)0xBA32, (q15_t)0x94EC, (q15_t)0xB9DE, - (q15_t)0x9523, (q15_t)0xB98A, (q15_t)0x955A, (q15_t)0xB936, - (q15_t)0x9592, (q15_t)0xB8E3, (q15_t)0x95CA, (q15_t)0xB88F, - (q15_t)0x9602, (q15_t)0xB83C, (q15_t)0x963B, (q15_t)0xB7E9, - (q15_t)0x9673, (q15_t)0xB796, (q15_t)0x96AC, (q15_t)0xB743, - (q15_t)0x96E6, (q15_t)0xB6F0, (q15_t)0x971F, (q15_t)0xB69E, - (q15_t)0x9759, (q15_t)0xB64B, (q15_t)0x9793, (q15_t)0xB5F9, - (q15_t)0x97CD, (q15_t)0xB5A7, (q15_t)0x9808, (q15_t)0xB556, - (q15_t)0x9842, (q15_t)0xB504, (q15_t)0x987D, (q15_t)0xB4B3, - (q15_t)0x98B9, (q15_t)0xB461, (q15_t)0x98F4, (q15_t)0xB410, - (q15_t)0x9930, (q15_t)0xB3C0, (q15_t)0x996C, (q15_t)0xB36F, - (q15_t)0x99A8, (q15_t)0xB31E, (q15_t)0x99E5, (q15_t)0xB2CE, - (q15_t)0x9A22, (q15_t)0xB27E, (q15_t)0x9A5F, (q15_t)0xB22E, - (q15_t)0x9A9C, (q15_t)0xB1DE, (q15_t)0x9AD9, (q15_t)0xB18F, - (q15_t)0x9B17, (q15_t)0xB140, (q15_t)0x9B55, (q15_t)0xB0F0, - (q15_t)0x9B93, (q15_t)0xB0A1, (q15_t)0x9BD2, (q15_t)0xB053, - (q15_t)0x9C10, (q15_t)0xB004, (q15_t)0x9C4F, (q15_t)0xAFB6, - (q15_t)0x9C8E, (q15_t)0xAF68, (q15_t)0x9CCE, (q15_t)0xAF1A, - (q15_t)0x9D0D, (q15_t)0xAECC, (q15_t)0x9D4D, (q15_t)0xAE7E, - (q15_t)0x9D8E, (q15_t)0xAE31, (q15_t)0x9DCE, (q15_t)0xADE3, - (q15_t)0x9E0E, (q15_t)0xAD96, (q15_t)0x9E4F, (q15_t)0xAD4A, - (q15_t)0x9E90, (q15_t)0xACFD, (q15_t)0x9ED2, (q15_t)0xACB1, - (q15_t)0x9F13, (q15_t)0xAC64, (q15_t)0x9F55, (q15_t)0xAC18, - (q15_t)0x9F97, (q15_t)0xABCC, (q15_t)0x9FD9, (q15_t)0xAB81, - (q15_t)0xA01C, (q15_t)0xAB35, (q15_t)0xA05F, (q15_t)0xAAEA, - (q15_t)0xA0A1, (q15_t)0xAA9F, (q15_t)0xA0E5, (q15_t)0xAA54, - (q15_t)0xA128, (q15_t)0xAA0A, (q15_t)0xA16C, (q15_t)0xA9BF, - (q15_t)0xA1AF, (q15_t)0xA975, (q15_t)0xA1F4, (q15_t)0xA92B, - (q15_t)0xA238, (q15_t)0xA8E2, (q15_t)0xA27C, (q15_t)0xA898, - (q15_t)0xA2C1, (q15_t)0xA84F, (q15_t)0xA306, (q15_t)0xA806, - (q15_t)0xA34B, (q15_t)0xA7BD, (q15_t)0xA391, (q15_t)0xA774, - (q15_t)0xA3D6, (q15_t)0xA72B, (q15_t)0xA41C, (q15_t)0xA6E3, - (q15_t)0xA462, (q15_t)0xA69B, (q15_t)0xA4A9, (q15_t)0xA653, - (q15_t)0xA4EF, (q15_t)0xA60C, (q15_t)0xA536, (q15_t)0xA5C4, - (q15_t)0xA57D, (q15_t)0xA57D, (q15_t)0xA5C4, (q15_t)0xA536, - (q15_t)0xA60C, (q15_t)0xA4EF, (q15_t)0xA653, (q15_t)0xA4A9, - (q15_t)0xA69B, (q15_t)0xA462, (q15_t)0xA6E3, (q15_t)0xA41C, - (q15_t)0xA72B, (q15_t)0xA3D6, (q15_t)0xA774, (q15_t)0xA391, - (q15_t)0xA7BD, (q15_t)0xA34B, (q15_t)0xA806, (q15_t)0xA306, - (q15_t)0xA84F, (q15_t)0xA2C1, (q15_t)0xA898, (q15_t)0xA27C, - (q15_t)0xA8E2, (q15_t)0xA238, (q15_t)0xA92B, (q15_t)0xA1F4, - (q15_t)0xA975, (q15_t)0xA1AF, (q15_t)0xA9BF, (q15_t)0xA16C, - (q15_t)0xAA0A, (q15_t)0xA128, (q15_t)0xAA54, (q15_t)0xA0E5, - (q15_t)0xAA9F, (q15_t)0xA0A1, (q15_t)0xAAEA, (q15_t)0xA05F, - (q15_t)0xAB35, (q15_t)0xA01C, (q15_t)0xAB81, (q15_t)0x9FD9, - (q15_t)0xABCC, (q15_t)0x9F97, (q15_t)0xAC18, (q15_t)0x9F55, - (q15_t)0xAC64, (q15_t)0x9F13, (q15_t)0xACB1, (q15_t)0x9ED2, - (q15_t)0xACFD, (q15_t)0x9E90, (q15_t)0xAD4A, (q15_t)0x9E4F, - (q15_t)0xAD96, (q15_t)0x9E0E, (q15_t)0xADE3, (q15_t)0x9DCE, - (q15_t)0xAE31, (q15_t)0x9D8E, (q15_t)0xAE7E, (q15_t)0x9D4D, - (q15_t)0xAECC, (q15_t)0x9D0D, (q15_t)0xAF1A, (q15_t)0x9CCE, - (q15_t)0xAF68, (q15_t)0x9C8E, (q15_t)0xAFB6, (q15_t)0x9C4F, - (q15_t)0xB004, (q15_t)0x9C10, (q15_t)0xB053, (q15_t)0x9BD2, - (q15_t)0xB0A1, (q15_t)0x9B93, (q15_t)0xB0F0, (q15_t)0x9B55, - (q15_t)0xB140, (q15_t)0x9B17, (q15_t)0xB18F, (q15_t)0x9AD9, - (q15_t)0xB1DE, (q15_t)0x9A9C, (q15_t)0xB22E, (q15_t)0x9A5F, - (q15_t)0xB27E, (q15_t)0x9A22, (q15_t)0xB2CE, (q15_t)0x99E5, - (q15_t)0xB31E, (q15_t)0x99A8, (q15_t)0xB36F, (q15_t)0x996C, - (q15_t)0xB3C0, (q15_t)0x9930, (q15_t)0xB410, (q15_t)0x98F4, - (q15_t)0xB461, (q15_t)0x98B9, (q15_t)0xB4B3, (q15_t)0x987D, - (q15_t)0xB504, (q15_t)0x9842, (q15_t)0xB556, (q15_t)0x9808, - (q15_t)0xB5A7, (q15_t)0x97CD, (q15_t)0xB5F9, (q15_t)0x9793, - (q15_t)0xB64B, (q15_t)0x9759, (q15_t)0xB69E, (q15_t)0x971F, - (q15_t)0xB6F0, (q15_t)0x96E6, (q15_t)0xB743, (q15_t)0x96AC, - (q15_t)0xB796, (q15_t)0x9673, (q15_t)0xB7E9, (q15_t)0x963B, - (q15_t)0xB83C, (q15_t)0x9602, (q15_t)0xB88F, (q15_t)0x95CA, - (q15_t)0xB8E3, (q15_t)0x9592, (q15_t)0xB936, (q15_t)0x955A, - (q15_t)0xB98A, (q15_t)0x9523, (q15_t)0xB9DE, (q15_t)0x94EC, - (q15_t)0xBA32, (q15_t)0x94B5, (q15_t)0xBA87, (q15_t)0x947E, - (q15_t)0xBADB, (q15_t)0x9447, (q15_t)0xBB30, (q15_t)0x9411, - (q15_t)0xBB85, (q15_t)0x93DB, (q15_t)0xBBDA, (q15_t)0x93A6, - (q15_t)0xBC2F, (q15_t)0x9370, (q15_t)0xBC84, (q15_t)0x933B, - (q15_t)0xBCDA, (q15_t)0x9306, (q15_t)0xBD2F, (q15_t)0x92D2, - (q15_t)0xBD85, (q15_t)0x929D, (q15_t)0xBDDB, (q15_t)0x9269, - (q15_t)0xBE31, (q15_t)0x9235, (q15_t)0xBE88, (q15_t)0x9202, - (q15_t)0xBEDE, (q15_t)0x91CF, (q15_t)0xBF35, (q15_t)0x919C, - (q15_t)0xBF8C, (q15_t)0x9169, (q15_t)0xBFE2, (q15_t)0x9136, - (q15_t)0xC03A, (q15_t)0x9104, (q15_t)0xC091, (q15_t)0x90D2, - (q15_t)0xC0E8, (q15_t)0x90A0, (q15_t)0xC140, (q15_t)0x906F, - (q15_t)0xC197, (q15_t)0x903E, (q15_t)0xC1EF, (q15_t)0x900D, - (q15_t)0xC247, (q15_t)0x8FDC, (q15_t)0xC29F, (q15_t)0x8FAC, - (q15_t)0xC2F8, (q15_t)0x8F7C, (q15_t)0xC350, (q15_t)0x8F4C, - (q15_t)0xC3A9, (q15_t)0x8F1D, (q15_t)0xC402, (q15_t)0x8EED, - (q15_t)0xC45A, (q15_t)0x8EBE, (q15_t)0xC4B3, (q15_t)0x8E90, - (q15_t)0xC50D, (q15_t)0x8E61, (q15_t)0xC566, (q15_t)0x8E33, - (q15_t)0xC5BF, (q15_t)0x8E05, (q15_t)0xC619, (q15_t)0x8DD8, - (q15_t)0xC673, (q15_t)0x8DAA, (q15_t)0xC6CD, (q15_t)0x8D7D, - (q15_t)0xC727, (q15_t)0x8D50, (q15_t)0xC781, (q15_t)0x8D24, - (q15_t)0xC7DB, (q15_t)0x8CF8, (q15_t)0xC835, (q15_t)0x8CCC, - (q15_t)0xC890, (q15_t)0x8CA0, (q15_t)0xC8EB, (q15_t)0x8C75, - (q15_t)0xC945, (q15_t)0x8C4A, (q15_t)0xC9A0, (q15_t)0x8C1F, - (q15_t)0xC9FB, (q15_t)0x8BF4, (q15_t)0xCA57, (q15_t)0x8BCA, - (q15_t)0xCAB2, (q15_t)0x8BA0, (q15_t)0xCB0D, (q15_t)0x8B76, - (q15_t)0xCB69, (q15_t)0x8B4D, (q15_t)0xCBC5, (q15_t)0x8B24, - (q15_t)0xCC21, (q15_t)0x8AFB, (q15_t)0xCC7D, (q15_t)0x8AD2, - (q15_t)0xCCD9, (q15_t)0x8AAA, (q15_t)0xCD35, (q15_t)0x8A82, - (q15_t)0xCD91, (q15_t)0x8A5A, (q15_t)0xCDEE, (q15_t)0x8A33, - (q15_t)0xCE4A, (q15_t)0x8A0B, (q15_t)0xCEA7, (q15_t)0x89E4, - (q15_t)0xCF04, (q15_t)0x89BE, (q15_t)0xCF61, (q15_t)0x8997, - (q15_t)0xCFBE, (q15_t)0x8971, (q15_t)0xD01B, (q15_t)0x894C, - (q15_t)0xD078, (q15_t)0x8926, (q15_t)0xD0D6, (q15_t)0x8901, - (q15_t)0xD133, (q15_t)0x88DC, (q15_t)0xD191, (q15_t)0x88B8, - (q15_t)0xD1EE, (q15_t)0x8893, (q15_t)0xD24C, (q15_t)0x886F, - (q15_t)0xD2AA, (q15_t)0x884B, (q15_t)0xD308, (q15_t)0x8828, - (q15_t)0xD367, (q15_t)0x8805, (q15_t)0xD3C5, (q15_t)0x87E2, - (q15_t)0xD423, (q15_t)0x87BF, (q15_t)0xD482, (q15_t)0x879D, - (q15_t)0xD4E0, (q15_t)0x877B, (q15_t)0xD53F, (q15_t)0x8759, - (q15_t)0xD59E, (q15_t)0x8738, (q15_t)0xD5FD, (q15_t)0x8717, - (q15_t)0xD65C, (q15_t)0x86F6, (q15_t)0xD6BB, (q15_t)0x86D5, - (q15_t)0xD71A, (q15_t)0x86B5, (q15_t)0xD779, (q15_t)0x8695, - (q15_t)0xD7D9, (q15_t)0x8675, (q15_t)0xD838, (q15_t)0x8656, - (q15_t)0xD898, (q15_t)0x8637, (q15_t)0xD8F8, (q15_t)0x8618, - (q15_t)0xD957, (q15_t)0x85FA, (q15_t)0xD9B7, (q15_t)0x85DB, - (q15_t)0xDA17, (q15_t)0x85BD, (q15_t)0xDA77, (q15_t)0x85A0, - (q15_t)0xDAD7, (q15_t)0x8582, (q15_t)0xDB38, (q15_t)0x8565, - (q15_t)0xDB98, (q15_t)0x8549, (q15_t)0xDBF8, (q15_t)0x852C, - (q15_t)0xDC59, (q15_t)0x8510, (q15_t)0xDCBA, (q15_t)0x84F4, - (q15_t)0xDD1A, (q15_t)0x84D9, (q15_t)0xDD7B, (q15_t)0x84BD, - (q15_t)0xDDDC, (q15_t)0x84A2, (q15_t)0xDE3D, (q15_t)0x8488, - (q15_t)0xDE9E, (q15_t)0x846D, (q15_t)0xDEFF, (q15_t)0x8453, - (q15_t)0xDF60, (q15_t)0x843A, (q15_t)0xDFC1, (q15_t)0x8420, - (q15_t)0xE023, (q15_t)0x8407, (q15_t)0xE084, (q15_t)0x83EE, - (q15_t)0xE0E6, (q15_t)0x83D6, (q15_t)0xE147, (q15_t)0x83BD, - (q15_t)0xE1A9, (q15_t)0x83A5, (q15_t)0xE20A, (q15_t)0x838E, - (q15_t)0xE26C, (q15_t)0x8376, (q15_t)0xE2CE, (q15_t)0x835F, - (q15_t)0xE330, (q15_t)0x8348, (q15_t)0xE392, (q15_t)0x8332, - (q15_t)0xE3F4, (q15_t)0x831C, (q15_t)0xE456, (q15_t)0x8306, - (q15_t)0xE4B8, (q15_t)0x82F0, (q15_t)0xE51B, (q15_t)0x82DB, - (q15_t)0xE57D, (q15_t)0x82C6, (q15_t)0xE5DF, (q15_t)0x82B1, - (q15_t)0xE642, (q15_t)0x829D, (q15_t)0xE6A4, (q15_t)0x8289, - (q15_t)0xE707, (q15_t)0x8275, (q15_t)0xE769, (q15_t)0x8262, - (q15_t)0xE7CC, (q15_t)0x824F, (q15_t)0xE82F, (q15_t)0x823C, - (q15_t)0xE892, (q15_t)0x8229, (q15_t)0xE8F5, (q15_t)0x8217, - (q15_t)0xE957, (q15_t)0x8205, (q15_t)0xE9BA, (q15_t)0x81F3, - (q15_t)0xEA1D, (q15_t)0x81E2, (q15_t)0xEA80, (q15_t)0x81D1, - (q15_t)0xEAE4, (q15_t)0x81C0, (q15_t)0xEB47, (q15_t)0x81B0, - (q15_t)0xEBAA, (q15_t)0x81A0, (q15_t)0xEC0D, (q15_t)0x8190, - (q15_t)0xEC71, (q15_t)0x8180, (q15_t)0xECD4, (q15_t)0x8171, - (q15_t)0xED37, (q15_t)0x8162, (q15_t)0xED9B, (q15_t)0x8154, - (q15_t)0xEDFE, (q15_t)0x8145, (q15_t)0xEE62, (q15_t)0x8137, - (q15_t)0xEEC6, (q15_t)0x812A, (q15_t)0xEF29, (q15_t)0x811C, - (q15_t)0xEF8D, (q15_t)0x810F, (q15_t)0xEFF1, (q15_t)0x8102, - (q15_t)0xF054, (q15_t)0x80F6, (q15_t)0xF0B8, (q15_t)0x80EA, - (q15_t)0xF11C, (q15_t)0x80DE, (q15_t)0xF180, (q15_t)0x80D2, - (q15_t)0xF1E4, (q15_t)0x80C7, (q15_t)0xF248, (q15_t)0x80BC, - (q15_t)0xF2AC, (q15_t)0x80B2, (q15_t)0xF310, (q15_t)0x80A7, - (q15_t)0xF374, (q15_t)0x809D, (q15_t)0xF3D8, (q15_t)0x8094, - (q15_t)0xF43C, (q15_t)0x808A, (q15_t)0xF4A0, (q15_t)0x8081, - (q15_t)0xF504, (q15_t)0x8078, (q15_t)0xF568, (q15_t)0x8070, - (q15_t)0xF5CC, (q15_t)0x8068, (q15_t)0xF631, (q15_t)0x8060, - (q15_t)0xF695, (q15_t)0x8058, (q15_t)0xF6F9, (q15_t)0x8051, - (q15_t)0xF75D, (q15_t)0x804A, (q15_t)0xF7C2, (q15_t)0x8043, - (q15_t)0xF826, (q15_t)0x803D, (q15_t)0xF88A, (q15_t)0x8037, - (q15_t)0xF8EF, (q15_t)0x8031, (q15_t)0xF953, (q15_t)0x802C, - (q15_t)0xF9B8, (q15_t)0x8027, (q15_t)0xFA1C, (q15_t)0x8022, - (q15_t)0xFA80, (q15_t)0x801E, (q15_t)0xFAE5, (q15_t)0x801A, - (q15_t)0xFB49, (q15_t)0x8016, (q15_t)0xFBAE, (q15_t)0x8012, - (q15_t)0xFC12, (q15_t)0x800F, (q15_t)0xFC77, (q15_t)0x800C, - (q15_t)0xFCDB, (q15_t)0x8009, (q15_t)0xFD40, (q15_t)0x8007, - (q15_t)0xFDA4, (q15_t)0x8005, (q15_t)0xFE09, (q15_t)0x8003, - (q15_t)0xFE6D, (q15_t)0x8002, (q15_t)0xFED2, (q15_t)0x8001, - (q15_t)0xFF36, (q15_t)0x8000, (q15_t)0xFF9B, (q15_t)0x8000 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) -/** - @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, 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] = -{ - (q15_t)0x7FFF, (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0x0032, - (q15_t)0x7FFF, (q15_t)0x0064, (q15_t)0x7FFF, (q15_t)0x0096, - (q15_t)0x7FFF, (q15_t)0x00C9, (q15_t)0x7FFF, (q15_t)0x00FB, - (q15_t)0x7FFE, (q15_t)0x012D, (q15_t)0x7FFE, (q15_t)0x015F, - (q15_t)0x7FFD, (q15_t)0x0192, (q15_t)0x7FFC, (q15_t)0x01C4, - (q15_t)0x7FFC, (q15_t)0x01F6, (q15_t)0x7FFB, (q15_t)0x0228, - (q15_t)0x7FFA, (q15_t)0x025B, (q15_t)0x7FF9, (q15_t)0x028D, - (q15_t)0x7FF8, (q15_t)0x02BF, (q15_t)0x7FF7, (q15_t)0x02F1, - (q15_t)0x7FF6, (q15_t)0x0324, (q15_t)0x7FF4, (q15_t)0x0356, - (q15_t)0x7FF3, (q15_t)0x0388, (q15_t)0x7FF2, (q15_t)0x03BA, - (q15_t)0x7FF0, (q15_t)0x03ED, (q15_t)0x7FEE, (q15_t)0x041F, - (q15_t)0x7FED, (q15_t)0x0451, (q15_t)0x7FEB, (q15_t)0x0483, - (q15_t)0x7FE9, (q15_t)0x04B6, (q15_t)0x7FE7, (q15_t)0x04E8, - (q15_t)0x7FE5, (q15_t)0x051A, (q15_t)0x7FE3, (q15_t)0x054C, - (q15_t)0x7FE1, (q15_t)0x057F, (q15_t)0x7FDF, (q15_t)0x05B1, - (q15_t)0x7FDD, (q15_t)0x05E3, (q15_t)0x7FDA, (q15_t)0x0615, - (q15_t)0x7FD8, (q15_t)0x0647, (q15_t)0x7FD6, (q15_t)0x067A, - (q15_t)0x7FD3, (q15_t)0x06AC, (q15_t)0x7FD0, (q15_t)0x06DE, - (q15_t)0x7FCE, (q15_t)0x0710, (q15_t)0x7FCB, (q15_t)0x0742, - (q15_t)0x7FC8, (q15_t)0x0775, (q15_t)0x7FC5, (q15_t)0x07A7, - (q15_t)0x7FC2, (q15_t)0x07D9, (q15_t)0x7FBF, (q15_t)0x080B, - (q15_t)0x7FBC, (q15_t)0x083D, (q15_t)0x7FB8, (q15_t)0x086F, - (q15_t)0x7FB5, (q15_t)0x08A2, (q15_t)0x7FB1, (q15_t)0x08D4, - (q15_t)0x7FAE, (q15_t)0x0906, (q15_t)0x7FAA, (q15_t)0x0938, - (q15_t)0x7FA7, (q15_t)0x096A, (q15_t)0x7FA3, (q15_t)0x099C, - (q15_t)0x7F9F, (q15_t)0x09CE, (q15_t)0x7F9B, (q15_t)0x0A00, - (q15_t)0x7F97, (q15_t)0x0A33, (q15_t)0x7F93, (q15_t)0x0A65, - (q15_t)0x7F8F, (q15_t)0x0A97, (q15_t)0x7F8B, (q15_t)0x0AC9, - (q15_t)0x7F87, (q15_t)0x0AFB, (q15_t)0x7F82, (q15_t)0x0B2D, - (q15_t)0x7F7E, (q15_t)0x0B5F, (q15_t)0x7F79, (q15_t)0x0B91, - (q15_t)0x7F75, (q15_t)0x0BC3, (q15_t)0x7F70, (q15_t)0x0BF5, - (q15_t)0x7F6B, (q15_t)0x0C27, (q15_t)0x7F67, (q15_t)0x0C59, - (q15_t)0x7F62, (q15_t)0x0C8B, (q15_t)0x7F5D, (q15_t)0x0CBD, - (q15_t)0x7F58, (q15_t)0x0CEF, (q15_t)0x7F53, (q15_t)0x0D21, - (q15_t)0x7F4D, (q15_t)0x0D53, (q15_t)0x7F48, (q15_t)0x0D85, - (q15_t)0x7F43, (q15_t)0x0DB7, (q15_t)0x7F3D, (q15_t)0x0DE9, - (q15_t)0x7F38, (q15_t)0x0E1B, (q15_t)0x7F32, (q15_t)0x0E4D, - (q15_t)0x7F2D, (q15_t)0x0E7F, (q15_t)0x7F27, (q15_t)0x0EB1, - (q15_t)0x7F21, (q15_t)0x0EE3, (q15_t)0x7F1B, (q15_t)0x0F15, - (q15_t)0x7F15, (q15_t)0x0F47, (q15_t)0x7F0F, (q15_t)0x0F79, - (q15_t)0x7F09, (q15_t)0x0FAB, (q15_t)0x7F03, (q15_t)0x0FDD, - (q15_t)0x7EFD, (q15_t)0x100E, (q15_t)0x7EF6, (q15_t)0x1040, - (q15_t)0x7EF0, (q15_t)0x1072, (q15_t)0x7EE9, (q15_t)0x10A4, - (q15_t)0x7EE3, (q15_t)0x10D6, (q15_t)0x7EDC, (q15_t)0x1108, - (q15_t)0x7ED5, (q15_t)0x1139, (q15_t)0x7ECF, (q15_t)0x116B, - (q15_t)0x7EC8, (q15_t)0x119D, (q15_t)0x7EC1, (q15_t)0x11CF, - (q15_t)0x7EBA, (q15_t)0x1201, (q15_t)0x7EB3, (q15_t)0x1232, - (q15_t)0x7EAB, (q15_t)0x1264, (q15_t)0x7EA4, (q15_t)0x1296, - (q15_t)0x7E9D, (q15_t)0x12C8, (q15_t)0x7E95, (q15_t)0x12F9, - (q15_t)0x7E8E, (q15_t)0x132B, (q15_t)0x7E86, (q15_t)0x135D, - (q15_t)0x7E7F, (q15_t)0x138E, (q15_t)0x7E77, (q15_t)0x13C0, - (q15_t)0x7E6F, (q15_t)0x13F2, (q15_t)0x7E67, (q15_t)0x1423, - (q15_t)0x7E5F, (q15_t)0x1455, (q15_t)0x7E57, (q15_t)0x1487, - (q15_t)0x7E4F, (q15_t)0x14B8, (q15_t)0x7E47, (q15_t)0x14EA, - (q15_t)0x7E3F, (q15_t)0x151B, (q15_t)0x7E37, (q15_t)0x154D, - (q15_t)0x7E2E, (q15_t)0x157F, (q15_t)0x7E26, (q15_t)0x15B0, - (q15_t)0x7E1D, (q15_t)0x15E2, (q15_t)0x7E14, (q15_t)0x1613, - (q15_t)0x7E0C, (q15_t)0x1645, (q15_t)0x7E03, (q15_t)0x1676, - (q15_t)0x7DFA, (q15_t)0x16A8, (q15_t)0x7DF1, (q15_t)0x16D9, - (q15_t)0x7DE8, (q15_t)0x170A, (q15_t)0x7DDF, (q15_t)0x173C, - (q15_t)0x7DD6, (q15_t)0x176D, (q15_t)0x7DCD, (q15_t)0x179F, - (q15_t)0x7DC3, (q15_t)0x17D0, (q15_t)0x7DBA, (q15_t)0x1802, - (q15_t)0x7DB0, (q15_t)0x1833, (q15_t)0x7DA7, (q15_t)0x1864, - (q15_t)0x7D9D, (q15_t)0x1896, (q15_t)0x7D94, (q15_t)0x18C7, - (q15_t)0x7D8A, (q15_t)0x18F8, (q15_t)0x7D80, (q15_t)0x192A, - (q15_t)0x7D76, (q15_t)0x195B, (q15_t)0x7D6C, (q15_t)0x198C, - (q15_t)0x7D62, (q15_t)0x19BD, (q15_t)0x7D58, (q15_t)0x19EF, - (q15_t)0x7D4E, (q15_t)0x1A20, (q15_t)0x7D43, (q15_t)0x1A51, - (q15_t)0x7D39, (q15_t)0x1A82, (q15_t)0x7D2F, (q15_t)0x1AB3, - (q15_t)0x7D24, (q15_t)0x1AE4, (q15_t)0x7D19, (q15_t)0x1B16, - (q15_t)0x7D0F, (q15_t)0x1B47, (q15_t)0x7D04, (q15_t)0x1B78, - (q15_t)0x7CF9, (q15_t)0x1BA9, (q15_t)0x7CEE, (q15_t)0x1BDA, - (q15_t)0x7CE3, (q15_t)0x1C0B, (q15_t)0x7CD8, (q15_t)0x1C3C, - (q15_t)0x7CCD, (q15_t)0x1C6D, (q15_t)0x7CC2, (q15_t)0x1C9E, - (q15_t)0x7CB7, (q15_t)0x1CCF, (q15_t)0x7CAB, (q15_t)0x1D00, - (q15_t)0x7CA0, (q15_t)0x1D31, (q15_t)0x7C94, (q15_t)0x1D62, - (q15_t)0x7C89, (q15_t)0x1D93, (q15_t)0x7C7D, (q15_t)0x1DC4, - (q15_t)0x7C71, (q15_t)0x1DF5, (q15_t)0x7C66, (q15_t)0x1E25, - (q15_t)0x7C5A, (q15_t)0x1E56, (q15_t)0x7C4E, (q15_t)0x1E87, - (q15_t)0x7C42, (q15_t)0x1EB8, (q15_t)0x7C36, (q15_t)0x1EE9, - (q15_t)0x7C29, (q15_t)0x1F19, (q15_t)0x7C1D, (q15_t)0x1F4A, - (q15_t)0x7C11, (q15_t)0x1F7B, (q15_t)0x7C05, (q15_t)0x1FAC, - (q15_t)0x7BF8, (q15_t)0x1FDC, (q15_t)0x7BEB, (q15_t)0x200D, - (q15_t)0x7BDF, (q15_t)0x203E, (q15_t)0x7BD2, (q15_t)0x206E, - (q15_t)0x7BC5, (q15_t)0x209F, (q15_t)0x7BB9, (q15_t)0x20D0, - (q15_t)0x7BAC, (q15_t)0x2100, (q15_t)0x7B9F, (q15_t)0x2131, - (q15_t)0x7B92, (q15_t)0x2161, (q15_t)0x7B84, (q15_t)0x2192, - (q15_t)0x7B77, (q15_t)0x21C2, (q15_t)0x7B6A, (q15_t)0x21F3, - (q15_t)0x7B5D, (q15_t)0x2223, (q15_t)0x7B4F, (q15_t)0x2254, - (q15_t)0x7B42, (q15_t)0x2284, (q15_t)0x7B34, (q15_t)0x22B4, - (q15_t)0x7B26, (q15_t)0x22E5, (q15_t)0x7B19, (q15_t)0x2315, - (q15_t)0x7B0B, (q15_t)0x2345, (q15_t)0x7AFD, (q15_t)0x2376, - (q15_t)0x7AEF, (q15_t)0x23A6, (q15_t)0x7AE1, (q15_t)0x23D6, - (q15_t)0x7AD3, (q15_t)0x2407, (q15_t)0x7AC5, (q15_t)0x2437, - (q15_t)0x7AB6, (q15_t)0x2467, (q15_t)0x7AA8, (q15_t)0x2497, - (q15_t)0x7A9A, (q15_t)0x24C7, (q15_t)0x7A8B, (q15_t)0x24F7, - (q15_t)0x7A7D, (q15_t)0x2528, (q15_t)0x7A6E, (q15_t)0x2558, - (q15_t)0x7A5F, (q15_t)0x2588, (q15_t)0x7A50, (q15_t)0x25B8, - (q15_t)0x7A42, (q15_t)0x25E8, (q15_t)0x7A33, (q15_t)0x2618, - (q15_t)0x7A24, (q15_t)0x2648, (q15_t)0x7A15, (q15_t)0x2678, - (q15_t)0x7A05, (q15_t)0x26A8, (q15_t)0x79F6, (q15_t)0x26D8, - (q15_t)0x79E7, (q15_t)0x2707, (q15_t)0x79D8, (q15_t)0x2737, - (q15_t)0x79C8, (q15_t)0x2767, (q15_t)0x79B9, (q15_t)0x2797, - (q15_t)0x79A9, (q15_t)0x27C7, (q15_t)0x7999, (q15_t)0x27F6, - (q15_t)0x798A, (q15_t)0x2826, (q15_t)0x797A, (q15_t)0x2856, - (q15_t)0x796A, (q15_t)0x2886, (q15_t)0x795A, (q15_t)0x28B5, - (q15_t)0x794A, (q15_t)0x28E5, (q15_t)0x793A, (q15_t)0x2915, - (q15_t)0x792A, (q15_t)0x2944, (q15_t)0x7919, (q15_t)0x2974, - (q15_t)0x7909, (q15_t)0x29A3, (q15_t)0x78F9, (q15_t)0x29D3, - (q15_t)0x78E8, (q15_t)0x2A02, (q15_t)0x78D8, (q15_t)0x2A32, - (q15_t)0x78C7, (q15_t)0x2A61, (q15_t)0x78B6, (q15_t)0x2A91, - (q15_t)0x78A6, (q15_t)0x2AC0, (q15_t)0x7895, (q15_t)0x2AEF, - (q15_t)0x7884, (q15_t)0x2B1F, (q15_t)0x7873, (q15_t)0x2B4E, - (q15_t)0x7862, (q15_t)0x2B7D, (q15_t)0x7851, (q15_t)0x2BAD, - (q15_t)0x7840, (q15_t)0x2BDC, (q15_t)0x782E, (q15_t)0x2C0B, - (q15_t)0x781D, (q15_t)0x2C3A, (q15_t)0x780C, (q15_t)0x2C69, - (q15_t)0x77FA, (q15_t)0x2C98, (q15_t)0x77E9, (q15_t)0x2CC8, - (q15_t)0x77D7, (q15_t)0x2CF7, (q15_t)0x77C5, (q15_t)0x2D26, - (q15_t)0x77B4, (q15_t)0x2D55, (q15_t)0x77A2, (q15_t)0x2D84, - (q15_t)0x7790, (q15_t)0x2DB3, (q15_t)0x777E, (q15_t)0x2DE2, - (q15_t)0x776C, (q15_t)0x2E11, (q15_t)0x775A, (q15_t)0x2E3F, - (q15_t)0x7747, (q15_t)0x2E6E, (q15_t)0x7735, (q15_t)0x2E9D, - (q15_t)0x7723, (q15_t)0x2ECC, (q15_t)0x7710, (q15_t)0x2EFB, - (q15_t)0x76FE, (q15_t)0x2F29, (q15_t)0x76EB, (q15_t)0x2F58, - (q15_t)0x76D9, (q15_t)0x2F87, (q15_t)0x76C6, (q15_t)0x2FB5, - (q15_t)0x76B3, (q15_t)0x2FE4, (q15_t)0x76A0, (q15_t)0x3013, - (q15_t)0x768E, (q15_t)0x3041, (q15_t)0x767B, (q15_t)0x3070, - (q15_t)0x7668, (q15_t)0x309E, (q15_t)0x7654, (q15_t)0x30CD, - (q15_t)0x7641, (q15_t)0x30FB, (q15_t)0x762E, (q15_t)0x312A, - (q15_t)0x761B, (q15_t)0x3158, (q15_t)0x7607, (q15_t)0x3186, - (q15_t)0x75F4, (q15_t)0x31B5, (q15_t)0x75E0, (q15_t)0x31E3, - (q15_t)0x75CC, (q15_t)0x3211, (q15_t)0x75B9, (q15_t)0x3240, - (q15_t)0x75A5, (q15_t)0x326E, (q15_t)0x7591, (q15_t)0x329C, - (q15_t)0x757D, (q15_t)0x32CA, (q15_t)0x7569, (q15_t)0x32F8, - (q15_t)0x7555, (q15_t)0x3326, (q15_t)0x7541, (q15_t)0x3354, - (q15_t)0x752D, (q15_t)0x3382, (q15_t)0x7519, (q15_t)0x33B0, - (q15_t)0x7504, (q15_t)0x33DE, (q15_t)0x74F0, (q15_t)0x340C, - (q15_t)0x74DB, (q15_t)0x343A, (q15_t)0x74C7, (q15_t)0x3468, - (q15_t)0x74B2, (q15_t)0x3496, (q15_t)0x749E, (q15_t)0x34C4, - (q15_t)0x7489, (q15_t)0x34F2, (q15_t)0x7474, (q15_t)0x351F, - (q15_t)0x745F, (q15_t)0x354D, (q15_t)0x744A, (q15_t)0x357B, - (q15_t)0x7435, (q15_t)0x35A8, (q15_t)0x7420, (q15_t)0x35D6, - (q15_t)0x740B, (q15_t)0x3604, (q15_t)0x73F6, (q15_t)0x3631, - (q15_t)0x73E0, (q15_t)0x365F, (q15_t)0x73CB, (q15_t)0x368C, - (q15_t)0x73B5, (q15_t)0x36BA, (q15_t)0x73A0, (q15_t)0x36E7, - (q15_t)0x738A, (q15_t)0x3714, (q15_t)0x7375, (q15_t)0x3742, - (q15_t)0x735F, (q15_t)0x376F, (q15_t)0x7349, (q15_t)0x379C, - (q15_t)0x7333, (q15_t)0x37CA, (q15_t)0x731D, (q15_t)0x37F7, - (q15_t)0x7307, (q15_t)0x3824, (q15_t)0x72F1, (q15_t)0x3851, - (q15_t)0x72DB, (q15_t)0x387E, (q15_t)0x72C5, (q15_t)0x38AB, - (q15_t)0x72AF, (q15_t)0x38D8, (q15_t)0x7298, (q15_t)0x3906, - (q15_t)0x7282, (q15_t)0x3932, (q15_t)0x726B, (q15_t)0x395F, - (q15_t)0x7255, (q15_t)0x398C, (q15_t)0x723E, (q15_t)0x39B9, - (q15_t)0x7227, (q15_t)0x39E6, (q15_t)0x7211, (q15_t)0x3A13, - (q15_t)0x71FA, (q15_t)0x3A40, (q15_t)0x71E3, (q15_t)0x3A6C, - (q15_t)0x71CC, (q15_t)0x3A99, (q15_t)0x71B5, (q15_t)0x3AC6, - (q15_t)0x719E, (q15_t)0x3AF2, (q15_t)0x7186, (q15_t)0x3B1F, - (q15_t)0x716F, (q15_t)0x3B4C, (q15_t)0x7158, (q15_t)0x3B78, - (q15_t)0x7141, (q15_t)0x3BA5, (q15_t)0x7129, (q15_t)0x3BD1, - (q15_t)0x7112, (q15_t)0x3BFD, (q15_t)0x70FA, (q15_t)0x3C2A, - (q15_t)0x70E2, (q15_t)0x3C56, (q15_t)0x70CB, (q15_t)0x3C83, - (q15_t)0x70B3, (q15_t)0x3CAF, (q15_t)0x709B, (q15_t)0x3CDB, - (q15_t)0x7083, (q15_t)0x3D07, (q15_t)0x706B, (q15_t)0x3D33, - (q15_t)0x7053, (q15_t)0x3D60, (q15_t)0x703B, (q15_t)0x3D8C, - (q15_t)0x7023, (q15_t)0x3DB8, (q15_t)0x700A, (q15_t)0x3DE4, - (q15_t)0x6FF2, (q15_t)0x3E10, (q15_t)0x6FDA, (q15_t)0x3E3C, - (q15_t)0x6FC1, (q15_t)0x3E68, (q15_t)0x6FA9, (q15_t)0x3E93, - (q15_t)0x6F90, (q15_t)0x3EBF, (q15_t)0x6F77, (q15_t)0x3EEB, - (q15_t)0x6F5F, (q15_t)0x3F17, (q15_t)0x6F46, (q15_t)0x3F43, - (q15_t)0x6F2D, (q15_t)0x3F6E, (q15_t)0x6F14, (q15_t)0x3F9A, - (q15_t)0x6EFB, (q15_t)0x3FC5, (q15_t)0x6EE2, (q15_t)0x3FF1, - (q15_t)0x6EC9, (q15_t)0x401D, (q15_t)0x6EAF, (q15_t)0x4048, - (q15_t)0x6E96, (q15_t)0x4073, (q15_t)0x6E7D, (q15_t)0x409F, - (q15_t)0x6E63, (q15_t)0x40CA, (q15_t)0x6E4A, (q15_t)0x40F6, - (q15_t)0x6E30, (q15_t)0x4121, (q15_t)0x6E17, (q15_t)0x414C, - (q15_t)0x6DFD, (q15_t)0x4177, (q15_t)0x6DE3, (q15_t)0x41A2, - (q15_t)0x6DCA, (q15_t)0x41CE, (q15_t)0x6DB0, (q15_t)0x41F9, - (q15_t)0x6D96, (q15_t)0x4224, (q15_t)0x6D7C, (q15_t)0x424F, - (q15_t)0x6D62, (q15_t)0x427A, (q15_t)0x6D48, (q15_t)0x42A5, - (q15_t)0x6D2D, (q15_t)0x42D0, (q15_t)0x6D13, (q15_t)0x42FA, - (q15_t)0x6CF9, (q15_t)0x4325, (q15_t)0x6CDE, (q15_t)0x4350, - (q15_t)0x6CC4, (q15_t)0x437B, (q15_t)0x6CA9, (q15_t)0x43A5, - (q15_t)0x6C8F, (q15_t)0x43D0, (q15_t)0x6C74, (q15_t)0x43FB, - (q15_t)0x6C59, (q15_t)0x4425, (q15_t)0x6C3F, (q15_t)0x4450, - (q15_t)0x6C24, (q15_t)0x447A, (q15_t)0x6C09, (q15_t)0x44A5, - (q15_t)0x6BEE, (q15_t)0x44CF, (q15_t)0x6BD3, (q15_t)0x44FA, - (q15_t)0x6BB8, (q15_t)0x4524, (q15_t)0x6B9C, (q15_t)0x454E, - (q15_t)0x6B81, (q15_t)0x4578, (q15_t)0x6B66, (q15_t)0x45A3, - (q15_t)0x6B4A, (q15_t)0x45CD, (q15_t)0x6B2F, (q15_t)0x45F7, - (q15_t)0x6B13, (q15_t)0x4621, (q15_t)0x6AF8, (q15_t)0x464B, - (q15_t)0x6ADC, (q15_t)0x4675, (q15_t)0x6AC1, (q15_t)0x469F, - (q15_t)0x6AA5, (q15_t)0x46C9, (q15_t)0x6A89, (q15_t)0x46F3, - (q15_t)0x6A6D, (q15_t)0x471C, (q15_t)0x6A51, (q15_t)0x4746, - (q15_t)0x6A35, (q15_t)0x4770, (q15_t)0x6A19, (q15_t)0x479A, - (q15_t)0x69FD, (q15_t)0x47C3, (q15_t)0x69E1, (q15_t)0x47ED, - (q15_t)0x69C4, (q15_t)0x4816, (q15_t)0x69A8, (q15_t)0x4840, - (q15_t)0x698C, (q15_t)0x4869, (q15_t)0x696F, (q15_t)0x4893, - (q15_t)0x6953, (q15_t)0x48BC, (q15_t)0x6936, (q15_t)0x48E6, - (q15_t)0x6919, (q15_t)0x490F, (q15_t)0x68FD, (q15_t)0x4938, - (q15_t)0x68E0, (q15_t)0x4961, (q15_t)0x68C3, (q15_t)0x498A, - (q15_t)0x68A6, (q15_t)0x49B4, (q15_t)0x6889, (q15_t)0x49DD, - (q15_t)0x686C, (q15_t)0x4A06, (q15_t)0x684F, (q15_t)0x4A2F, - (q15_t)0x6832, (q15_t)0x4A58, (q15_t)0x6815, (q15_t)0x4A81, - (q15_t)0x67F7, (q15_t)0x4AA9, (q15_t)0x67DA, (q15_t)0x4AD2, - (q15_t)0x67BD, (q15_t)0x4AFB, (q15_t)0x679F, (q15_t)0x4B24, - (q15_t)0x6782, (q15_t)0x4B4C, (q15_t)0x6764, (q15_t)0x4B75, - (q15_t)0x6746, (q15_t)0x4B9E, (q15_t)0x6729, (q15_t)0x4BC6, - (q15_t)0x670B, (q15_t)0x4BEF, (q15_t)0x66ED, (q15_t)0x4C17, - (q15_t)0x66CF, (q15_t)0x4C3F, (q15_t)0x66B1, (q15_t)0x4C68, - (q15_t)0x6693, (q15_t)0x4C90, (q15_t)0x6675, (q15_t)0x4CB8, - (q15_t)0x6657, (q15_t)0x4CE1, (q15_t)0x6639, (q15_t)0x4D09, - (q15_t)0x661A, (q15_t)0x4D31, (q15_t)0x65FC, (q15_t)0x4D59, - (q15_t)0x65DD, (q15_t)0x4D81, (q15_t)0x65BF, (q15_t)0x4DA9, - (q15_t)0x65A0, (q15_t)0x4DD1, (q15_t)0x6582, (q15_t)0x4DF9, - (q15_t)0x6563, (q15_t)0x4E21, (q15_t)0x6545, (q15_t)0x4E48, - (q15_t)0x6526, (q15_t)0x4E70, (q15_t)0x6507, (q15_t)0x4E98, - (q15_t)0x64E8, (q15_t)0x4EBF, (q15_t)0x64C9, (q15_t)0x4EE7, - (q15_t)0x64AA, (q15_t)0x4F0F, (q15_t)0x648B, (q15_t)0x4F36, - (q15_t)0x646C, (q15_t)0x4F5E, (q15_t)0x644D, (q15_t)0x4F85, - (q15_t)0x642D, (q15_t)0x4FAC, (q15_t)0x640E, (q15_t)0x4FD4, - (q15_t)0x63EF, (q15_t)0x4FFB, (q15_t)0x63CF, (q15_t)0x5022, - (q15_t)0x63B0, (q15_t)0x5049, (q15_t)0x6390, (q15_t)0x5070, - (q15_t)0x6371, (q15_t)0x5097, (q15_t)0x6351, (q15_t)0x50BF, - (q15_t)0x6331, (q15_t)0x50E5, (q15_t)0x6311, (q15_t)0x510C, - (q15_t)0x62F2, (q15_t)0x5133, (q15_t)0x62D2, (q15_t)0x515A, - (q15_t)0x62B2, (q15_t)0x5181, (q15_t)0x6292, (q15_t)0x51A8, - (q15_t)0x6271, (q15_t)0x51CE, (q15_t)0x6251, (q15_t)0x51F5, - (q15_t)0x6231, (q15_t)0x521C, (q15_t)0x6211, (q15_t)0x5242, - (q15_t)0x61F1, (q15_t)0x5269, (q15_t)0x61D0, (q15_t)0x528F, - (q15_t)0x61B0, (q15_t)0x52B5, (q15_t)0x618F, (q15_t)0x52DC, - (q15_t)0x616F, (q15_t)0x5302, (q15_t)0x614E, (q15_t)0x5328, - (q15_t)0x612D, (q15_t)0x534E, (q15_t)0x610D, (q15_t)0x5375, - (q15_t)0x60EC, (q15_t)0x539B, (q15_t)0x60CB, (q15_t)0x53C1, - (q15_t)0x60AA, (q15_t)0x53E7, (q15_t)0x6089, (q15_t)0x540D, - (q15_t)0x6068, (q15_t)0x5433, (q15_t)0x6047, (q15_t)0x5458, - (q15_t)0x6026, (q15_t)0x547E, (q15_t)0x6004, (q15_t)0x54A4, - (q15_t)0x5FE3, (q15_t)0x54CA, (q15_t)0x5FC2, (q15_t)0x54EF, - (q15_t)0x5FA0, (q15_t)0x5515, (q15_t)0x5F7F, (q15_t)0x553A, - (q15_t)0x5F5E, (q15_t)0x5560, (q15_t)0x5F3C, (q15_t)0x5585, - (q15_t)0x5F1A, (q15_t)0x55AB, (q15_t)0x5EF9, (q15_t)0x55D0, - (q15_t)0x5ED7, (q15_t)0x55F5, (q15_t)0x5EB5, (q15_t)0x561A, - (q15_t)0x5E93, (q15_t)0x5640, (q15_t)0x5E71, (q15_t)0x5665, - (q15_t)0x5E50, (q15_t)0x568A, (q15_t)0x5E2D, (q15_t)0x56AF, - (q15_t)0x5E0B, (q15_t)0x56D4, (q15_t)0x5DE9, (q15_t)0x56F9, - (q15_t)0x5DC7, (q15_t)0x571D, (q15_t)0x5DA5, (q15_t)0x5742, - (q15_t)0x5D83, (q15_t)0x5767, (q15_t)0x5D60, (q15_t)0x578C, - (q15_t)0x5D3E, (q15_t)0x57B0, (q15_t)0x5D1B, (q15_t)0x57D5, - (q15_t)0x5CF9, (q15_t)0x57F9, (q15_t)0x5CD6, (q15_t)0x581E, - (q15_t)0x5CB4, (q15_t)0x5842, (q15_t)0x5C91, (q15_t)0x5867, - (q15_t)0x5C6E, (q15_t)0x588B, (q15_t)0x5C4B, (q15_t)0x58AF, - (q15_t)0x5C29, (q15_t)0x58D4, (q15_t)0x5C06, (q15_t)0x58F8, - (q15_t)0x5BE3, (q15_t)0x591C, (q15_t)0x5BC0, (q15_t)0x5940, - (q15_t)0x5B9D, (q15_t)0x5964, (q15_t)0x5B79, (q15_t)0x5988, - (q15_t)0x5B56, (q15_t)0x59AC, (q15_t)0x5B33, (q15_t)0x59D0, - (q15_t)0x5B10, (q15_t)0x59F3, (q15_t)0x5AEC, (q15_t)0x5A17, - (q15_t)0x5AC9, (q15_t)0x5A3B, (q15_t)0x5AA5, (q15_t)0x5A5E, - (q15_t)0x5A82, (q15_t)0x5A82, (q15_t)0x5A5E, (q15_t)0x5AA5, - (q15_t)0x5A3B, (q15_t)0x5AC9, (q15_t)0x5A17, (q15_t)0x5AEC, - (q15_t)0x59F3, (q15_t)0x5B10, (q15_t)0x59D0, (q15_t)0x5B33, - (q15_t)0x59AC, (q15_t)0x5B56, (q15_t)0x5988, (q15_t)0x5B79, - (q15_t)0x5964, (q15_t)0x5B9D, (q15_t)0x5940, (q15_t)0x5BC0, - (q15_t)0x591C, (q15_t)0x5BE3, (q15_t)0x58F8, (q15_t)0x5C06, - (q15_t)0x58D4, (q15_t)0x5C29, (q15_t)0x58AF, (q15_t)0x5C4B, - (q15_t)0x588B, (q15_t)0x5C6E, (q15_t)0x5867, (q15_t)0x5C91, - (q15_t)0x5842, (q15_t)0x5CB4, (q15_t)0x581E, (q15_t)0x5CD6, - (q15_t)0x57F9, (q15_t)0x5CF9, (q15_t)0x57D5, (q15_t)0x5D1B, - (q15_t)0x57B0, (q15_t)0x5D3E, (q15_t)0x578C, (q15_t)0x5D60, - (q15_t)0x5767, (q15_t)0x5D83, (q15_t)0x5742, (q15_t)0x5DA5, - (q15_t)0x571D, (q15_t)0x5DC7, (q15_t)0x56F9, (q15_t)0x5DE9, - (q15_t)0x56D4, (q15_t)0x5E0B, (q15_t)0x56AF, (q15_t)0x5E2D, - (q15_t)0x568A, (q15_t)0x5E50, (q15_t)0x5665, (q15_t)0x5E71, - (q15_t)0x5640, (q15_t)0x5E93, (q15_t)0x561A, (q15_t)0x5EB5, - (q15_t)0x55F5, (q15_t)0x5ED7, (q15_t)0x55D0, (q15_t)0x5EF9, - (q15_t)0x55AB, (q15_t)0x5F1A, (q15_t)0x5585, (q15_t)0x5F3C, - (q15_t)0x5560, (q15_t)0x5F5E, (q15_t)0x553A, (q15_t)0x5F7F, - (q15_t)0x5515, (q15_t)0x5FA0, (q15_t)0x54EF, (q15_t)0x5FC2, - (q15_t)0x54CA, (q15_t)0x5FE3, (q15_t)0x54A4, (q15_t)0x6004, - (q15_t)0x547E, (q15_t)0x6026, (q15_t)0x5458, (q15_t)0x6047, - (q15_t)0x5433, (q15_t)0x6068, (q15_t)0x540D, (q15_t)0x6089, - (q15_t)0x53E7, (q15_t)0x60AA, (q15_t)0x53C1, (q15_t)0x60CB, - (q15_t)0x539B, (q15_t)0x60EC, (q15_t)0x5375, (q15_t)0x610D, - (q15_t)0x534E, (q15_t)0x612D, (q15_t)0x5328, (q15_t)0x614E, - (q15_t)0x5302, (q15_t)0x616F, (q15_t)0x52DC, (q15_t)0x618F, - (q15_t)0x52B5, (q15_t)0x61B0, (q15_t)0x528F, (q15_t)0x61D0, - (q15_t)0x5269, (q15_t)0x61F1, (q15_t)0x5242, (q15_t)0x6211, - (q15_t)0x521C, (q15_t)0x6231, (q15_t)0x51F5, (q15_t)0x6251, - (q15_t)0x51CE, (q15_t)0x6271, (q15_t)0x51A8, (q15_t)0x6292, - (q15_t)0x5181, (q15_t)0x62B2, (q15_t)0x515A, (q15_t)0x62D2, - (q15_t)0x5133, (q15_t)0x62F2, (q15_t)0x510C, (q15_t)0x6311, - (q15_t)0x50E5, (q15_t)0x6331, (q15_t)0x50BF, (q15_t)0x6351, - (q15_t)0x5097, (q15_t)0x6371, (q15_t)0x5070, (q15_t)0x6390, - (q15_t)0x5049, (q15_t)0x63B0, (q15_t)0x5022, (q15_t)0x63CF, - (q15_t)0x4FFB, (q15_t)0x63EF, (q15_t)0x4FD4, (q15_t)0x640E, - (q15_t)0x4FAC, (q15_t)0x642D, (q15_t)0x4F85, (q15_t)0x644D, - (q15_t)0x4F5E, (q15_t)0x646C, (q15_t)0x4F36, (q15_t)0x648B, - (q15_t)0x4F0F, (q15_t)0x64AA, (q15_t)0x4EE7, (q15_t)0x64C9, - (q15_t)0x4EBF, (q15_t)0x64E8, (q15_t)0x4E98, (q15_t)0x6507, - (q15_t)0x4E70, (q15_t)0x6526, (q15_t)0x4E48, (q15_t)0x6545, - (q15_t)0x4E21, (q15_t)0x6563, (q15_t)0x4DF9, (q15_t)0x6582, - (q15_t)0x4DD1, (q15_t)0x65A0, (q15_t)0x4DA9, (q15_t)0x65BF, - (q15_t)0x4D81, (q15_t)0x65DD, (q15_t)0x4D59, (q15_t)0x65FC, - (q15_t)0x4D31, (q15_t)0x661A, (q15_t)0x4D09, (q15_t)0x6639, - (q15_t)0x4CE1, (q15_t)0x6657, (q15_t)0x4CB8, (q15_t)0x6675, - (q15_t)0x4C90, (q15_t)0x6693, (q15_t)0x4C68, (q15_t)0x66B1, - (q15_t)0x4C3F, (q15_t)0x66CF, (q15_t)0x4C17, (q15_t)0x66ED, - (q15_t)0x4BEF, (q15_t)0x670B, (q15_t)0x4BC6, (q15_t)0x6729, - (q15_t)0x4B9E, (q15_t)0x6746, (q15_t)0x4B75, (q15_t)0x6764, - (q15_t)0x4B4C, (q15_t)0x6782, (q15_t)0x4B24, (q15_t)0x679F, - (q15_t)0x4AFB, (q15_t)0x67BD, (q15_t)0x4AD2, (q15_t)0x67DA, - (q15_t)0x4AA9, (q15_t)0x67F7, (q15_t)0x4A81, (q15_t)0x6815, - (q15_t)0x4A58, (q15_t)0x6832, (q15_t)0x4A2F, (q15_t)0x684F, - (q15_t)0x4A06, (q15_t)0x686C, (q15_t)0x49DD, (q15_t)0x6889, - (q15_t)0x49B4, (q15_t)0x68A6, (q15_t)0x498A, (q15_t)0x68C3, - (q15_t)0x4961, (q15_t)0x68E0, (q15_t)0x4938, (q15_t)0x68FD, - (q15_t)0x490F, (q15_t)0x6919, (q15_t)0x48E6, (q15_t)0x6936, - (q15_t)0x48BC, (q15_t)0x6953, (q15_t)0x4893, (q15_t)0x696F, - (q15_t)0x4869, (q15_t)0x698C, (q15_t)0x4840, (q15_t)0x69A8, - (q15_t)0x4816, (q15_t)0x69C4, (q15_t)0x47ED, (q15_t)0x69E1, - (q15_t)0x47C3, (q15_t)0x69FD, (q15_t)0x479A, (q15_t)0x6A19, - (q15_t)0x4770, (q15_t)0x6A35, (q15_t)0x4746, (q15_t)0x6A51, - (q15_t)0x471C, (q15_t)0x6A6D, (q15_t)0x46F3, (q15_t)0x6A89, - (q15_t)0x46C9, (q15_t)0x6AA5, (q15_t)0x469F, (q15_t)0x6AC1, - (q15_t)0x4675, (q15_t)0x6ADC, (q15_t)0x464B, (q15_t)0x6AF8, - (q15_t)0x4621, (q15_t)0x6B13, (q15_t)0x45F7, (q15_t)0x6B2F, - (q15_t)0x45CD, (q15_t)0x6B4A, (q15_t)0x45A3, (q15_t)0x6B66, - (q15_t)0x4578, (q15_t)0x6B81, (q15_t)0x454E, (q15_t)0x6B9C, - (q15_t)0x4524, (q15_t)0x6BB8, (q15_t)0x44FA, (q15_t)0x6BD3, - (q15_t)0x44CF, (q15_t)0x6BEE, (q15_t)0x44A5, (q15_t)0x6C09, - (q15_t)0x447A, (q15_t)0x6C24, (q15_t)0x4450, (q15_t)0x6C3F, - (q15_t)0x4425, (q15_t)0x6C59, (q15_t)0x43FB, (q15_t)0x6C74, - (q15_t)0x43D0, (q15_t)0x6C8F, (q15_t)0x43A5, (q15_t)0x6CA9, - (q15_t)0x437B, (q15_t)0x6CC4, (q15_t)0x4350, (q15_t)0x6CDE, - (q15_t)0x4325, (q15_t)0x6CF9, (q15_t)0x42FA, (q15_t)0x6D13, - (q15_t)0x42D0, (q15_t)0x6D2D, (q15_t)0x42A5, (q15_t)0x6D48, - (q15_t)0x427A, (q15_t)0x6D62, (q15_t)0x424F, (q15_t)0x6D7C, - (q15_t)0x4224, (q15_t)0x6D96, (q15_t)0x41F9, (q15_t)0x6DB0, - (q15_t)0x41CE, (q15_t)0x6DCA, (q15_t)0x41A2, (q15_t)0x6DE3, - (q15_t)0x4177, (q15_t)0x6DFD, (q15_t)0x414C, (q15_t)0x6E17, - (q15_t)0x4121, (q15_t)0x6E30, (q15_t)0x40F6, (q15_t)0x6E4A, - (q15_t)0x40CA, (q15_t)0x6E63, (q15_t)0x409F, (q15_t)0x6E7D, - (q15_t)0x4073, (q15_t)0x6E96, (q15_t)0x4048, (q15_t)0x6EAF, - (q15_t)0x401D, (q15_t)0x6EC9, (q15_t)0x3FF1, (q15_t)0x6EE2, - (q15_t)0x3FC5, (q15_t)0x6EFB, (q15_t)0x3F9A, (q15_t)0x6F14, - (q15_t)0x3F6E, (q15_t)0x6F2D, (q15_t)0x3F43, (q15_t)0x6F46, - (q15_t)0x3F17, (q15_t)0x6F5F, (q15_t)0x3EEB, (q15_t)0x6F77, - (q15_t)0x3EBF, (q15_t)0x6F90, (q15_t)0x3E93, (q15_t)0x6FA9, - (q15_t)0x3E68, (q15_t)0x6FC1, (q15_t)0x3E3C, (q15_t)0x6FDA, - (q15_t)0x3E10, (q15_t)0x6FF2, (q15_t)0x3DE4, (q15_t)0x700A, - (q15_t)0x3DB8, (q15_t)0x7023, (q15_t)0x3D8C, (q15_t)0x703B, - (q15_t)0x3D60, (q15_t)0x7053, (q15_t)0x3D33, (q15_t)0x706B, - (q15_t)0x3D07, (q15_t)0x7083, (q15_t)0x3CDB, (q15_t)0x709B, - (q15_t)0x3CAF, (q15_t)0x70B3, (q15_t)0x3C83, (q15_t)0x70CB, - (q15_t)0x3C56, (q15_t)0x70E2, (q15_t)0x3C2A, (q15_t)0x70FA, - (q15_t)0x3BFD, (q15_t)0x7112, (q15_t)0x3BD1, (q15_t)0x7129, - (q15_t)0x3BA5, (q15_t)0x7141, (q15_t)0x3B78, (q15_t)0x7158, - (q15_t)0x3B4C, (q15_t)0x716F, (q15_t)0x3B1F, (q15_t)0x7186, - (q15_t)0x3AF2, (q15_t)0x719E, (q15_t)0x3AC6, (q15_t)0x71B5, - (q15_t)0x3A99, (q15_t)0x71CC, (q15_t)0x3A6C, (q15_t)0x71E3, - (q15_t)0x3A40, (q15_t)0x71FA, (q15_t)0x3A13, (q15_t)0x7211, - (q15_t)0x39E6, (q15_t)0x7227, (q15_t)0x39B9, (q15_t)0x723E, - (q15_t)0x398C, (q15_t)0x7255, (q15_t)0x395F, (q15_t)0x726B, - (q15_t)0x3932, (q15_t)0x7282, (q15_t)0x3906, (q15_t)0x7298, - (q15_t)0x38D8, (q15_t)0x72AF, (q15_t)0x38AB, (q15_t)0x72C5, - (q15_t)0x387E, (q15_t)0x72DB, (q15_t)0x3851, (q15_t)0x72F1, - (q15_t)0x3824, (q15_t)0x7307, (q15_t)0x37F7, (q15_t)0x731D, - (q15_t)0x37CA, (q15_t)0x7333, (q15_t)0x379C, (q15_t)0x7349, - (q15_t)0x376F, (q15_t)0x735F, (q15_t)0x3742, (q15_t)0x7375, - (q15_t)0x3714, (q15_t)0x738A, (q15_t)0x36E7, (q15_t)0x73A0, - (q15_t)0x36BA, (q15_t)0x73B5, (q15_t)0x368C, (q15_t)0x73CB, - (q15_t)0x365F, (q15_t)0x73E0, (q15_t)0x3631, (q15_t)0x73F6, - (q15_t)0x3604, (q15_t)0x740B, (q15_t)0x35D6, (q15_t)0x7420, - (q15_t)0x35A8, (q15_t)0x7435, (q15_t)0x357B, (q15_t)0x744A, - (q15_t)0x354D, (q15_t)0x745F, (q15_t)0x351F, (q15_t)0x7474, - (q15_t)0x34F2, (q15_t)0x7489, (q15_t)0x34C4, (q15_t)0x749E, - (q15_t)0x3496, (q15_t)0x74B2, (q15_t)0x3468, (q15_t)0x74C7, - (q15_t)0x343A, (q15_t)0x74DB, (q15_t)0x340C, (q15_t)0x74F0, - (q15_t)0x33DE, (q15_t)0x7504, (q15_t)0x33B0, (q15_t)0x7519, - (q15_t)0x3382, (q15_t)0x752D, (q15_t)0x3354, (q15_t)0x7541, - (q15_t)0x3326, (q15_t)0x7555, (q15_t)0x32F8, (q15_t)0x7569, - (q15_t)0x32CA, (q15_t)0x757D, (q15_t)0x329C, (q15_t)0x7591, - (q15_t)0x326E, (q15_t)0x75A5, (q15_t)0x3240, (q15_t)0x75B9, - (q15_t)0x3211, (q15_t)0x75CC, (q15_t)0x31E3, (q15_t)0x75E0, - (q15_t)0x31B5, (q15_t)0x75F4, (q15_t)0x3186, (q15_t)0x7607, - (q15_t)0x3158, (q15_t)0x761B, (q15_t)0x312A, (q15_t)0x762E, - (q15_t)0x30FB, (q15_t)0x7641, (q15_t)0x30CD, (q15_t)0x7654, - (q15_t)0x309E, (q15_t)0x7668, (q15_t)0x3070, (q15_t)0x767B, - (q15_t)0x3041, (q15_t)0x768E, (q15_t)0x3013, (q15_t)0x76A0, - (q15_t)0x2FE4, (q15_t)0x76B3, (q15_t)0x2FB5, (q15_t)0x76C6, - (q15_t)0x2F87, (q15_t)0x76D9, (q15_t)0x2F58, (q15_t)0x76EB, - (q15_t)0x2F29, (q15_t)0x76FE, (q15_t)0x2EFB, (q15_t)0x7710, - (q15_t)0x2ECC, (q15_t)0x7723, (q15_t)0x2E9D, (q15_t)0x7735, - (q15_t)0x2E6E, (q15_t)0x7747, (q15_t)0x2E3F, (q15_t)0x775A, - (q15_t)0x2E11, (q15_t)0x776C, (q15_t)0x2DE2, (q15_t)0x777E, - (q15_t)0x2DB3, (q15_t)0x7790, (q15_t)0x2D84, (q15_t)0x77A2, - (q15_t)0x2D55, (q15_t)0x77B4, (q15_t)0x2D26, (q15_t)0x77C5, - (q15_t)0x2CF7, (q15_t)0x77D7, (q15_t)0x2CC8, (q15_t)0x77E9, - (q15_t)0x2C98, (q15_t)0x77FA, (q15_t)0x2C69, (q15_t)0x780C, - (q15_t)0x2C3A, (q15_t)0x781D, (q15_t)0x2C0B, (q15_t)0x782E, - (q15_t)0x2BDC, (q15_t)0x7840, (q15_t)0x2BAD, (q15_t)0x7851, - (q15_t)0x2B7D, (q15_t)0x7862, (q15_t)0x2B4E, (q15_t)0x7873, - (q15_t)0x2B1F, (q15_t)0x7884, (q15_t)0x2AEF, (q15_t)0x7895, - (q15_t)0x2AC0, (q15_t)0x78A6, (q15_t)0x2A91, (q15_t)0x78B6, - (q15_t)0x2A61, (q15_t)0x78C7, (q15_t)0x2A32, (q15_t)0x78D8, - (q15_t)0x2A02, (q15_t)0x78E8, (q15_t)0x29D3, (q15_t)0x78F9, - (q15_t)0x29A3, (q15_t)0x7909, (q15_t)0x2974, (q15_t)0x7919, - (q15_t)0x2944, (q15_t)0x792A, (q15_t)0x2915, (q15_t)0x793A, - (q15_t)0x28E5, (q15_t)0x794A, (q15_t)0x28B5, (q15_t)0x795A, - (q15_t)0x2886, (q15_t)0x796A, (q15_t)0x2856, (q15_t)0x797A, - (q15_t)0x2826, (q15_t)0x798A, (q15_t)0x27F6, (q15_t)0x7999, - (q15_t)0x27C7, (q15_t)0x79A9, (q15_t)0x2797, (q15_t)0x79B9, - (q15_t)0x2767, (q15_t)0x79C8, (q15_t)0x2737, (q15_t)0x79D8, - (q15_t)0x2707, (q15_t)0x79E7, (q15_t)0x26D8, (q15_t)0x79F6, - (q15_t)0x26A8, (q15_t)0x7A05, (q15_t)0x2678, (q15_t)0x7A15, - (q15_t)0x2648, (q15_t)0x7A24, (q15_t)0x2618, (q15_t)0x7A33, - (q15_t)0x25E8, (q15_t)0x7A42, (q15_t)0x25B8, (q15_t)0x7A50, - (q15_t)0x2588, (q15_t)0x7A5F, (q15_t)0x2558, (q15_t)0x7A6E, - (q15_t)0x2528, (q15_t)0x7A7D, (q15_t)0x24F7, (q15_t)0x7A8B, - (q15_t)0x24C7, (q15_t)0x7A9A, (q15_t)0x2497, (q15_t)0x7AA8, - (q15_t)0x2467, (q15_t)0x7AB6, (q15_t)0x2437, (q15_t)0x7AC5, - (q15_t)0x2407, (q15_t)0x7AD3, (q15_t)0x23D6, (q15_t)0x7AE1, - (q15_t)0x23A6, (q15_t)0x7AEF, (q15_t)0x2376, (q15_t)0x7AFD, - (q15_t)0x2345, (q15_t)0x7B0B, (q15_t)0x2315, (q15_t)0x7B19, - (q15_t)0x22E5, (q15_t)0x7B26, (q15_t)0x22B4, (q15_t)0x7B34, - (q15_t)0x2284, (q15_t)0x7B42, (q15_t)0x2254, (q15_t)0x7B4F, - (q15_t)0x2223, (q15_t)0x7B5D, (q15_t)0x21F3, (q15_t)0x7B6A, - (q15_t)0x21C2, (q15_t)0x7B77, (q15_t)0x2192, (q15_t)0x7B84, - (q15_t)0x2161, (q15_t)0x7B92, (q15_t)0x2131, (q15_t)0x7B9F, - (q15_t)0x2100, (q15_t)0x7BAC, (q15_t)0x20D0, (q15_t)0x7BB9, - (q15_t)0x209F, (q15_t)0x7BC5, (q15_t)0x206E, (q15_t)0x7BD2, - (q15_t)0x203E, (q15_t)0x7BDF, (q15_t)0x200D, (q15_t)0x7BEB, - (q15_t)0x1FDC, (q15_t)0x7BF8, (q15_t)0x1FAC, (q15_t)0x7C05, - (q15_t)0x1F7B, (q15_t)0x7C11, (q15_t)0x1F4A, (q15_t)0x7C1D, - (q15_t)0x1F19, (q15_t)0x7C29, (q15_t)0x1EE9, (q15_t)0x7C36, - (q15_t)0x1EB8, (q15_t)0x7C42, (q15_t)0x1E87, (q15_t)0x7C4E, - (q15_t)0x1E56, (q15_t)0x7C5A, (q15_t)0x1E25, (q15_t)0x7C66, - (q15_t)0x1DF5, (q15_t)0x7C71, (q15_t)0x1DC4, (q15_t)0x7C7D, - (q15_t)0x1D93, (q15_t)0x7C89, (q15_t)0x1D62, (q15_t)0x7C94, - (q15_t)0x1D31, (q15_t)0x7CA0, (q15_t)0x1D00, (q15_t)0x7CAB, - (q15_t)0x1CCF, (q15_t)0x7CB7, (q15_t)0x1C9E, (q15_t)0x7CC2, - (q15_t)0x1C6D, (q15_t)0x7CCD, (q15_t)0x1C3C, (q15_t)0x7CD8, - (q15_t)0x1C0B, (q15_t)0x7CE3, (q15_t)0x1BDA, (q15_t)0x7CEE, - (q15_t)0x1BA9, (q15_t)0x7CF9, (q15_t)0x1B78, (q15_t)0x7D04, - (q15_t)0x1B47, (q15_t)0x7D0F, (q15_t)0x1B16, (q15_t)0x7D19, - (q15_t)0x1AE4, (q15_t)0x7D24, (q15_t)0x1AB3, (q15_t)0x7D2F, - (q15_t)0x1A82, (q15_t)0x7D39, (q15_t)0x1A51, (q15_t)0x7D43, - (q15_t)0x1A20, (q15_t)0x7D4E, (q15_t)0x19EF, (q15_t)0x7D58, - (q15_t)0x19BD, (q15_t)0x7D62, (q15_t)0x198C, (q15_t)0x7D6C, - (q15_t)0x195B, (q15_t)0x7D76, (q15_t)0x192A, (q15_t)0x7D80, - (q15_t)0x18F8, (q15_t)0x7D8A, (q15_t)0x18C7, (q15_t)0x7D94, - (q15_t)0x1896, (q15_t)0x7D9D, (q15_t)0x1864, (q15_t)0x7DA7, - (q15_t)0x1833, (q15_t)0x7DB0, (q15_t)0x1802, (q15_t)0x7DBA, - (q15_t)0x17D0, (q15_t)0x7DC3, (q15_t)0x179F, (q15_t)0x7DCD, - (q15_t)0x176D, (q15_t)0x7DD6, (q15_t)0x173C, (q15_t)0x7DDF, - (q15_t)0x170A, (q15_t)0x7DE8, (q15_t)0x16D9, (q15_t)0x7DF1, - (q15_t)0x16A8, (q15_t)0x7DFA, (q15_t)0x1676, (q15_t)0x7E03, - (q15_t)0x1645, (q15_t)0x7E0C, (q15_t)0x1613, (q15_t)0x7E14, - (q15_t)0x15E2, (q15_t)0x7E1D, (q15_t)0x15B0, (q15_t)0x7E26, - (q15_t)0x157F, (q15_t)0x7E2E, (q15_t)0x154D, (q15_t)0x7E37, - (q15_t)0x151B, (q15_t)0x7E3F, (q15_t)0x14EA, (q15_t)0x7E47, - (q15_t)0x14B8, (q15_t)0x7E4F, (q15_t)0x1487, (q15_t)0x7E57, - (q15_t)0x1455, (q15_t)0x7E5F, (q15_t)0x1423, (q15_t)0x7E67, - (q15_t)0x13F2, (q15_t)0x7E6F, (q15_t)0x13C0, (q15_t)0x7E77, - (q15_t)0x138E, (q15_t)0x7E7F, (q15_t)0x135D, (q15_t)0x7E86, - (q15_t)0x132B, (q15_t)0x7E8E, (q15_t)0x12F9, (q15_t)0x7E95, - (q15_t)0x12C8, (q15_t)0x7E9D, (q15_t)0x1296, (q15_t)0x7EA4, - (q15_t)0x1264, (q15_t)0x7EAB, (q15_t)0x1232, (q15_t)0x7EB3, - (q15_t)0x1201, (q15_t)0x7EBA, (q15_t)0x11CF, (q15_t)0x7EC1, - (q15_t)0x119D, (q15_t)0x7EC8, (q15_t)0x116B, (q15_t)0x7ECF, - (q15_t)0x1139, (q15_t)0x7ED5, (q15_t)0x1108, (q15_t)0x7EDC, - (q15_t)0x10D6, (q15_t)0x7EE3, (q15_t)0x10A4, (q15_t)0x7EE9, - (q15_t)0x1072, (q15_t)0x7EF0, (q15_t)0x1040, (q15_t)0x7EF6, - (q15_t)0x100E, (q15_t)0x7EFD, (q15_t)0x0FDD, (q15_t)0x7F03, - (q15_t)0x0FAB, (q15_t)0x7F09, (q15_t)0x0F79, (q15_t)0x7F0F, - (q15_t)0x0F47, (q15_t)0x7F15, (q15_t)0x0F15, (q15_t)0x7F1B, - (q15_t)0x0EE3, (q15_t)0x7F21, (q15_t)0x0EB1, (q15_t)0x7F27, - (q15_t)0x0E7F, (q15_t)0x7F2D, (q15_t)0x0E4D, (q15_t)0x7F32, - (q15_t)0x0E1B, (q15_t)0x7F38, (q15_t)0x0DE9, (q15_t)0x7F3D, - (q15_t)0x0DB7, (q15_t)0x7F43, (q15_t)0x0D85, (q15_t)0x7F48, - (q15_t)0x0D53, (q15_t)0x7F4D, (q15_t)0x0D21, (q15_t)0x7F53, - (q15_t)0x0CEF, (q15_t)0x7F58, (q15_t)0x0CBD, (q15_t)0x7F5D, - (q15_t)0x0C8B, (q15_t)0x7F62, (q15_t)0x0C59, (q15_t)0x7F67, - (q15_t)0x0C27, (q15_t)0x7F6B, (q15_t)0x0BF5, (q15_t)0x7F70, - (q15_t)0x0BC3, (q15_t)0x7F75, (q15_t)0x0B91, (q15_t)0x7F79, - (q15_t)0x0B5F, (q15_t)0x7F7E, (q15_t)0x0B2D, (q15_t)0x7F82, - (q15_t)0x0AFB, (q15_t)0x7F87, (q15_t)0x0AC9, (q15_t)0x7F8B, - (q15_t)0x0A97, (q15_t)0x7F8F, (q15_t)0x0A65, (q15_t)0x7F93, - (q15_t)0x0A33, (q15_t)0x7F97, (q15_t)0x0A00, (q15_t)0x7F9B, - (q15_t)0x09CE, (q15_t)0x7F9F, (q15_t)0x099C, (q15_t)0x7FA3, - (q15_t)0x096A, (q15_t)0x7FA7, (q15_t)0x0938, (q15_t)0x7FAA, - (q15_t)0x0906, (q15_t)0x7FAE, (q15_t)0x08D4, (q15_t)0x7FB1, - (q15_t)0x08A2, (q15_t)0x7FB5, (q15_t)0x086F, (q15_t)0x7FB8, - (q15_t)0x083D, (q15_t)0x7FBC, (q15_t)0x080B, (q15_t)0x7FBF, - (q15_t)0x07D9, (q15_t)0x7FC2, (q15_t)0x07A7, (q15_t)0x7FC5, - (q15_t)0x0775, (q15_t)0x7FC8, (q15_t)0x0742, (q15_t)0x7FCB, - (q15_t)0x0710, (q15_t)0x7FCE, (q15_t)0x06DE, (q15_t)0x7FD0, - (q15_t)0x06AC, (q15_t)0x7FD3, (q15_t)0x067A, (q15_t)0x7FD6, - (q15_t)0x0647, (q15_t)0x7FD8, (q15_t)0x0615, (q15_t)0x7FDA, - (q15_t)0x05E3, (q15_t)0x7FDD, (q15_t)0x05B1, (q15_t)0x7FDF, - (q15_t)0x057F, (q15_t)0x7FE1, (q15_t)0x054C, (q15_t)0x7FE3, - (q15_t)0x051A, (q15_t)0x7FE5, (q15_t)0x04E8, (q15_t)0x7FE7, - (q15_t)0x04B6, (q15_t)0x7FE9, (q15_t)0x0483, (q15_t)0x7FEB, - (q15_t)0x0451, (q15_t)0x7FED, (q15_t)0x041F, (q15_t)0x7FEE, - (q15_t)0x03ED, (q15_t)0x7FF0, (q15_t)0x03BA, (q15_t)0x7FF2, - (q15_t)0x0388, (q15_t)0x7FF3, (q15_t)0x0356, (q15_t)0x7FF4, - (q15_t)0x0324, (q15_t)0x7FF6, (q15_t)0x02F1, (q15_t)0x7FF7, - (q15_t)0x02BF, (q15_t)0x7FF8, (q15_t)0x028D, (q15_t)0x7FF9, - (q15_t)0x025B, (q15_t)0x7FFA, (q15_t)0x0228, (q15_t)0x7FFB, - (q15_t)0x01F6, (q15_t)0x7FFC, (q15_t)0x01C4, (q15_t)0x7FFC, - (q15_t)0x0192, (q15_t)0x7FFD, (q15_t)0x015F, (q15_t)0x7FFE, - (q15_t)0x012D, (q15_t)0x7FFE, (q15_t)0x00FB, (q15_t)0x7FFF, - (q15_t)0x00C9, (q15_t)0x7FFF, (q15_t)0x0096, (q15_t)0x7FFF, - (q15_t)0x0064, (q15_t)0x7FFF, (q15_t)0x0032, (q15_t)0x7FFF, - (q15_t)0x0000, (q15_t)0x7FFF, (q15_t)0xFFCD, (q15_t)0x7FFF, - (q15_t)0xFF9B, (q15_t)0x7FFF, (q15_t)0xFF69, (q15_t)0x7FFF, - (q15_t)0xFF36, (q15_t)0x7FFF, (q15_t)0xFF04, (q15_t)0x7FFF, - (q15_t)0xFED2, (q15_t)0x7FFE, (q15_t)0xFEA0, (q15_t)0x7FFE, - (q15_t)0xFE6D, (q15_t)0x7FFD, (q15_t)0xFE3B, (q15_t)0x7FFC, - (q15_t)0xFE09, (q15_t)0x7FFC, (q15_t)0xFDD7, (q15_t)0x7FFB, - (q15_t)0xFDA4, (q15_t)0x7FFA, (q15_t)0xFD72, (q15_t)0x7FF9, - (q15_t)0xFD40, (q15_t)0x7FF8, (q15_t)0xFD0E, (q15_t)0x7FF7, - (q15_t)0xFCDB, (q15_t)0x7FF6, (q15_t)0xFCA9, (q15_t)0x7FF4, - (q15_t)0xFC77, (q15_t)0x7FF3, (q15_t)0xFC45, (q15_t)0x7FF2, - (q15_t)0xFC12, (q15_t)0x7FF0, (q15_t)0xFBE0, (q15_t)0x7FEE, - (q15_t)0xFBAE, (q15_t)0x7FED, (q15_t)0xFB7C, (q15_t)0x7FEB, - (q15_t)0xFB49, (q15_t)0x7FE9, (q15_t)0xFB17, (q15_t)0x7FE7, - (q15_t)0xFAE5, (q15_t)0x7FE5, (q15_t)0xFAB3, (q15_t)0x7FE3, - (q15_t)0xFA80, (q15_t)0x7FE1, (q15_t)0xFA4E, (q15_t)0x7FDF, - (q15_t)0xFA1C, (q15_t)0x7FDD, (q15_t)0xF9EA, (q15_t)0x7FDA, - (q15_t)0xF9B8, (q15_t)0x7FD8, (q15_t)0xF985, (q15_t)0x7FD6, - (q15_t)0xF953, (q15_t)0x7FD3, (q15_t)0xF921, (q15_t)0x7FD0, - (q15_t)0xF8EF, (q15_t)0x7FCE, (q15_t)0xF8BD, (q15_t)0x7FCB, - (q15_t)0xF88A, (q15_t)0x7FC8, (q15_t)0xF858, (q15_t)0x7FC5, - (q15_t)0xF826, (q15_t)0x7FC2, (q15_t)0xF7F4, (q15_t)0x7FBF, - (q15_t)0xF7C2, (q15_t)0x7FBC, (q15_t)0xF790, (q15_t)0x7FB8, - (q15_t)0xF75D, (q15_t)0x7FB5, (q15_t)0xF72B, (q15_t)0x7FB1, - (q15_t)0xF6F9, (q15_t)0x7FAE, (q15_t)0xF6C7, (q15_t)0x7FAA, - (q15_t)0xF695, (q15_t)0x7FA7, (q15_t)0xF663, (q15_t)0x7FA3, - (q15_t)0xF631, (q15_t)0x7F9F, (q15_t)0xF5FF, (q15_t)0x7F9B, - (q15_t)0xF5CC, (q15_t)0x7F97, (q15_t)0xF59A, (q15_t)0x7F93, - (q15_t)0xF568, (q15_t)0x7F8F, (q15_t)0xF536, (q15_t)0x7F8B, - (q15_t)0xF504, (q15_t)0x7F87, (q15_t)0xF4D2, (q15_t)0x7F82, - (q15_t)0xF4A0, (q15_t)0x7F7E, (q15_t)0xF46E, (q15_t)0x7F79, - (q15_t)0xF43C, (q15_t)0x7F75, (q15_t)0xF40A, (q15_t)0x7F70, - (q15_t)0xF3D8, (q15_t)0x7F6B, (q15_t)0xF3A6, (q15_t)0x7F67, - (q15_t)0xF374, (q15_t)0x7F62, (q15_t)0xF342, (q15_t)0x7F5D, - (q15_t)0xF310, (q15_t)0x7F58, (q15_t)0xF2DE, (q15_t)0x7F53, - (q15_t)0xF2AC, (q15_t)0x7F4D, (q15_t)0xF27A, (q15_t)0x7F48, - (q15_t)0xF248, (q15_t)0x7F43, (q15_t)0xF216, (q15_t)0x7F3D, - (q15_t)0xF1E4, (q15_t)0x7F38, (q15_t)0xF1B2, (q15_t)0x7F32, - (q15_t)0xF180, (q15_t)0x7F2D, (q15_t)0xF14E, (q15_t)0x7F27, - (q15_t)0xF11C, (q15_t)0x7F21, (q15_t)0xF0EA, (q15_t)0x7F1B, - (q15_t)0xF0B8, (q15_t)0x7F15, (q15_t)0xF086, (q15_t)0x7F0F, - (q15_t)0xF054, (q15_t)0x7F09, (q15_t)0xF022, (q15_t)0x7F03, - (q15_t)0xEFF1, (q15_t)0x7EFD, (q15_t)0xEFBF, (q15_t)0x7EF6, - (q15_t)0xEF8D, (q15_t)0x7EF0, (q15_t)0xEF5B, (q15_t)0x7EE9, - (q15_t)0xEF29, (q15_t)0x7EE3, (q15_t)0xEEF7, (q15_t)0x7EDC, - (q15_t)0xEEC6, (q15_t)0x7ED5, (q15_t)0xEE94, (q15_t)0x7ECF, - (q15_t)0xEE62, (q15_t)0x7EC8, (q15_t)0xEE30, (q15_t)0x7EC1, - (q15_t)0xEDFE, (q15_t)0x7EBA, (q15_t)0xEDCD, (q15_t)0x7EB3, - (q15_t)0xED9B, (q15_t)0x7EAB, (q15_t)0xED69, (q15_t)0x7EA4, - (q15_t)0xED37, (q15_t)0x7E9D, (q15_t)0xED06, (q15_t)0x7E95, - (q15_t)0xECD4, (q15_t)0x7E8E, (q15_t)0xECA2, (q15_t)0x7E86, - (q15_t)0xEC71, (q15_t)0x7E7F, (q15_t)0xEC3F, (q15_t)0x7E77, - (q15_t)0xEC0D, (q15_t)0x7E6F, (q15_t)0xEBDC, (q15_t)0x7E67, - (q15_t)0xEBAA, (q15_t)0x7E5F, (q15_t)0xEB78, (q15_t)0x7E57, - (q15_t)0xEB47, (q15_t)0x7E4F, (q15_t)0xEB15, (q15_t)0x7E47, - (q15_t)0xEAE4, (q15_t)0x7E3F, (q15_t)0xEAB2, (q15_t)0x7E37, - (q15_t)0xEA80, (q15_t)0x7E2E, (q15_t)0xEA4F, (q15_t)0x7E26, - (q15_t)0xEA1D, (q15_t)0x7E1D, (q15_t)0xE9EC, (q15_t)0x7E14, - (q15_t)0xE9BA, (q15_t)0x7E0C, (q15_t)0xE989, (q15_t)0x7E03, - (q15_t)0xE957, (q15_t)0x7DFA, (q15_t)0xE926, (q15_t)0x7DF1, - (q15_t)0xE8F5, (q15_t)0x7DE8, (q15_t)0xE8C3, (q15_t)0x7DDF, - (q15_t)0xE892, (q15_t)0x7DD6, (q15_t)0xE860, (q15_t)0x7DCD, - (q15_t)0xE82F, (q15_t)0x7DC3, (q15_t)0xE7FD, (q15_t)0x7DBA, - (q15_t)0xE7CC, (q15_t)0x7DB0, (q15_t)0xE79B, (q15_t)0x7DA7, - (q15_t)0xE769, (q15_t)0x7D9D, (q15_t)0xE738, (q15_t)0x7D94, - (q15_t)0xE707, (q15_t)0x7D8A, (q15_t)0xE6D5, (q15_t)0x7D80, - (q15_t)0xE6A4, (q15_t)0x7D76, (q15_t)0xE673, (q15_t)0x7D6C, - (q15_t)0xE642, (q15_t)0x7D62, (q15_t)0xE610, (q15_t)0x7D58, - (q15_t)0xE5DF, (q15_t)0x7D4E, (q15_t)0xE5AE, (q15_t)0x7D43, - (q15_t)0xE57D, (q15_t)0x7D39, (q15_t)0xE54C, (q15_t)0x7D2F, - (q15_t)0xE51B, (q15_t)0x7D24, (q15_t)0xE4E9, (q15_t)0x7D19, - (q15_t)0xE4B8, (q15_t)0x7D0F, (q15_t)0xE487, (q15_t)0x7D04, - (q15_t)0xE456, (q15_t)0x7CF9, (q15_t)0xE425, (q15_t)0x7CEE, - (q15_t)0xE3F4, (q15_t)0x7CE3, (q15_t)0xE3C3, (q15_t)0x7CD8, - (q15_t)0xE392, (q15_t)0x7CCD, (q15_t)0xE361, (q15_t)0x7CC2, - (q15_t)0xE330, (q15_t)0x7CB7, (q15_t)0xE2FF, (q15_t)0x7CAB, - (q15_t)0xE2CE, (q15_t)0x7CA0, (q15_t)0xE29D, (q15_t)0x7C94, - (q15_t)0xE26C, (q15_t)0x7C89, (q15_t)0xE23B, (q15_t)0x7C7D, - (q15_t)0xE20A, (q15_t)0x7C71, (q15_t)0xE1DA, (q15_t)0x7C66, - (q15_t)0xE1A9, (q15_t)0x7C5A, (q15_t)0xE178, (q15_t)0x7C4E, - (q15_t)0xE147, (q15_t)0x7C42, (q15_t)0xE116, (q15_t)0x7C36, - (q15_t)0xE0E6, (q15_t)0x7C29, (q15_t)0xE0B5, (q15_t)0x7C1D, - (q15_t)0xE084, (q15_t)0x7C11, (q15_t)0xE053, (q15_t)0x7C05, - (q15_t)0xE023, (q15_t)0x7BF8, (q15_t)0xDFF2, (q15_t)0x7BEB, - (q15_t)0xDFC1, (q15_t)0x7BDF, (q15_t)0xDF91, (q15_t)0x7BD2, - (q15_t)0xDF60, (q15_t)0x7BC5, (q15_t)0xDF2F, (q15_t)0x7BB9, - (q15_t)0xDEFF, (q15_t)0x7BAC, (q15_t)0xDECE, (q15_t)0x7B9F, - (q15_t)0xDE9E, (q15_t)0x7B92, (q15_t)0xDE6D, (q15_t)0x7B84, - (q15_t)0xDE3D, (q15_t)0x7B77, (q15_t)0xDE0C, (q15_t)0x7B6A, - (q15_t)0xDDDC, (q15_t)0x7B5D, (q15_t)0xDDAB, (q15_t)0x7B4F, - (q15_t)0xDD7B, (q15_t)0x7B42, (q15_t)0xDD4B, (q15_t)0x7B34, - (q15_t)0xDD1A, (q15_t)0x7B26, (q15_t)0xDCEA, (q15_t)0x7B19, - (q15_t)0xDCBA, (q15_t)0x7B0B, (q15_t)0xDC89, (q15_t)0x7AFD, - (q15_t)0xDC59, (q15_t)0x7AEF, (q15_t)0xDC29, (q15_t)0x7AE1, - (q15_t)0xDBF8, (q15_t)0x7AD3, (q15_t)0xDBC8, (q15_t)0x7AC5, - (q15_t)0xDB98, (q15_t)0x7AB6, (q15_t)0xDB68, (q15_t)0x7AA8, - (q15_t)0xDB38, (q15_t)0x7A9A, (q15_t)0xDB08, (q15_t)0x7A8B, - (q15_t)0xDAD7, (q15_t)0x7A7D, (q15_t)0xDAA7, (q15_t)0x7A6E, - (q15_t)0xDA77, (q15_t)0x7A5F, (q15_t)0xDA47, (q15_t)0x7A50, - (q15_t)0xDA17, (q15_t)0x7A42, (q15_t)0xD9E7, (q15_t)0x7A33, - (q15_t)0xD9B7, (q15_t)0x7A24, (q15_t)0xD987, (q15_t)0x7A15, - (q15_t)0xD957, (q15_t)0x7A05, (q15_t)0xD927, (q15_t)0x79F6, - (q15_t)0xD8F8, (q15_t)0x79E7, (q15_t)0xD8C8, (q15_t)0x79D8, - (q15_t)0xD898, (q15_t)0x79C8, (q15_t)0xD868, (q15_t)0x79B9, - (q15_t)0xD838, (q15_t)0x79A9, (q15_t)0xD809, (q15_t)0x7999, - (q15_t)0xD7D9, (q15_t)0x798A, (q15_t)0xD7A9, (q15_t)0x797A, - (q15_t)0xD779, (q15_t)0x796A, (q15_t)0xD74A, (q15_t)0x795A, - (q15_t)0xD71A, (q15_t)0x794A, (q15_t)0xD6EA, (q15_t)0x793A, - (q15_t)0xD6BB, (q15_t)0x792A, (q15_t)0xD68B, (q15_t)0x7919, - (q15_t)0xD65C, (q15_t)0x7909, (q15_t)0xD62C, (q15_t)0x78F9, - (q15_t)0xD5FD, (q15_t)0x78E8, (q15_t)0xD5CD, (q15_t)0x78D8, - (q15_t)0xD59E, (q15_t)0x78C7, (q15_t)0xD56E, (q15_t)0x78B6, - (q15_t)0xD53F, (q15_t)0x78A6, (q15_t)0xD510, (q15_t)0x7895, - (q15_t)0xD4E0, (q15_t)0x7884, (q15_t)0xD4B1, (q15_t)0x7873, - (q15_t)0xD482, (q15_t)0x7862, (q15_t)0xD452, (q15_t)0x7851, - (q15_t)0xD423, (q15_t)0x7840, (q15_t)0xD3F4, (q15_t)0x782E, - (q15_t)0xD3C5, (q15_t)0x781D, (q15_t)0xD396, (q15_t)0x780C, - (q15_t)0xD367, (q15_t)0x77FA, (q15_t)0xD337, (q15_t)0x77E9, - (q15_t)0xD308, (q15_t)0x77D7, (q15_t)0xD2D9, (q15_t)0x77C5, - (q15_t)0xD2AA, (q15_t)0x77B4, (q15_t)0xD27B, (q15_t)0x77A2, - (q15_t)0xD24C, (q15_t)0x7790, (q15_t)0xD21D, (q15_t)0x777E, - (q15_t)0xD1EE, (q15_t)0x776C, (q15_t)0xD1C0, (q15_t)0x775A, - (q15_t)0xD191, (q15_t)0x7747, (q15_t)0xD162, (q15_t)0x7735, - (q15_t)0xD133, (q15_t)0x7723, (q15_t)0xD104, (q15_t)0x7710, - (q15_t)0xD0D6, (q15_t)0x76FE, (q15_t)0xD0A7, (q15_t)0x76EB, - (q15_t)0xD078, (q15_t)0x76D9, (q15_t)0xD04A, (q15_t)0x76C6, - (q15_t)0xD01B, (q15_t)0x76B3, (q15_t)0xCFEC, (q15_t)0x76A0, - (q15_t)0xCFBE, (q15_t)0x768E, (q15_t)0xCF8F, (q15_t)0x767B, - (q15_t)0xCF61, (q15_t)0x7668, (q15_t)0xCF32, (q15_t)0x7654, - (q15_t)0xCF04, (q15_t)0x7641, (q15_t)0xCED5, (q15_t)0x762E, - (q15_t)0xCEA7, (q15_t)0x761B, (q15_t)0xCE79, (q15_t)0x7607, - (q15_t)0xCE4A, (q15_t)0x75F4, (q15_t)0xCE1C, (q15_t)0x75E0, - (q15_t)0xCDEE, (q15_t)0x75CC, (q15_t)0xCDBF, (q15_t)0x75B9, - (q15_t)0xCD91, (q15_t)0x75A5, (q15_t)0xCD63, (q15_t)0x7591, - (q15_t)0xCD35, (q15_t)0x757D, (q15_t)0xCD07, (q15_t)0x7569, - (q15_t)0xCCD9, (q15_t)0x7555, (q15_t)0xCCAB, (q15_t)0x7541, - (q15_t)0xCC7D, (q15_t)0x752D, (q15_t)0xCC4F, (q15_t)0x7519, - (q15_t)0xCC21, (q15_t)0x7504, (q15_t)0xCBF3, (q15_t)0x74F0, - (q15_t)0xCBC5, (q15_t)0x74DB, (q15_t)0xCB97, (q15_t)0x74C7, - (q15_t)0xCB69, (q15_t)0x74B2, (q15_t)0xCB3B, (q15_t)0x749E, - (q15_t)0xCB0D, (q15_t)0x7489, (q15_t)0xCAE0, (q15_t)0x7474, - (q15_t)0xCAB2, (q15_t)0x745F, (q15_t)0xCA84, (q15_t)0x744A, - (q15_t)0xCA57, (q15_t)0x7435, (q15_t)0xCA29, (q15_t)0x7420, - (q15_t)0xC9FB, (q15_t)0x740B, (q15_t)0xC9CE, (q15_t)0x73F6, - (q15_t)0xC9A0, (q15_t)0x73E0, (q15_t)0xC973, (q15_t)0x73CB, - (q15_t)0xC945, (q15_t)0x73B5, (q15_t)0xC918, (q15_t)0x73A0, - (q15_t)0xC8EB, (q15_t)0x738A, (q15_t)0xC8BD, (q15_t)0x7375, - (q15_t)0xC890, (q15_t)0x735F, (q15_t)0xC863, (q15_t)0x7349, - (q15_t)0xC835, (q15_t)0x7333, (q15_t)0xC808, (q15_t)0x731D, - (q15_t)0xC7DB, (q15_t)0x7307, (q15_t)0xC7AE, (q15_t)0x72F1, - (q15_t)0xC781, (q15_t)0x72DB, (q15_t)0xC754, (q15_t)0x72C5, - (q15_t)0xC727, (q15_t)0x72AF, (q15_t)0xC6F9, (q15_t)0x7298, - (q15_t)0xC6CD, (q15_t)0x7282, (q15_t)0xC6A0, (q15_t)0x726B, - (q15_t)0xC673, (q15_t)0x7255, (q15_t)0xC646, (q15_t)0x723E, - (q15_t)0xC619, (q15_t)0x7227, (q15_t)0xC5EC, (q15_t)0x7211, - (q15_t)0xC5BF, (q15_t)0x71FA, (q15_t)0xC593, (q15_t)0x71E3, - (q15_t)0xC566, (q15_t)0x71CC, (q15_t)0xC539, (q15_t)0x71B5, - (q15_t)0xC50D, (q15_t)0x719E, (q15_t)0xC4E0, (q15_t)0x7186, - (q15_t)0xC4B3, (q15_t)0x716F, (q15_t)0xC487, (q15_t)0x7158, - (q15_t)0xC45A, (q15_t)0x7141, (q15_t)0xC42E, (q15_t)0x7129, - (q15_t)0xC402, (q15_t)0x7112, (q15_t)0xC3D5, (q15_t)0x70FA, - (q15_t)0xC3A9, (q15_t)0x70E2, (q15_t)0xC37C, (q15_t)0x70CB, - (q15_t)0xC350, (q15_t)0x70B3, (q15_t)0xC324, (q15_t)0x709B, - (q15_t)0xC2F8, (q15_t)0x7083, (q15_t)0xC2CC, (q15_t)0x706B, - (q15_t)0xC29F, (q15_t)0x7053, (q15_t)0xC273, (q15_t)0x703B, - (q15_t)0xC247, (q15_t)0x7023, (q15_t)0xC21B, (q15_t)0x700A, - (q15_t)0xC1EF, (q15_t)0x6FF2, (q15_t)0xC1C3, (q15_t)0x6FDA, - (q15_t)0xC197, (q15_t)0x6FC1, (q15_t)0xC16C, (q15_t)0x6FA9, - (q15_t)0xC140, (q15_t)0x6F90, (q15_t)0xC114, (q15_t)0x6F77, - (q15_t)0xC0E8, (q15_t)0x6F5F, (q15_t)0xC0BC, (q15_t)0x6F46, - (q15_t)0xC091, (q15_t)0x6F2D, (q15_t)0xC065, (q15_t)0x6F14, - (q15_t)0xC03A, (q15_t)0x6EFB, (q15_t)0xC00E, (q15_t)0x6EE2, - (q15_t)0xBFE2, (q15_t)0x6EC9, (q15_t)0xBFB7, (q15_t)0x6EAF, - (q15_t)0xBF8C, (q15_t)0x6E96, (q15_t)0xBF60, (q15_t)0x6E7D, - (q15_t)0xBF35, (q15_t)0x6E63, (q15_t)0xBF09, (q15_t)0x6E4A, - (q15_t)0xBEDE, (q15_t)0x6E30, (q15_t)0xBEB3, (q15_t)0x6E17, - (q15_t)0xBE88, (q15_t)0x6DFD, (q15_t)0xBE5D, (q15_t)0x6DE3, - (q15_t)0xBE31, (q15_t)0x6DCA, (q15_t)0xBE06, (q15_t)0x6DB0, - (q15_t)0xBDDB, (q15_t)0x6D96, (q15_t)0xBDB0, (q15_t)0x6D7C, - (q15_t)0xBD85, (q15_t)0x6D62, (q15_t)0xBD5A, (q15_t)0x6D48, - (q15_t)0xBD2F, (q15_t)0x6D2D, (q15_t)0xBD05, (q15_t)0x6D13, - (q15_t)0xBCDA, (q15_t)0x6CF9, (q15_t)0xBCAF, (q15_t)0x6CDE, - (q15_t)0xBC84, (q15_t)0x6CC4, (q15_t)0xBC5A, (q15_t)0x6CA9, - (q15_t)0xBC2F, (q15_t)0x6C8F, (q15_t)0xBC04, (q15_t)0x6C74, - (q15_t)0xBBDA, (q15_t)0x6C59, (q15_t)0xBBAF, (q15_t)0x6C3F, - (q15_t)0xBB85, (q15_t)0x6C24, (q15_t)0xBB5A, (q15_t)0x6C09, - (q15_t)0xBB30, (q15_t)0x6BEE, (q15_t)0xBB05, (q15_t)0x6BD3, - (q15_t)0xBADB, (q15_t)0x6BB8, (q15_t)0xBAB1, (q15_t)0x6B9C, - (q15_t)0xBA87, (q15_t)0x6B81, (q15_t)0xBA5C, (q15_t)0x6B66, - (q15_t)0xBA32, (q15_t)0x6B4A, (q15_t)0xBA08, (q15_t)0x6B2F, - (q15_t)0xB9DE, (q15_t)0x6B13, (q15_t)0xB9B4, (q15_t)0x6AF8, - (q15_t)0xB98A, (q15_t)0x6ADC, (q15_t)0xB960, (q15_t)0x6AC1, - (q15_t)0xB936, (q15_t)0x6AA5, (q15_t)0xB90C, (q15_t)0x6A89, - (q15_t)0xB8E3, (q15_t)0x6A6D, (q15_t)0xB8B9, (q15_t)0x6A51, - (q15_t)0xB88F, (q15_t)0x6A35, (q15_t)0xB865, (q15_t)0x6A19, - (q15_t)0xB83C, (q15_t)0x69FD, (q15_t)0xB812, (q15_t)0x69E1, - (q15_t)0xB7E9, (q15_t)0x69C4, (q15_t)0xB7BF, (q15_t)0x69A8, - (q15_t)0xB796, (q15_t)0x698C, (q15_t)0xB76C, (q15_t)0x696F, - (q15_t)0xB743, (q15_t)0x6953, (q15_t)0xB719, (q15_t)0x6936, - (q15_t)0xB6F0, (q15_t)0x6919, (q15_t)0xB6C7, (q15_t)0x68FD, - (q15_t)0xB69E, (q15_t)0x68E0, (q15_t)0xB675, (q15_t)0x68C3, - (q15_t)0xB64B, (q15_t)0x68A6, (q15_t)0xB622, (q15_t)0x6889, - (q15_t)0xB5F9, (q15_t)0x686C, (q15_t)0xB5D0, (q15_t)0x684F, - (q15_t)0xB5A7, (q15_t)0x6832, (q15_t)0xB57E, (q15_t)0x6815, - (q15_t)0xB556, (q15_t)0x67F7, (q15_t)0xB52D, (q15_t)0x67DA, - (q15_t)0xB504, (q15_t)0x67BD, (q15_t)0xB4DB, (q15_t)0x679F, - (q15_t)0xB4B3, (q15_t)0x6782, (q15_t)0xB48A, (q15_t)0x6764, - (q15_t)0xB461, (q15_t)0x6746, (q15_t)0xB439, (q15_t)0x6729, - (q15_t)0xB410, (q15_t)0x670B, (q15_t)0xB3E8, (q15_t)0x66ED, - (q15_t)0xB3C0, (q15_t)0x66CF, (q15_t)0xB397, (q15_t)0x66B1, - (q15_t)0xB36F, (q15_t)0x6693, (q15_t)0xB347, (q15_t)0x6675, - (q15_t)0xB31E, (q15_t)0x6657, (q15_t)0xB2F6, (q15_t)0x6639, - (q15_t)0xB2CE, (q15_t)0x661A, (q15_t)0xB2A6, (q15_t)0x65FC, - (q15_t)0xB27E, (q15_t)0x65DD, (q15_t)0xB256, (q15_t)0x65BF, - (q15_t)0xB22E, (q15_t)0x65A0, (q15_t)0xB206, (q15_t)0x6582, - (q15_t)0xB1DE, (q15_t)0x6563, (q15_t)0xB1B7, (q15_t)0x6545, - (q15_t)0xB18F, (q15_t)0x6526, (q15_t)0xB167, (q15_t)0x6507, - (q15_t)0xB140, (q15_t)0x64E8, (q15_t)0xB118, (q15_t)0x64C9, - (q15_t)0xB0F0, (q15_t)0x64AA, (q15_t)0xB0C9, (q15_t)0x648B, - (q15_t)0xB0A1, (q15_t)0x646C, (q15_t)0xB07A, (q15_t)0x644D, - (q15_t)0xB053, (q15_t)0x642D, (q15_t)0xB02B, (q15_t)0x640E, - (q15_t)0xB004, (q15_t)0x63EF, (q15_t)0xAFDD, (q15_t)0x63CF, - (q15_t)0xAFB6, (q15_t)0x63B0, (q15_t)0xAF8F, (q15_t)0x6390, - (q15_t)0xAF68, (q15_t)0x6371, (q15_t)0xAF40, (q15_t)0x6351, - (q15_t)0xAF1A, (q15_t)0x6331, (q15_t)0xAEF3, (q15_t)0x6311, - (q15_t)0xAECC, (q15_t)0x62F2, (q15_t)0xAEA5, (q15_t)0x62D2, - (q15_t)0xAE7E, (q15_t)0x62B2, (q15_t)0xAE57, (q15_t)0x6292, - (q15_t)0xAE31, (q15_t)0x6271, (q15_t)0xAE0A, (q15_t)0x6251, - (q15_t)0xADE3, (q15_t)0x6231, (q15_t)0xADBD, (q15_t)0x6211, - (q15_t)0xAD96, (q15_t)0x61F1, (q15_t)0xAD70, (q15_t)0x61D0, - (q15_t)0xAD4A, (q15_t)0x61B0, (q15_t)0xAD23, (q15_t)0x618F, - (q15_t)0xACFD, (q15_t)0x616F, (q15_t)0xACD7, (q15_t)0x614E, - (q15_t)0xACB1, (q15_t)0x612D, (q15_t)0xAC8A, (q15_t)0x610D, - (q15_t)0xAC64, (q15_t)0x60EC, (q15_t)0xAC3E, (q15_t)0x60CB, - (q15_t)0xAC18, (q15_t)0x60AA, (q15_t)0xABF2, (q15_t)0x6089, - (q15_t)0xABCC, (q15_t)0x6068, (q15_t)0xABA7, (q15_t)0x6047, - (q15_t)0xAB81, (q15_t)0x6026, (q15_t)0xAB5B, (q15_t)0x6004, - (q15_t)0xAB35, (q15_t)0x5FE3, (q15_t)0xAB10, (q15_t)0x5FC2, - (q15_t)0xAAEA, (q15_t)0x5FA0, (q15_t)0xAAC5, (q15_t)0x5F7F, - (q15_t)0xAA9F, (q15_t)0x5F5E, (q15_t)0xAA7A, (q15_t)0x5F3C, - (q15_t)0xAA54, (q15_t)0x5F1A, (q15_t)0xAA2F, (q15_t)0x5EF9, - (q15_t)0xAA0A, (q15_t)0x5ED7, (q15_t)0xA9E5, (q15_t)0x5EB5, - (q15_t)0xA9BF, (q15_t)0x5E93, (q15_t)0xA99A, (q15_t)0x5E71, - (q15_t)0xA975, (q15_t)0x5E50, (q15_t)0xA950, (q15_t)0x5E2D, - (q15_t)0xA92B, (q15_t)0x5E0B, (q15_t)0xA906, (q15_t)0x5DE9, - (q15_t)0xA8E2, (q15_t)0x5DC7, (q15_t)0xA8BD, (q15_t)0x5DA5, - (q15_t)0xA898, (q15_t)0x5D83, (q15_t)0xA873, (q15_t)0x5D60, - (q15_t)0xA84F, (q15_t)0x5D3E, (q15_t)0xA82A, (q15_t)0x5D1B, - (q15_t)0xA806, (q15_t)0x5CF9, (q15_t)0xA7E1, (q15_t)0x5CD6, - (q15_t)0xA7BD, (q15_t)0x5CB4, (q15_t)0xA798, (q15_t)0x5C91, - (q15_t)0xA774, (q15_t)0x5C6E, (q15_t)0xA750, (q15_t)0x5C4B, - (q15_t)0xA72B, (q15_t)0x5C29, (q15_t)0xA707, (q15_t)0x5C06, - (q15_t)0xA6E3, (q15_t)0x5BE3, (q15_t)0xA6BF, (q15_t)0x5BC0, - (q15_t)0xA69B, (q15_t)0x5B9D, (q15_t)0xA677, (q15_t)0x5B79, - (q15_t)0xA653, (q15_t)0x5B56, (q15_t)0xA62F, (q15_t)0x5B33, - (q15_t)0xA60C, (q15_t)0x5B10, (q15_t)0xA5E8, (q15_t)0x5AEC, - (q15_t)0xA5C4, (q15_t)0x5AC9, (q15_t)0xA5A1, (q15_t)0x5AA5, - (q15_t)0xA57D, (q15_t)0x5A82, (q15_t)0xA55A, (q15_t)0x5A5E, - (q15_t)0xA536, (q15_t)0x5A3B, (q15_t)0xA513, (q15_t)0x5A17, - (q15_t)0xA4EF, (q15_t)0x59F3, (q15_t)0xA4CC, (q15_t)0x59D0, - (q15_t)0xA4A9, (q15_t)0x59AC, (q15_t)0xA486, (q15_t)0x5988, - (q15_t)0xA462, (q15_t)0x5964, (q15_t)0xA43F, (q15_t)0x5940, - (q15_t)0xA41C, (q15_t)0x591C, (q15_t)0xA3F9, (q15_t)0x58F8, - (q15_t)0xA3D6, (q15_t)0x58D4, (q15_t)0xA3B4, (q15_t)0x58AF, - (q15_t)0xA391, (q15_t)0x588B, (q15_t)0xA36E, (q15_t)0x5867, - (q15_t)0xA34B, (q15_t)0x5842, (q15_t)0xA329, (q15_t)0x581E, - (q15_t)0xA306, (q15_t)0x57F9, (q15_t)0xA2E4, (q15_t)0x57D5, - (q15_t)0xA2C1, (q15_t)0x57B0, (q15_t)0xA29F, (q15_t)0x578C, - (q15_t)0xA27C, (q15_t)0x5767, (q15_t)0xA25A, (q15_t)0x5742, - (q15_t)0xA238, (q15_t)0x571D, (q15_t)0xA216, (q15_t)0x56F9, - (q15_t)0xA1F4, (q15_t)0x56D4, (q15_t)0xA1D2, (q15_t)0x56AF, - (q15_t)0xA1AF, (q15_t)0x568A, (q15_t)0xA18E, (q15_t)0x5665, - (q15_t)0xA16C, (q15_t)0x5640, (q15_t)0xA14A, (q15_t)0x561A, - (q15_t)0xA128, (q15_t)0x55F5, (q15_t)0xA106, (q15_t)0x55D0, - (q15_t)0xA0E5, (q15_t)0x55AB, (q15_t)0xA0C3, (q15_t)0x5585, - (q15_t)0xA0A1, (q15_t)0x5560, (q15_t)0xA080, (q15_t)0x553A, - (q15_t)0xA05F, (q15_t)0x5515, (q15_t)0xA03D, (q15_t)0x54EF, - (q15_t)0xA01C, (q15_t)0x54CA, (q15_t)0x9FFB, (q15_t)0x54A4, - (q15_t)0x9FD9, (q15_t)0x547E, (q15_t)0x9FB8, (q15_t)0x5458, - (q15_t)0x9F97, (q15_t)0x5433, (q15_t)0x9F76, (q15_t)0x540D, - (q15_t)0x9F55, (q15_t)0x53E7, (q15_t)0x9F34, (q15_t)0x53C1, - (q15_t)0x9F13, (q15_t)0x539B, (q15_t)0x9EF2, (q15_t)0x5375, - (q15_t)0x9ED2, (q15_t)0x534E, (q15_t)0x9EB1, (q15_t)0x5328, - (q15_t)0x9E90, (q15_t)0x5302, (q15_t)0x9E70, (q15_t)0x52DC, - (q15_t)0x9E4F, (q15_t)0x52B5, (q15_t)0x9E2F, (q15_t)0x528F, - (q15_t)0x9E0E, (q15_t)0x5269, (q15_t)0x9DEE, (q15_t)0x5242, - (q15_t)0x9DCE, (q15_t)0x521C, (q15_t)0x9DAE, (q15_t)0x51F5, - (q15_t)0x9D8E, (q15_t)0x51CE, (q15_t)0x9D6D, (q15_t)0x51A8, - (q15_t)0x9D4D, (q15_t)0x5181, (q15_t)0x9D2D, (q15_t)0x515A, - (q15_t)0x9D0D, (q15_t)0x5133, (q15_t)0x9CEE, (q15_t)0x510C, - (q15_t)0x9CCE, (q15_t)0x50E5, (q15_t)0x9CAE, (q15_t)0x50BF, - (q15_t)0x9C8E, (q15_t)0x5097, (q15_t)0x9C6F, (q15_t)0x5070, - (q15_t)0x9C4F, (q15_t)0x5049, (q15_t)0x9C30, (q15_t)0x5022, - (q15_t)0x9C10, (q15_t)0x4FFB, (q15_t)0x9BF1, (q15_t)0x4FD4, - (q15_t)0x9BD2, (q15_t)0x4FAC, (q15_t)0x9BB2, (q15_t)0x4F85, - (q15_t)0x9B93, (q15_t)0x4F5E, (q15_t)0x9B74, (q15_t)0x4F36, - (q15_t)0x9B55, (q15_t)0x4F0F, (q15_t)0x9B36, (q15_t)0x4EE7, - (q15_t)0x9B17, (q15_t)0x4EBF, (q15_t)0x9AF8, (q15_t)0x4E98, - (q15_t)0x9AD9, (q15_t)0x4E70, (q15_t)0x9ABA, (q15_t)0x4E48, - (q15_t)0x9A9C, (q15_t)0x4E21, (q15_t)0x9A7D, (q15_t)0x4DF9, - (q15_t)0x9A5F, (q15_t)0x4DD1, (q15_t)0x9A40, (q15_t)0x4DA9, - (q15_t)0x9A22, (q15_t)0x4D81, (q15_t)0x9A03, (q15_t)0x4D59, - (q15_t)0x99E5, (q15_t)0x4D31, (q15_t)0x99C6, (q15_t)0x4D09, - (q15_t)0x99A8, (q15_t)0x4CE1, (q15_t)0x998A, (q15_t)0x4CB8, - (q15_t)0x996C, (q15_t)0x4C90, (q15_t)0x994E, (q15_t)0x4C68, - (q15_t)0x9930, (q15_t)0x4C3F, (q15_t)0x9912, (q15_t)0x4C17, - (q15_t)0x98F4, (q15_t)0x4BEF, (q15_t)0x98D6, (q15_t)0x4BC6, - (q15_t)0x98B9, (q15_t)0x4B9E, (q15_t)0x989B, (q15_t)0x4B75, - (q15_t)0x987D, (q15_t)0x4B4C, (q15_t)0x9860, (q15_t)0x4B24, - (q15_t)0x9842, (q15_t)0x4AFB, (q15_t)0x9825, (q15_t)0x4AD2, - (q15_t)0x9808, (q15_t)0x4AA9, (q15_t)0x97EA, (q15_t)0x4A81, - (q15_t)0x97CD, (q15_t)0x4A58, (q15_t)0x97B0, (q15_t)0x4A2F, - (q15_t)0x9793, (q15_t)0x4A06, (q15_t)0x9776, (q15_t)0x49DD, - (q15_t)0x9759, (q15_t)0x49B4, (q15_t)0x973C, (q15_t)0x498A, - (q15_t)0x971F, (q15_t)0x4961, (q15_t)0x9702, (q15_t)0x4938, - (q15_t)0x96E6, (q15_t)0x490F, (q15_t)0x96C9, (q15_t)0x48E6, - (q15_t)0x96AC, (q15_t)0x48BC, (q15_t)0x9690, (q15_t)0x4893, - (q15_t)0x9673, (q15_t)0x4869, (q15_t)0x9657, (q15_t)0x4840, - (q15_t)0x963B, (q15_t)0x4816, (q15_t)0x961E, (q15_t)0x47ED, - (q15_t)0x9602, (q15_t)0x47C3, (q15_t)0x95E6, (q15_t)0x479A, - (q15_t)0x95CA, (q15_t)0x4770, (q15_t)0x95AE, (q15_t)0x4746, - (q15_t)0x9592, (q15_t)0x471C, (q15_t)0x9576, (q15_t)0x46F3, - (q15_t)0x955A, (q15_t)0x46C9, (q15_t)0x953E, (q15_t)0x469F, - (q15_t)0x9523, (q15_t)0x4675, (q15_t)0x9507, (q15_t)0x464B, - (q15_t)0x94EC, (q15_t)0x4621, (q15_t)0x94D0, (q15_t)0x45F7, - (q15_t)0x94B5, (q15_t)0x45CD, (q15_t)0x9499, (q15_t)0x45A3, - (q15_t)0x947E, (q15_t)0x4578, (q15_t)0x9463, (q15_t)0x454E, - (q15_t)0x9447, (q15_t)0x4524, (q15_t)0x942C, (q15_t)0x44FA, - (q15_t)0x9411, (q15_t)0x44CF, (q15_t)0x93F6, (q15_t)0x44A5, - (q15_t)0x93DB, (q15_t)0x447A, (q15_t)0x93C0, (q15_t)0x4450, - (q15_t)0x93A6, (q15_t)0x4425, (q15_t)0x938B, (q15_t)0x43FB, - (q15_t)0x9370, (q15_t)0x43D0, (q15_t)0x9356, (q15_t)0x43A5, - (q15_t)0x933B, (q15_t)0x437B, (q15_t)0x9321, (q15_t)0x4350, - (q15_t)0x9306, (q15_t)0x4325, (q15_t)0x92EC, (q15_t)0x42FA, - (q15_t)0x92D2, (q15_t)0x42D0, (q15_t)0x92B7, (q15_t)0x42A5, - (q15_t)0x929D, (q15_t)0x427A, (q15_t)0x9283, (q15_t)0x424F, - (q15_t)0x9269, (q15_t)0x4224, (q15_t)0x924F, (q15_t)0x41F9, - (q15_t)0x9235, (q15_t)0x41CE, (q15_t)0x921C, (q15_t)0x41A2, - (q15_t)0x9202, (q15_t)0x4177, (q15_t)0x91E8, (q15_t)0x414C, - (q15_t)0x91CF, (q15_t)0x4121, (q15_t)0x91B5, (q15_t)0x40F6, - (q15_t)0x919C, (q15_t)0x40CA, (q15_t)0x9182, (q15_t)0x409F, - (q15_t)0x9169, (q15_t)0x4073, (q15_t)0x9150, (q15_t)0x4048, - (q15_t)0x9136, (q15_t)0x401D, (q15_t)0x911D, (q15_t)0x3FF1, - (q15_t)0x9104, (q15_t)0x3FC5, (q15_t)0x90EB, (q15_t)0x3F9A, - (q15_t)0x90D2, (q15_t)0x3F6E, (q15_t)0x90B9, (q15_t)0x3F43, - (q15_t)0x90A0, (q15_t)0x3F17, (q15_t)0x9088, (q15_t)0x3EEB, - (q15_t)0x906F, (q15_t)0x3EBF, (q15_t)0x9056, (q15_t)0x3E93, - (q15_t)0x903E, (q15_t)0x3E68, (q15_t)0x9025, (q15_t)0x3E3C, - (q15_t)0x900D, (q15_t)0x3E10, (q15_t)0x8FF5, (q15_t)0x3DE4, - (q15_t)0x8FDC, (q15_t)0x3DB8, (q15_t)0x8FC4, (q15_t)0x3D8C, - (q15_t)0x8FAC, (q15_t)0x3D60, (q15_t)0x8F94, (q15_t)0x3D33, - (q15_t)0x8F7C, (q15_t)0x3D07, (q15_t)0x8F64, (q15_t)0x3CDB, - (q15_t)0x8F4C, (q15_t)0x3CAF, (q15_t)0x8F34, (q15_t)0x3C83, - (q15_t)0x8F1D, (q15_t)0x3C56, (q15_t)0x8F05, (q15_t)0x3C2A, - (q15_t)0x8EED, (q15_t)0x3BFD, (q15_t)0x8ED6, (q15_t)0x3BD1, - (q15_t)0x8EBE, (q15_t)0x3BA5, (q15_t)0x8EA7, (q15_t)0x3B78, - (q15_t)0x8E90, (q15_t)0x3B4C, (q15_t)0x8E79, (q15_t)0x3B1F, - (q15_t)0x8E61, (q15_t)0x3AF2, (q15_t)0x8E4A, (q15_t)0x3AC6, - (q15_t)0x8E33, (q15_t)0x3A99, (q15_t)0x8E1C, (q15_t)0x3A6C, - (q15_t)0x8E05, (q15_t)0x3A40, (q15_t)0x8DEE, (q15_t)0x3A13, - (q15_t)0x8DD8, (q15_t)0x39E6, (q15_t)0x8DC1, (q15_t)0x39B9, - (q15_t)0x8DAA, (q15_t)0x398C, (q15_t)0x8D94, (q15_t)0x395F, - (q15_t)0x8D7D, (q15_t)0x3932, (q15_t)0x8D67, (q15_t)0x3906, - (q15_t)0x8D50, (q15_t)0x38D8, (q15_t)0x8D3A, (q15_t)0x38AB, - (q15_t)0x8D24, (q15_t)0x387E, (q15_t)0x8D0E, (q15_t)0x3851, - (q15_t)0x8CF8, (q15_t)0x3824, (q15_t)0x8CE2, (q15_t)0x37F7, - (q15_t)0x8CCC, (q15_t)0x37CA, (q15_t)0x8CB6, (q15_t)0x379C, - (q15_t)0x8CA0, (q15_t)0x376F, (q15_t)0x8C8A, (q15_t)0x3742, - (q15_t)0x8C75, (q15_t)0x3714, (q15_t)0x8C5F, (q15_t)0x36E7, - (q15_t)0x8C4A, (q15_t)0x36BA, (q15_t)0x8C34, (q15_t)0x368C, - (q15_t)0x8C1F, (q15_t)0x365F, (q15_t)0x8C09, (q15_t)0x3631, - (q15_t)0x8BF4, (q15_t)0x3604, (q15_t)0x8BDF, (q15_t)0x35D6, - (q15_t)0x8BCA, (q15_t)0x35A8, (q15_t)0x8BB5, (q15_t)0x357B, - (q15_t)0x8BA0, (q15_t)0x354D, (q15_t)0x8B8B, (q15_t)0x351F, - (q15_t)0x8B76, (q15_t)0x34F2, (q15_t)0x8B61, (q15_t)0x34C4, - (q15_t)0x8B4D, (q15_t)0x3496, (q15_t)0x8B38, (q15_t)0x3468, - (q15_t)0x8B24, (q15_t)0x343A, (q15_t)0x8B0F, (q15_t)0x340C, - (q15_t)0x8AFB, (q15_t)0x33DE, (q15_t)0x8AE6, (q15_t)0x33B0, - (q15_t)0x8AD2, (q15_t)0x3382, (q15_t)0x8ABE, (q15_t)0x3354, - (q15_t)0x8AAA, (q15_t)0x3326, (q15_t)0x8A96, (q15_t)0x32F8, - (q15_t)0x8A82, (q15_t)0x32CA, (q15_t)0x8A6E, (q15_t)0x329C, - (q15_t)0x8A5A, (q15_t)0x326E, (q15_t)0x8A46, (q15_t)0x3240, - (q15_t)0x8A33, (q15_t)0x3211, (q15_t)0x8A1F, (q15_t)0x31E3, - (q15_t)0x8A0B, (q15_t)0x31B5, (q15_t)0x89F8, (q15_t)0x3186, - (q15_t)0x89E4, (q15_t)0x3158, (q15_t)0x89D1, (q15_t)0x312A, - (q15_t)0x89BE, (q15_t)0x30FB, (q15_t)0x89AB, (q15_t)0x30CD, - (q15_t)0x8997, (q15_t)0x309E, (q15_t)0x8984, (q15_t)0x3070, - (q15_t)0x8971, (q15_t)0x3041, (q15_t)0x895F, (q15_t)0x3013, - (q15_t)0x894C, (q15_t)0x2FE4, (q15_t)0x8939, (q15_t)0x2FB5, - (q15_t)0x8926, (q15_t)0x2F87, (q15_t)0x8914, (q15_t)0x2F58, - (q15_t)0x8901, (q15_t)0x2F29, (q15_t)0x88EF, (q15_t)0x2EFB, - (q15_t)0x88DC, (q15_t)0x2ECC, (q15_t)0x88CA, (q15_t)0x2E9D, - (q15_t)0x88B8, (q15_t)0x2E6E, (q15_t)0x88A5, (q15_t)0x2E3F, - (q15_t)0x8893, (q15_t)0x2E11, (q15_t)0x8881, (q15_t)0x2DE2, - (q15_t)0x886F, (q15_t)0x2DB3, (q15_t)0x885D, (q15_t)0x2D84, - (q15_t)0x884B, (q15_t)0x2D55, (q15_t)0x883A, (q15_t)0x2D26, - (q15_t)0x8828, (q15_t)0x2CF7, (q15_t)0x8816, (q15_t)0x2CC8, - (q15_t)0x8805, (q15_t)0x2C98, (q15_t)0x87F3, (q15_t)0x2C69, - (q15_t)0x87E2, (q15_t)0x2C3A, (q15_t)0x87D1, (q15_t)0x2C0B, - (q15_t)0x87BF, (q15_t)0x2BDC, (q15_t)0x87AE, (q15_t)0x2BAD, - (q15_t)0x879D, (q15_t)0x2B7D, (q15_t)0x878C, (q15_t)0x2B4E, - (q15_t)0x877B, (q15_t)0x2B1F, (q15_t)0x876A, (q15_t)0x2AEF, - (q15_t)0x8759, (q15_t)0x2AC0, (q15_t)0x8749, (q15_t)0x2A91, - (q15_t)0x8738, (q15_t)0x2A61, (q15_t)0x8727, (q15_t)0x2A32, - (q15_t)0x8717, (q15_t)0x2A02, (q15_t)0x8706, (q15_t)0x29D3, - (q15_t)0x86F6, (q15_t)0x29A3, (q15_t)0x86E6, (q15_t)0x2974, - (q15_t)0x86D5, (q15_t)0x2944, (q15_t)0x86C5, (q15_t)0x2915, - (q15_t)0x86B5, (q15_t)0x28E5, (q15_t)0x86A5, (q15_t)0x28B5, - (q15_t)0x8695, (q15_t)0x2886, (q15_t)0x8685, (q15_t)0x2856, - (q15_t)0x8675, (q15_t)0x2826, (q15_t)0x8666, (q15_t)0x27F6, - (q15_t)0x8656, (q15_t)0x27C7, (q15_t)0x8646, (q15_t)0x2797, - (q15_t)0x8637, (q15_t)0x2767, (q15_t)0x8627, (q15_t)0x2737, - (q15_t)0x8618, (q15_t)0x2707, (q15_t)0x8609, (q15_t)0x26D8, - (q15_t)0x85FA, (q15_t)0x26A8, (q15_t)0x85EA, (q15_t)0x2678, - (q15_t)0x85DB, (q15_t)0x2648, (q15_t)0x85CC, (q15_t)0x2618, - (q15_t)0x85BD, (q15_t)0x25E8, (q15_t)0x85AF, (q15_t)0x25B8, - (q15_t)0x85A0, (q15_t)0x2588, (q15_t)0x8591, (q15_t)0x2558, - (q15_t)0x8582, (q15_t)0x2528, (q15_t)0x8574, (q15_t)0x24F7, - (q15_t)0x8565, (q15_t)0x24C7, (q15_t)0x8557, (q15_t)0x2497, - (q15_t)0x8549, (q15_t)0x2467, (q15_t)0x853A, (q15_t)0x2437, - (q15_t)0x852C, (q15_t)0x2407, (q15_t)0x851E, (q15_t)0x23D6, - (q15_t)0x8510, (q15_t)0x23A6, (q15_t)0x8502, (q15_t)0x2376, - (q15_t)0x84F4, (q15_t)0x2345, (q15_t)0x84E6, (q15_t)0x2315, - (q15_t)0x84D9, (q15_t)0x22E5, (q15_t)0x84CB, (q15_t)0x22B4, - (q15_t)0x84BD, (q15_t)0x2284, (q15_t)0x84B0, (q15_t)0x2254, - (q15_t)0x84A2, (q15_t)0x2223, (q15_t)0x8495, (q15_t)0x21F3, - (q15_t)0x8488, (q15_t)0x21C2, (q15_t)0x847B, (q15_t)0x2192, - (q15_t)0x846D, (q15_t)0x2161, (q15_t)0x8460, (q15_t)0x2131, - (q15_t)0x8453, (q15_t)0x2100, (q15_t)0x8446, (q15_t)0x20D0, - (q15_t)0x843A, (q15_t)0x209F, (q15_t)0x842D, (q15_t)0x206E, - (q15_t)0x8420, (q15_t)0x203E, (q15_t)0x8414, (q15_t)0x200D, - (q15_t)0x8407, (q15_t)0x1FDC, (q15_t)0x83FA, (q15_t)0x1FAC, - (q15_t)0x83EE, (q15_t)0x1F7B, (q15_t)0x83E2, (q15_t)0x1F4A, - (q15_t)0x83D6, (q15_t)0x1F19, (q15_t)0x83C9, (q15_t)0x1EE9, - (q15_t)0x83BD, (q15_t)0x1EB8, (q15_t)0x83B1, (q15_t)0x1E87, - (q15_t)0x83A5, (q15_t)0x1E56, (q15_t)0x8399, (q15_t)0x1E25, - (q15_t)0x838E, (q15_t)0x1DF5, (q15_t)0x8382, (q15_t)0x1DC4, - (q15_t)0x8376, (q15_t)0x1D93, (q15_t)0x836B, (q15_t)0x1D62, - (q15_t)0x835F, (q15_t)0x1D31, (q15_t)0x8354, (q15_t)0x1D00, - (q15_t)0x8348, (q15_t)0x1CCF, (q15_t)0x833D, (q15_t)0x1C9E, - (q15_t)0x8332, (q15_t)0x1C6D, (q15_t)0x8327, (q15_t)0x1C3C, - (q15_t)0x831C, (q15_t)0x1C0B, (q15_t)0x8311, (q15_t)0x1BDA, - (q15_t)0x8306, (q15_t)0x1BA9, (q15_t)0x82FB, (q15_t)0x1B78, - (q15_t)0x82F0, (q15_t)0x1B47, (q15_t)0x82E6, (q15_t)0x1B16, - (q15_t)0x82DB, (q15_t)0x1AE4, (q15_t)0x82D0, (q15_t)0x1AB3, - (q15_t)0x82C6, (q15_t)0x1A82, (q15_t)0x82BC, (q15_t)0x1A51, - (q15_t)0x82B1, (q15_t)0x1A20, (q15_t)0x82A7, (q15_t)0x19EF, - (q15_t)0x829D, (q15_t)0x19BD, (q15_t)0x8293, (q15_t)0x198C, - (q15_t)0x8289, (q15_t)0x195B, (q15_t)0x827F, (q15_t)0x192A, - (q15_t)0x8275, (q15_t)0x18F8, (q15_t)0x826B, (q15_t)0x18C7, - (q15_t)0x8262, (q15_t)0x1896, (q15_t)0x8258, (q15_t)0x1864, - (q15_t)0x824F, (q15_t)0x1833, (q15_t)0x8245, (q15_t)0x1802, - (q15_t)0x823C, (q15_t)0x17D0, (q15_t)0x8232, (q15_t)0x179F, - (q15_t)0x8229, (q15_t)0x176D, (q15_t)0x8220, (q15_t)0x173C, - (q15_t)0x8217, (q15_t)0x170A, (q15_t)0x820E, (q15_t)0x16D9, - (q15_t)0x8205, (q15_t)0x16A8, (q15_t)0x81FC, (q15_t)0x1676, - (q15_t)0x81F3, (q15_t)0x1645, (q15_t)0x81EB, (q15_t)0x1613, - (q15_t)0x81E2, (q15_t)0x15E2, (q15_t)0x81D9, (q15_t)0x15B0, - (q15_t)0x81D1, (q15_t)0x157F, (q15_t)0x81C8, (q15_t)0x154D, - (q15_t)0x81C0, (q15_t)0x151B, (q15_t)0x81B8, (q15_t)0x14EA, - (q15_t)0x81B0, (q15_t)0x14B8, (q15_t)0x81A8, (q15_t)0x1487, - (q15_t)0x81A0, (q15_t)0x1455, (q15_t)0x8198, (q15_t)0x1423, - (q15_t)0x8190, (q15_t)0x13F2, (q15_t)0x8188, (q15_t)0x13C0, - (q15_t)0x8180, (q15_t)0x138E, (q15_t)0x8179, (q15_t)0x135D, - (q15_t)0x8171, (q15_t)0x132B, (q15_t)0x816A, (q15_t)0x12F9, - (q15_t)0x8162, (q15_t)0x12C8, (q15_t)0x815B, (q15_t)0x1296, - (q15_t)0x8154, (q15_t)0x1264, (q15_t)0x814C, (q15_t)0x1232, - (q15_t)0x8145, (q15_t)0x1201, (q15_t)0x813E, (q15_t)0x11CF, - (q15_t)0x8137, (q15_t)0x119D, (q15_t)0x8130, (q15_t)0x116B, - (q15_t)0x812A, (q15_t)0x1139, (q15_t)0x8123, (q15_t)0x1108, - (q15_t)0x811C, (q15_t)0x10D6, (q15_t)0x8116, (q15_t)0x10A4, - (q15_t)0x810F, (q15_t)0x1072, (q15_t)0x8109, (q15_t)0x1040, - (q15_t)0x8102, (q15_t)0x100E, (q15_t)0x80FC, (q15_t)0x0FDD, - (q15_t)0x80F6, (q15_t)0x0FAB, (q15_t)0x80F0, (q15_t)0x0F79, - (q15_t)0x80EA, (q15_t)0x0F47, (q15_t)0x80E4, (q15_t)0x0F15, - (q15_t)0x80DE, (q15_t)0x0EE3, (q15_t)0x80D8, (q15_t)0x0EB1, - (q15_t)0x80D2, (q15_t)0x0E7F, (q15_t)0x80CD, (q15_t)0x0E4D, - (q15_t)0x80C7, (q15_t)0x0E1B, (q15_t)0x80C2, (q15_t)0x0DE9, - (q15_t)0x80BC, (q15_t)0x0DB7, (q15_t)0x80B7, (q15_t)0x0D85, - (q15_t)0x80B2, (q15_t)0x0D53, (q15_t)0x80AC, (q15_t)0x0D21, - (q15_t)0x80A7, (q15_t)0x0CEF, (q15_t)0x80A2, (q15_t)0x0CBD, - (q15_t)0x809D, (q15_t)0x0C8B, (q15_t)0x8098, (q15_t)0x0C59, - (q15_t)0x8094, (q15_t)0x0C27, (q15_t)0x808F, (q15_t)0x0BF5, - (q15_t)0x808A, (q15_t)0x0BC3, (q15_t)0x8086, (q15_t)0x0B91, - (q15_t)0x8081, (q15_t)0x0B5F, (q15_t)0x807D, (q15_t)0x0B2D, - (q15_t)0x8078, (q15_t)0x0AFB, (q15_t)0x8074, (q15_t)0x0AC9, - (q15_t)0x8070, (q15_t)0x0A97, (q15_t)0x806C, (q15_t)0x0A65, - (q15_t)0x8068, (q15_t)0x0A33, (q15_t)0x8064, (q15_t)0x0A00, - (q15_t)0x8060, (q15_t)0x09CE, (q15_t)0x805C, (q15_t)0x099C, - (q15_t)0x8058, (q15_t)0x096A, (q15_t)0x8055, (q15_t)0x0938, - (q15_t)0x8051, (q15_t)0x0906, (q15_t)0x804E, (q15_t)0x08D4, - (q15_t)0x804A, (q15_t)0x08A2, (q15_t)0x8047, (q15_t)0x086F, - (q15_t)0x8043, (q15_t)0x083D, (q15_t)0x8040, (q15_t)0x080B, - (q15_t)0x803D, (q15_t)0x07D9, (q15_t)0x803A, (q15_t)0x07A7, - (q15_t)0x8037, (q15_t)0x0775, (q15_t)0x8034, (q15_t)0x0742, - (q15_t)0x8031, (q15_t)0x0710, (q15_t)0x802F, (q15_t)0x06DE, - (q15_t)0x802C, (q15_t)0x06AC, (q15_t)0x8029, (q15_t)0x067A, - (q15_t)0x8027, (q15_t)0x0647, (q15_t)0x8025, (q15_t)0x0615, - (q15_t)0x8022, (q15_t)0x05E3, (q15_t)0x8020, (q15_t)0x05B1, - (q15_t)0x801E, (q15_t)0x057F, (q15_t)0x801C, (q15_t)0x054C, - (q15_t)0x801A, (q15_t)0x051A, (q15_t)0x8018, (q15_t)0x04E8, - (q15_t)0x8016, (q15_t)0x04B6, (q15_t)0x8014, (q15_t)0x0483, - (q15_t)0x8012, (q15_t)0x0451, (q15_t)0x8011, (q15_t)0x041F, - (q15_t)0x800F, (q15_t)0x03ED, (q15_t)0x800D, (q15_t)0x03BA, - (q15_t)0x800C, (q15_t)0x0388, (q15_t)0x800B, (q15_t)0x0356, - (q15_t)0x8009, (q15_t)0x0324, (q15_t)0x8008, (q15_t)0x02F1, - (q15_t)0x8007, (q15_t)0x02BF, (q15_t)0x8006, (q15_t)0x028D, - (q15_t)0x8005, (q15_t)0x025B, (q15_t)0x8004, (q15_t)0x0228, - (q15_t)0x8003, (q15_t)0x01F6, (q15_t)0x8003, (q15_t)0x01C4, - (q15_t)0x8002, (q15_t)0x0192, (q15_t)0x8001, (q15_t)0x015F, - (q15_t)0x8001, (q15_t)0x012D, (q15_t)0x8000, (q15_t)0x00FB, - (q15_t)0x8000, (q15_t)0x00C9, (q15_t)0x8000, (q15_t)0x0096, - (q15_t)0x8000, (q15_t)0x0064, (q15_t)0x8000, (q15_t)0x0032, - (q15_t)0x8000, (q15_t)0x0000, (q15_t)0x8000, (q15_t)0xFFCD, - (q15_t)0x8000, (q15_t)0xFF9B, (q15_t)0x8000, (q15_t)0xFF69, - (q15_t)0x8000, (q15_t)0xFF36, (q15_t)0x8000, (q15_t)0xFF04, - (q15_t)0x8001, (q15_t)0xFED2, (q15_t)0x8001, (q15_t)0xFEA0, - (q15_t)0x8002, (q15_t)0xFE6D, (q15_t)0x8003, (q15_t)0xFE3B, - (q15_t)0x8003, (q15_t)0xFE09, (q15_t)0x8004, (q15_t)0xFDD7, - (q15_t)0x8005, (q15_t)0xFDA4, (q15_t)0x8006, (q15_t)0xFD72, - (q15_t)0x8007, (q15_t)0xFD40, (q15_t)0x8008, (q15_t)0xFD0E, - (q15_t)0x8009, (q15_t)0xFCDB, (q15_t)0x800B, (q15_t)0xFCA9, - (q15_t)0x800C, (q15_t)0xFC77, (q15_t)0x800D, (q15_t)0xFC45, - (q15_t)0x800F, (q15_t)0xFC12, (q15_t)0x8011, (q15_t)0xFBE0, - (q15_t)0x8012, (q15_t)0xFBAE, (q15_t)0x8014, (q15_t)0xFB7C, - (q15_t)0x8016, (q15_t)0xFB49, (q15_t)0x8018, (q15_t)0xFB17, - (q15_t)0x801A, (q15_t)0xFAE5, (q15_t)0x801C, (q15_t)0xFAB3, - (q15_t)0x801E, (q15_t)0xFA80, (q15_t)0x8020, (q15_t)0xFA4E, - (q15_t)0x8022, (q15_t)0xFA1C, (q15_t)0x8025, (q15_t)0xF9EA, - (q15_t)0x8027, (q15_t)0xF9B8, (q15_t)0x8029, (q15_t)0xF985, - (q15_t)0x802C, (q15_t)0xF953, (q15_t)0x802F, (q15_t)0xF921, - (q15_t)0x8031, (q15_t)0xF8EF, (q15_t)0x8034, (q15_t)0xF8BD, - (q15_t)0x8037, (q15_t)0xF88A, (q15_t)0x803A, (q15_t)0xF858, - (q15_t)0x803D, (q15_t)0xF826, (q15_t)0x8040, (q15_t)0xF7F4, - (q15_t)0x8043, (q15_t)0xF7C2, (q15_t)0x8047, (q15_t)0xF790, - (q15_t)0x804A, (q15_t)0xF75D, (q15_t)0x804E, (q15_t)0xF72B, - (q15_t)0x8051, (q15_t)0xF6F9, (q15_t)0x8055, (q15_t)0xF6C7, - (q15_t)0x8058, (q15_t)0xF695, (q15_t)0x805C, (q15_t)0xF663, - (q15_t)0x8060, (q15_t)0xF631, (q15_t)0x8064, (q15_t)0xF5FF, - (q15_t)0x8068, (q15_t)0xF5CC, (q15_t)0x806C, (q15_t)0xF59A, - (q15_t)0x8070, (q15_t)0xF568, (q15_t)0x8074, (q15_t)0xF536, - (q15_t)0x8078, (q15_t)0xF504, (q15_t)0x807D, (q15_t)0xF4D2, - (q15_t)0x8081, (q15_t)0xF4A0, (q15_t)0x8086, (q15_t)0xF46E, - (q15_t)0x808A, (q15_t)0xF43C, (q15_t)0x808F, (q15_t)0xF40A, - (q15_t)0x8094, (q15_t)0xF3D8, (q15_t)0x8098, (q15_t)0xF3A6, - (q15_t)0x809D, (q15_t)0xF374, (q15_t)0x80A2, (q15_t)0xF342, - (q15_t)0x80A7, (q15_t)0xF310, (q15_t)0x80AC, (q15_t)0xF2DE, - (q15_t)0x80B2, (q15_t)0xF2AC, (q15_t)0x80B7, (q15_t)0xF27A, - (q15_t)0x80BC, (q15_t)0xF248, (q15_t)0x80C2, (q15_t)0xF216, - (q15_t)0x80C7, (q15_t)0xF1E4, (q15_t)0x80CD, (q15_t)0xF1B2, - (q15_t)0x80D2, (q15_t)0xF180, (q15_t)0x80D8, (q15_t)0xF14E, - (q15_t)0x80DE, (q15_t)0xF11C, (q15_t)0x80E4, (q15_t)0xF0EA, - (q15_t)0x80EA, (q15_t)0xF0B8, (q15_t)0x80F0, (q15_t)0xF086, - (q15_t)0x80F6, (q15_t)0xF054, (q15_t)0x80FC, (q15_t)0xF022, - (q15_t)0x8102, (q15_t)0xEFF1, (q15_t)0x8109, (q15_t)0xEFBF, - (q15_t)0x810F, (q15_t)0xEF8D, (q15_t)0x8116, (q15_t)0xEF5B, - (q15_t)0x811C, (q15_t)0xEF29, (q15_t)0x8123, (q15_t)0xEEF7, - (q15_t)0x812A, (q15_t)0xEEC6, (q15_t)0x8130, (q15_t)0xEE94, - (q15_t)0x8137, (q15_t)0xEE62, (q15_t)0x813E, (q15_t)0xEE30, - (q15_t)0x8145, (q15_t)0xEDFE, (q15_t)0x814C, (q15_t)0xEDCD, - (q15_t)0x8154, (q15_t)0xED9B, (q15_t)0x815B, (q15_t)0xED69, - (q15_t)0x8162, (q15_t)0xED37, (q15_t)0x816A, (q15_t)0xED06, - (q15_t)0x8171, (q15_t)0xECD4, (q15_t)0x8179, (q15_t)0xECA2, - (q15_t)0x8180, (q15_t)0xEC71, (q15_t)0x8188, (q15_t)0xEC3F, - (q15_t)0x8190, (q15_t)0xEC0D, (q15_t)0x8198, (q15_t)0xEBDC, - (q15_t)0x81A0, (q15_t)0xEBAA, (q15_t)0x81A8, (q15_t)0xEB78, - (q15_t)0x81B0, (q15_t)0xEB47, (q15_t)0x81B8, (q15_t)0xEB15, - (q15_t)0x81C0, (q15_t)0xEAE4, (q15_t)0x81C8, (q15_t)0xEAB2, - (q15_t)0x81D1, (q15_t)0xEA80, (q15_t)0x81D9, (q15_t)0xEA4F, - (q15_t)0x81E2, (q15_t)0xEA1D, (q15_t)0x81EB, (q15_t)0xE9EC, - (q15_t)0x81F3, (q15_t)0xE9BA, (q15_t)0x81FC, (q15_t)0xE989, - (q15_t)0x8205, (q15_t)0xE957, (q15_t)0x820E, (q15_t)0xE926, - (q15_t)0x8217, (q15_t)0xE8F5, (q15_t)0x8220, (q15_t)0xE8C3, - (q15_t)0x8229, (q15_t)0xE892, (q15_t)0x8232, (q15_t)0xE860, - (q15_t)0x823C, (q15_t)0xE82F, (q15_t)0x8245, (q15_t)0xE7FD, - (q15_t)0x824F, (q15_t)0xE7CC, (q15_t)0x8258, (q15_t)0xE79B, - (q15_t)0x8262, (q15_t)0xE769, (q15_t)0x826B, (q15_t)0xE738, - (q15_t)0x8275, (q15_t)0xE707, (q15_t)0x827F, (q15_t)0xE6D5, - (q15_t)0x8289, (q15_t)0xE6A4, (q15_t)0x8293, (q15_t)0xE673, - (q15_t)0x829D, (q15_t)0xE642, (q15_t)0x82A7, (q15_t)0xE610, - (q15_t)0x82B1, (q15_t)0xE5DF, (q15_t)0x82BC, (q15_t)0xE5AE, - (q15_t)0x82C6, (q15_t)0xE57D, (q15_t)0x82D0, (q15_t)0xE54C, - (q15_t)0x82DB, (q15_t)0xE51B, (q15_t)0x82E6, (q15_t)0xE4E9, - (q15_t)0x82F0, (q15_t)0xE4B8, (q15_t)0x82FB, (q15_t)0xE487, - (q15_t)0x8306, (q15_t)0xE456, (q15_t)0x8311, (q15_t)0xE425, - (q15_t)0x831C, (q15_t)0xE3F4, (q15_t)0x8327, (q15_t)0xE3C3, - (q15_t)0x8332, (q15_t)0xE392, (q15_t)0x833D, (q15_t)0xE361, - (q15_t)0x8348, (q15_t)0xE330, (q15_t)0x8354, (q15_t)0xE2FF, - (q15_t)0x835F, (q15_t)0xE2CE, (q15_t)0x836B, (q15_t)0xE29D, - (q15_t)0x8376, (q15_t)0xE26C, (q15_t)0x8382, (q15_t)0xE23B, - (q15_t)0x838E, (q15_t)0xE20A, (q15_t)0x8399, (q15_t)0xE1DA, - (q15_t)0x83A5, (q15_t)0xE1A9, (q15_t)0x83B1, (q15_t)0xE178, - (q15_t)0x83BD, (q15_t)0xE147, (q15_t)0x83C9, (q15_t)0xE116, - (q15_t)0x83D6, (q15_t)0xE0E6, (q15_t)0x83E2, (q15_t)0xE0B5, - (q15_t)0x83EE, (q15_t)0xE084, (q15_t)0x83FA, (q15_t)0xE053, - (q15_t)0x8407, (q15_t)0xE023, (q15_t)0x8414, (q15_t)0xDFF2, - (q15_t)0x8420, (q15_t)0xDFC1, (q15_t)0x842D, (q15_t)0xDF91, - (q15_t)0x843A, (q15_t)0xDF60, (q15_t)0x8446, (q15_t)0xDF2F, - (q15_t)0x8453, (q15_t)0xDEFF, (q15_t)0x8460, (q15_t)0xDECE, - (q15_t)0x846D, (q15_t)0xDE9E, (q15_t)0x847B, (q15_t)0xDE6D, - (q15_t)0x8488, (q15_t)0xDE3D, (q15_t)0x8495, (q15_t)0xDE0C, - (q15_t)0x84A2, (q15_t)0xDDDC, (q15_t)0x84B0, (q15_t)0xDDAB, - (q15_t)0x84BD, (q15_t)0xDD7B, (q15_t)0x84CB, (q15_t)0xDD4B, - (q15_t)0x84D9, (q15_t)0xDD1A, (q15_t)0x84E6, (q15_t)0xDCEA, - (q15_t)0x84F4, (q15_t)0xDCBA, (q15_t)0x8502, (q15_t)0xDC89, - (q15_t)0x8510, (q15_t)0xDC59, (q15_t)0x851E, (q15_t)0xDC29, - (q15_t)0x852C, (q15_t)0xDBF8, (q15_t)0x853A, (q15_t)0xDBC8, - (q15_t)0x8549, (q15_t)0xDB98, (q15_t)0x8557, (q15_t)0xDB68, - (q15_t)0x8565, (q15_t)0xDB38, (q15_t)0x8574, (q15_t)0xDB08, - (q15_t)0x8582, (q15_t)0xDAD7, (q15_t)0x8591, (q15_t)0xDAA7, - (q15_t)0x85A0, (q15_t)0xDA77, (q15_t)0x85AF, (q15_t)0xDA47, - (q15_t)0x85BD, (q15_t)0xDA17, (q15_t)0x85CC, (q15_t)0xD9E7, - (q15_t)0x85DB, (q15_t)0xD9B7, (q15_t)0x85EA, (q15_t)0xD987, - (q15_t)0x85FA, (q15_t)0xD957, (q15_t)0x8609, (q15_t)0xD927, - (q15_t)0x8618, (q15_t)0xD8F8, (q15_t)0x8627, (q15_t)0xD8C8, - (q15_t)0x8637, (q15_t)0xD898, (q15_t)0x8646, (q15_t)0xD868, - (q15_t)0x8656, (q15_t)0xD838, (q15_t)0x8666, (q15_t)0xD809, - (q15_t)0x8675, (q15_t)0xD7D9, (q15_t)0x8685, (q15_t)0xD7A9, - (q15_t)0x8695, (q15_t)0xD779, (q15_t)0x86A5, (q15_t)0xD74A, - (q15_t)0x86B5, (q15_t)0xD71A, (q15_t)0x86C5, (q15_t)0xD6EA, - (q15_t)0x86D5, (q15_t)0xD6BB, (q15_t)0x86E6, (q15_t)0xD68B, - (q15_t)0x86F6, (q15_t)0xD65C, (q15_t)0x8706, (q15_t)0xD62C, - (q15_t)0x8717, (q15_t)0xD5FD, (q15_t)0x8727, (q15_t)0xD5CD, - (q15_t)0x8738, (q15_t)0xD59E, (q15_t)0x8749, (q15_t)0xD56E, - (q15_t)0x8759, (q15_t)0xD53F, (q15_t)0x876A, (q15_t)0xD510, - (q15_t)0x877B, (q15_t)0xD4E0, (q15_t)0x878C, (q15_t)0xD4B1, - (q15_t)0x879D, (q15_t)0xD482, (q15_t)0x87AE, (q15_t)0xD452, - (q15_t)0x87BF, (q15_t)0xD423, (q15_t)0x87D1, (q15_t)0xD3F4, - (q15_t)0x87E2, (q15_t)0xD3C5, (q15_t)0x87F3, (q15_t)0xD396, - (q15_t)0x8805, (q15_t)0xD367, (q15_t)0x8816, (q15_t)0xD337, - (q15_t)0x8828, (q15_t)0xD308, (q15_t)0x883A, (q15_t)0xD2D9, - (q15_t)0x884B, (q15_t)0xD2AA, (q15_t)0x885D, (q15_t)0xD27B, - (q15_t)0x886F, (q15_t)0xD24C, (q15_t)0x8881, (q15_t)0xD21D, - (q15_t)0x8893, (q15_t)0xD1EE, (q15_t)0x88A5, (q15_t)0xD1C0, - (q15_t)0x88B8, (q15_t)0xD191, (q15_t)0x88CA, (q15_t)0xD162, - (q15_t)0x88DC, (q15_t)0xD133, (q15_t)0x88EF, (q15_t)0xD104, - (q15_t)0x8901, (q15_t)0xD0D6, (q15_t)0x8914, (q15_t)0xD0A7, - (q15_t)0x8926, (q15_t)0xD078, (q15_t)0x8939, (q15_t)0xD04A, - (q15_t)0x894C, (q15_t)0xD01B, (q15_t)0x895F, (q15_t)0xCFEC, - (q15_t)0x8971, (q15_t)0xCFBE, (q15_t)0x8984, (q15_t)0xCF8F, - (q15_t)0x8997, (q15_t)0xCF61, (q15_t)0x89AB, (q15_t)0xCF32, - (q15_t)0x89BE, (q15_t)0xCF04, (q15_t)0x89D1, (q15_t)0xCED5, - (q15_t)0x89E4, (q15_t)0xCEA7, (q15_t)0x89F8, (q15_t)0xCE79, - (q15_t)0x8A0B, (q15_t)0xCE4A, (q15_t)0x8A1F, (q15_t)0xCE1C, - (q15_t)0x8A33, (q15_t)0xCDEE, (q15_t)0x8A46, (q15_t)0xCDBF, - (q15_t)0x8A5A, (q15_t)0xCD91, (q15_t)0x8A6E, (q15_t)0xCD63, - (q15_t)0x8A82, (q15_t)0xCD35, (q15_t)0x8A96, (q15_t)0xCD07, - (q15_t)0x8AAA, (q15_t)0xCCD9, (q15_t)0x8ABE, (q15_t)0xCCAB, - (q15_t)0x8AD2, (q15_t)0xCC7D, (q15_t)0x8AE6, (q15_t)0xCC4F, - (q15_t)0x8AFB, (q15_t)0xCC21, (q15_t)0x8B0F, (q15_t)0xCBF3, - (q15_t)0x8B24, (q15_t)0xCBC5, (q15_t)0x8B38, (q15_t)0xCB97, - (q15_t)0x8B4D, (q15_t)0xCB69, (q15_t)0x8B61, (q15_t)0xCB3B, - (q15_t)0x8B76, (q15_t)0xCB0D, (q15_t)0x8B8B, (q15_t)0xCAE0, - (q15_t)0x8BA0, (q15_t)0xCAB2, (q15_t)0x8BB5, (q15_t)0xCA84, - (q15_t)0x8BCA, (q15_t)0xCA57, (q15_t)0x8BDF, (q15_t)0xCA29, - (q15_t)0x8BF4, (q15_t)0xC9FB, (q15_t)0x8C09, (q15_t)0xC9CE, - (q15_t)0x8C1F, (q15_t)0xC9A0, (q15_t)0x8C34, (q15_t)0xC973, - (q15_t)0x8C4A, (q15_t)0xC945, (q15_t)0x8C5F, (q15_t)0xC918, - (q15_t)0x8C75, (q15_t)0xC8EB, (q15_t)0x8C8A, (q15_t)0xC8BD, - (q15_t)0x8CA0, (q15_t)0xC890, (q15_t)0x8CB6, (q15_t)0xC863, - (q15_t)0x8CCC, (q15_t)0xC835, (q15_t)0x8CE2, (q15_t)0xC808, - (q15_t)0x8CF8, (q15_t)0xC7DB, (q15_t)0x8D0E, (q15_t)0xC7AE, - (q15_t)0x8D24, (q15_t)0xC781, (q15_t)0x8D3A, (q15_t)0xC754, - (q15_t)0x8D50, (q15_t)0xC727, (q15_t)0x8D67, (q15_t)0xC6F9, - (q15_t)0x8D7D, (q15_t)0xC6CD, (q15_t)0x8D94, (q15_t)0xC6A0, - (q15_t)0x8DAA, (q15_t)0xC673, (q15_t)0x8DC1, (q15_t)0xC646, - (q15_t)0x8DD8, (q15_t)0xC619, (q15_t)0x8DEE, (q15_t)0xC5EC, - (q15_t)0x8E05, (q15_t)0xC5BF, (q15_t)0x8E1C, (q15_t)0xC593, - (q15_t)0x8E33, (q15_t)0xC566, (q15_t)0x8E4A, (q15_t)0xC539, - (q15_t)0x8E61, (q15_t)0xC50D, (q15_t)0x8E79, (q15_t)0xC4E0, - (q15_t)0x8E90, (q15_t)0xC4B3, (q15_t)0x8EA7, (q15_t)0xC487, - (q15_t)0x8EBE, (q15_t)0xC45A, (q15_t)0x8ED6, (q15_t)0xC42E, - (q15_t)0x8EED, (q15_t)0xC402, (q15_t)0x8F05, (q15_t)0xC3D5, - (q15_t)0x8F1D, (q15_t)0xC3A9, (q15_t)0x8F34, (q15_t)0xC37C, - (q15_t)0x8F4C, (q15_t)0xC350, (q15_t)0x8F64, (q15_t)0xC324, - (q15_t)0x8F7C, (q15_t)0xC2F8, (q15_t)0x8F94, (q15_t)0xC2CC, - (q15_t)0x8FAC, (q15_t)0xC29F, (q15_t)0x8FC4, (q15_t)0xC273, - (q15_t)0x8FDC, (q15_t)0xC247, (q15_t)0x8FF5, (q15_t)0xC21B, - (q15_t)0x900D, (q15_t)0xC1EF, (q15_t)0x9025, (q15_t)0xC1C3, - (q15_t)0x903E, (q15_t)0xC197, (q15_t)0x9056, (q15_t)0xC16C, - (q15_t)0x906F, (q15_t)0xC140, (q15_t)0x9088, (q15_t)0xC114, - (q15_t)0x90A0, (q15_t)0xC0E8, (q15_t)0x90B9, (q15_t)0xC0BC, - (q15_t)0x90D2, (q15_t)0xC091, (q15_t)0x90EB, (q15_t)0xC065, - (q15_t)0x9104, (q15_t)0xC03A, (q15_t)0x911D, (q15_t)0xC00E, - (q15_t)0x9136, (q15_t)0xBFE2, (q15_t)0x9150, (q15_t)0xBFB7, - (q15_t)0x9169, (q15_t)0xBF8C, (q15_t)0x9182, (q15_t)0xBF60, - (q15_t)0x919C, (q15_t)0xBF35, (q15_t)0x91B5, (q15_t)0xBF09, - (q15_t)0x91CF, (q15_t)0xBEDE, (q15_t)0x91E8, (q15_t)0xBEB3, - (q15_t)0x9202, (q15_t)0xBE88, (q15_t)0x921C, (q15_t)0xBE5D, - (q15_t)0x9235, (q15_t)0xBE31, (q15_t)0x924F, (q15_t)0xBE06, - (q15_t)0x9269, (q15_t)0xBDDB, (q15_t)0x9283, (q15_t)0xBDB0, - (q15_t)0x929D, (q15_t)0xBD85, (q15_t)0x92B7, (q15_t)0xBD5A, - (q15_t)0x92D2, (q15_t)0xBD2F, (q15_t)0x92EC, (q15_t)0xBD05, - (q15_t)0x9306, (q15_t)0xBCDA, (q15_t)0x9321, (q15_t)0xBCAF, - (q15_t)0x933B, (q15_t)0xBC84, (q15_t)0x9356, (q15_t)0xBC5A, - (q15_t)0x9370, (q15_t)0xBC2F, (q15_t)0x938B, (q15_t)0xBC04, - (q15_t)0x93A6, (q15_t)0xBBDA, (q15_t)0x93C0, (q15_t)0xBBAF, - (q15_t)0x93DB, (q15_t)0xBB85, (q15_t)0x93F6, (q15_t)0xBB5A, - (q15_t)0x9411, (q15_t)0xBB30, (q15_t)0x942C, (q15_t)0xBB05, - (q15_t)0x9447, (q15_t)0xBADB, (q15_t)0x9463, (q15_t)0xBAB1, - (q15_t)0x947E, (q15_t)0xBA87, (q15_t)0x9499, (q15_t)0xBA5C, - (q15_t)0x94B5, (q15_t)0xBA32, (q15_t)0x94D0, (q15_t)0xBA08, - (q15_t)0x94EC, (q15_t)0xB9DE, (q15_t)0x9507, (q15_t)0xB9B4, - (q15_t)0x9523, (q15_t)0xB98A, (q15_t)0x953E, (q15_t)0xB960, - (q15_t)0x955A, (q15_t)0xB936, (q15_t)0x9576, (q15_t)0xB90C, - (q15_t)0x9592, (q15_t)0xB8E3, (q15_t)0x95AE, (q15_t)0xB8B9, - (q15_t)0x95CA, (q15_t)0xB88F, (q15_t)0x95E6, (q15_t)0xB865, - (q15_t)0x9602, (q15_t)0xB83C, (q15_t)0x961E, (q15_t)0xB812, - (q15_t)0x963B, (q15_t)0xB7E9, (q15_t)0x9657, (q15_t)0xB7BF, - (q15_t)0x9673, (q15_t)0xB796, (q15_t)0x9690, (q15_t)0xB76C, - (q15_t)0x96AC, (q15_t)0xB743, (q15_t)0x96C9, (q15_t)0xB719, - (q15_t)0x96E6, (q15_t)0xB6F0, (q15_t)0x9702, (q15_t)0xB6C7, - (q15_t)0x971F, (q15_t)0xB69E, (q15_t)0x973C, (q15_t)0xB675, - (q15_t)0x9759, (q15_t)0xB64B, (q15_t)0x9776, (q15_t)0xB622, - (q15_t)0x9793, (q15_t)0xB5F9, (q15_t)0x97B0, (q15_t)0xB5D0, - (q15_t)0x97CD, (q15_t)0xB5A7, (q15_t)0x97EA, (q15_t)0xB57E, - (q15_t)0x9808, (q15_t)0xB556, (q15_t)0x9825, (q15_t)0xB52D, - (q15_t)0x9842, (q15_t)0xB504, (q15_t)0x9860, (q15_t)0xB4DB, - (q15_t)0x987D, (q15_t)0xB4B3, (q15_t)0x989B, (q15_t)0xB48A, - (q15_t)0x98B9, (q15_t)0xB461, (q15_t)0x98D6, (q15_t)0xB439, - (q15_t)0x98F4, (q15_t)0xB410, (q15_t)0x9912, (q15_t)0xB3E8, - (q15_t)0x9930, (q15_t)0xB3C0, (q15_t)0x994E, (q15_t)0xB397, - (q15_t)0x996C, (q15_t)0xB36F, (q15_t)0x998A, (q15_t)0xB347, - (q15_t)0x99A8, (q15_t)0xB31E, (q15_t)0x99C6, (q15_t)0xB2F6, - (q15_t)0x99E5, (q15_t)0xB2CE, (q15_t)0x9A03, (q15_t)0xB2A6, - (q15_t)0x9A22, (q15_t)0xB27E, (q15_t)0x9A40, (q15_t)0xB256, - (q15_t)0x9A5F, (q15_t)0xB22E, (q15_t)0x9A7D, (q15_t)0xB206, - (q15_t)0x9A9C, (q15_t)0xB1DE, (q15_t)0x9ABA, (q15_t)0xB1B7, - (q15_t)0x9AD9, (q15_t)0xB18F, (q15_t)0x9AF8, (q15_t)0xB167, - (q15_t)0x9B17, (q15_t)0xB140, (q15_t)0x9B36, (q15_t)0xB118, - (q15_t)0x9B55, (q15_t)0xB0F0, (q15_t)0x9B74, (q15_t)0xB0C9, - (q15_t)0x9B93, (q15_t)0xB0A1, (q15_t)0x9BB2, (q15_t)0xB07A, - (q15_t)0x9BD2, (q15_t)0xB053, (q15_t)0x9BF1, (q15_t)0xB02B, - (q15_t)0x9C10, (q15_t)0xB004, (q15_t)0x9C30, (q15_t)0xAFDD, - (q15_t)0x9C4F, (q15_t)0xAFB6, (q15_t)0x9C6F, (q15_t)0xAF8F, - (q15_t)0x9C8E, (q15_t)0xAF68, (q15_t)0x9CAE, (q15_t)0xAF40, - (q15_t)0x9CCE, (q15_t)0xAF1A, (q15_t)0x9CEE, (q15_t)0xAEF3, - (q15_t)0x9D0D, (q15_t)0xAECC, (q15_t)0x9D2D, (q15_t)0xAEA5, - (q15_t)0x9D4D, (q15_t)0xAE7E, (q15_t)0x9D6D, (q15_t)0xAE57, - (q15_t)0x9D8E, (q15_t)0xAE31, (q15_t)0x9DAE, (q15_t)0xAE0A, - (q15_t)0x9DCE, (q15_t)0xADE3, (q15_t)0x9DEE, (q15_t)0xADBD, - (q15_t)0x9E0E, (q15_t)0xAD96, (q15_t)0x9E2F, (q15_t)0xAD70, - (q15_t)0x9E4F, (q15_t)0xAD4A, (q15_t)0x9E70, (q15_t)0xAD23, - (q15_t)0x9E90, (q15_t)0xACFD, (q15_t)0x9EB1, (q15_t)0xACD7, - (q15_t)0x9ED2, (q15_t)0xACB1, (q15_t)0x9EF2, (q15_t)0xAC8A, - (q15_t)0x9F13, (q15_t)0xAC64, (q15_t)0x9F34, (q15_t)0xAC3E, - (q15_t)0x9F55, (q15_t)0xAC18, (q15_t)0x9F76, (q15_t)0xABF2, - (q15_t)0x9F97, (q15_t)0xABCC, (q15_t)0x9FB8, (q15_t)0xABA7, - (q15_t)0x9FD9, (q15_t)0xAB81, (q15_t)0x9FFB, (q15_t)0xAB5B, - (q15_t)0xA01C, (q15_t)0xAB35, (q15_t)0xA03D, (q15_t)0xAB10, - (q15_t)0xA05F, (q15_t)0xAAEA, (q15_t)0xA080, (q15_t)0xAAC5, - (q15_t)0xA0A1, (q15_t)0xAA9F, (q15_t)0xA0C3, (q15_t)0xAA7A, - (q15_t)0xA0E5, (q15_t)0xAA54, (q15_t)0xA106, (q15_t)0xAA2F, - (q15_t)0xA128, (q15_t)0xAA0A, (q15_t)0xA14A, (q15_t)0xA9E5, - (q15_t)0xA16C, (q15_t)0xA9BF, (q15_t)0xA18E, (q15_t)0xA99A, - (q15_t)0xA1AF, (q15_t)0xA975, (q15_t)0xA1D2, (q15_t)0xA950, - (q15_t)0xA1F4, (q15_t)0xA92B, (q15_t)0xA216, (q15_t)0xA906, - (q15_t)0xA238, (q15_t)0xA8E2, (q15_t)0xA25A, (q15_t)0xA8BD, - (q15_t)0xA27C, (q15_t)0xA898, (q15_t)0xA29F, (q15_t)0xA873, - (q15_t)0xA2C1, (q15_t)0xA84F, (q15_t)0xA2E4, (q15_t)0xA82A, - (q15_t)0xA306, (q15_t)0xA806, (q15_t)0xA329, (q15_t)0xA7E1, - (q15_t)0xA34B, (q15_t)0xA7BD, (q15_t)0xA36E, (q15_t)0xA798, - (q15_t)0xA391, (q15_t)0xA774, (q15_t)0xA3B4, (q15_t)0xA750, - (q15_t)0xA3D6, (q15_t)0xA72B, (q15_t)0xA3F9, (q15_t)0xA707, - (q15_t)0xA41C, (q15_t)0xA6E3, (q15_t)0xA43F, (q15_t)0xA6BF, - (q15_t)0xA462, (q15_t)0xA69B, (q15_t)0xA486, (q15_t)0xA677, - (q15_t)0xA4A9, (q15_t)0xA653, (q15_t)0xA4CC, (q15_t)0xA62F, - (q15_t)0xA4EF, (q15_t)0xA60C, (q15_t)0xA513, (q15_t)0xA5E8, - (q15_t)0xA536, (q15_t)0xA5C4, (q15_t)0xA55A, (q15_t)0xA5A1, - (q15_t)0xA57D, (q15_t)0xA57D, (q15_t)0xA5A1, (q15_t)0xA55A, - (q15_t)0xA5C4, (q15_t)0xA536, (q15_t)0xA5E8, (q15_t)0xA513, - (q15_t)0xA60C, (q15_t)0xA4EF, (q15_t)0xA62F, (q15_t)0xA4CC, - (q15_t)0xA653, (q15_t)0xA4A9, (q15_t)0xA677, (q15_t)0xA486, - (q15_t)0xA69B, (q15_t)0xA462, (q15_t)0xA6BF, (q15_t)0xA43F, - (q15_t)0xA6E3, (q15_t)0xA41C, (q15_t)0xA707, (q15_t)0xA3F9, - (q15_t)0xA72B, (q15_t)0xA3D6, (q15_t)0xA750, (q15_t)0xA3B4, - (q15_t)0xA774, (q15_t)0xA391, (q15_t)0xA798, (q15_t)0xA36E, - (q15_t)0xA7BD, (q15_t)0xA34B, (q15_t)0xA7E1, (q15_t)0xA329, - (q15_t)0xA806, (q15_t)0xA306, (q15_t)0xA82A, (q15_t)0xA2E4, - (q15_t)0xA84F, (q15_t)0xA2C1, (q15_t)0xA873, (q15_t)0xA29F, - (q15_t)0xA898, (q15_t)0xA27C, (q15_t)0xA8BD, (q15_t)0xA25A, - (q15_t)0xA8E2, (q15_t)0xA238, (q15_t)0xA906, (q15_t)0xA216, - (q15_t)0xA92B, (q15_t)0xA1F4, (q15_t)0xA950, (q15_t)0xA1D2, - (q15_t)0xA975, (q15_t)0xA1AF, (q15_t)0xA99A, (q15_t)0xA18E, - (q15_t)0xA9BF, (q15_t)0xA16C, (q15_t)0xA9E5, (q15_t)0xA14A, - (q15_t)0xAA0A, (q15_t)0xA128, (q15_t)0xAA2F, (q15_t)0xA106, - (q15_t)0xAA54, (q15_t)0xA0E5, (q15_t)0xAA7A, (q15_t)0xA0C3, - (q15_t)0xAA9F, (q15_t)0xA0A1, (q15_t)0xAAC5, (q15_t)0xA080, - (q15_t)0xAAEA, (q15_t)0xA05F, (q15_t)0xAB10, (q15_t)0xA03D, - (q15_t)0xAB35, (q15_t)0xA01C, (q15_t)0xAB5B, (q15_t)0x9FFB, - (q15_t)0xAB81, (q15_t)0x9FD9, (q15_t)0xABA7, (q15_t)0x9FB8, - (q15_t)0xABCC, (q15_t)0x9F97, (q15_t)0xABF2, (q15_t)0x9F76, - (q15_t)0xAC18, (q15_t)0x9F55, (q15_t)0xAC3E, (q15_t)0x9F34, - (q15_t)0xAC64, (q15_t)0x9F13, (q15_t)0xAC8A, (q15_t)0x9EF2, - (q15_t)0xACB1, (q15_t)0x9ED2, (q15_t)0xACD7, (q15_t)0x9EB1, - (q15_t)0xACFD, (q15_t)0x9E90, (q15_t)0xAD23, (q15_t)0x9E70, - (q15_t)0xAD4A, (q15_t)0x9E4F, (q15_t)0xAD70, (q15_t)0x9E2F, - (q15_t)0xAD96, (q15_t)0x9E0E, (q15_t)0xADBD, (q15_t)0x9DEE, - (q15_t)0xADE3, (q15_t)0x9DCE, (q15_t)0xAE0A, (q15_t)0x9DAE, - (q15_t)0xAE31, (q15_t)0x9D8E, (q15_t)0xAE57, (q15_t)0x9D6D, - (q15_t)0xAE7E, (q15_t)0x9D4D, (q15_t)0xAEA5, (q15_t)0x9D2D, - (q15_t)0xAECC, (q15_t)0x9D0D, (q15_t)0xAEF3, (q15_t)0x9CEE, - (q15_t)0xAF1A, (q15_t)0x9CCE, (q15_t)0xAF40, (q15_t)0x9CAE, - (q15_t)0xAF68, (q15_t)0x9C8E, (q15_t)0xAF8F, (q15_t)0x9C6F, - (q15_t)0xAFB6, (q15_t)0x9C4F, (q15_t)0xAFDD, (q15_t)0x9C30, - (q15_t)0xB004, (q15_t)0x9C10, (q15_t)0xB02B, (q15_t)0x9BF1, - (q15_t)0xB053, (q15_t)0x9BD2, (q15_t)0xB07A, (q15_t)0x9BB2, - (q15_t)0xB0A1, (q15_t)0x9B93, (q15_t)0xB0C9, (q15_t)0x9B74, - (q15_t)0xB0F0, (q15_t)0x9B55, (q15_t)0xB118, (q15_t)0x9B36, - (q15_t)0xB140, (q15_t)0x9B17, (q15_t)0xB167, (q15_t)0x9AF8, - (q15_t)0xB18F, (q15_t)0x9AD9, (q15_t)0xB1B7, (q15_t)0x9ABA, - (q15_t)0xB1DE, (q15_t)0x9A9C, (q15_t)0xB206, (q15_t)0x9A7D, - (q15_t)0xB22E, (q15_t)0x9A5F, (q15_t)0xB256, (q15_t)0x9A40, - (q15_t)0xB27E, (q15_t)0x9A22, (q15_t)0xB2A6, (q15_t)0x9A03, - (q15_t)0xB2CE, (q15_t)0x99E5, (q15_t)0xB2F6, (q15_t)0x99C6, - (q15_t)0xB31E, (q15_t)0x99A8, (q15_t)0xB347, (q15_t)0x998A, - (q15_t)0xB36F, (q15_t)0x996C, (q15_t)0xB397, (q15_t)0x994E, - (q15_t)0xB3C0, (q15_t)0x9930, (q15_t)0xB3E8, (q15_t)0x9912, - (q15_t)0xB410, (q15_t)0x98F4, (q15_t)0xB439, (q15_t)0x98D6, - (q15_t)0xB461, (q15_t)0x98B9, (q15_t)0xB48A, (q15_t)0x989B, - (q15_t)0xB4B3, (q15_t)0x987D, (q15_t)0xB4DB, (q15_t)0x9860, - (q15_t)0xB504, (q15_t)0x9842, (q15_t)0xB52D, (q15_t)0x9825, - (q15_t)0xB556, (q15_t)0x9808, (q15_t)0xB57E, (q15_t)0x97EA, - (q15_t)0xB5A7, (q15_t)0x97CD, (q15_t)0xB5D0, (q15_t)0x97B0, - (q15_t)0xB5F9, (q15_t)0x9793, (q15_t)0xB622, (q15_t)0x9776, - (q15_t)0xB64B, (q15_t)0x9759, (q15_t)0xB675, (q15_t)0x973C, - (q15_t)0xB69E, (q15_t)0x971F, (q15_t)0xB6C7, (q15_t)0x9702, - (q15_t)0xB6F0, (q15_t)0x96E6, (q15_t)0xB719, (q15_t)0x96C9, - (q15_t)0xB743, (q15_t)0x96AC, (q15_t)0xB76C, (q15_t)0x9690, - (q15_t)0xB796, (q15_t)0x9673, (q15_t)0xB7BF, (q15_t)0x9657, - (q15_t)0xB7E9, (q15_t)0x963B, (q15_t)0xB812, (q15_t)0x961E, - (q15_t)0xB83C, (q15_t)0x9602, (q15_t)0xB865, (q15_t)0x95E6, - (q15_t)0xB88F, (q15_t)0x95CA, (q15_t)0xB8B9, (q15_t)0x95AE, - (q15_t)0xB8E3, (q15_t)0x9592, (q15_t)0xB90C, (q15_t)0x9576, - (q15_t)0xB936, (q15_t)0x955A, (q15_t)0xB960, (q15_t)0x953E, - (q15_t)0xB98A, (q15_t)0x9523, (q15_t)0xB9B4, (q15_t)0x9507, - (q15_t)0xB9DE, (q15_t)0x94EC, (q15_t)0xBA08, (q15_t)0x94D0, - (q15_t)0xBA32, (q15_t)0x94B5, (q15_t)0xBA5C, (q15_t)0x9499, - (q15_t)0xBA87, (q15_t)0x947E, (q15_t)0xBAB1, (q15_t)0x9463, - (q15_t)0xBADB, (q15_t)0x9447, (q15_t)0xBB05, (q15_t)0x942C, - (q15_t)0xBB30, (q15_t)0x9411, (q15_t)0xBB5A, (q15_t)0x93F6, - (q15_t)0xBB85, (q15_t)0x93DB, (q15_t)0xBBAF, (q15_t)0x93C0, - (q15_t)0xBBDA, (q15_t)0x93A6, (q15_t)0xBC04, (q15_t)0x938B, - (q15_t)0xBC2F, (q15_t)0x9370, (q15_t)0xBC5A, (q15_t)0x9356, - (q15_t)0xBC84, (q15_t)0x933B, (q15_t)0xBCAF, (q15_t)0x9321, - (q15_t)0xBCDA, (q15_t)0x9306, (q15_t)0xBD05, (q15_t)0x92EC, - (q15_t)0xBD2F, (q15_t)0x92D2, (q15_t)0xBD5A, (q15_t)0x92B7, - (q15_t)0xBD85, (q15_t)0x929D, (q15_t)0xBDB0, (q15_t)0x9283, - (q15_t)0xBDDB, (q15_t)0x9269, (q15_t)0xBE06, (q15_t)0x924F, - (q15_t)0xBE31, (q15_t)0x9235, (q15_t)0xBE5D, (q15_t)0x921C, - (q15_t)0xBE88, (q15_t)0x9202, (q15_t)0xBEB3, (q15_t)0x91E8, - (q15_t)0xBEDE, (q15_t)0x91CF, (q15_t)0xBF09, (q15_t)0x91B5, - (q15_t)0xBF35, (q15_t)0x919C, (q15_t)0xBF60, (q15_t)0x9182, - (q15_t)0xBF8C, (q15_t)0x9169, (q15_t)0xBFB7, (q15_t)0x9150, - (q15_t)0xBFE2, (q15_t)0x9136, (q15_t)0xC00E, (q15_t)0x911D, - (q15_t)0xC03A, (q15_t)0x9104, (q15_t)0xC065, (q15_t)0x90EB, - (q15_t)0xC091, (q15_t)0x90D2, (q15_t)0xC0BC, (q15_t)0x90B9, - (q15_t)0xC0E8, (q15_t)0x90A0, (q15_t)0xC114, (q15_t)0x9088, - (q15_t)0xC140, (q15_t)0x906F, (q15_t)0xC16C, (q15_t)0x9056, - (q15_t)0xC197, (q15_t)0x903E, (q15_t)0xC1C3, (q15_t)0x9025, - (q15_t)0xC1EF, (q15_t)0x900D, (q15_t)0xC21B, (q15_t)0x8FF5, - (q15_t)0xC247, (q15_t)0x8FDC, (q15_t)0xC273, (q15_t)0x8FC4, - (q15_t)0xC29F, (q15_t)0x8FAC, (q15_t)0xC2CC, (q15_t)0x8F94, - (q15_t)0xC2F8, (q15_t)0x8F7C, (q15_t)0xC324, (q15_t)0x8F64, - (q15_t)0xC350, (q15_t)0x8F4C, (q15_t)0xC37C, (q15_t)0x8F34, - (q15_t)0xC3A9, (q15_t)0x8F1D, (q15_t)0xC3D5, (q15_t)0x8F05, - (q15_t)0xC402, (q15_t)0x8EED, (q15_t)0xC42E, (q15_t)0x8ED6, - (q15_t)0xC45A, (q15_t)0x8EBE, (q15_t)0xC487, (q15_t)0x8EA7, - (q15_t)0xC4B3, (q15_t)0x8E90, (q15_t)0xC4E0, (q15_t)0x8E79, - (q15_t)0xC50D, (q15_t)0x8E61, (q15_t)0xC539, (q15_t)0x8E4A, - (q15_t)0xC566, (q15_t)0x8E33, (q15_t)0xC593, (q15_t)0x8E1C, - (q15_t)0xC5BF, (q15_t)0x8E05, (q15_t)0xC5EC, (q15_t)0x8DEE, - (q15_t)0xC619, (q15_t)0x8DD8, (q15_t)0xC646, (q15_t)0x8DC1, - (q15_t)0xC673, (q15_t)0x8DAA, (q15_t)0xC6A0, (q15_t)0x8D94, - (q15_t)0xC6CD, (q15_t)0x8D7D, (q15_t)0xC6F9, (q15_t)0x8D67, - (q15_t)0xC727, (q15_t)0x8D50, (q15_t)0xC754, (q15_t)0x8D3A, - (q15_t)0xC781, (q15_t)0x8D24, (q15_t)0xC7AE, (q15_t)0x8D0E, - (q15_t)0xC7DB, (q15_t)0x8CF8, (q15_t)0xC808, (q15_t)0x8CE2, - (q15_t)0xC835, (q15_t)0x8CCC, (q15_t)0xC863, (q15_t)0x8CB6, - (q15_t)0xC890, (q15_t)0x8CA0, (q15_t)0xC8BD, (q15_t)0x8C8A, - (q15_t)0xC8EB, (q15_t)0x8C75, (q15_t)0xC918, (q15_t)0x8C5F, - (q15_t)0xC945, (q15_t)0x8C4A, (q15_t)0xC973, (q15_t)0x8C34, - (q15_t)0xC9A0, (q15_t)0x8C1F, (q15_t)0xC9CE, (q15_t)0x8C09, - (q15_t)0xC9FB, (q15_t)0x8BF4, (q15_t)0xCA29, (q15_t)0x8BDF, - (q15_t)0xCA57, (q15_t)0x8BCA, (q15_t)0xCA84, (q15_t)0x8BB5, - (q15_t)0xCAB2, (q15_t)0x8BA0, (q15_t)0xCAE0, (q15_t)0x8B8B, - (q15_t)0xCB0D, (q15_t)0x8B76, (q15_t)0xCB3B, (q15_t)0x8B61, - (q15_t)0xCB69, (q15_t)0x8B4D, (q15_t)0xCB97, (q15_t)0x8B38, - (q15_t)0xCBC5, (q15_t)0x8B24, (q15_t)0xCBF3, (q15_t)0x8B0F, - (q15_t)0xCC21, (q15_t)0x8AFB, (q15_t)0xCC4F, (q15_t)0x8AE6, - (q15_t)0xCC7D, (q15_t)0x8AD2, (q15_t)0xCCAB, (q15_t)0x8ABE, - (q15_t)0xCCD9, (q15_t)0x8AAA, (q15_t)0xCD07, (q15_t)0x8A96, - (q15_t)0xCD35, (q15_t)0x8A82, (q15_t)0xCD63, (q15_t)0x8A6E, - (q15_t)0xCD91, (q15_t)0x8A5A, (q15_t)0xCDBF, (q15_t)0x8A46, - (q15_t)0xCDEE, (q15_t)0x8A33, (q15_t)0xCE1C, (q15_t)0x8A1F, - (q15_t)0xCE4A, (q15_t)0x8A0B, (q15_t)0xCE79, (q15_t)0x89F8, - (q15_t)0xCEA7, (q15_t)0x89E4, (q15_t)0xCED5, (q15_t)0x89D1, - (q15_t)0xCF04, (q15_t)0x89BE, (q15_t)0xCF32, (q15_t)0x89AB, - (q15_t)0xCF61, (q15_t)0x8997, (q15_t)0xCF8F, (q15_t)0x8984, - (q15_t)0xCFBE, (q15_t)0x8971, (q15_t)0xCFEC, (q15_t)0x895F, - (q15_t)0xD01B, (q15_t)0x894C, (q15_t)0xD04A, (q15_t)0x8939, - (q15_t)0xD078, (q15_t)0x8926, (q15_t)0xD0A7, (q15_t)0x8914, - (q15_t)0xD0D6, (q15_t)0x8901, (q15_t)0xD104, (q15_t)0x88EF, - (q15_t)0xD133, (q15_t)0x88DC, (q15_t)0xD162, (q15_t)0x88CA, - (q15_t)0xD191, (q15_t)0x88B8, (q15_t)0xD1C0, (q15_t)0x88A5, - (q15_t)0xD1EE, (q15_t)0x8893, (q15_t)0xD21D, (q15_t)0x8881, - (q15_t)0xD24C, (q15_t)0x886F, (q15_t)0xD27B, (q15_t)0x885D, - (q15_t)0xD2AA, (q15_t)0x884B, (q15_t)0xD2D9, (q15_t)0x883A, - (q15_t)0xD308, (q15_t)0x8828, (q15_t)0xD337, (q15_t)0x8816, - (q15_t)0xD367, (q15_t)0x8805, (q15_t)0xD396, (q15_t)0x87F3, - (q15_t)0xD3C5, (q15_t)0x87E2, (q15_t)0xD3F4, (q15_t)0x87D1, - (q15_t)0xD423, (q15_t)0x87BF, (q15_t)0xD452, (q15_t)0x87AE, - (q15_t)0xD482, (q15_t)0x879D, (q15_t)0xD4B1, (q15_t)0x878C, - (q15_t)0xD4E0, (q15_t)0x877B, (q15_t)0xD510, (q15_t)0x876A, - (q15_t)0xD53F, (q15_t)0x8759, (q15_t)0xD56E, (q15_t)0x8749, - (q15_t)0xD59E, (q15_t)0x8738, (q15_t)0xD5CD, (q15_t)0x8727, - (q15_t)0xD5FD, (q15_t)0x8717, (q15_t)0xD62C, (q15_t)0x8706, - (q15_t)0xD65C, (q15_t)0x86F6, (q15_t)0xD68B, (q15_t)0x86E6, - (q15_t)0xD6BB, (q15_t)0x86D5, (q15_t)0xD6EA, (q15_t)0x86C5, - (q15_t)0xD71A, (q15_t)0x86B5, (q15_t)0xD74A, (q15_t)0x86A5, - (q15_t)0xD779, (q15_t)0x8695, (q15_t)0xD7A9, (q15_t)0x8685, - (q15_t)0xD7D9, (q15_t)0x8675, (q15_t)0xD809, (q15_t)0x8666, - (q15_t)0xD838, (q15_t)0x8656, (q15_t)0xD868, (q15_t)0x8646, - (q15_t)0xD898, (q15_t)0x8637, (q15_t)0xD8C8, (q15_t)0x8627, - (q15_t)0xD8F8, (q15_t)0x8618, (q15_t)0xD927, (q15_t)0x8609, - (q15_t)0xD957, (q15_t)0x85FA, (q15_t)0xD987, (q15_t)0x85EA, - (q15_t)0xD9B7, (q15_t)0x85DB, (q15_t)0xD9E7, (q15_t)0x85CC, - (q15_t)0xDA17, (q15_t)0x85BD, (q15_t)0xDA47, (q15_t)0x85AF, - (q15_t)0xDA77, (q15_t)0x85A0, (q15_t)0xDAA7, (q15_t)0x8591, - (q15_t)0xDAD7, (q15_t)0x8582, (q15_t)0xDB08, (q15_t)0x8574, - (q15_t)0xDB38, (q15_t)0x8565, (q15_t)0xDB68, (q15_t)0x8557, - (q15_t)0xDB98, (q15_t)0x8549, (q15_t)0xDBC8, (q15_t)0x853A, - (q15_t)0xDBF8, (q15_t)0x852C, (q15_t)0xDC29, (q15_t)0x851E, - (q15_t)0xDC59, (q15_t)0x8510, (q15_t)0xDC89, (q15_t)0x8502, - (q15_t)0xDCBA, (q15_t)0x84F4, (q15_t)0xDCEA, (q15_t)0x84E6, - (q15_t)0xDD1A, (q15_t)0x84D9, (q15_t)0xDD4B, (q15_t)0x84CB, - (q15_t)0xDD7B, (q15_t)0x84BD, (q15_t)0xDDAB, (q15_t)0x84B0, - (q15_t)0xDDDC, (q15_t)0x84A2, (q15_t)0xDE0C, (q15_t)0x8495, - (q15_t)0xDE3D, (q15_t)0x8488, (q15_t)0xDE6D, (q15_t)0x847B, - (q15_t)0xDE9E, (q15_t)0x846D, (q15_t)0xDECE, (q15_t)0x8460, - (q15_t)0xDEFF, (q15_t)0x8453, (q15_t)0xDF2F, (q15_t)0x8446, - (q15_t)0xDF60, (q15_t)0x843A, (q15_t)0xDF91, (q15_t)0x842D, - (q15_t)0xDFC1, (q15_t)0x8420, (q15_t)0xDFF2, (q15_t)0x8414, - (q15_t)0xE023, (q15_t)0x8407, (q15_t)0xE053, (q15_t)0x83FA, - (q15_t)0xE084, (q15_t)0x83EE, (q15_t)0xE0B5, (q15_t)0x83E2, - (q15_t)0xE0E6, (q15_t)0x83D6, (q15_t)0xE116, (q15_t)0x83C9, - (q15_t)0xE147, (q15_t)0x83BD, (q15_t)0xE178, (q15_t)0x83B1, - (q15_t)0xE1A9, (q15_t)0x83A5, (q15_t)0xE1DA, (q15_t)0x8399, - (q15_t)0xE20A, (q15_t)0x838E, (q15_t)0xE23B, (q15_t)0x8382, - (q15_t)0xE26C, (q15_t)0x8376, (q15_t)0xE29D, (q15_t)0x836B, - (q15_t)0xE2CE, (q15_t)0x835F, (q15_t)0xE2FF, (q15_t)0x8354, - (q15_t)0xE330, (q15_t)0x8348, (q15_t)0xE361, (q15_t)0x833D, - (q15_t)0xE392, (q15_t)0x8332, (q15_t)0xE3C3, (q15_t)0x8327, - (q15_t)0xE3F4, (q15_t)0x831C, (q15_t)0xE425, (q15_t)0x8311, - (q15_t)0xE456, (q15_t)0x8306, (q15_t)0xE487, (q15_t)0x82FB, - (q15_t)0xE4B8, (q15_t)0x82F0, (q15_t)0xE4E9, (q15_t)0x82E6, - (q15_t)0xE51B, (q15_t)0x82DB, (q15_t)0xE54C, (q15_t)0x82D0, - (q15_t)0xE57D, (q15_t)0x82C6, (q15_t)0xE5AE, (q15_t)0x82BC, - (q15_t)0xE5DF, (q15_t)0x82B1, (q15_t)0xE610, (q15_t)0x82A7, - (q15_t)0xE642, (q15_t)0x829D, (q15_t)0xE673, (q15_t)0x8293, - (q15_t)0xE6A4, (q15_t)0x8289, (q15_t)0xE6D5, (q15_t)0x827F, - (q15_t)0xE707, (q15_t)0x8275, (q15_t)0xE738, (q15_t)0x826B, - (q15_t)0xE769, (q15_t)0x8262, (q15_t)0xE79B, (q15_t)0x8258, - (q15_t)0xE7CC, (q15_t)0x824F, (q15_t)0xE7FD, (q15_t)0x8245, - (q15_t)0xE82F, (q15_t)0x823C, (q15_t)0xE860, (q15_t)0x8232, - (q15_t)0xE892, (q15_t)0x8229, (q15_t)0xE8C3, (q15_t)0x8220, - (q15_t)0xE8F5, (q15_t)0x8217, (q15_t)0xE926, (q15_t)0x820E, - (q15_t)0xE957, (q15_t)0x8205, (q15_t)0xE989, (q15_t)0x81FC, - (q15_t)0xE9BA, (q15_t)0x81F3, (q15_t)0xE9EC, (q15_t)0x81EB, - (q15_t)0xEA1D, (q15_t)0x81E2, (q15_t)0xEA4F, (q15_t)0x81D9, - (q15_t)0xEA80, (q15_t)0x81D1, (q15_t)0xEAB2, (q15_t)0x81C8, - (q15_t)0xEAE4, (q15_t)0x81C0, (q15_t)0xEB15, (q15_t)0x81B8, - (q15_t)0xEB47, (q15_t)0x81B0, (q15_t)0xEB78, (q15_t)0x81A8, - (q15_t)0xEBAA, (q15_t)0x81A0, (q15_t)0xEBDC, (q15_t)0x8198, - (q15_t)0xEC0D, (q15_t)0x8190, (q15_t)0xEC3F, (q15_t)0x8188, - (q15_t)0xEC71, (q15_t)0x8180, (q15_t)0xECA2, (q15_t)0x8179, - (q15_t)0xECD4, (q15_t)0x8171, (q15_t)0xED06, (q15_t)0x816A, - (q15_t)0xED37, (q15_t)0x8162, (q15_t)0xED69, (q15_t)0x815B, - (q15_t)0xED9B, (q15_t)0x8154, (q15_t)0xEDCD, (q15_t)0x814C, - (q15_t)0xEDFE, (q15_t)0x8145, (q15_t)0xEE30, (q15_t)0x813E, - (q15_t)0xEE62, (q15_t)0x8137, (q15_t)0xEE94, (q15_t)0x8130, - (q15_t)0xEEC6, (q15_t)0x812A, (q15_t)0xEEF7, (q15_t)0x8123, - (q15_t)0xEF29, (q15_t)0x811C, (q15_t)0xEF5B, (q15_t)0x8116, - (q15_t)0xEF8D, (q15_t)0x810F, (q15_t)0xEFBF, (q15_t)0x8109, - (q15_t)0xEFF1, (q15_t)0x8102, (q15_t)0xF022, (q15_t)0x80FC, - (q15_t)0xF054, (q15_t)0x80F6, (q15_t)0xF086, (q15_t)0x80F0, - (q15_t)0xF0B8, (q15_t)0x80EA, (q15_t)0xF0EA, (q15_t)0x80E4, - (q15_t)0xF11C, (q15_t)0x80DE, (q15_t)0xF14E, (q15_t)0x80D8, - (q15_t)0xF180, (q15_t)0x80D2, (q15_t)0xF1B2, (q15_t)0x80CD, - (q15_t)0xF1E4, (q15_t)0x80C7, (q15_t)0xF216, (q15_t)0x80C2, - (q15_t)0xF248, (q15_t)0x80BC, (q15_t)0xF27A, (q15_t)0x80B7, - (q15_t)0xF2AC, (q15_t)0x80B2, (q15_t)0xF2DE, (q15_t)0x80AC, - (q15_t)0xF310, (q15_t)0x80A7, (q15_t)0xF342, (q15_t)0x80A2, - (q15_t)0xF374, (q15_t)0x809D, (q15_t)0xF3A6, (q15_t)0x8098, - (q15_t)0xF3D8, (q15_t)0x8094, (q15_t)0xF40A, (q15_t)0x808F, - (q15_t)0xF43C, (q15_t)0x808A, (q15_t)0xF46E, (q15_t)0x8086, - (q15_t)0xF4A0, (q15_t)0x8081, (q15_t)0xF4D2, (q15_t)0x807D, - (q15_t)0xF504, (q15_t)0x8078, (q15_t)0xF536, (q15_t)0x8074, - (q15_t)0xF568, (q15_t)0x8070, (q15_t)0xF59A, (q15_t)0x806C, - (q15_t)0xF5CC, (q15_t)0x8068, (q15_t)0xF5FF, (q15_t)0x8064, - (q15_t)0xF631, (q15_t)0x8060, (q15_t)0xF663, (q15_t)0x805C, - (q15_t)0xF695, (q15_t)0x8058, (q15_t)0xF6C7, (q15_t)0x8055, - (q15_t)0xF6F9, (q15_t)0x8051, (q15_t)0xF72B, (q15_t)0x804E, - (q15_t)0xF75D, (q15_t)0x804A, (q15_t)0xF790, (q15_t)0x8047, - (q15_t)0xF7C2, (q15_t)0x8043, (q15_t)0xF7F4, (q15_t)0x8040, - (q15_t)0xF826, (q15_t)0x803D, (q15_t)0xF858, (q15_t)0x803A, - (q15_t)0xF88A, (q15_t)0x8037, (q15_t)0xF8BD, (q15_t)0x8034, - (q15_t)0xF8EF, (q15_t)0x8031, (q15_t)0xF921, (q15_t)0x802F, - (q15_t)0xF953, (q15_t)0x802C, (q15_t)0xF985, (q15_t)0x8029, - (q15_t)0xF9B8, (q15_t)0x8027, (q15_t)0xF9EA, (q15_t)0x8025, - (q15_t)0xFA1C, (q15_t)0x8022, (q15_t)0xFA4E, (q15_t)0x8020, - (q15_t)0xFA80, (q15_t)0x801E, (q15_t)0xFAB3, (q15_t)0x801C, - (q15_t)0xFAE5, (q15_t)0x801A, (q15_t)0xFB17, (q15_t)0x8018, - (q15_t)0xFB49, (q15_t)0x8016, (q15_t)0xFB7C, (q15_t)0x8014, - (q15_t)0xFBAE, (q15_t)0x8012, (q15_t)0xFBE0, (q15_t)0x8011, - (q15_t)0xFC12, (q15_t)0x800F, (q15_t)0xFC45, (q15_t)0x800D, - (q15_t)0xFC77, (q15_t)0x800C, (q15_t)0xFCA9, (q15_t)0x800B, - (q15_t)0xFCDB, (q15_t)0x8009, (q15_t)0xFD0E, (q15_t)0x8008, - (q15_t)0xFD40, (q15_t)0x8007, (q15_t)0xFD72, (q15_t)0x8006, - (q15_t)0xFDA4, (q15_t)0x8005, (q15_t)0xFDD7, (q15_t)0x8004, - (q15_t)0xFE09, (q15_t)0x8003, (q15_t)0xFE3B, (q15_t)0x8003, - (q15_t)0xFE6D, (q15_t)0x8002, (q15_t)0xFEA0, (q15_t)0x8001, - (q15_t)0xFED2, (q15_t)0x8001, (q15_t)0xFF04, (q15_t)0x8000, - (q15_t)0xFF36, (q15_t)0x8000, (q15_t)0xFF69, (q15_t)0x8000, - (q15_t)0xFF9B, (q15_t)0x8000, (q15_t)0xFFCD, (q15_t)0x8000 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -/** - @} end of CFFT_CIFFT group -*/ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_16) - -const uint16_t armBitRevIndexTableF64_16[ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH] = -{ - /* radix 4, size 12 */ - 8,64, 16,32, 24,96, 40,80, 56,112, 88,104 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_32) -const uint16_t armBitRevIndexTableF64_32[ARMBITREVINDEXTABLEF64_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_64) -const uint16_t armBitRevIndexTableF64_64[ARMBITREVINDEXTABLEF64_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_128) -const uint16_t armBitRevIndexTableF64_128[ARMBITREVINDEXTABLEF64_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_256) -const uint16_t armBitRevIndexTableF64_256[ARMBITREVINDEXTABLEF64_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_512) -const uint16_t armBitRevIndexTableF64_512[ARMBITREVINDEXTABLEF64_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_1024) -const uint16_t armBitRevIndexTableF64_1024[ARMBITREVINDEXTABLEF64_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_2048) -const uint16_t armBitRevIndexTableF64_2048[ARMBITREVINDEXTABLEF64_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_4096) -const uint16_t armBitRevIndexTableF64_4096[ARMBITREVINDEXTABLEF64_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_16) - -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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_32) - -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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_64) - -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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_128) - -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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_256) - -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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_512) - -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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_1024) - -const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE_1024_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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_2048) - -const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE_2048_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_4096) - -const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE_4096_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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) - -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_32) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_128) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_512) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_2048) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_32) -/** - @par - Example code for Double Precision Floating-point RFFT Twiddle factors Generation: - @par -
    TW = exp(pi/2*i-2*pi*i*[0:L/2-1]/L).' 
    - @par - Real and Imag values are in interleaved fashion -*/ -const uint64_t twiddleCoefF64_rfft_32[32] = { - 0x0000000000000000, 0x3ff0000000000000, // 0, 1 - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, //0.19509, 0.98079 - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, //0.38268, 0.92388 - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, //0.55557, 0.83147 - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, //0.70711, 0.70711 - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, //0.83147, 0.55557 - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, //0.92388, 0.38268 - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, //0.98079, 0.19509 - 0x3ff0000000000000, 0x0000000000000000, // 1, 0 - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, //0.98079,-0.19509 - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, //0.92388,-0.38268 - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, //0.83147,-0.55557 - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, //0.70711,-0.70711 - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, //0.55557,-0.83147 - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, //0.38268,-0.92388 - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, //0.19509,-0.98079 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_64) -const uint64_t twiddleCoefF64_rfft_64[64] = { - 0x0000000000000000, 0x3ff0000000000000, // 0, 1' - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, //0.098017, 0.99518' - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079' - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694' - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388' - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192' - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147' - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301' - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711' - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439' - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557' - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714' - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268' - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028' - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509' - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017' - 0x3ff0000000000000, 0x0000000000000000, // 1, 0' - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518,-0.098017' - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509' - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028' - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268' - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714' - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557' - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439' - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711' - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301' - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147' - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192' - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388' - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694' - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079' - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, //0.098017, -0.99518' -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_128) -const uint64_t twiddleCoefF64_rfft_128[128] = { - 0x0000000000000000, 0x3ff0000000000000, // 0, 1' - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, //0.049068, 0.9988' - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, //0.098017, 0.99518' - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918' - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079' - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003' - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694' - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154' - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388' - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399' - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192' - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773' - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147' - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321' - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301' - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095' - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711' - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156' - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439' - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957' - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557' - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141' - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714' - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756' - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268' - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689' - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028' - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298' - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509' - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673' - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017' - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068' - 0x3ff0000000000000, 0x0000000000000000, // 1, 0' - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988,-0.049068' - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518,-0.098017' - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673' - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509' - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298' - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028' - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689' - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268' - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756' - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714' - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141' - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557' - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957' - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439' - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156' - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711' - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095' - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301' - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321' - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147' - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773' - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192' - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399' - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388' - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154' - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694' - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003' - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079' - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918' - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, //0.098017, -0.99518' - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, //0.049068, -0.9988' -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_256) -const uint64_t twiddleCoefF64_rfft_256[256] = { - 0x0000000000000000, 0x3ff0000000000000, // 0, 1 - 0x3f992155f7a3667e, 0x3feffd886084cd0d, //0.024541, 0.9997 - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, //0.049068, 0.9988 - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, //0.073565, 0.99729 - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, //0.098017, 0.99518 - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248 - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918 - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528 - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079 - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757 - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003 - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378 - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694 - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953 - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154 - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299 - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388 - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421 - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399 - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322 - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192 - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009 - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773 - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485 - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147 - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758 - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321 - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835 - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301 - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721 - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095 - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425 - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711 - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954 - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156 - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317 - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439 - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523 - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957 - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581 - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557 - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535 - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141 - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929 - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714 - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961 - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756 - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524 - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268 - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599 - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689 - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368 - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028 - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671 - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298 - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191 - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509 - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096 - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673 - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241 - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017 - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565 - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068 - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541 - 0x3ff0000000000000, 0x0000000000000000, // 1, 0 - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997,-0.024541 - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988,-0.049068 - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729,-0.073565 - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518,-0.098017 - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241 - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673 - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096 - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509 - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191 - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298 - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671 - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028 - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368 - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689 - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599 - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268 - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524 - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756 - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961 - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714 - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929 - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141 - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535 - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557 - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581 - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957 - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523 - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439 - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317 - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156 - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954 - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711 - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425 - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095 - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721 - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301 - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835 - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321 - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758 - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147 - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485 - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773 - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009 - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192 - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322 - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399 - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421 - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388 - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299 - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154 - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953 - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694 - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378 - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003 - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757 - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079 - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528 - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918 - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248 - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, //0.098017, -0.99518 - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, //0.073565, -0.99729 - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, //0.049068, -0.9988' - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, //0.024541, -0.9997 - - -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_512) -const uint64_t twiddleCoefF64_rfft_512[512] = { - 0x0000000000000000, 0x3ff0000000000000, // 0, 1' - 0x3f8921d1fcdec784, 0x3fefff62169b92db, //0.012272, 0.99992' - 0x3f992155f7a3667e, 0x3feffd886084cd0d, //0.024541, 0.9997' - 0x3fa2d865759455cd, 0x3feffa72effef75d, //0.036807, 0.99932' - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, //0.049068, 0.9988' - 0x3faf656e79f820e0, 0x3feff095658e71ad, //0.061321, 0.99812' - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, //0.073565, 0.99729' - 0x3fb5f6d00a9aa419, 0x3fefe1cafcbd5b09, //0.085797, 0.99631' - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, //0.098017, 0.99518' - 0x3fbc3785c79ec2d5, 0x3fefce15fd6da67b, // 0.11022, 0.99391' - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248' - 0x3fc139f0cedaf576, 0x3fefb5797195d741, // 0.13458, 0.9909' - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918' - 0x3fc45576b1293e5a, 0x3fef97f924c9099b, // 0.15886, 0.9873' - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528' - 0x3fc76dd9de50bf31, 0x3fef7599a3a12077, // 0.18304, 0.98311' - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079' - 0x3fca82a025b00451, 0x3fef4e603b0b2f2d, // 0.20711, 0.97832' - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757' - 0x3fcd934fe5454311, 0x3fef2252f7763ada, // 0.23106, 0.97294' - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003' - 0x3fd04fb80e37fdae, 0x3feef178a3e473c2, // 0.25487, 0.96698' - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378' - 0x3fd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // 0.27852, 0.96043' - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694' - 0x3fd35410c2e18152, 0x3fee817bab4cd10d, // 0.30201, 0.95331' - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953' - 0x3fd4d1e24278e76a, 0x3fee426a4b2bc17e, // 0.32531, 0.94561' - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154' - 0x3fd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // 0.34842, 0.93734' - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299' - 0x3fd7c3a9311dcce7, 0x3fedb6526238a09b, // 0.37132, 0.92851' - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388' - 0x3fd9372a63bc93d7, 0x3fed696173c9e68b, // 0.39399, 0.91911' - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421' - 0x3fdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // 0.41643, 0.90917' - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399' - 0x3fdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // 0.43862, 0.89867' - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322' - 0x3fdd79775b86e389, 0x3fec678b3488739b, // 0.46054, 0.88764' - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192' - 0x3fdedc1952ef78d5, 0x3fec08c426725549, // 0.48218, 0.87607' - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009' - 0x3fe01cfc874c3eb7, 0x3feba5aa673590d2, // 0.50354, 0.86397' - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773' - 0x3fe0c9704d5d898f, 0x3feb3e4d3ef55712, // 0.52459, 0.85136' - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485' - 0x3fe1734d63dedb49, 0x3fead2bc9e21d511, // 0.54532, 0.83822' - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147' - 0x3fe21a799933eb58, 0x3fea63091b02fae2, // 0.56573, 0.82459' - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758' - 0x3fe2bedb25faf3ea, 0x3fe9ef43ef29af94, // 0.5858, 0.81046' - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321' - 0x3fe36058b10659f3, 0x3fe9777ef4c7d742, // 0.60551, 0.79584' - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835' - 0x3fe3fed9534556d4, 0x3fe8fbcca3ef940d, // 0.62486, 0.78074' - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301' - 0x3fe49a449b9b0938, 0x3fe87c400fba2ebf, // 0.64383, 0.76517' - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721' - 0x3fe5328292a35596, 0x3fe7f8ece3571771, // 0.66242, 0.74914' - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095' - 0x3fe5c77bbe65018c, 0x3fe771e75f037261, // 0.6806, 0.73265' - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425' - 0x3fe6591925f0783e, 0x3fe6e74454eaa8ae, // 0.69838, 0.71573' - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711' - 0x3fe6e74454eaa8ae, 0x3fe6591925f0783e, // 0.71573, 0.69838' - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954' - 0x3fe771e75f037261, 0x3fe5c77bbe65018c, // 0.73265, 0.6806' - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156' - 0x3fe7f8ece3571771, 0x3fe5328292a35596, // 0.74914, 0.66242' - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317' - 0x3fe87c400fba2ebf, 0x3fe49a449b9b0938, // 0.76517, 0.64383' - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439' - 0x3fe8fbcca3ef940d, 0x3fe3fed9534556d4, // 0.78074, 0.62486' - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523' - 0x3fe9777ef4c7d742, 0x3fe36058b10659f3, // 0.79584, 0.60551' - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957' - 0x3fe9ef43ef29af94, 0x3fe2bedb25faf3ea, // 0.81046, 0.5858' - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581' - 0x3fea63091b02fae2, 0x3fe21a799933eb58, // 0.82459, 0.56573' - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557' - 0x3fead2bc9e21d511, 0x3fe1734d63dedb49, // 0.83822, 0.54532' - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535' - 0x3feb3e4d3ef55712, 0x3fe0c9704d5d898f, // 0.85136, 0.52459' - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141' - 0x3feba5aa673590d2, 0x3fe01cfc874c3eb7, // 0.86397, 0.50354' - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929' - 0x3fec08c426725549, 0x3fdedc1952ef78d5, // 0.87607, 0.48218' - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714' - 0x3fec678b3488739b, 0x3fdd79775b86e389, // 0.88764, 0.46054' - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961' - 0x3fecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // 0.89867, 0.43862' - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756' - 0x3fed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // 0.90917, 0.41643' - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524' - 0x3fed696173c9e68b, 0x3fd9372a63bc93d7, // 0.91911, 0.39399' - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268' - 0x3fedb6526238a09b, 0x3fd7c3a9311dcce7, // 0.92851, 0.37132' - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599' - 0x3fedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // 0.93734, 0.34842' - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689' - 0x3fee426a4b2bc17e, 0x3fd4d1e24278e76a, // 0.94561, 0.32531' - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368' - 0x3fee817bab4cd10d, 0x3fd35410c2e18152, // 0.95331, 0.30201' - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028' - 0x3feebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // 0.96043, 0.27852' - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671' - 0x3feef178a3e473c2, 0x3fd04fb80e37fdae, // 0.96698, 0.25487' - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298' - 0x3fef2252f7763ada, 0x3fcd934fe5454311, // 0.97294, 0.23106' - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191' - 0x3fef4e603b0b2f2d, 0x3fca82a025b00451, // 0.97832, 0.20711' - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509' - 0x3fef7599a3a12077, 0x3fc76dd9de50bf31, // 0.98311, 0.18304' - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096' - 0x3fef97f924c9099b, 0x3fc45576b1293e5a, // 0.9873, 0.15886' - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673' - 0x3fefb5797195d741, 0x3fc139f0cedaf576, // 0.9909, 0.13458' - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241' - 0x3fefce15fd6da67b, 0x3fbc3785c79ec2d5, // 0.99391, 0.11022' - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017' - 0x3fefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // 0.99631, 0.085797' - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565' - 0x3feff095658e71ad, 0x3faf656e79f820e0, // 0.99812, 0.061321' - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068' - 0x3feffa72effef75d, 0x3fa2d865759455cd, // 0.99932, 0.036807' - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541' - 0x3fefff62169b92db, 0x3f8921d1fcdec784, // 0.99992, 0.012272' - 0x3ff0000000000000, 0x0000000000000000, // 1, 0' - 0x3fefff62169b92db, 0xbf8921d1fcdec784, // 0.99992,-0.012272' - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997,-0.024541' - 0x3feffa72effef75d, 0xbfa2d865759455cd, // 0.99932,-0.036807' - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988,-0.049068' - 0x3feff095658e71ad, 0xbfaf656e79f820e0, // 0.99812,-0.061321' - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729,-0.073565' - 0x3fefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // 0.99631,-0.085797' - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518,-0.098017' - 0x3fefce15fd6da67b, 0xbfbc3785c79ec2d5, // 0.99391, -0.11022' - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241' - 0x3fefb5797195d741, 0xbfc139f0cedaf576, // 0.9909, -0.13458' - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673' - 0x3fef97f924c9099b, 0xbfc45576b1293e5a, // 0.9873, -0.15886' - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096' - 0x3fef7599a3a12077, 0xbfc76dd9de50bf31, // 0.98311, -0.18304' - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509' - 0x3fef4e603b0b2f2d, 0xbfca82a025b00451, // 0.97832, -0.20711' - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191' - 0x3fef2252f7763ada, 0xbfcd934fe5454311, // 0.97294, -0.23106' - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298' - 0x3feef178a3e473c2, 0xbfd04fb80e37fdae, // 0.96698, -0.25487' - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671' - 0x3feebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // 0.96043, -0.27852' - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028' - 0x3fee817bab4cd10d, 0xbfd35410c2e18152, // 0.95331, -0.30201' - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368' - 0x3fee426a4b2bc17e, 0xbfd4d1e24278e76a, // 0.94561, -0.32531' - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689' - 0x3fedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // 0.93734, -0.34842' - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599' - 0x3fedb6526238a09b, 0xbfd7c3a9311dcce7, // 0.92851, -0.37132' - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268' - 0x3fed696173c9e68b, 0xbfd9372a63bc93d7, // 0.91911, -0.39399' - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524' - 0x3fed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // 0.90917, -0.41643' - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756' - 0x3fecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // 0.89867, -0.43862' - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961' - 0x3fec678b3488739b, 0xbfdd79775b86e389, // 0.88764, -0.46054' - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714' - 0x3fec08c426725549, 0xbfdedc1952ef78d5, // 0.87607, -0.48218' - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929' - 0x3feba5aa673590d2, 0xbfe01cfc874c3eb7, // 0.86397, -0.50354' - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141' - 0x3feb3e4d3ef55712, 0xbfe0c9704d5d898f, // 0.85136, -0.52459' - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535' - 0x3fead2bc9e21d511, 0xbfe1734d63dedb49, // 0.83822, -0.54532' - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557' - 0x3fea63091b02fae2, 0xbfe21a799933eb58, // 0.82459, -0.56573' - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581' - 0x3fe9ef43ef29af94, 0xbfe2bedb25faf3ea, // 0.81046, -0.5858' - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957' - 0x3fe9777ef4c7d742, 0xbfe36058b10659f3, // 0.79584, -0.60551' - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523' - 0x3fe8fbcca3ef940d, 0xbfe3fed9534556d4, // 0.78074, -0.62486' - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439' - 0x3fe87c400fba2ebf, 0xbfe49a449b9b0938, // 0.76517, -0.64383' - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317' - 0x3fe7f8ece3571771, 0xbfe5328292a35596, // 0.74914, -0.66242' - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156' - 0x3fe771e75f037261, 0xbfe5c77bbe65018c, // 0.73265, -0.6806' - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954' - 0x3fe6e74454eaa8ae, 0xbfe6591925f0783e, // 0.71573, -0.69838' - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711' - 0x3fe6591925f0783e, 0xbfe6e74454eaa8ae, // 0.69838, -0.71573' - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425' - 0x3fe5c77bbe65018c, 0xbfe771e75f037261, // 0.6806, -0.73265' - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095' - 0x3fe5328292a35596, 0xbfe7f8ece3571771, // 0.66242, -0.74914' - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721' - 0x3fe49a449b9b0938, 0xbfe87c400fba2ebf, // 0.64383, -0.76517' - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301' - 0x3fe3fed9534556d4, 0xbfe8fbcca3ef940d, // 0.62486, -0.78074' - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835' - 0x3fe36058b10659f3, 0xbfe9777ef4c7d742, // 0.60551, -0.79584' - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321' - 0x3fe2bedb25faf3ea, 0xbfe9ef43ef29af94, // 0.5858, -0.81046' - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758' - 0x3fe21a799933eb58, 0xbfea63091b02fae2, // 0.56573, -0.82459' - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147' - 0x3fe1734d63dedb49, 0xbfead2bc9e21d511, // 0.54532, -0.83822' - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485' - 0x3fe0c9704d5d898f, 0xbfeb3e4d3ef55712, // 0.52459, -0.85136' - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773' - 0x3fe01cfc874c3eb7, 0xbfeba5aa673590d2, // 0.50354, -0.86397' - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009' - 0x3fdedc1952ef78d5, 0xbfec08c426725549, // 0.48218, -0.87607' - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192' - 0x3fdd79775b86e389, 0xbfec678b3488739b, // 0.46054, -0.88764' - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322' - 0x3fdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // 0.43862, -0.89867' - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399' - 0x3fdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // 0.41643, -0.90917' - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421' - 0x3fd9372a63bc93d7, 0xbfed696173c9e68b, // 0.39399, -0.91911' - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388' - 0x3fd7c3a9311dcce7, 0xbfedb6526238a09b, // 0.37132, -0.92851' - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299' - 0x3fd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // 0.34842, -0.93734' - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154' - 0x3fd4d1e24278e76a, 0xbfee426a4b2bc17e, // 0.32531, -0.94561' - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953' - 0x3fd35410c2e18152, 0xbfee817bab4cd10d, // 0.30201, -0.95331' - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694' - 0x3fd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // 0.27852, -0.96043' - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378' - 0x3fd04fb80e37fdae, 0xbfeef178a3e473c2, // 0.25487, -0.96698' - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003' - 0x3fcd934fe5454311, 0xbfef2252f7763ada, // 0.23106, -0.97294' - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757' - 0x3fca82a025b00451, 0xbfef4e603b0b2f2d, // 0.20711, -0.97832' - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079' - 0x3fc76dd9de50bf31, 0xbfef7599a3a12077, // 0.18304, -0.98311' - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528' - 0x3fc45576b1293e5a, 0xbfef97f924c9099b, // 0.15886, -0.9873' - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918' - 0x3fc139f0cedaf576, 0xbfefb5797195d741, // 0.13458, -0.9909' - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248' - 0x3fbc3785c79ec2d5, 0xbfefce15fd6da67b, // 0.11022, -0.99391' - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, //0.098017, -0.99518' - 0x3fb5f6d00a9aa419, 0xbfefe1cafcbd5b09, //0.085797, -0.99631' - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, //0.073565, -0.99729' - 0x3faf656e79f820e0, 0xbfeff095658e71ad, //0.061321, -0.99812' - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, //0.049068, -0.9988' - 0x3fa2d865759455cd, 0xbfeffa72effef75d, //0.036807, -0.99932' - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, //0.024541, -0.9997' - 0x3f8921d1fcdec784, 0xbfefff62169b92db, //0.012272, -0.99992' - - -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_1024) -const uint64_t twiddleCoefF64_rfft_1024[1024] = { - 0x0000000000000000, 0x3ff0000000000000, // 0, 1' - 0x3f7921f0fe670071, 0x3fefffd8858e8a92, //0.0061359, 0.99998' - 0x3f8921d1fcdec784, 0x3fefff62169b92db, // 0.012272, 0.99992' - 0x3f92d936bbe30efd, 0x3feffe9cb44b51a1, // 0.018407, 0.99983' - 0x3f992155f7a3667e, 0x3feffd886084cd0d, // 0.024541, 0.9997' - 0x3f9f693731d1cf01, 0x3feffc251df1d3f8, // 0.030675, 0.99953' - 0x3fa2d865759455cd, 0x3feffa72effef75d, // 0.036807, 0.99932' - 0x3fa5fc00d290cd43, 0x3feff871dadb81df, // 0.042938, 0.99908' - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, // 0.049068, 0.9988' - 0x3fac428d12c0d7e3, 0x3feff3830f8d575c, // 0.055195, 0.99848' - 0x3faf656e79f820e0, 0x3feff095658e71ad, // 0.061321, 0.99812' - 0x3fb1440134d709b2, 0x3fefed58ecb673c4, // 0.067444, 0.99772' - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, // 0.073565, 0.99729' - 0x3fb4661179272096, 0x3fefe5f3af2e3940, // 0.079682, 0.99682' - 0x3fb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // 0.085797, 0.99631' - 0x3fb787586a5d5b21, 0x3fefdd539ff1f456, // 0.091909, 0.99577' - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518' - 0x3fbaa7b724495c04, 0x3fefd37914220b84, // 0.10412, 0.99456' - 0x3fbc3785c79ec2d5, 0x3fefce15fd6da67b, // 0.11022, 0.99391' - 0x3fbdc70ecbae9fc8, 0x3fefc8646cfeb721, // 0.11632, 0.99321' - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248' - 0x3fc072a047ba831d, 0x3fefbc1617e44186, // 0.1285, 0.99171' - 0x3fc139f0cedaf576, 0x3fefb5797195d741, // 0.13458, 0.9909' - 0x3fc20116d4ec7bce, 0x3fefae8e8e46cfbb, // 0.14066, 0.99006' - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918' - 0x3fc38edbb0cd8d14, 0x3fef9fce55adb2c8, // 0.1528, 0.98826' - 0x3fc45576b1293e5a, 0x3fef97f924c9099b, // 0.15886, 0.9873' - 0x3fc51bdf8597c5f2, 0x3fef8fd5ffae41db, // 0.16491, 0.98631' - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528' - 0x3fc6a81304f64ab2, 0x3fef7ea629e63d6e, // 0.177, 0.98421' - 0x3fc76dd9de50bf31, 0x3fef7599a3a12077, // 0.18304, 0.98311' - 0x3fc83366e89c64c5, 0x3fef6c3f7df5bbb7, // 0.18907, 0.98196' - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079' - 0x3fc9bdcbf2dc4366, 0x3fef58a2b1789e84, // 0.2011, 0.97957' - 0x3fca82a025b00451, 0x3fef4e603b0b2f2d, // 0.20711, 0.97832' - 0x3fcb4732ef3d6722, 0x3fef43d085ff92dd, // 0.21311, 0.97703' - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757' - 0x3fcccf8cb312b286, 0x3fef2dc9c9089a9d, // 0.22508, 0.97434' - 0x3fcd934fe5454311, 0x3fef2252f7763ada, // 0.23106, 0.97294' - 0x3fce56ca1e101a1b, 0x3fef168f53f7205d, // 0.23702, 0.9715' - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003' - 0x3fcfdcdc1adfedf8, 0x3feefe220c0b95ec, // 0.24893, 0.96852' - 0x3fd04fb80e37fdae, 0x3feef178a3e473c2, // 0.25487, 0.96698' - 0x3fd0b0d9cfdbdb90, 0x3feee482e25a9dbc, // 0.26079, 0.96539' - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378' - 0x3fd172a0d7765177, 0x3feec9b2d3c3bf84, // 0.27262, 0.96212' - 0x3fd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // 0.27852, 0.96043' - 0x3fd233bbabc3bb72, 0x3feeadb2e8e7a88e, // 0.28441, 0.9587' - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694' - 0x3fd2f422daec0386, 0x3fee9084361df7f3, // 0.29615, 0.95514' - 0x3fd35410c2e18152, 0x3fee817bab4cd10d, // 0.30201, 0.95331' - 0x3fd3b3cefa0414b7, 0x3fee7227db6a9744, // 0.30785, 0.95144' - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953' - 0x3fd472b8a5571054, 0x3fee529f04729ffc, // 0.3195, 0.94759' - 0x3fd4d1e24278e76a, 0x3fee426a4b2bc17e, // 0.32531, 0.94561' - 0x3fd530d880af3c24, 0x3fee31eae870ce25, // 0.33111, 0.94359' - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154' - 0x3fd5ee27379ea693, 0x3fee100cca2980ac, // 0.34266, 0.93946' - 0x3fd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // 0.34842, 0.93734' - 0x3fd6aa9d7dc77e16, 0x3feded05f7de47da, // 0.35416, 0.93518' - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299' - 0x3fd766340f2418f6, 0x3fedc8d7cb410260, // 0.36561, 0.93077' - 0x3fd7c3a9311dcce7, 0x3fedb6526238a09b, // 0.37132, 0.92851' - 0x3fd820e3b04eaac4, 0x3feda383a9668988, // 0.37701, 0.92621' - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388' - 0x3fd8daa52ec8a4af, 0x3fed7d0b02b8ecf9, // 0.38835, 0.92151' - 0x3fd9372a63bc93d7, 0x3fed696173c9e68b, // 0.39399, 0.91911' - 0x3fd993716141bdfe, 0x3fed556f52e93eb1, // 0.39962, 0.91668' - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421' - 0x3fda4b4127dea1e4, 0x3fed2cb220e0ef9f, // 0.41084, 0.91171' - 0x3fdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // 0.41643, 0.90917' - 0x3fdb020d6c7f4009, 0x3fed02d4feb2bd92, // 0.422, 0.9066' - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399' - 0x3fdbb7cf2304bd01, 0x3fecd7d9898b32f6, // 0.43309, 0.90135' - 0x3fdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // 0.43862, 0.89867' - 0x3fdc6c7f4997000a, 0x3fecabc169a0b901, // 0.44412, 0.89597' - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322' - 0x3fdd2016e8e9db5b, 0x3fec7e8e52233cf3, // 0.45508, 0.89045' - 0x3fdd79775b86e389, 0x3fec678b3488739b, // 0.46054, 0.88764' - 0x3fddd28f1481cc58, 0x3fec5042012b6907, // 0.46598, 0.8848' - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192' - 0x3fde83e0eaf85113, 0x3fec20de3fa971b0, // 0.4768, 0.87901' - 0x3fdedc1952ef78d5, 0x3fec08c426725549, // 0.48218, 0.87607' - 0x3fdf3405963fd068, 0x3febf064e15377dd, // 0.48755, 0.87309' - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009' - 0x3fdfe2f64be7120f, 0x3febbed7c49380ea, // 0.49823, 0.86705' - 0x3fe01cfc874c3eb7, 0x3feba5aa673590d2, // 0.50354, 0.86397' - 0x3fe0485626ae221a, 0x3feb8c38d27504e9, // 0.50883, 0.86087' - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773' - 0x3fe09e907417c5e1, 0x3feb5889fe921405, // 0.51936, 0.85456' - 0x3fe0c9704d5d898f, 0x3feb3e4d3ef55712, // 0.52459, 0.85136' - 0x3fe0f426bb2a8e7d, 0x3feb23cd470013b4, // 0.5298, 0.84812' - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485' - 0x3fe14915af336ceb, 0x3feaee04b43c1474, // 0.54017, 0.84155' - 0x3fe1734d63dedb49, 0x3fead2bc9e21d511, // 0.54532, 0.83822' - 0x3fe19d5a09f2b9b8, 0x3feab7325916c0d4, // 0.55046, 0.83486' - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147' - 0x3fe1f0f08bbc861b, 0x3fea7f58529fe69d, // 0.56066, 0.82805' - 0x3fe21a799933eb58, 0x3fea63091b02fae2, // 0.56573, 0.82459' - 0x3fe243d5fb98ac1f, 0x3fea4678c8119ac8, // 0.57078, 0.8211' - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758' - 0x3fe2960727629ca8, 0x3fea0c95eabaf937, // 0.58081, 0.81404' - 0x3fe2bedb25faf3ea, 0x3fe9ef43ef29af94, // 0.5858, 0.81046' - 0x3fe2e780e3e8ea16, 0x3fe9d1b1f5ea80d6, // 0.59076, 0.80685' - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321' - 0x3fe338400d0c8e57, 0x3fe995cf2ed80d22, // 0.60062, 0.79954' - 0x3fe36058b10659f3, 0x3fe9777ef4c7d742, // 0.60551, 0.79584' - 0x3fe3884185dfeb22, 0x3fe958efe48e6dd7, // 0.61038, 0.79211' - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835' - 0x3fe3d78238c58343, 0x3fe91b166fd49da2, // 0.62006, 0.78456' - 0x3fe3fed9534556d4, 0x3fe8fbcca3ef940d, // 0.62486, 0.78074' - 0x3fe425ff178e6bb1, 0x3fe8dc45331698cc, // 0.62964, 0.77689' - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301' - 0x3fe473b51b987347, 0x3fe89c7e9a4dd4ab, // 0.63912, 0.7691' - 0x3fe49a449b9b0938, 0x3fe87c400fba2ebf, // 0.64383, 0.76517' - 0x3fe4c0a145ec0004, 0x3fe85bc51ae958cc, // 0.64851, 0.7612' - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721' - 0x3fe50cc09f59a09b, 0x3fe81a1b33b57acc, // 0.65781, 0.75319' - 0x3fe5328292a35596, 0x3fe7f8ece3571771, // 0.66242, 0.74914' - 0x3fe5581038975137, 0x3fe7d7836cc33db2, // 0.667, 0.74506' - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095' - 0x3fe5a28d2a5d7250, 0x3fe79400574f55e4, // 0.67609, 0.73682' - 0x3fe5c77bbe65018c, 0x3fe771e75f037261, // 0.6806, 0.73265' - 0x3fe5ec3495837074, 0x3fe74f948da8d28d, // 0.68508, 0.72846' - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425' - 0x3fe63503a31c1be8, 0x3fe70a42b3176d7a, // 0.69397, 0.72' - 0x3fe6591925f0783e, 0x3fe6e74454eaa8ae, // 0.69838, 0.71573' - 0x3fe67cf78491af10, 0x3fe6c40d73c18275, // 0.70275, 0.71143' - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711' - 0x3fe6c40d73c18275, 0x3fe67cf78491af10, // 0.71143, 0.70275' - 0x3fe6e74454eaa8ae, 0x3fe6591925f0783e, // 0.71573, 0.69838' - 0x3fe70a42b3176d7a, 0x3fe63503a31c1be8, // 0.72, 0.69397' - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954' - 0x3fe74f948da8d28d, 0x3fe5ec3495837074, // 0.72846, 0.68508' - 0x3fe771e75f037261, 0x3fe5c77bbe65018c, // 0.73265, 0.6806' - 0x3fe79400574f55e4, 0x3fe5a28d2a5d7250, // 0.73682, 0.67609' - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156' - 0x3fe7d7836cc33db2, 0x3fe5581038975137, // 0.74506, 0.667' - 0x3fe7f8ece3571771, 0x3fe5328292a35596, // 0.74914, 0.66242' - 0x3fe81a1b33b57acc, 0x3fe50cc09f59a09b, // 0.75319, 0.65781' - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317' - 0x3fe85bc51ae958cc, 0x3fe4c0a145ec0004, // 0.7612, 0.64851' - 0x3fe87c400fba2ebf, 0x3fe49a449b9b0938, // 0.76517, 0.64383' - 0x3fe89c7e9a4dd4ab, 0x3fe473b51b987347, // 0.7691, 0.63912' - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439' - 0x3fe8dc45331698cc, 0x3fe425ff178e6bb1, // 0.77689, 0.62964' - 0x3fe8fbcca3ef940d, 0x3fe3fed9534556d4, // 0.78074, 0.62486' - 0x3fe91b166fd49da2, 0x3fe3d78238c58343, // 0.78456, 0.62006' - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523' - 0x3fe958efe48e6dd7, 0x3fe3884185dfeb22, // 0.79211, 0.61038' - 0x3fe9777ef4c7d742, 0x3fe36058b10659f3, // 0.79584, 0.60551' - 0x3fe995cf2ed80d22, 0x3fe338400d0c8e57, // 0.79954, 0.60062' - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957' - 0x3fe9d1b1f5ea80d6, 0x3fe2e780e3e8ea16, // 0.80685, 0.59076' - 0x3fe9ef43ef29af94, 0x3fe2bedb25faf3ea, // 0.81046, 0.5858' - 0x3fea0c95eabaf937, 0x3fe2960727629ca8, // 0.81404, 0.58081' - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581' - 0x3fea4678c8119ac8, 0x3fe243d5fb98ac1f, // 0.8211, 0.57078' - 0x3fea63091b02fae2, 0x3fe21a799933eb58, // 0.82459, 0.56573' - 0x3fea7f58529fe69d, 0x3fe1f0f08bbc861b, // 0.82805, 0.56066' - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557' - 0x3feab7325916c0d4, 0x3fe19d5a09f2b9b8, // 0.83486, 0.55046' - 0x3fead2bc9e21d511, 0x3fe1734d63dedb49, // 0.83822, 0.54532' - 0x3feaee04b43c1474, 0x3fe14915af336ceb, // 0.84155, 0.54017' - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535' - 0x3feb23cd470013b4, 0x3fe0f426bb2a8e7d, // 0.84812, 0.5298' - 0x3feb3e4d3ef55712, 0x3fe0c9704d5d898f, // 0.85136, 0.52459' - 0x3feb5889fe921405, 0x3fe09e907417c5e1, // 0.85456, 0.51936' - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141' - 0x3feb8c38d27504e9, 0x3fe0485626ae221a, // 0.86087, 0.50883' - 0x3feba5aa673590d2, 0x3fe01cfc874c3eb7, // 0.86397, 0.50354' - 0x3febbed7c49380ea, 0x3fdfe2f64be7120f, // 0.86705, 0.49823' - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929' - 0x3febf064e15377dd, 0x3fdf3405963fd068, // 0.87309, 0.48755' - 0x3fec08c426725549, 0x3fdedc1952ef78d5, // 0.87607, 0.48218' - 0x3fec20de3fa971b0, 0x3fde83e0eaf85113, // 0.87901, 0.4768' - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714' - 0x3fec5042012b6907, 0x3fddd28f1481cc58, // 0.8848, 0.46598' - 0x3fec678b3488739b, 0x3fdd79775b86e389, // 0.88764, 0.46054' - 0x3fec7e8e52233cf3, 0x3fdd2016e8e9db5b, // 0.89045, 0.45508' - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961' - 0x3fecabc169a0b901, 0x3fdc6c7f4997000a, // 0.89597, 0.44412' - 0x3fecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // 0.89867, 0.43862' - 0x3fecd7d9898b32f6, 0x3fdbb7cf2304bd01, // 0.90135, 0.43309' - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756' - 0x3fed02d4feb2bd92, 0x3fdb020d6c7f4009, // 0.9066, 0.422' - 0x3fed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // 0.90917, 0.41643' - 0x3fed2cb220e0ef9f, 0x3fda4b4127dea1e4, // 0.91171, 0.41084' - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524' - 0x3fed556f52e93eb1, 0x3fd993716141bdfe, // 0.91668, 0.39962' - 0x3fed696173c9e68b, 0x3fd9372a63bc93d7, // 0.91911, 0.39399' - 0x3fed7d0b02b8ecf9, 0x3fd8daa52ec8a4af, // 0.92151, 0.38835' - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268' - 0x3feda383a9668988, 0x3fd820e3b04eaac4, // 0.92621, 0.37701' - 0x3fedb6526238a09b, 0x3fd7c3a9311dcce7, // 0.92851, 0.37132' - 0x3fedc8d7cb410260, 0x3fd766340f2418f6, // 0.93077, 0.36561' - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599' - 0x3feded05f7de47da, 0x3fd6aa9d7dc77e16, // 0.93518, 0.35416' - 0x3fedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // 0.93734, 0.34842' - 0x3fee100cca2980ac, 0x3fd5ee27379ea693, // 0.93946, 0.34266' - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689' - 0x3fee31eae870ce25, 0x3fd530d880af3c24, // 0.94359, 0.33111' - 0x3fee426a4b2bc17e, 0x3fd4d1e24278e76a, // 0.94561, 0.32531' - 0x3fee529f04729ffc, 0x3fd472b8a5571054, // 0.94759, 0.3195' - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368' - 0x3fee7227db6a9744, 0x3fd3b3cefa0414b7, // 0.95144, 0.30785' - 0x3fee817bab4cd10d, 0x3fd35410c2e18152, // 0.95331, 0.30201' - 0x3fee9084361df7f3, 0x3fd2f422daec0386, // 0.95514, 0.29615' - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028' - 0x3feeadb2e8e7a88e, 0x3fd233bbabc3bb72, // 0.9587, 0.28441' - 0x3feebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // 0.96043, 0.27852' - 0x3feec9b2d3c3bf84, 0x3fd172a0d7765177, // 0.96212, 0.27262' - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671' - 0x3feee482e25a9dbc, 0x3fd0b0d9cfdbdb90, // 0.96539, 0.26079' - 0x3feef178a3e473c2, 0x3fd04fb80e37fdae, // 0.96698, 0.25487' - 0x3feefe220c0b95ec, 0x3fcfdcdc1adfedf8, // 0.96852, 0.24893' - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298' - 0x3fef168f53f7205d, 0x3fce56ca1e101a1b, // 0.9715, 0.23702' - 0x3fef2252f7763ada, 0x3fcd934fe5454311, // 0.97294, 0.23106' - 0x3fef2dc9c9089a9d, 0x3fcccf8cb312b286, // 0.97434, 0.22508' - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191' - 0x3fef43d085ff92dd, 0x3fcb4732ef3d6722, // 0.97703, 0.21311' - 0x3fef4e603b0b2f2d, 0x3fca82a025b00451, // 0.97832, 0.20711' - 0x3fef58a2b1789e84, 0x3fc9bdcbf2dc4366, // 0.97957, 0.2011' - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509' - 0x3fef6c3f7df5bbb7, 0x3fc83366e89c64c5, // 0.98196, 0.18907' - 0x3fef7599a3a12077, 0x3fc76dd9de50bf31, // 0.98311, 0.18304' - 0x3fef7ea629e63d6e, 0x3fc6a81304f64ab2, // 0.98421, 0.177' - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096' - 0x3fef8fd5ffae41db, 0x3fc51bdf8597c5f2, // 0.98631, 0.16491' - 0x3fef97f924c9099b, 0x3fc45576b1293e5a, // 0.9873, 0.15886' - 0x3fef9fce55adb2c8, 0x3fc38edbb0cd8d14, // 0.98826, 0.1528' - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673' - 0x3fefae8e8e46cfbb, 0x3fc20116d4ec7bce, // 0.99006, 0.14066' - 0x3fefb5797195d741, 0x3fc139f0cedaf576, // 0.9909, 0.13458' - 0x3fefbc1617e44186, 0x3fc072a047ba831d, // 0.99171, 0.1285' - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241' - 0x3fefc8646cfeb721, 0x3fbdc70ecbae9fc8, // 0.99321, 0.11632' - 0x3fefce15fd6da67b, 0x3fbc3785c79ec2d5, // 0.99391, 0.11022' - 0x3fefd37914220b84, 0x3fbaa7b724495c04, // 0.99456, 0.10412' - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017' - 0x3fefdd539ff1f456, 0x3fb787586a5d5b21, // 0.99577, 0.091909' - 0x3fefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // 0.99631, 0.085797' - 0x3fefe5f3af2e3940, 0x3fb4661179272096, // 0.99682, 0.079682' - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565' - 0x3fefed58ecb673c4, 0x3fb1440134d709b2, // 0.99772, 0.067444' - 0x3feff095658e71ad, 0x3faf656e79f820e0, // 0.99812, 0.061321' - 0x3feff3830f8d575c, 0x3fac428d12c0d7e3, // 0.99848, 0.055195' - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068' - 0x3feff871dadb81df, 0x3fa5fc00d290cd43, // 0.99908, 0.042938' - 0x3feffa72effef75d, 0x3fa2d865759455cd, // 0.99932, 0.036807' - 0x3feffc251df1d3f8, 0x3f9f693731d1cf01, // 0.99953, 0.030675' - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541' - 0x3feffe9cb44b51a1, 0x3f92d936bbe30efd, // 0.99983, 0.018407' - 0x3fefff62169b92db, 0x3f8921d1fcdec784, // 0.99992, 0.012272' - 0x3fefffd8858e8a92, 0x3f7921f0fe670071, // 0.99998, 0.0061359' - 0x3ff0000000000000, 0x0000000000000000, // 1, 0' - 0x3fefffd8858e8a92, 0xbf7921f0fe670071, // 0.99998,-0.0061359' - 0x3fefff62169b92db, 0xbf8921d1fcdec784, // 0.99992, -0.012272' - 0x3feffe9cb44b51a1, 0xbf92d936bbe30efd, // 0.99983, -0.018407' - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997, -0.024541' - 0x3feffc251df1d3f8, 0xbf9f693731d1cf01, // 0.99953, -0.030675' - 0x3feffa72effef75d, 0xbfa2d865759455cd, // 0.99932, -0.036807' - 0x3feff871dadb81df, 0xbfa5fc00d290cd43, // 0.99908, -0.042938' - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988, -0.049068' - 0x3feff3830f8d575c, 0xbfac428d12c0d7e3, // 0.99848, -0.055195' - 0x3feff095658e71ad, 0xbfaf656e79f820e0, // 0.99812, -0.061321' - 0x3fefed58ecb673c4, 0xbfb1440134d709b2, // 0.99772, -0.067444' - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729, -0.073565' - 0x3fefe5f3af2e3940, 0xbfb4661179272096, // 0.99682, -0.079682' - 0x3fefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // 0.99631, -0.085797' - 0x3fefdd539ff1f456, 0xbfb787586a5d5b21, // 0.99577, -0.091909' - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518, -0.098017' - 0x3fefd37914220b84, 0xbfbaa7b724495c04, // 0.99456, -0.10412' - 0x3fefce15fd6da67b, 0xbfbc3785c79ec2d5, // 0.99391, -0.11022' - 0x3fefc8646cfeb721, 0xbfbdc70ecbae9fc8, // 0.99321, -0.11632' - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241' - 0x3fefbc1617e44186, 0xbfc072a047ba831d, // 0.99171, -0.1285' - 0x3fefb5797195d741, 0xbfc139f0cedaf576, // 0.9909, -0.13458' - 0x3fefae8e8e46cfbb, 0xbfc20116d4ec7bce, // 0.99006, -0.14066' - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673' - 0x3fef9fce55adb2c8, 0xbfc38edbb0cd8d14, // 0.98826, -0.1528' - 0x3fef97f924c9099b, 0xbfc45576b1293e5a, // 0.9873, -0.15886' - 0x3fef8fd5ffae41db, 0xbfc51bdf8597c5f2, // 0.98631, -0.16491' - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096' - 0x3fef7ea629e63d6e, 0xbfc6a81304f64ab2, // 0.98421, -0.177' - 0x3fef7599a3a12077, 0xbfc76dd9de50bf31, // 0.98311, -0.18304' - 0x3fef6c3f7df5bbb7, 0xbfc83366e89c64c5, // 0.98196, -0.18907' - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509' - 0x3fef58a2b1789e84, 0xbfc9bdcbf2dc4366, // 0.97957, -0.2011' - 0x3fef4e603b0b2f2d, 0xbfca82a025b00451, // 0.97832, -0.20711' - 0x3fef43d085ff92dd, 0xbfcb4732ef3d6722, // 0.97703, -0.21311' - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191' - 0x3fef2dc9c9089a9d, 0xbfcccf8cb312b286, // 0.97434, -0.22508' - 0x3fef2252f7763ada, 0xbfcd934fe5454311, // 0.97294, -0.23106' - 0x3fef168f53f7205d, 0xbfce56ca1e101a1b, // 0.9715, -0.23702' - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298' - 0x3feefe220c0b95ec, 0xbfcfdcdc1adfedf8, // 0.96852, -0.24893' - 0x3feef178a3e473c2, 0xbfd04fb80e37fdae, // 0.96698, -0.25487' - 0x3feee482e25a9dbc, 0xbfd0b0d9cfdbdb90, // 0.96539, -0.26079' - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671' - 0x3feec9b2d3c3bf84, 0xbfd172a0d7765177, // 0.96212, -0.27262' - 0x3feebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // 0.96043, -0.27852' - 0x3feeadb2e8e7a88e, 0xbfd233bbabc3bb72, // 0.9587, -0.28441' - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028' - 0x3fee9084361df7f3, 0xbfd2f422daec0386, // 0.95514, -0.29615' - 0x3fee817bab4cd10d, 0xbfd35410c2e18152, // 0.95331, -0.30201' - 0x3fee7227db6a9744, 0xbfd3b3cefa0414b7, // 0.95144, -0.30785' - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368' - 0x3fee529f04729ffc, 0xbfd472b8a5571054, // 0.94759, -0.3195' - 0x3fee426a4b2bc17e, 0xbfd4d1e24278e76a, // 0.94561, -0.32531' - 0x3fee31eae870ce25, 0xbfd530d880af3c24, // 0.94359, -0.33111' - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689' - 0x3fee100cca2980ac, 0xbfd5ee27379ea693, // 0.93946, -0.34266' - 0x3fedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // 0.93734, -0.34842' - 0x3feded05f7de47da, 0xbfd6aa9d7dc77e16, // 0.93518, -0.35416' - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599' - 0x3fedc8d7cb410260, 0xbfd766340f2418f6, // 0.93077, -0.36561' - 0x3fedb6526238a09b, 0xbfd7c3a9311dcce7, // 0.92851, -0.37132' - 0x3feda383a9668988, 0xbfd820e3b04eaac4, // 0.92621, -0.37701' - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268' - 0x3fed7d0b02b8ecf9, 0xbfd8daa52ec8a4af, // 0.92151, -0.38835' - 0x3fed696173c9e68b, 0xbfd9372a63bc93d7, // 0.91911, -0.39399' - 0x3fed556f52e93eb1, 0xbfd993716141bdfe, // 0.91668, -0.39962' - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524' - 0x3fed2cb220e0ef9f, 0xbfda4b4127dea1e4, // 0.91171, -0.41084' - 0x3fed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // 0.90917, -0.41643' - 0x3fed02d4feb2bd92, 0xbfdb020d6c7f4009, // 0.9066, -0.422' - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756' - 0x3fecd7d9898b32f6, 0xbfdbb7cf2304bd01, // 0.90135, -0.43309' - 0x3fecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // 0.89867, -0.43862' - 0x3fecabc169a0b901, 0xbfdc6c7f4997000a, // 0.89597, -0.44412' - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961' - 0x3fec7e8e52233cf3, 0xbfdd2016e8e9db5b, // 0.89045, -0.45508' - 0x3fec678b3488739b, 0xbfdd79775b86e389, // 0.88764, -0.46054' - 0x3fec5042012b6907, 0xbfddd28f1481cc58, // 0.8848, -0.46598' - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714' - 0x3fec20de3fa971b0, 0xbfde83e0eaf85113, // 0.87901, -0.4768' - 0x3fec08c426725549, 0xbfdedc1952ef78d5, // 0.87607, -0.48218' - 0x3febf064e15377dd, 0xbfdf3405963fd068, // 0.87309, -0.48755' - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929' - 0x3febbed7c49380ea, 0xbfdfe2f64be7120f, // 0.86705, -0.49823' - 0x3feba5aa673590d2, 0xbfe01cfc874c3eb7, // 0.86397, -0.50354' - 0x3feb8c38d27504e9, 0xbfe0485626ae221a, // 0.86087, -0.50883' - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141' - 0x3feb5889fe921405, 0xbfe09e907417c5e1, // 0.85456, -0.51936' - 0x3feb3e4d3ef55712, 0xbfe0c9704d5d898f, // 0.85136, -0.52459' - 0x3feb23cd470013b4, 0xbfe0f426bb2a8e7d, // 0.84812, -0.5298' - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535' - 0x3feaee04b43c1474, 0xbfe14915af336ceb, // 0.84155, -0.54017' - 0x3fead2bc9e21d511, 0xbfe1734d63dedb49, // 0.83822, -0.54532' - 0x3feab7325916c0d4, 0xbfe19d5a09f2b9b8, // 0.83486, -0.55046' - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557' - 0x3fea7f58529fe69d, 0xbfe1f0f08bbc861b, // 0.82805, -0.56066' - 0x3fea63091b02fae2, 0xbfe21a799933eb58, // 0.82459, -0.56573' - 0x3fea4678c8119ac8, 0xbfe243d5fb98ac1f, // 0.8211, -0.57078' - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581' - 0x3fea0c95eabaf937, 0xbfe2960727629ca8, // 0.81404, -0.58081' - 0x3fe9ef43ef29af94, 0xbfe2bedb25faf3ea, // 0.81046, -0.5858' - 0x3fe9d1b1f5ea80d6, 0xbfe2e780e3e8ea16, // 0.80685, -0.59076' - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957' - 0x3fe995cf2ed80d22, 0xbfe338400d0c8e57, // 0.79954, -0.60062' - 0x3fe9777ef4c7d742, 0xbfe36058b10659f3, // 0.79584, -0.60551' - 0x3fe958efe48e6dd7, 0xbfe3884185dfeb22, // 0.79211, -0.61038' - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523' - 0x3fe91b166fd49da2, 0xbfe3d78238c58343, // 0.78456, -0.62006' - 0x3fe8fbcca3ef940d, 0xbfe3fed9534556d4, // 0.78074, -0.62486' - 0x3fe8dc45331698cc, 0xbfe425ff178e6bb1, // 0.77689, -0.62964' - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439' - 0x3fe89c7e9a4dd4ab, 0xbfe473b51b987347, // 0.7691, -0.63912' - 0x3fe87c400fba2ebf, 0xbfe49a449b9b0938, // 0.76517, -0.64383' - 0x3fe85bc51ae958cc, 0xbfe4c0a145ec0004, // 0.7612, -0.64851' - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317' - 0x3fe81a1b33b57acc, 0xbfe50cc09f59a09b, // 0.75319, -0.65781' - 0x3fe7f8ece3571771, 0xbfe5328292a35596, // 0.74914, -0.66242' - 0x3fe7d7836cc33db2, 0xbfe5581038975137, // 0.74506, -0.667' - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156' - 0x3fe79400574f55e4, 0xbfe5a28d2a5d7250, // 0.73682, -0.67609' - 0x3fe771e75f037261, 0xbfe5c77bbe65018c, // 0.73265, -0.6806' - 0x3fe74f948da8d28d, 0xbfe5ec3495837074, // 0.72846, -0.68508' - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954' - 0x3fe70a42b3176d7a, 0xbfe63503a31c1be8, // 0.72, -0.69397' - 0x3fe6e74454eaa8ae, 0xbfe6591925f0783e, // 0.71573, -0.69838' - 0x3fe6c40d73c18275, 0xbfe67cf78491af10, // 0.71143, -0.70275' - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711' - 0x3fe67cf78491af10, 0xbfe6c40d73c18275, // 0.70275, -0.71143' - 0x3fe6591925f0783e, 0xbfe6e74454eaa8ae, // 0.69838, -0.71573' - 0x3fe63503a31c1be8, 0xbfe70a42b3176d7a, // 0.69397, -0.72' - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425' - 0x3fe5ec3495837074, 0xbfe74f948da8d28d, // 0.68508, -0.72846' - 0x3fe5c77bbe65018c, 0xbfe771e75f037261, // 0.6806, -0.73265' - 0x3fe5a28d2a5d7250, 0xbfe79400574f55e4, // 0.67609, -0.73682' - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095' - 0x3fe5581038975137, 0xbfe7d7836cc33db2, // 0.667, -0.74506' - 0x3fe5328292a35596, 0xbfe7f8ece3571771, // 0.66242, -0.74914' - 0x3fe50cc09f59a09b, 0xbfe81a1b33b57acc, // 0.65781, -0.75319' - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721' - 0x3fe4c0a145ec0004, 0xbfe85bc51ae958cc, // 0.64851, -0.7612' - 0x3fe49a449b9b0938, 0xbfe87c400fba2ebf, // 0.64383, -0.76517' - 0x3fe473b51b987347, 0xbfe89c7e9a4dd4ab, // 0.63912, -0.7691' - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301' - 0x3fe425ff178e6bb1, 0xbfe8dc45331698cc, // 0.62964, -0.77689' - 0x3fe3fed9534556d4, 0xbfe8fbcca3ef940d, // 0.62486, -0.78074' - 0x3fe3d78238c58343, 0xbfe91b166fd49da2, // 0.62006, -0.78456' - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835' - 0x3fe3884185dfeb22, 0xbfe958efe48e6dd7, // 0.61038, -0.79211' - 0x3fe36058b10659f3, 0xbfe9777ef4c7d742, // 0.60551, -0.79584' - 0x3fe338400d0c8e57, 0xbfe995cf2ed80d22, // 0.60062, -0.79954' - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321' - 0x3fe2e780e3e8ea16, 0xbfe9d1b1f5ea80d6, // 0.59076, -0.80685' - 0x3fe2bedb25faf3ea, 0xbfe9ef43ef29af94, // 0.5858, -0.81046' - 0x3fe2960727629ca8, 0xbfea0c95eabaf937, // 0.58081, -0.81404' - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758' - 0x3fe243d5fb98ac1f, 0xbfea4678c8119ac8, // 0.57078, -0.8211' - 0x3fe21a799933eb58, 0xbfea63091b02fae2, // 0.56573, -0.82459' - 0x3fe1f0f08bbc861b, 0xbfea7f58529fe69d, // 0.56066, -0.82805' - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147' - 0x3fe19d5a09f2b9b8, 0xbfeab7325916c0d4, // 0.55046, -0.83486' - 0x3fe1734d63dedb49, 0xbfead2bc9e21d511, // 0.54532, -0.83822' - 0x3fe14915af336ceb, 0xbfeaee04b43c1474, // 0.54017, -0.84155' - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485' - 0x3fe0f426bb2a8e7d, 0xbfeb23cd470013b4, // 0.5298, -0.84812' - 0x3fe0c9704d5d898f, 0xbfeb3e4d3ef55712, // 0.52459, -0.85136' - 0x3fe09e907417c5e1, 0xbfeb5889fe921405, // 0.51936, -0.85456' - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773' - 0x3fe0485626ae221a, 0xbfeb8c38d27504e9, // 0.50883, -0.86087' - 0x3fe01cfc874c3eb7, 0xbfeba5aa673590d2, // 0.50354, -0.86397' - 0x3fdfe2f64be7120f, 0xbfebbed7c49380ea, // 0.49823, -0.86705' - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009' - 0x3fdf3405963fd068, 0xbfebf064e15377dd, // 0.48755, -0.87309' - 0x3fdedc1952ef78d5, 0xbfec08c426725549, // 0.48218, -0.87607' - 0x3fde83e0eaf85113, 0xbfec20de3fa971b0, // 0.4768, -0.87901' - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192' - 0x3fddd28f1481cc58, 0xbfec5042012b6907, // 0.46598, -0.8848' - 0x3fdd79775b86e389, 0xbfec678b3488739b, // 0.46054, -0.88764' - 0x3fdd2016e8e9db5b, 0xbfec7e8e52233cf3, // 0.45508, -0.89045' - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322' - 0x3fdc6c7f4997000a, 0xbfecabc169a0b901, // 0.44412, -0.89597' - 0x3fdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // 0.43862, -0.89867' - 0x3fdbb7cf2304bd01, 0xbfecd7d9898b32f6, // 0.43309, -0.90135' - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399' - 0x3fdb020d6c7f4009, 0xbfed02d4feb2bd92, // 0.422, -0.9066' - 0x3fdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // 0.41643, -0.90917' - 0x3fda4b4127dea1e4, 0xbfed2cb220e0ef9f, // 0.41084, -0.91171' - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421' - 0x3fd993716141bdfe, 0xbfed556f52e93eb1, // 0.39962, -0.91668' - 0x3fd9372a63bc93d7, 0xbfed696173c9e68b, // 0.39399, -0.91911' - 0x3fd8daa52ec8a4af, 0xbfed7d0b02b8ecf9, // 0.38835, -0.92151' - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388' - 0x3fd820e3b04eaac4, 0xbfeda383a9668988, // 0.37701, -0.92621' - 0x3fd7c3a9311dcce7, 0xbfedb6526238a09b, // 0.37132, -0.92851' - 0x3fd766340f2418f6, 0xbfedc8d7cb410260, // 0.36561, -0.93077' - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299' - 0x3fd6aa9d7dc77e16, 0xbfeded05f7de47da, // 0.35416, -0.93518' - 0x3fd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // 0.34842, -0.93734' - 0x3fd5ee27379ea693, 0xbfee100cca2980ac, // 0.34266, -0.93946' - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154' - 0x3fd530d880af3c24, 0xbfee31eae870ce25, // 0.33111, -0.94359' - 0x3fd4d1e24278e76a, 0xbfee426a4b2bc17e, // 0.32531, -0.94561' - 0x3fd472b8a5571054, 0xbfee529f04729ffc, // 0.3195, -0.94759' - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953' - 0x3fd3b3cefa0414b7, 0xbfee7227db6a9744, // 0.30785, -0.95144' - 0x3fd35410c2e18152, 0xbfee817bab4cd10d, // 0.30201, -0.95331' - 0x3fd2f422daec0386, 0xbfee9084361df7f3, // 0.29615, -0.95514' - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694' - 0x3fd233bbabc3bb72, 0xbfeeadb2e8e7a88e, // 0.28441, -0.9587' - 0x3fd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // 0.27852, -0.96043' - 0x3fd172a0d7765177, 0xbfeec9b2d3c3bf84, // 0.27262, -0.96212' - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378' - 0x3fd0b0d9cfdbdb90, 0xbfeee482e25a9dbc, // 0.26079, -0.96539' - 0x3fd04fb80e37fdae, 0xbfeef178a3e473c2, // 0.25487, -0.96698' - 0x3fcfdcdc1adfedf8, 0xbfeefe220c0b95ec, // 0.24893, -0.96852' - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003' - 0x3fce56ca1e101a1b, 0xbfef168f53f7205d, // 0.23702, -0.9715' - 0x3fcd934fe5454311, 0xbfef2252f7763ada, // 0.23106, -0.97294' - 0x3fcccf8cb312b286, 0xbfef2dc9c9089a9d, // 0.22508, -0.97434' - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757' - 0x3fcb4732ef3d6722, 0xbfef43d085ff92dd, // 0.21311, -0.97703' - 0x3fca82a025b00451, 0xbfef4e603b0b2f2d, // 0.20711, -0.97832' - 0x3fc9bdcbf2dc4366, 0xbfef58a2b1789e84, // 0.2011, -0.97957' - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079' - 0x3fc83366e89c64c5, 0xbfef6c3f7df5bbb7, // 0.18907, -0.98196' - 0x3fc76dd9de50bf31, 0xbfef7599a3a12077, // 0.18304, -0.98311' - 0x3fc6a81304f64ab2, 0xbfef7ea629e63d6e, // 0.177, -0.98421' - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528' - 0x3fc51bdf8597c5f2, 0xbfef8fd5ffae41db, // 0.16491, -0.98631' - 0x3fc45576b1293e5a, 0xbfef97f924c9099b, // 0.15886, -0.9873' - 0x3fc38edbb0cd8d14, 0xbfef9fce55adb2c8, // 0.1528, -0.98826' - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918' - 0x3fc20116d4ec7bce, 0xbfefae8e8e46cfbb, // 0.14066, -0.99006' - 0x3fc139f0cedaf576, 0xbfefb5797195d741, // 0.13458, -0.9909' - 0x3fc072a047ba831d, 0xbfefbc1617e44186, // 0.1285, -0.99171' - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248' - 0x3fbdc70ecbae9fc8, 0xbfefc8646cfeb721, // 0.11632, -0.99321' - 0x3fbc3785c79ec2d5, 0xbfefce15fd6da67b, // 0.11022, -0.99391' - 0x3fbaa7b724495c04, 0xbfefd37914220b84, // 0.10412, -0.99456' - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518' - 0x3fb787586a5d5b21, 0xbfefdd539ff1f456, // 0.091909, -0.99577' - 0x3fb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // 0.085797, -0.99631' - 0x3fb4661179272096, 0xbfefe5f3af2e3940, // 0.079682, -0.99682' - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, // 0.073565, -0.99729' - 0x3fb1440134d709b2, 0xbfefed58ecb673c4, // 0.067444, -0.99772' - 0x3faf656e79f820e0, 0xbfeff095658e71ad, // 0.061321, -0.99812' - 0x3fac428d12c0d7e3, 0xbfeff3830f8d575c, // 0.055195, -0.99848' - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, // 0.049068, -0.9988' - 0x3fa5fc00d290cd43, 0xbfeff871dadb81df, // 0.042938, -0.99908' - 0x3fa2d865759455cd, 0xbfeffa72effef75d, // 0.036807, -0.99932' - 0x3f9f693731d1cf01, 0xbfeffc251df1d3f8, // 0.030675, -0.99953' - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, // 0.024541, -0.9997' - 0x3f92d936bbe30efd, 0xbfeffe9cb44b51a1, // 0.018407, -0.99983' - 0x3f8921d1fcdec784, 0xbfefff62169b92db, // 0.012272, -0.99992' - 0x3f7921f0fe670071, 0xbfefffd8858e8a92, //0.0061359, -0.99998' -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_2048) -const uint64_t twiddleCoefF64_rfft_2048[2048] = { - 0x0000000000000000, 0x3ff0000000000000, // 0, 1 - 0x3f6921f8becca4ba, 0x3feffff621621d02, // 0.003068, 1 - 0x3f7921f0fe670071, 0x3fefffd8858e8a92, //0.0061359, 0.99998 - 0x3f82d96b0e509703, 0x3fefffa72c978c4f, //0.0092038, 0.99996 - 0x3f8921d1fcdec784, 0x3fefff62169b92db, // 0.012272, 0.99992 - 0x3f8f6a296ab997ca, 0x3fefff0943c53bd1, // 0.015339, 0.99988 - 0x3f92d936bbe30efd, 0x3feffe9cb44b51a1, // 0.018407, 0.99983 - 0x3f95fd4d21fab226, 0x3feffe1c6870cb77, // 0.021474, 0.99977 - 0x3f992155f7a3667e, 0x3feffd886084cd0d, // 0.024541, 0.9997 - 0x3f9c454f4ce53b1c, 0x3feffce09ce2a679, // 0.027608, 0.99962 - 0x3f9f693731d1cf01, 0x3feffc251df1d3f8, // 0.030675, 0.99953 - 0x3fa14685db42c17e, 0x3feffb55e425fdae, // 0.033741, 0.99943 - 0x3fa2d865759455cd, 0x3feffa72effef75d, // 0.036807, 0.99932 - 0x3fa46a396ff86179, 0x3feff97c4208c014, // 0.039873, 0.9992 - 0x3fa5fc00d290cd43, 0x3feff871dadb81df, // 0.042938, 0.99908 - 0x3fa78dbaa5874685, 0x3feff753bb1b9164, // 0.046003, 0.99894 - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, // 0.049068, 0.9988 - 0x3faab101bd5f8317, 0x3feff4dc54b1bed3, // 0.052132, 0.99864 - 0x3fac428d12c0d7e3, 0x3feff3830f8d575c, // 0.055195, 0.99848 - 0x3fadd406f9808ec8, 0x3feff21614e131ed, // 0.058258, 0.9983 - 0x3faf656e79f820e0, 0x3feff095658e71ad, // 0.061321, 0.99812 - 0x3fb07b614e463064, 0x3fefef0102826191, // 0.064383, 0.99793 - 0x3fb1440134d709b2, 0x3fefed58ecb673c4, // 0.067444, 0.99772 - 0x3fb20c9674ed444c, 0x3fefeb9d2530410f, // 0.070505, 0.99751 - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, // 0.073565, 0.99729 - 0x3fb39d9f12c5a299, 0x3fefe7ea85482d60, // 0.076624, 0.99706 - 0x3fb4661179272096, 0x3fefe5f3af2e3940, // 0.079682, 0.99682 - 0x3fb52e774a4d4d0a, 0x3fefe3e92be9d886, // 0.08274, 0.99657 - 0x3fb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // 0.085797, 0.99631 - 0x3fb6bf1b3e79b129, 0x3fefdf9922f73307, // 0.088854, 0.99604 - 0x3fb787586a5d5b21, 0x3fefdd539ff1f456, // 0.091909, 0.99577 - 0x3fb84f8712c130a0, 0x3fefdafa7514538c, // 0.094963, 0.99548 - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518 - 0x3fb9dfb6eb24a85c, 0x3fefd60d2da75c9e, // 0.10107, 0.99488 - 0x3fbaa7b724495c04, 0x3fefd37914220b84, // 0.10412, 0.99456 - 0x3fbb6fa6ec38f64c, 0x3fefd0d158d86087, // 0.10717, 0.99424 - 0x3fbc3785c79ec2d5, 0x3fefce15fd6da67b, // 0.11022, 0.99391 - 0x3fbcff533b307dc1, 0x3fefcb4703914354, // 0.11327, 0.99356 - 0x3fbdc70ecbae9fc8, 0x3fefc8646cfeb721, // 0.11632, 0.99321 - 0x3fbe8eb7fde4aa3e, 0x3fefc56e3b7d9af6, // 0.11937, 0.99285 - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248 - 0x3fc00ee8ad6fb85b, 0x3fefbf470f0a8d88, // 0.12545, 0.9921 - 0x3fc072a047ba831d, 0x3fefbc1617e44186, // 0.1285, 0.99171 - 0x3fc0d64dbcb26786, 0x3fefb8d18d66adb7, // 0.13154, 0.99131 - 0x3fc139f0cedaf576, 0x3fefb5797195d741, // 0.13458, 0.9909 - 0x3fc19d8940be24e7, 0x3fefb20dc681d54d, // 0.13762, 0.99049 - 0x3fc20116d4ec7bce, 0x3fefae8e8e46cfbb, // 0.14066, 0.99006 - 0x3fc264994dfd340a, 0x3fefaafbcb0cfddc, // 0.1437, 0.98962 - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918 - 0x3fc32b7bf94516a7, 0x3fefa39bac7a1791, // 0.14976, 0.98872 - 0x3fc38edbb0cd8d14, 0x3fef9fce55adb2c8, // 0.1528, 0.98826 - 0x3fc3f22f57db4893, 0x3fef9bed7cfbde29, // 0.15583, 0.98778 - 0x3fc45576b1293e5a, 0x3fef97f924c9099b, // 0.15886, 0.9873 - 0x3fc4b8b17f79fa88, 0x3fef93f14f85ac08, // 0.16189, 0.98681 - 0x3fc51bdf8597c5f2, 0x3fef8fd5ffae41db, // 0.16491, 0.98631 - 0x3fc57f008654cbde, 0x3fef8ba737cb4b78, // 0.16794, 0.9858 - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528 - 0x3fc6451a831d830d, 0x3fef830f4a40c60c, // 0.17398, 0.98475 - 0x3fc6a81304f64ab2, 0x3fef7ea629e63d6e, // 0.177, 0.98421 - 0x3fc70afd8d08c4ff, 0x3fef7a299c1a322a, // 0.18002, 0.98366 - 0x3fc76dd9de50bf31, 0x3fef7599a3a12077, // 0.18304, 0.98311 - 0x3fc7d0a7bbd2cb1b, 0x3fef70f6434b7eb7, // 0.18606, 0.98254 - 0x3fc83366e89c64c5, 0x3fef6c3f7df5bbb7, // 0.18907, 0.98196 - 0x3fc8961727c41804, 0x3fef677556883cee, // 0.19208, 0.98138 - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079 - 0x3fc95b49e9b62af9, 0x3fef5da6ed43685d, // 0.1981, 0.98018 - 0x3fc9bdcbf2dc4366, 0x3fef58a2b1789e84, // 0.2011, 0.97957 - 0x3fca203e1b1831da, 0x3fef538b1faf2d07, // 0.20411, 0.97895 - 0x3fca82a025b00451, 0x3fef4e603b0b2f2d, // 0.20711, 0.97832 - 0x3fcae4f1d5f3b9ab, 0x3fef492206bcabb4, // 0.21011, 0.97768 - 0x3fcb4732ef3d6722, 0x3fef43d085ff92dd, // 0.21311, 0.97703 - 0x3fcba96334f15dad, 0x3fef3e6bbc1bbc65, // 0.21611, 0.97637 - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757 - 0x3fcc6d90535d74dc, 0x3fef33685a3aaef0, // 0.22209, 0.97503 - 0x3fcccf8cb312b286, 0x3fef2dc9c9089a9d, // 0.22508, 0.97434 - 0x3fcd31774d2cbdee, 0x3fef2817fc4609ce, // 0.22807, 0.97364 - 0x3fcd934fe5454311, 0x3fef2252f7763ada, // 0.23106, 0.97294 - 0x3fcdf5163f01099a, 0x3fef1c7abe284708, // 0.23404, 0.97223 - 0x3fce56ca1e101a1b, 0x3fef168f53f7205d, // 0.23702, 0.9715 - 0x3fceb86b462de348, 0x3fef1090bc898f5f, // 0.24, 0.97077 - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003 - 0x3fcf7b7480bd3801, 0x3fef045a14cf738c, // 0.24596, 0.96928 - 0x3fcfdcdc1adfedf8, 0x3feefe220c0b95ec, // 0.24893, 0.96852 - 0x3fd01f1806b9fdd2, 0x3feef7d6e51ca3c0, // 0.2519, 0.96775 - 0x3fd04fb80e37fdae, 0x3feef178a3e473c2, // 0.25487, 0.96698 - 0x3fd0804e05eb661e, 0x3feeeb074c50a544, // 0.25783, 0.96619 - 0x3fd0b0d9cfdbdb90, 0x3feee482e25a9dbc, // 0.26079, 0.96539 - 0x3fd0e15b4e1749cd, 0x3feeddeb6a078651, // 0.26375, 0.96459 - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378 - 0x3fd1423eefc69378, 0x3feed0835e999009, // 0.26967, 0.96295 - 0x3fd172a0d7765177, 0x3feec9b2d3c3bf84, // 0.27262, 0.96212 - 0x3fd1a2f7fbe8f243, 0x3feec2cf4b1af6b2, // 0.27557, 0.96128 - 0x3fd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // 0.27852, 0.96043 - 0x3fd2038583d727bd, 0x3feeb4cf515b8811, // 0.28146, 0.95957 - 0x3fd233bbabc3bb72, 0x3feeadb2e8e7a88e, // 0.28441, 0.9587 - 0x3fd263e6995554ba, 0x3feea68393e65800, // 0.28735, 0.95783 - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694 - 0x3fd2c41a4e954520, 0x3fee97ec36016b30, // 0.29322, 0.95605 - 0x3fd2f422daec0386, 0x3fee9084361df7f3, // 0.29615, 0.95514 - 0x3fd3241fb638baaf, 0x3fee89095bad6025, // 0.29908, 0.95423 - 0x3fd35410c2e18152, 0x3fee817bab4cd10d, // 0.30201, 0.95331 - 0x3fd383f5e353b6aa, 0x3fee79db29a5165a, // 0.30493, 0.95238 - 0x3fd3b3cefa0414b7, 0x3fee7227db6a9744, // 0.30785, 0.95144 - 0x3fd3e39be96ec271, 0x3fee6a61c55d53a7, // 0.31077, 0.95049 - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953 - 0x3fd44310dc8936f0, 0x3fee5a9d550467d3, // 0.31659, 0.94856 - 0x3fd472b8a5571054, 0x3fee529f04729ffc, // 0.3195, 0.94759 - 0x3fd4a253d11b82f3, 0x3fee4a8dff81ce5e, // 0.32241, 0.9466 - 0x3fd4d1e24278e76a, 0x3fee426a4b2bc17e, // 0.32531, 0.94561 - 0x3fd50163dc197047, 0x3fee3a33ec75ce85, // 0.32821, 0.9446 - 0x3fd530d880af3c24, 0x3fee31eae870ce25, // 0.33111, 0.94359 - 0x3fd5604012f467b4, 0x3fee298f4439197a, // 0.334, 0.94257 - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154 - 0x3fd5bee78b9db3b6, 0x3fee18a02fdc66d9, // 0.33978, 0.94051 - 0x3fd5ee27379ea693, 0x3fee100cca2980ac, // 0.34266, 0.93946 - 0x3fd61d595c88c203, 0x3fee0766d9280f54, // 0.34554, 0.9384 - 0x3fd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // 0.34842, 0.93734 - 0x3fd67b949cad63ca, 0x3fedf5e36a9ba59c, // 0.35129, 0.93627 - 0x3fd6aa9d7dc77e16, 0x3feded05f7de47da, // 0.35416, 0.93518 - 0x3fd6d998638a0cb5, 0x3fede4160f6d8d81, // 0.35703, 0.93409 - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299 - 0x3fd73763c9261092, 0x3fedd1fef38a915a, // 0.36276, 0.93188 - 0x3fd766340f2418f6, 0x3fedc8d7cb410260, // 0.36561, 0.93077 - 0x3fd794f5e613dfae, 0x3fedbf9e4395759a, // 0.36847, 0.92964 - 0x3fd7c3a9311dcce7, 0x3fedb6526238a09b, // 0.37132, 0.92851 - 0x3fd7f24dd37341e3, 0x3fedacf42ce68ab9, // 0.37416, 0.92736 - 0x3fd820e3b04eaac4, 0x3feda383a9668988, // 0.37701, 0.92621 - 0x3fd84f6aaaf3903f, 0x3fed9a00dd8b3d46, // 0.37985, 0.92505 - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388 - 0x3fd8ac4b86d5ed44, 0x3fed86c48445a450, // 0.38552, 0.9227 - 0x3fd8daa52ec8a4af, 0x3fed7d0b02b8ecf9, // 0.38835, 0.92151 - 0x3fd908ef81ef7bd1, 0x3fed733f508c0dff, // 0.39117, 0.92032 - 0x3fd9372a63bc93d7, 0x3fed696173c9e68b, // 0.39399, 0.91911 - 0x3fd96555b7ab948f, 0x3fed5f7172888a7f, // 0.39681, 0.9179 - 0x3fd993716141bdfe, 0x3fed556f52e93eb1, // 0.39962, 0.91668 - 0x3fd9c17d440df9f2, 0x3fed4b5b1b187524, // 0.40243, 0.91545 - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421 - 0x3fda1d6543b50ac0, 0x3fed36fc7bcbfbdc, // 0.40804, 0.91296 - 0x3fda4b4127dea1e4, 0x3fed2cb220e0ef9f, // 0.41084, 0.91171 - 0x3fda790cd3dbf31a, 0x3fed2255c6e5a4e1, // 0.41364, 0.91044 - 0x3fdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // 0.41643, 0.90917 - 0x3fdad473125cdc08, 0x3fed0d672f59d2b9, // 0.41922, 0.90789 - 0x3fdb020d6c7f4009, 0x3fed02d4feb2bd92, // 0.422, 0.9066 - 0x3fdb2f971db31972, 0x3fecf830e8ce467b, // 0.42478, 0.9053 - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399 - 0x3fdb8a7814fd5693, 0x3fece2b32799a060, // 0.43033, 0.90267 - 0x3fdbb7cf2304bd01, 0x3fecd7d9898b32f6, // 0.43309, 0.90135 - 0x3fdbe51517ffc0d9, 0x3fecccee20c2de9f, // 0.43586, 0.90002 - 0x3fdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // 0.43862, 0.89867 - 0x3fdc3f6d47263129, 0x3fecb6e20a00da99, // 0.44137, 0.89732 - 0x3fdc6c7f4997000a, 0x3fecabc169a0b901, // 0.44412, 0.89597 - 0x3fdc997fc3865388, 0x3feca08f19b9c449, // 0.44687, 0.8946 - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322 - 0x3fdcf34baee1cd21, 0x3fec89f587029c13, // 0.45235, 0.89184 - 0x3fdd2016e8e9db5b, 0x3fec7e8e52233cf3, // 0.45508, 0.89045 - 0x3fdd4cd02ba8609c, 0x3fec7315899eaad7, // 0.45781, 0.88905 - 0x3fdd79775b86e389, 0x3fec678b3488739b, // 0.46054, 0.88764 - 0x3fdda60c5cfa10d8, 0x3fec5bef59fef85a, // 0.46326, 0.88622 - 0x3fddd28f1481cc58, 0x3fec5042012b6907, // 0.46598, 0.8848 - 0x3fddfeff66a941de, 0x3fec44833141c004, // 0.46869, 0.88336 - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192 - 0x3fde57a86d3cd824, 0x3fec2cd14931e3f1, // 0.4741, 0.88047 - 0x3fde83e0eaf85113, 0x3fec20de3fa971b0, // 0.4768, 0.87901 - 0x3fdeb00695f25620, 0x3fec14d9dc465e58, // 0.47949, 0.87755 - 0x3fdedc1952ef78d5, 0x3fec08c426725549, // 0.48218, 0.87607 - 0x3fdf081906bff7fd, 0x3febfc9d25a1b147, // 0.48487, 0.87459 - 0x3fdf3405963fd068, 0x3febf064e15377dd, // 0.48755, 0.87309 - 0x3fdf5fdee656cda3, 0x3febe41b611154c1, // 0.49023, 0.8716 - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009 - 0x3fdfb7575c24d2de, 0x3febcb54cb0d2327, // 0.49557, 0.86857 - 0x3fdfe2f64be7120f, 0x3febbed7c49380ea, // 0.49823, 0.86705 - 0x3fe00740c82b82e0, 0x3febb249a0b6c40d, // 0.50089, 0.86551 - 0x3fe01cfc874c3eb7, 0x3feba5aa673590d2, // 0.50354, 0.86397 - 0x3fe032ae55edbd95, 0x3feb98fa1fd9155e, // 0.50619, 0.86242 - 0x3fe0485626ae221a, 0x3feb8c38d27504e9, // 0.50883, 0.86087 - 0x3fe05df3ec31b8b6, 0x3feb7f6686e792ea, // 0.51147, 0.8593 - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773 - 0x3fe089112032b08c, 0x3feb658f14fdbc47, // 0.51673, 0.85615 - 0x3fe09e907417c5e1, 0x3feb5889fe921405, // 0.51936, 0.85456 - 0x3fe0b405878f85ec, 0x3feb4b7409de7925, // 0.52198, 0.85296 - 0x3fe0c9704d5d898f, 0x3feb3e4d3ef55712, // 0.52459, 0.85136 - 0x3fe0ded0b84bc4b5, 0x3feb3115a5f37bf4, // 0.5272, 0.84974 - 0x3fe0f426bb2a8e7d, 0x3feb23cd470013b4, // 0.5298, 0.84812 - 0x3fe1097248d0a956, 0x3feb16742a4ca2f5, // 0.5324, 0.84649 - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485 - 0x3fe133e9cfee254e, 0x3feafb8fd89f57b6, // 0.53759, 0.84321 - 0x3fe14915af336ceb, 0x3feaee04b43c1474, // 0.54017, 0.84155 - 0x3fe15e36e4dbe2bc, 0x3feae068f345ecef, // 0.54275, 0.83989 - 0x3fe1734d63dedb49, 0x3fead2bc9e21d511, // 0.54532, 0.83822 - 0x3fe188591f3a46e5, 0x3feac4ffbd3efac8, // 0.54789, 0.83655 - 0x3fe19d5a09f2b9b8, 0x3feab7325916c0d4, // 0.55046, 0.83486 - 0x3fe1b250171373be, 0x3feaa9547a2cb98e, // 0.55302, 0.83317 - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147 - 0x3fe1dc1b64dc4872, 0x3fea8d676e545ad2, // 0.55812, 0.82976 - 0x3fe1f0f08bbc861b, 0x3fea7f58529fe69d, // 0.56066, 0.82805 - 0x3fe205baa17560d6, 0x3fea7138de9d60f5, // 0.5632, 0.82632 - 0x3fe21a799933eb58, 0x3fea63091b02fae2, // 0.56573, 0.82459 - 0x3fe22f2d662c13e1, 0x3fea54c91090f524, // 0.56826, 0.82285 - 0x3fe243d5fb98ac1f, 0x3fea4678c8119ac8, // 0.57078, 0.8211 - 0x3fe258734cbb7110, 0x3fea38184a593bc6, // 0.5733, 0.81935 - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758 - 0x3fe2818bef4d3cba, 0x3fea1b26d2c0a75e, // 0.57831, 0.81581 - 0x3fe2960727629ca8, 0x3fea0c95eabaf937, // 0.58081, 0.81404 - 0x3fe2aa76e87aeb58, 0x3fe9fdf4f13149de, // 0.58331, 0.81225 - 0x3fe2bedb25faf3ea, 0x3fe9ef43ef29af94, // 0.5858, 0.81046 - 0x3fe2d333d34e9bb7, 0x3fe9e082edb42472, // 0.58828, 0.80866 - 0x3fe2e780e3e8ea16, 0x3fe9d1b1f5ea80d6, // 0.59076, 0.80685 - 0x3fe2fbc24b441015, 0x3fe9c2d110f075c3, // 0.59323, 0.80503 - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321 - 0x3fe32421ec49a620, 0x3fe9a4dfa42b06b2, // 0.59816, 0.80138 - 0x3fe338400d0c8e57, 0x3fe995cf2ed80d22, // 0.60062, 0.79954 - 0x3fe34c5252c14de1, 0x3fe986aef1457594, // 0.60307, 0.79769 - 0x3fe36058b10659f3, 0x3fe9777ef4c7d742, // 0.60551, 0.79584 - 0x3fe374531b817f8d, 0x3fe9683f42bd7fe1, // 0.60795, 0.79398 - 0x3fe3884185dfeb22, 0x3fe958efe48e6dd7, // 0.61038, 0.79211 - 0x3fe39c23e3d63029, 0x3fe94990e3ac4a6c, // 0.61281, 0.79023 - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835 - 0x3fe3c3c44981c517, 0x3fe92aa41fc5a815, // 0.61765, 0.78646 - 0x3fe3d78238c58343, 0x3fe91b166fd49da2, // 0.62006, 0.78456 - 0x3fe3eb33eabe0680, 0x3fe90b7943575efe, // 0.62246, 0.78265 - 0x3fe3fed9534556d4, 0x3fe8fbcca3ef940d, // 0.62486, 0.78074 - 0x3fe41272663d108c, 0x3fe8ec109b486c49, // 0.62725, 0.77882 - 0x3fe425ff178e6bb1, 0x3fe8dc45331698cc, // 0.62964, 0.77689 - 0x3fe4397f5b2a4380, 0x3fe8cc6a75184655, // 0.63202, 0.77495 - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301 - 0x3fe4605a692b32a2, 0x3fe8ac871ede1d88, // 0.63676, 0.77106 - 0x3fe473b51b987347, 0x3fe89c7e9a4dd4ab, // 0.63912, 0.7691 - 0x3fe48703306091fe, 0x3fe88c66e7481ba1, // 0.64148, 0.76714 - 0x3fe49a449b9b0938, 0x3fe87c400fba2ebf, // 0.64383, 0.76517 - 0x3fe4ad79516722f0, 0x3fe86c0a1d9aa195, // 0.64618, 0.76319 - 0x3fe4c0a145ec0004, 0x3fe85bc51ae958cc, // 0.64851, 0.7612 - 0x3fe4d3bc6d589f80, 0x3fe84b7111af83f9, // 0.65085, 0.75921 - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721 - 0x3fe4f9cc25cca486, 0x3fe82a9c13f545ff, // 0.65549, 0.7552 - 0x3fe50cc09f59a09b, 0x3fe81a1b33b57acc, // 0.65781, 0.75319 - 0x3fe51fa81cd99aa6, 0x3fe8098b756e52fa, // 0.66011, 0.75117 - 0x3fe5328292a35596, 0x3fe7f8ece3571771, // 0.66242, 0.74914 - 0x3fe5454ff5159dfb, 0x3fe7e83f87b03686, // 0.66471, 0.7471 - 0x3fe5581038975137, 0x3fe7d7836cc33db2, // 0.667, 0.74506 - 0x3fe56ac35197649e, 0x3fe7c6b89ce2d333, // 0.66928, 0.74301 - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095 - 0x3fe59001d5f723df, 0x3fe7a4f707bf97d2, // 0.67383, 0.73889 - 0x3fe5a28d2a5d7250, 0x3fe79400574f55e4, // 0.67609, 0.73682 - 0x3fe5b50b264f7448, 0x3fe782fb1b90b35b, // 0.67835, 0.73474 - 0x3fe5c77bbe65018c, 0x3fe771e75f037261, // 0.6806, 0.73265 - 0x3fe5d9dee73e345c, 0x3fe760c52c304764, // 0.68285, 0.73056 - 0x3fe5ec3495837074, 0x3fe74f948da8d28d, // 0.68508, 0.72846 - 0x3fe5fe7cbde56a0f, 0x3fe73e558e079942, // 0.68732, 0.72636 - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425 - 0x3fe622e44fec22ff, 0x3fe71bac960e41bf, // 0.69176, 0.72213 - 0x3fe63503a31c1be8, 0x3fe70a42b3176d7a, // 0.69397, 0.72 - 0x3fe64715437f535b, 0x3fe6f8ca99c95b75, // 0.69618, 0.71787 - 0x3fe6591925f0783e, 0x3fe6e74454eaa8ae, // 0.69838, 0.71573 - 0x3fe66b0f3f52b386, 0x3fe6d5afef4aafcc, // 0.70057, 0.71358 - 0x3fe67cf78491af10, 0x3fe6c40d73c18275, // 0.70275, 0.71143 - 0x3fe68ed1eaa19c71, 0x3fe6b25ced2fe29c, // 0.70493, 0.70927 - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711 - 0x3fe6b25ced2fe29c, 0x3fe68ed1eaa19c71, // 0.70927, 0.70493 - 0x3fe6c40d73c18275, 0x3fe67cf78491af10, // 0.71143, 0.70275 - 0x3fe6d5afef4aafcc, 0x3fe66b0f3f52b386, // 0.71358, 0.70057 - 0x3fe6e74454eaa8ae, 0x3fe6591925f0783e, // 0.71573, 0.69838 - 0x3fe6f8ca99c95b75, 0x3fe64715437f535b, // 0.71787, 0.69618 - 0x3fe70a42b3176d7a, 0x3fe63503a31c1be8, // 0.72, 0.69397 - 0x3fe71bac960e41bf, 0x3fe622e44fec22ff, // 0.72213, 0.69176 - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954 - 0x3fe73e558e079942, 0x3fe5fe7cbde56a0f, // 0.72636, 0.68732 - 0x3fe74f948da8d28d, 0x3fe5ec3495837074, // 0.72846, 0.68508 - 0x3fe760c52c304764, 0x3fe5d9dee73e345c, // 0.73056, 0.68285 - 0x3fe771e75f037261, 0x3fe5c77bbe65018c, // 0.73265, 0.6806 - 0x3fe782fb1b90b35b, 0x3fe5b50b264f7448, // 0.73474, 0.67835 - 0x3fe79400574f55e4, 0x3fe5a28d2a5d7250, // 0.73682, 0.67609 - 0x3fe7a4f707bf97d2, 0x3fe59001d5f723df, // 0.73889, 0.67383 - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156 - 0x3fe7c6b89ce2d333, 0x3fe56ac35197649e, // 0.74301, 0.66928 - 0x3fe7d7836cc33db2, 0x3fe5581038975137, // 0.74506, 0.667 - 0x3fe7e83f87b03686, 0x3fe5454ff5159dfb, // 0.7471, 0.66471 - 0x3fe7f8ece3571771, 0x3fe5328292a35596, // 0.74914, 0.66242 - 0x3fe8098b756e52fa, 0x3fe51fa81cd99aa6, // 0.75117, 0.66011 - 0x3fe81a1b33b57acc, 0x3fe50cc09f59a09b, // 0.75319, 0.65781 - 0x3fe82a9c13f545ff, 0x3fe4f9cc25cca486, // 0.7552, 0.65549 - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317 - 0x3fe84b7111af83f9, 0x3fe4d3bc6d589f80, // 0.75921, 0.65085 - 0x3fe85bc51ae958cc, 0x3fe4c0a145ec0004, // 0.7612, 0.64851 - 0x3fe86c0a1d9aa195, 0x3fe4ad79516722f0, // 0.76319, 0.64618 - 0x3fe87c400fba2ebf, 0x3fe49a449b9b0938, // 0.76517, 0.64383 - 0x3fe88c66e7481ba1, 0x3fe48703306091fe, // 0.76714, 0.64148 - 0x3fe89c7e9a4dd4ab, 0x3fe473b51b987347, // 0.7691, 0.63912 - 0x3fe8ac871ede1d88, 0x3fe4605a692b32a2, // 0.77106, 0.63676 - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439 - 0x3fe8cc6a75184655, 0x3fe4397f5b2a4380, // 0.77495, 0.63202 - 0x3fe8dc45331698cc, 0x3fe425ff178e6bb1, // 0.77689, 0.62964 - 0x3fe8ec109b486c49, 0x3fe41272663d108c, // 0.77882, 0.62725 - 0x3fe8fbcca3ef940d, 0x3fe3fed9534556d4, // 0.78074, 0.62486 - 0x3fe90b7943575efe, 0x3fe3eb33eabe0680, // 0.78265, 0.62246 - 0x3fe91b166fd49da2, 0x3fe3d78238c58343, // 0.78456, 0.62006 - 0x3fe92aa41fc5a815, 0x3fe3c3c44981c517, // 0.78646, 0.61765 - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523 - 0x3fe94990e3ac4a6c, 0x3fe39c23e3d63029, // 0.79023, 0.61281 - 0x3fe958efe48e6dd7, 0x3fe3884185dfeb22, // 0.79211, 0.61038 - 0x3fe9683f42bd7fe1, 0x3fe374531b817f8d, // 0.79398, 0.60795 - 0x3fe9777ef4c7d742, 0x3fe36058b10659f3, // 0.79584, 0.60551 - 0x3fe986aef1457594, 0x3fe34c5252c14de1, // 0.79769, 0.60307 - 0x3fe995cf2ed80d22, 0x3fe338400d0c8e57, // 0.79954, 0.60062 - 0x3fe9a4dfa42b06b2, 0x3fe32421ec49a620, // 0.80138, 0.59816 - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957 - 0x3fe9c2d110f075c3, 0x3fe2fbc24b441015, // 0.80503, 0.59323 - 0x3fe9d1b1f5ea80d6, 0x3fe2e780e3e8ea16, // 0.80685, 0.59076 - 0x3fe9e082edb42472, 0x3fe2d333d34e9bb7, // 0.80866, 0.58828 - 0x3fe9ef43ef29af94, 0x3fe2bedb25faf3ea, // 0.81046, 0.5858 - 0x3fe9fdf4f13149de, 0x3fe2aa76e87aeb58, // 0.81225, 0.58331 - 0x3fea0c95eabaf937, 0x3fe2960727629ca8, // 0.81404, 0.58081 - 0x3fea1b26d2c0a75e, 0x3fe2818bef4d3cba, // 0.81581, 0.57831 - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581 - 0x3fea38184a593bc6, 0x3fe258734cbb7110, // 0.81935, 0.5733 - 0x3fea4678c8119ac8, 0x3fe243d5fb98ac1f, // 0.8211, 0.57078 - 0x3fea54c91090f524, 0x3fe22f2d662c13e1, // 0.82285, 0.56826 - 0x3fea63091b02fae2, 0x3fe21a799933eb58, // 0.82459, 0.56573 - 0x3fea7138de9d60f5, 0x3fe205baa17560d6, // 0.82632, 0.5632 - 0x3fea7f58529fe69d, 0x3fe1f0f08bbc861b, // 0.82805, 0.56066 - 0x3fea8d676e545ad2, 0x3fe1dc1b64dc4872, // 0.82976, 0.55812 - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557 - 0x3feaa9547a2cb98e, 0x3fe1b250171373be, // 0.83317, 0.55302 - 0x3feab7325916c0d4, 0x3fe19d5a09f2b9b8, // 0.83486, 0.55046 - 0x3feac4ffbd3efac8, 0x3fe188591f3a46e5, // 0.83655, 0.54789 - 0x3fead2bc9e21d511, 0x3fe1734d63dedb49, // 0.83822, 0.54532 - 0x3feae068f345ecef, 0x3fe15e36e4dbe2bc, // 0.83989, 0.54275 - 0x3feaee04b43c1474, 0x3fe14915af336ceb, // 0.84155, 0.54017 - 0x3feafb8fd89f57b6, 0x3fe133e9cfee254e, // 0.84321, 0.53759 - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535 - 0x3feb16742a4ca2f5, 0x3fe1097248d0a956, // 0.84649, 0.5324 - 0x3feb23cd470013b4, 0x3fe0f426bb2a8e7d, // 0.84812, 0.5298 - 0x3feb3115a5f37bf4, 0x3fe0ded0b84bc4b5, // 0.84974, 0.5272 - 0x3feb3e4d3ef55712, 0x3fe0c9704d5d898f, // 0.85136, 0.52459 - 0x3feb4b7409de7925, 0x3fe0b405878f85ec, // 0.85296, 0.52198 - 0x3feb5889fe921405, 0x3fe09e907417c5e1, // 0.85456, 0.51936 - 0x3feb658f14fdbc47, 0x3fe089112032b08c, // 0.85615, 0.51673 - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141 - 0x3feb7f6686e792ea, 0x3fe05df3ec31b8b6, // 0.8593, 0.51147 - 0x3feb8c38d27504e9, 0x3fe0485626ae221a, // 0.86087, 0.50883 - 0x3feb98fa1fd9155e, 0x3fe032ae55edbd95, // 0.86242, 0.50619 - 0x3feba5aa673590d2, 0x3fe01cfc874c3eb7, // 0.86397, 0.50354 - 0x3febb249a0b6c40d, 0x3fe00740c82b82e0, // 0.86551, 0.50089 - 0x3febbed7c49380ea, 0x3fdfe2f64be7120f, // 0.86705, 0.49823 - 0x3febcb54cb0d2327, 0x3fdfb7575c24d2de, // 0.86857, 0.49557 - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929 - 0x3febe41b611154c1, 0x3fdf5fdee656cda3, // 0.8716, 0.49023 - 0x3febf064e15377dd, 0x3fdf3405963fd068, // 0.87309, 0.48755 - 0x3febfc9d25a1b147, 0x3fdf081906bff7fd, // 0.87459, 0.48487 - 0x3fec08c426725549, 0x3fdedc1952ef78d5, // 0.87607, 0.48218 - 0x3fec14d9dc465e58, 0x3fdeb00695f25620, // 0.87755, 0.47949 - 0x3fec20de3fa971b0, 0x3fde83e0eaf85113, // 0.87901, 0.4768 - 0x3fec2cd14931e3f1, 0x3fde57a86d3cd824, // 0.88047, 0.4741 - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714 - 0x3fec44833141c004, 0x3fddfeff66a941de, // 0.88336, 0.46869 - 0x3fec5042012b6907, 0x3fddd28f1481cc58, // 0.8848, 0.46598 - 0x3fec5bef59fef85a, 0x3fdda60c5cfa10d8, // 0.88622, 0.46326 - 0x3fec678b3488739b, 0x3fdd79775b86e389, // 0.88764, 0.46054 - 0x3fec7315899eaad7, 0x3fdd4cd02ba8609c, // 0.88905, 0.45781 - 0x3fec7e8e52233cf3, 0x3fdd2016e8e9db5b, // 0.89045, 0.45508 - 0x3fec89f587029c13, 0x3fdcf34baee1cd21, // 0.89184, 0.45235 - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961 - 0x3feca08f19b9c449, 0x3fdc997fc3865388, // 0.8946, 0.44687 - 0x3fecabc169a0b901, 0x3fdc6c7f4997000a, // 0.89597, 0.44412 - 0x3fecb6e20a00da99, 0x3fdc3f6d47263129, // 0.89732, 0.44137 - 0x3fecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // 0.89867, 0.43862 - 0x3fecccee20c2de9f, 0x3fdbe51517ffc0d9, // 0.90002, 0.43586 - 0x3fecd7d9898b32f6, 0x3fdbb7cf2304bd01, // 0.90135, 0.43309 - 0x3fece2b32799a060, 0x3fdb8a7814fd5693, // 0.90267, 0.43033 - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756 - 0x3fecf830e8ce467b, 0x3fdb2f971db31972, // 0.9053, 0.42478 - 0x3fed02d4feb2bd92, 0x3fdb020d6c7f4009, // 0.9066, 0.422 - 0x3fed0d672f59d2b9, 0x3fdad473125cdc08, // 0.90789, 0.41922 - 0x3fed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // 0.90917, 0.41643 - 0x3fed2255c6e5a4e1, 0x3fda790cd3dbf31a, // 0.91044, 0.41364 - 0x3fed2cb220e0ef9f, 0x3fda4b4127dea1e4, // 0.91171, 0.41084 - 0x3fed36fc7bcbfbdc, 0x3fda1d6543b50ac0, // 0.91296, 0.40804 - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524 - 0x3fed4b5b1b187524, 0x3fd9c17d440df9f2, // 0.91545, 0.40243 - 0x3fed556f52e93eb1, 0x3fd993716141bdfe, // 0.91668, 0.39962 - 0x3fed5f7172888a7f, 0x3fd96555b7ab948f, // 0.9179, 0.39681 - 0x3fed696173c9e68b, 0x3fd9372a63bc93d7, // 0.91911, 0.39399 - 0x3fed733f508c0dff, 0x3fd908ef81ef7bd1, // 0.92032, 0.39117 - 0x3fed7d0b02b8ecf9, 0x3fd8daa52ec8a4af, // 0.92151, 0.38835 - 0x3fed86c48445a450, 0x3fd8ac4b86d5ed44, // 0.9227, 0.38552 - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268 - 0x3fed9a00dd8b3d46, 0x3fd84f6aaaf3903f, // 0.92505, 0.37985 - 0x3feda383a9668988, 0x3fd820e3b04eaac4, // 0.92621, 0.37701 - 0x3fedacf42ce68ab9, 0x3fd7f24dd37341e3, // 0.92736, 0.37416 - 0x3fedb6526238a09b, 0x3fd7c3a9311dcce7, // 0.92851, 0.37132 - 0x3fedbf9e4395759a, 0x3fd794f5e613dfae, // 0.92964, 0.36847 - 0x3fedc8d7cb410260, 0x3fd766340f2418f6, // 0.93077, 0.36561 - 0x3fedd1fef38a915a, 0x3fd73763c9261092, // 0.93188, 0.36276 - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599 - 0x3fede4160f6d8d81, 0x3fd6d998638a0cb5, // 0.93409, 0.35703 - 0x3feded05f7de47da, 0x3fd6aa9d7dc77e16, // 0.93518, 0.35416 - 0x3fedf5e36a9ba59c, 0x3fd67b949cad63ca, // 0.93627, 0.35129 - 0x3fedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // 0.93734, 0.34842 - 0x3fee0766d9280f54, 0x3fd61d595c88c203, // 0.9384, 0.34554 - 0x3fee100cca2980ac, 0x3fd5ee27379ea693, // 0.93946, 0.34266 - 0x3fee18a02fdc66d9, 0x3fd5bee78b9db3b6, // 0.94051, 0.33978 - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689 - 0x3fee298f4439197a, 0x3fd5604012f467b4, // 0.94257, 0.334 - 0x3fee31eae870ce25, 0x3fd530d880af3c24, // 0.94359, 0.33111 - 0x3fee3a33ec75ce85, 0x3fd50163dc197047, // 0.9446, 0.32821 - 0x3fee426a4b2bc17e, 0x3fd4d1e24278e76a, // 0.94561, 0.32531 - 0x3fee4a8dff81ce5e, 0x3fd4a253d11b82f3, // 0.9466, 0.32241 - 0x3fee529f04729ffc, 0x3fd472b8a5571054, // 0.94759, 0.3195 - 0x3fee5a9d550467d3, 0x3fd44310dc8936f0, // 0.94856, 0.31659 - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368 - 0x3fee6a61c55d53a7, 0x3fd3e39be96ec271, // 0.95049, 0.31077 - 0x3fee7227db6a9744, 0x3fd3b3cefa0414b7, // 0.95144, 0.30785 - 0x3fee79db29a5165a, 0x3fd383f5e353b6aa, // 0.95238, 0.30493 - 0x3fee817bab4cd10d, 0x3fd35410c2e18152, // 0.95331, 0.30201 - 0x3fee89095bad6025, 0x3fd3241fb638baaf, // 0.95423, 0.29908 - 0x3fee9084361df7f3, 0x3fd2f422daec0386, // 0.95514, 0.29615 - 0x3fee97ec36016b30, 0x3fd2c41a4e954520, // 0.95605, 0.29322 - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028 - 0x3feea68393e65800, 0x3fd263e6995554ba, // 0.95783, 0.28735 - 0x3feeadb2e8e7a88e, 0x3fd233bbabc3bb72, // 0.9587, 0.28441 - 0x3feeb4cf515b8811, 0x3fd2038583d727bd, // 0.95957, 0.28146 - 0x3feebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // 0.96043, 0.27852 - 0x3feec2cf4b1af6b2, 0x3fd1a2f7fbe8f243, // 0.96128, 0.27557 - 0x3feec9b2d3c3bf84, 0x3fd172a0d7765177, // 0.96212, 0.27262 - 0x3feed0835e999009, 0x3fd1423eefc69378, // 0.96295, 0.26967 - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671 - 0x3feeddeb6a078651, 0x3fd0e15b4e1749cd, // 0.96459, 0.26375 - 0x3feee482e25a9dbc, 0x3fd0b0d9cfdbdb90, // 0.96539, 0.26079 - 0x3feeeb074c50a544, 0x3fd0804e05eb661e, // 0.96619, 0.25783 - 0x3feef178a3e473c2, 0x3fd04fb80e37fdae, // 0.96698, 0.25487 - 0x3feef7d6e51ca3c0, 0x3fd01f1806b9fdd2, // 0.96775, 0.2519 - 0x3feefe220c0b95ec, 0x3fcfdcdc1adfedf8, // 0.96852, 0.24893 - 0x3fef045a14cf738c, 0x3fcf7b7480bd3801, // 0.96928, 0.24596 - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298 - 0x3fef1090bc898f5f, 0x3fceb86b462de348, // 0.97077, 0.24 - 0x3fef168f53f7205d, 0x3fce56ca1e101a1b, // 0.9715, 0.23702 - 0x3fef1c7abe284708, 0x3fcdf5163f01099a, // 0.97223, 0.23404 - 0x3fef2252f7763ada, 0x3fcd934fe5454311, // 0.97294, 0.23106 - 0x3fef2817fc4609ce, 0x3fcd31774d2cbdee, // 0.97364, 0.22807 - 0x3fef2dc9c9089a9d, 0x3fcccf8cb312b286, // 0.97434, 0.22508 - 0x3fef33685a3aaef0, 0x3fcc6d90535d74dc, // 0.97503, 0.22209 - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191 - 0x3fef3e6bbc1bbc65, 0x3fcba96334f15dad, // 0.97637, 0.21611 - 0x3fef43d085ff92dd, 0x3fcb4732ef3d6722, // 0.97703, 0.21311 - 0x3fef492206bcabb4, 0x3fcae4f1d5f3b9ab, // 0.97768, 0.21011 - 0x3fef4e603b0b2f2d, 0x3fca82a025b00451, // 0.97832, 0.20711 - 0x3fef538b1faf2d07, 0x3fca203e1b1831da, // 0.97895, 0.20411 - 0x3fef58a2b1789e84, 0x3fc9bdcbf2dc4366, // 0.97957, 0.2011 - 0x3fef5da6ed43685d, 0x3fc95b49e9b62af9, // 0.98018, 0.1981 - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509 - 0x3fef677556883cee, 0x3fc8961727c41804, // 0.98138, 0.19208 - 0x3fef6c3f7df5bbb7, 0x3fc83366e89c64c5, // 0.98196, 0.18907 - 0x3fef70f6434b7eb7, 0x3fc7d0a7bbd2cb1b, // 0.98254, 0.18606 - 0x3fef7599a3a12077, 0x3fc76dd9de50bf31, // 0.98311, 0.18304 - 0x3fef7a299c1a322a, 0x3fc70afd8d08c4ff, // 0.98366, 0.18002 - 0x3fef7ea629e63d6e, 0x3fc6a81304f64ab2, // 0.98421, 0.177 - 0x3fef830f4a40c60c, 0x3fc6451a831d830d, // 0.98475, 0.17398 - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096 - 0x3fef8ba737cb4b78, 0x3fc57f008654cbde, // 0.9858, 0.16794 - 0x3fef8fd5ffae41db, 0x3fc51bdf8597c5f2, // 0.98631, 0.16491 - 0x3fef93f14f85ac08, 0x3fc4b8b17f79fa88, // 0.98681, 0.16189 - 0x3fef97f924c9099b, 0x3fc45576b1293e5a, // 0.9873, 0.15886 - 0x3fef9bed7cfbde29, 0x3fc3f22f57db4893, // 0.98778, 0.15583 - 0x3fef9fce55adb2c8, 0x3fc38edbb0cd8d14, // 0.98826, 0.1528 - 0x3fefa39bac7a1791, 0x3fc32b7bf94516a7, // 0.98872, 0.14976 - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673 - 0x3fefaafbcb0cfddc, 0x3fc264994dfd340a, // 0.98962, 0.1437 - 0x3fefae8e8e46cfbb, 0x3fc20116d4ec7bce, // 0.99006, 0.14066 - 0x3fefb20dc681d54d, 0x3fc19d8940be24e7, // 0.99049, 0.13762 - 0x3fefb5797195d741, 0x3fc139f0cedaf576, // 0.9909, 0.13458 - 0x3fefb8d18d66adb7, 0x3fc0d64dbcb26786, // 0.99131, 0.13154 - 0x3fefbc1617e44186, 0x3fc072a047ba831d, // 0.99171, 0.1285 - 0x3fefbf470f0a8d88, 0x3fc00ee8ad6fb85b, // 0.9921, 0.12545 - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241 - 0x3fefc56e3b7d9af6, 0x3fbe8eb7fde4aa3e, // 0.99285, 0.11937 - 0x3fefc8646cfeb721, 0x3fbdc70ecbae9fc8, // 0.99321, 0.11632 - 0x3fefcb4703914354, 0x3fbcff533b307dc1, // 0.99356, 0.11327 - 0x3fefce15fd6da67b, 0x3fbc3785c79ec2d5, // 0.99391, 0.11022 - 0x3fefd0d158d86087, 0x3fbb6fa6ec38f64c, // 0.99424, 0.10717 - 0x3fefd37914220b84, 0x3fbaa7b724495c04, // 0.99456, 0.10412 - 0x3fefd60d2da75c9e, 0x3fb9dfb6eb24a85c, // 0.99488, 0.10107 - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017 - 0x3fefdafa7514538c, 0x3fb84f8712c130a0, // 0.99548, 0.094963 - 0x3fefdd539ff1f456, 0x3fb787586a5d5b21, // 0.99577, 0.091909 - 0x3fefdf9922f73307, 0x3fb6bf1b3e79b129, // 0.99604, 0.088854 - 0x3fefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // 0.99631, 0.085797 - 0x3fefe3e92be9d886, 0x3fb52e774a4d4d0a, // 0.99657, 0.08274 - 0x3fefe5f3af2e3940, 0x3fb4661179272096, // 0.99682, 0.079682 - 0x3fefe7ea85482d60, 0x3fb39d9f12c5a299, // 0.99706, 0.076624 - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565 - 0x3fefeb9d2530410f, 0x3fb20c9674ed444c, // 0.99751, 0.070505 - 0x3fefed58ecb673c4, 0x3fb1440134d709b2, // 0.99772, 0.067444 - 0x3fefef0102826191, 0x3fb07b614e463064, // 0.99793, 0.064383 - 0x3feff095658e71ad, 0x3faf656e79f820e0, // 0.99812, 0.061321 - 0x3feff21614e131ed, 0x3fadd406f9808ec8, // 0.9983, 0.058258 - 0x3feff3830f8d575c, 0x3fac428d12c0d7e3, // 0.99848, 0.055195 - 0x3feff4dc54b1bed3, 0x3faab101bd5f8317, // 0.99864, 0.052132 - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068 - 0x3feff753bb1b9164, 0x3fa78dbaa5874685, // 0.99894, 0.046003 - 0x3feff871dadb81df, 0x3fa5fc00d290cd43, // 0.99908, 0.042938 - 0x3feff97c4208c014, 0x3fa46a396ff86179, // 0.9992, 0.039873 - 0x3feffa72effef75d, 0x3fa2d865759455cd, // 0.99932, 0.036807 - 0x3feffb55e425fdae, 0x3fa14685db42c17e, // 0.99943, 0.033741 - 0x3feffc251df1d3f8, 0x3f9f693731d1cf01, // 0.99953, 0.030675 - 0x3feffce09ce2a679, 0x3f9c454f4ce53b1c, // 0.99962, 0.027608 - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541 - 0x3feffe1c6870cb77, 0x3f95fd4d21fab226, // 0.99977, 0.021474 - 0x3feffe9cb44b51a1, 0x3f92d936bbe30efd, // 0.99983, 0.018407 - 0x3fefff0943c53bd1, 0x3f8f6a296ab997ca, // 0.99988, 0.015339 - 0x3fefff62169b92db, 0x3f8921d1fcdec784, // 0.99992, 0.012272 - 0x3fefffa72c978c4f, 0x3f82d96b0e509703, // 0.99996, 0.0092038 - 0x3fefffd8858e8a92, 0x3f7921f0fe670071, // 0.99998, 0.0061359 - 0x3feffff621621d02, 0x3f6921f8becca4ba, // 1, 0.003068 - 0x3ff0000000000000, 0x0000000000000000, // 1, 0 - 0x3feffff621621d02, 0xbf6921f8becca4ba, // 1, -0.003068 - 0x3fefffd8858e8a92, 0xbf7921f0fe670071, // 0.99998,-0.0061359 - 0x3fefffa72c978c4f, 0xbf82d96b0e509703, // 0.99996,-0.0092038 - 0x3fefff62169b92db, 0xbf8921d1fcdec784, // 0.99992, -0.012272 - 0x3fefff0943c53bd1, 0xbf8f6a296ab997ca, // 0.99988, -0.015339 - 0x3feffe9cb44b51a1, 0xbf92d936bbe30efd, // 0.99983, -0.018407 - 0x3feffe1c6870cb77, 0xbf95fd4d21fab226, // 0.99977, -0.021474 - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997, -0.024541 - 0x3feffce09ce2a679, 0xbf9c454f4ce53b1c, // 0.99962, -0.027608 - 0x3feffc251df1d3f8, 0xbf9f693731d1cf01, // 0.99953, -0.030675 - 0x3feffb55e425fdae, 0xbfa14685db42c17e, // 0.99943, -0.033741 - 0x3feffa72effef75d, 0xbfa2d865759455cd, // 0.99932, -0.036807 - 0x3feff97c4208c014, 0xbfa46a396ff86179, // 0.9992, -0.039873 - 0x3feff871dadb81df, 0xbfa5fc00d290cd43, // 0.99908, -0.042938 - 0x3feff753bb1b9164, 0xbfa78dbaa5874685, // 0.99894, -0.046003 - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988, -0.049068 - 0x3feff4dc54b1bed3, 0xbfaab101bd5f8317, // 0.99864, -0.052132 - 0x3feff3830f8d575c, 0xbfac428d12c0d7e3, // 0.99848, -0.055195 - 0x3feff21614e131ed, 0xbfadd406f9808ec8, // 0.9983, -0.058258 - 0x3feff095658e71ad, 0xbfaf656e79f820e0, // 0.99812, -0.061321 - 0x3fefef0102826191, 0xbfb07b614e463064, // 0.99793, -0.064383 - 0x3fefed58ecb673c4, 0xbfb1440134d709b2, // 0.99772, -0.067444 - 0x3fefeb9d2530410f, 0xbfb20c9674ed444c, // 0.99751, -0.070505 - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729, -0.073565 - 0x3fefe7ea85482d60, 0xbfb39d9f12c5a299, // 0.99706, -0.076624 - 0x3fefe5f3af2e3940, 0xbfb4661179272096, // 0.99682, -0.079682 - 0x3fefe3e92be9d886, 0xbfb52e774a4d4d0a, // 0.99657, -0.08274 - 0x3fefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // 0.99631, -0.085797 - 0x3fefdf9922f73307, 0xbfb6bf1b3e79b129, // 0.99604, -0.088854 - 0x3fefdd539ff1f456, 0xbfb787586a5d5b21, // 0.99577, -0.091909 - 0x3fefdafa7514538c, 0xbfb84f8712c130a0, // 0.99548, -0.094963 - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518, -0.098017 - 0x3fefd60d2da75c9e, 0xbfb9dfb6eb24a85c, // 0.99488, -0.10107 - 0x3fefd37914220b84, 0xbfbaa7b724495c04, // 0.99456, -0.10412 - 0x3fefd0d158d86087, 0xbfbb6fa6ec38f64c, // 0.99424, -0.10717 - 0x3fefce15fd6da67b, 0xbfbc3785c79ec2d5, // 0.99391, -0.11022 - 0x3fefcb4703914354, 0xbfbcff533b307dc1, // 0.99356, -0.11327 - 0x3fefc8646cfeb721, 0xbfbdc70ecbae9fc8, // 0.99321, -0.11632 - 0x3fefc56e3b7d9af6, 0xbfbe8eb7fde4aa3e, // 0.99285, -0.11937 - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241 - 0x3fefbf470f0a8d88, 0xbfc00ee8ad6fb85b, // 0.9921, -0.12545 - 0x3fefbc1617e44186, 0xbfc072a047ba831d, // 0.99171, -0.1285 - 0x3fefb8d18d66adb7, 0xbfc0d64dbcb26786, // 0.99131, -0.13154 - 0x3fefb5797195d741, 0xbfc139f0cedaf576, // 0.9909, -0.13458 - 0x3fefb20dc681d54d, 0xbfc19d8940be24e7, // 0.99049, -0.13762 - 0x3fefae8e8e46cfbb, 0xbfc20116d4ec7bce, // 0.99006, -0.14066 - 0x3fefaafbcb0cfddc, 0xbfc264994dfd340a, // 0.98962, -0.1437 - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673 - 0x3fefa39bac7a1791, 0xbfc32b7bf94516a7, // 0.98872, -0.14976 - 0x3fef9fce55adb2c8, 0xbfc38edbb0cd8d14, // 0.98826, -0.1528 - 0x3fef9bed7cfbde29, 0xbfc3f22f57db4893, // 0.98778, -0.15583 - 0x3fef97f924c9099b, 0xbfc45576b1293e5a, // 0.9873, -0.15886 - 0x3fef93f14f85ac08, 0xbfc4b8b17f79fa88, // 0.98681, -0.16189 - 0x3fef8fd5ffae41db, 0xbfc51bdf8597c5f2, // 0.98631, -0.16491 - 0x3fef8ba737cb4b78, 0xbfc57f008654cbde, // 0.9858, -0.16794 - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096 - 0x3fef830f4a40c60c, 0xbfc6451a831d830d, // 0.98475, -0.17398 - 0x3fef7ea629e63d6e, 0xbfc6a81304f64ab2, // 0.98421, -0.177 - 0x3fef7a299c1a322a, 0xbfc70afd8d08c4ff, // 0.98366, -0.18002 - 0x3fef7599a3a12077, 0xbfc76dd9de50bf31, // 0.98311, -0.18304 - 0x3fef70f6434b7eb7, 0xbfc7d0a7bbd2cb1b, // 0.98254, -0.18606 - 0x3fef6c3f7df5bbb7, 0xbfc83366e89c64c5, // 0.98196, -0.18907 - 0x3fef677556883cee, 0xbfc8961727c41804, // 0.98138, -0.19208 - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509 - 0x3fef5da6ed43685d, 0xbfc95b49e9b62af9, // 0.98018, -0.1981 - 0x3fef58a2b1789e84, 0xbfc9bdcbf2dc4366, // 0.97957, -0.2011 - 0x3fef538b1faf2d07, 0xbfca203e1b1831da, // 0.97895, -0.20411 - 0x3fef4e603b0b2f2d, 0xbfca82a025b00451, // 0.97832, -0.20711 - 0x3fef492206bcabb4, 0xbfcae4f1d5f3b9ab, // 0.97768, -0.21011 - 0x3fef43d085ff92dd, 0xbfcb4732ef3d6722, // 0.97703, -0.21311 - 0x3fef3e6bbc1bbc65, 0xbfcba96334f15dad, // 0.97637, -0.21611 - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191 - 0x3fef33685a3aaef0, 0xbfcc6d90535d74dc, // 0.97503, -0.22209 - 0x3fef2dc9c9089a9d, 0xbfcccf8cb312b286, // 0.97434, -0.22508 - 0x3fef2817fc4609ce, 0xbfcd31774d2cbdee, // 0.97364, -0.22807 - 0x3fef2252f7763ada, 0xbfcd934fe5454311, // 0.97294, -0.23106 - 0x3fef1c7abe284708, 0xbfcdf5163f01099a, // 0.97223, -0.23404 - 0x3fef168f53f7205d, 0xbfce56ca1e101a1b, // 0.9715, -0.23702 - 0x3fef1090bc898f5f, 0xbfceb86b462de348, // 0.97077, -0.24 - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298 - 0x3fef045a14cf738c, 0xbfcf7b7480bd3801, // 0.96928, -0.24596 - 0x3feefe220c0b95ec, 0xbfcfdcdc1adfedf8, // 0.96852, -0.24893 - 0x3feef7d6e51ca3c0, 0xbfd01f1806b9fdd2, // 0.96775, -0.2519 - 0x3feef178a3e473c2, 0xbfd04fb80e37fdae, // 0.96698, -0.25487 - 0x3feeeb074c50a544, 0xbfd0804e05eb661e, // 0.96619, -0.25783 - 0x3feee482e25a9dbc, 0xbfd0b0d9cfdbdb90, // 0.96539, -0.26079 - 0x3feeddeb6a078651, 0xbfd0e15b4e1749cd, // 0.96459, -0.26375 - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671 - 0x3feed0835e999009, 0xbfd1423eefc69378, // 0.96295, -0.26967 - 0x3feec9b2d3c3bf84, 0xbfd172a0d7765177, // 0.96212, -0.27262 - 0x3feec2cf4b1af6b2, 0xbfd1a2f7fbe8f243, // 0.96128, -0.27557 - 0x3feebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // 0.96043, -0.27852 - 0x3feeb4cf515b8811, 0xbfd2038583d727bd, // 0.95957, -0.28146 - 0x3feeadb2e8e7a88e, 0xbfd233bbabc3bb72, // 0.9587, -0.28441 - 0x3feea68393e65800, 0xbfd263e6995554ba, // 0.95783, -0.28735 - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028 - 0x3fee97ec36016b30, 0xbfd2c41a4e954520, // 0.95605, -0.29322 - 0x3fee9084361df7f3, 0xbfd2f422daec0386, // 0.95514, -0.29615 - 0x3fee89095bad6025, 0xbfd3241fb638baaf, // 0.95423, -0.29908 - 0x3fee817bab4cd10d, 0xbfd35410c2e18152, // 0.95331, -0.30201 - 0x3fee79db29a5165a, 0xbfd383f5e353b6aa, // 0.95238, -0.30493 - 0x3fee7227db6a9744, 0xbfd3b3cefa0414b7, // 0.95144, -0.30785 - 0x3fee6a61c55d53a7, 0xbfd3e39be96ec271, // 0.95049, -0.31077 - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368 - 0x3fee5a9d550467d3, 0xbfd44310dc8936f0, // 0.94856, -0.31659 - 0x3fee529f04729ffc, 0xbfd472b8a5571054, // 0.94759, -0.3195 - 0x3fee4a8dff81ce5e, 0xbfd4a253d11b82f3, // 0.9466, -0.32241 - 0x3fee426a4b2bc17e, 0xbfd4d1e24278e76a, // 0.94561, -0.32531 - 0x3fee3a33ec75ce85, 0xbfd50163dc197047, // 0.9446, -0.32821 - 0x3fee31eae870ce25, 0xbfd530d880af3c24, // 0.94359, -0.33111 - 0x3fee298f4439197a, 0xbfd5604012f467b4, // 0.94257, -0.334 - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689 - 0x3fee18a02fdc66d9, 0xbfd5bee78b9db3b6, // 0.94051, -0.33978 - 0x3fee100cca2980ac, 0xbfd5ee27379ea693, // 0.93946, -0.34266 - 0x3fee0766d9280f54, 0xbfd61d595c88c203, // 0.9384, -0.34554 - 0x3fedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // 0.93734, -0.34842 - 0x3fedf5e36a9ba59c, 0xbfd67b949cad63ca, // 0.93627, -0.35129 - 0x3feded05f7de47da, 0xbfd6aa9d7dc77e16, // 0.93518, -0.35416 - 0x3fede4160f6d8d81, 0xbfd6d998638a0cb5, // 0.93409, -0.35703 - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599 - 0x3fedd1fef38a915a, 0xbfd73763c9261092, // 0.93188, -0.36276 - 0x3fedc8d7cb410260, 0xbfd766340f2418f6, // 0.93077, -0.36561 - 0x3fedbf9e4395759a, 0xbfd794f5e613dfae, // 0.92964, -0.36847 - 0x3fedb6526238a09b, 0xbfd7c3a9311dcce7, // 0.92851, -0.37132 - 0x3fedacf42ce68ab9, 0xbfd7f24dd37341e3, // 0.92736, -0.37416 - 0x3feda383a9668988, 0xbfd820e3b04eaac4, // 0.92621, -0.37701 - 0x3fed9a00dd8b3d46, 0xbfd84f6aaaf3903f, // 0.92505, -0.37985 - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268 - 0x3fed86c48445a450, 0xbfd8ac4b86d5ed44, // 0.9227, -0.38552 - 0x3fed7d0b02b8ecf9, 0xbfd8daa52ec8a4af, // 0.92151, -0.38835 - 0x3fed733f508c0dff, 0xbfd908ef81ef7bd1, // 0.92032, -0.39117 - 0x3fed696173c9e68b, 0xbfd9372a63bc93d7, // 0.91911, -0.39399 - 0x3fed5f7172888a7f, 0xbfd96555b7ab948f, // 0.9179, -0.39681 - 0x3fed556f52e93eb1, 0xbfd993716141bdfe, // 0.91668, -0.39962 - 0x3fed4b5b1b187524, 0xbfd9c17d440df9f2, // 0.91545, -0.40243 - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524 - 0x3fed36fc7bcbfbdc, 0xbfda1d6543b50ac0, // 0.91296, -0.40804 - 0x3fed2cb220e0ef9f, 0xbfda4b4127dea1e4, // 0.91171, -0.41084 - 0x3fed2255c6e5a4e1, 0xbfda790cd3dbf31a, // 0.91044, -0.41364 - 0x3fed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // 0.90917, -0.41643 - 0x3fed0d672f59d2b9, 0xbfdad473125cdc08, // 0.90789, -0.41922 - 0x3fed02d4feb2bd92, 0xbfdb020d6c7f4009, // 0.9066, -0.422 - 0x3fecf830e8ce467b, 0xbfdb2f971db31972, // 0.9053, -0.42478 - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756 - 0x3fece2b32799a060, 0xbfdb8a7814fd5693, // 0.90267, -0.43033 - 0x3fecd7d9898b32f6, 0xbfdbb7cf2304bd01, // 0.90135, -0.43309 - 0x3fecccee20c2de9f, 0xbfdbe51517ffc0d9, // 0.90002, -0.43586 - 0x3fecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // 0.89867, -0.43862 - 0x3fecb6e20a00da99, 0xbfdc3f6d47263129, // 0.89732, -0.44137 - 0x3fecabc169a0b901, 0xbfdc6c7f4997000a, // 0.89597, -0.44412 - 0x3feca08f19b9c449, 0xbfdc997fc3865388, // 0.8946, -0.44687 - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961 - 0x3fec89f587029c13, 0xbfdcf34baee1cd21, // 0.89184, -0.45235 - 0x3fec7e8e52233cf3, 0xbfdd2016e8e9db5b, // 0.89045, -0.45508 - 0x3fec7315899eaad7, 0xbfdd4cd02ba8609c, // 0.88905, -0.45781 - 0x3fec678b3488739b, 0xbfdd79775b86e389, // 0.88764, -0.46054 - 0x3fec5bef59fef85a, 0xbfdda60c5cfa10d8, // 0.88622, -0.46326 - 0x3fec5042012b6907, 0xbfddd28f1481cc58, // 0.8848, -0.46598 - 0x3fec44833141c004, 0xbfddfeff66a941de, // 0.88336, -0.46869 - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714 - 0x3fec2cd14931e3f1, 0xbfde57a86d3cd824, // 0.88047, -0.4741 - 0x3fec20de3fa971b0, 0xbfde83e0eaf85113, // 0.87901, -0.4768 - 0x3fec14d9dc465e58, 0xbfdeb00695f25620, // 0.87755, -0.47949 - 0x3fec08c426725549, 0xbfdedc1952ef78d5, // 0.87607, -0.48218 - 0x3febfc9d25a1b147, 0xbfdf081906bff7fd, // 0.87459, -0.48487 - 0x3febf064e15377dd, 0xbfdf3405963fd068, // 0.87309, -0.48755 - 0x3febe41b611154c1, 0xbfdf5fdee656cda3, // 0.8716, -0.49023 - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929 - 0x3febcb54cb0d2327, 0xbfdfb7575c24d2de, // 0.86857, -0.49557 - 0x3febbed7c49380ea, 0xbfdfe2f64be7120f, // 0.86705, -0.49823 - 0x3febb249a0b6c40d, 0xbfe00740c82b82e0, // 0.86551, -0.50089 - 0x3feba5aa673590d2, 0xbfe01cfc874c3eb7, // 0.86397, -0.50354 - 0x3feb98fa1fd9155e, 0xbfe032ae55edbd95, // 0.86242, -0.50619 - 0x3feb8c38d27504e9, 0xbfe0485626ae221a, // 0.86087, -0.50883 - 0x3feb7f6686e792ea, 0xbfe05df3ec31b8b6, // 0.8593, -0.51147 - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141 - 0x3feb658f14fdbc47, 0xbfe089112032b08c, // 0.85615, -0.51673 - 0x3feb5889fe921405, 0xbfe09e907417c5e1, // 0.85456, -0.51936 - 0x3feb4b7409de7925, 0xbfe0b405878f85ec, // 0.85296, -0.52198 - 0x3feb3e4d3ef55712, 0xbfe0c9704d5d898f, // 0.85136, -0.52459 - 0x3feb3115a5f37bf4, 0xbfe0ded0b84bc4b5, // 0.84974, -0.5272 - 0x3feb23cd470013b4, 0xbfe0f426bb2a8e7d, // 0.84812, -0.5298 - 0x3feb16742a4ca2f5, 0xbfe1097248d0a956, // 0.84649, -0.5324 - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535 - 0x3feafb8fd89f57b6, 0xbfe133e9cfee254e, // 0.84321, -0.53759 - 0x3feaee04b43c1474, 0xbfe14915af336ceb, // 0.84155, -0.54017 - 0x3feae068f345ecef, 0xbfe15e36e4dbe2bc, // 0.83989, -0.54275 - 0x3fead2bc9e21d511, 0xbfe1734d63dedb49, // 0.83822, -0.54532 - 0x3feac4ffbd3efac8, 0xbfe188591f3a46e5, // 0.83655, -0.54789 - 0x3feab7325916c0d4, 0xbfe19d5a09f2b9b8, // 0.83486, -0.55046 - 0x3feaa9547a2cb98e, 0xbfe1b250171373be, // 0.83317, -0.55302 - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557 - 0x3fea8d676e545ad2, 0xbfe1dc1b64dc4872, // 0.82976, -0.55812 - 0x3fea7f58529fe69d, 0xbfe1f0f08bbc861b, // 0.82805, -0.56066 - 0x3fea7138de9d60f5, 0xbfe205baa17560d6, // 0.82632, -0.5632 - 0x3fea63091b02fae2, 0xbfe21a799933eb58, // 0.82459, -0.56573 - 0x3fea54c91090f524, 0xbfe22f2d662c13e1, // 0.82285, -0.56826 - 0x3fea4678c8119ac8, 0xbfe243d5fb98ac1f, // 0.8211, -0.57078 - 0x3fea38184a593bc6, 0xbfe258734cbb7110, // 0.81935, -0.5733 - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581 - 0x3fea1b26d2c0a75e, 0xbfe2818bef4d3cba, // 0.81581, -0.57831 - 0x3fea0c95eabaf937, 0xbfe2960727629ca8, // 0.81404, -0.58081 - 0x3fe9fdf4f13149de, 0xbfe2aa76e87aeb58, // 0.81225, -0.58331 - 0x3fe9ef43ef29af94, 0xbfe2bedb25faf3ea, // 0.81046, -0.5858 - 0x3fe9e082edb42472, 0xbfe2d333d34e9bb7, // 0.80866, -0.58828 - 0x3fe9d1b1f5ea80d6, 0xbfe2e780e3e8ea16, // 0.80685, -0.59076 - 0x3fe9c2d110f075c3, 0xbfe2fbc24b441015, // 0.80503, -0.59323 - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957 - 0x3fe9a4dfa42b06b2, 0xbfe32421ec49a620, // 0.80138, -0.59816 - 0x3fe995cf2ed80d22, 0xbfe338400d0c8e57, // 0.79954, -0.60062 - 0x3fe986aef1457594, 0xbfe34c5252c14de1, // 0.79769, -0.60307 - 0x3fe9777ef4c7d742, 0xbfe36058b10659f3, // 0.79584, -0.60551 - 0x3fe9683f42bd7fe1, 0xbfe374531b817f8d, // 0.79398, -0.60795 - 0x3fe958efe48e6dd7, 0xbfe3884185dfeb22, // 0.79211, -0.61038 - 0x3fe94990e3ac4a6c, 0xbfe39c23e3d63029, // 0.79023, -0.61281 - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523 - 0x3fe92aa41fc5a815, 0xbfe3c3c44981c517, // 0.78646, -0.61765 - 0x3fe91b166fd49da2, 0xbfe3d78238c58343, // 0.78456, -0.62006 - 0x3fe90b7943575efe, 0xbfe3eb33eabe0680, // 0.78265, -0.62246 - 0x3fe8fbcca3ef940d, 0xbfe3fed9534556d4, // 0.78074, -0.62486 - 0x3fe8ec109b486c49, 0xbfe41272663d108c, // 0.77882, -0.62725 - 0x3fe8dc45331698cc, 0xbfe425ff178e6bb1, // 0.77689, -0.62964 - 0x3fe8cc6a75184655, 0xbfe4397f5b2a4380, // 0.77495, -0.63202 - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439 - 0x3fe8ac871ede1d88, 0xbfe4605a692b32a2, // 0.77106, -0.63676 - 0x3fe89c7e9a4dd4ab, 0xbfe473b51b987347, // 0.7691, -0.63912 - 0x3fe88c66e7481ba1, 0xbfe48703306091fe, // 0.76714, -0.64148 - 0x3fe87c400fba2ebf, 0xbfe49a449b9b0938, // 0.76517, -0.64383 - 0x3fe86c0a1d9aa195, 0xbfe4ad79516722f0, // 0.76319, -0.64618 - 0x3fe85bc51ae958cc, 0xbfe4c0a145ec0004, // 0.7612, -0.64851 - 0x3fe84b7111af83f9, 0xbfe4d3bc6d589f80, // 0.75921, -0.65085 - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317 - 0x3fe82a9c13f545ff, 0xbfe4f9cc25cca486, // 0.7552, -0.65549 - 0x3fe81a1b33b57acc, 0xbfe50cc09f59a09b, // 0.75319, -0.65781 - 0x3fe8098b756e52fa, 0xbfe51fa81cd99aa6, // 0.75117, -0.66011 - 0x3fe7f8ece3571771, 0xbfe5328292a35596, // 0.74914, -0.66242 - 0x3fe7e83f87b03686, 0xbfe5454ff5159dfb, // 0.7471, -0.66471 - 0x3fe7d7836cc33db2, 0xbfe5581038975137, // 0.74506, -0.667 - 0x3fe7c6b89ce2d333, 0xbfe56ac35197649e, // 0.74301, -0.66928 - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156 - 0x3fe7a4f707bf97d2, 0xbfe59001d5f723df, // 0.73889, -0.67383 - 0x3fe79400574f55e4, 0xbfe5a28d2a5d7250, // 0.73682, -0.67609 - 0x3fe782fb1b90b35b, 0xbfe5b50b264f7448, // 0.73474, -0.67835 - 0x3fe771e75f037261, 0xbfe5c77bbe65018c, // 0.73265, -0.6806 - 0x3fe760c52c304764, 0xbfe5d9dee73e345c, // 0.73056, -0.68285 - 0x3fe74f948da8d28d, 0xbfe5ec3495837074, // 0.72846, -0.68508 - 0x3fe73e558e079942, 0xbfe5fe7cbde56a0f, // 0.72636, -0.68732 - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954 - 0x3fe71bac960e41bf, 0xbfe622e44fec22ff, // 0.72213, -0.69176 - 0x3fe70a42b3176d7a, 0xbfe63503a31c1be8, // 0.72, -0.69397 - 0x3fe6f8ca99c95b75, 0xbfe64715437f535b, // 0.71787, -0.69618 - 0x3fe6e74454eaa8ae, 0xbfe6591925f0783e, // 0.71573, -0.69838 - 0x3fe6d5afef4aafcc, 0xbfe66b0f3f52b386, // 0.71358, -0.70057 - 0x3fe6c40d73c18275, 0xbfe67cf78491af10, // 0.71143, -0.70275 - 0x3fe6b25ced2fe29c, 0xbfe68ed1eaa19c71, // 0.70927, -0.70493 - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711 - 0x3fe68ed1eaa19c71, 0xbfe6b25ced2fe29c, // 0.70493, -0.70927 - 0x3fe67cf78491af10, 0xbfe6c40d73c18275, // 0.70275, -0.71143 - 0x3fe66b0f3f52b386, 0xbfe6d5afef4aafcc, // 0.70057, -0.71358 - 0x3fe6591925f0783e, 0xbfe6e74454eaa8ae, // 0.69838, -0.71573 - 0x3fe64715437f535b, 0xbfe6f8ca99c95b75, // 0.69618, -0.71787 - 0x3fe63503a31c1be8, 0xbfe70a42b3176d7a, // 0.69397, -0.72 - 0x3fe622e44fec22ff, 0xbfe71bac960e41bf, // 0.69176, -0.72213 - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425 - 0x3fe5fe7cbde56a0f, 0xbfe73e558e079942, // 0.68732, -0.72636 - 0x3fe5ec3495837074, 0xbfe74f948da8d28d, // 0.68508, -0.72846 - 0x3fe5d9dee73e345c, 0xbfe760c52c304764, // 0.68285, -0.73056 - 0x3fe5c77bbe65018c, 0xbfe771e75f037261, // 0.6806, -0.73265 - 0x3fe5b50b264f7448, 0xbfe782fb1b90b35b, // 0.67835, -0.73474 - 0x3fe5a28d2a5d7250, 0xbfe79400574f55e4, // 0.67609, -0.73682 - 0x3fe59001d5f723df, 0xbfe7a4f707bf97d2, // 0.67383, -0.73889 - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095 - 0x3fe56ac35197649e, 0xbfe7c6b89ce2d333, // 0.66928, -0.74301 - 0x3fe5581038975137, 0xbfe7d7836cc33db2, // 0.667, -0.74506 - 0x3fe5454ff5159dfb, 0xbfe7e83f87b03686, // 0.66471, -0.7471 - 0x3fe5328292a35596, 0xbfe7f8ece3571771, // 0.66242, -0.74914 - 0x3fe51fa81cd99aa6, 0xbfe8098b756e52fa, // 0.66011, -0.75117 - 0x3fe50cc09f59a09b, 0xbfe81a1b33b57acc, // 0.65781, -0.75319 - 0x3fe4f9cc25cca486, 0xbfe82a9c13f545ff, // 0.65549, -0.7552 - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721 - 0x3fe4d3bc6d589f80, 0xbfe84b7111af83f9, // 0.65085, -0.75921 - 0x3fe4c0a145ec0004, 0xbfe85bc51ae958cc, // 0.64851, -0.7612 - 0x3fe4ad79516722f0, 0xbfe86c0a1d9aa195, // 0.64618, -0.76319 - 0x3fe49a449b9b0938, 0xbfe87c400fba2ebf, // 0.64383, -0.76517 - 0x3fe48703306091fe, 0xbfe88c66e7481ba1, // 0.64148, -0.76714 - 0x3fe473b51b987347, 0xbfe89c7e9a4dd4ab, // 0.63912, -0.7691 - 0x3fe4605a692b32a2, 0xbfe8ac871ede1d88, // 0.63676, -0.77106 - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301 - 0x3fe4397f5b2a4380, 0xbfe8cc6a75184655, // 0.63202, -0.77495 - 0x3fe425ff178e6bb1, 0xbfe8dc45331698cc, // 0.62964, -0.77689 - 0x3fe41272663d108c, 0xbfe8ec109b486c49, // 0.62725, -0.77882 - 0x3fe3fed9534556d4, 0xbfe8fbcca3ef940d, // 0.62486, -0.78074 - 0x3fe3eb33eabe0680, 0xbfe90b7943575efe, // 0.62246, -0.78265 - 0x3fe3d78238c58343, 0xbfe91b166fd49da2, // 0.62006, -0.78456 - 0x3fe3c3c44981c517, 0xbfe92aa41fc5a815, // 0.61765, -0.78646 - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835 - 0x3fe39c23e3d63029, 0xbfe94990e3ac4a6c, // 0.61281, -0.79023 - 0x3fe3884185dfeb22, 0xbfe958efe48e6dd7, // 0.61038, -0.79211 - 0x3fe374531b817f8d, 0xbfe9683f42bd7fe1, // 0.60795, -0.79398 - 0x3fe36058b10659f3, 0xbfe9777ef4c7d742, // 0.60551, -0.79584 - 0x3fe34c5252c14de1, 0xbfe986aef1457594, // 0.60307, -0.79769 - 0x3fe338400d0c8e57, 0xbfe995cf2ed80d22, // 0.60062, -0.79954 - 0x3fe32421ec49a620, 0xbfe9a4dfa42b06b2, // 0.59816, -0.80138 - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321 - 0x3fe2fbc24b441015, 0xbfe9c2d110f075c3, // 0.59323, -0.80503 - 0x3fe2e780e3e8ea16, 0xbfe9d1b1f5ea80d6, // 0.59076, -0.80685 - 0x3fe2d333d34e9bb7, 0xbfe9e082edb42472, // 0.58828, -0.80866 - 0x3fe2bedb25faf3ea, 0xbfe9ef43ef29af94, // 0.5858, -0.81046 - 0x3fe2aa76e87aeb58, 0xbfe9fdf4f13149de, // 0.58331, -0.81225 - 0x3fe2960727629ca8, 0xbfea0c95eabaf937, // 0.58081, -0.81404 - 0x3fe2818bef4d3cba, 0xbfea1b26d2c0a75e, // 0.57831, -0.81581 - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758 - 0x3fe258734cbb7110, 0xbfea38184a593bc6, // 0.5733, -0.81935 - 0x3fe243d5fb98ac1f, 0xbfea4678c8119ac8, // 0.57078, -0.8211 - 0x3fe22f2d662c13e1, 0xbfea54c91090f524, // 0.56826, -0.82285 - 0x3fe21a799933eb58, 0xbfea63091b02fae2, // 0.56573, -0.82459 - 0x3fe205baa17560d6, 0xbfea7138de9d60f5, // 0.5632, -0.82632 - 0x3fe1f0f08bbc861b, 0xbfea7f58529fe69d, // 0.56066, -0.82805 - 0x3fe1dc1b64dc4872, 0xbfea8d676e545ad2, // 0.55812, -0.82976 - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147 - 0x3fe1b250171373be, 0xbfeaa9547a2cb98e, // 0.55302, -0.83317 - 0x3fe19d5a09f2b9b8, 0xbfeab7325916c0d4, // 0.55046, -0.83486 - 0x3fe188591f3a46e5, 0xbfeac4ffbd3efac8, // 0.54789, -0.83655 - 0x3fe1734d63dedb49, 0xbfead2bc9e21d511, // 0.54532, -0.83822 - 0x3fe15e36e4dbe2bc, 0xbfeae068f345ecef, // 0.54275, -0.83989 - 0x3fe14915af336ceb, 0xbfeaee04b43c1474, // 0.54017, -0.84155 - 0x3fe133e9cfee254e, 0xbfeafb8fd89f57b6, // 0.53759, -0.84321 - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485 - 0x3fe1097248d0a956, 0xbfeb16742a4ca2f5, // 0.5324, -0.84649 - 0x3fe0f426bb2a8e7d, 0xbfeb23cd470013b4, // 0.5298, -0.84812 - 0x3fe0ded0b84bc4b5, 0xbfeb3115a5f37bf4, // 0.5272, -0.84974 - 0x3fe0c9704d5d898f, 0xbfeb3e4d3ef55712, // 0.52459, -0.85136 - 0x3fe0b405878f85ec, 0xbfeb4b7409de7925, // 0.52198, -0.85296 - 0x3fe09e907417c5e1, 0xbfeb5889fe921405, // 0.51936, -0.85456 - 0x3fe089112032b08c, 0xbfeb658f14fdbc47, // 0.51673, -0.85615 - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773 - 0x3fe05df3ec31b8b6, 0xbfeb7f6686e792ea, // 0.51147, -0.8593 - 0x3fe0485626ae221a, 0xbfeb8c38d27504e9, // 0.50883, -0.86087 - 0x3fe032ae55edbd95, 0xbfeb98fa1fd9155e, // 0.50619, -0.86242 - 0x3fe01cfc874c3eb7, 0xbfeba5aa673590d2, // 0.50354, -0.86397 - 0x3fe00740c82b82e0, 0xbfebb249a0b6c40d, // 0.50089, -0.86551 - 0x3fdfe2f64be7120f, 0xbfebbed7c49380ea, // 0.49823, -0.86705 - 0x3fdfb7575c24d2de, 0xbfebcb54cb0d2327, // 0.49557, -0.86857 - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009 - 0x3fdf5fdee656cda3, 0xbfebe41b611154c1, // 0.49023, -0.8716 - 0x3fdf3405963fd068, 0xbfebf064e15377dd, // 0.48755, -0.87309 - 0x3fdf081906bff7fd, 0xbfebfc9d25a1b147, // 0.48487, -0.87459 - 0x3fdedc1952ef78d5, 0xbfec08c426725549, // 0.48218, -0.87607 - 0x3fdeb00695f25620, 0xbfec14d9dc465e58, // 0.47949, -0.87755 - 0x3fde83e0eaf85113, 0xbfec20de3fa971b0, // 0.4768, -0.87901 - 0x3fde57a86d3cd824, 0xbfec2cd14931e3f1, // 0.4741, -0.88047 - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192 - 0x3fddfeff66a941de, 0xbfec44833141c004, // 0.46869, -0.88336 - 0x3fddd28f1481cc58, 0xbfec5042012b6907, // 0.46598, -0.8848 - 0x3fdda60c5cfa10d8, 0xbfec5bef59fef85a, // 0.46326, -0.88622 - 0x3fdd79775b86e389, 0xbfec678b3488739b, // 0.46054, -0.88764 - 0x3fdd4cd02ba8609c, 0xbfec7315899eaad7, // 0.45781, -0.88905 - 0x3fdd2016e8e9db5b, 0xbfec7e8e52233cf3, // 0.45508, -0.89045 - 0x3fdcf34baee1cd21, 0xbfec89f587029c13, // 0.45235, -0.89184 - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322 - 0x3fdc997fc3865388, 0xbfeca08f19b9c449, // 0.44687, -0.8946 - 0x3fdc6c7f4997000a, 0xbfecabc169a0b901, // 0.44412, -0.89597 - 0x3fdc3f6d47263129, 0xbfecb6e20a00da99, // 0.44137, -0.89732 - 0x3fdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // 0.43862, -0.89867 - 0x3fdbe51517ffc0d9, 0xbfecccee20c2de9f, // 0.43586, -0.90002 - 0x3fdbb7cf2304bd01, 0xbfecd7d9898b32f6, // 0.43309, -0.90135 - 0x3fdb8a7814fd5693, 0xbfece2b32799a060, // 0.43033, -0.90267 - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399 - 0x3fdb2f971db31972, 0xbfecf830e8ce467b, // 0.42478, -0.9053 - 0x3fdb020d6c7f4009, 0xbfed02d4feb2bd92, // 0.422, -0.9066 - 0x3fdad473125cdc08, 0xbfed0d672f59d2b9, // 0.41922, -0.90789 - 0x3fdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // 0.41643, -0.90917 - 0x3fda790cd3dbf31a, 0xbfed2255c6e5a4e1, // 0.41364, -0.91044 - 0x3fda4b4127dea1e4, 0xbfed2cb220e0ef9f, // 0.41084, -0.91171 - 0x3fda1d6543b50ac0, 0xbfed36fc7bcbfbdc, // 0.40804, -0.91296 - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421 - 0x3fd9c17d440df9f2, 0xbfed4b5b1b187524, // 0.40243, -0.91545 - 0x3fd993716141bdfe, 0xbfed556f52e93eb1, // 0.39962, -0.91668 - 0x3fd96555b7ab948f, 0xbfed5f7172888a7f, // 0.39681, -0.9179 - 0x3fd9372a63bc93d7, 0xbfed696173c9e68b, // 0.39399, -0.91911 - 0x3fd908ef81ef7bd1, 0xbfed733f508c0dff, // 0.39117, -0.92032 - 0x3fd8daa52ec8a4af, 0xbfed7d0b02b8ecf9, // 0.38835, -0.92151 - 0x3fd8ac4b86d5ed44, 0xbfed86c48445a450, // 0.38552, -0.9227 - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388 - 0x3fd84f6aaaf3903f, 0xbfed9a00dd8b3d46, // 0.37985, -0.92505 - 0x3fd820e3b04eaac4, 0xbfeda383a9668988, // 0.37701, -0.92621 - 0x3fd7f24dd37341e3, 0xbfedacf42ce68ab9, // 0.37416, -0.92736 - 0x3fd7c3a9311dcce7, 0xbfedb6526238a09b, // 0.37132, -0.92851 - 0x3fd794f5e613dfae, 0xbfedbf9e4395759a, // 0.36847, -0.92964 - 0x3fd766340f2418f6, 0xbfedc8d7cb410260, // 0.36561, -0.93077 - 0x3fd73763c9261092, 0xbfedd1fef38a915a, // 0.36276, -0.93188 - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299 - 0x3fd6d998638a0cb5, 0xbfede4160f6d8d81, // 0.35703, -0.93409 - 0x3fd6aa9d7dc77e16, 0xbfeded05f7de47da, // 0.35416, -0.93518 - 0x3fd67b949cad63ca, 0xbfedf5e36a9ba59c, // 0.35129, -0.93627 - 0x3fd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // 0.34842, -0.93734 - 0x3fd61d595c88c203, 0xbfee0766d9280f54, // 0.34554, -0.9384 - 0x3fd5ee27379ea693, 0xbfee100cca2980ac, // 0.34266, -0.93946 - 0x3fd5bee78b9db3b6, 0xbfee18a02fdc66d9, // 0.33978, -0.94051 - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154 - 0x3fd5604012f467b4, 0xbfee298f4439197a, // 0.334, -0.94257 - 0x3fd530d880af3c24, 0xbfee31eae870ce25, // 0.33111, -0.94359 - 0x3fd50163dc197047, 0xbfee3a33ec75ce85, // 0.32821, -0.9446 - 0x3fd4d1e24278e76a, 0xbfee426a4b2bc17e, // 0.32531, -0.94561 - 0x3fd4a253d11b82f3, 0xbfee4a8dff81ce5e, // 0.32241, -0.9466 - 0x3fd472b8a5571054, 0xbfee529f04729ffc, // 0.3195, -0.94759 - 0x3fd44310dc8936f0, 0xbfee5a9d550467d3, // 0.31659, -0.94856 - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953 - 0x3fd3e39be96ec271, 0xbfee6a61c55d53a7, // 0.31077, -0.95049 - 0x3fd3b3cefa0414b7, 0xbfee7227db6a9744, // 0.30785, -0.95144 - 0x3fd383f5e353b6aa, 0xbfee79db29a5165a, // 0.30493, -0.95238 - 0x3fd35410c2e18152, 0xbfee817bab4cd10d, // 0.30201, -0.95331 - 0x3fd3241fb638baaf, 0xbfee89095bad6025, // 0.29908, -0.95423 - 0x3fd2f422daec0386, 0xbfee9084361df7f3, // 0.29615, -0.95514 - 0x3fd2c41a4e954520, 0xbfee97ec36016b30, // 0.29322, -0.95605 - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694 - 0x3fd263e6995554ba, 0xbfeea68393e65800, // 0.28735, -0.95783 - 0x3fd233bbabc3bb72, 0xbfeeadb2e8e7a88e, // 0.28441, -0.9587 - 0x3fd2038583d727bd, 0xbfeeb4cf515b8811, // 0.28146, -0.95957 - 0x3fd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // 0.27852, -0.96043 - 0x3fd1a2f7fbe8f243, 0xbfeec2cf4b1af6b2, // 0.27557, -0.96128 - 0x3fd172a0d7765177, 0xbfeec9b2d3c3bf84, // 0.27262, -0.96212 - 0x3fd1423eefc69378, 0xbfeed0835e999009, // 0.26967, -0.96295 - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378 - 0x3fd0e15b4e1749cd, 0xbfeeddeb6a078651, // 0.26375, -0.96459 - 0x3fd0b0d9cfdbdb90, 0xbfeee482e25a9dbc, // 0.26079, -0.96539 - 0x3fd0804e05eb661e, 0xbfeeeb074c50a544, // 0.25783, -0.96619 - 0x3fd04fb80e37fdae, 0xbfeef178a3e473c2, // 0.25487, -0.96698 - 0x3fd01f1806b9fdd2, 0xbfeef7d6e51ca3c0, // 0.2519, -0.96775 - 0x3fcfdcdc1adfedf8, 0xbfeefe220c0b95ec, // 0.24893, -0.96852 - 0x3fcf7b7480bd3801, 0xbfef045a14cf738c, // 0.24596, -0.96928 - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003 - 0x3fceb86b462de348, 0xbfef1090bc898f5f, // 0.24, -0.97077 - 0x3fce56ca1e101a1b, 0xbfef168f53f7205d, // 0.23702, -0.9715 - 0x3fcdf5163f01099a, 0xbfef1c7abe284708, // 0.23404, -0.97223 - 0x3fcd934fe5454311, 0xbfef2252f7763ada, // 0.23106, -0.97294 - 0x3fcd31774d2cbdee, 0xbfef2817fc4609ce, // 0.22807, -0.97364 - 0x3fcccf8cb312b286, 0xbfef2dc9c9089a9d, // 0.22508, -0.97434 - 0x3fcc6d90535d74dc, 0xbfef33685a3aaef0, // 0.22209, -0.97503 - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757 - 0x3fcba96334f15dad, 0xbfef3e6bbc1bbc65, // 0.21611, -0.97637 - 0x3fcb4732ef3d6722, 0xbfef43d085ff92dd, // 0.21311, -0.97703 - 0x3fcae4f1d5f3b9ab, 0xbfef492206bcabb4, // 0.21011, -0.97768 - 0x3fca82a025b00451, 0xbfef4e603b0b2f2d, // 0.20711, -0.97832 - 0x3fca203e1b1831da, 0xbfef538b1faf2d07, // 0.20411, -0.97895 - 0x3fc9bdcbf2dc4366, 0xbfef58a2b1789e84, // 0.2011, -0.97957 - 0x3fc95b49e9b62af9, 0xbfef5da6ed43685d, // 0.1981, -0.98018 - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079 - 0x3fc8961727c41804, 0xbfef677556883cee, // 0.19208, -0.98138 - 0x3fc83366e89c64c5, 0xbfef6c3f7df5bbb7, // 0.18907, -0.98196 - 0x3fc7d0a7bbd2cb1b, 0xbfef70f6434b7eb7, // 0.18606, -0.98254 - 0x3fc76dd9de50bf31, 0xbfef7599a3a12077, // 0.18304, -0.98311 - 0x3fc70afd8d08c4ff, 0xbfef7a299c1a322a, // 0.18002, -0.98366 - 0x3fc6a81304f64ab2, 0xbfef7ea629e63d6e, // 0.177, -0.98421 - 0x3fc6451a831d830d, 0xbfef830f4a40c60c, // 0.17398, -0.98475 - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528 - 0x3fc57f008654cbde, 0xbfef8ba737cb4b78, // 0.16794, -0.9858 - 0x3fc51bdf8597c5f2, 0xbfef8fd5ffae41db, // 0.16491, -0.98631 - 0x3fc4b8b17f79fa88, 0xbfef93f14f85ac08, // 0.16189, -0.98681 - 0x3fc45576b1293e5a, 0xbfef97f924c9099b, // 0.15886, -0.9873 - 0x3fc3f22f57db4893, 0xbfef9bed7cfbde29, // 0.15583, -0.98778 - 0x3fc38edbb0cd8d14, 0xbfef9fce55adb2c8, // 0.1528, -0.98826 - 0x3fc32b7bf94516a7, 0xbfefa39bac7a1791, // 0.14976, -0.98872 - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918 - 0x3fc264994dfd340a, 0xbfefaafbcb0cfddc, // 0.1437, -0.98962 - 0x3fc20116d4ec7bce, 0xbfefae8e8e46cfbb, // 0.14066, -0.99006 - 0x3fc19d8940be24e7, 0xbfefb20dc681d54d, // 0.13762, -0.99049 - 0x3fc139f0cedaf576, 0xbfefb5797195d741, // 0.13458, -0.9909 - 0x3fc0d64dbcb26786, 0xbfefb8d18d66adb7, // 0.13154, -0.99131 - 0x3fc072a047ba831d, 0xbfefbc1617e44186, // 0.1285, -0.99171 - 0x3fc00ee8ad6fb85b, 0xbfefbf470f0a8d88, // 0.12545, -0.9921 - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248 - 0x3fbe8eb7fde4aa3e, 0xbfefc56e3b7d9af6, // 0.11937, -0.99285 - 0x3fbdc70ecbae9fc8, 0xbfefc8646cfeb721, // 0.11632, -0.99321 - 0x3fbcff533b307dc1, 0xbfefcb4703914354, // 0.11327, -0.99356 - 0x3fbc3785c79ec2d5, 0xbfefce15fd6da67b, // 0.11022, -0.99391 - 0x3fbb6fa6ec38f64c, 0xbfefd0d158d86087, // 0.10717, -0.99424 - 0x3fbaa7b724495c04, 0xbfefd37914220b84, // 0.10412, -0.99456 - 0x3fb9dfb6eb24a85c, 0xbfefd60d2da75c9e, // 0.10107, -0.99488 - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518 - 0x3fb84f8712c130a0, 0xbfefdafa7514538c, // 0.094963, -0.99548 - 0x3fb787586a5d5b21, 0xbfefdd539ff1f456, // 0.091909, -0.99577 - 0x3fb6bf1b3e79b129, 0xbfefdf9922f73307, // 0.088854, -0.99604 - 0x3fb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // 0.085797, -0.99631 - 0x3fb52e774a4d4d0a, 0xbfefe3e92be9d886, // 0.08274, -0.99657 - 0x3fb4661179272096, 0xbfefe5f3af2e3940, // 0.079682, -0.99682 - 0x3fb39d9f12c5a299, 0xbfefe7ea85482d60, // 0.076624, -0.99706 - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, // 0.073565, -0.99729 - 0x3fb20c9674ed444c, 0xbfefeb9d2530410f, // 0.070505, -0.99751 - 0x3fb1440134d709b2, 0xbfefed58ecb673c4, // 0.067444, -0.99772 - 0x3fb07b614e463064, 0xbfefef0102826191, // 0.064383, -0.99793 - 0x3faf656e79f820e0, 0xbfeff095658e71ad, // 0.061321, -0.99812 - 0x3fadd406f9808ec8, 0xbfeff21614e131ed, // 0.058258, -0.9983 - 0x3fac428d12c0d7e3, 0xbfeff3830f8d575c, // 0.055195, -0.99848 - 0x3faab101bd5f8317, 0xbfeff4dc54b1bed3, // 0.052132, -0.99864 - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, // 0.049068, -0.9988 - 0x3fa78dbaa5874685, 0xbfeff753bb1b9164, // 0.046003, -0.99894 - 0x3fa5fc00d290cd43, 0xbfeff871dadb81df, // 0.042938, -0.99908 - 0x3fa46a396ff86179, 0xbfeff97c4208c014, // 0.039873, -0.9992 - 0x3fa2d865759455cd, 0xbfeffa72effef75d, // 0.036807, -0.99932 - 0x3fa14685db42c17e, 0xbfeffb55e425fdae, // 0.033741, -0.99943 - 0x3f9f693731d1cf01, 0xbfeffc251df1d3f8, // 0.030675, -0.99953 - 0x3f9c454f4ce53b1c, 0xbfeffce09ce2a679, // 0.027608, -0.99962 - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, // 0.024541, -0.9997 - 0x3f95fd4d21fab226, 0xbfeffe1c6870cb77, // 0.021474, -0.99977 - 0x3f92d936bbe30efd, 0xbfeffe9cb44b51a1, // 0.018407, -0.99983 - 0x3f8f6a296ab997ca, 0xbfefff0943c53bd1, // 0.015339, -0.99988 - 0x3f8921d1fcdec784, 0xbfefff62169b92db, // 0.012272, -0.99992 - 0x3f82d96b0e509703, 0xbfefffa72c978c4f, //0.0092038, -0.99996 - 0x3f7921f0fe670071, 0xbfefffd8858e8a92, //0.0061359, -0.99998 - 0x3f6921f8becca4ba, 0xbfeffff621621d02, // 0.003068, -1 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_4096) -const uint64_t twiddleCoefF64_rfft_4096[4096] = { - 0x0000000000000000, 0x3ff0000000000000, // 0, 1 - 0x3f5921faaee6472d, 0x3feffffd88586ee6, // 0.001534, 1 - 0x3f6921f8becca4ba, 0x3feffff621621d02, // 0.003068, 1 - 0x3f72d97822f996bc, 0x3fefffe9cb1e2e8d, //0.0046019, 0.99999 - 0x3f7921f0fe670071, 0x3fefffd8858e8a92, //0.0061359, 0.99998 - 0x3f7f6a65f9a2a3c5, 0x3fefffc250b5daef, //0.0076698, 0.99997 - 0x3f82d96b0e509703, 0x3fefffa72c978c4f, //0.0092038, 0.99996 - 0x3f85fda037ac05e0, 0x3fefff871937ce2f, // 0.010738, 0.99994 - 0x3f8921d1fcdec784, 0x3fefff62169b92db, // 0.012272, 0.99992 - 0x3f8c45ffe1e48ad9, 0x3fefff3824c88f6f, // 0.013805, 0.9999 - 0x3f8f6a296ab997ca, 0x3fefff0943c53bd1, // 0.015339, 0.99988 - 0x3f9147270dad7132, 0x3feffed57398d2b7, // 0.016873, 0.99986 - 0x3f92d936bbe30efd, 0x3feffe9cb44b51a1, // 0.018407, 0.99983 - 0x3f946b4381fce81c, 0x3feffe5f05e578db, // 0.01994, 0.9998 - 0x3f95fd4d21fab226, 0x3feffe1c6870cb77, // 0.021474, 0.99977 - 0x3f978f535ddc9f03, 0x3feffdd4dbf78f52, // 0.023008, 0.99974 - 0x3f992155f7a3667e, 0x3feffd886084cd0d, // 0.024541, 0.9997 - 0x3f9ab354b1504fca, 0x3feffd36f624500c, // 0.026075, 0.99966 - 0x3f9c454f4ce53b1c, 0x3feffce09ce2a679, // 0.027608, 0.99962 - 0x3f9dd7458c64ab39, 0x3feffc8554cd213a, // 0.029142, 0.99958 - 0x3f9f693731d1cf01, 0x3feffc251df1d3f8, // 0.030675, 0.99953 - 0x3fa07d91ff984580, 0x3feffbbff85f9515, // 0.032208, 0.99948 - 0x3fa14685db42c17e, 0x3feffb55e425fdae, // 0.033741, 0.99943 - 0x3fa20f770ceb11c6, 0x3feffae6e1556998, // 0.035274, 0.99938 - 0x3fa2d865759455cd, 0x3feffa72effef75d, // 0.036807, 0.99932 - 0x3fa3a150f6421afc, 0x3feff9fa10348837, // 0.03834, 0.99926 - 0x3fa46a396ff86179, 0x3feff97c4208c014, // 0.039873, 0.9992 - 0x3fa5331ec3bba0eb, 0x3feff8f9858f058b, // 0.041406, 0.99914 - 0x3fa5fc00d290cd43, 0x3feff871dadb81df, // 0.042938, 0.99908 - 0x3fa6c4df7d7d5b84, 0x3feff7e5420320f9, // 0.044471, 0.99901 - 0x3fa78dbaa5874685, 0x3feff753bb1b9164, // 0.046003, 0.99894 - 0x3fa856922bb513c1, 0x3feff6bd463b444d, // 0.047535, 0.99887 - 0x3fa91f65f10dd814, 0x3feff621e3796d7e, // 0.049068, 0.9988 - 0x3fa9e835d6993c87, 0x3feff58192ee0358, // 0.0506, 0.99872 - 0x3faab101bd5f8317, 0x3feff4dc54b1bed3, // 0.052132, 0.99864 - 0x3fab79c986698b78, 0x3feff43228de1b77, // 0.053664, 0.99856 - 0x3fac428d12c0d7e3, 0x3feff3830f8d575c, // 0.055195, 0.99848 - 0x3fad0b4c436f91d0, 0x3feff2cf08da7321, // 0.056727, 0.99839 - 0x3fadd406f9808ec8, 0x3feff21614e131ed, // 0.058258, 0.9983 - 0x3fae9cbd15ff5527, 0x3feff15833be1965, // 0.05979, 0.99821 - 0x3faf656e79f820e0, 0x3feff095658e71ad, // 0.061321, 0.99812 - 0x3fb0170d833bf421, 0x3fefefcdaa704562, // 0.062852, 0.99802 - 0x3fb07b614e463064, 0x3fefef0102826191, // 0.064383, 0.99793 - 0x3fb0dfb28ea201e6, 0x3fefee2f6de455ba, // 0.065913, 0.99783 - 0x3fb1440134d709b2, 0x3fefed58ecb673c4, // 0.067444, 0.99772 - 0x3fb1a84d316d4f8a, 0x3fefec7d7f19cffc, // 0.068974, 0.99762 - 0x3fb20c9674ed444c, 0x3fefeb9d2530410f, // 0.070505, 0.99751 - 0x3fb270dcefdfc45b, 0x3fefeab7df1c6005, // 0.072035, 0.9974 - 0x3fb2d52092ce19f6, 0x3fefe9cdad01883a, // 0.073565, 0.99729 - 0x3fb339614e41ffa5, 0x3fefe8de8f03d75c, // 0.075094, 0.99718 - 0x3fb39d9f12c5a299, 0x3fefe7ea85482d60, // 0.076624, 0.99706 - 0x3fb401d9d0e3a507, 0x3fefe6f18ff42c84, // 0.078153, 0.99694 - 0x3fb4661179272096, 0x3fefe5f3af2e3940, // 0.079682, 0.99682 - 0x3fb4ca45fc1ba8b6, 0x3fefe4f0e31d7a4a, // 0.081211, 0.9967 - 0x3fb52e774a4d4d0a, 0x3fefe3e92be9d886, // 0.08274, 0.99657 - 0x3fb592a554489bc8, 0x3fefe2dc89bbff08, // 0.084269, 0.99644 - 0x3fb5f6d00a9aa419, 0x3fefe1cafcbd5b09, // 0.085797, 0.99631 - 0x3fb65af75dd0f87b, 0x3fefe0b485181be3, // 0.087326, 0.99618 - 0x3fb6bf1b3e79b129, 0x3fefdf9922f73307, // 0.088854, 0.99604 - 0x3fb7233b9d236e71, 0x3fefde78d68653fd, // 0.090381, 0.99591 - 0x3fb787586a5d5b21, 0x3fefdd539ff1f456, // 0.091909, 0.99577 - 0x3fb7eb7196b72ee4, 0x3fefdc297f674ba9, // 0.093436, 0.99563 - 0x3fb84f8712c130a0, 0x3fefdafa7514538c, // 0.094963, 0.99548 - 0x3fb8b398cf0c38e0, 0x3fefd9c68127c78c, // 0.09649, 0.99533 - 0x3fb917a6bc29b42c, 0x3fefd88da3d12526, // 0.098017, 0.99518 - 0x3fb97bb0caaba56f, 0x3fefd74fdd40abbf, // 0.099544, 0.99503 - 0x3fb9dfb6eb24a85c, 0x3fefd60d2da75c9e, // 0.10107, 0.99488 - 0x3fba43b90e27f3c4, 0x3fefd4c59536fae4, // 0.1026, 0.99472 - 0x3fbaa7b724495c04, 0x3fefd37914220b84, // 0.10412, 0.99456 - 0x3fbb0bb11e1d5559, 0x3fefd227aa9bd53b, // 0.10565, 0.9944 - 0x3fbb6fa6ec38f64c, 0x3fefd0d158d86087, // 0.10717, 0.99424 - 0x3fbbd3987f31fa0e, 0x3fefcf761f0c77a3, // 0.1087, 0.99407 - 0x3fbc3785c79ec2d5, 0x3fefce15fd6da67b, // 0.11022, 0.99391 - 0x3fbc9b6eb6165c42, 0x3fefccb0f4323aa3, // 0.11175, 0.99374 - 0x3fbcff533b307dc1, 0x3fefcb4703914354, // 0.11327, 0.99356 - 0x3fbd633347858ce4, 0x3fefc9d82bc2915e, // 0.11479, 0.99339 - 0x3fbdc70ecbae9fc8, 0x3fefc8646cfeb721, // 0.11632, 0.99321 - 0x3fbe2ae5b8457f77, 0x3fefc6ebc77f0887, // 0.11784, 0.99303 - 0x3fbe8eb7fde4aa3e, 0x3fefc56e3b7d9af6, // 0.11937, 0.99285 - 0x3fbef2858d27561b, 0x3fefc3ebc935454c, // 0.12089, 0.99267 - 0x3fbf564e56a9730e, 0x3fefc26470e19fd3, // 0.12241, 0.99248 - 0x3fbfba124b07ad85, 0x3fefc0d832bf043a, // 0.12393, 0.99229 - 0x3fc00ee8ad6fb85b, 0x3fefbf470f0a8d88, // 0.12545, 0.9921 - 0x3fc040c5bb67747e, 0x3fefbdb106021816, // 0.12698, 0.99191 - 0x3fc072a047ba831d, 0x3fefbc1617e44186, // 0.1285, 0.99171 - 0x3fc0a4784ab8bf1d, 0x3fefba7644f068b5, // 0.13002, 0.99151 - 0x3fc0d64dbcb26786, 0x3fefb8d18d66adb7, // 0.13154, 0.99131 - 0x3fc1082095f820b0, 0x3fefb727f187f1c7, // 0.13306, 0.99111 - 0x3fc139f0cedaf576, 0x3fefb5797195d741, // 0.13458, 0.9909 - 0x3fc16bbe5fac5865, 0x3fefb3c60dd2c199, // 0.1361, 0.9907 - 0x3fc19d8940be24e7, 0x3fefb20dc681d54d, // 0.13762, 0.99049 - 0x3fc1cf516a62a077, 0x3fefb0509be6f7db, // 0.13914, 0.99027 - 0x3fc20116d4ec7bce, 0x3fefae8e8e46cfbb, // 0.14066, 0.99006 - 0x3fc232d978aed413, 0x3fefacc79de6c44f, // 0.14218, 0.98984 - 0x3fc264994dfd340a, 0x3fefaafbcb0cfddc, // 0.1437, 0.98962 - 0x3fc296564d2b953e, 0x3fefa92b1600657c, // 0.14521, 0.9894 - 0x3fc2c8106e8e613a, 0x3fefa7557f08a517, // 0.14673, 0.98918 - 0x3fc2f9c7aa7a72af, 0x3fefa57b066e2754, // 0.14825, 0.98895 - 0x3fc32b7bf94516a7, 0x3fefa39bac7a1791, // 0.14976, 0.98872 - 0x3fc35d2d53440db2, 0x3fefa1b7717661d5, // 0.15128, 0.98849 - 0x3fc38edbb0cd8d14, 0x3fef9fce55adb2c8, // 0.1528, 0.98826 - 0x3fc3c0870a383ff6, 0x3fef9de0596b77a3, // 0.15431, 0.98802 - 0x3fc3f22f57db4893, 0x3fef9bed7cfbde29, // 0.15583, 0.98778 - 0x3fc423d4920e4166, 0x3fef99f5c0abd496, // 0.15734, 0.98754 - 0x3fc45576b1293e5a, 0x3fef97f924c9099b, // 0.15886, 0.9873 - 0x3fc48715ad84cdf5, 0x3fef95f7a9a1ec47, // 0.16037, 0.98706 - 0x3fc4b8b17f79fa88, 0x3fef93f14f85ac08, // 0.16189, 0.98681 - 0x3fc4ea4a1f624b61, 0x3fef91e616c43891, // 0.1634, 0.98656 - 0x3fc51bdf8597c5f2, 0x3fef8fd5ffae41db, // 0.16491, 0.98631 - 0x3fc54d71aa74ef02, 0x3fef8dc10a95380d, // 0.16643, 0.98605 - 0x3fc57f008654cbde, 0x3fef8ba737cb4b78, // 0.16794, 0.9858 - 0x3fc5b08c1192e381, 0x3fef898887a36c84, // 0.16945, 0.98554 - 0x3fc5e214448b3fc6, 0x3fef8764fa714ba9, // 0.17096, 0.98528 - 0x3fc61399179a6e94, 0x3fef853c9089595e, // 0.17247, 0.98501 - 0x3fc6451a831d830d, 0x3fef830f4a40c60c, // 0.17398, 0.98475 - 0x3fc676987f7216b8, 0x3fef80dd27ed8204, // 0.17549, 0.98448 - 0x3fc6a81304f64ab2, 0x3fef7ea629e63d6e, // 0.177, 0.98421 - 0x3fc6d98a0c08c8da, 0x3fef7c6a50826840, // 0.17851, 0.98394 - 0x3fc70afd8d08c4ff, 0x3fef7a299c1a322a, // 0.18002, 0.98366 - 0x3fc73c6d8055fe0a, 0x3fef77e40d068a90, // 0.18153, 0.98339 - 0x3fc76dd9de50bf31, 0x3fef7599a3a12077, // 0.18304, 0.98311 - 0x3fc79f429f59e11d, 0x3fef734a60446279, // 0.18455, 0.98282 - 0x3fc7d0a7bbd2cb1b, 0x3fef70f6434b7eb7, // 0.18606, 0.98254 - 0x3fc802092c1d744b, 0x3fef6e9d4d1262ca, // 0.18756, 0.98225 - 0x3fc83366e89c64c5, 0x3fef6c3f7df5bbb7, // 0.18907, 0.98196 - 0x3fc864c0e9b2b6cf, 0x3fef69dcd652f5de, // 0.19057, 0.98167 - 0x3fc8961727c41804, 0x3fef677556883cee, // 0.19208, 0.98138 - 0x3fc8c7699b34ca7e, 0x3fef6508fef47bd5, // 0.19359, 0.98108 - 0x3fc8f8b83c69a60a, 0x3fef6297cff75cb0, // 0.19509, 0.98079 - 0x3fc92a0303c8194f, 0x3fef6021c9f148c2, // 0.19659, 0.98048 - 0x3fc95b49e9b62af9, 0x3fef5da6ed43685d, // 0.1981, 0.98018 - 0x3fc98c8ce69a7aec, 0x3fef5b273a4fa2d9, // 0.1996, 0.97988 - 0x3fc9bdcbf2dc4366, 0x3fef58a2b1789e84, // 0.2011, 0.97957 - 0x3fc9ef0706e35a35, 0x3fef56195321c090, // 0.20261, 0.97926 - 0x3fca203e1b1831da, 0x3fef538b1faf2d07, // 0.20411, 0.97895 - 0x3fca517127e3dabc, 0x3fef50f81785c6b9, // 0.20561, 0.97863 - 0x3fca82a025b00451, 0x3fef4e603b0b2f2d, // 0.20711, 0.97832 - 0x3fcab3cb0ce6fe44, 0x3fef4bc38aa5c694, // 0.20861, 0.978 - 0x3fcae4f1d5f3b9ab, 0x3fef492206bcabb4, // 0.21011, 0.97768 - 0x3fcb16147941ca2a, 0x3fef467bafb7bbe0, // 0.21161, 0.97735 - 0x3fcb4732ef3d6722, 0x3fef43d085ff92dd, // 0.21311, 0.97703 - 0x3fcb784d30536cda, 0x3fef412089fd8adc, // 0.21461, 0.9767 - 0x3fcba96334f15dad, 0x3fef3e6bbc1bbc65, // 0.21611, 0.97637 - 0x3fcbda74f5856330, 0x3fef3bb21cc4fe47, // 0.2176, 0.97604 - 0x3fcc0b826a7e4f63, 0x3fef38f3ac64e589, // 0.2191, 0.9757 - 0x3fcc3c8b8c4b9dd7, 0x3fef36306b67c556, // 0.2206, 0.97536 - 0x3fcc6d90535d74dc, 0x3fef33685a3aaef0, // 0.22209, 0.97503 - 0x3fcc9e90b824a6a9, 0x3fef309b794b719f, // 0.22359, 0.97468 - 0x3fcccf8cb312b286, 0x3fef2dc9c9089a9d, // 0.22508, 0.97434 - 0x3fcd00843c99c5f9, 0x3fef2af349e17507, // 0.22658, 0.97399 - 0x3fcd31774d2cbdee, 0x3fef2817fc4609ce, // 0.22807, 0.97364 - 0x3fcd6265dd3f27e3, 0x3fef2537e0a71f9f, // 0.22957, 0.97329 - 0x3fcd934fe5454311, 0x3fef2252f7763ada, // 0.23106, 0.97294 - 0x3fcdc4355db40195, 0x3fef1f6941259d7a, // 0.23255, 0.97258 - 0x3fcdf5163f01099a, 0x3fef1c7abe284708, // 0.23404, 0.97223 - 0x3fce25f281a2b684, 0x3fef19876ef1f486, // 0.23553, 0.97187 - 0x3fce56ca1e101a1b, 0x3fef168f53f7205d, // 0.23702, 0.9715 - 0x3fce879d0cc0fdaf, 0x3fef13926dad024e, // 0.23851, 0.97114 - 0x3fceb86b462de348, 0x3fef1090bc898f5f, // 0.24, 0.97077 - 0x3fcee934c2d006c7, 0x3fef0d8a410379c5, // 0.24149, 0.9704 - 0x3fcf19f97b215f1a, 0x3fef0a7efb9230d7, // 0.24298, 0.97003 - 0x3fcf4ab9679c9f5c, 0x3fef076eecade0fa, // 0.24447, 0.96966 - 0x3fcf7b7480bd3801, 0x3fef045a14cf738c, // 0.24596, 0.96928 - 0x3fcfac2abeff57ff, 0x3fef014074708ed3, // 0.24744, 0.9689 - 0x3fcfdcdc1adfedf8, 0x3feefe220c0b95ec, // 0.24893, 0.96852 - 0x3fd006c4466e54af, 0x3feefafedc1ba8b7, // 0.25041, 0.96814 - 0x3fd01f1806b9fdd2, 0x3feef7d6e51ca3c0, // 0.2519, 0.96775 - 0x3fd037694a928cac, 0x3feef4aa278b2032, // 0.25338, 0.96737 - 0x3fd04fb80e37fdae, 0x3feef178a3e473c2, // 0.25487, 0.96698 - 0x3fd068044deab002, 0x3feeee425aa6b09a, // 0.25635, 0.96658 - 0x3fd0804e05eb661e, 0x3feeeb074c50a544, // 0.25783, 0.96619 - 0x3fd09895327b465e, 0x3feee7c77961dc9e, // 0.25931, 0.96579 - 0x3fd0b0d9cfdbdb90, 0x3feee482e25a9dbc, // 0.26079, 0.96539 - 0x3fd0c91bda4f158d, 0x3feee13987bbebdc, // 0.26227, 0.96499 - 0x3fd0e15b4e1749cd, 0x3feeddeb6a078651, // 0.26375, 0.96459 - 0x3fd0f998277733f7, 0x3feeda9889bfe86a, // 0.26523, 0.96418 - 0x3fd111d262b1f677, 0x3feed740e7684963, // 0.26671, 0.96378 - 0x3fd12a09fc0b1b12, 0x3feed3e483849c51, // 0.26819, 0.96337 - 0x3fd1423eefc69378, 0x3feed0835e999009, // 0.26967, 0.96295 - 0x3fd15a713a28b9d9, 0x3feecd1d792c8f10, // 0.27115, 0.96254 - 0x3fd172a0d7765177, 0x3feec9b2d3c3bf84, // 0.27262, 0.96212 - 0x3fd18acdc3f4873a, 0x3feec6436ee60309, // 0.2741, 0.9617 - 0x3fd1a2f7fbe8f243, 0x3feec2cf4b1af6b2, // 0.27557, 0.96128 - 0x3fd1bb1f7b999480, 0x3feebf5668eaf2ef, // 0.27705, 0.96086 - 0x3fd1d3443f4cdb3d, 0x3feebbd8c8df0b74, // 0.27852, 0.96043 - 0x3fd1eb6643499fbb, 0x3feeb8566b810f2a, // 0.27999, 0.96 - 0x3fd2038583d727bd, 0x3feeb4cf515b8811, // 0.28146, 0.95957 - 0x3fd21ba1fd3d2623, 0x3feeb1437af9bb34, // 0.28294, 0.95914 - 0x3fd233bbabc3bb72, 0x3feeadb2e8e7a88e, // 0.28441, 0.9587 - 0x3fd24bd28bb37672, 0x3feeaa1d9bb20af3, // 0.28588, 0.95827 - 0x3fd263e6995554ba, 0x3feea68393e65800, // 0.28735, 0.95783 - 0x3fd27bf7d0f2c346, 0x3feea2e4d212c000, // 0.28882, 0.95738 - 0x3fd294062ed59f05, 0x3fee9f4156c62dda, // 0.29028, 0.95694 - 0x3fd2ac11af483572, 0x3fee9b99229046f8, // 0.29175, 0.95649 - 0x3fd2c41a4e954520, 0x3fee97ec36016b30, // 0.29322, 0.95605 - 0x3fd2dc200907fe51, 0x3fee943a91aab4b4, // 0.29469, 0.95559 - 0x3fd2f422daec0386, 0x3fee9084361df7f3, // 0.29615, 0.95514 - 0x3fd30c22c08d6a13, 0x3fee8cc923edc388, // 0.29762, 0.95469 - 0x3fd3241fb638baaf, 0x3fee89095bad6025, // 0.29908, 0.95423 - 0x3fd33c19b83af207, 0x3fee8544ddf0d075, // 0.30054, 0.95377 - 0x3fd35410c2e18152, 0x3fee817bab4cd10d, // 0.30201, 0.95331 - 0x3fd36c04d27a4edf, 0x3fee7dadc456d850, // 0.30347, 0.95284 - 0x3fd383f5e353b6aa, 0x3fee79db29a5165a, // 0.30493, 0.95238 - 0x3fd39be3f1bc8aef, 0x3fee7603dbce74e9, // 0.30639, 0.95191 - 0x3fd3b3cefa0414b7, 0x3fee7227db6a9744, // 0.30785, 0.95144 - 0x3fd3cbb6f87a146e, 0x3fee6e472911da27, // 0.30931, 0.95096 - 0x3fd3e39be96ec271, 0x3fee6a61c55d53a7, // 0.31077, 0.95049 - 0x3fd3fb7dc932cfa4, 0x3fee6677b0e6d31e, // 0.31222, 0.95001 - 0x3fd4135c94176602, 0x3fee6288ec48e112, // 0.31368, 0.94953 - 0x3fd42b38466e2928, 0x3fee5e95781ebf1c, // 0.31514, 0.94905 - 0x3fd44310dc8936f0, 0x3fee5a9d550467d3, // 0.31659, 0.94856 - 0x3fd45ae652bb2800, 0x3fee56a083968eb1, // 0.31805, 0.94807 - 0x3fd472b8a5571054, 0x3fee529f04729ffc, // 0.3195, 0.94759 - 0x3fd48a87d0b07fd7, 0x3fee4e98d836c0af, // 0.32096, 0.94709 - 0x3fd4a253d11b82f3, 0x3fee4a8dff81ce5e, // 0.32241, 0.9466 - 0x3fd4ba1ca2eca31c, 0x3fee467e7af35f23, // 0.32386, 0.94611 - 0x3fd4d1e24278e76a, 0x3fee426a4b2bc17e, // 0.32531, 0.94561 - 0x3fd4e9a4ac15d520, 0x3fee3e5170cbfc46, // 0.32676, 0.94511 - 0x3fd50163dc197047, 0x3fee3a33ec75ce85, // 0.32821, 0.9446 - 0x3fd5191fceda3c35, 0x3fee3611becbaf69, // 0.32966, 0.9441 - 0x3fd530d880af3c24, 0x3fee31eae870ce25, // 0.33111, 0.94359 - 0x3fd5488dedeff3be, 0x3fee2dbf6a0911d9, // 0.33255, 0.94308 - 0x3fd5604012f467b4, 0x3fee298f4439197a, // 0.334, 0.94257 - 0x3fd577eeec151e47, 0x3fee255a77a63bb8, // 0.33545, 0.94206 - 0x3fd58f9a75ab1fdd, 0x3fee212104f686e5, // 0.33689, 0.94154 - 0x3fd5a742ac0ff78d, 0x3fee1ce2ecd0c0d8, // 0.33833, 0.94103 - 0x3fd5bee78b9db3b6, 0x3fee18a02fdc66d9, // 0.33978, 0.94051 - 0x3fd5d68910aee686, 0x3fee1458cec1ad83, // 0.34122, 0.93998 - 0x3fd5ee27379ea693, 0x3fee100cca2980ac, // 0.34266, 0.93946 - 0x3fd605c1fcc88f63, 0x3fee0bbc22bd8349, // 0.3441, 0.93893 - 0x3fd61d595c88c203, 0x3fee0766d9280f54, // 0.34554, 0.9384 - 0x3fd634ed533be58e, 0x3fee030cee1435b8, // 0.34698, 0.93787 - 0x3fd64c7ddd3f27c6, 0x3fedfeae622dbe2b, // 0.34842, 0.93734 - 0x3fd6640af6f03d9e, 0x3fedfa4b3621271d, // 0.34986, 0.9368 - 0x3fd67b949cad63ca, 0x3fedf5e36a9ba59c, // 0.35129, 0.93627 - 0x3fd6931acad55f51, 0x3fedf177004b2534, // 0.35273, 0.93573 - 0x3fd6aa9d7dc77e16, 0x3feded05f7de47da, // 0.35416, 0.93518 - 0x3fd6c21cb1e39771, 0x3fede890520465ce, // 0.3556, 0.93464 - 0x3fd6d998638a0cb5, 0x3fede4160f6d8d81, // 0.35703, 0.93409 - 0x3fd6f1108f1bc9c5, 0x3feddf9730ca837b, // 0.35846, 0.93354 - 0x3fd7088530fa459e, 0x3feddb13b6ccc23d, // 0.3599, 0.93299 - 0x3fd71ff6458782ec, 0x3fedd68ba2267a25, // 0.36133, 0.93244 - 0x3fd73763c9261092, 0x3fedd1fef38a915a, // 0.36276, 0.93188 - 0x3fd74ecdb8390a3e, 0x3fedcd6dabaca3a5, // 0.36418, 0.93133 - 0x3fd766340f2418f6, 0x3fedc8d7cb410260, // 0.36561, 0.93077 - 0x3fd77d96ca4b73a6, 0x3fedc43d52fcb453, // 0.36704, 0.93021 - 0x3fd794f5e613dfae, 0x3fedbf9e4395759a, // 0.36847, 0.92964 - 0x3fd7ac515ee2b172, 0x3fedbafa9dc1b78d, // 0.36989, 0.92907 - 0x3fd7c3a9311dcce7, 0x3fedb6526238a09b, // 0.37132, 0.92851 - 0x3fd7dafd592ba621, 0x3fedb1a591b20c38, // 0.37274, 0.92794 - 0x3fd7f24dd37341e3, 0x3fedacf42ce68ab9, // 0.37416, 0.92736 - 0x3fd8099a9c5c362d, 0x3feda83e348f613b, // 0.37559, 0.92679 - 0x3fd820e3b04eaac4, 0x3feda383a9668988, // 0.37701, 0.92621 - 0x3fd838290bb359c8, 0x3fed9ec48c26b1f3, // 0.37843, 0.92563 - 0x3fd84f6aaaf3903f, 0x3fed9a00dd8b3d46, // 0.37985, 0.92505 - 0x3fd866a88a792ea0, 0x3fed95389e50429b, // 0.38127, 0.92447 - 0x3fd87de2a6aea963, 0x3fed906bcf328d46, // 0.38268, 0.92388 - 0x3fd89518fbff098e, 0x3fed8b9a70ef9cb4, // 0.3841, 0.92329 - 0x3fd8ac4b86d5ed44, 0x3fed86c48445a450, // 0.38552, 0.9227 - 0x3fd8c37a439f884f, 0x3fed81ea09f38b63, // 0.38693, 0.92211 - 0x3fd8daa52ec8a4af, 0x3fed7d0b02b8ecf9, // 0.38835, 0.92151 - 0x3fd8f1cc44bea329, 0x3fed78276f5617c6, // 0.38976, 0.92092 - 0x3fd908ef81ef7bd1, 0x3fed733f508c0dff, // 0.39117, 0.92032 - 0x3fd9200ee2c9be97, 0x3fed6e52a71c8547, // 0.39258, 0.91972 - 0x3fd9372a63bc93d7, 0x3fed696173c9e68b, // 0.39399, 0.91911 - 0x3fd94e420137bce3, 0x3fed646bb7574de5, // 0.3954, 0.91851 - 0x3fd96555b7ab948f, 0x3fed5f7172888a7f, // 0.39681, 0.9179 - 0x3fd97c6583890fc2, 0x3fed5a72a6221e73, // 0.39822, 0.91729 - 0x3fd993716141bdfe, 0x3fed556f52e93eb1, // 0.39962, 0.91668 - 0x3fd9aa794d47c9ee, 0x3fed506779a3d2d9, // 0.40103, 0.91606 - 0x3fd9c17d440df9f2, 0x3fed4b5b1b187524, // 0.40243, 0.91545 - 0x3fd9d87d4207b0ab, 0x3fed464a380e7242, // 0.40384, 0.91483 - 0x3fd9ef7943a8ed8a, 0x3fed4134d14dc93a, // 0.40524, 0.91421 - 0x3fda067145664d57, 0x3fed3c1ae79f2b4e, // 0.40664, 0.91359 - 0x3fda1d6543b50ac0, 0x3fed36fc7bcbfbdc, // 0.40804, 0.91296 - 0x3fda34553b0afee5, 0x3fed31d98e9e503a, // 0.40944, 0.91234 - 0x3fda4b4127dea1e4, 0x3fed2cb220e0ef9f, // 0.41084, 0.91171 - 0x3fda622906a70b63, 0x3fed2786335f52fc, // 0.41224, 0.91107 - 0x3fda790cd3dbf31a, 0x3fed2255c6e5a4e1, // 0.41364, 0.91044 - 0x3fda8fec8bf5b166, 0x3fed1d20dc40c15c, // 0.41503, 0.90981 - 0x3fdaa6c82b6d3fc9, 0x3fed17e7743e35dc, // 0.41643, 0.90917 - 0x3fdabd9faebc3980, 0x3fed12a98fac410c, // 0.41782, 0.90853 - 0x3fdad473125cdc08, 0x3fed0d672f59d2b9, // 0.41922, 0.90789 - 0x3fdaeb4252ca07ab, 0x3fed082054168bac, // 0.42061, 0.90724 - 0x3fdb020d6c7f4009, 0x3fed02d4feb2bd92, // 0.422, 0.9066 - 0x3fdb18d45bf8aca6, 0x3fecfd852fff6ad4, // 0.42339, 0.90595 - 0x3fdb2f971db31972, 0x3fecf830e8ce467b, // 0.42478, 0.9053 - 0x3fdb4655ae2bf757, 0x3fecf2d829f1b40e, // 0.42617, 0.90464 - 0x3fdb5d1009e15cc0, 0x3feced7af43cc773, // 0.42756, 0.90399 - 0x3fdb73c62d520624, 0x3fece819488344ce, // 0.42894, 0.90333 - 0x3fdb8a7814fd5693, 0x3fece2b32799a060, // 0.43033, 0.90267 - 0x3fdba125bd63583e, 0x3fecdd489254fe65, // 0.43171, 0.90201 - 0x3fdbb7cf2304bd01, 0x3fecd7d9898b32f6, // 0.43309, 0.90135 - 0x3fdbce744262deee, 0x3fecd2660e12c1e6, // 0.43448, 0.90068 - 0x3fdbe51517ffc0d9, 0x3fecccee20c2de9f, // 0.43586, 0.90002 - 0x3fdbfbb1a05e0edc, 0x3fecc771c2736c09, // 0.43724, 0.89935 - 0x3fdc1249d8011ee7, 0x3fecc1f0f3fcfc5c, // 0.43862, 0.89867 - 0x3fdc28ddbb6cf145, 0x3fecbc6bb638d10b, // 0.43999, 0.898 - 0x3fdc3f6d47263129, 0x3fecb6e20a00da99, // 0.44137, 0.89732 - 0x3fdc55f877b23537, 0x3fecb153f02fb87d, // 0.44275, 0.89665 - 0x3fdc6c7f4997000a, 0x3fecabc169a0b901, // 0.44412, 0.89597 - 0x3fdc8301b95b40c2, 0x3feca62a772fd919, // 0.4455, 0.89528 - 0x3fdc997fc3865388, 0x3feca08f19b9c449, // 0.44687, 0.8946 - 0x3fdcaff964a0421d, 0x3fec9aef521bd480, // 0.44824, 0.89391 - 0x3fdcc66e9931c45d, 0x3fec954b213411f5, // 0.44961, 0.89322 - 0x3fdcdcdf5dc440ce, 0x3fec8fa287e13305, // 0.45098, 0.89253 - 0x3fdcf34baee1cd21, 0x3fec89f587029c13, // 0.45235, 0.89184 - 0x3fdd09b389152ec1, 0x3fec84441f785f61, // 0.45372, 0.89115 - 0x3fdd2016e8e9db5b, 0x3fec7e8e52233cf3, // 0.45508, 0.89045 - 0x3fdd3675caebf962, 0x3fec78d41fe4a267, // 0.45645, 0.88975 - 0x3fdd4cd02ba8609c, 0x3fec7315899eaad7, // 0.45781, 0.88905 - 0x3fdd632607ac9aa9, 0x3fec6d5290341eb2, // 0.45918, 0.88835 - 0x3fdd79775b86e389, 0x3fec678b3488739b, // 0.46054, 0.88764 - 0x3fdd8fc423c62a25, 0x3fec61bf777fcc48, // 0.4619, 0.88693 - 0x3fdda60c5cfa10d8, 0x3fec5bef59fef85a, // 0.46326, 0.88622 - 0x3fddbc5003b2edf8, 0x3fec561adceb743e, // 0.46462, 0.88551 - 0x3fddd28f1481cc58, 0x3fec5042012b6907, // 0.46598, 0.8848 - 0x3fdde8c98bf86bd6, 0x3fec4a64c7a5ac4c, // 0.46733, 0.88408 - 0x3fddfeff66a941de, 0x3fec44833141c004, // 0.46869, 0.88336 - 0x3fde1530a12779f4, 0x3fec3e9d3ee7d262, // 0.47004, 0.88264 - 0x3fde2b5d3806f63b, 0x3fec38b2f180bdb1, // 0.4714, 0.88192 - 0x3fde418527dc4ffa, 0x3fec32c449f60831, // 0.47275, 0.8812 - 0x3fde57a86d3cd824, 0x3fec2cd14931e3f1, // 0.4741, 0.88047 - 0x3fde6dc704be97e2, 0x3fec26d9f01f2eaf, // 0.47545, 0.87974 - 0x3fde83e0eaf85113, 0x3fec20de3fa971b0, // 0.4768, 0.87901 - 0x3fde99f61c817eda, 0x3fec1ade38bce19b, // 0.47815, 0.87828 - 0x3fdeb00695f25620, 0x3fec14d9dc465e58, // 0.47949, 0.87755 - 0x3fdec61253e3c61b, 0x3fec0ed12b3372e9, // 0.48084, 0.87681 - 0x3fdedc1952ef78d5, 0x3fec08c426725549, // 0.48218, 0.87607 - 0x3fdef21b8fafd3b5, 0x3fec02b2cef1e641, // 0.48353, 0.87533 - 0x3fdf081906bff7fd, 0x3febfc9d25a1b147, // 0.48487, 0.87459 - 0x3fdf1e11b4bbc35c, 0x3febf6832b71ec5b, // 0.48621, 0.87384 - 0x3fdf3405963fd068, 0x3febf064e15377dd, // 0.48755, 0.87309 - 0x3fdf49f4a7e97729, 0x3febea424837de6d, // 0.48889, 0.87235 - 0x3fdf5fdee656cda3, 0x3febe41b611154c1, // 0.49023, 0.8716 - 0x3fdf75c44e26a852, 0x3febddf02cd2b983, // 0.49156, 0.87084 - 0x3fdf8ba4dbf89aba, 0x3febd7c0ac6f952a, // 0.4929, 0.87009 - 0x3fdfa1808c6cf7e0, 0x3febd18ce0dc19d6, // 0.49423, 0.86933 - 0x3fdfb7575c24d2de, 0x3febcb54cb0d2327, // 0.49557, 0.86857 - 0x3fdfcd2947c1ff57, 0x3febc5186bf8361d, // 0.4969, 0.86781 - 0x3fdfe2f64be7120f, 0x3febbed7c49380ea, // 0.49823, 0.86705 - 0x3fdff8be6537615e, 0x3febb892d5d5dad5, // 0.49956, 0.86628 - 0x3fe00740c82b82e0, 0x3febb249a0b6c40d, // 0.50089, 0.86551 - 0x3fe0121fe4f56d2c, 0x3febabfc262e6586, // 0.50221, 0.86474 - 0x3fe01cfc874c3eb7, 0x3feba5aa673590d2, // 0.50354, 0.86397 - 0x3fe027d6ad83287e, 0x3feb9f5464c5bffc, // 0.50486, 0.8632 - 0x3fe032ae55edbd95, 0x3feb98fa1fd9155e, // 0.50619, 0.86242 - 0x3fe03d837edff370, 0x3feb929b996a5b7f, // 0.50751, 0.86165 - 0x3fe0485626ae221a, 0x3feb8c38d27504e9, // 0.50883, 0.86087 - 0x3fe053264bad0483, 0x3feb85d1cbf52c02, // 0.51015, 0.86009 - 0x3fe05df3ec31b8b6, 0x3feb7f6686e792ea, // 0.51147, 0.8593 - 0x3fe068bf0691c028, 0x3feb78f70449a34b, // 0.51279, 0.85852 - 0x3fe073879922ffed, 0x3feb728345196e3e, // 0.5141, 0.85773 - 0x3fe07e4da23bc102, 0x3feb6c0b4a55ac17, // 0.51542, 0.85694 - 0x3fe089112032b08c, 0x3feb658f14fdbc47, // 0.51673, 0.85615 - 0x3fe093d2115ee018, 0x3feb5f0ea611a532, // 0.51804, 0.85535 - 0x3fe09e907417c5e1, 0x3feb5889fe921405, // 0.51936, 0.85456 - 0x3fe0a94c46b53d0b, 0x3feb52011f805c92, // 0.52067, 0.85376 - 0x3fe0b405878f85ec, 0x3feb4b7409de7925, // 0.52198, 0.85296 - 0x3fe0bebc34ff4646, 0x3feb44e2beaf0a61, // 0.52328, 0.85216 - 0x3fe0c9704d5d898f, 0x3feb3e4d3ef55712, // 0.52459, 0.85136 - 0x3fe0d421cf03c12b, 0x3feb37b38bb54c09, // 0.5259, 0.85055 - 0x3fe0ded0b84bc4b5, 0x3feb3115a5f37bf4, // 0.5272, 0.84974 - 0x3fe0e97d078fd23b, 0x3feb2a738eb51f33, // 0.5285, 0.84893 - 0x3fe0f426bb2a8e7d, 0x3feb23cd470013b4, // 0.5298, 0.84812 - 0x3fe0fecdd1770537, 0x3feb1d22cfdadcc6, // 0.5311, 0.84731 - 0x3fe1097248d0a956, 0x3feb16742a4ca2f5, // 0.5324, 0.84649 - 0x3fe114141f935545, 0x3feb0fc1575d33db, // 0.5337, 0.84567 - 0x3fe11eb3541b4b22, 0x3feb090a58150200, // 0.535, 0.84485 - 0x3fe1294fe4c5350a, 0x3feb024f2d7d24a9, // 0.53629, 0.84403 - 0x3fe133e9cfee254e, 0x3feafb8fd89f57b6, // 0.53759, 0.84321 - 0x3fe13e8113f396c1, 0x3feaf4cc5a85fb73, // 0.53888, 0.84238 - 0x3fe14915af336ceb, 0x3feaee04b43c1474, // 0.54017, 0.84155 - 0x3fe153a7a00bf453, 0x3feae738e6cd4b67, // 0.54146, 0.84073 - 0x3fe15e36e4dbe2bc, 0x3feae068f345ecef, // 0.54275, 0.83989 - 0x3fe168c37c025764, 0x3fead994dab2e979, // 0.54404, 0.83906 - 0x3fe1734d63dedb49, 0x3fead2bc9e21d511, // 0.54532, 0.83822 - 0x3fe17dd49ad16161, 0x3feacbe03ea0e73b, // 0.54661, 0.83739 - 0x3fe188591f3a46e5, 0x3feac4ffbd3efac8, // 0.54789, 0.83655 - 0x3fe192daef7a5386, 0x3feabe1b1b0b8dac, // 0.54918, 0.83571 - 0x3fe19d5a09f2b9b8, 0x3feab7325916c0d4, // 0.55046, 0.83486 - 0x3fe1a7d66d0516e6, 0x3feab045787157ff, // 0.55174, 0.83402 - 0x3fe1b250171373be, 0x3feaa9547a2cb98e, // 0.55302, 0.83317 - 0x3fe1bcc706804467, 0x3feaa25f5f5aee60, // 0.55429, 0.83232 - 0x3fe1c73b39ae68c8, 0x3fea9b66290ea1a3, // 0.55557, 0.83147 - 0x3fe1d1acaf012cc2, 0x3fea9468d85b20ae, // 0.55685, 0.83062 - 0x3fe1dc1b64dc4872, 0x3fea8d676e545ad2, // 0.55812, 0.82976 - 0x3fe1e68759a3e074, 0x3fea8661ec0ee133, // 0.55939, 0.8289 - 0x3fe1f0f08bbc861b, 0x3fea7f58529fe69d, // 0.56066, 0.82805 - 0x3fe1fb56f98b37b8, 0x3fea784aa31d3f55, // 0.56193, 0.82718 - 0x3fe205baa17560d6, 0x3fea7138de9d60f5, // 0.5632, 0.82632 - 0x3fe2101b81e0da78, 0x3fea6a230637623b, // 0.56447, 0.82546 - 0x3fe21a799933eb58, 0x3fea63091b02fae2, // 0.56573, 0.82459 - 0x3fe224d4e5d5482e, 0x3fea5beb1e188375, // 0.567, 0.82372 - 0x3fe22f2d662c13e1, 0x3fea54c91090f524, // 0.56826, 0.82285 - 0x3fe23983189fdfd5, 0x3fea4da2f385e997, // 0.56952, 0.82198 - 0x3fe243d5fb98ac1f, 0x3fea4678c8119ac8, // 0.57078, 0.8211 - 0x3fe24e260d7ee7c9, 0x3fea3f4a8f4ee2d2, // 0.57204, 0.82023 - 0x3fe258734cbb7110, 0x3fea38184a593bc6, // 0.5733, 0.81935 - 0x3fe262bdb7b795a2, 0x3fea30e1fa4cbf81, // 0.57455, 0.81847 - 0x3fe26d054cdd12df, 0x3fea29a7a0462782, // 0.57581, 0.81758 - 0x3fe2774a0a961612, 0x3fea22693d62ccb9, // 0.57706, 0.8167 - 0x3fe2818bef4d3cba, 0x3fea1b26d2c0a75e, // 0.57831, 0.81581 - 0x3fe28bcaf96d94ba, 0x3fea13e0617e4ec7, // 0.57956, 0.81493 - 0x3fe2960727629ca8, 0x3fea0c95eabaf937, // 0.58081, 0.81404 - 0x3fe2a040779843fb, 0x3fea05476f967bb5, // 0.58206, 0.81314 - 0x3fe2aa76e87aeb58, 0x3fe9fdf4f13149de, // 0.58331, 0.81225 - 0x3fe2b4aa787764c4, 0x3fe9f69e70ac75bc, // 0.58455, 0.81135 - 0x3fe2bedb25faf3ea, 0x3fe9ef43ef29af94, // 0.5858, 0.81046 - 0x3fe2c908ef734e57, 0x3fe9e7e56dcb45bd, // 0.58704, 0.80956 - 0x3fe2d333d34e9bb7, 0x3fe9e082edb42472, // 0.58828, 0.80866 - 0x3fe2dd5bcffb7616, 0x3fe9d91c7007d5a6, // 0.58952, 0.80775 - 0x3fe2e780e3e8ea16, 0x3fe9d1b1f5ea80d6, // 0.59076, 0.80685 - 0x3fe2f1a30d86773a, 0x3fe9ca438080eadb, // 0.592, 0.80594 - 0x3fe2fbc24b441015, 0x3fe9c2d110f075c3, // 0.59323, 0.80503 - 0x3fe305de9b921a94, 0x3fe9bb5aa85f2098, // 0.59447, 0.80412 - 0x3fe30ff7fce17035, 0x3fe9b3e047f38741, // 0.5957, 0.80321 - 0x3fe31a0e6da35e44, 0x3fe9ac61f0d4e247, // 0.59693, 0.80229 - 0x3fe32421ec49a620, 0x3fe9a4dfa42b06b2, // 0.59816, 0.80138 - 0x3fe32e3277467d6b, 0x3fe99d59631e65d5, // 0.59939, 0.80046 - 0x3fe338400d0c8e57, 0x3fe995cf2ed80d22, // 0.60062, 0.79954 - 0x3fe3424aac0ef7d6, 0x3fe98e410881a600, // 0.60184, 0.79861 - 0x3fe34c5252c14de1, 0x3fe986aef1457594, // 0.60307, 0.79769 - 0x3fe35656ff9799ae, 0x3fe97f18ea4e5c9e, // 0.60429, 0.79676 - 0x3fe36058b10659f3, 0x3fe9777ef4c7d742, // 0.60551, 0.79584 - 0x3fe36a576582831b, 0x3fe96fe111ddfce0, // 0.60673, 0.79491 - 0x3fe374531b817f8d, 0x3fe9683f42bd7fe1, // 0.60795, 0.79398 - 0x3fe37e4bd1792fe2, 0x3fe960998893ad8c, // 0.60917, 0.79304 - 0x3fe3884185dfeb22, 0x3fe958efe48e6dd7, // 0.61038, 0.79211 - 0x3fe39234372c7f04, 0x3fe9514257dc4335, // 0.6116, 0.79117 - 0x3fe39c23e3d63029, 0x3fe94990e3ac4a6c, // 0.61281, 0.79023 - 0x3fe3a6108a54ba58, 0x3fe941db892e3a65, // 0.61402, 0.78929 - 0x3fe3affa292050b9, 0x3fe93a22499263fc, // 0.61523, 0.78835 - 0x3fe3b9e0beb19e18, 0x3fe932652609b1cf, // 0.61644, 0.7874 - 0x3fe3c3c44981c517, 0x3fe92aa41fc5a815, // 0.61765, 0.78646 - 0x3fe3cda4c80a6076, 0x3fe922df37f8646a, // 0.61885, 0.78551 - 0x3fe3d78238c58343, 0x3fe91b166fd49da2, // 0.62006, 0.78456 - 0x3fe3e15c9a2db922, 0x3fe91349c88da398, // 0.62126, 0.7836 - 0x3fe3eb33eabe0680, 0x3fe90b7943575efe, // 0.62246, 0.78265 - 0x3fe3f50828f1e8d2, 0x3fe903a4e1665133, // 0.62366, 0.78169 - 0x3fe3fed9534556d4, 0x3fe8fbcca3ef940d, // 0.62486, 0.78074 - 0x3fe408a76834c0c0, 0x3fe8f3f08c28d9ac, // 0.62606, 0.77978 - 0x3fe41272663d108c, 0x3fe8ec109b486c49, // 0.62725, 0.77882 - 0x3fe41c3a4bdbaa26, 0x3fe8e42cd2852e0a, // 0.62845, 0.77785 - 0x3fe425ff178e6bb1, 0x3fe8dc45331698cc, // 0.62964, 0.77689 - 0x3fe42fc0c7d3adbb, 0x3fe8d459be34bdfa, // 0.63083, 0.77592 - 0x3fe4397f5b2a4380, 0x3fe8cc6a75184655, // 0.63202, 0.77495 - 0x3fe4433ad0117b1d, 0x3fe8c47758fa71cb, // 0.63321, 0.77398 - 0x3fe44cf325091dd6, 0x3fe8bc806b151741, // 0.63439, 0.77301 - 0x3fe456a858917046, 0x3fe8b485aca2a468, // 0.63558, 0.77204 - 0x3fe4605a692b32a2, 0x3fe8ac871ede1d88, // 0.63676, 0.77106 - 0x3fe46a095557a0f1, 0x3fe8a484c3031d50, // 0.63794, 0.77008 - 0x3fe473b51b987347, 0x3fe89c7e9a4dd4ab, // 0.63912, 0.7691 - 0x3fe47d5dba6fde01, 0x3fe89474a5fb0a84, // 0.6403, 0.76812 - 0x3fe48703306091fe, 0x3fe88c66e7481ba1, // 0.64148, 0.76714 - 0x3fe490a57bedbcdf, 0x3fe884555f72fa6b, // 0.64266, 0.76615 - 0x3fe49a449b9b0938, 0x3fe87c400fba2ebf, // 0.64383, 0.76517 - 0x3fe4a3e08dec9ed6, 0x3fe87426f95cd5bd, // 0.645, 0.76418 - 0x3fe4ad79516722f0, 0x3fe86c0a1d9aa195, // 0.64618, 0.76319 - 0x3fe4b70ee48fb869, 0x3fe863e97db3d95a, // 0.64735, 0.7622 - 0x3fe4c0a145ec0004, 0x3fe85bc51ae958cc, // 0.64851, 0.7612 - 0x3fe4ca30740218a3, 0x3fe8539cf67c9029, // 0.64968, 0.76021 - 0x3fe4d3bc6d589f80, 0x3fe84b7111af83f9, // 0.65085, 0.75921 - 0x3fe4dd453076b064, 0x3fe843416dc4cce2, // 0.65201, 0.75821 - 0x3fe4e6cabbe3e5e9, 0x3fe83b0e0bff976e, // 0.65317, 0.75721 - 0x3fe4f04d0e2859aa, 0x3fe832d6eda3a3e0, // 0.65433, 0.75621 - 0x3fe4f9cc25cca486, 0x3fe82a9c13f545ff, // 0.65549, 0.7552 - 0x3fe503480159ded2, 0x3fe8225d803964e5, // 0.65665, 0.75419 - 0x3fe50cc09f59a09b, 0x3fe81a1b33b57acc, // 0.65781, 0.75319 - 0x3fe51635fe5601d7, 0x3fe811d52faf94dc, // 0.65896, 0.75218 - 0x3fe51fa81cd99aa6, 0x3fe8098b756e52fa, // 0.66011, 0.75117 - 0x3fe52916f96f8388, 0x3fe8013e0638e795, // 0.66127, 0.75015 - 0x3fe5328292a35596, 0x3fe7f8ece3571771, // 0.66242, 0.74914 - 0x3fe53beae7012abe, 0x3fe7f0980e113978, // 0.66356, 0.74812 - 0x3fe5454ff5159dfb, 0x3fe7e83f87b03686, // 0.66471, 0.7471 - 0x3fe54eb1bb6dcb8f, 0x3fe7dfe3517d8937, // 0.66586, 0.74608 - 0x3fe5581038975137, 0x3fe7d7836cc33db2, // 0.667, 0.74506 - 0x3fe5616b6b204e6e, 0x3fe7cf1fdacbf179, // 0.66814, 0.74403 - 0x3fe56ac35197649e, 0x3fe7c6b89ce2d333, // 0.66928, 0.74301 - 0x3fe57417ea8bb75c, 0x3fe7be4db453a27c, // 0.67042, 0.74198 - 0x3fe57d69348cec9f, 0x3fe7b5df226aafb0, // 0.67156, 0.74095 - 0x3fe586b72e2b2cfd, 0x3fe7ad6ce874dbb6, // 0.67269, 0.73992 - 0x3fe59001d5f723df, 0x3fe7a4f707bf97d2, // 0.67383, 0.73889 - 0x3fe599492a81ffbc, 0x3fe79c7d8198e56e, // 0.67496, 0.73785 - 0x3fe5a28d2a5d7250, 0x3fe79400574f55e4, // 0.67609, 0.73682 - 0x3fe5abcdd41bb0d8, 0x3fe78b7f8a320a52, // 0.67722, 0.73578 - 0x3fe5b50b264f7448, 0x3fe782fb1b90b35b, // 0.67835, 0.73474 - 0x3fe5be451f8bf980, 0x3fe77a730cbb9100, // 0.67948, 0.7337 - 0x3fe5c77bbe65018c, 0x3fe771e75f037261, // 0.6806, 0.73265 - 0x3fe5d0af016ed1d4, 0x3fe7695813b9b594, // 0.68172, 0.73161 - 0x3fe5d9dee73e345c, 0x3fe760c52c304764, // 0.68285, 0.73056 - 0x3fe5e30b6e6877f3, 0x3fe7582ea9b9a329, // 0.68397, 0.72951 - 0x3fe5ec3495837074, 0x3fe74f948da8d28d, // 0.68508, 0.72846 - 0x3fe5f55a5b2576f8, 0x3fe746f6d9516d59, // 0.6862, 0.72741 - 0x3fe5fe7cbde56a0f, 0x3fe73e558e079942, // 0.68732, 0.72636 - 0x3fe6079bbc5aadfa, 0x3fe735b0ad2009b2, // 0.68843, 0.7253 - 0x3fe610b7551d2cde, 0x3fe72d0837efff97, // 0.68954, 0.72425 - 0x3fe619cf86c55702, 0x3fe7245c2fcd492a, // 0.69065, 0.72319 - 0x3fe622e44fec22ff, 0x3fe71bac960e41bf, // 0.69176, 0.72213 - 0x3fe62bf5af2b0dfd, 0x3fe712f96c09d18d, // 0.69287, 0.72107 - 0x3fe63503a31c1be8, 0x3fe70a42b3176d7a, // 0.69397, 0.72 - 0x3fe63e0e2a59d7aa, 0x3fe701886c8f16e6, // 0.69508, 0.71894 - 0x3fe64715437f535b, 0x3fe6f8ca99c95b75, // 0.69618, 0.71787 - 0x3fe65018ed28287f, 0x3fe6f0093c1f54de, // 0.69728, 0.7168 - 0x3fe6591925f0783e, 0x3fe6e74454eaa8ae, // 0.69838, 0.71573 - 0x3fe66215ec74eb91, 0x3fe6de7be585881d, // 0.69947, 0.71466 - 0x3fe66b0f3f52b386, 0x3fe6d5afef4aafcc, // 0.70057, 0.71358 - 0x3fe674051d27896c, 0x3fe6cce07395679f, // 0.70166, 0.71251 - 0x3fe67cf78491af10, 0x3fe6c40d73c18275, // 0.70275, 0.71143 - 0x3fe685e6742feeef, 0x3fe6bb36f12b5e06, // 0.70385, 0.71035 - 0x3fe68ed1eaa19c71, 0x3fe6b25ced2fe29c, // 0.70493, 0.70927 - 0x3fe697b9e686941c, 0x3fe6a97f692c82ea, // 0.70602, 0.70819 - 0x3fe6a09e667f3bcc, 0x3fe6a09e667f3bcc, // 0.70711, 0.70711 - 0x3fe6a97f692c82ea, 0x3fe697b9e686941c, // 0.70819, 0.70602 - 0x3fe6b25ced2fe29c, 0x3fe68ed1eaa19c71, // 0.70927, 0.70493 - 0x3fe6bb36f12b5e06, 0x3fe685e6742feeef, // 0.71035, 0.70385 - 0x3fe6c40d73c18275, 0x3fe67cf78491af10, // 0.71143, 0.70275 - 0x3fe6cce07395679f, 0x3fe674051d27896c, // 0.71251, 0.70166 - 0x3fe6d5afef4aafcc, 0x3fe66b0f3f52b386, // 0.71358, 0.70057 - 0x3fe6de7be585881d, 0x3fe66215ec74eb91, // 0.71466, 0.69947 - 0x3fe6e74454eaa8ae, 0x3fe6591925f0783e, // 0.71573, 0.69838 - 0x3fe6f0093c1f54de, 0x3fe65018ed28287f, // 0.7168, 0.69728 - 0x3fe6f8ca99c95b75, 0x3fe64715437f535b, // 0.71787, 0.69618 - 0x3fe701886c8f16e6, 0x3fe63e0e2a59d7aa, // 0.71894, 0.69508 - 0x3fe70a42b3176d7a, 0x3fe63503a31c1be8, // 0.72, 0.69397 - 0x3fe712f96c09d18d, 0x3fe62bf5af2b0dfd, // 0.72107, 0.69287 - 0x3fe71bac960e41bf, 0x3fe622e44fec22ff, // 0.72213, 0.69176 - 0x3fe7245c2fcd492a, 0x3fe619cf86c55702, // 0.72319, 0.69065 - 0x3fe72d0837efff97, 0x3fe610b7551d2cde, // 0.72425, 0.68954 - 0x3fe735b0ad2009b2, 0x3fe6079bbc5aadfa, // 0.7253, 0.68843 - 0x3fe73e558e079942, 0x3fe5fe7cbde56a0f, // 0.72636, 0.68732 - 0x3fe746f6d9516d59, 0x3fe5f55a5b2576f8, // 0.72741, 0.6862 - 0x3fe74f948da8d28d, 0x3fe5ec3495837074, // 0.72846, 0.68508 - 0x3fe7582ea9b9a329, 0x3fe5e30b6e6877f3, // 0.72951, 0.68397 - 0x3fe760c52c304764, 0x3fe5d9dee73e345c, // 0.73056, 0.68285 - 0x3fe7695813b9b594, 0x3fe5d0af016ed1d4, // 0.73161, 0.68172 - 0x3fe771e75f037261, 0x3fe5c77bbe65018c, // 0.73265, 0.6806 - 0x3fe77a730cbb9100, 0x3fe5be451f8bf980, // 0.7337, 0.67948 - 0x3fe782fb1b90b35b, 0x3fe5b50b264f7448, // 0.73474, 0.67835 - 0x3fe78b7f8a320a52, 0x3fe5abcdd41bb0d8, // 0.73578, 0.67722 - 0x3fe79400574f55e4, 0x3fe5a28d2a5d7250, // 0.73682, 0.67609 - 0x3fe79c7d8198e56e, 0x3fe599492a81ffbc, // 0.73785, 0.67496 - 0x3fe7a4f707bf97d2, 0x3fe59001d5f723df, // 0.73889, 0.67383 - 0x3fe7ad6ce874dbb6, 0x3fe586b72e2b2cfd, // 0.73992, 0.67269 - 0x3fe7b5df226aafb0, 0x3fe57d69348cec9f, // 0.74095, 0.67156 - 0x3fe7be4db453a27c, 0x3fe57417ea8bb75c, // 0.74198, 0.67042 - 0x3fe7c6b89ce2d333, 0x3fe56ac35197649e, // 0.74301, 0.66928 - 0x3fe7cf1fdacbf179, 0x3fe5616b6b204e6e, // 0.74403, 0.66814 - 0x3fe7d7836cc33db2, 0x3fe5581038975137, // 0.74506, 0.667 - 0x3fe7dfe3517d8937, 0x3fe54eb1bb6dcb8f, // 0.74608, 0.66586 - 0x3fe7e83f87b03686, 0x3fe5454ff5159dfb, // 0.7471, 0.66471 - 0x3fe7f0980e113978, 0x3fe53beae7012abe, // 0.74812, 0.66356 - 0x3fe7f8ece3571771, 0x3fe5328292a35596, // 0.74914, 0.66242 - 0x3fe8013e0638e795, 0x3fe52916f96f8388, // 0.75015, 0.66127 - 0x3fe8098b756e52fa, 0x3fe51fa81cd99aa6, // 0.75117, 0.66011 - 0x3fe811d52faf94dc, 0x3fe51635fe5601d7, // 0.75218, 0.65896 - 0x3fe81a1b33b57acc, 0x3fe50cc09f59a09b, // 0.75319, 0.65781 - 0x3fe8225d803964e5, 0x3fe503480159ded2, // 0.75419, 0.65665 - 0x3fe82a9c13f545ff, 0x3fe4f9cc25cca486, // 0.7552, 0.65549 - 0x3fe832d6eda3a3e0, 0x3fe4f04d0e2859aa, // 0.75621, 0.65433 - 0x3fe83b0e0bff976e, 0x3fe4e6cabbe3e5e9, // 0.75721, 0.65317 - 0x3fe843416dc4cce2, 0x3fe4dd453076b064, // 0.75821, 0.65201 - 0x3fe84b7111af83f9, 0x3fe4d3bc6d589f80, // 0.75921, 0.65085 - 0x3fe8539cf67c9029, 0x3fe4ca30740218a3, // 0.76021, 0.64968 - 0x3fe85bc51ae958cc, 0x3fe4c0a145ec0004, // 0.7612, 0.64851 - 0x3fe863e97db3d95a, 0x3fe4b70ee48fb869, // 0.7622, 0.64735 - 0x3fe86c0a1d9aa195, 0x3fe4ad79516722f0, // 0.76319, 0.64618 - 0x3fe87426f95cd5bd, 0x3fe4a3e08dec9ed6, // 0.76418, 0.645 - 0x3fe87c400fba2ebf, 0x3fe49a449b9b0938, // 0.76517, 0.64383 - 0x3fe884555f72fa6b, 0x3fe490a57bedbcdf, // 0.76615, 0.64266 - 0x3fe88c66e7481ba1, 0x3fe48703306091fe, // 0.76714, 0.64148 - 0x3fe89474a5fb0a84, 0x3fe47d5dba6fde01, // 0.76812, 0.6403 - 0x3fe89c7e9a4dd4ab, 0x3fe473b51b987347, // 0.7691, 0.63912 - 0x3fe8a484c3031d50, 0x3fe46a095557a0f1, // 0.77008, 0.63794 - 0x3fe8ac871ede1d88, 0x3fe4605a692b32a2, // 0.77106, 0.63676 - 0x3fe8b485aca2a468, 0x3fe456a858917046, // 0.77204, 0.63558 - 0x3fe8bc806b151741, 0x3fe44cf325091dd6, // 0.77301, 0.63439 - 0x3fe8c47758fa71cb, 0x3fe4433ad0117b1d, // 0.77398, 0.63321 - 0x3fe8cc6a75184655, 0x3fe4397f5b2a4380, // 0.77495, 0.63202 - 0x3fe8d459be34bdfa, 0x3fe42fc0c7d3adbb, // 0.77592, 0.63083 - 0x3fe8dc45331698cc, 0x3fe425ff178e6bb1, // 0.77689, 0.62964 - 0x3fe8e42cd2852e0a, 0x3fe41c3a4bdbaa26, // 0.77785, 0.62845 - 0x3fe8ec109b486c49, 0x3fe41272663d108c, // 0.77882, 0.62725 - 0x3fe8f3f08c28d9ac, 0x3fe408a76834c0c0, // 0.77978, 0.62606 - 0x3fe8fbcca3ef940d, 0x3fe3fed9534556d4, // 0.78074, 0.62486 - 0x3fe903a4e1665133, 0x3fe3f50828f1e8d2, // 0.78169, 0.62366 - 0x3fe90b7943575efe, 0x3fe3eb33eabe0680, // 0.78265, 0.62246 - 0x3fe91349c88da398, 0x3fe3e15c9a2db922, // 0.7836, 0.62126 - 0x3fe91b166fd49da2, 0x3fe3d78238c58343, // 0.78456, 0.62006 - 0x3fe922df37f8646a, 0x3fe3cda4c80a6076, // 0.78551, 0.61885 - 0x3fe92aa41fc5a815, 0x3fe3c3c44981c517, // 0.78646, 0.61765 - 0x3fe932652609b1cf, 0x3fe3b9e0beb19e18, // 0.7874, 0.61644 - 0x3fe93a22499263fc, 0x3fe3affa292050b9, // 0.78835, 0.61523 - 0x3fe941db892e3a65, 0x3fe3a6108a54ba58, // 0.78929, 0.61402 - 0x3fe94990e3ac4a6c, 0x3fe39c23e3d63029, // 0.79023, 0.61281 - 0x3fe9514257dc4335, 0x3fe39234372c7f04, // 0.79117, 0.6116 - 0x3fe958efe48e6dd7, 0x3fe3884185dfeb22, // 0.79211, 0.61038 - 0x3fe960998893ad8c, 0x3fe37e4bd1792fe2, // 0.79304, 0.60917 - 0x3fe9683f42bd7fe1, 0x3fe374531b817f8d, // 0.79398, 0.60795 - 0x3fe96fe111ddfce0, 0x3fe36a576582831b, // 0.79491, 0.60673 - 0x3fe9777ef4c7d742, 0x3fe36058b10659f3, // 0.79584, 0.60551 - 0x3fe97f18ea4e5c9e, 0x3fe35656ff9799ae, // 0.79676, 0.60429 - 0x3fe986aef1457594, 0x3fe34c5252c14de1, // 0.79769, 0.60307 - 0x3fe98e410881a600, 0x3fe3424aac0ef7d6, // 0.79861, 0.60184 - 0x3fe995cf2ed80d22, 0x3fe338400d0c8e57, // 0.79954, 0.60062 - 0x3fe99d59631e65d5, 0x3fe32e3277467d6b, // 0.80046, 0.59939 - 0x3fe9a4dfa42b06b2, 0x3fe32421ec49a620, // 0.80138, 0.59816 - 0x3fe9ac61f0d4e247, 0x3fe31a0e6da35e44, // 0.80229, 0.59693 - 0x3fe9b3e047f38741, 0x3fe30ff7fce17035, // 0.80321, 0.5957 - 0x3fe9bb5aa85f2098, 0x3fe305de9b921a94, // 0.80412, 0.59447 - 0x3fe9c2d110f075c3, 0x3fe2fbc24b441015, // 0.80503, 0.59323 - 0x3fe9ca438080eadb, 0x3fe2f1a30d86773a, // 0.80594, 0.592 - 0x3fe9d1b1f5ea80d6, 0x3fe2e780e3e8ea16, // 0.80685, 0.59076 - 0x3fe9d91c7007d5a6, 0x3fe2dd5bcffb7616, // 0.80775, 0.58952 - 0x3fe9e082edb42472, 0x3fe2d333d34e9bb7, // 0.80866, 0.58828 - 0x3fe9e7e56dcb45bd, 0x3fe2c908ef734e57, // 0.80956, 0.58704 - 0x3fe9ef43ef29af94, 0x3fe2bedb25faf3ea, // 0.81046, 0.5858 - 0x3fe9f69e70ac75bc, 0x3fe2b4aa787764c4, // 0.81135, 0.58455 - 0x3fe9fdf4f13149de, 0x3fe2aa76e87aeb58, // 0.81225, 0.58331 - 0x3fea05476f967bb5, 0x3fe2a040779843fb, // 0.81314, 0.58206 - 0x3fea0c95eabaf937, 0x3fe2960727629ca8, // 0.81404, 0.58081 - 0x3fea13e0617e4ec7, 0x3fe28bcaf96d94ba, // 0.81493, 0.57956 - 0x3fea1b26d2c0a75e, 0x3fe2818bef4d3cba, // 0.81581, 0.57831 - 0x3fea22693d62ccb9, 0x3fe2774a0a961612, // 0.8167, 0.57706 - 0x3fea29a7a0462782, 0x3fe26d054cdd12df, // 0.81758, 0.57581 - 0x3fea30e1fa4cbf81, 0x3fe262bdb7b795a2, // 0.81847, 0.57455 - 0x3fea38184a593bc6, 0x3fe258734cbb7110, // 0.81935, 0.5733 - 0x3fea3f4a8f4ee2d2, 0x3fe24e260d7ee7c9, // 0.82023, 0.57204 - 0x3fea4678c8119ac8, 0x3fe243d5fb98ac1f, // 0.8211, 0.57078 - 0x3fea4da2f385e997, 0x3fe23983189fdfd5, // 0.82198, 0.56952 - 0x3fea54c91090f524, 0x3fe22f2d662c13e1, // 0.82285, 0.56826 - 0x3fea5beb1e188375, 0x3fe224d4e5d5482e, // 0.82372, 0.567 - 0x3fea63091b02fae2, 0x3fe21a799933eb58, // 0.82459, 0.56573 - 0x3fea6a230637623b, 0x3fe2101b81e0da78, // 0.82546, 0.56447 - 0x3fea7138de9d60f5, 0x3fe205baa17560d6, // 0.82632, 0.5632 - 0x3fea784aa31d3f55, 0x3fe1fb56f98b37b8, // 0.82718, 0.56193 - 0x3fea7f58529fe69d, 0x3fe1f0f08bbc861b, // 0.82805, 0.56066 - 0x3fea8661ec0ee133, 0x3fe1e68759a3e074, // 0.8289, 0.55939 - 0x3fea8d676e545ad2, 0x3fe1dc1b64dc4872, // 0.82976, 0.55812 - 0x3fea9468d85b20ae, 0x3fe1d1acaf012cc2, // 0.83062, 0.55685 - 0x3fea9b66290ea1a3, 0x3fe1c73b39ae68c8, // 0.83147, 0.55557 - 0x3feaa25f5f5aee60, 0x3fe1bcc706804467, // 0.83232, 0.55429 - 0x3feaa9547a2cb98e, 0x3fe1b250171373be, // 0.83317, 0.55302 - 0x3feab045787157ff, 0x3fe1a7d66d0516e6, // 0.83402, 0.55174 - 0x3feab7325916c0d4, 0x3fe19d5a09f2b9b8, // 0.83486, 0.55046 - 0x3feabe1b1b0b8dac, 0x3fe192daef7a5386, // 0.83571, 0.54918 - 0x3feac4ffbd3efac8, 0x3fe188591f3a46e5, // 0.83655, 0.54789 - 0x3feacbe03ea0e73b, 0x3fe17dd49ad16161, // 0.83739, 0.54661 - 0x3fead2bc9e21d511, 0x3fe1734d63dedb49, // 0.83822, 0.54532 - 0x3fead994dab2e979, 0x3fe168c37c025764, // 0.83906, 0.54404 - 0x3feae068f345ecef, 0x3fe15e36e4dbe2bc, // 0.83989, 0.54275 - 0x3feae738e6cd4b67, 0x3fe153a7a00bf453, // 0.84073, 0.54146 - 0x3feaee04b43c1474, 0x3fe14915af336ceb, // 0.84155, 0.54017 - 0x3feaf4cc5a85fb73, 0x3fe13e8113f396c1, // 0.84238, 0.53888 - 0x3feafb8fd89f57b6, 0x3fe133e9cfee254e, // 0.84321, 0.53759 - 0x3feb024f2d7d24a9, 0x3fe1294fe4c5350a, // 0.84403, 0.53629 - 0x3feb090a58150200, 0x3fe11eb3541b4b22, // 0.84485, 0.535 - 0x3feb0fc1575d33db, 0x3fe114141f935545, // 0.84567, 0.5337 - 0x3feb16742a4ca2f5, 0x3fe1097248d0a956, // 0.84649, 0.5324 - 0x3feb1d22cfdadcc6, 0x3fe0fecdd1770537, // 0.84731, 0.5311 - 0x3feb23cd470013b4, 0x3fe0f426bb2a8e7d, // 0.84812, 0.5298 - 0x3feb2a738eb51f33, 0x3fe0e97d078fd23b, // 0.84893, 0.5285 - 0x3feb3115a5f37bf4, 0x3fe0ded0b84bc4b5, // 0.84974, 0.5272 - 0x3feb37b38bb54c09, 0x3fe0d421cf03c12b, // 0.85055, 0.5259 - 0x3feb3e4d3ef55712, 0x3fe0c9704d5d898f, // 0.85136, 0.52459 - 0x3feb44e2beaf0a61, 0x3fe0bebc34ff4646, // 0.85216, 0.52328 - 0x3feb4b7409de7925, 0x3fe0b405878f85ec, // 0.85296, 0.52198 - 0x3feb52011f805c92, 0x3fe0a94c46b53d0b, // 0.85376, 0.52067 - 0x3feb5889fe921405, 0x3fe09e907417c5e1, // 0.85456, 0.51936 - 0x3feb5f0ea611a532, 0x3fe093d2115ee018, // 0.85535, 0.51804 - 0x3feb658f14fdbc47, 0x3fe089112032b08c, // 0.85615, 0.51673 - 0x3feb6c0b4a55ac17, 0x3fe07e4da23bc102, // 0.85694, 0.51542 - 0x3feb728345196e3e, 0x3fe073879922ffed, // 0.85773, 0.5141 - 0x3feb78f70449a34b, 0x3fe068bf0691c028, // 0.85852, 0.51279 - 0x3feb7f6686e792ea, 0x3fe05df3ec31b8b6, // 0.8593, 0.51147 - 0x3feb85d1cbf52c02, 0x3fe053264bad0483, // 0.86009, 0.51015 - 0x3feb8c38d27504e9, 0x3fe0485626ae221a, // 0.86087, 0.50883 - 0x3feb929b996a5b7f, 0x3fe03d837edff370, // 0.86165, 0.50751 - 0x3feb98fa1fd9155e, 0x3fe032ae55edbd95, // 0.86242, 0.50619 - 0x3feb9f5464c5bffc, 0x3fe027d6ad83287e, // 0.8632, 0.50486 - 0x3feba5aa673590d2, 0x3fe01cfc874c3eb7, // 0.86397, 0.50354 - 0x3febabfc262e6586, 0x3fe0121fe4f56d2c, // 0.86474, 0.50221 - 0x3febb249a0b6c40d, 0x3fe00740c82b82e0, // 0.86551, 0.50089 - 0x3febb892d5d5dad5, 0x3fdff8be6537615e, // 0.86628, 0.49956 - 0x3febbed7c49380ea, 0x3fdfe2f64be7120f, // 0.86705, 0.49823 - 0x3febc5186bf8361d, 0x3fdfcd2947c1ff57, // 0.86781, 0.4969 - 0x3febcb54cb0d2327, 0x3fdfb7575c24d2de, // 0.86857, 0.49557 - 0x3febd18ce0dc19d6, 0x3fdfa1808c6cf7e0, // 0.86933, 0.49423 - 0x3febd7c0ac6f952a, 0x3fdf8ba4dbf89aba, // 0.87009, 0.4929 - 0x3febddf02cd2b983, 0x3fdf75c44e26a852, // 0.87084, 0.49156 - 0x3febe41b611154c1, 0x3fdf5fdee656cda3, // 0.8716, 0.49023 - 0x3febea424837de6d, 0x3fdf49f4a7e97729, // 0.87235, 0.48889 - 0x3febf064e15377dd, 0x3fdf3405963fd068, // 0.87309, 0.48755 - 0x3febf6832b71ec5b, 0x3fdf1e11b4bbc35c, // 0.87384, 0.48621 - 0x3febfc9d25a1b147, 0x3fdf081906bff7fd, // 0.87459, 0.48487 - 0x3fec02b2cef1e641, 0x3fdef21b8fafd3b5, // 0.87533, 0.48353 - 0x3fec08c426725549, 0x3fdedc1952ef78d5, // 0.87607, 0.48218 - 0x3fec0ed12b3372e9, 0x3fdec61253e3c61b, // 0.87681, 0.48084 - 0x3fec14d9dc465e58, 0x3fdeb00695f25620, // 0.87755, 0.47949 - 0x3fec1ade38bce19b, 0x3fde99f61c817eda, // 0.87828, 0.47815 - 0x3fec20de3fa971b0, 0x3fde83e0eaf85113, // 0.87901, 0.4768 - 0x3fec26d9f01f2eaf, 0x3fde6dc704be97e2, // 0.87974, 0.47545 - 0x3fec2cd14931e3f1, 0x3fde57a86d3cd824, // 0.88047, 0.4741 - 0x3fec32c449f60831, 0x3fde418527dc4ffa, // 0.8812, 0.47275 - 0x3fec38b2f180bdb1, 0x3fde2b5d3806f63b, // 0.88192, 0.4714 - 0x3fec3e9d3ee7d262, 0x3fde1530a12779f4, // 0.88264, 0.47004 - 0x3fec44833141c004, 0x3fddfeff66a941de, // 0.88336, 0.46869 - 0x3fec4a64c7a5ac4c, 0x3fdde8c98bf86bd6, // 0.88408, 0.46733 - 0x3fec5042012b6907, 0x3fddd28f1481cc58, // 0.8848, 0.46598 - 0x3fec561adceb743e, 0x3fddbc5003b2edf8, // 0.88551, 0.46462 - 0x3fec5bef59fef85a, 0x3fdda60c5cfa10d8, // 0.88622, 0.46326 - 0x3fec61bf777fcc48, 0x3fdd8fc423c62a25, // 0.88693, 0.4619 - 0x3fec678b3488739b, 0x3fdd79775b86e389, // 0.88764, 0.46054 - 0x3fec6d5290341eb2, 0x3fdd632607ac9aa9, // 0.88835, 0.45918 - 0x3fec7315899eaad7, 0x3fdd4cd02ba8609c, // 0.88905, 0.45781 - 0x3fec78d41fe4a267, 0x3fdd3675caebf962, // 0.88975, 0.45645 - 0x3fec7e8e52233cf3, 0x3fdd2016e8e9db5b, // 0.89045, 0.45508 - 0x3fec84441f785f61, 0x3fdd09b389152ec1, // 0.89115, 0.45372 - 0x3fec89f587029c13, 0x3fdcf34baee1cd21, // 0.89184, 0.45235 - 0x3fec8fa287e13305, 0x3fdcdcdf5dc440ce, // 0.89253, 0.45098 - 0x3fec954b213411f5, 0x3fdcc66e9931c45d, // 0.89322, 0.44961 - 0x3fec9aef521bd480, 0x3fdcaff964a0421d, // 0.89391, 0.44824 - 0x3feca08f19b9c449, 0x3fdc997fc3865388, // 0.8946, 0.44687 - 0x3feca62a772fd919, 0x3fdc8301b95b40c2, // 0.89528, 0.4455 - 0x3fecabc169a0b901, 0x3fdc6c7f4997000a, // 0.89597, 0.44412 - 0x3fecb153f02fb87d, 0x3fdc55f877b23537, // 0.89665, 0.44275 - 0x3fecb6e20a00da99, 0x3fdc3f6d47263129, // 0.89732, 0.44137 - 0x3fecbc6bb638d10b, 0x3fdc28ddbb6cf145, // 0.898, 0.43999 - 0x3fecc1f0f3fcfc5c, 0x3fdc1249d8011ee7, // 0.89867, 0.43862 - 0x3fecc771c2736c09, 0x3fdbfbb1a05e0edc, // 0.89935, 0.43724 - 0x3fecccee20c2de9f, 0x3fdbe51517ffc0d9, // 0.90002, 0.43586 - 0x3fecd2660e12c1e6, 0x3fdbce744262deee, // 0.90068, 0.43448 - 0x3fecd7d9898b32f6, 0x3fdbb7cf2304bd01, // 0.90135, 0.43309 - 0x3fecdd489254fe65, 0x3fdba125bd63583e, // 0.90201, 0.43171 - 0x3fece2b32799a060, 0x3fdb8a7814fd5693, // 0.90267, 0.43033 - 0x3fece819488344ce, 0x3fdb73c62d520624, // 0.90333, 0.42894 - 0x3feced7af43cc773, 0x3fdb5d1009e15cc0, // 0.90399, 0.42756 - 0x3fecf2d829f1b40e, 0x3fdb4655ae2bf757, // 0.90464, 0.42617 - 0x3fecf830e8ce467b, 0x3fdb2f971db31972, // 0.9053, 0.42478 - 0x3fecfd852fff6ad4, 0x3fdb18d45bf8aca6, // 0.90595, 0.42339 - 0x3fed02d4feb2bd92, 0x3fdb020d6c7f4009, // 0.9066, 0.422 - 0x3fed082054168bac, 0x3fdaeb4252ca07ab, // 0.90724, 0.42061 - 0x3fed0d672f59d2b9, 0x3fdad473125cdc08, // 0.90789, 0.41922 - 0x3fed12a98fac410c, 0x3fdabd9faebc3980, // 0.90853, 0.41782 - 0x3fed17e7743e35dc, 0x3fdaa6c82b6d3fc9, // 0.90917, 0.41643 - 0x3fed1d20dc40c15c, 0x3fda8fec8bf5b166, // 0.90981, 0.41503 - 0x3fed2255c6e5a4e1, 0x3fda790cd3dbf31a, // 0.91044, 0.41364 - 0x3fed2786335f52fc, 0x3fda622906a70b63, // 0.91107, 0.41224 - 0x3fed2cb220e0ef9f, 0x3fda4b4127dea1e4, // 0.91171, 0.41084 - 0x3fed31d98e9e503a, 0x3fda34553b0afee5, // 0.91234, 0.40944 - 0x3fed36fc7bcbfbdc, 0x3fda1d6543b50ac0, // 0.91296, 0.40804 - 0x3fed3c1ae79f2b4e, 0x3fda067145664d57, // 0.91359, 0.40664 - 0x3fed4134d14dc93a, 0x3fd9ef7943a8ed8a, // 0.91421, 0.40524 - 0x3fed464a380e7242, 0x3fd9d87d4207b0ab, // 0.91483, 0.40384 - 0x3fed4b5b1b187524, 0x3fd9c17d440df9f2, // 0.91545, 0.40243 - 0x3fed506779a3d2d9, 0x3fd9aa794d47c9ee, // 0.91606, 0.40103 - 0x3fed556f52e93eb1, 0x3fd993716141bdfe, // 0.91668, 0.39962 - 0x3fed5a72a6221e73, 0x3fd97c6583890fc2, // 0.91729, 0.39822 - 0x3fed5f7172888a7f, 0x3fd96555b7ab948f, // 0.9179, 0.39681 - 0x3fed646bb7574de5, 0x3fd94e420137bce3, // 0.91851, 0.3954 - 0x3fed696173c9e68b, 0x3fd9372a63bc93d7, // 0.91911, 0.39399 - 0x3fed6e52a71c8547, 0x3fd9200ee2c9be97, // 0.91972, 0.39258 - 0x3fed733f508c0dff, 0x3fd908ef81ef7bd1, // 0.92032, 0.39117 - 0x3fed78276f5617c6, 0x3fd8f1cc44bea329, // 0.92092, 0.38976 - 0x3fed7d0b02b8ecf9, 0x3fd8daa52ec8a4af, // 0.92151, 0.38835 - 0x3fed81ea09f38b63, 0x3fd8c37a439f884f, // 0.92211, 0.38693 - 0x3fed86c48445a450, 0x3fd8ac4b86d5ed44, // 0.9227, 0.38552 - 0x3fed8b9a70ef9cb4, 0x3fd89518fbff098e, // 0.92329, 0.3841 - 0x3fed906bcf328d46, 0x3fd87de2a6aea963, // 0.92388, 0.38268 - 0x3fed95389e50429b, 0x3fd866a88a792ea0, // 0.92447, 0.38127 - 0x3fed9a00dd8b3d46, 0x3fd84f6aaaf3903f, // 0.92505, 0.37985 - 0x3fed9ec48c26b1f3, 0x3fd838290bb359c8, // 0.92563, 0.37843 - 0x3feda383a9668988, 0x3fd820e3b04eaac4, // 0.92621, 0.37701 - 0x3feda83e348f613b, 0x3fd8099a9c5c362d, // 0.92679, 0.37559 - 0x3fedacf42ce68ab9, 0x3fd7f24dd37341e3, // 0.92736, 0.37416 - 0x3fedb1a591b20c38, 0x3fd7dafd592ba621, // 0.92794, 0.37274 - 0x3fedb6526238a09b, 0x3fd7c3a9311dcce7, // 0.92851, 0.37132 - 0x3fedbafa9dc1b78d, 0x3fd7ac515ee2b172, // 0.92907, 0.36989 - 0x3fedbf9e4395759a, 0x3fd794f5e613dfae, // 0.92964, 0.36847 - 0x3fedc43d52fcb453, 0x3fd77d96ca4b73a6, // 0.93021, 0.36704 - 0x3fedc8d7cb410260, 0x3fd766340f2418f6, // 0.93077, 0.36561 - 0x3fedcd6dabaca3a5, 0x3fd74ecdb8390a3e, // 0.93133, 0.36418 - 0x3fedd1fef38a915a, 0x3fd73763c9261092, // 0.93188, 0.36276 - 0x3fedd68ba2267a25, 0x3fd71ff6458782ec, // 0.93244, 0.36133 - 0x3feddb13b6ccc23d, 0x3fd7088530fa459e, // 0.93299, 0.3599 - 0x3feddf9730ca837b, 0x3fd6f1108f1bc9c5, // 0.93354, 0.35846 - 0x3fede4160f6d8d81, 0x3fd6d998638a0cb5, // 0.93409, 0.35703 - 0x3fede890520465ce, 0x3fd6c21cb1e39771, // 0.93464, 0.3556 - 0x3feded05f7de47da, 0x3fd6aa9d7dc77e16, // 0.93518, 0.35416 - 0x3fedf177004b2534, 0x3fd6931acad55f51, // 0.93573, 0.35273 - 0x3fedf5e36a9ba59c, 0x3fd67b949cad63ca, // 0.93627, 0.35129 - 0x3fedfa4b3621271d, 0x3fd6640af6f03d9e, // 0.9368, 0.34986 - 0x3fedfeae622dbe2b, 0x3fd64c7ddd3f27c6, // 0.93734, 0.34842 - 0x3fee030cee1435b8, 0x3fd634ed533be58e, // 0.93787, 0.34698 - 0x3fee0766d9280f54, 0x3fd61d595c88c203, // 0.9384, 0.34554 - 0x3fee0bbc22bd8349, 0x3fd605c1fcc88f63, // 0.93893, 0.3441 - 0x3fee100cca2980ac, 0x3fd5ee27379ea693, // 0.93946, 0.34266 - 0x3fee1458cec1ad83, 0x3fd5d68910aee686, // 0.93998, 0.34122 - 0x3fee18a02fdc66d9, 0x3fd5bee78b9db3b6, // 0.94051, 0.33978 - 0x3fee1ce2ecd0c0d8, 0x3fd5a742ac0ff78d, // 0.94103, 0.33833 - 0x3fee212104f686e5, 0x3fd58f9a75ab1fdd, // 0.94154, 0.33689 - 0x3fee255a77a63bb8, 0x3fd577eeec151e47, // 0.94206, 0.33545 - 0x3fee298f4439197a, 0x3fd5604012f467b4, // 0.94257, 0.334 - 0x3fee2dbf6a0911d9, 0x3fd5488dedeff3be, // 0.94308, 0.33255 - 0x3fee31eae870ce25, 0x3fd530d880af3c24, // 0.94359, 0.33111 - 0x3fee3611becbaf69, 0x3fd5191fceda3c35, // 0.9441, 0.32966 - 0x3fee3a33ec75ce85, 0x3fd50163dc197047, // 0.9446, 0.32821 - 0x3fee3e5170cbfc46, 0x3fd4e9a4ac15d520, // 0.94511, 0.32676 - 0x3fee426a4b2bc17e, 0x3fd4d1e24278e76a, // 0.94561, 0.32531 - 0x3fee467e7af35f23, 0x3fd4ba1ca2eca31c, // 0.94611, 0.32386 - 0x3fee4a8dff81ce5e, 0x3fd4a253d11b82f3, // 0.9466, 0.32241 - 0x3fee4e98d836c0af, 0x3fd48a87d0b07fd7, // 0.94709, 0.32096 - 0x3fee529f04729ffc, 0x3fd472b8a5571054, // 0.94759, 0.3195 - 0x3fee56a083968eb1, 0x3fd45ae652bb2800, // 0.94807, 0.31805 - 0x3fee5a9d550467d3, 0x3fd44310dc8936f0, // 0.94856, 0.31659 - 0x3fee5e95781ebf1c, 0x3fd42b38466e2928, // 0.94905, 0.31514 - 0x3fee6288ec48e112, 0x3fd4135c94176602, // 0.94953, 0.31368 - 0x3fee6677b0e6d31e, 0x3fd3fb7dc932cfa4, // 0.95001, 0.31222 - 0x3fee6a61c55d53a7, 0x3fd3e39be96ec271, // 0.95049, 0.31077 - 0x3fee6e472911da27, 0x3fd3cbb6f87a146e, // 0.95096, 0.30931 - 0x3fee7227db6a9744, 0x3fd3b3cefa0414b7, // 0.95144, 0.30785 - 0x3fee7603dbce74e9, 0x3fd39be3f1bc8aef, // 0.95191, 0.30639 - 0x3fee79db29a5165a, 0x3fd383f5e353b6aa, // 0.95238, 0.30493 - 0x3fee7dadc456d850, 0x3fd36c04d27a4edf, // 0.95284, 0.30347 - 0x3fee817bab4cd10d, 0x3fd35410c2e18152, // 0.95331, 0.30201 - 0x3fee8544ddf0d075, 0x3fd33c19b83af207, // 0.95377, 0.30054 - 0x3fee89095bad6025, 0x3fd3241fb638baaf, // 0.95423, 0.29908 - 0x3fee8cc923edc388, 0x3fd30c22c08d6a13, // 0.95469, 0.29762 - 0x3fee9084361df7f3, 0x3fd2f422daec0386, // 0.95514, 0.29615 - 0x3fee943a91aab4b4, 0x3fd2dc200907fe51, // 0.95559, 0.29469 - 0x3fee97ec36016b30, 0x3fd2c41a4e954520, // 0.95605, 0.29322 - 0x3fee9b99229046f8, 0x3fd2ac11af483572, // 0.95649, 0.29175 - 0x3fee9f4156c62dda, 0x3fd294062ed59f05, // 0.95694, 0.29028 - 0x3feea2e4d212c000, 0x3fd27bf7d0f2c346, // 0.95738, 0.28882 - 0x3feea68393e65800, 0x3fd263e6995554ba, // 0.95783, 0.28735 - 0x3feeaa1d9bb20af3, 0x3fd24bd28bb37672, // 0.95827, 0.28588 - 0x3feeadb2e8e7a88e, 0x3fd233bbabc3bb72, // 0.9587, 0.28441 - 0x3feeb1437af9bb34, 0x3fd21ba1fd3d2623, // 0.95914, 0.28294 - 0x3feeb4cf515b8811, 0x3fd2038583d727bd, // 0.95957, 0.28146 - 0x3feeb8566b810f2a, 0x3fd1eb6643499fbb, // 0.96, 0.27999 - 0x3feebbd8c8df0b74, 0x3fd1d3443f4cdb3d, // 0.96043, 0.27852 - 0x3feebf5668eaf2ef, 0x3fd1bb1f7b999480, // 0.96086, 0.27705 - 0x3feec2cf4b1af6b2, 0x3fd1a2f7fbe8f243, // 0.96128, 0.27557 - 0x3feec6436ee60309, 0x3fd18acdc3f4873a, // 0.9617, 0.2741 - 0x3feec9b2d3c3bf84, 0x3fd172a0d7765177, // 0.96212, 0.27262 - 0x3feecd1d792c8f10, 0x3fd15a713a28b9d9, // 0.96254, 0.27115 - 0x3feed0835e999009, 0x3fd1423eefc69378, // 0.96295, 0.26967 - 0x3feed3e483849c51, 0x3fd12a09fc0b1b12, // 0.96337, 0.26819 - 0x3feed740e7684963, 0x3fd111d262b1f677, // 0.96378, 0.26671 - 0x3feeda9889bfe86a, 0x3fd0f998277733f7, // 0.96418, 0.26523 - 0x3feeddeb6a078651, 0x3fd0e15b4e1749cd, // 0.96459, 0.26375 - 0x3feee13987bbebdc, 0x3fd0c91bda4f158d, // 0.96499, 0.26227 - 0x3feee482e25a9dbc, 0x3fd0b0d9cfdbdb90, // 0.96539, 0.26079 - 0x3feee7c77961dc9e, 0x3fd09895327b465e, // 0.96579, 0.25931 - 0x3feeeb074c50a544, 0x3fd0804e05eb661e, // 0.96619, 0.25783 - 0x3feeee425aa6b09a, 0x3fd068044deab002, // 0.96658, 0.25635 - 0x3feef178a3e473c2, 0x3fd04fb80e37fdae, // 0.96698, 0.25487 - 0x3feef4aa278b2032, 0x3fd037694a928cac, // 0.96737, 0.25338 - 0x3feef7d6e51ca3c0, 0x3fd01f1806b9fdd2, // 0.96775, 0.2519 - 0x3feefafedc1ba8b7, 0x3fd006c4466e54af, // 0.96814, 0.25041 - 0x3feefe220c0b95ec, 0x3fcfdcdc1adfedf8, // 0.96852, 0.24893 - 0x3fef014074708ed3, 0x3fcfac2abeff57ff, // 0.9689, 0.24744 - 0x3fef045a14cf738c, 0x3fcf7b7480bd3801, // 0.96928, 0.24596 - 0x3fef076eecade0fa, 0x3fcf4ab9679c9f5c, // 0.96966, 0.24447 - 0x3fef0a7efb9230d7, 0x3fcf19f97b215f1a, // 0.97003, 0.24298 - 0x3fef0d8a410379c5, 0x3fcee934c2d006c7, // 0.9704, 0.24149 - 0x3fef1090bc898f5f, 0x3fceb86b462de348, // 0.97077, 0.24 - 0x3fef13926dad024e, 0x3fce879d0cc0fdaf, // 0.97114, 0.23851 - 0x3fef168f53f7205d, 0x3fce56ca1e101a1b, // 0.9715, 0.23702 - 0x3fef19876ef1f486, 0x3fce25f281a2b684, // 0.97187, 0.23553 - 0x3fef1c7abe284708, 0x3fcdf5163f01099a, // 0.97223, 0.23404 - 0x3fef1f6941259d7a, 0x3fcdc4355db40195, // 0.97258, 0.23255 - 0x3fef2252f7763ada, 0x3fcd934fe5454311, // 0.97294, 0.23106 - 0x3fef2537e0a71f9f, 0x3fcd6265dd3f27e3, // 0.97329, 0.22957 - 0x3fef2817fc4609ce, 0x3fcd31774d2cbdee, // 0.97364, 0.22807 - 0x3fef2af349e17507, 0x3fcd00843c99c5f9, // 0.97399, 0.22658 - 0x3fef2dc9c9089a9d, 0x3fcccf8cb312b286, // 0.97434, 0.22508 - 0x3fef309b794b719f, 0x3fcc9e90b824a6a9, // 0.97468, 0.22359 - 0x3fef33685a3aaef0, 0x3fcc6d90535d74dc, // 0.97503, 0.22209 - 0x3fef36306b67c556, 0x3fcc3c8b8c4b9dd7, // 0.97536, 0.2206 - 0x3fef38f3ac64e589, 0x3fcc0b826a7e4f63, // 0.9757, 0.2191 - 0x3fef3bb21cc4fe47, 0x3fcbda74f5856330, // 0.97604, 0.2176 - 0x3fef3e6bbc1bbc65, 0x3fcba96334f15dad, // 0.97637, 0.21611 - 0x3fef412089fd8adc, 0x3fcb784d30536cda, // 0.9767, 0.21461 - 0x3fef43d085ff92dd, 0x3fcb4732ef3d6722, // 0.97703, 0.21311 - 0x3fef467bafb7bbe0, 0x3fcb16147941ca2a, // 0.97735, 0.21161 - 0x3fef492206bcabb4, 0x3fcae4f1d5f3b9ab, // 0.97768, 0.21011 - 0x3fef4bc38aa5c694, 0x3fcab3cb0ce6fe44, // 0.978, 0.20861 - 0x3fef4e603b0b2f2d, 0x3fca82a025b00451, // 0.97832, 0.20711 - 0x3fef50f81785c6b9, 0x3fca517127e3dabc, // 0.97863, 0.20561 - 0x3fef538b1faf2d07, 0x3fca203e1b1831da, // 0.97895, 0.20411 - 0x3fef56195321c090, 0x3fc9ef0706e35a35, // 0.97926, 0.20261 - 0x3fef58a2b1789e84, 0x3fc9bdcbf2dc4366, // 0.97957, 0.2011 - 0x3fef5b273a4fa2d9, 0x3fc98c8ce69a7aec, // 0.97988, 0.1996 - 0x3fef5da6ed43685d, 0x3fc95b49e9b62af9, // 0.98018, 0.1981 - 0x3fef6021c9f148c2, 0x3fc92a0303c8194f, // 0.98048, 0.19659 - 0x3fef6297cff75cb0, 0x3fc8f8b83c69a60a, // 0.98079, 0.19509 - 0x3fef6508fef47bd5, 0x3fc8c7699b34ca7e, // 0.98108, 0.19359 - 0x3fef677556883cee, 0x3fc8961727c41804, // 0.98138, 0.19208 - 0x3fef69dcd652f5de, 0x3fc864c0e9b2b6cf, // 0.98167, 0.19057 - 0x3fef6c3f7df5bbb7, 0x3fc83366e89c64c5, // 0.98196, 0.18907 - 0x3fef6e9d4d1262ca, 0x3fc802092c1d744b, // 0.98225, 0.18756 - 0x3fef70f6434b7eb7, 0x3fc7d0a7bbd2cb1b, // 0.98254, 0.18606 - 0x3fef734a60446279, 0x3fc79f429f59e11d, // 0.98282, 0.18455 - 0x3fef7599a3a12077, 0x3fc76dd9de50bf31, // 0.98311, 0.18304 - 0x3fef77e40d068a90, 0x3fc73c6d8055fe0a, // 0.98339, 0.18153 - 0x3fef7a299c1a322a, 0x3fc70afd8d08c4ff, // 0.98366, 0.18002 - 0x3fef7c6a50826840, 0x3fc6d98a0c08c8da, // 0.98394, 0.17851 - 0x3fef7ea629e63d6e, 0x3fc6a81304f64ab2, // 0.98421, 0.177 - 0x3fef80dd27ed8204, 0x3fc676987f7216b8, // 0.98448, 0.17549 - 0x3fef830f4a40c60c, 0x3fc6451a831d830d, // 0.98475, 0.17398 - 0x3fef853c9089595e, 0x3fc61399179a6e94, // 0.98501, 0.17247 - 0x3fef8764fa714ba9, 0x3fc5e214448b3fc6, // 0.98528, 0.17096 - 0x3fef898887a36c84, 0x3fc5b08c1192e381, // 0.98554, 0.16945 - 0x3fef8ba737cb4b78, 0x3fc57f008654cbde, // 0.9858, 0.16794 - 0x3fef8dc10a95380d, 0x3fc54d71aa74ef02, // 0.98605, 0.16643 - 0x3fef8fd5ffae41db, 0x3fc51bdf8597c5f2, // 0.98631, 0.16491 - 0x3fef91e616c43891, 0x3fc4ea4a1f624b61, // 0.98656, 0.1634 - 0x3fef93f14f85ac08, 0x3fc4b8b17f79fa88, // 0.98681, 0.16189 - 0x3fef95f7a9a1ec47, 0x3fc48715ad84cdf5, // 0.98706, 0.16037 - 0x3fef97f924c9099b, 0x3fc45576b1293e5a, // 0.9873, 0.15886 - 0x3fef99f5c0abd496, 0x3fc423d4920e4166, // 0.98754, 0.15734 - 0x3fef9bed7cfbde29, 0x3fc3f22f57db4893, // 0.98778, 0.15583 - 0x3fef9de0596b77a3, 0x3fc3c0870a383ff6, // 0.98802, 0.15431 - 0x3fef9fce55adb2c8, 0x3fc38edbb0cd8d14, // 0.98826, 0.1528 - 0x3fefa1b7717661d5, 0x3fc35d2d53440db2, // 0.98849, 0.15128 - 0x3fefa39bac7a1791, 0x3fc32b7bf94516a7, // 0.98872, 0.14976 - 0x3fefa57b066e2754, 0x3fc2f9c7aa7a72af, // 0.98895, 0.14825 - 0x3fefa7557f08a517, 0x3fc2c8106e8e613a, // 0.98918, 0.14673 - 0x3fefa92b1600657c, 0x3fc296564d2b953e, // 0.9894, 0.14521 - 0x3fefaafbcb0cfddc, 0x3fc264994dfd340a, // 0.98962, 0.1437 - 0x3fefacc79de6c44f, 0x3fc232d978aed413, // 0.98984, 0.14218 - 0x3fefae8e8e46cfbb, 0x3fc20116d4ec7bce, // 0.99006, 0.14066 - 0x3fefb0509be6f7db, 0x3fc1cf516a62a077, // 0.99027, 0.13914 - 0x3fefb20dc681d54d, 0x3fc19d8940be24e7, // 0.99049, 0.13762 - 0x3fefb3c60dd2c199, 0x3fc16bbe5fac5865, // 0.9907, 0.1361 - 0x3fefb5797195d741, 0x3fc139f0cedaf576, // 0.9909, 0.13458 - 0x3fefb727f187f1c7, 0x3fc1082095f820b0, // 0.99111, 0.13306 - 0x3fefb8d18d66adb7, 0x3fc0d64dbcb26786, // 0.99131, 0.13154 - 0x3fefba7644f068b5, 0x3fc0a4784ab8bf1d, // 0.99151, 0.13002 - 0x3fefbc1617e44186, 0x3fc072a047ba831d, // 0.99171, 0.1285 - 0x3fefbdb106021816, 0x3fc040c5bb67747e, // 0.99191, 0.12698 - 0x3fefbf470f0a8d88, 0x3fc00ee8ad6fb85b, // 0.9921, 0.12545 - 0x3fefc0d832bf043a, 0x3fbfba124b07ad85, // 0.99229, 0.12393 - 0x3fefc26470e19fd3, 0x3fbf564e56a9730e, // 0.99248, 0.12241 - 0x3fefc3ebc935454c, 0x3fbef2858d27561b, // 0.99267, 0.12089 - 0x3fefc56e3b7d9af6, 0x3fbe8eb7fde4aa3e, // 0.99285, 0.11937 - 0x3fefc6ebc77f0887, 0x3fbe2ae5b8457f77, // 0.99303, 0.11784 - 0x3fefc8646cfeb721, 0x3fbdc70ecbae9fc8, // 0.99321, 0.11632 - 0x3fefc9d82bc2915e, 0x3fbd633347858ce4, // 0.99339, 0.11479 - 0x3fefcb4703914354, 0x3fbcff533b307dc1, // 0.99356, 0.11327 - 0x3fefccb0f4323aa3, 0x3fbc9b6eb6165c42, // 0.99374, 0.11175 - 0x3fefce15fd6da67b, 0x3fbc3785c79ec2d5, // 0.99391, 0.11022 - 0x3fefcf761f0c77a3, 0x3fbbd3987f31fa0e, // 0.99407, 0.1087 - 0x3fefd0d158d86087, 0x3fbb6fa6ec38f64c, // 0.99424, 0.10717 - 0x3fefd227aa9bd53b, 0x3fbb0bb11e1d5559, // 0.9944, 0.10565 - 0x3fefd37914220b84, 0x3fbaa7b724495c04, // 0.99456, 0.10412 - 0x3fefd4c59536fae4, 0x3fba43b90e27f3c4, // 0.99472, 0.1026 - 0x3fefd60d2da75c9e, 0x3fb9dfb6eb24a85c, // 0.99488, 0.10107 - 0x3fefd74fdd40abbf, 0x3fb97bb0caaba56f, // 0.99503, 0.099544 - 0x3fefd88da3d12526, 0x3fb917a6bc29b42c, // 0.99518, 0.098017 - 0x3fefd9c68127c78c, 0x3fb8b398cf0c38e0, // 0.99533, 0.09649 - 0x3fefdafa7514538c, 0x3fb84f8712c130a0, // 0.99548, 0.094963 - 0x3fefdc297f674ba9, 0x3fb7eb7196b72ee4, // 0.99563, 0.093436 - 0x3fefdd539ff1f456, 0x3fb787586a5d5b21, // 0.99577, 0.091909 - 0x3fefde78d68653fd, 0x3fb7233b9d236e71, // 0.99591, 0.090381 - 0x3fefdf9922f73307, 0x3fb6bf1b3e79b129, // 0.99604, 0.088854 - 0x3fefe0b485181be3, 0x3fb65af75dd0f87b, // 0.99618, 0.087326 - 0x3fefe1cafcbd5b09, 0x3fb5f6d00a9aa419, // 0.99631, 0.085797 - 0x3fefe2dc89bbff08, 0x3fb592a554489bc8, // 0.99644, 0.084269 - 0x3fefe3e92be9d886, 0x3fb52e774a4d4d0a, // 0.99657, 0.08274 - 0x3fefe4f0e31d7a4a, 0x3fb4ca45fc1ba8b6, // 0.9967, 0.081211 - 0x3fefe5f3af2e3940, 0x3fb4661179272096, // 0.99682, 0.079682 - 0x3fefe6f18ff42c84, 0x3fb401d9d0e3a507, // 0.99694, 0.078153 - 0x3fefe7ea85482d60, 0x3fb39d9f12c5a299, // 0.99706, 0.076624 - 0x3fefe8de8f03d75c, 0x3fb339614e41ffa5, // 0.99718, 0.075094 - 0x3fefe9cdad01883a, 0x3fb2d52092ce19f6, // 0.99729, 0.073565 - 0x3fefeab7df1c6005, 0x3fb270dcefdfc45b, // 0.9974, 0.072035 - 0x3fefeb9d2530410f, 0x3fb20c9674ed444c, // 0.99751, 0.070505 - 0x3fefec7d7f19cffc, 0x3fb1a84d316d4f8a, // 0.99762, 0.068974 - 0x3fefed58ecb673c4, 0x3fb1440134d709b2, // 0.99772, 0.067444 - 0x3fefee2f6de455ba, 0x3fb0dfb28ea201e6, // 0.99783, 0.065913 - 0x3fefef0102826191, 0x3fb07b614e463064, // 0.99793, 0.064383 - 0x3fefefcdaa704562, 0x3fb0170d833bf421, // 0.99802, 0.062852 - 0x3feff095658e71ad, 0x3faf656e79f820e0, // 0.99812, 0.061321 - 0x3feff15833be1965, 0x3fae9cbd15ff5527, // 0.99821, 0.05979 - 0x3feff21614e131ed, 0x3fadd406f9808ec8, // 0.9983, 0.058258 - 0x3feff2cf08da7321, 0x3fad0b4c436f91d0, // 0.99839, 0.056727 - 0x3feff3830f8d575c, 0x3fac428d12c0d7e3, // 0.99848, 0.055195 - 0x3feff43228de1b77, 0x3fab79c986698b78, // 0.99856, 0.053664 - 0x3feff4dc54b1bed3, 0x3faab101bd5f8317, // 0.99864, 0.052132 - 0x3feff58192ee0358, 0x3fa9e835d6993c87, // 0.99872, 0.0506 - 0x3feff621e3796d7e, 0x3fa91f65f10dd814, // 0.9988, 0.049068 - 0x3feff6bd463b444d, 0x3fa856922bb513c1, // 0.99887, 0.047535 - 0x3feff753bb1b9164, 0x3fa78dbaa5874685, // 0.99894, 0.046003 - 0x3feff7e5420320f9, 0x3fa6c4df7d7d5b84, // 0.99901, 0.044471 - 0x3feff871dadb81df, 0x3fa5fc00d290cd43, // 0.99908, 0.042938 - 0x3feff8f9858f058b, 0x3fa5331ec3bba0eb, // 0.99914, 0.041406 - 0x3feff97c4208c014, 0x3fa46a396ff86179, // 0.9992, 0.039873 - 0x3feff9fa10348837, 0x3fa3a150f6421afc, // 0.99926, 0.03834 - 0x3feffa72effef75d, 0x3fa2d865759455cd, // 0.99932, 0.036807 - 0x3feffae6e1556998, 0x3fa20f770ceb11c6, // 0.99938, 0.035274 - 0x3feffb55e425fdae, 0x3fa14685db42c17e, // 0.99943, 0.033741 - 0x3feffbbff85f9515, 0x3fa07d91ff984580, // 0.99948, 0.032208 - 0x3feffc251df1d3f8, 0x3f9f693731d1cf01, // 0.99953, 0.030675 - 0x3feffc8554cd213a, 0x3f9dd7458c64ab39, // 0.99958, 0.029142 - 0x3feffce09ce2a679, 0x3f9c454f4ce53b1c, // 0.99962, 0.027608 - 0x3feffd36f624500c, 0x3f9ab354b1504fca, // 0.99966, 0.026075 - 0x3feffd886084cd0d, 0x3f992155f7a3667e, // 0.9997, 0.024541 - 0x3feffdd4dbf78f52, 0x3f978f535ddc9f03, // 0.99974, 0.023008 - 0x3feffe1c6870cb77, 0x3f95fd4d21fab226, // 0.99977, 0.021474 - 0x3feffe5f05e578db, 0x3f946b4381fce81c, // 0.9998, 0.01994 - 0x3feffe9cb44b51a1, 0x3f92d936bbe30efd, // 0.99983, 0.018407 - 0x3feffed57398d2b7, 0x3f9147270dad7132, // 0.99986, 0.016873 - 0x3fefff0943c53bd1, 0x3f8f6a296ab997ca, // 0.99988, 0.015339 - 0x3fefff3824c88f6f, 0x3f8c45ffe1e48ad9, // 0.9999, 0.013805 - 0x3fefff62169b92db, 0x3f8921d1fcdec784, // 0.99992, 0.012272 - 0x3fefff871937ce2f, 0x3f85fda037ac05e0, // 0.99994, 0.010738 - 0x3fefffa72c978c4f, 0x3f82d96b0e509703, // 0.99996, 0.0092038 - 0x3fefffc250b5daef, 0x3f7f6a65f9a2a3c5, // 0.99997, 0.0076698 - 0x3fefffd8858e8a92, 0x3f7921f0fe670071, // 0.99998, 0.0061359 - 0x3fefffe9cb1e2e8d, 0x3f72d97822f996bc, // 0.99999, 0.0046019 - 0x3feffff621621d02, 0x3f6921f8becca4ba, // 1, 0.003068 - 0x3feffffd88586ee6, 0x3f5921faaee6472d, // 1, 0.001534 - 0x3ff0000000000000, 0x0000000000000000, // 1, 0 - 0x3feffffd88586ee6, 0xbf5921faaee6472d, // 1, -0.001534 - 0x3feffff621621d02, 0xbf6921f8becca4ba, // 1, -0.003068 - 0x3fefffe9cb1e2e8d, 0xbf72d97822f996bc, // 0.99999,-0.0046019 - 0x3fefffd8858e8a92, 0xbf7921f0fe670071, // 0.99998,-0.0061359 - 0x3fefffc250b5daef, 0xbf7f6a65f9a2a3c5, // 0.99997,-0.0076698 - 0x3fefffa72c978c4f, 0xbf82d96b0e509703, // 0.99996,-0.0092038 - 0x3fefff871937ce2f, 0xbf85fda037ac05e0, // 0.99994, -0.010738 - 0x3fefff62169b92db, 0xbf8921d1fcdec784, // 0.99992, -0.012272 - 0x3fefff3824c88f6f, 0xbf8c45ffe1e48ad9, // 0.9999, -0.013805 - 0x3fefff0943c53bd1, 0xbf8f6a296ab997ca, // 0.99988, -0.015339 - 0x3feffed57398d2b7, 0xbf9147270dad7132, // 0.99986, -0.016873 - 0x3feffe9cb44b51a1, 0xbf92d936bbe30efd, // 0.99983, -0.018407 - 0x3feffe5f05e578db, 0xbf946b4381fce81c, // 0.9998, -0.01994 - 0x3feffe1c6870cb77, 0xbf95fd4d21fab226, // 0.99977, -0.021474 - 0x3feffdd4dbf78f52, 0xbf978f535ddc9f03, // 0.99974, -0.023008 - 0x3feffd886084cd0d, 0xbf992155f7a3667e, // 0.9997, -0.024541 - 0x3feffd36f624500c, 0xbf9ab354b1504fca, // 0.99966, -0.026075 - 0x3feffce09ce2a679, 0xbf9c454f4ce53b1c, // 0.99962, -0.027608 - 0x3feffc8554cd213a, 0xbf9dd7458c64ab39, // 0.99958, -0.029142 - 0x3feffc251df1d3f8, 0xbf9f693731d1cf01, // 0.99953, -0.030675 - 0x3feffbbff85f9515, 0xbfa07d91ff984580, // 0.99948, -0.032208 - 0x3feffb55e425fdae, 0xbfa14685db42c17e, // 0.99943, -0.033741 - 0x3feffae6e1556998, 0xbfa20f770ceb11c6, // 0.99938, -0.035274 - 0x3feffa72effef75d, 0xbfa2d865759455cd, // 0.99932, -0.036807 - 0x3feff9fa10348837, 0xbfa3a150f6421afc, // 0.99926, -0.03834 - 0x3feff97c4208c014, 0xbfa46a396ff86179, // 0.9992, -0.039873 - 0x3feff8f9858f058b, 0xbfa5331ec3bba0eb, // 0.99914, -0.041406 - 0x3feff871dadb81df, 0xbfa5fc00d290cd43, // 0.99908, -0.042938 - 0x3feff7e5420320f9, 0xbfa6c4df7d7d5b84, // 0.99901, -0.044471 - 0x3feff753bb1b9164, 0xbfa78dbaa5874685, // 0.99894, -0.046003 - 0x3feff6bd463b444d, 0xbfa856922bb513c1, // 0.99887, -0.047535 - 0x3feff621e3796d7e, 0xbfa91f65f10dd814, // 0.9988, -0.049068 - 0x3feff58192ee0358, 0xbfa9e835d6993c87, // 0.99872, -0.0506 - 0x3feff4dc54b1bed3, 0xbfaab101bd5f8317, // 0.99864, -0.052132 - 0x3feff43228de1b77, 0xbfab79c986698b78, // 0.99856, -0.053664 - 0x3feff3830f8d575c, 0xbfac428d12c0d7e3, // 0.99848, -0.055195 - 0x3feff2cf08da7321, 0xbfad0b4c436f91d0, // 0.99839, -0.056727 - 0x3feff21614e131ed, 0xbfadd406f9808ec8, // 0.9983, -0.058258 - 0x3feff15833be1965, 0xbfae9cbd15ff5527, // 0.99821, -0.05979 - 0x3feff095658e71ad, 0xbfaf656e79f820e0, // 0.99812, -0.061321 - 0x3fefefcdaa704562, 0xbfb0170d833bf421, // 0.99802, -0.062852 - 0x3fefef0102826191, 0xbfb07b614e463064, // 0.99793, -0.064383 - 0x3fefee2f6de455ba, 0xbfb0dfb28ea201e6, // 0.99783, -0.065913 - 0x3fefed58ecb673c4, 0xbfb1440134d709b2, // 0.99772, -0.067444 - 0x3fefec7d7f19cffc, 0xbfb1a84d316d4f8a, // 0.99762, -0.068974 - 0x3fefeb9d2530410f, 0xbfb20c9674ed444c, // 0.99751, -0.070505 - 0x3fefeab7df1c6005, 0xbfb270dcefdfc45b, // 0.9974, -0.072035 - 0x3fefe9cdad01883a, 0xbfb2d52092ce19f6, // 0.99729, -0.073565 - 0x3fefe8de8f03d75c, 0xbfb339614e41ffa5, // 0.99718, -0.075094 - 0x3fefe7ea85482d60, 0xbfb39d9f12c5a299, // 0.99706, -0.076624 - 0x3fefe6f18ff42c84, 0xbfb401d9d0e3a507, // 0.99694, -0.078153 - 0x3fefe5f3af2e3940, 0xbfb4661179272096, // 0.99682, -0.079682 - 0x3fefe4f0e31d7a4a, 0xbfb4ca45fc1ba8b6, // 0.9967, -0.081211 - 0x3fefe3e92be9d886, 0xbfb52e774a4d4d0a, // 0.99657, -0.08274 - 0x3fefe2dc89bbff08, 0xbfb592a554489bc8, // 0.99644, -0.084269 - 0x3fefe1cafcbd5b09, 0xbfb5f6d00a9aa419, // 0.99631, -0.085797 - 0x3fefe0b485181be3, 0xbfb65af75dd0f87b, // 0.99618, -0.087326 - 0x3fefdf9922f73307, 0xbfb6bf1b3e79b129, // 0.99604, -0.088854 - 0x3fefde78d68653fd, 0xbfb7233b9d236e71, // 0.99591, -0.090381 - 0x3fefdd539ff1f456, 0xbfb787586a5d5b21, // 0.99577, -0.091909 - 0x3fefdc297f674ba9, 0xbfb7eb7196b72ee4, // 0.99563, -0.093436 - 0x3fefdafa7514538c, 0xbfb84f8712c130a0, // 0.99548, -0.094963 - 0x3fefd9c68127c78c, 0xbfb8b398cf0c38e0, // 0.99533, -0.09649 - 0x3fefd88da3d12526, 0xbfb917a6bc29b42c, // 0.99518, -0.098017 - 0x3fefd74fdd40abbf, 0xbfb97bb0caaba56f, // 0.99503, -0.099544 - 0x3fefd60d2da75c9e, 0xbfb9dfb6eb24a85c, // 0.99488, -0.10107 - 0x3fefd4c59536fae4, 0xbfba43b90e27f3c4, // 0.99472, -0.1026 - 0x3fefd37914220b84, 0xbfbaa7b724495c04, // 0.99456, -0.10412 - 0x3fefd227aa9bd53b, 0xbfbb0bb11e1d5559, // 0.9944, -0.10565 - 0x3fefd0d158d86087, 0xbfbb6fa6ec38f64c, // 0.99424, -0.10717 - 0x3fefcf761f0c77a3, 0xbfbbd3987f31fa0e, // 0.99407, -0.1087 - 0x3fefce15fd6da67b, 0xbfbc3785c79ec2d5, // 0.99391, -0.11022 - 0x3fefccb0f4323aa3, 0xbfbc9b6eb6165c42, // 0.99374, -0.11175 - 0x3fefcb4703914354, 0xbfbcff533b307dc1, // 0.99356, -0.11327 - 0x3fefc9d82bc2915e, 0xbfbd633347858ce4, // 0.99339, -0.11479 - 0x3fefc8646cfeb721, 0xbfbdc70ecbae9fc8, // 0.99321, -0.11632 - 0x3fefc6ebc77f0887, 0xbfbe2ae5b8457f77, // 0.99303, -0.11784 - 0x3fefc56e3b7d9af6, 0xbfbe8eb7fde4aa3e, // 0.99285, -0.11937 - 0x3fefc3ebc935454c, 0xbfbef2858d27561b, // 0.99267, -0.12089 - 0x3fefc26470e19fd3, 0xbfbf564e56a9730e, // 0.99248, -0.12241 - 0x3fefc0d832bf043a, 0xbfbfba124b07ad85, // 0.99229, -0.12393 - 0x3fefbf470f0a8d88, 0xbfc00ee8ad6fb85b, // 0.9921, -0.12545 - 0x3fefbdb106021816, 0xbfc040c5bb67747e, // 0.99191, -0.12698 - 0x3fefbc1617e44186, 0xbfc072a047ba831d, // 0.99171, -0.1285 - 0x3fefba7644f068b5, 0xbfc0a4784ab8bf1d, // 0.99151, -0.13002 - 0x3fefb8d18d66adb7, 0xbfc0d64dbcb26786, // 0.99131, -0.13154 - 0x3fefb727f187f1c7, 0xbfc1082095f820b0, // 0.99111, -0.13306 - 0x3fefb5797195d741, 0xbfc139f0cedaf576, // 0.9909, -0.13458 - 0x3fefb3c60dd2c199, 0xbfc16bbe5fac5865, // 0.9907, -0.1361 - 0x3fefb20dc681d54d, 0xbfc19d8940be24e7, // 0.99049, -0.13762 - 0x3fefb0509be6f7db, 0xbfc1cf516a62a077, // 0.99027, -0.13914 - 0x3fefae8e8e46cfbb, 0xbfc20116d4ec7bce, // 0.99006, -0.14066 - 0x3fefacc79de6c44f, 0xbfc232d978aed413, // 0.98984, -0.14218 - 0x3fefaafbcb0cfddc, 0xbfc264994dfd340a, // 0.98962, -0.1437 - 0x3fefa92b1600657c, 0xbfc296564d2b953e, // 0.9894, -0.14521 - 0x3fefa7557f08a517, 0xbfc2c8106e8e613a, // 0.98918, -0.14673 - 0x3fefa57b066e2754, 0xbfc2f9c7aa7a72af, // 0.98895, -0.14825 - 0x3fefa39bac7a1791, 0xbfc32b7bf94516a7, // 0.98872, -0.14976 - 0x3fefa1b7717661d5, 0xbfc35d2d53440db2, // 0.98849, -0.15128 - 0x3fef9fce55adb2c8, 0xbfc38edbb0cd8d14, // 0.98826, -0.1528 - 0x3fef9de0596b77a3, 0xbfc3c0870a383ff6, // 0.98802, -0.15431 - 0x3fef9bed7cfbde29, 0xbfc3f22f57db4893, // 0.98778, -0.15583 - 0x3fef99f5c0abd496, 0xbfc423d4920e4166, // 0.98754, -0.15734 - 0x3fef97f924c9099b, 0xbfc45576b1293e5a, // 0.9873, -0.15886 - 0x3fef95f7a9a1ec47, 0xbfc48715ad84cdf5, // 0.98706, -0.16037 - 0x3fef93f14f85ac08, 0xbfc4b8b17f79fa88, // 0.98681, -0.16189 - 0x3fef91e616c43891, 0xbfc4ea4a1f624b61, // 0.98656, -0.1634 - 0x3fef8fd5ffae41db, 0xbfc51bdf8597c5f2, // 0.98631, -0.16491 - 0x3fef8dc10a95380d, 0xbfc54d71aa74ef02, // 0.98605, -0.16643 - 0x3fef8ba737cb4b78, 0xbfc57f008654cbde, // 0.9858, -0.16794 - 0x3fef898887a36c84, 0xbfc5b08c1192e381, // 0.98554, -0.16945 - 0x3fef8764fa714ba9, 0xbfc5e214448b3fc6, // 0.98528, -0.17096 - 0x3fef853c9089595e, 0xbfc61399179a6e94, // 0.98501, -0.17247 - 0x3fef830f4a40c60c, 0xbfc6451a831d830d, // 0.98475, -0.17398 - 0x3fef80dd27ed8204, 0xbfc676987f7216b8, // 0.98448, -0.17549 - 0x3fef7ea629e63d6e, 0xbfc6a81304f64ab2, // 0.98421, -0.177 - 0x3fef7c6a50826840, 0xbfc6d98a0c08c8da, // 0.98394, -0.17851 - 0x3fef7a299c1a322a, 0xbfc70afd8d08c4ff, // 0.98366, -0.18002 - 0x3fef77e40d068a90, 0xbfc73c6d8055fe0a, // 0.98339, -0.18153 - 0x3fef7599a3a12077, 0xbfc76dd9de50bf31, // 0.98311, -0.18304 - 0x3fef734a60446279, 0xbfc79f429f59e11d, // 0.98282, -0.18455 - 0x3fef70f6434b7eb7, 0xbfc7d0a7bbd2cb1b, // 0.98254, -0.18606 - 0x3fef6e9d4d1262ca, 0xbfc802092c1d744b, // 0.98225, -0.18756 - 0x3fef6c3f7df5bbb7, 0xbfc83366e89c64c5, // 0.98196, -0.18907 - 0x3fef69dcd652f5de, 0xbfc864c0e9b2b6cf, // 0.98167, -0.19057 - 0x3fef677556883cee, 0xbfc8961727c41804, // 0.98138, -0.19208 - 0x3fef6508fef47bd5, 0xbfc8c7699b34ca7e, // 0.98108, -0.19359 - 0x3fef6297cff75cb0, 0xbfc8f8b83c69a60a, // 0.98079, -0.19509 - 0x3fef6021c9f148c2, 0xbfc92a0303c8194f, // 0.98048, -0.19659 - 0x3fef5da6ed43685d, 0xbfc95b49e9b62af9, // 0.98018, -0.1981 - 0x3fef5b273a4fa2d9, 0xbfc98c8ce69a7aec, // 0.97988, -0.1996 - 0x3fef58a2b1789e84, 0xbfc9bdcbf2dc4366, // 0.97957, -0.2011 - 0x3fef56195321c090, 0xbfc9ef0706e35a35, // 0.97926, -0.20261 - 0x3fef538b1faf2d07, 0xbfca203e1b1831da, // 0.97895, -0.20411 - 0x3fef50f81785c6b9, 0xbfca517127e3dabc, // 0.97863, -0.20561 - 0x3fef4e603b0b2f2d, 0xbfca82a025b00451, // 0.97832, -0.20711 - 0x3fef4bc38aa5c694, 0xbfcab3cb0ce6fe44, // 0.978, -0.20861 - 0x3fef492206bcabb4, 0xbfcae4f1d5f3b9ab, // 0.97768, -0.21011 - 0x3fef467bafb7bbe0, 0xbfcb16147941ca2a, // 0.97735, -0.21161 - 0x3fef43d085ff92dd, 0xbfcb4732ef3d6722, // 0.97703, -0.21311 - 0x3fef412089fd8adc, 0xbfcb784d30536cda, // 0.9767, -0.21461 - 0x3fef3e6bbc1bbc65, 0xbfcba96334f15dad, // 0.97637, -0.21611 - 0x3fef3bb21cc4fe47, 0xbfcbda74f5856330, // 0.97604, -0.2176 - 0x3fef38f3ac64e589, 0xbfcc0b826a7e4f63, // 0.9757, -0.2191 - 0x3fef36306b67c556, 0xbfcc3c8b8c4b9dd7, // 0.97536, -0.2206 - 0x3fef33685a3aaef0, 0xbfcc6d90535d74dc, // 0.97503, -0.22209 - 0x3fef309b794b719f, 0xbfcc9e90b824a6a9, // 0.97468, -0.22359 - 0x3fef2dc9c9089a9d, 0xbfcccf8cb312b286, // 0.97434, -0.22508 - 0x3fef2af349e17507, 0xbfcd00843c99c5f9, // 0.97399, -0.22658 - 0x3fef2817fc4609ce, 0xbfcd31774d2cbdee, // 0.97364, -0.22807 - 0x3fef2537e0a71f9f, 0xbfcd6265dd3f27e3, // 0.97329, -0.22957 - 0x3fef2252f7763ada, 0xbfcd934fe5454311, // 0.97294, -0.23106 - 0x3fef1f6941259d7a, 0xbfcdc4355db40195, // 0.97258, -0.23255 - 0x3fef1c7abe284708, 0xbfcdf5163f01099a, // 0.97223, -0.23404 - 0x3fef19876ef1f486, 0xbfce25f281a2b684, // 0.97187, -0.23553 - 0x3fef168f53f7205d, 0xbfce56ca1e101a1b, // 0.9715, -0.23702 - 0x3fef13926dad024e, 0xbfce879d0cc0fdaf, // 0.97114, -0.23851 - 0x3fef1090bc898f5f, 0xbfceb86b462de348, // 0.97077, -0.24 - 0x3fef0d8a410379c5, 0xbfcee934c2d006c7, // 0.9704, -0.24149 - 0x3fef0a7efb9230d7, 0xbfcf19f97b215f1a, // 0.97003, -0.24298 - 0x3fef076eecade0fa, 0xbfcf4ab9679c9f5c, // 0.96966, -0.24447 - 0x3fef045a14cf738c, 0xbfcf7b7480bd3801, // 0.96928, -0.24596 - 0x3fef014074708ed3, 0xbfcfac2abeff57ff, // 0.9689, -0.24744 - 0x3feefe220c0b95ec, 0xbfcfdcdc1adfedf8, // 0.96852, -0.24893 - 0x3feefafedc1ba8b7, 0xbfd006c4466e54af, // 0.96814, -0.25041 - 0x3feef7d6e51ca3c0, 0xbfd01f1806b9fdd2, // 0.96775, -0.2519 - 0x3feef4aa278b2032, 0xbfd037694a928cac, // 0.96737, -0.25338 - 0x3feef178a3e473c2, 0xbfd04fb80e37fdae, // 0.96698, -0.25487 - 0x3feeee425aa6b09a, 0xbfd068044deab002, // 0.96658, -0.25635 - 0x3feeeb074c50a544, 0xbfd0804e05eb661e, // 0.96619, -0.25783 - 0x3feee7c77961dc9e, 0xbfd09895327b465e, // 0.96579, -0.25931 - 0x3feee482e25a9dbc, 0xbfd0b0d9cfdbdb90, // 0.96539, -0.26079 - 0x3feee13987bbebdc, 0xbfd0c91bda4f158d, // 0.96499, -0.26227 - 0x3feeddeb6a078651, 0xbfd0e15b4e1749cd, // 0.96459, -0.26375 - 0x3feeda9889bfe86a, 0xbfd0f998277733f7, // 0.96418, -0.26523 - 0x3feed740e7684963, 0xbfd111d262b1f677, // 0.96378, -0.26671 - 0x3feed3e483849c51, 0xbfd12a09fc0b1b12, // 0.96337, -0.26819 - 0x3feed0835e999009, 0xbfd1423eefc69378, // 0.96295, -0.26967 - 0x3feecd1d792c8f10, 0xbfd15a713a28b9d9, // 0.96254, -0.27115 - 0x3feec9b2d3c3bf84, 0xbfd172a0d7765177, // 0.96212, -0.27262 - 0x3feec6436ee60309, 0xbfd18acdc3f4873a, // 0.9617, -0.2741 - 0x3feec2cf4b1af6b2, 0xbfd1a2f7fbe8f243, // 0.96128, -0.27557 - 0x3feebf5668eaf2ef, 0xbfd1bb1f7b999480, // 0.96086, -0.27705 - 0x3feebbd8c8df0b74, 0xbfd1d3443f4cdb3d, // 0.96043, -0.27852 - 0x3feeb8566b810f2a, 0xbfd1eb6643499fbb, // 0.96, -0.27999 - 0x3feeb4cf515b8811, 0xbfd2038583d727bd, // 0.95957, -0.28146 - 0x3feeb1437af9bb34, 0xbfd21ba1fd3d2623, // 0.95914, -0.28294 - 0x3feeadb2e8e7a88e, 0xbfd233bbabc3bb72, // 0.9587, -0.28441 - 0x3feeaa1d9bb20af3, 0xbfd24bd28bb37672, // 0.95827, -0.28588 - 0x3feea68393e65800, 0xbfd263e6995554ba, // 0.95783, -0.28735 - 0x3feea2e4d212c000, 0xbfd27bf7d0f2c346, // 0.95738, -0.28882 - 0x3fee9f4156c62dda, 0xbfd294062ed59f05, // 0.95694, -0.29028 - 0x3fee9b99229046f8, 0xbfd2ac11af483572, // 0.95649, -0.29175 - 0x3fee97ec36016b30, 0xbfd2c41a4e954520, // 0.95605, -0.29322 - 0x3fee943a91aab4b4, 0xbfd2dc200907fe51, // 0.95559, -0.29469 - 0x3fee9084361df7f3, 0xbfd2f422daec0386, // 0.95514, -0.29615 - 0x3fee8cc923edc388, 0xbfd30c22c08d6a13, // 0.95469, -0.29762 - 0x3fee89095bad6025, 0xbfd3241fb638baaf, // 0.95423, -0.29908 - 0x3fee8544ddf0d075, 0xbfd33c19b83af207, // 0.95377, -0.30054 - 0x3fee817bab4cd10d, 0xbfd35410c2e18152, // 0.95331, -0.30201 - 0x3fee7dadc456d850, 0xbfd36c04d27a4edf, // 0.95284, -0.30347 - 0x3fee79db29a5165a, 0xbfd383f5e353b6aa, // 0.95238, -0.30493 - 0x3fee7603dbce74e9, 0xbfd39be3f1bc8aef, // 0.95191, -0.30639 - 0x3fee7227db6a9744, 0xbfd3b3cefa0414b7, // 0.95144, -0.30785 - 0x3fee6e472911da27, 0xbfd3cbb6f87a146e, // 0.95096, -0.30931 - 0x3fee6a61c55d53a7, 0xbfd3e39be96ec271, // 0.95049, -0.31077 - 0x3fee6677b0e6d31e, 0xbfd3fb7dc932cfa4, // 0.95001, -0.31222 - 0x3fee6288ec48e112, 0xbfd4135c94176602, // 0.94953, -0.31368 - 0x3fee5e95781ebf1c, 0xbfd42b38466e2928, // 0.94905, -0.31514 - 0x3fee5a9d550467d3, 0xbfd44310dc8936f0, // 0.94856, -0.31659 - 0x3fee56a083968eb1, 0xbfd45ae652bb2800, // 0.94807, -0.31805 - 0x3fee529f04729ffc, 0xbfd472b8a5571054, // 0.94759, -0.3195 - 0x3fee4e98d836c0af, 0xbfd48a87d0b07fd7, // 0.94709, -0.32096 - 0x3fee4a8dff81ce5e, 0xbfd4a253d11b82f3, // 0.9466, -0.32241 - 0x3fee467e7af35f23, 0xbfd4ba1ca2eca31c, // 0.94611, -0.32386 - 0x3fee426a4b2bc17e, 0xbfd4d1e24278e76a, // 0.94561, -0.32531 - 0x3fee3e5170cbfc46, 0xbfd4e9a4ac15d520, // 0.94511, -0.32676 - 0x3fee3a33ec75ce85, 0xbfd50163dc197047, // 0.9446, -0.32821 - 0x3fee3611becbaf69, 0xbfd5191fceda3c35, // 0.9441, -0.32966 - 0x3fee31eae870ce25, 0xbfd530d880af3c24, // 0.94359, -0.33111 - 0x3fee2dbf6a0911d9, 0xbfd5488dedeff3be, // 0.94308, -0.33255 - 0x3fee298f4439197a, 0xbfd5604012f467b4, // 0.94257, -0.334 - 0x3fee255a77a63bb8, 0xbfd577eeec151e47, // 0.94206, -0.33545 - 0x3fee212104f686e5, 0xbfd58f9a75ab1fdd, // 0.94154, -0.33689 - 0x3fee1ce2ecd0c0d8, 0xbfd5a742ac0ff78d, // 0.94103, -0.33833 - 0x3fee18a02fdc66d9, 0xbfd5bee78b9db3b6, // 0.94051, -0.33978 - 0x3fee1458cec1ad83, 0xbfd5d68910aee686, // 0.93998, -0.34122 - 0x3fee100cca2980ac, 0xbfd5ee27379ea693, // 0.93946, -0.34266 - 0x3fee0bbc22bd8349, 0xbfd605c1fcc88f63, // 0.93893, -0.3441 - 0x3fee0766d9280f54, 0xbfd61d595c88c203, // 0.9384, -0.34554 - 0x3fee030cee1435b8, 0xbfd634ed533be58e, // 0.93787, -0.34698 - 0x3fedfeae622dbe2b, 0xbfd64c7ddd3f27c6, // 0.93734, -0.34842 - 0x3fedfa4b3621271d, 0xbfd6640af6f03d9e, // 0.9368, -0.34986 - 0x3fedf5e36a9ba59c, 0xbfd67b949cad63ca, // 0.93627, -0.35129 - 0x3fedf177004b2534, 0xbfd6931acad55f51, // 0.93573, -0.35273 - 0x3feded05f7de47da, 0xbfd6aa9d7dc77e16, // 0.93518, -0.35416 - 0x3fede890520465ce, 0xbfd6c21cb1e39771, // 0.93464, -0.3556 - 0x3fede4160f6d8d81, 0xbfd6d998638a0cb5, // 0.93409, -0.35703 - 0x3feddf9730ca837b, 0xbfd6f1108f1bc9c5, // 0.93354, -0.35846 - 0x3feddb13b6ccc23d, 0xbfd7088530fa459e, // 0.93299, -0.3599 - 0x3fedd68ba2267a25, 0xbfd71ff6458782ec, // 0.93244, -0.36133 - 0x3fedd1fef38a915a, 0xbfd73763c9261092, // 0.93188, -0.36276 - 0x3fedcd6dabaca3a5, 0xbfd74ecdb8390a3e, // 0.93133, -0.36418 - 0x3fedc8d7cb410260, 0xbfd766340f2418f6, // 0.93077, -0.36561 - 0x3fedc43d52fcb453, 0xbfd77d96ca4b73a6, // 0.93021, -0.36704 - 0x3fedbf9e4395759a, 0xbfd794f5e613dfae, // 0.92964, -0.36847 - 0x3fedbafa9dc1b78d, 0xbfd7ac515ee2b172, // 0.92907, -0.36989 - 0x3fedb6526238a09b, 0xbfd7c3a9311dcce7, // 0.92851, -0.37132 - 0x3fedb1a591b20c38, 0xbfd7dafd592ba621, // 0.92794, -0.37274 - 0x3fedacf42ce68ab9, 0xbfd7f24dd37341e3, // 0.92736, -0.37416 - 0x3feda83e348f613b, 0xbfd8099a9c5c362d, // 0.92679, -0.37559 - 0x3feda383a9668988, 0xbfd820e3b04eaac4, // 0.92621, -0.37701 - 0x3fed9ec48c26b1f3, 0xbfd838290bb359c8, // 0.92563, -0.37843 - 0x3fed9a00dd8b3d46, 0xbfd84f6aaaf3903f, // 0.92505, -0.37985 - 0x3fed95389e50429b, 0xbfd866a88a792ea0, // 0.92447, -0.38127 - 0x3fed906bcf328d46, 0xbfd87de2a6aea963, // 0.92388, -0.38268 - 0x3fed8b9a70ef9cb4, 0xbfd89518fbff098e, // 0.92329, -0.3841 - 0x3fed86c48445a450, 0xbfd8ac4b86d5ed44, // 0.9227, -0.38552 - 0x3fed81ea09f38b63, 0xbfd8c37a439f884f, // 0.92211, -0.38693 - 0x3fed7d0b02b8ecf9, 0xbfd8daa52ec8a4af, // 0.92151, -0.38835 - 0x3fed78276f5617c6, 0xbfd8f1cc44bea329, // 0.92092, -0.38976 - 0x3fed733f508c0dff, 0xbfd908ef81ef7bd1, // 0.92032, -0.39117 - 0x3fed6e52a71c8547, 0xbfd9200ee2c9be97, // 0.91972, -0.39258 - 0x3fed696173c9e68b, 0xbfd9372a63bc93d7, // 0.91911, -0.39399 - 0x3fed646bb7574de5, 0xbfd94e420137bce3, // 0.91851, -0.3954 - 0x3fed5f7172888a7f, 0xbfd96555b7ab948f, // 0.9179, -0.39681 - 0x3fed5a72a6221e73, 0xbfd97c6583890fc2, // 0.91729, -0.39822 - 0x3fed556f52e93eb1, 0xbfd993716141bdfe, // 0.91668, -0.39962 - 0x3fed506779a3d2d9, 0xbfd9aa794d47c9ee, // 0.91606, -0.40103 - 0x3fed4b5b1b187524, 0xbfd9c17d440df9f2, // 0.91545, -0.40243 - 0x3fed464a380e7242, 0xbfd9d87d4207b0ab, // 0.91483, -0.40384 - 0x3fed4134d14dc93a, 0xbfd9ef7943a8ed8a, // 0.91421, -0.40524 - 0x3fed3c1ae79f2b4e, 0xbfda067145664d57, // 0.91359, -0.40664 - 0x3fed36fc7bcbfbdc, 0xbfda1d6543b50ac0, // 0.91296, -0.40804 - 0x3fed31d98e9e503a, 0xbfda34553b0afee5, // 0.91234, -0.40944 - 0x3fed2cb220e0ef9f, 0xbfda4b4127dea1e4, // 0.91171, -0.41084 - 0x3fed2786335f52fc, 0xbfda622906a70b63, // 0.91107, -0.41224 - 0x3fed2255c6e5a4e1, 0xbfda790cd3dbf31a, // 0.91044, -0.41364 - 0x3fed1d20dc40c15c, 0xbfda8fec8bf5b166, // 0.90981, -0.41503 - 0x3fed17e7743e35dc, 0xbfdaa6c82b6d3fc9, // 0.90917, -0.41643 - 0x3fed12a98fac410c, 0xbfdabd9faebc3980, // 0.90853, -0.41782 - 0x3fed0d672f59d2b9, 0xbfdad473125cdc08, // 0.90789, -0.41922 - 0x3fed082054168bac, 0xbfdaeb4252ca07ab, // 0.90724, -0.42061 - 0x3fed02d4feb2bd92, 0xbfdb020d6c7f4009, // 0.9066, -0.422 - 0x3fecfd852fff6ad4, 0xbfdb18d45bf8aca6, // 0.90595, -0.42339 - 0x3fecf830e8ce467b, 0xbfdb2f971db31972, // 0.9053, -0.42478 - 0x3fecf2d829f1b40e, 0xbfdb4655ae2bf757, // 0.90464, -0.42617 - 0x3feced7af43cc773, 0xbfdb5d1009e15cc0, // 0.90399, -0.42756 - 0x3fece819488344ce, 0xbfdb73c62d520624, // 0.90333, -0.42894 - 0x3fece2b32799a060, 0xbfdb8a7814fd5693, // 0.90267, -0.43033 - 0x3fecdd489254fe65, 0xbfdba125bd63583e, // 0.90201, -0.43171 - 0x3fecd7d9898b32f6, 0xbfdbb7cf2304bd01, // 0.90135, -0.43309 - 0x3fecd2660e12c1e6, 0xbfdbce744262deee, // 0.90068, -0.43448 - 0x3fecccee20c2de9f, 0xbfdbe51517ffc0d9, // 0.90002, -0.43586 - 0x3fecc771c2736c09, 0xbfdbfbb1a05e0edc, // 0.89935, -0.43724 - 0x3fecc1f0f3fcfc5c, 0xbfdc1249d8011ee7, // 0.89867, -0.43862 - 0x3fecbc6bb638d10b, 0xbfdc28ddbb6cf145, // 0.898, -0.43999 - 0x3fecb6e20a00da99, 0xbfdc3f6d47263129, // 0.89732, -0.44137 - 0x3fecb153f02fb87d, 0xbfdc55f877b23537, // 0.89665, -0.44275 - 0x3fecabc169a0b901, 0xbfdc6c7f4997000a, // 0.89597, -0.44412 - 0x3feca62a772fd919, 0xbfdc8301b95b40c2, // 0.89528, -0.4455 - 0x3feca08f19b9c449, 0xbfdc997fc3865388, // 0.8946, -0.44687 - 0x3fec9aef521bd480, 0xbfdcaff964a0421d, // 0.89391, -0.44824 - 0x3fec954b213411f5, 0xbfdcc66e9931c45d, // 0.89322, -0.44961 - 0x3fec8fa287e13305, 0xbfdcdcdf5dc440ce, // 0.89253, -0.45098 - 0x3fec89f587029c13, 0xbfdcf34baee1cd21, // 0.89184, -0.45235 - 0x3fec84441f785f61, 0xbfdd09b389152ec1, // 0.89115, -0.45372 - 0x3fec7e8e52233cf3, 0xbfdd2016e8e9db5b, // 0.89045, -0.45508 - 0x3fec78d41fe4a267, 0xbfdd3675caebf962, // 0.88975, -0.45645 - 0x3fec7315899eaad7, 0xbfdd4cd02ba8609c, // 0.88905, -0.45781 - 0x3fec6d5290341eb2, 0xbfdd632607ac9aa9, // 0.88835, -0.45918 - 0x3fec678b3488739b, 0xbfdd79775b86e389, // 0.88764, -0.46054 - 0x3fec61bf777fcc48, 0xbfdd8fc423c62a25, // 0.88693, -0.4619 - 0x3fec5bef59fef85a, 0xbfdda60c5cfa10d8, // 0.88622, -0.46326 - 0x3fec561adceb743e, 0xbfddbc5003b2edf8, // 0.88551, -0.46462 - 0x3fec5042012b6907, 0xbfddd28f1481cc58, // 0.8848, -0.46598 - 0x3fec4a64c7a5ac4c, 0xbfdde8c98bf86bd6, // 0.88408, -0.46733 - 0x3fec44833141c004, 0xbfddfeff66a941de, // 0.88336, -0.46869 - 0x3fec3e9d3ee7d262, 0xbfde1530a12779f4, // 0.88264, -0.47004 - 0x3fec38b2f180bdb1, 0xbfde2b5d3806f63b, // 0.88192, -0.4714 - 0x3fec32c449f60831, 0xbfde418527dc4ffa, // 0.8812, -0.47275 - 0x3fec2cd14931e3f1, 0xbfde57a86d3cd824, // 0.88047, -0.4741 - 0x3fec26d9f01f2eaf, 0xbfde6dc704be97e2, // 0.87974, -0.47545 - 0x3fec20de3fa971b0, 0xbfde83e0eaf85113, // 0.87901, -0.4768 - 0x3fec1ade38bce19b, 0xbfde99f61c817eda, // 0.87828, -0.47815 - 0x3fec14d9dc465e58, 0xbfdeb00695f25620, // 0.87755, -0.47949 - 0x3fec0ed12b3372e9, 0xbfdec61253e3c61b, // 0.87681, -0.48084 - 0x3fec08c426725549, 0xbfdedc1952ef78d5, // 0.87607, -0.48218 - 0x3fec02b2cef1e641, 0xbfdef21b8fafd3b5, // 0.87533, -0.48353 - 0x3febfc9d25a1b147, 0xbfdf081906bff7fd, // 0.87459, -0.48487 - 0x3febf6832b71ec5b, 0xbfdf1e11b4bbc35c, // 0.87384, -0.48621 - 0x3febf064e15377dd, 0xbfdf3405963fd068, // 0.87309, -0.48755 - 0x3febea424837de6d, 0xbfdf49f4a7e97729, // 0.87235, -0.48889 - 0x3febe41b611154c1, 0xbfdf5fdee656cda3, // 0.8716, -0.49023 - 0x3febddf02cd2b983, 0xbfdf75c44e26a852, // 0.87084, -0.49156 - 0x3febd7c0ac6f952a, 0xbfdf8ba4dbf89aba, // 0.87009, -0.4929 - 0x3febd18ce0dc19d6, 0xbfdfa1808c6cf7e0, // 0.86933, -0.49423 - 0x3febcb54cb0d2327, 0xbfdfb7575c24d2de, // 0.86857, -0.49557 - 0x3febc5186bf8361d, 0xbfdfcd2947c1ff57, // 0.86781, -0.4969 - 0x3febbed7c49380ea, 0xbfdfe2f64be7120f, // 0.86705, -0.49823 - 0x3febb892d5d5dad5, 0xbfdff8be6537615e, // 0.86628, -0.49956 - 0x3febb249a0b6c40d, 0xbfe00740c82b82e0, // 0.86551, -0.50089 - 0x3febabfc262e6586, 0xbfe0121fe4f56d2c, // 0.86474, -0.50221 - 0x3feba5aa673590d2, 0xbfe01cfc874c3eb7, // 0.86397, -0.50354 - 0x3feb9f5464c5bffc, 0xbfe027d6ad83287e, // 0.8632, -0.50486 - 0x3feb98fa1fd9155e, 0xbfe032ae55edbd95, // 0.86242, -0.50619 - 0x3feb929b996a5b7f, 0xbfe03d837edff370, // 0.86165, -0.50751 - 0x3feb8c38d27504e9, 0xbfe0485626ae221a, // 0.86087, -0.50883 - 0x3feb85d1cbf52c02, 0xbfe053264bad0483, // 0.86009, -0.51015 - 0x3feb7f6686e792ea, 0xbfe05df3ec31b8b6, // 0.8593, -0.51147 - 0x3feb78f70449a34b, 0xbfe068bf0691c028, // 0.85852, -0.51279 - 0x3feb728345196e3e, 0xbfe073879922ffed, // 0.85773, -0.5141 - 0x3feb6c0b4a55ac17, 0xbfe07e4da23bc102, // 0.85694, -0.51542 - 0x3feb658f14fdbc47, 0xbfe089112032b08c, // 0.85615, -0.51673 - 0x3feb5f0ea611a532, 0xbfe093d2115ee018, // 0.85535, -0.51804 - 0x3feb5889fe921405, 0xbfe09e907417c5e1, // 0.85456, -0.51936 - 0x3feb52011f805c92, 0xbfe0a94c46b53d0b, // 0.85376, -0.52067 - 0x3feb4b7409de7925, 0xbfe0b405878f85ec, // 0.85296, -0.52198 - 0x3feb44e2beaf0a61, 0xbfe0bebc34ff4646, // 0.85216, -0.52328 - 0x3feb3e4d3ef55712, 0xbfe0c9704d5d898f, // 0.85136, -0.52459 - 0x3feb37b38bb54c09, 0xbfe0d421cf03c12b, // 0.85055, -0.5259 - 0x3feb3115a5f37bf4, 0xbfe0ded0b84bc4b5, // 0.84974, -0.5272 - 0x3feb2a738eb51f33, 0xbfe0e97d078fd23b, // 0.84893, -0.5285 - 0x3feb23cd470013b4, 0xbfe0f426bb2a8e7d, // 0.84812, -0.5298 - 0x3feb1d22cfdadcc6, 0xbfe0fecdd1770537, // 0.84731, -0.5311 - 0x3feb16742a4ca2f5, 0xbfe1097248d0a956, // 0.84649, -0.5324 - 0x3feb0fc1575d33db, 0xbfe114141f935545, // 0.84567, -0.5337 - 0x3feb090a58150200, 0xbfe11eb3541b4b22, // 0.84485, -0.535 - 0x3feb024f2d7d24a9, 0xbfe1294fe4c5350a, // 0.84403, -0.53629 - 0x3feafb8fd89f57b6, 0xbfe133e9cfee254e, // 0.84321, -0.53759 - 0x3feaf4cc5a85fb73, 0xbfe13e8113f396c1, // 0.84238, -0.53888 - 0x3feaee04b43c1474, 0xbfe14915af336ceb, // 0.84155, -0.54017 - 0x3feae738e6cd4b67, 0xbfe153a7a00bf453, // 0.84073, -0.54146 - 0x3feae068f345ecef, 0xbfe15e36e4dbe2bc, // 0.83989, -0.54275 - 0x3fead994dab2e979, 0xbfe168c37c025764, // 0.83906, -0.54404 - 0x3fead2bc9e21d511, 0xbfe1734d63dedb49, // 0.83822, -0.54532 - 0x3feacbe03ea0e73b, 0xbfe17dd49ad16161, // 0.83739, -0.54661 - 0x3feac4ffbd3efac8, 0xbfe188591f3a46e5, // 0.83655, -0.54789 - 0x3feabe1b1b0b8dac, 0xbfe192daef7a5386, // 0.83571, -0.54918 - 0x3feab7325916c0d4, 0xbfe19d5a09f2b9b8, // 0.83486, -0.55046 - 0x3feab045787157ff, 0xbfe1a7d66d0516e6, // 0.83402, -0.55174 - 0x3feaa9547a2cb98e, 0xbfe1b250171373be, // 0.83317, -0.55302 - 0x3feaa25f5f5aee60, 0xbfe1bcc706804467, // 0.83232, -0.55429 - 0x3fea9b66290ea1a3, 0xbfe1c73b39ae68c8, // 0.83147, -0.55557 - 0x3fea9468d85b20ae, 0xbfe1d1acaf012cc2, // 0.83062, -0.55685 - 0x3fea8d676e545ad2, 0xbfe1dc1b64dc4872, // 0.82976, -0.55812 - 0x3fea8661ec0ee133, 0xbfe1e68759a3e074, // 0.8289, -0.55939 - 0x3fea7f58529fe69d, 0xbfe1f0f08bbc861b, // 0.82805, -0.56066 - 0x3fea784aa31d3f55, 0xbfe1fb56f98b37b8, // 0.82718, -0.56193 - 0x3fea7138de9d60f5, 0xbfe205baa17560d6, // 0.82632, -0.5632 - 0x3fea6a230637623b, 0xbfe2101b81e0da78, // 0.82546, -0.56447 - 0x3fea63091b02fae2, 0xbfe21a799933eb58, // 0.82459, -0.56573 - 0x3fea5beb1e188375, 0xbfe224d4e5d5482e, // 0.82372, -0.567 - 0x3fea54c91090f524, 0xbfe22f2d662c13e1, // 0.82285, -0.56826 - 0x3fea4da2f385e997, 0xbfe23983189fdfd5, // 0.82198, -0.56952 - 0x3fea4678c8119ac8, 0xbfe243d5fb98ac1f, // 0.8211, -0.57078 - 0x3fea3f4a8f4ee2d2, 0xbfe24e260d7ee7c9, // 0.82023, -0.57204 - 0x3fea38184a593bc6, 0xbfe258734cbb7110, // 0.81935, -0.5733 - 0x3fea30e1fa4cbf81, 0xbfe262bdb7b795a2, // 0.81847, -0.57455 - 0x3fea29a7a0462782, 0xbfe26d054cdd12df, // 0.81758, -0.57581 - 0x3fea22693d62ccb9, 0xbfe2774a0a961612, // 0.8167, -0.57706 - 0x3fea1b26d2c0a75e, 0xbfe2818bef4d3cba, // 0.81581, -0.57831 - 0x3fea13e0617e4ec7, 0xbfe28bcaf96d94ba, // 0.81493, -0.57956 - 0x3fea0c95eabaf937, 0xbfe2960727629ca8, // 0.81404, -0.58081 - 0x3fea05476f967bb5, 0xbfe2a040779843fb, // 0.81314, -0.58206 - 0x3fe9fdf4f13149de, 0xbfe2aa76e87aeb58, // 0.81225, -0.58331 - 0x3fe9f69e70ac75bc, 0xbfe2b4aa787764c4, // 0.81135, -0.58455 - 0x3fe9ef43ef29af94, 0xbfe2bedb25faf3ea, // 0.81046, -0.5858 - 0x3fe9e7e56dcb45bd, 0xbfe2c908ef734e57, // 0.80956, -0.58704 - 0x3fe9e082edb42472, 0xbfe2d333d34e9bb7, // 0.80866, -0.58828 - 0x3fe9d91c7007d5a6, 0xbfe2dd5bcffb7616, // 0.80775, -0.58952 - 0x3fe9d1b1f5ea80d6, 0xbfe2e780e3e8ea16, // 0.80685, -0.59076 - 0x3fe9ca438080eadb, 0xbfe2f1a30d86773a, // 0.80594, -0.592 - 0x3fe9c2d110f075c3, 0xbfe2fbc24b441015, // 0.80503, -0.59323 - 0x3fe9bb5aa85f2098, 0xbfe305de9b921a94, // 0.80412, -0.59447 - 0x3fe9b3e047f38741, 0xbfe30ff7fce17035, // 0.80321, -0.5957 - 0x3fe9ac61f0d4e247, 0xbfe31a0e6da35e44, // 0.80229, -0.59693 - 0x3fe9a4dfa42b06b2, 0xbfe32421ec49a620, // 0.80138, -0.59816 - 0x3fe99d59631e65d5, 0xbfe32e3277467d6b, // 0.80046, -0.59939 - 0x3fe995cf2ed80d22, 0xbfe338400d0c8e57, // 0.79954, -0.60062 - 0x3fe98e410881a600, 0xbfe3424aac0ef7d6, // 0.79861, -0.60184 - 0x3fe986aef1457594, 0xbfe34c5252c14de1, // 0.79769, -0.60307 - 0x3fe97f18ea4e5c9e, 0xbfe35656ff9799ae, // 0.79676, -0.60429 - 0x3fe9777ef4c7d742, 0xbfe36058b10659f3, // 0.79584, -0.60551 - 0x3fe96fe111ddfce0, 0xbfe36a576582831b, // 0.79491, -0.60673 - 0x3fe9683f42bd7fe1, 0xbfe374531b817f8d, // 0.79398, -0.60795 - 0x3fe960998893ad8c, 0xbfe37e4bd1792fe2, // 0.79304, -0.60917 - 0x3fe958efe48e6dd7, 0xbfe3884185dfeb22, // 0.79211, -0.61038 - 0x3fe9514257dc4335, 0xbfe39234372c7f04, // 0.79117, -0.6116 - 0x3fe94990e3ac4a6c, 0xbfe39c23e3d63029, // 0.79023, -0.61281 - 0x3fe941db892e3a65, 0xbfe3a6108a54ba58, // 0.78929, -0.61402 - 0x3fe93a22499263fc, 0xbfe3affa292050b9, // 0.78835, -0.61523 - 0x3fe932652609b1cf, 0xbfe3b9e0beb19e18, // 0.7874, -0.61644 - 0x3fe92aa41fc5a815, 0xbfe3c3c44981c517, // 0.78646, -0.61765 - 0x3fe922df37f8646a, 0xbfe3cda4c80a6076, // 0.78551, -0.61885 - 0x3fe91b166fd49da2, 0xbfe3d78238c58343, // 0.78456, -0.62006 - 0x3fe91349c88da398, 0xbfe3e15c9a2db922, // 0.7836, -0.62126 - 0x3fe90b7943575efe, 0xbfe3eb33eabe0680, // 0.78265, -0.62246 - 0x3fe903a4e1665133, 0xbfe3f50828f1e8d2, // 0.78169, -0.62366 - 0x3fe8fbcca3ef940d, 0xbfe3fed9534556d4, // 0.78074, -0.62486 - 0x3fe8f3f08c28d9ac, 0xbfe408a76834c0c0, // 0.77978, -0.62606 - 0x3fe8ec109b486c49, 0xbfe41272663d108c, // 0.77882, -0.62725 - 0x3fe8e42cd2852e0a, 0xbfe41c3a4bdbaa26, // 0.77785, -0.62845 - 0x3fe8dc45331698cc, 0xbfe425ff178e6bb1, // 0.77689, -0.62964 - 0x3fe8d459be34bdfa, 0xbfe42fc0c7d3adbb, // 0.77592, -0.63083 - 0x3fe8cc6a75184655, 0xbfe4397f5b2a4380, // 0.77495, -0.63202 - 0x3fe8c47758fa71cb, 0xbfe4433ad0117b1d, // 0.77398, -0.63321 - 0x3fe8bc806b151741, 0xbfe44cf325091dd6, // 0.77301, -0.63439 - 0x3fe8b485aca2a468, 0xbfe456a858917046, // 0.77204, -0.63558 - 0x3fe8ac871ede1d88, 0xbfe4605a692b32a2, // 0.77106, -0.63676 - 0x3fe8a484c3031d50, 0xbfe46a095557a0f1, // 0.77008, -0.63794 - 0x3fe89c7e9a4dd4ab, 0xbfe473b51b987347, // 0.7691, -0.63912 - 0x3fe89474a5fb0a84, 0xbfe47d5dba6fde01, // 0.76812, -0.6403 - 0x3fe88c66e7481ba1, 0xbfe48703306091fe, // 0.76714, -0.64148 - 0x3fe884555f72fa6b, 0xbfe490a57bedbcdf, // 0.76615, -0.64266 - 0x3fe87c400fba2ebf, 0xbfe49a449b9b0938, // 0.76517, -0.64383 - 0x3fe87426f95cd5bd, 0xbfe4a3e08dec9ed6, // 0.76418, -0.645 - 0x3fe86c0a1d9aa195, 0xbfe4ad79516722f0, // 0.76319, -0.64618 - 0x3fe863e97db3d95a, 0xbfe4b70ee48fb869, // 0.7622, -0.64735 - 0x3fe85bc51ae958cc, 0xbfe4c0a145ec0004, // 0.7612, -0.64851 - 0x3fe8539cf67c9029, 0xbfe4ca30740218a3, // 0.76021, -0.64968 - 0x3fe84b7111af83f9, 0xbfe4d3bc6d589f80, // 0.75921, -0.65085 - 0x3fe843416dc4cce2, 0xbfe4dd453076b064, // 0.75821, -0.65201 - 0x3fe83b0e0bff976e, 0xbfe4e6cabbe3e5e9, // 0.75721, -0.65317 - 0x3fe832d6eda3a3e0, 0xbfe4f04d0e2859aa, // 0.75621, -0.65433 - 0x3fe82a9c13f545ff, 0xbfe4f9cc25cca486, // 0.7552, -0.65549 - 0x3fe8225d803964e5, 0xbfe503480159ded2, // 0.75419, -0.65665 - 0x3fe81a1b33b57acc, 0xbfe50cc09f59a09b, // 0.75319, -0.65781 - 0x3fe811d52faf94dc, 0xbfe51635fe5601d7, // 0.75218, -0.65896 - 0x3fe8098b756e52fa, 0xbfe51fa81cd99aa6, // 0.75117, -0.66011 - 0x3fe8013e0638e795, 0xbfe52916f96f8388, // 0.75015, -0.66127 - 0x3fe7f8ece3571771, 0xbfe5328292a35596, // 0.74914, -0.66242 - 0x3fe7f0980e113978, 0xbfe53beae7012abe, // 0.74812, -0.66356 - 0x3fe7e83f87b03686, 0xbfe5454ff5159dfb, // 0.7471, -0.66471 - 0x3fe7dfe3517d8937, 0xbfe54eb1bb6dcb8f, // 0.74608, -0.66586 - 0x3fe7d7836cc33db2, 0xbfe5581038975137, // 0.74506, -0.667 - 0x3fe7cf1fdacbf179, 0xbfe5616b6b204e6e, // 0.74403, -0.66814 - 0x3fe7c6b89ce2d333, 0xbfe56ac35197649e, // 0.74301, -0.66928 - 0x3fe7be4db453a27c, 0xbfe57417ea8bb75c, // 0.74198, -0.67042 - 0x3fe7b5df226aafb0, 0xbfe57d69348cec9f, // 0.74095, -0.67156 - 0x3fe7ad6ce874dbb6, 0xbfe586b72e2b2cfd, // 0.73992, -0.67269 - 0x3fe7a4f707bf97d2, 0xbfe59001d5f723df, // 0.73889, -0.67383 - 0x3fe79c7d8198e56e, 0xbfe599492a81ffbc, // 0.73785, -0.67496 - 0x3fe79400574f55e4, 0xbfe5a28d2a5d7250, // 0.73682, -0.67609 - 0x3fe78b7f8a320a52, 0xbfe5abcdd41bb0d8, // 0.73578, -0.67722 - 0x3fe782fb1b90b35b, 0xbfe5b50b264f7448, // 0.73474, -0.67835 - 0x3fe77a730cbb9100, 0xbfe5be451f8bf980, // 0.7337, -0.67948 - 0x3fe771e75f037261, 0xbfe5c77bbe65018c, // 0.73265, -0.6806 - 0x3fe7695813b9b594, 0xbfe5d0af016ed1d4, // 0.73161, -0.68172 - 0x3fe760c52c304764, 0xbfe5d9dee73e345c, // 0.73056, -0.68285 - 0x3fe7582ea9b9a329, 0xbfe5e30b6e6877f3, // 0.72951, -0.68397 - 0x3fe74f948da8d28d, 0xbfe5ec3495837074, // 0.72846, -0.68508 - 0x3fe746f6d9516d59, 0xbfe5f55a5b2576f8, // 0.72741, -0.6862 - 0x3fe73e558e079942, 0xbfe5fe7cbde56a0f, // 0.72636, -0.68732 - 0x3fe735b0ad2009b2, 0xbfe6079bbc5aadfa, // 0.7253, -0.68843 - 0x3fe72d0837efff97, 0xbfe610b7551d2cde, // 0.72425, -0.68954 - 0x3fe7245c2fcd492a, 0xbfe619cf86c55702, // 0.72319, -0.69065 - 0x3fe71bac960e41bf, 0xbfe622e44fec22ff, // 0.72213, -0.69176 - 0x3fe712f96c09d18d, 0xbfe62bf5af2b0dfd, // 0.72107, -0.69287 - 0x3fe70a42b3176d7a, 0xbfe63503a31c1be8, // 0.72, -0.69397 - 0x3fe701886c8f16e6, 0xbfe63e0e2a59d7aa, // 0.71894, -0.69508 - 0x3fe6f8ca99c95b75, 0xbfe64715437f535b, // 0.71787, -0.69618 - 0x3fe6f0093c1f54de, 0xbfe65018ed28287f, // 0.7168, -0.69728 - 0x3fe6e74454eaa8ae, 0xbfe6591925f0783e, // 0.71573, -0.69838 - 0x3fe6de7be585881d, 0xbfe66215ec74eb91, // 0.71466, -0.69947 - 0x3fe6d5afef4aafcc, 0xbfe66b0f3f52b386, // 0.71358, -0.70057 - 0x3fe6cce07395679f, 0xbfe674051d27896c, // 0.71251, -0.70166 - 0x3fe6c40d73c18275, 0xbfe67cf78491af10, // 0.71143, -0.70275 - 0x3fe6bb36f12b5e06, 0xbfe685e6742feeef, // 0.71035, -0.70385 - 0x3fe6b25ced2fe29c, 0xbfe68ed1eaa19c71, // 0.70927, -0.70493 - 0x3fe6a97f692c82ea, 0xbfe697b9e686941c, // 0.70819, -0.70602 - 0x3fe6a09e667f3bcc, 0xbfe6a09e667f3bcc, // 0.70711, -0.70711 - 0x3fe697b9e686941c, 0xbfe6a97f692c82ea, // 0.70602, -0.70819 - 0x3fe68ed1eaa19c71, 0xbfe6b25ced2fe29c, // 0.70493, -0.70927 - 0x3fe685e6742feeef, 0xbfe6bb36f12b5e06, // 0.70385, -0.71035 - 0x3fe67cf78491af10, 0xbfe6c40d73c18275, // 0.70275, -0.71143 - 0x3fe674051d27896c, 0xbfe6cce07395679f, // 0.70166, -0.71251 - 0x3fe66b0f3f52b386, 0xbfe6d5afef4aafcc, // 0.70057, -0.71358 - 0x3fe66215ec74eb91, 0xbfe6de7be585881d, // 0.69947, -0.71466 - 0x3fe6591925f0783e, 0xbfe6e74454eaa8ae, // 0.69838, -0.71573 - 0x3fe65018ed28287f, 0xbfe6f0093c1f54de, // 0.69728, -0.7168 - 0x3fe64715437f535b, 0xbfe6f8ca99c95b75, // 0.69618, -0.71787 - 0x3fe63e0e2a59d7aa, 0xbfe701886c8f16e6, // 0.69508, -0.71894 - 0x3fe63503a31c1be8, 0xbfe70a42b3176d7a, // 0.69397, -0.72 - 0x3fe62bf5af2b0dfd, 0xbfe712f96c09d18d, // 0.69287, -0.72107 - 0x3fe622e44fec22ff, 0xbfe71bac960e41bf, // 0.69176, -0.72213 - 0x3fe619cf86c55702, 0xbfe7245c2fcd492a, // 0.69065, -0.72319 - 0x3fe610b7551d2cde, 0xbfe72d0837efff97, // 0.68954, -0.72425 - 0x3fe6079bbc5aadfa, 0xbfe735b0ad2009b2, // 0.68843, -0.7253 - 0x3fe5fe7cbde56a0f, 0xbfe73e558e079942, // 0.68732, -0.72636 - 0x3fe5f55a5b2576f8, 0xbfe746f6d9516d59, // 0.6862, -0.72741 - 0x3fe5ec3495837074, 0xbfe74f948da8d28d, // 0.68508, -0.72846 - 0x3fe5e30b6e6877f3, 0xbfe7582ea9b9a329, // 0.68397, -0.72951 - 0x3fe5d9dee73e345c, 0xbfe760c52c304764, // 0.68285, -0.73056 - 0x3fe5d0af016ed1d4, 0xbfe7695813b9b594, // 0.68172, -0.73161 - 0x3fe5c77bbe65018c, 0xbfe771e75f037261, // 0.6806, -0.73265 - 0x3fe5be451f8bf980, 0xbfe77a730cbb9100, // 0.67948, -0.7337 - 0x3fe5b50b264f7448, 0xbfe782fb1b90b35b, // 0.67835, -0.73474 - 0x3fe5abcdd41bb0d8, 0xbfe78b7f8a320a52, // 0.67722, -0.73578 - 0x3fe5a28d2a5d7250, 0xbfe79400574f55e4, // 0.67609, -0.73682 - 0x3fe599492a81ffbc, 0xbfe79c7d8198e56e, // 0.67496, -0.73785 - 0x3fe59001d5f723df, 0xbfe7a4f707bf97d2, // 0.67383, -0.73889 - 0x3fe586b72e2b2cfd, 0xbfe7ad6ce874dbb6, // 0.67269, -0.73992 - 0x3fe57d69348cec9f, 0xbfe7b5df226aafb0, // 0.67156, -0.74095 - 0x3fe57417ea8bb75c, 0xbfe7be4db453a27c, // 0.67042, -0.74198 - 0x3fe56ac35197649e, 0xbfe7c6b89ce2d333, // 0.66928, -0.74301 - 0x3fe5616b6b204e6e, 0xbfe7cf1fdacbf179, // 0.66814, -0.74403 - 0x3fe5581038975137, 0xbfe7d7836cc33db2, // 0.667, -0.74506 - 0x3fe54eb1bb6dcb8f, 0xbfe7dfe3517d8937, // 0.66586, -0.74608 - 0x3fe5454ff5159dfb, 0xbfe7e83f87b03686, // 0.66471, -0.7471 - 0x3fe53beae7012abe, 0xbfe7f0980e113978, // 0.66356, -0.74812 - 0x3fe5328292a35596, 0xbfe7f8ece3571771, // 0.66242, -0.74914 - 0x3fe52916f96f8388, 0xbfe8013e0638e795, // 0.66127, -0.75015 - 0x3fe51fa81cd99aa6, 0xbfe8098b756e52fa, // 0.66011, -0.75117 - 0x3fe51635fe5601d7, 0xbfe811d52faf94dc, // 0.65896, -0.75218 - 0x3fe50cc09f59a09b, 0xbfe81a1b33b57acc, // 0.65781, -0.75319 - 0x3fe503480159ded2, 0xbfe8225d803964e5, // 0.65665, -0.75419 - 0x3fe4f9cc25cca486, 0xbfe82a9c13f545ff, // 0.65549, -0.7552 - 0x3fe4f04d0e2859aa, 0xbfe832d6eda3a3e0, // 0.65433, -0.75621 - 0x3fe4e6cabbe3e5e9, 0xbfe83b0e0bff976e, // 0.65317, -0.75721 - 0x3fe4dd453076b064, 0xbfe843416dc4cce2, // 0.65201, -0.75821 - 0x3fe4d3bc6d589f80, 0xbfe84b7111af83f9, // 0.65085, -0.75921 - 0x3fe4ca30740218a3, 0xbfe8539cf67c9029, // 0.64968, -0.76021 - 0x3fe4c0a145ec0004, 0xbfe85bc51ae958cc, // 0.64851, -0.7612 - 0x3fe4b70ee48fb869, 0xbfe863e97db3d95a, // 0.64735, -0.7622 - 0x3fe4ad79516722f0, 0xbfe86c0a1d9aa195, // 0.64618, -0.76319 - 0x3fe4a3e08dec9ed6, 0xbfe87426f95cd5bd, // 0.645, -0.76418 - 0x3fe49a449b9b0938, 0xbfe87c400fba2ebf, // 0.64383, -0.76517 - 0x3fe490a57bedbcdf, 0xbfe884555f72fa6b, // 0.64266, -0.76615 - 0x3fe48703306091fe, 0xbfe88c66e7481ba1, // 0.64148, -0.76714 - 0x3fe47d5dba6fde01, 0xbfe89474a5fb0a84, // 0.6403, -0.76812 - 0x3fe473b51b987347, 0xbfe89c7e9a4dd4ab, // 0.63912, -0.7691 - 0x3fe46a095557a0f1, 0xbfe8a484c3031d50, // 0.63794, -0.77008 - 0x3fe4605a692b32a2, 0xbfe8ac871ede1d88, // 0.63676, -0.77106 - 0x3fe456a858917046, 0xbfe8b485aca2a468, // 0.63558, -0.77204 - 0x3fe44cf325091dd6, 0xbfe8bc806b151741, // 0.63439, -0.77301 - 0x3fe4433ad0117b1d, 0xbfe8c47758fa71cb, // 0.63321, -0.77398 - 0x3fe4397f5b2a4380, 0xbfe8cc6a75184655, // 0.63202, -0.77495 - 0x3fe42fc0c7d3adbb, 0xbfe8d459be34bdfa, // 0.63083, -0.77592 - 0x3fe425ff178e6bb1, 0xbfe8dc45331698cc, // 0.62964, -0.77689 - 0x3fe41c3a4bdbaa26, 0xbfe8e42cd2852e0a, // 0.62845, -0.77785 - 0x3fe41272663d108c, 0xbfe8ec109b486c49, // 0.62725, -0.77882 - 0x3fe408a76834c0c0, 0xbfe8f3f08c28d9ac, // 0.62606, -0.77978 - 0x3fe3fed9534556d4, 0xbfe8fbcca3ef940d, // 0.62486, -0.78074 - 0x3fe3f50828f1e8d2, 0xbfe903a4e1665133, // 0.62366, -0.78169 - 0x3fe3eb33eabe0680, 0xbfe90b7943575efe, // 0.62246, -0.78265 - 0x3fe3e15c9a2db922, 0xbfe91349c88da398, // 0.62126, -0.7836 - 0x3fe3d78238c58343, 0xbfe91b166fd49da2, // 0.62006, -0.78456 - 0x3fe3cda4c80a6076, 0xbfe922df37f8646a, // 0.61885, -0.78551 - 0x3fe3c3c44981c517, 0xbfe92aa41fc5a815, // 0.61765, -0.78646 - 0x3fe3b9e0beb19e18, 0xbfe932652609b1cf, // 0.61644, -0.7874 - 0x3fe3affa292050b9, 0xbfe93a22499263fc, // 0.61523, -0.78835 - 0x3fe3a6108a54ba58, 0xbfe941db892e3a65, // 0.61402, -0.78929 - 0x3fe39c23e3d63029, 0xbfe94990e3ac4a6c, // 0.61281, -0.79023 - 0x3fe39234372c7f04, 0xbfe9514257dc4335, // 0.6116, -0.79117 - 0x3fe3884185dfeb22, 0xbfe958efe48e6dd7, // 0.61038, -0.79211 - 0x3fe37e4bd1792fe2, 0xbfe960998893ad8c, // 0.60917, -0.79304 - 0x3fe374531b817f8d, 0xbfe9683f42bd7fe1, // 0.60795, -0.79398 - 0x3fe36a576582831b, 0xbfe96fe111ddfce0, // 0.60673, -0.79491 - 0x3fe36058b10659f3, 0xbfe9777ef4c7d742, // 0.60551, -0.79584 - 0x3fe35656ff9799ae, 0xbfe97f18ea4e5c9e, // 0.60429, -0.79676 - 0x3fe34c5252c14de1, 0xbfe986aef1457594, // 0.60307, -0.79769 - 0x3fe3424aac0ef7d6, 0xbfe98e410881a600, // 0.60184, -0.79861 - 0x3fe338400d0c8e57, 0xbfe995cf2ed80d22, // 0.60062, -0.79954 - 0x3fe32e3277467d6b, 0xbfe99d59631e65d5, // 0.59939, -0.80046 - 0x3fe32421ec49a620, 0xbfe9a4dfa42b06b2, // 0.59816, -0.80138 - 0x3fe31a0e6da35e44, 0xbfe9ac61f0d4e247, // 0.59693, -0.80229 - 0x3fe30ff7fce17035, 0xbfe9b3e047f38741, // 0.5957, -0.80321 - 0x3fe305de9b921a94, 0xbfe9bb5aa85f2098, // 0.59447, -0.80412 - 0x3fe2fbc24b441015, 0xbfe9c2d110f075c3, // 0.59323, -0.80503 - 0x3fe2f1a30d86773a, 0xbfe9ca438080eadb, // 0.592, -0.80594 - 0x3fe2e780e3e8ea16, 0xbfe9d1b1f5ea80d6, // 0.59076, -0.80685 - 0x3fe2dd5bcffb7616, 0xbfe9d91c7007d5a6, // 0.58952, -0.80775 - 0x3fe2d333d34e9bb7, 0xbfe9e082edb42472, // 0.58828, -0.80866 - 0x3fe2c908ef734e57, 0xbfe9e7e56dcb45bd, // 0.58704, -0.80956 - 0x3fe2bedb25faf3ea, 0xbfe9ef43ef29af94, // 0.5858, -0.81046 - 0x3fe2b4aa787764c4, 0xbfe9f69e70ac75bc, // 0.58455, -0.81135 - 0x3fe2aa76e87aeb58, 0xbfe9fdf4f13149de, // 0.58331, -0.81225 - 0x3fe2a040779843fb, 0xbfea05476f967bb5, // 0.58206, -0.81314 - 0x3fe2960727629ca8, 0xbfea0c95eabaf937, // 0.58081, -0.81404 - 0x3fe28bcaf96d94ba, 0xbfea13e0617e4ec7, // 0.57956, -0.81493 - 0x3fe2818bef4d3cba, 0xbfea1b26d2c0a75e, // 0.57831, -0.81581 - 0x3fe2774a0a961612, 0xbfea22693d62ccb9, // 0.57706, -0.8167 - 0x3fe26d054cdd12df, 0xbfea29a7a0462782, // 0.57581, -0.81758 - 0x3fe262bdb7b795a2, 0xbfea30e1fa4cbf81, // 0.57455, -0.81847 - 0x3fe258734cbb7110, 0xbfea38184a593bc6, // 0.5733, -0.81935 - 0x3fe24e260d7ee7c9, 0xbfea3f4a8f4ee2d2, // 0.57204, -0.82023 - 0x3fe243d5fb98ac1f, 0xbfea4678c8119ac8, // 0.57078, -0.8211 - 0x3fe23983189fdfd5, 0xbfea4da2f385e997, // 0.56952, -0.82198 - 0x3fe22f2d662c13e1, 0xbfea54c91090f524, // 0.56826, -0.82285 - 0x3fe224d4e5d5482e, 0xbfea5beb1e188375, // 0.567, -0.82372 - 0x3fe21a799933eb58, 0xbfea63091b02fae2, // 0.56573, -0.82459 - 0x3fe2101b81e0da78, 0xbfea6a230637623b, // 0.56447, -0.82546 - 0x3fe205baa17560d6, 0xbfea7138de9d60f5, // 0.5632, -0.82632 - 0x3fe1fb56f98b37b8, 0xbfea784aa31d3f55, // 0.56193, -0.82718 - 0x3fe1f0f08bbc861b, 0xbfea7f58529fe69d, // 0.56066, -0.82805 - 0x3fe1e68759a3e074, 0xbfea8661ec0ee133, // 0.55939, -0.8289 - 0x3fe1dc1b64dc4872, 0xbfea8d676e545ad2, // 0.55812, -0.82976 - 0x3fe1d1acaf012cc2, 0xbfea9468d85b20ae, // 0.55685, -0.83062 - 0x3fe1c73b39ae68c8, 0xbfea9b66290ea1a3, // 0.55557, -0.83147 - 0x3fe1bcc706804467, 0xbfeaa25f5f5aee60, // 0.55429, -0.83232 - 0x3fe1b250171373be, 0xbfeaa9547a2cb98e, // 0.55302, -0.83317 - 0x3fe1a7d66d0516e6, 0xbfeab045787157ff, // 0.55174, -0.83402 - 0x3fe19d5a09f2b9b8, 0xbfeab7325916c0d4, // 0.55046, -0.83486 - 0x3fe192daef7a5386, 0xbfeabe1b1b0b8dac, // 0.54918, -0.83571 - 0x3fe188591f3a46e5, 0xbfeac4ffbd3efac8, // 0.54789, -0.83655 - 0x3fe17dd49ad16161, 0xbfeacbe03ea0e73b, // 0.54661, -0.83739 - 0x3fe1734d63dedb49, 0xbfead2bc9e21d511, // 0.54532, -0.83822 - 0x3fe168c37c025764, 0xbfead994dab2e979, // 0.54404, -0.83906 - 0x3fe15e36e4dbe2bc, 0xbfeae068f345ecef, // 0.54275, -0.83989 - 0x3fe153a7a00bf453, 0xbfeae738e6cd4b67, // 0.54146, -0.84073 - 0x3fe14915af336ceb, 0xbfeaee04b43c1474, // 0.54017, -0.84155 - 0x3fe13e8113f396c1, 0xbfeaf4cc5a85fb73, // 0.53888, -0.84238 - 0x3fe133e9cfee254e, 0xbfeafb8fd89f57b6, // 0.53759, -0.84321 - 0x3fe1294fe4c5350a, 0xbfeb024f2d7d24a9, // 0.53629, -0.84403 - 0x3fe11eb3541b4b22, 0xbfeb090a58150200, // 0.535, -0.84485 - 0x3fe114141f935545, 0xbfeb0fc1575d33db, // 0.5337, -0.84567 - 0x3fe1097248d0a956, 0xbfeb16742a4ca2f5, // 0.5324, -0.84649 - 0x3fe0fecdd1770537, 0xbfeb1d22cfdadcc6, // 0.5311, -0.84731 - 0x3fe0f426bb2a8e7d, 0xbfeb23cd470013b4, // 0.5298, -0.84812 - 0x3fe0e97d078fd23b, 0xbfeb2a738eb51f33, // 0.5285, -0.84893 - 0x3fe0ded0b84bc4b5, 0xbfeb3115a5f37bf4, // 0.5272, -0.84974 - 0x3fe0d421cf03c12b, 0xbfeb37b38bb54c09, // 0.5259, -0.85055 - 0x3fe0c9704d5d898f, 0xbfeb3e4d3ef55712, // 0.52459, -0.85136 - 0x3fe0bebc34ff4646, 0xbfeb44e2beaf0a61, // 0.52328, -0.85216 - 0x3fe0b405878f85ec, 0xbfeb4b7409de7925, // 0.52198, -0.85296 - 0x3fe0a94c46b53d0b, 0xbfeb52011f805c92, // 0.52067, -0.85376 - 0x3fe09e907417c5e1, 0xbfeb5889fe921405, // 0.51936, -0.85456 - 0x3fe093d2115ee018, 0xbfeb5f0ea611a532, // 0.51804, -0.85535 - 0x3fe089112032b08c, 0xbfeb658f14fdbc47, // 0.51673, -0.85615 - 0x3fe07e4da23bc102, 0xbfeb6c0b4a55ac17, // 0.51542, -0.85694 - 0x3fe073879922ffed, 0xbfeb728345196e3e, // 0.5141, -0.85773 - 0x3fe068bf0691c028, 0xbfeb78f70449a34b, // 0.51279, -0.85852 - 0x3fe05df3ec31b8b6, 0xbfeb7f6686e792ea, // 0.51147, -0.8593 - 0x3fe053264bad0483, 0xbfeb85d1cbf52c02, // 0.51015, -0.86009 - 0x3fe0485626ae221a, 0xbfeb8c38d27504e9, // 0.50883, -0.86087 - 0x3fe03d837edff370, 0xbfeb929b996a5b7f, // 0.50751, -0.86165 - 0x3fe032ae55edbd95, 0xbfeb98fa1fd9155e, // 0.50619, -0.86242 - 0x3fe027d6ad83287e, 0xbfeb9f5464c5bffc, // 0.50486, -0.8632 - 0x3fe01cfc874c3eb7, 0xbfeba5aa673590d2, // 0.50354, -0.86397 - 0x3fe0121fe4f56d2c, 0xbfebabfc262e6586, // 0.50221, -0.86474 - 0x3fe00740c82b82e0, 0xbfebb249a0b6c40d, // 0.50089, -0.86551 - 0x3fdff8be6537615e, 0xbfebb892d5d5dad5, // 0.49956, -0.86628 - 0x3fdfe2f64be7120f, 0xbfebbed7c49380ea, // 0.49823, -0.86705 - 0x3fdfcd2947c1ff57, 0xbfebc5186bf8361d, // 0.4969, -0.86781 - 0x3fdfb7575c24d2de, 0xbfebcb54cb0d2327, // 0.49557, -0.86857 - 0x3fdfa1808c6cf7e0, 0xbfebd18ce0dc19d6, // 0.49423, -0.86933 - 0x3fdf8ba4dbf89aba, 0xbfebd7c0ac6f952a, // 0.4929, -0.87009 - 0x3fdf75c44e26a852, 0xbfebddf02cd2b983, // 0.49156, -0.87084 - 0x3fdf5fdee656cda3, 0xbfebe41b611154c1, // 0.49023, -0.8716 - 0x3fdf49f4a7e97729, 0xbfebea424837de6d, // 0.48889, -0.87235 - 0x3fdf3405963fd068, 0xbfebf064e15377dd, // 0.48755, -0.87309 - 0x3fdf1e11b4bbc35c, 0xbfebf6832b71ec5b, // 0.48621, -0.87384 - 0x3fdf081906bff7fd, 0xbfebfc9d25a1b147, // 0.48487, -0.87459 - 0x3fdef21b8fafd3b5, 0xbfec02b2cef1e641, // 0.48353, -0.87533 - 0x3fdedc1952ef78d5, 0xbfec08c426725549, // 0.48218, -0.87607 - 0x3fdec61253e3c61b, 0xbfec0ed12b3372e9, // 0.48084, -0.87681 - 0x3fdeb00695f25620, 0xbfec14d9dc465e58, // 0.47949, -0.87755 - 0x3fde99f61c817eda, 0xbfec1ade38bce19b, // 0.47815, -0.87828 - 0x3fde83e0eaf85113, 0xbfec20de3fa971b0, // 0.4768, -0.87901 - 0x3fde6dc704be97e2, 0xbfec26d9f01f2eaf, // 0.47545, -0.87974 - 0x3fde57a86d3cd824, 0xbfec2cd14931e3f1, // 0.4741, -0.88047 - 0x3fde418527dc4ffa, 0xbfec32c449f60831, // 0.47275, -0.8812 - 0x3fde2b5d3806f63b, 0xbfec38b2f180bdb1, // 0.4714, -0.88192 - 0x3fde1530a12779f4, 0xbfec3e9d3ee7d262, // 0.47004, -0.88264 - 0x3fddfeff66a941de, 0xbfec44833141c004, // 0.46869, -0.88336 - 0x3fdde8c98bf86bd6, 0xbfec4a64c7a5ac4c, // 0.46733, -0.88408 - 0x3fddd28f1481cc58, 0xbfec5042012b6907, // 0.46598, -0.8848 - 0x3fddbc5003b2edf8, 0xbfec561adceb743e, // 0.46462, -0.88551 - 0x3fdda60c5cfa10d8, 0xbfec5bef59fef85a, // 0.46326, -0.88622 - 0x3fdd8fc423c62a25, 0xbfec61bf777fcc48, // 0.4619, -0.88693 - 0x3fdd79775b86e389, 0xbfec678b3488739b, // 0.46054, -0.88764 - 0x3fdd632607ac9aa9, 0xbfec6d5290341eb2, // 0.45918, -0.88835 - 0x3fdd4cd02ba8609c, 0xbfec7315899eaad7, // 0.45781, -0.88905 - 0x3fdd3675caebf962, 0xbfec78d41fe4a267, // 0.45645, -0.88975 - 0x3fdd2016e8e9db5b, 0xbfec7e8e52233cf3, // 0.45508, -0.89045 - 0x3fdd09b389152ec1, 0xbfec84441f785f61, // 0.45372, -0.89115 - 0x3fdcf34baee1cd21, 0xbfec89f587029c13, // 0.45235, -0.89184 - 0x3fdcdcdf5dc440ce, 0xbfec8fa287e13305, // 0.45098, -0.89253 - 0x3fdcc66e9931c45d, 0xbfec954b213411f5, // 0.44961, -0.89322 - 0x3fdcaff964a0421d, 0xbfec9aef521bd480, // 0.44824, -0.89391 - 0x3fdc997fc3865388, 0xbfeca08f19b9c449, // 0.44687, -0.8946 - 0x3fdc8301b95b40c2, 0xbfeca62a772fd919, // 0.4455, -0.89528 - 0x3fdc6c7f4997000a, 0xbfecabc169a0b901, // 0.44412, -0.89597 - 0x3fdc55f877b23537, 0xbfecb153f02fb87d, // 0.44275, -0.89665 - 0x3fdc3f6d47263129, 0xbfecb6e20a00da99, // 0.44137, -0.89732 - 0x3fdc28ddbb6cf145, 0xbfecbc6bb638d10b, // 0.43999, -0.898 - 0x3fdc1249d8011ee7, 0xbfecc1f0f3fcfc5c, // 0.43862, -0.89867 - 0x3fdbfbb1a05e0edc, 0xbfecc771c2736c09, // 0.43724, -0.89935 - 0x3fdbe51517ffc0d9, 0xbfecccee20c2de9f, // 0.43586, -0.90002 - 0x3fdbce744262deee, 0xbfecd2660e12c1e6, // 0.43448, -0.90068 - 0x3fdbb7cf2304bd01, 0xbfecd7d9898b32f6, // 0.43309, -0.90135 - 0x3fdba125bd63583e, 0xbfecdd489254fe65, // 0.43171, -0.90201 - 0x3fdb8a7814fd5693, 0xbfece2b32799a060, // 0.43033, -0.90267 - 0x3fdb73c62d520624, 0xbfece819488344ce, // 0.42894, -0.90333 - 0x3fdb5d1009e15cc0, 0xbfeced7af43cc773, // 0.42756, -0.90399 - 0x3fdb4655ae2bf757, 0xbfecf2d829f1b40e, // 0.42617, -0.90464 - 0x3fdb2f971db31972, 0xbfecf830e8ce467b, // 0.42478, -0.9053 - 0x3fdb18d45bf8aca6, 0xbfecfd852fff6ad4, // 0.42339, -0.90595 - 0x3fdb020d6c7f4009, 0xbfed02d4feb2bd92, // 0.422, -0.9066 - 0x3fdaeb4252ca07ab, 0xbfed082054168bac, // 0.42061, -0.90724 - 0x3fdad473125cdc08, 0xbfed0d672f59d2b9, // 0.41922, -0.90789 - 0x3fdabd9faebc3980, 0xbfed12a98fac410c, // 0.41782, -0.90853 - 0x3fdaa6c82b6d3fc9, 0xbfed17e7743e35dc, // 0.41643, -0.90917 - 0x3fda8fec8bf5b166, 0xbfed1d20dc40c15c, // 0.41503, -0.90981 - 0x3fda790cd3dbf31a, 0xbfed2255c6e5a4e1, // 0.41364, -0.91044 - 0x3fda622906a70b63, 0xbfed2786335f52fc, // 0.41224, -0.91107 - 0x3fda4b4127dea1e4, 0xbfed2cb220e0ef9f, // 0.41084, -0.91171 - 0x3fda34553b0afee5, 0xbfed31d98e9e503a, // 0.40944, -0.91234 - 0x3fda1d6543b50ac0, 0xbfed36fc7bcbfbdc, // 0.40804, -0.91296 - 0x3fda067145664d57, 0xbfed3c1ae79f2b4e, // 0.40664, -0.91359 - 0x3fd9ef7943a8ed8a, 0xbfed4134d14dc93a, // 0.40524, -0.91421 - 0x3fd9d87d4207b0ab, 0xbfed464a380e7242, // 0.40384, -0.91483 - 0x3fd9c17d440df9f2, 0xbfed4b5b1b187524, // 0.40243, -0.91545 - 0x3fd9aa794d47c9ee, 0xbfed506779a3d2d9, // 0.40103, -0.91606 - 0x3fd993716141bdfe, 0xbfed556f52e93eb1, // 0.39962, -0.91668 - 0x3fd97c6583890fc2, 0xbfed5a72a6221e73, // 0.39822, -0.91729 - 0x3fd96555b7ab948f, 0xbfed5f7172888a7f, // 0.39681, -0.9179 - 0x3fd94e420137bce3, 0xbfed646bb7574de5, // 0.3954, -0.91851 - 0x3fd9372a63bc93d7, 0xbfed696173c9e68b, // 0.39399, -0.91911 - 0x3fd9200ee2c9be97, 0xbfed6e52a71c8547, // 0.39258, -0.91972 - 0x3fd908ef81ef7bd1, 0xbfed733f508c0dff, // 0.39117, -0.92032 - 0x3fd8f1cc44bea329, 0xbfed78276f5617c6, // 0.38976, -0.92092 - 0x3fd8daa52ec8a4af, 0xbfed7d0b02b8ecf9, // 0.38835, -0.92151 - 0x3fd8c37a439f884f, 0xbfed81ea09f38b63, // 0.38693, -0.92211 - 0x3fd8ac4b86d5ed44, 0xbfed86c48445a450, // 0.38552, -0.9227 - 0x3fd89518fbff098e, 0xbfed8b9a70ef9cb4, // 0.3841, -0.92329 - 0x3fd87de2a6aea963, 0xbfed906bcf328d46, // 0.38268, -0.92388 - 0x3fd866a88a792ea0, 0xbfed95389e50429b, // 0.38127, -0.92447 - 0x3fd84f6aaaf3903f, 0xbfed9a00dd8b3d46, // 0.37985, -0.92505 - 0x3fd838290bb359c8, 0xbfed9ec48c26b1f3, // 0.37843, -0.92563 - 0x3fd820e3b04eaac4, 0xbfeda383a9668988, // 0.37701, -0.92621 - 0x3fd8099a9c5c362d, 0xbfeda83e348f613b, // 0.37559, -0.92679 - 0x3fd7f24dd37341e3, 0xbfedacf42ce68ab9, // 0.37416, -0.92736 - 0x3fd7dafd592ba621, 0xbfedb1a591b20c38, // 0.37274, -0.92794 - 0x3fd7c3a9311dcce7, 0xbfedb6526238a09b, // 0.37132, -0.92851 - 0x3fd7ac515ee2b172, 0xbfedbafa9dc1b78d, // 0.36989, -0.92907 - 0x3fd794f5e613dfae, 0xbfedbf9e4395759a, // 0.36847, -0.92964 - 0x3fd77d96ca4b73a6, 0xbfedc43d52fcb453, // 0.36704, -0.93021 - 0x3fd766340f2418f6, 0xbfedc8d7cb410260, // 0.36561, -0.93077 - 0x3fd74ecdb8390a3e, 0xbfedcd6dabaca3a5, // 0.36418, -0.93133 - 0x3fd73763c9261092, 0xbfedd1fef38a915a, // 0.36276, -0.93188 - 0x3fd71ff6458782ec, 0xbfedd68ba2267a25, // 0.36133, -0.93244 - 0x3fd7088530fa459e, 0xbfeddb13b6ccc23d, // 0.3599, -0.93299 - 0x3fd6f1108f1bc9c5, 0xbfeddf9730ca837b, // 0.35846, -0.93354 - 0x3fd6d998638a0cb5, 0xbfede4160f6d8d81, // 0.35703, -0.93409 - 0x3fd6c21cb1e39771, 0xbfede890520465ce, // 0.3556, -0.93464 - 0x3fd6aa9d7dc77e16, 0xbfeded05f7de47da, // 0.35416, -0.93518 - 0x3fd6931acad55f51, 0xbfedf177004b2534, // 0.35273, -0.93573 - 0x3fd67b949cad63ca, 0xbfedf5e36a9ba59c, // 0.35129, -0.93627 - 0x3fd6640af6f03d9e, 0xbfedfa4b3621271d, // 0.34986, -0.9368 - 0x3fd64c7ddd3f27c6, 0xbfedfeae622dbe2b, // 0.34842, -0.93734 - 0x3fd634ed533be58e, 0xbfee030cee1435b8, // 0.34698, -0.93787 - 0x3fd61d595c88c203, 0xbfee0766d9280f54, // 0.34554, -0.9384 - 0x3fd605c1fcc88f63, 0xbfee0bbc22bd8349, // 0.3441, -0.93893 - 0x3fd5ee27379ea693, 0xbfee100cca2980ac, // 0.34266, -0.93946 - 0x3fd5d68910aee686, 0xbfee1458cec1ad83, // 0.34122, -0.93998 - 0x3fd5bee78b9db3b6, 0xbfee18a02fdc66d9, // 0.33978, -0.94051 - 0x3fd5a742ac0ff78d, 0xbfee1ce2ecd0c0d8, // 0.33833, -0.94103 - 0x3fd58f9a75ab1fdd, 0xbfee212104f686e5, // 0.33689, -0.94154 - 0x3fd577eeec151e47, 0xbfee255a77a63bb8, // 0.33545, -0.94206 - 0x3fd5604012f467b4, 0xbfee298f4439197a, // 0.334, -0.94257 - 0x3fd5488dedeff3be, 0xbfee2dbf6a0911d9, // 0.33255, -0.94308 - 0x3fd530d880af3c24, 0xbfee31eae870ce25, // 0.33111, -0.94359 - 0x3fd5191fceda3c35, 0xbfee3611becbaf69, // 0.32966, -0.9441 - 0x3fd50163dc197047, 0xbfee3a33ec75ce85, // 0.32821, -0.9446 - 0x3fd4e9a4ac15d520, 0xbfee3e5170cbfc46, // 0.32676, -0.94511 - 0x3fd4d1e24278e76a, 0xbfee426a4b2bc17e, // 0.32531, -0.94561 - 0x3fd4ba1ca2eca31c, 0xbfee467e7af35f23, // 0.32386, -0.94611 - 0x3fd4a253d11b82f3, 0xbfee4a8dff81ce5e, // 0.32241, -0.9466 - 0x3fd48a87d0b07fd7, 0xbfee4e98d836c0af, // 0.32096, -0.94709 - 0x3fd472b8a5571054, 0xbfee529f04729ffc, // 0.3195, -0.94759 - 0x3fd45ae652bb2800, 0xbfee56a083968eb1, // 0.31805, -0.94807 - 0x3fd44310dc8936f0, 0xbfee5a9d550467d3, // 0.31659, -0.94856 - 0x3fd42b38466e2928, 0xbfee5e95781ebf1c, // 0.31514, -0.94905 - 0x3fd4135c94176602, 0xbfee6288ec48e112, // 0.31368, -0.94953 - 0x3fd3fb7dc932cfa4, 0xbfee6677b0e6d31e, // 0.31222, -0.95001 - 0x3fd3e39be96ec271, 0xbfee6a61c55d53a7, // 0.31077, -0.95049 - 0x3fd3cbb6f87a146e, 0xbfee6e472911da27, // 0.30931, -0.95096 - 0x3fd3b3cefa0414b7, 0xbfee7227db6a9744, // 0.30785, -0.95144 - 0x3fd39be3f1bc8aef, 0xbfee7603dbce74e9, // 0.30639, -0.95191 - 0x3fd383f5e353b6aa, 0xbfee79db29a5165a, // 0.30493, -0.95238 - 0x3fd36c04d27a4edf, 0xbfee7dadc456d850, // 0.30347, -0.95284 - 0x3fd35410c2e18152, 0xbfee817bab4cd10d, // 0.30201, -0.95331 - 0x3fd33c19b83af207, 0xbfee8544ddf0d075, // 0.30054, -0.95377 - 0x3fd3241fb638baaf, 0xbfee89095bad6025, // 0.29908, -0.95423 - 0x3fd30c22c08d6a13, 0xbfee8cc923edc388, // 0.29762, -0.95469 - 0x3fd2f422daec0386, 0xbfee9084361df7f3, // 0.29615, -0.95514 - 0x3fd2dc200907fe51, 0xbfee943a91aab4b4, // 0.29469, -0.95559 - 0x3fd2c41a4e954520, 0xbfee97ec36016b30, // 0.29322, -0.95605 - 0x3fd2ac11af483572, 0xbfee9b99229046f8, // 0.29175, -0.95649 - 0x3fd294062ed59f05, 0xbfee9f4156c62dda, // 0.29028, -0.95694 - 0x3fd27bf7d0f2c346, 0xbfeea2e4d212c000, // 0.28882, -0.95738 - 0x3fd263e6995554ba, 0xbfeea68393e65800, // 0.28735, -0.95783 - 0x3fd24bd28bb37672, 0xbfeeaa1d9bb20af3, // 0.28588, -0.95827 - 0x3fd233bbabc3bb72, 0xbfeeadb2e8e7a88e, // 0.28441, -0.9587 - 0x3fd21ba1fd3d2623, 0xbfeeb1437af9bb34, // 0.28294, -0.95914 - 0x3fd2038583d727bd, 0xbfeeb4cf515b8811, // 0.28146, -0.95957 - 0x3fd1eb6643499fbb, 0xbfeeb8566b810f2a, // 0.27999, -0.96 - 0x3fd1d3443f4cdb3d, 0xbfeebbd8c8df0b74, // 0.27852, -0.96043 - 0x3fd1bb1f7b999480, 0xbfeebf5668eaf2ef, // 0.27705, -0.96086 - 0x3fd1a2f7fbe8f243, 0xbfeec2cf4b1af6b2, // 0.27557, -0.96128 - 0x3fd18acdc3f4873a, 0xbfeec6436ee60309, // 0.2741, -0.9617 - 0x3fd172a0d7765177, 0xbfeec9b2d3c3bf84, // 0.27262, -0.96212 - 0x3fd15a713a28b9d9, 0xbfeecd1d792c8f10, // 0.27115, -0.96254 - 0x3fd1423eefc69378, 0xbfeed0835e999009, // 0.26967, -0.96295 - 0x3fd12a09fc0b1b12, 0xbfeed3e483849c51, // 0.26819, -0.96337 - 0x3fd111d262b1f677, 0xbfeed740e7684963, // 0.26671, -0.96378 - 0x3fd0f998277733f7, 0xbfeeda9889bfe86a, // 0.26523, -0.96418 - 0x3fd0e15b4e1749cd, 0xbfeeddeb6a078651, // 0.26375, -0.96459 - 0x3fd0c91bda4f158d, 0xbfeee13987bbebdc, // 0.26227, -0.96499 - 0x3fd0b0d9cfdbdb90, 0xbfeee482e25a9dbc, // 0.26079, -0.96539 - 0x3fd09895327b465e, 0xbfeee7c77961dc9e, // 0.25931, -0.96579 - 0x3fd0804e05eb661e, 0xbfeeeb074c50a544, // 0.25783, -0.96619 - 0x3fd068044deab002, 0xbfeeee425aa6b09a, // 0.25635, -0.96658 - 0x3fd04fb80e37fdae, 0xbfeef178a3e473c2, // 0.25487, -0.96698 - 0x3fd037694a928cac, 0xbfeef4aa278b2032, // 0.25338, -0.96737 - 0x3fd01f1806b9fdd2, 0xbfeef7d6e51ca3c0, // 0.2519, -0.96775 - 0x3fd006c4466e54af, 0xbfeefafedc1ba8b7, // 0.25041, -0.96814 - 0x3fcfdcdc1adfedf8, 0xbfeefe220c0b95ec, // 0.24893, -0.96852 - 0x3fcfac2abeff57ff, 0xbfef014074708ed3, // 0.24744, -0.9689 - 0x3fcf7b7480bd3801, 0xbfef045a14cf738c, // 0.24596, -0.96928 - 0x3fcf4ab9679c9f5c, 0xbfef076eecade0fa, // 0.24447, -0.96966 - 0x3fcf19f97b215f1a, 0xbfef0a7efb9230d7, // 0.24298, -0.97003 - 0x3fcee934c2d006c7, 0xbfef0d8a410379c5, // 0.24149, -0.9704 - 0x3fceb86b462de348, 0xbfef1090bc898f5f, // 0.24, -0.97077 - 0x3fce879d0cc0fdaf, 0xbfef13926dad024e, // 0.23851, -0.97114 - 0x3fce56ca1e101a1b, 0xbfef168f53f7205d, // 0.23702, -0.9715 - 0x3fce25f281a2b684, 0xbfef19876ef1f486, // 0.23553, -0.97187 - 0x3fcdf5163f01099a, 0xbfef1c7abe284708, // 0.23404, -0.97223 - 0x3fcdc4355db40195, 0xbfef1f6941259d7a, // 0.23255, -0.97258 - 0x3fcd934fe5454311, 0xbfef2252f7763ada, // 0.23106, -0.97294 - 0x3fcd6265dd3f27e3, 0xbfef2537e0a71f9f, // 0.22957, -0.97329 - 0x3fcd31774d2cbdee, 0xbfef2817fc4609ce, // 0.22807, -0.97364 - 0x3fcd00843c99c5f9, 0xbfef2af349e17507, // 0.22658, -0.97399 - 0x3fcccf8cb312b286, 0xbfef2dc9c9089a9d, // 0.22508, -0.97434 - 0x3fcc9e90b824a6a9, 0xbfef309b794b719f, // 0.22359, -0.97468 - 0x3fcc6d90535d74dc, 0xbfef33685a3aaef0, // 0.22209, -0.97503 - 0x3fcc3c8b8c4b9dd7, 0xbfef36306b67c556, // 0.2206, -0.97536 - 0x3fcc0b826a7e4f63, 0xbfef38f3ac64e589, // 0.2191, -0.9757 - 0x3fcbda74f5856330, 0xbfef3bb21cc4fe47, // 0.2176, -0.97604 - 0x3fcba96334f15dad, 0xbfef3e6bbc1bbc65, // 0.21611, -0.97637 - 0x3fcb784d30536cda, 0xbfef412089fd8adc, // 0.21461, -0.9767 - 0x3fcb4732ef3d6722, 0xbfef43d085ff92dd, // 0.21311, -0.97703 - 0x3fcb16147941ca2a, 0xbfef467bafb7bbe0, // 0.21161, -0.97735 - 0x3fcae4f1d5f3b9ab, 0xbfef492206bcabb4, // 0.21011, -0.97768 - 0x3fcab3cb0ce6fe44, 0xbfef4bc38aa5c694, // 0.20861, -0.978 - 0x3fca82a025b00451, 0xbfef4e603b0b2f2d, // 0.20711, -0.97832 - 0x3fca517127e3dabc, 0xbfef50f81785c6b9, // 0.20561, -0.97863 - 0x3fca203e1b1831da, 0xbfef538b1faf2d07, // 0.20411, -0.97895 - 0x3fc9ef0706e35a35, 0xbfef56195321c090, // 0.20261, -0.97926 - 0x3fc9bdcbf2dc4366, 0xbfef58a2b1789e84, // 0.2011, -0.97957 - 0x3fc98c8ce69a7aec, 0xbfef5b273a4fa2d9, // 0.1996, -0.97988 - 0x3fc95b49e9b62af9, 0xbfef5da6ed43685d, // 0.1981, -0.98018 - 0x3fc92a0303c8194f, 0xbfef6021c9f148c2, // 0.19659, -0.98048 - 0x3fc8f8b83c69a60a, 0xbfef6297cff75cb0, // 0.19509, -0.98079 - 0x3fc8c7699b34ca7e, 0xbfef6508fef47bd5, // 0.19359, -0.98108 - 0x3fc8961727c41804, 0xbfef677556883cee, // 0.19208, -0.98138 - 0x3fc864c0e9b2b6cf, 0xbfef69dcd652f5de, // 0.19057, -0.98167 - 0x3fc83366e89c64c5, 0xbfef6c3f7df5bbb7, // 0.18907, -0.98196 - 0x3fc802092c1d744b, 0xbfef6e9d4d1262ca, // 0.18756, -0.98225 - 0x3fc7d0a7bbd2cb1b, 0xbfef70f6434b7eb7, // 0.18606, -0.98254 - 0x3fc79f429f59e11d, 0xbfef734a60446279, // 0.18455, -0.98282 - 0x3fc76dd9de50bf31, 0xbfef7599a3a12077, // 0.18304, -0.98311 - 0x3fc73c6d8055fe0a, 0xbfef77e40d068a90, // 0.18153, -0.98339 - 0x3fc70afd8d08c4ff, 0xbfef7a299c1a322a, // 0.18002, -0.98366 - 0x3fc6d98a0c08c8da, 0xbfef7c6a50826840, // 0.17851, -0.98394 - 0x3fc6a81304f64ab2, 0xbfef7ea629e63d6e, // 0.177, -0.98421 - 0x3fc676987f7216b8, 0xbfef80dd27ed8204, // 0.17549, -0.98448 - 0x3fc6451a831d830d, 0xbfef830f4a40c60c, // 0.17398, -0.98475 - 0x3fc61399179a6e94, 0xbfef853c9089595e, // 0.17247, -0.98501 - 0x3fc5e214448b3fc6, 0xbfef8764fa714ba9, // 0.17096, -0.98528 - 0x3fc5b08c1192e381, 0xbfef898887a36c84, // 0.16945, -0.98554 - 0x3fc57f008654cbde, 0xbfef8ba737cb4b78, // 0.16794, -0.9858 - 0x3fc54d71aa74ef02, 0xbfef8dc10a95380d, // 0.16643, -0.98605 - 0x3fc51bdf8597c5f2, 0xbfef8fd5ffae41db, // 0.16491, -0.98631 - 0x3fc4ea4a1f624b61, 0xbfef91e616c43891, // 0.1634, -0.98656 - 0x3fc4b8b17f79fa88, 0xbfef93f14f85ac08, // 0.16189, -0.98681 - 0x3fc48715ad84cdf5, 0xbfef95f7a9a1ec47, // 0.16037, -0.98706 - 0x3fc45576b1293e5a, 0xbfef97f924c9099b, // 0.15886, -0.9873 - 0x3fc423d4920e4166, 0xbfef99f5c0abd496, // 0.15734, -0.98754 - 0x3fc3f22f57db4893, 0xbfef9bed7cfbde29, // 0.15583, -0.98778 - 0x3fc3c0870a383ff6, 0xbfef9de0596b77a3, // 0.15431, -0.98802 - 0x3fc38edbb0cd8d14, 0xbfef9fce55adb2c8, // 0.1528, -0.98826 - 0x3fc35d2d53440db2, 0xbfefa1b7717661d5, // 0.15128, -0.98849 - 0x3fc32b7bf94516a7, 0xbfefa39bac7a1791, // 0.14976, -0.98872 - 0x3fc2f9c7aa7a72af, 0xbfefa57b066e2754, // 0.14825, -0.98895 - 0x3fc2c8106e8e613a, 0xbfefa7557f08a517, // 0.14673, -0.98918 - 0x3fc296564d2b953e, 0xbfefa92b1600657c, // 0.14521, -0.9894 - 0x3fc264994dfd340a, 0xbfefaafbcb0cfddc, // 0.1437, -0.98962 - 0x3fc232d978aed413, 0xbfefacc79de6c44f, // 0.14218, -0.98984 - 0x3fc20116d4ec7bce, 0xbfefae8e8e46cfbb, // 0.14066, -0.99006 - 0x3fc1cf516a62a077, 0xbfefb0509be6f7db, // 0.13914, -0.99027 - 0x3fc19d8940be24e7, 0xbfefb20dc681d54d, // 0.13762, -0.99049 - 0x3fc16bbe5fac5865, 0xbfefb3c60dd2c199, // 0.1361, -0.9907 - 0x3fc139f0cedaf576, 0xbfefb5797195d741, // 0.13458, -0.9909 - 0x3fc1082095f820b0, 0xbfefb727f187f1c7, // 0.13306, -0.99111 - 0x3fc0d64dbcb26786, 0xbfefb8d18d66adb7, // 0.13154, -0.99131 - 0x3fc0a4784ab8bf1d, 0xbfefba7644f068b5, // 0.13002, -0.99151 - 0x3fc072a047ba831d, 0xbfefbc1617e44186, // 0.1285, -0.99171 - 0x3fc040c5bb67747e, 0xbfefbdb106021816, // 0.12698, -0.99191 - 0x3fc00ee8ad6fb85b, 0xbfefbf470f0a8d88, // 0.12545, -0.9921 - 0x3fbfba124b07ad85, 0xbfefc0d832bf043a, // 0.12393, -0.99229 - 0x3fbf564e56a9730e, 0xbfefc26470e19fd3, // 0.12241, -0.99248 - 0x3fbef2858d27561b, 0xbfefc3ebc935454c, // 0.12089, -0.99267 - 0x3fbe8eb7fde4aa3e, 0xbfefc56e3b7d9af6, // 0.11937, -0.99285 - 0x3fbe2ae5b8457f77, 0xbfefc6ebc77f0887, // 0.11784, -0.99303 - 0x3fbdc70ecbae9fc8, 0xbfefc8646cfeb721, // 0.11632, -0.99321 - 0x3fbd633347858ce4, 0xbfefc9d82bc2915e, // 0.11479, -0.99339 - 0x3fbcff533b307dc1, 0xbfefcb4703914354, // 0.11327, -0.99356 - 0x3fbc9b6eb6165c42, 0xbfefccb0f4323aa3, // 0.11175, -0.99374 - 0x3fbc3785c79ec2d5, 0xbfefce15fd6da67b, // 0.11022, -0.99391 - 0x3fbbd3987f31fa0e, 0xbfefcf761f0c77a3, // 0.1087, -0.99407 - 0x3fbb6fa6ec38f64c, 0xbfefd0d158d86087, // 0.10717, -0.99424 - 0x3fbb0bb11e1d5559, 0xbfefd227aa9bd53b, // 0.10565, -0.9944 - 0x3fbaa7b724495c04, 0xbfefd37914220b84, // 0.10412, -0.99456 - 0x3fba43b90e27f3c4, 0xbfefd4c59536fae4, // 0.1026, -0.99472 - 0x3fb9dfb6eb24a85c, 0xbfefd60d2da75c9e, // 0.10107, -0.99488 - 0x3fb97bb0caaba56f, 0xbfefd74fdd40abbf, // 0.099544, -0.99503 - 0x3fb917a6bc29b42c, 0xbfefd88da3d12526, // 0.098017, -0.99518 - 0x3fb8b398cf0c38e0, 0xbfefd9c68127c78c, // 0.09649, -0.99533 - 0x3fb84f8712c130a0, 0xbfefdafa7514538c, // 0.094963, -0.99548 - 0x3fb7eb7196b72ee4, 0xbfefdc297f674ba9, // 0.093436, -0.99563 - 0x3fb787586a5d5b21, 0xbfefdd539ff1f456, // 0.091909, -0.99577 - 0x3fb7233b9d236e71, 0xbfefde78d68653fd, // 0.090381, -0.99591 - 0x3fb6bf1b3e79b129, 0xbfefdf9922f73307, // 0.088854, -0.99604 - 0x3fb65af75dd0f87b, 0xbfefe0b485181be3, // 0.087326, -0.99618 - 0x3fb5f6d00a9aa419, 0xbfefe1cafcbd5b09, // 0.085797, -0.99631 - 0x3fb592a554489bc8, 0xbfefe2dc89bbff08, // 0.084269, -0.99644 - 0x3fb52e774a4d4d0a, 0xbfefe3e92be9d886, // 0.08274, -0.99657 - 0x3fb4ca45fc1ba8b6, 0xbfefe4f0e31d7a4a, // 0.081211, -0.9967 - 0x3fb4661179272096, 0xbfefe5f3af2e3940, // 0.079682, -0.99682 - 0x3fb401d9d0e3a507, 0xbfefe6f18ff42c84, // 0.078153, -0.99694 - 0x3fb39d9f12c5a299, 0xbfefe7ea85482d60, // 0.076624, -0.99706 - 0x3fb339614e41ffa5, 0xbfefe8de8f03d75c, // 0.075094, -0.99718 - 0x3fb2d52092ce19f6, 0xbfefe9cdad01883a, // 0.073565, -0.99729 - 0x3fb270dcefdfc45b, 0xbfefeab7df1c6005, // 0.072035, -0.9974 - 0x3fb20c9674ed444c, 0xbfefeb9d2530410f, // 0.070505, -0.99751 - 0x3fb1a84d316d4f8a, 0xbfefec7d7f19cffc, // 0.068974, -0.99762 - 0x3fb1440134d709b2, 0xbfefed58ecb673c4, // 0.067444, -0.99772 - 0x3fb0dfb28ea201e6, 0xbfefee2f6de455ba, // 0.065913, -0.99783 - 0x3fb07b614e463064, 0xbfefef0102826191, // 0.064383, -0.99793 - 0x3fb0170d833bf421, 0xbfefefcdaa704562, // 0.062852, -0.99802 - 0x3faf656e79f820e0, 0xbfeff095658e71ad, // 0.061321, -0.99812 - 0x3fae9cbd15ff5527, 0xbfeff15833be1965, // 0.05979, -0.99821 - 0x3fadd406f9808ec8, 0xbfeff21614e131ed, // 0.058258, -0.9983 - 0x3fad0b4c436f91d0, 0xbfeff2cf08da7321, // 0.056727, -0.99839 - 0x3fac428d12c0d7e3, 0xbfeff3830f8d575c, // 0.055195, -0.99848 - 0x3fab79c986698b78, 0xbfeff43228de1b77, // 0.053664, -0.99856 - 0x3faab101bd5f8317, 0xbfeff4dc54b1bed3, // 0.052132, -0.99864 - 0x3fa9e835d6993c87, 0xbfeff58192ee0358, // 0.0506, -0.99872 - 0x3fa91f65f10dd814, 0xbfeff621e3796d7e, // 0.049068, -0.9988 - 0x3fa856922bb513c1, 0xbfeff6bd463b444d, // 0.047535, -0.99887 - 0x3fa78dbaa5874685, 0xbfeff753bb1b9164, // 0.046003, -0.99894 - 0x3fa6c4df7d7d5b84, 0xbfeff7e5420320f9, // 0.044471, -0.99901 - 0x3fa5fc00d290cd43, 0xbfeff871dadb81df, // 0.042938, -0.99908 - 0x3fa5331ec3bba0eb, 0xbfeff8f9858f058b, // 0.041406, -0.99914 - 0x3fa46a396ff86179, 0xbfeff97c4208c014, // 0.039873, -0.9992 - 0x3fa3a150f6421afc, 0xbfeff9fa10348837, // 0.03834, -0.99926 - 0x3fa2d865759455cd, 0xbfeffa72effef75d, // 0.036807, -0.99932 - 0x3fa20f770ceb11c6, 0xbfeffae6e1556998, // 0.035274, -0.99938 - 0x3fa14685db42c17e, 0xbfeffb55e425fdae, // 0.033741, -0.99943 - 0x3fa07d91ff984580, 0xbfeffbbff85f9515, // 0.032208, -0.99948 - 0x3f9f693731d1cf01, 0xbfeffc251df1d3f8, // 0.030675, -0.99953 - 0x3f9dd7458c64ab39, 0xbfeffc8554cd213a, // 0.029142, -0.99958 - 0x3f9c454f4ce53b1c, 0xbfeffce09ce2a679, // 0.027608, -0.99962 - 0x3f9ab354b1504fca, 0xbfeffd36f624500c, // 0.026075, -0.99966 - 0x3f992155f7a3667e, 0xbfeffd886084cd0d, // 0.024541, -0.9997 - 0x3f978f535ddc9f03, 0xbfeffdd4dbf78f52, // 0.023008, -0.99974 - 0x3f95fd4d21fab226, 0xbfeffe1c6870cb77, // 0.021474, -0.99977 - 0x3f946b4381fce81c, 0xbfeffe5f05e578db, // 0.01994, -0.9998 - 0x3f92d936bbe30efd, 0xbfeffe9cb44b51a1, // 0.018407, -0.99983 - 0x3f9147270dad7132, 0xbfeffed57398d2b7, // 0.016873, -0.99986 - 0x3f8f6a296ab997ca, 0xbfefff0943c53bd1, // 0.015339, -0.99988 - 0x3f8c45ffe1e48ad9, 0xbfefff3824c88f6f, // 0.013805, -0.9999 - 0x3f8921d1fcdec784, 0xbfefff62169b92db, // 0.012272, -0.99992 - 0x3f85fda037ac05e0, 0xbfefff871937ce2f, // 0.010738, -0.99994 - 0x3f82d96b0e509703, 0xbfefffa72c978c4f, //0.0092038, -0.99996 - 0x3f7f6a65f9a2a3c5, 0xbfefffc250b5daef, //0.0076698, -0.99997 - 0x3f7921f0fe670071, 0xbfefffd8858e8a92, //0.0061359, -0.99998 - 0x3f72d97822f996bc, 0xbfefffe9cb1e2e8d, //0.0046019, -0.99999 - 0x3f6921f8becca4ba, 0xbfeffff621621d02, // 0.003068, -1 - 0x3f5921faaee6472d, 0xbfeffffd88586ee6, // 0.001534, -1 -}; - -#endif - - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32) -/** - @par - Example code for Floating-point RFFT Twiddle factors Generation: - @par -
    TW = exp(pi/2*i-2*pi*i*[0:L/2-1]/L).' 
    - @par - Real and Imag values are in interleaved fashion -*/ -const float32_t twiddleCoef_rfft_32[32] = { - 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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64) -const float32_t twiddleCoef_rfft_64[64] = { - 0.000000000000000f, 1.000000000000000f, - 0.098017140329561f, 0.995184726672197f, - 0.195090322016128f, 0.980785280403230f, - 0.290284677254462f, 0.956940335732209f, - 0.382683432365090f, 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.382683432365090f, - 0.956940335732209f, 0.290284677254462f, - 0.980785280403230f, 0.195090322016128f, - 0.995184726672197f, 0.098017140329561f, - 1.000000000000000f, 0.000000000000000f, - 0.995184726672197f, -0.098017140329561f, - 0.980785280403230f, -0.195090322016128f, - 0.956940335732209f, -0.290284677254462f, - 0.923879532511287f, -0.382683432365090f, - 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.382683432365090f, -0.923879532511287f, - 0.290284677254462f, -0.956940335732209f, - 0.195090322016129f, -0.980785280403230f, - 0.098017140329561f, -0.995184726672197f -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048) -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 -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096) -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 -}; - -#endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALL_TABLES) */ - -/** - @ingroup RealFFT - */ - -/** - @addtogroup RealFFT_Table Real FFT Tables - @{ - */ - -/** - @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));
    -  }
    - */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_F32) -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));
    -  }
    - */ - -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, -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_Q31) -/** - @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)) -*/ -const q31_t realCoefAQ31[8192] = { - (q31_t)0x40000000, (q31_t)0xc0000000, (q31_t)0x3ff36f02, (q31_t)0xc000013c, - (q31_t)0x3fe6de05, (q31_t)0xc00004ef, (q31_t)0x3fda4d09, (q31_t)0xc0000b1a, - (q31_t)0x3fcdbc0f, (q31_t)0xc00013bd, (q31_t)0x3fc12b16, (q31_t)0xc0001ed8, - (q31_t)0x3fb49a1f, (q31_t)0xc0002c6a, (q31_t)0x3fa8092c, (q31_t)0xc0003c74, - (q31_t)0x3f9b783c, (q31_t)0xc0004ef5, (q31_t)0x3f8ee750, (q31_t)0xc00063ee, - (q31_t)0x3f825668, (q31_t)0xc0007b5f, (q31_t)0x3f75c585, (q31_t)0xc0009547, - (q31_t)0x3f6934a8, (q31_t)0xc000b1a7, (q31_t)0x3f5ca3d0, (q31_t)0xc000d07e, - (q31_t)0x3f5012fe, (q31_t)0xc000f1ce, (q31_t)0x3f438234, (q31_t)0xc0011594, - (q31_t)0x3f36f170, (q31_t)0xc0013bd3, (q31_t)0x3f2a60b4, (q31_t)0xc0016489, - (q31_t)0x3f1dd001, (q31_t)0xc0018fb6, (q31_t)0x3f113f56, (q31_t)0xc001bd5c, - (q31_t)0x3f04aeb5, (q31_t)0xc001ed78, (q31_t)0x3ef81e1d, (q31_t)0xc002200d, - (q31_t)0x3eeb8d8f, (q31_t)0xc0025519, (q31_t)0x3edefd0c, (q31_t)0xc0028c9c, - (q31_t)0x3ed26c94, (q31_t)0xc002c697, (q31_t)0x3ec5dc28, (q31_t)0xc003030a, - (q31_t)0x3eb94bc8, (q31_t)0xc00341f4, (q31_t)0x3eacbb74, (q31_t)0xc0038356, - (q31_t)0x3ea02b2e, (q31_t)0xc003c72f, (q31_t)0x3e939af5, (q31_t)0xc0040d80, - (q31_t)0x3e870aca, (q31_t)0xc0045648, (q31_t)0x3e7a7aae, (q31_t)0xc004a188, - (q31_t)0x3e6deaa1, (q31_t)0xc004ef3f, (q31_t)0x3e615aa3, (q31_t)0xc0053f6e, - (q31_t)0x3e54cab5, (q31_t)0xc0059214, (q31_t)0x3e483ad8, (q31_t)0xc005e731, - (q31_t)0x3e3bab0b, (q31_t)0xc0063ec6, (q31_t)0x3e2f1b50, (q31_t)0xc00698d3, - (q31_t)0x3e228ba7, (q31_t)0xc006f556, (q31_t)0x3e15fc11, (q31_t)0xc0075452, - (q31_t)0x3e096c8d, (q31_t)0xc007b5c4, (q31_t)0x3dfcdd1d, (q31_t)0xc00819ae, - (q31_t)0x3df04dc0, (q31_t)0xc008800f, (q31_t)0x3de3be78, (q31_t)0xc008e8e8, - (q31_t)0x3dd72f45, (q31_t)0xc0095438, (q31_t)0x3dcaa027, (q31_t)0xc009c1ff, - (q31_t)0x3dbe111e, (q31_t)0xc00a323d, (q31_t)0x3db1822c, (q31_t)0xc00aa4f3, - (q31_t)0x3da4f351, (q31_t)0xc00b1a20, (q31_t)0x3d98648d, (q31_t)0xc00b91c4, - (q31_t)0x3d8bd5e1, (q31_t)0xc00c0be0, (q31_t)0x3d7f474d, (q31_t)0xc00c8872, - (q31_t)0x3d72b8d2, (q31_t)0xc00d077c, (q31_t)0x3d662a70, (q31_t)0xc00d88fd, - (q31_t)0x3d599c28, (q31_t)0xc00e0cf5, (q31_t)0x3d4d0df9, (q31_t)0xc00e9364, - (q31_t)0x3d407fe6, (q31_t)0xc00f1c4a, (q31_t)0x3d33f1ed, (q31_t)0xc00fa7a8, - (q31_t)0x3d276410, (q31_t)0xc010357c, (q31_t)0x3d1ad650, (q31_t)0xc010c5c7, - (q31_t)0x3d0e48ab, (q31_t)0xc011588a, (q31_t)0x3d01bb24, (q31_t)0xc011edc3, - (q31_t)0x3cf52dbb, (q31_t)0xc0128574, (q31_t)0x3ce8a06f, (q31_t)0xc0131f9b, - (q31_t)0x3cdc1342, (q31_t)0xc013bc39, (q31_t)0x3ccf8634, (q31_t)0xc0145b4e, - (q31_t)0x3cc2f945, (q31_t)0xc014fcda, (q31_t)0x3cb66c77, (q31_t)0xc015a0dd, - (q31_t)0x3ca9dfc8, (q31_t)0xc0164757, (q31_t)0x3c9d533b, (q31_t)0xc016f047, - (q31_t)0x3c90c6cf, (q31_t)0xc0179bae, (q31_t)0x3c843a85, (q31_t)0xc018498c, - (q31_t)0x3c77ae5e, (q31_t)0xc018f9e1, (q31_t)0x3c6b2259, (q31_t)0xc019acac, - (q31_t)0x3c5e9678, (q31_t)0xc01a61ee, (q31_t)0x3c520aba, (q31_t)0xc01b19a7, - (q31_t)0x3c457f21, (q31_t)0xc01bd3d6, (q31_t)0x3c38f3ac, (q31_t)0xc01c907c, - (q31_t)0x3c2c685d, (q31_t)0xc01d4f99, (q31_t)0x3c1fdd34, (q31_t)0xc01e112b, - (q31_t)0x3c135231, (q31_t)0xc01ed535, (q31_t)0x3c06c754, (q31_t)0xc01f9bb5, - (q31_t)0x3bfa3c9f, (q31_t)0xc02064ab, (q31_t)0x3bedb212, (q31_t)0xc0213018, - (q31_t)0x3be127ac, (q31_t)0xc021fdfb, (q31_t)0x3bd49d70, (q31_t)0xc022ce54, - (q31_t)0x3bc8135c, (q31_t)0xc023a124, (q31_t)0x3bbb8973, (q31_t)0xc024766a, - (q31_t)0x3baeffb3, (q31_t)0xc0254e27, (q31_t)0x3ba2761e, (q31_t)0xc0262859, - (q31_t)0x3b95ecb4, (q31_t)0xc0270502, (q31_t)0x3b896375, (q31_t)0xc027e421, - (q31_t)0x3b7cda63, (q31_t)0xc028c5b6, (q31_t)0x3b70517d, (q31_t)0xc029a9c1, - (q31_t)0x3b63c8c4, (q31_t)0xc02a9042, (q31_t)0x3b574039, (q31_t)0xc02b7939, - (q31_t)0x3b4ab7db, (q31_t)0xc02c64a6, (q31_t)0x3b3e2fac, (q31_t)0xc02d5289, - (q31_t)0x3b31a7ac, (q31_t)0xc02e42e2, (q31_t)0x3b251fdc, (q31_t)0xc02f35b1, - (q31_t)0x3b18983b, (q31_t)0xc0302af5, (q31_t)0x3b0c10cb, (q31_t)0xc03122b0, - (q31_t)0x3aff898c, (q31_t)0xc0321ce0, (q31_t)0x3af3027e, (q31_t)0xc0331986, - (q31_t)0x3ae67ba2, (q31_t)0xc03418a2, (q31_t)0x3ad9f4f8, (q31_t)0xc0351a33, - (q31_t)0x3acd6e81, (q31_t)0xc0361e3a, (q31_t)0x3ac0e83d, (q31_t)0xc03724b6, - (q31_t)0x3ab4622d, (q31_t)0xc0382da8, (q31_t)0x3aa7dc52, (q31_t)0xc0393910, - (q31_t)0x3a9b56ab, (q31_t)0xc03a46ed, (q31_t)0x3a8ed139, (q31_t)0xc03b573f, - (q31_t)0x3a824bfd, (q31_t)0xc03c6a07, (q31_t)0x3a75c6f8, (q31_t)0xc03d7f44, - (q31_t)0x3a694229, (q31_t)0xc03e96f6, (q31_t)0x3a5cbd91, (q31_t)0xc03fb11d, - (q31_t)0x3a503930, (q31_t)0xc040cdba, (q31_t)0x3a43b508, (q31_t)0xc041eccc, - (q31_t)0x3a373119, (q31_t)0xc0430e53, (q31_t)0x3a2aad62, (q31_t)0xc044324f, - (q31_t)0x3a1e29e5, (q31_t)0xc04558c0, (q31_t)0x3a11a6a3, (q31_t)0xc04681a6, - (q31_t)0x3a05239a, (q31_t)0xc047ad01, (q31_t)0x39f8a0cd, (q31_t)0xc048dad1, - (q31_t)0x39ec1e3b, (q31_t)0xc04a0b16, (q31_t)0x39df9be6, (q31_t)0xc04b3dcf, - (q31_t)0x39d319cc, (q31_t)0xc04c72fe, (q31_t)0x39c697f0, (q31_t)0xc04daaa1, - (q31_t)0x39ba1651, (q31_t)0xc04ee4b8, (q31_t)0x39ad94f0, (q31_t)0xc0502145, - (q31_t)0x39a113cd, (q31_t)0xc0516045, (q31_t)0x399492ea, (q31_t)0xc052a1bb, - (q31_t)0x39881245, (q31_t)0xc053e5a5, (q31_t)0x397b91e1, (q31_t)0xc0552c03, - (q31_t)0x396f11bc, (q31_t)0xc05674d6, (q31_t)0x396291d9, (q31_t)0xc057c01d, - (q31_t)0x39561237, (q31_t)0xc0590dd8, (q31_t)0x394992d7, (q31_t)0xc05a5e07, - (q31_t)0x393d13b8, (q31_t)0xc05bb0ab, (q31_t)0x393094dd, (q31_t)0xc05d05c3, - (q31_t)0x39241645, (q31_t)0xc05e5d4e, (q31_t)0x391797f0, (q31_t)0xc05fb74e, - (q31_t)0x390b19e0, (q31_t)0xc06113c2, (q31_t)0x38fe9c15, (q31_t)0xc06272aa, - (q31_t)0x38f21e8e, (q31_t)0xc063d405, (q31_t)0x38e5a14d, (q31_t)0xc06537d4, - (q31_t)0x38d92452, (q31_t)0xc0669e18, (q31_t)0x38cca79e, (q31_t)0xc06806ce, - (q31_t)0x38c02b31, (q31_t)0xc06971f9, (q31_t)0x38b3af0c, (q31_t)0xc06adf97, - (q31_t)0x38a7332e, (q31_t)0xc06c4fa8, (q31_t)0x389ab799, (q31_t)0xc06dc22e, - (q31_t)0x388e3c4d, (q31_t)0xc06f3726, (q31_t)0x3881c14b, (q31_t)0xc070ae92, - (q31_t)0x38754692, (q31_t)0xc0722871, (q31_t)0x3868cc24, (q31_t)0xc073a4c3, - (q31_t)0x385c5201, (q31_t)0xc0752389, (q31_t)0x384fd829, (q31_t)0xc076a4c2, - (q31_t)0x38435e9d, (q31_t)0xc078286e, (q31_t)0x3836e55d, (q31_t)0xc079ae8c, - (q31_t)0x382a6c6a, (q31_t)0xc07b371e, (q31_t)0x381df3c5, (q31_t)0xc07cc223, - (q31_t)0x38117b6d, (q31_t)0xc07e4f9b, (q31_t)0x38050364, (q31_t)0xc07fdf85, - (q31_t)0x37f88ba9, (q31_t)0xc08171e2, (q31_t)0x37ec143e, (q31_t)0xc08306b2, - (q31_t)0x37df9d22, (q31_t)0xc0849df4, (q31_t)0x37d32657, (q31_t)0xc08637a9, - (q31_t)0x37c6afdc, (q31_t)0xc087d3d0, (q31_t)0x37ba39b3, (q31_t)0xc089726a, - (q31_t)0x37adc3db, (q31_t)0xc08b1376, (q31_t)0x37a14e55, (q31_t)0xc08cb6f5, - (q31_t)0x3794d922, (q31_t)0xc08e5ce5, (q31_t)0x37886442, (q31_t)0xc0900548, - (q31_t)0x377befb5, (q31_t)0xc091b01d, (q31_t)0x376f7b7d, (q31_t)0xc0935d64, - (q31_t)0x37630799, (q31_t)0xc0950d1d, (q31_t)0x3756940a, (q31_t)0xc096bf48, - (q31_t)0x374a20d0, (q31_t)0xc09873e4, (q31_t)0x373daded, (q31_t)0xc09a2af3, - (q31_t)0x37313b60, (q31_t)0xc09be473, (q31_t)0x3724c92a, (q31_t)0xc09da065, - (q31_t)0x3718574b, (q31_t)0xc09f5ec8, (q31_t)0x370be5c4, (q31_t)0xc0a11f9d, - (q31_t)0x36ff7496, (q31_t)0xc0a2e2e3, (q31_t)0x36f303c0, (q31_t)0xc0a4a89b, - (q31_t)0x36e69344, (q31_t)0xc0a670c4, (q31_t)0x36da2321, (q31_t)0xc0a83b5e, - (q31_t)0x36cdb359, (q31_t)0xc0aa086a, (q31_t)0x36c143ec, (q31_t)0xc0abd7e6, - (q31_t)0x36b4d4d9, (q31_t)0xc0ada9d4, (q31_t)0x36a86623, (q31_t)0xc0af7e33, - (q31_t)0x369bf7c9, (q31_t)0xc0b15502, (q31_t)0x368f89cb, (q31_t)0xc0b32e42, - (q31_t)0x36831c2b, (q31_t)0xc0b509f3, (q31_t)0x3676aee8, (q31_t)0xc0b6e815, - (q31_t)0x366a4203, (q31_t)0xc0b8c8a7, (q31_t)0x365dd57d, (q31_t)0xc0baabaa, - (q31_t)0x36516956, (q31_t)0xc0bc911d, (q31_t)0x3644fd8f, (q31_t)0xc0be7901, - (q31_t)0x36389228, (q31_t)0xc0c06355, (q31_t)0x362c2721, (q31_t)0xc0c25019, - (q31_t)0x361fbc7b, (q31_t)0xc0c43f4d, (q31_t)0x36135237, (q31_t)0xc0c630f2, - (q31_t)0x3606e854, (q31_t)0xc0c82506, (q31_t)0x35fa7ed4, (q31_t)0xc0ca1b8a, - (q31_t)0x35ee15b7, (q31_t)0xc0cc147f, (q31_t)0x35e1acfd, (q31_t)0xc0ce0fe3, - (q31_t)0x35d544a7, (q31_t)0xc0d00db6, (q31_t)0x35c8dcb6, (q31_t)0xc0d20dfa, - (q31_t)0x35bc7529, (q31_t)0xc0d410ad, (q31_t)0x35b00e02, (q31_t)0xc0d615cf, - (q31_t)0x35a3a740, (q31_t)0xc0d81d61, (q31_t)0x359740e5, (q31_t)0xc0da2762, - (q31_t)0x358adaf0, (q31_t)0xc0dc33d2, (q31_t)0x357e7563, (q31_t)0xc0de42b2, - (q31_t)0x3572103d, (q31_t)0xc0e05401, (q31_t)0x3565ab80, (q31_t)0xc0e267be, - (q31_t)0x3559472b, (q31_t)0xc0e47deb, (q31_t)0x354ce33f, (q31_t)0xc0e69686, - (q31_t)0x35407fbd, (q31_t)0xc0e8b190, (q31_t)0x35341ca5, (q31_t)0xc0eacf09, - (q31_t)0x3527b9f7, (q31_t)0xc0eceef1, (q31_t)0x351b57b5, (q31_t)0xc0ef1147, - (q31_t)0x350ef5de, (q31_t)0xc0f1360b, (q31_t)0x35029473, (q31_t)0xc0f35d3e, - (q31_t)0x34f63374, (q31_t)0xc0f586df, (q31_t)0x34e9d2e3, (q31_t)0xc0f7b2ee, - (q31_t)0x34dd72be, (q31_t)0xc0f9e16b, (q31_t)0x34d11308, (q31_t)0xc0fc1257, - (q31_t)0x34c4b3c0, (q31_t)0xc0fe45b0, (q31_t)0x34b854e7, (q31_t)0xc1007b77, - (q31_t)0x34abf67e, (q31_t)0xc102b3ac, (q31_t)0x349f9884, (q31_t)0xc104ee4f, - (q31_t)0x34933afa, (q31_t)0xc1072b5f, (q31_t)0x3486dde1, (q31_t)0xc1096add, - (q31_t)0x347a8139, (q31_t)0xc10bacc8, (q31_t)0x346e2504, (q31_t)0xc10df120, - (q31_t)0x3461c940, (q31_t)0xc11037e6, (q31_t)0x34556def, (q31_t)0xc1128119, - (q31_t)0x34491311, (q31_t)0xc114ccb9, (q31_t)0x343cb8a7, (q31_t)0xc1171ac6, - (q31_t)0x34305eb0, (q31_t)0xc1196b3f, (q31_t)0x3424052f, (q31_t)0xc11bbe26, - (q31_t)0x3417ac22, (q31_t)0xc11e1379, (q31_t)0x340b538b, (q31_t)0xc1206b39, - (q31_t)0x33fefb6a, (q31_t)0xc122c566, (q31_t)0x33f2a3bf, (q31_t)0xc12521ff, - (q31_t)0x33e64c8c, (q31_t)0xc1278104, (q31_t)0x33d9f5cf, (q31_t)0xc129e276, - (q31_t)0x33cd9f8b, (q31_t)0xc12c4653, (q31_t)0x33c149bf, (q31_t)0xc12eac9d, - (q31_t)0x33b4f46c, (q31_t)0xc1311553, (q31_t)0x33a89f92, (q31_t)0xc1338075, - (q31_t)0x339c4b32, (q31_t)0xc135ee02, (q31_t)0x338ff74d, (q31_t)0xc1385dfb, - (q31_t)0x3383a3e2, (q31_t)0xc13ad060, (q31_t)0x337750f2, (q31_t)0xc13d4530, - (q31_t)0x336afe7e, (q31_t)0xc13fbc6c, (q31_t)0x335eac86, (q31_t)0xc1423613, - (q31_t)0x33525b0b, (q31_t)0xc144b225, (q31_t)0x33460a0d, (q31_t)0xc14730a3, - (q31_t)0x3339b98d, (q31_t)0xc149b18b, (q31_t)0x332d698a, (q31_t)0xc14c34df, - (q31_t)0x33211a07, (q31_t)0xc14eba9d, (q31_t)0x3314cb02, (q31_t)0xc15142c6, - (q31_t)0x33087c7d, (q31_t)0xc153cd5a, (q31_t)0x32fc2e77, (q31_t)0xc1565a58, - (q31_t)0x32efe0f2, (q31_t)0xc158e9c1, (q31_t)0x32e393ef, (q31_t)0xc15b7b94, - (q31_t)0x32d7476c, (q31_t)0xc15e0fd1, (q31_t)0x32cafb6b, (q31_t)0xc160a678, - (q31_t)0x32beafed, (q31_t)0xc1633f8a, (q31_t)0x32b264f2, (q31_t)0xc165db05, - (q31_t)0x32a61a7a, (q31_t)0xc16878eb, (q31_t)0x3299d085, (q31_t)0xc16b193a, - (q31_t)0x328d8715, (q31_t)0xc16dbbf3, (q31_t)0x32813e2a, (q31_t)0xc1706115, - (q31_t)0x3274f5c3, (q31_t)0xc17308a1, (q31_t)0x3268ade3, (q31_t)0xc175b296, - (q31_t)0x325c6688, (q31_t)0xc1785ef4, (q31_t)0x32501fb5, (q31_t)0xc17b0dbb, - (q31_t)0x3243d968, (q31_t)0xc17dbeec, (q31_t)0x323793a3, (q31_t)0xc1807285, - (q31_t)0x322b4e66, (q31_t)0xc1832888, (q31_t)0x321f09b1, (q31_t)0xc185e0f3, - (q31_t)0x3212c585, (q31_t)0xc1889bc6, (q31_t)0x320681e3, (q31_t)0xc18b5903, - (q31_t)0x31fa3ecb, (q31_t)0xc18e18a7, (q31_t)0x31edfc3d, (q31_t)0xc190dab4, - (q31_t)0x31e1ba3a, (q31_t)0xc1939f29, (q31_t)0x31d578c2, (q31_t)0xc1966606, - (q31_t)0x31c937d6, (q31_t)0xc1992f4c, (q31_t)0x31bcf777, (q31_t)0xc19bfaf9, - (q31_t)0x31b0b7a4, (q31_t)0xc19ec90d, (q31_t)0x31a4785e, (q31_t)0xc1a1998a, - (q31_t)0x319839a6, (q31_t)0xc1a46c6e, (q31_t)0x318bfb7d, (q31_t)0xc1a741b9, - (q31_t)0x317fbde2, (q31_t)0xc1aa196c, (q31_t)0x317380d6, (q31_t)0xc1acf386, - (q31_t)0x31674459, (q31_t)0xc1afd007, (q31_t)0x315b086d, (q31_t)0xc1b2aef0, - (q31_t)0x314ecd11, (q31_t)0xc1b5903f, (q31_t)0x31429247, (q31_t)0xc1b873f5, - (q31_t)0x3136580d, (q31_t)0xc1bb5a11, (q31_t)0x312a1e66, (q31_t)0xc1be4294, - (q31_t)0x311de551, (q31_t)0xc1c12d7e, (q31_t)0x3111accf, (q31_t)0xc1c41ace, - (q31_t)0x310574e0, (q31_t)0xc1c70a84, (q31_t)0x30f93d86, (q31_t)0xc1c9fca0, - (q31_t)0x30ed06bf, (q31_t)0xc1ccf122, (q31_t)0x30e0d08d, (q31_t)0xc1cfe80a, - (q31_t)0x30d49af1, (q31_t)0xc1d2e158, (q31_t)0x30c865ea, (q31_t)0xc1d5dd0c, - (q31_t)0x30bc317a, (q31_t)0xc1d8db25, (q31_t)0x30affda0, (q31_t)0xc1dbdba3, - (q31_t)0x30a3ca5d, (q31_t)0xc1dede87, (q31_t)0x309797b2, (q31_t)0xc1e1e3d0, - (q31_t)0x308b659f, (q31_t)0xc1e4eb7e, (q31_t)0x307f3424, (q31_t)0xc1e7f591, - (q31_t)0x30730342, (q31_t)0xc1eb0209, (q31_t)0x3066d2fa, (q31_t)0xc1ee10e5, - (q31_t)0x305aa34c, (q31_t)0xc1f12227, (q31_t)0x304e7438, (q31_t)0xc1f435cc, - (q31_t)0x304245c0, (q31_t)0xc1f74bd6, (q31_t)0x303617e2, (q31_t)0xc1fa6445, - (q31_t)0x3029eaa1, (q31_t)0xc1fd7f17, (q31_t)0x301dbdfb, (q31_t)0xc2009c4e, - (q31_t)0x301191f3, (q31_t)0xc203bbe8, (q31_t)0x30056687, (q31_t)0xc206dde6, - (q31_t)0x2ff93bba, (q31_t)0xc20a0248, (q31_t)0x2fed118a, (q31_t)0xc20d290d, - (q31_t)0x2fe0e7f9, (q31_t)0xc2105236, (q31_t)0x2fd4bf08, (q31_t)0xc2137dc2, - (q31_t)0x2fc896b5, (q31_t)0xc216abb1, (q31_t)0x2fbc6f03, (q31_t)0xc219dc03, - (q31_t)0x2fb047f2, (q31_t)0xc21d0eb8, (q31_t)0x2fa42181, (q31_t)0xc22043d0, - (q31_t)0x2f97fbb2, (q31_t)0xc2237b4b, (q31_t)0x2f8bd685, (q31_t)0xc226b528, - (q31_t)0x2f7fb1fa, (q31_t)0xc229f167, (q31_t)0x2f738e12, (q31_t)0xc22d3009, - (q31_t)0x2f676ace, (q31_t)0xc230710d, (q31_t)0x2f5b482d, (q31_t)0xc233b473, - (q31_t)0x2f4f2630, (q31_t)0xc236fa3b, (q31_t)0x2f4304d8, (q31_t)0xc23a4265, - (q31_t)0x2f36e426, (q31_t)0xc23d8cf1, (q31_t)0x2f2ac419, (q31_t)0xc240d9de, - (q31_t)0x2f1ea4b2, (q31_t)0xc244292c, (q31_t)0x2f1285f2, (q31_t)0xc2477adc, - (q31_t)0x2f0667d9, (q31_t)0xc24aceed, (q31_t)0x2efa4a67, (q31_t)0xc24e255e, - (q31_t)0x2eee2d9d, (q31_t)0xc2517e31, (q31_t)0x2ee2117c, (q31_t)0xc254d965, - (q31_t)0x2ed5f604, (q31_t)0xc25836f9, (q31_t)0x2ec9db35, (q31_t)0xc25b96ee, - (q31_t)0x2ebdc110, (q31_t)0xc25ef943, (q31_t)0x2eb1a796, (q31_t)0xc2625df8, - (q31_t)0x2ea58ec6, (q31_t)0xc265c50e, (q31_t)0x2e9976a1, (q31_t)0xc2692e83, - (q31_t)0x2e8d5f29, (q31_t)0xc26c9a58, (q31_t)0x2e81485c, (q31_t)0xc270088e, - (q31_t)0x2e75323c, (q31_t)0xc2737922, (q31_t)0x2e691cc9, (q31_t)0xc276ec16, - (q31_t)0x2e5d0804, (q31_t)0xc27a616a, (q31_t)0x2e50f3ed, (q31_t)0xc27dd91c, - (q31_t)0x2e44e084, (q31_t)0xc281532e, (q31_t)0x2e38cdcb, (q31_t)0xc284cf9f, - (q31_t)0x2e2cbbc1, (q31_t)0xc2884e6e, (q31_t)0x2e20aa67, (q31_t)0xc28bcf9c, - (q31_t)0x2e1499bd, (q31_t)0xc28f5329, (q31_t)0x2e0889c4, (q31_t)0xc292d914, - (q31_t)0x2dfc7a7c, (q31_t)0xc296615d, (q31_t)0x2df06be6, (q31_t)0xc299ec05, - (q31_t)0x2de45e03, (q31_t)0xc29d790a, (q31_t)0x2dd850d2, (q31_t)0xc2a1086d, - (q31_t)0x2dcc4454, (q31_t)0xc2a49a2e, (q31_t)0x2dc0388a, (q31_t)0xc2a82e4d, - (q31_t)0x2db42d74, (q31_t)0xc2abc4c9, (q31_t)0x2da82313, (q31_t)0xc2af5da2, - (q31_t)0x2d9c1967, (q31_t)0xc2b2f8d8, (q31_t)0x2d901070, (q31_t)0xc2b6966c, - (q31_t)0x2d84082f, (q31_t)0xc2ba365c, (q31_t)0x2d7800a5, (q31_t)0xc2bdd8a9, - (q31_t)0x2d6bf9d1, (q31_t)0xc2c17d52, (q31_t)0x2d5ff3b5, (q31_t)0xc2c52459, - (q31_t)0x2d53ee51, (q31_t)0xc2c8cdbb, (q31_t)0x2d47e9a5, (q31_t)0xc2cc7979, - (q31_t)0x2d3be5b1, (q31_t)0xc2d02794, (q31_t)0x2d2fe277, (q31_t)0xc2d3d80a, - (q31_t)0x2d23dff7, (q31_t)0xc2d78add, (q31_t)0x2d17de31, (q31_t)0xc2db400a, - (q31_t)0x2d0bdd25, (q31_t)0xc2def794, (q31_t)0x2cffdcd4, (q31_t)0xc2e2b178, - (q31_t)0x2cf3dd3f, (q31_t)0xc2e66db8, (q31_t)0x2ce7de66, (q31_t)0xc2ea2c53, - (q31_t)0x2cdbe04a, (q31_t)0xc2eded49, (q31_t)0x2ccfe2ea, (q31_t)0xc2f1b099, - (q31_t)0x2cc3e648, (q31_t)0xc2f57644, (q31_t)0x2cb7ea63, (q31_t)0xc2f93e4a, - (q31_t)0x2cabef3d, (q31_t)0xc2fd08a9, (q31_t)0x2c9ff4d6, (q31_t)0xc300d563, - (q31_t)0x2c93fb2e, (q31_t)0xc304a477, (q31_t)0x2c880245, (q31_t)0xc30875e5, - (q31_t)0x2c7c0a1d, (q31_t)0xc30c49ad, (q31_t)0x2c7012b5, (q31_t)0xc3101fce, - (q31_t)0x2c641c0e, (q31_t)0xc313f848, (q31_t)0x2c582629, (q31_t)0xc317d31c, - (q31_t)0x2c4c3106, (q31_t)0xc31bb049, (q31_t)0x2c403ca5, (q31_t)0xc31f8fcf, - (q31_t)0x2c344908, (q31_t)0xc32371ae, (q31_t)0x2c28562d, (q31_t)0xc32755e5, - (q31_t)0x2c1c6417, (q31_t)0xc32b3c75, (q31_t)0x2c1072c4, (q31_t)0xc32f255e, - (q31_t)0x2c048237, (q31_t)0xc333109e, (q31_t)0x2bf8926f, (q31_t)0xc336fe37, - (q31_t)0x2beca36c, (q31_t)0xc33aee27, (q31_t)0x2be0b52f, (q31_t)0xc33ee070, - (q31_t)0x2bd4c7ba, (q31_t)0xc342d510, (q31_t)0x2bc8db0b, (q31_t)0xc346cc07, - (q31_t)0x2bbcef23, (q31_t)0xc34ac556, (q31_t)0x2bb10404, (q31_t)0xc34ec0fc, - (q31_t)0x2ba519ad, (q31_t)0xc352bef9, (q31_t)0x2b99301f, (q31_t)0xc356bf4d, - (q31_t)0x2b8d475b, (q31_t)0xc35ac1f7, (q31_t)0x2b815f60, (q31_t)0xc35ec6f8, - (q31_t)0x2b75782f, (q31_t)0xc362ce50, (q31_t)0x2b6991ca, (q31_t)0xc366d7fd, - (q31_t)0x2b5dac2f, (q31_t)0xc36ae401, (q31_t)0x2b51c760, (q31_t)0xc36ef25b, - (q31_t)0x2b45e35d, (q31_t)0xc373030a, (q31_t)0x2b3a0027, (q31_t)0xc377160f, - (q31_t)0x2b2e1dbe, (q31_t)0xc37b2b6a, (q31_t)0x2b223c22, (q31_t)0xc37f4319, - (q31_t)0x2b165b54, (q31_t)0xc3835d1e, (q31_t)0x2b0a7b54, (q31_t)0xc3877978, - (q31_t)0x2afe9c24, (q31_t)0xc38b9827, (q31_t)0x2af2bdc3, (q31_t)0xc38fb92a, - (q31_t)0x2ae6e031, (q31_t)0xc393dc82, (q31_t)0x2adb0370, (q31_t)0xc398022f, - (q31_t)0x2acf277f, (q31_t)0xc39c2a2f, (q31_t)0x2ac34c60, (q31_t)0xc3a05484, - (q31_t)0x2ab77212, (q31_t)0xc3a4812c, (q31_t)0x2aab9896, (q31_t)0xc3a8b028, - (q31_t)0x2a9fbfed, (q31_t)0xc3ace178, (q31_t)0x2a93e817, (q31_t)0xc3b1151b, - (q31_t)0x2a881114, (q31_t)0xc3b54b11, (q31_t)0x2a7c3ae5, (q31_t)0xc3b9835a, - (q31_t)0x2a70658a, (q31_t)0xc3bdbdf6, (q31_t)0x2a649105, (q31_t)0xc3c1fae5, - (q31_t)0x2a58bd54, (q31_t)0xc3c63a26, (q31_t)0x2a4cea79, (q31_t)0xc3ca7bba, - (q31_t)0x2a411874, (q31_t)0xc3cebfa0, (q31_t)0x2a354746, (q31_t)0xc3d305d8, - (q31_t)0x2a2976ef, (q31_t)0xc3d74e62, (q31_t)0x2a1da770, (q31_t)0xc3db993e, - (q31_t)0x2a11d8c8, (q31_t)0xc3dfe66c, (q31_t)0x2a060af9, (q31_t)0xc3e435ea, - (q31_t)0x29fa3e03, (q31_t)0xc3e887bb, (q31_t)0x29ee71e6, (q31_t)0xc3ecdbdc, - (q31_t)0x29e2a6a3, (q31_t)0xc3f1324e, (q31_t)0x29d6dc3b, (q31_t)0xc3f58b10, - (q31_t)0x29cb12ad, (q31_t)0xc3f9e624, (q31_t)0x29bf49fa, (q31_t)0xc3fe4388, - (q31_t)0x29b38223, (q31_t)0xc402a33c, (q31_t)0x29a7bb28, (q31_t)0xc4070540, - (q31_t)0x299bf509, (q31_t)0xc40b6994, (q31_t)0x29902fc7, (q31_t)0xc40fd037, - (q31_t)0x29846b63, (q31_t)0xc414392b, (q31_t)0x2978a7dd, (q31_t)0xc418a46d, - (q31_t)0x296ce535, (q31_t)0xc41d11ff, (q31_t)0x2961236c, (q31_t)0xc42181e0, - (q31_t)0x29556282, (q31_t)0xc425f410, (q31_t)0x2949a278, (q31_t)0xc42a688f, - (q31_t)0x293de34e, (q31_t)0xc42edf5c, (q31_t)0x29322505, (q31_t)0xc4335877, - (q31_t)0x2926679c, (q31_t)0xc437d3e1, (q31_t)0x291aab16, (q31_t)0xc43c5199, - (q31_t)0x290eef71, (q31_t)0xc440d19e, (q31_t)0x290334af, (q31_t)0xc44553f2, - (q31_t)0x28f77acf, (q31_t)0xc449d892, (q31_t)0x28ebc1d3, (q31_t)0xc44e5f80, - (q31_t)0x28e009ba, (q31_t)0xc452e8bc, (q31_t)0x28d45286, (q31_t)0xc4577444, - (q31_t)0x28c89c37, (q31_t)0xc45c0219, (q31_t)0x28bce6cd, (q31_t)0xc460923b, - (q31_t)0x28b13248, (q31_t)0xc46524a9, (q31_t)0x28a57ea9, (q31_t)0xc469b963, - (q31_t)0x2899cbf1, (q31_t)0xc46e5069, (q31_t)0x288e1a20, (q31_t)0xc472e9bc, - (q31_t)0x28826936, (q31_t)0xc477855a, (q31_t)0x2876b934, (q31_t)0xc47c2344, - (q31_t)0x286b0a1a, (q31_t)0xc480c379, (q31_t)0x285f5be9, (q31_t)0xc48565f9, - (q31_t)0x2853aea1, (q31_t)0xc48a0ac4, (q31_t)0x28480243, (q31_t)0xc48eb1db, - (q31_t)0x283c56cf, (q31_t)0xc4935b3c, (q31_t)0x2830ac45, (q31_t)0xc49806e7, - (q31_t)0x282502a7, (q31_t)0xc49cb4dd, (q31_t)0x281959f4, (q31_t)0xc4a1651c, - (q31_t)0x280db22d, (q31_t)0xc4a617a6, (q31_t)0x28020b52, (q31_t)0xc4aacc7a, - (q31_t)0x27f66564, (q31_t)0xc4af8397, (q31_t)0x27eac063, (q31_t)0xc4b43cfd, - (q31_t)0x27df1c50, (q31_t)0xc4b8f8ad, (q31_t)0x27d3792b, (q31_t)0xc4bdb6a6, - (q31_t)0x27c7d6f4, (q31_t)0xc4c276e8, (q31_t)0x27bc35ad, (q31_t)0xc4c73972, - (q31_t)0x27b09555, (q31_t)0xc4cbfe45, (q31_t)0x27a4f5ed, (q31_t)0xc4d0c560, - (q31_t)0x27995776, (q31_t)0xc4d58ec3, (q31_t)0x278db9ef, (q31_t)0xc4da5a6f, - (q31_t)0x27821d59, (q31_t)0xc4df2862, (q31_t)0x277681b6, (q31_t)0xc4e3f89c, - (q31_t)0x276ae704, (q31_t)0xc4e8cb1e, (q31_t)0x275f4d45, (q31_t)0xc4ed9fe7, - (q31_t)0x2753b479, (q31_t)0xc4f276f7, (q31_t)0x27481ca1, (q31_t)0xc4f7504e, - (q31_t)0x273c85bc, (q31_t)0xc4fc2bec, (q31_t)0x2730efcc, (q31_t)0xc50109d0, - (q31_t)0x27255ad1, (q31_t)0xc505e9fb, (q31_t)0x2719c6cb, (q31_t)0xc50acc6b, - (q31_t)0x270e33bb, (q31_t)0xc50fb121, (q31_t)0x2702a1a1, (q31_t)0xc514981d, - (q31_t)0x26f7107e, (q31_t)0xc519815f, (q31_t)0x26eb8052, (q31_t)0xc51e6ce6, - (q31_t)0x26dff11d, (q31_t)0xc5235ab2, (q31_t)0x26d462e1, (q31_t)0xc5284ac3, - (q31_t)0x26c8d59c, (q31_t)0xc52d3d18, (q31_t)0x26bd4951, (q31_t)0xc53231b3, - (q31_t)0x26b1bdff, (q31_t)0xc5372891, (q31_t)0x26a633a6, (q31_t)0xc53c21b4, - (q31_t)0x269aaa48, (q31_t)0xc5411d1b, (q31_t)0x268f21e5, (q31_t)0xc5461ac6, - (q31_t)0x26839a7c, (q31_t)0xc54b1ab4, (q31_t)0x26781410, (q31_t)0xc5501ce5, - (q31_t)0x266c8e9f, (q31_t)0xc555215a, (q31_t)0x26610a2a, (q31_t)0xc55a2812, - (q31_t)0x265586b3, (q31_t)0xc55f310d, (q31_t)0x264a0438, (q31_t)0xc5643c4a, - (q31_t)0x263e82bc, (q31_t)0xc56949ca, (q31_t)0x2633023e, (q31_t)0xc56e598c, - (q31_t)0x262782be, (q31_t)0xc5736b90, (q31_t)0x261c043d, (q31_t)0xc5787fd6, - (q31_t)0x261086bc, (q31_t)0xc57d965d, (q31_t)0x26050a3b, (q31_t)0xc582af26, - (q31_t)0x25f98ebb, (q31_t)0xc587ca31, (q31_t)0x25ee143b, (q31_t)0xc58ce77c, - (q31_t)0x25e29abc, (q31_t)0xc5920708, (q31_t)0x25d72240, (q31_t)0xc59728d5, - (q31_t)0x25cbaac5, (q31_t)0xc59c4ce3, (q31_t)0x25c0344d, (q31_t)0xc5a17330, - (q31_t)0x25b4bed8, (q31_t)0xc5a69bbe, (q31_t)0x25a94a67, (q31_t)0xc5abc68c, - (q31_t)0x259dd6f9, (q31_t)0xc5b0f399, (q31_t)0x25926490, (q31_t)0xc5b622e6, - (q31_t)0x2586f32c, (q31_t)0xc5bb5472, (q31_t)0x257b82cd, (q31_t)0xc5c0883d, - (q31_t)0x25701374, (q31_t)0xc5c5be47, (q31_t)0x2564a521, (q31_t)0xc5caf690, - (q31_t)0x255937d5, (q31_t)0xc5d03118, (q31_t)0x254dcb8f, (q31_t)0xc5d56ddd, - (q31_t)0x25426051, (q31_t)0xc5daace1, (q31_t)0x2536f61b, (q31_t)0xc5dfee22, - (q31_t)0x252b8cee, (q31_t)0xc5e531a1, (q31_t)0x252024c9, (q31_t)0xc5ea775e, - (q31_t)0x2514bdad, (q31_t)0xc5efbf58, (q31_t)0x2509579b, (q31_t)0xc5f5098f, - (q31_t)0x24fdf294, (q31_t)0xc5fa5603, (q31_t)0x24f28e96, (q31_t)0xc5ffa4b3, - (q31_t)0x24e72ba4, (q31_t)0xc604f5a0, (q31_t)0x24dbc9bd, (q31_t)0xc60a48c9, - (q31_t)0x24d068e2, (q31_t)0xc60f9e2e, (q31_t)0x24c50914, (q31_t)0xc614f5cf, - (q31_t)0x24b9aa52, (q31_t)0xc61a4fac, (q31_t)0x24ae4c9d, (q31_t)0xc61fabc4, - (q31_t)0x24a2eff6, (q31_t)0xc6250a18, (q31_t)0x2497945d, (q31_t)0xc62a6aa6, - (q31_t)0x248c39d3, (q31_t)0xc62fcd6f, (q31_t)0x2480e057, (q31_t)0xc6353273, - (q31_t)0x247587eb, (q31_t)0xc63a99b1, (q31_t)0x246a308f, (q31_t)0xc6400329, - (q31_t)0x245eda43, (q31_t)0xc6456edb, (q31_t)0x24538507, (q31_t)0xc64adcc7, - (q31_t)0x244830dd, (q31_t)0xc6504ced, (q31_t)0x243cddc4, (q31_t)0xc655bf4c, - (q31_t)0x24318bbe, (q31_t)0xc65b33e4, (q31_t)0x24263ac9, (q31_t)0xc660aab5, - (q31_t)0x241aeae8, (q31_t)0xc66623be, (q31_t)0x240f9c1a, (q31_t)0xc66b9f01, - (q31_t)0x24044e60, (q31_t)0xc6711c7b, (q31_t)0x23f901ba, (q31_t)0xc6769c2e, - (q31_t)0x23edb628, (q31_t)0xc67c1e18, (q31_t)0x23e26bac, (q31_t)0xc681a23a, - (q31_t)0x23d72245, (q31_t)0xc6872894, (q31_t)0x23cbd9f4, (q31_t)0xc68cb124, - (q31_t)0x23c092b9, (q31_t)0xc6923bec, (q31_t)0x23b54c95, (q31_t)0xc697c8eb, - (q31_t)0x23aa0788, (q31_t)0xc69d5820, (q31_t)0x239ec393, (q31_t)0xc6a2e98b, - (q31_t)0x239380b6, (q31_t)0xc6a87d2d, (q31_t)0x23883ef2, (q31_t)0xc6ae1304, - (q31_t)0x237cfe47, (q31_t)0xc6b3ab12, (q31_t)0x2371beb5, (q31_t)0xc6b94554, - (q31_t)0x2366803c, (q31_t)0xc6bee1cd, (q31_t)0x235b42df, (q31_t)0xc6c4807a, - (q31_t)0x2350069b, (q31_t)0xc6ca215c, (q31_t)0x2344cb73, (q31_t)0xc6cfc472, - (q31_t)0x23399167, (q31_t)0xc6d569be, (q31_t)0x232e5876, (q31_t)0xc6db113d, - (q31_t)0x232320a2, (q31_t)0xc6e0baf0, (q31_t)0x2317e9eb, (q31_t)0xc6e666d7, - (q31_t)0x230cb451, (q31_t)0xc6ec14f2, (q31_t)0x23017fd5, (q31_t)0xc6f1c540, - (q31_t)0x22f64c77, (q31_t)0xc6f777c1, (q31_t)0x22eb1a37, (q31_t)0xc6fd2c75, - (q31_t)0x22dfe917, (q31_t)0xc702e35c, (q31_t)0x22d4b916, (q31_t)0xc7089c75, - (q31_t)0x22c98a35, (q31_t)0xc70e57c0, (q31_t)0x22be5c74, (q31_t)0xc714153e, - (q31_t)0x22b32fd4, (q31_t)0xc719d4ed, (q31_t)0x22a80456, (q31_t)0xc71f96ce, - (q31_t)0x229cd9f8, (q31_t)0xc7255ae0, (q31_t)0x2291b0bd, (q31_t)0xc72b2123, - (q31_t)0x228688a4, (q31_t)0xc730e997, (q31_t)0x227b61af, (q31_t)0xc736b43c, - (q31_t)0x22703bdc, (q31_t)0xc73c8111, (q31_t)0x2265172e, (q31_t)0xc7425016, - (q31_t)0x2259f3a3, (q31_t)0xc748214c, (q31_t)0x224ed13d, (q31_t)0xc74df4b1, - (q31_t)0x2243affc, (q31_t)0xc753ca46, (q31_t)0x22388fe1, (q31_t)0xc759a20a, - (q31_t)0x222d70eb, (q31_t)0xc75f7bfe, (q31_t)0x2222531c, (q31_t)0xc7655820, - (q31_t)0x22173674, (q31_t)0xc76b3671, (q31_t)0x220c1af3, (q31_t)0xc77116f0, - (q31_t)0x22010099, (q31_t)0xc776f99d, (q31_t)0x21f5e768, (q31_t)0xc77cde79, - (q31_t)0x21eacf5f, (q31_t)0xc782c582, (q31_t)0x21dfb87f, (q31_t)0xc788aeb9, - (q31_t)0x21d4a2c8, (q31_t)0xc78e9a1d, (q31_t)0x21c98e3b, (q31_t)0xc79487ae, - (q31_t)0x21be7ad8, (q31_t)0xc79a776c, (q31_t)0x21b368a0, (q31_t)0xc7a06957, - (q31_t)0x21a85793, (q31_t)0xc7a65d6e, (q31_t)0x219d47b1, (q31_t)0xc7ac53b1, - (q31_t)0x219238fb, (q31_t)0xc7b24c20, (q31_t)0x21872b72, (q31_t)0xc7b846ba, - (q31_t)0x217c1f15, (q31_t)0xc7be4381, (q31_t)0x217113e5, (q31_t)0xc7c44272, - (q31_t)0x216609e3, (q31_t)0xc7ca438f, (q31_t)0x215b0110, (q31_t)0xc7d046d6, - (q31_t)0x214ff96a, (q31_t)0xc7d64c47, (q31_t)0x2144f2f3, (q31_t)0xc7dc53e3, - (q31_t)0x2139edac, (q31_t)0xc7e25daa, (q31_t)0x212ee995, (q31_t)0xc7e8699a, - (q31_t)0x2123e6ad, (q31_t)0xc7ee77b3, (q31_t)0x2118e4f6, (q31_t)0xc7f487f6, - (q31_t)0x210de470, (q31_t)0xc7fa9a62, (q31_t)0x2102e51c, (q31_t)0xc800aef7, - (q31_t)0x20f7e6f9, (q31_t)0xc806c5b5, (q31_t)0x20ecea09, (q31_t)0xc80cde9b, - (q31_t)0x20e1ee4b, (q31_t)0xc812f9a9, (q31_t)0x20d6f3c1, (q31_t)0xc81916df, - (q31_t)0x20cbfa6a, (q31_t)0xc81f363d, (q31_t)0x20c10247, (q31_t)0xc82557c3, - (q31_t)0x20b60b58, (q31_t)0xc82b7b70, (q31_t)0x20ab159e, (q31_t)0xc831a143, - (q31_t)0x20a0211a, (q31_t)0xc837c93e, (q31_t)0x20952dcb, (q31_t)0xc83df35f, - (q31_t)0x208a3bb2, (q31_t)0xc8441fa6, (q31_t)0x207f4acf, (q31_t)0xc84a4e14, - (q31_t)0x20745b24, (q31_t)0xc8507ea7, (q31_t)0x20696cb0, (q31_t)0xc856b160, - (q31_t)0x205e7f74, (q31_t)0xc85ce63e, (q31_t)0x2053936f, (q31_t)0xc8631d42, - (q31_t)0x2048a8a4, (q31_t)0xc869566a, (q31_t)0x203dbf11, (q31_t)0xc86f91b7, - (q31_t)0x2032d6b8, (q31_t)0xc875cf28, (q31_t)0x2027ef99, (q31_t)0xc87c0ebd, - (q31_t)0x201d09b4, (q31_t)0xc8825077, (q31_t)0x2012250a, (q31_t)0xc8889454, - (q31_t)0x2007419b, (q31_t)0xc88eda54, (q31_t)0x1ffc5f67, (q31_t)0xc8952278, - (q31_t)0x1ff17e70, (q31_t)0xc89b6cbf, (q31_t)0x1fe69eb4, (q31_t)0xc8a1b928, - (q31_t)0x1fdbc036, (q31_t)0xc8a807b4, (q31_t)0x1fd0e2f5, (q31_t)0xc8ae5862, - (q31_t)0x1fc606f1, (q31_t)0xc8b4ab32, (q31_t)0x1fbb2c2c, (q31_t)0xc8bb0023, - (q31_t)0x1fb052a5, (q31_t)0xc8c15736, (q31_t)0x1fa57a5d, (q31_t)0xc8c7b06b, - (q31_t)0x1f9aa354, (q31_t)0xc8ce0bc0, (q31_t)0x1f8fcd8b, (q31_t)0xc8d46936, - (q31_t)0x1f84f902, (q31_t)0xc8dac8cd, (q31_t)0x1f7a25ba, (q31_t)0xc8e12a84, - (q31_t)0x1f6f53b3, (q31_t)0xc8e78e5b, (q31_t)0x1f6482ed, (q31_t)0xc8edf452, - (q31_t)0x1f59b369, (q31_t)0xc8f45c68, (q31_t)0x1f4ee527, (q31_t)0xc8fac69e, - (q31_t)0x1f441828, (q31_t)0xc90132f2, (q31_t)0x1f394c6b, (q31_t)0xc907a166, - (q31_t)0x1f2e81f3, (q31_t)0xc90e11f7, (q31_t)0x1f23b8be, (q31_t)0xc91484a8, - (q31_t)0x1f18f0ce, (q31_t)0xc91af976, (q31_t)0x1f0e2a22, (q31_t)0xc9217062, - (q31_t)0x1f0364bc, (q31_t)0xc927e96b, (q31_t)0x1ef8a09b, (q31_t)0xc92e6492, - (q31_t)0x1eedddc0, (q31_t)0xc934e1d6, (q31_t)0x1ee31c2b, (q31_t)0xc93b6137, - (q31_t)0x1ed85bdd, (q31_t)0xc941e2b4, (q31_t)0x1ecd9cd7, (q31_t)0xc948664d, - (q31_t)0x1ec2df18, (q31_t)0xc94eec03, (q31_t)0x1eb822a1, (q31_t)0xc95573d4, - (q31_t)0x1ead6773, (q31_t)0xc95bfdc1, (q31_t)0x1ea2ad8d, (q31_t)0xc96289c9, - (q31_t)0x1e97f4f1, (q31_t)0xc96917ec, (q31_t)0x1e8d3d9e, (q31_t)0xc96fa82a, - (q31_t)0x1e828796, (q31_t)0xc9763a83, (q31_t)0x1e77d2d8, (q31_t)0xc97ccef5, - (q31_t)0x1e6d1f65, (q31_t)0xc9836582, (q31_t)0x1e626d3e, (q31_t)0xc989fe29, - (q31_t)0x1e57bc62, (q31_t)0xc99098e9, (q31_t)0x1e4d0cd2, (q31_t)0xc99735c2, - (q31_t)0x1e425e8f, (q31_t)0xc99dd4b4, (q31_t)0x1e37b199, (q31_t)0xc9a475bf, - (q31_t)0x1e2d05f1, (q31_t)0xc9ab18e3, (q31_t)0x1e225b96, (q31_t)0xc9b1be1e, - (q31_t)0x1e17b28a, (q31_t)0xc9b86572, (q31_t)0x1e0d0acc, (q31_t)0xc9bf0edd, - (q31_t)0x1e02645d, (q31_t)0xc9c5ba60, (q31_t)0x1df7bf3e, (q31_t)0xc9cc67fa, - (q31_t)0x1ded1b6e, (q31_t)0xc9d317ab, (q31_t)0x1de278ef, (q31_t)0xc9d9c973, - (q31_t)0x1dd7d7c1, (q31_t)0xc9e07d51, (q31_t)0x1dcd37e4, (q31_t)0xc9e73346, - (q31_t)0x1dc29958, (q31_t)0xc9edeb50, (q31_t)0x1db7fc1e, (q31_t)0xc9f4a570, - (q31_t)0x1dad6036, (q31_t)0xc9fb61a5, (q31_t)0x1da2c5a2, (q31_t)0xca021fef, - (q31_t)0x1d982c60, (q31_t)0xca08e04f, (q31_t)0x1d8d9472, (q31_t)0xca0fa2c3, - (q31_t)0x1d82fdd8, (q31_t)0xca16674b, (q31_t)0x1d786892, (q31_t)0xca1d2de7, - (q31_t)0x1d6dd4a2, (q31_t)0xca23f698, (q31_t)0x1d634206, (q31_t)0xca2ac15b, - (q31_t)0x1d58b0c0, (q31_t)0xca318e32, (q31_t)0x1d4e20d0, (q31_t)0xca385d1d, - (q31_t)0x1d439236, (q31_t)0xca3f2e19, (q31_t)0x1d3904f4, (q31_t)0xca460129, - (q31_t)0x1d2e7908, (q31_t)0xca4cd64b, (q31_t)0x1d23ee74, (q31_t)0xca53ad7e, - (q31_t)0x1d196538, (q31_t)0xca5a86c4, (q31_t)0x1d0edd55, (q31_t)0xca61621b, - (q31_t)0x1d0456ca, (q31_t)0xca683f83, (q31_t)0x1cf9d199, (q31_t)0xca6f1efc, - (q31_t)0x1cef4dc2, (q31_t)0xca760086, (q31_t)0x1ce4cb44, (q31_t)0xca7ce420, - (q31_t)0x1cda4a21, (q31_t)0xca83c9ca, (q31_t)0x1ccfca59, (q31_t)0xca8ab184, - (q31_t)0x1cc54bec, (q31_t)0xca919b4e, (q31_t)0x1cbacedb, (q31_t)0xca988727, - (q31_t)0x1cb05326, (q31_t)0xca9f750f, (q31_t)0x1ca5d8cd, (q31_t)0xcaa66506, - (q31_t)0x1c9b5fd2, (q31_t)0xcaad570c, (q31_t)0x1c90e834, (q31_t)0xcab44b1f, - (q31_t)0x1c8671f3, (q31_t)0xcabb4141, (q31_t)0x1c7bfd11, (q31_t)0xcac23971, - (q31_t)0x1c71898d, (q31_t)0xcac933ae, (q31_t)0x1c671768, (q31_t)0xcad02ff8, - (q31_t)0x1c5ca6a2, (q31_t)0xcad72e4f, (q31_t)0x1c52373c, (q31_t)0xcade2eb3, - (q31_t)0x1c47c936, (q31_t)0xcae53123, (q31_t)0x1c3d5c91, (q31_t)0xcaec35a0, - (q31_t)0x1c32f14d, (q31_t)0xcaf33c28, (q31_t)0x1c28876a, (q31_t)0xcafa44bc, - (q31_t)0x1c1e1ee9, (q31_t)0xcb014f5b, (q31_t)0x1c13b7c9, (q31_t)0xcb085c05, - (q31_t)0x1c09520d, (q31_t)0xcb0f6aba, (q31_t)0x1bfeedb3, (q31_t)0xcb167b79, - (q31_t)0x1bf48abd, (q31_t)0xcb1d8e43, (q31_t)0x1bea292b, (q31_t)0xcb24a316, - (q31_t)0x1bdfc8fc, (q31_t)0xcb2bb9f4, (q31_t)0x1bd56a32, (q31_t)0xcb32d2da, - (q31_t)0x1bcb0cce, (q31_t)0xcb39edca, (q31_t)0x1bc0b0ce, (q31_t)0xcb410ac3, - (q31_t)0x1bb65634, (q31_t)0xcb4829c4, (q31_t)0x1babfd01, (q31_t)0xcb4f4acd, - (q31_t)0x1ba1a534, (q31_t)0xcb566ddf, (q31_t)0x1b974ece, (q31_t)0xcb5d92f8, - (q31_t)0x1b8cf9cf, (q31_t)0xcb64ba19, (q31_t)0x1b82a638, (q31_t)0xcb6be341, - (q31_t)0x1b785409, (q31_t)0xcb730e70, (q31_t)0x1b6e0342, (q31_t)0xcb7a3ba5, - (q31_t)0x1b63b3e5, (q31_t)0xcb816ae1, (q31_t)0x1b5965f1, (q31_t)0xcb889c23, - (q31_t)0x1b4f1967, (q31_t)0xcb8fcf6b, (q31_t)0x1b44ce46, (q31_t)0xcb9704b9, - (q31_t)0x1b3a8491, (q31_t)0xcb9e3c0b, (q31_t)0x1b303c46, (q31_t)0xcba57563, - (q31_t)0x1b25f566, (q31_t)0xcbacb0bf, (q31_t)0x1b1baff2, (q31_t)0xcbb3ee20, - (q31_t)0x1b116beb, (q31_t)0xcbbb2d85, (q31_t)0x1b072950, (q31_t)0xcbc26eee, - (q31_t)0x1afce821, (q31_t)0xcbc9b25a, (q31_t)0x1af2a860, (q31_t)0xcbd0f7ca, - (q31_t)0x1ae86a0d, (q31_t)0xcbd83f3d, (q31_t)0x1ade2d28, (q31_t)0xcbdf88b3, - (q31_t)0x1ad3f1b1, (q31_t)0xcbe6d42b, (q31_t)0x1ac9b7a9, (q31_t)0xcbee21a5, - (q31_t)0x1abf7f11, (q31_t)0xcbf57121, (q31_t)0x1ab547e8, (q31_t)0xcbfcc29f, - (q31_t)0x1aab122f, (q31_t)0xcc04161e, (q31_t)0x1aa0dde7, (q31_t)0xcc0b6b9e, - (q31_t)0x1a96ab0f, (q31_t)0xcc12c31f, (q31_t)0x1a8c79a9, (q31_t)0xcc1a1ca0, - (q31_t)0x1a8249b4, (q31_t)0xcc217822, (q31_t)0x1a781b31, (q31_t)0xcc28d5a3, - (q31_t)0x1a6dee21, (q31_t)0xcc303524, (q31_t)0x1a63c284, (q31_t)0xcc3796a5, - (q31_t)0x1a599859, (q31_t)0xcc3efa25, (q31_t)0x1a4f6fa3, (q31_t)0xcc465fa3, - (q31_t)0x1a454860, (q31_t)0xcc4dc720, (q31_t)0x1a3b2292, (q31_t)0xcc55309b, - (q31_t)0x1a30fe38, (q31_t)0xcc5c9c14, (q31_t)0x1a26db54, (q31_t)0xcc64098b, - (q31_t)0x1a1cb9e5, (q31_t)0xcc6b78ff, (q31_t)0x1a1299ec, (q31_t)0xcc72ea70, - (q31_t)0x1a087b69, (q31_t)0xcc7a5dde, (q31_t)0x19fe5e5e, (q31_t)0xcc81d349, - (q31_t)0x19f442c9, (q31_t)0xcc894aaf, (q31_t)0x19ea28ac, (q31_t)0xcc90c412, - (q31_t)0x19e01006, (q31_t)0xcc983f70, (q31_t)0x19d5f8d9, (q31_t)0xcc9fbcca, - (q31_t)0x19cbe325, (q31_t)0xcca73c1e, (q31_t)0x19c1cee9, (q31_t)0xccaebd6e, - (q31_t)0x19b7bc27, (q31_t)0xccb640b8, (q31_t)0x19adaadf, (q31_t)0xccbdc5fc, - (q31_t)0x19a39b11, (q31_t)0xccc54d3a, (q31_t)0x19998cbe, (q31_t)0xccccd671, - (q31_t)0x198f7fe6, (q31_t)0xccd461a2, (q31_t)0x19857489, (q31_t)0xccdbeecc, - (q31_t)0x197b6aa8, (q31_t)0xcce37def, (q31_t)0x19716243, (q31_t)0xcceb0f0a, - (q31_t)0x19675b5a, (q31_t)0xccf2a21d, (q31_t)0x195d55ef, (q31_t)0xccfa3729, - (q31_t)0x19535201, (q31_t)0xcd01ce2b, (q31_t)0x19494f90, (q31_t)0xcd096725, - (q31_t)0x193f4e9e, (q31_t)0xcd110216, (q31_t)0x19354f2a, (q31_t)0xcd189efe, - (q31_t)0x192b5135, (q31_t)0xcd203ddc, (q31_t)0x192154bf, (q31_t)0xcd27deb0, - (q31_t)0x191759c9, (q31_t)0xcd2f817b, (q31_t)0x190d6053, (q31_t)0xcd37263a, - (q31_t)0x1903685d, (q31_t)0xcd3eccef, (q31_t)0x18f971e8, (q31_t)0xcd467599, - (q31_t)0x18ef7cf4, (q31_t)0xcd4e2037, (q31_t)0x18e58982, (q31_t)0xcd55ccca, - (q31_t)0x18db9792, (q31_t)0xcd5d7b50, (q31_t)0x18d1a724, (q31_t)0xcd652bcb, - (q31_t)0x18c7b838, (q31_t)0xcd6cde39, (q31_t)0x18bdcad0, (q31_t)0xcd74929a, - (q31_t)0x18b3deeb, (q31_t)0xcd7c48ee, (q31_t)0x18a9f48a, (q31_t)0xcd840134, - (q31_t)0x18a00bae, (q31_t)0xcd8bbb6d, (q31_t)0x18962456, (q31_t)0xcd937798, - (q31_t)0x188c3e83, (q31_t)0xcd9b35b4, (q31_t)0x18825a35, (q31_t)0xcda2f5c2, - (q31_t)0x1878776d, (q31_t)0xcdaab7c0, (q31_t)0x186e962b, (q31_t)0xcdb27bb0, - (q31_t)0x1864b670, (q31_t)0xcdba4190, (q31_t)0x185ad83c, (q31_t)0xcdc20960, - (q31_t)0x1850fb8e, (q31_t)0xcdc9d320, (q31_t)0x18472069, (q31_t)0xcdd19ed0, - (q31_t)0x183d46cc, (q31_t)0xcdd96c6f, (q31_t)0x18336eb7, (q31_t)0xcde13bfd, - (q31_t)0x1829982b, (q31_t)0xcde90d79, (q31_t)0x181fc328, (q31_t)0xcdf0e0e4, - (q31_t)0x1815efae, (q31_t)0xcdf8b63d, (q31_t)0x180c1dbf, (q31_t)0xce008d84, - (q31_t)0x18024d59, (q31_t)0xce0866b8, (q31_t)0x17f87e7f, (q31_t)0xce1041d9, - (q31_t)0x17eeb130, (q31_t)0xce181ee8, (q31_t)0x17e4e56c, (q31_t)0xce1ffde2, - (q31_t)0x17db1b34, (q31_t)0xce27dec9, (q31_t)0x17d15288, (q31_t)0xce2fc19c, - (q31_t)0x17c78b68, (q31_t)0xce37a65b, (q31_t)0x17bdc5d6, (q31_t)0xce3f8d05, - (q31_t)0x17b401d1, (q31_t)0xce47759a, (q31_t)0x17aa3f5a, (q31_t)0xce4f6019, - (q31_t)0x17a07e70, (q31_t)0xce574c84, (q31_t)0x1796bf16, (q31_t)0xce5f3ad8, - (q31_t)0x178d014a, (q31_t)0xce672b16, (q31_t)0x1783450d, (q31_t)0xce6f1d3d, - (q31_t)0x17798a60, (q31_t)0xce77114e, (q31_t)0x176fd143, (q31_t)0xce7f0748, - (q31_t)0x176619b6, (q31_t)0xce86ff2a, (q31_t)0x175c63ba, (q31_t)0xce8ef8f4, - (q31_t)0x1752af4f, (q31_t)0xce96f4a7, (q31_t)0x1748fc75, (q31_t)0xce9ef241, - (q31_t)0x173f4b2e, (q31_t)0xcea6f1c2, (q31_t)0x17359b78, (q31_t)0xceaef32b, - (q31_t)0x172bed55, (q31_t)0xceb6f67a, (q31_t)0x172240c5, (q31_t)0xcebefbb0, - (q31_t)0x171895c9, (q31_t)0xcec702cb, (q31_t)0x170eec60, (q31_t)0xcecf0bcd, - (q31_t)0x1705448b, (q31_t)0xced716b4, (q31_t)0x16fb9e4b, (q31_t)0xcedf2380, - (q31_t)0x16f1f99f, (q31_t)0xcee73231, (q31_t)0x16e85689, (q31_t)0xceef42c7, - (q31_t)0x16deb508, (q31_t)0xcef75541, (q31_t)0x16d5151d, (q31_t)0xceff699f, - (q31_t)0x16cb76c9, (q31_t)0xcf077fe1, (q31_t)0x16c1da0b, (q31_t)0xcf0f9805, - (q31_t)0x16b83ee4, (q31_t)0xcf17b20d, (q31_t)0x16aea555, (q31_t)0xcf1fcdf8, - (q31_t)0x16a50d5d, (q31_t)0xcf27ebc5, (q31_t)0x169b76fe, (q31_t)0xcf300b74, - (q31_t)0x1691e237, (q31_t)0xcf382d05, (q31_t)0x16884f09, (q31_t)0xcf405077, - (q31_t)0x167ebd74, (q31_t)0xcf4875ca, (q31_t)0x16752d79, (q31_t)0xcf509cfe, - (q31_t)0x166b9f18, (q31_t)0xcf58c613, (q31_t)0x16621251, (q31_t)0xcf60f108, - (q31_t)0x16588725, (q31_t)0xcf691ddd, (q31_t)0x164efd94, (q31_t)0xcf714c91, - (q31_t)0x1645759f, (q31_t)0xcf797d24, (q31_t)0x163bef46, (q31_t)0xcf81af97, - (q31_t)0x16326a88, (q31_t)0xcf89e3e8, (q31_t)0x1628e767, (q31_t)0xcf921a17, - (q31_t)0x161f65e4, (q31_t)0xcf9a5225, (q31_t)0x1615e5fd, (q31_t)0xcfa28c10, - (q31_t)0x160c67b4, (q31_t)0xcfaac7d8, (q31_t)0x1602eb0a, (q31_t)0xcfb3057d, - (q31_t)0x15f96ffd, (q31_t)0xcfbb4500, (q31_t)0x15eff690, (q31_t)0xcfc3865e, - (q31_t)0x15e67ec1, (q31_t)0xcfcbc999, (q31_t)0x15dd0892, (q31_t)0xcfd40eaf, - (q31_t)0x15d39403, (q31_t)0xcfdc55a1, (q31_t)0x15ca2115, (q31_t)0xcfe49e6d, - (q31_t)0x15c0afc6, (q31_t)0xcfece915, (q31_t)0x15b74019, (q31_t)0xcff53597, - (q31_t)0x15add20d, (q31_t)0xcffd83f4, (q31_t)0x15a465a3, (q31_t)0xd005d42a, - (q31_t)0x159afadb, (q31_t)0xd00e2639, (q31_t)0x159191b5, (q31_t)0xd0167a22, - (q31_t)0x15882a32, (q31_t)0xd01ecfe4, (q31_t)0x157ec452, (q31_t)0xd027277e, - (q31_t)0x15756016, (q31_t)0xd02f80f1, (q31_t)0x156bfd7d, (q31_t)0xd037dc3b, - (q31_t)0x15629c89, (q31_t)0xd040395d, (q31_t)0x15593d3a, (q31_t)0xd0489856, - (q31_t)0x154fdf8f, (q31_t)0xd050f926, (q31_t)0x15468389, (q31_t)0xd0595bcd, - (q31_t)0x153d292a, (q31_t)0xd061c04a, (q31_t)0x1533d070, (q31_t)0xd06a269d, - (q31_t)0x152a795d, (q31_t)0xd0728ec6, (q31_t)0x152123f0, (q31_t)0xd07af8c4, - (q31_t)0x1517d02b, (q31_t)0xd0836497, (q31_t)0x150e7e0d, (q31_t)0xd08bd23f, - (q31_t)0x15052d97, (q31_t)0xd09441bb, (q31_t)0x14fbdec9, (q31_t)0xd09cb30b, - (q31_t)0x14f291a4, (q31_t)0xd0a5262f, (q31_t)0x14e94627, (q31_t)0xd0ad9b26, - (q31_t)0x14dffc54, (q31_t)0xd0b611f1, (q31_t)0x14d6b42b, (q31_t)0xd0be8a8d, - (q31_t)0x14cd6dab, (q31_t)0xd0c704fd, (q31_t)0x14c428d6, (q31_t)0xd0cf813e, - (q31_t)0x14bae5ab, (q31_t)0xd0d7ff51, (q31_t)0x14b1a42c, (q31_t)0xd0e07f36, - (q31_t)0x14a86458, (q31_t)0xd0e900ec, (q31_t)0x149f2630, (q31_t)0xd0f18472, - (q31_t)0x1495e9b3, (q31_t)0xd0fa09c9, (q31_t)0x148caee4, (q31_t)0xd10290f0, - (q31_t)0x148375c1, (q31_t)0xd10b19e7, (q31_t)0x147a3e4b, (q31_t)0xd113a4ad, - (q31_t)0x14710883, (q31_t)0xd11c3142, (q31_t)0x1467d469, (q31_t)0xd124bfa6, - (q31_t)0x145ea1fd, (q31_t)0xd12d4fd9, (q31_t)0x14557140, (q31_t)0xd135e1d9, - (q31_t)0x144c4232, (q31_t)0xd13e75a8, (q31_t)0x144314d3, (q31_t)0xd1470b44, - (q31_t)0x1439e923, (q31_t)0xd14fa2ad, (q31_t)0x1430bf24, (q31_t)0xd1583be2, - (q31_t)0x142796d5, (q31_t)0xd160d6e5, (q31_t)0x141e7037, (q31_t)0xd16973b3, - (q31_t)0x14154b4a, (q31_t)0xd172124d, (q31_t)0x140c280e, (q31_t)0xd17ab2b3, - (q31_t)0x14030684, (q31_t)0xd18354e4, (q31_t)0x13f9e6ad, (q31_t)0xd18bf8e0, - (q31_t)0x13f0c887, (q31_t)0xd1949ea6, (q31_t)0x13e7ac15, (q31_t)0xd19d4636, - (q31_t)0x13de9156, (q31_t)0xd1a5ef90, (q31_t)0x13d5784a, (q31_t)0xd1ae9ab4, - (q31_t)0x13cc60f2, (q31_t)0xd1b747a0, (q31_t)0x13c34b4f, (q31_t)0xd1bff656, - (q31_t)0x13ba3760, (q31_t)0xd1c8a6d4, (q31_t)0x13b12526, (q31_t)0xd1d1591a, - (q31_t)0x13a814a2, (q31_t)0xd1da0d28, (q31_t)0x139f05d3, (q31_t)0xd1e2c2fd, - (q31_t)0x1395f8ba, (q31_t)0xd1eb7a9a, (q31_t)0x138ced57, (q31_t)0xd1f433fd, - (q31_t)0x1383e3ab, (q31_t)0xd1fcef27, (q31_t)0x137adbb6, (q31_t)0xd205ac17, - (q31_t)0x1371d579, (q31_t)0xd20e6acc, (q31_t)0x1368d0f3, (q31_t)0xd2172b48, - (q31_t)0x135fce26, (q31_t)0xd21fed88, (q31_t)0x1356cd11, (q31_t)0xd228b18d, - (q31_t)0x134dcdb4, (q31_t)0xd2317756, (q31_t)0x1344d011, (q31_t)0xd23a3ee4, - (q31_t)0x133bd427, (q31_t)0xd2430835, (q31_t)0x1332d9f7, (q31_t)0xd24bd34a, - (q31_t)0x1329e181, (q31_t)0xd254a021, (q31_t)0x1320eac6, (q31_t)0xd25d6ebc, - (q31_t)0x1317f5c6, (q31_t)0xd2663f19, (q31_t)0x130f0280, (q31_t)0xd26f1138, - (q31_t)0x130610f7, (q31_t)0xd277e518, (q31_t)0x12fd2129, (q31_t)0xd280babb, - (q31_t)0x12f43318, (q31_t)0xd289921e, (q31_t)0x12eb46c3, (q31_t)0xd2926b41, - (q31_t)0x12e25c2b, (q31_t)0xd29b4626, (q31_t)0x12d97350, (q31_t)0xd2a422ca, - (q31_t)0x12d08c33, (q31_t)0xd2ad012e, (q31_t)0x12c7a6d4, (q31_t)0xd2b5e151, - (q31_t)0x12bec333, (q31_t)0xd2bec333, (q31_t)0x12b5e151, (q31_t)0xd2c7a6d4, - (q31_t)0x12ad012e, (q31_t)0xd2d08c33, (q31_t)0x12a422ca, (q31_t)0xd2d97350, - (q31_t)0x129b4626, (q31_t)0xd2e25c2b, (q31_t)0x12926b41, (q31_t)0xd2eb46c3, - (q31_t)0x1289921e, (q31_t)0xd2f43318, (q31_t)0x1280babb, (q31_t)0xd2fd2129, - (q31_t)0x1277e518, (q31_t)0xd30610f7, (q31_t)0x126f1138, (q31_t)0xd30f0280, - (q31_t)0x12663f19, (q31_t)0xd317f5c6, (q31_t)0x125d6ebc, (q31_t)0xd320eac6, - (q31_t)0x1254a021, (q31_t)0xd329e181, (q31_t)0x124bd34a, (q31_t)0xd332d9f7, - (q31_t)0x12430835, (q31_t)0xd33bd427, (q31_t)0x123a3ee4, (q31_t)0xd344d011, - (q31_t)0x12317756, (q31_t)0xd34dcdb4, (q31_t)0x1228b18d, (q31_t)0xd356cd11, - (q31_t)0x121fed88, (q31_t)0xd35fce26, (q31_t)0x12172b48, (q31_t)0xd368d0f3, - (q31_t)0x120e6acc, (q31_t)0xd371d579, (q31_t)0x1205ac17, (q31_t)0xd37adbb6, - (q31_t)0x11fcef27, (q31_t)0xd383e3ab, (q31_t)0x11f433fd, (q31_t)0xd38ced57, - (q31_t)0x11eb7a9a, (q31_t)0xd395f8ba, (q31_t)0x11e2c2fd, (q31_t)0xd39f05d3, - (q31_t)0x11da0d28, (q31_t)0xd3a814a2, (q31_t)0x11d1591a, (q31_t)0xd3b12526, - (q31_t)0x11c8a6d4, (q31_t)0xd3ba3760, (q31_t)0x11bff656, (q31_t)0xd3c34b4f, - (q31_t)0x11b747a0, (q31_t)0xd3cc60f2, (q31_t)0x11ae9ab4, (q31_t)0xd3d5784a, - (q31_t)0x11a5ef90, (q31_t)0xd3de9156, (q31_t)0x119d4636, (q31_t)0xd3e7ac15, - (q31_t)0x11949ea6, (q31_t)0xd3f0c887, (q31_t)0x118bf8e0, (q31_t)0xd3f9e6ad, - (q31_t)0x118354e4, (q31_t)0xd4030684, (q31_t)0x117ab2b3, (q31_t)0xd40c280e, - (q31_t)0x1172124d, (q31_t)0xd4154b4a, (q31_t)0x116973b3, (q31_t)0xd41e7037, - (q31_t)0x1160d6e5, (q31_t)0xd42796d5, (q31_t)0x11583be2, (q31_t)0xd430bf24, - (q31_t)0x114fa2ad, (q31_t)0xd439e923, (q31_t)0x11470b44, (q31_t)0xd44314d3, - (q31_t)0x113e75a8, (q31_t)0xd44c4232, (q31_t)0x1135e1d9, (q31_t)0xd4557140, - (q31_t)0x112d4fd9, (q31_t)0xd45ea1fd, (q31_t)0x1124bfa6, (q31_t)0xd467d469, - (q31_t)0x111c3142, (q31_t)0xd4710883, (q31_t)0x1113a4ad, (q31_t)0xd47a3e4b, - (q31_t)0x110b19e7, (q31_t)0xd48375c1, (q31_t)0x110290f0, (q31_t)0xd48caee4, - (q31_t)0x10fa09c9, (q31_t)0xd495e9b3, (q31_t)0x10f18472, (q31_t)0xd49f2630, - (q31_t)0x10e900ec, (q31_t)0xd4a86458, (q31_t)0x10e07f36, (q31_t)0xd4b1a42c, - (q31_t)0x10d7ff51, (q31_t)0xd4bae5ab, (q31_t)0x10cf813e, (q31_t)0xd4c428d6, - (q31_t)0x10c704fd, (q31_t)0xd4cd6dab, (q31_t)0x10be8a8d, (q31_t)0xd4d6b42b, - (q31_t)0x10b611f1, (q31_t)0xd4dffc54, (q31_t)0x10ad9b26, (q31_t)0xd4e94627, - (q31_t)0x10a5262f, (q31_t)0xd4f291a4, (q31_t)0x109cb30b, (q31_t)0xd4fbdec9, - (q31_t)0x109441bb, (q31_t)0xd5052d97, (q31_t)0x108bd23f, (q31_t)0xd50e7e0d, - (q31_t)0x10836497, (q31_t)0xd517d02b, (q31_t)0x107af8c4, (q31_t)0xd52123f0, - (q31_t)0x10728ec6, (q31_t)0xd52a795d, (q31_t)0x106a269d, (q31_t)0xd533d070, - (q31_t)0x1061c04a, (q31_t)0xd53d292a, (q31_t)0x10595bcd, (q31_t)0xd5468389, - (q31_t)0x1050f926, (q31_t)0xd54fdf8f, (q31_t)0x10489856, (q31_t)0xd5593d3a, - (q31_t)0x1040395d, (q31_t)0xd5629c89, (q31_t)0x1037dc3b, (q31_t)0xd56bfd7d, - (q31_t)0x102f80f1, (q31_t)0xd5756016, (q31_t)0x1027277e, (q31_t)0xd57ec452, - (q31_t)0x101ecfe4, (q31_t)0xd5882a32, (q31_t)0x10167a22, (q31_t)0xd59191b5, - (q31_t)0x100e2639, (q31_t)0xd59afadb, (q31_t)0x1005d42a, (q31_t)0xd5a465a3, - (q31_t)0xffd83f4, (q31_t)0xd5add20d, (q31_t)0xff53597, (q31_t)0xd5b74019, - (q31_t)0xfece915, (q31_t)0xd5c0afc6, (q31_t)0xfe49e6d, (q31_t)0xd5ca2115, - (q31_t)0xfdc55a1, (q31_t)0xd5d39403, (q31_t)0xfd40eaf, (q31_t)0xd5dd0892, - (q31_t)0xfcbc999, (q31_t)0xd5e67ec1, (q31_t)0xfc3865e, (q31_t)0xd5eff690, - (q31_t)0xfbb4500, (q31_t)0xd5f96ffd, (q31_t)0xfb3057d, (q31_t)0xd602eb0a, - (q31_t)0xfaac7d8, (q31_t)0xd60c67b4, (q31_t)0xfa28c10, (q31_t)0xd615e5fd, - (q31_t)0xf9a5225, (q31_t)0xd61f65e4, (q31_t)0xf921a17, (q31_t)0xd628e767, - (q31_t)0xf89e3e8, (q31_t)0xd6326a88, (q31_t)0xf81af97, (q31_t)0xd63bef46, - (q31_t)0xf797d24, (q31_t)0xd645759f, (q31_t)0xf714c91, (q31_t)0xd64efd94, - (q31_t)0xf691ddd, (q31_t)0xd6588725, (q31_t)0xf60f108, (q31_t)0xd6621251, - (q31_t)0xf58c613, (q31_t)0xd66b9f18, (q31_t)0xf509cfe, (q31_t)0xd6752d79, - (q31_t)0xf4875ca, (q31_t)0xd67ebd74, (q31_t)0xf405077, (q31_t)0xd6884f09, - (q31_t)0xf382d05, (q31_t)0xd691e237, (q31_t)0xf300b74, (q31_t)0xd69b76fe, - (q31_t)0xf27ebc5, (q31_t)0xd6a50d5d, (q31_t)0xf1fcdf8, (q31_t)0xd6aea555, - (q31_t)0xf17b20d, (q31_t)0xd6b83ee4, (q31_t)0xf0f9805, (q31_t)0xd6c1da0b, - (q31_t)0xf077fe1, (q31_t)0xd6cb76c9, (q31_t)0xeff699f, (q31_t)0xd6d5151d, - (q31_t)0xef75541, (q31_t)0xd6deb508, (q31_t)0xeef42c7, (q31_t)0xd6e85689, - (q31_t)0xee73231, (q31_t)0xd6f1f99f, (q31_t)0xedf2380, (q31_t)0xd6fb9e4b, - (q31_t)0xed716b4, (q31_t)0xd705448b, (q31_t)0xecf0bcd, (q31_t)0xd70eec60, - (q31_t)0xec702cb, (q31_t)0xd71895c9, (q31_t)0xebefbb0, (q31_t)0xd72240c5, - (q31_t)0xeb6f67a, (q31_t)0xd72bed55, (q31_t)0xeaef32b, (q31_t)0xd7359b78, - (q31_t)0xea6f1c2, (q31_t)0xd73f4b2e, (q31_t)0xe9ef241, (q31_t)0xd748fc75, - (q31_t)0xe96f4a7, (q31_t)0xd752af4f, (q31_t)0xe8ef8f4, (q31_t)0xd75c63ba, - (q31_t)0xe86ff2a, (q31_t)0xd76619b6, (q31_t)0xe7f0748, (q31_t)0xd76fd143, - (q31_t)0xe77114e, (q31_t)0xd7798a60, (q31_t)0xe6f1d3d, (q31_t)0xd783450d, - (q31_t)0xe672b16, (q31_t)0xd78d014a, (q31_t)0xe5f3ad8, (q31_t)0xd796bf16, - (q31_t)0xe574c84, (q31_t)0xd7a07e70, (q31_t)0xe4f6019, (q31_t)0xd7aa3f5a, - (q31_t)0xe47759a, (q31_t)0xd7b401d1, (q31_t)0xe3f8d05, (q31_t)0xd7bdc5d6, - (q31_t)0xe37a65b, (q31_t)0xd7c78b68, (q31_t)0xe2fc19c, (q31_t)0xd7d15288, - (q31_t)0xe27dec9, (q31_t)0xd7db1b34, (q31_t)0xe1ffde2, (q31_t)0xd7e4e56c, - (q31_t)0xe181ee8, (q31_t)0xd7eeb130, (q31_t)0xe1041d9, (q31_t)0xd7f87e7f, - (q31_t)0xe0866b8, (q31_t)0xd8024d59, (q31_t)0xe008d84, (q31_t)0xd80c1dbf, - (q31_t)0xdf8b63d, (q31_t)0xd815efae, (q31_t)0xdf0e0e4, (q31_t)0xd81fc328, - (q31_t)0xde90d79, (q31_t)0xd829982b, (q31_t)0xde13bfd, (q31_t)0xd8336eb7, - (q31_t)0xdd96c6f, (q31_t)0xd83d46cc, (q31_t)0xdd19ed0, (q31_t)0xd8472069, - (q31_t)0xdc9d320, (q31_t)0xd850fb8e, (q31_t)0xdc20960, (q31_t)0xd85ad83c, - (q31_t)0xdba4190, (q31_t)0xd864b670, (q31_t)0xdb27bb0, (q31_t)0xd86e962b, - (q31_t)0xdaab7c0, (q31_t)0xd878776d, (q31_t)0xda2f5c2, (q31_t)0xd8825a35, - (q31_t)0xd9b35b4, (q31_t)0xd88c3e83, (q31_t)0xd937798, (q31_t)0xd8962456, - (q31_t)0xd8bbb6d, (q31_t)0xd8a00bae, (q31_t)0xd840134, (q31_t)0xd8a9f48a, - (q31_t)0xd7c48ee, (q31_t)0xd8b3deeb, (q31_t)0xd74929a, (q31_t)0xd8bdcad0, - (q31_t)0xd6cde39, (q31_t)0xd8c7b838, (q31_t)0xd652bcb, (q31_t)0xd8d1a724, - (q31_t)0xd5d7b50, (q31_t)0xd8db9792, (q31_t)0xd55ccca, (q31_t)0xd8e58982, - (q31_t)0xd4e2037, (q31_t)0xd8ef7cf4, (q31_t)0xd467599, (q31_t)0xd8f971e8, - (q31_t)0xd3eccef, (q31_t)0xd903685d, (q31_t)0xd37263a, (q31_t)0xd90d6053, - (q31_t)0xd2f817b, (q31_t)0xd91759c9, (q31_t)0xd27deb0, (q31_t)0xd92154bf, - (q31_t)0xd203ddc, (q31_t)0xd92b5135, (q31_t)0xd189efe, (q31_t)0xd9354f2a, - (q31_t)0xd110216, (q31_t)0xd93f4e9e, (q31_t)0xd096725, (q31_t)0xd9494f90, - (q31_t)0xd01ce2b, (q31_t)0xd9535201, (q31_t)0xcfa3729, (q31_t)0xd95d55ef, - (q31_t)0xcf2a21d, (q31_t)0xd9675b5a, (q31_t)0xceb0f0a, (q31_t)0xd9716243, - (q31_t)0xce37def, (q31_t)0xd97b6aa8, (q31_t)0xcdbeecc, (q31_t)0xd9857489, - (q31_t)0xcd461a2, (q31_t)0xd98f7fe6, (q31_t)0xcccd671, (q31_t)0xd9998cbe, - (q31_t)0xcc54d3a, (q31_t)0xd9a39b11, (q31_t)0xcbdc5fc, (q31_t)0xd9adaadf, - (q31_t)0xcb640b8, (q31_t)0xd9b7bc27, (q31_t)0xcaebd6e, (q31_t)0xd9c1cee9, - (q31_t)0xca73c1e, (q31_t)0xd9cbe325, (q31_t)0xc9fbcca, (q31_t)0xd9d5f8d9, - (q31_t)0xc983f70, (q31_t)0xd9e01006, (q31_t)0xc90c412, (q31_t)0xd9ea28ac, - (q31_t)0xc894aaf, (q31_t)0xd9f442c9, (q31_t)0xc81d349, (q31_t)0xd9fe5e5e, - (q31_t)0xc7a5dde, (q31_t)0xda087b69, (q31_t)0xc72ea70, (q31_t)0xda1299ec, - (q31_t)0xc6b78ff, (q31_t)0xda1cb9e5, (q31_t)0xc64098b, (q31_t)0xda26db54, - (q31_t)0xc5c9c14, (q31_t)0xda30fe38, (q31_t)0xc55309b, (q31_t)0xda3b2292, - (q31_t)0xc4dc720, (q31_t)0xda454860, (q31_t)0xc465fa3, (q31_t)0xda4f6fa3, - (q31_t)0xc3efa25, (q31_t)0xda599859, (q31_t)0xc3796a5, (q31_t)0xda63c284, - (q31_t)0xc303524, (q31_t)0xda6dee21, (q31_t)0xc28d5a3, (q31_t)0xda781b31, - (q31_t)0xc217822, (q31_t)0xda8249b4, (q31_t)0xc1a1ca0, (q31_t)0xda8c79a9, - (q31_t)0xc12c31f, (q31_t)0xda96ab0f, (q31_t)0xc0b6b9e, (q31_t)0xdaa0dde7, - (q31_t)0xc04161e, (q31_t)0xdaab122f, (q31_t)0xbfcc29f, (q31_t)0xdab547e8, - (q31_t)0xbf57121, (q31_t)0xdabf7f11, (q31_t)0xbee21a5, (q31_t)0xdac9b7a9, - (q31_t)0xbe6d42b, (q31_t)0xdad3f1b1, (q31_t)0xbdf88b3, (q31_t)0xdade2d28, - (q31_t)0xbd83f3d, (q31_t)0xdae86a0d, (q31_t)0xbd0f7ca, (q31_t)0xdaf2a860, - (q31_t)0xbc9b25a, (q31_t)0xdafce821, (q31_t)0xbc26eee, (q31_t)0xdb072950, - (q31_t)0xbbb2d85, (q31_t)0xdb116beb, (q31_t)0xbb3ee20, (q31_t)0xdb1baff2, - (q31_t)0xbacb0bf, (q31_t)0xdb25f566, (q31_t)0xba57563, (q31_t)0xdb303c46, - (q31_t)0xb9e3c0b, (q31_t)0xdb3a8491, (q31_t)0xb9704b9, (q31_t)0xdb44ce46, - (q31_t)0xb8fcf6b, (q31_t)0xdb4f1967, (q31_t)0xb889c23, (q31_t)0xdb5965f1, - (q31_t)0xb816ae1, (q31_t)0xdb63b3e5, (q31_t)0xb7a3ba5, (q31_t)0xdb6e0342, - (q31_t)0xb730e70, (q31_t)0xdb785409, (q31_t)0xb6be341, (q31_t)0xdb82a638, - (q31_t)0xb64ba19, (q31_t)0xdb8cf9cf, (q31_t)0xb5d92f8, (q31_t)0xdb974ece, - (q31_t)0xb566ddf, (q31_t)0xdba1a534, (q31_t)0xb4f4acd, (q31_t)0xdbabfd01, - (q31_t)0xb4829c4, (q31_t)0xdbb65634, (q31_t)0xb410ac3, (q31_t)0xdbc0b0ce, - (q31_t)0xb39edca, (q31_t)0xdbcb0cce, (q31_t)0xb32d2da, (q31_t)0xdbd56a32, - (q31_t)0xb2bb9f4, (q31_t)0xdbdfc8fc, (q31_t)0xb24a316, (q31_t)0xdbea292b, - (q31_t)0xb1d8e43, (q31_t)0xdbf48abd, (q31_t)0xb167b79, (q31_t)0xdbfeedb3, - (q31_t)0xb0f6aba, (q31_t)0xdc09520d, (q31_t)0xb085c05, (q31_t)0xdc13b7c9, - (q31_t)0xb014f5b, (q31_t)0xdc1e1ee9, (q31_t)0xafa44bc, (q31_t)0xdc28876a, - (q31_t)0xaf33c28, (q31_t)0xdc32f14d, (q31_t)0xaec35a0, (q31_t)0xdc3d5c91, - (q31_t)0xae53123, (q31_t)0xdc47c936, (q31_t)0xade2eb3, (q31_t)0xdc52373c, - (q31_t)0xad72e4f, (q31_t)0xdc5ca6a2, (q31_t)0xad02ff8, (q31_t)0xdc671768, - (q31_t)0xac933ae, (q31_t)0xdc71898d, (q31_t)0xac23971, (q31_t)0xdc7bfd11, - (q31_t)0xabb4141, (q31_t)0xdc8671f3, (q31_t)0xab44b1f, (q31_t)0xdc90e834, - (q31_t)0xaad570c, (q31_t)0xdc9b5fd2, (q31_t)0xaa66506, (q31_t)0xdca5d8cd, - (q31_t)0xa9f750f, (q31_t)0xdcb05326, (q31_t)0xa988727, (q31_t)0xdcbacedb, - (q31_t)0xa919b4e, (q31_t)0xdcc54bec, (q31_t)0xa8ab184, (q31_t)0xdccfca59, - (q31_t)0xa83c9ca, (q31_t)0xdcda4a21, (q31_t)0xa7ce420, (q31_t)0xdce4cb44, - (q31_t)0xa760086, (q31_t)0xdcef4dc2, (q31_t)0xa6f1efc, (q31_t)0xdcf9d199, - (q31_t)0xa683f83, (q31_t)0xdd0456ca, (q31_t)0xa61621b, (q31_t)0xdd0edd55, - (q31_t)0xa5a86c4, (q31_t)0xdd196538, (q31_t)0xa53ad7e, (q31_t)0xdd23ee74, - (q31_t)0xa4cd64b, (q31_t)0xdd2e7908, (q31_t)0xa460129, (q31_t)0xdd3904f4, - (q31_t)0xa3f2e19, (q31_t)0xdd439236, (q31_t)0xa385d1d, (q31_t)0xdd4e20d0, - (q31_t)0xa318e32, (q31_t)0xdd58b0c0, (q31_t)0xa2ac15b, (q31_t)0xdd634206, - (q31_t)0xa23f698, (q31_t)0xdd6dd4a2, (q31_t)0xa1d2de7, (q31_t)0xdd786892, - (q31_t)0xa16674b, (q31_t)0xdd82fdd8, (q31_t)0xa0fa2c3, (q31_t)0xdd8d9472, - (q31_t)0xa08e04f, (q31_t)0xdd982c60, (q31_t)0xa021fef, (q31_t)0xdda2c5a2, - (q31_t)0x9fb61a5, (q31_t)0xddad6036, (q31_t)0x9f4a570, (q31_t)0xddb7fc1e, - (q31_t)0x9edeb50, (q31_t)0xddc29958, (q31_t)0x9e73346, (q31_t)0xddcd37e4, - (q31_t)0x9e07d51, (q31_t)0xddd7d7c1, (q31_t)0x9d9c973, (q31_t)0xdde278ef, - (q31_t)0x9d317ab, (q31_t)0xdded1b6e, (q31_t)0x9cc67fa, (q31_t)0xddf7bf3e, - (q31_t)0x9c5ba60, (q31_t)0xde02645d, (q31_t)0x9bf0edd, (q31_t)0xde0d0acc, - (q31_t)0x9b86572, (q31_t)0xde17b28a, (q31_t)0x9b1be1e, (q31_t)0xde225b96, - (q31_t)0x9ab18e3, (q31_t)0xde2d05f1, (q31_t)0x9a475bf, (q31_t)0xde37b199, - (q31_t)0x99dd4b4, (q31_t)0xde425e8f, (q31_t)0x99735c2, (q31_t)0xde4d0cd2, - (q31_t)0x99098e9, (q31_t)0xde57bc62, (q31_t)0x989fe29, (q31_t)0xde626d3e, - (q31_t)0x9836582, (q31_t)0xde6d1f65, (q31_t)0x97ccef5, (q31_t)0xde77d2d8, - (q31_t)0x9763a83, (q31_t)0xde828796, (q31_t)0x96fa82a, (q31_t)0xde8d3d9e, - (q31_t)0x96917ec, (q31_t)0xde97f4f1, (q31_t)0x96289c9, (q31_t)0xdea2ad8d, - (q31_t)0x95bfdc1, (q31_t)0xdead6773, (q31_t)0x95573d4, (q31_t)0xdeb822a1, - (q31_t)0x94eec03, (q31_t)0xdec2df18, (q31_t)0x948664d, (q31_t)0xdecd9cd7, - (q31_t)0x941e2b4, (q31_t)0xded85bdd, (q31_t)0x93b6137, (q31_t)0xdee31c2b, - (q31_t)0x934e1d6, (q31_t)0xdeedddc0, (q31_t)0x92e6492, (q31_t)0xdef8a09b, - (q31_t)0x927e96b, (q31_t)0xdf0364bc, (q31_t)0x9217062, (q31_t)0xdf0e2a22, - (q31_t)0x91af976, (q31_t)0xdf18f0ce, (q31_t)0x91484a8, (q31_t)0xdf23b8be, - (q31_t)0x90e11f7, (q31_t)0xdf2e81f3, (q31_t)0x907a166, (q31_t)0xdf394c6b, - (q31_t)0x90132f2, (q31_t)0xdf441828, (q31_t)0x8fac69e, (q31_t)0xdf4ee527, - (q31_t)0x8f45c68, (q31_t)0xdf59b369, (q31_t)0x8edf452, (q31_t)0xdf6482ed, - (q31_t)0x8e78e5b, (q31_t)0xdf6f53b3, (q31_t)0x8e12a84, (q31_t)0xdf7a25ba, - (q31_t)0x8dac8cd, (q31_t)0xdf84f902, (q31_t)0x8d46936, (q31_t)0xdf8fcd8b, - (q31_t)0x8ce0bc0, (q31_t)0xdf9aa354, (q31_t)0x8c7b06b, (q31_t)0xdfa57a5d, - (q31_t)0x8c15736, (q31_t)0xdfb052a5, (q31_t)0x8bb0023, (q31_t)0xdfbb2c2c, - (q31_t)0x8b4ab32, (q31_t)0xdfc606f1, (q31_t)0x8ae5862, (q31_t)0xdfd0e2f5, - (q31_t)0x8a807b4, (q31_t)0xdfdbc036, (q31_t)0x8a1b928, (q31_t)0xdfe69eb4, - (q31_t)0x89b6cbf, (q31_t)0xdff17e70, (q31_t)0x8952278, (q31_t)0xdffc5f67, - (q31_t)0x88eda54, (q31_t)0xe007419b, (q31_t)0x8889454, (q31_t)0xe012250a, - (q31_t)0x8825077, (q31_t)0xe01d09b4, (q31_t)0x87c0ebd, (q31_t)0xe027ef99, - (q31_t)0x875cf28, (q31_t)0xe032d6b8, (q31_t)0x86f91b7, (q31_t)0xe03dbf11, - (q31_t)0x869566a, (q31_t)0xe048a8a4, (q31_t)0x8631d42, (q31_t)0xe053936f, - (q31_t)0x85ce63e, (q31_t)0xe05e7f74, (q31_t)0x856b160, (q31_t)0xe0696cb0, - (q31_t)0x8507ea7, (q31_t)0xe0745b24, (q31_t)0x84a4e14, (q31_t)0xe07f4acf, - (q31_t)0x8441fa6, (q31_t)0xe08a3bb2, (q31_t)0x83df35f, (q31_t)0xe0952dcb, - (q31_t)0x837c93e, (q31_t)0xe0a0211a, (q31_t)0x831a143, (q31_t)0xe0ab159e, - (q31_t)0x82b7b70, (q31_t)0xe0b60b58, (q31_t)0x82557c3, (q31_t)0xe0c10247, - (q31_t)0x81f363d, (q31_t)0xe0cbfa6a, (q31_t)0x81916df, (q31_t)0xe0d6f3c1, - (q31_t)0x812f9a9, (q31_t)0xe0e1ee4b, (q31_t)0x80cde9b, (q31_t)0xe0ecea09, - (q31_t)0x806c5b5, (q31_t)0xe0f7e6f9, (q31_t)0x800aef7, (q31_t)0xe102e51c, - (q31_t)0x7fa9a62, (q31_t)0xe10de470, (q31_t)0x7f487f6, (q31_t)0xe118e4f6, - (q31_t)0x7ee77b3, (q31_t)0xe123e6ad, (q31_t)0x7e8699a, (q31_t)0xe12ee995, - (q31_t)0x7e25daa, (q31_t)0xe139edac, (q31_t)0x7dc53e3, (q31_t)0xe144f2f3, - (q31_t)0x7d64c47, (q31_t)0xe14ff96a, (q31_t)0x7d046d6, (q31_t)0xe15b0110, - (q31_t)0x7ca438f, (q31_t)0xe16609e3, (q31_t)0x7c44272, (q31_t)0xe17113e5, - (q31_t)0x7be4381, (q31_t)0xe17c1f15, (q31_t)0x7b846ba, (q31_t)0xe1872b72, - (q31_t)0x7b24c20, (q31_t)0xe19238fb, (q31_t)0x7ac53b1, (q31_t)0xe19d47b1, - (q31_t)0x7a65d6e, (q31_t)0xe1a85793, (q31_t)0x7a06957, (q31_t)0xe1b368a0, - (q31_t)0x79a776c, (q31_t)0xe1be7ad8, (q31_t)0x79487ae, (q31_t)0xe1c98e3b, - (q31_t)0x78e9a1d, (q31_t)0xe1d4a2c8, (q31_t)0x788aeb9, (q31_t)0xe1dfb87f, - (q31_t)0x782c582, (q31_t)0xe1eacf5f, (q31_t)0x77cde79, (q31_t)0xe1f5e768, - (q31_t)0x776f99d, (q31_t)0xe2010099, (q31_t)0x77116f0, (q31_t)0xe20c1af3, - (q31_t)0x76b3671, (q31_t)0xe2173674, (q31_t)0x7655820, (q31_t)0xe222531c, - (q31_t)0x75f7bfe, (q31_t)0xe22d70eb, (q31_t)0x759a20a, (q31_t)0xe2388fe1, - (q31_t)0x753ca46, (q31_t)0xe243affc, (q31_t)0x74df4b1, (q31_t)0xe24ed13d, - (q31_t)0x748214c, (q31_t)0xe259f3a3, (q31_t)0x7425016, (q31_t)0xe265172e, - (q31_t)0x73c8111, (q31_t)0xe2703bdc, (q31_t)0x736b43c, (q31_t)0xe27b61af, - (q31_t)0x730e997, (q31_t)0xe28688a4, (q31_t)0x72b2123, (q31_t)0xe291b0bd, - (q31_t)0x7255ae0, (q31_t)0xe29cd9f8, (q31_t)0x71f96ce, (q31_t)0xe2a80456, - (q31_t)0x719d4ed, (q31_t)0xe2b32fd4, (q31_t)0x714153e, (q31_t)0xe2be5c74, - (q31_t)0x70e57c0, (q31_t)0xe2c98a35, (q31_t)0x7089c75, (q31_t)0xe2d4b916, - (q31_t)0x702e35c, (q31_t)0xe2dfe917, (q31_t)0x6fd2c75, (q31_t)0xe2eb1a37, - (q31_t)0x6f777c1, (q31_t)0xe2f64c77, (q31_t)0x6f1c540, (q31_t)0xe3017fd5, - (q31_t)0x6ec14f2, (q31_t)0xe30cb451, (q31_t)0x6e666d7, (q31_t)0xe317e9eb, - (q31_t)0x6e0baf0, (q31_t)0xe32320a2, (q31_t)0x6db113d, (q31_t)0xe32e5876, - (q31_t)0x6d569be, (q31_t)0xe3399167, (q31_t)0x6cfc472, (q31_t)0xe344cb73, - (q31_t)0x6ca215c, (q31_t)0xe350069b, (q31_t)0x6c4807a, (q31_t)0xe35b42df, - (q31_t)0x6bee1cd, (q31_t)0xe366803c, (q31_t)0x6b94554, (q31_t)0xe371beb5, - (q31_t)0x6b3ab12, (q31_t)0xe37cfe47, (q31_t)0x6ae1304, (q31_t)0xe3883ef2, - (q31_t)0x6a87d2d, (q31_t)0xe39380b6, (q31_t)0x6a2e98b, (q31_t)0xe39ec393, - (q31_t)0x69d5820, (q31_t)0xe3aa0788, (q31_t)0x697c8eb, (q31_t)0xe3b54c95, - (q31_t)0x6923bec, (q31_t)0xe3c092b9, (q31_t)0x68cb124, (q31_t)0xe3cbd9f4, - (q31_t)0x6872894, (q31_t)0xe3d72245, (q31_t)0x681a23a, (q31_t)0xe3e26bac, - (q31_t)0x67c1e18, (q31_t)0xe3edb628, (q31_t)0x6769c2e, (q31_t)0xe3f901ba, - (q31_t)0x6711c7b, (q31_t)0xe4044e60, (q31_t)0x66b9f01, (q31_t)0xe40f9c1a, - (q31_t)0x66623be, (q31_t)0xe41aeae8, (q31_t)0x660aab5, (q31_t)0xe4263ac9, - (q31_t)0x65b33e4, (q31_t)0xe4318bbe, (q31_t)0x655bf4c, (q31_t)0xe43cddc4, - (q31_t)0x6504ced, (q31_t)0xe44830dd, (q31_t)0x64adcc7, (q31_t)0xe4538507, - (q31_t)0x6456edb, (q31_t)0xe45eda43, (q31_t)0x6400329, (q31_t)0xe46a308f, - (q31_t)0x63a99b1, (q31_t)0xe47587eb, (q31_t)0x6353273, (q31_t)0xe480e057, - (q31_t)0x62fcd6f, (q31_t)0xe48c39d3, (q31_t)0x62a6aa6, (q31_t)0xe497945d, - (q31_t)0x6250a18, (q31_t)0xe4a2eff6, (q31_t)0x61fabc4, (q31_t)0xe4ae4c9d, - (q31_t)0x61a4fac, (q31_t)0xe4b9aa52, (q31_t)0x614f5cf, (q31_t)0xe4c50914, - (q31_t)0x60f9e2e, (q31_t)0xe4d068e2, (q31_t)0x60a48c9, (q31_t)0xe4dbc9bd, - (q31_t)0x604f5a0, (q31_t)0xe4e72ba4, (q31_t)0x5ffa4b3, (q31_t)0xe4f28e96, - (q31_t)0x5fa5603, (q31_t)0xe4fdf294, (q31_t)0x5f5098f, (q31_t)0xe509579b, - (q31_t)0x5efbf58, (q31_t)0xe514bdad, (q31_t)0x5ea775e, (q31_t)0xe52024c9, - (q31_t)0x5e531a1, (q31_t)0xe52b8cee, (q31_t)0x5dfee22, (q31_t)0xe536f61b, - (q31_t)0x5daace1, (q31_t)0xe5426051, (q31_t)0x5d56ddd, (q31_t)0xe54dcb8f, - (q31_t)0x5d03118, (q31_t)0xe55937d5, (q31_t)0x5caf690, (q31_t)0xe564a521, - (q31_t)0x5c5be47, (q31_t)0xe5701374, (q31_t)0x5c0883d, (q31_t)0xe57b82cd, - (q31_t)0x5bb5472, (q31_t)0xe586f32c, (q31_t)0x5b622e6, (q31_t)0xe5926490, - (q31_t)0x5b0f399, (q31_t)0xe59dd6f9, (q31_t)0x5abc68c, (q31_t)0xe5a94a67, - (q31_t)0x5a69bbe, (q31_t)0xe5b4bed8, (q31_t)0x5a17330, (q31_t)0xe5c0344d, - (q31_t)0x59c4ce3, (q31_t)0xe5cbaac5, (q31_t)0x59728d5, (q31_t)0xe5d72240, - (q31_t)0x5920708, (q31_t)0xe5e29abc, (q31_t)0x58ce77c, (q31_t)0xe5ee143b, - (q31_t)0x587ca31, (q31_t)0xe5f98ebb, (q31_t)0x582af26, (q31_t)0xe6050a3b, - (q31_t)0x57d965d, (q31_t)0xe61086bc, (q31_t)0x5787fd6, (q31_t)0xe61c043d, - (q31_t)0x5736b90, (q31_t)0xe62782be, (q31_t)0x56e598c, (q31_t)0xe633023e, - (q31_t)0x56949ca, (q31_t)0xe63e82bc, (q31_t)0x5643c4a, (q31_t)0xe64a0438, - (q31_t)0x55f310d, (q31_t)0xe65586b3, (q31_t)0x55a2812, (q31_t)0xe6610a2a, - (q31_t)0x555215a, (q31_t)0xe66c8e9f, (q31_t)0x5501ce5, (q31_t)0xe6781410, - (q31_t)0x54b1ab4, (q31_t)0xe6839a7c, (q31_t)0x5461ac6, (q31_t)0xe68f21e5, - (q31_t)0x5411d1b, (q31_t)0xe69aaa48, (q31_t)0x53c21b4, (q31_t)0xe6a633a6, - (q31_t)0x5372891, (q31_t)0xe6b1bdff, (q31_t)0x53231b3, (q31_t)0xe6bd4951, - (q31_t)0x52d3d18, (q31_t)0xe6c8d59c, (q31_t)0x5284ac3, (q31_t)0xe6d462e1, - (q31_t)0x5235ab2, (q31_t)0xe6dff11d, (q31_t)0x51e6ce6, (q31_t)0xe6eb8052, - (q31_t)0x519815f, (q31_t)0xe6f7107e, (q31_t)0x514981d, (q31_t)0xe702a1a1, - (q31_t)0x50fb121, (q31_t)0xe70e33bb, (q31_t)0x50acc6b, (q31_t)0xe719c6cb, - (q31_t)0x505e9fb, (q31_t)0xe7255ad1, (q31_t)0x50109d0, (q31_t)0xe730efcc, - (q31_t)0x4fc2bec, (q31_t)0xe73c85bc, (q31_t)0x4f7504e, (q31_t)0xe7481ca1, - (q31_t)0x4f276f7, (q31_t)0xe753b479, (q31_t)0x4ed9fe7, (q31_t)0xe75f4d45, - (q31_t)0x4e8cb1e, (q31_t)0xe76ae704, (q31_t)0x4e3f89c, (q31_t)0xe77681b6, - (q31_t)0x4df2862, (q31_t)0xe7821d59, (q31_t)0x4da5a6f, (q31_t)0xe78db9ef, - (q31_t)0x4d58ec3, (q31_t)0xe7995776, (q31_t)0x4d0c560, (q31_t)0xe7a4f5ed, - (q31_t)0x4cbfe45, (q31_t)0xe7b09555, (q31_t)0x4c73972, (q31_t)0xe7bc35ad, - (q31_t)0x4c276e8, (q31_t)0xe7c7d6f4, (q31_t)0x4bdb6a6, (q31_t)0xe7d3792b, - (q31_t)0x4b8f8ad, (q31_t)0xe7df1c50, (q31_t)0x4b43cfd, (q31_t)0xe7eac063, - (q31_t)0x4af8397, (q31_t)0xe7f66564, (q31_t)0x4aacc7a, (q31_t)0xe8020b52, - (q31_t)0x4a617a6, (q31_t)0xe80db22d, (q31_t)0x4a1651c, (q31_t)0xe81959f4, - (q31_t)0x49cb4dd, (q31_t)0xe82502a7, (q31_t)0x49806e7, (q31_t)0xe830ac45, - (q31_t)0x4935b3c, (q31_t)0xe83c56cf, (q31_t)0x48eb1db, (q31_t)0xe8480243, - (q31_t)0x48a0ac4, (q31_t)0xe853aea1, (q31_t)0x48565f9, (q31_t)0xe85f5be9, - (q31_t)0x480c379, (q31_t)0xe86b0a1a, (q31_t)0x47c2344, (q31_t)0xe876b934, - (q31_t)0x477855a, (q31_t)0xe8826936, (q31_t)0x472e9bc, (q31_t)0xe88e1a20, - (q31_t)0x46e5069, (q31_t)0xe899cbf1, (q31_t)0x469b963, (q31_t)0xe8a57ea9, - (q31_t)0x46524a9, (q31_t)0xe8b13248, (q31_t)0x460923b, (q31_t)0xe8bce6cd, - (q31_t)0x45c0219, (q31_t)0xe8c89c37, (q31_t)0x4577444, (q31_t)0xe8d45286, - (q31_t)0x452e8bc, (q31_t)0xe8e009ba, (q31_t)0x44e5f80, (q31_t)0xe8ebc1d3, - (q31_t)0x449d892, (q31_t)0xe8f77acf, (q31_t)0x44553f2, (q31_t)0xe90334af, - (q31_t)0x440d19e, (q31_t)0xe90eef71, (q31_t)0x43c5199, (q31_t)0xe91aab16, - (q31_t)0x437d3e1, (q31_t)0xe926679c, (q31_t)0x4335877, (q31_t)0xe9322505, - (q31_t)0x42edf5c, (q31_t)0xe93de34e, (q31_t)0x42a688f, (q31_t)0xe949a278, - (q31_t)0x425f410, (q31_t)0xe9556282, (q31_t)0x42181e0, (q31_t)0xe961236c, - (q31_t)0x41d11ff, (q31_t)0xe96ce535, (q31_t)0x418a46d, (q31_t)0xe978a7dd, - (q31_t)0x414392b, (q31_t)0xe9846b63, (q31_t)0x40fd037, (q31_t)0xe9902fc7, - (q31_t)0x40b6994, (q31_t)0xe99bf509, (q31_t)0x4070540, (q31_t)0xe9a7bb28, - (q31_t)0x402a33c, (q31_t)0xe9b38223, (q31_t)0x3fe4388, (q31_t)0xe9bf49fa, - (q31_t)0x3f9e624, (q31_t)0xe9cb12ad, (q31_t)0x3f58b10, (q31_t)0xe9d6dc3b, - (q31_t)0x3f1324e, (q31_t)0xe9e2a6a3, (q31_t)0x3ecdbdc, (q31_t)0xe9ee71e6, - (q31_t)0x3e887bb, (q31_t)0xe9fa3e03, (q31_t)0x3e435ea, (q31_t)0xea060af9, - (q31_t)0x3dfe66c, (q31_t)0xea11d8c8, (q31_t)0x3db993e, (q31_t)0xea1da770, - (q31_t)0x3d74e62, (q31_t)0xea2976ef, (q31_t)0x3d305d8, (q31_t)0xea354746, - (q31_t)0x3cebfa0, (q31_t)0xea411874, (q31_t)0x3ca7bba, (q31_t)0xea4cea79, - (q31_t)0x3c63a26, (q31_t)0xea58bd54, (q31_t)0x3c1fae5, (q31_t)0xea649105, - (q31_t)0x3bdbdf6, (q31_t)0xea70658a, (q31_t)0x3b9835a, (q31_t)0xea7c3ae5, - (q31_t)0x3b54b11, (q31_t)0xea881114, (q31_t)0x3b1151b, (q31_t)0xea93e817, - (q31_t)0x3ace178, (q31_t)0xea9fbfed, (q31_t)0x3a8b028, (q31_t)0xeaab9896, - (q31_t)0x3a4812c, (q31_t)0xeab77212, (q31_t)0x3a05484, (q31_t)0xeac34c60, - (q31_t)0x39c2a2f, (q31_t)0xeacf277f, (q31_t)0x398022f, (q31_t)0xeadb0370, - (q31_t)0x393dc82, (q31_t)0xeae6e031, (q31_t)0x38fb92a, (q31_t)0xeaf2bdc3, - (q31_t)0x38b9827, (q31_t)0xeafe9c24, (q31_t)0x3877978, (q31_t)0xeb0a7b54, - (q31_t)0x3835d1e, (q31_t)0xeb165b54, (q31_t)0x37f4319, (q31_t)0xeb223c22, - (q31_t)0x37b2b6a, (q31_t)0xeb2e1dbe, (q31_t)0x377160f, (q31_t)0xeb3a0027, - (q31_t)0x373030a, (q31_t)0xeb45e35d, (q31_t)0x36ef25b, (q31_t)0xeb51c760, - (q31_t)0x36ae401, (q31_t)0xeb5dac2f, (q31_t)0x366d7fd, (q31_t)0xeb6991ca, - (q31_t)0x362ce50, (q31_t)0xeb75782f, (q31_t)0x35ec6f8, (q31_t)0xeb815f60, - (q31_t)0x35ac1f7, (q31_t)0xeb8d475b, (q31_t)0x356bf4d, (q31_t)0xeb99301f, - (q31_t)0x352bef9, (q31_t)0xeba519ad, (q31_t)0x34ec0fc, (q31_t)0xebb10404, - (q31_t)0x34ac556, (q31_t)0xebbcef23, (q31_t)0x346cc07, (q31_t)0xebc8db0b, - (q31_t)0x342d510, (q31_t)0xebd4c7ba, (q31_t)0x33ee070, (q31_t)0xebe0b52f, - (q31_t)0x33aee27, (q31_t)0xebeca36c, (q31_t)0x336fe37, (q31_t)0xebf8926f, - (q31_t)0x333109e, (q31_t)0xec048237, (q31_t)0x32f255e, (q31_t)0xec1072c4, - (q31_t)0x32b3c75, (q31_t)0xec1c6417, (q31_t)0x32755e5, (q31_t)0xec28562d, - (q31_t)0x32371ae, (q31_t)0xec344908, (q31_t)0x31f8fcf, (q31_t)0xec403ca5, - (q31_t)0x31bb049, (q31_t)0xec4c3106, (q31_t)0x317d31c, (q31_t)0xec582629, - (q31_t)0x313f848, (q31_t)0xec641c0e, (q31_t)0x3101fce, (q31_t)0xec7012b5, - (q31_t)0x30c49ad, (q31_t)0xec7c0a1d, (q31_t)0x30875e5, (q31_t)0xec880245, - (q31_t)0x304a477, (q31_t)0xec93fb2e, (q31_t)0x300d563, (q31_t)0xec9ff4d6, - (q31_t)0x2fd08a9, (q31_t)0xecabef3d, (q31_t)0x2f93e4a, (q31_t)0xecb7ea63, - (q31_t)0x2f57644, (q31_t)0xecc3e648, (q31_t)0x2f1b099, (q31_t)0xeccfe2ea, - (q31_t)0x2eded49, (q31_t)0xecdbe04a, (q31_t)0x2ea2c53, (q31_t)0xece7de66, - (q31_t)0x2e66db8, (q31_t)0xecf3dd3f, (q31_t)0x2e2b178, (q31_t)0xecffdcd4, - (q31_t)0x2def794, (q31_t)0xed0bdd25, (q31_t)0x2db400a, (q31_t)0xed17de31, - (q31_t)0x2d78add, (q31_t)0xed23dff7, (q31_t)0x2d3d80a, (q31_t)0xed2fe277, - (q31_t)0x2d02794, (q31_t)0xed3be5b1, (q31_t)0x2cc7979, (q31_t)0xed47e9a5, - (q31_t)0x2c8cdbb, (q31_t)0xed53ee51, (q31_t)0x2c52459, (q31_t)0xed5ff3b5, - (q31_t)0x2c17d52, (q31_t)0xed6bf9d1, (q31_t)0x2bdd8a9, (q31_t)0xed7800a5, - (q31_t)0x2ba365c, (q31_t)0xed84082f, (q31_t)0x2b6966c, (q31_t)0xed901070, - (q31_t)0x2b2f8d8, (q31_t)0xed9c1967, (q31_t)0x2af5da2, (q31_t)0xeda82313, - (q31_t)0x2abc4c9, (q31_t)0xedb42d74, (q31_t)0x2a82e4d, (q31_t)0xedc0388a, - (q31_t)0x2a49a2e, (q31_t)0xedcc4454, (q31_t)0x2a1086d, (q31_t)0xedd850d2, - (q31_t)0x29d790a, (q31_t)0xede45e03, (q31_t)0x299ec05, (q31_t)0xedf06be6, - (q31_t)0x296615d, (q31_t)0xedfc7a7c, (q31_t)0x292d914, (q31_t)0xee0889c4, - (q31_t)0x28f5329, (q31_t)0xee1499bd, (q31_t)0x28bcf9c, (q31_t)0xee20aa67, - (q31_t)0x2884e6e, (q31_t)0xee2cbbc1, (q31_t)0x284cf9f, (q31_t)0xee38cdcb, - (q31_t)0x281532e, (q31_t)0xee44e084, (q31_t)0x27dd91c, (q31_t)0xee50f3ed, - (q31_t)0x27a616a, (q31_t)0xee5d0804, (q31_t)0x276ec16, (q31_t)0xee691cc9, - (q31_t)0x2737922, (q31_t)0xee75323c, (q31_t)0x270088e, (q31_t)0xee81485c, - (q31_t)0x26c9a58, (q31_t)0xee8d5f29, (q31_t)0x2692e83, (q31_t)0xee9976a1, - (q31_t)0x265c50e, (q31_t)0xeea58ec6, (q31_t)0x2625df8, (q31_t)0xeeb1a796, - (q31_t)0x25ef943, (q31_t)0xeebdc110, (q31_t)0x25b96ee, (q31_t)0xeec9db35, - (q31_t)0x25836f9, (q31_t)0xeed5f604, (q31_t)0x254d965, (q31_t)0xeee2117c, - (q31_t)0x2517e31, (q31_t)0xeeee2d9d, (q31_t)0x24e255e, (q31_t)0xeefa4a67, - (q31_t)0x24aceed, (q31_t)0xef0667d9, (q31_t)0x2477adc, (q31_t)0xef1285f2, - (q31_t)0x244292c, (q31_t)0xef1ea4b2, (q31_t)0x240d9de, (q31_t)0xef2ac419, - (q31_t)0x23d8cf1, (q31_t)0xef36e426, (q31_t)0x23a4265, (q31_t)0xef4304d8, - (q31_t)0x236fa3b, (q31_t)0xef4f2630, (q31_t)0x233b473, (q31_t)0xef5b482d, - (q31_t)0x230710d, (q31_t)0xef676ace, (q31_t)0x22d3009, (q31_t)0xef738e12, - (q31_t)0x229f167, (q31_t)0xef7fb1fa, (q31_t)0x226b528, (q31_t)0xef8bd685, - (q31_t)0x2237b4b, (q31_t)0xef97fbb2, (q31_t)0x22043d0, (q31_t)0xefa42181, - (q31_t)0x21d0eb8, (q31_t)0xefb047f2, (q31_t)0x219dc03, (q31_t)0xefbc6f03, - (q31_t)0x216abb1, (q31_t)0xefc896b5, (q31_t)0x2137dc2, (q31_t)0xefd4bf08, - (q31_t)0x2105236, (q31_t)0xefe0e7f9, (q31_t)0x20d290d, (q31_t)0xefed118a, - (q31_t)0x20a0248, (q31_t)0xeff93bba, (q31_t)0x206dde6, (q31_t)0xf0056687, - (q31_t)0x203bbe8, (q31_t)0xf01191f3, (q31_t)0x2009c4e, (q31_t)0xf01dbdfb, - (q31_t)0x1fd7f17, (q31_t)0xf029eaa1, (q31_t)0x1fa6445, (q31_t)0xf03617e2, - (q31_t)0x1f74bd6, (q31_t)0xf04245c0, (q31_t)0x1f435cc, (q31_t)0xf04e7438, - (q31_t)0x1f12227, (q31_t)0xf05aa34c, (q31_t)0x1ee10e5, (q31_t)0xf066d2fa, - (q31_t)0x1eb0209, (q31_t)0xf0730342, (q31_t)0x1e7f591, (q31_t)0xf07f3424, - (q31_t)0x1e4eb7e, (q31_t)0xf08b659f, (q31_t)0x1e1e3d0, (q31_t)0xf09797b2, - (q31_t)0x1dede87, (q31_t)0xf0a3ca5d, (q31_t)0x1dbdba3, (q31_t)0xf0affda0, - (q31_t)0x1d8db25, (q31_t)0xf0bc317a, (q31_t)0x1d5dd0c, (q31_t)0xf0c865ea, - (q31_t)0x1d2e158, (q31_t)0xf0d49af1, (q31_t)0x1cfe80a, (q31_t)0xf0e0d08d, - (q31_t)0x1ccf122, (q31_t)0xf0ed06bf, (q31_t)0x1c9fca0, (q31_t)0xf0f93d86, - (q31_t)0x1c70a84, (q31_t)0xf10574e0, (q31_t)0x1c41ace, (q31_t)0xf111accf, - (q31_t)0x1c12d7e, (q31_t)0xf11de551, (q31_t)0x1be4294, (q31_t)0xf12a1e66, - (q31_t)0x1bb5a11, (q31_t)0xf136580d, (q31_t)0x1b873f5, (q31_t)0xf1429247, - (q31_t)0x1b5903f, (q31_t)0xf14ecd11, (q31_t)0x1b2aef0, (q31_t)0xf15b086d, - (q31_t)0x1afd007, (q31_t)0xf1674459, (q31_t)0x1acf386, (q31_t)0xf17380d6, - (q31_t)0x1aa196c, (q31_t)0xf17fbde2, (q31_t)0x1a741b9, (q31_t)0xf18bfb7d, - (q31_t)0x1a46c6e, (q31_t)0xf19839a6, (q31_t)0x1a1998a, (q31_t)0xf1a4785e, - (q31_t)0x19ec90d, (q31_t)0xf1b0b7a4, (q31_t)0x19bfaf9, (q31_t)0xf1bcf777, - (q31_t)0x1992f4c, (q31_t)0xf1c937d6, (q31_t)0x1966606, (q31_t)0xf1d578c2, - (q31_t)0x1939f29, (q31_t)0xf1e1ba3a, (q31_t)0x190dab4, (q31_t)0xf1edfc3d, - (q31_t)0x18e18a7, (q31_t)0xf1fa3ecb, (q31_t)0x18b5903, (q31_t)0xf20681e3, - (q31_t)0x1889bc6, (q31_t)0xf212c585, (q31_t)0x185e0f3, (q31_t)0xf21f09b1, - (q31_t)0x1832888, (q31_t)0xf22b4e66, (q31_t)0x1807285, (q31_t)0xf23793a3, - (q31_t)0x17dbeec, (q31_t)0xf243d968, (q31_t)0x17b0dbb, (q31_t)0xf2501fb5, - (q31_t)0x1785ef4, (q31_t)0xf25c6688, (q31_t)0x175b296, (q31_t)0xf268ade3, - (q31_t)0x17308a1, (q31_t)0xf274f5c3, (q31_t)0x1706115, (q31_t)0xf2813e2a, - (q31_t)0x16dbbf3, (q31_t)0xf28d8715, (q31_t)0x16b193a, (q31_t)0xf299d085, - (q31_t)0x16878eb, (q31_t)0xf2a61a7a, (q31_t)0x165db05, (q31_t)0xf2b264f2, - (q31_t)0x1633f8a, (q31_t)0xf2beafed, (q31_t)0x160a678, (q31_t)0xf2cafb6b, - (q31_t)0x15e0fd1, (q31_t)0xf2d7476c, (q31_t)0x15b7b94, (q31_t)0xf2e393ef, - (q31_t)0x158e9c1, (q31_t)0xf2efe0f2, (q31_t)0x1565a58, (q31_t)0xf2fc2e77, - (q31_t)0x153cd5a, (q31_t)0xf3087c7d, (q31_t)0x15142c6, (q31_t)0xf314cb02, - (q31_t)0x14eba9d, (q31_t)0xf3211a07, (q31_t)0x14c34df, (q31_t)0xf32d698a, - (q31_t)0x149b18b, (q31_t)0xf339b98d, (q31_t)0x14730a3, (q31_t)0xf3460a0d, - (q31_t)0x144b225, (q31_t)0xf3525b0b, (q31_t)0x1423613, (q31_t)0xf35eac86, - (q31_t)0x13fbc6c, (q31_t)0xf36afe7e, (q31_t)0x13d4530, (q31_t)0xf37750f2, - (q31_t)0x13ad060, (q31_t)0xf383a3e2, (q31_t)0x1385dfb, (q31_t)0xf38ff74d, - (q31_t)0x135ee02, (q31_t)0xf39c4b32, (q31_t)0x1338075, (q31_t)0xf3a89f92, - (q31_t)0x1311553, (q31_t)0xf3b4f46c, (q31_t)0x12eac9d, (q31_t)0xf3c149bf, - (q31_t)0x12c4653, (q31_t)0xf3cd9f8b, (q31_t)0x129e276, (q31_t)0xf3d9f5cf, - (q31_t)0x1278104, (q31_t)0xf3e64c8c, (q31_t)0x12521ff, (q31_t)0xf3f2a3bf, - (q31_t)0x122c566, (q31_t)0xf3fefb6a, (q31_t)0x1206b39, (q31_t)0xf40b538b, - (q31_t)0x11e1379, (q31_t)0xf417ac22, (q31_t)0x11bbe26, (q31_t)0xf424052f, - (q31_t)0x1196b3f, (q31_t)0xf4305eb0, (q31_t)0x1171ac6, (q31_t)0xf43cb8a7, - (q31_t)0x114ccb9, (q31_t)0xf4491311, (q31_t)0x1128119, (q31_t)0xf4556def, - (q31_t)0x11037e6, (q31_t)0xf461c940, (q31_t)0x10df120, (q31_t)0xf46e2504, - (q31_t)0x10bacc8, (q31_t)0xf47a8139, (q31_t)0x1096add, (q31_t)0xf486dde1, - (q31_t)0x1072b5f, (q31_t)0xf4933afa, (q31_t)0x104ee4f, (q31_t)0xf49f9884, - (q31_t)0x102b3ac, (q31_t)0xf4abf67e, (q31_t)0x1007b77, (q31_t)0xf4b854e7, - (q31_t)0xfe45b0, (q31_t)0xf4c4b3c0, (q31_t)0xfc1257, (q31_t)0xf4d11308, - (q31_t)0xf9e16b, (q31_t)0xf4dd72be, (q31_t)0xf7b2ee, (q31_t)0xf4e9d2e3, - (q31_t)0xf586df, (q31_t)0xf4f63374, (q31_t)0xf35d3e, (q31_t)0xf5029473, - (q31_t)0xf1360b, (q31_t)0xf50ef5de, (q31_t)0xef1147, (q31_t)0xf51b57b5, - (q31_t)0xeceef1, (q31_t)0xf527b9f7, (q31_t)0xeacf09, (q31_t)0xf5341ca5, - (q31_t)0xe8b190, (q31_t)0xf5407fbd, (q31_t)0xe69686, (q31_t)0xf54ce33f, - (q31_t)0xe47deb, (q31_t)0xf559472b, (q31_t)0xe267be, (q31_t)0xf565ab80, - (q31_t)0xe05401, (q31_t)0xf572103d, (q31_t)0xde42b2, (q31_t)0xf57e7563, - (q31_t)0xdc33d2, (q31_t)0xf58adaf0, (q31_t)0xda2762, (q31_t)0xf59740e5, - (q31_t)0xd81d61, (q31_t)0xf5a3a740, (q31_t)0xd615cf, (q31_t)0xf5b00e02, - (q31_t)0xd410ad, (q31_t)0xf5bc7529, (q31_t)0xd20dfa, (q31_t)0xf5c8dcb6, - (q31_t)0xd00db6, (q31_t)0xf5d544a7, (q31_t)0xce0fe3, (q31_t)0xf5e1acfd, - (q31_t)0xcc147f, (q31_t)0xf5ee15b7, (q31_t)0xca1b8a, (q31_t)0xf5fa7ed4, - (q31_t)0xc82506, (q31_t)0xf606e854, (q31_t)0xc630f2, (q31_t)0xf6135237, - (q31_t)0xc43f4d, (q31_t)0xf61fbc7b, (q31_t)0xc25019, (q31_t)0xf62c2721, - (q31_t)0xc06355, (q31_t)0xf6389228, (q31_t)0xbe7901, (q31_t)0xf644fd8f, - (q31_t)0xbc911d, (q31_t)0xf6516956, (q31_t)0xbaabaa, (q31_t)0xf65dd57d, - (q31_t)0xb8c8a7, (q31_t)0xf66a4203, (q31_t)0xb6e815, (q31_t)0xf676aee8, - (q31_t)0xb509f3, (q31_t)0xf6831c2b, (q31_t)0xb32e42, (q31_t)0xf68f89cb, - (q31_t)0xb15502, (q31_t)0xf69bf7c9, (q31_t)0xaf7e33, (q31_t)0xf6a86623, - (q31_t)0xada9d4, (q31_t)0xf6b4d4d9, (q31_t)0xabd7e6, (q31_t)0xf6c143ec, - (q31_t)0xaa086a, (q31_t)0xf6cdb359, (q31_t)0xa83b5e, (q31_t)0xf6da2321, - (q31_t)0xa670c4, (q31_t)0xf6e69344, (q31_t)0xa4a89b, (q31_t)0xf6f303c0, - (q31_t)0xa2e2e3, (q31_t)0xf6ff7496, (q31_t)0xa11f9d, (q31_t)0xf70be5c4, - (q31_t)0x9f5ec8, (q31_t)0xf718574b, (q31_t)0x9da065, (q31_t)0xf724c92a, - (q31_t)0x9be473, (q31_t)0xf7313b60, (q31_t)0x9a2af3, (q31_t)0xf73daded, - (q31_t)0x9873e4, (q31_t)0xf74a20d0, (q31_t)0x96bf48, (q31_t)0xf756940a, - (q31_t)0x950d1d, (q31_t)0xf7630799, (q31_t)0x935d64, (q31_t)0xf76f7b7d, - (q31_t)0x91b01d, (q31_t)0xf77befb5, (q31_t)0x900548, (q31_t)0xf7886442, - (q31_t)0x8e5ce5, (q31_t)0xf794d922, (q31_t)0x8cb6f5, (q31_t)0xf7a14e55, - (q31_t)0x8b1376, (q31_t)0xf7adc3db, (q31_t)0x89726a, (q31_t)0xf7ba39b3, - (q31_t)0x87d3d0, (q31_t)0xf7c6afdc, (q31_t)0x8637a9, (q31_t)0xf7d32657, - (q31_t)0x849df4, (q31_t)0xf7df9d22, (q31_t)0x8306b2, (q31_t)0xf7ec143e, - (q31_t)0x8171e2, (q31_t)0xf7f88ba9, (q31_t)0x7fdf85, (q31_t)0xf8050364, - (q31_t)0x7e4f9b, (q31_t)0xf8117b6d, (q31_t)0x7cc223, (q31_t)0xf81df3c5, - (q31_t)0x7b371e, (q31_t)0xf82a6c6a, (q31_t)0x79ae8c, (q31_t)0xf836e55d, - (q31_t)0x78286e, (q31_t)0xf8435e9d, (q31_t)0x76a4c2, (q31_t)0xf84fd829, - (q31_t)0x752389, (q31_t)0xf85c5201, (q31_t)0x73a4c3, (q31_t)0xf868cc24, - (q31_t)0x722871, (q31_t)0xf8754692, (q31_t)0x70ae92, (q31_t)0xf881c14b, - (q31_t)0x6f3726, (q31_t)0xf88e3c4d, (q31_t)0x6dc22e, (q31_t)0xf89ab799, - (q31_t)0x6c4fa8, (q31_t)0xf8a7332e, (q31_t)0x6adf97, (q31_t)0xf8b3af0c, - (q31_t)0x6971f9, (q31_t)0xf8c02b31, (q31_t)0x6806ce, (q31_t)0xf8cca79e, - (q31_t)0x669e18, (q31_t)0xf8d92452, (q31_t)0x6537d4, (q31_t)0xf8e5a14d, - (q31_t)0x63d405, (q31_t)0xf8f21e8e, (q31_t)0x6272aa, (q31_t)0xf8fe9c15, - (q31_t)0x6113c2, (q31_t)0xf90b19e0, (q31_t)0x5fb74e, (q31_t)0xf91797f0, - (q31_t)0x5e5d4e, (q31_t)0xf9241645, (q31_t)0x5d05c3, (q31_t)0xf93094dd, - (q31_t)0x5bb0ab, (q31_t)0xf93d13b8, (q31_t)0x5a5e07, (q31_t)0xf94992d7, - (q31_t)0x590dd8, (q31_t)0xf9561237, (q31_t)0x57c01d, (q31_t)0xf96291d9, - (q31_t)0x5674d6, (q31_t)0xf96f11bc, (q31_t)0x552c03, (q31_t)0xf97b91e1, - (q31_t)0x53e5a5, (q31_t)0xf9881245, (q31_t)0x52a1bb, (q31_t)0xf99492ea, - (q31_t)0x516045, (q31_t)0xf9a113cd, (q31_t)0x502145, (q31_t)0xf9ad94f0, - (q31_t)0x4ee4b8, (q31_t)0xf9ba1651, (q31_t)0x4daaa1, (q31_t)0xf9c697f0, - (q31_t)0x4c72fe, (q31_t)0xf9d319cc, (q31_t)0x4b3dcf, (q31_t)0xf9df9be6, - (q31_t)0x4a0b16, (q31_t)0xf9ec1e3b, (q31_t)0x48dad1, (q31_t)0xf9f8a0cd, - (q31_t)0x47ad01, (q31_t)0xfa05239a, (q31_t)0x4681a6, (q31_t)0xfa11a6a3, - (q31_t)0x4558c0, (q31_t)0xfa1e29e5, (q31_t)0x44324f, (q31_t)0xfa2aad62, - (q31_t)0x430e53, (q31_t)0xfa373119, (q31_t)0x41eccc, (q31_t)0xfa43b508, - (q31_t)0x40cdba, (q31_t)0xfa503930, (q31_t)0x3fb11d, (q31_t)0xfa5cbd91, - (q31_t)0x3e96f6, (q31_t)0xfa694229, (q31_t)0x3d7f44, (q31_t)0xfa75c6f8, - (q31_t)0x3c6a07, (q31_t)0xfa824bfd, (q31_t)0x3b573f, (q31_t)0xfa8ed139, - (q31_t)0x3a46ed, (q31_t)0xfa9b56ab, (q31_t)0x393910, (q31_t)0xfaa7dc52, - (q31_t)0x382da8, (q31_t)0xfab4622d, (q31_t)0x3724b6, (q31_t)0xfac0e83d, - (q31_t)0x361e3a, (q31_t)0xfacd6e81, (q31_t)0x351a33, (q31_t)0xfad9f4f8, - (q31_t)0x3418a2, (q31_t)0xfae67ba2, (q31_t)0x331986, (q31_t)0xfaf3027e, - (q31_t)0x321ce0, (q31_t)0xfaff898c, (q31_t)0x3122b0, (q31_t)0xfb0c10cb, - (q31_t)0x302af5, (q31_t)0xfb18983b, (q31_t)0x2f35b1, (q31_t)0xfb251fdc, - (q31_t)0x2e42e2, (q31_t)0xfb31a7ac, (q31_t)0x2d5289, (q31_t)0xfb3e2fac, - (q31_t)0x2c64a6, (q31_t)0xfb4ab7db, (q31_t)0x2b7939, (q31_t)0xfb574039, - (q31_t)0x2a9042, (q31_t)0xfb63c8c4, (q31_t)0x29a9c1, (q31_t)0xfb70517d, - (q31_t)0x28c5b6, (q31_t)0xfb7cda63, (q31_t)0x27e421, (q31_t)0xfb896375, - (q31_t)0x270502, (q31_t)0xfb95ecb4, (q31_t)0x262859, (q31_t)0xfba2761e, - (q31_t)0x254e27, (q31_t)0xfbaeffb3, (q31_t)0x24766a, (q31_t)0xfbbb8973, - (q31_t)0x23a124, (q31_t)0xfbc8135c, (q31_t)0x22ce54, (q31_t)0xfbd49d70, - (q31_t)0x21fdfb, (q31_t)0xfbe127ac, (q31_t)0x213018, (q31_t)0xfbedb212, - (q31_t)0x2064ab, (q31_t)0xfbfa3c9f, (q31_t)0x1f9bb5, (q31_t)0xfc06c754, - (q31_t)0x1ed535, (q31_t)0xfc135231, (q31_t)0x1e112b, (q31_t)0xfc1fdd34, - (q31_t)0x1d4f99, (q31_t)0xfc2c685d, (q31_t)0x1c907c, (q31_t)0xfc38f3ac, - (q31_t)0x1bd3d6, (q31_t)0xfc457f21, (q31_t)0x1b19a7, (q31_t)0xfc520aba, - (q31_t)0x1a61ee, (q31_t)0xfc5e9678, (q31_t)0x19acac, (q31_t)0xfc6b2259, - (q31_t)0x18f9e1, (q31_t)0xfc77ae5e, (q31_t)0x18498c, (q31_t)0xfc843a85, - (q31_t)0x179bae, (q31_t)0xfc90c6cf, (q31_t)0x16f047, (q31_t)0xfc9d533b, - (q31_t)0x164757, (q31_t)0xfca9dfc8, (q31_t)0x15a0dd, (q31_t)0xfcb66c77, - (q31_t)0x14fcda, (q31_t)0xfcc2f945, (q31_t)0x145b4e, (q31_t)0xfccf8634, - (q31_t)0x13bc39, (q31_t)0xfcdc1342, (q31_t)0x131f9b, (q31_t)0xfce8a06f, - (q31_t)0x128574, (q31_t)0xfcf52dbb, (q31_t)0x11edc3, (q31_t)0xfd01bb24, - (q31_t)0x11588a, (q31_t)0xfd0e48ab, (q31_t)0x10c5c7, (q31_t)0xfd1ad650, - (q31_t)0x10357c, (q31_t)0xfd276410, (q31_t)0xfa7a8, (q31_t)0xfd33f1ed, - (q31_t)0xf1c4a, (q31_t)0xfd407fe6, (q31_t)0xe9364, (q31_t)0xfd4d0df9, - (q31_t)0xe0cf5, (q31_t)0xfd599c28, (q31_t)0xd88fd, (q31_t)0xfd662a70, - (q31_t)0xd077c, (q31_t)0xfd72b8d2, (q31_t)0xc8872, (q31_t)0xfd7f474d, - (q31_t)0xc0be0, (q31_t)0xfd8bd5e1, (q31_t)0xb91c4, (q31_t)0xfd98648d, - (q31_t)0xb1a20, (q31_t)0xfda4f351, (q31_t)0xaa4f3, (q31_t)0xfdb1822c, - (q31_t)0xa323d, (q31_t)0xfdbe111e, (q31_t)0x9c1ff, (q31_t)0xfdcaa027, - (q31_t)0x95438, (q31_t)0xfdd72f45, (q31_t)0x8e8e8, (q31_t)0xfde3be78, - (q31_t)0x8800f, (q31_t)0xfdf04dc0, (q31_t)0x819ae, (q31_t)0xfdfcdd1d, - (q31_t)0x7b5c4, (q31_t)0xfe096c8d, (q31_t)0x75452, (q31_t)0xfe15fc11, - (q31_t)0x6f556, (q31_t)0xfe228ba7, (q31_t)0x698d3, (q31_t)0xfe2f1b50, - (q31_t)0x63ec6, (q31_t)0xfe3bab0b, (q31_t)0x5e731, (q31_t)0xfe483ad8, - (q31_t)0x59214, (q31_t)0xfe54cab5, (q31_t)0x53f6e, (q31_t)0xfe615aa3, - (q31_t)0x4ef3f, (q31_t)0xfe6deaa1, (q31_t)0x4a188, (q31_t)0xfe7a7aae, - (q31_t)0x45648, (q31_t)0xfe870aca, (q31_t)0x40d80, (q31_t)0xfe939af5, - (q31_t)0x3c72f, (q31_t)0xfea02b2e, (q31_t)0x38356, (q31_t)0xfeacbb74, - (q31_t)0x341f4, (q31_t)0xfeb94bc8, (q31_t)0x3030a, (q31_t)0xfec5dc28, - (q31_t)0x2c697, (q31_t)0xfed26c94, (q31_t)0x28c9c, (q31_t)0xfedefd0c, - (q31_t)0x25519, (q31_t)0xfeeb8d8f, (q31_t)0x2200d, (q31_t)0xfef81e1d, - (q31_t)0x1ed78, (q31_t)0xff04aeb5, (q31_t)0x1bd5c, (q31_t)0xff113f56, - (q31_t)0x18fb6, (q31_t)0xff1dd001, (q31_t)0x16489, (q31_t)0xff2a60b4, - (q31_t)0x13bd3, (q31_t)0xff36f170, (q31_t)0x11594, (q31_t)0xff438234, - (q31_t)0xf1ce, (q31_t)0xff5012fe, (q31_t)0xd07e, (q31_t)0xff5ca3d0, - (q31_t)0xb1a7, (q31_t)0xff6934a8, (q31_t)0x9547, (q31_t)0xff75c585, - (q31_t)0x7b5f, (q31_t)0xff825668, (q31_t)0x63ee, (q31_t)0xff8ee750, - (q31_t)0x4ef5, (q31_t)0xff9b783c, (q31_t)0x3c74, (q31_t)0xffa8092c, - (q31_t)0x2c6a, (q31_t)0xffb49a1f, (q31_t)0x1ed8, (q31_t)0xffc12b16, - (q31_t)0x13bd, (q31_t)0xffcdbc0f, (q31_t)0xb1a, (q31_t)0xffda4d09, - (q31_t)0x4ef, (q31_t)0xffe6de05, (q31_t)0x13c, (q31_t)0xfff36f02, - (q31_t)0x0, (q31_t)0x0, (q31_t)0x13c, (q31_t)0xc90fe, - (q31_t)0x4ef, (q31_t)0x1921fb, (q31_t)0xb1a, (q31_t)0x25b2f7, - (q31_t)0x13bd, (q31_t)0x3243f1, (q31_t)0x1ed8, (q31_t)0x3ed4ea, - (q31_t)0x2c6a, (q31_t)0x4b65e1, (q31_t)0x3c74, (q31_t)0x57f6d4, - (q31_t)0x4ef5, (q31_t)0x6487c4, (q31_t)0x63ee, (q31_t)0x7118b0, - (q31_t)0x7b5f, (q31_t)0x7da998, (q31_t)0x9547, (q31_t)0x8a3a7b, - (q31_t)0xb1a7, (q31_t)0x96cb58, (q31_t)0xd07e, (q31_t)0xa35c30, - (q31_t)0xf1ce, (q31_t)0xafed02, (q31_t)0x11594, (q31_t)0xbc7dcc, - (q31_t)0x13bd3, (q31_t)0xc90e90, (q31_t)0x16489, (q31_t)0xd59f4c, - (q31_t)0x18fb6, (q31_t)0xe22fff, (q31_t)0x1bd5c, (q31_t)0xeec0aa, - (q31_t)0x1ed78, (q31_t)0xfb514b, (q31_t)0x2200d, (q31_t)0x107e1e3, - (q31_t)0x25519, (q31_t)0x1147271, (q31_t)0x28c9c, (q31_t)0x12102f4, - (q31_t)0x2c697, (q31_t)0x12d936c, (q31_t)0x3030a, (q31_t)0x13a23d8, - (q31_t)0x341f4, (q31_t)0x146b438, (q31_t)0x38356, (q31_t)0x153448c, - (q31_t)0x3c72f, (q31_t)0x15fd4d2, (q31_t)0x40d80, (q31_t)0x16c650b, - (q31_t)0x45648, (q31_t)0x178f536, (q31_t)0x4a188, (q31_t)0x1858552, - (q31_t)0x4ef3f, (q31_t)0x192155f, (q31_t)0x53f6e, (q31_t)0x19ea55d, - (q31_t)0x59214, (q31_t)0x1ab354b, (q31_t)0x5e731, (q31_t)0x1b7c528, - (q31_t)0x63ec6, (q31_t)0x1c454f5, (q31_t)0x698d3, (q31_t)0x1d0e4b0, - (q31_t)0x6f556, (q31_t)0x1dd7459, (q31_t)0x75452, (q31_t)0x1ea03ef, - (q31_t)0x7b5c4, (q31_t)0x1f69373, (q31_t)0x819ae, (q31_t)0x20322e3, - (q31_t)0x8800f, (q31_t)0x20fb240, (q31_t)0x8e8e8, (q31_t)0x21c4188, - (q31_t)0x95438, (q31_t)0x228d0bb, (q31_t)0x9c1ff, (q31_t)0x2355fd9, - (q31_t)0xa323d, (q31_t)0x241eee2, (q31_t)0xaa4f3, (q31_t)0x24e7dd4, - (q31_t)0xb1a20, (q31_t)0x25b0caf, (q31_t)0xb91c4, (q31_t)0x2679b73, - (q31_t)0xc0be0, (q31_t)0x2742a1f, (q31_t)0xc8872, (q31_t)0x280b8b3, - (q31_t)0xd077c, (q31_t)0x28d472e, (q31_t)0xd88fd, (q31_t)0x299d590, - (q31_t)0xe0cf5, (q31_t)0x2a663d8, (q31_t)0xe9364, (q31_t)0x2b2f207, - (q31_t)0xf1c4a, (q31_t)0x2bf801a, (q31_t)0xfa7a8, (q31_t)0x2cc0e13, - (q31_t)0x10357c, (q31_t)0x2d89bf0, (q31_t)0x10c5c7, (q31_t)0x2e529b0, - (q31_t)0x11588a, (q31_t)0x2f1b755, (q31_t)0x11edc3, (q31_t)0x2fe44dc, - (q31_t)0x128574, (q31_t)0x30ad245, (q31_t)0x131f9b, (q31_t)0x3175f91, - (q31_t)0x13bc39, (q31_t)0x323ecbe, (q31_t)0x145b4e, (q31_t)0x33079cc, - (q31_t)0x14fcda, (q31_t)0x33d06bb, (q31_t)0x15a0dd, (q31_t)0x3499389, - (q31_t)0x164757, (q31_t)0x3562038, (q31_t)0x16f047, (q31_t)0x362acc5, - (q31_t)0x179bae, (q31_t)0x36f3931, (q31_t)0x18498c, (q31_t)0x37bc57b, - (q31_t)0x18f9e1, (q31_t)0x38851a2, (q31_t)0x19acac, (q31_t)0x394dda7, - (q31_t)0x1a61ee, (q31_t)0x3a16988, (q31_t)0x1b19a7, (q31_t)0x3adf546, - (q31_t)0x1bd3d6, (q31_t)0x3ba80df, (q31_t)0x1c907c, (q31_t)0x3c70c54, - (q31_t)0x1d4f99, (q31_t)0x3d397a3, (q31_t)0x1e112b, (q31_t)0x3e022cc, - (q31_t)0x1ed535, (q31_t)0x3ecadcf, (q31_t)0x1f9bb5, (q31_t)0x3f938ac, - (q31_t)0x2064ab, (q31_t)0x405c361, (q31_t)0x213018, (q31_t)0x4124dee, - (q31_t)0x21fdfb, (q31_t)0x41ed854, (q31_t)0x22ce54, (q31_t)0x42b6290, - (q31_t)0x23a124, (q31_t)0x437eca4, (q31_t)0x24766a, (q31_t)0x444768d, - (q31_t)0x254e27, (q31_t)0x451004d, (q31_t)0x262859, (q31_t)0x45d89e2, - (q31_t)0x270502, (q31_t)0x46a134c, (q31_t)0x27e421, (q31_t)0x4769c8b, - (q31_t)0x28c5b6, (q31_t)0x483259d, (q31_t)0x29a9c1, (q31_t)0x48fae83, - (q31_t)0x2a9042, (q31_t)0x49c373c, (q31_t)0x2b7939, (q31_t)0x4a8bfc7, - (q31_t)0x2c64a6, (q31_t)0x4b54825, (q31_t)0x2d5289, (q31_t)0x4c1d054, - (q31_t)0x2e42e2, (q31_t)0x4ce5854, (q31_t)0x2f35b1, (q31_t)0x4dae024, - (q31_t)0x302af5, (q31_t)0x4e767c5, (q31_t)0x3122b0, (q31_t)0x4f3ef35, - (q31_t)0x321ce0, (q31_t)0x5007674, (q31_t)0x331986, (q31_t)0x50cfd82, - (q31_t)0x3418a2, (q31_t)0x519845e, (q31_t)0x351a33, (q31_t)0x5260b08, - (q31_t)0x361e3a, (q31_t)0x532917f, (q31_t)0x3724b6, (q31_t)0x53f17c3, - (q31_t)0x382da8, (q31_t)0x54b9dd3, (q31_t)0x393910, (q31_t)0x55823ae, - (q31_t)0x3a46ed, (q31_t)0x564a955, (q31_t)0x3b573f, (q31_t)0x5712ec7, - (q31_t)0x3c6a07, (q31_t)0x57db403, (q31_t)0x3d7f44, (q31_t)0x58a3908, - (q31_t)0x3e96f6, (q31_t)0x596bdd7, (q31_t)0x3fb11d, (q31_t)0x5a3426f, - (q31_t)0x40cdba, (q31_t)0x5afc6d0, (q31_t)0x41eccc, (q31_t)0x5bc4af8, - (q31_t)0x430e53, (q31_t)0x5c8cee7, (q31_t)0x44324f, (q31_t)0x5d5529e, - (q31_t)0x4558c0, (q31_t)0x5e1d61b, (q31_t)0x4681a6, (q31_t)0x5ee595d, - (q31_t)0x47ad01, (q31_t)0x5fadc66, (q31_t)0x48dad1, (q31_t)0x6075f33, - (q31_t)0x4a0b16, (q31_t)0x613e1c5, (q31_t)0x4b3dcf, (q31_t)0x620641a, - (q31_t)0x4c72fe, (q31_t)0x62ce634, (q31_t)0x4daaa1, (q31_t)0x6396810, - (q31_t)0x4ee4b8, (q31_t)0x645e9af, (q31_t)0x502145, (q31_t)0x6526b10, - (q31_t)0x516045, (q31_t)0x65eec33, (q31_t)0x52a1bb, (q31_t)0x66b6d16, - (q31_t)0x53e5a5, (q31_t)0x677edbb, (q31_t)0x552c03, (q31_t)0x6846e1f, - (q31_t)0x5674d6, (q31_t)0x690ee44, (q31_t)0x57c01d, (q31_t)0x69d6e27, - (q31_t)0x590dd8, (q31_t)0x6a9edc9, (q31_t)0x5a5e07, (q31_t)0x6b66d29, - (q31_t)0x5bb0ab, (q31_t)0x6c2ec48, (q31_t)0x5d05c3, (q31_t)0x6cf6b23, - (q31_t)0x5e5d4e, (q31_t)0x6dbe9bb, (q31_t)0x5fb74e, (q31_t)0x6e86810, - (q31_t)0x6113c2, (q31_t)0x6f4e620, (q31_t)0x6272aa, (q31_t)0x70163eb, - (q31_t)0x63d405, (q31_t)0x70de172, (q31_t)0x6537d4, (q31_t)0x71a5eb3, - (q31_t)0x669e18, (q31_t)0x726dbae, (q31_t)0x6806ce, (q31_t)0x7335862, - (q31_t)0x6971f9, (q31_t)0x73fd4cf, (q31_t)0x6adf97, (q31_t)0x74c50f4, - (q31_t)0x6c4fa8, (q31_t)0x758ccd2, (q31_t)0x6dc22e, (q31_t)0x7654867, - (q31_t)0x6f3726, (q31_t)0x771c3b3, (q31_t)0x70ae92, (q31_t)0x77e3eb5, - (q31_t)0x722871, (q31_t)0x78ab96e, (q31_t)0x73a4c3, (q31_t)0x79733dc, - (q31_t)0x752389, (q31_t)0x7a3adff, (q31_t)0x76a4c2, (q31_t)0x7b027d7, - (q31_t)0x78286e, (q31_t)0x7bca163, (q31_t)0x79ae8c, (q31_t)0x7c91aa3, - (q31_t)0x7b371e, (q31_t)0x7d59396, (q31_t)0x7cc223, (q31_t)0x7e20c3b, - (q31_t)0x7e4f9b, (q31_t)0x7ee8493, (q31_t)0x7fdf85, (q31_t)0x7fafc9c, - (q31_t)0x8171e2, (q31_t)0x8077457, (q31_t)0x8306b2, (q31_t)0x813ebc2, - (q31_t)0x849df4, (q31_t)0x82062de, (q31_t)0x8637a9, (q31_t)0x82cd9a9, - (q31_t)0x87d3d0, (q31_t)0x8395024, (q31_t)0x89726a, (q31_t)0x845c64d, - (q31_t)0x8b1376, (q31_t)0x8523c25, (q31_t)0x8cb6f5, (q31_t)0x85eb1ab, - (q31_t)0x8e5ce5, (q31_t)0x86b26de, (q31_t)0x900548, (q31_t)0x8779bbe, - (q31_t)0x91b01d, (q31_t)0x884104b, (q31_t)0x935d64, (q31_t)0x8908483, - (q31_t)0x950d1d, (q31_t)0x89cf867, (q31_t)0x96bf48, (q31_t)0x8a96bf6, - (q31_t)0x9873e4, (q31_t)0x8b5df30, (q31_t)0x9a2af3, (q31_t)0x8c25213, - (q31_t)0x9be473, (q31_t)0x8cec4a0, (q31_t)0x9da065, (q31_t)0x8db36d6, - (q31_t)0x9f5ec8, (q31_t)0x8e7a8b5, (q31_t)0xa11f9d, (q31_t)0x8f41a3c, - (q31_t)0xa2e2e3, (q31_t)0x9008b6a, (q31_t)0xa4a89b, (q31_t)0x90cfc40, - (q31_t)0xa670c4, (q31_t)0x9196cbc, (q31_t)0xa83b5e, (q31_t)0x925dcdf, - (q31_t)0xaa086a, (q31_t)0x9324ca7, (q31_t)0xabd7e6, (q31_t)0x93ebc14, - (q31_t)0xada9d4, (q31_t)0x94b2b27, (q31_t)0xaf7e33, (q31_t)0x95799dd, - (q31_t)0xb15502, (q31_t)0x9640837, (q31_t)0xb32e42, (q31_t)0x9707635, - (q31_t)0xb509f3, (q31_t)0x97ce3d5, (q31_t)0xb6e815, (q31_t)0x9895118, - (q31_t)0xb8c8a7, (q31_t)0x995bdfd, (q31_t)0xbaabaa, (q31_t)0x9a22a83, - (q31_t)0xbc911d, (q31_t)0x9ae96aa, (q31_t)0xbe7901, (q31_t)0x9bb0271, - (q31_t)0xc06355, (q31_t)0x9c76dd8, (q31_t)0xc25019, (q31_t)0x9d3d8df, - (q31_t)0xc43f4d, (q31_t)0x9e04385, (q31_t)0xc630f2, (q31_t)0x9ecadc9, - (q31_t)0xc82506, (q31_t)0x9f917ac, (q31_t)0xca1b8a, (q31_t)0xa05812c, - (q31_t)0xcc147f, (q31_t)0xa11ea49, (q31_t)0xce0fe3, (q31_t)0xa1e5303, - (q31_t)0xd00db6, (q31_t)0xa2abb59, (q31_t)0xd20dfa, (q31_t)0xa37234a, - (q31_t)0xd410ad, (q31_t)0xa438ad7, (q31_t)0xd615cf, (q31_t)0xa4ff1fe, - (q31_t)0xd81d61, (q31_t)0xa5c58c0, (q31_t)0xda2762, (q31_t)0xa68bf1b, - (q31_t)0xdc33d2, (q31_t)0xa752510, (q31_t)0xde42b2, (q31_t)0xa818a9d, - (q31_t)0xe05401, (q31_t)0xa8defc3, (q31_t)0xe267be, (q31_t)0xa9a5480, - (q31_t)0xe47deb, (q31_t)0xaa6b8d5, (q31_t)0xe69686, (q31_t)0xab31cc1, - (q31_t)0xe8b190, (q31_t)0xabf8043, (q31_t)0xeacf09, (q31_t)0xacbe35b, - (q31_t)0xeceef1, (q31_t)0xad84609, (q31_t)0xef1147, (q31_t)0xae4a84b, - (q31_t)0xf1360b, (q31_t)0xaf10a22, (q31_t)0xf35d3e, (q31_t)0xafd6b8d, - (q31_t)0xf586df, (q31_t)0xb09cc8c, (q31_t)0xf7b2ee, (q31_t)0xb162d1d, - (q31_t)0xf9e16b, (q31_t)0xb228d42, (q31_t)0xfc1257, (q31_t)0xb2eecf8, - (q31_t)0xfe45b0, (q31_t)0xb3b4c40, (q31_t)0x1007b77, (q31_t)0xb47ab19, - (q31_t)0x102b3ac, (q31_t)0xb540982, (q31_t)0x104ee4f, (q31_t)0xb60677c, - (q31_t)0x1072b5f, (q31_t)0xb6cc506, (q31_t)0x1096add, (q31_t)0xb79221f, - (q31_t)0x10bacc8, (q31_t)0xb857ec7, (q31_t)0x10df120, (q31_t)0xb91dafc, - (q31_t)0x11037e6, (q31_t)0xb9e36c0, (q31_t)0x1128119, (q31_t)0xbaa9211, - (q31_t)0x114ccb9, (q31_t)0xbb6ecef, (q31_t)0x1171ac6, (q31_t)0xbc34759, - (q31_t)0x1196b3f, (q31_t)0xbcfa150, (q31_t)0x11bbe26, (q31_t)0xbdbfad1, - (q31_t)0x11e1379, (q31_t)0xbe853de, (q31_t)0x1206b39, (q31_t)0xbf4ac75, - (q31_t)0x122c566, (q31_t)0xc010496, (q31_t)0x12521ff, (q31_t)0xc0d5c41, - (q31_t)0x1278104, (q31_t)0xc19b374, (q31_t)0x129e276, (q31_t)0xc260a31, - (q31_t)0x12c4653, (q31_t)0xc326075, (q31_t)0x12eac9d, (q31_t)0xc3eb641, - (q31_t)0x1311553, (q31_t)0xc4b0b94, (q31_t)0x1338075, (q31_t)0xc57606e, - (q31_t)0x135ee02, (q31_t)0xc63b4ce, (q31_t)0x1385dfb, (q31_t)0xc7008b3, - (q31_t)0x13ad060, (q31_t)0xc7c5c1e, (q31_t)0x13d4530, (q31_t)0xc88af0e, - (q31_t)0x13fbc6c, (q31_t)0xc950182, (q31_t)0x1423613, (q31_t)0xca1537a, - (q31_t)0x144b225, (q31_t)0xcada4f5, (q31_t)0x14730a3, (q31_t)0xcb9f5f3, - (q31_t)0x149b18b, (q31_t)0xcc64673, (q31_t)0x14c34df, (q31_t)0xcd29676, - (q31_t)0x14eba9d, (q31_t)0xcdee5f9, (q31_t)0x15142c6, (q31_t)0xceb34fe, - (q31_t)0x153cd5a, (q31_t)0xcf78383, (q31_t)0x1565a58, (q31_t)0xd03d189, - (q31_t)0x158e9c1, (q31_t)0xd101f0e, (q31_t)0x15b7b94, (q31_t)0xd1c6c11, - (q31_t)0x15e0fd1, (q31_t)0xd28b894, (q31_t)0x160a678, (q31_t)0xd350495, - (q31_t)0x1633f8a, (q31_t)0xd415013, (q31_t)0x165db05, (q31_t)0xd4d9b0e, - (q31_t)0x16878eb, (q31_t)0xd59e586, (q31_t)0x16b193a, (q31_t)0xd662f7b, - (q31_t)0x16dbbf3, (q31_t)0xd7278eb, (q31_t)0x1706115, (q31_t)0xd7ec1d6, - (q31_t)0x17308a1, (q31_t)0xd8b0a3d, (q31_t)0x175b296, (q31_t)0xd97521d, - (q31_t)0x1785ef4, (q31_t)0xda39978, (q31_t)0x17b0dbb, (q31_t)0xdafe04b, - (q31_t)0x17dbeec, (q31_t)0xdbc2698, (q31_t)0x1807285, (q31_t)0xdc86c5d, - (q31_t)0x1832888, (q31_t)0xdd4b19a, (q31_t)0x185e0f3, (q31_t)0xde0f64f, - (q31_t)0x1889bc6, (q31_t)0xded3a7b, (q31_t)0x18b5903, (q31_t)0xdf97e1d, - (q31_t)0x18e18a7, (q31_t)0xe05c135, (q31_t)0x190dab4, (q31_t)0xe1203c3, - (q31_t)0x1939f29, (q31_t)0xe1e45c6, (q31_t)0x1966606, (q31_t)0xe2a873e, - (q31_t)0x1992f4c, (q31_t)0xe36c82a, (q31_t)0x19bfaf9, (q31_t)0xe430889, - (q31_t)0x19ec90d, (q31_t)0xe4f485c, (q31_t)0x1a1998a, (q31_t)0xe5b87a2, - (q31_t)0x1a46c6e, (q31_t)0xe67c65a, (q31_t)0x1a741b9, (q31_t)0xe740483, - (q31_t)0x1aa196c, (q31_t)0xe80421e, (q31_t)0x1acf386, (q31_t)0xe8c7f2a, - (q31_t)0x1afd007, (q31_t)0xe98bba7, (q31_t)0x1b2aef0, (q31_t)0xea4f793, - (q31_t)0x1b5903f, (q31_t)0xeb132ef, (q31_t)0x1b873f5, (q31_t)0xebd6db9, - (q31_t)0x1bb5a11, (q31_t)0xec9a7f3, (q31_t)0x1be4294, (q31_t)0xed5e19a, - (q31_t)0x1c12d7e, (q31_t)0xee21aaf, (q31_t)0x1c41ace, (q31_t)0xeee5331, - (q31_t)0x1c70a84, (q31_t)0xefa8b20, (q31_t)0x1c9fca0, (q31_t)0xf06c27a, - (q31_t)0x1ccf122, (q31_t)0xf12f941, (q31_t)0x1cfe80a, (q31_t)0xf1f2f73, - (q31_t)0x1d2e158, (q31_t)0xf2b650f, (q31_t)0x1d5dd0c, (q31_t)0xf379a16, - (q31_t)0x1d8db25, (q31_t)0xf43ce86, (q31_t)0x1dbdba3, (q31_t)0xf500260, - (q31_t)0x1dede87, (q31_t)0xf5c35a3, (q31_t)0x1e1e3d0, (q31_t)0xf68684e, - (q31_t)0x1e4eb7e, (q31_t)0xf749a61, (q31_t)0x1e7f591, (q31_t)0xf80cbdc, - (q31_t)0x1eb0209, (q31_t)0xf8cfcbe, (q31_t)0x1ee10e5, (q31_t)0xf992d06, - (q31_t)0x1f12227, (q31_t)0xfa55cb4, (q31_t)0x1f435cc, (q31_t)0xfb18bc8, - (q31_t)0x1f74bd6, (q31_t)0xfbdba40, (q31_t)0x1fa6445, (q31_t)0xfc9e81e, - (q31_t)0x1fd7f17, (q31_t)0xfd6155f, (q31_t)0x2009c4e, (q31_t)0xfe24205, - (q31_t)0x203bbe8, (q31_t)0xfee6e0d, (q31_t)0x206dde6, (q31_t)0xffa9979, - (q31_t)0x20a0248, (q31_t)0x1006c446, (q31_t)0x20d290d, (q31_t)0x1012ee76, - (q31_t)0x2105236, (q31_t)0x101f1807, (q31_t)0x2137dc2, (q31_t)0x102b40f8, - (q31_t)0x216abb1, (q31_t)0x1037694b, (q31_t)0x219dc03, (q31_t)0x104390fd, - (q31_t)0x21d0eb8, (q31_t)0x104fb80e, (q31_t)0x22043d0, (q31_t)0x105bde7f, - (q31_t)0x2237b4b, (q31_t)0x1068044e, (q31_t)0x226b528, (q31_t)0x1074297b, - (q31_t)0x229f167, (q31_t)0x10804e06, (q31_t)0x22d3009, (q31_t)0x108c71ee, - (q31_t)0x230710d, (q31_t)0x10989532, (q31_t)0x233b473, (q31_t)0x10a4b7d3, - (q31_t)0x236fa3b, (q31_t)0x10b0d9d0, (q31_t)0x23a4265, (q31_t)0x10bcfb28, - (q31_t)0x23d8cf1, (q31_t)0x10c91bda, (q31_t)0x240d9de, (q31_t)0x10d53be7, - (q31_t)0x244292c, (q31_t)0x10e15b4e, (q31_t)0x2477adc, (q31_t)0x10ed7a0e, - (q31_t)0x24aceed, (q31_t)0x10f99827, (q31_t)0x24e255e, (q31_t)0x1105b599, - (q31_t)0x2517e31, (q31_t)0x1111d263, (q31_t)0x254d965, (q31_t)0x111dee84, - (q31_t)0x25836f9, (q31_t)0x112a09fc, (q31_t)0x25b96ee, (q31_t)0x113624cb, - (q31_t)0x25ef943, (q31_t)0x11423ef0, (q31_t)0x2625df8, (q31_t)0x114e586a, - (q31_t)0x265c50e, (q31_t)0x115a713a, (q31_t)0x2692e83, (q31_t)0x1166895f, - (q31_t)0x26c9a58, (q31_t)0x1172a0d7, (q31_t)0x270088e, (q31_t)0x117eb7a4, - (q31_t)0x2737922, (q31_t)0x118acdc4, (q31_t)0x276ec16, (q31_t)0x1196e337, - (q31_t)0x27a616a, (q31_t)0x11a2f7fc, (q31_t)0x27dd91c, (q31_t)0x11af0c13, - (q31_t)0x281532e, (q31_t)0x11bb1f7c, (q31_t)0x284cf9f, (q31_t)0x11c73235, - (q31_t)0x2884e6e, (q31_t)0x11d3443f, (q31_t)0x28bcf9c, (q31_t)0x11df5599, - (q31_t)0x28f5329, (q31_t)0x11eb6643, (q31_t)0x292d914, (q31_t)0x11f7763c, - (q31_t)0x296615d, (q31_t)0x12038584, (q31_t)0x299ec05, (q31_t)0x120f941a, - (q31_t)0x29d790a, (q31_t)0x121ba1fd, (q31_t)0x2a1086d, (q31_t)0x1227af2e, - (q31_t)0x2a49a2e, (q31_t)0x1233bbac, (q31_t)0x2a82e4d, (q31_t)0x123fc776, - (q31_t)0x2abc4c9, (q31_t)0x124bd28c, (q31_t)0x2af5da2, (q31_t)0x1257dced, - (q31_t)0x2b2f8d8, (q31_t)0x1263e699, (q31_t)0x2b6966c, (q31_t)0x126fef90, - (q31_t)0x2ba365c, (q31_t)0x127bf7d1, (q31_t)0x2bdd8a9, (q31_t)0x1287ff5b, - (q31_t)0x2c17d52, (q31_t)0x1294062f, (q31_t)0x2c52459, (q31_t)0x12a00c4b, - (q31_t)0x2c8cdbb, (q31_t)0x12ac11af, (q31_t)0x2cc7979, (q31_t)0x12b8165b, - (q31_t)0x2d02794, (q31_t)0x12c41a4f, (q31_t)0x2d3d80a, (q31_t)0x12d01d89, - (q31_t)0x2d78add, (q31_t)0x12dc2009, (q31_t)0x2db400a, (q31_t)0x12e821cf, - (q31_t)0x2def794, (q31_t)0x12f422db, (q31_t)0x2e2b178, (q31_t)0x1300232c, - (q31_t)0x2e66db8, (q31_t)0x130c22c1, (q31_t)0x2ea2c53, (q31_t)0x1318219a, - (q31_t)0x2eded49, (q31_t)0x13241fb6, (q31_t)0x2f1b099, (q31_t)0x13301d16, - (q31_t)0x2f57644, (q31_t)0x133c19b8, (q31_t)0x2f93e4a, (q31_t)0x1348159d, - (q31_t)0x2fd08a9, (q31_t)0x135410c3, (q31_t)0x300d563, (q31_t)0x13600b2a, - (q31_t)0x304a477, (q31_t)0x136c04d2, (q31_t)0x30875e5, (q31_t)0x1377fdbb, - (q31_t)0x30c49ad, (q31_t)0x1383f5e3, (q31_t)0x3101fce, (q31_t)0x138fed4b, - (q31_t)0x313f848, (q31_t)0x139be3f2, (q31_t)0x317d31c, (q31_t)0x13a7d9d7, - (q31_t)0x31bb049, (q31_t)0x13b3cefa, (q31_t)0x31f8fcf, (q31_t)0x13bfc35b, - (q31_t)0x32371ae, (q31_t)0x13cbb6f8, (q31_t)0x32755e5, (q31_t)0x13d7a9d3, - (q31_t)0x32b3c75, (q31_t)0x13e39be9, (q31_t)0x32f255e, (q31_t)0x13ef8d3c, - (q31_t)0x333109e, (q31_t)0x13fb7dc9, (q31_t)0x336fe37, (q31_t)0x14076d91, - (q31_t)0x33aee27, (q31_t)0x14135c94, (q31_t)0x33ee070, (q31_t)0x141f4ad1, - (q31_t)0x342d510, (q31_t)0x142b3846, (q31_t)0x346cc07, (q31_t)0x143724f5, - (q31_t)0x34ac556, (q31_t)0x144310dd, (q31_t)0x34ec0fc, (q31_t)0x144efbfc, - (q31_t)0x352bef9, (q31_t)0x145ae653, (q31_t)0x356bf4d, (q31_t)0x1466cfe1, - (q31_t)0x35ac1f7, (q31_t)0x1472b8a5, (q31_t)0x35ec6f8, (q31_t)0x147ea0a0, - (q31_t)0x362ce50, (q31_t)0x148a87d1, (q31_t)0x366d7fd, (q31_t)0x14966e36, - (q31_t)0x36ae401, (q31_t)0x14a253d1, (q31_t)0x36ef25b, (q31_t)0x14ae38a0, - (q31_t)0x373030a, (q31_t)0x14ba1ca3, (q31_t)0x377160f, (q31_t)0x14c5ffd9, - (q31_t)0x37b2b6a, (q31_t)0x14d1e242, (q31_t)0x37f4319, (q31_t)0x14ddc3de, - (q31_t)0x3835d1e, (q31_t)0x14e9a4ac, (q31_t)0x3877978, (q31_t)0x14f584ac, - (q31_t)0x38b9827, (q31_t)0x150163dc, (q31_t)0x38fb92a, (q31_t)0x150d423d, - (q31_t)0x393dc82, (q31_t)0x15191fcf, (q31_t)0x398022f, (q31_t)0x1524fc90, - (q31_t)0x39c2a2f, (q31_t)0x1530d881, (q31_t)0x3a05484, (q31_t)0x153cb3a0, - (q31_t)0x3a4812c, (q31_t)0x15488dee, (q31_t)0x3a8b028, (q31_t)0x1554676a, - (q31_t)0x3ace178, (q31_t)0x15604013, (q31_t)0x3b1151b, (q31_t)0x156c17e9, - (q31_t)0x3b54b11, (q31_t)0x1577eeec, (q31_t)0x3b9835a, (q31_t)0x1583c51b, - (q31_t)0x3bdbdf6, (q31_t)0x158f9a76, (q31_t)0x3c1fae5, (q31_t)0x159b6efb, - (q31_t)0x3c63a26, (q31_t)0x15a742ac, (q31_t)0x3ca7bba, (q31_t)0x15b31587, - (q31_t)0x3cebfa0, (q31_t)0x15bee78c, (q31_t)0x3d305d8, (q31_t)0x15cab8ba, - (q31_t)0x3d74e62, (q31_t)0x15d68911, (q31_t)0x3db993e, (q31_t)0x15e25890, - (q31_t)0x3dfe66c, (q31_t)0x15ee2738, (q31_t)0x3e435ea, (q31_t)0x15f9f507, - (q31_t)0x3e887bb, (q31_t)0x1605c1fd, (q31_t)0x3ecdbdc, (q31_t)0x16118e1a, - (q31_t)0x3f1324e, (q31_t)0x161d595d, (q31_t)0x3f58b10, (q31_t)0x162923c5, - (q31_t)0x3f9e624, (q31_t)0x1634ed53, (q31_t)0x3fe4388, (q31_t)0x1640b606, - (q31_t)0x402a33c, (q31_t)0x164c7ddd, (q31_t)0x4070540, (q31_t)0x165844d8, - (q31_t)0x40b6994, (q31_t)0x16640af7, (q31_t)0x40fd037, (q31_t)0x166fd039, - (q31_t)0x414392b, (q31_t)0x167b949d, (q31_t)0x418a46d, (q31_t)0x16875823, - (q31_t)0x41d11ff, (q31_t)0x16931acb, (q31_t)0x42181e0, (q31_t)0x169edc94, - (q31_t)0x425f410, (q31_t)0x16aa9d7e, (q31_t)0x42a688f, (q31_t)0x16b65d88, - (q31_t)0x42edf5c, (q31_t)0x16c21cb2, (q31_t)0x4335877, (q31_t)0x16cddafb, - (q31_t)0x437d3e1, (q31_t)0x16d99864, (q31_t)0x43c5199, (q31_t)0x16e554ea, - (q31_t)0x440d19e, (q31_t)0x16f1108f, (q31_t)0x44553f2, (q31_t)0x16fccb51, - (q31_t)0x449d892, (q31_t)0x17088531, (q31_t)0x44e5f80, (q31_t)0x17143e2d, - (q31_t)0x452e8bc, (q31_t)0x171ff646, (q31_t)0x4577444, (q31_t)0x172bad7a, - (q31_t)0x45c0219, (q31_t)0x173763c9, (q31_t)0x460923b, (q31_t)0x17431933, - (q31_t)0x46524a9, (q31_t)0x174ecdb8, (q31_t)0x469b963, (q31_t)0x175a8157, - (q31_t)0x46e5069, (q31_t)0x1766340f, (q31_t)0x472e9bc, (q31_t)0x1771e5e0, - (q31_t)0x477855a, (q31_t)0x177d96ca, (q31_t)0x47c2344, (q31_t)0x178946cc, - (q31_t)0x480c379, (q31_t)0x1794f5e6, (q31_t)0x48565f9, (q31_t)0x17a0a417, - (q31_t)0x48a0ac4, (q31_t)0x17ac515f, (q31_t)0x48eb1db, (q31_t)0x17b7fdbd, - (q31_t)0x4935b3c, (q31_t)0x17c3a931, (q31_t)0x49806e7, (q31_t)0x17cf53bb, - (q31_t)0x49cb4dd, (q31_t)0x17dafd59, (q31_t)0x4a1651c, (q31_t)0x17e6a60c, - (q31_t)0x4a617a6, (q31_t)0x17f24dd3, (q31_t)0x4aacc7a, (q31_t)0x17fdf4ae, - (q31_t)0x4af8397, (q31_t)0x18099a9c, (q31_t)0x4b43cfd, (q31_t)0x18153f9d, - (q31_t)0x4b8f8ad, (q31_t)0x1820e3b0, (q31_t)0x4bdb6a6, (q31_t)0x182c86d5, - (q31_t)0x4c276e8, (q31_t)0x1838290c, (q31_t)0x4c73972, (q31_t)0x1843ca53, - (q31_t)0x4cbfe45, (q31_t)0x184f6aab, (q31_t)0x4d0c560, (q31_t)0x185b0a13, - (q31_t)0x4d58ec3, (q31_t)0x1866a88a, (q31_t)0x4da5a6f, (q31_t)0x18724611, - (q31_t)0x4df2862, (q31_t)0x187de2a7, (q31_t)0x4e3f89c, (q31_t)0x18897e4a, - (q31_t)0x4e8cb1e, (q31_t)0x189518fc, (q31_t)0x4ed9fe7, (q31_t)0x18a0b2bb, - (q31_t)0x4f276f7, (q31_t)0x18ac4b87, (q31_t)0x4f7504e, (q31_t)0x18b7e35f, - (q31_t)0x4fc2bec, (q31_t)0x18c37a44, (q31_t)0x50109d0, (q31_t)0x18cf1034, - (q31_t)0x505e9fb, (q31_t)0x18daa52f, (q31_t)0x50acc6b, (q31_t)0x18e63935, - (q31_t)0x50fb121, (q31_t)0x18f1cc45, (q31_t)0x514981d, (q31_t)0x18fd5e5f, - (q31_t)0x519815f, (q31_t)0x1908ef82, (q31_t)0x51e6ce6, (q31_t)0x19147fae, - (q31_t)0x5235ab2, (q31_t)0x19200ee3, (q31_t)0x5284ac3, (q31_t)0x192b9d1f, - (q31_t)0x52d3d18, (q31_t)0x19372a64, (q31_t)0x53231b3, (q31_t)0x1942b6af, - (q31_t)0x5372891, (q31_t)0x194e4201, (q31_t)0x53c21b4, (q31_t)0x1959cc5a, - (q31_t)0x5411d1b, (q31_t)0x196555b8, (q31_t)0x5461ac6, (q31_t)0x1970de1b, - (q31_t)0x54b1ab4, (q31_t)0x197c6584, (q31_t)0x5501ce5, (q31_t)0x1987ebf0, - (q31_t)0x555215a, (q31_t)0x19937161, (q31_t)0x55a2812, (q31_t)0x199ef5d6, - (q31_t)0x55f310d, (q31_t)0x19aa794d, (q31_t)0x5643c4a, (q31_t)0x19b5fbc8, - (q31_t)0x56949ca, (q31_t)0x19c17d44, (q31_t)0x56e598c, (q31_t)0x19ccfdc2, - (q31_t)0x5736b90, (q31_t)0x19d87d42, (q31_t)0x5787fd6, (q31_t)0x19e3fbc3, - (q31_t)0x57d965d, (q31_t)0x19ef7944, (q31_t)0x582af26, (q31_t)0x19faf5c5, - (q31_t)0x587ca31, (q31_t)0x1a067145, (q31_t)0x58ce77c, (q31_t)0x1a11ebc5, - (q31_t)0x5920708, (q31_t)0x1a1d6544, (q31_t)0x59728d5, (q31_t)0x1a28ddc0, - (q31_t)0x59c4ce3, (q31_t)0x1a34553b, (q31_t)0x5a17330, (q31_t)0x1a3fcbb3, - (q31_t)0x5a69bbe, (q31_t)0x1a4b4128, (q31_t)0x5abc68c, (q31_t)0x1a56b599, - (q31_t)0x5b0f399, (q31_t)0x1a622907, (q31_t)0x5b622e6, (q31_t)0x1a6d9b70, - (q31_t)0x5bb5472, (q31_t)0x1a790cd4, (q31_t)0x5c0883d, (q31_t)0x1a847d33, - (q31_t)0x5c5be47, (q31_t)0x1a8fec8c, (q31_t)0x5caf690, (q31_t)0x1a9b5adf, - (q31_t)0x5d03118, (q31_t)0x1aa6c82b, (q31_t)0x5d56ddd, (q31_t)0x1ab23471, - (q31_t)0x5daace1, (q31_t)0x1abd9faf, (q31_t)0x5dfee22, (q31_t)0x1ac909e5, - (q31_t)0x5e531a1, (q31_t)0x1ad47312, (q31_t)0x5ea775e, (q31_t)0x1adfdb37, - (q31_t)0x5efbf58, (q31_t)0x1aeb4253, (q31_t)0x5f5098f, (q31_t)0x1af6a865, - (q31_t)0x5fa5603, (q31_t)0x1b020d6c, (q31_t)0x5ffa4b3, (q31_t)0x1b0d716a, - (q31_t)0x604f5a0, (q31_t)0x1b18d45c, (q31_t)0x60a48c9, (q31_t)0x1b243643, - (q31_t)0x60f9e2e, (q31_t)0x1b2f971e, (q31_t)0x614f5cf, (q31_t)0x1b3af6ec, - (q31_t)0x61a4fac, (q31_t)0x1b4655ae, (q31_t)0x61fabc4, (q31_t)0x1b51b363, - (q31_t)0x6250a18, (q31_t)0x1b5d100a, (q31_t)0x62a6aa6, (q31_t)0x1b686ba3, - (q31_t)0x62fcd6f, (q31_t)0x1b73c62d, (q31_t)0x6353273, (q31_t)0x1b7f1fa9, - (q31_t)0x63a99b1, (q31_t)0x1b8a7815, (q31_t)0x6400329, (q31_t)0x1b95cf71, - (q31_t)0x6456edb, (q31_t)0x1ba125bd, (q31_t)0x64adcc7, (q31_t)0x1bac7af9, - (q31_t)0x6504ced, (q31_t)0x1bb7cf23, (q31_t)0x655bf4c, (q31_t)0x1bc3223c, - (q31_t)0x65b33e4, (q31_t)0x1bce7442, (q31_t)0x660aab5, (q31_t)0x1bd9c537, - (q31_t)0x66623be, (q31_t)0x1be51518, (q31_t)0x66b9f01, (q31_t)0x1bf063e6, - (q31_t)0x6711c7b, (q31_t)0x1bfbb1a0, (q31_t)0x6769c2e, (q31_t)0x1c06fe46, - (q31_t)0x67c1e18, (q31_t)0x1c1249d8, (q31_t)0x681a23a, (q31_t)0x1c1d9454, - (q31_t)0x6872894, (q31_t)0x1c28ddbb, (q31_t)0x68cb124, (q31_t)0x1c34260c, - (q31_t)0x6923bec, (q31_t)0x1c3f6d47, (q31_t)0x697c8eb, (q31_t)0x1c4ab36b, - (q31_t)0x69d5820, (q31_t)0x1c55f878, (q31_t)0x6a2e98b, (q31_t)0x1c613c6d, - (q31_t)0x6a87d2d, (q31_t)0x1c6c7f4a, (q31_t)0x6ae1304, (q31_t)0x1c77c10e, - (q31_t)0x6b3ab12, (q31_t)0x1c8301b9, (q31_t)0x6b94554, (q31_t)0x1c8e414b, - (q31_t)0x6bee1cd, (q31_t)0x1c997fc4, (q31_t)0x6c4807a, (q31_t)0x1ca4bd21, - (q31_t)0x6ca215c, (q31_t)0x1caff965, (q31_t)0x6cfc472, (q31_t)0x1cbb348d, - (q31_t)0x6d569be, (q31_t)0x1cc66e99, (q31_t)0x6db113d, (q31_t)0x1cd1a78a, - (q31_t)0x6e0baf0, (q31_t)0x1cdcdf5e, (q31_t)0x6e666d7, (q31_t)0x1ce81615, - (q31_t)0x6ec14f2, (q31_t)0x1cf34baf, (q31_t)0x6f1c540, (q31_t)0x1cfe802b, - (q31_t)0x6f777c1, (q31_t)0x1d09b389, (q31_t)0x6fd2c75, (q31_t)0x1d14e5c9, - (q31_t)0x702e35c, (q31_t)0x1d2016e9, (q31_t)0x7089c75, (q31_t)0x1d2b46ea, - (q31_t)0x70e57c0, (q31_t)0x1d3675cb, (q31_t)0x714153e, (q31_t)0x1d41a38c, - (q31_t)0x719d4ed, (q31_t)0x1d4cd02c, (q31_t)0x71f96ce, (q31_t)0x1d57fbaa, - (q31_t)0x7255ae0, (q31_t)0x1d632608, (q31_t)0x72b2123, (q31_t)0x1d6e4f43, - (q31_t)0x730e997, (q31_t)0x1d79775c, (q31_t)0x736b43c, (q31_t)0x1d849e51, - (q31_t)0x73c8111, (q31_t)0x1d8fc424, (q31_t)0x7425016, (q31_t)0x1d9ae8d2, - (q31_t)0x748214c, (q31_t)0x1da60c5d, (q31_t)0x74df4b1, (q31_t)0x1db12ec3, - (q31_t)0x753ca46, (q31_t)0x1dbc5004, (q31_t)0x759a20a, (q31_t)0x1dc7701f, - (q31_t)0x75f7bfe, (q31_t)0x1dd28f15, (q31_t)0x7655820, (q31_t)0x1dddace4, - (q31_t)0x76b3671, (q31_t)0x1de8c98c, (q31_t)0x77116f0, (q31_t)0x1df3e50d, - (q31_t)0x776f99d, (q31_t)0x1dfeff67, (q31_t)0x77cde79, (q31_t)0x1e0a1898, - (q31_t)0x782c582, (q31_t)0x1e1530a1, (q31_t)0x788aeb9, (q31_t)0x1e204781, - (q31_t)0x78e9a1d, (q31_t)0x1e2b5d38, (q31_t)0x79487ae, (q31_t)0x1e3671c5, - (q31_t)0x79a776c, (q31_t)0x1e418528, (q31_t)0x7a06957, (q31_t)0x1e4c9760, - (q31_t)0x7a65d6e, (q31_t)0x1e57a86d, (q31_t)0x7ac53b1, (q31_t)0x1e62b84f, - (q31_t)0x7b24c20, (q31_t)0x1e6dc705, (q31_t)0x7b846ba, (q31_t)0x1e78d48e, - (q31_t)0x7be4381, (q31_t)0x1e83e0eb, (q31_t)0x7c44272, (q31_t)0x1e8eec1b, - (q31_t)0x7ca438f, (q31_t)0x1e99f61d, (q31_t)0x7d046d6, (q31_t)0x1ea4fef0, - (q31_t)0x7d64c47, (q31_t)0x1eb00696, (q31_t)0x7dc53e3, (q31_t)0x1ebb0d0d, - (q31_t)0x7e25daa, (q31_t)0x1ec61254, (q31_t)0x7e8699a, (q31_t)0x1ed1166b, - (q31_t)0x7ee77b3, (q31_t)0x1edc1953, (q31_t)0x7f487f6, (q31_t)0x1ee71b0a, - (q31_t)0x7fa9a62, (q31_t)0x1ef21b90, (q31_t)0x800aef7, (q31_t)0x1efd1ae4, - (q31_t)0x806c5b5, (q31_t)0x1f081907, (q31_t)0x80cde9b, (q31_t)0x1f1315f7, - (q31_t)0x812f9a9, (q31_t)0x1f1e11b5, (q31_t)0x81916df, (q31_t)0x1f290c3f, - (q31_t)0x81f363d, (q31_t)0x1f340596, (q31_t)0x82557c3, (q31_t)0x1f3efdb9, - (q31_t)0x82b7b70, (q31_t)0x1f49f4a8, (q31_t)0x831a143, (q31_t)0x1f54ea62, - (q31_t)0x837c93e, (q31_t)0x1f5fdee6, (q31_t)0x83df35f, (q31_t)0x1f6ad235, - (q31_t)0x8441fa6, (q31_t)0x1f75c44e, (q31_t)0x84a4e14, (q31_t)0x1f80b531, - (q31_t)0x8507ea7, (q31_t)0x1f8ba4dc, (q31_t)0x856b160, (q31_t)0x1f969350, - (q31_t)0x85ce63e, (q31_t)0x1fa1808c, (q31_t)0x8631d42, (q31_t)0x1fac6c91, - (q31_t)0x869566a, (q31_t)0x1fb7575c, (q31_t)0x86f91b7, (q31_t)0x1fc240ef, - (q31_t)0x875cf28, (q31_t)0x1fcd2948, (q31_t)0x87c0ebd, (q31_t)0x1fd81067, - (q31_t)0x8825077, (q31_t)0x1fe2f64c, (q31_t)0x8889454, (q31_t)0x1feddaf6, - (q31_t)0x88eda54, (q31_t)0x1ff8be65, (q31_t)0x8952278, (q31_t)0x2003a099, - (q31_t)0x89b6cbf, (q31_t)0x200e8190, (q31_t)0x8a1b928, (q31_t)0x2019614c, - (q31_t)0x8a807b4, (q31_t)0x20243fca, (q31_t)0x8ae5862, (q31_t)0x202f1d0b, - (q31_t)0x8b4ab32, (q31_t)0x2039f90f, (q31_t)0x8bb0023, (q31_t)0x2044d3d4, - (q31_t)0x8c15736, (q31_t)0x204fad5b, (q31_t)0x8c7b06b, (q31_t)0x205a85a3, - (q31_t)0x8ce0bc0, (q31_t)0x20655cac, (q31_t)0x8d46936, (q31_t)0x20703275, - (q31_t)0x8dac8cd, (q31_t)0x207b06fe, (q31_t)0x8e12a84, (q31_t)0x2085da46, - (q31_t)0x8e78e5b, (q31_t)0x2090ac4d, (q31_t)0x8edf452, (q31_t)0x209b7d13, - (q31_t)0x8f45c68, (q31_t)0x20a64c97, (q31_t)0x8fac69e, (q31_t)0x20b11ad9, - (q31_t)0x90132f2, (q31_t)0x20bbe7d8, (q31_t)0x907a166, (q31_t)0x20c6b395, - (q31_t)0x90e11f7, (q31_t)0x20d17e0d, (q31_t)0x91484a8, (q31_t)0x20dc4742, - (q31_t)0x91af976, (q31_t)0x20e70f32, (q31_t)0x9217062, (q31_t)0x20f1d5de, - (q31_t)0x927e96b, (q31_t)0x20fc9b44, (q31_t)0x92e6492, (q31_t)0x21075f65, - (q31_t)0x934e1d6, (q31_t)0x21122240, (q31_t)0x93b6137, (q31_t)0x211ce3d5, - (q31_t)0x941e2b4, (q31_t)0x2127a423, (q31_t)0x948664d, (q31_t)0x21326329, - (q31_t)0x94eec03, (q31_t)0x213d20e8, (q31_t)0x95573d4, (q31_t)0x2147dd5f, - (q31_t)0x95bfdc1, (q31_t)0x2152988d, (q31_t)0x96289c9, (q31_t)0x215d5273, - (q31_t)0x96917ec, (q31_t)0x21680b0f, (q31_t)0x96fa82a, (q31_t)0x2172c262, - (q31_t)0x9763a83, (q31_t)0x217d786a, (q31_t)0x97ccef5, (q31_t)0x21882d28, - (q31_t)0x9836582, (q31_t)0x2192e09b, (q31_t)0x989fe29, (q31_t)0x219d92c2, - (q31_t)0x99098e9, (q31_t)0x21a8439e, (q31_t)0x99735c2, (q31_t)0x21b2f32e, - (q31_t)0x99dd4b4, (q31_t)0x21bda171, (q31_t)0x9a475bf, (q31_t)0x21c84e67, - (q31_t)0x9ab18e3, (q31_t)0x21d2fa0f, (q31_t)0x9b1be1e, (q31_t)0x21dda46a, - (q31_t)0x9b86572, (q31_t)0x21e84d76, (q31_t)0x9bf0edd, (q31_t)0x21f2f534, - (q31_t)0x9c5ba60, (q31_t)0x21fd9ba3, (q31_t)0x9cc67fa, (q31_t)0x220840c2, - (q31_t)0x9d317ab, (q31_t)0x2212e492, (q31_t)0x9d9c973, (q31_t)0x221d8711, - (q31_t)0x9e07d51, (q31_t)0x2228283f, (q31_t)0x9e73346, (q31_t)0x2232c81c, - (q31_t)0x9edeb50, (q31_t)0x223d66a8, (q31_t)0x9f4a570, (q31_t)0x224803e2, - (q31_t)0x9fb61a5, (q31_t)0x22529fca, (q31_t)0xa021fef, (q31_t)0x225d3a5e, - (q31_t)0xa08e04f, (q31_t)0x2267d3a0, (q31_t)0xa0fa2c3, (q31_t)0x22726b8e, - (q31_t)0xa16674b, (q31_t)0x227d0228, (q31_t)0xa1d2de7, (q31_t)0x2287976e, - (q31_t)0xa23f698, (q31_t)0x22922b5e, (q31_t)0xa2ac15b, (q31_t)0x229cbdfa, - (q31_t)0xa318e32, (q31_t)0x22a74f40, (q31_t)0xa385d1d, (q31_t)0x22b1df30, - (q31_t)0xa3f2e19, (q31_t)0x22bc6dca, (q31_t)0xa460129, (q31_t)0x22c6fb0c, - (q31_t)0xa4cd64b, (q31_t)0x22d186f8, (q31_t)0xa53ad7e, (q31_t)0x22dc118c, - (q31_t)0xa5a86c4, (q31_t)0x22e69ac8, (q31_t)0xa61621b, (q31_t)0x22f122ab, - (q31_t)0xa683f83, (q31_t)0x22fba936, (q31_t)0xa6f1efc, (q31_t)0x23062e67, - (q31_t)0xa760086, (q31_t)0x2310b23e, (q31_t)0xa7ce420, (q31_t)0x231b34bc, - (q31_t)0xa83c9ca, (q31_t)0x2325b5df, (q31_t)0xa8ab184, (q31_t)0x233035a7, - (q31_t)0xa919b4e, (q31_t)0x233ab414, (q31_t)0xa988727, (q31_t)0x23453125, - (q31_t)0xa9f750f, (q31_t)0x234facda, (q31_t)0xaa66506, (q31_t)0x235a2733, - (q31_t)0xaad570c, (q31_t)0x2364a02e, (q31_t)0xab44b1f, (q31_t)0x236f17cc, - (q31_t)0xabb4141, (q31_t)0x23798e0d, (q31_t)0xac23971, (q31_t)0x238402ef, - (q31_t)0xac933ae, (q31_t)0x238e7673, (q31_t)0xad02ff8, (q31_t)0x2398e898, - (q31_t)0xad72e4f, (q31_t)0x23a3595e, (q31_t)0xade2eb3, (q31_t)0x23adc8c4, - (q31_t)0xae53123, (q31_t)0x23b836ca, (q31_t)0xaec35a0, (q31_t)0x23c2a36f, - (q31_t)0xaf33c28, (q31_t)0x23cd0eb3, (q31_t)0xafa44bc, (q31_t)0x23d77896, - (q31_t)0xb014f5b, (q31_t)0x23e1e117, (q31_t)0xb085c05, (q31_t)0x23ec4837, - (q31_t)0xb0f6aba, (q31_t)0x23f6adf3, (q31_t)0xb167b79, (q31_t)0x2401124d, - (q31_t)0xb1d8e43, (q31_t)0x240b7543, (q31_t)0xb24a316, (q31_t)0x2415d6d5, - (q31_t)0xb2bb9f4, (q31_t)0x24203704, (q31_t)0xb32d2da, (q31_t)0x242a95ce, - (q31_t)0xb39edca, (q31_t)0x2434f332, (q31_t)0xb410ac3, (q31_t)0x243f4f32, - (q31_t)0xb4829c4, (q31_t)0x2449a9cc, (q31_t)0xb4f4acd, (q31_t)0x245402ff, - (q31_t)0xb566ddf, (q31_t)0x245e5acc, (q31_t)0xb5d92f8, (q31_t)0x2468b132, - (q31_t)0xb64ba19, (q31_t)0x24730631, (q31_t)0xb6be341, (q31_t)0x247d59c8, - (q31_t)0xb730e70, (q31_t)0x2487abf7, (q31_t)0xb7a3ba5, (q31_t)0x2491fcbe, - (q31_t)0xb816ae1, (q31_t)0x249c4c1b, (q31_t)0xb889c23, (q31_t)0x24a69a0f, - (q31_t)0xb8fcf6b, (q31_t)0x24b0e699, (q31_t)0xb9704b9, (q31_t)0x24bb31ba, - (q31_t)0xb9e3c0b, (q31_t)0x24c57b6f, (q31_t)0xba57563, (q31_t)0x24cfc3ba, - (q31_t)0xbacb0bf, (q31_t)0x24da0a9a, (q31_t)0xbb3ee20, (q31_t)0x24e4500e, - (q31_t)0xbbb2d85, (q31_t)0x24ee9415, (q31_t)0xbc26eee, (q31_t)0x24f8d6b0, - (q31_t)0xbc9b25a, (q31_t)0x250317df, (q31_t)0xbd0f7ca, (q31_t)0x250d57a0, - (q31_t)0xbd83f3d, (q31_t)0x251795f3, (q31_t)0xbdf88b3, (q31_t)0x2521d2d8, - (q31_t)0xbe6d42b, (q31_t)0x252c0e4f, (q31_t)0xbee21a5, (q31_t)0x25364857, - (q31_t)0xbf57121, (q31_t)0x254080ef, (q31_t)0xbfcc29f, (q31_t)0x254ab818, - (q31_t)0xc04161e, (q31_t)0x2554edd1, (q31_t)0xc0b6b9e, (q31_t)0x255f2219, - (q31_t)0xc12c31f, (q31_t)0x256954f1, (q31_t)0xc1a1ca0, (q31_t)0x25738657, - (q31_t)0xc217822, (q31_t)0x257db64c, (q31_t)0xc28d5a3, (q31_t)0x2587e4cf, - (q31_t)0xc303524, (q31_t)0x259211df, (q31_t)0xc3796a5, (q31_t)0x259c3d7c, - (q31_t)0xc3efa25, (q31_t)0x25a667a7, (q31_t)0xc465fa3, (q31_t)0x25b0905d, - (q31_t)0xc4dc720, (q31_t)0x25bab7a0, (q31_t)0xc55309b, (q31_t)0x25c4dd6e, - (q31_t)0xc5c9c14, (q31_t)0x25cf01c8, (q31_t)0xc64098b, (q31_t)0x25d924ac, - (q31_t)0xc6b78ff, (q31_t)0x25e3461b, (q31_t)0xc72ea70, (q31_t)0x25ed6614, - (q31_t)0xc7a5dde, (q31_t)0x25f78497, (q31_t)0xc81d349, (q31_t)0x2601a1a2, - (q31_t)0xc894aaf, (q31_t)0x260bbd37, (q31_t)0xc90c412, (q31_t)0x2615d754, - (q31_t)0xc983f70, (q31_t)0x261feffa, (q31_t)0xc9fbcca, (q31_t)0x262a0727, - (q31_t)0xca73c1e, (q31_t)0x26341cdb, (q31_t)0xcaebd6e, (q31_t)0x263e3117, - (q31_t)0xcb640b8, (q31_t)0x264843d9, (q31_t)0xcbdc5fc, (q31_t)0x26525521, - (q31_t)0xcc54d3a, (q31_t)0x265c64ef, (q31_t)0xcccd671, (q31_t)0x26667342, - (q31_t)0xcd461a2, (q31_t)0x2670801a, (q31_t)0xcdbeecc, (q31_t)0x267a8b77, - (q31_t)0xce37def, (q31_t)0x26849558, (q31_t)0xceb0f0a, (q31_t)0x268e9dbd, - (q31_t)0xcf2a21d, (q31_t)0x2698a4a6, (q31_t)0xcfa3729, (q31_t)0x26a2aa11, - (q31_t)0xd01ce2b, (q31_t)0x26acadff, (q31_t)0xd096725, (q31_t)0x26b6b070, - (q31_t)0xd110216, (q31_t)0x26c0b162, (q31_t)0xd189efe, (q31_t)0x26cab0d6, - (q31_t)0xd203ddc, (q31_t)0x26d4aecb, (q31_t)0xd27deb0, (q31_t)0x26deab41, - (q31_t)0xd2f817b, (q31_t)0x26e8a637, (q31_t)0xd37263a, (q31_t)0x26f29fad, - (q31_t)0xd3eccef, (q31_t)0x26fc97a3, (q31_t)0xd467599, (q31_t)0x27068e18, - (q31_t)0xd4e2037, (q31_t)0x2710830c, (q31_t)0xd55ccca, (q31_t)0x271a767e, - (q31_t)0xd5d7b50, (q31_t)0x2724686e, (q31_t)0xd652bcb, (q31_t)0x272e58dc, - (q31_t)0xd6cde39, (q31_t)0x273847c8, (q31_t)0xd74929a, (q31_t)0x27423530, - (q31_t)0xd7c48ee, (q31_t)0x274c2115, (q31_t)0xd840134, (q31_t)0x27560b76, - (q31_t)0xd8bbb6d, (q31_t)0x275ff452, (q31_t)0xd937798, (q31_t)0x2769dbaa, - (q31_t)0xd9b35b4, (q31_t)0x2773c17d, (q31_t)0xda2f5c2, (q31_t)0x277da5cb, - (q31_t)0xdaab7c0, (q31_t)0x27878893, (q31_t)0xdb27bb0, (q31_t)0x279169d5, - (q31_t)0xdba4190, (q31_t)0x279b4990, (q31_t)0xdc20960, (q31_t)0x27a527c4, - (q31_t)0xdc9d320, (q31_t)0x27af0472, (q31_t)0xdd19ed0, (q31_t)0x27b8df97, - (q31_t)0xdd96c6f, (q31_t)0x27c2b934, (q31_t)0xde13bfd, (q31_t)0x27cc9149, - (q31_t)0xde90d79, (q31_t)0x27d667d5, (q31_t)0xdf0e0e4, (q31_t)0x27e03cd8, - (q31_t)0xdf8b63d, (q31_t)0x27ea1052, (q31_t)0xe008d84, (q31_t)0x27f3e241, - (q31_t)0xe0866b8, (q31_t)0x27fdb2a7, (q31_t)0xe1041d9, (q31_t)0x28078181, - (q31_t)0xe181ee8, (q31_t)0x28114ed0, (q31_t)0xe1ffde2, (q31_t)0x281b1a94, - (q31_t)0xe27dec9, (q31_t)0x2824e4cc, (q31_t)0xe2fc19c, (q31_t)0x282ead78, - (q31_t)0xe37a65b, (q31_t)0x28387498, (q31_t)0xe3f8d05, (q31_t)0x28423a2a, - (q31_t)0xe47759a, (q31_t)0x284bfe2f, (q31_t)0xe4f6019, (q31_t)0x2855c0a6, - (q31_t)0xe574c84, (q31_t)0x285f8190, (q31_t)0xe5f3ad8, (q31_t)0x286940ea, - (q31_t)0xe672b16, (q31_t)0x2872feb6, (q31_t)0xe6f1d3d, (q31_t)0x287cbaf3, - (q31_t)0xe77114e, (q31_t)0x288675a0, (q31_t)0xe7f0748, (q31_t)0x28902ebd, - (q31_t)0xe86ff2a, (q31_t)0x2899e64a, (q31_t)0xe8ef8f4, (q31_t)0x28a39c46, - (q31_t)0xe96f4a7, (q31_t)0x28ad50b1, (q31_t)0xe9ef241, (q31_t)0x28b7038b, - (q31_t)0xea6f1c2, (q31_t)0x28c0b4d2, (q31_t)0xeaef32b, (q31_t)0x28ca6488, - (q31_t)0xeb6f67a, (q31_t)0x28d412ab, (q31_t)0xebefbb0, (q31_t)0x28ddbf3b, - (q31_t)0xec702cb, (q31_t)0x28e76a37, (q31_t)0xecf0bcd, (q31_t)0x28f113a0, - (q31_t)0xed716b4, (q31_t)0x28fabb75, (q31_t)0xedf2380, (q31_t)0x290461b5, - (q31_t)0xee73231, (q31_t)0x290e0661, (q31_t)0xeef42c7, (q31_t)0x2917a977, - (q31_t)0xef75541, (q31_t)0x29214af8, (q31_t)0xeff699f, (q31_t)0x292aeae3, - (q31_t)0xf077fe1, (q31_t)0x29348937, (q31_t)0xf0f9805, (q31_t)0x293e25f5, - (q31_t)0xf17b20d, (q31_t)0x2947c11c, (q31_t)0xf1fcdf8, (q31_t)0x29515aab, - (q31_t)0xf27ebc5, (q31_t)0x295af2a3, (q31_t)0xf300b74, (q31_t)0x29648902, - (q31_t)0xf382d05, (q31_t)0x296e1dc9, (q31_t)0xf405077, (q31_t)0x2977b0f7, - (q31_t)0xf4875ca, (q31_t)0x2981428c, (q31_t)0xf509cfe, (q31_t)0x298ad287, - (q31_t)0xf58c613, (q31_t)0x299460e8, (q31_t)0xf60f108, (q31_t)0x299dedaf, - (q31_t)0xf691ddd, (q31_t)0x29a778db, (q31_t)0xf714c91, (q31_t)0x29b1026c, - (q31_t)0xf797d24, (q31_t)0x29ba8a61, (q31_t)0xf81af97, (q31_t)0x29c410ba, - (q31_t)0xf89e3e8, (q31_t)0x29cd9578, (q31_t)0xf921a17, (q31_t)0x29d71899, - (q31_t)0xf9a5225, (q31_t)0x29e09a1c, (q31_t)0xfa28c10, (q31_t)0x29ea1a03, - (q31_t)0xfaac7d8, (q31_t)0x29f3984c, (q31_t)0xfb3057d, (q31_t)0x29fd14f6, - (q31_t)0xfbb4500, (q31_t)0x2a069003, (q31_t)0xfc3865e, (q31_t)0x2a100970, - (q31_t)0xfcbc999, (q31_t)0x2a19813f, (q31_t)0xfd40eaf, (q31_t)0x2a22f76e, - (q31_t)0xfdc55a1, (q31_t)0x2a2c6bfd, (q31_t)0xfe49e6d, (q31_t)0x2a35deeb, - (q31_t)0xfece915, (q31_t)0x2a3f503a, (q31_t)0xff53597, (q31_t)0x2a48bfe7, - (q31_t)0xffd83f4, (q31_t)0x2a522df3, (q31_t)0x1005d42a, (q31_t)0x2a5b9a5d, - (q31_t)0x100e2639, (q31_t)0x2a650525, (q31_t)0x10167a22, (q31_t)0x2a6e6e4b, - (q31_t)0x101ecfe4, (q31_t)0x2a77d5ce, (q31_t)0x1027277e, (q31_t)0x2a813bae, - (q31_t)0x102f80f1, (q31_t)0x2a8a9fea, (q31_t)0x1037dc3b, (q31_t)0x2a940283, - (q31_t)0x1040395d, (q31_t)0x2a9d6377, (q31_t)0x10489856, (q31_t)0x2aa6c2c6, - (q31_t)0x1050f926, (q31_t)0x2ab02071, (q31_t)0x10595bcd, (q31_t)0x2ab97c77, - (q31_t)0x1061c04a, (q31_t)0x2ac2d6d6, (q31_t)0x106a269d, (q31_t)0x2acc2f90, - (q31_t)0x10728ec6, (q31_t)0x2ad586a3, (q31_t)0x107af8c4, (q31_t)0x2adedc10, - (q31_t)0x10836497, (q31_t)0x2ae82fd5, (q31_t)0x108bd23f, (q31_t)0x2af181f3, - (q31_t)0x109441bb, (q31_t)0x2afad269, (q31_t)0x109cb30b, (q31_t)0x2b042137, - (q31_t)0x10a5262f, (q31_t)0x2b0d6e5c, (q31_t)0x10ad9b26, (q31_t)0x2b16b9d9, - (q31_t)0x10b611f1, (q31_t)0x2b2003ac, (q31_t)0x10be8a8d, (q31_t)0x2b294bd5, - (q31_t)0x10c704fd, (q31_t)0x2b329255, (q31_t)0x10cf813e, (q31_t)0x2b3bd72a, - (q31_t)0x10d7ff51, (q31_t)0x2b451a55, (q31_t)0x10e07f36, (q31_t)0x2b4e5bd4, - (q31_t)0x10e900ec, (q31_t)0x2b579ba8, (q31_t)0x10f18472, (q31_t)0x2b60d9d0, - (q31_t)0x10fa09c9, (q31_t)0x2b6a164d, (q31_t)0x110290f0, (q31_t)0x2b73511c, - (q31_t)0x110b19e7, (q31_t)0x2b7c8a3f, (q31_t)0x1113a4ad, (q31_t)0x2b85c1b5, - (q31_t)0x111c3142, (q31_t)0x2b8ef77d, (q31_t)0x1124bfa6, (q31_t)0x2b982b97, - (q31_t)0x112d4fd9, (q31_t)0x2ba15e03, (q31_t)0x1135e1d9, (q31_t)0x2baa8ec0, - (q31_t)0x113e75a8, (q31_t)0x2bb3bdce, (q31_t)0x11470b44, (q31_t)0x2bbceb2d, - (q31_t)0x114fa2ad, (q31_t)0x2bc616dd, (q31_t)0x11583be2, (q31_t)0x2bcf40dc, - (q31_t)0x1160d6e5, (q31_t)0x2bd8692b, (q31_t)0x116973b3, (q31_t)0x2be18fc9, - (q31_t)0x1172124d, (q31_t)0x2beab4b6, (q31_t)0x117ab2b3, (q31_t)0x2bf3d7f2, - (q31_t)0x118354e4, (q31_t)0x2bfcf97c, (q31_t)0x118bf8e0, (q31_t)0x2c061953, - (q31_t)0x11949ea6, (q31_t)0x2c0f3779, (q31_t)0x119d4636, (q31_t)0x2c1853eb, - (q31_t)0x11a5ef90, (q31_t)0x2c216eaa, (q31_t)0x11ae9ab4, (q31_t)0x2c2a87b6, - (q31_t)0x11b747a0, (q31_t)0x2c339f0e, (q31_t)0x11bff656, (q31_t)0x2c3cb4b1, - (q31_t)0x11c8a6d4, (q31_t)0x2c45c8a0, (q31_t)0x11d1591a, (q31_t)0x2c4edada, - (q31_t)0x11da0d28, (q31_t)0x2c57eb5e, (q31_t)0x11e2c2fd, (q31_t)0x2c60fa2d, - (q31_t)0x11eb7a9a, (q31_t)0x2c6a0746, (q31_t)0x11f433fd, (q31_t)0x2c7312a9, - (q31_t)0x11fcef27, (q31_t)0x2c7c1c55, (q31_t)0x1205ac17, (q31_t)0x2c85244a, - (q31_t)0x120e6acc, (q31_t)0x2c8e2a87, (q31_t)0x12172b48, (q31_t)0x2c972f0d, - (q31_t)0x121fed88, (q31_t)0x2ca031da, (q31_t)0x1228b18d, (q31_t)0x2ca932ef, - (q31_t)0x12317756, (q31_t)0x2cb2324c, (q31_t)0x123a3ee4, (q31_t)0x2cbb2fef, - (q31_t)0x12430835, (q31_t)0x2cc42bd9, (q31_t)0x124bd34a, (q31_t)0x2ccd2609, - (q31_t)0x1254a021, (q31_t)0x2cd61e7f, (q31_t)0x125d6ebc, (q31_t)0x2cdf153a, - (q31_t)0x12663f19, (q31_t)0x2ce80a3a, (q31_t)0x126f1138, (q31_t)0x2cf0fd80, - (q31_t)0x1277e518, (q31_t)0x2cf9ef09, (q31_t)0x1280babb, (q31_t)0x2d02ded7, - (q31_t)0x1289921e, (q31_t)0x2d0bcce8, (q31_t)0x12926b41, (q31_t)0x2d14b93d, - (q31_t)0x129b4626, (q31_t)0x2d1da3d5, (q31_t)0x12a422ca, (q31_t)0x2d268cb0, - (q31_t)0x12ad012e, (q31_t)0x2d2f73cd, (q31_t)0x12b5e151, (q31_t)0x2d38592c, - (q31_t)0x12bec333, (q31_t)0x2d413ccd, (q31_t)0x12c7a6d4, (q31_t)0x2d4a1eaf, - (q31_t)0x12d08c33, (q31_t)0x2d52fed2, (q31_t)0x12d97350, (q31_t)0x2d5bdd36, - (q31_t)0x12e25c2b, (q31_t)0x2d64b9da, (q31_t)0x12eb46c3, (q31_t)0x2d6d94bf, - (q31_t)0x12f43318, (q31_t)0x2d766de2, (q31_t)0x12fd2129, (q31_t)0x2d7f4545, - (q31_t)0x130610f7, (q31_t)0x2d881ae8, (q31_t)0x130f0280, (q31_t)0x2d90eec8, - (q31_t)0x1317f5c6, (q31_t)0x2d99c0e7, (q31_t)0x1320eac6, (q31_t)0x2da29144, - (q31_t)0x1329e181, (q31_t)0x2dab5fdf, (q31_t)0x1332d9f7, (q31_t)0x2db42cb6, - (q31_t)0x133bd427, (q31_t)0x2dbcf7cb, (q31_t)0x1344d011, (q31_t)0x2dc5c11c, - (q31_t)0x134dcdb4, (q31_t)0x2dce88aa, (q31_t)0x1356cd11, (q31_t)0x2dd74e73, - (q31_t)0x135fce26, (q31_t)0x2de01278, (q31_t)0x1368d0f3, (q31_t)0x2de8d4b8, - (q31_t)0x1371d579, (q31_t)0x2df19534, (q31_t)0x137adbb6, (q31_t)0x2dfa53e9, - (q31_t)0x1383e3ab, (q31_t)0x2e0310d9, (q31_t)0x138ced57, (q31_t)0x2e0bcc03, - (q31_t)0x1395f8ba, (q31_t)0x2e148566, (q31_t)0x139f05d3, (q31_t)0x2e1d3d03, - (q31_t)0x13a814a2, (q31_t)0x2e25f2d8, (q31_t)0x13b12526, (q31_t)0x2e2ea6e6, - (q31_t)0x13ba3760, (q31_t)0x2e37592c, (q31_t)0x13c34b4f, (q31_t)0x2e4009aa, - (q31_t)0x13cc60f2, (q31_t)0x2e48b860, (q31_t)0x13d5784a, (q31_t)0x2e51654c, - (q31_t)0x13de9156, (q31_t)0x2e5a1070, (q31_t)0x13e7ac15, (q31_t)0x2e62b9ca, - (q31_t)0x13f0c887, (q31_t)0x2e6b615a, (q31_t)0x13f9e6ad, (q31_t)0x2e740720, - (q31_t)0x14030684, (q31_t)0x2e7cab1c, (q31_t)0x140c280e, (q31_t)0x2e854d4d, - (q31_t)0x14154b4a, (q31_t)0x2e8dedb3, (q31_t)0x141e7037, (q31_t)0x2e968c4d, - (q31_t)0x142796d5, (q31_t)0x2e9f291b, (q31_t)0x1430bf24, (q31_t)0x2ea7c41e, - (q31_t)0x1439e923, (q31_t)0x2eb05d53, (q31_t)0x144314d3, (q31_t)0x2eb8f4bc, - (q31_t)0x144c4232, (q31_t)0x2ec18a58, (q31_t)0x14557140, (q31_t)0x2eca1e27, - (q31_t)0x145ea1fd, (q31_t)0x2ed2b027, (q31_t)0x1467d469, (q31_t)0x2edb405a, - (q31_t)0x14710883, (q31_t)0x2ee3cebe, (q31_t)0x147a3e4b, (q31_t)0x2eec5b53, - (q31_t)0x148375c1, (q31_t)0x2ef4e619, (q31_t)0x148caee4, (q31_t)0x2efd6f10, - (q31_t)0x1495e9b3, (q31_t)0x2f05f637, (q31_t)0x149f2630, (q31_t)0x2f0e7b8e, - (q31_t)0x14a86458, (q31_t)0x2f16ff14, (q31_t)0x14b1a42c, (q31_t)0x2f1f80ca, - (q31_t)0x14bae5ab, (q31_t)0x2f2800af, (q31_t)0x14c428d6, (q31_t)0x2f307ec2, - (q31_t)0x14cd6dab, (q31_t)0x2f38fb03, (q31_t)0x14d6b42b, (q31_t)0x2f417573, - (q31_t)0x14dffc54, (q31_t)0x2f49ee0f, (q31_t)0x14e94627, (q31_t)0x2f5264da, - (q31_t)0x14f291a4, (q31_t)0x2f5ad9d1, (q31_t)0x14fbdec9, (q31_t)0x2f634cf5, - (q31_t)0x15052d97, (q31_t)0x2f6bbe45, (q31_t)0x150e7e0d, (q31_t)0x2f742dc1, - (q31_t)0x1517d02b, (q31_t)0x2f7c9b69, (q31_t)0x152123f0, (q31_t)0x2f85073c, - (q31_t)0x152a795d, (q31_t)0x2f8d713a, (q31_t)0x1533d070, (q31_t)0x2f95d963, - (q31_t)0x153d292a, (q31_t)0x2f9e3fb6, (q31_t)0x15468389, (q31_t)0x2fa6a433, - (q31_t)0x154fdf8f, (q31_t)0x2faf06da, (q31_t)0x15593d3a, (q31_t)0x2fb767aa, - (q31_t)0x15629c89, (q31_t)0x2fbfc6a3, (q31_t)0x156bfd7d, (q31_t)0x2fc823c5, - (q31_t)0x15756016, (q31_t)0x2fd07f0f, (q31_t)0x157ec452, (q31_t)0x2fd8d882, - (q31_t)0x15882a32, (q31_t)0x2fe1301c, (q31_t)0x159191b5, (q31_t)0x2fe985de, - (q31_t)0x159afadb, (q31_t)0x2ff1d9c7, (q31_t)0x15a465a3, (q31_t)0x2ffa2bd6, - (q31_t)0x15add20d, (q31_t)0x30027c0c, (q31_t)0x15b74019, (q31_t)0x300aca69, - (q31_t)0x15c0afc6, (q31_t)0x301316eb, (q31_t)0x15ca2115, (q31_t)0x301b6193, - (q31_t)0x15d39403, (q31_t)0x3023aa5f, (q31_t)0x15dd0892, (q31_t)0x302bf151, - (q31_t)0x15e67ec1, (q31_t)0x30343667, (q31_t)0x15eff690, (q31_t)0x303c79a2, - (q31_t)0x15f96ffd, (q31_t)0x3044bb00, (q31_t)0x1602eb0a, (q31_t)0x304cfa83, - (q31_t)0x160c67b4, (q31_t)0x30553828, (q31_t)0x1615e5fd, (q31_t)0x305d73f0, - (q31_t)0x161f65e4, (q31_t)0x3065addb, (q31_t)0x1628e767, (q31_t)0x306de5e9, - (q31_t)0x16326a88, (q31_t)0x30761c18, (q31_t)0x163bef46, (q31_t)0x307e5069, - (q31_t)0x1645759f, (q31_t)0x308682dc, (q31_t)0x164efd94, (q31_t)0x308eb36f, - (q31_t)0x16588725, (q31_t)0x3096e223, (q31_t)0x16621251, (q31_t)0x309f0ef8, - (q31_t)0x166b9f18, (q31_t)0x30a739ed, (q31_t)0x16752d79, (q31_t)0x30af6302, - (q31_t)0x167ebd74, (q31_t)0x30b78a36, (q31_t)0x16884f09, (q31_t)0x30bfaf89, - (q31_t)0x1691e237, (q31_t)0x30c7d2fb, (q31_t)0x169b76fe, (q31_t)0x30cff48c, - (q31_t)0x16a50d5d, (q31_t)0x30d8143b, (q31_t)0x16aea555, (q31_t)0x30e03208, - (q31_t)0x16b83ee4, (q31_t)0x30e84df3, (q31_t)0x16c1da0b, (q31_t)0x30f067fb, - (q31_t)0x16cb76c9, (q31_t)0x30f8801f, (q31_t)0x16d5151d, (q31_t)0x31009661, - (q31_t)0x16deb508, (q31_t)0x3108aabf, (q31_t)0x16e85689, (q31_t)0x3110bd39, - (q31_t)0x16f1f99f, (q31_t)0x3118cdcf, (q31_t)0x16fb9e4b, (q31_t)0x3120dc80, - (q31_t)0x1705448b, (q31_t)0x3128e94c, (q31_t)0x170eec60, (q31_t)0x3130f433, - (q31_t)0x171895c9, (q31_t)0x3138fd35, (q31_t)0x172240c5, (q31_t)0x31410450, - (q31_t)0x172bed55, (q31_t)0x31490986, (q31_t)0x17359b78, (q31_t)0x31510cd5, - (q31_t)0x173f4b2e, (q31_t)0x31590e3e, (q31_t)0x1748fc75, (q31_t)0x31610dbf, - (q31_t)0x1752af4f, (q31_t)0x31690b59, (q31_t)0x175c63ba, (q31_t)0x3171070c, - (q31_t)0x176619b6, (q31_t)0x317900d6, (q31_t)0x176fd143, (q31_t)0x3180f8b8, - (q31_t)0x17798a60, (q31_t)0x3188eeb2, (q31_t)0x1783450d, (q31_t)0x3190e2c3, - (q31_t)0x178d014a, (q31_t)0x3198d4ea, (q31_t)0x1796bf16, (q31_t)0x31a0c528, - (q31_t)0x17a07e70, (q31_t)0x31a8b37c, (q31_t)0x17aa3f5a, (q31_t)0x31b09fe7, - (q31_t)0x17b401d1, (q31_t)0x31b88a66, (q31_t)0x17bdc5d6, (q31_t)0x31c072fb, - (q31_t)0x17c78b68, (q31_t)0x31c859a5, (q31_t)0x17d15288, (q31_t)0x31d03e64, - (q31_t)0x17db1b34, (q31_t)0x31d82137, (q31_t)0x17e4e56c, (q31_t)0x31e0021e, - (q31_t)0x17eeb130, (q31_t)0x31e7e118, (q31_t)0x17f87e7f, (q31_t)0x31efbe27, - (q31_t)0x18024d59, (q31_t)0x31f79948, (q31_t)0x180c1dbf, (q31_t)0x31ff727c, - (q31_t)0x1815efae, (q31_t)0x320749c3, (q31_t)0x181fc328, (q31_t)0x320f1f1c, - (q31_t)0x1829982b, (q31_t)0x3216f287, (q31_t)0x18336eb7, (q31_t)0x321ec403, - (q31_t)0x183d46cc, (q31_t)0x32269391, (q31_t)0x18472069, (q31_t)0x322e6130, - (q31_t)0x1850fb8e, (q31_t)0x32362ce0, (q31_t)0x185ad83c, (q31_t)0x323df6a0, - (q31_t)0x1864b670, (q31_t)0x3245be70, (q31_t)0x186e962b, (q31_t)0x324d8450, - (q31_t)0x1878776d, (q31_t)0x32554840, (q31_t)0x18825a35, (q31_t)0x325d0a3e, - (q31_t)0x188c3e83, (q31_t)0x3264ca4c, (q31_t)0x18962456, (q31_t)0x326c8868, - (q31_t)0x18a00bae, (q31_t)0x32744493, (q31_t)0x18a9f48a, (q31_t)0x327bfecc, - (q31_t)0x18b3deeb, (q31_t)0x3283b712, (q31_t)0x18bdcad0, (q31_t)0x328b6d66, - (q31_t)0x18c7b838, (q31_t)0x329321c7, (q31_t)0x18d1a724, (q31_t)0x329ad435, - (q31_t)0x18db9792, (q31_t)0x32a284b0, (q31_t)0x18e58982, (q31_t)0x32aa3336, - (q31_t)0x18ef7cf4, (q31_t)0x32b1dfc9, (q31_t)0x18f971e8, (q31_t)0x32b98a67, - (q31_t)0x1903685d, (q31_t)0x32c13311, (q31_t)0x190d6053, (q31_t)0x32c8d9c6, - (q31_t)0x191759c9, (q31_t)0x32d07e85, (q31_t)0x192154bf, (q31_t)0x32d82150, - (q31_t)0x192b5135, (q31_t)0x32dfc224, (q31_t)0x19354f2a, (q31_t)0x32e76102, - (q31_t)0x193f4e9e, (q31_t)0x32eefdea, (q31_t)0x19494f90, (q31_t)0x32f698db, - (q31_t)0x19535201, (q31_t)0x32fe31d5, (q31_t)0x195d55ef, (q31_t)0x3305c8d7, - (q31_t)0x19675b5a, (q31_t)0x330d5de3, (q31_t)0x19716243, (q31_t)0x3314f0f6, - (q31_t)0x197b6aa8, (q31_t)0x331c8211, (q31_t)0x19857489, (q31_t)0x33241134, - (q31_t)0x198f7fe6, (q31_t)0x332b9e5e, (q31_t)0x19998cbe, (q31_t)0x3333298f, - (q31_t)0x19a39b11, (q31_t)0x333ab2c6, (q31_t)0x19adaadf, (q31_t)0x33423a04, - (q31_t)0x19b7bc27, (q31_t)0x3349bf48, (q31_t)0x19c1cee9, (q31_t)0x33514292, - (q31_t)0x19cbe325, (q31_t)0x3358c3e2, (q31_t)0x19d5f8d9, (q31_t)0x33604336, - (q31_t)0x19e01006, (q31_t)0x3367c090, (q31_t)0x19ea28ac, (q31_t)0x336f3bee, - (q31_t)0x19f442c9, (q31_t)0x3376b551, (q31_t)0x19fe5e5e, (q31_t)0x337e2cb7, - (q31_t)0x1a087b69, (q31_t)0x3385a222, (q31_t)0x1a1299ec, (q31_t)0x338d1590, - (q31_t)0x1a1cb9e5, (q31_t)0x33948701, (q31_t)0x1a26db54, (q31_t)0x339bf675, - (q31_t)0x1a30fe38, (q31_t)0x33a363ec, (q31_t)0x1a3b2292, (q31_t)0x33aacf65, - (q31_t)0x1a454860, (q31_t)0x33b238e0, (q31_t)0x1a4f6fa3, (q31_t)0x33b9a05d, - (q31_t)0x1a599859, (q31_t)0x33c105db, (q31_t)0x1a63c284, (q31_t)0x33c8695b, - (q31_t)0x1a6dee21, (q31_t)0x33cfcadc, (q31_t)0x1a781b31, (q31_t)0x33d72a5d, - (q31_t)0x1a8249b4, (q31_t)0x33de87de, (q31_t)0x1a8c79a9, (q31_t)0x33e5e360, - (q31_t)0x1a96ab0f, (q31_t)0x33ed3ce1, (q31_t)0x1aa0dde7, (q31_t)0x33f49462, - (q31_t)0x1aab122f, (q31_t)0x33fbe9e2, (q31_t)0x1ab547e8, (q31_t)0x34033d61, - (q31_t)0x1abf7f11, (q31_t)0x340a8edf, (q31_t)0x1ac9b7a9, (q31_t)0x3411de5b, - (q31_t)0x1ad3f1b1, (q31_t)0x34192bd5, (q31_t)0x1ade2d28, (q31_t)0x3420774d, - (q31_t)0x1ae86a0d, (q31_t)0x3427c0c3, (q31_t)0x1af2a860, (q31_t)0x342f0836, - (q31_t)0x1afce821, (q31_t)0x34364da6, (q31_t)0x1b072950, (q31_t)0x343d9112, - (q31_t)0x1b116beb, (q31_t)0x3444d27b, (q31_t)0x1b1baff2, (q31_t)0x344c11e0, - (q31_t)0x1b25f566, (q31_t)0x34534f41, (q31_t)0x1b303c46, (q31_t)0x345a8a9d, - (q31_t)0x1b3a8491, (q31_t)0x3461c3f5, (q31_t)0x1b44ce46, (q31_t)0x3468fb47, - (q31_t)0x1b4f1967, (q31_t)0x34703095, (q31_t)0x1b5965f1, (q31_t)0x347763dd, - (q31_t)0x1b63b3e5, (q31_t)0x347e951f, (q31_t)0x1b6e0342, (q31_t)0x3485c45b, - (q31_t)0x1b785409, (q31_t)0x348cf190, (q31_t)0x1b82a638, (q31_t)0x34941cbf, - (q31_t)0x1b8cf9cf, (q31_t)0x349b45e7, (q31_t)0x1b974ece, (q31_t)0x34a26d08, - (q31_t)0x1ba1a534, (q31_t)0x34a99221, (q31_t)0x1babfd01, (q31_t)0x34b0b533, - (q31_t)0x1bb65634, (q31_t)0x34b7d63c, (q31_t)0x1bc0b0ce, (q31_t)0x34bef53d, - (q31_t)0x1bcb0cce, (q31_t)0x34c61236, (q31_t)0x1bd56a32, (q31_t)0x34cd2d26, - (q31_t)0x1bdfc8fc, (q31_t)0x34d4460c, (q31_t)0x1bea292b, (q31_t)0x34db5cea, - (q31_t)0x1bf48abd, (q31_t)0x34e271bd, (q31_t)0x1bfeedb3, (q31_t)0x34e98487, - (q31_t)0x1c09520d, (q31_t)0x34f09546, (q31_t)0x1c13b7c9, (q31_t)0x34f7a3fb, - (q31_t)0x1c1e1ee9, (q31_t)0x34feb0a5, (q31_t)0x1c28876a, (q31_t)0x3505bb44, - (q31_t)0x1c32f14d, (q31_t)0x350cc3d8, (q31_t)0x1c3d5c91, (q31_t)0x3513ca60, - (q31_t)0x1c47c936, (q31_t)0x351acedd, (q31_t)0x1c52373c, (q31_t)0x3521d14d, - (q31_t)0x1c5ca6a2, (q31_t)0x3528d1b1, (q31_t)0x1c671768, (q31_t)0x352fd008, - (q31_t)0x1c71898d, (q31_t)0x3536cc52, (q31_t)0x1c7bfd11, (q31_t)0x353dc68f, - (q31_t)0x1c8671f3, (q31_t)0x3544bebf, (q31_t)0x1c90e834, (q31_t)0x354bb4e1, - (q31_t)0x1c9b5fd2, (q31_t)0x3552a8f4, (q31_t)0x1ca5d8cd, (q31_t)0x35599afa, - (q31_t)0x1cb05326, (q31_t)0x35608af1, (q31_t)0x1cbacedb, (q31_t)0x356778d9, - (q31_t)0x1cc54bec, (q31_t)0x356e64b2, (q31_t)0x1ccfca59, (q31_t)0x35754e7c, - (q31_t)0x1cda4a21, (q31_t)0x357c3636, (q31_t)0x1ce4cb44, (q31_t)0x35831be0, - (q31_t)0x1cef4dc2, (q31_t)0x3589ff7a, (q31_t)0x1cf9d199, (q31_t)0x3590e104, - (q31_t)0x1d0456ca, (q31_t)0x3597c07d, (q31_t)0x1d0edd55, (q31_t)0x359e9de5, - (q31_t)0x1d196538, (q31_t)0x35a5793c, (q31_t)0x1d23ee74, (q31_t)0x35ac5282, - (q31_t)0x1d2e7908, (q31_t)0x35b329b5, (q31_t)0x1d3904f4, (q31_t)0x35b9fed7, - (q31_t)0x1d439236, (q31_t)0x35c0d1e7, (q31_t)0x1d4e20d0, (q31_t)0x35c7a2e3, - (q31_t)0x1d58b0c0, (q31_t)0x35ce71ce, (q31_t)0x1d634206, (q31_t)0x35d53ea5, - (q31_t)0x1d6dd4a2, (q31_t)0x35dc0968, (q31_t)0x1d786892, (q31_t)0x35e2d219, - (q31_t)0x1d82fdd8, (q31_t)0x35e998b5, (q31_t)0x1d8d9472, (q31_t)0x35f05d3d, - (q31_t)0x1d982c60, (q31_t)0x35f71fb1, (q31_t)0x1da2c5a2, (q31_t)0x35fde011, - (q31_t)0x1dad6036, (q31_t)0x36049e5b, (q31_t)0x1db7fc1e, (q31_t)0x360b5a90, - (q31_t)0x1dc29958, (q31_t)0x361214b0, (q31_t)0x1dcd37e4, (q31_t)0x3618ccba, - (q31_t)0x1dd7d7c1, (q31_t)0x361f82af, (q31_t)0x1de278ef, (q31_t)0x3626368d, - (q31_t)0x1ded1b6e, (q31_t)0x362ce855, (q31_t)0x1df7bf3e, (q31_t)0x36339806, - (q31_t)0x1e02645d, (q31_t)0x363a45a0, (q31_t)0x1e0d0acc, (q31_t)0x3640f123, - (q31_t)0x1e17b28a, (q31_t)0x36479a8e, (q31_t)0x1e225b96, (q31_t)0x364e41e2, - (q31_t)0x1e2d05f1, (q31_t)0x3654e71d, (q31_t)0x1e37b199, (q31_t)0x365b8a41, - (q31_t)0x1e425e8f, (q31_t)0x36622b4c, (q31_t)0x1e4d0cd2, (q31_t)0x3668ca3e, - (q31_t)0x1e57bc62, (q31_t)0x366f6717, (q31_t)0x1e626d3e, (q31_t)0x367601d7, - (q31_t)0x1e6d1f65, (q31_t)0x367c9a7e, (q31_t)0x1e77d2d8, (q31_t)0x3683310b, - (q31_t)0x1e828796, (q31_t)0x3689c57d, (q31_t)0x1e8d3d9e, (q31_t)0x369057d6, - (q31_t)0x1e97f4f1, (q31_t)0x3696e814, (q31_t)0x1ea2ad8d, (q31_t)0x369d7637, - (q31_t)0x1ead6773, (q31_t)0x36a4023f, (q31_t)0x1eb822a1, (q31_t)0x36aa8c2c, - (q31_t)0x1ec2df18, (q31_t)0x36b113fd, (q31_t)0x1ecd9cd7, (q31_t)0x36b799b3, - (q31_t)0x1ed85bdd, (q31_t)0x36be1d4c, (q31_t)0x1ee31c2b, (q31_t)0x36c49ec9, - (q31_t)0x1eedddc0, (q31_t)0x36cb1e2a, (q31_t)0x1ef8a09b, (q31_t)0x36d19b6e, - (q31_t)0x1f0364bc, (q31_t)0x36d81695, (q31_t)0x1f0e2a22, (q31_t)0x36de8f9e, - (q31_t)0x1f18f0ce, (q31_t)0x36e5068a, (q31_t)0x1f23b8be, (q31_t)0x36eb7b58, - (q31_t)0x1f2e81f3, (q31_t)0x36f1ee09, (q31_t)0x1f394c6b, (q31_t)0x36f85e9a, - (q31_t)0x1f441828, (q31_t)0x36fecd0e, (q31_t)0x1f4ee527, (q31_t)0x37053962, - (q31_t)0x1f59b369, (q31_t)0x370ba398, (q31_t)0x1f6482ed, (q31_t)0x37120bae, - (q31_t)0x1f6f53b3, (q31_t)0x371871a5, (q31_t)0x1f7a25ba, (q31_t)0x371ed57c, - (q31_t)0x1f84f902, (q31_t)0x37253733, (q31_t)0x1f8fcd8b, (q31_t)0x372b96ca, - (q31_t)0x1f9aa354, (q31_t)0x3731f440, (q31_t)0x1fa57a5d, (q31_t)0x37384f95, - (q31_t)0x1fb052a5, (q31_t)0x373ea8ca, (q31_t)0x1fbb2c2c, (q31_t)0x3744ffdd, - (q31_t)0x1fc606f1, (q31_t)0x374b54ce, (q31_t)0x1fd0e2f5, (q31_t)0x3751a79e, - (q31_t)0x1fdbc036, (q31_t)0x3757f84c, (q31_t)0x1fe69eb4, (q31_t)0x375e46d8, - (q31_t)0x1ff17e70, (q31_t)0x37649341, (q31_t)0x1ffc5f67, (q31_t)0x376add88, - (q31_t)0x2007419b, (q31_t)0x377125ac, (q31_t)0x2012250a, (q31_t)0x37776bac, - (q31_t)0x201d09b4, (q31_t)0x377daf89, (q31_t)0x2027ef99, (q31_t)0x3783f143, - (q31_t)0x2032d6b8, (q31_t)0x378a30d8, (q31_t)0x203dbf11, (q31_t)0x37906e49, - (q31_t)0x2048a8a4, (q31_t)0x3796a996, (q31_t)0x2053936f, (q31_t)0x379ce2be, - (q31_t)0x205e7f74, (q31_t)0x37a319c2, (q31_t)0x20696cb0, (q31_t)0x37a94ea0, - (q31_t)0x20745b24, (q31_t)0x37af8159, (q31_t)0x207f4acf, (q31_t)0x37b5b1ec, - (q31_t)0x208a3bb2, (q31_t)0x37bbe05a, (q31_t)0x20952dcb, (q31_t)0x37c20ca1, - (q31_t)0x20a0211a, (q31_t)0x37c836c2, (q31_t)0x20ab159e, (q31_t)0x37ce5ebd, - (q31_t)0x20b60b58, (q31_t)0x37d48490, (q31_t)0x20c10247, (q31_t)0x37daa83d, - (q31_t)0x20cbfa6a, (q31_t)0x37e0c9c3, (q31_t)0x20d6f3c1, (q31_t)0x37e6e921, - (q31_t)0x20e1ee4b, (q31_t)0x37ed0657, (q31_t)0x20ecea09, (q31_t)0x37f32165, - (q31_t)0x20f7e6f9, (q31_t)0x37f93a4b, (q31_t)0x2102e51c, (q31_t)0x37ff5109, - (q31_t)0x210de470, (q31_t)0x3805659e, (q31_t)0x2118e4f6, (q31_t)0x380b780a, - (q31_t)0x2123e6ad, (q31_t)0x3811884d, (q31_t)0x212ee995, (q31_t)0x38179666, - (q31_t)0x2139edac, (q31_t)0x381da256, (q31_t)0x2144f2f3, (q31_t)0x3823ac1d, - (q31_t)0x214ff96a, (q31_t)0x3829b3b9, (q31_t)0x215b0110, (q31_t)0x382fb92a, - (q31_t)0x216609e3, (q31_t)0x3835bc71, (q31_t)0x217113e5, (q31_t)0x383bbd8e, - (q31_t)0x217c1f15, (q31_t)0x3841bc7f, (q31_t)0x21872b72, (q31_t)0x3847b946, - (q31_t)0x219238fb, (q31_t)0x384db3e0, (q31_t)0x219d47b1, (q31_t)0x3853ac4f, - (q31_t)0x21a85793, (q31_t)0x3859a292, (q31_t)0x21b368a0, (q31_t)0x385f96a9, - (q31_t)0x21be7ad8, (q31_t)0x38658894, (q31_t)0x21c98e3b, (q31_t)0x386b7852, - (q31_t)0x21d4a2c8, (q31_t)0x387165e3, (q31_t)0x21dfb87f, (q31_t)0x38775147, - (q31_t)0x21eacf5f, (q31_t)0x387d3a7e, (q31_t)0x21f5e768, (q31_t)0x38832187, - (q31_t)0x22010099, (q31_t)0x38890663, (q31_t)0x220c1af3, (q31_t)0x388ee910, - (q31_t)0x22173674, (q31_t)0x3894c98f, (q31_t)0x2222531c, (q31_t)0x389aa7e0, - (q31_t)0x222d70eb, (q31_t)0x38a08402, (q31_t)0x22388fe1, (q31_t)0x38a65df6, - (q31_t)0x2243affc, (q31_t)0x38ac35ba, (q31_t)0x224ed13d, (q31_t)0x38b20b4f, - (q31_t)0x2259f3a3, (q31_t)0x38b7deb4, (q31_t)0x2265172e, (q31_t)0x38bdafea, - (q31_t)0x22703bdc, (q31_t)0x38c37eef, (q31_t)0x227b61af, (q31_t)0x38c94bc4, - (q31_t)0x228688a4, (q31_t)0x38cf1669, (q31_t)0x2291b0bd, (q31_t)0x38d4dedd, - (q31_t)0x229cd9f8, (q31_t)0x38daa520, (q31_t)0x22a80456, (q31_t)0x38e06932, - (q31_t)0x22b32fd4, (q31_t)0x38e62b13, (q31_t)0x22be5c74, (q31_t)0x38ebeac2, - (q31_t)0x22c98a35, (q31_t)0x38f1a840, (q31_t)0x22d4b916, (q31_t)0x38f7638b, - (q31_t)0x22dfe917, (q31_t)0x38fd1ca4, (q31_t)0x22eb1a37, (q31_t)0x3902d38b, - (q31_t)0x22f64c77, (q31_t)0x3908883f, (q31_t)0x23017fd5, (q31_t)0x390e3ac0, - (q31_t)0x230cb451, (q31_t)0x3913eb0e, (q31_t)0x2317e9eb, (q31_t)0x39199929, - (q31_t)0x232320a2, (q31_t)0x391f4510, (q31_t)0x232e5876, (q31_t)0x3924eec3, - (q31_t)0x23399167, (q31_t)0x392a9642, (q31_t)0x2344cb73, (q31_t)0x39303b8e, - (q31_t)0x2350069b, (q31_t)0x3935dea4, (q31_t)0x235b42df, (q31_t)0x393b7f86, - (q31_t)0x2366803c, (q31_t)0x39411e33, (q31_t)0x2371beb5, (q31_t)0x3946baac, - (q31_t)0x237cfe47, (q31_t)0x394c54ee, (q31_t)0x23883ef2, (q31_t)0x3951ecfc, - (q31_t)0x239380b6, (q31_t)0x395782d3, (q31_t)0x239ec393, (q31_t)0x395d1675, - (q31_t)0x23aa0788, (q31_t)0x3962a7e0, (q31_t)0x23b54c95, (q31_t)0x39683715, - (q31_t)0x23c092b9, (q31_t)0x396dc414, (q31_t)0x23cbd9f4, (q31_t)0x39734edc, - (q31_t)0x23d72245, (q31_t)0x3978d76c, (q31_t)0x23e26bac, (q31_t)0x397e5dc6, - (q31_t)0x23edb628, (q31_t)0x3983e1e8, (q31_t)0x23f901ba, (q31_t)0x398963d2, - (q31_t)0x24044e60, (q31_t)0x398ee385, (q31_t)0x240f9c1a, (q31_t)0x399460ff, - (q31_t)0x241aeae8, (q31_t)0x3999dc42, (q31_t)0x24263ac9, (q31_t)0x399f554b, - (q31_t)0x24318bbe, (q31_t)0x39a4cc1c, (q31_t)0x243cddc4, (q31_t)0x39aa40b4, - (q31_t)0x244830dd, (q31_t)0x39afb313, (q31_t)0x24538507, (q31_t)0x39b52339, - (q31_t)0x245eda43, (q31_t)0x39ba9125, (q31_t)0x246a308f, (q31_t)0x39bffcd7, - (q31_t)0x247587eb, (q31_t)0x39c5664f, (q31_t)0x2480e057, (q31_t)0x39cacd8d, - (q31_t)0x248c39d3, (q31_t)0x39d03291, (q31_t)0x2497945d, (q31_t)0x39d5955a, - (q31_t)0x24a2eff6, (q31_t)0x39daf5e8, (q31_t)0x24ae4c9d, (q31_t)0x39e0543c, - (q31_t)0x24b9aa52, (q31_t)0x39e5b054, (q31_t)0x24c50914, (q31_t)0x39eb0a31, - (q31_t)0x24d068e2, (q31_t)0x39f061d2, (q31_t)0x24dbc9bd, (q31_t)0x39f5b737, - (q31_t)0x24e72ba4, (q31_t)0x39fb0a60, (q31_t)0x24f28e96, (q31_t)0x3a005b4d, - (q31_t)0x24fdf294, (q31_t)0x3a05a9fd, (q31_t)0x2509579b, (q31_t)0x3a0af671, - (q31_t)0x2514bdad, (q31_t)0x3a1040a8, (q31_t)0x252024c9, (q31_t)0x3a1588a2, - (q31_t)0x252b8cee, (q31_t)0x3a1ace5f, (q31_t)0x2536f61b, (q31_t)0x3a2011de, - (q31_t)0x25426051, (q31_t)0x3a25531f, (q31_t)0x254dcb8f, (q31_t)0x3a2a9223, - (q31_t)0x255937d5, (q31_t)0x3a2fcee8, (q31_t)0x2564a521, (q31_t)0x3a350970, - (q31_t)0x25701374, (q31_t)0x3a3a41b9, (q31_t)0x257b82cd, (q31_t)0x3a3f77c3, - (q31_t)0x2586f32c, (q31_t)0x3a44ab8e, (q31_t)0x25926490, (q31_t)0x3a49dd1a, - (q31_t)0x259dd6f9, (q31_t)0x3a4f0c67, (q31_t)0x25a94a67, (q31_t)0x3a543974, - (q31_t)0x25b4bed8, (q31_t)0x3a596442, (q31_t)0x25c0344d, (q31_t)0x3a5e8cd0, - (q31_t)0x25cbaac5, (q31_t)0x3a63b31d, (q31_t)0x25d72240, (q31_t)0x3a68d72b, - (q31_t)0x25e29abc, (q31_t)0x3a6df8f8, (q31_t)0x25ee143b, (q31_t)0x3a731884, - (q31_t)0x25f98ebb, (q31_t)0x3a7835cf, (q31_t)0x26050a3b, (q31_t)0x3a7d50da, - (q31_t)0x261086bc, (q31_t)0x3a8269a3, (q31_t)0x261c043d, (q31_t)0x3a87802a, - (q31_t)0x262782be, (q31_t)0x3a8c9470, (q31_t)0x2633023e, (q31_t)0x3a91a674, - (q31_t)0x263e82bc, (q31_t)0x3a96b636, (q31_t)0x264a0438, (q31_t)0x3a9bc3b6, - (q31_t)0x265586b3, (q31_t)0x3aa0cef3, (q31_t)0x26610a2a, (q31_t)0x3aa5d7ee, - (q31_t)0x266c8e9f, (q31_t)0x3aaadea6, (q31_t)0x26781410, (q31_t)0x3aafe31b, - (q31_t)0x26839a7c, (q31_t)0x3ab4e54c, (q31_t)0x268f21e5, (q31_t)0x3ab9e53a, - (q31_t)0x269aaa48, (q31_t)0x3abee2e5, (q31_t)0x26a633a6, (q31_t)0x3ac3de4c, - (q31_t)0x26b1bdff, (q31_t)0x3ac8d76f, (q31_t)0x26bd4951, (q31_t)0x3acdce4d, - (q31_t)0x26c8d59c, (q31_t)0x3ad2c2e8, (q31_t)0x26d462e1, (q31_t)0x3ad7b53d, - (q31_t)0x26dff11d, (q31_t)0x3adca54e, (q31_t)0x26eb8052, (q31_t)0x3ae1931a, - (q31_t)0x26f7107e, (q31_t)0x3ae67ea1, (q31_t)0x2702a1a1, (q31_t)0x3aeb67e3, - (q31_t)0x270e33bb, (q31_t)0x3af04edf, (q31_t)0x2719c6cb, (q31_t)0x3af53395, - (q31_t)0x27255ad1, (q31_t)0x3afa1605, (q31_t)0x2730efcc, (q31_t)0x3afef630, - (q31_t)0x273c85bc, (q31_t)0x3b03d414, (q31_t)0x27481ca1, (q31_t)0x3b08afb2, - (q31_t)0x2753b479, (q31_t)0x3b0d8909, (q31_t)0x275f4d45, (q31_t)0x3b126019, - (q31_t)0x276ae704, (q31_t)0x3b1734e2, (q31_t)0x277681b6, (q31_t)0x3b1c0764, - (q31_t)0x27821d59, (q31_t)0x3b20d79e, (q31_t)0x278db9ef, (q31_t)0x3b25a591, - (q31_t)0x27995776, (q31_t)0x3b2a713d, (q31_t)0x27a4f5ed, (q31_t)0x3b2f3aa0, - (q31_t)0x27b09555, (q31_t)0x3b3401bb, (q31_t)0x27bc35ad, (q31_t)0x3b38c68e, - (q31_t)0x27c7d6f4, (q31_t)0x3b3d8918, (q31_t)0x27d3792b, (q31_t)0x3b42495a, - (q31_t)0x27df1c50, (q31_t)0x3b470753, (q31_t)0x27eac063, (q31_t)0x3b4bc303, - (q31_t)0x27f66564, (q31_t)0x3b507c69, (q31_t)0x28020b52, (q31_t)0x3b553386, - (q31_t)0x280db22d, (q31_t)0x3b59e85a, (q31_t)0x281959f4, (q31_t)0x3b5e9ae4, - (q31_t)0x282502a7, (q31_t)0x3b634b23, (q31_t)0x2830ac45, (q31_t)0x3b67f919, - (q31_t)0x283c56cf, (q31_t)0x3b6ca4c4, (q31_t)0x28480243, (q31_t)0x3b714e25, - (q31_t)0x2853aea1, (q31_t)0x3b75f53c, (q31_t)0x285f5be9, (q31_t)0x3b7a9a07, - (q31_t)0x286b0a1a, (q31_t)0x3b7f3c87, (q31_t)0x2876b934, (q31_t)0x3b83dcbc, - (q31_t)0x28826936, (q31_t)0x3b887aa6, (q31_t)0x288e1a20, (q31_t)0x3b8d1644, - (q31_t)0x2899cbf1, (q31_t)0x3b91af97, (q31_t)0x28a57ea9, (q31_t)0x3b96469d, - (q31_t)0x28b13248, (q31_t)0x3b9adb57, (q31_t)0x28bce6cd, (q31_t)0x3b9f6dc5, - (q31_t)0x28c89c37, (q31_t)0x3ba3fde7, (q31_t)0x28d45286, (q31_t)0x3ba88bbc, - (q31_t)0x28e009ba, (q31_t)0x3bad1744, (q31_t)0x28ebc1d3, (q31_t)0x3bb1a080, - (q31_t)0x28f77acf, (q31_t)0x3bb6276e, (q31_t)0x290334af, (q31_t)0x3bbaac0e, - (q31_t)0x290eef71, (q31_t)0x3bbf2e62, (q31_t)0x291aab16, (q31_t)0x3bc3ae67, - (q31_t)0x2926679c, (q31_t)0x3bc82c1f, (q31_t)0x29322505, (q31_t)0x3bcca789, - (q31_t)0x293de34e, (q31_t)0x3bd120a4, (q31_t)0x2949a278, (q31_t)0x3bd59771, - (q31_t)0x29556282, (q31_t)0x3bda0bf0, (q31_t)0x2961236c, (q31_t)0x3bde7e20, - (q31_t)0x296ce535, (q31_t)0x3be2ee01, (q31_t)0x2978a7dd, (q31_t)0x3be75b93, - (q31_t)0x29846b63, (q31_t)0x3bebc6d5, (q31_t)0x29902fc7, (q31_t)0x3bf02fc9, - (q31_t)0x299bf509, (q31_t)0x3bf4966c, (q31_t)0x29a7bb28, (q31_t)0x3bf8fac0, - (q31_t)0x29b38223, (q31_t)0x3bfd5cc4, (q31_t)0x29bf49fa, (q31_t)0x3c01bc78, - (q31_t)0x29cb12ad, (q31_t)0x3c0619dc, (q31_t)0x29d6dc3b, (q31_t)0x3c0a74f0, - (q31_t)0x29e2a6a3, (q31_t)0x3c0ecdb2, (q31_t)0x29ee71e6, (q31_t)0x3c132424, - (q31_t)0x29fa3e03, (q31_t)0x3c177845, (q31_t)0x2a060af9, (q31_t)0x3c1bca16, - (q31_t)0x2a11d8c8, (q31_t)0x3c201994, (q31_t)0x2a1da770, (q31_t)0x3c2466c2, - (q31_t)0x2a2976ef, (q31_t)0x3c28b19e, (q31_t)0x2a354746, (q31_t)0x3c2cfa28, - (q31_t)0x2a411874, (q31_t)0x3c314060, (q31_t)0x2a4cea79, (q31_t)0x3c358446, - (q31_t)0x2a58bd54, (q31_t)0x3c39c5da, (q31_t)0x2a649105, (q31_t)0x3c3e051b, - (q31_t)0x2a70658a, (q31_t)0x3c42420a, (q31_t)0x2a7c3ae5, (q31_t)0x3c467ca6, - (q31_t)0x2a881114, (q31_t)0x3c4ab4ef, (q31_t)0x2a93e817, (q31_t)0x3c4eeae5, - (q31_t)0x2a9fbfed, (q31_t)0x3c531e88, (q31_t)0x2aab9896, (q31_t)0x3c574fd8, - (q31_t)0x2ab77212, (q31_t)0x3c5b7ed4, (q31_t)0x2ac34c60, (q31_t)0x3c5fab7c, - (q31_t)0x2acf277f, (q31_t)0x3c63d5d1, (q31_t)0x2adb0370, (q31_t)0x3c67fdd1, - (q31_t)0x2ae6e031, (q31_t)0x3c6c237e, (q31_t)0x2af2bdc3, (q31_t)0x3c7046d6, - (q31_t)0x2afe9c24, (q31_t)0x3c7467d9, (q31_t)0x2b0a7b54, (q31_t)0x3c788688, - (q31_t)0x2b165b54, (q31_t)0x3c7ca2e2, (q31_t)0x2b223c22, (q31_t)0x3c80bce7, - (q31_t)0x2b2e1dbe, (q31_t)0x3c84d496, (q31_t)0x2b3a0027, (q31_t)0x3c88e9f1, - (q31_t)0x2b45e35d, (q31_t)0x3c8cfcf6, (q31_t)0x2b51c760, (q31_t)0x3c910da5, - (q31_t)0x2b5dac2f, (q31_t)0x3c951bff, (q31_t)0x2b6991ca, (q31_t)0x3c992803, - (q31_t)0x2b75782f, (q31_t)0x3c9d31b0, (q31_t)0x2b815f60, (q31_t)0x3ca13908, - (q31_t)0x2b8d475b, (q31_t)0x3ca53e09, (q31_t)0x2b99301f, (q31_t)0x3ca940b3, - (q31_t)0x2ba519ad, (q31_t)0x3cad4107, (q31_t)0x2bb10404, (q31_t)0x3cb13f04, - (q31_t)0x2bbcef23, (q31_t)0x3cb53aaa, (q31_t)0x2bc8db0b, (q31_t)0x3cb933f9, - (q31_t)0x2bd4c7ba, (q31_t)0x3cbd2af0, (q31_t)0x2be0b52f, (q31_t)0x3cc11f90, - (q31_t)0x2beca36c, (q31_t)0x3cc511d9, (q31_t)0x2bf8926f, (q31_t)0x3cc901c9, - (q31_t)0x2c048237, (q31_t)0x3cccef62, (q31_t)0x2c1072c4, (q31_t)0x3cd0daa2, - (q31_t)0x2c1c6417, (q31_t)0x3cd4c38b, (q31_t)0x2c28562d, (q31_t)0x3cd8aa1b, - (q31_t)0x2c344908, (q31_t)0x3cdc8e52, (q31_t)0x2c403ca5, (q31_t)0x3ce07031, - (q31_t)0x2c4c3106, (q31_t)0x3ce44fb7, (q31_t)0x2c582629, (q31_t)0x3ce82ce4, - (q31_t)0x2c641c0e, (q31_t)0x3cec07b8, (q31_t)0x2c7012b5, (q31_t)0x3cefe032, - (q31_t)0x2c7c0a1d, (q31_t)0x3cf3b653, (q31_t)0x2c880245, (q31_t)0x3cf78a1b, - (q31_t)0x2c93fb2e, (q31_t)0x3cfb5b89, (q31_t)0x2c9ff4d6, (q31_t)0x3cff2a9d, - (q31_t)0x2cabef3d, (q31_t)0x3d02f757, (q31_t)0x2cb7ea63, (q31_t)0x3d06c1b6, - (q31_t)0x2cc3e648, (q31_t)0x3d0a89bc, (q31_t)0x2ccfe2ea, (q31_t)0x3d0e4f67, - (q31_t)0x2cdbe04a, (q31_t)0x3d1212b7, (q31_t)0x2ce7de66, (q31_t)0x3d15d3ad, - (q31_t)0x2cf3dd3f, (q31_t)0x3d199248, (q31_t)0x2cffdcd4, (q31_t)0x3d1d4e88, - (q31_t)0x2d0bdd25, (q31_t)0x3d21086c, (q31_t)0x2d17de31, (q31_t)0x3d24bff6, - (q31_t)0x2d23dff7, (q31_t)0x3d287523, (q31_t)0x2d2fe277, (q31_t)0x3d2c27f6, - (q31_t)0x2d3be5b1, (q31_t)0x3d2fd86c, (q31_t)0x2d47e9a5, (q31_t)0x3d338687, - (q31_t)0x2d53ee51, (q31_t)0x3d373245, (q31_t)0x2d5ff3b5, (q31_t)0x3d3adba7, - (q31_t)0x2d6bf9d1, (q31_t)0x3d3e82ae, (q31_t)0x2d7800a5, (q31_t)0x3d422757, - (q31_t)0x2d84082f, (q31_t)0x3d45c9a4, (q31_t)0x2d901070, (q31_t)0x3d496994, - (q31_t)0x2d9c1967, (q31_t)0x3d4d0728, (q31_t)0x2da82313, (q31_t)0x3d50a25e, - (q31_t)0x2db42d74, (q31_t)0x3d543b37, (q31_t)0x2dc0388a, (q31_t)0x3d57d1b3, - (q31_t)0x2dcc4454, (q31_t)0x3d5b65d2, (q31_t)0x2dd850d2, (q31_t)0x3d5ef793, - (q31_t)0x2de45e03, (q31_t)0x3d6286f6, (q31_t)0x2df06be6, (q31_t)0x3d6613fb, - (q31_t)0x2dfc7a7c, (q31_t)0x3d699ea3, (q31_t)0x2e0889c4, (q31_t)0x3d6d26ec, - (q31_t)0x2e1499bd, (q31_t)0x3d70acd7, (q31_t)0x2e20aa67, (q31_t)0x3d743064, - (q31_t)0x2e2cbbc1, (q31_t)0x3d77b192, (q31_t)0x2e38cdcb, (q31_t)0x3d7b3061, - (q31_t)0x2e44e084, (q31_t)0x3d7eacd2, (q31_t)0x2e50f3ed, (q31_t)0x3d8226e4, - (q31_t)0x2e5d0804, (q31_t)0x3d859e96, (q31_t)0x2e691cc9, (q31_t)0x3d8913ea, - (q31_t)0x2e75323c, (q31_t)0x3d8c86de, (q31_t)0x2e81485c, (q31_t)0x3d8ff772, - (q31_t)0x2e8d5f29, (q31_t)0x3d9365a8, (q31_t)0x2e9976a1, (q31_t)0x3d96d17d, - (q31_t)0x2ea58ec6, (q31_t)0x3d9a3af2, (q31_t)0x2eb1a796, (q31_t)0x3d9da208, - (q31_t)0x2ebdc110, (q31_t)0x3da106bd, (q31_t)0x2ec9db35, (q31_t)0x3da46912, - (q31_t)0x2ed5f604, (q31_t)0x3da7c907, (q31_t)0x2ee2117c, (q31_t)0x3dab269b, - (q31_t)0x2eee2d9d, (q31_t)0x3dae81cf, (q31_t)0x2efa4a67, (q31_t)0x3db1daa2, - (q31_t)0x2f0667d9, (q31_t)0x3db53113, (q31_t)0x2f1285f2, (q31_t)0x3db88524, - (q31_t)0x2f1ea4b2, (q31_t)0x3dbbd6d4, (q31_t)0x2f2ac419, (q31_t)0x3dbf2622, - (q31_t)0x2f36e426, (q31_t)0x3dc2730f, (q31_t)0x2f4304d8, (q31_t)0x3dc5bd9b, - (q31_t)0x2f4f2630, (q31_t)0x3dc905c5, (q31_t)0x2f5b482d, (q31_t)0x3dcc4b8d, - (q31_t)0x2f676ace, (q31_t)0x3dcf8ef3, (q31_t)0x2f738e12, (q31_t)0x3dd2cff7, - (q31_t)0x2f7fb1fa, (q31_t)0x3dd60e99, (q31_t)0x2f8bd685, (q31_t)0x3dd94ad8, - (q31_t)0x2f97fbb2, (q31_t)0x3ddc84b5, (q31_t)0x2fa42181, (q31_t)0x3ddfbc30, - (q31_t)0x2fb047f2, (q31_t)0x3de2f148, (q31_t)0x2fbc6f03, (q31_t)0x3de623fd, - (q31_t)0x2fc896b5, (q31_t)0x3de9544f, (q31_t)0x2fd4bf08, (q31_t)0x3dec823e, - (q31_t)0x2fe0e7f9, (q31_t)0x3defadca, (q31_t)0x2fed118a, (q31_t)0x3df2d6f3, - (q31_t)0x2ff93bba, (q31_t)0x3df5fdb8, (q31_t)0x30056687, (q31_t)0x3df9221a, - (q31_t)0x301191f3, (q31_t)0x3dfc4418, (q31_t)0x301dbdfb, (q31_t)0x3dff63b2, - (q31_t)0x3029eaa1, (q31_t)0x3e0280e9, (q31_t)0x303617e2, (q31_t)0x3e059bbb, - (q31_t)0x304245c0, (q31_t)0x3e08b42a, (q31_t)0x304e7438, (q31_t)0x3e0bca34, - (q31_t)0x305aa34c, (q31_t)0x3e0eddd9, (q31_t)0x3066d2fa, (q31_t)0x3e11ef1b, - (q31_t)0x30730342, (q31_t)0x3e14fdf7, (q31_t)0x307f3424, (q31_t)0x3e180a6f, - (q31_t)0x308b659f, (q31_t)0x3e1b1482, (q31_t)0x309797b2, (q31_t)0x3e1e1c30, - (q31_t)0x30a3ca5d, (q31_t)0x3e212179, (q31_t)0x30affda0, (q31_t)0x3e24245d, - (q31_t)0x30bc317a, (q31_t)0x3e2724db, (q31_t)0x30c865ea, (q31_t)0x3e2a22f4, - (q31_t)0x30d49af1, (q31_t)0x3e2d1ea8, (q31_t)0x30e0d08d, (q31_t)0x3e3017f6, - (q31_t)0x30ed06bf, (q31_t)0x3e330ede, (q31_t)0x30f93d86, (q31_t)0x3e360360, - (q31_t)0x310574e0, (q31_t)0x3e38f57c, (q31_t)0x3111accf, (q31_t)0x3e3be532, - (q31_t)0x311de551, (q31_t)0x3e3ed282, (q31_t)0x312a1e66, (q31_t)0x3e41bd6c, - (q31_t)0x3136580d, (q31_t)0x3e44a5ef, (q31_t)0x31429247, (q31_t)0x3e478c0b, - (q31_t)0x314ecd11, (q31_t)0x3e4a6fc1, (q31_t)0x315b086d, (q31_t)0x3e4d5110, - (q31_t)0x31674459, (q31_t)0x3e502ff9, (q31_t)0x317380d6, (q31_t)0x3e530c7a, - (q31_t)0x317fbde2, (q31_t)0x3e55e694, (q31_t)0x318bfb7d, (q31_t)0x3e58be47, - (q31_t)0x319839a6, (q31_t)0x3e5b9392, (q31_t)0x31a4785e, (q31_t)0x3e5e6676, - (q31_t)0x31b0b7a4, (q31_t)0x3e6136f3, (q31_t)0x31bcf777, (q31_t)0x3e640507, - (q31_t)0x31c937d6, (q31_t)0x3e66d0b4, (q31_t)0x31d578c2, (q31_t)0x3e6999fa, - (q31_t)0x31e1ba3a, (q31_t)0x3e6c60d7, (q31_t)0x31edfc3d, (q31_t)0x3e6f254c, - (q31_t)0x31fa3ecb, (q31_t)0x3e71e759, (q31_t)0x320681e3, (q31_t)0x3e74a6fd, - (q31_t)0x3212c585, (q31_t)0x3e77643a, (q31_t)0x321f09b1, (q31_t)0x3e7a1f0d, - (q31_t)0x322b4e66, (q31_t)0x3e7cd778, (q31_t)0x323793a3, (q31_t)0x3e7f8d7b, - (q31_t)0x3243d968, (q31_t)0x3e824114, (q31_t)0x32501fb5, (q31_t)0x3e84f245, - (q31_t)0x325c6688, (q31_t)0x3e87a10c, (q31_t)0x3268ade3, (q31_t)0x3e8a4d6a, - (q31_t)0x3274f5c3, (q31_t)0x3e8cf75f, (q31_t)0x32813e2a, (q31_t)0x3e8f9eeb, - (q31_t)0x328d8715, (q31_t)0x3e92440d, (q31_t)0x3299d085, (q31_t)0x3e94e6c6, - (q31_t)0x32a61a7a, (q31_t)0x3e978715, (q31_t)0x32b264f2, (q31_t)0x3e9a24fb, - (q31_t)0x32beafed, (q31_t)0x3e9cc076, (q31_t)0x32cafb6b, (q31_t)0x3e9f5988, - (q31_t)0x32d7476c, (q31_t)0x3ea1f02f, (q31_t)0x32e393ef, (q31_t)0x3ea4846c, - (q31_t)0x32efe0f2, (q31_t)0x3ea7163f, (q31_t)0x32fc2e77, (q31_t)0x3ea9a5a8, - (q31_t)0x33087c7d, (q31_t)0x3eac32a6, (q31_t)0x3314cb02, (q31_t)0x3eaebd3a, - (q31_t)0x33211a07, (q31_t)0x3eb14563, (q31_t)0x332d698a, (q31_t)0x3eb3cb21, - (q31_t)0x3339b98d, (q31_t)0x3eb64e75, (q31_t)0x33460a0d, (q31_t)0x3eb8cf5d, - (q31_t)0x33525b0b, (q31_t)0x3ebb4ddb, (q31_t)0x335eac86, (q31_t)0x3ebdc9ed, - (q31_t)0x336afe7e, (q31_t)0x3ec04394, (q31_t)0x337750f2, (q31_t)0x3ec2bad0, - (q31_t)0x3383a3e2, (q31_t)0x3ec52fa0, (q31_t)0x338ff74d, (q31_t)0x3ec7a205, - (q31_t)0x339c4b32, (q31_t)0x3eca11fe, (q31_t)0x33a89f92, (q31_t)0x3ecc7f8b, - (q31_t)0x33b4f46c, (q31_t)0x3eceeaad, (q31_t)0x33c149bf, (q31_t)0x3ed15363, - (q31_t)0x33cd9f8b, (q31_t)0x3ed3b9ad, (q31_t)0x33d9f5cf, (q31_t)0x3ed61d8a, - (q31_t)0x33e64c8c, (q31_t)0x3ed87efc, (q31_t)0x33f2a3bf, (q31_t)0x3edade01, - (q31_t)0x33fefb6a, (q31_t)0x3edd3a9a, (q31_t)0x340b538b, (q31_t)0x3edf94c7, - (q31_t)0x3417ac22, (q31_t)0x3ee1ec87, (q31_t)0x3424052f, (q31_t)0x3ee441da, - (q31_t)0x34305eb0, (q31_t)0x3ee694c1, (q31_t)0x343cb8a7, (q31_t)0x3ee8e53a, - (q31_t)0x34491311, (q31_t)0x3eeb3347, (q31_t)0x34556def, (q31_t)0x3eed7ee7, - (q31_t)0x3461c940, (q31_t)0x3eefc81a, (q31_t)0x346e2504, (q31_t)0x3ef20ee0, - (q31_t)0x347a8139, (q31_t)0x3ef45338, (q31_t)0x3486dde1, (q31_t)0x3ef69523, - (q31_t)0x34933afa, (q31_t)0x3ef8d4a1, (q31_t)0x349f9884, (q31_t)0x3efb11b1, - (q31_t)0x34abf67e, (q31_t)0x3efd4c54, (q31_t)0x34b854e7, (q31_t)0x3eff8489, - (q31_t)0x34c4b3c0, (q31_t)0x3f01ba50, (q31_t)0x34d11308, (q31_t)0x3f03eda9, - (q31_t)0x34dd72be, (q31_t)0x3f061e95, (q31_t)0x34e9d2e3, (q31_t)0x3f084d12, - (q31_t)0x34f63374, (q31_t)0x3f0a7921, (q31_t)0x35029473, (q31_t)0x3f0ca2c2, - (q31_t)0x350ef5de, (q31_t)0x3f0ec9f5, (q31_t)0x351b57b5, (q31_t)0x3f10eeb9, - (q31_t)0x3527b9f7, (q31_t)0x3f13110f, (q31_t)0x35341ca5, (q31_t)0x3f1530f7, - (q31_t)0x35407fbd, (q31_t)0x3f174e70, (q31_t)0x354ce33f, (q31_t)0x3f19697a, - (q31_t)0x3559472b, (q31_t)0x3f1b8215, (q31_t)0x3565ab80, (q31_t)0x3f1d9842, - (q31_t)0x3572103d, (q31_t)0x3f1fabff, (q31_t)0x357e7563, (q31_t)0x3f21bd4e, - (q31_t)0x358adaf0, (q31_t)0x3f23cc2e, (q31_t)0x359740e5, (q31_t)0x3f25d89e, - (q31_t)0x35a3a740, (q31_t)0x3f27e29f, (q31_t)0x35b00e02, (q31_t)0x3f29ea31, - (q31_t)0x35bc7529, (q31_t)0x3f2bef53, (q31_t)0x35c8dcb6, (q31_t)0x3f2df206, - (q31_t)0x35d544a7, (q31_t)0x3f2ff24a, (q31_t)0x35e1acfd, (q31_t)0x3f31f01d, - (q31_t)0x35ee15b7, (q31_t)0x3f33eb81, (q31_t)0x35fa7ed4, (q31_t)0x3f35e476, - (q31_t)0x3606e854, (q31_t)0x3f37dafa, (q31_t)0x36135237, (q31_t)0x3f39cf0e, - (q31_t)0x361fbc7b, (q31_t)0x3f3bc0b3, (q31_t)0x362c2721, (q31_t)0x3f3dafe7, - (q31_t)0x36389228, (q31_t)0x3f3f9cab, (q31_t)0x3644fd8f, (q31_t)0x3f4186ff, - (q31_t)0x36516956, (q31_t)0x3f436ee3, (q31_t)0x365dd57d, (q31_t)0x3f455456, - (q31_t)0x366a4203, (q31_t)0x3f473759, (q31_t)0x3676aee8, (q31_t)0x3f4917eb, - (q31_t)0x36831c2b, (q31_t)0x3f4af60d, (q31_t)0x368f89cb, (q31_t)0x3f4cd1be, - (q31_t)0x369bf7c9, (q31_t)0x3f4eaafe, (q31_t)0x36a86623, (q31_t)0x3f5081cd, - (q31_t)0x36b4d4d9, (q31_t)0x3f52562c, (q31_t)0x36c143ec, (q31_t)0x3f54281a, - (q31_t)0x36cdb359, (q31_t)0x3f55f796, (q31_t)0x36da2321, (q31_t)0x3f57c4a2, - (q31_t)0x36e69344, (q31_t)0x3f598f3c, (q31_t)0x36f303c0, (q31_t)0x3f5b5765, - (q31_t)0x36ff7496, (q31_t)0x3f5d1d1d, (q31_t)0x370be5c4, (q31_t)0x3f5ee063, - (q31_t)0x3718574b, (q31_t)0x3f60a138, (q31_t)0x3724c92a, (q31_t)0x3f625f9b, - (q31_t)0x37313b60, (q31_t)0x3f641b8d, (q31_t)0x373daded, (q31_t)0x3f65d50d, - (q31_t)0x374a20d0, (q31_t)0x3f678c1c, (q31_t)0x3756940a, (q31_t)0x3f6940b8, - (q31_t)0x37630799, (q31_t)0x3f6af2e3, (q31_t)0x376f7b7d, (q31_t)0x3f6ca29c, - (q31_t)0x377befb5, (q31_t)0x3f6e4fe3, (q31_t)0x37886442, (q31_t)0x3f6ffab8, - (q31_t)0x3794d922, (q31_t)0x3f71a31b, (q31_t)0x37a14e55, (q31_t)0x3f73490b, - (q31_t)0x37adc3db, (q31_t)0x3f74ec8a, (q31_t)0x37ba39b3, (q31_t)0x3f768d96, - (q31_t)0x37c6afdc, (q31_t)0x3f782c30, (q31_t)0x37d32657, (q31_t)0x3f79c857, - (q31_t)0x37df9d22, (q31_t)0x3f7b620c, (q31_t)0x37ec143e, (q31_t)0x3f7cf94e, - (q31_t)0x37f88ba9, (q31_t)0x3f7e8e1e, (q31_t)0x38050364, (q31_t)0x3f80207b, - (q31_t)0x38117b6d, (q31_t)0x3f81b065, (q31_t)0x381df3c5, (q31_t)0x3f833ddd, - (q31_t)0x382a6c6a, (q31_t)0x3f84c8e2, (q31_t)0x3836e55d, (q31_t)0x3f865174, - (q31_t)0x38435e9d, (q31_t)0x3f87d792, (q31_t)0x384fd829, (q31_t)0x3f895b3e, - (q31_t)0x385c5201, (q31_t)0x3f8adc77, (q31_t)0x3868cc24, (q31_t)0x3f8c5b3d, - (q31_t)0x38754692, (q31_t)0x3f8dd78f, (q31_t)0x3881c14b, (q31_t)0x3f8f516e, - (q31_t)0x388e3c4d, (q31_t)0x3f90c8da, (q31_t)0x389ab799, (q31_t)0x3f923dd2, - (q31_t)0x38a7332e, (q31_t)0x3f93b058, (q31_t)0x38b3af0c, (q31_t)0x3f952069, - (q31_t)0x38c02b31, (q31_t)0x3f968e07, (q31_t)0x38cca79e, (q31_t)0x3f97f932, - (q31_t)0x38d92452, (q31_t)0x3f9961e8, (q31_t)0x38e5a14d, (q31_t)0x3f9ac82c, - (q31_t)0x38f21e8e, (q31_t)0x3f9c2bfb, (q31_t)0x38fe9c15, (q31_t)0x3f9d8d56, - (q31_t)0x390b19e0, (q31_t)0x3f9eec3e, (q31_t)0x391797f0, (q31_t)0x3fa048b2, - (q31_t)0x39241645, (q31_t)0x3fa1a2b2, (q31_t)0x393094dd, (q31_t)0x3fa2fa3d, - (q31_t)0x393d13b8, (q31_t)0x3fa44f55, (q31_t)0x394992d7, (q31_t)0x3fa5a1f9, - (q31_t)0x39561237, (q31_t)0x3fa6f228, (q31_t)0x396291d9, (q31_t)0x3fa83fe3, - (q31_t)0x396f11bc, (q31_t)0x3fa98b2a, (q31_t)0x397b91e1, (q31_t)0x3faad3fd, - (q31_t)0x39881245, (q31_t)0x3fac1a5b, (q31_t)0x399492ea, (q31_t)0x3fad5e45, - (q31_t)0x39a113cd, (q31_t)0x3fae9fbb, (q31_t)0x39ad94f0, (q31_t)0x3fafdebb, - (q31_t)0x39ba1651, (q31_t)0x3fb11b48, (q31_t)0x39c697f0, (q31_t)0x3fb2555f, - (q31_t)0x39d319cc, (q31_t)0x3fb38d02, (q31_t)0x39df9be6, (q31_t)0x3fb4c231, - (q31_t)0x39ec1e3b, (q31_t)0x3fb5f4ea, (q31_t)0x39f8a0cd, (q31_t)0x3fb7252f, - (q31_t)0x3a05239a, (q31_t)0x3fb852ff, (q31_t)0x3a11a6a3, (q31_t)0x3fb97e5a, - (q31_t)0x3a1e29e5, (q31_t)0x3fbaa740, (q31_t)0x3a2aad62, (q31_t)0x3fbbcdb1, - (q31_t)0x3a373119, (q31_t)0x3fbcf1ad, (q31_t)0x3a43b508, (q31_t)0x3fbe1334, - (q31_t)0x3a503930, (q31_t)0x3fbf3246, (q31_t)0x3a5cbd91, (q31_t)0x3fc04ee3, - (q31_t)0x3a694229, (q31_t)0x3fc1690a, (q31_t)0x3a75c6f8, (q31_t)0x3fc280bc, - (q31_t)0x3a824bfd, (q31_t)0x3fc395f9, (q31_t)0x3a8ed139, (q31_t)0x3fc4a8c1, - (q31_t)0x3a9b56ab, (q31_t)0x3fc5b913, (q31_t)0x3aa7dc52, (q31_t)0x3fc6c6f0, - (q31_t)0x3ab4622d, (q31_t)0x3fc7d258, (q31_t)0x3ac0e83d, (q31_t)0x3fc8db4a, - (q31_t)0x3acd6e81, (q31_t)0x3fc9e1c6, (q31_t)0x3ad9f4f8, (q31_t)0x3fcae5cd, - (q31_t)0x3ae67ba2, (q31_t)0x3fcbe75e, (q31_t)0x3af3027e, (q31_t)0x3fcce67a, - (q31_t)0x3aff898c, (q31_t)0x3fcde320, (q31_t)0x3b0c10cb, (q31_t)0x3fcedd50, - (q31_t)0x3b18983b, (q31_t)0x3fcfd50b, (q31_t)0x3b251fdc, (q31_t)0x3fd0ca4f, - (q31_t)0x3b31a7ac, (q31_t)0x3fd1bd1e, (q31_t)0x3b3e2fac, (q31_t)0x3fd2ad77, - (q31_t)0x3b4ab7db, (q31_t)0x3fd39b5a, (q31_t)0x3b574039, (q31_t)0x3fd486c7, - (q31_t)0x3b63c8c4, (q31_t)0x3fd56fbe, (q31_t)0x3b70517d, (q31_t)0x3fd6563f, - (q31_t)0x3b7cda63, (q31_t)0x3fd73a4a, (q31_t)0x3b896375, (q31_t)0x3fd81bdf, - (q31_t)0x3b95ecb4, (q31_t)0x3fd8fafe, (q31_t)0x3ba2761e, (q31_t)0x3fd9d7a7, - (q31_t)0x3baeffb3, (q31_t)0x3fdab1d9, (q31_t)0x3bbb8973, (q31_t)0x3fdb8996, - (q31_t)0x3bc8135c, (q31_t)0x3fdc5edc, (q31_t)0x3bd49d70, (q31_t)0x3fdd31ac, - (q31_t)0x3be127ac, (q31_t)0x3fde0205, (q31_t)0x3bedb212, (q31_t)0x3fdecfe8, - (q31_t)0x3bfa3c9f, (q31_t)0x3fdf9b55, (q31_t)0x3c06c754, (q31_t)0x3fe0644b, - (q31_t)0x3c135231, (q31_t)0x3fe12acb, (q31_t)0x3c1fdd34, (q31_t)0x3fe1eed5, - (q31_t)0x3c2c685d, (q31_t)0x3fe2b067, (q31_t)0x3c38f3ac, (q31_t)0x3fe36f84, - (q31_t)0x3c457f21, (q31_t)0x3fe42c2a, (q31_t)0x3c520aba, (q31_t)0x3fe4e659, - (q31_t)0x3c5e9678, (q31_t)0x3fe59e12, (q31_t)0x3c6b2259, (q31_t)0x3fe65354, - (q31_t)0x3c77ae5e, (q31_t)0x3fe7061f, (q31_t)0x3c843a85, (q31_t)0x3fe7b674, - (q31_t)0x3c90c6cf, (q31_t)0x3fe86452, (q31_t)0x3c9d533b, (q31_t)0x3fe90fb9, - (q31_t)0x3ca9dfc8, (q31_t)0x3fe9b8a9, (q31_t)0x3cb66c77, (q31_t)0x3fea5f23, - (q31_t)0x3cc2f945, (q31_t)0x3feb0326, (q31_t)0x3ccf8634, (q31_t)0x3feba4b2, - (q31_t)0x3cdc1342, (q31_t)0x3fec43c7, (q31_t)0x3ce8a06f, (q31_t)0x3fece065, - (q31_t)0x3cf52dbb, (q31_t)0x3fed7a8c, (q31_t)0x3d01bb24, (q31_t)0x3fee123d, - (q31_t)0x3d0e48ab, (q31_t)0x3feea776, (q31_t)0x3d1ad650, (q31_t)0x3fef3a39, - (q31_t)0x3d276410, (q31_t)0x3fefca84, (q31_t)0x3d33f1ed, (q31_t)0x3ff05858, - (q31_t)0x3d407fe6, (q31_t)0x3ff0e3b6, (q31_t)0x3d4d0df9, (q31_t)0x3ff16c9c, - (q31_t)0x3d599c28, (q31_t)0x3ff1f30b, (q31_t)0x3d662a70, (q31_t)0x3ff27703, - (q31_t)0x3d72b8d2, (q31_t)0x3ff2f884, (q31_t)0x3d7f474d, (q31_t)0x3ff3778e, - (q31_t)0x3d8bd5e1, (q31_t)0x3ff3f420, (q31_t)0x3d98648d, (q31_t)0x3ff46e3c, - (q31_t)0x3da4f351, (q31_t)0x3ff4e5e0, (q31_t)0x3db1822c, (q31_t)0x3ff55b0d, - (q31_t)0x3dbe111e, (q31_t)0x3ff5cdc3, (q31_t)0x3dcaa027, (q31_t)0x3ff63e01, - (q31_t)0x3dd72f45, (q31_t)0x3ff6abc8, (q31_t)0x3de3be78, (q31_t)0x3ff71718, - (q31_t)0x3df04dc0, (q31_t)0x3ff77ff1, (q31_t)0x3dfcdd1d, (q31_t)0x3ff7e652, - (q31_t)0x3e096c8d, (q31_t)0x3ff84a3c, (q31_t)0x3e15fc11, (q31_t)0x3ff8abae, - (q31_t)0x3e228ba7, (q31_t)0x3ff90aaa, (q31_t)0x3e2f1b50, (q31_t)0x3ff9672d, - (q31_t)0x3e3bab0b, (q31_t)0x3ff9c13a, (q31_t)0x3e483ad8, (q31_t)0x3ffa18cf, - (q31_t)0x3e54cab5, (q31_t)0x3ffa6dec, (q31_t)0x3e615aa3, (q31_t)0x3ffac092, - (q31_t)0x3e6deaa1, (q31_t)0x3ffb10c1, (q31_t)0x3e7a7aae, (q31_t)0x3ffb5e78, - (q31_t)0x3e870aca, (q31_t)0x3ffba9b8, (q31_t)0x3e939af5, (q31_t)0x3ffbf280, - (q31_t)0x3ea02b2e, (q31_t)0x3ffc38d1, (q31_t)0x3eacbb74, (q31_t)0x3ffc7caa, - (q31_t)0x3eb94bc8, (q31_t)0x3ffcbe0c, (q31_t)0x3ec5dc28, (q31_t)0x3ffcfcf6, - (q31_t)0x3ed26c94, (q31_t)0x3ffd3969, (q31_t)0x3edefd0c, (q31_t)0x3ffd7364, - (q31_t)0x3eeb8d8f, (q31_t)0x3ffdaae7, (q31_t)0x3ef81e1d, (q31_t)0x3ffddff3, - (q31_t)0x3f04aeb5, (q31_t)0x3ffe1288, (q31_t)0x3f113f56, (q31_t)0x3ffe42a4, - (q31_t)0x3f1dd001, (q31_t)0x3ffe704a, (q31_t)0x3f2a60b4, (q31_t)0x3ffe9b77, - (q31_t)0x3f36f170, (q31_t)0x3ffec42d, (q31_t)0x3f438234, (q31_t)0x3ffeea6c, - (q31_t)0x3f5012fe, (q31_t)0x3fff0e32, (q31_t)0x3f5ca3d0, (q31_t)0x3fff2f82, - (q31_t)0x3f6934a8, (q31_t)0x3fff4e59, (q31_t)0x3f75c585, (q31_t)0x3fff6ab9, - (q31_t)0x3f825668, (q31_t)0x3fff84a1, (q31_t)0x3f8ee750, (q31_t)0x3fff9c12, - (q31_t)0x3f9b783c, (q31_t)0x3fffb10b, (q31_t)0x3fa8092c, (q31_t)0x3fffc38c, - (q31_t)0x3fb49a1f, (q31_t)0x3fffd396, (q31_t)0x3fc12b16, (q31_t)0x3fffe128, - (q31_t)0x3fcdbc0f, (q31_t)0x3fffec43, (q31_t)0x3fda4d09, (q31_t)0x3ffff4e6, - (q31_t)0x3fe6de05, (q31_t)0x3ffffb11, (q31_t)0x3ff36f02, (q31_t)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)) - */ - -const q31_t realCoefBQ31[8192] = { - (q31_t)0x40000000, (q31_t)0x40000000, (q31_t)0x400c90fe, (q31_t)0x3ffffec4, - (q31_t)0x401921fb, (q31_t)0x3ffffb11, (q31_t)0x4025b2f7, (q31_t)0x3ffff4e6, - (q31_t)0x403243f1, (q31_t)0x3fffec43, (q31_t)0x403ed4ea, (q31_t)0x3fffe128, - (q31_t)0x404b65e1, (q31_t)0x3fffd396, (q31_t)0x4057f6d4, (q31_t)0x3fffc38c, - (q31_t)0x406487c4, (q31_t)0x3fffb10b, (q31_t)0x407118b0, (q31_t)0x3fff9c12, - (q31_t)0x407da998, (q31_t)0x3fff84a1, (q31_t)0x408a3a7b, (q31_t)0x3fff6ab9, - (q31_t)0x4096cb58, (q31_t)0x3fff4e59, (q31_t)0x40a35c30, (q31_t)0x3fff2f82, - (q31_t)0x40afed02, (q31_t)0x3fff0e32, (q31_t)0x40bc7dcc, (q31_t)0x3ffeea6c, - (q31_t)0x40c90e90, (q31_t)0x3ffec42d, (q31_t)0x40d59f4c, (q31_t)0x3ffe9b77, - (q31_t)0x40e22fff, (q31_t)0x3ffe704a, (q31_t)0x40eec0aa, (q31_t)0x3ffe42a4, - (q31_t)0x40fb514b, (q31_t)0x3ffe1288, (q31_t)0x4107e1e3, (q31_t)0x3ffddff3, - (q31_t)0x41147271, (q31_t)0x3ffdaae7, (q31_t)0x412102f4, (q31_t)0x3ffd7364, - (q31_t)0x412d936c, (q31_t)0x3ffd3969, (q31_t)0x413a23d8, (q31_t)0x3ffcfcf6, - (q31_t)0x4146b438, (q31_t)0x3ffcbe0c, (q31_t)0x4153448c, (q31_t)0x3ffc7caa, - (q31_t)0x415fd4d2, (q31_t)0x3ffc38d1, (q31_t)0x416c650b, (q31_t)0x3ffbf280, - (q31_t)0x4178f536, (q31_t)0x3ffba9b8, (q31_t)0x41858552, (q31_t)0x3ffb5e78, - (q31_t)0x4192155f, (q31_t)0x3ffb10c1, (q31_t)0x419ea55d, (q31_t)0x3ffac092, - (q31_t)0x41ab354b, (q31_t)0x3ffa6dec, (q31_t)0x41b7c528, (q31_t)0x3ffa18cf, - (q31_t)0x41c454f5, (q31_t)0x3ff9c13a, (q31_t)0x41d0e4b0, (q31_t)0x3ff9672d, - (q31_t)0x41dd7459, (q31_t)0x3ff90aaa, (q31_t)0x41ea03ef, (q31_t)0x3ff8abae, - (q31_t)0x41f69373, (q31_t)0x3ff84a3c, (q31_t)0x420322e3, (q31_t)0x3ff7e652, - (q31_t)0x420fb240, (q31_t)0x3ff77ff1, (q31_t)0x421c4188, (q31_t)0x3ff71718, - (q31_t)0x4228d0bb, (q31_t)0x3ff6abc8, (q31_t)0x42355fd9, (q31_t)0x3ff63e01, - (q31_t)0x4241eee2, (q31_t)0x3ff5cdc3, (q31_t)0x424e7dd4, (q31_t)0x3ff55b0d, - (q31_t)0x425b0caf, (q31_t)0x3ff4e5e0, (q31_t)0x42679b73, (q31_t)0x3ff46e3c, - (q31_t)0x42742a1f, (q31_t)0x3ff3f420, (q31_t)0x4280b8b3, (q31_t)0x3ff3778e, - (q31_t)0x428d472e, (q31_t)0x3ff2f884, (q31_t)0x4299d590, (q31_t)0x3ff27703, - (q31_t)0x42a663d8, (q31_t)0x3ff1f30b, (q31_t)0x42b2f207, (q31_t)0x3ff16c9c, - (q31_t)0x42bf801a, (q31_t)0x3ff0e3b6, (q31_t)0x42cc0e13, (q31_t)0x3ff05858, - (q31_t)0x42d89bf0, (q31_t)0x3fefca84, (q31_t)0x42e529b0, (q31_t)0x3fef3a39, - (q31_t)0x42f1b755, (q31_t)0x3feea776, (q31_t)0x42fe44dc, (q31_t)0x3fee123d, - (q31_t)0x430ad245, (q31_t)0x3fed7a8c, (q31_t)0x43175f91, (q31_t)0x3fece065, - (q31_t)0x4323ecbe, (q31_t)0x3fec43c7, (q31_t)0x433079cc, (q31_t)0x3feba4b2, - (q31_t)0x433d06bb, (q31_t)0x3feb0326, (q31_t)0x43499389, (q31_t)0x3fea5f23, - (q31_t)0x43562038, (q31_t)0x3fe9b8a9, (q31_t)0x4362acc5, (q31_t)0x3fe90fb9, - (q31_t)0x436f3931, (q31_t)0x3fe86452, (q31_t)0x437bc57b, (q31_t)0x3fe7b674, - (q31_t)0x438851a2, (q31_t)0x3fe7061f, (q31_t)0x4394dda7, (q31_t)0x3fe65354, - (q31_t)0x43a16988, (q31_t)0x3fe59e12, (q31_t)0x43adf546, (q31_t)0x3fe4e659, - (q31_t)0x43ba80df, (q31_t)0x3fe42c2a, (q31_t)0x43c70c54, (q31_t)0x3fe36f84, - (q31_t)0x43d397a3, (q31_t)0x3fe2b067, (q31_t)0x43e022cc, (q31_t)0x3fe1eed5, - (q31_t)0x43ecadcf, (q31_t)0x3fe12acb, (q31_t)0x43f938ac, (q31_t)0x3fe0644b, - (q31_t)0x4405c361, (q31_t)0x3fdf9b55, (q31_t)0x44124dee, (q31_t)0x3fdecfe8, - (q31_t)0x441ed854, (q31_t)0x3fde0205, (q31_t)0x442b6290, (q31_t)0x3fdd31ac, - (q31_t)0x4437eca4, (q31_t)0x3fdc5edc, (q31_t)0x4444768d, (q31_t)0x3fdb8996, - (q31_t)0x4451004d, (q31_t)0x3fdab1d9, (q31_t)0x445d89e2, (q31_t)0x3fd9d7a7, - (q31_t)0x446a134c, (q31_t)0x3fd8fafe, (q31_t)0x44769c8b, (q31_t)0x3fd81bdf, - (q31_t)0x4483259d, (q31_t)0x3fd73a4a, (q31_t)0x448fae83, (q31_t)0x3fd6563f, - (q31_t)0x449c373c, (q31_t)0x3fd56fbe, (q31_t)0x44a8bfc7, (q31_t)0x3fd486c7, - (q31_t)0x44b54825, (q31_t)0x3fd39b5a, (q31_t)0x44c1d054, (q31_t)0x3fd2ad77, - (q31_t)0x44ce5854, (q31_t)0x3fd1bd1e, (q31_t)0x44dae024, (q31_t)0x3fd0ca4f, - (q31_t)0x44e767c5, (q31_t)0x3fcfd50b, (q31_t)0x44f3ef35, (q31_t)0x3fcedd50, - (q31_t)0x45007674, (q31_t)0x3fcde320, (q31_t)0x450cfd82, (q31_t)0x3fcce67a, - (q31_t)0x4519845e, (q31_t)0x3fcbe75e, (q31_t)0x45260b08, (q31_t)0x3fcae5cd, - (q31_t)0x4532917f, (q31_t)0x3fc9e1c6, (q31_t)0x453f17c3, (q31_t)0x3fc8db4a, - (q31_t)0x454b9dd3, (q31_t)0x3fc7d258, (q31_t)0x455823ae, (q31_t)0x3fc6c6f0, - (q31_t)0x4564a955, (q31_t)0x3fc5b913, (q31_t)0x45712ec7, (q31_t)0x3fc4a8c1, - (q31_t)0x457db403, (q31_t)0x3fc395f9, (q31_t)0x458a3908, (q31_t)0x3fc280bc, - (q31_t)0x4596bdd7, (q31_t)0x3fc1690a, (q31_t)0x45a3426f, (q31_t)0x3fc04ee3, - (q31_t)0x45afc6d0, (q31_t)0x3fbf3246, (q31_t)0x45bc4af8, (q31_t)0x3fbe1334, - (q31_t)0x45c8cee7, (q31_t)0x3fbcf1ad, (q31_t)0x45d5529e, (q31_t)0x3fbbcdb1, - (q31_t)0x45e1d61b, (q31_t)0x3fbaa740, (q31_t)0x45ee595d, (q31_t)0x3fb97e5a, - (q31_t)0x45fadc66, (q31_t)0x3fb852ff, (q31_t)0x46075f33, (q31_t)0x3fb7252f, - (q31_t)0x4613e1c5, (q31_t)0x3fb5f4ea, (q31_t)0x4620641a, (q31_t)0x3fb4c231, - (q31_t)0x462ce634, (q31_t)0x3fb38d02, (q31_t)0x46396810, (q31_t)0x3fb2555f, - (q31_t)0x4645e9af, (q31_t)0x3fb11b48, (q31_t)0x46526b10, (q31_t)0x3fafdebb, - (q31_t)0x465eec33, (q31_t)0x3fae9fbb, (q31_t)0x466b6d16, (q31_t)0x3fad5e45, - (q31_t)0x4677edbb, (q31_t)0x3fac1a5b, (q31_t)0x46846e1f, (q31_t)0x3faad3fd, - (q31_t)0x4690ee44, (q31_t)0x3fa98b2a, (q31_t)0x469d6e27, (q31_t)0x3fa83fe3, - (q31_t)0x46a9edc9, (q31_t)0x3fa6f228, (q31_t)0x46b66d29, (q31_t)0x3fa5a1f9, - (q31_t)0x46c2ec48, (q31_t)0x3fa44f55, (q31_t)0x46cf6b23, (q31_t)0x3fa2fa3d, - (q31_t)0x46dbe9bb, (q31_t)0x3fa1a2b2, (q31_t)0x46e86810, (q31_t)0x3fa048b2, - (q31_t)0x46f4e620, (q31_t)0x3f9eec3e, (q31_t)0x470163eb, (q31_t)0x3f9d8d56, - (q31_t)0x470de172, (q31_t)0x3f9c2bfb, (q31_t)0x471a5eb3, (q31_t)0x3f9ac82c, - (q31_t)0x4726dbae, (q31_t)0x3f9961e8, (q31_t)0x47335862, (q31_t)0x3f97f932, - (q31_t)0x473fd4cf, (q31_t)0x3f968e07, (q31_t)0x474c50f4, (q31_t)0x3f952069, - (q31_t)0x4758ccd2, (q31_t)0x3f93b058, (q31_t)0x47654867, (q31_t)0x3f923dd2, - (q31_t)0x4771c3b3, (q31_t)0x3f90c8da, (q31_t)0x477e3eb5, (q31_t)0x3f8f516e, - (q31_t)0x478ab96e, (q31_t)0x3f8dd78f, (q31_t)0x479733dc, (q31_t)0x3f8c5b3d, - (q31_t)0x47a3adff, (q31_t)0x3f8adc77, (q31_t)0x47b027d7, (q31_t)0x3f895b3e, - (q31_t)0x47bca163, (q31_t)0x3f87d792, (q31_t)0x47c91aa3, (q31_t)0x3f865174, - (q31_t)0x47d59396, (q31_t)0x3f84c8e2, (q31_t)0x47e20c3b, (q31_t)0x3f833ddd, - (q31_t)0x47ee8493, (q31_t)0x3f81b065, (q31_t)0x47fafc9c, (q31_t)0x3f80207b, - (q31_t)0x48077457, (q31_t)0x3f7e8e1e, (q31_t)0x4813ebc2, (q31_t)0x3f7cf94e, - (q31_t)0x482062de, (q31_t)0x3f7b620c, (q31_t)0x482cd9a9, (q31_t)0x3f79c857, - (q31_t)0x48395024, (q31_t)0x3f782c30, (q31_t)0x4845c64d, (q31_t)0x3f768d96, - (q31_t)0x48523c25, (q31_t)0x3f74ec8a, (q31_t)0x485eb1ab, (q31_t)0x3f73490b, - (q31_t)0x486b26de, (q31_t)0x3f71a31b, (q31_t)0x48779bbe, (q31_t)0x3f6ffab8, - (q31_t)0x4884104b, (q31_t)0x3f6e4fe3, (q31_t)0x48908483, (q31_t)0x3f6ca29c, - (q31_t)0x489cf867, (q31_t)0x3f6af2e3, (q31_t)0x48a96bf6, (q31_t)0x3f6940b8, - (q31_t)0x48b5df30, (q31_t)0x3f678c1c, (q31_t)0x48c25213, (q31_t)0x3f65d50d, - (q31_t)0x48cec4a0, (q31_t)0x3f641b8d, (q31_t)0x48db36d6, (q31_t)0x3f625f9b, - (q31_t)0x48e7a8b5, (q31_t)0x3f60a138, (q31_t)0x48f41a3c, (q31_t)0x3f5ee063, - (q31_t)0x49008b6a, (q31_t)0x3f5d1d1d, (q31_t)0x490cfc40, (q31_t)0x3f5b5765, - (q31_t)0x49196cbc, (q31_t)0x3f598f3c, (q31_t)0x4925dcdf, (q31_t)0x3f57c4a2, - (q31_t)0x49324ca7, (q31_t)0x3f55f796, (q31_t)0x493ebc14, (q31_t)0x3f54281a, - (q31_t)0x494b2b27, (q31_t)0x3f52562c, (q31_t)0x495799dd, (q31_t)0x3f5081cd, - (q31_t)0x49640837, (q31_t)0x3f4eaafe, (q31_t)0x49707635, (q31_t)0x3f4cd1be, - (q31_t)0x497ce3d5, (q31_t)0x3f4af60d, (q31_t)0x49895118, (q31_t)0x3f4917eb, - (q31_t)0x4995bdfd, (q31_t)0x3f473759, (q31_t)0x49a22a83, (q31_t)0x3f455456, - (q31_t)0x49ae96aa, (q31_t)0x3f436ee3, (q31_t)0x49bb0271, (q31_t)0x3f4186ff, - (q31_t)0x49c76dd8, (q31_t)0x3f3f9cab, (q31_t)0x49d3d8df, (q31_t)0x3f3dafe7, - (q31_t)0x49e04385, (q31_t)0x3f3bc0b3, (q31_t)0x49ecadc9, (q31_t)0x3f39cf0e, - (q31_t)0x49f917ac, (q31_t)0x3f37dafa, (q31_t)0x4a05812c, (q31_t)0x3f35e476, - (q31_t)0x4a11ea49, (q31_t)0x3f33eb81, (q31_t)0x4a1e5303, (q31_t)0x3f31f01d, - (q31_t)0x4a2abb59, (q31_t)0x3f2ff24a, (q31_t)0x4a37234a, (q31_t)0x3f2df206, - (q31_t)0x4a438ad7, (q31_t)0x3f2bef53, (q31_t)0x4a4ff1fe, (q31_t)0x3f29ea31, - (q31_t)0x4a5c58c0, (q31_t)0x3f27e29f, (q31_t)0x4a68bf1b, (q31_t)0x3f25d89e, - (q31_t)0x4a752510, (q31_t)0x3f23cc2e, (q31_t)0x4a818a9d, (q31_t)0x3f21bd4e, - (q31_t)0x4a8defc3, (q31_t)0x3f1fabff, (q31_t)0x4a9a5480, (q31_t)0x3f1d9842, - (q31_t)0x4aa6b8d5, (q31_t)0x3f1b8215, (q31_t)0x4ab31cc1, (q31_t)0x3f19697a, - (q31_t)0x4abf8043, (q31_t)0x3f174e70, (q31_t)0x4acbe35b, (q31_t)0x3f1530f7, - (q31_t)0x4ad84609, (q31_t)0x3f13110f, (q31_t)0x4ae4a84b, (q31_t)0x3f10eeb9, - (q31_t)0x4af10a22, (q31_t)0x3f0ec9f5, (q31_t)0x4afd6b8d, (q31_t)0x3f0ca2c2, - (q31_t)0x4b09cc8c, (q31_t)0x3f0a7921, (q31_t)0x4b162d1d, (q31_t)0x3f084d12, - (q31_t)0x4b228d42, (q31_t)0x3f061e95, (q31_t)0x4b2eecf8, (q31_t)0x3f03eda9, - (q31_t)0x4b3b4c40, (q31_t)0x3f01ba50, (q31_t)0x4b47ab19, (q31_t)0x3eff8489, - (q31_t)0x4b540982, (q31_t)0x3efd4c54, (q31_t)0x4b60677c, (q31_t)0x3efb11b1, - (q31_t)0x4b6cc506, (q31_t)0x3ef8d4a1, (q31_t)0x4b79221f, (q31_t)0x3ef69523, - (q31_t)0x4b857ec7, (q31_t)0x3ef45338, (q31_t)0x4b91dafc, (q31_t)0x3ef20ee0, - (q31_t)0x4b9e36c0, (q31_t)0x3eefc81a, (q31_t)0x4baa9211, (q31_t)0x3eed7ee7, - (q31_t)0x4bb6ecef, (q31_t)0x3eeb3347, (q31_t)0x4bc34759, (q31_t)0x3ee8e53a, - (q31_t)0x4bcfa150, (q31_t)0x3ee694c1, (q31_t)0x4bdbfad1, (q31_t)0x3ee441da, - (q31_t)0x4be853de, (q31_t)0x3ee1ec87, (q31_t)0x4bf4ac75, (q31_t)0x3edf94c7, - (q31_t)0x4c010496, (q31_t)0x3edd3a9a, (q31_t)0x4c0d5c41, (q31_t)0x3edade01, - (q31_t)0x4c19b374, (q31_t)0x3ed87efc, (q31_t)0x4c260a31, (q31_t)0x3ed61d8a, - (q31_t)0x4c326075, (q31_t)0x3ed3b9ad, (q31_t)0x4c3eb641, (q31_t)0x3ed15363, - (q31_t)0x4c4b0b94, (q31_t)0x3eceeaad, (q31_t)0x4c57606e, (q31_t)0x3ecc7f8b, - (q31_t)0x4c63b4ce, (q31_t)0x3eca11fe, (q31_t)0x4c7008b3, (q31_t)0x3ec7a205, - (q31_t)0x4c7c5c1e, (q31_t)0x3ec52fa0, (q31_t)0x4c88af0e, (q31_t)0x3ec2bad0, - (q31_t)0x4c950182, (q31_t)0x3ec04394, (q31_t)0x4ca1537a, (q31_t)0x3ebdc9ed, - (q31_t)0x4cada4f5, (q31_t)0x3ebb4ddb, (q31_t)0x4cb9f5f3, (q31_t)0x3eb8cf5d, - (q31_t)0x4cc64673, (q31_t)0x3eb64e75, (q31_t)0x4cd29676, (q31_t)0x3eb3cb21, - (q31_t)0x4cdee5f9, (q31_t)0x3eb14563, (q31_t)0x4ceb34fe, (q31_t)0x3eaebd3a, - (q31_t)0x4cf78383, (q31_t)0x3eac32a6, (q31_t)0x4d03d189, (q31_t)0x3ea9a5a8, - (q31_t)0x4d101f0e, (q31_t)0x3ea7163f, (q31_t)0x4d1c6c11, (q31_t)0x3ea4846c, - (q31_t)0x4d28b894, (q31_t)0x3ea1f02f, (q31_t)0x4d350495, (q31_t)0x3e9f5988, - (q31_t)0x4d415013, (q31_t)0x3e9cc076, (q31_t)0x4d4d9b0e, (q31_t)0x3e9a24fb, - (q31_t)0x4d59e586, (q31_t)0x3e978715, (q31_t)0x4d662f7b, (q31_t)0x3e94e6c6, - (q31_t)0x4d7278eb, (q31_t)0x3e92440d, (q31_t)0x4d7ec1d6, (q31_t)0x3e8f9eeb, - (q31_t)0x4d8b0a3d, (q31_t)0x3e8cf75f, (q31_t)0x4d97521d, (q31_t)0x3e8a4d6a, - (q31_t)0x4da39978, (q31_t)0x3e87a10c, (q31_t)0x4dafe04b, (q31_t)0x3e84f245, - (q31_t)0x4dbc2698, (q31_t)0x3e824114, (q31_t)0x4dc86c5d, (q31_t)0x3e7f8d7b, - (q31_t)0x4dd4b19a, (q31_t)0x3e7cd778, (q31_t)0x4de0f64f, (q31_t)0x3e7a1f0d, - (q31_t)0x4ded3a7b, (q31_t)0x3e77643a, (q31_t)0x4df97e1d, (q31_t)0x3e74a6fd, - (q31_t)0x4e05c135, (q31_t)0x3e71e759, (q31_t)0x4e1203c3, (q31_t)0x3e6f254c, - (q31_t)0x4e1e45c6, (q31_t)0x3e6c60d7, (q31_t)0x4e2a873e, (q31_t)0x3e6999fa, - (q31_t)0x4e36c82a, (q31_t)0x3e66d0b4, (q31_t)0x4e430889, (q31_t)0x3e640507, - (q31_t)0x4e4f485c, (q31_t)0x3e6136f3, (q31_t)0x4e5b87a2, (q31_t)0x3e5e6676, - (q31_t)0x4e67c65a, (q31_t)0x3e5b9392, (q31_t)0x4e740483, (q31_t)0x3e58be47, - (q31_t)0x4e80421e, (q31_t)0x3e55e694, (q31_t)0x4e8c7f2a, (q31_t)0x3e530c7a, - (q31_t)0x4e98bba7, (q31_t)0x3e502ff9, (q31_t)0x4ea4f793, (q31_t)0x3e4d5110, - (q31_t)0x4eb132ef, (q31_t)0x3e4a6fc1, (q31_t)0x4ebd6db9, (q31_t)0x3e478c0b, - (q31_t)0x4ec9a7f3, (q31_t)0x3e44a5ef, (q31_t)0x4ed5e19a, (q31_t)0x3e41bd6c, - (q31_t)0x4ee21aaf, (q31_t)0x3e3ed282, (q31_t)0x4eee5331, (q31_t)0x3e3be532, - (q31_t)0x4efa8b20, (q31_t)0x3e38f57c, (q31_t)0x4f06c27a, (q31_t)0x3e360360, - (q31_t)0x4f12f941, (q31_t)0x3e330ede, (q31_t)0x4f1f2f73, (q31_t)0x3e3017f6, - (q31_t)0x4f2b650f, (q31_t)0x3e2d1ea8, (q31_t)0x4f379a16, (q31_t)0x3e2a22f4, - (q31_t)0x4f43ce86, (q31_t)0x3e2724db, (q31_t)0x4f500260, (q31_t)0x3e24245d, - (q31_t)0x4f5c35a3, (q31_t)0x3e212179, (q31_t)0x4f68684e, (q31_t)0x3e1e1c30, - (q31_t)0x4f749a61, (q31_t)0x3e1b1482, (q31_t)0x4f80cbdc, (q31_t)0x3e180a6f, - (q31_t)0x4f8cfcbe, (q31_t)0x3e14fdf7, (q31_t)0x4f992d06, (q31_t)0x3e11ef1b, - (q31_t)0x4fa55cb4, (q31_t)0x3e0eddd9, (q31_t)0x4fb18bc8, (q31_t)0x3e0bca34, - (q31_t)0x4fbdba40, (q31_t)0x3e08b42a, (q31_t)0x4fc9e81e, (q31_t)0x3e059bbb, - (q31_t)0x4fd6155f, (q31_t)0x3e0280e9, (q31_t)0x4fe24205, (q31_t)0x3dff63b2, - (q31_t)0x4fee6e0d, (q31_t)0x3dfc4418, (q31_t)0x4ffa9979, (q31_t)0x3df9221a, - (q31_t)0x5006c446, (q31_t)0x3df5fdb8, (q31_t)0x5012ee76, (q31_t)0x3df2d6f3, - (q31_t)0x501f1807, (q31_t)0x3defadca, (q31_t)0x502b40f8, (q31_t)0x3dec823e, - (q31_t)0x5037694b, (q31_t)0x3de9544f, (q31_t)0x504390fd, (q31_t)0x3de623fd, - (q31_t)0x504fb80e, (q31_t)0x3de2f148, (q31_t)0x505bde7f, (q31_t)0x3ddfbc30, - (q31_t)0x5068044e, (q31_t)0x3ddc84b5, (q31_t)0x5074297b, (q31_t)0x3dd94ad8, - (q31_t)0x50804e06, (q31_t)0x3dd60e99, (q31_t)0x508c71ee, (q31_t)0x3dd2cff7, - (q31_t)0x50989532, (q31_t)0x3dcf8ef3, (q31_t)0x50a4b7d3, (q31_t)0x3dcc4b8d, - (q31_t)0x50b0d9d0, (q31_t)0x3dc905c5, (q31_t)0x50bcfb28, (q31_t)0x3dc5bd9b, - (q31_t)0x50c91bda, (q31_t)0x3dc2730f, (q31_t)0x50d53be7, (q31_t)0x3dbf2622, - (q31_t)0x50e15b4e, (q31_t)0x3dbbd6d4, (q31_t)0x50ed7a0e, (q31_t)0x3db88524, - (q31_t)0x50f99827, (q31_t)0x3db53113, (q31_t)0x5105b599, (q31_t)0x3db1daa2, - (q31_t)0x5111d263, (q31_t)0x3dae81cf, (q31_t)0x511dee84, (q31_t)0x3dab269b, - (q31_t)0x512a09fc, (q31_t)0x3da7c907, (q31_t)0x513624cb, (q31_t)0x3da46912, - (q31_t)0x51423ef0, (q31_t)0x3da106bd, (q31_t)0x514e586a, (q31_t)0x3d9da208, - (q31_t)0x515a713a, (q31_t)0x3d9a3af2, (q31_t)0x5166895f, (q31_t)0x3d96d17d, - (q31_t)0x5172a0d7, (q31_t)0x3d9365a8, (q31_t)0x517eb7a4, (q31_t)0x3d8ff772, - (q31_t)0x518acdc4, (q31_t)0x3d8c86de, (q31_t)0x5196e337, (q31_t)0x3d8913ea, - (q31_t)0x51a2f7fc, (q31_t)0x3d859e96, (q31_t)0x51af0c13, (q31_t)0x3d8226e4, - (q31_t)0x51bb1f7c, (q31_t)0x3d7eacd2, (q31_t)0x51c73235, (q31_t)0x3d7b3061, - (q31_t)0x51d3443f, (q31_t)0x3d77b192, (q31_t)0x51df5599, (q31_t)0x3d743064, - (q31_t)0x51eb6643, (q31_t)0x3d70acd7, (q31_t)0x51f7763c, (q31_t)0x3d6d26ec, - (q31_t)0x52038584, (q31_t)0x3d699ea3, (q31_t)0x520f941a, (q31_t)0x3d6613fb, - (q31_t)0x521ba1fd, (q31_t)0x3d6286f6, (q31_t)0x5227af2e, (q31_t)0x3d5ef793, - (q31_t)0x5233bbac, (q31_t)0x3d5b65d2, (q31_t)0x523fc776, (q31_t)0x3d57d1b3, - (q31_t)0x524bd28c, (q31_t)0x3d543b37, (q31_t)0x5257dced, (q31_t)0x3d50a25e, - (q31_t)0x5263e699, (q31_t)0x3d4d0728, (q31_t)0x526fef90, (q31_t)0x3d496994, - (q31_t)0x527bf7d1, (q31_t)0x3d45c9a4, (q31_t)0x5287ff5b, (q31_t)0x3d422757, - (q31_t)0x5294062f, (q31_t)0x3d3e82ae, (q31_t)0x52a00c4b, (q31_t)0x3d3adba7, - (q31_t)0x52ac11af, (q31_t)0x3d373245, (q31_t)0x52b8165b, (q31_t)0x3d338687, - (q31_t)0x52c41a4f, (q31_t)0x3d2fd86c, (q31_t)0x52d01d89, (q31_t)0x3d2c27f6, - (q31_t)0x52dc2009, (q31_t)0x3d287523, (q31_t)0x52e821cf, (q31_t)0x3d24bff6, - (q31_t)0x52f422db, (q31_t)0x3d21086c, (q31_t)0x5300232c, (q31_t)0x3d1d4e88, - (q31_t)0x530c22c1, (q31_t)0x3d199248, (q31_t)0x5318219a, (q31_t)0x3d15d3ad, - (q31_t)0x53241fb6, (q31_t)0x3d1212b7, (q31_t)0x53301d16, (q31_t)0x3d0e4f67, - (q31_t)0x533c19b8, (q31_t)0x3d0a89bc, (q31_t)0x5348159d, (q31_t)0x3d06c1b6, - (q31_t)0x535410c3, (q31_t)0x3d02f757, (q31_t)0x53600b2a, (q31_t)0x3cff2a9d, - (q31_t)0x536c04d2, (q31_t)0x3cfb5b89, (q31_t)0x5377fdbb, (q31_t)0x3cf78a1b, - (q31_t)0x5383f5e3, (q31_t)0x3cf3b653, (q31_t)0x538fed4b, (q31_t)0x3cefe032, - (q31_t)0x539be3f2, (q31_t)0x3cec07b8, (q31_t)0x53a7d9d7, (q31_t)0x3ce82ce4, - (q31_t)0x53b3cefa, (q31_t)0x3ce44fb7, (q31_t)0x53bfc35b, (q31_t)0x3ce07031, - (q31_t)0x53cbb6f8, (q31_t)0x3cdc8e52, (q31_t)0x53d7a9d3, (q31_t)0x3cd8aa1b, - (q31_t)0x53e39be9, (q31_t)0x3cd4c38b, (q31_t)0x53ef8d3c, (q31_t)0x3cd0daa2, - (q31_t)0x53fb7dc9, (q31_t)0x3cccef62, (q31_t)0x54076d91, (q31_t)0x3cc901c9, - (q31_t)0x54135c94, (q31_t)0x3cc511d9, (q31_t)0x541f4ad1, (q31_t)0x3cc11f90, - (q31_t)0x542b3846, (q31_t)0x3cbd2af0, (q31_t)0x543724f5, (q31_t)0x3cb933f9, - (q31_t)0x544310dd, (q31_t)0x3cb53aaa, (q31_t)0x544efbfc, (q31_t)0x3cb13f04, - (q31_t)0x545ae653, (q31_t)0x3cad4107, (q31_t)0x5466cfe1, (q31_t)0x3ca940b3, - (q31_t)0x5472b8a5, (q31_t)0x3ca53e09, (q31_t)0x547ea0a0, (q31_t)0x3ca13908, - (q31_t)0x548a87d1, (q31_t)0x3c9d31b0, (q31_t)0x54966e36, (q31_t)0x3c992803, - (q31_t)0x54a253d1, (q31_t)0x3c951bff, (q31_t)0x54ae38a0, (q31_t)0x3c910da5, - (q31_t)0x54ba1ca3, (q31_t)0x3c8cfcf6, (q31_t)0x54c5ffd9, (q31_t)0x3c88e9f1, - (q31_t)0x54d1e242, (q31_t)0x3c84d496, (q31_t)0x54ddc3de, (q31_t)0x3c80bce7, - (q31_t)0x54e9a4ac, (q31_t)0x3c7ca2e2, (q31_t)0x54f584ac, (q31_t)0x3c788688, - (q31_t)0x550163dc, (q31_t)0x3c7467d9, (q31_t)0x550d423d, (q31_t)0x3c7046d6, - (q31_t)0x55191fcf, (q31_t)0x3c6c237e, (q31_t)0x5524fc90, (q31_t)0x3c67fdd1, - (q31_t)0x5530d881, (q31_t)0x3c63d5d1, (q31_t)0x553cb3a0, (q31_t)0x3c5fab7c, - (q31_t)0x55488dee, (q31_t)0x3c5b7ed4, (q31_t)0x5554676a, (q31_t)0x3c574fd8, - (q31_t)0x55604013, (q31_t)0x3c531e88, (q31_t)0x556c17e9, (q31_t)0x3c4eeae5, - (q31_t)0x5577eeec, (q31_t)0x3c4ab4ef, (q31_t)0x5583c51b, (q31_t)0x3c467ca6, - (q31_t)0x558f9a76, (q31_t)0x3c42420a, (q31_t)0x559b6efb, (q31_t)0x3c3e051b, - (q31_t)0x55a742ac, (q31_t)0x3c39c5da, (q31_t)0x55b31587, (q31_t)0x3c358446, - (q31_t)0x55bee78c, (q31_t)0x3c314060, (q31_t)0x55cab8ba, (q31_t)0x3c2cfa28, - (q31_t)0x55d68911, (q31_t)0x3c28b19e, (q31_t)0x55e25890, (q31_t)0x3c2466c2, - (q31_t)0x55ee2738, (q31_t)0x3c201994, (q31_t)0x55f9f507, (q31_t)0x3c1bca16, - (q31_t)0x5605c1fd, (q31_t)0x3c177845, (q31_t)0x56118e1a, (q31_t)0x3c132424, - (q31_t)0x561d595d, (q31_t)0x3c0ecdb2, (q31_t)0x562923c5, (q31_t)0x3c0a74f0, - (q31_t)0x5634ed53, (q31_t)0x3c0619dc, (q31_t)0x5640b606, (q31_t)0x3c01bc78, - (q31_t)0x564c7ddd, (q31_t)0x3bfd5cc4, (q31_t)0x565844d8, (q31_t)0x3bf8fac0, - (q31_t)0x56640af7, (q31_t)0x3bf4966c, (q31_t)0x566fd039, (q31_t)0x3bf02fc9, - (q31_t)0x567b949d, (q31_t)0x3bebc6d5, (q31_t)0x56875823, (q31_t)0x3be75b93, - (q31_t)0x56931acb, (q31_t)0x3be2ee01, (q31_t)0x569edc94, (q31_t)0x3bde7e20, - (q31_t)0x56aa9d7e, (q31_t)0x3bda0bf0, (q31_t)0x56b65d88, (q31_t)0x3bd59771, - (q31_t)0x56c21cb2, (q31_t)0x3bd120a4, (q31_t)0x56cddafb, (q31_t)0x3bcca789, - (q31_t)0x56d99864, (q31_t)0x3bc82c1f, (q31_t)0x56e554ea, (q31_t)0x3bc3ae67, - (q31_t)0x56f1108f, (q31_t)0x3bbf2e62, (q31_t)0x56fccb51, (q31_t)0x3bbaac0e, - (q31_t)0x57088531, (q31_t)0x3bb6276e, (q31_t)0x57143e2d, (q31_t)0x3bb1a080, - (q31_t)0x571ff646, (q31_t)0x3bad1744, (q31_t)0x572bad7a, (q31_t)0x3ba88bbc, - (q31_t)0x573763c9, (q31_t)0x3ba3fde7, (q31_t)0x57431933, (q31_t)0x3b9f6dc5, - (q31_t)0x574ecdb8, (q31_t)0x3b9adb57, (q31_t)0x575a8157, (q31_t)0x3b96469d, - (q31_t)0x5766340f, (q31_t)0x3b91af97, (q31_t)0x5771e5e0, (q31_t)0x3b8d1644, - (q31_t)0x577d96ca, (q31_t)0x3b887aa6, (q31_t)0x578946cc, (q31_t)0x3b83dcbc, - (q31_t)0x5794f5e6, (q31_t)0x3b7f3c87, (q31_t)0x57a0a417, (q31_t)0x3b7a9a07, - (q31_t)0x57ac515f, (q31_t)0x3b75f53c, (q31_t)0x57b7fdbd, (q31_t)0x3b714e25, - (q31_t)0x57c3a931, (q31_t)0x3b6ca4c4, (q31_t)0x57cf53bb, (q31_t)0x3b67f919, - (q31_t)0x57dafd59, (q31_t)0x3b634b23, (q31_t)0x57e6a60c, (q31_t)0x3b5e9ae4, - (q31_t)0x57f24dd3, (q31_t)0x3b59e85a, (q31_t)0x57fdf4ae, (q31_t)0x3b553386, - (q31_t)0x58099a9c, (q31_t)0x3b507c69, (q31_t)0x58153f9d, (q31_t)0x3b4bc303, - (q31_t)0x5820e3b0, (q31_t)0x3b470753, (q31_t)0x582c86d5, (q31_t)0x3b42495a, - (q31_t)0x5838290c, (q31_t)0x3b3d8918, (q31_t)0x5843ca53, (q31_t)0x3b38c68e, - (q31_t)0x584f6aab, (q31_t)0x3b3401bb, (q31_t)0x585b0a13, (q31_t)0x3b2f3aa0, - (q31_t)0x5866a88a, (q31_t)0x3b2a713d, (q31_t)0x58724611, (q31_t)0x3b25a591, - (q31_t)0x587de2a7, (q31_t)0x3b20d79e, (q31_t)0x58897e4a, (q31_t)0x3b1c0764, - (q31_t)0x589518fc, (q31_t)0x3b1734e2, (q31_t)0x58a0b2bb, (q31_t)0x3b126019, - (q31_t)0x58ac4b87, (q31_t)0x3b0d8909, (q31_t)0x58b7e35f, (q31_t)0x3b08afb2, - (q31_t)0x58c37a44, (q31_t)0x3b03d414, (q31_t)0x58cf1034, (q31_t)0x3afef630, - (q31_t)0x58daa52f, (q31_t)0x3afa1605, (q31_t)0x58e63935, (q31_t)0x3af53395, - (q31_t)0x58f1cc45, (q31_t)0x3af04edf, (q31_t)0x58fd5e5f, (q31_t)0x3aeb67e3, - (q31_t)0x5908ef82, (q31_t)0x3ae67ea1, (q31_t)0x59147fae, (q31_t)0x3ae1931a, - (q31_t)0x59200ee3, (q31_t)0x3adca54e, (q31_t)0x592b9d1f, (q31_t)0x3ad7b53d, - (q31_t)0x59372a64, (q31_t)0x3ad2c2e8, (q31_t)0x5942b6af, (q31_t)0x3acdce4d, - (q31_t)0x594e4201, (q31_t)0x3ac8d76f, (q31_t)0x5959cc5a, (q31_t)0x3ac3de4c, - (q31_t)0x596555b8, (q31_t)0x3abee2e5, (q31_t)0x5970de1b, (q31_t)0x3ab9e53a, - (q31_t)0x597c6584, (q31_t)0x3ab4e54c, (q31_t)0x5987ebf0, (q31_t)0x3aafe31b, - (q31_t)0x59937161, (q31_t)0x3aaadea6, (q31_t)0x599ef5d6, (q31_t)0x3aa5d7ee, - (q31_t)0x59aa794d, (q31_t)0x3aa0cef3, (q31_t)0x59b5fbc8, (q31_t)0x3a9bc3b6, - (q31_t)0x59c17d44, (q31_t)0x3a96b636, (q31_t)0x59ccfdc2, (q31_t)0x3a91a674, - (q31_t)0x59d87d42, (q31_t)0x3a8c9470, (q31_t)0x59e3fbc3, (q31_t)0x3a87802a, - (q31_t)0x59ef7944, (q31_t)0x3a8269a3, (q31_t)0x59faf5c5, (q31_t)0x3a7d50da, - (q31_t)0x5a067145, (q31_t)0x3a7835cf, (q31_t)0x5a11ebc5, (q31_t)0x3a731884, - (q31_t)0x5a1d6544, (q31_t)0x3a6df8f8, (q31_t)0x5a28ddc0, (q31_t)0x3a68d72b, - (q31_t)0x5a34553b, (q31_t)0x3a63b31d, (q31_t)0x5a3fcbb3, (q31_t)0x3a5e8cd0, - (q31_t)0x5a4b4128, (q31_t)0x3a596442, (q31_t)0x5a56b599, (q31_t)0x3a543974, - (q31_t)0x5a622907, (q31_t)0x3a4f0c67, (q31_t)0x5a6d9b70, (q31_t)0x3a49dd1a, - (q31_t)0x5a790cd4, (q31_t)0x3a44ab8e, (q31_t)0x5a847d33, (q31_t)0x3a3f77c3, - (q31_t)0x5a8fec8c, (q31_t)0x3a3a41b9, (q31_t)0x5a9b5adf, (q31_t)0x3a350970, - (q31_t)0x5aa6c82b, (q31_t)0x3a2fcee8, (q31_t)0x5ab23471, (q31_t)0x3a2a9223, - (q31_t)0x5abd9faf, (q31_t)0x3a25531f, (q31_t)0x5ac909e5, (q31_t)0x3a2011de, - (q31_t)0x5ad47312, (q31_t)0x3a1ace5f, (q31_t)0x5adfdb37, (q31_t)0x3a1588a2, - (q31_t)0x5aeb4253, (q31_t)0x3a1040a8, (q31_t)0x5af6a865, (q31_t)0x3a0af671, - (q31_t)0x5b020d6c, (q31_t)0x3a05a9fd, (q31_t)0x5b0d716a, (q31_t)0x3a005b4d, - (q31_t)0x5b18d45c, (q31_t)0x39fb0a60, (q31_t)0x5b243643, (q31_t)0x39f5b737, - (q31_t)0x5b2f971e, (q31_t)0x39f061d2, (q31_t)0x5b3af6ec, (q31_t)0x39eb0a31, - (q31_t)0x5b4655ae, (q31_t)0x39e5b054, (q31_t)0x5b51b363, (q31_t)0x39e0543c, - (q31_t)0x5b5d100a, (q31_t)0x39daf5e8, (q31_t)0x5b686ba3, (q31_t)0x39d5955a, - (q31_t)0x5b73c62d, (q31_t)0x39d03291, (q31_t)0x5b7f1fa9, (q31_t)0x39cacd8d, - (q31_t)0x5b8a7815, (q31_t)0x39c5664f, (q31_t)0x5b95cf71, (q31_t)0x39bffcd7, - (q31_t)0x5ba125bd, (q31_t)0x39ba9125, (q31_t)0x5bac7af9, (q31_t)0x39b52339, - (q31_t)0x5bb7cf23, (q31_t)0x39afb313, (q31_t)0x5bc3223c, (q31_t)0x39aa40b4, - (q31_t)0x5bce7442, (q31_t)0x39a4cc1c, (q31_t)0x5bd9c537, (q31_t)0x399f554b, - (q31_t)0x5be51518, (q31_t)0x3999dc42, (q31_t)0x5bf063e6, (q31_t)0x399460ff, - (q31_t)0x5bfbb1a0, (q31_t)0x398ee385, (q31_t)0x5c06fe46, (q31_t)0x398963d2, - (q31_t)0x5c1249d8, (q31_t)0x3983e1e8, (q31_t)0x5c1d9454, (q31_t)0x397e5dc6, - (q31_t)0x5c28ddbb, (q31_t)0x3978d76c, (q31_t)0x5c34260c, (q31_t)0x39734edc, - (q31_t)0x5c3f6d47, (q31_t)0x396dc414, (q31_t)0x5c4ab36b, (q31_t)0x39683715, - (q31_t)0x5c55f878, (q31_t)0x3962a7e0, (q31_t)0x5c613c6d, (q31_t)0x395d1675, - (q31_t)0x5c6c7f4a, (q31_t)0x395782d3, (q31_t)0x5c77c10e, (q31_t)0x3951ecfc, - (q31_t)0x5c8301b9, (q31_t)0x394c54ee, (q31_t)0x5c8e414b, (q31_t)0x3946baac, - (q31_t)0x5c997fc4, (q31_t)0x39411e33, (q31_t)0x5ca4bd21, (q31_t)0x393b7f86, - (q31_t)0x5caff965, (q31_t)0x3935dea4, (q31_t)0x5cbb348d, (q31_t)0x39303b8e, - (q31_t)0x5cc66e99, (q31_t)0x392a9642, (q31_t)0x5cd1a78a, (q31_t)0x3924eec3, - (q31_t)0x5cdcdf5e, (q31_t)0x391f4510, (q31_t)0x5ce81615, (q31_t)0x39199929, - (q31_t)0x5cf34baf, (q31_t)0x3913eb0e, (q31_t)0x5cfe802b, (q31_t)0x390e3ac0, - (q31_t)0x5d09b389, (q31_t)0x3908883f, (q31_t)0x5d14e5c9, (q31_t)0x3902d38b, - (q31_t)0x5d2016e9, (q31_t)0x38fd1ca4, (q31_t)0x5d2b46ea, (q31_t)0x38f7638b, - (q31_t)0x5d3675cb, (q31_t)0x38f1a840, (q31_t)0x5d41a38c, (q31_t)0x38ebeac2, - (q31_t)0x5d4cd02c, (q31_t)0x38e62b13, (q31_t)0x5d57fbaa, (q31_t)0x38e06932, - (q31_t)0x5d632608, (q31_t)0x38daa520, (q31_t)0x5d6e4f43, (q31_t)0x38d4dedd, - (q31_t)0x5d79775c, (q31_t)0x38cf1669, (q31_t)0x5d849e51, (q31_t)0x38c94bc4, - (q31_t)0x5d8fc424, (q31_t)0x38c37eef, (q31_t)0x5d9ae8d2, (q31_t)0x38bdafea, - (q31_t)0x5da60c5d, (q31_t)0x38b7deb4, (q31_t)0x5db12ec3, (q31_t)0x38b20b4f, - (q31_t)0x5dbc5004, (q31_t)0x38ac35ba, (q31_t)0x5dc7701f, (q31_t)0x38a65df6, - (q31_t)0x5dd28f15, (q31_t)0x38a08402, (q31_t)0x5dddace4, (q31_t)0x389aa7e0, - (q31_t)0x5de8c98c, (q31_t)0x3894c98f, (q31_t)0x5df3e50d, (q31_t)0x388ee910, - (q31_t)0x5dfeff67, (q31_t)0x38890663, (q31_t)0x5e0a1898, (q31_t)0x38832187, - (q31_t)0x5e1530a1, (q31_t)0x387d3a7e, (q31_t)0x5e204781, (q31_t)0x38775147, - (q31_t)0x5e2b5d38, (q31_t)0x387165e3, (q31_t)0x5e3671c5, (q31_t)0x386b7852, - (q31_t)0x5e418528, (q31_t)0x38658894, (q31_t)0x5e4c9760, (q31_t)0x385f96a9, - (q31_t)0x5e57a86d, (q31_t)0x3859a292, (q31_t)0x5e62b84f, (q31_t)0x3853ac4f, - (q31_t)0x5e6dc705, (q31_t)0x384db3e0, (q31_t)0x5e78d48e, (q31_t)0x3847b946, - (q31_t)0x5e83e0eb, (q31_t)0x3841bc7f, (q31_t)0x5e8eec1b, (q31_t)0x383bbd8e, - (q31_t)0x5e99f61d, (q31_t)0x3835bc71, (q31_t)0x5ea4fef0, (q31_t)0x382fb92a, - (q31_t)0x5eb00696, (q31_t)0x3829b3b9, (q31_t)0x5ebb0d0d, (q31_t)0x3823ac1d, - (q31_t)0x5ec61254, (q31_t)0x381da256, (q31_t)0x5ed1166b, (q31_t)0x38179666, - (q31_t)0x5edc1953, (q31_t)0x3811884d, (q31_t)0x5ee71b0a, (q31_t)0x380b780a, - (q31_t)0x5ef21b90, (q31_t)0x3805659e, (q31_t)0x5efd1ae4, (q31_t)0x37ff5109, - (q31_t)0x5f081907, (q31_t)0x37f93a4b, (q31_t)0x5f1315f7, (q31_t)0x37f32165, - (q31_t)0x5f1e11b5, (q31_t)0x37ed0657, (q31_t)0x5f290c3f, (q31_t)0x37e6e921, - (q31_t)0x5f340596, (q31_t)0x37e0c9c3, (q31_t)0x5f3efdb9, (q31_t)0x37daa83d, - (q31_t)0x5f49f4a8, (q31_t)0x37d48490, (q31_t)0x5f54ea62, (q31_t)0x37ce5ebd, - (q31_t)0x5f5fdee6, (q31_t)0x37c836c2, (q31_t)0x5f6ad235, (q31_t)0x37c20ca1, - (q31_t)0x5f75c44e, (q31_t)0x37bbe05a, (q31_t)0x5f80b531, (q31_t)0x37b5b1ec, - (q31_t)0x5f8ba4dc, (q31_t)0x37af8159, (q31_t)0x5f969350, (q31_t)0x37a94ea0, - (q31_t)0x5fa1808c, (q31_t)0x37a319c2, (q31_t)0x5fac6c91, (q31_t)0x379ce2be, - (q31_t)0x5fb7575c, (q31_t)0x3796a996, (q31_t)0x5fc240ef, (q31_t)0x37906e49, - (q31_t)0x5fcd2948, (q31_t)0x378a30d8, (q31_t)0x5fd81067, (q31_t)0x3783f143, - (q31_t)0x5fe2f64c, (q31_t)0x377daf89, (q31_t)0x5feddaf6, (q31_t)0x37776bac, - (q31_t)0x5ff8be65, (q31_t)0x377125ac, (q31_t)0x6003a099, (q31_t)0x376add88, - (q31_t)0x600e8190, (q31_t)0x37649341, (q31_t)0x6019614c, (q31_t)0x375e46d8, - (q31_t)0x60243fca, (q31_t)0x3757f84c, (q31_t)0x602f1d0b, (q31_t)0x3751a79e, - (q31_t)0x6039f90f, (q31_t)0x374b54ce, (q31_t)0x6044d3d4, (q31_t)0x3744ffdd, - (q31_t)0x604fad5b, (q31_t)0x373ea8ca, (q31_t)0x605a85a3, (q31_t)0x37384f95, - (q31_t)0x60655cac, (q31_t)0x3731f440, (q31_t)0x60703275, (q31_t)0x372b96ca, - (q31_t)0x607b06fe, (q31_t)0x37253733, (q31_t)0x6085da46, (q31_t)0x371ed57c, - (q31_t)0x6090ac4d, (q31_t)0x371871a5, (q31_t)0x609b7d13, (q31_t)0x37120bae, - (q31_t)0x60a64c97, (q31_t)0x370ba398, (q31_t)0x60b11ad9, (q31_t)0x37053962, - (q31_t)0x60bbe7d8, (q31_t)0x36fecd0e, (q31_t)0x60c6b395, (q31_t)0x36f85e9a, - (q31_t)0x60d17e0d, (q31_t)0x36f1ee09, (q31_t)0x60dc4742, (q31_t)0x36eb7b58, - (q31_t)0x60e70f32, (q31_t)0x36e5068a, (q31_t)0x60f1d5de, (q31_t)0x36de8f9e, - (q31_t)0x60fc9b44, (q31_t)0x36d81695, (q31_t)0x61075f65, (q31_t)0x36d19b6e, - (q31_t)0x61122240, (q31_t)0x36cb1e2a, (q31_t)0x611ce3d5, (q31_t)0x36c49ec9, - (q31_t)0x6127a423, (q31_t)0x36be1d4c, (q31_t)0x61326329, (q31_t)0x36b799b3, - (q31_t)0x613d20e8, (q31_t)0x36b113fd, (q31_t)0x6147dd5f, (q31_t)0x36aa8c2c, - (q31_t)0x6152988d, (q31_t)0x36a4023f, (q31_t)0x615d5273, (q31_t)0x369d7637, - (q31_t)0x61680b0f, (q31_t)0x3696e814, (q31_t)0x6172c262, (q31_t)0x369057d6, - (q31_t)0x617d786a, (q31_t)0x3689c57d, (q31_t)0x61882d28, (q31_t)0x3683310b, - (q31_t)0x6192e09b, (q31_t)0x367c9a7e, (q31_t)0x619d92c2, (q31_t)0x367601d7, - (q31_t)0x61a8439e, (q31_t)0x366f6717, (q31_t)0x61b2f32e, (q31_t)0x3668ca3e, - (q31_t)0x61bda171, (q31_t)0x36622b4c, (q31_t)0x61c84e67, (q31_t)0x365b8a41, - (q31_t)0x61d2fa0f, (q31_t)0x3654e71d, (q31_t)0x61dda46a, (q31_t)0x364e41e2, - (q31_t)0x61e84d76, (q31_t)0x36479a8e, (q31_t)0x61f2f534, (q31_t)0x3640f123, - (q31_t)0x61fd9ba3, (q31_t)0x363a45a0, (q31_t)0x620840c2, (q31_t)0x36339806, - (q31_t)0x6212e492, (q31_t)0x362ce855, (q31_t)0x621d8711, (q31_t)0x3626368d, - (q31_t)0x6228283f, (q31_t)0x361f82af, (q31_t)0x6232c81c, (q31_t)0x3618ccba, - (q31_t)0x623d66a8, (q31_t)0x361214b0, (q31_t)0x624803e2, (q31_t)0x360b5a90, - (q31_t)0x62529fca, (q31_t)0x36049e5b, (q31_t)0x625d3a5e, (q31_t)0x35fde011, - (q31_t)0x6267d3a0, (q31_t)0x35f71fb1, (q31_t)0x62726b8e, (q31_t)0x35f05d3d, - (q31_t)0x627d0228, (q31_t)0x35e998b5, (q31_t)0x6287976e, (q31_t)0x35e2d219, - (q31_t)0x62922b5e, (q31_t)0x35dc0968, (q31_t)0x629cbdfa, (q31_t)0x35d53ea5, - (q31_t)0x62a74f40, (q31_t)0x35ce71ce, (q31_t)0x62b1df30, (q31_t)0x35c7a2e3, - (q31_t)0x62bc6dca, (q31_t)0x35c0d1e7, (q31_t)0x62c6fb0c, (q31_t)0x35b9fed7, - (q31_t)0x62d186f8, (q31_t)0x35b329b5, (q31_t)0x62dc118c, (q31_t)0x35ac5282, - (q31_t)0x62e69ac8, (q31_t)0x35a5793c, (q31_t)0x62f122ab, (q31_t)0x359e9de5, - (q31_t)0x62fba936, (q31_t)0x3597c07d, (q31_t)0x63062e67, (q31_t)0x3590e104, - (q31_t)0x6310b23e, (q31_t)0x3589ff7a, (q31_t)0x631b34bc, (q31_t)0x35831be0, - (q31_t)0x6325b5df, (q31_t)0x357c3636, (q31_t)0x633035a7, (q31_t)0x35754e7c, - (q31_t)0x633ab414, (q31_t)0x356e64b2, (q31_t)0x63453125, (q31_t)0x356778d9, - (q31_t)0x634facda, (q31_t)0x35608af1, (q31_t)0x635a2733, (q31_t)0x35599afa, - (q31_t)0x6364a02e, (q31_t)0x3552a8f4, (q31_t)0x636f17cc, (q31_t)0x354bb4e1, - (q31_t)0x63798e0d, (q31_t)0x3544bebf, (q31_t)0x638402ef, (q31_t)0x353dc68f, - (q31_t)0x638e7673, (q31_t)0x3536cc52, (q31_t)0x6398e898, (q31_t)0x352fd008, - (q31_t)0x63a3595e, (q31_t)0x3528d1b1, (q31_t)0x63adc8c4, (q31_t)0x3521d14d, - (q31_t)0x63b836ca, (q31_t)0x351acedd, (q31_t)0x63c2a36f, (q31_t)0x3513ca60, - (q31_t)0x63cd0eb3, (q31_t)0x350cc3d8, (q31_t)0x63d77896, (q31_t)0x3505bb44, - (q31_t)0x63e1e117, (q31_t)0x34feb0a5, (q31_t)0x63ec4837, (q31_t)0x34f7a3fb, - (q31_t)0x63f6adf3, (q31_t)0x34f09546, (q31_t)0x6401124d, (q31_t)0x34e98487, - (q31_t)0x640b7543, (q31_t)0x34e271bd, (q31_t)0x6415d6d5, (q31_t)0x34db5cea, - (q31_t)0x64203704, (q31_t)0x34d4460c, (q31_t)0x642a95ce, (q31_t)0x34cd2d26, - (q31_t)0x6434f332, (q31_t)0x34c61236, (q31_t)0x643f4f32, (q31_t)0x34bef53d, - (q31_t)0x6449a9cc, (q31_t)0x34b7d63c, (q31_t)0x645402ff, (q31_t)0x34b0b533, - (q31_t)0x645e5acc, (q31_t)0x34a99221, (q31_t)0x6468b132, (q31_t)0x34a26d08, - (q31_t)0x64730631, (q31_t)0x349b45e7, (q31_t)0x647d59c8, (q31_t)0x34941cbf, - (q31_t)0x6487abf7, (q31_t)0x348cf190, (q31_t)0x6491fcbe, (q31_t)0x3485c45b, - (q31_t)0x649c4c1b, (q31_t)0x347e951f, (q31_t)0x64a69a0f, (q31_t)0x347763dd, - (q31_t)0x64b0e699, (q31_t)0x34703095, (q31_t)0x64bb31ba, (q31_t)0x3468fb47, - (q31_t)0x64c57b6f, (q31_t)0x3461c3f5, (q31_t)0x64cfc3ba, (q31_t)0x345a8a9d, - (q31_t)0x64da0a9a, (q31_t)0x34534f41, (q31_t)0x64e4500e, (q31_t)0x344c11e0, - (q31_t)0x64ee9415, (q31_t)0x3444d27b, (q31_t)0x64f8d6b0, (q31_t)0x343d9112, - (q31_t)0x650317df, (q31_t)0x34364da6, (q31_t)0x650d57a0, (q31_t)0x342f0836, - (q31_t)0x651795f3, (q31_t)0x3427c0c3, (q31_t)0x6521d2d8, (q31_t)0x3420774d, - (q31_t)0x652c0e4f, (q31_t)0x34192bd5, (q31_t)0x65364857, (q31_t)0x3411de5b, - (q31_t)0x654080ef, (q31_t)0x340a8edf, (q31_t)0x654ab818, (q31_t)0x34033d61, - (q31_t)0x6554edd1, (q31_t)0x33fbe9e2, (q31_t)0x655f2219, (q31_t)0x33f49462, - (q31_t)0x656954f1, (q31_t)0x33ed3ce1, (q31_t)0x65738657, (q31_t)0x33e5e360, - (q31_t)0x657db64c, (q31_t)0x33de87de, (q31_t)0x6587e4cf, (q31_t)0x33d72a5d, - (q31_t)0x659211df, (q31_t)0x33cfcadc, (q31_t)0x659c3d7c, (q31_t)0x33c8695b, - (q31_t)0x65a667a7, (q31_t)0x33c105db, (q31_t)0x65b0905d, (q31_t)0x33b9a05d, - (q31_t)0x65bab7a0, (q31_t)0x33b238e0, (q31_t)0x65c4dd6e, (q31_t)0x33aacf65, - (q31_t)0x65cf01c8, (q31_t)0x33a363ec, (q31_t)0x65d924ac, (q31_t)0x339bf675, - (q31_t)0x65e3461b, (q31_t)0x33948701, (q31_t)0x65ed6614, (q31_t)0x338d1590, - (q31_t)0x65f78497, (q31_t)0x3385a222, (q31_t)0x6601a1a2, (q31_t)0x337e2cb7, - (q31_t)0x660bbd37, (q31_t)0x3376b551, (q31_t)0x6615d754, (q31_t)0x336f3bee, - (q31_t)0x661feffa, (q31_t)0x3367c090, (q31_t)0x662a0727, (q31_t)0x33604336, - (q31_t)0x66341cdb, (q31_t)0x3358c3e2, (q31_t)0x663e3117, (q31_t)0x33514292, - (q31_t)0x664843d9, (q31_t)0x3349bf48, (q31_t)0x66525521, (q31_t)0x33423a04, - (q31_t)0x665c64ef, (q31_t)0x333ab2c6, (q31_t)0x66667342, (q31_t)0x3333298f, - (q31_t)0x6670801a, (q31_t)0x332b9e5e, (q31_t)0x667a8b77, (q31_t)0x33241134, - (q31_t)0x66849558, (q31_t)0x331c8211, (q31_t)0x668e9dbd, (q31_t)0x3314f0f6, - (q31_t)0x6698a4a6, (q31_t)0x330d5de3, (q31_t)0x66a2aa11, (q31_t)0x3305c8d7, - (q31_t)0x66acadff, (q31_t)0x32fe31d5, (q31_t)0x66b6b070, (q31_t)0x32f698db, - (q31_t)0x66c0b162, (q31_t)0x32eefdea, (q31_t)0x66cab0d6, (q31_t)0x32e76102, - (q31_t)0x66d4aecb, (q31_t)0x32dfc224, (q31_t)0x66deab41, (q31_t)0x32d82150, - (q31_t)0x66e8a637, (q31_t)0x32d07e85, (q31_t)0x66f29fad, (q31_t)0x32c8d9c6, - (q31_t)0x66fc97a3, (q31_t)0x32c13311, (q31_t)0x67068e18, (q31_t)0x32b98a67, - (q31_t)0x6710830c, (q31_t)0x32b1dfc9, (q31_t)0x671a767e, (q31_t)0x32aa3336, - (q31_t)0x6724686e, (q31_t)0x32a284b0, (q31_t)0x672e58dc, (q31_t)0x329ad435, - (q31_t)0x673847c8, (q31_t)0x329321c7, (q31_t)0x67423530, (q31_t)0x328b6d66, - (q31_t)0x674c2115, (q31_t)0x3283b712, (q31_t)0x67560b76, (q31_t)0x327bfecc, - (q31_t)0x675ff452, (q31_t)0x32744493, (q31_t)0x6769dbaa, (q31_t)0x326c8868, - (q31_t)0x6773c17d, (q31_t)0x3264ca4c, (q31_t)0x677da5cb, (q31_t)0x325d0a3e, - (q31_t)0x67878893, (q31_t)0x32554840, (q31_t)0x679169d5, (q31_t)0x324d8450, - (q31_t)0x679b4990, (q31_t)0x3245be70, (q31_t)0x67a527c4, (q31_t)0x323df6a0, - (q31_t)0x67af0472, (q31_t)0x32362ce0, (q31_t)0x67b8df97, (q31_t)0x322e6130, - (q31_t)0x67c2b934, (q31_t)0x32269391, (q31_t)0x67cc9149, (q31_t)0x321ec403, - (q31_t)0x67d667d5, (q31_t)0x3216f287, (q31_t)0x67e03cd8, (q31_t)0x320f1f1c, - (q31_t)0x67ea1052, (q31_t)0x320749c3, (q31_t)0x67f3e241, (q31_t)0x31ff727c, - (q31_t)0x67fdb2a7, (q31_t)0x31f79948, (q31_t)0x68078181, (q31_t)0x31efbe27, - (q31_t)0x68114ed0, (q31_t)0x31e7e118, (q31_t)0x681b1a94, (q31_t)0x31e0021e, - (q31_t)0x6824e4cc, (q31_t)0x31d82137, (q31_t)0x682ead78, (q31_t)0x31d03e64, - (q31_t)0x68387498, (q31_t)0x31c859a5, (q31_t)0x68423a2a, (q31_t)0x31c072fb, - (q31_t)0x684bfe2f, (q31_t)0x31b88a66, (q31_t)0x6855c0a6, (q31_t)0x31b09fe7, - (q31_t)0x685f8190, (q31_t)0x31a8b37c, (q31_t)0x686940ea, (q31_t)0x31a0c528, - (q31_t)0x6872feb6, (q31_t)0x3198d4ea, (q31_t)0x687cbaf3, (q31_t)0x3190e2c3, - (q31_t)0x688675a0, (q31_t)0x3188eeb2, (q31_t)0x68902ebd, (q31_t)0x3180f8b8, - (q31_t)0x6899e64a, (q31_t)0x317900d6, (q31_t)0x68a39c46, (q31_t)0x3171070c, - (q31_t)0x68ad50b1, (q31_t)0x31690b59, (q31_t)0x68b7038b, (q31_t)0x31610dbf, - (q31_t)0x68c0b4d2, (q31_t)0x31590e3e, (q31_t)0x68ca6488, (q31_t)0x31510cd5, - (q31_t)0x68d412ab, (q31_t)0x31490986, (q31_t)0x68ddbf3b, (q31_t)0x31410450, - (q31_t)0x68e76a37, (q31_t)0x3138fd35, (q31_t)0x68f113a0, (q31_t)0x3130f433, - (q31_t)0x68fabb75, (q31_t)0x3128e94c, (q31_t)0x690461b5, (q31_t)0x3120dc80, - (q31_t)0x690e0661, (q31_t)0x3118cdcf, (q31_t)0x6917a977, (q31_t)0x3110bd39, - (q31_t)0x69214af8, (q31_t)0x3108aabf, (q31_t)0x692aeae3, (q31_t)0x31009661, - (q31_t)0x69348937, (q31_t)0x30f8801f, (q31_t)0x693e25f5, (q31_t)0x30f067fb, - (q31_t)0x6947c11c, (q31_t)0x30e84df3, (q31_t)0x69515aab, (q31_t)0x30e03208, - (q31_t)0x695af2a3, (q31_t)0x30d8143b, (q31_t)0x69648902, (q31_t)0x30cff48c, - (q31_t)0x696e1dc9, (q31_t)0x30c7d2fb, (q31_t)0x6977b0f7, (q31_t)0x30bfaf89, - (q31_t)0x6981428c, (q31_t)0x30b78a36, (q31_t)0x698ad287, (q31_t)0x30af6302, - (q31_t)0x699460e8, (q31_t)0x30a739ed, (q31_t)0x699dedaf, (q31_t)0x309f0ef8, - (q31_t)0x69a778db, (q31_t)0x3096e223, (q31_t)0x69b1026c, (q31_t)0x308eb36f, - (q31_t)0x69ba8a61, (q31_t)0x308682dc, (q31_t)0x69c410ba, (q31_t)0x307e5069, - (q31_t)0x69cd9578, (q31_t)0x30761c18, (q31_t)0x69d71899, (q31_t)0x306de5e9, - (q31_t)0x69e09a1c, (q31_t)0x3065addb, (q31_t)0x69ea1a03, (q31_t)0x305d73f0, - (q31_t)0x69f3984c, (q31_t)0x30553828, (q31_t)0x69fd14f6, (q31_t)0x304cfa83, - (q31_t)0x6a069003, (q31_t)0x3044bb00, (q31_t)0x6a100970, (q31_t)0x303c79a2, - (q31_t)0x6a19813f, (q31_t)0x30343667, (q31_t)0x6a22f76e, (q31_t)0x302bf151, - (q31_t)0x6a2c6bfd, (q31_t)0x3023aa5f, (q31_t)0x6a35deeb, (q31_t)0x301b6193, - (q31_t)0x6a3f503a, (q31_t)0x301316eb, (q31_t)0x6a48bfe7, (q31_t)0x300aca69, - (q31_t)0x6a522df3, (q31_t)0x30027c0c, (q31_t)0x6a5b9a5d, (q31_t)0x2ffa2bd6, - (q31_t)0x6a650525, (q31_t)0x2ff1d9c7, (q31_t)0x6a6e6e4b, (q31_t)0x2fe985de, - (q31_t)0x6a77d5ce, (q31_t)0x2fe1301c, (q31_t)0x6a813bae, (q31_t)0x2fd8d882, - (q31_t)0x6a8a9fea, (q31_t)0x2fd07f0f, (q31_t)0x6a940283, (q31_t)0x2fc823c5, - (q31_t)0x6a9d6377, (q31_t)0x2fbfc6a3, (q31_t)0x6aa6c2c6, (q31_t)0x2fb767aa, - (q31_t)0x6ab02071, (q31_t)0x2faf06da, (q31_t)0x6ab97c77, (q31_t)0x2fa6a433, - (q31_t)0x6ac2d6d6, (q31_t)0x2f9e3fb6, (q31_t)0x6acc2f90, (q31_t)0x2f95d963, - (q31_t)0x6ad586a3, (q31_t)0x2f8d713a, (q31_t)0x6adedc10, (q31_t)0x2f85073c, - (q31_t)0x6ae82fd5, (q31_t)0x2f7c9b69, (q31_t)0x6af181f3, (q31_t)0x2f742dc1, - (q31_t)0x6afad269, (q31_t)0x2f6bbe45, (q31_t)0x6b042137, (q31_t)0x2f634cf5, - (q31_t)0x6b0d6e5c, (q31_t)0x2f5ad9d1, (q31_t)0x6b16b9d9, (q31_t)0x2f5264da, - (q31_t)0x6b2003ac, (q31_t)0x2f49ee0f, (q31_t)0x6b294bd5, (q31_t)0x2f417573, - (q31_t)0x6b329255, (q31_t)0x2f38fb03, (q31_t)0x6b3bd72a, (q31_t)0x2f307ec2, - (q31_t)0x6b451a55, (q31_t)0x2f2800af, (q31_t)0x6b4e5bd4, (q31_t)0x2f1f80ca, - (q31_t)0x6b579ba8, (q31_t)0x2f16ff14, (q31_t)0x6b60d9d0, (q31_t)0x2f0e7b8e, - (q31_t)0x6b6a164d, (q31_t)0x2f05f637, (q31_t)0x6b73511c, (q31_t)0x2efd6f10, - (q31_t)0x6b7c8a3f, (q31_t)0x2ef4e619, (q31_t)0x6b85c1b5, (q31_t)0x2eec5b53, - (q31_t)0x6b8ef77d, (q31_t)0x2ee3cebe, (q31_t)0x6b982b97, (q31_t)0x2edb405a, - (q31_t)0x6ba15e03, (q31_t)0x2ed2b027, (q31_t)0x6baa8ec0, (q31_t)0x2eca1e27, - (q31_t)0x6bb3bdce, (q31_t)0x2ec18a58, (q31_t)0x6bbceb2d, (q31_t)0x2eb8f4bc, - (q31_t)0x6bc616dd, (q31_t)0x2eb05d53, (q31_t)0x6bcf40dc, (q31_t)0x2ea7c41e, - (q31_t)0x6bd8692b, (q31_t)0x2e9f291b, (q31_t)0x6be18fc9, (q31_t)0x2e968c4d, - (q31_t)0x6beab4b6, (q31_t)0x2e8dedb3, (q31_t)0x6bf3d7f2, (q31_t)0x2e854d4d, - (q31_t)0x6bfcf97c, (q31_t)0x2e7cab1c, (q31_t)0x6c061953, (q31_t)0x2e740720, - (q31_t)0x6c0f3779, (q31_t)0x2e6b615a, (q31_t)0x6c1853eb, (q31_t)0x2e62b9ca, - (q31_t)0x6c216eaa, (q31_t)0x2e5a1070, (q31_t)0x6c2a87b6, (q31_t)0x2e51654c, - (q31_t)0x6c339f0e, (q31_t)0x2e48b860, (q31_t)0x6c3cb4b1, (q31_t)0x2e4009aa, - (q31_t)0x6c45c8a0, (q31_t)0x2e37592c, (q31_t)0x6c4edada, (q31_t)0x2e2ea6e6, - (q31_t)0x6c57eb5e, (q31_t)0x2e25f2d8, (q31_t)0x6c60fa2d, (q31_t)0x2e1d3d03, - (q31_t)0x6c6a0746, (q31_t)0x2e148566, (q31_t)0x6c7312a9, (q31_t)0x2e0bcc03, - (q31_t)0x6c7c1c55, (q31_t)0x2e0310d9, (q31_t)0x6c85244a, (q31_t)0x2dfa53e9, - (q31_t)0x6c8e2a87, (q31_t)0x2df19534, (q31_t)0x6c972f0d, (q31_t)0x2de8d4b8, - (q31_t)0x6ca031da, (q31_t)0x2de01278, (q31_t)0x6ca932ef, (q31_t)0x2dd74e73, - (q31_t)0x6cb2324c, (q31_t)0x2dce88aa, (q31_t)0x6cbb2fef, (q31_t)0x2dc5c11c, - (q31_t)0x6cc42bd9, (q31_t)0x2dbcf7cb, (q31_t)0x6ccd2609, (q31_t)0x2db42cb6, - (q31_t)0x6cd61e7f, (q31_t)0x2dab5fdf, (q31_t)0x6cdf153a, (q31_t)0x2da29144, - (q31_t)0x6ce80a3a, (q31_t)0x2d99c0e7, (q31_t)0x6cf0fd80, (q31_t)0x2d90eec8, - (q31_t)0x6cf9ef09, (q31_t)0x2d881ae8, (q31_t)0x6d02ded7, (q31_t)0x2d7f4545, - (q31_t)0x6d0bcce8, (q31_t)0x2d766de2, (q31_t)0x6d14b93d, (q31_t)0x2d6d94bf, - (q31_t)0x6d1da3d5, (q31_t)0x2d64b9da, (q31_t)0x6d268cb0, (q31_t)0x2d5bdd36, - (q31_t)0x6d2f73cd, (q31_t)0x2d52fed2, (q31_t)0x6d38592c, (q31_t)0x2d4a1eaf, - (q31_t)0x6d413ccd, (q31_t)0x2d413ccd, (q31_t)0x6d4a1eaf, (q31_t)0x2d38592c, - (q31_t)0x6d52fed2, (q31_t)0x2d2f73cd, (q31_t)0x6d5bdd36, (q31_t)0x2d268cb0, - (q31_t)0x6d64b9da, (q31_t)0x2d1da3d5, (q31_t)0x6d6d94bf, (q31_t)0x2d14b93d, - (q31_t)0x6d766de2, (q31_t)0x2d0bcce8, (q31_t)0x6d7f4545, (q31_t)0x2d02ded7, - (q31_t)0x6d881ae8, (q31_t)0x2cf9ef09, (q31_t)0x6d90eec8, (q31_t)0x2cf0fd80, - (q31_t)0x6d99c0e7, (q31_t)0x2ce80a3a, (q31_t)0x6da29144, (q31_t)0x2cdf153a, - (q31_t)0x6dab5fdf, (q31_t)0x2cd61e7f, (q31_t)0x6db42cb6, (q31_t)0x2ccd2609, - (q31_t)0x6dbcf7cb, (q31_t)0x2cc42bd9, (q31_t)0x6dc5c11c, (q31_t)0x2cbb2fef, - (q31_t)0x6dce88aa, (q31_t)0x2cb2324c, (q31_t)0x6dd74e73, (q31_t)0x2ca932ef, - (q31_t)0x6de01278, (q31_t)0x2ca031da, (q31_t)0x6de8d4b8, (q31_t)0x2c972f0d, - (q31_t)0x6df19534, (q31_t)0x2c8e2a87, (q31_t)0x6dfa53e9, (q31_t)0x2c85244a, - (q31_t)0x6e0310d9, (q31_t)0x2c7c1c55, (q31_t)0x6e0bcc03, (q31_t)0x2c7312a9, - (q31_t)0x6e148566, (q31_t)0x2c6a0746, (q31_t)0x6e1d3d03, (q31_t)0x2c60fa2d, - (q31_t)0x6e25f2d8, (q31_t)0x2c57eb5e, (q31_t)0x6e2ea6e6, (q31_t)0x2c4edada, - (q31_t)0x6e37592c, (q31_t)0x2c45c8a0, (q31_t)0x6e4009aa, (q31_t)0x2c3cb4b1, - (q31_t)0x6e48b860, (q31_t)0x2c339f0e, (q31_t)0x6e51654c, (q31_t)0x2c2a87b6, - (q31_t)0x6e5a1070, (q31_t)0x2c216eaa, (q31_t)0x6e62b9ca, (q31_t)0x2c1853eb, - (q31_t)0x6e6b615a, (q31_t)0x2c0f3779, (q31_t)0x6e740720, (q31_t)0x2c061953, - (q31_t)0x6e7cab1c, (q31_t)0x2bfcf97c, (q31_t)0x6e854d4d, (q31_t)0x2bf3d7f2, - (q31_t)0x6e8dedb3, (q31_t)0x2beab4b6, (q31_t)0x6e968c4d, (q31_t)0x2be18fc9, - (q31_t)0x6e9f291b, (q31_t)0x2bd8692b, (q31_t)0x6ea7c41e, (q31_t)0x2bcf40dc, - (q31_t)0x6eb05d53, (q31_t)0x2bc616dd, (q31_t)0x6eb8f4bc, (q31_t)0x2bbceb2d, - (q31_t)0x6ec18a58, (q31_t)0x2bb3bdce, (q31_t)0x6eca1e27, (q31_t)0x2baa8ec0, - (q31_t)0x6ed2b027, (q31_t)0x2ba15e03, (q31_t)0x6edb405a, (q31_t)0x2b982b97, - (q31_t)0x6ee3cebe, (q31_t)0x2b8ef77d, (q31_t)0x6eec5b53, (q31_t)0x2b85c1b5, - (q31_t)0x6ef4e619, (q31_t)0x2b7c8a3f, (q31_t)0x6efd6f10, (q31_t)0x2b73511c, - (q31_t)0x6f05f637, (q31_t)0x2b6a164d, (q31_t)0x6f0e7b8e, (q31_t)0x2b60d9d0, - (q31_t)0x6f16ff14, (q31_t)0x2b579ba8, (q31_t)0x6f1f80ca, (q31_t)0x2b4e5bd4, - (q31_t)0x6f2800af, (q31_t)0x2b451a55, (q31_t)0x6f307ec2, (q31_t)0x2b3bd72a, - (q31_t)0x6f38fb03, (q31_t)0x2b329255, (q31_t)0x6f417573, (q31_t)0x2b294bd5, - (q31_t)0x6f49ee0f, (q31_t)0x2b2003ac, (q31_t)0x6f5264da, (q31_t)0x2b16b9d9, - (q31_t)0x6f5ad9d1, (q31_t)0x2b0d6e5c, (q31_t)0x6f634cf5, (q31_t)0x2b042137, - (q31_t)0x6f6bbe45, (q31_t)0x2afad269, (q31_t)0x6f742dc1, (q31_t)0x2af181f3, - (q31_t)0x6f7c9b69, (q31_t)0x2ae82fd5, (q31_t)0x6f85073c, (q31_t)0x2adedc10, - (q31_t)0x6f8d713a, (q31_t)0x2ad586a3, (q31_t)0x6f95d963, (q31_t)0x2acc2f90, - (q31_t)0x6f9e3fb6, (q31_t)0x2ac2d6d6, (q31_t)0x6fa6a433, (q31_t)0x2ab97c77, - (q31_t)0x6faf06da, (q31_t)0x2ab02071, (q31_t)0x6fb767aa, (q31_t)0x2aa6c2c6, - (q31_t)0x6fbfc6a3, (q31_t)0x2a9d6377, (q31_t)0x6fc823c5, (q31_t)0x2a940283, - (q31_t)0x6fd07f0f, (q31_t)0x2a8a9fea, (q31_t)0x6fd8d882, (q31_t)0x2a813bae, - (q31_t)0x6fe1301c, (q31_t)0x2a77d5ce, (q31_t)0x6fe985de, (q31_t)0x2a6e6e4b, - (q31_t)0x6ff1d9c7, (q31_t)0x2a650525, (q31_t)0x6ffa2bd6, (q31_t)0x2a5b9a5d, - (q31_t)0x70027c0c, (q31_t)0x2a522df3, (q31_t)0x700aca69, (q31_t)0x2a48bfe7, - (q31_t)0x701316eb, (q31_t)0x2a3f503a, (q31_t)0x701b6193, (q31_t)0x2a35deeb, - (q31_t)0x7023aa5f, (q31_t)0x2a2c6bfd, (q31_t)0x702bf151, (q31_t)0x2a22f76e, - (q31_t)0x70343667, (q31_t)0x2a19813f, (q31_t)0x703c79a2, (q31_t)0x2a100970, - (q31_t)0x7044bb00, (q31_t)0x2a069003, (q31_t)0x704cfa83, (q31_t)0x29fd14f6, - (q31_t)0x70553828, (q31_t)0x29f3984c, (q31_t)0x705d73f0, (q31_t)0x29ea1a03, - (q31_t)0x7065addb, (q31_t)0x29e09a1c, (q31_t)0x706de5e9, (q31_t)0x29d71899, - (q31_t)0x70761c18, (q31_t)0x29cd9578, (q31_t)0x707e5069, (q31_t)0x29c410ba, - (q31_t)0x708682dc, (q31_t)0x29ba8a61, (q31_t)0x708eb36f, (q31_t)0x29b1026c, - (q31_t)0x7096e223, (q31_t)0x29a778db, (q31_t)0x709f0ef8, (q31_t)0x299dedaf, - (q31_t)0x70a739ed, (q31_t)0x299460e8, (q31_t)0x70af6302, (q31_t)0x298ad287, - (q31_t)0x70b78a36, (q31_t)0x2981428c, (q31_t)0x70bfaf89, (q31_t)0x2977b0f7, - (q31_t)0x70c7d2fb, (q31_t)0x296e1dc9, (q31_t)0x70cff48c, (q31_t)0x29648902, - (q31_t)0x70d8143b, (q31_t)0x295af2a3, (q31_t)0x70e03208, (q31_t)0x29515aab, - (q31_t)0x70e84df3, (q31_t)0x2947c11c, (q31_t)0x70f067fb, (q31_t)0x293e25f5, - (q31_t)0x70f8801f, (q31_t)0x29348937, (q31_t)0x71009661, (q31_t)0x292aeae3, - (q31_t)0x7108aabf, (q31_t)0x29214af8, (q31_t)0x7110bd39, (q31_t)0x2917a977, - (q31_t)0x7118cdcf, (q31_t)0x290e0661, (q31_t)0x7120dc80, (q31_t)0x290461b5, - (q31_t)0x7128e94c, (q31_t)0x28fabb75, (q31_t)0x7130f433, (q31_t)0x28f113a0, - (q31_t)0x7138fd35, (q31_t)0x28e76a37, (q31_t)0x71410450, (q31_t)0x28ddbf3b, - (q31_t)0x71490986, (q31_t)0x28d412ab, (q31_t)0x71510cd5, (q31_t)0x28ca6488, - (q31_t)0x71590e3e, (q31_t)0x28c0b4d2, (q31_t)0x71610dbf, (q31_t)0x28b7038b, - (q31_t)0x71690b59, (q31_t)0x28ad50b1, (q31_t)0x7171070c, (q31_t)0x28a39c46, - (q31_t)0x717900d6, (q31_t)0x2899e64a, (q31_t)0x7180f8b8, (q31_t)0x28902ebd, - (q31_t)0x7188eeb2, (q31_t)0x288675a0, (q31_t)0x7190e2c3, (q31_t)0x287cbaf3, - (q31_t)0x7198d4ea, (q31_t)0x2872feb6, (q31_t)0x71a0c528, (q31_t)0x286940ea, - (q31_t)0x71a8b37c, (q31_t)0x285f8190, (q31_t)0x71b09fe7, (q31_t)0x2855c0a6, - (q31_t)0x71b88a66, (q31_t)0x284bfe2f, (q31_t)0x71c072fb, (q31_t)0x28423a2a, - (q31_t)0x71c859a5, (q31_t)0x28387498, (q31_t)0x71d03e64, (q31_t)0x282ead78, - (q31_t)0x71d82137, (q31_t)0x2824e4cc, (q31_t)0x71e0021e, (q31_t)0x281b1a94, - (q31_t)0x71e7e118, (q31_t)0x28114ed0, (q31_t)0x71efbe27, (q31_t)0x28078181, - (q31_t)0x71f79948, (q31_t)0x27fdb2a7, (q31_t)0x71ff727c, (q31_t)0x27f3e241, - (q31_t)0x720749c3, (q31_t)0x27ea1052, (q31_t)0x720f1f1c, (q31_t)0x27e03cd8, - (q31_t)0x7216f287, (q31_t)0x27d667d5, (q31_t)0x721ec403, (q31_t)0x27cc9149, - (q31_t)0x72269391, (q31_t)0x27c2b934, (q31_t)0x722e6130, (q31_t)0x27b8df97, - (q31_t)0x72362ce0, (q31_t)0x27af0472, (q31_t)0x723df6a0, (q31_t)0x27a527c4, - (q31_t)0x7245be70, (q31_t)0x279b4990, (q31_t)0x724d8450, (q31_t)0x279169d5, - (q31_t)0x72554840, (q31_t)0x27878893, (q31_t)0x725d0a3e, (q31_t)0x277da5cb, - (q31_t)0x7264ca4c, (q31_t)0x2773c17d, (q31_t)0x726c8868, (q31_t)0x2769dbaa, - (q31_t)0x72744493, (q31_t)0x275ff452, (q31_t)0x727bfecc, (q31_t)0x27560b76, - (q31_t)0x7283b712, (q31_t)0x274c2115, (q31_t)0x728b6d66, (q31_t)0x27423530, - (q31_t)0x729321c7, (q31_t)0x273847c8, (q31_t)0x729ad435, (q31_t)0x272e58dc, - (q31_t)0x72a284b0, (q31_t)0x2724686e, (q31_t)0x72aa3336, (q31_t)0x271a767e, - (q31_t)0x72b1dfc9, (q31_t)0x2710830c, (q31_t)0x72b98a67, (q31_t)0x27068e18, - (q31_t)0x72c13311, (q31_t)0x26fc97a3, (q31_t)0x72c8d9c6, (q31_t)0x26f29fad, - (q31_t)0x72d07e85, (q31_t)0x26e8a637, (q31_t)0x72d82150, (q31_t)0x26deab41, - (q31_t)0x72dfc224, (q31_t)0x26d4aecb, (q31_t)0x72e76102, (q31_t)0x26cab0d6, - (q31_t)0x72eefdea, (q31_t)0x26c0b162, (q31_t)0x72f698db, (q31_t)0x26b6b070, - (q31_t)0x72fe31d5, (q31_t)0x26acadff, (q31_t)0x7305c8d7, (q31_t)0x26a2aa11, - (q31_t)0x730d5de3, (q31_t)0x2698a4a6, (q31_t)0x7314f0f6, (q31_t)0x268e9dbd, - (q31_t)0x731c8211, (q31_t)0x26849558, (q31_t)0x73241134, (q31_t)0x267a8b77, - (q31_t)0x732b9e5e, (q31_t)0x2670801a, (q31_t)0x7333298f, (q31_t)0x26667342, - (q31_t)0x733ab2c6, (q31_t)0x265c64ef, (q31_t)0x73423a04, (q31_t)0x26525521, - (q31_t)0x7349bf48, (q31_t)0x264843d9, (q31_t)0x73514292, (q31_t)0x263e3117, - (q31_t)0x7358c3e2, (q31_t)0x26341cdb, (q31_t)0x73604336, (q31_t)0x262a0727, - (q31_t)0x7367c090, (q31_t)0x261feffa, (q31_t)0x736f3bee, (q31_t)0x2615d754, - (q31_t)0x7376b551, (q31_t)0x260bbd37, (q31_t)0x737e2cb7, (q31_t)0x2601a1a2, - (q31_t)0x7385a222, (q31_t)0x25f78497, (q31_t)0x738d1590, (q31_t)0x25ed6614, - (q31_t)0x73948701, (q31_t)0x25e3461b, (q31_t)0x739bf675, (q31_t)0x25d924ac, - (q31_t)0x73a363ec, (q31_t)0x25cf01c8, (q31_t)0x73aacf65, (q31_t)0x25c4dd6e, - (q31_t)0x73b238e0, (q31_t)0x25bab7a0, (q31_t)0x73b9a05d, (q31_t)0x25b0905d, - (q31_t)0x73c105db, (q31_t)0x25a667a7, (q31_t)0x73c8695b, (q31_t)0x259c3d7c, - (q31_t)0x73cfcadc, (q31_t)0x259211df, (q31_t)0x73d72a5d, (q31_t)0x2587e4cf, - (q31_t)0x73de87de, (q31_t)0x257db64c, (q31_t)0x73e5e360, (q31_t)0x25738657, - (q31_t)0x73ed3ce1, (q31_t)0x256954f1, (q31_t)0x73f49462, (q31_t)0x255f2219, - (q31_t)0x73fbe9e2, (q31_t)0x2554edd1, (q31_t)0x74033d61, (q31_t)0x254ab818, - (q31_t)0x740a8edf, (q31_t)0x254080ef, (q31_t)0x7411de5b, (q31_t)0x25364857, - (q31_t)0x74192bd5, (q31_t)0x252c0e4f, (q31_t)0x7420774d, (q31_t)0x2521d2d8, - (q31_t)0x7427c0c3, (q31_t)0x251795f3, (q31_t)0x742f0836, (q31_t)0x250d57a0, - (q31_t)0x74364da6, (q31_t)0x250317df, (q31_t)0x743d9112, (q31_t)0x24f8d6b0, - (q31_t)0x7444d27b, (q31_t)0x24ee9415, (q31_t)0x744c11e0, (q31_t)0x24e4500e, - (q31_t)0x74534f41, (q31_t)0x24da0a9a, (q31_t)0x745a8a9d, (q31_t)0x24cfc3ba, - (q31_t)0x7461c3f5, (q31_t)0x24c57b6f, (q31_t)0x7468fb47, (q31_t)0x24bb31ba, - (q31_t)0x74703095, (q31_t)0x24b0e699, (q31_t)0x747763dd, (q31_t)0x24a69a0f, - (q31_t)0x747e951f, (q31_t)0x249c4c1b, (q31_t)0x7485c45b, (q31_t)0x2491fcbe, - (q31_t)0x748cf190, (q31_t)0x2487abf7, (q31_t)0x74941cbf, (q31_t)0x247d59c8, - (q31_t)0x749b45e7, (q31_t)0x24730631, (q31_t)0x74a26d08, (q31_t)0x2468b132, - (q31_t)0x74a99221, (q31_t)0x245e5acc, (q31_t)0x74b0b533, (q31_t)0x245402ff, - (q31_t)0x74b7d63c, (q31_t)0x2449a9cc, (q31_t)0x74bef53d, (q31_t)0x243f4f32, - (q31_t)0x74c61236, (q31_t)0x2434f332, (q31_t)0x74cd2d26, (q31_t)0x242a95ce, - (q31_t)0x74d4460c, (q31_t)0x24203704, (q31_t)0x74db5cea, (q31_t)0x2415d6d5, - (q31_t)0x74e271bd, (q31_t)0x240b7543, (q31_t)0x74e98487, (q31_t)0x2401124d, - (q31_t)0x74f09546, (q31_t)0x23f6adf3, (q31_t)0x74f7a3fb, (q31_t)0x23ec4837, - (q31_t)0x74feb0a5, (q31_t)0x23e1e117, (q31_t)0x7505bb44, (q31_t)0x23d77896, - (q31_t)0x750cc3d8, (q31_t)0x23cd0eb3, (q31_t)0x7513ca60, (q31_t)0x23c2a36f, - (q31_t)0x751acedd, (q31_t)0x23b836ca, (q31_t)0x7521d14d, (q31_t)0x23adc8c4, - (q31_t)0x7528d1b1, (q31_t)0x23a3595e, (q31_t)0x752fd008, (q31_t)0x2398e898, - (q31_t)0x7536cc52, (q31_t)0x238e7673, (q31_t)0x753dc68f, (q31_t)0x238402ef, - (q31_t)0x7544bebf, (q31_t)0x23798e0d, (q31_t)0x754bb4e1, (q31_t)0x236f17cc, - (q31_t)0x7552a8f4, (q31_t)0x2364a02e, (q31_t)0x75599afa, (q31_t)0x235a2733, - (q31_t)0x75608af1, (q31_t)0x234facda, (q31_t)0x756778d9, (q31_t)0x23453125, - (q31_t)0x756e64b2, (q31_t)0x233ab414, (q31_t)0x75754e7c, (q31_t)0x233035a7, - (q31_t)0x757c3636, (q31_t)0x2325b5df, (q31_t)0x75831be0, (q31_t)0x231b34bc, - (q31_t)0x7589ff7a, (q31_t)0x2310b23e, (q31_t)0x7590e104, (q31_t)0x23062e67, - (q31_t)0x7597c07d, (q31_t)0x22fba936, (q31_t)0x759e9de5, (q31_t)0x22f122ab, - (q31_t)0x75a5793c, (q31_t)0x22e69ac8, (q31_t)0x75ac5282, (q31_t)0x22dc118c, - (q31_t)0x75b329b5, (q31_t)0x22d186f8, (q31_t)0x75b9fed7, (q31_t)0x22c6fb0c, - (q31_t)0x75c0d1e7, (q31_t)0x22bc6dca, (q31_t)0x75c7a2e3, (q31_t)0x22b1df30, - (q31_t)0x75ce71ce, (q31_t)0x22a74f40, (q31_t)0x75d53ea5, (q31_t)0x229cbdfa, - (q31_t)0x75dc0968, (q31_t)0x22922b5e, (q31_t)0x75e2d219, (q31_t)0x2287976e, - (q31_t)0x75e998b5, (q31_t)0x227d0228, (q31_t)0x75f05d3d, (q31_t)0x22726b8e, - (q31_t)0x75f71fb1, (q31_t)0x2267d3a0, (q31_t)0x75fde011, (q31_t)0x225d3a5e, - (q31_t)0x76049e5b, (q31_t)0x22529fca, (q31_t)0x760b5a90, (q31_t)0x224803e2, - (q31_t)0x761214b0, (q31_t)0x223d66a8, (q31_t)0x7618ccba, (q31_t)0x2232c81c, - (q31_t)0x761f82af, (q31_t)0x2228283f, (q31_t)0x7626368d, (q31_t)0x221d8711, - (q31_t)0x762ce855, (q31_t)0x2212e492, (q31_t)0x76339806, (q31_t)0x220840c2, - (q31_t)0x763a45a0, (q31_t)0x21fd9ba3, (q31_t)0x7640f123, (q31_t)0x21f2f534, - (q31_t)0x76479a8e, (q31_t)0x21e84d76, (q31_t)0x764e41e2, (q31_t)0x21dda46a, - (q31_t)0x7654e71d, (q31_t)0x21d2fa0f, (q31_t)0x765b8a41, (q31_t)0x21c84e67, - (q31_t)0x76622b4c, (q31_t)0x21bda171, (q31_t)0x7668ca3e, (q31_t)0x21b2f32e, - (q31_t)0x766f6717, (q31_t)0x21a8439e, (q31_t)0x767601d7, (q31_t)0x219d92c2, - (q31_t)0x767c9a7e, (q31_t)0x2192e09b, (q31_t)0x7683310b, (q31_t)0x21882d28, - (q31_t)0x7689c57d, (q31_t)0x217d786a, (q31_t)0x769057d6, (q31_t)0x2172c262, - (q31_t)0x7696e814, (q31_t)0x21680b0f, (q31_t)0x769d7637, (q31_t)0x215d5273, - (q31_t)0x76a4023f, (q31_t)0x2152988d, (q31_t)0x76aa8c2c, (q31_t)0x2147dd5f, - (q31_t)0x76b113fd, (q31_t)0x213d20e8, (q31_t)0x76b799b3, (q31_t)0x21326329, - (q31_t)0x76be1d4c, (q31_t)0x2127a423, (q31_t)0x76c49ec9, (q31_t)0x211ce3d5, - (q31_t)0x76cb1e2a, (q31_t)0x21122240, (q31_t)0x76d19b6e, (q31_t)0x21075f65, - (q31_t)0x76d81695, (q31_t)0x20fc9b44, (q31_t)0x76de8f9e, (q31_t)0x20f1d5de, - (q31_t)0x76e5068a, (q31_t)0x20e70f32, (q31_t)0x76eb7b58, (q31_t)0x20dc4742, - (q31_t)0x76f1ee09, (q31_t)0x20d17e0d, (q31_t)0x76f85e9a, (q31_t)0x20c6b395, - (q31_t)0x76fecd0e, (q31_t)0x20bbe7d8, (q31_t)0x77053962, (q31_t)0x20b11ad9, - (q31_t)0x770ba398, (q31_t)0x20a64c97, (q31_t)0x77120bae, (q31_t)0x209b7d13, - (q31_t)0x771871a5, (q31_t)0x2090ac4d, (q31_t)0x771ed57c, (q31_t)0x2085da46, - (q31_t)0x77253733, (q31_t)0x207b06fe, (q31_t)0x772b96ca, (q31_t)0x20703275, - (q31_t)0x7731f440, (q31_t)0x20655cac, (q31_t)0x77384f95, (q31_t)0x205a85a3, - (q31_t)0x773ea8ca, (q31_t)0x204fad5b, (q31_t)0x7744ffdd, (q31_t)0x2044d3d4, - (q31_t)0x774b54ce, (q31_t)0x2039f90f, (q31_t)0x7751a79e, (q31_t)0x202f1d0b, - (q31_t)0x7757f84c, (q31_t)0x20243fca, (q31_t)0x775e46d8, (q31_t)0x2019614c, - (q31_t)0x77649341, (q31_t)0x200e8190, (q31_t)0x776add88, (q31_t)0x2003a099, - (q31_t)0x777125ac, (q31_t)0x1ff8be65, (q31_t)0x77776bac, (q31_t)0x1feddaf6, - (q31_t)0x777daf89, (q31_t)0x1fe2f64c, (q31_t)0x7783f143, (q31_t)0x1fd81067, - (q31_t)0x778a30d8, (q31_t)0x1fcd2948, (q31_t)0x77906e49, (q31_t)0x1fc240ef, - (q31_t)0x7796a996, (q31_t)0x1fb7575c, (q31_t)0x779ce2be, (q31_t)0x1fac6c91, - (q31_t)0x77a319c2, (q31_t)0x1fa1808c, (q31_t)0x77a94ea0, (q31_t)0x1f969350, - (q31_t)0x77af8159, (q31_t)0x1f8ba4dc, (q31_t)0x77b5b1ec, (q31_t)0x1f80b531, - (q31_t)0x77bbe05a, (q31_t)0x1f75c44e, (q31_t)0x77c20ca1, (q31_t)0x1f6ad235, - (q31_t)0x77c836c2, (q31_t)0x1f5fdee6, (q31_t)0x77ce5ebd, (q31_t)0x1f54ea62, - (q31_t)0x77d48490, (q31_t)0x1f49f4a8, (q31_t)0x77daa83d, (q31_t)0x1f3efdb9, - (q31_t)0x77e0c9c3, (q31_t)0x1f340596, (q31_t)0x77e6e921, (q31_t)0x1f290c3f, - (q31_t)0x77ed0657, (q31_t)0x1f1e11b5, (q31_t)0x77f32165, (q31_t)0x1f1315f7, - (q31_t)0x77f93a4b, (q31_t)0x1f081907, (q31_t)0x77ff5109, (q31_t)0x1efd1ae4, - (q31_t)0x7805659e, (q31_t)0x1ef21b90, (q31_t)0x780b780a, (q31_t)0x1ee71b0a, - (q31_t)0x7811884d, (q31_t)0x1edc1953, (q31_t)0x78179666, (q31_t)0x1ed1166b, - (q31_t)0x781da256, (q31_t)0x1ec61254, (q31_t)0x7823ac1d, (q31_t)0x1ebb0d0d, - (q31_t)0x7829b3b9, (q31_t)0x1eb00696, (q31_t)0x782fb92a, (q31_t)0x1ea4fef0, - (q31_t)0x7835bc71, (q31_t)0x1e99f61d, (q31_t)0x783bbd8e, (q31_t)0x1e8eec1b, - (q31_t)0x7841bc7f, (q31_t)0x1e83e0eb, (q31_t)0x7847b946, (q31_t)0x1e78d48e, - (q31_t)0x784db3e0, (q31_t)0x1e6dc705, (q31_t)0x7853ac4f, (q31_t)0x1e62b84f, - (q31_t)0x7859a292, (q31_t)0x1e57a86d, (q31_t)0x785f96a9, (q31_t)0x1e4c9760, - (q31_t)0x78658894, (q31_t)0x1e418528, (q31_t)0x786b7852, (q31_t)0x1e3671c5, - (q31_t)0x787165e3, (q31_t)0x1e2b5d38, (q31_t)0x78775147, (q31_t)0x1e204781, - (q31_t)0x787d3a7e, (q31_t)0x1e1530a1, (q31_t)0x78832187, (q31_t)0x1e0a1898, - (q31_t)0x78890663, (q31_t)0x1dfeff67, (q31_t)0x788ee910, (q31_t)0x1df3e50d, - (q31_t)0x7894c98f, (q31_t)0x1de8c98c, (q31_t)0x789aa7e0, (q31_t)0x1dddace4, - (q31_t)0x78a08402, (q31_t)0x1dd28f15, (q31_t)0x78a65df6, (q31_t)0x1dc7701f, - (q31_t)0x78ac35ba, (q31_t)0x1dbc5004, (q31_t)0x78b20b4f, (q31_t)0x1db12ec3, - (q31_t)0x78b7deb4, (q31_t)0x1da60c5d, (q31_t)0x78bdafea, (q31_t)0x1d9ae8d2, - (q31_t)0x78c37eef, (q31_t)0x1d8fc424, (q31_t)0x78c94bc4, (q31_t)0x1d849e51, - (q31_t)0x78cf1669, (q31_t)0x1d79775c, (q31_t)0x78d4dedd, (q31_t)0x1d6e4f43, - (q31_t)0x78daa520, (q31_t)0x1d632608, (q31_t)0x78e06932, (q31_t)0x1d57fbaa, - (q31_t)0x78e62b13, (q31_t)0x1d4cd02c, (q31_t)0x78ebeac2, (q31_t)0x1d41a38c, - (q31_t)0x78f1a840, (q31_t)0x1d3675cb, (q31_t)0x78f7638b, (q31_t)0x1d2b46ea, - (q31_t)0x78fd1ca4, (q31_t)0x1d2016e9, (q31_t)0x7902d38b, (q31_t)0x1d14e5c9, - (q31_t)0x7908883f, (q31_t)0x1d09b389, (q31_t)0x790e3ac0, (q31_t)0x1cfe802b, - (q31_t)0x7913eb0e, (q31_t)0x1cf34baf, (q31_t)0x79199929, (q31_t)0x1ce81615, - (q31_t)0x791f4510, (q31_t)0x1cdcdf5e, (q31_t)0x7924eec3, (q31_t)0x1cd1a78a, - (q31_t)0x792a9642, (q31_t)0x1cc66e99, (q31_t)0x79303b8e, (q31_t)0x1cbb348d, - (q31_t)0x7935dea4, (q31_t)0x1caff965, (q31_t)0x793b7f86, (q31_t)0x1ca4bd21, - (q31_t)0x79411e33, (q31_t)0x1c997fc4, (q31_t)0x7946baac, (q31_t)0x1c8e414b, - (q31_t)0x794c54ee, (q31_t)0x1c8301b9, (q31_t)0x7951ecfc, (q31_t)0x1c77c10e, - (q31_t)0x795782d3, (q31_t)0x1c6c7f4a, (q31_t)0x795d1675, (q31_t)0x1c613c6d, - (q31_t)0x7962a7e0, (q31_t)0x1c55f878, (q31_t)0x79683715, (q31_t)0x1c4ab36b, - (q31_t)0x796dc414, (q31_t)0x1c3f6d47, (q31_t)0x79734edc, (q31_t)0x1c34260c, - (q31_t)0x7978d76c, (q31_t)0x1c28ddbb, (q31_t)0x797e5dc6, (q31_t)0x1c1d9454, - (q31_t)0x7983e1e8, (q31_t)0x1c1249d8, (q31_t)0x798963d2, (q31_t)0x1c06fe46, - (q31_t)0x798ee385, (q31_t)0x1bfbb1a0, (q31_t)0x799460ff, (q31_t)0x1bf063e6, - (q31_t)0x7999dc42, (q31_t)0x1be51518, (q31_t)0x799f554b, (q31_t)0x1bd9c537, - (q31_t)0x79a4cc1c, (q31_t)0x1bce7442, (q31_t)0x79aa40b4, (q31_t)0x1bc3223c, - (q31_t)0x79afb313, (q31_t)0x1bb7cf23, (q31_t)0x79b52339, (q31_t)0x1bac7af9, - (q31_t)0x79ba9125, (q31_t)0x1ba125bd, (q31_t)0x79bffcd7, (q31_t)0x1b95cf71, - (q31_t)0x79c5664f, (q31_t)0x1b8a7815, (q31_t)0x79cacd8d, (q31_t)0x1b7f1fa9, - (q31_t)0x79d03291, (q31_t)0x1b73c62d, (q31_t)0x79d5955a, (q31_t)0x1b686ba3, - (q31_t)0x79daf5e8, (q31_t)0x1b5d100a, (q31_t)0x79e0543c, (q31_t)0x1b51b363, - (q31_t)0x79e5b054, (q31_t)0x1b4655ae, (q31_t)0x79eb0a31, (q31_t)0x1b3af6ec, - (q31_t)0x79f061d2, (q31_t)0x1b2f971e, (q31_t)0x79f5b737, (q31_t)0x1b243643, - (q31_t)0x79fb0a60, (q31_t)0x1b18d45c, (q31_t)0x7a005b4d, (q31_t)0x1b0d716a, - (q31_t)0x7a05a9fd, (q31_t)0x1b020d6c, (q31_t)0x7a0af671, (q31_t)0x1af6a865, - (q31_t)0x7a1040a8, (q31_t)0x1aeb4253, (q31_t)0x7a1588a2, (q31_t)0x1adfdb37, - (q31_t)0x7a1ace5f, (q31_t)0x1ad47312, (q31_t)0x7a2011de, (q31_t)0x1ac909e5, - (q31_t)0x7a25531f, (q31_t)0x1abd9faf, (q31_t)0x7a2a9223, (q31_t)0x1ab23471, - (q31_t)0x7a2fcee8, (q31_t)0x1aa6c82b, (q31_t)0x7a350970, (q31_t)0x1a9b5adf, - (q31_t)0x7a3a41b9, (q31_t)0x1a8fec8c, (q31_t)0x7a3f77c3, (q31_t)0x1a847d33, - (q31_t)0x7a44ab8e, (q31_t)0x1a790cd4, (q31_t)0x7a49dd1a, (q31_t)0x1a6d9b70, - (q31_t)0x7a4f0c67, (q31_t)0x1a622907, (q31_t)0x7a543974, (q31_t)0x1a56b599, - (q31_t)0x7a596442, (q31_t)0x1a4b4128, (q31_t)0x7a5e8cd0, (q31_t)0x1a3fcbb3, - (q31_t)0x7a63b31d, (q31_t)0x1a34553b, (q31_t)0x7a68d72b, (q31_t)0x1a28ddc0, - (q31_t)0x7a6df8f8, (q31_t)0x1a1d6544, (q31_t)0x7a731884, (q31_t)0x1a11ebc5, - (q31_t)0x7a7835cf, (q31_t)0x1a067145, (q31_t)0x7a7d50da, (q31_t)0x19faf5c5, - (q31_t)0x7a8269a3, (q31_t)0x19ef7944, (q31_t)0x7a87802a, (q31_t)0x19e3fbc3, - (q31_t)0x7a8c9470, (q31_t)0x19d87d42, (q31_t)0x7a91a674, (q31_t)0x19ccfdc2, - (q31_t)0x7a96b636, (q31_t)0x19c17d44, (q31_t)0x7a9bc3b6, (q31_t)0x19b5fbc8, - (q31_t)0x7aa0cef3, (q31_t)0x19aa794d, (q31_t)0x7aa5d7ee, (q31_t)0x199ef5d6, - (q31_t)0x7aaadea6, (q31_t)0x19937161, (q31_t)0x7aafe31b, (q31_t)0x1987ebf0, - (q31_t)0x7ab4e54c, (q31_t)0x197c6584, (q31_t)0x7ab9e53a, (q31_t)0x1970de1b, - (q31_t)0x7abee2e5, (q31_t)0x196555b8, (q31_t)0x7ac3de4c, (q31_t)0x1959cc5a, - (q31_t)0x7ac8d76f, (q31_t)0x194e4201, (q31_t)0x7acdce4d, (q31_t)0x1942b6af, - (q31_t)0x7ad2c2e8, (q31_t)0x19372a64, (q31_t)0x7ad7b53d, (q31_t)0x192b9d1f, - (q31_t)0x7adca54e, (q31_t)0x19200ee3, (q31_t)0x7ae1931a, (q31_t)0x19147fae, - (q31_t)0x7ae67ea1, (q31_t)0x1908ef82, (q31_t)0x7aeb67e3, (q31_t)0x18fd5e5f, - (q31_t)0x7af04edf, (q31_t)0x18f1cc45, (q31_t)0x7af53395, (q31_t)0x18e63935, - (q31_t)0x7afa1605, (q31_t)0x18daa52f, (q31_t)0x7afef630, (q31_t)0x18cf1034, - (q31_t)0x7b03d414, (q31_t)0x18c37a44, (q31_t)0x7b08afb2, (q31_t)0x18b7e35f, - (q31_t)0x7b0d8909, (q31_t)0x18ac4b87, (q31_t)0x7b126019, (q31_t)0x18a0b2bb, - (q31_t)0x7b1734e2, (q31_t)0x189518fc, (q31_t)0x7b1c0764, (q31_t)0x18897e4a, - (q31_t)0x7b20d79e, (q31_t)0x187de2a7, (q31_t)0x7b25a591, (q31_t)0x18724611, - (q31_t)0x7b2a713d, (q31_t)0x1866a88a, (q31_t)0x7b2f3aa0, (q31_t)0x185b0a13, - (q31_t)0x7b3401bb, (q31_t)0x184f6aab, (q31_t)0x7b38c68e, (q31_t)0x1843ca53, - (q31_t)0x7b3d8918, (q31_t)0x1838290c, (q31_t)0x7b42495a, (q31_t)0x182c86d5, - (q31_t)0x7b470753, (q31_t)0x1820e3b0, (q31_t)0x7b4bc303, (q31_t)0x18153f9d, - (q31_t)0x7b507c69, (q31_t)0x18099a9c, (q31_t)0x7b553386, (q31_t)0x17fdf4ae, - (q31_t)0x7b59e85a, (q31_t)0x17f24dd3, (q31_t)0x7b5e9ae4, (q31_t)0x17e6a60c, - (q31_t)0x7b634b23, (q31_t)0x17dafd59, (q31_t)0x7b67f919, (q31_t)0x17cf53bb, - (q31_t)0x7b6ca4c4, (q31_t)0x17c3a931, (q31_t)0x7b714e25, (q31_t)0x17b7fdbd, - (q31_t)0x7b75f53c, (q31_t)0x17ac515f, (q31_t)0x7b7a9a07, (q31_t)0x17a0a417, - (q31_t)0x7b7f3c87, (q31_t)0x1794f5e6, (q31_t)0x7b83dcbc, (q31_t)0x178946cc, - (q31_t)0x7b887aa6, (q31_t)0x177d96ca, (q31_t)0x7b8d1644, (q31_t)0x1771e5e0, - (q31_t)0x7b91af97, (q31_t)0x1766340f, (q31_t)0x7b96469d, (q31_t)0x175a8157, - (q31_t)0x7b9adb57, (q31_t)0x174ecdb8, (q31_t)0x7b9f6dc5, (q31_t)0x17431933, - (q31_t)0x7ba3fde7, (q31_t)0x173763c9, (q31_t)0x7ba88bbc, (q31_t)0x172bad7a, - (q31_t)0x7bad1744, (q31_t)0x171ff646, (q31_t)0x7bb1a080, (q31_t)0x17143e2d, - (q31_t)0x7bb6276e, (q31_t)0x17088531, (q31_t)0x7bbaac0e, (q31_t)0x16fccb51, - (q31_t)0x7bbf2e62, (q31_t)0x16f1108f, (q31_t)0x7bc3ae67, (q31_t)0x16e554ea, - (q31_t)0x7bc82c1f, (q31_t)0x16d99864, (q31_t)0x7bcca789, (q31_t)0x16cddafb, - (q31_t)0x7bd120a4, (q31_t)0x16c21cb2, (q31_t)0x7bd59771, (q31_t)0x16b65d88, - (q31_t)0x7bda0bf0, (q31_t)0x16aa9d7e, (q31_t)0x7bde7e20, (q31_t)0x169edc94, - (q31_t)0x7be2ee01, (q31_t)0x16931acb, (q31_t)0x7be75b93, (q31_t)0x16875823, - (q31_t)0x7bebc6d5, (q31_t)0x167b949d, (q31_t)0x7bf02fc9, (q31_t)0x166fd039, - (q31_t)0x7bf4966c, (q31_t)0x16640af7, (q31_t)0x7bf8fac0, (q31_t)0x165844d8, - (q31_t)0x7bfd5cc4, (q31_t)0x164c7ddd, (q31_t)0x7c01bc78, (q31_t)0x1640b606, - (q31_t)0x7c0619dc, (q31_t)0x1634ed53, (q31_t)0x7c0a74f0, (q31_t)0x162923c5, - (q31_t)0x7c0ecdb2, (q31_t)0x161d595d, (q31_t)0x7c132424, (q31_t)0x16118e1a, - (q31_t)0x7c177845, (q31_t)0x1605c1fd, (q31_t)0x7c1bca16, (q31_t)0x15f9f507, - (q31_t)0x7c201994, (q31_t)0x15ee2738, (q31_t)0x7c2466c2, (q31_t)0x15e25890, - (q31_t)0x7c28b19e, (q31_t)0x15d68911, (q31_t)0x7c2cfa28, (q31_t)0x15cab8ba, - (q31_t)0x7c314060, (q31_t)0x15bee78c, (q31_t)0x7c358446, (q31_t)0x15b31587, - (q31_t)0x7c39c5da, (q31_t)0x15a742ac, (q31_t)0x7c3e051b, (q31_t)0x159b6efb, - (q31_t)0x7c42420a, (q31_t)0x158f9a76, (q31_t)0x7c467ca6, (q31_t)0x1583c51b, - (q31_t)0x7c4ab4ef, (q31_t)0x1577eeec, (q31_t)0x7c4eeae5, (q31_t)0x156c17e9, - (q31_t)0x7c531e88, (q31_t)0x15604013, (q31_t)0x7c574fd8, (q31_t)0x1554676a, - (q31_t)0x7c5b7ed4, (q31_t)0x15488dee, (q31_t)0x7c5fab7c, (q31_t)0x153cb3a0, - (q31_t)0x7c63d5d1, (q31_t)0x1530d881, (q31_t)0x7c67fdd1, (q31_t)0x1524fc90, - (q31_t)0x7c6c237e, (q31_t)0x15191fcf, (q31_t)0x7c7046d6, (q31_t)0x150d423d, - (q31_t)0x7c7467d9, (q31_t)0x150163dc, (q31_t)0x7c788688, (q31_t)0x14f584ac, - (q31_t)0x7c7ca2e2, (q31_t)0x14e9a4ac, (q31_t)0x7c80bce7, (q31_t)0x14ddc3de, - (q31_t)0x7c84d496, (q31_t)0x14d1e242, (q31_t)0x7c88e9f1, (q31_t)0x14c5ffd9, - (q31_t)0x7c8cfcf6, (q31_t)0x14ba1ca3, (q31_t)0x7c910da5, (q31_t)0x14ae38a0, - (q31_t)0x7c951bff, (q31_t)0x14a253d1, (q31_t)0x7c992803, (q31_t)0x14966e36, - (q31_t)0x7c9d31b0, (q31_t)0x148a87d1, (q31_t)0x7ca13908, (q31_t)0x147ea0a0, - (q31_t)0x7ca53e09, (q31_t)0x1472b8a5, (q31_t)0x7ca940b3, (q31_t)0x1466cfe1, - (q31_t)0x7cad4107, (q31_t)0x145ae653, (q31_t)0x7cb13f04, (q31_t)0x144efbfc, - (q31_t)0x7cb53aaa, (q31_t)0x144310dd, (q31_t)0x7cb933f9, (q31_t)0x143724f5, - (q31_t)0x7cbd2af0, (q31_t)0x142b3846, (q31_t)0x7cc11f90, (q31_t)0x141f4ad1, - (q31_t)0x7cc511d9, (q31_t)0x14135c94, (q31_t)0x7cc901c9, (q31_t)0x14076d91, - (q31_t)0x7cccef62, (q31_t)0x13fb7dc9, (q31_t)0x7cd0daa2, (q31_t)0x13ef8d3c, - (q31_t)0x7cd4c38b, (q31_t)0x13e39be9, (q31_t)0x7cd8aa1b, (q31_t)0x13d7a9d3, - (q31_t)0x7cdc8e52, (q31_t)0x13cbb6f8, (q31_t)0x7ce07031, (q31_t)0x13bfc35b, - (q31_t)0x7ce44fb7, (q31_t)0x13b3cefa, (q31_t)0x7ce82ce4, (q31_t)0x13a7d9d7, - (q31_t)0x7cec07b8, (q31_t)0x139be3f2, (q31_t)0x7cefe032, (q31_t)0x138fed4b, - (q31_t)0x7cf3b653, (q31_t)0x1383f5e3, (q31_t)0x7cf78a1b, (q31_t)0x1377fdbb, - (q31_t)0x7cfb5b89, (q31_t)0x136c04d2, (q31_t)0x7cff2a9d, (q31_t)0x13600b2a, - (q31_t)0x7d02f757, (q31_t)0x135410c3, (q31_t)0x7d06c1b6, (q31_t)0x1348159d, - (q31_t)0x7d0a89bc, (q31_t)0x133c19b8, (q31_t)0x7d0e4f67, (q31_t)0x13301d16, - (q31_t)0x7d1212b7, (q31_t)0x13241fb6, (q31_t)0x7d15d3ad, (q31_t)0x1318219a, - (q31_t)0x7d199248, (q31_t)0x130c22c1, (q31_t)0x7d1d4e88, (q31_t)0x1300232c, - (q31_t)0x7d21086c, (q31_t)0x12f422db, (q31_t)0x7d24bff6, (q31_t)0x12e821cf, - (q31_t)0x7d287523, (q31_t)0x12dc2009, (q31_t)0x7d2c27f6, (q31_t)0x12d01d89, - (q31_t)0x7d2fd86c, (q31_t)0x12c41a4f, (q31_t)0x7d338687, (q31_t)0x12b8165b, - (q31_t)0x7d373245, (q31_t)0x12ac11af, (q31_t)0x7d3adba7, (q31_t)0x12a00c4b, - (q31_t)0x7d3e82ae, (q31_t)0x1294062f, (q31_t)0x7d422757, (q31_t)0x1287ff5b, - (q31_t)0x7d45c9a4, (q31_t)0x127bf7d1, (q31_t)0x7d496994, (q31_t)0x126fef90, - (q31_t)0x7d4d0728, (q31_t)0x1263e699, (q31_t)0x7d50a25e, (q31_t)0x1257dced, - (q31_t)0x7d543b37, (q31_t)0x124bd28c, (q31_t)0x7d57d1b3, (q31_t)0x123fc776, - (q31_t)0x7d5b65d2, (q31_t)0x1233bbac, (q31_t)0x7d5ef793, (q31_t)0x1227af2e, - (q31_t)0x7d6286f6, (q31_t)0x121ba1fd, (q31_t)0x7d6613fb, (q31_t)0x120f941a, - (q31_t)0x7d699ea3, (q31_t)0x12038584, (q31_t)0x7d6d26ec, (q31_t)0x11f7763c, - (q31_t)0x7d70acd7, (q31_t)0x11eb6643, (q31_t)0x7d743064, (q31_t)0x11df5599, - (q31_t)0x7d77b192, (q31_t)0x11d3443f, (q31_t)0x7d7b3061, (q31_t)0x11c73235, - (q31_t)0x7d7eacd2, (q31_t)0x11bb1f7c, (q31_t)0x7d8226e4, (q31_t)0x11af0c13, - (q31_t)0x7d859e96, (q31_t)0x11a2f7fc, (q31_t)0x7d8913ea, (q31_t)0x1196e337, - (q31_t)0x7d8c86de, (q31_t)0x118acdc4, (q31_t)0x7d8ff772, (q31_t)0x117eb7a4, - (q31_t)0x7d9365a8, (q31_t)0x1172a0d7, (q31_t)0x7d96d17d, (q31_t)0x1166895f, - (q31_t)0x7d9a3af2, (q31_t)0x115a713a, (q31_t)0x7d9da208, (q31_t)0x114e586a, - (q31_t)0x7da106bd, (q31_t)0x11423ef0, (q31_t)0x7da46912, (q31_t)0x113624cb, - (q31_t)0x7da7c907, (q31_t)0x112a09fc, (q31_t)0x7dab269b, (q31_t)0x111dee84, - (q31_t)0x7dae81cf, (q31_t)0x1111d263, (q31_t)0x7db1daa2, (q31_t)0x1105b599, - (q31_t)0x7db53113, (q31_t)0x10f99827, (q31_t)0x7db88524, (q31_t)0x10ed7a0e, - (q31_t)0x7dbbd6d4, (q31_t)0x10e15b4e, (q31_t)0x7dbf2622, (q31_t)0x10d53be7, - (q31_t)0x7dc2730f, (q31_t)0x10c91bda, (q31_t)0x7dc5bd9b, (q31_t)0x10bcfb28, - (q31_t)0x7dc905c5, (q31_t)0x10b0d9d0, (q31_t)0x7dcc4b8d, (q31_t)0x10a4b7d3, - (q31_t)0x7dcf8ef3, (q31_t)0x10989532, (q31_t)0x7dd2cff7, (q31_t)0x108c71ee, - (q31_t)0x7dd60e99, (q31_t)0x10804e06, (q31_t)0x7dd94ad8, (q31_t)0x1074297b, - (q31_t)0x7ddc84b5, (q31_t)0x1068044e, (q31_t)0x7ddfbc30, (q31_t)0x105bde7f, - (q31_t)0x7de2f148, (q31_t)0x104fb80e, (q31_t)0x7de623fd, (q31_t)0x104390fd, - (q31_t)0x7de9544f, (q31_t)0x1037694b, (q31_t)0x7dec823e, (q31_t)0x102b40f8, - (q31_t)0x7defadca, (q31_t)0x101f1807, (q31_t)0x7df2d6f3, (q31_t)0x1012ee76, - (q31_t)0x7df5fdb8, (q31_t)0x1006c446, (q31_t)0x7df9221a, (q31_t)0xffa9979, - (q31_t)0x7dfc4418, (q31_t)0xfee6e0d, (q31_t)0x7dff63b2, (q31_t)0xfe24205, - (q31_t)0x7e0280e9, (q31_t)0xfd6155f, (q31_t)0x7e059bbb, (q31_t)0xfc9e81e, - (q31_t)0x7e08b42a, (q31_t)0xfbdba40, (q31_t)0x7e0bca34, (q31_t)0xfb18bc8, - (q31_t)0x7e0eddd9, (q31_t)0xfa55cb4, (q31_t)0x7e11ef1b, (q31_t)0xf992d06, - (q31_t)0x7e14fdf7, (q31_t)0xf8cfcbe, (q31_t)0x7e180a6f, (q31_t)0xf80cbdc, - (q31_t)0x7e1b1482, (q31_t)0xf749a61, (q31_t)0x7e1e1c30, (q31_t)0xf68684e, - (q31_t)0x7e212179, (q31_t)0xf5c35a3, (q31_t)0x7e24245d, (q31_t)0xf500260, - (q31_t)0x7e2724db, (q31_t)0xf43ce86, (q31_t)0x7e2a22f4, (q31_t)0xf379a16, - (q31_t)0x7e2d1ea8, (q31_t)0xf2b650f, (q31_t)0x7e3017f6, (q31_t)0xf1f2f73, - (q31_t)0x7e330ede, (q31_t)0xf12f941, (q31_t)0x7e360360, (q31_t)0xf06c27a, - (q31_t)0x7e38f57c, (q31_t)0xefa8b20, (q31_t)0x7e3be532, (q31_t)0xeee5331, - (q31_t)0x7e3ed282, (q31_t)0xee21aaf, (q31_t)0x7e41bd6c, (q31_t)0xed5e19a, - (q31_t)0x7e44a5ef, (q31_t)0xec9a7f3, (q31_t)0x7e478c0b, (q31_t)0xebd6db9, - (q31_t)0x7e4a6fc1, (q31_t)0xeb132ef, (q31_t)0x7e4d5110, (q31_t)0xea4f793, - (q31_t)0x7e502ff9, (q31_t)0xe98bba7, (q31_t)0x7e530c7a, (q31_t)0xe8c7f2a, - (q31_t)0x7e55e694, (q31_t)0xe80421e, (q31_t)0x7e58be47, (q31_t)0xe740483, - (q31_t)0x7e5b9392, (q31_t)0xe67c65a, (q31_t)0x7e5e6676, (q31_t)0xe5b87a2, - (q31_t)0x7e6136f3, (q31_t)0xe4f485c, (q31_t)0x7e640507, (q31_t)0xe430889, - (q31_t)0x7e66d0b4, (q31_t)0xe36c82a, (q31_t)0x7e6999fa, (q31_t)0xe2a873e, - (q31_t)0x7e6c60d7, (q31_t)0xe1e45c6, (q31_t)0x7e6f254c, (q31_t)0xe1203c3, - (q31_t)0x7e71e759, (q31_t)0xe05c135, (q31_t)0x7e74a6fd, (q31_t)0xdf97e1d, - (q31_t)0x7e77643a, (q31_t)0xded3a7b, (q31_t)0x7e7a1f0d, (q31_t)0xde0f64f, - (q31_t)0x7e7cd778, (q31_t)0xdd4b19a, (q31_t)0x7e7f8d7b, (q31_t)0xdc86c5d, - (q31_t)0x7e824114, (q31_t)0xdbc2698, (q31_t)0x7e84f245, (q31_t)0xdafe04b, - (q31_t)0x7e87a10c, (q31_t)0xda39978, (q31_t)0x7e8a4d6a, (q31_t)0xd97521d, - (q31_t)0x7e8cf75f, (q31_t)0xd8b0a3d, (q31_t)0x7e8f9eeb, (q31_t)0xd7ec1d6, - (q31_t)0x7e92440d, (q31_t)0xd7278eb, (q31_t)0x7e94e6c6, (q31_t)0xd662f7b, - (q31_t)0x7e978715, (q31_t)0xd59e586, (q31_t)0x7e9a24fb, (q31_t)0xd4d9b0e, - (q31_t)0x7e9cc076, (q31_t)0xd415013, (q31_t)0x7e9f5988, (q31_t)0xd350495, - (q31_t)0x7ea1f02f, (q31_t)0xd28b894, (q31_t)0x7ea4846c, (q31_t)0xd1c6c11, - (q31_t)0x7ea7163f, (q31_t)0xd101f0e, (q31_t)0x7ea9a5a8, (q31_t)0xd03d189, - (q31_t)0x7eac32a6, (q31_t)0xcf78383, (q31_t)0x7eaebd3a, (q31_t)0xceb34fe, - (q31_t)0x7eb14563, (q31_t)0xcdee5f9, (q31_t)0x7eb3cb21, (q31_t)0xcd29676, - (q31_t)0x7eb64e75, (q31_t)0xcc64673, (q31_t)0x7eb8cf5d, (q31_t)0xcb9f5f3, - (q31_t)0x7ebb4ddb, (q31_t)0xcada4f5, (q31_t)0x7ebdc9ed, (q31_t)0xca1537a, - (q31_t)0x7ec04394, (q31_t)0xc950182, (q31_t)0x7ec2bad0, (q31_t)0xc88af0e, - (q31_t)0x7ec52fa0, (q31_t)0xc7c5c1e, (q31_t)0x7ec7a205, (q31_t)0xc7008b3, - (q31_t)0x7eca11fe, (q31_t)0xc63b4ce, (q31_t)0x7ecc7f8b, (q31_t)0xc57606e, - (q31_t)0x7eceeaad, (q31_t)0xc4b0b94, (q31_t)0x7ed15363, (q31_t)0xc3eb641, - (q31_t)0x7ed3b9ad, (q31_t)0xc326075, (q31_t)0x7ed61d8a, (q31_t)0xc260a31, - (q31_t)0x7ed87efc, (q31_t)0xc19b374, (q31_t)0x7edade01, (q31_t)0xc0d5c41, - (q31_t)0x7edd3a9a, (q31_t)0xc010496, (q31_t)0x7edf94c7, (q31_t)0xbf4ac75, - (q31_t)0x7ee1ec87, (q31_t)0xbe853de, (q31_t)0x7ee441da, (q31_t)0xbdbfad1, - (q31_t)0x7ee694c1, (q31_t)0xbcfa150, (q31_t)0x7ee8e53a, (q31_t)0xbc34759, - (q31_t)0x7eeb3347, (q31_t)0xbb6ecef, (q31_t)0x7eed7ee7, (q31_t)0xbaa9211, - (q31_t)0x7eefc81a, (q31_t)0xb9e36c0, (q31_t)0x7ef20ee0, (q31_t)0xb91dafc, - (q31_t)0x7ef45338, (q31_t)0xb857ec7, (q31_t)0x7ef69523, (q31_t)0xb79221f, - (q31_t)0x7ef8d4a1, (q31_t)0xb6cc506, (q31_t)0x7efb11b1, (q31_t)0xb60677c, - (q31_t)0x7efd4c54, (q31_t)0xb540982, (q31_t)0x7eff8489, (q31_t)0xb47ab19, - (q31_t)0x7f01ba50, (q31_t)0xb3b4c40, (q31_t)0x7f03eda9, (q31_t)0xb2eecf8, - (q31_t)0x7f061e95, (q31_t)0xb228d42, (q31_t)0x7f084d12, (q31_t)0xb162d1d, - (q31_t)0x7f0a7921, (q31_t)0xb09cc8c, (q31_t)0x7f0ca2c2, (q31_t)0xafd6b8d, - (q31_t)0x7f0ec9f5, (q31_t)0xaf10a22, (q31_t)0x7f10eeb9, (q31_t)0xae4a84b, - (q31_t)0x7f13110f, (q31_t)0xad84609, (q31_t)0x7f1530f7, (q31_t)0xacbe35b, - (q31_t)0x7f174e70, (q31_t)0xabf8043, (q31_t)0x7f19697a, (q31_t)0xab31cc1, - (q31_t)0x7f1b8215, (q31_t)0xaa6b8d5, (q31_t)0x7f1d9842, (q31_t)0xa9a5480, - (q31_t)0x7f1fabff, (q31_t)0xa8defc3, (q31_t)0x7f21bd4e, (q31_t)0xa818a9d, - (q31_t)0x7f23cc2e, (q31_t)0xa752510, (q31_t)0x7f25d89e, (q31_t)0xa68bf1b, - (q31_t)0x7f27e29f, (q31_t)0xa5c58c0, (q31_t)0x7f29ea31, (q31_t)0xa4ff1fe, - (q31_t)0x7f2bef53, (q31_t)0xa438ad7, (q31_t)0x7f2df206, (q31_t)0xa37234a, - (q31_t)0x7f2ff24a, (q31_t)0xa2abb59, (q31_t)0x7f31f01d, (q31_t)0xa1e5303, - (q31_t)0x7f33eb81, (q31_t)0xa11ea49, (q31_t)0x7f35e476, (q31_t)0xa05812c, - (q31_t)0x7f37dafa, (q31_t)0x9f917ac, (q31_t)0x7f39cf0e, (q31_t)0x9ecadc9, - (q31_t)0x7f3bc0b3, (q31_t)0x9e04385, (q31_t)0x7f3dafe7, (q31_t)0x9d3d8df, - (q31_t)0x7f3f9cab, (q31_t)0x9c76dd8, (q31_t)0x7f4186ff, (q31_t)0x9bb0271, - (q31_t)0x7f436ee3, (q31_t)0x9ae96aa, (q31_t)0x7f455456, (q31_t)0x9a22a83, - (q31_t)0x7f473759, (q31_t)0x995bdfd, (q31_t)0x7f4917eb, (q31_t)0x9895118, - (q31_t)0x7f4af60d, (q31_t)0x97ce3d5, (q31_t)0x7f4cd1be, (q31_t)0x9707635, - (q31_t)0x7f4eaafe, (q31_t)0x9640837, (q31_t)0x7f5081cd, (q31_t)0x95799dd, - (q31_t)0x7f52562c, (q31_t)0x94b2b27, (q31_t)0x7f54281a, (q31_t)0x93ebc14, - (q31_t)0x7f55f796, (q31_t)0x9324ca7, (q31_t)0x7f57c4a2, (q31_t)0x925dcdf, - (q31_t)0x7f598f3c, (q31_t)0x9196cbc, (q31_t)0x7f5b5765, (q31_t)0x90cfc40, - (q31_t)0x7f5d1d1d, (q31_t)0x9008b6a, (q31_t)0x7f5ee063, (q31_t)0x8f41a3c, - (q31_t)0x7f60a138, (q31_t)0x8e7a8b5, (q31_t)0x7f625f9b, (q31_t)0x8db36d6, - (q31_t)0x7f641b8d, (q31_t)0x8cec4a0, (q31_t)0x7f65d50d, (q31_t)0x8c25213, - (q31_t)0x7f678c1c, (q31_t)0x8b5df30, (q31_t)0x7f6940b8, (q31_t)0x8a96bf6, - (q31_t)0x7f6af2e3, (q31_t)0x89cf867, (q31_t)0x7f6ca29c, (q31_t)0x8908483, - (q31_t)0x7f6e4fe3, (q31_t)0x884104b, (q31_t)0x7f6ffab8, (q31_t)0x8779bbe, - (q31_t)0x7f71a31b, (q31_t)0x86b26de, (q31_t)0x7f73490b, (q31_t)0x85eb1ab, - (q31_t)0x7f74ec8a, (q31_t)0x8523c25, (q31_t)0x7f768d96, (q31_t)0x845c64d, - (q31_t)0x7f782c30, (q31_t)0x8395024, (q31_t)0x7f79c857, (q31_t)0x82cd9a9, - (q31_t)0x7f7b620c, (q31_t)0x82062de, (q31_t)0x7f7cf94e, (q31_t)0x813ebc2, - (q31_t)0x7f7e8e1e, (q31_t)0x8077457, (q31_t)0x7f80207b, (q31_t)0x7fafc9c, - (q31_t)0x7f81b065, (q31_t)0x7ee8493, (q31_t)0x7f833ddd, (q31_t)0x7e20c3b, - (q31_t)0x7f84c8e2, (q31_t)0x7d59396, (q31_t)0x7f865174, (q31_t)0x7c91aa3, - (q31_t)0x7f87d792, (q31_t)0x7bca163, (q31_t)0x7f895b3e, (q31_t)0x7b027d7, - (q31_t)0x7f8adc77, (q31_t)0x7a3adff, (q31_t)0x7f8c5b3d, (q31_t)0x79733dc, - (q31_t)0x7f8dd78f, (q31_t)0x78ab96e, (q31_t)0x7f8f516e, (q31_t)0x77e3eb5, - (q31_t)0x7f90c8da, (q31_t)0x771c3b3, (q31_t)0x7f923dd2, (q31_t)0x7654867, - (q31_t)0x7f93b058, (q31_t)0x758ccd2, (q31_t)0x7f952069, (q31_t)0x74c50f4, - (q31_t)0x7f968e07, (q31_t)0x73fd4cf, (q31_t)0x7f97f932, (q31_t)0x7335862, - (q31_t)0x7f9961e8, (q31_t)0x726dbae, (q31_t)0x7f9ac82c, (q31_t)0x71a5eb3, - (q31_t)0x7f9c2bfb, (q31_t)0x70de172, (q31_t)0x7f9d8d56, (q31_t)0x70163eb, - (q31_t)0x7f9eec3e, (q31_t)0x6f4e620, (q31_t)0x7fa048b2, (q31_t)0x6e86810, - (q31_t)0x7fa1a2b2, (q31_t)0x6dbe9bb, (q31_t)0x7fa2fa3d, (q31_t)0x6cf6b23, - (q31_t)0x7fa44f55, (q31_t)0x6c2ec48, (q31_t)0x7fa5a1f9, (q31_t)0x6b66d29, - (q31_t)0x7fa6f228, (q31_t)0x6a9edc9, (q31_t)0x7fa83fe3, (q31_t)0x69d6e27, - (q31_t)0x7fa98b2a, (q31_t)0x690ee44, (q31_t)0x7faad3fd, (q31_t)0x6846e1f, - (q31_t)0x7fac1a5b, (q31_t)0x677edbb, (q31_t)0x7fad5e45, (q31_t)0x66b6d16, - (q31_t)0x7fae9fbb, (q31_t)0x65eec33, (q31_t)0x7fafdebb, (q31_t)0x6526b10, - (q31_t)0x7fb11b48, (q31_t)0x645e9af, (q31_t)0x7fb2555f, (q31_t)0x6396810, - (q31_t)0x7fb38d02, (q31_t)0x62ce634, (q31_t)0x7fb4c231, (q31_t)0x620641a, - (q31_t)0x7fb5f4ea, (q31_t)0x613e1c5, (q31_t)0x7fb7252f, (q31_t)0x6075f33, - (q31_t)0x7fb852ff, (q31_t)0x5fadc66, (q31_t)0x7fb97e5a, (q31_t)0x5ee595d, - (q31_t)0x7fbaa740, (q31_t)0x5e1d61b, (q31_t)0x7fbbcdb1, (q31_t)0x5d5529e, - (q31_t)0x7fbcf1ad, (q31_t)0x5c8cee7, (q31_t)0x7fbe1334, (q31_t)0x5bc4af8, - (q31_t)0x7fbf3246, (q31_t)0x5afc6d0, (q31_t)0x7fc04ee3, (q31_t)0x5a3426f, - (q31_t)0x7fc1690a, (q31_t)0x596bdd7, (q31_t)0x7fc280bc, (q31_t)0x58a3908, - (q31_t)0x7fc395f9, (q31_t)0x57db403, (q31_t)0x7fc4a8c1, (q31_t)0x5712ec7, - (q31_t)0x7fc5b913, (q31_t)0x564a955, (q31_t)0x7fc6c6f0, (q31_t)0x55823ae, - (q31_t)0x7fc7d258, (q31_t)0x54b9dd3, (q31_t)0x7fc8db4a, (q31_t)0x53f17c3, - (q31_t)0x7fc9e1c6, (q31_t)0x532917f, (q31_t)0x7fcae5cd, (q31_t)0x5260b08, - (q31_t)0x7fcbe75e, (q31_t)0x519845e, (q31_t)0x7fcce67a, (q31_t)0x50cfd82, - (q31_t)0x7fcde320, (q31_t)0x5007674, (q31_t)0x7fcedd50, (q31_t)0x4f3ef35, - (q31_t)0x7fcfd50b, (q31_t)0x4e767c5, (q31_t)0x7fd0ca4f, (q31_t)0x4dae024, - (q31_t)0x7fd1bd1e, (q31_t)0x4ce5854, (q31_t)0x7fd2ad77, (q31_t)0x4c1d054, - (q31_t)0x7fd39b5a, (q31_t)0x4b54825, (q31_t)0x7fd486c7, (q31_t)0x4a8bfc7, - (q31_t)0x7fd56fbe, (q31_t)0x49c373c, (q31_t)0x7fd6563f, (q31_t)0x48fae83, - (q31_t)0x7fd73a4a, (q31_t)0x483259d, (q31_t)0x7fd81bdf, (q31_t)0x4769c8b, - (q31_t)0x7fd8fafe, (q31_t)0x46a134c, (q31_t)0x7fd9d7a7, (q31_t)0x45d89e2, - (q31_t)0x7fdab1d9, (q31_t)0x451004d, (q31_t)0x7fdb8996, (q31_t)0x444768d, - (q31_t)0x7fdc5edc, (q31_t)0x437eca4, (q31_t)0x7fdd31ac, (q31_t)0x42b6290, - (q31_t)0x7fde0205, (q31_t)0x41ed854, (q31_t)0x7fdecfe8, (q31_t)0x4124dee, - (q31_t)0x7fdf9b55, (q31_t)0x405c361, (q31_t)0x7fe0644b, (q31_t)0x3f938ac, - (q31_t)0x7fe12acb, (q31_t)0x3ecadcf, (q31_t)0x7fe1eed5, (q31_t)0x3e022cc, - (q31_t)0x7fe2b067, (q31_t)0x3d397a3, (q31_t)0x7fe36f84, (q31_t)0x3c70c54, - (q31_t)0x7fe42c2a, (q31_t)0x3ba80df, (q31_t)0x7fe4e659, (q31_t)0x3adf546, - (q31_t)0x7fe59e12, (q31_t)0x3a16988, (q31_t)0x7fe65354, (q31_t)0x394dda7, - (q31_t)0x7fe7061f, (q31_t)0x38851a2, (q31_t)0x7fe7b674, (q31_t)0x37bc57b, - (q31_t)0x7fe86452, (q31_t)0x36f3931, (q31_t)0x7fe90fb9, (q31_t)0x362acc5, - (q31_t)0x7fe9b8a9, (q31_t)0x3562038, (q31_t)0x7fea5f23, (q31_t)0x3499389, - (q31_t)0x7feb0326, (q31_t)0x33d06bb, (q31_t)0x7feba4b2, (q31_t)0x33079cc, - (q31_t)0x7fec43c7, (q31_t)0x323ecbe, (q31_t)0x7fece065, (q31_t)0x3175f91, - (q31_t)0x7fed7a8c, (q31_t)0x30ad245, (q31_t)0x7fee123d, (q31_t)0x2fe44dc, - (q31_t)0x7feea776, (q31_t)0x2f1b755, (q31_t)0x7fef3a39, (q31_t)0x2e529b0, - (q31_t)0x7fefca84, (q31_t)0x2d89bf0, (q31_t)0x7ff05858, (q31_t)0x2cc0e13, - (q31_t)0x7ff0e3b6, (q31_t)0x2bf801a, (q31_t)0x7ff16c9c, (q31_t)0x2b2f207, - (q31_t)0x7ff1f30b, (q31_t)0x2a663d8, (q31_t)0x7ff27703, (q31_t)0x299d590, - (q31_t)0x7ff2f884, (q31_t)0x28d472e, (q31_t)0x7ff3778e, (q31_t)0x280b8b3, - (q31_t)0x7ff3f420, (q31_t)0x2742a1f, (q31_t)0x7ff46e3c, (q31_t)0x2679b73, - (q31_t)0x7ff4e5e0, (q31_t)0x25b0caf, (q31_t)0x7ff55b0d, (q31_t)0x24e7dd4, - (q31_t)0x7ff5cdc3, (q31_t)0x241eee2, (q31_t)0x7ff63e01, (q31_t)0x2355fd9, - (q31_t)0x7ff6abc8, (q31_t)0x228d0bb, (q31_t)0x7ff71718, (q31_t)0x21c4188, - (q31_t)0x7ff77ff1, (q31_t)0x20fb240, (q31_t)0x7ff7e652, (q31_t)0x20322e3, - (q31_t)0x7ff84a3c, (q31_t)0x1f69373, (q31_t)0x7ff8abae, (q31_t)0x1ea03ef, - (q31_t)0x7ff90aaa, (q31_t)0x1dd7459, (q31_t)0x7ff9672d, (q31_t)0x1d0e4b0, - (q31_t)0x7ff9c13a, (q31_t)0x1c454f5, (q31_t)0x7ffa18cf, (q31_t)0x1b7c528, - (q31_t)0x7ffa6dec, (q31_t)0x1ab354b, (q31_t)0x7ffac092, (q31_t)0x19ea55d, - (q31_t)0x7ffb10c1, (q31_t)0x192155f, (q31_t)0x7ffb5e78, (q31_t)0x1858552, - (q31_t)0x7ffba9b8, (q31_t)0x178f536, (q31_t)0x7ffbf280, (q31_t)0x16c650b, - (q31_t)0x7ffc38d1, (q31_t)0x15fd4d2, (q31_t)0x7ffc7caa, (q31_t)0x153448c, - (q31_t)0x7ffcbe0c, (q31_t)0x146b438, (q31_t)0x7ffcfcf6, (q31_t)0x13a23d8, - (q31_t)0x7ffd3969, (q31_t)0x12d936c, (q31_t)0x7ffd7364, (q31_t)0x12102f4, - (q31_t)0x7ffdaae7, (q31_t)0x1147271, (q31_t)0x7ffddff3, (q31_t)0x107e1e3, - (q31_t)0x7ffe1288, (q31_t)0xfb514b, (q31_t)0x7ffe42a4, (q31_t)0xeec0aa, - (q31_t)0x7ffe704a, (q31_t)0xe22fff, (q31_t)0x7ffe9b77, (q31_t)0xd59f4c, - (q31_t)0x7ffec42d, (q31_t)0xc90e90, (q31_t)0x7ffeea6c, (q31_t)0xbc7dcc, - (q31_t)0x7fff0e32, (q31_t)0xafed02, (q31_t)0x7fff2f82, (q31_t)0xa35c30, - (q31_t)0x7fff4e59, (q31_t)0x96cb58, (q31_t)0x7fff6ab9, (q31_t)0x8a3a7b, - (q31_t)0x7fff84a1, (q31_t)0x7da998, (q31_t)0x7fff9c12, (q31_t)0x7118b0, - (q31_t)0x7fffb10b, (q31_t)0x6487c4, (q31_t)0x7fffc38c, (q31_t)0x57f6d4, - (q31_t)0x7fffd396, (q31_t)0x4b65e1, (q31_t)0x7fffe128, (q31_t)0x3ed4ea, - (q31_t)0x7fffec43, (q31_t)0x3243f1, (q31_t)0x7ffff4e6, (q31_t)0x25b2f7, - (q31_t)0x7ffffb11, (q31_t)0x1921fb, (q31_t)0x7ffffec4, (q31_t)0xc90fe, - (q31_t)0x7fffffff, (q31_t)0x0, (q31_t)0x7ffffec4, (q31_t)0xfff36f02, - (q31_t)0x7ffffb11, (q31_t)0xffe6de05, (q31_t)0x7ffff4e6, (q31_t)0xffda4d09, - (q31_t)0x7fffec43, (q31_t)0xffcdbc0f, (q31_t)0x7fffe128, (q31_t)0xffc12b16, - (q31_t)0x7fffd396, (q31_t)0xffb49a1f, (q31_t)0x7fffc38c, (q31_t)0xffa8092c, - (q31_t)0x7fffb10b, (q31_t)0xff9b783c, (q31_t)0x7fff9c12, (q31_t)0xff8ee750, - (q31_t)0x7fff84a1, (q31_t)0xff825668, (q31_t)0x7fff6ab9, (q31_t)0xff75c585, - (q31_t)0x7fff4e59, (q31_t)0xff6934a8, (q31_t)0x7fff2f82, (q31_t)0xff5ca3d0, - (q31_t)0x7fff0e32, (q31_t)0xff5012fe, (q31_t)0x7ffeea6c, (q31_t)0xff438234, - (q31_t)0x7ffec42d, (q31_t)0xff36f170, (q31_t)0x7ffe9b77, (q31_t)0xff2a60b4, - (q31_t)0x7ffe704a, (q31_t)0xff1dd001, (q31_t)0x7ffe42a4, (q31_t)0xff113f56, - (q31_t)0x7ffe1288, (q31_t)0xff04aeb5, (q31_t)0x7ffddff3, (q31_t)0xfef81e1d, - (q31_t)0x7ffdaae7, (q31_t)0xfeeb8d8f, (q31_t)0x7ffd7364, (q31_t)0xfedefd0c, - (q31_t)0x7ffd3969, (q31_t)0xfed26c94, (q31_t)0x7ffcfcf6, (q31_t)0xfec5dc28, - (q31_t)0x7ffcbe0c, (q31_t)0xfeb94bc8, (q31_t)0x7ffc7caa, (q31_t)0xfeacbb74, - (q31_t)0x7ffc38d1, (q31_t)0xfea02b2e, (q31_t)0x7ffbf280, (q31_t)0xfe939af5, - (q31_t)0x7ffba9b8, (q31_t)0xfe870aca, (q31_t)0x7ffb5e78, (q31_t)0xfe7a7aae, - (q31_t)0x7ffb10c1, (q31_t)0xfe6deaa1, (q31_t)0x7ffac092, (q31_t)0xfe615aa3, - (q31_t)0x7ffa6dec, (q31_t)0xfe54cab5, (q31_t)0x7ffa18cf, (q31_t)0xfe483ad8, - (q31_t)0x7ff9c13a, (q31_t)0xfe3bab0b, (q31_t)0x7ff9672d, (q31_t)0xfe2f1b50, - (q31_t)0x7ff90aaa, (q31_t)0xfe228ba7, (q31_t)0x7ff8abae, (q31_t)0xfe15fc11, - (q31_t)0x7ff84a3c, (q31_t)0xfe096c8d, (q31_t)0x7ff7e652, (q31_t)0xfdfcdd1d, - (q31_t)0x7ff77ff1, (q31_t)0xfdf04dc0, (q31_t)0x7ff71718, (q31_t)0xfde3be78, - (q31_t)0x7ff6abc8, (q31_t)0xfdd72f45, (q31_t)0x7ff63e01, (q31_t)0xfdcaa027, - (q31_t)0x7ff5cdc3, (q31_t)0xfdbe111e, (q31_t)0x7ff55b0d, (q31_t)0xfdb1822c, - (q31_t)0x7ff4e5e0, (q31_t)0xfda4f351, (q31_t)0x7ff46e3c, (q31_t)0xfd98648d, - (q31_t)0x7ff3f420, (q31_t)0xfd8bd5e1, (q31_t)0x7ff3778e, (q31_t)0xfd7f474d, - (q31_t)0x7ff2f884, (q31_t)0xfd72b8d2, (q31_t)0x7ff27703, (q31_t)0xfd662a70, - (q31_t)0x7ff1f30b, (q31_t)0xfd599c28, (q31_t)0x7ff16c9c, (q31_t)0xfd4d0df9, - (q31_t)0x7ff0e3b6, (q31_t)0xfd407fe6, (q31_t)0x7ff05858, (q31_t)0xfd33f1ed, - (q31_t)0x7fefca84, (q31_t)0xfd276410, (q31_t)0x7fef3a39, (q31_t)0xfd1ad650, - (q31_t)0x7feea776, (q31_t)0xfd0e48ab, (q31_t)0x7fee123d, (q31_t)0xfd01bb24, - (q31_t)0x7fed7a8c, (q31_t)0xfcf52dbb, (q31_t)0x7fece065, (q31_t)0xfce8a06f, - (q31_t)0x7fec43c7, (q31_t)0xfcdc1342, (q31_t)0x7feba4b2, (q31_t)0xfccf8634, - (q31_t)0x7feb0326, (q31_t)0xfcc2f945, (q31_t)0x7fea5f23, (q31_t)0xfcb66c77, - (q31_t)0x7fe9b8a9, (q31_t)0xfca9dfc8, (q31_t)0x7fe90fb9, (q31_t)0xfc9d533b, - (q31_t)0x7fe86452, (q31_t)0xfc90c6cf, (q31_t)0x7fe7b674, (q31_t)0xfc843a85, - (q31_t)0x7fe7061f, (q31_t)0xfc77ae5e, (q31_t)0x7fe65354, (q31_t)0xfc6b2259, - (q31_t)0x7fe59e12, (q31_t)0xfc5e9678, (q31_t)0x7fe4e659, (q31_t)0xfc520aba, - (q31_t)0x7fe42c2a, (q31_t)0xfc457f21, (q31_t)0x7fe36f84, (q31_t)0xfc38f3ac, - (q31_t)0x7fe2b067, (q31_t)0xfc2c685d, (q31_t)0x7fe1eed5, (q31_t)0xfc1fdd34, - (q31_t)0x7fe12acb, (q31_t)0xfc135231, (q31_t)0x7fe0644b, (q31_t)0xfc06c754, - (q31_t)0x7fdf9b55, (q31_t)0xfbfa3c9f, (q31_t)0x7fdecfe8, (q31_t)0xfbedb212, - (q31_t)0x7fde0205, (q31_t)0xfbe127ac, (q31_t)0x7fdd31ac, (q31_t)0xfbd49d70, - (q31_t)0x7fdc5edc, (q31_t)0xfbc8135c, (q31_t)0x7fdb8996, (q31_t)0xfbbb8973, - (q31_t)0x7fdab1d9, (q31_t)0xfbaeffb3, (q31_t)0x7fd9d7a7, (q31_t)0xfba2761e, - (q31_t)0x7fd8fafe, (q31_t)0xfb95ecb4, (q31_t)0x7fd81bdf, (q31_t)0xfb896375, - (q31_t)0x7fd73a4a, (q31_t)0xfb7cda63, (q31_t)0x7fd6563f, (q31_t)0xfb70517d, - (q31_t)0x7fd56fbe, (q31_t)0xfb63c8c4, (q31_t)0x7fd486c7, (q31_t)0xfb574039, - (q31_t)0x7fd39b5a, (q31_t)0xfb4ab7db, (q31_t)0x7fd2ad77, (q31_t)0xfb3e2fac, - (q31_t)0x7fd1bd1e, (q31_t)0xfb31a7ac, (q31_t)0x7fd0ca4f, (q31_t)0xfb251fdc, - (q31_t)0x7fcfd50b, (q31_t)0xfb18983b, (q31_t)0x7fcedd50, (q31_t)0xfb0c10cb, - (q31_t)0x7fcde320, (q31_t)0xfaff898c, (q31_t)0x7fcce67a, (q31_t)0xfaf3027e, - (q31_t)0x7fcbe75e, (q31_t)0xfae67ba2, (q31_t)0x7fcae5cd, (q31_t)0xfad9f4f8, - (q31_t)0x7fc9e1c6, (q31_t)0xfacd6e81, (q31_t)0x7fc8db4a, (q31_t)0xfac0e83d, - (q31_t)0x7fc7d258, (q31_t)0xfab4622d, (q31_t)0x7fc6c6f0, (q31_t)0xfaa7dc52, - (q31_t)0x7fc5b913, (q31_t)0xfa9b56ab, (q31_t)0x7fc4a8c1, (q31_t)0xfa8ed139, - (q31_t)0x7fc395f9, (q31_t)0xfa824bfd, (q31_t)0x7fc280bc, (q31_t)0xfa75c6f8, - (q31_t)0x7fc1690a, (q31_t)0xfa694229, (q31_t)0x7fc04ee3, (q31_t)0xfa5cbd91, - (q31_t)0x7fbf3246, (q31_t)0xfa503930, (q31_t)0x7fbe1334, (q31_t)0xfa43b508, - (q31_t)0x7fbcf1ad, (q31_t)0xfa373119, (q31_t)0x7fbbcdb1, (q31_t)0xfa2aad62, - (q31_t)0x7fbaa740, (q31_t)0xfa1e29e5, (q31_t)0x7fb97e5a, (q31_t)0xfa11a6a3, - (q31_t)0x7fb852ff, (q31_t)0xfa05239a, (q31_t)0x7fb7252f, (q31_t)0xf9f8a0cd, - (q31_t)0x7fb5f4ea, (q31_t)0xf9ec1e3b, (q31_t)0x7fb4c231, (q31_t)0xf9df9be6, - (q31_t)0x7fb38d02, (q31_t)0xf9d319cc, (q31_t)0x7fb2555f, (q31_t)0xf9c697f0, - (q31_t)0x7fb11b48, (q31_t)0xf9ba1651, (q31_t)0x7fafdebb, (q31_t)0xf9ad94f0, - (q31_t)0x7fae9fbb, (q31_t)0xf9a113cd, (q31_t)0x7fad5e45, (q31_t)0xf99492ea, - (q31_t)0x7fac1a5b, (q31_t)0xf9881245, (q31_t)0x7faad3fd, (q31_t)0xf97b91e1, - (q31_t)0x7fa98b2a, (q31_t)0xf96f11bc, (q31_t)0x7fa83fe3, (q31_t)0xf96291d9, - (q31_t)0x7fa6f228, (q31_t)0xf9561237, (q31_t)0x7fa5a1f9, (q31_t)0xf94992d7, - (q31_t)0x7fa44f55, (q31_t)0xf93d13b8, (q31_t)0x7fa2fa3d, (q31_t)0xf93094dd, - (q31_t)0x7fa1a2b2, (q31_t)0xf9241645, (q31_t)0x7fa048b2, (q31_t)0xf91797f0, - (q31_t)0x7f9eec3e, (q31_t)0xf90b19e0, (q31_t)0x7f9d8d56, (q31_t)0xf8fe9c15, - (q31_t)0x7f9c2bfb, (q31_t)0xf8f21e8e, (q31_t)0x7f9ac82c, (q31_t)0xf8e5a14d, - (q31_t)0x7f9961e8, (q31_t)0xf8d92452, (q31_t)0x7f97f932, (q31_t)0xf8cca79e, - (q31_t)0x7f968e07, (q31_t)0xf8c02b31, (q31_t)0x7f952069, (q31_t)0xf8b3af0c, - (q31_t)0x7f93b058, (q31_t)0xf8a7332e, (q31_t)0x7f923dd2, (q31_t)0xf89ab799, - (q31_t)0x7f90c8da, (q31_t)0xf88e3c4d, (q31_t)0x7f8f516e, (q31_t)0xf881c14b, - (q31_t)0x7f8dd78f, (q31_t)0xf8754692, (q31_t)0x7f8c5b3d, (q31_t)0xf868cc24, - (q31_t)0x7f8adc77, (q31_t)0xf85c5201, (q31_t)0x7f895b3e, (q31_t)0xf84fd829, - (q31_t)0x7f87d792, (q31_t)0xf8435e9d, (q31_t)0x7f865174, (q31_t)0xf836e55d, - (q31_t)0x7f84c8e2, (q31_t)0xf82a6c6a, (q31_t)0x7f833ddd, (q31_t)0xf81df3c5, - (q31_t)0x7f81b065, (q31_t)0xf8117b6d, (q31_t)0x7f80207b, (q31_t)0xf8050364, - (q31_t)0x7f7e8e1e, (q31_t)0xf7f88ba9, (q31_t)0x7f7cf94e, (q31_t)0xf7ec143e, - (q31_t)0x7f7b620c, (q31_t)0xf7df9d22, (q31_t)0x7f79c857, (q31_t)0xf7d32657, - (q31_t)0x7f782c30, (q31_t)0xf7c6afdc, (q31_t)0x7f768d96, (q31_t)0xf7ba39b3, - (q31_t)0x7f74ec8a, (q31_t)0xf7adc3db, (q31_t)0x7f73490b, (q31_t)0xf7a14e55, - (q31_t)0x7f71a31b, (q31_t)0xf794d922, (q31_t)0x7f6ffab8, (q31_t)0xf7886442, - (q31_t)0x7f6e4fe3, (q31_t)0xf77befb5, (q31_t)0x7f6ca29c, (q31_t)0xf76f7b7d, - (q31_t)0x7f6af2e3, (q31_t)0xf7630799, (q31_t)0x7f6940b8, (q31_t)0xf756940a, - (q31_t)0x7f678c1c, (q31_t)0xf74a20d0, (q31_t)0x7f65d50d, (q31_t)0xf73daded, - (q31_t)0x7f641b8d, (q31_t)0xf7313b60, (q31_t)0x7f625f9b, (q31_t)0xf724c92a, - (q31_t)0x7f60a138, (q31_t)0xf718574b, (q31_t)0x7f5ee063, (q31_t)0xf70be5c4, - (q31_t)0x7f5d1d1d, (q31_t)0xf6ff7496, (q31_t)0x7f5b5765, (q31_t)0xf6f303c0, - (q31_t)0x7f598f3c, (q31_t)0xf6e69344, (q31_t)0x7f57c4a2, (q31_t)0xf6da2321, - (q31_t)0x7f55f796, (q31_t)0xf6cdb359, (q31_t)0x7f54281a, (q31_t)0xf6c143ec, - (q31_t)0x7f52562c, (q31_t)0xf6b4d4d9, (q31_t)0x7f5081cd, (q31_t)0xf6a86623, - (q31_t)0x7f4eaafe, (q31_t)0xf69bf7c9, (q31_t)0x7f4cd1be, (q31_t)0xf68f89cb, - (q31_t)0x7f4af60d, (q31_t)0xf6831c2b, (q31_t)0x7f4917eb, (q31_t)0xf676aee8, - (q31_t)0x7f473759, (q31_t)0xf66a4203, (q31_t)0x7f455456, (q31_t)0xf65dd57d, - (q31_t)0x7f436ee3, (q31_t)0xf6516956, (q31_t)0x7f4186ff, (q31_t)0xf644fd8f, - (q31_t)0x7f3f9cab, (q31_t)0xf6389228, (q31_t)0x7f3dafe7, (q31_t)0xf62c2721, - (q31_t)0x7f3bc0b3, (q31_t)0xf61fbc7b, (q31_t)0x7f39cf0e, (q31_t)0xf6135237, - (q31_t)0x7f37dafa, (q31_t)0xf606e854, (q31_t)0x7f35e476, (q31_t)0xf5fa7ed4, - (q31_t)0x7f33eb81, (q31_t)0xf5ee15b7, (q31_t)0x7f31f01d, (q31_t)0xf5e1acfd, - (q31_t)0x7f2ff24a, (q31_t)0xf5d544a7, (q31_t)0x7f2df206, (q31_t)0xf5c8dcb6, - (q31_t)0x7f2bef53, (q31_t)0xf5bc7529, (q31_t)0x7f29ea31, (q31_t)0xf5b00e02, - (q31_t)0x7f27e29f, (q31_t)0xf5a3a740, (q31_t)0x7f25d89e, (q31_t)0xf59740e5, - (q31_t)0x7f23cc2e, (q31_t)0xf58adaf0, (q31_t)0x7f21bd4e, (q31_t)0xf57e7563, - (q31_t)0x7f1fabff, (q31_t)0xf572103d, (q31_t)0x7f1d9842, (q31_t)0xf565ab80, - (q31_t)0x7f1b8215, (q31_t)0xf559472b, (q31_t)0x7f19697a, (q31_t)0xf54ce33f, - (q31_t)0x7f174e70, (q31_t)0xf5407fbd, (q31_t)0x7f1530f7, (q31_t)0xf5341ca5, - (q31_t)0x7f13110f, (q31_t)0xf527b9f7, (q31_t)0x7f10eeb9, (q31_t)0xf51b57b5, - (q31_t)0x7f0ec9f5, (q31_t)0xf50ef5de, (q31_t)0x7f0ca2c2, (q31_t)0xf5029473, - (q31_t)0x7f0a7921, (q31_t)0xf4f63374, (q31_t)0x7f084d12, (q31_t)0xf4e9d2e3, - (q31_t)0x7f061e95, (q31_t)0xf4dd72be, (q31_t)0x7f03eda9, (q31_t)0xf4d11308, - (q31_t)0x7f01ba50, (q31_t)0xf4c4b3c0, (q31_t)0x7eff8489, (q31_t)0xf4b854e7, - (q31_t)0x7efd4c54, (q31_t)0xf4abf67e, (q31_t)0x7efb11b1, (q31_t)0xf49f9884, - (q31_t)0x7ef8d4a1, (q31_t)0xf4933afa, (q31_t)0x7ef69523, (q31_t)0xf486dde1, - (q31_t)0x7ef45338, (q31_t)0xf47a8139, (q31_t)0x7ef20ee0, (q31_t)0xf46e2504, - (q31_t)0x7eefc81a, (q31_t)0xf461c940, (q31_t)0x7eed7ee7, (q31_t)0xf4556def, - (q31_t)0x7eeb3347, (q31_t)0xf4491311, (q31_t)0x7ee8e53a, (q31_t)0xf43cb8a7, - (q31_t)0x7ee694c1, (q31_t)0xf4305eb0, (q31_t)0x7ee441da, (q31_t)0xf424052f, - (q31_t)0x7ee1ec87, (q31_t)0xf417ac22, (q31_t)0x7edf94c7, (q31_t)0xf40b538b, - (q31_t)0x7edd3a9a, (q31_t)0xf3fefb6a, (q31_t)0x7edade01, (q31_t)0xf3f2a3bf, - (q31_t)0x7ed87efc, (q31_t)0xf3e64c8c, (q31_t)0x7ed61d8a, (q31_t)0xf3d9f5cf, - (q31_t)0x7ed3b9ad, (q31_t)0xf3cd9f8b, (q31_t)0x7ed15363, (q31_t)0xf3c149bf, - (q31_t)0x7eceeaad, (q31_t)0xf3b4f46c, (q31_t)0x7ecc7f8b, (q31_t)0xf3a89f92, - (q31_t)0x7eca11fe, (q31_t)0xf39c4b32, (q31_t)0x7ec7a205, (q31_t)0xf38ff74d, - (q31_t)0x7ec52fa0, (q31_t)0xf383a3e2, (q31_t)0x7ec2bad0, (q31_t)0xf37750f2, - (q31_t)0x7ec04394, (q31_t)0xf36afe7e, (q31_t)0x7ebdc9ed, (q31_t)0xf35eac86, - (q31_t)0x7ebb4ddb, (q31_t)0xf3525b0b, (q31_t)0x7eb8cf5d, (q31_t)0xf3460a0d, - (q31_t)0x7eb64e75, (q31_t)0xf339b98d, (q31_t)0x7eb3cb21, (q31_t)0xf32d698a, - (q31_t)0x7eb14563, (q31_t)0xf3211a07, (q31_t)0x7eaebd3a, (q31_t)0xf314cb02, - (q31_t)0x7eac32a6, (q31_t)0xf3087c7d, (q31_t)0x7ea9a5a8, (q31_t)0xf2fc2e77, - (q31_t)0x7ea7163f, (q31_t)0xf2efe0f2, (q31_t)0x7ea4846c, (q31_t)0xf2e393ef, - (q31_t)0x7ea1f02f, (q31_t)0xf2d7476c, (q31_t)0x7e9f5988, (q31_t)0xf2cafb6b, - (q31_t)0x7e9cc076, (q31_t)0xf2beafed, (q31_t)0x7e9a24fb, (q31_t)0xf2b264f2, - (q31_t)0x7e978715, (q31_t)0xf2a61a7a, (q31_t)0x7e94e6c6, (q31_t)0xf299d085, - (q31_t)0x7e92440d, (q31_t)0xf28d8715, (q31_t)0x7e8f9eeb, (q31_t)0xf2813e2a, - (q31_t)0x7e8cf75f, (q31_t)0xf274f5c3, (q31_t)0x7e8a4d6a, (q31_t)0xf268ade3, - (q31_t)0x7e87a10c, (q31_t)0xf25c6688, (q31_t)0x7e84f245, (q31_t)0xf2501fb5, - (q31_t)0x7e824114, (q31_t)0xf243d968, (q31_t)0x7e7f8d7b, (q31_t)0xf23793a3, - (q31_t)0x7e7cd778, (q31_t)0xf22b4e66, (q31_t)0x7e7a1f0d, (q31_t)0xf21f09b1, - (q31_t)0x7e77643a, (q31_t)0xf212c585, (q31_t)0x7e74a6fd, (q31_t)0xf20681e3, - (q31_t)0x7e71e759, (q31_t)0xf1fa3ecb, (q31_t)0x7e6f254c, (q31_t)0xf1edfc3d, - (q31_t)0x7e6c60d7, (q31_t)0xf1e1ba3a, (q31_t)0x7e6999fa, (q31_t)0xf1d578c2, - (q31_t)0x7e66d0b4, (q31_t)0xf1c937d6, (q31_t)0x7e640507, (q31_t)0xf1bcf777, - (q31_t)0x7e6136f3, (q31_t)0xf1b0b7a4, (q31_t)0x7e5e6676, (q31_t)0xf1a4785e, - (q31_t)0x7e5b9392, (q31_t)0xf19839a6, (q31_t)0x7e58be47, (q31_t)0xf18bfb7d, - (q31_t)0x7e55e694, (q31_t)0xf17fbde2, (q31_t)0x7e530c7a, (q31_t)0xf17380d6, - (q31_t)0x7e502ff9, (q31_t)0xf1674459, (q31_t)0x7e4d5110, (q31_t)0xf15b086d, - (q31_t)0x7e4a6fc1, (q31_t)0xf14ecd11, (q31_t)0x7e478c0b, (q31_t)0xf1429247, - (q31_t)0x7e44a5ef, (q31_t)0xf136580d, (q31_t)0x7e41bd6c, (q31_t)0xf12a1e66, - (q31_t)0x7e3ed282, (q31_t)0xf11de551, (q31_t)0x7e3be532, (q31_t)0xf111accf, - (q31_t)0x7e38f57c, (q31_t)0xf10574e0, (q31_t)0x7e360360, (q31_t)0xf0f93d86, - (q31_t)0x7e330ede, (q31_t)0xf0ed06bf, (q31_t)0x7e3017f6, (q31_t)0xf0e0d08d, - (q31_t)0x7e2d1ea8, (q31_t)0xf0d49af1, (q31_t)0x7e2a22f4, (q31_t)0xf0c865ea, - (q31_t)0x7e2724db, (q31_t)0xf0bc317a, (q31_t)0x7e24245d, (q31_t)0xf0affda0, - (q31_t)0x7e212179, (q31_t)0xf0a3ca5d, (q31_t)0x7e1e1c30, (q31_t)0xf09797b2, - (q31_t)0x7e1b1482, (q31_t)0xf08b659f, (q31_t)0x7e180a6f, (q31_t)0xf07f3424, - (q31_t)0x7e14fdf7, (q31_t)0xf0730342, (q31_t)0x7e11ef1b, (q31_t)0xf066d2fa, - (q31_t)0x7e0eddd9, (q31_t)0xf05aa34c, (q31_t)0x7e0bca34, (q31_t)0xf04e7438, - (q31_t)0x7e08b42a, (q31_t)0xf04245c0, (q31_t)0x7e059bbb, (q31_t)0xf03617e2, - (q31_t)0x7e0280e9, (q31_t)0xf029eaa1, (q31_t)0x7dff63b2, (q31_t)0xf01dbdfb, - (q31_t)0x7dfc4418, (q31_t)0xf01191f3, (q31_t)0x7df9221a, (q31_t)0xf0056687, - (q31_t)0x7df5fdb8, (q31_t)0xeff93bba, (q31_t)0x7df2d6f3, (q31_t)0xefed118a, - (q31_t)0x7defadca, (q31_t)0xefe0e7f9, (q31_t)0x7dec823e, (q31_t)0xefd4bf08, - (q31_t)0x7de9544f, (q31_t)0xefc896b5, (q31_t)0x7de623fd, (q31_t)0xefbc6f03, - (q31_t)0x7de2f148, (q31_t)0xefb047f2, (q31_t)0x7ddfbc30, (q31_t)0xefa42181, - (q31_t)0x7ddc84b5, (q31_t)0xef97fbb2, (q31_t)0x7dd94ad8, (q31_t)0xef8bd685, - (q31_t)0x7dd60e99, (q31_t)0xef7fb1fa, (q31_t)0x7dd2cff7, (q31_t)0xef738e12, - (q31_t)0x7dcf8ef3, (q31_t)0xef676ace, (q31_t)0x7dcc4b8d, (q31_t)0xef5b482d, - (q31_t)0x7dc905c5, (q31_t)0xef4f2630, (q31_t)0x7dc5bd9b, (q31_t)0xef4304d8, - (q31_t)0x7dc2730f, (q31_t)0xef36e426, (q31_t)0x7dbf2622, (q31_t)0xef2ac419, - (q31_t)0x7dbbd6d4, (q31_t)0xef1ea4b2, (q31_t)0x7db88524, (q31_t)0xef1285f2, - (q31_t)0x7db53113, (q31_t)0xef0667d9, (q31_t)0x7db1daa2, (q31_t)0xeefa4a67, - (q31_t)0x7dae81cf, (q31_t)0xeeee2d9d, (q31_t)0x7dab269b, (q31_t)0xeee2117c, - (q31_t)0x7da7c907, (q31_t)0xeed5f604, (q31_t)0x7da46912, (q31_t)0xeec9db35, - (q31_t)0x7da106bd, (q31_t)0xeebdc110, (q31_t)0x7d9da208, (q31_t)0xeeb1a796, - (q31_t)0x7d9a3af2, (q31_t)0xeea58ec6, (q31_t)0x7d96d17d, (q31_t)0xee9976a1, - (q31_t)0x7d9365a8, (q31_t)0xee8d5f29, (q31_t)0x7d8ff772, (q31_t)0xee81485c, - (q31_t)0x7d8c86de, (q31_t)0xee75323c, (q31_t)0x7d8913ea, (q31_t)0xee691cc9, - (q31_t)0x7d859e96, (q31_t)0xee5d0804, (q31_t)0x7d8226e4, (q31_t)0xee50f3ed, - (q31_t)0x7d7eacd2, (q31_t)0xee44e084, (q31_t)0x7d7b3061, (q31_t)0xee38cdcb, - (q31_t)0x7d77b192, (q31_t)0xee2cbbc1, (q31_t)0x7d743064, (q31_t)0xee20aa67, - (q31_t)0x7d70acd7, (q31_t)0xee1499bd, (q31_t)0x7d6d26ec, (q31_t)0xee0889c4, - (q31_t)0x7d699ea3, (q31_t)0xedfc7a7c, (q31_t)0x7d6613fb, (q31_t)0xedf06be6, - (q31_t)0x7d6286f6, (q31_t)0xede45e03, (q31_t)0x7d5ef793, (q31_t)0xedd850d2, - (q31_t)0x7d5b65d2, (q31_t)0xedcc4454, (q31_t)0x7d57d1b3, (q31_t)0xedc0388a, - (q31_t)0x7d543b37, (q31_t)0xedb42d74, (q31_t)0x7d50a25e, (q31_t)0xeda82313, - (q31_t)0x7d4d0728, (q31_t)0xed9c1967, (q31_t)0x7d496994, (q31_t)0xed901070, - (q31_t)0x7d45c9a4, (q31_t)0xed84082f, (q31_t)0x7d422757, (q31_t)0xed7800a5, - (q31_t)0x7d3e82ae, (q31_t)0xed6bf9d1, (q31_t)0x7d3adba7, (q31_t)0xed5ff3b5, - (q31_t)0x7d373245, (q31_t)0xed53ee51, (q31_t)0x7d338687, (q31_t)0xed47e9a5, - (q31_t)0x7d2fd86c, (q31_t)0xed3be5b1, (q31_t)0x7d2c27f6, (q31_t)0xed2fe277, - (q31_t)0x7d287523, (q31_t)0xed23dff7, (q31_t)0x7d24bff6, (q31_t)0xed17de31, - (q31_t)0x7d21086c, (q31_t)0xed0bdd25, (q31_t)0x7d1d4e88, (q31_t)0xecffdcd4, - (q31_t)0x7d199248, (q31_t)0xecf3dd3f, (q31_t)0x7d15d3ad, (q31_t)0xece7de66, - (q31_t)0x7d1212b7, (q31_t)0xecdbe04a, (q31_t)0x7d0e4f67, (q31_t)0xeccfe2ea, - (q31_t)0x7d0a89bc, (q31_t)0xecc3e648, (q31_t)0x7d06c1b6, (q31_t)0xecb7ea63, - (q31_t)0x7d02f757, (q31_t)0xecabef3d, (q31_t)0x7cff2a9d, (q31_t)0xec9ff4d6, - (q31_t)0x7cfb5b89, (q31_t)0xec93fb2e, (q31_t)0x7cf78a1b, (q31_t)0xec880245, - (q31_t)0x7cf3b653, (q31_t)0xec7c0a1d, (q31_t)0x7cefe032, (q31_t)0xec7012b5, - (q31_t)0x7cec07b8, (q31_t)0xec641c0e, (q31_t)0x7ce82ce4, (q31_t)0xec582629, - (q31_t)0x7ce44fb7, (q31_t)0xec4c3106, (q31_t)0x7ce07031, (q31_t)0xec403ca5, - (q31_t)0x7cdc8e52, (q31_t)0xec344908, (q31_t)0x7cd8aa1b, (q31_t)0xec28562d, - (q31_t)0x7cd4c38b, (q31_t)0xec1c6417, (q31_t)0x7cd0daa2, (q31_t)0xec1072c4, - (q31_t)0x7cccef62, (q31_t)0xec048237, (q31_t)0x7cc901c9, (q31_t)0xebf8926f, - (q31_t)0x7cc511d9, (q31_t)0xebeca36c, (q31_t)0x7cc11f90, (q31_t)0xebe0b52f, - (q31_t)0x7cbd2af0, (q31_t)0xebd4c7ba, (q31_t)0x7cb933f9, (q31_t)0xebc8db0b, - (q31_t)0x7cb53aaa, (q31_t)0xebbcef23, (q31_t)0x7cb13f04, (q31_t)0xebb10404, - (q31_t)0x7cad4107, (q31_t)0xeba519ad, (q31_t)0x7ca940b3, (q31_t)0xeb99301f, - (q31_t)0x7ca53e09, (q31_t)0xeb8d475b, (q31_t)0x7ca13908, (q31_t)0xeb815f60, - (q31_t)0x7c9d31b0, (q31_t)0xeb75782f, (q31_t)0x7c992803, (q31_t)0xeb6991ca, - (q31_t)0x7c951bff, (q31_t)0xeb5dac2f, (q31_t)0x7c910da5, (q31_t)0xeb51c760, - (q31_t)0x7c8cfcf6, (q31_t)0xeb45e35d, (q31_t)0x7c88e9f1, (q31_t)0xeb3a0027, - (q31_t)0x7c84d496, (q31_t)0xeb2e1dbe, (q31_t)0x7c80bce7, (q31_t)0xeb223c22, - (q31_t)0x7c7ca2e2, (q31_t)0xeb165b54, (q31_t)0x7c788688, (q31_t)0xeb0a7b54, - (q31_t)0x7c7467d9, (q31_t)0xeafe9c24, (q31_t)0x7c7046d6, (q31_t)0xeaf2bdc3, - (q31_t)0x7c6c237e, (q31_t)0xeae6e031, (q31_t)0x7c67fdd1, (q31_t)0xeadb0370, - (q31_t)0x7c63d5d1, (q31_t)0xeacf277f, (q31_t)0x7c5fab7c, (q31_t)0xeac34c60, - (q31_t)0x7c5b7ed4, (q31_t)0xeab77212, (q31_t)0x7c574fd8, (q31_t)0xeaab9896, - (q31_t)0x7c531e88, (q31_t)0xea9fbfed, (q31_t)0x7c4eeae5, (q31_t)0xea93e817, - (q31_t)0x7c4ab4ef, (q31_t)0xea881114, (q31_t)0x7c467ca6, (q31_t)0xea7c3ae5, - (q31_t)0x7c42420a, (q31_t)0xea70658a, (q31_t)0x7c3e051b, (q31_t)0xea649105, - (q31_t)0x7c39c5da, (q31_t)0xea58bd54, (q31_t)0x7c358446, (q31_t)0xea4cea79, - (q31_t)0x7c314060, (q31_t)0xea411874, (q31_t)0x7c2cfa28, (q31_t)0xea354746, - (q31_t)0x7c28b19e, (q31_t)0xea2976ef, (q31_t)0x7c2466c2, (q31_t)0xea1da770, - (q31_t)0x7c201994, (q31_t)0xea11d8c8, (q31_t)0x7c1bca16, (q31_t)0xea060af9, - (q31_t)0x7c177845, (q31_t)0xe9fa3e03, (q31_t)0x7c132424, (q31_t)0xe9ee71e6, - (q31_t)0x7c0ecdb2, (q31_t)0xe9e2a6a3, (q31_t)0x7c0a74f0, (q31_t)0xe9d6dc3b, - (q31_t)0x7c0619dc, (q31_t)0xe9cb12ad, (q31_t)0x7c01bc78, (q31_t)0xe9bf49fa, - (q31_t)0x7bfd5cc4, (q31_t)0xe9b38223, (q31_t)0x7bf8fac0, (q31_t)0xe9a7bb28, - (q31_t)0x7bf4966c, (q31_t)0xe99bf509, (q31_t)0x7bf02fc9, (q31_t)0xe9902fc7, - (q31_t)0x7bebc6d5, (q31_t)0xe9846b63, (q31_t)0x7be75b93, (q31_t)0xe978a7dd, - (q31_t)0x7be2ee01, (q31_t)0xe96ce535, (q31_t)0x7bde7e20, (q31_t)0xe961236c, - (q31_t)0x7bda0bf0, (q31_t)0xe9556282, (q31_t)0x7bd59771, (q31_t)0xe949a278, - (q31_t)0x7bd120a4, (q31_t)0xe93de34e, (q31_t)0x7bcca789, (q31_t)0xe9322505, - (q31_t)0x7bc82c1f, (q31_t)0xe926679c, (q31_t)0x7bc3ae67, (q31_t)0xe91aab16, - (q31_t)0x7bbf2e62, (q31_t)0xe90eef71, (q31_t)0x7bbaac0e, (q31_t)0xe90334af, - (q31_t)0x7bb6276e, (q31_t)0xe8f77acf, (q31_t)0x7bb1a080, (q31_t)0xe8ebc1d3, - (q31_t)0x7bad1744, (q31_t)0xe8e009ba, (q31_t)0x7ba88bbc, (q31_t)0xe8d45286, - (q31_t)0x7ba3fde7, (q31_t)0xe8c89c37, (q31_t)0x7b9f6dc5, (q31_t)0xe8bce6cd, - (q31_t)0x7b9adb57, (q31_t)0xe8b13248, (q31_t)0x7b96469d, (q31_t)0xe8a57ea9, - (q31_t)0x7b91af97, (q31_t)0xe899cbf1, (q31_t)0x7b8d1644, (q31_t)0xe88e1a20, - (q31_t)0x7b887aa6, (q31_t)0xe8826936, (q31_t)0x7b83dcbc, (q31_t)0xe876b934, - (q31_t)0x7b7f3c87, (q31_t)0xe86b0a1a, (q31_t)0x7b7a9a07, (q31_t)0xe85f5be9, - (q31_t)0x7b75f53c, (q31_t)0xe853aea1, (q31_t)0x7b714e25, (q31_t)0xe8480243, - (q31_t)0x7b6ca4c4, (q31_t)0xe83c56cf, (q31_t)0x7b67f919, (q31_t)0xe830ac45, - (q31_t)0x7b634b23, (q31_t)0xe82502a7, (q31_t)0x7b5e9ae4, (q31_t)0xe81959f4, - (q31_t)0x7b59e85a, (q31_t)0xe80db22d, (q31_t)0x7b553386, (q31_t)0xe8020b52, - (q31_t)0x7b507c69, (q31_t)0xe7f66564, (q31_t)0x7b4bc303, (q31_t)0xe7eac063, - (q31_t)0x7b470753, (q31_t)0xe7df1c50, (q31_t)0x7b42495a, (q31_t)0xe7d3792b, - (q31_t)0x7b3d8918, (q31_t)0xe7c7d6f4, (q31_t)0x7b38c68e, (q31_t)0xe7bc35ad, - (q31_t)0x7b3401bb, (q31_t)0xe7b09555, (q31_t)0x7b2f3aa0, (q31_t)0xe7a4f5ed, - (q31_t)0x7b2a713d, (q31_t)0xe7995776, (q31_t)0x7b25a591, (q31_t)0xe78db9ef, - (q31_t)0x7b20d79e, (q31_t)0xe7821d59, (q31_t)0x7b1c0764, (q31_t)0xe77681b6, - (q31_t)0x7b1734e2, (q31_t)0xe76ae704, (q31_t)0x7b126019, (q31_t)0xe75f4d45, - (q31_t)0x7b0d8909, (q31_t)0xe753b479, (q31_t)0x7b08afb2, (q31_t)0xe7481ca1, - (q31_t)0x7b03d414, (q31_t)0xe73c85bc, (q31_t)0x7afef630, (q31_t)0xe730efcc, - (q31_t)0x7afa1605, (q31_t)0xe7255ad1, (q31_t)0x7af53395, (q31_t)0xe719c6cb, - (q31_t)0x7af04edf, (q31_t)0xe70e33bb, (q31_t)0x7aeb67e3, (q31_t)0xe702a1a1, - (q31_t)0x7ae67ea1, (q31_t)0xe6f7107e, (q31_t)0x7ae1931a, (q31_t)0xe6eb8052, - (q31_t)0x7adca54e, (q31_t)0xe6dff11d, (q31_t)0x7ad7b53d, (q31_t)0xe6d462e1, - (q31_t)0x7ad2c2e8, (q31_t)0xe6c8d59c, (q31_t)0x7acdce4d, (q31_t)0xe6bd4951, - (q31_t)0x7ac8d76f, (q31_t)0xe6b1bdff, (q31_t)0x7ac3de4c, (q31_t)0xe6a633a6, - (q31_t)0x7abee2e5, (q31_t)0xe69aaa48, (q31_t)0x7ab9e53a, (q31_t)0xe68f21e5, - (q31_t)0x7ab4e54c, (q31_t)0xe6839a7c, (q31_t)0x7aafe31b, (q31_t)0xe6781410, - (q31_t)0x7aaadea6, (q31_t)0xe66c8e9f, (q31_t)0x7aa5d7ee, (q31_t)0xe6610a2a, - (q31_t)0x7aa0cef3, (q31_t)0xe65586b3, (q31_t)0x7a9bc3b6, (q31_t)0xe64a0438, - (q31_t)0x7a96b636, (q31_t)0xe63e82bc, (q31_t)0x7a91a674, (q31_t)0xe633023e, - (q31_t)0x7a8c9470, (q31_t)0xe62782be, (q31_t)0x7a87802a, (q31_t)0xe61c043d, - (q31_t)0x7a8269a3, (q31_t)0xe61086bc, (q31_t)0x7a7d50da, (q31_t)0xe6050a3b, - (q31_t)0x7a7835cf, (q31_t)0xe5f98ebb, (q31_t)0x7a731884, (q31_t)0xe5ee143b, - (q31_t)0x7a6df8f8, (q31_t)0xe5e29abc, (q31_t)0x7a68d72b, (q31_t)0xe5d72240, - (q31_t)0x7a63b31d, (q31_t)0xe5cbaac5, (q31_t)0x7a5e8cd0, (q31_t)0xe5c0344d, - (q31_t)0x7a596442, (q31_t)0xe5b4bed8, (q31_t)0x7a543974, (q31_t)0xe5a94a67, - (q31_t)0x7a4f0c67, (q31_t)0xe59dd6f9, (q31_t)0x7a49dd1a, (q31_t)0xe5926490, - (q31_t)0x7a44ab8e, (q31_t)0xe586f32c, (q31_t)0x7a3f77c3, (q31_t)0xe57b82cd, - (q31_t)0x7a3a41b9, (q31_t)0xe5701374, (q31_t)0x7a350970, (q31_t)0xe564a521, - (q31_t)0x7a2fcee8, (q31_t)0xe55937d5, (q31_t)0x7a2a9223, (q31_t)0xe54dcb8f, - (q31_t)0x7a25531f, (q31_t)0xe5426051, (q31_t)0x7a2011de, (q31_t)0xe536f61b, - (q31_t)0x7a1ace5f, (q31_t)0xe52b8cee, (q31_t)0x7a1588a2, (q31_t)0xe52024c9, - (q31_t)0x7a1040a8, (q31_t)0xe514bdad, (q31_t)0x7a0af671, (q31_t)0xe509579b, - (q31_t)0x7a05a9fd, (q31_t)0xe4fdf294, (q31_t)0x7a005b4d, (q31_t)0xe4f28e96, - (q31_t)0x79fb0a60, (q31_t)0xe4e72ba4, (q31_t)0x79f5b737, (q31_t)0xe4dbc9bd, - (q31_t)0x79f061d2, (q31_t)0xe4d068e2, (q31_t)0x79eb0a31, (q31_t)0xe4c50914, - (q31_t)0x79e5b054, (q31_t)0xe4b9aa52, (q31_t)0x79e0543c, (q31_t)0xe4ae4c9d, - (q31_t)0x79daf5e8, (q31_t)0xe4a2eff6, (q31_t)0x79d5955a, (q31_t)0xe497945d, - (q31_t)0x79d03291, (q31_t)0xe48c39d3, (q31_t)0x79cacd8d, (q31_t)0xe480e057, - (q31_t)0x79c5664f, (q31_t)0xe47587eb, (q31_t)0x79bffcd7, (q31_t)0xe46a308f, - (q31_t)0x79ba9125, (q31_t)0xe45eda43, (q31_t)0x79b52339, (q31_t)0xe4538507, - (q31_t)0x79afb313, (q31_t)0xe44830dd, (q31_t)0x79aa40b4, (q31_t)0xe43cddc4, - (q31_t)0x79a4cc1c, (q31_t)0xe4318bbe, (q31_t)0x799f554b, (q31_t)0xe4263ac9, - (q31_t)0x7999dc42, (q31_t)0xe41aeae8, (q31_t)0x799460ff, (q31_t)0xe40f9c1a, - (q31_t)0x798ee385, (q31_t)0xe4044e60, (q31_t)0x798963d2, (q31_t)0xe3f901ba, - (q31_t)0x7983e1e8, (q31_t)0xe3edb628, (q31_t)0x797e5dc6, (q31_t)0xe3e26bac, - (q31_t)0x7978d76c, (q31_t)0xe3d72245, (q31_t)0x79734edc, (q31_t)0xe3cbd9f4, - (q31_t)0x796dc414, (q31_t)0xe3c092b9, (q31_t)0x79683715, (q31_t)0xe3b54c95, - (q31_t)0x7962a7e0, (q31_t)0xe3aa0788, (q31_t)0x795d1675, (q31_t)0xe39ec393, - (q31_t)0x795782d3, (q31_t)0xe39380b6, (q31_t)0x7951ecfc, (q31_t)0xe3883ef2, - (q31_t)0x794c54ee, (q31_t)0xe37cfe47, (q31_t)0x7946baac, (q31_t)0xe371beb5, - (q31_t)0x79411e33, (q31_t)0xe366803c, (q31_t)0x793b7f86, (q31_t)0xe35b42df, - (q31_t)0x7935dea4, (q31_t)0xe350069b, (q31_t)0x79303b8e, (q31_t)0xe344cb73, - (q31_t)0x792a9642, (q31_t)0xe3399167, (q31_t)0x7924eec3, (q31_t)0xe32e5876, - (q31_t)0x791f4510, (q31_t)0xe32320a2, (q31_t)0x79199929, (q31_t)0xe317e9eb, - (q31_t)0x7913eb0e, (q31_t)0xe30cb451, (q31_t)0x790e3ac0, (q31_t)0xe3017fd5, - (q31_t)0x7908883f, (q31_t)0xe2f64c77, (q31_t)0x7902d38b, (q31_t)0xe2eb1a37, - (q31_t)0x78fd1ca4, (q31_t)0xe2dfe917, (q31_t)0x78f7638b, (q31_t)0xe2d4b916, - (q31_t)0x78f1a840, (q31_t)0xe2c98a35, (q31_t)0x78ebeac2, (q31_t)0xe2be5c74, - (q31_t)0x78e62b13, (q31_t)0xe2b32fd4, (q31_t)0x78e06932, (q31_t)0xe2a80456, - (q31_t)0x78daa520, (q31_t)0xe29cd9f8, (q31_t)0x78d4dedd, (q31_t)0xe291b0bd, - (q31_t)0x78cf1669, (q31_t)0xe28688a4, (q31_t)0x78c94bc4, (q31_t)0xe27b61af, - (q31_t)0x78c37eef, (q31_t)0xe2703bdc, (q31_t)0x78bdafea, (q31_t)0xe265172e, - (q31_t)0x78b7deb4, (q31_t)0xe259f3a3, (q31_t)0x78b20b4f, (q31_t)0xe24ed13d, - (q31_t)0x78ac35ba, (q31_t)0xe243affc, (q31_t)0x78a65df6, (q31_t)0xe2388fe1, - (q31_t)0x78a08402, (q31_t)0xe22d70eb, (q31_t)0x789aa7e0, (q31_t)0xe222531c, - (q31_t)0x7894c98f, (q31_t)0xe2173674, (q31_t)0x788ee910, (q31_t)0xe20c1af3, - (q31_t)0x78890663, (q31_t)0xe2010099, (q31_t)0x78832187, (q31_t)0xe1f5e768, - (q31_t)0x787d3a7e, (q31_t)0xe1eacf5f, (q31_t)0x78775147, (q31_t)0xe1dfb87f, - (q31_t)0x787165e3, (q31_t)0xe1d4a2c8, (q31_t)0x786b7852, (q31_t)0xe1c98e3b, - (q31_t)0x78658894, (q31_t)0xe1be7ad8, (q31_t)0x785f96a9, (q31_t)0xe1b368a0, - (q31_t)0x7859a292, (q31_t)0xe1a85793, (q31_t)0x7853ac4f, (q31_t)0xe19d47b1, - (q31_t)0x784db3e0, (q31_t)0xe19238fb, (q31_t)0x7847b946, (q31_t)0xe1872b72, - (q31_t)0x7841bc7f, (q31_t)0xe17c1f15, (q31_t)0x783bbd8e, (q31_t)0xe17113e5, - (q31_t)0x7835bc71, (q31_t)0xe16609e3, (q31_t)0x782fb92a, (q31_t)0xe15b0110, - (q31_t)0x7829b3b9, (q31_t)0xe14ff96a, (q31_t)0x7823ac1d, (q31_t)0xe144f2f3, - (q31_t)0x781da256, (q31_t)0xe139edac, (q31_t)0x78179666, (q31_t)0xe12ee995, - (q31_t)0x7811884d, (q31_t)0xe123e6ad, (q31_t)0x780b780a, (q31_t)0xe118e4f6, - (q31_t)0x7805659e, (q31_t)0xe10de470, (q31_t)0x77ff5109, (q31_t)0xe102e51c, - (q31_t)0x77f93a4b, (q31_t)0xe0f7e6f9, (q31_t)0x77f32165, (q31_t)0xe0ecea09, - (q31_t)0x77ed0657, (q31_t)0xe0e1ee4b, (q31_t)0x77e6e921, (q31_t)0xe0d6f3c1, - (q31_t)0x77e0c9c3, (q31_t)0xe0cbfa6a, (q31_t)0x77daa83d, (q31_t)0xe0c10247, - (q31_t)0x77d48490, (q31_t)0xe0b60b58, (q31_t)0x77ce5ebd, (q31_t)0xe0ab159e, - (q31_t)0x77c836c2, (q31_t)0xe0a0211a, (q31_t)0x77c20ca1, (q31_t)0xe0952dcb, - (q31_t)0x77bbe05a, (q31_t)0xe08a3bb2, (q31_t)0x77b5b1ec, (q31_t)0xe07f4acf, - (q31_t)0x77af8159, (q31_t)0xe0745b24, (q31_t)0x77a94ea0, (q31_t)0xe0696cb0, - (q31_t)0x77a319c2, (q31_t)0xe05e7f74, (q31_t)0x779ce2be, (q31_t)0xe053936f, - (q31_t)0x7796a996, (q31_t)0xe048a8a4, (q31_t)0x77906e49, (q31_t)0xe03dbf11, - (q31_t)0x778a30d8, (q31_t)0xe032d6b8, (q31_t)0x7783f143, (q31_t)0xe027ef99, - (q31_t)0x777daf89, (q31_t)0xe01d09b4, (q31_t)0x77776bac, (q31_t)0xe012250a, - (q31_t)0x777125ac, (q31_t)0xe007419b, (q31_t)0x776add88, (q31_t)0xdffc5f67, - (q31_t)0x77649341, (q31_t)0xdff17e70, (q31_t)0x775e46d8, (q31_t)0xdfe69eb4, - (q31_t)0x7757f84c, (q31_t)0xdfdbc036, (q31_t)0x7751a79e, (q31_t)0xdfd0e2f5, - (q31_t)0x774b54ce, (q31_t)0xdfc606f1, (q31_t)0x7744ffdd, (q31_t)0xdfbb2c2c, - (q31_t)0x773ea8ca, (q31_t)0xdfb052a5, (q31_t)0x77384f95, (q31_t)0xdfa57a5d, - (q31_t)0x7731f440, (q31_t)0xdf9aa354, (q31_t)0x772b96ca, (q31_t)0xdf8fcd8b, - (q31_t)0x77253733, (q31_t)0xdf84f902, (q31_t)0x771ed57c, (q31_t)0xdf7a25ba, - (q31_t)0x771871a5, (q31_t)0xdf6f53b3, (q31_t)0x77120bae, (q31_t)0xdf6482ed, - (q31_t)0x770ba398, (q31_t)0xdf59b369, (q31_t)0x77053962, (q31_t)0xdf4ee527, - (q31_t)0x76fecd0e, (q31_t)0xdf441828, (q31_t)0x76f85e9a, (q31_t)0xdf394c6b, - (q31_t)0x76f1ee09, (q31_t)0xdf2e81f3, (q31_t)0x76eb7b58, (q31_t)0xdf23b8be, - (q31_t)0x76e5068a, (q31_t)0xdf18f0ce, (q31_t)0x76de8f9e, (q31_t)0xdf0e2a22, - (q31_t)0x76d81695, (q31_t)0xdf0364bc, (q31_t)0x76d19b6e, (q31_t)0xdef8a09b, - (q31_t)0x76cb1e2a, (q31_t)0xdeedddc0, (q31_t)0x76c49ec9, (q31_t)0xdee31c2b, - (q31_t)0x76be1d4c, (q31_t)0xded85bdd, (q31_t)0x76b799b3, (q31_t)0xdecd9cd7, - (q31_t)0x76b113fd, (q31_t)0xdec2df18, (q31_t)0x76aa8c2c, (q31_t)0xdeb822a1, - (q31_t)0x76a4023f, (q31_t)0xdead6773, (q31_t)0x769d7637, (q31_t)0xdea2ad8d, - (q31_t)0x7696e814, (q31_t)0xde97f4f1, (q31_t)0x769057d6, (q31_t)0xde8d3d9e, - (q31_t)0x7689c57d, (q31_t)0xde828796, (q31_t)0x7683310b, (q31_t)0xde77d2d8, - (q31_t)0x767c9a7e, (q31_t)0xde6d1f65, (q31_t)0x767601d7, (q31_t)0xde626d3e, - (q31_t)0x766f6717, (q31_t)0xde57bc62, (q31_t)0x7668ca3e, (q31_t)0xde4d0cd2, - (q31_t)0x76622b4c, (q31_t)0xde425e8f, (q31_t)0x765b8a41, (q31_t)0xde37b199, - (q31_t)0x7654e71d, (q31_t)0xde2d05f1, (q31_t)0x764e41e2, (q31_t)0xde225b96, - (q31_t)0x76479a8e, (q31_t)0xde17b28a, (q31_t)0x7640f123, (q31_t)0xde0d0acc, - (q31_t)0x763a45a0, (q31_t)0xde02645d, (q31_t)0x76339806, (q31_t)0xddf7bf3e, - (q31_t)0x762ce855, (q31_t)0xdded1b6e, (q31_t)0x7626368d, (q31_t)0xdde278ef, - (q31_t)0x761f82af, (q31_t)0xddd7d7c1, (q31_t)0x7618ccba, (q31_t)0xddcd37e4, - (q31_t)0x761214b0, (q31_t)0xddc29958, (q31_t)0x760b5a90, (q31_t)0xddb7fc1e, - (q31_t)0x76049e5b, (q31_t)0xddad6036, (q31_t)0x75fde011, (q31_t)0xdda2c5a2, - (q31_t)0x75f71fb1, (q31_t)0xdd982c60, (q31_t)0x75f05d3d, (q31_t)0xdd8d9472, - (q31_t)0x75e998b5, (q31_t)0xdd82fdd8, (q31_t)0x75e2d219, (q31_t)0xdd786892, - (q31_t)0x75dc0968, (q31_t)0xdd6dd4a2, (q31_t)0x75d53ea5, (q31_t)0xdd634206, - (q31_t)0x75ce71ce, (q31_t)0xdd58b0c0, (q31_t)0x75c7a2e3, (q31_t)0xdd4e20d0, - (q31_t)0x75c0d1e7, (q31_t)0xdd439236, (q31_t)0x75b9fed7, (q31_t)0xdd3904f4, - (q31_t)0x75b329b5, (q31_t)0xdd2e7908, (q31_t)0x75ac5282, (q31_t)0xdd23ee74, - (q31_t)0x75a5793c, (q31_t)0xdd196538, (q31_t)0x759e9de5, (q31_t)0xdd0edd55, - (q31_t)0x7597c07d, (q31_t)0xdd0456ca, (q31_t)0x7590e104, (q31_t)0xdcf9d199, - (q31_t)0x7589ff7a, (q31_t)0xdcef4dc2, (q31_t)0x75831be0, (q31_t)0xdce4cb44, - (q31_t)0x757c3636, (q31_t)0xdcda4a21, (q31_t)0x75754e7c, (q31_t)0xdccfca59, - (q31_t)0x756e64b2, (q31_t)0xdcc54bec, (q31_t)0x756778d9, (q31_t)0xdcbacedb, - (q31_t)0x75608af1, (q31_t)0xdcb05326, (q31_t)0x75599afa, (q31_t)0xdca5d8cd, - (q31_t)0x7552a8f4, (q31_t)0xdc9b5fd2, (q31_t)0x754bb4e1, (q31_t)0xdc90e834, - (q31_t)0x7544bebf, (q31_t)0xdc8671f3, (q31_t)0x753dc68f, (q31_t)0xdc7bfd11, - (q31_t)0x7536cc52, (q31_t)0xdc71898d, (q31_t)0x752fd008, (q31_t)0xdc671768, - (q31_t)0x7528d1b1, (q31_t)0xdc5ca6a2, (q31_t)0x7521d14d, (q31_t)0xdc52373c, - (q31_t)0x751acedd, (q31_t)0xdc47c936, (q31_t)0x7513ca60, (q31_t)0xdc3d5c91, - (q31_t)0x750cc3d8, (q31_t)0xdc32f14d, (q31_t)0x7505bb44, (q31_t)0xdc28876a, - (q31_t)0x74feb0a5, (q31_t)0xdc1e1ee9, (q31_t)0x74f7a3fb, (q31_t)0xdc13b7c9, - (q31_t)0x74f09546, (q31_t)0xdc09520d, (q31_t)0x74e98487, (q31_t)0xdbfeedb3, - (q31_t)0x74e271bd, (q31_t)0xdbf48abd, (q31_t)0x74db5cea, (q31_t)0xdbea292b, - (q31_t)0x74d4460c, (q31_t)0xdbdfc8fc, (q31_t)0x74cd2d26, (q31_t)0xdbd56a32, - (q31_t)0x74c61236, (q31_t)0xdbcb0cce, (q31_t)0x74bef53d, (q31_t)0xdbc0b0ce, - (q31_t)0x74b7d63c, (q31_t)0xdbb65634, (q31_t)0x74b0b533, (q31_t)0xdbabfd01, - (q31_t)0x74a99221, (q31_t)0xdba1a534, (q31_t)0x74a26d08, (q31_t)0xdb974ece, - (q31_t)0x749b45e7, (q31_t)0xdb8cf9cf, (q31_t)0x74941cbf, (q31_t)0xdb82a638, - (q31_t)0x748cf190, (q31_t)0xdb785409, (q31_t)0x7485c45b, (q31_t)0xdb6e0342, - (q31_t)0x747e951f, (q31_t)0xdb63b3e5, (q31_t)0x747763dd, (q31_t)0xdb5965f1, - (q31_t)0x74703095, (q31_t)0xdb4f1967, (q31_t)0x7468fb47, (q31_t)0xdb44ce46, - (q31_t)0x7461c3f5, (q31_t)0xdb3a8491, (q31_t)0x745a8a9d, (q31_t)0xdb303c46, - (q31_t)0x74534f41, (q31_t)0xdb25f566, (q31_t)0x744c11e0, (q31_t)0xdb1baff2, - (q31_t)0x7444d27b, (q31_t)0xdb116beb, (q31_t)0x743d9112, (q31_t)0xdb072950, - (q31_t)0x74364da6, (q31_t)0xdafce821, (q31_t)0x742f0836, (q31_t)0xdaf2a860, - (q31_t)0x7427c0c3, (q31_t)0xdae86a0d, (q31_t)0x7420774d, (q31_t)0xdade2d28, - (q31_t)0x74192bd5, (q31_t)0xdad3f1b1, (q31_t)0x7411de5b, (q31_t)0xdac9b7a9, - (q31_t)0x740a8edf, (q31_t)0xdabf7f11, (q31_t)0x74033d61, (q31_t)0xdab547e8, - (q31_t)0x73fbe9e2, (q31_t)0xdaab122f, (q31_t)0x73f49462, (q31_t)0xdaa0dde7, - (q31_t)0x73ed3ce1, (q31_t)0xda96ab0f, (q31_t)0x73e5e360, (q31_t)0xda8c79a9, - (q31_t)0x73de87de, (q31_t)0xda8249b4, (q31_t)0x73d72a5d, (q31_t)0xda781b31, - (q31_t)0x73cfcadc, (q31_t)0xda6dee21, (q31_t)0x73c8695b, (q31_t)0xda63c284, - (q31_t)0x73c105db, (q31_t)0xda599859, (q31_t)0x73b9a05d, (q31_t)0xda4f6fa3, - (q31_t)0x73b238e0, (q31_t)0xda454860, (q31_t)0x73aacf65, (q31_t)0xda3b2292, - (q31_t)0x73a363ec, (q31_t)0xda30fe38, (q31_t)0x739bf675, (q31_t)0xda26db54, - (q31_t)0x73948701, (q31_t)0xda1cb9e5, (q31_t)0x738d1590, (q31_t)0xda1299ec, - (q31_t)0x7385a222, (q31_t)0xda087b69, (q31_t)0x737e2cb7, (q31_t)0xd9fe5e5e, - (q31_t)0x7376b551, (q31_t)0xd9f442c9, (q31_t)0x736f3bee, (q31_t)0xd9ea28ac, - (q31_t)0x7367c090, (q31_t)0xd9e01006, (q31_t)0x73604336, (q31_t)0xd9d5f8d9, - (q31_t)0x7358c3e2, (q31_t)0xd9cbe325, (q31_t)0x73514292, (q31_t)0xd9c1cee9, - (q31_t)0x7349bf48, (q31_t)0xd9b7bc27, (q31_t)0x73423a04, (q31_t)0xd9adaadf, - (q31_t)0x733ab2c6, (q31_t)0xd9a39b11, (q31_t)0x7333298f, (q31_t)0xd9998cbe, - (q31_t)0x732b9e5e, (q31_t)0xd98f7fe6, (q31_t)0x73241134, (q31_t)0xd9857489, - (q31_t)0x731c8211, (q31_t)0xd97b6aa8, (q31_t)0x7314f0f6, (q31_t)0xd9716243, - (q31_t)0x730d5de3, (q31_t)0xd9675b5a, (q31_t)0x7305c8d7, (q31_t)0xd95d55ef, - (q31_t)0x72fe31d5, (q31_t)0xd9535201, (q31_t)0x72f698db, (q31_t)0xd9494f90, - (q31_t)0x72eefdea, (q31_t)0xd93f4e9e, (q31_t)0x72e76102, (q31_t)0xd9354f2a, - (q31_t)0x72dfc224, (q31_t)0xd92b5135, (q31_t)0x72d82150, (q31_t)0xd92154bf, - (q31_t)0x72d07e85, (q31_t)0xd91759c9, (q31_t)0x72c8d9c6, (q31_t)0xd90d6053, - (q31_t)0x72c13311, (q31_t)0xd903685d, (q31_t)0x72b98a67, (q31_t)0xd8f971e8, - (q31_t)0x72b1dfc9, (q31_t)0xd8ef7cf4, (q31_t)0x72aa3336, (q31_t)0xd8e58982, - (q31_t)0x72a284b0, (q31_t)0xd8db9792, (q31_t)0x729ad435, (q31_t)0xd8d1a724, - (q31_t)0x729321c7, (q31_t)0xd8c7b838, (q31_t)0x728b6d66, (q31_t)0xd8bdcad0, - (q31_t)0x7283b712, (q31_t)0xd8b3deeb, (q31_t)0x727bfecc, (q31_t)0xd8a9f48a, - (q31_t)0x72744493, (q31_t)0xd8a00bae, (q31_t)0x726c8868, (q31_t)0xd8962456, - (q31_t)0x7264ca4c, (q31_t)0xd88c3e83, (q31_t)0x725d0a3e, (q31_t)0xd8825a35, - (q31_t)0x72554840, (q31_t)0xd878776d, (q31_t)0x724d8450, (q31_t)0xd86e962b, - (q31_t)0x7245be70, (q31_t)0xd864b670, (q31_t)0x723df6a0, (q31_t)0xd85ad83c, - (q31_t)0x72362ce0, (q31_t)0xd850fb8e, (q31_t)0x722e6130, (q31_t)0xd8472069, - (q31_t)0x72269391, (q31_t)0xd83d46cc, (q31_t)0x721ec403, (q31_t)0xd8336eb7, - (q31_t)0x7216f287, (q31_t)0xd829982b, (q31_t)0x720f1f1c, (q31_t)0xd81fc328, - (q31_t)0x720749c3, (q31_t)0xd815efae, (q31_t)0x71ff727c, (q31_t)0xd80c1dbf, - (q31_t)0x71f79948, (q31_t)0xd8024d59, (q31_t)0x71efbe27, (q31_t)0xd7f87e7f, - (q31_t)0x71e7e118, (q31_t)0xd7eeb130, (q31_t)0x71e0021e, (q31_t)0xd7e4e56c, - (q31_t)0x71d82137, (q31_t)0xd7db1b34, (q31_t)0x71d03e64, (q31_t)0xd7d15288, - (q31_t)0x71c859a5, (q31_t)0xd7c78b68, (q31_t)0x71c072fb, (q31_t)0xd7bdc5d6, - (q31_t)0x71b88a66, (q31_t)0xd7b401d1, (q31_t)0x71b09fe7, (q31_t)0xd7aa3f5a, - (q31_t)0x71a8b37c, (q31_t)0xd7a07e70, (q31_t)0x71a0c528, (q31_t)0xd796bf16, - (q31_t)0x7198d4ea, (q31_t)0xd78d014a, (q31_t)0x7190e2c3, (q31_t)0xd783450d, - (q31_t)0x7188eeb2, (q31_t)0xd7798a60, (q31_t)0x7180f8b8, (q31_t)0xd76fd143, - (q31_t)0x717900d6, (q31_t)0xd76619b6, (q31_t)0x7171070c, (q31_t)0xd75c63ba, - (q31_t)0x71690b59, (q31_t)0xd752af4f, (q31_t)0x71610dbf, (q31_t)0xd748fc75, - (q31_t)0x71590e3e, (q31_t)0xd73f4b2e, (q31_t)0x71510cd5, (q31_t)0xd7359b78, - (q31_t)0x71490986, (q31_t)0xd72bed55, (q31_t)0x71410450, (q31_t)0xd72240c5, - (q31_t)0x7138fd35, (q31_t)0xd71895c9, (q31_t)0x7130f433, (q31_t)0xd70eec60, - (q31_t)0x7128e94c, (q31_t)0xd705448b, (q31_t)0x7120dc80, (q31_t)0xd6fb9e4b, - (q31_t)0x7118cdcf, (q31_t)0xd6f1f99f, (q31_t)0x7110bd39, (q31_t)0xd6e85689, - (q31_t)0x7108aabf, (q31_t)0xd6deb508, (q31_t)0x71009661, (q31_t)0xd6d5151d, - (q31_t)0x70f8801f, (q31_t)0xd6cb76c9, (q31_t)0x70f067fb, (q31_t)0xd6c1da0b, - (q31_t)0x70e84df3, (q31_t)0xd6b83ee4, (q31_t)0x70e03208, (q31_t)0xd6aea555, - (q31_t)0x70d8143b, (q31_t)0xd6a50d5d, (q31_t)0x70cff48c, (q31_t)0xd69b76fe, - (q31_t)0x70c7d2fb, (q31_t)0xd691e237, (q31_t)0x70bfaf89, (q31_t)0xd6884f09, - (q31_t)0x70b78a36, (q31_t)0xd67ebd74, (q31_t)0x70af6302, (q31_t)0xd6752d79, - (q31_t)0x70a739ed, (q31_t)0xd66b9f18, (q31_t)0x709f0ef8, (q31_t)0xd6621251, - (q31_t)0x7096e223, (q31_t)0xd6588725, (q31_t)0x708eb36f, (q31_t)0xd64efd94, - (q31_t)0x708682dc, (q31_t)0xd645759f, (q31_t)0x707e5069, (q31_t)0xd63bef46, - (q31_t)0x70761c18, (q31_t)0xd6326a88, (q31_t)0x706de5e9, (q31_t)0xd628e767, - (q31_t)0x7065addb, (q31_t)0xd61f65e4, (q31_t)0x705d73f0, (q31_t)0xd615e5fd, - (q31_t)0x70553828, (q31_t)0xd60c67b4, (q31_t)0x704cfa83, (q31_t)0xd602eb0a, - (q31_t)0x7044bb00, (q31_t)0xd5f96ffd, (q31_t)0x703c79a2, (q31_t)0xd5eff690, - (q31_t)0x70343667, (q31_t)0xd5e67ec1, (q31_t)0x702bf151, (q31_t)0xd5dd0892, - (q31_t)0x7023aa5f, (q31_t)0xd5d39403, (q31_t)0x701b6193, (q31_t)0xd5ca2115, - (q31_t)0x701316eb, (q31_t)0xd5c0afc6, (q31_t)0x700aca69, (q31_t)0xd5b74019, - (q31_t)0x70027c0c, (q31_t)0xd5add20d, (q31_t)0x6ffa2bd6, (q31_t)0xd5a465a3, - (q31_t)0x6ff1d9c7, (q31_t)0xd59afadb, (q31_t)0x6fe985de, (q31_t)0xd59191b5, - (q31_t)0x6fe1301c, (q31_t)0xd5882a32, (q31_t)0x6fd8d882, (q31_t)0xd57ec452, - (q31_t)0x6fd07f0f, (q31_t)0xd5756016, (q31_t)0x6fc823c5, (q31_t)0xd56bfd7d, - (q31_t)0x6fbfc6a3, (q31_t)0xd5629c89, (q31_t)0x6fb767aa, (q31_t)0xd5593d3a, - (q31_t)0x6faf06da, (q31_t)0xd54fdf8f, (q31_t)0x6fa6a433, (q31_t)0xd5468389, - (q31_t)0x6f9e3fb6, (q31_t)0xd53d292a, (q31_t)0x6f95d963, (q31_t)0xd533d070, - (q31_t)0x6f8d713a, (q31_t)0xd52a795d, (q31_t)0x6f85073c, (q31_t)0xd52123f0, - (q31_t)0x6f7c9b69, (q31_t)0xd517d02b, (q31_t)0x6f742dc1, (q31_t)0xd50e7e0d, - (q31_t)0x6f6bbe45, (q31_t)0xd5052d97, (q31_t)0x6f634cf5, (q31_t)0xd4fbdec9, - (q31_t)0x6f5ad9d1, (q31_t)0xd4f291a4, (q31_t)0x6f5264da, (q31_t)0xd4e94627, - (q31_t)0x6f49ee0f, (q31_t)0xd4dffc54, (q31_t)0x6f417573, (q31_t)0xd4d6b42b, - (q31_t)0x6f38fb03, (q31_t)0xd4cd6dab, (q31_t)0x6f307ec2, (q31_t)0xd4c428d6, - (q31_t)0x6f2800af, (q31_t)0xd4bae5ab, (q31_t)0x6f1f80ca, (q31_t)0xd4b1a42c, - (q31_t)0x6f16ff14, (q31_t)0xd4a86458, (q31_t)0x6f0e7b8e, (q31_t)0xd49f2630, - (q31_t)0x6f05f637, (q31_t)0xd495e9b3, (q31_t)0x6efd6f10, (q31_t)0xd48caee4, - (q31_t)0x6ef4e619, (q31_t)0xd48375c1, (q31_t)0x6eec5b53, (q31_t)0xd47a3e4b, - (q31_t)0x6ee3cebe, (q31_t)0xd4710883, (q31_t)0x6edb405a, (q31_t)0xd467d469, - (q31_t)0x6ed2b027, (q31_t)0xd45ea1fd, (q31_t)0x6eca1e27, (q31_t)0xd4557140, - (q31_t)0x6ec18a58, (q31_t)0xd44c4232, (q31_t)0x6eb8f4bc, (q31_t)0xd44314d3, - (q31_t)0x6eb05d53, (q31_t)0xd439e923, (q31_t)0x6ea7c41e, (q31_t)0xd430bf24, - (q31_t)0x6e9f291b, (q31_t)0xd42796d5, (q31_t)0x6e968c4d, (q31_t)0xd41e7037, - (q31_t)0x6e8dedb3, (q31_t)0xd4154b4a, (q31_t)0x6e854d4d, (q31_t)0xd40c280e, - (q31_t)0x6e7cab1c, (q31_t)0xd4030684, (q31_t)0x6e740720, (q31_t)0xd3f9e6ad, - (q31_t)0x6e6b615a, (q31_t)0xd3f0c887, (q31_t)0x6e62b9ca, (q31_t)0xd3e7ac15, - (q31_t)0x6e5a1070, (q31_t)0xd3de9156, (q31_t)0x6e51654c, (q31_t)0xd3d5784a, - (q31_t)0x6e48b860, (q31_t)0xd3cc60f2, (q31_t)0x6e4009aa, (q31_t)0xd3c34b4f, - (q31_t)0x6e37592c, (q31_t)0xd3ba3760, (q31_t)0x6e2ea6e6, (q31_t)0xd3b12526, - (q31_t)0x6e25f2d8, (q31_t)0xd3a814a2, (q31_t)0x6e1d3d03, (q31_t)0xd39f05d3, - (q31_t)0x6e148566, (q31_t)0xd395f8ba, (q31_t)0x6e0bcc03, (q31_t)0xd38ced57, - (q31_t)0x6e0310d9, (q31_t)0xd383e3ab, (q31_t)0x6dfa53e9, (q31_t)0xd37adbb6, - (q31_t)0x6df19534, (q31_t)0xd371d579, (q31_t)0x6de8d4b8, (q31_t)0xd368d0f3, - (q31_t)0x6de01278, (q31_t)0xd35fce26, (q31_t)0x6dd74e73, (q31_t)0xd356cd11, - (q31_t)0x6dce88aa, (q31_t)0xd34dcdb4, (q31_t)0x6dc5c11c, (q31_t)0xd344d011, - (q31_t)0x6dbcf7cb, (q31_t)0xd33bd427, (q31_t)0x6db42cb6, (q31_t)0xd332d9f7, - (q31_t)0x6dab5fdf, (q31_t)0xd329e181, (q31_t)0x6da29144, (q31_t)0xd320eac6, - (q31_t)0x6d99c0e7, (q31_t)0xd317f5c6, (q31_t)0x6d90eec8, (q31_t)0xd30f0280, - (q31_t)0x6d881ae8, (q31_t)0xd30610f7, (q31_t)0x6d7f4545, (q31_t)0xd2fd2129, - (q31_t)0x6d766de2, (q31_t)0xd2f43318, (q31_t)0x6d6d94bf, (q31_t)0xd2eb46c3, - (q31_t)0x6d64b9da, (q31_t)0xd2e25c2b, (q31_t)0x6d5bdd36, (q31_t)0xd2d97350, - (q31_t)0x6d52fed2, (q31_t)0xd2d08c33, (q31_t)0x6d4a1eaf, (q31_t)0xd2c7a6d4, - (q31_t)0x6d413ccd, (q31_t)0xd2bec333, (q31_t)0x6d38592c, (q31_t)0xd2b5e151, - (q31_t)0x6d2f73cd, (q31_t)0xd2ad012e, (q31_t)0x6d268cb0, (q31_t)0xd2a422ca, - (q31_t)0x6d1da3d5, (q31_t)0xd29b4626, (q31_t)0x6d14b93d, (q31_t)0xd2926b41, - (q31_t)0x6d0bcce8, (q31_t)0xd289921e, (q31_t)0x6d02ded7, (q31_t)0xd280babb, - (q31_t)0x6cf9ef09, (q31_t)0xd277e518, (q31_t)0x6cf0fd80, (q31_t)0xd26f1138, - (q31_t)0x6ce80a3a, (q31_t)0xd2663f19, (q31_t)0x6cdf153a, (q31_t)0xd25d6ebc, - (q31_t)0x6cd61e7f, (q31_t)0xd254a021, (q31_t)0x6ccd2609, (q31_t)0xd24bd34a, - (q31_t)0x6cc42bd9, (q31_t)0xd2430835, (q31_t)0x6cbb2fef, (q31_t)0xd23a3ee4, - (q31_t)0x6cb2324c, (q31_t)0xd2317756, (q31_t)0x6ca932ef, (q31_t)0xd228b18d, - (q31_t)0x6ca031da, (q31_t)0xd21fed88, (q31_t)0x6c972f0d, (q31_t)0xd2172b48, - (q31_t)0x6c8e2a87, (q31_t)0xd20e6acc, (q31_t)0x6c85244a, (q31_t)0xd205ac17, - (q31_t)0x6c7c1c55, (q31_t)0xd1fcef27, (q31_t)0x6c7312a9, (q31_t)0xd1f433fd, - (q31_t)0x6c6a0746, (q31_t)0xd1eb7a9a, (q31_t)0x6c60fa2d, (q31_t)0xd1e2c2fd, - (q31_t)0x6c57eb5e, (q31_t)0xd1da0d28, (q31_t)0x6c4edada, (q31_t)0xd1d1591a, - (q31_t)0x6c45c8a0, (q31_t)0xd1c8a6d4, (q31_t)0x6c3cb4b1, (q31_t)0xd1bff656, - (q31_t)0x6c339f0e, (q31_t)0xd1b747a0, (q31_t)0x6c2a87b6, (q31_t)0xd1ae9ab4, - (q31_t)0x6c216eaa, (q31_t)0xd1a5ef90, (q31_t)0x6c1853eb, (q31_t)0xd19d4636, - (q31_t)0x6c0f3779, (q31_t)0xd1949ea6, (q31_t)0x6c061953, (q31_t)0xd18bf8e0, - (q31_t)0x6bfcf97c, (q31_t)0xd18354e4, (q31_t)0x6bf3d7f2, (q31_t)0xd17ab2b3, - (q31_t)0x6beab4b6, (q31_t)0xd172124d, (q31_t)0x6be18fc9, (q31_t)0xd16973b3, - (q31_t)0x6bd8692b, (q31_t)0xd160d6e5, (q31_t)0x6bcf40dc, (q31_t)0xd1583be2, - (q31_t)0x6bc616dd, (q31_t)0xd14fa2ad, (q31_t)0x6bbceb2d, (q31_t)0xd1470b44, - (q31_t)0x6bb3bdce, (q31_t)0xd13e75a8, (q31_t)0x6baa8ec0, (q31_t)0xd135e1d9, - (q31_t)0x6ba15e03, (q31_t)0xd12d4fd9, (q31_t)0x6b982b97, (q31_t)0xd124bfa6, - (q31_t)0x6b8ef77d, (q31_t)0xd11c3142, (q31_t)0x6b85c1b5, (q31_t)0xd113a4ad, - (q31_t)0x6b7c8a3f, (q31_t)0xd10b19e7, (q31_t)0x6b73511c, (q31_t)0xd10290f0, - (q31_t)0x6b6a164d, (q31_t)0xd0fa09c9, (q31_t)0x6b60d9d0, (q31_t)0xd0f18472, - (q31_t)0x6b579ba8, (q31_t)0xd0e900ec, (q31_t)0x6b4e5bd4, (q31_t)0xd0e07f36, - (q31_t)0x6b451a55, (q31_t)0xd0d7ff51, (q31_t)0x6b3bd72a, (q31_t)0xd0cf813e, - (q31_t)0x6b329255, (q31_t)0xd0c704fd, (q31_t)0x6b294bd5, (q31_t)0xd0be8a8d, - (q31_t)0x6b2003ac, (q31_t)0xd0b611f1, (q31_t)0x6b16b9d9, (q31_t)0xd0ad9b26, - (q31_t)0x6b0d6e5c, (q31_t)0xd0a5262f, (q31_t)0x6b042137, (q31_t)0xd09cb30b, - (q31_t)0x6afad269, (q31_t)0xd09441bb, (q31_t)0x6af181f3, (q31_t)0xd08bd23f, - (q31_t)0x6ae82fd5, (q31_t)0xd0836497, (q31_t)0x6adedc10, (q31_t)0xd07af8c4, - (q31_t)0x6ad586a3, (q31_t)0xd0728ec6, (q31_t)0x6acc2f90, (q31_t)0xd06a269d, - (q31_t)0x6ac2d6d6, (q31_t)0xd061c04a, (q31_t)0x6ab97c77, (q31_t)0xd0595bcd, - (q31_t)0x6ab02071, (q31_t)0xd050f926, (q31_t)0x6aa6c2c6, (q31_t)0xd0489856, - (q31_t)0x6a9d6377, (q31_t)0xd040395d, (q31_t)0x6a940283, (q31_t)0xd037dc3b, - (q31_t)0x6a8a9fea, (q31_t)0xd02f80f1, (q31_t)0x6a813bae, (q31_t)0xd027277e, - (q31_t)0x6a77d5ce, (q31_t)0xd01ecfe4, (q31_t)0x6a6e6e4b, (q31_t)0xd0167a22, - (q31_t)0x6a650525, (q31_t)0xd00e2639, (q31_t)0x6a5b9a5d, (q31_t)0xd005d42a, - (q31_t)0x6a522df3, (q31_t)0xcffd83f4, (q31_t)0x6a48bfe7, (q31_t)0xcff53597, - (q31_t)0x6a3f503a, (q31_t)0xcfece915, (q31_t)0x6a35deeb, (q31_t)0xcfe49e6d, - (q31_t)0x6a2c6bfd, (q31_t)0xcfdc55a1, (q31_t)0x6a22f76e, (q31_t)0xcfd40eaf, - (q31_t)0x6a19813f, (q31_t)0xcfcbc999, (q31_t)0x6a100970, (q31_t)0xcfc3865e, - (q31_t)0x6a069003, (q31_t)0xcfbb4500, (q31_t)0x69fd14f6, (q31_t)0xcfb3057d, - (q31_t)0x69f3984c, (q31_t)0xcfaac7d8, (q31_t)0x69ea1a03, (q31_t)0xcfa28c10, - (q31_t)0x69e09a1c, (q31_t)0xcf9a5225, (q31_t)0x69d71899, (q31_t)0xcf921a17, - (q31_t)0x69cd9578, (q31_t)0xcf89e3e8, (q31_t)0x69c410ba, (q31_t)0xcf81af97, - (q31_t)0x69ba8a61, (q31_t)0xcf797d24, (q31_t)0x69b1026c, (q31_t)0xcf714c91, - (q31_t)0x69a778db, (q31_t)0xcf691ddd, (q31_t)0x699dedaf, (q31_t)0xcf60f108, - (q31_t)0x699460e8, (q31_t)0xcf58c613, (q31_t)0x698ad287, (q31_t)0xcf509cfe, - (q31_t)0x6981428c, (q31_t)0xcf4875ca, (q31_t)0x6977b0f7, (q31_t)0xcf405077, - (q31_t)0x696e1dc9, (q31_t)0xcf382d05, (q31_t)0x69648902, (q31_t)0xcf300b74, - (q31_t)0x695af2a3, (q31_t)0xcf27ebc5, (q31_t)0x69515aab, (q31_t)0xcf1fcdf8, - (q31_t)0x6947c11c, (q31_t)0xcf17b20d, (q31_t)0x693e25f5, (q31_t)0xcf0f9805, - (q31_t)0x69348937, (q31_t)0xcf077fe1, (q31_t)0x692aeae3, (q31_t)0xceff699f, - (q31_t)0x69214af8, (q31_t)0xcef75541, (q31_t)0x6917a977, (q31_t)0xceef42c7, - (q31_t)0x690e0661, (q31_t)0xcee73231, (q31_t)0x690461b5, (q31_t)0xcedf2380, - (q31_t)0x68fabb75, (q31_t)0xced716b4, (q31_t)0x68f113a0, (q31_t)0xcecf0bcd, - (q31_t)0x68e76a37, (q31_t)0xcec702cb, (q31_t)0x68ddbf3b, (q31_t)0xcebefbb0, - (q31_t)0x68d412ab, (q31_t)0xceb6f67a, (q31_t)0x68ca6488, (q31_t)0xceaef32b, - (q31_t)0x68c0b4d2, (q31_t)0xcea6f1c2, (q31_t)0x68b7038b, (q31_t)0xce9ef241, - (q31_t)0x68ad50b1, (q31_t)0xce96f4a7, (q31_t)0x68a39c46, (q31_t)0xce8ef8f4, - (q31_t)0x6899e64a, (q31_t)0xce86ff2a, (q31_t)0x68902ebd, (q31_t)0xce7f0748, - (q31_t)0x688675a0, (q31_t)0xce77114e, (q31_t)0x687cbaf3, (q31_t)0xce6f1d3d, - (q31_t)0x6872feb6, (q31_t)0xce672b16, (q31_t)0x686940ea, (q31_t)0xce5f3ad8, - (q31_t)0x685f8190, (q31_t)0xce574c84, (q31_t)0x6855c0a6, (q31_t)0xce4f6019, - (q31_t)0x684bfe2f, (q31_t)0xce47759a, (q31_t)0x68423a2a, (q31_t)0xce3f8d05, - (q31_t)0x68387498, (q31_t)0xce37a65b, (q31_t)0x682ead78, (q31_t)0xce2fc19c, - (q31_t)0x6824e4cc, (q31_t)0xce27dec9, (q31_t)0x681b1a94, (q31_t)0xce1ffde2, - (q31_t)0x68114ed0, (q31_t)0xce181ee8, (q31_t)0x68078181, (q31_t)0xce1041d9, - (q31_t)0x67fdb2a7, (q31_t)0xce0866b8, (q31_t)0x67f3e241, (q31_t)0xce008d84, - (q31_t)0x67ea1052, (q31_t)0xcdf8b63d, (q31_t)0x67e03cd8, (q31_t)0xcdf0e0e4, - (q31_t)0x67d667d5, (q31_t)0xcde90d79, (q31_t)0x67cc9149, (q31_t)0xcde13bfd, - (q31_t)0x67c2b934, (q31_t)0xcdd96c6f, (q31_t)0x67b8df97, (q31_t)0xcdd19ed0, - (q31_t)0x67af0472, (q31_t)0xcdc9d320, (q31_t)0x67a527c4, (q31_t)0xcdc20960, - (q31_t)0x679b4990, (q31_t)0xcdba4190, (q31_t)0x679169d5, (q31_t)0xcdb27bb0, - (q31_t)0x67878893, (q31_t)0xcdaab7c0, (q31_t)0x677da5cb, (q31_t)0xcda2f5c2, - (q31_t)0x6773c17d, (q31_t)0xcd9b35b4, (q31_t)0x6769dbaa, (q31_t)0xcd937798, - (q31_t)0x675ff452, (q31_t)0xcd8bbb6d, (q31_t)0x67560b76, (q31_t)0xcd840134, - (q31_t)0x674c2115, (q31_t)0xcd7c48ee, (q31_t)0x67423530, (q31_t)0xcd74929a, - (q31_t)0x673847c8, (q31_t)0xcd6cde39, (q31_t)0x672e58dc, (q31_t)0xcd652bcb, - (q31_t)0x6724686e, (q31_t)0xcd5d7b50, (q31_t)0x671a767e, (q31_t)0xcd55ccca, - (q31_t)0x6710830c, (q31_t)0xcd4e2037, (q31_t)0x67068e18, (q31_t)0xcd467599, - (q31_t)0x66fc97a3, (q31_t)0xcd3eccef, (q31_t)0x66f29fad, (q31_t)0xcd37263a, - (q31_t)0x66e8a637, (q31_t)0xcd2f817b, (q31_t)0x66deab41, (q31_t)0xcd27deb0, - (q31_t)0x66d4aecb, (q31_t)0xcd203ddc, (q31_t)0x66cab0d6, (q31_t)0xcd189efe, - (q31_t)0x66c0b162, (q31_t)0xcd110216, (q31_t)0x66b6b070, (q31_t)0xcd096725, - (q31_t)0x66acadff, (q31_t)0xcd01ce2b, (q31_t)0x66a2aa11, (q31_t)0xccfa3729, - (q31_t)0x6698a4a6, (q31_t)0xccf2a21d, (q31_t)0x668e9dbd, (q31_t)0xcceb0f0a, - (q31_t)0x66849558, (q31_t)0xcce37def, (q31_t)0x667a8b77, (q31_t)0xccdbeecc, - (q31_t)0x6670801a, (q31_t)0xccd461a2, (q31_t)0x66667342, (q31_t)0xccccd671, - (q31_t)0x665c64ef, (q31_t)0xccc54d3a, (q31_t)0x66525521, (q31_t)0xccbdc5fc, - (q31_t)0x664843d9, (q31_t)0xccb640b8, (q31_t)0x663e3117, (q31_t)0xccaebd6e, - (q31_t)0x66341cdb, (q31_t)0xcca73c1e, (q31_t)0x662a0727, (q31_t)0xcc9fbcca, - (q31_t)0x661feffa, (q31_t)0xcc983f70, (q31_t)0x6615d754, (q31_t)0xcc90c412, - (q31_t)0x660bbd37, (q31_t)0xcc894aaf, (q31_t)0x6601a1a2, (q31_t)0xcc81d349, - (q31_t)0x65f78497, (q31_t)0xcc7a5dde, (q31_t)0x65ed6614, (q31_t)0xcc72ea70, - (q31_t)0x65e3461b, (q31_t)0xcc6b78ff, (q31_t)0x65d924ac, (q31_t)0xcc64098b, - (q31_t)0x65cf01c8, (q31_t)0xcc5c9c14, (q31_t)0x65c4dd6e, (q31_t)0xcc55309b, - (q31_t)0x65bab7a0, (q31_t)0xcc4dc720, (q31_t)0x65b0905d, (q31_t)0xcc465fa3, - (q31_t)0x65a667a7, (q31_t)0xcc3efa25, (q31_t)0x659c3d7c, (q31_t)0xcc3796a5, - (q31_t)0x659211df, (q31_t)0xcc303524, (q31_t)0x6587e4cf, (q31_t)0xcc28d5a3, - (q31_t)0x657db64c, (q31_t)0xcc217822, (q31_t)0x65738657, (q31_t)0xcc1a1ca0, - (q31_t)0x656954f1, (q31_t)0xcc12c31f, (q31_t)0x655f2219, (q31_t)0xcc0b6b9e, - (q31_t)0x6554edd1, (q31_t)0xcc04161e, (q31_t)0x654ab818, (q31_t)0xcbfcc29f, - (q31_t)0x654080ef, (q31_t)0xcbf57121, (q31_t)0x65364857, (q31_t)0xcbee21a5, - (q31_t)0x652c0e4f, (q31_t)0xcbe6d42b, (q31_t)0x6521d2d8, (q31_t)0xcbdf88b3, - (q31_t)0x651795f3, (q31_t)0xcbd83f3d, (q31_t)0x650d57a0, (q31_t)0xcbd0f7ca, - (q31_t)0x650317df, (q31_t)0xcbc9b25a, (q31_t)0x64f8d6b0, (q31_t)0xcbc26eee, - (q31_t)0x64ee9415, (q31_t)0xcbbb2d85, (q31_t)0x64e4500e, (q31_t)0xcbb3ee20, - (q31_t)0x64da0a9a, (q31_t)0xcbacb0bf, (q31_t)0x64cfc3ba, (q31_t)0xcba57563, - (q31_t)0x64c57b6f, (q31_t)0xcb9e3c0b, (q31_t)0x64bb31ba, (q31_t)0xcb9704b9, - (q31_t)0x64b0e699, (q31_t)0xcb8fcf6b, (q31_t)0x64a69a0f, (q31_t)0xcb889c23, - (q31_t)0x649c4c1b, (q31_t)0xcb816ae1, (q31_t)0x6491fcbe, (q31_t)0xcb7a3ba5, - (q31_t)0x6487abf7, (q31_t)0xcb730e70, (q31_t)0x647d59c8, (q31_t)0xcb6be341, - (q31_t)0x64730631, (q31_t)0xcb64ba19, (q31_t)0x6468b132, (q31_t)0xcb5d92f8, - (q31_t)0x645e5acc, (q31_t)0xcb566ddf, (q31_t)0x645402ff, (q31_t)0xcb4f4acd, - (q31_t)0x6449a9cc, (q31_t)0xcb4829c4, (q31_t)0x643f4f32, (q31_t)0xcb410ac3, - (q31_t)0x6434f332, (q31_t)0xcb39edca, (q31_t)0x642a95ce, (q31_t)0xcb32d2da, - (q31_t)0x64203704, (q31_t)0xcb2bb9f4, (q31_t)0x6415d6d5, (q31_t)0xcb24a316, - (q31_t)0x640b7543, (q31_t)0xcb1d8e43, (q31_t)0x6401124d, (q31_t)0xcb167b79, - (q31_t)0x63f6adf3, (q31_t)0xcb0f6aba, (q31_t)0x63ec4837, (q31_t)0xcb085c05, - (q31_t)0x63e1e117, (q31_t)0xcb014f5b, (q31_t)0x63d77896, (q31_t)0xcafa44bc, - (q31_t)0x63cd0eb3, (q31_t)0xcaf33c28, (q31_t)0x63c2a36f, (q31_t)0xcaec35a0, - (q31_t)0x63b836ca, (q31_t)0xcae53123, (q31_t)0x63adc8c4, (q31_t)0xcade2eb3, - (q31_t)0x63a3595e, (q31_t)0xcad72e4f, (q31_t)0x6398e898, (q31_t)0xcad02ff8, - (q31_t)0x638e7673, (q31_t)0xcac933ae, (q31_t)0x638402ef, (q31_t)0xcac23971, - (q31_t)0x63798e0d, (q31_t)0xcabb4141, (q31_t)0x636f17cc, (q31_t)0xcab44b1f, - (q31_t)0x6364a02e, (q31_t)0xcaad570c, (q31_t)0x635a2733, (q31_t)0xcaa66506, - (q31_t)0x634facda, (q31_t)0xca9f750f, (q31_t)0x63453125, (q31_t)0xca988727, - (q31_t)0x633ab414, (q31_t)0xca919b4e, (q31_t)0x633035a7, (q31_t)0xca8ab184, - (q31_t)0x6325b5df, (q31_t)0xca83c9ca, (q31_t)0x631b34bc, (q31_t)0xca7ce420, - (q31_t)0x6310b23e, (q31_t)0xca760086, (q31_t)0x63062e67, (q31_t)0xca6f1efc, - (q31_t)0x62fba936, (q31_t)0xca683f83, (q31_t)0x62f122ab, (q31_t)0xca61621b, - (q31_t)0x62e69ac8, (q31_t)0xca5a86c4, (q31_t)0x62dc118c, (q31_t)0xca53ad7e, - (q31_t)0x62d186f8, (q31_t)0xca4cd64b, (q31_t)0x62c6fb0c, (q31_t)0xca460129, - (q31_t)0x62bc6dca, (q31_t)0xca3f2e19, (q31_t)0x62b1df30, (q31_t)0xca385d1d, - (q31_t)0x62a74f40, (q31_t)0xca318e32, (q31_t)0x629cbdfa, (q31_t)0xca2ac15b, - (q31_t)0x62922b5e, (q31_t)0xca23f698, (q31_t)0x6287976e, (q31_t)0xca1d2de7, - (q31_t)0x627d0228, (q31_t)0xca16674b, (q31_t)0x62726b8e, (q31_t)0xca0fa2c3, - (q31_t)0x6267d3a0, (q31_t)0xca08e04f, (q31_t)0x625d3a5e, (q31_t)0xca021fef, - (q31_t)0x62529fca, (q31_t)0xc9fb61a5, (q31_t)0x624803e2, (q31_t)0xc9f4a570, - (q31_t)0x623d66a8, (q31_t)0xc9edeb50, (q31_t)0x6232c81c, (q31_t)0xc9e73346, - (q31_t)0x6228283f, (q31_t)0xc9e07d51, (q31_t)0x621d8711, (q31_t)0xc9d9c973, - (q31_t)0x6212e492, (q31_t)0xc9d317ab, (q31_t)0x620840c2, (q31_t)0xc9cc67fa, - (q31_t)0x61fd9ba3, (q31_t)0xc9c5ba60, (q31_t)0x61f2f534, (q31_t)0xc9bf0edd, - (q31_t)0x61e84d76, (q31_t)0xc9b86572, (q31_t)0x61dda46a, (q31_t)0xc9b1be1e, - (q31_t)0x61d2fa0f, (q31_t)0xc9ab18e3, (q31_t)0x61c84e67, (q31_t)0xc9a475bf, - (q31_t)0x61bda171, (q31_t)0xc99dd4b4, (q31_t)0x61b2f32e, (q31_t)0xc99735c2, - (q31_t)0x61a8439e, (q31_t)0xc99098e9, (q31_t)0x619d92c2, (q31_t)0xc989fe29, - (q31_t)0x6192e09b, (q31_t)0xc9836582, (q31_t)0x61882d28, (q31_t)0xc97ccef5, - (q31_t)0x617d786a, (q31_t)0xc9763a83, (q31_t)0x6172c262, (q31_t)0xc96fa82a, - (q31_t)0x61680b0f, (q31_t)0xc96917ec, (q31_t)0x615d5273, (q31_t)0xc96289c9, - (q31_t)0x6152988d, (q31_t)0xc95bfdc1, (q31_t)0x6147dd5f, (q31_t)0xc95573d4, - (q31_t)0x613d20e8, (q31_t)0xc94eec03, (q31_t)0x61326329, (q31_t)0xc948664d, - (q31_t)0x6127a423, (q31_t)0xc941e2b4, (q31_t)0x611ce3d5, (q31_t)0xc93b6137, - (q31_t)0x61122240, (q31_t)0xc934e1d6, (q31_t)0x61075f65, (q31_t)0xc92e6492, - (q31_t)0x60fc9b44, (q31_t)0xc927e96b, (q31_t)0x60f1d5de, (q31_t)0xc9217062, - (q31_t)0x60e70f32, (q31_t)0xc91af976, (q31_t)0x60dc4742, (q31_t)0xc91484a8, - (q31_t)0x60d17e0d, (q31_t)0xc90e11f7, (q31_t)0x60c6b395, (q31_t)0xc907a166, - (q31_t)0x60bbe7d8, (q31_t)0xc90132f2, (q31_t)0x60b11ad9, (q31_t)0xc8fac69e, - (q31_t)0x60a64c97, (q31_t)0xc8f45c68, (q31_t)0x609b7d13, (q31_t)0xc8edf452, - (q31_t)0x6090ac4d, (q31_t)0xc8e78e5b, (q31_t)0x6085da46, (q31_t)0xc8e12a84, - (q31_t)0x607b06fe, (q31_t)0xc8dac8cd, (q31_t)0x60703275, (q31_t)0xc8d46936, - (q31_t)0x60655cac, (q31_t)0xc8ce0bc0, (q31_t)0x605a85a3, (q31_t)0xc8c7b06b, - (q31_t)0x604fad5b, (q31_t)0xc8c15736, (q31_t)0x6044d3d4, (q31_t)0xc8bb0023, - (q31_t)0x6039f90f, (q31_t)0xc8b4ab32, (q31_t)0x602f1d0b, (q31_t)0xc8ae5862, - (q31_t)0x60243fca, (q31_t)0xc8a807b4, (q31_t)0x6019614c, (q31_t)0xc8a1b928, - (q31_t)0x600e8190, (q31_t)0xc89b6cbf, (q31_t)0x6003a099, (q31_t)0xc8952278, - (q31_t)0x5ff8be65, (q31_t)0xc88eda54, (q31_t)0x5feddaf6, (q31_t)0xc8889454, - (q31_t)0x5fe2f64c, (q31_t)0xc8825077, (q31_t)0x5fd81067, (q31_t)0xc87c0ebd, - (q31_t)0x5fcd2948, (q31_t)0xc875cf28, (q31_t)0x5fc240ef, (q31_t)0xc86f91b7, - (q31_t)0x5fb7575c, (q31_t)0xc869566a, (q31_t)0x5fac6c91, (q31_t)0xc8631d42, - (q31_t)0x5fa1808c, (q31_t)0xc85ce63e, (q31_t)0x5f969350, (q31_t)0xc856b160, - (q31_t)0x5f8ba4dc, (q31_t)0xc8507ea7, (q31_t)0x5f80b531, (q31_t)0xc84a4e14, - (q31_t)0x5f75c44e, (q31_t)0xc8441fa6, (q31_t)0x5f6ad235, (q31_t)0xc83df35f, - (q31_t)0x5f5fdee6, (q31_t)0xc837c93e, (q31_t)0x5f54ea62, (q31_t)0xc831a143, - (q31_t)0x5f49f4a8, (q31_t)0xc82b7b70, (q31_t)0x5f3efdb9, (q31_t)0xc82557c3, - (q31_t)0x5f340596, (q31_t)0xc81f363d, (q31_t)0x5f290c3f, (q31_t)0xc81916df, - (q31_t)0x5f1e11b5, (q31_t)0xc812f9a9, (q31_t)0x5f1315f7, (q31_t)0xc80cde9b, - (q31_t)0x5f081907, (q31_t)0xc806c5b5, (q31_t)0x5efd1ae4, (q31_t)0xc800aef7, - (q31_t)0x5ef21b90, (q31_t)0xc7fa9a62, (q31_t)0x5ee71b0a, (q31_t)0xc7f487f6, - (q31_t)0x5edc1953, (q31_t)0xc7ee77b3, (q31_t)0x5ed1166b, (q31_t)0xc7e8699a, - (q31_t)0x5ec61254, (q31_t)0xc7e25daa, (q31_t)0x5ebb0d0d, (q31_t)0xc7dc53e3, - (q31_t)0x5eb00696, (q31_t)0xc7d64c47, (q31_t)0x5ea4fef0, (q31_t)0xc7d046d6, - (q31_t)0x5e99f61d, (q31_t)0xc7ca438f, (q31_t)0x5e8eec1b, (q31_t)0xc7c44272, - (q31_t)0x5e83e0eb, (q31_t)0xc7be4381, (q31_t)0x5e78d48e, (q31_t)0xc7b846ba, - (q31_t)0x5e6dc705, (q31_t)0xc7b24c20, (q31_t)0x5e62b84f, (q31_t)0xc7ac53b1, - (q31_t)0x5e57a86d, (q31_t)0xc7a65d6e, (q31_t)0x5e4c9760, (q31_t)0xc7a06957, - (q31_t)0x5e418528, (q31_t)0xc79a776c, (q31_t)0x5e3671c5, (q31_t)0xc79487ae, - (q31_t)0x5e2b5d38, (q31_t)0xc78e9a1d, (q31_t)0x5e204781, (q31_t)0xc788aeb9, - (q31_t)0x5e1530a1, (q31_t)0xc782c582, (q31_t)0x5e0a1898, (q31_t)0xc77cde79, - (q31_t)0x5dfeff67, (q31_t)0xc776f99d, (q31_t)0x5df3e50d, (q31_t)0xc77116f0, - (q31_t)0x5de8c98c, (q31_t)0xc76b3671, (q31_t)0x5dddace4, (q31_t)0xc7655820, - (q31_t)0x5dd28f15, (q31_t)0xc75f7bfe, (q31_t)0x5dc7701f, (q31_t)0xc759a20a, - (q31_t)0x5dbc5004, (q31_t)0xc753ca46, (q31_t)0x5db12ec3, (q31_t)0xc74df4b1, - (q31_t)0x5da60c5d, (q31_t)0xc748214c, (q31_t)0x5d9ae8d2, (q31_t)0xc7425016, - (q31_t)0x5d8fc424, (q31_t)0xc73c8111, (q31_t)0x5d849e51, (q31_t)0xc736b43c, - (q31_t)0x5d79775c, (q31_t)0xc730e997, (q31_t)0x5d6e4f43, (q31_t)0xc72b2123, - (q31_t)0x5d632608, (q31_t)0xc7255ae0, (q31_t)0x5d57fbaa, (q31_t)0xc71f96ce, - (q31_t)0x5d4cd02c, (q31_t)0xc719d4ed, (q31_t)0x5d41a38c, (q31_t)0xc714153e, - (q31_t)0x5d3675cb, (q31_t)0xc70e57c0, (q31_t)0x5d2b46ea, (q31_t)0xc7089c75, - (q31_t)0x5d2016e9, (q31_t)0xc702e35c, (q31_t)0x5d14e5c9, (q31_t)0xc6fd2c75, - (q31_t)0x5d09b389, (q31_t)0xc6f777c1, (q31_t)0x5cfe802b, (q31_t)0xc6f1c540, - (q31_t)0x5cf34baf, (q31_t)0xc6ec14f2, (q31_t)0x5ce81615, (q31_t)0xc6e666d7, - (q31_t)0x5cdcdf5e, (q31_t)0xc6e0baf0, (q31_t)0x5cd1a78a, (q31_t)0xc6db113d, - (q31_t)0x5cc66e99, (q31_t)0xc6d569be, (q31_t)0x5cbb348d, (q31_t)0xc6cfc472, - (q31_t)0x5caff965, (q31_t)0xc6ca215c, (q31_t)0x5ca4bd21, (q31_t)0xc6c4807a, - (q31_t)0x5c997fc4, (q31_t)0xc6bee1cd, (q31_t)0x5c8e414b, (q31_t)0xc6b94554, - (q31_t)0x5c8301b9, (q31_t)0xc6b3ab12, (q31_t)0x5c77c10e, (q31_t)0xc6ae1304, - (q31_t)0x5c6c7f4a, (q31_t)0xc6a87d2d, (q31_t)0x5c613c6d, (q31_t)0xc6a2e98b, - (q31_t)0x5c55f878, (q31_t)0xc69d5820, (q31_t)0x5c4ab36b, (q31_t)0xc697c8eb, - (q31_t)0x5c3f6d47, (q31_t)0xc6923bec, (q31_t)0x5c34260c, (q31_t)0xc68cb124, - (q31_t)0x5c28ddbb, (q31_t)0xc6872894, (q31_t)0x5c1d9454, (q31_t)0xc681a23a, - (q31_t)0x5c1249d8, (q31_t)0xc67c1e18, (q31_t)0x5c06fe46, (q31_t)0xc6769c2e, - (q31_t)0x5bfbb1a0, (q31_t)0xc6711c7b, (q31_t)0x5bf063e6, (q31_t)0xc66b9f01, - (q31_t)0x5be51518, (q31_t)0xc66623be, (q31_t)0x5bd9c537, (q31_t)0xc660aab5, - (q31_t)0x5bce7442, (q31_t)0xc65b33e4, (q31_t)0x5bc3223c, (q31_t)0xc655bf4c, - (q31_t)0x5bb7cf23, (q31_t)0xc6504ced, (q31_t)0x5bac7af9, (q31_t)0xc64adcc7, - (q31_t)0x5ba125bd, (q31_t)0xc6456edb, (q31_t)0x5b95cf71, (q31_t)0xc6400329, - (q31_t)0x5b8a7815, (q31_t)0xc63a99b1, (q31_t)0x5b7f1fa9, (q31_t)0xc6353273, - (q31_t)0x5b73c62d, (q31_t)0xc62fcd6f, (q31_t)0x5b686ba3, (q31_t)0xc62a6aa6, - (q31_t)0x5b5d100a, (q31_t)0xc6250a18, (q31_t)0x5b51b363, (q31_t)0xc61fabc4, - (q31_t)0x5b4655ae, (q31_t)0xc61a4fac, (q31_t)0x5b3af6ec, (q31_t)0xc614f5cf, - (q31_t)0x5b2f971e, (q31_t)0xc60f9e2e, (q31_t)0x5b243643, (q31_t)0xc60a48c9, - (q31_t)0x5b18d45c, (q31_t)0xc604f5a0, (q31_t)0x5b0d716a, (q31_t)0xc5ffa4b3, - (q31_t)0x5b020d6c, (q31_t)0xc5fa5603, (q31_t)0x5af6a865, (q31_t)0xc5f5098f, - (q31_t)0x5aeb4253, (q31_t)0xc5efbf58, (q31_t)0x5adfdb37, (q31_t)0xc5ea775e, - (q31_t)0x5ad47312, (q31_t)0xc5e531a1, (q31_t)0x5ac909e5, (q31_t)0xc5dfee22, - (q31_t)0x5abd9faf, (q31_t)0xc5daace1, (q31_t)0x5ab23471, (q31_t)0xc5d56ddd, - (q31_t)0x5aa6c82b, (q31_t)0xc5d03118, (q31_t)0x5a9b5adf, (q31_t)0xc5caf690, - (q31_t)0x5a8fec8c, (q31_t)0xc5c5be47, (q31_t)0x5a847d33, (q31_t)0xc5c0883d, - (q31_t)0x5a790cd4, (q31_t)0xc5bb5472, (q31_t)0x5a6d9b70, (q31_t)0xc5b622e6, - (q31_t)0x5a622907, (q31_t)0xc5b0f399, (q31_t)0x5a56b599, (q31_t)0xc5abc68c, - (q31_t)0x5a4b4128, (q31_t)0xc5a69bbe, (q31_t)0x5a3fcbb3, (q31_t)0xc5a17330, - (q31_t)0x5a34553b, (q31_t)0xc59c4ce3, (q31_t)0x5a28ddc0, (q31_t)0xc59728d5, - (q31_t)0x5a1d6544, (q31_t)0xc5920708, (q31_t)0x5a11ebc5, (q31_t)0xc58ce77c, - (q31_t)0x5a067145, (q31_t)0xc587ca31, (q31_t)0x59faf5c5, (q31_t)0xc582af26, - (q31_t)0x59ef7944, (q31_t)0xc57d965d, (q31_t)0x59e3fbc3, (q31_t)0xc5787fd6, - (q31_t)0x59d87d42, (q31_t)0xc5736b90, (q31_t)0x59ccfdc2, (q31_t)0xc56e598c, - (q31_t)0x59c17d44, (q31_t)0xc56949ca, (q31_t)0x59b5fbc8, (q31_t)0xc5643c4a, - (q31_t)0x59aa794d, (q31_t)0xc55f310d, (q31_t)0x599ef5d6, (q31_t)0xc55a2812, - (q31_t)0x59937161, (q31_t)0xc555215a, (q31_t)0x5987ebf0, (q31_t)0xc5501ce5, - (q31_t)0x597c6584, (q31_t)0xc54b1ab4, (q31_t)0x5970de1b, (q31_t)0xc5461ac6, - (q31_t)0x596555b8, (q31_t)0xc5411d1b, (q31_t)0x5959cc5a, (q31_t)0xc53c21b4, - (q31_t)0x594e4201, (q31_t)0xc5372891, (q31_t)0x5942b6af, (q31_t)0xc53231b3, - (q31_t)0x59372a64, (q31_t)0xc52d3d18, (q31_t)0x592b9d1f, (q31_t)0xc5284ac3, - (q31_t)0x59200ee3, (q31_t)0xc5235ab2, (q31_t)0x59147fae, (q31_t)0xc51e6ce6, - (q31_t)0x5908ef82, (q31_t)0xc519815f, (q31_t)0x58fd5e5f, (q31_t)0xc514981d, - (q31_t)0x58f1cc45, (q31_t)0xc50fb121, (q31_t)0x58e63935, (q31_t)0xc50acc6b, - (q31_t)0x58daa52f, (q31_t)0xc505e9fb, (q31_t)0x58cf1034, (q31_t)0xc50109d0, - (q31_t)0x58c37a44, (q31_t)0xc4fc2bec, (q31_t)0x58b7e35f, (q31_t)0xc4f7504e, - (q31_t)0x58ac4b87, (q31_t)0xc4f276f7, (q31_t)0x58a0b2bb, (q31_t)0xc4ed9fe7, - (q31_t)0x589518fc, (q31_t)0xc4e8cb1e, (q31_t)0x58897e4a, (q31_t)0xc4e3f89c, - (q31_t)0x587de2a7, (q31_t)0xc4df2862, (q31_t)0x58724611, (q31_t)0xc4da5a6f, - (q31_t)0x5866a88a, (q31_t)0xc4d58ec3, (q31_t)0x585b0a13, (q31_t)0xc4d0c560, - (q31_t)0x584f6aab, (q31_t)0xc4cbfe45, (q31_t)0x5843ca53, (q31_t)0xc4c73972, - (q31_t)0x5838290c, (q31_t)0xc4c276e8, (q31_t)0x582c86d5, (q31_t)0xc4bdb6a6, - (q31_t)0x5820e3b0, (q31_t)0xc4b8f8ad, (q31_t)0x58153f9d, (q31_t)0xc4b43cfd, - (q31_t)0x58099a9c, (q31_t)0xc4af8397, (q31_t)0x57fdf4ae, (q31_t)0xc4aacc7a, - (q31_t)0x57f24dd3, (q31_t)0xc4a617a6, (q31_t)0x57e6a60c, (q31_t)0xc4a1651c, - (q31_t)0x57dafd59, (q31_t)0xc49cb4dd, (q31_t)0x57cf53bb, (q31_t)0xc49806e7, - (q31_t)0x57c3a931, (q31_t)0xc4935b3c, (q31_t)0x57b7fdbd, (q31_t)0xc48eb1db, - (q31_t)0x57ac515f, (q31_t)0xc48a0ac4, (q31_t)0x57a0a417, (q31_t)0xc48565f9, - (q31_t)0x5794f5e6, (q31_t)0xc480c379, (q31_t)0x578946cc, (q31_t)0xc47c2344, - (q31_t)0x577d96ca, (q31_t)0xc477855a, (q31_t)0x5771e5e0, (q31_t)0xc472e9bc, - (q31_t)0x5766340f, (q31_t)0xc46e5069, (q31_t)0x575a8157, (q31_t)0xc469b963, - (q31_t)0x574ecdb8, (q31_t)0xc46524a9, (q31_t)0x57431933, (q31_t)0xc460923b, - (q31_t)0x573763c9, (q31_t)0xc45c0219, (q31_t)0x572bad7a, (q31_t)0xc4577444, - (q31_t)0x571ff646, (q31_t)0xc452e8bc, (q31_t)0x57143e2d, (q31_t)0xc44e5f80, - (q31_t)0x57088531, (q31_t)0xc449d892, (q31_t)0x56fccb51, (q31_t)0xc44553f2, - (q31_t)0x56f1108f, (q31_t)0xc440d19e, (q31_t)0x56e554ea, (q31_t)0xc43c5199, - (q31_t)0x56d99864, (q31_t)0xc437d3e1, (q31_t)0x56cddafb, (q31_t)0xc4335877, - (q31_t)0x56c21cb2, (q31_t)0xc42edf5c, (q31_t)0x56b65d88, (q31_t)0xc42a688f, - (q31_t)0x56aa9d7e, (q31_t)0xc425f410, (q31_t)0x569edc94, (q31_t)0xc42181e0, - (q31_t)0x56931acb, (q31_t)0xc41d11ff, (q31_t)0x56875823, (q31_t)0xc418a46d, - (q31_t)0x567b949d, (q31_t)0xc414392b, (q31_t)0x566fd039, (q31_t)0xc40fd037, - (q31_t)0x56640af7, (q31_t)0xc40b6994, (q31_t)0x565844d8, (q31_t)0xc4070540, - (q31_t)0x564c7ddd, (q31_t)0xc402a33c, (q31_t)0x5640b606, (q31_t)0xc3fe4388, - (q31_t)0x5634ed53, (q31_t)0xc3f9e624, (q31_t)0x562923c5, (q31_t)0xc3f58b10, - (q31_t)0x561d595d, (q31_t)0xc3f1324e, (q31_t)0x56118e1a, (q31_t)0xc3ecdbdc, - (q31_t)0x5605c1fd, (q31_t)0xc3e887bb, (q31_t)0x55f9f507, (q31_t)0xc3e435ea, - (q31_t)0x55ee2738, (q31_t)0xc3dfe66c, (q31_t)0x55e25890, (q31_t)0xc3db993e, - (q31_t)0x55d68911, (q31_t)0xc3d74e62, (q31_t)0x55cab8ba, (q31_t)0xc3d305d8, - (q31_t)0x55bee78c, (q31_t)0xc3cebfa0, (q31_t)0x55b31587, (q31_t)0xc3ca7bba, - (q31_t)0x55a742ac, (q31_t)0xc3c63a26, (q31_t)0x559b6efb, (q31_t)0xc3c1fae5, - (q31_t)0x558f9a76, (q31_t)0xc3bdbdf6, (q31_t)0x5583c51b, (q31_t)0xc3b9835a, - (q31_t)0x5577eeec, (q31_t)0xc3b54b11, (q31_t)0x556c17e9, (q31_t)0xc3b1151b, - (q31_t)0x55604013, (q31_t)0xc3ace178, (q31_t)0x5554676a, (q31_t)0xc3a8b028, - (q31_t)0x55488dee, (q31_t)0xc3a4812c, (q31_t)0x553cb3a0, (q31_t)0xc3a05484, - (q31_t)0x5530d881, (q31_t)0xc39c2a2f, (q31_t)0x5524fc90, (q31_t)0xc398022f, - (q31_t)0x55191fcf, (q31_t)0xc393dc82, (q31_t)0x550d423d, (q31_t)0xc38fb92a, - (q31_t)0x550163dc, (q31_t)0xc38b9827, (q31_t)0x54f584ac, (q31_t)0xc3877978, - (q31_t)0x54e9a4ac, (q31_t)0xc3835d1e, (q31_t)0x54ddc3de, (q31_t)0xc37f4319, - (q31_t)0x54d1e242, (q31_t)0xc37b2b6a, (q31_t)0x54c5ffd9, (q31_t)0xc377160f, - (q31_t)0x54ba1ca3, (q31_t)0xc373030a, (q31_t)0x54ae38a0, (q31_t)0xc36ef25b, - (q31_t)0x54a253d1, (q31_t)0xc36ae401, (q31_t)0x54966e36, (q31_t)0xc366d7fd, - (q31_t)0x548a87d1, (q31_t)0xc362ce50, (q31_t)0x547ea0a0, (q31_t)0xc35ec6f8, - (q31_t)0x5472b8a5, (q31_t)0xc35ac1f7, (q31_t)0x5466cfe1, (q31_t)0xc356bf4d, - (q31_t)0x545ae653, (q31_t)0xc352bef9, (q31_t)0x544efbfc, (q31_t)0xc34ec0fc, - (q31_t)0x544310dd, (q31_t)0xc34ac556, (q31_t)0x543724f5, (q31_t)0xc346cc07, - (q31_t)0x542b3846, (q31_t)0xc342d510, (q31_t)0x541f4ad1, (q31_t)0xc33ee070, - (q31_t)0x54135c94, (q31_t)0xc33aee27, (q31_t)0x54076d91, (q31_t)0xc336fe37, - (q31_t)0x53fb7dc9, (q31_t)0xc333109e, (q31_t)0x53ef8d3c, (q31_t)0xc32f255e, - (q31_t)0x53e39be9, (q31_t)0xc32b3c75, (q31_t)0x53d7a9d3, (q31_t)0xc32755e5, - (q31_t)0x53cbb6f8, (q31_t)0xc32371ae, (q31_t)0x53bfc35b, (q31_t)0xc31f8fcf, - (q31_t)0x53b3cefa, (q31_t)0xc31bb049, (q31_t)0x53a7d9d7, (q31_t)0xc317d31c, - (q31_t)0x539be3f2, (q31_t)0xc313f848, (q31_t)0x538fed4b, (q31_t)0xc3101fce, - (q31_t)0x5383f5e3, (q31_t)0xc30c49ad, (q31_t)0x5377fdbb, (q31_t)0xc30875e5, - (q31_t)0x536c04d2, (q31_t)0xc304a477, (q31_t)0x53600b2a, (q31_t)0xc300d563, - (q31_t)0x535410c3, (q31_t)0xc2fd08a9, (q31_t)0x5348159d, (q31_t)0xc2f93e4a, - (q31_t)0x533c19b8, (q31_t)0xc2f57644, (q31_t)0x53301d16, (q31_t)0xc2f1b099, - (q31_t)0x53241fb6, (q31_t)0xc2eded49, (q31_t)0x5318219a, (q31_t)0xc2ea2c53, - (q31_t)0x530c22c1, (q31_t)0xc2e66db8, (q31_t)0x5300232c, (q31_t)0xc2e2b178, - (q31_t)0x52f422db, (q31_t)0xc2def794, (q31_t)0x52e821cf, (q31_t)0xc2db400a, - (q31_t)0x52dc2009, (q31_t)0xc2d78add, (q31_t)0x52d01d89, (q31_t)0xc2d3d80a, - (q31_t)0x52c41a4f, (q31_t)0xc2d02794, (q31_t)0x52b8165b, (q31_t)0xc2cc7979, - (q31_t)0x52ac11af, (q31_t)0xc2c8cdbb, (q31_t)0x52a00c4b, (q31_t)0xc2c52459, - (q31_t)0x5294062f, (q31_t)0xc2c17d52, (q31_t)0x5287ff5b, (q31_t)0xc2bdd8a9, - (q31_t)0x527bf7d1, (q31_t)0xc2ba365c, (q31_t)0x526fef90, (q31_t)0xc2b6966c, - (q31_t)0x5263e699, (q31_t)0xc2b2f8d8, (q31_t)0x5257dced, (q31_t)0xc2af5da2, - (q31_t)0x524bd28c, (q31_t)0xc2abc4c9, (q31_t)0x523fc776, (q31_t)0xc2a82e4d, - (q31_t)0x5233bbac, (q31_t)0xc2a49a2e, (q31_t)0x5227af2e, (q31_t)0xc2a1086d, - (q31_t)0x521ba1fd, (q31_t)0xc29d790a, (q31_t)0x520f941a, (q31_t)0xc299ec05, - (q31_t)0x52038584, (q31_t)0xc296615d, (q31_t)0x51f7763c, (q31_t)0xc292d914, - (q31_t)0x51eb6643, (q31_t)0xc28f5329, (q31_t)0x51df5599, (q31_t)0xc28bcf9c, - (q31_t)0x51d3443f, (q31_t)0xc2884e6e, (q31_t)0x51c73235, (q31_t)0xc284cf9f, - (q31_t)0x51bb1f7c, (q31_t)0xc281532e, (q31_t)0x51af0c13, (q31_t)0xc27dd91c, - (q31_t)0x51a2f7fc, (q31_t)0xc27a616a, (q31_t)0x5196e337, (q31_t)0xc276ec16, - (q31_t)0x518acdc4, (q31_t)0xc2737922, (q31_t)0x517eb7a4, (q31_t)0xc270088e, - (q31_t)0x5172a0d7, (q31_t)0xc26c9a58, (q31_t)0x5166895f, (q31_t)0xc2692e83, - (q31_t)0x515a713a, (q31_t)0xc265c50e, (q31_t)0x514e586a, (q31_t)0xc2625df8, - (q31_t)0x51423ef0, (q31_t)0xc25ef943, (q31_t)0x513624cb, (q31_t)0xc25b96ee, - (q31_t)0x512a09fc, (q31_t)0xc25836f9, (q31_t)0x511dee84, (q31_t)0xc254d965, - (q31_t)0x5111d263, (q31_t)0xc2517e31, (q31_t)0x5105b599, (q31_t)0xc24e255e, - (q31_t)0x50f99827, (q31_t)0xc24aceed, (q31_t)0x50ed7a0e, (q31_t)0xc2477adc, - (q31_t)0x50e15b4e, (q31_t)0xc244292c, (q31_t)0x50d53be7, (q31_t)0xc240d9de, - (q31_t)0x50c91bda, (q31_t)0xc23d8cf1, (q31_t)0x50bcfb28, (q31_t)0xc23a4265, - (q31_t)0x50b0d9d0, (q31_t)0xc236fa3b, (q31_t)0x50a4b7d3, (q31_t)0xc233b473, - (q31_t)0x50989532, (q31_t)0xc230710d, (q31_t)0x508c71ee, (q31_t)0xc22d3009, - (q31_t)0x50804e06, (q31_t)0xc229f167, (q31_t)0x5074297b, (q31_t)0xc226b528, - (q31_t)0x5068044e, (q31_t)0xc2237b4b, (q31_t)0x505bde7f, (q31_t)0xc22043d0, - (q31_t)0x504fb80e, (q31_t)0xc21d0eb8, (q31_t)0x504390fd, (q31_t)0xc219dc03, - (q31_t)0x5037694b, (q31_t)0xc216abb1, (q31_t)0x502b40f8, (q31_t)0xc2137dc2, - (q31_t)0x501f1807, (q31_t)0xc2105236, (q31_t)0x5012ee76, (q31_t)0xc20d290d, - (q31_t)0x5006c446, (q31_t)0xc20a0248, (q31_t)0x4ffa9979, (q31_t)0xc206dde6, - (q31_t)0x4fee6e0d, (q31_t)0xc203bbe8, (q31_t)0x4fe24205, (q31_t)0xc2009c4e, - (q31_t)0x4fd6155f, (q31_t)0xc1fd7f17, (q31_t)0x4fc9e81e, (q31_t)0xc1fa6445, - (q31_t)0x4fbdba40, (q31_t)0xc1f74bd6, (q31_t)0x4fb18bc8, (q31_t)0xc1f435cc, - (q31_t)0x4fa55cb4, (q31_t)0xc1f12227, (q31_t)0x4f992d06, (q31_t)0xc1ee10e5, - (q31_t)0x4f8cfcbe, (q31_t)0xc1eb0209, (q31_t)0x4f80cbdc, (q31_t)0xc1e7f591, - (q31_t)0x4f749a61, (q31_t)0xc1e4eb7e, (q31_t)0x4f68684e, (q31_t)0xc1e1e3d0, - (q31_t)0x4f5c35a3, (q31_t)0xc1dede87, (q31_t)0x4f500260, (q31_t)0xc1dbdba3, - (q31_t)0x4f43ce86, (q31_t)0xc1d8db25, (q31_t)0x4f379a16, (q31_t)0xc1d5dd0c, - (q31_t)0x4f2b650f, (q31_t)0xc1d2e158, (q31_t)0x4f1f2f73, (q31_t)0xc1cfe80a, - (q31_t)0x4f12f941, (q31_t)0xc1ccf122, (q31_t)0x4f06c27a, (q31_t)0xc1c9fca0, - (q31_t)0x4efa8b20, (q31_t)0xc1c70a84, (q31_t)0x4eee5331, (q31_t)0xc1c41ace, - (q31_t)0x4ee21aaf, (q31_t)0xc1c12d7e, (q31_t)0x4ed5e19a, (q31_t)0xc1be4294, - (q31_t)0x4ec9a7f3, (q31_t)0xc1bb5a11, (q31_t)0x4ebd6db9, (q31_t)0xc1b873f5, - (q31_t)0x4eb132ef, (q31_t)0xc1b5903f, (q31_t)0x4ea4f793, (q31_t)0xc1b2aef0, - (q31_t)0x4e98bba7, (q31_t)0xc1afd007, (q31_t)0x4e8c7f2a, (q31_t)0xc1acf386, - (q31_t)0x4e80421e, (q31_t)0xc1aa196c, (q31_t)0x4e740483, (q31_t)0xc1a741b9, - (q31_t)0x4e67c65a, (q31_t)0xc1a46c6e, (q31_t)0x4e5b87a2, (q31_t)0xc1a1998a, - (q31_t)0x4e4f485c, (q31_t)0xc19ec90d, (q31_t)0x4e430889, (q31_t)0xc19bfaf9, - (q31_t)0x4e36c82a, (q31_t)0xc1992f4c, (q31_t)0x4e2a873e, (q31_t)0xc1966606, - (q31_t)0x4e1e45c6, (q31_t)0xc1939f29, (q31_t)0x4e1203c3, (q31_t)0xc190dab4, - (q31_t)0x4e05c135, (q31_t)0xc18e18a7, (q31_t)0x4df97e1d, (q31_t)0xc18b5903, - (q31_t)0x4ded3a7b, (q31_t)0xc1889bc6, (q31_t)0x4de0f64f, (q31_t)0xc185e0f3, - (q31_t)0x4dd4b19a, (q31_t)0xc1832888, (q31_t)0x4dc86c5d, (q31_t)0xc1807285, - (q31_t)0x4dbc2698, (q31_t)0xc17dbeec, (q31_t)0x4dafe04b, (q31_t)0xc17b0dbb, - (q31_t)0x4da39978, (q31_t)0xc1785ef4, (q31_t)0x4d97521d, (q31_t)0xc175b296, - (q31_t)0x4d8b0a3d, (q31_t)0xc17308a1, (q31_t)0x4d7ec1d6, (q31_t)0xc1706115, - (q31_t)0x4d7278eb, (q31_t)0xc16dbbf3, (q31_t)0x4d662f7b, (q31_t)0xc16b193a, - (q31_t)0x4d59e586, (q31_t)0xc16878eb, (q31_t)0x4d4d9b0e, (q31_t)0xc165db05, - (q31_t)0x4d415013, (q31_t)0xc1633f8a, (q31_t)0x4d350495, (q31_t)0xc160a678, - (q31_t)0x4d28b894, (q31_t)0xc15e0fd1, (q31_t)0x4d1c6c11, (q31_t)0xc15b7b94, - (q31_t)0x4d101f0e, (q31_t)0xc158e9c1, (q31_t)0x4d03d189, (q31_t)0xc1565a58, - (q31_t)0x4cf78383, (q31_t)0xc153cd5a, (q31_t)0x4ceb34fe, (q31_t)0xc15142c6, - (q31_t)0x4cdee5f9, (q31_t)0xc14eba9d, (q31_t)0x4cd29676, (q31_t)0xc14c34df, - (q31_t)0x4cc64673, (q31_t)0xc149b18b, (q31_t)0x4cb9f5f3, (q31_t)0xc14730a3, - (q31_t)0x4cada4f5, (q31_t)0xc144b225, (q31_t)0x4ca1537a, (q31_t)0xc1423613, - (q31_t)0x4c950182, (q31_t)0xc13fbc6c, (q31_t)0x4c88af0e, (q31_t)0xc13d4530, - (q31_t)0x4c7c5c1e, (q31_t)0xc13ad060, (q31_t)0x4c7008b3, (q31_t)0xc1385dfb, - (q31_t)0x4c63b4ce, (q31_t)0xc135ee02, (q31_t)0x4c57606e, (q31_t)0xc1338075, - (q31_t)0x4c4b0b94, (q31_t)0xc1311553, (q31_t)0x4c3eb641, (q31_t)0xc12eac9d, - (q31_t)0x4c326075, (q31_t)0xc12c4653, (q31_t)0x4c260a31, (q31_t)0xc129e276, - (q31_t)0x4c19b374, (q31_t)0xc1278104, (q31_t)0x4c0d5c41, (q31_t)0xc12521ff, - (q31_t)0x4c010496, (q31_t)0xc122c566, (q31_t)0x4bf4ac75, (q31_t)0xc1206b39, - (q31_t)0x4be853de, (q31_t)0xc11e1379, (q31_t)0x4bdbfad1, (q31_t)0xc11bbe26, - (q31_t)0x4bcfa150, (q31_t)0xc1196b3f, (q31_t)0x4bc34759, (q31_t)0xc1171ac6, - (q31_t)0x4bb6ecef, (q31_t)0xc114ccb9, (q31_t)0x4baa9211, (q31_t)0xc1128119, - (q31_t)0x4b9e36c0, (q31_t)0xc11037e6, (q31_t)0x4b91dafc, (q31_t)0xc10df120, - (q31_t)0x4b857ec7, (q31_t)0xc10bacc8, (q31_t)0x4b79221f, (q31_t)0xc1096add, - (q31_t)0x4b6cc506, (q31_t)0xc1072b5f, (q31_t)0x4b60677c, (q31_t)0xc104ee4f, - (q31_t)0x4b540982, (q31_t)0xc102b3ac, (q31_t)0x4b47ab19, (q31_t)0xc1007b77, - (q31_t)0x4b3b4c40, (q31_t)0xc0fe45b0, (q31_t)0x4b2eecf8, (q31_t)0xc0fc1257, - (q31_t)0x4b228d42, (q31_t)0xc0f9e16b, (q31_t)0x4b162d1d, (q31_t)0xc0f7b2ee, - (q31_t)0x4b09cc8c, (q31_t)0xc0f586df, (q31_t)0x4afd6b8d, (q31_t)0xc0f35d3e, - (q31_t)0x4af10a22, (q31_t)0xc0f1360b, (q31_t)0x4ae4a84b, (q31_t)0xc0ef1147, - (q31_t)0x4ad84609, (q31_t)0xc0eceef1, (q31_t)0x4acbe35b, (q31_t)0xc0eacf09, - (q31_t)0x4abf8043, (q31_t)0xc0e8b190, (q31_t)0x4ab31cc1, (q31_t)0xc0e69686, - (q31_t)0x4aa6b8d5, (q31_t)0xc0e47deb, (q31_t)0x4a9a5480, (q31_t)0xc0e267be, - (q31_t)0x4a8defc3, (q31_t)0xc0e05401, (q31_t)0x4a818a9d, (q31_t)0xc0de42b2, - (q31_t)0x4a752510, (q31_t)0xc0dc33d2, (q31_t)0x4a68bf1b, (q31_t)0xc0da2762, - (q31_t)0x4a5c58c0, (q31_t)0xc0d81d61, (q31_t)0x4a4ff1fe, (q31_t)0xc0d615cf, - (q31_t)0x4a438ad7, (q31_t)0xc0d410ad, (q31_t)0x4a37234a, (q31_t)0xc0d20dfa, - (q31_t)0x4a2abb59, (q31_t)0xc0d00db6, (q31_t)0x4a1e5303, (q31_t)0xc0ce0fe3, - (q31_t)0x4a11ea49, (q31_t)0xc0cc147f, (q31_t)0x4a05812c, (q31_t)0xc0ca1b8a, - (q31_t)0x49f917ac, (q31_t)0xc0c82506, (q31_t)0x49ecadc9, (q31_t)0xc0c630f2, - (q31_t)0x49e04385, (q31_t)0xc0c43f4d, (q31_t)0x49d3d8df, (q31_t)0xc0c25019, - (q31_t)0x49c76dd8, (q31_t)0xc0c06355, (q31_t)0x49bb0271, (q31_t)0xc0be7901, - (q31_t)0x49ae96aa, (q31_t)0xc0bc911d, (q31_t)0x49a22a83, (q31_t)0xc0baabaa, - (q31_t)0x4995bdfd, (q31_t)0xc0b8c8a7, (q31_t)0x49895118, (q31_t)0xc0b6e815, - (q31_t)0x497ce3d5, (q31_t)0xc0b509f3, (q31_t)0x49707635, (q31_t)0xc0b32e42, - (q31_t)0x49640837, (q31_t)0xc0b15502, (q31_t)0x495799dd, (q31_t)0xc0af7e33, - (q31_t)0x494b2b27, (q31_t)0xc0ada9d4, (q31_t)0x493ebc14, (q31_t)0xc0abd7e6, - (q31_t)0x49324ca7, (q31_t)0xc0aa086a, (q31_t)0x4925dcdf, (q31_t)0xc0a83b5e, - (q31_t)0x49196cbc, (q31_t)0xc0a670c4, (q31_t)0x490cfc40, (q31_t)0xc0a4a89b, - (q31_t)0x49008b6a, (q31_t)0xc0a2e2e3, (q31_t)0x48f41a3c, (q31_t)0xc0a11f9d, - (q31_t)0x48e7a8b5, (q31_t)0xc09f5ec8, (q31_t)0x48db36d6, (q31_t)0xc09da065, - (q31_t)0x48cec4a0, (q31_t)0xc09be473, (q31_t)0x48c25213, (q31_t)0xc09a2af3, - (q31_t)0x48b5df30, (q31_t)0xc09873e4, (q31_t)0x48a96bf6, (q31_t)0xc096bf48, - (q31_t)0x489cf867, (q31_t)0xc0950d1d, (q31_t)0x48908483, (q31_t)0xc0935d64, - (q31_t)0x4884104b, (q31_t)0xc091b01d, (q31_t)0x48779bbe, (q31_t)0xc0900548, - (q31_t)0x486b26de, (q31_t)0xc08e5ce5, (q31_t)0x485eb1ab, (q31_t)0xc08cb6f5, - (q31_t)0x48523c25, (q31_t)0xc08b1376, (q31_t)0x4845c64d, (q31_t)0xc089726a, - (q31_t)0x48395024, (q31_t)0xc087d3d0, (q31_t)0x482cd9a9, (q31_t)0xc08637a9, - (q31_t)0x482062de, (q31_t)0xc0849df4, (q31_t)0x4813ebc2, (q31_t)0xc08306b2, - (q31_t)0x48077457, (q31_t)0xc08171e2, (q31_t)0x47fafc9c, (q31_t)0xc07fdf85, - (q31_t)0x47ee8493, (q31_t)0xc07e4f9b, (q31_t)0x47e20c3b, (q31_t)0xc07cc223, - (q31_t)0x47d59396, (q31_t)0xc07b371e, (q31_t)0x47c91aa3, (q31_t)0xc079ae8c, - (q31_t)0x47bca163, (q31_t)0xc078286e, (q31_t)0x47b027d7, (q31_t)0xc076a4c2, - (q31_t)0x47a3adff, (q31_t)0xc0752389, (q31_t)0x479733dc, (q31_t)0xc073a4c3, - (q31_t)0x478ab96e, (q31_t)0xc0722871, (q31_t)0x477e3eb5, (q31_t)0xc070ae92, - (q31_t)0x4771c3b3, (q31_t)0xc06f3726, (q31_t)0x47654867, (q31_t)0xc06dc22e, - (q31_t)0x4758ccd2, (q31_t)0xc06c4fa8, (q31_t)0x474c50f4, (q31_t)0xc06adf97, - (q31_t)0x473fd4cf, (q31_t)0xc06971f9, (q31_t)0x47335862, (q31_t)0xc06806ce, - (q31_t)0x4726dbae, (q31_t)0xc0669e18, (q31_t)0x471a5eb3, (q31_t)0xc06537d4, - (q31_t)0x470de172, (q31_t)0xc063d405, (q31_t)0x470163eb, (q31_t)0xc06272aa, - (q31_t)0x46f4e620, (q31_t)0xc06113c2, (q31_t)0x46e86810, (q31_t)0xc05fb74e, - (q31_t)0x46dbe9bb, (q31_t)0xc05e5d4e, (q31_t)0x46cf6b23, (q31_t)0xc05d05c3, - (q31_t)0x46c2ec48, (q31_t)0xc05bb0ab, (q31_t)0x46b66d29, (q31_t)0xc05a5e07, - (q31_t)0x46a9edc9, (q31_t)0xc0590dd8, (q31_t)0x469d6e27, (q31_t)0xc057c01d, - (q31_t)0x4690ee44, (q31_t)0xc05674d6, (q31_t)0x46846e1f, (q31_t)0xc0552c03, - (q31_t)0x4677edbb, (q31_t)0xc053e5a5, (q31_t)0x466b6d16, (q31_t)0xc052a1bb, - (q31_t)0x465eec33, (q31_t)0xc0516045, (q31_t)0x46526b10, (q31_t)0xc0502145, - (q31_t)0x4645e9af, (q31_t)0xc04ee4b8, (q31_t)0x46396810, (q31_t)0xc04daaa1, - (q31_t)0x462ce634, (q31_t)0xc04c72fe, (q31_t)0x4620641a, (q31_t)0xc04b3dcf, - (q31_t)0x4613e1c5, (q31_t)0xc04a0b16, (q31_t)0x46075f33, (q31_t)0xc048dad1, - (q31_t)0x45fadc66, (q31_t)0xc047ad01, (q31_t)0x45ee595d, (q31_t)0xc04681a6, - (q31_t)0x45e1d61b, (q31_t)0xc04558c0, (q31_t)0x45d5529e, (q31_t)0xc044324f, - (q31_t)0x45c8cee7, (q31_t)0xc0430e53, (q31_t)0x45bc4af8, (q31_t)0xc041eccc, - (q31_t)0x45afc6d0, (q31_t)0xc040cdba, (q31_t)0x45a3426f, (q31_t)0xc03fb11d, - (q31_t)0x4596bdd7, (q31_t)0xc03e96f6, (q31_t)0x458a3908, (q31_t)0xc03d7f44, - (q31_t)0x457db403, (q31_t)0xc03c6a07, (q31_t)0x45712ec7, (q31_t)0xc03b573f, - (q31_t)0x4564a955, (q31_t)0xc03a46ed, (q31_t)0x455823ae, (q31_t)0xc0393910, - (q31_t)0x454b9dd3, (q31_t)0xc0382da8, (q31_t)0x453f17c3, (q31_t)0xc03724b6, - (q31_t)0x4532917f, (q31_t)0xc0361e3a, (q31_t)0x45260b08, (q31_t)0xc0351a33, - (q31_t)0x4519845e, (q31_t)0xc03418a2, (q31_t)0x450cfd82, (q31_t)0xc0331986, - (q31_t)0x45007674, (q31_t)0xc0321ce0, (q31_t)0x44f3ef35, (q31_t)0xc03122b0, - (q31_t)0x44e767c5, (q31_t)0xc0302af5, (q31_t)0x44dae024, (q31_t)0xc02f35b1, - (q31_t)0x44ce5854, (q31_t)0xc02e42e2, (q31_t)0x44c1d054, (q31_t)0xc02d5289, - (q31_t)0x44b54825, (q31_t)0xc02c64a6, (q31_t)0x44a8bfc7, (q31_t)0xc02b7939, - (q31_t)0x449c373c, (q31_t)0xc02a9042, (q31_t)0x448fae83, (q31_t)0xc029a9c1, - (q31_t)0x4483259d, (q31_t)0xc028c5b6, (q31_t)0x44769c8b, (q31_t)0xc027e421, - (q31_t)0x446a134c, (q31_t)0xc0270502, (q31_t)0x445d89e2, (q31_t)0xc0262859, - (q31_t)0x4451004d, (q31_t)0xc0254e27, (q31_t)0x4444768d, (q31_t)0xc024766a, - (q31_t)0x4437eca4, (q31_t)0xc023a124, (q31_t)0x442b6290, (q31_t)0xc022ce54, - (q31_t)0x441ed854, (q31_t)0xc021fdfb, (q31_t)0x44124dee, (q31_t)0xc0213018, - (q31_t)0x4405c361, (q31_t)0xc02064ab, (q31_t)0x43f938ac, (q31_t)0xc01f9bb5, - (q31_t)0x43ecadcf, (q31_t)0xc01ed535, (q31_t)0x43e022cc, (q31_t)0xc01e112b, - (q31_t)0x43d397a3, (q31_t)0xc01d4f99, (q31_t)0x43c70c54, (q31_t)0xc01c907c, - (q31_t)0x43ba80df, (q31_t)0xc01bd3d6, (q31_t)0x43adf546, (q31_t)0xc01b19a7, - (q31_t)0x43a16988, (q31_t)0xc01a61ee, (q31_t)0x4394dda7, (q31_t)0xc019acac, - (q31_t)0x438851a2, (q31_t)0xc018f9e1, (q31_t)0x437bc57b, (q31_t)0xc018498c, - (q31_t)0x436f3931, (q31_t)0xc0179bae, (q31_t)0x4362acc5, (q31_t)0xc016f047, - (q31_t)0x43562038, (q31_t)0xc0164757, (q31_t)0x43499389, (q31_t)0xc015a0dd, - (q31_t)0x433d06bb, (q31_t)0xc014fcda, (q31_t)0x433079cc, (q31_t)0xc0145b4e, - (q31_t)0x4323ecbe, (q31_t)0xc013bc39, (q31_t)0x43175f91, (q31_t)0xc0131f9b, - (q31_t)0x430ad245, (q31_t)0xc0128574, (q31_t)0x42fe44dc, (q31_t)0xc011edc3, - (q31_t)0x42f1b755, (q31_t)0xc011588a, (q31_t)0x42e529b0, (q31_t)0xc010c5c7, - (q31_t)0x42d89bf0, (q31_t)0xc010357c, (q31_t)0x42cc0e13, (q31_t)0xc00fa7a8, - (q31_t)0x42bf801a, (q31_t)0xc00f1c4a, (q31_t)0x42b2f207, (q31_t)0xc00e9364, - (q31_t)0x42a663d8, (q31_t)0xc00e0cf5, (q31_t)0x4299d590, (q31_t)0xc00d88fd, - (q31_t)0x428d472e, (q31_t)0xc00d077c, (q31_t)0x4280b8b3, (q31_t)0xc00c8872, - (q31_t)0x42742a1f, (q31_t)0xc00c0be0, (q31_t)0x42679b73, (q31_t)0xc00b91c4, - (q31_t)0x425b0caf, (q31_t)0xc00b1a20, (q31_t)0x424e7dd4, (q31_t)0xc00aa4f3, - (q31_t)0x4241eee2, (q31_t)0xc00a323d, (q31_t)0x42355fd9, (q31_t)0xc009c1ff, - (q31_t)0x4228d0bb, (q31_t)0xc0095438, (q31_t)0x421c4188, (q31_t)0xc008e8e8, - (q31_t)0x420fb240, (q31_t)0xc008800f, (q31_t)0x420322e3, (q31_t)0xc00819ae, - (q31_t)0x41f69373, (q31_t)0xc007b5c4, (q31_t)0x41ea03ef, (q31_t)0xc0075452, - (q31_t)0x41dd7459, (q31_t)0xc006f556, (q31_t)0x41d0e4b0, (q31_t)0xc00698d3, - (q31_t)0x41c454f5, (q31_t)0xc0063ec6, (q31_t)0x41b7c528, (q31_t)0xc005e731, - (q31_t)0x41ab354b, (q31_t)0xc0059214, (q31_t)0x419ea55d, (q31_t)0xc0053f6e, - (q31_t)0x4192155f, (q31_t)0xc004ef3f, (q31_t)0x41858552, (q31_t)0xc004a188, - (q31_t)0x4178f536, (q31_t)0xc0045648, (q31_t)0x416c650b, (q31_t)0xc0040d80, - (q31_t)0x415fd4d2, (q31_t)0xc003c72f, (q31_t)0x4153448c, (q31_t)0xc0038356, - (q31_t)0x4146b438, (q31_t)0xc00341f4, (q31_t)0x413a23d8, (q31_t)0xc003030a, - (q31_t)0x412d936c, (q31_t)0xc002c697, (q31_t)0x412102f4, (q31_t)0xc0028c9c, - (q31_t)0x41147271, (q31_t)0xc0025519, (q31_t)0x4107e1e3, (q31_t)0xc002200d, - (q31_t)0x40fb514b, (q31_t)0xc001ed78, (q31_t)0x40eec0aa, (q31_t)0xc001bd5c, - (q31_t)0x40e22fff, (q31_t)0xc0018fb6, (q31_t)0x40d59f4c, (q31_t)0xc0016489, - (q31_t)0x40c90e90, (q31_t)0xc0013bd3, (q31_t)0x40bc7dcc, (q31_t)0xc0011594, - (q31_t)0x40afed02, (q31_t)0xc000f1ce, (q31_t)0x40a35c30, (q31_t)0xc000d07e, - (q31_t)0x4096cb58, (q31_t)0xc000b1a7, (q31_t)0x408a3a7b, (q31_t)0xc0009547, - (q31_t)0x407da998, (q31_t)0xc0007b5f, (q31_t)0x407118b0, (q31_t)0xc00063ee, - (q31_t)0x406487c4, (q31_t)0xc0004ef5, (q31_t)0x4057f6d4, (q31_t)0xc0003c74, - (q31_t)0x404b65e1, (q31_t)0xc0002c6a, (q31_t)0x403ed4ea, (q31_t)0xc0001ed8, - (q31_t)0x403243f1, (q31_t)0xc00013bd, (q31_t)0x4025b2f7, (q31_t)0xc0000b1a, - (q31_t)0x401921fb, (q31_t)0xc00004ef, (q31_t)0x400c90fe, (q31_t)0xc000013c, -}; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_Q15) -/** - @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)) - */ -const q15_t __ALIGNED(4) realCoefAQ15[8192] = { - (q15_t)0x4000, (q15_t)0xc000, (q15_t)0x3ff3, (q15_t)0xc000, (q15_t)0x3fe7, (q15_t)0xc000, (q15_t)0x3fda, (q15_t)0xc000, - (q15_t)0x3fce, (q15_t)0xc000, (q15_t)0x3fc1, (q15_t)0xc000, (q15_t)0x3fb5, (q15_t)0xc000, (q15_t)0x3fa8, (q15_t)0xc000, - (q15_t)0x3f9b, (q15_t)0xc000, (q15_t)0x3f8f, (q15_t)0xc000, (q15_t)0x3f82, (q15_t)0xc000, (q15_t)0x3f76, (q15_t)0xc001, - (q15_t)0x3f69, (q15_t)0xc001, (q15_t)0x3f5d, (q15_t)0xc001, (q15_t)0x3f50, (q15_t)0xc001, (q15_t)0x3f44, (q15_t)0xc001, - (q15_t)0x3f37, (q15_t)0xc001, (q15_t)0x3f2a, (q15_t)0xc001, (q15_t)0x3f1e, (q15_t)0xc002, (q15_t)0x3f11, (q15_t)0xc002, - (q15_t)0x3f05, (q15_t)0xc002, (q15_t)0x3ef8, (q15_t)0xc002, (q15_t)0x3eec, (q15_t)0xc002, (q15_t)0x3edf, (q15_t)0xc003, - (q15_t)0x3ed2, (q15_t)0xc003, (q15_t)0x3ec6, (q15_t)0xc003, (q15_t)0x3eb9, (q15_t)0xc003, (q15_t)0x3ead, (q15_t)0xc004, - (q15_t)0x3ea0, (q15_t)0xc004, (q15_t)0x3e94, (q15_t)0xc004, (q15_t)0x3e87, (q15_t)0xc004, (q15_t)0x3e7a, (q15_t)0xc005, - (q15_t)0x3e6e, (q15_t)0xc005, (q15_t)0x3e61, (q15_t)0xc005, (q15_t)0x3e55, (q15_t)0xc006, (q15_t)0x3e48, (q15_t)0xc006, - (q15_t)0x3e3c, (q15_t)0xc006, (q15_t)0x3e2f, (q15_t)0xc007, (q15_t)0x3e23, (q15_t)0xc007, (q15_t)0x3e16, (q15_t)0xc007, - (q15_t)0x3e09, (q15_t)0xc008, (q15_t)0x3dfd, (q15_t)0xc008, (q15_t)0x3df0, (q15_t)0xc009, (q15_t)0x3de4, (q15_t)0xc009, - (q15_t)0x3dd7, (q15_t)0xc009, (q15_t)0x3dcb, (q15_t)0xc00a, (q15_t)0x3dbe, (q15_t)0xc00a, (q15_t)0x3db2, (q15_t)0xc00b, - (q15_t)0x3da5, (q15_t)0xc00b, (q15_t)0x3d98, (q15_t)0xc00c, (q15_t)0x3d8c, (q15_t)0xc00c, (q15_t)0x3d7f, (q15_t)0xc00d, - (q15_t)0x3d73, (q15_t)0xc00d, (q15_t)0x3d66, (q15_t)0xc00e, (q15_t)0x3d5a, (q15_t)0xc00e, (q15_t)0x3d4d, (q15_t)0xc00f, - (q15_t)0x3d40, (q15_t)0xc00f, (q15_t)0x3d34, (q15_t)0xc010, (q15_t)0x3d27, (q15_t)0xc010, (q15_t)0x3d1b, (q15_t)0xc011, - (q15_t)0x3d0e, (q15_t)0xc011, (q15_t)0x3d02, (q15_t)0xc012, (q15_t)0x3cf5, (q15_t)0xc013, (q15_t)0x3ce9, (q15_t)0xc013, - (q15_t)0x3cdc, (q15_t)0xc014, (q15_t)0x3cd0, (q15_t)0xc014, (q15_t)0x3cc3, (q15_t)0xc015, (q15_t)0x3cb6, (q15_t)0xc016, - (q15_t)0x3caa, (q15_t)0xc016, (q15_t)0x3c9d, (q15_t)0xc017, (q15_t)0x3c91, (q15_t)0xc018, (q15_t)0x3c84, (q15_t)0xc018, - (q15_t)0x3c78, (q15_t)0xc019, (q15_t)0x3c6b, (q15_t)0xc01a, (q15_t)0x3c5f, (q15_t)0xc01a, (q15_t)0x3c52, (q15_t)0xc01b, - (q15_t)0x3c45, (q15_t)0xc01c, (q15_t)0x3c39, (q15_t)0xc01d, (q15_t)0x3c2c, (q15_t)0xc01d, (q15_t)0x3c20, (q15_t)0xc01e, - (q15_t)0x3c13, (q15_t)0xc01f, (q15_t)0x3c07, (q15_t)0xc020, (q15_t)0x3bfa, (q15_t)0xc020, (q15_t)0x3bee, (q15_t)0xc021, - (q15_t)0x3be1, (q15_t)0xc022, (q15_t)0x3bd5, (q15_t)0xc023, (q15_t)0x3bc8, (q15_t)0xc024, (q15_t)0x3bbc, (q15_t)0xc024, - (q15_t)0x3baf, (q15_t)0xc025, (q15_t)0x3ba2, (q15_t)0xc026, (q15_t)0x3b96, (q15_t)0xc027, (q15_t)0x3b89, (q15_t)0xc028, - (q15_t)0x3b7d, (q15_t)0xc029, (q15_t)0x3b70, (q15_t)0xc02a, (q15_t)0x3b64, (q15_t)0xc02b, (q15_t)0x3b57, (q15_t)0xc02b, - (q15_t)0x3b4b, (q15_t)0xc02c, (q15_t)0x3b3e, (q15_t)0xc02d, (q15_t)0x3b32, (q15_t)0xc02e, (q15_t)0x3b25, (q15_t)0xc02f, - (q15_t)0x3b19, (q15_t)0xc030, (q15_t)0x3b0c, (q15_t)0xc031, (q15_t)0x3b00, (q15_t)0xc032, (q15_t)0x3af3, (q15_t)0xc033, - (q15_t)0x3ae6, (q15_t)0xc034, (q15_t)0x3ada, (q15_t)0xc035, (q15_t)0x3acd, (q15_t)0xc036, (q15_t)0x3ac1, (q15_t)0xc037, - (q15_t)0x3ab4, (q15_t)0xc038, (q15_t)0x3aa8, (q15_t)0xc039, (q15_t)0x3a9b, (q15_t)0xc03a, (q15_t)0x3a8f, (q15_t)0xc03b, - (q15_t)0x3a82, (q15_t)0xc03c, (q15_t)0x3a76, (q15_t)0xc03d, (q15_t)0x3a69, (q15_t)0xc03f, (q15_t)0x3a5d, (q15_t)0xc040, - (q15_t)0x3a50, (q15_t)0xc041, (q15_t)0x3a44, (q15_t)0xc042, (q15_t)0x3a37, (q15_t)0xc043, (q15_t)0x3a2b, (q15_t)0xc044, - (q15_t)0x3a1e, (q15_t)0xc045, (q15_t)0x3a12, (q15_t)0xc047, (q15_t)0x3a05, (q15_t)0xc048, (q15_t)0x39f9, (q15_t)0xc049, - (q15_t)0x39ec, (q15_t)0xc04a, (q15_t)0x39e0, (q15_t)0xc04b, (q15_t)0x39d3, (q15_t)0xc04c, (q15_t)0x39c7, (q15_t)0xc04e, - (q15_t)0x39ba, (q15_t)0xc04f, (q15_t)0x39ae, (q15_t)0xc050, (q15_t)0x39a1, (q15_t)0xc051, (q15_t)0x3995, (q15_t)0xc053, - (q15_t)0x3988, (q15_t)0xc054, (q15_t)0x397c, (q15_t)0xc055, (q15_t)0x396f, (q15_t)0xc056, (q15_t)0x3963, (q15_t)0xc058, - (q15_t)0x3956, (q15_t)0xc059, (q15_t)0x394a, (q15_t)0xc05a, (q15_t)0x393d, (q15_t)0xc05c, (q15_t)0x3931, (q15_t)0xc05d, - (q15_t)0x3924, (q15_t)0xc05e, (q15_t)0x3918, (q15_t)0xc060, (q15_t)0x390b, (q15_t)0xc061, (q15_t)0x38ff, (q15_t)0xc062, - (q15_t)0x38f2, (q15_t)0xc064, (q15_t)0x38e6, (q15_t)0xc065, (q15_t)0x38d9, (q15_t)0xc067, (q15_t)0x38cd, (q15_t)0xc068, - (q15_t)0x38c0, (q15_t)0xc069, (q15_t)0x38b4, (q15_t)0xc06b, (q15_t)0x38a7, (q15_t)0xc06c, (q15_t)0x389b, (q15_t)0xc06e, - (q15_t)0x388e, (q15_t)0xc06f, (q15_t)0x3882, (q15_t)0xc071, (q15_t)0x3875, (q15_t)0xc072, (q15_t)0x3869, (q15_t)0xc074, - (q15_t)0x385c, (q15_t)0xc075, (q15_t)0x3850, (q15_t)0xc077, (q15_t)0x3843, (q15_t)0xc078, (q15_t)0x3837, (q15_t)0xc07a, - (q15_t)0x382a, (q15_t)0xc07b, (q15_t)0x381e, (q15_t)0xc07d, (q15_t)0x3811, (q15_t)0xc07e, (q15_t)0x3805, (q15_t)0xc080, - (q15_t)0x37f9, (q15_t)0xc081, (q15_t)0x37ec, (q15_t)0xc083, (q15_t)0x37e0, (q15_t)0xc085, (q15_t)0x37d3, (q15_t)0xc086, - (q15_t)0x37c7, (q15_t)0xc088, (q15_t)0x37ba, (q15_t)0xc089, (q15_t)0x37ae, (q15_t)0xc08b, (q15_t)0x37a1, (q15_t)0xc08d, - (q15_t)0x3795, (q15_t)0xc08e, (q15_t)0x3788, (q15_t)0xc090, (q15_t)0x377c, (q15_t)0xc092, (q15_t)0x376f, (q15_t)0xc093, - (q15_t)0x3763, (q15_t)0xc095, (q15_t)0x3757, (q15_t)0xc097, (q15_t)0x374a, (q15_t)0xc098, (q15_t)0x373e, (q15_t)0xc09a, - (q15_t)0x3731, (q15_t)0xc09c, (q15_t)0x3725, (q15_t)0xc09e, (q15_t)0x3718, (q15_t)0xc09f, (q15_t)0x370c, (q15_t)0xc0a1, - (q15_t)0x36ff, (q15_t)0xc0a3, (q15_t)0x36f3, (q15_t)0xc0a5, (q15_t)0x36e7, (q15_t)0xc0a6, (q15_t)0x36da, (q15_t)0xc0a8, - (q15_t)0x36ce, (q15_t)0xc0aa, (q15_t)0x36c1, (q15_t)0xc0ac, (q15_t)0x36b5, (q15_t)0xc0ae, (q15_t)0x36a8, (q15_t)0xc0af, - (q15_t)0x369c, (q15_t)0xc0b1, (q15_t)0x3690, (q15_t)0xc0b3, (q15_t)0x3683, (q15_t)0xc0b5, (q15_t)0x3677, (q15_t)0xc0b7, - (q15_t)0x366a, (q15_t)0xc0b9, (q15_t)0x365e, (q15_t)0xc0bb, (q15_t)0x3651, (q15_t)0xc0bd, (q15_t)0x3645, (q15_t)0xc0be, - (q15_t)0x3639, (q15_t)0xc0c0, (q15_t)0x362c, (q15_t)0xc0c2, (q15_t)0x3620, (q15_t)0xc0c4, (q15_t)0x3613, (q15_t)0xc0c6, - (q15_t)0x3607, (q15_t)0xc0c8, (q15_t)0x35fa, (q15_t)0xc0ca, (q15_t)0x35ee, (q15_t)0xc0cc, (q15_t)0x35e2, (q15_t)0xc0ce, - (q15_t)0x35d5, (q15_t)0xc0d0, (q15_t)0x35c9, (q15_t)0xc0d2, (q15_t)0x35bc, (q15_t)0xc0d4, (q15_t)0x35b0, (q15_t)0xc0d6, - (q15_t)0x35a4, (q15_t)0xc0d8, (q15_t)0x3597, (q15_t)0xc0da, (q15_t)0x358b, (q15_t)0xc0dc, (q15_t)0x357e, (q15_t)0xc0de, - (q15_t)0x3572, (q15_t)0xc0e0, (q15_t)0x3566, (q15_t)0xc0e2, (q15_t)0x3559, (q15_t)0xc0e4, (q15_t)0x354d, (q15_t)0xc0e7, - (q15_t)0x3540, (q15_t)0xc0e9, (q15_t)0x3534, (q15_t)0xc0eb, (q15_t)0x3528, (q15_t)0xc0ed, (q15_t)0x351b, (q15_t)0xc0ef, - (q15_t)0x350f, (q15_t)0xc0f1, (q15_t)0x3503, (q15_t)0xc0f3, (q15_t)0x34f6, (q15_t)0xc0f6, (q15_t)0x34ea, (q15_t)0xc0f8, - (q15_t)0x34dd, (q15_t)0xc0fa, (q15_t)0x34d1, (q15_t)0xc0fc, (q15_t)0x34c5, (q15_t)0xc0fe, (q15_t)0x34b8, (q15_t)0xc100, - (q15_t)0x34ac, (q15_t)0xc103, (q15_t)0x34a0, (q15_t)0xc105, (q15_t)0x3493, (q15_t)0xc107, (q15_t)0x3487, (q15_t)0xc109, - (q15_t)0x347b, (q15_t)0xc10c, (q15_t)0x346e, (q15_t)0xc10e, (q15_t)0x3462, (q15_t)0xc110, (q15_t)0x3455, (q15_t)0xc113, - (q15_t)0x3449, (q15_t)0xc115, (q15_t)0x343d, (q15_t)0xc117, (q15_t)0x3430, (q15_t)0xc119, (q15_t)0x3424, (q15_t)0xc11c, - (q15_t)0x3418, (q15_t)0xc11e, (q15_t)0x340b, (q15_t)0xc120, (q15_t)0x33ff, (q15_t)0xc123, (q15_t)0x33f3, (q15_t)0xc125, - (q15_t)0x33e6, (q15_t)0xc128, (q15_t)0x33da, (q15_t)0xc12a, (q15_t)0x33ce, (q15_t)0xc12c, (q15_t)0x33c1, (q15_t)0xc12f, - (q15_t)0x33b5, (q15_t)0xc131, (q15_t)0x33a9, (q15_t)0xc134, (q15_t)0x339c, (q15_t)0xc136, (q15_t)0x3390, (q15_t)0xc138, - (q15_t)0x3384, (q15_t)0xc13b, (q15_t)0x3377, (q15_t)0xc13d, (q15_t)0x336b, (q15_t)0xc140, (q15_t)0x335f, (q15_t)0xc142, - (q15_t)0x3352, (q15_t)0xc145, (q15_t)0x3346, (q15_t)0xc147, (q15_t)0x333a, (q15_t)0xc14a, (q15_t)0x332d, (q15_t)0xc14c, - (q15_t)0x3321, (q15_t)0xc14f, (q15_t)0x3315, (q15_t)0xc151, (q15_t)0x3308, (q15_t)0xc154, (q15_t)0x32fc, (q15_t)0xc156, - (q15_t)0x32f0, (q15_t)0xc159, (q15_t)0x32e4, (q15_t)0xc15b, (q15_t)0x32d7, (q15_t)0xc15e, (q15_t)0x32cb, (q15_t)0xc161, - (q15_t)0x32bf, (q15_t)0xc163, (q15_t)0x32b2, (q15_t)0xc166, (q15_t)0x32a6, (q15_t)0xc168, (q15_t)0x329a, (q15_t)0xc16b, - (q15_t)0x328e, (q15_t)0xc16e, (q15_t)0x3281, (q15_t)0xc170, (q15_t)0x3275, (q15_t)0xc173, (q15_t)0x3269, (q15_t)0xc176, - (q15_t)0x325c, (q15_t)0xc178, (q15_t)0x3250, (q15_t)0xc17b, (q15_t)0x3244, (q15_t)0xc17e, (q15_t)0x3238, (q15_t)0xc180, - (q15_t)0x322b, (q15_t)0xc183, (q15_t)0x321f, (q15_t)0xc186, (q15_t)0x3213, (q15_t)0xc189, (q15_t)0x3207, (q15_t)0xc18b, - (q15_t)0x31fa, (q15_t)0xc18e, (q15_t)0x31ee, (q15_t)0xc191, (q15_t)0x31e2, (q15_t)0xc194, (q15_t)0x31d5, (q15_t)0xc196, - (q15_t)0x31c9, (q15_t)0xc199, (q15_t)0x31bd, (q15_t)0xc19c, (q15_t)0x31b1, (q15_t)0xc19f, (q15_t)0x31a4, (q15_t)0xc1a2, - (q15_t)0x3198, (q15_t)0xc1a4, (q15_t)0x318c, (q15_t)0xc1a7, (q15_t)0x3180, (q15_t)0xc1aa, (q15_t)0x3174, (q15_t)0xc1ad, - (q15_t)0x3167, (q15_t)0xc1b0, (q15_t)0x315b, (q15_t)0xc1b3, (q15_t)0x314f, (q15_t)0xc1b6, (q15_t)0x3143, (q15_t)0xc1b8, - (q15_t)0x3136, (q15_t)0xc1bb, (q15_t)0x312a, (q15_t)0xc1be, (q15_t)0x311e, (q15_t)0xc1c1, (q15_t)0x3112, (q15_t)0xc1c4, - (q15_t)0x3105, (q15_t)0xc1c7, (q15_t)0x30f9, (q15_t)0xc1ca, (q15_t)0x30ed, (q15_t)0xc1cd, (q15_t)0x30e1, (q15_t)0xc1d0, - (q15_t)0x30d5, (q15_t)0xc1d3, (q15_t)0x30c8, (q15_t)0xc1d6, (q15_t)0x30bc, (q15_t)0xc1d9, (q15_t)0x30b0, (q15_t)0xc1dc, - (q15_t)0x30a4, (q15_t)0xc1df, (q15_t)0x3098, (q15_t)0xc1e2, (q15_t)0x308b, (q15_t)0xc1e5, (q15_t)0x307f, (q15_t)0xc1e8, - (q15_t)0x3073, (q15_t)0xc1eb, (q15_t)0x3067, (q15_t)0xc1ee, (q15_t)0x305b, (q15_t)0xc1f1, (q15_t)0x304e, (q15_t)0xc1f4, - (q15_t)0x3042, (q15_t)0xc1f7, (q15_t)0x3036, (q15_t)0xc1fa, (q15_t)0x302a, (q15_t)0xc1fd, (q15_t)0x301e, (q15_t)0xc201, - (q15_t)0x3012, (q15_t)0xc204, (q15_t)0x3005, (q15_t)0xc207, (q15_t)0x2ff9, (q15_t)0xc20a, (q15_t)0x2fed, (q15_t)0xc20d, - (q15_t)0x2fe1, (q15_t)0xc210, (q15_t)0x2fd5, (q15_t)0xc213, (q15_t)0x2fc9, (q15_t)0xc217, (q15_t)0x2fbc, (q15_t)0xc21a, - (q15_t)0x2fb0, (q15_t)0xc21d, (q15_t)0x2fa4, (q15_t)0xc220, (q15_t)0x2f98, (q15_t)0xc223, (q15_t)0x2f8c, (q15_t)0xc227, - (q15_t)0x2f80, (q15_t)0xc22a, (q15_t)0x2f74, (q15_t)0xc22d, (q15_t)0x2f67, (q15_t)0xc230, (q15_t)0x2f5b, (q15_t)0xc234, - (q15_t)0x2f4f, (q15_t)0xc237, (q15_t)0x2f43, (q15_t)0xc23a, (q15_t)0x2f37, (q15_t)0xc23e, (q15_t)0x2f2b, (q15_t)0xc241, - (q15_t)0x2f1f, (q15_t)0xc244, (q15_t)0x2f13, (q15_t)0xc247, (q15_t)0x2f06, (q15_t)0xc24b, (q15_t)0x2efa, (q15_t)0xc24e, - (q15_t)0x2eee, (q15_t)0xc251, (q15_t)0x2ee2, (q15_t)0xc255, (q15_t)0x2ed6, (q15_t)0xc258, (q15_t)0x2eca, (q15_t)0xc25c, - (q15_t)0x2ebe, (q15_t)0xc25f, (q15_t)0x2eb2, (q15_t)0xc262, (q15_t)0x2ea6, (q15_t)0xc266, (q15_t)0x2e99, (q15_t)0xc269, - (q15_t)0x2e8d, (q15_t)0xc26d, (q15_t)0x2e81, (q15_t)0xc270, (q15_t)0x2e75, (q15_t)0xc273, (q15_t)0x2e69, (q15_t)0xc277, - (q15_t)0x2e5d, (q15_t)0xc27a, (q15_t)0x2e51, (q15_t)0xc27e, (q15_t)0x2e45, (q15_t)0xc281, (q15_t)0x2e39, (q15_t)0xc285, - (q15_t)0x2e2d, (q15_t)0xc288, (q15_t)0x2e21, (q15_t)0xc28c, (q15_t)0x2e15, (q15_t)0xc28f, (q15_t)0x2e09, (q15_t)0xc293, - (q15_t)0x2dfc, (q15_t)0xc296, (q15_t)0x2df0, (q15_t)0xc29a, (q15_t)0x2de4, (q15_t)0xc29d, (q15_t)0x2dd8, (q15_t)0xc2a1, - (q15_t)0x2dcc, (q15_t)0xc2a5, (q15_t)0x2dc0, (q15_t)0xc2a8, (q15_t)0x2db4, (q15_t)0xc2ac, (q15_t)0x2da8, (q15_t)0xc2af, - (q15_t)0x2d9c, (q15_t)0xc2b3, (q15_t)0x2d90, (q15_t)0xc2b7, (q15_t)0x2d84, (q15_t)0xc2ba, (q15_t)0x2d78, (q15_t)0xc2be, - (q15_t)0x2d6c, (q15_t)0xc2c1, (q15_t)0x2d60, (q15_t)0xc2c5, (q15_t)0x2d54, (q15_t)0xc2c9, (q15_t)0x2d48, (q15_t)0xc2cc, - (q15_t)0x2d3c, (q15_t)0xc2d0, (q15_t)0x2d30, (q15_t)0xc2d4, (q15_t)0x2d24, (q15_t)0xc2d8, (q15_t)0x2d18, (q15_t)0xc2db, - (q15_t)0x2d0c, (q15_t)0xc2df, (q15_t)0x2d00, (q15_t)0xc2e3, (q15_t)0x2cf4, (q15_t)0xc2e6, (q15_t)0x2ce8, (q15_t)0xc2ea, - (q15_t)0x2cdc, (q15_t)0xc2ee, (q15_t)0x2cd0, (q15_t)0xc2f2, (q15_t)0x2cc4, (q15_t)0xc2f5, (q15_t)0x2cb8, (q15_t)0xc2f9, - (q15_t)0x2cac, (q15_t)0xc2fd, (q15_t)0x2ca0, (q15_t)0xc301, (q15_t)0x2c94, (q15_t)0xc305, (q15_t)0x2c88, (q15_t)0xc308, - (q15_t)0x2c7c, (q15_t)0xc30c, (q15_t)0x2c70, (q15_t)0xc310, (q15_t)0x2c64, (q15_t)0xc314, (q15_t)0x2c58, (q15_t)0xc318, - (q15_t)0x2c4c, (q15_t)0xc31c, (q15_t)0x2c40, (q15_t)0xc320, (q15_t)0x2c34, (q15_t)0xc323, (q15_t)0x2c28, (q15_t)0xc327, - (q15_t)0x2c1c, (q15_t)0xc32b, (q15_t)0x2c10, (q15_t)0xc32f, (q15_t)0x2c05, (q15_t)0xc333, (q15_t)0x2bf9, (q15_t)0xc337, - (q15_t)0x2bed, (q15_t)0xc33b, (q15_t)0x2be1, (q15_t)0xc33f, (q15_t)0x2bd5, (q15_t)0xc343, (q15_t)0x2bc9, (q15_t)0xc347, - (q15_t)0x2bbd, (q15_t)0xc34b, (q15_t)0x2bb1, (q15_t)0xc34f, (q15_t)0x2ba5, (q15_t)0xc353, (q15_t)0x2b99, (q15_t)0xc357, - (q15_t)0x2b8d, (q15_t)0xc35b, (q15_t)0x2b81, (q15_t)0xc35f, (q15_t)0x2b75, (q15_t)0xc363, (q15_t)0x2b6a, (q15_t)0xc367, - (q15_t)0x2b5e, (q15_t)0xc36b, (q15_t)0x2b52, (q15_t)0xc36f, (q15_t)0x2b46, (q15_t)0xc373, (q15_t)0x2b3a, (q15_t)0xc377, - (q15_t)0x2b2e, (q15_t)0xc37b, (q15_t)0x2b22, (q15_t)0xc37f, (q15_t)0x2b16, (q15_t)0xc383, (q15_t)0x2b0a, (q15_t)0xc387, - (q15_t)0x2aff, (q15_t)0xc38c, (q15_t)0x2af3, (q15_t)0xc390, (q15_t)0x2ae7, (q15_t)0xc394, (q15_t)0x2adb, (q15_t)0xc398, - (q15_t)0x2acf, (q15_t)0xc39c, (q15_t)0x2ac3, (q15_t)0xc3a0, (q15_t)0x2ab7, (q15_t)0xc3a5, (q15_t)0x2aac, (q15_t)0xc3a9, - (q15_t)0x2aa0, (q15_t)0xc3ad, (q15_t)0x2a94, (q15_t)0xc3b1, (q15_t)0x2a88, (q15_t)0xc3b5, (q15_t)0x2a7c, (q15_t)0xc3ba, - (q15_t)0x2a70, (q15_t)0xc3be, (q15_t)0x2a65, (q15_t)0xc3c2, (q15_t)0x2a59, (q15_t)0xc3c6, (q15_t)0x2a4d, (q15_t)0xc3ca, - (q15_t)0x2a41, (q15_t)0xc3cf, (q15_t)0x2a35, (q15_t)0xc3d3, (q15_t)0x2a29, (q15_t)0xc3d7, (q15_t)0x2a1e, (q15_t)0xc3dc, - (q15_t)0x2a12, (q15_t)0xc3e0, (q15_t)0x2a06, (q15_t)0xc3e4, (q15_t)0x29fa, (q15_t)0xc3e9, (q15_t)0x29ee, (q15_t)0xc3ed, - (q15_t)0x29e3, (q15_t)0xc3f1, (q15_t)0x29d7, (q15_t)0xc3f6, (q15_t)0x29cb, (q15_t)0xc3fa, (q15_t)0x29bf, (q15_t)0xc3fe, - (q15_t)0x29b4, (q15_t)0xc403, (q15_t)0x29a8, (q15_t)0xc407, (q15_t)0x299c, (q15_t)0xc40b, (q15_t)0x2990, (q15_t)0xc410, - (q15_t)0x2984, (q15_t)0xc414, (q15_t)0x2979, (q15_t)0xc419, (q15_t)0x296d, (q15_t)0xc41d, (q15_t)0x2961, (q15_t)0xc422, - (q15_t)0x2955, (q15_t)0xc426, (q15_t)0x294a, (q15_t)0xc42a, (q15_t)0x293e, (q15_t)0xc42f, (q15_t)0x2932, (q15_t)0xc433, - (q15_t)0x2926, (q15_t)0xc438, (q15_t)0x291b, (q15_t)0xc43c, (q15_t)0x290f, (q15_t)0xc441, (q15_t)0x2903, (q15_t)0xc445, - (q15_t)0x28f7, (q15_t)0xc44a, (q15_t)0x28ec, (q15_t)0xc44e, (q15_t)0x28e0, (q15_t)0xc453, (q15_t)0x28d4, (q15_t)0xc457, - (q15_t)0x28c9, (q15_t)0xc45c, (q15_t)0x28bd, (q15_t)0xc461, (q15_t)0x28b1, (q15_t)0xc465, (q15_t)0x28a5, (q15_t)0xc46a, - (q15_t)0x289a, (q15_t)0xc46e, (q15_t)0x288e, (q15_t)0xc473, (q15_t)0x2882, (q15_t)0xc478, (q15_t)0x2877, (q15_t)0xc47c, - (q15_t)0x286b, (q15_t)0xc481, (q15_t)0x285f, (q15_t)0xc485, (q15_t)0x2854, (q15_t)0xc48a, (q15_t)0x2848, (q15_t)0xc48f, - (q15_t)0x283c, (q15_t)0xc493, (q15_t)0x2831, (q15_t)0xc498, (q15_t)0x2825, (q15_t)0xc49d, (q15_t)0x2819, (q15_t)0xc4a1, - (q15_t)0x280e, (q15_t)0xc4a6, (q15_t)0x2802, (q15_t)0xc4ab, (q15_t)0x27f6, (q15_t)0xc4b0, (q15_t)0x27eb, (q15_t)0xc4b4, - (q15_t)0x27df, (q15_t)0xc4b9, (q15_t)0x27d3, (q15_t)0xc4be, (q15_t)0x27c8, (q15_t)0xc4c2, (q15_t)0x27bc, (q15_t)0xc4c7, - (q15_t)0x27b1, (q15_t)0xc4cc, (q15_t)0x27a5, (q15_t)0xc4d1, (q15_t)0x2799, (q15_t)0xc4d6, (q15_t)0x278e, (q15_t)0xc4da, - (q15_t)0x2782, (q15_t)0xc4df, (q15_t)0x2777, (q15_t)0xc4e4, (q15_t)0x276b, (q15_t)0xc4e9, (q15_t)0x275f, (q15_t)0xc4ee, - (q15_t)0x2754, (q15_t)0xc4f2, (q15_t)0x2748, (q15_t)0xc4f7, (q15_t)0x273d, (q15_t)0xc4fc, (q15_t)0x2731, (q15_t)0xc501, - (q15_t)0x2725, (q15_t)0xc506, (q15_t)0x271a, (q15_t)0xc50b, (q15_t)0x270e, (q15_t)0xc510, (q15_t)0x2703, (q15_t)0xc515, - (q15_t)0x26f7, (q15_t)0xc51a, (q15_t)0x26ec, (q15_t)0xc51e, (q15_t)0x26e0, (q15_t)0xc523, (q15_t)0x26d4, (q15_t)0xc528, - (q15_t)0x26c9, (q15_t)0xc52d, (q15_t)0x26bd, (q15_t)0xc532, (q15_t)0x26b2, (q15_t)0xc537, (q15_t)0x26a6, (q15_t)0xc53c, - (q15_t)0x269b, (q15_t)0xc541, (q15_t)0x268f, (q15_t)0xc546, (q15_t)0x2684, (q15_t)0xc54b, (q15_t)0x2678, (q15_t)0xc550, - (q15_t)0x266d, (q15_t)0xc555, (q15_t)0x2661, (q15_t)0xc55a, (q15_t)0x2656, (q15_t)0xc55f, (q15_t)0x264a, (q15_t)0xc564, - (q15_t)0x263f, (q15_t)0xc569, (q15_t)0x2633, (q15_t)0xc56e, (q15_t)0x2628, (q15_t)0xc573, (q15_t)0x261c, (q15_t)0xc578, - (q15_t)0x2611, (q15_t)0xc57e, (q15_t)0x2605, (q15_t)0xc583, (q15_t)0x25fa, (q15_t)0xc588, (q15_t)0x25ee, (q15_t)0xc58d, - (q15_t)0x25e3, (q15_t)0xc592, (q15_t)0x25d7, (q15_t)0xc597, (q15_t)0x25cc, (q15_t)0xc59c, (q15_t)0x25c0, (q15_t)0xc5a1, - (q15_t)0x25b5, (q15_t)0xc5a7, (q15_t)0x25a9, (q15_t)0xc5ac, (q15_t)0x259e, (q15_t)0xc5b1, (q15_t)0x2592, (q15_t)0xc5b6, - (q15_t)0x2587, (q15_t)0xc5bb, (q15_t)0x257c, (q15_t)0xc5c1, (q15_t)0x2570, (q15_t)0xc5c6, (q15_t)0x2565, (q15_t)0xc5cb, - (q15_t)0x2559, (q15_t)0xc5d0, (q15_t)0x254e, (q15_t)0xc5d5, (q15_t)0x2542, (q15_t)0xc5db, (q15_t)0x2537, (q15_t)0xc5e0, - (q15_t)0x252c, (q15_t)0xc5e5, (q15_t)0x2520, (q15_t)0xc5ea, (q15_t)0x2515, (q15_t)0xc5f0, (q15_t)0x2509, (q15_t)0xc5f5, - (q15_t)0x24fe, (q15_t)0xc5fa, (q15_t)0x24f3, (q15_t)0xc600, (q15_t)0x24e7, (q15_t)0xc605, (q15_t)0x24dc, (q15_t)0xc60a, - (q15_t)0x24d0, (q15_t)0xc610, (q15_t)0x24c5, (q15_t)0xc615, (q15_t)0x24ba, (q15_t)0xc61a, (q15_t)0x24ae, (q15_t)0xc620, - (q15_t)0x24a3, (q15_t)0xc625, (q15_t)0x2498, (q15_t)0xc62a, (q15_t)0x248c, (q15_t)0xc630, (q15_t)0x2481, (q15_t)0xc635, - (q15_t)0x2476, (q15_t)0xc63b, (q15_t)0x246a, (q15_t)0xc640, (q15_t)0x245f, (q15_t)0xc645, (q15_t)0x2454, (q15_t)0xc64b, - (q15_t)0x2448, (q15_t)0xc650, (q15_t)0x243d, (q15_t)0xc656, (q15_t)0x2432, (q15_t)0xc65b, (q15_t)0x2426, (q15_t)0xc661, - (q15_t)0x241b, (q15_t)0xc666, (q15_t)0x2410, (q15_t)0xc66c, (q15_t)0x2404, (q15_t)0xc671, (q15_t)0x23f9, (q15_t)0xc677, - (q15_t)0x23ee, (q15_t)0xc67c, (q15_t)0x23e2, (q15_t)0xc682, (q15_t)0x23d7, (q15_t)0xc687, (q15_t)0x23cc, (q15_t)0xc68d, - (q15_t)0x23c1, (q15_t)0xc692, (q15_t)0x23b5, (q15_t)0xc698, (q15_t)0x23aa, (q15_t)0xc69d, (q15_t)0x239f, (q15_t)0xc6a3, - (q15_t)0x2394, (q15_t)0xc6a8, (q15_t)0x2388, (q15_t)0xc6ae, (q15_t)0x237d, (q15_t)0xc6b4, (q15_t)0x2372, (q15_t)0xc6b9, - (q15_t)0x2367, (q15_t)0xc6bf, (q15_t)0x235b, (q15_t)0xc6c5, (q15_t)0x2350, (q15_t)0xc6ca, (q15_t)0x2345, (q15_t)0xc6d0, - (q15_t)0x233a, (q15_t)0xc6d5, (q15_t)0x232e, (q15_t)0xc6db, (q15_t)0x2323, (q15_t)0xc6e1, (q15_t)0x2318, (q15_t)0xc6e6, - (q15_t)0x230d, (q15_t)0xc6ec, (q15_t)0x2301, (q15_t)0xc6f2, (q15_t)0x22f6, (q15_t)0xc6f7, (q15_t)0x22eb, (q15_t)0xc6fd, - (q15_t)0x22e0, (q15_t)0xc703, (q15_t)0x22d5, (q15_t)0xc709, (q15_t)0x22ca, (q15_t)0xc70e, (q15_t)0x22be, (q15_t)0xc714, - (q15_t)0x22b3, (q15_t)0xc71a, (q15_t)0x22a8, (q15_t)0xc720, (q15_t)0x229d, (q15_t)0xc725, (q15_t)0x2292, (q15_t)0xc72b, - (q15_t)0x2287, (q15_t)0xc731, (q15_t)0x227b, (q15_t)0xc737, (q15_t)0x2270, (q15_t)0xc73d, (q15_t)0x2265, (q15_t)0xc742, - (q15_t)0x225a, (q15_t)0xc748, (q15_t)0x224f, (q15_t)0xc74e, (q15_t)0x2244, (q15_t)0xc754, (q15_t)0x2239, (q15_t)0xc75a, - (q15_t)0x222d, (q15_t)0xc75f, (q15_t)0x2222, (q15_t)0xc765, (q15_t)0x2217, (q15_t)0xc76b, (q15_t)0x220c, (q15_t)0xc771, - (q15_t)0x2201, (q15_t)0xc777, (q15_t)0x21f6, (q15_t)0xc77d, (q15_t)0x21eb, (q15_t)0xc783, (q15_t)0x21e0, (q15_t)0xc789, - (q15_t)0x21d5, (q15_t)0xc78f, (q15_t)0x21ca, (q15_t)0xc795, (q15_t)0x21be, (q15_t)0xc79a, (q15_t)0x21b3, (q15_t)0xc7a0, - (q15_t)0x21a8, (q15_t)0xc7a6, (q15_t)0x219d, (q15_t)0xc7ac, (q15_t)0x2192, (q15_t)0xc7b2, (q15_t)0x2187, (q15_t)0xc7b8, - (q15_t)0x217c, (q15_t)0xc7be, (q15_t)0x2171, (q15_t)0xc7c4, (q15_t)0x2166, (q15_t)0xc7ca, (q15_t)0x215b, (q15_t)0xc7d0, - (q15_t)0x2150, (q15_t)0xc7d6, (q15_t)0x2145, (q15_t)0xc7dc, (q15_t)0x213a, (q15_t)0xc7e2, (q15_t)0x212f, (q15_t)0xc7e8, - (q15_t)0x2124, (q15_t)0xc7ee, (q15_t)0x2119, (q15_t)0xc7f5, (q15_t)0x210e, (q15_t)0xc7fb, (q15_t)0x2103, (q15_t)0xc801, - (q15_t)0x20f8, (q15_t)0xc807, (q15_t)0x20ed, (q15_t)0xc80d, (q15_t)0x20e2, (q15_t)0xc813, (q15_t)0x20d7, (q15_t)0xc819, - (q15_t)0x20cc, (q15_t)0xc81f, (q15_t)0x20c1, (q15_t)0xc825, (q15_t)0x20b6, (q15_t)0xc82b, (q15_t)0x20ab, (q15_t)0xc832, - (q15_t)0x20a0, (q15_t)0xc838, (q15_t)0x2095, (q15_t)0xc83e, (q15_t)0x208a, (q15_t)0xc844, (q15_t)0x207f, (q15_t)0xc84a, - (q15_t)0x2074, (q15_t)0xc850, (q15_t)0x2069, (q15_t)0xc857, (q15_t)0x205e, (q15_t)0xc85d, (q15_t)0x2054, (q15_t)0xc863, - (q15_t)0x2049, (q15_t)0xc869, (q15_t)0x203e, (q15_t)0xc870, (q15_t)0x2033, (q15_t)0xc876, (q15_t)0x2028, (q15_t)0xc87c, - (q15_t)0x201d, (q15_t)0xc882, (q15_t)0x2012, (q15_t)0xc889, (q15_t)0x2007, (q15_t)0xc88f, (q15_t)0x1ffc, (q15_t)0xc895, - (q15_t)0x1ff1, (q15_t)0xc89b, (q15_t)0x1fe7, (q15_t)0xc8a2, (q15_t)0x1fdc, (q15_t)0xc8a8, (q15_t)0x1fd1, (q15_t)0xc8ae, - (q15_t)0x1fc6, (q15_t)0xc8b5, (q15_t)0x1fbb, (q15_t)0xc8bb, (q15_t)0x1fb0, (q15_t)0xc8c1, (q15_t)0x1fa5, (q15_t)0xc8c8, - (q15_t)0x1f9b, (q15_t)0xc8ce, (q15_t)0x1f90, (q15_t)0xc8d4, (q15_t)0x1f85, (q15_t)0xc8db, (q15_t)0x1f7a, (q15_t)0xc8e1, - (q15_t)0x1f6f, (q15_t)0xc8e8, (q15_t)0x1f65, (q15_t)0xc8ee, (q15_t)0x1f5a, (q15_t)0xc8f4, (q15_t)0x1f4f, (q15_t)0xc8fb, - (q15_t)0x1f44, (q15_t)0xc901, (q15_t)0x1f39, (q15_t)0xc908, (q15_t)0x1f2f, (q15_t)0xc90e, (q15_t)0x1f24, (q15_t)0xc915, - (q15_t)0x1f19, (q15_t)0xc91b, (q15_t)0x1f0e, (q15_t)0xc921, (q15_t)0x1f03, (q15_t)0xc928, (q15_t)0x1ef9, (q15_t)0xc92e, - (q15_t)0x1eee, (q15_t)0xc935, (q15_t)0x1ee3, (q15_t)0xc93b, (q15_t)0x1ed8, (q15_t)0xc942, (q15_t)0x1ece, (q15_t)0xc948, - (q15_t)0x1ec3, (q15_t)0xc94f, (q15_t)0x1eb8, (q15_t)0xc955, (q15_t)0x1ead, (q15_t)0xc95c, (q15_t)0x1ea3, (q15_t)0xc963, - (q15_t)0x1e98, (q15_t)0xc969, (q15_t)0x1e8d, (q15_t)0xc970, (q15_t)0x1e83, (q15_t)0xc976, (q15_t)0x1e78, (q15_t)0xc97d, - (q15_t)0x1e6d, (q15_t)0xc983, (q15_t)0x1e62, (q15_t)0xc98a, (q15_t)0x1e58, (q15_t)0xc991, (q15_t)0x1e4d, (q15_t)0xc997, - (q15_t)0x1e42, (q15_t)0xc99e, (q15_t)0x1e38, (q15_t)0xc9a4, (q15_t)0x1e2d, (q15_t)0xc9ab, (q15_t)0x1e22, (q15_t)0xc9b2, - (q15_t)0x1e18, (q15_t)0xc9b8, (q15_t)0x1e0d, (q15_t)0xc9bf, (q15_t)0x1e02, (q15_t)0xc9c6, (q15_t)0x1df8, (q15_t)0xc9cc, - (q15_t)0x1ded, (q15_t)0xc9d3, (q15_t)0x1de2, (q15_t)0xc9da, (q15_t)0x1dd8, (q15_t)0xc9e0, (q15_t)0x1dcd, (q15_t)0xc9e7, - (q15_t)0x1dc3, (q15_t)0xc9ee, (q15_t)0x1db8, (q15_t)0xc9f5, (q15_t)0x1dad, (q15_t)0xc9fb, (q15_t)0x1da3, (q15_t)0xca02, - (q15_t)0x1d98, (q15_t)0xca09, (q15_t)0x1d8e, (q15_t)0xca10, (q15_t)0x1d83, (q15_t)0xca16, (q15_t)0x1d78, (q15_t)0xca1d, - (q15_t)0x1d6e, (q15_t)0xca24, (q15_t)0x1d63, (q15_t)0xca2b, (q15_t)0x1d59, (q15_t)0xca32, (q15_t)0x1d4e, (q15_t)0xca38, - (q15_t)0x1d44, (q15_t)0xca3f, (q15_t)0x1d39, (q15_t)0xca46, (q15_t)0x1d2e, (q15_t)0xca4d, (q15_t)0x1d24, (q15_t)0xca54, - (q15_t)0x1d19, (q15_t)0xca5b, (q15_t)0x1d0f, (q15_t)0xca61, (q15_t)0x1d04, (q15_t)0xca68, (q15_t)0x1cfa, (q15_t)0xca6f, - (q15_t)0x1cef, (q15_t)0xca76, (q15_t)0x1ce5, (q15_t)0xca7d, (q15_t)0x1cda, (q15_t)0xca84, (q15_t)0x1cd0, (q15_t)0xca8b, - (q15_t)0x1cc5, (q15_t)0xca92, (q15_t)0x1cbb, (q15_t)0xca99, (q15_t)0x1cb0, (q15_t)0xca9f, (q15_t)0x1ca6, (q15_t)0xcaa6, - (q15_t)0x1c9b, (q15_t)0xcaad, (q15_t)0x1c91, (q15_t)0xcab4, (q15_t)0x1c86, (q15_t)0xcabb, (q15_t)0x1c7c, (q15_t)0xcac2, - (q15_t)0x1c72, (q15_t)0xcac9, (q15_t)0x1c67, (q15_t)0xcad0, (q15_t)0x1c5d, (q15_t)0xcad7, (q15_t)0x1c52, (q15_t)0xcade, - (q15_t)0x1c48, (q15_t)0xcae5, (q15_t)0x1c3d, (q15_t)0xcaec, (q15_t)0x1c33, (q15_t)0xcaf3, (q15_t)0x1c29, (q15_t)0xcafa, - (q15_t)0x1c1e, (q15_t)0xcb01, (q15_t)0x1c14, (q15_t)0xcb08, (q15_t)0x1c09, (q15_t)0xcb0f, (q15_t)0x1bff, (q15_t)0xcb16, - (q15_t)0x1bf5, (q15_t)0xcb1e, (q15_t)0x1bea, (q15_t)0xcb25, (q15_t)0x1be0, (q15_t)0xcb2c, (q15_t)0x1bd5, (q15_t)0xcb33, - (q15_t)0x1bcb, (q15_t)0xcb3a, (q15_t)0x1bc1, (q15_t)0xcb41, (q15_t)0x1bb6, (q15_t)0xcb48, (q15_t)0x1bac, (q15_t)0xcb4f, - (q15_t)0x1ba2, (q15_t)0xcb56, (q15_t)0x1b97, (q15_t)0xcb5e, (q15_t)0x1b8d, (q15_t)0xcb65, (q15_t)0x1b83, (q15_t)0xcb6c, - (q15_t)0x1b78, (q15_t)0xcb73, (q15_t)0x1b6e, (q15_t)0xcb7a, (q15_t)0x1b64, (q15_t)0xcb81, (q15_t)0x1b59, (q15_t)0xcb89, - (q15_t)0x1b4f, (q15_t)0xcb90, (q15_t)0x1b45, (q15_t)0xcb97, (q15_t)0x1b3b, (q15_t)0xcb9e, (q15_t)0x1b30, (q15_t)0xcba5, - (q15_t)0x1b26, (q15_t)0xcbad, (q15_t)0x1b1c, (q15_t)0xcbb4, (q15_t)0x1b11, (q15_t)0xcbbb, (q15_t)0x1b07, (q15_t)0xcbc2, - (q15_t)0x1afd, (q15_t)0xcbca, (q15_t)0x1af3, (q15_t)0xcbd1, (q15_t)0x1ae8, (q15_t)0xcbd8, (q15_t)0x1ade, (q15_t)0xcbe0, - (q15_t)0x1ad4, (q15_t)0xcbe7, (q15_t)0x1aca, (q15_t)0xcbee, (q15_t)0x1abf, (q15_t)0xcbf5, (q15_t)0x1ab5, (q15_t)0xcbfd, - (q15_t)0x1aab, (q15_t)0xcc04, (q15_t)0x1aa1, (q15_t)0xcc0b, (q15_t)0x1a97, (q15_t)0xcc13, (q15_t)0x1a8c, (q15_t)0xcc1a, - (q15_t)0x1a82, (q15_t)0xcc21, (q15_t)0x1a78, (q15_t)0xcc29, (q15_t)0x1a6e, (q15_t)0xcc30, (q15_t)0x1a64, (q15_t)0xcc38, - (q15_t)0x1a5a, (q15_t)0xcc3f, (q15_t)0x1a4f, (q15_t)0xcc46, (q15_t)0x1a45, (q15_t)0xcc4e, (q15_t)0x1a3b, (q15_t)0xcc55, - (q15_t)0x1a31, (q15_t)0xcc5d, (q15_t)0x1a27, (q15_t)0xcc64, (q15_t)0x1a1d, (q15_t)0xcc6b, (q15_t)0x1a13, (q15_t)0xcc73, - (q15_t)0x1a08, (q15_t)0xcc7a, (q15_t)0x19fe, (q15_t)0xcc82, (q15_t)0x19f4, (q15_t)0xcc89, (q15_t)0x19ea, (q15_t)0xcc91, - (q15_t)0x19e0, (q15_t)0xcc98, (q15_t)0x19d6, (q15_t)0xcca0, (q15_t)0x19cc, (q15_t)0xcca7, (q15_t)0x19c2, (q15_t)0xccaf, - (q15_t)0x19b8, (q15_t)0xccb6, (q15_t)0x19ae, (q15_t)0xccbe, (q15_t)0x19a4, (q15_t)0xccc5, (q15_t)0x199a, (q15_t)0xcccd, - (q15_t)0x198f, (q15_t)0xccd4, (q15_t)0x1985, (q15_t)0xccdc, (q15_t)0x197b, (q15_t)0xcce3, (q15_t)0x1971, (q15_t)0xcceb, - (q15_t)0x1967, (q15_t)0xccf3, (q15_t)0x195d, (q15_t)0xccfa, (q15_t)0x1953, (q15_t)0xcd02, (q15_t)0x1949, (q15_t)0xcd09, - (q15_t)0x193f, (q15_t)0xcd11, (q15_t)0x1935, (q15_t)0xcd19, (q15_t)0x192b, (q15_t)0xcd20, (q15_t)0x1921, (q15_t)0xcd28, - (q15_t)0x1917, (q15_t)0xcd30, (q15_t)0x190d, (q15_t)0xcd37, (q15_t)0x1903, (q15_t)0xcd3f, (q15_t)0x18f9, (q15_t)0xcd46, - (q15_t)0x18ef, (q15_t)0xcd4e, (q15_t)0x18e6, (q15_t)0xcd56, (q15_t)0x18dc, (q15_t)0xcd5d, (q15_t)0x18d2, (q15_t)0xcd65, - (q15_t)0x18c8, (q15_t)0xcd6d, (q15_t)0x18be, (q15_t)0xcd75, (q15_t)0x18b4, (q15_t)0xcd7c, (q15_t)0x18aa, (q15_t)0xcd84, - (q15_t)0x18a0, (q15_t)0xcd8c, (q15_t)0x1896, (q15_t)0xcd93, (q15_t)0x188c, (q15_t)0xcd9b, (q15_t)0x1882, (q15_t)0xcda3, - (q15_t)0x1878, (q15_t)0xcdab, (q15_t)0x186f, (q15_t)0xcdb2, (q15_t)0x1865, (q15_t)0xcdba, (q15_t)0x185b, (q15_t)0xcdc2, - (q15_t)0x1851, (q15_t)0xcdca, (q15_t)0x1847, (q15_t)0xcdd2, (q15_t)0x183d, (q15_t)0xcdd9, (q15_t)0x1833, (q15_t)0xcde1, - (q15_t)0x182a, (q15_t)0xcde9, (q15_t)0x1820, (q15_t)0xcdf1, (q15_t)0x1816, (q15_t)0xcdf9, (q15_t)0x180c, (q15_t)0xce01, - (q15_t)0x1802, (q15_t)0xce08, (q15_t)0x17f8, (q15_t)0xce10, (q15_t)0x17ef, (q15_t)0xce18, (q15_t)0x17e5, (q15_t)0xce20, - (q15_t)0x17db, (q15_t)0xce28, (q15_t)0x17d1, (q15_t)0xce30, (q15_t)0x17c8, (q15_t)0xce38, (q15_t)0x17be, (q15_t)0xce40, - (q15_t)0x17b4, (q15_t)0xce47, (q15_t)0x17aa, (q15_t)0xce4f, (q15_t)0x17a0, (q15_t)0xce57, (q15_t)0x1797, (q15_t)0xce5f, - (q15_t)0x178d, (q15_t)0xce67, (q15_t)0x1783, (q15_t)0xce6f, (q15_t)0x177a, (q15_t)0xce77, (q15_t)0x1770, (q15_t)0xce7f, - (q15_t)0x1766, (q15_t)0xce87, (q15_t)0x175c, (q15_t)0xce8f, (q15_t)0x1753, (q15_t)0xce97, (q15_t)0x1749, (q15_t)0xce9f, - (q15_t)0x173f, (q15_t)0xcea7, (q15_t)0x1736, (q15_t)0xceaf, (q15_t)0x172c, (q15_t)0xceb7, (q15_t)0x1722, (q15_t)0xcebf, - (q15_t)0x1719, (q15_t)0xcec7, (q15_t)0x170f, (q15_t)0xcecf, (q15_t)0x1705, (q15_t)0xced7, (q15_t)0x16fc, (q15_t)0xcedf, - (q15_t)0x16f2, (q15_t)0xcee7, (q15_t)0x16e8, (q15_t)0xceef, (q15_t)0x16df, (q15_t)0xcef7, (q15_t)0x16d5, (q15_t)0xceff, - (q15_t)0x16cb, (q15_t)0xcf07, (q15_t)0x16c2, (q15_t)0xcf10, (q15_t)0x16b8, (q15_t)0xcf18, (q15_t)0x16af, (q15_t)0xcf20, - (q15_t)0x16a5, (q15_t)0xcf28, (q15_t)0x169b, (q15_t)0xcf30, (q15_t)0x1692, (q15_t)0xcf38, (q15_t)0x1688, (q15_t)0xcf40, - (q15_t)0x167f, (q15_t)0xcf48, (q15_t)0x1675, (q15_t)0xcf51, (q15_t)0x166c, (q15_t)0xcf59, (q15_t)0x1662, (q15_t)0xcf61, - (q15_t)0x1659, (q15_t)0xcf69, (q15_t)0x164f, (q15_t)0xcf71, (q15_t)0x1645, (q15_t)0xcf79, (q15_t)0x163c, (q15_t)0xcf82, - (q15_t)0x1632, (q15_t)0xcf8a, (q15_t)0x1629, (q15_t)0xcf92, (q15_t)0x161f, (q15_t)0xcf9a, (q15_t)0x1616, (q15_t)0xcfa3, - (q15_t)0x160c, (q15_t)0xcfab, (q15_t)0x1603, (q15_t)0xcfb3, (q15_t)0x15f9, (q15_t)0xcfbb, (q15_t)0x15f0, (q15_t)0xcfc4, - (q15_t)0x15e6, (q15_t)0xcfcc, (q15_t)0x15dd, (q15_t)0xcfd4, (q15_t)0x15d4, (q15_t)0xcfdc, (q15_t)0x15ca, (q15_t)0xcfe5, - (q15_t)0x15c1, (q15_t)0xcfed, (q15_t)0x15b7, (q15_t)0xcff5, (q15_t)0x15ae, (q15_t)0xcffe, (q15_t)0x15a4, (q15_t)0xd006, - (q15_t)0x159b, (q15_t)0xd00e, (q15_t)0x1592, (q15_t)0xd016, (q15_t)0x1588, (q15_t)0xd01f, (q15_t)0x157f, (q15_t)0xd027, - (q15_t)0x1575, (q15_t)0xd030, (q15_t)0x156c, (q15_t)0xd038, (q15_t)0x1563, (q15_t)0xd040, (q15_t)0x1559, (q15_t)0xd049, - (q15_t)0x1550, (q15_t)0xd051, (q15_t)0x1547, (q15_t)0xd059, (q15_t)0x153d, (q15_t)0xd062, (q15_t)0x1534, (q15_t)0xd06a, - (q15_t)0x152a, (q15_t)0xd073, (q15_t)0x1521, (q15_t)0xd07b, (q15_t)0x1518, (q15_t)0xd083, (q15_t)0x150e, (q15_t)0xd08c, - (q15_t)0x1505, (q15_t)0xd094, (q15_t)0x14fc, (q15_t)0xd09d, (q15_t)0x14f3, (q15_t)0xd0a5, (q15_t)0x14e9, (q15_t)0xd0ae, - (q15_t)0x14e0, (q15_t)0xd0b6, (q15_t)0x14d7, (q15_t)0xd0bf, (q15_t)0x14cd, (q15_t)0xd0c7, (q15_t)0x14c4, (q15_t)0xd0d0, - (q15_t)0x14bb, (q15_t)0xd0d8, (q15_t)0x14b2, (q15_t)0xd0e0, (q15_t)0x14a8, (q15_t)0xd0e9, (q15_t)0x149f, (q15_t)0xd0f2, - (q15_t)0x1496, (q15_t)0xd0fa, (q15_t)0x148d, (q15_t)0xd103, (q15_t)0x1483, (q15_t)0xd10b, (q15_t)0x147a, (q15_t)0xd114, - (q15_t)0x1471, (q15_t)0xd11c, (q15_t)0x1468, (q15_t)0xd125, (q15_t)0x145f, (q15_t)0xd12d, (q15_t)0x1455, (q15_t)0xd136, - (q15_t)0x144c, (q15_t)0xd13e, (q15_t)0x1443, (q15_t)0xd147, (q15_t)0x143a, (q15_t)0xd150, (q15_t)0x1431, (q15_t)0xd158, - (q15_t)0x1428, (q15_t)0xd161, (q15_t)0x141e, (q15_t)0xd169, (q15_t)0x1415, (q15_t)0xd172, (q15_t)0x140c, (q15_t)0xd17b, - (q15_t)0x1403, (q15_t)0xd183, (q15_t)0x13fa, (q15_t)0xd18c, (q15_t)0x13f1, (q15_t)0xd195, (q15_t)0x13e8, (q15_t)0xd19d, - (q15_t)0x13df, (q15_t)0xd1a6, (q15_t)0x13d5, (q15_t)0xd1af, (q15_t)0x13cc, (q15_t)0xd1b7, (q15_t)0x13c3, (q15_t)0xd1c0, - (q15_t)0x13ba, (q15_t)0xd1c9, (q15_t)0x13b1, (q15_t)0xd1d1, (q15_t)0x13a8, (q15_t)0xd1da, (q15_t)0x139f, (q15_t)0xd1e3, - (q15_t)0x1396, (q15_t)0xd1eb, (q15_t)0x138d, (q15_t)0xd1f4, (q15_t)0x1384, (q15_t)0xd1fd, (q15_t)0x137b, (q15_t)0xd206, - (q15_t)0x1372, (q15_t)0xd20e, (q15_t)0x1369, (q15_t)0xd217, (q15_t)0x1360, (q15_t)0xd220, (q15_t)0x1357, (q15_t)0xd229, - (q15_t)0x134e, (q15_t)0xd231, (q15_t)0x1345, (q15_t)0xd23a, (q15_t)0x133c, (q15_t)0xd243, (q15_t)0x1333, (q15_t)0xd24c, - (q15_t)0x132a, (q15_t)0xd255, (q15_t)0x1321, (q15_t)0xd25d, (q15_t)0x1318, (q15_t)0xd266, (q15_t)0x130f, (q15_t)0xd26f, - (q15_t)0x1306, (q15_t)0xd278, (q15_t)0x12fd, (q15_t)0xd281, (q15_t)0x12f4, (q15_t)0xd28a, (q15_t)0x12eb, (q15_t)0xd292, - (q15_t)0x12e2, (q15_t)0xd29b, (q15_t)0x12d9, (q15_t)0xd2a4, (q15_t)0x12d1, (q15_t)0xd2ad, (q15_t)0x12c8, (q15_t)0xd2b6, - (q15_t)0x12bf, (q15_t)0xd2bf, (q15_t)0x12b6, (q15_t)0xd2c8, (q15_t)0x12ad, (q15_t)0xd2d1, (q15_t)0x12a4, (q15_t)0xd2d9, - (q15_t)0x129b, (q15_t)0xd2e2, (q15_t)0x1292, (q15_t)0xd2eb, (q15_t)0x128a, (q15_t)0xd2f4, (q15_t)0x1281, (q15_t)0xd2fd, - (q15_t)0x1278, (q15_t)0xd306, (q15_t)0x126f, (q15_t)0xd30f, (q15_t)0x1266, (q15_t)0xd318, (q15_t)0x125d, (q15_t)0xd321, - (q15_t)0x1255, (q15_t)0xd32a, (q15_t)0x124c, (q15_t)0xd333, (q15_t)0x1243, (q15_t)0xd33c, (q15_t)0x123a, (q15_t)0xd345, - (q15_t)0x1231, (q15_t)0xd34e, (q15_t)0x1229, (q15_t)0xd357, (q15_t)0x1220, (q15_t)0xd360, (q15_t)0x1217, (q15_t)0xd369, - (q15_t)0x120e, (q15_t)0xd372, (q15_t)0x1206, (q15_t)0xd37b, (q15_t)0x11fd, (q15_t)0xd384, (q15_t)0x11f4, (q15_t)0xd38d, - (q15_t)0x11eb, (q15_t)0xd396, (q15_t)0x11e3, (q15_t)0xd39f, (q15_t)0x11da, (q15_t)0xd3a8, (q15_t)0x11d1, (q15_t)0xd3b1, - (q15_t)0x11c9, (q15_t)0xd3ba, (q15_t)0x11c0, (q15_t)0xd3c3, (q15_t)0x11b7, (q15_t)0xd3cc, (q15_t)0x11af, (q15_t)0xd3d5, - (q15_t)0x11a6, (q15_t)0xd3df, (q15_t)0x119d, (q15_t)0xd3e8, (q15_t)0x1195, (q15_t)0xd3f1, (q15_t)0x118c, (q15_t)0xd3fa, - (q15_t)0x1183, (q15_t)0xd403, (q15_t)0x117b, (q15_t)0xd40c, (q15_t)0x1172, (q15_t)0xd415, (q15_t)0x1169, (q15_t)0xd41e, - (q15_t)0x1161, (q15_t)0xd428, (q15_t)0x1158, (q15_t)0xd431, (q15_t)0x1150, (q15_t)0xd43a, (q15_t)0x1147, (q15_t)0xd443, - (q15_t)0x113e, (q15_t)0xd44c, (q15_t)0x1136, (q15_t)0xd455, (q15_t)0x112d, (q15_t)0xd45f, (q15_t)0x1125, (q15_t)0xd468, - (q15_t)0x111c, (q15_t)0xd471, (q15_t)0x1114, (q15_t)0xd47a, (q15_t)0x110b, (q15_t)0xd483, (q15_t)0x1103, (q15_t)0xd48d, - (q15_t)0x10fa, (q15_t)0xd496, (q15_t)0x10f2, (q15_t)0xd49f, (q15_t)0x10e9, (q15_t)0xd4a8, (q15_t)0x10e0, (q15_t)0xd4b2, - (q15_t)0x10d8, (q15_t)0xd4bb, (q15_t)0x10d0, (q15_t)0xd4c4, (q15_t)0x10c7, (q15_t)0xd4cd, (q15_t)0x10bf, (q15_t)0xd4d7, - (q15_t)0x10b6, (q15_t)0xd4e0, (q15_t)0x10ae, (q15_t)0xd4e9, (q15_t)0x10a5, (q15_t)0xd4f3, (q15_t)0x109d, (q15_t)0xd4fc, - (q15_t)0x1094, (q15_t)0xd505, (q15_t)0x108c, (q15_t)0xd50e, (q15_t)0x1083, (q15_t)0xd518, (q15_t)0x107b, (q15_t)0xd521, - (q15_t)0x1073, (q15_t)0xd52a, (q15_t)0x106a, (q15_t)0xd534, (q15_t)0x1062, (q15_t)0xd53d, (q15_t)0x1059, (q15_t)0xd547, - (q15_t)0x1051, (q15_t)0xd550, (q15_t)0x1049, (q15_t)0xd559, (q15_t)0x1040, (q15_t)0xd563, (q15_t)0x1038, (q15_t)0xd56c, - (q15_t)0x1030, (q15_t)0xd575, (q15_t)0x1027, (q15_t)0xd57f, (q15_t)0x101f, (q15_t)0xd588, (q15_t)0x1016, (q15_t)0xd592, - (q15_t)0x100e, (q15_t)0xd59b, (q15_t)0x1006, (q15_t)0xd5a4, (q15_t)0xffe, (q15_t)0xd5ae, (q15_t)0xff5, (q15_t)0xd5b7, - (q15_t)0xfed, (q15_t)0xd5c1, (q15_t)0xfe5, (q15_t)0xd5ca, (q15_t)0xfdc, (q15_t)0xd5d4, (q15_t)0xfd4, (q15_t)0xd5dd, - (q15_t)0xfcc, (q15_t)0xd5e6, (q15_t)0xfc4, (q15_t)0xd5f0, (q15_t)0xfbb, (q15_t)0xd5f9, (q15_t)0xfb3, (q15_t)0xd603, - (q15_t)0xfab, (q15_t)0xd60c, (q15_t)0xfa3, (q15_t)0xd616, (q15_t)0xf9a, (q15_t)0xd61f, (q15_t)0xf92, (q15_t)0xd629, - (q15_t)0xf8a, (q15_t)0xd632, (q15_t)0xf82, (q15_t)0xd63c, (q15_t)0xf79, (q15_t)0xd645, (q15_t)0xf71, (q15_t)0xd64f, - (q15_t)0xf69, (q15_t)0xd659, (q15_t)0xf61, (q15_t)0xd662, (q15_t)0xf59, (q15_t)0xd66c, (q15_t)0xf51, (q15_t)0xd675, - (q15_t)0xf48, (q15_t)0xd67f, (q15_t)0xf40, (q15_t)0xd688, (q15_t)0xf38, (q15_t)0xd692, (q15_t)0xf30, (q15_t)0xd69b, - (q15_t)0xf28, (q15_t)0xd6a5, (q15_t)0xf20, (q15_t)0xd6af, (q15_t)0xf18, (q15_t)0xd6b8, (q15_t)0xf10, (q15_t)0xd6c2, - (q15_t)0xf07, (q15_t)0xd6cb, (q15_t)0xeff, (q15_t)0xd6d5, (q15_t)0xef7, (q15_t)0xd6df, (q15_t)0xeef, (q15_t)0xd6e8, - (q15_t)0xee7, (q15_t)0xd6f2, (q15_t)0xedf, (q15_t)0xd6fc, (q15_t)0xed7, (q15_t)0xd705, (q15_t)0xecf, (q15_t)0xd70f, - (q15_t)0xec7, (q15_t)0xd719, (q15_t)0xebf, (q15_t)0xd722, (q15_t)0xeb7, (q15_t)0xd72c, (q15_t)0xeaf, (q15_t)0xd736, - (q15_t)0xea7, (q15_t)0xd73f, (q15_t)0xe9f, (q15_t)0xd749, (q15_t)0xe97, (q15_t)0xd753, (q15_t)0xe8f, (q15_t)0xd75c, - (q15_t)0xe87, (q15_t)0xd766, (q15_t)0xe7f, (q15_t)0xd770, (q15_t)0xe77, (q15_t)0xd77a, (q15_t)0xe6f, (q15_t)0xd783, - (q15_t)0xe67, (q15_t)0xd78d, (q15_t)0xe5f, (q15_t)0xd797, (q15_t)0xe57, (q15_t)0xd7a0, (q15_t)0xe4f, (q15_t)0xd7aa, - (q15_t)0xe47, (q15_t)0xd7b4, (q15_t)0xe40, (q15_t)0xd7be, (q15_t)0xe38, (q15_t)0xd7c8, (q15_t)0xe30, (q15_t)0xd7d1, - (q15_t)0xe28, (q15_t)0xd7db, (q15_t)0xe20, (q15_t)0xd7e5, (q15_t)0xe18, (q15_t)0xd7ef, (q15_t)0xe10, (q15_t)0xd7f8, - (q15_t)0xe08, (q15_t)0xd802, (q15_t)0xe01, (q15_t)0xd80c, (q15_t)0xdf9, (q15_t)0xd816, (q15_t)0xdf1, (q15_t)0xd820, - (q15_t)0xde9, (q15_t)0xd82a, (q15_t)0xde1, (q15_t)0xd833, (q15_t)0xdd9, (q15_t)0xd83d, (q15_t)0xdd2, (q15_t)0xd847, - (q15_t)0xdca, (q15_t)0xd851, (q15_t)0xdc2, (q15_t)0xd85b, (q15_t)0xdba, (q15_t)0xd865, (q15_t)0xdb2, (q15_t)0xd86f, - (q15_t)0xdab, (q15_t)0xd878, (q15_t)0xda3, (q15_t)0xd882, (q15_t)0xd9b, (q15_t)0xd88c, (q15_t)0xd93, (q15_t)0xd896, - (q15_t)0xd8c, (q15_t)0xd8a0, (q15_t)0xd84, (q15_t)0xd8aa, (q15_t)0xd7c, (q15_t)0xd8b4, (q15_t)0xd75, (q15_t)0xd8be, - (q15_t)0xd6d, (q15_t)0xd8c8, (q15_t)0xd65, (q15_t)0xd8d2, (q15_t)0xd5d, (q15_t)0xd8dc, (q15_t)0xd56, (q15_t)0xd8e6, - (q15_t)0xd4e, (q15_t)0xd8ef, (q15_t)0xd46, (q15_t)0xd8f9, (q15_t)0xd3f, (q15_t)0xd903, (q15_t)0xd37, (q15_t)0xd90d, - (q15_t)0xd30, (q15_t)0xd917, (q15_t)0xd28, (q15_t)0xd921, (q15_t)0xd20, (q15_t)0xd92b, (q15_t)0xd19, (q15_t)0xd935, - (q15_t)0xd11, (q15_t)0xd93f, (q15_t)0xd09, (q15_t)0xd949, (q15_t)0xd02, (q15_t)0xd953, (q15_t)0xcfa, (q15_t)0xd95d, - (q15_t)0xcf3, (q15_t)0xd967, (q15_t)0xceb, (q15_t)0xd971, (q15_t)0xce3, (q15_t)0xd97b, (q15_t)0xcdc, (q15_t)0xd985, - (q15_t)0xcd4, (q15_t)0xd98f, (q15_t)0xccd, (q15_t)0xd99a, (q15_t)0xcc5, (q15_t)0xd9a4, (q15_t)0xcbe, (q15_t)0xd9ae, - (q15_t)0xcb6, (q15_t)0xd9b8, (q15_t)0xcaf, (q15_t)0xd9c2, (q15_t)0xca7, (q15_t)0xd9cc, (q15_t)0xca0, (q15_t)0xd9d6, - (q15_t)0xc98, (q15_t)0xd9e0, (q15_t)0xc91, (q15_t)0xd9ea, (q15_t)0xc89, (q15_t)0xd9f4, (q15_t)0xc82, (q15_t)0xd9fe, - (q15_t)0xc7a, (q15_t)0xda08, (q15_t)0xc73, (q15_t)0xda13, (q15_t)0xc6b, (q15_t)0xda1d, (q15_t)0xc64, (q15_t)0xda27, - (q15_t)0xc5d, (q15_t)0xda31, (q15_t)0xc55, (q15_t)0xda3b, (q15_t)0xc4e, (q15_t)0xda45, (q15_t)0xc46, (q15_t)0xda4f, - (q15_t)0xc3f, (q15_t)0xda5a, (q15_t)0xc38, (q15_t)0xda64, (q15_t)0xc30, (q15_t)0xda6e, (q15_t)0xc29, (q15_t)0xda78, - (q15_t)0xc21, (q15_t)0xda82, (q15_t)0xc1a, (q15_t)0xda8c, (q15_t)0xc13, (q15_t)0xda97, (q15_t)0xc0b, (q15_t)0xdaa1, - (q15_t)0xc04, (q15_t)0xdaab, (q15_t)0xbfd, (q15_t)0xdab5, (q15_t)0xbf5, (q15_t)0xdabf, (q15_t)0xbee, (q15_t)0xdaca, - (q15_t)0xbe7, (q15_t)0xdad4, (q15_t)0xbe0, (q15_t)0xdade, (q15_t)0xbd8, (q15_t)0xdae8, (q15_t)0xbd1, (q15_t)0xdaf3, - (q15_t)0xbca, (q15_t)0xdafd, (q15_t)0xbc2, (q15_t)0xdb07, (q15_t)0xbbb, (q15_t)0xdb11, (q15_t)0xbb4, (q15_t)0xdb1c, - (q15_t)0xbad, (q15_t)0xdb26, (q15_t)0xba5, (q15_t)0xdb30, (q15_t)0xb9e, (q15_t)0xdb3b, (q15_t)0xb97, (q15_t)0xdb45, - (q15_t)0xb90, (q15_t)0xdb4f, (q15_t)0xb89, (q15_t)0xdb59, (q15_t)0xb81, (q15_t)0xdb64, (q15_t)0xb7a, (q15_t)0xdb6e, - (q15_t)0xb73, (q15_t)0xdb78, (q15_t)0xb6c, (q15_t)0xdb83, (q15_t)0xb65, (q15_t)0xdb8d, (q15_t)0xb5e, (q15_t)0xdb97, - (q15_t)0xb56, (q15_t)0xdba2, (q15_t)0xb4f, (q15_t)0xdbac, (q15_t)0xb48, (q15_t)0xdbb6, (q15_t)0xb41, (q15_t)0xdbc1, - (q15_t)0xb3a, (q15_t)0xdbcb, (q15_t)0xb33, (q15_t)0xdbd5, (q15_t)0xb2c, (q15_t)0xdbe0, (q15_t)0xb25, (q15_t)0xdbea, - (q15_t)0xb1e, (q15_t)0xdbf5, (q15_t)0xb16, (q15_t)0xdbff, (q15_t)0xb0f, (q15_t)0xdc09, (q15_t)0xb08, (q15_t)0xdc14, - (q15_t)0xb01, (q15_t)0xdc1e, (q15_t)0xafa, (q15_t)0xdc29, (q15_t)0xaf3, (q15_t)0xdc33, (q15_t)0xaec, (q15_t)0xdc3d, - (q15_t)0xae5, (q15_t)0xdc48, (q15_t)0xade, (q15_t)0xdc52, (q15_t)0xad7, (q15_t)0xdc5d, (q15_t)0xad0, (q15_t)0xdc67, - (q15_t)0xac9, (q15_t)0xdc72, (q15_t)0xac2, (q15_t)0xdc7c, (q15_t)0xabb, (q15_t)0xdc86, (q15_t)0xab4, (q15_t)0xdc91, - (q15_t)0xaad, (q15_t)0xdc9b, (q15_t)0xaa6, (q15_t)0xdca6, (q15_t)0xa9f, (q15_t)0xdcb0, (q15_t)0xa99, (q15_t)0xdcbb, - (q15_t)0xa92, (q15_t)0xdcc5, (q15_t)0xa8b, (q15_t)0xdcd0, (q15_t)0xa84, (q15_t)0xdcda, (q15_t)0xa7d, (q15_t)0xdce5, - (q15_t)0xa76, (q15_t)0xdcef, (q15_t)0xa6f, (q15_t)0xdcfa, (q15_t)0xa68, (q15_t)0xdd04, (q15_t)0xa61, (q15_t)0xdd0f, - (q15_t)0xa5b, (q15_t)0xdd19, (q15_t)0xa54, (q15_t)0xdd24, (q15_t)0xa4d, (q15_t)0xdd2e, (q15_t)0xa46, (q15_t)0xdd39, - (q15_t)0xa3f, (q15_t)0xdd44, (q15_t)0xa38, (q15_t)0xdd4e, (q15_t)0xa32, (q15_t)0xdd59, (q15_t)0xa2b, (q15_t)0xdd63, - (q15_t)0xa24, (q15_t)0xdd6e, (q15_t)0xa1d, (q15_t)0xdd78, (q15_t)0xa16, (q15_t)0xdd83, (q15_t)0xa10, (q15_t)0xdd8e, - (q15_t)0xa09, (q15_t)0xdd98, (q15_t)0xa02, (q15_t)0xdda3, (q15_t)0x9fb, (q15_t)0xddad, (q15_t)0x9f5, (q15_t)0xddb8, - (q15_t)0x9ee, (q15_t)0xddc3, (q15_t)0x9e7, (q15_t)0xddcd, (q15_t)0x9e0, (q15_t)0xddd8, (q15_t)0x9da, (q15_t)0xdde2, - (q15_t)0x9d3, (q15_t)0xdded, (q15_t)0x9cc, (q15_t)0xddf8, (q15_t)0x9c6, (q15_t)0xde02, (q15_t)0x9bf, (q15_t)0xde0d, - (q15_t)0x9b8, (q15_t)0xde18, (q15_t)0x9b2, (q15_t)0xde22, (q15_t)0x9ab, (q15_t)0xde2d, (q15_t)0x9a4, (q15_t)0xde38, - (q15_t)0x99e, (q15_t)0xde42, (q15_t)0x997, (q15_t)0xde4d, (q15_t)0x991, (q15_t)0xde58, (q15_t)0x98a, (q15_t)0xde62, - (q15_t)0x983, (q15_t)0xde6d, (q15_t)0x97d, (q15_t)0xde78, (q15_t)0x976, (q15_t)0xde83, (q15_t)0x970, (q15_t)0xde8d, - (q15_t)0x969, (q15_t)0xde98, (q15_t)0x963, (q15_t)0xdea3, (q15_t)0x95c, (q15_t)0xdead, (q15_t)0x955, (q15_t)0xdeb8, - (q15_t)0x94f, (q15_t)0xdec3, (q15_t)0x948, (q15_t)0xdece, (q15_t)0x942, (q15_t)0xded8, (q15_t)0x93b, (q15_t)0xdee3, - (q15_t)0x935, (q15_t)0xdeee, (q15_t)0x92e, (q15_t)0xdef9, (q15_t)0x928, (q15_t)0xdf03, (q15_t)0x921, (q15_t)0xdf0e, - (q15_t)0x91b, (q15_t)0xdf19, (q15_t)0x915, (q15_t)0xdf24, (q15_t)0x90e, (q15_t)0xdf2f, (q15_t)0x908, (q15_t)0xdf39, - (q15_t)0x901, (q15_t)0xdf44, (q15_t)0x8fb, (q15_t)0xdf4f, (q15_t)0x8f4, (q15_t)0xdf5a, (q15_t)0x8ee, (q15_t)0xdf65, - (q15_t)0x8e8, (q15_t)0xdf6f, (q15_t)0x8e1, (q15_t)0xdf7a, (q15_t)0x8db, (q15_t)0xdf85, (q15_t)0x8d4, (q15_t)0xdf90, - (q15_t)0x8ce, (q15_t)0xdf9b, (q15_t)0x8c8, (q15_t)0xdfa5, (q15_t)0x8c1, (q15_t)0xdfb0, (q15_t)0x8bb, (q15_t)0xdfbb, - (q15_t)0x8b5, (q15_t)0xdfc6, (q15_t)0x8ae, (q15_t)0xdfd1, (q15_t)0x8a8, (q15_t)0xdfdc, (q15_t)0x8a2, (q15_t)0xdfe7, - (q15_t)0x89b, (q15_t)0xdff1, (q15_t)0x895, (q15_t)0xdffc, (q15_t)0x88f, (q15_t)0xe007, (q15_t)0x889, (q15_t)0xe012, - (q15_t)0x882, (q15_t)0xe01d, (q15_t)0x87c, (q15_t)0xe028, (q15_t)0x876, (q15_t)0xe033, (q15_t)0x870, (q15_t)0xe03e, - (q15_t)0x869, (q15_t)0xe049, (q15_t)0x863, (q15_t)0xe054, (q15_t)0x85d, (q15_t)0xe05e, (q15_t)0x857, (q15_t)0xe069, - (q15_t)0x850, (q15_t)0xe074, (q15_t)0x84a, (q15_t)0xe07f, (q15_t)0x844, (q15_t)0xe08a, (q15_t)0x83e, (q15_t)0xe095, - (q15_t)0x838, (q15_t)0xe0a0, (q15_t)0x832, (q15_t)0xe0ab, (q15_t)0x82b, (q15_t)0xe0b6, (q15_t)0x825, (q15_t)0xe0c1, - (q15_t)0x81f, (q15_t)0xe0cc, (q15_t)0x819, (q15_t)0xe0d7, (q15_t)0x813, (q15_t)0xe0e2, (q15_t)0x80d, (q15_t)0xe0ed, - (q15_t)0x807, (q15_t)0xe0f8, (q15_t)0x801, (q15_t)0xe103, (q15_t)0x7fb, (q15_t)0xe10e, (q15_t)0x7f5, (q15_t)0xe119, - (q15_t)0x7ee, (q15_t)0xe124, (q15_t)0x7e8, (q15_t)0xe12f, (q15_t)0x7e2, (q15_t)0xe13a, (q15_t)0x7dc, (q15_t)0xe145, - (q15_t)0x7d6, (q15_t)0xe150, (q15_t)0x7d0, (q15_t)0xe15b, (q15_t)0x7ca, (q15_t)0xe166, (q15_t)0x7c4, (q15_t)0xe171, - (q15_t)0x7be, (q15_t)0xe17c, (q15_t)0x7b8, (q15_t)0xe187, (q15_t)0x7b2, (q15_t)0xe192, (q15_t)0x7ac, (q15_t)0xe19d, - (q15_t)0x7a6, (q15_t)0xe1a8, (q15_t)0x7a0, (q15_t)0xe1b3, (q15_t)0x79a, (q15_t)0xe1be, (q15_t)0x795, (q15_t)0xe1ca, - (q15_t)0x78f, (q15_t)0xe1d5, (q15_t)0x789, (q15_t)0xe1e0, (q15_t)0x783, (q15_t)0xe1eb, (q15_t)0x77d, (q15_t)0xe1f6, - (q15_t)0x777, (q15_t)0xe201, (q15_t)0x771, (q15_t)0xe20c, (q15_t)0x76b, (q15_t)0xe217, (q15_t)0x765, (q15_t)0xe222, - (q15_t)0x75f, (q15_t)0xe22d, (q15_t)0x75a, (q15_t)0xe239, (q15_t)0x754, (q15_t)0xe244, (q15_t)0x74e, (q15_t)0xe24f, - (q15_t)0x748, (q15_t)0xe25a, (q15_t)0x742, (q15_t)0xe265, (q15_t)0x73d, (q15_t)0xe270, (q15_t)0x737, (q15_t)0xe27b, - (q15_t)0x731, (q15_t)0xe287, (q15_t)0x72b, (q15_t)0xe292, (q15_t)0x725, (q15_t)0xe29d, (q15_t)0x720, (q15_t)0xe2a8, - (q15_t)0x71a, (q15_t)0xe2b3, (q15_t)0x714, (q15_t)0xe2be, (q15_t)0x70e, (q15_t)0xe2ca, (q15_t)0x709, (q15_t)0xe2d5, - (q15_t)0x703, (q15_t)0xe2e0, (q15_t)0x6fd, (q15_t)0xe2eb, (q15_t)0x6f7, (q15_t)0xe2f6, (q15_t)0x6f2, (q15_t)0xe301, - (q15_t)0x6ec, (q15_t)0xe30d, (q15_t)0x6e6, (q15_t)0xe318, (q15_t)0x6e1, (q15_t)0xe323, (q15_t)0x6db, (q15_t)0xe32e, - (q15_t)0x6d5, (q15_t)0xe33a, (q15_t)0x6d0, (q15_t)0xe345, (q15_t)0x6ca, (q15_t)0xe350, (q15_t)0x6c5, (q15_t)0xe35b, - (q15_t)0x6bf, (q15_t)0xe367, (q15_t)0x6b9, (q15_t)0xe372, (q15_t)0x6b4, (q15_t)0xe37d, (q15_t)0x6ae, (q15_t)0xe388, - (q15_t)0x6a8, (q15_t)0xe394, (q15_t)0x6a3, (q15_t)0xe39f, (q15_t)0x69d, (q15_t)0xe3aa, (q15_t)0x698, (q15_t)0xe3b5, - (q15_t)0x692, (q15_t)0xe3c1, (q15_t)0x68d, (q15_t)0xe3cc, (q15_t)0x687, (q15_t)0xe3d7, (q15_t)0x682, (q15_t)0xe3e2, - (q15_t)0x67c, (q15_t)0xe3ee, (q15_t)0x677, (q15_t)0xe3f9, (q15_t)0x671, (q15_t)0xe404, (q15_t)0x66c, (q15_t)0xe410, - (q15_t)0x666, (q15_t)0xe41b, (q15_t)0x661, (q15_t)0xe426, (q15_t)0x65b, (q15_t)0xe432, (q15_t)0x656, (q15_t)0xe43d, - (q15_t)0x650, (q15_t)0xe448, (q15_t)0x64b, (q15_t)0xe454, (q15_t)0x645, (q15_t)0xe45f, (q15_t)0x640, (q15_t)0xe46a, - (q15_t)0x63b, (q15_t)0xe476, (q15_t)0x635, (q15_t)0xe481, (q15_t)0x630, (q15_t)0xe48c, (q15_t)0x62a, (q15_t)0xe498, - (q15_t)0x625, (q15_t)0xe4a3, (q15_t)0x620, (q15_t)0xe4ae, (q15_t)0x61a, (q15_t)0xe4ba, (q15_t)0x615, (q15_t)0xe4c5, - (q15_t)0x610, (q15_t)0xe4d0, (q15_t)0x60a, (q15_t)0xe4dc, (q15_t)0x605, (q15_t)0xe4e7, (q15_t)0x600, (q15_t)0xe4f3, - (q15_t)0x5fa, (q15_t)0xe4fe, (q15_t)0x5f5, (q15_t)0xe509, (q15_t)0x5f0, (q15_t)0xe515, (q15_t)0x5ea, (q15_t)0xe520, - (q15_t)0x5e5, (q15_t)0xe52c, (q15_t)0x5e0, (q15_t)0xe537, (q15_t)0x5db, (q15_t)0xe542, (q15_t)0x5d5, (q15_t)0xe54e, - (q15_t)0x5d0, (q15_t)0xe559, (q15_t)0x5cb, (q15_t)0xe565, (q15_t)0x5c6, (q15_t)0xe570, (q15_t)0x5c1, (q15_t)0xe57c, - (q15_t)0x5bb, (q15_t)0xe587, (q15_t)0x5b6, (q15_t)0xe592, (q15_t)0x5b1, (q15_t)0xe59e, (q15_t)0x5ac, (q15_t)0xe5a9, - (q15_t)0x5a7, (q15_t)0xe5b5, (q15_t)0x5a1, (q15_t)0xe5c0, (q15_t)0x59c, (q15_t)0xe5cc, (q15_t)0x597, (q15_t)0xe5d7, - (q15_t)0x592, (q15_t)0xe5e3, (q15_t)0x58d, (q15_t)0xe5ee, (q15_t)0x588, (q15_t)0xe5fa, (q15_t)0x583, (q15_t)0xe605, - (q15_t)0x57e, (q15_t)0xe611, (q15_t)0x578, (q15_t)0xe61c, (q15_t)0x573, (q15_t)0xe628, (q15_t)0x56e, (q15_t)0xe633, - (q15_t)0x569, (q15_t)0xe63f, (q15_t)0x564, (q15_t)0xe64a, (q15_t)0x55f, (q15_t)0xe656, (q15_t)0x55a, (q15_t)0xe661, - (q15_t)0x555, (q15_t)0xe66d, (q15_t)0x550, (q15_t)0xe678, (q15_t)0x54b, (q15_t)0xe684, (q15_t)0x546, (q15_t)0xe68f, - (q15_t)0x541, (q15_t)0xe69b, (q15_t)0x53c, (q15_t)0xe6a6, (q15_t)0x537, (q15_t)0xe6b2, (q15_t)0x532, (q15_t)0xe6bd, - (q15_t)0x52d, (q15_t)0xe6c9, (q15_t)0x528, (q15_t)0xe6d4, (q15_t)0x523, (q15_t)0xe6e0, (q15_t)0x51e, (q15_t)0xe6ec, - (q15_t)0x51a, (q15_t)0xe6f7, (q15_t)0x515, (q15_t)0xe703, (q15_t)0x510, (q15_t)0xe70e, (q15_t)0x50b, (q15_t)0xe71a, - (q15_t)0x506, (q15_t)0xe725, (q15_t)0x501, (q15_t)0xe731, (q15_t)0x4fc, (q15_t)0xe73d, (q15_t)0x4f7, (q15_t)0xe748, - (q15_t)0x4f2, (q15_t)0xe754, (q15_t)0x4ee, (q15_t)0xe75f, (q15_t)0x4e9, (q15_t)0xe76b, (q15_t)0x4e4, (q15_t)0xe777, - (q15_t)0x4df, (q15_t)0xe782, (q15_t)0x4da, (q15_t)0xe78e, (q15_t)0x4d6, (q15_t)0xe799, (q15_t)0x4d1, (q15_t)0xe7a5, - (q15_t)0x4cc, (q15_t)0xe7b1, (q15_t)0x4c7, (q15_t)0xe7bc, (q15_t)0x4c2, (q15_t)0xe7c8, (q15_t)0x4be, (q15_t)0xe7d3, - (q15_t)0x4b9, (q15_t)0xe7df, (q15_t)0x4b4, (q15_t)0xe7eb, (q15_t)0x4b0, (q15_t)0xe7f6, (q15_t)0x4ab, (q15_t)0xe802, - (q15_t)0x4a6, (q15_t)0xe80e, (q15_t)0x4a1, (q15_t)0xe819, (q15_t)0x49d, (q15_t)0xe825, (q15_t)0x498, (q15_t)0xe831, - (q15_t)0x493, (q15_t)0xe83c, (q15_t)0x48f, (q15_t)0xe848, (q15_t)0x48a, (q15_t)0xe854, (q15_t)0x485, (q15_t)0xe85f, - (q15_t)0x481, (q15_t)0xe86b, (q15_t)0x47c, (q15_t)0xe877, (q15_t)0x478, (q15_t)0xe882, (q15_t)0x473, (q15_t)0xe88e, - (q15_t)0x46e, (q15_t)0xe89a, (q15_t)0x46a, (q15_t)0xe8a5, (q15_t)0x465, (q15_t)0xe8b1, (q15_t)0x461, (q15_t)0xe8bd, - (q15_t)0x45c, (q15_t)0xe8c9, (q15_t)0x457, (q15_t)0xe8d4, (q15_t)0x453, (q15_t)0xe8e0, (q15_t)0x44e, (q15_t)0xe8ec, - (q15_t)0x44a, (q15_t)0xe8f7, (q15_t)0x445, (q15_t)0xe903, (q15_t)0x441, (q15_t)0xe90f, (q15_t)0x43c, (q15_t)0xe91b, - (q15_t)0x438, (q15_t)0xe926, (q15_t)0x433, (q15_t)0xe932, (q15_t)0x42f, (q15_t)0xe93e, (q15_t)0x42a, (q15_t)0xe94a, - (q15_t)0x426, (q15_t)0xe955, (q15_t)0x422, (q15_t)0xe961, (q15_t)0x41d, (q15_t)0xe96d, (q15_t)0x419, (q15_t)0xe979, - (q15_t)0x414, (q15_t)0xe984, (q15_t)0x410, (q15_t)0xe990, (q15_t)0x40b, (q15_t)0xe99c, (q15_t)0x407, (q15_t)0xe9a8, - (q15_t)0x403, (q15_t)0xe9b4, (q15_t)0x3fe, (q15_t)0xe9bf, (q15_t)0x3fa, (q15_t)0xe9cb, (q15_t)0x3f6, (q15_t)0xe9d7, - (q15_t)0x3f1, (q15_t)0xe9e3, (q15_t)0x3ed, (q15_t)0xe9ee, (q15_t)0x3e9, (q15_t)0xe9fa, (q15_t)0x3e4, (q15_t)0xea06, - (q15_t)0x3e0, (q15_t)0xea12, (q15_t)0x3dc, (q15_t)0xea1e, (q15_t)0x3d7, (q15_t)0xea29, (q15_t)0x3d3, (q15_t)0xea35, - (q15_t)0x3cf, (q15_t)0xea41, (q15_t)0x3ca, (q15_t)0xea4d, (q15_t)0x3c6, (q15_t)0xea59, (q15_t)0x3c2, (q15_t)0xea65, - (q15_t)0x3be, (q15_t)0xea70, (q15_t)0x3ba, (q15_t)0xea7c, (q15_t)0x3b5, (q15_t)0xea88, (q15_t)0x3b1, (q15_t)0xea94, - (q15_t)0x3ad, (q15_t)0xeaa0, (q15_t)0x3a9, (q15_t)0xeaac, (q15_t)0x3a5, (q15_t)0xeab7, (q15_t)0x3a0, (q15_t)0xeac3, - (q15_t)0x39c, (q15_t)0xeacf, (q15_t)0x398, (q15_t)0xeadb, (q15_t)0x394, (q15_t)0xeae7, (q15_t)0x390, (q15_t)0xeaf3, - (q15_t)0x38c, (q15_t)0xeaff, (q15_t)0x387, (q15_t)0xeb0a, (q15_t)0x383, (q15_t)0xeb16, (q15_t)0x37f, (q15_t)0xeb22, - (q15_t)0x37b, (q15_t)0xeb2e, (q15_t)0x377, (q15_t)0xeb3a, (q15_t)0x373, (q15_t)0xeb46, (q15_t)0x36f, (q15_t)0xeb52, - (q15_t)0x36b, (q15_t)0xeb5e, (q15_t)0x367, (q15_t)0xeb6a, (q15_t)0x363, (q15_t)0xeb75, (q15_t)0x35f, (q15_t)0xeb81, - (q15_t)0x35b, (q15_t)0xeb8d, (q15_t)0x357, (q15_t)0xeb99, (q15_t)0x353, (q15_t)0xeba5, (q15_t)0x34f, (q15_t)0xebb1, - (q15_t)0x34b, (q15_t)0xebbd, (q15_t)0x347, (q15_t)0xebc9, (q15_t)0x343, (q15_t)0xebd5, (q15_t)0x33f, (q15_t)0xebe1, - (q15_t)0x33b, (q15_t)0xebed, (q15_t)0x337, (q15_t)0xebf9, (q15_t)0x333, (q15_t)0xec05, (q15_t)0x32f, (q15_t)0xec10, - (q15_t)0x32b, (q15_t)0xec1c, (q15_t)0x327, (q15_t)0xec28, (q15_t)0x323, (q15_t)0xec34, (q15_t)0x320, (q15_t)0xec40, - (q15_t)0x31c, (q15_t)0xec4c, (q15_t)0x318, (q15_t)0xec58, (q15_t)0x314, (q15_t)0xec64, (q15_t)0x310, (q15_t)0xec70, - (q15_t)0x30c, (q15_t)0xec7c, (q15_t)0x308, (q15_t)0xec88, (q15_t)0x305, (q15_t)0xec94, (q15_t)0x301, (q15_t)0xeca0, - (q15_t)0x2fd, (q15_t)0xecac, (q15_t)0x2f9, (q15_t)0xecb8, (q15_t)0x2f5, (q15_t)0xecc4, (q15_t)0x2f2, (q15_t)0xecd0, - (q15_t)0x2ee, (q15_t)0xecdc, (q15_t)0x2ea, (q15_t)0xece8, (q15_t)0x2e6, (q15_t)0xecf4, (q15_t)0x2e3, (q15_t)0xed00, - (q15_t)0x2df, (q15_t)0xed0c, (q15_t)0x2db, (q15_t)0xed18, (q15_t)0x2d8, (q15_t)0xed24, (q15_t)0x2d4, (q15_t)0xed30, - (q15_t)0x2d0, (q15_t)0xed3c, (q15_t)0x2cc, (q15_t)0xed48, (q15_t)0x2c9, (q15_t)0xed54, (q15_t)0x2c5, (q15_t)0xed60, - (q15_t)0x2c1, (q15_t)0xed6c, (q15_t)0x2be, (q15_t)0xed78, (q15_t)0x2ba, (q15_t)0xed84, (q15_t)0x2b7, (q15_t)0xed90, - (q15_t)0x2b3, (q15_t)0xed9c, (q15_t)0x2af, (q15_t)0xeda8, (q15_t)0x2ac, (q15_t)0xedb4, (q15_t)0x2a8, (q15_t)0xedc0, - (q15_t)0x2a5, (q15_t)0xedcc, (q15_t)0x2a1, (q15_t)0xedd8, (q15_t)0x29d, (q15_t)0xede4, (q15_t)0x29a, (q15_t)0xedf0, - (q15_t)0x296, (q15_t)0xedfc, (q15_t)0x293, (q15_t)0xee09, (q15_t)0x28f, (q15_t)0xee15, (q15_t)0x28c, (q15_t)0xee21, - (q15_t)0x288, (q15_t)0xee2d, (q15_t)0x285, (q15_t)0xee39, (q15_t)0x281, (q15_t)0xee45, (q15_t)0x27e, (q15_t)0xee51, - (q15_t)0x27a, (q15_t)0xee5d, (q15_t)0x277, (q15_t)0xee69, (q15_t)0x273, (q15_t)0xee75, (q15_t)0x270, (q15_t)0xee81, - (q15_t)0x26d, (q15_t)0xee8d, (q15_t)0x269, (q15_t)0xee99, (q15_t)0x266, (q15_t)0xeea6, (q15_t)0x262, (q15_t)0xeeb2, - (q15_t)0x25f, (q15_t)0xeebe, (q15_t)0x25c, (q15_t)0xeeca, (q15_t)0x258, (q15_t)0xeed6, (q15_t)0x255, (q15_t)0xeee2, - (q15_t)0x251, (q15_t)0xeeee, (q15_t)0x24e, (q15_t)0xeefa, (q15_t)0x24b, (q15_t)0xef06, (q15_t)0x247, (q15_t)0xef13, - (q15_t)0x244, (q15_t)0xef1f, (q15_t)0x241, (q15_t)0xef2b, (q15_t)0x23e, (q15_t)0xef37, (q15_t)0x23a, (q15_t)0xef43, - (q15_t)0x237, (q15_t)0xef4f, (q15_t)0x234, (q15_t)0xef5b, (q15_t)0x230, (q15_t)0xef67, (q15_t)0x22d, (q15_t)0xef74, - (q15_t)0x22a, (q15_t)0xef80, (q15_t)0x227, (q15_t)0xef8c, (q15_t)0x223, (q15_t)0xef98, (q15_t)0x220, (q15_t)0xefa4, - (q15_t)0x21d, (q15_t)0xefb0, (q15_t)0x21a, (q15_t)0xefbc, (q15_t)0x217, (q15_t)0xefc9, (q15_t)0x213, (q15_t)0xefd5, - (q15_t)0x210, (q15_t)0xefe1, (q15_t)0x20d, (q15_t)0xefed, (q15_t)0x20a, (q15_t)0xeff9, (q15_t)0x207, (q15_t)0xf005, - (q15_t)0x204, (q15_t)0xf012, (q15_t)0x201, (q15_t)0xf01e, (q15_t)0x1fd, (q15_t)0xf02a, (q15_t)0x1fa, (q15_t)0xf036, - (q15_t)0x1f7, (q15_t)0xf042, (q15_t)0x1f4, (q15_t)0xf04e, (q15_t)0x1f1, (q15_t)0xf05b, (q15_t)0x1ee, (q15_t)0xf067, - (q15_t)0x1eb, (q15_t)0xf073, (q15_t)0x1e8, (q15_t)0xf07f, (q15_t)0x1e5, (q15_t)0xf08b, (q15_t)0x1e2, (q15_t)0xf098, - (q15_t)0x1df, (q15_t)0xf0a4, (q15_t)0x1dc, (q15_t)0xf0b0, (q15_t)0x1d9, (q15_t)0xf0bc, (q15_t)0x1d6, (q15_t)0xf0c8, - (q15_t)0x1d3, (q15_t)0xf0d5, (q15_t)0x1d0, (q15_t)0xf0e1, (q15_t)0x1cd, (q15_t)0xf0ed, (q15_t)0x1ca, (q15_t)0xf0f9, - (q15_t)0x1c7, (q15_t)0xf105, (q15_t)0x1c4, (q15_t)0xf112, (q15_t)0x1c1, (q15_t)0xf11e, (q15_t)0x1be, (q15_t)0xf12a, - (q15_t)0x1bb, (q15_t)0xf136, (q15_t)0x1b8, (q15_t)0xf143, (q15_t)0x1b6, (q15_t)0xf14f, (q15_t)0x1b3, (q15_t)0xf15b, - (q15_t)0x1b0, (q15_t)0xf167, (q15_t)0x1ad, (q15_t)0xf174, (q15_t)0x1aa, (q15_t)0xf180, (q15_t)0x1a7, (q15_t)0xf18c, - (q15_t)0x1a4, (q15_t)0xf198, (q15_t)0x1a2, (q15_t)0xf1a4, (q15_t)0x19f, (q15_t)0xf1b1, (q15_t)0x19c, (q15_t)0xf1bd, - (q15_t)0x199, (q15_t)0xf1c9, (q15_t)0x196, (q15_t)0xf1d5, (q15_t)0x194, (q15_t)0xf1e2, (q15_t)0x191, (q15_t)0xf1ee, - (q15_t)0x18e, (q15_t)0xf1fa, (q15_t)0x18b, (q15_t)0xf207, (q15_t)0x189, (q15_t)0xf213, (q15_t)0x186, (q15_t)0xf21f, - (q15_t)0x183, (q15_t)0xf22b, (q15_t)0x180, (q15_t)0xf238, (q15_t)0x17e, (q15_t)0xf244, (q15_t)0x17b, (q15_t)0xf250, - (q15_t)0x178, (q15_t)0xf25c, (q15_t)0x176, (q15_t)0xf269, (q15_t)0x173, (q15_t)0xf275, (q15_t)0x170, (q15_t)0xf281, - (q15_t)0x16e, (q15_t)0xf28e, (q15_t)0x16b, (q15_t)0xf29a, (q15_t)0x168, (q15_t)0xf2a6, (q15_t)0x166, (q15_t)0xf2b2, - (q15_t)0x163, (q15_t)0xf2bf, (q15_t)0x161, (q15_t)0xf2cb, (q15_t)0x15e, (q15_t)0xf2d7, (q15_t)0x15b, (q15_t)0xf2e4, - (q15_t)0x159, (q15_t)0xf2f0, (q15_t)0x156, (q15_t)0xf2fc, (q15_t)0x154, (q15_t)0xf308, (q15_t)0x151, (q15_t)0xf315, - (q15_t)0x14f, (q15_t)0xf321, (q15_t)0x14c, (q15_t)0xf32d, (q15_t)0x14a, (q15_t)0xf33a, (q15_t)0x147, (q15_t)0xf346, - (q15_t)0x145, (q15_t)0xf352, (q15_t)0x142, (q15_t)0xf35f, (q15_t)0x140, (q15_t)0xf36b, (q15_t)0x13d, (q15_t)0xf377, - (q15_t)0x13b, (q15_t)0xf384, (q15_t)0x138, (q15_t)0xf390, (q15_t)0x136, (q15_t)0xf39c, (q15_t)0x134, (q15_t)0xf3a9, - (q15_t)0x131, (q15_t)0xf3b5, (q15_t)0x12f, (q15_t)0xf3c1, (q15_t)0x12c, (q15_t)0xf3ce, (q15_t)0x12a, (q15_t)0xf3da, - (q15_t)0x128, (q15_t)0xf3e6, (q15_t)0x125, (q15_t)0xf3f3, (q15_t)0x123, (q15_t)0xf3ff, (q15_t)0x120, (q15_t)0xf40b, - (q15_t)0x11e, (q15_t)0xf418, (q15_t)0x11c, (q15_t)0xf424, (q15_t)0x119, (q15_t)0xf430, (q15_t)0x117, (q15_t)0xf43d, - (q15_t)0x115, (q15_t)0xf449, (q15_t)0x113, (q15_t)0xf455, (q15_t)0x110, (q15_t)0xf462, (q15_t)0x10e, (q15_t)0xf46e, - (q15_t)0x10c, (q15_t)0xf47b, (q15_t)0x109, (q15_t)0xf487, (q15_t)0x107, (q15_t)0xf493, (q15_t)0x105, (q15_t)0xf4a0, - (q15_t)0x103, (q15_t)0xf4ac, (q15_t)0x100, (q15_t)0xf4b8, (q15_t)0xfe, (q15_t)0xf4c5, (q15_t)0xfc, (q15_t)0xf4d1, - (q15_t)0xfa, (q15_t)0xf4dd, (q15_t)0xf8, (q15_t)0xf4ea, (q15_t)0xf6, (q15_t)0xf4f6, (q15_t)0xf3, (q15_t)0xf503, - (q15_t)0xf1, (q15_t)0xf50f, (q15_t)0xef, (q15_t)0xf51b, (q15_t)0xed, (q15_t)0xf528, (q15_t)0xeb, (q15_t)0xf534, - (q15_t)0xe9, (q15_t)0xf540, (q15_t)0xe7, (q15_t)0xf54d, (q15_t)0xe4, (q15_t)0xf559, (q15_t)0xe2, (q15_t)0xf566, - (q15_t)0xe0, (q15_t)0xf572, (q15_t)0xde, (q15_t)0xf57e, (q15_t)0xdc, (q15_t)0xf58b, (q15_t)0xda, (q15_t)0xf597, - (q15_t)0xd8, (q15_t)0xf5a4, (q15_t)0xd6, (q15_t)0xf5b0, (q15_t)0xd4, (q15_t)0xf5bc, (q15_t)0xd2, (q15_t)0xf5c9, - (q15_t)0xd0, (q15_t)0xf5d5, (q15_t)0xce, (q15_t)0xf5e2, (q15_t)0xcc, (q15_t)0xf5ee, (q15_t)0xca, (q15_t)0xf5fa, - (q15_t)0xc8, (q15_t)0xf607, (q15_t)0xc6, (q15_t)0xf613, (q15_t)0xc4, (q15_t)0xf620, (q15_t)0xc2, (q15_t)0xf62c, - (q15_t)0xc0, (q15_t)0xf639, (q15_t)0xbe, (q15_t)0xf645, (q15_t)0xbd, (q15_t)0xf651, (q15_t)0xbb, (q15_t)0xf65e, - (q15_t)0xb9, (q15_t)0xf66a, (q15_t)0xb7, (q15_t)0xf677, (q15_t)0xb5, (q15_t)0xf683, (q15_t)0xb3, (q15_t)0xf690, - (q15_t)0xb1, (q15_t)0xf69c, (q15_t)0xaf, (q15_t)0xf6a8, (q15_t)0xae, (q15_t)0xf6b5, (q15_t)0xac, (q15_t)0xf6c1, - (q15_t)0xaa, (q15_t)0xf6ce, (q15_t)0xa8, (q15_t)0xf6da, (q15_t)0xa6, (q15_t)0xf6e7, (q15_t)0xa5, (q15_t)0xf6f3, - (q15_t)0xa3, (q15_t)0xf6ff, (q15_t)0xa1, (q15_t)0xf70c, (q15_t)0x9f, (q15_t)0xf718, (q15_t)0x9e, (q15_t)0xf725, - (q15_t)0x9c, (q15_t)0xf731, (q15_t)0x9a, (q15_t)0xf73e, (q15_t)0x98, (q15_t)0xf74a, (q15_t)0x97, (q15_t)0xf757, - (q15_t)0x95, (q15_t)0xf763, (q15_t)0x93, (q15_t)0xf76f, (q15_t)0x92, (q15_t)0xf77c, (q15_t)0x90, (q15_t)0xf788, - (q15_t)0x8e, (q15_t)0xf795, (q15_t)0x8d, (q15_t)0xf7a1, (q15_t)0x8b, (q15_t)0xf7ae, (q15_t)0x89, (q15_t)0xf7ba, - (q15_t)0x88, (q15_t)0xf7c7, (q15_t)0x86, (q15_t)0xf7d3, (q15_t)0x85, (q15_t)0xf7e0, (q15_t)0x83, (q15_t)0xf7ec, - (q15_t)0x81, (q15_t)0xf7f9, (q15_t)0x80, (q15_t)0xf805, (q15_t)0x7e, (q15_t)0xf811, (q15_t)0x7d, (q15_t)0xf81e, - (q15_t)0x7b, (q15_t)0xf82a, (q15_t)0x7a, (q15_t)0xf837, (q15_t)0x78, (q15_t)0xf843, (q15_t)0x77, (q15_t)0xf850, - (q15_t)0x75, (q15_t)0xf85c, (q15_t)0x74, (q15_t)0xf869, (q15_t)0x72, (q15_t)0xf875, (q15_t)0x71, (q15_t)0xf882, - (q15_t)0x6f, (q15_t)0xf88e, (q15_t)0x6e, (q15_t)0xf89b, (q15_t)0x6c, (q15_t)0xf8a7, (q15_t)0x6b, (q15_t)0xf8b4, - (q15_t)0x69, (q15_t)0xf8c0, (q15_t)0x68, (q15_t)0xf8cd, (q15_t)0x67, (q15_t)0xf8d9, (q15_t)0x65, (q15_t)0xf8e6, - (q15_t)0x64, (q15_t)0xf8f2, (q15_t)0x62, (q15_t)0xf8ff, (q15_t)0x61, (q15_t)0xf90b, (q15_t)0x60, (q15_t)0xf918, - (q15_t)0x5e, (q15_t)0xf924, (q15_t)0x5d, (q15_t)0xf931, (q15_t)0x5c, (q15_t)0xf93d, (q15_t)0x5a, (q15_t)0xf94a, - (q15_t)0x59, (q15_t)0xf956, (q15_t)0x58, (q15_t)0xf963, (q15_t)0x56, (q15_t)0xf96f, (q15_t)0x55, (q15_t)0xf97c, - (q15_t)0x54, (q15_t)0xf988, (q15_t)0x53, (q15_t)0xf995, (q15_t)0x51, (q15_t)0xf9a1, (q15_t)0x50, (q15_t)0xf9ae, - (q15_t)0x4f, (q15_t)0xf9ba, (q15_t)0x4e, (q15_t)0xf9c7, (q15_t)0x4c, (q15_t)0xf9d3, (q15_t)0x4b, (q15_t)0xf9e0, - (q15_t)0x4a, (q15_t)0xf9ec, (q15_t)0x49, (q15_t)0xf9f9, (q15_t)0x48, (q15_t)0xfa05, (q15_t)0x47, (q15_t)0xfa12, - (q15_t)0x45, (q15_t)0xfa1e, (q15_t)0x44, (q15_t)0xfa2b, (q15_t)0x43, (q15_t)0xfa37, (q15_t)0x42, (q15_t)0xfa44, - (q15_t)0x41, (q15_t)0xfa50, (q15_t)0x40, (q15_t)0xfa5d, (q15_t)0x3f, (q15_t)0xfa69, (q15_t)0x3d, (q15_t)0xfa76, - (q15_t)0x3c, (q15_t)0xfa82, (q15_t)0x3b, (q15_t)0xfa8f, (q15_t)0x3a, (q15_t)0xfa9b, (q15_t)0x39, (q15_t)0xfaa8, - (q15_t)0x38, (q15_t)0xfab4, (q15_t)0x37, (q15_t)0xfac1, (q15_t)0x36, (q15_t)0xfacd, (q15_t)0x35, (q15_t)0xfada, - (q15_t)0x34, (q15_t)0xfae6, (q15_t)0x33, (q15_t)0xfaf3, (q15_t)0x32, (q15_t)0xfb00, (q15_t)0x31, (q15_t)0xfb0c, - (q15_t)0x30, (q15_t)0xfb19, (q15_t)0x2f, (q15_t)0xfb25, (q15_t)0x2e, (q15_t)0xfb32, (q15_t)0x2d, (q15_t)0xfb3e, - (q15_t)0x2c, (q15_t)0xfb4b, (q15_t)0x2b, (q15_t)0xfb57, (q15_t)0x2b, (q15_t)0xfb64, (q15_t)0x2a, (q15_t)0xfb70, - (q15_t)0x29, (q15_t)0xfb7d, (q15_t)0x28, (q15_t)0xfb89, (q15_t)0x27, (q15_t)0xfb96, (q15_t)0x26, (q15_t)0xfba2, - (q15_t)0x25, (q15_t)0xfbaf, (q15_t)0x24, (q15_t)0xfbbc, (q15_t)0x24, (q15_t)0xfbc8, (q15_t)0x23, (q15_t)0xfbd5, - (q15_t)0x22, (q15_t)0xfbe1, (q15_t)0x21, (q15_t)0xfbee, (q15_t)0x20, (q15_t)0xfbfa, (q15_t)0x20, (q15_t)0xfc07, - (q15_t)0x1f, (q15_t)0xfc13, (q15_t)0x1e, (q15_t)0xfc20, (q15_t)0x1d, (q15_t)0xfc2c, (q15_t)0x1d, (q15_t)0xfc39, - (q15_t)0x1c, (q15_t)0xfc45, (q15_t)0x1b, (q15_t)0xfc52, (q15_t)0x1a, (q15_t)0xfc5f, (q15_t)0x1a, (q15_t)0xfc6b, - (q15_t)0x19, (q15_t)0xfc78, (q15_t)0x18, (q15_t)0xfc84, (q15_t)0x18, (q15_t)0xfc91, (q15_t)0x17, (q15_t)0xfc9d, - (q15_t)0x16, (q15_t)0xfcaa, (q15_t)0x16, (q15_t)0xfcb6, (q15_t)0x15, (q15_t)0xfcc3, (q15_t)0x14, (q15_t)0xfcd0, - (q15_t)0x14, (q15_t)0xfcdc, (q15_t)0x13, (q15_t)0xfce9, (q15_t)0x13, (q15_t)0xfcf5, (q15_t)0x12, (q15_t)0xfd02, - (q15_t)0x11, (q15_t)0xfd0e, (q15_t)0x11, (q15_t)0xfd1b, (q15_t)0x10, (q15_t)0xfd27, (q15_t)0x10, (q15_t)0xfd34, - (q15_t)0xf, (q15_t)0xfd40, (q15_t)0xf, (q15_t)0xfd4d, (q15_t)0xe, (q15_t)0xfd5a, (q15_t)0xe, (q15_t)0xfd66, - (q15_t)0xd, (q15_t)0xfd73, (q15_t)0xd, (q15_t)0xfd7f, (q15_t)0xc, (q15_t)0xfd8c, (q15_t)0xc, (q15_t)0xfd98, - (q15_t)0xb, (q15_t)0xfda5, (q15_t)0xb, (q15_t)0xfdb2, (q15_t)0xa, (q15_t)0xfdbe, (q15_t)0xa, (q15_t)0xfdcb, - (q15_t)0x9, (q15_t)0xfdd7, (q15_t)0x9, (q15_t)0xfde4, (q15_t)0x9, (q15_t)0xfdf0, (q15_t)0x8, (q15_t)0xfdfd, - (q15_t)0x8, (q15_t)0xfe09, (q15_t)0x7, (q15_t)0xfe16, (q15_t)0x7, (q15_t)0xfe23, (q15_t)0x7, (q15_t)0xfe2f, - (q15_t)0x6, (q15_t)0xfe3c, (q15_t)0x6, (q15_t)0xfe48, (q15_t)0x6, (q15_t)0xfe55, (q15_t)0x5, (q15_t)0xfe61, - (q15_t)0x5, (q15_t)0xfe6e, (q15_t)0x5, (q15_t)0xfe7a, (q15_t)0x4, (q15_t)0xfe87, (q15_t)0x4, (q15_t)0xfe94, - (q15_t)0x4, (q15_t)0xfea0, (q15_t)0x4, (q15_t)0xfead, (q15_t)0x3, (q15_t)0xfeb9, (q15_t)0x3, (q15_t)0xfec6, - (q15_t)0x3, (q15_t)0xfed2, (q15_t)0x3, (q15_t)0xfedf, (q15_t)0x2, (q15_t)0xfeec, (q15_t)0x2, (q15_t)0xfef8, - (q15_t)0x2, (q15_t)0xff05, (q15_t)0x2, (q15_t)0xff11, (q15_t)0x2, (q15_t)0xff1e, (q15_t)0x1, (q15_t)0xff2a, - (q15_t)0x1, (q15_t)0xff37, (q15_t)0x1, (q15_t)0xff44, (q15_t)0x1, (q15_t)0xff50, (q15_t)0x1, (q15_t)0xff5d, - (q15_t)0x1, (q15_t)0xff69, (q15_t)0x1, (q15_t)0xff76, (q15_t)0x0, (q15_t)0xff82, (q15_t)0x0, (q15_t)0xff8f, - (q15_t)0x0, (q15_t)0xff9b, (q15_t)0x0, (q15_t)0xffa8, (q15_t)0x0, (q15_t)0xffb5, (q15_t)0x0, (q15_t)0xffc1, - (q15_t)0x0, (q15_t)0xffce, (q15_t)0x0, (q15_t)0xffda, (q15_t)0x0, (q15_t)0xffe7, (q15_t)0x0, (q15_t)0xfff3, - (q15_t)0x0, (q15_t)0x0, (q15_t)0x0, (q15_t)0xd, (q15_t)0x0, (q15_t)0x19, (q15_t)0x0, (q15_t)0x26, - (q15_t)0x0, (q15_t)0x32, (q15_t)0x0, (q15_t)0x3f, (q15_t)0x0, (q15_t)0x4b, (q15_t)0x0, (q15_t)0x58, - (q15_t)0x0, (q15_t)0x65, (q15_t)0x0, (q15_t)0x71, (q15_t)0x0, (q15_t)0x7e, (q15_t)0x1, (q15_t)0x8a, - (q15_t)0x1, (q15_t)0x97, (q15_t)0x1, (q15_t)0xa3, (q15_t)0x1, (q15_t)0xb0, (q15_t)0x1, (q15_t)0xbc, - (q15_t)0x1, (q15_t)0xc9, (q15_t)0x1, (q15_t)0xd6, (q15_t)0x2, (q15_t)0xe2, (q15_t)0x2, (q15_t)0xef, - (q15_t)0x2, (q15_t)0xfb, (q15_t)0x2, (q15_t)0x108, (q15_t)0x2, (q15_t)0x114, (q15_t)0x3, (q15_t)0x121, - (q15_t)0x3, (q15_t)0x12e, (q15_t)0x3, (q15_t)0x13a, (q15_t)0x3, (q15_t)0x147, (q15_t)0x4, (q15_t)0x153, - (q15_t)0x4, (q15_t)0x160, (q15_t)0x4, (q15_t)0x16c, (q15_t)0x4, (q15_t)0x179, (q15_t)0x5, (q15_t)0x186, - (q15_t)0x5, (q15_t)0x192, (q15_t)0x5, (q15_t)0x19f, (q15_t)0x6, (q15_t)0x1ab, (q15_t)0x6, (q15_t)0x1b8, - (q15_t)0x6, (q15_t)0x1c4, (q15_t)0x7, (q15_t)0x1d1, (q15_t)0x7, (q15_t)0x1dd, (q15_t)0x7, (q15_t)0x1ea, - (q15_t)0x8, (q15_t)0x1f7, (q15_t)0x8, (q15_t)0x203, (q15_t)0x9, (q15_t)0x210, (q15_t)0x9, (q15_t)0x21c, - (q15_t)0x9, (q15_t)0x229, (q15_t)0xa, (q15_t)0x235, (q15_t)0xa, (q15_t)0x242, (q15_t)0xb, (q15_t)0x24e, - (q15_t)0xb, (q15_t)0x25b, (q15_t)0xc, (q15_t)0x268, (q15_t)0xc, (q15_t)0x274, (q15_t)0xd, (q15_t)0x281, - (q15_t)0xd, (q15_t)0x28d, (q15_t)0xe, (q15_t)0x29a, (q15_t)0xe, (q15_t)0x2a6, (q15_t)0xf, (q15_t)0x2b3, - (q15_t)0xf, (q15_t)0x2c0, (q15_t)0x10, (q15_t)0x2cc, (q15_t)0x10, (q15_t)0x2d9, (q15_t)0x11, (q15_t)0x2e5, - (q15_t)0x11, (q15_t)0x2f2, (q15_t)0x12, (q15_t)0x2fe, (q15_t)0x13, (q15_t)0x30b, (q15_t)0x13, (q15_t)0x317, - (q15_t)0x14, (q15_t)0x324, (q15_t)0x14, (q15_t)0x330, (q15_t)0x15, (q15_t)0x33d, (q15_t)0x16, (q15_t)0x34a, - (q15_t)0x16, (q15_t)0x356, (q15_t)0x17, (q15_t)0x363, (q15_t)0x18, (q15_t)0x36f, (q15_t)0x18, (q15_t)0x37c, - (q15_t)0x19, (q15_t)0x388, (q15_t)0x1a, (q15_t)0x395, (q15_t)0x1a, (q15_t)0x3a1, (q15_t)0x1b, (q15_t)0x3ae, - (q15_t)0x1c, (q15_t)0x3bb, (q15_t)0x1d, (q15_t)0x3c7, (q15_t)0x1d, (q15_t)0x3d4, (q15_t)0x1e, (q15_t)0x3e0, - (q15_t)0x1f, (q15_t)0x3ed, (q15_t)0x20, (q15_t)0x3f9, (q15_t)0x20, (q15_t)0x406, (q15_t)0x21, (q15_t)0x412, - (q15_t)0x22, (q15_t)0x41f, (q15_t)0x23, (q15_t)0x42b, (q15_t)0x24, (q15_t)0x438, (q15_t)0x24, (q15_t)0x444, - (q15_t)0x25, (q15_t)0x451, (q15_t)0x26, (q15_t)0x45e, (q15_t)0x27, (q15_t)0x46a, (q15_t)0x28, (q15_t)0x477, - (q15_t)0x29, (q15_t)0x483, (q15_t)0x2a, (q15_t)0x490, (q15_t)0x2b, (q15_t)0x49c, (q15_t)0x2b, (q15_t)0x4a9, - (q15_t)0x2c, (q15_t)0x4b5, (q15_t)0x2d, (q15_t)0x4c2, (q15_t)0x2e, (q15_t)0x4ce, (q15_t)0x2f, (q15_t)0x4db, - (q15_t)0x30, (q15_t)0x4e7, (q15_t)0x31, (q15_t)0x4f4, (q15_t)0x32, (q15_t)0x500, (q15_t)0x33, (q15_t)0x50d, - (q15_t)0x34, (q15_t)0x51a, (q15_t)0x35, (q15_t)0x526, (q15_t)0x36, (q15_t)0x533, (q15_t)0x37, (q15_t)0x53f, - (q15_t)0x38, (q15_t)0x54c, (q15_t)0x39, (q15_t)0x558, (q15_t)0x3a, (q15_t)0x565, (q15_t)0x3b, (q15_t)0x571, - (q15_t)0x3c, (q15_t)0x57e, (q15_t)0x3d, (q15_t)0x58a, (q15_t)0x3f, (q15_t)0x597, (q15_t)0x40, (q15_t)0x5a3, - (q15_t)0x41, (q15_t)0x5b0, (q15_t)0x42, (q15_t)0x5bc, (q15_t)0x43, (q15_t)0x5c9, (q15_t)0x44, (q15_t)0x5d5, - (q15_t)0x45, (q15_t)0x5e2, (q15_t)0x47, (q15_t)0x5ee, (q15_t)0x48, (q15_t)0x5fb, (q15_t)0x49, (q15_t)0x607, - (q15_t)0x4a, (q15_t)0x614, (q15_t)0x4b, (q15_t)0x620, (q15_t)0x4c, (q15_t)0x62d, (q15_t)0x4e, (q15_t)0x639, - (q15_t)0x4f, (q15_t)0x646, (q15_t)0x50, (q15_t)0x652, (q15_t)0x51, (q15_t)0x65f, (q15_t)0x53, (q15_t)0x66b, - (q15_t)0x54, (q15_t)0x678, (q15_t)0x55, (q15_t)0x684, (q15_t)0x56, (q15_t)0x691, (q15_t)0x58, (q15_t)0x69d, - (q15_t)0x59, (q15_t)0x6aa, (q15_t)0x5a, (q15_t)0x6b6, (q15_t)0x5c, (q15_t)0x6c3, (q15_t)0x5d, (q15_t)0x6cf, - (q15_t)0x5e, (q15_t)0x6dc, (q15_t)0x60, (q15_t)0x6e8, (q15_t)0x61, (q15_t)0x6f5, (q15_t)0x62, (q15_t)0x701, - (q15_t)0x64, (q15_t)0x70e, (q15_t)0x65, (q15_t)0x71a, (q15_t)0x67, (q15_t)0x727, (q15_t)0x68, (q15_t)0x733, - (q15_t)0x69, (q15_t)0x740, (q15_t)0x6b, (q15_t)0x74c, (q15_t)0x6c, (q15_t)0x759, (q15_t)0x6e, (q15_t)0x765, - (q15_t)0x6f, (q15_t)0x772, (q15_t)0x71, (q15_t)0x77e, (q15_t)0x72, (q15_t)0x78b, (q15_t)0x74, (q15_t)0x797, - (q15_t)0x75, (q15_t)0x7a4, (q15_t)0x77, (q15_t)0x7b0, (q15_t)0x78, (q15_t)0x7bd, (q15_t)0x7a, (q15_t)0x7c9, - (q15_t)0x7b, (q15_t)0x7d6, (q15_t)0x7d, (q15_t)0x7e2, (q15_t)0x7e, (q15_t)0x7ef, (q15_t)0x80, (q15_t)0x7fb, - (q15_t)0x81, (q15_t)0x807, (q15_t)0x83, (q15_t)0x814, (q15_t)0x85, (q15_t)0x820, (q15_t)0x86, (q15_t)0x82d, - (q15_t)0x88, (q15_t)0x839, (q15_t)0x89, (q15_t)0x846, (q15_t)0x8b, (q15_t)0x852, (q15_t)0x8d, (q15_t)0x85f, - (q15_t)0x8e, (q15_t)0x86b, (q15_t)0x90, (q15_t)0x878, (q15_t)0x92, (q15_t)0x884, (q15_t)0x93, (q15_t)0x891, - (q15_t)0x95, (q15_t)0x89d, (q15_t)0x97, (q15_t)0x8a9, (q15_t)0x98, (q15_t)0x8b6, (q15_t)0x9a, (q15_t)0x8c2, - (q15_t)0x9c, (q15_t)0x8cf, (q15_t)0x9e, (q15_t)0x8db, (q15_t)0x9f, (q15_t)0x8e8, (q15_t)0xa1, (q15_t)0x8f4, - (q15_t)0xa3, (q15_t)0x901, (q15_t)0xa5, (q15_t)0x90d, (q15_t)0xa6, (q15_t)0x919, (q15_t)0xa8, (q15_t)0x926, - (q15_t)0xaa, (q15_t)0x932, (q15_t)0xac, (q15_t)0x93f, (q15_t)0xae, (q15_t)0x94b, (q15_t)0xaf, (q15_t)0x958, - (q15_t)0xb1, (q15_t)0x964, (q15_t)0xb3, (q15_t)0x970, (q15_t)0xb5, (q15_t)0x97d, (q15_t)0xb7, (q15_t)0x989, - (q15_t)0xb9, (q15_t)0x996, (q15_t)0xbb, (q15_t)0x9a2, (q15_t)0xbd, (q15_t)0x9af, (q15_t)0xbe, (q15_t)0x9bb, - (q15_t)0xc0, (q15_t)0x9c7, (q15_t)0xc2, (q15_t)0x9d4, (q15_t)0xc4, (q15_t)0x9e0, (q15_t)0xc6, (q15_t)0x9ed, - (q15_t)0xc8, (q15_t)0x9f9, (q15_t)0xca, (q15_t)0xa06, (q15_t)0xcc, (q15_t)0xa12, (q15_t)0xce, (q15_t)0xa1e, - (q15_t)0xd0, (q15_t)0xa2b, (q15_t)0xd2, (q15_t)0xa37, (q15_t)0xd4, (q15_t)0xa44, (q15_t)0xd6, (q15_t)0xa50, - (q15_t)0xd8, (q15_t)0xa5c, (q15_t)0xda, (q15_t)0xa69, (q15_t)0xdc, (q15_t)0xa75, (q15_t)0xde, (q15_t)0xa82, - (q15_t)0xe0, (q15_t)0xa8e, (q15_t)0xe2, (q15_t)0xa9a, (q15_t)0xe4, (q15_t)0xaa7, (q15_t)0xe7, (q15_t)0xab3, - (q15_t)0xe9, (q15_t)0xac0, (q15_t)0xeb, (q15_t)0xacc, (q15_t)0xed, (q15_t)0xad8, (q15_t)0xef, (q15_t)0xae5, - (q15_t)0xf1, (q15_t)0xaf1, (q15_t)0xf3, (q15_t)0xafd, (q15_t)0xf6, (q15_t)0xb0a, (q15_t)0xf8, (q15_t)0xb16, - (q15_t)0xfa, (q15_t)0xb23, (q15_t)0xfc, (q15_t)0xb2f, (q15_t)0xfe, (q15_t)0xb3b, (q15_t)0x100, (q15_t)0xb48, - (q15_t)0x103, (q15_t)0xb54, (q15_t)0x105, (q15_t)0xb60, (q15_t)0x107, (q15_t)0xb6d, (q15_t)0x109, (q15_t)0xb79, - (q15_t)0x10c, (q15_t)0xb85, (q15_t)0x10e, (q15_t)0xb92, (q15_t)0x110, (q15_t)0xb9e, (q15_t)0x113, (q15_t)0xbab, - (q15_t)0x115, (q15_t)0xbb7, (q15_t)0x117, (q15_t)0xbc3, (q15_t)0x119, (q15_t)0xbd0, (q15_t)0x11c, (q15_t)0xbdc, - (q15_t)0x11e, (q15_t)0xbe8, (q15_t)0x120, (q15_t)0xbf5, (q15_t)0x123, (q15_t)0xc01, (q15_t)0x125, (q15_t)0xc0d, - (q15_t)0x128, (q15_t)0xc1a, (q15_t)0x12a, (q15_t)0xc26, (q15_t)0x12c, (q15_t)0xc32, (q15_t)0x12f, (q15_t)0xc3f, - (q15_t)0x131, (q15_t)0xc4b, (q15_t)0x134, (q15_t)0xc57, (q15_t)0x136, (q15_t)0xc64, (q15_t)0x138, (q15_t)0xc70, - (q15_t)0x13b, (q15_t)0xc7c, (q15_t)0x13d, (q15_t)0xc89, (q15_t)0x140, (q15_t)0xc95, (q15_t)0x142, (q15_t)0xca1, - (q15_t)0x145, (q15_t)0xcae, (q15_t)0x147, (q15_t)0xcba, (q15_t)0x14a, (q15_t)0xcc6, (q15_t)0x14c, (q15_t)0xcd3, - (q15_t)0x14f, (q15_t)0xcdf, (q15_t)0x151, (q15_t)0xceb, (q15_t)0x154, (q15_t)0xcf8, (q15_t)0x156, (q15_t)0xd04, - (q15_t)0x159, (q15_t)0xd10, (q15_t)0x15b, (q15_t)0xd1c, (q15_t)0x15e, (q15_t)0xd29, (q15_t)0x161, (q15_t)0xd35, - (q15_t)0x163, (q15_t)0xd41, (q15_t)0x166, (q15_t)0xd4e, (q15_t)0x168, (q15_t)0xd5a, (q15_t)0x16b, (q15_t)0xd66, - (q15_t)0x16e, (q15_t)0xd72, (q15_t)0x170, (q15_t)0xd7f, (q15_t)0x173, (q15_t)0xd8b, (q15_t)0x176, (q15_t)0xd97, - (q15_t)0x178, (q15_t)0xda4, (q15_t)0x17b, (q15_t)0xdb0, (q15_t)0x17e, (q15_t)0xdbc, (q15_t)0x180, (q15_t)0xdc8, - (q15_t)0x183, (q15_t)0xdd5, (q15_t)0x186, (q15_t)0xde1, (q15_t)0x189, (q15_t)0xded, (q15_t)0x18b, (q15_t)0xdf9, - (q15_t)0x18e, (q15_t)0xe06, (q15_t)0x191, (q15_t)0xe12, (q15_t)0x194, (q15_t)0xe1e, (q15_t)0x196, (q15_t)0xe2b, - (q15_t)0x199, (q15_t)0xe37, (q15_t)0x19c, (q15_t)0xe43, (q15_t)0x19f, (q15_t)0xe4f, (q15_t)0x1a2, (q15_t)0xe5c, - (q15_t)0x1a4, (q15_t)0xe68, (q15_t)0x1a7, (q15_t)0xe74, (q15_t)0x1aa, (q15_t)0xe80, (q15_t)0x1ad, (q15_t)0xe8c, - (q15_t)0x1b0, (q15_t)0xe99, (q15_t)0x1b3, (q15_t)0xea5, (q15_t)0x1b6, (q15_t)0xeb1, (q15_t)0x1b8, (q15_t)0xebd, - (q15_t)0x1bb, (q15_t)0xeca, (q15_t)0x1be, (q15_t)0xed6, (q15_t)0x1c1, (q15_t)0xee2, (q15_t)0x1c4, (q15_t)0xeee, - (q15_t)0x1c7, (q15_t)0xefb, (q15_t)0x1ca, (q15_t)0xf07, (q15_t)0x1cd, (q15_t)0xf13, (q15_t)0x1d0, (q15_t)0xf1f, - (q15_t)0x1d3, (q15_t)0xf2b, (q15_t)0x1d6, (q15_t)0xf38, (q15_t)0x1d9, (q15_t)0xf44, (q15_t)0x1dc, (q15_t)0xf50, - (q15_t)0x1df, (q15_t)0xf5c, (q15_t)0x1e2, (q15_t)0xf68, (q15_t)0x1e5, (q15_t)0xf75, (q15_t)0x1e8, (q15_t)0xf81, - (q15_t)0x1eb, (q15_t)0xf8d, (q15_t)0x1ee, (q15_t)0xf99, (q15_t)0x1f1, (q15_t)0xfa5, (q15_t)0x1f4, (q15_t)0xfb2, - (q15_t)0x1f7, (q15_t)0xfbe, (q15_t)0x1fa, (q15_t)0xfca, (q15_t)0x1fd, (q15_t)0xfd6, (q15_t)0x201, (q15_t)0xfe2, - (q15_t)0x204, (q15_t)0xfee, (q15_t)0x207, (q15_t)0xffb, (q15_t)0x20a, (q15_t)0x1007, (q15_t)0x20d, (q15_t)0x1013, - (q15_t)0x210, (q15_t)0x101f, (q15_t)0x213, (q15_t)0x102b, (q15_t)0x217, (q15_t)0x1037, (q15_t)0x21a, (q15_t)0x1044, - (q15_t)0x21d, (q15_t)0x1050, (q15_t)0x220, (q15_t)0x105c, (q15_t)0x223, (q15_t)0x1068, (q15_t)0x227, (q15_t)0x1074, - (q15_t)0x22a, (q15_t)0x1080, (q15_t)0x22d, (q15_t)0x108c, (q15_t)0x230, (q15_t)0x1099, (q15_t)0x234, (q15_t)0x10a5, - (q15_t)0x237, (q15_t)0x10b1, (q15_t)0x23a, (q15_t)0x10bd, (q15_t)0x23e, (q15_t)0x10c9, (q15_t)0x241, (q15_t)0x10d5, - (q15_t)0x244, (q15_t)0x10e1, (q15_t)0x247, (q15_t)0x10ed, (q15_t)0x24b, (q15_t)0x10fa, (q15_t)0x24e, (q15_t)0x1106, - (q15_t)0x251, (q15_t)0x1112, (q15_t)0x255, (q15_t)0x111e, (q15_t)0x258, (q15_t)0x112a, (q15_t)0x25c, (q15_t)0x1136, - (q15_t)0x25f, (q15_t)0x1142, (q15_t)0x262, (q15_t)0x114e, (q15_t)0x266, (q15_t)0x115a, (q15_t)0x269, (q15_t)0x1167, - (q15_t)0x26d, (q15_t)0x1173, (q15_t)0x270, (q15_t)0x117f, (q15_t)0x273, (q15_t)0x118b, (q15_t)0x277, (q15_t)0x1197, - (q15_t)0x27a, (q15_t)0x11a3, (q15_t)0x27e, (q15_t)0x11af, (q15_t)0x281, (q15_t)0x11bb, (q15_t)0x285, (q15_t)0x11c7, - (q15_t)0x288, (q15_t)0x11d3, (q15_t)0x28c, (q15_t)0x11df, (q15_t)0x28f, (q15_t)0x11eb, (q15_t)0x293, (q15_t)0x11f7, - (q15_t)0x296, (q15_t)0x1204, (q15_t)0x29a, (q15_t)0x1210, (q15_t)0x29d, (q15_t)0x121c, (q15_t)0x2a1, (q15_t)0x1228, - (q15_t)0x2a5, (q15_t)0x1234, (q15_t)0x2a8, (q15_t)0x1240, (q15_t)0x2ac, (q15_t)0x124c, (q15_t)0x2af, (q15_t)0x1258, - (q15_t)0x2b3, (q15_t)0x1264, (q15_t)0x2b7, (q15_t)0x1270, (q15_t)0x2ba, (q15_t)0x127c, (q15_t)0x2be, (q15_t)0x1288, - (q15_t)0x2c1, (q15_t)0x1294, (q15_t)0x2c5, (q15_t)0x12a0, (q15_t)0x2c9, (q15_t)0x12ac, (q15_t)0x2cc, (q15_t)0x12b8, - (q15_t)0x2d0, (q15_t)0x12c4, (q15_t)0x2d4, (q15_t)0x12d0, (q15_t)0x2d8, (q15_t)0x12dc, (q15_t)0x2db, (q15_t)0x12e8, - (q15_t)0x2df, (q15_t)0x12f4, (q15_t)0x2e3, (q15_t)0x1300, (q15_t)0x2e6, (q15_t)0x130c, (q15_t)0x2ea, (q15_t)0x1318, - (q15_t)0x2ee, (q15_t)0x1324, (q15_t)0x2f2, (q15_t)0x1330, (q15_t)0x2f5, (q15_t)0x133c, (q15_t)0x2f9, (q15_t)0x1348, - (q15_t)0x2fd, (q15_t)0x1354, (q15_t)0x301, (q15_t)0x1360, (q15_t)0x305, (q15_t)0x136c, (q15_t)0x308, (q15_t)0x1378, - (q15_t)0x30c, (q15_t)0x1384, (q15_t)0x310, (q15_t)0x1390, (q15_t)0x314, (q15_t)0x139c, (q15_t)0x318, (q15_t)0x13a8, - (q15_t)0x31c, (q15_t)0x13b4, (q15_t)0x320, (q15_t)0x13c0, (q15_t)0x323, (q15_t)0x13cc, (q15_t)0x327, (q15_t)0x13d8, - (q15_t)0x32b, (q15_t)0x13e4, (q15_t)0x32f, (q15_t)0x13f0, (q15_t)0x333, (q15_t)0x13fb, (q15_t)0x337, (q15_t)0x1407, - (q15_t)0x33b, (q15_t)0x1413, (q15_t)0x33f, (q15_t)0x141f, (q15_t)0x343, (q15_t)0x142b, (q15_t)0x347, (q15_t)0x1437, - (q15_t)0x34b, (q15_t)0x1443, (q15_t)0x34f, (q15_t)0x144f, (q15_t)0x353, (q15_t)0x145b, (q15_t)0x357, (q15_t)0x1467, - (q15_t)0x35b, (q15_t)0x1473, (q15_t)0x35f, (q15_t)0x147f, (q15_t)0x363, (q15_t)0x148b, (q15_t)0x367, (q15_t)0x1496, - (q15_t)0x36b, (q15_t)0x14a2, (q15_t)0x36f, (q15_t)0x14ae, (q15_t)0x373, (q15_t)0x14ba, (q15_t)0x377, (q15_t)0x14c6, - (q15_t)0x37b, (q15_t)0x14d2, (q15_t)0x37f, (q15_t)0x14de, (q15_t)0x383, (q15_t)0x14ea, (q15_t)0x387, (q15_t)0x14f6, - (q15_t)0x38c, (q15_t)0x1501, (q15_t)0x390, (q15_t)0x150d, (q15_t)0x394, (q15_t)0x1519, (q15_t)0x398, (q15_t)0x1525, - (q15_t)0x39c, (q15_t)0x1531, (q15_t)0x3a0, (q15_t)0x153d, (q15_t)0x3a5, (q15_t)0x1549, (q15_t)0x3a9, (q15_t)0x1554, - (q15_t)0x3ad, (q15_t)0x1560, (q15_t)0x3b1, (q15_t)0x156c, (q15_t)0x3b5, (q15_t)0x1578, (q15_t)0x3ba, (q15_t)0x1584, - (q15_t)0x3be, (q15_t)0x1590, (q15_t)0x3c2, (q15_t)0x159b, (q15_t)0x3c6, (q15_t)0x15a7, (q15_t)0x3ca, (q15_t)0x15b3, - (q15_t)0x3cf, (q15_t)0x15bf, (q15_t)0x3d3, (q15_t)0x15cb, (q15_t)0x3d7, (q15_t)0x15d7, (q15_t)0x3dc, (q15_t)0x15e2, - (q15_t)0x3e0, (q15_t)0x15ee, (q15_t)0x3e4, (q15_t)0x15fa, (q15_t)0x3e9, (q15_t)0x1606, (q15_t)0x3ed, (q15_t)0x1612, - (q15_t)0x3f1, (q15_t)0x161d, (q15_t)0x3f6, (q15_t)0x1629, (q15_t)0x3fa, (q15_t)0x1635, (q15_t)0x3fe, (q15_t)0x1641, - (q15_t)0x403, (q15_t)0x164c, (q15_t)0x407, (q15_t)0x1658, (q15_t)0x40b, (q15_t)0x1664, (q15_t)0x410, (q15_t)0x1670, - (q15_t)0x414, (q15_t)0x167c, (q15_t)0x419, (q15_t)0x1687, (q15_t)0x41d, (q15_t)0x1693, (q15_t)0x422, (q15_t)0x169f, - (q15_t)0x426, (q15_t)0x16ab, (q15_t)0x42a, (q15_t)0x16b6, (q15_t)0x42f, (q15_t)0x16c2, (q15_t)0x433, (q15_t)0x16ce, - (q15_t)0x438, (q15_t)0x16da, (q15_t)0x43c, (q15_t)0x16e5, (q15_t)0x441, (q15_t)0x16f1, (q15_t)0x445, (q15_t)0x16fd, - (q15_t)0x44a, (q15_t)0x1709, (q15_t)0x44e, (q15_t)0x1714, (q15_t)0x453, (q15_t)0x1720, (q15_t)0x457, (q15_t)0x172c, - (q15_t)0x45c, (q15_t)0x1737, (q15_t)0x461, (q15_t)0x1743, (q15_t)0x465, (q15_t)0x174f, (q15_t)0x46a, (q15_t)0x175b, - (q15_t)0x46e, (q15_t)0x1766, (q15_t)0x473, (q15_t)0x1772, (q15_t)0x478, (q15_t)0x177e, (q15_t)0x47c, (q15_t)0x1789, - (q15_t)0x481, (q15_t)0x1795, (q15_t)0x485, (q15_t)0x17a1, (q15_t)0x48a, (q15_t)0x17ac, (q15_t)0x48f, (q15_t)0x17b8, - (q15_t)0x493, (q15_t)0x17c4, (q15_t)0x498, (q15_t)0x17cf, (q15_t)0x49d, (q15_t)0x17db, (q15_t)0x4a1, (q15_t)0x17e7, - (q15_t)0x4a6, (q15_t)0x17f2, (q15_t)0x4ab, (q15_t)0x17fe, (q15_t)0x4b0, (q15_t)0x180a, (q15_t)0x4b4, (q15_t)0x1815, - (q15_t)0x4b9, (q15_t)0x1821, (q15_t)0x4be, (q15_t)0x182d, (q15_t)0x4c2, (q15_t)0x1838, (q15_t)0x4c7, (q15_t)0x1844, - (q15_t)0x4cc, (q15_t)0x184f, (q15_t)0x4d1, (q15_t)0x185b, (q15_t)0x4d6, (q15_t)0x1867, (q15_t)0x4da, (q15_t)0x1872, - (q15_t)0x4df, (q15_t)0x187e, (q15_t)0x4e4, (q15_t)0x1889, (q15_t)0x4e9, (q15_t)0x1895, (q15_t)0x4ee, (q15_t)0x18a1, - (q15_t)0x4f2, (q15_t)0x18ac, (q15_t)0x4f7, (q15_t)0x18b8, (q15_t)0x4fc, (q15_t)0x18c3, (q15_t)0x501, (q15_t)0x18cf, - (q15_t)0x506, (q15_t)0x18db, (q15_t)0x50b, (q15_t)0x18e6, (q15_t)0x510, (q15_t)0x18f2, (q15_t)0x515, (q15_t)0x18fd, - (q15_t)0x51a, (q15_t)0x1909, (q15_t)0x51e, (q15_t)0x1914, (q15_t)0x523, (q15_t)0x1920, (q15_t)0x528, (q15_t)0x192c, - (q15_t)0x52d, (q15_t)0x1937, (q15_t)0x532, (q15_t)0x1943, (q15_t)0x537, (q15_t)0x194e, (q15_t)0x53c, (q15_t)0x195a, - (q15_t)0x541, (q15_t)0x1965, (q15_t)0x546, (q15_t)0x1971, (q15_t)0x54b, (q15_t)0x197c, (q15_t)0x550, (q15_t)0x1988, - (q15_t)0x555, (q15_t)0x1993, (q15_t)0x55a, (q15_t)0x199f, (q15_t)0x55f, (q15_t)0x19aa, (q15_t)0x564, (q15_t)0x19b6, - (q15_t)0x569, (q15_t)0x19c1, (q15_t)0x56e, (q15_t)0x19cd, (q15_t)0x573, (q15_t)0x19d8, (q15_t)0x578, (q15_t)0x19e4, - (q15_t)0x57e, (q15_t)0x19ef, (q15_t)0x583, (q15_t)0x19fb, (q15_t)0x588, (q15_t)0x1a06, (q15_t)0x58d, (q15_t)0x1a12, - (q15_t)0x592, (q15_t)0x1a1d, (q15_t)0x597, (q15_t)0x1a29, (q15_t)0x59c, (q15_t)0x1a34, (q15_t)0x5a1, (q15_t)0x1a40, - (q15_t)0x5a7, (q15_t)0x1a4b, (q15_t)0x5ac, (q15_t)0x1a57, (q15_t)0x5b1, (q15_t)0x1a62, (q15_t)0x5b6, (q15_t)0x1a6e, - (q15_t)0x5bb, (q15_t)0x1a79, (q15_t)0x5c1, (q15_t)0x1a84, (q15_t)0x5c6, (q15_t)0x1a90, (q15_t)0x5cb, (q15_t)0x1a9b, - (q15_t)0x5d0, (q15_t)0x1aa7, (q15_t)0x5d5, (q15_t)0x1ab2, (q15_t)0x5db, (q15_t)0x1abe, (q15_t)0x5e0, (q15_t)0x1ac9, - (q15_t)0x5e5, (q15_t)0x1ad4, (q15_t)0x5ea, (q15_t)0x1ae0, (q15_t)0x5f0, (q15_t)0x1aeb, (q15_t)0x5f5, (q15_t)0x1af7, - (q15_t)0x5fa, (q15_t)0x1b02, (q15_t)0x600, (q15_t)0x1b0d, (q15_t)0x605, (q15_t)0x1b19, (q15_t)0x60a, (q15_t)0x1b24, - (q15_t)0x610, (q15_t)0x1b30, (q15_t)0x615, (q15_t)0x1b3b, (q15_t)0x61a, (q15_t)0x1b46, (q15_t)0x620, (q15_t)0x1b52, - (q15_t)0x625, (q15_t)0x1b5d, (q15_t)0x62a, (q15_t)0x1b68, (q15_t)0x630, (q15_t)0x1b74, (q15_t)0x635, (q15_t)0x1b7f, - (q15_t)0x63b, (q15_t)0x1b8a, (q15_t)0x640, (q15_t)0x1b96, (q15_t)0x645, (q15_t)0x1ba1, (q15_t)0x64b, (q15_t)0x1bac, - (q15_t)0x650, (q15_t)0x1bb8, (q15_t)0x656, (q15_t)0x1bc3, (q15_t)0x65b, (q15_t)0x1bce, (q15_t)0x661, (q15_t)0x1bda, - (q15_t)0x666, (q15_t)0x1be5, (q15_t)0x66c, (q15_t)0x1bf0, (q15_t)0x671, (q15_t)0x1bfc, (q15_t)0x677, (q15_t)0x1c07, - (q15_t)0x67c, (q15_t)0x1c12, (q15_t)0x682, (q15_t)0x1c1e, (q15_t)0x687, (q15_t)0x1c29, (q15_t)0x68d, (q15_t)0x1c34, - (q15_t)0x692, (q15_t)0x1c3f, (q15_t)0x698, (q15_t)0x1c4b, (q15_t)0x69d, (q15_t)0x1c56, (q15_t)0x6a3, (q15_t)0x1c61, - (q15_t)0x6a8, (q15_t)0x1c6c, (q15_t)0x6ae, (q15_t)0x1c78, (q15_t)0x6b4, (q15_t)0x1c83, (q15_t)0x6b9, (q15_t)0x1c8e, - (q15_t)0x6bf, (q15_t)0x1c99, (q15_t)0x6c5, (q15_t)0x1ca5, (q15_t)0x6ca, (q15_t)0x1cb0, (q15_t)0x6d0, (q15_t)0x1cbb, - (q15_t)0x6d5, (q15_t)0x1cc6, (q15_t)0x6db, (q15_t)0x1cd2, (q15_t)0x6e1, (q15_t)0x1cdd, (q15_t)0x6e6, (q15_t)0x1ce8, - (q15_t)0x6ec, (q15_t)0x1cf3, (q15_t)0x6f2, (q15_t)0x1cff, (q15_t)0x6f7, (q15_t)0x1d0a, (q15_t)0x6fd, (q15_t)0x1d15, - (q15_t)0x703, (q15_t)0x1d20, (q15_t)0x709, (q15_t)0x1d2b, (q15_t)0x70e, (q15_t)0x1d36, (q15_t)0x714, (q15_t)0x1d42, - (q15_t)0x71a, (q15_t)0x1d4d, (q15_t)0x720, (q15_t)0x1d58, (q15_t)0x725, (q15_t)0x1d63, (q15_t)0x72b, (q15_t)0x1d6e, - (q15_t)0x731, (q15_t)0x1d79, (q15_t)0x737, (q15_t)0x1d85, (q15_t)0x73d, (q15_t)0x1d90, (q15_t)0x742, (q15_t)0x1d9b, - (q15_t)0x748, (q15_t)0x1da6, (q15_t)0x74e, (q15_t)0x1db1, (q15_t)0x754, (q15_t)0x1dbc, (q15_t)0x75a, (q15_t)0x1dc7, - (q15_t)0x75f, (q15_t)0x1dd3, (q15_t)0x765, (q15_t)0x1dde, (q15_t)0x76b, (q15_t)0x1de9, (q15_t)0x771, (q15_t)0x1df4, - (q15_t)0x777, (q15_t)0x1dff, (q15_t)0x77d, (q15_t)0x1e0a, (q15_t)0x783, (q15_t)0x1e15, (q15_t)0x789, (q15_t)0x1e20, - (q15_t)0x78f, (q15_t)0x1e2b, (q15_t)0x795, (q15_t)0x1e36, (q15_t)0x79a, (q15_t)0x1e42, (q15_t)0x7a0, (q15_t)0x1e4d, - (q15_t)0x7a6, (q15_t)0x1e58, (q15_t)0x7ac, (q15_t)0x1e63, (q15_t)0x7b2, (q15_t)0x1e6e, (q15_t)0x7b8, (q15_t)0x1e79, - (q15_t)0x7be, (q15_t)0x1e84, (q15_t)0x7c4, (q15_t)0x1e8f, (q15_t)0x7ca, (q15_t)0x1e9a, (q15_t)0x7d0, (q15_t)0x1ea5, - (q15_t)0x7d6, (q15_t)0x1eb0, (q15_t)0x7dc, (q15_t)0x1ebb, (q15_t)0x7e2, (q15_t)0x1ec6, (q15_t)0x7e8, (q15_t)0x1ed1, - (q15_t)0x7ee, (q15_t)0x1edc, (q15_t)0x7f5, (q15_t)0x1ee7, (q15_t)0x7fb, (q15_t)0x1ef2, (q15_t)0x801, (q15_t)0x1efd, - (q15_t)0x807, (q15_t)0x1f08, (q15_t)0x80d, (q15_t)0x1f13, (q15_t)0x813, (q15_t)0x1f1e, (q15_t)0x819, (q15_t)0x1f29, - (q15_t)0x81f, (q15_t)0x1f34, (q15_t)0x825, (q15_t)0x1f3f, (q15_t)0x82b, (q15_t)0x1f4a, (q15_t)0x832, (q15_t)0x1f55, - (q15_t)0x838, (q15_t)0x1f60, (q15_t)0x83e, (q15_t)0x1f6b, (q15_t)0x844, (q15_t)0x1f76, (q15_t)0x84a, (q15_t)0x1f81, - (q15_t)0x850, (q15_t)0x1f8c, (q15_t)0x857, (q15_t)0x1f97, (q15_t)0x85d, (q15_t)0x1fa2, (q15_t)0x863, (q15_t)0x1fac, - (q15_t)0x869, (q15_t)0x1fb7, (q15_t)0x870, (q15_t)0x1fc2, (q15_t)0x876, (q15_t)0x1fcd, (q15_t)0x87c, (q15_t)0x1fd8, - (q15_t)0x882, (q15_t)0x1fe3, (q15_t)0x889, (q15_t)0x1fee, (q15_t)0x88f, (q15_t)0x1ff9, (q15_t)0x895, (q15_t)0x2004, - (q15_t)0x89b, (q15_t)0x200f, (q15_t)0x8a2, (q15_t)0x2019, (q15_t)0x8a8, (q15_t)0x2024, (q15_t)0x8ae, (q15_t)0x202f, - (q15_t)0x8b5, (q15_t)0x203a, (q15_t)0x8bb, (q15_t)0x2045, (q15_t)0x8c1, (q15_t)0x2050, (q15_t)0x8c8, (q15_t)0x205b, - (q15_t)0x8ce, (q15_t)0x2065, (q15_t)0x8d4, (q15_t)0x2070, (q15_t)0x8db, (q15_t)0x207b, (q15_t)0x8e1, (q15_t)0x2086, - (q15_t)0x8e8, (q15_t)0x2091, (q15_t)0x8ee, (q15_t)0x209b, (q15_t)0x8f4, (q15_t)0x20a6, (q15_t)0x8fb, (q15_t)0x20b1, - (q15_t)0x901, (q15_t)0x20bc, (q15_t)0x908, (q15_t)0x20c7, (q15_t)0x90e, (q15_t)0x20d1, (q15_t)0x915, (q15_t)0x20dc, - (q15_t)0x91b, (q15_t)0x20e7, (q15_t)0x921, (q15_t)0x20f2, (q15_t)0x928, (q15_t)0x20fd, (q15_t)0x92e, (q15_t)0x2107, - (q15_t)0x935, (q15_t)0x2112, (q15_t)0x93b, (q15_t)0x211d, (q15_t)0x942, (q15_t)0x2128, (q15_t)0x948, (q15_t)0x2132, - (q15_t)0x94f, (q15_t)0x213d, (q15_t)0x955, (q15_t)0x2148, (q15_t)0x95c, (q15_t)0x2153, (q15_t)0x963, (q15_t)0x215d, - (q15_t)0x969, (q15_t)0x2168, (q15_t)0x970, (q15_t)0x2173, (q15_t)0x976, (q15_t)0x217d, (q15_t)0x97d, (q15_t)0x2188, - (q15_t)0x983, (q15_t)0x2193, (q15_t)0x98a, (q15_t)0x219e, (q15_t)0x991, (q15_t)0x21a8, (q15_t)0x997, (q15_t)0x21b3, - (q15_t)0x99e, (q15_t)0x21be, (q15_t)0x9a4, (q15_t)0x21c8, (q15_t)0x9ab, (q15_t)0x21d3, (q15_t)0x9b2, (q15_t)0x21de, - (q15_t)0x9b8, (q15_t)0x21e8, (q15_t)0x9bf, (q15_t)0x21f3, (q15_t)0x9c6, (q15_t)0x21fe, (q15_t)0x9cc, (q15_t)0x2208, - (q15_t)0x9d3, (q15_t)0x2213, (q15_t)0x9da, (q15_t)0x221e, (q15_t)0x9e0, (q15_t)0x2228, (q15_t)0x9e7, (q15_t)0x2233, - (q15_t)0x9ee, (q15_t)0x223d, (q15_t)0x9f5, (q15_t)0x2248, (q15_t)0x9fb, (q15_t)0x2253, (q15_t)0xa02, (q15_t)0x225d, - (q15_t)0xa09, (q15_t)0x2268, (q15_t)0xa10, (q15_t)0x2272, (q15_t)0xa16, (q15_t)0x227d, (q15_t)0xa1d, (q15_t)0x2288, - (q15_t)0xa24, (q15_t)0x2292, (q15_t)0xa2b, (q15_t)0x229d, (q15_t)0xa32, (q15_t)0x22a7, (q15_t)0xa38, (q15_t)0x22b2, - (q15_t)0xa3f, (q15_t)0x22bc, (q15_t)0xa46, (q15_t)0x22c7, (q15_t)0xa4d, (q15_t)0x22d2, (q15_t)0xa54, (q15_t)0x22dc, - (q15_t)0xa5b, (q15_t)0x22e7, (q15_t)0xa61, (q15_t)0x22f1, (q15_t)0xa68, (q15_t)0x22fc, (q15_t)0xa6f, (q15_t)0x2306, - (q15_t)0xa76, (q15_t)0x2311, (q15_t)0xa7d, (q15_t)0x231b, (q15_t)0xa84, (q15_t)0x2326, (q15_t)0xa8b, (q15_t)0x2330, - (q15_t)0xa92, (q15_t)0x233b, (q15_t)0xa99, (q15_t)0x2345, (q15_t)0xa9f, (q15_t)0x2350, (q15_t)0xaa6, (q15_t)0x235a, - (q15_t)0xaad, (q15_t)0x2365, (q15_t)0xab4, (q15_t)0x236f, (q15_t)0xabb, (q15_t)0x237a, (q15_t)0xac2, (q15_t)0x2384, - (q15_t)0xac9, (q15_t)0x238e, (q15_t)0xad0, (q15_t)0x2399, (q15_t)0xad7, (q15_t)0x23a3, (q15_t)0xade, (q15_t)0x23ae, - (q15_t)0xae5, (q15_t)0x23b8, (q15_t)0xaec, (q15_t)0x23c3, (q15_t)0xaf3, (q15_t)0x23cd, (q15_t)0xafa, (q15_t)0x23d7, - (q15_t)0xb01, (q15_t)0x23e2, (q15_t)0xb08, (q15_t)0x23ec, (q15_t)0xb0f, (q15_t)0x23f7, (q15_t)0xb16, (q15_t)0x2401, - (q15_t)0xb1e, (q15_t)0x240b, (q15_t)0xb25, (q15_t)0x2416, (q15_t)0xb2c, (q15_t)0x2420, (q15_t)0xb33, (q15_t)0x242b, - (q15_t)0xb3a, (q15_t)0x2435, (q15_t)0xb41, (q15_t)0x243f, (q15_t)0xb48, (q15_t)0x244a, (q15_t)0xb4f, (q15_t)0x2454, - (q15_t)0xb56, (q15_t)0x245e, (q15_t)0xb5e, (q15_t)0x2469, (q15_t)0xb65, (q15_t)0x2473, (q15_t)0xb6c, (q15_t)0x247d, - (q15_t)0xb73, (q15_t)0x2488, (q15_t)0xb7a, (q15_t)0x2492, (q15_t)0xb81, (q15_t)0x249c, (q15_t)0xb89, (q15_t)0x24a7, - (q15_t)0xb90, (q15_t)0x24b1, (q15_t)0xb97, (q15_t)0x24bb, (q15_t)0xb9e, (q15_t)0x24c5, (q15_t)0xba5, (q15_t)0x24d0, - (q15_t)0xbad, (q15_t)0x24da, (q15_t)0xbb4, (q15_t)0x24e4, (q15_t)0xbbb, (q15_t)0x24ef, (q15_t)0xbc2, (q15_t)0x24f9, - (q15_t)0xbca, (q15_t)0x2503, (q15_t)0xbd1, (q15_t)0x250d, (q15_t)0xbd8, (q15_t)0x2518, (q15_t)0xbe0, (q15_t)0x2522, - (q15_t)0xbe7, (q15_t)0x252c, (q15_t)0xbee, (q15_t)0x2536, (q15_t)0xbf5, (q15_t)0x2541, (q15_t)0xbfd, (q15_t)0x254b, - (q15_t)0xc04, (q15_t)0x2555, (q15_t)0xc0b, (q15_t)0x255f, (q15_t)0xc13, (q15_t)0x2569, (q15_t)0xc1a, (q15_t)0x2574, - (q15_t)0xc21, (q15_t)0x257e, (q15_t)0xc29, (q15_t)0x2588, (q15_t)0xc30, (q15_t)0x2592, (q15_t)0xc38, (q15_t)0x259c, - (q15_t)0xc3f, (q15_t)0x25a6, (q15_t)0xc46, (q15_t)0x25b1, (q15_t)0xc4e, (q15_t)0x25bb, (q15_t)0xc55, (q15_t)0x25c5, - (q15_t)0xc5d, (q15_t)0x25cf, (q15_t)0xc64, (q15_t)0x25d9, (q15_t)0xc6b, (q15_t)0x25e3, (q15_t)0xc73, (q15_t)0x25ed, - (q15_t)0xc7a, (q15_t)0x25f8, (q15_t)0xc82, (q15_t)0x2602, (q15_t)0xc89, (q15_t)0x260c, (q15_t)0xc91, (q15_t)0x2616, - (q15_t)0xc98, (q15_t)0x2620, (q15_t)0xca0, (q15_t)0x262a, (q15_t)0xca7, (q15_t)0x2634, (q15_t)0xcaf, (q15_t)0x263e, - (q15_t)0xcb6, (q15_t)0x2648, (q15_t)0xcbe, (q15_t)0x2652, (q15_t)0xcc5, (q15_t)0x265c, (q15_t)0xccd, (q15_t)0x2666, - (q15_t)0xcd4, (q15_t)0x2671, (q15_t)0xcdc, (q15_t)0x267b, (q15_t)0xce3, (q15_t)0x2685, (q15_t)0xceb, (q15_t)0x268f, - (q15_t)0xcf3, (q15_t)0x2699, (q15_t)0xcfa, (q15_t)0x26a3, (q15_t)0xd02, (q15_t)0x26ad, (q15_t)0xd09, (q15_t)0x26b7, - (q15_t)0xd11, (q15_t)0x26c1, (q15_t)0xd19, (q15_t)0x26cb, (q15_t)0xd20, (q15_t)0x26d5, (q15_t)0xd28, (q15_t)0x26df, - (q15_t)0xd30, (q15_t)0x26e9, (q15_t)0xd37, (q15_t)0x26f3, (q15_t)0xd3f, (q15_t)0x26fd, (q15_t)0xd46, (q15_t)0x2707, - (q15_t)0xd4e, (q15_t)0x2711, (q15_t)0xd56, (q15_t)0x271a, (q15_t)0xd5d, (q15_t)0x2724, (q15_t)0xd65, (q15_t)0x272e, - (q15_t)0xd6d, (q15_t)0x2738, (q15_t)0xd75, (q15_t)0x2742, (q15_t)0xd7c, (q15_t)0x274c, (q15_t)0xd84, (q15_t)0x2756, - (q15_t)0xd8c, (q15_t)0x2760, (q15_t)0xd93, (q15_t)0x276a, (q15_t)0xd9b, (q15_t)0x2774, (q15_t)0xda3, (q15_t)0x277e, - (q15_t)0xdab, (q15_t)0x2788, (q15_t)0xdb2, (q15_t)0x2791, (q15_t)0xdba, (q15_t)0x279b, (q15_t)0xdc2, (q15_t)0x27a5, - (q15_t)0xdca, (q15_t)0x27af, (q15_t)0xdd2, (q15_t)0x27b9, (q15_t)0xdd9, (q15_t)0x27c3, (q15_t)0xde1, (q15_t)0x27cd, - (q15_t)0xde9, (q15_t)0x27d6, (q15_t)0xdf1, (q15_t)0x27e0, (q15_t)0xdf9, (q15_t)0x27ea, (q15_t)0xe01, (q15_t)0x27f4, - (q15_t)0xe08, (q15_t)0x27fe, (q15_t)0xe10, (q15_t)0x2808, (q15_t)0xe18, (q15_t)0x2811, (q15_t)0xe20, (q15_t)0x281b, - (q15_t)0xe28, (q15_t)0x2825, (q15_t)0xe30, (q15_t)0x282f, (q15_t)0xe38, (q15_t)0x2838, (q15_t)0xe40, (q15_t)0x2842, - (q15_t)0xe47, (q15_t)0x284c, (q15_t)0xe4f, (q15_t)0x2856, (q15_t)0xe57, (q15_t)0x2860, (q15_t)0xe5f, (q15_t)0x2869, - (q15_t)0xe67, (q15_t)0x2873, (q15_t)0xe6f, (q15_t)0x287d, (q15_t)0xe77, (q15_t)0x2886, (q15_t)0xe7f, (q15_t)0x2890, - (q15_t)0xe87, (q15_t)0x289a, (q15_t)0xe8f, (q15_t)0x28a4, (q15_t)0xe97, (q15_t)0x28ad, (q15_t)0xe9f, (q15_t)0x28b7, - (q15_t)0xea7, (q15_t)0x28c1, (q15_t)0xeaf, (q15_t)0x28ca, (q15_t)0xeb7, (q15_t)0x28d4, (q15_t)0xebf, (q15_t)0x28de, - (q15_t)0xec7, (q15_t)0x28e7, (q15_t)0xecf, (q15_t)0x28f1, (q15_t)0xed7, (q15_t)0x28fb, (q15_t)0xedf, (q15_t)0x2904, - (q15_t)0xee7, (q15_t)0x290e, (q15_t)0xeef, (q15_t)0x2918, (q15_t)0xef7, (q15_t)0x2921, (q15_t)0xeff, (q15_t)0x292b, - (q15_t)0xf07, (q15_t)0x2935, (q15_t)0xf10, (q15_t)0x293e, (q15_t)0xf18, (q15_t)0x2948, (q15_t)0xf20, (q15_t)0x2951, - (q15_t)0xf28, (q15_t)0x295b, (q15_t)0xf30, (q15_t)0x2965, (q15_t)0xf38, (q15_t)0x296e, (q15_t)0xf40, (q15_t)0x2978, - (q15_t)0xf48, (q15_t)0x2981, (q15_t)0xf51, (q15_t)0x298b, (q15_t)0xf59, (q15_t)0x2994, (q15_t)0xf61, (q15_t)0x299e, - (q15_t)0xf69, (q15_t)0x29a7, (q15_t)0xf71, (q15_t)0x29b1, (q15_t)0xf79, (q15_t)0x29bb, (q15_t)0xf82, (q15_t)0x29c4, - (q15_t)0xf8a, (q15_t)0x29ce, (q15_t)0xf92, (q15_t)0x29d7, (q15_t)0xf9a, (q15_t)0x29e1, (q15_t)0xfa3, (q15_t)0x29ea, - (q15_t)0xfab, (q15_t)0x29f4, (q15_t)0xfb3, (q15_t)0x29fd, (q15_t)0xfbb, (q15_t)0x2a07, (q15_t)0xfc4, (q15_t)0x2a10, - (q15_t)0xfcc, (q15_t)0x2a1a, (q15_t)0xfd4, (q15_t)0x2a23, (q15_t)0xfdc, (q15_t)0x2a2c, (q15_t)0xfe5, (q15_t)0x2a36, - (q15_t)0xfed, (q15_t)0x2a3f, (q15_t)0xff5, (q15_t)0x2a49, (q15_t)0xffe, (q15_t)0x2a52, (q15_t)0x1006, (q15_t)0x2a5c, - (q15_t)0x100e, (q15_t)0x2a65, (q15_t)0x1016, (q15_t)0x2a6e, (q15_t)0x101f, (q15_t)0x2a78, (q15_t)0x1027, (q15_t)0x2a81, - (q15_t)0x1030, (q15_t)0x2a8b, (q15_t)0x1038, (q15_t)0x2a94, (q15_t)0x1040, (q15_t)0x2a9d, (q15_t)0x1049, (q15_t)0x2aa7, - (q15_t)0x1051, (q15_t)0x2ab0, (q15_t)0x1059, (q15_t)0x2ab9, (q15_t)0x1062, (q15_t)0x2ac3, (q15_t)0x106a, (q15_t)0x2acc, - (q15_t)0x1073, (q15_t)0x2ad6, (q15_t)0x107b, (q15_t)0x2adf, (q15_t)0x1083, (q15_t)0x2ae8, (q15_t)0x108c, (q15_t)0x2af2, - (q15_t)0x1094, (q15_t)0x2afb, (q15_t)0x109d, (q15_t)0x2b04, (q15_t)0x10a5, (q15_t)0x2b0d, (q15_t)0x10ae, (q15_t)0x2b17, - (q15_t)0x10b6, (q15_t)0x2b20, (q15_t)0x10bf, (q15_t)0x2b29, (q15_t)0x10c7, (q15_t)0x2b33, (q15_t)0x10d0, (q15_t)0x2b3c, - (q15_t)0x10d8, (q15_t)0x2b45, (q15_t)0x10e0, (q15_t)0x2b4e, (q15_t)0x10e9, (q15_t)0x2b58, (q15_t)0x10f2, (q15_t)0x2b61, - (q15_t)0x10fa, (q15_t)0x2b6a, (q15_t)0x1103, (q15_t)0x2b73, (q15_t)0x110b, (q15_t)0x2b7d, (q15_t)0x1114, (q15_t)0x2b86, - (q15_t)0x111c, (q15_t)0x2b8f, (q15_t)0x1125, (q15_t)0x2b98, (q15_t)0x112d, (q15_t)0x2ba1, (q15_t)0x1136, (q15_t)0x2bab, - (q15_t)0x113e, (q15_t)0x2bb4, (q15_t)0x1147, (q15_t)0x2bbd, (q15_t)0x1150, (q15_t)0x2bc6, (q15_t)0x1158, (q15_t)0x2bcf, - (q15_t)0x1161, (q15_t)0x2bd8, (q15_t)0x1169, (q15_t)0x2be2, (q15_t)0x1172, (q15_t)0x2beb, (q15_t)0x117b, (q15_t)0x2bf4, - (q15_t)0x1183, (q15_t)0x2bfd, (q15_t)0x118c, (q15_t)0x2c06, (q15_t)0x1195, (q15_t)0x2c0f, (q15_t)0x119d, (q15_t)0x2c18, - (q15_t)0x11a6, (q15_t)0x2c21, (q15_t)0x11af, (q15_t)0x2c2b, (q15_t)0x11b7, (q15_t)0x2c34, (q15_t)0x11c0, (q15_t)0x2c3d, - (q15_t)0x11c9, (q15_t)0x2c46, (q15_t)0x11d1, (q15_t)0x2c4f, (q15_t)0x11da, (q15_t)0x2c58, (q15_t)0x11e3, (q15_t)0x2c61, - (q15_t)0x11eb, (q15_t)0x2c6a, (q15_t)0x11f4, (q15_t)0x2c73, (q15_t)0x11fd, (q15_t)0x2c7c, (q15_t)0x1206, (q15_t)0x2c85, - (q15_t)0x120e, (q15_t)0x2c8e, (q15_t)0x1217, (q15_t)0x2c97, (q15_t)0x1220, (q15_t)0x2ca0, (q15_t)0x1229, (q15_t)0x2ca9, - (q15_t)0x1231, (q15_t)0x2cb2, (q15_t)0x123a, (q15_t)0x2cbb, (q15_t)0x1243, (q15_t)0x2cc4, (q15_t)0x124c, (q15_t)0x2ccd, - (q15_t)0x1255, (q15_t)0x2cd6, (q15_t)0x125d, (q15_t)0x2cdf, (q15_t)0x1266, (q15_t)0x2ce8, (q15_t)0x126f, (q15_t)0x2cf1, - (q15_t)0x1278, (q15_t)0x2cfa, (q15_t)0x1281, (q15_t)0x2d03, (q15_t)0x128a, (q15_t)0x2d0c, (q15_t)0x1292, (q15_t)0x2d15, - (q15_t)0x129b, (q15_t)0x2d1e, (q15_t)0x12a4, (q15_t)0x2d27, (q15_t)0x12ad, (q15_t)0x2d2f, (q15_t)0x12b6, (q15_t)0x2d38, - (q15_t)0x12bf, (q15_t)0x2d41, (q15_t)0x12c8, (q15_t)0x2d4a, (q15_t)0x12d1, (q15_t)0x2d53, (q15_t)0x12d9, (q15_t)0x2d5c, - (q15_t)0x12e2, (q15_t)0x2d65, (q15_t)0x12eb, (q15_t)0x2d6e, (q15_t)0x12f4, (q15_t)0x2d76, (q15_t)0x12fd, (q15_t)0x2d7f, - (q15_t)0x1306, (q15_t)0x2d88, (q15_t)0x130f, (q15_t)0x2d91, (q15_t)0x1318, (q15_t)0x2d9a, (q15_t)0x1321, (q15_t)0x2da3, - (q15_t)0x132a, (q15_t)0x2dab, (q15_t)0x1333, (q15_t)0x2db4, (q15_t)0x133c, (q15_t)0x2dbd, (q15_t)0x1345, (q15_t)0x2dc6, - (q15_t)0x134e, (q15_t)0x2dcf, (q15_t)0x1357, (q15_t)0x2dd7, (q15_t)0x1360, (q15_t)0x2de0, (q15_t)0x1369, (q15_t)0x2de9, - (q15_t)0x1372, (q15_t)0x2df2, (q15_t)0x137b, (q15_t)0x2dfa, (q15_t)0x1384, (q15_t)0x2e03, (q15_t)0x138d, (q15_t)0x2e0c, - (q15_t)0x1396, (q15_t)0x2e15, (q15_t)0x139f, (q15_t)0x2e1d, (q15_t)0x13a8, (q15_t)0x2e26, (q15_t)0x13b1, (q15_t)0x2e2f, - (q15_t)0x13ba, (q15_t)0x2e37, (q15_t)0x13c3, (q15_t)0x2e40, (q15_t)0x13cc, (q15_t)0x2e49, (q15_t)0x13d5, (q15_t)0x2e51, - (q15_t)0x13df, (q15_t)0x2e5a, (q15_t)0x13e8, (q15_t)0x2e63, (q15_t)0x13f1, (q15_t)0x2e6b, (q15_t)0x13fa, (q15_t)0x2e74, - (q15_t)0x1403, (q15_t)0x2e7d, (q15_t)0x140c, (q15_t)0x2e85, (q15_t)0x1415, (q15_t)0x2e8e, (q15_t)0x141e, (q15_t)0x2e97, - (q15_t)0x1428, (q15_t)0x2e9f, (q15_t)0x1431, (q15_t)0x2ea8, (q15_t)0x143a, (q15_t)0x2eb0, (q15_t)0x1443, (q15_t)0x2eb9, - (q15_t)0x144c, (q15_t)0x2ec2, (q15_t)0x1455, (q15_t)0x2eca, (q15_t)0x145f, (q15_t)0x2ed3, (q15_t)0x1468, (q15_t)0x2edb, - (q15_t)0x1471, (q15_t)0x2ee4, (q15_t)0x147a, (q15_t)0x2eec, (q15_t)0x1483, (q15_t)0x2ef5, (q15_t)0x148d, (q15_t)0x2efd, - (q15_t)0x1496, (q15_t)0x2f06, (q15_t)0x149f, (q15_t)0x2f0e, (q15_t)0x14a8, (q15_t)0x2f17, (q15_t)0x14b2, (q15_t)0x2f20, - (q15_t)0x14bb, (q15_t)0x2f28, (q15_t)0x14c4, (q15_t)0x2f30, (q15_t)0x14cd, (q15_t)0x2f39, (q15_t)0x14d7, (q15_t)0x2f41, - (q15_t)0x14e0, (q15_t)0x2f4a, (q15_t)0x14e9, (q15_t)0x2f52, (q15_t)0x14f3, (q15_t)0x2f5b, (q15_t)0x14fc, (q15_t)0x2f63, - (q15_t)0x1505, (q15_t)0x2f6c, (q15_t)0x150e, (q15_t)0x2f74, (q15_t)0x1518, (q15_t)0x2f7d, (q15_t)0x1521, (q15_t)0x2f85, - (q15_t)0x152a, (q15_t)0x2f8d, (q15_t)0x1534, (q15_t)0x2f96, (q15_t)0x153d, (q15_t)0x2f9e, (q15_t)0x1547, (q15_t)0x2fa7, - (q15_t)0x1550, (q15_t)0x2faf, (q15_t)0x1559, (q15_t)0x2fb7, (q15_t)0x1563, (q15_t)0x2fc0, (q15_t)0x156c, (q15_t)0x2fc8, - (q15_t)0x1575, (q15_t)0x2fd0, (q15_t)0x157f, (q15_t)0x2fd9, (q15_t)0x1588, (q15_t)0x2fe1, (q15_t)0x1592, (q15_t)0x2fea, - (q15_t)0x159b, (q15_t)0x2ff2, (q15_t)0x15a4, (q15_t)0x2ffa, (q15_t)0x15ae, (q15_t)0x3002, (q15_t)0x15b7, (q15_t)0x300b, - (q15_t)0x15c1, (q15_t)0x3013, (q15_t)0x15ca, (q15_t)0x301b, (q15_t)0x15d4, (q15_t)0x3024, (q15_t)0x15dd, (q15_t)0x302c, - (q15_t)0x15e6, (q15_t)0x3034, (q15_t)0x15f0, (q15_t)0x303c, (q15_t)0x15f9, (q15_t)0x3045, (q15_t)0x1603, (q15_t)0x304d, - (q15_t)0x160c, (q15_t)0x3055, (q15_t)0x1616, (q15_t)0x305d, (q15_t)0x161f, (q15_t)0x3066, (q15_t)0x1629, (q15_t)0x306e, - (q15_t)0x1632, (q15_t)0x3076, (q15_t)0x163c, (q15_t)0x307e, (q15_t)0x1645, (q15_t)0x3087, (q15_t)0x164f, (q15_t)0x308f, - (q15_t)0x1659, (q15_t)0x3097, (q15_t)0x1662, (q15_t)0x309f, (q15_t)0x166c, (q15_t)0x30a7, (q15_t)0x1675, (q15_t)0x30af, - (q15_t)0x167f, (q15_t)0x30b8, (q15_t)0x1688, (q15_t)0x30c0, (q15_t)0x1692, (q15_t)0x30c8, (q15_t)0x169b, (q15_t)0x30d0, - (q15_t)0x16a5, (q15_t)0x30d8, (q15_t)0x16af, (q15_t)0x30e0, (q15_t)0x16b8, (q15_t)0x30e8, (q15_t)0x16c2, (q15_t)0x30f0, - (q15_t)0x16cb, (q15_t)0x30f9, (q15_t)0x16d5, (q15_t)0x3101, (q15_t)0x16df, (q15_t)0x3109, (q15_t)0x16e8, (q15_t)0x3111, - (q15_t)0x16f2, (q15_t)0x3119, (q15_t)0x16fc, (q15_t)0x3121, (q15_t)0x1705, (q15_t)0x3129, (q15_t)0x170f, (q15_t)0x3131, - (q15_t)0x1719, (q15_t)0x3139, (q15_t)0x1722, (q15_t)0x3141, (q15_t)0x172c, (q15_t)0x3149, (q15_t)0x1736, (q15_t)0x3151, - (q15_t)0x173f, (q15_t)0x3159, (q15_t)0x1749, (q15_t)0x3161, (q15_t)0x1753, (q15_t)0x3169, (q15_t)0x175c, (q15_t)0x3171, - (q15_t)0x1766, (q15_t)0x3179, (q15_t)0x1770, (q15_t)0x3181, (q15_t)0x177a, (q15_t)0x3189, (q15_t)0x1783, (q15_t)0x3191, - (q15_t)0x178d, (q15_t)0x3199, (q15_t)0x1797, (q15_t)0x31a1, (q15_t)0x17a0, (q15_t)0x31a9, (q15_t)0x17aa, (q15_t)0x31b1, - (q15_t)0x17b4, (q15_t)0x31b9, (q15_t)0x17be, (q15_t)0x31c0, (q15_t)0x17c8, (q15_t)0x31c8, (q15_t)0x17d1, (q15_t)0x31d0, - (q15_t)0x17db, (q15_t)0x31d8, (q15_t)0x17e5, (q15_t)0x31e0, (q15_t)0x17ef, (q15_t)0x31e8, (q15_t)0x17f8, (q15_t)0x31f0, - (q15_t)0x1802, (q15_t)0x31f8, (q15_t)0x180c, (q15_t)0x31ff, (q15_t)0x1816, (q15_t)0x3207, (q15_t)0x1820, (q15_t)0x320f, - (q15_t)0x182a, (q15_t)0x3217, (q15_t)0x1833, (q15_t)0x321f, (q15_t)0x183d, (q15_t)0x3227, (q15_t)0x1847, (q15_t)0x322e, - (q15_t)0x1851, (q15_t)0x3236, (q15_t)0x185b, (q15_t)0x323e, (q15_t)0x1865, (q15_t)0x3246, (q15_t)0x186f, (q15_t)0x324e, - (q15_t)0x1878, (q15_t)0x3255, (q15_t)0x1882, (q15_t)0x325d, (q15_t)0x188c, (q15_t)0x3265, (q15_t)0x1896, (q15_t)0x326d, - (q15_t)0x18a0, (q15_t)0x3274, (q15_t)0x18aa, (q15_t)0x327c, (q15_t)0x18b4, (q15_t)0x3284, (q15_t)0x18be, (q15_t)0x328b, - (q15_t)0x18c8, (q15_t)0x3293, (q15_t)0x18d2, (q15_t)0x329b, (q15_t)0x18dc, (q15_t)0x32a3, (q15_t)0x18e6, (q15_t)0x32aa, - (q15_t)0x18ef, (q15_t)0x32b2, (q15_t)0x18f9, (q15_t)0x32ba, (q15_t)0x1903, (q15_t)0x32c1, (q15_t)0x190d, (q15_t)0x32c9, - (q15_t)0x1917, (q15_t)0x32d0, (q15_t)0x1921, (q15_t)0x32d8, (q15_t)0x192b, (q15_t)0x32e0, (q15_t)0x1935, (q15_t)0x32e7, - (q15_t)0x193f, (q15_t)0x32ef, (q15_t)0x1949, (q15_t)0x32f7, (q15_t)0x1953, (q15_t)0x32fe, (q15_t)0x195d, (q15_t)0x3306, - (q15_t)0x1967, (q15_t)0x330d, (q15_t)0x1971, (q15_t)0x3315, (q15_t)0x197b, (q15_t)0x331d, (q15_t)0x1985, (q15_t)0x3324, - (q15_t)0x198f, (q15_t)0x332c, (q15_t)0x199a, (q15_t)0x3333, (q15_t)0x19a4, (q15_t)0x333b, (q15_t)0x19ae, (q15_t)0x3342, - (q15_t)0x19b8, (q15_t)0x334a, (q15_t)0x19c2, (q15_t)0x3351, (q15_t)0x19cc, (q15_t)0x3359, (q15_t)0x19d6, (q15_t)0x3360, - (q15_t)0x19e0, (q15_t)0x3368, (q15_t)0x19ea, (q15_t)0x336f, (q15_t)0x19f4, (q15_t)0x3377, (q15_t)0x19fe, (q15_t)0x337e, - (q15_t)0x1a08, (q15_t)0x3386, (q15_t)0x1a13, (q15_t)0x338d, (q15_t)0x1a1d, (q15_t)0x3395, (q15_t)0x1a27, (q15_t)0x339c, - (q15_t)0x1a31, (q15_t)0x33a3, (q15_t)0x1a3b, (q15_t)0x33ab, (q15_t)0x1a45, (q15_t)0x33b2, (q15_t)0x1a4f, (q15_t)0x33ba, - (q15_t)0x1a5a, (q15_t)0x33c1, (q15_t)0x1a64, (q15_t)0x33c8, (q15_t)0x1a6e, (q15_t)0x33d0, (q15_t)0x1a78, (q15_t)0x33d7, - (q15_t)0x1a82, (q15_t)0x33df, (q15_t)0x1a8c, (q15_t)0x33e6, (q15_t)0x1a97, (q15_t)0x33ed, (q15_t)0x1aa1, (q15_t)0x33f5, - (q15_t)0x1aab, (q15_t)0x33fc, (q15_t)0x1ab5, (q15_t)0x3403, (q15_t)0x1abf, (q15_t)0x340b, (q15_t)0x1aca, (q15_t)0x3412, - (q15_t)0x1ad4, (q15_t)0x3419, (q15_t)0x1ade, (q15_t)0x3420, (q15_t)0x1ae8, (q15_t)0x3428, (q15_t)0x1af3, (q15_t)0x342f, - (q15_t)0x1afd, (q15_t)0x3436, (q15_t)0x1b07, (q15_t)0x343e, (q15_t)0x1b11, (q15_t)0x3445, (q15_t)0x1b1c, (q15_t)0x344c, - (q15_t)0x1b26, (q15_t)0x3453, (q15_t)0x1b30, (q15_t)0x345b, (q15_t)0x1b3b, (q15_t)0x3462, (q15_t)0x1b45, (q15_t)0x3469, - (q15_t)0x1b4f, (q15_t)0x3470, (q15_t)0x1b59, (q15_t)0x3477, (q15_t)0x1b64, (q15_t)0x347f, (q15_t)0x1b6e, (q15_t)0x3486, - (q15_t)0x1b78, (q15_t)0x348d, (q15_t)0x1b83, (q15_t)0x3494, (q15_t)0x1b8d, (q15_t)0x349b, (q15_t)0x1b97, (q15_t)0x34a2, - (q15_t)0x1ba2, (q15_t)0x34aa, (q15_t)0x1bac, (q15_t)0x34b1, (q15_t)0x1bb6, (q15_t)0x34b8, (q15_t)0x1bc1, (q15_t)0x34bf, - (q15_t)0x1bcb, (q15_t)0x34c6, (q15_t)0x1bd5, (q15_t)0x34cd, (q15_t)0x1be0, (q15_t)0x34d4, (q15_t)0x1bea, (q15_t)0x34db, - (q15_t)0x1bf5, (q15_t)0x34e2, (q15_t)0x1bff, (q15_t)0x34ea, (q15_t)0x1c09, (q15_t)0x34f1, (q15_t)0x1c14, (q15_t)0x34f8, - (q15_t)0x1c1e, (q15_t)0x34ff, (q15_t)0x1c29, (q15_t)0x3506, (q15_t)0x1c33, (q15_t)0x350d, (q15_t)0x1c3d, (q15_t)0x3514, - (q15_t)0x1c48, (q15_t)0x351b, (q15_t)0x1c52, (q15_t)0x3522, (q15_t)0x1c5d, (q15_t)0x3529, (q15_t)0x1c67, (q15_t)0x3530, - (q15_t)0x1c72, (q15_t)0x3537, (q15_t)0x1c7c, (q15_t)0x353e, (q15_t)0x1c86, (q15_t)0x3545, (q15_t)0x1c91, (q15_t)0x354c, - (q15_t)0x1c9b, (q15_t)0x3553, (q15_t)0x1ca6, (q15_t)0x355a, (q15_t)0x1cb0, (q15_t)0x3561, (q15_t)0x1cbb, (q15_t)0x3567, - (q15_t)0x1cc5, (q15_t)0x356e, (q15_t)0x1cd0, (q15_t)0x3575, (q15_t)0x1cda, (q15_t)0x357c, (q15_t)0x1ce5, (q15_t)0x3583, - (q15_t)0x1cef, (q15_t)0x358a, (q15_t)0x1cfa, (q15_t)0x3591, (q15_t)0x1d04, (q15_t)0x3598, (q15_t)0x1d0f, (q15_t)0x359f, - (q15_t)0x1d19, (q15_t)0x35a5, (q15_t)0x1d24, (q15_t)0x35ac, (q15_t)0x1d2e, (q15_t)0x35b3, (q15_t)0x1d39, (q15_t)0x35ba, - (q15_t)0x1d44, (q15_t)0x35c1, (q15_t)0x1d4e, (q15_t)0x35c8, (q15_t)0x1d59, (q15_t)0x35ce, (q15_t)0x1d63, (q15_t)0x35d5, - (q15_t)0x1d6e, (q15_t)0x35dc, (q15_t)0x1d78, (q15_t)0x35e3, (q15_t)0x1d83, (q15_t)0x35ea, (q15_t)0x1d8e, (q15_t)0x35f0, - (q15_t)0x1d98, (q15_t)0x35f7, (q15_t)0x1da3, (q15_t)0x35fe, (q15_t)0x1dad, (q15_t)0x3605, (q15_t)0x1db8, (q15_t)0x360b, - (q15_t)0x1dc3, (q15_t)0x3612, (q15_t)0x1dcd, (q15_t)0x3619, (q15_t)0x1dd8, (q15_t)0x3620, (q15_t)0x1de2, (q15_t)0x3626, - (q15_t)0x1ded, (q15_t)0x362d, (q15_t)0x1df8, (q15_t)0x3634, (q15_t)0x1e02, (q15_t)0x363a, (q15_t)0x1e0d, (q15_t)0x3641, - (q15_t)0x1e18, (q15_t)0x3648, (q15_t)0x1e22, (q15_t)0x364e, (q15_t)0x1e2d, (q15_t)0x3655, (q15_t)0x1e38, (q15_t)0x365c, - (q15_t)0x1e42, (q15_t)0x3662, (q15_t)0x1e4d, (q15_t)0x3669, (q15_t)0x1e58, (q15_t)0x366f, (q15_t)0x1e62, (q15_t)0x3676, - (q15_t)0x1e6d, (q15_t)0x367d, (q15_t)0x1e78, (q15_t)0x3683, (q15_t)0x1e83, (q15_t)0x368a, (q15_t)0x1e8d, (q15_t)0x3690, - (q15_t)0x1e98, (q15_t)0x3697, (q15_t)0x1ea3, (q15_t)0x369d, (q15_t)0x1ead, (q15_t)0x36a4, (q15_t)0x1eb8, (q15_t)0x36ab, - (q15_t)0x1ec3, (q15_t)0x36b1, (q15_t)0x1ece, (q15_t)0x36b8, (q15_t)0x1ed8, (q15_t)0x36be, (q15_t)0x1ee3, (q15_t)0x36c5, - (q15_t)0x1eee, (q15_t)0x36cb, (q15_t)0x1ef9, (q15_t)0x36d2, (q15_t)0x1f03, (q15_t)0x36d8, (q15_t)0x1f0e, (q15_t)0x36df, - (q15_t)0x1f19, (q15_t)0x36e5, (q15_t)0x1f24, (q15_t)0x36eb, (q15_t)0x1f2f, (q15_t)0x36f2, (q15_t)0x1f39, (q15_t)0x36f8, - (q15_t)0x1f44, (q15_t)0x36ff, (q15_t)0x1f4f, (q15_t)0x3705, (q15_t)0x1f5a, (q15_t)0x370c, (q15_t)0x1f65, (q15_t)0x3712, - (q15_t)0x1f6f, (q15_t)0x3718, (q15_t)0x1f7a, (q15_t)0x371f, (q15_t)0x1f85, (q15_t)0x3725, (q15_t)0x1f90, (q15_t)0x372c, - (q15_t)0x1f9b, (q15_t)0x3732, (q15_t)0x1fa5, (q15_t)0x3738, (q15_t)0x1fb0, (q15_t)0x373f, (q15_t)0x1fbb, (q15_t)0x3745, - (q15_t)0x1fc6, (q15_t)0x374b, (q15_t)0x1fd1, (q15_t)0x3752, (q15_t)0x1fdc, (q15_t)0x3758, (q15_t)0x1fe7, (q15_t)0x375e, - (q15_t)0x1ff1, (q15_t)0x3765, (q15_t)0x1ffc, (q15_t)0x376b, (q15_t)0x2007, (q15_t)0x3771, (q15_t)0x2012, (q15_t)0x3777, - (q15_t)0x201d, (q15_t)0x377e, (q15_t)0x2028, (q15_t)0x3784, (q15_t)0x2033, (q15_t)0x378a, (q15_t)0x203e, (q15_t)0x3790, - (q15_t)0x2049, (q15_t)0x3797, (q15_t)0x2054, (q15_t)0x379d, (q15_t)0x205e, (q15_t)0x37a3, (q15_t)0x2069, (q15_t)0x37a9, - (q15_t)0x2074, (q15_t)0x37b0, (q15_t)0x207f, (q15_t)0x37b6, (q15_t)0x208a, (q15_t)0x37bc, (q15_t)0x2095, (q15_t)0x37c2, - (q15_t)0x20a0, (q15_t)0x37c8, (q15_t)0x20ab, (q15_t)0x37ce, (q15_t)0x20b6, (q15_t)0x37d5, (q15_t)0x20c1, (q15_t)0x37db, - (q15_t)0x20cc, (q15_t)0x37e1, (q15_t)0x20d7, (q15_t)0x37e7, (q15_t)0x20e2, (q15_t)0x37ed, (q15_t)0x20ed, (q15_t)0x37f3, - (q15_t)0x20f8, (q15_t)0x37f9, (q15_t)0x2103, (q15_t)0x37ff, (q15_t)0x210e, (q15_t)0x3805, (q15_t)0x2119, (q15_t)0x380b, - (q15_t)0x2124, (q15_t)0x3812, (q15_t)0x212f, (q15_t)0x3818, (q15_t)0x213a, (q15_t)0x381e, (q15_t)0x2145, (q15_t)0x3824, - (q15_t)0x2150, (q15_t)0x382a, (q15_t)0x215b, (q15_t)0x3830, (q15_t)0x2166, (q15_t)0x3836, (q15_t)0x2171, (q15_t)0x383c, - (q15_t)0x217c, (q15_t)0x3842, (q15_t)0x2187, (q15_t)0x3848, (q15_t)0x2192, (q15_t)0x384e, (q15_t)0x219d, (q15_t)0x3854, - (q15_t)0x21a8, (q15_t)0x385a, (q15_t)0x21b3, (q15_t)0x3860, (q15_t)0x21be, (q15_t)0x3866, (q15_t)0x21ca, (q15_t)0x386b, - (q15_t)0x21d5, (q15_t)0x3871, (q15_t)0x21e0, (q15_t)0x3877, (q15_t)0x21eb, (q15_t)0x387d, (q15_t)0x21f6, (q15_t)0x3883, - (q15_t)0x2201, (q15_t)0x3889, (q15_t)0x220c, (q15_t)0x388f, (q15_t)0x2217, (q15_t)0x3895, (q15_t)0x2222, (q15_t)0x389b, - (q15_t)0x222d, (q15_t)0x38a1, (q15_t)0x2239, (q15_t)0x38a6, (q15_t)0x2244, (q15_t)0x38ac, (q15_t)0x224f, (q15_t)0x38b2, - (q15_t)0x225a, (q15_t)0x38b8, (q15_t)0x2265, (q15_t)0x38be, (q15_t)0x2270, (q15_t)0x38c3, (q15_t)0x227b, (q15_t)0x38c9, - (q15_t)0x2287, (q15_t)0x38cf, (q15_t)0x2292, (q15_t)0x38d5, (q15_t)0x229d, (q15_t)0x38db, (q15_t)0x22a8, (q15_t)0x38e0, - (q15_t)0x22b3, (q15_t)0x38e6, (q15_t)0x22be, (q15_t)0x38ec, (q15_t)0x22ca, (q15_t)0x38f2, (q15_t)0x22d5, (q15_t)0x38f7, - (q15_t)0x22e0, (q15_t)0x38fd, (q15_t)0x22eb, (q15_t)0x3903, (q15_t)0x22f6, (q15_t)0x3909, (q15_t)0x2301, (q15_t)0x390e, - (q15_t)0x230d, (q15_t)0x3914, (q15_t)0x2318, (q15_t)0x391a, (q15_t)0x2323, (q15_t)0x391f, (q15_t)0x232e, (q15_t)0x3925, - (q15_t)0x233a, (q15_t)0x392b, (q15_t)0x2345, (q15_t)0x3930, (q15_t)0x2350, (q15_t)0x3936, (q15_t)0x235b, (q15_t)0x393b, - (q15_t)0x2367, (q15_t)0x3941, (q15_t)0x2372, (q15_t)0x3947, (q15_t)0x237d, (q15_t)0x394c, (q15_t)0x2388, (q15_t)0x3952, - (q15_t)0x2394, (q15_t)0x3958, (q15_t)0x239f, (q15_t)0x395d, (q15_t)0x23aa, (q15_t)0x3963, (q15_t)0x23b5, (q15_t)0x3968, - (q15_t)0x23c1, (q15_t)0x396e, (q15_t)0x23cc, (q15_t)0x3973, (q15_t)0x23d7, (q15_t)0x3979, (q15_t)0x23e2, (q15_t)0x397e, - (q15_t)0x23ee, (q15_t)0x3984, (q15_t)0x23f9, (q15_t)0x3989, (q15_t)0x2404, (q15_t)0x398f, (q15_t)0x2410, (q15_t)0x3994, - (q15_t)0x241b, (q15_t)0x399a, (q15_t)0x2426, (q15_t)0x399f, (q15_t)0x2432, (q15_t)0x39a5, (q15_t)0x243d, (q15_t)0x39aa, - (q15_t)0x2448, (q15_t)0x39b0, (q15_t)0x2454, (q15_t)0x39b5, (q15_t)0x245f, (q15_t)0x39bb, (q15_t)0x246a, (q15_t)0x39c0, - (q15_t)0x2476, (q15_t)0x39c5, (q15_t)0x2481, (q15_t)0x39cb, (q15_t)0x248c, (q15_t)0x39d0, (q15_t)0x2498, (q15_t)0x39d6, - (q15_t)0x24a3, (q15_t)0x39db, (q15_t)0x24ae, (q15_t)0x39e0, (q15_t)0x24ba, (q15_t)0x39e6, (q15_t)0x24c5, (q15_t)0x39eb, - (q15_t)0x24d0, (q15_t)0x39f0, (q15_t)0x24dc, (q15_t)0x39f6, (q15_t)0x24e7, (q15_t)0x39fb, (q15_t)0x24f3, (q15_t)0x3a00, - (q15_t)0x24fe, (q15_t)0x3a06, (q15_t)0x2509, (q15_t)0x3a0b, (q15_t)0x2515, (q15_t)0x3a10, (q15_t)0x2520, (q15_t)0x3a16, - (q15_t)0x252c, (q15_t)0x3a1b, (q15_t)0x2537, (q15_t)0x3a20, (q15_t)0x2542, (q15_t)0x3a25, (q15_t)0x254e, (q15_t)0x3a2b, - (q15_t)0x2559, (q15_t)0x3a30, (q15_t)0x2565, (q15_t)0x3a35, (q15_t)0x2570, (q15_t)0x3a3a, (q15_t)0x257c, (q15_t)0x3a3f, - (q15_t)0x2587, (q15_t)0x3a45, (q15_t)0x2592, (q15_t)0x3a4a, (q15_t)0x259e, (q15_t)0x3a4f, (q15_t)0x25a9, (q15_t)0x3a54, - (q15_t)0x25b5, (q15_t)0x3a59, (q15_t)0x25c0, (q15_t)0x3a5f, (q15_t)0x25cc, (q15_t)0x3a64, (q15_t)0x25d7, (q15_t)0x3a69, - (q15_t)0x25e3, (q15_t)0x3a6e, (q15_t)0x25ee, (q15_t)0x3a73, (q15_t)0x25fa, (q15_t)0x3a78, (q15_t)0x2605, (q15_t)0x3a7d, - (q15_t)0x2611, (q15_t)0x3a82, (q15_t)0x261c, (q15_t)0x3a88, (q15_t)0x2628, (q15_t)0x3a8d, (q15_t)0x2633, (q15_t)0x3a92, - (q15_t)0x263f, (q15_t)0x3a97, (q15_t)0x264a, (q15_t)0x3a9c, (q15_t)0x2656, (q15_t)0x3aa1, (q15_t)0x2661, (q15_t)0x3aa6, - (q15_t)0x266d, (q15_t)0x3aab, (q15_t)0x2678, (q15_t)0x3ab0, (q15_t)0x2684, (q15_t)0x3ab5, (q15_t)0x268f, (q15_t)0x3aba, - (q15_t)0x269b, (q15_t)0x3abf, (q15_t)0x26a6, (q15_t)0x3ac4, (q15_t)0x26b2, (q15_t)0x3ac9, (q15_t)0x26bd, (q15_t)0x3ace, - (q15_t)0x26c9, (q15_t)0x3ad3, (q15_t)0x26d4, (q15_t)0x3ad8, (q15_t)0x26e0, (q15_t)0x3add, (q15_t)0x26ec, (q15_t)0x3ae2, - (q15_t)0x26f7, (q15_t)0x3ae6, (q15_t)0x2703, (q15_t)0x3aeb, (q15_t)0x270e, (q15_t)0x3af0, (q15_t)0x271a, (q15_t)0x3af5, - (q15_t)0x2725, (q15_t)0x3afa, (q15_t)0x2731, (q15_t)0x3aff, (q15_t)0x273d, (q15_t)0x3b04, (q15_t)0x2748, (q15_t)0x3b09, - (q15_t)0x2754, (q15_t)0x3b0e, (q15_t)0x275f, (q15_t)0x3b12, (q15_t)0x276b, (q15_t)0x3b17, (q15_t)0x2777, (q15_t)0x3b1c, - (q15_t)0x2782, (q15_t)0x3b21, (q15_t)0x278e, (q15_t)0x3b26, (q15_t)0x2799, (q15_t)0x3b2a, (q15_t)0x27a5, (q15_t)0x3b2f, - (q15_t)0x27b1, (q15_t)0x3b34, (q15_t)0x27bc, (q15_t)0x3b39, (q15_t)0x27c8, (q15_t)0x3b3e, (q15_t)0x27d3, (q15_t)0x3b42, - (q15_t)0x27df, (q15_t)0x3b47, (q15_t)0x27eb, (q15_t)0x3b4c, (q15_t)0x27f6, (q15_t)0x3b50, (q15_t)0x2802, (q15_t)0x3b55, - (q15_t)0x280e, (q15_t)0x3b5a, (q15_t)0x2819, (q15_t)0x3b5f, (q15_t)0x2825, (q15_t)0x3b63, (q15_t)0x2831, (q15_t)0x3b68, - (q15_t)0x283c, (q15_t)0x3b6d, (q15_t)0x2848, (q15_t)0x3b71, (q15_t)0x2854, (q15_t)0x3b76, (q15_t)0x285f, (q15_t)0x3b7b, - (q15_t)0x286b, (q15_t)0x3b7f, (q15_t)0x2877, (q15_t)0x3b84, (q15_t)0x2882, (q15_t)0x3b88, (q15_t)0x288e, (q15_t)0x3b8d, - (q15_t)0x289a, (q15_t)0x3b92, (q15_t)0x28a5, (q15_t)0x3b96, (q15_t)0x28b1, (q15_t)0x3b9b, (q15_t)0x28bd, (q15_t)0x3b9f, - (q15_t)0x28c9, (q15_t)0x3ba4, (q15_t)0x28d4, (q15_t)0x3ba9, (q15_t)0x28e0, (q15_t)0x3bad, (q15_t)0x28ec, (q15_t)0x3bb2, - (q15_t)0x28f7, (q15_t)0x3bb6, (q15_t)0x2903, (q15_t)0x3bbb, (q15_t)0x290f, (q15_t)0x3bbf, (q15_t)0x291b, (q15_t)0x3bc4, - (q15_t)0x2926, (q15_t)0x3bc8, (q15_t)0x2932, (q15_t)0x3bcd, (q15_t)0x293e, (q15_t)0x3bd1, (q15_t)0x294a, (q15_t)0x3bd6, - (q15_t)0x2955, (q15_t)0x3bda, (q15_t)0x2961, (q15_t)0x3bde, (q15_t)0x296d, (q15_t)0x3be3, (q15_t)0x2979, (q15_t)0x3be7, - (q15_t)0x2984, (q15_t)0x3bec, (q15_t)0x2990, (q15_t)0x3bf0, (q15_t)0x299c, (q15_t)0x3bf5, (q15_t)0x29a8, (q15_t)0x3bf9, - (q15_t)0x29b4, (q15_t)0x3bfd, (q15_t)0x29bf, (q15_t)0x3c02, (q15_t)0x29cb, (q15_t)0x3c06, (q15_t)0x29d7, (q15_t)0x3c0a, - (q15_t)0x29e3, (q15_t)0x3c0f, (q15_t)0x29ee, (q15_t)0x3c13, (q15_t)0x29fa, (q15_t)0x3c17, (q15_t)0x2a06, (q15_t)0x3c1c, - (q15_t)0x2a12, (q15_t)0x3c20, (q15_t)0x2a1e, (q15_t)0x3c24, (q15_t)0x2a29, (q15_t)0x3c29, (q15_t)0x2a35, (q15_t)0x3c2d, - (q15_t)0x2a41, (q15_t)0x3c31, (q15_t)0x2a4d, (q15_t)0x3c36, (q15_t)0x2a59, (q15_t)0x3c3a, (q15_t)0x2a65, (q15_t)0x3c3e, - (q15_t)0x2a70, (q15_t)0x3c42, (q15_t)0x2a7c, (q15_t)0x3c46, (q15_t)0x2a88, (q15_t)0x3c4b, (q15_t)0x2a94, (q15_t)0x3c4f, - (q15_t)0x2aa0, (q15_t)0x3c53, (q15_t)0x2aac, (q15_t)0x3c57, (q15_t)0x2ab7, (q15_t)0x3c5b, (q15_t)0x2ac3, (q15_t)0x3c60, - (q15_t)0x2acf, (q15_t)0x3c64, (q15_t)0x2adb, (q15_t)0x3c68, (q15_t)0x2ae7, (q15_t)0x3c6c, (q15_t)0x2af3, (q15_t)0x3c70, - (q15_t)0x2aff, (q15_t)0x3c74, (q15_t)0x2b0a, (q15_t)0x3c79, (q15_t)0x2b16, (q15_t)0x3c7d, (q15_t)0x2b22, (q15_t)0x3c81, - (q15_t)0x2b2e, (q15_t)0x3c85, (q15_t)0x2b3a, (q15_t)0x3c89, (q15_t)0x2b46, (q15_t)0x3c8d, (q15_t)0x2b52, (q15_t)0x3c91, - (q15_t)0x2b5e, (q15_t)0x3c95, (q15_t)0x2b6a, (q15_t)0x3c99, (q15_t)0x2b75, (q15_t)0x3c9d, (q15_t)0x2b81, (q15_t)0x3ca1, - (q15_t)0x2b8d, (q15_t)0x3ca5, (q15_t)0x2b99, (q15_t)0x3ca9, (q15_t)0x2ba5, (q15_t)0x3cad, (q15_t)0x2bb1, (q15_t)0x3cb1, - (q15_t)0x2bbd, (q15_t)0x3cb5, (q15_t)0x2bc9, (q15_t)0x3cb9, (q15_t)0x2bd5, (q15_t)0x3cbd, (q15_t)0x2be1, (q15_t)0x3cc1, - (q15_t)0x2bed, (q15_t)0x3cc5, (q15_t)0x2bf9, (q15_t)0x3cc9, (q15_t)0x2c05, (q15_t)0x3ccd, (q15_t)0x2c10, (q15_t)0x3cd1, - (q15_t)0x2c1c, (q15_t)0x3cd5, (q15_t)0x2c28, (q15_t)0x3cd9, (q15_t)0x2c34, (q15_t)0x3cdd, (q15_t)0x2c40, (q15_t)0x3ce0, - (q15_t)0x2c4c, (q15_t)0x3ce4, (q15_t)0x2c58, (q15_t)0x3ce8, (q15_t)0x2c64, (q15_t)0x3cec, (q15_t)0x2c70, (q15_t)0x3cf0, - (q15_t)0x2c7c, (q15_t)0x3cf4, (q15_t)0x2c88, (q15_t)0x3cf8, (q15_t)0x2c94, (q15_t)0x3cfb, (q15_t)0x2ca0, (q15_t)0x3cff, - (q15_t)0x2cac, (q15_t)0x3d03, (q15_t)0x2cb8, (q15_t)0x3d07, (q15_t)0x2cc4, (q15_t)0x3d0b, (q15_t)0x2cd0, (q15_t)0x3d0e, - (q15_t)0x2cdc, (q15_t)0x3d12, (q15_t)0x2ce8, (q15_t)0x3d16, (q15_t)0x2cf4, (q15_t)0x3d1a, (q15_t)0x2d00, (q15_t)0x3d1d, - (q15_t)0x2d0c, (q15_t)0x3d21, (q15_t)0x2d18, (q15_t)0x3d25, (q15_t)0x2d24, (q15_t)0x3d28, (q15_t)0x2d30, (q15_t)0x3d2c, - (q15_t)0x2d3c, (q15_t)0x3d30, (q15_t)0x2d48, (q15_t)0x3d34, (q15_t)0x2d54, (q15_t)0x3d37, (q15_t)0x2d60, (q15_t)0x3d3b, - (q15_t)0x2d6c, (q15_t)0x3d3f, (q15_t)0x2d78, (q15_t)0x3d42, (q15_t)0x2d84, (q15_t)0x3d46, (q15_t)0x2d90, (q15_t)0x3d49, - (q15_t)0x2d9c, (q15_t)0x3d4d, (q15_t)0x2da8, (q15_t)0x3d51, (q15_t)0x2db4, (q15_t)0x3d54, (q15_t)0x2dc0, (q15_t)0x3d58, - (q15_t)0x2dcc, (q15_t)0x3d5b, (q15_t)0x2dd8, (q15_t)0x3d5f, (q15_t)0x2de4, (q15_t)0x3d63, (q15_t)0x2df0, (q15_t)0x3d66, - (q15_t)0x2dfc, (q15_t)0x3d6a, (q15_t)0x2e09, (q15_t)0x3d6d, (q15_t)0x2e15, (q15_t)0x3d71, (q15_t)0x2e21, (q15_t)0x3d74, - (q15_t)0x2e2d, (q15_t)0x3d78, (q15_t)0x2e39, (q15_t)0x3d7b, (q15_t)0x2e45, (q15_t)0x3d7f, (q15_t)0x2e51, (q15_t)0x3d82, - (q15_t)0x2e5d, (q15_t)0x3d86, (q15_t)0x2e69, (q15_t)0x3d89, (q15_t)0x2e75, (q15_t)0x3d8d, (q15_t)0x2e81, (q15_t)0x3d90, - (q15_t)0x2e8d, (q15_t)0x3d93, (q15_t)0x2e99, (q15_t)0x3d97, (q15_t)0x2ea6, (q15_t)0x3d9a, (q15_t)0x2eb2, (q15_t)0x3d9e, - (q15_t)0x2ebe, (q15_t)0x3da1, (q15_t)0x2eca, (q15_t)0x3da4, (q15_t)0x2ed6, (q15_t)0x3da8, (q15_t)0x2ee2, (q15_t)0x3dab, - (q15_t)0x2eee, (q15_t)0x3daf, (q15_t)0x2efa, (q15_t)0x3db2, (q15_t)0x2f06, (q15_t)0x3db5, (q15_t)0x2f13, (q15_t)0x3db9, - (q15_t)0x2f1f, (q15_t)0x3dbc, (q15_t)0x2f2b, (q15_t)0x3dbf, (q15_t)0x2f37, (q15_t)0x3dc2, (q15_t)0x2f43, (q15_t)0x3dc6, - (q15_t)0x2f4f, (q15_t)0x3dc9, (q15_t)0x2f5b, (q15_t)0x3dcc, (q15_t)0x2f67, (q15_t)0x3dd0, (q15_t)0x2f74, (q15_t)0x3dd3, - (q15_t)0x2f80, (q15_t)0x3dd6, (q15_t)0x2f8c, (q15_t)0x3dd9, (q15_t)0x2f98, (q15_t)0x3ddd, (q15_t)0x2fa4, (q15_t)0x3de0, - (q15_t)0x2fb0, (q15_t)0x3de3, (q15_t)0x2fbc, (q15_t)0x3de6, (q15_t)0x2fc9, (q15_t)0x3de9, (q15_t)0x2fd5, (q15_t)0x3ded, - (q15_t)0x2fe1, (q15_t)0x3df0, (q15_t)0x2fed, (q15_t)0x3df3, (q15_t)0x2ff9, (q15_t)0x3df6, (q15_t)0x3005, (q15_t)0x3df9, - (q15_t)0x3012, (q15_t)0x3dfc, (q15_t)0x301e, (q15_t)0x3dff, (q15_t)0x302a, (q15_t)0x3e03, (q15_t)0x3036, (q15_t)0x3e06, - (q15_t)0x3042, (q15_t)0x3e09, (q15_t)0x304e, (q15_t)0x3e0c, (q15_t)0x305b, (q15_t)0x3e0f, (q15_t)0x3067, (q15_t)0x3e12, - (q15_t)0x3073, (q15_t)0x3e15, (q15_t)0x307f, (q15_t)0x3e18, (q15_t)0x308b, (q15_t)0x3e1b, (q15_t)0x3098, (q15_t)0x3e1e, - (q15_t)0x30a4, (q15_t)0x3e21, (q15_t)0x30b0, (q15_t)0x3e24, (q15_t)0x30bc, (q15_t)0x3e27, (q15_t)0x30c8, (q15_t)0x3e2a, - (q15_t)0x30d5, (q15_t)0x3e2d, (q15_t)0x30e1, (q15_t)0x3e30, (q15_t)0x30ed, (q15_t)0x3e33, (q15_t)0x30f9, (q15_t)0x3e36, - (q15_t)0x3105, (q15_t)0x3e39, (q15_t)0x3112, (q15_t)0x3e3c, (q15_t)0x311e, (q15_t)0x3e3f, (q15_t)0x312a, (q15_t)0x3e42, - (q15_t)0x3136, (q15_t)0x3e45, (q15_t)0x3143, (q15_t)0x3e48, (q15_t)0x314f, (q15_t)0x3e4a, (q15_t)0x315b, (q15_t)0x3e4d, - (q15_t)0x3167, (q15_t)0x3e50, (q15_t)0x3174, (q15_t)0x3e53, (q15_t)0x3180, (q15_t)0x3e56, (q15_t)0x318c, (q15_t)0x3e59, - (q15_t)0x3198, (q15_t)0x3e5c, (q15_t)0x31a4, (q15_t)0x3e5e, (q15_t)0x31b1, (q15_t)0x3e61, (q15_t)0x31bd, (q15_t)0x3e64, - (q15_t)0x31c9, (q15_t)0x3e67, (q15_t)0x31d5, (q15_t)0x3e6a, (q15_t)0x31e2, (q15_t)0x3e6c, (q15_t)0x31ee, (q15_t)0x3e6f, - (q15_t)0x31fa, (q15_t)0x3e72, (q15_t)0x3207, (q15_t)0x3e75, (q15_t)0x3213, (q15_t)0x3e77, (q15_t)0x321f, (q15_t)0x3e7a, - (q15_t)0x322b, (q15_t)0x3e7d, (q15_t)0x3238, (q15_t)0x3e80, (q15_t)0x3244, (q15_t)0x3e82, (q15_t)0x3250, (q15_t)0x3e85, - (q15_t)0x325c, (q15_t)0x3e88, (q15_t)0x3269, (q15_t)0x3e8a, (q15_t)0x3275, (q15_t)0x3e8d, (q15_t)0x3281, (q15_t)0x3e90, - (q15_t)0x328e, (q15_t)0x3e92, (q15_t)0x329a, (q15_t)0x3e95, (q15_t)0x32a6, (q15_t)0x3e98, (q15_t)0x32b2, (q15_t)0x3e9a, - (q15_t)0x32bf, (q15_t)0x3e9d, (q15_t)0x32cb, (q15_t)0x3e9f, (q15_t)0x32d7, (q15_t)0x3ea2, (q15_t)0x32e4, (q15_t)0x3ea5, - (q15_t)0x32f0, (q15_t)0x3ea7, (q15_t)0x32fc, (q15_t)0x3eaa, (q15_t)0x3308, (q15_t)0x3eac, (q15_t)0x3315, (q15_t)0x3eaf, - (q15_t)0x3321, (q15_t)0x3eb1, (q15_t)0x332d, (q15_t)0x3eb4, (q15_t)0x333a, (q15_t)0x3eb6, (q15_t)0x3346, (q15_t)0x3eb9, - (q15_t)0x3352, (q15_t)0x3ebb, (q15_t)0x335f, (q15_t)0x3ebe, (q15_t)0x336b, (q15_t)0x3ec0, (q15_t)0x3377, (q15_t)0x3ec3, - (q15_t)0x3384, (q15_t)0x3ec5, (q15_t)0x3390, (q15_t)0x3ec8, (q15_t)0x339c, (q15_t)0x3eca, (q15_t)0x33a9, (q15_t)0x3ecc, - (q15_t)0x33b5, (q15_t)0x3ecf, (q15_t)0x33c1, (q15_t)0x3ed1, (q15_t)0x33ce, (q15_t)0x3ed4, (q15_t)0x33da, (q15_t)0x3ed6, - (q15_t)0x33e6, (q15_t)0x3ed8, (q15_t)0x33f3, (q15_t)0x3edb, (q15_t)0x33ff, (q15_t)0x3edd, (q15_t)0x340b, (q15_t)0x3ee0, - (q15_t)0x3418, (q15_t)0x3ee2, (q15_t)0x3424, (q15_t)0x3ee4, (q15_t)0x3430, (q15_t)0x3ee7, (q15_t)0x343d, (q15_t)0x3ee9, - (q15_t)0x3449, (q15_t)0x3eeb, (q15_t)0x3455, (q15_t)0x3eed, (q15_t)0x3462, (q15_t)0x3ef0, (q15_t)0x346e, (q15_t)0x3ef2, - (q15_t)0x347b, (q15_t)0x3ef4, (q15_t)0x3487, (q15_t)0x3ef7, (q15_t)0x3493, (q15_t)0x3ef9, (q15_t)0x34a0, (q15_t)0x3efb, - (q15_t)0x34ac, (q15_t)0x3efd, (q15_t)0x34b8, (q15_t)0x3f00, (q15_t)0x34c5, (q15_t)0x3f02, (q15_t)0x34d1, (q15_t)0x3f04, - (q15_t)0x34dd, (q15_t)0x3f06, (q15_t)0x34ea, (q15_t)0x3f08, (q15_t)0x34f6, (q15_t)0x3f0a, (q15_t)0x3503, (q15_t)0x3f0d, - (q15_t)0x350f, (q15_t)0x3f0f, (q15_t)0x351b, (q15_t)0x3f11, (q15_t)0x3528, (q15_t)0x3f13, (q15_t)0x3534, (q15_t)0x3f15, - (q15_t)0x3540, (q15_t)0x3f17, (q15_t)0x354d, (q15_t)0x3f19, (q15_t)0x3559, (q15_t)0x3f1c, (q15_t)0x3566, (q15_t)0x3f1e, - (q15_t)0x3572, (q15_t)0x3f20, (q15_t)0x357e, (q15_t)0x3f22, (q15_t)0x358b, (q15_t)0x3f24, (q15_t)0x3597, (q15_t)0x3f26, - (q15_t)0x35a4, (q15_t)0x3f28, (q15_t)0x35b0, (q15_t)0x3f2a, (q15_t)0x35bc, (q15_t)0x3f2c, (q15_t)0x35c9, (q15_t)0x3f2e, - (q15_t)0x35d5, (q15_t)0x3f30, (q15_t)0x35e2, (q15_t)0x3f32, (q15_t)0x35ee, (q15_t)0x3f34, (q15_t)0x35fa, (q15_t)0x3f36, - (q15_t)0x3607, (q15_t)0x3f38, (q15_t)0x3613, (q15_t)0x3f3a, (q15_t)0x3620, (q15_t)0x3f3c, (q15_t)0x362c, (q15_t)0x3f3e, - (q15_t)0x3639, (q15_t)0x3f40, (q15_t)0x3645, (q15_t)0x3f42, (q15_t)0x3651, (q15_t)0x3f43, (q15_t)0x365e, (q15_t)0x3f45, - (q15_t)0x366a, (q15_t)0x3f47, (q15_t)0x3677, (q15_t)0x3f49, (q15_t)0x3683, (q15_t)0x3f4b, (q15_t)0x3690, (q15_t)0x3f4d, - (q15_t)0x369c, (q15_t)0x3f4f, (q15_t)0x36a8, (q15_t)0x3f51, (q15_t)0x36b5, (q15_t)0x3f52, (q15_t)0x36c1, (q15_t)0x3f54, - (q15_t)0x36ce, (q15_t)0x3f56, (q15_t)0x36da, (q15_t)0x3f58, (q15_t)0x36e7, (q15_t)0x3f5a, (q15_t)0x36f3, (q15_t)0x3f5b, - (q15_t)0x36ff, (q15_t)0x3f5d, (q15_t)0x370c, (q15_t)0x3f5f, (q15_t)0x3718, (q15_t)0x3f61, (q15_t)0x3725, (q15_t)0x3f62, - (q15_t)0x3731, (q15_t)0x3f64, (q15_t)0x373e, (q15_t)0x3f66, (q15_t)0x374a, (q15_t)0x3f68, (q15_t)0x3757, (q15_t)0x3f69, - (q15_t)0x3763, (q15_t)0x3f6b, (q15_t)0x376f, (q15_t)0x3f6d, (q15_t)0x377c, (q15_t)0x3f6e, (q15_t)0x3788, (q15_t)0x3f70, - (q15_t)0x3795, (q15_t)0x3f72, (q15_t)0x37a1, (q15_t)0x3f73, (q15_t)0x37ae, (q15_t)0x3f75, (q15_t)0x37ba, (q15_t)0x3f77, - (q15_t)0x37c7, (q15_t)0x3f78, (q15_t)0x37d3, (q15_t)0x3f7a, (q15_t)0x37e0, (q15_t)0x3f7b, (q15_t)0x37ec, (q15_t)0x3f7d, - (q15_t)0x37f9, (q15_t)0x3f7f, (q15_t)0x3805, (q15_t)0x3f80, (q15_t)0x3811, (q15_t)0x3f82, (q15_t)0x381e, (q15_t)0x3f83, - (q15_t)0x382a, (q15_t)0x3f85, (q15_t)0x3837, (q15_t)0x3f86, (q15_t)0x3843, (q15_t)0x3f88, (q15_t)0x3850, (q15_t)0x3f89, - (q15_t)0x385c, (q15_t)0x3f8b, (q15_t)0x3869, (q15_t)0x3f8c, (q15_t)0x3875, (q15_t)0x3f8e, (q15_t)0x3882, (q15_t)0x3f8f, - (q15_t)0x388e, (q15_t)0x3f91, (q15_t)0x389b, (q15_t)0x3f92, (q15_t)0x38a7, (q15_t)0x3f94, (q15_t)0x38b4, (q15_t)0x3f95, - (q15_t)0x38c0, (q15_t)0x3f97, (q15_t)0x38cd, (q15_t)0x3f98, (q15_t)0x38d9, (q15_t)0x3f99, (q15_t)0x38e6, (q15_t)0x3f9b, - (q15_t)0x38f2, (q15_t)0x3f9c, (q15_t)0x38ff, (q15_t)0x3f9e, (q15_t)0x390b, (q15_t)0x3f9f, (q15_t)0x3918, (q15_t)0x3fa0, - (q15_t)0x3924, (q15_t)0x3fa2, (q15_t)0x3931, (q15_t)0x3fa3, (q15_t)0x393d, (q15_t)0x3fa4, (q15_t)0x394a, (q15_t)0x3fa6, - (q15_t)0x3956, (q15_t)0x3fa7, (q15_t)0x3963, (q15_t)0x3fa8, (q15_t)0x396f, (q15_t)0x3faa, (q15_t)0x397c, (q15_t)0x3fab, - (q15_t)0x3988, (q15_t)0x3fac, (q15_t)0x3995, (q15_t)0x3fad, (q15_t)0x39a1, (q15_t)0x3faf, (q15_t)0x39ae, (q15_t)0x3fb0, - (q15_t)0x39ba, (q15_t)0x3fb1, (q15_t)0x39c7, (q15_t)0x3fb2, (q15_t)0x39d3, (q15_t)0x3fb4, (q15_t)0x39e0, (q15_t)0x3fb5, - (q15_t)0x39ec, (q15_t)0x3fb6, (q15_t)0x39f9, (q15_t)0x3fb7, (q15_t)0x3a05, (q15_t)0x3fb8, (q15_t)0x3a12, (q15_t)0x3fb9, - (q15_t)0x3a1e, (q15_t)0x3fbb, (q15_t)0x3a2b, (q15_t)0x3fbc, (q15_t)0x3a37, (q15_t)0x3fbd, (q15_t)0x3a44, (q15_t)0x3fbe, - (q15_t)0x3a50, (q15_t)0x3fbf, (q15_t)0x3a5d, (q15_t)0x3fc0, (q15_t)0x3a69, (q15_t)0x3fc1, (q15_t)0x3a76, (q15_t)0x3fc3, - (q15_t)0x3a82, (q15_t)0x3fc4, (q15_t)0x3a8f, (q15_t)0x3fc5, (q15_t)0x3a9b, (q15_t)0x3fc6, (q15_t)0x3aa8, (q15_t)0x3fc7, - (q15_t)0x3ab4, (q15_t)0x3fc8, (q15_t)0x3ac1, (q15_t)0x3fc9, (q15_t)0x3acd, (q15_t)0x3fca, (q15_t)0x3ada, (q15_t)0x3fcb, - (q15_t)0x3ae6, (q15_t)0x3fcc, (q15_t)0x3af3, (q15_t)0x3fcd, (q15_t)0x3b00, (q15_t)0x3fce, (q15_t)0x3b0c, (q15_t)0x3fcf, - (q15_t)0x3b19, (q15_t)0x3fd0, (q15_t)0x3b25, (q15_t)0x3fd1, (q15_t)0x3b32, (q15_t)0x3fd2, (q15_t)0x3b3e, (q15_t)0x3fd3, - (q15_t)0x3b4b, (q15_t)0x3fd4, (q15_t)0x3b57, (q15_t)0x3fd5, (q15_t)0x3b64, (q15_t)0x3fd5, (q15_t)0x3b70, (q15_t)0x3fd6, - (q15_t)0x3b7d, (q15_t)0x3fd7, (q15_t)0x3b89, (q15_t)0x3fd8, (q15_t)0x3b96, (q15_t)0x3fd9, (q15_t)0x3ba2, (q15_t)0x3fda, - (q15_t)0x3baf, (q15_t)0x3fdb, (q15_t)0x3bbc, (q15_t)0x3fdc, (q15_t)0x3bc8, (q15_t)0x3fdc, (q15_t)0x3bd5, (q15_t)0x3fdd, - (q15_t)0x3be1, (q15_t)0x3fde, (q15_t)0x3bee, (q15_t)0x3fdf, (q15_t)0x3bfa, (q15_t)0x3fe0, (q15_t)0x3c07, (q15_t)0x3fe0, - (q15_t)0x3c13, (q15_t)0x3fe1, (q15_t)0x3c20, (q15_t)0x3fe2, (q15_t)0x3c2c, (q15_t)0x3fe3, (q15_t)0x3c39, (q15_t)0x3fe3, - (q15_t)0x3c45, (q15_t)0x3fe4, (q15_t)0x3c52, (q15_t)0x3fe5, (q15_t)0x3c5f, (q15_t)0x3fe6, (q15_t)0x3c6b, (q15_t)0x3fe6, - (q15_t)0x3c78, (q15_t)0x3fe7, (q15_t)0x3c84, (q15_t)0x3fe8, (q15_t)0x3c91, (q15_t)0x3fe8, (q15_t)0x3c9d, (q15_t)0x3fe9, - (q15_t)0x3caa, (q15_t)0x3fea, (q15_t)0x3cb6, (q15_t)0x3fea, (q15_t)0x3cc3, (q15_t)0x3feb, (q15_t)0x3cd0, (q15_t)0x3fec, - (q15_t)0x3cdc, (q15_t)0x3fec, (q15_t)0x3ce9, (q15_t)0x3fed, (q15_t)0x3cf5, (q15_t)0x3fed, (q15_t)0x3d02, (q15_t)0x3fee, - (q15_t)0x3d0e, (q15_t)0x3fef, (q15_t)0x3d1b, (q15_t)0x3fef, (q15_t)0x3d27, (q15_t)0x3ff0, (q15_t)0x3d34, (q15_t)0x3ff0, - (q15_t)0x3d40, (q15_t)0x3ff1, (q15_t)0x3d4d, (q15_t)0x3ff1, (q15_t)0x3d5a, (q15_t)0x3ff2, (q15_t)0x3d66, (q15_t)0x3ff2, - (q15_t)0x3d73, (q15_t)0x3ff3, (q15_t)0x3d7f, (q15_t)0x3ff3, (q15_t)0x3d8c, (q15_t)0x3ff4, (q15_t)0x3d98, (q15_t)0x3ff4, - (q15_t)0x3da5, (q15_t)0x3ff5, (q15_t)0x3db2, (q15_t)0x3ff5, (q15_t)0x3dbe, (q15_t)0x3ff6, (q15_t)0x3dcb, (q15_t)0x3ff6, - (q15_t)0x3dd7, (q15_t)0x3ff7, (q15_t)0x3de4, (q15_t)0x3ff7, (q15_t)0x3df0, (q15_t)0x3ff7, (q15_t)0x3dfd, (q15_t)0x3ff8, - (q15_t)0x3e09, (q15_t)0x3ff8, (q15_t)0x3e16, (q15_t)0x3ff9, (q15_t)0x3e23, (q15_t)0x3ff9, (q15_t)0x3e2f, (q15_t)0x3ff9, - (q15_t)0x3e3c, (q15_t)0x3ffa, (q15_t)0x3e48, (q15_t)0x3ffa, (q15_t)0x3e55, (q15_t)0x3ffa, (q15_t)0x3e61, (q15_t)0x3ffb, - (q15_t)0x3e6e, (q15_t)0x3ffb, (q15_t)0x3e7a, (q15_t)0x3ffb, (q15_t)0x3e87, (q15_t)0x3ffc, (q15_t)0x3e94, (q15_t)0x3ffc, - (q15_t)0x3ea0, (q15_t)0x3ffc, (q15_t)0x3ead, (q15_t)0x3ffc, (q15_t)0x3eb9, (q15_t)0x3ffd, (q15_t)0x3ec6, (q15_t)0x3ffd, - (q15_t)0x3ed2, (q15_t)0x3ffd, (q15_t)0x3edf, (q15_t)0x3ffd, (q15_t)0x3eec, (q15_t)0x3ffe, (q15_t)0x3ef8, (q15_t)0x3ffe, - (q15_t)0x3f05, (q15_t)0x3ffe, (q15_t)0x3f11, (q15_t)0x3ffe, (q15_t)0x3f1e, (q15_t)0x3ffe, (q15_t)0x3f2a, (q15_t)0x3fff, - (q15_t)0x3f37, (q15_t)0x3fff, (q15_t)0x3f44, (q15_t)0x3fff, (q15_t)0x3f50, (q15_t)0x3fff, (q15_t)0x3f5d, (q15_t)0x3fff, - (q15_t)0x3f69, (q15_t)0x3fff, (q15_t)0x3f76, (q15_t)0x3fff, (q15_t)0x3f82, (q15_t)0x4000, (q15_t)0x3f8f, (q15_t)0x4000, - (q15_t)0x3f9b, (q15_t)0x4000, (q15_t)0x3fa8, (q15_t)0x4000, (q15_t)0x3fb5, (q15_t)0x4000, (q15_t)0x3fc1, (q15_t)0x4000, - (q15_t)0x3fce, (q15_t)0x4000, (q15_t)0x3fda, (q15_t)0x4000, (q15_t)0x3fe7, (q15_t)0x4000, (q15_t)0x3ff3, (q15_t)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)) -*/ -const q15_t __ALIGNED(4) realCoefBQ15[8192] = { - (q15_t)0x4000, (q15_t)0x4000, (q15_t)0x400d, (q15_t)0x4000, (q15_t)0x4019, (q15_t)0x4000, (q15_t)0x4026, (q15_t)0x4000, - (q15_t)0x4032, (q15_t)0x4000, (q15_t)0x403f, (q15_t)0x4000, (q15_t)0x404b, (q15_t)0x4000, (q15_t)0x4058, (q15_t)0x4000, - (q15_t)0x4065, (q15_t)0x4000, (q15_t)0x4071, (q15_t)0x4000, (q15_t)0x407e, (q15_t)0x4000, (q15_t)0x408a, (q15_t)0x3fff, - (q15_t)0x4097, (q15_t)0x3fff, (q15_t)0x40a3, (q15_t)0x3fff, (q15_t)0x40b0, (q15_t)0x3fff, (q15_t)0x40bc, (q15_t)0x3fff, - (q15_t)0x40c9, (q15_t)0x3fff, (q15_t)0x40d6, (q15_t)0x3fff, (q15_t)0x40e2, (q15_t)0x3ffe, (q15_t)0x40ef, (q15_t)0x3ffe, - (q15_t)0x40fb, (q15_t)0x3ffe, (q15_t)0x4108, (q15_t)0x3ffe, (q15_t)0x4114, (q15_t)0x3ffe, (q15_t)0x4121, (q15_t)0x3ffd, - (q15_t)0x412e, (q15_t)0x3ffd, (q15_t)0x413a, (q15_t)0x3ffd, (q15_t)0x4147, (q15_t)0x3ffd, (q15_t)0x4153, (q15_t)0x3ffc, - (q15_t)0x4160, (q15_t)0x3ffc, (q15_t)0x416c, (q15_t)0x3ffc, (q15_t)0x4179, (q15_t)0x3ffc, (q15_t)0x4186, (q15_t)0x3ffb, - (q15_t)0x4192, (q15_t)0x3ffb, (q15_t)0x419f, (q15_t)0x3ffb, (q15_t)0x41ab, (q15_t)0x3ffa, (q15_t)0x41b8, (q15_t)0x3ffa, - (q15_t)0x41c4, (q15_t)0x3ffa, (q15_t)0x41d1, (q15_t)0x3ff9, (q15_t)0x41dd, (q15_t)0x3ff9, (q15_t)0x41ea, (q15_t)0x3ff9, - (q15_t)0x41f7, (q15_t)0x3ff8, (q15_t)0x4203, (q15_t)0x3ff8, (q15_t)0x4210, (q15_t)0x3ff7, (q15_t)0x421c, (q15_t)0x3ff7, - (q15_t)0x4229, (q15_t)0x3ff7, (q15_t)0x4235, (q15_t)0x3ff6, (q15_t)0x4242, (q15_t)0x3ff6, (q15_t)0x424e, (q15_t)0x3ff5, - (q15_t)0x425b, (q15_t)0x3ff5, (q15_t)0x4268, (q15_t)0x3ff4, (q15_t)0x4274, (q15_t)0x3ff4, (q15_t)0x4281, (q15_t)0x3ff3, - (q15_t)0x428d, (q15_t)0x3ff3, (q15_t)0x429a, (q15_t)0x3ff2, (q15_t)0x42a6, (q15_t)0x3ff2, (q15_t)0x42b3, (q15_t)0x3ff1, - (q15_t)0x42c0, (q15_t)0x3ff1, (q15_t)0x42cc, (q15_t)0x3ff0, (q15_t)0x42d9, (q15_t)0x3ff0, (q15_t)0x42e5, (q15_t)0x3fef, - (q15_t)0x42f2, (q15_t)0x3fef, (q15_t)0x42fe, (q15_t)0x3fee, (q15_t)0x430b, (q15_t)0x3fed, (q15_t)0x4317, (q15_t)0x3fed, - (q15_t)0x4324, (q15_t)0x3fec, (q15_t)0x4330, (q15_t)0x3fec, (q15_t)0x433d, (q15_t)0x3feb, (q15_t)0x434a, (q15_t)0x3fea, - (q15_t)0x4356, (q15_t)0x3fea, (q15_t)0x4363, (q15_t)0x3fe9, (q15_t)0x436f, (q15_t)0x3fe8, (q15_t)0x437c, (q15_t)0x3fe8, - (q15_t)0x4388, (q15_t)0x3fe7, (q15_t)0x4395, (q15_t)0x3fe6, (q15_t)0x43a1, (q15_t)0x3fe6, (q15_t)0x43ae, (q15_t)0x3fe5, - (q15_t)0x43bb, (q15_t)0x3fe4, (q15_t)0x43c7, (q15_t)0x3fe3, (q15_t)0x43d4, (q15_t)0x3fe3, (q15_t)0x43e0, (q15_t)0x3fe2, - (q15_t)0x43ed, (q15_t)0x3fe1, (q15_t)0x43f9, (q15_t)0x3fe0, (q15_t)0x4406, (q15_t)0x3fe0, (q15_t)0x4412, (q15_t)0x3fdf, - (q15_t)0x441f, (q15_t)0x3fde, (q15_t)0x442b, (q15_t)0x3fdd, (q15_t)0x4438, (q15_t)0x3fdc, (q15_t)0x4444, (q15_t)0x3fdc, - (q15_t)0x4451, (q15_t)0x3fdb, (q15_t)0x445e, (q15_t)0x3fda, (q15_t)0x446a, (q15_t)0x3fd9, (q15_t)0x4477, (q15_t)0x3fd8, - (q15_t)0x4483, (q15_t)0x3fd7, (q15_t)0x4490, (q15_t)0x3fd6, (q15_t)0x449c, (q15_t)0x3fd5, (q15_t)0x44a9, (q15_t)0x3fd5, - (q15_t)0x44b5, (q15_t)0x3fd4, (q15_t)0x44c2, (q15_t)0x3fd3, (q15_t)0x44ce, (q15_t)0x3fd2, (q15_t)0x44db, (q15_t)0x3fd1, - (q15_t)0x44e7, (q15_t)0x3fd0, (q15_t)0x44f4, (q15_t)0x3fcf, (q15_t)0x4500, (q15_t)0x3fce, (q15_t)0x450d, (q15_t)0x3fcd, - (q15_t)0x451a, (q15_t)0x3fcc, (q15_t)0x4526, (q15_t)0x3fcb, (q15_t)0x4533, (q15_t)0x3fca, (q15_t)0x453f, (q15_t)0x3fc9, - (q15_t)0x454c, (q15_t)0x3fc8, (q15_t)0x4558, (q15_t)0x3fc7, (q15_t)0x4565, (q15_t)0x3fc6, (q15_t)0x4571, (q15_t)0x3fc5, - (q15_t)0x457e, (q15_t)0x3fc4, (q15_t)0x458a, (q15_t)0x3fc3, (q15_t)0x4597, (q15_t)0x3fc1, (q15_t)0x45a3, (q15_t)0x3fc0, - (q15_t)0x45b0, (q15_t)0x3fbf, (q15_t)0x45bc, (q15_t)0x3fbe, (q15_t)0x45c9, (q15_t)0x3fbd, (q15_t)0x45d5, (q15_t)0x3fbc, - (q15_t)0x45e2, (q15_t)0x3fbb, (q15_t)0x45ee, (q15_t)0x3fb9, (q15_t)0x45fb, (q15_t)0x3fb8, (q15_t)0x4607, (q15_t)0x3fb7, - (q15_t)0x4614, (q15_t)0x3fb6, (q15_t)0x4620, (q15_t)0x3fb5, (q15_t)0x462d, (q15_t)0x3fb4, (q15_t)0x4639, (q15_t)0x3fb2, - (q15_t)0x4646, (q15_t)0x3fb1, (q15_t)0x4652, (q15_t)0x3fb0, (q15_t)0x465f, (q15_t)0x3faf, (q15_t)0x466b, (q15_t)0x3fad, - (q15_t)0x4678, (q15_t)0x3fac, (q15_t)0x4684, (q15_t)0x3fab, (q15_t)0x4691, (q15_t)0x3faa, (q15_t)0x469d, (q15_t)0x3fa8, - (q15_t)0x46aa, (q15_t)0x3fa7, (q15_t)0x46b6, (q15_t)0x3fa6, (q15_t)0x46c3, (q15_t)0x3fa4, (q15_t)0x46cf, (q15_t)0x3fa3, - (q15_t)0x46dc, (q15_t)0x3fa2, (q15_t)0x46e8, (q15_t)0x3fa0, (q15_t)0x46f5, (q15_t)0x3f9f, (q15_t)0x4701, (q15_t)0x3f9e, - (q15_t)0x470e, (q15_t)0x3f9c, (q15_t)0x471a, (q15_t)0x3f9b, (q15_t)0x4727, (q15_t)0x3f99, (q15_t)0x4733, (q15_t)0x3f98, - (q15_t)0x4740, (q15_t)0x3f97, (q15_t)0x474c, (q15_t)0x3f95, (q15_t)0x4759, (q15_t)0x3f94, (q15_t)0x4765, (q15_t)0x3f92, - (q15_t)0x4772, (q15_t)0x3f91, (q15_t)0x477e, (q15_t)0x3f8f, (q15_t)0x478b, (q15_t)0x3f8e, (q15_t)0x4797, (q15_t)0x3f8c, - (q15_t)0x47a4, (q15_t)0x3f8b, (q15_t)0x47b0, (q15_t)0x3f89, (q15_t)0x47bd, (q15_t)0x3f88, (q15_t)0x47c9, (q15_t)0x3f86, - (q15_t)0x47d6, (q15_t)0x3f85, (q15_t)0x47e2, (q15_t)0x3f83, (q15_t)0x47ef, (q15_t)0x3f82, (q15_t)0x47fb, (q15_t)0x3f80, - (q15_t)0x4807, (q15_t)0x3f7f, (q15_t)0x4814, (q15_t)0x3f7d, (q15_t)0x4820, (q15_t)0x3f7b, (q15_t)0x482d, (q15_t)0x3f7a, - (q15_t)0x4839, (q15_t)0x3f78, (q15_t)0x4846, (q15_t)0x3f77, (q15_t)0x4852, (q15_t)0x3f75, (q15_t)0x485f, (q15_t)0x3f73, - (q15_t)0x486b, (q15_t)0x3f72, (q15_t)0x4878, (q15_t)0x3f70, (q15_t)0x4884, (q15_t)0x3f6e, (q15_t)0x4891, (q15_t)0x3f6d, - (q15_t)0x489d, (q15_t)0x3f6b, (q15_t)0x48a9, (q15_t)0x3f69, (q15_t)0x48b6, (q15_t)0x3f68, (q15_t)0x48c2, (q15_t)0x3f66, - (q15_t)0x48cf, (q15_t)0x3f64, (q15_t)0x48db, (q15_t)0x3f62, (q15_t)0x48e8, (q15_t)0x3f61, (q15_t)0x48f4, (q15_t)0x3f5f, - (q15_t)0x4901, (q15_t)0x3f5d, (q15_t)0x490d, (q15_t)0x3f5b, (q15_t)0x4919, (q15_t)0x3f5a, (q15_t)0x4926, (q15_t)0x3f58, - (q15_t)0x4932, (q15_t)0x3f56, (q15_t)0x493f, (q15_t)0x3f54, (q15_t)0x494b, (q15_t)0x3f52, (q15_t)0x4958, (q15_t)0x3f51, - (q15_t)0x4964, (q15_t)0x3f4f, (q15_t)0x4970, (q15_t)0x3f4d, (q15_t)0x497d, (q15_t)0x3f4b, (q15_t)0x4989, (q15_t)0x3f49, - (q15_t)0x4996, (q15_t)0x3f47, (q15_t)0x49a2, (q15_t)0x3f45, (q15_t)0x49af, (q15_t)0x3f43, (q15_t)0x49bb, (q15_t)0x3f42, - (q15_t)0x49c7, (q15_t)0x3f40, (q15_t)0x49d4, (q15_t)0x3f3e, (q15_t)0x49e0, (q15_t)0x3f3c, (q15_t)0x49ed, (q15_t)0x3f3a, - (q15_t)0x49f9, (q15_t)0x3f38, (q15_t)0x4a06, (q15_t)0x3f36, (q15_t)0x4a12, (q15_t)0x3f34, (q15_t)0x4a1e, (q15_t)0x3f32, - (q15_t)0x4a2b, (q15_t)0x3f30, (q15_t)0x4a37, (q15_t)0x3f2e, (q15_t)0x4a44, (q15_t)0x3f2c, (q15_t)0x4a50, (q15_t)0x3f2a, - (q15_t)0x4a5c, (q15_t)0x3f28, (q15_t)0x4a69, (q15_t)0x3f26, (q15_t)0x4a75, (q15_t)0x3f24, (q15_t)0x4a82, (q15_t)0x3f22, - (q15_t)0x4a8e, (q15_t)0x3f20, (q15_t)0x4a9a, (q15_t)0x3f1e, (q15_t)0x4aa7, (q15_t)0x3f1c, (q15_t)0x4ab3, (q15_t)0x3f19, - (q15_t)0x4ac0, (q15_t)0x3f17, (q15_t)0x4acc, (q15_t)0x3f15, (q15_t)0x4ad8, (q15_t)0x3f13, (q15_t)0x4ae5, (q15_t)0x3f11, - (q15_t)0x4af1, (q15_t)0x3f0f, (q15_t)0x4afd, (q15_t)0x3f0d, (q15_t)0x4b0a, (q15_t)0x3f0a, (q15_t)0x4b16, (q15_t)0x3f08, - (q15_t)0x4b23, (q15_t)0x3f06, (q15_t)0x4b2f, (q15_t)0x3f04, (q15_t)0x4b3b, (q15_t)0x3f02, (q15_t)0x4b48, (q15_t)0x3f00, - (q15_t)0x4b54, (q15_t)0x3efd, (q15_t)0x4b60, (q15_t)0x3efb, (q15_t)0x4b6d, (q15_t)0x3ef9, (q15_t)0x4b79, (q15_t)0x3ef7, - (q15_t)0x4b85, (q15_t)0x3ef4, (q15_t)0x4b92, (q15_t)0x3ef2, (q15_t)0x4b9e, (q15_t)0x3ef0, (q15_t)0x4bab, (q15_t)0x3eed, - (q15_t)0x4bb7, (q15_t)0x3eeb, (q15_t)0x4bc3, (q15_t)0x3ee9, (q15_t)0x4bd0, (q15_t)0x3ee7, (q15_t)0x4bdc, (q15_t)0x3ee4, - (q15_t)0x4be8, (q15_t)0x3ee2, (q15_t)0x4bf5, (q15_t)0x3ee0, (q15_t)0x4c01, (q15_t)0x3edd, (q15_t)0x4c0d, (q15_t)0x3edb, - (q15_t)0x4c1a, (q15_t)0x3ed8, (q15_t)0x4c26, (q15_t)0x3ed6, (q15_t)0x4c32, (q15_t)0x3ed4, (q15_t)0x4c3f, (q15_t)0x3ed1, - (q15_t)0x4c4b, (q15_t)0x3ecf, (q15_t)0x4c57, (q15_t)0x3ecc, (q15_t)0x4c64, (q15_t)0x3eca, (q15_t)0x4c70, (q15_t)0x3ec8, - (q15_t)0x4c7c, (q15_t)0x3ec5, (q15_t)0x4c89, (q15_t)0x3ec3, (q15_t)0x4c95, (q15_t)0x3ec0, (q15_t)0x4ca1, (q15_t)0x3ebe, - (q15_t)0x4cae, (q15_t)0x3ebb, (q15_t)0x4cba, (q15_t)0x3eb9, (q15_t)0x4cc6, (q15_t)0x3eb6, (q15_t)0x4cd3, (q15_t)0x3eb4, - (q15_t)0x4cdf, (q15_t)0x3eb1, (q15_t)0x4ceb, (q15_t)0x3eaf, (q15_t)0x4cf8, (q15_t)0x3eac, (q15_t)0x4d04, (q15_t)0x3eaa, - (q15_t)0x4d10, (q15_t)0x3ea7, (q15_t)0x4d1c, (q15_t)0x3ea5, (q15_t)0x4d29, (q15_t)0x3ea2, (q15_t)0x4d35, (q15_t)0x3e9f, - (q15_t)0x4d41, (q15_t)0x3e9d, (q15_t)0x4d4e, (q15_t)0x3e9a, (q15_t)0x4d5a, (q15_t)0x3e98, (q15_t)0x4d66, (q15_t)0x3e95, - (q15_t)0x4d72, (q15_t)0x3e92, (q15_t)0x4d7f, (q15_t)0x3e90, (q15_t)0x4d8b, (q15_t)0x3e8d, (q15_t)0x4d97, (q15_t)0x3e8a, - (q15_t)0x4da4, (q15_t)0x3e88, (q15_t)0x4db0, (q15_t)0x3e85, (q15_t)0x4dbc, (q15_t)0x3e82, (q15_t)0x4dc8, (q15_t)0x3e80, - (q15_t)0x4dd5, (q15_t)0x3e7d, (q15_t)0x4de1, (q15_t)0x3e7a, (q15_t)0x4ded, (q15_t)0x3e77, (q15_t)0x4df9, (q15_t)0x3e75, - (q15_t)0x4e06, (q15_t)0x3e72, (q15_t)0x4e12, (q15_t)0x3e6f, (q15_t)0x4e1e, (q15_t)0x3e6c, (q15_t)0x4e2b, (q15_t)0x3e6a, - (q15_t)0x4e37, (q15_t)0x3e67, (q15_t)0x4e43, (q15_t)0x3e64, (q15_t)0x4e4f, (q15_t)0x3e61, (q15_t)0x4e5c, (q15_t)0x3e5e, - (q15_t)0x4e68, (q15_t)0x3e5c, (q15_t)0x4e74, (q15_t)0x3e59, (q15_t)0x4e80, (q15_t)0x3e56, (q15_t)0x4e8c, (q15_t)0x3e53, - (q15_t)0x4e99, (q15_t)0x3e50, (q15_t)0x4ea5, (q15_t)0x3e4d, (q15_t)0x4eb1, (q15_t)0x3e4a, (q15_t)0x4ebd, (q15_t)0x3e48, - (q15_t)0x4eca, (q15_t)0x3e45, (q15_t)0x4ed6, (q15_t)0x3e42, (q15_t)0x4ee2, (q15_t)0x3e3f, (q15_t)0x4eee, (q15_t)0x3e3c, - (q15_t)0x4efb, (q15_t)0x3e39, (q15_t)0x4f07, (q15_t)0x3e36, (q15_t)0x4f13, (q15_t)0x3e33, (q15_t)0x4f1f, (q15_t)0x3e30, - (q15_t)0x4f2b, (q15_t)0x3e2d, (q15_t)0x4f38, (q15_t)0x3e2a, (q15_t)0x4f44, (q15_t)0x3e27, (q15_t)0x4f50, (q15_t)0x3e24, - (q15_t)0x4f5c, (q15_t)0x3e21, (q15_t)0x4f68, (q15_t)0x3e1e, (q15_t)0x4f75, (q15_t)0x3e1b, (q15_t)0x4f81, (q15_t)0x3e18, - (q15_t)0x4f8d, (q15_t)0x3e15, (q15_t)0x4f99, (q15_t)0x3e12, (q15_t)0x4fa5, (q15_t)0x3e0f, (q15_t)0x4fb2, (q15_t)0x3e0c, - (q15_t)0x4fbe, (q15_t)0x3e09, (q15_t)0x4fca, (q15_t)0x3e06, (q15_t)0x4fd6, (q15_t)0x3e03, (q15_t)0x4fe2, (q15_t)0x3dff, - (q15_t)0x4fee, (q15_t)0x3dfc, (q15_t)0x4ffb, (q15_t)0x3df9, (q15_t)0x5007, (q15_t)0x3df6, (q15_t)0x5013, (q15_t)0x3df3, - (q15_t)0x501f, (q15_t)0x3df0, (q15_t)0x502b, (q15_t)0x3ded, (q15_t)0x5037, (q15_t)0x3de9, (q15_t)0x5044, (q15_t)0x3de6, - (q15_t)0x5050, (q15_t)0x3de3, (q15_t)0x505c, (q15_t)0x3de0, (q15_t)0x5068, (q15_t)0x3ddd, (q15_t)0x5074, (q15_t)0x3dd9, - (q15_t)0x5080, (q15_t)0x3dd6, (q15_t)0x508c, (q15_t)0x3dd3, (q15_t)0x5099, (q15_t)0x3dd0, (q15_t)0x50a5, (q15_t)0x3dcc, - (q15_t)0x50b1, (q15_t)0x3dc9, (q15_t)0x50bd, (q15_t)0x3dc6, (q15_t)0x50c9, (q15_t)0x3dc2, (q15_t)0x50d5, (q15_t)0x3dbf, - (q15_t)0x50e1, (q15_t)0x3dbc, (q15_t)0x50ed, (q15_t)0x3db9, (q15_t)0x50fa, (q15_t)0x3db5, (q15_t)0x5106, (q15_t)0x3db2, - (q15_t)0x5112, (q15_t)0x3daf, (q15_t)0x511e, (q15_t)0x3dab, (q15_t)0x512a, (q15_t)0x3da8, (q15_t)0x5136, (q15_t)0x3da4, - (q15_t)0x5142, (q15_t)0x3da1, (q15_t)0x514e, (q15_t)0x3d9e, (q15_t)0x515a, (q15_t)0x3d9a, (q15_t)0x5167, (q15_t)0x3d97, - (q15_t)0x5173, (q15_t)0x3d93, (q15_t)0x517f, (q15_t)0x3d90, (q15_t)0x518b, (q15_t)0x3d8d, (q15_t)0x5197, (q15_t)0x3d89, - (q15_t)0x51a3, (q15_t)0x3d86, (q15_t)0x51af, (q15_t)0x3d82, (q15_t)0x51bb, (q15_t)0x3d7f, (q15_t)0x51c7, (q15_t)0x3d7b, - (q15_t)0x51d3, (q15_t)0x3d78, (q15_t)0x51df, (q15_t)0x3d74, (q15_t)0x51eb, (q15_t)0x3d71, (q15_t)0x51f7, (q15_t)0x3d6d, - (q15_t)0x5204, (q15_t)0x3d6a, (q15_t)0x5210, (q15_t)0x3d66, (q15_t)0x521c, (q15_t)0x3d63, (q15_t)0x5228, (q15_t)0x3d5f, - (q15_t)0x5234, (q15_t)0x3d5b, (q15_t)0x5240, (q15_t)0x3d58, (q15_t)0x524c, (q15_t)0x3d54, (q15_t)0x5258, (q15_t)0x3d51, - (q15_t)0x5264, (q15_t)0x3d4d, (q15_t)0x5270, (q15_t)0x3d49, (q15_t)0x527c, (q15_t)0x3d46, (q15_t)0x5288, (q15_t)0x3d42, - (q15_t)0x5294, (q15_t)0x3d3f, (q15_t)0x52a0, (q15_t)0x3d3b, (q15_t)0x52ac, (q15_t)0x3d37, (q15_t)0x52b8, (q15_t)0x3d34, - (q15_t)0x52c4, (q15_t)0x3d30, (q15_t)0x52d0, (q15_t)0x3d2c, (q15_t)0x52dc, (q15_t)0x3d28, (q15_t)0x52e8, (q15_t)0x3d25, - (q15_t)0x52f4, (q15_t)0x3d21, (q15_t)0x5300, (q15_t)0x3d1d, (q15_t)0x530c, (q15_t)0x3d1a, (q15_t)0x5318, (q15_t)0x3d16, - (q15_t)0x5324, (q15_t)0x3d12, (q15_t)0x5330, (q15_t)0x3d0e, (q15_t)0x533c, (q15_t)0x3d0b, (q15_t)0x5348, (q15_t)0x3d07, - (q15_t)0x5354, (q15_t)0x3d03, (q15_t)0x5360, (q15_t)0x3cff, (q15_t)0x536c, (q15_t)0x3cfb, (q15_t)0x5378, (q15_t)0x3cf8, - (q15_t)0x5384, (q15_t)0x3cf4, (q15_t)0x5390, (q15_t)0x3cf0, (q15_t)0x539c, (q15_t)0x3cec, (q15_t)0x53a8, (q15_t)0x3ce8, - (q15_t)0x53b4, (q15_t)0x3ce4, (q15_t)0x53c0, (q15_t)0x3ce0, (q15_t)0x53cc, (q15_t)0x3cdd, (q15_t)0x53d8, (q15_t)0x3cd9, - (q15_t)0x53e4, (q15_t)0x3cd5, (q15_t)0x53f0, (q15_t)0x3cd1, (q15_t)0x53fb, (q15_t)0x3ccd, (q15_t)0x5407, (q15_t)0x3cc9, - (q15_t)0x5413, (q15_t)0x3cc5, (q15_t)0x541f, (q15_t)0x3cc1, (q15_t)0x542b, (q15_t)0x3cbd, (q15_t)0x5437, (q15_t)0x3cb9, - (q15_t)0x5443, (q15_t)0x3cb5, (q15_t)0x544f, (q15_t)0x3cb1, (q15_t)0x545b, (q15_t)0x3cad, (q15_t)0x5467, (q15_t)0x3ca9, - (q15_t)0x5473, (q15_t)0x3ca5, (q15_t)0x547f, (q15_t)0x3ca1, (q15_t)0x548b, (q15_t)0x3c9d, (q15_t)0x5496, (q15_t)0x3c99, - (q15_t)0x54a2, (q15_t)0x3c95, (q15_t)0x54ae, (q15_t)0x3c91, (q15_t)0x54ba, (q15_t)0x3c8d, (q15_t)0x54c6, (q15_t)0x3c89, - (q15_t)0x54d2, (q15_t)0x3c85, (q15_t)0x54de, (q15_t)0x3c81, (q15_t)0x54ea, (q15_t)0x3c7d, (q15_t)0x54f6, (q15_t)0x3c79, - (q15_t)0x5501, (q15_t)0x3c74, (q15_t)0x550d, (q15_t)0x3c70, (q15_t)0x5519, (q15_t)0x3c6c, (q15_t)0x5525, (q15_t)0x3c68, - (q15_t)0x5531, (q15_t)0x3c64, (q15_t)0x553d, (q15_t)0x3c60, (q15_t)0x5549, (q15_t)0x3c5b, (q15_t)0x5554, (q15_t)0x3c57, - (q15_t)0x5560, (q15_t)0x3c53, (q15_t)0x556c, (q15_t)0x3c4f, (q15_t)0x5578, (q15_t)0x3c4b, (q15_t)0x5584, (q15_t)0x3c46, - (q15_t)0x5590, (q15_t)0x3c42, (q15_t)0x559b, (q15_t)0x3c3e, (q15_t)0x55a7, (q15_t)0x3c3a, (q15_t)0x55b3, (q15_t)0x3c36, - (q15_t)0x55bf, (q15_t)0x3c31, (q15_t)0x55cb, (q15_t)0x3c2d, (q15_t)0x55d7, (q15_t)0x3c29, (q15_t)0x55e2, (q15_t)0x3c24, - (q15_t)0x55ee, (q15_t)0x3c20, (q15_t)0x55fa, (q15_t)0x3c1c, (q15_t)0x5606, (q15_t)0x3c17, (q15_t)0x5612, (q15_t)0x3c13, - (q15_t)0x561d, (q15_t)0x3c0f, (q15_t)0x5629, (q15_t)0x3c0a, (q15_t)0x5635, (q15_t)0x3c06, (q15_t)0x5641, (q15_t)0x3c02, - (q15_t)0x564c, (q15_t)0x3bfd, (q15_t)0x5658, (q15_t)0x3bf9, (q15_t)0x5664, (q15_t)0x3bf5, (q15_t)0x5670, (q15_t)0x3bf0, - (q15_t)0x567c, (q15_t)0x3bec, (q15_t)0x5687, (q15_t)0x3be7, (q15_t)0x5693, (q15_t)0x3be3, (q15_t)0x569f, (q15_t)0x3bde, - (q15_t)0x56ab, (q15_t)0x3bda, (q15_t)0x56b6, (q15_t)0x3bd6, (q15_t)0x56c2, (q15_t)0x3bd1, (q15_t)0x56ce, (q15_t)0x3bcd, - (q15_t)0x56da, (q15_t)0x3bc8, (q15_t)0x56e5, (q15_t)0x3bc4, (q15_t)0x56f1, (q15_t)0x3bbf, (q15_t)0x56fd, (q15_t)0x3bbb, - (q15_t)0x5709, (q15_t)0x3bb6, (q15_t)0x5714, (q15_t)0x3bb2, (q15_t)0x5720, (q15_t)0x3bad, (q15_t)0x572c, (q15_t)0x3ba9, - (q15_t)0x5737, (q15_t)0x3ba4, (q15_t)0x5743, (q15_t)0x3b9f, (q15_t)0x574f, (q15_t)0x3b9b, (q15_t)0x575b, (q15_t)0x3b96, - (q15_t)0x5766, (q15_t)0x3b92, (q15_t)0x5772, (q15_t)0x3b8d, (q15_t)0x577e, (q15_t)0x3b88, (q15_t)0x5789, (q15_t)0x3b84, - (q15_t)0x5795, (q15_t)0x3b7f, (q15_t)0x57a1, (q15_t)0x3b7b, (q15_t)0x57ac, (q15_t)0x3b76, (q15_t)0x57b8, (q15_t)0x3b71, - (q15_t)0x57c4, (q15_t)0x3b6d, (q15_t)0x57cf, (q15_t)0x3b68, (q15_t)0x57db, (q15_t)0x3b63, (q15_t)0x57e7, (q15_t)0x3b5f, - (q15_t)0x57f2, (q15_t)0x3b5a, (q15_t)0x57fe, (q15_t)0x3b55, (q15_t)0x580a, (q15_t)0x3b50, (q15_t)0x5815, (q15_t)0x3b4c, - (q15_t)0x5821, (q15_t)0x3b47, (q15_t)0x582d, (q15_t)0x3b42, (q15_t)0x5838, (q15_t)0x3b3e, (q15_t)0x5844, (q15_t)0x3b39, - (q15_t)0x584f, (q15_t)0x3b34, (q15_t)0x585b, (q15_t)0x3b2f, (q15_t)0x5867, (q15_t)0x3b2a, (q15_t)0x5872, (q15_t)0x3b26, - (q15_t)0x587e, (q15_t)0x3b21, (q15_t)0x5889, (q15_t)0x3b1c, (q15_t)0x5895, (q15_t)0x3b17, (q15_t)0x58a1, (q15_t)0x3b12, - (q15_t)0x58ac, (q15_t)0x3b0e, (q15_t)0x58b8, (q15_t)0x3b09, (q15_t)0x58c3, (q15_t)0x3b04, (q15_t)0x58cf, (q15_t)0x3aff, - (q15_t)0x58db, (q15_t)0x3afa, (q15_t)0x58e6, (q15_t)0x3af5, (q15_t)0x58f2, (q15_t)0x3af0, (q15_t)0x58fd, (q15_t)0x3aeb, - (q15_t)0x5909, (q15_t)0x3ae6, (q15_t)0x5914, (q15_t)0x3ae2, (q15_t)0x5920, (q15_t)0x3add, (q15_t)0x592c, (q15_t)0x3ad8, - (q15_t)0x5937, (q15_t)0x3ad3, (q15_t)0x5943, (q15_t)0x3ace, (q15_t)0x594e, (q15_t)0x3ac9, (q15_t)0x595a, (q15_t)0x3ac4, - (q15_t)0x5965, (q15_t)0x3abf, (q15_t)0x5971, (q15_t)0x3aba, (q15_t)0x597c, (q15_t)0x3ab5, (q15_t)0x5988, (q15_t)0x3ab0, - (q15_t)0x5993, (q15_t)0x3aab, (q15_t)0x599f, (q15_t)0x3aa6, (q15_t)0x59aa, (q15_t)0x3aa1, (q15_t)0x59b6, (q15_t)0x3a9c, - (q15_t)0x59c1, (q15_t)0x3a97, (q15_t)0x59cd, (q15_t)0x3a92, (q15_t)0x59d8, (q15_t)0x3a8d, (q15_t)0x59e4, (q15_t)0x3a88, - (q15_t)0x59ef, (q15_t)0x3a82, (q15_t)0x59fb, (q15_t)0x3a7d, (q15_t)0x5a06, (q15_t)0x3a78, (q15_t)0x5a12, (q15_t)0x3a73, - (q15_t)0x5a1d, (q15_t)0x3a6e, (q15_t)0x5a29, (q15_t)0x3a69, (q15_t)0x5a34, (q15_t)0x3a64, (q15_t)0x5a40, (q15_t)0x3a5f, - (q15_t)0x5a4b, (q15_t)0x3a59, (q15_t)0x5a57, (q15_t)0x3a54, (q15_t)0x5a62, (q15_t)0x3a4f, (q15_t)0x5a6e, (q15_t)0x3a4a, - (q15_t)0x5a79, (q15_t)0x3a45, (q15_t)0x5a84, (q15_t)0x3a3f, (q15_t)0x5a90, (q15_t)0x3a3a, (q15_t)0x5a9b, (q15_t)0x3a35, - (q15_t)0x5aa7, (q15_t)0x3a30, (q15_t)0x5ab2, (q15_t)0x3a2b, (q15_t)0x5abe, (q15_t)0x3a25, (q15_t)0x5ac9, (q15_t)0x3a20, - (q15_t)0x5ad4, (q15_t)0x3a1b, (q15_t)0x5ae0, (q15_t)0x3a16, (q15_t)0x5aeb, (q15_t)0x3a10, (q15_t)0x5af7, (q15_t)0x3a0b, - (q15_t)0x5b02, (q15_t)0x3a06, (q15_t)0x5b0d, (q15_t)0x3a00, (q15_t)0x5b19, (q15_t)0x39fb, (q15_t)0x5b24, (q15_t)0x39f6, - (q15_t)0x5b30, (q15_t)0x39f0, (q15_t)0x5b3b, (q15_t)0x39eb, (q15_t)0x5b46, (q15_t)0x39e6, (q15_t)0x5b52, (q15_t)0x39e0, - (q15_t)0x5b5d, (q15_t)0x39db, (q15_t)0x5b68, (q15_t)0x39d6, (q15_t)0x5b74, (q15_t)0x39d0, (q15_t)0x5b7f, (q15_t)0x39cb, - (q15_t)0x5b8a, (q15_t)0x39c5, (q15_t)0x5b96, (q15_t)0x39c0, (q15_t)0x5ba1, (q15_t)0x39bb, (q15_t)0x5bac, (q15_t)0x39b5, - (q15_t)0x5bb8, (q15_t)0x39b0, (q15_t)0x5bc3, (q15_t)0x39aa, (q15_t)0x5bce, (q15_t)0x39a5, (q15_t)0x5bda, (q15_t)0x399f, - (q15_t)0x5be5, (q15_t)0x399a, (q15_t)0x5bf0, (q15_t)0x3994, (q15_t)0x5bfc, (q15_t)0x398f, (q15_t)0x5c07, (q15_t)0x3989, - (q15_t)0x5c12, (q15_t)0x3984, (q15_t)0x5c1e, (q15_t)0x397e, (q15_t)0x5c29, (q15_t)0x3979, (q15_t)0x5c34, (q15_t)0x3973, - (q15_t)0x5c3f, (q15_t)0x396e, (q15_t)0x5c4b, (q15_t)0x3968, (q15_t)0x5c56, (q15_t)0x3963, (q15_t)0x5c61, (q15_t)0x395d, - (q15_t)0x5c6c, (q15_t)0x3958, (q15_t)0x5c78, (q15_t)0x3952, (q15_t)0x5c83, (q15_t)0x394c, (q15_t)0x5c8e, (q15_t)0x3947, - (q15_t)0x5c99, (q15_t)0x3941, (q15_t)0x5ca5, (q15_t)0x393b, (q15_t)0x5cb0, (q15_t)0x3936, (q15_t)0x5cbb, (q15_t)0x3930, - (q15_t)0x5cc6, (q15_t)0x392b, (q15_t)0x5cd2, (q15_t)0x3925, (q15_t)0x5cdd, (q15_t)0x391f, (q15_t)0x5ce8, (q15_t)0x391a, - (q15_t)0x5cf3, (q15_t)0x3914, (q15_t)0x5cff, (q15_t)0x390e, (q15_t)0x5d0a, (q15_t)0x3909, (q15_t)0x5d15, (q15_t)0x3903, - (q15_t)0x5d20, (q15_t)0x38fd, (q15_t)0x5d2b, (q15_t)0x38f7, (q15_t)0x5d36, (q15_t)0x38f2, (q15_t)0x5d42, (q15_t)0x38ec, - (q15_t)0x5d4d, (q15_t)0x38e6, (q15_t)0x5d58, (q15_t)0x38e0, (q15_t)0x5d63, (q15_t)0x38db, (q15_t)0x5d6e, (q15_t)0x38d5, - (q15_t)0x5d79, (q15_t)0x38cf, (q15_t)0x5d85, (q15_t)0x38c9, (q15_t)0x5d90, (q15_t)0x38c3, (q15_t)0x5d9b, (q15_t)0x38be, - (q15_t)0x5da6, (q15_t)0x38b8, (q15_t)0x5db1, (q15_t)0x38b2, (q15_t)0x5dbc, (q15_t)0x38ac, (q15_t)0x5dc7, (q15_t)0x38a6, - (q15_t)0x5dd3, (q15_t)0x38a1, (q15_t)0x5dde, (q15_t)0x389b, (q15_t)0x5de9, (q15_t)0x3895, (q15_t)0x5df4, (q15_t)0x388f, - (q15_t)0x5dff, (q15_t)0x3889, (q15_t)0x5e0a, (q15_t)0x3883, (q15_t)0x5e15, (q15_t)0x387d, (q15_t)0x5e20, (q15_t)0x3877, - (q15_t)0x5e2b, (q15_t)0x3871, (q15_t)0x5e36, (q15_t)0x386b, (q15_t)0x5e42, (q15_t)0x3866, (q15_t)0x5e4d, (q15_t)0x3860, - (q15_t)0x5e58, (q15_t)0x385a, (q15_t)0x5e63, (q15_t)0x3854, (q15_t)0x5e6e, (q15_t)0x384e, (q15_t)0x5e79, (q15_t)0x3848, - (q15_t)0x5e84, (q15_t)0x3842, (q15_t)0x5e8f, (q15_t)0x383c, (q15_t)0x5e9a, (q15_t)0x3836, (q15_t)0x5ea5, (q15_t)0x3830, - (q15_t)0x5eb0, (q15_t)0x382a, (q15_t)0x5ebb, (q15_t)0x3824, (q15_t)0x5ec6, (q15_t)0x381e, (q15_t)0x5ed1, (q15_t)0x3818, - (q15_t)0x5edc, (q15_t)0x3812, (q15_t)0x5ee7, (q15_t)0x380b, (q15_t)0x5ef2, (q15_t)0x3805, (q15_t)0x5efd, (q15_t)0x37ff, - (q15_t)0x5f08, (q15_t)0x37f9, (q15_t)0x5f13, (q15_t)0x37f3, (q15_t)0x5f1e, (q15_t)0x37ed, (q15_t)0x5f29, (q15_t)0x37e7, - (q15_t)0x5f34, (q15_t)0x37e1, (q15_t)0x5f3f, (q15_t)0x37db, (q15_t)0x5f4a, (q15_t)0x37d5, (q15_t)0x5f55, (q15_t)0x37ce, - (q15_t)0x5f60, (q15_t)0x37c8, (q15_t)0x5f6b, (q15_t)0x37c2, (q15_t)0x5f76, (q15_t)0x37bc, (q15_t)0x5f81, (q15_t)0x37b6, - (q15_t)0x5f8c, (q15_t)0x37b0, (q15_t)0x5f97, (q15_t)0x37a9, (q15_t)0x5fa2, (q15_t)0x37a3, (q15_t)0x5fac, (q15_t)0x379d, - (q15_t)0x5fb7, (q15_t)0x3797, (q15_t)0x5fc2, (q15_t)0x3790, (q15_t)0x5fcd, (q15_t)0x378a, (q15_t)0x5fd8, (q15_t)0x3784, - (q15_t)0x5fe3, (q15_t)0x377e, (q15_t)0x5fee, (q15_t)0x3777, (q15_t)0x5ff9, (q15_t)0x3771, (q15_t)0x6004, (q15_t)0x376b, - (q15_t)0x600f, (q15_t)0x3765, (q15_t)0x6019, (q15_t)0x375e, (q15_t)0x6024, (q15_t)0x3758, (q15_t)0x602f, (q15_t)0x3752, - (q15_t)0x603a, (q15_t)0x374b, (q15_t)0x6045, (q15_t)0x3745, (q15_t)0x6050, (q15_t)0x373f, (q15_t)0x605b, (q15_t)0x3738, - (q15_t)0x6065, (q15_t)0x3732, (q15_t)0x6070, (q15_t)0x372c, (q15_t)0x607b, (q15_t)0x3725, (q15_t)0x6086, (q15_t)0x371f, - (q15_t)0x6091, (q15_t)0x3718, (q15_t)0x609b, (q15_t)0x3712, (q15_t)0x60a6, (q15_t)0x370c, (q15_t)0x60b1, (q15_t)0x3705, - (q15_t)0x60bc, (q15_t)0x36ff, (q15_t)0x60c7, (q15_t)0x36f8, (q15_t)0x60d1, (q15_t)0x36f2, (q15_t)0x60dc, (q15_t)0x36eb, - (q15_t)0x60e7, (q15_t)0x36e5, (q15_t)0x60f2, (q15_t)0x36df, (q15_t)0x60fd, (q15_t)0x36d8, (q15_t)0x6107, (q15_t)0x36d2, - (q15_t)0x6112, (q15_t)0x36cb, (q15_t)0x611d, (q15_t)0x36c5, (q15_t)0x6128, (q15_t)0x36be, (q15_t)0x6132, (q15_t)0x36b8, - (q15_t)0x613d, (q15_t)0x36b1, (q15_t)0x6148, (q15_t)0x36ab, (q15_t)0x6153, (q15_t)0x36a4, (q15_t)0x615d, (q15_t)0x369d, - (q15_t)0x6168, (q15_t)0x3697, (q15_t)0x6173, (q15_t)0x3690, (q15_t)0x617d, (q15_t)0x368a, (q15_t)0x6188, (q15_t)0x3683, - (q15_t)0x6193, (q15_t)0x367d, (q15_t)0x619e, (q15_t)0x3676, (q15_t)0x61a8, (q15_t)0x366f, (q15_t)0x61b3, (q15_t)0x3669, - (q15_t)0x61be, (q15_t)0x3662, (q15_t)0x61c8, (q15_t)0x365c, (q15_t)0x61d3, (q15_t)0x3655, (q15_t)0x61de, (q15_t)0x364e, - (q15_t)0x61e8, (q15_t)0x3648, (q15_t)0x61f3, (q15_t)0x3641, (q15_t)0x61fe, (q15_t)0x363a, (q15_t)0x6208, (q15_t)0x3634, - (q15_t)0x6213, (q15_t)0x362d, (q15_t)0x621e, (q15_t)0x3626, (q15_t)0x6228, (q15_t)0x3620, (q15_t)0x6233, (q15_t)0x3619, - (q15_t)0x623d, (q15_t)0x3612, (q15_t)0x6248, (q15_t)0x360b, (q15_t)0x6253, (q15_t)0x3605, (q15_t)0x625d, (q15_t)0x35fe, - (q15_t)0x6268, (q15_t)0x35f7, (q15_t)0x6272, (q15_t)0x35f0, (q15_t)0x627d, (q15_t)0x35ea, (q15_t)0x6288, (q15_t)0x35e3, - (q15_t)0x6292, (q15_t)0x35dc, (q15_t)0x629d, (q15_t)0x35d5, (q15_t)0x62a7, (q15_t)0x35ce, (q15_t)0x62b2, (q15_t)0x35c8, - (q15_t)0x62bc, (q15_t)0x35c1, (q15_t)0x62c7, (q15_t)0x35ba, (q15_t)0x62d2, (q15_t)0x35b3, (q15_t)0x62dc, (q15_t)0x35ac, - (q15_t)0x62e7, (q15_t)0x35a5, (q15_t)0x62f1, (q15_t)0x359f, (q15_t)0x62fc, (q15_t)0x3598, (q15_t)0x6306, (q15_t)0x3591, - (q15_t)0x6311, (q15_t)0x358a, (q15_t)0x631b, (q15_t)0x3583, (q15_t)0x6326, (q15_t)0x357c, (q15_t)0x6330, (q15_t)0x3575, - (q15_t)0x633b, (q15_t)0x356e, (q15_t)0x6345, (q15_t)0x3567, (q15_t)0x6350, (q15_t)0x3561, (q15_t)0x635a, (q15_t)0x355a, - (q15_t)0x6365, (q15_t)0x3553, (q15_t)0x636f, (q15_t)0x354c, (q15_t)0x637a, (q15_t)0x3545, (q15_t)0x6384, (q15_t)0x353e, - (q15_t)0x638e, (q15_t)0x3537, (q15_t)0x6399, (q15_t)0x3530, (q15_t)0x63a3, (q15_t)0x3529, (q15_t)0x63ae, (q15_t)0x3522, - (q15_t)0x63b8, (q15_t)0x351b, (q15_t)0x63c3, (q15_t)0x3514, (q15_t)0x63cd, (q15_t)0x350d, (q15_t)0x63d7, (q15_t)0x3506, - (q15_t)0x63e2, (q15_t)0x34ff, (q15_t)0x63ec, (q15_t)0x34f8, (q15_t)0x63f7, (q15_t)0x34f1, (q15_t)0x6401, (q15_t)0x34ea, - (q15_t)0x640b, (q15_t)0x34e2, (q15_t)0x6416, (q15_t)0x34db, (q15_t)0x6420, (q15_t)0x34d4, (q15_t)0x642b, (q15_t)0x34cd, - (q15_t)0x6435, (q15_t)0x34c6, (q15_t)0x643f, (q15_t)0x34bf, (q15_t)0x644a, (q15_t)0x34b8, (q15_t)0x6454, (q15_t)0x34b1, - (q15_t)0x645e, (q15_t)0x34aa, (q15_t)0x6469, (q15_t)0x34a2, (q15_t)0x6473, (q15_t)0x349b, (q15_t)0x647d, (q15_t)0x3494, - (q15_t)0x6488, (q15_t)0x348d, (q15_t)0x6492, (q15_t)0x3486, (q15_t)0x649c, (q15_t)0x347f, (q15_t)0x64a7, (q15_t)0x3477, - (q15_t)0x64b1, (q15_t)0x3470, (q15_t)0x64bb, (q15_t)0x3469, (q15_t)0x64c5, (q15_t)0x3462, (q15_t)0x64d0, (q15_t)0x345b, - (q15_t)0x64da, (q15_t)0x3453, (q15_t)0x64e4, (q15_t)0x344c, (q15_t)0x64ef, (q15_t)0x3445, (q15_t)0x64f9, (q15_t)0x343e, - (q15_t)0x6503, (q15_t)0x3436, (q15_t)0x650d, (q15_t)0x342f, (q15_t)0x6518, (q15_t)0x3428, (q15_t)0x6522, (q15_t)0x3420, - (q15_t)0x652c, (q15_t)0x3419, (q15_t)0x6536, (q15_t)0x3412, (q15_t)0x6541, (q15_t)0x340b, (q15_t)0x654b, (q15_t)0x3403, - (q15_t)0x6555, (q15_t)0x33fc, (q15_t)0x655f, (q15_t)0x33f5, (q15_t)0x6569, (q15_t)0x33ed, (q15_t)0x6574, (q15_t)0x33e6, - (q15_t)0x657e, (q15_t)0x33df, (q15_t)0x6588, (q15_t)0x33d7, (q15_t)0x6592, (q15_t)0x33d0, (q15_t)0x659c, (q15_t)0x33c8, - (q15_t)0x65a6, (q15_t)0x33c1, (q15_t)0x65b1, (q15_t)0x33ba, (q15_t)0x65bb, (q15_t)0x33b2, (q15_t)0x65c5, (q15_t)0x33ab, - (q15_t)0x65cf, (q15_t)0x33a3, (q15_t)0x65d9, (q15_t)0x339c, (q15_t)0x65e3, (q15_t)0x3395, (q15_t)0x65ed, (q15_t)0x338d, - (q15_t)0x65f8, (q15_t)0x3386, (q15_t)0x6602, (q15_t)0x337e, (q15_t)0x660c, (q15_t)0x3377, (q15_t)0x6616, (q15_t)0x336f, - (q15_t)0x6620, (q15_t)0x3368, (q15_t)0x662a, (q15_t)0x3360, (q15_t)0x6634, (q15_t)0x3359, (q15_t)0x663e, (q15_t)0x3351, - (q15_t)0x6648, (q15_t)0x334a, (q15_t)0x6652, (q15_t)0x3342, (q15_t)0x665c, (q15_t)0x333b, (q15_t)0x6666, (q15_t)0x3333, - (q15_t)0x6671, (q15_t)0x332c, (q15_t)0x667b, (q15_t)0x3324, (q15_t)0x6685, (q15_t)0x331d, (q15_t)0x668f, (q15_t)0x3315, - (q15_t)0x6699, (q15_t)0x330d, (q15_t)0x66a3, (q15_t)0x3306, (q15_t)0x66ad, (q15_t)0x32fe, (q15_t)0x66b7, (q15_t)0x32f7, - (q15_t)0x66c1, (q15_t)0x32ef, (q15_t)0x66cb, (q15_t)0x32e7, (q15_t)0x66d5, (q15_t)0x32e0, (q15_t)0x66df, (q15_t)0x32d8, - (q15_t)0x66e9, (q15_t)0x32d0, (q15_t)0x66f3, (q15_t)0x32c9, (q15_t)0x66fd, (q15_t)0x32c1, (q15_t)0x6707, (q15_t)0x32ba, - (q15_t)0x6711, (q15_t)0x32b2, (q15_t)0x671a, (q15_t)0x32aa, (q15_t)0x6724, (q15_t)0x32a3, (q15_t)0x672e, (q15_t)0x329b, - (q15_t)0x6738, (q15_t)0x3293, (q15_t)0x6742, (q15_t)0x328b, (q15_t)0x674c, (q15_t)0x3284, (q15_t)0x6756, (q15_t)0x327c, - (q15_t)0x6760, (q15_t)0x3274, (q15_t)0x676a, (q15_t)0x326d, (q15_t)0x6774, (q15_t)0x3265, (q15_t)0x677e, (q15_t)0x325d, - (q15_t)0x6788, (q15_t)0x3255, (q15_t)0x6791, (q15_t)0x324e, (q15_t)0x679b, (q15_t)0x3246, (q15_t)0x67a5, (q15_t)0x323e, - (q15_t)0x67af, (q15_t)0x3236, (q15_t)0x67b9, (q15_t)0x322e, (q15_t)0x67c3, (q15_t)0x3227, (q15_t)0x67cd, (q15_t)0x321f, - (q15_t)0x67d6, (q15_t)0x3217, (q15_t)0x67e0, (q15_t)0x320f, (q15_t)0x67ea, (q15_t)0x3207, (q15_t)0x67f4, (q15_t)0x31ff, - (q15_t)0x67fe, (q15_t)0x31f8, (q15_t)0x6808, (q15_t)0x31f0, (q15_t)0x6811, (q15_t)0x31e8, (q15_t)0x681b, (q15_t)0x31e0, - (q15_t)0x6825, (q15_t)0x31d8, (q15_t)0x682f, (q15_t)0x31d0, (q15_t)0x6838, (q15_t)0x31c8, (q15_t)0x6842, (q15_t)0x31c0, - (q15_t)0x684c, (q15_t)0x31b9, (q15_t)0x6856, (q15_t)0x31b1, (q15_t)0x6860, (q15_t)0x31a9, (q15_t)0x6869, (q15_t)0x31a1, - (q15_t)0x6873, (q15_t)0x3199, (q15_t)0x687d, (q15_t)0x3191, (q15_t)0x6886, (q15_t)0x3189, (q15_t)0x6890, (q15_t)0x3181, - (q15_t)0x689a, (q15_t)0x3179, (q15_t)0x68a4, (q15_t)0x3171, (q15_t)0x68ad, (q15_t)0x3169, (q15_t)0x68b7, (q15_t)0x3161, - (q15_t)0x68c1, (q15_t)0x3159, (q15_t)0x68ca, (q15_t)0x3151, (q15_t)0x68d4, (q15_t)0x3149, (q15_t)0x68de, (q15_t)0x3141, - (q15_t)0x68e7, (q15_t)0x3139, (q15_t)0x68f1, (q15_t)0x3131, (q15_t)0x68fb, (q15_t)0x3129, (q15_t)0x6904, (q15_t)0x3121, - (q15_t)0x690e, (q15_t)0x3119, (q15_t)0x6918, (q15_t)0x3111, (q15_t)0x6921, (q15_t)0x3109, (q15_t)0x692b, (q15_t)0x3101, - (q15_t)0x6935, (q15_t)0x30f9, (q15_t)0x693e, (q15_t)0x30f0, (q15_t)0x6948, (q15_t)0x30e8, (q15_t)0x6951, (q15_t)0x30e0, - (q15_t)0x695b, (q15_t)0x30d8, (q15_t)0x6965, (q15_t)0x30d0, (q15_t)0x696e, (q15_t)0x30c8, (q15_t)0x6978, (q15_t)0x30c0, - (q15_t)0x6981, (q15_t)0x30b8, (q15_t)0x698b, (q15_t)0x30af, (q15_t)0x6994, (q15_t)0x30a7, (q15_t)0x699e, (q15_t)0x309f, - (q15_t)0x69a7, (q15_t)0x3097, (q15_t)0x69b1, (q15_t)0x308f, (q15_t)0x69bb, (q15_t)0x3087, (q15_t)0x69c4, (q15_t)0x307e, - (q15_t)0x69ce, (q15_t)0x3076, (q15_t)0x69d7, (q15_t)0x306e, (q15_t)0x69e1, (q15_t)0x3066, (q15_t)0x69ea, (q15_t)0x305d, - (q15_t)0x69f4, (q15_t)0x3055, (q15_t)0x69fd, (q15_t)0x304d, (q15_t)0x6a07, (q15_t)0x3045, (q15_t)0x6a10, (q15_t)0x303c, - (q15_t)0x6a1a, (q15_t)0x3034, (q15_t)0x6a23, (q15_t)0x302c, (q15_t)0x6a2c, (q15_t)0x3024, (q15_t)0x6a36, (q15_t)0x301b, - (q15_t)0x6a3f, (q15_t)0x3013, (q15_t)0x6a49, (q15_t)0x300b, (q15_t)0x6a52, (q15_t)0x3002, (q15_t)0x6a5c, (q15_t)0x2ffa, - (q15_t)0x6a65, (q15_t)0x2ff2, (q15_t)0x6a6e, (q15_t)0x2fea, (q15_t)0x6a78, (q15_t)0x2fe1, (q15_t)0x6a81, (q15_t)0x2fd9, - (q15_t)0x6a8b, (q15_t)0x2fd0, (q15_t)0x6a94, (q15_t)0x2fc8, (q15_t)0x6a9d, (q15_t)0x2fc0, (q15_t)0x6aa7, (q15_t)0x2fb7, - (q15_t)0x6ab0, (q15_t)0x2faf, (q15_t)0x6ab9, (q15_t)0x2fa7, (q15_t)0x6ac3, (q15_t)0x2f9e, (q15_t)0x6acc, (q15_t)0x2f96, - (q15_t)0x6ad6, (q15_t)0x2f8d, (q15_t)0x6adf, (q15_t)0x2f85, (q15_t)0x6ae8, (q15_t)0x2f7d, (q15_t)0x6af2, (q15_t)0x2f74, - (q15_t)0x6afb, (q15_t)0x2f6c, (q15_t)0x6b04, (q15_t)0x2f63, (q15_t)0x6b0d, (q15_t)0x2f5b, (q15_t)0x6b17, (q15_t)0x2f52, - (q15_t)0x6b20, (q15_t)0x2f4a, (q15_t)0x6b29, (q15_t)0x2f41, (q15_t)0x6b33, (q15_t)0x2f39, (q15_t)0x6b3c, (q15_t)0x2f30, - (q15_t)0x6b45, (q15_t)0x2f28, (q15_t)0x6b4e, (q15_t)0x2f20, (q15_t)0x6b58, (q15_t)0x2f17, (q15_t)0x6b61, (q15_t)0x2f0e, - (q15_t)0x6b6a, (q15_t)0x2f06, (q15_t)0x6b73, (q15_t)0x2efd, (q15_t)0x6b7d, (q15_t)0x2ef5, (q15_t)0x6b86, (q15_t)0x2eec, - (q15_t)0x6b8f, (q15_t)0x2ee4, (q15_t)0x6b98, (q15_t)0x2edb, (q15_t)0x6ba1, (q15_t)0x2ed3, (q15_t)0x6bab, (q15_t)0x2eca, - (q15_t)0x6bb4, (q15_t)0x2ec2, (q15_t)0x6bbd, (q15_t)0x2eb9, (q15_t)0x6bc6, (q15_t)0x2eb0, (q15_t)0x6bcf, (q15_t)0x2ea8, - (q15_t)0x6bd8, (q15_t)0x2e9f, (q15_t)0x6be2, (q15_t)0x2e97, (q15_t)0x6beb, (q15_t)0x2e8e, (q15_t)0x6bf4, (q15_t)0x2e85, - (q15_t)0x6bfd, (q15_t)0x2e7d, (q15_t)0x6c06, (q15_t)0x2e74, (q15_t)0x6c0f, (q15_t)0x2e6b, (q15_t)0x6c18, (q15_t)0x2e63, - (q15_t)0x6c21, (q15_t)0x2e5a, (q15_t)0x6c2b, (q15_t)0x2e51, (q15_t)0x6c34, (q15_t)0x2e49, (q15_t)0x6c3d, (q15_t)0x2e40, - (q15_t)0x6c46, (q15_t)0x2e37, (q15_t)0x6c4f, (q15_t)0x2e2f, (q15_t)0x6c58, (q15_t)0x2e26, (q15_t)0x6c61, (q15_t)0x2e1d, - (q15_t)0x6c6a, (q15_t)0x2e15, (q15_t)0x6c73, (q15_t)0x2e0c, (q15_t)0x6c7c, (q15_t)0x2e03, (q15_t)0x6c85, (q15_t)0x2dfa, - (q15_t)0x6c8e, (q15_t)0x2df2, (q15_t)0x6c97, (q15_t)0x2de9, (q15_t)0x6ca0, (q15_t)0x2de0, (q15_t)0x6ca9, (q15_t)0x2dd7, - (q15_t)0x6cb2, (q15_t)0x2dcf, (q15_t)0x6cbb, (q15_t)0x2dc6, (q15_t)0x6cc4, (q15_t)0x2dbd, (q15_t)0x6ccd, (q15_t)0x2db4, - (q15_t)0x6cd6, (q15_t)0x2dab, (q15_t)0x6cdf, (q15_t)0x2da3, (q15_t)0x6ce8, (q15_t)0x2d9a, (q15_t)0x6cf1, (q15_t)0x2d91, - (q15_t)0x6cfa, (q15_t)0x2d88, (q15_t)0x6d03, (q15_t)0x2d7f, (q15_t)0x6d0c, (q15_t)0x2d76, (q15_t)0x6d15, (q15_t)0x2d6e, - (q15_t)0x6d1e, (q15_t)0x2d65, (q15_t)0x6d27, (q15_t)0x2d5c, (q15_t)0x6d2f, (q15_t)0x2d53, (q15_t)0x6d38, (q15_t)0x2d4a, - (q15_t)0x6d41, (q15_t)0x2d41, (q15_t)0x6d4a, (q15_t)0x2d38, (q15_t)0x6d53, (q15_t)0x2d2f, (q15_t)0x6d5c, (q15_t)0x2d27, - (q15_t)0x6d65, (q15_t)0x2d1e, (q15_t)0x6d6e, (q15_t)0x2d15, (q15_t)0x6d76, (q15_t)0x2d0c, (q15_t)0x6d7f, (q15_t)0x2d03, - (q15_t)0x6d88, (q15_t)0x2cfa, (q15_t)0x6d91, (q15_t)0x2cf1, (q15_t)0x6d9a, (q15_t)0x2ce8, (q15_t)0x6da3, (q15_t)0x2cdf, - (q15_t)0x6dab, (q15_t)0x2cd6, (q15_t)0x6db4, (q15_t)0x2ccd, (q15_t)0x6dbd, (q15_t)0x2cc4, (q15_t)0x6dc6, (q15_t)0x2cbb, - (q15_t)0x6dcf, (q15_t)0x2cb2, (q15_t)0x6dd7, (q15_t)0x2ca9, (q15_t)0x6de0, (q15_t)0x2ca0, (q15_t)0x6de9, (q15_t)0x2c97, - (q15_t)0x6df2, (q15_t)0x2c8e, (q15_t)0x6dfa, (q15_t)0x2c85, (q15_t)0x6e03, (q15_t)0x2c7c, (q15_t)0x6e0c, (q15_t)0x2c73, - (q15_t)0x6e15, (q15_t)0x2c6a, (q15_t)0x6e1d, (q15_t)0x2c61, (q15_t)0x6e26, (q15_t)0x2c58, (q15_t)0x6e2f, (q15_t)0x2c4f, - (q15_t)0x6e37, (q15_t)0x2c46, (q15_t)0x6e40, (q15_t)0x2c3d, (q15_t)0x6e49, (q15_t)0x2c34, (q15_t)0x6e51, (q15_t)0x2c2b, - (q15_t)0x6e5a, (q15_t)0x2c21, (q15_t)0x6e63, (q15_t)0x2c18, (q15_t)0x6e6b, (q15_t)0x2c0f, (q15_t)0x6e74, (q15_t)0x2c06, - (q15_t)0x6e7d, (q15_t)0x2bfd, (q15_t)0x6e85, (q15_t)0x2bf4, (q15_t)0x6e8e, (q15_t)0x2beb, (q15_t)0x6e97, (q15_t)0x2be2, - (q15_t)0x6e9f, (q15_t)0x2bd8, (q15_t)0x6ea8, (q15_t)0x2bcf, (q15_t)0x6eb0, (q15_t)0x2bc6, (q15_t)0x6eb9, (q15_t)0x2bbd, - (q15_t)0x6ec2, (q15_t)0x2bb4, (q15_t)0x6eca, (q15_t)0x2bab, (q15_t)0x6ed3, (q15_t)0x2ba1, (q15_t)0x6edb, (q15_t)0x2b98, - (q15_t)0x6ee4, (q15_t)0x2b8f, (q15_t)0x6eec, (q15_t)0x2b86, (q15_t)0x6ef5, (q15_t)0x2b7d, (q15_t)0x6efd, (q15_t)0x2b73, - (q15_t)0x6f06, (q15_t)0x2b6a, (q15_t)0x6f0e, (q15_t)0x2b61, (q15_t)0x6f17, (q15_t)0x2b58, (q15_t)0x6f20, (q15_t)0x2b4e, - (q15_t)0x6f28, (q15_t)0x2b45, (q15_t)0x6f30, (q15_t)0x2b3c, (q15_t)0x6f39, (q15_t)0x2b33, (q15_t)0x6f41, (q15_t)0x2b29, - (q15_t)0x6f4a, (q15_t)0x2b20, (q15_t)0x6f52, (q15_t)0x2b17, (q15_t)0x6f5b, (q15_t)0x2b0d, (q15_t)0x6f63, (q15_t)0x2b04, - (q15_t)0x6f6c, (q15_t)0x2afb, (q15_t)0x6f74, (q15_t)0x2af2, (q15_t)0x6f7d, (q15_t)0x2ae8, (q15_t)0x6f85, (q15_t)0x2adf, - (q15_t)0x6f8d, (q15_t)0x2ad6, (q15_t)0x6f96, (q15_t)0x2acc, (q15_t)0x6f9e, (q15_t)0x2ac3, (q15_t)0x6fa7, (q15_t)0x2ab9, - (q15_t)0x6faf, (q15_t)0x2ab0, (q15_t)0x6fb7, (q15_t)0x2aa7, (q15_t)0x6fc0, (q15_t)0x2a9d, (q15_t)0x6fc8, (q15_t)0x2a94, - (q15_t)0x6fd0, (q15_t)0x2a8b, (q15_t)0x6fd9, (q15_t)0x2a81, (q15_t)0x6fe1, (q15_t)0x2a78, (q15_t)0x6fea, (q15_t)0x2a6e, - (q15_t)0x6ff2, (q15_t)0x2a65, (q15_t)0x6ffa, (q15_t)0x2a5c, (q15_t)0x7002, (q15_t)0x2a52, (q15_t)0x700b, (q15_t)0x2a49, - (q15_t)0x7013, (q15_t)0x2a3f, (q15_t)0x701b, (q15_t)0x2a36, (q15_t)0x7024, (q15_t)0x2a2c, (q15_t)0x702c, (q15_t)0x2a23, - (q15_t)0x7034, (q15_t)0x2a1a, (q15_t)0x703c, (q15_t)0x2a10, (q15_t)0x7045, (q15_t)0x2a07, (q15_t)0x704d, (q15_t)0x29fd, - (q15_t)0x7055, (q15_t)0x29f4, (q15_t)0x705d, (q15_t)0x29ea, (q15_t)0x7066, (q15_t)0x29e1, (q15_t)0x706e, (q15_t)0x29d7, - (q15_t)0x7076, (q15_t)0x29ce, (q15_t)0x707e, (q15_t)0x29c4, (q15_t)0x7087, (q15_t)0x29bb, (q15_t)0x708f, (q15_t)0x29b1, - (q15_t)0x7097, (q15_t)0x29a7, (q15_t)0x709f, (q15_t)0x299e, (q15_t)0x70a7, (q15_t)0x2994, (q15_t)0x70af, (q15_t)0x298b, - (q15_t)0x70b8, (q15_t)0x2981, (q15_t)0x70c0, (q15_t)0x2978, (q15_t)0x70c8, (q15_t)0x296e, (q15_t)0x70d0, (q15_t)0x2965, - (q15_t)0x70d8, (q15_t)0x295b, (q15_t)0x70e0, (q15_t)0x2951, (q15_t)0x70e8, (q15_t)0x2948, (q15_t)0x70f0, (q15_t)0x293e, - (q15_t)0x70f9, (q15_t)0x2935, (q15_t)0x7101, (q15_t)0x292b, (q15_t)0x7109, (q15_t)0x2921, (q15_t)0x7111, (q15_t)0x2918, - (q15_t)0x7119, (q15_t)0x290e, (q15_t)0x7121, (q15_t)0x2904, (q15_t)0x7129, (q15_t)0x28fb, (q15_t)0x7131, (q15_t)0x28f1, - (q15_t)0x7139, (q15_t)0x28e7, (q15_t)0x7141, (q15_t)0x28de, (q15_t)0x7149, (q15_t)0x28d4, (q15_t)0x7151, (q15_t)0x28ca, - (q15_t)0x7159, (q15_t)0x28c1, (q15_t)0x7161, (q15_t)0x28b7, (q15_t)0x7169, (q15_t)0x28ad, (q15_t)0x7171, (q15_t)0x28a4, - (q15_t)0x7179, (q15_t)0x289a, (q15_t)0x7181, (q15_t)0x2890, (q15_t)0x7189, (q15_t)0x2886, (q15_t)0x7191, (q15_t)0x287d, - (q15_t)0x7199, (q15_t)0x2873, (q15_t)0x71a1, (q15_t)0x2869, (q15_t)0x71a9, (q15_t)0x2860, (q15_t)0x71b1, (q15_t)0x2856, - (q15_t)0x71b9, (q15_t)0x284c, (q15_t)0x71c0, (q15_t)0x2842, (q15_t)0x71c8, (q15_t)0x2838, (q15_t)0x71d0, (q15_t)0x282f, - (q15_t)0x71d8, (q15_t)0x2825, (q15_t)0x71e0, (q15_t)0x281b, (q15_t)0x71e8, (q15_t)0x2811, (q15_t)0x71f0, (q15_t)0x2808, - (q15_t)0x71f8, (q15_t)0x27fe, (q15_t)0x71ff, (q15_t)0x27f4, (q15_t)0x7207, (q15_t)0x27ea, (q15_t)0x720f, (q15_t)0x27e0, - (q15_t)0x7217, (q15_t)0x27d6, (q15_t)0x721f, (q15_t)0x27cd, (q15_t)0x7227, (q15_t)0x27c3, (q15_t)0x722e, (q15_t)0x27b9, - (q15_t)0x7236, (q15_t)0x27af, (q15_t)0x723e, (q15_t)0x27a5, (q15_t)0x7246, (q15_t)0x279b, (q15_t)0x724e, (q15_t)0x2791, - (q15_t)0x7255, (q15_t)0x2788, (q15_t)0x725d, (q15_t)0x277e, (q15_t)0x7265, (q15_t)0x2774, (q15_t)0x726d, (q15_t)0x276a, - (q15_t)0x7274, (q15_t)0x2760, (q15_t)0x727c, (q15_t)0x2756, (q15_t)0x7284, (q15_t)0x274c, (q15_t)0x728b, (q15_t)0x2742, - (q15_t)0x7293, (q15_t)0x2738, (q15_t)0x729b, (q15_t)0x272e, (q15_t)0x72a3, (q15_t)0x2724, (q15_t)0x72aa, (q15_t)0x271a, - (q15_t)0x72b2, (q15_t)0x2711, (q15_t)0x72ba, (q15_t)0x2707, (q15_t)0x72c1, (q15_t)0x26fd, (q15_t)0x72c9, (q15_t)0x26f3, - (q15_t)0x72d0, (q15_t)0x26e9, (q15_t)0x72d8, (q15_t)0x26df, (q15_t)0x72e0, (q15_t)0x26d5, (q15_t)0x72e7, (q15_t)0x26cb, - (q15_t)0x72ef, (q15_t)0x26c1, (q15_t)0x72f7, (q15_t)0x26b7, (q15_t)0x72fe, (q15_t)0x26ad, (q15_t)0x7306, (q15_t)0x26a3, - (q15_t)0x730d, (q15_t)0x2699, (q15_t)0x7315, (q15_t)0x268f, (q15_t)0x731d, (q15_t)0x2685, (q15_t)0x7324, (q15_t)0x267b, - (q15_t)0x732c, (q15_t)0x2671, (q15_t)0x7333, (q15_t)0x2666, (q15_t)0x733b, (q15_t)0x265c, (q15_t)0x7342, (q15_t)0x2652, - (q15_t)0x734a, (q15_t)0x2648, (q15_t)0x7351, (q15_t)0x263e, (q15_t)0x7359, (q15_t)0x2634, (q15_t)0x7360, (q15_t)0x262a, - (q15_t)0x7368, (q15_t)0x2620, (q15_t)0x736f, (q15_t)0x2616, (q15_t)0x7377, (q15_t)0x260c, (q15_t)0x737e, (q15_t)0x2602, - (q15_t)0x7386, (q15_t)0x25f8, (q15_t)0x738d, (q15_t)0x25ed, (q15_t)0x7395, (q15_t)0x25e3, (q15_t)0x739c, (q15_t)0x25d9, - (q15_t)0x73a3, (q15_t)0x25cf, (q15_t)0x73ab, (q15_t)0x25c5, (q15_t)0x73b2, (q15_t)0x25bb, (q15_t)0x73ba, (q15_t)0x25b1, - (q15_t)0x73c1, (q15_t)0x25a6, (q15_t)0x73c8, (q15_t)0x259c, (q15_t)0x73d0, (q15_t)0x2592, (q15_t)0x73d7, (q15_t)0x2588, - (q15_t)0x73df, (q15_t)0x257e, (q15_t)0x73e6, (q15_t)0x2574, (q15_t)0x73ed, (q15_t)0x2569, (q15_t)0x73f5, (q15_t)0x255f, - (q15_t)0x73fc, (q15_t)0x2555, (q15_t)0x7403, (q15_t)0x254b, (q15_t)0x740b, (q15_t)0x2541, (q15_t)0x7412, (q15_t)0x2536, - (q15_t)0x7419, (q15_t)0x252c, (q15_t)0x7420, (q15_t)0x2522, (q15_t)0x7428, (q15_t)0x2518, (q15_t)0x742f, (q15_t)0x250d, - (q15_t)0x7436, (q15_t)0x2503, (q15_t)0x743e, (q15_t)0x24f9, (q15_t)0x7445, (q15_t)0x24ef, (q15_t)0x744c, (q15_t)0x24e4, - (q15_t)0x7453, (q15_t)0x24da, (q15_t)0x745b, (q15_t)0x24d0, (q15_t)0x7462, (q15_t)0x24c5, (q15_t)0x7469, (q15_t)0x24bb, - (q15_t)0x7470, (q15_t)0x24b1, (q15_t)0x7477, (q15_t)0x24a7, (q15_t)0x747f, (q15_t)0x249c, (q15_t)0x7486, (q15_t)0x2492, - (q15_t)0x748d, (q15_t)0x2488, (q15_t)0x7494, (q15_t)0x247d, (q15_t)0x749b, (q15_t)0x2473, (q15_t)0x74a2, (q15_t)0x2469, - (q15_t)0x74aa, (q15_t)0x245e, (q15_t)0x74b1, (q15_t)0x2454, (q15_t)0x74b8, (q15_t)0x244a, (q15_t)0x74bf, (q15_t)0x243f, - (q15_t)0x74c6, (q15_t)0x2435, (q15_t)0x74cd, (q15_t)0x242b, (q15_t)0x74d4, (q15_t)0x2420, (q15_t)0x74db, (q15_t)0x2416, - (q15_t)0x74e2, (q15_t)0x240b, (q15_t)0x74ea, (q15_t)0x2401, (q15_t)0x74f1, (q15_t)0x23f7, (q15_t)0x74f8, (q15_t)0x23ec, - (q15_t)0x74ff, (q15_t)0x23e2, (q15_t)0x7506, (q15_t)0x23d7, (q15_t)0x750d, (q15_t)0x23cd, (q15_t)0x7514, (q15_t)0x23c3, - (q15_t)0x751b, (q15_t)0x23b8, (q15_t)0x7522, (q15_t)0x23ae, (q15_t)0x7529, (q15_t)0x23a3, (q15_t)0x7530, (q15_t)0x2399, - (q15_t)0x7537, (q15_t)0x238e, (q15_t)0x753e, (q15_t)0x2384, (q15_t)0x7545, (q15_t)0x237a, (q15_t)0x754c, (q15_t)0x236f, - (q15_t)0x7553, (q15_t)0x2365, (q15_t)0x755a, (q15_t)0x235a, (q15_t)0x7561, (q15_t)0x2350, (q15_t)0x7567, (q15_t)0x2345, - (q15_t)0x756e, (q15_t)0x233b, (q15_t)0x7575, (q15_t)0x2330, (q15_t)0x757c, (q15_t)0x2326, (q15_t)0x7583, (q15_t)0x231b, - (q15_t)0x758a, (q15_t)0x2311, (q15_t)0x7591, (q15_t)0x2306, (q15_t)0x7598, (q15_t)0x22fc, (q15_t)0x759f, (q15_t)0x22f1, - (q15_t)0x75a5, (q15_t)0x22e7, (q15_t)0x75ac, (q15_t)0x22dc, (q15_t)0x75b3, (q15_t)0x22d2, (q15_t)0x75ba, (q15_t)0x22c7, - (q15_t)0x75c1, (q15_t)0x22bc, (q15_t)0x75c8, (q15_t)0x22b2, (q15_t)0x75ce, (q15_t)0x22a7, (q15_t)0x75d5, (q15_t)0x229d, - (q15_t)0x75dc, (q15_t)0x2292, (q15_t)0x75e3, (q15_t)0x2288, (q15_t)0x75ea, (q15_t)0x227d, (q15_t)0x75f0, (q15_t)0x2272, - (q15_t)0x75f7, (q15_t)0x2268, (q15_t)0x75fe, (q15_t)0x225d, (q15_t)0x7605, (q15_t)0x2253, (q15_t)0x760b, (q15_t)0x2248, - (q15_t)0x7612, (q15_t)0x223d, (q15_t)0x7619, (q15_t)0x2233, (q15_t)0x7620, (q15_t)0x2228, (q15_t)0x7626, (q15_t)0x221e, - (q15_t)0x762d, (q15_t)0x2213, (q15_t)0x7634, (q15_t)0x2208, (q15_t)0x763a, (q15_t)0x21fe, (q15_t)0x7641, (q15_t)0x21f3, - (q15_t)0x7648, (q15_t)0x21e8, (q15_t)0x764e, (q15_t)0x21de, (q15_t)0x7655, (q15_t)0x21d3, (q15_t)0x765c, (q15_t)0x21c8, - (q15_t)0x7662, (q15_t)0x21be, (q15_t)0x7669, (q15_t)0x21b3, (q15_t)0x766f, (q15_t)0x21a8, (q15_t)0x7676, (q15_t)0x219e, - (q15_t)0x767d, (q15_t)0x2193, (q15_t)0x7683, (q15_t)0x2188, (q15_t)0x768a, (q15_t)0x217d, (q15_t)0x7690, (q15_t)0x2173, - (q15_t)0x7697, (q15_t)0x2168, (q15_t)0x769d, (q15_t)0x215d, (q15_t)0x76a4, (q15_t)0x2153, (q15_t)0x76ab, (q15_t)0x2148, - (q15_t)0x76b1, (q15_t)0x213d, (q15_t)0x76b8, (q15_t)0x2132, (q15_t)0x76be, (q15_t)0x2128, (q15_t)0x76c5, (q15_t)0x211d, - (q15_t)0x76cb, (q15_t)0x2112, (q15_t)0x76d2, (q15_t)0x2107, (q15_t)0x76d8, (q15_t)0x20fd, (q15_t)0x76df, (q15_t)0x20f2, - (q15_t)0x76e5, (q15_t)0x20e7, (q15_t)0x76eb, (q15_t)0x20dc, (q15_t)0x76f2, (q15_t)0x20d1, (q15_t)0x76f8, (q15_t)0x20c7, - (q15_t)0x76ff, (q15_t)0x20bc, (q15_t)0x7705, (q15_t)0x20b1, (q15_t)0x770c, (q15_t)0x20a6, (q15_t)0x7712, (q15_t)0x209b, - (q15_t)0x7718, (q15_t)0x2091, (q15_t)0x771f, (q15_t)0x2086, (q15_t)0x7725, (q15_t)0x207b, (q15_t)0x772c, (q15_t)0x2070, - (q15_t)0x7732, (q15_t)0x2065, (q15_t)0x7738, (q15_t)0x205b, (q15_t)0x773f, (q15_t)0x2050, (q15_t)0x7745, (q15_t)0x2045, - (q15_t)0x774b, (q15_t)0x203a, (q15_t)0x7752, (q15_t)0x202f, (q15_t)0x7758, (q15_t)0x2024, (q15_t)0x775e, (q15_t)0x2019, - (q15_t)0x7765, (q15_t)0x200f, (q15_t)0x776b, (q15_t)0x2004, (q15_t)0x7771, (q15_t)0x1ff9, (q15_t)0x7777, (q15_t)0x1fee, - (q15_t)0x777e, (q15_t)0x1fe3, (q15_t)0x7784, (q15_t)0x1fd8, (q15_t)0x778a, (q15_t)0x1fcd, (q15_t)0x7790, (q15_t)0x1fc2, - (q15_t)0x7797, (q15_t)0x1fb7, (q15_t)0x779d, (q15_t)0x1fac, (q15_t)0x77a3, (q15_t)0x1fa2, (q15_t)0x77a9, (q15_t)0x1f97, - (q15_t)0x77b0, (q15_t)0x1f8c, (q15_t)0x77b6, (q15_t)0x1f81, (q15_t)0x77bc, (q15_t)0x1f76, (q15_t)0x77c2, (q15_t)0x1f6b, - (q15_t)0x77c8, (q15_t)0x1f60, (q15_t)0x77ce, (q15_t)0x1f55, (q15_t)0x77d5, (q15_t)0x1f4a, (q15_t)0x77db, (q15_t)0x1f3f, - (q15_t)0x77e1, (q15_t)0x1f34, (q15_t)0x77e7, (q15_t)0x1f29, (q15_t)0x77ed, (q15_t)0x1f1e, (q15_t)0x77f3, (q15_t)0x1f13, - (q15_t)0x77f9, (q15_t)0x1f08, (q15_t)0x77ff, (q15_t)0x1efd, (q15_t)0x7805, (q15_t)0x1ef2, (q15_t)0x780b, (q15_t)0x1ee7, - (q15_t)0x7812, (q15_t)0x1edc, (q15_t)0x7818, (q15_t)0x1ed1, (q15_t)0x781e, (q15_t)0x1ec6, (q15_t)0x7824, (q15_t)0x1ebb, - (q15_t)0x782a, (q15_t)0x1eb0, (q15_t)0x7830, (q15_t)0x1ea5, (q15_t)0x7836, (q15_t)0x1e9a, (q15_t)0x783c, (q15_t)0x1e8f, - (q15_t)0x7842, (q15_t)0x1e84, (q15_t)0x7848, (q15_t)0x1e79, (q15_t)0x784e, (q15_t)0x1e6e, (q15_t)0x7854, (q15_t)0x1e63, - (q15_t)0x785a, (q15_t)0x1e58, (q15_t)0x7860, (q15_t)0x1e4d, (q15_t)0x7866, (q15_t)0x1e42, (q15_t)0x786b, (q15_t)0x1e36, - (q15_t)0x7871, (q15_t)0x1e2b, (q15_t)0x7877, (q15_t)0x1e20, (q15_t)0x787d, (q15_t)0x1e15, (q15_t)0x7883, (q15_t)0x1e0a, - (q15_t)0x7889, (q15_t)0x1dff, (q15_t)0x788f, (q15_t)0x1df4, (q15_t)0x7895, (q15_t)0x1de9, (q15_t)0x789b, (q15_t)0x1dde, - (q15_t)0x78a1, (q15_t)0x1dd3, (q15_t)0x78a6, (q15_t)0x1dc7, (q15_t)0x78ac, (q15_t)0x1dbc, (q15_t)0x78b2, (q15_t)0x1db1, - (q15_t)0x78b8, (q15_t)0x1da6, (q15_t)0x78be, (q15_t)0x1d9b, (q15_t)0x78c3, (q15_t)0x1d90, (q15_t)0x78c9, (q15_t)0x1d85, - (q15_t)0x78cf, (q15_t)0x1d79, (q15_t)0x78d5, (q15_t)0x1d6e, (q15_t)0x78db, (q15_t)0x1d63, (q15_t)0x78e0, (q15_t)0x1d58, - (q15_t)0x78e6, (q15_t)0x1d4d, (q15_t)0x78ec, (q15_t)0x1d42, (q15_t)0x78f2, (q15_t)0x1d36, (q15_t)0x78f7, (q15_t)0x1d2b, - (q15_t)0x78fd, (q15_t)0x1d20, (q15_t)0x7903, (q15_t)0x1d15, (q15_t)0x7909, (q15_t)0x1d0a, (q15_t)0x790e, (q15_t)0x1cff, - (q15_t)0x7914, (q15_t)0x1cf3, (q15_t)0x791a, (q15_t)0x1ce8, (q15_t)0x791f, (q15_t)0x1cdd, (q15_t)0x7925, (q15_t)0x1cd2, - (q15_t)0x792b, (q15_t)0x1cc6, (q15_t)0x7930, (q15_t)0x1cbb, (q15_t)0x7936, (q15_t)0x1cb0, (q15_t)0x793b, (q15_t)0x1ca5, - (q15_t)0x7941, (q15_t)0x1c99, (q15_t)0x7947, (q15_t)0x1c8e, (q15_t)0x794c, (q15_t)0x1c83, (q15_t)0x7952, (q15_t)0x1c78, - (q15_t)0x7958, (q15_t)0x1c6c, (q15_t)0x795d, (q15_t)0x1c61, (q15_t)0x7963, (q15_t)0x1c56, (q15_t)0x7968, (q15_t)0x1c4b, - (q15_t)0x796e, (q15_t)0x1c3f, (q15_t)0x7973, (q15_t)0x1c34, (q15_t)0x7979, (q15_t)0x1c29, (q15_t)0x797e, (q15_t)0x1c1e, - (q15_t)0x7984, (q15_t)0x1c12, (q15_t)0x7989, (q15_t)0x1c07, (q15_t)0x798f, (q15_t)0x1bfc, (q15_t)0x7994, (q15_t)0x1bf0, - (q15_t)0x799a, (q15_t)0x1be5, (q15_t)0x799f, (q15_t)0x1bda, (q15_t)0x79a5, (q15_t)0x1bce, (q15_t)0x79aa, (q15_t)0x1bc3, - (q15_t)0x79b0, (q15_t)0x1bb8, (q15_t)0x79b5, (q15_t)0x1bac, (q15_t)0x79bb, (q15_t)0x1ba1, (q15_t)0x79c0, (q15_t)0x1b96, - (q15_t)0x79c5, (q15_t)0x1b8a, (q15_t)0x79cb, (q15_t)0x1b7f, (q15_t)0x79d0, (q15_t)0x1b74, (q15_t)0x79d6, (q15_t)0x1b68, - (q15_t)0x79db, (q15_t)0x1b5d, (q15_t)0x79e0, (q15_t)0x1b52, (q15_t)0x79e6, (q15_t)0x1b46, (q15_t)0x79eb, (q15_t)0x1b3b, - (q15_t)0x79f0, (q15_t)0x1b30, (q15_t)0x79f6, (q15_t)0x1b24, (q15_t)0x79fb, (q15_t)0x1b19, (q15_t)0x7a00, (q15_t)0x1b0d, - (q15_t)0x7a06, (q15_t)0x1b02, (q15_t)0x7a0b, (q15_t)0x1af7, (q15_t)0x7a10, (q15_t)0x1aeb, (q15_t)0x7a16, (q15_t)0x1ae0, - (q15_t)0x7a1b, (q15_t)0x1ad4, (q15_t)0x7a20, (q15_t)0x1ac9, (q15_t)0x7a25, (q15_t)0x1abe, (q15_t)0x7a2b, (q15_t)0x1ab2, - (q15_t)0x7a30, (q15_t)0x1aa7, (q15_t)0x7a35, (q15_t)0x1a9b, (q15_t)0x7a3a, (q15_t)0x1a90, (q15_t)0x7a3f, (q15_t)0x1a84, - (q15_t)0x7a45, (q15_t)0x1a79, (q15_t)0x7a4a, (q15_t)0x1a6e, (q15_t)0x7a4f, (q15_t)0x1a62, (q15_t)0x7a54, (q15_t)0x1a57, - (q15_t)0x7a59, (q15_t)0x1a4b, (q15_t)0x7a5f, (q15_t)0x1a40, (q15_t)0x7a64, (q15_t)0x1a34, (q15_t)0x7a69, (q15_t)0x1a29, - (q15_t)0x7a6e, (q15_t)0x1a1d, (q15_t)0x7a73, (q15_t)0x1a12, (q15_t)0x7a78, (q15_t)0x1a06, (q15_t)0x7a7d, (q15_t)0x19fb, - (q15_t)0x7a82, (q15_t)0x19ef, (q15_t)0x7a88, (q15_t)0x19e4, (q15_t)0x7a8d, (q15_t)0x19d8, (q15_t)0x7a92, (q15_t)0x19cd, - (q15_t)0x7a97, (q15_t)0x19c1, (q15_t)0x7a9c, (q15_t)0x19b6, (q15_t)0x7aa1, (q15_t)0x19aa, (q15_t)0x7aa6, (q15_t)0x199f, - (q15_t)0x7aab, (q15_t)0x1993, (q15_t)0x7ab0, (q15_t)0x1988, (q15_t)0x7ab5, (q15_t)0x197c, (q15_t)0x7aba, (q15_t)0x1971, - (q15_t)0x7abf, (q15_t)0x1965, (q15_t)0x7ac4, (q15_t)0x195a, (q15_t)0x7ac9, (q15_t)0x194e, (q15_t)0x7ace, (q15_t)0x1943, - (q15_t)0x7ad3, (q15_t)0x1937, (q15_t)0x7ad8, (q15_t)0x192c, (q15_t)0x7add, (q15_t)0x1920, (q15_t)0x7ae2, (q15_t)0x1914, - (q15_t)0x7ae6, (q15_t)0x1909, (q15_t)0x7aeb, (q15_t)0x18fd, (q15_t)0x7af0, (q15_t)0x18f2, (q15_t)0x7af5, (q15_t)0x18e6, - (q15_t)0x7afa, (q15_t)0x18db, (q15_t)0x7aff, (q15_t)0x18cf, (q15_t)0x7b04, (q15_t)0x18c3, (q15_t)0x7b09, (q15_t)0x18b8, - (q15_t)0x7b0e, (q15_t)0x18ac, (q15_t)0x7b12, (q15_t)0x18a1, (q15_t)0x7b17, (q15_t)0x1895, (q15_t)0x7b1c, (q15_t)0x1889, - (q15_t)0x7b21, (q15_t)0x187e, (q15_t)0x7b26, (q15_t)0x1872, (q15_t)0x7b2a, (q15_t)0x1867, (q15_t)0x7b2f, (q15_t)0x185b, - (q15_t)0x7b34, (q15_t)0x184f, (q15_t)0x7b39, (q15_t)0x1844, (q15_t)0x7b3e, (q15_t)0x1838, (q15_t)0x7b42, (q15_t)0x182d, - (q15_t)0x7b47, (q15_t)0x1821, (q15_t)0x7b4c, (q15_t)0x1815, (q15_t)0x7b50, (q15_t)0x180a, (q15_t)0x7b55, (q15_t)0x17fe, - (q15_t)0x7b5a, (q15_t)0x17f2, (q15_t)0x7b5f, (q15_t)0x17e7, (q15_t)0x7b63, (q15_t)0x17db, (q15_t)0x7b68, (q15_t)0x17cf, - (q15_t)0x7b6d, (q15_t)0x17c4, (q15_t)0x7b71, (q15_t)0x17b8, (q15_t)0x7b76, (q15_t)0x17ac, (q15_t)0x7b7b, (q15_t)0x17a1, - (q15_t)0x7b7f, (q15_t)0x1795, (q15_t)0x7b84, (q15_t)0x1789, (q15_t)0x7b88, (q15_t)0x177e, (q15_t)0x7b8d, (q15_t)0x1772, - (q15_t)0x7b92, (q15_t)0x1766, (q15_t)0x7b96, (q15_t)0x175b, (q15_t)0x7b9b, (q15_t)0x174f, (q15_t)0x7b9f, (q15_t)0x1743, - (q15_t)0x7ba4, (q15_t)0x1737, (q15_t)0x7ba9, (q15_t)0x172c, (q15_t)0x7bad, (q15_t)0x1720, (q15_t)0x7bb2, (q15_t)0x1714, - (q15_t)0x7bb6, (q15_t)0x1709, (q15_t)0x7bbb, (q15_t)0x16fd, (q15_t)0x7bbf, (q15_t)0x16f1, (q15_t)0x7bc4, (q15_t)0x16e5, - (q15_t)0x7bc8, (q15_t)0x16da, (q15_t)0x7bcd, (q15_t)0x16ce, (q15_t)0x7bd1, (q15_t)0x16c2, (q15_t)0x7bd6, (q15_t)0x16b6, - (q15_t)0x7bda, (q15_t)0x16ab, (q15_t)0x7bde, (q15_t)0x169f, (q15_t)0x7be3, (q15_t)0x1693, (q15_t)0x7be7, (q15_t)0x1687, - (q15_t)0x7bec, (q15_t)0x167c, (q15_t)0x7bf0, (q15_t)0x1670, (q15_t)0x7bf5, (q15_t)0x1664, (q15_t)0x7bf9, (q15_t)0x1658, - (q15_t)0x7bfd, (q15_t)0x164c, (q15_t)0x7c02, (q15_t)0x1641, (q15_t)0x7c06, (q15_t)0x1635, (q15_t)0x7c0a, (q15_t)0x1629, - (q15_t)0x7c0f, (q15_t)0x161d, (q15_t)0x7c13, (q15_t)0x1612, (q15_t)0x7c17, (q15_t)0x1606, (q15_t)0x7c1c, (q15_t)0x15fa, - (q15_t)0x7c20, (q15_t)0x15ee, (q15_t)0x7c24, (q15_t)0x15e2, (q15_t)0x7c29, (q15_t)0x15d7, (q15_t)0x7c2d, (q15_t)0x15cb, - (q15_t)0x7c31, (q15_t)0x15bf, (q15_t)0x7c36, (q15_t)0x15b3, (q15_t)0x7c3a, (q15_t)0x15a7, (q15_t)0x7c3e, (q15_t)0x159b, - (q15_t)0x7c42, (q15_t)0x1590, (q15_t)0x7c46, (q15_t)0x1584, (q15_t)0x7c4b, (q15_t)0x1578, (q15_t)0x7c4f, (q15_t)0x156c, - (q15_t)0x7c53, (q15_t)0x1560, (q15_t)0x7c57, (q15_t)0x1554, (q15_t)0x7c5b, (q15_t)0x1549, (q15_t)0x7c60, (q15_t)0x153d, - (q15_t)0x7c64, (q15_t)0x1531, (q15_t)0x7c68, (q15_t)0x1525, (q15_t)0x7c6c, (q15_t)0x1519, (q15_t)0x7c70, (q15_t)0x150d, - (q15_t)0x7c74, (q15_t)0x1501, (q15_t)0x7c79, (q15_t)0x14f6, (q15_t)0x7c7d, (q15_t)0x14ea, (q15_t)0x7c81, (q15_t)0x14de, - (q15_t)0x7c85, (q15_t)0x14d2, (q15_t)0x7c89, (q15_t)0x14c6, (q15_t)0x7c8d, (q15_t)0x14ba, (q15_t)0x7c91, (q15_t)0x14ae, - (q15_t)0x7c95, (q15_t)0x14a2, (q15_t)0x7c99, (q15_t)0x1496, (q15_t)0x7c9d, (q15_t)0x148b, (q15_t)0x7ca1, (q15_t)0x147f, - (q15_t)0x7ca5, (q15_t)0x1473, (q15_t)0x7ca9, (q15_t)0x1467, (q15_t)0x7cad, (q15_t)0x145b, (q15_t)0x7cb1, (q15_t)0x144f, - (q15_t)0x7cb5, (q15_t)0x1443, (q15_t)0x7cb9, (q15_t)0x1437, (q15_t)0x7cbd, (q15_t)0x142b, (q15_t)0x7cc1, (q15_t)0x141f, - (q15_t)0x7cc5, (q15_t)0x1413, (q15_t)0x7cc9, (q15_t)0x1407, (q15_t)0x7ccd, (q15_t)0x13fb, (q15_t)0x7cd1, (q15_t)0x13f0, - (q15_t)0x7cd5, (q15_t)0x13e4, (q15_t)0x7cd9, (q15_t)0x13d8, (q15_t)0x7cdd, (q15_t)0x13cc, (q15_t)0x7ce0, (q15_t)0x13c0, - (q15_t)0x7ce4, (q15_t)0x13b4, (q15_t)0x7ce8, (q15_t)0x13a8, (q15_t)0x7cec, (q15_t)0x139c, (q15_t)0x7cf0, (q15_t)0x1390, - (q15_t)0x7cf4, (q15_t)0x1384, (q15_t)0x7cf8, (q15_t)0x1378, (q15_t)0x7cfb, (q15_t)0x136c, (q15_t)0x7cff, (q15_t)0x1360, - (q15_t)0x7d03, (q15_t)0x1354, (q15_t)0x7d07, (q15_t)0x1348, (q15_t)0x7d0b, (q15_t)0x133c, (q15_t)0x7d0e, (q15_t)0x1330, - (q15_t)0x7d12, (q15_t)0x1324, (q15_t)0x7d16, (q15_t)0x1318, (q15_t)0x7d1a, (q15_t)0x130c, (q15_t)0x7d1d, (q15_t)0x1300, - (q15_t)0x7d21, (q15_t)0x12f4, (q15_t)0x7d25, (q15_t)0x12e8, (q15_t)0x7d28, (q15_t)0x12dc, (q15_t)0x7d2c, (q15_t)0x12d0, - (q15_t)0x7d30, (q15_t)0x12c4, (q15_t)0x7d34, (q15_t)0x12b8, (q15_t)0x7d37, (q15_t)0x12ac, (q15_t)0x7d3b, (q15_t)0x12a0, - (q15_t)0x7d3f, (q15_t)0x1294, (q15_t)0x7d42, (q15_t)0x1288, (q15_t)0x7d46, (q15_t)0x127c, (q15_t)0x7d49, (q15_t)0x1270, - (q15_t)0x7d4d, (q15_t)0x1264, (q15_t)0x7d51, (q15_t)0x1258, (q15_t)0x7d54, (q15_t)0x124c, (q15_t)0x7d58, (q15_t)0x1240, - (q15_t)0x7d5b, (q15_t)0x1234, (q15_t)0x7d5f, (q15_t)0x1228, (q15_t)0x7d63, (q15_t)0x121c, (q15_t)0x7d66, (q15_t)0x1210, - (q15_t)0x7d6a, (q15_t)0x1204, (q15_t)0x7d6d, (q15_t)0x11f7, (q15_t)0x7d71, (q15_t)0x11eb, (q15_t)0x7d74, (q15_t)0x11df, - (q15_t)0x7d78, (q15_t)0x11d3, (q15_t)0x7d7b, (q15_t)0x11c7, (q15_t)0x7d7f, (q15_t)0x11bb, (q15_t)0x7d82, (q15_t)0x11af, - (q15_t)0x7d86, (q15_t)0x11a3, (q15_t)0x7d89, (q15_t)0x1197, (q15_t)0x7d8d, (q15_t)0x118b, (q15_t)0x7d90, (q15_t)0x117f, - (q15_t)0x7d93, (q15_t)0x1173, (q15_t)0x7d97, (q15_t)0x1167, (q15_t)0x7d9a, (q15_t)0x115a, (q15_t)0x7d9e, (q15_t)0x114e, - (q15_t)0x7da1, (q15_t)0x1142, (q15_t)0x7da4, (q15_t)0x1136, (q15_t)0x7da8, (q15_t)0x112a, (q15_t)0x7dab, (q15_t)0x111e, - (q15_t)0x7daf, (q15_t)0x1112, (q15_t)0x7db2, (q15_t)0x1106, (q15_t)0x7db5, (q15_t)0x10fa, (q15_t)0x7db9, (q15_t)0x10ed, - (q15_t)0x7dbc, (q15_t)0x10e1, (q15_t)0x7dbf, (q15_t)0x10d5, (q15_t)0x7dc2, (q15_t)0x10c9, (q15_t)0x7dc6, (q15_t)0x10bd, - (q15_t)0x7dc9, (q15_t)0x10b1, (q15_t)0x7dcc, (q15_t)0x10a5, (q15_t)0x7dd0, (q15_t)0x1099, (q15_t)0x7dd3, (q15_t)0x108c, - (q15_t)0x7dd6, (q15_t)0x1080, (q15_t)0x7dd9, (q15_t)0x1074, (q15_t)0x7ddd, (q15_t)0x1068, (q15_t)0x7de0, (q15_t)0x105c, - (q15_t)0x7de3, (q15_t)0x1050, (q15_t)0x7de6, (q15_t)0x1044, (q15_t)0x7de9, (q15_t)0x1037, (q15_t)0x7ded, (q15_t)0x102b, - (q15_t)0x7df0, (q15_t)0x101f, (q15_t)0x7df3, (q15_t)0x1013, (q15_t)0x7df6, (q15_t)0x1007, (q15_t)0x7df9, (q15_t)0xffb, - (q15_t)0x7dfc, (q15_t)0xfee, (q15_t)0x7dff, (q15_t)0xfe2, (q15_t)0x7e03, (q15_t)0xfd6, (q15_t)0x7e06, (q15_t)0xfca, - (q15_t)0x7e09, (q15_t)0xfbe, (q15_t)0x7e0c, (q15_t)0xfb2, (q15_t)0x7e0f, (q15_t)0xfa5, (q15_t)0x7e12, (q15_t)0xf99, - (q15_t)0x7e15, (q15_t)0xf8d, (q15_t)0x7e18, (q15_t)0xf81, (q15_t)0x7e1b, (q15_t)0xf75, (q15_t)0x7e1e, (q15_t)0xf68, - (q15_t)0x7e21, (q15_t)0xf5c, (q15_t)0x7e24, (q15_t)0xf50, (q15_t)0x7e27, (q15_t)0xf44, (q15_t)0x7e2a, (q15_t)0xf38, - (q15_t)0x7e2d, (q15_t)0xf2b, (q15_t)0x7e30, (q15_t)0xf1f, (q15_t)0x7e33, (q15_t)0xf13, (q15_t)0x7e36, (q15_t)0xf07, - (q15_t)0x7e39, (q15_t)0xefb, (q15_t)0x7e3c, (q15_t)0xeee, (q15_t)0x7e3f, (q15_t)0xee2, (q15_t)0x7e42, (q15_t)0xed6, - (q15_t)0x7e45, (q15_t)0xeca, (q15_t)0x7e48, (q15_t)0xebd, (q15_t)0x7e4a, (q15_t)0xeb1, (q15_t)0x7e4d, (q15_t)0xea5, - (q15_t)0x7e50, (q15_t)0xe99, (q15_t)0x7e53, (q15_t)0xe8c, (q15_t)0x7e56, (q15_t)0xe80, (q15_t)0x7e59, (q15_t)0xe74, - (q15_t)0x7e5c, (q15_t)0xe68, (q15_t)0x7e5e, (q15_t)0xe5c, (q15_t)0x7e61, (q15_t)0xe4f, (q15_t)0x7e64, (q15_t)0xe43, - (q15_t)0x7e67, (q15_t)0xe37, (q15_t)0x7e6a, (q15_t)0xe2b, (q15_t)0x7e6c, (q15_t)0xe1e, (q15_t)0x7e6f, (q15_t)0xe12, - (q15_t)0x7e72, (q15_t)0xe06, (q15_t)0x7e75, (q15_t)0xdf9, (q15_t)0x7e77, (q15_t)0xded, (q15_t)0x7e7a, (q15_t)0xde1, - (q15_t)0x7e7d, (q15_t)0xdd5, (q15_t)0x7e80, (q15_t)0xdc8, (q15_t)0x7e82, (q15_t)0xdbc, (q15_t)0x7e85, (q15_t)0xdb0, - (q15_t)0x7e88, (q15_t)0xda4, (q15_t)0x7e8a, (q15_t)0xd97, (q15_t)0x7e8d, (q15_t)0xd8b, (q15_t)0x7e90, (q15_t)0xd7f, - (q15_t)0x7e92, (q15_t)0xd72, (q15_t)0x7e95, (q15_t)0xd66, (q15_t)0x7e98, (q15_t)0xd5a, (q15_t)0x7e9a, (q15_t)0xd4e, - (q15_t)0x7e9d, (q15_t)0xd41, (q15_t)0x7e9f, (q15_t)0xd35, (q15_t)0x7ea2, (q15_t)0xd29, (q15_t)0x7ea5, (q15_t)0xd1c, - (q15_t)0x7ea7, (q15_t)0xd10, (q15_t)0x7eaa, (q15_t)0xd04, (q15_t)0x7eac, (q15_t)0xcf8, (q15_t)0x7eaf, (q15_t)0xceb, - (q15_t)0x7eb1, (q15_t)0xcdf, (q15_t)0x7eb4, (q15_t)0xcd3, (q15_t)0x7eb6, (q15_t)0xcc6, (q15_t)0x7eb9, (q15_t)0xcba, - (q15_t)0x7ebb, (q15_t)0xcae, (q15_t)0x7ebe, (q15_t)0xca1, (q15_t)0x7ec0, (q15_t)0xc95, (q15_t)0x7ec3, (q15_t)0xc89, - (q15_t)0x7ec5, (q15_t)0xc7c, (q15_t)0x7ec8, (q15_t)0xc70, (q15_t)0x7eca, (q15_t)0xc64, (q15_t)0x7ecc, (q15_t)0xc57, - (q15_t)0x7ecf, (q15_t)0xc4b, (q15_t)0x7ed1, (q15_t)0xc3f, (q15_t)0x7ed4, (q15_t)0xc32, (q15_t)0x7ed6, (q15_t)0xc26, - (q15_t)0x7ed8, (q15_t)0xc1a, (q15_t)0x7edb, (q15_t)0xc0d, (q15_t)0x7edd, (q15_t)0xc01, (q15_t)0x7ee0, (q15_t)0xbf5, - (q15_t)0x7ee2, (q15_t)0xbe8, (q15_t)0x7ee4, (q15_t)0xbdc, (q15_t)0x7ee7, (q15_t)0xbd0, (q15_t)0x7ee9, (q15_t)0xbc3, - (q15_t)0x7eeb, (q15_t)0xbb7, (q15_t)0x7eed, (q15_t)0xbab, (q15_t)0x7ef0, (q15_t)0xb9e, (q15_t)0x7ef2, (q15_t)0xb92, - (q15_t)0x7ef4, (q15_t)0xb85, (q15_t)0x7ef7, (q15_t)0xb79, (q15_t)0x7ef9, (q15_t)0xb6d, (q15_t)0x7efb, (q15_t)0xb60, - (q15_t)0x7efd, (q15_t)0xb54, (q15_t)0x7f00, (q15_t)0xb48, (q15_t)0x7f02, (q15_t)0xb3b, (q15_t)0x7f04, (q15_t)0xb2f, - (q15_t)0x7f06, (q15_t)0xb23, (q15_t)0x7f08, (q15_t)0xb16, (q15_t)0x7f0a, (q15_t)0xb0a, (q15_t)0x7f0d, (q15_t)0xafd, - (q15_t)0x7f0f, (q15_t)0xaf1, (q15_t)0x7f11, (q15_t)0xae5, (q15_t)0x7f13, (q15_t)0xad8, (q15_t)0x7f15, (q15_t)0xacc, - (q15_t)0x7f17, (q15_t)0xac0, (q15_t)0x7f19, (q15_t)0xab3, (q15_t)0x7f1c, (q15_t)0xaa7, (q15_t)0x7f1e, (q15_t)0xa9a, - (q15_t)0x7f20, (q15_t)0xa8e, (q15_t)0x7f22, (q15_t)0xa82, (q15_t)0x7f24, (q15_t)0xa75, (q15_t)0x7f26, (q15_t)0xa69, - (q15_t)0x7f28, (q15_t)0xa5c, (q15_t)0x7f2a, (q15_t)0xa50, (q15_t)0x7f2c, (q15_t)0xa44, (q15_t)0x7f2e, (q15_t)0xa37, - (q15_t)0x7f30, (q15_t)0xa2b, (q15_t)0x7f32, (q15_t)0xa1e, (q15_t)0x7f34, (q15_t)0xa12, (q15_t)0x7f36, (q15_t)0xa06, - (q15_t)0x7f38, (q15_t)0x9f9, (q15_t)0x7f3a, (q15_t)0x9ed, (q15_t)0x7f3c, (q15_t)0x9e0, (q15_t)0x7f3e, (q15_t)0x9d4, - (q15_t)0x7f40, (q15_t)0x9c7, (q15_t)0x7f42, (q15_t)0x9bb, (q15_t)0x7f43, (q15_t)0x9af, (q15_t)0x7f45, (q15_t)0x9a2, - (q15_t)0x7f47, (q15_t)0x996, (q15_t)0x7f49, (q15_t)0x989, (q15_t)0x7f4b, (q15_t)0x97d, (q15_t)0x7f4d, (q15_t)0x970, - (q15_t)0x7f4f, (q15_t)0x964, (q15_t)0x7f51, (q15_t)0x958, (q15_t)0x7f52, (q15_t)0x94b, (q15_t)0x7f54, (q15_t)0x93f, - (q15_t)0x7f56, (q15_t)0x932, (q15_t)0x7f58, (q15_t)0x926, (q15_t)0x7f5a, (q15_t)0x919, (q15_t)0x7f5b, (q15_t)0x90d, - (q15_t)0x7f5d, (q15_t)0x901, (q15_t)0x7f5f, (q15_t)0x8f4, (q15_t)0x7f61, (q15_t)0x8e8, (q15_t)0x7f62, (q15_t)0x8db, - (q15_t)0x7f64, (q15_t)0x8cf, (q15_t)0x7f66, (q15_t)0x8c2, (q15_t)0x7f68, (q15_t)0x8b6, (q15_t)0x7f69, (q15_t)0x8a9, - (q15_t)0x7f6b, (q15_t)0x89d, (q15_t)0x7f6d, (q15_t)0x891, (q15_t)0x7f6e, (q15_t)0x884, (q15_t)0x7f70, (q15_t)0x878, - (q15_t)0x7f72, (q15_t)0x86b, (q15_t)0x7f73, (q15_t)0x85f, (q15_t)0x7f75, (q15_t)0x852, (q15_t)0x7f77, (q15_t)0x846, - (q15_t)0x7f78, (q15_t)0x839, (q15_t)0x7f7a, (q15_t)0x82d, (q15_t)0x7f7b, (q15_t)0x820, (q15_t)0x7f7d, (q15_t)0x814, - (q15_t)0x7f7f, (q15_t)0x807, (q15_t)0x7f80, (q15_t)0x7fb, (q15_t)0x7f82, (q15_t)0x7ef, (q15_t)0x7f83, (q15_t)0x7e2, - (q15_t)0x7f85, (q15_t)0x7d6, (q15_t)0x7f86, (q15_t)0x7c9, (q15_t)0x7f88, (q15_t)0x7bd, (q15_t)0x7f89, (q15_t)0x7b0, - (q15_t)0x7f8b, (q15_t)0x7a4, (q15_t)0x7f8c, (q15_t)0x797, (q15_t)0x7f8e, (q15_t)0x78b, (q15_t)0x7f8f, (q15_t)0x77e, - (q15_t)0x7f91, (q15_t)0x772, (q15_t)0x7f92, (q15_t)0x765, (q15_t)0x7f94, (q15_t)0x759, (q15_t)0x7f95, (q15_t)0x74c, - (q15_t)0x7f97, (q15_t)0x740, (q15_t)0x7f98, (q15_t)0x733, (q15_t)0x7f99, (q15_t)0x727, (q15_t)0x7f9b, (q15_t)0x71a, - (q15_t)0x7f9c, (q15_t)0x70e, (q15_t)0x7f9e, (q15_t)0x701, (q15_t)0x7f9f, (q15_t)0x6f5, (q15_t)0x7fa0, (q15_t)0x6e8, - (q15_t)0x7fa2, (q15_t)0x6dc, (q15_t)0x7fa3, (q15_t)0x6cf, (q15_t)0x7fa4, (q15_t)0x6c3, (q15_t)0x7fa6, (q15_t)0x6b6, - (q15_t)0x7fa7, (q15_t)0x6aa, (q15_t)0x7fa8, (q15_t)0x69d, (q15_t)0x7faa, (q15_t)0x691, (q15_t)0x7fab, (q15_t)0x684, - (q15_t)0x7fac, (q15_t)0x678, (q15_t)0x7fad, (q15_t)0x66b, (q15_t)0x7faf, (q15_t)0x65f, (q15_t)0x7fb0, (q15_t)0x652, - (q15_t)0x7fb1, (q15_t)0x646, (q15_t)0x7fb2, (q15_t)0x639, (q15_t)0x7fb4, (q15_t)0x62d, (q15_t)0x7fb5, (q15_t)0x620, - (q15_t)0x7fb6, (q15_t)0x614, (q15_t)0x7fb7, (q15_t)0x607, (q15_t)0x7fb8, (q15_t)0x5fb, (q15_t)0x7fb9, (q15_t)0x5ee, - (q15_t)0x7fbb, (q15_t)0x5e2, (q15_t)0x7fbc, (q15_t)0x5d5, (q15_t)0x7fbd, (q15_t)0x5c9, (q15_t)0x7fbe, (q15_t)0x5bc, - (q15_t)0x7fbf, (q15_t)0x5b0, (q15_t)0x7fc0, (q15_t)0x5a3, (q15_t)0x7fc1, (q15_t)0x597, (q15_t)0x7fc3, (q15_t)0x58a, - (q15_t)0x7fc4, (q15_t)0x57e, (q15_t)0x7fc5, (q15_t)0x571, (q15_t)0x7fc6, (q15_t)0x565, (q15_t)0x7fc7, (q15_t)0x558, - (q15_t)0x7fc8, (q15_t)0x54c, (q15_t)0x7fc9, (q15_t)0x53f, (q15_t)0x7fca, (q15_t)0x533, (q15_t)0x7fcb, (q15_t)0x526, - (q15_t)0x7fcc, (q15_t)0x51a, (q15_t)0x7fcd, (q15_t)0x50d, (q15_t)0x7fce, (q15_t)0x500, (q15_t)0x7fcf, (q15_t)0x4f4, - (q15_t)0x7fd0, (q15_t)0x4e7, (q15_t)0x7fd1, (q15_t)0x4db, (q15_t)0x7fd2, (q15_t)0x4ce, (q15_t)0x7fd3, (q15_t)0x4c2, - (q15_t)0x7fd4, (q15_t)0x4b5, (q15_t)0x7fd5, (q15_t)0x4a9, (q15_t)0x7fd5, (q15_t)0x49c, (q15_t)0x7fd6, (q15_t)0x490, - (q15_t)0x7fd7, (q15_t)0x483, (q15_t)0x7fd8, (q15_t)0x477, (q15_t)0x7fd9, (q15_t)0x46a, (q15_t)0x7fda, (q15_t)0x45e, - (q15_t)0x7fdb, (q15_t)0x451, (q15_t)0x7fdc, (q15_t)0x444, (q15_t)0x7fdc, (q15_t)0x438, (q15_t)0x7fdd, (q15_t)0x42b, - (q15_t)0x7fde, (q15_t)0x41f, (q15_t)0x7fdf, (q15_t)0x412, (q15_t)0x7fe0, (q15_t)0x406, (q15_t)0x7fe0, (q15_t)0x3f9, - (q15_t)0x7fe1, (q15_t)0x3ed, (q15_t)0x7fe2, (q15_t)0x3e0, (q15_t)0x7fe3, (q15_t)0x3d4, (q15_t)0x7fe3, (q15_t)0x3c7, - (q15_t)0x7fe4, (q15_t)0x3bb, (q15_t)0x7fe5, (q15_t)0x3ae, (q15_t)0x7fe6, (q15_t)0x3a1, (q15_t)0x7fe6, (q15_t)0x395, - (q15_t)0x7fe7, (q15_t)0x388, (q15_t)0x7fe8, (q15_t)0x37c, (q15_t)0x7fe8, (q15_t)0x36f, (q15_t)0x7fe9, (q15_t)0x363, - (q15_t)0x7fea, (q15_t)0x356, (q15_t)0x7fea, (q15_t)0x34a, (q15_t)0x7feb, (q15_t)0x33d, (q15_t)0x7fec, (q15_t)0x330, - (q15_t)0x7fec, (q15_t)0x324, (q15_t)0x7fed, (q15_t)0x317, (q15_t)0x7fed, (q15_t)0x30b, (q15_t)0x7fee, (q15_t)0x2fe, - (q15_t)0x7fef, (q15_t)0x2f2, (q15_t)0x7fef, (q15_t)0x2e5, (q15_t)0x7ff0, (q15_t)0x2d9, (q15_t)0x7ff0, (q15_t)0x2cc, - (q15_t)0x7ff1, (q15_t)0x2c0, (q15_t)0x7ff1, (q15_t)0x2b3, (q15_t)0x7ff2, (q15_t)0x2a6, (q15_t)0x7ff2, (q15_t)0x29a, - (q15_t)0x7ff3, (q15_t)0x28d, (q15_t)0x7ff3, (q15_t)0x281, (q15_t)0x7ff4, (q15_t)0x274, (q15_t)0x7ff4, (q15_t)0x268, - (q15_t)0x7ff5, (q15_t)0x25b, (q15_t)0x7ff5, (q15_t)0x24e, (q15_t)0x7ff6, (q15_t)0x242, (q15_t)0x7ff6, (q15_t)0x235, - (q15_t)0x7ff7, (q15_t)0x229, (q15_t)0x7ff7, (q15_t)0x21c, (q15_t)0x7ff7, (q15_t)0x210, (q15_t)0x7ff8, (q15_t)0x203, - (q15_t)0x7ff8, (q15_t)0x1f7, (q15_t)0x7ff9, (q15_t)0x1ea, (q15_t)0x7ff9, (q15_t)0x1dd, (q15_t)0x7ff9, (q15_t)0x1d1, - (q15_t)0x7ffa, (q15_t)0x1c4, (q15_t)0x7ffa, (q15_t)0x1b8, (q15_t)0x7ffa, (q15_t)0x1ab, (q15_t)0x7ffb, (q15_t)0x19f, - (q15_t)0x7ffb, (q15_t)0x192, (q15_t)0x7ffb, (q15_t)0x186, (q15_t)0x7ffc, (q15_t)0x179, (q15_t)0x7ffc, (q15_t)0x16c, - (q15_t)0x7ffc, (q15_t)0x160, (q15_t)0x7ffc, (q15_t)0x153, (q15_t)0x7ffd, (q15_t)0x147, (q15_t)0x7ffd, (q15_t)0x13a, - (q15_t)0x7ffd, (q15_t)0x12e, (q15_t)0x7ffd, (q15_t)0x121, (q15_t)0x7ffe, (q15_t)0x114, (q15_t)0x7ffe, (q15_t)0x108, - (q15_t)0x7ffe, (q15_t)0xfb, (q15_t)0x7ffe, (q15_t)0xef, (q15_t)0x7ffe, (q15_t)0xe2, (q15_t)0x7fff, (q15_t)0xd6, - (q15_t)0x7fff, (q15_t)0xc9, (q15_t)0x7fff, (q15_t)0xbc, (q15_t)0x7fff, (q15_t)0xb0, (q15_t)0x7fff, (q15_t)0xa3, - (q15_t)0x7fff, (q15_t)0x97, (q15_t)0x7fff, (q15_t)0x8a, (q15_t)0x7fff, (q15_t)0x7e, (q15_t)0x7fff, (q15_t)0x71, - (q15_t)0x7fff, (q15_t)0x65, (q15_t)0x7fff, (q15_t)0x58, (q15_t)0x7fff, (q15_t)0x4b, (q15_t)0x7fff, (q15_t)0x3f, - (q15_t)0x7fff, (q15_t)0x32, (q15_t)0x7fff, (q15_t)0x26, (q15_t)0x7fff, (q15_t)0x19, (q15_t)0x7fff, (q15_t)0xd, - (q15_t)0x7fff, (q15_t)0x0, (q15_t)0x7fff, (q15_t)0xfff3, (q15_t)0x7fff, (q15_t)0xffe7, (q15_t)0x7fff, (q15_t)0xffda, - (q15_t)0x7fff, (q15_t)0xffce, (q15_t)0x7fff, (q15_t)0xffc1, (q15_t)0x7fff, (q15_t)0xffb5, (q15_t)0x7fff, (q15_t)0xffa8, - (q15_t)0x7fff, (q15_t)0xff9b, (q15_t)0x7fff, (q15_t)0xff8f, (q15_t)0x7fff, (q15_t)0xff82, (q15_t)0x7fff, (q15_t)0xff76, - (q15_t)0x7fff, (q15_t)0xff69, (q15_t)0x7fff, (q15_t)0xff5d, (q15_t)0x7fff, (q15_t)0xff50, (q15_t)0x7fff, (q15_t)0xff44, - (q15_t)0x7fff, (q15_t)0xff37, (q15_t)0x7fff, (q15_t)0xff2a, (q15_t)0x7ffe, (q15_t)0xff1e, (q15_t)0x7ffe, (q15_t)0xff11, - (q15_t)0x7ffe, (q15_t)0xff05, (q15_t)0x7ffe, (q15_t)0xfef8, (q15_t)0x7ffe, (q15_t)0xfeec, (q15_t)0x7ffd, (q15_t)0xfedf, - (q15_t)0x7ffd, (q15_t)0xfed2, (q15_t)0x7ffd, (q15_t)0xfec6, (q15_t)0x7ffd, (q15_t)0xfeb9, (q15_t)0x7ffc, (q15_t)0xfead, - (q15_t)0x7ffc, (q15_t)0xfea0, (q15_t)0x7ffc, (q15_t)0xfe94, (q15_t)0x7ffc, (q15_t)0xfe87, (q15_t)0x7ffb, (q15_t)0xfe7a, - (q15_t)0x7ffb, (q15_t)0xfe6e, (q15_t)0x7ffb, (q15_t)0xfe61, (q15_t)0x7ffa, (q15_t)0xfe55, (q15_t)0x7ffa, (q15_t)0xfe48, - (q15_t)0x7ffa, (q15_t)0xfe3c, (q15_t)0x7ff9, (q15_t)0xfe2f, (q15_t)0x7ff9, (q15_t)0xfe23, (q15_t)0x7ff9, (q15_t)0xfe16, - (q15_t)0x7ff8, (q15_t)0xfe09, (q15_t)0x7ff8, (q15_t)0xfdfd, (q15_t)0x7ff7, (q15_t)0xfdf0, (q15_t)0x7ff7, (q15_t)0xfde4, - (q15_t)0x7ff7, (q15_t)0xfdd7, (q15_t)0x7ff6, (q15_t)0xfdcb, (q15_t)0x7ff6, (q15_t)0xfdbe, (q15_t)0x7ff5, (q15_t)0xfdb2, - (q15_t)0x7ff5, (q15_t)0xfda5, (q15_t)0x7ff4, (q15_t)0xfd98, (q15_t)0x7ff4, (q15_t)0xfd8c, (q15_t)0x7ff3, (q15_t)0xfd7f, - (q15_t)0x7ff3, (q15_t)0xfd73, (q15_t)0x7ff2, (q15_t)0xfd66, (q15_t)0x7ff2, (q15_t)0xfd5a, (q15_t)0x7ff1, (q15_t)0xfd4d, - (q15_t)0x7ff1, (q15_t)0xfd40, (q15_t)0x7ff0, (q15_t)0xfd34, (q15_t)0x7ff0, (q15_t)0xfd27, (q15_t)0x7fef, (q15_t)0xfd1b, - (q15_t)0x7fef, (q15_t)0xfd0e, (q15_t)0x7fee, (q15_t)0xfd02, (q15_t)0x7fed, (q15_t)0xfcf5, (q15_t)0x7fed, (q15_t)0xfce9, - (q15_t)0x7fec, (q15_t)0xfcdc, (q15_t)0x7fec, (q15_t)0xfcd0, (q15_t)0x7feb, (q15_t)0xfcc3, (q15_t)0x7fea, (q15_t)0xfcb6, - (q15_t)0x7fea, (q15_t)0xfcaa, (q15_t)0x7fe9, (q15_t)0xfc9d, (q15_t)0x7fe8, (q15_t)0xfc91, (q15_t)0x7fe8, (q15_t)0xfc84, - (q15_t)0x7fe7, (q15_t)0xfc78, (q15_t)0x7fe6, (q15_t)0xfc6b, (q15_t)0x7fe6, (q15_t)0xfc5f, (q15_t)0x7fe5, (q15_t)0xfc52, - (q15_t)0x7fe4, (q15_t)0xfc45, (q15_t)0x7fe3, (q15_t)0xfc39, (q15_t)0x7fe3, (q15_t)0xfc2c, (q15_t)0x7fe2, (q15_t)0xfc20, - (q15_t)0x7fe1, (q15_t)0xfc13, (q15_t)0x7fe0, (q15_t)0xfc07, (q15_t)0x7fe0, (q15_t)0xfbfa, (q15_t)0x7fdf, (q15_t)0xfbee, - (q15_t)0x7fde, (q15_t)0xfbe1, (q15_t)0x7fdd, (q15_t)0xfbd5, (q15_t)0x7fdc, (q15_t)0xfbc8, (q15_t)0x7fdc, (q15_t)0xfbbc, - (q15_t)0x7fdb, (q15_t)0xfbaf, (q15_t)0x7fda, (q15_t)0xfba2, (q15_t)0x7fd9, (q15_t)0xfb96, (q15_t)0x7fd8, (q15_t)0xfb89, - (q15_t)0x7fd7, (q15_t)0xfb7d, (q15_t)0x7fd6, (q15_t)0xfb70, (q15_t)0x7fd5, (q15_t)0xfb64, (q15_t)0x7fd5, (q15_t)0xfb57, - (q15_t)0x7fd4, (q15_t)0xfb4b, (q15_t)0x7fd3, (q15_t)0xfb3e, (q15_t)0x7fd2, (q15_t)0xfb32, (q15_t)0x7fd1, (q15_t)0xfb25, - (q15_t)0x7fd0, (q15_t)0xfb19, (q15_t)0x7fcf, (q15_t)0xfb0c, (q15_t)0x7fce, (q15_t)0xfb00, (q15_t)0x7fcd, (q15_t)0xfaf3, - (q15_t)0x7fcc, (q15_t)0xfae6, (q15_t)0x7fcb, (q15_t)0xfada, (q15_t)0x7fca, (q15_t)0xfacd, (q15_t)0x7fc9, (q15_t)0xfac1, - (q15_t)0x7fc8, (q15_t)0xfab4, (q15_t)0x7fc7, (q15_t)0xfaa8, (q15_t)0x7fc6, (q15_t)0xfa9b, (q15_t)0x7fc5, (q15_t)0xfa8f, - (q15_t)0x7fc4, (q15_t)0xfa82, (q15_t)0x7fc3, (q15_t)0xfa76, (q15_t)0x7fc1, (q15_t)0xfa69, (q15_t)0x7fc0, (q15_t)0xfa5d, - (q15_t)0x7fbf, (q15_t)0xfa50, (q15_t)0x7fbe, (q15_t)0xfa44, (q15_t)0x7fbd, (q15_t)0xfa37, (q15_t)0x7fbc, (q15_t)0xfa2b, - (q15_t)0x7fbb, (q15_t)0xfa1e, (q15_t)0x7fb9, (q15_t)0xfa12, (q15_t)0x7fb8, (q15_t)0xfa05, (q15_t)0x7fb7, (q15_t)0xf9f9, - (q15_t)0x7fb6, (q15_t)0xf9ec, (q15_t)0x7fb5, (q15_t)0xf9e0, (q15_t)0x7fb4, (q15_t)0xf9d3, (q15_t)0x7fb2, (q15_t)0xf9c7, - (q15_t)0x7fb1, (q15_t)0xf9ba, (q15_t)0x7fb0, (q15_t)0xf9ae, (q15_t)0x7faf, (q15_t)0xf9a1, (q15_t)0x7fad, (q15_t)0xf995, - (q15_t)0x7fac, (q15_t)0xf988, (q15_t)0x7fab, (q15_t)0xf97c, (q15_t)0x7faa, (q15_t)0xf96f, (q15_t)0x7fa8, (q15_t)0xf963, - (q15_t)0x7fa7, (q15_t)0xf956, (q15_t)0x7fa6, (q15_t)0xf94a, (q15_t)0x7fa4, (q15_t)0xf93d, (q15_t)0x7fa3, (q15_t)0xf931, - (q15_t)0x7fa2, (q15_t)0xf924, (q15_t)0x7fa0, (q15_t)0xf918, (q15_t)0x7f9f, (q15_t)0xf90b, (q15_t)0x7f9e, (q15_t)0xf8ff, - (q15_t)0x7f9c, (q15_t)0xf8f2, (q15_t)0x7f9b, (q15_t)0xf8e6, (q15_t)0x7f99, (q15_t)0xf8d9, (q15_t)0x7f98, (q15_t)0xf8cd, - (q15_t)0x7f97, (q15_t)0xf8c0, (q15_t)0x7f95, (q15_t)0xf8b4, (q15_t)0x7f94, (q15_t)0xf8a7, (q15_t)0x7f92, (q15_t)0xf89b, - (q15_t)0x7f91, (q15_t)0xf88e, (q15_t)0x7f8f, (q15_t)0xf882, (q15_t)0x7f8e, (q15_t)0xf875, (q15_t)0x7f8c, (q15_t)0xf869, - (q15_t)0x7f8b, (q15_t)0xf85c, (q15_t)0x7f89, (q15_t)0xf850, (q15_t)0x7f88, (q15_t)0xf843, (q15_t)0x7f86, (q15_t)0xf837, - (q15_t)0x7f85, (q15_t)0xf82a, (q15_t)0x7f83, (q15_t)0xf81e, (q15_t)0x7f82, (q15_t)0xf811, (q15_t)0x7f80, (q15_t)0xf805, - (q15_t)0x7f7f, (q15_t)0xf7f9, (q15_t)0x7f7d, (q15_t)0xf7ec, (q15_t)0x7f7b, (q15_t)0xf7e0, (q15_t)0x7f7a, (q15_t)0xf7d3, - (q15_t)0x7f78, (q15_t)0xf7c7, (q15_t)0x7f77, (q15_t)0xf7ba, (q15_t)0x7f75, (q15_t)0xf7ae, (q15_t)0x7f73, (q15_t)0xf7a1, - (q15_t)0x7f72, (q15_t)0xf795, (q15_t)0x7f70, (q15_t)0xf788, (q15_t)0x7f6e, (q15_t)0xf77c, (q15_t)0x7f6d, (q15_t)0xf76f, - (q15_t)0x7f6b, (q15_t)0xf763, (q15_t)0x7f69, (q15_t)0xf757, (q15_t)0x7f68, (q15_t)0xf74a, (q15_t)0x7f66, (q15_t)0xf73e, - (q15_t)0x7f64, (q15_t)0xf731, (q15_t)0x7f62, (q15_t)0xf725, (q15_t)0x7f61, (q15_t)0xf718, (q15_t)0x7f5f, (q15_t)0xf70c, - (q15_t)0x7f5d, (q15_t)0xf6ff, (q15_t)0x7f5b, (q15_t)0xf6f3, (q15_t)0x7f5a, (q15_t)0xf6e7, (q15_t)0x7f58, (q15_t)0xf6da, - (q15_t)0x7f56, (q15_t)0xf6ce, (q15_t)0x7f54, (q15_t)0xf6c1, (q15_t)0x7f52, (q15_t)0xf6b5, (q15_t)0x7f51, (q15_t)0xf6a8, - (q15_t)0x7f4f, (q15_t)0xf69c, (q15_t)0x7f4d, (q15_t)0xf690, (q15_t)0x7f4b, (q15_t)0xf683, (q15_t)0x7f49, (q15_t)0xf677, - (q15_t)0x7f47, (q15_t)0xf66a, (q15_t)0x7f45, (q15_t)0xf65e, (q15_t)0x7f43, (q15_t)0xf651, (q15_t)0x7f42, (q15_t)0xf645, - (q15_t)0x7f40, (q15_t)0xf639, (q15_t)0x7f3e, (q15_t)0xf62c, (q15_t)0x7f3c, (q15_t)0xf620, (q15_t)0x7f3a, (q15_t)0xf613, - (q15_t)0x7f38, (q15_t)0xf607, (q15_t)0x7f36, (q15_t)0xf5fa, (q15_t)0x7f34, (q15_t)0xf5ee, (q15_t)0x7f32, (q15_t)0xf5e2, - (q15_t)0x7f30, (q15_t)0xf5d5, (q15_t)0x7f2e, (q15_t)0xf5c9, (q15_t)0x7f2c, (q15_t)0xf5bc, (q15_t)0x7f2a, (q15_t)0xf5b0, - (q15_t)0x7f28, (q15_t)0xf5a4, (q15_t)0x7f26, (q15_t)0xf597, (q15_t)0x7f24, (q15_t)0xf58b, (q15_t)0x7f22, (q15_t)0xf57e, - (q15_t)0x7f20, (q15_t)0xf572, (q15_t)0x7f1e, (q15_t)0xf566, (q15_t)0x7f1c, (q15_t)0xf559, (q15_t)0x7f19, (q15_t)0xf54d, - (q15_t)0x7f17, (q15_t)0xf540, (q15_t)0x7f15, (q15_t)0xf534, (q15_t)0x7f13, (q15_t)0xf528, (q15_t)0x7f11, (q15_t)0xf51b, - (q15_t)0x7f0f, (q15_t)0xf50f, (q15_t)0x7f0d, (q15_t)0xf503, (q15_t)0x7f0a, (q15_t)0xf4f6, (q15_t)0x7f08, (q15_t)0xf4ea, - (q15_t)0x7f06, (q15_t)0xf4dd, (q15_t)0x7f04, (q15_t)0xf4d1, (q15_t)0x7f02, (q15_t)0xf4c5, (q15_t)0x7f00, (q15_t)0xf4b8, - (q15_t)0x7efd, (q15_t)0xf4ac, (q15_t)0x7efb, (q15_t)0xf4a0, (q15_t)0x7ef9, (q15_t)0xf493, (q15_t)0x7ef7, (q15_t)0xf487, - (q15_t)0x7ef4, (q15_t)0xf47b, (q15_t)0x7ef2, (q15_t)0xf46e, (q15_t)0x7ef0, (q15_t)0xf462, (q15_t)0x7eed, (q15_t)0xf455, - (q15_t)0x7eeb, (q15_t)0xf449, (q15_t)0x7ee9, (q15_t)0xf43d, (q15_t)0x7ee7, (q15_t)0xf430, (q15_t)0x7ee4, (q15_t)0xf424, - (q15_t)0x7ee2, (q15_t)0xf418, (q15_t)0x7ee0, (q15_t)0xf40b, (q15_t)0x7edd, (q15_t)0xf3ff, (q15_t)0x7edb, (q15_t)0xf3f3, - (q15_t)0x7ed8, (q15_t)0xf3e6, (q15_t)0x7ed6, (q15_t)0xf3da, (q15_t)0x7ed4, (q15_t)0xf3ce, (q15_t)0x7ed1, (q15_t)0xf3c1, - (q15_t)0x7ecf, (q15_t)0xf3b5, (q15_t)0x7ecc, (q15_t)0xf3a9, (q15_t)0x7eca, (q15_t)0xf39c, (q15_t)0x7ec8, (q15_t)0xf390, - (q15_t)0x7ec5, (q15_t)0xf384, (q15_t)0x7ec3, (q15_t)0xf377, (q15_t)0x7ec0, (q15_t)0xf36b, (q15_t)0x7ebe, (q15_t)0xf35f, - (q15_t)0x7ebb, (q15_t)0xf352, (q15_t)0x7eb9, (q15_t)0xf346, (q15_t)0x7eb6, (q15_t)0xf33a, (q15_t)0x7eb4, (q15_t)0xf32d, - (q15_t)0x7eb1, (q15_t)0xf321, (q15_t)0x7eaf, (q15_t)0xf315, (q15_t)0x7eac, (q15_t)0xf308, (q15_t)0x7eaa, (q15_t)0xf2fc, - (q15_t)0x7ea7, (q15_t)0xf2f0, (q15_t)0x7ea5, (q15_t)0xf2e4, (q15_t)0x7ea2, (q15_t)0xf2d7, (q15_t)0x7e9f, (q15_t)0xf2cb, - (q15_t)0x7e9d, (q15_t)0xf2bf, (q15_t)0x7e9a, (q15_t)0xf2b2, (q15_t)0x7e98, (q15_t)0xf2a6, (q15_t)0x7e95, (q15_t)0xf29a, - (q15_t)0x7e92, (q15_t)0xf28e, (q15_t)0x7e90, (q15_t)0xf281, (q15_t)0x7e8d, (q15_t)0xf275, (q15_t)0x7e8a, (q15_t)0xf269, - (q15_t)0x7e88, (q15_t)0xf25c, (q15_t)0x7e85, (q15_t)0xf250, (q15_t)0x7e82, (q15_t)0xf244, (q15_t)0x7e80, (q15_t)0xf238, - (q15_t)0x7e7d, (q15_t)0xf22b, (q15_t)0x7e7a, (q15_t)0xf21f, (q15_t)0x7e77, (q15_t)0xf213, (q15_t)0x7e75, (q15_t)0xf207, - (q15_t)0x7e72, (q15_t)0xf1fa, (q15_t)0x7e6f, (q15_t)0xf1ee, (q15_t)0x7e6c, (q15_t)0xf1e2, (q15_t)0x7e6a, (q15_t)0xf1d5, - (q15_t)0x7e67, (q15_t)0xf1c9, (q15_t)0x7e64, (q15_t)0xf1bd, (q15_t)0x7e61, (q15_t)0xf1b1, (q15_t)0x7e5e, (q15_t)0xf1a4, - (q15_t)0x7e5c, (q15_t)0xf198, (q15_t)0x7e59, (q15_t)0xf18c, (q15_t)0x7e56, (q15_t)0xf180, (q15_t)0x7e53, (q15_t)0xf174, - (q15_t)0x7e50, (q15_t)0xf167, (q15_t)0x7e4d, (q15_t)0xf15b, (q15_t)0x7e4a, (q15_t)0xf14f, (q15_t)0x7e48, (q15_t)0xf143, - (q15_t)0x7e45, (q15_t)0xf136, (q15_t)0x7e42, (q15_t)0xf12a, (q15_t)0x7e3f, (q15_t)0xf11e, (q15_t)0x7e3c, (q15_t)0xf112, - (q15_t)0x7e39, (q15_t)0xf105, (q15_t)0x7e36, (q15_t)0xf0f9, (q15_t)0x7e33, (q15_t)0xf0ed, (q15_t)0x7e30, (q15_t)0xf0e1, - (q15_t)0x7e2d, (q15_t)0xf0d5, (q15_t)0x7e2a, (q15_t)0xf0c8, (q15_t)0x7e27, (q15_t)0xf0bc, (q15_t)0x7e24, (q15_t)0xf0b0, - (q15_t)0x7e21, (q15_t)0xf0a4, (q15_t)0x7e1e, (q15_t)0xf098, (q15_t)0x7e1b, (q15_t)0xf08b, (q15_t)0x7e18, (q15_t)0xf07f, - (q15_t)0x7e15, (q15_t)0xf073, (q15_t)0x7e12, (q15_t)0xf067, (q15_t)0x7e0f, (q15_t)0xf05b, (q15_t)0x7e0c, (q15_t)0xf04e, - (q15_t)0x7e09, (q15_t)0xf042, (q15_t)0x7e06, (q15_t)0xf036, (q15_t)0x7e03, (q15_t)0xf02a, (q15_t)0x7dff, (q15_t)0xf01e, - (q15_t)0x7dfc, (q15_t)0xf012, (q15_t)0x7df9, (q15_t)0xf005, (q15_t)0x7df6, (q15_t)0xeff9, (q15_t)0x7df3, (q15_t)0xefed, - (q15_t)0x7df0, (q15_t)0xefe1, (q15_t)0x7ded, (q15_t)0xefd5, (q15_t)0x7de9, (q15_t)0xefc9, (q15_t)0x7de6, (q15_t)0xefbc, - (q15_t)0x7de3, (q15_t)0xefb0, (q15_t)0x7de0, (q15_t)0xefa4, (q15_t)0x7ddd, (q15_t)0xef98, (q15_t)0x7dd9, (q15_t)0xef8c, - (q15_t)0x7dd6, (q15_t)0xef80, (q15_t)0x7dd3, (q15_t)0xef74, (q15_t)0x7dd0, (q15_t)0xef67, (q15_t)0x7dcc, (q15_t)0xef5b, - (q15_t)0x7dc9, (q15_t)0xef4f, (q15_t)0x7dc6, (q15_t)0xef43, (q15_t)0x7dc2, (q15_t)0xef37, (q15_t)0x7dbf, (q15_t)0xef2b, - (q15_t)0x7dbc, (q15_t)0xef1f, (q15_t)0x7db9, (q15_t)0xef13, (q15_t)0x7db5, (q15_t)0xef06, (q15_t)0x7db2, (q15_t)0xeefa, - (q15_t)0x7daf, (q15_t)0xeeee, (q15_t)0x7dab, (q15_t)0xeee2, (q15_t)0x7da8, (q15_t)0xeed6, (q15_t)0x7da4, (q15_t)0xeeca, - (q15_t)0x7da1, (q15_t)0xeebe, (q15_t)0x7d9e, (q15_t)0xeeb2, (q15_t)0x7d9a, (q15_t)0xeea6, (q15_t)0x7d97, (q15_t)0xee99, - (q15_t)0x7d93, (q15_t)0xee8d, (q15_t)0x7d90, (q15_t)0xee81, (q15_t)0x7d8d, (q15_t)0xee75, (q15_t)0x7d89, (q15_t)0xee69, - (q15_t)0x7d86, (q15_t)0xee5d, (q15_t)0x7d82, (q15_t)0xee51, (q15_t)0x7d7f, (q15_t)0xee45, (q15_t)0x7d7b, (q15_t)0xee39, - (q15_t)0x7d78, (q15_t)0xee2d, (q15_t)0x7d74, (q15_t)0xee21, (q15_t)0x7d71, (q15_t)0xee15, (q15_t)0x7d6d, (q15_t)0xee09, - (q15_t)0x7d6a, (q15_t)0xedfc, (q15_t)0x7d66, (q15_t)0xedf0, (q15_t)0x7d63, (q15_t)0xede4, (q15_t)0x7d5f, (q15_t)0xedd8, - (q15_t)0x7d5b, (q15_t)0xedcc, (q15_t)0x7d58, (q15_t)0xedc0, (q15_t)0x7d54, (q15_t)0xedb4, (q15_t)0x7d51, (q15_t)0xeda8, - (q15_t)0x7d4d, (q15_t)0xed9c, (q15_t)0x7d49, (q15_t)0xed90, (q15_t)0x7d46, (q15_t)0xed84, (q15_t)0x7d42, (q15_t)0xed78, - (q15_t)0x7d3f, (q15_t)0xed6c, (q15_t)0x7d3b, (q15_t)0xed60, (q15_t)0x7d37, (q15_t)0xed54, (q15_t)0x7d34, (q15_t)0xed48, - (q15_t)0x7d30, (q15_t)0xed3c, (q15_t)0x7d2c, (q15_t)0xed30, (q15_t)0x7d28, (q15_t)0xed24, (q15_t)0x7d25, (q15_t)0xed18, - (q15_t)0x7d21, (q15_t)0xed0c, (q15_t)0x7d1d, (q15_t)0xed00, (q15_t)0x7d1a, (q15_t)0xecf4, (q15_t)0x7d16, (q15_t)0xece8, - (q15_t)0x7d12, (q15_t)0xecdc, (q15_t)0x7d0e, (q15_t)0xecd0, (q15_t)0x7d0b, (q15_t)0xecc4, (q15_t)0x7d07, (q15_t)0xecb8, - (q15_t)0x7d03, (q15_t)0xecac, (q15_t)0x7cff, (q15_t)0xeca0, (q15_t)0x7cfb, (q15_t)0xec94, (q15_t)0x7cf8, (q15_t)0xec88, - (q15_t)0x7cf4, (q15_t)0xec7c, (q15_t)0x7cf0, (q15_t)0xec70, (q15_t)0x7cec, (q15_t)0xec64, (q15_t)0x7ce8, (q15_t)0xec58, - (q15_t)0x7ce4, (q15_t)0xec4c, (q15_t)0x7ce0, (q15_t)0xec40, (q15_t)0x7cdd, (q15_t)0xec34, (q15_t)0x7cd9, (q15_t)0xec28, - (q15_t)0x7cd5, (q15_t)0xec1c, (q15_t)0x7cd1, (q15_t)0xec10, (q15_t)0x7ccd, (q15_t)0xec05, (q15_t)0x7cc9, (q15_t)0xebf9, - (q15_t)0x7cc5, (q15_t)0xebed, (q15_t)0x7cc1, (q15_t)0xebe1, (q15_t)0x7cbd, (q15_t)0xebd5, (q15_t)0x7cb9, (q15_t)0xebc9, - (q15_t)0x7cb5, (q15_t)0xebbd, (q15_t)0x7cb1, (q15_t)0xebb1, (q15_t)0x7cad, (q15_t)0xeba5, (q15_t)0x7ca9, (q15_t)0xeb99, - (q15_t)0x7ca5, (q15_t)0xeb8d, (q15_t)0x7ca1, (q15_t)0xeb81, (q15_t)0x7c9d, (q15_t)0xeb75, (q15_t)0x7c99, (q15_t)0xeb6a, - (q15_t)0x7c95, (q15_t)0xeb5e, (q15_t)0x7c91, (q15_t)0xeb52, (q15_t)0x7c8d, (q15_t)0xeb46, (q15_t)0x7c89, (q15_t)0xeb3a, - (q15_t)0x7c85, (q15_t)0xeb2e, (q15_t)0x7c81, (q15_t)0xeb22, (q15_t)0x7c7d, (q15_t)0xeb16, (q15_t)0x7c79, (q15_t)0xeb0a, - (q15_t)0x7c74, (q15_t)0xeaff, (q15_t)0x7c70, (q15_t)0xeaf3, (q15_t)0x7c6c, (q15_t)0xeae7, (q15_t)0x7c68, (q15_t)0xeadb, - (q15_t)0x7c64, (q15_t)0xeacf, (q15_t)0x7c60, (q15_t)0xeac3, (q15_t)0x7c5b, (q15_t)0xeab7, (q15_t)0x7c57, (q15_t)0xeaac, - (q15_t)0x7c53, (q15_t)0xeaa0, (q15_t)0x7c4f, (q15_t)0xea94, (q15_t)0x7c4b, (q15_t)0xea88, (q15_t)0x7c46, (q15_t)0xea7c, - (q15_t)0x7c42, (q15_t)0xea70, (q15_t)0x7c3e, (q15_t)0xea65, (q15_t)0x7c3a, (q15_t)0xea59, (q15_t)0x7c36, (q15_t)0xea4d, - (q15_t)0x7c31, (q15_t)0xea41, (q15_t)0x7c2d, (q15_t)0xea35, (q15_t)0x7c29, (q15_t)0xea29, (q15_t)0x7c24, (q15_t)0xea1e, - (q15_t)0x7c20, (q15_t)0xea12, (q15_t)0x7c1c, (q15_t)0xea06, (q15_t)0x7c17, (q15_t)0xe9fa, (q15_t)0x7c13, (q15_t)0xe9ee, - (q15_t)0x7c0f, (q15_t)0xe9e3, (q15_t)0x7c0a, (q15_t)0xe9d7, (q15_t)0x7c06, (q15_t)0xe9cb, (q15_t)0x7c02, (q15_t)0xe9bf, - (q15_t)0x7bfd, (q15_t)0xe9b4, (q15_t)0x7bf9, (q15_t)0xe9a8, (q15_t)0x7bf5, (q15_t)0xe99c, (q15_t)0x7bf0, (q15_t)0xe990, - (q15_t)0x7bec, (q15_t)0xe984, (q15_t)0x7be7, (q15_t)0xe979, (q15_t)0x7be3, (q15_t)0xe96d, (q15_t)0x7bde, (q15_t)0xe961, - (q15_t)0x7bda, (q15_t)0xe955, (q15_t)0x7bd6, (q15_t)0xe94a, (q15_t)0x7bd1, (q15_t)0xe93e, (q15_t)0x7bcd, (q15_t)0xe932, - (q15_t)0x7bc8, (q15_t)0xe926, (q15_t)0x7bc4, (q15_t)0xe91b, (q15_t)0x7bbf, (q15_t)0xe90f, (q15_t)0x7bbb, (q15_t)0xe903, - (q15_t)0x7bb6, (q15_t)0xe8f7, (q15_t)0x7bb2, (q15_t)0xe8ec, (q15_t)0x7bad, (q15_t)0xe8e0, (q15_t)0x7ba9, (q15_t)0xe8d4, - (q15_t)0x7ba4, (q15_t)0xe8c9, (q15_t)0x7b9f, (q15_t)0xe8bd, (q15_t)0x7b9b, (q15_t)0xe8b1, (q15_t)0x7b96, (q15_t)0xe8a5, - (q15_t)0x7b92, (q15_t)0xe89a, (q15_t)0x7b8d, (q15_t)0xe88e, (q15_t)0x7b88, (q15_t)0xe882, (q15_t)0x7b84, (q15_t)0xe877, - (q15_t)0x7b7f, (q15_t)0xe86b, (q15_t)0x7b7b, (q15_t)0xe85f, (q15_t)0x7b76, (q15_t)0xe854, (q15_t)0x7b71, (q15_t)0xe848, - (q15_t)0x7b6d, (q15_t)0xe83c, (q15_t)0x7b68, (q15_t)0xe831, (q15_t)0x7b63, (q15_t)0xe825, (q15_t)0x7b5f, (q15_t)0xe819, - (q15_t)0x7b5a, (q15_t)0xe80e, (q15_t)0x7b55, (q15_t)0xe802, (q15_t)0x7b50, (q15_t)0xe7f6, (q15_t)0x7b4c, (q15_t)0xe7eb, - (q15_t)0x7b47, (q15_t)0xe7df, (q15_t)0x7b42, (q15_t)0xe7d3, (q15_t)0x7b3e, (q15_t)0xe7c8, (q15_t)0x7b39, (q15_t)0xe7bc, - (q15_t)0x7b34, (q15_t)0xe7b1, (q15_t)0x7b2f, (q15_t)0xe7a5, (q15_t)0x7b2a, (q15_t)0xe799, (q15_t)0x7b26, (q15_t)0xe78e, - (q15_t)0x7b21, (q15_t)0xe782, (q15_t)0x7b1c, (q15_t)0xe777, (q15_t)0x7b17, (q15_t)0xe76b, (q15_t)0x7b12, (q15_t)0xe75f, - (q15_t)0x7b0e, (q15_t)0xe754, (q15_t)0x7b09, (q15_t)0xe748, (q15_t)0x7b04, (q15_t)0xe73d, (q15_t)0x7aff, (q15_t)0xe731, - (q15_t)0x7afa, (q15_t)0xe725, (q15_t)0x7af5, (q15_t)0xe71a, (q15_t)0x7af0, (q15_t)0xe70e, (q15_t)0x7aeb, (q15_t)0xe703, - (q15_t)0x7ae6, (q15_t)0xe6f7, (q15_t)0x7ae2, (q15_t)0xe6ec, (q15_t)0x7add, (q15_t)0xe6e0, (q15_t)0x7ad8, (q15_t)0xe6d4, - (q15_t)0x7ad3, (q15_t)0xe6c9, (q15_t)0x7ace, (q15_t)0xe6bd, (q15_t)0x7ac9, (q15_t)0xe6b2, (q15_t)0x7ac4, (q15_t)0xe6a6, - (q15_t)0x7abf, (q15_t)0xe69b, (q15_t)0x7aba, (q15_t)0xe68f, (q15_t)0x7ab5, (q15_t)0xe684, (q15_t)0x7ab0, (q15_t)0xe678, - (q15_t)0x7aab, (q15_t)0xe66d, (q15_t)0x7aa6, (q15_t)0xe661, (q15_t)0x7aa1, (q15_t)0xe656, (q15_t)0x7a9c, (q15_t)0xe64a, - (q15_t)0x7a97, (q15_t)0xe63f, (q15_t)0x7a92, (q15_t)0xe633, (q15_t)0x7a8d, (q15_t)0xe628, (q15_t)0x7a88, (q15_t)0xe61c, - (q15_t)0x7a82, (q15_t)0xe611, (q15_t)0x7a7d, (q15_t)0xe605, (q15_t)0x7a78, (q15_t)0xe5fa, (q15_t)0x7a73, (q15_t)0xe5ee, - (q15_t)0x7a6e, (q15_t)0xe5e3, (q15_t)0x7a69, (q15_t)0xe5d7, (q15_t)0x7a64, (q15_t)0xe5cc, (q15_t)0x7a5f, (q15_t)0xe5c0, - (q15_t)0x7a59, (q15_t)0xe5b5, (q15_t)0x7a54, (q15_t)0xe5a9, (q15_t)0x7a4f, (q15_t)0xe59e, (q15_t)0x7a4a, (q15_t)0xe592, - (q15_t)0x7a45, (q15_t)0xe587, (q15_t)0x7a3f, (q15_t)0xe57c, (q15_t)0x7a3a, (q15_t)0xe570, (q15_t)0x7a35, (q15_t)0xe565, - (q15_t)0x7a30, (q15_t)0xe559, (q15_t)0x7a2b, (q15_t)0xe54e, (q15_t)0x7a25, (q15_t)0xe542, (q15_t)0x7a20, (q15_t)0xe537, - (q15_t)0x7a1b, (q15_t)0xe52c, (q15_t)0x7a16, (q15_t)0xe520, (q15_t)0x7a10, (q15_t)0xe515, (q15_t)0x7a0b, (q15_t)0xe509, - (q15_t)0x7a06, (q15_t)0xe4fe, (q15_t)0x7a00, (q15_t)0xe4f3, (q15_t)0x79fb, (q15_t)0xe4e7, (q15_t)0x79f6, (q15_t)0xe4dc, - (q15_t)0x79f0, (q15_t)0xe4d0, (q15_t)0x79eb, (q15_t)0xe4c5, (q15_t)0x79e6, (q15_t)0xe4ba, (q15_t)0x79e0, (q15_t)0xe4ae, - (q15_t)0x79db, (q15_t)0xe4a3, (q15_t)0x79d6, (q15_t)0xe498, (q15_t)0x79d0, (q15_t)0xe48c, (q15_t)0x79cb, (q15_t)0xe481, - (q15_t)0x79c5, (q15_t)0xe476, (q15_t)0x79c0, (q15_t)0xe46a, (q15_t)0x79bb, (q15_t)0xe45f, (q15_t)0x79b5, (q15_t)0xe454, - (q15_t)0x79b0, (q15_t)0xe448, (q15_t)0x79aa, (q15_t)0xe43d, (q15_t)0x79a5, (q15_t)0xe432, (q15_t)0x799f, (q15_t)0xe426, - (q15_t)0x799a, (q15_t)0xe41b, (q15_t)0x7994, (q15_t)0xe410, (q15_t)0x798f, (q15_t)0xe404, (q15_t)0x7989, (q15_t)0xe3f9, - (q15_t)0x7984, (q15_t)0xe3ee, (q15_t)0x797e, (q15_t)0xe3e2, (q15_t)0x7979, (q15_t)0xe3d7, (q15_t)0x7973, (q15_t)0xe3cc, - (q15_t)0x796e, (q15_t)0xe3c1, (q15_t)0x7968, (q15_t)0xe3b5, (q15_t)0x7963, (q15_t)0xe3aa, (q15_t)0x795d, (q15_t)0xe39f, - (q15_t)0x7958, (q15_t)0xe394, (q15_t)0x7952, (q15_t)0xe388, (q15_t)0x794c, (q15_t)0xe37d, (q15_t)0x7947, (q15_t)0xe372, - (q15_t)0x7941, (q15_t)0xe367, (q15_t)0x793b, (q15_t)0xe35b, (q15_t)0x7936, (q15_t)0xe350, (q15_t)0x7930, (q15_t)0xe345, - (q15_t)0x792b, (q15_t)0xe33a, (q15_t)0x7925, (q15_t)0xe32e, (q15_t)0x791f, (q15_t)0xe323, (q15_t)0x791a, (q15_t)0xe318, - (q15_t)0x7914, (q15_t)0xe30d, (q15_t)0x790e, (q15_t)0xe301, (q15_t)0x7909, (q15_t)0xe2f6, (q15_t)0x7903, (q15_t)0xe2eb, - (q15_t)0x78fd, (q15_t)0xe2e0, (q15_t)0x78f7, (q15_t)0xe2d5, (q15_t)0x78f2, (q15_t)0xe2ca, (q15_t)0x78ec, (q15_t)0xe2be, - (q15_t)0x78e6, (q15_t)0xe2b3, (q15_t)0x78e0, (q15_t)0xe2a8, (q15_t)0x78db, (q15_t)0xe29d, (q15_t)0x78d5, (q15_t)0xe292, - (q15_t)0x78cf, (q15_t)0xe287, (q15_t)0x78c9, (q15_t)0xe27b, (q15_t)0x78c3, (q15_t)0xe270, (q15_t)0x78be, (q15_t)0xe265, - (q15_t)0x78b8, (q15_t)0xe25a, (q15_t)0x78b2, (q15_t)0xe24f, (q15_t)0x78ac, (q15_t)0xe244, (q15_t)0x78a6, (q15_t)0xe239, - (q15_t)0x78a1, (q15_t)0xe22d, (q15_t)0x789b, (q15_t)0xe222, (q15_t)0x7895, (q15_t)0xe217, (q15_t)0x788f, (q15_t)0xe20c, - (q15_t)0x7889, (q15_t)0xe201, (q15_t)0x7883, (q15_t)0xe1f6, (q15_t)0x787d, (q15_t)0xe1eb, (q15_t)0x7877, (q15_t)0xe1e0, - (q15_t)0x7871, (q15_t)0xe1d5, (q15_t)0x786b, (q15_t)0xe1ca, (q15_t)0x7866, (q15_t)0xe1be, (q15_t)0x7860, (q15_t)0xe1b3, - (q15_t)0x785a, (q15_t)0xe1a8, (q15_t)0x7854, (q15_t)0xe19d, (q15_t)0x784e, (q15_t)0xe192, (q15_t)0x7848, (q15_t)0xe187, - (q15_t)0x7842, (q15_t)0xe17c, (q15_t)0x783c, (q15_t)0xe171, (q15_t)0x7836, (q15_t)0xe166, (q15_t)0x7830, (q15_t)0xe15b, - (q15_t)0x782a, (q15_t)0xe150, (q15_t)0x7824, (q15_t)0xe145, (q15_t)0x781e, (q15_t)0xe13a, (q15_t)0x7818, (q15_t)0xe12f, - (q15_t)0x7812, (q15_t)0xe124, (q15_t)0x780b, (q15_t)0xe119, (q15_t)0x7805, (q15_t)0xe10e, (q15_t)0x77ff, (q15_t)0xe103, - (q15_t)0x77f9, (q15_t)0xe0f8, (q15_t)0x77f3, (q15_t)0xe0ed, (q15_t)0x77ed, (q15_t)0xe0e2, (q15_t)0x77e7, (q15_t)0xe0d7, - (q15_t)0x77e1, (q15_t)0xe0cc, (q15_t)0x77db, (q15_t)0xe0c1, (q15_t)0x77d5, (q15_t)0xe0b6, (q15_t)0x77ce, (q15_t)0xe0ab, - (q15_t)0x77c8, (q15_t)0xe0a0, (q15_t)0x77c2, (q15_t)0xe095, (q15_t)0x77bc, (q15_t)0xe08a, (q15_t)0x77b6, (q15_t)0xe07f, - (q15_t)0x77b0, (q15_t)0xe074, (q15_t)0x77a9, (q15_t)0xe069, (q15_t)0x77a3, (q15_t)0xe05e, (q15_t)0x779d, (q15_t)0xe054, - (q15_t)0x7797, (q15_t)0xe049, (q15_t)0x7790, (q15_t)0xe03e, (q15_t)0x778a, (q15_t)0xe033, (q15_t)0x7784, (q15_t)0xe028, - (q15_t)0x777e, (q15_t)0xe01d, (q15_t)0x7777, (q15_t)0xe012, (q15_t)0x7771, (q15_t)0xe007, (q15_t)0x776b, (q15_t)0xdffc, - (q15_t)0x7765, (q15_t)0xdff1, (q15_t)0x775e, (q15_t)0xdfe7, (q15_t)0x7758, (q15_t)0xdfdc, (q15_t)0x7752, (q15_t)0xdfd1, - (q15_t)0x774b, (q15_t)0xdfc6, (q15_t)0x7745, (q15_t)0xdfbb, (q15_t)0x773f, (q15_t)0xdfb0, (q15_t)0x7738, (q15_t)0xdfa5, - (q15_t)0x7732, (q15_t)0xdf9b, (q15_t)0x772c, (q15_t)0xdf90, (q15_t)0x7725, (q15_t)0xdf85, (q15_t)0x771f, (q15_t)0xdf7a, - (q15_t)0x7718, (q15_t)0xdf6f, (q15_t)0x7712, (q15_t)0xdf65, (q15_t)0x770c, (q15_t)0xdf5a, (q15_t)0x7705, (q15_t)0xdf4f, - (q15_t)0x76ff, (q15_t)0xdf44, (q15_t)0x76f8, (q15_t)0xdf39, (q15_t)0x76f2, (q15_t)0xdf2f, (q15_t)0x76eb, (q15_t)0xdf24, - (q15_t)0x76e5, (q15_t)0xdf19, (q15_t)0x76df, (q15_t)0xdf0e, (q15_t)0x76d8, (q15_t)0xdf03, (q15_t)0x76d2, (q15_t)0xdef9, - (q15_t)0x76cb, (q15_t)0xdeee, (q15_t)0x76c5, (q15_t)0xdee3, (q15_t)0x76be, (q15_t)0xded8, (q15_t)0x76b8, (q15_t)0xdece, - (q15_t)0x76b1, (q15_t)0xdec3, (q15_t)0x76ab, (q15_t)0xdeb8, (q15_t)0x76a4, (q15_t)0xdead, (q15_t)0x769d, (q15_t)0xdea3, - (q15_t)0x7697, (q15_t)0xde98, (q15_t)0x7690, (q15_t)0xde8d, (q15_t)0x768a, (q15_t)0xde83, (q15_t)0x7683, (q15_t)0xde78, - (q15_t)0x767d, (q15_t)0xde6d, (q15_t)0x7676, (q15_t)0xde62, (q15_t)0x766f, (q15_t)0xde58, (q15_t)0x7669, (q15_t)0xde4d, - (q15_t)0x7662, (q15_t)0xde42, (q15_t)0x765c, (q15_t)0xde38, (q15_t)0x7655, (q15_t)0xde2d, (q15_t)0x764e, (q15_t)0xde22, - (q15_t)0x7648, (q15_t)0xde18, (q15_t)0x7641, (q15_t)0xde0d, (q15_t)0x763a, (q15_t)0xde02, (q15_t)0x7634, (q15_t)0xddf8, - (q15_t)0x762d, (q15_t)0xdded, (q15_t)0x7626, (q15_t)0xdde2, (q15_t)0x7620, (q15_t)0xddd8, (q15_t)0x7619, (q15_t)0xddcd, - (q15_t)0x7612, (q15_t)0xddc3, (q15_t)0x760b, (q15_t)0xddb8, (q15_t)0x7605, (q15_t)0xddad, (q15_t)0x75fe, (q15_t)0xdda3, - (q15_t)0x75f7, (q15_t)0xdd98, (q15_t)0x75f0, (q15_t)0xdd8e, (q15_t)0x75ea, (q15_t)0xdd83, (q15_t)0x75e3, (q15_t)0xdd78, - (q15_t)0x75dc, (q15_t)0xdd6e, (q15_t)0x75d5, (q15_t)0xdd63, (q15_t)0x75ce, (q15_t)0xdd59, (q15_t)0x75c8, (q15_t)0xdd4e, - (q15_t)0x75c1, (q15_t)0xdd44, (q15_t)0x75ba, (q15_t)0xdd39, (q15_t)0x75b3, (q15_t)0xdd2e, (q15_t)0x75ac, (q15_t)0xdd24, - (q15_t)0x75a5, (q15_t)0xdd19, (q15_t)0x759f, (q15_t)0xdd0f, (q15_t)0x7598, (q15_t)0xdd04, (q15_t)0x7591, (q15_t)0xdcfa, - (q15_t)0x758a, (q15_t)0xdcef, (q15_t)0x7583, (q15_t)0xdce5, (q15_t)0x757c, (q15_t)0xdcda, (q15_t)0x7575, (q15_t)0xdcd0, - (q15_t)0x756e, (q15_t)0xdcc5, (q15_t)0x7567, (q15_t)0xdcbb, (q15_t)0x7561, (q15_t)0xdcb0, (q15_t)0x755a, (q15_t)0xdca6, - (q15_t)0x7553, (q15_t)0xdc9b, (q15_t)0x754c, (q15_t)0xdc91, (q15_t)0x7545, (q15_t)0xdc86, (q15_t)0x753e, (q15_t)0xdc7c, - (q15_t)0x7537, (q15_t)0xdc72, (q15_t)0x7530, (q15_t)0xdc67, (q15_t)0x7529, (q15_t)0xdc5d, (q15_t)0x7522, (q15_t)0xdc52, - (q15_t)0x751b, (q15_t)0xdc48, (q15_t)0x7514, (q15_t)0xdc3d, (q15_t)0x750d, (q15_t)0xdc33, (q15_t)0x7506, (q15_t)0xdc29, - (q15_t)0x74ff, (q15_t)0xdc1e, (q15_t)0x74f8, (q15_t)0xdc14, (q15_t)0x74f1, (q15_t)0xdc09, (q15_t)0x74ea, (q15_t)0xdbff, - (q15_t)0x74e2, (q15_t)0xdbf5, (q15_t)0x74db, (q15_t)0xdbea, (q15_t)0x74d4, (q15_t)0xdbe0, (q15_t)0x74cd, (q15_t)0xdbd5, - (q15_t)0x74c6, (q15_t)0xdbcb, (q15_t)0x74bf, (q15_t)0xdbc1, (q15_t)0x74b8, (q15_t)0xdbb6, (q15_t)0x74b1, (q15_t)0xdbac, - (q15_t)0x74aa, (q15_t)0xdba2, (q15_t)0x74a2, (q15_t)0xdb97, (q15_t)0x749b, (q15_t)0xdb8d, (q15_t)0x7494, (q15_t)0xdb83, - (q15_t)0x748d, (q15_t)0xdb78, (q15_t)0x7486, (q15_t)0xdb6e, (q15_t)0x747f, (q15_t)0xdb64, (q15_t)0x7477, (q15_t)0xdb59, - (q15_t)0x7470, (q15_t)0xdb4f, (q15_t)0x7469, (q15_t)0xdb45, (q15_t)0x7462, (q15_t)0xdb3b, (q15_t)0x745b, (q15_t)0xdb30, - (q15_t)0x7453, (q15_t)0xdb26, (q15_t)0x744c, (q15_t)0xdb1c, (q15_t)0x7445, (q15_t)0xdb11, (q15_t)0x743e, (q15_t)0xdb07, - (q15_t)0x7436, (q15_t)0xdafd, (q15_t)0x742f, (q15_t)0xdaf3, (q15_t)0x7428, (q15_t)0xdae8, (q15_t)0x7420, (q15_t)0xdade, - (q15_t)0x7419, (q15_t)0xdad4, (q15_t)0x7412, (q15_t)0xdaca, (q15_t)0x740b, (q15_t)0xdabf, (q15_t)0x7403, (q15_t)0xdab5, - (q15_t)0x73fc, (q15_t)0xdaab, (q15_t)0x73f5, (q15_t)0xdaa1, (q15_t)0x73ed, (q15_t)0xda97, (q15_t)0x73e6, (q15_t)0xda8c, - (q15_t)0x73df, (q15_t)0xda82, (q15_t)0x73d7, (q15_t)0xda78, (q15_t)0x73d0, (q15_t)0xda6e, (q15_t)0x73c8, (q15_t)0xda64, - (q15_t)0x73c1, (q15_t)0xda5a, (q15_t)0x73ba, (q15_t)0xda4f, (q15_t)0x73b2, (q15_t)0xda45, (q15_t)0x73ab, (q15_t)0xda3b, - (q15_t)0x73a3, (q15_t)0xda31, (q15_t)0x739c, (q15_t)0xda27, (q15_t)0x7395, (q15_t)0xda1d, (q15_t)0x738d, (q15_t)0xda13, - (q15_t)0x7386, (q15_t)0xda08, (q15_t)0x737e, (q15_t)0xd9fe, (q15_t)0x7377, (q15_t)0xd9f4, (q15_t)0x736f, (q15_t)0xd9ea, - (q15_t)0x7368, (q15_t)0xd9e0, (q15_t)0x7360, (q15_t)0xd9d6, (q15_t)0x7359, (q15_t)0xd9cc, (q15_t)0x7351, (q15_t)0xd9c2, - (q15_t)0x734a, (q15_t)0xd9b8, (q15_t)0x7342, (q15_t)0xd9ae, (q15_t)0x733b, (q15_t)0xd9a4, (q15_t)0x7333, (q15_t)0xd99a, - (q15_t)0x732c, (q15_t)0xd98f, (q15_t)0x7324, (q15_t)0xd985, (q15_t)0x731d, (q15_t)0xd97b, (q15_t)0x7315, (q15_t)0xd971, - (q15_t)0x730d, (q15_t)0xd967, (q15_t)0x7306, (q15_t)0xd95d, (q15_t)0x72fe, (q15_t)0xd953, (q15_t)0x72f7, (q15_t)0xd949, - (q15_t)0x72ef, (q15_t)0xd93f, (q15_t)0x72e7, (q15_t)0xd935, (q15_t)0x72e0, (q15_t)0xd92b, (q15_t)0x72d8, (q15_t)0xd921, - (q15_t)0x72d0, (q15_t)0xd917, (q15_t)0x72c9, (q15_t)0xd90d, (q15_t)0x72c1, (q15_t)0xd903, (q15_t)0x72ba, (q15_t)0xd8f9, - (q15_t)0x72b2, (q15_t)0xd8ef, (q15_t)0x72aa, (q15_t)0xd8e6, (q15_t)0x72a3, (q15_t)0xd8dc, (q15_t)0x729b, (q15_t)0xd8d2, - (q15_t)0x7293, (q15_t)0xd8c8, (q15_t)0x728b, (q15_t)0xd8be, (q15_t)0x7284, (q15_t)0xd8b4, (q15_t)0x727c, (q15_t)0xd8aa, - (q15_t)0x7274, (q15_t)0xd8a0, (q15_t)0x726d, (q15_t)0xd896, (q15_t)0x7265, (q15_t)0xd88c, (q15_t)0x725d, (q15_t)0xd882, - (q15_t)0x7255, (q15_t)0xd878, (q15_t)0x724e, (q15_t)0xd86f, (q15_t)0x7246, (q15_t)0xd865, (q15_t)0x723e, (q15_t)0xd85b, - (q15_t)0x7236, (q15_t)0xd851, (q15_t)0x722e, (q15_t)0xd847, (q15_t)0x7227, (q15_t)0xd83d, (q15_t)0x721f, (q15_t)0xd833, - (q15_t)0x7217, (q15_t)0xd82a, (q15_t)0x720f, (q15_t)0xd820, (q15_t)0x7207, (q15_t)0xd816, (q15_t)0x71ff, (q15_t)0xd80c, - (q15_t)0x71f8, (q15_t)0xd802, (q15_t)0x71f0, (q15_t)0xd7f8, (q15_t)0x71e8, (q15_t)0xd7ef, (q15_t)0x71e0, (q15_t)0xd7e5, - (q15_t)0x71d8, (q15_t)0xd7db, (q15_t)0x71d0, (q15_t)0xd7d1, (q15_t)0x71c8, (q15_t)0xd7c8, (q15_t)0x71c0, (q15_t)0xd7be, - (q15_t)0x71b9, (q15_t)0xd7b4, (q15_t)0x71b1, (q15_t)0xd7aa, (q15_t)0x71a9, (q15_t)0xd7a0, (q15_t)0x71a1, (q15_t)0xd797, - (q15_t)0x7199, (q15_t)0xd78d, (q15_t)0x7191, (q15_t)0xd783, (q15_t)0x7189, (q15_t)0xd77a, (q15_t)0x7181, (q15_t)0xd770, - (q15_t)0x7179, (q15_t)0xd766, (q15_t)0x7171, (q15_t)0xd75c, (q15_t)0x7169, (q15_t)0xd753, (q15_t)0x7161, (q15_t)0xd749, - (q15_t)0x7159, (q15_t)0xd73f, (q15_t)0x7151, (q15_t)0xd736, (q15_t)0x7149, (q15_t)0xd72c, (q15_t)0x7141, (q15_t)0xd722, - (q15_t)0x7139, (q15_t)0xd719, (q15_t)0x7131, (q15_t)0xd70f, (q15_t)0x7129, (q15_t)0xd705, (q15_t)0x7121, (q15_t)0xd6fc, - (q15_t)0x7119, (q15_t)0xd6f2, (q15_t)0x7111, (q15_t)0xd6e8, (q15_t)0x7109, (q15_t)0xd6df, (q15_t)0x7101, (q15_t)0xd6d5, - (q15_t)0x70f9, (q15_t)0xd6cb, (q15_t)0x70f0, (q15_t)0xd6c2, (q15_t)0x70e8, (q15_t)0xd6b8, (q15_t)0x70e0, (q15_t)0xd6af, - (q15_t)0x70d8, (q15_t)0xd6a5, (q15_t)0x70d0, (q15_t)0xd69b, (q15_t)0x70c8, (q15_t)0xd692, (q15_t)0x70c0, (q15_t)0xd688, - (q15_t)0x70b8, (q15_t)0xd67f, (q15_t)0x70af, (q15_t)0xd675, (q15_t)0x70a7, (q15_t)0xd66c, (q15_t)0x709f, (q15_t)0xd662, - (q15_t)0x7097, (q15_t)0xd659, (q15_t)0x708f, (q15_t)0xd64f, (q15_t)0x7087, (q15_t)0xd645, (q15_t)0x707e, (q15_t)0xd63c, - (q15_t)0x7076, (q15_t)0xd632, (q15_t)0x706e, (q15_t)0xd629, (q15_t)0x7066, (q15_t)0xd61f, (q15_t)0x705d, (q15_t)0xd616, - (q15_t)0x7055, (q15_t)0xd60c, (q15_t)0x704d, (q15_t)0xd603, (q15_t)0x7045, (q15_t)0xd5f9, (q15_t)0x703c, (q15_t)0xd5f0, - (q15_t)0x7034, (q15_t)0xd5e6, (q15_t)0x702c, (q15_t)0xd5dd, (q15_t)0x7024, (q15_t)0xd5d4, (q15_t)0x701b, (q15_t)0xd5ca, - (q15_t)0x7013, (q15_t)0xd5c1, (q15_t)0x700b, (q15_t)0xd5b7, (q15_t)0x7002, (q15_t)0xd5ae, (q15_t)0x6ffa, (q15_t)0xd5a4, - (q15_t)0x6ff2, (q15_t)0xd59b, (q15_t)0x6fea, (q15_t)0xd592, (q15_t)0x6fe1, (q15_t)0xd588, (q15_t)0x6fd9, (q15_t)0xd57f, - (q15_t)0x6fd0, (q15_t)0xd575, (q15_t)0x6fc8, (q15_t)0xd56c, (q15_t)0x6fc0, (q15_t)0xd563, (q15_t)0x6fb7, (q15_t)0xd559, - (q15_t)0x6faf, (q15_t)0xd550, (q15_t)0x6fa7, (q15_t)0xd547, (q15_t)0x6f9e, (q15_t)0xd53d, (q15_t)0x6f96, (q15_t)0xd534, - (q15_t)0x6f8d, (q15_t)0xd52a, (q15_t)0x6f85, (q15_t)0xd521, (q15_t)0x6f7d, (q15_t)0xd518, (q15_t)0x6f74, (q15_t)0xd50e, - (q15_t)0x6f6c, (q15_t)0xd505, (q15_t)0x6f63, (q15_t)0xd4fc, (q15_t)0x6f5b, (q15_t)0xd4f3, (q15_t)0x6f52, (q15_t)0xd4e9, - (q15_t)0x6f4a, (q15_t)0xd4e0, (q15_t)0x6f41, (q15_t)0xd4d7, (q15_t)0x6f39, (q15_t)0xd4cd, (q15_t)0x6f30, (q15_t)0xd4c4, - (q15_t)0x6f28, (q15_t)0xd4bb, (q15_t)0x6f20, (q15_t)0xd4b2, (q15_t)0x6f17, (q15_t)0xd4a8, (q15_t)0x6f0e, (q15_t)0xd49f, - (q15_t)0x6f06, (q15_t)0xd496, (q15_t)0x6efd, (q15_t)0xd48d, (q15_t)0x6ef5, (q15_t)0xd483, (q15_t)0x6eec, (q15_t)0xd47a, - (q15_t)0x6ee4, (q15_t)0xd471, (q15_t)0x6edb, (q15_t)0xd468, (q15_t)0x6ed3, (q15_t)0xd45f, (q15_t)0x6eca, (q15_t)0xd455, - (q15_t)0x6ec2, (q15_t)0xd44c, (q15_t)0x6eb9, (q15_t)0xd443, (q15_t)0x6eb0, (q15_t)0xd43a, (q15_t)0x6ea8, (q15_t)0xd431, - (q15_t)0x6e9f, (q15_t)0xd428, (q15_t)0x6e97, (q15_t)0xd41e, (q15_t)0x6e8e, (q15_t)0xd415, (q15_t)0x6e85, (q15_t)0xd40c, - (q15_t)0x6e7d, (q15_t)0xd403, (q15_t)0x6e74, (q15_t)0xd3fa, (q15_t)0x6e6b, (q15_t)0xd3f1, (q15_t)0x6e63, (q15_t)0xd3e8, - (q15_t)0x6e5a, (q15_t)0xd3df, (q15_t)0x6e51, (q15_t)0xd3d5, (q15_t)0x6e49, (q15_t)0xd3cc, (q15_t)0x6e40, (q15_t)0xd3c3, - (q15_t)0x6e37, (q15_t)0xd3ba, (q15_t)0x6e2f, (q15_t)0xd3b1, (q15_t)0x6e26, (q15_t)0xd3a8, (q15_t)0x6e1d, (q15_t)0xd39f, - (q15_t)0x6e15, (q15_t)0xd396, (q15_t)0x6e0c, (q15_t)0xd38d, (q15_t)0x6e03, (q15_t)0xd384, (q15_t)0x6dfa, (q15_t)0xd37b, - (q15_t)0x6df2, (q15_t)0xd372, (q15_t)0x6de9, (q15_t)0xd369, (q15_t)0x6de0, (q15_t)0xd360, (q15_t)0x6dd7, (q15_t)0xd357, - (q15_t)0x6dcf, (q15_t)0xd34e, (q15_t)0x6dc6, (q15_t)0xd345, (q15_t)0x6dbd, (q15_t)0xd33c, (q15_t)0x6db4, (q15_t)0xd333, - (q15_t)0x6dab, (q15_t)0xd32a, (q15_t)0x6da3, (q15_t)0xd321, (q15_t)0x6d9a, (q15_t)0xd318, (q15_t)0x6d91, (q15_t)0xd30f, - (q15_t)0x6d88, (q15_t)0xd306, (q15_t)0x6d7f, (q15_t)0xd2fd, (q15_t)0x6d76, (q15_t)0xd2f4, (q15_t)0x6d6e, (q15_t)0xd2eb, - (q15_t)0x6d65, (q15_t)0xd2e2, (q15_t)0x6d5c, (q15_t)0xd2d9, (q15_t)0x6d53, (q15_t)0xd2d1, (q15_t)0x6d4a, (q15_t)0xd2c8, - (q15_t)0x6d41, (q15_t)0xd2bf, (q15_t)0x6d38, (q15_t)0xd2b6, (q15_t)0x6d2f, (q15_t)0xd2ad, (q15_t)0x6d27, (q15_t)0xd2a4, - (q15_t)0x6d1e, (q15_t)0xd29b, (q15_t)0x6d15, (q15_t)0xd292, (q15_t)0x6d0c, (q15_t)0xd28a, (q15_t)0x6d03, (q15_t)0xd281, - (q15_t)0x6cfa, (q15_t)0xd278, (q15_t)0x6cf1, (q15_t)0xd26f, (q15_t)0x6ce8, (q15_t)0xd266, (q15_t)0x6cdf, (q15_t)0xd25d, - (q15_t)0x6cd6, (q15_t)0xd255, (q15_t)0x6ccd, (q15_t)0xd24c, (q15_t)0x6cc4, (q15_t)0xd243, (q15_t)0x6cbb, (q15_t)0xd23a, - (q15_t)0x6cb2, (q15_t)0xd231, (q15_t)0x6ca9, (q15_t)0xd229, (q15_t)0x6ca0, (q15_t)0xd220, (q15_t)0x6c97, (q15_t)0xd217, - (q15_t)0x6c8e, (q15_t)0xd20e, (q15_t)0x6c85, (q15_t)0xd206, (q15_t)0x6c7c, (q15_t)0xd1fd, (q15_t)0x6c73, (q15_t)0xd1f4, - (q15_t)0x6c6a, (q15_t)0xd1eb, (q15_t)0x6c61, (q15_t)0xd1e3, (q15_t)0x6c58, (q15_t)0xd1da, (q15_t)0x6c4f, (q15_t)0xd1d1, - (q15_t)0x6c46, (q15_t)0xd1c9, (q15_t)0x6c3d, (q15_t)0xd1c0, (q15_t)0x6c34, (q15_t)0xd1b7, (q15_t)0x6c2b, (q15_t)0xd1af, - (q15_t)0x6c21, (q15_t)0xd1a6, (q15_t)0x6c18, (q15_t)0xd19d, (q15_t)0x6c0f, (q15_t)0xd195, (q15_t)0x6c06, (q15_t)0xd18c, - (q15_t)0x6bfd, (q15_t)0xd183, (q15_t)0x6bf4, (q15_t)0xd17b, (q15_t)0x6beb, (q15_t)0xd172, (q15_t)0x6be2, (q15_t)0xd169, - (q15_t)0x6bd8, (q15_t)0xd161, (q15_t)0x6bcf, (q15_t)0xd158, (q15_t)0x6bc6, (q15_t)0xd150, (q15_t)0x6bbd, (q15_t)0xd147, - (q15_t)0x6bb4, (q15_t)0xd13e, (q15_t)0x6bab, (q15_t)0xd136, (q15_t)0x6ba1, (q15_t)0xd12d, (q15_t)0x6b98, (q15_t)0xd125, - (q15_t)0x6b8f, (q15_t)0xd11c, (q15_t)0x6b86, (q15_t)0xd114, (q15_t)0x6b7d, (q15_t)0xd10b, (q15_t)0x6b73, (q15_t)0xd103, - (q15_t)0x6b6a, (q15_t)0xd0fa, (q15_t)0x6b61, (q15_t)0xd0f2, (q15_t)0x6b58, (q15_t)0xd0e9, (q15_t)0x6b4e, (q15_t)0xd0e0, - (q15_t)0x6b45, (q15_t)0xd0d8, (q15_t)0x6b3c, (q15_t)0xd0d0, (q15_t)0x6b33, (q15_t)0xd0c7, (q15_t)0x6b29, (q15_t)0xd0bf, - (q15_t)0x6b20, (q15_t)0xd0b6, (q15_t)0x6b17, (q15_t)0xd0ae, (q15_t)0x6b0d, (q15_t)0xd0a5, (q15_t)0x6b04, (q15_t)0xd09d, - (q15_t)0x6afb, (q15_t)0xd094, (q15_t)0x6af2, (q15_t)0xd08c, (q15_t)0x6ae8, (q15_t)0xd083, (q15_t)0x6adf, (q15_t)0xd07b, - (q15_t)0x6ad6, (q15_t)0xd073, (q15_t)0x6acc, (q15_t)0xd06a, (q15_t)0x6ac3, (q15_t)0xd062, (q15_t)0x6ab9, (q15_t)0xd059, - (q15_t)0x6ab0, (q15_t)0xd051, (q15_t)0x6aa7, (q15_t)0xd049, (q15_t)0x6a9d, (q15_t)0xd040, (q15_t)0x6a94, (q15_t)0xd038, - (q15_t)0x6a8b, (q15_t)0xd030, (q15_t)0x6a81, (q15_t)0xd027, (q15_t)0x6a78, (q15_t)0xd01f, (q15_t)0x6a6e, (q15_t)0xd016, - (q15_t)0x6a65, (q15_t)0xd00e, (q15_t)0x6a5c, (q15_t)0xd006, (q15_t)0x6a52, (q15_t)0xcffe, (q15_t)0x6a49, (q15_t)0xcff5, - (q15_t)0x6a3f, (q15_t)0xcfed, (q15_t)0x6a36, (q15_t)0xcfe5, (q15_t)0x6a2c, (q15_t)0xcfdc, (q15_t)0x6a23, (q15_t)0xcfd4, - (q15_t)0x6a1a, (q15_t)0xcfcc, (q15_t)0x6a10, (q15_t)0xcfc4, (q15_t)0x6a07, (q15_t)0xcfbb, (q15_t)0x69fd, (q15_t)0xcfb3, - (q15_t)0x69f4, (q15_t)0xcfab, (q15_t)0x69ea, (q15_t)0xcfa3, (q15_t)0x69e1, (q15_t)0xcf9a, (q15_t)0x69d7, (q15_t)0xcf92, - (q15_t)0x69ce, (q15_t)0xcf8a, (q15_t)0x69c4, (q15_t)0xcf82, (q15_t)0x69bb, (q15_t)0xcf79, (q15_t)0x69b1, (q15_t)0xcf71, - (q15_t)0x69a7, (q15_t)0xcf69, (q15_t)0x699e, (q15_t)0xcf61, (q15_t)0x6994, (q15_t)0xcf59, (q15_t)0x698b, (q15_t)0xcf51, - (q15_t)0x6981, (q15_t)0xcf48, (q15_t)0x6978, (q15_t)0xcf40, (q15_t)0x696e, (q15_t)0xcf38, (q15_t)0x6965, (q15_t)0xcf30, - (q15_t)0x695b, (q15_t)0xcf28, (q15_t)0x6951, (q15_t)0xcf20, (q15_t)0x6948, (q15_t)0xcf18, (q15_t)0x693e, (q15_t)0xcf10, - (q15_t)0x6935, (q15_t)0xcf07, (q15_t)0x692b, (q15_t)0xceff, (q15_t)0x6921, (q15_t)0xcef7, (q15_t)0x6918, (q15_t)0xceef, - (q15_t)0x690e, (q15_t)0xcee7, (q15_t)0x6904, (q15_t)0xcedf, (q15_t)0x68fb, (q15_t)0xced7, (q15_t)0x68f1, (q15_t)0xcecf, - (q15_t)0x68e7, (q15_t)0xcec7, (q15_t)0x68de, (q15_t)0xcebf, (q15_t)0x68d4, (q15_t)0xceb7, (q15_t)0x68ca, (q15_t)0xceaf, - (q15_t)0x68c1, (q15_t)0xcea7, (q15_t)0x68b7, (q15_t)0xce9f, (q15_t)0x68ad, (q15_t)0xce97, (q15_t)0x68a4, (q15_t)0xce8f, - (q15_t)0x689a, (q15_t)0xce87, (q15_t)0x6890, (q15_t)0xce7f, (q15_t)0x6886, (q15_t)0xce77, (q15_t)0x687d, (q15_t)0xce6f, - (q15_t)0x6873, (q15_t)0xce67, (q15_t)0x6869, (q15_t)0xce5f, (q15_t)0x6860, (q15_t)0xce57, (q15_t)0x6856, (q15_t)0xce4f, - (q15_t)0x684c, (q15_t)0xce47, (q15_t)0x6842, (q15_t)0xce40, (q15_t)0x6838, (q15_t)0xce38, (q15_t)0x682f, (q15_t)0xce30, - (q15_t)0x6825, (q15_t)0xce28, (q15_t)0x681b, (q15_t)0xce20, (q15_t)0x6811, (q15_t)0xce18, (q15_t)0x6808, (q15_t)0xce10, - (q15_t)0x67fe, (q15_t)0xce08, (q15_t)0x67f4, (q15_t)0xce01, (q15_t)0x67ea, (q15_t)0xcdf9, (q15_t)0x67e0, (q15_t)0xcdf1, - (q15_t)0x67d6, (q15_t)0xcde9, (q15_t)0x67cd, (q15_t)0xcde1, (q15_t)0x67c3, (q15_t)0xcdd9, (q15_t)0x67b9, (q15_t)0xcdd2, - (q15_t)0x67af, (q15_t)0xcdca, (q15_t)0x67a5, (q15_t)0xcdc2, (q15_t)0x679b, (q15_t)0xcdba, (q15_t)0x6791, (q15_t)0xcdb2, - (q15_t)0x6788, (q15_t)0xcdab, (q15_t)0x677e, (q15_t)0xcda3, (q15_t)0x6774, (q15_t)0xcd9b, (q15_t)0x676a, (q15_t)0xcd93, - (q15_t)0x6760, (q15_t)0xcd8c, (q15_t)0x6756, (q15_t)0xcd84, (q15_t)0x674c, (q15_t)0xcd7c, (q15_t)0x6742, (q15_t)0xcd75, - (q15_t)0x6738, (q15_t)0xcd6d, (q15_t)0x672e, (q15_t)0xcd65, (q15_t)0x6724, (q15_t)0xcd5d, (q15_t)0x671a, (q15_t)0xcd56, - (q15_t)0x6711, (q15_t)0xcd4e, (q15_t)0x6707, (q15_t)0xcd46, (q15_t)0x66fd, (q15_t)0xcd3f, (q15_t)0x66f3, (q15_t)0xcd37, - (q15_t)0x66e9, (q15_t)0xcd30, (q15_t)0x66df, (q15_t)0xcd28, (q15_t)0x66d5, (q15_t)0xcd20, (q15_t)0x66cb, (q15_t)0xcd19, - (q15_t)0x66c1, (q15_t)0xcd11, (q15_t)0x66b7, (q15_t)0xcd09, (q15_t)0x66ad, (q15_t)0xcd02, (q15_t)0x66a3, (q15_t)0xccfa, - (q15_t)0x6699, (q15_t)0xccf3, (q15_t)0x668f, (q15_t)0xcceb, (q15_t)0x6685, (q15_t)0xcce3, (q15_t)0x667b, (q15_t)0xccdc, - (q15_t)0x6671, (q15_t)0xccd4, (q15_t)0x6666, (q15_t)0xcccd, (q15_t)0x665c, (q15_t)0xccc5, (q15_t)0x6652, (q15_t)0xccbe, - (q15_t)0x6648, (q15_t)0xccb6, (q15_t)0x663e, (q15_t)0xccaf, (q15_t)0x6634, (q15_t)0xcca7, (q15_t)0x662a, (q15_t)0xcca0, - (q15_t)0x6620, (q15_t)0xcc98, (q15_t)0x6616, (q15_t)0xcc91, (q15_t)0x660c, (q15_t)0xcc89, (q15_t)0x6602, (q15_t)0xcc82, - (q15_t)0x65f8, (q15_t)0xcc7a, (q15_t)0x65ed, (q15_t)0xcc73, (q15_t)0x65e3, (q15_t)0xcc6b, (q15_t)0x65d9, (q15_t)0xcc64, - (q15_t)0x65cf, (q15_t)0xcc5d, (q15_t)0x65c5, (q15_t)0xcc55, (q15_t)0x65bb, (q15_t)0xcc4e, (q15_t)0x65b1, (q15_t)0xcc46, - (q15_t)0x65a6, (q15_t)0xcc3f, (q15_t)0x659c, (q15_t)0xcc38, (q15_t)0x6592, (q15_t)0xcc30, (q15_t)0x6588, (q15_t)0xcc29, - (q15_t)0x657e, (q15_t)0xcc21, (q15_t)0x6574, (q15_t)0xcc1a, (q15_t)0x6569, (q15_t)0xcc13, (q15_t)0x655f, (q15_t)0xcc0b, - (q15_t)0x6555, (q15_t)0xcc04, (q15_t)0x654b, (q15_t)0xcbfd, (q15_t)0x6541, (q15_t)0xcbf5, (q15_t)0x6536, (q15_t)0xcbee, - (q15_t)0x652c, (q15_t)0xcbe7, (q15_t)0x6522, (q15_t)0xcbe0, (q15_t)0x6518, (q15_t)0xcbd8, (q15_t)0x650d, (q15_t)0xcbd1, - (q15_t)0x6503, (q15_t)0xcbca, (q15_t)0x64f9, (q15_t)0xcbc2, (q15_t)0x64ef, (q15_t)0xcbbb, (q15_t)0x64e4, (q15_t)0xcbb4, - (q15_t)0x64da, (q15_t)0xcbad, (q15_t)0x64d0, (q15_t)0xcba5, (q15_t)0x64c5, (q15_t)0xcb9e, (q15_t)0x64bb, (q15_t)0xcb97, - (q15_t)0x64b1, (q15_t)0xcb90, (q15_t)0x64a7, (q15_t)0xcb89, (q15_t)0x649c, (q15_t)0xcb81, (q15_t)0x6492, (q15_t)0xcb7a, - (q15_t)0x6488, (q15_t)0xcb73, (q15_t)0x647d, (q15_t)0xcb6c, (q15_t)0x6473, (q15_t)0xcb65, (q15_t)0x6469, (q15_t)0xcb5e, - (q15_t)0x645e, (q15_t)0xcb56, (q15_t)0x6454, (q15_t)0xcb4f, (q15_t)0x644a, (q15_t)0xcb48, (q15_t)0x643f, (q15_t)0xcb41, - (q15_t)0x6435, (q15_t)0xcb3a, (q15_t)0x642b, (q15_t)0xcb33, (q15_t)0x6420, (q15_t)0xcb2c, (q15_t)0x6416, (q15_t)0xcb25, - (q15_t)0x640b, (q15_t)0xcb1e, (q15_t)0x6401, (q15_t)0xcb16, (q15_t)0x63f7, (q15_t)0xcb0f, (q15_t)0x63ec, (q15_t)0xcb08, - (q15_t)0x63e2, (q15_t)0xcb01, (q15_t)0x63d7, (q15_t)0xcafa, (q15_t)0x63cd, (q15_t)0xcaf3, (q15_t)0x63c3, (q15_t)0xcaec, - (q15_t)0x63b8, (q15_t)0xcae5, (q15_t)0x63ae, (q15_t)0xcade, (q15_t)0x63a3, (q15_t)0xcad7, (q15_t)0x6399, (q15_t)0xcad0, - (q15_t)0x638e, (q15_t)0xcac9, (q15_t)0x6384, (q15_t)0xcac2, (q15_t)0x637a, (q15_t)0xcabb, (q15_t)0x636f, (q15_t)0xcab4, - (q15_t)0x6365, (q15_t)0xcaad, (q15_t)0x635a, (q15_t)0xcaa6, (q15_t)0x6350, (q15_t)0xca9f, (q15_t)0x6345, (q15_t)0xca99, - (q15_t)0x633b, (q15_t)0xca92, (q15_t)0x6330, (q15_t)0xca8b, (q15_t)0x6326, (q15_t)0xca84, (q15_t)0x631b, (q15_t)0xca7d, - (q15_t)0x6311, (q15_t)0xca76, (q15_t)0x6306, (q15_t)0xca6f, (q15_t)0x62fc, (q15_t)0xca68, (q15_t)0x62f1, (q15_t)0xca61, - (q15_t)0x62e7, (q15_t)0xca5b, (q15_t)0x62dc, (q15_t)0xca54, (q15_t)0x62d2, (q15_t)0xca4d, (q15_t)0x62c7, (q15_t)0xca46, - (q15_t)0x62bc, (q15_t)0xca3f, (q15_t)0x62b2, (q15_t)0xca38, (q15_t)0x62a7, (q15_t)0xca32, (q15_t)0x629d, (q15_t)0xca2b, - (q15_t)0x6292, (q15_t)0xca24, (q15_t)0x6288, (q15_t)0xca1d, (q15_t)0x627d, (q15_t)0xca16, (q15_t)0x6272, (q15_t)0xca10, - (q15_t)0x6268, (q15_t)0xca09, (q15_t)0x625d, (q15_t)0xca02, (q15_t)0x6253, (q15_t)0xc9fb, (q15_t)0x6248, (q15_t)0xc9f5, - (q15_t)0x623d, (q15_t)0xc9ee, (q15_t)0x6233, (q15_t)0xc9e7, (q15_t)0x6228, (q15_t)0xc9e0, (q15_t)0x621e, (q15_t)0xc9da, - (q15_t)0x6213, (q15_t)0xc9d3, (q15_t)0x6208, (q15_t)0xc9cc, (q15_t)0x61fe, (q15_t)0xc9c6, (q15_t)0x61f3, (q15_t)0xc9bf, - (q15_t)0x61e8, (q15_t)0xc9b8, (q15_t)0x61de, (q15_t)0xc9b2, (q15_t)0x61d3, (q15_t)0xc9ab, (q15_t)0x61c8, (q15_t)0xc9a4, - (q15_t)0x61be, (q15_t)0xc99e, (q15_t)0x61b3, (q15_t)0xc997, (q15_t)0x61a8, (q15_t)0xc991, (q15_t)0x619e, (q15_t)0xc98a, - (q15_t)0x6193, (q15_t)0xc983, (q15_t)0x6188, (q15_t)0xc97d, (q15_t)0x617d, (q15_t)0xc976, (q15_t)0x6173, (q15_t)0xc970, - (q15_t)0x6168, (q15_t)0xc969, (q15_t)0x615d, (q15_t)0xc963, (q15_t)0x6153, (q15_t)0xc95c, (q15_t)0x6148, (q15_t)0xc955, - (q15_t)0x613d, (q15_t)0xc94f, (q15_t)0x6132, (q15_t)0xc948, (q15_t)0x6128, (q15_t)0xc942, (q15_t)0x611d, (q15_t)0xc93b, - (q15_t)0x6112, (q15_t)0xc935, (q15_t)0x6107, (q15_t)0xc92e, (q15_t)0x60fd, (q15_t)0xc928, (q15_t)0x60f2, (q15_t)0xc921, - (q15_t)0x60e7, (q15_t)0xc91b, (q15_t)0x60dc, (q15_t)0xc915, (q15_t)0x60d1, (q15_t)0xc90e, (q15_t)0x60c7, (q15_t)0xc908, - (q15_t)0x60bc, (q15_t)0xc901, (q15_t)0x60b1, (q15_t)0xc8fb, (q15_t)0x60a6, (q15_t)0xc8f4, (q15_t)0x609b, (q15_t)0xc8ee, - (q15_t)0x6091, (q15_t)0xc8e8, (q15_t)0x6086, (q15_t)0xc8e1, (q15_t)0x607b, (q15_t)0xc8db, (q15_t)0x6070, (q15_t)0xc8d4, - (q15_t)0x6065, (q15_t)0xc8ce, (q15_t)0x605b, (q15_t)0xc8c8, (q15_t)0x6050, (q15_t)0xc8c1, (q15_t)0x6045, (q15_t)0xc8bb, - (q15_t)0x603a, (q15_t)0xc8b5, (q15_t)0x602f, (q15_t)0xc8ae, (q15_t)0x6024, (q15_t)0xc8a8, (q15_t)0x6019, (q15_t)0xc8a2, - (q15_t)0x600f, (q15_t)0xc89b, (q15_t)0x6004, (q15_t)0xc895, (q15_t)0x5ff9, (q15_t)0xc88f, (q15_t)0x5fee, (q15_t)0xc889, - (q15_t)0x5fe3, (q15_t)0xc882, (q15_t)0x5fd8, (q15_t)0xc87c, (q15_t)0x5fcd, (q15_t)0xc876, (q15_t)0x5fc2, (q15_t)0xc870, - (q15_t)0x5fb7, (q15_t)0xc869, (q15_t)0x5fac, (q15_t)0xc863, (q15_t)0x5fa2, (q15_t)0xc85d, (q15_t)0x5f97, (q15_t)0xc857, - (q15_t)0x5f8c, (q15_t)0xc850, (q15_t)0x5f81, (q15_t)0xc84a, (q15_t)0x5f76, (q15_t)0xc844, (q15_t)0x5f6b, (q15_t)0xc83e, - (q15_t)0x5f60, (q15_t)0xc838, (q15_t)0x5f55, (q15_t)0xc832, (q15_t)0x5f4a, (q15_t)0xc82b, (q15_t)0x5f3f, (q15_t)0xc825, - (q15_t)0x5f34, (q15_t)0xc81f, (q15_t)0x5f29, (q15_t)0xc819, (q15_t)0x5f1e, (q15_t)0xc813, (q15_t)0x5f13, (q15_t)0xc80d, - (q15_t)0x5f08, (q15_t)0xc807, (q15_t)0x5efd, (q15_t)0xc801, (q15_t)0x5ef2, (q15_t)0xc7fb, (q15_t)0x5ee7, (q15_t)0xc7f5, - (q15_t)0x5edc, (q15_t)0xc7ee, (q15_t)0x5ed1, (q15_t)0xc7e8, (q15_t)0x5ec6, (q15_t)0xc7e2, (q15_t)0x5ebb, (q15_t)0xc7dc, - (q15_t)0x5eb0, (q15_t)0xc7d6, (q15_t)0x5ea5, (q15_t)0xc7d0, (q15_t)0x5e9a, (q15_t)0xc7ca, (q15_t)0x5e8f, (q15_t)0xc7c4, - (q15_t)0x5e84, (q15_t)0xc7be, (q15_t)0x5e79, (q15_t)0xc7b8, (q15_t)0x5e6e, (q15_t)0xc7b2, (q15_t)0x5e63, (q15_t)0xc7ac, - (q15_t)0x5e58, (q15_t)0xc7a6, (q15_t)0x5e4d, (q15_t)0xc7a0, (q15_t)0x5e42, (q15_t)0xc79a, (q15_t)0x5e36, (q15_t)0xc795, - (q15_t)0x5e2b, (q15_t)0xc78f, (q15_t)0x5e20, (q15_t)0xc789, (q15_t)0x5e15, (q15_t)0xc783, (q15_t)0x5e0a, (q15_t)0xc77d, - (q15_t)0x5dff, (q15_t)0xc777, (q15_t)0x5df4, (q15_t)0xc771, (q15_t)0x5de9, (q15_t)0xc76b, (q15_t)0x5dde, (q15_t)0xc765, - (q15_t)0x5dd3, (q15_t)0xc75f, (q15_t)0x5dc7, (q15_t)0xc75a, (q15_t)0x5dbc, (q15_t)0xc754, (q15_t)0x5db1, (q15_t)0xc74e, - (q15_t)0x5da6, (q15_t)0xc748, (q15_t)0x5d9b, (q15_t)0xc742, (q15_t)0x5d90, (q15_t)0xc73d, (q15_t)0x5d85, (q15_t)0xc737, - (q15_t)0x5d79, (q15_t)0xc731, (q15_t)0x5d6e, (q15_t)0xc72b, (q15_t)0x5d63, (q15_t)0xc725, (q15_t)0x5d58, (q15_t)0xc720, - (q15_t)0x5d4d, (q15_t)0xc71a, (q15_t)0x5d42, (q15_t)0xc714, (q15_t)0x5d36, (q15_t)0xc70e, (q15_t)0x5d2b, (q15_t)0xc709, - (q15_t)0x5d20, (q15_t)0xc703, (q15_t)0x5d15, (q15_t)0xc6fd, (q15_t)0x5d0a, (q15_t)0xc6f7, (q15_t)0x5cff, (q15_t)0xc6f2, - (q15_t)0x5cf3, (q15_t)0xc6ec, (q15_t)0x5ce8, (q15_t)0xc6e6, (q15_t)0x5cdd, (q15_t)0xc6e1, (q15_t)0x5cd2, (q15_t)0xc6db, - (q15_t)0x5cc6, (q15_t)0xc6d5, (q15_t)0x5cbb, (q15_t)0xc6d0, (q15_t)0x5cb0, (q15_t)0xc6ca, (q15_t)0x5ca5, (q15_t)0xc6c5, - (q15_t)0x5c99, (q15_t)0xc6bf, (q15_t)0x5c8e, (q15_t)0xc6b9, (q15_t)0x5c83, (q15_t)0xc6b4, (q15_t)0x5c78, (q15_t)0xc6ae, - (q15_t)0x5c6c, (q15_t)0xc6a8, (q15_t)0x5c61, (q15_t)0xc6a3, (q15_t)0x5c56, (q15_t)0xc69d, (q15_t)0x5c4b, (q15_t)0xc698, - (q15_t)0x5c3f, (q15_t)0xc692, (q15_t)0x5c34, (q15_t)0xc68d, (q15_t)0x5c29, (q15_t)0xc687, (q15_t)0x5c1e, (q15_t)0xc682, - (q15_t)0x5c12, (q15_t)0xc67c, (q15_t)0x5c07, (q15_t)0xc677, (q15_t)0x5bfc, (q15_t)0xc671, (q15_t)0x5bf0, (q15_t)0xc66c, - (q15_t)0x5be5, (q15_t)0xc666, (q15_t)0x5bda, (q15_t)0xc661, (q15_t)0x5bce, (q15_t)0xc65b, (q15_t)0x5bc3, (q15_t)0xc656, - (q15_t)0x5bb8, (q15_t)0xc650, (q15_t)0x5bac, (q15_t)0xc64b, (q15_t)0x5ba1, (q15_t)0xc645, (q15_t)0x5b96, (q15_t)0xc640, - (q15_t)0x5b8a, (q15_t)0xc63b, (q15_t)0x5b7f, (q15_t)0xc635, (q15_t)0x5b74, (q15_t)0xc630, (q15_t)0x5b68, (q15_t)0xc62a, - (q15_t)0x5b5d, (q15_t)0xc625, (q15_t)0x5b52, (q15_t)0xc620, (q15_t)0x5b46, (q15_t)0xc61a, (q15_t)0x5b3b, (q15_t)0xc615, - (q15_t)0x5b30, (q15_t)0xc610, (q15_t)0x5b24, (q15_t)0xc60a, (q15_t)0x5b19, (q15_t)0xc605, (q15_t)0x5b0d, (q15_t)0xc600, - (q15_t)0x5b02, (q15_t)0xc5fa, (q15_t)0x5af7, (q15_t)0xc5f5, (q15_t)0x5aeb, (q15_t)0xc5f0, (q15_t)0x5ae0, (q15_t)0xc5ea, - (q15_t)0x5ad4, (q15_t)0xc5e5, (q15_t)0x5ac9, (q15_t)0xc5e0, (q15_t)0x5abe, (q15_t)0xc5db, (q15_t)0x5ab2, (q15_t)0xc5d5, - (q15_t)0x5aa7, (q15_t)0xc5d0, (q15_t)0x5a9b, (q15_t)0xc5cb, (q15_t)0x5a90, (q15_t)0xc5c6, (q15_t)0x5a84, (q15_t)0xc5c1, - (q15_t)0x5a79, (q15_t)0xc5bb, (q15_t)0x5a6e, (q15_t)0xc5b6, (q15_t)0x5a62, (q15_t)0xc5b1, (q15_t)0x5a57, (q15_t)0xc5ac, - (q15_t)0x5a4b, (q15_t)0xc5a7, (q15_t)0x5a40, (q15_t)0xc5a1, (q15_t)0x5a34, (q15_t)0xc59c, (q15_t)0x5a29, (q15_t)0xc597, - (q15_t)0x5a1d, (q15_t)0xc592, (q15_t)0x5a12, (q15_t)0xc58d, (q15_t)0x5a06, (q15_t)0xc588, (q15_t)0x59fb, (q15_t)0xc583, - (q15_t)0x59ef, (q15_t)0xc57e, (q15_t)0x59e4, (q15_t)0xc578, (q15_t)0x59d8, (q15_t)0xc573, (q15_t)0x59cd, (q15_t)0xc56e, - (q15_t)0x59c1, (q15_t)0xc569, (q15_t)0x59b6, (q15_t)0xc564, (q15_t)0x59aa, (q15_t)0xc55f, (q15_t)0x599f, (q15_t)0xc55a, - (q15_t)0x5993, (q15_t)0xc555, (q15_t)0x5988, (q15_t)0xc550, (q15_t)0x597c, (q15_t)0xc54b, (q15_t)0x5971, (q15_t)0xc546, - (q15_t)0x5965, (q15_t)0xc541, (q15_t)0x595a, (q15_t)0xc53c, (q15_t)0x594e, (q15_t)0xc537, (q15_t)0x5943, (q15_t)0xc532, - (q15_t)0x5937, (q15_t)0xc52d, (q15_t)0x592c, (q15_t)0xc528, (q15_t)0x5920, (q15_t)0xc523, (q15_t)0x5914, (q15_t)0xc51e, - (q15_t)0x5909, (q15_t)0xc51a, (q15_t)0x58fd, (q15_t)0xc515, (q15_t)0x58f2, (q15_t)0xc510, (q15_t)0x58e6, (q15_t)0xc50b, - (q15_t)0x58db, (q15_t)0xc506, (q15_t)0x58cf, (q15_t)0xc501, (q15_t)0x58c3, (q15_t)0xc4fc, (q15_t)0x58b8, (q15_t)0xc4f7, - (q15_t)0x58ac, (q15_t)0xc4f2, (q15_t)0x58a1, (q15_t)0xc4ee, (q15_t)0x5895, (q15_t)0xc4e9, (q15_t)0x5889, (q15_t)0xc4e4, - (q15_t)0x587e, (q15_t)0xc4df, (q15_t)0x5872, (q15_t)0xc4da, (q15_t)0x5867, (q15_t)0xc4d6, (q15_t)0x585b, (q15_t)0xc4d1, - (q15_t)0x584f, (q15_t)0xc4cc, (q15_t)0x5844, (q15_t)0xc4c7, (q15_t)0x5838, (q15_t)0xc4c2, (q15_t)0x582d, (q15_t)0xc4be, - (q15_t)0x5821, (q15_t)0xc4b9, (q15_t)0x5815, (q15_t)0xc4b4, (q15_t)0x580a, (q15_t)0xc4b0, (q15_t)0x57fe, (q15_t)0xc4ab, - (q15_t)0x57f2, (q15_t)0xc4a6, (q15_t)0x57e7, (q15_t)0xc4a1, (q15_t)0x57db, (q15_t)0xc49d, (q15_t)0x57cf, (q15_t)0xc498, - (q15_t)0x57c4, (q15_t)0xc493, (q15_t)0x57b8, (q15_t)0xc48f, (q15_t)0x57ac, (q15_t)0xc48a, (q15_t)0x57a1, (q15_t)0xc485, - (q15_t)0x5795, (q15_t)0xc481, (q15_t)0x5789, (q15_t)0xc47c, (q15_t)0x577e, (q15_t)0xc478, (q15_t)0x5772, (q15_t)0xc473, - (q15_t)0x5766, (q15_t)0xc46e, (q15_t)0x575b, (q15_t)0xc46a, (q15_t)0x574f, (q15_t)0xc465, (q15_t)0x5743, (q15_t)0xc461, - (q15_t)0x5737, (q15_t)0xc45c, (q15_t)0x572c, (q15_t)0xc457, (q15_t)0x5720, (q15_t)0xc453, (q15_t)0x5714, (q15_t)0xc44e, - (q15_t)0x5709, (q15_t)0xc44a, (q15_t)0x56fd, (q15_t)0xc445, (q15_t)0x56f1, (q15_t)0xc441, (q15_t)0x56e5, (q15_t)0xc43c, - (q15_t)0x56da, (q15_t)0xc438, (q15_t)0x56ce, (q15_t)0xc433, (q15_t)0x56c2, (q15_t)0xc42f, (q15_t)0x56b6, (q15_t)0xc42a, - (q15_t)0x56ab, (q15_t)0xc426, (q15_t)0x569f, (q15_t)0xc422, (q15_t)0x5693, (q15_t)0xc41d, (q15_t)0x5687, (q15_t)0xc419, - (q15_t)0x567c, (q15_t)0xc414, (q15_t)0x5670, (q15_t)0xc410, (q15_t)0x5664, (q15_t)0xc40b, (q15_t)0x5658, (q15_t)0xc407, - (q15_t)0x564c, (q15_t)0xc403, (q15_t)0x5641, (q15_t)0xc3fe, (q15_t)0x5635, (q15_t)0xc3fa, (q15_t)0x5629, (q15_t)0xc3f6, - (q15_t)0x561d, (q15_t)0xc3f1, (q15_t)0x5612, (q15_t)0xc3ed, (q15_t)0x5606, (q15_t)0xc3e9, (q15_t)0x55fa, (q15_t)0xc3e4, - (q15_t)0x55ee, (q15_t)0xc3e0, (q15_t)0x55e2, (q15_t)0xc3dc, (q15_t)0x55d7, (q15_t)0xc3d7, (q15_t)0x55cb, (q15_t)0xc3d3, - (q15_t)0x55bf, (q15_t)0xc3cf, (q15_t)0x55b3, (q15_t)0xc3ca, (q15_t)0x55a7, (q15_t)0xc3c6, (q15_t)0x559b, (q15_t)0xc3c2, - (q15_t)0x5590, (q15_t)0xc3be, (q15_t)0x5584, (q15_t)0xc3ba, (q15_t)0x5578, (q15_t)0xc3b5, (q15_t)0x556c, (q15_t)0xc3b1, - (q15_t)0x5560, (q15_t)0xc3ad, (q15_t)0x5554, (q15_t)0xc3a9, (q15_t)0x5549, (q15_t)0xc3a5, (q15_t)0x553d, (q15_t)0xc3a0, - (q15_t)0x5531, (q15_t)0xc39c, (q15_t)0x5525, (q15_t)0xc398, (q15_t)0x5519, (q15_t)0xc394, (q15_t)0x550d, (q15_t)0xc390, - (q15_t)0x5501, (q15_t)0xc38c, (q15_t)0x54f6, (q15_t)0xc387, (q15_t)0x54ea, (q15_t)0xc383, (q15_t)0x54de, (q15_t)0xc37f, - (q15_t)0x54d2, (q15_t)0xc37b, (q15_t)0x54c6, (q15_t)0xc377, (q15_t)0x54ba, (q15_t)0xc373, (q15_t)0x54ae, (q15_t)0xc36f, - (q15_t)0x54a2, (q15_t)0xc36b, (q15_t)0x5496, (q15_t)0xc367, (q15_t)0x548b, (q15_t)0xc363, (q15_t)0x547f, (q15_t)0xc35f, - (q15_t)0x5473, (q15_t)0xc35b, (q15_t)0x5467, (q15_t)0xc357, (q15_t)0x545b, (q15_t)0xc353, (q15_t)0x544f, (q15_t)0xc34f, - (q15_t)0x5443, (q15_t)0xc34b, (q15_t)0x5437, (q15_t)0xc347, (q15_t)0x542b, (q15_t)0xc343, (q15_t)0x541f, (q15_t)0xc33f, - (q15_t)0x5413, (q15_t)0xc33b, (q15_t)0x5407, (q15_t)0xc337, (q15_t)0x53fb, (q15_t)0xc333, (q15_t)0x53f0, (q15_t)0xc32f, - (q15_t)0x53e4, (q15_t)0xc32b, (q15_t)0x53d8, (q15_t)0xc327, (q15_t)0x53cc, (q15_t)0xc323, (q15_t)0x53c0, (q15_t)0xc320, - (q15_t)0x53b4, (q15_t)0xc31c, (q15_t)0x53a8, (q15_t)0xc318, (q15_t)0x539c, (q15_t)0xc314, (q15_t)0x5390, (q15_t)0xc310, - (q15_t)0x5384, (q15_t)0xc30c, (q15_t)0x5378, (q15_t)0xc308, (q15_t)0x536c, (q15_t)0xc305, (q15_t)0x5360, (q15_t)0xc301, - (q15_t)0x5354, (q15_t)0xc2fd, (q15_t)0x5348, (q15_t)0xc2f9, (q15_t)0x533c, (q15_t)0xc2f5, (q15_t)0x5330, (q15_t)0xc2f2, - (q15_t)0x5324, (q15_t)0xc2ee, (q15_t)0x5318, (q15_t)0xc2ea, (q15_t)0x530c, (q15_t)0xc2e6, (q15_t)0x5300, (q15_t)0xc2e3, - (q15_t)0x52f4, (q15_t)0xc2df, (q15_t)0x52e8, (q15_t)0xc2db, (q15_t)0x52dc, (q15_t)0xc2d8, (q15_t)0x52d0, (q15_t)0xc2d4, - (q15_t)0x52c4, (q15_t)0xc2d0, (q15_t)0x52b8, (q15_t)0xc2cc, (q15_t)0x52ac, (q15_t)0xc2c9, (q15_t)0x52a0, (q15_t)0xc2c5, - (q15_t)0x5294, (q15_t)0xc2c1, (q15_t)0x5288, (q15_t)0xc2be, (q15_t)0x527c, (q15_t)0xc2ba, (q15_t)0x5270, (q15_t)0xc2b7, - (q15_t)0x5264, (q15_t)0xc2b3, (q15_t)0x5258, (q15_t)0xc2af, (q15_t)0x524c, (q15_t)0xc2ac, (q15_t)0x5240, (q15_t)0xc2a8, - (q15_t)0x5234, (q15_t)0xc2a5, (q15_t)0x5228, (q15_t)0xc2a1, (q15_t)0x521c, (q15_t)0xc29d, (q15_t)0x5210, (q15_t)0xc29a, - (q15_t)0x5204, (q15_t)0xc296, (q15_t)0x51f7, (q15_t)0xc293, (q15_t)0x51eb, (q15_t)0xc28f, (q15_t)0x51df, (q15_t)0xc28c, - (q15_t)0x51d3, (q15_t)0xc288, (q15_t)0x51c7, (q15_t)0xc285, (q15_t)0x51bb, (q15_t)0xc281, (q15_t)0x51af, (q15_t)0xc27e, - (q15_t)0x51a3, (q15_t)0xc27a, (q15_t)0x5197, (q15_t)0xc277, (q15_t)0x518b, (q15_t)0xc273, (q15_t)0x517f, (q15_t)0xc270, - (q15_t)0x5173, (q15_t)0xc26d, (q15_t)0x5167, (q15_t)0xc269, (q15_t)0x515a, (q15_t)0xc266, (q15_t)0x514e, (q15_t)0xc262, - (q15_t)0x5142, (q15_t)0xc25f, (q15_t)0x5136, (q15_t)0xc25c, (q15_t)0x512a, (q15_t)0xc258, (q15_t)0x511e, (q15_t)0xc255, - (q15_t)0x5112, (q15_t)0xc251, (q15_t)0x5106, (q15_t)0xc24e, (q15_t)0x50fa, (q15_t)0xc24b, (q15_t)0x50ed, (q15_t)0xc247, - (q15_t)0x50e1, (q15_t)0xc244, (q15_t)0x50d5, (q15_t)0xc241, (q15_t)0x50c9, (q15_t)0xc23e, (q15_t)0x50bd, (q15_t)0xc23a, - (q15_t)0x50b1, (q15_t)0xc237, (q15_t)0x50a5, (q15_t)0xc234, (q15_t)0x5099, (q15_t)0xc230, (q15_t)0x508c, (q15_t)0xc22d, - (q15_t)0x5080, (q15_t)0xc22a, (q15_t)0x5074, (q15_t)0xc227, (q15_t)0x5068, (q15_t)0xc223, (q15_t)0x505c, (q15_t)0xc220, - (q15_t)0x5050, (q15_t)0xc21d, (q15_t)0x5044, (q15_t)0xc21a, (q15_t)0x5037, (q15_t)0xc217, (q15_t)0x502b, (q15_t)0xc213, - (q15_t)0x501f, (q15_t)0xc210, (q15_t)0x5013, (q15_t)0xc20d, (q15_t)0x5007, (q15_t)0xc20a, (q15_t)0x4ffb, (q15_t)0xc207, - (q15_t)0x4fee, (q15_t)0xc204, (q15_t)0x4fe2, (q15_t)0xc201, (q15_t)0x4fd6, (q15_t)0xc1fd, (q15_t)0x4fca, (q15_t)0xc1fa, - (q15_t)0x4fbe, (q15_t)0xc1f7, (q15_t)0x4fb2, (q15_t)0xc1f4, (q15_t)0x4fa5, (q15_t)0xc1f1, (q15_t)0x4f99, (q15_t)0xc1ee, - (q15_t)0x4f8d, (q15_t)0xc1eb, (q15_t)0x4f81, (q15_t)0xc1e8, (q15_t)0x4f75, (q15_t)0xc1e5, (q15_t)0x4f68, (q15_t)0xc1e2, - (q15_t)0x4f5c, (q15_t)0xc1df, (q15_t)0x4f50, (q15_t)0xc1dc, (q15_t)0x4f44, (q15_t)0xc1d9, (q15_t)0x4f38, (q15_t)0xc1d6, - (q15_t)0x4f2b, (q15_t)0xc1d3, (q15_t)0x4f1f, (q15_t)0xc1d0, (q15_t)0x4f13, (q15_t)0xc1cd, (q15_t)0x4f07, (q15_t)0xc1ca, - (q15_t)0x4efb, (q15_t)0xc1c7, (q15_t)0x4eee, (q15_t)0xc1c4, (q15_t)0x4ee2, (q15_t)0xc1c1, (q15_t)0x4ed6, (q15_t)0xc1be, - (q15_t)0x4eca, (q15_t)0xc1bb, (q15_t)0x4ebd, (q15_t)0xc1b8, (q15_t)0x4eb1, (q15_t)0xc1b6, (q15_t)0x4ea5, (q15_t)0xc1b3, - (q15_t)0x4e99, (q15_t)0xc1b0, (q15_t)0x4e8c, (q15_t)0xc1ad, (q15_t)0x4e80, (q15_t)0xc1aa, (q15_t)0x4e74, (q15_t)0xc1a7, - (q15_t)0x4e68, (q15_t)0xc1a4, (q15_t)0x4e5c, (q15_t)0xc1a2, (q15_t)0x4e4f, (q15_t)0xc19f, (q15_t)0x4e43, (q15_t)0xc19c, - (q15_t)0x4e37, (q15_t)0xc199, (q15_t)0x4e2b, (q15_t)0xc196, (q15_t)0x4e1e, (q15_t)0xc194, (q15_t)0x4e12, (q15_t)0xc191, - (q15_t)0x4e06, (q15_t)0xc18e, (q15_t)0x4df9, (q15_t)0xc18b, (q15_t)0x4ded, (q15_t)0xc189, (q15_t)0x4de1, (q15_t)0xc186, - (q15_t)0x4dd5, (q15_t)0xc183, (q15_t)0x4dc8, (q15_t)0xc180, (q15_t)0x4dbc, (q15_t)0xc17e, (q15_t)0x4db0, (q15_t)0xc17b, - (q15_t)0x4da4, (q15_t)0xc178, (q15_t)0x4d97, (q15_t)0xc176, (q15_t)0x4d8b, (q15_t)0xc173, (q15_t)0x4d7f, (q15_t)0xc170, - (q15_t)0x4d72, (q15_t)0xc16e, (q15_t)0x4d66, (q15_t)0xc16b, (q15_t)0x4d5a, (q15_t)0xc168, (q15_t)0x4d4e, (q15_t)0xc166, - (q15_t)0x4d41, (q15_t)0xc163, (q15_t)0x4d35, (q15_t)0xc161, (q15_t)0x4d29, (q15_t)0xc15e, (q15_t)0x4d1c, (q15_t)0xc15b, - (q15_t)0x4d10, (q15_t)0xc159, (q15_t)0x4d04, (q15_t)0xc156, (q15_t)0x4cf8, (q15_t)0xc154, (q15_t)0x4ceb, (q15_t)0xc151, - (q15_t)0x4cdf, (q15_t)0xc14f, (q15_t)0x4cd3, (q15_t)0xc14c, (q15_t)0x4cc6, (q15_t)0xc14a, (q15_t)0x4cba, (q15_t)0xc147, - (q15_t)0x4cae, (q15_t)0xc145, (q15_t)0x4ca1, (q15_t)0xc142, (q15_t)0x4c95, (q15_t)0xc140, (q15_t)0x4c89, (q15_t)0xc13d, - (q15_t)0x4c7c, (q15_t)0xc13b, (q15_t)0x4c70, (q15_t)0xc138, (q15_t)0x4c64, (q15_t)0xc136, (q15_t)0x4c57, (q15_t)0xc134, - (q15_t)0x4c4b, (q15_t)0xc131, (q15_t)0x4c3f, (q15_t)0xc12f, (q15_t)0x4c32, (q15_t)0xc12c, (q15_t)0x4c26, (q15_t)0xc12a, - (q15_t)0x4c1a, (q15_t)0xc128, (q15_t)0x4c0d, (q15_t)0xc125, (q15_t)0x4c01, (q15_t)0xc123, (q15_t)0x4bf5, (q15_t)0xc120, - (q15_t)0x4be8, (q15_t)0xc11e, (q15_t)0x4bdc, (q15_t)0xc11c, (q15_t)0x4bd0, (q15_t)0xc119, (q15_t)0x4bc3, (q15_t)0xc117, - (q15_t)0x4bb7, (q15_t)0xc115, (q15_t)0x4bab, (q15_t)0xc113, (q15_t)0x4b9e, (q15_t)0xc110, (q15_t)0x4b92, (q15_t)0xc10e, - (q15_t)0x4b85, (q15_t)0xc10c, (q15_t)0x4b79, (q15_t)0xc109, (q15_t)0x4b6d, (q15_t)0xc107, (q15_t)0x4b60, (q15_t)0xc105, - (q15_t)0x4b54, (q15_t)0xc103, (q15_t)0x4b48, (q15_t)0xc100, (q15_t)0x4b3b, (q15_t)0xc0fe, (q15_t)0x4b2f, (q15_t)0xc0fc, - (q15_t)0x4b23, (q15_t)0xc0fa, (q15_t)0x4b16, (q15_t)0xc0f8, (q15_t)0x4b0a, (q15_t)0xc0f6, (q15_t)0x4afd, (q15_t)0xc0f3, - (q15_t)0x4af1, (q15_t)0xc0f1, (q15_t)0x4ae5, (q15_t)0xc0ef, (q15_t)0x4ad8, (q15_t)0xc0ed, (q15_t)0x4acc, (q15_t)0xc0eb, - (q15_t)0x4ac0, (q15_t)0xc0e9, (q15_t)0x4ab3, (q15_t)0xc0e7, (q15_t)0x4aa7, (q15_t)0xc0e4, (q15_t)0x4a9a, (q15_t)0xc0e2, - (q15_t)0x4a8e, (q15_t)0xc0e0, (q15_t)0x4a82, (q15_t)0xc0de, (q15_t)0x4a75, (q15_t)0xc0dc, (q15_t)0x4a69, (q15_t)0xc0da, - (q15_t)0x4a5c, (q15_t)0xc0d8, (q15_t)0x4a50, (q15_t)0xc0d6, (q15_t)0x4a44, (q15_t)0xc0d4, (q15_t)0x4a37, (q15_t)0xc0d2, - (q15_t)0x4a2b, (q15_t)0xc0d0, (q15_t)0x4a1e, (q15_t)0xc0ce, (q15_t)0x4a12, (q15_t)0xc0cc, (q15_t)0x4a06, (q15_t)0xc0ca, - (q15_t)0x49f9, (q15_t)0xc0c8, (q15_t)0x49ed, (q15_t)0xc0c6, (q15_t)0x49e0, (q15_t)0xc0c4, (q15_t)0x49d4, (q15_t)0xc0c2, - (q15_t)0x49c7, (q15_t)0xc0c0, (q15_t)0x49bb, (q15_t)0xc0be, (q15_t)0x49af, (q15_t)0xc0bd, (q15_t)0x49a2, (q15_t)0xc0bb, - (q15_t)0x4996, (q15_t)0xc0b9, (q15_t)0x4989, (q15_t)0xc0b7, (q15_t)0x497d, (q15_t)0xc0b5, (q15_t)0x4970, (q15_t)0xc0b3, - (q15_t)0x4964, (q15_t)0xc0b1, (q15_t)0x4958, (q15_t)0xc0af, (q15_t)0x494b, (q15_t)0xc0ae, (q15_t)0x493f, (q15_t)0xc0ac, - (q15_t)0x4932, (q15_t)0xc0aa, (q15_t)0x4926, (q15_t)0xc0a8, (q15_t)0x4919, (q15_t)0xc0a6, (q15_t)0x490d, (q15_t)0xc0a5, - (q15_t)0x4901, (q15_t)0xc0a3, (q15_t)0x48f4, (q15_t)0xc0a1, (q15_t)0x48e8, (q15_t)0xc09f, (q15_t)0x48db, (q15_t)0xc09e, - (q15_t)0x48cf, (q15_t)0xc09c, (q15_t)0x48c2, (q15_t)0xc09a, (q15_t)0x48b6, (q15_t)0xc098, (q15_t)0x48a9, (q15_t)0xc097, - (q15_t)0x489d, (q15_t)0xc095, (q15_t)0x4891, (q15_t)0xc093, (q15_t)0x4884, (q15_t)0xc092, (q15_t)0x4878, (q15_t)0xc090, - (q15_t)0x486b, (q15_t)0xc08e, (q15_t)0x485f, (q15_t)0xc08d, (q15_t)0x4852, (q15_t)0xc08b, (q15_t)0x4846, (q15_t)0xc089, - (q15_t)0x4839, (q15_t)0xc088, (q15_t)0x482d, (q15_t)0xc086, (q15_t)0x4820, (q15_t)0xc085, (q15_t)0x4814, (q15_t)0xc083, - (q15_t)0x4807, (q15_t)0xc081, (q15_t)0x47fb, (q15_t)0xc080, (q15_t)0x47ef, (q15_t)0xc07e, (q15_t)0x47e2, (q15_t)0xc07d, - (q15_t)0x47d6, (q15_t)0xc07b, (q15_t)0x47c9, (q15_t)0xc07a, (q15_t)0x47bd, (q15_t)0xc078, (q15_t)0x47b0, (q15_t)0xc077, - (q15_t)0x47a4, (q15_t)0xc075, (q15_t)0x4797, (q15_t)0xc074, (q15_t)0x478b, (q15_t)0xc072, (q15_t)0x477e, (q15_t)0xc071, - (q15_t)0x4772, (q15_t)0xc06f, (q15_t)0x4765, (q15_t)0xc06e, (q15_t)0x4759, (q15_t)0xc06c, (q15_t)0x474c, (q15_t)0xc06b, - (q15_t)0x4740, (q15_t)0xc069, (q15_t)0x4733, (q15_t)0xc068, (q15_t)0x4727, (q15_t)0xc067, (q15_t)0x471a, (q15_t)0xc065, - (q15_t)0x470e, (q15_t)0xc064, (q15_t)0x4701, (q15_t)0xc062, (q15_t)0x46f5, (q15_t)0xc061, (q15_t)0x46e8, (q15_t)0xc060, - (q15_t)0x46dc, (q15_t)0xc05e, (q15_t)0x46cf, (q15_t)0xc05d, (q15_t)0x46c3, (q15_t)0xc05c, (q15_t)0x46b6, (q15_t)0xc05a, - (q15_t)0x46aa, (q15_t)0xc059, (q15_t)0x469d, (q15_t)0xc058, (q15_t)0x4691, (q15_t)0xc056, (q15_t)0x4684, (q15_t)0xc055, - (q15_t)0x4678, (q15_t)0xc054, (q15_t)0x466b, (q15_t)0xc053, (q15_t)0x465f, (q15_t)0xc051, (q15_t)0x4652, (q15_t)0xc050, - (q15_t)0x4646, (q15_t)0xc04f, (q15_t)0x4639, (q15_t)0xc04e, (q15_t)0x462d, (q15_t)0xc04c, (q15_t)0x4620, (q15_t)0xc04b, - (q15_t)0x4614, (q15_t)0xc04a, (q15_t)0x4607, (q15_t)0xc049, (q15_t)0x45fb, (q15_t)0xc048, (q15_t)0x45ee, (q15_t)0xc047, - (q15_t)0x45e2, (q15_t)0xc045, (q15_t)0x45d5, (q15_t)0xc044, (q15_t)0x45c9, (q15_t)0xc043, (q15_t)0x45bc, (q15_t)0xc042, - (q15_t)0x45b0, (q15_t)0xc041, (q15_t)0x45a3, (q15_t)0xc040, (q15_t)0x4597, (q15_t)0xc03f, (q15_t)0x458a, (q15_t)0xc03d, - (q15_t)0x457e, (q15_t)0xc03c, (q15_t)0x4571, (q15_t)0xc03b, (q15_t)0x4565, (q15_t)0xc03a, (q15_t)0x4558, (q15_t)0xc039, - (q15_t)0x454c, (q15_t)0xc038, (q15_t)0x453f, (q15_t)0xc037, (q15_t)0x4533, (q15_t)0xc036, (q15_t)0x4526, (q15_t)0xc035, - (q15_t)0x451a, (q15_t)0xc034, (q15_t)0x450d, (q15_t)0xc033, (q15_t)0x4500, (q15_t)0xc032, (q15_t)0x44f4, (q15_t)0xc031, - (q15_t)0x44e7, (q15_t)0xc030, (q15_t)0x44db, (q15_t)0xc02f, (q15_t)0x44ce, (q15_t)0xc02e, (q15_t)0x44c2, (q15_t)0xc02d, - (q15_t)0x44b5, (q15_t)0xc02c, (q15_t)0x44a9, (q15_t)0xc02b, (q15_t)0x449c, (q15_t)0xc02b, (q15_t)0x4490, (q15_t)0xc02a, - (q15_t)0x4483, (q15_t)0xc029, (q15_t)0x4477, (q15_t)0xc028, (q15_t)0x446a, (q15_t)0xc027, (q15_t)0x445e, (q15_t)0xc026, - (q15_t)0x4451, (q15_t)0xc025, (q15_t)0x4444, (q15_t)0xc024, (q15_t)0x4438, (q15_t)0xc024, (q15_t)0x442b, (q15_t)0xc023, - (q15_t)0x441f, (q15_t)0xc022, (q15_t)0x4412, (q15_t)0xc021, (q15_t)0x4406, (q15_t)0xc020, (q15_t)0x43f9, (q15_t)0xc020, - (q15_t)0x43ed, (q15_t)0xc01f, (q15_t)0x43e0, (q15_t)0xc01e, (q15_t)0x43d4, (q15_t)0xc01d, (q15_t)0x43c7, (q15_t)0xc01d, - (q15_t)0x43bb, (q15_t)0xc01c, (q15_t)0x43ae, (q15_t)0xc01b, (q15_t)0x43a1, (q15_t)0xc01a, (q15_t)0x4395, (q15_t)0xc01a, - (q15_t)0x4388, (q15_t)0xc019, (q15_t)0x437c, (q15_t)0xc018, (q15_t)0x436f, (q15_t)0xc018, (q15_t)0x4363, (q15_t)0xc017, - (q15_t)0x4356, (q15_t)0xc016, (q15_t)0x434a, (q15_t)0xc016, (q15_t)0x433d, (q15_t)0xc015, (q15_t)0x4330, (q15_t)0xc014, - (q15_t)0x4324, (q15_t)0xc014, (q15_t)0x4317, (q15_t)0xc013, (q15_t)0x430b, (q15_t)0xc013, (q15_t)0x42fe, (q15_t)0xc012, - (q15_t)0x42f2, (q15_t)0xc011, (q15_t)0x42e5, (q15_t)0xc011, (q15_t)0x42d9, (q15_t)0xc010, (q15_t)0x42cc, (q15_t)0xc010, - (q15_t)0x42c0, (q15_t)0xc00f, (q15_t)0x42b3, (q15_t)0xc00f, (q15_t)0x42a6, (q15_t)0xc00e, (q15_t)0x429a, (q15_t)0xc00e, - (q15_t)0x428d, (q15_t)0xc00d, (q15_t)0x4281, (q15_t)0xc00d, (q15_t)0x4274, (q15_t)0xc00c, (q15_t)0x4268, (q15_t)0xc00c, - (q15_t)0x425b, (q15_t)0xc00b, (q15_t)0x424e, (q15_t)0xc00b, (q15_t)0x4242, (q15_t)0xc00a, (q15_t)0x4235, (q15_t)0xc00a, - (q15_t)0x4229, (q15_t)0xc009, (q15_t)0x421c, (q15_t)0xc009, (q15_t)0x4210, (q15_t)0xc009, (q15_t)0x4203, (q15_t)0xc008, - (q15_t)0x41f7, (q15_t)0xc008, (q15_t)0x41ea, (q15_t)0xc007, (q15_t)0x41dd, (q15_t)0xc007, (q15_t)0x41d1, (q15_t)0xc007, - (q15_t)0x41c4, (q15_t)0xc006, (q15_t)0x41b8, (q15_t)0xc006, (q15_t)0x41ab, (q15_t)0xc006, (q15_t)0x419f, (q15_t)0xc005, - (q15_t)0x4192, (q15_t)0xc005, (q15_t)0x4186, (q15_t)0xc005, (q15_t)0x4179, (q15_t)0xc004, (q15_t)0x416c, (q15_t)0xc004, - (q15_t)0x4160, (q15_t)0xc004, (q15_t)0x4153, (q15_t)0xc004, (q15_t)0x4147, (q15_t)0xc003, (q15_t)0x413a, (q15_t)0xc003, - (q15_t)0x412e, (q15_t)0xc003, (q15_t)0x4121, (q15_t)0xc003, (q15_t)0x4114, (q15_t)0xc002, (q15_t)0x4108, (q15_t)0xc002, - (q15_t)0x40fb, (q15_t)0xc002, (q15_t)0x40ef, (q15_t)0xc002, (q15_t)0x40e2, (q15_t)0xc002, (q15_t)0x40d6, (q15_t)0xc001, - (q15_t)0x40c9, (q15_t)0xc001, (q15_t)0x40bc, (q15_t)0xc001, (q15_t)0x40b0, (q15_t)0xc001, (q15_t)0x40a3, (q15_t)0xc001, - (q15_t)0x4097, (q15_t)0xc001, (q15_t)0x408a, (q15_t)0xc001, (q15_t)0x407e, (q15_t)0xc000, (q15_t)0x4071, (q15_t)0xc000, - (q15_t)0x4065, (q15_t)0xc000, (q15_t)0x4058, (q15_t)0xc000, (q15_t)0x404b, (q15_t)0xc000, (q15_t)0x403f, (q15_t)0xc000, - (q15_t)0x4032, (q15_t)0xc000, (q15_t)0x4026, (q15_t)0xc000, (q15_t)0x4019, (q15_t)0xc000, (q15_t)0x400d, (q15_t)0xc000, -}; - -#endif -/** - @} end of RealFFT_Table group - */ - -/** - @ingroup DCT4_IDCT4 - */ - -/** - @addtogroup DCT4_IDCT4_Table DCT Type IV Tables - @{ - */ - -/** - @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. - */ - - -/** - @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) -*/ - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_128) - 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 -}; - - 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 -}; - - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_512) - 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 -}; - - 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 -}; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_2048) - 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 -}; - 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 -}; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_8192) - const float32_t Weights_8192[16384] = { - 1.000000000000000000f, -0.000000000000000000f, 0.999999981616429330f, - -0.000191747597310703f, - 0.999999926465717890f, -0.000383495187571396f, 0.999999834547867670f, - -0.000575242763732066f, - 0.999999705862882230f, -0.000766990318742704f, 0.999999540410766110f, - -0.000958737845553301f, - 0.999999338191525530f, -0.001150485337113849f, 0.999999099205167830f, - -0.001342232786374338f, - 0.999998823451701880f, -0.001533980186284766f, 0.999998510931137790f, - -0.001725727529795126f, - 0.999998161643486980f, -0.001917474809855419f, 0.999997775588762350f, - -0.002109222019415644f, - 0.999997352766978210f, -0.002300969151425805f, 0.999996893178149880f, - -0.002492716198835908f, - 0.999996396822294350f, -0.002684463154595962f, 0.999995863699429940f, - -0.002876210011655979f, - 0.999995293809576190f, -0.003067956762965976f, 0.999994687152754080f, - -0.003259703401475973f, - 0.999994043728985820f, -0.003451449920135994f, 0.999993363538295150f, - -0.003643196311896068f, - 0.999992646580707190f, -0.003834942569706228f, 0.999991892856248010f, - -0.004026688686516512f, - 0.999991102364945590f, -0.004218434655276963f, 0.999990275106828920f, - -0.004410180468937631f, - 0.999989411081928400f, -0.004601926120448571f, 0.999988510290275690f, - -0.004793671602759841f, - 0.999987572731904080f, -0.004985416908821511f, 0.999986598406848000f, - -0.005177162031583651f, - 0.999985587315143200f, -0.005368906963996343f, 0.999984539456826970f, - -0.005560651699009674f, - 0.999983454831937730f, -0.005752396229573736f, 0.999982333440515350f, - -0.005944140548638633f, - 0.999981175282601110f, -0.006135884649154475f, 0.999979980358237650f, - -0.006327628524071378f, - 0.999978748667468830f, -0.006519372166339468f, 0.999977480210339940f, - -0.006711115568908879f, - 0.999976174986897610f, -0.006902858724729756f, 0.999974832997189810f, - -0.007094601626752250f, - 0.999973454241265940f, -0.007286344267926521f, 0.999972038719176730f, - -0.007478086641202744f, - 0.999970586430974140f, -0.007669828739531097f, 0.999969097376711580f, - -0.007861570555861772f, - 0.999967571556443780f, -0.008053312083144972f, 0.999966008970226920f, - -0.008245053314330906f, - 0.999964409618118280f, -0.008436794242369799f, 0.999962773500176930f, - -0.008628534860211886f, - 0.999961100616462820f, -0.008820275160807412f, 0.999959390967037450f, - -0.009012015137106633f, - 0.999957644551963900f, -0.009203754782059819f, 0.999955861371306100f, - -0.009395494088617252f, - 0.999954041425129780f, -0.009587233049729225f, 0.999952184713501780f, - -0.009778971658346044f, - 0.999950291236490480f, -0.009970709907418031f, 0.999948360994165400f, - -0.010162447789895513f, - 0.999946393986597460f, -0.010354185298728842f, 0.999944390213859060f, - -0.010545922426868378f, - 0.999942349676023910f, -0.010737659167264491f, 0.999940272373166960f, - -0.010929395512867571f, - 0.999938158305364590f, -0.011121131456628021f, 0.999936007472694620f, - -0.011312866991496258f, - 0.999933819875236000f, -0.011504602110422714f, 0.999931595513069200f, - -0.011696336806357838f, - 0.999929334386276070f, -0.011888071072252092f, 0.999927036494939640f, - -0.012079804901055957f, - 0.999924701839144500f, -0.012271538285719925f, 0.999922330418976490f, - -0.012463271219194511f, - 0.999919922234522750f, -0.012655003694430242f, 0.999917477285871770f, - -0.012846735704377662f, - 0.999914995573113470f, -0.013038467241987334f, 0.999912477096339240f, - -0.013230198300209835f, - 0.999909921855641540f, -0.013421928871995765f, 0.999907329851114300f, - -0.013613658950295740f, - 0.999904701082852900f, -0.013805388528060391f, 0.999902035550953920f, - -0.013997117598240367f, - 0.999899333255515390f, -0.014188846153786345f, 0.999896594196636680f, - -0.014380574187649006f, - 0.999893818374418490f, -0.014572301692779064f, 0.999891005788962950f, - -0.014764028662127246f, - 0.999888156440373320f, -0.014955755088644296f, 0.999885270328754520f, - -0.015147480965280987f, - 0.999882347454212560f, -0.015339206284988100f, 0.999879387816854930f, - -0.015530931040716447f, - 0.999876391416790410f, -0.015722655225416857f, 0.999873358254129260f, - -0.015914378832040183f, - 0.999870288328982950f, -0.016106101853537287f, 0.999867181641464380f, - -0.016297824282859065f, - 0.999864038191687680f, -0.016489546112956437f, 0.999860857979768540f, - -0.016681267336780332f, - 0.999857641005823860f, -0.016872987947281710f, 0.999854387269971890f, - -0.017064707937411563f, - 0.999851096772332190f, -0.017256427300120877f, 0.999847769513025900f, - -0.017448146028360693f, - 0.999844405492175240f, -0.017639864115082053f, 0.999841004709904000f, - -0.017831581553236039f, - 0.999837567166337090f, -0.018023298335773746f, 0.999834092861600960f, - -0.018215014455646290f, - 0.999830581795823400f, -0.018406729905804820f, 0.999827033969133420f, - -0.018598444679200511f, - 0.999823449381661570f, -0.018790158768784555f, 0.999819828033539420f, - -0.018981872167508178f, - 0.999816169924900410f, -0.019173584868322623f, 0.999812475055878780f, - -0.019365296864179156f, - 0.999808743426610520f, -0.019557008148029083f, 0.999804975037232870f, - -0.019748718712823729f, - 0.999801169887884260f, -0.019940428551514441f, 0.999797327978704690f, - -0.020132137657052594f, - 0.999793449309835270f, -0.020323846022389593f, 0.999789533881418780f, - -0.020515553640476875f, - 0.999785581693599210f, -0.020707260504265895f, 0.999781592746521670f, - -0.020898966606708137f, - 0.999777567040332940f, -0.021090671940755121f, 0.999773504575180990f, - -0.021282376499358387f, - 0.999769405351215280f, -0.021474080275469508f, 0.999765269368586450f, - -0.021665783262040078f, - 0.999761096627446610f, -0.021857485452021735f, 0.999756887127949080f, - -0.022049186838366135f, - 0.999752640870248840f, -0.022240887414024961f, 0.999748357854501780f, - -0.022432587171949934f, - 0.999744038080865430f, -0.022624286105092803f, 0.999739681549498660f, - -0.022815984206405345f, - 0.999735288260561680f, -0.023007681468839369f, 0.999730858214216030f, - -0.023199377885346720f, - 0.999726391410624470f, -0.023391073448879258f, 0.999721887849951310f, - -0.023582768152388894f, - 0.999717347532362190f, -0.023774461988827555f, 0.999712770458023870f, - -0.023966154951147210f, - 0.999708156627104880f, -0.024157847032299864f, 0.999703506039774650f, - -0.024349538225237534f, - 0.999698818696204250f, -0.024541228522912288f, 0.999694094596566000f, - -0.024732917918276223f, - 0.999689333741033640f, -0.024924606404281468f, 0.999684536129782140f, - -0.025116293973880186f, - 0.999679701762987930f, -0.025307980620024571f, 0.999674830640828740f, - -0.025499666335666853f, - 0.999669922763483760f, -0.025691351113759295f, 0.999664978131133310f, - -0.025883034947254198f, - 0.999659996743959220f, -0.026074717829103901f, 0.999654978602144690f, - -0.026266399752260760f, - 0.999649923705874240f, -0.026458080709677187f, 0.999644832055333610f, - -0.026649760694305618f, - 0.999639703650710200f, -0.026841439699098531f, 0.999634538492192300f, - -0.027033117717008431f, - 0.999629336579970110f, -0.027224794740987875f, 0.999624097914234570f, - -0.027416470763989436f, - 0.999618822495178640f, -0.027608145778965740f, 0.999613510322995950f, - -0.027799819778869445f, - 0.999608161397882110f, -0.027991492756653243f, 0.999602775720033530f, - -0.028183164705269874f, - 0.999597353289648380f, -0.028374835617672099f, 0.999591894106925950f, - -0.028566505486812728f, - 0.999586398172067070f, -0.028758174305644615f, 0.999580865485273700f, - -0.028949842067120635f, - 0.999575296046749220f, -0.029141508764193722f, 0.999569689856698580f, - -0.029333174389816835f, - 0.999564046915327740f, -0.029524838936942976f, 0.999558367222844300f, - -0.029716502398525191f, - 0.999552650779456990f, -0.029908164767516555f, 0.999546897585375960f, - -0.030099826036870198f, - 0.999541107640812940f, -0.030291486199539284f, 0.999535280945980540f, - -0.030483145248477009f, - 0.999529417501093140f, -0.030674803176636626f, 0.999523517306366350f, - -0.030866459976971412f, - 0.999517580362016990f, -0.031058115642434700f, 0.999511606668263440f, - -0.031249770165979861f, - 0.999505596225325310f, -0.031441423540560301f, 0.999499549033423640f, - -0.031633075759129478f, - 0.999493465092780590f, -0.031824726814640887f, 0.999487344403620080f, - -0.032016376700048060f, - 0.999481186966166950f, -0.032208025408304586f, 0.999474992780647780f, - -0.032399672932364086f, - 0.999468761847290050f, -0.032591319265180226f, 0.999462494166323160f, - -0.032782964399706724f, - 0.999456189737977340f, -0.032974608328897335f, 0.999449848562484530f, - -0.033166251045705857f, - 0.999443470640077770f, -0.033357892543086139f, 0.999437055970991530f, - -0.033549532813992068f, - 0.999430604555461730f, -0.033741171851377580f, 0.999424116393725640f, - -0.033932809648196664f, - 0.999417591486021720f, -0.034124446197403326f, 0.999411029832589780f, - -0.034316081491951651f, - 0.999404431433671300f, -0.034507715524795750f, 0.999397796289508640f, - -0.034699348288889799f, - 0.999391124400346050f, -0.034890979777188004f, 0.999384415766428560f, - -0.035082609982644619f, - 0.999377670388002850f, -0.035274238898213947f, 0.999370888265317170f, - -0.035465866516850353f, - 0.999364069398620550f, -0.035657492831508222f, 0.999357213788164000f, - -0.035849117835142018f, - 0.999350321434199440f, -0.036040741520706229f, 0.999343392336980220f, - -0.036232363881155395f, - 0.999336426496761240f, -0.036423984909444110f, 0.999329423913798420f, - -0.036615604598527030f, - 0.999322384588349540f, -0.036807222941358832f, 0.999315308520673070f, - -0.036998839930894263f, - 0.999308195711029470f, -0.037190455560088119f, 0.999301046159680070f, - -0.037382069821895229f, - 0.999293859866887790f, -0.037573682709270494f, 0.999286636832916740f, - -0.037765294215168860f, - 0.999279377058032710f, -0.037956904332545310f, 0.999272080542502610f, - -0.038148513054354891f, - 0.999264747286594420f, -0.038340120373552694f, 0.999257377290578060f, - -0.038531726283093870f, - 0.999249970554724420f, -0.038723330775933623f, 0.999242527079305830f, - -0.038914933845027193f, - 0.999235046864595850f, -0.039106535483329888f, 0.999227529910869610f, - -0.039298135683797059f, - 0.999219976218403530f, -0.039489734439384118f, 0.999212385787475290f, - -0.039681331743046527f, - 0.999204758618363890f, -0.039872927587739811f, 0.999197094711349880f, - -0.040064521966419520f, - 0.999189394066714920f, -0.040256114872041282f, 0.999181656684742350f, - -0.040447706297560782f, - 0.999173882565716380f, -0.040639296235933736f, 0.999166071709923000f, - -0.040830884680115948f, - 0.999158224117649430f, -0.041022471623063238f, 0.999150339789184110f, - -0.041214057057731519f, - 0.999142418724816910f, -0.041405640977076739f, 0.999134460924839150f, - -0.041597223374054894f, - 0.999126466389543390f, -0.041788804241622061f, 0.999118435119223490f, - -0.041980383572734356f, - 0.999110367114174890f, -0.042171961360347947f, 0.999102262374694130f, - -0.042363537597419072f, - 0.999094120901079070f, -0.042555112276904020f, 0.999085942693629270f, - -0.042746685391759132f, - 0.999077727752645360f, -0.042938256934940820f, 0.999069476078429330f, - -0.043129826899405546f, - 0.999061187671284600f, -0.043321395278109825f, 0.999052862531515930f, - -0.043512962064010237f, - 0.999044500659429290f, -0.043704527250063421f, 0.999036102055332330f, - -0.043896090829226068f, - 0.999027666719533690f, -0.044087652794454944f, 0.999019194652343460f, - -0.044279213138706849f, - 0.999010685854073380f, -0.044470771854938668f, 0.999002140325035980f, - -0.044662328936107325f, - 0.998993558065545680f, -0.044853884375169815f, 0.998984939075918010f, - -0.045045438165083197f, - 0.998976283356469820f, -0.045236990298804590f, 0.998967590907519300f, - -0.045428540769291155f, - 0.998958861729386080f, -0.045620089569500144f, 0.998950095822391250f, - -0.045811636692388844f, - 0.998941293186856870f, -0.046003182130914623f, 0.998932453823106690f, - -0.046194725878034908f, - 0.998923577731465780f, -0.046386267926707157f, 0.998914664912260440f, - -0.046577808269888943f, - 0.998905715365818290f, -0.046769346900537863f, 0.998896729092468410f, - -0.046960883811611592f, - 0.998887706092541290f, -0.047152418996067869f, 0.998878646366368690f, - -0.047343952446864478f, - 0.998869549914283560f, -0.047535484156959303f, 0.998860416736620520f, - -0.047727014119310254f, - 0.998851246833715180f, -0.047918542326875327f, 0.998842040205904840f, - -0.048110068772612591f, - 0.998832796853527990f, -0.048301593449480144f, 0.998823516776924490f, - -0.048493116350436176f, - 0.998814199976435390f, -0.048684637468438943f, 0.998804846452403420f, - -0.048876156796446760f, - 0.998795456205172410f, -0.049067674327418015f, 0.998786029235087640f, - -0.049259190054311140f, - 0.998776565542495610f, -0.049450703970084664f, 0.998767065127744380f, - -0.049642216067697156f, - 0.998757527991183340f, -0.049833726340107277f, 0.998747954133162860f, - -0.050025234780273729f, - 0.998738343554035230f, -0.050216741381155311f, 0.998728696254153720f, - -0.050408246135710856f, - 0.998719012233872940f, -0.050599749036899282f, 0.998709291493549030f, - -0.050791250077679581f, - 0.998699534033539280f, -0.050982749251010803f, 0.998689739854202620f, - -0.051174246549852080f, - 0.998679908955899090f, -0.051365741967162593f, 0.998670041338990070f, - -0.051557235495901611f, - 0.998660137003838490f, -0.051748727129028456f, 0.998650195950808280f, - -0.051940216859502536f, - 0.998640218180265270f, -0.052131704680283324f, 0.998630203692576050f, - -0.052323190584330347f, - 0.998620152488108870f, -0.052514674564603223f, 0.998610064567233340f, - -0.052706156614061632f, - 0.998599939930320370f, -0.052897636725665324f, 0.998589778577742230f, - -0.053089114892374133f, - 0.998579580509872500f, -0.053280591107147945f, 0.998569345727086110f, - -0.053472065362946727f, - 0.998559074229759310f, -0.053663537652730520f, 0.998548766018269920f, - -0.053855007969459440f, - 0.998538421092996730f, -0.054046476306093660f, 0.998528039454320230f, - -0.054237942655593452f, - 0.998517621102622210f, -0.054429407010919133f, 0.998507166038285490f, - -0.054620869365031105f, - 0.998496674261694640f, -0.054812329710889854f, 0.998486145773235360f, - -0.055003788041455920f, - 0.998475580573294770f, -0.055195244349689934f, 0.998464978662261250f, - -0.055386698628552597f, - 0.998454340040524800f, -0.055578150871004678f, 0.998443664708476340f, - -0.055769601070007030f, - 0.998432952666508440f, -0.055961049218520569f, 0.998422203915015020f, - -0.056152495309506292f, - 0.998411418454391300f, -0.056343939335925290f, 0.998400596285033640f, - -0.056535381290738700f, - 0.998389737407340160f, -0.056726821166907748f, 0.998378841821709990f, - -0.056918258957393740f, - 0.998367909528543820f, -0.057109694655158062f, 0.998356940528243420f, - -0.057301128253162158f, - 0.998345934821212370f, -0.057492559744367566f, 0.998334892407855000f, - -0.057683989121735904f, - 0.998323813288577560f, -0.057875416378228857f, 0.998312697463787260f, - -0.058066841506808194f, - 0.998301544933892890f, -0.058258264500435752f, 0.998290355699304350f, - -0.058449685352073476f, - 0.998279129760433200f, -0.058641104054683341f, 0.998267867117692110f, - -0.058832520601227435f, - 0.998256567771495180f, -0.059023934984667931f, 0.998245231722257880f, - -0.059215347197967061f, - 0.998233858970396850f, -0.059406757234087150f, 0.998222449516330550f, - -0.059598165085990591f, - 0.998211003360478190f, -0.059789570746639868f, 0.998199520503260660f, - -0.059980974208997548f, - 0.998188000945100300f, -0.060172375466026259f, 0.998176444686420530f, - -0.060363774510688743f, - 0.998164851727646240f, -0.060555171335947788f, 0.998153222069203760f, - -0.060746565934766288f, - 0.998141555711520520f, -0.060937958300107203f, 0.998129852655025630f, - -0.061129348424933588f, - 0.998118112900149180f, -0.061320736302208578f, 0.998106336447323050f, - -0.061512121924895378f, - 0.998094523296980010f, -0.061703505285957298f, 0.998082673449554590f, - -0.061894886378357716f, - 0.998070786905482340f, -0.062086265195060088f, 0.998058863665200250f, - -0.062277641729027972f, - 0.998046903729146840f, -0.062469015973224996f, 0.998034907097761770f, - -0.062660387920614874f, - 0.998022873771486240f, -0.062851757564161406f, 0.998010803750762450f, - -0.063043124896828492f, - 0.997998697036034390f, -0.063234489911580066f, 0.997986553627747020f, - -0.063425852601380228f, - 0.997974373526346990f, -0.063617212959193106f, 0.997962156732281950f, - -0.063808570977982898f, - 0.997949903246001190f, -0.063999926650713940f, 0.997937613067955250f, - -0.064191279970350637f, - 0.997925286198596000f, -0.064382630929857465f, 0.997912922638376610f, - -0.064573979522198982f, - 0.997900522387751620f, -0.064765325740339885f, 0.997888085447177110f, - -0.064956669577244872f, - 0.997875611817110150f, -0.065148011025878833f, 0.997863101498009500f, - -0.065339350079206632f, - 0.997850554490335110f, -0.065530686730193327f, 0.997837970794548280f, - -0.065722020971803990f, - 0.997825350411111640f, -0.065913352797003805f, 0.997812693340489280f, - -0.066104682198758077f, - 0.997799999583146470f, -0.066296009170032130f, 0.997787269139549960f, - -0.066487333703791451f, - 0.997774502010167820f, -0.066678655793001557f, 0.997761698195469560f, - -0.066869975430628115f, - 0.997748857695925690f, -0.067061292609636822f, 0.997735980512008620f, - -0.067252607322993499f, - 0.997723066644191640f, -0.067443919563664051f, 0.997710116092949570f, - -0.067635229324614479f, - 0.997697128858758500f, -0.067826536598810869f, 0.997684104942096030f, - -0.068017841379219388f, - 0.997671044343441000f, -0.068209143658806329f, 0.997657947063273710f, - -0.068400443430538013f, - 0.997644813102075420f, -0.068591740687380942f, 0.997631642460329320f, - -0.068783035422301630f, - 0.997618435138519550f, -0.068974327628266746f, 0.997605191137131640f, - -0.069165617298242985f, - 0.997591910456652630f, -0.069356904425197208f, 0.997578593097570800f, - -0.069548189002096306f, - 0.997565239060375750f, -0.069739471021907307f, 0.997551848345558430f, - -0.069930750477597309f, - 0.997538420953611340f, -0.070122027362133521f, 0.997524956885027960f, - -0.070313301668483250f, - 0.997511456140303450f, -0.070504573389613856f, 0.997497918719934210f, - -0.070695842518492855f, - 0.997484344624417930f, -0.070887109048087801f, 0.997470733854253670f, - -0.071078372971366405f, - 0.997457086409941910f, -0.071269634281296401f, 0.997443402291984360f, - -0.071460892970845680f, - 0.997429681500884180f, -0.071652149032982212f, 0.997415924037145960f, - -0.071843402460674027f, - 0.997402129901275300f, -0.072034653246889332f, 0.997388299093779460f, - -0.072225901384596322f, - 0.997374431615167150f, -0.072417146866763413f, 0.997360527465947940f, - -0.072608389686358993f, - 0.997346586646633230f, -0.072799629836351673f, 0.997332609157735470f, - -0.072990867309710036f, - 0.997318594999768600f, -0.073182102099402888f, 0.997304544173247990f, - -0.073373334198399032f, - 0.997290456678690210f, -0.073564563599667426f, 0.997276332516613180f, - -0.073755790296177098f, - 0.997262171687536170f, -0.073947014280897200f, 0.997247974191979860f, - -0.074138235546796979f, - 0.997233740030466280f, -0.074329454086845756f, 0.997219469203518670f, - -0.074520669894013000f, - 0.997205161711661850f, -0.074711882961268211f, 0.997190817555421940f, - -0.074903093281581082f, - 0.997176436735326190f, -0.075094300847921305f, 0.997162019251903290f, - -0.075285505653258769f, - 0.997147565105683480f, -0.075476707690563388f, 0.997133074297198110f, - -0.075667906952805231f, - 0.997118546826979980f, -0.075859103432954447f, 0.997103982695563330f, - -0.076050297123981259f, - 0.997089381903483400f, -0.076241488018856066f, 0.997074744451277310f, - -0.076432676110549283f, - 0.997060070339482960f, -0.076623861392031492f, 0.997045359568640040f, - -0.076815043856273343f, - 0.997030612139289450f, -0.077006223496245640f, 0.997015828051973310f, - -0.077197400304919200f, - 0.997001007307235290f, -0.077388574275265049f, 0.996986149905620180f, - -0.077579745400254224f, - 0.996971255847674320f, -0.077770913672857947f, 0.996956325133945280f, - -0.077962079086047492f, - 0.996941357764982160f, -0.078153241632794232f, 0.996926353741335090f, - -0.078344401306069705f, - 0.996911313063555740f, -0.078535558098845479f, 0.996896235732197210f, - -0.078726712004093299f, - 0.996881121747813850f, -0.078917863014784942f, 0.996865971110961310f, - -0.079109011123892375f, - 0.996850783822196610f, -0.079300156324387597f, 0.996835559882078170f, - -0.079491298609242769f, - 0.996820299291165670f, -0.079682437971430126f, 0.996805002050020430f, - -0.079873574403921996f, - 0.996789668159204560f, -0.080064707899690890f, 0.996774297619282050f, - -0.080255838451709319f, - 0.996758890430818000f, -0.080446966052950014f, 0.996743446594378860f, - -0.080638090696385709f, - 0.996727966110532490f, -0.080829212374989329f, 0.996712448979848010f, - -0.081020331081733857f, - 0.996696895202896060f, -0.081211446809592441f, 0.996681304780248300f, - -0.081402559551538245f, - 0.996665677712478160f, -0.081593669300544652f, 0.996650014000160070f, - -0.081784776049585076f, - 0.996634313643869900f, -0.081975879791633066f, 0.996618576644185070f, - -0.082166980519662314f, - 0.996602803001684130f, -0.082358078226646536f, 0.996586992716946950f, - -0.082549172905559673f, - 0.996571145790554840f, -0.082740264549375692f, 0.996555262223090540f, - -0.082931353151068699f, - 0.996539342015137940f, -0.083122438703612911f, 0.996523385167282450f, - -0.083313521199982685f, - 0.996507391680110820f, -0.083504600633152432f, 0.996491361554210920f, - -0.083695676996096716f, - 0.996475294790172160f, -0.083886750281790226f, 0.996459191388585410f, - -0.084077820483207694f, - 0.996443051350042630f, -0.084268887593324071f, 0.996426874675137240f, - -0.084459951605114325f, - 0.996410661364464100f, -0.084651012511553617f, 0.996394411418619290f, - -0.084842070305617134f, - 0.996378124838200210f, -0.085033124980280275f, 0.996361801623805720f, - -0.085224176528518478f, - 0.996345441776035900f, -0.085415224943307333f, 0.996329045295492380f, - -0.085606270217622529f, - 0.996312612182778000f, -0.085797312344439894f, 0.996296142438496850f, - -0.085988351316735337f, - 0.996279636063254650f, -0.086179387127484894f, 0.996263093057658140f, - -0.086370419769664752f, - 0.996246513422315520f, -0.086561449236251170f, 0.996229897157836500f, - -0.086752475520220543f, - 0.996213244264832040f, -0.086943498614549378f, 0.996196554743914220f, - -0.087134518512214307f, - 0.996179828595696980f, -0.087325535206192059f, 0.996163065820794950f, - -0.087516548689459531f, - 0.996146266419824620f, -0.087707558954993659f, 0.996129430393403740f, - -0.087898565995771588f, - 0.996112557742151130f, -0.088089569804770507f, 0.996095648466687300f, - -0.088280570374967740f, - 0.996078702567633980f, -0.088471567699340767f, 0.996061720045614000f, - -0.088662561770867149f, - 0.996044700901251970f, -0.088853552582524600f, 0.996027645135173610f, - -0.089044540127290892f, - 0.996010552748005870f, -0.089235524398144014f, 0.995993423740377360f, - -0.089426505388061961f, - 0.995976258112917790f, -0.089617483090022959f, 0.995959055866258320f, - -0.089808457497005278f, - 0.995941817001031350f, -0.089999428601987341f, 0.995924541517870800f, - -0.090190396397947695f, - 0.995907229417411720f, -0.090381360877864983f, 0.995889880700290720f, - -0.090572322034717989f, - 0.995872495367145730f, -0.090763279861485621f, 0.995855073418615790f, - -0.090954234351146926f, - 0.995837614855341610f, -0.091145185496681005f, 0.995820119677964910f, - -0.091336133291067184f, - 0.995802587887129160f, -0.091527077727284828f, 0.995785019483478750f, - -0.091718018798313455f, - 0.995767414467659820f, -0.091908956497132724f, 0.995749772840319510f, - -0.092099890816722388f, - 0.995732094602106430f, -0.092290821750062355f, 0.995714379753670610f, - -0.092481749290132600f, - 0.995696628295663520f, -0.092672673429913310f, 0.995678840228737540f, - -0.092863594162384724f, - 0.995661015553546910f, -0.093054511480527249f, 0.995643154270746900f, - -0.093245425377321375f, - 0.995625256380994310f, -0.093436335845747787f, 0.995607321884947050f, - -0.093627242878787195f, - 0.995589350783264600f, -0.093818146469420549f, 0.995571343076607770f, - -0.094009046610628838f, - 0.995553298765638470f, -0.094199943295393204f, 0.995535217851020390f, - -0.094390836516694943f, - 0.995517100333418110f, -0.094581726267515445f, 0.995498946213497770f, - -0.094772612540836243f, - 0.995480755491926940f, -0.094963495329638992f, 0.995462528169374420f, - -0.095154374626905486f, - 0.995444264246510340f, -0.095345250425617617f, 0.995425963724006160f, - -0.095536122718757471f, - 0.995407626602534900f, -0.095726991499307162f, 0.995389252882770690f, - -0.095917856760249040f, - 0.995370842565388990f, -0.096108718494565509f, 0.995352395651066810f, - -0.096299576695239128f, - 0.995333912140482280f, -0.096490431355252593f, 0.995315392034315070f, - -0.096681282467588725f, - 0.995296835333246090f, -0.096872130025230471f, 0.995278242037957670f, - -0.097062974021160917f, - 0.995259612149133390f, -0.097253814448363271f, 0.995240945667458130f, - -0.097444651299820870f, - 0.995222242593618360f, -0.097635484568517200f, 0.995203502928301510f, - -0.097826314247435861f, - 0.995184726672196930f, -0.098017140329560604f, 0.995165913825994620f, - -0.098207962807875276f, - 0.995147064390386470f, -0.098398781675363881f, 0.995128178366065490f, - -0.098589596925010584f, - 0.995109255753726110f, -0.098780408549799623f, 0.995090296554064000f, - -0.098971216542715429f, - 0.995071300767776170f, -0.099162020896742503f, 0.995052268395561050f, - -0.099352821604865540f, - 0.995033199438118630f, -0.099543618660069319f, 0.995014093896149700f, - -0.099734412055338825f, - 0.994994951770357020f, -0.099925201783659073f, 0.994975773061444140f, - -0.100115987838015310f, - 0.994956557770116380f, -0.100306770211392860f, 0.994937305897080070f, - -0.100497548896777200f, - 0.994918017443043200f, -0.100688323887153960f, 0.994898692408714870f, - -0.100879095175508860f, - 0.994879330794805620f, -0.101069862754827820f, 0.994859932602027320f, - -0.101260626618096830f, - 0.994840497831093180f, -0.101451386758302080f, 0.994821026482717860f, - -0.101642143168429830f, - 0.994801518557617110f, -0.101832895841466530f, 0.994781974056508260f, - -0.102023644770398740f, - 0.994762392980109930f, -0.102214389948213210f, 0.994742775329142010f, - -0.102405131367896720f, - 0.994723121104325700f, -0.102595869022436280f, 0.994703430306383860f, - -0.102786602904819040f, - 0.994683702936040250f, -0.102977333008032220f, 0.994663938994020390f, - -0.103168059325063230f, - 0.994644138481050710f, -0.103358781848899610f, 0.994624301397859400f, - -0.103549500572529070f, - 0.994604427745175660f, -0.103740215488939370f, 0.994584517523730340f, - -0.103930926591118510f, - 0.994564570734255420f, -0.104121633872054590f, 0.994544587377484300f, - -0.104312337324735800f, - 0.994524567454151740f, -0.104503036942150570f, 0.994504510964993700f, - -0.104693732717287390f, - 0.994484417910747600f, -0.104884424643134970f, 0.994464288292152390f, - -0.105075112712682040f, - 0.994444122109948040f, -0.105265796918917600f, 0.994423919364875950f, - -0.105456477254830710f, - 0.994403680057679100f, -0.105647153713410620f, 0.994383404189101430f, - -0.105837826287646670f, - 0.994363091759888570f, -0.106028494970528410f, 0.994342742770787270f, - -0.106219159755045480f, - 0.994322357222545810f, -0.106409820634187680f, 0.994301935115913580f, - -0.106600477600944960f, - 0.994281476451641550f, -0.106791130648307390f, 0.994260981230481790f, - -0.106981779769265230f, - 0.994240449453187900f, -0.107172424956808840f, 0.994219881120514960f, - -0.107363066203928760f, - 0.994199276233218910f, -0.107553703503615620f, 0.994178634792057590f, - -0.107744336848860280f, - 0.994157956797789730f, -0.107934966232653650f, 0.994137242251175720f, - -0.108125591647986870f, - 0.994116491152977070f, -0.108316213087851170f, 0.994095703503956930f, - -0.108506830545237920f, - 0.994074879304879370f, -0.108697444013138720f, 0.994054018556510210f, - -0.108888053484545190f, - 0.994033121259616400f, -0.109078658952449240f, 0.994012187414966220f, - -0.109269260409842780f, - 0.993991217023329380f, -0.109459857849717980f, 0.993970210085476920f, - -0.109650451265067100f, - 0.993949166602181130f, -0.109841040648882600f, 0.993928086574215830f, - -0.110031625994157000f, - 0.993906970002356060f, -0.110222207293883060f, 0.993885816887378090f, - -0.110412784541053630f, - 0.993864627230059750f, -0.110603357728661730f, 0.993843401031180180f, - -0.110793926849700560f, - 0.993822138291519660f, -0.110984491897163390f, 0.993800839011860120f, - -0.111175052864043720f, - 0.993779503192984580f, -0.111365609743335160f, 0.993758130835677430f, - -0.111556162528031480f, - 0.993736721940724600f, -0.111746711211126590f, 0.993715276508913230f, - -0.111937255785614570f, - 0.993693794541031790f, -0.112127796244489640f, 0.993672276037870010f, - -0.112318332580746170f, - 0.993650721000219120f, -0.112508864787378690f, 0.993629129428871720f, - -0.112699392857381860f, - 0.993607501324621610f, -0.112889916783750520f, 0.993585836688263950f, - -0.113080436559479620f, - 0.993564135520595300f, -0.113270952177564350f, 0.993542397822413600f, - -0.113461463630999950f, - 0.993520623594518090f, -0.113651970912781870f, 0.993498812837709360f, - -0.113842474015905710f, - 0.993476965552789190f, -0.114032972933367200f, 0.993455081740560960f, - -0.114223467658162260f, - 0.993433161401829360f, -0.114413958183286920f, 0.993411204537400060f, - -0.114604444501737420f, - 0.993389211148080650f, -0.114794926606510080f, 0.993367181234679600f, - -0.114985404490601460f, - 0.993345114798006910f, -0.115175878147008190f, 0.993323011838873950f, - -0.115366347568727140f, - 0.993300872358093280f, -0.115556812748755260f, 0.993278696356479030f, - -0.115747273680089720f, - 0.993256483834846440f, -0.115937730355727780f, 0.993234234794012290f, - -0.116128182768666930f, - 0.993211949234794500f, -0.116318630911904750f, 0.993189627158012620f, - -0.116509074778439040f, - 0.993167268564487230f, -0.116699514361267690f, 0.993144873455040430f, - -0.116889949653388780f, - 0.993122441830495580f, -0.117080380647800590f, 0.993099973691677570f, - -0.117270807337501460f, - 0.993077469039412300f, -0.117461229715489990f, 0.993054927874527320f, - -0.117651647774764860f, - 0.993032350197851410f, -0.117842061508324980f, 0.993009736010214580f, - -0.118032470909169340f, - 0.992987085312448390f, -0.118222875970297170f, 0.992964398105385610f, - -0.118413276684707790f, - 0.992941674389860470f, -0.118603673045400720f, 0.992918914166708300f, - -0.118794065045375640f, - 0.992896117436765980f, -0.118984452677632340f, 0.992873284200871730f, - -0.119174835935170880f, - 0.992850414459865100f, -0.119365214810991350f, 0.992827508214586760f, - -0.119555589298094110f, - 0.992804565465879140f, -0.119745959389479600f, 0.992781586214585570f, - -0.119936325078148470f, - 0.992758570461551140f, -0.120126686357101500f, 0.992735518207621850f, - -0.120317043219339680f, - 0.992712429453645460f, -0.120507395657864130f, 0.992689304200470750f, - -0.120697743665676110f, - 0.992666142448948020f, -0.120888087235777080f, 0.992642944199928820f, - -0.121078426361168640f, - 0.992619709454266140f, -0.121268761034852600f, 0.992596438212814290f, - -0.121459091249830840f, - 0.992573130476428810f, -0.121649416999105530f, 0.992549786245966680f, - -0.121839738275678890f, - 0.992526405522286100f, -0.122030055072553360f, 0.992502988306246950f, - -0.122220367382731540f, - 0.992479534598709970f, -0.122410675199216200f, 0.992456044400537700f, - -0.122600978515010240f, - 0.992432517712593660f, -0.122791277323116770f, 0.992408954535742850f, - -0.122981571616539050f, - 0.992385354870851670f, -0.123171861388280480f, 0.992361718718787870f, - -0.123362146631344680f, - 0.992338046080420420f, -0.123552427338735370f, 0.992314336956619640f, - -0.123742703503456510f, - 0.992290591348257370f, -0.123932975118512160f, 0.992266809256206580f, - -0.124123242176906600f, - 0.992242990681341700f, -0.124313504671644230f, 0.992219135624538450f, - -0.124503762595729660f, - 0.992195244086673920f, -0.124694015942167640f, 0.992171316068626520f, - -0.124884264703963130f, - 0.992147351571276090f, -0.125074508874121170f, 0.992123350595503720f, - -0.125264748445647060f, - 0.992099313142191800f, -0.125454983411546230f, 0.992075239212224070f, - -0.125645213764824290f, - 0.992051128806485720f, -0.125835439498487000f, 0.992026981925863360f, - -0.126025660605540320f, - 0.992002798571244520f, -0.126215877078990350f, 0.991978578743518580f, - -0.126406088911843380f, - 0.991954322443575950f, -0.126596296097105850f, 0.991930029672308480f, - -0.126786498627784410f, - 0.991905700430609330f, -0.126976696496885870f, 0.991881334719373010f, - -0.127166889697417160f, - 0.991856932539495470f, -0.127357078222385400f, 0.991832493891873780f, - -0.127547262064797970f, - 0.991808018777406430f, -0.127737441217662310f, 0.991783507196993490f, - -0.127927615673986080f, - 0.991758959151536110f, -0.128117785426777130f, 0.991734374641936810f, - -0.128307950469043420f, - 0.991709753669099530f, -0.128498110793793170f, 0.991685096233929420f, - -0.128688266394034690f, - 0.991660402337333210f, -0.128878417262776550f, 0.991635671980218740f, - -0.129068563393027410f, - 0.991610905163495370f, -0.129258704777796140f, 0.991586101888073500f, - -0.129448841410091780f, - 0.991561262154865290f, -0.129638973282923560f, 0.991536385964783880f, - -0.129829100389300930f, - 0.991511473318743900f, -0.130019222722233350f, 0.991486524217661480f, - -0.130209340274730630f, - 0.991461538662453790f, -0.130399453039802690f, 0.991436516654039420f, - -0.130589561010459650f, - 0.991411458193338540f, -0.130779664179711710f, 0.991386363281272280f, - -0.130969762540569380f, - 0.991361231918763460f, -0.131159856086043270f, 0.991336064106736140f, - -0.131349944809144190f, - 0.991310859846115440f, -0.131540028702883120f, 0.991285619137828200f, - -0.131730107760271160f, - 0.991260341982802440f, -0.131920181974319790f, 0.991235028381967420f, - -0.132110251338040360f, - 0.991209678336254060f, -0.132300315844444650f, 0.991184291846594180f, - -0.132490375486544550f, - 0.991158868913921350f, -0.132680430257352070f, 0.991133409539170170f, - -0.132870480149879430f, - 0.991107913723276890f, -0.133060525157139060f, 0.991082381467178640f, - -0.133250565272143570f, - 0.991056812771814340f, -0.133440600487905680f, 0.991031207638124130f, - -0.133630630797438340f, - 0.991005566067049370f, -0.133820656193754720f, 0.990979888059532740f, - -0.134010676669868130f, - 0.990954173616518500f, -0.134200692218792020f, 0.990928422738951990f, - -0.134390702833540070f, - 0.990902635427780010f, -0.134580708507126170f, 0.990876811683950700f, - -0.134770709232564350f, - 0.990850951508413620f, -0.134960705002868750f, 0.990825054902119470f, - -0.135150695811053850f, - 0.990799121866020370f, -0.135340681650134210f, 0.990773152401069780f, - -0.135530662513124590f, - 0.990747146508222710f, -0.135720638393039910f, 0.990721104188435180f, - -0.135910609282895330f, - 0.990695025442664630f, -0.136100575175706200f, 0.990668910271870100f, - -0.136290536064487960f, - 0.990642758677011570f, -0.136480491942256280f, 0.990616570659050620f, - -0.136670442802027090f, - 0.990590346218950150f, -0.136860388636816380f, 0.990564085357674370f, - -0.137050329439640410f, - 0.990537788076188750f, -0.137240265203515590f, 0.990511454375460290f, - -0.137430195921458550f, - 0.990485084256457090f, -0.137620121586486040f, 0.990458677720148620f, - -0.137810042191615080f, - 0.990432234767505970f, -0.137999957729862790f, 0.990405755399501260f, - -0.138189868194246560f, - 0.990379239617108160f, -0.138379773577783890f, 0.990352687421301450f, - -0.138569673873492500f, - 0.990326098813057330f, -0.138759569074390350f, 0.990299473793353590f, - -0.138949459173495490f, - 0.990272812363169110f, -0.139139344163826200f, 0.990246114523483990f, - -0.139329224038400980f, - 0.990219380275280000f, -0.139519098790238490f, 0.990192609619540030f, - -0.139708968412357550f, - 0.990165802557248400f, -0.139898832897777210f, 0.990138959089390650f, - -0.140088692239516670f, - 0.990112079216953770f, -0.140278546430595420f, 0.990085162940925970f, - -0.140468395464033000f, - 0.990058210262297120f, -0.140658239332849210f, 0.990031221182058000f, - -0.140848078030064080f, - 0.990004195701200910f, -0.141037911548697710f, 0.989977133820719610f, - -0.141227739881770510f, - 0.989950035541608990f, -0.141417563022303020f, 0.989922900864865450f, - -0.141607380963316020f, - 0.989895729791486660f, -0.141797193697830390f, 0.989868522322471580f, - -0.141987001218867290f, - 0.989841278458820530f, -0.142176803519448030f, 0.989813998201535260f, - -0.142366600592594180f, - 0.989786681551618640f, -0.142556392431327340f, 0.989759328510075200f, - -0.142746179028669460f, - 0.989731939077910570f, -0.142935960377642670f, 0.989704513256131850f, - -0.143125736471269190f, - 0.989677051045747210f, -0.143315507302571500f, 0.989649552447766530f, - -0.143505272864572290f, - 0.989622017463200890f, -0.143695033150294470f, 0.989594446093062460f, - -0.143884788152760980f, - 0.989566838338365120f, -0.144074537864995160f, 0.989539194200123930f, - -0.144264282280020440f, - 0.989511513679355190f, -0.144454021390860470f, 0.989483796777076760f, - -0.144643755190539040f, - 0.989456043494307710f, -0.144833483672080210f, 0.989428253832068230f, - -0.145023206828508220f, - 0.989400427791380380f, -0.145212924652847460f, 0.989372565373267010f, - -0.145402637138122570f, - 0.989344666578752640f, -0.145592344277358340f, 0.989316731408863000f, - -0.145782046063579860f, - 0.989288759864625170f, -0.145971742489812210f, 0.989260751947067640f, - -0.146161433549080900f, - 0.989232707657220050f, -0.146351119234411460f, 0.989204626996113780f, - -0.146540799538829760f, - 0.989176509964781010f, -0.146730474455361750f, 0.989148356564255590f, - -0.146920143977033620f, - 0.989120166795572690f, -0.147109808096871820f, 0.989091940659768800f, - -0.147299466807902850f, - 0.989063678157881540f, -0.147489120103153570f, 0.989035379290950310f, - -0.147678767975650970f, - 0.989007044060015270f, -0.147868410418422220f, 0.988978672466118480f, - -0.148058047424494720f, - 0.988950264510302990f, -0.148247678986896030f, 0.988921820193613190f, - -0.148437305098653970f, - 0.988893339517095130f, -0.148626925752796540f, 0.988864822481795640f, - -0.148816540942351920f, - 0.988836269088763540f, -0.149006150660348450f, 0.988807679339048450f, - -0.149195754899814820f, - 0.988779053233701520f, -0.149385353653779720f, 0.988750390773775360f, - -0.149574946915272230f, - 0.988721691960323780f, -0.149764534677321510f, 0.988692956794401940f, - -0.149954116932956960f, - 0.988664185277066230f, -0.150143693675208190f, 0.988635377409374790f, - -0.150333264897105000f, - 0.988606533192386450f, -0.150522830591677400f, 0.988577652627162020f, - -0.150712390751955610f, - 0.988548735714763200f, -0.150901945370970040f, 0.988519782456253270f, - -0.151091494441751300f, - 0.988490792852696590f, -0.151281037957330220f, 0.988461766905159300f, - -0.151470575910737810f, - 0.988432704614708340f, -0.151660108295005310f, 0.988403605982412390f, - -0.151849635103164180f, - 0.988374471009341280f, -0.152039156328246050f, 0.988345299696566150f, - -0.152228671963282740f, - 0.988316092045159690f, -0.152418182001306330f, 0.988286848056195820f, - -0.152607686435349050f, - 0.988257567730749460f, -0.152797185258443440f, 0.988228251069897420f, - -0.152986678463622040f, - 0.988198898074717610f, -0.153176166043917840f, 0.988169508746289060f, - -0.153365647992363880f, - 0.988140083085692570f, -0.153555124301993450f, 0.988110621094009820f, - -0.153744594965840030f, - 0.988081122772324070f, -0.153934059976937350f, 0.988051588121720110f, - -0.154123519328319360f, - 0.988022017143283530f, -0.154312973013020100f, 0.987992409838101880f, - -0.154502421024073940f, - 0.987962766207263420f, -0.154691863354515430f, 0.987933086251858380f, - -0.154881299997379320f, - 0.987903369972977790f, -0.155070730945700510f, 0.987873617371714200f, - -0.155260156192514240f, - 0.987843828449161740f, -0.155449575730855850f, 0.987814003206415550f, - -0.155638989553760900f, - 0.987784141644572180f, -0.155828397654265230f, 0.987754243764729530f, - -0.156017800025404800f, - 0.987724309567986960f, -0.156207196660215900f, 0.987694339055445130f, - -0.156396587551734880f, - 0.987664332228205710f, -0.156585972692998430f, 0.987634289087372160f, - -0.156775352077043350f, - 0.987604209634049160f, -0.156964725696906780f, 0.987574093869342360f, - -0.157154093545625900f, - 0.987543941794359230f, -0.157343455616238250f, 0.987513753410208420f, - -0.157532811901781530f, - 0.987483528717999710f, -0.157722162395293630f, 0.987453267718844560f, - -0.157911507089812660f, - 0.987422970413855410f, -0.158100845978376980f, 0.987392636804146240f, - -0.158290179054025180f, - 0.987362266890832400f, -0.158479506309795960f, 0.987331860675030430f, - -0.158668827738728310f, - 0.987301418157858430f, -0.158858143333861450f, 0.987270939340435420f, - -0.159047453088234760f, - 0.987240424223882250f, -0.159236756994887850f, 0.987209872809320820f, - -0.159426055046860580f, - 0.987179285097874340f, -0.159615347237193060f, 0.987148661090667570f, - -0.159804633558925440f, - 0.987118000788826280f, -0.159993914005098270f, 0.987087304193477900f, - -0.160183188568752220f, - 0.987056571305750970f, -0.160372457242928280f, 0.987025802126775600f, - -0.160561720020667490f, - 0.986994996657682980f, -0.160750976895011220f, 0.986964154899605650f, - -0.160940227859001080f, - 0.986933276853677710f, -0.161129472905678810f, 0.986902362521034470f, - -0.161318712028086400f, - 0.986871411902812470f, -0.161507945219266120f, 0.986840425000149680f, - -0.161697172472260400f, - 0.986809401814185530f, -0.161886393780111830f, 0.986778342346060430f, - -0.162075609135863330f, - 0.986747246596916590f, -0.162264818532558000f, 0.986716114567897100f, - -0.162454021963239190f, - 0.986684946260146690f, -0.162643219420950310f, 0.986653741674811350f, - -0.162832410898735210f, - 0.986622500813038480f, -0.163021596389637840f, 0.986591223675976400f, - -0.163210775886702380f, - 0.986559910264775410f, -0.163399949382973230f, 0.986528560580586690f, - -0.163589116871495020f, - 0.986497174624562880f, -0.163778278345312670f, 0.986465752397857940f, - -0.163967433797471170f, - 0.986434293901627180f, -0.164156583221015810f, 0.986402799137027220f, - -0.164345726608992190f, - 0.986371268105216030f, -0.164534863954446000f, 0.986339700807353000f, - -0.164723995250423170f, - 0.986308097244598670f, -0.164913120489969890f, 0.986276457418115090f, - -0.165102239666132660f, - 0.986244781329065460f, -0.165291352771958000f, 0.986213068978614490f, - -0.165480459800492780f, - 0.986181320367928270f, -0.165669560744784120f, 0.986149535498173860f, - -0.165858655597879300f, - 0.986117714370520090f, -0.166047744352825790f, 0.986085856986136820f, - -0.166236827002671420f, - 0.986053963346195440f, -0.166425903540464100f, 0.986022033451868560f, - -0.166614973959252090f, - 0.985990067304330140f, -0.166804038252083730f, 0.985958064904755460f, - -0.166993096412007710f, - 0.985926026254321130f, -0.167182148432072940f, 0.985893951354205210f, - -0.167371194305328430f, - 0.985861840205586980f, -0.167560234024823560f, 0.985829692809647050f, - -0.167749267583607890f, - 0.985797509167567480f, -0.167938294974731170f, 0.985765289280531310f, - -0.168127316191243410f, - 0.985733033149723490f, -0.168316331226194830f, 0.985700740776329850f, - -0.168505340072635900f, - 0.985668412161537550f, -0.168694342723617330f, 0.985636047306535420f, - -0.168883339172189980f, - 0.985603646212513400f, -0.169072329411405010f, 0.985571208880662740f, - -0.169261313434313830f, - 0.985538735312176060f, -0.169450291233967960f, 0.985506225508247290f, - -0.169639262803419290f, - 0.985473679470071810f, -0.169828228135719850f, 0.985441097198846210f, - -0.170017187223921950f, - 0.985408478695768420f, -0.170206140061078070f, 0.985375823962037710f, - -0.170395086640240940f, - 0.985343132998854790f, -0.170584026954463590f, 0.985310405807421570f, - -0.170772960996799230f, - 0.985277642388941220f, -0.170961888760301220f, 0.985244842744618540f, - -0.171150810238023280f, - 0.985212006875659350f, -0.171339725423019310f, 0.985179134783271130f, - -0.171528634308343420f, - 0.985146226468662230f, -0.171717536887049970f, 0.985113281933042710f, - -0.171906433152193530f, - 0.985080301177623800f, -0.172095323096829010f, 0.985047284203618200f, - -0.172284206714011370f, - 0.985014231012239840f, -0.172473083996795950f, 0.984981141604703960f, - -0.172661954938238270f, - 0.984948015982227030f, -0.172850819531394080f, 0.984914854146027200f, - -0.173039677769319360f, - 0.984881656097323700f, -0.173228529645070320f, 0.984848421837337010f, - -0.173417375151703470f, - 0.984815151367289140f, -0.173606214282275410f, 0.984781844688403350f, - -0.173795047029843160f, - 0.984748501801904210f, -0.173983873387463820f, 0.984715122709017620f, - -0.174172693348194820f, - 0.984681707410970940f, -0.174361506905093750f, 0.984648255908992630f, - -0.174550314051218510f, - 0.984614768204312600f, -0.174739114779627200f, 0.984581244298162180f, - -0.174927909083378160f, - 0.984547684191773960f, -0.175116696955529920f, 0.984514087886381840f, - -0.175305478389141320f, - 0.984480455383220930f, -0.175494253377271430f, 0.984446786683527920f, - -0.175683021912979490f, - 0.984413081788540700f, -0.175871783989325040f, 0.984379340699498510f, - -0.176060539599367820f, - 0.984345563417641900f, -0.176249288736167880f, 0.984311749944212780f, - -0.176438031392785410f, - 0.984277900280454370f, -0.176626767562280880f, 0.984244014427611110f, - -0.176815497237715000f, - 0.984210092386929030f, -0.177004220412148750f, 0.984176134159655320f, - -0.177192937078643280f, - 0.984142139747038570f, -0.177381647230260040f, 0.984108109150328540f, - -0.177570350860060710f, - 0.984074042370776450f, -0.177759047961107170f, 0.984039939409634970f, - -0.177947738526461560f, - 0.984005800268157870f, -0.178136422549186300f, 0.983971624947600270f, - -0.178325100022344000f, - 0.983937413449218920f, -0.178513770938997510f, 0.983903165774271500f, - -0.178702435292209970f, - 0.983868881924017220f, -0.178891093075044720f, 0.983834561899716630f, - -0.179079744280565390f, - 0.983800205702631600f, -0.179268388901835750f, 0.983765813334025240f, - -0.179457026931919890f, - 0.983731384795162090f, -0.179645658363882160f, 0.983696920087308140f, - -0.179834283190787090f, - 0.983662419211730250f, -0.180022901405699510f, 0.983627882169697210f, - -0.180211513001684450f, - 0.983593308962478650f, -0.180400117971807240f, 0.983558699591345900f, - -0.180588716309133340f, - 0.983524054057571260f, -0.180777308006728590f, 0.983489372362428730f, - -0.180965893057658980f, - 0.983454654507193270f, -0.181154471454990810f, 0.983419900493141540f, - -0.181343043191790540f, - 0.983385110321551180f, -0.181531608261124970f, 0.983350283993701500f, - -0.181720166656061110f, - 0.983315421510872810f, -0.181908718369666160f, 0.983280522874346970f, - -0.182097263395007650f, - 0.983245588085407070f, -0.182285801725153300f, 0.983210617145337640f, - -0.182474333353171120f, - 0.983175610055424420f, -0.182662858272129270f, 0.983140566816954500f, - -0.182851376475096330f, - 0.983105487431216290f, -0.183039887955140950f, 0.983070371899499640f, - -0.183228392705332140f, - 0.983035220223095640f, -0.183416890718739100f, 0.983000032403296590f, - -0.183605381988431270f, - 0.982964808441396440f, -0.183793866507478450f, 0.982929548338690170f, - -0.183982344268950520f, - 0.982894252096474070f, -0.184170815265917720f, 0.982858919716046110f, - -0.184359279491450510f, - 0.982823551198705240f, -0.184547736938619620f, 0.982788146545751970f, - -0.184736187600495950f, - 0.982752705758487830f, -0.184924631470150790f, 0.982717228838215990f, - -0.185113068540655540f, - 0.982681715786240860f, -0.185301498805081900f, 0.982646166603868050f, - -0.185489922256501880f, - 0.982610581292404750f, -0.185678338887987630f, 0.982574959853159240f, - -0.185866748692611660f, - 0.982539302287441240f, -0.186055151663446630f, 0.982503608596561830f, - -0.186243547793565560f, - 0.982467878781833170f, -0.186431937076041610f, 0.982432112844569110f, - -0.186620319503948280f, - 0.982396310786084690f, -0.186808695070359270f, 0.982360472607696210f, - -0.186997063768348540f, - 0.982324598310721280f, -0.187185425590990330f, 0.982288687896478830f, - -0.187373780531359110f, - 0.982252741366289370f, -0.187562128582529600f, 0.982216758721474510f, - -0.187750469737576780f, - 0.982180739963357090f, -0.187938803989575910f, 0.982144685093261580f, - -0.188127131331602420f, - 0.982108594112513610f, -0.188315451756732120f, 0.982072467022440000f, - -0.188503765258040940f, - 0.982036303824369020f, -0.188692071828605230f, 0.982000104519630490f, - -0.188880371461501380f, - 0.981963869109555240f, -0.189068664149806190f, 0.981927597595475540f, - -0.189256949886596750f, - 0.981891289978725100f, -0.189445228664950230f, 0.981854946260638630f, - -0.189633500477944190f, - 0.981818566442552500f, -0.189821765318656410f, 0.981782150525804310f, - -0.190010023180164990f, - 0.981745698511732990f, -0.190198274055548150f, 0.981709210401678800f, - -0.190386517937884470f, - 0.981672686196983110f, -0.190574754820252740f, 0.981636125898989080f, - -0.190762984695732110f, - 0.981599529509040720f, -0.190951207557401800f, 0.981562897028483650f, - -0.191139423398341450f, - 0.981526228458664770f, -0.191327632211630900f, 0.981489523800932130f, - -0.191515833990350210f, - 0.981452783056635520f, -0.191704028727579800f, 0.981416006227125550f, - -0.191892216416400220f, - 0.981379193313754560f, -0.192080397049892440f, 0.981342344317876040f, - -0.192268570621137500f, - 0.981305459240844670f, -0.192456737123216840f, 0.981268538084016710f, - -0.192644896549212100f, - 0.981231580848749730f, -0.192833048892205230f, 0.981194587536402320f, - -0.193021194145278380f, - 0.981157558148334830f, -0.193209332301513960f, 0.981120492685908730f, - -0.193397463353994740f, - 0.981083391150486710f, -0.193585587295803610f, 0.981046253543432780f, - -0.193773704120023820f, - 0.981009079866112630f, -0.193961813819738840f, 0.980971870119892840f, - -0.194149916388032450f, - 0.980934624306141640f, -0.194338011817988600f, 0.980897342426228390f, - -0.194526100102691610f, - 0.980860024481523870f, -0.194714181235225960f, 0.980822670473400100f, - -0.194902255208676520f, - 0.980785280403230430f, -0.195090322016128250f, 0.980747854272389750f, - -0.195278381650666550f, - 0.980710392082253970f, -0.195466434105376980f, 0.980672893834200530f, - -0.195654479373345370f, - 0.980635359529608120f, -0.195842517447657850f, 0.980597789169856850f, - -0.196030548321400790f, - 0.980560182756327840f, -0.196218571987660880f, 0.980522540290404090f, - -0.196406588439524970f, - 0.980484861773469380f, -0.196594597670080220f, 0.980447147206909060f, - -0.196782599672414100f, - 0.980409396592109910f, -0.196970594439614340f, 0.980371609930459800f, - -0.197158581964768880f, - 0.980333787223347960f, -0.197346562240965920f, 0.980295928472165290f, - -0.197534535261294030f, - 0.980258033678303550f, -0.197722501018841920f, 0.980220102843156080f, - -0.197910459506698670f, - 0.980182135968117430f, -0.198098410717953560f, 0.980144133054583590f, - -0.198286354645696220f, - 0.980106094103951770f, -0.198474291283016390f, 0.980068019117620650f, - -0.198662220623004200f, - 0.980029908096990090f, -0.198850142658750090f, 0.979991761043461200f, - -0.199038057383344680f, - 0.979953577958436740f, -0.199225964789878830f, 0.979915358843320480f, - -0.199413864871443770f, - 0.979877103699517640f, -0.199601757621130970f, 0.979838812528434740f, - -0.199789643032032090f, - 0.979800485331479790f, -0.199977521097239150f, 0.979762122110061750f, - -0.200165391809844440f, - 0.979723722865591170f, -0.200353255162940450f, 0.979685287599479930f, - -0.200541111149619980f, - 0.979646816313141210f, -0.200728959762976140f, 0.979608309007989450f, - -0.200916800996102230f, - 0.979569765685440520f, -0.201104634842091900f, 0.979531186346911500f, - -0.201292461294039020f, - 0.979492570993820810f, -0.201480280345037730f, 0.979453919627588210f, - -0.201668091988182530f, - 0.979415232249634780f, -0.201855896216568050f, 0.979376508861383170f, - -0.202043693023289260f, - 0.979337749464256780f, -0.202231482401441450f, 0.979298954059681040f, - -0.202419264344120160f, - 0.979260122649082020f, -0.202607038844421130f, 0.979221255233887700f, - -0.202794805895440440f, - 0.979182351815526930f, -0.202982565490274440f, 0.979143412395430230f, - -0.203170317622019790f, - 0.979104436975029250f, -0.203358062283773320f, 0.979065425555756930f, - -0.203545799468632190f, - 0.979026378139047580f, -0.203733529169693920f, 0.978987294726337050f, - -0.203921251380056120f, - 0.978948175319062200f, -0.204108966092816870f, 0.978909019918661310f, - -0.204296673301074370f, - 0.978869828526574120f, -0.204484372997927240f, 0.978830601144241470f, - -0.204672065176474210f, - 0.978791337773105670f, -0.204859749829814420f, 0.978752038414610340f, - -0.205047426951047250f, - 0.978712703070200420f, -0.205235096533272350f, 0.978673331741322210f, - -0.205422758569589610f, - 0.978633924429423210f, -0.205610413053099240f, 0.978594481135952270f, - -0.205798059976901790f, - 0.978555001862359550f, -0.205985699334097910f, 0.978515486610096910f, - -0.206173331117788710f, - 0.978475935380616830f, -0.206360955321075510f, 0.978436348175373730f, - -0.206548571937059890f, - 0.978396724995823090f, -0.206736180958843690f, 0.978357065843421640f, - -0.206923782379529100f, - 0.978317370719627650f, -0.207111376192218560f, 0.978277639625900530f, - -0.207298962390014750f, - 0.978237872563701090f, -0.207486540966020650f, 0.978198069534491400f, - -0.207674111913339570f, - 0.978158230539735050f, -0.207861675225075070f, 0.978118355580896660f, - -0.208049230894330940f, - 0.978078444659442380f, -0.208236778914211330f, 0.978038497776839600f, - -0.208424319277820600f, - 0.977998514934557140f, -0.208611851978263490f, 0.977958496134064830f, - -0.208799377008644900f, - 0.977918441376834370f, -0.208986894362070070f, 0.977878350664338150f, - -0.209174404031644580f, - 0.977838223998050430f, -0.209361906010474160f, 0.977798061379446360f, - -0.209549400291664940f, - 0.977757862810002760f, -0.209736886868323290f, 0.977717628291197460f, - -0.209924365733555880f, - 0.977677357824509930f, -0.210111836880469610f, 0.977637051411420770f, - -0.210299300302171730f, - 0.977596709053411890f, -0.210486755991769720f, 0.977556330751966460f, - -0.210674203942371440f, - 0.977515916508569280f, -0.210861644147084860f, 0.977475466324706170f, - -0.211049076599018390f, - 0.977434980201864260f, -0.211236501291280710f, 0.977394458141532250f, - -0.211423918216980670f, - 0.977353900145199960f, -0.211611327369227550f, 0.977313306214358750f, - -0.211798728741130840f, - 0.977272676350500860f, -0.211986122325800330f, 0.977232010555120320f, - -0.212173508116346080f, - 0.977191308829712280f, -0.212360886105878420f, 0.977150571175773200f, - -0.212548256287508060f, - 0.977109797594800880f, -0.212735618654345930f, 0.977068988088294450f, - -0.212922973199503180f, - 0.977028142657754390f, -0.213110319916091360f, 0.976987261304682390f, - -0.213297658797222320f, - 0.976946344030581670f, -0.213484989836008050f, 0.976905390836956490f, - -0.213672313025560970f, - 0.976864401725312640f, -0.213859628358993750f, 0.976823376697157240f, - -0.214046935829419360f, - 0.976782315753998650f, -0.214234235429950990f, 0.976741218897346550f, - -0.214421527153702160f, - 0.976700086128711840f, -0.214608810993786760f, 0.976658917449606980f, - -0.214796086943318860f, - 0.976617712861545640f, -0.214983354995412820f, 0.976576472366042610f, - -0.215170615143183390f, - 0.976535195964614470f, -0.215357867379745550f, 0.976493883658778650f, - -0.215545111698214500f, - 0.976452535450054060f, -0.215732348091705880f, 0.976411151339961040f, - -0.215919576553335490f, - 0.976369731330021140f, -0.216106797076219520f, 0.976328275421757260f, - -0.216294009653474340f, - 0.976286783616693630f, -0.216481214278216730f, 0.976245255916355800f, - -0.216668410943563730f, - 0.976203692322270560f, -0.216855599642632620f, 0.976162092835966110f, - -0.217042780368540990f, - 0.976120457458971910f, -0.217229953114406790f, 0.976078786192818850f, - -0.217417117873348190f, - 0.976037079039039020f, -0.217604274638483640f, 0.975995335999165990f, - -0.217791423402931950f, - 0.975953557074734300f, -0.217978564159812200f, 0.975911742267280170f, - -0.218165696902243800f, - 0.975869891578341030f, -0.218352821623346320f, 0.975828005009455660f, - -0.218539938316239770f, - 0.975786082562163930f, -0.218727046974044440f, 0.975744124238007270f, - -0.218914147589880840f, - 0.975702130038528570f, -0.219101240156869800f, 0.975660099965271590f, - -0.219288324668132470f, - 0.975618034019781750f, -0.219475401116790310f, 0.975575932203605720f, - -0.219662469495965050f, - 0.975533794518291360f, -0.219849529798778700f, 0.975491620965388110f, - -0.220036582018353580f, - 0.975449411546446380f, -0.220223626147812380f, 0.975407166263018270f, - -0.220410662180277940f, - 0.975364885116656980f, -0.220597690108873510f, 0.975322568108916930f, - -0.220784709926722610f, - 0.975280215241354220f, -0.220971721626949110f, 0.975237826515525820f, - -0.221158725202677010f, - 0.975195401932990370f, -0.221345720647030810f, 0.975152941495307620f, - -0.221532707953135230f, - 0.975110445204038890f, -0.221719687114115220f, 0.975067913060746470f, - -0.221906658123096100f, - 0.975025345066994120f, -0.222093620973203510f, 0.974982741224347140f, - -0.222280575657563370f, - 0.974940101534371830f, -0.222467522169301880f, 0.974897425998635820f, - -0.222654460501545500f, - 0.974854714618708430f, -0.222841390647421120f, 0.974811967396159830f, - -0.223028312600055820f, - 0.974769184332561770f, -0.223215226352576980f, 0.974726365429487320f, - -0.223402131898112370f, - 0.974683510688510670f, -0.223589029229789990f, 0.974640620111207560f, - -0.223775918340738150f, - 0.974597693699155050f, -0.223962799224085460f, 0.974554731453931230f, - -0.224149671872960870f, - 0.974511733377115720f, -0.224336536280493600f, 0.974468699470289580f, - -0.224523392439813170f, - 0.974425629735034990f, -0.224710240344049430f, 0.974382524172935470f, - -0.224897079986332490f, - 0.974339382785575860f, -0.225083911359792830f, 0.974296205574542440f, - -0.225270734457561160f, - 0.974252992541422500f, -0.225457549272768540f, 0.974209743687805220f, - -0.225644355798546330f, - 0.974166459015280320f, -0.225831154028026170f, 0.974123138525439640f, - -0.226017943954340020f, - 0.974079782219875680f, -0.226204725570620190f, 0.974036390100182610f, - -0.226391498869999240f, - 0.973992962167955830f, -0.226578263845610000f, 0.973949498424792170f, - -0.226765020490585690f, - 0.973905998872289570f, -0.226951768798059810f, 0.973862463512047300f, - -0.227138508761166170f, - 0.973818892345666100f, -0.227325240373038860f, 0.973775285374748110f, - -0.227511963626812280f, - 0.973731642600896400f, -0.227698678515621170f, 0.973687964025715670f, - -0.227885385032600530f, - 0.973644249650811980f, -0.228072083170885730f, 0.973600499477792370f, - -0.228258772923612380f, - 0.973556713508265560f, -0.228445454283916470f, 0.973512891743841370f, - -0.228632127244934230f, - 0.973469034186131070f, -0.228818791799802220f, 0.973425140836747030f, - -0.229005447941657340f, - 0.973381211697303290f, -0.229192095663636770f, 0.973337246769414910f, - -0.229378734958878010f, - 0.973293246054698250f, -0.229565365820518870f, 0.973249209554771230f, - -0.229751988241697490f, - 0.973205137271252800f, -0.229938602215552210f, 0.973161029205763530f, - -0.230125207735221850f, - 0.973116885359925130f, -0.230311804793845440f, 0.973072705735360530f, - -0.230498393384562350f, - 0.973028490333694210f, -0.230684973500512200f, 0.972984239156551740f, - -0.230871545134835020f, - 0.972939952205560180f, -0.231058108280671110f, 0.972895629482347760f, - -0.231244662931161050f, - 0.972851270988544180f, -0.231431209079445750f, 0.972806876725780370f, - -0.231617746718666470f, - 0.972762446695688570f, -0.231804275841964780f, 0.972717980899902250f, - -0.231990796442482440f, - 0.972673479340056430f, -0.232177308513361710f, 0.972628942017787270f, - -0.232363812047745030f, - 0.972584368934732210f, -0.232550307038775240f, 0.972539760092530180f, - -0.232736793479595390f, - 0.972495115492821190f, -0.232923271363348980f, 0.972450435137246830f, - -0.233109740683179690f, - 0.972405719027449770f, -0.233296201432231590f, 0.972360967165074140f, - -0.233482653603649090f, - 0.972316179551765300f, -0.233669097190576820f, 0.972271356189170040f, - -0.233855532186159840f, - 0.972226497078936270f, -0.234041958583543430f, 0.972181602222713440f, - -0.234228376375873210f, - 0.972136671622152230f, -0.234414785556295160f, 0.972091705278904430f, - -0.234601186117955550f, - 0.972046703194623500f, -0.234787578054000970f, 0.972001665370963890f, - -0.234973961357578250f, - 0.971956591809581720f, -0.235160336021834730f, 0.971911482512134000f, - -0.235346702039917840f, - 0.971866337480279400f, -0.235533059404975490f, 0.971821156715677700f, - -0.235719408110155820f, - 0.971775940219990140f, -0.235905748148607370f, 0.971730687994879160f, - -0.236092079513478910f, - 0.971685400042008540f, -0.236278402197919570f, 0.971640076363043390f, - -0.236464716195078780f, - 0.971594716959650160f, -0.236651021498106380f, 0.971549321833496630f, - -0.236837318100152380f, - 0.971503890986251780f, -0.237023605994367200f, 0.971458424419585960f, - -0.237209885173901600f, - 0.971412922135170940f, -0.237396155631906610f, 0.971367384134679490f, - -0.237582417361533570f, - 0.971321810419786160f, -0.237768670355934190f, 0.971276200992166490f, - -0.237954914608260540f, - 0.971230555853497380f, -0.238141150111664840f, 0.971184875005457030f, - -0.238327376859299810f, - 0.971139158449725090f, -0.238513594844318420f, 0.971093406187982460f, - -0.238699804059873980f, - 0.971047618221911100f, -0.238886004499120040f, 0.971001794553194690f, - -0.239072196155210610f, - 0.970955935183517970f, -0.239258379021299980f, 0.970910040114567050f, - -0.239444553090542630f, - 0.970864109348029470f, -0.239630718356093560f, 0.970818142885593870f, - -0.239816874811108000f, - 0.970772140728950350f, -0.240003022448741500f, 0.970726102879790110f, - -0.240189161262149900f, - 0.970680029339806130f, -0.240375291244489450f, 0.970633920110692160f, - -0.240561412388916650f, - 0.970587775194143630f, -0.240747524688588430f, 0.970541594591857070f, - -0.240933628136661910f, - 0.970495378305530560f, -0.241119722726294590f, 0.970449126336863090f, - -0.241305808450644370f, - 0.970402838687555500f, -0.241491885302869330f, 0.970356515359309450f, - -0.241677953276128010f, - 0.970310156353828110f, -0.241864012363579180f, 0.970263761672816140f, - -0.242050062558382070f, - 0.970217331317979160f, -0.242236103853696010f, 0.970170865291024480f, - -0.242422136242680890f, - 0.970124363593660280f, -0.242608159718496810f, 0.970077826227596420f, - -0.242794174274304220f, - 0.970031253194543970f, -0.242980179903263870f, 0.969984644496215240f, - -0.243166176598536900f, - 0.969938000134323960f, -0.243352164353284740f, 0.969891320110585100f, - -0.243538143160669130f, - 0.969844604426714830f, -0.243724113013852160f, 0.969797853084430890f, - -0.243910073905996260f, - 0.969751066085452140f, -0.244096025830264210f, 0.969704243431498860f, - -0.244281968779819030f, - 0.969657385124292450f, -0.244467902747824150f, 0.969610491165555870f, - -0.244653827727443320f, - 0.969563561557013180f, -0.244839743711840670f, 0.969516596300390000f, - -0.245025650694180470f, - 0.969469595397413060f, -0.245211548667627540f, 0.969422558849810320f, - -0.245397437625346960f, - 0.969375486659311280f, -0.245583317560504060f, 0.969328378827646660f, - -0.245769188466264580f, - 0.969281235356548530f, -0.245955050335794590f, 0.969234056247750050f, - -0.246140903162260530f, - 0.969186841502985950f, -0.246326746938829030f, 0.969139591123992280f, - -0.246512581658667210f, - 0.969092305112506210f, -0.246698407314942410f, 0.969044983470266240f, - -0.246884223900822430f, - 0.968997626199012420f, -0.247070031409475250f, 0.968950233300485800f, - -0.247255829834069300f, - 0.968902804776428870f, -0.247441619167773270f, 0.968855340628585580f, - -0.247627399403756280f, - 0.968807840858700970f, -0.247813170535187670f, 0.968760305468521430f, - -0.247998932555237110f, - 0.968712734459794780f, -0.248184685457074780f, 0.968665127834270060f, - -0.248370429233870980f, - 0.968617485593697540f, -0.248556163878796560f, 0.968569807739828930f, - -0.248741889385022480f, - 0.968522094274417380f, -0.248927605745720150f, 0.968474345199216820f, - -0.249113312954061360f, - 0.968426560515983190f, -0.249299011003218190f, 0.968378740226473300f, - -0.249484699886362960f, - 0.968330884332445190f, -0.249670379596668550f, 0.968282992835658660f, - -0.249856050127307990f, - 0.968235065737874320f, -0.250041711471454650f, 0.968187103040854420f, - -0.250227363622282370f, - 0.968139104746362440f, -0.250413006572965220f, 0.968091070856162970f, - -0.250598640316677670f, - 0.968043001372022260f, -0.250784264846594500f, 0.967994896295707670f, - -0.250969880155890720f, - 0.967946755628987800f, -0.251155486237741920f, 0.967898579373632660f, - -0.251341083085323880f, - 0.967850367531413620f, -0.251526670691812610f, 0.967802120104103270f, - -0.251712249050384700f, - 0.967753837093475510f, -0.251897818154216970f, 0.967705518501305480f, - -0.252083377996486450f, - 0.967657164329369880f, -0.252268928570370810f, 0.967608774579446500f, - -0.252454469869047740f, - 0.967560349253314360f, -0.252640001885695520f, 0.967511888352754150f, - -0.252825524613492610f, - 0.967463391879547550f, -0.253011038045617860f, 0.967414859835477480f, - -0.253196542175250560f, - 0.967366292222328510f, -0.253382036995570160f, 0.967317689041886310f, - -0.253567522499756560f, - 0.967269050295937790f, -0.253752998680989990f, 0.967220375986271420f, - -0.253938465532451090f, - 0.967171666114676640f, -0.254123923047320620f, 0.967122920682944360f, - -0.254309371218780000f, - 0.967074139692867040f, -0.254494810040010730f, 0.967025323146238010f, - -0.254680239504194830f, - 0.966976471044852070f, -0.254865659604514570f, 0.966927583390505660f, - -0.255051070334152470f, - 0.966878660184995910f, -0.255236471686291710f, 0.966829701430121810f, - -0.255421863654115460f, - 0.966780707127683270f, -0.255607246230807380f, 0.966731677279481840f, - -0.255792619409551610f, - 0.966682611887320080f, -0.255977983183532430f, 0.966633510953002100f, - -0.256163337545934460f, - 0.966584374478333120f, -0.256348682489942910f, 0.966535202465119700f, - -0.256534018008743040f, - 0.966485994915169840f, -0.256719344095520660f, 0.966436751830292650f, - -0.256904660743461910f, - 0.966387473212298900f, -0.257089967945753120f, 0.966338159063000130f, - -0.257275265695581120f, - 0.966288809384209690f, -0.257460553986133100f, 0.966239424177741890f, - -0.257645832810596390f, - 0.966190003445412500f, -0.257831102162158990f, 0.966140547189038750f, - -0.258016362034009020f, - 0.966091055410438830f, -0.258201612419334870f, 0.966041528111432400f, - -0.258386853311325600f, - 0.965991965293840570f, -0.258572084703170340f, 0.965942366959485540f, - -0.258757306588058680f, - 0.965892733110190860f, -0.258942518959180520f, 0.965843063747781510f, - -0.259127721809726150f, - 0.965793358874083680f, -0.259312915132886230f, 0.965743618490924830f, - -0.259498098921851660f, - 0.965693842600133690f, -0.259683273169813770f, 0.965644031203540590f, - -0.259868437869964270f, - 0.965594184302976830f, -0.260053593015495190f, 0.965544301900275180f, - -0.260238738599598840f, - 0.965494383997269500f, -0.260423874615468010f, 0.965444430595795430f, - -0.260609001056295750f, - 0.965394441697689400f, -0.260794117915275510f, 0.965344417304789370f, - -0.260979225185601070f, - 0.965294357418934660f, -0.261164322860466480f, 0.965244262041965780f, - -0.261349410933066350f, - 0.965194131175724720f, -0.261534489396595520f, 0.965143964822054450f, - -0.261719558244249030f, - 0.965093762982799590f, -0.261904617469222610f, 0.965043525659805890f, - -0.262089667064712040f, - 0.964993252854920320f, -0.262274707023913590f, 0.964942944569991410f, - -0.262459737340023980f, - 0.964892600806868890f, -0.262644758006240040f, 0.964842221567403620f, - -0.262829769015759160f, - 0.964791806853447900f, -0.263014770361779000f, 0.964741356666855340f, - -0.263199762037497560f, - 0.964690871009481030f, -0.263384744036113280f, 0.964640349883180930f, - -0.263569716350824880f, - 0.964589793289812760f, -0.263754678974831350f, 0.964539201231235150f, - -0.263939631901332350f, - 0.964488573709308410f, -0.264124575123527550f, 0.964437910725893910f, - -0.264309508634617110f, - 0.964387212282854290f, -0.264494432427801630f, 0.964336478382053720f, - -0.264679346496281890f, - 0.964285709025357480f, -0.264864250833259260f, 0.964234904214632200f, - -0.265049145431935250f, - 0.964184063951745830f, -0.265234030285511790f, 0.964133188238567640f, - -0.265418905387191260f, - 0.964082277076968140f, -0.265603770730176330f, 0.964031330468819280f, - -0.265788626307669920f, - 0.963980348415994110f, -0.265973472112875590f, 0.963929330920367140f, - -0.266158308138996990f, - 0.963878277983814200f, -0.266343134379238180f, 0.963827189608212340f, - -0.266527950826803690f, - 0.963776065795439840f, -0.266712757474898370f, 0.963724906547376530f, - -0.266897554316727350f, - 0.963673711865903230f, -0.267082341345496300f, 0.963622481752902220f, - -0.267267118554410930f, - 0.963571216210257320f, -0.267451885936677620f, 0.963519915239853140f, - -0.267636643485503090f, - 0.963468578843575950f, -0.267821391194094150f, 0.963417207023313350f, - -0.268006129055658290f, - 0.963365799780954050f, -0.268190857063403180f, 0.963314357118388200f, - -0.268375575210536900f, - 0.963262879037507070f, -0.268560283490267890f, 0.963211365540203480f, - -0.268744981895804980f, - 0.963159816628371360f, -0.268929670420357260f, 0.963108232303906190f, - -0.269114349057134380f, - 0.963056612568704340f, -0.269299017799346120f, 0.963004957424663850f, - -0.269483676640202840f, - 0.962953266873683880f, -0.269668325572915090f, 0.962901540917665000f, - -0.269852964590693860f, - 0.962849779558509030f, -0.270037593686750570f, 0.962797982798119010f, - -0.270222212854296870f, - 0.962746150638399410f, -0.270406822086544820f, 0.962694283081255930f, - -0.270591421376706940f, - 0.962642380128595710f, -0.270776010717996010f, 0.962590441782326890f, - -0.270960590103625170f, - 0.962538468044359160f, -0.271145159526808010f, 0.962486458916603450f, - -0.271329718980758420f, - 0.962434414400972100f, -0.271514268458690700f, 0.962382334499378380f, - -0.271698807953819510f, - 0.962330219213737400f, -0.271883337459359720f, 0.962278068545965090f, - -0.272067856968526920f, - 0.962225882497979020f, -0.272252366474536710f, 0.962173661071697880f, - -0.272436865970605240f, - 0.962121404269041580f, -0.272621355449948980f, 0.962069112091931580f, - -0.272805834905784810f, - 0.962016784542290560f, -0.272990304331329920f, 0.961964421622042320f, - -0.273174763719801930f, - 0.961912023333112210f, -0.273359213064418680f, 0.961859589677426570f, - -0.273543652358398730f, - 0.961807120656913540f, -0.273728081594960540f, 0.961754616273502010f, - -0.273912500767323260f, - 0.961702076529122540f, -0.274096909868706380f, 0.961649501425706820f, - -0.274281308892329660f, - 0.961596890965187860f, -0.274465697831413220f, 0.961544245149499990f, - -0.274650076679177680f, - 0.961491563980579000f, -0.274834445428843940f, 0.961438847460361680f, - -0.275018804073633220f, - 0.961386095590786250f, -0.275203152606767310f, 0.961333308373792270f, - -0.275387491021468140f, - 0.961280485811320640f, -0.275571819310958140f, 0.961227627905313460f, - -0.275756137468460120f, - 0.961174734657714080f, -0.275940445487197150f, 0.961121806070467380f, - -0.276124743360392830f, - 0.961068842145519350f, -0.276309031081271080f, 0.961015842884817230f, - -0.276493308643055990f, - 0.960962808290309780f, -0.276677576038972420f, 0.960909738363946770f, - -0.276861833262245280f, - 0.960856633107679660f, -0.277046080306099900f, 0.960803492523460760f, - -0.277230317163762170f, - 0.960750316613243950f, -0.277414543828458090f, 0.960697105378984450f, - -0.277598760293414290f, - 0.960643858822638590f, -0.277782966551857690f, 0.960590576946164120f, - -0.277967162597015370f, - 0.960537259751520050f, -0.278151348422115090f, 0.960483907240666790f, - -0.278335524020384920f, - 0.960430519415565790f, -0.278519689385053060f, 0.960377096278180130f, - -0.278703844509348490f, - 0.960323637830473920f, -0.278887989386500280f, 0.960270144074412800f, - -0.279072124009737800f, - 0.960216615011963430f, -0.279256248372291180f, 0.960163050645094000f, - -0.279440362467390510f, - 0.960109450975773940f, -0.279624466288266590f, 0.960055816005973890f, - -0.279808559828150390f, - 0.960002145737665960f, -0.279992643080273220f, 0.959948440172823210f, - -0.280176716037866980f, - 0.959894699313420530f, -0.280360778694163810f, 0.959840923161433770f, - -0.280544831042396250f, - 0.959787111718839900f, -0.280728873075797190f, 0.959733264987617680f, - -0.280912904787600000f, - 0.959679382969746750f, -0.281096926171038260f, 0.959625465667208190f, - -0.281280937219346110f, - 0.959571513081984520f, -0.281464937925757940f, 0.959517525216059260f, - -0.281648928283508630f, - 0.959463502071417510f, -0.281832908285833350f, 0.959409443650045550f, - -0.282016877925967640f, - 0.959355349953930790f, -0.282200837197147560f, 0.959301220985062210f, - -0.282384786092609360f, - 0.959247056745430090f, -0.282568724605589740f, 0.959192857237025740f, - -0.282752652729325930f, - 0.959138622461841890f, -0.282936570457055390f, 0.959084352421872730f, - -0.283120477782015820f, - 0.959030047119113660f, -0.283304374697445740f, 0.958975706555561080f, - -0.283488261196583550f, - 0.958921330733213170f, -0.283672137272668430f, 0.958866919654069010f, - -0.283856002918939750f, - 0.958812473320129310f, -0.284039858128637190f, 0.958757991733395710f, - -0.284223702895001040f, - 0.958703474895871600f, -0.284407537211271880f, 0.958648922809561150f, - -0.284591361070690440f, - 0.958594335476470220f, -0.284775174466498300f, 0.958539712898605730f, - -0.284958977391937040f, - 0.958485055077976100f, -0.285142769840248670f, 0.958430362016590930f, - -0.285326551804675870f, - 0.958375633716461170f, -0.285510323278461260f, 0.958320870179598880f, - -0.285694084254848320f, - 0.958266071408017670f, -0.285877834727080620f, 0.958211237403732260f, - -0.286061574688402040f, - 0.958156368168758820f, -0.286245304132057120f, 0.958101463705114730f, - -0.286429023051290700f, - 0.958046524014818600f, -0.286612731439347790f, 0.957991549099890370f, - -0.286796429289474080f, - 0.957936538962351420f, -0.286980116594915570f, 0.957881493604224370f, - -0.287163793348918390f, - 0.957826413027532910f, -0.287347459544729510f, 0.957771297234302320f, - -0.287531115175595930f, - 0.957716146226558870f, -0.287714760234765170f, 0.957660960006330610f, - -0.287898394715485170f, - 0.957605738575646350f, -0.288082018611004130f, 0.957550481936536470f, - -0.288265631914570770f, - 0.957495190091032570f, -0.288449234619434220f, 0.957439863041167680f, - -0.288632826718843830f, - 0.957384500788975860f, -0.288816408206049480f, 0.957329103336492790f, - -0.288999979074301420f, - 0.957273670685755200f, -0.289183539316850200f, 0.957218202838801210f, - -0.289367088926947010f, - 0.957162699797670210f, -0.289550627897843030f, 0.957107161564402790f, - -0.289734156222790250f, - 0.957051588141040970f, -0.289917673895040750f, 0.956995979529628230f, - -0.290101180907847090f, - 0.956940335732208820f, -0.290284677254462330f, 0.956884656750828900f, - -0.290468162928139820f, - 0.956828942587535370f, -0.290651637922133220f, 0.956773193244376930f, - -0.290835102229696830f, - 0.956717408723403050f, -0.291018555844085090f, 0.956661589026665090f, - -0.291201998758552900f, - 0.956605734156215080f, -0.291385430966355660f, 0.956549844114106820f, - -0.291568852460749040f, - 0.956493918902395100f, -0.291752263234989260f, 0.956437958523136180f, - -0.291935663282332780f, - 0.956381962978387730f, -0.292119052596036380f, 0.956325932270208230f, - -0.292302431169357560f, - 0.956269866400658030f, -0.292485798995553880f, 0.956213765371798470f, - -0.292669156067883460f, - 0.956157629185692140f, -0.292852502379604810f, 0.956101457844403040f, - -0.293035837923976810f, - 0.956045251349996410f, -0.293219162694258630f, 0.955989009704538930f, - -0.293402476683710110f, - 0.955932732910098280f, -0.293585779885591200f, 0.955876420968743590f, - -0.293769072293162400f, - 0.955820073882545420f, -0.293952353899684660f, 0.955763691653575440f, - -0.294135624698419030f, - 0.955707274283906560f, -0.294318884682627400f, 0.955650821775613330f, - -0.294502133845571670f, - 0.955594334130771110f, -0.294685372180514330f, 0.955537811351456880f, - -0.294868599680718270f, - 0.955481253439748770f, -0.295051816339446720f, 0.955424660397726330f, - -0.295235022149963220f, - 0.955368032227470350f, -0.295418217105532010f, 0.955311368931062720f, - -0.295601401199417360f, - 0.955254670510586990f, -0.295784574424884260f, 0.955197936968127710f, - -0.295967736775197890f, - 0.955141168305770780f, -0.296150888243623790f, 0.955084364525603410f, - -0.296334028823428190f, - 0.955027525629714160f, -0.296517158507877470f, 0.954970651620192790f, - -0.296700277290238350f, - 0.954913742499130520f, -0.296883385163778270f, 0.954856798268619580f, - -0.297066482121764730f, - 0.954799818930753720f, -0.297249568157465840f, 0.954742804487627940f, - -0.297432643264150030f, - 0.954685754941338340f, -0.297615707435086200f, 0.954628670293982680f, - -0.297798760663543550f, - 0.954571550547659630f, -0.297981802942791810f, 0.954514395704469500f, - -0.298164834266100850f, - 0.954457205766513490f, -0.298347854626741400f, 0.954399980735894490f, - -0.298530864017984120f, - 0.954342720614716480f, -0.298713862433100330f, 0.954285425405084650f, - -0.298896849865361800f, - 0.954228095109105670f, -0.299079826308040480f, 0.954170729728887280f, - -0.299262791754408840f, - 0.954113329266538800f, -0.299445746197739890f, 0.954055893724170660f, - -0.299628689631306790f, - 0.953998423103894490f, -0.299811622048383350f, 0.953940917407823500f, - -0.299994543442243580f, - 0.953883376638071770f, -0.300177453806161950f, 0.953825800796755050f, - -0.300360353133413530f, - 0.953768189885990330f, -0.300543241417273450f, 0.953710543907895670f, - -0.300726118651017500f, - 0.953652862864590500f, -0.300908984827921890f, 0.953595146758195680f, - -0.301091839941263100f, - 0.953537395590833280f, -0.301274683984317950f, 0.953479609364626610f, - -0.301457516950363940f, - 0.953421788081700310f, -0.301640338832678770f, 0.953363931744180330f, - -0.301823149624540650f, - 0.953306040354193860f, -0.302005949319228080f, 0.953248113913869320f, - -0.302188737910019990f, - 0.953190152425336670f, -0.302371515390195970f, 0.953132155890726750f, - -0.302554281753035610f, - 0.953074124312172200f, -0.302737036991819140f, 0.953016057691806530f, - -0.302919781099827310f, - 0.952957956031764700f, -0.303102514070341060f, 0.952899819334182880f, - -0.303285235896641750f, - 0.952841647601198720f, -0.303467946572011320f, 0.952783440834950920f, - -0.303650646089731910f, - 0.952725199037579570f, -0.303833334443086360f, 0.952666922211226170f, - -0.304016011625357570f, - 0.952608610358033350f, -0.304198677629829110f, 0.952550263480144930f, - -0.304381332449784880f, - 0.952491881579706320f, -0.304563976078509100f, 0.952433464658864030f, - -0.304746608509286530f, - 0.952375012719765880f, -0.304929229735402370f, 0.952316525764560940f, - -0.305111839750142110f, - 0.952258003795399600f, -0.305294438546791670f, 0.952199446814433580f, - -0.305477026118637420f, - 0.952140854823815830f, -0.305659602458966120f, 0.952082227825700620f, - -0.305842167561065080f, - 0.952023565822243570f, -0.306024721418221790f, 0.951964868815601380f, - -0.306207264023724220f, - 0.951906136807932350f, -0.306389795370860920f, 0.951847369801395620f, - -0.306572315452920740f, - 0.951788567798152130f, -0.306754824263192780f, 0.951729730800363830f, - -0.306937321794966910f, - 0.951670858810193860f, -0.307119808041533100f, 0.951611951829806850f, - -0.307302282996181790f, - 0.951553009861368590f, -0.307484746652204100f, 0.951494032907046370f, - -0.307667199002891190f, - 0.951435020969008340f, -0.307849640041534870f, 0.951375974049424420f, - -0.308032069761427330f, - 0.951316892150465550f, -0.308214488155861050f, 0.951257775274304000f, - -0.308396895218129190f, - 0.951198623423113230f, -0.308579290941525090f, 0.951139436599068190f, - -0.308761675319342450f, - 0.951080214804345010f, -0.308944048344875710f, 0.951020958041121080f, - -0.309126410011419440f, - 0.950961666311575080f, -0.309308760312268730f, 0.950902339617887060f, - -0.309491099240719100f, - 0.950842977962238160f, -0.309673426790066380f, 0.950783581346811070f, - -0.309855742953607070f, - 0.950724149773789610f, -0.310038047724637890f, 0.950664683245358910f, - -0.310220341096455850f, - 0.950605181763705340f, -0.310402623062358720f, 0.950545645331016600f, - -0.310584893615644450f, - 0.950486073949481700f, -0.310767152749611470f, 0.950426467621290900f, - -0.310949400457558640f, - 0.950366826348635780f, -0.311131636732785270f, 0.950307150133709260f, - -0.311313861568590920f, - 0.950247438978705230f, -0.311496074958275910f, 0.950187692885819280f, - -0.311678276895140550f, - 0.950127911857248100f, -0.311860467372486020f, 0.950068095895189590f, - -0.312042646383613510f, - 0.950008245001843000f, -0.312224813921824880f, 0.949948359179409010f, - -0.312406969980422440f, - 0.949888438430089300f, -0.312589114552708710f, 0.949828482756087110f, - -0.312771247631986770f, - 0.949768492159606680f, -0.312953369211560200f, 0.949708466642853800f, - -0.313135479284732840f, - 0.949648406208035480f, -0.313317577844809010f, 0.949588310857359950f, - -0.313499664885093510f, - 0.949528180593036670f, -0.313681740398891520f, 0.949468015417276550f, - -0.313863804379508500f, - 0.949407815332291570f, -0.314045856820250710f, 0.949347580340295210f, - -0.314227897714424440f, - 0.949287310443502120f, -0.314409927055336660f, 0.949227005644128210f, - -0.314591944836294660f, - 0.949166665944390700f, -0.314773951050606070f, 0.949106291346508260f, - -0.314955945691579140f, - 0.949045881852700560f, -0.315137928752522440f, 0.948985437465188710f, - -0.315319900226744890f, - 0.948924958186195160f, -0.315501860107555990f, 0.948864444017943340f, - -0.315683808388265650f, - 0.948803894962658490f, -0.315865745062183960f, 0.948743311022566480f, - -0.316047670122621860f, - 0.948682692199895090f, -0.316229583562890330f, 0.948622038496872990f, - -0.316411485376300980f, - 0.948561349915730270f, -0.316593375556165850f, 0.948500626458698260f, - -0.316775254095797270f, - 0.948439868128009620f, -0.316957120988508150f, 0.948379074925898120f, - -0.317138976227611780f, - 0.948318246854599090f, -0.317320819806421740f, 0.948257383916349060f, - -0.317502651718252260f, - 0.948196486113385580f, -0.317684471956417970f, 0.948135553447947980f, - -0.317866280514233660f, - 0.948074585922276230f, -0.318048077385014950f, 0.948013583538612200f, - -0.318229862562077530f, - 0.947952546299198670f, -0.318411636038737790f, 0.947891474206279840f, - -0.318593397808312420f, - 0.947830367262101010f, -0.318775147864118480f, 0.947769225468909180f, - -0.318956886199473650f, - 0.947708048828952100f, -0.319138612807695900f, 0.947646837344479300f, - -0.319320327682103610f, - 0.947585591017741090f, -0.319502030816015690f, 0.947524309850989570f, - -0.319683722202751430f, - 0.947462993846477700f, -0.319865401835630500f, 0.947401643006459900f, - -0.320047069707973140f, - 0.947340257333192050f, -0.320228725813099860f, 0.947278836828930880f, - -0.320410370144331820f, - 0.947217381495934820f, -0.320592002694990330f, 0.947155891336463270f, - -0.320773623458397330f, - 0.947094366352777220f, -0.320955232427875210f, 0.947032806547138620f, - -0.321136829596746660f, - 0.946971211921810880f, -0.321318414958334850f, 0.946909582479058760f, - -0.321499988505963510f, - 0.946847918221148000f, -0.321681550232956580f, 0.946786219150346000f, - -0.321863100132638580f, - 0.946724485268921170f, -0.322044638198334510f, 0.946662716579143360f, - -0.322226164423369600f, - 0.946600913083283530f, -0.322407678801069850f, 0.946539074783614100f, - -0.322589181324761330f, - 0.946477201682408680f, -0.322770671987770710f, 0.946415293781942110f, - -0.322952150783425260f, - 0.946353351084490590f, -0.323133617705052330f, 0.946291373592331620f, - -0.323315072745979980f, - 0.946229361307743820f, -0.323496515899536710f, 0.946167314233007370f, - -0.323677947159051240f, - 0.946105232370403450f, -0.323859366517852850f, 0.946043115722214560f, - -0.324040773969271450f, - 0.945980964290724760f, -0.324222169506636960f, 0.945918778078219110f, - -0.324403553123280230f, - 0.945856557086983910f, -0.324584924812532150f, 0.945794301319306970f, - -0.324766284567724220f, - 0.945732010777477150f, -0.324947632382188430f, 0.945669685463784710f, - -0.325128968249257080f, - 0.945607325380521280f, -0.325310292162262930f, 0.945544930529979680f, - -0.325491604114539310f, - 0.945482500914453740f, -0.325672904099419850f, 0.945420036536239070f, - -0.325854192110238580f, - 0.945357537397632290f, -0.326035468140330240f, 0.945295003500931210f, - -0.326216732183029710f, - 0.945232434848435000f, -0.326397984231672490f, 0.945169831442444150f, - -0.326579224279594400f, - 0.945107193285260610f, -0.326760452320131730f, 0.945044520379187070f, - -0.326941668346621420f, - 0.944981812726528150f, -0.327122872352400510f, 0.944919070329589220f, - -0.327304064330806670f, - 0.944856293190677210f, -0.327485244275178000f, 0.944793481312100280f, - -0.327666412178853120f, - 0.944730634696167800f, -0.327847568035170840f, 0.944667753345190490f, - -0.328028711837470680f, - 0.944604837261480260f, -0.328209843579092500f, 0.944541886447350490f, - -0.328390963253376580f, - 0.944478900905115550f, -0.328572070853663740f, 0.944415880637091250f, - -0.328753166373294990f, - 0.944352825645594750f, -0.328934249805612200f, 0.944289735932944410f, - -0.329115321143957250f, - 0.944226611501459810f, -0.329296380381672750f, 0.944163452353461770f, - -0.329477427512101740f, - 0.944100258491272660f, -0.329658462528587490f, 0.944037029917215830f, - -0.329839485424473940f, - 0.943973766633615980f, -0.330020496193105420f, 0.943910468642799150f, - -0.330201494827826570f, - 0.943847135947092690f, -0.330382481321982780f, 0.943783768548825060f, - -0.330563455668919540f, - 0.943720366450326200f, -0.330744417861982890f, 0.943656929653927220f, - -0.330925367894519540f, - 0.943593458161960390f, -0.331106305759876430f, 0.943529951976759480f, - -0.331287231451400820f, - 0.943466411100659320f, -0.331468144962440870f, 0.943402835535996240f, - -0.331649046286344670f, - 0.943339225285107720f, -0.331829935416461110f, 0.943275580350332540f, - -0.332010812346139380f, - 0.943211900734010620f, -0.332191677068729150f, 0.943148186438483420f, - -0.332372529577580620f, - 0.943084437466093490f, -0.332553369866044220f, 0.943020653819184650f, - -0.332734197927471050f, - 0.942956835500102120f, -0.332915013755212650f, 0.942892982511192250f, - -0.333095817342620780f, - 0.942829094854802710f, -0.333276608683047930f, 0.942765172533282510f, - -0.333457387769846850f, - 0.942701215548981900f, -0.333638154596370860f, 0.942637223904252530f, - -0.333818909155973620f, - 0.942573197601446870f, -0.333999651442009380f, 0.942509136642919240f, - -0.334180381447832690f, - 0.942445041031024890f, -0.334361099166798740f, 0.942380910768120470f, - -0.334541804592262900f, - 0.942316745856563780f, -0.334722497717581220f, 0.942252546298714020f, - -0.334903178536110180f, - 0.942188312096931770f, -0.335083847041206580f, 0.942124043253578570f, - -0.335264503226227810f, - 0.942059739771017310f, -0.335445147084531600f, 0.941995401651612550f, - -0.335625778609476290f, - 0.941931028897729620f, -0.335806397794420450f, 0.941866621511735280f, - -0.335987004632723350f, - 0.941802179495997650f, -0.336167599117744520f, 0.941737702852886160f, - -0.336348181242844050f, - 0.941673191584771360f, -0.336528751001382410f, 0.941608645694025250f, - -0.336709308386720580f, - 0.941544065183020810f, -0.336889853392220050f, 0.941479450054132580f, - -0.337070386011242620f, - 0.941414800309736340f, -0.337250906237150590f, 0.941350115952208970f, - -0.337431414063306840f, - 0.941285396983928660f, -0.337611909483074620f, 0.941220643407275180f, - -0.337792392489817460f, - 0.941155855224629190f, -0.337972863076899720f, 0.941091032438372780f, - -0.338153321237685930f, - 0.941026175050889260f, -0.338333766965541130f, 0.940961283064563280f, - -0.338514200253830940f, - 0.940896356481780830f, -0.338694621095921190f, 0.940831395304928870f, - -0.338875029485178450f, - 0.940766399536396070f, -0.339055425414969640f, 0.940701369178571940f, - -0.339235808878661950f, - 0.940636304233847590f, -0.339416179869623360f, 0.940571204704615190f, - -0.339596538381222110f, - 0.940506070593268300f, -0.339776884406826850f, 0.940440901902201750f, - -0.339957217939806880f, - 0.940375698633811540f, -0.340137538973531720f, 0.940310460790495070f, - -0.340317847501371670f, - 0.940245188374650880f, -0.340498143516697160f, 0.940179881388678920f, - -0.340678427012879200f, - 0.940114539834980280f, -0.340858697983289440f, 0.940049163715957370f, - -0.341038956421299720f, - 0.939983753034014050f, -0.341219202320282360f, 0.939918307791555050f, - -0.341399435673610420f, - 0.939852827990986680f, -0.341579656474657160f, 0.939787313634716570f, - -0.341759864716796310f, - 0.939721764725153340f, -0.341940060393402190f, 0.939656181264707180f, - -0.342120243497849530f, - 0.939590563255789270f, -0.342300414023513520f, 0.939524910700812230f, - -0.342480571963769800f, - 0.939459223602189920f, -0.342660717311994380f, 0.939393501962337510f, - -0.342840850061563950f, - 0.939327745783671400f, -0.343020970205855540f, 0.939261955068609210f, - -0.343201077738246540f, - 0.939196129819569900f, -0.343381172652115040f, 0.939130270038973650f, - -0.343561254940839390f, - 0.939064375729241950f, -0.343741324597798490f, 0.938998446892797540f, - -0.343921381616371700f, - 0.938932483532064600f, -0.344101425989938810f, 0.938866485649468060f, - -0.344281457711880180f, - 0.938800453247434770f, -0.344461476775576540f, 0.938734386328392460f, - -0.344641483174408960f, - 0.938668284894770170f, -0.344821476901759290f, 0.938602148948998400f, - -0.345001457951009670f, - 0.938535978493508560f, -0.345181426315542550f, 0.938469773530733800f, - -0.345361381988741220f, - 0.938403534063108060f, -0.345541324963989090f, 0.938337260093066950f, - -0.345721255234670120f, - 0.938270951623047190f, -0.345901172794168990f, 0.938204608655486490f, - -0.346081077635870430f, - 0.938138231192824360f, -0.346260969753160010f, 0.938071819237501270f, - -0.346440849139423520f, - 0.938005372791958840f, -0.346620715788047320f, 0.937938891858640320f, - -0.346800569692418290f, - 0.937872376439989890f, -0.346980410845923680f, 0.937805826538453120f, - -0.347160239241951160f, - 0.937739242156476970f, -0.347340054873889140f, 0.937672623296509470f, - -0.347519857735126110f, - 0.937605969960999990f, -0.347699647819051380f, 0.937539282152399230f, - -0.347879425119054510f, - 0.937472559873159250f, -0.348059189628525610f, 0.937405803125732960f, - -0.348238941340855260f, - 0.937339011912574960f, -0.348418680249434560f, 0.937272186236140950f, - -0.348598406347654930f, - 0.937205326098887960f, -0.348778119628908420f, 0.937138431503274140f, - -0.348957820086587490f, - 0.937071502451759190f, -0.349137507714084970f, 0.937004538946803690f, - -0.349317182504794380f, - 0.936937540990869900f, -0.349496844452109550f, 0.936870508586420960f, - -0.349676493549424760f, - 0.936803441735921560f, -0.349856129790134920f, 0.936736340441837620f, - -0.350035753167635240f, - 0.936669204706636170f, -0.350215363675321580f, 0.936602034532785570f, - -0.350394961306590150f, - 0.936534829922755500f, -0.350574546054837510f, 0.936467590879016990f, - -0.350754117913461060f, - 0.936400317404042060f, -0.350933676875858360f, 0.936333009500304180f, - -0.351113222935427460f, - 0.936265667170278260f, -0.351292756085567090f, 0.936198290416440090f, - -0.351472276319676310f, - 0.936130879241267030f, -0.351651783631154570f, 0.936063433647237540f, - -0.351831278013402030f, - 0.935995953636831410f, -0.352010759459819080f, 0.935928439212529660f, - -0.352190227963806830f, - 0.935860890376814640f, -0.352369683518766630f, 0.935793307132169900f, - -0.352549126118100460f, - 0.935725689481080370f, -0.352728555755210730f, 0.935658037426032040f, - -0.352907972423500250f, - 0.935590350969512370f, -0.353087376116372480f, 0.935522630114009930f, - -0.353266766827231240f, - 0.935454874862014620f, -0.353446144549480810f, 0.935387085216017770f, - -0.353625509276525970f, - 0.935319261178511610f, -0.353804861001772050f, 0.935251402751989920f, - -0.353984199718624770f, - 0.935183509938947610f, -0.354163525420490340f, 0.935115582741880890f, - -0.354342838100775550f, - 0.935047621163287430f, -0.354522137752887430f, 0.934979625205665800f, - -0.354701424370233830f, - 0.934911594871516090f, -0.354880697946222790f, 0.934843530163339540f, - -0.355059958474262860f, - 0.934775431083638700f, -0.355239205947763310f, 0.934707297634917440f, - -0.355418440360133650f, - 0.934639129819680780f, -0.355597661704783850f, 0.934570927640435030f, - -0.355776869975124640f, - 0.934502691099687870f, -0.355956065164566850f, 0.934434420199948050f, - -0.356135247266522130f, - 0.934366114943725790f, -0.356314416274402410f, 0.934297775333532530f, - -0.356493572181620090f, - 0.934229401371880820f, -0.356672714981588260f, 0.934160993061284530f, - -0.356851844667720300f, - 0.934092550404258980f, -0.357030961233429980f, 0.934024073403320390f, - -0.357210064672131960f, - 0.933955562060986730f, -0.357389154977240940f, 0.933887016379776890f, - -0.357568232142172260f, - 0.933818436362210960f, -0.357747296160341900f, 0.933749822010810580f, - -0.357926347025166010f, - 0.933681173328098410f, -0.358105384730061590f, 0.933612490316598540f, - -0.358284409268445850f, - 0.933543772978836170f, -0.358463420633736540f, 0.933475021317337950f, - -0.358642418819351990f, - 0.933406235334631520f, -0.358821403818710860f, 0.933337415033246190f, - -0.359000375625232460f, - 0.933268560415712050f, -0.359179334232336500f, 0.933199671484560730f, - -0.359358279633443130f, - 0.933130748242325230f, -0.359537211821973070f, 0.933061790691539380f, - -0.359716130791347570f, - 0.932992798834738960f, -0.359895036534988110f, 0.932923772674460140f, - -0.360073929046317020f, - 0.932854712213241120f, -0.360252808318756890f, 0.932785617453621100f, - -0.360431674345730700f, - 0.932716488398140250f, -0.360610527120662270f, 0.932647325049340450f, - -0.360789366636975580f, - 0.932578127409764420f, -0.360968192888095230f, 0.932508895481956590f, - -0.361147005867446250f, - 0.932439629268462360f, -0.361325805568454280f, 0.932370328771828460f, - -0.361504591984545260f, - 0.932300993994602760f, -0.361683365109145840f, 0.932231624939334540f, - -0.361862124935682980f, - 0.932162221608574430f, -0.362040871457584180f, 0.932092784004874050f, - -0.362219604668277460f, - 0.932023312130786490f, -0.362398324561191310f, 0.931953805988866010f, - -0.362577031129754760f, - 0.931884265581668150f, -0.362755724367397230f, 0.931814690911749730f, - -0.362934404267548640f, - 0.931745081981668720f, -0.363113070823639470f, 0.931675438793984620f, - -0.363291724029100760f, - 0.931605761351257830f, -0.363470363877363760f, 0.931536049656050300f, - -0.363648990361860550f, - 0.931466303710925090f, -0.363827603476023500f, 0.931396523518446600f, - -0.364006203213285470f, - 0.931326709081180430f, -0.364184789567079890f, 0.931256860401693420f, - -0.364363362530840620f, - 0.931186977482553750f, -0.364541922098002120f, 0.931117060326330790f, - -0.364720468261999280f, - 0.931047108935595280f, -0.364899001016267320f, 0.930977123312918930f, - -0.365077520354242180f, - 0.930907103460875130f, -0.365256026269360320f, 0.930837049382038150f, - -0.365434518755058390f, - 0.930766961078983710f, -0.365612997804773850f, 0.930696838554288860f, - -0.365791463411944570f, - 0.930626681810531760f, -0.365969915570008740f, 0.930556490850291800f, - -0.366148354272405330f, - 0.930486265676149780f, -0.366326779512573590f, 0.930416006290687550f, - -0.366505191283953370f, - 0.930345712696488470f, -0.366683589579984930f, 0.930275384896137150f, - -0.366861974394109060f, - 0.930205022892219070f, -0.367040345719767180f, 0.930134626687321390f, - -0.367218703550400980f, - 0.930064196284032360f, -0.367397047879452710f, 0.929993731684941480f, - -0.367575378700365330f, - 0.929923232892639670f, -0.367753696006581980f, 0.929852699909718750f, - -0.367931999791546450f, - 0.929782132738772190f, -0.368110290048703050f, 0.929711531382394370f, - -0.368288566771496570f, - 0.929640895843181330f, -0.368466829953372320f, 0.929570226123729860f, - -0.368645079587776040f, - 0.929499522226638560f, -0.368823315668153910f, 0.929428784154506800f, - -0.369001538187952780f, - 0.929358011909935500f, -0.369179747140620020f, 0.929287205495526790f, - -0.369357942519603130f, - 0.929216364913884040f, -0.369536124318350650f, 0.929145490167611720f, - -0.369714292530311240f, - 0.929074581259315860f, -0.369892447148934100f, 0.929003638191603360f, - -0.370070588167669080f, - 0.928932660967082820f, -0.370248715579966360f, 0.928861649588363700f, - -0.370426829379276790f, - 0.928790604058057020f, -0.370604929559051670f, 0.928719524378774810f, - -0.370783016112742560f, - 0.928648410553130520f, -0.370961089033801980f, 0.928577262583738850f, - -0.371139148315682570f, - 0.928506080473215590f, -0.371317193951837540f, 0.928434864224177980f, - -0.371495225935720760f, - 0.928363613839244370f, -0.371673244260786520f, 0.928292329321034670f, - -0.371851248920489490f, - 0.928221010672169440f, -0.372029239908285010f, 0.928149657895271150f, - -0.372207217217628840f, - 0.928078270992963140f, -0.372385180841977360f, 0.928006849967869970f, - -0.372563130774787250f, - 0.927935394822617890f, -0.372741067009515760f, 0.927863905559833780f, - -0.372918989539620830f, - 0.927792382182146320f, -0.373096898358560640f, 0.927720824692185200f, - -0.373274793459793970f, - 0.927649233092581180f, -0.373452674836780300f, 0.927577607385966730f, - -0.373630542482979280f, - 0.927505947574975180f, -0.373808396391851210f, 0.927434253662241300f, - -0.373986236556857030f, - 0.927362525650401110f, -0.374164062971457930f, 0.927290763542091720f, - -0.374341875629115920f, - 0.927218967339951790f, -0.374519674523293210f, 0.927147137046620880f, - -0.374697459647452600f, - 0.927075272664740100f, -0.374875230995057540f, 0.927003374196951670f, - -0.375052988559571920f, - 0.926931441645899130f, -0.375230732334459920f, 0.926859475014227160f, - -0.375408462313186590f, - 0.926787474304581750f, -0.375586178489217220f, 0.926715439519610330f, - -0.375763880856017700f, - 0.926643370661961230f, -0.375941569407054420f, 0.926571267734284330f, - -0.376119244135794340f, - 0.926499130739230510f, -0.376296905035704790f, 0.926426959679452210f, - -0.376474552100253770f, - 0.926354754557602860f, -0.376652185322909560f, 0.926282515376337210f, - -0.376829804697141280f, - 0.926210242138311380f, -0.377007410216418260f, 0.926137934846182560f, - -0.377185001874210450f, - 0.926065593502609310f, -0.377362579663988340f, 0.925993218110251480f, - -0.377540143579222940f, - 0.925920808671770070f, -0.377717693613385640f, 0.925848365189827270f, - -0.377895229759948490f, - 0.925775887667086740f, -0.378072752012383990f, 0.925703376106213230f, - -0.378250260364165200f, - 0.925630830509872720f, -0.378427754808765560f, 0.925558250880732740f, - -0.378605235339659120f, - 0.925485637221461490f, -0.378782701950320540f, 0.925412989534729060f, - -0.378960154634224720f, - 0.925340307823206310f, -0.379137593384847320f, 0.925267592089565660f, - -0.379315018195664430f, - 0.925194842336480530f, -0.379492429060152630f, 0.925122058566625880f, - -0.379669825971788940f, - 0.925049240782677580f, -0.379847208924051160f, 0.924976388987313160f, - -0.380024577910417270f, - 0.924903503183210910f, -0.380201932924366050f, 0.924830583373050800f, - -0.380379273959376600f, - 0.924757629559513910f, -0.380556601008928520f, 0.924684641745282420f, - -0.380733914066502140f, - 0.924611619933039970f, -0.380911213125578070f, 0.924538564125471420f, - -0.381088498179637520f, - 0.924465474325262600f, -0.381265769222162380f, 0.924392350535101050f, - -0.381443026246634730f, - 0.924319192757675160f, -0.381620269246537360f, 0.924246000995674890f, - -0.381797498215353640f, - 0.924172775251791200f, -0.381974713146567220f, 0.924099515528716280f, - -0.382151914033662610f, - 0.924026221829143850f, -0.382329100870124510f, 0.923952894155768640f, - -0.382506273649438230f, - 0.923879532511286740f, -0.382683432365089780f, 0.923806136898395410f, - -0.382860577010565420f, - 0.923732707319793290f, -0.383037707579352020f, 0.923659243778179980f, - -0.383214824064937180f, - 0.923585746276256670f, -0.383391926460808660f, 0.923512214816725630f, - -0.383569014760454910f, - 0.923438649402290370f, -0.383746088957365010f, 0.923365050035655720f, - -0.383923149045028390f, - 0.923291416719527640f, -0.384100195016935040f, 0.923217749456613500f, - -0.384277226866575510f, - 0.923144048249621930f, -0.384454244587440820f, 0.923070313101262420f, - -0.384631248173022580f, - 0.922996544014246250f, -0.384808237616812880f, 0.922922740991285680f, - -0.384985212912304200f, - 0.922848904035094120f, -0.385162174052989860f, 0.922775033148386380f, - -0.385339121032363340f, - 0.922701128333878630f, -0.385516053843918850f, 0.922627189594287910f, - -0.385692972481151140f, - 0.922553216932332830f, -0.385869876937555310f, 0.922479210350733210f, - -0.386046767206627170f, - 0.922405169852209880f, -0.386223643281862980f, 0.922331095439485440f, - -0.386400505156759440f, - 0.922256987115283030f, -0.386577352824813920f, 0.922182844882327600f, - -0.386754186279524180f, - 0.922108668743345180f, -0.386931005514388580f, 0.922034458701062820f, - -0.387107810522905990f, - 0.921960214758209220f, -0.387284601298575840f, 0.921885936917513970f, - -0.387461377834897870f, - 0.921811625181708120f, -0.387638140125372730f, 0.921737279553523910f, - -0.387814888163501180f, - 0.921662900035694730f, -0.387991621942784860f, 0.921588486630955490f, - -0.388168341456725740f, - 0.921514039342042010f, -0.388345046698826250f, 0.921439558171691430f, - -0.388521737662589570f, - 0.921365043122642340f, -0.388698414341519190f, 0.921290494197634540f, - -0.388875076729119250f, - 0.921215911399408730f, -0.389051724818894380f, 0.921141294730707270f, - -0.389228358604349730f, - 0.921066644194273640f, -0.389404978078990940f, 0.920991959792852310f, - -0.389581583236324300f, - 0.920917241529189520f, -0.389758174069856410f, 0.920842489406032190f, - -0.389934750573094730f, - 0.920767703426128790f, -0.390111312739546910f, 0.920692883592229120f, - -0.390287860562721190f, - 0.920618029907083970f, -0.390464394036126590f, 0.920543142373445480f, - -0.390640913153272430f, - 0.920468220994067110f, -0.390817417907668500f, 0.920393265771703550f, - -0.390993908292825380f, - 0.920318276709110590f, -0.391170384302253870f, 0.920243253809045370f, - -0.391346845929465560f, - 0.920168197074266340f, -0.391523293167972410f, 0.920093106507533180f, - -0.391699726011286940f, - 0.920017982111606570f, -0.391876144452922350f, 0.919942823889248640f, - -0.392052548486392090f, - 0.919867631843222950f, -0.392228938105210310f, 0.919792405976293860f, - -0.392405313302891690f, - 0.919717146291227360f, -0.392581674072951470f, 0.919641852790790470f, - -0.392758020408905280f, - 0.919566525477751530f, -0.392934352304269490f, 0.919491164354880100f, - -0.393110669752560760f, - 0.919415769424947070f, -0.393286972747296400f, 0.919340340690724340f, - -0.393463261281994330f, - 0.919264878154985370f, -0.393639535350172880f, 0.919189381820504470f, - -0.393815794945351020f, - 0.919113851690057770f, -0.393992040061048100f, 0.919038287766422050f, - -0.394168270690784080f, - 0.918962690052375630f, -0.394344486828079600f, 0.918887058550697970f, - -0.394520688466455600f, - 0.918811393264170050f, -0.394696875599433560f, 0.918735694195573550f, - -0.394873048220535760f, - 0.918659961347691900f, -0.395049206323284770f, 0.918584194723309540f, - -0.395225349901203670f, - 0.918508394325212250f, -0.395401478947816350f, 0.918432560156186910f, - -0.395577593456646840f, - 0.918356692219021720f, -0.395753693421220080f, 0.918280790516506130f, - -0.395929778835061250f, - 0.918204855051430900f, -0.396105849691696270f, 0.918128885826588030f, - -0.396281905984651520f, - 0.918052882844770380f, -0.396457947707453910f, 0.917976846108772730f, - -0.396633974853630830f, - 0.917900775621390500f, -0.396809987416710310f, 0.917824671385420570f, - -0.396985985390220900f, - 0.917748533403661250f, -0.397161968767691610f, 0.917672361678911860f, - -0.397337937542652060f, - 0.917596156213972950f, -0.397513891708632330f, 0.917519917011646260f, - -0.397689831259163180f, - 0.917443644074735220f, -0.397865756187775750f, 0.917367337406043930f, - -0.398041666488001770f, - 0.917290997008377910f, -0.398217562153373560f, 0.917214622884544250f, - -0.398393443177423980f, - 0.917138215037350710f, -0.398569309553686300f, 0.917061773469606820f, - -0.398745161275694430f, - 0.916985298184123000f, -0.398920998336982910f, 0.916908789183710990f, - -0.399096820731086540f, - 0.916832246471183890f, -0.399272628451540990f, 0.916755670049355990f, - -0.399448421491882140f, - 0.916679059921042700f, -0.399624199845646790f, 0.916602416089060790f, - -0.399799963506371980f, - 0.916525738556228210f, -0.399975712467595330f, 0.916449027325364150f, - -0.400151446722855130f, - 0.916372282399289140f, -0.400327166265690090f, 0.916295503780824800f, - -0.400502871089639500f, - 0.916218691472794220f, -0.400678561188243240f, 0.916141845478021350f, - -0.400854236555041650f, - 0.916064965799331720f, -0.401029897183575620f, 0.915988052439551950f, - -0.401205543067386710f, - 0.915911105401509880f, -0.401381174200016790f, 0.915834124688034710f, - -0.401556790575008540f, - 0.915757110301956720f, -0.401732392185905010f, 0.915680062246107650f, - -0.401907979026249700f, - 0.915602980523320230f, -0.402083551089586990f, 0.915525865136428530f, - -0.402259108369461490f, - 0.915448716088267830f, -0.402434650859418430f, 0.915371533381674760f, - -0.402610178553003680f, - 0.915294317019487050f, -0.402785691443763530f, 0.915217067004543860f, - -0.402961189525244900f, - 0.915139783339685260f, -0.403136672790995300f, 0.915062466027752760f, - -0.403312141234562550f, - 0.914985115071589310f, -0.403487594849495310f, 0.914907730474038730f, - -0.403663033629342640f, - 0.914830312237946200f, -0.403838457567654070f, 0.914752860366158220f, - -0.404013866657979890f, - 0.914675374861522390f, -0.404189260893870690f, 0.914597855726887790f, - -0.404364640268877810f, - 0.914520302965104450f, -0.404540004776553000f, 0.914442716579023870f, - -0.404715354410448650f, - 0.914365096571498560f, -0.404890689164117580f, 0.914287442945382440f, - -0.405066009031113340f, - 0.914209755703530690f, -0.405241314004989860f, 0.914132034848799460f, - -0.405416604079301630f, - 0.914054280384046570f, -0.405591879247603870f, 0.913976492312130630f, - -0.405767139503452060f, - 0.913898670635911680f, -0.405942384840402510f, 0.913820815358251100f, - -0.406117615252011840f, - 0.913742926482011390f, -0.406292830731837360f, 0.913665004010056350f, - -0.406468031273437000f, - 0.913587047945250810f, -0.406643216870369030f, 0.913509058290461140f, - -0.406818387516192310f, - 0.913431035048554720f, -0.406993543204466510f, 0.913352978222400250f, - -0.407168683928751550f, - 0.913274887814867760f, -0.407343809682607970f, 0.913196763828828200f, - -0.407518920459596920f, - 0.913118606267154240f, -0.407694016253280110f, 0.913040415132719160f, - -0.407869097057219800f, - 0.912962190428398210f, -0.408044162864978690f, 0.912883932157067200f, - -0.408219213670120100f, - 0.912805640321603500f, -0.408394249466208000f, 0.912727314924885900f, - -0.408569270246806780f, - 0.912648955969793900f, -0.408744276005481360f, 0.912570563459208730f, - -0.408919266735797430f, - 0.912492137396012650f, -0.409094242431320980f, 0.912413677783089020f, - -0.409269203085618590f, - 0.912335184623322750f, -0.409444148692257590f, 0.912256657919599760f, - -0.409619079244805670f, - 0.912178097674807180f, -0.409793994736831150f, 0.912099503891833470f, - -0.409968895161902880f, - 0.912020876573568340f, -0.410143780513590240f, 0.911942215722902570f, - -0.410318650785463260f, - 0.911863521342728520f, -0.410493505971092410f, 0.911784793435939430f, - -0.410668346064048730f, - 0.911706032005429880f, -0.410843171057903910f, 0.911627237054095650f, - -0.411017980946230210f, - 0.911548408584833990f, -0.411192775722600160f, 0.911469546600543020f, - -0.411367555380587220f, - 0.911390651104122430f, -0.411542319913765220f, 0.911311722098472780f, - -0.411717069315708560f, - 0.911232759586496190f, -0.411891803579992170f, 0.911153763571095900f, - -0.412066522700191560f, - 0.911074734055176360f, -0.412241226669882890f, 0.910995671041643140f, - -0.412415915482642730f, - 0.910916574533403360f, -0.412590589132048210f, 0.910837444533365010f, - -0.412765247611677270f, - 0.910758281044437570f, -0.412939890915108080f, 0.910679084069531570f, - -0.413114519035919450f, - 0.910599853611558930f, -0.413289131967690960f, 0.910520589673432750f, - -0.413463729704002410f, - 0.910441292258067250f, -0.413638312238434500f, 0.910361961368377990f, - -0.413812879564568300f, - 0.910282597007281760f, -0.413987431675985400f, 0.910203199177696540f, - -0.414161968566268080f, - 0.910123767882541680f, -0.414336490228999100f, 0.910044303124737500f, - -0.414510996657761750f, - 0.909964804907205660f, -0.414685487846140010f, 0.909885273232869160f, - -0.414859963787718330f, - 0.909805708104652220f, -0.415034424476081630f, 0.909726109525480160f, - -0.415208869904815590f, - 0.909646477498279540f, -0.415383300067506230f, 0.909566812025978330f, - -0.415557714957740410f, - 0.909487113111505430f, -0.415732114569105360f, 0.909407380757791260f, - -0.415906498895188770f, - 0.909327614967767260f, -0.416080867929579210f, 0.909247815744366310f, - -0.416255221665865480f, - 0.909167983090522380f, -0.416429560097637150f, 0.909088117009170580f, - -0.416603883218484350f, - 0.909008217503247450f, -0.416778191021997650f, 0.908928284575690640f, - -0.416952483501768170f, - 0.908848318229439120f, -0.417126760651387870f, 0.908768318467432890f, - -0.417301022464448890f, - 0.908688285292613360f, -0.417475268934544290f, 0.908608218707923190f, - -0.417649500055267410f, - 0.908528118716306120f, -0.417823715820212270f, 0.908447985320707250f, - -0.417997916222973550f, - 0.908367818524072890f, -0.418172101257146320f, 0.908287618329350450f, - -0.418346270916326260f, - 0.908207384739488700f, -0.418520425194109700f, 0.908127117757437600f, - -0.418694564084093560f, - 0.908046817386148340f, -0.418868687579875050f, 0.907966483628573350f, - -0.419042795675052370f, - 0.907886116487666260f, -0.419216888363223910f, 0.907805715966381930f, - -0.419390965637988890f, - 0.907725282067676440f, -0.419565027492946880f, 0.907644814794507200f, - -0.419739073921698180f, - 0.907564314149832630f, -0.419913104917843620f, 0.907483780136612570f, - -0.420087120474984530f, - 0.907403212757808110f, -0.420261120586722880f, 0.907322612016381420f, - -0.420435105246661170f, - 0.907241977915295820f, -0.420609074448402510f, 0.907161310457516250f, - -0.420783028185550520f, - 0.907080609646008450f, -0.420956966451709440f, 0.906999875483739610f, - -0.421130889240483970f, - 0.906919107973678140f, -0.421304796545479640f, 0.906838307118793430f, - -0.421478688360302280f, - 0.906757472922056550f, -0.421652564678558330f, 0.906676605386439460f, - -0.421826425493854910f, - 0.906595704514915330f, -0.422000270799799680f, 0.906514770310458800f, - -0.422174100590000770f, - 0.906433802776045460f, -0.422347914858067050f, 0.906352801914652400f, - -0.422521713597607820f, - 0.906271767729257660f, -0.422695496802232950f, 0.906190700222840650f, - -0.422869264465553060f, - 0.906109599398381980f, -0.423043016581179040f, 0.906028465258863600f, - -0.423216753142722610f, - 0.905947297807268460f, -0.423390474143796050f, 0.905866097046580940f, - -0.423564179578011960f, - 0.905784862979786550f, -0.423737869438983840f, 0.905703595609872010f, - -0.423911543720325580f, - 0.905622294939825270f, -0.424085202415651560f, 0.905540960972635590f, - -0.424258845518576950f, - 0.905459593711293250f, -0.424432473022717420f, 0.905378193158790090f, - -0.424606084921689110f, - 0.905296759318118820f, -0.424779681209108810f, 0.905215292192273590f, - -0.424953261878593890f, - 0.905133791784249690f, -0.425126826923762360f, 0.905052258097043590f, - -0.425300376338232640f, - 0.904970691133653250f, -0.425473910115623800f, 0.904889090897077470f, - -0.425647428249555590f, - 0.904807457390316540f, -0.425820930733648240f, 0.904725790616371930f, - -0.425994417561522400f, - 0.904644090578246240f, -0.426167888726799620f, 0.904562357278943300f, - -0.426341344223101830f, - 0.904480590721468250f, -0.426514784044051520f, 0.904398790908827350f, - -0.426688208183271860f, - 0.904316957844028320f, -0.426861616634386430f, 0.904235091530079750f, - -0.427035009391019680f, - 0.904153191969991780f, -0.427208386446796320f, 0.904071259166775440f, - -0.427381747795341770f, - 0.903989293123443340f, -0.427555093430282080f, 0.903907293843009050f, - -0.427728423345243800f, - 0.903825261328487510f, -0.427901737533854080f, 0.903743195582894620f, - -0.428075035989740730f, - 0.903661096609247980f, -0.428248318706531960f, 0.903578964410566070f, - -0.428421585677856650f, - 0.903496798989868450f, -0.428594836897344400f, 0.903414600350176290f, - -0.428768072358625070f, - 0.903332368494511820f, -0.428941292055329490f, 0.903250103425898400f, - -0.429114495981088750f, - 0.903167805147360720f, -0.429287684129534610f, 0.903085473661924600f, - -0.429460856494299490f, - 0.903003108972617150f, -0.429634013069016380f, 0.902920711082466740f, - -0.429807153847318710f, - 0.902838279994502830f, -0.429980278822840620f, 0.902755815711756120f, - -0.430153387989216870f, - 0.902673318237258830f, -0.430326481340082610f, 0.902590787574043870f, - -0.430499558869073820f, - 0.902508223725145940f, -0.430672620569826800f, 0.902425626693600380f, - -0.430845666435978660f, - 0.902342996482444200f, -0.431018696461167030f, 0.902260333094715540f, - -0.431191710639029950f, - 0.902177636533453620f, -0.431364708963206330f, 0.902094906801698900f, - -0.431537691427335500f, - 0.902012143902493180f, -0.431710658025057260f, 0.901929347838879460f, - -0.431883608750012250f, - 0.901846518613901750f, -0.432056543595841500f, 0.901763656230605730f, - -0.432229462556186720f, - 0.901680760692037730f, -0.432402365624690140f, 0.901597832001245660f, - -0.432575252794994650f, - 0.901514870161278740f, -0.432748124060743700f, 0.901431875175186970f, - -0.432920979415581280f, - 0.901348847046022030f, -0.433093818853151960f, 0.901265785776836580f, - -0.433266642367100940f, - 0.901182691370684520f, -0.433439449951074090f, 0.901099563830620950f, - -0.433612241598717580f, - 0.901016403159702330f, -0.433785017303678520f, 0.900933209360986200f, - -0.433957777059604420f, - 0.900849982437531450f, -0.434130520860143310f, 0.900766722392397860f, - -0.434303248698943990f, - 0.900683429228646970f, -0.434475960569655650f, 0.900600102949340900f, - -0.434648656465928320f, - 0.900516743557543520f, -0.434821336381412290f, 0.900433351056319830f, - -0.434994000309758710f, - 0.900349925448735600f, -0.435166648244619260f, 0.900266466737858480f, - -0.435339280179646070f, - 0.900182974926756810f, -0.435511896108492000f, 0.900099450018500450f, - -0.435684496024810460f, - 0.900015892016160280f, -0.435857079922255470f, 0.899932300922808510f, - -0.436029647794481560f, - 0.899848676741518580f, -0.436202199635143950f, 0.899765019475365140f, - -0.436374735437898340f, - 0.899681329127423930f, -0.436547255196401200f, 0.899597605700772180f, - -0.436719758904309360f, - 0.899513849198487980f, -0.436892246555280360f, 0.899430059623650860f, - -0.437064718142972370f, - 0.899346236979341570f, -0.437237173661044090f, 0.899262381268642000f, - -0.437409613103154790f, - 0.899178492494635330f, -0.437582036462964400f, 0.899094570660405770f, - -0.437754443734133410f, - 0.899010615769039070f, -0.437926834910322860f, 0.898926627823621870f, - -0.438099209985194470f, - 0.898842606827242370f, -0.438271568952410430f, 0.898758552782989440f, - -0.438443911805633690f, - 0.898674465693953820f, -0.438616238538527660f, 0.898590345563227030f, - -0.438788549144756290f, - 0.898506192393901950f, -0.438960843617984320f, 0.898422006189072530f, - -0.439133121951876930f, - 0.898337786951834310f, -0.439305384140099950f, 0.898253534685283570f, - -0.439477630176319800f, - 0.898169249392518080f, -0.439649860054203480f, 0.898084931076636780f, - -0.439822073767418500f, - 0.898000579740739880f, -0.439994271309633260f, 0.897916195387928660f, - -0.440166452674516320f, - 0.897831778021305650f, -0.440338617855737250f, 0.897747327643974690f, - -0.440510766846965940f, - 0.897662844259040860f, -0.440682899641872900f, 0.897578327869610230f, - -0.440855016234129430f, - 0.897493778478790310f, -0.441027116617407230f, 0.897409196089689720f, - -0.441199200785378660f, - 0.897324580705418320f, -0.441371268731716670f, 0.897239932329087160f, - -0.441543320450094870f, - 0.897155250963808550f, -0.441715355934187310f, 0.897070536612695870f, - -0.441887375177668850f, - 0.896985789278863970f, -0.442059378174214700f, 0.896901008965428790f, - -0.442231364917500980f, - 0.896816195675507300f, -0.442403335401204080f, 0.896731349412217880f, - -0.442575289619001170f, - 0.896646470178680150f, -0.442747227564570020f, 0.896561557978014960f, - -0.442919149231588980f, - 0.896476612813344120f, -0.443091054613736880f, 0.896391634687790820f, - -0.443262943704693320f, - 0.896306623604479550f, -0.443434816498138480f, 0.896221579566536030f, - -0.443606672987752970f, - 0.896136502577086770f, -0.443778513167218220f, 0.896051392639260150f, - -0.443950337030216140f, - 0.895966249756185220f, -0.444122144570429200f, 0.895881073930992370f, - -0.444293935781540580f, - 0.895795865166813530f, -0.444465710657234000f, 0.895710623466781320f, - -0.444637469191193790f, - 0.895625348834030110f, -0.444809211377104880f, 0.895540041271694950f, - -0.444980937208652730f, - 0.895454700782912450f, -0.445152646679523640f, 0.895369327370820310f, - -0.445324339783404190f, - 0.895283921038557580f, -0.445496016513981740f, 0.895198481789264200f, - -0.445667676864944300f, - 0.895113009626081760f, -0.445839320829980290f, 0.895027504552152630f, - -0.446010948402778940f, - 0.894941966570620750f, -0.446182559577030070f, 0.894856395684631050f, - -0.446354154346423840f, - 0.894770791897329550f, -0.446525732704651350f, 0.894685155211863980f, - -0.446697294645404090f, - 0.894599485631382700f, -0.446868840162374160f, 0.894513783159035620f, - -0.447040369249254440f, - 0.894428047797973800f, -0.447211881899738320f, 0.894342279551349480f, - -0.447383378107519600f, - 0.894256478422316040f, -0.447554857866293010f, 0.894170644414028270f, - -0.447726321169753580f, - 0.894084777529641990f, -0.447897768011597310f, 0.893998877772314240f, - -0.448069198385520400f, - 0.893912945145203250f, -0.448240612285219890f, 0.893826979651468620f, - -0.448412009704393430f, - 0.893740981294271040f, -0.448583390636739240f, 0.893654950076772540f, - -0.448754755075955970f, - 0.893568886002135910f, -0.448926103015743260f, 0.893482789073525850f, - -0.449097434449801050f, - 0.893396659294107720f, -0.449268749371829920f, 0.893310496667048200f, - -0.449440047775531150f, - 0.893224301195515320f, -0.449611329654606540f, 0.893138072882678320f, - -0.449782595002758690f, - 0.893051811731707450f, -0.449953843813690520f, 0.892965517745774370f, - -0.450125076081105690f, - 0.892879190928051680f, -0.450296291798708610f, 0.892792831281713610f, - -0.450467490960204110f, - 0.892706438809935390f, -0.450638673559297600f, 0.892620013515893150f, - -0.450809839589695280f, - 0.892533555402764580f, -0.450980989045103860f, 0.892447064473728680f, - -0.451152121919230600f, - 0.892360540731965360f, -0.451323238205783520f, 0.892273984180655840f, - -0.451494337898471100f, - 0.892187394822982480f, -0.451665420991002490f, 0.892100772662129060f, - -0.451836487477087490f, - 0.892014117701280470f, -0.452007537350436420f, 0.891927429943622510f, - -0.452178570604760350f, - 0.891840709392342720f, -0.452349587233770890f, 0.891753956050629460f, - -0.452520587231180050f, - 0.891667169921672280f, -0.452691570590700920f, 0.891580351008662290f, - -0.452862537306046750f, - 0.891493499314791380f, -0.453033487370931580f, 0.891406614843252900f, - -0.453204420779070190f, - 0.891319697597241390f, -0.453375337524177750f, 0.891232747579952520f, - -0.453546237599970090f, - 0.891145764794583180f, -0.453717121000163870f, 0.891058749244331590f, - -0.453887987718476050f, - 0.890971700932396860f, -0.454058837748624430f, 0.890884619861979530f, - -0.454229671084327320f, - 0.890797506036281490f, -0.454400487719303580f, 0.890710359458505630f, - -0.454571287647272950f, - 0.890623180131855930f, -0.454742070861955450f, 0.890535968059537830f, - -0.454912837357071940f, - 0.890448723244757880f, -0.455083587126343840f, 0.890361445690723840f, - -0.455254320163493100f, - 0.890274135400644600f, -0.455425036462242360f, 0.890186792377730240f, - -0.455595736016314980f, - 0.890099416625192320f, -0.455766418819434640f, 0.890012008146243260f, - -0.455937084865326030f, - 0.889924566944096720f, -0.456107734147714110f, 0.889837093021967900f, - -0.456278366660324620f, - 0.889749586383072780f, -0.456448982396883920f, 0.889662047030628900f, - -0.456619581351118910f, - 0.889574474967854580f, -0.456790163516757160f, 0.889486870197969900f, - -0.456960728887526980f, - 0.889399232724195520f, -0.457131277457156980f, 0.889311562549753850f, - -0.457301809219376630f, - 0.889223859677868210f, -0.457472324167916060f, 0.889136124111763240f, - -0.457642822296505770f, - 0.889048355854664570f, -0.457813303598877170f, 0.888960554909799310f, - -0.457983768068762120f, - 0.888872721280395630f, -0.458154215699893060f, 0.888784854969682850f, - -0.458324646486003240f, - 0.888696955980891600f, -0.458495060420826270f, 0.888609024317253860f, - -0.458665457498096560f, - 0.888521059982002260f, -0.458835837711549120f, 0.888433062978371320f, - -0.459006201054919630f, - 0.888345033309596350f, -0.459176547521944090f, 0.888256970978913870f, - -0.459346877106359630f, - 0.888168875989561730f, -0.459517189801903480f, 0.888080748344778900f, - -0.459687485602313870f, - 0.887992588047805560f, -0.459857764501329540f, 0.887904395101883240f, - -0.460028026492689650f, - 0.887816169510254440f, -0.460198271570134320f, 0.887727911276163020f, - -0.460368499727404010f, - 0.887639620402853930f, -0.460538710958240010f, 0.887551296893573370f, - -0.460708905256384080f, - 0.887462940751568840f, -0.460879082615578690f, 0.887374551980088850f, - -0.461049243029566900f, - 0.887286130582383150f, -0.461219386492092380f, 0.887197676561702900f, - -0.461389512996899450f, - 0.887109189921300170f, -0.461559622537733080f, 0.887020670664428360f, - -0.461729715108338770f, - 0.886932118794342190f, -0.461899790702462730f, 0.886843534314297410f, - -0.462069849313851750f, - 0.886754917227550840f, -0.462239890936253340f, 0.886666267537361000f, - -0.462409915563415430f, - 0.886577585246987040f, -0.462579923189086810f, 0.886488870359689600f, - -0.462749913807016740f, - 0.886400122878730600f, -0.462919887410955080f, 0.886311342807372780f, - -0.463089843994652530f, - 0.886222530148880640f, -0.463259783551860150f, 0.886133684906519340f, - -0.463429706076329830f, - 0.886044807083555600f, -0.463599611561814010f, 0.885955896683257030f, - -0.463769500002065630f, - 0.885866953708892790f, -0.463939371390838520f, 0.885777978163732940f, - -0.464109225721886950f, - 0.885688970051048960f, -0.464279062988965760f, 0.885599929374113360f, - -0.464448883185830660f, - 0.885510856136199950f, -0.464618686306237820f, 0.885421750340583680f, - -0.464788472343943990f, - 0.885332611990540590f, -0.464958241292706690f, 0.885243441089348270f, - -0.465127993146283950f, - 0.885154237640285110f, -0.465297727898434600f, 0.885065001646630930f, - -0.465467445542917800f, - 0.884975733111666660f, -0.465637146073493660f, 0.884886432038674560f, - -0.465806829483922710f, - 0.884797098430937790f, -0.465976495767966180f, 0.884707732291741040f, - -0.466146144919385890f, - 0.884618333624369920f, -0.466315776931944430f, 0.884528902432111460f, - -0.466485391799404900f, - 0.884439438718253810f, -0.466654989515530920f, 0.884349942486086120f, - -0.466824570074086950f, - 0.884260413738899190f, -0.466994133468838000f, 0.884170852479984500f, - -0.467163679693549770f, - 0.884081258712634990f, -0.467333208741988420f, 0.883991632440144890f, - -0.467502720607920920f, - 0.883901973665809470f, -0.467672215285114770f, 0.883812282392925090f, - -0.467841692767338170f, - 0.883722558624789660f, -0.468011153048359830f, 0.883632802364701870f, - -0.468180596121949290f, - 0.883543013615961880f, -0.468350021981876530f, 0.883453192381870920f, - -0.468519430621912310f, - 0.883363338665731580f, -0.468688822035827900f, 0.883273452470847430f, - -0.468858196217395330f, - 0.883183533800523390f, -0.469027553160387130f, 0.883093582658065370f, - -0.469196892858576580f, - 0.883003599046780830f, -0.469366215305737520f, 0.882913582969978020f, - -0.469535520495644450f, - 0.882823534430966620f, -0.469704808422072460f, 0.882733453433057650f, - -0.469874079078797360f, - 0.882643339979562790f, -0.470043332459595620f, 0.882553194073795510f, - -0.470212568558244170f, - 0.882463015719070150f, -0.470381787368520650f, 0.882372804918702290f, - -0.470550988884203550f, - 0.882282561676008710f, -0.470720173099071600f, 0.882192285994307430f, - -0.470889340006904520f, - 0.882101977876917580f, -0.471058489601482500f, 0.882011637327159590f, - -0.471227621876586340f, - 0.881921264348355050f, -0.471396736825997640f, 0.881830858943826620f, - -0.471565834443498420f, - 0.881740421116898320f, -0.471734914722871430f, 0.881649950870895260f, - -0.471903977657900210f, - 0.881559448209143780f, -0.472073023242368660f, 0.881468913134971440f, - -0.472242051470061490f, - 0.881378345651706920f, -0.472411062334764040f, 0.881287745762680100f, - -0.472580055830262250f, - 0.881197113471222090f, -0.472749031950342790f, 0.881106448780665130f, - -0.472917990688792760f, - 0.881015751694342870f, -0.473086932039400050f, 0.880925022215589880f, - -0.473255855995953320f, - 0.880834260347742040f, -0.473424762552241530f, 0.880743466094136340f, - -0.473593651702054530f, - 0.880652639458111010f, -0.473762523439182850f, 0.880561780443005700f, - -0.473931377757417450f, - 0.880470889052160750f, -0.474100214650549970f, 0.880379965288918150f, - -0.474269034112372980f, - 0.880289009156621010f, -0.474437836136679230f, 0.880198020658613190f, - -0.474606620717262560f, - 0.880106999798240360f, -0.474775387847917120f, 0.880015946578849070f, - -0.474944137522437800f, - 0.879924861003786860f, -0.475112869734620300f, 0.879833743076402940f, - -0.475281584478260740f, - 0.879742592800047410f, -0.475450281747155870f, 0.879651410178071580f, - -0.475618961535103300f, - 0.879560195213827890f, -0.475787623835901120f, 0.879468947910670210f, - -0.475956268643348060f, - 0.879377668271953290f, -0.476124895951243580f, 0.879286356301033250f, - -0.476293505753387690f, - 0.879195012001267480f, -0.476462098043581190f, 0.879103635376014330f, - -0.476630672815625320f, - 0.879012226428633530f, -0.476799230063322090f, 0.878920785162485840f, - -0.476967769780474170f, - 0.878829311580933360f, -0.477136291960884810f, 0.878737805687339390f, - -0.477304796598357890f, - 0.878646267485068130f, -0.477473283686698060f, 0.878554696977485450f, - -0.477641753219710470f, - 0.878463094167957870f, -0.477810205191200990f, 0.878371459059853480f, - -0.477978639594976160f, - 0.878279791656541580f, -0.478147056424843010f, 0.878188091961392250f, - -0.478315455674609480f, - 0.878096359977777130f, -0.478483837338083970f, 0.878004595709069080f, - -0.478652201409075500f, - 0.877912799158641840f, -0.478820547881393890f, 0.877820970329870500f, - -0.478988876748849490f, - 0.877729109226131570f, -0.479157188005253310f, 0.877637215850802230f, - -0.479325481644417070f, - 0.877545290207261350f, -0.479493757660153010f, 0.877453332298888560f, - -0.479662016046274180f, - 0.877361342129065140f, -0.479830256796594190f, 0.877269319701173170f, - -0.479998479904927280f, - 0.877177265018595940f, -0.480166685365088390f, 0.877085178084718420f, - -0.480334873170893020f, - 0.876993058902925890f, -0.480503043316157510f, 0.876900907476605650f, - -0.480671195794698640f, - 0.876808723809145650f, -0.480839330600333960f, 0.876716507903935400f, - -0.481007447726881590f, - 0.876624259764365310f, -0.481175547168160300f, 0.876531979393827100f, - -0.481343628917989710f, - 0.876439666795713610f, -0.481511692970189860f, 0.876347321973419020f, - -0.481679739318581490f, - 0.876254944930338510f, -0.481847767956986030f, 0.876162535669868460f, - -0.482015778879225590f, - 0.876070094195406600f, -0.482183772079122720f, 0.875977620510351770f, - -0.482351747550500980f, - 0.875885114618103810f, -0.482519705287184350f, 0.875792576522063880f, - -0.482687645282997460f, - 0.875700006225634600f, -0.482855567531765670f, 0.875607403732219350f, - -0.483023472027314880f, - 0.875514769045222850f, -0.483191358763471860f, 0.875422102168050940f, - -0.483359227734063810f, - 0.875329403104110890f, -0.483527078932918740f, 0.875236671856810870f, - -0.483694912353865140f, - 0.875143908429560360f, -0.483862727990732270f, 0.875051112825769970f, - -0.484030525837350010f, - 0.874958285048851650f, -0.484198305887549030f, 0.874865425102218320f, - -0.484366068135160420f, - 0.874772532989284150f, -0.484533812574016180f, 0.874679608713464510f, - -0.484701539197948670f, - 0.874586652278176110f, -0.484869248000791060f, 0.874493663686836560f, - -0.485036938976377290f, - 0.874400642942864790f, -0.485204612118541820f, 0.874307590049680950f, - -0.485372267421119770f, - 0.874214505010706300f, -0.485539904877946960f, 0.874121387829363330f, - -0.485707524482859750f, - 0.874028238509075740f, -0.485875126229695250f, 0.873935057053268240f, - -0.486042710112291330f, - 0.873841843465366860f, -0.486210276124486420f, 0.873748597748798870f, - -0.486377824260119440f, - 0.873655319906992630f, -0.486545354513030270f, 0.873562009943377850f, - -0.486712866877059170f, - 0.873468667861384880f, -0.486880361346047340f, 0.873375293664446000f, - -0.487047837913836380f, - 0.873281887355994210f, -0.487215296574268760f, 0.873188448939463790f, - -0.487382737321187360f, - 0.873094978418290090f, -0.487550160148436000f, 0.873001475795909920f, - -0.487717565049858800f, - 0.872907941075761080f, -0.487884952019301040f, 0.872814374261282390f, - -0.488052321050608250f, - 0.872720775355914300f, -0.488219672137626790f, 0.872627144363097960f, - -0.488387005274203530f, - 0.872533481286276170f, -0.488554320454186180f, 0.872439786128892280f, - -0.488721617671423080f, - 0.872346058894391540f, -0.488888896919763170f, 0.872252299586219860f, - -0.489056158193056030f, - 0.872158508207824480f, -0.489223401485151980f, 0.872064684762653860f, - -0.489390626789901920f, - 0.871970829254157810f, -0.489557834101157440f, 0.871876941685786890f, - -0.489725023412770910f, - 0.871783022060993120f, -0.489892194718595190f, 0.871689070383229740f, - -0.490059348012483850f, - 0.871595086655950980f, -0.490226483288291160f, 0.871501070882612530f, - -0.490393600539871970f, - 0.871407023066670950f, -0.490560699761082020f, 0.871312943211584030f, - -0.490727780945777400f, - 0.871218831320811020f, -0.490894844087815090f, 0.871124687397811900f, - -0.491061889181052650f, - 0.871030511446048260f, -0.491228916219348280f, 0.870936303468982760f, - -0.491395925196560780f, - 0.870842063470078980f, -0.491562916106549900f, 0.870747791452801790f, - -0.491729888943175760f, - 0.870653487420617430f, -0.491896843700299290f, 0.870559151376993250f, - -0.492063780371782000f, - 0.870464783325397670f, -0.492230698951486020f, 0.870370383269300270f, - -0.492397599433274380f, - 0.870275951212171940f, -0.492564481811010590f, 0.870181487157484560f, - -0.492731346078558840f, - 0.870086991108711460f, -0.492898192229784040f, 0.869992463069326870f, - -0.493065020258551700f, - 0.869897903042806340f, -0.493231830158727900f, 0.869803311032626650f, - -0.493398621924179770f, - 0.869708687042265670f, -0.493565395548774770f, 0.869614031075202300f, - -0.493732151026381020f, - 0.869519343134916860f, -0.493898888350867480f, 0.869424623224890890f, - -0.494065607516103570f, - 0.869329871348606840f, -0.494232308515959670f, 0.869235087509548370f, - -0.494398991344306650f, - 0.869140271711200560f, -0.494565655995015950f, 0.869045423957049530f, - -0.494732302461959870f, - 0.868950544250582380f, -0.494898930739011260f, 0.868855632595287860f, - -0.495065540820043560f, - 0.868760688994655310f, -0.495232132698931180f, 0.868665713452175690f, - -0.495398706369549020f, - 0.868570705971340900f, -0.495565261825772540f, 0.868475666555644120f, - -0.495731799061477960f, - 0.868380595208579800f, -0.495898318070542190f, 0.868285491933643350f, - -0.496064818846842890f, - 0.868190356734331310f, -0.496231301384258250f, 0.868095189614141670f, - -0.496397765676667160f, - 0.867999990576573510f, -0.496564211717949290f, 0.867904759625126920f, - -0.496730639501984760f, - 0.867809496763303320f, -0.496897049022654470f, 0.867714201994605140f, - -0.497063440273840250f, - 0.867618875322536230f, -0.497229813249424220f, 0.867523516750601460f, - -0.497396167943289280f, - 0.867428126282306920f, -0.497562504349319150f, 0.867332703921159800f, - -0.497728822461397940f, - 0.867237249670668400f, -0.497895122273410870f, 0.867141763534342470f, - -0.498061403779243410f, - 0.867046245515692650f, -0.498227666972781870f, 0.866950695618230900f, - -0.498393911847913210f, - 0.866855113845470430f, -0.498560138398525140f, 0.866759500200925400f, - -0.498726346618505900f, - 0.866663854688111130f, -0.498892536501744590f, 0.866568177310544470f, - -0.499058708042130870f, - 0.866472468071743050f, -0.499224861233555080f, 0.866376726975225830f, - -0.499390996069908170f, - 0.866280954024512990f, -0.499557112545081840f, 0.866185149223125840f, - -0.499723210652968540f, - 0.866089312574586770f, -0.499889290387461330f, 0.865993444082419520f, - -0.500055351742453860f, - 0.865897543750148820f, -0.500221394711840680f, 0.865801611581300760f, - -0.500387419289516580f, - 0.865705647579402380f, -0.500553425469377420f, 0.865609651747981990f, - -0.500719413245319880f, - 0.865513624090569090f, -0.500885382611240710f, 0.865417564610694410f, - -0.501051333561038040f, - 0.865321473311889800f, -0.501217266088609950f, 0.865225350197688200f, - -0.501383180187855770f, - 0.865129195271623800f, -0.501549075852675390f, 0.865033008537231860f, - -0.501714953076969120f, - 0.864936789998049020f, -0.501880811854638290f, 0.864840539657612870f, - -0.502046652179584660f, - 0.864744257519462380f, -0.502212474045710790f, 0.864647943587137480f, - -0.502378277446919760f, - 0.864551597864179340f, -0.502544062377115690f, 0.864455220354130360f, - -0.502709828830202990f, - 0.864358811060534030f, -0.502875576800086990f, 0.864262369986934950f, - -0.503041306280673450f, - 0.864165897136879300f, -0.503207017265868920f, 0.864069392513913790f, - -0.503372709749581040f, - 0.863972856121586810f, -0.503538383725717580f, 0.863876287963447510f, - -0.503704039188187070f, - 0.863779688043046720f, -0.503869676130898950f, 0.863683056363935830f, - -0.504035294547763190f, - 0.863586392929668100f, -0.504200894432690340f, 0.863489697743797140f, - -0.504366475779592040f, - 0.863392970809878420f, -0.504532038582380270f, 0.863296212131468230f, - -0.504697582834967570f, - 0.863199421712124160f, -0.504863108531267590f, 0.863102599555404910f, - -0.505028615665194080f, - 0.863005745664870320f, -0.505194104230662240f, 0.862908860044081400f, - -0.505359574221587280f, - 0.862811942696600330f, -0.505525025631885390f, 0.862714993625990690f, - -0.505690458455473450f, - 0.862618012835816740f, -0.505855872686268860f, 0.862521000329644520f, - -0.506021268318189720f, - 0.862423956111040610f, -0.506186645345155230f, 0.862326880183573060f, - -0.506352003761084800f, - 0.862229772550811240f, -0.506517343559898530f, 0.862132633216325380f, - -0.506682664735517600f, - 0.862035462183687210f, -0.506847967281863210f, 0.861938259456469290f, - -0.507013251192858230f, - 0.861841025038245330f, -0.507178516462425180f, 0.861743758932590700f, - -0.507343763084487920f, - 0.861646461143081300f, -0.507508991052970870f, 0.861549131673294720f, - -0.507674200361798890f, - 0.861451770526809320f, -0.507839391004897720f, 0.861354377707204910f, - -0.508004562976194010f, - 0.861256953218062170f, -0.508169716269614600f, 0.861159497062963350f, - -0.508334850879087360f, - 0.861062009245491480f, -0.508499966798540930f, 0.860964489769231010f, - -0.508665064021904030f, - 0.860866938637767310f, -0.508830142543106990f, 0.860769355854687170f, - -0.508995202356080090f, - 0.860671741423578380f, -0.509160243454754640f, 0.860574095348029980f, - -0.509325265833062480f, - 0.860476417631632070f, -0.509490269484936360f, 0.860378708277976130f, - -0.509655254404309250f, - 0.860280967290654510f, -0.509820220585115450f, 0.860183194673260990f, - -0.509985168021289460f, - 0.860085390429390140f, -0.510150096706766810f, 0.859987554562638200f, - -0.510315006635483240f, - 0.859889687076602290f, -0.510479897801375700f, 0.859791787974880650f, - -0.510644770198381610f, - 0.859693857261072610f, -0.510809623820439040f, 0.859595894938779080f, - -0.510974458661486830f, - 0.859497901011601730f, -0.511139274715464390f, 0.859399875483143450f, - -0.511304071976312000f, - 0.859301818357008470f, -0.511468850437970300f, 0.859203729636801920f, - -0.511633610094381240f, - 0.859105609326130450f, -0.511798350939486890f, 0.859007457428601520f, - -0.511963072967230200f, - 0.858909273947823900f, -0.512127776171554690f, 0.858811058887407610f, - -0.512292460546404870f, - 0.858712812250963520f, -0.512457126085725690f, 0.858614534042104190f, - -0.512621772783462990f, - 0.858516224264442740f, -0.512786400633562960f, 0.858417882921593930f, - -0.512951009629972980f, - 0.858319510017173440f, -0.513115599766640560f, 0.858221105554798250f, - -0.513280171037514220f, - 0.858122669538086140f, -0.513444723436543460f, 0.858024201970656540f, - -0.513609256957677780f, - 0.857925702856129790f, -0.513773771594868030f, 0.857827172198127430f, - -0.513938267342065380f, - 0.857728610000272120f, -0.514102744193221660f, 0.857630016266187620f, - -0.514267202142289710f, - 0.857531390999499150f, -0.514431641183222820f, 0.857432734203832700f, - -0.514596061309975040f, - 0.857334045882815590f, -0.514760462516501200f, 0.857235326040076460f, - -0.514924844796756490f, - 0.857136574679244980f, -0.515089208144697160f, 0.857037791803951680f, - -0.515253552554280180f, - 0.856938977417828760f, -0.515417878019462930f, 0.856840131524509220f, - -0.515582184534203790f, - 0.856741254127627470f, -0.515746472092461380f, 0.856642345230818840f, - -0.515910740688195650f, - 0.856543404837719960f, -0.516074990315366630f, 0.856444432951968590f, - -0.516239220967935510f, - 0.856345429577203610f, -0.516403432639863990f, 0.856246394717065210f, - -0.516567625325114350f, - 0.856147328375194470f, -0.516731799017649870f, 0.856048230555233940f, - -0.516895953711434150f, - 0.855949101260826910f, -0.517060089400431910f, 0.855849940495618240f, - -0.517224206078608310f, - 0.855750748263253920f, -0.517388303739929060f, 0.855651524567380690f, - -0.517552382378360880f, - 0.855552269411646860f, -0.517716441987871150f, 0.855452982799701830f, - -0.517880482562427690f, - 0.855353664735196030f, -0.518044504095999340f, 0.855254315221780970f, - -0.518208506582555460f, - 0.855154934263109620f, -0.518372490016066110f, 0.855055521862835950f, - -0.518536454390502220f, - 0.854956078024614930f, -0.518700399699834950f, 0.854856602752102850f, - -0.518864325938036890f, - 0.854757096048957220f, -0.519028233099080860f, 0.854657557918836460f, - -0.519192121176940250f, - 0.854557988365400530f, -0.519355990165589640f, 0.854458387392310170f, - -0.519519840059003760f, - 0.854358755003227440f, -0.519683670851158410f, 0.854259091201815530f, - -0.519847482536030190f, - 0.854159395991738850f, -0.520011275107596040f, 0.854059669376662780f, - -0.520175048559833760f, - 0.853959911360254180f, -0.520338802886721960f, 0.853860121946180770f, - -0.520502538082239670f, - 0.853760301138111410f, -0.520666254140367160f, 0.853660448939716380f, - -0.520829951055084670f, - 0.853560565354666840f, -0.520993628820373920f, 0.853460650386635320f, - -0.521157287430216610f, - 0.853360704039295430f, -0.521320926878595660f, 0.853260726316321880f, - -0.521484547159494330f, - 0.853160717221390420f, -0.521648148266897090f, 0.853060676758178320f, - -0.521811730194788550f, - 0.852960604930363630f, -0.521975292937154390f, 0.852860501741625750f, - -0.522138836487980760f, - 0.852760367195645300f, -0.522302360841254590f, 0.852660201296103760f, - -0.522465865990963780f, - 0.852560004046684080f, -0.522629351931096610f, 0.852459775451070100f, - -0.522792818655642090f, - 0.852359515512947090f, -0.522956266158590140f, 0.852259224236001090f, - -0.523119694433931250f, - 0.852158901623919830f, -0.523283103475656430f, 0.852058547680391690f, - -0.523446493277757830f, - 0.851958162409106380f, -0.523609863834227920f, 0.851857745813754840f, - -0.523773215139060170f, - 0.851757297898029120f, -0.523936547186248600f, 0.851656818665622370f, - -0.524099859969787700f, - 0.851556308120228980f, -0.524263153483673360f, 0.851455766265544310f, - -0.524426427721901400f, - 0.851355193105265200f, -0.524589682678468950f, 0.851254588643089120f, - -0.524752918347373360f, - 0.851153952882715340f, -0.524916134722613000f, 0.851053285827843790f, - -0.525079331798186780f, - 0.850952587482175730f, -0.525242509568094710f, 0.850851857849413530f, - -0.525405668026336930f, - 0.850751096933260790f, -0.525568807166914680f, 0.850650304737422090f, - -0.525731926983829760f, - 0.850549481265603480f, -0.525895027471084630f, 0.850448626521511760f, - -0.526058108622682760f, - 0.850347740508854980f, -0.526221170432628060f, 0.850246823231342710f, - -0.526384212894925100f, - 0.850145874692685210f, -0.526547236003579440f, 0.850044894896594180f, - -0.526710239752597010f, - 0.849943883846782210f, -0.526873224135984590f, 0.849842841546963320f, - -0.527036189147750080f, - 0.849741768000852550f, -0.527199134781901280f, 0.849640663212165910f, - -0.527362061032447540f, - 0.849539527184620890f, -0.527524967893398200f, 0.849438359921936060f, - -0.527687855358763720f, - 0.849337161427830780f, -0.527850723422555230f, 0.849235931706025960f, - -0.528013572078784630f, - 0.849134670760243630f, -0.528176401321464370f, 0.849033378594206800f, - -0.528339211144607690f, - 0.848932055211639610f, -0.528502001542228480f, 0.848830700616267530f, - -0.528664772508341320f, - 0.848729314811817130f, -0.528827524036961870f, 0.848627897802015860f, - -0.528990256122106040f, - 0.848526449590592650f, -0.529152968757790610f, 0.848424970181277600f, - -0.529315661938033260f, - 0.848323459577801640f, -0.529478335656851980f, 0.848221917783896990f, - -0.529640989908265910f, - 0.848120344803297230f, -0.529803624686294610f, 0.848018740639736810f, - -0.529966239984958620f, - 0.847917105296951410f, -0.530128835798278960f, 0.847815438778677930f, - -0.530291412120277310f, - 0.847713741088654380f, -0.530453968944976320f, 0.847612012230619660f, - -0.530616506266399330f, - 0.847510252208314330f, -0.530779024078570140f, 0.847408461025479730f, - -0.530941522375513620f, - 0.847306638685858320f, -0.531104001151255000f, 0.847204785193194090f, - -0.531266460399820390f, - 0.847102900551231500f, -0.531428900115236800f, 0.847000984763716880f, - -0.531591320291531670f, - 0.846899037834397240f, -0.531753720922733320f, 0.846797059767020910f, - -0.531916102002870650f, - 0.846695050565337450f, -0.532078463525973540f, 0.846593010233097190f, - -0.532240805486072220f, - 0.846490938774052130f, -0.532403127877197900f, 0.846388836191954930f, - -0.532565430693382580f, - 0.846286702490559710f, -0.532727713928658810f, 0.846184537673621560f, - -0.532889977577059800f, - 0.846082341744897050f, -0.533052221632619450f, 0.845980114708143270f, - -0.533214446089372960f, - 0.845877856567119000f, -0.533376650941355330f, 0.845775567325584010f, - -0.533538836182603120f, - 0.845673246987299070f, -0.533701001807152960f, 0.845570895556026270f, - -0.533863147809042650f, - 0.845468513035528830f, -0.534025274182310380f, 0.845366099429570970f, - -0.534187380920995380f, - 0.845263654741918220f, -0.534349468019137520f, 0.845161178976337140f, - -0.534511535470777120f, - 0.845058672136595470f, -0.534673583269955510f, 0.844956134226462210f, - -0.534835611410714560f, - 0.844853565249707120f, -0.534997619887097150f, 0.844750965210101510f, - -0.535159608693146600f, - 0.844648334111417820f, -0.535321577822907120f, 0.844545671957429240f, - -0.535483527270423370f, - 0.844442978751910660f, -0.535645457029741090f, 0.844340254498637590f, - -0.535807367094906390f, - 0.844237499201387020f, -0.535969257459966710f, 0.844134712863936930f, - -0.536131128118969460f, - 0.844031895490066410f, -0.536292979065963180f, 0.843929047083555870f, - -0.536454810294997090f, - 0.843826167648186740f, -0.536616621800121040f, 0.843723257187741660f, - -0.536778413575385920f, - 0.843620315706004150f, -0.536940185614842910f, 0.843517343206759200f, - -0.537101937912544130f, - 0.843414339693792760f, -0.537263670462542530f, 0.843311305170892140f, - -0.537425383258891550f, - 0.843208239641845440f, -0.537587076295645390f, 0.843105143110442160f, - -0.537748749566859360f, - 0.843002015580472940f, -0.537910403066588880f, 0.842898857055729310f, - -0.538072036788890600f, - 0.842795667540004120f, -0.538233650727821700f, 0.842692447037091670f, - -0.538395244877439950f, - 0.842589195550786710f, -0.538556819231804100f, 0.842485913084885630f, - -0.538718373784973560f, - 0.842382599643185850f, -0.538879908531008420f, 0.842279255229485990f, - -0.539041423463969440f, - 0.842175879847585570f, -0.539202918577918240f, 0.842072473501285560f, - -0.539364393866917040f, - 0.841969036194387680f, -0.539525849325028890f, 0.841865567930695340f, - -0.539687284946317570f, - 0.841762068714012490f, -0.539848700724847590f, 0.841658538548144760f, - -0.540010096654684020f, - 0.841554977436898440f, -0.540171472729892850f, 0.841451385384081260f, - -0.540332828944540710f, - 0.841347762393501950f, -0.540494165292695230f, 0.841244108468970580f, - -0.540655481768424150f, - 0.841140423614298080f, -0.540816778365796670f, 0.841036707833296650f, - -0.540978055078882080f, - 0.840932961129779780f, -0.541139311901750800f, 0.840829183507561640f, - -0.541300548828474120f, - 0.840725374970458070f, -0.541461765853123440f, 0.840621535522285690f, - -0.541622962969771530f, - 0.840517665166862550f, -0.541784140172491550f, 0.840413763908007480f, - -0.541945297455357360f, - 0.840309831749540770f, -0.542106434812443920f, 0.840205868695283580f, - -0.542267552237826520f, - 0.840101874749058400f, -0.542428649725581250f, 0.839997849914688840f, - -0.542589727269785270f, - 0.839893794195999520f, -0.542750784864515890f, 0.839789707596816370f, - -0.542911822503851730f, - 0.839685590120966110f, -0.543072840181871740f, 0.839581441772277120f, - -0.543233837892655890f, - 0.839477262554578550f, -0.543394815630284800f, 0.839373052471700690f, - -0.543555773388839540f, - 0.839268811527475230f, -0.543716711162402280f, 0.839164539725734680f, - -0.543877628945055980f, - 0.839060237070312740f, -0.544038526730883820f, 0.838955903565044460f, - -0.544199404513970310f, - 0.838851539213765760f, -0.544360262288400400f, 0.838747144020313920f, - -0.544521100048259600f, - 0.838642717988527300f, -0.544681917787634530f, 0.838538261122245280f, - -0.544842715500612360f, - 0.838433773425308340f, -0.545003493181281160f, 0.838329254901558300f, - -0.545164250823729320f, - 0.838224705554838080f, -0.545324988422046460f, 0.838120125388991500f, - -0.545485705970322530f, - 0.838015514407863820f, -0.545646403462648590f, 0.837910872615301170f, - -0.545807080893116140f, - 0.837806200015150940f, -0.545967738255817570f, 0.837701496611261700f, - -0.546128375544845950f, - 0.837596762407483040f, -0.546288992754295210f, 0.837491997407665890f, - -0.546449589878259650f, - 0.837387201615661940f, -0.546610166910834860f, 0.837282375035324320f, - -0.546770723846116800f, - 0.837177517670507300f, -0.546931260678202190f, 0.837072629525066000f, - -0.547091777401188530f, - 0.836967710602857020f, -0.547252274009174090f, 0.836862760907737920f, - -0.547412750496257930f, - 0.836757780443567190f, -0.547573206856539760f, 0.836652769214204950f, - -0.547733643084120090f, - 0.836547727223512010f, -0.547894059173100190f, 0.836442654475350380f, - -0.548054455117581880f, - 0.836337550973583530f, -0.548214830911667780f, 0.836232416722075600f, - -0.548375186549461600f, - 0.836127251724692270f, -0.548535522025067390f, 0.836022055985299880f, - -0.548695837332590090f, - 0.835916829507766360f, -0.548856132466135290f, 0.835811572295960700f, - -0.549016407419809390f, - 0.835706284353752600f, -0.549176662187719660f, 0.835600965685013410f, - -0.549336896763974010f, - 0.835495616293615350f, -0.549497111142680960f, 0.835390236183431890f, - -0.549657305317949870f, - 0.835284825358337370f, -0.549817479283890910f, 0.835179383822207690f, - -0.549977633034614890f, - 0.835073911578919410f, -0.550137766564233630f, 0.834968408632350450f, - -0.550297879866859190f, - 0.834862874986380010f, -0.550457972936604810f, 0.834757310644888230f, - -0.550618045767584330f, - 0.834651715611756440f, -0.550778098353912120f, 0.834546089890866870f, - -0.550938130689703880f, - 0.834440433486103190f, -0.551098142769075430f, 0.834334746401350080f, - -0.551258134586143590f, - 0.834229028640493420f, -0.551418106135026060f, 0.834123280207420100f, - -0.551578057409841000f, - 0.834017501106018130f, -0.551737988404707340f, 0.833911691340176840f, - -0.551897899113745210f, - 0.833805850913786340f, -0.552057789531074980f, 0.833699979830738290f, - -0.552217659650817930f, - 0.833594078094925140f, -0.552377509467096070f, 0.833488145710240770f, - -0.552537338974032120f, - 0.833382182680579730f, -0.552697148165749770f, 0.833276189009838240f, - -0.552856937036373290f, - 0.833170164701913190f, -0.553016705580027470f, 0.833064109760702890f, - -0.553176453790838350f, - 0.832958024190106670f, -0.553336181662932300f, 0.832851907994025090f, - -0.553495889190436570f, - 0.832745761176359460f, -0.553655576367479310f, 0.832639583741012770f, - -0.553815243188189090f, - 0.832533375691888680f, -0.553974889646695500f, 0.832427137032892280f, - -0.554134515737128910f, - 0.832320867767929680f, -0.554294121453620000f, 0.832214567900907980f, - -0.554453706790300930f, - 0.832108237435735590f, -0.554613271741304040f, 0.832001876376321950f, - -0.554772816300762470f, - 0.831895484726577590f, -0.554932340462810370f, 0.831789062490414400f, - -0.555091844221582420f, - 0.831682609671745120f, -0.555251327571213980f, 0.831576126274483740f, - -0.555410790505841630f, - 0.831469612302545240f, -0.555570233019602180f, 0.831363067759845920f, - -0.555729655106633410f, - 0.831256492650303210f, -0.555889056761073810f, 0.831149886977835540f, - -0.556048437977062600f, - 0.831043250746362320f, -0.556207798748739930f, 0.830936583959804410f, - -0.556367139070246370f, - 0.830829886622083570f, -0.556526458935723610f, 0.830723158737122880f, - -0.556685758339313890f, - 0.830616400308846310f, -0.556845037275160100f, 0.830509611341179070f, - -0.557004295737405950f, - 0.830402791838047550f, -0.557163533720196220f, 0.830295941803379070f, - -0.557322751217676160f, - 0.830189061241102370f, -0.557481948223991550f, 0.830082150155146970f, - -0.557641124733289420f, - 0.829975208549443950f, -0.557800280739716990f, 0.829868236427924840f, - -0.557959416237422960f, - 0.829761233794523050f, -0.558118531220556100f, 0.829654200653172640f, - -0.558277625683266330f, - 0.829547137007808910f, -0.558436699619704100f, 0.829440042862368170f, - -0.558595753024020760f, - 0.829332918220788250f, -0.558754785890368310f, 0.829225763087007570f, - -0.558913798212899770f, - 0.829118577464965980f, -0.559072789985768480f, 0.829011361358604430f, - -0.559231761203128900f, - 0.828904114771864870f, -0.559390711859136140f, 0.828796837708690610f, - -0.559549641947945760f, - 0.828689530173025820f, -0.559708551463714680f, 0.828582192168815790f, - -0.559867440400600210f, - 0.828474823700007130f, -0.560026308752760380f, 0.828367424770547480f, - -0.560185156514354080f, - 0.828259995384385660f, -0.560343983679540860f, 0.828152535545471410f, - -0.560502790242481060f, - 0.828045045257755800f, -0.560661576197336030f, 0.827937524525190870f, - -0.560820341538267430f, - 0.827829973351729920f, -0.560979086259438150f, 0.827722391741327220f, - -0.561137810355011420f, - 0.827614779697938400f, -0.561296513819151470f, 0.827507137225519830f, - -0.561455196646023280f, - 0.827399464328029470f, -0.561613858829792420f, 0.827291761009425810f, - -0.561772500364625340f, - 0.827184027273669130f, -0.561931121244689470f, 0.827076263124720270f, - -0.562089721464152480f, - 0.826968468566541600f, -0.562248301017183150f, 0.826860643603096190f, - -0.562406859897951140f, - 0.826752788238348520f, -0.562565398100626560f, 0.826644902476264320f, - -0.562723915619380400f, - 0.826536986320809960f, -0.562882412448384440f, 0.826429039775953500f, - -0.563040888581811230f, - 0.826321062845663530f, -0.563199344013834090f, 0.826213055533910220f, - -0.563357778738627020f, - 0.826105017844664610f, -0.563516192750364800f, 0.825996949781899080f, - -0.563674586043223070f, - 0.825888851349586780f, -0.563832958611378170f, 0.825780722551702430f, - -0.563991310449006970f, - 0.825672563392221390f, -0.564149641550287680f, 0.825564373875120490f, - -0.564307951909398640f, - 0.825456154004377550f, -0.564466241520519500f, 0.825347903783971380f, - -0.564624510377830120f, - 0.825239623217882250f, -0.564782758475511400f, 0.825131312310091070f, - -0.564940985807745210f, - 0.825022971064580220f, -0.565099192368713980f, 0.824914599485333190f, - -0.565257378152600800f, - 0.824806197576334330f, -0.565415543153589660f, 0.824697765341569470f, - -0.565573687365865330f, - 0.824589302785025290f, -0.565731810783613120f, 0.824480809910689500f, - -0.565889913401019570f, - 0.824372286722551250f, -0.566047995212271450f, 0.824263733224600560f, - -0.566206056211556730f, - 0.824155149420828570f, -0.566364096393063840f, 0.824046535315227760f, - -0.566522115750982100f, - 0.823937890911791370f, -0.566680114279501600f, 0.823829216214513990f, - -0.566838091972813320f, - 0.823720511227391430f, -0.566996048825108680f, 0.823611775954420260f, - -0.567153984830580100f, - 0.823503010399598500f, -0.567311899983420800f, 0.823394214566925080f, - -0.567469794277824510f, - 0.823285388460400110f, -0.567627667707986230f, 0.823176532084024860f, - -0.567785520268101140f, - 0.823067645441801670f, -0.567943351952365560f, 0.822958728537734000f, - -0.568101162754976460f, - 0.822849781375826430f, -0.568258952670131490f, 0.822740803960084420f, - -0.568416721692029280f, - 0.822631796294514990f, -0.568574469814869140f, 0.822522758383125940f, - -0.568732197032851050f, - 0.822413690229926390f, -0.568889903340175860f, 0.822304591838926350f, - -0.569047588731045110f, - 0.822195463214137170f, -0.569205253199661200f, 0.822086304359571090f, - -0.569362896740227220f, - 0.821977115279241550f, -0.569520519346947140f, 0.821867895977163250f, - -0.569678121014025600f, - 0.821758646457351750f, -0.569835701735668000f, 0.821649366723823940f, - -0.569993261506080540f, - 0.821540056780597610f, -0.570150800319470300f, 0.821430716631691870f, - -0.570308318170044900f, - 0.821321346281126740f, -0.570465815052012990f, 0.821211945732923550f, - -0.570623290959583750f, - 0.821102514991104650f, -0.570780745886967260f, 0.820993054059693580f, - -0.570938179828374360f, - 0.820883562942714580f, -0.571095592778016690f, 0.820774041644193650f, - -0.571252984730106660f, - 0.820664490168157460f, -0.571410355678857230f, 0.820554908518633890f, - -0.571567705618482580f, - 0.820445296699652050f, -0.571725034543197120f, 0.820335654715241840f, - -0.571882342447216590f, - 0.820225982569434690f, -0.572039629324757050f, 0.820116280266262820f, - -0.572196895170035580f, - 0.820006547809759680f, -0.572354139977269920f, 0.819896785203959810f, - -0.572511363740678790f, - 0.819786992452898990f, -0.572668566454481160f, 0.819677169560613870f, - -0.572825748112897550f, - 0.819567316531142230f, -0.572982908710148560f, 0.819457433368523280f, - -0.573140048240455950f, - 0.819347520076796900f, -0.573297166698042200f, 0.819237576660004520f, - -0.573454264077130400f, - 0.819127603122188240f, -0.573611340371944610f, 0.819017599467391500f, - -0.573768395576709560f, - 0.818907565699658950f, -0.573925429685650750f, 0.818797501823036010f, - -0.574082442692994470f, - 0.818687407841569680f, -0.574239434592967890f, 0.818577283759307610f, - -0.574396405379798750f, - 0.818467129580298660f, -0.574553355047715760f, 0.818356945308593150f, - -0.574710283590948330f, - 0.818246730948242070f, -0.574867191003726740f, 0.818136486503297730f, - -0.575024077280281710f, - 0.818026211977813440f, -0.575180942414845080f, 0.817915907375843850f, - -0.575337786401649450f, - 0.817805572701444270f, -0.575494609234928120f, 0.817695207958671680f, - -0.575651410908915140f, - 0.817584813151583710f, -0.575808191417845340f, 0.817474388284239240f, - -0.575964950755954220f, - 0.817363933360698460f, -0.576121688917478280f, 0.817253448385022340f, - -0.576278405896654910f, - 0.817142933361272970f, -0.576435101687721830f, 0.817032388293513880f, - -0.576591776284917760f, - 0.816921813185809480f, -0.576748429682482410f, 0.816811208042225290f, - -0.576905061874655960f, - 0.816700572866827850f, -0.577061672855679440f, 0.816589907663684890f, - -0.577218262619794920f, - 0.816479212436865390f, -0.577374831161244880f, 0.816368487190439200f, - -0.577531378474272720f, - 0.816257731928477390f, -0.577687904553122800f, 0.816146946655052270f, - -0.577844409392039850f, - 0.816036131374236810f, -0.578000892985269910f, 0.815925286090105510f, - -0.578157355327059360f, - 0.815814410806733780f, -0.578313796411655590f, 0.815703505528198260f, - -0.578470216233306630f, - 0.815592570258576790f, -0.578626614786261430f, 0.815481605001947770f, - -0.578782992064769690f, - 0.815370609762391290f, -0.578939348063081780f, 0.815259584543988280f, - -0.579095682775449090f, - 0.815148529350820830f, -0.579251996196123550f, 0.815037444186972220f, - -0.579408288319357870f, - 0.814926329056526620f, -0.579564559139405630f, 0.814815183963569440f, - -0.579720808650521450f, - 0.814704008912187080f, -0.579877036846960350f, 0.814592803906467270f, - -0.580033243722978150f, - 0.814481568950498610f, -0.580189429272831680f, 0.814370304048371070f, - -0.580345593490778300f, - 0.814259009204175270f, -0.580501736371076490f, 0.814147684422003360f, - -0.580657857907985300f, - 0.814036329705948410f, -0.580813958095764530f, 0.813924945060104600f, - -0.580970036928674770f, - 0.813813530488567190f, -0.581126094400977620f, 0.813702085995432700f, - -0.581282130506935000f, - 0.813590611584798510f, -0.581438145240810170f, 0.813479107260763220f, - -0.581594138596866930f, - 0.813367573027426570f, -0.581750110569369650f, 0.813256008888889380f, - -0.581906061152583810f, - 0.813144414849253590f, -0.582061990340775440f, 0.813032790912622040f, - -0.582217898128211670f, - 0.812921137083098770f, -0.582373784509160110f, 0.812809453364789270f, - -0.582529649477889320f, - 0.812697739761799490f, -0.582685493028668460f, 0.812585996278237130f, - -0.582841315155767650f, - 0.812474222918210480f, -0.582997115853457700f, 0.812362419685829230f, - -0.583152895116010430f, - 0.812250586585203880f, -0.583308652937698290f, 0.812138723620446480f, - -0.583464389312794320f, - 0.812026830795669730f, -0.583620104235572760f, 0.811914908114987790f, - -0.583775797700308070f, - 0.811802955582515470f, -0.583931469701276180f, 0.811690973202369050f, - -0.584087120232753440f, - 0.811578960978665890f, -0.584242749289016980f, 0.811466918915524250f, - -0.584398356864344600f, - 0.811354847017063730f, -0.584553942953015330f, 0.811242745287404810f, - -0.584709507549308390f, - 0.811130613730669190f, -0.584865050647504490f, 0.811018452350979470f, - -0.585020572241884530f, - 0.810906261152459670f, -0.585176072326730410f, 0.810794040139234730f, - -0.585331550896324940f, - 0.810681789315430780f, -0.585487007944951340f, 0.810569508685174630f, - -0.585642443466894420f, - 0.810457198252594770f, -0.585797857456438860f, 0.810344858021820550f, - -0.585953249907870570f, - 0.810232487996982330f, -0.586108620815476430f, 0.810120088182211600f, - -0.586263970173543590f, - 0.810007658581641140f, -0.586419297976360500f, 0.809895199199404450f, - -0.586574604218216170f, - 0.809782710039636530f, -0.586729888893400390f, 0.809670191106473090f, - -0.586885151996203950f, - 0.809557642404051260f, -0.587040393520917970f, 0.809445063936509170f, - -0.587195613461834800f, - 0.809332455707985950f, -0.587350811813247660f, 0.809219817722621750f, - -0.587505988569450020f, - 0.809107149984558240f, -0.587661143724736660f, 0.808994452497937670f, - -0.587816277273402910f, - 0.808881725266903610f, -0.587971389209745010f, 0.808768968295600850f, - -0.588126479528059850f, - 0.808656181588174980f, -0.588281548222645220f, 0.808543365148773010f, - -0.588436595287799790f, - 0.808430518981542720f, -0.588591620717822890f, 0.808317643090633250f, - -0.588746624507014540f, - 0.808204737480194720f, -0.588901606649675720f, 0.808091802154378370f, - -0.589056567140108460f, - 0.807978837117336310f, -0.589211505972614960f, 0.807865842373222120f, - -0.589366423141498790f, - 0.807752817926190360f, -0.589521318641063940f, 0.807639763780396480f, - -0.589676192465615420f, - 0.807526679939997160f, -0.589831044609458790f, 0.807413566409150190f, - -0.589985875066900920f, - 0.807300423192014450f, -0.590140683832248820f, 0.807187250292749960f, - -0.590295470899810830f, - 0.807074047715517610f, -0.590450236263895810f, 0.806960815464479730f, - -0.590604979918813330f, - 0.806847553543799330f, -0.590759701858874160f, 0.806734261957640860f, - -0.590914402078389520f, - 0.806620940710169650f, -0.591069080571671400f, 0.806507589805552260f, - -0.591223737333032910f, - 0.806394209247956240f, -0.591378372356787580f, 0.806280799041550480f, - -0.591532985637249990f, - 0.806167359190504420f, -0.591687577168735430f, 0.806053889698989060f, - -0.591842146945560140f, - 0.805940390571176280f, -0.591996694962040990f, 0.805826861811239300f, - -0.592151221212495530f, - 0.805713303423352230f, -0.592305725691242290f, 0.805599715411690060f, - -0.592460208392600830f, - 0.805486097780429230f, -0.592614669310891130f, 0.805372450533747060f, - -0.592769108440434070f, - 0.805258773675822210f, -0.592923525775551300f, 0.805145067210834230f, - -0.593077921310565470f, - 0.805031331142963660f, -0.593232295039799800f, 0.804917565476392260f, - -0.593386646957578480f, - 0.804803770215302920f, -0.593540977058226390f, 0.804689945363879500f, - -0.593695285336069190f, - 0.804576090926307110f, -0.593849571785433630f, 0.804462206906771840f, - -0.594003836400646690f, - 0.804348293309460780f, -0.594158079176036800f, 0.804234350138562260f, - -0.594312300105932830f, - 0.804120377398265810f, -0.594466499184664430f, 0.804006375092761520f, - -0.594620676406562240f, - 0.803892343226241260f, -0.594774831765957580f, 0.803778281802897570f, - -0.594928965257182420f, - 0.803664190826924090f, -0.595083076874569960f, 0.803550070302515680f, - -0.595237166612453850f, - 0.803435920233868120f, -0.595391234465168730f, 0.803321740625178580f, - -0.595545280427049790f, - 0.803207531480644940f, -0.595699304492433360f, 0.803093292804466400f, - -0.595853306655656280f, - 0.802979024600843250f, -0.596007286911056530f, 0.802864726873976700f, - -0.596161245252972540f, - 0.802750399628069160f, -0.596315181675743710f, 0.802636042867324150f, - -0.596469096173710360f, - 0.802521656595946430f, -0.596622988741213220f, 0.802407240818141300f, - -0.596776859372594390f, - 0.802292795538115720f, -0.596930708062196500f, 0.802178320760077450f, - -0.597084534804362740f, - 0.802063816488235440f, -0.597238339593437420f, 0.801949282726799770f, - -0.597392122423765710f, - 0.801834719479981310f, -0.597545883289693160f, 0.801720126751992330f, - -0.597699622185566830f, - 0.801605504547046150f, -0.597853339105733910f, 0.801490852869356950f, - -0.598007034044542700f, - 0.801376171723140240f, -0.598160706996342270f, 0.801261461112612540f, - -0.598314357955482600f, - 0.801146721041991360f, -0.598467986916314310f, 0.801031951515495330f, - -0.598621593873188920f, - 0.800917152537344300f, -0.598775178820458720f, 0.800802324111759110f, - -0.598928741752476900f, - 0.800687466242961610f, -0.599082282663597310f, 0.800572578935174860f, - -0.599235801548174570f, - 0.800457662192622820f, -0.599389298400564540f, 0.800342716019530660f, - -0.599542773215123390f, - 0.800227740420124790f, -0.599696225986208310f, 0.800112735398632370f, - -0.599849656708177250f, - 0.799997700959281910f, -0.600003065375388940f, 0.799882637106302810f, - -0.600156451982203240f, - 0.799767543843925680f, -0.600309816522980430f, 0.799652421176382240f, - -0.600463158992081580f, - 0.799537269107905010f, -0.600616479383868970f, 0.799422087642728040f, - -0.600769777692705230f, - 0.799306876785086160f, -0.600923053912954090f, 0.799191636539215210f, - -0.601076308038980160f, - 0.799076366909352350f, -0.601229540065148500f, 0.798961067899735760f, - -0.601382749985825420f, - 0.798845739514604580f, -0.601535937795377730f, 0.798730381758199210f, - -0.601689103488172950f, - 0.798614994634760820f, -0.601842247058580030f, 0.798499578148532120f, - -0.601995368500968020f, - 0.798384132303756380f, -0.602148467809707210f, 0.798268657104678430f, - -0.602301544979168550f, - 0.798153152555543750f, -0.602454600003723750f, 0.798037618660599410f, - -0.602607632877745440f, - 0.797922055424093000f, -0.602760643595607220f, 0.797806462850273570f, - -0.602913632151683030f, - 0.797690840943391160f, -0.603066598540348160f, 0.797575189707696700f, - -0.603219542755978440f, - 0.797459509147442460f, -0.603372464792950260f, 0.797343799266881700f, - -0.603525364645641550f, - 0.797228060070268700f, -0.603678242308430370f, 0.797112291561858920f, - -0.603831097775695880f, - 0.796996493745908750f, -0.603983931041818020f, 0.796880666626675780f, - -0.604136742101177520f, - 0.796764810208418830f, -0.604289530948155960f, 0.796648924495397260f, - -0.604442297577135860f, - 0.796533009491872000f, -0.604595041982500360f, 0.796417065202104980f, - -0.604747764158633410f, - 0.796301091630359110f, -0.604900464099919820f, 0.796185088780898440f, - -0.605053141800745320f, - 0.796069056657987990f, -0.605205797255496500f, 0.795952995265893910f, - -0.605358430458560530f, - 0.795836904608883570f, -0.605511041404325550f, 0.795720784691225090f, - -0.605663630087180380f, - 0.795604635517188070f, -0.605816196501514970f, 0.795488457091042990f, - -0.605968740641719680f, - 0.795372249417061310f, -0.606121262502186120f, 0.795256012499515610f, - -0.606273762077306430f, - 0.795139746342679590f, -0.606426239361473550f, 0.795023450950828050f, - -0.606578694349081290f, - 0.794907126328237010f, -0.606731127034524480f, 0.794790772479183170f, - -0.606883537412198470f, - 0.794674389407944550f, -0.607035925476499650f, 0.794557977118800380f, - -0.607188291221825160f, - 0.794441535616030590f, -0.607340634642572930f, 0.794325064903916520f, - -0.607492955733141550f, - 0.794208564986740640f, -0.607645254487930830f, 0.794092035868785960f, - -0.607797530901341140f, - 0.793975477554337170f, -0.607949784967773630f, 0.793858890047679730f, - -0.608102016681630440f, - 0.793742273353100210f, -0.608254226037314490f, 0.793625627474886300f, - -0.608406413029229150f, - 0.793508952417326660f, -0.608558577651779450f, 0.793392248184711100f, - -0.608710719899370310f, - 0.793275514781330630f, -0.608862839766408200f, 0.793158752211477140f, - -0.609014937247299830f, - 0.793041960479443640f, -0.609167012336453210f, 0.792925139589524260f, - -0.609319065028276820f, - 0.792808289546014120f, -0.609471095317180240f, 0.792691410353209450f, - -0.609623103197573730f, - 0.792574502015407690f, -0.609775088663868430f, 0.792457564536907080f, - -0.609927051710476120f, - 0.792340597922007170f, -0.610078992331809620f, 0.792223602175008310f, - -0.610230910522282620f, - 0.792106577300212390f, -0.610382806276309480f, 0.791989523301921850f, - -0.610534679588305320f, - 0.791872440184440470f, -0.610686530452686280f, 0.791755327952073150f, - -0.610838358863869170f, - 0.791638186609125880f, -0.610990164816271660f, 0.791521016159905220f, - -0.611141948304312570f, - 0.791403816608719500f, -0.611293709322410890f, 0.791286587959877830f, - -0.611445447864987000f, - 0.791169330217690200f, -0.611597163926461910f, 0.791052043386467950f, - -0.611748857501257290f, - 0.790934727470523290f, -0.611900528583796070f, 0.790817382474169770f, - -0.612052177168501470f, - 0.790700008401721610f, -0.612203803249797950f, 0.790582605257494460f, - -0.612355406822110650f, - 0.790465173045804880f, -0.612506987879865570f, 0.790347711770970520f, - -0.612658546417489290f, - 0.790230221437310030f, -0.612810082429409710f, 0.790112702049143300f, - -0.612961595910055170f, - 0.789995153610791090f, -0.613113086853854910f, 0.789877576126575280f, - -0.613264555255239040f, - 0.789759969600819070f, -0.613416001108638590f, 0.789642334037846340f, - -0.613567424408485330f, - 0.789524669441982190f, -0.613718825149211720f, 0.789406975817552930f, - -0.613870203325251330f, - 0.789289253168885650f, -0.614021558931038380f, 0.789171501500308900f, - -0.614172891961007990f, - 0.789053720816151880f, -0.614324202409595950f, 0.788935911120745240f, - -0.614475490271239040f, - 0.788818072418420280f, -0.614626755540375050f, 0.788700204713509660f, - -0.614777998211442080f, - 0.788582308010347120f, -0.614929218278879590f, 0.788464382313267540f, - -0.615080415737127460f, - 0.788346427626606340f, -0.615231590580626820f, 0.788228443954700490f, - -0.615382742803819220f, - 0.788110431301888070f, -0.615533872401147320f, 0.787992389672507950f, - -0.615684979367054570f, - 0.787874319070900220f, -0.615836063695985090f, 0.787756219501406060f, - -0.615987125382383760f, - 0.787638090968367450f, -0.616138164420696910f, 0.787519933476127810f, - -0.616289180805370980f, - 0.787401747029031430f, -0.616440174530853650f, 0.787283531631423620f, - -0.616591145591593110f, - 0.787165287287651010f, -0.616742093982038720f, 0.787047014002060790f, - -0.616893019696640680f, - 0.786928711779001810f, -0.617043922729849760f, 0.786810380622823490f, - -0.617194803076117630f, - 0.786692020537876790f, -0.617345660729896830f, 0.786573631528513230f, - -0.617496495685640910f, - 0.786455213599085770f, -0.617647307937803870f, 0.786336766753948260f, - -0.617798097480841020f, - 0.786218290997455660f, -0.617948864309208150f, 0.786099786333963930f, - -0.618099608417362000f, - 0.785981252767830150f, -0.618250329799760250f, 0.785862690303412600f, - -0.618401028450860980f, - 0.785744098945070360f, -0.618551704365123740f, 0.785625478697163700f, - -0.618702357537008530f, - 0.785506829564053930f, -0.618852987960976320f, 0.785388151550103550f, - -0.619003595631488660f, - 0.785269444659675850f, -0.619154180543008410f, 0.785150708897135560f, - -0.619304742689998690f, - 0.785031944266848080f, -0.619455282066924020f, 0.784913150773180020f, - -0.619605798668249270f, - 0.784794328420499230f, -0.619756292488440660f, 0.784675477213174320f, - -0.619906763521964720f, - 0.784556597155575240f, -0.620057211763289100f, 0.784437688252072830f, - -0.620207637206882430f, - 0.784318750507038920f, -0.620358039847213720f, 0.784199783924846570f, - -0.620508419678753360f, - 0.784080788509869950f, -0.620658776695972140f, 0.783961764266484120f, - -0.620809110893341900f, - 0.783842711199065230f, -0.620959422265335180f, 0.783723629311990470f, - -0.621109710806425630f, - 0.783604518609638200f, -0.621259976511087550f, 0.783485379096387820f, - -0.621410219373796150f, - 0.783366210776619720f, -0.621560439389027160f, 0.783247013654715380f, - -0.621710636551257690f, - 0.783127787735057310f, -0.621860810854965360f, 0.783008533022029110f, - -0.622010962294628600f, - 0.782889249520015480f, -0.622161090864726820f, 0.782769937233402050f, - -0.622311196559740320f, - 0.782650596166575730f, -0.622461279374149970f, 0.782531226323924240f, - -0.622611339302437730f, - 0.782411827709836530f, -0.622761376339086350f, 0.782292400328702400f, - -0.622911390478579460f, - 0.782172944184913010f, -0.623061381715401260f, 0.782053459282860300f, - -0.623211350044037270f, - 0.781933945626937630f, -0.623361295458973230f, 0.781814403221538830f, - -0.623511217954696440f, - 0.781694832071059390f, -0.623661117525694530f, 0.781575232179895550f, - -0.623810994166456130f, - 0.781455603552444590f, -0.623960847871470660f, 0.781335946193104870f, - -0.624110678635228510f, - 0.781216260106276090f, -0.624260486452220650f, 0.781096545296358520f, - -0.624410271316939270f, - 0.780976801767753750f, -0.624560033223877210f, 0.780857029524864580f, - -0.624709772167528100f, - 0.780737228572094490f, -0.624859488142386340f, 0.780617398913848400f, - -0.625009181142947460f, - 0.780497540554531910f, -0.625158851163707620f, 0.780377653498552040f, - -0.625308498199164010f, - 0.780257737750316590f, -0.625458122243814360f, 0.780137793314234610f, - -0.625607723292157410f, - 0.780017820194715990f, -0.625757301338692900f, 0.779897818396172000f, - -0.625906856377921090f, - 0.779777787923014550f, -0.626056388404343520f, 0.779657728779656890f, - -0.626205897412462130f, - 0.779537640970513260f, -0.626355383396779990f, 0.779417524499998900f, - -0.626504846351800810f, - 0.779297379372530300f, -0.626654286272029350f, 0.779177205592524680f, - -0.626803703151971200f, - 0.779057003164400630f, -0.626953096986132660f, 0.778936772092577500f, - -0.627102467769020900f, - 0.778816512381475980f, -0.627251815495144080f, 0.778696224035517530f, - -0.627401140159011050f, - 0.778575907059125050f, -0.627550441755131530f, 0.778455561456721900f, - -0.627699720278016240f, - 0.778335187232733210f, -0.627848975722176460f, 0.778214784391584540f, - -0.627998208082124700f, - 0.778094352937702790f, -0.628147417352374000f, 0.777973892875516100f, - -0.628296603527438320f, - 0.777853404209453150f, -0.628445766601832710f, 0.777732886943944050f, - -0.628594906570072550f, - 0.777612341083420030f, -0.628744023426674680f, 0.777491766632313010f, - -0.628893117166156480f, - 0.777371163595056310f, -0.629042187783036000f, 0.777250531976084070f, - -0.629191235271832290f, - 0.777129871779831620f, -0.629340259627065630f, 0.777009183010735290f, - -0.629489260843256630f, - 0.776888465673232440f, -0.629638238914926980f, 0.776767719771761510f, - -0.629787193836599200f, - 0.776646945310762060f, -0.629936125602796440f, 0.776526142294674430f, - -0.630085034208043180f, - 0.776405310727940390f, -0.630233919646864370f, 0.776284450615002510f, - -0.630382781913785940f, - 0.776163561960304340f, -0.630531621003334600f, 0.776042644768290770f, - -0.630680436910037940f, - 0.775921699043407690f, -0.630829229628424470f, 0.775800724790101650f, - -0.630977999153023550f, - 0.775679722012820650f, -0.631126745478365340f, 0.775558690716013580f, - -0.631275468598980760f, - 0.775437630904130540f, -0.631424168509401860f, 0.775316542581622530f, - -0.631572845204161020f, - 0.775195425752941420f, -0.631721498677792260f, 0.775074280422540450f, - -0.631870128924829850f, - 0.774953106594873930f, -0.632018735939809060f, 0.774831904274396850f, - -0.632167319717265920f, - 0.774710673465565550f, -0.632315880251737570f, 0.774589414172837550f, - -0.632464417537761840f, - 0.774468126400670860f, -0.632612931569877410f, 0.774346810153525130f, - -0.632761422342624000f, - 0.774225465435860680f, -0.632909889850541750f, 0.774104092252139050f, - -0.633058334088172140f, - 0.773982690606822900f, -0.633206755050057190f, 0.773861260504375540f, - -0.633355152730739950f, - 0.773739801949261840f, -0.633503527124764320f, 0.773618314945947460f, - -0.633651878226674900f, - 0.773496799498899050f, -0.633800206031017280f, 0.773375255612584470f, - -0.633948510532337810f, - 0.773253683291472590f, -0.634096791725183740f, 0.773132082540033070f, - -0.634245049604103330f, - 0.773010453362736990f, -0.634393284163645490f, 0.772888795764056220f, - -0.634541495398360020f, - 0.772767109748463850f, -0.634689683302797740f, 0.772645395320433860f, - -0.634837847871509990f, - 0.772523652484441330f, -0.634985989099049460f, 0.772401881244962450f, - -0.635134106979969190f, - 0.772280081606474320f, -0.635282201508823420f, 0.772158253573455240f, - -0.635430272680167160f, - 0.772036397150384520f, -0.635578320488556110f, 0.771914512341742350f, - -0.635726344928547070f, - 0.771792599152010150f, -0.635874345994697720f, 0.771670657585670330f, - -0.636022323681566300f, - 0.771548687647206300f, -0.636170277983712170f, 0.771426689341102590f, - -0.636318208895695460f, - 0.771304662671844830f, -0.636466116412077180f, 0.771182607643919330f, - -0.636614000527419120f, - 0.771060524261813820f, -0.636761861236284200f, 0.770938412530016940f, - -0.636909698533235870f, - 0.770816272453018540f, -0.637057512412838590f, 0.770694104035309140f, - -0.637205302869657600f, - 0.770571907281380810f, -0.637353069898259130f, 0.770449682195725960f, - -0.637500813493210190f, - 0.770327428782838890f, -0.637648533649078810f, 0.770205147047214210f, - -0.637796230360433540f, - 0.770082836993347900f, -0.637943903621844060f, 0.769960498625737230f, - -0.638091553427880820f, - 0.769838131948879840f, -0.638239179773115280f, 0.769715736967275130f, - -0.638386782652119570f, - 0.769593313685422940f, -0.638534362059466790f, 0.769470862107824670f, - -0.638681917989730730f, - 0.769348382238982280f, -0.638829450437486290f, 0.769225874083399260f, - -0.638976959397309140f, - 0.769103337645579700f, -0.639124444863775730f, 0.768980772930028870f, - -0.639271906831463510f, - 0.768858179941253270f, -0.639419345294950700f, 0.768735558683760310f, - -0.639566760248816310f, - 0.768612909162058380f, -0.639714151687640450f, 0.768490231380656860f, - -0.639861519606003900f, - 0.768367525344066270f, -0.640008863998488440f, 0.768244791056798330f, - -0.640156184859676510f, - 0.768122028523365420f, -0.640303482184151670f, 0.767999237748281270f, - -0.640450755966498140f, - 0.767876418736060610f, -0.640598006201301030f, 0.767753571491219030f, - -0.640745232883146440f, - 0.767630696018273380f, -0.640892436006621380f, 0.767507792321741270f, - -0.641039615566313390f, - 0.767384860406141730f, -0.641186771556811250f, 0.767261900275994500f, - -0.641333903972704290f, - 0.767138911935820400f, -0.641481012808583160f, 0.767015895390141480f, - -0.641628098059038750f, - 0.766892850643480670f, -0.641775159718663500f, 0.766769777700361920f, - -0.641922197782050170f, - 0.766646676565310380f, -0.642069212243792540f, 0.766523547242852210f, - -0.642216203098485370f, - 0.766400389737514230f, -0.642363170340724320f, 0.766277204053824710f, - -0.642510113965105710f, - 0.766153990196312920f, -0.642657033966226860f, 0.766030748169509000f, - -0.642803930338685990f, - 0.765907477977944340f, -0.642950803077082080f, 0.765784179626150970f, - -0.643097652176015110f, - 0.765660853118662500f, -0.643244477630085850f, 0.765537498460013070f, - -0.643391279433895850f, - 0.765414115654738270f, -0.643538057582047740f, 0.765290704707374370f, - -0.643684812069144850f, - 0.765167265622458960f, -0.643831542889791390f, 0.765043798404530520f, - -0.643978250038592660f, - 0.764920303058128410f, -0.644124933510154540f, 0.764796779587793460f, - -0.644271593299083790f, - 0.764673227998067140f, -0.644418229399988380f, 0.764549648293492150f, - -0.644564841807476640f, - 0.764426040478612070f, -0.644711430516158310f, 0.764302404557971720f, - -0.644857995520643710f, - 0.764178740536116670f, -0.645004536815543930f, 0.764055048417593970f, - -0.645151054395471160f, - 0.763931328206951090f, -0.645297548255038380f, 0.763807579908737160f, - -0.645444018388859230f, - 0.763683803527501870f, -0.645590464791548690f, 0.763559999067796150f, - -0.645736887457722290f, - 0.763436166534172010f, -0.645883286381996320f, 0.763312305931182380f, - -0.646029661558988330f, - 0.763188417263381270f, -0.646176012983316280f, 0.763064500535323710f, - -0.646322340649599480f, - 0.762940555751565720f, -0.646468644552457780f, 0.762816582916664430f, - -0.646614924686512050f, - 0.762692582035177980f, -0.646761181046383920f, 0.762568553111665380f, - -0.646907413626696020f, - 0.762444496150687210f, -0.647053622422071540f, 0.762320411156804270f, - -0.647199807427135230f, - 0.762196298134578900f, -0.647345968636512060f, 0.762072157088574560f, - -0.647492106044828100f, - 0.761947988023355390f, -0.647638219646710310f, 0.761823790943486960f, - -0.647784309436786440f, - 0.761699565853535380f, -0.647930375409685340f, 0.761575312758068000f, - -0.648076417560036530f, - 0.761451031661653620f, -0.648222435882470420f, 0.761326722568861360f, - -0.648368430371618290f, - 0.761202385484261780f, -0.648514401022112440f, 0.761078020412426560f, - -0.648660347828585840f, - 0.760953627357928150f, -0.648806270785672550f, 0.760829206325340010f, - -0.648952169888007300f, - 0.760704757319236920f, -0.649098045130225950f, 0.760580280344194450f, - -0.649243896506964900f, - 0.760455775404789260f, -0.649389724012861660f, 0.760331242505599030f, - -0.649535527642554730f, - 0.760206681651202420f, -0.649681307390683190f, 0.760082092846179340f, - -0.649827063251887100f, - 0.759957476095110330f, -0.649972795220807530f, 0.759832831402577400f, - -0.650118503292086200f, - 0.759708158773163440f, -0.650264187460365850f, 0.759583458211452010f, - -0.650409847720290310f, - 0.759458729722028210f, -0.650555484066503880f, 0.759333973309477940f, - -0.650701096493652040f, - 0.759209188978388070f, -0.650846684996380880f, 0.759084376733346610f, - -0.650992249569337660f, - 0.758959536578942440f, -0.651137790207170330f, 0.758834668519765660f, - -0.651283306904527740f, - 0.758709772560407390f, -0.651428799656059820f, 0.758584848705459610f, - -0.651574268456416970f, - 0.758459896959515430f, -0.651719713300250910f, 0.758334917327168960f, - -0.651865134182213920f, - 0.758209909813015280f, -0.652010531096959500f, 0.758084874421650730f, - -0.652155904039141590f, - 0.757959811157672300f, -0.652301253003415460f, 0.757834720025678310f, - -0.652446577984436730f, - 0.757709601030268080f, -0.652591878976862440f, 0.757584454176041810f, - -0.652737155975350310f, - 0.757459279467600720f, -0.652882408974558850f, 0.757334076909547130f, - -0.653027637969147530f, - 0.757208846506484570f, -0.653172842953776760f, 0.757083588263017140f, - -0.653318023923107670f, - 0.756958302183750490f, -0.653463180871802330f, 0.756832988273290820f, - -0.653608313794523890f, - 0.756707646536245670f, -0.653753422685936060f, 0.756582276977223470f, - -0.653898507540703780f, - 0.756456879600833740f, -0.654043568353492640f, 0.756331454411686920f, - -0.654188605118969040f, - 0.756206001414394540f, -0.654333617831800440f, 0.756080520613569120f, - -0.654478606486655350f, - 0.755955012013824420f, -0.654623571078202680f, 0.755829475619774760f, - -0.654768511601112600f, - 0.755703911436035880f, -0.654913428050056030f, 0.755578319467224540f, - -0.655058320419704910f, - 0.755452699717958250f, -0.655203188704731820f, 0.755327052192855670f, - -0.655348032899810470f, - 0.755201376896536550f, -0.655492852999615350f, 0.755075673833621620f, - -0.655637648998821820f, - 0.754949943008732640f, -0.655782420892106030f, 0.754824184426492350f, - -0.655927168674145360f, - 0.754698398091524500f, -0.656071892339617600f, 0.754572584008453840f, - -0.656216591883201920f, - 0.754446742181906440f, -0.656361267299578000f, 0.754320872616508820f, - -0.656505918583426550f, - 0.754194975316889170f, -0.656650545729428940f, 0.754069050287676120f, - -0.656795148732268070f, - 0.753943097533499640f, -0.656939727586627110f, 0.753817117058990790f, - -0.657084282287190180f, - 0.753691108868781210f, -0.657228812828642540f, 0.753565072967504300f, - -0.657373319205670210f, - 0.753439009359793580f, -0.657517801412960120f, 0.753312918050284330f, - -0.657662259445200070f, - 0.753186799043612520f, -0.657806693297078640f, 0.753060652344415100f, - -0.657951102963285520f, - 0.752934477957330150f, -0.658095488438511180f, 0.752808275886996950f, - -0.658239849717446870f, - 0.752682046138055340f, -0.658384186794785050f, 0.752555788715146390f, - -0.658528499665218650f, - 0.752429503622912390f, -0.658672788323441890f, 0.752303190865996400f, - -0.658817052764149480f, - 0.752176850449042810f, -0.658961292982037320f, 0.752050482376696360f, - -0.659105508971802090f, - 0.751924086653603550f, -0.659249700728141490f, 0.751797663284411550f, - -0.659393868245753860f, - 0.751671212273768430f, -0.659538011519338660f, 0.751544733626323680f, - -0.659682130543596150f, - 0.751418227346727470f, -0.659826225313227320f, 0.751291693439630870f, - -0.659970295822934540f, - 0.751165131909686480f, -0.660114342067420480f, 0.751038542761547360f, - -0.660258364041389050f, - 0.750911925999867890f, -0.660402361739545030f, 0.750785281629303690f, - -0.660546335156593890f, - 0.750658609654510700f, -0.660690284287242300f, 0.750531910080146410f, - -0.660834209126197610f, - 0.750405182910869330f, -0.660978109668168060f, 0.750278428151338720f, - -0.661121985907862860f, - 0.750151645806215070f, -0.661265837839992270f, 0.750024835880159780f, - -0.661409665459266940f, - 0.749897998377835330f, -0.661553468760398890f, 0.749771133303905100f, - -0.661697247738101010f, - 0.749644240663033480f, -0.661841002387086870f, 0.749517320459886170f, - -0.661984732702070920f, - 0.749390372699129560f, -0.662128438677768720f, 0.749263397385431130f, - -0.662272120308896590f, - 0.749136394523459370f, -0.662415777590171780f, 0.749009364117883880f, - -0.662559410516312290f, - 0.748882306173375150f, -0.662703019082037440f, 0.748755220694604760f, - -0.662846603282066900f, - 0.748628107686245440f, -0.662990163111121470f, 0.748500967152970430f, - -0.663133698563923010f, - 0.748373799099454560f, -0.663277209635194100f, 0.748246603530373420f, - -0.663420696319658280f, - 0.748119380450403600f, -0.663564158612039770f, 0.747992129864222700f, - -0.663707596507064010f, - 0.747864851776509410f, -0.663851009999457340f, 0.747737546191943330f, - -0.663994399083946640f, - 0.747610213115205150f, -0.664137763755260010f, 0.747482852550976570f, - -0.664281104008126230f, - 0.747355464503940190f, -0.664424419837275180f, 0.747228048978779920f, - -0.664567711237437520f, - 0.747100605980180130f, -0.664710978203344790f, 0.746973135512826850f, - -0.664854220729729660f, - 0.746845637581406540f, -0.664997438811325340f, 0.746718112190607130f, - -0.665140632442866140f, - 0.746590559345117310f, -0.665283801619087180f, 0.746462979049626770f, - -0.665426946334724660f, - 0.746335371308826320f, -0.665570066584515450f, 0.746207736127407760f, - -0.665713162363197550f, - 0.746080073510063780f, -0.665856233665509720f, 0.745952383461488290f, - -0.665999280486191500f, - 0.745824665986376090f, -0.666142302819983540f, 0.745696921089422760f, - -0.666285300661627280f, - 0.745569148775325430f, -0.666428274005865240f, 0.745441349048781680f, - -0.666571222847440640f, - 0.745313521914490520f, -0.666714147181097670f, 0.745185667377151640f, - -0.666857047001581220f, - 0.745057785441466060f, -0.666999922303637470f, 0.744929876112135350f, - -0.667142773082013310f, - 0.744801939393862630f, -0.667285599331456370f, 0.744673975291351710f, - -0.667428401046715520f, - 0.744545983809307370f, -0.667571178222540310f, 0.744417964952435620f, - -0.667713930853681030f, - 0.744289918725443260f, -0.667856658934889320f, 0.744161845133038180f, - -0.667999362460917400f, - 0.744033744179929290f, -0.668142041426518450f, 0.743905615870826490f, - -0.668284695826446670f, - 0.743777460210440890f, -0.668427325655456820f, 0.743649277203484060f, - -0.668569930908304970f, - 0.743521066854669120f, -0.668712511579747980f, 0.743392829168709970f, - -0.668855067664543610f, - 0.743264564150321600f, -0.668997599157450270f, 0.743136271804219820f, - -0.669140106053227600f, - 0.743007952135121720f, -0.669282588346636010f, 0.742879605147745200f, - -0.669425046032436910f, - 0.742751230846809050f, -0.669567479105392490f, 0.742622829237033490f, - -0.669709887560265840f, - 0.742494400323139180f, -0.669852271391821020f, 0.742365944109848460f, - -0.669994630594823000f, - 0.742237460601884000f, -0.670136965164037650f, 0.742108949803969910f, - -0.670279275094231800f, - 0.741980411720831070f, -0.670421560380173090f, 0.741851846357193480f, - -0.670563821016630040f, - 0.741723253717784140f, -0.670706056998372160f, 0.741594633807331150f, - -0.670848268320169640f, - 0.741465986630563290f, -0.670990454976794220f, 0.741337312192210660f, - -0.671132616963017740f, - 0.741208610497004260f, -0.671274754273613490f, 0.741079881549676080f, - -0.671416866903355450f, - 0.740951125354959110f, -0.671558954847018330f, 0.740822341917587330f, - -0.671701018099378320f, - 0.740693531242295760f, -0.671843056655211930f, 0.740564693333820250f, - -0.671985070509296900f, - 0.740435828196898020f, -0.672127059656411730f, 0.740306935836266940f, - -0.672269024091335930f, - 0.740178016256666240f, -0.672410963808849790f, 0.740049069462835550f, - -0.672552878803734710f, - 0.739920095459516200f, -0.672694769070772860f, 0.739791094251449950f, - -0.672836634604747300f, - 0.739662065843380010f, -0.672978475400442090f, 0.739533010240050250f, - -0.673120291452642070f, - 0.739403927446205760f, -0.673262082756132970f, 0.739274817466592520f, - -0.673403849305701740f, - 0.739145680305957510f, -0.673545591096136100f, 0.739016515969048720f, - -0.673687308122224330f, - 0.738887324460615110f, -0.673829000378756040f, 0.738758105785406900f, - -0.673970667860521620f, - 0.738628859948174840f, -0.674112310562312360f, 0.738499586953671130f, - -0.674253928478920410f, - 0.738370286806648620f, -0.674395521605139050f, 0.738240959511861310f, - -0.674537089935762000f, - 0.738111605074064260f, -0.674678633465584540f, 0.737982223498013570f, - -0.674820152189402170f, - 0.737852814788465980f, -0.674961646102011930f, 0.737723378950179700f, - -0.675103115198211420f, - 0.737593915987913570f, -0.675244559472799270f, 0.737464425906427580f, - -0.675385978920574840f, - 0.737334908710482910f, -0.675527373536338520f, 0.737205364404841190f, - -0.675668743314891910f, - 0.737075792994265730f, -0.675810088251036940f, 0.736946194483520280f, - -0.675951408339577010f, - 0.736816568877369900f, -0.676092703575315920f, 0.736686916180580460f, - -0.676233973953058950f, - 0.736557236397919150f, -0.676375219467611590f, 0.736427529534153690f, - -0.676516440113781090f, - 0.736297795594053170f, -0.676657635886374950f, 0.736168034582387330f, - -0.676798806780201770f, - 0.736038246503927350f, -0.676939952790071130f, 0.735908431363445190f, - -0.677081073910793530f, - 0.735778589165713590f, -0.677222170137180330f, 0.735648719915506510f, - -0.677363241464043920f, - 0.735518823617598900f, -0.677504287886197430f, 0.735388900276766730f, - -0.677645309398454910f, - 0.735258949897786840f, -0.677786305995631500f, 0.735128972485437180f, - -0.677927277672543020f, - 0.734998968044496710f, -0.678068224424006600f, 0.734868936579745170f, - -0.678209146244839860f, - 0.734738878095963500f, -0.678350043129861470f, 0.734608792597933550f, - -0.678490915073891140f, - 0.734478680090438370f, -0.678631762071749360f, 0.734348540578261600f, - -0.678772584118257690f, - 0.734218374066188280f, -0.678913381208238410f, 0.734088180559004040f, - -0.679054153336514870f, - 0.733957960061495940f, -0.679194900497911200f, 0.733827712578451700f, - -0.679335622687252560f, - 0.733697438114660370f, -0.679476319899364970f, 0.733567136674911360f, - -0.679616992129075560f, - 0.733436808263995710f, -0.679757639371212030f, 0.733306452886705260f, - -0.679898261620603290f, - 0.733176070547832740f, -0.680038858872078930f, 0.733045661252172080f, - -0.680179431120469750f, - 0.732915225004517780f, -0.680319978360607200f, 0.732784761809665790f, - -0.680460500587323880f, - 0.732654271672412820f, -0.680600997795453020f, 0.732523754597556700f, - -0.680741469979829090f, - 0.732393210589896040f, -0.680881917135287230f, 0.732262639654230770f, - -0.681022339256663670f, - 0.732132041795361290f, -0.681162736338795430f, 0.732001417018089630f, - -0.681303108376520530f, - 0.731870765327218290f, -0.681443455364677870f, 0.731740086727550980f, - -0.681583777298107480f, - 0.731609381223892630f, -0.681724074171649710f, 0.731478648821048520f, - -0.681864345980146670f, - 0.731347889523825570f, -0.682004592718440830f, 0.731217103337031270f, - -0.682144814381375640f, - 0.731086290265474340f, -0.682285010963795570f, 0.730955450313964360f, - -0.682425182460546060f, - 0.730824583487312160f, -0.682565328866473250f, 0.730693689790329000f, - -0.682705450176424590f, - 0.730562769227827590f, -0.682845546385248080f, 0.730431821804621520f, - -0.682985617487792740f, - 0.730300847525525490f, -0.683125663478908680f, 0.730169846395354870f, - -0.683265684353446700f, - 0.730038818418926260f, -0.683405680106258680f, 0.729907763601057140f, - -0.683545650732197530f, - 0.729776681946566090f, -0.683685596226116580f, 0.729645573460272480f, - -0.683825516582870720f, - 0.729514438146997010f, -0.683965411797315400f, 0.729383276011561050f, - -0.684105281864307080f, - 0.729252087058786970f, -0.684245126778703080f, 0.729120871293498230f, - -0.684384946535361750f, - 0.728989628720519420f, -0.684524741129142300f, 0.728858359344675800f, - -0.684664510554904960f, - 0.728727063170793830f, -0.684804254807510620f, 0.728595740203700770f, - -0.684943973881821490f, - 0.728464390448225200f, -0.685083667772700360f, 0.728333013909196360f, - -0.685223336475011210f, - 0.728201610591444610f, -0.685362979983618730f, 0.728070180499801210f, - -0.685502598293388550f, - 0.727938723639098620f, -0.685642191399187470f, 0.727807240014169960f, - -0.685781759295883030f, - 0.727675729629849610f, -0.685921301978343560f, 0.727544192490972800f, - -0.686060819441438710f, - 0.727412628602375770f, -0.686200311680038590f, 0.727281037968895870f, - -0.686339778689014520f, - 0.727149420595371020f, -0.686479220463238950f, 0.727017776486640680f, - -0.686618636997584630f, - 0.726886105647544970f, -0.686758028286925890f, 0.726754408082925020f, - -0.686897394326137610f, - 0.726622683797622850f, -0.687036735110095660f, 0.726490932796481910f, - -0.687176050633676820f, - 0.726359155084346010f, -0.687315340891759050f, 0.726227350666060370f, - -0.687454605879221030f, - 0.726095519546471000f, -0.687593845590942170f, 0.725963661730424930f, - -0.687733060021803230f, - 0.725831777222770370f, -0.687872249166685550f, 0.725699866028356120f, - -0.688011413020471640f, - 0.725567928152032300f, -0.688150551578044830f, 0.725435963598649810f, - -0.688289664834289330f, - 0.725303972373060770f, -0.688428752784090440f, 0.725171954480117950f, - -0.688567815422334250f, - 0.725039909924675370f, -0.688706852743907750f, 0.724907838711587820f, - -0.688845864743699020f, - 0.724775740845711280f, -0.688984851416597040f, 0.724643616331902550f, - -0.689123812757491570f, - 0.724511465175019630f, -0.689262748761273470f, 0.724379287379921190f, - -0.689401659422834270f, - 0.724247082951467000f, -0.689540544737066830f, 0.724114851894517850f, - -0.689679404698864800f, - 0.723982594213935520f, -0.689818239303122470f, 0.723850309914582880f, - -0.689957048544735390f, - 0.723717999001323500f, -0.690095832418599950f, 0.723585661479022150f, - -0.690234590919613370f, - 0.723453297352544380f, -0.690373324042674040f, 0.723320906626756970f, - -0.690512031782681060f, - 0.723188489306527460f, -0.690650714134534600f, 0.723056045396724410f, - -0.690789371093135650f, - 0.722923574902217700f, -0.690928002653386160f, 0.722791077827877550f, - -0.691066608810189220f, - 0.722658554178575610f, -0.691205189558448450f, 0.722526003959184540f, - -0.691343744893068710f, - 0.722393427174577550f, -0.691482274808955850f, 0.722260823829629310f, - -0.691620779301016290f, - 0.722128193929215350f, -0.691759258364157750f, 0.721995537478211880f, - -0.691897711993288760f, - 0.721862854481496340f, -0.692036140183318720f, 0.721730144943947160f, - -0.692174542929158140f, - 0.721597408870443770f, -0.692312920225718220f, 0.721464646265866370f, - -0.692451272067911130f, - 0.721331857135096290f, -0.692589598450650380f, 0.721199041483015720f, - -0.692727899368849820f, - 0.721066199314508110f, -0.692866174817424630f, 0.720933330634457530f, - -0.693004424791290870f, - 0.720800435447749190f, -0.693142649285365400f, 0.720667513759269520f, - -0.693280848294566040f, - 0.720534565573905270f, -0.693419021813811760f, 0.720401590896544760f, - -0.693557169838022290f, - 0.720268589732077190f, -0.693695292362118240f, 0.720135562085392420f, - -0.693833389381021350f, - 0.720002507961381650f, -0.693971460889654000f, 0.719869427364936860f, - -0.694109506882939820f, - 0.719736320300951030f, -0.694247527355803310f, 0.719603186774318120f, - -0.694385522303169740f, - 0.719470026789932990f, -0.694523491719965520f, 0.719336840352691740f, - -0.694661435601117820f, - 0.719203627467491220f, -0.694799353941554900f, 0.719070388139229190f, - -0.694937246736205830f, - 0.718937122372804490f, -0.695075113980000880f, 0.718803830173116890f, - -0.695212955667870780f, - 0.718670511545067230f, -0.695350771794747690f, 0.718537166493557370f, - -0.695488562355564440f, - 0.718403795023489830f, -0.695626327345254870f, 0.718270397139768260f, - -0.695764066758753690f, - 0.718136972847297490f, -0.695901780590996830f, 0.718003522150983180f, - -0.696039468836920690f, - 0.717870045055731710f, -0.696177131491462990f, 0.717736541566450950f, - -0.696314768549562090f, - 0.717603011688049080f, -0.696452380006157830f, 0.717469455425435830f, - -0.696589965856190370f, - 0.717335872783521730f, -0.696727526094601200f, 0.717202263767218070f, - -0.696865060716332470f, - 0.717068628381437480f, -0.697002569716327460f, 0.716934966631093130f, - -0.697140053089530420f, - 0.716801278521099540f, -0.697277510830886520f, 0.716667564056371890f, - -0.697414942935341790f, - 0.716533823241826680f, -0.697552349397843160f, 0.716400056082381000f, - -0.697689730213338800f, - 0.716266262582953120f, -0.697827085376777290f, 0.716132442748462330f, - -0.697964414883108670f, - 0.715998596583828690f, -0.698101718727283770f, 0.715864724093973500f, - -0.698238996904254280f, - 0.715730825283818590f, -0.698376249408972920f, 0.715596900158287470f, - -0.698513476236393040f, - 0.715462948722303760f, -0.698650677381469460f, 0.715328970980792620f, - -0.698787852839157670f, - 0.715194966938680120f, -0.698925002604414150f, 0.715060936600893090f, - -0.699062126672196140f, - 0.714926879972359490f, -0.699199225037462120f, 0.714792797058008240f, - -0.699336297695171140f, - 0.714658687862769090f, -0.699473344640283770f, 0.714524552391572860f, - -0.699610365867761040f, - 0.714390390649351390f, -0.699747361372564990f, 0.714256202641037510f, - -0.699884331149658760f, - 0.714121988371564820f, -0.700021275194006250f, 0.713987747845867830f, - -0.700158193500572730f, - 0.713853481068882470f, -0.700295086064323780f, 0.713719188045545240f, - -0.700431952880226420f, - 0.713584868780793640f, -0.700568793943248340f, 0.713450523279566260f, - -0.700705609248358450f, - 0.713316151546802610f, -0.700842398790526120f, 0.713181753587443180f, - -0.700979162564722370f, - 0.713047329406429340f, -0.701115900565918660f, 0.712912879008703480f, - -0.701252612789087460f, - 0.712778402399208980f, -0.701389299229202230f, 0.712643899582890210f, - -0.701525959881237340f, - 0.712509370564692320f, -0.701662594740168450f, 0.712374815349561710f, - -0.701799203800971720f, - 0.712240233942445510f, -0.701935787058624360f, 0.712105626348291890f, - -0.702072344508104630f, - 0.711970992572050100f, -0.702208876144391870f, 0.711836332618670080f, - -0.702345381962465880f, - 0.711701646493102970f, -0.702481861957308000f, 0.711566934200300700f, - -0.702618316123900130f, - 0.711432195745216430f, -0.702754744457225300f, 0.711297431132803970f, - -0.702891146952267400f, - 0.711162640368018350f, -0.703027523604011220f, 0.711027823455815280f, - -0.703163874407442770f, - 0.710892980401151680f, -0.703300199357548730f, 0.710758111208985350f, - -0.703436498449316660f, - 0.710623215884275020f, -0.703572771677735580f, 0.710488294431980470f, - -0.703709019037794810f, - 0.710353346857062420f, -0.703845240524484940f, 0.710218373164482220f, - -0.703981436132797620f, - 0.710083373359202800f, -0.704117605857725310f, 0.709948347446187400f, - -0.704253749694261470f, - 0.709813295430400840f, -0.704389867637400410f, 0.709678217316808580f, - -0.704525959682137380f, - 0.709543113110376770f, -0.704662025823468820f, 0.709407982816072980f, - -0.704798066056391950f, - 0.709272826438865690f, -0.704934080375904880f, 0.709137643983724030f, - -0.705070068777006840f, - 0.709002435455618250f, -0.705206031254697830f, 0.708867200859519820f, - -0.705341967803978840f, - 0.708731940200400650f, -0.705477878419852100f, 0.708596653483234080f, - -0.705613763097320490f, - 0.708461340712994160f, -0.705749621831387790f, 0.708326001894655890f, - -0.705885454617058980f, - 0.708190637033195400f, -0.706021261449339740f, 0.708055246133589500f, - -0.706157042323237060f, - 0.707919829200816310f, -0.706292797233758480f, 0.707784386239854620f, - -0.706428526175912790f, - 0.707648917255684350f, -0.706564229144709510f, 0.707513422253286280f, - -0.706699906135159430f, - 0.707377901237642100f, -0.706835557142273750f, 0.707242354213734710f, - -0.706971182161065360f, - 0.707106781186547570f, -0.707106781186547460f, 0.706971182161065360f, - -0.707242354213734600f, - 0.706835557142273860f, -0.707377901237642100f, 0.706699906135159430f, - -0.707513422253286170f, - 0.706564229144709620f, -0.707648917255684350f, 0.706428526175912790f, - -0.707784386239854620f, - 0.706292797233758480f, -0.707919829200816310f, 0.706157042323237060f, - -0.708055246133589500f, - 0.706021261449339740f, -0.708190637033195290f, 0.705885454617058980f, - -0.708326001894655780f, - 0.705749621831387790f, -0.708461340712994050f, 0.705613763097320490f, - -0.708596653483234080f, - 0.705477878419852210f, -0.708731940200400650f, 0.705341967803978950f, - -0.708867200859519820f, - 0.705206031254697830f, -0.709002435455618250f, 0.705070068777006840f, - -0.709137643983723920f, - 0.704934080375904990f, -0.709272826438865580f, 0.704798066056391950f, - -0.709407982816072980f, - 0.704662025823468930f, -0.709543113110376770f, 0.704525959682137380f, - -0.709678217316808470f, - 0.704389867637400410f, -0.709813295430400840f, 0.704253749694261580f, - -0.709948347446187400f, - 0.704117605857725430f, -0.710083373359202690f, 0.703981436132797730f, - -0.710218373164482220f, - 0.703845240524484940f, -0.710353346857062310f, 0.703709019037794810f, - -0.710488294431980470f, - 0.703572771677735580f, -0.710623215884275020f, 0.703436498449316770f, - -0.710758111208985350f, - 0.703300199357548730f, -0.710892980401151680f, 0.703163874407442770f, - -0.711027823455815280f, - 0.703027523604011220f, -0.711162640368018350f, 0.702891146952267400f, - -0.711297431132803970f, - 0.702754744457225300f, -0.711432195745216430f, 0.702618316123900130f, - -0.711566934200300700f, - 0.702481861957308000f, -0.711701646493102970f, 0.702345381962465880f, - -0.711836332618670080f, - 0.702208876144391870f, -0.711970992572049990f, 0.702072344508104740f, - -0.712105626348291890f, - 0.701935787058624360f, -0.712240233942445510f, 0.701799203800971720f, - -0.712374815349561710f, - 0.701662594740168570f, -0.712509370564692320f, 0.701525959881237450f, - -0.712643899582890210f, - 0.701389299229202230f, -0.712778402399208870f, 0.701252612789087460f, - -0.712912879008703370f, - 0.701115900565918660f, -0.713047329406429230f, 0.700979162564722480f, - -0.713181753587443070f, - 0.700842398790526230f, -0.713316151546802610f, 0.700705609248358450f, - -0.713450523279566150f, - 0.700568793943248450f, -0.713584868780793520f, 0.700431952880226420f, - -0.713719188045545130f, - 0.700295086064323780f, -0.713853481068882470f, 0.700158193500572730f, - -0.713987747845867830f, - 0.700021275194006360f, -0.714121988371564710f, 0.699884331149658760f, - -0.714256202641037400f, - 0.699747361372564990f, -0.714390390649351390f, 0.699610365867761040f, - -0.714524552391572860f, - 0.699473344640283770f, -0.714658687862768980f, 0.699336297695171250f, - -0.714792797058008130f, - 0.699199225037462120f, -0.714926879972359370f, 0.699062126672196140f, - -0.715060936600892980f, - 0.698925002604414150f, -0.715194966938680010f, 0.698787852839157790f, - -0.715328970980792620f, - 0.698650677381469580f, -0.715462948722303650f, 0.698513476236393040f, - -0.715596900158287360f, - 0.698376249408972920f, -0.715730825283818590f, 0.698238996904254390f, - -0.715864724093973390f, - 0.698101718727283880f, -0.715998596583828690f, 0.697964414883108790f, - -0.716132442748462330f, - 0.697827085376777290f, -0.716266262582953120f, 0.697689730213338800f, - -0.716400056082380890f, - 0.697552349397843270f, -0.716533823241826570f, 0.697414942935341790f, - -0.716667564056371890f, - 0.697277510830886630f, -0.716801278521099540f, 0.697140053089530530f, - -0.716934966631093130f, - 0.697002569716327460f, -0.717068628381437480f, 0.696865060716332470f, - -0.717202263767218070f, - 0.696727526094601200f, -0.717335872783521730f, 0.696589965856190370f, - -0.717469455425435830f, - 0.696452380006157830f, -0.717603011688049080f, 0.696314768549562200f, - -0.717736541566450840f, - 0.696177131491462990f, -0.717870045055731710f, 0.696039468836920690f, - -0.718003522150983060f, - 0.695901780590996830f, -0.718136972847297490f, 0.695764066758753800f, - -0.718270397139768260f, - 0.695626327345254870f, -0.718403795023489720f, 0.695488562355564440f, - -0.718537166493557370f, - 0.695350771794747800f, -0.718670511545067230f, 0.695212955667870890f, - -0.718803830173116890f, - 0.695075113980000880f, -0.718937122372804380f, 0.694937246736205940f, - -0.719070388139229190f, - 0.694799353941554900f, -0.719203627467491220f, 0.694661435601117930f, - -0.719336840352691740f, - 0.694523491719965520f, -0.719470026789932990f, 0.694385522303169860f, - -0.719603186774318000f, - 0.694247527355803310f, -0.719736320300951030f, 0.694109506882939820f, - -0.719869427364936860f, - 0.693971460889654000f, -0.720002507961381650f, 0.693833389381021350f, - -0.720135562085392310f, - 0.693695292362118350f, -0.720268589732077080f, 0.693557169838022400f, - -0.720401590896544760f, - 0.693419021813811880f, -0.720534565573905270f, 0.693280848294566150f, - -0.720667513759269410f, - 0.693142649285365510f, -0.720800435447749190f, 0.693004424791290870f, - -0.720933330634457530f, - 0.692866174817424740f, -0.721066199314508110f, 0.692727899368849820f, - -0.721199041483015720f, - 0.692589598450650380f, -0.721331857135096180f, 0.692451272067911240f, - -0.721464646265866370f, - 0.692312920225718220f, -0.721597408870443660f, 0.692174542929158140f, - -0.721730144943947160f, - 0.692036140183318830f, -0.721862854481496340f, 0.691897711993288760f, - -0.721995537478211880f, - 0.691759258364157750f, -0.722128193929215350f, 0.691620779301016400f, - -0.722260823829629310f, - 0.691482274808955850f, -0.722393427174577550f, 0.691343744893068820f, - -0.722526003959184430f, - 0.691205189558448450f, -0.722658554178575610f, 0.691066608810189220f, - -0.722791077827877550f, - 0.690928002653386280f, -0.722923574902217700f, 0.690789371093135760f, - -0.723056045396724410f, - 0.690650714134534720f, -0.723188489306527350f, 0.690512031782681170f, - -0.723320906626756850f, - 0.690373324042674040f, -0.723453297352544380f, 0.690234590919613370f, - -0.723585661479022040f, - 0.690095832418599950f, -0.723717999001323390f, 0.689957048544735390f, - -0.723850309914582880f, - 0.689818239303122470f, -0.723982594213935520f, 0.689679404698864800f, - -0.724114851894517850f, - 0.689540544737066940f, -0.724247082951466890f, 0.689401659422834380f, - -0.724379287379921080f, - 0.689262748761273470f, -0.724511465175019520f, 0.689123812757491680f, - -0.724643616331902550f, - 0.688984851416597150f, -0.724775740845711280f, 0.688845864743699130f, - -0.724907838711587820f, - 0.688706852743907750f, -0.725039909924675370f, 0.688567815422334360f, - -0.725171954480117840f, - 0.688428752784090550f, -0.725303972373060660f, 0.688289664834289440f, - -0.725435963598649810f, - 0.688150551578044830f, -0.725567928152032300f, 0.688011413020471640f, - -0.725699866028356120f, - 0.687872249166685550f, -0.725831777222770370f, 0.687733060021803230f, - -0.725963661730424930f, - 0.687593845590942170f, -0.726095519546470890f, 0.687454605879221030f, - -0.726227350666060260f, - 0.687315340891759160f, -0.726359155084346010f, 0.687176050633676930f, - -0.726490932796481910f, - 0.687036735110095660f, -0.726622683797622850f, 0.686897394326137610f, - -0.726754408082924910f, - 0.686758028286925890f, -0.726886105647544970f, 0.686618636997584740f, - -0.727017776486640680f, - 0.686479220463238950f, -0.727149420595371020f, 0.686339778689014630f, - -0.727281037968895760f, - 0.686200311680038700f, -0.727412628602375770f, 0.686060819441438710f, - -0.727544192490972800f, - 0.685921301978343670f, -0.727675729629849610f, 0.685781759295883030f, - -0.727807240014169960f, - 0.685642191399187470f, -0.727938723639098620f, 0.685502598293388670f, - -0.728070180499801210f, - 0.685362979983618730f, -0.728201610591444500f, 0.685223336475011210f, - -0.728333013909196360f, - 0.685083667772700360f, -0.728464390448225200f, 0.684943973881821490f, - -0.728595740203700770f, - 0.684804254807510620f, -0.728727063170793720f, 0.684664510554904960f, - -0.728858359344675690f, - 0.684524741129142300f, -0.728989628720519310f, 0.684384946535361750f, - -0.729120871293498230f, - 0.684245126778703080f, -0.729252087058786970f, 0.684105281864307080f, - -0.729383276011561050f, - 0.683965411797315510f, -0.729514438146996900f, 0.683825516582870830f, - -0.729645573460272480f, - 0.683685596226116690f, -0.729776681946565970f, 0.683545650732197530f, - -0.729907763601057140f, - 0.683405680106258790f, -0.730038818418926150f, 0.683265684353446700f, - -0.730169846395354870f, - 0.683125663478908800f, -0.730300847525525380f, 0.682985617487792850f, - -0.730431821804621520f, - 0.682845546385248080f, -0.730562769227827590f, 0.682705450176424590f, - -0.730693689790328890f, - 0.682565328866473250f, -0.730824583487312050f, 0.682425182460546060f, - -0.730955450313964360f, - 0.682285010963795570f, -0.731086290265474230f, 0.682144814381375640f, - -0.731217103337031160f, - 0.682004592718440830f, -0.731347889523825460f, 0.681864345980146780f, - -0.731478648821048520f, - 0.681724074171649820f, -0.731609381223892520f, 0.681583777298107480f, - -0.731740086727550980f, - 0.681443455364677990f, -0.731870765327218290f, 0.681303108376520530f, - -0.732001417018089520f, - 0.681162736338795430f, -0.732132041795361290f, 0.681022339256663670f, - -0.732262639654230660f, - 0.680881917135287340f, -0.732393210589896040f, 0.680741469979829090f, - -0.732523754597556590f, - 0.680600997795453130f, -0.732654271672412820f, 0.680460500587323880f, - -0.732784761809665790f, - 0.680319978360607200f, -0.732915225004517780f, 0.680179431120469750f, - -0.733045661252171970f, - 0.680038858872079040f, -0.733176070547832740f, 0.679898261620603290f, - -0.733306452886705260f, - 0.679757639371212030f, -0.733436808263995710f, 0.679616992129075560f, - -0.733567136674911360f, - 0.679476319899365080f, -0.733697438114660260f, 0.679335622687252670f, - -0.733827712578451700f, - 0.679194900497911200f, -0.733957960061495940f, 0.679054153336514870f, - -0.734088180559004040f, - 0.678913381208238410f, -0.734218374066188170f, 0.678772584118257690f, - -0.734348540578261600f, - 0.678631762071749470f, -0.734478680090438370f, 0.678490915073891250f, - -0.734608792597933550f, - 0.678350043129861580f, -0.734738878095963390f, 0.678209146244839860f, - -0.734868936579745060f, - 0.678068224424006600f, -0.734998968044496600f, 0.677927277672543130f, - -0.735128972485437180f, - 0.677786305995631500f, -0.735258949897786730f, 0.677645309398454910f, - -0.735388900276766620f, - 0.677504287886197430f, -0.735518823617598900f, 0.677363241464044030f, - -0.735648719915506400f, - 0.677222170137180450f, -0.735778589165713480f, 0.677081073910793530f, - -0.735908431363445190f, - 0.676939952790071240f, -0.736038246503927350f, 0.676798806780201770f, - -0.736168034582387330f, - 0.676657635886374950f, -0.736297795594053060f, 0.676516440113781090f, - -0.736427529534153690f, - 0.676375219467611700f, -0.736557236397919150f, 0.676233973953058950f, - -0.736686916180580460f, - 0.676092703575316030f, -0.736816568877369790f, 0.675951408339577010f, - -0.736946194483520170f, - 0.675810088251037060f, -0.737075792994265620f, 0.675668743314891910f, - -0.737205364404841190f, - 0.675527373536338630f, -0.737334908710482790f, 0.675385978920574950f, - -0.737464425906427580f, - 0.675244559472799270f, -0.737593915987913460f, 0.675103115198211530f, - -0.737723378950179590f, - 0.674961646102012040f, -0.737852814788465980f, 0.674820152189402280f, - -0.737982223498013570f, - 0.674678633465584540f, -0.738111605074064260f, 0.674537089935762110f, - -0.738240959511861310f, - 0.674395521605139050f, -0.738370286806648510f, 0.674253928478920520f, - -0.738499586953671130f, - 0.674112310562312360f, -0.738628859948174840f, 0.673970667860521620f, - -0.738758105785406900f, - 0.673829000378756150f, -0.738887324460615110f, 0.673687308122224330f, - -0.739016515969048600f, - 0.673545591096136100f, -0.739145680305957400f, 0.673403849305701850f, - -0.739274817466592520f, - 0.673262082756132970f, -0.739403927446205760f, 0.673120291452642070f, - -0.739533010240050250f, - 0.672978475400442090f, -0.739662065843379900f, 0.672836634604747410f, - -0.739791094251449950f, - 0.672694769070772970f, -0.739920095459516090f, 0.672552878803734820f, - -0.740049069462835550f, - 0.672410963808849900f, -0.740178016256666240f, 0.672269024091336040f, - -0.740306935836266940f, - 0.672127059656411840f, -0.740435828196898020f, 0.671985070509296900f, - -0.740564693333820250f, - 0.671843056655211930f, -0.740693531242295640f, 0.671701018099378320f, - -0.740822341917587330f, - 0.671558954847018330f, -0.740951125354959110f, 0.671416866903355450f, - -0.741079881549676080f, - 0.671274754273613490f, -0.741208610497004260f, 0.671132616963017850f, - -0.741337312192210660f, - 0.670990454976794220f, -0.741465986630563290f, 0.670848268320169750f, - -0.741594633807331150f, - 0.670706056998372160f, -0.741723253717784140f, 0.670563821016630040f, - -0.741851846357193480f, - 0.670421560380173090f, -0.741980411720830960f, 0.670279275094231910f, - -0.742108949803969800f, - 0.670136965164037760f, -0.742237460601884000f, 0.669994630594823000f, - -0.742365944109848460f, - 0.669852271391821130f, -0.742494400323139180f, 0.669709887560265840f, - -0.742622829237033380f, - 0.669567479105392490f, -0.742751230846809050f, 0.669425046032436910f, - -0.742879605147745090f, - 0.669282588346636010f, -0.743007952135121720f, 0.669140106053227710f, - -0.743136271804219820f, - 0.668997599157450270f, -0.743264564150321490f, 0.668855067664543610f, - -0.743392829168709970f, - 0.668712511579748090f, -0.743521066854669120f, 0.668569930908305080f, - -0.743649277203484060f, - 0.668427325655456820f, -0.743777460210440780f, 0.668284695826446670f, - -0.743905615870826490f, - 0.668142041426518560f, -0.744033744179929180f, 0.667999362460917510f, - -0.744161845133038070f, - 0.667856658934889440f, -0.744289918725443140f, 0.667713930853681140f, - -0.744417964952435620f, - 0.667571178222540310f, -0.744545983809307250f, 0.667428401046715640f, - -0.744673975291351600f, - 0.667285599331456480f, -0.744801939393862630f, 0.667142773082013310f, - -0.744929876112135350f, - 0.666999922303637470f, -0.745057785441465950f, 0.666857047001581220f, - -0.745185667377151640f, - 0.666714147181097670f, -0.745313521914490410f, 0.666571222847440750f, - -0.745441349048781680f, - 0.666428274005865350f, -0.745569148775325430f, 0.666285300661627390f, - -0.745696921089422760f, - 0.666142302819983540f, -0.745824665986375980f, 0.665999280486191500f, - -0.745952383461488180f, - 0.665856233665509720f, -0.746080073510063780f, 0.665713162363197660f, - -0.746207736127407650f, - 0.665570066584515560f, -0.746335371308826320f, 0.665426946334724660f, - -0.746462979049626770f, - 0.665283801619087180f, -0.746590559345117310f, 0.665140632442866140f, - -0.746718112190607020f, - 0.664997438811325340f, -0.746845637581406540f, 0.664854220729729660f, - -0.746973135512826740f, - 0.664710978203344900f, -0.747100605980180130f, 0.664567711237437520f, - -0.747228048978779920f, - 0.664424419837275180f, -0.747355464503940190f, 0.664281104008126230f, - -0.747482852550976570f, - 0.664137763755260010f, -0.747610213115205150f, 0.663994399083946640f, - -0.747737546191943330f, - 0.663851009999457340f, -0.747864851776509410f, 0.663707596507064120f, - -0.747992129864222700f, - 0.663564158612039880f, -0.748119380450403490f, 0.663420696319658280f, - -0.748246603530373420f, - 0.663277209635194100f, -0.748373799099454560f, 0.663133698563923010f, - -0.748500967152970430f, - 0.662990163111121470f, -0.748628107686245330f, 0.662846603282066900f, - -0.748755220694604760f, - 0.662703019082037440f, -0.748882306173375030f, 0.662559410516312400f, - -0.749009364117883770f, - 0.662415777590171780f, -0.749136394523459260f, 0.662272120308896590f, - -0.749263397385431020f, - 0.662128438677768720f, -0.749390372699129560f, 0.661984732702071030f, - -0.749517320459886170f, - 0.661841002387086870f, -0.749644240663033480f, 0.661697247738101120f, - -0.749771133303904990f, - 0.661553468760399000f, -0.749897998377835220f, 0.661409665459266940f, - -0.750024835880159780f, - 0.661265837839992270f, -0.750151645806214960f, 0.661121985907862970f, - -0.750278428151338610f, - 0.660978109668168060f, -0.750405182910869220f, 0.660834209126197610f, - -0.750531910080146410f, - 0.660690284287242300f, -0.750658609654510590f, 0.660546335156593890f, - -0.750785281629303580f, - 0.660402361739545030f, -0.750911925999867890f, 0.660258364041389050f, - -0.751038542761547250f, - 0.660114342067420480f, -0.751165131909686370f, 0.659970295822934540f, - -0.751291693439630870f, - 0.659826225313227430f, -0.751418227346727360f, 0.659682130543596150f, - -0.751544733626323570f, - 0.659538011519338770f, -0.751671212273768430f, 0.659393868245753970f, - -0.751797663284411440f, - 0.659249700728141490f, -0.751924086653603550f, 0.659105508971802200f, - -0.752050482376696360f, - 0.658961292982037320f, -0.752176850449042700f, 0.658817052764149480f, - -0.752303190865996400f, - 0.658672788323441890f, -0.752429503622912390f, 0.658528499665218760f, - -0.752555788715146390f, - 0.658384186794785050f, -0.752682046138055230f, 0.658239849717446980f, - -0.752808275886996950f, - 0.658095488438511290f, -0.752934477957330150f, 0.657951102963285630f, - -0.753060652344415100f, - 0.657806693297078640f, -0.753186799043612410f, 0.657662259445200070f, - -0.753312918050284330f, - 0.657517801412960120f, -0.753439009359793580f, 0.657373319205670210f, - -0.753565072967504190f, - 0.657228812828642650f, -0.753691108868781210f, 0.657084282287190180f, - -0.753817117058990680f, - 0.656939727586627110f, -0.753943097533499640f, 0.656795148732268070f, - -0.754069050287676120f, - 0.656650545729429050f, -0.754194975316889170f, 0.656505918583426550f, - -0.754320872616508820f, - 0.656361267299578000f, -0.754446742181906330f, 0.656216591883202030f, - -0.754572584008453840f, - 0.656071892339617710f, -0.754698398091524390f, 0.655927168674145360f, - -0.754824184426492240f, - 0.655782420892106030f, -0.754949943008732640f, 0.655637648998821820f, - -0.755075673833621510f, - 0.655492852999615460f, -0.755201376896536550f, 0.655348032899810580f, - -0.755327052192855560f, - 0.655203188704731930f, -0.755452699717958140f, 0.655058320419704910f, - -0.755578319467224540f, - 0.654913428050056150f, -0.755703911436035880f, 0.654768511601112600f, - -0.755829475619774760f, - 0.654623571078202680f, -0.755955012013824310f, 0.654478606486655350f, - -0.756080520613569120f, - 0.654333617831800550f, -0.756206001414394540f, 0.654188605118969040f, - -0.756331454411686920f, - 0.654043568353492640f, -0.756456879600833630f, 0.653898507540703890f, - -0.756582276977223470f, - 0.653753422685936170f, -0.756707646536245670f, 0.653608313794523890f, - -0.756832988273290820f, - 0.653463180871802330f, -0.756958302183750490f, 0.653318023923107670f, - -0.757083588263017140f, - 0.653172842953776760f, -0.757208846506484460f, 0.653027637969147650f, - -0.757334076909547130f, - 0.652882408974558960f, -0.757459279467600720f, 0.652737155975350420f, - -0.757584454176041810f, - 0.652591878976862550f, -0.757709601030268080f, 0.652446577984436840f, - -0.757834720025678310f, - 0.652301253003415460f, -0.757959811157672300f, 0.652155904039141700f, - -0.758084874421650620f, - 0.652010531096959500f, -0.758209909813015280f, 0.651865134182214030f, - -0.758334917327168960f, - 0.651719713300251020f, -0.758459896959515320f, 0.651574268456417080f, - -0.758584848705459500f, - 0.651428799656059820f, -0.758709772560407390f, 0.651283306904527850f, - -0.758834668519765660f, - 0.651137790207170330f, -0.758959536578942440f, 0.650992249569337660f, - -0.759084376733346500f, - 0.650846684996380990f, -0.759209188978387960f, 0.650701096493652040f, - -0.759333973309477940f, - 0.650555484066503990f, -0.759458729722028210f, 0.650409847720290420f, - -0.759583458211452010f, - 0.650264187460365960f, -0.759708158773163440f, 0.650118503292086200f, - -0.759832831402577400f, - 0.649972795220807530f, -0.759957476095110330f, 0.649827063251887100f, - -0.760082092846179220f, - 0.649681307390683190f, -0.760206681651202420f, 0.649535527642554730f, - -0.760331242505599030f, - 0.649389724012861770f, -0.760455775404789260f, 0.649243896506965010f, - -0.760580280344194340f, - 0.649098045130226060f, -0.760704757319236920f, 0.648952169888007410f, - -0.760829206325340010f, - 0.648806270785672550f, -0.760953627357928040f, 0.648660347828585840f, - -0.761078020412426560f, - 0.648514401022112550f, -0.761202385484261780f, 0.648368430371618400f, - -0.761326722568861250f, - 0.648222435882470420f, -0.761451031661653510f, 0.648076417560036530f, - -0.761575312758068000f, - 0.647930375409685460f, -0.761699565853535270f, 0.647784309436786550f, - -0.761823790943486840f, - 0.647638219646710420f, -0.761947988023355390f, 0.647492106044828100f, - -0.762072157088574560f, - 0.647345968636512060f, -0.762196298134578900f, 0.647199807427135230f, - -0.762320411156804160f, - 0.647053622422071650f, -0.762444496150687100f, 0.646907413626696020f, - -0.762568553111665380f, - 0.646761181046383920f, -0.762692582035177870f, 0.646614924686512050f, - -0.762816582916664320f, - 0.646468644552457890f, -0.762940555751565720f, 0.646322340649599590f, - -0.763064500535323710f, - 0.646176012983316390f, -0.763188417263381270f, 0.646029661558988330f, - -0.763312305931182380f, - 0.645883286381996440f, -0.763436166534172010f, 0.645736887457722290f, - -0.763559999067796150f, - 0.645590464791548800f, -0.763683803527501870f, 0.645444018388859230f, - -0.763807579908737160f, - 0.645297548255038380f, -0.763931328206951090f, 0.645151054395471270f, - -0.764055048417593860f, - 0.645004536815544040f, -0.764178740536116670f, 0.644857995520643710f, - -0.764302404557971720f, - 0.644711430516158420f, -0.764426040478612070f, 0.644564841807476750f, - -0.764549648293492150f, - 0.644418229399988380f, -0.764673227998067140f, 0.644271593299083900f, - -0.764796779587793460f, - 0.644124933510154540f, -0.764920303058128410f, 0.643978250038592660f, - -0.765043798404530410f, - 0.643831542889791500f, -0.765167265622458960f, 0.643684812069144960f, - -0.765290704707374260f, - 0.643538057582047850f, -0.765414115654738160f, 0.643391279433895960f, - -0.765537498460013070f, - 0.643244477630085850f, -0.765660853118662390f, 0.643097652176015110f, - -0.765784179626150970f, - 0.642950803077082080f, -0.765907477977944230f, 0.642803930338686100f, - -0.766030748169509000f, - 0.642657033966226860f, -0.766153990196312810f, 0.642510113965105710f, - -0.766277204053824710f, - 0.642363170340724320f, -0.766400389737514120f, 0.642216203098485370f, - -0.766523547242852100f, - 0.642069212243792540f, -0.766646676565310380f, 0.641922197782050170f, - -0.766769777700361920f, - 0.641775159718663500f, -0.766892850643480670f, 0.641628098059038860f, - -0.767015895390141480f, - 0.641481012808583160f, -0.767138911935820400f, 0.641333903972704290f, - -0.767261900275994390f, - 0.641186771556811250f, -0.767384860406141620f, 0.641039615566313390f, - -0.767507792321741270f, - 0.640892436006621380f, -0.767630696018273270f, 0.640745232883146440f, - -0.767753571491219030f, - 0.640598006201301030f, -0.767876418736060610f, 0.640450755966498140f, - -0.767999237748281270f, - 0.640303482184151670f, -0.768122028523365310f, 0.640156184859676620f, - -0.768244791056798220f, - 0.640008863998488440f, -0.768367525344066270f, 0.639861519606004010f, - -0.768490231380656750f, - 0.639714151687640450f, -0.768612909162058270f, 0.639566760248816420f, - -0.768735558683760310f, - 0.639419345294950700f, -0.768858179941253270f, 0.639271906831463510f, - -0.768980772930028870f, - 0.639124444863775730f, -0.769103337645579590f, 0.638976959397309140f, - -0.769225874083399260f, - 0.638829450437486400f, -0.769348382238982280f, 0.638681917989730840f, - -0.769470862107824560f, - 0.638534362059466790f, -0.769593313685422940f, 0.638386782652119680f, - -0.769715736967275020f, - 0.638239179773115390f, -0.769838131948879840f, 0.638091553427880930f, - -0.769960498625737230f, - 0.637943903621844170f, -0.770082836993347900f, 0.637796230360433540f, - -0.770205147047214100f, - 0.637648533649078810f, -0.770327428782838770f, 0.637500813493210310f, - -0.770449682195725960f, - 0.637353069898259130f, -0.770571907281380700f, 0.637205302869657600f, - -0.770694104035309140f, - 0.637057512412838590f, -0.770816272453018430f, 0.636909698533235870f, - -0.770938412530016940f, - 0.636761861236284200f, -0.771060524261813710f, 0.636614000527419230f, - -0.771182607643919220f, - 0.636466116412077180f, -0.771304662671844720f, 0.636318208895695570f, - -0.771426689341102590f, - 0.636170277983712170f, -0.771548687647206300f, 0.636022323681566300f, - -0.771670657585670330f, - 0.635874345994697720f, -0.771792599152010150f, 0.635726344928547180f, - -0.771914512341742350f, - 0.635578320488556230f, -0.772036397150384410f, 0.635430272680167160f, - -0.772158253573455240f, - 0.635282201508823530f, -0.772280081606474320f, 0.635134106979969300f, - -0.772401881244962340f, - 0.634985989099049460f, -0.772523652484441330f, 0.634837847871510100f, - -0.772645395320433860f, - 0.634689683302797850f, -0.772767109748463740f, 0.634541495398360130f, - -0.772888795764056220f, - 0.634393284163645490f, -0.773010453362736990f, 0.634245049604103330f, - -0.773132082540033070f, - 0.634096791725183740f, -0.773253683291472590f, 0.633948510532337810f, - -0.773375255612584470f, - 0.633800206031017280f, -0.773496799498899050f, 0.633651878226674900f, - -0.773618314945947460f, - 0.633503527124764320f, -0.773739801949261840f, 0.633355152730740060f, - -0.773861260504375540f, - 0.633206755050057190f, -0.773982690606822790f, 0.633058334088172250f, - -0.774104092252138940f, - 0.632909889850541860f, -0.774225465435860570f, 0.632761422342624000f, - -0.774346810153525020f, - 0.632612931569877520f, -0.774468126400670860f, 0.632464417537761840f, - -0.774589414172837550f, - 0.632315880251737680f, -0.774710673465565550f, 0.632167319717266030f, - -0.774831904274396850f, - 0.632018735939809060f, -0.774953106594873820f, 0.631870128924829850f, - -0.775074280422540450f, - 0.631721498677792370f, -0.775195425752941310f, 0.631572845204161130f, - -0.775316542581622410f, - 0.631424168509401860f, -0.775437630904130430f, 0.631275468598980870f, - -0.775558690716013580f, - 0.631126745478365340f, -0.775679722012820540f, 0.630977999153023660f, - -0.775800724790101540f, - 0.630829229628424470f, -0.775921699043407580f, 0.630680436910038060f, - -0.776042644768290770f, - 0.630531621003334600f, -0.776163561960304340f, 0.630382781913785940f, - -0.776284450615002400f, - 0.630233919646864480f, -0.776405310727940390f, 0.630085034208043290f, - -0.776526142294674430f, - 0.629936125602796550f, -0.776646945310762060f, 0.629787193836599200f, - -0.776767719771761510f, - 0.629638238914927100f, -0.776888465673232440f, 0.629489260843256740f, - -0.777009183010735290f, - 0.629340259627065750f, -0.777129871779831620f, 0.629191235271832410f, - -0.777250531976084070f, - 0.629042187783036000f, -0.777371163595056200f, 0.628893117166156480f, - -0.777491766632312900f, - 0.628744023426674790f, -0.777612341083419920f, 0.628594906570072660f, - -0.777732886943944050f, - 0.628445766601832710f, -0.777853404209453040f, 0.628296603527438440f, - -0.777973892875515990f, - 0.628147417352374120f, -0.778094352937702790f, 0.627998208082124810f, - -0.778214784391584420f, - 0.627848975722176570f, -0.778335187232733090f, 0.627699720278016240f, - -0.778455561456721900f, - 0.627550441755131530f, -0.778575907059124940f, 0.627401140159011160f, - -0.778696224035517530f, - 0.627251815495144190f, -0.778816512381475870f, 0.627102467769021010f, - -0.778936772092577500f, - 0.626953096986132770f, -0.779057003164400630f, 0.626803703151971310f, - -0.779177205592524680f, - 0.626654286272029460f, -0.779297379372530300f, 0.626504846351800930f, - -0.779417524499998900f, - 0.626355383396779990f, -0.779537640970513150f, 0.626205897412462130f, - -0.779657728779656780f, - 0.626056388404343520f, -0.779777787923014440f, 0.625906856377921210f, - -0.779897818396171890f, - 0.625757301338692900f, -0.780017820194715990f, 0.625607723292157410f, - -0.780137793314234500f, - 0.625458122243814360f, -0.780257737750316590f, 0.625308498199164010f, - -0.780377653498552040f, - 0.625158851163707730f, -0.780497540554531910f, 0.625009181142947460f, - -0.780617398913848290f, - 0.624859488142386450f, -0.780737228572094380f, 0.624709772167528100f, - -0.780857029524864470f, - 0.624560033223877320f, -0.780976801767753750f, 0.624410271316939380f, - -0.781096545296358410f, - 0.624260486452220650f, -0.781216260106276090f, 0.624110678635228510f, - -0.781335946193104870f, - 0.623960847871470770f, -0.781455603552444480f, 0.623810994166456130f, - -0.781575232179895550f, - 0.623661117525694640f, -0.781694832071059390f, 0.623511217954696550f, - -0.781814403221538830f, - 0.623361295458973340f, -0.781933945626937630f, 0.623211350044037270f, - -0.782053459282860300f, - 0.623061381715401370f, -0.782172944184912900f, 0.622911390478579460f, - -0.782292400328702400f, - 0.622761376339086460f, -0.782411827709836420f, 0.622611339302437730f, - -0.782531226323924240f, - 0.622461279374150080f, -0.782650596166575730f, 0.622311196559740320f, - -0.782769937233402050f, - 0.622161090864726930f, -0.782889249520015480f, 0.622010962294628600f, - -0.783008533022029110f, - 0.621860810854965360f, -0.783127787735057310f, 0.621710636551257690f, - -0.783247013654715380f, - 0.621560439389027270f, -0.783366210776619720f, 0.621410219373796150f, - -0.783485379096387820f, - 0.621259976511087660f, -0.783604518609638200f, 0.621109710806425740f, - -0.783723629311990470f, - 0.620959422265335180f, -0.783842711199065230f, 0.620809110893341900f, - -0.783961764266484010f, - 0.620658776695972140f, -0.784080788509869950f, 0.620508419678753360f, - -0.784199783924846570f, - 0.620358039847213830f, -0.784318750507038920f, 0.620207637206882430f, - -0.784437688252072720f, - 0.620057211763289210f, -0.784556597155575240f, 0.619906763521964830f, - -0.784675477213174320f, - 0.619756292488440660f, -0.784794328420499230f, 0.619605798668249390f, - -0.784913150773180020f, - 0.619455282066924020f, -0.785031944266848080f, 0.619304742689998690f, - -0.785150708897135560f, - 0.619154180543008410f, -0.785269444659675850f, 0.619003595631488770f, - -0.785388151550103550f, - 0.618852987960976320f, -0.785506829564053930f, 0.618702357537008640f, - -0.785625478697163700f, - 0.618551704365123860f, -0.785744098945070360f, 0.618401028450860980f, - -0.785862690303412600f, - 0.618250329799760250f, -0.785981252767830150f, 0.618099608417362110f, - -0.786099786333963820f, - 0.617948864309208260f, -0.786218290997455550f, 0.617798097480841140f, - -0.786336766753948260f, - 0.617647307937803980f, -0.786455213599085770f, 0.617496495685640910f, - -0.786573631528513230f, - 0.617345660729896940f, -0.786692020537876680f, 0.617194803076117630f, - -0.786810380622823490f, - 0.617043922729849760f, -0.786928711779001700f, 0.616893019696640790f, - -0.787047014002060790f, - 0.616742093982038830f, -0.787165287287650890f, 0.616591145591593230f, - -0.787283531631423620f, - 0.616440174530853650f, -0.787401747029031320f, 0.616289180805370980f, - -0.787519933476127810f, - 0.616138164420696910f, -0.787638090968367450f, 0.615987125382383870f, - -0.787756219501405950f, - 0.615836063695985090f, -0.787874319070900110f, 0.615684979367054570f, - -0.787992389672507950f, - 0.615533872401147430f, -0.788110431301888070f, 0.615382742803819330f, - -0.788228443954700490f, - 0.615231590580626820f, -0.788346427626606230f, 0.615080415737127460f, - -0.788464382313267430f, - 0.614929218278879590f, -0.788582308010347120f, 0.614777998211442190f, - -0.788700204713509660f, - 0.614626755540375050f, -0.788818072418420170f, 0.614475490271239160f, - -0.788935911120745130f, - 0.614324202409595950f, -0.789053720816151880f, 0.614172891961007990f, - -0.789171501500308790f, - 0.614021558931038490f, -0.789289253168885650f, 0.613870203325251440f, - -0.789406975817552810f, - 0.613718825149211830f, -0.789524669441982190f, 0.613567424408485330f, - -0.789642334037846340f, - 0.613416001108638590f, -0.789759969600819070f, 0.613264555255239150f, - -0.789877576126575280f, - 0.613113086853854910f, -0.789995153610791090f, 0.612961595910055170f, - -0.790112702049143300f, - 0.612810082429409710f, -0.790230221437310030f, 0.612658546417489290f, - -0.790347711770970520f, - 0.612506987879865570f, -0.790465173045804880f, 0.612355406822110760f, - -0.790582605257494460f, - 0.612203803249798060f, -0.790700008401721610f, 0.612052177168501580f, - -0.790817382474169660f, - 0.611900528583796070f, -0.790934727470523290f, 0.611748857501257400f, - -0.791052043386467950f, - 0.611597163926462020f, -0.791169330217690090f, 0.611445447864987110f, - -0.791286587959877720f, - 0.611293709322411010f, -0.791403816608719500f, 0.611141948304312570f, - -0.791521016159905220f, - 0.610990164816271770f, -0.791638186609125770f, 0.610838358863869280f, - -0.791755327952073150f, - 0.610686530452686280f, -0.791872440184440470f, 0.610534679588305320f, - -0.791989523301921850f, - 0.610382806276309480f, -0.792106577300212390f, 0.610230910522282620f, - -0.792223602175008310f, - 0.610078992331809620f, -0.792340597922007060f, 0.609927051710476230f, - -0.792457564536906970f, - 0.609775088663868430f, -0.792574502015407580f, 0.609623103197573730f, - -0.792691410353209450f, - 0.609471095317180240f, -0.792808289546014120f, 0.609319065028276820f, - -0.792925139589524260f, - 0.609167012336453210f, -0.793041960479443640f, 0.609014937247299940f, - -0.793158752211477140f, - 0.608862839766408200f, -0.793275514781330630f, 0.608710719899370420f, - -0.793392248184711100f, - 0.608558577651779450f, -0.793508952417326660f, 0.608406413029229260f, - -0.793625627474886190f, - 0.608254226037314490f, -0.793742273353100100f, 0.608102016681630550f, - -0.793858890047679620f, - 0.607949784967773740f, -0.793975477554337170f, 0.607797530901341140f, - -0.794092035868785960f, - 0.607645254487930830f, -0.794208564986740640f, 0.607492955733141660f, - -0.794325064903916520f, - 0.607340634642572930f, -0.794441535616030590f, 0.607188291221825160f, - -0.794557977118800270f, - 0.607035925476499760f, -0.794674389407944550f, 0.606883537412198580f, - -0.794790772479183170f, - 0.606731127034524480f, -0.794907126328237010f, 0.606578694349081400f, - -0.795023450950828050f, - 0.606426239361473550f, -0.795139746342679590f, 0.606273762077306430f, - -0.795256012499515500f, - 0.606121262502186230f, -0.795372249417061190f, 0.605968740641719790f, - -0.795488457091042990f, - 0.605816196501515080f, -0.795604635517188070f, 0.605663630087180490f, - -0.795720784691225090f, - 0.605511041404325550f, -0.795836904608883460f, 0.605358430458560530f, - -0.795952995265893910f, - 0.605205797255496500f, -0.796069056657987990f, 0.605053141800745430f, - -0.796185088780898440f, - 0.604900464099919930f, -0.796301091630359110f, 0.604747764158633410f, - -0.796417065202104980f, - 0.604595041982500360f, -0.796533009491872000f, 0.604442297577135970f, - -0.796648924495397150f, - 0.604289530948156070f, -0.796764810208418720f, 0.604136742101177630f, - -0.796880666626675780f, - 0.603983931041818020f, -0.796996493745908750f, 0.603831097775695880f, - -0.797112291561858920f, - 0.603678242308430370f, -0.797228060070268700f, 0.603525364645641550f, - -0.797343799266881700f, - 0.603372464792950370f, -0.797459509147442460f, 0.603219542755978440f, - -0.797575189707696590f, - 0.603066598540348280f, -0.797690840943391040f, 0.602913632151683140f, - -0.797806462850273570f, - 0.602760643595607220f, -0.797922055424093000f, 0.602607632877745550f, - -0.798037618660599410f, - 0.602454600003723860f, -0.798153152555543750f, 0.602301544979168550f, - -0.798268657104678310f, - 0.602148467809707320f, -0.798384132303756380f, 0.601995368500968130f, - -0.798499578148532010f, - 0.601842247058580030f, -0.798614994634760820f, 0.601689103488173060f, - -0.798730381758199210f, - 0.601535937795377730f, -0.798845739514604580f, 0.601382749985825420f, - -0.798961067899735760f, - 0.601229540065148620f, -0.799076366909352350f, 0.601076308038980160f, - -0.799191636539215210f, - 0.600923053912954090f, -0.799306876785086160f, 0.600769777692705230f, - -0.799422087642728040f, - 0.600616479383868970f, -0.799537269107905010f, 0.600463158992081690f, - -0.799652421176382130f, - 0.600309816522980430f, -0.799767543843925680f, 0.600156451982203350f, - -0.799882637106302810f, - 0.600003065375389060f, -0.799997700959281910f, 0.599849656708177360f, - -0.800112735398632370f, - 0.599696225986208310f, -0.800227740420124790f, 0.599542773215123390f, - -0.800342716019530660f, - 0.599389298400564540f, -0.800457662192622710f, 0.599235801548174570f, - -0.800572578935174750f, - 0.599082282663597310f, -0.800687466242961500f, 0.598928741752476900f, - -0.800802324111759110f, - 0.598775178820458720f, -0.800917152537344300f, 0.598621593873188920f, - -0.801031951515495330f, - 0.598467986916314310f, -0.801146721041991250f, 0.598314357955482600f, - -0.801261461112612540f, - 0.598160706996342380f, -0.801376171723140130f, 0.598007034044542700f, - -0.801490852869356840f, - 0.597853339105733910f, -0.801605504547046040f, 0.597699622185566830f, - -0.801720126751992330f, - 0.597545883289693270f, -0.801834719479981310f, 0.597392122423765710f, - -0.801949282726799660f, - 0.597238339593437530f, -0.802063816488235440f, 0.597084534804362740f, - -0.802178320760077450f, - 0.596930708062196500f, -0.802292795538115720f, 0.596776859372594500f, - -0.802407240818141300f, - 0.596622988741213330f, -0.802521656595946320f, 0.596469096173710360f, - -0.802636042867324150f, - 0.596315181675743820f, -0.802750399628069160f, 0.596161245252972540f, - -0.802864726873976590f, - 0.596007286911056530f, -0.802979024600843140f, 0.595853306655656390f, - -0.803093292804466400f, - 0.595699304492433470f, -0.803207531480644830f, 0.595545280427049790f, - -0.803321740625178470f, - 0.595391234465168730f, -0.803435920233868120f, 0.595237166612453850f, - -0.803550070302515570f, - 0.595083076874569960f, -0.803664190826924090f, 0.594928965257182420f, - -0.803778281802897570f, - 0.594774831765957580f, -0.803892343226241260f, 0.594620676406562240f, - -0.804006375092761520f, - 0.594466499184664540f, -0.804120377398265700f, 0.594312300105932830f, - -0.804234350138562260f, - 0.594158079176036800f, -0.804348293309460780f, 0.594003836400646690f, - -0.804462206906771840f, - 0.593849571785433630f, -0.804576090926307000f, 0.593695285336069300f, - -0.804689945363879500f, - 0.593540977058226390f, -0.804803770215302810f, 0.593386646957578480f, - -0.804917565476392150f, - 0.593232295039799800f, -0.805031331142963660f, 0.593077921310565580f, - -0.805145067210834120f, - 0.592923525775551410f, -0.805258773675822210f, 0.592769108440434070f, - -0.805372450533747060f, - 0.592614669310891130f, -0.805486097780429120f, 0.592460208392600940f, - -0.805599715411689950f, - 0.592305725691242400f, -0.805713303423352120f, 0.592151221212495640f, - -0.805826861811239300f, - 0.591996694962040990f, -0.805940390571176280f, 0.591842146945560250f, - -0.806053889698988950f, - 0.591687577168735550f, -0.806167359190504310f, 0.591532985637249990f, - -0.806280799041550370f, - 0.591378372356787580f, -0.806394209247956240f, 0.591223737333032910f, - -0.806507589805552260f, - 0.591069080571671510f, -0.806620940710169650f, 0.590914402078389520f, - -0.806734261957640750f, - 0.590759701858874280f, -0.806847553543799220f, 0.590604979918813440f, - -0.806960815464479620f, - 0.590450236263895920f, -0.807074047715517610f, 0.590295470899810940f, - -0.807187250292749850f, - 0.590140683832248940f, -0.807300423192014450f, 0.589985875066900920f, - -0.807413566409150190f, - 0.589831044609458900f, -0.807526679939997160f, 0.589676192465615420f, - -0.807639763780396370f, - 0.589521318641063940f, -0.807752817926190360f, 0.589366423141498790f, - -0.807865842373222120f, - 0.589211505972615070f, -0.807978837117336310f, 0.589056567140108460f, - -0.808091802154378260f, - 0.588901606649675840f, -0.808204737480194720f, 0.588746624507014650f, - -0.808317643090633250f, - 0.588591620717822890f, -0.808430518981542720f, 0.588436595287799900f, - -0.808543365148773010f, - 0.588281548222645330f, -0.808656181588174980f, 0.588126479528059850f, - -0.808768968295600850f, - 0.587971389209745120f, -0.808881725266903610f, 0.587816277273403020f, - -0.808994452497937560f, - 0.587661143724736770f, -0.809107149984558130f, 0.587505988569450020f, - -0.809219817722621750f, - 0.587350811813247660f, -0.809332455707985840f, 0.587195613461834910f, - -0.809445063936509170f, - 0.587040393520918080f, -0.809557642404051260f, 0.586885151996203950f, - -0.809670191106473090f, - 0.586729888893400500f, -0.809782710039636420f, 0.586574604218216280f, - -0.809895199199404450f, - 0.586419297976360500f, -0.810007658581641140f, 0.586263970173543700f, - -0.810120088182211600f, - 0.586108620815476430f, -0.810232487996982330f, 0.585953249907870680f, - -0.810344858021820550f, - 0.585797857456438860f, -0.810457198252594770f, 0.585642443466894420f, - -0.810569508685174630f, - 0.585487007944951450f, -0.810681789315430670f, 0.585331550896324940f, - -0.810794040139234730f, - 0.585176072326730410f, -0.810906261152459670f, 0.585020572241884530f, - -0.811018452350979470f, - 0.584865050647504490f, -0.811130613730669190f, 0.584709507549308500f, - -0.811242745287404810f, - 0.584553942953015330f, -0.811354847017063730f, 0.584398356864344710f, - -0.811466918915524250f, - 0.584242749289016980f, -0.811578960978665890f, 0.584087120232753550f, - -0.811690973202369050f, - 0.583931469701276300f, -0.811802955582515360f, 0.583775797700308070f, - -0.811914908114987680f, - 0.583620104235572760f, -0.812026830795669730f, 0.583464389312794430f, - -0.812138723620446480f, - 0.583308652937698290f, -0.812250586585203880f, 0.583152895116010540f, - -0.812362419685829120f, - 0.582997115853457700f, -0.812474222918210480f, 0.582841315155767650f, - -0.812585996278237020f, - 0.582685493028668460f, -0.812697739761799490f, 0.582529649477889320f, - -0.812809453364789160f, - 0.582373784509160220f, -0.812921137083098770f, 0.582217898128211790f, - -0.813032790912621930f, - 0.582061990340775550f, -0.813144414849253590f, 0.581906061152583920f, - -0.813256008888889380f, - 0.581750110569369760f, -0.813367573027426570f, 0.581594138596866930f, - -0.813479107260763220f, - 0.581438145240810280f, -0.813590611584798510f, 0.581282130506935110f, - -0.813702085995432700f, - 0.581126094400977620f, -0.813813530488567190f, 0.580970036928674880f, - -0.813924945060104490f, - 0.580813958095764530f, -0.814036329705948300f, 0.580657857907985410f, - -0.814147684422003360f, - 0.580501736371076600f, -0.814259009204175270f, 0.580345593490778300f, - -0.814370304048371070f, - 0.580189429272831680f, -0.814481568950498610f, 0.580033243722978150f, - -0.814592803906467270f, - 0.579877036846960350f, -0.814704008912187080f, 0.579720808650521560f, - -0.814815183963569330f, - 0.579564559139405740f, -0.814926329056526620f, 0.579408288319357980f, - -0.815037444186972220f, - 0.579251996196123550f, -0.815148529350820830f, 0.579095682775449210f, - -0.815259584543988280f, - 0.578939348063081890f, -0.815370609762391290f, 0.578782992064769690f, - -0.815481605001947770f, - 0.578626614786261430f, -0.815592570258576680f, 0.578470216233306740f, - -0.815703505528198260f, - 0.578313796411655590f, -0.815814410806733780f, 0.578157355327059360f, - -0.815925286090105390f, - 0.578000892985269910f, -0.816036131374236700f, 0.577844409392039850f, - -0.816146946655052160f, - 0.577687904553122800f, -0.816257731928477390f, 0.577531378474272830f, - -0.816368487190439200f, - 0.577374831161244880f, -0.816479212436865390f, 0.577218262619794920f, - -0.816589907663684890f, - 0.577061672855679550f, -0.816700572866827850f, 0.576905061874655960f, - -0.816811208042225290f, - 0.576748429682482520f, -0.816921813185809480f, 0.576591776284917870f, - -0.817032388293513880f, - 0.576435101687721830f, -0.817142933361272970f, 0.576278405896654910f, - -0.817253448385022230f, - 0.576121688917478390f, -0.817363933360698460f, 0.575964950755954330f, - -0.817474388284239240f, - 0.575808191417845340f, -0.817584813151583710f, 0.575651410908915250f, - -0.817695207958671680f, - 0.575494609234928230f, -0.817805572701444270f, 0.575337786401649560f, - -0.817915907375843740f, - 0.575180942414845190f, -0.818026211977813440f, 0.575024077280281820f, - -0.818136486503297620f, - 0.574867191003726740f, -0.818246730948241960f, 0.574710283590948450f, - -0.818356945308593150f, - 0.574553355047715760f, -0.818467129580298660f, 0.574396405379798750f, - -0.818577283759307490f, - 0.574239434592967890f, -0.818687407841569570f, 0.574082442692994470f, - -0.818797501823036010f, - 0.573925429685650750f, -0.818907565699658950f, 0.573768395576709560f, - -0.819017599467391500f, - 0.573611340371944610f, -0.819127603122188240f, 0.573454264077130400f, - -0.819237576660004520f, - 0.573297166698042320f, -0.819347520076796900f, 0.573140048240456060f, - -0.819457433368523280f, - 0.572982908710148680f, -0.819567316531142230f, 0.572825748112897550f, - -0.819677169560613760f, - 0.572668566454481160f, -0.819786992452898990f, 0.572511363740678790f, - -0.819896785203959810f, - 0.572354139977270030f, -0.820006547809759680f, 0.572196895170035580f, - -0.820116280266262710f, - 0.572039629324757050f, -0.820225982569434690f, 0.571882342447216590f, - -0.820335654715241840f, - 0.571725034543197120f, -0.820445296699652050f, 0.571567705618482580f, - -0.820554908518633890f, - 0.571410355678857340f, -0.820664490168157460f, 0.571252984730106660f, - -0.820774041644193650f, - 0.571095592778016690f, -0.820883562942714580f, 0.570938179828374360f, - -0.820993054059693470f, - 0.570780745886967370f, -0.821102514991104650f, 0.570623290959583860f, - -0.821211945732923550f, - 0.570465815052012990f, -0.821321346281126740f, 0.570308318170045010f, - -0.821430716631691760f, - 0.570150800319470300f, -0.821540056780597610f, 0.569993261506080650f, - -0.821649366723823830f, - 0.569835701735668110f, -0.821758646457351640f, 0.569678121014025710f, - -0.821867895977163140f, - 0.569520519346947250f, -0.821977115279241550f, 0.569362896740227330f, - -0.822086304359571090f, - 0.569205253199661200f, -0.822195463214137170f, 0.569047588731045220f, - -0.822304591838926350f, - 0.568889903340175970f, -0.822413690229926390f, 0.568732197032851160f, - -0.822522758383125940f, - 0.568574469814869250f, -0.822631796294514990f, 0.568416721692029390f, - -0.822740803960084420f, - 0.568258952670131490f, -0.822849781375826320f, 0.568101162754976570f, - -0.822958728537734000f, - 0.567943351952365670f, -0.823067645441801670f, 0.567785520268101250f, - -0.823176532084024860f, - 0.567627667707986230f, -0.823285388460400110f, 0.567469794277824620f, - -0.823394214566925080f, - 0.567311899983420800f, -0.823503010399598390f, 0.567153984830580100f, - -0.823611775954420260f, - 0.566996048825108680f, -0.823720511227391320f, 0.566838091972813320f, - -0.823829216214513990f, - 0.566680114279501710f, -0.823937890911791370f, 0.566522115750982100f, - -0.824046535315227760f, - 0.566364096393063950f, -0.824155149420828570f, 0.566206056211556840f, - -0.824263733224600450f, - 0.566047995212271560f, -0.824372286722551250f, 0.565889913401019570f, - -0.824480809910689500f, - 0.565731810783613230f, -0.824589302785025290f, 0.565573687365865440f, - -0.824697765341569470f, - 0.565415543153589770f, -0.824806197576334330f, 0.565257378152600910f, - -0.824914599485333080f, - 0.565099192368714090f, -0.825022971064580220f, 0.564940985807745320f, - -0.825131312310090960f, - 0.564782758475511400f, -0.825239623217882130f, 0.564624510377830120f, - -0.825347903783971380f, - 0.564466241520519500f, -0.825456154004377440f, 0.564307951909398750f, - -0.825564373875120490f, - 0.564149641550287680f, -0.825672563392221390f, 0.563991310449007080f, - -0.825780722551702430f, - 0.563832958611378170f, -0.825888851349586780f, 0.563674586043223180f, - -0.825996949781898970f, - 0.563516192750364910f, -0.826105017844664610f, 0.563357778738627020f, - -0.826213055533910110f, - 0.563199344013834090f, -0.826321062845663420f, 0.563040888581811230f, - -0.826429039775953390f, - 0.562882412448384550f, -0.826536986320809960f, 0.562723915619380400f, - -0.826644902476264210f, - 0.562565398100626560f, -0.826752788238348520f, 0.562406859897951140f, - -0.826860643603096080f, - 0.562248301017183150f, -0.826968468566541490f, 0.562089721464152480f, - -0.827076263124720270f, - 0.561931121244689470f, -0.827184027273669020f, 0.561772500364625450f, - -0.827291761009425810f, - 0.561613858829792420f, -0.827399464328029350f, 0.561455196646023280f, - -0.827507137225519830f, - 0.561296513819151470f, -0.827614779697938400f, 0.561137810355011530f, - -0.827722391741327220f, - 0.560979086259438260f, -0.827829973351729810f, 0.560820341538267540f, - -0.827937524525190870f, - 0.560661576197336030f, -0.828045045257755800f, 0.560502790242481060f, - -0.828152535545471410f, - 0.560343983679540860f, -0.828259995384385550f, 0.560185156514354080f, - -0.828367424770547480f, - 0.560026308752760380f, -0.828474823700007130f, 0.559867440400600320f, - -0.828582192168815790f, - 0.559708551463714790f, -0.828689530173025710f, 0.559549641947945870f, - -0.828796837708690610f, - 0.559390711859136140f, -0.828904114771864870f, 0.559231761203129010f, - -0.829011361358604430f, - 0.559072789985768480f, -0.829118577464965980f, 0.558913798212899770f, - -0.829225763087007570f, - 0.558754785890368310f, -0.829332918220788250f, 0.558595753024020760f, - -0.829440042862368170f, - 0.558436699619704100f, -0.829547137007808800f, 0.558277625683266330f, - -0.829654200653172640f, - 0.558118531220556100f, -0.829761233794523050f, 0.557959416237422960f, - -0.829868236427924840f, - 0.557800280739717100f, -0.829975208549443840f, 0.557641124733289420f, - -0.830082150155146970f, - 0.557481948223991660f, -0.830189061241102370f, 0.557322751217676160f, - -0.830295941803379070f, - 0.557163533720196340f, -0.830402791838047550f, 0.557004295737406060f, - -0.830509611341179070f, - 0.556845037275160100f, -0.830616400308846200f, 0.556685758339313890f, - -0.830723158737122880f, - 0.556526458935723720f, -0.830829886622083570f, 0.556367139070246490f, - -0.830936583959804410f, - 0.556207798748739930f, -0.831043250746362320f, 0.556048437977062720f, - -0.831149886977835430f, - 0.555889056761073920f, -0.831256492650303210f, 0.555729655106633520f, - -0.831363067759845920f, - 0.555570233019602290f, -0.831469612302545240f, 0.555410790505841740f, - -0.831576126274483630f, - 0.555251327571214090f, -0.831682609671745120f, 0.555091844221582420f, - -0.831789062490414400f, - 0.554932340462810370f, -0.831895484726577590f, 0.554772816300762580f, - -0.832001876376321840f, - 0.554613271741304040f, -0.832108237435735480f, 0.554453706790301040f, - -0.832214567900907980f, - 0.554294121453620110f, -0.832320867767929680f, 0.554134515737128910f, - -0.832427137032892280f, - 0.553974889646695610f, -0.832533375691888680f, 0.553815243188189090f, - -0.832639583741012770f, - 0.553655576367479310f, -0.832745761176359460f, 0.553495889190436570f, - -0.832851907994024980f, - 0.553336181662932410f, -0.832958024190106670f, 0.553176453790838460f, - -0.833064109760702890f, - 0.553016705580027580f, -0.833170164701913190f, 0.552856937036373290f, - -0.833276189009838240f, - 0.552697148165749770f, -0.833382182680579730f, 0.552537338974032120f, - -0.833488145710240770f, - 0.552377509467096070f, -0.833594078094925140f, 0.552217659650817930f, - -0.833699979830738290f, - 0.552057789531074980f, -0.833805850913786340f, 0.551897899113745320f, - -0.833911691340176730f, - 0.551737988404707450f, -0.834017501106018130f, 0.551578057409841000f, - -0.834123280207419990f, - 0.551418106135026060f, -0.834229028640493420f, 0.551258134586143700f, - -0.834334746401350080f, - 0.551098142769075430f, -0.834440433486103190f, 0.550938130689703880f, - -0.834546089890866760f, - 0.550778098353912230f, -0.834651715611756330f, 0.550618045767584330f, - -0.834757310644888230f, - 0.550457972936604810f, -0.834862874986380010f, 0.550297879866859190f, - -0.834968408632350450f, - 0.550137766564233630f, -0.835073911578919300f, 0.549977633034615000f, - -0.835179383822207580f, - 0.549817479283891020f, -0.835284825358337370f, 0.549657305317949980f, - -0.835390236183431780f, - 0.549497111142680960f, -0.835495616293615350f, 0.549336896763974010f, - -0.835600965685013410f, - 0.549176662187719770f, -0.835706284353752600f, 0.549016407419809390f, - -0.835811572295960590f, - 0.548856132466135290f, -0.835916829507766360f, 0.548695837332590090f, - -0.836022055985299880f, - 0.548535522025067390f, -0.836127251724692160f, 0.548375186549461600f, - -0.836232416722075600f, - 0.548214830911667780f, -0.836337550973583530f, 0.548054455117581880f, - -0.836442654475350380f, - 0.547894059173100190f, -0.836547727223511890f, 0.547733643084120200f, - -0.836652769214204950f, - 0.547573206856539870f, -0.836757780443567190f, 0.547412750496257930f, - -0.836862760907737810f, - 0.547252274009174090f, -0.836967710602857020f, 0.547091777401188530f, - -0.837072629525066000f, - 0.546931260678202190f, -0.837177517670507190f, 0.546770723846116800f, - -0.837282375035324320f, - 0.546610166910834860f, -0.837387201615661940f, 0.546449589878259760f, - -0.837491997407665890f, - 0.546288992754295210f, -0.837596762407483040f, 0.546128375544846060f, - -0.837701496611261700f, - 0.545967738255817680f, -0.837806200015150940f, 0.545807080893116140f, - -0.837910872615301060f, - 0.545646403462648590f, -0.838015514407863700f, 0.545485705970322530f, - -0.838120125388991500f, - 0.545324988422046460f, -0.838224705554837970f, 0.545164250823729320f, - -0.838329254901558300f, - 0.545003493181281160f, -0.838433773425308340f, 0.544842715500612470f, - -0.838538261122245170f, - 0.544681917787634530f, -0.838642717988527300f, 0.544521100048259710f, - -0.838747144020313920f, - 0.544360262288400400f, -0.838851539213765760f, 0.544199404513970420f, - -0.838955903565044350f, - 0.544038526730883930f, -0.839060237070312630f, 0.543877628945055980f, - -0.839164539725734570f, - 0.543716711162402390f, -0.839268811527475230f, 0.543555773388839650f, - -0.839373052471700690f, - 0.543394815630284800f, -0.839477262554578550f, 0.543233837892656000f, - -0.839581441772277120f, - 0.543072840181871850f, -0.839685590120966110f, 0.542911822503851730f, - -0.839789707596816260f, - 0.542750784864516000f, -0.839893794195999410f, 0.542589727269785270f, - -0.839997849914688730f, - 0.542428649725581360f, -0.840101874749058400f, 0.542267552237826520f, - -0.840205868695283580f, - 0.542106434812444030f, -0.840309831749540770f, 0.541945297455357470f, - -0.840413763908007480f, - 0.541784140172491660f, -0.840517665166862440f, 0.541622962969771640f, - -0.840621535522285690f, - 0.541461765853123560f, -0.840725374970458070f, 0.541300548828474120f, - -0.840829183507561640f, - 0.541139311901750910f, -0.840932961129779670f, 0.540978055078882190f, - -0.841036707833296650f, - 0.540816778365796670f, -0.841140423614298080f, 0.540655481768424260f, - -0.841244108468970580f, - 0.540494165292695230f, -0.841347762393501950f, 0.540332828944540820f, - -0.841451385384081260f, - 0.540171472729892970f, -0.841554977436898330f, 0.540010096654684020f, - -0.841658538548144760f, - 0.539848700724847700f, -0.841762068714012490f, 0.539687284946317570f, - -0.841865567930695340f, - 0.539525849325029010f, -0.841969036194387680f, 0.539364393866917150f, - -0.842072473501285450f, - 0.539202918577918240f, -0.842175879847585570f, 0.539041423463969550f, - -0.842279255229485880f, - 0.538879908531008420f, -0.842382599643185960f, 0.538718373784973670f, - -0.842485913084885630f, - 0.538556819231804210f, -0.842589195550786600f, 0.538395244877439950f, - -0.842692447037091560f, - 0.538233650727821700f, -0.842795667540004120f, 0.538072036788890600f, - -0.842898857055729310f, - 0.537910403066588990f, -0.843002015580472830f, 0.537748749566859470f, - -0.843105143110442050f, - 0.537587076295645510f, -0.843208239641845440f, 0.537425383258891660f, - -0.843311305170892030f, - 0.537263670462542530f, -0.843414339693792760f, 0.537101937912544240f, - -0.843517343206759080f, - 0.536940185614843020f, -0.843620315706004040f, 0.536778413575385920f, - -0.843723257187741550f, - 0.536616621800121150f, -0.843826167648186740f, 0.536454810294997090f, - -0.843929047083555870f, - 0.536292979065963180f, -0.844031895490066410f, 0.536131128118969350f, - -0.844134712863936930f, - 0.535969257459966710f, -0.844237499201387020f, 0.535807367094906620f, - -0.844340254498637590f, - 0.535645457029741090f, -0.844442978751910660f, 0.535483527270423370f, - -0.844545671957429240f, - 0.535321577822907010f, -0.844648334111417820f, 0.535159608693146720f, - -0.844750965210101510f, - 0.534997619887097260f, -0.844853565249707010f, 0.534835611410714670f, - -0.844956134226462100f, - 0.534673583269955510f, -0.845058672136595470f, 0.534511535470777010f, - -0.845161178976337140f, - 0.534349468019137520f, -0.845263654741918220f, 0.534187380920995600f, - -0.845366099429570970f, - 0.534025274182310380f, -0.845468513035528830f, 0.533863147809042650f, - -0.845570895556026270f, - 0.533701001807152960f, -0.845673246987299070f, 0.533538836182603120f, - -0.845775567325583900f, - 0.533376650941355560f, -0.845877856567118890f, 0.533214446089372960f, - -0.845980114708143270f, - 0.533052221632619670f, -0.846082341744896940f, 0.532889977577059690f, - -0.846184537673621670f, - 0.532727713928658810f, -0.846286702490559710f, 0.532565430693382580f, - -0.846388836191954930f, - 0.532403127877198010f, -0.846490938774052020f, 0.532240805486072330f, - -0.846593010233097190f, - 0.532078463525973540f, -0.846695050565337450f, 0.531916102002870760f, - -0.846797059767020910f, - 0.531753720922733320f, -0.846899037834397350f, 0.531591320291531780f, - -0.847000984763716880f, - 0.531428900115236910f, -0.847102900551231500f, 0.531266460399820390f, - -0.847204785193193980f, - 0.531104001151255000f, -0.847306638685858320f, 0.530941522375513510f, - -0.847408461025479730f, - 0.530779024078570250f, -0.847510252208314330f, 0.530616506266399450f, - -0.847612012230619660f, - 0.530453968944976320f, -0.847713741088654270f, 0.530291412120277420f, - -0.847815438778677930f, - 0.530128835798278850f, -0.847917105296951410f, 0.529966239984958620f, - -0.848018740639736810f, - 0.529803624686294830f, -0.848120344803297120f, 0.529640989908265910f, - -0.848221917783896990f, - 0.529478335656852090f, -0.848323459577801530f, 0.529315661938033140f, - -0.848424970181277600f, - 0.529152968757790720f, -0.848526449590592650f, 0.528990256122106040f, - -0.848627897802015860f, - 0.528827524036961980f, -0.848729314811817010f, 0.528664772508341540f, - -0.848830700616267530f, - 0.528502001542228480f, -0.848932055211639610f, 0.528339211144607690f, - -0.849033378594206690f, - 0.528176401321464370f, -0.849134670760243630f, 0.528013572078784740f, - -0.849235931706025960f, - 0.527850723422555460f, -0.849337161427830670f, 0.527687855358763720f, - -0.849438359921935950f, - 0.527524967893398200f, -0.849539527184620890f, 0.527362061032447430f, - -0.849640663212165910f, - 0.527199134781901390f, -0.849741768000852440f, 0.527036189147750190f, - -0.849842841546963210f, - 0.526873224135984700f, -0.849943883846782210f, 0.526710239752597010f, - -0.850044894896594070f, - 0.526547236003579330f, -0.850145874692685210f, 0.526384212894925210f, - -0.850246823231342710f, - 0.526221170432628170f, -0.850347740508854980f, 0.526058108622682760f, - -0.850448626521511650f, - 0.525895027471084740f, -0.850549481265603370f, 0.525731926983829640f, - -0.850650304737422200f, - 0.525568807166914680f, -0.850751096933260790f, 0.525405668026336810f, - -0.850851857849413640f, - 0.525242509568094710f, -0.850952587482175730f, 0.525079331798186890f, - -0.851053285827843790f, - 0.524916134722612890f, -0.851153952882715340f, 0.524752918347373360f, - -0.851254588643089120f, - 0.524589682678468840f, -0.851355193105265200f, 0.524426427721901510f, - -0.851455766265544310f, - 0.524263153483673470f, -0.851556308120228870f, 0.524099859969787810f, - -0.851656818665622370f, - 0.523936547186248600f, -0.851757297898029120f, 0.523773215139060170f, - -0.851857745813754840f, - 0.523609863834228030f, -0.851958162409106380f, 0.523446493277757940f, - -0.852058547680391580f, - 0.523283103475656430f, -0.852158901623919830f, 0.523119694433931250f, - -0.852259224236001090f, - 0.522956266158590140f, -0.852359515512947090f, 0.522792818655642200f, - -0.852459775451070100f, - 0.522629351931096720f, -0.852560004046683970f, 0.522465865990963900f, - -0.852660201296103760f, - 0.522302360841254700f, -0.852760367195645300f, 0.522138836487980650f, - -0.852860501741625860f, - 0.521975292937154390f, -0.852960604930363630f, 0.521811730194788550f, - -0.853060676758178320f, - 0.521648148266897090f, -0.853160717221390420f, 0.521484547159494550f, - -0.853260726316321770f, - 0.521320926878595550f, -0.853360704039295430f, 0.521157287430216610f, - -0.853460650386635320f, - 0.520993628820373810f, -0.853560565354666840f, 0.520829951055084780f, - -0.853660448939716270f, - 0.520666254140367270f, -0.853760301138111300f, 0.520502538082239790f, - -0.853860121946180660f, - 0.520338802886721960f, -0.853959911360254060f, 0.520175048559833760f, - -0.854059669376662780f, - 0.520011275107596040f, -0.854159395991738730f, 0.519847482536030300f, - -0.854259091201815420f, - 0.519683670851158520f, -0.854358755003227440f, 0.519519840059003870f, - -0.854458387392310060f, - 0.519355990165589530f, -0.854557988365400530f, 0.519192121176940360f, - -0.854657557918836460f, - 0.519028233099080970f, -0.854757096048957110f, 0.518864325938037000f, - -0.854856602752102850f, - 0.518700399699835170f, -0.854956078024614820f, 0.518536454390502110f, - -0.855055521862835950f, - 0.518372490016066220f, -0.855154934263109620f, 0.518208506582555460f, - -0.855254315221781080f, - 0.518044504095999340f, -0.855353664735196030f, 0.517880482562427800f, - -0.855452982799701830f, - 0.517716441987871150f, -0.855552269411646970f, 0.517552382378360990f, - -0.855651524567380690f, - 0.517388303739929060f, -0.855750748263253920f, 0.517224206078608310f, - -0.855849940495618240f, - 0.517060089400432130f, -0.855949101260826790f, 0.516895953711434260f, - -0.856048230555233820f, - 0.516731799017649980f, -0.856147328375194470f, 0.516567625325114350f, - -0.856246394717065210f, - 0.516403432639863990f, -0.856345429577203610f, 0.516239220967935620f, - -0.856444432951968480f, - 0.516074990315366630f, -0.856543404837719960f, 0.515910740688195650f, - -0.856642345230818720f, - 0.515746472092461380f, -0.856741254127627470f, 0.515582184534203790f, - -0.856840131524509220f, - 0.515417878019463150f, -0.856938977417828650f, 0.515253552554280290f, - -0.857037791803951680f, - 0.515089208144697270f, -0.857136574679244870f, 0.514924844796756490f, - -0.857235326040076460f, - 0.514760462516501200f, -0.857334045882815590f, 0.514596061309975040f, - -0.857432734203832700f, - 0.514431641183222930f, -0.857531390999499040f, 0.514267202142289830f, - -0.857630016266187620f, - 0.514102744193221660f, -0.857728610000272120f, 0.513938267342065490f, - -0.857827172198127320f, - 0.513773771594868030f, -0.857925702856129790f, 0.513609256957677900f, - -0.858024201970656540f, - 0.513444723436543570f, -0.858122669538086020f, 0.513280171037514330f, - -0.858221105554798250f, - 0.513115599766640560f, -0.858319510017173440f, 0.512951009629972860f, - -0.858417882921594040f, - 0.512786400633563070f, -0.858516224264442740f, 0.512621772783463100f, - -0.858614534042104080f, - 0.512457126085725800f, -0.858712812250963520f, 0.512292460546404980f, - -0.858811058887407500f, - 0.512127776171554690f, -0.858909273947823900f, 0.511963072967230200f, - -0.859007457428601410f, - 0.511798350939487000f, -0.859105609326130340f, 0.511633610094381350f, - -0.859203729636801920f, - 0.511468850437970520f, -0.859301818357008360f, 0.511304071976311890f, - -0.859399875483143450f, - 0.511139274715464390f, -0.859497901011601620f, 0.510974458661486720f, - -0.859595894938779080f, - 0.510809623820439040f, -0.859693857261072610f, 0.510644770198381730f, - -0.859791787974880540f, - 0.510479897801375700f, -0.859889687076602290f, 0.510315006635483350f, - -0.859987554562638200f, - 0.510150096706766700f, -0.860085390429390140f, 0.509985168021289570f, - -0.860183194673260880f, - 0.509820220585115560f, -0.860280967290654510f, 0.509655254404309250f, - -0.860378708277976130f, - 0.509490269484936360f, -0.860476417631632070f, 0.509325265833062480f, - -0.860574095348029980f, - 0.509160243454754750f, -0.860671741423578380f, 0.508995202356080310f, - -0.860769355854687060f, - 0.508830142543106990f, -0.860866938637767310f, 0.508665064021904260f, - -0.860964489769230900f, - 0.508499966798540810f, -0.861062009245491480f, 0.508334850879087470f, - -0.861159497062963350f, - 0.508169716269614710f, -0.861256953218062060f, 0.508004562976194010f, - -0.861354377707204800f, - 0.507839391004897940f, -0.861451770526809210f, 0.507674200361798890f, - -0.861549131673294720f, - 0.507508991052970870f, -0.861646461143081300f, 0.507343763084487920f, - -0.861743758932590700f, - 0.507178516462425290f, -0.861841025038245330f, 0.507013251192858340f, - -0.861938259456469180f, - 0.506847967281863320f, -0.862035462183687210f, 0.506682664735517600f, - -0.862132633216325380f, - 0.506517343559898530f, -0.862229772550811240f, 0.506352003761084800f, - -0.862326880183573060f, - 0.506186645345155450f, -0.862423956111040500f, 0.506021268318189830f, - -0.862521000329644520f, - 0.505855872686268860f, -0.862618012835816740f, 0.505690458455473340f, - -0.862714993625990690f, - 0.505525025631885510f, -0.862811942696600330f, 0.505359574221587390f, - -0.862908860044081290f, - 0.505194104230662240f, -0.863005745664870210f, 0.505028615665194300f, - -0.863102599555404800f, - 0.504863108531267480f, -0.863199421712124160f, 0.504697582834967680f, - -0.863296212131468230f, - 0.504532038582380380f, -0.863392970809878310f, 0.504366475779592150f, - -0.863489697743797140f, - 0.504200894432690560f, -0.863586392929667990f, 0.504035294547763080f, - -0.863683056363935940f, - 0.503869676130898950f, -0.863779688043046610f, 0.503704039188186960f, - -0.863876287963447510f, - 0.503538383725717580f, -0.863972856121586700f, 0.503372709749581150f, - -0.864069392513913680f, - 0.503207017265869030f, -0.864165897136879300f, 0.503041306280673450f, - -0.864262369986934950f, - 0.502875576800086880f, -0.864358811060534030f, 0.502709828830203100f, - -0.864455220354130250f, - 0.502544062377115800f, -0.864551597864179230f, 0.502378277446919870f, - -0.864647943587137480f, - 0.502212474045710900f, -0.864744257519462380f, 0.502046652179584660f, - -0.864840539657612980f, - 0.501880811854638400f, -0.864936789998049020f, 0.501714953076969230f, - -0.865033008537231750f, - 0.501549075852675390f, -0.865129195271623690f, 0.501383180187855880f, - -0.865225350197688090f, - 0.501217266088609950f, -0.865321473311889800f, 0.501051333561038040f, - -0.865417564610694410f, - 0.500885382611240940f, -0.865513624090568980f, 0.500719413245319880f, - -0.865609651747981880f, - 0.500553425469377640f, -0.865705647579402270f, 0.500387419289516580f, - -0.865801611581300760f, - 0.500221394711840680f, -0.865897543750148820f, 0.500055351742453860f, - -0.865993444082419520f, - 0.499889290387461380f, -0.866089312574586770f, 0.499723210652968710f, - -0.866185149223125730f, - 0.499557112545081890f, -0.866280954024512990f, 0.499390996069908220f, - -0.866376726975225830f, - 0.499224861233555030f, -0.866472468071743050f, 0.499058708042130930f, - -0.866568177310544360f, - 0.498892536501744750f, -0.866663854688111020f, 0.498726346618505960f, - -0.866759500200925290f, - 0.498560138398525200f, -0.866855113845470320f, 0.498393911847913150f, - -0.866950695618231020f, - 0.498227666972781870f, -0.867046245515692650f, 0.498061403779243520f, - -0.867141763534342360f, - 0.497895122273410930f, -0.867237249670668400f, 0.497728822461398100f, - -0.867332703921159690f, - 0.497562504349319090f, -0.867428126282306920f, 0.497396167943289340f, - -0.867523516750601460f, - 0.497229813249424340f, -0.867618875322536230f, 0.497063440273840310f, - -0.867714201994605140f, - 0.496897049022654640f, -0.867809496763303210f, 0.496730639501984710f, - -0.867904759625126920f, - 0.496564211717949340f, -0.867999990576573400f, 0.496397765676667160f, - -0.868095189614141670f, - 0.496231301384258310f, -0.868190356734331310f, 0.496064818846843060f, - -0.868285491933643240f, - 0.495898318070542240f, -0.868380595208579800f, 0.495731799061478020f, - -0.868475666555644120f, - 0.495565261825772490f, -0.868570705971340900f, 0.495398706369549080f, - -0.868665713452175580f, - 0.495232132698931350f, -0.868760688994655190f, 0.495065540820043610f, - -0.868855632595287750f, - 0.494898930739011310f, -0.868950544250582380f, 0.494732302461959820f, - -0.869045423957049530f, - 0.494565655995016010f, -0.869140271711200560f, 0.494398991344306760f, - -0.869235087509548250f, - 0.494232308515959730f, -0.869329871348606730f, 0.494065607516103730f, - -0.869424623224890780f, - 0.493898888350867430f, -0.869519343134916970f, 0.493732151026381070f, - -0.869614031075202300f, - 0.493565395548774880f, -0.869708687042265560f, 0.493398621924179830f, - -0.869803311032626650f, - 0.493231830158728070f, -0.869897903042806340f, 0.493065020258551650f, - -0.869992463069326870f, - 0.492898192229784090f, -0.870086991108711350f, 0.492731346078558840f, - -0.870181487157484560f, - 0.492564481811010650f, -0.870275951212171830f, 0.492397599433274550f, - -0.870370383269300160f, - 0.492230698951486080f, -0.870464783325397670f, 0.492063780371782060f, - -0.870559151376993250f, - 0.491896843700299240f, -0.870653487420617540f, 0.491729888943175820f, - -0.870747791452801790f, - 0.491562916106550060f, -0.870842063470078860f, 0.491395925196560830f, - -0.870936303468982760f, - 0.491228916219348330f, -0.871030511446048260f, 0.491061889181052590f, - -0.871124687397811900f, - 0.490894844087815140f, -0.871218831320810900f, 0.490727780945777570f, - -0.871312943211583920f, - 0.490560699761082080f, -0.871407023066670950f, 0.490393600539872130f, - -0.871501070882612530f, - 0.490226483288291100f, -0.871595086655951090f, 0.490059348012483910f, - -0.871689070383229740f, - 0.489892194718595300f, -0.871783022060993010f, 0.489725023412770970f, - -0.871876941685786890f, - 0.489557834101157550f, -0.871970829254157700f, 0.489390626789901920f, - -0.872064684762653970f, - 0.489223401485152030f, -0.872158508207824480f, 0.489056158193055980f, - -0.872252299586219860f, - 0.488888896919763230f, -0.872346058894391540f, 0.488721617671423250f, - -0.872439786128892280f, - 0.488554320454186230f, -0.872533481286276060f, 0.488387005274203590f, - -0.872627144363097960f, - 0.488219672137626740f, -0.872720775355914300f, 0.488052321050608310f, - -0.872814374261282390f, - 0.487884952019301210f, -0.872907941075760970f, 0.487717565049858860f, - -0.873001475795909920f, - 0.487550160148436050f, -0.873094978418290090f, 0.487382737321187310f, - -0.873188448939463790f, - 0.487215296574268820f, -0.873281887355994210f, 0.487047837913836550f, - -0.873375293664446000f, - 0.486880361346047400f, -0.873468667861384880f, 0.486712866877059340f, - -0.873562009943377740f, - 0.486545354513030270f, -0.873655319906992630f, 0.486377824260119500f, - -0.873748597748798870f, - 0.486210276124486530f, -0.873841843465366750f, 0.486042710112291390f, - -0.873935057053268130f, - 0.485875126229695420f, -0.874028238509075630f, 0.485707524482859750f, - -0.874121387829363330f, - 0.485539904877947020f, -0.874214505010706300f, 0.485372267421119770f, - -0.874307590049680950f, - 0.485204612118541880f, -0.874400642942864790f, 0.485036938976377450f, - -0.874493663686836450f, - 0.484869248000791120f, -0.874586652278176110f, 0.484701539197948730f, - -0.874679608713464510f, - 0.484533812574016120f, -0.874772532989284150f, 0.484366068135160480f, - -0.874865425102218210f, - 0.484198305887549140f, -0.874958285048851540f, 0.484030525837350010f, - -0.875051112825769970f, - 0.483862727990732320f, -0.875143908429560250f, 0.483694912353865080f, - -0.875236671856810870f, - 0.483527078932918740f, -0.875329403104110780f, 0.483359227734063980f, - -0.875422102168050830f, - 0.483191358763471910f, -0.875514769045222740f, 0.483023472027315050f, - -0.875607403732219240f, - 0.482855567531765670f, -0.875700006225634600f, 0.482687645282997510f, - -0.875792576522063880f, - 0.482519705287184520f, -0.875885114618103700f, 0.482351747550501030f, - -0.875977620510351660f, - 0.482183772079122830f, -0.876070094195406600f, 0.482015778879225530f, - -0.876162535669868460f, - 0.481847767956986080f, -0.876254944930338400f, 0.481679739318581490f, - -0.876347321973419020f, - 0.481511692970189920f, -0.876439666795713610f, 0.481343628917989870f, - -0.876531979393827100f, - 0.481175547168160360f, -0.876624259764365310f, 0.481007447726881640f, - -0.876716507903935400f, - 0.480839330600333900f, -0.876808723809145760f, 0.480671195794698690f, - -0.876900907476605650f, - 0.480503043316157670f, -0.876993058902925780f, 0.480334873170893070f, - -0.877085178084718310f, - 0.480166685365088440f, -0.877177265018595940f, 0.479998479904927220f, - -0.877269319701173170f, - 0.479830256796594250f, -0.877361342129065140f, 0.479662016046274340f, - -0.877453332298888560f, - 0.479493757660153060f, -0.877545290207261240f, 0.479325481644417130f, - -0.877637215850802120f, - 0.479157188005253310f, -0.877729109226131570f, 0.478988876748849550f, - -0.877820970329870500f, - 0.478820547881394050f, -0.877912799158641730f, 0.478652201409075550f, - -0.878004595709069080f, - 0.478483837338084080f, -0.878096359977777130f, 0.478315455674609480f, - -0.878188091961392250f, - 0.478147056424843120f, -0.878279791656541460f, 0.477978639594976110f, - -0.878371459059853590f, - 0.477810205191201040f, -0.878463094167957870f, 0.477641753219710590f, - -0.878554696977485340f, - 0.477473283686698060f, -0.878646267485068130f, 0.477304796598358010f, - -0.878737805687339280f, - 0.477136291960884750f, -0.878829311580933360f, 0.476967769780474230f, - -0.878920785162485840f, - 0.476799230063322250f, -0.879012226428633410f, 0.476630672815625380f, - -0.879103635376014330f, - 0.476462098043581310f, -0.879195012001267370f, 0.476293505753387750f, - -0.879286356301033250f, - 0.476124895951243630f, -0.879377668271953180f, 0.475956268643348220f, - -0.879468947910670100f, - 0.475787623835901120f, -0.879560195213827890f, 0.475618961535103410f, - -0.879651410178071470f, - 0.475450281747155870f, -0.879742592800047410f, 0.475281584478260800f, - -0.879833743076402940f, - 0.475112869734620470f, -0.879924861003786860f, 0.474944137522437860f, - -0.880015946578848960f, - 0.474775387847917230f, -0.880106999798240360f, 0.474606620717262560f, - -0.880198020658613190f, - 0.474437836136679340f, -0.880289009156620890f, 0.474269034112372920f, - -0.880379965288918260f, - 0.474100214650550020f, -0.880470889052160750f, 0.473931377757417560f, - -0.880561780443005590f, - 0.473762523439182850f, -0.880652639458111010f, 0.473593651702054640f, - -0.880743466094136230f, - 0.473424762552241530f, -0.880834260347742040f, 0.473255855995953380f, - -0.880925022215589880f, - 0.473086932039400220f, -0.881015751694342760f, 0.472917990688792760f, - -0.881106448780665130f, - 0.472749031950342900f, -0.881197113471221980f, 0.472580055830262250f, - -0.881287745762680100f, - 0.472411062334764100f, -0.881378345651706810f, 0.472242051470061650f, - -0.881468913134971330f, - 0.472073023242368660f, -0.881559448209143780f, 0.471903977657900320f, - -0.881649950870895260f, - 0.471734914722871430f, -0.881740421116898320f, 0.471565834443498480f, - -0.881830858943826620f, - 0.471396736825997810f, -0.881921264348354940f, 0.471227621876586400f, - -0.882011637327159590f, - 0.471058489601482610f, -0.882101977876917580f, 0.470889340006904520f, - -0.882192285994307430f, - 0.470720173099071710f, -0.882282561676008600f, 0.470550988884203490f, - -0.882372804918702290f, - 0.470381787368520710f, -0.882463015719070040f, 0.470212568558244280f, - -0.882553194073795400f, - 0.470043332459595620f, -0.882643339979562790f, 0.469874079078797470f, - -0.882733453433057540f, - 0.469704808422072460f, -0.882823534430966730f, 0.469535520495644510f, - -0.882913582969978020f, - 0.469366215305737630f, -0.883003599046780720f, 0.469196892858576630f, - -0.883093582658065370f, - 0.469027553160387240f, -0.883183533800523280f, 0.468858196217395330f, - -0.883273452470847430f, - 0.468688822035827960f, -0.883363338665731580f, 0.468519430621912420f, - -0.883453192381870920f, - 0.468350021981876530f, -0.883543013615961880f, 0.468180596121949400f, - -0.883632802364701760f, - 0.468011153048359830f, -0.883722558624789660f, 0.467841692767338220f, - -0.883812282392925090f, - 0.467672215285114710f, -0.883901973665809470f, 0.467502720607920920f, - -0.883991632440144890f, - 0.467333208741988530f, -0.884081258712634990f, 0.467163679693549770f, - -0.884170852479984500f, - 0.466994133468838110f, -0.884260413738899080f, 0.466824570074086950f, - -0.884349942486086120f, - 0.466654989515530970f, -0.884439438718253700f, 0.466485391799405010f, - -0.884528902432111350f, - 0.466315776931944480f, -0.884618333624369920f, 0.466146144919386000f, - -0.884707732291740930f, - 0.465976495767966130f, -0.884797098430937790f, 0.465806829483922770f, - -0.884886432038674560f, - 0.465637146073493770f, -0.884975733111666660f, 0.465467445542917800f, - -0.885065001646630930f, - 0.465297727898434650f, -0.885154237640285110f, 0.465127993146283950f, - -0.885243441089348270f, - 0.464958241292706740f, -0.885332611990540590f, 0.464788472343944160f, - -0.885421750340583570f, - 0.464618686306237820f, -0.885510856136199950f, 0.464448883185830770f, - -0.885599929374113360f, - 0.464279062988965760f, -0.885688970051048960f, 0.464109225721887010f, - -0.885777978163732940f, - 0.463939371390838460f, -0.885866953708892790f, 0.463769500002065680f, - -0.885955896683257030f, - 0.463599611561814120f, -0.886044807083555490f, 0.463429706076329880f, - -0.886133684906519340f, - 0.463259783551860260f, -0.886222530148880640f, 0.463089843994652470f, - -0.886311342807372890f, - 0.462919887410955130f, -0.886400122878730490f, 0.462749913807016850f, - -0.886488870359689600f, - 0.462579923189086810f, -0.886577585246987040f, 0.462409915563415540f, - -0.886666267537360890f, - 0.462239890936253280f, -0.886754917227550950f, 0.462069849313851810f, - -0.886843534314297300f, - 0.461899790702462840f, -0.886932118794342080f, 0.461729715108338770f, - -0.887020670664428360f, - 0.461559622537733190f, -0.887109189921300060f, 0.461389512996899450f, - -0.887197676561702900f, - 0.461219386492092430f, -0.887286130582383150f, 0.461049243029567010f, - -0.887374551980088740f, - 0.460879082615578690f, -0.887462940751568840f, 0.460708905256384190f, - -0.887551296893573370f, - 0.460538710958240010f, -0.887639620402853930f, 0.460368499727404070f, - -0.887727911276163020f, - 0.460198271570134270f, -0.887816169510254550f, 0.460028026492689700f, - -0.887904395101883240f, - 0.459857764501329650f, -0.887992588047805560f, 0.459687485602313870f, - -0.888080748344778900f, - 0.459517189801903590f, -0.888168875989561620f, 0.459346877106359570f, - -0.888256970978913870f, - 0.459176547521944150f, -0.888345033309596240f, 0.459006201054919680f, - -0.888433062978371320f, - 0.458835837711549120f, -0.888521059982002260f, 0.458665457498096670f, - -0.888609024317253750f, - 0.458495060420826220f, -0.888696955980891710f, 0.458324646486003300f, - -0.888784854969682850f, - 0.458154215699893230f, -0.888872721280395520f, 0.457983768068762180f, - -0.888960554909799310f, - 0.457813303598877290f, -0.889048355854664570f, 0.457642822296505770f, - -0.889136124111763240f, - 0.457472324167916110f, -0.889223859677868210f, 0.457301809219376800f, - -0.889311562549753850f, - 0.457131277457156980f, -0.889399232724195520f, 0.456960728887527030f, - -0.889486870197969790f, - 0.456790163516757220f, -0.889574474967854580f, 0.456619581351118960f, - -0.889662047030628790f, - 0.456448982396883860f, -0.889749586383072890f, 0.456278366660324670f, - -0.889837093021967900f, - 0.456107734147714220f, -0.889924566944096720f, 0.455937084865326030f, - -0.890012008146243260f, - 0.455766418819434750f, -0.890099416625192210f, 0.455595736016314920f, - -0.890186792377730240f, - 0.455425036462242420f, -0.890274135400644480f, 0.455254320163493210f, - -0.890361445690723730f, - 0.455083587126343840f, -0.890448723244757880f, 0.454912837357072050f, - -0.890535968059537830f, - 0.454742070861955450f, -0.890623180131855930f, 0.454571287647273000f, - -0.890710359458505520f, - 0.454400487719303750f, -0.890797506036281490f, 0.454229671084327320f, - -0.890884619861979530f, - 0.454058837748624540f, -0.890971700932396750f, 0.453887987718476050f, - -0.891058749244331590f, - 0.453717121000163930f, -0.891145764794583180f, 0.453546237599970260f, - -0.891232747579952520f, - 0.453375337524177750f, -0.891319697597241390f, 0.453204420779070300f, - -0.891406614843252900f, - 0.453033487370931580f, -0.891493499314791380f, 0.452862537306046810f, - -0.891580351008662290f, - 0.452691570590700860f, -0.891667169921672390f, 0.452520587231180100f, - -0.891753956050629460f, - 0.452349587233771000f, -0.891840709392342720f, 0.452178570604760410f, - -0.891927429943622510f, - 0.452007537350436530f, -0.892014117701280360f, 0.451836487477087430f, - -0.892100772662129170f, - 0.451665420991002540f, -0.892187394822982480f, 0.451494337898471210f, - -0.892273984180655730f, - 0.451323238205783520f, -0.892360540731965360f, 0.451152121919230710f, - -0.892447064473728680f, - 0.450980989045103810f, -0.892533555402764690f, 0.450809839589695340f, - -0.892620013515893040f, - 0.450638673559297760f, -0.892706438809935280f, 0.450467490960204110f, - -0.892792831281713610f, - 0.450296291798708730f, -0.892879190928051680f, 0.450125076081105750f, - -0.892965517745774260f, - 0.449953843813690580f, -0.893051811731707450f, 0.449782595002758860f, - -0.893138072882678210f, - 0.449611329654606600f, -0.893224301195515320f, 0.449440047775531260f, - -0.893310496667048090f, - 0.449268749371829920f, -0.893396659294107610f, 0.449097434449801100f, - -0.893482789073525850f, - 0.448926103015743260f, -0.893568886002136020f, 0.448754755075956020f, - -0.893654950076772430f, - 0.448583390636739300f, -0.893740981294271040f, 0.448412009704393430f, - -0.893826979651468620f, - 0.448240612285220000f, -0.893912945145203250f, 0.448069198385520340f, - -0.893998877772314240f, - 0.447897768011597310f, -0.894084777529641990f, 0.447726321169753750f, - -0.894170644414028270f, - 0.447554857866293010f, -0.894256478422316040f, 0.447383378107519710f, - -0.894342279551349480f, - 0.447211881899738260f, -0.894428047797973800f, 0.447040369249254500f, - -0.894513783159035620f, - 0.446868840162374330f, -0.894599485631382580f, 0.446697294645404090f, - -0.894685155211863980f, - 0.446525732704651400f, -0.894770791897329550f, 0.446354154346423840f, - -0.894856395684630930f, - 0.446182559577030120f, -0.894941966570620750f, 0.446010948402779110f, - -0.895027504552152630f, - 0.445839320829980350f, -0.895113009626081760f, 0.445667676864944350f, - -0.895198481789264200f, - 0.445496016513981740f, -0.895283921038557580f, 0.445324339783404240f, - -0.895369327370820310f, - 0.445152646679523590f, -0.895454700782912450f, 0.444980937208652780f, - -0.895540041271694840f, - 0.444809211377105000f, -0.895625348834030000f, 0.444637469191193790f, - -0.895710623466781320f, - 0.444465710657234110f, -0.895795865166813420f, 0.444293935781540580f, - -0.895881073930992370f, - 0.444122144570429260f, -0.895966249756185110f, 0.443950337030216250f, - -0.896051392639260040f, - 0.443778513167218220f, -0.896136502577086770f, 0.443606672987753080f, - -0.896221579566535920f, - 0.443434816498138430f, -0.896306623604479660f, 0.443262943704693380f, - -0.896391634687790820f, - 0.443091054613736990f, -0.896476612813344010f, 0.442919149231588980f, - -0.896561557978014960f, - 0.442747227564570130f, -0.896646470178680150f, 0.442575289619001170f, - -0.896731349412217880f, - 0.442403335401204130f, -0.896816195675507190f, 0.442231364917501090f, - -0.896901008965428680f, - 0.442059378174214760f, -0.896985789278863970f, 0.441887375177668960f, - -0.897070536612695870f, - 0.441715355934187310f, -0.897155250963808550f, 0.441543320450094920f, - -0.897239932329087050f, - 0.441371268731716620f, -0.897324580705418320f, 0.441199200785378660f, - -0.897409196089689720f, - 0.441027116617407340f, -0.897493778478790190f, 0.440855016234129430f, - -0.897578327869610230f, - 0.440682899641873020f, -0.897662844259040750f, 0.440510766846965880f, - -0.897747327643974690f, - 0.440338617855737300f, -0.897831778021305650f, 0.440166452674516480f, - -0.897916195387928550f, - 0.439994271309633260f, -0.898000579740739880f, 0.439822073767418610f, - -0.898084931076636780f, - 0.439649860054203420f, -0.898169249392518080f, 0.439477630176319860f, - -0.898253534685283570f, - 0.439305384140100060f, -0.898337786951834190f, 0.439133121951876930f, - -0.898422006189072530f, - 0.438960843617984430f, -0.898506192393901840f, 0.438788549144756290f, - -0.898590345563227030f, - 0.438616238538527710f, -0.898674465693953820f, 0.438443911805633860f, - -0.898758552782989440f, - 0.438271568952410480f, -0.898842606827242260f, 0.438099209985194580f, - -0.898926627823621870f, - 0.437926834910322860f, -0.899010615769039070f, 0.437754443734133470f, - -0.899094570660405770f, - 0.437582036462964340f, -0.899178492494635330f, 0.437409613103154850f, - -0.899262381268642000f, - 0.437237173661044200f, -0.899346236979341460f, 0.437064718142972370f, - -0.899430059623650860f, - 0.436892246555280470f, -0.899513849198487870f, 0.436719758904309310f, - -0.899597605700772180f, - 0.436547255196401250f, -0.899681329127423930f, 0.436374735437898510f, - -0.899765019475365020f, - 0.436202199635143950f, -0.899848676741518580f, 0.436029647794481670f, - -0.899932300922808400f, - 0.435857079922255470f, -0.900015892016160280f, 0.435684496024810520f, - -0.900099450018500340f, - 0.435511896108492170f, -0.900182974926756700f, 0.435339280179646070f, - -0.900266466737858480f, - 0.435166648244619370f, -0.900349925448735600f, 0.434994000309758710f, - -0.900433351056319830f, - 0.434821336381412350f, -0.900516743557543520f, 0.434648656465928430f, - -0.900600102949340790f, - 0.434475960569655710f, -0.900683429228646860f, 0.434303248698944100f, - -0.900766722392397860f, - 0.434130520860143310f, -0.900849982437531450f, 0.433957777059604480f, - -0.900933209360986200f, - 0.433785017303678520f, -0.901016403159702330f, 0.433612241598717640f, - -0.901099563830620950f, - 0.433439449951074200f, -0.901182691370684410f, 0.433266642367100940f, - -0.901265785776836580f, - 0.433093818853152010f, -0.901348847046022030f, 0.432920979415581220f, - -0.901431875175186970f, - 0.432748124060743760f, -0.901514870161278630f, 0.432575252794994810f, - -0.901597832001245660f, - 0.432402365624690140f, -0.901680760692037730f, 0.432229462556186770f, - -0.901763656230605610f, - 0.432056543595841450f, -0.901846518613901860f, 0.431883608750012300f, - -0.901929347838879350f, - 0.431710658025057370f, -0.902012143902493070f, 0.431537691427335500f, - -0.902094906801698900f, - 0.431364708963206440f, -0.902177636533453510f, 0.431191710639030000f, - -0.902260333094715540f, - 0.431018696461167080f, -0.902342996482444200f, 0.430845666435978820f, - -0.902425626693600270f, - 0.430672620569826860f, -0.902508223725145830f, 0.430499558869073930f, - -0.902590787574043870f, - 0.430326481340082610f, -0.902673318237258830f, 0.430153387989216930f, - -0.902755815711756120f, - 0.429980278822840570f, -0.902838279994502830f, 0.429807153847318770f, - -0.902920711082466630f, - 0.429634013069016500f, -0.903003108972617040f, 0.429460856494299490f, - -0.903085473661924600f, - 0.429287684129534720f, -0.903167805147360610f, 0.429114495981088690f, - -0.903250103425898400f, - 0.428941292055329550f, -0.903332368494511820f, 0.428768072358625240f, - -0.903414600350176290f, - 0.428594836897344400f, -0.903496798989868450f, 0.428421585677856760f, - -0.903578964410565950f, - 0.428248318706531910f, -0.903661096609247980f, 0.428075035989740780f, - -0.903743195582894620f, - 0.427901737533854240f, -0.903825261328487390f, 0.427728423345243860f, - -0.903907293843009050f, - 0.427555093430282200f, -0.903989293123443340f, 0.427381747795341770f, - -0.904071259166775440f, - 0.427208386446796370f, -0.904153191969991670f, 0.427035009391019790f, - -0.904235091530079750f, - 0.426861616634386490f, -0.904316957844028320f, 0.426688208183271970f, - -0.904398790908827350f, - 0.426514784044051520f, -0.904480590721468250f, 0.426341344223101880f, - -0.904562357278943190f, - 0.426167888726799620f, -0.904644090578246240f, 0.425994417561522450f, - -0.904725790616371930f, - 0.425820930733648300f, -0.904807457390316540f, 0.425647428249555590f, - -0.904889090897077470f, - 0.425473910115623910f, -0.904970691133653250f, 0.425300376338232590f, - -0.905052258097043590f, - 0.425126826923762410f, -0.905133791784249580f, 0.424953261878594060f, - -0.905215292192273480f, - 0.424779681209108810f, -0.905296759318118820f, 0.424606084921689220f, - -0.905378193158789980f, - 0.424432473022717420f, -0.905459593711293250f, 0.424258845518577010f, - -0.905540960972635480f, - 0.424085202415651670f, -0.905622294939825160f, 0.423911543720325580f, - -0.905703595609872010f, - 0.423737869438983950f, -0.905784862979786440f, 0.423564179578011960f, - -0.905866097046580940f, - 0.423390474143796100f, -0.905947297807268460f, 0.423216753142722780f, - -0.906028465258863490f, - 0.423043016581179100f, -0.906109599398381980f, 0.422869264465553170f, - -0.906190700222840540f, - 0.422695496802232950f, -0.906271767729257660f, 0.422521713597607870f, - -0.906352801914652280f, - 0.422347914858067000f, -0.906433802776045460f, 0.422174100590000820f, - -0.906514770310458800f, - 0.422000270799799790f, -0.906595704514915330f, 0.421826425493854910f, - -0.906676605386439460f, - 0.421652564678558380f, -0.906757472922056550f, 0.421478688360302220f, - -0.906838307118793540f, - 0.421304796545479700f, -0.906919107973678030f, 0.421130889240484140f, - -0.906999875483739610f, - 0.420956966451709440f, -0.907080609646008450f, 0.420783028185550630f, - -0.907161310457516250f, - 0.420609074448402510f, -0.907241977915295930f, 0.420435105246661220f, - -0.907322612016381310f, - 0.420261120586723050f, -0.907403212757808000f, 0.420087120474984590f, - -0.907483780136612570f, - 0.419913104917843730f, -0.907564314149832520f, 0.419739073921698180f, - -0.907644814794507090f, - 0.419565027492946940f, -0.907725282067676330f, 0.419390965637989050f, - -0.907805715966381820f, - 0.419216888363223960f, -0.907886116487666150f, 0.419042795675052480f, - -0.907966483628573240f, - 0.418868687579875110f, -0.908046817386148340f, 0.418694564084093610f, - -0.908127117757437600f, - 0.418520425194109700f, -0.908207384739488700f, 0.418346270916326310f, - -0.908287618329350450f, - 0.418172101257146430f, -0.908367818524072780f, 0.417997916222973550f, - -0.908447985320707250f, - 0.417823715820212380f, -0.908528118716306120f, 0.417649500055267410f, - -0.908608218707923190f, - 0.417475268934544340f, -0.908688285292613360f, 0.417301022464449060f, - -0.908768318467432780f, - 0.417126760651387870f, -0.908848318229439120f, 0.416952483501768280f, - -0.908928284575690640f, - 0.416778191021997590f, -0.909008217503247450f, 0.416603883218484410f, - -0.909088117009170580f, - 0.416429560097637320f, -0.909167983090522270f, 0.416255221665865480f, - -0.909247815744366310f, - 0.416080867929579320f, -0.909327614967767260f, 0.415906498895188770f, - -0.909407380757791260f, - 0.415732114569105420f, -0.909487113111505430f, 0.415557714957740580f, - -0.909566812025978220f, - 0.415383300067506290f, -0.909646477498279540f, 0.415208869904815650f, - -0.909726109525480160f, - 0.415034424476081630f, -0.909805708104652220f, 0.414859963787718390f, - -0.909885273232869160f, - 0.414685487846140010f, -0.909964804907205660f, 0.414510996657761810f, - -0.910044303124737390f, - 0.414336490228999210f, -0.910123767882541570f, 0.414161968566268080f, - -0.910203199177696540f, - 0.413987431675985510f, -0.910282597007281760f, 0.413812879564568300f, - -0.910361961368377990f, - 0.413638312238434560f, -0.910441292258067140f, 0.413463729704002580f, - -0.910520589673432630f, - 0.413289131967690960f, -0.910599853611558930f, 0.413114519035919560f, - -0.910679084069531570f, - 0.412939890915108020f, -0.910758281044437570f, 0.412765247611677320f, - -0.910837444533365010f, - 0.412590589132048380f, -0.910916574533403240f, 0.412415915482642730f, - -0.910995671041643140f, - 0.412241226669883000f, -0.911074734055176250f, 0.412066522700191560f, - -0.911153763571095900f, - 0.411891803579992220f, -0.911232759586496190f, 0.411717069315708670f, - -0.911311722098472670f, - 0.411542319913765280f, -0.911390651104122320f, 0.411367555380587340f, - -0.911469546600543020f, - 0.411192775722600160f, -0.911548408584833990f, 0.411017980946230270f, - -0.911627237054095650f, - 0.410843171057903910f, -0.911706032005429880f, 0.410668346064048780f, - -0.911784793435939430f, - 0.410493505971092520f, -0.911863521342728520f, 0.410318650785463260f, - -0.911942215722902570f, - 0.410143780513590350f, -0.912020876573568230f, 0.409968895161902820f, - -0.912099503891833470f, - 0.409793994736831200f, -0.912178097674807060f, 0.409619079244805840f, - -0.912256657919599650f, - 0.409444148692257590f, -0.912335184623322750f, 0.409269203085618700f, - -0.912413677783089020f, - 0.409094242431320920f, -0.912492137396012650f, 0.408919266735797480f, - -0.912570563459208730f, - 0.408744276005481520f, -0.912648955969793900f, 0.408569270246806780f, - -0.912727314924885900f, - 0.408394249466208110f, -0.912805640321603500f, 0.408219213670120100f, - -0.912883932157067200f, - 0.408044162864978740f, -0.912962190428398100f, 0.407869097057219960f, - -0.913040415132719160f, - 0.407694016253280170f, -0.913118606267154130f, 0.407518920459597030f, - -0.913196763828828200f, - 0.407343809682607970f, -0.913274887814867760f, 0.407168683928751610f, - -0.913352978222400250f, - 0.406993543204466460f, -0.913431035048554720f, 0.406818387516192370f, - -0.913509058290461140f, - 0.406643216870369140f, -0.913587047945250810f, 0.406468031273437000f, - -0.913665004010056350f, - 0.406292830731837470f, -0.913742926482011390f, 0.406117615252011790f, - -0.913820815358251100f, - 0.405942384840402570f, -0.913898670635911680f, 0.405767139503452220f, - -0.913976492312130520f, - 0.405591879247603870f, -0.914054280384046460f, 0.405416604079301750f, - -0.914132034848799460f, - 0.405241314004989860f, -0.914209755703530690f, 0.405066009031113390f, - -0.914287442945382440f, - 0.404890689164117750f, -0.914365096571498450f, 0.404715354410448650f, - -0.914442716579023870f, - 0.404540004776553110f, -0.914520302965104450f, 0.404364640268877810f, - -0.914597855726887790f, - 0.404189260893870750f, -0.914675374861522390f, 0.404013866657980060f, - -0.914752860366158100f, - 0.403838457567654130f, -0.914830312237946090f, 0.403663033629342750f, - -0.914907730474038620f, - 0.403487594849495310f, -0.914985115071589310f, 0.403312141234562660f, - -0.915062466027752760f, - 0.403136672790995240f, -0.915139783339685260f, 0.402961189525244960f, - -0.915217067004543750f, - 0.402785691443763640f, -0.915294317019487050f, 0.402610178553003680f, - -0.915371533381674760f, - 0.402434650859418540f, -0.915448716088267830f, 0.402259108369461440f, - -0.915525865136428530f, - 0.402083551089587040f, -0.915602980523320230f, 0.401907979026249860f, - -0.915680062246107650f, - 0.401732392185905010f, -0.915757110301956720f, 0.401556790575008650f, - -0.915834124688034710f, - 0.401381174200016790f, -0.915911105401509880f, 0.401205543067386760f, - -0.915988052439551840f, - 0.401029897183575790f, -0.916064965799331610f, 0.400854236555041650f, - -0.916141845478021350f, - 0.400678561188243350f, -0.916218691472794110f, 0.400502871089639500f, - -0.916295503780824800f, - 0.400327166265690150f, -0.916372282399289140f, 0.400151446722855300f, - -0.916449027325364040f, - 0.399975712467595390f, -0.916525738556228100f, 0.399799963506372090f, - -0.916602416089060680f, - 0.399624199845646790f, -0.916679059921042700f, 0.399448421491882260f, - -0.916755670049355990f, - 0.399272628451540930f, -0.916832246471183890f, 0.399096820731086600f, - -0.916908789183710990f, - 0.398920998336983020f, -0.916985298184122890f, 0.398745161275694480f, - -0.917061773469606820f, - 0.398569309553686360f, -0.917138215037350710f, 0.398393443177423920f, - -0.917214622884544250f, - 0.398217562153373620f, -0.917290997008377910f, 0.398041666488001930f, - -0.917367337406043810f, - 0.397865756187775750f, -0.917443644074735220f, 0.397689831259163240f, - -0.917519917011646260f, - 0.397513891708632330f, -0.917596156213972950f, 0.397337937542652120f, - -0.917672361678911750f, - 0.397161968767691720f, -0.917748533403661250f, 0.396985985390220900f, - -0.917824671385420570f, - 0.396809987416710420f, -0.917900775621390390f, 0.396633974853630830f, - -0.917976846108772730f, - 0.396457947707453960f, -0.918052882844770380f, 0.396281905984651680f, - -0.918128885826587910f, - 0.396105849691696320f, -0.918204855051430900f, 0.395929778835061360f, - -0.918280790516506130f, - 0.395753693421220080f, -0.918356692219021720f, 0.395577593456646950f, - -0.918432560156186790f, - 0.395401478947816300f, -0.918508394325212250f, 0.395225349901203730f, - -0.918584194723309540f, - 0.395049206323284880f, -0.918659961347691900f, 0.394873048220535760f, - -0.918735694195573550f, - 0.394696875599433670f, -0.918811393264169940f, 0.394520688466455550f, - -0.918887058550697970f, - 0.394344486828079650f, -0.918962690052375630f, 0.394168270690784250f, - -0.919038287766421940f, - 0.393992040061048100f, -0.919113851690057770f, 0.393815794945351130f, - -0.919189381820504470f, - 0.393639535350172880f, -0.919264878154985250f, 0.393463261281994380f, - -0.919340340690724230f, - 0.393286972747296570f, -0.919415769424946960f, 0.393110669752560760f, - -0.919491164354880100f, - 0.392934352304269600f, -0.919566525477751530f, 0.392758020408905280f, - -0.919641852790790470f, - 0.392581674072951530f, -0.919717146291227360f, 0.392405313302891860f, - -0.919792405976293750f, - 0.392228938105210370f, -0.919867631843222950f, 0.392052548486392200f, - -0.919942823889248640f, - 0.391876144452922350f, -0.920017982111606570f, 0.391699726011287050f, - -0.920093106507533070f, - 0.391523293167972350f, -0.920168197074266450f, 0.391346845929465610f, - -0.920243253809045370f, - 0.391170384302253980f, -0.920318276709110480f, 0.390993908292825380f, - -0.920393265771703550f, - 0.390817417907668610f, -0.920468220994067110f, 0.390640913153272370f, - -0.920543142373445480f, - 0.390464394036126650f, -0.920618029907083860f, 0.390287860562721360f, - -0.920692883592229010f, - 0.390111312739546910f, -0.920767703426128790f, 0.389934750573094790f, - -0.920842489406032080f, - 0.389758174069856410f, -0.920917241529189520f, 0.389581583236324360f, - -0.920991959792852310f, - 0.389404978078991100f, -0.921066644194273530f, 0.389228358604349730f, - -0.921141294730707270f, - 0.389051724818894500f, -0.921215911399408730f, 0.388875076729119250f, - -0.921290494197634540f, - 0.388698414341519250f, -0.921365043122642340f, 0.388521737662589740f, - -0.921439558171691320f, - 0.388345046698826300f, -0.921514039342041900f, 0.388168341456725850f, - -0.921588486630955380f, - 0.387991621942784910f, -0.921662900035694730f, 0.387814888163501290f, - -0.921737279553523800f, - 0.387638140125372680f, -0.921811625181708120f, 0.387461377834897920f, - -0.921885936917513970f, - 0.387284601298575890f, -0.921960214758209110f, 0.387107810522905990f, - -0.922034458701062820f, - 0.386931005514388690f, -0.922108668743345070f, 0.386754186279524130f, - -0.922182844882327600f, - 0.386577352824813980f, -0.922256987115283030f, 0.386400505156759610f, - -0.922331095439485330f, - 0.386223643281862980f, -0.922405169852209880f, 0.386046767206627280f, - -0.922479210350733100f, - 0.385869876937555310f, -0.922553216932332830f, 0.385692972481151200f, - -0.922627189594287800f, - 0.385516053843919020f, -0.922701128333878520f, 0.385339121032363340f, - -0.922775033148386380f, - 0.385162174052989970f, -0.922848904035094120f, 0.384985212912304200f, - -0.922922740991285680f, - 0.384808237616812930f, -0.922996544014246250f, 0.384631248173022740f, - -0.923070313101262420f, - 0.384454244587440870f, -0.923144048249621820f, 0.384277226866575620f, - -0.923217749456613500f, - 0.384100195016935040f, -0.923291416719527640f, 0.383923149045028500f, - -0.923365050035655610f, - 0.383746088957365010f, -0.923438649402290370f, 0.383569014760454960f, - -0.923512214816725520f, - 0.383391926460808770f, -0.923585746276256560f, 0.383214824064937180f, - -0.923659243778179980f, - 0.383037707579352130f, -0.923732707319793180f, 0.382860577010565360f, - -0.923806136898395410f, - 0.382683432365089840f, -0.923879532511286740f, 0.382506273649438400f, - -0.923952894155768640f, - 0.382329100870124510f, -0.924026221829143850f, 0.382151914033662720f, - -0.924099515528716280f, - 0.381974713146567220f, -0.924172775251791200f, 0.381797498215353690f, - -0.924246000995674890f, - 0.381620269246537520f, -0.924319192757675160f, 0.381443026246634730f, - -0.924392350535101050f, - 0.381265769222162490f, -0.924465474325262600f, 0.381088498179637520f, - -0.924538564125471420f, - 0.380911213125578130f, -0.924611619933039970f, 0.380733914066502090f, - -0.924684641745282530f, - 0.380556601008928570f, -0.924757629559513910f, 0.380379273959376710f, - -0.924830583373050800f, - 0.380201932924366050f, -0.924903503183210910f, 0.380024577910417380f, - -0.924976388987313050f, - 0.379847208924051110f, -0.925049240782677580f, 0.379669825971789000f, - -0.925122058566625770f, - 0.379492429060152740f, -0.925194842336480420f, 0.379315018195664430f, - -0.925267592089565550f, - 0.379137593384847430f, -0.925340307823206200f, 0.378960154634224720f, - -0.925412989534729060f, - 0.378782701950320600f, -0.925485637221461490f, 0.378605235339659290f, - -0.925558250880732620f, - 0.378427754808765620f, -0.925630830509872720f, 0.378250260364165310f, - -0.925703376106213120f, - 0.378072752012383990f, -0.925775887667086740f, 0.377895229759948550f, - -0.925848365189827270f, - 0.377717693613385810f, -0.925920808671769960f, 0.377540143579222940f, - -0.925993218110251480f, - 0.377362579663988450f, -0.926065593502609310f, 0.377185001874210450f, - -0.926137934846182560f, - 0.377007410216418310f, -0.926210242138311270f, 0.376829804697141220f, - -0.926282515376337210f, - 0.376652185322909620f, -0.926354754557602860f, 0.376474552100253880f, - -0.926426959679452100f, - 0.376296905035704790f, -0.926499130739230510f, 0.376119244135794390f, - -0.926571267734284220f, - 0.375941569407054420f, -0.926643370661961230f, 0.375763880856017750f, - -0.926715439519610330f, - 0.375586178489217330f, -0.926787474304581750f, 0.375408462313186590f, - -0.926859475014227160f, - 0.375230732334460030f, -0.926931441645899130f, 0.375052988559571860f, - -0.927003374196951670f, - 0.374875230995057600f, -0.927075272664740100f, 0.374697459647452770f, - -0.927147137046620880f, - 0.374519674523293210f, -0.927218967339951790f, 0.374341875629116030f, - -0.927290763542091720f, - 0.374164062971457990f, -0.927362525650401110f, 0.373986236556857090f, - -0.927434253662241300f, - 0.373808396391851370f, -0.927505947574975180f, 0.373630542482979280f, - -0.927577607385966730f, - 0.373452674836780410f, -0.927649233092581180f, 0.373274793459794030f, - -0.927720824692185200f, - 0.373096898358560690f, -0.927792382182146320f, 0.372918989539620770f, - -0.927863905559833780f, - 0.372741067009515810f, -0.927935394822617890f, 0.372563130774787370f, - -0.928006849967869970f, - 0.372385180841977360f, -0.928078270992963140f, 0.372207217217628950f, - -0.928149657895271150f, - 0.372029239908284960f, -0.928221010672169440f, 0.371851248920489540f, - -0.928292329321034560f, - 0.371673244260786630f, -0.928363613839244370f, 0.371495225935720760f, - -0.928434864224177980f, - 0.371317193951837600f, -0.928506080473215480f, 0.371139148315682510f, - -0.928577262583738850f, - 0.370961089033802040f, -0.928648410553130520f, 0.370783016112742720f, - -0.928719524378774700f, - 0.370604929559051670f, -0.928790604058057020f, 0.370426829379276900f, - -0.928861649588363700f, - 0.370248715579966360f, -0.928932660967082820f, 0.370070588167669130f, - -0.929003638191603360f, - 0.369892447148934270f, -0.929074581259315750f, 0.369714292530311240f, - -0.929145490167611720f, - 0.369536124318350760f, -0.929216364913883930f, 0.369357942519603190f, - -0.929287205495526790f, - 0.369179747140620070f, -0.929358011909935500f, 0.369001538187952780f, - -0.929428784154506800f, - 0.368823315668153960f, -0.929499522226638560f, 0.368645079587776150f, - -0.929570226123729860f, - 0.368466829953372320f, -0.929640895843181330f, 0.368288566771496680f, - -0.929711531382394370f, - 0.368110290048703050f, -0.929782132738772190f, 0.367931999791546500f, - -0.929852699909718750f, - 0.367753696006582090f, -0.929923232892639560f, 0.367575378700365330f, - -0.929993731684941480f, - 0.367397047879452820f, -0.930064196284032360f, 0.367218703550400930f, - -0.930134626687321390f, - 0.367040345719767240f, -0.930205022892219070f, 0.366861974394109220f, - -0.930275384896137040f, - 0.366683589579984930f, -0.930345712696488470f, 0.366505191283953480f, - -0.930416006290687550f, - 0.366326779512573590f, -0.930486265676149780f, 0.366148354272405390f, - -0.930556490850291800f, - 0.365969915570008910f, -0.930626681810531650f, 0.365791463411944570f, - -0.930696838554288860f, - 0.365612997804773960f, -0.930766961078983710f, 0.365434518755058390f, - -0.930837049382038150f, - 0.365256026269360380f, -0.930907103460875020f, 0.365077520354242180f, - -0.930977123312918930f, - 0.364899001016267380f, -0.931047108935595170f, 0.364720468261999390f, - -0.931117060326330790f, - 0.364541922098002180f, -0.931186977482553750f, 0.364363362530840730f, - -0.931256860401693420f, - 0.364184789567079840f, -0.931326709081180430f, 0.364006203213285530f, - -0.931396523518446600f, - 0.363827603476023610f, -0.931466303710925090f, 0.363648990361860550f, - -0.931536049656050300f, - 0.363470363877363870f, -0.931605761351257830f, 0.363291724029100700f, - -0.931675438793984620f, - 0.363113070823639530f, -0.931745081981668720f, 0.362934404267548750f, - -0.931814690911749620f, - 0.362755724367397230f, -0.931884265581668150f, 0.362577031129754870f, - -0.931953805988865900f, - 0.362398324561191310f, -0.932023312130786490f, 0.362219604668277570f, - -0.932092784004874050f, - 0.362040871457584350f, -0.932162221608574320f, 0.361862124935682980f, - -0.932231624939334540f, - 0.361683365109145950f, -0.932300993994602640f, 0.361504591984545260f, - -0.932370328771828460f, - 0.361325805568454340f, -0.932439629268462360f, 0.361147005867446190f, - -0.932508895481956700f, - 0.360968192888095290f, -0.932578127409764420f, 0.360789366636975690f, - -0.932647325049340340f, - 0.360610527120662270f, -0.932716488398140250f, 0.360431674345730810f, - -0.932785617453620990f, - 0.360252808318756830f, -0.932854712213241230f, 0.360073929046317080f, - -0.932923772674460140f, - 0.359895036534988280f, -0.932992798834738850f, 0.359716130791347570f, - -0.933061790691539380f, - 0.359537211821973180f, -0.933130748242325110f, 0.359358279633443080f, - -0.933199671484560730f, - 0.359179334232336560f, -0.933268560415712050f, 0.359000375625232630f, - -0.933337415033246080f, - 0.358821403818710920f, -0.933406235334631520f, 0.358642418819352100f, - -0.933475021317337950f, - 0.358463420633736540f, -0.933543772978836170f, 0.358284409268445900f, - -0.933612490316598540f, - 0.358105384730061760f, -0.933681173328098300f, 0.357926347025166070f, - -0.933749822010810580f, - 0.357747296160342010f, -0.933818436362210960f, 0.357568232142172260f, - -0.933887016379776890f, - 0.357389154977241000f, -0.933955562060986730f, 0.357210064672131900f, - -0.934024073403320500f, - 0.357030961233430030f, -0.934092550404258870f, 0.356851844667720410f, - -0.934160993061284420f, - 0.356672714981588260f, -0.934229401371880820f, 0.356493572181620200f, - -0.934297775333532530f, - 0.356314416274402360f, -0.934366114943725900f, 0.356135247266522180f, - -0.934434420199948050f, - 0.355956065164567010f, -0.934502691099687870f, 0.355776869975124640f, - -0.934570927640435030f, - 0.355597661704783960f, -0.934639129819680780f, 0.355418440360133590f, - -0.934707297634917440f, - 0.355239205947763370f, -0.934775431083638700f, 0.355059958474263030f, - -0.934843530163339430f, - 0.354880697946222790f, -0.934911594871516090f, 0.354701424370233940f, - -0.934979625205665800f, - 0.354522137752887430f, -0.935047621163287430f, 0.354342838100775600f, - -0.935115582741880890f, - 0.354163525420490510f, -0.935183509938947500f, 0.353984199718624830f, - -0.935251402751989810f, - 0.353804861001772160f, -0.935319261178511500f, 0.353625509276525970f, - -0.935387085216017770f, - 0.353446144549480870f, -0.935454874862014620f, 0.353266766827231180f, - -0.935522630114009930f, - 0.353087376116372530f, -0.935590350969512370f, 0.352907972423500360f, - -0.935658037426032040f, - 0.352728555755210730f, -0.935725689481080370f, 0.352549126118100580f, - -0.935793307132169900f, - 0.352369683518766630f, -0.935860890376814640f, 0.352190227963806890f, - -0.935928439212529660f, - 0.352010759459819240f, -0.935995953636831300f, 0.351831278013402030f, - -0.936063433647237540f, - 0.351651783631154680f, -0.936130879241266920f, 0.351472276319676260f, - -0.936198290416440090f, - 0.351292756085567150f, -0.936265667170278260f, 0.351113222935427630f, - -0.936333009500304180f, - 0.350933676875858360f, -0.936400317404042060f, 0.350754117913461170f, - -0.936467590879016880f, - 0.350574546054837570f, -0.936534829922755500f, 0.350394961306590200f, - -0.936602034532785570f, - 0.350215363675321740f, -0.936669204706636060f, 0.350035753167635300f, - -0.936736340441837620f, - 0.349856129790135030f, -0.936803441735921560f, 0.349676493549424760f, - -0.936870508586420960f, - 0.349496844452109600f, -0.936937540990869900f, 0.349317182504794320f, - -0.937004538946803690f, - 0.349137507714085030f, -0.937071502451759190f, 0.348957820086587600f, - -0.937138431503274140f, - 0.348778119628908420f, -0.937205326098887960f, 0.348598406347655040f, - -0.937272186236140950f, - 0.348418680249434510f, -0.937339011912574960f, 0.348238941340855310f, - -0.937405803125732850f, - 0.348059189628525780f, -0.937472559873159140f, 0.347879425119054510f, - -0.937539282152399230f, - 0.347699647819051490f, -0.937605969960999990f, 0.347519857735126110f, - -0.937672623296509470f, - 0.347340054873889190f, -0.937739242156476970f, 0.347160239241951330f, - -0.937805826538453010f, - 0.346980410845923680f, -0.937872376439989890f, 0.346800569692418400f, - -0.937938891858640210f, - 0.346620715788047320f, -0.938005372791958840f, 0.346440849139423580f, - -0.938071819237501160f, - 0.346260969753160170f, -0.938138231192824360f, 0.346081077635870480f, - -0.938204608655486490f, - 0.345901172794169100f, -0.938270951623047080f, 0.345721255234670120f, - -0.938337260093066950f, - 0.345541324963989150f, -0.938403534063108060f, 0.345361381988741170f, - -0.938469773530733800f, - 0.345181426315542610f, -0.938535978493508560f, 0.345001457951009780f, - -0.938602148948998290f, - 0.344821476901759290f, -0.938668284894770170f, 0.344641483174409070f, - -0.938734386328392460f, - 0.344461476775576480f, -0.938800453247434770f, 0.344281457711880230f, - -0.938866485649468060f, - 0.344101425989938980f, -0.938932483532064490f, 0.343921381616371700f, - -0.938998446892797540f, - 0.343741324597798600f, -0.939064375729241950f, 0.343561254940839330f, - -0.939130270038973650f, - 0.343381172652115100f, -0.939196129819569900f, 0.343201077738246710f, - -0.939261955068609100f, - 0.343020970205855540f, -0.939327745783671400f, 0.342840850061564060f, - -0.939393501962337510f, - 0.342660717311994380f, -0.939459223602189920f, 0.342480571963769850f, - -0.939524910700812120f, - 0.342300414023513690f, -0.939590563255789160f, 0.342120243497849590f, - -0.939656181264707070f, - 0.341940060393402300f, -0.939721764725153340f, 0.341759864716796310f, - -0.939787313634716570f, - 0.341579656474657210f, -0.939852827990986680f, 0.341399435673610360f, - -0.939918307791555050f, - 0.341219202320282410f, -0.939983753034013940f, 0.341038956421299830f, - -0.940049163715957370f, - 0.340858697983289440f, -0.940114539834980280f, 0.340678427012879310f, - -0.940179881388678810f, - 0.340498143516697100f, -0.940245188374650880f, 0.340317847501371730f, - -0.940310460790495070f, - 0.340137538973531880f, -0.940375698633811540f, 0.339957217939806880f, - -0.940440901902201750f, - 0.339776884406826960f, -0.940506070593268300f, 0.339596538381222060f, - -0.940571204704615190f, - 0.339416179869623410f, -0.940636304233847590f, 0.339235808878662120f, - -0.940701369178571940f, - 0.339055425414969640f, -0.940766399536396070f, 0.338875029485178560f, - -0.940831395304928870f, - 0.338694621095921190f, -0.940896356481780830f, 0.338514200253831000f, - -0.940961283064563280f, - 0.338333766965541290f, -0.941026175050889260f, 0.338153321237685990f, - -0.941091032438372780f, - 0.337972863076899830f, -0.941155855224629190f, 0.337792392489817460f, - -0.941220643407275180f, - 0.337611909483074680f, -0.941285396983928660f, 0.337431414063306790f, - -0.941350115952208970f, - 0.337250906237150650f, -0.941414800309736230f, 0.337070386011242730f, - -0.941479450054132580f, - 0.336889853392220050f, -0.941544065183020810f, 0.336709308386720700f, - -0.941608645694025140f, - 0.336528751001382350f, -0.941673191584771360f, 0.336348181242844100f, - -0.941737702852886160f, - 0.336167599117744690f, -0.941802179495997650f, 0.335987004632723350f, - -0.941866621511735280f, - 0.335806397794420560f, -0.941931028897729510f, 0.335625778609476230f, - -0.941995401651612550f, - 0.335445147084531660f, -0.942059739771017310f, 0.335264503226227970f, - -0.942124043253578460f, - 0.335083847041206580f, -0.942188312096931770f, 0.334903178536110290f, - -0.942252546298714020f, - 0.334722497717581220f, -0.942316745856563780f, 0.334541804592262960f, - -0.942380910768120470f, - 0.334361099166798900f, -0.942445041031024890f, 0.334180381447832740f, - -0.942509136642919240f, - 0.333999651442009490f, -0.942573197601446870f, 0.333818909155973620f, - -0.942637223904252530f, - 0.333638154596370920f, -0.942701215548981900f, 0.333457387769846790f, - -0.942765172533282510f, - 0.333276608683047980f, -0.942829094854802710f, 0.333095817342620890f, - -0.942892982511192130f, - 0.332915013755212650f, -0.942956835500102120f, 0.332734197927471160f, - -0.943020653819184650f, - 0.332553369866044220f, -0.943084437466093490f, 0.332372529577580680f, - -0.943148186438483420f, - 0.332191677068729320f, -0.943211900734010620f, 0.332010812346139380f, - -0.943275580350332540f, - 0.331829935416461220f, -0.943339225285107720f, 0.331649046286344620f, - -0.943402835535996240f, - 0.331468144962440920f, -0.943466411100659320f, 0.331287231451400990f, - -0.943529951976759370f, - 0.331106305759876430f, -0.943593458161960390f, 0.330925367894519650f, - -0.943656929653927110f, - 0.330744417861982890f, -0.943720366450326200f, 0.330563455668919590f, - -0.943783768548825060f, - 0.330382481321982950f, -0.943847135947092690f, 0.330201494827826620f, - -0.943910468642799150f, - 0.330020496193105530f, -0.943973766633615980f, 0.329839485424473940f, - -0.944037029917215830f, - 0.329658462528587550f, -0.944100258491272660f, 0.329477427512101680f, - -0.944163452353461770f, - 0.329296380381672800f, -0.944226611501459810f, 0.329115321143957360f, - -0.944289735932944410f, - 0.328934249805612200f, -0.944352825645594750f, 0.328753166373295100f, - -0.944415880637091250f, - 0.328572070853663690f, -0.944478900905115550f, 0.328390963253376630f, - -0.944541886447350380f, - 0.328209843579092660f, -0.944604837261480260f, 0.328028711837470730f, - -0.944667753345190490f, - 0.327847568035170960f, -0.944730634696167800f, 0.327666412178853060f, - -0.944793481312100280f, - 0.327485244275178060f, -0.944856293190677210f, 0.327304064330806830f, - -0.944919070329589220f, - 0.327122872352400510f, -0.944981812726528150f, 0.326941668346621530f, - -0.945044520379187070f, - 0.326760452320131790f, -0.945107193285260610f, 0.326579224279594460f, - -0.945169831442444150f, - 0.326397984231672660f, -0.945232434848434890f, 0.326216732183029770f, - -0.945295003500931100f, - 0.326035468140330350f, -0.945357537397632290f, 0.325854192110238580f, - -0.945420036536239070f, - 0.325672904099419900f, -0.945482500914453740f, 0.325491604114539260f, - -0.945544930529979680f, - 0.325310292162262980f, -0.945607325380521280f, 0.325128968249257190f, - -0.945669685463784710f, - 0.324947632382188430f, -0.945732010777477150f, 0.324766284567724330f, - -0.945794301319306860f, - 0.324584924812532150f, -0.945856557086983910f, 0.324403553123280290f, - -0.945918778078219110f, - 0.324222169506637130f, -0.945980964290724760f, 0.324040773969271450f, - -0.946043115722214560f, - 0.323859366517852960f, -0.946105232370403340f, 0.323677947159051180f, - -0.946167314233007370f, - 0.323496515899536760f, -0.946229361307743820f, 0.323315072745980150f, - -0.946291373592331510f, - 0.323133617705052330f, -0.946353351084490590f, 0.322952150783425370f, - -0.946415293781942110f, - 0.322770671987770710f, -0.946477201682408680f, 0.322589181324761390f, - -0.946539074783614100f, - 0.322407678801070020f, -0.946600913083283530f, 0.322226164423369650f, - -0.946662716579143360f, - 0.322044638198334620f, -0.946724485268921170f, 0.321863100132638580f, - -0.946786219150346000f, - 0.321681550232956640f, -0.946847918221148000f, 0.321499988505963450f, - -0.946909582479058760f, - 0.321318414958334910f, -0.946971211921810880f, 0.321136829596746780f, - -0.947032806547138620f, - 0.320955232427875210f, -0.947094366352777220f, 0.320773623458397440f, - -0.947155891336463270f, - 0.320592002694990330f, -0.947217381495934820f, 0.320410370144331880f, - -0.947278836828930880f, - 0.320228725813100020f, -0.947340257333191940f, 0.320047069707973140f, - -0.947401643006459900f, - 0.319865401835630610f, -0.947462993846477700f, 0.319683722202751370f, - -0.947524309850989570f, - 0.319502030816015750f, -0.947585591017741090f, 0.319320327682103720f, - -0.947646837344479190f, - 0.319138612807695900f, -0.947708048828952100f, 0.318956886199473770f, - -0.947769225468909180f, - 0.318775147864118480f, -0.947830367262101010f, 0.318593397808312470f, - -0.947891474206279730f, - 0.318411636038737960f, -0.947952546299198560f, 0.318229862562077580f, - -0.948013583538612200f, - 0.318048077385015060f, -0.948074585922276230f, 0.317866280514233660f, - -0.948135553447947980f, - 0.317684471956418020f, -0.948196486113385580f, 0.317502651718252260f, - -0.948257383916349060f, - 0.317320819806421790f, -0.948318246854599090f, 0.317138976227611890f, - -0.948379074925898120f, - 0.316957120988508150f, -0.948439868128009620f, 0.316775254095797380f, - -0.948500626458698260f, - 0.316593375556165850f, -0.948561349915730270f, 0.316411485376301090f, - -0.948622038496872990f, - 0.316229583562890490f, -0.948682692199895090f, 0.316047670122621860f, - -0.948743311022566480f, - 0.315865745062184070f, -0.948803894962658380f, 0.315683808388265600f, - -0.948864444017943340f, - 0.315501860107556040f, -0.948924958186195160f, 0.315319900226745050f, - -0.948985437465188710f, - 0.315137928752522440f, -0.949045881852700560f, 0.314955945691579250f, - -0.949106291346508260f, - 0.314773951050606070f, -0.949166665944390700f, 0.314591944836294710f, - -0.949227005644128210f, - 0.314409927055336820f, -0.949287310443502010f, 0.314227897714424500f, - -0.949347580340295210f, - 0.314045856820250820f, -0.949407815332291460f, 0.313863804379508500f, - -0.949468015417276550f, - 0.313681740398891570f, -0.949528180593036670f, 0.313499664885093450f, - -0.949588310857359950f, - 0.313317577844809070f, -0.949648406208035480f, 0.313135479284732950f, - -0.949708466642853800f, - 0.312953369211560200f, -0.949768492159606680f, 0.312771247631986880f, - -0.949828482756087000f, - 0.312589114552708660f, -0.949888438430089300f, 0.312406969980422500f, - -0.949948359179409010f, - 0.312224813921825050f, -0.950008245001843000f, 0.312042646383613510f, - -0.950068095895189590f, - 0.311860467372486130f, -0.950127911857248100f, 0.311678276895140550f, - -0.950187692885819280f, - 0.311496074958275970f, -0.950247438978705230f, 0.311313861568591090f, - -0.950307150133709140f, - 0.311131636732785270f, -0.950366826348635780f, 0.310949400457558760f, - -0.950426467621290900f, - 0.310767152749611470f, -0.950486073949481700f, 0.310584893615644560f, - -0.950545645331016600f, - 0.310402623062358880f, -0.950605181763705230f, 0.310220341096455910f, - -0.950664683245358910f, - 0.310038047724638000f, -0.950724149773789610f, 0.309855742953607130f, - -0.950783581346811070f, - 0.309673426790066490f, -0.950842977962238160f, 0.309491099240719050f, - -0.950902339617887060f, - 0.309308760312268780f, -0.950961666311575080f, 0.309126410011419550f, - -0.951020958041121080f, - 0.308944048344875710f, -0.951080214804345010f, 0.308761675319342570f, - -0.951139436599068190f, - 0.308579290941525030f, -0.951198623423113230f, 0.308396895218129240f, - -0.951257775274304000f, - 0.308214488155861220f, -0.951316892150465550f, 0.308032069761427330f, - -0.951375974049424420f, - 0.307849640041534980f, -0.951435020969008340f, 0.307667199002891190f, - -0.951494032907046370f, - 0.307484746652204160f, -0.951553009861368590f, 0.307302282996181950f, - -0.951611951829806730f, - 0.307119808041533100f, -0.951670858810193860f, 0.306937321794967020f, - -0.951729730800363720f, - 0.306754824263192780f, -0.951788567798152130f, 0.306572315452920800f, - -0.951847369801395620f, - 0.306389795370861080f, -0.951906136807932230f, 0.306207264023724280f, - -0.951964868815601380f, - 0.306024721418221900f, -0.952023565822243570f, 0.305842167561065080f, - -0.952082227825700620f, - 0.305659602458966230f, -0.952140854823815830f, 0.305477026118637360f, - -0.952199446814433580f, - 0.305294438546791720f, -0.952258003795399600f, 0.305111839750142220f, - -0.952316525764560830f, - 0.304929229735402430f, -0.952375012719765880f, 0.304746608509286640f, - -0.952433464658864030f, - 0.304563976078509050f, -0.952491881579706320f, 0.304381332449784940f, - -0.952550263480144930f, - 0.304198677629829270f, -0.952608610358033240f, 0.304016011625357570f, - -0.952666922211226170f, - 0.303833334443086470f, -0.952725199037579570f, 0.303650646089731910f, - -0.952783440834950920f, - 0.303467946572011370f, -0.952841647601198720f, 0.303285235896641910f, - -0.952899819334182880f, - 0.303102514070341060f, -0.952957956031764700f, 0.302919781099827420f, - -0.953016057691806530f, - 0.302737036991819140f, -0.953074124312172200f, 0.302554281753035670f, - -0.953132155890726750f, - 0.302371515390196130f, -0.953190152425336560f, 0.302188737910020040f, - -0.953248113913869320f, - 0.302005949319228200f, -0.953306040354193750f, 0.301823149624540650f, - -0.953363931744180330f, - 0.301640338832678880f, -0.953421788081700310f, 0.301457516950363940f, - -0.953479609364626610f, - 0.301274683984318000f, -0.953537395590833280f, 0.301091839941263210f, - -0.953595146758195680f, - 0.300908984827921890f, -0.953652862864590500f, 0.300726118651017620f, - -0.953710543907895560f, - 0.300543241417273400f, -0.953768189885990330f, 0.300360353133413580f, - -0.953825800796755050f, - 0.300177453806162120f, -0.953883376638071770f, 0.299994543442243580f, - -0.953940917407823500f, - 0.299811622048383460f, -0.953998423103894490f, 0.299628689631306790f, - -0.954055893724170660f, - 0.299445746197739950f, -0.954113329266538800f, 0.299262791754409010f, - -0.954170729728887280f, - 0.299079826308040480f, -0.954228095109105670f, 0.298896849865361910f, - -0.954285425405084650f, - 0.298713862433100390f, -0.954342720614716480f, 0.298530864017984230f, - -0.954399980735894490f, - 0.298347854626741570f, -0.954457205766513490f, 0.298164834266100910f, - -0.954514395704469500f, - 0.297981802942791920f, -0.954571550547659630f, 0.297798760663543550f, - -0.954628670293982680f, - 0.297615707435086310f, -0.954685754941338340f, 0.297432643264150030f, - -0.954742804487627940f, - 0.297249568157465890f, -0.954799818930753720f, 0.297066482121764840f, - -0.954856798268619580f, - 0.296883385163778270f, -0.954913742499130520f, 0.296700277290238460f, - -0.954970651620192790f, - 0.296517158507877410f, -0.955027525629714160f, 0.296334028823428240f, - -0.955084364525603410f, - 0.296150888243623960f, -0.955141168305770670f, 0.295967736775197890f, - -0.955197936968127710f, - 0.295784574424884370f, -0.955254670510586990f, 0.295601401199417360f, - -0.955311368931062720f, - 0.295418217105532070f, -0.955368032227470240f, 0.295235022149963390f, - -0.955424660397726330f, - 0.295051816339446720f, -0.955481253439748770f, 0.294868599680718380f, - -0.955537811351456770f, - 0.294685372180514330f, -0.955594334130771110f, 0.294502133845571720f, - -0.955650821775613220f, - 0.294318884682627570f, -0.955707274283906560f, 0.294135624698419080f, - -0.955763691653575440f, - 0.293952353899684770f, -0.955820073882545420f, 0.293769072293162400f, - -0.955876420968743590f, - 0.293585779885591310f, -0.955932732910098170f, 0.293402476683710060f, - -0.955989009704538930f, - 0.293219162694258680f, -0.956045251349996410f, 0.293035837923976920f, - -0.956101457844403040f, - 0.292852502379604810f, -0.956157629185692140f, 0.292669156067883570f, - -0.956213765371798470f, - 0.292485798995553830f, -0.956269866400658140f, 0.292302431169357610f, - -0.956325932270208230f, - 0.292119052596036540f, -0.956381962978387620f, 0.291935663282332780f, - -0.956437958523136180f, - 0.291752263234989370f, -0.956493918902394990f, 0.291568852460749040f, - -0.956549844114106820f, - 0.291385430966355720f, -0.956605734156215080f, 0.291201998758553020f, - -0.956661589026664980f, - 0.291018555844085090f, -0.956717408723403050f, 0.290835102229696940f, - -0.956773193244376930f, - 0.290651637922133220f, -0.956828942587535370f, 0.290468162928139870f, - -0.956884656750828900f, - 0.290284677254462330f, -0.956940335732208940f, 0.290101180907847140f, - -0.956995979529628230f, - 0.289917673895040860f, -0.957051588141040970f, 0.289734156222790250f, - -0.957107161564402790f, - 0.289550627897843140f, -0.957162699797670100f, 0.289367088926946960f, - -0.957218202838801210f, - 0.289183539316850310f, -0.957273670685755200f, 0.288999979074301530f, - -0.957329103336492790f, - 0.288816408206049480f, -0.957384500788975860f, 0.288632826718843940f, - -0.957439863041167570f, - 0.288449234619434170f, -0.957495190091032570f, 0.288265631914570830f, - -0.957550481936536470f, - 0.288082018611004300f, -0.957605738575646240f, 0.287898394715485170f, - -0.957660960006330610f, - 0.287714760234765280f, -0.957716146226558870f, 0.287531115175595930f, - -0.957771297234302320f, - 0.287347459544729570f, -0.957826413027532910f, 0.287163793348918560f, - -0.957881493604224250f, - 0.286980116594915570f, -0.957936538962351420f, 0.286796429289474190f, - -0.957991549099890370f, - 0.286612731439347790f, -0.958046524014818600f, 0.286429023051290750f, - -0.958101463705114620f, - 0.286245304132057120f, -0.958156368168758820f, 0.286061574688402100f, - -0.958211237403732260f, - 0.285877834727080730f, -0.958266071408017670f, 0.285694084254848320f, - -0.958320870179598880f, - 0.285510323278461380f, -0.958375633716461170f, 0.285326551804675810f, - -0.958430362016591040f, - 0.285142769840248720f, -0.958485055077976100f, 0.284958977391937150f, - -0.958539712898605730f, - 0.284775174466498300f, -0.958594335476470220f, 0.284591361070690550f, - -0.958648922809561040f, - 0.284407537211271820f, -0.958703474895871600f, 0.284223702895001100f, - -0.958757991733395710f, - 0.284039858128637360f, -0.958812473320129200f, 0.283856002918939750f, - -0.958866919654069010f, - 0.283672137272668550f, -0.958921330733213060f, 0.283488261196583550f, - -0.958975706555561080f, - 0.283304374697445790f, -0.959030047119113550f, 0.283120477782015990f, - -0.959084352421872730f, - 0.282936570457055390f, -0.959138622461841890f, 0.282752652729326040f, - -0.959192857237025740f, - 0.282568724605589740f, -0.959247056745430090f, 0.282384786092609420f, - -0.959301220985062210f, - 0.282200837197147500f, -0.959355349953930790f, 0.282016877925967690f, - -0.959409443650045550f, - 0.281832908285833460f, -0.959463502071417510f, 0.281648928283508680f, - -0.959517525216059260f, - 0.281464937925758050f, -0.959571513081984520f, 0.281280937219346110f, - -0.959625465667208300f, - 0.281096926171038320f, -0.959679382969746750f, 0.280912904787600120f, - -0.959733264987617680f, - 0.280728873075797190f, -0.959787111718839900f, 0.280544831042396360f, - -0.959840923161433660f, - 0.280360778694163810f, -0.959894699313420530f, 0.280176716037867040f, - -0.959948440172823210f, - 0.279992643080273380f, -0.960002145737665850f, 0.279808559828150390f, - -0.960055816005973890f, - 0.279624466288266700f, -0.960109450975773940f, 0.279440362467390510f, - -0.960163050645094000f, - 0.279256248372291240f, -0.960216615011963430f, 0.279072124009737970f, - -0.960270144074412800f, - 0.278887989386500280f, -0.960323637830473920f, 0.278703844509348600f, - -0.960377096278180130f, - 0.278519689385053060f, -0.960430519415565790f, 0.278335524020384970f, - -0.960483907240666790f, - 0.278151348422115090f, -0.960537259751520050f, 0.277967162597015430f, - -0.960590576946164120f, - 0.277782966551857800f, -0.960643858822638470f, 0.277598760293414290f, - -0.960697105378984450f, - 0.277414543828458200f, -0.960750316613243950f, 0.277230317163762120f, - -0.960803492523460760f, - 0.277046080306099950f, -0.960856633107679660f, 0.276861833262245390f, - -0.960909738363946770f, - 0.276677576038972420f, -0.960962808290309780f, 0.276493308643056100f, - -0.961015842884817230f, - 0.276309031081271030f, -0.961068842145519350f, 0.276124743360392890f, - -0.961121806070467380f, - 0.275940445487197320f, -0.961174734657714080f, 0.275756137468460120f, - -0.961227627905313460f, - 0.275571819310958250f, -0.961280485811320640f, 0.275387491021468140f, - -0.961333308373792270f, - 0.275203152606767370f, -0.961386095590786250f, 0.275018804073633380f, - -0.961438847460361570f, - 0.274834445428843940f, -0.961491563980579000f, 0.274650076679177790f, - -0.961544245149499990f, - 0.274465697831413220f, -0.961596890965187860f, 0.274281308892329710f, - -0.961649501425706820f, - 0.274096909868706330f, -0.961702076529122540f, 0.273912500767323320f, - -0.961754616273502010f, - 0.273728081594960650f, -0.961807120656913540f, 0.273543652358398730f, - -0.961859589677426570f, - 0.273359213064418790f, -0.961912023333112100f, 0.273174763719801870f, - -0.961964421622042320f, - 0.272990304331329980f, -0.962016784542290560f, 0.272805834905784920f, - -0.962069112091931580f, - 0.272621355449948980f, -0.962121404269041580f, 0.272436865970605350f, - -0.962173661071697770f, - 0.272252366474536660f, -0.962225882497979020f, 0.272067856968526980f, - -0.962278068545965090f, - 0.271883337459359890f, -0.962330219213737400f, 0.271698807953819510f, - -0.962382334499378380f, - 0.271514268458690810f, -0.962434414400971990f, 0.271329718980758420f, - -0.962486458916603450f, - 0.271145159526808070f, -0.962538468044359160f, 0.270960590103625330f, - -0.962590441782326780f, - 0.270776010717996010f, -0.962642380128595710f, 0.270591421376707050f, - -0.962694283081255930f, - 0.270406822086544820f, -0.962746150638399410f, 0.270222212854296930f, - -0.962797982798119010f, - 0.270037593686750510f, -0.962849779558509030f, 0.269852964590693910f, - -0.962901540917665000f, - 0.269668325572915200f, -0.962953266873683880f, 0.269483676640202840f, - -0.963004957424663850f, - 0.269299017799346230f, -0.963056612568704340f, 0.269114349057134330f, - -0.963108232303906190f, - 0.268929670420357310f, -0.963159816628371360f, 0.268744981895805090f, - -0.963211365540203480f, - 0.268560283490267890f, -0.963262879037507070f, 0.268375575210537010f, - -0.963314357118388090f, - 0.268190857063403180f, -0.963365799780954050f, 0.268006129055658350f, - -0.963417207023313350f, - 0.267821391194094320f, -0.963468578843575950f, 0.267636643485503090f, - -0.963519915239853140f, - 0.267451885936677740f, -0.963571216210257210f, 0.267267118554410930f, - -0.963622481752902220f, - 0.267082341345496350f, -0.963673711865903230f, 0.266897554316727510f, - -0.963724906547376410f, - 0.266712757474898420f, -0.963776065795439840f, 0.266527950826803810f, - -0.963827189608212340f, - 0.266343134379238180f, -0.963878277983814200f, 0.266158308138997050f, - -0.963929330920367140f, - 0.265973472112875530f, -0.963980348415994110f, 0.265788626307669970f, - -0.964031330468819280f, - 0.265603770730176440f, -0.964082277076968140f, 0.265418905387191260f, - -0.964133188238567640f, - 0.265234030285511900f, -0.964184063951745720f, 0.265049145431935200f, - -0.964234904214632200f, - 0.264864250833259320f, -0.964285709025357370f, 0.264679346496282050f, - -0.964336478382053720f, - 0.264494432427801630f, -0.964387212282854290f, 0.264309508634617220f, - -0.964437910725893910f, - 0.264124575123527490f, -0.964488573709308410f, 0.263939631901332410f, - -0.964539201231235150f, - 0.263754678974831510f, -0.964589793289812650f, 0.263569716350824880f, - -0.964640349883180930f, - 0.263384744036113390f, -0.964690871009480920f, 0.263199762037497560f, - -0.964741356666855340f, - 0.263014770361779060f, -0.964791806853447900f, 0.262829769015759330f, - -0.964842221567403510f, - 0.262644758006240100f, -0.964892600806868890f, 0.262459737340024090f, - -0.964942944569991410f, - 0.262274707023913590f, -0.964993252854920320f, 0.262089667064712100f, - -0.965043525659805890f, - 0.261904617469222560f, -0.965093762982799590f, 0.261719558244249080f, - -0.965143964822054450f, - 0.261534489396595630f, -0.965194131175724720f, 0.261349410933066350f, - -0.965244262041965780f, - 0.261164322860466590f, -0.965294357418934660f, 0.260979225185601020f, - -0.965344417304789370f, - 0.260794117915275570f, -0.965394441697689400f, 0.260609001056295920f, - -0.965444430595795430f, - 0.260423874615468010f, -0.965494383997269500f, 0.260238738599598950f, - -0.965544301900275070f, - 0.260053593015495130f, -0.965594184302976830f, 0.259868437869964330f, - -0.965644031203540590f, - 0.259683273169813930f, -0.965693842600133690f, 0.259498098921851660f, - -0.965743618490924830f, - 0.259312915132886350f, -0.965793358874083570f, 0.259127721809726150f, - -0.965843063747781510f, - 0.258942518959180580f, -0.965892733110190860f, 0.258757306588058840f, - -0.965942366959485540f, - 0.258572084703170390f, -0.965991965293840570f, 0.258386853311325710f, - -0.966041528111432400f, - 0.258201612419334870f, -0.966091055410438830f, 0.258016362034009070f, - -0.966140547189038750f, - 0.257831102162158930f, -0.966190003445412620f, 0.257645832810596440f, - -0.966239424177741890f, - 0.257460553986133210f, -0.966288809384209580f, 0.257275265695581120f, - -0.966338159063000130f, - 0.257089967945753230f, -0.966387473212298790f, 0.256904660743461850f, - -0.966436751830292650f, - 0.256719344095520720f, -0.966485994915169840f, 0.256534018008743200f, - -0.966535202465119700f, - 0.256348682489942910f, -0.966584374478333120f, 0.256163337545934570f, - -0.966633510953002100f, - 0.255977983183532380f, -0.966682611887320190f, 0.255792619409551670f, - -0.966731677279481840f, - 0.255607246230807550f, -0.966780707127683270f, 0.255421863654115460f, - -0.966829701430121810f, - 0.255236471686291820f, -0.966878660184995910f, 0.255051070334152530f, - -0.966927583390505660f, - 0.254865659604514630f, -0.966976471044852070f, 0.254680239504194990f, - -0.967025323146237900f, - 0.254494810040010790f, -0.967074139692867040f, 0.254309371218780110f, - -0.967122920682944360f, - 0.254123923047320620f, -0.967171666114676640f, 0.253938465532451140f, - -0.967220375986271310f, - 0.253752998680989940f, -0.967269050295937790f, 0.253567522499756610f, - -0.967317689041886310f, - 0.253382036995570270f, -0.967366292222328510f, 0.253196542175250560f, - -0.967414859835477480f, - 0.253011038045617980f, -0.967463391879547440f, 0.252825524613492610f, - -0.967511888352754150f, - 0.252640001885695580f, -0.967560349253314360f, 0.252454469869047900f, - -0.967608774579446380f, - 0.252268928570370810f, -0.967657164329369880f, 0.252083377996486560f, - -0.967705518501305480f, - 0.251897818154216910f, -0.967753837093475510f, 0.251712249050384750f, - -0.967802120104103270f, - 0.251526670691812780f, -0.967850367531413620f, 0.251341083085323880f, - -0.967898579373632660f, - 0.251155486237742030f, -0.967946755628987800f, 0.250969880155890720f, - -0.967994896295707670f, - 0.250784264846594550f, -0.968043001372022260f, 0.250598640316677830f, - -0.968091070856162970f, - 0.250413006572965280f, -0.968139104746362330f, 0.250227363622282540f, - -0.968187103040854420f, - 0.250041711471454650f, -0.968235065737874320f, 0.249856050127308050f, - -0.968282992835658660f, - 0.249670379596668520f, -0.968330884332445300f, 0.249484699886363010f, - -0.968378740226473300f, - 0.249299011003218300f, -0.968426560515983190f, 0.249113312954061360f, - -0.968474345199216820f, - 0.248927605745720260f, -0.968522094274417270f, 0.248741889385022420f, - -0.968569807739828930f, - 0.248556163878796620f, -0.968617485593697540f, 0.248370429233871150f, - -0.968665127834269950f, - 0.248184685457074780f, -0.968712734459794780f, 0.247998932555237220f, - -0.968760305468521430f, - 0.247813170535187620f, -0.968807840858700970f, 0.247627399403756330f, - -0.968855340628585580f, - 0.247441619167773440f, -0.968902804776428870f, 0.247255829834069320f, - -0.968950233300485800f, - 0.247070031409475370f, -0.968997626199012310f, 0.246884223900822430f, - -0.969044983470266240f, - 0.246698407314942500f, -0.969092305112506100f, 0.246512581658667380f, - -0.969139591123992280f, - 0.246326746938829060f, -0.969186841502985950f, 0.246140903162260640f, - -0.969234056247750050f, - 0.245955050335794590f, -0.969281235356548530f, 0.245769188466264670f, - -0.969328378827646660f, - 0.245583317560504000f, -0.969375486659311280f, 0.245397437625346990f, - -0.969422558849810320f, - 0.245211548667627680f, -0.969469595397412950f, 0.245025650694180470f, - -0.969516596300390000f, - 0.244839743711840750f, -0.969563561557013180f, 0.244653827727443320f, - -0.969610491165555870f, - 0.244467902747824210f, -0.969657385124292450f, 0.244281968779819170f, - -0.969704243431498750f, - 0.244096025830264210f, -0.969751066085452140f, 0.243910073905996370f, - -0.969797853084430890f, - 0.243724113013852130f, -0.969844604426714830f, 0.243538143160669180f, - -0.969891320110585100f, - 0.243352164353284880f, -0.969938000134323960f, 0.243166176598536930f, - -0.969984644496215240f, - 0.242980179903263980f, -0.970031253194543970f, 0.242794174274304190f, - -0.970077826227596420f, - 0.242608159718496890f, -0.970124363593660280f, 0.242422136242681050f, - -0.970170865291024360f, - 0.242236103853696040f, -0.970217331317979160f, 0.242050062558382180f, - -0.970263761672816140f, - 0.241864012363579210f, -0.970310156353828110f, 0.241677953276128090f, - -0.970356515359309450f, - 0.241491885302869300f, -0.970402838687555500f, 0.241305808450644390f, - -0.970449126336863090f, - 0.241119722726294730f, -0.970495378305530450f, 0.240933628136661910f, - -0.970541594591857070f, - 0.240747524688588540f, -0.970587775194143630f, 0.240561412388916620f, - -0.970633920110692160f, - 0.240375291244489500f, -0.970680029339806130f, 0.240189161262150040f, - -0.970726102879790110f, - 0.240003022448741500f, -0.970772140728950350f, 0.239816874811108110f, - -0.970818142885593870f, - 0.239630718356093560f, -0.970864109348029470f, 0.239444553090542720f, - -0.970910040114567050f, - 0.239258379021300120f, -0.970955935183517970f, 0.239072196155210660f, - -0.971001794553194690f, - 0.238886004499120170f, -0.971047618221911100f, 0.238699804059873950f, - -0.971093406187982460f, - 0.238513594844318500f, -0.971139158449725090f, 0.238327376859299970f, - -0.971184875005457030f, - 0.238141150111664870f, -0.971230555853497380f, 0.237954914608260650f, - -0.971276200992166490f, - 0.237768670355934210f, -0.971321810419786160f, 0.237582417361533650f, - -0.971367384134679490f, - 0.237396155631906550f, -0.971412922135170940f, 0.237209885173901620f, - -0.971458424419585960f, - 0.237023605994367340f, -0.971503890986251780f, 0.236837318100152380f, - -0.971549321833496630f, - 0.236651021498106460f, -0.971594716959650160f, 0.236464716195078750f, - -0.971640076363043390f, - 0.236278402197919620f, -0.971685400042008540f, 0.236092079513479050f, - -0.971730687994879160f, - 0.235905748148607370f, -0.971775940219990140f, 0.235719408110155930f, - -0.971821156715677700f, - 0.235533059404975460f, -0.971866337480279400f, 0.235346702039917920f, - -0.971911482512134000f, - 0.235160336021834860f, -0.971956591809581600f, 0.234973961357578310f, - -0.972001665370963890f, - 0.234787578054001080f, -0.972046703194623380f, 0.234601186117955550f, - -0.972091705278904430f, - 0.234414785556295250f, -0.972136671622152120f, 0.234228376375873380f, - -0.972181602222713440f, - 0.234041958583543460f, -0.972226497078936270f, 0.233855532186159950f, - -0.972271356189170040f, - 0.233669097190576820f, -0.972316179551765300f, 0.233482653603649170f, - -0.972360967165074140f, - 0.233296201432231560f, -0.972405719027449770f, 0.233109740683179740f, - -0.972450435137246830f, - 0.232923271363349120f, -0.972495115492821190f, 0.232736793479595420f, - -0.972539760092530180f, - 0.232550307038775330f, -0.972584368934732210f, 0.232363812047745010f, - -0.972628942017787270f, - 0.232177308513361770f, -0.972673479340056430f, 0.231990796442482580f, - -0.972717980899902250f, - 0.231804275841964780f, -0.972762446695688570f, 0.231617746718666580f, - -0.972806876725780370f, - 0.231431209079445730f, -0.972851270988544180f, 0.231244662931161110f, - -0.972895629482347760f, - 0.231058108280671280f, -0.972939952205560070f, 0.230871545134835070f, - -0.972984239156551740f, - 0.230684973500512310f, -0.973028490333694100f, 0.230498393384562320f, - -0.973072705735360530f, - 0.230311804793845530f, -0.973116885359925130f, 0.230125207735222020f, - -0.973161029205763530f, - 0.229938602215552260f, -0.973205137271252800f, 0.229751988241697600f, - -0.973249209554771120f, - 0.229565365820518870f, -0.973293246054698250f, 0.229378734958878120f, - -0.973337246769414800f, - 0.229192095663636740f, -0.973381211697303290f, 0.229005447941657390f, - -0.973425140836747030f, - 0.228818791799802360f, -0.973469034186130950f, 0.228632127244934230f, - -0.973512891743841370f, - 0.228445454283916550f, -0.973556713508265560f, 0.228258772923612350f, - -0.973600499477792370f, - 0.228072083170885790f, -0.973644249650811870f, 0.227885385032600700f, - -0.973687964025715670f, - 0.227698678515621170f, -0.973731642600896400f, 0.227511963626812390f, - -0.973775285374748000f, - 0.227325240373038830f, -0.973818892345666100f, 0.227138508761166260f, - -0.973862463512047300f, - 0.226951768798059980f, -0.973905998872289460f, 0.226765020490585720f, - -0.973949498424792170f, - 0.226578263845610110f, -0.973992962167955830f, 0.226391498869999210f, - -0.974036390100182610f, - 0.226204725570620270f, -0.974079782219875680f, 0.226017943954340190f, - -0.974123138525439520f, - 0.225831154028026200f, -0.974166459015280320f, 0.225644355798546440f, - -0.974209743687805110f, - 0.225457549272768540f, -0.974252992541422500f, 0.225270734457561240f, - -0.974296205574542330f, - 0.225083911359792780f, -0.974339382785575860f, 0.224897079986332540f, - -0.974382524172935470f, - 0.224710240344049570f, -0.974425629735034990f, 0.224523392439813170f, - -0.974468699470289580f, - 0.224336536280493690f, -0.974511733377115720f, 0.224149671872960840f, - -0.974554731453931230f, - 0.223962799224085520f, -0.974597693699155050f, 0.223775918340738290f, - -0.974640620111207560f, - 0.223589029229790020f, -0.974683510688510670f, 0.223402131898112480f, - -0.974726365429487320f, - 0.223215226352576960f, -0.974769184332561770f, 0.223028312600055870f, - -0.974811967396159830f, - 0.222841390647421280f, -0.974854714618708430f, 0.222654460501545550f, - -0.974897425998635820f, - 0.222467522169301990f, -0.974940101534371720f, 0.222280575657563370f, - -0.974982741224347140f, - 0.222093620973203590f, -0.975025345066994120f, 0.221906658123096260f, - -0.975067913060746360f, - 0.221719687114115240f, -0.975110445204038890f, 0.221532707953135340f, - -0.975152941495307620f, - 0.221345720647030810f, -0.975195401932990370f, 0.221158725202677100f, - -0.975237826515525820f, - 0.220971721626949060f, -0.975280215241354220f, 0.220784709926722670f, - -0.975322568108916930f, - 0.220597690108873650f, -0.975364885116656870f, 0.220410662180277940f, - -0.975407166263018270f, - 0.220223626147812460f, -0.975449411546446380f, 0.220036582018353550f, - -0.975491620965388110f, - 0.219849529798778750f, -0.975533794518291360f, 0.219662469495965180f, - -0.975575932203605610f, - 0.219475401116790340f, -0.975618034019781750f, 0.219288324668132580f, - -0.975660099965271590f, - 0.219101240156869770f, -0.975702130038528570f, 0.218914147589880900f, - -0.975744124238007270f, - 0.218727046974044600f, -0.975786082562163930f, 0.218539938316239830f, - -0.975828005009455550f, - 0.218352821623346430f, -0.975869891578341030f, 0.218165696902243770f, - -0.975911742267280170f, - 0.217978564159812290f, -0.975953557074734300f, 0.217791423402932120f, - -0.975995335999165880f, - 0.217604274638483670f, -0.976037079039039020f, 0.217417117873348300f, - -0.976078786192818850f, - 0.217229953114406790f, -0.976120457458971910f, 0.217042780368541080f, - -0.976162092835966110f, - 0.216855599642632570f, -0.976203692322270560f, 0.216668410943563790f, - -0.976245255916355800f, - 0.216481214278216900f, -0.976286783616693630f, 0.216294009653474370f, - -0.976328275421757260f, - 0.216106797076219600f, -0.976369731330021140f, 0.215919576553335460f, - -0.976411151339961040f, - 0.215732348091705940f, -0.976452535450054060f, 0.215545111698214660f, - -0.976493883658778540f, - 0.215357867379745550f, -0.976535195964614470f, 0.215170615143183500f, - -0.976576472366042610f, - 0.214983354995412820f, -0.976617712861545640f, 0.214796086943318920f, - -0.976658917449606980f, - 0.214608810993786920f, -0.976700086128711840f, 0.214421527153702190f, - -0.976741218897346550f, - 0.214234235429951100f, -0.976782315753998650f, 0.214046935829419330f, - -0.976823376697157240f, - 0.213859628358993830f, -0.976864401725312640f, 0.213672313025561140f, - -0.976905390836956490f, - 0.213484989836008080f, -0.976946344030581560f, 0.213297658797222430f, - -0.976987261304682390f, - 0.213110319916091360f, -0.977028142657754390f, 0.212922973199503260f, - -0.977068988088294450f, - 0.212735618654345870f, -0.977109797594800880f, 0.212548256287508120f, - -0.977150571175773200f, - 0.212360886105878580f, -0.977191308829712280f, 0.212173508116346080f, - -0.977232010555120320f, - 0.211986122325800410f, -0.977272676350500860f, 0.211798728741130820f, - -0.977313306214358750f, - 0.211611327369227610f, -0.977353900145199960f, 0.211423918216980810f, - -0.977394458141532250f, - 0.211236501291280710f, -0.977434980201864260f, 0.211049076599018500f, - -0.977475466324706050f, - 0.210861644147084830f, -0.977515916508569280f, 0.210674203942371490f, - -0.977556330751966460f, - 0.210486755991769890f, -0.977596709053411780f, 0.210299300302171750f, - -0.977637051411420770f, - 0.210111836880469720f, -0.977677357824509930f, 0.209924365733555860f, - -0.977717628291197570f, - 0.209736886868323370f, -0.977757862810002760f, 0.209549400291665110f, - -0.977798061379446360f, - 0.209361906010474190f, -0.977838223998050430f, 0.209174404031644700f, - -0.977878350664338150f, - 0.208986894362070070f, -0.977918441376834370f, 0.208799377008644980f, - -0.977958496134064830f, - 0.208611851978263460f, -0.977998514934557140f, 0.208424319277820650f, - -0.978038497776839600f, - 0.208236778914211470f, -0.978078444659442380f, 0.208049230894330940f, - -0.978118355580896660f, - 0.207861675225075150f, -0.978158230539735050f, 0.207674111913339540f, - -0.978198069534491400f, - 0.207486540966020700f, -0.978237872563701090f, 0.207298962390014880f, - -0.978277639625900420f, - 0.207111376192218560f, -0.978317370719627650f, 0.206923782379529210f, - -0.978357065843421640f, - 0.206736180958843660f, -0.978396724995823090f, 0.206548571937059940f, - -0.978436348175373730f, - 0.206360955321075680f, -0.978475935380616830f, 0.206173331117788770f, - -0.978515486610096910f, - 0.205985699334098050f, -0.978555001862359550f, 0.205798059976901760f, - -0.978594481135952270f, - 0.205610413053099320f, -0.978633924429423100f, 0.205422758569589780f, - -0.978673331741322210f, - 0.205235096533272380f, -0.978712703070200420f, 0.205047426951047380f, - -0.978752038414610340f, - 0.204859749829814420f, -0.978791337773105670f, 0.204672065176474290f, - -0.978830601144241470f, - 0.204484372997927180f, -0.978869828526574120f, 0.204296673301074430f, - -0.978909019918661310f, - 0.204108966092817010f, -0.978948175319062200f, 0.203921251380056150f, - -0.978987294726337050f, - 0.203733529169694010f, -0.979026378139047580f, 0.203545799468632190f, - -0.979065425555756930f, - 0.203358062283773370f, -0.979104436975029250f, 0.203170317622019920f, - -0.979143412395430230f, - 0.202982565490274460f, -0.979182351815526930f, 0.202794805895440550f, - -0.979221255233887700f, - 0.202607038844421110f, -0.979260122649082020f, 0.202419264344120220f, - -0.979298954059681040f, - 0.202231482401441620f, -0.979337749464256780f, 0.202043693023289280f, - -0.979376508861383170f, - 0.201855896216568160f, -0.979415232249634780f, 0.201668091988182500f, - -0.979453919627588210f, - 0.201480280345037820f, -0.979492570993820700f, 0.201292461294039190f, - -0.979531186346911390f, - 0.201104634842091960f, -0.979569765685440520f, 0.200916800996102370f, - -0.979608309007989450f, - 0.200728959762976140f, -0.979646816313141210f, 0.200541111149620090f, - -0.979685287599479930f, - 0.200353255162940420f, -0.979723722865591170f, 0.200165391809844500f, - -0.979762122110061640f, - 0.199977521097239290f, -0.979800485331479680f, 0.199789643032032120f, - -0.979838812528434740f, - 0.199601757621131050f, -0.979877103699517640f, 0.199413864871443750f, - -0.979915358843320480f, - 0.199225964789878890f, -0.979953577958436740f, 0.199038057383344820f, - -0.979991761043461200f, - 0.198850142658750120f, -0.980029908096989980f, 0.198662220623004320f, - -0.980068019117620650f, - 0.198474291283016360f, -0.980106094103951770f, 0.198286354645696270f, - -0.980144133054583590f, - 0.198098410717953730f, -0.980182135968117320f, 0.197910459506698720f, - -0.980220102843155970f, - 0.197722501018842030f, -0.980258033678303550f, 0.197534535261294000f, - -0.980295928472165290f, - 0.197346562240966000f, -0.980333787223347960f, 0.197158581964769040f, - -0.980371609930459690f, - 0.196970594439614370f, -0.980409396592109910f, 0.196782599672414240f, - -0.980447147206909060f, - 0.196594597670080220f, -0.980484861773469380f, 0.196406588439525050f, - -0.980522540290404090f, - 0.196218571987660850f, -0.980560182756327950f, 0.196030548321400880f, - -0.980597789169856850f, - 0.195842517447657990f, -0.980635359529608120f, 0.195654479373345370f, - -0.980672893834200530f, - 0.195466434105377090f, -0.980710392082253970f, 0.195278381650666520f, - -0.980747854272389750f, - 0.195090322016128330f, -0.980785280403230430f, 0.194902255208676660f, - -0.980822670473399990f, - 0.194714181235225990f, -0.980860024481523870f, 0.194526100102691720f, - -0.980897342426228390f, - 0.194338011817988600f, -0.980934624306141640f, 0.194149916388032530f, - -0.980971870119892840f, - 0.193961813819739010f, -0.981009079866112630f, 0.193773704120023840f, - -0.981046253543432780f, - 0.193585587295803750f, -0.981083391150486590f, 0.193397463353994740f, - -0.981120492685908730f, - 0.193209332301514080f, -0.981157558148334830f, 0.193021194145278320f, - -0.981194587536402320f, - 0.192833048892205290f, -0.981231580848749730f, 0.192644896549212240f, - -0.981268538084016710f, - 0.192456737123216840f, -0.981305459240844670f, 0.192268570621137590f, - -0.981342344317875930f, - 0.192080397049892380f, -0.981379193313754560f, 0.191892216416400310f, - -0.981416006227125550f, - 0.191704028727579940f, -0.981452783056635520f, 0.191515833990350240f, - -0.981489523800932130f, - 0.191327632211630990f, -0.981526228458664660f, 0.191139423398341420f, - -0.981562897028483650f, - 0.190951207557401860f, -0.981599529509040720f, 0.190762984695732250f, - -0.981636125898989080f, - 0.190574754820252800f, -0.981672686196983110f, 0.190386517937884580f, - -0.981709210401678800f, - 0.190198274055548120f, -0.981745698511732990f, 0.190010023180165050f, - -0.981782150525804310f, - 0.189821765318656580f, -0.981818566442552500f, 0.189633500477944220f, - -0.981854946260638630f, - 0.189445228664950340f, -0.981891289978724990f, 0.189256949886596720f, - -0.981927597595475540f, - 0.189068664149806280f, -0.981963869109555240f, 0.188880371461501330f, - -0.982000104519630490f, - 0.188692071828605260f, -0.982036303824369020f, 0.188503765258041080f, - -0.982072467022439890f, - 0.188315451756732120f, -0.982108594112513610f, 0.188127131331602530f, - -0.982144685093261580f, - 0.187938803989575850f, -0.982180739963357200f, 0.187750469737576840f, - -0.982216758721474510f, - 0.187562128582529740f, -0.982252741366289370f, 0.187373780531359110f, - -0.982288687896478830f, - 0.187185425590990440f, -0.982324598310721160f, 0.186997063768348510f, - -0.982360472607696210f, - 0.186808695070359330f, -0.982396310786084690f, 0.186620319503948420f, - -0.982432112844569110f, - 0.186431937076041640f, -0.982467878781833170f, 0.186243547793565670f, - -0.982503608596561720f, - 0.186055151663446630f, -0.982539302287441240f, 0.185866748692611720f, - -0.982574959853159240f, - 0.185678338887987790f, -0.982610581292404750f, 0.185489922256501900f, - -0.982646166603868050f, - 0.185301498805082040f, -0.982681715786240860f, 0.185113068540655510f, - -0.982717228838215990f, - 0.184924631470150870f, -0.982752705758487830f, 0.184736187600495930f, - -0.982788146545751970f, - 0.184547736938619640f, -0.982823551198705240f, 0.184359279491450640f, - -0.982858919716046110f, - 0.184170815265917720f, -0.982894252096474070f, 0.183982344268950600f, - -0.982929548338690060f, - 0.183793866507478390f, -0.982964808441396440f, 0.183605381988431350f, - -0.983000032403296590f, - 0.183416890718739230f, -0.983035220223095640f, 0.183228392705332140f, - -0.983070371899499640f, - 0.183039887955141060f, -0.983105487431216290f, 0.182851376475096310f, - -0.983140566816954500f, - 0.182662858272129360f, -0.983175610055424420f, 0.182474333353171260f, - -0.983210617145337640f, - 0.182285801725153320f, -0.983245588085407070f, 0.182097263395007760f, - -0.983280522874346970f, - 0.181908718369666160f, -0.983315421510872810f, 0.181720166656061170f, - -0.983350283993701500f, - 0.181531608261125130f, -0.983385110321551180f, 0.181343043191790590f, - -0.983419900493141540f, - 0.181154471454990920f, -0.983454654507193270f, 0.180965893057658980f, - -0.983489372362428730f, - 0.180777308006728670f, -0.983524054057571260f, 0.180588716309133280f, - -0.983558699591345900f, - 0.180400117971807270f, -0.983593308962478650f, 0.180211513001684590f, - -0.983627882169697210f, - 0.180022901405699510f, -0.983662419211730250f, 0.179834283190787180f, - -0.983696920087308020f, - 0.179645658363882100f, -0.983731384795162090f, 0.179457026931919950f, - -0.983765813334025240f, - 0.179268388901835880f, -0.983800205702631490f, 0.179079744280565390f, - -0.983834561899716630f, - 0.178891093075044830f, -0.983868881924017220f, 0.178702435292209940f, - -0.983903165774271500f, - 0.178513770938997590f, -0.983937413449218920f, 0.178325100022344140f, - -0.983971624947600270f, - 0.178136422549186320f, -0.984005800268157870f, 0.177947738526461670f, - -0.984039939409634970f, - 0.177759047961107140f, -0.984074042370776450f, 0.177570350860060790f, - -0.984108109150328540f, - 0.177381647230260200f, -0.984142139747038570f, 0.177192937078643310f, - -0.984176134159655320f, - 0.177004220412148860f, -0.984210092386929030f, 0.176815497237715000f, - -0.984244014427611110f, - 0.176626767562280960f, -0.984277900280454370f, 0.176438031392785350f, - -0.984311749944212780f, - 0.176249288736167940f, -0.984345563417641900f, 0.176060539599367960f, - -0.984379340699498510f, - 0.175871783989325040f, -0.984413081788540700f, 0.175683021912979580f, - -0.984446786683527920f, - 0.175494253377271400f, -0.984480455383220930f, 0.175305478389141370f, - -0.984514087886381840f, - 0.175116696955530060f, -0.984547684191773960f, 0.174927909083378160f, - -0.984581244298162180f, - 0.174739114779627310f, -0.984614768204312600f, 0.174550314051218490f, - -0.984648255908992630f, - 0.174361506905093830f, -0.984681707410970940f, 0.174172693348194960f, - -0.984715122709017620f, - 0.173983873387463850f, -0.984748501801904210f, 0.173795047029843270f, - -0.984781844688403350f, - 0.173606214282275410f, -0.984815151367289140f, 0.173417375151703520f, - -0.984848421837337010f, - 0.173228529645070490f, -0.984881656097323700f, 0.173039677769319390f, - -0.984914854146027200f, - 0.172850819531394200f, -0.984948015982227030f, 0.172661954938238270f, - -0.984981141604703960f, - 0.172473083996796030f, -0.985014231012239840f, 0.172284206714011350f, - -0.985047284203618200f, - 0.172095323096829040f, -0.985080301177623800f, 0.171906433152193700f, - -0.985113281933042590f, - 0.171717536887049970f, -0.985146226468662230f, 0.171528634308343500f, - -0.985179134783271020f, - 0.171339725423019260f, -0.985212006875659460f, 0.171150810238023340f, - -0.985244842744618540f, - 0.170961888760301360f, -0.985277642388941220f, 0.170772960996799230f, - -0.985310405807421570f, - 0.170584026954463700f, -0.985343132998854790f, 0.170395086640240920f, - -0.985375823962037710f, - 0.170206140061078120f, -0.985408478695768420f, 0.170017187223922090f, - -0.985441097198846210f, - 0.169828228135719880f, -0.985473679470071810f, 0.169639262803419400f, - -0.985506225508247290f, - 0.169450291233967930f, -0.985538735312176060f, 0.169261313434313890f, - -0.985571208880662740f, - 0.169072329411405180f, -0.985603646212513400f, 0.168883339172190010f, - -0.985636047306535420f, - 0.168694342723617440f, -0.985668412161537550f, 0.168505340072635900f, - -0.985700740776329850f, - 0.168316331226194910f, -0.985733033149723490f, 0.168127316191243350f, - -0.985765289280531310f, - 0.167938294974731230f, -0.985797509167567370f, 0.167749267583608030f, - -0.985829692809647050f, - 0.167560234024823590f, -0.985861840205586980f, 0.167371194305328540f, - -0.985893951354205210f, - 0.167182148432072880f, -0.985926026254321130f, 0.166993096412007770f, - -0.985958064904755460f, - 0.166804038252083870f, -0.985990067304330030f, 0.166614973959252090f, - -0.986022033451868560f, - 0.166425903540464220f, -0.986053963346195440f, 0.166236827002671390f, - -0.986085856986136820f, - 0.166047744352825850f, -0.986117714370520090f, 0.165858655597879430f, - -0.986149535498173860f, - 0.165669560744784140f, -0.986181320367928270f, 0.165480459800492890f, - -0.986213068978614490f, - 0.165291352771957970f, -0.986244781329065460f, 0.165102239666132720f, - -0.986276457418114980f, - 0.164913120489970090f, -0.986308097244598670f, 0.164723995250423190f, - -0.986339700807353000f, - 0.164534863954446110f, -0.986371268105216030f, 0.164345726608992190f, - -0.986402799137027220f, - 0.164156583221015890f, -0.986434293901627070f, 0.163967433797471110f, - -0.986465752397857940f, - 0.163778278345312690f, -0.986497174624562880f, 0.163589116871495160f, - -0.986528560580586690f, - 0.163399949382973230f, -0.986559910264775410f, 0.163210775886702460f, - -0.986591223675976400f, - 0.163021596389637810f, -0.986622500813038480f, 0.162832410898735260f, - -0.986653741674811350f, - 0.162643219420950450f, -0.986684946260146690f, 0.162454021963239190f, - -0.986716114567897100f, - 0.162264818532558110f, -0.986747246596916480f, 0.162075609135863330f, - -0.986778342346060430f, - 0.161886393780111910f, -0.986809401814185420f, 0.161697172472260540f, - -0.986840425000149680f, - 0.161507945219266150f, -0.986871411902812470f, 0.161318712028086540f, - -0.986902362521034470f, - 0.161129472905678780f, -0.986933276853677710f, 0.160940227859001140f, - -0.986964154899605650f, - 0.160750976895011390f, -0.986994996657682870f, 0.160561720020667510f, - -0.987025802126775600f, - 0.160372457242928400f, -0.987056571305750970f, 0.160183188568752240f, - -0.987087304193477900f, - 0.159993914005098350f, -0.987118000788826280f, 0.159804633558925380f, - -0.987148661090667570f, - 0.159615347237193090f, -0.987179285097874340f, 0.159426055046860750f, - -0.987209872809320820f, - 0.159236756994887850f, -0.987240424223882250f, 0.159047453088234840f, - -0.987270939340435420f, - 0.158858143333861390f, -0.987301418157858430f, 0.158668827738728370f, - -0.987331860675030430f, - 0.158479506309796100f, -0.987362266890832400f, 0.158290179054025180f, - -0.987392636804146240f, - 0.158100845978377090f, -0.987422970413855410f, 0.157911507089812640f, - -0.987453267718844560f, - 0.157722162395293690f, -0.987483528717999710f, 0.157532811901781670f, - -0.987513753410208420f, - 0.157343455616238280f, -0.987543941794359230f, 0.157154093545626010f, - -0.987574093869342360f, - 0.156964725696906750f, -0.987604209634049160f, 0.156775352077043430f, - -0.987634289087372160f, - 0.156585972692998590f, -0.987664332228205710f, 0.156396587551734940f, - -0.987694339055445130f, - 0.156207196660216040f, -0.987724309567986960f, 0.156017800025404830f, - -0.987754243764729530f, - 0.155828397654265320f, -0.987784141644572180f, 0.155638989553760850f, - -0.987814003206415550f, - 0.155449575730855880f, -0.987843828449161740f, 0.155260156192514380f, - -0.987873617371714200f, - 0.155070730945700510f, -0.987903369972977790f, 0.154881299997379400f, - -0.987933086251858380f, - 0.154691863354515400f, -0.987962766207263420f, 0.154502421024073990f, - -0.987992409838101880f, - 0.154312973013020240f, -0.988022017143283530f, 0.154123519328319360f, - -0.988051588121720110f, - 0.153934059976937460f, -0.988081122772324070f, 0.153744594965840000f, - -0.988110621094009820f, - 0.153555124301993500f, -0.988140083085692570f, 0.153365647992364020f, - -0.988169508746289060f, - 0.153176166043917870f, -0.988198898074717610f, 0.152986678463622160f, - -0.988228251069897420f, - 0.152797185258443410f, -0.988257567730749460f, 0.152607686435349140f, - -0.988286848056195710f, - 0.152418182001306500f, -0.988316092045159690f, 0.152228671963282770f, - -0.988345299696566150f, - 0.152039156328246160f, -0.988374471009341280f, 0.151849635103164180f, - -0.988403605982412390f, - 0.151660108295005400f, -0.988432704614708340f, 0.151470575910737760f, - -0.988461766905159300f, - 0.151281037957330250f, -0.988490792852696590f, 0.151091494441751430f, - -0.988519782456253270f, - 0.150901945370970040f, -0.988548735714763200f, 0.150712390751955720f, - -0.988577652627162020f, - 0.150522830591677370f, -0.988606533192386450f, 0.150333264897105050f, - -0.988635377409374790f, - 0.150143693675208330f, -0.988664185277066230f, 0.149954116932956990f, - -0.988692956794401940f, - 0.149764534677321620f, -0.988721691960323780f, 0.149574946915272210f, - -0.988750390773775360f, - 0.149385353653779810f, -0.988779053233701520f, 0.149195754899814960f, - -0.988807679339048340f, - 0.149006150660348470f, -0.988836269088763540f, 0.148816540942352030f, - -0.988864822481795640f, - 0.148626925752796540f, -0.988893339517095130f, 0.148437305098654050f, - -0.988921820193613190f, - 0.148247678986896200f, -0.988950264510302990f, 0.148058047424494740f, - -0.988978672466118480f, - 0.147868410418422360f, -0.989007044060015270f, 0.147678767975650970f, - -0.989035379290950310f, - 0.147489120103153680f, -0.989063678157881540f, 0.147299466807902820f, - -0.989091940659768800f, - 0.147109808096871850f, -0.989120166795572690f, 0.146920143977033760f, - -0.989148356564255590f, - 0.146730474455361750f, -0.989176509964781010f, 0.146540799538829870f, - -0.989204626996113780f, - 0.146351119234411440f, -0.989232707657220050f, 0.146161433549080950f, - -0.989260751947067640f, - 0.145971742489812370f, -0.989288759864625170f, 0.145782046063579860f, - -0.989316731408863000f, - 0.145592344277358450f, -0.989344666578752640f, 0.145402637138122540f, - -0.989372565373267010f, - 0.145212924652847520f, -0.989400427791380380f, 0.145023206828508360f, - -0.989428253832068230f, - 0.144833483672080240f, -0.989456043494307710f, 0.144643755190539150f, - -0.989483796777076760f, - 0.144454021390860440f, -0.989511513679355190f, 0.144264282280020530f, - -0.989539194200123930f, - 0.144074537864995330f, -0.989566838338365120f, 0.143884788152761010f, - -0.989594446093062460f, - 0.143695033150294580f, -0.989622017463200780f, 0.143505272864572290f, - -0.989649552447766530f, - 0.143315507302571590f, -0.989677051045747210f, 0.143125736471269140f, - -0.989704513256131850f, - 0.142935960377642700f, -0.989731939077910570f, 0.142746179028669620f, - -0.989759328510075200f, - 0.142556392431327340f, -0.989786681551618640f, 0.142366600592594260f, - -0.989813998201535260f, - 0.142176803519448000f, -0.989841278458820530f, 0.141987001218867340f, - -0.989868522322471580f, - 0.141797193697830530f, -0.989895729791486660f, 0.141607380963316020f, - -0.989922900864865450f, - 0.141417563022303130f, -0.989950035541608990f, 0.141227739881770480f, - -0.989977133820719610f, - 0.141037911548697770f, -0.990004195701200910f, 0.140848078030064220f, - -0.990031221182058000f, - 0.140658239332849240f, -0.990058210262297120f, 0.140468395464033110f, - -0.990085162940925970f, - 0.140278546430595420f, -0.990112079216953770f, 0.140088692239516780f, - -0.990138959089390650f, - 0.139898832897777380f, -0.990165802557248400f, 0.139708968412357580f, - -0.990192609619540030f, - 0.139519098790238600f, -0.990219380275280000f, 0.139329224038400980f, - -0.990246114523483990f, - 0.139139344163826280f, -0.990272812363169110f, 0.138949459173495440f, - -0.990299473793353590f, - 0.138759569074390380f, -0.990326098813057330f, 0.138569673873492640f, - -0.990352687421301340f, - 0.138379773577783890f, -0.990379239617108160f, 0.138189868194246640f, - -0.990405755399501260f, - 0.137999957729862760f, -0.990432234767505970f, 0.137810042191615130f, - -0.990458677720148620f, - 0.137620121586486180f, -0.990485084256456980f, 0.137430195921458550f, - -0.990511454375460290f, - 0.137240265203515700f, -0.990537788076188750f, 0.137050329439640380f, - -0.990564085357674370f, - 0.136860388636816430f, -0.990590346218950150f, 0.136670442802027230f, - -0.990616570659050620f, - 0.136480491942256310f, -0.990642758677011570f, 0.136290536064488070f, - -0.990668910271869980f, - 0.136100575175706200f, -0.990695025442664630f, 0.135910609282895440f, - -0.990721104188435180f, - 0.135720638393040080f, -0.990747146508222710f, 0.135530662513124620f, - -0.990773152401069780f, - 0.135340681650134330f, -0.990799121866020370f, 0.135150695811053850f, - -0.990825054902119470f, - 0.134960705002868830f, -0.990850951508413620f, 0.134770709232564290f, - -0.990876811683950810f, - 0.134580708507126220f, -0.990902635427780010f, 0.134390702833540240f, - -0.990928422738951990f, - 0.134200692218792020f, -0.990954173616518500f, 0.134010676669868210f, - -0.990979888059532740f, - 0.133820656193754690f, -0.991005566067049370f, 0.133630630797438390f, - -0.991031207638124130f, - 0.133440600487905820f, -0.991056812771814340f, 0.133250565272143570f, - -0.991082381467178640f, - 0.133060525157139180f, -0.991107913723276780f, 0.132870480149879400f, - -0.991133409539170170f, - 0.132680430257352130f, -0.991158868913921350f, 0.132490375486544710f, - -0.991184291846594180f, - 0.132300315844444680f, -0.991209678336254060f, 0.132110251338040470f, - -0.991235028381967420f, - 0.131920181974319760f, -0.991260341982802440f, 0.131730107760271280f, - -0.991285619137828200f, - 0.131540028702883280f, -0.991310859846115440f, 0.131349944809144220f, - -0.991336064106736140f, - 0.131159856086043410f, -0.991361231918763460f, 0.130969762540569380f, - -0.991386363281272280f, - 0.130779664179711790f, -0.991411458193338540f, 0.130589561010459600f, - -0.991436516654039420f, - 0.130399453039802740f, -0.991461538662453790f, 0.130209340274730770f, - -0.991486524217661480f, - 0.130019222722233350f, -0.991511473318743900f, 0.129829100389301010f, - -0.991536385964783880f, - 0.129638973282923540f, -0.991561262154865290f, 0.129448841410091830f, - -0.991586101888073500f, - 0.129258704777796270f, -0.991610905163495370f, 0.129068563393027410f, - -0.991635671980218740f, - 0.128878417262776660f, -0.991660402337333210f, 0.128688266394034690f, - -0.991685096233929530f, - 0.128498110793793220f, -0.991709753669099530f, 0.128307950469043590f, - -0.991734374641936810f, - 0.128117785426777150f, -0.991758959151536110f, 0.127927615673986190f, - -0.991783507196993490f, - 0.127737441217662280f, -0.991808018777406430f, 0.127547262064798050f, - -0.991832493891873780f, - 0.127357078222385570f, -0.991856932539495360f, 0.127166889697417180f, - -0.991881334719373010f, - 0.126976696496885980f, -0.991905700430609330f, 0.126786498627784430f, - -0.991930029672308480f, - 0.126596296097105960f, -0.991954322443575950f, 0.126406088911843320f, - -0.991978578743518580f, - 0.126215877078990400f, -0.992002798571244520f, 0.126025660605540460f, - -0.992026981925863360f, - 0.125835439498487020f, -0.992051128806485720f, 0.125645213764824380f, - -0.992075239212224070f, - 0.125454983411546210f, -0.992099313142191800f, 0.125264748445647110f, - -0.992123350595503720f, - 0.125074508874121300f, -0.992147351571276090f, 0.124884264703963150f, - -0.992171316068626520f, - 0.124694015942167770f, -0.992195244086673920f, 0.124503762595729650f, - -0.992219135624538450f, - 0.124313504671644300f, -0.992242990681341700f, 0.124123242176906760f, - -0.992266809256206580f, - 0.123932975118512200f, -0.992290591348257370f, 0.123742703503456630f, - -0.992314336956619640f, - 0.123552427338735370f, -0.992338046080420420f, 0.123362146631344750f, - -0.992361718718787870f, - 0.123171861388280650f, -0.992385354870851670f, 0.122981571616539080f, - -0.992408954535742850f, - 0.122791277323116900f, -0.992432517712593550f, 0.122600978515010240f, - -0.992456044400537700f, - 0.122410675199216280f, -0.992479534598709970f, 0.122220367382731500f, - -0.992502988306246950f, - 0.122030055072553410f, -0.992526405522286100f, 0.121839738275679020f, - -0.992549786245966570f, - 0.121649416999105540f, -0.992573130476428810f, 0.121459091249830950f, - -0.992596438212814290f, - 0.121268761034852550f, -0.992619709454266140f, 0.121078426361168710f, - -0.992642944199928820f, - 0.120888087235777220f, -0.992666142448948020f, 0.120697743665676120f, - -0.992689304200470750f, - 0.120507395657864240f, -0.992712429453645460f, 0.120317043219339670f, - -0.992735518207621850f, - 0.120126686357101580f, -0.992758570461551140f, 0.119936325078148620f, - -0.992781586214585570f, - 0.119745959389479630f, -0.992804565465879140f, 0.119555589298094230f, - -0.992827508214586760f, - 0.119365214810991350f, -0.992850414459865100f, 0.119174835935170960f, - -0.992873284200871730f, - 0.118984452677632520f, -0.992896117436765980f, 0.118794065045375670f, - -0.992918914166708300f, - 0.118603673045400840f, -0.992941674389860470f, 0.118413276684707770f, - -0.992964398105385610f, - 0.118222875970297250f, -0.992987085312448390f, 0.118032470909169300f, - -0.993009736010214580f, - 0.117842061508325020f, -0.993032350197851410f, 0.117651647774765000f, - -0.993054927874527320f, - 0.117461229715489990f, -0.993077469039412300f, 0.117270807337501560f, - -0.993099973691677570f, - 0.117080380647800550f, -0.993122441830495580f, 0.116889949653388850f, - -0.993144873455040430f, - 0.116699514361267840f, -0.993167268564487230f, 0.116509074778439050f, - -0.993189627158012620f, - 0.116318630911904880f, -0.993211949234794500f, 0.116128182768666920f, - -0.993234234794012290f, - 0.115937730355727850f, -0.993256483834846440f, 0.115747273680089870f, - -0.993278696356479030f, - 0.115556812748755290f, -0.993300872358093280f, 0.115366347568727250f, - -0.993323011838873950f, - 0.115175878147008180f, -0.993345114798006910f, 0.114985404490601530f, - -0.993367181234679600f, - 0.114794926606510250f, -0.993389211148080650f, 0.114604444501737460f, - -0.993411204537400060f, - 0.114413958183287050f, -0.993433161401829360f, 0.114223467658162260f, - -0.993455081740560960f, - 0.114032972933367300f, -0.993476965552789190f, 0.113842474015905660f, - -0.993498812837709360f, - 0.113651970912781920f, -0.993520623594518090f, 0.113461463631000080f, - -0.993542397822413600f, - 0.113270952177564360f, -0.993564135520595300f, 0.113080436559479720f, - -0.993585836688263950f, - 0.112889916783750470f, -0.993607501324621610f, 0.112699392857381910f, - -0.993629129428871720f, - 0.112508864787378830f, -0.993650721000219120f, 0.112318332580746190f, - -0.993672276037870010f, - 0.112127796244489750f, -0.993693794541031680f, 0.111937255785614560f, - -0.993715276508913230f, - 0.111746711211126660f, -0.993736721940724600f, 0.111556162528031630f, - -0.993758130835677430f, - 0.111365609743335190f, -0.993779503192984580f, 0.111175052864043830f, - -0.993800839011860120f, - 0.110984491897163380f, -0.993822138291519660f, 0.110793926849700630f, - -0.993843401031180180f, - 0.110603357728661910f, -0.993864627230059750f, 0.110412784541053660f, - -0.993885816887378090f, - 0.110222207293883180f, -0.993906970002356060f, 0.110031625994157000f, - -0.993928086574215830f, - 0.109841040648882680f, -0.993949166602181130f, 0.109650451265067080f, - -0.993970210085476920f, - 0.109459857849718030f, -0.993991217023329380f, 0.109269260409842920f, - -0.994012187414966220f, - 0.109078658952449240f, -0.994033121259616400f, 0.108888053484545310f, - -0.994054018556510210f, - 0.108697444013138670f, -0.994074879304879370f, 0.108506830545237980f, - -0.994095703503956930f, - 0.108316213087851300f, -0.994116491152977070f, 0.108125591647986880f, - -0.994137242251175720f, - 0.107934966232653760f, -0.994157956797789730f, 0.107744336848860260f, - -0.994178634792057590f, - 0.107553703503615710f, -0.994199276233218910f, 0.107363066203928920f, - -0.994219881120514850f, - 0.107172424956808870f, -0.994240449453187900f, 0.106981779769265340f, - -0.994260981230481790f, - 0.106791130648307380f, -0.994281476451641550f, 0.106600477600945030f, - -0.994301935115913580f, - 0.106409820634187840f, -0.994322357222545810f, 0.106219159755045520f, - -0.994342742770787270f, - 0.106028494970528530f, -0.994363091759888570f, 0.105837826287646670f, - -0.994383404189101430f, - 0.105647153713410700f, -0.994403680057679100f, 0.105456477254830660f, - -0.994423919364875950f, - 0.105265796918917650f, -0.994444122109948040f, 0.105075112712682180f, - -0.994464288292152390f, - 0.104884424643134970f, -0.994484417910747600f, 0.104693732717287500f, - -0.994504510964993590f, - 0.104503036942150550f, -0.994524567454151740f, 0.104312337324735870f, - -0.994544587377484300f, - 0.104121633872054730f, -0.994564570734255420f, 0.103930926591118540f, - -0.994584517523730340f, - 0.103740215488939480f, -0.994604427745175660f, 0.103549500572529040f, - -0.994624301397859400f, - 0.103358781848899700f, -0.994644138481050710f, 0.103168059325063390f, - -0.994663938994020280f, - 0.102977333008032250f, -0.994683702936040250f, 0.102786602904819150f, - -0.994703430306383860f, - 0.102595869022436280f, -0.994723121104325700f, 0.102405131367896790f, - -0.994742775329142010f, - 0.102214389948213370f, -0.994762392980109930f, 0.102023644770398800f, - -0.994781974056508260f, - 0.101832895841466670f, -0.994801518557617110f, 0.101642143168429830f, - -0.994821026482717860f, - 0.101451386758302160f, -0.994840497831093180f, 0.101260626618096800f, - -0.994859932602027320f, - 0.101069862754827880f, -0.994879330794805620f, 0.100879095175509010f, - -0.994898692408714870f, - 0.100688323887153970f, -0.994918017443043200f, 0.100497548896777310f, - -0.994937305897080070f, - 0.100306770211392820f, -0.994956557770116380f, 0.100115987838015370f, - -0.994975773061444140f, - 0.099925201783659226f, -0.994994951770357020f, 0.099734412055338839f, - -0.995014093896149700f, - 0.099543618660069444f, -0.995033199438118630f, 0.099352821604865513f, - -0.995052268395561160f, - 0.099162020896742573f, -0.995071300767776170f, 0.098971216542715582f, - -0.995090296554063890f, - 0.098780408549799664f, -0.995109255753726110f, 0.098589596925010708f, - -0.995128178366065490f, - 0.098398781675363881f, -0.995147064390386470f, 0.098207962807875346f, - -0.995165913825994620f, - 0.098017140329560770f, -0.995184726672196820f, 0.097826314247435903f, - -0.995203502928301510f, - 0.097635484568517339f, -0.995222242593618240f, 0.097444651299820870f, - -0.995240945667458130f, - 0.097253814448363354f, -0.995259612149133390f, 0.097062974021160875f, - -0.995278242037957670f, - 0.096872130025230527f, -0.995296835333246090f, 0.096681282467588864f, - -0.995315392034315070f, - 0.096490431355252607f, -0.995333912140482280f, 0.096299576695239225f, - -0.995352395651066810f, - 0.096108718494565468f, -0.995370842565388990f, 0.095917856760249096f, - -0.995389252882770690f, - 0.095726991499307315f, -0.995407626602534900f, 0.095536122718757485f, - -0.995425963724006160f, - 0.095345250425617742f, -0.995444264246510340f, 0.095154374626905472f, - -0.995462528169374420f, - 0.094963495329639061f, -0.995480755491926940f, 0.094772612540836410f, - -0.995498946213497770f, - 0.094581726267515473f, -0.995517100333418110f, 0.094390836516695067f, - -0.995535217851020390f, - 0.094199943295393190f, -0.995553298765638470f, 0.094009046610628907f, - -0.995571343076607770f, - 0.093818146469420494f, -0.995589350783264600f, 0.093627242878787237f, - -0.995607321884947050f, - 0.093436335845747912f, -0.995625256380994310f, 0.093245425377321389f, - -0.995643154270746900f, - 0.093054511480527333f, -0.995661015553546910f, 0.092863594162384697f, - -0.995678840228737540f, - 0.092672673429913366f, -0.995696628295663520f, 0.092481749290132753f, - -0.995714379753670610f, - 0.092290821750062355f, -0.995732094602106430f, 0.092099890816722485f, - -0.995749772840319400f, - 0.091908956497132696f, -0.995767414467659820f, 0.091718018798313525f, - -0.995785019483478750f, - 0.091527077727284981f, -0.995802587887129160f, 0.091336133291067212f, - -0.995820119677964910f, - 0.091145185496681130f, -0.995837614855341610f, 0.090954234351146898f, - -0.995855073418615790f, - 0.090763279861485704f, -0.995872495367145730f, 0.090572322034718156f, - -0.995889880700290720f, - 0.090381360877865011f, -0.995907229417411720f, 0.090190396397947820f, - -0.995924541517870690f, - 0.089999428601987341f, -0.995941817001031350f, 0.089808457497005362f, - -0.995959055866258320f, - 0.089617483090022917f, -0.995976258112917790f, 0.089426505388062016f, - -0.995993423740377360f, - 0.089235524398144139f, -0.996010552748005870f, 0.089044540127290905f, - -0.996027645135173610f, - 0.088853552582524684f, -0.996044700901251970f, 0.088662561770867121f, - -0.996061720045614000f, - 0.088471567699340822f, -0.996078702567633980f, 0.088280570374967879f, - -0.996095648466687300f, - 0.088089569804770507f, -0.996112557742151130f, 0.087898565995771685f, - -0.996129430393403740f, - 0.087707558954993645f, -0.996146266419824620f, 0.087516548689459586f, - -0.996163065820794950f, - 0.087325535206192226f, -0.996179828595696870f, 0.087134518512214321f, - -0.996196554743914220f, - 0.086943498614549489f, -0.996213244264832040f, 0.086752475520220515f, - -0.996229897157836500f, - 0.086561449236251239f, -0.996246513422315520f, 0.086370419769664919f, - -0.996263093057658030f, - 0.086179387127484922f, -0.996279636063254650f, 0.085988351316735448f, - -0.996296142438496850f, - 0.085797312344439880f, -0.996312612182778000f, 0.085606270217622613f, - -0.996329045295492380f, - 0.085415224943307277f, -0.996345441776035900f, 0.085224176528518519f, - -0.996361801623805720f, - 0.085033124980280414f, -0.996378124838200210f, 0.084842070305617148f, - -0.996394411418619290f, - 0.084651012511553700f, -0.996410661364464100f, 0.084459951605114297f, - -0.996426874675137240f, - 0.084268887593324127f, -0.996443051350042630f, 0.084077820483207846f, - -0.996459191388585410f, - 0.083886750281790226f, -0.996475294790172160f, 0.083695676996096827f, - -0.996491361554210920f, - 0.083504600633152404f, -0.996507391680110820f, 0.083313521199982740f, - -0.996523385167282450f, - 0.083122438703613077f, -0.996539342015137940f, 0.082931353151068726f, - -0.996555262223090540f, - 0.082740264549375803f, -0.996571145790554840f, 0.082549172905559659f, - -0.996586992716946950f, - 0.082358078226646619f, -0.996602803001684130f, 0.082166980519662466f, - -0.996618576644185070f, - 0.081975879791633108f, -0.996634313643869900f, 0.081784776049585201f, - -0.996650014000160070f, - 0.081593669300544638f, -0.996665677712478160f, 0.081402559551538328f, - -0.996681304780248300f, - 0.081211446809592386f, -0.996696895202896060f, 0.081020331081733912f, - -0.996712448979848010f, - 0.080829212374989468f, -0.996727966110532490f, 0.080638090696385709f, - -0.996743446594378860f, - 0.080446966052950097f, -0.996758890430818000f, 0.080255838451709291f, - -0.996774297619282050f, - 0.080064707899690932f, -0.996789668159204560f, 0.079873574403922148f, - -0.996805002050020320f, - 0.079682437971430126f, -0.996820299291165670f, 0.079491298609242866f, - -0.996835559882078170f, - 0.079300156324387569f, -0.996850783822196610f, 0.079109011123892431f, - -0.996865971110961310f, - 0.078917863014785095f, -0.996881121747813850f, 0.078726712004093313f, - -0.996896235732197210f, - 0.078535558098845590f, -0.996911313063555740f, 0.078344401306069678f, - -0.996926353741335090f, - 0.078153241632794315f, -0.996941357764982160f, 0.077962079086047645f, - -0.996956325133945280f, - 0.077770913672857989f, -0.996971255847674320f, 0.077579745400254363f, - -0.996986149905620180f, - 0.077388574275265049f, -0.997001007307235290f, 0.077197400304919297f, - -0.997015828051973310f, - 0.077006223496245585f, -0.997030612139289450f, 0.076815043856273399f, - -0.997045359568640040f, - 0.076623861392031617f, -0.997060070339482960f, 0.076432676110549283f, - -0.997074744451277310f, - 0.076241488018856149f, -0.997089381903483400f, 0.076050297123981231f, - -0.997103982695563330f, - 0.075859103432954503f, -0.997118546826979980f, 0.075667906952805383f, - -0.997133074297198110f, - 0.075476707690563416f, -0.997147565105683480f, 0.075285505653258880f, - -0.997162019251903290f, - 0.075094300847921291f, -0.997176436735326190f, 0.074903093281581137f, - -0.997190817555421940f, - 0.074711882961268378f, -0.997205161711661850f, 0.074520669894013014f, - -0.997219469203518670f, - 0.074329454086845867f, -0.997233740030466160f, 0.074138235546796952f, - -0.997247974191979860f, - 0.073947014280897269f, -0.997262171687536170f, 0.073755790296177265f, - -0.997276332516613180f, - 0.073564563599667454f, -0.997290456678690210f, 0.073373334198399157f, - -0.997304544173247990f, - 0.073182102099402888f, -0.997318594999768600f, 0.072990867309710133f, - -0.997332609157735470f, - 0.072799629836351618f, -0.997346586646633230f, 0.072608389686359048f, - -0.997360527465947940f, - 0.072417146866763538f, -0.997374431615167030f, 0.072225901384596336f, - -0.997388299093779460f, - 0.072034653246889416f, -0.997402129901275300f, 0.071843402460674000f, - -0.997415924037145960f, - 0.071652149032982254f, -0.997429681500884180f, 0.071460892970845832f, - -0.997443402291984360f, - 0.071269634281296415f, -0.997457086409941910f, 0.071078372971366502f, - -0.997470733854253670f, - 0.070887109048087787f, -0.997484344624417930f, 0.070695842518492924f, - -0.997497918719934210f, - 0.070504573389614009f, -0.997511456140303450f, 0.070313301668483263f, - -0.997524956885027960f, - 0.070122027362133646f, -0.997538420953611230f, 0.069930750477597295f, - -0.997551848345558430f, - 0.069739471021907376f, -0.997565239060375750f, 0.069548189002096472f, - -0.997578593097570800f, - 0.069356904425197236f, -0.997591910456652630f, 0.069165617298243109f, - -0.997605191137131640f, - 0.068974327628266732f, -0.997618435138519550f, 0.068783035422301728f, - -0.997631642460329320f, - 0.068591740687380900f, -0.997644813102075420f, 0.068400443430538069f, - -0.997657947063273710f, - 0.068209143658806454f, -0.997671044343441000f, 0.068017841379219388f, - -0.997684104942096030f, - 0.067826536598810966f, -0.997697128858758500f, 0.067635229324614451f, - -0.997710116092949570f, - 0.067443919563664106f, -0.997723066644191640f, 0.067252607322993652f, - -0.997735980512008620f, - 0.067061292609636836f, -0.997748857695925690f, 0.066869975430628226f, - -0.997761698195469560f, - 0.066678655793001543f, -0.997774502010167820f, 0.066487333703791507f, - -0.997787269139549960f, - 0.066296009170032283f, -0.997799999583146470f, 0.066104682198758091f, - -0.997812693340489280f, - 0.065913352797003930f, -0.997825350411111640f, 0.065722020971803977f, - -0.997837970794548280f, - 0.065530686730193397f, -0.997850554490335110f, 0.065339350079206798f, - -0.997863101498009500f, - 0.065148011025878860f, -0.997875611817110150f, 0.064956669577245010f, - -0.997888085447177110f, - 0.064765325740339871f, -0.997900522387751620f, 0.064573979522199065f, - -0.997912922638376610f, - 0.064382630929857410f, -0.997925286198596000f, 0.064191279970350679f, - -0.997937613067955250f, - 0.063999926650714078f, -0.997949903246001190f, 0.063808570977982898f, - -0.997962156732281950f, - 0.063617212959193190f, -0.997974373526346990f, 0.063425852601380200f, - -0.997986553627747020f, - 0.063234489911580136f, -0.997998697036034390f, 0.063043124896828631f, - -0.998010803750762450f, - 0.062851757564161420f, -0.998022873771486240f, 0.062660387920614985f, - -0.998034907097761770f, - 0.062469015973224969f, -0.998046903729146840f, 0.062277641729028041f, - -0.998058863665200250f, - 0.062086265195060247f, -0.998070786905482340f, 0.061894886378357744f, - -0.998082673449554590f, - 0.061703505285957416f, -0.998094523296980010f, 0.061512121924895365f, - -0.998106336447323050f, - 0.061320736302208648f, -0.998118112900149180f, 0.061129348424933755f, - -0.998129852655025520f, - 0.060937958300107238f, -0.998141555711520520f, 0.060746565934766412f, - -0.998153222069203650f, - 0.060555171335947781f, -0.998164851727646240f, 0.060363774510688827f, - -0.998176444686420530f, - 0.060172375466026218f, -0.998188000945100300f, 0.059980974208997596f, - -0.998199520503260660f, - 0.059789570746640007f, -0.998211003360478190f, 0.059598165085990598f, - -0.998222449516330550f, - 0.059406757234087247f, -0.998233858970396850f, 0.059215347197967026f, - -0.998245231722257880f, - 0.059023934984667986f, -0.998256567771495180f, 0.058832520601227581f, - -0.998267867117692110f, - 0.058641104054683348f, -0.998279129760433200f, 0.058449685352073573f, - -0.998290355699304350f, - 0.058258264500435732f, -0.998301544933892890f, 0.058066841506808263f, - -0.998312697463787260f, - 0.057875416378229017f, -0.998323813288577560f, 0.057683989121735932f, - -0.998334892407855000f, - 0.057492559744367684f, -0.998345934821212370f, 0.057301128253162144f, - -0.998356940528243420f, - 0.057109694655158132f, -0.998367909528543820f, 0.056918258957393907f, - -0.998378841821709990f, - 0.056726821166907783f, -0.998389737407340160f, 0.056535381290738825f, - -0.998400596285033640f, - 0.056343939335925283f, -0.998411418454391300f, 0.056152495309506383f, - -0.998422203915015020f, - 0.055961049218520520f, -0.998432952666508440f, 0.055769601070007072f, - -0.998443664708476340f, - 0.055578150871004817f, -0.998454340040524800f, 0.055386698628552604f, - -0.998464978662261250f, - 0.055195244349690031f, -0.998475580573294770f, 0.055003788041455885f, - -0.998486145773235360f, - 0.054812329710889909f, -0.998496674261694640f, 0.054620869365031251f, - -0.998507166038285490f, - 0.054429407010919147f, -0.998517621102622210f, 0.054237942655593556f, - -0.998528039454320230f, - 0.054046476306093640f, -0.998538421092996730f, 0.053855007969459509f, - -0.998548766018269920f, - 0.053663537652730679f, -0.998559074229759310f, 0.053472065362946755f, - -0.998569345727086110f, - 0.053280591107148056f, -0.998579580509872500f, 0.053089114892374119f, - -0.998589778577742230f, - 0.052897636725665401f, -0.998599939930320370f, 0.052706156614061798f, - -0.998610064567233340f, - 0.052514674564603257f, -0.998620152488108870f, 0.052323190584330471f, - -0.998630203692576050f, - 0.052131704680283317f, -0.998640218180265270f, 0.051940216859502626f, - -0.998650195950808280f, - 0.051748727129028414f, -0.998660137003838490f, 0.051557235495901653f, - -0.998670041338990070f, - 0.051365741967162731f, -0.998679908955899090f, 0.051174246549852087f, - -0.998689739854202620f, - 0.050982749251010900f, -0.998699534033539280f, 0.050791250077679546f, - -0.998709291493549030f, - 0.050599749036899337f, -0.998719012233872940f, 0.050408246135710995f, - -0.998728696254153720f, - 0.050216741381155325f, -0.998738343554035230f, 0.050025234780273840f, - -0.998747954133162860f, - 0.049833726340107257f, -0.998757527991183340f, 0.049642216067697226f, - -0.998767065127744380f, - 0.049450703970084824f, -0.998776565542495610f, 0.049259190054311168f, - -0.998786029235087640f, - 0.049067674327418126f, -0.998795456205172410f, 0.048876156796446746f, - -0.998804846452403420f, - 0.048684637468439020f, -0.998814199976435390f, 0.048493116350436342f, - -0.998823516776924380f, - 0.048301593449480172f, -0.998832796853527990f, 0.048110068772612716f, - -0.998842040205904840f, - 0.047918542326875327f, -0.998851246833715180f, 0.047727014119310344f, - -0.998860416736620520f, - 0.047535484156959261f, -0.998869549914283560f, 0.047343952446864526f, - -0.998878646366368690f, - 0.047152418996068000f, -0.998887706092541290f, 0.046960883811611599f, - -0.998896729092468410f, - 0.046769346900537960f, -0.998905715365818290f, 0.046577808269888908f, - -0.998914664912260440f, - 0.046386267926707213f, -0.998923577731465780f, 0.046194725878035046f, - -0.998932453823106690f, - 0.046003182130914644f, -0.998941293186856870f, 0.045811636692388955f, - -0.998950095822391250f, - 0.045620089569500123f, -0.998958861729386080f, 0.045428540769291224f, - -0.998967590907519300f, - 0.045236990298804750f, -0.998976283356469820f, 0.045045438165083225f, - -0.998984939075918010f, - 0.044853884375169933f, -0.998993558065545680f, 0.044662328936107311f, - -0.999002140325035980f, - 0.044470771854938744f, -0.999010685854073380f, 0.044279213138707016f, - -0.999019194652343460f, - 0.044087652794454979f, -0.999027666719533690f, 0.043896090829226200f, - -0.999036102055332330f, - 0.043704527250063421f, -0.999044500659429290f, 0.043512962064010327f, - -0.999052862531515930f, - 0.043321395278109784f, -0.999061187671284600f, 0.043129826899405595f, - -0.999069476078429330f, - 0.042938256934940959f, -0.999077727752645360f, 0.042746685391759139f, - -0.999085942693629270f, - 0.042555112276904117f, -0.999094120901079070f, 0.042363537597419038f, - -0.999102262374694130f, - 0.042171961360348002f, -0.999110367114174890f, 0.041980383572734502f, - -0.999118435119223490f, - 0.041788804241622082f, -0.999126466389543390f, 0.041597223374055005f, - -0.999134460924839150f, - 0.041405640977076712f, -0.999142418724816910f, 0.041214057057731589f, - -0.999150339789184110f, - 0.041022471623063397f, -0.999158224117649430f, 0.040830884680115968f, - -0.999166071709923000f, - 0.040639296235933854f, -0.999173882565716380f, 0.040447706297560768f, - -0.999181656684742350f, - 0.040256114872041358f, -0.999189394066714920f, 0.040064521966419686f, - -0.999197094711349880f, - 0.039872927587739845f, -0.999204758618363890f, 0.039681331743046659f, - -0.999212385787475290f, - 0.039489734439384118f, -0.999219976218403530f, 0.039298135683797149f, - -0.999227529910869610f, - 0.039106535483329839f, -0.999235046864595850f, 0.038914933845027241f, - -0.999242527079305830f, - 0.038723330775933762f, -0.999249970554724420f, 0.038531726283093877f, - -0.999257377290578060f, - 0.038340120373552791f, -0.999264747286594420f, 0.038148513054354856f, - -0.999272080542502610f, - 0.037956904332545366f, -0.999279377058032710f, 0.037765294215169005f, - -0.999286636832916740f, - 0.037573682709270514f, -0.999293859866887790f, 0.037382069821895340f, - -0.999301046159680070f, - 0.037190455560088091f, -0.999308195711029470f, 0.036998839930894332f, - -0.999315308520673070f, - 0.036807222941358991f, -0.999322384588349540f, 0.036615604598527057f, - -0.999329423913798420f, - 0.036423984909444228f, -0.999336426496761240f, 0.036232363881155374f, - -0.999343392336980220f, - 0.036040741520706299f, -0.999350321434199440f, 0.035849117835142184f, - -0.999357213788164000f, - 0.035657492831508264f, -0.999364069398620550f, 0.035465866516850478f, - -0.999370888265317060f, - 0.035274238898213947f, -0.999377670388002850f, 0.035082609982644702f, - -0.999384415766428560f, - 0.034890979777187955f, -0.999391124400346050f, 0.034699348288889847f, - -0.999397796289508640f, - 0.034507715524795889f, -0.999404431433671300f, 0.034316081491951658f, - -0.999411029832589780f, - 0.034124446197403423f, -0.999417591486021720f, 0.033932809648196623f, - -0.999424116393725640f, - 0.033741171851377642f, -0.999430604555461730f, 0.033549532813992221f, - -0.999437055970991530f, - 0.033357892543086159f, -0.999443470640077770f, 0.033166251045705968f, - -0.999449848562484530f, - 0.032974608328897315f, -0.999456189737977340f, 0.032782964399706793f, - -0.999462494166323160f, - 0.032591319265180385f, -0.999468761847290050f, 0.032399672932364114f, - -0.999474992780647780f, - 0.032208025408304704f, -0.999481186966166950f, 0.032016376700048046f, - -0.999487344403620080f, - 0.031824726814640963f, -0.999493465092780590f, 0.031633075759129645f, - -0.999499549033423640f, - 0.031441423540560343f, -0.999505596225325310f, 0.031249770165979990f, - -0.999511606668263440f, - 0.031058115642434700f, -0.999517580362016990f, 0.030866459976971503f, - -0.999523517306366350f, - 0.030674803176636581f, -0.999529417501093140f, 0.030483145248477058f, - -0.999535280945980540f, - 0.030291486199539423f, -0.999541107640812940f, 0.030099826036870208f, - -0.999546897585375960f, - 0.029908164767516655f, -0.999552650779456990f, 0.029716502398525156f, - -0.999558367222844300f, - 0.029524838936943035f, -0.999564046915327740f, 0.029333174389816984f, - -0.999569689856698580f, - 0.029141508764193740f, -0.999575296046749220f, 0.028949842067120746f, - -0.999580865485273700f, - 0.028758174305644590f, -0.999586398172067070f, 0.028566505486812797f, - -0.999591894106925950f, - 0.028374835617672258f, -0.999597353289648380f, 0.028183164705269902f, - -0.999602775720033530f, - 0.027991492756653365f, -0.999608161397882110f, 0.027799819778869434f, - -0.999613510322995950f, - 0.027608145778965820f, -0.999618822495178640f, 0.027416470763989606f, - -0.999624097914234570f, - 0.027224794740987910f, -0.999629336579970110f, 0.027033117717008563f, - -0.999634538492192300f, - 0.026841439699098527f, -0.999639703650710200f, 0.026649760694305708f, - -0.999644832055333610f, - 0.026458080709677145f, -0.999649923705874240f, 0.026266399752260809f, - -0.999654978602144690f, - 0.026074717829104040f, -0.999659996743959220f, 0.025883034947254208f, - -0.999664978131133310f, - 0.025691351113759395f, -0.999669922763483760f, 0.025499666335666818f, - -0.999674830640828740f, - 0.025307980620024630f, -0.999679701762987930f, 0.025116293973880335f, - -0.999684536129782140f, - 0.024924606404281485f, -0.999689333741033640f, 0.024732917918276334f, - -0.999694094596566000f, - 0.024541228522912264f, -0.999698818696204250f, 0.024349538225237600f, - -0.999703506039774650f, - 0.024157847032300020f, -0.999708156627104880f, 0.023966154951147241f, - -0.999712770458023870f, - 0.023774461988827676f, -0.999717347532362190f, 0.023582768152388880f, - -0.999721887849951310f, - 0.023391073448879338f, -0.999726391410624470f, 0.023199377885346890f, - -0.999730858214216030f, - 0.023007681468839410f, -0.999735288260561680f, 0.022815984206405477f, - -0.999739681549498660f, - 0.022624286105092803f, -0.999744038080865430f, 0.022432587171950024f, - -0.999748357854501780f, - 0.022240887414024919f, -0.999752640870248840f, 0.022049186838366180f, - -0.999756887127949080f, - 0.021857485452021874f, -0.999761096627446610f, 0.021665783262040089f, - -0.999765269368586450f, - 0.021474080275469605f, -0.999769405351215280f, 0.021282376499358355f, - -0.999773504575180990f, - 0.021090671940755180f, -0.999777567040332940f, 0.020898966606708289f, - -0.999781592746521670f, - 0.020707260504265912f, -0.999785581693599210f, 0.020515553640476986f, - -0.999789533881418780f, - 0.020323846022389572f, -0.999793449309835270f, 0.020132137657052664f, - -0.999797327978704690f, - 0.019940428551514598f, -0.999801169887884260f, 0.019748718712823757f, - -0.999804975037232870f, - 0.019557008148029204f, -0.999808743426610520f, 0.019365296864179146f, - -0.999812475055878780f, - 0.019173584868322699f, -0.999816169924900410f, 0.018981872167508348f, - -0.999819828033539420f, - 0.018790158768784596f, -0.999823449381661570f, 0.018598444679200642f, - -0.999827033969133420f, - 0.018406729905804820f, -0.999830581795823400f, 0.018215014455646376f, - -0.999834092861600960f, - 0.018023298335773701f, -0.999837567166337090f, 0.017831581553236088f, - -0.999841004709904000f, - 0.017639864115082195f, -0.999844405492175240f, 0.017448146028360704f, - -0.999847769513025900f, - 0.017256427300120978f, -0.999851096772332190f, 0.017064707937411529f, - -0.999854387269971890f, - 0.016872987947281773f, -0.999857641005823860f, 0.016681267336780482f, - -0.999860857979768540f, - 0.016489546112956454f, -0.999864038191687680f, 0.016297824282859176f, - -0.999867181641464380f, - 0.016106101853537263f, -0.999870288328982950f, 0.015914378832040249f, - -0.999873358254129260f, - 0.015722655225417017f, -0.999876391416790410f, 0.015530931040716478f, - -0.999879387816854930f, - 0.015339206284988220f, -0.999882347454212560f, 0.015147480965280975f, - -0.999885270328754520f, - 0.014955755088644378f, -0.999888156440373320f, 0.014764028662127416f, - -0.999891005788962950f, - 0.014572301692779104f, -0.999893818374418490f, 0.014380574187649138f, - -0.999896594196636680f, - 0.014188846153786343f, -0.999899333255515390f, 0.013997117598240459f, - -0.999902035550953920f, - 0.013805388528060349f, -0.999904701082852900f, 0.013613658950295789f, - -0.999907329851114300f, - 0.013421928871995907f, -0.999909921855641540f, 0.013230198300209845f, - -0.999912477096339240f, - 0.013038467241987433f, -0.999914995573113470f, 0.012846735704377631f, - -0.999917477285871770f, - 0.012655003694430301f, -0.999919922234522750f, 0.012463271219194662f, - -0.999922330418976490f, - 0.012271538285719944f, -0.999924701839144500f, 0.012079804901056066f, - -0.999927036494939640f, - 0.011888071072252072f, -0.999929334386276070f, 0.011696336806357907f, - -0.999931595513069200f, - 0.011504602110422875f, -0.999933819875236000f, 0.011312866991496287f, - -0.999936007472694620f, - 0.011121131456628141f, -0.999938158305364590f, 0.010929395512867561f, - -0.999940272373166960f, - 0.010737659167264572f, -0.999942349676023910f, 0.010545922426868548f, - -0.999944390213859060f, - 0.010354185298728884f, -0.999946393986597460f, 0.010162447789895645f, - -0.999948360994165400f, - 0.009970709907418029f, -0.999950291236490480f, 0.009778971658346134f, - -0.999952184713501780f, - 0.009587233049729183f, -0.999954041425129780f, 0.009395494088617302f, - -0.999955861371306100f, - 0.009203754782059960f, -0.999957644551963900f, 0.009012015137106642f, - -0.999959390967037450f, - 0.008820275160807512f, -0.999961100616462820f, 0.008628534860211857f, - -0.999962773500176930f, - 0.008436794242369860f, -0.999964409618118280f, 0.008245053314331058f, - -0.999966008970226920f, - 0.008053312083144991f, -0.999967571556443780f, 0.007861570555861883f, - -0.999969097376711580f, - 0.007669828739531077f, -0.999970586430974140f, 0.007478086641202815f, - -0.999972038719176730f, - 0.007286344267926684f, -0.999973454241265940f, 0.007094601626752279f, - -0.999974832997189810f, - 0.006902858724729877f, -0.999976174986897610f, 0.006711115568908869f, - -0.999977480210339940f, - 0.006519372166339549f, -0.999978748667468830f, 0.006327628524071549f, - -0.999979980358237650f, - 0.006135884649154515f, -0.999981175282601110f, 0.005944140548638765f, - -0.999982333440515350f, - 0.005752396229573737f, -0.999983454831937730f, 0.005560651699009764f, - -0.999984539456826970f, - 0.005368906963996303f, -0.999985587315143200f, 0.005177162031583702f, - -0.999986598406848000f, - 0.004985416908821652f, -0.999987572731904080f, 0.004793671602759852f, - -0.999988510290275690f, - 0.004601926120448672f, -0.999989411081928400f, 0.004410180468937601f, - -0.999990275106828920f, - 0.004218434655277024f, -0.999991102364945590f, 0.004026688686516664f, - -0.999991892856248010f, - 0.003834942569706248f, -0.999992646580707190f, 0.003643196311896179f, - -0.999993363538295150f, - 0.003451449920135975f, -0.999994043728985820f, 0.003259703401476044f, - -0.999994687152754080f, - 0.003067956762966138f, -0.999995293809576190f, 0.002876210011656010f, - -0.999995863699429940f, - 0.002684463154596083f, -0.999996396822294350f, 0.002492716198835898f, - -0.999996893178149880f, - 0.002300969151425887f, -0.999997352766978210f, 0.002109222019415816f, - -0.999997775588762350f, - 0.001917474809855460f, -0.999998161643486980f, 0.001725727529795258f, - -0.999998510931137790f, - 0.001533980186284766f, -0.999998823451701880f, 0.001342232786374430f, - -0.999999099205167830f, - 0.001150485337113809f, -0.999999338191525530f, 0.000958737845553352f, - -0.999999540410766110f, - 0.000766990318742846f, -0.999999705862882230f, 0.000575242763732077f, - -0.999999834547867670f, - 0.000383495187571497f, -0.999999926465717890f, 0.000191747597310674f, - -0.999999981616429330f -}; - - const float32_t cos_factors_8192[8192] = { - 1.999999990808214700f, 1.999999917273932200f, 1.999999770205369800f, - 1.999999549602533100f, - 1.999999255465430200f, 1.999998887794072000f, 1.999998446588471700f, - 1.999997931848645600f, - 1.999997343574612800f, 1.999996681766395000f, 1.999995946424016200f, - 1.999995137547503600f, - 1.999994255136887000f, 1.999993299192198700f, 1.999992269713474200f, - 1.999991166700750800f, - 1.999989990154069600f, 1.999988740073473500f, 1.999987416459008600f, - 1.999986019310723500f, - 1.999984548628669600f, 1.999983004412901000f, 1.999981386663474400f, - 1.999979695380449400f, - 1.999977930563888100f, 1.999976092213855400f, 1.999974180330418700f, - 1.999972194913648900f, - 1.999970135963618400f, 1.999968003480403000f, 1.999965797464081200f, - 1.999963517914734100f, - 1.999961164832445800f, 1.999958738217302300f, 1.999956238069392900f, - 1.999953664388809800f, - 1.999951017175647600f, 1.999948296430003500f, 1.999945502151977600f, - 1.999942634341672600f, - 1.999939692999193900f, 1.999936678124649700f, 1.999933589718150700f, - 1.999930427779810900f, - 1.999927192309745900f, 1.999923883308075200f, 1.999920500774920300f, - 1.999917044710405500f, - 1.999913515114657900f, 1.999909911987807200f, 1.999906235329986100f, - 1.999902485141329400f, - 1.999898661421975400f, 1.999894764172064600f, 1.999890793391740000f, - 1.999886749081147800f, - 1.999882631240436700f, 1.999878439869758200f, 1.999874174969266300f, - 1.999869836539117700f, - 1.999865424579472000f, 1.999860939090491600f, 1.999856380072341000f, - 1.999851747525188200f, - 1.999847041449203300f, 1.999842261844559700f, 1.999837408711432600f, - 1.999832482050000900f, - 1.999827481860445300f, 1.999822408142949900f, 1.999817260897701400f, - 1.999812040124888700f, - 1.999806745824704000f, 1.999801377997341800f, 1.999795936642999600f, - 1.999790421761877400f, - 1.999784833354177900f, 1.999779171420106700f, 1.999773435959872000f, - 1.999767626973684400f, - 1.999761744461757700f, 1.999755788424308200f, 1.999749758861554900f, - 1.999743655773719400f, - 1.999737479161026100f, 1.999731229023702200f, 1.999724905361977200f, - 1.999718508176084000f, - 1.999712037466257600f, 1.999705493232735800f, 1.999698875475759600f, - 1.999692184195571900f, - 1.999685419392419000f, 1.999678581066549400f, 1.999671669218214600f, - 1.999664683847668800f, - 1.999657624955168700f, 1.999650492540973900f, 1.999643286605346800f, - 1.999636007148552400f, - 1.999628654170857900f, 1.999621227672533800f, 1.999613727653853500f, - 1.999606154115092500f, - 1.999598507056529000f, 1.999590786478444600f, 1.999582992381123000f, - 1.999575124764850800f, - 1.999567183629917100f, 1.999559168976613900f, 1.999551080805236100f, - 1.999542919116081000f, - 1.999534683909448600f, 1.999526375185641800f, 1.999517992944965800f, - 1.999509537187729200f, - 1.999501007914242600f, 1.999492405124819700f, 1.999483728819776900f, - 1.999474978999432800f, - 1.999466155664109600f, 1.999457258814131500f, 1.999448288449825500f, - 1.999439244571521700f, - 1.999430127179552500f, 1.999420936274252800f, 1.999411671855960900f, - 1.999402333925017300f, - 1.999392922481765500f, 1.999383437526551300f, 1.999373879059723500f, - 1.999364247081633500f, - 1.999354541592635500f, 1.999344762593086500f, 1.999334910083345700f, - 1.999324984063775700f, - 1.999314984534741100f, 1.999304911496609700f, 1.999294764949752100f, - 1.999284544894541100f, - 1.999274251331352400f, 1.999263884260564600f, 1.999253443682558900f, - 1.999242929597719200f, - 1.999232342006432000f, 1.999221680909086400f, 1.999210946306074500f, - 1.999200138197791100f, - 1.999189256584633600f, 1.999178301467001900f, 1.999167272845298900f, - 1.999156170719930100f, - 1.999144995091303600f, 1.999133745959830600f, 1.999122423325924200f, - 1.999111027190001000f, - 1.999099557552479900f, 1.999088014413782800f, 1.999076397774334000f, - 1.999064707634560700f, - 1.999052943994892300f, 1.999041106855761900f, 1.999029196217604100f, - 1.999017212080857400f, - 1.999005154445962200f, 1.998993023313361700f, 1.998980818683502100f, - 1.998968540556831800f, - 1.998956188933802800f, 1.998943763814868800f, 1.998931265200486900f, - 1.998918693091116200f, - 1.998906047487219600f, 1.998893328389261400f, 1.998880535797709700f, - 1.998867669713034500f, - 1.998854730135709400f, 1.998841717066209400f, 1.998828630505013400f, - 1.998815470452602400f, - 1.998802236909460500f, 1.998788929876074100f, 1.998775549352932400f, - 1.998762095340527400f, - 1.998748567839354000f, 1.998734966849909000f, 1.998721292372693100f, - 1.998707544408208700f, - 1.998693722956961500f, 1.998679828019459300f, 1.998665859596213500f, - 1.998651817687737300f, - 1.998637702294547000f, 1.998623513417161700f, 1.998609251056103100f, - 1.998594915211895600f, - 1.998580505885066100f, 1.998566023076144600f, 1.998551466785663400f, - 1.998536837014157900f, - 1.998522133762165900f, 1.998507357030227900f, 1.998492506818887200f, - 1.998477583128690100f, - 1.998462585960185000f, 1.998447515313923400f, 1.998432371190459500f, - 1.998417153590349900f, - 1.998401862514154200f, 1.998386497962434800f, 1.998371059935756300f, - 1.998355548434686400f, - 1.998339963459795400f, 1.998324305011656600f, 1.998308573090845200f, - 1.998292767697940100f, - 1.998276888833522300f, 1.998260936498175400f, 1.998244910692486000f, - 1.998228811417043700f, - 1.998212638672439900f, 1.998196392459269400f, 1.998180072778129600f, - 1.998163679629620500f, - 1.998147213014344900f, 1.998130672932908000f, 1.998114059385918400f, - 1.998097372373986300f, - 1.998080611897725700f, 1.998063777957752600f, 1.998046870554686100f, - 1.998029889689147700f, - 1.998012835361761900f, 1.997995707573155600f, 1.997978506323958600f, - 1.997961231614803200f, - 1.997943883446324800f, 1.997926461819161000f, 1.997908966733952500f, - 1.997891398191342400f, - 1.997873756191977000f, 1.997856040736504500f, 1.997838251825576400f, - 1.997820389459846700f, - 1.997802453639972300f, 1.997784444366612600f, 1.997766361640429800f, - 1.997748205462088500f, - 1.997729975832256600f, 1.997711672751604200f, 1.997693296220804000f, - 1.997674846240532000f, - 1.997656322811466500f, 1.997637725934288300f, 1.997619055609681600f, - 1.997600311838332500f, - 1.997581494620930300f, 1.997562603958166600f, 1.997543639850736200f, - 1.997524602299336500f, - 1.997505491304667000f, 1.997486306867430900f, 1.997467048988333000f, - 1.997447717668082000f, - 1.997428312907388200f, 1.997408834706965000f, 1.997389283067528800f, - 1.997369657989798400f, - 1.997349959474495200f, 1.997330187522343700f, 1.997310342134070800f, - 1.997290423310406100f, - 1.997270431052081900f, 1.997250365359833200f, 1.997230226234397900f, - 1.997210013676516700f, - 1.997189727686932400f, 1.997169368266390900f, 1.997148935415640600f, - 1.997128429135433400f, - 1.997107849426522600f, 1.997087196289665000f, 1.997066469725620200f, - 1.997045669735150000f, - 1.997024796319019300f, 1.997003849477995600f, 1.996982829212848900f, - 1.996961735524351900f, - 1.996940568413280600f, 1.996919327880412900f, 1.996898013926530000f, - 1.996876626552415400f, - 1.996855165758855600f, 1.996833631546639300f, 1.996812023916558800f, - 1.996790342869408000f, - 1.996768588405984300f, 1.996746760527087700f, 1.996724859233520500f, - 1.996702884526087900f, - 1.996680836405598100f, 1.996658714872861800f, 1.996636519928692000f, - 1.996614251573904900f, - 1.996591909809319400f, 1.996569494635756600f, 1.996547006054041100f, - 1.996524444064999400f, - 1.996501808669461000f, 1.996479099868258400f, 1.996456317662226300f, - 1.996433462052202600f, - 1.996410533039027400f, 1.996387530623543900f, 1.996364454806597500f, - 1.996341305589037100f, - 1.996318082971713500f, 1.996294786955480800f, 1.996271417541195300f, - 1.996247974729716200f, - 1.996224458521905600f, 1.996200868918628100f, 1.996177205920750800f, - 1.996153469529144100f, - 1.996129659744680300f, 1.996105776568235100f, 1.996081820000686500f, - 1.996057790042915500f, - 1.996033686695805300f, 1.996009509960242400f, 1.995985259837115500f, - 1.995960936327316300f, - 1.995936539431739000f, 1.995912069151280800f, 1.995887525486841300f, - 1.995862908439323100f, - 1.995838218009630800f, 1.995813454198672700f, 1.995788617007359100f, - 1.995763706436603200f, - 1.995738722487320600f, 1.995713665160430600f, 1.995688534456853800f, - 1.995663330377514400f, - 1.995638052923339300f, 1.995612702095257400f, 1.995587277894201400f, - 1.995561780321105600f, - 1.995536209376907600f, 1.995510565062547800f, 1.995484847378968600f, - 1.995459056327116000f, - 1.995433191907938000f, 1.995407254122385700f, 1.995381242971412600f, - 1.995355158455975200f, - 1.995329000577032800f, 1.995302769335546500f, 1.995276464732481200f, - 1.995250086768804100f, - 1.995223635445484900f, 1.995197110763496000f, 1.995170512723813100f, - 1.995143841327413400f, - 1.995117096575278200f, 1.995090278468390600f, 1.995063387007736600f, - 1.995036422194304700f, - 1.995009384029086800f, 1.994982272513076600f, 1.994955087647271000f, - 1.994927829432669800f, - 1.994900497870274900f, 1.994873092961091200f, 1.994845614706126400f, - 1.994818063106391000f, - 1.994790438162897600f, 1.994762739876662100f, 1.994734968248702800f, - 1.994707123280041100f, - 1.994679204971700100f, 1.994651213324707000f, 1.994623148340090700f, - 1.994595010018883000f, - 1.994566798362118300f, 1.994538513370834200f, 1.994510155046070700f, - 1.994481723388870100f, - 1.994453218400277900f, 1.994424640081342100f, 1.994395988433113700f, - 1.994367263456646100f, - 1.994338465152995000f, 1.994309593523219600f, 1.994280648568381500f, - 1.994251630289544600f, - 1.994222538687776100f, 1.994193373764145500f, 1.994164135519725000f, - 1.994134823955589800f, - 1.994105439072817700f, 1.994075980872488800f, 1.994046449355686200f, - 1.994016844523496000f, - 1.993987166377006600f, 1.993957414917308700f, 1.993927590145496900f, - 1.993897692062667200f, - 1.993867720669919400f, 1.993837675968354700f, 1.993807557959078600f, - 1.993777366643197900f, - 1.993747102021822900f, 1.993716764096066200f, 1.993686352867043200f, - 1.993655868335872300f, - 1.993625310503674100f, 1.993594679371572200f, 1.993563974940692800f, - 1.993533197212164800f, - 1.993502346187119700f, 1.993471421866692200f, 1.993440424252018900f, - 1.993409353344239600f, - 1.993378209144496700f, 1.993346991653935300f, 1.993315700873703200f, - 1.993284336804950900f, - 1.993252899448831400f, 1.993221388806500900f, 1.993189804879117500f, - 1.993158147667842800f, - 1.993126417173840500f, 1.993094613398277400f, 1.993062736342323000f, - 1.993030786007148800f, - 1.992998762393930000f, 1.992966665503844000f, 1.992934495338070800f, - 1.992902251897793000f, - 1.992869935184196300f, 1.992837545198469000f, 1.992805081941801700f, - 1.992772545415388200f, - 1.992739935620424700f, 1.992707252558110200f, 1.992674496229646500f, - 1.992641666636237700f, - 1.992608763779091000f, 1.992575787659416100f, 1.992542738278425300f, - 1.992509615637334100f, - 1.992476419737359900f, 1.992443150579723500f, 1.992409808165648100f, - 1.992376392496359300f, - 1.992342903573086000f, 1.992309341397059600f, 1.992275705969513800f, - 1.992241997291685400f, - 1.992208215364813700f, 1.992174360190140900f, 1.992140431768911500f, - 1.992106430102373400f, - 1.992072355191776300f, 1.992038207038373300f, 1.992003985643419700f, - 1.991969691008174100f, - 1.991935323133897000f, 1.991900882021852200f, 1.991866367673306200f, - 1.991831780089527500f, - 1.991797119271788300f, 1.991762385221362600f, 1.991727577939527600f, - 1.991692697427563300f, - 1.991657743686751700f, 1.991622716718378400f, 1.991587616523731000f, - 1.991552443104099800f, - 1.991517196460778500f, 1.991481876595062800f, 1.991446483508251500f, - 1.991411017201645500f, - 1.991375477676549100f, 1.991339864934268800f, 1.991304178976114100f, - 1.991268419803397200f, - 1.991232587417432600f, 1.991196681819537900f, 1.991160703011033200f, - 1.991124650993241400f, - 1.991088525767488200f, 1.991052327335101300f, 1.991016055697411900f, - 1.990979710855753900f, - 1.990943292811463000f, 1.990906801565878600f, 1.990870237120342400f, - 1.990833599476198800f, - 1.990796888634794400f, 1.990760104597479400f, 1.990723247365606200f, - 1.990686316940529800f, - 1.990649313323608100f, 1.990612236516201300f, 1.990575086519673200f, - 1.990537863335389400f, - 1.990500566964718400f, 1.990463197409031700f, 1.990425754669703100f, - 1.990388238748109100f, - 1.990350649645629600f, 1.990312987363646000f, 1.990275251903543600f, - 1.990237443266709400f, - 1.990199561454533600f, 1.990161606468409300f, 1.990123578309731700f, - 1.990085476979899000f, - 1.990047302480312300f, 1.990009054812374800f, 1.989970733977493000f, - 1.989932339977075900f, - 1.989893872812535000f, 1.989855332485284800f, 1.989816718996742200f, - 1.989778032348326700f, - 1.989739272541461100f, 1.989700439577570400f, 1.989661533458082100f, - 1.989622554184426800f, - 1.989583501758037700f, 1.989544376180350600f, 1.989505177452804100f, - 1.989465905576839600f, - 1.989426560553900500f, 1.989387142385433900f, 1.989347651072888900f, - 1.989308086617717500f, - 1.989268449021374300f, 1.989228738285316900f, 1.989188954411005100f, - 1.989149097399901500f, - 1.989109167253472000f, 1.989069163973184300f, 1.989029087560509700f, - 1.988988938016921000f, - 1.988948715343894900f, 1.988908419542910100f, 1.988868050615448100f, - 1.988827608562993200f, - 1.988787093387032600f, 1.988746505089055600f, 1.988705843670554500f, - 1.988665109133024500f, - 1.988624301477963200f, 1.988583420706871100f, 1.988542466821251000f, - 1.988501439822608900f, - 1.988460339712453200f, 1.988419166492295000f, 1.988377920163648000f, - 1.988336600728029000f, - 1.988295208186956700f, 1.988253742541953800f, 1.988212203794544000f, - 1.988170591946255100f, - 1.988128906998616800f, 1.988087148953161700f, 1.988045317811425700f, - 1.988003413574946000f, - 1.987961436245263800f, 1.987919385823922400f, 1.987877262312467600f, - 1.987835065712448600f, - 1.987792796025416500f, 1.987750453252925500f, 1.987708037396532800f, - 1.987665548457797400f, - 1.987622986438281700f, 1.987580351339550700f, 1.987537643163171700f, - 1.987494861910715100f, - 1.987452007583754100f, 1.987409080183863800f, 1.987366079712622900f, - 1.987323006171612500f, - 1.987279859562415900f, 1.987236639886619700f, 1.987193347145813000f, - 1.987149981341587400f, - 1.987106542475537400f, 1.987063030549260300f, 1.987019445564355700f, - 1.986975787522426100f, - 1.986932056425076800f, 1.986888252273915500f, 1.986844375070552900f, - 1.986800424816602200f, - 1.986756401513679400f, 1.986712305163403000f, 1.986668135767394300f, - 1.986623893327277500f, - 1.986579577844678900f, 1.986535189321228000f, 1.986490727758556800f, - 1.986446193158300400f, - 1.986401585522095600f, 1.986356904851583000f, 1.986312151148405200f, - 1.986267324414207500f, - 1.986222424650638400f, 1.986177451859348200f, 1.986132406041990900f, - 1.986087287200222700f, - 1.986042095335702300f, 1.985996830450091200f, 1.985951492545054100f, - 1.985906081622257300f, - 1.985860597683371000f, 1.985815040730067200f, 1.985769410764020900f, - 1.985723707786909900f, - 1.985677931800414500f, 1.985632082806217900f, 1.985586160806005700f, - 1.985540165801466200f, - 1.985494097794290800f, 1.985447956786173100f, 1.985401742778809500f, - 1.985355455773899500f, - 1.985309095773144500f, 1.985262662778249300f, 1.985216156790921000f, - 1.985169577812869500f, - 1.985122925845807400f, 1.985076200891450000f, 1.985029402951515200f, - 1.984982532027723700f, - 1.984935588121798700f, 1.984888571235466200f, 1.984841481370454900f, - 1.984794318528496200f, - 1.984747082711324100f, 1.984699773920675300f, 1.984652392158289500f, - 1.984604937425908300f, - 1.984557409725276700f, 1.984509809058142300f, 1.984462135426255000f, - 1.984414388831367900f, - 1.984366569275236400f, 1.984318676759618400f, 1.984270711286275200f, - 1.984222672856969800f, - 1.984174561473469200f, 1.984126377137541700f, 1.984078119850959200f, - 1.984029789615495900f, - 1.983981386432928800f, 1.983932910305037400f, 1.983884361233604100f, - 1.983835739220414000f, - 1.983787044267254700f, 1.983738276375916800f, 1.983689435548192900f, - 1.983640521785879200f, - 1.983591535090773800f, 1.983542475464678000f, 1.983493342909395500f, - 1.983444137426732600f, - 1.983394859018498900f, 1.983345507686505900f, 1.983296083432567900f, - 1.983246586258502700f, - 1.983197016166129400f, 1.983147373157271300f, 1.983097657233753100f, - 1.983047868397403100f, - 1.982998006650051400f, 1.982948071993531700f, 1.982898064429679900f, - 1.982847983960334600f, - 1.982797830587336800f, 1.982747604312531200f, 1.982697305137763700f, - 1.982646933064884200f, - 1.982596488095744300f, 1.982545970232199000f, 1.982495379476105800f, - 1.982444715829324600f, - 1.982393979293718200f, 1.982343169871152000f, 1.982292287563494300f, - 1.982241332372615600f, - 1.982190304300389400f, 1.982139203348692200f, 1.982088029519402300f, - 1.982036782814401900f, - 1.981985463235574700f, 1.981934070784807400f, 1.981882605463990200f, - 1.981831067275015000f, - 1.981779456219776600f, 1.981727772300172500f, 1.981676015518103500f, - 1.981624185875472000f, - 1.981572283374183800f, 1.981520308016147200f, 1.981468259803273300f, - 1.981416138737475800f, - 1.981363944820670800f, 1.981311678054777500f, 1.981259338441717400f, - 1.981206925983415300f, - 1.981154440681797800f, 1.981101882538794900f, 1.981049251556338900f, - 1.980996547736364900f, - 1.980943771080810700f, 1.980890921591616600f, 1.980837999270726100f, - 1.980785004120084700f, - 1.980731936141640900f, 1.980678795337345900f, 1.980625581709153600f, - 1.980572295259020600f, - 1.980518935988905700f, 1.980465503900771000f, 1.980411998996581200f, - 1.980358421278303200f, - 1.980304770747907300f, 1.980251047407365600f, 1.980197251258653900f, - 1.980143382303749500f, - 1.980089440544633600f, 1.980035425983289300f, 1.979981338621702200f, - 1.979927178461861500f, - 1.979872945505758000f, 1.979818639755386100f, 1.979764261212742400f, - 1.979709809879825800f, - 1.979655285758638900f, 1.979600688851186100f, 1.979546019159474900f, - 1.979491276685515300f, - 1.979436461431320000f, 1.979381573398904400f, 1.979326612590286400f, - 1.979271579007487100f, - 1.979216472652529900f, 1.979161293527440500f, 1.979106041634248100f, - 1.979050716974983800f, - 1.978995319551682100f, 1.978939849366379700f, 1.978884306421115900f, - 1.978828690717932900f, - 1.978773002258875600f, 1.978717241045991700f, 1.978661407081331100f, - 1.978605500366946700f, - 1.978549520904894000f, 1.978493468697231300f, 1.978437343746019600f, - 1.978381146053322000f, - 1.978324875621205300f, 1.978268532451738200f, 1.978212116546992100f, - 1.978155627909041300f, - 1.978099066539962900f, 1.978042432441836400f, 1.977985725616743900f, - 1.977928946066770600f, - 1.977872093794004200f, 1.977815168800534500f, 1.977758171088455100f, - 1.977701100659861300f, - 1.977643957516851400f, 1.977586741661526500f, 1.977529453095990200f, - 1.977472091822348700f, - 1.977414657842711200f, 1.977357151159189400f, 1.977299571773897700f, - 1.977241919688953000f, - 1.977184194906475000f, 1.977126397428586000f, 1.977068527257411300f, - 1.977010584395078300f, - 1.976952568843717700f, 1.976894480605462500f, 1.976836319682448300f, - 1.976778086076813600f, - 1.976719779790699500f, 1.976661400826249500f, 1.976602949185610500f, - 1.976544424870931400f, - 1.976485827884363800f, 1.976427158228062100f, 1.976368415904183900f, - 1.976309600914888400f, - 1.976250713262338600f, 1.976191752948699200f, 1.976132719976138000f, - 1.976073614346825800f, - 1.976014436062935700f, 1.975955185126643300f, 1.975895861540127200f, - 1.975836465305568400f, - 1.975776996425151000f, 1.975717454901061400f, 1.975657840735488800f, - 1.975598153930624900f, - 1.975538394488664200f, 1.975478562411804100f, 1.975418657702244300f, - 1.975358680362187400f, - 1.975298630393838500f, 1.975238507799405500f, 1.975178312581099100f, - 1.975118044741132300f, - 1.975057704281721000f, 1.974997291205083700f, 1.974936805513442000f, - 1.974876247209019100f, - 1.974815616294042200f, 1.974754912770740200f, 1.974694136641345300f, - 1.974633287908091500f, - 1.974572366573216400f, 1.974511372638960000f, 1.974450306107564900f, - 1.974389166981275900f, - 1.974327955262341400f, 1.974266670953011400f, 1.974205314055540000f, - 1.974143884572182400f, - 1.974082382505197400f, 1.974020807856846400f, 1.973959160629393100f, - 1.973897440825104200f, - 1.973835648446248900f, 1.973773783495099500f, 1.973711845973930000f, - 1.973649835885018100f, - 1.973587753230643400f, 1.973525598013088800f, 1.973463370234639600f, - 1.973401069897583200f, - 1.973338697004211100f, 1.973276251556815600f, 1.973213733557693400f, - 1.973151143009142800f, - 1.973088479913465100f, 1.973025744272964200f, 1.972962936089946800f, - 1.972900055366722000f, - 1.972837102105601900f, 1.972774076308901200f, 1.972710977978936900f, - 1.972647807118029300f, - 1.972584563728500700f, 1.972521247812676600f, 1.972457859372884500f, - 1.972394398411455800f, - 1.972330864930723200f, 1.972267258933022600f, 1.972203580420693000f, - 1.972139829396075200f, - 1.972076005861513700f, 1.972012109819354600f, 1.971948141271947500f, - 1.971884100221644300f, - 1.971819986670799500f, 1.971755800621770400f, 1.971691542076916800f, - 1.971627211038601500f, - 1.971562807509189800f, 1.971498331491049700f, 1.971433782986551400f, - 1.971369161998068400f, - 1.971304468527976800f, 1.971239702578655000f, 1.971174864152484400f, - 1.971109953251848600f, - 1.971044969879134600f, 1.970979914036731500f, 1.970914785727030800f, - 1.970849584952427900f, - 1.970784311715319400f, 1.970718966018105500f, 1.970653547863188600f, - 1.970588057252973900f, - 1.970522494189869800f, 1.970456858676286300f, 1.970391150714636800f, - 1.970325370307337100f, - 1.970259517456806100f, 1.970193592165464700f, 1.970127594435737000f, - 1.970061524270049400f, - 1.969995381670831100f, 1.969929166640514100f, 1.969862879181532700f, - 1.969796519296324300f, - 1.969730086987328900f, 1.969663582256988600f, 1.969597005107748900f, - 1.969530355542057800f, - 1.969463633562365400f, 1.969396839171125200f, 1.969329972370792700f, - 1.969263033163826800f, - 1.969196021552688500f, 1.969128937539841500f, 1.969061781127752400f, - 1.968994552318890300f, - 1.968927251115727200f, 1.968859877520737300f, 1.968792431536398000f, - 1.968724913165188900f, - 1.968657322409592500f, 1.968589659272094000f, 1.968521923755181000f, - 1.968454115861344000f, - 1.968386235593076300f, 1.968318282952873600f, 1.968250257943234200f, - 1.968182160566659000f, - 1.968113990825652200f, 1.968045748722719900f, 1.967977434260371300f, - 1.967909047441118100f, - 1.967840588267474500f, 1.967772056741957900f, 1.967703452867087800f, - 1.967634776645386600f, - 1.967566028079379200f, 1.967497207171593500f, 1.967428313924559600f, - 1.967359348340810700f, - 1.967290310422882700f, 1.967221200173313400f, 1.967152017594644200f, - 1.967082762689418500f, - 1.967013435460182700f, 1.966944035909485600f, 1.966874564039879300f, - 1.966805019853917500f, - 1.966735403354157500f, 1.966665714543159000f, 1.966595953423483800f, - 1.966526119997697100f, - 1.966456214268366600f, 1.966386236238062200f, 1.966316185909357200f, - 1.966246063284826700f, - 1.966175868367049400f, 1.966105601158605600f, 1.966035261662079300f, - 1.965964849880056600f, - 1.965894365815126000f, 1.965823809469879400f, 1.965753180846910900f, - 1.965682479948817100f, - 1.965611706778197700f, 1.965540861337654600f, 1.965469943629792700f, - 1.965398953657219600f, - 1.965327891422544900f, 1.965256756928382100f, 1.965185550177345900f, - 1.965114271172054800f, - 1.965042919915129400f, 1.964971496409193100f, 1.964900000656872000f, - 1.964828432660794500f, - 1.964756792423592200f, 1.964685079947899200f, 1.964613295236352000f, - 1.964541438291590000f, - 1.964469509116255000f, 1.964397507712991800f, 1.964325434084447600f, - 1.964253288233272400f, - 1.964181070162119000f, 1.964108779873642100f, 1.964036417370500300f, - 1.963963982655353400f, - 1.963891475730865400f, 1.963818896599701400f, 1.963746245264530700f, - 1.963673521728023900f, - 1.963600725992855200f, 1.963527858061700600f, 1.963454917937239800f, - 1.963381905622154400f, - 1.963308821119128700f, 1.963235664430850200f, 1.963162435560008100f, - 1.963089134509295300f, - 1.963015761281406800f, 1.962942315879040000f, 1.962868798304895400f, - 1.962795208561676200f, - 1.962721546652088200f, 1.962647812578839400f, 1.962574006344640900f, - 1.962500127952206300f, - 1.962426177404252200f, 1.962352154703497200f, 1.962278059852663000f, - 1.962203892854473800f, - 1.962129653711656800f, 1.962055342426941400f, 1.961980959003059500f, - 1.961906503442746300f, - 1.961831975748739200f, 1.961757375923778700f, 1.961682703970607100f, - 1.961607959891970200f, - 1.961533143690616000f, 1.961458255369295400f, 1.961383294930761700f, - 1.961308262377770900f, - 1.961233157713082200f, 1.961157980939456400f, 1.961082732059657800f, - 1.961007411076453000f, - 1.960932017992611500f, 1.960856552810905200f, 1.960781015534108800f, - 1.960705406164999300f, - 1.960629724706357100f, 1.960553971160964500f, 1.960478145531606700f, - 1.960402247821071900f, - 1.960326278032150200f, 1.960250236167635100f, 1.960174122230322400f, - 1.960097936223010400f, - 1.960021678148500500f, 1.959945348009596500f, 1.959868945809104500f, - 1.959792471549834000f, - 1.959715925234596600f, 1.959639306866206600f, 1.959562616447480900f, - 1.959485853981239600f, - 1.959409019470304700f, 1.959332112917501400f, 1.959255134325657000f, - 1.959178083697602300f, - 1.959100961036169800f, 1.959023766344195200f, 1.958946499624516700f, - 1.958869160879975500f, - 1.958791750113414700f, 1.958714267327680500f, 1.958636712525621900f, - 1.958559085710090500f, - 1.958481386883940100f, 1.958403616050027600f, 1.958325773211212300f, - 1.958247858370356400f, - 1.958169871530324600f, 1.958091812693984400f, 1.958013681864205500f, - 1.957935479043860600f, - 1.957857204235825100f, 1.957778857442976900f, 1.957700438668196700f, - 1.957621947914367500f, - 1.957543385184375300f, 1.957464750481108700f, 1.957386043807458800f, - 1.957307265166319500f, - 1.957228414560587200f, 1.957149491993160900f, 1.957070497466942400f, - 1.956991430984836400f, - 1.956912292549749500f, 1.956833082164591600f, 1.956753799832275300f, - 1.956674445555715000f, - 1.956595019337829000f, 1.956515521181537000f, 1.956435951089762200f, - 1.956356309065430100f, - 1.956276595111468900f, 1.956196809230809500f, 1.956116951426385600f, - 1.956037021701132900f, - 1.955957020057990500f, 1.955876946499899700f, 1.955796801029804800f, - 1.955716583650652000f, - 1.955636294365391300f, 1.955555933176974300f, 1.955475500088355900f, - 1.955394995102493100f, - 1.955314418222346100f, 1.955233769450877200f, 1.955153048791052000f, - 1.955072256245838000f, - 1.954991391818206000f, 1.954910455511129000f, 1.954829447327582900f, - 1.954748367270545900f, - 1.954667215342999600f, 1.954585991547927100f, 1.954504695888315000f, - 1.954423328367152600f, - 1.954341888987431100f, 1.954260377752145000f, 1.954178794664291200f, - 1.954097139726869600f, - 1.954015412942881900f, 1.953933614315333200f, 1.953851743847231100f, - 1.953769801541585400f, - 1.953687787401409400f, 1.953605701429718100f, 1.953523543629529700f, - 1.953441314003864900f, - 1.953359012555747200f, 1.953276639288202400f, 1.953194194204259200f, - 1.953111677306948800f, - 1.953029088599305100f, 1.952946428084364900f, 1.952863695765167100f, - 1.952780891644753500f, - 1.952698015726169100f, 1.952615068012460300f, 1.952532048506677300f, - 1.952448957211872200f, - 1.952365794131100300f, 1.952282559267419100f, 1.952199252623889200f, - 1.952115874203572900f, - 1.952032424009536600f, 1.951948902044847900f, 1.951865308312577900f, - 1.951781642815800100f, - 1.951697905557590700f, 1.951614096541028500f, 1.951530215769194700f, - 1.951446263245173500f, - 1.951362238972051500f, 1.951278142952918200f, 1.951193975190865600f, - 1.951109735688987900f, - 1.951025424450382900f, 1.950941041478150100f, 1.950856586775392200f, - 1.950772060345214300f, - 1.950687462190724200f, 1.950602792315032200f, 1.950518050721251600f, - 1.950433237412498000f, - 1.950348352391889600f, 1.950263395662547700f, 1.950178367227595900f, - 1.950093267090159800f, - 1.950008095253369200f, 1.949922851720355100f, 1.949837536494251700f, - 1.949752149578196000f, - 1.949666690975327100f, 1.949581160688787400f, 1.949495558721721500f, - 1.949409885077276500f, - 1.949324139758602700f, 1.949238322768852800f, 1.949152434111181700f, - 1.949066473788747300f, - 1.948980441804710300f, 1.948894338162233900f, 1.948808162864483600f, - 1.948721915914628100f, - 1.948635597315838200f, 1.948549207071288000f, 1.948462745184153400f, - 1.948376211657613500f, - 1.948289606494849800f, 1.948202929699046800f, 1.948116181273391100f, - 1.948029361221072400f, - 1.947942469545282500f, 1.947855506249216700f, 1.947768471336071700f, - 1.947681364809048100f, - 1.947594186671348000f, 1.947506936926177300f, 1.947419615576743600f, - 1.947332222626257500f, - 1.947244758077932200f, 1.947157221934983500f, 1.947069614200629900f, - 1.946981934878092300f, - 1.946894183970594900f, 1.946806361481363500f, 1.946718467413627300f, - 1.946630501770618000f, - 1.946542464555569800f, 1.946454355771719300f, 1.946366175422306500f, - 1.946277923510573200f, - 1.946189600039764300f, 1.946101205013127000f, 1.946012738433911600f, - 1.945924200305370700f, - 1.945835590630759400f, 1.945746909413335900f, 1.945658156656360700f, - 1.945569332363096700f, - 1.945480436536810100f, 1.945391469180769200f, 1.945302430298244900f, - 1.945213319892511200f, - 1.945124137966844200f, 1.945034884524523100f, 1.944945559568829200f, - 1.944856163103046800f, - 1.944766695130463000f, 1.944677155654366900f, 1.944587544678050900f, - 1.944497862204809900f, - 1.944408108237940700f, 1.944318282780743900f, 1.944228385836521700f, - 1.944138417408579400f, - 1.944048377500225100f, 1.943958266114769200f, 1.943868083255524800f, - 1.943777828925807600f, - 1.943687503128936200f, 1.943597105868231500f, 1.943506637147017300f, - 1.943416096968619400f, - 1.943325485336367300f, 1.943234802253592400f, 1.943144047723628400f, - 1.943053221749812400f, - 1.942962324335484100f, 1.942871355483985200f, 1.942780315198660200f, - 1.942689203482856900f, - 1.942598020339924700f, 1.942506765773216500f, 1.942415439786087300f, - 1.942324042381895000f, - 1.942232573564000000f, 1.942141033335765400f, 1.942049421700556600f, - 1.941957738661741900f, - 1.941865984222692900f, 1.941774158386782200f, 1.941682261157386700f, - 1.941590292537884700f, - 1.941498252531658200f, 1.941406141142090600f, 1.941313958372568900f, - 1.941221704226482500f, - 1.941129378707223000f, 1.941036981818185400f, 1.940944513562766300f, - 1.940851973944365900f, - 1.940759362966386600f, 1.940666680632233200f, 1.940573926945313700f, - 1.940481101909038200f, - 1.940388205526819600f, 1.940295237802073500f, 1.940202198738217900f, - 1.940109088338673600f, - 1.940015906606864300f, 1.939922653546215500f, 1.939829329160156500f, - 1.939735933452118000f, - 1.939642466425534300f, 1.939548928083841800f, 1.939455318430479500f, - 1.939361637468889100f, - 1.939267885202515400f, 1.939174061634805000f, 1.939080166769207700f, - 1.938986200609175600f, - 1.938892163158163700f, 1.938798054419629500f, 1.938703874397032800f, - 1.938609623093837000f, - 1.938515300513506700f, 1.938420906659510600f, 1.938326441535318500f, - 1.938231905144404400f, - 1.938137297490243500f, 1.938042618576314400f, 1.937947868406098500f, - 1.937853046983079300f, - 1.937758154310742900f, 1.937663190392578500f, 1.937568155232077600f, - 1.937473048832734500f, - 1.937377871198045600f, 1.937282622331510500f, 1.937187302236631500f, - 1.937091910916912900f, - 1.936996448375861900f, 1.936900914616988900f, 1.936805309643805800f, - 1.936709633459828200f, - 1.936613886068573500f, 1.936518067473562300f, 1.936422177678317300f, - 1.936326216686364400f, - 1.936230184501231500f, 1.936134081126449800f, 1.936037906565552400f, - 1.935941660822075600f, - 1.935845343899558000f, 1.935748955801540800f, 1.935652496531568000f, - 1.935555966093186300f, - 1.935459364489944500f, 1.935362691725394500f, 1.935265947803090900f, - 1.935169132726590500f, - 1.935072246499453000f, 1.934975289125240500f, 1.934878260607517900f, - 1.934781160949852600f, - 1.934683990155814800f, 1.934586748228977100f, 1.934489435172914900f, - 1.934392050991206300f, - 1.934294595687431300f, 1.934197069265173500f, 1.934099471728018700f, - 1.934001803079554700f, - 1.933904063323373300f, 1.933806252463067500f, 1.933708370502233800f, - 1.933610417444471000f, - 1.933512393293380600f, 1.933414298052566600f, 1.933316131725635800f, - 1.933217894316197300f, - 1.933119585827862900f, 1.933021206264247600f, 1.932922755628968100f, - 1.932824233925644300f, - 1.932725641157898600f, 1.932626977329356100f, 1.932528242443643900f, - 1.932429436504392800f, - 1.932330559515235100f, 1.932231611479806800f, 1.932132592401745400f, - 1.932033502284691700f, - 1.931934341132289100f, 1.931835108948183300f, 1.931735805736022800f, - 1.931636431499459000f, - 1.931536986242145200f, 1.931437469967737900f, 1.931337882679895900f, - 1.931238224382281000f, - 1.931138495078557300f, 1.931038694772391200f, 1.930938823467452500f, - 1.930838881167413100f, - 1.930738867875947400f, 1.930638783596732700f, 1.930538628333448900f, - 1.930438402089778200f, - 1.930338104869405900f, 1.930237736676019500f, 1.930137297513309300f, - 1.930036787384968200f, - 1.929936206294691400f, 1.929835554246177400f, 1.929734831243126600f, - 1.929634037289242400f, - 1.929533172388230700f, 1.929432236543799900f, 1.929331229759661200f, - 1.929230152039528500f, - 1.929129003387117800f, 1.929027783806148300f, 1.928926493300341400f, - 1.928825131873421500f, - 1.928723699529115000f, 1.928622196271151800f, 1.928520622103263400f, - 1.928418977029184600f, - 1.928317261052652700f, 1.928215474177407100f, 1.928113616407190600f, - 1.928011687745748300f, - 1.927909688196827400f, 1.927807617764178300f, 1.927705476451554000f, - 1.927603264262709900f, - 1.927500981201404100f, 1.927398627271397000f, 1.927296202476451900f, - 1.927193706820335100f, - 1.927091140306814500f, 1.926988502939661400f, 1.926885794722649600f, - 1.926783015659555300f, - 1.926680165754157500f, 1.926577245010237400f, 1.926474253431579500f, - 1.926371191021970100f, - 1.926268057785198700f, 1.926164853725057300f, 1.926061578845340600f, - 1.925958233149845000f, - 1.925854816642371000f, 1.925751329326720600f, 1.925647771206698600f, - 1.925544142286112800f, - 1.925440442568773000f, 1.925336672058492300f, 1.925232830759086000f, - 1.925128918674371900f, - 1.925024935808170600f, 1.924920882164305300f, 1.924816757746601800f, - 1.924712562558888100f, - 1.924608296604995800f, 1.924503959888757900f, 1.924399552414010700f, - 1.924295074184593000f, - 1.924190525204346300f, 1.924085905477114400f, 1.923981215006744100f, - 1.923876453797084300f, - 1.923771621851986700f, 1.923666719175306100f, 1.923561745770898900f, - 1.923456701642625200f, - 1.923351586794346900f, 1.923246401229928600f, 1.923141144953238300f, - 1.923035817968145300f, - 1.922930420278522500f, 1.922824951888245000f, 1.922719412801190600f, - 1.922613803021239600f, - 1.922508122552275100f, 1.922402371398182600f, 1.922296549562850100f, - 1.922190657050168800f, - 1.922084693864031700f, 1.921978660008334600f, 1.921872555486976700f, - 1.921766380303858500f, - 1.921660134462884100f, 1.921553817967959900f, 1.921447430822994500f, - 1.921340973031900000f, - 1.921234444598590100f, 1.921127845526981600f, 1.921021175820994100f, - 1.920914435484549100f, - 1.920807624521571700f, 1.920700742935988600f, 1.920593790731729600f, - 1.920486767912727300f, - 1.920379674482916500f, 1.920272510446234400f, 1.920165275806621400f, - 1.920057970568020100f, - 1.919950594734376000f, 1.919843148309637000f, 1.919735631297753400f, - 1.919628043702678300f, - 1.919520385528367300f, 1.919412656778779000f, 1.919304857457874200f, - 1.919196987569616200f, - 1.919089047117971100f, 1.918981036106907700f, 1.918872954540397300f, - 1.918764802422413500f, - 1.918656579756932800f, 1.918548286547934400f, 1.918439922799399800f, - 1.918331488515313300f, - 1.918222983699661600f, 1.918114408356434300f, 1.918005762489623400f, - 1.917897046103223200f, - 1.917788259201231200f, 1.917679401787647100f, 1.917570473866473200f, - 1.917461475441714500f, - 1.917352406517378600f, 1.917243267097475700f, 1.917134057186018300f, - 1.917024776787022100f, - 1.916915425904504700f, 1.916806004542486800f, 1.916696512704991500f, - 1.916586950396044400f, - 1.916477317619674100f, 1.916367614379911100f, 1.916257840680788900f, - 1.916147996526343700f, - 1.916038081920614400f, 1.915928096867641800f, 1.915818041371470000f, - 1.915707915436145200f, - 1.915597719065716700f, 1.915487452264236000f, 1.915377115035757200f, - 1.915266707384337200f, - 1.915156229314035200f, 1.915045680828913400f, 1.914935061933036300f, - 1.914824372630470800f, - 1.914713612925287100f, 1.914602782821557000f, 1.914491882323355700f, - 1.914380911434760500f, - 1.914269870159851700f, 1.914158758502712000f, 1.914047576467426500f, - 1.913936324058083100f, - 1.913825001278772100f, 1.913713608133586600f, 1.913602144626622500f, - 1.913490610761977600f, - 1.913379006543752800f, 1.913267331976051400f, 1.913155587062979500f, - 1.913043771808645700f, - 1.912931886217160900f, 1.912819930292639000f, 1.912707904039196300f, - 1.912595807460951500f, - 1.912483640562026200f, 1.912371403346544400f, 1.912259095818632700f, - 1.912146717982420500f, - 1.912034269842039600f, 1.911921751401624200f, 1.911809162665311500f, - 1.911696503637241100f, - 1.911583774321554700f, 1.911470974722397500f, 1.911358104843916500f, - 1.911245164690262000f, - 1.911132154265586100f, 1.911019073574044200f, 1.910905922619793800f, - 1.910792701406995000f, - 1.910679409939810600f, 1.910566048222406300f, 1.910452616258949900f, - 1.910339114053611900f, - 1.910225541610565800f, 1.910111898933986900f, 1.909998186028053700f, - 1.909884402896947100f, - 1.909770549544850500f, 1.909656625975950200f, 1.909542632194434700f, - 1.909428568204495100f, - 1.909314434010325400f, 1.909200229616121700f, 1.909085955026083200f, - 1.908971610244411600f, - 1.908857195275310800f, 1.908742710122987700f, 1.908628154791651300f, - 1.908513529285513500f, - 1.908398833608789100f, 1.908284067765694900f, 1.908169231760450400f, - 1.908054325597278200f, - 1.907939349280402400f, 1.907824302814050900f, 1.907709186202453600f, - 1.907593999449842800f, - 1.907478742560453600f, 1.907363415538523700f, 1.907248018388293400f, - 1.907132551114005600f, - 1.907017013719905600f, 1.906901406210241200f, 1.906785728589263300f, - 1.906669980861224900f, - 1.906554163030381500f, 1.906438275100991600f, 1.906322317077316300f, - 1.906206288963618700f, - 1.906090190764164700f, 1.905974022483223300f, 1.905857784125065500f, - 1.905741475693964800f, - 1.905625097194197900f, 1.905508648630043700f, 1.905392130005783400f, - 1.905275541325701400f, - 1.905158882594083900f, 1.905042153815220700f, 1.904925354993402900f, - 1.904808486132925300f, - 1.904691547238084800f, 1.904574538313180700f, 1.904457459362515200f, - 1.904340310390393100f, - 1.904223091401121600f, 1.904105802399010300f, 1.903988443388371600f, - 1.903871014373520700f, - 1.903753515358774800f, 1.903635946348454500f, 1.903518307346881800f, - 1.903400598358382600f, - 1.903282819387284200f, 1.903164970437917400f, 1.903047051514615000f, - 1.902929062621712600f, - 1.902811003763547900f, 1.902692874944462300f, 1.902574676168798700f, - 1.902456407440902700f, - 1.902338068765123200f, 1.902219660145810800f, 1.902101181587319000f, - 1.901982633094004200f, - 1.901864014670225000f, 1.901745326320342500f, 1.901626568048721000f, - 1.901507739859726200f, - 1.901388841757727600f, 1.901269873747096600f, 1.901150835832207100f, - 1.901031728017436300f, - 1.900912550307162700f, 1.900793302705768900f, 1.900673985217638900f, - 1.900554597847159400f, - 1.900435140598720500f, 1.900315613476714100f, 1.900196016485534700f, - 1.900076349629579600f, - 1.899956612913248800f, 1.899836806340944300f, 1.899716929917071500f, - 1.899596983646037600f, - 1.899476967532252900f, 1.899356881580129800f, 1.899236725794083600f, - 1.899116500178532200f, - 1.898996204737895900f, 1.898875839476597700f, 1.898755404399062900f, - 1.898634899509719500f, - 1.898514324812998300f, 1.898393680313332600f, 1.898272966015157800f, - 1.898152181922912600f, - 1.898031328041037700f, 1.897910404373976500f, 1.897789410926175000f, - 1.897668347702081900f, - 1.897547214706148300f, 1.897426011942827900f, 1.897304739416577200f, - 1.897183397131854600f, - 1.897061985093121800f, 1.896940503304842800f, 1.896818951771484000f, - 1.896697330497514800f, - 1.896575639487406300f, 1.896453878745633100f, 1.896332048276672100f, - 1.896210148085002400f, - 1.896088178175106200f, 1.895966138551467700f, 1.895844029218574100f, - 1.895721850180915000f, - 1.895599601442982600f, 1.895477283009271400f, 1.895354894884279100f, - 1.895232437072505300f, - 1.895109909578452500f, 1.894987312406625700f, 1.894864645561532100f, - 1.894741909047682500f, - 1.894619102869589100f, 1.894496227031767100f, 1.894373281538734400f, - 1.894250266395011600f, - 1.894127181605121100f, 1.894004027173588700f, 1.893880803104942600f, - 1.893757509403713100f, - 1.893634146074433500f, 1.893510713121639300f, 1.893387210549869000f, - 1.893263638363663400f, - 1.893139996567565900f, 1.893016285166122500f, 1.892892504163881600f, - 1.892768653565394300f, - 1.892644733375214300f, 1.892520743597897700f, 1.892396684238003300f, - 1.892272555300092300f, - 1.892148356788728700f, 1.892024088708479200f, 1.891899751063912200f, - 1.891775343859599400f, - 1.891650867100115300f, 1.891526320790036100f, 1.891401704933941100f, - 1.891277019536412400f, - 1.891152264602033800f, 1.891027440135392600f, 1.890902546141078000f, - 1.890777582623682300f, - 1.890652549587799700f, 1.890527447038027300f, 1.890402274978965100f, - 1.890277033415215200f, - 1.890151722351382200f, 1.890026341792073500f, 1.889900891741899100f, - 1.889775372205471300f, - 1.889649783187405100f, 1.889524124692318200f, 1.889398396724830500f, - 1.889272599289564900f, - 1.889146732391146400f, 1.889020796034202700f, 1.888894790223364600f, - 1.888768714963264400f, - 1.888642570258537700f, 1.888516356113822700f, 1.888390072533759700f, - 1.888263719522991900f, - 1.888137297086165000f, 1.888010805227927000f, 1.887884243952928600f, - 1.887757613265823400f, - 1.887630913171267000f, 1.887504143673917700f, 1.887377304778437000f, - 1.887250396489487800f, - 1.887123418811736500f, 1.886996371749851700f, 1.886869255308504200f, - 1.886742069492368000f, - 1.886614814306119400f, 1.886487489754437300f, 1.886360095842002600f, - 1.886232632573499700f, - 1.886105099953614900f, 1.885977497987037000f, 1.885849826678457800f, - 1.885722086032571200f, - 1.885594276054074300f, 1.885466396747665700f, 1.885338448118047700f, - 1.885210430169924200f, - 1.885082342908002400f, 1.884954186336991400f, 1.884825960461603100f, - 1.884697665286552400f, - 1.884569300816556000f, 1.884440867056333700f, 1.884312364010607600f, - 1.884183791684102400f, - 1.884055150081545200f, 1.883926439207665800f, 1.883797659067196800f, - 1.883668809664872600f, - 1.883539891005431100f, 1.883410903093611900f, 1.883281845934157800f, - 1.883152719531813800f, - 1.883023523891327300f, 1.882894259017448900f, 1.882764924914930700f, - 1.882635521588528400f, - 1.882506049042999700f, 1.882376507283104900f, 1.882246896313606800f, - 1.882117216139270700f, - 1.881987466764865100f, 1.881857648195159900f, 1.881727760434928500f, - 1.881597803488946500f, - 1.881467777361992100f, 1.881337682058845700f, 1.881207517584290600f, - 1.881077283943112900f, - 1.880946981140100500f, 1.880816609180044700f, 1.880686168067738500f, - 1.880555657807977800f, - 1.880425078405561600f, 1.880294429865290600f, 1.880163712191968300f, - 1.880032925390400900f, - 1.879902069465397200f, 1.879771144421768200f, 1.879640150264327600f, - 1.879509086997891900f, - 1.879377954627279700f, 1.879246753157312700f, 1.879115482592814500f, - 1.878984142938611600f, - 1.878852734199532900f, 1.878721256380410100f, 1.878589709486077300f, - 1.878458093521370800f, - 1.878326408491130200f, 1.878194654400196600f, 1.878062831253414900f, - 1.877930939055631100f, - 1.877798977811695200f, 1.877666947526458700f, 1.877534848204775800f, - 1.877402679851504000f, - 1.877270442471502100f, 1.877138136069632400f, 1.877005760650759500f, - 1.876873316219750200f, - 1.876740802781474500f, 1.876608220340804100f, 1.876475568902614000f, - 1.876342848471781200f, - 1.876210059053185600f, 1.876077200651709500f, 1.875944273272237800f, - 1.875811276919657500f, - 1.875678211598858800f, 1.875545077314734000f, 1.875411874072178100f, - 1.875278601876088700f, - 1.875145260731365700f, 1.875011850642911600f, 1.874878371615631900f, - 1.874744823654434000f, - 1.874611206764227800f, 1.874477520949926500f, 1.874343766216444800f, - 1.874209942568701100f, - 1.874076050011615400f, 1.873942088550110400f, 1.873808058189111700f, - 1.873673958933546900f, - 1.873539790788347100f, 1.873405553758444600f, 1.873271247848775400f, - 1.873136873064277000f, - 1.873002429409890600f, 1.872867916890558900f, 1.872733335511227700f, - 1.872598685276845000f, - 1.872463966192361900f, 1.872329178262731200f, 1.872194321492908700f, - 1.872059395887852900f, - 1.871924401452524700f, 1.871789338191887100f, 1.871654206110906500f, - 1.871519005214550700f, - 1.871383735507791100f, 1.871248396995601300f, 1.871112989682956800f, - 1.870977513574836500f, - 1.870841968676221400f, 1.870706354992095000f, 1.870570672527443600f, - 1.870434921287255700f, - 1.870299101276522400f, 1.870163212500237900f, 1.870027254963397800f, - 1.869891228671001200f, - 1.869755133628049600f, 1.869618969839546500f, 1.869482737310498100f, - 1.869346436045913800f, - 1.869210066050804600f, 1.869073627330184700f, 1.868937119889070300f, - 1.868800543732480600f, - 1.868663898865437200f, 1.868527185292963700f, 1.868390403020087100f, - 1.868253552051836200f, - 1.868116632393243000f, 1.867979644049341200f, 1.867842587025167800f, - 1.867705461325761800f, - 1.867568266956164800f, 1.867431003921421500f, 1.867293672226578300f, - 1.867156271876684500f, - 1.867018802876792200f, 1.866881265231955500f, 1.866743658947231300f, - 1.866605984027679000f, - 1.866468240478360600f, 1.866330428304340300f, 1.866192547510685300f, - 1.866054598102465000f, - 1.865916580084751500f, 1.865778493462619100f, 1.865640338241145100f, - 1.865502114425408900f, - 1.865363822020492700f, 1.865225461031480900f, 1.865087031463460900f, - 1.864948533321522300f, - 1.864809966610757400f, 1.864671331336260600f, 1.864532627503129100f, - 1.864393855116463200f, - 1.864255014181364500f, 1.864116104702938000f, 1.863977126686291200f, - 1.863838080136534000f, - 1.863698965058778300f, 1.863559781458139300f, 1.863420529339734100f, - 1.863281208708683000f, - 1.863141819570107900f, 1.863002361929134500f, 1.862862835790889400f, - 1.862723241160503300f, - 1.862583578043108100f, 1.862443846443839300f, 1.862304046367834200f, - 1.862164177820232700f, - 1.862024240806177800f, 1.861884235330814300f, 1.861744161399289600f, - 1.861604019016754200f, - 1.861463808188360500f, 1.861323528919263800f, 1.861183181214621600f, - 1.861042765079594200f, - 1.860902280519344500f, 1.860761727539037300f, 1.860621106143840500f, - 1.860480416338924600f, - 1.860339658129461800f, 1.860198831520627900f, 1.860057936517600700f, - 1.859916973125560000f, - 1.859775941349689000f, 1.859634841195173100f, 1.859493672667199800f, - 1.859352435770959900f, - 1.859211130511645900f, 1.859069756894453400f, 1.858928314924580300f, - 1.858786804607227100f, - 1.858645225947596300f, 1.858503578950893900f, 1.858361863622327400f, - 1.858220079967107600f, - 1.858078227990447300f, 1.857936307697561900f, 1.857794319093669900f, - 1.857652262183991000f, - 1.857510136973749000f, 1.857367943468169100f, 1.857225681672479300f, - 1.857083351591910300f, - 1.856940953231694900f, 1.856798486597069000f, 1.856655951693270600f, - 1.856513348525540300f, - 1.856370677099121100f, 1.856227937419258700f, 1.856085129491201100f, - 1.855942253320199200f, - 1.855799308911506100f, 1.855656296270377300f, 1.855513215402071000f, - 1.855370066311848000f, - 1.855226849004971500f, 1.855083563486706900f, 1.854940209762322700f, - 1.854796787837089500f, - 1.854653297716280400f, 1.854509739405171300f, 1.854366112909040300f, - 1.854222418233168400f, - 1.854078655382838300f, 1.853934824363336200f, 1.853790925179950500f, - 1.853646957837971500f, - 1.853502922342692600f, 1.853358818699409900f, 1.853214646913421200f, - 1.853070406990027500f, - 1.852926098934532200f, 1.852781722752241000f, 1.852637278448462200f, - 1.852492766028506400f, - 1.852348185497687300f, 1.852203536861320600f, 1.852058820124724300f, - 1.851914035293219700f, - 1.851769182372129600f, 1.851624261366780400f, 1.851479272282500000f, - 1.851334215124619300f, - 1.851189089898471800f, 1.851043896609393400f, 1.850898635262721900f, - 1.850753305863798800f, - 1.850607908417967200f, 1.850462442930572900f, 1.850316909406964200f, - 1.850171307852492200f, - 1.850025638272510000f, 1.849879900672373600f, 1.849734095057441200f, - 1.849588221433073700f, - 1.849442279804634600f, 1.849296270177489800f, 1.849150192557007300f, - 1.849004046948558200f, - 1.848857833357515900f, 1.848711551789256300f, 1.848565202249157400f, - 1.848418784742600400f, - 1.848272299274968500f, 1.848125745851647800f, 1.847979124478026100f, - 1.847832435159495000f, - 1.847685677901447200f, 1.847538852709279100f, 1.847391959588388300f, - 1.847244998544176300f, - 1.847097969582046200f, 1.846950872707404000f, 1.846803707925657600f, - 1.846656475242218300f, - 1.846509174662499300f, 1.846361806191916000f, 1.846214369835887500f, - 1.846066865599834000f, - 1.845919293489179000f, 1.845771653509348200f, 1.845623945665770100f, - 1.845476169963875500f, - 1.845328326409097400f, 1.845180415006871800f, 1.845032435762637100f, - 1.844884388681833800f, - 1.844736273769905300f, 1.844588091032297400f, 1.844439840474458200f, - 1.844291522101838800f, - 1.844143135919891900f, 1.843994681934073600f, 1.843846160149842200f, - 1.843697570572658200f, - 1.843548913207985000f, 1.843400188061288000f, 1.843251395138035800f, - 1.843102534443698900f, - 1.842953605983750400f, 1.842804609763666100f, 1.842655545788924000f, - 1.842506414065004900f, - 1.842357214597392100f, 1.842207947391570900f, 1.842058612453029600f, - 1.841909209787258900f, - 1.841759739399751800f, 1.841610201296003800f, 1.841460595481513100f, - 1.841310921961780500f, - 1.841161180742308500f, 1.841011371828603200f, 1.840861495226172600f, - 1.840711550940526700f, - 1.840561538977179200f, 1.840411459341645400f, 1.840261312039443100f, - 1.840111097076092800f, - 1.839960814457117600f, 1.839810464188043100f, 1.839660046274397100f, - 1.839509560721709800f, - 1.839359007535514400f, 1.839208386721346500f, 1.839057698284743500f, - 1.838906942231246100f, - 1.838756118566397200f, 1.838605227295741800f, 1.838454268424828400f, - 1.838303241959206700f, - 1.838152147904429800f, 1.838000986266052900f, 1.837849757049633900f, - 1.837698460260732900f, - 1.837547095904912700f, 1.837395663987738700f, 1.837244164514778600f, - 1.837092597491602100f, - 1.836940962923782700f, 1.836789260816895000f, 1.836637491176516600f, - 1.836485654008228200f, - 1.836333749317611700f, 1.836181777110252900f, 1.836029737391738700f, - 1.835877630167659800f, - 1.835725455443608200f, 1.835573213225179400f, 1.835420903517970500f, - 1.835268526327581900f, - 1.835116081659615700f, 1.834963569519677100f, 1.834810989913373500f, - 1.834658342846314800f, - 1.834505628324113200f, 1.834352846352383700f, 1.834199996936744000f, - 1.834047080082813300f, - 1.833894095796214400f, 1.833741044082571900f, 1.833587924947513100f, - 1.833434738396668000f, - 1.833281484435668400f, 1.833128163070149300f, 1.832974774305747600f, - 1.832821318148103500f, - 1.832667794602858400f, 1.832514203675657600f, 1.832360545372147900f, - 1.832206819697979000f, - 1.832053026658802700f, 1.831899166260273700f, 1.831745238508049300f, - 1.831591243407788300f, - 1.831437180965153100f, 1.831283051185808300f, 1.831128854075420500f, - 1.830974589639659000f, - 1.830820257884196100f, 1.830665858814705600f, 1.830511392436864800f, - 1.830356858756352800f, - 1.830202257778851300f, 1.830047589510044500f, 1.829892853955619200f, - 1.829738051121264600f, - 1.829583181012672400f, 1.829428243635536500f, 1.829273238995553700f, - 1.829118167098423100f, - 1.828963027949846100f, 1.828807821555527000f, 1.828652547921171900f, - 1.828497207052490100f, - 1.828341798955192900f, 1.828186323634994200f, 1.828030781097610400f, - 1.827875171348760400f, - 1.827719494394165500f, 1.827563750239549400f, 1.827407938890638600f, - 1.827252060353161500f, - 1.827096114632849700f, 1.826940101735436500f, 1.826784021666658400f, - 1.826627874432253700f, - 1.826471660037963800f, 1.826315378489531800f, 1.826159029792704400f, - 1.826002613953229500f, - 1.825846130976858100f, 1.825689580869344100f, 1.825532963636443000f, - 1.825376279283913200f, - 1.825219527817515800f, 1.825062709243013800f, 1.824905823566173000f, - 1.824748870792761900f, - 1.824591850928550800f, 1.824434763979313300f, 1.824277609950824700f, - 1.824120388848863300f, - 1.823963100679209600f, 1.823805745447646600f, 1.823648323159960100f, - 1.823490833821937600f, - 1.823333277439369600f, 1.823175654018049300f, 1.823017963563772000f, - 1.822860206082335300f, - 1.822702381579539800f, 1.822544490061187800f, 1.822386531533084900f, - 1.822228506001038800f, - 1.822070413470859600f, 1.821912253948359700f, 1.821754027439354400f, - 1.821595733949661100f, - 1.821437373485099900f, 1.821278946051493100f, 1.821120451654665700f, - 1.820961890300445400f, - 1.820803261994661500f, 1.820644566743146800f, 1.820485804551735800f, - 1.820326975426265600f, - 1.820168079372576300f, 1.820009116396509800f, 1.819850086503910700f, - 1.819690989700625900f, - 1.819531825992505500f, 1.819372595385401000f, 1.819213297885166900f, - 1.819053933497660300f, - 1.818894502228740600f, 1.818735004084269600f, 1.818575439070111200f, - 1.818415807192132600f, - 1.818256108456203000f, 1.818096342868193800f, 1.817936510433979300f, - 1.817776611159436000f, - 1.817616645050443000f, 1.817456612112881900f, 1.817296512352636300f, - 1.817136345775592900f, - 1.816976112387640700f, 1.816815812194670700f, 1.816655445202576700f, - 1.816495011417255300f, - 1.816334510844604700f, 1.816173943490526400f, 1.816013309360923900f, - 1.815852608461703300f, - 1.815691840798773000f, 1.815531006378043900f, 1.815370105205429600f, - 1.815209137286846200f, - 1.815048102628211500f, 1.814887001235446600f, 1.814725833114474700f, - 1.814564598271221300f, - 1.814403296711615000f, 1.814241928441585800f, 1.814080493467067300f, - 1.813918991793994900f, - 1.813757423428306000f, 1.813595788375941700f, 1.813434086642844400f, - 1.813272318234959700f, - 1.813110483158235400f, 1.812948581418621500f, 1.812786613022070700f, - 1.812624577974538000f, - 1.812462476281981200f, 1.812300307950360300f, 1.812138072985637800f, - 1.811975771393778300f, - 1.811813403180749300f, 1.811650968352521000f, 1.811488466915065000f, - 1.811325898874356800f, - 1.811163264236372900f, 1.811000563007093100f, 1.810837795192499400f, - 1.810674960798576600f, - 1.810512059831311400f, 1.810349092296693400f, 1.810186058200714100f, - 1.810022957549368000f, - 1.809859790348652200f, 1.809696556604565300f, 1.809533256323109200f, - 1.809369889510288100f, - 1.809206456172108200f, 1.809042956314578900f, 1.808879389943711200f, - 1.808715757065519200f, - 1.808552057686019200f, 1.808388291811230000f, 1.808224459447172800f, - 1.808060560599871200f, - 1.807896595275351200f, 1.807732563479641300f, 1.807568465218772900f, - 1.807404300498778800f, - 1.807240069325695400f, 1.807075771705560800f, 1.806911407644415700f, - 1.806746977148303300f, - 1.806582480223269500f, 1.806417916875362000f, 1.806253287110631600f, - 1.806088590935131000f, - 1.805923828354915900f, 1.805758999376044100f, 1.805594104004575800f, - 1.805429142246573600f, - 1.805264114108102900f, 1.805099019595231200f, 1.804933858714028700f, - 1.804768631470567500f, - 1.804603337870923000f, 1.804437977921172300f, 1.804272551627395400f, - 1.804107058995674500f, - 1.803941500032094200f, 1.803775874742741500f, 1.803610183133706400f, - 1.803444425211080400f, - 1.803278600980958300f, 1.803112710449436900f, 1.802946753622615400f, - 1.802780730506595700f, - 1.802614641107481900f, 1.802448485431380900f, 1.802282263484401300f, - 1.802115975272655000f, - 1.801949620802255600f, 1.801783200079319900f, 1.801616713109966300f, - 1.801450159900316300f, - 1.801283540456493700f, 1.801116854784624400f, 1.800950102890836800f, - 1.800783284781262200f, - 1.800616400462033800f, 1.800449449939287800f, 1.800282433219162000f, - 1.800115350307797600f, - 1.799948201211337500f, 1.799780985935927300f, 1.799613704487715200f, - 1.799446356872851400f, - 1.799278943097489100f, 1.799111463167783400f, 1.798943917089892000f, - 1.798776304869975200f, - 1.798608626514195800f, 1.798440882028718500f, 1.798273071419711000f, - 1.798105194693343500f, - 1.797937251855787700f, 1.797769242913218800f, 1.797601167871813800f, - 1.797433026737752700f, - 1.797264819517217200f, 1.797096546216391900f, 1.796928206841463800f, - 1.796759801398622100f, - 1.796591329894058800f, 1.796422792333968000f, 1.796254188724546500f, - 1.796085519071992900f, - 1.795916783382509200f, 1.795747981662299200f, 1.795579113917569200f, - 1.795410180154527900f, - 1.795241180379386800f, 1.795072114598359200f, 1.794902982817661500f, - 1.794733785043511900f, - 1.794564521282131300f, 1.794395191539743400f, 1.794225795822573600f, - 1.794056334136850300f, - 1.793886806488804100f, 1.793717212884667900f, 1.793547553330677300f, - 1.793377827833070100f, - 1.793208036398086900f, 1.793038179031970000f, 1.792868255740965000f, - 1.792698266531319400f, - 1.792528211409282900f, 1.792358090381108300f, 1.792187903453050100f, - 1.792017650631366100f, - 1.791847331922315600f, 1.791676947332161000f, 1.791506496867166600f, - 1.791335980533599300f, - 1.791165398337728900f, 1.790994750285827000f, 1.790824036384167900f, - 1.790653256639028100f, - 1.790482411056686800f, 1.790311499643425500f, 1.790140522405528200f, - 1.789969479349281100f, - 1.789798370480973000f, 1.789627195806895200f, 1.789455955333341100f, - 1.789284649066606800f, - 1.789113277012990900f, 1.788941839178794100f, 1.788770335570319700f, - 1.788598766193873600f, - 1.788427131055763600f, 1.788255430162300400f, 1.788083663519796800f, - 1.787911831134568300f, - 1.787739933012932900f, 1.787567969161210300f, 1.787395939585723500f, - 1.787223844292797500f, - 1.787051683288759500f, 1.786879456579939700f, 1.786707164172670200f, - 1.786534806073285700f, - 1.786362382288123400f, 1.786189892823522700f, 1.786017337685825700f, - 1.785844716881376700f, - 1.785672030416522300f, 1.785499278297612000f, 1.785326460530997300f, - 1.785153577123032000f, - 1.784980628080072900f, 1.784807613408478300f, 1.784634533114609800f, - 1.784461387204831400f, - 1.784288175685508700f, 1.784114898563010200f, 1.783941555843707100f, - 1.783768147533972200f, - 1.783594673640181800f, 1.783421134168713800f, 1.783247529125948900f, - 1.783073858518269700f, - 1.782900122352062000f, 1.782726320633713200f, 1.782552453369613800f, - 1.782378520566156200f, - 1.782204522229735600f, 1.782030458366749200f, 1.781856328983596900f, - 1.781682134086680900f, - 1.781507873682406200f, 1.781333547777179200f, 1.781159156377410100f, - 1.780984699489510200f, - 1.780810177119894100f, 1.780635589274978600f, 1.780460935961182300f, - 1.780286217184927000f, - 1.780111432952636600f, 1.779936583270737400f, 1.779761668145658300f, - 1.779586687583830200f, - 1.779411641591686500f, 1.779236530175663600f, 1.779061353342199500f, - 1.778886111097735000f, - 1.778710803448713400f, 1.778535430401580100f, 1.778359991962783000f, - 1.778184488138772900f, - 1.778008918936002000f, 1.777833284360925900f, 1.777657584420002000f, - 1.777481819119690200f, - 1.777305988466453000f, 1.777130092466755200f, 1.776954131127064200f, - 1.776778104453849100f, - 1.776602012453582400f, 1.776425855132738100f, 1.776249632497793200f, - 1.776073344555227000f, - 1.775896991311520800f, 1.775720572773158900f, 1.775544088946627600f, - 1.775367539838415700f, - 1.775190925455014400f, 1.775014245802917200f, 1.774837500888620400f, - 1.774660690718622000f, - 1.774483815299423100f, 1.774306874637527000f, 1.774129868739439100f, - 1.773952797611667100f, - 1.773775661260722100f, 1.773598459693116500f, 1.773421192915365400f, - 1.773243860933986400f, - 1.773066463755499800f, 1.772889001386427800f, 1.772711473833295200f, - 1.772533881102629000f, - 1.772356223200959100f, 1.772178500134817100f, 1.772000711910737700f, - 1.771822858535257600f, - 1.771644940014915700f, 1.771466956356254000f, 1.771288907565816000f, - 1.771110793650148500f, - 1.770932614615799800f, 1.770754370469321400f, 1.770576061217266500f, - 1.770397686866191300f, - 1.770219247422653700f, 1.770040742893215000f, 1.769862173284438000f, - 1.769683538602888000f, - 1.769504838855133100f, 1.769326074047743700f, 1.769147244187292200f, - 1.768968349280353800f, - 1.768789389333506000f, 1.768610364353328600f, 1.768431274346403900f, - 1.768252119319316400f, - 1.768072899278653200f, 1.767893614231003800f, 1.767714264182959500f, - 1.767534849141115100f, - 1.767355369112067100f, 1.767175824102414000f, 1.766996214118757800f, - 1.766816539167701800f, - 1.766636799255852300f, 1.766456994389817600f, 1.766277124576209000f, - 1.766097189821639300f, - 1.765917190132724600f, 1.765737125516083000f, 1.765556995978334800f, - 1.765376801526102700f, - 1.765196542166012100f, 1.765016217904690900f, 1.764835828748768400f, - 1.764655374704877700f, - 1.764474855779653200f, 1.764294271979732100f, 1.764113623311754000f, - 1.763932909782361100f, - 1.763752131398197200f, 1.763571288165909400f, 1.763390380092146400f, - 1.763209407183560200f, - 1.763028369446804500f, 1.762847266888535100f, 1.762666099515411100f, - 1.762484867334093400f, - 1.762303570351245300f, 1.762122208573532600f, 1.761940782007623600f, - 1.761759290660188400f, - 1.761577734537900500f, 1.761396113647435000f, 1.761214427995469100f, - 1.761032677588683800f, - 1.760850862433760700f, 1.760668982537384900f, 1.760487037906243600f, - 1.760305028547026500f, - 1.760122954466425600f, 1.759940815671135100f, 1.759758612167851700f, - 1.759576343963274600f, - 1.759394011064105100f, 1.759211613477047200f, 1.759029151208807400f, - 1.758846624266093800f, - 1.758664032655617500f, 1.758481376384092500f, 1.758298655458233600f, - 1.758115869884759700f, - 1.757933019670390800f, 1.757750104821850000f, 1.757567125345862700f, - 1.757384081249156100f, - 1.757200972538460700f, 1.757017799220508500f, 1.756834561302034400f, - 1.756651258789775800f, - 1.756467891690471700f, 1.756284460010864200f, 1.756100963757697900f, - 1.755917402937718900f, - 1.755733777557676500f, 1.755550087624322000f, 1.755366333144409200f, - 1.755182514124693900f, - 1.754998630571935200f, 1.754814682492893600f, 1.754630669894332600f, - 1.754446592783017500f, - 1.754262451165716300f, 1.754078245049199600f, 1.753893974440240000f, - 1.753709639345612600f, - 1.753525239772095100f, 1.753340775726466700f, 1.753156247215510400f, - 1.752971654246010300f, - 1.752786996824753600f, 1.752602274958529500f, 1.752417488654129700f, - 1.752232637918348200f, - 1.752047722757981600f, 1.751862743179828600f, 1.751677699190690400f, - 1.751492590797370600f, - 1.751307418006674800f, 1.751122180825411800f, 1.750936879260391700f, - 1.750751513318427700f, - 1.750566083006335600f, 1.750380588330932500f, 1.750195029299038900f, - 1.750009405917477100f, - 1.749823718193071800f, 1.749637966132650900f, 1.749452149743043100f, - 1.749266269031080700f, - 1.749080324003598100f, 1.748894314667431800f, 1.748708241029421000f, - 1.748522103096407300f, - 1.748335900875233900f, 1.748149634372747200f, 1.747963303595795500f, - 1.747776908551230000f, - 1.747590449245904000f, 1.747403925686672500f, 1.747217337880393900f, - 1.747030685833928200f, - 1.746843969554138200f, 1.746657189047889200f, 1.746470344322048200f, - 1.746283435383485100f, - 1.746096462239072000f, 1.745909424895683200f, 1.745722323360195900f, - 1.745535157639489100f, - 1.745347927740444200f, 1.745160633669945200f, 1.744973275434878300f, - 1.744785853042132300f, - 1.744598366498598200f, 1.744410815811169300f, 1.744223200986741100f, - 1.744035522032211900f, - 1.743847778954482000f, 1.743659971760454200f, 1.743472100457033700f, - 1.743284165051127700f, - 1.743096165549646400f, 1.742908101959502100f, 1.742719974287608900f, - 1.742531782540884100f, - 1.742343526726246800f, 1.742155206850618800f, 1.741966822920923800f, - 1.741778374944088000f, - 1.741589862927040800f, 1.741401286876712800f, 1.741212646800037300f, - 1.741023942703950200f, - 1.740835174595389600f, 1.740646342481295900f, 1.740457446368612000f, - 1.740268486264283200f, - 1.740079462175256900f, 1.739890374108482600f, 1.739701222070913200f, - 1.739512006069502800f, - 1.739322726111208500f, 1.739133382202989500f, 1.738943974351807600f, - 1.738754502564626700f, - 1.738564966848413100f, 1.738375367210135400f, 1.738185703656765200f, - 1.737995976195275000f, - 1.737806184832640900f, 1.737616329575841300f, 1.737426410431856200f, - 1.737236427407668800f, - 1.737046380510263800f, 1.736856269746629000f, 1.736666095123754000f, - 1.736475856648631400f, - 1.736285554328254900f, 1.736095188169622500f, 1.735904758179732400f, - 1.735714264365586700f, - 1.735523706734189100f, 1.735333085292545900f, 1.735142400047666100f, - 1.734951651006560100f, - 1.734760838176241400f, 1.734569961563725600f, 1.734379021176030600f, - 1.734188017020177100f, - 1.733996949103187500f, 1.733805817432086900f, 1.733614622013902600f, - 1.733423362855664100f, - 1.733232039964403900f, 1.733040653347156300f, 1.732849203010957900f, - 1.732657688962847600f, - 1.732466111209867200f, 1.732274469759060200f, 1.732082764617472800f, - 1.731890995792153600f, - 1.731699163290153100f, 1.731507267118524500f, 1.731315307284323700f, - 1.731123283794607800f, - 1.730931196656437600f, 1.730739045876875200f, 1.730546831462985500f, - 1.730354553421835600f, - 1.730162211760495300f, 1.729969806486036500f, 1.729777337605533000f, - 1.729584805126061400f, - 1.729392209054700900f, 1.729199549398532400f, 1.729006826164639400f, - 1.728814039360108100f, - 1.728621188992026400f, 1.728428275067485100f, 1.728235297593577100f, - 1.728042256577397200f, - 1.727849152026043500f, 1.727655983946615700f, 1.727462752346216000f, - 1.727269457231948900f, - 1.727076098610921500f, 1.726882676490243000f, 1.726689190877025000f, - 1.726495641778381200f, - 1.726302029201427900f, 1.726108353153283900f, 1.725914613641069900f, - 1.725720810671909300f, - 1.725526944252927700f, 1.725333014391252900f, 1.725139021094015200f, - 1.724944964368347000f, - 1.724750844221383500f, 1.724556660660261800f, 1.724362413692121400f, - 1.724168103324104300f, - 1.723973729563354600f, 1.723779292417019200f, 1.723584791892246700f, - 1.723390227996188600f, - 1.723195600735998100f, 1.723000910118831300f, 1.722806156151846400f, - 1.722611338842204000f, - 1.722416458197066900f, 1.722221514223600100f, 1.722026506928971500f, - 1.721831436320350800f, - 1.721636302404910200f, 1.721441105189824000f, 1.721245844682269600f, - 1.721050520889425600f, - 1.720855133818473900f, 1.720659683476597900f, 1.720464169870984200f, - 1.720268593008821100f, - 1.720072952897299100f, 1.719877249543611900f, 1.719681482954954500f, - 1.719485653138524800f, - 1.719289760101522900f, 1.719093803851151400f, 1.718897784394614900f, - 1.718701701739120400f, - 1.718505555891877400f, 1.718309346860097600f, 1.718113074650995200f, - 1.717916739271786500f, - 1.717720340729689700f, 1.717523879031926500f, 1.717327354185719900f, - 1.717130766198295700f, - 1.716934115076881800f, 1.716737400828708400f, 1.716540623461008100f, - 1.716343782981016200f, - 1.716146879395969500f, 1.715949912713108100f, 1.715752882939673300f, - 1.715555790082909900f, - 1.715358634150064000f, 1.715161415148384500f, 1.714964133085122900f, - 1.714766787967532600f, - 1.714569379802868900f, 1.714371908598390800f, 1.714174374361358000f, - 1.713976777099033700f, - 1.713779116818682900f, 1.713581393527573000f, 1.713383607232973600f, - 1.713185757942156800f, - 1.712987845662396800f, 1.712789870400970700f, 1.712591832165157200f, - 1.712393730962237500f, - 1.712195566799495500f, 1.711997339684216700f, 1.711799049623689900f, - 1.711600696625205300f, - 1.711402280696055800f, 1.711203801843536700f, 1.711005260074945200f, - 1.710806655397581600f, - 1.710607987818747700f, 1.710409257345748100f, 1.710210463985889500f, - 1.710011607746480600f, - 1.709812688634833300f, 1.709613706658261100f, 1.709414661824080000f, - 1.709215554139608400f, - 1.709016383612166600f, 1.708817150249077900f, 1.708617854057667300f, - 1.708418495045262300f, - 1.708219073219193300f, 1.708019588586791700f, 1.707820041155392500f, - 1.707620430932332400f, - 1.707420757924950300f, 1.707221022140587900f, 1.707021223586588700f, - 1.706821362270298600f, - 1.706621438199066300f, 1.706421451380242000f, 1.706221401821179200f, - 1.706021289529232800f, - 1.705821114511760300f, 1.705620876776121600f, 1.705420576329679000f, - 1.705220213179796900f, - 1.705019787333842200f, 1.704819298799183700f, 1.704618747583193100f, - 1.704418133693243800f, - 1.704217457136711900f, 1.704016717920976000f, 1.703815916053416300f, - 1.703615051541415900f, - 1.703414124392360000f, 1.703213134613636100f, 1.703012082212634000f, - 1.702810967196746000f, - 1.702609789573366300f, 1.702408549349891500f, 1.702207246533721000f, - 1.702005881132255800f, - 1.701804453152900000f, 1.701602962603059100f, 1.701401409490141300f, - 1.701199793821557300f, - 1.700998115604720000f, 1.700796374847044300f, 1.700594571555948100f, - 1.700392705738850400f, - 1.700190777403173700f, 1.699988786556342300f, 1.699786733205783000f, - 1.699584617358924400f, - 1.699382439023197700f, 1.699180198206036600f, 1.698977894914877100f, - 1.698775529157156700f, - 1.698573100940316400f, 1.698370610271798800f, 1.698168057159048700f, - 1.697965441609513300f, - 1.697762763630642700f, 1.697560023229888200f, 1.697357220414704500f, - 1.697154355192547900f, - 1.696951427570877000f, 1.696748437557152900f, 1.696545385158839200f, - 1.696342270383401200f, - 1.696139093238307400f, 1.695935853731027600f, 1.695732551869034300f, - 1.695529187659802400f, - 1.695325761110809200f, 1.695122272229534000f, 1.694918721023458600f, - 1.694715107500066800f, - 1.694511431666845000f, 1.694307693531282000f, 1.694103893100868100f, - 1.693900030383096900f, - 1.693696105385463800f, 1.693492118115466500f, 1.693288068580604900f, - 1.693083956788381500f, - 1.692879782746300700f, 1.692675546461869900f, 1.692471247942597600f, - 1.692266887195995600f, - 1.692062464229577600f, 1.691857979050859900f, 1.691653431667360600f, - 1.691448822086600400f, - 1.691244150316102000f, 1.691039416363390800f, 1.690834620235994300f, - 1.690629761941442100f, - 1.690424841487266700f, 1.690219858881001800f, 1.690014814130184300f, - 1.689809707242353200f, - 1.689604538225049700f, 1.689399307085817300f, 1.689194013832201500f, - 1.688988658471750600f, - 1.688783241012014700f, 1.688577761460546800f, 1.688372219824901400f, - 1.688166616112636100f, - 1.687960950331309800f, 1.687755222488484600f, 1.687549432591724400f, - 1.687343580648595700f, - 1.687137666666667100f, 1.686931690653509000f, 1.686725652616694900f, - 1.686519552563800400f, - 1.686313390502403000f, 1.686107166440082600f, 1.685900880384421800f, - 1.685694532343004600f, - 1.685488122323418400f, 1.685281650333251900f, 1.685075116380096800f, - 1.684868520471546600f, - 1.684661862615197000f, 1.684455142818646700f, 1.684248361089495800f, - 1.684041517435347400f, - 1.683834611863806100f, 1.683627644382479800f, 1.683420614998977900f, - 1.683213523720911800f, - 1.683006370555896400f, 1.682799155511547600f, 1.682591878595484300f, - 1.682384539815327400f, - 1.682177139178700400f, 1.681969676693228600f, 1.681762152366539600f, - 1.681554566206263900f, - 1.681346918220033800f, 1.681139208415483700f, 1.680931436800250600f, - 1.680723603381973500f, - 1.680515708168294200f, 1.680307751166856300f, 1.680099732385305300f, - 1.679891651831290100f, - 1.679683509512460900f, 1.679475305436470600f, 1.679267039610974300f, - 1.679058712043629300f, - 1.678850322742095200f, 1.678641871714033900f, 1.678433358967109400f, - 1.678224784508988400f, - 1.678016148347339300f, 1.677807450489833300f, 1.677598690944143400f, - 1.677389869717945000f, - 1.677180986818916300f, 1.676972042254736900f, 1.676763036033089600f, - 1.676553968161658600f, - 1.676344838648130600f, 1.676135647500194700f, 1.675926394725542700f, - 1.675717080331867900f, - 1.675507704326866200f, 1.675298266718235900f, 1.675088767513677200f, - 1.674879206720892900f, - 1.674669584347587800f, 1.674459900401469700f, 1.674250154890247300f, - 1.674040347821632800f, - 1.673830479203340000f, 1.673620549043085500f, 1.673410557348587600f, - 1.673200504127567000f, - 1.672990389387746700f, 1.672780213136852300f, 1.672569975382611300f, - 1.672359676132753500f, - 1.672149315395010900f, 1.671938893177118000f, 1.671728409486811500f, - 1.671517864331830000f, - 1.671307257719914800f, 1.671096589658809500f, 1.670885860156259300f, - 1.670675069220012500f, - 1.670464216857819200f, 1.670253303077431800f, 1.670042327886605200f, - 1.669831291293095900f, - 1.669620193304663500f, 1.669409033929069500f, 1.669197813174077200f, - 1.668986531047453000f, - 1.668775187556965000f, 1.668563782710383600f, 1.668352316515481700f, - 1.668140788980034400f, - 1.667929200111818400f, 1.667717549918614100f, 1.667505838408202700f, - 1.667294065588368100f, - 1.667082231466896900f, 1.666870336051577800f, 1.666658379350201000f, - 1.666446361370560000f, - 1.666234282120450100f, 1.666022141607668600f, 1.665809939840015500f, - 1.665597676825292700f, - 1.665385352571304500f, 1.665172967085857700f, 1.664960520376761000f, - 1.664748012451825200f, - 1.664535443318863900f, 1.664322812985692600f, 1.664110121460129000f, - 1.663897368749993400f, - 1.663684554863107800f, 1.663471679807296800f, 1.663258743590387400f, - 1.663045746220208600f, - 1.662832687704591800f, 1.662619568051370500f, 1.662406387268380100f, - 1.662193145363459100f, - 1.661979842344447600f, 1.661766478219188300f, 1.661553052995526000f, - 1.661339566681307600f, - 1.661126019284382200f, 1.660912410812601900f, 1.660698741273819700f, - 1.660485010675892400f, - 1.660271219026677700f, 1.660057366334036300f, 1.659843452605831200f, - 1.659629477849926800f, - 1.659415442074190900f, 1.659201345286492900f, 1.658987187494704200f, - 1.658772968706699000f, - 1.658558688930353400f, 1.658344348173546300f, 1.658129946444157700f, - 1.657915483750071100f, - 1.657700960099171200f, 1.657486375499345900f, 1.657271729958484500f, - 1.657057023484479000f, - 1.656842256085223800f, 1.656627427768615000f, 1.656412538542551200f, - 1.656197588414933600f, - 1.655982577393664700f, 1.655767505486650500f, 1.655552372701798200f, - 1.655337179047017700f, - 1.655121924530220900f, 1.654906609159322500f, 1.654691232942238500f, - 1.654475795886888300f, - 1.654260298001192200f, 1.654044739293073900f, 1.653829119770458900f, - 1.653613439441274500f, - 1.653397698313451300f, 1.653181896394921000f, 1.652966033693617800f, - 1.652750110217479100f, - 1.652534125974443000f, 1.652318080972451400f, 1.652101975219447200f, - 1.651885808723375900f, - 1.651669581492185300f, 1.651453293533826000f, 1.651236944856249600f, - 1.651020535467411200f, - 1.650804065375267400f, 1.650587534587776700f, 1.650370943112901000f, - 1.650154290958603300f, - 1.649937578132849400f, 1.649720804643607400f, 1.649503970498847200f, - 1.649287075706541200f, - 1.649070120274664000f, 1.648853104211192700f, 1.648636027524106100f, - 1.648418890221385400f, - 1.648201692311014300f, 1.647984433800978600f, 1.647767114699266100f, - 1.647549735013867000f, - 1.647332294752774200f, 1.647114793923981600f, 1.646897232535486500f, - 1.646679610595287900f, - 1.646461928111387300f, 1.646244185091788400f, 1.646026381544496400f, - 1.645808517477519700f, - 1.645590592898868600f, 1.645372607816555400f, 1.645154562238594800f, - 1.644936456173004000f, - 1.644718289627801600f, 1.644500062611009300f, 1.644281775130650900f, - 1.644063427194751600f, - 1.643845018811340300f, 1.643626549988446200f, 1.643408020734102600f, - 1.643189431056343700f, - 1.642970780963206800f, 1.642752070462730800f, 1.642533299562957100f, - 1.642314468271929300f, - 1.642095576597693200f, 1.641876624548297000f, 1.641657612131790500f, - 1.641438539356226500f, - 1.641219406229659700f, 1.641000212760146800f, 1.640780958955747200f, - 1.640561644824521700f, - 1.640342270374534500f, 1.640122835613851100f, 1.639903340550539200f, - 1.639683785192669600f, - 1.639464169548314100f, 1.639244493625547900f, 1.639024757432447500f, - 1.638804960977092100f, - 1.638585104267562800f, 1.638365187311943400f, 1.638145210118319400f, - 1.637925172694778800f, - 1.637705075049411800f, 1.637484917190310800f, 1.637264699125570200f, - 1.637044420863286600f, - 1.636824082411559600f, 1.636603683778490100f, 1.636383224972181500f, - 1.636162706000739300f, - 1.635942126872271800f, 1.635721487594888400f, 1.635500788176702100f, - 1.635280028625826900f, - 1.635059208950379700f, 1.634838329158479200f, 1.634617389258246700f, - 1.634396389257805700f, - 1.634175329165281400f, 1.633954208988801700f, 1.633733028736496400f, - 1.633511788416498000f, - 1.633290488036940500f, 1.633069127605960800f, 1.632847707131697600f, - 1.632626226622291700f, - 1.632404686085886300f, 1.632183085530627200f, 1.631961424964661700f, - 1.631739704396139900f, - 1.631517923833213400f, 1.631296083284036900f, 1.631074182756766300f, - 1.630852222259560700f, - 1.630630201800580900f, 1.630408121387990000f, 1.630185981029953000f, - 1.629963780734637400f, - 1.629741520510213000f, 1.629519200364851800f, 1.629296820306727700f, - 1.629074380344017100f, - 1.628851880484898200f, 1.628629320737551700f, 1.628406701110161100f, - 1.628184021610910700f, - 1.627961282247988300f, 1.627738483029583100f, 1.627515623963887000f, - 1.627292705059093700f, - 1.627069726323399500f, 1.626846687765002700f, 1.626623589392103500f, - 1.626400431212904800f, - 1.626177213235611400f, 1.625953935468430500f, 1.625730597919571300f, - 1.625507200597245500f, - 1.625283743509666300f, 1.625060226665050000f, 1.624836650071614500f, - 1.624613013737580000f, - 1.624389317671169500f, 1.624165561880607000f, 1.623941746374119500f, - 1.623717871159936300f, - 1.623493936246288300f, 1.623269941641409400f, 1.623045887353534900f, - 1.622821773390902700f, - 1.622597599761753000f, 1.622373366474327800f, 1.622149073536871800f, - 1.621924720957631300f, - 1.621700308744855200f, 1.621475836906794500f, 1.621251305451702400f, - 1.621026714387834300f, - 1.620802063723447700f, 1.620577353466802700f, 1.620352583626160500f, - 1.620127754209786100f, - 1.619902865225945300f, 1.619677916682906700f, 1.619452908588941300f, - 1.619227840952321800f, - 1.619002713781323200f, 1.618777527084222800f, 1.618552280869300300f, - 1.618326975144837000f, - 1.618101609919117200f, 1.617876185200426600f, 1.617650700997053500f, - 1.617425157317288200f, - 1.617199554169423500f, 1.616973891561754200f, 1.616748169502577200f, - 1.616522388000191500f, - 1.616296547062898500f, 1.616070646699001800f, 1.615844686916807300f, - 1.615618667724622700f, - 1.615392589130757900f, 1.615166451143525300f, 1.614940253771239400f, - 1.614713997022216900f, - 1.614487680904776600f, 1.614261305427239200f, 1.614034870597928400f, - 1.613808376425168900f, - 1.613581822917288900f, 1.613355210082617800f, 1.613128537929487500f, - 1.612901806466232200f, - 1.612675015701188000f, 1.612448165642693400f, 1.612221256299089200f, - 1.611994287678718100f, - 1.611767259789925100f, 1.611540172641057200f, 1.611313026240463800f, - 1.611085820596496600f, - 1.610858555717509200f, 1.610631231611857800f, 1.610403848287899700f, - 1.610176405753995800f, - 1.609948904018508200f, 1.609721343089801600f, 1.609493722976242900f, - 1.609266043686200700f, - 1.609038305228046400f, 1.608810507610153100f, 1.608582650840896200f, - 1.608354734928653800f, - 1.608126759881805400f, 1.607898725708732900f, 1.607670632417820500f, - 1.607442480017454700f, - 1.607214268516024000f, 1.606985997921919000f, 1.606757668243532500f, - 1.606529279489259600f, - 1.606300831667497600f, 1.606072324786645500f, 1.605843758855105300f, - 1.605615133881280700f, - 1.605386449873577300f, 1.605157706840403300f, 1.604928904790168700f, - 1.604700043731286200f, - 1.604471123672170500f, 1.604242144621237800f, 1.604013106586907400f, - 1.603784009577600100f, - 1.603554853601739700f, 1.603325638667751000f, 1.603096364784061900f, - 1.602867031959102100f, - 1.602637640201303400f, 1.602408189519099800f, 1.602178679920927900f, - 1.601949111415226000f, - 1.601719484010434300f, 1.601489797714996000f, 1.601260052537355700f, - 1.601030248485960900f, - 1.600800385569260300f, 1.600570463795705700f, 1.600340483173750400f, - 1.600110443711850300f, - 1.599880345418463100f, 1.599650188302049100f, 1.599419972371070500f, - 1.599189697633991400f, - 1.598959364099278700f, 1.598728971775401000f, 1.598498520670828900f, - 1.598268010794035900f, - 1.598037442153496900f, 1.597806814757689200f, 1.597576128615092200f, - 1.597345383734188000f, - 1.597114580123460100f, 1.596883717791394800f, 1.596652796746479600f, - 1.596421816997205500f, - 1.596190778552064800f, 1.595959681419551800f, 1.595728525608163700f, - 1.595497311126399300f, - 1.595266037982759500f, 1.595034706185747500f, 1.594803315743869000f, - 1.594571866665631700f, - 1.594340358959544800f, 1.594108792634120600f, 1.593877167697873100f, - 1.593645484159318200f, - 1.593413742026974500f, 1.593181941309362400f, 1.592950082015004700f, - 1.592718164152426000f, - 1.592486187730153300f, 1.592254152756715600f, 1.592022059240644400f, - 1.591789907190473100f, - 1.591557696614737100f, 1.591325427521974100f, 1.591093099920724200f, - 1.590860713819529400f, - 1.590628269226933600f, 1.590395766151483400f, 1.590163204601727100f, - 1.589930584586215500f, - 1.589697906113501000f, 1.589465169192139100f, 1.589232373830686400f, - 1.588999520037702300f, - 1.588766607821748200f, 1.588533637191387400f, 1.588300608155185600f, - 1.588067520721711000f, - 1.587834374899533400f, 1.587601170697224600f, 1.587367908123358900f, - 1.587134587186513000f, - 1.586901207895265300f, 1.586667770258196600f, 1.586434274283889500f, - 1.586200719980929200f, - 1.585967107357902700f, 1.585733436423399000f, 1.585499707186010200f, - 1.585265919654329300f, - 1.585032073836952100f, 1.584798169742476400f, 1.584564207379502500f, - 1.584330186756632200f, - 1.584096107882470000f, 1.583861970765622100f, 1.583627775414697000f, - 1.583393521838305700f, - 1.583159210045060900f, 1.582924840043577400f, 1.582690411842472700f, - 1.582455925450365600f, - 1.582221380875877800f, 1.581986778127632700f, 1.581752117214255900f, - 1.581517398144375800f, - 1.581282620926621300f, 1.581047785569625400f, 1.580812892082021900f, - 1.580577940472447200f, - 1.580342930749539800f, 1.580107862921940700f, 1.579872736998292100f, - 1.579637552987239100f, - 1.579402310897428900f, 1.579167010737510600f, 1.578931652516135700f, - 1.578696236241957200f, - 1.578460761923630800f, 1.578225229569814700f, 1.577989639189168100f, - 1.577753990790353500f, - 1.577518284382034800f, 1.577282519972878200f, 1.577046697571552000f, - 1.576810817186727000f, - 1.576574878827075700f, 1.576338882501273000f, 1.576102828217995600f, - 1.575866715985922500f, - 1.575630545813735200f, 1.575394317710116600f, 1.575158031683752300f, - 1.574921687743330300f, - 1.574685285897539800f, 1.574448826155072400f, 1.574212308524622500f, - 1.573975733014886000f, - 1.573739099634561500f, 1.573502408392348600f, 1.573265659296950300f, - 1.573028852357070800f, - 1.572791987581417100f, 1.572555064978698100f, 1.572318084557624800f, - 1.572081046326909900f, - 1.571843950295269000f, 1.571606796471419100f, 1.571369584864080100f, - 1.571132315481973200f, - 1.570894988333822400f, 1.570657603428353300f, 1.570420160774294000f, - 1.570182660380374600f, - 1.569945102255327200f, 1.569707486407886600f, 1.569469812846788500f, - 1.569232081580771900f, - 1.568994292618577400f, 1.568756445968948000f, 1.568518541640628400f, - 1.568280579642366000f, - 1.568042559982909500f, 1.567804482671010500f, 1.567566347715422500f, - 1.567328155124900800f, - 1.567089904908203200f, 1.566851597074089500f, 1.566613231631321500f, - 1.566374808588663300f, - 1.566136327954881000f, 1.565897789738742900f, 1.565659193949019400f, - 1.565420540594482800f, - 1.565181829683907700f, 1.564943061226071100f, 1.564704235229751500f, - 1.564465351703730400f, - 1.564226410656790000f, 1.563987412097716200f, 1.563748356035296000f, - 1.563509242478319000f, - 1.563270071435576500f, 1.563030842915862100f, 1.562791556927971800f, - 1.562552213480703300f, - 1.562312812582856500f, 1.562073354243233700f, 1.561833838470639200f, - 1.561594265273878800f, - 1.561354634661761300f, 1.561114946643096900f, 1.560875201226698900f, - 1.560635398421381400f, - 1.560395538235961800f, 1.560155620679258400f, 1.559915645760092900f, - 1.559675613487288200f, - 1.559435523869669500f, 1.559195376916064700f, 1.558955172635302800f, - 1.558714911036215700f, - 1.558474592127637100f, 1.558234215918402600f, 1.557993782417350400f, - 1.557753291633320500f, - 1.557512743575155000f, 1.557272138251698300f, 1.557031475671796400f, - 1.556790755844298400f, - 1.556549978778054300f, 1.556309144481917300f, 1.556068252964741600f, - 1.555827304235384500f, - 1.555586298302704900f, 1.555345235175563900f, 1.555104114862824600f, - 1.554862937373352500f, - 1.554621702716015000f, 1.554380410899681300f, 1.554139061933223200f, - 1.553897655825514600f, - 1.553656192585431100f, 1.553414672221850700f, 1.553173094743653300f, - 1.552931460159721100f, - 1.552689768478938500f, 1.552448019710191300f, 1.552206213862368500f, - 1.551964350944360100f, - 1.551722430965059000f, 1.551480453933359800f, 1.551238419858159700f, - 1.550996328748356800f, - 1.550754180612852900f, 1.550511975460550500f, 1.550269713300355100f, - 1.550027394141174000f, - 1.549785017991916400f, 1.549542584861493900f, 1.549300094758820000f, - 1.549057547692810600f, - 1.548814943672383300f, 1.548572282706457900f, 1.548329564803956300f, - 1.548086789973802700f, - 1.547843958224923000f, 1.547601069566245900f, 1.547358124006701400f, - 1.547115121555221700f, - 1.546872062220741700f, 1.546628946012197800f, 1.546385772938528600f, - 1.546142543008675300f, - 1.545899256231580300f, 1.545655912616188800f, 1.545412512171447700f, - 1.545169054906306200f, - 1.544925540829715600f, 1.544681969950629300f, 1.544438342278002600f, - 1.544194657820792800f, - 1.543950916587959700f, 1.543707118588464800f, 1.543463263831272000f, - 1.543219352325347200f, - 1.542975384079658300f, 1.542731359103175300f, 1.542487277404870100f, - 1.542243138993717000f, - 1.541998943878692300f, 1.541754692068774600f, 1.541510383572944000f, - 1.541266018400183200f, - 1.541021596559476700f, 1.540777118059811100f, 1.540532582910175500f, - 1.540287991119560600f, - 1.540043342696959100f, 1.539798637651366400f, 1.539553875991779300f, - 1.539309057727197300f, - 1.539064182866621400f, 1.538819251419055100f, 1.538574263393503800f, - 1.538329218798974800f, - 1.538084117644477900f, 1.537838959939025200f, 1.537593745691629500f, - 1.537348474911307300f, - 1.537103147607076200f, 1.536857763787956400f, 1.536612323462969800f, - 1.536366826641140800f, - 1.536121273331495300f, 1.535875663543061700f, 1.535629997284870400f, - 1.535384274565953600f, - 1.535138495395346400f, 1.534892659782085100f, 1.534646767735208000f, - 1.534400819263756400f, - 1.534154814376772700f, 1.533908753083302200f, 1.533662635392391700f, - 1.533416461313090100f, - 1.533170230854448400f, 1.532923944025520200f, 1.532677600835360600f, - 1.532431201293027000f, - 1.532184745407578500f, 1.531938233188077100f, 1.531691664643585900f, - 1.531445039783170500f, - 1.531198358615898800f, 1.530951621150840700f, 1.530704827397067800f, - 1.530457977363654000f, - 1.530211071059675200f, 1.529964108494209700f, 1.529717089676337500f, - 1.529470014615140800f, - 1.529222883319703700f, 1.528975695799112500f, 1.528728452062455600f, - 1.528481152118823700f, - 1.528233795977309400f, 1.527986383647006500f, 1.527738915137012400f, - 1.527491390456425600f, - 1.527243809614346600f, 1.526996172619878900f, 1.526748479482126700f, - 1.526500730210197200f, - 1.526252924813199500f, 1.526005063300244900f, 1.525757145680446200f, - 1.525509171962918800f, - 1.525261142156779900f, 1.525013056271149000f, 1.524764914315147200f, - 1.524516716297898300f, - 1.524268462228527900f, 1.524020152116163200f, 1.523771785969934000f, - 1.523523363798972000f, - 1.523274885612411200f, 1.523026351419387100f, 1.522777761229038100f, - 1.522529115050503600f, - 1.522280412892925900f, 1.522031654765448900f, 1.521782840677218700f, - 1.521533970637383800f, - 1.521285044655094300f, 1.521036062739502300f, 1.520787024899762100f, - 1.520537931145030400f, - 1.520288781484465700f, 1.520039575927228500f, 1.519790314482481100f, - 1.519540997159388300f, - 1.519291623967116600f, 1.519042194914835200f, 1.518792710011714500f, - 1.518543169266927600f, - 1.518293572689648900f, 1.518043920289055900f, 1.517794212074327500f, - 1.517544448054644500f, - 1.517294628239190400f, 1.517044752637150000f, 1.516794821257710500f, - 1.516544834110061600f, - 1.516294791203394200f, 1.516044692546901800f, 1.515794538149779700f, - 1.515544328021225500f, - 1.515294062170438700f, 1.515043740606620800f, 1.514793363338975600f, - 1.514542930376708600f, - 1.514292441729027300f, 1.514041897405141700f, 1.513791297414263800f, - 1.513540641765606800f, - 1.513289930468387300f, 1.513039163531823000f, 1.512788340965133500f, - 1.512537462777541200f, - 1.512286528978270300f, 1.512035539576546600f, 1.511784494581598600f, - 1.511533394002656100f, - 1.511282237848951400f, 1.511031026129719100f, 1.510779758854195400f, - 1.510528436031618900f, - 1.510277057671229400f, 1.510025623782270000f, 1.509774134373984800f, - 1.509522589455620600f, - 1.509270989036425800f, 1.509019333125651200f, 1.508767621732549400f, - 1.508515854866375100f, - 1.508264032536385000f, 1.508012154751837700f, 1.507760221521994700f, - 1.507508232856118200f, - 1.507256188763473200f, 1.507004089253327000f, 1.506751934334948000f, - 1.506499724017607900f, - 1.506247458310579400f, 1.505995137223137500f, 1.505742760764559300f, - 1.505490328944124200f, - 1.505237841771113200f, 1.504985299254809800f, 1.504732701404498900f, - 1.504480048229468000f, - 1.504227339739006500f, 1.503974575942405700f, 1.503721756848958700f, - 1.503468882467961600f, - 1.503215952808711500f, 1.502962967880507600f, 1.502709927692651900f, - 1.502456832254447600f, - 1.502203681575200700f, 1.501950475664218600f, 1.501697214530810700f, - 1.501443898184289200f, - 1.501190526633967600f, 1.500937099889161600f, 1.500683617959188900f, - 1.500430080853369500f, - 1.500176488581024900f, 1.499922841151479600f, 1.499669138574058800f, - 1.499415380858090800f, - 1.499161568012905300f, 1.498907700047834600f, 1.498653776972212600f, - 1.498399798795375000f, - 1.498145765526660300f, 1.497891677175408500f, 1.497637533750961300f, - 1.497383335262663300f, - 1.497129081719860400f, 1.496874773131900800f, 1.496620409508134800f, - 1.496365990857914600f, - 1.496111517190594300f, 1.495856988515530400f, 1.495602404842080800f, - 1.495347766179606400f, - 1.495093072537469100f, 1.494838323925033400f, 1.494583520351665500f, - 1.494328661826734200f, - 1.494073748359609600f, 1.493818779959664300f, 1.493563756636272500f, - 1.493308678398810800f, - 1.493053545256657800f, 1.492798357219194100f, 1.492543114295801900f, - 1.492287816495866200f, - 1.492032463828773200f, 1.491777056303911700f, 1.491521593930672100f, - 1.491266076718446900f, - 1.491010504676631500f, 1.490754877814621800f, 1.490499196141816600f, - 1.490243459667616600f, - 1.489987668401424800f, 1.489731822352645500f, 1.489475921530685900f, - 1.489219965944954300f, - 1.488963955604861500f, 1.488707890519820600f, 1.488451770699245900f, - 1.488195596152554800f, - 1.487939366889165600f, 1.487683082918499300f, 1.487426744249978400f, - 1.487170350893028500f, - 1.486913902857075700f, 1.486657400151549600f, 1.486400842785880100f, - 1.486144230769501000f, - 1.485887564111846500f, 1.485630842822354100f, 1.485374066910462500f, - 1.485117236385612200f, - 1.484860351257246500f, 1.484603411534810300f, 1.484346417227750700f, - 1.484089368345516300f, - 1.483832264897558400f, 1.483575106893329600f, 1.483317894342285100f, - 1.483060627253882000f, - 1.482803305637578900f, 1.482545929502837100f, 1.482288498859119400f, - 1.482031013715890700f, - 1.481773474082618300f, 1.481515879968770900f, 1.481258231383819800f, - 1.481000528337237800f, - 1.480742770838499900f, 1.480484958897083200f, 1.480227092522466500f, - 1.479969171724131200f, - 1.479711196511560100f, 1.479453166894238100f, 1.479195082881652200f, - 1.478936944483291600f, - 1.478678751708647000f, 1.478420504567211900f, 1.478162203068481100f, - 1.477903847221951400f, - 1.477645437037121900f, 1.477386972523493800f, 1.477128453690569800f, - 1.476869880547855300f, - 1.476611253104856700f, 1.476352571371083700f, 1.476093835356046700f, - 1.475835045069259000f, - 1.475576200520235500f, 1.475317301718493300f, 1.475058348673551100f, - 1.474799341394929900f, - 1.474540279892153000f, 1.474281164174744900f, 1.474021994252233000f, - 1.473762770134145800f, - 1.473503491830014300f, 1.473244159349371700f, 1.472984772701752900f, - 1.472725331896694400f, - 1.472465836943735600f, 1.472206287852416900f, 1.471946684632281500f, - 1.471687027292874400f, - 1.471427315843742100f, 1.471167550294433700f, 1.470907730654499800f, - 1.470647856933493300f, - 1.470387929140969200f, 1.470127947286484100f, 1.469867911379596900f, - 1.469607821429868500f, - 1.469347677446861500f, 1.469087479440140300f, 1.468827227419272200f, - 1.468566921393825700f, - 1.468306561373371900f, 1.468046147367482600f, 1.467785679385733300f, - 1.467525157437700200f, - 1.467264581532962100f, 1.467003951681099800f, 1.466743267891695800f, - 1.466482530174334500f, - 1.466221738538602500f, 1.465960892994088800f, 1.465699993550383400f, - 1.465439040217079400f, - 1.465178033003770700f, 1.464916971920054100f, 1.464655856975527900f, - 1.464394688179792900f, - 1.464133465542451200f, 1.463872189073107500f, 1.463610858781367900f, - 1.463349474676840700f, - 1.463088036769136600f, 1.462826545067867700f, 1.462564999582648600f, - 1.462303400323095000f, - 1.462041747298825900f, 1.461780040519460800f, 1.461518279994622200f, - 1.461256465733934400f, - 1.460994597747023600f, 1.460732676043517800f, 1.460470700633046800f, - 1.460208671525243400f, - 1.459946588729741100f, 1.459684452256176300f, 1.459422262114186800f, - 1.459160018313412400f, - 1.458897720863495500f, 1.458635369774079500f, 1.458372965054810700f, - 1.458110506715337000f, - 1.457847994765308200f, 1.457585429214375700f, 1.457322810072193800f, - 1.457060137348418000f, - 1.456797411052706200f, 1.456534631194717800f, 1.456271797784114900f, - 1.456008910830560500f, - 1.455745970343720800f, 1.455482976333263100f, 1.455219928808857200f, - 1.454956827780174100f, - 1.454693673256887600f, 1.454430465248673300f, 1.454167203765208000f, - 1.453903888816171900f, - 1.453640520411245900f, 1.453377098560113100f, 1.453113623272459100f, - 1.452850094557971000f, - 1.452586512426338000f, 1.452322876887251400f, 1.452059187950404100f, - 1.451795445625491300f, - 1.451531649922210200f, 1.451267800850259500f, 1.451003898419340500f, - 1.450739942639155800f, - 1.450475933519410400f, 1.450211871069811300f, 1.449947755300067500f, - 1.449683586219889400f, - 1.449419363838989800f, 1.449155088167083600f, 1.448890759213887100f, - 1.448626376989119400f, - 1.448361941502500900f, 1.448097452763754000f, 1.447832910782603100f, - 1.447568315568775100f, - 1.447303667131997900f, 1.447038965482002200f, 1.446774210628520200f, - 1.446509402581286400f, - 1.446244541350036700f, 1.445979626944509300f, 1.445714659374444500f, - 1.445449638649584500f, - 1.445184564779673500f, 1.444919437774456700f, 1.444654257643682900f, - 1.444389024397101600f, - 1.444123738044464900f, 1.443858398595526400f, 1.443593006060042100f, - 1.443327560447769600f, - 1.443062061768468400f, 1.442796510031900500f, 1.442530905247829200f, - 1.442265247426020200f, - 1.441999536576240800f, 1.441733772708260600f, 1.441467955831850800f, - 1.441202085956784900f, - 1.440936163092837900f, 1.440670187249787600f, 1.440404158437412500f, - 1.440138076665494100f, - 1.439871941943815300f, 1.439605754282161400f, 1.439339513690319100f, - 1.439073220178077400f, - 1.438806873755226900f, 1.438540474431560600f, 1.438274022216873500f, - 1.438007517120961900f, - 1.437740959153624500f, 1.437474348324662100f, 1.437207684643876800f, - 1.436940968121073600f, - 1.436674198766058500f, 1.436407376588640000f, 1.436140501598628400f, - 1.435873573805835900f, - 1.435606593220076600f, 1.435339559851166500f, 1.435072473708924000f, - 1.434805334803169100f, - 1.434538143143723200f, 1.434270898740410700f, 1.434003601603057300f, - 1.433736251741490700f, - 1.433468849165540500f, 1.433201393885038500f, 1.432933885909818000f, - 1.432666325249714700f, - 1.432398711914566200f, 1.432131045914211600f, 1.431863327258492400f, - 1.431595555957251700f, - 1.431327732020334800f, 1.431059855457588600f, 1.430791926278862400f, - 1.430523944494007400f, - 1.430255910112876000f, 1.429987823145323100f, 1.429719683601205800f, - 1.429451491490382900f, - 1.429183246822714800f, 1.428914949608064200f, 1.428646599856295400f, - 1.428378197577275100f, - 1.428109742780871800f, 1.427841235476955400f, 1.427572675675398600f, - 1.427304063386075200f, - 1.427035398618861500f, 1.426766681383635500f, 1.426497911690277000f, - 1.426229089548668200f, - 1.425960214968693000f, 1.425691287960236600f, 1.425422308533187200f, - 1.425153276697434000f, - 1.424884192462868800f, 1.424615055839385300f, 1.424345866836878200f, - 1.424076625465245500f, - 1.423807331734385800f, 1.423537985654200800f, 1.423268587234593400f, - 1.422999136485468600f, - 1.422729633416733200f, 1.422460078038296300f, 1.422190470360068300f, - 1.421920810391962500f, - 1.421651098143893000f, 1.421381333625776600f, 1.421111516847531700f, - 1.420841647819078600f, - 1.420571726550339700f, 1.420301753051239400f, 1.420031727331703800f, - 1.419761649401660500f, - 1.419491519271040000f, 1.419221336949774100f, 1.418951102447796800f, - 1.418680815775043500f, - 1.418410476941452100f, 1.418140085956961900f, 1.417869642831514700f, - 1.417599147575054000f, - 1.417328600197524900f, 1.417058000708874700f, 1.416787349119052600f, - 1.416516645438009600f, - 1.416245889675698900f, 1.415975081842075300f, 1.415704221947095700f, - 1.415433310000718600f, - 1.415162346012905000f, 1.414891329993617200f, 1.414620261952819600f, - 1.414349141900479000f, - 1.414077969846563500f, 1.413806745801043500f, 1.413535469773890700f, - 1.413264141775079300f, - 1.412992761814585400f, 1.412721329902386900f, 1.412449846048463600f, - 1.412178310262796900f, - 1.411906722555370500f, 1.411635082936170100f, 1.411363391415182900f, - 1.411091648002398500f, - 1.410819852707807700f, 1.410548005541404100f, 1.410276106513182400f, - 1.410004155633139500f, - 1.409732152911274500f, 1.409460098357588200f, 1.409187991982083100f, - 1.408915833794763800f, - 1.408643623805636800f, 1.408371362024710500f, 1.408099048461995300f, - 1.407826683127503000f, - 1.407554266031248100f, 1.407281797183246500f, 1.407009276593515800f, - 1.406736704272076400f, - 1.406464080228949600f, 1.406191404474159000f, 1.405918677017730100f, - 1.405645897869690400f, - 1.405373067040069300f, 1.405100184538898000f, 1.404827250376209400f, - 1.404554264562038400f, - 1.404281227106422400f, 1.404008138019399800f, 1.403734997311011600f, - 1.403461804991300100f, - 1.403188561070310100f, 1.402915265558087700f, 1.402641918464681400f, - 1.402368519800141200f, - 1.402095069574519800f, 1.401821567797870300f, 1.401548014480249000f, - 1.401274409631713600f, - 1.401000753262323900f, 1.400727045382141400f, 1.400453286001229800f, - 1.400179475129653700f, - 1.399905612777481200f, 1.399631698954780800f, 1.399357733671623900f, - 1.399083716938083600f, - 1.398809648764234100f, 1.398535529160152400f, 1.398261358135917300f, - 1.397987135701609200f, - 1.397712861867310300f, 1.397438536643105000f, 1.397164160039079200f, - 1.396889732065321300f, - 1.396615252731921100f, 1.396340722048970300f, 1.396066140026562800f, - 1.395791506674794100f, - 1.395516822003761700f, 1.395242086023564800f, 1.394967298744304900f, - 1.394692460176085300f, - 1.394417570329010700f, 1.394142629213188000f, 1.393867636838725900f, - 1.393592593215735600f, - 1.393317498354329300f, 1.393042352264621600f, 1.392767154956728400f, - 1.392491906440768600f, - 1.392216606726861800f, 1.391941255825130100f, 1.391665853745697400f, - 1.391390400498689700f, - 1.391114896094234100f, 1.390839340542460600f, 1.390563733853500200f, - 1.390288076037486500f, - 1.390012367104554600f, 1.389736607064841100f, 1.389460795928485500f, - 1.389184933705628300f, - 1.388909020406412100f, 1.388633056040981600f, 1.388357040619483200f, - 1.388080974152065200f, - 1.387804856648877600f, 1.387528688120072600f, 1.387252468575804100f, - 1.386976198026228100f, - 1.386699876481501900f, 1.386423503951785200f, 1.386147080447239600f, - 1.385870605978028100f, - 1.385594080554316100f, 1.385317504186270900f, 1.385040876884061000f, - 1.384764198657857200f, - 1.384487469517832200f, 1.384210689474160600f, 1.383933858537019100f, - 1.383656976716585600f, - 1.383380044023040400f, 1.383103060466565300f, 1.382826026057344600f, - 1.382548940805563800f, - 1.382271804721410600f, 1.381994617815074400f, 1.381717380096746800f, - 1.381440091576620700f, - 1.381162752264891500f, 1.380885362171756300f, 1.380607921307413400f, - 1.380330429682064000f, - 1.380052887305910400f, 1.379775294189157000f, 1.379497650342010400f, - 1.379219955774678700f, - 1.378942210497371600f, 1.378664414520301500f, 1.378386567853681700f, - 1.378108670507728300f, - 1.377830722492658500f, 1.377552723818691500f, 1.377274674496048700f, - 1.376996574534953300f, - 1.376718423945630000f, 1.376440222738305700f, 1.376161970923209400f, - 1.375883668510570900f, - 1.375605315510623200f, 1.375326911933600200f, 1.375048457789738400f, - 1.374769953089275400f, - 1.374491397842451100f, 1.374212792059507100f, 1.373934135750687100f, - 1.373655428926236400f, - 1.373376671596402400f, 1.373097863771434200f, 1.372819005461582500f, - 1.372540096677100200f, - 1.372261137428242300f, 1.371982127725264800f, 1.371703067578426700f, - 1.371423956997988000f, - 1.371144795994210500f, 1.370865584577358300f, 1.370586322757697500f, - 1.370307010545495500f, - 1.370027647951022100f, 1.369748234984548000f, 1.369468771656347200f, - 1.369189257976694200f, - 1.368909693955866000f, 1.368630079604142000f, 1.368350414931802000f, - 1.368070699949128800f, - 1.367790934666406600f, 1.367511119093921800f, 1.367231253241962200f, - 1.366951337120818000f, - 1.366671370740780500f, 1.366391354112143500f, 1.366111287245202400f, - 1.365831170150254300f, - 1.365551002837598600f, 1.365270785317536100f, 1.364990517600369400f, - 1.364710199696403300f, - 1.364429831615944200f, 1.364149413369300600f, 1.363868944966782900f, - 1.363588426418702600f, - 1.363307857735373900f, 1.363027238927112300f, 1.362746570004235400f, - 1.362465850977062900f, - 1.362185081855915600f, 1.361904262651116900f, 1.361623393372991300f, - 1.361342474031866000f, - 1.361061504638069400f, 1.360780485201932300f, 1.360499415733786400f, - 1.360218296243966200f, - 1.359937126742807300f, 1.359655907240648000f, 1.359374637747827700f, - 1.359093318274687800f, - 1.358811948831571500f, 1.358530529428824400f, 1.358249060076792900f, - 1.357967540785826300f, - 1.357685971566275200f, 1.357404352428492000f, 1.357122683382830900f, - 1.356840964439648200f, - 1.356559195609301700f, 1.356277376902151900f, 1.355995508328559500f, - 1.355713589898888800f, - 1.355431621623504700f, 1.355149603512774400f, 1.354867535577067200f, - 1.354585417826753800f, - 1.354303250272206500f, 1.354021032923800300f, 1.353738765791911100f, - 1.353456448886917200f, - 1.353174082219199100f, 1.352891665799137900f, 1.352609199637117500f, - 1.352326683743523300f, - 1.352044118128742600f, 1.351761502803164900f, 1.351478837777180700f, - 1.351196123061183100f, - 1.350913358665566400f, 1.350630544600727200f, 1.350347680877063800f, - 1.350064767504976400f, - 1.349781804494866600f, 1.349498791857138400f, 1.349215729602197400f, - 1.348932617740450600f, - 1.348649456282307700f, 1.348366245238179500f, 1.348082984618478800f, - 1.347799674433620500f, - 1.347516314694020800f, 1.347232905410098200f, 1.346949446592273100f, - 1.346665938250967100f, - 1.346382380396604000f, 1.346098773039609700f, 1.345815116190411300f, - 1.345531409859438200f, - 1.345247654057121700f, 1.344963848793894200f, 1.344679994080190800f, - 1.344396089926448000f, - 1.344112136343103900f, 1.343828133340598800f, 1.343544080929374800f, - 1.343259979119875600f, - 1.342975827922546600f, 1.342691627347835500f, 1.342407377406191500f, - 1.342123078108065700f, - 1.341838729463910900f, 1.341554331484181600f, 1.341269884179334700f, - 1.340985387559828100f, - 1.340700841636122400f, 1.340416246418678800f, 1.340131601917961900f, - 1.339846908144436600f, - 1.339562165108570700f, 1.339277372820833400f, 1.338992531291695500f, - 1.338707640531629800f, - 1.338422700551110900f, 1.338137711360615200f, 1.337852672970621300f, - 1.337567585391608900f, - 1.337282448634059800f, 1.336997262708457900f, 1.336712027625288600f, - 1.336426743395039000f, - 1.336141410028198500f, 1.335856027535258000f, 1.335570595926709700f, - 1.335285115213048500f, - 1.334999585404770700f, 1.334714006512374400f, 1.334428378546359500f, - 1.334142701517227600f, - 1.333856975435482300f, 1.333571200311629100f, 1.333285376156174700f, - 1.332999502979628700f, - 1.332713580792501500f, 1.332427609605305400f, 1.332141589428554900f, - 1.331855520272766200f, - 1.331569402148457400f, 1.331283235066148100f, 1.330997019036359800f, - 1.330710754069615700f, - 1.330424440176441300f, 1.330138077367363200f, 1.329851665652910500f, - 1.329565205043613800f, - 1.329278695550004700f, 1.328992137182618100f, 1.328705529951989400f, - 1.328418873868656900f, - 1.328132168943159800f, 1.327845415186039000f, 1.327558612607838500f, - 1.327271761219102500f, - 1.326984861030378000f, 1.326697912052213500f, 1.326410914295159400f, - 1.326123867769767500f, - 1.325836772486591800f, 1.325549628456188100f, 1.325262435689113600f, - 1.324975194195928000f, - 1.324687903987191900f, 1.324400565073468300f, 1.324113177465321900f, - 1.323825741173318700f, - 1.323538256208027800f, 1.323250722580018500f, 1.322963140299862500f, - 1.322675509378133900f, - 1.322387829825407700f, 1.322100101652261100f, 1.321812324869273500f, - 1.321524499487024800f, - 1.321236625516098100f, 1.320948702967077400f, 1.320660731850549000f, - 1.320372712177100700f, - 1.320084643957322400f, 1.319796527201805300f, 1.319508361921142500f, - 1.319220148125929100f, - 1.318931885826762000f, 1.318643575034239800f, 1.318355215758962900f, - 1.318066808011533200f, - 1.317778351802554800f, 1.317489847142633300f, 1.317201294042376300f, - 1.316912692512393300f, - 1.316624042563294900f, 1.316335344205694200f, 1.316046597450205800f, - 1.315757802307445900f, - 1.315468958788033000f, 1.315180066902586800f, 1.314891126661728900f, - 1.314602138076083300f, - 1.314313101156274800f, 1.314024015912930600f, 1.313734882356679900f, - 1.313445700498152800f, - 1.313156470347981900f, 1.312867191916801100f, 1.312577865215246900f, - 1.312288490253956900f, - 1.311999067043570200f, 1.311709595594728000f, 1.311420075918073900f, - 1.311130508024252400f, - 1.310840891923910100f, 1.310551227627695400f, 1.310261515146258200f, - 1.309971754490250700f, - 1.309681945670326400f, 1.309392088697140900f, 1.309102183581351200f, - 1.308812230333616500f, - 1.308522228964597500f, 1.308232179484956500f, 1.307942081905358000f, - 1.307651936236467800f, - 1.307361742488954300f, 1.307071500673486800f, 1.306781210800736200f, - 1.306490872881376200f, - 1.306200486926081700f, 1.305910052945529200f, 1.305619570950396800f, - 1.305329040951365100f, - 1.305038462959116100f, 1.304747836984333300f, 1.304457163037702200f, - 1.304166441129910300f, - 1.303875671271646400f, 1.303584853473601200f, 1.303293987746467300f, - 1.303003074100939100f, - 1.302712112547712800f, 1.302421103097485900f, 1.302130045760958100f, - 1.301838940548830600f, - 1.301547787471806900f, 1.301256586540591600f, 1.300965337765891600f, - 1.300674041158414800f, - 1.300382696728871400f, 1.300091304487973800f, 1.299799864446435200f, - 1.299508376614971500f, - 1.299216841004299200f, 1.298925257625137800f, 1.298633626488207500f, - 1.298341947604231300f, - 1.298050220983932900f, 1.297758446638038700f, 1.297466624577275900f, - 1.297174754812374400f, - 1.296882837354065100f, 1.296590872213081200f, 1.296298859400157700f, - 1.296006798926030200f, - 1.295714690801437600f, 1.295422535037119800f, 1.295130331643818500f, - 1.294838080632277000f, - 1.294545782013240900f, 1.294253435797456900f, 1.293961041995673700f, - 1.293668600618642000f, - 1.293376111677113900f, 1.293083575181843500f, 1.292790991143586200f, - 1.292498359573099700f, - 1.292205680481143500f, 1.291912953878477900f, 1.291620179775866400f, - 1.291327358184073200f, - 1.291034489113864100f, 1.290741572576007400f, 1.290448608581273000f, - 1.290155597140431700f, - 1.289862538264257700f, 1.289569431963524900f, 1.289276278249010600f, - 1.288983077131493000f, - 1.288689828621752300f, 1.288396532730570400f, 1.288103189468731400f, - 1.287809798847019800f, - 1.287516360876223500f, 1.287222875567130900f, 1.286929342930532800f, - 1.286635762977221800f, - 1.286342135717991600f, 1.286048461163638000f, 1.285754739324958900f, - 1.285460970212753500f, - 1.285167153837822900f, 1.284873290210969900f, 1.284579379342998700f, - 1.284285421244715900f, - 1.283991415926929400f, 1.283697363400448900f, 1.283403263676086100f, - 1.283109116764654000f, - 1.282814922676967400f, 1.282520681423843000f, 1.282226393016099500f, - 1.281932057464557000f, - 1.281637674780037100f, 1.281343244973363700f, 1.281048768055361900f, - 1.280754244036858900f, - 1.280459672928683500f, 1.280165054741666300f, 1.279870389486639400f, - 1.279575677174437100f, - 1.279280917815894600f, 1.278986111421849900f, 1.278691258003142000f, - 1.278396357570611900f, - 1.278101410135101800f, 1.277806415707456700f, 1.277511374298522200f, - 1.277216285919146500f, - 1.276921150580179200f, 1.276625968292471000f, 1.276330739066875400f, - 1.276035462914247000f, - 1.275740139845442400f, 1.275444769871319600f, 1.275149353002738700f, - 1.274853889250561200f, - 1.274558378625650200f, 1.274262821138871300f, 1.273967216801090900f, - 1.273671565623178100f, - 1.273375867616002300f, 1.273080122790436000f, 1.272784331157352800f, - 1.272488492727628100f, - 1.272192607512139300f, 1.271896675521764900f, 1.271600696767385400f, - 1.271304671259883200f, - 1.271008599010142500f, 1.270712480029048800f, 1.270416314327489800f, - 1.270120101916354600f, - 1.269823842806533800f, 1.269527537008920300f, 1.269231184534408200f, - 1.268934785393893700f, - 1.268638339598274500f, 1.268341847158450200f, 1.268045308085321800f, - 1.267748722389792100f, - 1.267452090082765900f, 1.267155411175149500f, 1.266858685677851000f, - 1.266561913601780100f, - 1.266265094957848000f, 1.265968229756968100f, 1.265671318010055400f, - 1.265374359728026500f, - 1.265077354921799300f, 1.264780303602294200f, 1.264483205780432700f, - 1.264186061467138500f, - 1.263888870673336400f, 1.263591633409954000f, 1.263294349687918800f, - 1.262997019518161700f, - 1.262699642911614600f, 1.262402219879211300f, 1.262104750431887000f, - 1.261807234580578900f, - 1.261509672336225600f, 1.261212063709767900f, 1.260914408712147800f, - 1.260616707354309500f, - 1.260318959647198400f, 1.260021165601761900f, 1.259723325228949000f, - 1.259425438539710300f, - 1.259127505544998600f, 1.258829526255768000f, 1.258531500682973800f, - 1.258233428837574300f, - 1.257935310730528000f, 1.257637146372796400f, 1.257338935775342200f, - 1.257040678949129500f, - 1.256742375905124400f, 1.256444026654294400f, 1.256145631207609400f, - 1.255847189576040100f, - 1.255548701770560000f, 1.255250167802143000f, 1.254951587681765600f, - 1.254652961420405600f, - 1.254354289029042900f, 1.254055570518658500f, 1.253756805900235700f, - 1.253457995184759300f, - 1.253159138383215200f, 1.252860235506592100f, 1.252561286565879300f, - 1.252262291572068900f, - 1.251963250536153500f, 1.251664163469128300f, 1.251365030381989700f, - 1.251065851285736200f, - 1.250766626191367500f, 1.250467355109885500f, 1.250168038052293500f, - 1.249868675029596200f, - 1.249569266052800800f, 1.249269811132915200f, 1.248970310280950200f, - 1.248670763507917100f, - 1.248371170824829300f, 1.248071532242702100f, 1.247771847772552300f, - 1.247472117425398700f, - 1.247172341212261500f, 1.246872519144162300f, 1.246572651232124700f, - 1.246272737487174300f, - 1.245972777920338000f, 1.245672772542644400f, 1.245372721365123600f, - 1.245072624398807900f, - 1.244772481654731000f, 1.244472293143928300f, 1.244172058877436800f, - 1.243871778866295400f, - 1.243571453121544000f, 1.243271081654225400f, 1.242970664475383100f, - 1.242670201596062700f, - 1.242369693027311200f, 1.242069138780177400f, 1.241768538865712000f, - 1.241467893294967200f, - 1.241167202078996800f, 1.240866465228856100f, 1.240565682755603100f, - 1.240264854670295900f, - 1.239963980983995300f, 1.239663061707763700f, 1.239362096852665300f, - 1.239061086429765300f, - 1.238760030450130900f, 1.238458928924831600f, 1.238157781864937400f, - 1.237856589281521000f, - 1.237555351185656500f, 1.237254067588419400f, 1.236952738500886900f, - 1.236651363934138300f, - 1.236349943899254000f, 1.236048478407316500f, 1.235746967469409900f, - 1.235445411096619500f, - 1.235143809300033300f, 1.234842162090739700f, 1.234540469479829900f, - 1.234238731478396000f, - 1.233936948097532400f, 1.233635119348334400f, 1.233333245241899200f, - 1.233031325789326400f, - 1.232729361001716500f, 1.232427350890172000f, 1.232125295465796600f, - 1.231823194739696300f, - 1.231521048722978200f, 1.231218857426751700f, 1.230916620862127400f, - 1.230614339040217800f, - 1.230312011972136500f, 1.230009639668999500f, 1.229707222141924100f, - 1.229404759402029400f, - 1.229102251460436400f, 1.228799698328266700f, 1.228497100016644900f, - 1.228194456536696500f, - 1.227891767899548700f, 1.227589034116330700f, 1.227286255198173100f, - 1.226983431156208200f, - 1.226680562001569900f, 1.226377647745394000f, 1.226074688398817600f, - 1.225771683972980200f, - 1.225468634479021500f, 1.225165539928084300f, 1.224862400331312400f, - 1.224559215699851500f, - 1.224255986044848500f, 1.223952711377453100f, 1.223649391708814700f, - 1.223346027050086400f, - 1.223042617412421600f, 1.222739162806975900f, 1.222435663244906700f, - 1.222132118737372400f, - 1.221828529295533800f, 1.221524894930552800f, 1.221221215653593100f, - 1.220917491475820500f, - 1.220613722408401900f, 1.220309908462505800f, 1.220006049649302800f, - 1.219702145979964600f, - 1.219398197465665400f, 1.219094204117580300f, 1.218790165946886100f, - 1.218486082964761500f, - 1.218181955182386500f, 1.217877782610943700f, 1.217573565261616000f, - 1.217269303145589000f, - 1.216964996274049400f, 1.216660644658185600f, 1.216356248309187600f, - 1.216051807238247800f, - 1.215747321456559300f, 1.215442790975316700f, 1.215138215805717300f, - 1.214833595958959300f, - 1.214528931446242600f, 1.214224222278769100f, 1.213919468467741900f, - 1.213614670024366000f, - 1.213309826959847700f, 1.213004939285395400f, 1.212700007012219100f, - 1.212395030151530300f, - 1.212090008714541600f, 1.211784942712468300f, 1.211479832156526800f, - 1.211174677057934800f, - 1.210869477427912300f, 1.210564233277680500f, 1.210258944618462200f, - 1.209953611461482200f, - 1.209648233817966600f, 1.209342811699143600f, 1.209037345116242400f, - 1.208731834080493800f, - 1.208426278603131200f, 1.208120678695388600f, 1.207815034368502100f, - 1.207509345633709600f, - 1.207203612502250300f, 1.206897834985365000f, 1.206592013094296200f, - 1.206286146840288300f, - 1.205980236234587100f, 1.205674281288440000f, 1.205368282013096200f, - 1.205062238419806200f, - 1.204756150519822300f, 1.204450018324398900f, 1.204143841844791200f, - 1.203837621092256800f, - 1.203531356078054100f, 1.203225046813444000f, 1.202918693309688300f, - 1.202612295578050900f, - 1.202305853629797500f, 1.201999367476194400f, 1.201692837128510700f, - 1.201386262598016500f, - 1.201079643895983700f, 1.200772981033685800f, 1.200466274022397900f, - 1.200159522873396800f, - 1.199852727597960700f, 1.199545888207369700f, 1.199239004712905300f, - 1.198932077125851100f, - 1.198625105457491700f, 1.198318089719113200f, 1.198011029922004400f, - 1.197703926077454200f, - 1.197396778196754700f, 1.197089586291198500f, 1.196782350372080300f, - 1.196475070450696100f, - 1.196167746538343600f, 1.195860378646322700f, 1.195552966785933900f, - 1.195245510968480300f, - 1.194938011205265900f, 1.194630467507596500f, 1.194322879886780000f, - 1.194015248354125100f, - 1.193707572920943000f, 1.193399853598545500f, 1.193092090398246900f, - 1.192784283331362700f, - 1.192476432409210100f, 1.192168537643107900f, 1.191860599044376500f, - 1.191552616624337800f, - 1.191244590394315400f, 1.190936520365635000f, 1.190628406549622900f, - 1.190320248957608100f, - 1.190012047600920200f, 1.189703802490891000f, 1.189395513638853900f, - 1.189087181056143900f, - 1.188778804754097300f, 1.188470384744052100f, 1.188161921037348400f, - 1.187853413645327100f, - 1.187544862579331500f, 1.187236267850706000f, 1.186927629470796900f, - 1.186618947450951600f, - 1.186310221802519900f, 1.186001452536852300f, 1.185692639665301600f, - 1.185383783199222000f, - 1.185074883149969100f, 1.184765939528900500f, 1.184456952347374900f, - 1.184147921616753200f, - 1.183838847348397400f, 1.183529729553671500f, 1.183220568243940300f, - 1.182911363430571200f, - 1.182602115124932900f, 1.182292823338395100f, 1.181983488082330300f, - 1.181674109368111300f, - 1.181364687207113100f, 1.181055221610712400f, 1.180745712590287400f, - 1.180436160157217800f, - 1.180126564322885100f, 1.179816925098671900f, 1.179507242495962900f, - 1.179197516526144600f, - 1.178887747200604300f, 1.178577934530731700f, 1.178268078527917200f, - 1.177958179203553800f, - 1.177648236569035300f, 1.177338250635757700f, 1.177028221415118200f, - 1.176718148918515700f, - 1.176408033157350300f, 1.176097874143024600f, 1.175787671886942000f, - 1.175477426400507700f, - 1.175167137695128900f, 1.174856805782213500f, 1.174546430673171900f, - 1.174236012379415600f, - 1.173925550912357800f, 1.173615046283413200f, 1.173304498503998400f, - 1.172993907585530900f, - 1.172683273539430800f, 1.172372596377118800f, 1.172061876110017700f, - 1.171751112749551900f, - 1.171440306307147200f, 1.171129456794231200f, 1.170818564222232800f, - 1.170507628602582800f, - 1.170196649946713100f, 1.169885628266057900f, 1.169574563572052300f, - 1.169263455876133200f, - 1.168952305189739200f, 1.168641111524310700f, 1.168329874891289400f, - 1.168018595302118000f, - 1.167707272768241800f, 1.167395907301107100f, 1.167084498912162300f, - 1.166773047612856400f, - 1.166461553414641000f, 1.166150016328968600f, 1.165838436367293800f, - 1.165526813541072100f, - 1.165215147861761400f, 1.164903439340820900f, 1.164591687989710500f, - 1.164279893819892800f, - 1.163968056842831700f, 1.163656177069992500f, 1.163344254512841800f, - 1.163032289182848800f, - 1.162720281091483000f, 1.162408230250216100f, 1.162096136670521600f, - 1.161784000363874000f, - 1.161471821341749900f, 1.161159599615627000f, 1.160847335196984800f, - 1.160535028097304600f, - 1.160222678328068700f, 1.159910285900761700f, 1.159597850826869200f, - 1.159285373117878500f, - 1.158972852785278500f, 1.158660289840559800f, 1.158347684295214300f, - 1.158035036160735900f, - 1.157722345448619400f, 1.157409612170361600f, 1.157096836337461000f, - 1.156784017961417500f, - 1.156471157053732300f, 1.156158253625908700f, 1.155845307689450800f, - 1.155532319255865300f, - 1.155219288336659400f, 1.154906214943342700f, 1.154593099087426000f, - 1.154279940780421400f, - 1.153966740033842900f, 1.153653496859206000f, 1.153340211268028000f, - 1.153026883271827300f, - 1.152713512882124400f, 1.152400100110440700f, 1.152086644968299400f, - 1.151773147467225300f, - 1.151459607618745300f, 1.151146025434387000f, 1.150832400925680100f, - 1.150518734104155400f, - 1.150205024981345800f, 1.149891273568785400f, 1.149577479878009800f, - 1.149263643920556800f, - 1.148949765707964600f, 1.148635845251773800f, 1.148321882563526400f, - 1.148007877654766200f, - 1.147693830537038100f, 1.147379741221888500f, 1.147065609720865600f, - 1.146751436045519300f, - 1.146437220207400700f, 1.146122962218062600f, 1.145808662089060000f, - 1.145494319831947800f, - 1.145179935458284100f, 1.144865508979627800f, 1.144551040407539400f, - 1.144236529753581000f, - 1.143921977029316500f, 1.143607382246310600f, 1.143292745416130600f, - 1.142978066550344400f, - 1.142663345660522000f, 1.142348582758234900f, 1.142033777855056000f, - 1.141718930962559500f, - 1.141404042092321500f, 1.141089111255919800f, 1.140774138464933700f, - 1.140459123730943200f, - 1.140144067065530700f, 1.139828968480280300f, 1.139513827986776900f, - 1.139198645596607400f, - 1.138883421321360600f, 1.138568155172625700f, 1.138252847161994400f, - 1.137937497301059600f, - 1.137622105601416000f, 1.137306672074659900f, 1.136991196732388200f, - 1.136675679586200500f, - 1.136360120647697200f, 1.136044519928480800f, 1.135728877440154800f, - 1.135413193194324800f, - 1.135097467202597100f, 1.134781699476580300f, 1.134465890027884300f, - 1.134150038868120500f, - 1.133834146008902100f, 1.133518211461843200f, 1.133202235238559800f, - 1.132886217350669500f, - 1.132570157809791500f, 1.132254056627546300f, 1.131937913815556300f, - 1.131621729385444900f, - 1.131305503348837300f, 1.130989235717360100f, 1.130672926502642100f, - 1.130356575716312500f, - 1.130040183370002900f, 1.129723749475346000f, 1.129407274043976200f, - 1.129090757087529500f, - 1.128774198617643200f, 1.128457598645956600f, 1.128140957184109700f, - 1.127824274243744500f, - 1.127507549836505000f, 1.127190783974035800f, 1.126873976667983800f, - 1.126557127929996800f, - 1.126240237771724700f, 1.125923306204818400f, 1.125606333240930700f, - 1.125289318891715900f, - 1.124972263168829500f, 1.124655166083928800f, 1.124338027648672500f, - 1.124020847874721100f, - 1.123703626773736100f, 1.123386364357381200f, 1.123069060637320600f, - 1.122751715625221400f, - 1.122434329332750800f, 1.122116901771578400f, 1.121799432953375600f, - 1.121481922889814300f, - 1.121164371592568300f, 1.120846779073313400f, 1.120529145343726500f, - 1.120211470415486200f, - 1.119893754300272300f, 1.119575997009766300f, 1.119258198555651300f, - 1.118940358949611900f, - 1.118622478203333800f, 1.118304556328505200f, 1.117986593336814700f, - 1.117668589239953200f, - 1.117350544049612300f, 1.117032457777486200f, 1.116714330435269600f, - 1.116396162034659600f, - 1.116077952587353600f, 1.115759702105052000f, 1.115441410599455500f, - 1.115123078082267000f, - 1.114804704565190500f, 1.114486290059931900f, 1.114167834578198200f, - 1.113849338131698300f, - 1.113530800732142100f, 1.113212222391241500f, 1.112893603120710000f, - 1.112574942932261600f, - 1.112256241837613000f, 1.111937499848481900f, 1.111618716976587700f, - 1.111299893233650600f, - 1.110981028631393700f, 1.110662123181539900f, 1.110343176895814500f, - 1.110024189785944900f, - 1.109705161863658600f, 1.109386093140686000f, 1.109066983628758100f, - 1.108747833339607200f, - 1.108428642284968100f, 1.108109410476576300f, 1.107790137926169200f, - 1.107470824645485600f, - 1.107151470646265300f, 1.106832075940250600f, 1.106512640539184100f, - 1.106193164454811100f, - 1.105873647698877300f, 1.105554090283131100f, 1.105234492219321100f, - 1.104914853519198400f, - 1.104595174194514800f, 1.104275454257024300f, 1.103955693718482200f, - 1.103635892590644900f, - 1.103316050885270600f, 1.102996168614119000f, 1.102676245788951400f, - 1.102356282421530300f, - 1.102036278523620000f, 1.101716234106985700f, 1.101396149183395000f, - 1.101076023764616400f, - 1.100755857862419700f, 1.100435651488577100f, 1.100115404654861100f, - 1.099795117373046200f, - 1.099474789654909100f, 1.099154421512226600f, 1.098834012956778200f, - 1.098513564000344300f, - 1.098193074654706800f, 1.097872544931649100f, 1.097551974842956500f, - 1.097231364400415000f, - 1.096910713615813200f, 1.096590022500939700f, 1.096269291067585700f, - 1.095948519327543800f, - 1.095627707292607700f, 1.095306854974572800f, 1.094985962385235800f, - 1.094665029536395100f, - 1.094344056439850600f, 1.094023043107403200f, 1.093701989550856000f, - 1.093380895782013000f, - 1.093059761812680100f, 1.092738587654664300f, 1.092417373319774200f, - 1.092096118819820200f, - 1.091774824166613600f, 1.091453489371968100f, 1.091132114447697300f, - 1.090810699405617900f, - 1.090489244257547300f, 1.090167749015304300f, 1.089846213690709900f, - 1.089524638295585400f, - 1.089203022841754400f, 1.088881367341041800f, 1.088559671805274100f, - 1.088237936246279100f, - 1.087916160675885800f, 1.087594345105925300f, 1.087272489548229700f, - 1.086950594014632700f, - 1.086628658516969500f, 1.086306683067076900f, 1.085984667676792600f, - 1.085662612357956500f, - 1.085340517122409800f, 1.085018381981994500f, 1.084696206948555300f, - 1.084373992033937000f, - 1.084051737249986900f, 1.083729442608553300f, 1.083407108121486000f, - 1.083084733800636200f, - 1.082762319657857100f, 1.082439865705002500f, 1.082117371953928300f, - 1.081794838416491700f, - 1.081472265104551200f, 1.081149652029967000f, 1.080826999204601100f, - 1.080504306640315500f, - 1.080181574348975500f, 1.079858802342446900f, 1.079535990632596800f, - 1.079213139231294500f, - 1.078890248150409700f, 1.078567317401815100f, 1.078244346997383300f, - 1.077921336948988600f, - 1.077598287268508400f, 1.077275197967819000f, 1.076952069058800400f, - 1.076628900553332700f, - 1.076305692463297900f, 1.075982444800579700f, 1.075659157577062200f, - 1.075335830804633000f, - 1.075012464495178800f, 1.074689058660589700f, 1.074365613312755900f, - 1.074042128463569500f, - 1.073718604124924500f, 1.073395040308715400f, 1.073071437026839500f, - 1.072747794291194300f, - 1.072424112113678600f, 1.072100390506194500f, 1.071776629480643500f, - 1.071452829048929800f, - 1.071128989222958500f, 1.070805110014635900f, 1.070481191435870500f, - 1.070157233498571600f, - 1.069833236214650800f, 1.069509199596019800f, 1.069185123654592600f, - 1.068861008402285200f, - 1.068536853851013600f, 1.068212660012696700f, 1.067888426899253500f, - 1.067564154522606000f, - 1.067239842894676100f, 1.066915492027387600f, 1.066591101932666800f, - 1.066266672622439700f, - 1.065942204108635300f, 1.065617696403183400f, 1.065293149518014500f, - 1.064968563465062100f, - 1.064643938256259400f, 1.064319273903543000f, 1.063994570418849400f, - 1.063669827814116300f, - 1.063345046101285000f, 1.063020225292295300f, 1.062695365399091200f, - 1.062370466433616400f, - 1.062045528407815900f, 1.061720551333637600f, 1.061395535223029500f, - 1.061070480087941800f, - 1.060745385940325500f, 1.060420252792134000f, 1.060095080655320900f, - 1.059769869541841800f, - 1.059444619463654400f, 1.059119330432716700f, 1.058794002460989000f, - 1.058468635560432500f, - 1.058143229743009600f, 1.057817785020685100f, 1.057492301405424500f, - 1.057166778909195000f, - 1.056841217543965200f, 1.056515617321704500f, 1.056189978254385100f, - 1.055864300353978900f, - 1.055538583632461100f, 1.055212828101807200f, 1.054887033773993300f, - 1.054561200660999200f, - 1.054235328774803900f, 1.053909418127389400f, 1.053583468730738200f, - 1.053257480596834700f, - 1.052931453737664600f, 1.052605388165214700f, 1.052279283891473600f, - 1.051953140928431100f, - 1.051626959288079100f, 1.051300738982409800f, 1.050974480023417500f, - 1.050648182423098000f, - 1.050321846193448000f, 1.049995471346466300f, 1.049669057894152800f, - 1.049342605848508200f, - 1.049016115221536000f, 1.048689586025239700f, 1.048363018271625300f, - 1.048036411972699500f, - 1.047709767140470500f, 1.047383083786948700f, 1.047056361924144400f, - 1.046729601564071200f, - 1.046402802718742400f, 1.046075965400174300f, 1.045749089620383200f, - 1.045422175391386800f, - 1.045095222725206200f, 1.044768231633861100f, 1.044441202129375200f, - 1.044114134223771900f, - 1.043787027929076000f, 1.043459883257315400f, 1.043132700220517300f, - 1.042805478830712200f, - 1.042478219099930400f, 1.042150921040204200f, 1.041823584663568200f, - 1.041496209982056600f, - 1.041168797007707000f, 1.040841345752557200f, 1.040513856228645800f, - 1.040186328448014800f, - 1.039858762422705600f, 1.039531158164762400f, 1.039203515686230000f, - 1.038875834999155100f, - 1.038548116115585800f, 1.038220359047570500f, 1.037892563807160800f, - 1.037564730406408200f, - 1.037236858857366600f, 1.036908949172090900f, 1.036581001362636600f, - 1.036253015441062700f, - 1.035924991419427100f, 1.035596929309791300f, 1.035268829124216700f, - 1.034940690874766300f, - 1.034612514573505700f, 1.034284300232500000f, 1.033956047863817500f, - 1.033627757479526700f, - 1.033299429091697700f, 1.032971062712402700f, 1.032642658353714300f, - 1.032314216027707700f, - 1.031985735746457900f, 1.031657217522042900f, 1.031328661366541300f, - 1.031000067292032300f, - 1.030671435310598600f, 1.030342765434322200f, 1.030014057675287900f, - 1.029685312045581100f, - 1.029356528557288300f, 1.029027707222499100f, 1.028698848053302100f, - 1.028369951061789600f, - 1.028041016260053500f, 1.027712043660187600f, 1.027383033274288400f, - 1.027053985114451100f, - 1.026724899192775300f, 1.026395775521359500f, 1.026066614112305600f, - 1.025737414977715200f, - 1.025408178129692000f, 1.025078903580341600f, 1.024749591341769700f, - 1.024420241426085200f, - 1.024090853845396800f, 1.023761428611814600f, 1.023431965737451800f, - 1.023102465234420700f, - 1.022772927114837100f, 1.022443351390816400f, 1.022113738074476300f, - 1.021784087177936000f, - 1.021454398713315600f, 1.021124672692737000f, 1.020794909128323000f, - 1.020465108032198300f, - 1.020135269416488700f, 1.019805393293321100f, 1.019475479674824900f, - 1.019145528573129000f, - 1.018815540000365800f, 1.018485513968667500f, 1.018155450490168000f, - 1.017825349577003300f, - 1.017495211241309800f, 1.017165035495226400f, 1.016834822350892300f, - 1.016504571820448000f, - 1.016174283916036800f, 1.015843958649801600f, 1.015513596033888400f, - 1.015183196080442900f, - 1.014852758801613200f, 1.014522284209548900f, 1.014191772316400000f, - 1.013861223134318900f, - 1.013530636675459100f, 1.013200012951974700f, 1.012869351976022300f, - 1.012538653759758900f, - 1.012207918315344300f, 1.011877145654937400f, 1.011546335790700600f, - 1.011215488734796800f, - 1.010884604499389800f, 1.010553683096645900f, 1.010222724538731600f, - 1.009891728837815700f, - 1.009560696006067900f, 1.009229626055658800f, 1.008898518998761800f, - 1.008567374847549900f, - 1.008236193614199000f, 1.007904975310885300f, 1.007573719949786700f, - 1.007242427543082900f, - 1.006911098102953900f, 1.006579731641582500f, 1.006248328171152100f, - 1.005916887703846500f, - 1.005585410251852700f, 1.005253895827357800f, 1.004922344442551000f, - 1.004590756109621900f, - 1.004259130840762700f, 1.003927468648166100f, 1.003595769544025900f, - 1.003264033540538500f, - 1.002932260649900000f, 1.002600450884309800f, 1.002268604255967200f, - 1.001936720777072400f, - 1.001604800459829000f, 1.001272843316440000f, 1.000940849359111000f, - 1.000608818600048100f, - 1.000276751051459200f, 0.999944646725553720f, 0.999612505634541740f, - 0.999280327790635690f, - 0.998948113206048590f, 0.998615861892994560f, 0.998283573863690270f, - 0.997951249130352380f, - 0.997618887705200020f, 0.997286489600452630f, 0.996954054828332210f, - 0.996621583401061110f, - 0.996289075330862860f, 0.995956530629963810f, 0.995623949310589620f, - 0.995291331384969390f, - 0.994958676865332010f, 0.994625985763907820f, 0.994293258092929790f, - 0.993960493864630480f, - 0.993627693091245660f, 0.993294855785010760f, 0.992961981958163210f, - 0.992629071622942340f, - 0.992296124791587690f, 0.991963141476341460f, 0.991630121689446090f, - 0.991297065443145440f, - 0.990963972749685840f, 0.990630843621313260f, 0.990297678070276800f, - 0.989964476108825210f, - 0.989631237749210020f, 0.989297963003683330f, 0.988964651884498000f, - 0.988631304403909890f, - 0.988297920574174430f, 0.987964500407549910f, 0.987631043916294970f, - 0.987297551112669370f, - 0.986964022008935520f, 0.986630456617355380f, 0.986296854950194260f, - 0.985963217019717120f, - 0.985629542838190490f, 0.985295832417883540f, 0.984962085771065030f, - 0.984628302910006580f, - 0.984294483846980150f, 0.983960628594258810f, 0.983626737164118190f, - 0.983292809568833910f, - 0.982958845820684270f, 0.982624845931947320f, 0.982290809914904140f, - 0.981956737781835790f, - 0.981622629545024770f, 0.981288485216756160f, 0.980954304809314670f, - 0.980620088334987930f, - 0.980285835806063770f, 0.979951547234831130f, 0.979617222633581860f, - 0.979282862014607240f, - 0.978948465390201530f, 0.978614032772659240f, 0.978279564174275860f, - 0.977945059607349900f, - 0.977610519084179290f, 0.977275942617064740f, 0.976941330218307540f, - 0.976606681900209830f, - 0.976271997675076550f, 0.975937277555212310f, 0.975602521552924600f, - 0.975267729680520560f, - 0.974932901950310350f, 0.974598038374604350f, 0.974263138965714040f, - 0.973928203735953460f, - 0.973593232697636530f, 0.973258225863079970f, 0.972923183244600480f, - 0.972588104854516410f, - 0.972252990705148370f, 0.971917840808816710f, 0.971582655177844700f, - 0.971247433824555920f, - 0.970912176761274950f, 0.970576884000329040f, 0.970241555554045230f, - 0.969906191434753320f, - 0.969570791654783330f, 0.969235356226466500f, 0.968899885162136650f, - 0.968564378474127350f, - 0.968228836174775060f, 0.967893258276415700f, 0.967557644791388500f, - 0.967221995732032490f, - 0.966886311110688230f, 0.966550590939698640f, 0.966214835231406500f, - 0.965879043998157160f, - 0.965543217252296420f, 0.965207355006171270f, 0.964871457272131190f, - 0.964535524062525410f, - 0.964199555389706030f, 0.963863551266025300f, 0.963527511703836660f, - 0.963191436715496120f, - 0.962855326313359350f, 0.962519180509785130f, 0.962182999317132030f, - 0.961846782747760140f, - 0.961510530814032040f, 0.961174243528309820f, 0.960837920902958720f, - 0.960501562950343390f, - 0.960165169682831830f, 0.959828741112791590f, 0.959492277252591900f, - 0.959155778114604400f, - 0.958819243711200310f, 0.958482674054753960f, 0.958146069157639560f, - 0.957809429032232760f, - 0.957472753690911670f, 0.957136043146054050f, 0.956799297410040440f, - 0.956462516495251940f, - 0.956125700414070300f, 0.955788849178880300f, 0.955451962802066120f, - 0.955115041296014880f, - 0.954778084673113870f, 0.954441092945751630f, 0.954104066126319150f, - 0.953767004227207060f, - 0.953429907260809120f, 0.953092775239518630f, 0.952755608175731570f, - 0.952418406081844360f, - 0.952081168970254520f, 0.951743896853362140f, 0.951406589743566950f, - 0.951069247653271500f, - 0.950731870594878510f, 0.950394458580791970f, 0.950057011623418380f, - 0.949719529735163940f, - 0.949382012928437600f, 0.949044461215648560f, 0.948706874609207220f, - 0.948369253121526420f, - 0.948031596765018910f, 0.947693905552099870f, 0.947356179495185020f, - 0.947018418606691230f, - 0.946680622899037650f, 0.946342792384643360f, 0.946004927075930090f, - 0.945667026985319680f, - 0.945329092125236190f, 0.944991122508104350f, 0.944653118146349890f, - 0.944315079052401090f, - 0.943977005238685770f, 0.943638896717634900f, 0.943300753501679190f, - 0.942962575603250920f, - 0.942624363034784580f, 0.942286115808714690f, 0.941947833937478270f, - 0.941609517433512730f, - 0.941271166309256450f, 0.940932780577150460f, 0.940594360249635500f, - 0.940255905339155150f, - 0.939917415858152920f, 0.939578891819073720f, 0.939240333234364950f, - 0.938901740116473540f, - 0.938563112477849630f, 0.938224450330942590f, 0.937885753688204820f, - 0.937547022562088990f, - 0.937208256965048840f, 0.936869456909540490f, 0.936530622408019990f, - 0.936191753472946030f, - 0.935852850116777430f, 0.935513912351974450f, 0.935174940190999560f, - 0.934835933646314900f, - 0.934496892730385720f, 0.934157817455677160f, 0.933818707834655590f, - 0.933479563879790030f, - 0.933140385603548840f, 0.932801173018403480f, 0.932461926136825660f, - 0.932122644971287830f, - 0.931783329534265240f, 0.931443979838232900f, 0.931104595895668410f, - 0.930765177719049210f, - 0.930425725320855430f, 0.930086238713567440f, 0.929746717909666790f, - 0.929407162921637610f, - 0.929067573761963250f, 0.928727950443130500f, 0.928388292977625930f, - 0.928048601377937210f, - 0.927708875656554800f, 0.927369115825968480f, 0.927029321898671270f, - 0.926689493887155820f, - 0.926349631803916270f, 0.926009735661449170f, 0.925669805472250860f, - 0.925329841248820340f, - 0.924989843003656610f, 0.924649810749260110f, 0.924309744498133750f, - 0.923969644262779830f, - 0.923629510055703820f, 0.923289341889410480f, 0.922949139776407800f, - 0.922608903729203570f, - 0.922268633760306990f, 0.921928329882229390f, 0.921587992107482210f, - 0.921247620448579440f, - 0.920907214918035070f, 0.920566775528364410f, 0.920226302292085460f, - 0.919885795221715540f, - 0.919545254329774850f, 0.919204679628783720f, 0.918864071131263780f, - 0.918523428849739030f, - 0.918182752796733110f, 0.917842042984772340f, 0.917501299426383480f, - 0.917160522134094160f, - 0.916819711120434700f, 0.916478866397934850f, 0.916137987979127270f, - 0.915797075876544350f, - 0.915456130102721200f, 0.915115150670193110f, 0.914774137591496510f, - 0.914433090879170130f, - 0.914092010545752620f, 0.913750896603785280f, 0.913409749065809520f, - 0.913068567944367970f, - 0.912727353252005710f, 0.912386105001267270f, 0.912044823204700370f, - 0.911703507874852440f, - 0.911362159024272310f, 0.911020776665511290f, 0.910679360811120000f, - 0.910337911473652390f, - 0.909996428665661990f, 0.909654912399703860f, 0.909313362688335290f, - 0.908971779544113350f, - 0.908630162979597760f, 0.908288513007348140f, 0.907946829639926790f, - 0.907605112889895870f, - 0.907263362769819000f, 0.906921579292262250f, 0.906579762469791110f, - 0.906237912314974080f, - 0.905896028840379560f, 0.905554112058577170f, 0.905212161982139160f, - 0.904870178623637170f, - 0.904528161995645670f, 0.904186112110739510f, 0.903844028981494190f, - 0.903501912620488070f, - 0.903159763040298880f, 0.902817580253507450f, 0.902475364272694370f, - 0.902133115110441470f, - 0.901790832779333250f, 0.901448517291953520f, 0.901106168660889110f, - 0.900763786898726380f, - 0.900421372018054500f, 0.900078924031462610f, 0.899736442951541320f, - 0.899393928790883420f, - 0.899051381562081310f, 0.898708801277730340f, 0.898366187950425780f, - 0.898023541592764210f, - 0.897680862217344440f, 0.897338149836764960f, 0.896995404463627350f, - 0.896652626110532870f, - 0.896309814790084090f, 0.895966970514885940f, 0.895624093297543110f, - 0.895281183150662960f, - 0.894938240086852970f, 0.894595264118721810f, 0.894252255258880410f, - 0.893909213519939460f, - 0.893566138914512420f, 0.893223031455212530f, 0.892879891154655380f, - 0.892536718025457090f, - 0.892193512080234670f, 0.891850273331607600f, 0.891507001792195000f, - 0.891163697474618880f, - 0.890820360391500920f, 0.890476990555464480f, 0.890133587979135000f, - 0.889790152675137610f, - 0.889446684656100330f, 0.889103183934650930f, 0.888759650523418650f, - 0.888416084435035060f, - 0.888072485682131150f, 0.887728854277341050f, 0.887385190233298650f, - 0.887041493562639060f, - 0.886697764277999840f, 0.886354002392018110f, 0.886010207917333760f, - 0.885666380866586560f, - 0.885322521252418610f, 0.884978629087472270f, 0.884634704384391180f, - 0.884290747155821230f, - 0.883946757414407980f, 0.883602735172799640f, 0.883258680443644530f, - 0.882914593239592320f, - 0.882570473573294660f, 0.882226321457403320f, 0.881882136904572400f, - 0.881537919927456340f, - 0.881193670538710450f, 0.880849388750992610f, 0.880505074576960370f, - 0.880160728029273920f, - 0.879816349120593590f, 0.879471937863580690f, 0.879127494270899090f, - 0.878783018355212220f, - 0.878438510129186170f, 0.878093969605486800f, 0.877749396796782770f, - 0.877404791715742370f, - 0.877060154375035710f, 0.876715484787334630f, 0.876370782965310900f, - 0.876026048921639160f, - 0.875681282668993700f, 0.875336484220050390f, 0.874991653587487090f, - 0.874646790783981660f, - 0.874301895822214290f, 0.873956968714865500f, 0.873612009474616810f, - 0.873267018114152300f, - 0.872921994646155390f, 0.872576939083312460f, 0.872231851438309840f, - 0.871886731723835020f, - 0.871541579952577750f, 0.871196396137227660f, 0.870851180290476810f, - 0.870505932425017060f, - 0.870160652553543020f, 0.869815340688749220f, 0.869469996843331370f, - 0.869124621029987670f, - 0.868779213261415610f, 0.868433773550315810f, 0.868088301909388680f, - 0.867742798351335720f, - 0.867397262888861100f, 0.867051695534668210f, 0.866706096301463340f, - 0.866360465201952980f, - 0.866014802248844420f, 0.865669107454847490f, 0.865323380832671800f, - 0.864977622395029290f, - 0.864631832154632240f, 0.864286010124194040f, 0.863940156316430170f, - 0.863594270744056040f, - 0.863248353419789670f, 0.862902404356348570f, 0.862556423566453230f, - 0.862210411062823810f, - 0.861864366858181910f, 0.861518290965251340f, 0.861172183396755500f, - 0.860826044165420630f, - 0.860479873283972910f, 0.860133670765139580f, 0.859787436621650360f, - 0.859441170866234390f, - 0.859094873511623840f, 0.858748544570550610f, 0.858402184055747750f, - 0.858055791979950740f, - 0.857709368355894840f, 0.857362913196317630f, 0.857016426513956930f, - 0.856669908321551650f, - 0.856323358631843170f, 0.855976777457572280f, 0.855630164811482460f, - 0.855283520706317080f, - 0.854936845154821930f, 0.854590138169742830f, 0.854243399763827020f, - 0.853896629949823630f, - 0.853549828740481690f, 0.853202996148552880f, 0.852856132186788910f, - 0.852509236867942440f, - 0.852162310204768740f, 0.851815352210022470f, 0.851468362896461110f, - 0.851121342276842110f, - 0.850774290363923820f, 0.850427207170467380f, 0.850080092709233130f, - 0.849732946992984290f, - 0.849385770034483680f, 0.849038561846496730f, 0.848691322441788910f, - 0.848344051833126780f, - 0.847996750033279350f, 0.847649417055015060f, 0.847302052911105160f, - 0.846954657614320980f, - 0.846607231177434640f, 0.846259773613221020f, 0.845912284934454140f, - 0.845564765153910990f, - 0.845217214284368690f, 0.844869632338605130f, 0.844522019329400630f, - 0.844174375269535320f, - 0.843826700171791620f, 0.843478994048952440f, 0.843131256913801420f, - 0.842783488779124570f, - 0.842435689657707650f, 0.842087859562339000f, 0.841739998505806610f, - 0.841392106500900900f, - 0.841044183560412770f, 0.840696229697133760f, 0.840348244923857960f, - 0.840000229253379030f, - 0.839652182698493290f, 0.839304105271996950f, 0.838955996986687550f, - 0.838607857855364740f, - 0.838259687890827830f, 0.837911487105878820f, 0.837563255513319780f, - 0.837214993125953600f, - 0.836866699956585690f, 0.836518376018021260f, 0.836170021323067610f, - 0.835821635884532730f, - 0.835473219715225040f, 0.835124772827955830f, 0.834776295235535540f, - 0.834427786950777460f, - 0.834079247986494690f, 0.833730678355502630f, 0.833382078070616820f, - 0.833033447144653880f, - 0.832684785590432690f, 0.832336093420771970f, 0.831987370648492710f, - 0.831638617286416190f, - 0.831289833347364620f, 0.830941018844162600f, 0.830592173789634240f, - 0.830243298196606360f, - 0.829894392077905720f, 0.829545455446360270f, 0.829196488314800080f, - 0.828847490696055010f, - 0.828498462602957340f, 0.828149404048339590f, 0.827800315045035150f, - 0.827451195605879990f, - 0.827102045743709160f, 0.826752865471360950f, 0.826403654801672770f, - 0.826054413747485010f, - 0.825705142321637720f, 0.825355840536972420f, 0.825006508406332490f, - 0.824657145942561230f, - 0.824307753158504460f, 0.823958330067008030f, 0.823608876680918760f, - 0.823259393013085820f, - 0.822909879076357930f, 0.822560334883586490f, 0.822210760447622980f, - 0.821861155781319800f, - 0.821511520897531660f, 0.821161855809112830f, 0.820812160528920360f, - 0.820462435069811090f, - 0.820112679444643060f, 0.819762893666276530f, 0.819413077747571440f, - 0.819063231701390170f, - 0.818713355540594880f, 0.818363449278050270f, 0.818013512926620940f, - 0.817663546499172720f, - 0.817313550008573640f, 0.816963523467691410f, 0.816613466889396070f, - 0.816263380286557980f, - 0.815913263672048310f, 0.815563117058740630f, 0.815212940459508210f, - 0.814862733887226740f, - 0.814512497354771830f, 0.814162230875020380f, 0.813811934460851430f, - 0.813461608125143560f, - 0.813111251880778150f, 0.812760865740636440f, 0.812410449717600570f, - 0.812060003824555230f, - 0.811709528074384460f, 0.811359022479975040f, 0.811008487054213360f, - 0.810657921809988410f, - 0.810307326760189020f, 0.809956701917705080f, 0.809606047295428950f, - 0.809255362906252440f, - 0.808904648763069890f, 0.808553904878775760f, 0.808203131266265420f, - 0.807852327938436750f, - 0.807501494908186900f, 0.807150632188415760f, 0.806799739792023240f, - 0.806448817731910130f, - 0.806097866020979660f, 0.805746884672134620f, 0.805395873698280360f, - 0.805044833112322000f, - 0.804693762927166100f, 0.804342663155721230f, 0.803991533810895500f, - 0.803640374905599810f, - 0.803289186452744390f, 0.802937968465242240f, 0.802586720956006250f, - 0.802235443937950320f, - 0.801884137423990890f, 0.801532801427043530f, 0.801181435960026780f, - 0.800830041035858750f, - 0.800478616667459010f, 0.800127162867749210f, 0.799775679649650460f, - 0.799424167026086540f, - 0.799072625009981330f, 0.798721053614259490f, 0.798369452851848020f, - 0.798017822735673680f, - 0.797666163278665570f, 0.797314474493752810f, 0.796962756393865600f, - 0.796611008991936490f, - 0.796259232300897350f, 0.795907426333682830f, 0.795555591103226930f, - 0.795203726622466520f, - 0.794851832904338360f, 0.794499909961779990f, 0.794147957807731400f, - 0.793795976455132220f, - 0.793443965916924570f, 0.793091926206050400f, 0.792739857335452710f, - 0.792387759318077150f, - 0.792035632166868230f, 0.791683475894773720f, 0.791331290514740830f, - 0.790979076039718180f, - 0.790626832482656310f, 0.790274559856505520f, 0.789922258174218570f, - 0.789569927448748320f, - 0.789217567693048520f, 0.788865178920075130f, 0.788512761142783790f, - 0.788160314374132590f, - 0.787807838627079260f, 0.787455333914584220f, 0.787102800249607550f, - 0.786750237645110430f, - 0.786397646114056490f, 0.786045025669408700f, 0.785692376324132690f, - 0.785339698091194080f, - 0.784986990983559170f, 0.784634255014197040f, 0.784281490196075850f, - 0.783928696542166680f, - 0.783575874065440270f, 0.783223022778868350f, 0.782870142695425320f, - 0.782517233828084580f, - 0.782164296189822530f, 0.781811329793615120f, 0.781458334652439630f, - 0.781105310779275470f, - 0.780752258187101480f, 0.780399176888899150f, 0.780046066897649550f, - 0.779692928226336290f, - 0.779339760887942880f, 0.778986564895453810f, 0.778633340261856040f, - 0.778280087000135730f, - 0.777926805123281830f, 0.777573494644283050f, 0.777220155576129220f, - 0.776866787931812410f, - 0.776513391724324210f, 0.776159966966658680f, 0.775806513671809860f, - 0.775453031852772920f, - 0.775099521522545020f, 0.774745982694123090f, 0.774392415380506400f, - 0.774038819594694230f, - 0.773685195349686940f, 0.773331542658487140f, 0.772977861534096640f, - 0.772624151989520280f, - 0.772270414037761980f, 0.771916647691828660f, 0.771562852964726710f, - 0.771209029869463940f, - 0.770855178419050050f, 0.770501298626494410f, 0.770147390504808960f, - 0.769793454067005500f, - 0.769439489326096850f, 0.769085496295098040f, 0.768731474987023660f, - 0.768377425414890850f, - 0.768023347591716640f, 0.767669241530518850f, 0.767315107244318060f, - 0.766960944746133740f, - 0.766606754048988260f, 0.766252535165903970f, 0.765898288109903900f, - 0.765544012894013530f, - 0.765189709531257760f, 0.764835378034664170f, 0.764481018417259680f, - 0.764126630692073870f, - 0.763772214872136200f, 0.763417770970477140f, 0.763063299000129260f, - 0.762708798974124800f, - 0.762354270905498450f, 0.761999714807284790f, 0.761645130692519490f, - 0.761290518574240350f, - 0.760935878465484720f, 0.760581210379292380f, 0.760226514328703140f, - 0.759871790326757670f, - 0.759517038386499090f, 0.759162258520969860f, 0.758807450743214760f, - 0.758452615066278920f, - 0.758097751503208020f, 0.757742860067050380f, 0.757387940770853360f, - 0.757032993627667290f, - 0.756678018650541630f, 0.756323015852528700f, 0.755967985246680520f, - 0.755612926846050080f, - 0.755257840663692730f, 0.754902726712663120f, 0.754547585006018600f, - 0.754192415556816380f, - 0.753837218378114460f, 0.753481993482973400f, 0.753126740884452970f, - 0.752771460595615500f, - 0.752416152629523330f, 0.752060816999239660f, 0.751705453717829930f, - 0.751350062798359140f, - 0.750994644253894730f, 0.750639198097504010f, 0.750283724342255320f, - 0.749928223001219310f, - 0.749572694087465850f, 0.749217137614067500f, 0.748861553594096340f, - 0.748505942040627040f, - 0.748150302966733790f, 0.747794636385492150f, 0.747438942309979870f, - 0.747083220753273820f, - 0.746727471728453770f, 0.746371695248599140f, 0.746015891326790470f, - 0.745660059976110400f, - 0.745304201209641030f, 0.744948315040467210f, 0.744592401481673270f, - 0.744236460546344850f, - 0.743880492247569580f, 0.743524496598434670f, 0.743168473612029980f, - 0.742812423301444810f, - 0.742456345679769810f, 0.742100240760097840f, 0.741744108555520860f, - 0.741387949079133860f, - 0.741031762344030790f, 0.740675548363308620f, 0.740319307150063780f, - 0.739963038717393880f, - 0.739606743078398690f, 0.739250420246177380f, 0.738894070233831800f, - 0.738537693054463370f, - 0.738181288721174830f, 0.737824857247070810f, 0.737468398645255490f, - 0.737111912928835710f, - 0.736755400110918000f, 0.736398860204609870f, 0.736042293223021060f, - 0.735685699179260850f, - 0.735329078086440880f, 0.734972429957672760f, 0.734615754806068890f, - 0.734259052644744230f, - 0.733902323486812610f, 0.733545567345390890f, 0.733188784233595240f, - 0.732831974164544150f, - 0.732475137151356370f, 0.732118273207151170f, 0.731761382345050280f, - 0.731404464578174760f, - 0.731047519919648340f, 0.730690548382594280f, 0.730333549980137110f, - 0.729976524725403530f, - 0.729619472631519270f, 0.729262393711613280f, 0.728905287978813600f, - 0.728548155446249730f, - 0.728190996127053180f, 0.727833810034354990f, 0.727476597181288540f, - 0.727119357580987220f, - 0.726762091246585200f, 0.726404798191218950f, 0.726047478428024420f, - 0.725690131970139980f, - 0.725332758830703360f, 0.724975359022855150f, 0.724617932559735390f, - 0.724260479454485130f, - 0.723902999720247850f, 0.723545493370166160f, 0.723187960417385530f, - 0.722830400875050790f, - 0.722472814756308090f, 0.722115202074305680f, 0.721757562842191060f, - 0.721399897073114470f, - 0.721042204780225960f, 0.720684485976676230f, 0.720326740675618530f, - 0.719968968890205230f, - 0.719611170633591480f, 0.719253345918932090f, 0.718895494759382860f, - 0.718537617168101610f, - 0.718179713158245800f, 0.717821782742975370f, 0.717463825935449550f, - 0.717105842748830160f, - 0.716747833196278770f, 0.716389797290958090f, 0.716031735046032900f, - 0.715673646474667140f, - 0.715315531590027700f, 0.714957390405280950f, 0.714599222933594240f, - 0.714241029188137260f, - 0.713882809182079030f, 0.713524562928591010f, 0.713166290440844450f, - 0.712807991732011590f, - 0.712449666815266890f, 0.712091315703784260f, 0.711732938410739810f, - 0.711374534949309800f, - 0.711016105332671340f, 0.710657649574003460f, 0.710299167686484930f, - 0.709940659683296890f, - 0.709582125577619790f, 0.709223565382636760f, 0.708864979111530680f, - 0.708506366777485130f, - 0.708147728393686340f, 0.707789063973319310f, 0.707430373529572170f, - 0.707071657075632460f, - 0.706712914624688770f, 0.706354146189931750f, 0.705995351784551530f, - 0.705636531421740880f, - 0.705277685114692020f, 0.704918812876598410f, 0.704559914720655490f, - 0.704200990660058150f, - 0.703842040708003820f, 0.703483064877689630f, 0.703124063182313690f, - 0.702765035635076310f, - 0.702405982249177160f, 0.702046903037818250f, 0.701687798014201110f, - 0.701328667191529980f, - 0.700969510583008600f, 0.700610328201841660f, 0.700251120061236020f, - 0.699891886174398130f, - 0.699532626554536630f, 0.699173341214860190f, 0.698814030168578240f, - 0.698454693428902320f, - 0.698095331009043640f, 0.697735942922215520f, 0.697376529181631400f, - 0.697017089800505250f, - 0.696657624792053730f, 0.696298134169492380f, 0.695938617946039510f, - 0.695579076134912990f, - 0.695219508749331800f, 0.694859915802517050f, 0.694500297307689140f, - 0.694140653278070950f, - 0.693780983726884790f, 0.693421288667355530f, 0.693061568112707690f, - 0.692701822076166820f, - 0.692342050570960430f, 0.691982253610315510f, 0.691622431207461700f, - 0.691262583375628180f, - 0.690902710128045050f, 0.690542811477944610f, 0.690182887438558710f, - 0.689822938023121220f, - 0.689462963244866330f, 0.689102963117028790f, 0.688742937652845550f, - 0.688382886865552930f, - 0.688022810768389670f, 0.687662709374594510f, 0.687302582697406850f, - 0.686942430750068330f, - 0.686582253545819920f, 0.686222051097905130f, 0.685861823419566700f, - 0.685501570524050140f, - 0.685141292424600310f, 0.684780989134463280f, 0.684420660666887120f, - 0.684060307035119440f, - 0.683699928252410110f, 0.683339524332008840f, 0.682979095287166160f, - 0.682618641131135020f, - 0.682258161877167370f, 0.681897657538517720f, 0.681537128128440470f, - 0.681176573660190910f, - 0.680815994147026320f, 0.680455389602203310f, 0.680094760038981280f, - 0.679734105470619080f, - 0.679373425910376310f, 0.679012721371515250f, 0.678651991867297080f, - 0.678291237410985510f, - 0.677930458015843620f, 0.677569653695137220f, 0.677208824462131490f, - 0.676847970330092700f, - 0.676487091312289350f, 0.676126187421989040f, 0.675765258672461950f, - 0.675404305076978020f, - 0.675043326648808170f, 0.674682323401225250f, 0.674321295347501510f, - 0.673960242500911690f, - 0.673599164874730370f, 0.673238062482232950f, 0.672876935336696900f, - 0.672515783451398950f, - 0.672154606839618470f, 0.671793405514634180f, 0.671432179489727110f, - 0.671070928778178090f, - 0.670709653393269050f, 0.670348353348283690f, 0.669987028656505170f, - 0.669625679331219300f, - 0.669264305385711360f, 0.668902906833267590f, 0.668541483687176590f, - 0.668180035960725840f, - 0.667818563667205600f, 0.667457066819905800f, 0.667095545432117240f, - 0.666733999517132860f, - 0.666372429088244790f, 0.666010834158747840f, 0.665649214741936390f, - 0.665287570851105680f, - 0.664925902499553190f, 0.664564209700575500f, 0.664202492467472090f, - 0.663840750813541210f, - 0.663478984752084110f, 0.663117194296401260f, 0.662755379459794350f, - 0.662393540255567070f, - 0.662031676697022450f, 0.661669788797465960f, 0.661307876570202740f, - 0.660945940028538900f, - 0.660583979185782600f, 0.660221994055241400f, 0.659859984650225110f, - 0.659497950984043510f, - 0.659135893070007080f, 0.658773810921428500f, 0.658411704551619570f, - 0.658049573973894850f, - 0.657687419201568260f, 0.657325240247955020f, 0.656963037126372160f, - 0.656600809850135910f, - 0.656238558432565400f, 0.655876282886978410f, 0.655513983226695960f, - 0.655151659465038060f, - 0.654789311615326050f, 0.654426939690883280f, 0.654064543705032310f, - 0.653702123671098150f, - 0.653339679602405470f, 0.652977211512280050f, 0.652614719414049580f, - 0.652252203321041060f, - 0.651889663246583930f, 0.651527099204007310f, 0.651164511206641320f, - 0.650801899267818060f, - 0.650439263400868990f, 0.650076603619127890f, 0.649713919935928420f, - 0.649351212364604910f, - 0.648988480918494040f, 0.648625725610931460f, 0.648262946455255510f, - 0.647900143464803730f, - 0.647537316652916140f, 0.647174466032932490f, 0.646811591618193350f, - 0.646448693422041360f, - 0.646085771457818310f, 0.645722825738868860f, 0.645359856278536980f, - 0.644996863090167570f, - 0.644633846187107620f, 0.644270805582703550f, 0.643907741290304040f, - 0.643544653323257610f, - 0.643181541694913480f, 0.642818406418622980f, 0.642455247507736860f, - 0.642092064975608220f, - 0.641728858835589830f, 0.641365629101035340f, 0.641002375785300500f, - 0.640639098901740200f, - 0.640275798463712080f, 0.639912474484572560f, 0.639549126977681070f, - 0.639185755956396480f, - 0.638822361434078330f, 0.638458943424088490f, 0.638095501939787920f, - 0.637732036994540290f, - 0.637368548601708660f, 0.637005036774657030f, 0.636641501526751590f, - 0.636277942871357530f, - 0.635914360821842830f, 0.635550755391574910f, 0.635187126593922070f, - 0.634823474442254840f, - 0.634459798949942640f, 0.634096100130357660f, 0.633732377996871770f, - 0.633368632562857470f, - 0.633004863841689520f, 0.632641071846741790f, 0.632277256591390780f, - 0.631913418089012020f, - 0.631549556352983710f, 0.631185671396683470f, 0.630821763233490040f, - 0.630457831876783950f, - 0.630093877339945260f, 0.629729899636356280f, 0.629365898779399080f, - 0.629001874782456500f, - 0.628637827658913300f, 0.628273757422153860f, 0.627909664085564810f, - 0.627545547662532230f, - 0.627181408166443410f, 0.626817245610687520f, 0.626453060008652860f, - 0.626088851373730380f, - 0.625724619719310480f, 0.625360365058784670f, 0.624996087405546350f, - 0.624631786772988030f, - 0.624267463174504880f, 0.623903116623491180f, 0.623538747133343780f, - 0.623174354717459190f, - 0.622809939389234460f, 0.622445501162069090f, 0.622081040049361490f, - 0.621716556064512820f, - 0.621352049220923570f, 0.620987519531995270f, 0.620622967011131400f, - 0.620258391671734690f, - 0.619893793527210410f, 0.619529172590963410f, 0.619164528876399280f, - 0.618799862396925750f, - 0.618435173165949760f, 0.618070461196880800f, 0.617705726503127720f, - 0.617340969098100430f, - 0.616976188995210780f, 0.616611386207870040f, 0.616246560749491690f, - 0.615881712633488340f, - 0.615516841873275490f, 0.615151948482267840f, 0.614787032473881110f, - 0.614422093861533010f, - 0.614057132658640590f, 0.613692148878623000f, 0.613327142534899510f, - 0.612962113640889710f, - 0.612597062210015750f, 0.612231988255698470f, 0.611866891791361560f, - 0.611501772830428060f, - 0.611136631386322020f, 0.610771467472469460f, 0.610406281102295440f, - 0.610041072289227990f, - 0.609675841046694030f, 0.609310587388121830f, 0.608945311326941520f, - 0.608580012876582370f, - 0.608214692050476290f, 0.607849348862054220f, 0.607483983324749510f, - 0.607118595451995420f, - 0.606753185257225550f, 0.606387752753876020f, 0.606022297955381760f, - 0.605656820875180360f, - 0.605291321526709060f, 0.604925799923405670f, 0.604560256078710220f, - 0.604194690006061960f, - 0.603829101718902580f, 0.603463491230673220f, 0.603097858554815790f, - 0.602732203704774650f, - 0.602366526693992930f, 0.602000827535916330f, 0.601635106243990190f, - 0.601269362831660550f, - 0.600903597312375640f, 0.600537809699582810f, 0.600172000006731770f, - 0.599806168247271620f, - 0.599440314434653620f, 0.599074438582328780f, 0.598708540703749010f, - 0.598342620812368000f, - 0.597976678921638860f, 0.597610715045016950f, 0.597244729195957500f, - 0.596878721387916090f, - 0.596512691634350830f, 0.596146639948718640f, 0.595780566344478960f, - 0.595414470835091030f, - 0.595048353434014630f, 0.594682214154711790f, 0.594316053010643270f, - 0.593949870015273000f, - 0.593583665182063740f, 0.593217438524479500f, 0.592851190055986300f, - 0.592484919790049140f, - 0.592118627740135460f, 0.591752313919712170f, 0.591385978342248260f, - 0.591019621021212420f, - 0.590653241970074180f, 0.590286841202305120f, 0.589920418731375800f, - 0.589553974570759530f, - 0.589187508733928890f, 0.588821021234357310f, 0.588454512085520460f, - 0.588087981300892900f, - 0.587721428893951850f, 0.587354854878173850f, 0.586988259267036350f, - 0.586621642074019120f, - 0.586255003312600500f, 0.585888342996261690f, 0.585521661138483250f, - 0.585154957752746730f, - 0.584788232852535560f, 0.584421486451332410f, 0.584054718562622140f, - 0.583687929199888990f, - 0.583321118376619710f, 0.582954286106300290f, 0.582587432402417840f, - 0.582220557278461340f, - 0.581853660747918780f, 0.581486742824280810f, 0.581119803521037650f, - 0.580752842851679940f, - 0.580385860829700780f, 0.580018857468592270f, 0.579651832781848730f, - 0.579284786782964360f, - 0.578917719485433800f, 0.578550630902754050f, 0.578183521048421080f, - 0.577816389935933090f, - 0.577449237578788300f, 0.577082063990485340f, 0.576714869184524860f, - 0.576347653174406840f, - 0.575980415973633590f, 0.575613157595706530f, 0.575245878054129520f, - 0.574878577362406000f, - 0.574511255534040030f, 0.574143912582537940f, 0.573776548521405030f, - 0.573409163364148930f, - 0.573041757124277180f, 0.572674329815297640f, 0.572306881450720390f, - 0.571939412044054740f, - 0.571571921608812320f, 0.571204410158504090f, 0.570836877706642270f, - 0.570469324266740570f, - 0.570101749852312100f, 0.569734154476872480f, 0.569366538153936560f, - 0.568998900897020210f, - 0.568631242719641270f, 0.568263563635316600f, 0.567895863657565500f, - 0.567528142799906490f, - 0.567160401075860410f, 0.566792638498947680f, 0.566424855082689470f, - 0.566057050840608870f, - 0.565689225786228160f, 0.565321379933072190f, 0.564953513294665140f, - 0.564585625884531870f, - 0.564217717716199550f, 0.563849788803194140f, 0.563481839159044150f, - 0.563113868797277870f, - 0.562745877731423820f, 0.562377865975012940f, 0.562009833541575080f, - 0.561641780444642640f, - 0.561273706697747450f, 0.560905612314422150f, 0.560537497308201240f, - 0.560169361692618440f, - 0.559801205481210040f, 0.559433028687510990f, 0.559064831325059240f, - 0.558696613407391630f, - 0.558328374948046320f, 0.557960115960563050f, 0.557591836458480870f, - 0.557223536455341280f, - 0.556855215964685120f, 0.556486875000054000f, 0.556118513574991650f, - 0.555750131703040880f, - 0.555381729397746880f, 0.555013306672654360f, 0.554644863541308600f, - 0.554276400017257090f, - 0.553907916114046440f, 0.553539411845225590f, 0.553170887224342820f, - 0.552802342264947400f, - 0.552433776980590490f, 0.552065191384822350f, 0.551696585491195710f, - 0.551327959313262280f, - 0.550959312864576220f, 0.550590646158691240f, 0.550221959209161620f, - 0.549853252029543830f, - 0.549484524633393480f, 0.549115777034268170f, 0.548747009245725500f, - 0.548378221281323520f, - 0.548009413154622370f, 0.547640584879181100f, 0.547271736468561530f, - 0.546902867936324590f, - 0.546533979296032200f, 0.546165070561248080f, 0.545796141745535150f, - 0.545427192862458780f, - 0.545058223925583670f, 0.544689234948475210f, 0.544320225944701200f, - 0.543951196927828010f, - 0.543582147911424560f, 0.543213078909059120f, 0.542843989934301940f, - 0.542474881000723050f, - 0.542105752121893050f, 0.541736603311384620f, 0.541367434582769480f, - 0.540998245949621760f, - 0.540629037425515050f, 0.540259809024023600f, 0.539890560758723770f, - 0.539521292643190930f, - 0.539152004691002770f, 0.538782696915736770f, 0.538413369330970610f, - 0.538044021950284450f, - 0.537674654787257180f, 0.537305267855470390f, 0.536935861168504670f, - 0.536566434739941920f, - 0.536196988583365510f, 0.535827522712358230f, 0.535458037140505110f, - 0.535088531881390050f, - 0.534719006948599860f, 0.534349462355720230f, 0.533979898116337950f, - 0.533610314244041710f, - 0.533240710752419080f, 0.532871087655060300f, 0.532501444965554960f, - 0.532131782697493170f, - 0.531762100864467290f, 0.531392399480068670f, 0.531022678557890980f, - 0.530652938111527360f, - 0.530283178154571710f, 0.529913398700619820f, 0.529543599763266700f, - 0.529173781356109600f, - 0.528803943492745180f, 0.528434086186771010f, 0.528064209451786560f, - 0.527694313301390160f, - 0.527324397749182720f, 0.526954462808764120f, 0.526584508493736840f, - 0.526214534817702310f, - 0.525844541794263210f, 0.525474529437023890f, 0.525104497759587900f, - 0.524734446775560910f, - 0.524364376498548390f, 0.523994286942156220f, 0.523624178119992400f, - 0.523254050045663940f, - 0.522883902732780290f, 0.522513736194950230f, 0.522143550445783310f, - 0.521773345498891090f, - 0.521403121367884030f, 0.521032878066375100f, 0.520662615607976660f, - 0.520292334006301820f, - 0.519922033274965560f, 0.519551713427582000f, 0.519181374477767470f, - 0.518811016439137520f, - 0.518440639325310040f, 0.518070243149902240f, 0.517699827926532130f, - 0.517329393668819580f, - 0.516958940390383700f, 0.516588468104845820f, 0.516217976825826600f, - 0.515847466566947580f, - 0.515476937341832310f, 0.515106389164103120f, 0.514735822047384990f, - 0.514365236005302040f, - 0.513994631051479240f, 0.513624007199543600f, 0.513253364463121090f, - 0.512882702855839920f, - 0.512512022391327980f, 0.512141323083213470f, 0.511770604945127050f, - 0.511399867990697920f, - 0.511029112233557960f, 0.510658337687338040f, 0.510287544365671140f, - 0.509916732282189920f, - 0.509545901450527690f, 0.509175051884319660f, 0.508804183597200140f, - 0.508433296602805670f, - 0.508062390914772230f, 0.507691466546736580f, 0.507320523512337470f, - 0.506949561825212450f, - 0.506578581499001590f, 0.506207582547344550f, 0.505836564983881190f, - 0.505465528822253710f, - 0.505094474076103310f, 0.504723400759073290f, 0.504352308884806750f, - 0.503981198466947000f, - 0.503610069519139780f, 0.503238922055029400f, 0.502867756088262840f, - 0.502496571632486070f, - 0.502125368701347050f, 0.501754147308493770f, 0.501382907467574190f, - 0.501011649192238950f, - 0.500640372496137020f, 0.500269077392920150f, 0.499897763896239410f, - 0.499526432019746450f, - 0.499155081777094940f, 0.498783713181937540f, 0.498412326247929250f, - 0.498040920988724490f, - 0.497669497417978280f, 0.497298055549347750f, 0.496926595396488870f, - 0.496555116973059980f, - 0.496183620292718900f, 0.495812105369124070f, 0.495440572215935850f, - 0.495069020846813650f, - 0.494697451275419140f, 0.494325863515413130f, 0.493954257580458580f, - 0.493582633484217940f, - 0.493210991240354450f, 0.492839330862533120f, 0.492467652364417970f, - 0.492095955759675460f, - 0.491724241061971320f, 0.491352508284972070f, 0.490980757442346090f, - 0.490608988547760690f, - 0.490237201614885710f, 0.489865396657390210f, 0.489493573688943970f, - 0.489121732723218740f, - 0.488749873773885120f, 0.488377996854616250f, 0.488006101979084450f, - 0.487634189160962910f, - 0.487262258413926560f, 0.486890309751649490f, 0.486518343187807900f, - 0.486146358736077200f, - 0.485774356410135000f, 0.485402336223658360f, 0.485030298190324950f, - 0.484658242323814380f, - 0.484286168637805270f, 0.483914077145978560f, 0.483541967862014480f, - 0.483169840799594130f, - 0.482797695972400300f, 0.482425533394114920f, 0.482053353078422120f, - 0.481681155039005550f, - 0.481308939289549380f, 0.480936705843739820f, 0.480564454715261990f, - 0.480192185917803270f, - 0.479819899465050160f, 0.479447595370691370f, 0.479075273648415010f, - 0.478702934311909910f, - 0.478330577374866780f, 0.477958202850975230f, 0.477585810753927250f, - 0.477213401097414220f, - 0.476840973895128200f, 0.476468529160763100f, 0.476096066908011760f, - 0.475723587150569390f, - 0.475351089902130650f, 0.474978575176390750f, 0.474606042987046840f, - 0.474233493347795020f, - 0.473860926272333670f, 0.473488341774360670f, 0.473115739867574380f, - 0.472743120565675250f, - 0.472370483882362520f, 0.471997829831337810f, 0.471625158426301700f, - 0.471252469680957190f, - 0.470879763609006460f, 0.470507040224152460f, 0.470134299540099940f, - 0.469761541570552780f, - 0.469388766329217000f, 0.469015973829798090f, 0.468643164086002100f, - 0.468270337111537040f, - 0.467897492920109850f, 0.467524631525429830f, 0.467151752941205530f, - 0.466778857181146260f, - 0.466405944258963200f, 0.466033014188366350f, 0.465660066983068220f, - 0.465287102656780530f, - 0.464914121223215740f, 0.464541122696088100f, 0.464168107089110940f, - 0.463795074415999760f, - 0.463422024690469060f, 0.463048957926235630f, 0.462675874137015720f, - 0.462302773336526080f, - 0.461929655538485470f, 0.461556520756611410f, 0.461183369004623920f, - 0.460810200296242310f, - 0.460437014645186440f, 0.460063812065178160f, 0.459690592569938270f, - 0.459317356173189750f, - 0.458944102888655060f, 0.458570832730057170f, 0.458197545711121090f, - 0.457824241845570630f, - 0.457450921147131930f, 0.457077583629530550f, 0.456704229306492570f, - 0.456330858191746010f, - 0.455957470299017840f, 0.455584065642037350f, 0.455210644234532610f, - 0.454837206090234200f, - 0.454463751222871910f, 0.454090279646176210f, 0.453716791373879380f, - 0.453343286419712720f, - 0.452969764797409750f, 0.452596226520703360f, 0.452222671603327130f, - 0.451849100059016350f, - 0.451475511901505420f, 0.451101907144530910f, 0.450728285801828830f, - 0.450354647887135640f, - 0.449980993414189900f, 0.449607322396728900f, 0.449233634848492320f, - 0.448859930783219170f, - 0.448486210214649020f, 0.448112473156523420f, 0.447738719622582710f, - 0.447364949626569590f, - 0.446991163182225700f, 0.446617360303294910f, 0.446243541003520480f, - 0.445869705296646270f, - 0.445495853196417930f, 0.445121984716580210f, 0.444748099870879880f, - 0.444374198673063330f, - 0.444000281136877280f, 0.443626347276070590f, 0.443252397104390790f, - 0.442878430635587910f, - 0.442504447883411090f, 0.442130448861610240f, 0.441756433583937120f, - 0.441382402064142250f, - 0.441008354315978680f, 0.440634290353198510f, 0.440260210189554690f, - 0.439886113838801880f, - 0.439512001314693700f, 0.439137872630986080f, 0.438763727801433690f, - 0.438389566839793740f, - 0.438015389759822630f, 0.437641196575277220f, 0.437266987299916590f, - 0.436892761947498260f, - 0.436518520531782470f, 0.436144263066528480f, 0.435769989565496290f, - 0.435395700042447710f, - 0.435021394511143410f, 0.434647072985346380f, 0.434272735478819010f, - 0.433898382005324050f, - 0.433524012578626440f, 0.433149627212489670f, 0.432775225920679740f, - 0.432400808716961900f, - 0.432026375615101930f, 0.431651926628867530f, 0.431277461772025310f, - 0.430902981058344070f, - 0.430528484501591540f, 0.430153972115537800f, 0.429779443913952170f, - 0.429404899910604490f, - 0.429030340119266550f, 0.428655764553708960f, 0.428281173227704760f, - 0.427906566155026040f, - 0.427531943349445720f, 0.427157304824738350f, 0.426782650594677570f, - 0.426407980673039090f, - 0.426033295073598160f, 0.425658593810130330f, 0.425283876896413280f, - 0.424909144346223290f, - 0.424534396173339160f, 0.424159632391538870f, 0.423784853014600950f, - 0.423410058056305830f, - 0.423035247530432810f, 0.422660421450763490f, 0.422285579831078230f, - 0.421910722685159720f, - 0.421535850026790060f, 0.421160961869751720f, 0.420786058227829220f, - 0.420411139114805770f, - 0.420036204544466940f, 0.419661254530597550f, 0.419286289086983070f, - 0.418911308227410740f, - 0.418536311965666650f, 0.418161300315539220f, 0.417786273290816130f, - 0.417411230905285650f, - 0.417036173172737830f, 0.416661100106961610f, 0.416286011721748230f, - 0.415910908030888200f, - 0.415535789048172620f, 0.415160654787394280f, 0.414785505262345030f, - 0.414410340486818910f, - 0.414035160474608700f, 0.413659965239509710f, 0.413284754795316230f, - 0.412909529155823300f, - 0.412534288334827750f, 0.412159032346125280f, 0.411783761203513790f, - 0.411408474920790520f, - 0.411033173511753220f, 0.410657856990201580f, 0.410282525369933980f, - 0.409907178664751180f, - 0.409531816888453190f, 0.409156440054840590f, 0.408781048177715660f, - 0.408405641270879690f, - 0.408030219348136270f, 0.407654782423288010f, 0.407279330510138260f, - 0.406903863622492260f, - 0.406528381774153900f, 0.406152884978929480f, 0.405777373250624070f, - 0.405401846603045010f, - 0.405026305049998980f, 0.404650748605293040f, 0.404275177282736260f, - 0.403899591096136380f, - 0.403523990059303620f, 0.403148374186047210f, 0.402772743490177110f, - 0.402397097985504990f, - 0.402021437685841480f, 0.401645762604999350f, 0.401270072756790610f, - 0.400894368155027990f, - 0.400518648813525830f, 0.400142914746097480f, 0.399767165966558420f, - 0.399391402488723400f, - 0.399015624326407800f, 0.398639831493428740f, 0.398264024003602220f, - 0.397888201870746420f, - 0.397512365108678430f, 0.397136513731217500f, 0.396760647752182230f, - 0.396384767185391620f, - 0.396008872044666730f, 0.395632962343827170f, 0.395257038096694990f, - 0.394881099317091370f, - 0.394505146018838130f, 0.394129178215758820f, 0.393753195921675850f, - 0.393377199150413860f, - 0.393001187915796750f, 0.392625162231649010f, 0.392249122111796800f, - 0.391873067570065240f, - 0.391496998620281590f, 0.391120915276272410f, 0.390744817551864850f, - 0.390368705460887750f, - 0.389992579017168830f, 0.389616438234538010f, 0.389240283126824070f, - 0.388864113707858060f, - 0.388487929991470140f, 0.388111731991491180f, 0.387735519721753690f, - 0.387359293196089140f, - 0.386983052428331030f, 0.386606797432312350f, 0.386230528221866430f, - 0.385854244810828530f, - 0.385477947213032580f, 0.385101635442314900f, 0.384725309512510880f, - 0.384348969437456610f, - 0.383972615230989860f, 0.383596246906947210f, 0.383219864479167560f, - 0.382843467961488940f, - 0.382467057367749940f, 0.382090632711791060f, 0.381714194007451380f, - 0.381337741268572390f, - 0.380961274508994250f, 0.380584793742559550f, 0.380208298983109930f, - 0.379831790244487540f, - 0.379455267540536490f, 0.379078730885099520f, 0.378702180292021630f, - 0.378325615775147170f, - 0.377949037348320800f, 0.377572445025389230f, 0.377195838820197690f, - 0.376819218746593910f, - 0.376442584818424570f, 0.376065937049537060f, 0.375689275453780500f, - 0.375312600045002780f, - 0.374935910837054080f, 0.374559207843783660f, 0.374182491079041500f, - 0.373805760556679190f, - 0.373429016290547200f, 0.373052258294498230f, 0.372675486582383640f, - 0.372298701168057190f, - 0.371921902065371730f, 0.371545089288180640f, 0.371168262850339210f, - 0.370791422765701320f, - 0.370414569048123140f, 0.370037701711460170f, 0.369660820769568240f, - 0.369283926236305070f, - 0.368907018125527120f, 0.368530096451093140f, 0.368153161226860980f, - 0.367776212466689010f, - 0.367399250184437480f, 0.367022274393965340f, 0.366645285109133750f, - 0.366268282343803150f, - 0.365891266111834370f, 0.365514236427090080f, 0.365137193303431750f, - 0.364760136754723020f, - 0.364383066794826350f, 0.364005983437606320f, 0.363628886696926890f, - 0.363251776586652310f, - 0.362874653120648700f, 0.362497516312780990f, 0.362120366176916230f, - 0.361743202726920790f, - 0.361366025976661450f, 0.360988835940006750f, 0.360611632630824020f, - 0.360234416062982840f, - 0.359857186250351960f, 0.359479943206800550f, 0.359102686946199680f, - 0.358725417482419150f, - 0.358348134829330870f, 0.357970839000806010f, 0.357593530010716310f, - 0.357216207872935120f, - 0.356838872601334680f, 0.356461524209789380f, 0.356084162712172360f, - 0.355706788122359060f, - 0.355329400454223950f, 0.354951999721642100f, 0.354574585938490280f, - 0.354197159118644080f, - 0.353819719275981330f, 0.353442266424378930f, 0.353064800577714280f, - 0.352687321749866610f, - 0.352309829954713830f, 0.351932325206136210f, 0.351554807518012990f, - 0.351177276904224070f, - 0.350799733378650890f, 0.350422176955173910f, 0.350044607647675640f, - 0.349667025470037810f, - 0.349289430436142520f, 0.348911822559873850f, 0.348534201855114360f, - 0.348156568335749040f, - 0.347778922015661520f, 0.347401262908737570f, 0.347023591028862320f, - 0.346645906389921150f, - 0.346268209005801410f, 0.345890498890388980f, 0.345512776057572080f, - 0.345135040521238170f, - 0.344757292295274910f, 0.344379531393571970f, 0.344001757830017680f, - 0.343623971618502560f, - 0.343246172772916250f, 0.342868361307148980f, 0.342490537235092600f, - 0.342112700570637750f, - 0.341734851327677280f, 0.341356989520103240f, 0.340979115161808070f, - 0.340601228266685980f, - 0.340223328848629880f, 0.339845416921535030f, 0.339467492499295200f, - 0.339089555595806560f, - 0.338711606224964210f, 0.338333644400663940f, 0.337955670136803170f, - 0.337577683447278010f, - 0.337199684345986910f, 0.336821672846827290f, 0.336443648963697160f, - 0.336065612710496290f, - 0.335687564101123050f, 0.335309503149478110f, 0.334931429869461230f, - 0.334553344274972690f, - 0.334175246379914470f, 0.333797136198187240f, 0.333419013743693980f, - 0.333040879030336690f, - 0.332662732072017800f, 0.332284572882641680f, 0.331906401476111280f, - 0.331528217866331690f, - 0.331150022067206780f, 0.330771814092642610f, 0.330393593956544440f, - 0.330015361672817750f, - 0.329637117255370090f, 0.329258860718107450f, 0.328880592074938190f, - 0.328502311339769700f, - 0.328124018526509800f, 0.327745713649068180f, 0.327367396721353070f, - 0.326989067757275040f, - 0.326610726770743760f, 0.326232373775669270f, 0.325854008785963320f, - 0.325475631815536570f, - 0.325097242878301660f, 0.324718841988170470f, 0.324340429159055250f, - 0.323962004404870050f, - 0.323583567739527570f, 0.323205119176942720f, 0.322826658731029110f, - 0.322448186415702550f, - 0.322069702244877910f, 0.321691206232470550f, 0.321312698392397570f, - 0.320934178738574720f, - 0.320555647284919980f, 0.320177104045350440f, 0.319798549033783570f, - 0.319419982264138650f, - 0.319041403750333630f, 0.318662813506288670f, 0.318284211545923010f, - 0.317905597883156250f, - 0.317526972531909870f, 0.317148335506103940f, 0.316769686819660780f, - 0.316391026486501690f, - 0.316012354520548600f, 0.315633670935725030f, 0.315254975745953180f, - 0.314876268965157470f, - 0.314497550607261090f, 0.314118820686189180f, 0.313740079215866160f, - 0.313361326210216840f, - 0.312982561683167790f, 0.312603785648644220f, 0.312224998120573420f, - 0.311846199112882030f, - 0.311467388639496860f, 0.311088566714346650f, 0.310709733351358600f, - 0.310330888564462340f, - 0.309952032367586390f, 0.309573164774659850f, 0.309194285799613390f, - 0.308815395456376430f, - 0.308436493758880660f, 0.308057580721056660f, 0.307678656356835560f, - 0.307299720680150270f, - 0.306920773704932260f, 0.306541815445115160f, 0.306162845914631390f, - 0.305783865127415400f, - 0.305404873097400780f, 0.305025869838521590f, 0.304646855364713530f, - 0.304267829689911010f, - 0.303888792828050650f, 0.303509744793068030f, 0.303130685598899270f, - 0.302751615259482190f, - 0.302372533788753170f, 0.301993441200650910f, 0.301614337509113100f, - 0.301235222728077840f, - 0.300856096871485010f, 0.300476959953273060f, 0.300097811987382670f, - 0.299718652987753580f, - 0.299339482968325970f, 0.298960301943041680f, 0.298581109925841300f, - 0.298201906930667390f, - 0.297822692971461410f, 0.297443468062166820f, 0.297064232216726120f, - 0.296684985449082390f, - 0.296305727773180260f, 0.295926459202963120f, 0.295547179752376430f, - 0.295167889435364820f, - 0.294788588265873170f, 0.294409276257848300f, 0.294029953425235520f, - 0.293650619781982260f, - 0.293271275342035120f, 0.292891920119341120f, 0.292512554127848930f, - 0.292133177381505850f, - 0.291753789894261320f, 0.291374391680063520f, 0.290994982752862730f, - 0.290615563126608250f, - 0.290236132815249790f, 0.289856691832738880f, 0.289477240193025510f, - 0.289097777910061970f, - 0.288718304997799550f, 0.288338821470189910f, 0.287959327341186510f, - 0.287579822624741350f, - 0.287200307334808670f, 0.286820781485341620f, 0.286441245090293950f, - 0.286061698163620930f, - 0.285682140719276560f, 0.285302572771216960f, 0.284922994333397350f, - 0.284543405419773240f, - 0.284163806044301910f, 0.283784196220939370f, 0.283404575963643550f, - 0.283024945286371230f, - 0.282645304203081090f, 0.282265652727731130f, 0.281885990874279570f, - 0.281506318656686290f, - 0.281126636088910030f, 0.280746943184911340f, 0.280367239958650150f, - 0.279987526424086530f, - 0.279607802595182420f, 0.279228068485898210f, 0.278848324110196550f, - 0.278468569482039130f, - 0.278088804615388040f, 0.277709029524206950f, 0.277329244222458250f, - 0.276949448724106480f, - 0.276569643043115150f, 0.276189827193448200f, 0.275810001189071290f, - 0.275430165043948570f, - 0.275050318772046500f, 0.274670462387330010f, 0.274290595903766200f, - 0.273910719335321300f, - 0.273530832695961790f, 0.273150935999655950f, 0.272771029260370560f, - 0.272391112492074590f, - 0.272011185708736060f, 0.271631248924323390f, 0.271251302152806570f, - 0.270871345408154380f, - 0.270491378704337540f, 0.270111402055325910f, 0.269731415475089780f, - 0.269351418977600950f, - 0.268971412576829990f, 0.268591396286749500f, 0.268211370121331170f, - 0.267831334094547010f, - 0.267451288220370730f, 0.267071232512774700f, 0.266691166985733360f, - 0.266311091653219700f, - 0.265931006529208920f, 0.265550911627675250f, 0.265170806962593210f, - 0.264790692547939020f, - 0.264410568397687560f, 0.264030434525815760f, 0.263650290946299660f, - 0.263270137673115630f, - 0.262889974720241610f, 0.262509802101654310f, 0.262129619831332370f, - 0.261749427923253670f, - 0.261369226391396310f, 0.260989015249740050f, 0.260608794512263380f, - 0.260228564192946710f, - 0.259848324305769600f, 0.259468074864711960f, 0.259087815883755400f, - 0.258707547376880010f, - 0.258327269358068100f, 0.257946981841300490f, 0.257566684840560170f, - 0.257186378369829110f, - 0.256806062443089680f, 0.256425737074325920f, 0.256045402277520320f, - 0.255665058066657680f, - 0.255284704455721660f, 0.254904341458696390f, 0.254523969089567590f, - 0.254143587362319620f, - 0.253763196290938850f, 0.253382795889410710f, 0.253002386171721110f, - 0.252621967151857420f, - 0.252241538843805680f, 0.251861101261554090f, 0.251480654419089730f, - 0.251100198330400150f, - 0.250719733009474530f, 0.250339258470300590f, 0.249958774726868170f, - 0.249578281793165680f, - 0.249197779683183660f, 0.248817268410911650f, 0.248436747990339490f, - 0.248056218435458720f, - 0.247675679760259450f, 0.247295131978733870f, 0.246914575104873220f, - 0.246534009152669040f, - 0.246153434136114490f, 0.245772850069201410f, 0.245392256965923620f, - 0.245011654840274010f, - 0.244631043706245800f, 0.244250423577833860f, 0.243869794469031620f, - 0.243489156393834590f, - 0.243108509366237320f, 0.242727853400234670f, 0.242347188509823150f, - 0.241966514708997830f, - 0.241585832011755900f, 0.241205140432093070f, 0.240824439984007180f, - 0.240443730681495050f, - 0.240063012538553830f, 0.239682285569182310f, 0.239301549787377890f, - 0.238920805207139960f, - 0.238540051842467020f, 0.238159289707357810f, 0.237778518815812740f, - 0.237397739181830820f, - 0.237016950819413100f, 0.236636153742559610f, 0.236255347965270780f, - 0.235874533501548580f, - 0.235493710365393630f, 0.235112878570808560f, 0.234732038131795020f, - 0.234351189062355030f, - 0.233970331376492150f, 0.233589465088208580f, 0.233208590211508550f, - 0.232827706760394850f, - 0.232446814748872410f, 0.232065914190945020f, 0.231685005100616930f, - 0.231304087491893930f, - 0.230923161378780380f, 0.230542226775282770f, 0.230161283695406500f, - 0.229780332153157300f, - 0.229399372162542610f, 0.229018403737568290f, 0.228637426892242400f, - 0.228256441640571880f, - 0.227875447996564060f, 0.227494445974227850f, 0.227113435587570770f, - 0.226732416850602300f, - 0.226351389777330990f, 0.225970354381765690f, 0.225589310677916880f, - 0.225208258679793520f, - 0.224827198401406690f, 0.224446129856766040f, 0.224065053059883250f, - 0.223683968024768950f, - 0.223302874765434120f, 0.222921773295891380f, 0.222540663630151820f, - 0.222159545782228660f, - 0.221778419766134050f, 0.221397285595880480f, 0.221016143285482050f, - 0.220634992848951380f, - 0.220253834300303180f, 0.219872667653551100f, 0.219491492922709110f, - 0.219110310121792800f, - 0.218729119264816280f, 0.218347920365795780f, 0.217966713438746380f, - 0.217585498497683580f, - 0.217204275556624420f, 0.216823044629584520f, 0.216441805730581500f, - 0.216060558873631570f, - 0.215679304072752960f, 0.215298041341962870f, 0.214916770695278810f, - 0.214535492146719880f, - 0.214154205710303750f, 0.213772911400050090f, 0.213391609229977570f, - 0.213010299214105140f, - 0.212628981366453330f, 0.212247655701041290f, 0.211866322231890090f, - 0.211484980973019880f, - 0.211103631938451000f, 0.210722275142205480f, 0.210340910598303870f, - 0.209959538320768660f, - 0.209578158323621420f, 0.209196770620883960f, 0.208815375226579670f, - 0.208433972154730530f, - 0.208052561419360520f, 0.207671143034492080f, 0.207289717014149830f, - 0.206908283372357230f, - 0.206526842123138070f, 0.206145393280517730f, 0.205763936858520150f, - 0.205382472871171230f, - 0.205001001332495910f, 0.204619522256519300f, 0.204238035657268250f, - 0.203856541548768030f, - 0.203475039945045950f, 0.203093530860128300f, 0.202712014308041620f, - 0.202330490302814110f, - 0.201948958858472420f, 0.201567419989045200f, 0.201185873708560170f, - 0.200804320031045230f, - 0.200422758970529910f, 0.200041190541042220f, 0.199659614756612230f, - 0.199278031631268500f, - 0.198896441179041650f, 0.198514843413961220f, 0.198133238350057030f, - 0.197751626001360480f, - 0.197370006381901520f, 0.196988379505712050f, 0.196606745386822960f, - 0.196225104039265410f, - 0.195843455477072190f, 0.195461799714274460f, 0.195080136764905570f, - 0.194698466642997730f, - 0.194316789362583340f, 0.193935104937696560f, 0.193553413382369890f, - 0.193171714710637930f, - 0.192790008936534220f, 0.192408296074092570f, 0.192026576137348330f, - 0.191644849140335360f, - 0.191263115097089540f, 0.190881374021645320f, 0.190499625928039040f, - 0.190117870830306100f, - 0.189736108742482030f, 0.189354339678604100f, 0.188972563652707950f, - 0.188590780678831250f, - 0.188208990771010640f, 0.187827193943283040f, 0.187445390209686870f, - 0.187063579584259070f, - 0.186681762081038650f, 0.186299937714063470f, 0.185918106497371700f, - 0.185536268445003070f, - 0.185154423570995760f, 0.184772571889390000f, 0.184390713414225000f, - 0.184008848159540110f, - 0.183626976139376310f, 0.183245097367773090f, 0.182863211858771880f, - 0.182481319626412670f, - 0.182099420684737420f, 0.181717515047787020f, 0.181335602729602590f, - 0.180953683744226880f, - 0.180571758105701030f, 0.180189825828068250f, 0.179807886925370670f, - 0.179425941411650660f, - 0.179043989300952110f, 0.178662030607317450f, 0.178280065344791100f, - 0.177898093527416370f, - 0.177516115169236820f, 0.177134130284297610f, 0.176752138886642350f, - 0.176370140990316640f, - 0.175988136609365020f, 0.175606125757832240f, 0.175224108449764660f, - 0.174842084699207030f, - 0.174460054520206240f, 0.174078017926807490f, 0.173695974933058080f, - 0.173313925553004180f, - 0.172931869800692250f, 0.172549807690170230f, 0.172167739235484620f, - 0.171785664450683800f, - 0.171403583349815180f, 0.171021495946926340f, 0.170639402256066410f, - 0.170257302291283000f, - 0.169875196066625710f, 0.169493083596143100f, 0.169110964893883830f, - 0.168728839973898290f, - 0.168346708850235140f, 0.167964571536945220f, 0.167582428048078130f, - 0.167200278397683750f, - 0.166818122599813570f, 0.166435960668517400f, 0.166053792617847200f, - 0.165671618461853270f, - 0.165289438214587970f, 0.164907251890102520f, 0.164525059502448390f, - 0.164142861065678550f, - 0.163760656593844480f, 0.163378446100999640f, 0.162996229601196390f, - 0.162614007108487250f, - 0.162231778636926370f, 0.161849544200566300f, 0.161467303813461580f, - 0.161085057489665670f, - 0.160702805243232240f, 0.160320547088216470f, 0.159938283038672050f, - 0.159556013108654580f, - 0.159173737312218650f, 0.158791455663418930f, 0.158409168176311760f, - 0.158026874864951870f, - 0.157644575743395960f, 0.157262270825699210f, 0.156879960125918730f, - 0.156497643658110590f, - 0.156115321436331000f, 0.155732993474637760f, 0.155350659787087090f, - 0.154968320387737170f, - 0.154585975290645110f, 0.154203624509868190f, 0.153821268059465250f, - 0.153438905953493550f, - 0.153056538206012340f, 0.152674164831079730f, 0.152291785842754070f, - 0.151909401255095250f, - 0.151527011082161540f, 0.151144615338013210f, 0.150762214036709470f, - 0.150379807192309620f, - 0.149997394818874590f, 0.149614976930463660f, 0.149232553541138180f, - 0.148850124664957870f, - 0.148467690315984390f, 0.148085250508278370f, 0.147702805255900570f, - 0.147320354572913260f, - 0.146937898473377210f, 0.146555436971355090f, 0.146172970080908520f, - 0.145790497816099230f, - 0.145408020190990560f, 0.145025537219644170f, 0.144643048916123810f, - 0.144260555294492000f, - 0.143878056368811510f, 0.143495552153146630f, 0.143113042661560050f, - 0.142730527908116440f, - 0.142348007906879320f, 0.141965482671912420f, 0.141582952217280980f, - 0.141200416557048680f, - 0.140817875705281120f, 0.140435329676042390f, 0.140052778483398480f, - 0.139670222141414250f, - 0.139287660664154770f, 0.138905094065686600f, 0.138522522360074780f, - 0.138139945561386200f, - 0.137757363683686740f, 0.137374776741042340f, 0.136992184747520560f, - 0.136609587717187310f, - 0.136226985664110460f, 0.135844378602356760f, 0.135461766545993150f, - 0.135079149509088060f, - 0.134696527505708320f, 0.134313900549922760f, 0.133931268655799020f, - 0.133548631837404950f, - 0.133165990108809860f, 0.132783343484081580f, 0.132400691977289760f, - 0.132018035602502530f, - 0.131635374373789940f, 0.131252708305220960f, 0.130870037410864640f, - 0.130487361704791580f, - 0.130104681201070800f, 0.129721995913773260f, 0.129339305856968730f, - 0.128956611044727220f, - 0.128573911491120210f, 0.128191207210217570f, 0.127808498216091110f, - 0.127425784522811530f, - 0.127043066144449680f, 0.126660343095077900f, 0.126277615388766920f, - 0.125894883039589430f, - 0.125512146061616980f, 0.125129404468921260f, 0.124746658275575490f, - 0.124363907495651240f, - 0.123981152143222060f, 0.123598392232359880f, 0.123215627777138580f, - 0.122832858791630880f, - 0.122450085289909640f, 0.122067307286049230f, 0.121684524794122440f, - 0.121301737828203960f, - 0.120918946402367330f, 0.120536150530686250f, 0.120153350227235940f, - 0.119770545506089950f, - 0.119387736381323830f, 0.119004922867011920f, 0.118622104977228730f, - 0.118239282726050290f, - 0.117856456127550970f, 0.117473625195807100f, 0.117090789944893860f, - 0.116707950388886520f, - 0.116325106541861910f, 0.115942258417895240f, 0.115559406031063570f, - 0.115176549395442460f, - 0.114793688525109290f, 0.114410823434140360f, 0.114027954136612060f, - 0.113645080646602280f, - 0.113262202978187320f, 0.112879321145445350f, 0.112496435162453430f, - 0.112113545043288730f, - 0.111730650802029900f, 0.111347752452754000f, 0.110964850009539970f, - 0.110581943486465610f, - 0.110199032897608850f, 0.109816118257049110f, 0.109433199578864170f, - 0.109050276877133770f, - 0.108667350165936400f, 0.108284419459350770f, 0.107901484771457020f, - 0.107518546116333660f, - 0.107135603508061170f, 0.106752656960718350f, 0.106369706488385940f, - 0.105986752105143480f, - 0.105603793825070680f, 0.105220831662248700f, 0.104837865630757090f, - 0.104454895744677270f, - 0.104071922018089540f, 0.103688944465074300f, 0.103305963099713400f, - 0.102922977936087120f, - 0.102539988988277600f, 0.102156996270365800f, 0.101773999796432830f, - 0.101390999580561250f, - 0.101007995636832020f, 0.100624987979327970f, 0.100241976622130760f, - 0.099858961579322170f, - 0.099475942864985456f, 0.099092920493202258f, 0.098709894478056073f, - 0.098326864833628791f, - 0.097943831574004214f, 0.097560794713264939f, 0.097177754265493674f, - 0.096794710244774623f, - 0.096411662665190329f, 0.096028611540825232f, 0.095645556885762609f, - 0.095262498714085819f, - 0.094879437039879722f, 0.094496371877227495f, 0.094113303240214247f, - 0.093730231142923864f, - 0.093347155599440373f, 0.092964076623849271f, 0.092580994230234359f, - 0.092197908432681386f, - 0.091814819245274432f, 0.091431726682099479f, 0.091048630757241303f, - 0.090665531484784803f, - 0.090282428878816323f, 0.089899322953420582f, 0.089516213722684160f, - 0.089133101200692441f, - 0.088749985401530951f, 0.088366866339286629f, 0.087983744028044805f, - 0.087600618481892656f, - 0.087217489714916191f, 0.086834357741201490f, 0.086451222574836131f, - 0.086068084229906014f, - 0.085684942720498897f, 0.085301798060701386f, 0.084918650264600160f, - 0.084535499346283349f, - 0.084152345319837438f, 0.083769188199350780f, 0.083386027998910095f, - 0.083002864732603973f, - 0.082619698414519799f, 0.082236529058745025f, 0.081853356679368619f, - 0.081470181290477811f, - 0.081087002906161790f, 0.080703821540508452f, 0.080320637207605849f, - 0.079937449921543474f, - 0.079554259696409127f, 0.079171066546292510f, 0.078787870485282088f, - 0.078404671527466441f, - 0.078021469686935602f, 0.077638264977777913f, 0.077255057414083589f, - 0.076871847009941652f, - 0.076488633779441206f, 0.076105417736672773f, 0.075722198895725248f, - 0.075338977270689375f, - 0.074955752875654230f, 0.074572525724710764f, 0.074189295831948693f, - 0.073806063211457842f, - 0.073422827877329483f, 0.073039589843653177f, 0.072656349124520389f, - 0.072273105734021334f, - 0.071889859686246352f, 0.071506610995287156f, 0.071123359675233852f, - 0.070740105740178361f, - 0.070356849204211397f, 0.069973590081423773f, 0.069590328385907715f, - 0.069207064131753759f, - 0.068823797333054326f, 0.068440528003900616f, 0.068057256158383886f, - 0.067673981810596848f, - 0.067290704974630494f, 0.066907425664577733f, 0.066524143894529736f, - 0.066140859678579578f, - 0.065757573030819083f, 0.065374283965340146f, 0.064990992496236119f, - 0.064607698637598646f, - 0.064224402403521202f, 0.063841103808096086f, 0.063457802865415636f, - 0.063074499589573618f, - 0.062691193994662109f, 0.062307886094775049f, 0.061924575904005130f, - 0.061541263436445129f, - 0.061157948706189229f, 0.060774631727329942f, 0.060391312513961619f, - 0.060007991080177375f, - 0.059624667440070382f, 0.059241341607735261f, 0.058858013597264912f, - 0.058474683422754095f, - 0.058091351098295878f, 0.057708016637985186f, 0.057324680055915692f, - 0.056941341366181127f, - 0.056558000582876661f, 0.056174657720095743f, 0.055791312791933681f, - 0.055407965812484541f, - 0.055024616795842439f, 0.054641265756102911f, 0.054257912707359794f, - 0.053874557663708772f, - 0.053491200639244271f, 0.053107841648060788f, 0.052724480704254229f, - 0.052341117821918783f, - 0.051957753015150501f, 0.051574386298044173f, 0.051191017684694640f, - 0.050807647189198162f, - 0.050424274825649297f, 0.050040900608144430f, 0.049657524550778251f, - 0.049274146667647289f, - 0.048890766972846805f, 0.048507385480472134f, 0.048124002204620014f, - 0.047740617159385448f, - 0.047357230358865306f, 0.046973841817155179f, 0.046590451548350717f, - 0.046207059566548990f, - 0.045823665885845313f, 0.045440270520336883f, 0.045056873484119603f, - 0.044673474791289434f, - 0.044290074455943754f, 0.043906672492178188f, 0.043523268914090238f, - 0.043139863735776100f, - 0.042756456971332048f, 0.042373048634855741f, 0.041989638740443119f, - 0.041606227302191955f, - 0.041222814334198304f, 0.040839399850560058f, 0.040455983865373815f, - 0.040072566392736257f, - 0.039689147446745419f, 0.039305727041497644f, 0.038922305191091085f, - 0.038538881909622631f, - 0.038155457211189216f, 0.037772031109889144f, 0.037388603619819022f, - 0.037005174755077273f, - 0.036621744529761024f, 0.036238312957967478f, 0.035854880053795196f, - 0.035471445831341021f, - 0.035088010304703626f, 0.034704573487980395f, 0.034321135395268765f, - 0.033937696040667535f, - 0.033554255438273790f, 0.033170813602186440f, 0.032787370546502645f, - 0.032403926285321405f, - 0.032020480832740429f, 0.031637034202857461f, 0.031253586409771626f, - 0.030870137467580314f, - 0.030486687390382738f, 0.030103236192276818f, 0.029719783887360508f, - 0.029336330489733147f, - 0.028952876013492331f, 0.028569420472737472f, 0.028185963881566689f, - 0.027802506254078142f, - 0.027419047604371360f, 0.027035587946544135f, 0.026652127294696067f, - 0.026268665662925468f, - 0.025885203065330677f, 0.025501739516011413f, 0.025118275029065638f, - 0.024734809618593138f, - 0.024351343298691951f, 0.023967876083461924f, 0.023584407987001611f, - 0.023200939023409587f, - 0.022817469206785804f, 0.022433998551228459f, 0.022050527070837558f, - 0.021667054779711814f, - 0.021283581691949955f, 0.020900107821652084f, 0.020516633182916549f, - 0.020133157789843505f, - 0.019749681656531803f, 0.019366204797080316f, 0.018982727225589285f, - 0.018599248956157190f, - 0.018215770002884327f, 0.017832290379869671f, 0.017448810101212228f, - 0.017065329181012358f, - 0.016681847633368677f, 0.016298365472381587f, 0.015914882712149747f, - 0.015531399366773606f, - 0.015147915450352307f, 0.014764430976985016f, 0.014380945960772247f, - 0.013997460415812761f, - 0.013613974356207112f, 0.013230487796054543f, 0.012847000749454314f, - 0.012463513230507034f, - 0.012080025253311559f, 0.011696536831968529f, 0.011313047980577277f, - 0.010929558713237145f, - 0.010546069044048827f, 0.010162578987111254f, 0.009779088556525145f, - 0.009395597766389905f, - 0.009012106630804949f, 0.008628615163871038f, 0.008245123379687167f, - 0.007861631292354124f, - 0.007478138915970929f, 0.007094646264638386f, 0.006711153352455981f, - 0.006327660193523208f, - 0.005944166801940901f, 0.005560673191808128f, 0.005177179377225743f, - 0.004793685372293270f, - 0.004410191191110246f, 0.004026696847777542f, 0.003643202356394263f, - 0.003259707731061291f, - 0.002876212985878184f, 0.002492718134944503f, 0.002109223192361147f, - 0.001725728172227238f, - 0.001342233088643682f, 0.000958737955710053f, 0.000575242787525925f, - 0.000191747598192208f -}; - #endif - -/** - @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. - */ - -/** - @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. -*/ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_128) - - const q15_t __ALIGNED(4) WeightsQ15_128[256] = { - (q15_t)0x7fff, (q15_t)0x0, (q15_t)0x7ffd, (q15_t)0xfe6e, (q15_t)0x7ff6, (q15_t)0xfcdc, (q15_t)0x7fe9, (q15_t)0xfb4a, - (q15_t)0x7fd8, (q15_t)0xf9b9, (q15_t)0x7fc2, (q15_t)0xf827, (q15_t)0x7fa7, (q15_t)0xf696, (q15_t)0x7f87, (q15_t)0xf505, - (q15_t)0x7f62, (q15_t)0xf375, (q15_t)0x7f38, (q15_t)0xf1e5, (q15_t)0x7f09, (q15_t)0xf055, (q15_t)0x7ed5, (q15_t)0xeec7, - (q15_t)0x7e9d, (q15_t)0xed38, (q15_t)0x7e5f, (q15_t)0xebab, (q15_t)0x7e1d, (q15_t)0xea1e, (q15_t)0x7dd6, (q15_t)0xe893, - (q15_t)0x7d8a, (q15_t)0xe708, (q15_t)0x7d39, (q15_t)0xe57e, (q15_t)0x7ce3, (q15_t)0xe3f5, (q15_t)0x7c89, (q15_t)0xe26d, - (q15_t)0x7c29, (q15_t)0xe0e7, (q15_t)0x7bc5, (q15_t)0xdf61, (q15_t)0x7b5d, (q15_t)0xdddd, (q15_t)0x7aef, (q15_t)0xdc5a, - (q15_t)0x7a7d, (q15_t)0xdad8, (q15_t)0x7a05, (q15_t)0xd958, (q15_t)0x798a, (q15_t)0xd7da, (q15_t)0x7909, (q15_t)0xd65d, - (q15_t)0x7884, (q15_t)0xd4e1, (q15_t)0x77fa, (q15_t)0xd368, (q15_t)0x776c, (q15_t)0xd1ef, (q15_t)0x76d9, (q15_t)0xd079, - (q15_t)0x7641, (q15_t)0xcf05, (q15_t)0x75a5, (q15_t)0xcd92, (q15_t)0x7504, (q15_t)0xcc22, (q15_t)0x745f, (q15_t)0xcab3, - (q15_t)0x73b5, (q15_t)0xc946, (q15_t)0x7307, (q15_t)0xc7dc, (q15_t)0x7255, (q15_t)0xc674, (q15_t)0x719e, (q15_t)0xc50e, - (q15_t)0x70e2, (q15_t)0xc3aa, (q15_t)0x7023, (q15_t)0xc248, (q15_t)0x6f5f, (q15_t)0xc0e9, (q15_t)0x6e96, (q15_t)0xbf8d, - (q15_t)0x6dca, (q15_t)0xbe32, (q15_t)0x6cf9, (q15_t)0xbcdb, (q15_t)0x6c24, (q15_t)0xbb86, (q15_t)0x6b4a, (q15_t)0xba33, - (q15_t)0x6a6d, (q15_t)0xb8e4, (q15_t)0x698c, (q15_t)0xb797, (q15_t)0x68a6, (q15_t)0xb64c, (q15_t)0x67bd, (q15_t)0xb505, - (q15_t)0x66cf, (q15_t)0xb3c1, (q15_t)0x65dd, (q15_t)0xb27f, (q15_t)0x64e8, (q15_t)0xb141, (q15_t)0x63ef, (q15_t)0xb005, - (q15_t)0x62f2, (q15_t)0xaecd, (q15_t)0x61f1, (q15_t)0xad97, (q15_t)0x60ec, (q15_t)0xac65, (q15_t)0x5fe3, (q15_t)0xab36, - (q15_t)0x5ed7, (q15_t)0xaa0b, (q15_t)0x5dc7, (q15_t)0xa8e3, (q15_t)0x5cb4, (q15_t)0xa7be, (q15_t)0x5b9d, (q15_t)0xa69c, - (q15_t)0x5a82, (q15_t)0xa57e, (q15_t)0x5964, (q15_t)0xa463, (q15_t)0x5842, (q15_t)0xa34c, (q15_t)0x571d, (q15_t)0xa239, - (q15_t)0x55f5, (q15_t)0xa129, (q15_t)0x54ca, (q15_t)0xa01d, (q15_t)0x539b, (q15_t)0x9f14, (q15_t)0x5269, (q15_t)0x9e0f, - (q15_t)0x5133, (q15_t)0x9d0e, (q15_t)0x4ffb, (q15_t)0x9c11, (q15_t)0x4ebf, (q15_t)0x9b18, (q15_t)0x4d81, (q15_t)0x9a23, - (q15_t)0x4c3f, (q15_t)0x9931, (q15_t)0x4afb, (q15_t)0x9843, (q15_t)0x49b4, (q15_t)0x975a, (q15_t)0x4869, (q15_t)0x9674, - (q15_t)0x471c, (q15_t)0x9593, (q15_t)0x45cd, (q15_t)0x94b6, (q15_t)0x447a, (q15_t)0x93dc, (q15_t)0x4325, (q15_t)0x9307, - (q15_t)0x41ce, (q15_t)0x9236, (q15_t)0x4073, (q15_t)0x916a, (q15_t)0x3f17, (q15_t)0x90a1, (q15_t)0x3db8, (q15_t)0x8fdd, - (q15_t)0x3c56, (q15_t)0x8f1e, (q15_t)0x3af2, (q15_t)0x8e62, (q15_t)0x398c, (q15_t)0x8dab, (q15_t)0x3824, (q15_t)0x8cf9, - (q15_t)0x36ba, (q15_t)0x8c4b, (q15_t)0x354d, (q15_t)0x8ba1, (q15_t)0x33de, (q15_t)0x8afc, (q15_t)0x326e, (q15_t)0x8a5b, - (q15_t)0x30fb, (q15_t)0x89bf, (q15_t)0x2f87, (q15_t)0x8927, (q15_t)0x2e11, (q15_t)0x8894, (q15_t)0x2c98, (q15_t)0x8806, - (q15_t)0x2b1f, (q15_t)0x877c, (q15_t)0x29a3, (q15_t)0x86f7, (q15_t)0x2826, (q15_t)0x8676, (q15_t)0x26a8, (q15_t)0x85fb, - (q15_t)0x2528, (q15_t)0x8583, (q15_t)0x23a6, (q15_t)0x8511, (q15_t)0x2223, (q15_t)0x84a3, (q15_t)0x209f, (q15_t)0x843b, - (q15_t)0x1f19, (q15_t)0x83d7, (q15_t)0x1d93, (q15_t)0x8377, (q15_t)0x1c0b, (q15_t)0x831d, (q15_t)0x1a82, (q15_t)0x82c7, - (q15_t)0x18f8, (q15_t)0x8276, (q15_t)0x176d, (q15_t)0x822a, (q15_t)0x15e2, (q15_t)0x81e3, (q15_t)0x1455, (q15_t)0x81a1, - (q15_t)0x12c8, (q15_t)0x8163, (q15_t)0x1139, (q15_t)0x812b, (q15_t)0xfab, (q15_t)0x80f7, (q15_t)0xe1b, (q15_t)0x80c8, - (q15_t)0xc8b, (q15_t)0x809e, (q15_t)0xafb, (q15_t)0x8079, (q15_t)0x96a, (q15_t)0x8059, (q15_t)0x7d9, (q15_t)0x803e, - (q15_t)0x647, (q15_t)0x8028, (q15_t)0x4b6, (q15_t)0x8017, (q15_t)0x324, (q15_t)0x800a, (q15_t)0x192, (q15_t)0x8003 -}; - const q15_t __ALIGNED(4) cos_factorsQ15_128[128] = { - (q15_t)0x7fff, (q15_t)0x7ffa, (q15_t)0x7ff0, (q15_t)0x7fe1, (q15_t)0x7fce, (q15_t)0x7fb5, (q15_t)0x7f97, (q15_t)0x7f75, - (q15_t)0x7f4d, (q15_t)0x7f21, (q15_t)0x7ef0, (q15_t)0x7eba, (q15_t)0x7e7f, (q15_t)0x7e3f, (q15_t)0x7dfa, (q15_t)0x7db0, - (q15_t)0x7d62, (q15_t)0x7d0f, (q15_t)0x7cb7, (q15_t)0x7c5a, (q15_t)0x7bf8, (q15_t)0x7b92, (q15_t)0x7b26, (q15_t)0x7ab6, - (q15_t)0x7a42, (q15_t)0x79c8, (q15_t)0x794a, (q15_t)0x78c7, (q15_t)0x7840, (q15_t)0x77b4, (q15_t)0x7723, (q15_t)0x768e, - (q15_t)0x75f4, (q15_t)0x7555, (q15_t)0x74b2, (q15_t)0x740b, (q15_t)0x735f, (q15_t)0x72af, (q15_t)0x71fa, (q15_t)0x7141, - (q15_t)0x7083, (q15_t)0x6fc1, (q15_t)0x6efb, (q15_t)0x6e30, (q15_t)0x6d62, (q15_t)0x6c8f, (q15_t)0x6bb8, (q15_t)0x6adc, - (q15_t)0x69fd, (q15_t)0x6919, (q15_t)0x6832, (q15_t)0x6746, (q15_t)0x6657, (q15_t)0x6563, (q15_t)0x646c, (q15_t)0x6371, - (q15_t)0x6271, (q15_t)0x616f, (q15_t)0x6068, (q15_t)0x5f5e, (q15_t)0x5e50, (q15_t)0x5d3e, (q15_t)0x5c29, (q15_t)0x5b10, - (q15_t)0x59f3, (q15_t)0x58d4, (q15_t)0x57b0, (q15_t)0x568a, (q15_t)0x5560, (q15_t)0x5433, (q15_t)0x5302, (q15_t)0x51ce, - (q15_t)0x5097, (q15_t)0x4f5e, (q15_t)0x4e21, (q15_t)0x4ce1, (q15_t)0x4b9e, (q15_t)0x4a58, (q15_t)0x490f, (q15_t)0x47c3, - (q15_t)0x4675, (q15_t)0x4524, (q15_t)0x43d0, (q15_t)0x427a, (q15_t)0x4121, (q15_t)0x3fc5, (q15_t)0x3e68, (q15_t)0x3d07, - (q15_t)0x3ba5, (q15_t)0x3a40, (q15_t)0x38d8, (q15_t)0x376f, (q15_t)0x3604, (q15_t)0x3496, (q15_t)0x3326, (q15_t)0x31b5, - (q15_t)0x3041, (q15_t)0x2ecc, (q15_t)0x2d55, (q15_t)0x2bdc, (q15_t)0x2a61, (q15_t)0x28e5, (q15_t)0x2767, (q15_t)0x25e8, - (q15_t)0x2467, (q15_t)0x22e5, (q15_t)0x2161, (q15_t)0x1fdc, (q15_t)0x1e56, (q15_t)0x1ccf, (q15_t)0x1b47, (q15_t)0x19bd, - (q15_t)0x1833, (q15_t)0x16a8, (q15_t)0x151b, (q15_t)0x138e, (q15_t)0x1201, (q15_t)0x1072, (q15_t)0xee3, (q15_t)0xd53, - (q15_t)0xbc3, (q15_t)0xa33, (q15_t)0x8a2, (q15_t)0x710, (q15_t)0x57f, (q15_t)0x3ed, (q15_t)0x25b, (q15_t)0xc9 -}; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_512) - const q15_t __ALIGNED(4) WeightsQ15_512[1024] = { - (q15_t)0x7fff, (q15_t)0x0, (q15_t)0x7fff, (q15_t)0xff9c, (q15_t)0x7fff, (q15_t)0xff37, (q15_t)0x7ffe, (q15_t)0xfed3, - (q15_t)0x7ffd, (q15_t)0xfe6e, (q15_t)0x7ffc, (q15_t)0xfe0a, (q15_t)0x7ffa, (q15_t)0xfda5, (q15_t)0x7ff8, (q15_t)0xfd41, - (q15_t)0x7ff6, (q15_t)0xfcdc, (q15_t)0x7ff3, (q15_t)0xfc78, (q15_t)0x7ff0, (q15_t)0xfc13, (q15_t)0x7fed, (q15_t)0xfbaf, - (q15_t)0x7fe9, (q15_t)0xfb4a, (q15_t)0x7fe5, (q15_t)0xfae6, (q15_t)0x7fe1, (q15_t)0xfa81, (q15_t)0x7fdd, (q15_t)0xfa1d, - (q15_t)0x7fd8, (q15_t)0xf9b9, (q15_t)0x7fd3, (q15_t)0xf954, (q15_t)0x7fce, (q15_t)0xf8f0, (q15_t)0x7fc8, (q15_t)0xf88b, - (q15_t)0x7fc2, (q15_t)0xf827, (q15_t)0x7fbc, (q15_t)0xf7c3, (q15_t)0x7fb5, (q15_t)0xf75e, (q15_t)0x7fae, (q15_t)0xf6fa, - (q15_t)0x7fa7, (q15_t)0xf696, (q15_t)0x7f9f, (q15_t)0xf632, (q15_t)0x7f97, (q15_t)0xf5cd, (q15_t)0x7f8f, (q15_t)0xf569, - (q15_t)0x7f87, (q15_t)0xf505, (q15_t)0x7f7e, (q15_t)0xf4a1, (q15_t)0x7f75, (q15_t)0xf43d, (q15_t)0x7f6b, (q15_t)0xf3d9, - (q15_t)0x7f62, (q15_t)0xf375, (q15_t)0x7f58, (q15_t)0xf311, (q15_t)0x7f4d, (q15_t)0xf2ad, (q15_t)0x7f43, (q15_t)0xf249, - (q15_t)0x7f38, (q15_t)0xf1e5, (q15_t)0x7f2d, (q15_t)0xf181, (q15_t)0x7f21, (q15_t)0xf11d, (q15_t)0x7f15, (q15_t)0xf0b9, - (q15_t)0x7f09, (q15_t)0xf055, (q15_t)0x7efd, (q15_t)0xeff2, (q15_t)0x7ef0, (q15_t)0xef8e, (q15_t)0x7ee3, (q15_t)0xef2a, - (q15_t)0x7ed5, (q15_t)0xeec7, (q15_t)0x7ec8, (q15_t)0xee63, (q15_t)0x7eba, (q15_t)0xedff, (q15_t)0x7eab, (q15_t)0xed9c, - (q15_t)0x7e9d, (q15_t)0xed38, (q15_t)0x7e8e, (q15_t)0xecd5, (q15_t)0x7e7f, (q15_t)0xec72, (q15_t)0x7e6f, (q15_t)0xec0e, - (q15_t)0x7e5f, (q15_t)0xebab, (q15_t)0x7e4f, (q15_t)0xeb48, (q15_t)0x7e3f, (q15_t)0xeae5, (q15_t)0x7e2e, (q15_t)0xea81, - (q15_t)0x7e1d, (q15_t)0xea1e, (q15_t)0x7e0c, (q15_t)0xe9bb, (q15_t)0x7dfa, (q15_t)0xe958, (q15_t)0x7de8, (q15_t)0xe8f6, - (q15_t)0x7dd6, (q15_t)0xe893, (q15_t)0x7dc3, (q15_t)0xe830, (q15_t)0x7db0, (q15_t)0xe7cd, (q15_t)0x7d9d, (q15_t)0xe76a, - (q15_t)0x7d8a, (q15_t)0xe708, (q15_t)0x7d76, (q15_t)0xe6a5, (q15_t)0x7d62, (q15_t)0xe643, (q15_t)0x7d4e, (q15_t)0xe5e0, - (q15_t)0x7d39, (q15_t)0xe57e, (q15_t)0x7d24, (q15_t)0xe51c, (q15_t)0x7d0f, (q15_t)0xe4b9, (q15_t)0x7cf9, (q15_t)0xe457, - (q15_t)0x7ce3, (q15_t)0xe3f5, (q15_t)0x7ccd, (q15_t)0xe393, (q15_t)0x7cb7, (q15_t)0xe331, (q15_t)0x7ca0, (q15_t)0xe2cf, - (q15_t)0x7c89, (q15_t)0xe26d, (q15_t)0x7c71, (q15_t)0xe20b, (q15_t)0x7c5a, (q15_t)0xe1aa, (q15_t)0x7c42, (q15_t)0xe148, - (q15_t)0x7c29, (q15_t)0xe0e7, (q15_t)0x7c11, (q15_t)0xe085, (q15_t)0x7bf8, (q15_t)0xe024, (q15_t)0x7bdf, (q15_t)0xdfc2, - (q15_t)0x7bc5, (q15_t)0xdf61, (q15_t)0x7bac, (q15_t)0xdf00, (q15_t)0x7b92, (q15_t)0xde9f, (q15_t)0x7b77, (q15_t)0xde3e, - (q15_t)0x7b5d, (q15_t)0xdddd, (q15_t)0x7b42, (q15_t)0xdd7c, (q15_t)0x7b26, (q15_t)0xdd1b, (q15_t)0x7b0b, (q15_t)0xdcbb, - (q15_t)0x7aef, (q15_t)0xdc5a, (q15_t)0x7ad3, (q15_t)0xdbf9, (q15_t)0x7ab6, (q15_t)0xdb99, (q15_t)0x7a9a, (q15_t)0xdb39, - (q15_t)0x7a7d, (q15_t)0xdad8, (q15_t)0x7a5f, (q15_t)0xda78, (q15_t)0x7a42, (q15_t)0xda18, (q15_t)0x7a24, (q15_t)0xd9b8, - (q15_t)0x7a05, (q15_t)0xd958, (q15_t)0x79e7, (q15_t)0xd8f9, (q15_t)0x79c8, (q15_t)0xd899, (q15_t)0x79a9, (q15_t)0xd839, - (q15_t)0x798a, (q15_t)0xd7da, (q15_t)0x796a, (q15_t)0xd77a, (q15_t)0x794a, (q15_t)0xd71b, (q15_t)0x792a, (q15_t)0xd6bc, - (q15_t)0x7909, (q15_t)0xd65d, (q15_t)0x78e8, (q15_t)0xd5fe, (q15_t)0x78c7, (q15_t)0xd59f, (q15_t)0x78a6, (q15_t)0xd540, - (q15_t)0x7884, (q15_t)0xd4e1, (q15_t)0x7862, (q15_t)0xd483, (q15_t)0x7840, (q15_t)0xd424, (q15_t)0x781d, (q15_t)0xd3c6, - (q15_t)0x77fa, (q15_t)0xd368, (q15_t)0x77d7, (q15_t)0xd309, (q15_t)0x77b4, (q15_t)0xd2ab, (q15_t)0x7790, (q15_t)0xd24d, - (q15_t)0x776c, (q15_t)0xd1ef, (q15_t)0x7747, (q15_t)0xd192, (q15_t)0x7723, (q15_t)0xd134, (q15_t)0x76fe, (q15_t)0xd0d7, - (q15_t)0x76d9, (q15_t)0xd079, (q15_t)0x76b3, (q15_t)0xd01c, (q15_t)0x768e, (q15_t)0xcfbf, (q15_t)0x7668, (q15_t)0xcf62, - (q15_t)0x7641, (q15_t)0xcf05, (q15_t)0x761b, (q15_t)0xcea8, (q15_t)0x75f4, (q15_t)0xce4b, (q15_t)0x75cc, (q15_t)0xcdef, - (q15_t)0x75a5, (q15_t)0xcd92, (q15_t)0x757d, (q15_t)0xcd36, (q15_t)0x7555, (q15_t)0xccda, (q15_t)0x752d, (q15_t)0xcc7e, - (q15_t)0x7504, (q15_t)0xcc22, (q15_t)0x74db, (q15_t)0xcbc6, (q15_t)0x74b2, (q15_t)0xcb6a, (q15_t)0x7489, (q15_t)0xcb0e, - (q15_t)0x745f, (q15_t)0xcab3, (q15_t)0x7435, (q15_t)0xca58, (q15_t)0x740b, (q15_t)0xc9fc, (q15_t)0x73e0, (q15_t)0xc9a1, - (q15_t)0x73b5, (q15_t)0xc946, (q15_t)0x738a, (q15_t)0xc8ec, (q15_t)0x735f, (q15_t)0xc891, (q15_t)0x7333, (q15_t)0xc836, - (q15_t)0x7307, (q15_t)0xc7dc, (q15_t)0x72db, (q15_t)0xc782, (q15_t)0x72af, (q15_t)0xc728, (q15_t)0x7282, (q15_t)0xc6ce, - (q15_t)0x7255, (q15_t)0xc674, (q15_t)0x7227, (q15_t)0xc61a, (q15_t)0x71fa, (q15_t)0xc5c0, (q15_t)0x71cc, (q15_t)0xc567, - (q15_t)0x719e, (q15_t)0xc50e, (q15_t)0x716f, (q15_t)0xc4b4, (q15_t)0x7141, (q15_t)0xc45b, (q15_t)0x7112, (q15_t)0xc403, - (q15_t)0x70e2, (q15_t)0xc3aa, (q15_t)0x70b3, (q15_t)0xc351, (q15_t)0x7083, (q15_t)0xc2f9, (q15_t)0x7053, (q15_t)0xc2a0, - (q15_t)0x7023, (q15_t)0xc248, (q15_t)0x6ff2, (q15_t)0xc1f0, (q15_t)0x6fc1, (q15_t)0xc198, (q15_t)0x6f90, (q15_t)0xc141, - (q15_t)0x6f5f, (q15_t)0xc0e9, (q15_t)0x6f2d, (q15_t)0xc092, (q15_t)0x6efb, (q15_t)0xc03b, (q15_t)0x6ec9, (q15_t)0xbfe3, - (q15_t)0x6e96, (q15_t)0xbf8d, (q15_t)0x6e63, (q15_t)0xbf36, (q15_t)0x6e30, (q15_t)0xbedf, (q15_t)0x6dfd, (q15_t)0xbe89, - (q15_t)0x6dca, (q15_t)0xbe32, (q15_t)0x6d96, (q15_t)0xbddc, (q15_t)0x6d62, (q15_t)0xbd86, (q15_t)0x6d2d, (q15_t)0xbd30, - (q15_t)0x6cf9, (q15_t)0xbcdb, (q15_t)0x6cc4, (q15_t)0xbc85, (q15_t)0x6c8f, (q15_t)0xbc30, (q15_t)0x6c59, (q15_t)0xbbdb, - (q15_t)0x6c24, (q15_t)0xbb86, (q15_t)0x6bee, (q15_t)0xbb31, (q15_t)0x6bb8, (q15_t)0xbadc, (q15_t)0x6b81, (q15_t)0xba88, - (q15_t)0x6b4a, (q15_t)0xba33, (q15_t)0x6b13, (q15_t)0xb9df, (q15_t)0x6adc, (q15_t)0xb98b, (q15_t)0x6aa5, (q15_t)0xb937, - (q15_t)0x6a6d, (q15_t)0xb8e4, (q15_t)0x6a35, (q15_t)0xb890, (q15_t)0x69fd, (q15_t)0xb83d, (q15_t)0x69c4, (q15_t)0xb7ea, - (q15_t)0x698c, (q15_t)0xb797, (q15_t)0x6953, (q15_t)0xb744, (q15_t)0x6919, (q15_t)0xb6f1, (q15_t)0x68e0, (q15_t)0xb69f, - (q15_t)0x68a6, (q15_t)0xb64c, (q15_t)0x686c, (q15_t)0xb5fa, (q15_t)0x6832, (q15_t)0xb5a8, (q15_t)0x67f7, (q15_t)0xb557, - (q15_t)0x67bd, (q15_t)0xb505, (q15_t)0x6782, (q15_t)0xb4b4, (q15_t)0x6746, (q15_t)0xb462, (q15_t)0x670b, (q15_t)0xb411, - (q15_t)0x66cf, (q15_t)0xb3c1, (q15_t)0x6693, (q15_t)0xb370, (q15_t)0x6657, (q15_t)0xb31f, (q15_t)0x661a, (q15_t)0xb2cf, - (q15_t)0x65dd, (q15_t)0xb27f, (q15_t)0x65a0, (q15_t)0xb22f, (q15_t)0x6563, (q15_t)0xb1df, (q15_t)0x6526, (q15_t)0xb190, - (q15_t)0x64e8, (q15_t)0xb141, (q15_t)0x64aa, (q15_t)0xb0f1, (q15_t)0x646c, (q15_t)0xb0a2, (q15_t)0x642d, (q15_t)0xb054, - (q15_t)0x63ef, (q15_t)0xb005, (q15_t)0x63b0, (q15_t)0xafb7, (q15_t)0x6371, (q15_t)0xaf69, (q15_t)0x6331, (q15_t)0xaf1b, - (q15_t)0x62f2, (q15_t)0xaecd, (q15_t)0x62b2, (q15_t)0xae7f, (q15_t)0x6271, (q15_t)0xae32, (q15_t)0x6231, (q15_t)0xade4, - (q15_t)0x61f1, (q15_t)0xad97, (q15_t)0x61b0, (q15_t)0xad4b, (q15_t)0x616f, (q15_t)0xacfe, (q15_t)0x612d, (q15_t)0xacb2, - (q15_t)0x60ec, (q15_t)0xac65, (q15_t)0x60aa, (q15_t)0xac19, (q15_t)0x6068, (q15_t)0xabcd, (q15_t)0x6026, (q15_t)0xab82, - (q15_t)0x5fe3, (q15_t)0xab36, (q15_t)0x5fa0, (q15_t)0xaaeb, (q15_t)0x5f5e, (q15_t)0xaaa0, (q15_t)0x5f1a, (q15_t)0xaa55, - (q15_t)0x5ed7, (q15_t)0xaa0b, (q15_t)0x5e93, (q15_t)0xa9c0, (q15_t)0x5e50, (q15_t)0xa976, (q15_t)0x5e0b, (q15_t)0xa92c, - (q15_t)0x5dc7, (q15_t)0xa8e3, (q15_t)0x5d83, (q15_t)0xa899, (q15_t)0x5d3e, (q15_t)0xa850, (q15_t)0x5cf9, (q15_t)0xa807, - (q15_t)0x5cb4, (q15_t)0xa7be, (q15_t)0x5c6e, (q15_t)0xa775, (q15_t)0x5c29, (q15_t)0xa72c, (q15_t)0x5be3, (q15_t)0xa6e4, - (q15_t)0x5b9d, (q15_t)0xa69c, (q15_t)0x5b56, (q15_t)0xa654, (q15_t)0x5b10, (q15_t)0xa60d, (q15_t)0x5ac9, (q15_t)0xa5c5, - (q15_t)0x5a82, (q15_t)0xa57e, (q15_t)0x5a3b, (q15_t)0xa537, (q15_t)0x59f3, (q15_t)0xa4f0, (q15_t)0x59ac, (q15_t)0xa4aa, - (q15_t)0x5964, (q15_t)0xa463, (q15_t)0x591c, (q15_t)0xa41d, (q15_t)0x58d4, (q15_t)0xa3d7, (q15_t)0x588b, (q15_t)0xa392, - (q15_t)0x5842, (q15_t)0xa34c, (q15_t)0x57f9, (q15_t)0xa307, (q15_t)0x57b0, (q15_t)0xa2c2, (q15_t)0x5767, (q15_t)0xa27d, - (q15_t)0x571d, (q15_t)0xa239, (q15_t)0x56d4, (q15_t)0xa1f5, (q15_t)0x568a, (q15_t)0xa1b0, (q15_t)0x5640, (q15_t)0xa16d, - (q15_t)0x55f5, (q15_t)0xa129, (q15_t)0x55ab, (q15_t)0xa0e6, (q15_t)0x5560, (q15_t)0xa0a2, (q15_t)0x5515, (q15_t)0xa060, - (q15_t)0x54ca, (q15_t)0xa01d, (q15_t)0x547e, (q15_t)0x9fda, (q15_t)0x5433, (q15_t)0x9f98, (q15_t)0x53e7, (q15_t)0x9f56, - (q15_t)0x539b, (q15_t)0x9f14, (q15_t)0x534e, (q15_t)0x9ed3, (q15_t)0x5302, (q15_t)0x9e91, (q15_t)0x52b5, (q15_t)0x9e50, - (q15_t)0x5269, (q15_t)0x9e0f, (q15_t)0x521c, (q15_t)0x9dcf, (q15_t)0x51ce, (q15_t)0x9d8f, (q15_t)0x5181, (q15_t)0x9d4e, - (q15_t)0x5133, (q15_t)0x9d0e, (q15_t)0x50e5, (q15_t)0x9ccf, (q15_t)0x5097, (q15_t)0x9c8f, (q15_t)0x5049, (q15_t)0x9c50, - (q15_t)0x4ffb, (q15_t)0x9c11, (q15_t)0x4fac, (q15_t)0x9bd3, (q15_t)0x4f5e, (q15_t)0x9b94, (q15_t)0x4f0f, (q15_t)0x9b56, - (q15_t)0x4ebf, (q15_t)0x9b18, (q15_t)0x4e70, (q15_t)0x9ada, (q15_t)0x4e21, (q15_t)0x9a9d, (q15_t)0x4dd1, (q15_t)0x9a60, - (q15_t)0x4d81, (q15_t)0x9a23, (q15_t)0x4d31, (q15_t)0x99e6, (q15_t)0x4ce1, (q15_t)0x99a9, (q15_t)0x4c90, (q15_t)0x996d, - (q15_t)0x4c3f, (q15_t)0x9931, (q15_t)0x4bef, (q15_t)0x98f5, (q15_t)0x4b9e, (q15_t)0x98ba, (q15_t)0x4b4c, (q15_t)0x987e, - (q15_t)0x4afb, (q15_t)0x9843, (q15_t)0x4aa9, (q15_t)0x9809, (q15_t)0x4a58, (q15_t)0x97ce, (q15_t)0x4a06, (q15_t)0x9794, - (q15_t)0x49b4, (q15_t)0x975a, (q15_t)0x4961, (q15_t)0x9720, (q15_t)0x490f, (q15_t)0x96e7, (q15_t)0x48bc, (q15_t)0x96ad, - (q15_t)0x4869, (q15_t)0x9674, (q15_t)0x4816, (q15_t)0x963c, (q15_t)0x47c3, (q15_t)0x9603, (q15_t)0x4770, (q15_t)0x95cb, - (q15_t)0x471c, (q15_t)0x9593, (q15_t)0x46c9, (q15_t)0x955b, (q15_t)0x4675, (q15_t)0x9524, (q15_t)0x4621, (q15_t)0x94ed, - (q15_t)0x45cd, (q15_t)0x94b6, (q15_t)0x4578, (q15_t)0x947f, (q15_t)0x4524, (q15_t)0x9448, (q15_t)0x44cf, (q15_t)0x9412, - (q15_t)0x447a, (q15_t)0x93dc, (q15_t)0x4425, (q15_t)0x93a7, (q15_t)0x43d0, (q15_t)0x9371, (q15_t)0x437b, (q15_t)0x933c, - (q15_t)0x4325, (q15_t)0x9307, (q15_t)0x42d0, (q15_t)0x92d3, (q15_t)0x427a, (q15_t)0x929e, (q15_t)0x4224, (q15_t)0x926a, - (q15_t)0x41ce, (q15_t)0x9236, (q15_t)0x4177, (q15_t)0x9203, (q15_t)0x4121, (q15_t)0x91d0, (q15_t)0x40ca, (q15_t)0x919d, - (q15_t)0x4073, (q15_t)0x916a, (q15_t)0x401d, (q15_t)0x9137, (q15_t)0x3fc5, (q15_t)0x9105, (q15_t)0x3f6e, (q15_t)0x90d3, - (q15_t)0x3f17, (q15_t)0x90a1, (q15_t)0x3ebf, (q15_t)0x9070, (q15_t)0x3e68, (q15_t)0x903f, (q15_t)0x3e10, (q15_t)0x900e, - (q15_t)0x3db8, (q15_t)0x8fdd, (q15_t)0x3d60, (q15_t)0x8fad, (q15_t)0x3d07, (q15_t)0x8f7d, (q15_t)0x3caf, (q15_t)0x8f4d, - (q15_t)0x3c56, (q15_t)0x8f1e, (q15_t)0x3bfd, (q15_t)0x8eee, (q15_t)0x3ba5, (q15_t)0x8ebf, (q15_t)0x3b4c, (q15_t)0x8e91, - (q15_t)0x3af2, (q15_t)0x8e62, (q15_t)0x3a99, (q15_t)0x8e34, (q15_t)0x3a40, (q15_t)0x8e06, (q15_t)0x39e6, (q15_t)0x8dd9, - (q15_t)0x398c, (q15_t)0x8dab, (q15_t)0x3932, (q15_t)0x8d7e, (q15_t)0x38d8, (q15_t)0x8d51, (q15_t)0x387e, (q15_t)0x8d25, - (q15_t)0x3824, (q15_t)0x8cf9, (q15_t)0x37ca, (q15_t)0x8ccd, (q15_t)0x376f, (q15_t)0x8ca1, (q15_t)0x3714, (q15_t)0x8c76, - (q15_t)0x36ba, (q15_t)0x8c4b, (q15_t)0x365f, (q15_t)0x8c20, (q15_t)0x3604, (q15_t)0x8bf5, (q15_t)0x35a8, (q15_t)0x8bcb, - (q15_t)0x354d, (q15_t)0x8ba1, (q15_t)0x34f2, (q15_t)0x8b77, (q15_t)0x3496, (q15_t)0x8b4e, (q15_t)0x343a, (q15_t)0x8b25, - (q15_t)0x33de, (q15_t)0x8afc, (q15_t)0x3382, (q15_t)0x8ad3, (q15_t)0x3326, (q15_t)0x8aab, (q15_t)0x32ca, (q15_t)0x8a83, - (q15_t)0x326e, (q15_t)0x8a5b, (q15_t)0x3211, (q15_t)0x8a34, (q15_t)0x31b5, (q15_t)0x8a0c, (q15_t)0x3158, (q15_t)0x89e5, - (q15_t)0x30fb, (q15_t)0x89bf, (q15_t)0x309e, (q15_t)0x8998, (q15_t)0x3041, (q15_t)0x8972, (q15_t)0x2fe4, (q15_t)0x894d, - (q15_t)0x2f87, (q15_t)0x8927, (q15_t)0x2f29, (q15_t)0x8902, (q15_t)0x2ecc, (q15_t)0x88dd, (q15_t)0x2e6e, (q15_t)0x88b9, - (q15_t)0x2e11, (q15_t)0x8894, (q15_t)0x2db3, (q15_t)0x8870, (q15_t)0x2d55, (q15_t)0x884c, (q15_t)0x2cf7, (q15_t)0x8829, - (q15_t)0x2c98, (q15_t)0x8806, (q15_t)0x2c3a, (q15_t)0x87e3, (q15_t)0x2bdc, (q15_t)0x87c0, (q15_t)0x2b7d, (q15_t)0x879e, - (q15_t)0x2b1f, (q15_t)0x877c, (q15_t)0x2ac0, (q15_t)0x875a, (q15_t)0x2a61, (q15_t)0x8739, (q15_t)0x2a02, (q15_t)0x8718, - (q15_t)0x29a3, (q15_t)0x86f7, (q15_t)0x2944, (q15_t)0x86d6, (q15_t)0x28e5, (q15_t)0x86b6, (q15_t)0x2886, (q15_t)0x8696, - (q15_t)0x2826, (q15_t)0x8676, (q15_t)0x27c7, (q15_t)0x8657, (q15_t)0x2767, (q15_t)0x8638, (q15_t)0x2707, (q15_t)0x8619, - (q15_t)0x26a8, (q15_t)0x85fb, (q15_t)0x2648, (q15_t)0x85dc, (q15_t)0x25e8, (q15_t)0x85be, (q15_t)0x2588, (q15_t)0x85a1, - (q15_t)0x2528, (q15_t)0x8583, (q15_t)0x24c7, (q15_t)0x8566, (q15_t)0x2467, (q15_t)0x854a, (q15_t)0x2407, (q15_t)0x852d, - (q15_t)0x23a6, (q15_t)0x8511, (q15_t)0x2345, (q15_t)0x84f5, (q15_t)0x22e5, (q15_t)0x84da, (q15_t)0x2284, (q15_t)0x84be, - (q15_t)0x2223, (q15_t)0x84a3, (q15_t)0x21c2, (q15_t)0x8489, (q15_t)0x2161, (q15_t)0x846e, (q15_t)0x2100, (q15_t)0x8454, - (q15_t)0x209f, (q15_t)0x843b, (q15_t)0x203e, (q15_t)0x8421, (q15_t)0x1fdc, (q15_t)0x8408, (q15_t)0x1f7b, (q15_t)0x83ef, - (q15_t)0x1f19, (q15_t)0x83d7, (q15_t)0x1eb8, (q15_t)0x83be, (q15_t)0x1e56, (q15_t)0x83a6, (q15_t)0x1df5, (q15_t)0x838f, - (q15_t)0x1d93, (q15_t)0x8377, (q15_t)0x1d31, (q15_t)0x8360, (q15_t)0x1ccf, (q15_t)0x8349, (q15_t)0x1c6d, (q15_t)0x8333, - (q15_t)0x1c0b, (q15_t)0x831d, (q15_t)0x1ba9, (q15_t)0x8307, (q15_t)0x1b47, (q15_t)0x82f1, (q15_t)0x1ae4, (q15_t)0x82dc, - (q15_t)0x1a82, (q15_t)0x82c7, (q15_t)0x1a20, (q15_t)0x82b2, (q15_t)0x19bd, (q15_t)0x829e, (q15_t)0x195b, (q15_t)0x828a, - (q15_t)0x18f8, (q15_t)0x8276, (q15_t)0x1896, (q15_t)0x8263, (q15_t)0x1833, (q15_t)0x8250, (q15_t)0x17d0, (q15_t)0x823d, - (q15_t)0x176d, (q15_t)0x822a, (q15_t)0x170a, (q15_t)0x8218, (q15_t)0x16a8, (q15_t)0x8206, (q15_t)0x1645, (q15_t)0x81f4, - (q15_t)0x15e2, (q15_t)0x81e3, (q15_t)0x157f, (q15_t)0x81d2, (q15_t)0x151b, (q15_t)0x81c1, (q15_t)0x14b8, (q15_t)0x81b1, - (q15_t)0x1455, (q15_t)0x81a1, (q15_t)0x13f2, (q15_t)0x8191, (q15_t)0x138e, (q15_t)0x8181, (q15_t)0x132b, (q15_t)0x8172, - (q15_t)0x12c8, (q15_t)0x8163, (q15_t)0x1264, (q15_t)0x8155, (q15_t)0x1201, (q15_t)0x8146, (q15_t)0x119d, (q15_t)0x8138, - (q15_t)0x1139, (q15_t)0x812b, (q15_t)0x10d6, (q15_t)0x811d, (q15_t)0x1072, (q15_t)0x8110, (q15_t)0x100e, (q15_t)0x8103, - (q15_t)0xfab, (q15_t)0x80f7, (q15_t)0xf47, (q15_t)0x80eb, (q15_t)0xee3, (q15_t)0x80df, (q15_t)0xe7f, (q15_t)0x80d3, - (q15_t)0xe1b, (q15_t)0x80c8, (q15_t)0xdb7, (q15_t)0x80bd, (q15_t)0xd53, (q15_t)0x80b3, (q15_t)0xcef, (q15_t)0x80a8, - (q15_t)0xc8b, (q15_t)0x809e, (q15_t)0xc27, (q15_t)0x8095, (q15_t)0xbc3, (q15_t)0x808b, (q15_t)0xb5f, (q15_t)0x8082, - (q15_t)0xafb, (q15_t)0x8079, (q15_t)0xa97, (q15_t)0x8071, (q15_t)0xa33, (q15_t)0x8069, (q15_t)0x9ce, (q15_t)0x8061, - (q15_t)0x96a, (q15_t)0x8059, (q15_t)0x906, (q15_t)0x8052, (q15_t)0x8a2, (q15_t)0x804b, (q15_t)0x83d, (q15_t)0x8044, - (q15_t)0x7d9, (q15_t)0x803e, (q15_t)0x775, (q15_t)0x8038, (q15_t)0x710, (q15_t)0x8032, (q15_t)0x6ac, (q15_t)0x802d, - (q15_t)0x647, (q15_t)0x8028, (q15_t)0x5e3, (q15_t)0x8023, (q15_t)0x57f, (q15_t)0x801f, (q15_t)0x51a, (q15_t)0x801b, - (q15_t)0x4b6, (q15_t)0x8017, (q15_t)0x451, (q15_t)0x8013, (q15_t)0x3ed, (q15_t)0x8010, (q15_t)0x388, (q15_t)0x800d, - (q15_t)0x324, (q15_t)0x800a, (q15_t)0x2bf, (q15_t)0x8008, (q15_t)0x25b, (q15_t)0x8006, (q15_t)0x1f6, (q15_t)0x8004, - (q15_t)0x192, (q15_t)0x8003, (q15_t)0x12d, (q15_t)0x8002, (q15_t)0xc9, (q15_t)0x8001, (q15_t)0x64, (q15_t)0x8001 -}; - - const q15_t __ALIGNED(4) cos_factorsQ15_512[512] = { - (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7ffe, (q15_t)0x7ffc, (q15_t)0x7ffb, (q15_t)0x7ff9, (q15_t)0x7ff7, - (q15_t)0x7ff4, (q15_t)0x7ff2, (q15_t)0x7fee, (q15_t)0x7feb, (q15_t)0x7fe7, (q15_t)0x7fe3, (q15_t)0x7fdf, (q15_t)0x7fda, - (q15_t)0x7fd6, (q15_t)0x7fd0, (q15_t)0x7fcb, (q15_t)0x7fc5, (q15_t)0x7fbf, (q15_t)0x7fb8, (q15_t)0x7fb1, (q15_t)0x7faa, - (q15_t)0x7fa3, (q15_t)0x7f9b, (q15_t)0x7f93, (q15_t)0x7f8b, (q15_t)0x7f82, (q15_t)0x7f79, (q15_t)0x7f70, (q15_t)0x7f67, - (q15_t)0x7f5d, (q15_t)0x7f53, (q15_t)0x7f48, (q15_t)0x7f3d, (q15_t)0x7f32, (q15_t)0x7f27, (q15_t)0x7f1b, (q15_t)0x7f0f, - (q15_t)0x7f03, (q15_t)0x7ef6, (q15_t)0x7ee9, (q15_t)0x7edc, (q15_t)0x7ecf, (q15_t)0x7ec1, (q15_t)0x7eb3, (q15_t)0x7ea4, - (q15_t)0x7e95, (q15_t)0x7e86, (q15_t)0x7e77, (q15_t)0x7e67, (q15_t)0x7e57, (q15_t)0x7e47, (q15_t)0x7e37, (q15_t)0x7e26, - (q15_t)0x7e14, (q15_t)0x7e03, (q15_t)0x7df1, (q15_t)0x7ddf, (q15_t)0x7dcd, (q15_t)0x7dba, (q15_t)0x7da7, (q15_t)0x7d94, - (q15_t)0x7d80, (q15_t)0x7d6c, (q15_t)0x7d58, (q15_t)0x7d43, (q15_t)0x7d2f, (q15_t)0x7d19, (q15_t)0x7d04, (q15_t)0x7cee, - (q15_t)0x7cd8, (q15_t)0x7cc2, (q15_t)0x7cab, (q15_t)0x7c94, (q15_t)0x7c7d, (q15_t)0x7c66, (q15_t)0x7c4e, (q15_t)0x7c36, - (q15_t)0x7c1d, (q15_t)0x7c05, (q15_t)0x7beb, (q15_t)0x7bd2, (q15_t)0x7bb9, (q15_t)0x7b9f, (q15_t)0x7b84, (q15_t)0x7b6a, - (q15_t)0x7b4f, (q15_t)0x7b34, (q15_t)0x7b19, (q15_t)0x7afd, (q15_t)0x7ae1, (q15_t)0x7ac5, (q15_t)0x7aa8, (q15_t)0x7a8b, - (q15_t)0x7a6e, (q15_t)0x7a50, (q15_t)0x7a33, (q15_t)0x7a15, (q15_t)0x79f6, (q15_t)0x79d8, (q15_t)0x79b9, (q15_t)0x7999, - (q15_t)0x797a, (q15_t)0x795a, (q15_t)0x793a, (q15_t)0x7919, (q15_t)0x78f9, (q15_t)0x78d8, (q15_t)0x78b6, (q15_t)0x7895, - (q15_t)0x7873, (q15_t)0x7851, (q15_t)0x782e, (q15_t)0x780c, (q15_t)0x77e9, (q15_t)0x77c5, (q15_t)0x77a2, (q15_t)0x777e, - (q15_t)0x775a, (q15_t)0x7735, (q15_t)0x7710, (q15_t)0x76eb, (q15_t)0x76c6, (q15_t)0x76a0, (q15_t)0x767b, (q15_t)0x7654, - (q15_t)0x762e, (q15_t)0x7607, (q15_t)0x75e0, (q15_t)0x75b9, (q15_t)0x7591, (q15_t)0x7569, (q15_t)0x7541, (q15_t)0x7519, - (q15_t)0x74f0, (q15_t)0x74c7, (q15_t)0x749e, (q15_t)0x7474, (q15_t)0x744a, (q15_t)0x7420, (q15_t)0x73f6, (q15_t)0x73cb, - (q15_t)0x73a0, (q15_t)0x7375, (q15_t)0x7349, (q15_t)0x731d, (q15_t)0x72f1, (q15_t)0x72c5, (q15_t)0x7298, (q15_t)0x726b, - (q15_t)0x723e, (q15_t)0x7211, (q15_t)0x71e3, (q15_t)0x71b5, (q15_t)0x7186, (q15_t)0x7158, (q15_t)0x7129, (q15_t)0x70fa, - (q15_t)0x70cb, (q15_t)0x709b, (q15_t)0x706b, (q15_t)0x703b, (q15_t)0x700a, (q15_t)0x6fda, (q15_t)0x6fa9, (q15_t)0x6f77, - (q15_t)0x6f46, (q15_t)0x6f14, (q15_t)0x6ee2, (q15_t)0x6eaf, (q15_t)0x6e7d, (q15_t)0x6e4a, (q15_t)0x6e17, (q15_t)0x6de3, - (q15_t)0x6db0, (q15_t)0x6d7c, (q15_t)0x6d48, (q15_t)0x6d13, (q15_t)0x6cde, (q15_t)0x6ca9, (q15_t)0x6c74, (q15_t)0x6c3f, - (q15_t)0x6c09, (q15_t)0x6bd3, (q15_t)0x6b9c, (q15_t)0x6b66, (q15_t)0x6b2f, (q15_t)0x6af8, (q15_t)0x6ac1, (q15_t)0x6a89, - (q15_t)0x6a51, (q15_t)0x6a19, (q15_t)0x69e1, (q15_t)0x69a8, (q15_t)0x696f, (q15_t)0x6936, (q15_t)0x68fd, (q15_t)0x68c3, - (q15_t)0x6889, (q15_t)0x684f, (q15_t)0x6815, (q15_t)0x67da, (q15_t)0x679f, (q15_t)0x6764, (q15_t)0x6729, (q15_t)0x66ed, - (q15_t)0x66b1, (q15_t)0x6675, (q15_t)0x6639, (q15_t)0x65fc, (q15_t)0x65bf, (q15_t)0x6582, (q15_t)0x6545, (q15_t)0x6507, - (q15_t)0x64c9, (q15_t)0x648b, (q15_t)0x644d, (q15_t)0x640e, (q15_t)0x63cf, (q15_t)0x6390, (q15_t)0x6351, (q15_t)0x6311, - (q15_t)0x62d2, (q15_t)0x6292, (q15_t)0x6251, (q15_t)0x6211, (q15_t)0x61d0, (q15_t)0x618f, (q15_t)0x614e, (q15_t)0x610d, - (q15_t)0x60cb, (q15_t)0x6089, (q15_t)0x6047, (q15_t)0x6004, (q15_t)0x5fc2, (q15_t)0x5f7f, (q15_t)0x5f3c, (q15_t)0x5ef9, - (q15_t)0x5eb5, (q15_t)0x5e71, (q15_t)0x5e2d, (q15_t)0x5de9, (q15_t)0x5da5, (q15_t)0x5d60, (q15_t)0x5d1b, (q15_t)0x5cd6, - (q15_t)0x5c91, (q15_t)0x5c4b, (q15_t)0x5c06, (q15_t)0x5bc0, (q15_t)0x5b79, (q15_t)0x5b33, (q15_t)0x5aec, (q15_t)0x5aa5, - (q15_t)0x5a5e, (q15_t)0x5a17, (q15_t)0x59d0, (q15_t)0x5988, (q15_t)0x5940, (q15_t)0x58f8, (q15_t)0x58af, (q15_t)0x5867, - (q15_t)0x581e, (q15_t)0x57d5, (q15_t)0x578c, (q15_t)0x5742, (q15_t)0x56f9, (q15_t)0x56af, (q15_t)0x5665, (q15_t)0x561a, - (q15_t)0x55d0, (q15_t)0x5585, (q15_t)0x553a, (q15_t)0x54ef, (q15_t)0x54a4, (q15_t)0x5458, (q15_t)0x540d, (q15_t)0x53c1, - (q15_t)0x5375, (q15_t)0x5328, (q15_t)0x52dc, (q15_t)0x528f, (q15_t)0x5242, (q15_t)0x51f5, (q15_t)0x51a8, (q15_t)0x515a, - (q15_t)0x510c, (q15_t)0x50bf, (q15_t)0x5070, (q15_t)0x5022, (q15_t)0x4fd4, (q15_t)0x4f85, (q15_t)0x4f36, (q15_t)0x4ee7, - (q15_t)0x4e98, (q15_t)0x4e48, (q15_t)0x4df9, (q15_t)0x4da9, (q15_t)0x4d59, (q15_t)0x4d09, (q15_t)0x4cb8, (q15_t)0x4c68, - (q15_t)0x4c17, (q15_t)0x4bc6, (q15_t)0x4b75, (q15_t)0x4b24, (q15_t)0x4ad2, (q15_t)0x4a81, (q15_t)0x4a2f, (q15_t)0x49dd, - (q15_t)0x498a, (q15_t)0x4938, (q15_t)0x48e6, (q15_t)0x4893, (q15_t)0x4840, (q15_t)0x47ed, (q15_t)0x479a, (q15_t)0x4746, - (q15_t)0x46f3, (q15_t)0x469f, (q15_t)0x464b, (q15_t)0x45f7, (q15_t)0x45a3, (q15_t)0x454e, (q15_t)0x44fa, (q15_t)0x44a5, - (q15_t)0x4450, (q15_t)0x43fb, (q15_t)0x43a5, (q15_t)0x4350, (q15_t)0x42fa, (q15_t)0x42a5, (q15_t)0x424f, (q15_t)0x41f9, - (q15_t)0x41a2, (q15_t)0x414c, (q15_t)0x40f6, (q15_t)0x409f, (q15_t)0x4048, (q15_t)0x3ff1, (q15_t)0x3f9a, (q15_t)0x3f43, - (q15_t)0x3eeb, (q15_t)0x3e93, (q15_t)0x3e3c, (q15_t)0x3de4, (q15_t)0x3d8c, (q15_t)0x3d33, (q15_t)0x3cdb, (q15_t)0x3c83, - (q15_t)0x3c2a, (q15_t)0x3bd1, (q15_t)0x3b78, (q15_t)0x3b1f, (q15_t)0x3ac6, (q15_t)0x3a6c, (q15_t)0x3a13, (q15_t)0x39b9, - (q15_t)0x395f, (q15_t)0x3906, (q15_t)0x38ab, (q15_t)0x3851, (q15_t)0x37f7, (q15_t)0x379c, (q15_t)0x3742, (q15_t)0x36e7, - (q15_t)0x368c, (q15_t)0x3631, (q15_t)0x35d6, (q15_t)0x357b, (q15_t)0x351f, (q15_t)0x34c4, (q15_t)0x3468, (q15_t)0x340c, - (q15_t)0x33b0, (q15_t)0x3354, (q15_t)0x32f8, (q15_t)0x329c, (q15_t)0x3240, (q15_t)0x31e3, (q15_t)0x3186, (q15_t)0x312a, - (q15_t)0x30cd, (q15_t)0x3070, (q15_t)0x3013, (q15_t)0x2fb5, (q15_t)0x2f58, (q15_t)0x2efb, (q15_t)0x2e9d, (q15_t)0x2e3f, - (q15_t)0x2de2, (q15_t)0x2d84, (q15_t)0x2d26, (q15_t)0x2cc8, (q15_t)0x2c69, (q15_t)0x2c0b, (q15_t)0x2bad, (q15_t)0x2b4e, - (q15_t)0x2aef, (q15_t)0x2a91, (q15_t)0x2a32, (q15_t)0x29d3, (q15_t)0x2974, (q15_t)0x2915, (q15_t)0x28b5, (q15_t)0x2856, - (q15_t)0x27f6, (q15_t)0x2797, (q15_t)0x2737, (q15_t)0x26d8, (q15_t)0x2678, (q15_t)0x2618, (q15_t)0x25b8, (q15_t)0x2558, - (q15_t)0x24f7, (q15_t)0x2497, (q15_t)0x2437, (q15_t)0x23d6, (q15_t)0x2376, (q15_t)0x2315, (q15_t)0x22b4, (q15_t)0x2254, - (q15_t)0x21f3, (q15_t)0x2192, (q15_t)0x2131, (q15_t)0x20d0, (q15_t)0x206e, (q15_t)0x200d, (q15_t)0x1fac, (q15_t)0x1f4a, - (q15_t)0x1ee9, (q15_t)0x1e87, (q15_t)0x1e25, (q15_t)0x1dc4, (q15_t)0x1d62, (q15_t)0x1d00, (q15_t)0x1c9e, (q15_t)0x1c3c, - (q15_t)0x1bda, (q15_t)0x1b78, (q15_t)0x1b16, (q15_t)0x1ab3, (q15_t)0x1a51, (q15_t)0x19ef, (q15_t)0x198c, (q15_t)0x192a, - (q15_t)0x18c7, (q15_t)0x1864, (q15_t)0x1802, (q15_t)0x179f, (q15_t)0x173c, (q15_t)0x16d9, (q15_t)0x1676, (q15_t)0x1613, - (q15_t)0x15b0, (q15_t)0x154d, (q15_t)0x14ea, (q15_t)0x1487, (q15_t)0x1423, (q15_t)0x13c0, (q15_t)0x135d, (q15_t)0x12f9, - (q15_t)0x1296, (q15_t)0x1232, (q15_t)0x11cf, (q15_t)0x116b, (q15_t)0x1108, (q15_t)0x10a4, (q15_t)0x1040, (q15_t)0xfdd, - (q15_t)0xf79, (q15_t)0xf15, (q15_t)0xeb1, (q15_t)0xe4d, (q15_t)0xde9, (q15_t)0xd85, (q15_t)0xd21, (q15_t)0xcbd, - (q15_t)0xc59, (q15_t)0xbf5, (q15_t)0xb91, (q15_t)0xb2d, (q15_t)0xac9, (q15_t)0xa65, (q15_t)0xa00, (q15_t)0x99c, - (q15_t)0x938, (q15_t)0x8d4, (q15_t)0x86f, (q15_t)0x80b, (q15_t)0x7a7, (q15_t)0x742, (q15_t)0x6de, (q15_t)0x67a, - (q15_t)0x615, (q15_t)0x5b1, (q15_t)0x54c, (q15_t)0x4e8, (q15_t)0x483, (q15_t)0x41f, (q15_t)0x3ba, (q15_t)0x356, - (q15_t)0x2f1, (q15_t)0x28d, (q15_t)0x228, (q15_t)0x1c4, (q15_t)0x15f, (q15_t)0xfb, (q15_t)0x96, (q15_t)0x32 -}; - - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_2048) - const q15_t __ALIGNED(4) WeightsQ15_2048[4096] = { - (q15_t)0x7fff, (q15_t)0x0, (q15_t)0x7fff, (q15_t)0xffe7, (q15_t)0x7fff, (q15_t)0xffce, (q15_t)0x7fff, (q15_t)0xffb5, - (q15_t)0x7fff, (q15_t)0xff9c, (q15_t)0x7fff, (q15_t)0xff83, (q15_t)0x7fff, (q15_t)0xff6a, (q15_t)0x7fff, (q15_t)0xff51, - (q15_t)0x7fff, (q15_t)0xff37, (q15_t)0x7fff, (q15_t)0xff1e, (q15_t)0x7fff, (q15_t)0xff05, (q15_t)0x7ffe, (q15_t)0xfeec, - (q15_t)0x7ffe, (q15_t)0xfed3, (q15_t)0x7ffe, (q15_t)0xfeba, (q15_t)0x7ffe, (q15_t)0xfea1, (q15_t)0x7ffd, (q15_t)0xfe88, - (q15_t)0x7ffd, (q15_t)0xfe6e, (q15_t)0x7ffd, (q15_t)0xfe55, (q15_t)0x7ffc, (q15_t)0xfe3c, (q15_t)0x7ffc, (q15_t)0xfe23, - (q15_t)0x7ffc, (q15_t)0xfe0a, (q15_t)0x7ffb, (q15_t)0xfdf1, (q15_t)0x7ffb, (q15_t)0xfdd8, (q15_t)0x7ffa, (q15_t)0xfdbe, - (q15_t)0x7ffa, (q15_t)0xfda5, (q15_t)0x7ff9, (q15_t)0xfd8c, (q15_t)0x7ff9, (q15_t)0xfd73, (q15_t)0x7ff8, (q15_t)0xfd5a, - (q15_t)0x7ff8, (q15_t)0xfd41, (q15_t)0x7ff7, (q15_t)0xfd28, (q15_t)0x7ff7, (q15_t)0xfd0f, (q15_t)0x7ff6, (q15_t)0xfcf5, - (q15_t)0x7ff6, (q15_t)0xfcdc, (q15_t)0x7ff5, (q15_t)0xfcc3, (q15_t)0x7ff4, (q15_t)0xfcaa, (q15_t)0x7ff4, (q15_t)0xfc91, - (q15_t)0x7ff3, (q15_t)0xfc78, (q15_t)0x7ff2, (q15_t)0xfc5f, (q15_t)0x7ff2, (q15_t)0xfc46, (q15_t)0x7ff1, (q15_t)0xfc2c, - (q15_t)0x7ff0, (q15_t)0xfc13, (q15_t)0x7fef, (q15_t)0xfbfa, (q15_t)0x7fee, (q15_t)0xfbe1, (q15_t)0x7fee, (q15_t)0xfbc8, - (q15_t)0x7fed, (q15_t)0xfbaf, (q15_t)0x7fec, (q15_t)0xfb96, (q15_t)0x7feb, (q15_t)0xfb7d, (q15_t)0x7fea, (q15_t)0xfb64, - (q15_t)0x7fe9, (q15_t)0xfb4a, (q15_t)0x7fe8, (q15_t)0xfb31, (q15_t)0x7fe7, (q15_t)0xfb18, (q15_t)0x7fe6, (q15_t)0xfaff, - (q15_t)0x7fe5, (q15_t)0xfae6, (q15_t)0x7fe4, (q15_t)0xfacd, (q15_t)0x7fe3, (q15_t)0xfab4, (q15_t)0x7fe2, (q15_t)0xfa9b, - (q15_t)0x7fe1, (q15_t)0xfa81, (q15_t)0x7fe0, (q15_t)0xfa68, (q15_t)0x7fdf, (q15_t)0xfa4f, (q15_t)0x7fde, (q15_t)0xfa36, - (q15_t)0x7fdd, (q15_t)0xfa1d, (q15_t)0x7fdc, (q15_t)0xfa04, (q15_t)0x7fda, (q15_t)0xf9eb, (q15_t)0x7fd9, (q15_t)0xf9d2, - (q15_t)0x7fd8, (q15_t)0xf9b9, (q15_t)0x7fd7, (q15_t)0xf9a0, (q15_t)0x7fd6, (q15_t)0xf986, (q15_t)0x7fd4, (q15_t)0xf96d, - (q15_t)0x7fd3, (q15_t)0xf954, (q15_t)0x7fd2, (q15_t)0xf93b, (q15_t)0x7fd0, (q15_t)0xf922, (q15_t)0x7fcf, (q15_t)0xf909, - (q15_t)0x7fce, (q15_t)0xf8f0, (q15_t)0x7fcc, (q15_t)0xf8d7, (q15_t)0x7fcb, (q15_t)0xf8be, (q15_t)0x7fc9, (q15_t)0xf8a5, - (q15_t)0x7fc8, (q15_t)0xf88b, (q15_t)0x7fc6, (q15_t)0xf872, (q15_t)0x7fc5, (q15_t)0xf859, (q15_t)0x7fc3, (q15_t)0xf840, - (q15_t)0x7fc2, (q15_t)0xf827, (q15_t)0x7fc0, (q15_t)0xf80e, (q15_t)0x7fbf, (q15_t)0xf7f5, (q15_t)0x7fbd, (q15_t)0xf7dc, - (q15_t)0x7fbc, (q15_t)0xf7c3, (q15_t)0x7fba, (q15_t)0xf7aa, (q15_t)0x7fb8, (q15_t)0xf791, (q15_t)0x7fb7, (q15_t)0xf778, - (q15_t)0x7fb5, (q15_t)0xf75e, (q15_t)0x7fb3, (q15_t)0xf745, (q15_t)0x7fb1, (q15_t)0xf72c, (q15_t)0x7fb0, (q15_t)0xf713, - (q15_t)0x7fae, (q15_t)0xf6fa, (q15_t)0x7fac, (q15_t)0xf6e1, (q15_t)0x7faa, (q15_t)0xf6c8, (q15_t)0x7fa9, (q15_t)0xf6af, - (q15_t)0x7fa7, (q15_t)0xf696, (q15_t)0x7fa5, (q15_t)0xf67d, (q15_t)0x7fa3, (q15_t)0xf664, (q15_t)0x7fa1, (q15_t)0xf64b, - (q15_t)0x7f9f, (q15_t)0xf632, (q15_t)0x7f9d, (q15_t)0xf619, (q15_t)0x7f9b, (q15_t)0xf600, (q15_t)0x7f99, (q15_t)0xf5e7, - (q15_t)0x7f97, (q15_t)0xf5cd, (q15_t)0x7f95, (q15_t)0xf5b4, (q15_t)0x7f93, (q15_t)0xf59b, (q15_t)0x7f91, (q15_t)0xf582, - (q15_t)0x7f8f, (q15_t)0xf569, (q15_t)0x7f8d, (q15_t)0xf550, (q15_t)0x7f8b, (q15_t)0xf537, (q15_t)0x7f89, (q15_t)0xf51e, - (q15_t)0x7f87, (q15_t)0xf505, (q15_t)0x7f85, (q15_t)0xf4ec, (q15_t)0x7f82, (q15_t)0xf4d3, (q15_t)0x7f80, (q15_t)0xf4ba, - (q15_t)0x7f7e, (q15_t)0xf4a1, (q15_t)0x7f7c, (q15_t)0xf488, (q15_t)0x7f79, (q15_t)0xf46f, (q15_t)0x7f77, (q15_t)0xf456, - (q15_t)0x7f75, (q15_t)0xf43d, (q15_t)0x7f72, (q15_t)0xf424, (q15_t)0x7f70, (q15_t)0xf40b, (q15_t)0x7f6e, (q15_t)0xf3f2, - (q15_t)0x7f6b, (q15_t)0xf3d9, (q15_t)0x7f69, (q15_t)0xf3c0, (q15_t)0x7f67, (q15_t)0xf3a7, (q15_t)0x7f64, (q15_t)0xf38e, - (q15_t)0x7f62, (q15_t)0xf375, (q15_t)0x7f5f, (q15_t)0xf35c, (q15_t)0x7f5d, (q15_t)0xf343, (q15_t)0x7f5a, (q15_t)0xf32a, - (q15_t)0x7f58, (q15_t)0xf311, (q15_t)0x7f55, (q15_t)0xf2f8, (q15_t)0x7f53, (q15_t)0xf2df, (q15_t)0x7f50, (q15_t)0xf2c6, - (q15_t)0x7f4d, (q15_t)0xf2ad, (q15_t)0x7f4b, (q15_t)0xf294, (q15_t)0x7f48, (q15_t)0xf27b, (q15_t)0x7f45, (q15_t)0xf262, - (q15_t)0x7f43, (q15_t)0xf249, (q15_t)0x7f40, (q15_t)0xf230, (q15_t)0x7f3d, (q15_t)0xf217, (q15_t)0x7f3b, (q15_t)0xf1fe, - (q15_t)0x7f38, (q15_t)0xf1e5, (q15_t)0x7f35, (q15_t)0xf1cc, (q15_t)0x7f32, (q15_t)0xf1b3, (q15_t)0x7f2f, (q15_t)0xf19a, - (q15_t)0x7f2d, (q15_t)0xf181, (q15_t)0x7f2a, (q15_t)0xf168, (q15_t)0x7f27, (q15_t)0xf14f, (q15_t)0x7f24, (q15_t)0xf136, - (q15_t)0x7f21, (q15_t)0xf11d, (q15_t)0x7f1e, (q15_t)0xf104, (q15_t)0x7f1b, (q15_t)0xf0eb, (q15_t)0x7f18, (q15_t)0xf0d2, - (q15_t)0x7f15, (q15_t)0xf0b9, (q15_t)0x7f12, (q15_t)0xf0a0, (q15_t)0x7f0f, (q15_t)0xf087, (q15_t)0x7f0c, (q15_t)0xf06e, - (q15_t)0x7f09, (q15_t)0xf055, (q15_t)0x7f06, (q15_t)0xf03c, (q15_t)0x7f03, (q15_t)0xf023, (q15_t)0x7f00, (q15_t)0xf00b, - (q15_t)0x7efd, (q15_t)0xeff2, (q15_t)0x7ef9, (q15_t)0xefd9, (q15_t)0x7ef6, (q15_t)0xefc0, (q15_t)0x7ef3, (q15_t)0xefa7, - (q15_t)0x7ef0, (q15_t)0xef8e, (q15_t)0x7eed, (q15_t)0xef75, (q15_t)0x7ee9, (q15_t)0xef5c, (q15_t)0x7ee6, (q15_t)0xef43, - (q15_t)0x7ee3, (q15_t)0xef2a, (q15_t)0x7edf, (q15_t)0xef11, (q15_t)0x7edc, (q15_t)0xeef8, (q15_t)0x7ed9, (q15_t)0xeedf, - (q15_t)0x7ed5, (q15_t)0xeec7, (q15_t)0x7ed2, (q15_t)0xeeae, (q15_t)0x7ecf, (q15_t)0xee95, (q15_t)0x7ecb, (q15_t)0xee7c, - (q15_t)0x7ec8, (q15_t)0xee63, (q15_t)0x7ec4, (q15_t)0xee4a, (q15_t)0x7ec1, (q15_t)0xee31, (q15_t)0x7ebd, (q15_t)0xee18, - (q15_t)0x7eba, (q15_t)0xedff, (q15_t)0x7eb6, (q15_t)0xede7, (q15_t)0x7eb3, (q15_t)0xedce, (q15_t)0x7eaf, (q15_t)0xedb5, - (q15_t)0x7eab, (q15_t)0xed9c, (q15_t)0x7ea8, (q15_t)0xed83, (q15_t)0x7ea4, (q15_t)0xed6a, (q15_t)0x7ea1, (q15_t)0xed51, - (q15_t)0x7e9d, (q15_t)0xed38, (q15_t)0x7e99, (q15_t)0xed20, (q15_t)0x7e95, (q15_t)0xed07, (q15_t)0x7e92, (q15_t)0xecee, - (q15_t)0x7e8e, (q15_t)0xecd5, (q15_t)0x7e8a, (q15_t)0xecbc, (q15_t)0x7e86, (q15_t)0xeca3, (q15_t)0x7e83, (q15_t)0xec8a, - (q15_t)0x7e7f, (q15_t)0xec72, (q15_t)0x7e7b, (q15_t)0xec59, (q15_t)0x7e77, (q15_t)0xec40, (q15_t)0x7e73, (q15_t)0xec27, - (q15_t)0x7e6f, (q15_t)0xec0e, (q15_t)0x7e6b, (q15_t)0xebf5, (q15_t)0x7e67, (q15_t)0xebdd, (q15_t)0x7e63, (q15_t)0xebc4, - (q15_t)0x7e5f, (q15_t)0xebab, (q15_t)0x7e5b, (q15_t)0xeb92, (q15_t)0x7e57, (q15_t)0xeb79, (q15_t)0x7e53, (q15_t)0xeb61, - (q15_t)0x7e4f, (q15_t)0xeb48, (q15_t)0x7e4b, (q15_t)0xeb2f, (q15_t)0x7e47, (q15_t)0xeb16, (q15_t)0x7e43, (q15_t)0xeafd, - (q15_t)0x7e3f, (q15_t)0xeae5, (q15_t)0x7e3b, (q15_t)0xeacc, (q15_t)0x7e37, (q15_t)0xeab3, (q15_t)0x7e32, (q15_t)0xea9a, - (q15_t)0x7e2e, (q15_t)0xea81, (q15_t)0x7e2a, (q15_t)0xea69, (q15_t)0x7e26, (q15_t)0xea50, (q15_t)0x7e21, (q15_t)0xea37, - (q15_t)0x7e1d, (q15_t)0xea1e, (q15_t)0x7e19, (q15_t)0xea06, (q15_t)0x7e14, (q15_t)0xe9ed, (q15_t)0x7e10, (q15_t)0xe9d4, - (q15_t)0x7e0c, (q15_t)0xe9bb, (q15_t)0x7e07, (q15_t)0xe9a3, (q15_t)0x7e03, (q15_t)0xe98a, (q15_t)0x7dff, (q15_t)0xe971, - (q15_t)0x7dfa, (q15_t)0xe958, (q15_t)0x7df6, (q15_t)0xe940, (q15_t)0x7df1, (q15_t)0xe927, (q15_t)0x7ded, (q15_t)0xe90e, - (q15_t)0x7de8, (q15_t)0xe8f6, (q15_t)0x7de4, (q15_t)0xe8dd, (q15_t)0x7ddf, (q15_t)0xe8c4, (q15_t)0x7dda, (q15_t)0xe8ab, - (q15_t)0x7dd6, (q15_t)0xe893, (q15_t)0x7dd1, (q15_t)0xe87a, (q15_t)0x7dcd, (q15_t)0xe861, (q15_t)0x7dc8, (q15_t)0xe849, - (q15_t)0x7dc3, (q15_t)0xe830, (q15_t)0x7dbf, (q15_t)0xe817, (q15_t)0x7dba, (q15_t)0xe7fe, (q15_t)0x7db5, (q15_t)0xe7e6, - (q15_t)0x7db0, (q15_t)0xe7cd, (q15_t)0x7dac, (q15_t)0xe7b4, (q15_t)0x7da7, (q15_t)0xe79c, (q15_t)0x7da2, (q15_t)0xe783, - (q15_t)0x7d9d, (q15_t)0xe76a, (q15_t)0x7d98, (q15_t)0xe752, (q15_t)0x7d94, (q15_t)0xe739, (q15_t)0x7d8f, (q15_t)0xe720, - (q15_t)0x7d8a, (q15_t)0xe708, (q15_t)0x7d85, (q15_t)0xe6ef, (q15_t)0x7d80, (q15_t)0xe6d6, (q15_t)0x7d7b, (q15_t)0xe6be, - (q15_t)0x7d76, (q15_t)0xe6a5, (q15_t)0x7d71, (q15_t)0xe68d, (q15_t)0x7d6c, (q15_t)0xe674, (q15_t)0x7d67, (q15_t)0xe65b, - (q15_t)0x7d62, (q15_t)0xe643, (q15_t)0x7d5d, (q15_t)0xe62a, (q15_t)0x7d58, (q15_t)0xe611, (q15_t)0x7d53, (q15_t)0xe5f9, - (q15_t)0x7d4e, (q15_t)0xe5e0, (q15_t)0x7d49, (q15_t)0xe5c8, (q15_t)0x7d43, (q15_t)0xe5af, (q15_t)0x7d3e, (q15_t)0xe596, - (q15_t)0x7d39, (q15_t)0xe57e, (q15_t)0x7d34, (q15_t)0xe565, (q15_t)0x7d2f, (q15_t)0xe54d, (q15_t)0x7d29, (q15_t)0xe534, - (q15_t)0x7d24, (q15_t)0xe51c, (q15_t)0x7d1f, (q15_t)0xe503, (q15_t)0x7d19, (q15_t)0xe4ea, (q15_t)0x7d14, (q15_t)0xe4d2, - (q15_t)0x7d0f, (q15_t)0xe4b9, (q15_t)0x7d09, (q15_t)0xe4a1, (q15_t)0x7d04, (q15_t)0xe488, (q15_t)0x7cff, (q15_t)0xe470, - (q15_t)0x7cf9, (q15_t)0xe457, (q15_t)0x7cf4, (q15_t)0xe43f, (q15_t)0x7cee, (q15_t)0xe426, (q15_t)0x7ce9, (q15_t)0xe40e, - (q15_t)0x7ce3, (q15_t)0xe3f5, (q15_t)0x7cde, (q15_t)0xe3dc, (q15_t)0x7cd8, (q15_t)0xe3c4, (q15_t)0x7cd3, (q15_t)0xe3ab, - (q15_t)0x7ccd, (q15_t)0xe393, (q15_t)0x7cc8, (q15_t)0xe37a, (q15_t)0x7cc2, (q15_t)0xe362, (q15_t)0x7cbc, (q15_t)0xe349, - (q15_t)0x7cb7, (q15_t)0xe331, (q15_t)0x7cb1, (q15_t)0xe318, (q15_t)0x7cab, (q15_t)0xe300, (q15_t)0x7ca6, (q15_t)0xe2e8, - (q15_t)0x7ca0, (q15_t)0xe2cf, (q15_t)0x7c9a, (q15_t)0xe2b7, (q15_t)0x7c94, (q15_t)0xe29e, (q15_t)0x7c8f, (q15_t)0xe286, - (q15_t)0x7c89, (q15_t)0xe26d, (q15_t)0x7c83, (q15_t)0xe255, (q15_t)0x7c7d, (q15_t)0xe23c, (q15_t)0x7c77, (q15_t)0xe224, - (q15_t)0x7c71, (q15_t)0xe20b, (q15_t)0x7c6c, (q15_t)0xe1f3, (q15_t)0x7c66, (q15_t)0xe1db, (q15_t)0x7c60, (q15_t)0xe1c2, - (q15_t)0x7c5a, (q15_t)0xe1aa, (q15_t)0x7c54, (q15_t)0xe191, (q15_t)0x7c4e, (q15_t)0xe179, (q15_t)0x7c48, (q15_t)0xe160, - (q15_t)0x7c42, (q15_t)0xe148, (q15_t)0x7c3c, (q15_t)0xe130, (q15_t)0x7c36, (q15_t)0xe117, (q15_t)0x7c30, (q15_t)0xe0ff, - (q15_t)0x7c29, (q15_t)0xe0e7, (q15_t)0x7c23, (q15_t)0xe0ce, (q15_t)0x7c1d, (q15_t)0xe0b6, (q15_t)0x7c17, (q15_t)0xe09d, - (q15_t)0x7c11, (q15_t)0xe085, (q15_t)0x7c0b, (q15_t)0xe06d, (q15_t)0x7c05, (q15_t)0xe054, (q15_t)0x7bfe, (q15_t)0xe03c, - (q15_t)0x7bf8, (q15_t)0xe024, (q15_t)0x7bf2, (q15_t)0xe00b, (q15_t)0x7beb, (q15_t)0xdff3, (q15_t)0x7be5, (q15_t)0xdfdb, - (q15_t)0x7bdf, (q15_t)0xdfc2, (q15_t)0x7bd9, (q15_t)0xdfaa, (q15_t)0x7bd2, (q15_t)0xdf92, (q15_t)0x7bcc, (q15_t)0xdf79, - (q15_t)0x7bc5, (q15_t)0xdf61, (q15_t)0x7bbf, (q15_t)0xdf49, (q15_t)0x7bb9, (q15_t)0xdf30, (q15_t)0x7bb2, (q15_t)0xdf18, - (q15_t)0x7bac, (q15_t)0xdf00, (q15_t)0x7ba5, (q15_t)0xdee8, (q15_t)0x7b9f, (q15_t)0xdecf, (q15_t)0x7b98, (q15_t)0xdeb7, - (q15_t)0x7b92, (q15_t)0xde9f, (q15_t)0x7b8b, (q15_t)0xde87, (q15_t)0x7b84, (q15_t)0xde6e, (q15_t)0x7b7e, (q15_t)0xde56, - (q15_t)0x7b77, (q15_t)0xde3e, (q15_t)0x7b71, (q15_t)0xde26, (q15_t)0x7b6a, (q15_t)0xde0d, (q15_t)0x7b63, (q15_t)0xddf5, - (q15_t)0x7b5d, (q15_t)0xdddd, (q15_t)0x7b56, (q15_t)0xddc5, (q15_t)0x7b4f, (q15_t)0xddac, (q15_t)0x7b48, (q15_t)0xdd94, - (q15_t)0x7b42, (q15_t)0xdd7c, (q15_t)0x7b3b, (q15_t)0xdd64, (q15_t)0x7b34, (q15_t)0xdd4c, (q15_t)0x7b2d, (q15_t)0xdd33, - (q15_t)0x7b26, (q15_t)0xdd1b, (q15_t)0x7b1f, (q15_t)0xdd03, (q15_t)0x7b19, (q15_t)0xdceb, (q15_t)0x7b12, (q15_t)0xdcd3, - (q15_t)0x7b0b, (q15_t)0xdcbb, (q15_t)0x7b04, (q15_t)0xdca2, (q15_t)0x7afd, (q15_t)0xdc8a, (q15_t)0x7af6, (q15_t)0xdc72, - (q15_t)0x7aef, (q15_t)0xdc5a, (q15_t)0x7ae8, (q15_t)0xdc42, (q15_t)0x7ae1, (q15_t)0xdc2a, (q15_t)0x7ada, (q15_t)0xdc12, - (q15_t)0x7ad3, (q15_t)0xdbf9, (q15_t)0x7acc, (q15_t)0xdbe1, (q15_t)0x7ac5, (q15_t)0xdbc9, (q15_t)0x7abd, (q15_t)0xdbb1, - (q15_t)0x7ab6, (q15_t)0xdb99, (q15_t)0x7aaf, (q15_t)0xdb81, (q15_t)0x7aa8, (q15_t)0xdb69, (q15_t)0x7aa1, (q15_t)0xdb51, - (q15_t)0x7a9a, (q15_t)0xdb39, (q15_t)0x7a92, (q15_t)0xdb21, (q15_t)0x7a8b, (q15_t)0xdb09, (q15_t)0x7a84, (q15_t)0xdaf1, - (q15_t)0x7a7d, (q15_t)0xdad8, (q15_t)0x7a75, (q15_t)0xdac0, (q15_t)0x7a6e, (q15_t)0xdaa8, (q15_t)0x7a67, (q15_t)0xda90, - (q15_t)0x7a5f, (q15_t)0xda78, (q15_t)0x7a58, (q15_t)0xda60, (q15_t)0x7a50, (q15_t)0xda48, (q15_t)0x7a49, (q15_t)0xda30, - (q15_t)0x7a42, (q15_t)0xda18, (q15_t)0x7a3a, (q15_t)0xda00, (q15_t)0x7a33, (q15_t)0xd9e8, (q15_t)0x7a2b, (q15_t)0xd9d0, - (q15_t)0x7a24, (q15_t)0xd9b8, (q15_t)0x7a1c, (q15_t)0xd9a0, (q15_t)0x7a15, (q15_t)0xd988, (q15_t)0x7a0d, (q15_t)0xd970, - (q15_t)0x7a05, (q15_t)0xd958, (q15_t)0x79fe, (q15_t)0xd940, (q15_t)0x79f6, (q15_t)0xd928, (q15_t)0x79ef, (q15_t)0xd911, - (q15_t)0x79e7, (q15_t)0xd8f9, (q15_t)0x79df, (q15_t)0xd8e1, (q15_t)0x79d8, (q15_t)0xd8c9, (q15_t)0x79d0, (q15_t)0xd8b1, - (q15_t)0x79c8, (q15_t)0xd899, (q15_t)0x79c0, (q15_t)0xd881, (q15_t)0x79b9, (q15_t)0xd869, (q15_t)0x79b1, (q15_t)0xd851, - (q15_t)0x79a9, (q15_t)0xd839, (q15_t)0x79a1, (q15_t)0xd821, (q15_t)0x7999, (q15_t)0xd80a, (q15_t)0x7992, (q15_t)0xd7f2, - (q15_t)0x798a, (q15_t)0xd7da, (q15_t)0x7982, (q15_t)0xd7c2, (q15_t)0x797a, (q15_t)0xd7aa, (q15_t)0x7972, (q15_t)0xd792, - (q15_t)0x796a, (q15_t)0xd77a, (q15_t)0x7962, (q15_t)0xd763, (q15_t)0x795a, (q15_t)0xd74b, (q15_t)0x7952, (q15_t)0xd733, - (q15_t)0x794a, (q15_t)0xd71b, (q15_t)0x7942, (q15_t)0xd703, (q15_t)0x793a, (q15_t)0xd6eb, (q15_t)0x7932, (q15_t)0xd6d4, - (q15_t)0x792a, (q15_t)0xd6bc, (q15_t)0x7922, (q15_t)0xd6a4, (q15_t)0x7919, (q15_t)0xd68c, (q15_t)0x7911, (q15_t)0xd675, - (q15_t)0x7909, (q15_t)0xd65d, (q15_t)0x7901, (q15_t)0xd645, (q15_t)0x78f9, (q15_t)0xd62d, (q15_t)0x78f1, (q15_t)0xd615, - (q15_t)0x78e8, (q15_t)0xd5fe, (q15_t)0x78e0, (q15_t)0xd5e6, (q15_t)0x78d8, (q15_t)0xd5ce, (q15_t)0x78cf, (q15_t)0xd5b7, - (q15_t)0x78c7, (q15_t)0xd59f, (q15_t)0x78bf, (q15_t)0xd587, (q15_t)0x78b6, (q15_t)0xd56f, (q15_t)0x78ae, (q15_t)0xd558, - (q15_t)0x78a6, (q15_t)0xd540, (q15_t)0x789d, (q15_t)0xd528, (q15_t)0x7895, (q15_t)0xd511, (q15_t)0x788c, (q15_t)0xd4f9, - (q15_t)0x7884, (q15_t)0xd4e1, (q15_t)0x787c, (q15_t)0xd4ca, (q15_t)0x7873, (q15_t)0xd4b2, (q15_t)0x786b, (q15_t)0xd49a, - (q15_t)0x7862, (q15_t)0xd483, (q15_t)0x7859, (q15_t)0xd46b, (q15_t)0x7851, (q15_t)0xd453, (q15_t)0x7848, (q15_t)0xd43c, - (q15_t)0x7840, (q15_t)0xd424, (q15_t)0x7837, (q15_t)0xd40d, (q15_t)0x782e, (q15_t)0xd3f5, (q15_t)0x7826, (q15_t)0xd3dd, - (q15_t)0x781d, (q15_t)0xd3c6, (q15_t)0x7814, (q15_t)0xd3ae, (q15_t)0x780c, (q15_t)0xd397, (q15_t)0x7803, (q15_t)0xd37f, - (q15_t)0x77fa, (q15_t)0xd368, (q15_t)0x77f1, (q15_t)0xd350, (q15_t)0x77e9, (q15_t)0xd338, (q15_t)0x77e0, (q15_t)0xd321, - (q15_t)0x77d7, (q15_t)0xd309, (q15_t)0x77ce, (q15_t)0xd2f2, (q15_t)0x77c5, (q15_t)0xd2da, (q15_t)0x77bc, (q15_t)0xd2c3, - (q15_t)0x77b4, (q15_t)0xd2ab, (q15_t)0x77ab, (q15_t)0xd294, (q15_t)0x77a2, (q15_t)0xd27c, (q15_t)0x7799, (q15_t)0xd265, - (q15_t)0x7790, (q15_t)0xd24d, (q15_t)0x7787, (q15_t)0xd236, (q15_t)0x777e, (q15_t)0xd21e, (q15_t)0x7775, (q15_t)0xd207, - (q15_t)0x776c, (q15_t)0xd1ef, (q15_t)0x7763, (q15_t)0xd1d8, (q15_t)0x775a, (q15_t)0xd1c1, (q15_t)0x7751, (q15_t)0xd1a9, - (q15_t)0x7747, (q15_t)0xd192, (q15_t)0x773e, (q15_t)0xd17a, (q15_t)0x7735, (q15_t)0xd163, (q15_t)0x772c, (q15_t)0xd14b, - (q15_t)0x7723, (q15_t)0xd134, (q15_t)0x771a, (q15_t)0xd11d, (q15_t)0x7710, (q15_t)0xd105, (q15_t)0x7707, (q15_t)0xd0ee, - (q15_t)0x76fe, (q15_t)0xd0d7, (q15_t)0x76f5, (q15_t)0xd0bf, (q15_t)0x76eb, (q15_t)0xd0a8, (q15_t)0x76e2, (q15_t)0xd091, - (q15_t)0x76d9, (q15_t)0xd079, (q15_t)0x76cf, (q15_t)0xd062, (q15_t)0x76c6, (q15_t)0xd04b, (q15_t)0x76bd, (q15_t)0xd033, - (q15_t)0x76b3, (q15_t)0xd01c, (q15_t)0x76aa, (q15_t)0xd005, (q15_t)0x76a0, (q15_t)0xcfed, (q15_t)0x7697, (q15_t)0xcfd6, - (q15_t)0x768e, (q15_t)0xcfbf, (q15_t)0x7684, (q15_t)0xcfa7, (q15_t)0x767b, (q15_t)0xcf90, (q15_t)0x7671, (q15_t)0xcf79, - (q15_t)0x7668, (q15_t)0xcf62, (q15_t)0x765e, (q15_t)0xcf4a, (q15_t)0x7654, (q15_t)0xcf33, (q15_t)0x764b, (q15_t)0xcf1c, - (q15_t)0x7641, (q15_t)0xcf05, (q15_t)0x7638, (q15_t)0xceee, (q15_t)0x762e, (q15_t)0xced6, (q15_t)0x7624, (q15_t)0xcebf, - (q15_t)0x761b, (q15_t)0xcea8, (q15_t)0x7611, (q15_t)0xce91, (q15_t)0x7607, (q15_t)0xce7a, (q15_t)0x75fd, (q15_t)0xce62, - (q15_t)0x75f4, (q15_t)0xce4b, (q15_t)0x75ea, (q15_t)0xce34, (q15_t)0x75e0, (q15_t)0xce1d, (q15_t)0x75d6, (q15_t)0xce06, - (q15_t)0x75cc, (q15_t)0xcdef, (q15_t)0x75c3, (q15_t)0xcdd8, (q15_t)0x75b9, (q15_t)0xcdc0, (q15_t)0x75af, (q15_t)0xcda9, - (q15_t)0x75a5, (q15_t)0xcd92, (q15_t)0x759b, (q15_t)0xcd7b, (q15_t)0x7591, (q15_t)0xcd64, (q15_t)0x7587, (q15_t)0xcd4d, - (q15_t)0x757d, (q15_t)0xcd36, (q15_t)0x7573, (q15_t)0xcd1f, (q15_t)0x7569, (q15_t)0xcd08, (q15_t)0x755f, (q15_t)0xccf1, - (q15_t)0x7555, (q15_t)0xccda, (q15_t)0x754b, (q15_t)0xccc3, (q15_t)0x7541, (q15_t)0xccac, (q15_t)0x7537, (q15_t)0xcc95, - (q15_t)0x752d, (q15_t)0xcc7e, (q15_t)0x7523, (q15_t)0xcc67, (q15_t)0x7519, (q15_t)0xcc50, (q15_t)0x750f, (q15_t)0xcc39, - (q15_t)0x7504, (q15_t)0xcc22, (q15_t)0x74fa, (q15_t)0xcc0b, (q15_t)0x74f0, (q15_t)0xcbf4, (q15_t)0x74e6, (q15_t)0xcbdd, - (q15_t)0x74db, (q15_t)0xcbc6, (q15_t)0x74d1, (q15_t)0xcbaf, (q15_t)0x74c7, (q15_t)0xcb98, (q15_t)0x74bd, (q15_t)0xcb81, - (q15_t)0x74b2, (q15_t)0xcb6a, (q15_t)0x74a8, (q15_t)0xcb53, (q15_t)0x749e, (q15_t)0xcb3c, (q15_t)0x7493, (q15_t)0xcb25, - (q15_t)0x7489, (q15_t)0xcb0e, (q15_t)0x747e, (q15_t)0xcaf8, (q15_t)0x7474, (q15_t)0xcae1, (q15_t)0x746a, (q15_t)0xcaca, - (q15_t)0x745f, (q15_t)0xcab3, (q15_t)0x7455, (q15_t)0xca9c, (q15_t)0x744a, (q15_t)0xca85, (q15_t)0x7440, (q15_t)0xca6e, - (q15_t)0x7435, (q15_t)0xca58, (q15_t)0x742b, (q15_t)0xca41, (q15_t)0x7420, (q15_t)0xca2a, (q15_t)0x7415, (q15_t)0xca13, - (q15_t)0x740b, (q15_t)0xc9fc, (q15_t)0x7400, (q15_t)0xc9e6, (q15_t)0x73f6, (q15_t)0xc9cf, (q15_t)0x73eb, (q15_t)0xc9b8, - (q15_t)0x73e0, (q15_t)0xc9a1, (q15_t)0x73d6, (q15_t)0xc98b, (q15_t)0x73cb, (q15_t)0xc974, (q15_t)0x73c0, (q15_t)0xc95d, - (q15_t)0x73b5, (q15_t)0xc946, (q15_t)0x73ab, (q15_t)0xc930, (q15_t)0x73a0, (q15_t)0xc919, (q15_t)0x7395, (q15_t)0xc902, - (q15_t)0x738a, (q15_t)0xc8ec, (q15_t)0x737f, (q15_t)0xc8d5, (q15_t)0x7375, (q15_t)0xc8be, (q15_t)0x736a, (q15_t)0xc8a8, - (q15_t)0x735f, (q15_t)0xc891, (q15_t)0x7354, (q15_t)0xc87a, (q15_t)0x7349, (q15_t)0xc864, (q15_t)0x733e, (q15_t)0xc84d, - (q15_t)0x7333, (q15_t)0xc836, (q15_t)0x7328, (q15_t)0xc820, (q15_t)0x731d, (q15_t)0xc809, (q15_t)0x7312, (q15_t)0xc7f3, - (q15_t)0x7307, (q15_t)0xc7dc, (q15_t)0x72fc, (q15_t)0xc7c5, (q15_t)0x72f1, (q15_t)0xc7af, (q15_t)0x72e6, (q15_t)0xc798, - (q15_t)0x72db, (q15_t)0xc782, (q15_t)0x72d0, (q15_t)0xc76b, (q15_t)0x72c5, (q15_t)0xc755, (q15_t)0x72ba, (q15_t)0xc73e, - (q15_t)0x72af, (q15_t)0xc728, (q15_t)0x72a3, (q15_t)0xc711, (q15_t)0x7298, (q15_t)0xc6fa, (q15_t)0x728d, (q15_t)0xc6e4, - (q15_t)0x7282, (q15_t)0xc6ce, (q15_t)0x7276, (q15_t)0xc6b7, (q15_t)0x726b, (q15_t)0xc6a1, (q15_t)0x7260, (q15_t)0xc68a, - (q15_t)0x7255, (q15_t)0xc674, (q15_t)0x7249, (q15_t)0xc65d, (q15_t)0x723e, (q15_t)0xc647, (q15_t)0x7233, (q15_t)0xc630, - (q15_t)0x7227, (q15_t)0xc61a, (q15_t)0x721c, (q15_t)0xc603, (q15_t)0x7211, (q15_t)0xc5ed, (q15_t)0x7205, (q15_t)0xc5d7, - (q15_t)0x71fa, (q15_t)0xc5c0, (q15_t)0x71ee, (q15_t)0xc5aa, (q15_t)0x71e3, (q15_t)0xc594, (q15_t)0x71d7, (q15_t)0xc57d, - (q15_t)0x71cc, (q15_t)0xc567, (q15_t)0x71c0, (q15_t)0xc551, (q15_t)0x71b5, (q15_t)0xc53a, (q15_t)0x71a9, (q15_t)0xc524, - (q15_t)0x719e, (q15_t)0xc50e, (q15_t)0x7192, (q15_t)0xc4f7, (q15_t)0x7186, (q15_t)0xc4e1, (q15_t)0x717b, (q15_t)0xc4cb, - (q15_t)0x716f, (q15_t)0xc4b4, (q15_t)0x7164, (q15_t)0xc49e, (q15_t)0x7158, (q15_t)0xc488, (q15_t)0x714c, (q15_t)0xc472, - (q15_t)0x7141, (q15_t)0xc45b, (q15_t)0x7135, (q15_t)0xc445, (q15_t)0x7129, (q15_t)0xc42f, (q15_t)0x711d, (q15_t)0xc419, - (q15_t)0x7112, (q15_t)0xc403, (q15_t)0x7106, (q15_t)0xc3ec, (q15_t)0x70fa, (q15_t)0xc3d6, (q15_t)0x70ee, (q15_t)0xc3c0, - (q15_t)0x70e2, (q15_t)0xc3aa, (q15_t)0x70d6, (q15_t)0xc394, (q15_t)0x70cb, (q15_t)0xc37d, (q15_t)0x70bf, (q15_t)0xc367, - (q15_t)0x70b3, (q15_t)0xc351, (q15_t)0x70a7, (q15_t)0xc33b, (q15_t)0x709b, (q15_t)0xc325, (q15_t)0x708f, (q15_t)0xc30f, - (q15_t)0x7083, (q15_t)0xc2f9, (q15_t)0x7077, (q15_t)0xc2e3, (q15_t)0x706b, (q15_t)0xc2cd, (q15_t)0x705f, (q15_t)0xc2b7, - (q15_t)0x7053, (q15_t)0xc2a0, (q15_t)0x7047, (q15_t)0xc28a, (q15_t)0x703b, (q15_t)0xc274, (q15_t)0x702f, (q15_t)0xc25e, - (q15_t)0x7023, (q15_t)0xc248, (q15_t)0x7016, (q15_t)0xc232, (q15_t)0x700a, (q15_t)0xc21c, (q15_t)0x6ffe, (q15_t)0xc206, - (q15_t)0x6ff2, (q15_t)0xc1f0, (q15_t)0x6fe6, (q15_t)0xc1da, (q15_t)0x6fda, (q15_t)0xc1c4, (q15_t)0x6fcd, (q15_t)0xc1ae, - (q15_t)0x6fc1, (q15_t)0xc198, (q15_t)0x6fb5, (q15_t)0xc183, (q15_t)0x6fa9, (q15_t)0xc16d, (q15_t)0x6f9c, (q15_t)0xc157, - (q15_t)0x6f90, (q15_t)0xc141, (q15_t)0x6f84, (q15_t)0xc12b, (q15_t)0x6f77, (q15_t)0xc115, (q15_t)0x6f6b, (q15_t)0xc0ff, - (q15_t)0x6f5f, (q15_t)0xc0e9, (q15_t)0x6f52, (q15_t)0xc0d3, (q15_t)0x6f46, (q15_t)0xc0bd, (q15_t)0x6f39, (q15_t)0xc0a8, - (q15_t)0x6f2d, (q15_t)0xc092, (q15_t)0x6f20, (q15_t)0xc07c, (q15_t)0x6f14, (q15_t)0xc066, (q15_t)0x6f07, (q15_t)0xc050, - (q15_t)0x6efb, (q15_t)0xc03b, (q15_t)0x6eee, (q15_t)0xc025, (q15_t)0x6ee2, (q15_t)0xc00f, (q15_t)0x6ed5, (q15_t)0xbff9, - (q15_t)0x6ec9, (q15_t)0xbfe3, (q15_t)0x6ebc, (q15_t)0xbfce, (q15_t)0x6eaf, (q15_t)0xbfb8, (q15_t)0x6ea3, (q15_t)0xbfa2, - (q15_t)0x6e96, (q15_t)0xbf8d, (q15_t)0x6e89, (q15_t)0xbf77, (q15_t)0x6e7d, (q15_t)0xbf61, (q15_t)0x6e70, (q15_t)0xbf4b, - (q15_t)0x6e63, (q15_t)0xbf36, (q15_t)0x6e57, (q15_t)0xbf20, (q15_t)0x6e4a, (q15_t)0xbf0a, (q15_t)0x6e3d, (q15_t)0xbef5, - (q15_t)0x6e30, (q15_t)0xbedf, (q15_t)0x6e24, (q15_t)0xbeca, (q15_t)0x6e17, (q15_t)0xbeb4, (q15_t)0x6e0a, (q15_t)0xbe9e, - (q15_t)0x6dfd, (q15_t)0xbe89, (q15_t)0x6df0, (q15_t)0xbe73, (q15_t)0x6de3, (q15_t)0xbe5e, (q15_t)0x6dd6, (q15_t)0xbe48, - (q15_t)0x6dca, (q15_t)0xbe32, (q15_t)0x6dbd, (q15_t)0xbe1d, (q15_t)0x6db0, (q15_t)0xbe07, (q15_t)0x6da3, (q15_t)0xbdf2, - (q15_t)0x6d96, (q15_t)0xbddc, (q15_t)0x6d89, (q15_t)0xbdc7, (q15_t)0x6d7c, (q15_t)0xbdb1, (q15_t)0x6d6f, (q15_t)0xbd9c, - (q15_t)0x6d62, (q15_t)0xbd86, (q15_t)0x6d55, (q15_t)0xbd71, (q15_t)0x6d48, (q15_t)0xbd5b, (q15_t)0x6d3a, (q15_t)0xbd46, - (q15_t)0x6d2d, (q15_t)0xbd30, (q15_t)0x6d20, (q15_t)0xbd1b, (q15_t)0x6d13, (q15_t)0xbd06, (q15_t)0x6d06, (q15_t)0xbcf0, - (q15_t)0x6cf9, (q15_t)0xbcdb, (q15_t)0x6cec, (q15_t)0xbcc5, (q15_t)0x6cde, (q15_t)0xbcb0, (q15_t)0x6cd1, (q15_t)0xbc9b, - (q15_t)0x6cc4, (q15_t)0xbc85, (q15_t)0x6cb7, (q15_t)0xbc70, (q15_t)0x6ca9, (q15_t)0xbc5b, (q15_t)0x6c9c, (q15_t)0xbc45, - (q15_t)0x6c8f, (q15_t)0xbc30, (q15_t)0x6c81, (q15_t)0xbc1b, (q15_t)0x6c74, (q15_t)0xbc05, (q15_t)0x6c67, (q15_t)0xbbf0, - (q15_t)0x6c59, (q15_t)0xbbdb, (q15_t)0x6c4c, (q15_t)0xbbc5, (q15_t)0x6c3f, (q15_t)0xbbb0, (q15_t)0x6c31, (q15_t)0xbb9b, - (q15_t)0x6c24, (q15_t)0xbb86, (q15_t)0x6c16, (q15_t)0xbb70, (q15_t)0x6c09, (q15_t)0xbb5b, (q15_t)0x6bfb, (q15_t)0xbb46, - (q15_t)0x6bee, (q15_t)0xbb31, (q15_t)0x6be0, (q15_t)0xbb1c, (q15_t)0x6bd3, (q15_t)0xbb06, (q15_t)0x6bc5, (q15_t)0xbaf1, - (q15_t)0x6bb8, (q15_t)0xbadc, (q15_t)0x6baa, (q15_t)0xbac7, (q15_t)0x6b9c, (q15_t)0xbab2, (q15_t)0x6b8f, (q15_t)0xba9d, - (q15_t)0x6b81, (q15_t)0xba88, (q15_t)0x6b73, (q15_t)0xba73, (q15_t)0x6b66, (q15_t)0xba5d, (q15_t)0x6b58, (q15_t)0xba48, - (q15_t)0x6b4a, (q15_t)0xba33, (q15_t)0x6b3d, (q15_t)0xba1e, (q15_t)0x6b2f, (q15_t)0xba09, (q15_t)0x6b21, (q15_t)0xb9f4, - (q15_t)0x6b13, (q15_t)0xb9df, (q15_t)0x6b06, (q15_t)0xb9ca, (q15_t)0x6af8, (q15_t)0xb9b5, (q15_t)0x6aea, (q15_t)0xb9a0, - (q15_t)0x6adc, (q15_t)0xb98b, (q15_t)0x6ace, (q15_t)0xb976, (q15_t)0x6ac1, (q15_t)0xb961, (q15_t)0x6ab3, (q15_t)0xb94c, - (q15_t)0x6aa5, (q15_t)0xb937, (q15_t)0x6a97, (q15_t)0xb922, (q15_t)0x6a89, (q15_t)0xb90d, (q15_t)0x6a7b, (q15_t)0xb8f8, - (q15_t)0x6a6d, (q15_t)0xb8e4, (q15_t)0x6a5f, (q15_t)0xb8cf, (q15_t)0x6a51, (q15_t)0xb8ba, (q15_t)0x6a43, (q15_t)0xb8a5, - (q15_t)0x6a35, (q15_t)0xb890, (q15_t)0x6a27, (q15_t)0xb87b, (q15_t)0x6a19, (q15_t)0xb866, (q15_t)0x6a0b, (q15_t)0xb852, - (q15_t)0x69fd, (q15_t)0xb83d, (q15_t)0x69ef, (q15_t)0xb828, (q15_t)0x69e1, (q15_t)0xb813, (q15_t)0x69d3, (q15_t)0xb7fe, - (q15_t)0x69c4, (q15_t)0xb7ea, (q15_t)0x69b6, (q15_t)0xb7d5, (q15_t)0x69a8, (q15_t)0xb7c0, (q15_t)0x699a, (q15_t)0xb7ab, - (q15_t)0x698c, (q15_t)0xb797, (q15_t)0x697d, (q15_t)0xb782, (q15_t)0x696f, (q15_t)0xb76d, (q15_t)0x6961, (q15_t)0xb758, - (q15_t)0x6953, (q15_t)0xb744, (q15_t)0x6944, (q15_t)0xb72f, (q15_t)0x6936, (q15_t)0xb71a, (q15_t)0x6928, (q15_t)0xb706, - (q15_t)0x6919, (q15_t)0xb6f1, (q15_t)0x690b, (q15_t)0xb6dd, (q15_t)0x68fd, (q15_t)0xb6c8, (q15_t)0x68ee, (q15_t)0xb6b3, - (q15_t)0x68e0, (q15_t)0xb69f, (q15_t)0x68d1, (q15_t)0xb68a, (q15_t)0x68c3, (q15_t)0xb676, (q15_t)0x68b5, (q15_t)0xb661, - (q15_t)0x68a6, (q15_t)0xb64c, (q15_t)0x6898, (q15_t)0xb638, (q15_t)0x6889, (q15_t)0xb623, (q15_t)0x687b, (q15_t)0xb60f, - (q15_t)0x686c, (q15_t)0xb5fa, (q15_t)0x685e, (q15_t)0xb5e6, (q15_t)0x684f, (q15_t)0xb5d1, (q15_t)0x6840, (q15_t)0xb5bd, - (q15_t)0x6832, (q15_t)0xb5a8, (q15_t)0x6823, (q15_t)0xb594, (q15_t)0x6815, (q15_t)0xb57f, (q15_t)0x6806, (q15_t)0xb56b, - (q15_t)0x67f7, (q15_t)0xb557, (q15_t)0x67e9, (q15_t)0xb542, (q15_t)0x67da, (q15_t)0xb52e, (q15_t)0x67cb, (q15_t)0xb519, - (q15_t)0x67bd, (q15_t)0xb505, (q15_t)0x67ae, (q15_t)0xb4f1, (q15_t)0x679f, (q15_t)0xb4dc, (q15_t)0x6790, (q15_t)0xb4c8, - (q15_t)0x6782, (q15_t)0xb4b4, (q15_t)0x6773, (q15_t)0xb49f, (q15_t)0x6764, (q15_t)0xb48b, (q15_t)0x6755, (q15_t)0xb477, - (q15_t)0x6746, (q15_t)0xb462, (q15_t)0x6737, (q15_t)0xb44e, (q15_t)0x6729, (q15_t)0xb43a, (q15_t)0x671a, (q15_t)0xb426, - (q15_t)0x670b, (q15_t)0xb411, (q15_t)0x66fc, (q15_t)0xb3fd, (q15_t)0x66ed, (q15_t)0xb3e9, (q15_t)0x66de, (q15_t)0xb3d5, - (q15_t)0x66cf, (q15_t)0xb3c1, (q15_t)0x66c0, (q15_t)0xb3ac, (q15_t)0x66b1, (q15_t)0xb398, (q15_t)0x66a2, (q15_t)0xb384, - (q15_t)0x6693, (q15_t)0xb370, (q15_t)0x6684, (q15_t)0xb35c, (q15_t)0x6675, (q15_t)0xb348, (q15_t)0x6666, (q15_t)0xb334, - (q15_t)0x6657, (q15_t)0xb31f, (q15_t)0x6648, (q15_t)0xb30b, (q15_t)0x6639, (q15_t)0xb2f7, (q15_t)0x6629, (q15_t)0xb2e3, - (q15_t)0x661a, (q15_t)0xb2cf, (q15_t)0x660b, (q15_t)0xb2bb, (q15_t)0x65fc, (q15_t)0xb2a7, (q15_t)0x65ed, (q15_t)0xb293, - (q15_t)0x65dd, (q15_t)0xb27f, (q15_t)0x65ce, (q15_t)0xb26b, (q15_t)0x65bf, (q15_t)0xb257, (q15_t)0x65b0, (q15_t)0xb243, - (q15_t)0x65a0, (q15_t)0xb22f, (q15_t)0x6591, (q15_t)0xb21b, (q15_t)0x6582, (q15_t)0xb207, (q15_t)0x6573, (q15_t)0xb1f3, - (q15_t)0x6563, (q15_t)0xb1df, (q15_t)0x6554, (q15_t)0xb1cc, (q15_t)0x6545, (q15_t)0xb1b8, (q15_t)0x6535, (q15_t)0xb1a4, - (q15_t)0x6526, (q15_t)0xb190, (q15_t)0x6516, (q15_t)0xb17c, (q15_t)0x6507, (q15_t)0xb168, (q15_t)0x64f7, (q15_t)0xb154, - (q15_t)0x64e8, (q15_t)0xb141, (q15_t)0x64d9, (q15_t)0xb12d, (q15_t)0x64c9, (q15_t)0xb119, (q15_t)0x64ba, (q15_t)0xb105, - (q15_t)0x64aa, (q15_t)0xb0f1, (q15_t)0x649b, (q15_t)0xb0de, (q15_t)0x648b, (q15_t)0xb0ca, (q15_t)0x647b, (q15_t)0xb0b6, - (q15_t)0x646c, (q15_t)0xb0a2, (q15_t)0x645c, (q15_t)0xb08f, (q15_t)0x644d, (q15_t)0xb07b, (q15_t)0x643d, (q15_t)0xb067, - (q15_t)0x642d, (q15_t)0xb054, (q15_t)0x641e, (q15_t)0xb040, (q15_t)0x640e, (q15_t)0xb02c, (q15_t)0x63fe, (q15_t)0xb019, - (q15_t)0x63ef, (q15_t)0xb005, (q15_t)0x63df, (q15_t)0xaff1, (q15_t)0x63cf, (q15_t)0xafde, (q15_t)0x63c0, (q15_t)0xafca, - (q15_t)0x63b0, (q15_t)0xafb7, (q15_t)0x63a0, (q15_t)0xafa3, (q15_t)0x6390, (q15_t)0xaf90, (q15_t)0x6380, (q15_t)0xaf7c, - (q15_t)0x6371, (q15_t)0xaf69, (q15_t)0x6361, (q15_t)0xaf55, (q15_t)0x6351, (q15_t)0xaf41, (q15_t)0x6341, (q15_t)0xaf2e, - (q15_t)0x6331, (q15_t)0xaf1b, (q15_t)0x6321, (q15_t)0xaf07, (q15_t)0x6311, (q15_t)0xaef4, (q15_t)0x6301, (q15_t)0xaee0, - (q15_t)0x62f2, (q15_t)0xaecd, (q15_t)0x62e2, (q15_t)0xaeb9, (q15_t)0x62d2, (q15_t)0xaea6, (q15_t)0x62c2, (q15_t)0xae92, - (q15_t)0x62b2, (q15_t)0xae7f, (q15_t)0x62a2, (q15_t)0xae6c, (q15_t)0x6292, (q15_t)0xae58, (q15_t)0x6282, (q15_t)0xae45, - (q15_t)0x6271, (q15_t)0xae32, (q15_t)0x6261, (q15_t)0xae1e, (q15_t)0x6251, (q15_t)0xae0b, (q15_t)0x6241, (q15_t)0xadf8, - (q15_t)0x6231, (q15_t)0xade4, (q15_t)0x6221, (q15_t)0xadd1, (q15_t)0x6211, (q15_t)0xadbe, (q15_t)0x6201, (q15_t)0xadab, - (q15_t)0x61f1, (q15_t)0xad97, (q15_t)0x61e0, (q15_t)0xad84, (q15_t)0x61d0, (q15_t)0xad71, (q15_t)0x61c0, (q15_t)0xad5e, - (q15_t)0x61b0, (q15_t)0xad4b, (q15_t)0x619f, (q15_t)0xad37, (q15_t)0x618f, (q15_t)0xad24, (q15_t)0x617f, (q15_t)0xad11, - (q15_t)0x616f, (q15_t)0xacfe, (q15_t)0x615e, (q15_t)0xaceb, (q15_t)0x614e, (q15_t)0xacd8, (q15_t)0x613e, (q15_t)0xacc5, - (q15_t)0x612d, (q15_t)0xacb2, (q15_t)0x611d, (q15_t)0xac9e, (q15_t)0x610d, (q15_t)0xac8b, (q15_t)0x60fc, (q15_t)0xac78, - (q15_t)0x60ec, (q15_t)0xac65, (q15_t)0x60db, (q15_t)0xac52, (q15_t)0x60cb, (q15_t)0xac3f, (q15_t)0x60ba, (q15_t)0xac2c, - (q15_t)0x60aa, (q15_t)0xac19, (q15_t)0x6099, (q15_t)0xac06, (q15_t)0x6089, (q15_t)0xabf3, (q15_t)0x6078, (q15_t)0xabe0, - (q15_t)0x6068, (q15_t)0xabcd, (q15_t)0x6057, (q15_t)0xabbb, (q15_t)0x6047, (q15_t)0xaba8, (q15_t)0x6036, (q15_t)0xab95, - (q15_t)0x6026, (q15_t)0xab82, (q15_t)0x6015, (q15_t)0xab6f, (q15_t)0x6004, (q15_t)0xab5c, (q15_t)0x5ff4, (q15_t)0xab49, - (q15_t)0x5fe3, (q15_t)0xab36, (q15_t)0x5fd3, (q15_t)0xab24, (q15_t)0x5fc2, (q15_t)0xab11, (q15_t)0x5fb1, (q15_t)0xaafe, - (q15_t)0x5fa0, (q15_t)0xaaeb, (q15_t)0x5f90, (q15_t)0xaad8, (q15_t)0x5f7f, (q15_t)0xaac6, (q15_t)0x5f6e, (q15_t)0xaab3, - (q15_t)0x5f5e, (q15_t)0xaaa0, (q15_t)0x5f4d, (q15_t)0xaa8e, (q15_t)0x5f3c, (q15_t)0xaa7b, (q15_t)0x5f2b, (q15_t)0xaa68, - (q15_t)0x5f1a, (q15_t)0xaa55, (q15_t)0x5f0a, (q15_t)0xaa43, (q15_t)0x5ef9, (q15_t)0xaa30, (q15_t)0x5ee8, (q15_t)0xaa1d, - (q15_t)0x5ed7, (q15_t)0xaa0b, (q15_t)0x5ec6, (q15_t)0xa9f8, (q15_t)0x5eb5, (q15_t)0xa9e6, (q15_t)0x5ea4, (q15_t)0xa9d3, - (q15_t)0x5e93, (q15_t)0xa9c0, (q15_t)0x5e82, (q15_t)0xa9ae, (q15_t)0x5e71, (q15_t)0xa99b, (q15_t)0x5e60, (q15_t)0xa989, - (q15_t)0x5e50, (q15_t)0xa976, (q15_t)0x5e3f, (q15_t)0xa964, (q15_t)0x5e2d, (q15_t)0xa951, (q15_t)0x5e1c, (q15_t)0xa93f, - (q15_t)0x5e0b, (q15_t)0xa92c, (q15_t)0x5dfa, (q15_t)0xa91a, (q15_t)0x5de9, (q15_t)0xa907, (q15_t)0x5dd8, (q15_t)0xa8f5, - (q15_t)0x5dc7, (q15_t)0xa8e3, (q15_t)0x5db6, (q15_t)0xa8d0, (q15_t)0x5da5, (q15_t)0xa8be, (q15_t)0x5d94, (q15_t)0xa8ab, - (q15_t)0x5d83, (q15_t)0xa899, (q15_t)0x5d71, (q15_t)0xa887, (q15_t)0x5d60, (q15_t)0xa874, (q15_t)0x5d4f, (q15_t)0xa862, - (q15_t)0x5d3e, (q15_t)0xa850, (q15_t)0x5d2d, (q15_t)0xa83d, (q15_t)0x5d1b, (q15_t)0xa82b, (q15_t)0x5d0a, (q15_t)0xa819, - (q15_t)0x5cf9, (q15_t)0xa807, (q15_t)0x5ce8, (q15_t)0xa7f4, (q15_t)0x5cd6, (q15_t)0xa7e2, (q15_t)0x5cc5, (q15_t)0xa7d0, - (q15_t)0x5cb4, (q15_t)0xa7be, (q15_t)0x5ca2, (q15_t)0xa7ab, (q15_t)0x5c91, (q15_t)0xa799, (q15_t)0x5c80, (q15_t)0xa787, - (q15_t)0x5c6e, (q15_t)0xa775, (q15_t)0x5c5d, (q15_t)0xa763, (q15_t)0x5c4b, (q15_t)0xa751, (q15_t)0x5c3a, (q15_t)0xa73f, - (q15_t)0x5c29, (q15_t)0xa72c, (q15_t)0x5c17, (q15_t)0xa71a, (q15_t)0x5c06, (q15_t)0xa708, (q15_t)0x5bf4, (q15_t)0xa6f6, - (q15_t)0x5be3, (q15_t)0xa6e4, (q15_t)0x5bd1, (q15_t)0xa6d2, (q15_t)0x5bc0, (q15_t)0xa6c0, (q15_t)0x5bae, (q15_t)0xa6ae, - (q15_t)0x5b9d, (q15_t)0xa69c, (q15_t)0x5b8b, (q15_t)0xa68a, (q15_t)0x5b79, (q15_t)0xa678, (q15_t)0x5b68, (q15_t)0xa666, - (q15_t)0x5b56, (q15_t)0xa654, (q15_t)0x5b45, (q15_t)0xa642, (q15_t)0x5b33, (q15_t)0xa630, (q15_t)0x5b21, (q15_t)0xa61f, - (q15_t)0x5b10, (q15_t)0xa60d, (q15_t)0x5afe, (q15_t)0xa5fb, (q15_t)0x5aec, (q15_t)0xa5e9, (q15_t)0x5adb, (q15_t)0xa5d7, - (q15_t)0x5ac9, (q15_t)0xa5c5, (q15_t)0x5ab7, (q15_t)0xa5b3, (q15_t)0x5aa5, (q15_t)0xa5a2, (q15_t)0x5a94, (q15_t)0xa590, - (q15_t)0x5a82, (q15_t)0xa57e, (q15_t)0x5a70, (q15_t)0xa56c, (q15_t)0x5a5e, (q15_t)0xa55b, (q15_t)0x5a4d, (q15_t)0xa549, - (q15_t)0x5a3b, (q15_t)0xa537, (q15_t)0x5a29, (q15_t)0xa525, (q15_t)0x5a17, (q15_t)0xa514, (q15_t)0x5a05, (q15_t)0xa502, - (q15_t)0x59f3, (q15_t)0xa4f0, (q15_t)0x59e1, (q15_t)0xa4df, (q15_t)0x59d0, (q15_t)0xa4cd, (q15_t)0x59be, (q15_t)0xa4bb, - (q15_t)0x59ac, (q15_t)0xa4aa, (q15_t)0x599a, (q15_t)0xa498, (q15_t)0x5988, (q15_t)0xa487, (q15_t)0x5976, (q15_t)0xa475, - (q15_t)0x5964, (q15_t)0xa463, (q15_t)0x5952, (q15_t)0xa452, (q15_t)0x5940, (q15_t)0xa440, (q15_t)0x592e, (q15_t)0xa42f, - (q15_t)0x591c, (q15_t)0xa41d, (q15_t)0x590a, (q15_t)0xa40c, (q15_t)0x58f8, (q15_t)0xa3fa, (q15_t)0x58e6, (q15_t)0xa3e9, - (q15_t)0x58d4, (q15_t)0xa3d7, (q15_t)0x58c1, (q15_t)0xa3c6, (q15_t)0x58af, (q15_t)0xa3b5, (q15_t)0x589d, (q15_t)0xa3a3, - (q15_t)0x588b, (q15_t)0xa392, (q15_t)0x5879, (q15_t)0xa380, (q15_t)0x5867, (q15_t)0xa36f, (q15_t)0x5855, (q15_t)0xa35e, - (q15_t)0x5842, (q15_t)0xa34c, (q15_t)0x5830, (q15_t)0xa33b, (q15_t)0x581e, (q15_t)0xa32a, (q15_t)0x580c, (q15_t)0xa318, - (q15_t)0x57f9, (q15_t)0xa307, (q15_t)0x57e7, (q15_t)0xa2f6, (q15_t)0x57d5, (q15_t)0xa2e5, (q15_t)0x57c3, (q15_t)0xa2d3, - (q15_t)0x57b0, (q15_t)0xa2c2, (q15_t)0x579e, (q15_t)0xa2b1, (q15_t)0x578c, (q15_t)0xa2a0, (q15_t)0x5779, (q15_t)0xa28f, - (q15_t)0x5767, (q15_t)0xa27d, (q15_t)0x5755, (q15_t)0xa26c, (q15_t)0x5742, (q15_t)0xa25b, (q15_t)0x5730, (q15_t)0xa24a, - (q15_t)0x571d, (q15_t)0xa239, (q15_t)0x570b, (q15_t)0xa228, (q15_t)0x56f9, (q15_t)0xa217, (q15_t)0x56e6, (q15_t)0xa206, - (q15_t)0x56d4, (q15_t)0xa1f5, (q15_t)0x56c1, (q15_t)0xa1e4, (q15_t)0x56af, (q15_t)0xa1d3, (q15_t)0x569c, (q15_t)0xa1c1, - (q15_t)0x568a, (q15_t)0xa1b0, (q15_t)0x5677, (q15_t)0xa1a0, (q15_t)0x5665, (q15_t)0xa18f, (q15_t)0x5652, (q15_t)0xa17e, - (q15_t)0x5640, (q15_t)0xa16d, (q15_t)0x562d, (q15_t)0xa15c, (q15_t)0x561a, (q15_t)0xa14b, (q15_t)0x5608, (q15_t)0xa13a, - (q15_t)0x55f5, (q15_t)0xa129, (q15_t)0x55e3, (q15_t)0xa118, (q15_t)0x55d0, (q15_t)0xa107, (q15_t)0x55bd, (q15_t)0xa0f6, - (q15_t)0x55ab, (q15_t)0xa0e6, (q15_t)0x5598, (q15_t)0xa0d5, (q15_t)0x5585, (q15_t)0xa0c4, (q15_t)0x5572, (q15_t)0xa0b3, - (q15_t)0x5560, (q15_t)0xa0a2, (q15_t)0x554d, (q15_t)0xa092, (q15_t)0x553a, (q15_t)0xa081, (q15_t)0x5528, (q15_t)0xa070, - (q15_t)0x5515, (q15_t)0xa060, (q15_t)0x5502, (q15_t)0xa04f, (q15_t)0x54ef, (q15_t)0xa03e, (q15_t)0x54dc, (q15_t)0xa02d, - (q15_t)0x54ca, (q15_t)0xa01d, (q15_t)0x54b7, (q15_t)0xa00c, (q15_t)0x54a4, (q15_t)0x9ffc, (q15_t)0x5491, (q15_t)0x9feb, - (q15_t)0x547e, (q15_t)0x9fda, (q15_t)0x546b, (q15_t)0x9fca, (q15_t)0x5458, (q15_t)0x9fb9, (q15_t)0x5445, (q15_t)0x9fa9, - (q15_t)0x5433, (q15_t)0x9f98, (q15_t)0x5420, (q15_t)0x9f88, (q15_t)0x540d, (q15_t)0x9f77, (q15_t)0x53fa, (q15_t)0x9f67, - (q15_t)0x53e7, (q15_t)0x9f56, (q15_t)0x53d4, (q15_t)0x9f46, (q15_t)0x53c1, (q15_t)0x9f35, (q15_t)0x53ae, (q15_t)0x9f25, - (q15_t)0x539b, (q15_t)0x9f14, (q15_t)0x5388, (q15_t)0x9f04, (q15_t)0x5375, (q15_t)0x9ef3, (q15_t)0x5362, (q15_t)0x9ee3, - (q15_t)0x534e, (q15_t)0x9ed3, (q15_t)0x533b, (q15_t)0x9ec2, (q15_t)0x5328, (q15_t)0x9eb2, (q15_t)0x5315, (q15_t)0x9ea2, - (q15_t)0x5302, (q15_t)0x9e91, (q15_t)0x52ef, (q15_t)0x9e81, (q15_t)0x52dc, (q15_t)0x9e71, (q15_t)0x52c9, (q15_t)0x9e61, - (q15_t)0x52b5, (q15_t)0x9e50, (q15_t)0x52a2, (q15_t)0x9e40, (q15_t)0x528f, (q15_t)0x9e30, (q15_t)0x527c, (q15_t)0x9e20, - (q15_t)0x5269, (q15_t)0x9e0f, (q15_t)0x5255, (q15_t)0x9dff, (q15_t)0x5242, (q15_t)0x9def, (q15_t)0x522f, (q15_t)0x9ddf, - (q15_t)0x521c, (q15_t)0x9dcf, (q15_t)0x5208, (q15_t)0x9dbf, (q15_t)0x51f5, (q15_t)0x9daf, (q15_t)0x51e2, (q15_t)0x9d9f, - (q15_t)0x51ce, (q15_t)0x9d8f, (q15_t)0x51bb, (q15_t)0x9d7e, (q15_t)0x51a8, (q15_t)0x9d6e, (q15_t)0x5194, (q15_t)0x9d5e, - (q15_t)0x5181, (q15_t)0x9d4e, (q15_t)0x516e, (q15_t)0x9d3e, (q15_t)0x515a, (q15_t)0x9d2e, (q15_t)0x5147, (q15_t)0x9d1e, - (q15_t)0x5133, (q15_t)0x9d0e, (q15_t)0x5120, (q15_t)0x9cff, (q15_t)0x510c, (q15_t)0x9cef, (q15_t)0x50f9, (q15_t)0x9cdf, - (q15_t)0x50e5, (q15_t)0x9ccf, (q15_t)0x50d2, (q15_t)0x9cbf, (q15_t)0x50bf, (q15_t)0x9caf, (q15_t)0x50ab, (q15_t)0x9c9f, - (q15_t)0x5097, (q15_t)0x9c8f, (q15_t)0x5084, (q15_t)0x9c80, (q15_t)0x5070, (q15_t)0x9c70, (q15_t)0x505d, (q15_t)0x9c60, - (q15_t)0x5049, (q15_t)0x9c50, (q15_t)0x5036, (q15_t)0x9c40, (q15_t)0x5022, (q15_t)0x9c31, (q15_t)0x500f, (q15_t)0x9c21, - (q15_t)0x4ffb, (q15_t)0x9c11, (q15_t)0x4fe7, (q15_t)0x9c02, (q15_t)0x4fd4, (q15_t)0x9bf2, (q15_t)0x4fc0, (q15_t)0x9be2, - (q15_t)0x4fac, (q15_t)0x9bd3, (q15_t)0x4f99, (q15_t)0x9bc3, (q15_t)0x4f85, (q15_t)0x9bb3, (q15_t)0x4f71, (q15_t)0x9ba4, - (q15_t)0x4f5e, (q15_t)0x9b94, (q15_t)0x4f4a, (q15_t)0x9b85, (q15_t)0x4f36, (q15_t)0x9b75, (q15_t)0x4f22, (q15_t)0x9b65, - (q15_t)0x4f0f, (q15_t)0x9b56, (q15_t)0x4efb, (q15_t)0x9b46, (q15_t)0x4ee7, (q15_t)0x9b37, (q15_t)0x4ed3, (q15_t)0x9b27, - (q15_t)0x4ebf, (q15_t)0x9b18, (q15_t)0x4eac, (q15_t)0x9b09, (q15_t)0x4e98, (q15_t)0x9af9, (q15_t)0x4e84, (q15_t)0x9aea, - (q15_t)0x4e70, (q15_t)0x9ada, (q15_t)0x4e5c, (q15_t)0x9acb, (q15_t)0x4e48, (q15_t)0x9abb, (q15_t)0x4e34, (q15_t)0x9aac, - (q15_t)0x4e21, (q15_t)0x9a9d, (q15_t)0x4e0d, (q15_t)0x9a8d, (q15_t)0x4df9, (q15_t)0x9a7e, (q15_t)0x4de5, (q15_t)0x9a6f, - (q15_t)0x4dd1, (q15_t)0x9a60, (q15_t)0x4dbd, (q15_t)0x9a50, (q15_t)0x4da9, (q15_t)0x9a41, (q15_t)0x4d95, (q15_t)0x9a32, - (q15_t)0x4d81, (q15_t)0x9a23, (q15_t)0x4d6d, (q15_t)0x9a13, (q15_t)0x4d59, (q15_t)0x9a04, (q15_t)0x4d45, (q15_t)0x99f5, - (q15_t)0x4d31, (q15_t)0x99e6, (q15_t)0x4d1d, (q15_t)0x99d7, (q15_t)0x4d09, (q15_t)0x99c7, (q15_t)0x4cf5, (q15_t)0x99b8, - (q15_t)0x4ce1, (q15_t)0x99a9, (q15_t)0x4ccc, (q15_t)0x999a, (q15_t)0x4cb8, (q15_t)0x998b, (q15_t)0x4ca4, (q15_t)0x997c, - (q15_t)0x4c90, (q15_t)0x996d, (q15_t)0x4c7c, (q15_t)0x995e, (q15_t)0x4c68, (q15_t)0x994f, (q15_t)0x4c54, (q15_t)0x9940, - (q15_t)0x4c3f, (q15_t)0x9931, (q15_t)0x4c2b, (q15_t)0x9922, (q15_t)0x4c17, (q15_t)0x9913, (q15_t)0x4c03, (q15_t)0x9904, - (q15_t)0x4bef, (q15_t)0x98f5, (q15_t)0x4bda, (q15_t)0x98e6, (q15_t)0x4bc6, (q15_t)0x98d7, (q15_t)0x4bb2, (q15_t)0x98c9, - (q15_t)0x4b9e, (q15_t)0x98ba, (q15_t)0x4b89, (q15_t)0x98ab, (q15_t)0x4b75, (q15_t)0x989c, (q15_t)0x4b61, (q15_t)0x988d, - (q15_t)0x4b4c, (q15_t)0x987e, (q15_t)0x4b38, (q15_t)0x9870, (q15_t)0x4b24, (q15_t)0x9861, (q15_t)0x4b0f, (q15_t)0x9852, - (q15_t)0x4afb, (q15_t)0x9843, (q15_t)0x4ae7, (q15_t)0x9835, (q15_t)0x4ad2, (q15_t)0x9826, (q15_t)0x4abe, (q15_t)0x9817, - (q15_t)0x4aa9, (q15_t)0x9809, (q15_t)0x4a95, (q15_t)0x97fa, (q15_t)0x4a81, (q15_t)0x97eb, (q15_t)0x4a6c, (q15_t)0x97dd, - (q15_t)0x4a58, (q15_t)0x97ce, (q15_t)0x4a43, (q15_t)0x97c0, (q15_t)0x4a2f, (q15_t)0x97b1, (q15_t)0x4a1a, (q15_t)0x97a2, - (q15_t)0x4a06, (q15_t)0x9794, (q15_t)0x49f1, (q15_t)0x9785, (q15_t)0x49dd, (q15_t)0x9777, (q15_t)0x49c8, (q15_t)0x9768, - (q15_t)0x49b4, (q15_t)0x975a, (q15_t)0x499f, (q15_t)0x974b, (q15_t)0x498a, (q15_t)0x973d, (q15_t)0x4976, (q15_t)0x972f, - (q15_t)0x4961, (q15_t)0x9720, (q15_t)0x494d, (q15_t)0x9712, (q15_t)0x4938, (q15_t)0x9703, (q15_t)0x4923, (q15_t)0x96f5, - (q15_t)0x490f, (q15_t)0x96e7, (q15_t)0x48fa, (q15_t)0x96d8, (q15_t)0x48e6, (q15_t)0x96ca, (q15_t)0x48d1, (q15_t)0x96bc, - (q15_t)0x48bc, (q15_t)0x96ad, (q15_t)0x48a8, (q15_t)0x969f, (q15_t)0x4893, (q15_t)0x9691, (q15_t)0x487e, (q15_t)0x9683, - (q15_t)0x4869, (q15_t)0x9674, (q15_t)0x4855, (q15_t)0x9666, (q15_t)0x4840, (q15_t)0x9658, (q15_t)0x482b, (q15_t)0x964a, - (q15_t)0x4816, (q15_t)0x963c, (q15_t)0x4802, (q15_t)0x962d, (q15_t)0x47ed, (q15_t)0x961f, (q15_t)0x47d8, (q15_t)0x9611, - (q15_t)0x47c3, (q15_t)0x9603, (q15_t)0x47ae, (q15_t)0x95f5, (q15_t)0x479a, (q15_t)0x95e7, (q15_t)0x4785, (q15_t)0x95d9, - (q15_t)0x4770, (q15_t)0x95cb, (q15_t)0x475b, (q15_t)0x95bd, (q15_t)0x4746, (q15_t)0x95af, (q15_t)0x4731, (q15_t)0x95a1, - (q15_t)0x471c, (q15_t)0x9593, (q15_t)0x4708, (q15_t)0x9585, (q15_t)0x46f3, (q15_t)0x9577, (q15_t)0x46de, (q15_t)0x9569, - (q15_t)0x46c9, (q15_t)0x955b, (q15_t)0x46b4, (q15_t)0x954d, (q15_t)0x469f, (q15_t)0x953f, (q15_t)0x468a, (q15_t)0x9532, - (q15_t)0x4675, (q15_t)0x9524, (q15_t)0x4660, (q15_t)0x9516, (q15_t)0x464b, (q15_t)0x9508, (q15_t)0x4636, (q15_t)0x94fa, - (q15_t)0x4621, (q15_t)0x94ed, (q15_t)0x460c, (q15_t)0x94df, (q15_t)0x45f7, (q15_t)0x94d1, (q15_t)0x45e2, (q15_t)0x94c3, - (q15_t)0x45cd, (q15_t)0x94b6, (q15_t)0x45b8, (q15_t)0x94a8, (q15_t)0x45a3, (q15_t)0x949a, (q15_t)0x458d, (q15_t)0x948d, - (q15_t)0x4578, (q15_t)0x947f, (q15_t)0x4563, (q15_t)0x9471, (q15_t)0x454e, (q15_t)0x9464, (q15_t)0x4539, (q15_t)0x9456, - (q15_t)0x4524, (q15_t)0x9448, (q15_t)0x450f, (q15_t)0x943b, (q15_t)0x44fa, (q15_t)0x942d, (q15_t)0x44e4, (q15_t)0x9420, - (q15_t)0x44cf, (q15_t)0x9412, (q15_t)0x44ba, (q15_t)0x9405, (q15_t)0x44a5, (q15_t)0x93f7, (q15_t)0x4490, (q15_t)0x93ea, - (q15_t)0x447a, (q15_t)0x93dc, (q15_t)0x4465, (q15_t)0x93cf, (q15_t)0x4450, (q15_t)0x93c1, (q15_t)0x443b, (q15_t)0x93b4, - (q15_t)0x4425, (q15_t)0x93a7, (q15_t)0x4410, (q15_t)0x9399, (q15_t)0x43fb, (q15_t)0x938c, (q15_t)0x43e5, (q15_t)0x937f, - (q15_t)0x43d0, (q15_t)0x9371, (q15_t)0x43bb, (q15_t)0x9364, (q15_t)0x43a5, (q15_t)0x9357, (q15_t)0x4390, (q15_t)0x9349, - (q15_t)0x437b, (q15_t)0x933c, (q15_t)0x4365, (q15_t)0x932f, (q15_t)0x4350, (q15_t)0x9322, (q15_t)0x433b, (q15_t)0x9314, - (q15_t)0x4325, (q15_t)0x9307, (q15_t)0x4310, (q15_t)0x92fa, (q15_t)0x42fa, (q15_t)0x92ed, (q15_t)0x42e5, (q15_t)0x92e0, - (q15_t)0x42d0, (q15_t)0x92d3, (q15_t)0x42ba, (q15_t)0x92c6, (q15_t)0x42a5, (q15_t)0x92b8, (q15_t)0x428f, (q15_t)0x92ab, - (q15_t)0x427a, (q15_t)0x929e, (q15_t)0x4264, (q15_t)0x9291, (q15_t)0x424f, (q15_t)0x9284, (q15_t)0x4239, (q15_t)0x9277, - (q15_t)0x4224, (q15_t)0x926a, (q15_t)0x420e, (q15_t)0x925d, (q15_t)0x41f9, (q15_t)0x9250, (q15_t)0x41e3, (q15_t)0x9243, - (q15_t)0x41ce, (q15_t)0x9236, (q15_t)0x41b8, (q15_t)0x922a, (q15_t)0x41a2, (q15_t)0x921d, (q15_t)0x418d, (q15_t)0x9210, - (q15_t)0x4177, (q15_t)0x9203, (q15_t)0x4162, (q15_t)0x91f6, (q15_t)0x414c, (q15_t)0x91e9, (q15_t)0x4136, (q15_t)0x91dc, - (q15_t)0x4121, (q15_t)0x91d0, (q15_t)0x410b, (q15_t)0x91c3, (q15_t)0x40f6, (q15_t)0x91b6, (q15_t)0x40e0, (q15_t)0x91a9, - (q15_t)0x40ca, (q15_t)0x919d, (q15_t)0x40b5, (q15_t)0x9190, (q15_t)0x409f, (q15_t)0x9183, (q15_t)0x4089, (q15_t)0x9177, - (q15_t)0x4073, (q15_t)0x916a, (q15_t)0x405e, (q15_t)0x915d, (q15_t)0x4048, (q15_t)0x9151, (q15_t)0x4032, (q15_t)0x9144, - (q15_t)0x401d, (q15_t)0x9137, (q15_t)0x4007, (q15_t)0x912b, (q15_t)0x3ff1, (q15_t)0x911e, (q15_t)0x3fdb, (q15_t)0x9112, - (q15_t)0x3fc5, (q15_t)0x9105, (q15_t)0x3fb0, (q15_t)0x90f9, (q15_t)0x3f9a, (q15_t)0x90ec, (q15_t)0x3f84, (q15_t)0x90e0, - (q15_t)0x3f6e, (q15_t)0x90d3, (q15_t)0x3f58, (q15_t)0x90c7, (q15_t)0x3f43, (q15_t)0x90ba, (q15_t)0x3f2d, (q15_t)0x90ae, - (q15_t)0x3f17, (q15_t)0x90a1, (q15_t)0x3f01, (q15_t)0x9095, (q15_t)0x3eeb, (q15_t)0x9089, (q15_t)0x3ed5, (q15_t)0x907c, - (q15_t)0x3ebf, (q15_t)0x9070, (q15_t)0x3ea9, (q15_t)0x9064, (q15_t)0x3e93, (q15_t)0x9057, (q15_t)0x3e7d, (q15_t)0x904b, - (q15_t)0x3e68, (q15_t)0x903f, (q15_t)0x3e52, (q15_t)0x9033, (q15_t)0x3e3c, (q15_t)0x9026, (q15_t)0x3e26, (q15_t)0x901a, - (q15_t)0x3e10, (q15_t)0x900e, (q15_t)0x3dfa, (q15_t)0x9002, (q15_t)0x3de4, (q15_t)0x8ff6, (q15_t)0x3dce, (q15_t)0x8fea, - (q15_t)0x3db8, (q15_t)0x8fdd, (q15_t)0x3da2, (q15_t)0x8fd1, (q15_t)0x3d8c, (q15_t)0x8fc5, (q15_t)0x3d76, (q15_t)0x8fb9, - (q15_t)0x3d60, (q15_t)0x8fad, (q15_t)0x3d49, (q15_t)0x8fa1, (q15_t)0x3d33, (q15_t)0x8f95, (q15_t)0x3d1d, (q15_t)0x8f89, - (q15_t)0x3d07, (q15_t)0x8f7d, (q15_t)0x3cf1, (q15_t)0x8f71, (q15_t)0x3cdb, (q15_t)0x8f65, (q15_t)0x3cc5, (q15_t)0x8f59, - (q15_t)0x3caf, (q15_t)0x8f4d, (q15_t)0x3c99, (q15_t)0x8f41, (q15_t)0x3c83, (q15_t)0x8f35, (q15_t)0x3c6c, (q15_t)0x8f2a, - (q15_t)0x3c56, (q15_t)0x8f1e, (q15_t)0x3c40, (q15_t)0x8f12, (q15_t)0x3c2a, (q15_t)0x8f06, (q15_t)0x3c14, (q15_t)0x8efa, - (q15_t)0x3bfd, (q15_t)0x8eee, (q15_t)0x3be7, (q15_t)0x8ee3, (q15_t)0x3bd1, (q15_t)0x8ed7, (q15_t)0x3bbb, (q15_t)0x8ecb, - (q15_t)0x3ba5, (q15_t)0x8ebf, (q15_t)0x3b8e, (q15_t)0x8eb4, (q15_t)0x3b78, (q15_t)0x8ea8, (q15_t)0x3b62, (q15_t)0x8e9c, - (q15_t)0x3b4c, (q15_t)0x8e91, (q15_t)0x3b35, (q15_t)0x8e85, (q15_t)0x3b1f, (q15_t)0x8e7a, (q15_t)0x3b09, (q15_t)0x8e6e, - (q15_t)0x3af2, (q15_t)0x8e62, (q15_t)0x3adc, (q15_t)0x8e57, (q15_t)0x3ac6, (q15_t)0x8e4b, (q15_t)0x3aaf, (q15_t)0x8e40, - (q15_t)0x3a99, (q15_t)0x8e34, (q15_t)0x3a83, (q15_t)0x8e29, (q15_t)0x3a6c, (q15_t)0x8e1d, (q15_t)0x3a56, (q15_t)0x8e12, - (q15_t)0x3a40, (q15_t)0x8e06, (q15_t)0x3a29, (q15_t)0x8dfb, (q15_t)0x3a13, (q15_t)0x8def, (q15_t)0x39fd, (q15_t)0x8de4, - (q15_t)0x39e6, (q15_t)0x8dd9, (q15_t)0x39d0, (q15_t)0x8dcd, (q15_t)0x39b9, (q15_t)0x8dc2, (q15_t)0x39a3, (q15_t)0x8db7, - (q15_t)0x398c, (q15_t)0x8dab, (q15_t)0x3976, (q15_t)0x8da0, (q15_t)0x395f, (q15_t)0x8d95, (q15_t)0x3949, (q15_t)0x8d8a, - (q15_t)0x3932, (q15_t)0x8d7e, (q15_t)0x391c, (q15_t)0x8d73, (q15_t)0x3906, (q15_t)0x8d68, (q15_t)0x38ef, (q15_t)0x8d5d, - (q15_t)0x38d8, (q15_t)0x8d51, (q15_t)0x38c2, (q15_t)0x8d46, (q15_t)0x38ab, (q15_t)0x8d3b, (q15_t)0x3895, (q15_t)0x8d30, - (q15_t)0x387e, (q15_t)0x8d25, (q15_t)0x3868, (q15_t)0x8d1a, (q15_t)0x3851, (q15_t)0x8d0f, (q15_t)0x383b, (q15_t)0x8d04, - (q15_t)0x3824, (q15_t)0x8cf9, (q15_t)0x380d, (q15_t)0x8cee, (q15_t)0x37f7, (q15_t)0x8ce3, (q15_t)0x37e0, (q15_t)0x8cd8, - (q15_t)0x37ca, (q15_t)0x8ccd, (q15_t)0x37b3, (q15_t)0x8cc2, (q15_t)0x379c, (q15_t)0x8cb7, (q15_t)0x3786, (q15_t)0x8cac, - (q15_t)0x376f, (q15_t)0x8ca1, (q15_t)0x3758, (q15_t)0x8c96, (q15_t)0x3742, (q15_t)0x8c8b, (q15_t)0x372b, (q15_t)0x8c81, - (q15_t)0x3714, (q15_t)0x8c76, (q15_t)0x36fe, (q15_t)0x8c6b, (q15_t)0x36e7, (q15_t)0x8c60, (q15_t)0x36d0, (q15_t)0x8c55, - (q15_t)0x36ba, (q15_t)0x8c4b, (q15_t)0x36a3, (q15_t)0x8c40, (q15_t)0x368c, (q15_t)0x8c35, (q15_t)0x3675, (q15_t)0x8c2a, - (q15_t)0x365f, (q15_t)0x8c20, (q15_t)0x3648, (q15_t)0x8c15, (q15_t)0x3631, (q15_t)0x8c0a, (q15_t)0x361a, (q15_t)0x8c00, - (q15_t)0x3604, (q15_t)0x8bf5, (q15_t)0x35ed, (q15_t)0x8beb, (q15_t)0x35d6, (q15_t)0x8be0, (q15_t)0x35bf, (q15_t)0x8bd5, - (q15_t)0x35a8, (q15_t)0x8bcb, (q15_t)0x3592, (q15_t)0x8bc0, (q15_t)0x357b, (q15_t)0x8bb6, (q15_t)0x3564, (q15_t)0x8bab, - (q15_t)0x354d, (q15_t)0x8ba1, (q15_t)0x3536, (q15_t)0x8b96, (q15_t)0x351f, (q15_t)0x8b8c, (q15_t)0x3508, (q15_t)0x8b82, - (q15_t)0x34f2, (q15_t)0x8b77, (q15_t)0x34db, (q15_t)0x8b6d, (q15_t)0x34c4, (q15_t)0x8b62, (q15_t)0x34ad, (q15_t)0x8b58, - (q15_t)0x3496, (q15_t)0x8b4e, (q15_t)0x347f, (q15_t)0x8b43, (q15_t)0x3468, (q15_t)0x8b39, (q15_t)0x3451, (q15_t)0x8b2f, - (q15_t)0x343a, (q15_t)0x8b25, (q15_t)0x3423, (q15_t)0x8b1a, (q15_t)0x340c, (q15_t)0x8b10, (q15_t)0x33f5, (q15_t)0x8b06, - (q15_t)0x33de, (q15_t)0x8afc, (q15_t)0x33c7, (q15_t)0x8af1, (q15_t)0x33b0, (q15_t)0x8ae7, (q15_t)0x3399, (q15_t)0x8add, - (q15_t)0x3382, (q15_t)0x8ad3, (q15_t)0x336b, (q15_t)0x8ac9, (q15_t)0x3354, (q15_t)0x8abf, (q15_t)0x333d, (q15_t)0x8ab5, - (q15_t)0x3326, (q15_t)0x8aab, (q15_t)0x330f, (q15_t)0x8aa1, (q15_t)0x32f8, (q15_t)0x8a97, (q15_t)0x32e1, (q15_t)0x8a8d, - (q15_t)0x32ca, (q15_t)0x8a83, (q15_t)0x32b3, (q15_t)0x8a79, (q15_t)0x329c, (q15_t)0x8a6f, (q15_t)0x3285, (q15_t)0x8a65, - (q15_t)0x326e, (q15_t)0x8a5b, (q15_t)0x3257, (q15_t)0x8a51, (q15_t)0x3240, (q15_t)0x8a47, (q15_t)0x3228, (q15_t)0x8a3d, - (q15_t)0x3211, (q15_t)0x8a34, (q15_t)0x31fa, (q15_t)0x8a2a, (q15_t)0x31e3, (q15_t)0x8a20, (q15_t)0x31cc, (q15_t)0x8a16, - (q15_t)0x31b5, (q15_t)0x8a0c, (q15_t)0x319e, (q15_t)0x8a03, (q15_t)0x3186, (q15_t)0x89f9, (q15_t)0x316f, (q15_t)0x89ef, - (q15_t)0x3158, (q15_t)0x89e5, (q15_t)0x3141, (q15_t)0x89dc, (q15_t)0x312a, (q15_t)0x89d2, (q15_t)0x3112, (q15_t)0x89c8, - (q15_t)0x30fb, (q15_t)0x89bf, (q15_t)0x30e4, (q15_t)0x89b5, (q15_t)0x30cd, (q15_t)0x89ac, (q15_t)0x30b6, (q15_t)0x89a2, - (q15_t)0x309e, (q15_t)0x8998, (q15_t)0x3087, (q15_t)0x898f, (q15_t)0x3070, (q15_t)0x8985, (q15_t)0x3059, (q15_t)0x897c, - (q15_t)0x3041, (q15_t)0x8972, (q15_t)0x302a, (q15_t)0x8969, (q15_t)0x3013, (q15_t)0x8960, (q15_t)0x2ffb, (q15_t)0x8956, - (q15_t)0x2fe4, (q15_t)0x894d, (q15_t)0x2fcd, (q15_t)0x8943, (q15_t)0x2fb5, (q15_t)0x893a, (q15_t)0x2f9e, (q15_t)0x8931, - (q15_t)0x2f87, (q15_t)0x8927, (q15_t)0x2f6f, (q15_t)0x891e, (q15_t)0x2f58, (q15_t)0x8915, (q15_t)0x2f41, (q15_t)0x890b, - (q15_t)0x2f29, (q15_t)0x8902, (q15_t)0x2f12, (q15_t)0x88f9, (q15_t)0x2efb, (q15_t)0x88f0, (q15_t)0x2ee3, (q15_t)0x88e6, - (q15_t)0x2ecc, (q15_t)0x88dd, (q15_t)0x2eb5, (q15_t)0x88d4, (q15_t)0x2e9d, (q15_t)0x88cb, (q15_t)0x2e86, (q15_t)0x88c2, - (q15_t)0x2e6e, (q15_t)0x88b9, (q15_t)0x2e57, (q15_t)0x88af, (q15_t)0x2e3f, (q15_t)0x88a6, (q15_t)0x2e28, (q15_t)0x889d, - (q15_t)0x2e11, (q15_t)0x8894, (q15_t)0x2df9, (q15_t)0x888b, (q15_t)0x2de2, (q15_t)0x8882, (q15_t)0x2dca, (q15_t)0x8879, - (q15_t)0x2db3, (q15_t)0x8870, (q15_t)0x2d9b, (q15_t)0x8867, (q15_t)0x2d84, (q15_t)0x885e, (q15_t)0x2d6c, (q15_t)0x8855, - (q15_t)0x2d55, (q15_t)0x884c, (q15_t)0x2d3d, (q15_t)0x8844, (q15_t)0x2d26, (q15_t)0x883b, (q15_t)0x2d0e, (q15_t)0x8832, - (q15_t)0x2cf7, (q15_t)0x8829, (q15_t)0x2cdf, (q15_t)0x8820, (q15_t)0x2cc8, (q15_t)0x8817, (q15_t)0x2cb0, (q15_t)0x880f, - (q15_t)0x2c98, (q15_t)0x8806, (q15_t)0x2c81, (q15_t)0x87fd, (q15_t)0x2c69, (q15_t)0x87f4, (q15_t)0x2c52, (q15_t)0x87ec, - (q15_t)0x2c3a, (q15_t)0x87e3, (q15_t)0x2c23, (q15_t)0x87da, (q15_t)0x2c0b, (q15_t)0x87d2, (q15_t)0x2bf3, (q15_t)0x87c9, - (q15_t)0x2bdc, (q15_t)0x87c0, (q15_t)0x2bc4, (q15_t)0x87b8, (q15_t)0x2bad, (q15_t)0x87af, (q15_t)0x2b95, (q15_t)0x87a7, - (q15_t)0x2b7d, (q15_t)0x879e, (q15_t)0x2b66, (q15_t)0x8795, (q15_t)0x2b4e, (q15_t)0x878d, (q15_t)0x2b36, (q15_t)0x8784, - (q15_t)0x2b1f, (q15_t)0x877c, (q15_t)0x2b07, (q15_t)0x8774, (q15_t)0x2aef, (q15_t)0x876b, (q15_t)0x2ad8, (q15_t)0x8763, - (q15_t)0x2ac0, (q15_t)0x875a, (q15_t)0x2aa8, (q15_t)0x8752, (q15_t)0x2a91, (q15_t)0x874a, (q15_t)0x2a79, (q15_t)0x8741, - (q15_t)0x2a61, (q15_t)0x8739, (q15_t)0x2a49, (q15_t)0x8731, (q15_t)0x2a32, (q15_t)0x8728, (q15_t)0x2a1a, (q15_t)0x8720, - (q15_t)0x2a02, (q15_t)0x8718, (q15_t)0x29eb, (q15_t)0x870f, (q15_t)0x29d3, (q15_t)0x8707, (q15_t)0x29bb, (q15_t)0x86ff, - (q15_t)0x29a3, (q15_t)0x86f7, (q15_t)0x298b, (q15_t)0x86ef, (q15_t)0x2974, (q15_t)0x86e7, (q15_t)0x295c, (q15_t)0x86de, - (q15_t)0x2944, (q15_t)0x86d6, (q15_t)0x292c, (q15_t)0x86ce, (q15_t)0x2915, (q15_t)0x86c6, (q15_t)0x28fd, (q15_t)0x86be, - (q15_t)0x28e5, (q15_t)0x86b6, (q15_t)0x28cd, (q15_t)0x86ae, (q15_t)0x28b5, (q15_t)0x86a6, (q15_t)0x289d, (q15_t)0x869e, - (q15_t)0x2886, (q15_t)0x8696, (q15_t)0x286e, (q15_t)0x868e, (q15_t)0x2856, (q15_t)0x8686, (q15_t)0x283e, (q15_t)0x867e, - (q15_t)0x2826, (q15_t)0x8676, (q15_t)0x280e, (q15_t)0x866e, (q15_t)0x27f6, (q15_t)0x8667, (q15_t)0x27df, (q15_t)0x865f, - (q15_t)0x27c7, (q15_t)0x8657, (q15_t)0x27af, (q15_t)0x864f, (q15_t)0x2797, (q15_t)0x8647, (q15_t)0x277f, (q15_t)0x8640, - (q15_t)0x2767, (q15_t)0x8638, (q15_t)0x274f, (q15_t)0x8630, (q15_t)0x2737, (q15_t)0x8628, (q15_t)0x271f, (q15_t)0x8621, - (q15_t)0x2707, (q15_t)0x8619, (q15_t)0x26ef, (q15_t)0x8611, (q15_t)0x26d8, (q15_t)0x860a, (q15_t)0x26c0, (q15_t)0x8602, - (q15_t)0x26a8, (q15_t)0x85fb, (q15_t)0x2690, (q15_t)0x85f3, (q15_t)0x2678, (q15_t)0x85eb, (q15_t)0x2660, (q15_t)0x85e4, - (q15_t)0x2648, (q15_t)0x85dc, (q15_t)0x2630, (q15_t)0x85d5, (q15_t)0x2618, (q15_t)0x85cd, (q15_t)0x2600, (q15_t)0x85c6, - (q15_t)0x25e8, (q15_t)0x85be, (q15_t)0x25d0, (q15_t)0x85b7, (q15_t)0x25b8, (q15_t)0x85b0, (q15_t)0x25a0, (q15_t)0x85a8, - (q15_t)0x2588, (q15_t)0x85a1, (q15_t)0x2570, (q15_t)0x8599, (q15_t)0x2558, (q15_t)0x8592, (q15_t)0x2540, (q15_t)0x858b, - (q15_t)0x2528, (q15_t)0x8583, (q15_t)0x250f, (q15_t)0x857c, (q15_t)0x24f7, (q15_t)0x8575, (q15_t)0x24df, (q15_t)0x856e, - (q15_t)0x24c7, (q15_t)0x8566, (q15_t)0x24af, (q15_t)0x855f, (q15_t)0x2497, (q15_t)0x8558, (q15_t)0x247f, (q15_t)0x8551, - (q15_t)0x2467, (q15_t)0x854a, (q15_t)0x244f, (q15_t)0x8543, (q15_t)0x2437, (q15_t)0x853b, (q15_t)0x241f, (q15_t)0x8534, - (q15_t)0x2407, (q15_t)0x852d, (q15_t)0x23ee, (q15_t)0x8526, (q15_t)0x23d6, (q15_t)0x851f, (q15_t)0x23be, (q15_t)0x8518, - (q15_t)0x23a6, (q15_t)0x8511, (q15_t)0x238e, (q15_t)0x850a, (q15_t)0x2376, (q15_t)0x8503, (q15_t)0x235e, (q15_t)0x84fc, - (q15_t)0x2345, (q15_t)0x84f5, (q15_t)0x232d, (q15_t)0x84ee, (q15_t)0x2315, (q15_t)0x84e7, (q15_t)0x22fd, (q15_t)0x84e1, - (q15_t)0x22e5, (q15_t)0x84da, (q15_t)0x22cd, (q15_t)0x84d3, (q15_t)0x22b4, (q15_t)0x84cc, (q15_t)0x229c, (q15_t)0x84c5, - (q15_t)0x2284, (q15_t)0x84be, (q15_t)0x226c, (q15_t)0x84b8, (q15_t)0x2254, (q15_t)0x84b1, (q15_t)0x223b, (q15_t)0x84aa, - (q15_t)0x2223, (q15_t)0x84a3, (q15_t)0x220b, (q15_t)0x849d, (q15_t)0x21f3, (q15_t)0x8496, (q15_t)0x21da, (q15_t)0x848f, - (q15_t)0x21c2, (q15_t)0x8489, (q15_t)0x21aa, (q15_t)0x8482, (q15_t)0x2192, (q15_t)0x847c, (q15_t)0x2179, (q15_t)0x8475, - (q15_t)0x2161, (q15_t)0x846e, (q15_t)0x2149, (q15_t)0x8468, (q15_t)0x2131, (q15_t)0x8461, (q15_t)0x2118, (q15_t)0x845b, - (q15_t)0x2100, (q15_t)0x8454, (q15_t)0x20e8, (q15_t)0x844e, (q15_t)0x20d0, (q15_t)0x8447, (q15_t)0x20b7, (q15_t)0x8441, - (q15_t)0x209f, (q15_t)0x843b, (q15_t)0x2087, (q15_t)0x8434, (q15_t)0x206e, (q15_t)0x842e, (q15_t)0x2056, (q15_t)0x8427, - (q15_t)0x203e, (q15_t)0x8421, (q15_t)0x2025, (q15_t)0x841b, (q15_t)0x200d, (q15_t)0x8415, (q15_t)0x1ff5, (q15_t)0x840e, - (q15_t)0x1fdc, (q15_t)0x8408, (q15_t)0x1fc4, (q15_t)0x8402, (q15_t)0x1fac, (q15_t)0x83fb, (q15_t)0x1f93, (q15_t)0x83f5, - (q15_t)0x1f7b, (q15_t)0x83ef, (q15_t)0x1f63, (q15_t)0x83e9, (q15_t)0x1f4a, (q15_t)0x83e3, (q15_t)0x1f32, (q15_t)0x83dd, - (q15_t)0x1f19, (q15_t)0x83d7, (q15_t)0x1f01, (q15_t)0x83d0, (q15_t)0x1ee9, (q15_t)0x83ca, (q15_t)0x1ed0, (q15_t)0x83c4, - (q15_t)0x1eb8, (q15_t)0x83be, (q15_t)0x1ea0, (q15_t)0x83b8, (q15_t)0x1e87, (q15_t)0x83b2, (q15_t)0x1e6f, (q15_t)0x83ac, - (q15_t)0x1e56, (q15_t)0x83a6, (q15_t)0x1e3e, (q15_t)0x83a0, (q15_t)0x1e25, (q15_t)0x839a, (q15_t)0x1e0d, (q15_t)0x8394, - (q15_t)0x1df5, (q15_t)0x838f, (q15_t)0x1ddc, (q15_t)0x8389, (q15_t)0x1dc4, (q15_t)0x8383, (q15_t)0x1dab, (q15_t)0x837d, - (q15_t)0x1d93, (q15_t)0x8377, (q15_t)0x1d7a, (q15_t)0x8371, (q15_t)0x1d62, (q15_t)0x836c, (q15_t)0x1d49, (q15_t)0x8366, - (q15_t)0x1d31, (q15_t)0x8360, (q15_t)0x1d18, (q15_t)0x835a, (q15_t)0x1d00, (q15_t)0x8355, (q15_t)0x1ce8, (q15_t)0x834f, - (q15_t)0x1ccf, (q15_t)0x8349, (q15_t)0x1cb7, (q15_t)0x8344, (q15_t)0x1c9e, (q15_t)0x833e, (q15_t)0x1c86, (q15_t)0x8338, - (q15_t)0x1c6d, (q15_t)0x8333, (q15_t)0x1c55, (q15_t)0x832d, (q15_t)0x1c3c, (q15_t)0x8328, (q15_t)0x1c24, (q15_t)0x8322, - (q15_t)0x1c0b, (q15_t)0x831d, (q15_t)0x1bf2, (q15_t)0x8317, (q15_t)0x1bda, (q15_t)0x8312, (q15_t)0x1bc1, (q15_t)0x830c, - (q15_t)0x1ba9, (q15_t)0x8307, (q15_t)0x1b90, (q15_t)0x8301, (q15_t)0x1b78, (q15_t)0x82fc, (q15_t)0x1b5f, (q15_t)0x82f7, - (q15_t)0x1b47, (q15_t)0x82f1, (q15_t)0x1b2e, (q15_t)0x82ec, (q15_t)0x1b16, (q15_t)0x82e7, (q15_t)0x1afd, (q15_t)0x82e1, - (q15_t)0x1ae4, (q15_t)0x82dc, (q15_t)0x1acc, (q15_t)0x82d7, (q15_t)0x1ab3, (q15_t)0x82d1, (q15_t)0x1a9b, (q15_t)0x82cc, - (q15_t)0x1a82, (q15_t)0x82c7, (q15_t)0x1a6a, (q15_t)0x82c2, (q15_t)0x1a51, (q15_t)0x82bd, (q15_t)0x1a38, (q15_t)0x82b7, - (q15_t)0x1a20, (q15_t)0x82b2, (q15_t)0x1a07, (q15_t)0x82ad, (q15_t)0x19ef, (q15_t)0x82a8, (q15_t)0x19d6, (q15_t)0x82a3, - (q15_t)0x19bd, (q15_t)0x829e, (q15_t)0x19a5, (q15_t)0x8299, (q15_t)0x198c, (q15_t)0x8294, (q15_t)0x1973, (q15_t)0x828f, - (q15_t)0x195b, (q15_t)0x828a, (q15_t)0x1942, (q15_t)0x8285, (q15_t)0x192a, (q15_t)0x8280, (q15_t)0x1911, (q15_t)0x827b, - (q15_t)0x18f8, (q15_t)0x8276, (q15_t)0x18e0, (q15_t)0x8271, (q15_t)0x18c7, (q15_t)0x826c, (q15_t)0x18ae, (q15_t)0x8268, - (q15_t)0x1896, (q15_t)0x8263, (q15_t)0x187d, (q15_t)0x825e, (q15_t)0x1864, (q15_t)0x8259, (q15_t)0x184c, (q15_t)0x8254, - (q15_t)0x1833, (q15_t)0x8250, (q15_t)0x181a, (q15_t)0x824b, (q15_t)0x1802, (q15_t)0x8246, (q15_t)0x17e9, (q15_t)0x8241, - (q15_t)0x17d0, (q15_t)0x823d, (q15_t)0x17b7, (q15_t)0x8238, (q15_t)0x179f, (q15_t)0x8233, (q15_t)0x1786, (q15_t)0x822f, - (q15_t)0x176d, (q15_t)0x822a, (q15_t)0x1755, (q15_t)0x8226, (q15_t)0x173c, (q15_t)0x8221, (q15_t)0x1723, (q15_t)0x821c, - (q15_t)0x170a, (q15_t)0x8218, (q15_t)0x16f2, (q15_t)0x8213, (q15_t)0x16d9, (q15_t)0x820f, (q15_t)0x16c0, (q15_t)0x820a, - (q15_t)0x16a8, (q15_t)0x8206, (q15_t)0x168f, (q15_t)0x8201, (q15_t)0x1676, (q15_t)0x81fd, (q15_t)0x165d, (q15_t)0x81f9, - (q15_t)0x1645, (q15_t)0x81f4, (q15_t)0x162c, (q15_t)0x81f0, (q15_t)0x1613, (q15_t)0x81ec, (q15_t)0x15fa, (q15_t)0x81e7, - (q15_t)0x15e2, (q15_t)0x81e3, (q15_t)0x15c9, (q15_t)0x81df, (q15_t)0x15b0, (q15_t)0x81da, (q15_t)0x1597, (q15_t)0x81d6, - (q15_t)0x157f, (q15_t)0x81d2, (q15_t)0x1566, (q15_t)0x81ce, (q15_t)0x154d, (q15_t)0x81c9, (q15_t)0x1534, (q15_t)0x81c5, - (q15_t)0x151b, (q15_t)0x81c1, (q15_t)0x1503, (q15_t)0x81bd, (q15_t)0x14ea, (q15_t)0x81b9, (q15_t)0x14d1, (q15_t)0x81b5, - (q15_t)0x14b8, (q15_t)0x81b1, (q15_t)0x149f, (q15_t)0x81ad, (q15_t)0x1487, (q15_t)0x81a9, (q15_t)0x146e, (q15_t)0x81a5, - (q15_t)0x1455, (q15_t)0x81a1, (q15_t)0x143c, (q15_t)0x819d, (q15_t)0x1423, (q15_t)0x8199, (q15_t)0x140b, (q15_t)0x8195, - (q15_t)0x13f2, (q15_t)0x8191, (q15_t)0x13d9, (q15_t)0x818d, (q15_t)0x13c0, (q15_t)0x8189, (q15_t)0x13a7, (q15_t)0x8185, - (q15_t)0x138e, (q15_t)0x8181, (q15_t)0x1376, (q15_t)0x817d, (q15_t)0x135d, (q15_t)0x817a, (q15_t)0x1344, (q15_t)0x8176, - (q15_t)0x132b, (q15_t)0x8172, (q15_t)0x1312, (q15_t)0x816e, (q15_t)0x12f9, (q15_t)0x816b, (q15_t)0x12e0, (q15_t)0x8167, - (q15_t)0x12c8, (q15_t)0x8163, (q15_t)0x12af, (q15_t)0x815f, (q15_t)0x1296, (q15_t)0x815c, (q15_t)0x127d, (q15_t)0x8158, - (q15_t)0x1264, (q15_t)0x8155, (q15_t)0x124b, (q15_t)0x8151, (q15_t)0x1232, (q15_t)0x814d, (q15_t)0x1219, (q15_t)0x814a, - (q15_t)0x1201, (q15_t)0x8146, (q15_t)0x11e8, (q15_t)0x8143, (q15_t)0x11cf, (q15_t)0x813f, (q15_t)0x11b6, (q15_t)0x813c, - (q15_t)0x119d, (q15_t)0x8138, (q15_t)0x1184, (q15_t)0x8135, (q15_t)0x116b, (q15_t)0x8131, (q15_t)0x1152, (q15_t)0x812e, - (q15_t)0x1139, (q15_t)0x812b, (q15_t)0x1121, (q15_t)0x8127, (q15_t)0x1108, (q15_t)0x8124, (q15_t)0x10ef, (q15_t)0x8121, - (q15_t)0x10d6, (q15_t)0x811d, (q15_t)0x10bd, (q15_t)0x811a, (q15_t)0x10a4, (q15_t)0x8117, (q15_t)0x108b, (q15_t)0x8113, - (q15_t)0x1072, (q15_t)0x8110, (q15_t)0x1059, (q15_t)0x810d, (q15_t)0x1040, (q15_t)0x810a, (q15_t)0x1027, (q15_t)0x8107, - (q15_t)0x100e, (q15_t)0x8103, (q15_t)0xff5, (q15_t)0x8100, (q15_t)0xfdd, (q15_t)0x80fd, (q15_t)0xfc4, (q15_t)0x80fa, - (q15_t)0xfab, (q15_t)0x80f7, (q15_t)0xf92, (q15_t)0x80f4, (q15_t)0xf79, (q15_t)0x80f1, (q15_t)0xf60, (q15_t)0x80ee, - (q15_t)0xf47, (q15_t)0x80eb, (q15_t)0xf2e, (q15_t)0x80e8, (q15_t)0xf15, (q15_t)0x80e5, (q15_t)0xefc, (q15_t)0x80e2, - (q15_t)0xee3, (q15_t)0x80df, (q15_t)0xeca, (q15_t)0x80dc, (q15_t)0xeb1, (q15_t)0x80d9, (q15_t)0xe98, (q15_t)0x80d6, - (q15_t)0xe7f, (q15_t)0x80d3, (q15_t)0xe66, (q15_t)0x80d1, (q15_t)0xe4d, (q15_t)0x80ce, (q15_t)0xe34, (q15_t)0x80cb, - (q15_t)0xe1b, (q15_t)0x80c8, (q15_t)0xe02, (q15_t)0x80c5, (q15_t)0xde9, (q15_t)0x80c3, (q15_t)0xdd0, (q15_t)0x80c0, - (q15_t)0xdb7, (q15_t)0x80bd, (q15_t)0xd9e, (q15_t)0x80bb, (q15_t)0xd85, (q15_t)0x80b8, (q15_t)0xd6c, (q15_t)0x80b5, - (q15_t)0xd53, (q15_t)0x80b3, (q15_t)0xd3a, (q15_t)0x80b0, (q15_t)0xd21, (q15_t)0x80ad, (q15_t)0xd08, (q15_t)0x80ab, - (q15_t)0xcef, (q15_t)0x80a8, (q15_t)0xcd6, (q15_t)0x80a6, (q15_t)0xcbd, (q15_t)0x80a3, (q15_t)0xca4, (q15_t)0x80a1, - (q15_t)0xc8b, (q15_t)0x809e, (q15_t)0xc72, (q15_t)0x809c, (q15_t)0xc59, (q15_t)0x8099, (q15_t)0xc40, (q15_t)0x8097, - (q15_t)0xc27, (q15_t)0x8095, (q15_t)0xc0e, (q15_t)0x8092, (q15_t)0xbf5, (q15_t)0x8090, (q15_t)0xbdc, (q15_t)0x808e, - (q15_t)0xbc3, (q15_t)0x808b, (q15_t)0xbaa, (q15_t)0x8089, (q15_t)0xb91, (q15_t)0x8087, (q15_t)0xb78, (q15_t)0x8084, - (q15_t)0xb5f, (q15_t)0x8082, (q15_t)0xb46, (q15_t)0x8080, (q15_t)0xb2d, (q15_t)0x807e, (q15_t)0xb14, (q15_t)0x807b, - (q15_t)0xafb, (q15_t)0x8079, (q15_t)0xae2, (q15_t)0x8077, (q15_t)0xac9, (q15_t)0x8075, (q15_t)0xab0, (q15_t)0x8073, - (q15_t)0xa97, (q15_t)0x8071, (q15_t)0xa7e, (q15_t)0x806f, (q15_t)0xa65, (q15_t)0x806d, (q15_t)0xa4c, (q15_t)0x806b, - (q15_t)0xa33, (q15_t)0x8069, (q15_t)0xa19, (q15_t)0x8067, (q15_t)0xa00, (q15_t)0x8065, (q15_t)0x9e7, (q15_t)0x8063, - (q15_t)0x9ce, (q15_t)0x8061, (q15_t)0x9b5, (q15_t)0x805f, (q15_t)0x99c, (q15_t)0x805d, (q15_t)0x983, (q15_t)0x805b, - (q15_t)0x96a, (q15_t)0x8059, (q15_t)0x951, (q15_t)0x8057, (q15_t)0x938, (q15_t)0x8056, (q15_t)0x91f, (q15_t)0x8054, - (q15_t)0x906, (q15_t)0x8052, (q15_t)0x8ed, (q15_t)0x8050, (q15_t)0x8d4, (q15_t)0x804f, (q15_t)0x8bb, (q15_t)0x804d, - (q15_t)0x8a2, (q15_t)0x804b, (q15_t)0x888, (q15_t)0x8049, (q15_t)0x86f, (q15_t)0x8048, (q15_t)0x856, (q15_t)0x8046, - (q15_t)0x83d, (q15_t)0x8044, (q15_t)0x824, (q15_t)0x8043, (q15_t)0x80b, (q15_t)0x8041, (q15_t)0x7f2, (q15_t)0x8040, - (q15_t)0x7d9, (q15_t)0x803e, (q15_t)0x7c0, (q15_t)0x803d, (q15_t)0x7a7, (q15_t)0x803b, (q15_t)0x78e, (q15_t)0x803a, - (q15_t)0x775, (q15_t)0x8038, (q15_t)0x75b, (q15_t)0x8037, (q15_t)0x742, (q15_t)0x8035, (q15_t)0x729, (q15_t)0x8034, - (q15_t)0x710, (q15_t)0x8032, (q15_t)0x6f7, (q15_t)0x8031, (q15_t)0x6de, (q15_t)0x8030, (q15_t)0x6c5, (q15_t)0x802e, - (q15_t)0x6ac, (q15_t)0x802d, (q15_t)0x693, (q15_t)0x802c, (q15_t)0x67a, (q15_t)0x802a, (q15_t)0x660, (q15_t)0x8029, - (q15_t)0x647, (q15_t)0x8028, (q15_t)0x62e, (q15_t)0x8027, (q15_t)0x615, (q15_t)0x8026, (q15_t)0x5fc, (q15_t)0x8024, - (q15_t)0x5e3, (q15_t)0x8023, (q15_t)0x5ca, (q15_t)0x8022, (q15_t)0x5b1, (q15_t)0x8021, (q15_t)0x598, (q15_t)0x8020, - (q15_t)0x57f, (q15_t)0x801f, (q15_t)0x565, (q15_t)0x801e, (q15_t)0x54c, (q15_t)0x801d, (q15_t)0x533, (q15_t)0x801c, - (q15_t)0x51a, (q15_t)0x801b, (q15_t)0x501, (q15_t)0x801a, (q15_t)0x4e8, (q15_t)0x8019, (q15_t)0x4cf, (q15_t)0x8018, - (q15_t)0x4b6, (q15_t)0x8017, (q15_t)0x49c, (q15_t)0x8016, (q15_t)0x483, (q15_t)0x8015, (q15_t)0x46a, (q15_t)0x8014, - (q15_t)0x451, (q15_t)0x8013, (q15_t)0x438, (q15_t)0x8012, (q15_t)0x41f, (q15_t)0x8012, (q15_t)0x406, (q15_t)0x8011, - (q15_t)0x3ed, (q15_t)0x8010, (q15_t)0x3d4, (q15_t)0x800f, (q15_t)0x3ba, (q15_t)0x800e, (q15_t)0x3a1, (q15_t)0x800e, - (q15_t)0x388, (q15_t)0x800d, (q15_t)0x36f, (q15_t)0x800c, (q15_t)0x356, (q15_t)0x800c, (q15_t)0x33d, (q15_t)0x800b, - (q15_t)0x324, (q15_t)0x800a, (q15_t)0x30b, (q15_t)0x800a, (q15_t)0x2f1, (q15_t)0x8009, (q15_t)0x2d8, (q15_t)0x8009, - (q15_t)0x2bf, (q15_t)0x8008, (q15_t)0x2a6, (q15_t)0x8008, (q15_t)0x28d, (q15_t)0x8007, (q15_t)0x274, (q15_t)0x8007, - (q15_t)0x25b, (q15_t)0x8006, (q15_t)0x242, (q15_t)0x8006, (q15_t)0x228, (q15_t)0x8005, (q15_t)0x20f, (q15_t)0x8005, - (q15_t)0x1f6, (q15_t)0x8004, (q15_t)0x1dd, (q15_t)0x8004, (q15_t)0x1c4, (q15_t)0x8004, (q15_t)0x1ab, (q15_t)0x8003, - (q15_t)0x192, (q15_t)0x8003, (q15_t)0x178, (q15_t)0x8003, (q15_t)0x15f, (q15_t)0x8002, (q15_t)0x146, (q15_t)0x8002, - (q15_t)0x12d, (q15_t)0x8002, (q15_t)0x114, (q15_t)0x8002, (q15_t)0xfb, (q15_t)0x8001, (q15_t)0xe2, (q15_t)0x8001, - (q15_t)0xc9, (q15_t)0x8001, (q15_t)0xaf, (q15_t)0x8001, (q15_t)0x96, (q15_t)0x8001, (q15_t)0x7d, (q15_t)0x8001, - (q15_t)0x64, (q15_t)0x8001, (q15_t)0x4b, (q15_t)0x8001, (q15_t)0x32, (q15_t)0x8001, (q15_t)0x19, (q15_t)0x8001 -}; - const q15_t __ALIGNED(4) cos_factorsQ15_2048[2048] = { - (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, - (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffd, (q15_t)0x7ffd, - (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffc, (q15_t)0x7ffc, (q15_t)0x7ffb, (q15_t)0x7ffb, (q15_t)0x7ffb, (q15_t)0x7ffa, - (q15_t)0x7ffa, (q15_t)0x7ff9, (q15_t)0x7ff9, (q15_t)0x7ff8, (q15_t)0x7ff8, (q15_t)0x7ff7, (q15_t)0x7ff7, (q15_t)0x7ff6, - (q15_t)0x7ff5, (q15_t)0x7ff5, (q15_t)0x7ff4, (q15_t)0x7ff3, (q15_t)0x7ff3, (q15_t)0x7ff2, (q15_t)0x7ff1, (q15_t)0x7ff0, - (q15_t)0x7ff0, (q15_t)0x7fef, (q15_t)0x7fee, (q15_t)0x7fed, (q15_t)0x7fec, (q15_t)0x7fec, (q15_t)0x7feb, (q15_t)0x7fea, - (q15_t)0x7fe9, (q15_t)0x7fe8, (q15_t)0x7fe7, (q15_t)0x7fe6, (q15_t)0x7fe5, (q15_t)0x7fe4, (q15_t)0x7fe3, (q15_t)0x7fe2, - (q15_t)0x7fe1, (q15_t)0x7fe0, (q15_t)0x7fdf, (q15_t)0x7fdd, (q15_t)0x7fdc, (q15_t)0x7fdb, (q15_t)0x7fda, (q15_t)0x7fd9, - (q15_t)0x7fd7, (q15_t)0x7fd6, (q15_t)0x7fd5, (q15_t)0x7fd4, (q15_t)0x7fd2, (q15_t)0x7fd1, (q15_t)0x7fd0, (q15_t)0x7fce, - (q15_t)0x7fcd, (q15_t)0x7fcb, (q15_t)0x7fca, (q15_t)0x7fc9, (q15_t)0x7fc7, (q15_t)0x7fc6, (q15_t)0x7fc4, (q15_t)0x7fc3, - (q15_t)0x7fc1, (q15_t)0x7fc0, (q15_t)0x7fbe, (q15_t)0x7fbc, (q15_t)0x7fbb, (q15_t)0x7fb9, (q15_t)0x7fb7, (q15_t)0x7fb6, - (q15_t)0x7fb4, (q15_t)0x7fb2, (q15_t)0x7fb1, (q15_t)0x7faf, (q15_t)0x7fad, (q15_t)0x7fab, (q15_t)0x7fa9, (q15_t)0x7fa8, - (q15_t)0x7fa6, (q15_t)0x7fa4, (q15_t)0x7fa2, (q15_t)0x7fa0, (q15_t)0x7f9e, (q15_t)0x7f9c, (q15_t)0x7f9a, (q15_t)0x7f98, - (q15_t)0x7f96, (q15_t)0x7f94, (q15_t)0x7f92, (q15_t)0x7f90, (q15_t)0x7f8e, (q15_t)0x7f8c, (q15_t)0x7f8a, (q15_t)0x7f88, - (q15_t)0x7f86, (q15_t)0x7f83, (q15_t)0x7f81, (q15_t)0x7f7f, (q15_t)0x7f7d, (q15_t)0x7f7b, (q15_t)0x7f78, (q15_t)0x7f76, - (q15_t)0x7f74, (q15_t)0x7f71, (q15_t)0x7f6f, (q15_t)0x7f6d, (q15_t)0x7f6a, (q15_t)0x7f68, (q15_t)0x7f65, (q15_t)0x7f63, - (q15_t)0x7f60, (q15_t)0x7f5e, (q15_t)0x7f5b, (q15_t)0x7f59, (q15_t)0x7f56, (q15_t)0x7f54, (q15_t)0x7f51, (q15_t)0x7f4f, - (q15_t)0x7f4c, (q15_t)0x7f49, (q15_t)0x7f47, (q15_t)0x7f44, (q15_t)0x7f41, (q15_t)0x7f3f, (q15_t)0x7f3c, (q15_t)0x7f39, - (q15_t)0x7f36, (q15_t)0x7f34, (q15_t)0x7f31, (q15_t)0x7f2e, (q15_t)0x7f2b, (q15_t)0x7f28, (q15_t)0x7f25, (q15_t)0x7f23, - (q15_t)0x7f20, (q15_t)0x7f1d, (q15_t)0x7f1a, (q15_t)0x7f17, (q15_t)0x7f14, (q15_t)0x7f11, (q15_t)0x7f0e, (q15_t)0x7f0b, - (q15_t)0x7f08, (q15_t)0x7f04, (q15_t)0x7f01, (q15_t)0x7efe, (q15_t)0x7efb, (q15_t)0x7ef8, (q15_t)0x7ef5, (q15_t)0x7ef1, - (q15_t)0x7eee, (q15_t)0x7eeb, (q15_t)0x7ee8, (q15_t)0x7ee4, (q15_t)0x7ee1, (q15_t)0x7ede, (q15_t)0x7eda, (q15_t)0x7ed7, - (q15_t)0x7ed4, (q15_t)0x7ed0, (q15_t)0x7ecd, (q15_t)0x7ec9, (q15_t)0x7ec6, (q15_t)0x7ec3, (q15_t)0x7ebf, (q15_t)0x7ebb, - (q15_t)0x7eb8, (q15_t)0x7eb4, (q15_t)0x7eb1, (q15_t)0x7ead, (q15_t)0x7eaa, (q15_t)0x7ea6, (q15_t)0x7ea2, (q15_t)0x7e9f, - (q15_t)0x7e9b, (q15_t)0x7e97, (q15_t)0x7e94, (q15_t)0x7e90, (q15_t)0x7e8c, (q15_t)0x7e88, (q15_t)0x7e84, (q15_t)0x7e81, - (q15_t)0x7e7d, (q15_t)0x7e79, (q15_t)0x7e75, (q15_t)0x7e71, (q15_t)0x7e6d, (q15_t)0x7e69, (q15_t)0x7e65, (q15_t)0x7e61, - (q15_t)0x7e5d, (q15_t)0x7e59, (q15_t)0x7e55, (q15_t)0x7e51, (q15_t)0x7e4d, (q15_t)0x7e49, (q15_t)0x7e45, (q15_t)0x7e41, - (q15_t)0x7e3d, (q15_t)0x7e39, (q15_t)0x7e34, (q15_t)0x7e30, (q15_t)0x7e2c, (q15_t)0x7e28, (q15_t)0x7e24, (q15_t)0x7e1f, - (q15_t)0x7e1b, (q15_t)0x7e17, (q15_t)0x7e12, (q15_t)0x7e0e, (q15_t)0x7e0a, (q15_t)0x7e05, (q15_t)0x7e01, (q15_t)0x7dfc, - (q15_t)0x7df8, (q15_t)0x7df3, (q15_t)0x7def, (q15_t)0x7dea, (q15_t)0x7de6, (q15_t)0x7de1, (q15_t)0x7ddd, (q15_t)0x7dd8, - (q15_t)0x7dd4, (q15_t)0x7dcf, (q15_t)0x7dca, (q15_t)0x7dc6, (q15_t)0x7dc1, (q15_t)0x7dbc, (q15_t)0x7db8, (q15_t)0x7db3, - (q15_t)0x7dae, (q15_t)0x7da9, (q15_t)0x7da5, (q15_t)0x7da0, (q15_t)0x7d9b, (q15_t)0x7d96, (q15_t)0x7d91, (q15_t)0x7d8c, - (q15_t)0x7d87, (q15_t)0x7d82, (q15_t)0x7d7e, (q15_t)0x7d79, (q15_t)0x7d74, (q15_t)0x7d6f, (q15_t)0x7d6a, (q15_t)0x7d65, - (q15_t)0x7d60, (q15_t)0x7d5a, (q15_t)0x7d55, (q15_t)0x7d50, (q15_t)0x7d4b, (q15_t)0x7d46, (q15_t)0x7d41, (q15_t)0x7d3c, - (q15_t)0x7d36, (q15_t)0x7d31, (q15_t)0x7d2c, (q15_t)0x7d27, (q15_t)0x7d21, (q15_t)0x7d1c, (q15_t)0x7d17, (q15_t)0x7d11, - (q15_t)0x7d0c, (q15_t)0x7d07, (q15_t)0x7d01, (q15_t)0x7cfc, (q15_t)0x7cf6, (q15_t)0x7cf1, (q15_t)0x7cec, (q15_t)0x7ce6, - (q15_t)0x7ce1, (q15_t)0x7cdb, (q15_t)0x7cd5, (q15_t)0x7cd0, (q15_t)0x7cca, (q15_t)0x7cc5, (q15_t)0x7cbf, (q15_t)0x7cb9, - (q15_t)0x7cb4, (q15_t)0x7cae, (q15_t)0x7ca8, (q15_t)0x7ca3, (q15_t)0x7c9d, (q15_t)0x7c97, (q15_t)0x7c91, (q15_t)0x7c8c, - (q15_t)0x7c86, (q15_t)0x7c80, (q15_t)0x7c7a, (q15_t)0x7c74, (q15_t)0x7c6e, (q15_t)0x7c69, (q15_t)0x7c63, (q15_t)0x7c5d, - (q15_t)0x7c57, (q15_t)0x7c51, (q15_t)0x7c4b, (q15_t)0x7c45, (q15_t)0x7c3f, (q15_t)0x7c39, (q15_t)0x7c33, (q15_t)0x7c2d, - (q15_t)0x7c26, (q15_t)0x7c20, (q15_t)0x7c1a, (q15_t)0x7c14, (q15_t)0x7c0e, (q15_t)0x7c08, (q15_t)0x7c01, (q15_t)0x7bfb, - (q15_t)0x7bf5, (q15_t)0x7bef, (q15_t)0x7be8, (q15_t)0x7be2, (q15_t)0x7bdc, (q15_t)0x7bd5, (q15_t)0x7bcf, (q15_t)0x7bc9, - (q15_t)0x7bc2, (q15_t)0x7bbc, (q15_t)0x7bb5, (q15_t)0x7baf, (q15_t)0x7ba8, (q15_t)0x7ba2, (q15_t)0x7b9b, (q15_t)0x7b95, - (q15_t)0x7b8e, (q15_t)0x7b88, (q15_t)0x7b81, (q15_t)0x7b7a, (q15_t)0x7b74, (q15_t)0x7b6d, (q15_t)0x7b67, (q15_t)0x7b60, - (q15_t)0x7b59, (q15_t)0x7b52, (q15_t)0x7b4c, (q15_t)0x7b45, (q15_t)0x7b3e, (q15_t)0x7b37, (q15_t)0x7b31, (q15_t)0x7b2a, - (q15_t)0x7b23, (q15_t)0x7b1c, (q15_t)0x7b15, (q15_t)0x7b0e, (q15_t)0x7b07, (q15_t)0x7b00, (q15_t)0x7af9, (q15_t)0x7af2, - (q15_t)0x7aeb, (q15_t)0x7ae4, (q15_t)0x7add, (q15_t)0x7ad6, (q15_t)0x7acf, (q15_t)0x7ac8, (q15_t)0x7ac1, (q15_t)0x7aba, - (q15_t)0x7ab3, (q15_t)0x7aac, (q15_t)0x7aa4, (q15_t)0x7a9d, (q15_t)0x7a96, (q15_t)0x7a8f, (q15_t)0x7a87, (q15_t)0x7a80, - (q15_t)0x7a79, (q15_t)0x7a72, (q15_t)0x7a6a, (q15_t)0x7a63, (q15_t)0x7a5c, (q15_t)0x7a54, (q15_t)0x7a4d, (q15_t)0x7a45, - (q15_t)0x7a3e, (q15_t)0x7a36, (q15_t)0x7a2f, (q15_t)0x7a27, (q15_t)0x7a20, (q15_t)0x7a18, (q15_t)0x7a11, (q15_t)0x7a09, - (q15_t)0x7a02, (q15_t)0x79fa, (q15_t)0x79f2, (q15_t)0x79eb, (q15_t)0x79e3, (q15_t)0x79db, (q15_t)0x79d4, (q15_t)0x79cc, - (q15_t)0x79c4, (q15_t)0x79bc, (q15_t)0x79b5, (q15_t)0x79ad, (q15_t)0x79a5, (q15_t)0x799d, (q15_t)0x7995, (q15_t)0x798e, - (q15_t)0x7986, (q15_t)0x797e, (q15_t)0x7976, (q15_t)0x796e, (q15_t)0x7966, (q15_t)0x795e, (q15_t)0x7956, (q15_t)0x794e, - (q15_t)0x7946, (q15_t)0x793e, (q15_t)0x7936, (q15_t)0x792e, (q15_t)0x7926, (q15_t)0x791e, (q15_t)0x7915, (q15_t)0x790d, - (q15_t)0x7905, (q15_t)0x78fd, (q15_t)0x78f5, (q15_t)0x78ec, (q15_t)0x78e4, (q15_t)0x78dc, (q15_t)0x78d4, (q15_t)0x78cb, - (q15_t)0x78c3, (q15_t)0x78bb, (q15_t)0x78b2, (q15_t)0x78aa, (q15_t)0x78a2, (q15_t)0x7899, (q15_t)0x7891, (q15_t)0x7888, - (q15_t)0x7880, (q15_t)0x7877, (q15_t)0x786f, (q15_t)0x7866, (q15_t)0x785e, (q15_t)0x7855, (q15_t)0x784d, (q15_t)0x7844, - (q15_t)0x783b, (q15_t)0x7833, (q15_t)0x782a, (q15_t)0x7821, (q15_t)0x7819, (q15_t)0x7810, (q15_t)0x7807, (q15_t)0x77ff, - (q15_t)0x77f6, (q15_t)0x77ed, (q15_t)0x77e4, (q15_t)0x77db, (q15_t)0x77d3, (q15_t)0x77ca, (q15_t)0x77c1, (q15_t)0x77b8, - (q15_t)0x77af, (q15_t)0x77a6, (q15_t)0x779d, (q15_t)0x7794, (q15_t)0x778b, (q15_t)0x7782, (q15_t)0x7779, (q15_t)0x7770, - (q15_t)0x7767, (q15_t)0x775e, (q15_t)0x7755, (q15_t)0x774c, (q15_t)0x7743, (q15_t)0x773a, (q15_t)0x7731, (q15_t)0x7727, - (q15_t)0x771e, (q15_t)0x7715, (q15_t)0x770c, (q15_t)0x7703, (q15_t)0x76f9, (q15_t)0x76f0, (q15_t)0x76e7, (q15_t)0x76dd, - (q15_t)0x76d4, (q15_t)0x76cb, (q15_t)0x76c1, (q15_t)0x76b8, (q15_t)0x76af, (q15_t)0x76a5, (q15_t)0x769c, (q15_t)0x7692, - (q15_t)0x7689, (q15_t)0x767f, (q15_t)0x7676, (q15_t)0x766c, (q15_t)0x7663, (q15_t)0x7659, (q15_t)0x7650, (q15_t)0x7646, - (q15_t)0x763c, (q15_t)0x7633, (q15_t)0x7629, (q15_t)0x761f, (q15_t)0x7616, (q15_t)0x760c, (q15_t)0x7602, (q15_t)0x75f9, - (q15_t)0x75ef, (q15_t)0x75e5, (q15_t)0x75db, (q15_t)0x75d1, (q15_t)0x75c8, (q15_t)0x75be, (q15_t)0x75b4, (q15_t)0x75aa, - (q15_t)0x75a0, (q15_t)0x7596, (q15_t)0x758c, (q15_t)0x7582, (q15_t)0x7578, (q15_t)0x756e, (q15_t)0x7564, (q15_t)0x755a, - (q15_t)0x7550, (q15_t)0x7546, (q15_t)0x753c, (q15_t)0x7532, (q15_t)0x7528, (q15_t)0x751e, (q15_t)0x7514, (q15_t)0x7509, - (q15_t)0x74ff, (q15_t)0x74f5, (q15_t)0x74eb, (q15_t)0x74e1, (q15_t)0x74d6, (q15_t)0x74cc, (q15_t)0x74c2, (q15_t)0x74b7, - (q15_t)0x74ad, (q15_t)0x74a3, (q15_t)0x7498, (q15_t)0x748e, (q15_t)0x7484, (q15_t)0x7479, (q15_t)0x746f, (q15_t)0x7464, - (q15_t)0x745a, (q15_t)0x744f, (q15_t)0x7445, (q15_t)0x743a, (q15_t)0x7430, (q15_t)0x7425, (q15_t)0x741b, (q15_t)0x7410, - (q15_t)0x7406, (q15_t)0x73fb, (q15_t)0x73f0, (q15_t)0x73e6, (q15_t)0x73db, (q15_t)0x73d0, (q15_t)0x73c6, (q15_t)0x73bb, - (q15_t)0x73b0, (q15_t)0x73a5, (q15_t)0x739b, (q15_t)0x7390, (q15_t)0x7385, (q15_t)0x737a, (q15_t)0x736f, (q15_t)0x7364, - (q15_t)0x7359, (q15_t)0x734f, (q15_t)0x7344, (q15_t)0x7339, (q15_t)0x732e, (q15_t)0x7323, (q15_t)0x7318, (q15_t)0x730d, - (q15_t)0x7302, (q15_t)0x72f7, (q15_t)0x72ec, (q15_t)0x72e1, (q15_t)0x72d5, (q15_t)0x72ca, (q15_t)0x72bf, (q15_t)0x72b4, - (q15_t)0x72a9, (q15_t)0x729e, (q15_t)0x7293, (q15_t)0x7287, (q15_t)0x727c, (q15_t)0x7271, (q15_t)0x7266, (q15_t)0x725a, - (q15_t)0x724f, (q15_t)0x7244, (q15_t)0x7238, (q15_t)0x722d, (q15_t)0x7222, (q15_t)0x7216, (q15_t)0x720b, (q15_t)0x71ff, - (q15_t)0x71f4, (q15_t)0x71e9, (q15_t)0x71dd, (q15_t)0x71d2, (q15_t)0x71c6, (q15_t)0x71bb, (q15_t)0x71af, (q15_t)0x71a3, - (q15_t)0x7198, (q15_t)0x718c, (q15_t)0x7181, (q15_t)0x7175, (q15_t)0x7169, (q15_t)0x715e, (q15_t)0x7152, (q15_t)0x7146, - (q15_t)0x713b, (q15_t)0x712f, (q15_t)0x7123, (q15_t)0x7117, (q15_t)0x710c, (q15_t)0x7100, (q15_t)0x70f4, (q15_t)0x70e8, - (q15_t)0x70dc, (q15_t)0x70d1, (q15_t)0x70c5, (q15_t)0x70b9, (q15_t)0x70ad, (q15_t)0x70a1, (q15_t)0x7095, (q15_t)0x7089, - (q15_t)0x707d, (q15_t)0x7071, (q15_t)0x7065, (q15_t)0x7059, (q15_t)0x704d, (q15_t)0x7041, (q15_t)0x7035, (q15_t)0x7029, - (q15_t)0x701d, (q15_t)0x7010, (q15_t)0x7004, (q15_t)0x6ff8, (q15_t)0x6fec, (q15_t)0x6fe0, (q15_t)0x6fd3, (q15_t)0x6fc7, - (q15_t)0x6fbb, (q15_t)0x6faf, (q15_t)0x6fa2, (q15_t)0x6f96, (q15_t)0x6f8a, (q15_t)0x6f7d, (q15_t)0x6f71, (q15_t)0x6f65, - (q15_t)0x6f58, (q15_t)0x6f4c, (q15_t)0x6f3f, (q15_t)0x6f33, (q15_t)0x6f27, (q15_t)0x6f1a, (q15_t)0x6f0e, (q15_t)0x6f01, - (q15_t)0x6ef5, (q15_t)0x6ee8, (q15_t)0x6edc, (q15_t)0x6ecf, (q15_t)0x6ec2, (q15_t)0x6eb6, (q15_t)0x6ea9, (q15_t)0x6e9c, - (q15_t)0x6e90, (q15_t)0x6e83, (q15_t)0x6e76, (q15_t)0x6e6a, (q15_t)0x6e5d, (q15_t)0x6e50, (q15_t)0x6e44, (q15_t)0x6e37, - (q15_t)0x6e2a, (q15_t)0x6e1d, (q15_t)0x6e10, (q15_t)0x6e04, (q15_t)0x6df7, (q15_t)0x6dea, (q15_t)0x6ddd, (q15_t)0x6dd0, - (q15_t)0x6dc3, (q15_t)0x6db6, (q15_t)0x6da9, (q15_t)0x6d9c, (q15_t)0x6d8f, (q15_t)0x6d82, (q15_t)0x6d75, (q15_t)0x6d68, - (q15_t)0x6d5b, (q15_t)0x6d4e, (q15_t)0x6d41, (q15_t)0x6d34, (q15_t)0x6d27, (q15_t)0x6d1a, (q15_t)0x6d0c, (q15_t)0x6cff, - (q15_t)0x6cf2, (q15_t)0x6ce5, (q15_t)0x6cd8, (q15_t)0x6cca, (q15_t)0x6cbd, (q15_t)0x6cb0, (q15_t)0x6ca3, (q15_t)0x6c95, - (q15_t)0x6c88, (q15_t)0x6c7b, (q15_t)0x6c6d, (q15_t)0x6c60, (q15_t)0x6c53, (q15_t)0x6c45, (q15_t)0x6c38, (q15_t)0x6c2a, - (q15_t)0x6c1d, (q15_t)0x6c0f, (q15_t)0x6c02, (q15_t)0x6bf5, (q15_t)0x6be7, (q15_t)0x6bd9, (q15_t)0x6bcc, (q15_t)0x6bbe, - (q15_t)0x6bb1, (q15_t)0x6ba3, (q15_t)0x6b96, (q15_t)0x6b88, (q15_t)0x6b7a, (q15_t)0x6b6d, (q15_t)0x6b5f, (q15_t)0x6b51, - (q15_t)0x6b44, (q15_t)0x6b36, (q15_t)0x6b28, (q15_t)0x6b1a, (q15_t)0x6b0d, (q15_t)0x6aff, (q15_t)0x6af1, (q15_t)0x6ae3, - (q15_t)0x6ad5, (q15_t)0x6ac8, (q15_t)0x6aba, (q15_t)0x6aac, (q15_t)0x6a9e, (q15_t)0x6a90, (q15_t)0x6a82, (q15_t)0x6a74, - (q15_t)0x6a66, (q15_t)0x6a58, (q15_t)0x6a4a, (q15_t)0x6a3c, (q15_t)0x6a2e, (q15_t)0x6a20, (q15_t)0x6a12, (q15_t)0x6a04, - (q15_t)0x69f6, (q15_t)0x69e8, (q15_t)0x69da, (q15_t)0x69cb, (q15_t)0x69bd, (q15_t)0x69af, (q15_t)0x69a1, (q15_t)0x6993, - (q15_t)0x6985, (q15_t)0x6976, (q15_t)0x6968, (q15_t)0x695a, (q15_t)0x694b, (q15_t)0x693d, (q15_t)0x692f, (q15_t)0x6921, - (q15_t)0x6912, (q15_t)0x6904, (q15_t)0x68f5, (q15_t)0x68e7, (q15_t)0x68d9, (q15_t)0x68ca, (q15_t)0x68bc, (q15_t)0x68ad, - (q15_t)0x689f, (q15_t)0x6890, (q15_t)0x6882, (q15_t)0x6873, (q15_t)0x6865, (q15_t)0x6856, (q15_t)0x6848, (q15_t)0x6839, - (q15_t)0x682b, (q15_t)0x681c, (q15_t)0x680d, (q15_t)0x67ff, (q15_t)0x67f0, (q15_t)0x67e1, (q15_t)0x67d3, (q15_t)0x67c4, - (q15_t)0x67b5, (q15_t)0x67a6, (q15_t)0x6798, (q15_t)0x6789, (q15_t)0x677a, (q15_t)0x676b, (q15_t)0x675d, (q15_t)0x674e, - (q15_t)0x673f, (q15_t)0x6730, (q15_t)0x6721, (q15_t)0x6712, (q15_t)0x6703, (q15_t)0x66f4, (q15_t)0x66e5, (q15_t)0x66d6, - (q15_t)0x66c8, (q15_t)0x66b9, (q15_t)0x66aa, (q15_t)0x669b, (q15_t)0x668b, (q15_t)0x667c, (q15_t)0x666d, (q15_t)0x665e, - (q15_t)0x664f, (q15_t)0x6640, (q15_t)0x6631, (q15_t)0x6622, (q15_t)0x6613, (q15_t)0x6603, (q15_t)0x65f4, (q15_t)0x65e5, - (q15_t)0x65d6, (q15_t)0x65c7, (q15_t)0x65b7, (q15_t)0x65a8, (q15_t)0x6599, (q15_t)0x658a, (q15_t)0x657a, (q15_t)0x656b, - (q15_t)0x655c, (q15_t)0x654c, (q15_t)0x653d, (q15_t)0x652d, (q15_t)0x651e, (q15_t)0x650f, (q15_t)0x64ff, (q15_t)0x64f0, - (q15_t)0x64e0, (q15_t)0x64d1, (q15_t)0x64c1, (q15_t)0x64b2, (q15_t)0x64a2, (q15_t)0x6493, (q15_t)0x6483, (q15_t)0x6474, - (q15_t)0x6464, (q15_t)0x6454, (q15_t)0x6445, (q15_t)0x6435, (q15_t)0x6426, (q15_t)0x6416, (q15_t)0x6406, (q15_t)0x63f7, - (q15_t)0x63e7, (q15_t)0x63d7, (q15_t)0x63c7, (q15_t)0x63b8, (q15_t)0x63a8, (q15_t)0x6398, (q15_t)0x6388, (q15_t)0x6378, - (q15_t)0x6369, (q15_t)0x6359, (q15_t)0x6349, (q15_t)0x6339, (q15_t)0x6329, (q15_t)0x6319, (q15_t)0x6309, (q15_t)0x62f9, - (q15_t)0x62ea, (q15_t)0x62da, (q15_t)0x62ca, (q15_t)0x62ba, (q15_t)0x62aa, (q15_t)0x629a, (q15_t)0x628a, (q15_t)0x627a, - (q15_t)0x6269, (q15_t)0x6259, (q15_t)0x6249, (q15_t)0x6239, (q15_t)0x6229, (q15_t)0x6219, (q15_t)0x6209, (q15_t)0x61f9, - (q15_t)0x61e8, (q15_t)0x61d8, (q15_t)0x61c8, (q15_t)0x61b8, (q15_t)0x61a8, (q15_t)0x6197, (q15_t)0x6187, (q15_t)0x6177, - (q15_t)0x6166, (q15_t)0x6156, (q15_t)0x6146, (q15_t)0x6135, (q15_t)0x6125, (q15_t)0x6115, (q15_t)0x6104, (q15_t)0x60f4, - (q15_t)0x60e4, (q15_t)0x60d3, (q15_t)0x60c3, (q15_t)0x60b2, (q15_t)0x60a2, (q15_t)0x6091, (q15_t)0x6081, (q15_t)0x6070, - (q15_t)0x6060, (q15_t)0x604f, (q15_t)0x603f, (q15_t)0x602e, (q15_t)0x601d, (q15_t)0x600d, (q15_t)0x5ffc, (q15_t)0x5fec, - (q15_t)0x5fdb, (q15_t)0x5fca, (q15_t)0x5fba, (q15_t)0x5fa9, (q15_t)0x5f98, (q15_t)0x5f87, (q15_t)0x5f77, (q15_t)0x5f66, - (q15_t)0x5f55, (q15_t)0x5f44, (q15_t)0x5f34, (q15_t)0x5f23, (q15_t)0x5f12, (q15_t)0x5f01, (q15_t)0x5ef0, (q15_t)0x5edf, - (q15_t)0x5ecf, (q15_t)0x5ebe, (q15_t)0x5ead, (q15_t)0x5e9c, (q15_t)0x5e8b, (q15_t)0x5e7a, (q15_t)0x5e69, (q15_t)0x5e58, - (q15_t)0x5e47, (q15_t)0x5e36, (q15_t)0x5e25, (q15_t)0x5e14, (q15_t)0x5e03, (q15_t)0x5df2, (q15_t)0x5de1, (q15_t)0x5dd0, - (q15_t)0x5dbf, (q15_t)0x5dad, (q15_t)0x5d9c, (q15_t)0x5d8b, (q15_t)0x5d7a, (q15_t)0x5d69, (q15_t)0x5d58, (q15_t)0x5d46, - (q15_t)0x5d35, (q15_t)0x5d24, (q15_t)0x5d13, (q15_t)0x5d01, (q15_t)0x5cf0, (q15_t)0x5cdf, (q15_t)0x5cce, (q15_t)0x5cbc, - (q15_t)0x5cab, (q15_t)0x5c9a, (q15_t)0x5c88, (q15_t)0x5c77, (q15_t)0x5c66, (q15_t)0x5c54, (q15_t)0x5c43, (q15_t)0x5c31, - (q15_t)0x5c20, (q15_t)0x5c0e, (q15_t)0x5bfd, (q15_t)0x5beb, (q15_t)0x5bda, (q15_t)0x5bc8, (q15_t)0x5bb7, (q15_t)0x5ba5, - (q15_t)0x5b94, (q15_t)0x5b82, (q15_t)0x5b71, (q15_t)0x5b5f, (q15_t)0x5b4d, (q15_t)0x5b3c, (q15_t)0x5b2a, (q15_t)0x5b19, - (q15_t)0x5b07, (q15_t)0x5af5, (q15_t)0x5ae4, (q15_t)0x5ad2, (q15_t)0x5ac0, (q15_t)0x5aae, (q15_t)0x5a9d, (q15_t)0x5a8b, - (q15_t)0x5a79, (q15_t)0x5a67, (q15_t)0x5a56, (q15_t)0x5a44, (q15_t)0x5a32, (q15_t)0x5a20, (q15_t)0x5a0e, (q15_t)0x59fc, - (q15_t)0x59ea, (q15_t)0x59d9, (q15_t)0x59c7, (q15_t)0x59b5, (q15_t)0x59a3, (q15_t)0x5991, (q15_t)0x597f, (q15_t)0x596d, - (q15_t)0x595b, (q15_t)0x5949, (q15_t)0x5937, (q15_t)0x5925, (q15_t)0x5913, (q15_t)0x5901, (q15_t)0x58ef, (q15_t)0x58dd, - (q15_t)0x58cb, (q15_t)0x58b8, (q15_t)0x58a6, (q15_t)0x5894, (q15_t)0x5882, (q15_t)0x5870, (q15_t)0x585e, (q15_t)0x584b, - (q15_t)0x5839, (q15_t)0x5827, (q15_t)0x5815, (q15_t)0x5803, (q15_t)0x57f0, (q15_t)0x57de, (q15_t)0x57cc, (q15_t)0x57b9, - (q15_t)0x57a7, (q15_t)0x5795, (q15_t)0x5783, (q15_t)0x5770, (q15_t)0x575e, (q15_t)0x574b, (q15_t)0x5739, (q15_t)0x5727, - (q15_t)0x5714, (q15_t)0x5702, (q15_t)0x56ef, (q15_t)0x56dd, (q15_t)0x56ca, (q15_t)0x56b8, (q15_t)0x56a5, (q15_t)0x5693, - (q15_t)0x5680, (q15_t)0x566e, (q15_t)0x565b, (q15_t)0x5649, (q15_t)0x5636, (q15_t)0x5624, (q15_t)0x5611, (q15_t)0x55fe, - (q15_t)0x55ec, (q15_t)0x55d9, (q15_t)0x55c7, (q15_t)0x55b4, (q15_t)0x55a1, (q15_t)0x558f, (q15_t)0x557c, (q15_t)0x5569, - (q15_t)0x5556, (q15_t)0x5544, (q15_t)0x5531, (q15_t)0x551e, (q15_t)0x550b, (q15_t)0x54f9, (q15_t)0x54e6, (q15_t)0x54d3, - (q15_t)0x54c0, (q15_t)0x54ad, (q15_t)0x549a, (q15_t)0x5488, (q15_t)0x5475, (q15_t)0x5462, (q15_t)0x544f, (q15_t)0x543c, - (q15_t)0x5429, (q15_t)0x5416, (q15_t)0x5403, (q15_t)0x53f0, (q15_t)0x53dd, (q15_t)0x53ca, (q15_t)0x53b7, (q15_t)0x53a4, - (q15_t)0x5391, (q15_t)0x537e, (q15_t)0x536b, (q15_t)0x5358, (q15_t)0x5345, (q15_t)0x5332, (q15_t)0x531f, (q15_t)0x530c, - (q15_t)0x52f8, (q15_t)0x52e5, (q15_t)0x52d2, (q15_t)0x52bf, (q15_t)0x52ac, (q15_t)0x5299, (q15_t)0x5285, (q15_t)0x5272, - (q15_t)0x525f, (q15_t)0x524c, (q15_t)0x5238, (q15_t)0x5225, (q15_t)0x5212, (q15_t)0x51ff, (q15_t)0x51eb, (q15_t)0x51d8, - (q15_t)0x51c5, (q15_t)0x51b1, (q15_t)0x519e, (q15_t)0x518b, (q15_t)0x5177, (q15_t)0x5164, (q15_t)0x5150, (q15_t)0x513d, - (q15_t)0x512a, (q15_t)0x5116, (q15_t)0x5103, (q15_t)0x50ef, (q15_t)0x50dc, (q15_t)0x50c8, (q15_t)0x50b5, (q15_t)0x50a1, - (q15_t)0x508e, (q15_t)0x507a, (q15_t)0x5067, (q15_t)0x5053, (q15_t)0x503f, (q15_t)0x502c, (q15_t)0x5018, (q15_t)0x5005, - (q15_t)0x4ff1, (q15_t)0x4fdd, (q15_t)0x4fca, (q15_t)0x4fb6, (q15_t)0x4fa2, (q15_t)0x4f8f, (q15_t)0x4f7b, (q15_t)0x4f67, - (q15_t)0x4f54, (q15_t)0x4f40, (q15_t)0x4f2c, (q15_t)0x4f18, (q15_t)0x4f05, (q15_t)0x4ef1, (q15_t)0x4edd, (q15_t)0x4ec9, - (q15_t)0x4eb6, (q15_t)0x4ea2, (q15_t)0x4e8e, (q15_t)0x4e7a, (q15_t)0x4e66, (q15_t)0x4e52, (q15_t)0x4e3e, (q15_t)0x4e2a, - (q15_t)0x4e17, (q15_t)0x4e03, (q15_t)0x4def, (q15_t)0x4ddb, (q15_t)0x4dc7, (q15_t)0x4db3, (q15_t)0x4d9f, (q15_t)0x4d8b, - (q15_t)0x4d77, (q15_t)0x4d63, (q15_t)0x4d4f, (q15_t)0x4d3b, (q15_t)0x4d27, (q15_t)0x4d13, (q15_t)0x4cff, (q15_t)0x4ceb, - (q15_t)0x4cd6, (q15_t)0x4cc2, (q15_t)0x4cae, (q15_t)0x4c9a, (q15_t)0x4c86, (q15_t)0x4c72, (q15_t)0x4c5e, (q15_t)0x4c49, - (q15_t)0x4c35, (q15_t)0x4c21, (q15_t)0x4c0d, (q15_t)0x4bf9, (q15_t)0x4be4, (q15_t)0x4bd0, (q15_t)0x4bbc, (q15_t)0x4ba8, - (q15_t)0x4b93, (q15_t)0x4b7f, (q15_t)0x4b6b, (q15_t)0x4b56, (q15_t)0x4b42, (q15_t)0x4b2e, (q15_t)0x4b19, (q15_t)0x4b05, - (q15_t)0x4af1, (q15_t)0x4adc, (q15_t)0x4ac8, (q15_t)0x4ab4, (q15_t)0x4a9f, (q15_t)0x4a8b, (q15_t)0x4a76, (q15_t)0x4a62, - (q15_t)0x4a4d, (q15_t)0x4a39, (q15_t)0x4a24, (q15_t)0x4a10, (q15_t)0x49fb, (q15_t)0x49e7, (q15_t)0x49d2, (q15_t)0x49be, - (q15_t)0x49a9, (q15_t)0x4995, (q15_t)0x4980, (q15_t)0x496c, (q15_t)0x4957, (q15_t)0x4942, (q15_t)0x492e, (q15_t)0x4919, - (q15_t)0x4905, (q15_t)0x48f0, (q15_t)0x48db, (q15_t)0x48c7, (q15_t)0x48b2, (q15_t)0x489d, (q15_t)0x4888, (q15_t)0x4874, - (q15_t)0x485f, (q15_t)0x484a, (q15_t)0x4836, (q15_t)0x4821, (q15_t)0x480c, (q15_t)0x47f7, (q15_t)0x47e2, (q15_t)0x47ce, - (q15_t)0x47b9, (q15_t)0x47a4, (q15_t)0x478f, (q15_t)0x477a, (q15_t)0x4765, (q15_t)0x4751, (q15_t)0x473c, (q15_t)0x4727, - (q15_t)0x4712, (q15_t)0x46fd, (q15_t)0x46e8, (q15_t)0x46d3, (q15_t)0x46be, (q15_t)0x46a9, (q15_t)0x4694, (q15_t)0x467f, - (q15_t)0x466a, (q15_t)0x4655, (q15_t)0x4640, (q15_t)0x462b, (q15_t)0x4616, (q15_t)0x4601, (q15_t)0x45ec, (q15_t)0x45d7, - (q15_t)0x45c2, (q15_t)0x45ad, (q15_t)0x4598, (q15_t)0x4583, (q15_t)0x456e, (q15_t)0x4559, (q15_t)0x4544, (q15_t)0x452e, - (q15_t)0x4519, (q15_t)0x4504, (q15_t)0x44ef, (q15_t)0x44da, (q15_t)0x44c5, (q15_t)0x44af, (q15_t)0x449a, (q15_t)0x4485, - (q15_t)0x4470, (q15_t)0x445a, (q15_t)0x4445, (q15_t)0x4430, (q15_t)0x441b, (q15_t)0x4405, (q15_t)0x43f0, (q15_t)0x43db, - (q15_t)0x43c5, (q15_t)0x43b0, (q15_t)0x439b, (q15_t)0x4385, (q15_t)0x4370, (q15_t)0x435b, (q15_t)0x4345, (q15_t)0x4330, - (q15_t)0x431b, (q15_t)0x4305, (q15_t)0x42f0, (q15_t)0x42da, (q15_t)0x42c5, (q15_t)0x42af, (q15_t)0x429a, (q15_t)0x4284, - (q15_t)0x426f, (q15_t)0x425a, (q15_t)0x4244, (q15_t)0x422f, (q15_t)0x4219, (q15_t)0x4203, (q15_t)0x41ee, (q15_t)0x41d8, - (q15_t)0x41c3, (q15_t)0x41ad, (q15_t)0x4198, (q15_t)0x4182, (q15_t)0x416d, (q15_t)0x4157, (q15_t)0x4141, (q15_t)0x412c, - (q15_t)0x4116, (q15_t)0x4100, (q15_t)0x40eb, (q15_t)0x40d5, (q15_t)0x40bf, (q15_t)0x40aa, (q15_t)0x4094, (q15_t)0x407e, - (q15_t)0x4069, (q15_t)0x4053, (q15_t)0x403d, (q15_t)0x4027, (q15_t)0x4012, (q15_t)0x3ffc, (q15_t)0x3fe6, (q15_t)0x3fd0, - (q15_t)0x3fbb, (q15_t)0x3fa5, (q15_t)0x3f8f, (q15_t)0x3f79, (q15_t)0x3f63, (q15_t)0x3f4d, (q15_t)0x3f38, (q15_t)0x3f22, - (q15_t)0x3f0c, (q15_t)0x3ef6, (q15_t)0x3ee0, (q15_t)0x3eca, (q15_t)0x3eb4, (q15_t)0x3e9e, (q15_t)0x3e88, (q15_t)0x3e73, - (q15_t)0x3e5d, (q15_t)0x3e47, (q15_t)0x3e31, (q15_t)0x3e1b, (q15_t)0x3e05, (q15_t)0x3def, (q15_t)0x3dd9, (q15_t)0x3dc3, - (q15_t)0x3dad, (q15_t)0x3d97, (q15_t)0x3d81, (q15_t)0x3d6b, (q15_t)0x3d55, (q15_t)0x3d3e, (q15_t)0x3d28, (q15_t)0x3d12, - (q15_t)0x3cfc, (q15_t)0x3ce6, (q15_t)0x3cd0, (q15_t)0x3cba, (q15_t)0x3ca4, (q15_t)0x3c8e, (q15_t)0x3c77, (q15_t)0x3c61, - (q15_t)0x3c4b, (q15_t)0x3c35, (q15_t)0x3c1f, (q15_t)0x3c09, (q15_t)0x3bf2, (q15_t)0x3bdc, (q15_t)0x3bc6, (q15_t)0x3bb0, - (q15_t)0x3b99, (q15_t)0x3b83, (q15_t)0x3b6d, (q15_t)0x3b57, (q15_t)0x3b40, (q15_t)0x3b2a, (q15_t)0x3b14, (q15_t)0x3afe, - (q15_t)0x3ae7, (q15_t)0x3ad1, (q15_t)0x3abb, (q15_t)0x3aa4, (q15_t)0x3a8e, (q15_t)0x3a78, (q15_t)0x3a61, (q15_t)0x3a4b, - (q15_t)0x3a34, (q15_t)0x3a1e, (q15_t)0x3a08, (q15_t)0x39f1, (q15_t)0x39db, (q15_t)0x39c4, (q15_t)0x39ae, (q15_t)0x3998, - (q15_t)0x3981, (q15_t)0x396b, (q15_t)0x3954, (q15_t)0x393e, (q15_t)0x3927, (q15_t)0x3911, (q15_t)0x38fa, (q15_t)0x38e4, - (q15_t)0x38cd, (q15_t)0x38b7, (q15_t)0x38a0, (q15_t)0x388a, (q15_t)0x3873, (q15_t)0x385d, (q15_t)0x3846, (q15_t)0x382f, - (q15_t)0x3819, (q15_t)0x3802, (q15_t)0x37ec, (q15_t)0x37d5, (q15_t)0x37be, (q15_t)0x37a8, (q15_t)0x3791, (q15_t)0x377a, - (q15_t)0x3764, (q15_t)0x374d, (q15_t)0x3736, (q15_t)0x3720, (q15_t)0x3709, (q15_t)0x36f2, (q15_t)0x36dc, (q15_t)0x36c5, - (q15_t)0x36ae, (q15_t)0x3698, (q15_t)0x3681, (q15_t)0x366a, (q15_t)0x3653, (q15_t)0x363d, (q15_t)0x3626, (q15_t)0x360f, - (q15_t)0x35f8, (q15_t)0x35e1, (q15_t)0x35cb, (q15_t)0x35b4, (q15_t)0x359d, (q15_t)0x3586, (q15_t)0x356f, (q15_t)0x3558, - (q15_t)0x3542, (q15_t)0x352b, (q15_t)0x3514, (q15_t)0x34fd, (q15_t)0x34e6, (q15_t)0x34cf, (q15_t)0x34b8, (q15_t)0x34a1, - (q15_t)0x348b, (q15_t)0x3474, (q15_t)0x345d, (q15_t)0x3446, (q15_t)0x342f, (q15_t)0x3418, (q15_t)0x3401, (q15_t)0x33ea, - (q15_t)0x33d3, (q15_t)0x33bc, (q15_t)0x33a5, (q15_t)0x338e, (q15_t)0x3377, (q15_t)0x3360, (q15_t)0x3349, (q15_t)0x3332, - (q15_t)0x331b, (q15_t)0x3304, (q15_t)0x32ed, (q15_t)0x32d6, (q15_t)0x32bf, (q15_t)0x32a8, (q15_t)0x3290, (q15_t)0x3279, - (q15_t)0x3262, (q15_t)0x324b, (q15_t)0x3234, (q15_t)0x321d, (q15_t)0x3206, (q15_t)0x31ef, (q15_t)0x31d8, (q15_t)0x31c0, - (q15_t)0x31a9, (q15_t)0x3192, (q15_t)0x317b, (q15_t)0x3164, (q15_t)0x314c, (q15_t)0x3135, (q15_t)0x311e, (q15_t)0x3107, - (q15_t)0x30f0, (q15_t)0x30d8, (q15_t)0x30c1, (q15_t)0x30aa, (q15_t)0x3093, (q15_t)0x307b, (q15_t)0x3064, (q15_t)0x304d, - (q15_t)0x3036, (q15_t)0x301e, (q15_t)0x3007, (q15_t)0x2ff0, (q15_t)0x2fd8, (q15_t)0x2fc1, (q15_t)0x2faa, (q15_t)0x2f92, - (q15_t)0x2f7b, (q15_t)0x2f64, (q15_t)0x2f4c, (q15_t)0x2f35, (q15_t)0x2f1e, (q15_t)0x2f06, (q15_t)0x2eef, (q15_t)0x2ed8, - (q15_t)0x2ec0, (q15_t)0x2ea9, (q15_t)0x2e91, (q15_t)0x2e7a, (q15_t)0x2e63, (q15_t)0x2e4b, (q15_t)0x2e34, (q15_t)0x2e1c, - (q15_t)0x2e05, (q15_t)0x2ded, (q15_t)0x2dd6, (q15_t)0x2dbe, (q15_t)0x2da7, (q15_t)0x2d8f, (q15_t)0x2d78, (q15_t)0x2d60, - (q15_t)0x2d49, (q15_t)0x2d31, (q15_t)0x2d1a, (q15_t)0x2d02, (q15_t)0x2ceb, (q15_t)0x2cd3, (q15_t)0x2cbc, (q15_t)0x2ca4, - (q15_t)0x2c8d, (q15_t)0x2c75, (q15_t)0x2c5e, (q15_t)0x2c46, (q15_t)0x2c2e, (q15_t)0x2c17, (q15_t)0x2bff, (q15_t)0x2be8, - (q15_t)0x2bd0, (q15_t)0x2bb8, (q15_t)0x2ba1, (q15_t)0x2b89, (q15_t)0x2b71, (q15_t)0x2b5a, (q15_t)0x2b42, (q15_t)0x2b2b, - (q15_t)0x2b13, (q15_t)0x2afb, (q15_t)0x2ae4, (q15_t)0x2acc, (q15_t)0x2ab4, (q15_t)0x2a9c, (q15_t)0x2a85, (q15_t)0x2a6d, - (q15_t)0x2a55, (q15_t)0x2a3e, (q15_t)0x2a26, (q15_t)0x2a0e, (q15_t)0x29f6, (q15_t)0x29df, (q15_t)0x29c7, (q15_t)0x29af, - (q15_t)0x2997, (q15_t)0x2980, (q15_t)0x2968, (q15_t)0x2950, (q15_t)0x2938, (q15_t)0x2920, (q15_t)0x2909, (q15_t)0x28f1, - (q15_t)0x28d9, (q15_t)0x28c1, (q15_t)0x28a9, (q15_t)0x2892, (q15_t)0x287a, (q15_t)0x2862, (q15_t)0x284a, (q15_t)0x2832, - (q15_t)0x281a, (q15_t)0x2802, (q15_t)0x27eb, (q15_t)0x27d3, (q15_t)0x27bb, (q15_t)0x27a3, (q15_t)0x278b, (q15_t)0x2773, - (q15_t)0x275b, (q15_t)0x2743, (q15_t)0x272b, (q15_t)0x2713, (q15_t)0x26fb, (q15_t)0x26e4, (q15_t)0x26cc, (q15_t)0x26b4, - (q15_t)0x269c, (q15_t)0x2684, (q15_t)0x266c, (q15_t)0x2654, (q15_t)0x263c, (q15_t)0x2624, (q15_t)0x260c, (q15_t)0x25f4, - (q15_t)0x25dc, (q15_t)0x25c4, (q15_t)0x25ac, (q15_t)0x2594, (q15_t)0x257c, (q15_t)0x2564, (q15_t)0x254c, (q15_t)0x2534, - (q15_t)0x251c, (q15_t)0x2503, (q15_t)0x24eb, (q15_t)0x24d3, (q15_t)0x24bb, (q15_t)0x24a3, (q15_t)0x248b, (q15_t)0x2473, - (q15_t)0x245b, (q15_t)0x2443, (q15_t)0x242b, (q15_t)0x2413, (q15_t)0x23fa, (q15_t)0x23e2, (q15_t)0x23ca, (q15_t)0x23b2, - (q15_t)0x239a, (q15_t)0x2382, (q15_t)0x236a, (q15_t)0x2352, (q15_t)0x2339, (q15_t)0x2321, (q15_t)0x2309, (q15_t)0x22f1, - (q15_t)0x22d9, (q15_t)0x22c0, (q15_t)0x22a8, (q15_t)0x2290, (q15_t)0x2278, (q15_t)0x2260, (q15_t)0x2247, (q15_t)0x222f, - (q15_t)0x2217, (q15_t)0x21ff, (q15_t)0x21e7, (q15_t)0x21ce, (q15_t)0x21b6, (q15_t)0x219e, (q15_t)0x2186, (q15_t)0x216d, - (q15_t)0x2155, (q15_t)0x213d, (q15_t)0x2125, (q15_t)0x210c, (q15_t)0x20f4, (q15_t)0x20dc, (q15_t)0x20c3, (q15_t)0x20ab, - (q15_t)0x2093, (q15_t)0x207a, (q15_t)0x2062, (q15_t)0x204a, (q15_t)0x2032, (q15_t)0x2019, (q15_t)0x2001, (q15_t)0x1fe9, - (q15_t)0x1fd0, (q15_t)0x1fb8, (q15_t)0x1f9f, (q15_t)0x1f87, (q15_t)0x1f6f, (q15_t)0x1f56, (q15_t)0x1f3e, (q15_t)0x1f26, - (q15_t)0x1f0d, (q15_t)0x1ef5, (q15_t)0x1edd, (q15_t)0x1ec4, (q15_t)0x1eac, (q15_t)0x1e93, (q15_t)0x1e7b, (q15_t)0x1e62, - (q15_t)0x1e4a, (q15_t)0x1e32, (q15_t)0x1e19, (q15_t)0x1e01, (q15_t)0x1de8, (q15_t)0x1dd0, (q15_t)0x1db7, (q15_t)0x1d9f, - (q15_t)0x1d87, (q15_t)0x1d6e, (q15_t)0x1d56, (q15_t)0x1d3d, (q15_t)0x1d25, (q15_t)0x1d0c, (q15_t)0x1cf4, (q15_t)0x1cdb, - (q15_t)0x1cc3, (q15_t)0x1caa, (q15_t)0x1c92, (q15_t)0x1c79, (q15_t)0x1c61, (q15_t)0x1c48, (q15_t)0x1c30, (q15_t)0x1c17, - (q15_t)0x1bff, (q15_t)0x1be6, (q15_t)0x1bce, (q15_t)0x1bb5, (q15_t)0x1b9d, (q15_t)0x1b84, (q15_t)0x1b6c, (q15_t)0x1b53, - (q15_t)0x1b3a, (q15_t)0x1b22, (q15_t)0x1b09, (q15_t)0x1af1, (q15_t)0x1ad8, (q15_t)0x1ac0, (q15_t)0x1aa7, (q15_t)0x1a8e, - (q15_t)0x1a76, (q15_t)0x1a5d, (q15_t)0x1a45, (q15_t)0x1a2c, (q15_t)0x1a13, (q15_t)0x19fb, (q15_t)0x19e2, (q15_t)0x19ca, - (q15_t)0x19b1, (q15_t)0x1998, (q15_t)0x1980, (q15_t)0x1967, (q15_t)0x194e, (q15_t)0x1936, (q15_t)0x191d, (q15_t)0x1905, - (q15_t)0x18ec, (q15_t)0x18d3, (q15_t)0x18bb, (q15_t)0x18a2, (q15_t)0x1889, (q15_t)0x1871, (q15_t)0x1858, (q15_t)0x183f, - (q15_t)0x1827, (q15_t)0x180e, (q15_t)0x17f5, (q15_t)0x17dd, (q15_t)0x17c4, (q15_t)0x17ab, (q15_t)0x1792, (q15_t)0x177a, - (q15_t)0x1761, (q15_t)0x1748, (q15_t)0x1730, (q15_t)0x1717, (q15_t)0x16fe, (q15_t)0x16e5, (q15_t)0x16cd, (q15_t)0x16b4, - (q15_t)0x169b, (q15_t)0x1682, (q15_t)0x166a, (q15_t)0x1651, (q15_t)0x1638, (q15_t)0x161f, (q15_t)0x1607, (q15_t)0x15ee, - (q15_t)0x15d5, (q15_t)0x15bc, (q15_t)0x15a4, (q15_t)0x158b, (q15_t)0x1572, (q15_t)0x1559, (q15_t)0x1541, (q15_t)0x1528, - (q15_t)0x150f, (q15_t)0x14f6, (q15_t)0x14dd, (q15_t)0x14c5, (q15_t)0x14ac, (q15_t)0x1493, (q15_t)0x147a, (q15_t)0x1461, - (q15_t)0x1449, (q15_t)0x1430, (q15_t)0x1417, (q15_t)0x13fe, (q15_t)0x13e5, (q15_t)0x13cc, (q15_t)0x13b4, (q15_t)0x139b, - (q15_t)0x1382, (q15_t)0x1369, (q15_t)0x1350, (q15_t)0x1337, (q15_t)0x131f, (q15_t)0x1306, (q15_t)0x12ed, (q15_t)0x12d4, - (q15_t)0x12bb, (q15_t)0x12a2, (q15_t)0x1289, (q15_t)0x1271, (q15_t)0x1258, (q15_t)0x123f, (q15_t)0x1226, (q15_t)0x120d, - (q15_t)0x11f4, (q15_t)0x11db, (q15_t)0x11c2, (q15_t)0x11a9, (q15_t)0x1191, (q15_t)0x1178, (q15_t)0x115f, (q15_t)0x1146, - (q15_t)0x112d, (q15_t)0x1114, (q15_t)0x10fb, (q15_t)0x10e2, (q15_t)0x10c9, (q15_t)0x10b0, (q15_t)0x1098, (q15_t)0x107f, - (q15_t)0x1066, (q15_t)0x104d, (q15_t)0x1034, (q15_t)0x101b, (q15_t)0x1002, (q15_t)0xfe9, (q15_t)0xfd0, (q15_t)0xfb7, - (q15_t)0xf9e, (q15_t)0xf85, (q15_t)0xf6c, (q15_t)0xf53, (q15_t)0xf3a, (q15_t)0xf21, (q15_t)0xf08, (q15_t)0xef0, - (q15_t)0xed7, (q15_t)0xebe, (q15_t)0xea5, (q15_t)0xe8c, (q15_t)0xe73, (q15_t)0xe5a, (q15_t)0xe41, (q15_t)0xe28, - (q15_t)0xe0f, (q15_t)0xdf6, (q15_t)0xddd, (q15_t)0xdc4, (q15_t)0xdab, (q15_t)0xd92, (q15_t)0xd79, (q15_t)0xd60, - (q15_t)0xd47, (q15_t)0xd2e, (q15_t)0xd15, (q15_t)0xcfc, (q15_t)0xce3, (q15_t)0xcca, (q15_t)0xcb1, (q15_t)0xc98, - (q15_t)0xc7f, (q15_t)0xc66, (q15_t)0xc4d, (q15_t)0xc34, (q15_t)0xc1b, (q15_t)0xc02, (q15_t)0xbe9, (q15_t)0xbd0, - (q15_t)0xbb7, (q15_t)0xb9e, (q15_t)0xb85, (q15_t)0xb6c, (q15_t)0xb53, (q15_t)0xb3a, (q15_t)0xb20, (q15_t)0xb07, - (q15_t)0xaee, (q15_t)0xad5, (q15_t)0xabc, (q15_t)0xaa3, (q15_t)0xa8a, (q15_t)0xa71, (q15_t)0xa58, (q15_t)0xa3f, - (q15_t)0xa26, (q15_t)0xa0d, (q15_t)0x9f4, (q15_t)0x9db, (q15_t)0x9c2, (q15_t)0x9a9, (q15_t)0x990, (q15_t)0x977, - (q15_t)0x95e, (q15_t)0x944, (q15_t)0x92b, (q15_t)0x912, (q15_t)0x8f9, (q15_t)0x8e0, (q15_t)0x8c7, (q15_t)0x8ae, - (q15_t)0x895, (q15_t)0x87c, (q15_t)0x863, (q15_t)0x84a, (q15_t)0x831, (q15_t)0x818, (q15_t)0x7fe, (q15_t)0x7e5, - (q15_t)0x7cc, (q15_t)0x7b3, (q15_t)0x79a, (q15_t)0x781, (q15_t)0x768, (q15_t)0x74f, (q15_t)0x736, (q15_t)0x71d, - (q15_t)0x704, (q15_t)0x6ea, (q15_t)0x6d1, (q15_t)0x6b8, (q15_t)0x69f, (q15_t)0x686, (q15_t)0x66d, (q15_t)0x654, - (q15_t)0x63b, (q15_t)0x622, (q15_t)0x609, (q15_t)0x5ef, (q15_t)0x5d6, (q15_t)0x5bd, (q15_t)0x5a4, (q15_t)0x58b, - (q15_t)0x572, (q15_t)0x559, (q15_t)0x540, (q15_t)0x527, (q15_t)0x50d, (q15_t)0x4f4, (q15_t)0x4db, (q15_t)0x4c2, - (q15_t)0x4a9, (q15_t)0x490, (q15_t)0x477, (q15_t)0x45e, (q15_t)0x445, (q15_t)0x42b, (q15_t)0x412, (q15_t)0x3f9, - (q15_t)0x3e0, (q15_t)0x3c7, (q15_t)0x3ae, (q15_t)0x395, (q15_t)0x37c, (q15_t)0x362, (q15_t)0x349, (q15_t)0x330, - (q15_t)0x317, (q15_t)0x2fe, (q15_t)0x2e5, (q15_t)0x2cc, (q15_t)0x2b3, (q15_t)0x299, (q15_t)0x280, (q15_t)0x267, - (q15_t)0x24e, (q15_t)0x235, (q15_t)0x21c, (q15_t)0x203, (q15_t)0x1ea, (q15_t)0x1d0, (q15_t)0x1b7, (q15_t)0x19e, - (q15_t)0x185, (q15_t)0x16c, (q15_t)0x153, (q15_t)0x13a, (q15_t)0x121, (q15_t)0x107, (q15_t)0xee, (q15_t)0xd5, - (q15_t)0xbc, (q15_t)0xa3, (q15_t)0x8a, (q15_t)0x71, (q15_t)0x57, (q15_t)0x3e, (q15_t)0x25, (q15_t)0xc - -}; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_8192) - const q15_t __ALIGNED(4) WeightsQ15_8192[16384] = { - (q15_t)0x7fff, (q15_t)0x0, (q15_t)0x7fff, (q15_t)0xfffa, (q15_t)0x7fff, (q15_t)0xfff4, (q15_t)0x7fff, (q15_t)0xffee, - (q15_t)0x7fff, (q15_t)0xffe7, (q15_t)0x7fff, (q15_t)0xffe1, (q15_t)0x7fff, (q15_t)0xffdb, (q15_t)0x7fff, (q15_t)0xffd5, - (q15_t)0x7fff, (q15_t)0xffce, (q15_t)0x7fff, (q15_t)0xffc8, (q15_t)0x7fff, (q15_t)0xffc2, (q15_t)0x7fff, (q15_t)0xffbb, - (q15_t)0x7fff, (q15_t)0xffb5, (q15_t)0x7fff, (q15_t)0xffaf, (q15_t)0x7fff, (q15_t)0xffa9, (q15_t)0x7fff, (q15_t)0xffa2, - (q15_t)0x7fff, (q15_t)0xff9c, (q15_t)0x7fff, (q15_t)0xff96, (q15_t)0x7fff, (q15_t)0xff8f, (q15_t)0x7fff, (q15_t)0xff89, - (q15_t)0x7fff, (q15_t)0xff83, (q15_t)0x7fff, (q15_t)0xff7d, (q15_t)0x7fff, (q15_t)0xff76, (q15_t)0x7fff, (q15_t)0xff70, - (q15_t)0x7fff, (q15_t)0xff6a, (q15_t)0x7fff, (q15_t)0xff63, (q15_t)0x7fff, (q15_t)0xff5d, (q15_t)0x7fff, (q15_t)0xff57, - (q15_t)0x7fff, (q15_t)0xff51, (q15_t)0x7fff, (q15_t)0xff4a, (q15_t)0x7fff, (q15_t)0xff44, (q15_t)0x7fff, (q15_t)0xff3e, - (q15_t)0x7fff, (q15_t)0xff37, (q15_t)0x7fff, (q15_t)0xff31, (q15_t)0x7fff, (q15_t)0xff2b, (q15_t)0x7fff, (q15_t)0xff25, - (q15_t)0x7fff, (q15_t)0xff1e, (q15_t)0x7fff, (q15_t)0xff18, (q15_t)0x7fff, (q15_t)0xff12, (q15_t)0x7fff, (q15_t)0xff0b, - (q15_t)0x7fff, (q15_t)0xff05, (q15_t)0x7ffe, (q15_t)0xfeff, (q15_t)0x7ffe, (q15_t)0xfef9, (q15_t)0x7ffe, (q15_t)0xfef2, - (q15_t)0x7ffe, (q15_t)0xfeec, (q15_t)0x7ffe, (q15_t)0xfee6, (q15_t)0x7ffe, (q15_t)0xfedf, (q15_t)0x7ffe, (q15_t)0xfed9, - (q15_t)0x7ffe, (q15_t)0xfed3, (q15_t)0x7ffe, (q15_t)0xfecd, (q15_t)0x7ffe, (q15_t)0xfec6, (q15_t)0x7ffe, (q15_t)0xfec0, - (q15_t)0x7ffe, (q15_t)0xfeba, (q15_t)0x7ffe, (q15_t)0xfeb3, (q15_t)0x7ffe, (q15_t)0xfead, (q15_t)0x7ffe, (q15_t)0xfea7, - (q15_t)0x7ffe, (q15_t)0xfea1, (q15_t)0x7ffe, (q15_t)0xfe9a, (q15_t)0x7ffd, (q15_t)0xfe94, (q15_t)0x7ffd, (q15_t)0xfe8e, - (q15_t)0x7ffd, (q15_t)0xfe88, (q15_t)0x7ffd, (q15_t)0xfe81, (q15_t)0x7ffd, (q15_t)0xfe7b, (q15_t)0x7ffd, (q15_t)0xfe75, - (q15_t)0x7ffd, (q15_t)0xfe6e, (q15_t)0x7ffd, (q15_t)0xfe68, (q15_t)0x7ffd, (q15_t)0xfe62, (q15_t)0x7ffd, (q15_t)0xfe5c, - (q15_t)0x7ffd, (q15_t)0xfe55, (q15_t)0x7ffd, (q15_t)0xfe4f, (q15_t)0x7ffd, (q15_t)0xfe49, (q15_t)0x7ffc, (q15_t)0xfe42, - (q15_t)0x7ffc, (q15_t)0xfe3c, (q15_t)0x7ffc, (q15_t)0xfe36, (q15_t)0x7ffc, (q15_t)0xfe30, (q15_t)0x7ffc, (q15_t)0xfe29, - (q15_t)0x7ffc, (q15_t)0xfe23, (q15_t)0x7ffc, (q15_t)0xfe1d, (q15_t)0x7ffc, (q15_t)0xfe16, (q15_t)0x7ffc, (q15_t)0xfe10, - (q15_t)0x7ffc, (q15_t)0xfe0a, (q15_t)0x7ffc, (q15_t)0xfe04, (q15_t)0x7ffb, (q15_t)0xfdfd, (q15_t)0x7ffb, (q15_t)0xfdf7, - (q15_t)0x7ffb, (q15_t)0xfdf1, (q15_t)0x7ffb, (q15_t)0xfdea, (q15_t)0x7ffb, (q15_t)0xfde4, (q15_t)0x7ffb, (q15_t)0xfdde, - (q15_t)0x7ffb, (q15_t)0xfdd8, (q15_t)0x7ffb, (q15_t)0xfdd1, (q15_t)0x7ffb, (q15_t)0xfdcb, (q15_t)0x7ffb, (q15_t)0xfdc5, - (q15_t)0x7ffa, (q15_t)0xfdbe, (q15_t)0x7ffa, (q15_t)0xfdb8, (q15_t)0x7ffa, (q15_t)0xfdb2, (q15_t)0x7ffa, (q15_t)0xfdac, - (q15_t)0x7ffa, (q15_t)0xfda5, (q15_t)0x7ffa, (q15_t)0xfd9f, (q15_t)0x7ffa, (q15_t)0xfd99, (q15_t)0x7ffa, (q15_t)0xfd93, - (q15_t)0x7ff9, (q15_t)0xfd8c, (q15_t)0x7ff9, (q15_t)0xfd86, (q15_t)0x7ff9, (q15_t)0xfd80, (q15_t)0x7ff9, (q15_t)0xfd79, - (q15_t)0x7ff9, (q15_t)0xfd73, (q15_t)0x7ff9, (q15_t)0xfd6d, (q15_t)0x7ff9, (q15_t)0xfd67, (q15_t)0x7ff9, (q15_t)0xfd60, - (q15_t)0x7ff8, (q15_t)0xfd5a, (q15_t)0x7ff8, (q15_t)0xfd54, (q15_t)0x7ff8, (q15_t)0xfd4d, (q15_t)0x7ff8, (q15_t)0xfd47, - (q15_t)0x7ff8, (q15_t)0xfd41, (q15_t)0x7ff8, (q15_t)0xfd3b, (q15_t)0x7ff8, (q15_t)0xfd34, (q15_t)0x7ff8, (q15_t)0xfd2e, - (q15_t)0x7ff7, (q15_t)0xfd28, (q15_t)0x7ff7, (q15_t)0xfd21, (q15_t)0x7ff7, (q15_t)0xfd1b, (q15_t)0x7ff7, (q15_t)0xfd15, - (q15_t)0x7ff7, (q15_t)0xfd0f, (q15_t)0x7ff7, (q15_t)0xfd08, (q15_t)0x7ff7, (q15_t)0xfd02, (q15_t)0x7ff6, (q15_t)0xfcfc, - (q15_t)0x7ff6, (q15_t)0xfcf5, (q15_t)0x7ff6, (q15_t)0xfcef, (q15_t)0x7ff6, (q15_t)0xfce9, (q15_t)0x7ff6, (q15_t)0xfce3, - (q15_t)0x7ff6, (q15_t)0xfcdc, (q15_t)0x7ff5, (q15_t)0xfcd6, (q15_t)0x7ff5, (q15_t)0xfcd0, (q15_t)0x7ff5, (q15_t)0xfcc9, - (q15_t)0x7ff5, (q15_t)0xfcc3, (q15_t)0x7ff5, (q15_t)0xfcbd, (q15_t)0x7ff5, (q15_t)0xfcb7, (q15_t)0x7ff5, (q15_t)0xfcb0, - (q15_t)0x7ff4, (q15_t)0xfcaa, (q15_t)0x7ff4, (q15_t)0xfca4, (q15_t)0x7ff4, (q15_t)0xfc9e, (q15_t)0x7ff4, (q15_t)0xfc97, - (q15_t)0x7ff4, (q15_t)0xfc91, (q15_t)0x7ff4, (q15_t)0xfc8b, (q15_t)0x7ff3, (q15_t)0xfc84, (q15_t)0x7ff3, (q15_t)0xfc7e, - (q15_t)0x7ff3, (q15_t)0xfc78, (q15_t)0x7ff3, (q15_t)0xfc72, (q15_t)0x7ff3, (q15_t)0xfc6b, (q15_t)0x7ff2, (q15_t)0xfc65, - (q15_t)0x7ff2, (q15_t)0xfc5f, (q15_t)0x7ff2, (q15_t)0xfc58, (q15_t)0x7ff2, (q15_t)0xfc52, (q15_t)0x7ff2, (q15_t)0xfc4c, - (q15_t)0x7ff2, (q15_t)0xfc46, (q15_t)0x7ff1, (q15_t)0xfc3f, (q15_t)0x7ff1, (q15_t)0xfc39, (q15_t)0x7ff1, (q15_t)0xfc33, - (q15_t)0x7ff1, (q15_t)0xfc2c, (q15_t)0x7ff1, (q15_t)0xfc26, (q15_t)0x7ff0, (q15_t)0xfc20, (q15_t)0x7ff0, (q15_t)0xfc1a, - (q15_t)0x7ff0, (q15_t)0xfc13, (q15_t)0x7ff0, (q15_t)0xfc0d, (q15_t)0x7ff0, (q15_t)0xfc07, (q15_t)0x7fef, (q15_t)0xfc01, - (q15_t)0x7fef, (q15_t)0xfbfa, (q15_t)0x7fef, (q15_t)0xfbf4, (q15_t)0x7fef, (q15_t)0xfbee, (q15_t)0x7fef, (q15_t)0xfbe7, - (q15_t)0x7fee, (q15_t)0xfbe1, (q15_t)0x7fee, (q15_t)0xfbdb, (q15_t)0x7fee, (q15_t)0xfbd5, (q15_t)0x7fee, (q15_t)0xfbce, - (q15_t)0x7fee, (q15_t)0xfbc8, (q15_t)0x7fed, (q15_t)0xfbc2, (q15_t)0x7fed, (q15_t)0xfbbb, (q15_t)0x7fed, (q15_t)0xfbb5, - (q15_t)0x7fed, (q15_t)0xfbaf, (q15_t)0x7fed, (q15_t)0xfba9, (q15_t)0x7fec, (q15_t)0xfba2, (q15_t)0x7fec, (q15_t)0xfb9c, - (q15_t)0x7fec, (q15_t)0xfb96, (q15_t)0x7fec, (q15_t)0xfb8f, (q15_t)0x7fec, (q15_t)0xfb89, (q15_t)0x7feb, (q15_t)0xfb83, - (q15_t)0x7feb, (q15_t)0xfb7d, (q15_t)0x7feb, (q15_t)0xfb76, (q15_t)0x7feb, (q15_t)0xfb70, (q15_t)0x7fea, (q15_t)0xfb6a, - (q15_t)0x7fea, (q15_t)0xfb64, (q15_t)0x7fea, (q15_t)0xfb5d, (q15_t)0x7fea, (q15_t)0xfb57, (q15_t)0x7fea, (q15_t)0xfb51, - (q15_t)0x7fe9, (q15_t)0xfb4a, (q15_t)0x7fe9, (q15_t)0xfb44, (q15_t)0x7fe9, (q15_t)0xfb3e, (q15_t)0x7fe9, (q15_t)0xfb38, - (q15_t)0x7fe8, (q15_t)0xfb31, (q15_t)0x7fe8, (q15_t)0xfb2b, (q15_t)0x7fe8, (q15_t)0xfb25, (q15_t)0x7fe8, (q15_t)0xfb1e, - (q15_t)0x7fe7, (q15_t)0xfb18, (q15_t)0x7fe7, (q15_t)0xfb12, (q15_t)0x7fe7, (q15_t)0xfb0c, (q15_t)0x7fe7, (q15_t)0xfb05, - (q15_t)0x7fe6, (q15_t)0xfaff, (q15_t)0x7fe6, (q15_t)0xfaf9, (q15_t)0x7fe6, (q15_t)0xfaf3, (q15_t)0x7fe6, (q15_t)0xfaec, - (q15_t)0x7fe5, (q15_t)0xfae6, (q15_t)0x7fe5, (q15_t)0xfae0, (q15_t)0x7fe5, (q15_t)0xfad9, (q15_t)0x7fe5, (q15_t)0xfad3, - (q15_t)0x7fe4, (q15_t)0xfacd, (q15_t)0x7fe4, (q15_t)0xfac7, (q15_t)0x7fe4, (q15_t)0xfac0, (q15_t)0x7fe4, (q15_t)0xfaba, - (q15_t)0x7fe3, (q15_t)0xfab4, (q15_t)0x7fe3, (q15_t)0xfaad, (q15_t)0x7fe3, (q15_t)0xfaa7, (q15_t)0x7fe3, (q15_t)0xfaa1, - (q15_t)0x7fe2, (q15_t)0xfa9b, (q15_t)0x7fe2, (q15_t)0xfa94, (q15_t)0x7fe2, (q15_t)0xfa8e, (q15_t)0x7fe2, (q15_t)0xfa88, - (q15_t)0x7fe1, (q15_t)0xfa81, (q15_t)0x7fe1, (q15_t)0xfa7b, (q15_t)0x7fe1, (q15_t)0xfa75, (q15_t)0x7fe0, (q15_t)0xfa6f, - (q15_t)0x7fe0, (q15_t)0xfa68, (q15_t)0x7fe0, (q15_t)0xfa62, (q15_t)0x7fe0, (q15_t)0xfa5c, (q15_t)0x7fdf, (q15_t)0xfa56, - (q15_t)0x7fdf, (q15_t)0xfa4f, (q15_t)0x7fdf, (q15_t)0xfa49, (q15_t)0x7fdf, (q15_t)0xfa43, (q15_t)0x7fde, (q15_t)0xfa3c, - (q15_t)0x7fde, (q15_t)0xfa36, (q15_t)0x7fde, (q15_t)0xfa30, (q15_t)0x7fdd, (q15_t)0xfa2a, (q15_t)0x7fdd, (q15_t)0xfa23, - (q15_t)0x7fdd, (q15_t)0xfa1d, (q15_t)0x7fdd, (q15_t)0xfa17, (q15_t)0x7fdc, (q15_t)0xfa11, (q15_t)0x7fdc, (q15_t)0xfa0a, - (q15_t)0x7fdc, (q15_t)0xfa04, (q15_t)0x7fdb, (q15_t)0xf9fe, (q15_t)0x7fdb, (q15_t)0xf9f7, (q15_t)0x7fdb, (q15_t)0xf9f1, - (q15_t)0x7fda, (q15_t)0xf9eb, (q15_t)0x7fda, (q15_t)0xf9e5, (q15_t)0x7fda, (q15_t)0xf9de, (q15_t)0x7fda, (q15_t)0xf9d8, - (q15_t)0x7fd9, (q15_t)0xf9d2, (q15_t)0x7fd9, (q15_t)0xf9cb, (q15_t)0x7fd9, (q15_t)0xf9c5, (q15_t)0x7fd8, (q15_t)0xf9bf, - (q15_t)0x7fd8, (q15_t)0xf9b9, (q15_t)0x7fd8, (q15_t)0xf9b2, (q15_t)0x7fd7, (q15_t)0xf9ac, (q15_t)0x7fd7, (q15_t)0xf9a6, - (q15_t)0x7fd7, (q15_t)0xf9a0, (q15_t)0x7fd6, (q15_t)0xf999, (q15_t)0x7fd6, (q15_t)0xf993, (q15_t)0x7fd6, (q15_t)0xf98d, - (q15_t)0x7fd6, (q15_t)0xf986, (q15_t)0x7fd5, (q15_t)0xf980, (q15_t)0x7fd5, (q15_t)0xf97a, (q15_t)0x7fd5, (q15_t)0xf974, - (q15_t)0x7fd4, (q15_t)0xf96d, (q15_t)0x7fd4, (q15_t)0xf967, (q15_t)0x7fd4, (q15_t)0xf961, (q15_t)0x7fd3, (q15_t)0xf95b, - (q15_t)0x7fd3, (q15_t)0xf954, (q15_t)0x7fd3, (q15_t)0xf94e, (q15_t)0x7fd2, (q15_t)0xf948, (q15_t)0x7fd2, (q15_t)0xf941, - (q15_t)0x7fd2, (q15_t)0xf93b, (q15_t)0x7fd1, (q15_t)0xf935, (q15_t)0x7fd1, (q15_t)0xf92f, (q15_t)0x7fd1, (q15_t)0xf928, - (q15_t)0x7fd0, (q15_t)0xf922, (q15_t)0x7fd0, (q15_t)0xf91c, (q15_t)0x7fd0, (q15_t)0xf916, (q15_t)0x7fcf, (q15_t)0xf90f, - (q15_t)0x7fcf, (q15_t)0xf909, (q15_t)0x7fcf, (q15_t)0xf903, (q15_t)0x7fce, (q15_t)0xf8fc, (q15_t)0x7fce, (q15_t)0xf8f6, - (q15_t)0x7fce, (q15_t)0xf8f0, (q15_t)0x7fcd, (q15_t)0xf8ea, (q15_t)0x7fcd, (q15_t)0xf8e3, (q15_t)0x7fcd, (q15_t)0xf8dd, - (q15_t)0x7fcc, (q15_t)0xf8d7, (q15_t)0x7fcc, (q15_t)0xf8d0, (q15_t)0x7fcb, (q15_t)0xf8ca, (q15_t)0x7fcb, (q15_t)0xf8c4, - (q15_t)0x7fcb, (q15_t)0xf8be, (q15_t)0x7fca, (q15_t)0xf8b7, (q15_t)0x7fca, (q15_t)0xf8b1, (q15_t)0x7fca, (q15_t)0xf8ab, - (q15_t)0x7fc9, (q15_t)0xf8a5, (q15_t)0x7fc9, (q15_t)0xf89e, (q15_t)0x7fc9, (q15_t)0xf898, (q15_t)0x7fc8, (q15_t)0xf892, - (q15_t)0x7fc8, (q15_t)0xf88b, (q15_t)0x7fc7, (q15_t)0xf885, (q15_t)0x7fc7, (q15_t)0xf87f, (q15_t)0x7fc7, (q15_t)0xf879, - (q15_t)0x7fc6, (q15_t)0xf872, (q15_t)0x7fc6, (q15_t)0xf86c, (q15_t)0x7fc6, (q15_t)0xf866, (q15_t)0x7fc5, (q15_t)0xf860, - (q15_t)0x7fc5, (q15_t)0xf859, (q15_t)0x7fc5, (q15_t)0xf853, (q15_t)0x7fc4, (q15_t)0xf84d, (q15_t)0x7fc4, (q15_t)0xf846, - (q15_t)0x7fc3, (q15_t)0xf840, (q15_t)0x7fc3, (q15_t)0xf83a, (q15_t)0x7fc3, (q15_t)0xf834, (q15_t)0x7fc2, (q15_t)0xf82d, - (q15_t)0x7fc2, (q15_t)0xf827, (q15_t)0x7fc1, (q15_t)0xf821, (q15_t)0x7fc1, (q15_t)0xf81b, (q15_t)0x7fc1, (q15_t)0xf814, - (q15_t)0x7fc0, (q15_t)0xf80e, (q15_t)0x7fc0, (q15_t)0xf808, (q15_t)0x7fc0, (q15_t)0xf802, (q15_t)0x7fbf, (q15_t)0xf7fb, - (q15_t)0x7fbf, (q15_t)0xf7f5, (q15_t)0x7fbe, (q15_t)0xf7ef, (q15_t)0x7fbe, (q15_t)0xf7e8, (q15_t)0x7fbe, (q15_t)0xf7e2, - (q15_t)0x7fbd, (q15_t)0xf7dc, (q15_t)0x7fbd, (q15_t)0xf7d6, (q15_t)0x7fbc, (q15_t)0xf7cf, (q15_t)0x7fbc, (q15_t)0xf7c9, - (q15_t)0x7fbc, (q15_t)0xf7c3, (q15_t)0x7fbb, (q15_t)0xf7bd, (q15_t)0x7fbb, (q15_t)0xf7b6, (q15_t)0x7fba, (q15_t)0xf7b0, - (q15_t)0x7fba, (q15_t)0xf7aa, (q15_t)0x7fb9, (q15_t)0xf7a3, (q15_t)0x7fb9, (q15_t)0xf79d, (q15_t)0x7fb9, (q15_t)0xf797, - (q15_t)0x7fb8, (q15_t)0xf791, (q15_t)0x7fb8, (q15_t)0xf78a, (q15_t)0x7fb7, (q15_t)0xf784, (q15_t)0x7fb7, (q15_t)0xf77e, - (q15_t)0x7fb7, (q15_t)0xf778, (q15_t)0x7fb6, (q15_t)0xf771, (q15_t)0x7fb6, (q15_t)0xf76b, (q15_t)0x7fb5, (q15_t)0xf765, - (q15_t)0x7fb5, (q15_t)0xf75e, (q15_t)0x7fb4, (q15_t)0xf758, (q15_t)0x7fb4, (q15_t)0xf752, (q15_t)0x7fb4, (q15_t)0xf74c, - (q15_t)0x7fb3, (q15_t)0xf745, (q15_t)0x7fb3, (q15_t)0xf73f, (q15_t)0x7fb2, (q15_t)0xf739, (q15_t)0x7fb2, (q15_t)0xf733, - (q15_t)0x7fb1, (q15_t)0xf72c, (q15_t)0x7fb1, (q15_t)0xf726, (q15_t)0x7fb1, (q15_t)0xf720, (q15_t)0x7fb0, (q15_t)0xf71a, - (q15_t)0x7fb0, (q15_t)0xf713, (q15_t)0x7faf, (q15_t)0xf70d, (q15_t)0x7faf, (q15_t)0xf707, (q15_t)0x7fae, (q15_t)0xf700, - (q15_t)0x7fae, (q15_t)0xf6fa, (q15_t)0x7fae, (q15_t)0xf6f4, (q15_t)0x7fad, (q15_t)0xf6ee, (q15_t)0x7fad, (q15_t)0xf6e7, - (q15_t)0x7fac, (q15_t)0xf6e1, (q15_t)0x7fac, (q15_t)0xf6db, (q15_t)0x7fab, (q15_t)0xf6d5, (q15_t)0x7fab, (q15_t)0xf6ce, - (q15_t)0x7faa, (q15_t)0xf6c8, (q15_t)0x7faa, (q15_t)0xf6c2, (q15_t)0x7fa9, (q15_t)0xf6bc, (q15_t)0x7fa9, (q15_t)0xf6b5, - (q15_t)0x7fa9, (q15_t)0xf6af, (q15_t)0x7fa8, (q15_t)0xf6a9, (q15_t)0x7fa8, (q15_t)0xf6a2, (q15_t)0x7fa7, (q15_t)0xf69c, - (q15_t)0x7fa7, (q15_t)0xf696, (q15_t)0x7fa6, (q15_t)0xf690, (q15_t)0x7fa6, (q15_t)0xf689, (q15_t)0x7fa5, (q15_t)0xf683, - (q15_t)0x7fa5, (q15_t)0xf67d, (q15_t)0x7fa4, (q15_t)0xf677, (q15_t)0x7fa4, (q15_t)0xf670, (q15_t)0x7fa3, (q15_t)0xf66a, - (q15_t)0x7fa3, (q15_t)0xf664, (q15_t)0x7fa3, (q15_t)0xf65e, (q15_t)0x7fa2, (q15_t)0xf657, (q15_t)0x7fa2, (q15_t)0xf651, - (q15_t)0x7fa1, (q15_t)0xf64b, (q15_t)0x7fa1, (q15_t)0xf644, (q15_t)0x7fa0, (q15_t)0xf63e, (q15_t)0x7fa0, (q15_t)0xf638, - (q15_t)0x7f9f, (q15_t)0xf632, (q15_t)0x7f9f, (q15_t)0xf62b, (q15_t)0x7f9e, (q15_t)0xf625, (q15_t)0x7f9e, (q15_t)0xf61f, - (q15_t)0x7f9d, (q15_t)0xf619, (q15_t)0x7f9d, (q15_t)0xf612, (q15_t)0x7f9c, (q15_t)0xf60c, (q15_t)0x7f9c, (q15_t)0xf606, - (q15_t)0x7f9b, (q15_t)0xf600, (q15_t)0x7f9b, (q15_t)0xf5f9, (q15_t)0x7f9a, (q15_t)0xf5f3, (q15_t)0x7f9a, (q15_t)0xf5ed, - (q15_t)0x7f99, (q15_t)0xf5e7, (q15_t)0x7f99, (q15_t)0xf5e0, (q15_t)0x7f98, (q15_t)0xf5da, (q15_t)0x7f98, (q15_t)0xf5d4, - (q15_t)0x7f97, (q15_t)0xf5cd, (q15_t)0x7f97, (q15_t)0xf5c7, (q15_t)0x7f96, (q15_t)0xf5c1, (q15_t)0x7f96, (q15_t)0xf5bb, - (q15_t)0x7f95, (q15_t)0xf5b4, (q15_t)0x7f95, (q15_t)0xf5ae, (q15_t)0x7f94, (q15_t)0xf5a8, (q15_t)0x7f94, (q15_t)0xf5a2, - (q15_t)0x7f93, (q15_t)0xf59b, (q15_t)0x7f93, (q15_t)0xf595, (q15_t)0x7f92, (q15_t)0xf58f, (q15_t)0x7f92, (q15_t)0xf589, - (q15_t)0x7f91, (q15_t)0xf582, (q15_t)0x7f91, (q15_t)0xf57c, (q15_t)0x7f90, (q15_t)0xf576, (q15_t)0x7f90, (q15_t)0xf570, - (q15_t)0x7f8f, (q15_t)0xf569, (q15_t)0x7f8f, (q15_t)0xf563, (q15_t)0x7f8e, (q15_t)0xf55d, (q15_t)0x7f8e, (q15_t)0xf556, - (q15_t)0x7f8d, (q15_t)0xf550, (q15_t)0x7f8d, (q15_t)0xf54a, (q15_t)0x7f8c, (q15_t)0xf544, (q15_t)0x7f8b, (q15_t)0xf53d, - (q15_t)0x7f8b, (q15_t)0xf537, (q15_t)0x7f8a, (q15_t)0xf531, (q15_t)0x7f8a, (q15_t)0xf52b, (q15_t)0x7f89, (q15_t)0xf524, - (q15_t)0x7f89, (q15_t)0xf51e, (q15_t)0x7f88, (q15_t)0xf518, (q15_t)0x7f88, (q15_t)0xf512, (q15_t)0x7f87, (q15_t)0xf50b, - (q15_t)0x7f87, (q15_t)0xf505, (q15_t)0x7f86, (q15_t)0xf4ff, (q15_t)0x7f86, (q15_t)0xf4f9, (q15_t)0x7f85, (q15_t)0xf4f2, - (q15_t)0x7f85, (q15_t)0xf4ec, (q15_t)0x7f84, (q15_t)0xf4e6, (q15_t)0x7f83, (q15_t)0xf4e0, (q15_t)0x7f83, (q15_t)0xf4d9, - (q15_t)0x7f82, (q15_t)0xf4d3, (q15_t)0x7f82, (q15_t)0xf4cd, (q15_t)0x7f81, (q15_t)0xf4c6, (q15_t)0x7f81, (q15_t)0xf4c0, - (q15_t)0x7f80, (q15_t)0xf4ba, (q15_t)0x7f80, (q15_t)0xf4b4, (q15_t)0x7f7f, (q15_t)0xf4ad, (q15_t)0x7f7e, (q15_t)0xf4a7, - (q15_t)0x7f7e, (q15_t)0xf4a1, (q15_t)0x7f7d, (q15_t)0xf49b, (q15_t)0x7f7d, (q15_t)0xf494, (q15_t)0x7f7c, (q15_t)0xf48e, - (q15_t)0x7f7c, (q15_t)0xf488, (q15_t)0x7f7b, (q15_t)0xf482, (q15_t)0x7f7b, (q15_t)0xf47b, (q15_t)0x7f7a, (q15_t)0xf475, - (q15_t)0x7f79, (q15_t)0xf46f, (q15_t)0x7f79, (q15_t)0xf469, (q15_t)0x7f78, (q15_t)0xf462, (q15_t)0x7f78, (q15_t)0xf45c, - (q15_t)0x7f77, (q15_t)0xf456, (q15_t)0x7f77, (q15_t)0xf450, (q15_t)0x7f76, (q15_t)0xf449, (q15_t)0x7f75, (q15_t)0xf443, - (q15_t)0x7f75, (q15_t)0xf43d, (q15_t)0x7f74, (q15_t)0xf437, (q15_t)0x7f74, (q15_t)0xf430, (q15_t)0x7f73, (q15_t)0xf42a, - (q15_t)0x7f72, (q15_t)0xf424, (q15_t)0x7f72, (q15_t)0xf41e, (q15_t)0x7f71, (q15_t)0xf417, (q15_t)0x7f71, (q15_t)0xf411, - (q15_t)0x7f70, (q15_t)0xf40b, (q15_t)0x7f70, (q15_t)0xf405, (q15_t)0x7f6f, (q15_t)0xf3fe, (q15_t)0x7f6e, (q15_t)0xf3f8, - (q15_t)0x7f6e, (q15_t)0xf3f2, (q15_t)0x7f6d, (q15_t)0xf3ec, (q15_t)0x7f6d, (q15_t)0xf3e5, (q15_t)0x7f6c, (q15_t)0xf3df, - (q15_t)0x7f6b, (q15_t)0xf3d9, (q15_t)0x7f6b, (q15_t)0xf3d2, (q15_t)0x7f6a, (q15_t)0xf3cc, (q15_t)0x7f6a, (q15_t)0xf3c6, - (q15_t)0x7f69, (q15_t)0xf3c0, (q15_t)0x7f68, (q15_t)0xf3b9, (q15_t)0x7f68, (q15_t)0xf3b3, (q15_t)0x7f67, (q15_t)0xf3ad, - (q15_t)0x7f67, (q15_t)0xf3a7, (q15_t)0x7f66, (q15_t)0xf3a0, (q15_t)0x7f65, (q15_t)0xf39a, (q15_t)0x7f65, (q15_t)0xf394, - (q15_t)0x7f64, (q15_t)0xf38e, (q15_t)0x7f64, (q15_t)0xf387, (q15_t)0x7f63, (q15_t)0xf381, (q15_t)0x7f62, (q15_t)0xf37b, - (q15_t)0x7f62, (q15_t)0xf375, (q15_t)0x7f61, (q15_t)0xf36e, (q15_t)0x7f60, (q15_t)0xf368, (q15_t)0x7f60, (q15_t)0xf362, - (q15_t)0x7f5f, (q15_t)0xf35c, (q15_t)0x7f5f, (q15_t)0xf355, (q15_t)0x7f5e, (q15_t)0xf34f, (q15_t)0x7f5d, (q15_t)0xf349, - (q15_t)0x7f5d, (q15_t)0xf343, (q15_t)0x7f5c, (q15_t)0xf33c, (q15_t)0x7f5b, (q15_t)0xf336, (q15_t)0x7f5b, (q15_t)0xf330, - (q15_t)0x7f5a, (q15_t)0xf32a, (q15_t)0x7f5a, (q15_t)0xf323, (q15_t)0x7f59, (q15_t)0xf31d, (q15_t)0x7f58, (q15_t)0xf317, - (q15_t)0x7f58, (q15_t)0xf311, (q15_t)0x7f57, (q15_t)0xf30a, (q15_t)0x7f56, (q15_t)0xf304, (q15_t)0x7f56, (q15_t)0xf2fe, - (q15_t)0x7f55, (q15_t)0xf2f8, (q15_t)0x7f55, (q15_t)0xf2f1, (q15_t)0x7f54, (q15_t)0xf2eb, (q15_t)0x7f53, (q15_t)0xf2e5, - (q15_t)0x7f53, (q15_t)0xf2df, (q15_t)0x7f52, (q15_t)0xf2d8, (q15_t)0x7f51, (q15_t)0xf2d2, (q15_t)0x7f51, (q15_t)0xf2cc, - (q15_t)0x7f50, (q15_t)0xf2c6, (q15_t)0x7f4f, (q15_t)0xf2bf, (q15_t)0x7f4f, (q15_t)0xf2b9, (q15_t)0x7f4e, (q15_t)0xf2b3, - (q15_t)0x7f4d, (q15_t)0xf2ad, (q15_t)0x7f4d, (q15_t)0xf2a6, (q15_t)0x7f4c, (q15_t)0xf2a0, (q15_t)0x7f4b, (q15_t)0xf29a, - (q15_t)0x7f4b, (q15_t)0xf294, (q15_t)0x7f4a, (q15_t)0xf28d, (q15_t)0x7f49, (q15_t)0xf287, (q15_t)0x7f49, (q15_t)0xf281, - (q15_t)0x7f48, (q15_t)0xf27b, (q15_t)0x7f47, (q15_t)0xf274, (q15_t)0x7f47, (q15_t)0xf26e, (q15_t)0x7f46, (q15_t)0xf268, - (q15_t)0x7f45, (q15_t)0xf262, (q15_t)0x7f45, (q15_t)0xf25b, (q15_t)0x7f44, (q15_t)0xf255, (q15_t)0x7f43, (q15_t)0xf24f, - (q15_t)0x7f43, (q15_t)0xf249, (q15_t)0x7f42, (q15_t)0xf242, (q15_t)0x7f41, (q15_t)0xf23c, (q15_t)0x7f41, (q15_t)0xf236, - (q15_t)0x7f40, (q15_t)0xf230, (q15_t)0x7f3f, (q15_t)0xf229, (q15_t)0x7f3f, (q15_t)0xf223, (q15_t)0x7f3e, (q15_t)0xf21d, - (q15_t)0x7f3d, (q15_t)0xf217, (q15_t)0x7f3d, (q15_t)0xf210, (q15_t)0x7f3c, (q15_t)0xf20a, (q15_t)0x7f3b, (q15_t)0xf204, - (q15_t)0x7f3b, (q15_t)0xf1fe, (q15_t)0x7f3a, (q15_t)0xf1f7, (q15_t)0x7f39, (q15_t)0xf1f1, (q15_t)0x7f39, (q15_t)0xf1eb, - (q15_t)0x7f38, (q15_t)0xf1e5, (q15_t)0x7f37, (q15_t)0xf1de, (q15_t)0x7f36, (q15_t)0xf1d8, (q15_t)0x7f36, (q15_t)0xf1d2, - (q15_t)0x7f35, (q15_t)0xf1cc, (q15_t)0x7f34, (q15_t)0xf1c6, (q15_t)0x7f34, (q15_t)0xf1bf, (q15_t)0x7f33, (q15_t)0xf1b9, - (q15_t)0x7f32, (q15_t)0xf1b3, (q15_t)0x7f32, (q15_t)0xf1ad, (q15_t)0x7f31, (q15_t)0xf1a6, (q15_t)0x7f30, (q15_t)0xf1a0, - (q15_t)0x7f2f, (q15_t)0xf19a, (q15_t)0x7f2f, (q15_t)0xf194, (q15_t)0x7f2e, (q15_t)0xf18d, (q15_t)0x7f2d, (q15_t)0xf187, - (q15_t)0x7f2d, (q15_t)0xf181, (q15_t)0x7f2c, (q15_t)0xf17b, (q15_t)0x7f2b, (q15_t)0xf174, (q15_t)0x7f2a, (q15_t)0xf16e, - (q15_t)0x7f2a, (q15_t)0xf168, (q15_t)0x7f29, (q15_t)0xf162, (q15_t)0x7f28, (q15_t)0xf15b, (q15_t)0x7f28, (q15_t)0xf155, - (q15_t)0x7f27, (q15_t)0xf14f, (q15_t)0x7f26, (q15_t)0xf149, (q15_t)0x7f25, (q15_t)0xf142, (q15_t)0x7f25, (q15_t)0xf13c, - (q15_t)0x7f24, (q15_t)0xf136, (q15_t)0x7f23, (q15_t)0xf130, (q15_t)0x7f23, (q15_t)0xf129, (q15_t)0x7f22, (q15_t)0xf123, - (q15_t)0x7f21, (q15_t)0xf11d, (q15_t)0x7f20, (q15_t)0xf117, (q15_t)0x7f20, (q15_t)0xf110, (q15_t)0x7f1f, (q15_t)0xf10a, - (q15_t)0x7f1e, (q15_t)0xf104, (q15_t)0x7f1d, (q15_t)0xf0fe, (q15_t)0x7f1d, (q15_t)0xf0f8, (q15_t)0x7f1c, (q15_t)0xf0f1, - (q15_t)0x7f1b, (q15_t)0xf0eb, (q15_t)0x7f1a, (q15_t)0xf0e5, (q15_t)0x7f1a, (q15_t)0xf0df, (q15_t)0x7f19, (q15_t)0xf0d8, - (q15_t)0x7f18, (q15_t)0xf0d2, (q15_t)0x7f17, (q15_t)0xf0cc, (q15_t)0x7f17, (q15_t)0xf0c6, (q15_t)0x7f16, (q15_t)0xf0bf, - (q15_t)0x7f15, (q15_t)0xf0b9, (q15_t)0x7f14, (q15_t)0xf0b3, (q15_t)0x7f14, (q15_t)0xf0ad, (q15_t)0x7f13, (q15_t)0xf0a6, - (q15_t)0x7f12, (q15_t)0xf0a0, (q15_t)0x7f11, (q15_t)0xf09a, (q15_t)0x7f11, (q15_t)0xf094, (q15_t)0x7f10, (q15_t)0xf08d, - (q15_t)0x7f0f, (q15_t)0xf087, (q15_t)0x7f0e, (q15_t)0xf081, (q15_t)0x7f0e, (q15_t)0xf07b, (q15_t)0x7f0d, (q15_t)0xf075, - (q15_t)0x7f0c, (q15_t)0xf06e, (q15_t)0x7f0b, (q15_t)0xf068, (q15_t)0x7f0b, (q15_t)0xf062, (q15_t)0x7f0a, (q15_t)0xf05c, - (q15_t)0x7f09, (q15_t)0xf055, (q15_t)0x7f08, (q15_t)0xf04f, (q15_t)0x7f08, (q15_t)0xf049, (q15_t)0x7f07, (q15_t)0xf043, - (q15_t)0x7f06, (q15_t)0xf03c, (q15_t)0x7f05, (q15_t)0xf036, (q15_t)0x7f04, (q15_t)0xf030, (q15_t)0x7f04, (q15_t)0xf02a, - (q15_t)0x7f03, (q15_t)0xf023, (q15_t)0x7f02, (q15_t)0xf01d, (q15_t)0x7f01, (q15_t)0xf017, (q15_t)0x7f01, (q15_t)0xf011, - (q15_t)0x7f00, (q15_t)0xf00b, (q15_t)0x7eff, (q15_t)0xf004, (q15_t)0x7efe, (q15_t)0xeffe, (q15_t)0x7efd, (q15_t)0xeff8, - (q15_t)0x7efd, (q15_t)0xeff2, (q15_t)0x7efc, (q15_t)0xefeb, (q15_t)0x7efb, (q15_t)0xefe5, (q15_t)0x7efa, (q15_t)0xefdf, - (q15_t)0x7ef9, (q15_t)0xefd9, (q15_t)0x7ef9, (q15_t)0xefd2, (q15_t)0x7ef8, (q15_t)0xefcc, (q15_t)0x7ef7, (q15_t)0xefc6, - (q15_t)0x7ef6, (q15_t)0xefc0, (q15_t)0x7ef5, (q15_t)0xefb9, (q15_t)0x7ef5, (q15_t)0xefb3, (q15_t)0x7ef4, (q15_t)0xefad, - (q15_t)0x7ef3, (q15_t)0xefa7, (q15_t)0x7ef2, (q15_t)0xefa1, (q15_t)0x7ef1, (q15_t)0xef9a, (q15_t)0x7ef1, (q15_t)0xef94, - (q15_t)0x7ef0, (q15_t)0xef8e, (q15_t)0x7eef, (q15_t)0xef88, (q15_t)0x7eee, (q15_t)0xef81, (q15_t)0x7eed, (q15_t)0xef7b, - (q15_t)0x7eed, (q15_t)0xef75, (q15_t)0x7eec, (q15_t)0xef6f, (q15_t)0x7eeb, (q15_t)0xef68, (q15_t)0x7eea, (q15_t)0xef62, - (q15_t)0x7ee9, (q15_t)0xef5c, (q15_t)0x7ee9, (q15_t)0xef56, (q15_t)0x7ee8, (q15_t)0xef50, (q15_t)0x7ee7, (q15_t)0xef49, - (q15_t)0x7ee6, (q15_t)0xef43, (q15_t)0x7ee5, (q15_t)0xef3d, (q15_t)0x7ee4, (q15_t)0xef37, (q15_t)0x7ee4, (q15_t)0xef30, - (q15_t)0x7ee3, (q15_t)0xef2a, (q15_t)0x7ee2, (q15_t)0xef24, (q15_t)0x7ee1, (q15_t)0xef1e, (q15_t)0x7ee0, (q15_t)0xef18, - (q15_t)0x7edf, (q15_t)0xef11, (q15_t)0x7edf, (q15_t)0xef0b, (q15_t)0x7ede, (q15_t)0xef05, (q15_t)0x7edd, (q15_t)0xeeff, - (q15_t)0x7edc, (q15_t)0xeef8, (q15_t)0x7edb, (q15_t)0xeef2, (q15_t)0x7eda, (q15_t)0xeeec, (q15_t)0x7eda, (q15_t)0xeee6, - (q15_t)0x7ed9, (q15_t)0xeedf, (q15_t)0x7ed8, (q15_t)0xeed9, (q15_t)0x7ed7, (q15_t)0xeed3, (q15_t)0x7ed6, (q15_t)0xeecd, - (q15_t)0x7ed5, (q15_t)0xeec7, (q15_t)0x7ed5, (q15_t)0xeec0, (q15_t)0x7ed4, (q15_t)0xeeba, (q15_t)0x7ed3, (q15_t)0xeeb4, - (q15_t)0x7ed2, (q15_t)0xeeae, (q15_t)0x7ed1, (q15_t)0xeea7, (q15_t)0x7ed0, (q15_t)0xeea1, (q15_t)0x7ecf, (q15_t)0xee9b, - (q15_t)0x7ecf, (q15_t)0xee95, (q15_t)0x7ece, (q15_t)0xee8f, (q15_t)0x7ecd, (q15_t)0xee88, (q15_t)0x7ecc, (q15_t)0xee82, - (q15_t)0x7ecb, (q15_t)0xee7c, (q15_t)0x7eca, (q15_t)0xee76, (q15_t)0x7ec9, (q15_t)0xee6f, (q15_t)0x7ec9, (q15_t)0xee69, - (q15_t)0x7ec8, (q15_t)0xee63, (q15_t)0x7ec7, (q15_t)0xee5d, (q15_t)0x7ec6, (q15_t)0xee57, (q15_t)0x7ec5, (q15_t)0xee50, - (q15_t)0x7ec4, (q15_t)0xee4a, (q15_t)0x7ec3, (q15_t)0xee44, (q15_t)0x7ec3, (q15_t)0xee3e, (q15_t)0x7ec2, (q15_t)0xee37, - (q15_t)0x7ec1, (q15_t)0xee31, (q15_t)0x7ec0, (q15_t)0xee2b, (q15_t)0x7ebf, (q15_t)0xee25, (q15_t)0x7ebe, (q15_t)0xee1f, - (q15_t)0x7ebd, (q15_t)0xee18, (q15_t)0x7ebc, (q15_t)0xee12, (q15_t)0x7ebb, (q15_t)0xee0c, (q15_t)0x7ebb, (q15_t)0xee06, - (q15_t)0x7eba, (q15_t)0xedff, (q15_t)0x7eb9, (q15_t)0xedf9, (q15_t)0x7eb8, (q15_t)0xedf3, (q15_t)0x7eb7, (q15_t)0xeded, - (q15_t)0x7eb6, (q15_t)0xede7, (q15_t)0x7eb5, (q15_t)0xede0, (q15_t)0x7eb4, (q15_t)0xedda, (q15_t)0x7eb4, (q15_t)0xedd4, - (q15_t)0x7eb3, (q15_t)0xedce, (q15_t)0x7eb2, (q15_t)0xedc7, (q15_t)0x7eb1, (q15_t)0xedc1, (q15_t)0x7eb0, (q15_t)0xedbb, - (q15_t)0x7eaf, (q15_t)0xedb5, (q15_t)0x7eae, (q15_t)0xedaf, (q15_t)0x7ead, (q15_t)0xeda8, (q15_t)0x7eac, (q15_t)0xeda2, - (q15_t)0x7eab, (q15_t)0xed9c, (q15_t)0x7eab, (q15_t)0xed96, (q15_t)0x7eaa, (q15_t)0xed8f, (q15_t)0x7ea9, (q15_t)0xed89, - (q15_t)0x7ea8, (q15_t)0xed83, (q15_t)0x7ea7, (q15_t)0xed7d, (q15_t)0x7ea6, (q15_t)0xed77, (q15_t)0x7ea5, (q15_t)0xed70, - (q15_t)0x7ea4, (q15_t)0xed6a, (q15_t)0x7ea3, (q15_t)0xed64, (q15_t)0x7ea2, (q15_t)0xed5e, (q15_t)0x7ea1, (q15_t)0xed58, - (q15_t)0x7ea1, (q15_t)0xed51, (q15_t)0x7ea0, (q15_t)0xed4b, (q15_t)0x7e9f, (q15_t)0xed45, (q15_t)0x7e9e, (q15_t)0xed3f, - (q15_t)0x7e9d, (q15_t)0xed38, (q15_t)0x7e9c, (q15_t)0xed32, (q15_t)0x7e9b, (q15_t)0xed2c, (q15_t)0x7e9a, (q15_t)0xed26, - (q15_t)0x7e99, (q15_t)0xed20, (q15_t)0x7e98, (q15_t)0xed19, (q15_t)0x7e97, (q15_t)0xed13, (q15_t)0x7e96, (q15_t)0xed0d, - (q15_t)0x7e95, (q15_t)0xed07, (q15_t)0x7e94, (q15_t)0xed01, (q15_t)0x7e94, (q15_t)0xecfa, (q15_t)0x7e93, (q15_t)0xecf4, - (q15_t)0x7e92, (q15_t)0xecee, (q15_t)0x7e91, (q15_t)0xece8, (q15_t)0x7e90, (q15_t)0xece1, (q15_t)0x7e8f, (q15_t)0xecdb, - (q15_t)0x7e8e, (q15_t)0xecd5, (q15_t)0x7e8d, (q15_t)0xeccf, (q15_t)0x7e8c, (q15_t)0xecc9, (q15_t)0x7e8b, (q15_t)0xecc2, - (q15_t)0x7e8a, (q15_t)0xecbc, (q15_t)0x7e89, (q15_t)0xecb6, (q15_t)0x7e88, (q15_t)0xecb0, (q15_t)0x7e87, (q15_t)0xecaa, - (q15_t)0x7e86, (q15_t)0xeca3, (q15_t)0x7e85, (q15_t)0xec9d, (q15_t)0x7e84, (q15_t)0xec97, (q15_t)0x7e84, (q15_t)0xec91, - (q15_t)0x7e83, (q15_t)0xec8a, (q15_t)0x7e82, (q15_t)0xec84, (q15_t)0x7e81, (q15_t)0xec7e, (q15_t)0x7e80, (q15_t)0xec78, - (q15_t)0x7e7f, (q15_t)0xec72, (q15_t)0x7e7e, (q15_t)0xec6b, (q15_t)0x7e7d, (q15_t)0xec65, (q15_t)0x7e7c, (q15_t)0xec5f, - (q15_t)0x7e7b, (q15_t)0xec59, (q15_t)0x7e7a, (q15_t)0xec53, (q15_t)0x7e79, (q15_t)0xec4c, (q15_t)0x7e78, (q15_t)0xec46, - (q15_t)0x7e77, (q15_t)0xec40, (q15_t)0x7e76, (q15_t)0xec3a, (q15_t)0x7e75, (q15_t)0xec34, (q15_t)0x7e74, (q15_t)0xec2d, - (q15_t)0x7e73, (q15_t)0xec27, (q15_t)0x7e72, (q15_t)0xec21, (q15_t)0x7e71, (q15_t)0xec1b, (q15_t)0x7e70, (q15_t)0xec15, - (q15_t)0x7e6f, (q15_t)0xec0e, (q15_t)0x7e6e, (q15_t)0xec08, (q15_t)0x7e6d, (q15_t)0xec02, (q15_t)0x7e6c, (q15_t)0xebfc, - (q15_t)0x7e6b, (q15_t)0xebf5, (q15_t)0x7e6a, (q15_t)0xebef, (q15_t)0x7e69, (q15_t)0xebe9, (q15_t)0x7e68, (q15_t)0xebe3, - (q15_t)0x7e67, (q15_t)0xebdd, (q15_t)0x7e66, (q15_t)0xebd6, (q15_t)0x7e65, (q15_t)0xebd0, (q15_t)0x7e64, (q15_t)0xebca, - (q15_t)0x7e63, (q15_t)0xebc4, (q15_t)0x7e62, (q15_t)0xebbe, (q15_t)0x7e61, (q15_t)0xebb7, (q15_t)0x7e60, (q15_t)0xebb1, - (q15_t)0x7e5f, (q15_t)0xebab, (q15_t)0x7e5e, (q15_t)0xeba5, (q15_t)0x7e5d, (q15_t)0xeb9f, (q15_t)0x7e5c, (q15_t)0xeb98, - (q15_t)0x7e5b, (q15_t)0xeb92, (q15_t)0x7e5a, (q15_t)0xeb8c, (q15_t)0x7e59, (q15_t)0xeb86, (q15_t)0x7e58, (q15_t)0xeb80, - (q15_t)0x7e57, (q15_t)0xeb79, (q15_t)0x7e56, (q15_t)0xeb73, (q15_t)0x7e55, (q15_t)0xeb6d, (q15_t)0x7e54, (q15_t)0xeb67, - (q15_t)0x7e53, (q15_t)0xeb61, (q15_t)0x7e52, (q15_t)0xeb5a, (q15_t)0x7e51, (q15_t)0xeb54, (q15_t)0x7e50, (q15_t)0xeb4e, - (q15_t)0x7e4f, (q15_t)0xeb48, (q15_t)0x7e4e, (q15_t)0xeb42, (q15_t)0x7e4d, (q15_t)0xeb3b, (q15_t)0x7e4c, (q15_t)0xeb35, - (q15_t)0x7e4b, (q15_t)0xeb2f, (q15_t)0x7e4a, (q15_t)0xeb29, (q15_t)0x7e49, (q15_t)0xeb23, (q15_t)0x7e48, (q15_t)0xeb1c, - (q15_t)0x7e47, (q15_t)0xeb16, (q15_t)0x7e46, (q15_t)0xeb10, (q15_t)0x7e45, (q15_t)0xeb0a, (q15_t)0x7e44, (q15_t)0xeb04, - (q15_t)0x7e43, (q15_t)0xeafd, (q15_t)0x7e42, (q15_t)0xeaf7, (q15_t)0x7e41, (q15_t)0xeaf1, (q15_t)0x7e40, (q15_t)0xeaeb, - (q15_t)0x7e3f, (q15_t)0xeae5, (q15_t)0x7e3e, (q15_t)0xeade, (q15_t)0x7e3d, (q15_t)0xead8, (q15_t)0x7e3c, (q15_t)0xead2, - (q15_t)0x7e3b, (q15_t)0xeacc, (q15_t)0x7e3a, (q15_t)0xeac6, (q15_t)0x7e39, (q15_t)0xeabf, (q15_t)0x7e38, (q15_t)0xeab9, - (q15_t)0x7e37, (q15_t)0xeab3, (q15_t)0x7e35, (q15_t)0xeaad, (q15_t)0x7e34, (q15_t)0xeaa7, (q15_t)0x7e33, (q15_t)0xeaa0, - (q15_t)0x7e32, (q15_t)0xea9a, (q15_t)0x7e31, (q15_t)0xea94, (q15_t)0x7e30, (q15_t)0xea8e, (q15_t)0x7e2f, (q15_t)0xea88, - (q15_t)0x7e2e, (q15_t)0xea81, (q15_t)0x7e2d, (q15_t)0xea7b, (q15_t)0x7e2c, (q15_t)0xea75, (q15_t)0x7e2b, (q15_t)0xea6f, - (q15_t)0x7e2a, (q15_t)0xea69, (q15_t)0x7e29, (q15_t)0xea63, (q15_t)0x7e28, (q15_t)0xea5c, (q15_t)0x7e27, (q15_t)0xea56, - (q15_t)0x7e26, (q15_t)0xea50, (q15_t)0x7e25, (q15_t)0xea4a, (q15_t)0x7e24, (q15_t)0xea44, (q15_t)0x7e22, (q15_t)0xea3d, - (q15_t)0x7e21, (q15_t)0xea37, (q15_t)0x7e20, (q15_t)0xea31, (q15_t)0x7e1f, (q15_t)0xea2b, (q15_t)0x7e1e, (q15_t)0xea25, - (q15_t)0x7e1d, (q15_t)0xea1e, (q15_t)0x7e1c, (q15_t)0xea18, (q15_t)0x7e1b, (q15_t)0xea12, (q15_t)0x7e1a, (q15_t)0xea0c, - (q15_t)0x7e19, (q15_t)0xea06, (q15_t)0x7e18, (q15_t)0xe9ff, (q15_t)0x7e17, (q15_t)0xe9f9, (q15_t)0x7e16, (q15_t)0xe9f3, - (q15_t)0x7e14, (q15_t)0xe9ed, (q15_t)0x7e13, (q15_t)0xe9e7, (q15_t)0x7e12, (q15_t)0xe9e1, (q15_t)0x7e11, (q15_t)0xe9da, - (q15_t)0x7e10, (q15_t)0xe9d4, (q15_t)0x7e0f, (q15_t)0xe9ce, (q15_t)0x7e0e, (q15_t)0xe9c8, (q15_t)0x7e0d, (q15_t)0xe9c2, - (q15_t)0x7e0c, (q15_t)0xe9bb, (q15_t)0x7e0b, (q15_t)0xe9b5, (q15_t)0x7e0a, (q15_t)0xe9af, (q15_t)0x7e08, (q15_t)0xe9a9, - (q15_t)0x7e07, (q15_t)0xe9a3, (q15_t)0x7e06, (q15_t)0xe99c, (q15_t)0x7e05, (q15_t)0xe996, (q15_t)0x7e04, (q15_t)0xe990, - (q15_t)0x7e03, (q15_t)0xe98a, (q15_t)0x7e02, (q15_t)0xe984, (q15_t)0x7e01, (q15_t)0xe97e, (q15_t)0x7e00, (q15_t)0xe977, - (q15_t)0x7dff, (q15_t)0xe971, (q15_t)0x7dfd, (q15_t)0xe96b, (q15_t)0x7dfc, (q15_t)0xe965, (q15_t)0x7dfb, (q15_t)0xe95f, - (q15_t)0x7dfa, (q15_t)0xe958, (q15_t)0x7df9, (q15_t)0xe952, (q15_t)0x7df8, (q15_t)0xe94c, (q15_t)0x7df7, (q15_t)0xe946, - (q15_t)0x7df6, (q15_t)0xe940, (q15_t)0x7df5, (q15_t)0xe93a, (q15_t)0x7df3, (q15_t)0xe933, (q15_t)0x7df2, (q15_t)0xe92d, - (q15_t)0x7df1, (q15_t)0xe927, (q15_t)0x7df0, (q15_t)0xe921, (q15_t)0x7def, (q15_t)0xe91b, (q15_t)0x7dee, (q15_t)0xe914, - (q15_t)0x7ded, (q15_t)0xe90e, (q15_t)0x7dec, (q15_t)0xe908, (q15_t)0x7dea, (q15_t)0xe902, (q15_t)0x7de9, (q15_t)0xe8fc, - (q15_t)0x7de8, (q15_t)0xe8f6, (q15_t)0x7de7, (q15_t)0xe8ef, (q15_t)0x7de6, (q15_t)0xe8e9, (q15_t)0x7de5, (q15_t)0xe8e3, - (q15_t)0x7de4, (q15_t)0xe8dd, (q15_t)0x7de2, (q15_t)0xe8d7, (q15_t)0x7de1, (q15_t)0xe8d0, (q15_t)0x7de0, (q15_t)0xe8ca, - (q15_t)0x7ddf, (q15_t)0xe8c4, (q15_t)0x7dde, (q15_t)0xe8be, (q15_t)0x7ddd, (q15_t)0xe8b8, (q15_t)0x7ddc, (q15_t)0xe8b2, - (q15_t)0x7dda, (q15_t)0xe8ab, (q15_t)0x7dd9, (q15_t)0xe8a5, (q15_t)0x7dd8, (q15_t)0xe89f, (q15_t)0x7dd7, (q15_t)0xe899, - (q15_t)0x7dd6, (q15_t)0xe893, (q15_t)0x7dd5, (q15_t)0xe88c, (q15_t)0x7dd4, (q15_t)0xe886, (q15_t)0x7dd2, (q15_t)0xe880, - (q15_t)0x7dd1, (q15_t)0xe87a, (q15_t)0x7dd0, (q15_t)0xe874, (q15_t)0x7dcf, (q15_t)0xe86e, (q15_t)0x7dce, (q15_t)0xe867, - (q15_t)0x7dcd, (q15_t)0xe861, (q15_t)0x7dcc, (q15_t)0xe85b, (q15_t)0x7dca, (q15_t)0xe855, (q15_t)0x7dc9, (q15_t)0xe84f, - (q15_t)0x7dc8, (q15_t)0xe849, (q15_t)0x7dc7, (q15_t)0xe842, (q15_t)0x7dc6, (q15_t)0xe83c, (q15_t)0x7dc5, (q15_t)0xe836, - (q15_t)0x7dc3, (q15_t)0xe830, (q15_t)0x7dc2, (q15_t)0xe82a, (q15_t)0x7dc1, (q15_t)0xe823, (q15_t)0x7dc0, (q15_t)0xe81d, - (q15_t)0x7dbf, (q15_t)0xe817, (q15_t)0x7dbd, (q15_t)0xe811, (q15_t)0x7dbc, (q15_t)0xe80b, (q15_t)0x7dbb, (q15_t)0xe805, - (q15_t)0x7dba, (q15_t)0xe7fe, (q15_t)0x7db9, (q15_t)0xe7f8, (q15_t)0x7db8, (q15_t)0xe7f2, (q15_t)0x7db6, (q15_t)0xe7ec, - (q15_t)0x7db5, (q15_t)0xe7e6, (q15_t)0x7db4, (q15_t)0xe7e0, (q15_t)0x7db3, (q15_t)0xe7d9, (q15_t)0x7db2, (q15_t)0xe7d3, - (q15_t)0x7db0, (q15_t)0xe7cd, (q15_t)0x7daf, (q15_t)0xe7c7, (q15_t)0x7dae, (q15_t)0xe7c1, (q15_t)0x7dad, (q15_t)0xe7bb, - (q15_t)0x7dac, (q15_t)0xe7b4, (q15_t)0x7dab, (q15_t)0xe7ae, (q15_t)0x7da9, (q15_t)0xe7a8, (q15_t)0x7da8, (q15_t)0xe7a2, - (q15_t)0x7da7, (q15_t)0xe79c, (q15_t)0x7da6, (q15_t)0xe796, (q15_t)0x7da5, (q15_t)0xe78f, (q15_t)0x7da3, (q15_t)0xe789, - (q15_t)0x7da2, (q15_t)0xe783, (q15_t)0x7da1, (q15_t)0xe77d, (q15_t)0x7da0, (q15_t)0xe777, (q15_t)0x7d9f, (q15_t)0xe771, - (q15_t)0x7d9d, (q15_t)0xe76a, (q15_t)0x7d9c, (q15_t)0xe764, (q15_t)0x7d9b, (q15_t)0xe75e, (q15_t)0x7d9a, (q15_t)0xe758, - (q15_t)0x7d98, (q15_t)0xe752, (q15_t)0x7d97, (q15_t)0xe74c, (q15_t)0x7d96, (q15_t)0xe745, (q15_t)0x7d95, (q15_t)0xe73f, - (q15_t)0x7d94, (q15_t)0xe739, (q15_t)0x7d92, (q15_t)0xe733, (q15_t)0x7d91, (q15_t)0xe72d, (q15_t)0x7d90, (q15_t)0xe727, - (q15_t)0x7d8f, (q15_t)0xe720, (q15_t)0x7d8e, (q15_t)0xe71a, (q15_t)0x7d8c, (q15_t)0xe714, (q15_t)0x7d8b, (q15_t)0xe70e, - (q15_t)0x7d8a, (q15_t)0xe708, (q15_t)0x7d89, (q15_t)0xe702, (q15_t)0x7d87, (q15_t)0xe6fb, (q15_t)0x7d86, (q15_t)0xe6f5, - (q15_t)0x7d85, (q15_t)0xe6ef, (q15_t)0x7d84, (q15_t)0xe6e9, (q15_t)0x7d82, (q15_t)0xe6e3, (q15_t)0x7d81, (q15_t)0xe6dd, - (q15_t)0x7d80, (q15_t)0xe6d6, (q15_t)0x7d7f, (q15_t)0xe6d0, (q15_t)0x7d7e, (q15_t)0xe6ca, (q15_t)0x7d7c, (q15_t)0xe6c4, - (q15_t)0x7d7b, (q15_t)0xe6be, (q15_t)0x7d7a, (q15_t)0xe6b8, (q15_t)0x7d79, (q15_t)0xe6b2, (q15_t)0x7d77, (q15_t)0xe6ab, - (q15_t)0x7d76, (q15_t)0xe6a5, (q15_t)0x7d75, (q15_t)0xe69f, (q15_t)0x7d74, (q15_t)0xe699, (q15_t)0x7d72, (q15_t)0xe693, - (q15_t)0x7d71, (q15_t)0xe68d, (q15_t)0x7d70, (q15_t)0xe686, (q15_t)0x7d6f, (q15_t)0xe680, (q15_t)0x7d6d, (q15_t)0xe67a, - (q15_t)0x7d6c, (q15_t)0xe674, (q15_t)0x7d6b, (q15_t)0xe66e, (q15_t)0x7d6a, (q15_t)0xe668, (q15_t)0x7d68, (q15_t)0xe661, - (q15_t)0x7d67, (q15_t)0xe65b, (q15_t)0x7d66, (q15_t)0xe655, (q15_t)0x7d65, (q15_t)0xe64f, (q15_t)0x7d63, (q15_t)0xe649, - (q15_t)0x7d62, (q15_t)0xe643, (q15_t)0x7d61, (q15_t)0xe63d, (q15_t)0x7d60, (q15_t)0xe636, (q15_t)0x7d5e, (q15_t)0xe630, - (q15_t)0x7d5d, (q15_t)0xe62a, (q15_t)0x7d5c, (q15_t)0xe624, (q15_t)0x7d5a, (q15_t)0xe61e, (q15_t)0x7d59, (q15_t)0xe618, - (q15_t)0x7d58, (q15_t)0xe611, (q15_t)0x7d57, (q15_t)0xe60b, (q15_t)0x7d55, (q15_t)0xe605, (q15_t)0x7d54, (q15_t)0xe5ff, - (q15_t)0x7d53, (q15_t)0xe5f9, (q15_t)0x7d52, (q15_t)0xe5f3, (q15_t)0x7d50, (q15_t)0xe5ed, (q15_t)0x7d4f, (q15_t)0xe5e6, - (q15_t)0x7d4e, (q15_t)0xe5e0, (q15_t)0x7d4c, (q15_t)0xe5da, (q15_t)0x7d4b, (q15_t)0xe5d4, (q15_t)0x7d4a, (q15_t)0xe5ce, - (q15_t)0x7d49, (q15_t)0xe5c8, (q15_t)0x7d47, (q15_t)0xe5c2, (q15_t)0x7d46, (q15_t)0xe5bb, (q15_t)0x7d45, (q15_t)0xe5b5, - (q15_t)0x7d43, (q15_t)0xe5af, (q15_t)0x7d42, (q15_t)0xe5a9, (q15_t)0x7d41, (q15_t)0xe5a3, (q15_t)0x7d3f, (q15_t)0xe59d, - (q15_t)0x7d3e, (q15_t)0xe596, (q15_t)0x7d3d, (q15_t)0xe590, (q15_t)0x7d3c, (q15_t)0xe58a, (q15_t)0x7d3a, (q15_t)0xe584, - (q15_t)0x7d39, (q15_t)0xe57e, (q15_t)0x7d38, (q15_t)0xe578, (q15_t)0x7d36, (q15_t)0xe572, (q15_t)0x7d35, (q15_t)0xe56b, - (q15_t)0x7d34, (q15_t)0xe565, (q15_t)0x7d32, (q15_t)0xe55f, (q15_t)0x7d31, (q15_t)0xe559, (q15_t)0x7d30, (q15_t)0xe553, - (q15_t)0x7d2f, (q15_t)0xe54d, (q15_t)0x7d2d, (q15_t)0xe547, (q15_t)0x7d2c, (q15_t)0xe540, (q15_t)0x7d2b, (q15_t)0xe53a, - (q15_t)0x7d29, (q15_t)0xe534, (q15_t)0x7d28, (q15_t)0xe52e, (q15_t)0x7d27, (q15_t)0xe528, (q15_t)0x7d25, (q15_t)0xe522, - (q15_t)0x7d24, (q15_t)0xe51c, (q15_t)0x7d23, (q15_t)0xe515, (q15_t)0x7d21, (q15_t)0xe50f, (q15_t)0x7d20, (q15_t)0xe509, - (q15_t)0x7d1f, (q15_t)0xe503, (q15_t)0x7d1d, (q15_t)0xe4fd, (q15_t)0x7d1c, (q15_t)0xe4f7, (q15_t)0x7d1b, (q15_t)0xe4f1, - (q15_t)0x7d19, (q15_t)0xe4ea, (q15_t)0x7d18, (q15_t)0xe4e4, (q15_t)0x7d17, (q15_t)0xe4de, (q15_t)0x7d15, (q15_t)0xe4d8, - (q15_t)0x7d14, (q15_t)0xe4d2, (q15_t)0x7d13, (q15_t)0xe4cc, (q15_t)0x7d11, (q15_t)0xe4c6, (q15_t)0x7d10, (q15_t)0xe4bf, - (q15_t)0x7d0f, (q15_t)0xe4b9, (q15_t)0x7d0d, (q15_t)0xe4b3, (q15_t)0x7d0c, (q15_t)0xe4ad, (q15_t)0x7d0b, (q15_t)0xe4a7, - (q15_t)0x7d09, (q15_t)0xe4a1, (q15_t)0x7d08, (q15_t)0xe49b, (q15_t)0x7d07, (q15_t)0xe494, (q15_t)0x7d05, (q15_t)0xe48e, - (q15_t)0x7d04, (q15_t)0xe488, (q15_t)0x7d03, (q15_t)0xe482, (q15_t)0x7d01, (q15_t)0xe47c, (q15_t)0x7d00, (q15_t)0xe476, - (q15_t)0x7cff, (q15_t)0xe470, (q15_t)0x7cfd, (q15_t)0xe46a, (q15_t)0x7cfc, (q15_t)0xe463, (q15_t)0x7cfb, (q15_t)0xe45d, - (q15_t)0x7cf9, (q15_t)0xe457, (q15_t)0x7cf8, (q15_t)0xe451, (q15_t)0x7cf6, (q15_t)0xe44b, (q15_t)0x7cf5, (q15_t)0xe445, - (q15_t)0x7cf4, (q15_t)0xe43f, (q15_t)0x7cf2, (q15_t)0xe438, (q15_t)0x7cf1, (q15_t)0xe432, (q15_t)0x7cf0, (q15_t)0xe42c, - (q15_t)0x7cee, (q15_t)0xe426, (q15_t)0x7ced, (q15_t)0xe420, (q15_t)0x7cec, (q15_t)0xe41a, (q15_t)0x7cea, (q15_t)0xe414, - (q15_t)0x7ce9, (q15_t)0xe40e, (q15_t)0x7ce7, (q15_t)0xe407, (q15_t)0x7ce6, (q15_t)0xe401, (q15_t)0x7ce5, (q15_t)0xe3fb, - (q15_t)0x7ce3, (q15_t)0xe3f5, (q15_t)0x7ce2, (q15_t)0xe3ef, (q15_t)0x7ce1, (q15_t)0xe3e9, (q15_t)0x7cdf, (q15_t)0xe3e3, - (q15_t)0x7cde, (q15_t)0xe3dc, (q15_t)0x7cdc, (q15_t)0xe3d6, (q15_t)0x7cdb, (q15_t)0xe3d0, (q15_t)0x7cda, (q15_t)0xe3ca, - (q15_t)0x7cd8, (q15_t)0xe3c4, (q15_t)0x7cd7, (q15_t)0xe3be, (q15_t)0x7cd5, (q15_t)0xe3b8, (q15_t)0x7cd4, (q15_t)0xe3b2, - (q15_t)0x7cd3, (q15_t)0xe3ab, (q15_t)0x7cd1, (q15_t)0xe3a5, (q15_t)0x7cd0, (q15_t)0xe39f, (q15_t)0x7ccf, (q15_t)0xe399, - (q15_t)0x7ccd, (q15_t)0xe393, (q15_t)0x7ccc, (q15_t)0xe38d, (q15_t)0x7cca, (q15_t)0xe387, (q15_t)0x7cc9, (q15_t)0xe381, - (q15_t)0x7cc8, (q15_t)0xe37a, (q15_t)0x7cc6, (q15_t)0xe374, (q15_t)0x7cc5, (q15_t)0xe36e, (q15_t)0x7cc3, (q15_t)0xe368, - (q15_t)0x7cc2, (q15_t)0xe362, (q15_t)0x7cc1, (q15_t)0xe35c, (q15_t)0x7cbf, (q15_t)0xe356, (q15_t)0x7cbe, (q15_t)0xe350, - (q15_t)0x7cbc, (q15_t)0xe349, (q15_t)0x7cbb, (q15_t)0xe343, (q15_t)0x7cb9, (q15_t)0xe33d, (q15_t)0x7cb8, (q15_t)0xe337, - (q15_t)0x7cb7, (q15_t)0xe331, (q15_t)0x7cb5, (q15_t)0xe32b, (q15_t)0x7cb4, (q15_t)0xe325, (q15_t)0x7cb2, (q15_t)0xe31f, - (q15_t)0x7cb1, (q15_t)0xe318, (q15_t)0x7cb0, (q15_t)0xe312, (q15_t)0x7cae, (q15_t)0xe30c, (q15_t)0x7cad, (q15_t)0xe306, - (q15_t)0x7cab, (q15_t)0xe300, (q15_t)0x7caa, (q15_t)0xe2fa, (q15_t)0x7ca8, (q15_t)0xe2f4, (q15_t)0x7ca7, (q15_t)0xe2ee, - (q15_t)0x7ca6, (q15_t)0xe2e8, (q15_t)0x7ca4, (q15_t)0xe2e1, (q15_t)0x7ca3, (q15_t)0xe2db, (q15_t)0x7ca1, (q15_t)0xe2d5, - (q15_t)0x7ca0, (q15_t)0xe2cf, (q15_t)0x7c9e, (q15_t)0xe2c9, (q15_t)0x7c9d, (q15_t)0xe2c3, (q15_t)0x7c9c, (q15_t)0xe2bd, - (q15_t)0x7c9a, (q15_t)0xe2b7, (q15_t)0x7c99, (q15_t)0xe2b0, (q15_t)0x7c97, (q15_t)0xe2aa, (q15_t)0x7c96, (q15_t)0xe2a4, - (q15_t)0x7c94, (q15_t)0xe29e, (q15_t)0x7c93, (q15_t)0xe298, (q15_t)0x7c91, (q15_t)0xe292, (q15_t)0x7c90, (q15_t)0xe28c, - (q15_t)0x7c8f, (q15_t)0xe286, (q15_t)0x7c8d, (q15_t)0xe280, (q15_t)0x7c8c, (q15_t)0xe279, (q15_t)0x7c8a, (q15_t)0xe273, - (q15_t)0x7c89, (q15_t)0xe26d, (q15_t)0x7c87, (q15_t)0xe267, (q15_t)0x7c86, (q15_t)0xe261, (q15_t)0x7c84, (q15_t)0xe25b, - (q15_t)0x7c83, (q15_t)0xe255, (q15_t)0x7c82, (q15_t)0xe24f, (q15_t)0x7c80, (q15_t)0xe249, (q15_t)0x7c7f, (q15_t)0xe242, - (q15_t)0x7c7d, (q15_t)0xe23c, (q15_t)0x7c7c, (q15_t)0xe236, (q15_t)0x7c7a, (q15_t)0xe230, (q15_t)0x7c79, (q15_t)0xe22a, - (q15_t)0x7c77, (q15_t)0xe224, (q15_t)0x7c76, (q15_t)0xe21e, (q15_t)0x7c74, (q15_t)0xe218, (q15_t)0x7c73, (q15_t)0xe212, - (q15_t)0x7c71, (q15_t)0xe20b, (q15_t)0x7c70, (q15_t)0xe205, (q15_t)0x7c6e, (q15_t)0xe1ff, (q15_t)0x7c6d, (q15_t)0xe1f9, - (q15_t)0x7c6c, (q15_t)0xe1f3, (q15_t)0x7c6a, (q15_t)0xe1ed, (q15_t)0x7c69, (q15_t)0xe1e7, (q15_t)0x7c67, (q15_t)0xe1e1, - (q15_t)0x7c66, (q15_t)0xe1db, (q15_t)0x7c64, (q15_t)0xe1d4, (q15_t)0x7c63, (q15_t)0xe1ce, (q15_t)0x7c61, (q15_t)0xe1c8, - (q15_t)0x7c60, (q15_t)0xe1c2, (q15_t)0x7c5e, (q15_t)0xe1bc, (q15_t)0x7c5d, (q15_t)0xe1b6, (q15_t)0x7c5b, (q15_t)0xe1b0, - (q15_t)0x7c5a, (q15_t)0xe1aa, (q15_t)0x7c58, (q15_t)0xe1a4, (q15_t)0x7c57, (q15_t)0xe19e, (q15_t)0x7c55, (q15_t)0xe197, - (q15_t)0x7c54, (q15_t)0xe191, (q15_t)0x7c52, (q15_t)0xe18b, (q15_t)0x7c51, (q15_t)0xe185, (q15_t)0x7c4f, (q15_t)0xe17f, - (q15_t)0x7c4e, (q15_t)0xe179, (q15_t)0x7c4c, (q15_t)0xe173, (q15_t)0x7c4b, (q15_t)0xe16d, (q15_t)0x7c49, (q15_t)0xe167, - (q15_t)0x7c48, (q15_t)0xe160, (q15_t)0x7c46, (q15_t)0xe15a, (q15_t)0x7c45, (q15_t)0xe154, (q15_t)0x7c43, (q15_t)0xe14e, - (q15_t)0x7c42, (q15_t)0xe148, (q15_t)0x7c40, (q15_t)0xe142, (q15_t)0x7c3f, (q15_t)0xe13c, (q15_t)0x7c3d, (q15_t)0xe136, - (q15_t)0x7c3c, (q15_t)0xe130, (q15_t)0x7c3a, (q15_t)0xe12a, (q15_t)0x7c39, (q15_t)0xe123, (q15_t)0x7c37, (q15_t)0xe11d, - (q15_t)0x7c36, (q15_t)0xe117, (q15_t)0x7c34, (q15_t)0xe111, (q15_t)0x7c33, (q15_t)0xe10b, (q15_t)0x7c31, (q15_t)0xe105, - (q15_t)0x7c30, (q15_t)0xe0ff, (q15_t)0x7c2e, (q15_t)0xe0f9, (q15_t)0x7c2d, (q15_t)0xe0f3, (q15_t)0x7c2b, (q15_t)0xe0ed, - (q15_t)0x7c29, (q15_t)0xe0e7, (q15_t)0x7c28, (q15_t)0xe0e0, (q15_t)0x7c26, (q15_t)0xe0da, (q15_t)0x7c25, (q15_t)0xe0d4, - (q15_t)0x7c23, (q15_t)0xe0ce, (q15_t)0x7c22, (q15_t)0xe0c8, (q15_t)0x7c20, (q15_t)0xe0c2, (q15_t)0x7c1f, (q15_t)0xe0bc, - (q15_t)0x7c1d, (q15_t)0xe0b6, (q15_t)0x7c1c, (q15_t)0xe0b0, (q15_t)0x7c1a, (q15_t)0xe0aa, (q15_t)0x7c19, (q15_t)0xe0a3, - (q15_t)0x7c17, (q15_t)0xe09d, (q15_t)0x7c16, (q15_t)0xe097, (q15_t)0x7c14, (q15_t)0xe091, (q15_t)0x7c12, (q15_t)0xe08b, - (q15_t)0x7c11, (q15_t)0xe085, (q15_t)0x7c0f, (q15_t)0xe07f, (q15_t)0x7c0e, (q15_t)0xe079, (q15_t)0x7c0c, (q15_t)0xe073, - (q15_t)0x7c0b, (q15_t)0xe06d, (q15_t)0x7c09, (q15_t)0xe067, (q15_t)0x7c08, (q15_t)0xe061, (q15_t)0x7c06, (q15_t)0xe05a, - (q15_t)0x7c05, (q15_t)0xe054, (q15_t)0x7c03, (q15_t)0xe04e, (q15_t)0x7c01, (q15_t)0xe048, (q15_t)0x7c00, (q15_t)0xe042, - (q15_t)0x7bfe, (q15_t)0xe03c, (q15_t)0x7bfd, (q15_t)0xe036, (q15_t)0x7bfb, (q15_t)0xe030, (q15_t)0x7bfa, (q15_t)0xe02a, - (q15_t)0x7bf8, (q15_t)0xe024, (q15_t)0x7bf6, (q15_t)0xe01e, (q15_t)0x7bf5, (q15_t)0xe017, (q15_t)0x7bf3, (q15_t)0xe011, - (q15_t)0x7bf2, (q15_t)0xe00b, (q15_t)0x7bf0, (q15_t)0xe005, (q15_t)0x7bef, (q15_t)0xdfff, (q15_t)0x7bed, (q15_t)0xdff9, - (q15_t)0x7beb, (q15_t)0xdff3, (q15_t)0x7bea, (q15_t)0xdfed, (q15_t)0x7be8, (q15_t)0xdfe7, (q15_t)0x7be7, (q15_t)0xdfe1, - (q15_t)0x7be5, (q15_t)0xdfdb, (q15_t)0x7be4, (q15_t)0xdfd5, (q15_t)0x7be2, (q15_t)0xdfce, (q15_t)0x7be0, (q15_t)0xdfc8, - (q15_t)0x7bdf, (q15_t)0xdfc2, (q15_t)0x7bdd, (q15_t)0xdfbc, (q15_t)0x7bdc, (q15_t)0xdfb6, (q15_t)0x7bda, (q15_t)0xdfb0, - (q15_t)0x7bd9, (q15_t)0xdfaa, (q15_t)0x7bd7, (q15_t)0xdfa4, (q15_t)0x7bd5, (q15_t)0xdf9e, (q15_t)0x7bd4, (q15_t)0xdf98, - (q15_t)0x7bd2, (q15_t)0xdf92, (q15_t)0x7bd1, (q15_t)0xdf8c, (q15_t)0x7bcf, (q15_t)0xdf86, (q15_t)0x7bcd, (q15_t)0xdf7f, - (q15_t)0x7bcc, (q15_t)0xdf79, (q15_t)0x7bca, (q15_t)0xdf73, (q15_t)0x7bc9, (q15_t)0xdf6d, (q15_t)0x7bc7, (q15_t)0xdf67, - (q15_t)0x7bc5, (q15_t)0xdf61, (q15_t)0x7bc4, (q15_t)0xdf5b, (q15_t)0x7bc2, (q15_t)0xdf55, (q15_t)0x7bc1, (q15_t)0xdf4f, - (q15_t)0x7bbf, (q15_t)0xdf49, (q15_t)0x7bbd, (q15_t)0xdf43, (q15_t)0x7bbc, (q15_t)0xdf3d, (q15_t)0x7bba, (q15_t)0xdf37, - (q15_t)0x7bb9, (q15_t)0xdf30, (q15_t)0x7bb7, (q15_t)0xdf2a, (q15_t)0x7bb5, (q15_t)0xdf24, (q15_t)0x7bb4, (q15_t)0xdf1e, - (q15_t)0x7bb2, (q15_t)0xdf18, (q15_t)0x7bb0, (q15_t)0xdf12, (q15_t)0x7baf, (q15_t)0xdf0c, (q15_t)0x7bad, (q15_t)0xdf06, - (q15_t)0x7bac, (q15_t)0xdf00, (q15_t)0x7baa, (q15_t)0xdefa, (q15_t)0x7ba8, (q15_t)0xdef4, (q15_t)0x7ba7, (q15_t)0xdeee, - (q15_t)0x7ba5, (q15_t)0xdee8, (q15_t)0x7ba3, (q15_t)0xdee2, (q15_t)0x7ba2, (q15_t)0xdedb, (q15_t)0x7ba0, (q15_t)0xded5, - (q15_t)0x7b9f, (q15_t)0xdecf, (q15_t)0x7b9d, (q15_t)0xdec9, (q15_t)0x7b9b, (q15_t)0xdec3, (q15_t)0x7b9a, (q15_t)0xdebd, - (q15_t)0x7b98, (q15_t)0xdeb7, (q15_t)0x7b96, (q15_t)0xdeb1, (q15_t)0x7b95, (q15_t)0xdeab, (q15_t)0x7b93, (q15_t)0xdea5, - (q15_t)0x7b92, (q15_t)0xde9f, (q15_t)0x7b90, (q15_t)0xde99, (q15_t)0x7b8e, (q15_t)0xde93, (q15_t)0x7b8d, (q15_t)0xde8d, - (q15_t)0x7b8b, (q15_t)0xde87, (q15_t)0x7b89, (q15_t)0xde80, (q15_t)0x7b88, (q15_t)0xde7a, (q15_t)0x7b86, (q15_t)0xde74, - (q15_t)0x7b84, (q15_t)0xde6e, (q15_t)0x7b83, (q15_t)0xde68, (q15_t)0x7b81, (q15_t)0xde62, (q15_t)0x7b7f, (q15_t)0xde5c, - (q15_t)0x7b7e, (q15_t)0xde56, (q15_t)0x7b7c, (q15_t)0xde50, (q15_t)0x7b7a, (q15_t)0xde4a, (q15_t)0x7b79, (q15_t)0xde44, - (q15_t)0x7b77, (q15_t)0xde3e, (q15_t)0x7b76, (q15_t)0xde38, (q15_t)0x7b74, (q15_t)0xde32, (q15_t)0x7b72, (q15_t)0xde2c, - (q15_t)0x7b71, (q15_t)0xde26, (q15_t)0x7b6f, (q15_t)0xde1f, (q15_t)0x7b6d, (q15_t)0xde19, (q15_t)0x7b6c, (q15_t)0xde13, - (q15_t)0x7b6a, (q15_t)0xde0d, (q15_t)0x7b68, (q15_t)0xde07, (q15_t)0x7b67, (q15_t)0xde01, (q15_t)0x7b65, (q15_t)0xddfb, - (q15_t)0x7b63, (q15_t)0xddf5, (q15_t)0x7b62, (q15_t)0xddef, (q15_t)0x7b60, (q15_t)0xdde9, (q15_t)0x7b5e, (q15_t)0xdde3, - (q15_t)0x7b5d, (q15_t)0xdddd, (q15_t)0x7b5b, (q15_t)0xddd7, (q15_t)0x7b59, (q15_t)0xddd1, (q15_t)0x7b57, (q15_t)0xddcb, - (q15_t)0x7b56, (q15_t)0xddc5, (q15_t)0x7b54, (q15_t)0xddbf, (q15_t)0x7b52, (q15_t)0xddb9, (q15_t)0x7b51, (q15_t)0xddb2, - (q15_t)0x7b4f, (q15_t)0xddac, (q15_t)0x7b4d, (q15_t)0xdda6, (q15_t)0x7b4c, (q15_t)0xdda0, (q15_t)0x7b4a, (q15_t)0xdd9a, - (q15_t)0x7b48, (q15_t)0xdd94, (q15_t)0x7b47, (q15_t)0xdd8e, (q15_t)0x7b45, (q15_t)0xdd88, (q15_t)0x7b43, (q15_t)0xdd82, - (q15_t)0x7b42, (q15_t)0xdd7c, (q15_t)0x7b40, (q15_t)0xdd76, (q15_t)0x7b3e, (q15_t)0xdd70, (q15_t)0x7b3c, (q15_t)0xdd6a, - (q15_t)0x7b3b, (q15_t)0xdd64, (q15_t)0x7b39, (q15_t)0xdd5e, (q15_t)0x7b37, (q15_t)0xdd58, (q15_t)0x7b36, (q15_t)0xdd52, - (q15_t)0x7b34, (q15_t)0xdd4c, (q15_t)0x7b32, (q15_t)0xdd46, (q15_t)0x7b31, (q15_t)0xdd40, (q15_t)0x7b2f, (q15_t)0xdd39, - (q15_t)0x7b2d, (q15_t)0xdd33, (q15_t)0x7b2b, (q15_t)0xdd2d, (q15_t)0x7b2a, (q15_t)0xdd27, (q15_t)0x7b28, (q15_t)0xdd21, - (q15_t)0x7b26, (q15_t)0xdd1b, (q15_t)0x7b25, (q15_t)0xdd15, (q15_t)0x7b23, (q15_t)0xdd0f, (q15_t)0x7b21, (q15_t)0xdd09, - (q15_t)0x7b1f, (q15_t)0xdd03, (q15_t)0x7b1e, (q15_t)0xdcfd, (q15_t)0x7b1c, (q15_t)0xdcf7, (q15_t)0x7b1a, (q15_t)0xdcf1, - (q15_t)0x7b19, (q15_t)0xdceb, (q15_t)0x7b17, (q15_t)0xdce5, (q15_t)0x7b15, (q15_t)0xdcdf, (q15_t)0x7b13, (q15_t)0xdcd9, - (q15_t)0x7b12, (q15_t)0xdcd3, (q15_t)0x7b10, (q15_t)0xdccd, (q15_t)0x7b0e, (q15_t)0xdcc7, (q15_t)0x7b0c, (q15_t)0xdcc1, - (q15_t)0x7b0b, (q15_t)0xdcbb, (q15_t)0x7b09, (q15_t)0xdcb5, (q15_t)0x7b07, (q15_t)0xdcae, (q15_t)0x7b06, (q15_t)0xdca8, - (q15_t)0x7b04, (q15_t)0xdca2, (q15_t)0x7b02, (q15_t)0xdc9c, (q15_t)0x7b00, (q15_t)0xdc96, (q15_t)0x7aff, (q15_t)0xdc90, - (q15_t)0x7afd, (q15_t)0xdc8a, (q15_t)0x7afb, (q15_t)0xdc84, (q15_t)0x7af9, (q15_t)0xdc7e, (q15_t)0x7af8, (q15_t)0xdc78, - (q15_t)0x7af6, (q15_t)0xdc72, (q15_t)0x7af4, (q15_t)0xdc6c, (q15_t)0x7af2, (q15_t)0xdc66, (q15_t)0x7af1, (q15_t)0xdc60, - (q15_t)0x7aef, (q15_t)0xdc5a, (q15_t)0x7aed, (q15_t)0xdc54, (q15_t)0x7aeb, (q15_t)0xdc4e, (q15_t)0x7aea, (q15_t)0xdc48, - (q15_t)0x7ae8, (q15_t)0xdc42, (q15_t)0x7ae6, (q15_t)0xdc3c, (q15_t)0x7ae4, (q15_t)0xdc36, (q15_t)0x7ae3, (q15_t)0xdc30, - (q15_t)0x7ae1, (q15_t)0xdc2a, (q15_t)0x7adf, (q15_t)0xdc24, (q15_t)0x7add, (q15_t)0xdc1e, (q15_t)0x7adc, (q15_t)0xdc18, - (q15_t)0x7ada, (q15_t)0xdc12, (q15_t)0x7ad8, (q15_t)0xdc0c, (q15_t)0x7ad6, (q15_t)0xdc06, (q15_t)0x7ad5, (q15_t)0xdbff, - (q15_t)0x7ad3, (q15_t)0xdbf9, (q15_t)0x7ad1, (q15_t)0xdbf3, (q15_t)0x7acf, (q15_t)0xdbed, (q15_t)0x7acd, (q15_t)0xdbe7, - (q15_t)0x7acc, (q15_t)0xdbe1, (q15_t)0x7aca, (q15_t)0xdbdb, (q15_t)0x7ac8, (q15_t)0xdbd5, (q15_t)0x7ac6, (q15_t)0xdbcf, - (q15_t)0x7ac5, (q15_t)0xdbc9, (q15_t)0x7ac3, (q15_t)0xdbc3, (q15_t)0x7ac1, (q15_t)0xdbbd, (q15_t)0x7abf, (q15_t)0xdbb7, - (q15_t)0x7abd, (q15_t)0xdbb1, (q15_t)0x7abc, (q15_t)0xdbab, (q15_t)0x7aba, (q15_t)0xdba5, (q15_t)0x7ab8, (q15_t)0xdb9f, - (q15_t)0x7ab6, (q15_t)0xdb99, (q15_t)0x7ab5, (q15_t)0xdb93, (q15_t)0x7ab3, (q15_t)0xdb8d, (q15_t)0x7ab1, (q15_t)0xdb87, - (q15_t)0x7aaf, (q15_t)0xdb81, (q15_t)0x7aad, (q15_t)0xdb7b, (q15_t)0x7aac, (q15_t)0xdb75, (q15_t)0x7aaa, (q15_t)0xdb6f, - (q15_t)0x7aa8, (q15_t)0xdb69, (q15_t)0x7aa6, (q15_t)0xdb63, (q15_t)0x7aa4, (q15_t)0xdb5d, (q15_t)0x7aa3, (q15_t)0xdb57, - (q15_t)0x7aa1, (q15_t)0xdb51, (q15_t)0x7a9f, (q15_t)0xdb4b, (q15_t)0x7a9d, (q15_t)0xdb45, (q15_t)0x7a9b, (q15_t)0xdb3f, - (q15_t)0x7a9a, (q15_t)0xdb39, (q15_t)0x7a98, (q15_t)0xdb33, (q15_t)0x7a96, (q15_t)0xdb2d, (q15_t)0x7a94, (q15_t)0xdb27, - (q15_t)0x7a92, (q15_t)0xdb21, (q15_t)0x7a91, (q15_t)0xdb1b, (q15_t)0x7a8f, (q15_t)0xdb15, (q15_t)0x7a8d, (q15_t)0xdb0f, - (q15_t)0x7a8b, (q15_t)0xdb09, (q15_t)0x7a89, (q15_t)0xdb03, (q15_t)0x7a87, (q15_t)0xdafd, (q15_t)0x7a86, (q15_t)0xdaf7, - (q15_t)0x7a84, (q15_t)0xdaf1, (q15_t)0x7a82, (q15_t)0xdaea, (q15_t)0x7a80, (q15_t)0xdae4, (q15_t)0x7a7e, (q15_t)0xdade, - (q15_t)0x7a7d, (q15_t)0xdad8, (q15_t)0x7a7b, (q15_t)0xdad2, (q15_t)0x7a79, (q15_t)0xdacc, (q15_t)0x7a77, (q15_t)0xdac6, - (q15_t)0x7a75, (q15_t)0xdac0, (q15_t)0x7a73, (q15_t)0xdaba, (q15_t)0x7a72, (q15_t)0xdab4, (q15_t)0x7a70, (q15_t)0xdaae, - (q15_t)0x7a6e, (q15_t)0xdaa8, (q15_t)0x7a6c, (q15_t)0xdaa2, (q15_t)0x7a6a, (q15_t)0xda9c, (q15_t)0x7a68, (q15_t)0xda96, - (q15_t)0x7a67, (q15_t)0xda90, (q15_t)0x7a65, (q15_t)0xda8a, (q15_t)0x7a63, (q15_t)0xda84, (q15_t)0x7a61, (q15_t)0xda7e, - (q15_t)0x7a5f, (q15_t)0xda78, (q15_t)0x7a5d, (q15_t)0xda72, (q15_t)0x7a5c, (q15_t)0xda6c, (q15_t)0x7a5a, (q15_t)0xda66, - (q15_t)0x7a58, (q15_t)0xda60, (q15_t)0x7a56, (q15_t)0xda5a, (q15_t)0x7a54, (q15_t)0xda54, (q15_t)0x7a52, (q15_t)0xda4e, - (q15_t)0x7a50, (q15_t)0xda48, (q15_t)0x7a4f, (q15_t)0xda42, (q15_t)0x7a4d, (q15_t)0xda3c, (q15_t)0x7a4b, (q15_t)0xda36, - (q15_t)0x7a49, (q15_t)0xda30, (q15_t)0x7a47, (q15_t)0xda2a, (q15_t)0x7a45, (q15_t)0xda24, (q15_t)0x7a43, (q15_t)0xda1e, - (q15_t)0x7a42, (q15_t)0xda18, (q15_t)0x7a40, (q15_t)0xda12, (q15_t)0x7a3e, (q15_t)0xda0c, (q15_t)0x7a3c, (q15_t)0xda06, - (q15_t)0x7a3a, (q15_t)0xda00, (q15_t)0x7a38, (q15_t)0xd9fa, (q15_t)0x7a36, (q15_t)0xd9f4, (q15_t)0x7a35, (q15_t)0xd9ee, - (q15_t)0x7a33, (q15_t)0xd9e8, (q15_t)0x7a31, (q15_t)0xd9e2, (q15_t)0x7a2f, (q15_t)0xd9dc, (q15_t)0x7a2d, (q15_t)0xd9d6, - (q15_t)0x7a2b, (q15_t)0xd9d0, (q15_t)0x7a29, (q15_t)0xd9ca, (q15_t)0x7a27, (q15_t)0xd9c4, (q15_t)0x7a26, (q15_t)0xd9be, - (q15_t)0x7a24, (q15_t)0xd9b8, (q15_t)0x7a22, (q15_t)0xd9b2, (q15_t)0x7a20, (q15_t)0xd9ac, (q15_t)0x7a1e, (q15_t)0xd9a6, - (q15_t)0x7a1c, (q15_t)0xd9a0, (q15_t)0x7a1a, (q15_t)0xd99a, (q15_t)0x7a18, (q15_t)0xd994, (q15_t)0x7a16, (q15_t)0xd98e, - (q15_t)0x7a15, (q15_t)0xd988, (q15_t)0x7a13, (q15_t)0xd982, (q15_t)0x7a11, (q15_t)0xd97c, (q15_t)0x7a0f, (q15_t)0xd976, - (q15_t)0x7a0d, (q15_t)0xd970, (q15_t)0x7a0b, (q15_t)0xd96a, (q15_t)0x7a09, (q15_t)0xd964, (q15_t)0x7a07, (q15_t)0xd95e, - (q15_t)0x7a05, (q15_t)0xd958, (q15_t)0x7a04, (q15_t)0xd952, (q15_t)0x7a02, (q15_t)0xd94c, (q15_t)0x7a00, (q15_t)0xd946, - (q15_t)0x79fe, (q15_t)0xd940, (q15_t)0x79fc, (q15_t)0xd93a, (q15_t)0x79fa, (q15_t)0xd934, (q15_t)0x79f8, (q15_t)0xd92e, - (q15_t)0x79f6, (q15_t)0xd928, (q15_t)0x79f4, (q15_t)0xd922, (q15_t)0x79f2, (q15_t)0xd91c, (q15_t)0x79f0, (q15_t)0xd917, - (q15_t)0x79ef, (q15_t)0xd911, (q15_t)0x79ed, (q15_t)0xd90b, (q15_t)0x79eb, (q15_t)0xd905, (q15_t)0x79e9, (q15_t)0xd8ff, - (q15_t)0x79e7, (q15_t)0xd8f9, (q15_t)0x79e5, (q15_t)0xd8f3, (q15_t)0x79e3, (q15_t)0xd8ed, (q15_t)0x79e1, (q15_t)0xd8e7, - (q15_t)0x79df, (q15_t)0xd8e1, (q15_t)0x79dd, (q15_t)0xd8db, (q15_t)0x79db, (q15_t)0xd8d5, (q15_t)0x79d9, (q15_t)0xd8cf, - (q15_t)0x79d8, (q15_t)0xd8c9, (q15_t)0x79d6, (q15_t)0xd8c3, (q15_t)0x79d4, (q15_t)0xd8bd, (q15_t)0x79d2, (q15_t)0xd8b7, - (q15_t)0x79d0, (q15_t)0xd8b1, (q15_t)0x79ce, (q15_t)0xd8ab, (q15_t)0x79cc, (q15_t)0xd8a5, (q15_t)0x79ca, (q15_t)0xd89f, - (q15_t)0x79c8, (q15_t)0xd899, (q15_t)0x79c6, (q15_t)0xd893, (q15_t)0x79c4, (q15_t)0xd88d, (q15_t)0x79c2, (q15_t)0xd887, - (q15_t)0x79c0, (q15_t)0xd881, (q15_t)0x79be, (q15_t)0xd87b, (q15_t)0x79bc, (q15_t)0xd875, (q15_t)0x79bb, (q15_t)0xd86f, - (q15_t)0x79b9, (q15_t)0xd869, (q15_t)0x79b7, (q15_t)0xd863, (q15_t)0x79b5, (q15_t)0xd85d, (q15_t)0x79b3, (q15_t)0xd857, - (q15_t)0x79b1, (q15_t)0xd851, (q15_t)0x79af, (q15_t)0xd84b, (q15_t)0x79ad, (q15_t)0xd845, (q15_t)0x79ab, (q15_t)0xd83f, - (q15_t)0x79a9, (q15_t)0xd839, (q15_t)0x79a7, (q15_t)0xd833, (q15_t)0x79a5, (q15_t)0xd82d, (q15_t)0x79a3, (q15_t)0xd827, - (q15_t)0x79a1, (q15_t)0xd821, (q15_t)0x799f, (q15_t)0xd81b, (q15_t)0x799d, (q15_t)0xd815, (q15_t)0x799b, (q15_t)0xd80f, - (q15_t)0x7999, (q15_t)0xd80a, (q15_t)0x7997, (q15_t)0xd804, (q15_t)0x7995, (q15_t)0xd7fe, (q15_t)0x7993, (q15_t)0xd7f8, - (q15_t)0x7992, (q15_t)0xd7f2, (q15_t)0x7990, (q15_t)0xd7ec, (q15_t)0x798e, (q15_t)0xd7e6, (q15_t)0x798c, (q15_t)0xd7e0, - (q15_t)0x798a, (q15_t)0xd7da, (q15_t)0x7988, (q15_t)0xd7d4, (q15_t)0x7986, (q15_t)0xd7ce, (q15_t)0x7984, (q15_t)0xd7c8, - (q15_t)0x7982, (q15_t)0xd7c2, (q15_t)0x7980, (q15_t)0xd7bc, (q15_t)0x797e, (q15_t)0xd7b6, (q15_t)0x797c, (q15_t)0xd7b0, - (q15_t)0x797a, (q15_t)0xd7aa, (q15_t)0x7978, (q15_t)0xd7a4, (q15_t)0x7976, (q15_t)0xd79e, (q15_t)0x7974, (q15_t)0xd798, - (q15_t)0x7972, (q15_t)0xd792, (q15_t)0x7970, (q15_t)0xd78c, (q15_t)0x796e, (q15_t)0xd786, (q15_t)0x796c, (q15_t)0xd780, - (q15_t)0x796a, (q15_t)0xd77a, (q15_t)0x7968, (q15_t)0xd774, (q15_t)0x7966, (q15_t)0xd76e, (q15_t)0x7964, (q15_t)0xd768, - (q15_t)0x7962, (q15_t)0xd763, (q15_t)0x7960, (q15_t)0xd75d, (q15_t)0x795e, (q15_t)0xd757, (q15_t)0x795c, (q15_t)0xd751, - (q15_t)0x795a, (q15_t)0xd74b, (q15_t)0x7958, (q15_t)0xd745, (q15_t)0x7956, (q15_t)0xd73f, (q15_t)0x7954, (q15_t)0xd739, - (q15_t)0x7952, (q15_t)0xd733, (q15_t)0x7950, (q15_t)0xd72d, (q15_t)0x794e, (q15_t)0xd727, (q15_t)0x794c, (q15_t)0xd721, - (q15_t)0x794a, (q15_t)0xd71b, (q15_t)0x7948, (q15_t)0xd715, (q15_t)0x7946, (q15_t)0xd70f, (q15_t)0x7944, (q15_t)0xd709, - (q15_t)0x7942, (q15_t)0xd703, (q15_t)0x7940, (q15_t)0xd6fd, (q15_t)0x793e, (q15_t)0xd6f7, (q15_t)0x793c, (q15_t)0xd6f1, - (q15_t)0x793a, (q15_t)0xd6eb, (q15_t)0x7938, (q15_t)0xd6e5, (q15_t)0x7936, (q15_t)0xd6e0, (q15_t)0x7934, (q15_t)0xd6da, - (q15_t)0x7932, (q15_t)0xd6d4, (q15_t)0x7930, (q15_t)0xd6ce, (q15_t)0x792e, (q15_t)0xd6c8, (q15_t)0x792c, (q15_t)0xd6c2, - (q15_t)0x792a, (q15_t)0xd6bc, (q15_t)0x7928, (q15_t)0xd6b6, (q15_t)0x7926, (q15_t)0xd6b0, (q15_t)0x7924, (q15_t)0xd6aa, - (q15_t)0x7922, (q15_t)0xd6a4, (q15_t)0x7920, (q15_t)0xd69e, (q15_t)0x791e, (q15_t)0xd698, (q15_t)0x791c, (q15_t)0xd692, - (q15_t)0x7919, (q15_t)0xd68c, (q15_t)0x7917, (q15_t)0xd686, (q15_t)0x7915, (q15_t)0xd680, (q15_t)0x7913, (q15_t)0xd67a, - (q15_t)0x7911, (q15_t)0xd675, (q15_t)0x790f, (q15_t)0xd66f, (q15_t)0x790d, (q15_t)0xd669, (q15_t)0x790b, (q15_t)0xd663, - (q15_t)0x7909, (q15_t)0xd65d, (q15_t)0x7907, (q15_t)0xd657, (q15_t)0x7905, (q15_t)0xd651, (q15_t)0x7903, (q15_t)0xd64b, - (q15_t)0x7901, (q15_t)0xd645, (q15_t)0x78ff, (q15_t)0xd63f, (q15_t)0x78fd, (q15_t)0xd639, (q15_t)0x78fb, (q15_t)0xd633, - (q15_t)0x78f9, (q15_t)0xd62d, (q15_t)0x78f7, (q15_t)0xd627, (q15_t)0x78f5, (q15_t)0xd621, (q15_t)0x78f3, (q15_t)0xd61b, - (q15_t)0x78f1, (q15_t)0xd615, (q15_t)0x78ee, (q15_t)0xd610, (q15_t)0x78ec, (q15_t)0xd60a, (q15_t)0x78ea, (q15_t)0xd604, - (q15_t)0x78e8, (q15_t)0xd5fe, (q15_t)0x78e6, (q15_t)0xd5f8, (q15_t)0x78e4, (q15_t)0xd5f2, (q15_t)0x78e2, (q15_t)0xd5ec, - (q15_t)0x78e0, (q15_t)0xd5e6, (q15_t)0x78de, (q15_t)0xd5e0, (q15_t)0x78dc, (q15_t)0xd5da, (q15_t)0x78da, (q15_t)0xd5d4, - (q15_t)0x78d8, (q15_t)0xd5ce, (q15_t)0x78d6, (q15_t)0xd5c8, (q15_t)0x78d4, (q15_t)0xd5c2, (q15_t)0x78d2, (q15_t)0xd5bc, - (q15_t)0x78cf, (q15_t)0xd5b7, (q15_t)0x78cd, (q15_t)0xd5b1, (q15_t)0x78cb, (q15_t)0xd5ab, (q15_t)0x78c9, (q15_t)0xd5a5, - (q15_t)0x78c7, (q15_t)0xd59f, (q15_t)0x78c5, (q15_t)0xd599, (q15_t)0x78c3, (q15_t)0xd593, (q15_t)0x78c1, (q15_t)0xd58d, - (q15_t)0x78bf, (q15_t)0xd587, (q15_t)0x78bd, (q15_t)0xd581, (q15_t)0x78bb, (q15_t)0xd57b, (q15_t)0x78b9, (q15_t)0xd575, - (q15_t)0x78b6, (q15_t)0xd56f, (q15_t)0x78b4, (q15_t)0xd569, (q15_t)0x78b2, (q15_t)0xd564, (q15_t)0x78b0, (q15_t)0xd55e, - (q15_t)0x78ae, (q15_t)0xd558, (q15_t)0x78ac, (q15_t)0xd552, (q15_t)0x78aa, (q15_t)0xd54c, (q15_t)0x78a8, (q15_t)0xd546, - (q15_t)0x78a6, (q15_t)0xd540, (q15_t)0x78a4, (q15_t)0xd53a, (q15_t)0x78a2, (q15_t)0xd534, (q15_t)0x789f, (q15_t)0xd52e, - (q15_t)0x789d, (q15_t)0xd528, (q15_t)0x789b, (q15_t)0xd522, (q15_t)0x7899, (q15_t)0xd51c, (q15_t)0x7897, (q15_t)0xd517, - (q15_t)0x7895, (q15_t)0xd511, (q15_t)0x7893, (q15_t)0xd50b, (q15_t)0x7891, (q15_t)0xd505, (q15_t)0x788f, (q15_t)0xd4ff, - (q15_t)0x788c, (q15_t)0xd4f9, (q15_t)0x788a, (q15_t)0xd4f3, (q15_t)0x7888, (q15_t)0xd4ed, (q15_t)0x7886, (q15_t)0xd4e7, - (q15_t)0x7884, (q15_t)0xd4e1, (q15_t)0x7882, (q15_t)0xd4db, (q15_t)0x7880, (q15_t)0xd4d5, (q15_t)0x787e, (q15_t)0xd4d0, - (q15_t)0x787c, (q15_t)0xd4ca, (q15_t)0x7879, (q15_t)0xd4c4, (q15_t)0x7877, (q15_t)0xd4be, (q15_t)0x7875, (q15_t)0xd4b8, - (q15_t)0x7873, (q15_t)0xd4b2, (q15_t)0x7871, (q15_t)0xd4ac, (q15_t)0x786f, (q15_t)0xd4a6, (q15_t)0x786d, (q15_t)0xd4a0, - (q15_t)0x786b, (q15_t)0xd49a, (q15_t)0x7868, (q15_t)0xd494, (q15_t)0x7866, (q15_t)0xd48f, (q15_t)0x7864, (q15_t)0xd489, - (q15_t)0x7862, (q15_t)0xd483, (q15_t)0x7860, (q15_t)0xd47d, (q15_t)0x785e, (q15_t)0xd477, (q15_t)0x785c, (q15_t)0xd471, - (q15_t)0x7859, (q15_t)0xd46b, (q15_t)0x7857, (q15_t)0xd465, (q15_t)0x7855, (q15_t)0xd45f, (q15_t)0x7853, (q15_t)0xd459, - (q15_t)0x7851, (q15_t)0xd453, (q15_t)0x784f, (q15_t)0xd44e, (q15_t)0x784d, (q15_t)0xd448, (q15_t)0x784a, (q15_t)0xd442, - (q15_t)0x7848, (q15_t)0xd43c, (q15_t)0x7846, (q15_t)0xd436, (q15_t)0x7844, (q15_t)0xd430, (q15_t)0x7842, (q15_t)0xd42a, - (q15_t)0x7840, (q15_t)0xd424, (q15_t)0x783e, (q15_t)0xd41e, (q15_t)0x783b, (q15_t)0xd418, (q15_t)0x7839, (q15_t)0xd412, - (q15_t)0x7837, (q15_t)0xd40d, (q15_t)0x7835, (q15_t)0xd407, (q15_t)0x7833, (q15_t)0xd401, (q15_t)0x7831, (q15_t)0xd3fb, - (q15_t)0x782e, (q15_t)0xd3f5, (q15_t)0x782c, (q15_t)0xd3ef, (q15_t)0x782a, (q15_t)0xd3e9, (q15_t)0x7828, (q15_t)0xd3e3, - (q15_t)0x7826, (q15_t)0xd3dd, (q15_t)0x7824, (q15_t)0xd3d7, (q15_t)0x7821, (q15_t)0xd3d2, (q15_t)0x781f, (q15_t)0xd3cc, - (q15_t)0x781d, (q15_t)0xd3c6, (q15_t)0x781b, (q15_t)0xd3c0, (q15_t)0x7819, (q15_t)0xd3ba, (q15_t)0x7817, (q15_t)0xd3b4, - (q15_t)0x7814, (q15_t)0xd3ae, (q15_t)0x7812, (q15_t)0xd3a8, (q15_t)0x7810, (q15_t)0xd3a2, (q15_t)0x780e, (q15_t)0xd39d, - (q15_t)0x780c, (q15_t)0xd397, (q15_t)0x780a, (q15_t)0xd391, (q15_t)0x7807, (q15_t)0xd38b, (q15_t)0x7805, (q15_t)0xd385, - (q15_t)0x7803, (q15_t)0xd37f, (q15_t)0x7801, (q15_t)0xd379, (q15_t)0x77ff, (q15_t)0xd373, (q15_t)0x77fc, (q15_t)0xd36d, - (q15_t)0x77fa, (q15_t)0xd368, (q15_t)0x77f8, (q15_t)0xd362, (q15_t)0x77f6, (q15_t)0xd35c, (q15_t)0x77f4, (q15_t)0xd356, - (q15_t)0x77f1, (q15_t)0xd350, (q15_t)0x77ef, (q15_t)0xd34a, (q15_t)0x77ed, (q15_t)0xd344, (q15_t)0x77eb, (q15_t)0xd33e, - (q15_t)0x77e9, (q15_t)0xd338, (q15_t)0x77e6, (q15_t)0xd333, (q15_t)0x77e4, (q15_t)0xd32d, (q15_t)0x77e2, (q15_t)0xd327, - (q15_t)0x77e0, (q15_t)0xd321, (q15_t)0x77de, (q15_t)0xd31b, (q15_t)0x77db, (q15_t)0xd315, (q15_t)0x77d9, (q15_t)0xd30f, - (q15_t)0x77d7, (q15_t)0xd309, (q15_t)0x77d5, (q15_t)0xd303, (q15_t)0x77d3, (q15_t)0xd2fe, (q15_t)0x77d0, (q15_t)0xd2f8, - (q15_t)0x77ce, (q15_t)0xd2f2, (q15_t)0x77cc, (q15_t)0xd2ec, (q15_t)0x77ca, (q15_t)0xd2e6, (q15_t)0x77c8, (q15_t)0xd2e0, - (q15_t)0x77c5, (q15_t)0xd2da, (q15_t)0x77c3, (q15_t)0xd2d4, (q15_t)0x77c1, (q15_t)0xd2cf, (q15_t)0x77bf, (q15_t)0xd2c9, - (q15_t)0x77bc, (q15_t)0xd2c3, (q15_t)0x77ba, (q15_t)0xd2bd, (q15_t)0x77b8, (q15_t)0xd2b7, (q15_t)0x77b6, (q15_t)0xd2b1, - (q15_t)0x77b4, (q15_t)0xd2ab, (q15_t)0x77b1, (q15_t)0xd2a5, (q15_t)0x77af, (q15_t)0xd2a0, (q15_t)0x77ad, (q15_t)0xd29a, - (q15_t)0x77ab, (q15_t)0xd294, (q15_t)0x77a8, (q15_t)0xd28e, (q15_t)0x77a6, (q15_t)0xd288, (q15_t)0x77a4, (q15_t)0xd282, - (q15_t)0x77a2, (q15_t)0xd27c, (q15_t)0x77a0, (q15_t)0xd276, (q15_t)0x779d, (q15_t)0xd271, (q15_t)0x779b, (q15_t)0xd26b, - (q15_t)0x7799, (q15_t)0xd265, (q15_t)0x7797, (q15_t)0xd25f, (q15_t)0x7794, (q15_t)0xd259, (q15_t)0x7792, (q15_t)0xd253, - (q15_t)0x7790, (q15_t)0xd24d, (q15_t)0x778e, (q15_t)0xd247, (q15_t)0x778b, (q15_t)0xd242, (q15_t)0x7789, (q15_t)0xd23c, - (q15_t)0x7787, (q15_t)0xd236, (q15_t)0x7785, (q15_t)0xd230, (q15_t)0x7782, (q15_t)0xd22a, (q15_t)0x7780, (q15_t)0xd224, - (q15_t)0x777e, (q15_t)0xd21e, (q15_t)0x777c, (q15_t)0xd219, (q15_t)0x7779, (q15_t)0xd213, (q15_t)0x7777, (q15_t)0xd20d, - (q15_t)0x7775, (q15_t)0xd207, (q15_t)0x7773, (q15_t)0xd201, (q15_t)0x7770, (q15_t)0xd1fb, (q15_t)0x776e, (q15_t)0xd1f5, - (q15_t)0x776c, (q15_t)0xd1ef, (q15_t)0x776a, (q15_t)0xd1ea, (q15_t)0x7767, (q15_t)0xd1e4, (q15_t)0x7765, (q15_t)0xd1de, - (q15_t)0x7763, (q15_t)0xd1d8, (q15_t)0x7760, (q15_t)0xd1d2, (q15_t)0x775e, (q15_t)0xd1cc, (q15_t)0x775c, (q15_t)0xd1c6, - (q15_t)0x775a, (q15_t)0xd1c1, (q15_t)0x7757, (q15_t)0xd1bb, (q15_t)0x7755, (q15_t)0xd1b5, (q15_t)0x7753, (q15_t)0xd1af, - (q15_t)0x7751, (q15_t)0xd1a9, (q15_t)0x774e, (q15_t)0xd1a3, (q15_t)0x774c, (q15_t)0xd19d, (q15_t)0x774a, (q15_t)0xd198, - (q15_t)0x7747, (q15_t)0xd192, (q15_t)0x7745, (q15_t)0xd18c, (q15_t)0x7743, (q15_t)0xd186, (q15_t)0x7741, (q15_t)0xd180, - (q15_t)0x773e, (q15_t)0xd17a, (q15_t)0x773c, (q15_t)0xd174, (q15_t)0x773a, (q15_t)0xd16f, (q15_t)0x7738, (q15_t)0xd169, - (q15_t)0x7735, (q15_t)0xd163, (q15_t)0x7733, (q15_t)0xd15d, (q15_t)0x7731, (q15_t)0xd157, (q15_t)0x772e, (q15_t)0xd151, - (q15_t)0x772c, (q15_t)0xd14b, (q15_t)0x772a, (q15_t)0xd146, (q15_t)0x7727, (q15_t)0xd140, (q15_t)0x7725, (q15_t)0xd13a, - (q15_t)0x7723, (q15_t)0xd134, (q15_t)0x7721, (q15_t)0xd12e, (q15_t)0x771e, (q15_t)0xd128, (q15_t)0x771c, (q15_t)0xd123, - (q15_t)0x771a, (q15_t)0xd11d, (q15_t)0x7717, (q15_t)0xd117, (q15_t)0x7715, (q15_t)0xd111, (q15_t)0x7713, (q15_t)0xd10b, - (q15_t)0x7710, (q15_t)0xd105, (q15_t)0x770e, (q15_t)0xd0ff, (q15_t)0x770c, (q15_t)0xd0fa, (q15_t)0x770a, (q15_t)0xd0f4, - (q15_t)0x7707, (q15_t)0xd0ee, (q15_t)0x7705, (q15_t)0xd0e8, (q15_t)0x7703, (q15_t)0xd0e2, (q15_t)0x7700, (q15_t)0xd0dc, - (q15_t)0x76fe, (q15_t)0xd0d7, (q15_t)0x76fc, (q15_t)0xd0d1, (q15_t)0x76f9, (q15_t)0xd0cb, (q15_t)0x76f7, (q15_t)0xd0c5, - (q15_t)0x76f5, (q15_t)0xd0bf, (q15_t)0x76f2, (q15_t)0xd0b9, (q15_t)0x76f0, (q15_t)0xd0b4, (q15_t)0x76ee, (q15_t)0xd0ae, - (q15_t)0x76eb, (q15_t)0xd0a8, (q15_t)0x76e9, (q15_t)0xd0a2, (q15_t)0x76e7, (q15_t)0xd09c, (q15_t)0x76e4, (q15_t)0xd096, - (q15_t)0x76e2, (q15_t)0xd091, (q15_t)0x76e0, (q15_t)0xd08b, (q15_t)0x76dd, (q15_t)0xd085, (q15_t)0x76db, (q15_t)0xd07f, - (q15_t)0x76d9, (q15_t)0xd079, (q15_t)0x76d6, (q15_t)0xd073, (q15_t)0x76d4, (q15_t)0xd06e, (q15_t)0x76d2, (q15_t)0xd068, - (q15_t)0x76cf, (q15_t)0xd062, (q15_t)0x76cd, (q15_t)0xd05c, (q15_t)0x76cb, (q15_t)0xd056, (q15_t)0x76c8, (q15_t)0xd050, - (q15_t)0x76c6, (q15_t)0xd04b, (q15_t)0x76c4, (q15_t)0xd045, (q15_t)0x76c1, (q15_t)0xd03f, (q15_t)0x76bf, (q15_t)0xd039, - (q15_t)0x76bd, (q15_t)0xd033, (q15_t)0x76ba, (q15_t)0xd02d, (q15_t)0x76b8, (q15_t)0xd028, (q15_t)0x76b6, (q15_t)0xd022, - (q15_t)0x76b3, (q15_t)0xd01c, (q15_t)0x76b1, (q15_t)0xd016, (q15_t)0x76af, (q15_t)0xd010, (q15_t)0x76ac, (q15_t)0xd00a, - (q15_t)0x76aa, (q15_t)0xd005, (q15_t)0x76a8, (q15_t)0xcfff, (q15_t)0x76a5, (q15_t)0xcff9, (q15_t)0x76a3, (q15_t)0xcff3, - (q15_t)0x76a0, (q15_t)0xcfed, (q15_t)0x769e, (q15_t)0xcfe7, (q15_t)0x769c, (q15_t)0xcfe2, (q15_t)0x7699, (q15_t)0xcfdc, - (q15_t)0x7697, (q15_t)0xcfd6, (q15_t)0x7695, (q15_t)0xcfd0, (q15_t)0x7692, (q15_t)0xcfca, (q15_t)0x7690, (q15_t)0xcfc5, - (q15_t)0x768e, (q15_t)0xcfbf, (q15_t)0x768b, (q15_t)0xcfb9, (q15_t)0x7689, (q15_t)0xcfb3, (q15_t)0x7686, (q15_t)0xcfad, - (q15_t)0x7684, (q15_t)0xcfa7, (q15_t)0x7682, (q15_t)0xcfa2, (q15_t)0x767f, (q15_t)0xcf9c, (q15_t)0x767d, (q15_t)0xcf96, - (q15_t)0x767b, (q15_t)0xcf90, (q15_t)0x7678, (q15_t)0xcf8a, (q15_t)0x7676, (q15_t)0xcf85, (q15_t)0x7673, (q15_t)0xcf7f, - (q15_t)0x7671, (q15_t)0xcf79, (q15_t)0x766f, (q15_t)0xcf73, (q15_t)0x766c, (q15_t)0xcf6d, (q15_t)0x766a, (q15_t)0xcf67, - (q15_t)0x7668, (q15_t)0xcf62, (q15_t)0x7665, (q15_t)0xcf5c, (q15_t)0x7663, (q15_t)0xcf56, (q15_t)0x7660, (q15_t)0xcf50, - (q15_t)0x765e, (q15_t)0xcf4a, (q15_t)0x765c, (q15_t)0xcf45, (q15_t)0x7659, (q15_t)0xcf3f, (q15_t)0x7657, (q15_t)0xcf39, - (q15_t)0x7654, (q15_t)0xcf33, (q15_t)0x7652, (q15_t)0xcf2d, (q15_t)0x7650, (q15_t)0xcf28, (q15_t)0x764d, (q15_t)0xcf22, - (q15_t)0x764b, (q15_t)0xcf1c, (q15_t)0x7648, (q15_t)0xcf16, (q15_t)0x7646, (q15_t)0xcf10, (q15_t)0x7644, (q15_t)0xcf0b, - (q15_t)0x7641, (q15_t)0xcf05, (q15_t)0x763f, (q15_t)0xceff, (q15_t)0x763c, (q15_t)0xcef9, (q15_t)0x763a, (q15_t)0xcef3, - (q15_t)0x7638, (q15_t)0xceee, (q15_t)0x7635, (q15_t)0xcee8, (q15_t)0x7633, (q15_t)0xcee2, (q15_t)0x7630, (q15_t)0xcedc, - (q15_t)0x762e, (q15_t)0xced6, (q15_t)0x762b, (q15_t)0xced1, (q15_t)0x7629, (q15_t)0xcecb, (q15_t)0x7627, (q15_t)0xcec5, - (q15_t)0x7624, (q15_t)0xcebf, (q15_t)0x7622, (q15_t)0xceb9, (q15_t)0x761f, (q15_t)0xceb4, (q15_t)0x761d, (q15_t)0xceae, - (q15_t)0x761b, (q15_t)0xcea8, (q15_t)0x7618, (q15_t)0xcea2, (q15_t)0x7616, (q15_t)0xce9c, (q15_t)0x7613, (q15_t)0xce97, - (q15_t)0x7611, (q15_t)0xce91, (q15_t)0x760e, (q15_t)0xce8b, (q15_t)0x760c, (q15_t)0xce85, (q15_t)0x760a, (q15_t)0xce7f, - (q15_t)0x7607, (q15_t)0xce7a, (q15_t)0x7605, (q15_t)0xce74, (q15_t)0x7602, (q15_t)0xce6e, (q15_t)0x7600, (q15_t)0xce68, - (q15_t)0x75fd, (q15_t)0xce62, (q15_t)0x75fb, (q15_t)0xce5d, (q15_t)0x75f9, (q15_t)0xce57, (q15_t)0x75f6, (q15_t)0xce51, - (q15_t)0x75f4, (q15_t)0xce4b, (q15_t)0x75f1, (q15_t)0xce45, (q15_t)0x75ef, (q15_t)0xce40, (q15_t)0x75ec, (q15_t)0xce3a, - (q15_t)0x75ea, (q15_t)0xce34, (q15_t)0x75e7, (q15_t)0xce2e, (q15_t)0x75e5, (q15_t)0xce28, (q15_t)0x75e3, (q15_t)0xce23, - (q15_t)0x75e0, (q15_t)0xce1d, (q15_t)0x75de, (q15_t)0xce17, (q15_t)0x75db, (q15_t)0xce11, (q15_t)0x75d9, (q15_t)0xce0c, - (q15_t)0x75d6, (q15_t)0xce06, (q15_t)0x75d4, (q15_t)0xce00, (q15_t)0x75d1, (q15_t)0xcdfa, (q15_t)0x75cf, (q15_t)0xcdf4, - (q15_t)0x75cc, (q15_t)0xcdef, (q15_t)0x75ca, (q15_t)0xcde9, (q15_t)0x75c8, (q15_t)0xcde3, (q15_t)0x75c5, (q15_t)0xcddd, - (q15_t)0x75c3, (q15_t)0xcdd8, (q15_t)0x75c0, (q15_t)0xcdd2, (q15_t)0x75be, (q15_t)0xcdcc, (q15_t)0x75bb, (q15_t)0xcdc6, - (q15_t)0x75b9, (q15_t)0xcdc0, (q15_t)0x75b6, (q15_t)0xcdbb, (q15_t)0x75b4, (q15_t)0xcdb5, (q15_t)0x75b1, (q15_t)0xcdaf, - (q15_t)0x75af, (q15_t)0xcda9, (q15_t)0x75ac, (q15_t)0xcda3, (q15_t)0x75aa, (q15_t)0xcd9e, (q15_t)0x75a7, (q15_t)0xcd98, - (q15_t)0x75a5, (q15_t)0xcd92, (q15_t)0x75a3, (q15_t)0xcd8c, (q15_t)0x75a0, (q15_t)0xcd87, (q15_t)0x759e, (q15_t)0xcd81, - (q15_t)0x759b, (q15_t)0xcd7b, (q15_t)0x7599, (q15_t)0xcd75, (q15_t)0x7596, (q15_t)0xcd70, (q15_t)0x7594, (q15_t)0xcd6a, - (q15_t)0x7591, (q15_t)0xcd64, (q15_t)0x758f, (q15_t)0xcd5e, (q15_t)0x758c, (q15_t)0xcd58, (q15_t)0x758a, (q15_t)0xcd53, - (q15_t)0x7587, (q15_t)0xcd4d, (q15_t)0x7585, (q15_t)0xcd47, (q15_t)0x7582, (q15_t)0xcd41, (q15_t)0x7580, (q15_t)0xcd3c, - (q15_t)0x757d, (q15_t)0xcd36, (q15_t)0x757b, (q15_t)0xcd30, (q15_t)0x7578, (q15_t)0xcd2a, (q15_t)0x7576, (q15_t)0xcd25, - (q15_t)0x7573, (q15_t)0xcd1f, (q15_t)0x7571, (q15_t)0xcd19, (q15_t)0x756e, (q15_t)0xcd13, (q15_t)0x756c, (q15_t)0xcd0d, - (q15_t)0x7569, (q15_t)0xcd08, (q15_t)0x7567, (q15_t)0xcd02, (q15_t)0x7564, (q15_t)0xccfc, (q15_t)0x7562, (q15_t)0xccf6, - (q15_t)0x755f, (q15_t)0xccf1, (q15_t)0x755d, (q15_t)0xcceb, (q15_t)0x755a, (q15_t)0xcce5, (q15_t)0x7558, (q15_t)0xccdf, - (q15_t)0x7555, (q15_t)0xccda, (q15_t)0x7553, (q15_t)0xccd4, (q15_t)0x7550, (q15_t)0xccce, (q15_t)0x754e, (q15_t)0xccc8, - (q15_t)0x754b, (q15_t)0xccc3, (q15_t)0x7549, (q15_t)0xccbd, (q15_t)0x7546, (q15_t)0xccb7, (q15_t)0x7544, (q15_t)0xccb1, - (q15_t)0x7541, (q15_t)0xccac, (q15_t)0x753f, (q15_t)0xcca6, (q15_t)0x753c, (q15_t)0xcca0, (q15_t)0x753a, (q15_t)0xcc9a, - (q15_t)0x7537, (q15_t)0xcc95, (q15_t)0x7535, (q15_t)0xcc8f, (q15_t)0x7532, (q15_t)0xcc89, (q15_t)0x752f, (q15_t)0xcc83, - (q15_t)0x752d, (q15_t)0xcc7e, (q15_t)0x752a, (q15_t)0xcc78, (q15_t)0x7528, (q15_t)0xcc72, (q15_t)0x7525, (q15_t)0xcc6c, - (q15_t)0x7523, (q15_t)0xcc67, (q15_t)0x7520, (q15_t)0xcc61, (q15_t)0x751e, (q15_t)0xcc5b, (q15_t)0x751b, (q15_t)0xcc55, - (q15_t)0x7519, (q15_t)0xcc50, (q15_t)0x7516, (q15_t)0xcc4a, (q15_t)0x7514, (q15_t)0xcc44, (q15_t)0x7511, (q15_t)0xcc3e, - (q15_t)0x750f, (q15_t)0xcc39, (q15_t)0x750c, (q15_t)0xcc33, (q15_t)0x7509, (q15_t)0xcc2d, (q15_t)0x7507, (q15_t)0xcc27, - (q15_t)0x7504, (q15_t)0xcc22, (q15_t)0x7502, (q15_t)0xcc1c, (q15_t)0x74ff, (q15_t)0xcc16, (q15_t)0x74fd, (q15_t)0xcc10, - (q15_t)0x74fa, (q15_t)0xcc0b, (q15_t)0x74f8, (q15_t)0xcc05, (q15_t)0x74f5, (q15_t)0xcbff, (q15_t)0x74f2, (q15_t)0xcbf9, - (q15_t)0x74f0, (q15_t)0xcbf4, (q15_t)0x74ed, (q15_t)0xcbee, (q15_t)0x74eb, (q15_t)0xcbe8, (q15_t)0x74e8, (q15_t)0xcbe2, - (q15_t)0x74e6, (q15_t)0xcbdd, (q15_t)0x74e3, (q15_t)0xcbd7, (q15_t)0x74e1, (q15_t)0xcbd1, (q15_t)0x74de, (q15_t)0xcbcb, - (q15_t)0x74db, (q15_t)0xcbc6, (q15_t)0x74d9, (q15_t)0xcbc0, (q15_t)0x74d6, (q15_t)0xcbba, (q15_t)0x74d4, (q15_t)0xcbb5, - (q15_t)0x74d1, (q15_t)0xcbaf, (q15_t)0x74cf, (q15_t)0xcba9, (q15_t)0x74cc, (q15_t)0xcba3, (q15_t)0x74c9, (q15_t)0xcb9e, - (q15_t)0x74c7, (q15_t)0xcb98, (q15_t)0x74c4, (q15_t)0xcb92, (q15_t)0x74c2, (q15_t)0xcb8c, (q15_t)0x74bf, (q15_t)0xcb87, - (q15_t)0x74bd, (q15_t)0xcb81, (q15_t)0x74ba, (q15_t)0xcb7b, (q15_t)0x74b7, (q15_t)0xcb75, (q15_t)0x74b5, (q15_t)0xcb70, - (q15_t)0x74b2, (q15_t)0xcb6a, (q15_t)0x74b0, (q15_t)0xcb64, (q15_t)0x74ad, (q15_t)0xcb5f, (q15_t)0x74ab, (q15_t)0xcb59, - (q15_t)0x74a8, (q15_t)0xcb53, (q15_t)0x74a5, (q15_t)0xcb4d, (q15_t)0x74a3, (q15_t)0xcb48, (q15_t)0x74a0, (q15_t)0xcb42, - (q15_t)0x749e, (q15_t)0xcb3c, (q15_t)0x749b, (q15_t)0xcb36, (q15_t)0x7498, (q15_t)0xcb31, (q15_t)0x7496, (q15_t)0xcb2b, - (q15_t)0x7493, (q15_t)0xcb25, (q15_t)0x7491, (q15_t)0xcb20, (q15_t)0x748e, (q15_t)0xcb1a, (q15_t)0x748b, (q15_t)0xcb14, - (q15_t)0x7489, (q15_t)0xcb0e, (q15_t)0x7486, (q15_t)0xcb09, (q15_t)0x7484, (q15_t)0xcb03, (q15_t)0x7481, (q15_t)0xcafd, - (q15_t)0x747e, (q15_t)0xcaf8, (q15_t)0x747c, (q15_t)0xcaf2, (q15_t)0x7479, (q15_t)0xcaec, (q15_t)0x7477, (q15_t)0xcae6, - (q15_t)0x7474, (q15_t)0xcae1, (q15_t)0x7471, (q15_t)0xcadb, (q15_t)0x746f, (q15_t)0xcad5, (q15_t)0x746c, (q15_t)0xcad0, - (q15_t)0x746a, (q15_t)0xcaca, (q15_t)0x7467, (q15_t)0xcac4, (q15_t)0x7464, (q15_t)0xcabe, (q15_t)0x7462, (q15_t)0xcab9, - (q15_t)0x745f, (q15_t)0xcab3, (q15_t)0x745c, (q15_t)0xcaad, (q15_t)0x745a, (q15_t)0xcaa8, (q15_t)0x7457, (q15_t)0xcaa2, - (q15_t)0x7455, (q15_t)0xca9c, (q15_t)0x7452, (q15_t)0xca96, (q15_t)0x744f, (q15_t)0xca91, (q15_t)0x744d, (q15_t)0xca8b, - (q15_t)0x744a, (q15_t)0xca85, (q15_t)0x7448, (q15_t)0xca80, (q15_t)0x7445, (q15_t)0xca7a, (q15_t)0x7442, (q15_t)0xca74, - (q15_t)0x7440, (q15_t)0xca6e, (q15_t)0x743d, (q15_t)0xca69, (q15_t)0x743a, (q15_t)0xca63, (q15_t)0x7438, (q15_t)0xca5d, - (q15_t)0x7435, (q15_t)0xca58, (q15_t)0x7432, (q15_t)0xca52, (q15_t)0x7430, (q15_t)0xca4c, (q15_t)0x742d, (q15_t)0xca46, - (q15_t)0x742b, (q15_t)0xca41, (q15_t)0x7428, (q15_t)0xca3b, (q15_t)0x7425, (q15_t)0xca35, (q15_t)0x7423, (q15_t)0xca30, - (q15_t)0x7420, (q15_t)0xca2a, (q15_t)0x741d, (q15_t)0xca24, (q15_t)0x741b, (q15_t)0xca1f, (q15_t)0x7418, (q15_t)0xca19, - (q15_t)0x7415, (q15_t)0xca13, (q15_t)0x7413, (q15_t)0xca0d, (q15_t)0x7410, (q15_t)0xca08, (q15_t)0x740d, (q15_t)0xca02, - (q15_t)0x740b, (q15_t)0xc9fc, (q15_t)0x7408, (q15_t)0xc9f7, (q15_t)0x7406, (q15_t)0xc9f1, (q15_t)0x7403, (q15_t)0xc9eb, - (q15_t)0x7400, (q15_t)0xc9e6, (q15_t)0x73fe, (q15_t)0xc9e0, (q15_t)0x73fb, (q15_t)0xc9da, (q15_t)0x73f8, (q15_t)0xc9d5, - (q15_t)0x73f6, (q15_t)0xc9cf, (q15_t)0x73f3, (q15_t)0xc9c9, (q15_t)0x73f0, (q15_t)0xc9c3, (q15_t)0x73ee, (q15_t)0xc9be, - (q15_t)0x73eb, (q15_t)0xc9b8, (q15_t)0x73e8, (q15_t)0xc9b2, (q15_t)0x73e6, (q15_t)0xc9ad, (q15_t)0x73e3, (q15_t)0xc9a7, - (q15_t)0x73e0, (q15_t)0xc9a1, (q15_t)0x73de, (q15_t)0xc99c, (q15_t)0x73db, (q15_t)0xc996, (q15_t)0x73d8, (q15_t)0xc990, - (q15_t)0x73d6, (q15_t)0xc98b, (q15_t)0x73d3, (q15_t)0xc985, (q15_t)0x73d0, (q15_t)0xc97f, (q15_t)0x73ce, (q15_t)0xc97a, - (q15_t)0x73cb, (q15_t)0xc974, (q15_t)0x73c8, (q15_t)0xc96e, (q15_t)0x73c6, (q15_t)0xc968, (q15_t)0x73c3, (q15_t)0xc963, - (q15_t)0x73c0, (q15_t)0xc95d, (q15_t)0x73bd, (q15_t)0xc957, (q15_t)0x73bb, (q15_t)0xc952, (q15_t)0x73b8, (q15_t)0xc94c, - (q15_t)0x73b5, (q15_t)0xc946, (q15_t)0x73b3, (q15_t)0xc941, (q15_t)0x73b0, (q15_t)0xc93b, (q15_t)0x73ad, (q15_t)0xc935, - (q15_t)0x73ab, (q15_t)0xc930, (q15_t)0x73a8, (q15_t)0xc92a, (q15_t)0x73a5, (q15_t)0xc924, (q15_t)0x73a3, (q15_t)0xc91f, - (q15_t)0x73a0, (q15_t)0xc919, (q15_t)0x739d, (q15_t)0xc913, (q15_t)0x739b, (q15_t)0xc90e, (q15_t)0x7398, (q15_t)0xc908, - (q15_t)0x7395, (q15_t)0xc902, (q15_t)0x7392, (q15_t)0xc8fd, (q15_t)0x7390, (q15_t)0xc8f7, (q15_t)0x738d, (q15_t)0xc8f1, - (q15_t)0x738a, (q15_t)0xc8ec, (q15_t)0x7388, (q15_t)0xc8e6, (q15_t)0x7385, (q15_t)0xc8e0, (q15_t)0x7382, (q15_t)0xc8db, - (q15_t)0x737f, (q15_t)0xc8d5, (q15_t)0x737d, (q15_t)0xc8cf, (q15_t)0x737a, (q15_t)0xc8ca, (q15_t)0x7377, (q15_t)0xc8c4, - (q15_t)0x7375, (q15_t)0xc8be, (q15_t)0x7372, (q15_t)0xc8b9, (q15_t)0x736f, (q15_t)0xc8b3, (q15_t)0x736c, (q15_t)0xc8ad, - (q15_t)0x736a, (q15_t)0xc8a8, (q15_t)0x7367, (q15_t)0xc8a2, (q15_t)0x7364, (q15_t)0xc89c, (q15_t)0x7362, (q15_t)0xc897, - (q15_t)0x735f, (q15_t)0xc891, (q15_t)0x735c, (q15_t)0xc88b, (q15_t)0x7359, (q15_t)0xc886, (q15_t)0x7357, (q15_t)0xc880, - (q15_t)0x7354, (q15_t)0xc87a, (q15_t)0x7351, (q15_t)0xc875, (q15_t)0x734f, (q15_t)0xc86f, (q15_t)0x734c, (q15_t)0xc869, - (q15_t)0x7349, (q15_t)0xc864, (q15_t)0x7346, (q15_t)0xc85e, (q15_t)0x7344, (q15_t)0xc858, (q15_t)0x7341, (q15_t)0xc853, - (q15_t)0x733e, (q15_t)0xc84d, (q15_t)0x733b, (q15_t)0xc847, (q15_t)0x7339, (q15_t)0xc842, (q15_t)0x7336, (q15_t)0xc83c, - (q15_t)0x7333, (q15_t)0xc836, (q15_t)0x7330, (q15_t)0xc831, (q15_t)0x732e, (q15_t)0xc82b, (q15_t)0x732b, (q15_t)0xc825, - (q15_t)0x7328, (q15_t)0xc820, (q15_t)0x7326, (q15_t)0xc81a, (q15_t)0x7323, (q15_t)0xc814, (q15_t)0x7320, (q15_t)0xc80f, - (q15_t)0x731d, (q15_t)0xc809, (q15_t)0x731b, (q15_t)0xc803, (q15_t)0x7318, (q15_t)0xc7fe, (q15_t)0x7315, (q15_t)0xc7f8, - (q15_t)0x7312, (q15_t)0xc7f3, (q15_t)0x7310, (q15_t)0xc7ed, (q15_t)0x730d, (q15_t)0xc7e7, (q15_t)0x730a, (q15_t)0xc7e2, - (q15_t)0x7307, (q15_t)0xc7dc, (q15_t)0x7305, (q15_t)0xc7d6, (q15_t)0x7302, (q15_t)0xc7d1, (q15_t)0x72ff, (q15_t)0xc7cb, - (q15_t)0x72fc, (q15_t)0xc7c5, (q15_t)0x72f9, (q15_t)0xc7c0, (q15_t)0x72f7, (q15_t)0xc7ba, (q15_t)0x72f4, (q15_t)0xc7b4, - (q15_t)0x72f1, (q15_t)0xc7af, (q15_t)0x72ee, (q15_t)0xc7a9, (q15_t)0x72ec, (q15_t)0xc7a3, (q15_t)0x72e9, (q15_t)0xc79e, - (q15_t)0x72e6, (q15_t)0xc798, (q15_t)0x72e3, (q15_t)0xc793, (q15_t)0x72e1, (q15_t)0xc78d, (q15_t)0x72de, (q15_t)0xc787, - (q15_t)0x72db, (q15_t)0xc782, (q15_t)0x72d8, (q15_t)0xc77c, (q15_t)0x72d5, (q15_t)0xc776, (q15_t)0x72d3, (q15_t)0xc771, - (q15_t)0x72d0, (q15_t)0xc76b, (q15_t)0x72cd, (q15_t)0xc765, (q15_t)0x72ca, (q15_t)0xc760, (q15_t)0x72c8, (q15_t)0xc75a, - (q15_t)0x72c5, (q15_t)0xc755, (q15_t)0x72c2, (q15_t)0xc74f, (q15_t)0x72bf, (q15_t)0xc749, (q15_t)0x72bc, (q15_t)0xc744, - (q15_t)0x72ba, (q15_t)0xc73e, (q15_t)0x72b7, (q15_t)0xc738, (q15_t)0x72b4, (q15_t)0xc733, (q15_t)0x72b1, (q15_t)0xc72d, - (q15_t)0x72af, (q15_t)0xc728, (q15_t)0x72ac, (q15_t)0xc722, (q15_t)0x72a9, (q15_t)0xc71c, (q15_t)0x72a6, (q15_t)0xc717, - (q15_t)0x72a3, (q15_t)0xc711, (q15_t)0x72a1, (q15_t)0xc70b, (q15_t)0x729e, (q15_t)0xc706, (q15_t)0x729b, (q15_t)0xc700, - (q15_t)0x7298, (q15_t)0xc6fa, (q15_t)0x7295, (q15_t)0xc6f5, (q15_t)0x7293, (q15_t)0xc6ef, (q15_t)0x7290, (q15_t)0xc6ea, - (q15_t)0x728d, (q15_t)0xc6e4, (q15_t)0x728a, (q15_t)0xc6de, (q15_t)0x7287, (q15_t)0xc6d9, (q15_t)0x7285, (q15_t)0xc6d3, - (q15_t)0x7282, (q15_t)0xc6ce, (q15_t)0x727f, (q15_t)0xc6c8, (q15_t)0x727c, (q15_t)0xc6c2, (q15_t)0x7279, (q15_t)0xc6bd, - (q15_t)0x7276, (q15_t)0xc6b7, (q15_t)0x7274, (q15_t)0xc6b1, (q15_t)0x7271, (q15_t)0xc6ac, (q15_t)0x726e, (q15_t)0xc6a6, - (q15_t)0x726b, (q15_t)0xc6a1, (q15_t)0x7268, (q15_t)0xc69b, (q15_t)0x7266, (q15_t)0xc695, (q15_t)0x7263, (q15_t)0xc690, - (q15_t)0x7260, (q15_t)0xc68a, (q15_t)0x725d, (q15_t)0xc684, (q15_t)0x725a, (q15_t)0xc67f, (q15_t)0x7257, (q15_t)0xc679, - (q15_t)0x7255, (q15_t)0xc674, (q15_t)0x7252, (q15_t)0xc66e, (q15_t)0x724f, (q15_t)0xc668, (q15_t)0x724c, (q15_t)0xc663, - (q15_t)0x7249, (q15_t)0xc65d, (q15_t)0x7247, (q15_t)0xc658, (q15_t)0x7244, (q15_t)0xc652, (q15_t)0x7241, (q15_t)0xc64c, - (q15_t)0x723e, (q15_t)0xc647, (q15_t)0x723b, (q15_t)0xc641, (q15_t)0x7238, (q15_t)0xc63c, (q15_t)0x7236, (q15_t)0xc636, - (q15_t)0x7233, (q15_t)0xc630, (q15_t)0x7230, (q15_t)0xc62b, (q15_t)0x722d, (q15_t)0xc625, (q15_t)0x722a, (q15_t)0xc620, - (q15_t)0x7227, (q15_t)0xc61a, (q15_t)0x7224, (q15_t)0xc614, (q15_t)0x7222, (q15_t)0xc60f, (q15_t)0x721f, (q15_t)0xc609, - (q15_t)0x721c, (q15_t)0xc603, (q15_t)0x7219, (q15_t)0xc5fe, (q15_t)0x7216, (q15_t)0xc5f8, (q15_t)0x7213, (q15_t)0xc5f3, - (q15_t)0x7211, (q15_t)0xc5ed, (q15_t)0x720e, (q15_t)0xc5e7, (q15_t)0x720b, (q15_t)0xc5e2, (q15_t)0x7208, (q15_t)0xc5dc, - (q15_t)0x7205, (q15_t)0xc5d7, (q15_t)0x7202, (q15_t)0xc5d1, (q15_t)0x71ff, (q15_t)0xc5cc, (q15_t)0x71fd, (q15_t)0xc5c6, - (q15_t)0x71fa, (q15_t)0xc5c0, (q15_t)0x71f7, (q15_t)0xc5bb, (q15_t)0x71f4, (q15_t)0xc5b5, (q15_t)0x71f1, (q15_t)0xc5b0, - (q15_t)0x71ee, (q15_t)0xc5aa, (q15_t)0x71eb, (q15_t)0xc5a4, (q15_t)0x71e9, (q15_t)0xc59f, (q15_t)0x71e6, (q15_t)0xc599, - (q15_t)0x71e3, (q15_t)0xc594, (q15_t)0x71e0, (q15_t)0xc58e, (q15_t)0x71dd, (q15_t)0xc588, (q15_t)0x71da, (q15_t)0xc583, - (q15_t)0x71d7, (q15_t)0xc57d, (q15_t)0x71d4, (q15_t)0xc578, (q15_t)0x71d2, (q15_t)0xc572, (q15_t)0x71cf, (q15_t)0xc56c, - (q15_t)0x71cc, (q15_t)0xc567, (q15_t)0x71c9, (q15_t)0xc561, (q15_t)0x71c6, (q15_t)0xc55c, (q15_t)0x71c3, (q15_t)0xc556, - (q15_t)0x71c0, (q15_t)0xc551, (q15_t)0x71bd, (q15_t)0xc54b, (q15_t)0x71bb, (q15_t)0xc545, (q15_t)0x71b8, (q15_t)0xc540, - (q15_t)0x71b5, (q15_t)0xc53a, (q15_t)0x71b2, (q15_t)0xc535, (q15_t)0x71af, (q15_t)0xc52f, (q15_t)0x71ac, (q15_t)0xc529, - (q15_t)0x71a9, (q15_t)0xc524, (q15_t)0x71a6, (q15_t)0xc51e, (q15_t)0x71a3, (q15_t)0xc519, (q15_t)0x71a1, (q15_t)0xc513, - (q15_t)0x719e, (q15_t)0xc50e, (q15_t)0x719b, (q15_t)0xc508, (q15_t)0x7198, (q15_t)0xc502, (q15_t)0x7195, (q15_t)0xc4fd, - (q15_t)0x7192, (q15_t)0xc4f7, (q15_t)0x718f, (q15_t)0xc4f2, (q15_t)0x718c, (q15_t)0xc4ec, (q15_t)0x7189, (q15_t)0xc4e7, - (q15_t)0x7186, (q15_t)0xc4e1, (q15_t)0x7184, (q15_t)0xc4db, (q15_t)0x7181, (q15_t)0xc4d6, (q15_t)0x717e, (q15_t)0xc4d0, - (q15_t)0x717b, (q15_t)0xc4cb, (q15_t)0x7178, (q15_t)0xc4c5, (q15_t)0x7175, (q15_t)0xc4c0, (q15_t)0x7172, (q15_t)0xc4ba, - (q15_t)0x716f, (q15_t)0xc4b4, (q15_t)0x716c, (q15_t)0xc4af, (q15_t)0x7169, (q15_t)0xc4a9, (q15_t)0x7167, (q15_t)0xc4a4, - (q15_t)0x7164, (q15_t)0xc49e, (q15_t)0x7161, (q15_t)0xc499, (q15_t)0x715e, (q15_t)0xc493, (q15_t)0x715b, (q15_t)0xc48d, - (q15_t)0x7158, (q15_t)0xc488, (q15_t)0x7155, (q15_t)0xc482, (q15_t)0x7152, (q15_t)0xc47d, (q15_t)0x714f, (q15_t)0xc477, - (q15_t)0x714c, (q15_t)0xc472, (q15_t)0x7149, (q15_t)0xc46c, (q15_t)0x7146, (q15_t)0xc467, (q15_t)0x7143, (q15_t)0xc461, - (q15_t)0x7141, (q15_t)0xc45b, (q15_t)0x713e, (q15_t)0xc456, (q15_t)0x713b, (q15_t)0xc450, (q15_t)0x7138, (q15_t)0xc44b, - (q15_t)0x7135, (q15_t)0xc445, (q15_t)0x7132, (q15_t)0xc440, (q15_t)0x712f, (q15_t)0xc43a, (q15_t)0x712c, (q15_t)0xc434, - (q15_t)0x7129, (q15_t)0xc42f, (q15_t)0x7126, (q15_t)0xc429, (q15_t)0x7123, (q15_t)0xc424, (q15_t)0x7120, (q15_t)0xc41e, - (q15_t)0x711d, (q15_t)0xc419, (q15_t)0x711a, (q15_t)0xc413, (q15_t)0x7117, (q15_t)0xc40e, (q15_t)0x7114, (q15_t)0xc408, - (q15_t)0x7112, (q15_t)0xc403, (q15_t)0x710f, (q15_t)0xc3fd, (q15_t)0x710c, (q15_t)0xc3f7, (q15_t)0x7109, (q15_t)0xc3f2, - (q15_t)0x7106, (q15_t)0xc3ec, (q15_t)0x7103, (q15_t)0xc3e7, (q15_t)0x7100, (q15_t)0xc3e1, (q15_t)0x70fd, (q15_t)0xc3dc, - (q15_t)0x70fa, (q15_t)0xc3d6, (q15_t)0x70f7, (q15_t)0xc3d1, (q15_t)0x70f4, (q15_t)0xc3cb, (q15_t)0x70f1, (q15_t)0xc3c5, - (q15_t)0x70ee, (q15_t)0xc3c0, (q15_t)0x70eb, (q15_t)0xc3ba, (q15_t)0x70e8, (q15_t)0xc3b5, (q15_t)0x70e5, (q15_t)0xc3af, - (q15_t)0x70e2, (q15_t)0xc3aa, (q15_t)0x70df, (q15_t)0xc3a4, (q15_t)0x70dc, (q15_t)0xc39f, (q15_t)0x70d9, (q15_t)0xc399, - (q15_t)0x70d6, (q15_t)0xc394, (q15_t)0x70d3, (q15_t)0xc38e, (q15_t)0x70d1, (q15_t)0xc389, (q15_t)0x70ce, (q15_t)0xc383, - (q15_t)0x70cb, (q15_t)0xc37d, (q15_t)0x70c8, (q15_t)0xc378, (q15_t)0x70c5, (q15_t)0xc372, (q15_t)0x70c2, (q15_t)0xc36d, - (q15_t)0x70bf, (q15_t)0xc367, (q15_t)0x70bc, (q15_t)0xc362, (q15_t)0x70b9, (q15_t)0xc35c, (q15_t)0x70b6, (q15_t)0xc357, - (q15_t)0x70b3, (q15_t)0xc351, (q15_t)0x70b0, (q15_t)0xc34c, (q15_t)0x70ad, (q15_t)0xc346, (q15_t)0x70aa, (q15_t)0xc341, - (q15_t)0x70a7, (q15_t)0xc33b, (q15_t)0x70a4, (q15_t)0xc336, (q15_t)0x70a1, (q15_t)0xc330, (q15_t)0x709e, (q15_t)0xc32a, - (q15_t)0x709b, (q15_t)0xc325, (q15_t)0x7098, (q15_t)0xc31f, (q15_t)0x7095, (q15_t)0xc31a, (q15_t)0x7092, (q15_t)0xc314, - (q15_t)0x708f, (q15_t)0xc30f, (q15_t)0x708c, (q15_t)0xc309, (q15_t)0x7089, (q15_t)0xc304, (q15_t)0x7086, (q15_t)0xc2fe, - (q15_t)0x7083, (q15_t)0xc2f9, (q15_t)0x7080, (q15_t)0xc2f3, (q15_t)0x707d, (q15_t)0xc2ee, (q15_t)0x707a, (q15_t)0xc2e8, - (q15_t)0x7077, (q15_t)0xc2e3, (q15_t)0x7074, (q15_t)0xc2dd, (q15_t)0x7071, (q15_t)0xc2d8, (q15_t)0x706e, (q15_t)0xc2d2, - (q15_t)0x706b, (q15_t)0xc2cd, (q15_t)0x7068, (q15_t)0xc2c7, (q15_t)0x7065, (q15_t)0xc2c2, (q15_t)0x7062, (q15_t)0xc2bc, - (q15_t)0x705f, (q15_t)0xc2b7, (q15_t)0x705c, (q15_t)0xc2b1, (q15_t)0x7059, (q15_t)0xc2ab, (q15_t)0x7056, (q15_t)0xc2a6, - (q15_t)0x7053, (q15_t)0xc2a0, (q15_t)0x7050, (q15_t)0xc29b, (q15_t)0x704d, (q15_t)0xc295, (q15_t)0x704a, (q15_t)0xc290, - (q15_t)0x7047, (q15_t)0xc28a, (q15_t)0x7044, (q15_t)0xc285, (q15_t)0x7041, (q15_t)0xc27f, (q15_t)0x703e, (q15_t)0xc27a, - (q15_t)0x703b, (q15_t)0xc274, (q15_t)0x7038, (q15_t)0xc26f, (q15_t)0x7035, (q15_t)0xc269, (q15_t)0x7032, (q15_t)0xc264, - (q15_t)0x702f, (q15_t)0xc25e, (q15_t)0x702c, (q15_t)0xc259, (q15_t)0x7029, (q15_t)0xc253, (q15_t)0x7026, (q15_t)0xc24e, - (q15_t)0x7023, (q15_t)0xc248, (q15_t)0x7020, (q15_t)0xc243, (q15_t)0x701d, (q15_t)0xc23d, (q15_t)0x7019, (q15_t)0xc238, - (q15_t)0x7016, (q15_t)0xc232, (q15_t)0x7013, (q15_t)0xc22d, (q15_t)0x7010, (q15_t)0xc227, (q15_t)0x700d, (q15_t)0xc222, - (q15_t)0x700a, (q15_t)0xc21c, (q15_t)0x7007, (q15_t)0xc217, (q15_t)0x7004, (q15_t)0xc211, (q15_t)0x7001, (q15_t)0xc20c, - (q15_t)0x6ffe, (q15_t)0xc206, (q15_t)0x6ffb, (q15_t)0xc201, (q15_t)0x6ff8, (q15_t)0xc1fb, (q15_t)0x6ff5, (q15_t)0xc1f6, - (q15_t)0x6ff2, (q15_t)0xc1f0, (q15_t)0x6fef, (q15_t)0xc1eb, (q15_t)0x6fec, (q15_t)0xc1e5, (q15_t)0x6fe9, (q15_t)0xc1e0, - (q15_t)0x6fe6, (q15_t)0xc1da, (q15_t)0x6fe3, (q15_t)0xc1d5, (q15_t)0x6fe0, (q15_t)0xc1cf, (q15_t)0x6fdd, (q15_t)0xc1ca, - (q15_t)0x6fda, (q15_t)0xc1c4, (q15_t)0x6fd6, (q15_t)0xc1bf, (q15_t)0x6fd3, (q15_t)0xc1b9, (q15_t)0x6fd0, (q15_t)0xc1b4, - (q15_t)0x6fcd, (q15_t)0xc1ae, (q15_t)0x6fca, (q15_t)0xc1a9, (q15_t)0x6fc7, (q15_t)0xc1a3, (q15_t)0x6fc4, (q15_t)0xc19e, - (q15_t)0x6fc1, (q15_t)0xc198, (q15_t)0x6fbe, (q15_t)0xc193, (q15_t)0x6fbb, (q15_t)0xc18d, (q15_t)0x6fb8, (q15_t)0xc188, - (q15_t)0x6fb5, (q15_t)0xc183, (q15_t)0x6fb2, (q15_t)0xc17d, (q15_t)0x6faf, (q15_t)0xc178, (q15_t)0x6fac, (q15_t)0xc172, - (q15_t)0x6fa9, (q15_t)0xc16d, (q15_t)0x6fa5, (q15_t)0xc167, (q15_t)0x6fa2, (q15_t)0xc162, (q15_t)0x6f9f, (q15_t)0xc15c, - (q15_t)0x6f9c, (q15_t)0xc157, (q15_t)0x6f99, (q15_t)0xc151, (q15_t)0x6f96, (q15_t)0xc14c, (q15_t)0x6f93, (q15_t)0xc146, - (q15_t)0x6f90, (q15_t)0xc141, (q15_t)0x6f8d, (q15_t)0xc13b, (q15_t)0x6f8a, (q15_t)0xc136, (q15_t)0x6f87, (q15_t)0xc130, - (q15_t)0x6f84, (q15_t)0xc12b, (q15_t)0x6f81, (q15_t)0xc125, (q15_t)0x6f7d, (q15_t)0xc120, (q15_t)0x6f7a, (q15_t)0xc11a, - (q15_t)0x6f77, (q15_t)0xc115, (q15_t)0x6f74, (q15_t)0xc10f, (q15_t)0x6f71, (q15_t)0xc10a, (q15_t)0x6f6e, (q15_t)0xc105, - (q15_t)0x6f6b, (q15_t)0xc0ff, (q15_t)0x6f68, (q15_t)0xc0fa, (q15_t)0x6f65, (q15_t)0xc0f4, (q15_t)0x6f62, (q15_t)0xc0ef, - (q15_t)0x6f5f, (q15_t)0xc0e9, (q15_t)0x6f5b, (q15_t)0xc0e4, (q15_t)0x6f58, (q15_t)0xc0de, (q15_t)0x6f55, (q15_t)0xc0d9, - (q15_t)0x6f52, (q15_t)0xc0d3, (q15_t)0x6f4f, (q15_t)0xc0ce, (q15_t)0x6f4c, (q15_t)0xc0c8, (q15_t)0x6f49, (q15_t)0xc0c3, - (q15_t)0x6f46, (q15_t)0xc0bd, (q15_t)0x6f43, (q15_t)0xc0b8, (q15_t)0x6f3f, (q15_t)0xc0b3, (q15_t)0x6f3c, (q15_t)0xc0ad, - (q15_t)0x6f39, (q15_t)0xc0a8, (q15_t)0x6f36, (q15_t)0xc0a2, (q15_t)0x6f33, (q15_t)0xc09d, (q15_t)0x6f30, (q15_t)0xc097, - (q15_t)0x6f2d, (q15_t)0xc092, (q15_t)0x6f2a, (q15_t)0xc08c, (q15_t)0x6f27, (q15_t)0xc087, (q15_t)0x6f23, (q15_t)0xc081, - (q15_t)0x6f20, (q15_t)0xc07c, (q15_t)0x6f1d, (q15_t)0xc077, (q15_t)0x6f1a, (q15_t)0xc071, (q15_t)0x6f17, (q15_t)0xc06c, - (q15_t)0x6f14, (q15_t)0xc066, (q15_t)0x6f11, (q15_t)0xc061, (q15_t)0x6f0e, (q15_t)0xc05b, (q15_t)0x6f0b, (q15_t)0xc056, - (q15_t)0x6f07, (q15_t)0xc050, (q15_t)0x6f04, (q15_t)0xc04b, (q15_t)0x6f01, (q15_t)0xc045, (q15_t)0x6efe, (q15_t)0xc040, - (q15_t)0x6efb, (q15_t)0xc03b, (q15_t)0x6ef8, (q15_t)0xc035, (q15_t)0x6ef5, (q15_t)0xc030, (q15_t)0x6ef1, (q15_t)0xc02a, - (q15_t)0x6eee, (q15_t)0xc025, (q15_t)0x6eeb, (q15_t)0xc01f, (q15_t)0x6ee8, (q15_t)0xc01a, (q15_t)0x6ee5, (q15_t)0xc014, - (q15_t)0x6ee2, (q15_t)0xc00f, (q15_t)0x6edf, (q15_t)0xc00a, (q15_t)0x6edc, (q15_t)0xc004, (q15_t)0x6ed8, (q15_t)0xbfff, - (q15_t)0x6ed5, (q15_t)0xbff9, (q15_t)0x6ed2, (q15_t)0xbff4, (q15_t)0x6ecf, (q15_t)0xbfee, (q15_t)0x6ecc, (q15_t)0xbfe9, - (q15_t)0x6ec9, (q15_t)0xbfe3, (q15_t)0x6ec6, (q15_t)0xbfde, (q15_t)0x6ec2, (q15_t)0xbfd9, (q15_t)0x6ebf, (q15_t)0xbfd3, - (q15_t)0x6ebc, (q15_t)0xbfce, (q15_t)0x6eb9, (q15_t)0xbfc8, (q15_t)0x6eb6, (q15_t)0xbfc3, (q15_t)0x6eb3, (q15_t)0xbfbd, - (q15_t)0x6eaf, (q15_t)0xbfb8, (q15_t)0x6eac, (q15_t)0xbfb3, (q15_t)0x6ea9, (q15_t)0xbfad, (q15_t)0x6ea6, (q15_t)0xbfa8, - (q15_t)0x6ea3, (q15_t)0xbfa2, (q15_t)0x6ea0, (q15_t)0xbf9d, (q15_t)0x6e9c, (q15_t)0xbf97, (q15_t)0x6e99, (q15_t)0xbf92, - (q15_t)0x6e96, (q15_t)0xbf8d, (q15_t)0x6e93, (q15_t)0xbf87, (q15_t)0x6e90, (q15_t)0xbf82, (q15_t)0x6e8d, (q15_t)0xbf7c, - (q15_t)0x6e89, (q15_t)0xbf77, (q15_t)0x6e86, (q15_t)0xbf71, (q15_t)0x6e83, (q15_t)0xbf6c, (q15_t)0x6e80, (q15_t)0xbf67, - (q15_t)0x6e7d, (q15_t)0xbf61, (q15_t)0x6e7a, (q15_t)0xbf5c, (q15_t)0x6e76, (q15_t)0xbf56, (q15_t)0x6e73, (q15_t)0xbf51, - (q15_t)0x6e70, (q15_t)0xbf4b, (q15_t)0x6e6d, (q15_t)0xbf46, (q15_t)0x6e6a, (q15_t)0xbf41, (q15_t)0x6e67, (q15_t)0xbf3b, - (q15_t)0x6e63, (q15_t)0xbf36, (q15_t)0x6e60, (q15_t)0xbf30, (q15_t)0x6e5d, (q15_t)0xbf2b, (q15_t)0x6e5a, (q15_t)0xbf26, - (q15_t)0x6e57, (q15_t)0xbf20, (q15_t)0x6e53, (q15_t)0xbf1b, (q15_t)0x6e50, (q15_t)0xbf15, (q15_t)0x6e4d, (q15_t)0xbf10, - (q15_t)0x6e4a, (q15_t)0xbf0a, (q15_t)0x6e47, (q15_t)0xbf05, (q15_t)0x6e44, (q15_t)0xbf00, (q15_t)0x6e40, (q15_t)0xbefa, - (q15_t)0x6e3d, (q15_t)0xbef5, (q15_t)0x6e3a, (q15_t)0xbeef, (q15_t)0x6e37, (q15_t)0xbeea, (q15_t)0x6e34, (q15_t)0xbee5, - (q15_t)0x6e30, (q15_t)0xbedf, (q15_t)0x6e2d, (q15_t)0xbeda, (q15_t)0x6e2a, (q15_t)0xbed4, (q15_t)0x6e27, (q15_t)0xbecf, - (q15_t)0x6e24, (q15_t)0xbeca, (q15_t)0x6e20, (q15_t)0xbec4, (q15_t)0x6e1d, (q15_t)0xbebf, (q15_t)0x6e1a, (q15_t)0xbeb9, - (q15_t)0x6e17, (q15_t)0xbeb4, (q15_t)0x6e14, (q15_t)0xbeae, (q15_t)0x6e10, (q15_t)0xbea9, (q15_t)0x6e0d, (q15_t)0xbea4, - (q15_t)0x6e0a, (q15_t)0xbe9e, (q15_t)0x6e07, (q15_t)0xbe99, (q15_t)0x6e04, (q15_t)0xbe93, (q15_t)0x6e00, (q15_t)0xbe8e, - (q15_t)0x6dfd, (q15_t)0xbe89, (q15_t)0x6dfa, (q15_t)0xbe83, (q15_t)0x6df7, (q15_t)0xbe7e, (q15_t)0x6df3, (q15_t)0xbe78, - (q15_t)0x6df0, (q15_t)0xbe73, (q15_t)0x6ded, (q15_t)0xbe6e, (q15_t)0x6dea, (q15_t)0xbe68, (q15_t)0x6de7, (q15_t)0xbe63, - (q15_t)0x6de3, (q15_t)0xbe5e, (q15_t)0x6de0, (q15_t)0xbe58, (q15_t)0x6ddd, (q15_t)0xbe53, (q15_t)0x6dda, (q15_t)0xbe4d, - (q15_t)0x6dd6, (q15_t)0xbe48, (q15_t)0x6dd3, (q15_t)0xbe43, (q15_t)0x6dd0, (q15_t)0xbe3d, (q15_t)0x6dcd, (q15_t)0xbe38, - (q15_t)0x6dca, (q15_t)0xbe32, (q15_t)0x6dc6, (q15_t)0xbe2d, (q15_t)0x6dc3, (q15_t)0xbe28, (q15_t)0x6dc0, (q15_t)0xbe22, - (q15_t)0x6dbd, (q15_t)0xbe1d, (q15_t)0x6db9, (q15_t)0xbe17, (q15_t)0x6db6, (q15_t)0xbe12, (q15_t)0x6db3, (q15_t)0xbe0d, - (q15_t)0x6db0, (q15_t)0xbe07, (q15_t)0x6dac, (q15_t)0xbe02, (q15_t)0x6da9, (q15_t)0xbdfd, (q15_t)0x6da6, (q15_t)0xbdf7, - (q15_t)0x6da3, (q15_t)0xbdf2, (q15_t)0x6d9f, (q15_t)0xbdec, (q15_t)0x6d9c, (q15_t)0xbde7, (q15_t)0x6d99, (q15_t)0xbde2, - (q15_t)0x6d96, (q15_t)0xbddc, (q15_t)0x6d92, (q15_t)0xbdd7, (q15_t)0x6d8f, (q15_t)0xbdd1, (q15_t)0x6d8c, (q15_t)0xbdcc, - (q15_t)0x6d89, (q15_t)0xbdc7, (q15_t)0x6d85, (q15_t)0xbdc1, (q15_t)0x6d82, (q15_t)0xbdbc, (q15_t)0x6d7f, (q15_t)0xbdb7, - (q15_t)0x6d7c, (q15_t)0xbdb1, (q15_t)0x6d78, (q15_t)0xbdac, (q15_t)0x6d75, (q15_t)0xbda6, (q15_t)0x6d72, (q15_t)0xbda1, - (q15_t)0x6d6f, (q15_t)0xbd9c, (q15_t)0x6d6b, (q15_t)0xbd96, (q15_t)0x6d68, (q15_t)0xbd91, (q15_t)0x6d65, (q15_t)0xbd8c, - (q15_t)0x6d62, (q15_t)0xbd86, (q15_t)0x6d5e, (q15_t)0xbd81, (q15_t)0x6d5b, (q15_t)0xbd7c, (q15_t)0x6d58, (q15_t)0xbd76, - (q15_t)0x6d55, (q15_t)0xbd71, (q15_t)0x6d51, (q15_t)0xbd6b, (q15_t)0x6d4e, (q15_t)0xbd66, (q15_t)0x6d4b, (q15_t)0xbd61, - (q15_t)0x6d48, (q15_t)0xbd5b, (q15_t)0x6d44, (q15_t)0xbd56, (q15_t)0x6d41, (q15_t)0xbd51, (q15_t)0x6d3e, (q15_t)0xbd4b, - (q15_t)0x6d3a, (q15_t)0xbd46, (q15_t)0x6d37, (q15_t)0xbd40, (q15_t)0x6d34, (q15_t)0xbd3b, (q15_t)0x6d31, (q15_t)0xbd36, - (q15_t)0x6d2d, (q15_t)0xbd30, (q15_t)0x6d2a, (q15_t)0xbd2b, (q15_t)0x6d27, (q15_t)0xbd26, (q15_t)0x6d23, (q15_t)0xbd20, - (q15_t)0x6d20, (q15_t)0xbd1b, (q15_t)0x6d1d, (q15_t)0xbd16, (q15_t)0x6d1a, (q15_t)0xbd10, (q15_t)0x6d16, (q15_t)0xbd0b, - (q15_t)0x6d13, (q15_t)0xbd06, (q15_t)0x6d10, (q15_t)0xbd00, (q15_t)0x6d0c, (q15_t)0xbcfb, (q15_t)0x6d09, (q15_t)0xbcf5, - (q15_t)0x6d06, (q15_t)0xbcf0, (q15_t)0x6d03, (q15_t)0xbceb, (q15_t)0x6cff, (q15_t)0xbce5, (q15_t)0x6cfc, (q15_t)0xbce0, - (q15_t)0x6cf9, (q15_t)0xbcdb, (q15_t)0x6cf5, (q15_t)0xbcd5, (q15_t)0x6cf2, (q15_t)0xbcd0, (q15_t)0x6cef, (q15_t)0xbccb, - (q15_t)0x6cec, (q15_t)0xbcc5, (q15_t)0x6ce8, (q15_t)0xbcc0, (q15_t)0x6ce5, (q15_t)0xbcbb, (q15_t)0x6ce2, (q15_t)0xbcb5, - (q15_t)0x6cde, (q15_t)0xbcb0, (q15_t)0x6cdb, (q15_t)0xbcab, (q15_t)0x6cd8, (q15_t)0xbca5, (q15_t)0x6cd4, (q15_t)0xbca0, - (q15_t)0x6cd1, (q15_t)0xbc9b, (q15_t)0x6cce, (q15_t)0xbc95, (q15_t)0x6cca, (q15_t)0xbc90, (q15_t)0x6cc7, (q15_t)0xbc8b, - (q15_t)0x6cc4, (q15_t)0xbc85, (q15_t)0x6cc1, (q15_t)0xbc80, (q15_t)0x6cbd, (q15_t)0xbc7b, (q15_t)0x6cba, (q15_t)0xbc75, - (q15_t)0x6cb7, (q15_t)0xbc70, (q15_t)0x6cb3, (q15_t)0xbc6b, (q15_t)0x6cb0, (q15_t)0xbc65, (q15_t)0x6cad, (q15_t)0xbc60, - (q15_t)0x6ca9, (q15_t)0xbc5b, (q15_t)0x6ca6, (q15_t)0xbc55, (q15_t)0x6ca3, (q15_t)0xbc50, (q15_t)0x6c9f, (q15_t)0xbc4b, - (q15_t)0x6c9c, (q15_t)0xbc45, (q15_t)0x6c99, (q15_t)0xbc40, (q15_t)0x6c95, (q15_t)0xbc3b, (q15_t)0x6c92, (q15_t)0xbc35, - (q15_t)0x6c8f, (q15_t)0xbc30, (q15_t)0x6c8b, (q15_t)0xbc2b, (q15_t)0x6c88, (q15_t)0xbc25, (q15_t)0x6c85, (q15_t)0xbc20, - (q15_t)0x6c81, (q15_t)0xbc1b, (q15_t)0x6c7e, (q15_t)0xbc15, (q15_t)0x6c7b, (q15_t)0xbc10, (q15_t)0x6c77, (q15_t)0xbc0b, - (q15_t)0x6c74, (q15_t)0xbc05, (q15_t)0x6c71, (q15_t)0xbc00, (q15_t)0x6c6d, (q15_t)0xbbfb, (q15_t)0x6c6a, (q15_t)0xbbf5, - (q15_t)0x6c67, (q15_t)0xbbf0, (q15_t)0x6c63, (q15_t)0xbbeb, (q15_t)0x6c60, (q15_t)0xbbe5, (q15_t)0x6c5d, (q15_t)0xbbe0, - (q15_t)0x6c59, (q15_t)0xbbdb, (q15_t)0x6c56, (q15_t)0xbbd5, (q15_t)0x6c53, (q15_t)0xbbd0, (q15_t)0x6c4f, (q15_t)0xbbcb, - (q15_t)0x6c4c, (q15_t)0xbbc5, (q15_t)0x6c49, (q15_t)0xbbc0, (q15_t)0x6c45, (q15_t)0xbbbb, (q15_t)0x6c42, (q15_t)0xbbb5, - (q15_t)0x6c3f, (q15_t)0xbbb0, (q15_t)0x6c3b, (q15_t)0xbbab, (q15_t)0x6c38, (q15_t)0xbba6, (q15_t)0x6c34, (q15_t)0xbba0, - (q15_t)0x6c31, (q15_t)0xbb9b, (q15_t)0x6c2e, (q15_t)0xbb96, (q15_t)0x6c2a, (q15_t)0xbb90, (q15_t)0x6c27, (q15_t)0xbb8b, - (q15_t)0x6c24, (q15_t)0xbb86, (q15_t)0x6c20, (q15_t)0xbb80, (q15_t)0x6c1d, (q15_t)0xbb7b, (q15_t)0x6c1a, (q15_t)0xbb76, - (q15_t)0x6c16, (q15_t)0xbb70, (q15_t)0x6c13, (q15_t)0xbb6b, (q15_t)0x6c0f, (q15_t)0xbb66, (q15_t)0x6c0c, (q15_t)0xbb61, - (q15_t)0x6c09, (q15_t)0xbb5b, (q15_t)0x6c05, (q15_t)0xbb56, (q15_t)0x6c02, (q15_t)0xbb51, (q15_t)0x6bff, (q15_t)0xbb4b, - (q15_t)0x6bfb, (q15_t)0xbb46, (q15_t)0x6bf8, (q15_t)0xbb41, (q15_t)0x6bf5, (q15_t)0xbb3b, (q15_t)0x6bf1, (q15_t)0xbb36, - (q15_t)0x6bee, (q15_t)0xbb31, (q15_t)0x6bea, (q15_t)0xbb2c, (q15_t)0x6be7, (q15_t)0xbb26, (q15_t)0x6be4, (q15_t)0xbb21, - (q15_t)0x6be0, (q15_t)0xbb1c, (q15_t)0x6bdd, (q15_t)0xbb16, (q15_t)0x6bd9, (q15_t)0xbb11, (q15_t)0x6bd6, (q15_t)0xbb0c, - (q15_t)0x6bd3, (q15_t)0xbb06, (q15_t)0x6bcf, (q15_t)0xbb01, (q15_t)0x6bcc, (q15_t)0xbafc, (q15_t)0x6bc9, (q15_t)0xbaf7, - (q15_t)0x6bc5, (q15_t)0xbaf1, (q15_t)0x6bc2, (q15_t)0xbaec, (q15_t)0x6bbe, (q15_t)0xbae7, (q15_t)0x6bbb, (q15_t)0xbae1, - (q15_t)0x6bb8, (q15_t)0xbadc, (q15_t)0x6bb4, (q15_t)0xbad7, (q15_t)0x6bb1, (q15_t)0xbad2, (q15_t)0x6bad, (q15_t)0xbacc, - (q15_t)0x6baa, (q15_t)0xbac7, (q15_t)0x6ba7, (q15_t)0xbac2, (q15_t)0x6ba3, (q15_t)0xbabc, (q15_t)0x6ba0, (q15_t)0xbab7, - (q15_t)0x6b9c, (q15_t)0xbab2, (q15_t)0x6b99, (q15_t)0xbaad, (q15_t)0x6b96, (q15_t)0xbaa7, (q15_t)0x6b92, (q15_t)0xbaa2, - (q15_t)0x6b8f, (q15_t)0xba9d, (q15_t)0x6b8b, (q15_t)0xba97, (q15_t)0x6b88, (q15_t)0xba92, (q15_t)0x6b85, (q15_t)0xba8d, - (q15_t)0x6b81, (q15_t)0xba88, (q15_t)0x6b7e, (q15_t)0xba82, (q15_t)0x6b7a, (q15_t)0xba7d, (q15_t)0x6b77, (q15_t)0xba78, - (q15_t)0x6b73, (q15_t)0xba73, (q15_t)0x6b70, (q15_t)0xba6d, (q15_t)0x6b6d, (q15_t)0xba68, (q15_t)0x6b69, (q15_t)0xba63, - (q15_t)0x6b66, (q15_t)0xba5d, (q15_t)0x6b62, (q15_t)0xba58, (q15_t)0x6b5f, (q15_t)0xba53, (q15_t)0x6b5c, (q15_t)0xba4e, - (q15_t)0x6b58, (q15_t)0xba48, (q15_t)0x6b55, (q15_t)0xba43, (q15_t)0x6b51, (q15_t)0xba3e, (q15_t)0x6b4e, (q15_t)0xba39, - (q15_t)0x6b4a, (q15_t)0xba33, (q15_t)0x6b47, (q15_t)0xba2e, (q15_t)0x6b44, (q15_t)0xba29, (q15_t)0x6b40, (q15_t)0xba23, - (q15_t)0x6b3d, (q15_t)0xba1e, (q15_t)0x6b39, (q15_t)0xba19, (q15_t)0x6b36, (q15_t)0xba14, (q15_t)0x6b32, (q15_t)0xba0e, - (q15_t)0x6b2f, (q15_t)0xba09, (q15_t)0x6b2c, (q15_t)0xba04, (q15_t)0x6b28, (q15_t)0xb9ff, (q15_t)0x6b25, (q15_t)0xb9f9, - (q15_t)0x6b21, (q15_t)0xb9f4, (q15_t)0x6b1e, (q15_t)0xb9ef, (q15_t)0x6b1a, (q15_t)0xb9ea, (q15_t)0x6b17, (q15_t)0xb9e4, - (q15_t)0x6b13, (q15_t)0xb9df, (q15_t)0x6b10, (q15_t)0xb9da, (q15_t)0x6b0d, (q15_t)0xb9d5, (q15_t)0x6b09, (q15_t)0xb9cf, - (q15_t)0x6b06, (q15_t)0xb9ca, (q15_t)0x6b02, (q15_t)0xb9c5, (q15_t)0x6aff, (q15_t)0xb9c0, (q15_t)0x6afb, (q15_t)0xb9ba, - (q15_t)0x6af8, (q15_t)0xb9b5, (q15_t)0x6af4, (q15_t)0xb9b0, (q15_t)0x6af1, (q15_t)0xb9ab, (q15_t)0x6aee, (q15_t)0xb9a5, - (q15_t)0x6aea, (q15_t)0xb9a0, (q15_t)0x6ae7, (q15_t)0xb99b, (q15_t)0x6ae3, (q15_t)0xb996, (q15_t)0x6ae0, (q15_t)0xb990, - (q15_t)0x6adc, (q15_t)0xb98b, (q15_t)0x6ad9, (q15_t)0xb986, (q15_t)0x6ad5, (q15_t)0xb981, (q15_t)0x6ad2, (q15_t)0xb97b, - (q15_t)0x6ace, (q15_t)0xb976, (q15_t)0x6acb, (q15_t)0xb971, (q15_t)0x6ac8, (q15_t)0xb96c, (q15_t)0x6ac4, (q15_t)0xb966, - (q15_t)0x6ac1, (q15_t)0xb961, (q15_t)0x6abd, (q15_t)0xb95c, (q15_t)0x6aba, (q15_t)0xb957, (q15_t)0x6ab6, (q15_t)0xb951, - (q15_t)0x6ab3, (q15_t)0xb94c, (q15_t)0x6aaf, (q15_t)0xb947, (q15_t)0x6aac, (q15_t)0xb942, (q15_t)0x6aa8, (q15_t)0xb93c, - (q15_t)0x6aa5, (q15_t)0xb937, (q15_t)0x6aa1, (q15_t)0xb932, (q15_t)0x6a9e, (q15_t)0xb92d, (q15_t)0x6a9a, (q15_t)0xb928, - (q15_t)0x6a97, (q15_t)0xb922, (q15_t)0x6a93, (q15_t)0xb91d, (q15_t)0x6a90, (q15_t)0xb918, (q15_t)0x6a8c, (q15_t)0xb913, - (q15_t)0x6a89, (q15_t)0xb90d, (q15_t)0x6a86, (q15_t)0xb908, (q15_t)0x6a82, (q15_t)0xb903, (q15_t)0x6a7f, (q15_t)0xb8fe, - (q15_t)0x6a7b, (q15_t)0xb8f8, (q15_t)0x6a78, (q15_t)0xb8f3, (q15_t)0x6a74, (q15_t)0xb8ee, (q15_t)0x6a71, (q15_t)0xb8e9, - (q15_t)0x6a6d, (q15_t)0xb8e4, (q15_t)0x6a6a, (q15_t)0xb8de, (q15_t)0x6a66, (q15_t)0xb8d9, (q15_t)0x6a63, (q15_t)0xb8d4, - (q15_t)0x6a5f, (q15_t)0xb8cf, (q15_t)0x6a5c, (q15_t)0xb8c9, (q15_t)0x6a58, (q15_t)0xb8c4, (q15_t)0x6a55, (q15_t)0xb8bf, - (q15_t)0x6a51, (q15_t)0xb8ba, (q15_t)0x6a4e, (q15_t)0xb8b5, (q15_t)0x6a4a, (q15_t)0xb8af, (q15_t)0x6a47, (q15_t)0xb8aa, - (q15_t)0x6a43, (q15_t)0xb8a5, (q15_t)0x6a40, (q15_t)0xb8a0, (q15_t)0x6a3c, (q15_t)0xb89b, (q15_t)0x6a39, (q15_t)0xb895, - (q15_t)0x6a35, (q15_t)0xb890, (q15_t)0x6a32, (q15_t)0xb88b, (q15_t)0x6a2e, (q15_t)0xb886, (q15_t)0x6a2b, (q15_t)0xb880, - (q15_t)0x6a27, (q15_t)0xb87b, (q15_t)0x6a24, (q15_t)0xb876, (q15_t)0x6a20, (q15_t)0xb871, (q15_t)0x6a1d, (q15_t)0xb86c, - (q15_t)0x6a19, (q15_t)0xb866, (q15_t)0x6a16, (q15_t)0xb861, (q15_t)0x6a12, (q15_t)0xb85c, (q15_t)0x6a0e, (q15_t)0xb857, - (q15_t)0x6a0b, (q15_t)0xb852, (q15_t)0x6a07, (q15_t)0xb84c, (q15_t)0x6a04, (q15_t)0xb847, (q15_t)0x6a00, (q15_t)0xb842, - (q15_t)0x69fd, (q15_t)0xb83d, (q15_t)0x69f9, (q15_t)0xb838, (q15_t)0x69f6, (q15_t)0xb832, (q15_t)0x69f2, (q15_t)0xb82d, - (q15_t)0x69ef, (q15_t)0xb828, (q15_t)0x69eb, (q15_t)0xb823, (q15_t)0x69e8, (q15_t)0xb81e, (q15_t)0x69e4, (q15_t)0xb818, - (q15_t)0x69e1, (q15_t)0xb813, (q15_t)0x69dd, (q15_t)0xb80e, (q15_t)0x69da, (q15_t)0xb809, (q15_t)0x69d6, (q15_t)0xb804, - (q15_t)0x69d3, (q15_t)0xb7fe, (q15_t)0x69cf, (q15_t)0xb7f9, (q15_t)0x69cb, (q15_t)0xb7f4, (q15_t)0x69c8, (q15_t)0xb7ef, - (q15_t)0x69c4, (q15_t)0xb7ea, (q15_t)0x69c1, (q15_t)0xb7e4, (q15_t)0x69bd, (q15_t)0xb7df, (q15_t)0x69ba, (q15_t)0xb7da, - (q15_t)0x69b6, (q15_t)0xb7d5, (q15_t)0x69b3, (q15_t)0xb7d0, (q15_t)0x69af, (q15_t)0xb7ca, (q15_t)0x69ac, (q15_t)0xb7c5, - (q15_t)0x69a8, (q15_t)0xb7c0, (q15_t)0x69a5, (q15_t)0xb7bb, (q15_t)0x69a1, (q15_t)0xb7b6, (q15_t)0x699d, (q15_t)0xb7b1, - (q15_t)0x699a, (q15_t)0xb7ab, (q15_t)0x6996, (q15_t)0xb7a6, (q15_t)0x6993, (q15_t)0xb7a1, (q15_t)0x698f, (q15_t)0xb79c, - (q15_t)0x698c, (q15_t)0xb797, (q15_t)0x6988, (q15_t)0xb791, (q15_t)0x6985, (q15_t)0xb78c, (q15_t)0x6981, (q15_t)0xb787, - (q15_t)0x697d, (q15_t)0xb782, (q15_t)0x697a, (q15_t)0xb77d, (q15_t)0x6976, (q15_t)0xb778, (q15_t)0x6973, (q15_t)0xb772, - (q15_t)0x696f, (q15_t)0xb76d, (q15_t)0x696c, (q15_t)0xb768, (q15_t)0x6968, (q15_t)0xb763, (q15_t)0x6964, (q15_t)0xb75e, - (q15_t)0x6961, (q15_t)0xb758, (q15_t)0x695d, (q15_t)0xb753, (q15_t)0x695a, (q15_t)0xb74e, (q15_t)0x6956, (q15_t)0xb749, - (q15_t)0x6953, (q15_t)0xb744, (q15_t)0x694f, (q15_t)0xb73f, (q15_t)0x694b, (q15_t)0xb739, (q15_t)0x6948, (q15_t)0xb734, - (q15_t)0x6944, (q15_t)0xb72f, (q15_t)0x6941, (q15_t)0xb72a, (q15_t)0x693d, (q15_t)0xb725, (q15_t)0x693a, (q15_t)0xb720, - (q15_t)0x6936, (q15_t)0xb71a, (q15_t)0x6932, (q15_t)0xb715, (q15_t)0x692f, (q15_t)0xb710, (q15_t)0x692b, (q15_t)0xb70b, - (q15_t)0x6928, (q15_t)0xb706, (q15_t)0x6924, (q15_t)0xb701, (q15_t)0x6921, (q15_t)0xb6fb, (q15_t)0x691d, (q15_t)0xb6f6, - (q15_t)0x6919, (q15_t)0xb6f1, (q15_t)0x6916, (q15_t)0xb6ec, (q15_t)0x6912, (q15_t)0xb6e7, (q15_t)0x690f, (q15_t)0xb6e2, - (q15_t)0x690b, (q15_t)0xb6dd, (q15_t)0x6907, (q15_t)0xb6d7, (q15_t)0x6904, (q15_t)0xb6d2, (q15_t)0x6900, (q15_t)0xb6cd, - (q15_t)0x68fd, (q15_t)0xb6c8, (q15_t)0x68f9, (q15_t)0xb6c3, (q15_t)0x68f5, (q15_t)0xb6be, (q15_t)0x68f2, (q15_t)0xb6b8, - (q15_t)0x68ee, (q15_t)0xb6b3, (q15_t)0x68eb, (q15_t)0xb6ae, (q15_t)0x68e7, (q15_t)0xb6a9, (q15_t)0x68e3, (q15_t)0xb6a4, - (q15_t)0x68e0, (q15_t)0xb69f, (q15_t)0x68dc, (q15_t)0xb69a, (q15_t)0x68d9, (q15_t)0xb694, (q15_t)0x68d5, (q15_t)0xb68f, - (q15_t)0x68d1, (q15_t)0xb68a, (q15_t)0x68ce, (q15_t)0xb685, (q15_t)0x68ca, (q15_t)0xb680, (q15_t)0x68c7, (q15_t)0xb67b, - (q15_t)0x68c3, (q15_t)0xb676, (q15_t)0x68bf, (q15_t)0xb670, (q15_t)0x68bc, (q15_t)0xb66b, (q15_t)0x68b8, (q15_t)0xb666, - (q15_t)0x68b5, (q15_t)0xb661, (q15_t)0x68b1, (q15_t)0xb65c, (q15_t)0x68ad, (q15_t)0xb657, (q15_t)0x68aa, (q15_t)0xb652, - (q15_t)0x68a6, (q15_t)0xb64c, (q15_t)0x68a3, (q15_t)0xb647, (q15_t)0x689f, (q15_t)0xb642, (q15_t)0x689b, (q15_t)0xb63d, - (q15_t)0x6898, (q15_t)0xb638, (q15_t)0x6894, (q15_t)0xb633, (q15_t)0x6890, (q15_t)0xb62e, (q15_t)0x688d, (q15_t)0xb628, - (q15_t)0x6889, (q15_t)0xb623, (q15_t)0x6886, (q15_t)0xb61e, (q15_t)0x6882, (q15_t)0xb619, (q15_t)0x687e, (q15_t)0xb614, - (q15_t)0x687b, (q15_t)0xb60f, (q15_t)0x6877, (q15_t)0xb60a, (q15_t)0x6873, (q15_t)0xb605, (q15_t)0x6870, (q15_t)0xb5ff, - (q15_t)0x686c, (q15_t)0xb5fa, (q15_t)0x6868, (q15_t)0xb5f5, (q15_t)0x6865, (q15_t)0xb5f0, (q15_t)0x6861, (q15_t)0xb5eb, - (q15_t)0x685e, (q15_t)0xb5e6, (q15_t)0x685a, (q15_t)0xb5e1, (q15_t)0x6856, (q15_t)0xb5dc, (q15_t)0x6853, (q15_t)0xb5d6, - (q15_t)0x684f, (q15_t)0xb5d1, (q15_t)0x684b, (q15_t)0xb5cc, (q15_t)0x6848, (q15_t)0xb5c7, (q15_t)0x6844, (q15_t)0xb5c2, - (q15_t)0x6840, (q15_t)0xb5bd, (q15_t)0x683d, (q15_t)0xb5b8, (q15_t)0x6839, (q15_t)0xb5b3, (q15_t)0x6835, (q15_t)0xb5ae, - (q15_t)0x6832, (q15_t)0xb5a8, (q15_t)0x682e, (q15_t)0xb5a3, (q15_t)0x682b, (q15_t)0xb59e, (q15_t)0x6827, (q15_t)0xb599, - (q15_t)0x6823, (q15_t)0xb594, (q15_t)0x6820, (q15_t)0xb58f, (q15_t)0x681c, (q15_t)0xb58a, (q15_t)0x6818, (q15_t)0xb585, - (q15_t)0x6815, (q15_t)0xb57f, (q15_t)0x6811, (q15_t)0xb57a, (q15_t)0x680d, (q15_t)0xb575, (q15_t)0x680a, (q15_t)0xb570, - (q15_t)0x6806, (q15_t)0xb56b, (q15_t)0x6802, (q15_t)0xb566, (q15_t)0x67ff, (q15_t)0xb561, (q15_t)0x67fb, (q15_t)0xb55c, - (q15_t)0x67f7, (q15_t)0xb557, (q15_t)0x67f4, (q15_t)0xb552, (q15_t)0x67f0, (q15_t)0xb54c, (q15_t)0x67ec, (q15_t)0xb547, - (q15_t)0x67e9, (q15_t)0xb542, (q15_t)0x67e5, (q15_t)0xb53d, (q15_t)0x67e1, (q15_t)0xb538, (q15_t)0x67de, (q15_t)0xb533, - (q15_t)0x67da, (q15_t)0xb52e, (q15_t)0x67d6, (q15_t)0xb529, (q15_t)0x67d3, (q15_t)0xb524, (q15_t)0x67cf, (q15_t)0xb51f, - (q15_t)0x67cb, (q15_t)0xb519, (q15_t)0x67c8, (q15_t)0xb514, (q15_t)0x67c4, (q15_t)0xb50f, (q15_t)0x67c0, (q15_t)0xb50a, - (q15_t)0x67bd, (q15_t)0xb505, (q15_t)0x67b9, (q15_t)0xb500, (q15_t)0x67b5, (q15_t)0xb4fb, (q15_t)0x67b2, (q15_t)0xb4f6, - (q15_t)0x67ae, (q15_t)0xb4f1, (q15_t)0x67aa, (q15_t)0xb4ec, (q15_t)0x67a6, (q15_t)0xb4e7, (q15_t)0x67a3, (q15_t)0xb4e1, - (q15_t)0x679f, (q15_t)0xb4dc, (q15_t)0x679b, (q15_t)0xb4d7, (q15_t)0x6798, (q15_t)0xb4d2, (q15_t)0x6794, (q15_t)0xb4cd, - (q15_t)0x6790, (q15_t)0xb4c8, (q15_t)0x678d, (q15_t)0xb4c3, (q15_t)0x6789, (q15_t)0xb4be, (q15_t)0x6785, (q15_t)0xb4b9, - (q15_t)0x6782, (q15_t)0xb4b4, (q15_t)0x677e, (q15_t)0xb4af, (q15_t)0x677a, (q15_t)0xb4aa, (q15_t)0x6776, (q15_t)0xb4a4, - (q15_t)0x6773, (q15_t)0xb49f, (q15_t)0x676f, (q15_t)0xb49a, (q15_t)0x676b, (q15_t)0xb495, (q15_t)0x6768, (q15_t)0xb490, - (q15_t)0x6764, (q15_t)0xb48b, (q15_t)0x6760, (q15_t)0xb486, (q15_t)0x675d, (q15_t)0xb481, (q15_t)0x6759, (q15_t)0xb47c, - (q15_t)0x6755, (q15_t)0xb477, (q15_t)0x6751, (q15_t)0xb472, (q15_t)0x674e, (q15_t)0xb46d, (q15_t)0x674a, (q15_t)0xb468, - (q15_t)0x6746, (q15_t)0xb462, (q15_t)0x6743, (q15_t)0xb45d, (q15_t)0x673f, (q15_t)0xb458, (q15_t)0x673b, (q15_t)0xb453, - (q15_t)0x6737, (q15_t)0xb44e, (q15_t)0x6734, (q15_t)0xb449, (q15_t)0x6730, (q15_t)0xb444, (q15_t)0x672c, (q15_t)0xb43f, - (q15_t)0x6729, (q15_t)0xb43a, (q15_t)0x6725, (q15_t)0xb435, (q15_t)0x6721, (q15_t)0xb430, (q15_t)0x671d, (q15_t)0xb42b, - (q15_t)0x671a, (q15_t)0xb426, (q15_t)0x6716, (q15_t)0xb421, (q15_t)0x6712, (q15_t)0xb41c, (q15_t)0x670e, (q15_t)0xb417, - (q15_t)0x670b, (q15_t)0xb411, (q15_t)0x6707, (q15_t)0xb40c, (q15_t)0x6703, (q15_t)0xb407, (q15_t)0x6700, (q15_t)0xb402, - (q15_t)0x66fc, (q15_t)0xb3fd, (q15_t)0x66f8, (q15_t)0xb3f8, (q15_t)0x66f4, (q15_t)0xb3f3, (q15_t)0x66f1, (q15_t)0xb3ee, - (q15_t)0x66ed, (q15_t)0xb3e9, (q15_t)0x66e9, (q15_t)0xb3e4, (q15_t)0x66e5, (q15_t)0xb3df, (q15_t)0x66e2, (q15_t)0xb3da, - (q15_t)0x66de, (q15_t)0xb3d5, (q15_t)0x66da, (q15_t)0xb3d0, (q15_t)0x66d6, (q15_t)0xb3cb, (q15_t)0x66d3, (q15_t)0xb3c6, - (q15_t)0x66cf, (q15_t)0xb3c1, (q15_t)0x66cb, (q15_t)0xb3bc, (q15_t)0x66c8, (q15_t)0xb3b7, (q15_t)0x66c4, (q15_t)0xb3b1, - (q15_t)0x66c0, (q15_t)0xb3ac, (q15_t)0x66bc, (q15_t)0xb3a7, (q15_t)0x66b9, (q15_t)0xb3a2, (q15_t)0x66b5, (q15_t)0xb39d, - (q15_t)0x66b1, (q15_t)0xb398, (q15_t)0x66ad, (q15_t)0xb393, (q15_t)0x66aa, (q15_t)0xb38e, (q15_t)0x66a6, (q15_t)0xb389, - (q15_t)0x66a2, (q15_t)0xb384, (q15_t)0x669e, (q15_t)0xb37f, (q15_t)0x669b, (q15_t)0xb37a, (q15_t)0x6697, (q15_t)0xb375, - (q15_t)0x6693, (q15_t)0xb370, (q15_t)0x668f, (q15_t)0xb36b, (q15_t)0x668b, (q15_t)0xb366, (q15_t)0x6688, (q15_t)0xb361, - (q15_t)0x6684, (q15_t)0xb35c, (q15_t)0x6680, (q15_t)0xb357, (q15_t)0x667c, (q15_t)0xb352, (q15_t)0x6679, (q15_t)0xb34d, - (q15_t)0x6675, (q15_t)0xb348, (q15_t)0x6671, (q15_t)0xb343, (q15_t)0x666d, (q15_t)0xb33e, (q15_t)0x666a, (q15_t)0xb339, - (q15_t)0x6666, (q15_t)0xb334, (q15_t)0x6662, (q15_t)0xb32f, (q15_t)0x665e, (q15_t)0xb32a, (q15_t)0x665b, (q15_t)0xb325, - (q15_t)0x6657, (q15_t)0xb31f, (q15_t)0x6653, (q15_t)0xb31a, (q15_t)0x664f, (q15_t)0xb315, (q15_t)0x664b, (q15_t)0xb310, - (q15_t)0x6648, (q15_t)0xb30b, (q15_t)0x6644, (q15_t)0xb306, (q15_t)0x6640, (q15_t)0xb301, (q15_t)0x663c, (q15_t)0xb2fc, - (q15_t)0x6639, (q15_t)0xb2f7, (q15_t)0x6635, (q15_t)0xb2f2, (q15_t)0x6631, (q15_t)0xb2ed, (q15_t)0x662d, (q15_t)0xb2e8, - (q15_t)0x6629, (q15_t)0xb2e3, (q15_t)0x6626, (q15_t)0xb2de, (q15_t)0x6622, (q15_t)0xb2d9, (q15_t)0x661e, (q15_t)0xb2d4, - (q15_t)0x661a, (q15_t)0xb2cf, (q15_t)0x6616, (q15_t)0xb2ca, (q15_t)0x6613, (q15_t)0xb2c5, (q15_t)0x660f, (q15_t)0xb2c0, - (q15_t)0x660b, (q15_t)0xb2bb, (q15_t)0x6607, (q15_t)0xb2b6, (q15_t)0x6603, (q15_t)0xb2b1, (q15_t)0x6600, (q15_t)0xb2ac, - (q15_t)0x65fc, (q15_t)0xb2a7, (q15_t)0x65f8, (q15_t)0xb2a2, (q15_t)0x65f4, (q15_t)0xb29d, (q15_t)0x65f0, (q15_t)0xb298, - (q15_t)0x65ed, (q15_t)0xb293, (q15_t)0x65e9, (q15_t)0xb28e, (q15_t)0x65e5, (q15_t)0xb289, (q15_t)0x65e1, (q15_t)0xb284, - (q15_t)0x65dd, (q15_t)0xb27f, (q15_t)0x65da, (q15_t)0xb27a, (q15_t)0x65d6, (q15_t)0xb275, (q15_t)0x65d2, (q15_t)0xb270, - (q15_t)0x65ce, (q15_t)0xb26b, (q15_t)0x65ca, (q15_t)0xb266, (q15_t)0x65c7, (q15_t)0xb261, (q15_t)0x65c3, (q15_t)0xb25c, - (q15_t)0x65bf, (q15_t)0xb257, (q15_t)0x65bb, (q15_t)0xb252, (q15_t)0x65b7, (q15_t)0xb24d, (q15_t)0x65b4, (q15_t)0xb248, - (q15_t)0x65b0, (q15_t)0xb243, (q15_t)0x65ac, (q15_t)0xb23e, (q15_t)0x65a8, (q15_t)0xb239, (q15_t)0x65a4, (q15_t)0xb234, - (q15_t)0x65a0, (q15_t)0xb22f, (q15_t)0x659d, (q15_t)0xb22a, (q15_t)0x6599, (q15_t)0xb225, (q15_t)0x6595, (q15_t)0xb220, - (q15_t)0x6591, (q15_t)0xb21b, (q15_t)0x658d, (q15_t)0xb216, (q15_t)0x658a, (q15_t)0xb211, (q15_t)0x6586, (q15_t)0xb20c, - (q15_t)0x6582, (q15_t)0xb207, (q15_t)0x657e, (q15_t)0xb202, (q15_t)0x657a, (q15_t)0xb1fd, (q15_t)0x6576, (q15_t)0xb1f8, - (q15_t)0x6573, (q15_t)0xb1f3, (q15_t)0x656f, (q15_t)0xb1ee, (q15_t)0x656b, (q15_t)0xb1e9, (q15_t)0x6567, (q15_t)0xb1e4, - (q15_t)0x6563, (q15_t)0xb1df, (q15_t)0x655f, (q15_t)0xb1da, (q15_t)0x655c, (q15_t)0xb1d6, (q15_t)0x6558, (q15_t)0xb1d1, - (q15_t)0x6554, (q15_t)0xb1cc, (q15_t)0x6550, (q15_t)0xb1c7, (q15_t)0x654c, (q15_t)0xb1c2, (q15_t)0x6548, (q15_t)0xb1bd, - (q15_t)0x6545, (q15_t)0xb1b8, (q15_t)0x6541, (q15_t)0xb1b3, (q15_t)0x653d, (q15_t)0xb1ae, (q15_t)0x6539, (q15_t)0xb1a9, - (q15_t)0x6535, (q15_t)0xb1a4, (q15_t)0x6531, (q15_t)0xb19f, (q15_t)0x652d, (q15_t)0xb19a, (q15_t)0x652a, (q15_t)0xb195, - (q15_t)0x6526, (q15_t)0xb190, (q15_t)0x6522, (q15_t)0xb18b, (q15_t)0x651e, (q15_t)0xb186, (q15_t)0x651a, (q15_t)0xb181, - (q15_t)0x6516, (q15_t)0xb17c, (q15_t)0x6513, (q15_t)0xb177, (q15_t)0x650f, (q15_t)0xb172, (q15_t)0x650b, (q15_t)0xb16d, - (q15_t)0x6507, (q15_t)0xb168, (q15_t)0x6503, (q15_t)0xb163, (q15_t)0x64ff, (q15_t)0xb15e, (q15_t)0x64fb, (q15_t)0xb159, - (q15_t)0x64f7, (q15_t)0xb154, (q15_t)0x64f4, (q15_t)0xb14f, (q15_t)0x64f0, (q15_t)0xb14a, (q15_t)0x64ec, (q15_t)0xb146, - (q15_t)0x64e8, (q15_t)0xb141, (q15_t)0x64e4, (q15_t)0xb13c, (q15_t)0x64e0, (q15_t)0xb137, (q15_t)0x64dc, (q15_t)0xb132, - (q15_t)0x64d9, (q15_t)0xb12d, (q15_t)0x64d5, (q15_t)0xb128, (q15_t)0x64d1, (q15_t)0xb123, (q15_t)0x64cd, (q15_t)0xb11e, - (q15_t)0x64c9, (q15_t)0xb119, (q15_t)0x64c5, (q15_t)0xb114, (q15_t)0x64c1, (q15_t)0xb10f, (q15_t)0x64bd, (q15_t)0xb10a, - (q15_t)0x64ba, (q15_t)0xb105, (q15_t)0x64b6, (q15_t)0xb100, (q15_t)0x64b2, (q15_t)0xb0fb, (q15_t)0x64ae, (q15_t)0xb0f6, - (q15_t)0x64aa, (q15_t)0xb0f1, (q15_t)0x64a6, (q15_t)0xb0ec, (q15_t)0x64a2, (q15_t)0xb0e8, (q15_t)0x649e, (q15_t)0xb0e3, - (q15_t)0x649b, (q15_t)0xb0de, (q15_t)0x6497, (q15_t)0xb0d9, (q15_t)0x6493, (q15_t)0xb0d4, (q15_t)0x648f, (q15_t)0xb0cf, - (q15_t)0x648b, (q15_t)0xb0ca, (q15_t)0x6487, (q15_t)0xb0c5, (q15_t)0x6483, (q15_t)0xb0c0, (q15_t)0x647f, (q15_t)0xb0bb, - (q15_t)0x647b, (q15_t)0xb0b6, (q15_t)0x6478, (q15_t)0xb0b1, (q15_t)0x6474, (q15_t)0xb0ac, (q15_t)0x6470, (q15_t)0xb0a7, - (q15_t)0x646c, (q15_t)0xb0a2, (q15_t)0x6468, (q15_t)0xb09e, (q15_t)0x6464, (q15_t)0xb099, (q15_t)0x6460, (q15_t)0xb094, - (q15_t)0x645c, (q15_t)0xb08f, (q15_t)0x6458, (q15_t)0xb08a, (q15_t)0x6454, (q15_t)0xb085, (q15_t)0x6451, (q15_t)0xb080, - (q15_t)0x644d, (q15_t)0xb07b, (q15_t)0x6449, (q15_t)0xb076, (q15_t)0x6445, (q15_t)0xb071, (q15_t)0x6441, (q15_t)0xb06c, - (q15_t)0x643d, (q15_t)0xb067, (q15_t)0x6439, (q15_t)0xb062, (q15_t)0x6435, (q15_t)0xb05e, (q15_t)0x6431, (q15_t)0xb059, - (q15_t)0x642d, (q15_t)0xb054, (q15_t)0x6429, (q15_t)0xb04f, (q15_t)0x6426, (q15_t)0xb04a, (q15_t)0x6422, (q15_t)0xb045, - (q15_t)0x641e, (q15_t)0xb040, (q15_t)0x641a, (q15_t)0xb03b, (q15_t)0x6416, (q15_t)0xb036, (q15_t)0x6412, (q15_t)0xb031, - (q15_t)0x640e, (q15_t)0xb02c, (q15_t)0x640a, (q15_t)0xb027, (q15_t)0x6406, (q15_t)0xb023, (q15_t)0x6402, (q15_t)0xb01e, - (q15_t)0x63fe, (q15_t)0xb019, (q15_t)0x63fa, (q15_t)0xb014, (q15_t)0x63f7, (q15_t)0xb00f, (q15_t)0x63f3, (q15_t)0xb00a, - (q15_t)0x63ef, (q15_t)0xb005, (q15_t)0x63eb, (q15_t)0xb000, (q15_t)0x63e7, (q15_t)0xaffb, (q15_t)0x63e3, (q15_t)0xaff6, - (q15_t)0x63df, (q15_t)0xaff1, (q15_t)0x63db, (q15_t)0xafed, (q15_t)0x63d7, (q15_t)0xafe8, (q15_t)0x63d3, (q15_t)0xafe3, - (q15_t)0x63cf, (q15_t)0xafde, (q15_t)0x63cb, (q15_t)0xafd9, (q15_t)0x63c7, (q15_t)0xafd4, (q15_t)0x63c3, (q15_t)0xafcf, - (q15_t)0x63c0, (q15_t)0xafca, (q15_t)0x63bc, (q15_t)0xafc5, (q15_t)0x63b8, (q15_t)0xafc1, (q15_t)0x63b4, (q15_t)0xafbc, - (q15_t)0x63b0, (q15_t)0xafb7, (q15_t)0x63ac, (q15_t)0xafb2, (q15_t)0x63a8, (q15_t)0xafad, (q15_t)0x63a4, (q15_t)0xafa8, - (q15_t)0x63a0, (q15_t)0xafa3, (q15_t)0x639c, (q15_t)0xaf9e, (q15_t)0x6398, (q15_t)0xaf99, (q15_t)0x6394, (q15_t)0xaf94, - (q15_t)0x6390, (q15_t)0xaf90, (q15_t)0x638c, (q15_t)0xaf8b, (q15_t)0x6388, (q15_t)0xaf86, (q15_t)0x6384, (q15_t)0xaf81, - (q15_t)0x6380, (q15_t)0xaf7c, (q15_t)0x637c, (q15_t)0xaf77, (q15_t)0x6378, (q15_t)0xaf72, (q15_t)0x6375, (q15_t)0xaf6d, - (q15_t)0x6371, (q15_t)0xaf69, (q15_t)0x636d, (q15_t)0xaf64, (q15_t)0x6369, (q15_t)0xaf5f, (q15_t)0x6365, (q15_t)0xaf5a, - (q15_t)0x6361, (q15_t)0xaf55, (q15_t)0x635d, (q15_t)0xaf50, (q15_t)0x6359, (q15_t)0xaf4b, (q15_t)0x6355, (q15_t)0xaf46, - (q15_t)0x6351, (q15_t)0xaf41, (q15_t)0x634d, (q15_t)0xaf3d, (q15_t)0x6349, (q15_t)0xaf38, (q15_t)0x6345, (q15_t)0xaf33, - (q15_t)0x6341, (q15_t)0xaf2e, (q15_t)0x633d, (q15_t)0xaf29, (q15_t)0x6339, (q15_t)0xaf24, (q15_t)0x6335, (q15_t)0xaf1f, - (q15_t)0x6331, (q15_t)0xaf1b, (q15_t)0x632d, (q15_t)0xaf16, (q15_t)0x6329, (q15_t)0xaf11, (q15_t)0x6325, (q15_t)0xaf0c, - (q15_t)0x6321, (q15_t)0xaf07, (q15_t)0x631d, (q15_t)0xaf02, (q15_t)0x6319, (q15_t)0xaefd, (q15_t)0x6315, (q15_t)0xaef8, - (q15_t)0x6311, (q15_t)0xaef4, (q15_t)0x630d, (q15_t)0xaeef, (q15_t)0x6309, (q15_t)0xaeea, (q15_t)0x6305, (q15_t)0xaee5, - (q15_t)0x6301, (q15_t)0xaee0, (q15_t)0x62fd, (q15_t)0xaedb, (q15_t)0x62f9, (q15_t)0xaed6, (q15_t)0x62f5, (q15_t)0xaed2, - (q15_t)0x62f2, (q15_t)0xaecd, (q15_t)0x62ee, (q15_t)0xaec8, (q15_t)0x62ea, (q15_t)0xaec3, (q15_t)0x62e6, (q15_t)0xaebe, - (q15_t)0x62e2, (q15_t)0xaeb9, (q15_t)0x62de, (q15_t)0xaeb4, (q15_t)0x62da, (q15_t)0xaeb0, (q15_t)0x62d6, (q15_t)0xaeab, - (q15_t)0x62d2, (q15_t)0xaea6, (q15_t)0x62ce, (q15_t)0xaea1, (q15_t)0x62ca, (q15_t)0xae9c, (q15_t)0x62c6, (q15_t)0xae97, - (q15_t)0x62c2, (q15_t)0xae92, (q15_t)0x62be, (q15_t)0xae8e, (q15_t)0x62ba, (q15_t)0xae89, (q15_t)0x62b6, (q15_t)0xae84, - (q15_t)0x62b2, (q15_t)0xae7f, (q15_t)0x62ae, (q15_t)0xae7a, (q15_t)0x62aa, (q15_t)0xae75, (q15_t)0x62a6, (q15_t)0xae71, - (q15_t)0x62a2, (q15_t)0xae6c, (q15_t)0x629e, (q15_t)0xae67, (q15_t)0x629a, (q15_t)0xae62, (q15_t)0x6296, (q15_t)0xae5d, - (q15_t)0x6292, (q15_t)0xae58, (q15_t)0x628e, (q15_t)0xae54, (q15_t)0x628a, (q15_t)0xae4f, (q15_t)0x6286, (q15_t)0xae4a, - (q15_t)0x6282, (q15_t)0xae45, (q15_t)0x627e, (q15_t)0xae40, (q15_t)0x627a, (q15_t)0xae3b, (q15_t)0x6275, (q15_t)0xae37, - (q15_t)0x6271, (q15_t)0xae32, (q15_t)0x626d, (q15_t)0xae2d, (q15_t)0x6269, (q15_t)0xae28, (q15_t)0x6265, (q15_t)0xae23, - (q15_t)0x6261, (q15_t)0xae1e, (q15_t)0x625d, (q15_t)0xae1a, (q15_t)0x6259, (q15_t)0xae15, (q15_t)0x6255, (q15_t)0xae10, - (q15_t)0x6251, (q15_t)0xae0b, (q15_t)0x624d, (q15_t)0xae06, (q15_t)0x6249, (q15_t)0xae01, (q15_t)0x6245, (q15_t)0xadfd, - (q15_t)0x6241, (q15_t)0xadf8, (q15_t)0x623d, (q15_t)0xadf3, (q15_t)0x6239, (q15_t)0xadee, (q15_t)0x6235, (q15_t)0xade9, - (q15_t)0x6231, (q15_t)0xade4, (q15_t)0x622d, (q15_t)0xade0, (q15_t)0x6229, (q15_t)0xaddb, (q15_t)0x6225, (q15_t)0xadd6, - (q15_t)0x6221, (q15_t)0xadd1, (q15_t)0x621d, (q15_t)0xadcc, (q15_t)0x6219, (q15_t)0xadc8, (q15_t)0x6215, (q15_t)0xadc3, - (q15_t)0x6211, (q15_t)0xadbe, (q15_t)0x620d, (q15_t)0xadb9, (q15_t)0x6209, (q15_t)0xadb4, (q15_t)0x6205, (q15_t)0xadaf, - (q15_t)0x6201, (q15_t)0xadab, (q15_t)0x61fd, (q15_t)0xada6, (q15_t)0x61f9, (q15_t)0xada1, (q15_t)0x61f5, (q15_t)0xad9c, - (q15_t)0x61f1, (q15_t)0xad97, (q15_t)0x61ec, (q15_t)0xad93, (q15_t)0x61e8, (q15_t)0xad8e, (q15_t)0x61e4, (q15_t)0xad89, - (q15_t)0x61e0, (q15_t)0xad84, (q15_t)0x61dc, (q15_t)0xad7f, (q15_t)0x61d8, (q15_t)0xad7b, (q15_t)0x61d4, (q15_t)0xad76, - (q15_t)0x61d0, (q15_t)0xad71, (q15_t)0x61cc, (q15_t)0xad6c, (q15_t)0x61c8, (q15_t)0xad67, (q15_t)0x61c4, (q15_t)0xad63, - (q15_t)0x61c0, (q15_t)0xad5e, (q15_t)0x61bc, (q15_t)0xad59, (q15_t)0x61b8, (q15_t)0xad54, (q15_t)0x61b4, (q15_t)0xad4f, - (q15_t)0x61b0, (q15_t)0xad4b, (q15_t)0x61ac, (q15_t)0xad46, (q15_t)0x61a8, (q15_t)0xad41, (q15_t)0x61a3, (q15_t)0xad3c, - (q15_t)0x619f, (q15_t)0xad37, (q15_t)0x619b, (q15_t)0xad33, (q15_t)0x6197, (q15_t)0xad2e, (q15_t)0x6193, (q15_t)0xad29, - (q15_t)0x618f, (q15_t)0xad24, (q15_t)0x618b, (q15_t)0xad1f, (q15_t)0x6187, (q15_t)0xad1b, (q15_t)0x6183, (q15_t)0xad16, - (q15_t)0x617f, (q15_t)0xad11, (q15_t)0x617b, (q15_t)0xad0c, (q15_t)0x6177, (q15_t)0xad08, (q15_t)0x6173, (q15_t)0xad03, - (q15_t)0x616f, (q15_t)0xacfe, (q15_t)0x616b, (q15_t)0xacf9, (q15_t)0x6166, (q15_t)0xacf4, (q15_t)0x6162, (q15_t)0xacf0, - (q15_t)0x615e, (q15_t)0xaceb, (q15_t)0x615a, (q15_t)0xace6, (q15_t)0x6156, (q15_t)0xace1, (q15_t)0x6152, (q15_t)0xacdd, - (q15_t)0x614e, (q15_t)0xacd8, (q15_t)0x614a, (q15_t)0xacd3, (q15_t)0x6146, (q15_t)0xacce, (q15_t)0x6142, (q15_t)0xacc9, - (q15_t)0x613e, (q15_t)0xacc5, (q15_t)0x613a, (q15_t)0xacc0, (q15_t)0x6135, (q15_t)0xacbb, (q15_t)0x6131, (q15_t)0xacb6, - (q15_t)0x612d, (q15_t)0xacb2, (q15_t)0x6129, (q15_t)0xacad, (q15_t)0x6125, (q15_t)0xaca8, (q15_t)0x6121, (q15_t)0xaca3, - (q15_t)0x611d, (q15_t)0xac9e, (q15_t)0x6119, (q15_t)0xac9a, (q15_t)0x6115, (q15_t)0xac95, (q15_t)0x6111, (q15_t)0xac90, - (q15_t)0x610d, (q15_t)0xac8b, (q15_t)0x6108, (q15_t)0xac87, (q15_t)0x6104, (q15_t)0xac82, (q15_t)0x6100, (q15_t)0xac7d, - (q15_t)0x60fc, (q15_t)0xac78, (q15_t)0x60f8, (q15_t)0xac74, (q15_t)0x60f4, (q15_t)0xac6f, (q15_t)0x60f0, (q15_t)0xac6a, - (q15_t)0x60ec, (q15_t)0xac65, (q15_t)0x60e8, (q15_t)0xac61, (q15_t)0x60e4, (q15_t)0xac5c, (q15_t)0x60df, (q15_t)0xac57, - (q15_t)0x60db, (q15_t)0xac52, (q15_t)0x60d7, (q15_t)0xac4e, (q15_t)0x60d3, (q15_t)0xac49, (q15_t)0x60cf, (q15_t)0xac44, - (q15_t)0x60cb, (q15_t)0xac3f, (q15_t)0x60c7, (q15_t)0xac3b, (q15_t)0x60c3, (q15_t)0xac36, (q15_t)0x60bf, (q15_t)0xac31, - (q15_t)0x60ba, (q15_t)0xac2c, (q15_t)0x60b6, (q15_t)0xac28, (q15_t)0x60b2, (q15_t)0xac23, (q15_t)0x60ae, (q15_t)0xac1e, - (q15_t)0x60aa, (q15_t)0xac19, (q15_t)0x60a6, (q15_t)0xac15, (q15_t)0x60a2, (q15_t)0xac10, (q15_t)0x609e, (q15_t)0xac0b, - (q15_t)0x6099, (q15_t)0xac06, (q15_t)0x6095, (q15_t)0xac02, (q15_t)0x6091, (q15_t)0xabfd, (q15_t)0x608d, (q15_t)0xabf8, - (q15_t)0x6089, (q15_t)0xabf3, (q15_t)0x6085, (q15_t)0xabef, (q15_t)0x6081, (q15_t)0xabea, (q15_t)0x607d, (q15_t)0xabe5, - (q15_t)0x6078, (q15_t)0xabe0, (q15_t)0x6074, (q15_t)0xabdc, (q15_t)0x6070, (q15_t)0xabd7, (q15_t)0x606c, (q15_t)0xabd2, - (q15_t)0x6068, (q15_t)0xabcd, (q15_t)0x6064, (q15_t)0xabc9, (q15_t)0x6060, (q15_t)0xabc4, (q15_t)0x605c, (q15_t)0xabbf, - (q15_t)0x6057, (q15_t)0xabbb, (q15_t)0x6053, (q15_t)0xabb6, (q15_t)0x604f, (q15_t)0xabb1, (q15_t)0x604b, (q15_t)0xabac, - (q15_t)0x6047, (q15_t)0xaba8, (q15_t)0x6043, (q15_t)0xaba3, (q15_t)0x603f, (q15_t)0xab9e, (q15_t)0x603a, (q15_t)0xab99, - (q15_t)0x6036, (q15_t)0xab95, (q15_t)0x6032, (q15_t)0xab90, (q15_t)0x602e, (q15_t)0xab8b, (q15_t)0x602a, (q15_t)0xab87, - (q15_t)0x6026, (q15_t)0xab82, (q15_t)0x6022, (q15_t)0xab7d, (q15_t)0x601d, (q15_t)0xab78, (q15_t)0x6019, (q15_t)0xab74, - (q15_t)0x6015, (q15_t)0xab6f, (q15_t)0x6011, (q15_t)0xab6a, (q15_t)0x600d, (q15_t)0xab66, (q15_t)0x6009, (q15_t)0xab61, - (q15_t)0x6004, (q15_t)0xab5c, (q15_t)0x6000, (q15_t)0xab57, (q15_t)0x5ffc, (q15_t)0xab53, (q15_t)0x5ff8, (q15_t)0xab4e, - (q15_t)0x5ff4, (q15_t)0xab49, (q15_t)0x5ff0, (q15_t)0xab45, (q15_t)0x5fec, (q15_t)0xab40, (q15_t)0x5fe7, (q15_t)0xab3b, - (q15_t)0x5fe3, (q15_t)0xab36, (q15_t)0x5fdf, (q15_t)0xab32, (q15_t)0x5fdb, (q15_t)0xab2d, (q15_t)0x5fd7, (q15_t)0xab28, - (q15_t)0x5fd3, (q15_t)0xab24, (q15_t)0x5fce, (q15_t)0xab1f, (q15_t)0x5fca, (q15_t)0xab1a, (q15_t)0x5fc6, (q15_t)0xab16, - (q15_t)0x5fc2, (q15_t)0xab11, (q15_t)0x5fbe, (q15_t)0xab0c, (q15_t)0x5fba, (q15_t)0xab07, (q15_t)0x5fb5, (q15_t)0xab03, - (q15_t)0x5fb1, (q15_t)0xaafe, (q15_t)0x5fad, (q15_t)0xaaf9, (q15_t)0x5fa9, (q15_t)0xaaf5, (q15_t)0x5fa5, (q15_t)0xaaf0, - (q15_t)0x5fa0, (q15_t)0xaaeb, (q15_t)0x5f9c, (q15_t)0xaae7, (q15_t)0x5f98, (q15_t)0xaae2, (q15_t)0x5f94, (q15_t)0xaadd, - (q15_t)0x5f90, (q15_t)0xaad8, (q15_t)0x5f8c, (q15_t)0xaad4, (q15_t)0x5f87, (q15_t)0xaacf, (q15_t)0x5f83, (q15_t)0xaaca, - (q15_t)0x5f7f, (q15_t)0xaac6, (q15_t)0x5f7b, (q15_t)0xaac1, (q15_t)0x5f77, (q15_t)0xaabc, (q15_t)0x5f72, (q15_t)0xaab8, - (q15_t)0x5f6e, (q15_t)0xaab3, (q15_t)0x5f6a, (q15_t)0xaaae, (q15_t)0x5f66, (q15_t)0xaaaa, (q15_t)0x5f62, (q15_t)0xaaa5, - (q15_t)0x5f5e, (q15_t)0xaaa0, (q15_t)0x5f59, (q15_t)0xaa9c, (q15_t)0x5f55, (q15_t)0xaa97, (q15_t)0x5f51, (q15_t)0xaa92, - (q15_t)0x5f4d, (q15_t)0xaa8e, (q15_t)0x5f49, (q15_t)0xaa89, (q15_t)0x5f44, (q15_t)0xaa84, (q15_t)0x5f40, (q15_t)0xaa7f, - (q15_t)0x5f3c, (q15_t)0xaa7b, (q15_t)0x5f38, (q15_t)0xaa76, (q15_t)0x5f34, (q15_t)0xaa71, (q15_t)0x5f2f, (q15_t)0xaa6d, - (q15_t)0x5f2b, (q15_t)0xaa68, (q15_t)0x5f27, (q15_t)0xaa63, (q15_t)0x5f23, (q15_t)0xaa5f, (q15_t)0x5f1f, (q15_t)0xaa5a, - (q15_t)0x5f1a, (q15_t)0xaa55, (q15_t)0x5f16, (q15_t)0xaa51, (q15_t)0x5f12, (q15_t)0xaa4c, (q15_t)0x5f0e, (q15_t)0xaa47, - (q15_t)0x5f0a, (q15_t)0xaa43, (q15_t)0x5f05, (q15_t)0xaa3e, (q15_t)0x5f01, (q15_t)0xaa39, (q15_t)0x5efd, (q15_t)0xaa35, - (q15_t)0x5ef9, (q15_t)0xaa30, (q15_t)0x5ef5, (q15_t)0xaa2b, (q15_t)0x5ef0, (q15_t)0xaa27, (q15_t)0x5eec, (q15_t)0xaa22, - (q15_t)0x5ee8, (q15_t)0xaa1d, (q15_t)0x5ee4, (q15_t)0xaa19, (q15_t)0x5edf, (q15_t)0xaa14, (q15_t)0x5edb, (q15_t)0xaa10, - (q15_t)0x5ed7, (q15_t)0xaa0b, (q15_t)0x5ed3, (q15_t)0xaa06, (q15_t)0x5ecf, (q15_t)0xaa02, (q15_t)0x5eca, (q15_t)0xa9fd, - (q15_t)0x5ec6, (q15_t)0xa9f8, (q15_t)0x5ec2, (q15_t)0xa9f4, (q15_t)0x5ebe, (q15_t)0xa9ef, (q15_t)0x5eb9, (q15_t)0xa9ea, - (q15_t)0x5eb5, (q15_t)0xa9e6, (q15_t)0x5eb1, (q15_t)0xa9e1, (q15_t)0x5ead, (q15_t)0xa9dc, (q15_t)0x5ea9, (q15_t)0xa9d8, - (q15_t)0x5ea4, (q15_t)0xa9d3, (q15_t)0x5ea0, (q15_t)0xa9ce, (q15_t)0x5e9c, (q15_t)0xa9ca, (q15_t)0x5e98, (q15_t)0xa9c5, - (q15_t)0x5e93, (q15_t)0xa9c0, (q15_t)0x5e8f, (q15_t)0xa9bc, (q15_t)0x5e8b, (q15_t)0xa9b7, (q15_t)0x5e87, (q15_t)0xa9b3, - (q15_t)0x5e82, (q15_t)0xa9ae, (q15_t)0x5e7e, (q15_t)0xa9a9, (q15_t)0x5e7a, (q15_t)0xa9a5, (q15_t)0x5e76, (q15_t)0xa9a0, - (q15_t)0x5e71, (q15_t)0xa99b, (q15_t)0x5e6d, (q15_t)0xa997, (q15_t)0x5e69, (q15_t)0xa992, (q15_t)0x5e65, (q15_t)0xa98d, - (q15_t)0x5e60, (q15_t)0xa989, (q15_t)0x5e5c, (q15_t)0xa984, (q15_t)0x5e58, (q15_t)0xa980, (q15_t)0x5e54, (q15_t)0xa97b, - (q15_t)0x5e50, (q15_t)0xa976, (q15_t)0x5e4b, (q15_t)0xa972, (q15_t)0x5e47, (q15_t)0xa96d, (q15_t)0x5e43, (q15_t)0xa968, - (q15_t)0x5e3f, (q15_t)0xa964, (q15_t)0x5e3a, (q15_t)0xa95f, (q15_t)0x5e36, (q15_t)0xa95b, (q15_t)0x5e32, (q15_t)0xa956, - (q15_t)0x5e2d, (q15_t)0xa951, (q15_t)0x5e29, (q15_t)0xa94d, (q15_t)0x5e25, (q15_t)0xa948, (q15_t)0x5e21, (q15_t)0xa943, - (q15_t)0x5e1c, (q15_t)0xa93f, (q15_t)0x5e18, (q15_t)0xa93a, (q15_t)0x5e14, (q15_t)0xa936, (q15_t)0x5e10, (q15_t)0xa931, - (q15_t)0x5e0b, (q15_t)0xa92c, (q15_t)0x5e07, (q15_t)0xa928, (q15_t)0x5e03, (q15_t)0xa923, (q15_t)0x5dff, (q15_t)0xa91e, - (q15_t)0x5dfa, (q15_t)0xa91a, (q15_t)0x5df6, (q15_t)0xa915, (q15_t)0x5df2, (q15_t)0xa911, (q15_t)0x5dee, (q15_t)0xa90c, - (q15_t)0x5de9, (q15_t)0xa907, (q15_t)0x5de5, (q15_t)0xa903, (q15_t)0x5de1, (q15_t)0xa8fe, (q15_t)0x5ddc, (q15_t)0xa8fa, - (q15_t)0x5dd8, (q15_t)0xa8f5, (q15_t)0x5dd4, (q15_t)0xa8f0, (q15_t)0x5dd0, (q15_t)0xa8ec, (q15_t)0x5dcb, (q15_t)0xa8e7, - (q15_t)0x5dc7, (q15_t)0xa8e3, (q15_t)0x5dc3, (q15_t)0xa8de, (q15_t)0x5dbf, (q15_t)0xa8d9, (q15_t)0x5dba, (q15_t)0xa8d5, - (q15_t)0x5db6, (q15_t)0xa8d0, (q15_t)0x5db2, (q15_t)0xa8cc, (q15_t)0x5dad, (q15_t)0xa8c7, (q15_t)0x5da9, (q15_t)0xa8c2, - (q15_t)0x5da5, (q15_t)0xa8be, (q15_t)0x5da1, (q15_t)0xa8b9, (q15_t)0x5d9c, (q15_t)0xa8b5, (q15_t)0x5d98, (q15_t)0xa8b0, - (q15_t)0x5d94, (q15_t)0xa8ab, (q15_t)0x5d8f, (q15_t)0xa8a7, (q15_t)0x5d8b, (q15_t)0xa8a2, (q15_t)0x5d87, (q15_t)0xa89e, - (q15_t)0x5d83, (q15_t)0xa899, (q15_t)0x5d7e, (q15_t)0xa894, (q15_t)0x5d7a, (q15_t)0xa890, (q15_t)0x5d76, (q15_t)0xa88b, - (q15_t)0x5d71, (q15_t)0xa887, (q15_t)0x5d6d, (q15_t)0xa882, (q15_t)0x5d69, (q15_t)0xa87d, (q15_t)0x5d65, (q15_t)0xa879, - (q15_t)0x5d60, (q15_t)0xa874, (q15_t)0x5d5c, (q15_t)0xa870, (q15_t)0x5d58, (q15_t)0xa86b, (q15_t)0x5d53, (q15_t)0xa867, - (q15_t)0x5d4f, (q15_t)0xa862, (q15_t)0x5d4b, (q15_t)0xa85d, (q15_t)0x5d46, (q15_t)0xa859, (q15_t)0x5d42, (q15_t)0xa854, - (q15_t)0x5d3e, (q15_t)0xa850, (q15_t)0x5d3a, (q15_t)0xa84b, (q15_t)0x5d35, (q15_t)0xa847, (q15_t)0x5d31, (q15_t)0xa842, - (q15_t)0x5d2d, (q15_t)0xa83d, (q15_t)0x5d28, (q15_t)0xa839, (q15_t)0x5d24, (q15_t)0xa834, (q15_t)0x5d20, (q15_t)0xa830, - (q15_t)0x5d1b, (q15_t)0xa82b, (q15_t)0x5d17, (q15_t)0xa827, (q15_t)0x5d13, (q15_t)0xa822, (q15_t)0x5d0e, (q15_t)0xa81d, - (q15_t)0x5d0a, (q15_t)0xa819, (q15_t)0x5d06, (q15_t)0xa814, (q15_t)0x5d01, (q15_t)0xa810, (q15_t)0x5cfd, (q15_t)0xa80b, - (q15_t)0x5cf9, (q15_t)0xa807, (q15_t)0x5cf5, (q15_t)0xa802, (q15_t)0x5cf0, (q15_t)0xa7fd, (q15_t)0x5cec, (q15_t)0xa7f9, - (q15_t)0x5ce8, (q15_t)0xa7f4, (q15_t)0x5ce3, (q15_t)0xa7f0, (q15_t)0x5cdf, (q15_t)0xa7eb, (q15_t)0x5cdb, (q15_t)0xa7e7, - (q15_t)0x5cd6, (q15_t)0xa7e2, (q15_t)0x5cd2, (q15_t)0xa7de, (q15_t)0x5cce, (q15_t)0xa7d9, (q15_t)0x5cc9, (q15_t)0xa7d4, - (q15_t)0x5cc5, (q15_t)0xa7d0, (q15_t)0x5cc1, (q15_t)0xa7cb, (q15_t)0x5cbc, (q15_t)0xa7c7, (q15_t)0x5cb8, (q15_t)0xa7c2, - (q15_t)0x5cb4, (q15_t)0xa7be, (q15_t)0x5caf, (q15_t)0xa7b9, (q15_t)0x5cab, (q15_t)0xa7b5, (q15_t)0x5ca7, (q15_t)0xa7b0, - (q15_t)0x5ca2, (q15_t)0xa7ab, (q15_t)0x5c9e, (q15_t)0xa7a7, (q15_t)0x5c9a, (q15_t)0xa7a2, (q15_t)0x5c95, (q15_t)0xa79e, - (q15_t)0x5c91, (q15_t)0xa799, (q15_t)0x5c8d, (q15_t)0xa795, (q15_t)0x5c88, (q15_t)0xa790, (q15_t)0x5c84, (q15_t)0xa78c, - (q15_t)0x5c80, (q15_t)0xa787, (q15_t)0x5c7b, (q15_t)0xa783, (q15_t)0x5c77, (q15_t)0xa77e, (q15_t)0x5c73, (q15_t)0xa779, - (q15_t)0x5c6e, (q15_t)0xa775, (q15_t)0x5c6a, (q15_t)0xa770, (q15_t)0x5c66, (q15_t)0xa76c, (q15_t)0x5c61, (q15_t)0xa767, - (q15_t)0x5c5d, (q15_t)0xa763, (q15_t)0x5c58, (q15_t)0xa75e, (q15_t)0x5c54, (q15_t)0xa75a, (q15_t)0x5c50, (q15_t)0xa755, - (q15_t)0x5c4b, (q15_t)0xa751, (q15_t)0x5c47, (q15_t)0xa74c, (q15_t)0x5c43, (q15_t)0xa748, (q15_t)0x5c3e, (q15_t)0xa743, - (q15_t)0x5c3a, (q15_t)0xa73f, (q15_t)0x5c36, (q15_t)0xa73a, (q15_t)0x5c31, (q15_t)0xa735, (q15_t)0x5c2d, (q15_t)0xa731, - (q15_t)0x5c29, (q15_t)0xa72c, (q15_t)0x5c24, (q15_t)0xa728, (q15_t)0x5c20, (q15_t)0xa723, (q15_t)0x5c1b, (q15_t)0xa71f, - (q15_t)0x5c17, (q15_t)0xa71a, (q15_t)0x5c13, (q15_t)0xa716, (q15_t)0x5c0e, (q15_t)0xa711, (q15_t)0x5c0a, (q15_t)0xa70d, - (q15_t)0x5c06, (q15_t)0xa708, (q15_t)0x5c01, (q15_t)0xa704, (q15_t)0x5bfd, (q15_t)0xa6ff, (q15_t)0x5bf9, (q15_t)0xa6fb, - (q15_t)0x5bf4, (q15_t)0xa6f6, (q15_t)0x5bf0, (q15_t)0xa6f2, (q15_t)0x5beb, (q15_t)0xa6ed, (q15_t)0x5be7, (q15_t)0xa6e9, - (q15_t)0x5be3, (q15_t)0xa6e4, (q15_t)0x5bde, (q15_t)0xa6e0, (q15_t)0x5bda, (q15_t)0xa6db, (q15_t)0x5bd6, (q15_t)0xa6d7, - (q15_t)0x5bd1, (q15_t)0xa6d2, (q15_t)0x5bcd, (q15_t)0xa6ce, (q15_t)0x5bc8, (q15_t)0xa6c9, (q15_t)0x5bc4, (q15_t)0xa6c5, - (q15_t)0x5bc0, (q15_t)0xa6c0, (q15_t)0x5bbb, (q15_t)0xa6bc, (q15_t)0x5bb7, (q15_t)0xa6b7, (q15_t)0x5bb2, (q15_t)0xa6b3, - (q15_t)0x5bae, (q15_t)0xa6ae, (q15_t)0x5baa, (q15_t)0xa6aa, (q15_t)0x5ba5, (q15_t)0xa6a5, (q15_t)0x5ba1, (q15_t)0xa6a1, - (q15_t)0x5b9d, (q15_t)0xa69c, (q15_t)0x5b98, (q15_t)0xa698, (q15_t)0x5b94, (q15_t)0xa693, (q15_t)0x5b8f, (q15_t)0xa68f, - (q15_t)0x5b8b, (q15_t)0xa68a, (q15_t)0x5b87, (q15_t)0xa686, (q15_t)0x5b82, (q15_t)0xa681, (q15_t)0x5b7e, (q15_t)0xa67d, - (q15_t)0x5b79, (q15_t)0xa678, (q15_t)0x5b75, (q15_t)0xa674, (q15_t)0x5b71, (q15_t)0xa66f, (q15_t)0x5b6c, (q15_t)0xa66b, - (q15_t)0x5b68, (q15_t)0xa666, (q15_t)0x5b63, (q15_t)0xa662, (q15_t)0x5b5f, (q15_t)0xa65d, (q15_t)0x5b5b, (q15_t)0xa659, - (q15_t)0x5b56, (q15_t)0xa654, (q15_t)0x5b52, (q15_t)0xa650, (q15_t)0x5b4d, (q15_t)0xa64b, (q15_t)0x5b49, (q15_t)0xa647, - (q15_t)0x5b45, (q15_t)0xa642, (q15_t)0x5b40, (q15_t)0xa63e, (q15_t)0x5b3c, (q15_t)0xa639, (q15_t)0x5b37, (q15_t)0xa635, - (q15_t)0x5b33, (q15_t)0xa630, (q15_t)0x5b2f, (q15_t)0xa62c, (q15_t)0x5b2a, (q15_t)0xa627, (q15_t)0x5b26, (q15_t)0xa623, - (q15_t)0x5b21, (q15_t)0xa61f, (q15_t)0x5b1d, (q15_t)0xa61a, (q15_t)0x5b19, (q15_t)0xa616, (q15_t)0x5b14, (q15_t)0xa611, - (q15_t)0x5b10, (q15_t)0xa60d, (q15_t)0x5b0b, (q15_t)0xa608, (q15_t)0x5b07, (q15_t)0xa604, (q15_t)0x5b02, (q15_t)0xa5ff, - (q15_t)0x5afe, (q15_t)0xa5fb, (q15_t)0x5afa, (q15_t)0xa5f6, (q15_t)0x5af5, (q15_t)0xa5f2, (q15_t)0x5af1, (q15_t)0xa5ed, - (q15_t)0x5aec, (q15_t)0xa5e9, (q15_t)0x5ae8, (q15_t)0xa5e4, (q15_t)0x5ae4, (q15_t)0xa5e0, (q15_t)0x5adf, (q15_t)0xa5dc, - (q15_t)0x5adb, (q15_t)0xa5d7, (q15_t)0x5ad6, (q15_t)0xa5d3, (q15_t)0x5ad2, (q15_t)0xa5ce, (q15_t)0x5acd, (q15_t)0xa5ca, - (q15_t)0x5ac9, (q15_t)0xa5c5, (q15_t)0x5ac5, (q15_t)0xa5c1, (q15_t)0x5ac0, (q15_t)0xa5bc, (q15_t)0x5abc, (q15_t)0xa5b8, - (q15_t)0x5ab7, (q15_t)0xa5b3, (q15_t)0x5ab3, (q15_t)0xa5af, (q15_t)0x5aae, (q15_t)0xa5aa, (q15_t)0x5aaa, (q15_t)0xa5a6, - (q15_t)0x5aa5, (q15_t)0xa5a2, (q15_t)0x5aa1, (q15_t)0xa59d, (q15_t)0x5a9d, (q15_t)0xa599, (q15_t)0x5a98, (q15_t)0xa594, - (q15_t)0x5a94, (q15_t)0xa590, (q15_t)0x5a8f, (q15_t)0xa58b, (q15_t)0x5a8b, (q15_t)0xa587, (q15_t)0x5a86, (q15_t)0xa582, - (q15_t)0x5a82, (q15_t)0xa57e, (q15_t)0x5a7e, (q15_t)0xa57a, (q15_t)0x5a79, (q15_t)0xa575, (q15_t)0x5a75, (q15_t)0xa571, - (q15_t)0x5a70, (q15_t)0xa56c, (q15_t)0x5a6c, (q15_t)0xa568, (q15_t)0x5a67, (q15_t)0xa563, (q15_t)0x5a63, (q15_t)0xa55f, - (q15_t)0x5a5e, (q15_t)0xa55b, (q15_t)0x5a5a, (q15_t)0xa556, (q15_t)0x5a56, (q15_t)0xa552, (q15_t)0x5a51, (q15_t)0xa54d, - (q15_t)0x5a4d, (q15_t)0xa549, (q15_t)0x5a48, (q15_t)0xa544, (q15_t)0x5a44, (q15_t)0xa540, (q15_t)0x5a3f, (q15_t)0xa53b, - (q15_t)0x5a3b, (q15_t)0xa537, (q15_t)0x5a36, (q15_t)0xa533, (q15_t)0x5a32, (q15_t)0xa52e, (q15_t)0x5a2d, (q15_t)0xa52a, - (q15_t)0x5a29, (q15_t)0xa525, (q15_t)0x5a24, (q15_t)0xa521, (q15_t)0x5a20, (q15_t)0xa51c, (q15_t)0x5a1c, (q15_t)0xa518, - (q15_t)0x5a17, (q15_t)0xa514, (q15_t)0x5a13, (q15_t)0xa50f, (q15_t)0x5a0e, (q15_t)0xa50b, (q15_t)0x5a0a, (q15_t)0xa506, - (q15_t)0x5a05, (q15_t)0xa502, (q15_t)0x5a01, (q15_t)0xa4fe, (q15_t)0x59fc, (q15_t)0xa4f9, (q15_t)0x59f8, (q15_t)0xa4f5, - (q15_t)0x59f3, (q15_t)0xa4f0, (q15_t)0x59ef, (q15_t)0xa4ec, (q15_t)0x59ea, (q15_t)0xa4e7, (q15_t)0x59e6, (q15_t)0xa4e3, - (q15_t)0x59e1, (q15_t)0xa4df, (q15_t)0x59dd, (q15_t)0xa4da, (q15_t)0x59d9, (q15_t)0xa4d6, (q15_t)0x59d4, (q15_t)0xa4d1, - (q15_t)0x59d0, (q15_t)0xa4cd, (q15_t)0x59cb, (q15_t)0xa4c9, (q15_t)0x59c7, (q15_t)0xa4c4, (q15_t)0x59c2, (q15_t)0xa4c0, - (q15_t)0x59be, (q15_t)0xa4bb, (q15_t)0x59b9, (q15_t)0xa4b7, (q15_t)0x59b5, (q15_t)0xa4b3, (q15_t)0x59b0, (q15_t)0xa4ae, - (q15_t)0x59ac, (q15_t)0xa4aa, (q15_t)0x59a7, (q15_t)0xa4a5, (q15_t)0x59a3, (q15_t)0xa4a1, (q15_t)0x599e, (q15_t)0xa49d, - (q15_t)0x599a, (q15_t)0xa498, (q15_t)0x5995, (q15_t)0xa494, (q15_t)0x5991, (q15_t)0xa48f, (q15_t)0x598c, (q15_t)0xa48b, - (q15_t)0x5988, (q15_t)0xa487, (q15_t)0x5983, (q15_t)0xa482, (q15_t)0x597f, (q15_t)0xa47e, (q15_t)0x597a, (q15_t)0xa479, - (q15_t)0x5976, (q15_t)0xa475, (q15_t)0x5971, (q15_t)0xa471, (q15_t)0x596d, (q15_t)0xa46c, (q15_t)0x5968, (q15_t)0xa468, - (q15_t)0x5964, (q15_t)0xa463, (q15_t)0x595f, (q15_t)0xa45f, (q15_t)0x595b, (q15_t)0xa45b, (q15_t)0x5956, (q15_t)0xa456, - (q15_t)0x5952, (q15_t)0xa452, (q15_t)0x594d, (q15_t)0xa44e, (q15_t)0x5949, (q15_t)0xa449, (q15_t)0x5944, (q15_t)0xa445, - (q15_t)0x5940, (q15_t)0xa440, (q15_t)0x593b, (q15_t)0xa43c, (q15_t)0x5937, (q15_t)0xa438, (q15_t)0x5932, (q15_t)0xa433, - (q15_t)0x592e, (q15_t)0xa42f, (q15_t)0x5929, (q15_t)0xa42a, (q15_t)0x5925, (q15_t)0xa426, (q15_t)0x5920, (q15_t)0xa422, - (q15_t)0x591c, (q15_t)0xa41d, (q15_t)0x5917, (q15_t)0xa419, (q15_t)0x5913, (q15_t)0xa415, (q15_t)0x590e, (q15_t)0xa410, - (q15_t)0x590a, (q15_t)0xa40c, (q15_t)0x5905, (q15_t)0xa407, (q15_t)0x5901, (q15_t)0xa403, (q15_t)0x58fc, (q15_t)0xa3ff, - (q15_t)0x58f8, (q15_t)0xa3fa, (q15_t)0x58f3, (q15_t)0xa3f6, (q15_t)0x58ef, (q15_t)0xa3f2, (q15_t)0x58ea, (q15_t)0xa3ed, - (q15_t)0x58e6, (q15_t)0xa3e9, (q15_t)0x58e1, (q15_t)0xa3e5, (q15_t)0x58dd, (q15_t)0xa3e0, (q15_t)0x58d8, (q15_t)0xa3dc, - (q15_t)0x58d4, (q15_t)0xa3d7, (q15_t)0x58cf, (q15_t)0xa3d3, (q15_t)0x58cb, (q15_t)0xa3cf, (q15_t)0x58c6, (q15_t)0xa3ca, - (q15_t)0x58c1, (q15_t)0xa3c6, (q15_t)0x58bd, (q15_t)0xa3c2, (q15_t)0x58b8, (q15_t)0xa3bd, (q15_t)0x58b4, (q15_t)0xa3b9, - (q15_t)0x58af, (q15_t)0xa3b5, (q15_t)0x58ab, (q15_t)0xa3b0, (q15_t)0x58a6, (q15_t)0xa3ac, (q15_t)0x58a2, (q15_t)0xa3a8, - (q15_t)0x589d, (q15_t)0xa3a3, (q15_t)0x5899, (q15_t)0xa39f, (q15_t)0x5894, (q15_t)0xa39a, (q15_t)0x5890, (q15_t)0xa396, - (q15_t)0x588b, (q15_t)0xa392, (q15_t)0x5887, (q15_t)0xa38d, (q15_t)0x5882, (q15_t)0xa389, (q15_t)0x587d, (q15_t)0xa385, - (q15_t)0x5879, (q15_t)0xa380, (q15_t)0x5874, (q15_t)0xa37c, (q15_t)0x5870, (q15_t)0xa378, (q15_t)0x586b, (q15_t)0xa373, - (q15_t)0x5867, (q15_t)0xa36f, (q15_t)0x5862, (q15_t)0xa36b, (q15_t)0x585e, (q15_t)0xa366, (q15_t)0x5859, (q15_t)0xa362, - (q15_t)0x5855, (q15_t)0xa35e, (q15_t)0x5850, (q15_t)0xa359, (q15_t)0x584b, (q15_t)0xa355, (q15_t)0x5847, (q15_t)0xa351, - (q15_t)0x5842, (q15_t)0xa34c, (q15_t)0x583e, (q15_t)0xa348, (q15_t)0x5839, (q15_t)0xa344, (q15_t)0x5835, (q15_t)0xa33f, - (q15_t)0x5830, (q15_t)0xa33b, (q15_t)0x582c, (q15_t)0xa337, (q15_t)0x5827, (q15_t)0xa332, (q15_t)0x5822, (q15_t)0xa32e, - (q15_t)0x581e, (q15_t)0xa32a, (q15_t)0x5819, (q15_t)0xa325, (q15_t)0x5815, (q15_t)0xa321, (q15_t)0x5810, (q15_t)0xa31d, - (q15_t)0x580c, (q15_t)0xa318, (q15_t)0x5807, (q15_t)0xa314, (q15_t)0x5803, (q15_t)0xa310, (q15_t)0x57fe, (q15_t)0xa30b, - (q15_t)0x57f9, (q15_t)0xa307, (q15_t)0x57f5, (q15_t)0xa303, (q15_t)0x57f0, (q15_t)0xa2ff, (q15_t)0x57ec, (q15_t)0xa2fa, - (q15_t)0x57e7, (q15_t)0xa2f6, (q15_t)0x57e3, (q15_t)0xa2f2, (q15_t)0x57de, (q15_t)0xa2ed, (q15_t)0x57d9, (q15_t)0xa2e9, - (q15_t)0x57d5, (q15_t)0xa2e5, (q15_t)0x57d0, (q15_t)0xa2e0, (q15_t)0x57cc, (q15_t)0xa2dc, (q15_t)0x57c7, (q15_t)0xa2d8, - (q15_t)0x57c3, (q15_t)0xa2d3, (q15_t)0x57be, (q15_t)0xa2cf, (q15_t)0x57b9, (q15_t)0xa2cb, (q15_t)0x57b5, (q15_t)0xa2c6, - (q15_t)0x57b0, (q15_t)0xa2c2, (q15_t)0x57ac, (q15_t)0xa2be, (q15_t)0x57a7, (q15_t)0xa2ba, (q15_t)0x57a3, (q15_t)0xa2b5, - (q15_t)0x579e, (q15_t)0xa2b1, (q15_t)0x5799, (q15_t)0xa2ad, (q15_t)0x5795, (q15_t)0xa2a8, (q15_t)0x5790, (q15_t)0xa2a4, - (q15_t)0x578c, (q15_t)0xa2a0, (q15_t)0x5787, (q15_t)0xa29b, (q15_t)0x5783, (q15_t)0xa297, (q15_t)0x577e, (q15_t)0xa293, - (q15_t)0x5779, (q15_t)0xa28f, (q15_t)0x5775, (q15_t)0xa28a, (q15_t)0x5770, (q15_t)0xa286, (q15_t)0x576c, (q15_t)0xa282, - (q15_t)0x5767, (q15_t)0xa27d, (q15_t)0x5762, (q15_t)0xa279, (q15_t)0x575e, (q15_t)0xa275, (q15_t)0x5759, (q15_t)0xa271, - (q15_t)0x5755, (q15_t)0xa26c, (q15_t)0x5750, (q15_t)0xa268, (q15_t)0x574b, (q15_t)0xa264, (q15_t)0x5747, (q15_t)0xa25f, - (q15_t)0x5742, (q15_t)0xa25b, (q15_t)0x573e, (q15_t)0xa257, (q15_t)0x5739, (q15_t)0xa253, (q15_t)0x5734, (q15_t)0xa24e, - (q15_t)0x5730, (q15_t)0xa24a, (q15_t)0x572b, (q15_t)0xa246, (q15_t)0x5727, (q15_t)0xa241, (q15_t)0x5722, (q15_t)0xa23d, - (q15_t)0x571d, (q15_t)0xa239, (q15_t)0x5719, (q15_t)0xa235, (q15_t)0x5714, (q15_t)0xa230, (q15_t)0x5710, (q15_t)0xa22c, - (q15_t)0x570b, (q15_t)0xa228, (q15_t)0x5706, (q15_t)0xa224, (q15_t)0x5702, (q15_t)0xa21f, (q15_t)0x56fd, (q15_t)0xa21b, - (q15_t)0x56f9, (q15_t)0xa217, (q15_t)0x56f4, (q15_t)0xa212, (q15_t)0x56ef, (q15_t)0xa20e, (q15_t)0x56eb, (q15_t)0xa20a, - (q15_t)0x56e6, (q15_t)0xa206, (q15_t)0x56e2, (q15_t)0xa201, (q15_t)0x56dd, (q15_t)0xa1fd, (q15_t)0x56d8, (q15_t)0xa1f9, - (q15_t)0x56d4, (q15_t)0xa1f5, (q15_t)0x56cf, (q15_t)0xa1f0, (q15_t)0x56ca, (q15_t)0xa1ec, (q15_t)0x56c6, (q15_t)0xa1e8, - (q15_t)0x56c1, (q15_t)0xa1e4, (q15_t)0x56bd, (q15_t)0xa1df, (q15_t)0x56b8, (q15_t)0xa1db, (q15_t)0x56b3, (q15_t)0xa1d7, - (q15_t)0x56af, (q15_t)0xa1d3, (q15_t)0x56aa, (q15_t)0xa1ce, (q15_t)0x56a5, (q15_t)0xa1ca, (q15_t)0x56a1, (q15_t)0xa1c6, - (q15_t)0x569c, (q15_t)0xa1c1, (q15_t)0x5698, (q15_t)0xa1bd, (q15_t)0x5693, (q15_t)0xa1b9, (q15_t)0x568e, (q15_t)0xa1b5, - (q15_t)0x568a, (q15_t)0xa1b0, (q15_t)0x5685, (q15_t)0xa1ac, (q15_t)0x5680, (q15_t)0xa1a8, (q15_t)0x567c, (q15_t)0xa1a4, - (q15_t)0x5677, (q15_t)0xa1a0, (q15_t)0x5673, (q15_t)0xa19b, (q15_t)0x566e, (q15_t)0xa197, (q15_t)0x5669, (q15_t)0xa193, - (q15_t)0x5665, (q15_t)0xa18f, (q15_t)0x5660, (q15_t)0xa18a, (q15_t)0x565b, (q15_t)0xa186, (q15_t)0x5657, (q15_t)0xa182, - (q15_t)0x5652, (q15_t)0xa17e, (q15_t)0x564d, (q15_t)0xa179, (q15_t)0x5649, (q15_t)0xa175, (q15_t)0x5644, (q15_t)0xa171, - (q15_t)0x5640, (q15_t)0xa16d, (q15_t)0x563b, (q15_t)0xa168, (q15_t)0x5636, (q15_t)0xa164, (q15_t)0x5632, (q15_t)0xa160, - (q15_t)0x562d, (q15_t)0xa15c, (q15_t)0x5628, (q15_t)0xa157, (q15_t)0x5624, (q15_t)0xa153, (q15_t)0x561f, (q15_t)0xa14f, - (q15_t)0x561a, (q15_t)0xa14b, (q15_t)0x5616, (q15_t)0xa147, (q15_t)0x5611, (q15_t)0xa142, (q15_t)0x560c, (q15_t)0xa13e, - (q15_t)0x5608, (q15_t)0xa13a, (q15_t)0x5603, (q15_t)0xa136, (q15_t)0x55fe, (q15_t)0xa131, (q15_t)0x55fa, (q15_t)0xa12d, - (q15_t)0x55f5, (q15_t)0xa129, (q15_t)0x55f0, (q15_t)0xa125, (q15_t)0x55ec, (q15_t)0xa121, (q15_t)0x55e7, (q15_t)0xa11c, - (q15_t)0x55e3, (q15_t)0xa118, (q15_t)0x55de, (q15_t)0xa114, (q15_t)0x55d9, (q15_t)0xa110, (q15_t)0x55d5, (q15_t)0xa10b, - (q15_t)0x55d0, (q15_t)0xa107, (q15_t)0x55cb, (q15_t)0xa103, (q15_t)0x55c7, (q15_t)0xa0ff, (q15_t)0x55c2, (q15_t)0xa0fb, - (q15_t)0x55bd, (q15_t)0xa0f6, (q15_t)0x55b9, (q15_t)0xa0f2, (q15_t)0x55b4, (q15_t)0xa0ee, (q15_t)0x55af, (q15_t)0xa0ea, - (q15_t)0x55ab, (q15_t)0xa0e6, (q15_t)0x55a6, (q15_t)0xa0e1, (q15_t)0x55a1, (q15_t)0xa0dd, (q15_t)0x559d, (q15_t)0xa0d9, - (q15_t)0x5598, (q15_t)0xa0d5, (q15_t)0x5593, (q15_t)0xa0d1, (q15_t)0x558f, (q15_t)0xa0cc, (q15_t)0x558a, (q15_t)0xa0c8, - (q15_t)0x5585, (q15_t)0xa0c4, (q15_t)0x5581, (q15_t)0xa0c0, (q15_t)0x557c, (q15_t)0xa0bc, (q15_t)0x5577, (q15_t)0xa0b7, - (q15_t)0x5572, (q15_t)0xa0b3, (q15_t)0x556e, (q15_t)0xa0af, (q15_t)0x5569, (q15_t)0xa0ab, (q15_t)0x5564, (q15_t)0xa0a7, - (q15_t)0x5560, (q15_t)0xa0a2, (q15_t)0x555b, (q15_t)0xa09e, (q15_t)0x5556, (q15_t)0xa09a, (q15_t)0x5552, (q15_t)0xa096, - (q15_t)0x554d, (q15_t)0xa092, (q15_t)0x5548, (q15_t)0xa08e, (q15_t)0x5544, (q15_t)0xa089, (q15_t)0x553f, (q15_t)0xa085, - (q15_t)0x553a, (q15_t)0xa081, (q15_t)0x5536, (q15_t)0xa07d, (q15_t)0x5531, (q15_t)0xa079, (q15_t)0x552c, (q15_t)0xa074, - (q15_t)0x5528, (q15_t)0xa070, (q15_t)0x5523, (q15_t)0xa06c, (q15_t)0x551e, (q15_t)0xa068, (q15_t)0x5519, (q15_t)0xa064, - (q15_t)0x5515, (q15_t)0xa060, (q15_t)0x5510, (q15_t)0xa05b, (q15_t)0x550b, (q15_t)0xa057, (q15_t)0x5507, (q15_t)0xa053, - (q15_t)0x5502, (q15_t)0xa04f, (q15_t)0x54fd, (q15_t)0xa04b, (q15_t)0x54f9, (q15_t)0xa046, (q15_t)0x54f4, (q15_t)0xa042, - (q15_t)0x54ef, (q15_t)0xa03e, (q15_t)0x54ea, (q15_t)0xa03a, (q15_t)0x54e6, (q15_t)0xa036, (q15_t)0x54e1, (q15_t)0xa032, - (q15_t)0x54dc, (q15_t)0xa02d, (q15_t)0x54d8, (q15_t)0xa029, (q15_t)0x54d3, (q15_t)0xa025, (q15_t)0x54ce, (q15_t)0xa021, - (q15_t)0x54ca, (q15_t)0xa01d, (q15_t)0x54c5, (q15_t)0xa019, (q15_t)0x54c0, (q15_t)0xa014, (q15_t)0x54bb, (q15_t)0xa010, - (q15_t)0x54b7, (q15_t)0xa00c, (q15_t)0x54b2, (q15_t)0xa008, (q15_t)0x54ad, (q15_t)0xa004, (q15_t)0x54a9, (q15_t)0xa000, - (q15_t)0x54a4, (q15_t)0x9ffc, (q15_t)0x549f, (q15_t)0x9ff7, (q15_t)0x549a, (q15_t)0x9ff3, (q15_t)0x5496, (q15_t)0x9fef, - (q15_t)0x5491, (q15_t)0x9feb, (q15_t)0x548c, (q15_t)0x9fe7, (q15_t)0x5488, (q15_t)0x9fe3, (q15_t)0x5483, (q15_t)0x9fde, - (q15_t)0x547e, (q15_t)0x9fda, (q15_t)0x5479, (q15_t)0x9fd6, (q15_t)0x5475, (q15_t)0x9fd2, (q15_t)0x5470, (q15_t)0x9fce, - (q15_t)0x546b, (q15_t)0x9fca, (q15_t)0x5467, (q15_t)0x9fc6, (q15_t)0x5462, (q15_t)0x9fc1, (q15_t)0x545d, (q15_t)0x9fbd, - (q15_t)0x5458, (q15_t)0x9fb9, (q15_t)0x5454, (q15_t)0x9fb5, (q15_t)0x544f, (q15_t)0x9fb1, (q15_t)0x544a, (q15_t)0x9fad, - (q15_t)0x5445, (q15_t)0x9fa9, (q15_t)0x5441, (q15_t)0x9fa4, (q15_t)0x543c, (q15_t)0x9fa0, (q15_t)0x5437, (q15_t)0x9f9c, - (q15_t)0x5433, (q15_t)0x9f98, (q15_t)0x542e, (q15_t)0x9f94, (q15_t)0x5429, (q15_t)0x9f90, (q15_t)0x5424, (q15_t)0x9f8c, - (q15_t)0x5420, (q15_t)0x9f88, (q15_t)0x541b, (q15_t)0x9f83, (q15_t)0x5416, (q15_t)0x9f7f, (q15_t)0x5411, (q15_t)0x9f7b, - (q15_t)0x540d, (q15_t)0x9f77, (q15_t)0x5408, (q15_t)0x9f73, (q15_t)0x5403, (q15_t)0x9f6f, (q15_t)0x53fe, (q15_t)0x9f6b, - (q15_t)0x53fa, (q15_t)0x9f67, (q15_t)0x53f5, (q15_t)0x9f62, (q15_t)0x53f0, (q15_t)0x9f5e, (q15_t)0x53eb, (q15_t)0x9f5a, - (q15_t)0x53e7, (q15_t)0x9f56, (q15_t)0x53e2, (q15_t)0x9f52, (q15_t)0x53dd, (q15_t)0x9f4e, (q15_t)0x53d8, (q15_t)0x9f4a, - (q15_t)0x53d4, (q15_t)0x9f46, (q15_t)0x53cf, (q15_t)0x9f41, (q15_t)0x53ca, (q15_t)0x9f3d, (q15_t)0x53c5, (q15_t)0x9f39, - (q15_t)0x53c1, (q15_t)0x9f35, (q15_t)0x53bc, (q15_t)0x9f31, (q15_t)0x53b7, (q15_t)0x9f2d, (q15_t)0x53b2, (q15_t)0x9f29, - (q15_t)0x53ae, (q15_t)0x9f25, (q15_t)0x53a9, (q15_t)0x9f21, (q15_t)0x53a4, (q15_t)0x9f1c, (q15_t)0x539f, (q15_t)0x9f18, - (q15_t)0x539b, (q15_t)0x9f14, (q15_t)0x5396, (q15_t)0x9f10, (q15_t)0x5391, (q15_t)0x9f0c, (q15_t)0x538c, (q15_t)0x9f08, - (q15_t)0x5388, (q15_t)0x9f04, (q15_t)0x5383, (q15_t)0x9f00, (q15_t)0x537e, (q15_t)0x9efc, (q15_t)0x5379, (q15_t)0x9ef8, - (q15_t)0x5375, (q15_t)0x9ef3, (q15_t)0x5370, (q15_t)0x9eef, (q15_t)0x536b, (q15_t)0x9eeb, (q15_t)0x5366, (q15_t)0x9ee7, - (q15_t)0x5362, (q15_t)0x9ee3, (q15_t)0x535d, (q15_t)0x9edf, (q15_t)0x5358, (q15_t)0x9edb, (q15_t)0x5353, (q15_t)0x9ed7, - (q15_t)0x534e, (q15_t)0x9ed3, (q15_t)0x534a, (q15_t)0x9ecf, (q15_t)0x5345, (q15_t)0x9ecb, (q15_t)0x5340, (q15_t)0x9ec6, - (q15_t)0x533b, (q15_t)0x9ec2, (q15_t)0x5337, (q15_t)0x9ebe, (q15_t)0x5332, (q15_t)0x9eba, (q15_t)0x532d, (q15_t)0x9eb6, - (q15_t)0x5328, (q15_t)0x9eb2, (q15_t)0x5323, (q15_t)0x9eae, (q15_t)0x531f, (q15_t)0x9eaa, (q15_t)0x531a, (q15_t)0x9ea6, - (q15_t)0x5315, (q15_t)0x9ea2, (q15_t)0x5310, (q15_t)0x9e9e, (q15_t)0x530c, (q15_t)0x9e9a, (q15_t)0x5307, (q15_t)0x9e95, - (q15_t)0x5302, (q15_t)0x9e91, (q15_t)0x52fd, (q15_t)0x9e8d, (q15_t)0x52f8, (q15_t)0x9e89, (q15_t)0x52f4, (q15_t)0x9e85, - (q15_t)0x52ef, (q15_t)0x9e81, (q15_t)0x52ea, (q15_t)0x9e7d, (q15_t)0x52e5, (q15_t)0x9e79, (q15_t)0x52e1, (q15_t)0x9e75, - (q15_t)0x52dc, (q15_t)0x9e71, (q15_t)0x52d7, (q15_t)0x9e6d, (q15_t)0x52d2, (q15_t)0x9e69, (q15_t)0x52cd, (q15_t)0x9e65, - (q15_t)0x52c9, (q15_t)0x9e61, (q15_t)0x52c4, (q15_t)0x9e5d, (q15_t)0x52bf, (q15_t)0x9e58, (q15_t)0x52ba, (q15_t)0x9e54, - (q15_t)0x52b5, (q15_t)0x9e50, (q15_t)0x52b1, (q15_t)0x9e4c, (q15_t)0x52ac, (q15_t)0x9e48, (q15_t)0x52a7, (q15_t)0x9e44, - (q15_t)0x52a2, (q15_t)0x9e40, (q15_t)0x529d, (q15_t)0x9e3c, (q15_t)0x5299, (q15_t)0x9e38, (q15_t)0x5294, (q15_t)0x9e34, - (q15_t)0x528f, (q15_t)0x9e30, (q15_t)0x528a, (q15_t)0x9e2c, (q15_t)0x5285, (q15_t)0x9e28, (q15_t)0x5281, (q15_t)0x9e24, - (q15_t)0x527c, (q15_t)0x9e20, (q15_t)0x5277, (q15_t)0x9e1c, (q15_t)0x5272, (q15_t)0x9e18, (q15_t)0x526d, (q15_t)0x9e14, - (q15_t)0x5269, (q15_t)0x9e0f, (q15_t)0x5264, (q15_t)0x9e0b, (q15_t)0x525f, (q15_t)0x9e07, (q15_t)0x525a, (q15_t)0x9e03, - (q15_t)0x5255, (q15_t)0x9dff, (q15_t)0x5251, (q15_t)0x9dfb, (q15_t)0x524c, (q15_t)0x9df7, (q15_t)0x5247, (q15_t)0x9df3, - (q15_t)0x5242, (q15_t)0x9def, (q15_t)0x523d, (q15_t)0x9deb, (q15_t)0x5238, (q15_t)0x9de7, (q15_t)0x5234, (q15_t)0x9de3, - (q15_t)0x522f, (q15_t)0x9ddf, (q15_t)0x522a, (q15_t)0x9ddb, (q15_t)0x5225, (q15_t)0x9dd7, (q15_t)0x5220, (q15_t)0x9dd3, - (q15_t)0x521c, (q15_t)0x9dcf, (q15_t)0x5217, (q15_t)0x9dcb, (q15_t)0x5212, (q15_t)0x9dc7, (q15_t)0x520d, (q15_t)0x9dc3, - (q15_t)0x5208, (q15_t)0x9dbf, (q15_t)0x5203, (q15_t)0x9dbb, (q15_t)0x51ff, (q15_t)0x9db7, (q15_t)0x51fa, (q15_t)0x9db3, - (q15_t)0x51f5, (q15_t)0x9daf, (q15_t)0x51f0, (q15_t)0x9dab, (q15_t)0x51eb, (q15_t)0x9da7, (q15_t)0x51e6, (q15_t)0x9da3, - (q15_t)0x51e2, (q15_t)0x9d9f, (q15_t)0x51dd, (q15_t)0x9d9b, (q15_t)0x51d8, (q15_t)0x9d97, (q15_t)0x51d3, (q15_t)0x9d93, - (q15_t)0x51ce, (q15_t)0x9d8f, (q15_t)0x51c9, (q15_t)0x9d8b, (q15_t)0x51c5, (q15_t)0x9d86, (q15_t)0x51c0, (q15_t)0x9d82, - (q15_t)0x51bb, (q15_t)0x9d7e, (q15_t)0x51b6, (q15_t)0x9d7a, (q15_t)0x51b1, (q15_t)0x9d76, (q15_t)0x51ac, (q15_t)0x9d72, - (q15_t)0x51a8, (q15_t)0x9d6e, (q15_t)0x51a3, (q15_t)0x9d6a, (q15_t)0x519e, (q15_t)0x9d66, (q15_t)0x5199, (q15_t)0x9d62, - (q15_t)0x5194, (q15_t)0x9d5e, (q15_t)0x518f, (q15_t)0x9d5a, (q15_t)0x518b, (q15_t)0x9d56, (q15_t)0x5186, (q15_t)0x9d52, - (q15_t)0x5181, (q15_t)0x9d4e, (q15_t)0x517c, (q15_t)0x9d4a, (q15_t)0x5177, (q15_t)0x9d46, (q15_t)0x5172, (q15_t)0x9d42, - (q15_t)0x516e, (q15_t)0x9d3e, (q15_t)0x5169, (q15_t)0x9d3a, (q15_t)0x5164, (q15_t)0x9d36, (q15_t)0x515f, (q15_t)0x9d32, - (q15_t)0x515a, (q15_t)0x9d2e, (q15_t)0x5155, (q15_t)0x9d2a, (q15_t)0x5150, (q15_t)0x9d26, (q15_t)0x514c, (q15_t)0x9d22, - (q15_t)0x5147, (q15_t)0x9d1e, (q15_t)0x5142, (q15_t)0x9d1a, (q15_t)0x513d, (q15_t)0x9d16, (q15_t)0x5138, (q15_t)0x9d12, - (q15_t)0x5133, (q15_t)0x9d0e, (q15_t)0x512e, (q15_t)0x9d0b, (q15_t)0x512a, (q15_t)0x9d07, (q15_t)0x5125, (q15_t)0x9d03, - (q15_t)0x5120, (q15_t)0x9cff, (q15_t)0x511b, (q15_t)0x9cfb, (q15_t)0x5116, (q15_t)0x9cf7, (q15_t)0x5111, (q15_t)0x9cf3, - (q15_t)0x510c, (q15_t)0x9cef, (q15_t)0x5108, (q15_t)0x9ceb, (q15_t)0x5103, (q15_t)0x9ce7, (q15_t)0x50fe, (q15_t)0x9ce3, - (q15_t)0x50f9, (q15_t)0x9cdf, (q15_t)0x50f4, (q15_t)0x9cdb, (q15_t)0x50ef, (q15_t)0x9cd7, (q15_t)0x50ea, (q15_t)0x9cd3, - (q15_t)0x50e5, (q15_t)0x9ccf, (q15_t)0x50e1, (q15_t)0x9ccb, (q15_t)0x50dc, (q15_t)0x9cc7, (q15_t)0x50d7, (q15_t)0x9cc3, - (q15_t)0x50d2, (q15_t)0x9cbf, (q15_t)0x50cd, (q15_t)0x9cbb, (q15_t)0x50c8, (q15_t)0x9cb7, (q15_t)0x50c3, (q15_t)0x9cb3, - (q15_t)0x50bf, (q15_t)0x9caf, (q15_t)0x50ba, (q15_t)0x9cab, (q15_t)0x50b5, (q15_t)0x9ca7, (q15_t)0x50b0, (q15_t)0x9ca3, - (q15_t)0x50ab, (q15_t)0x9c9f, (q15_t)0x50a6, (q15_t)0x9c9b, (q15_t)0x50a1, (q15_t)0x9c97, (q15_t)0x509c, (q15_t)0x9c93, - (q15_t)0x5097, (q15_t)0x9c8f, (q15_t)0x5093, (q15_t)0x9c8b, (q15_t)0x508e, (q15_t)0x9c88, (q15_t)0x5089, (q15_t)0x9c84, - (q15_t)0x5084, (q15_t)0x9c80, (q15_t)0x507f, (q15_t)0x9c7c, (q15_t)0x507a, (q15_t)0x9c78, (q15_t)0x5075, (q15_t)0x9c74, - (q15_t)0x5070, (q15_t)0x9c70, (q15_t)0x506c, (q15_t)0x9c6c, (q15_t)0x5067, (q15_t)0x9c68, (q15_t)0x5062, (q15_t)0x9c64, - (q15_t)0x505d, (q15_t)0x9c60, (q15_t)0x5058, (q15_t)0x9c5c, (q15_t)0x5053, (q15_t)0x9c58, (q15_t)0x504e, (q15_t)0x9c54, - (q15_t)0x5049, (q15_t)0x9c50, (q15_t)0x5044, (q15_t)0x9c4c, (q15_t)0x503f, (q15_t)0x9c48, (q15_t)0x503b, (q15_t)0x9c44, - (q15_t)0x5036, (q15_t)0x9c40, (q15_t)0x5031, (q15_t)0x9c3d, (q15_t)0x502c, (q15_t)0x9c39, (q15_t)0x5027, (q15_t)0x9c35, - (q15_t)0x5022, (q15_t)0x9c31, (q15_t)0x501d, (q15_t)0x9c2d, (q15_t)0x5018, (q15_t)0x9c29, (q15_t)0x5013, (q15_t)0x9c25, - (q15_t)0x500f, (q15_t)0x9c21, (q15_t)0x500a, (q15_t)0x9c1d, (q15_t)0x5005, (q15_t)0x9c19, (q15_t)0x5000, (q15_t)0x9c15, - (q15_t)0x4ffb, (q15_t)0x9c11, (q15_t)0x4ff6, (q15_t)0x9c0d, (q15_t)0x4ff1, (q15_t)0x9c09, (q15_t)0x4fec, (q15_t)0x9c06, - (q15_t)0x4fe7, (q15_t)0x9c02, (q15_t)0x4fe2, (q15_t)0x9bfe, (q15_t)0x4fdd, (q15_t)0x9bfa, (q15_t)0x4fd9, (q15_t)0x9bf6, - (q15_t)0x4fd4, (q15_t)0x9bf2, (q15_t)0x4fcf, (q15_t)0x9bee, (q15_t)0x4fca, (q15_t)0x9bea, (q15_t)0x4fc5, (q15_t)0x9be6, - (q15_t)0x4fc0, (q15_t)0x9be2, (q15_t)0x4fbb, (q15_t)0x9bde, (q15_t)0x4fb6, (q15_t)0x9bda, (q15_t)0x4fb1, (q15_t)0x9bd7, - (q15_t)0x4fac, (q15_t)0x9bd3, (q15_t)0x4fa7, (q15_t)0x9bcf, (q15_t)0x4fa2, (q15_t)0x9bcb, (q15_t)0x4f9e, (q15_t)0x9bc7, - (q15_t)0x4f99, (q15_t)0x9bc3, (q15_t)0x4f94, (q15_t)0x9bbf, (q15_t)0x4f8f, (q15_t)0x9bbb, (q15_t)0x4f8a, (q15_t)0x9bb7, - (q15_t)0x4f85, (q15_t)0x9bb3, (q15_t)0x4f80, (q15_t)0x9baf, (q15_t)0x4f7b, (q15_t)0x9bac, (q15_t)0x4f76, (q15_t)0x9ba8, - (q15_t)0x4f71, (q15_t)0x9ba4, (q15_t)0x4f6c, (q15_t)0x9ba0, (q15_t)0x4f67, (q15_t)0x9b9c, (q15_t)0x4f62, (q15_t)0x9b98, - (q15_t)0x4f5e, (q15_t)0x9b94, (q15_t)0x4f59, (q15_t)0x9b90, (q15_t)0x4f54, (q15_t)0x9b8c, (q15_t)0x4f4f, (q15_t)0x9b88, - (q15_t)0x4f4a, (q15_t)0x9b85, (q15_t)0x4f45, (q15_t)0x9b81, (q15_t)0x4f40, (q15_t)0x9b7d, (q15_t)0x4f3b, (q15_t)0x9b79, - (q15_t)0x4f36, (q15_t)0x9b75, (q15_t)0x4f31, (q15_t)0x9b71, (q15_t)0x4f2c, (q15_t)0x9b6d, (q15_t)0x4f27, (q15_t)0x9b69, - (q15_t)0x4f22, (q15_t)0x9b65, (q15_t)0x4f1d, (q15_t)0x9b62, (q15_t)0x4f18, (q15_t)0x9b5e, (q15_t)0x4f14, (q15_t)0x9b5a, - (q15_t)0x4f0f, (q15_t)0x9b56, (q15_t)0x4f0a, (q15_t)0x9b52, (q15_t)0x4f05, (q15_t)0x9b4e, (q15_t)0x4f00, (q15_t)0x9b4a, - (q15_t)0x4efb, (q15_t)0x9b46, (q15_t)0x4ef6, (q15_t)0x9b43, (q15_t)0x4ef1, (q15_t)0x9b3f, (q15_t)0x4eec, (q15_t)0x9b3b, - (q15_t)0x4ee7, (q15_t)0x9b37, (q15_t)0x4ee2, (q15_t)0x9b33, (q15_t)0x4edd, (q15_t)0x9b2f, (q15_t)0x4ed8, (q15_t)0x9b2b, - (q15_t)0x4ed3, (q15_t)0x9b27, (q15_t)0x4ece, (q15_t)0x9b24, (q15_t)0x4ec9, (q15_t)0x9b20, (q15_t)0x4ec4, (q15_t)0x9b1c, - (q15_t)0x4ebf, (q15_t)0x9b18, (q15_t)0x4eba, (q15_t)0x9b14, (q15_t)0x4eb6, (q15_t)0x9b10, (q15_t)0x4eb1, (q15_t)0x9b0c, - (q15_t)0x4eac, (q15_t)0x9b09, (q15_t)0x4ea7, (q15_t)0x9b05, (q15_t)0x4ea2, (q15_t)0x9b01, (q15_t)0x4e9d, (q15_t)0x9afd, - (q15_t)0x4e98, (q15_t)0x9af9, (q15_t)0x4e93, (q15_t)0x9af5, (q15_t)0x4e8e, (q15_t)0x9af1, (q15_t)0x4e89, (q15_t)0x9aed, - (q15_t)0x4e84, (q15_t)0x9aea, (q15_t)0x4e7f, (q15_t)0x9ae6, (q15_t)0x4e7a, (q15_t)0x9ae2, (q15_t)0x4e75, (q15_t)0x9ade, - (q15_t)0x4e70, (q15_t)0x9ada, (q15_t)0x4e6b, (q15_t)0x9ad6, (q15_t)0x4e66, (q15_t)0x9ad3, (q15_t)0x4e61, (q15_t)0x9acf, - (q15_t)0x4e5c, (q15_t)0x9acb, (q15_t)0x4e57, (q15_t)0x9ac7, (q15_t)0x4e52, (q15_t)0x9ac3, (q15_t)0x4e4d, (q15_t)0x9abf, - (q15_t)0x4e48, (q15_t)0x9abb, (q15_t)0x4e43, (q15_t)0x9ab8, (q15_t)0x4e3e, (q15_t)0x9ab4, (q15_t)0x4e39, (q15_t)0x9ab0, - (q15_t)0x4e34, (q15_t)0x9aac, (q15_t)0x4e2f, (q15_t)0x9aa8, (q15_t)0x4e2a, (q15_t)0x9aa4, (q15_t)0x4e26, (q15_t)0x9aa1, - (q15_t)0x4e21, (q15_t)0x9a9d, (q15_t)0x4e1c, (q15_t)0x9a99, (q15_t)0x4e17, (q15_t)0x9a95, (q15_t)0x4e12, (q15_t)0x9a91, - (q15_t)0x4e0d, (q15_t)0x9a8d, (q15_t)0x4e08, (q15_t)0x9a8a, (q15_t)0x4e03, (q15_t)0x9a86, (q15_t)0x4dfe, (q15_t)0x9a82, - (q15_t)0x4df9, (q15_t)0x9a7e, (q15_t)0x4df4, (q15_t)0x9a7a, (q15_t)0x4def, (q15_t)0x9a76, (q15_t)0x4dea, (q15_t)0x9a73, - (q15_t)0x4de5, (q15_t)0x9a6f, (q15_t)0x4de0, (q15_t)0x9a6b, (q15_t)0x4ddb, (q15_t)0x9a67, (q15_t)0x4dd6, (q15_t)0x9a63, - (q15_t)0x4dd1, (q15_t)0x9a60, (q15_t)0x4dcc, (q15_t)0x9a5c, (q15_t)0x4dc7, (q15_t)0x9a58, (q15_t)0x4dc2, (q15_t)0x9a54, - (q15_t)0x4dbd, (q15_t)0x9a50, (q15_t)0x4db8, (q15_t)0x9a4c, (q15_t)0x4db3, (q15_t)0x9a49, (q15_t)0x4dae, (q15_t)0x9a45, - (q15_t)0x4da9, (q15_t)0x9a41, (q15_t)0x4da4, (q15_t)0x9a3d, (q15_t)0x4d9f, (q15_t)0x9a39, (q15_t)0x4d9a, (q15_t)0x9a36, - (q15_t)0x4d95, (q15_t)0x9a32, (q15_t)0x4d90, (q15_t)0x9a2e, (q15_t)0x4d8b, (q15_t)0x9a2a, (q15_t)0x4d86, (q15_t)0x9a26, - (q15_t)0x4d81, (q15_t)0x9a23, (q15_t)0x4d7c, (q15_t)0x9a1f, (q15_t)0x4d77, (q15_t)0x9a1b, (q15_t)0x4d72, (q15_t)0x9a17, - (q15_t)0x4d6d, (q15_t)0x9a13, (q15_t)0x4d68, (q15_t)0x9a10, (q15_t)0x4d63, (q15_t)0x9a0c, (q15_t)0x4d5e, (q15_t)0x9a08, - (q15_t)0x4d59, (q15_t)0x9a04, (q15_t)0x4d54, (q15_t)0x9a00, (q15_t)0x4d4f, (q15_t)0x99fd, (q15_t)0x4d4a, (q15_t)0x99f9, - (q15_t)0x4d45, (q15_t)0x99f5, (q15_t)0x4d40, (q15_t)0x99f1, (q15_t)0x4d3b, (q15_t)0x99ed, (q15_t)0x4d36, (q15_t)0x99ea, - (q15_t)0x4d31, (q15_t)0x99e6, (q15_t)0x4d2c, (q15_t)0x99e2, (q15_t)0x4d27, (q15_t)0x99de, (q15_t)0x4d22, (q15_t)0x99da, - (q15_t)0x4d1d, (q15_t)0x99d7, (q15_t)0x4d18, (q15_t)0x99d3, (q15_t)0x4d13, (q15_t)0x99cf, (q15_t)0x4d0e, (q15_t)0x99cb, - (q15_t)0x4d09, (q15_t)0x99c7, (q15_t)0x4d04, (q15_t)0x99c4, (q15_t)0x4cff, (q15_t)0x99c0, (q15_t)0x4cfa, (q15_t)0x99bc, - (q15_t)0x4cf5, (q15_t)0x99b8, (q15_t)0x4cf0, (q15_t)0x99b5, (q15_t)0x4ceb, (q15_t)0x99b1, (q15_t)0x4ce6, (q15_t)0x99ad, - (q15_t)0x4ce1, (q15_t)0x99a9, (q15_t)0x4cdb, (q15_t)0x99a5, (q15_t)0x4cd6, (q15_t)0x99a2, (q15_t)0x4cd1, (q15_t)0x999e, - (q15_t)0x4ccc, (q15_t)0x999a, (q15_t)0x4cc7, (q15_t)0x9996, (q15_t)0x4cc2, (q15_t)0x9993, (q15_t)0x4cbd, (q15_t)0x998f, - (q15_t)0x4cb8, (q15_t)0x998b, (q15_t)0x4cb3, (q15_t)0x9987, (q15_t)0x4cae, (q15_t)0x9984, (q15_t)0x4ca9, (q15_t)0x9980, - (q15_t)0x4ca4, (q15_t)0x997c, (q15_t)0x4c9f, (q15_t)0x9978, (q15_t)0x4c9a, (q15_t)0x9975, (q15_t)0x4c95, (q15_t)0x9971, - (q15_t)0x4c90, (q15_t)0x996d, (q15_t)0x4c8b, (q15_t)0x9969, (q15_t)0x4c86, (q15_t)0x9965, (q15_t)0x4c81, (q15_t)0x9962, - (q15_t)0x4c7c, (q15_t)0x995e, (q15_t)0x4c77, (q15_t)0x995a, (q15_t)0x4c72, (q15_t)0x9956, (q15_t)0x4c6d, (q15_t)0x9953, - (q15_t)0x4c68, (q15_t)0x994f, (q15_t)0x4c63, (q15_t)0x994b, (q15_t)0x4c5e, (q15_t)0x9947, (q15_t)0x4c59, (q15_t)0x9944, - (q15_t)0x4c54, (q15_t)0x9940, (q15_t)0x4c4f, (q15_t)0x993c, (q15_t)0x4c49, (q15_t)0x9938, (q15_t)0x4c44, (q15_t)0x9935, - (q15_t)0x4c3f, (q15_t)0x9931, (q15_t)0x4c3a, (q15_t)0x992d, (q15_t)0x4c35, (q15_t)0x992a, (q15_t)0x4c30, (q15_t)0x9926, - (q15_t)0x4c2b, (q15_t)0x9922, (q15_t)0x4c26, (q15_t)0x991e, (q15_t)0x4c21, (q15_t)0x991b, (q15_t)0x4c1c, (q15_t)0x9917, - (q15_t)0x4c17, (q15_t)0x9913, (q15_t)0x4c12, (q15_t)0x990f, (q15_t)0x4c0d, (q15_t)0x990c, (q15_t)0x4c08, (q15_t)0x9908, - (q15_t)0x4c03, (q15_t)0x9904, (q15_t)0x4bfe, (q15_t)0x9900, (q15_t)0x4bf9, (q15_t)0x98fd, (q15_t)0x4bf4, (q15_t)0x98f9, - (q15_t)0x4bef, (q15_t)0x98f5, (q15_t)0x4be9, (q15_t)0x98f2, (q15_t)0x4be4, (q15_t)0x98ee, (q15_t)0x4bdf, (q15_t)0x98ea, - (q15_t)0x4bda, (q15_t)0x98e6, (q15_t)0x4bd5, (q15_t)0x98e3, (q15_t)0x4bd0, (q15_t)0x98df, (q15_t)0x4bcb, (q15_t)0x98db, - (q15_t)0x4bc6, (q15_t)0x98d7, (q15_t)0x4bc1, (q15_t)0x98d4, (q15_t)0x4bbc, (q15_t)0x98d0, (q15_t)0x4bb7, (q15_t)0x98cc, - (q15_t)0x4bb2, (q15_t)0x98c9, (q15_t)0x4bad, (q15_t)0x98c5, (q15_t)0x4ba8, (q15_t)0x98c1, (q15_t)0x4ba3, (q15_t)0x98bd, - (q15_t)0x4b9e, (q15_t)0x98ba, (q15_t)0x4b98, (q15_t)0x98b6, (q15_t)0x4b93, (q15_t)0x98b2, (q15_t)0x4b8e, (q15_t)0x98af, - (q15_t)0x4b89, (q15_t)0x98ab, (q15_t)0x4b84, (q15_t)0x98a7, (q15_t)0x4b7f, (q15_t)0x98a3, (q15_t)0x4b7a, (q15_t)0x98a0, - (q15_t)0x4b75, (q15_t)0x989c, (q15_t)0x4b70, (q15_t)0x9898, (q15_t)0x4b6b, (q15_t)0x9895, (q15_t)0x4b66, (q15_t)0x9891, - (q15_t)0x4b61, (q15_t)0x988d, (q15_t)0x4b5c, (q15_t)0x988a, (q15_t)0x4b56, (q15_t)0x9886, (q15_t)0x4b51, (q15_t)0x9882, - (q15_t)0x4b4c, (q15_t)0x987e, (q15_t)0x4b47, (q15_t)0x987b, (q15_t)0x4b42, (q15_t)0x9877, (q15_t)0x4b3d, (q15_t)0x9873, - (q15_t)0x4b38, (q15_t)0x9870, (q15_t)0x4b33, (q15_t)0x986c, (q15_t)0x4b2e, (q15_t)0x9868, (q15_t)0x4b29, (q15_t)0x9865, - (q15_t)0x4b24, (q15_t)0x9861, (q15_t)0x4b1f, (q15_t)0x985d, (q15_t)0x4b19, (q15_t)0x985a, (q15_t)0x4b14, (q15_t)0x9856, - (q15_t)0x4b0f, (q15_t)0x9852, (q15_t)0x4b0a, (q15_t)0x984e, (q15_t)0x4b05, (q15_t)0x984b, (q15_t)0x4b00, (q15_t)0x9847, - (q15_t)0x4afb, (q15_t)0x9843, (q15_t)0x4af6, (q15_t)0x9840, (q15_t)0x4af1, (q15_t)0x983c, (q15_t)0x4aec, (q15_t)0x9838, - (q15_t)0x4ae7, (q15_t)0x9835, (q15_t)0x4ae1, (q15_t)0x9831, (q15_t)0x4adc, (q15_t)0x982d, (q15_t)0x4ad7, (q15_t)0x982a, - (q15_t)0x4ad2, (q15_t)0x9826, (q15_t)0x4acd, (q15_t)0x9822, (q15_t)0x4ac8, (q15_t)0x981f, (q15_t)0x4ac3, (q15_t)0x981b, - (q15_t)0x4abe, (q15_t)0x9817, (q15_t)0x4ab9, (q15_t)0x9814, (q15_t)0x4ab4, (q15_t)0x9810, (q15_t)0x4aae, (q15_t)0x980c, - (q15_t)0x4aa9, (q15_t)0x9809, (q15_t)0x4aa4, (q15_t)0x9805, (q15_t)0x4a9f, (q15_t)0x9801, (q15_t)0x4a9a, (q15_t)0x97fe, - (q15_t)0x4a95, (q15_t)0x97fa, (q15_t)0x4a90, (q15_t)0x97f6, (q15_t)0x4a8b, (q15_t)0x97f3, (q15_t)0x4a86, (q15_t)0x97ef, - (q15_t)0x4a81, (q15_t)0x97eb, (q15_t)0x4a7b, (q15_t)0x97e8, (q15_t)0x4a76, (q15_t)0x97e4, (q15_t)0x4a71, (q15_t)0x97e0, - (q15_t)0x4a6c, (q15_t)0x97dd, (q15_t)0x4a67, (q15_t)0x97d9, (q15_t)0x4a62, (q15_t)0x97d5, (q15_t)0x4a5d, (q15_t)0x97d2, - (q15_t)0x4a58, (q15_t)0x97ce, (q15_t)0x4a52, (q15_t)0x97cb, (q15_t)0x4a4d, (q15_t)0x97c7, (q15_t)0x4a48, (q15_t)0x97c3, - (q15_t)0x4a43, (q15_t)0x97c0, (q15_t)0x4a3e, (q15_t)0x97bc, (q15_t)0x4a39, (q15_t)0x97b8, (q15_t)0x4a34, (q15_t)0x97b5, - (q15_t)0x4a2f, (q15_t)0x97b1, (q15_t)0x4a2a, (q15_t)0x97ad, (q15_t)0x4a24, (q15_t)0x97aa, (q15_t)0x4a1f, (q15_t)0x97a6, - (q15_t)0x4a1a, (q15_t)0x97a2, (q15_t)0x4a15, (q15_t)0x979f, (q15_t)0x4a10, (q15_t)0x979b, (q15_t)0x4a0b, (q15_t)0x9798, - (q15_t)0x4a06, (q15_t)0x9794, (q15_t)0x4a01, (q15_t)0x9790, (q15_t)0x49fb, (q15_t)0x978d, (q15_t)0x49f6, (q15_t)0x9789, - (q15_t)0x49f1, (q15_t)0x9785, (q15_t)0x49ec, (q15_t)0x9782, (q15_t)0x49e7, (q15_t)0x977e, (q15_t)0x49e2, (q15_t)0x977a, - (q15_t)0x49dd, (q15_t)0x9777, (q15_t)0x49d8, (q15_t)0x9773, (q15_t)0x49d2, (q15_t)0x9770, (q15_t)0x49cd, (q15_t)0x976c, - (q15_t)0x49c8, (q15_t)0x9768, (q15_t)0x49c3, (q15_t)0x9765, (q15_t)0x49be, (q15_t)0x9761, (q15_t)0x49b9, (q15_t)0x975d, - (q15_t)0x49b4, (q15_t)0x975a, (q15_t)0x49ae, (q15_t)0x9756, (q15_t)0x49a9, (q15_t)0x9753, (q15_t)0x49a4, (q15_t)0x974f, - (q15_t)0x499f, (q15_t)0x974b, (q15_t)0x499a, (q15_t)0x9748, (q15_t)0x4995, (q15_t)0x9744, (q15_t)0x4990, (q15_t)0x9741, - (q15_t)0x498a, (q15_t)0x973d, (q15_t)0x4985, (q15_t)0x9739, (q15_t)0x4980, (q15_t)0x9736, (q15_t)0x497b, (q15_t)0x9732, - (q15_t)0x4976, (q15_t)0x972f, (q15_t)0x4971, (q15_t)0x972b, (q15_t)0x496c, (q15_t)0x9727, (q15_t)0x4966, (q15_t)0x9724, - (q15_t)0x4961, (q15_t)0x9720, (q15_t)0x495c, (q15_t)0x971d, (q15_t)0x4957, (q15_t)0x9719, (q15_t)0x4952, (q15_t)0x9715, - (q15_t)0x494d, (q15_t)0x9712, (q15_t)0x4948, (q15_t)0x970e, (q15_t)0x4942, (q15_t)0x970b, (q15_t)0x493d, (q15_t)0x9707, - (q15_t)0x4938, (q15_t)0x9703, (q15_t)0x4933, (q15_t)0x9700, (q15_t)0x492e, (q15_t)0x96fc, (q15_t)0x4929, (q15_t)0x96f9, - (q15_t)0x4923, (q15_t)0x96f5, (q15_t)0x491e, (q15_t)0x96f1, (q15_t)0x4919, (q15_t)0x96ee, (q15_t)0x4914, (q15_t)0x96ea, - (q15_t)0x490f, (q15_t)0x96e7, (q15_t)0x490a, (q15_t)0x96e3, (q15_t)0x4905, (q15_t)0x96df, (q15_t)0x48ff, (q15_t)0x96dc, - (q15_t)0x48fa, (q15_t)0x96d8, (q15_t)0x48f5, (q15_t)0x96d5, (q15_t)0x48f0, (q15_t)0x96d1, (q15_t)0x48eb, (q15_t)0x96ce, - (q15_t)0x48e6, (q15_t)0x96ca, (q15_t)0x48e0, (q15_t)0x96c6, (q15_t)0x48db, (q15_t)0x96c3, (q15_t)0x48d6, (q15_t)0x96bf, - (q15_t)0x48d1, (q15_t)0x96bc, (q15_t)0x48cc, (q15_t)0x96b8, (q15_t)0x48c7, (q15_t)0x96b5, (q15_t)0x48c1, (q15_t)0x96b1, - (q15_t)0x48bc, (q15_t)0x96ad, (q15_t)0x48b7, (q15_t)0x96aa, (q15_t)0x48b2, (q15_t)0x96a6, (q15_t)0x48ad, (q15_t)0x96a3, - (q15_t)0x48a8, (q15_t)0x969f, (q15_t)0x48a2, (q15_t)0x969c, (q15_t)0x489d, (q15_t)0x9698, (q15_t)0x4898, (q15_t)0x9694, - (q15_t)0x4893, (q15_t)0x9691, (q15_t)0x488e, (q15_t)0x968d, (q15_t)0x4888, (q15_t)0x968a, (q15_t)0x4883, (q15_t)0x9686, - (q15_t)0x487e, (q15_t)0x9683, (q15_t)0x4879, (q15_t)0x967f, (q15_t)0x4874, (q15_t)0x967b, (q15_t)0x486f, (q15_t)0x9678, - (q15_t)0x4869, (q15_t)0x9674, (q15_t)0x4864, (q15_t)0x9671, (q15_t)0x485f, (q15_t)0x966d, (q15_t)0x485a, (q15_t)0x966a, - (q15_t)0x4855, (q15_t)0x9666, (q15_t)0x484f, (q15_t)0x9663, (q15_t)0x484a, (q15_t)0x965f, (q15_t)0x4845, (q15_t)0x965b, - (q15_t)0x4840, (q15_t)0x9658, (q15_t)0x483b, (q15_t)0x9654, (q15_t)0x4836, (q15_t)0x9651, (q15_t)0x4830, (q15_t)0x964d, - (q15_t)0x482b, (q15_t)0x964a, (q15_t)0x4826, (q15_t)0x9646, (q15_t)0x4821, (q15_t)0x9643, (q15_t)0x481c, (q15_t)0x963f, - (q15_t)0x4816, (q15_t)0x963c, (q15_t)0x4811, (q15_t)0x9638, (q15_t)0x480c, (q15_t)0x9635, (q15_t)0x4807, (q15_t)0x9631, - (q15_t)0x4802, (q15_t)0x962d, (q15_t)0x47fc, (q15_t)0x962a, (q15_t)0x47f7, (q15_t)0x9626, (q15_t)0x47f2, (q15_t)0x9623, - (q15_t)0x47ed, (q15_t)0x961f, (q15_t)0x47e8, (q15_t)0x961c, (q15_t)0x47e2, (q15_t)0x9618, (q15_t)0x47dd, (q15_t)0x9615, - (q15_t)0x47d8, (q15_t)0x9611, (q15_t)0x47d3, (q15_t)0x960e, (q15_t)0x47ce, (q15_t)0x960a, (q15_t)0x47c8, (q15_t)0x9607, - (q15_t)0x47c3, (q15_t)0x9603, (q15_t)0x47be, (q15_t)0x9600, (q15_t)0x47b9, (q15_t)0x95fc, (q15_t)0x47b4, (q15_t)0x95f9, - (q15_t)0x47ae, (q15_t)0x95f5, (q15_t)0x47a9, (q15_t)0x95f2, (q15_t)0x47a4, (q15_t)0x95ee, (q15_t)0x479f, (q15_t)0x95ea, - (q15_t)0x479a, (q15_t)0x95e7, (q15_t)0x4794, (q15_t)0x95e3, (q15_t)0x478f, (q15_t)0x95e0, (q15_t)0x478a, (q15_t)0x95dc, - (q15_t)0x4785, (q15_t)0x95d9, (q15_t)0x4780, (q15_t)0x95d5, (q15_t)0x477a, (q15_t)0x95d2, (q15_t)0x4775, (q15_t)0x95ce, - (q15_t)0x4770, (q15_t)0x95cb, (q15_t)0x476b, (q15_t)0x95c7, (q15_t)0x4765, (q15_t)0x95c4, (q15_t)0x4760, (q15_t)0x95c0, - (q15_t)0x475b, (q15_t)0x95bd, (q15_t)0x4756, (q15_t)0x95b9, (q15_t)0x4751, (q15_t)0x95b6, (q15_t)0x474b, (q15_t)0x95b2, - (q15_t)0x4746, (q15_t)0x95af, (q15_t)0x4741, (q15_t)0x95ab, (q15_t)0x473c, (q15_t)0x95a8, (q15_t)0x4737, (q15_t)0x95a4, - (q15_t)0x4731, (q15_t)0x95a1, (q15_t)0x472c, (q15_t)0x959d, (q15_t)0x4727, (q15_t)0x959a, (q15_t)0x4722, (q15_t)0x9596, - (q15_t)0x471c, (q15_t)0x9593, (q15_t)0x4717, (q15_t)0x958f, (q15_t)0x4712, (q15_t)0x958c, (q15_t)0x470d, (q15_t)0x9588, - (q15_t)0x4708, (q15_t)0x9585, (q15_t)0x4702, (q15_t)0x9581, (q15_t)0x46fd, (q15_t)0x957e, (q15_t)0x46f8, (q15_t)0x957a, - (q15_t)0x46f3, (q15_t)0x9577, (q15_t)0x46ed, (q15_t)0x9574, (q15_t)0x46e8, (q15_t)0x9570, (q15_t)0x46e3, (q15_t)0x956d, - (q15_t)0x46de, (q15_t)0x9569, (q15_t)0x46d8, (q15_t)0x9566, (q15_t)0x46d3, (q15_t)0x9562, (q15_t)0x46ce, (q15_t)0x955f, - (q15_t)0x46c9, (q15_t)0x955b, (q15_t)0x46c4, (q15_t)0x9558, (q15_t)0x46be, (q15_t)0x9554, (q15_t)0x46b9, (q15_t)0x9551, - (q15_t)0x46b4, (q15_t)0x954d, (q15_t)0x46af, (q15_t)0x954a, (q15_t)0x46a9, (q15_t)0x9546, (q15_t)0x46a4, (q15_t)0x9543, - (q15_t)0x469f, (q15_t)0x953f, (q15_t)0x469a, (q15_t)0x953c, (q15_t)0x4694, (q15_t)0x9538, (q15_t)0x468f, (q15_t)0x9535, - (q15_t)0x468a, (q15_t)0x9532, (q15_t)0x4685, (q15_t)0x952e, (q15_t)0x467f, (q15_t)0x952b, (q15_t)0x467a, (q15_t)0x9527, - (q15_t)0x4675, (q15_t)0x9524, (q15_t)0x4670, (q15_t)0x9520, (q15_t)0x466a, (q15_t)0x951d, (q15_t)0x4665, (q15_t)0x9519, - (q15_t)0x4660, (q15_t)0x9516, (q15_t)0x465b, (q15_t)0x9512, (q15_t)0x4655, (q15_t)0x950f, (q15_t)0x4650, (q15_t)0x950c, - (q15_t)0x464b, (q15_t)0x9508, (q15_t)0x4646, (q15_t)0x9505, (q15_t)0x4640, (q15_t)0x9501, (q15_t)0x463b, (q15_t)0x94fe, - (q15_t)0x4636, (q15_t)0x94fa, (q15_t)0x4631, (q15_t)0x94f7, (q15_t)0x462b, (q15_t)0x94f3, (q15_t)0x4626, (q15_t)0x94f0, - (q15_t)0x4621, (q15_t)0x94ed, (q15_t)0x461c, (q15_t)0x94e9, (q15_t)0x4616, (q15_t)0x94e6, (q15_t)0x4611, (q15_t)0x94e2, - (q15_t)0x460c, (q15_t)0x94df, (q15_t)0x4607, (q15_t)0x94db, (q15_t)0x4601, (q15_t)0x94d8, (q15_t)0x45fc, (q15_t)0x94d4, - (q15_t)0x45f7, (q15_t)0x94d1, (q15_t)0x45f2, (q15_t)0x94ce, (q15_t)0x45ec, (q15_t)0x94ca, (q15_t)0x45e7, (q15_t)0x94c7, - (q15_t)0x45e2, (q15_t)0x94c3, (q15_t)0x45dd, (q15_t)0x94c0, (q15_t)0x45d7, (q15_t)0x94bc, (q15_t)0x45d2, (q15_t)0x94b9, - (q15_t)0x45cd, (q15_t)0x94b6, (q15_t)0x45c7, (q15_t)0x94b2, (q15_t)0x45c2, (q15_t)0x94af, (q15_t)0x45bd, (q15_t)0x94ab, - (q15_t)0x45b8, (q15_t)0x94a8, (q15_t)0x45b2, (q15_t)0x94a4, (q15_t)0x45ad, (q15_t)0x94a1, (q15_t)0x45a8, (q15_t)0x949e, - (q15_t)0x45a3, (q15_t)0x949a, (q15_t)0x459d, (q15_t)0x9497, (q15_t)0x4598, (q15_t)0x9493, (q15_t)0x4593, (q15_t)0x9490, - (q15_t)0x458d, (q15_t)0x948d, (q15_t)0x4588, (q15_t)0x9489, (q15_t)0x4583, (q15_t)0x9486, (q15_t)0x457e, (q15_t)0x9482, - (q15_t)0x4578, (q15_t)0x947f, (q15_t)0x4573, (q15_t)0x947b, (q15_t)0x456e, (q15_t)0x9478, (q15_t)0x4569, (q15_t)0x9475, - (q15_t)0x4563, (q15_t)0x9471, (q15_t)0x455e, (q15_t)0x946e, (q15_t)0x4559, (q15_t)0x946a, (q15_t)0x4553, (q15_t)0x9467, - (q15_t)0x454e, (q15_t)0x9464, (q15_t)0x4549, (q15_t)0x9460, (q15_t)0x4544, (q15_t)0x945d, (q15_t)0x453e, (q15_t)0x9459, - (q15_t)0x4539, (q15_t)0x9456, (q15_t)0x4534, (q15_t)0x9453, (q15_t)0x452e, (q15_t)0x944f, (q15_t)0x4529, (q15_t)0x944c, - (q15_t)0x4524, (q15_t)0x9448, (q15_t)0x451f, (q15_t)0x9445, (q15_t)0x4519, (q15_t)0x9442, (q15_t)0x4514, (q15_t)0x943e, - (q15_t)0x450f, (q15_t)0x943b, (q15_t)0x4509, (q15_t)0x9437, (q15_t)0x4504, (q15_t)0x9434, (q15_t)0x44ff, (q15_t)0x9431, - (q15_t)0x44fa, (q15_t)0x942d, (q15_t)0x44f4, (q15_t)0x942a, (q15_t)0x44ef, (q15_t)0x9427, (q15_t)0x44ea, (q15_t)0x9423, - (q15_t)0x44e4, (q15_t)0x9420, (q15_t)0x44df, (q15_t)0x941c, (q15_t)0x44da, (q15_t)0x9419, (q15_t)0x44d4, (q15_t)0x9416, - (q15_t)0x44cf, (q15_t)0x9412, (q15_t)0x44ca, (q15_t)0x940f, (q15_t)0x44c5, (q15_t)0x940b, (q15_t)0x44bf, (q15_t)0x9408, - (q15_t)0x44ba, (q15_t)0x9405, (q15_t)0x44b5, (q15_t)0x9401, (q15_t)0x44af, (q15_t)0x93fe, (q15_t)0x44aa, (q15_t)0x93fb, - (q15_t)0x44a5, (q15_t)0x93f7, (q15_t)0x449f, (q15_t)0x93f4, (q15_t)0x449a, (q15_t)0x93f1, (q15_t)0x4495, (q15_t)0x93ed, - (q15_t)0x4490, (q15_t)0x93ea, (q15_t)0x448a, (q15_t)0x93e6, (q15_t)0x4485, (q15_t)0x93e3, (q15_t)0x4480, (q15_t)0x93e0, - (q15_t)0x447a, (q15_t)0x93dc, (q15_t)0x4475, (q15_t)0x93d9, (q15_t)0x4470, (q15_t)0x93d6, (q15_t)0x446a, (q15_t)0x93d2, - (q15_t)0x4465, (q15_t)0x93cf, (q15_t)0x4460, (q15_t)0x93cc, (q15_t)0x445a, (q15_t)0x93c8, (q15_t)0x4455, (q15_t)0x93c5, - (q15_t)0x4450, (q15_t)0x93c1, (q15_t)0x444b, (q15_t)0x93be, (q15_t)0x4445, (q15_t)0x93bb, (q15_t)0x4440, (q15_t)0x93b7, - (q15_t)0x443b, (q15_t)0x93b4, (q15_t)0x4435, (q15_t)0x93b1, (q15_t)0x4430, (q15_t)0x93ad, (q15_t)0x442b, (q15_t)0x93aa, - (q15_t)0x4425, (q15_t)0x93a7, (q15_t)0x4420, (q15_t)0x93a3, (q15_t)0x441b, (q15_t)0x93a0, (q15_t)0x4415, (q15_t)0x939d, - (q15_t)0x4410, (q15_t)0x9399, (q15_t)0x440b, (q15_t)0x9396, (q15_t)0x4405, (q15_t)0x9393, (q15_t)0x4400, (q15_t)0x938f, - (q15_t)0x43fb, (q15_t)0x938c, (q15_t)0x43f5, (q15_t)0x9389, (q15_t)0x43f0, (q15_t)0x9385, (q15_t)0x43eb, (q15_t)0x9382, - (q15_t)0x43e5, (q15_t)0x937f, (q15_t)0x43e0, (q15_t)0x937b, (q15_t)0x43db, (q15_t)0x9378, (q15_t)0x43d5, (q15_t)0x9375, - (q15_t)0x43d0, (q15_t)0x9371, (q15_t)0x43cb, (q15_t)0x936e, (q15_t)0x43c5, (q15_t)0x936b, (q15_t)0x43c0, (q15_t)0x9367, - (q15_t)0x43bb, (q15_t)0x9364, (q15_t)0x43b5, (q15_t)0x9361, (q15_t)0x43b0, (q15_t)0x935d, (q15_t)0x43ab, (q15_t)0x935a, - (q15_t)0x43a5, (q15_t)0x9357, (q15_t)0x43a0, (q15_t)0x9353, (q15_t)0x439b, (q15_t)0x9350, (q15_t)0x4395, (q15_t)0x934d, - (q15_t)0x4390, (q15_t)0x9349, (q15_t)0x438b, (q15_t)0x9346, (q15_t)0x4385, (q15_t)0x9343, (q15_t)0x4380, (q15_t)0x933f, - (q15_t)0x437b, (q15_t)0x933c, (q15_t)0x4375, (q15_t)0x9339, (q15_t)0x4370, (q15_t)0x9336, (q15_t)0x436b, (q15_t)0x9332, - (q15_t)0x4365, (q15_t)0x932f, (q15_t)0x4360, (q15_t)0x932c, (q15_t)0x435b, (q15_t)0x9328, (q15_t)0x4355, (q15_t)0x9325, - (q15_t)0x4350, (q15_t)0x9322, (q15_t)0x434b, (q15_t)0x931e, (q15_t)0x4345, (q15_t)0x931b, (q15_t)0x4340, (q15_t)0x9318, - (q15_t)0x433b, (q15_t)0x9314, (q15_t)0x4335, (q15_t)0x9311, (q15_t)0x4330, (q15_t)0x930e, (q15_t)0x432b, (q15_t)0x930b, - (q15_t)0x4325, (q15_t)0x9307, (q15_t)0x4320, (q15_t)0x9304, (q15_t)0x431b, (q15_t)0x9301, (q15_t)0x4315, (q15_t)0x92fd, - (q15_t)0x4310, (q15_t)0x92fa, (q15_t)0x430b, (q15_t)0x92f7, (q15_t)0x4305, (q15_t)0x92f4, (q15_t)0x4300, (q15_t)0x92f0, - (q15_t)0x42fa, (q15_t)0x92ed, (q15_t)0x42f5, (q15_t)0x92ea, (q15_t)0x42f0, (q15_t)0x92e6, (q15_t)0x42ea, (q15_t)0x92e3, - (q15_t)0x42e5, (q15_t)0x92e0, (q15_t)0x42e0, (q15_t)0x92dd, (q15_t)0x42da, (q15_t)0x92d9, (q15_t)0x42d5, (q15_t)0x92d6, - (q15_t)0x42d0, (q15_t)0x92d3, (q15_t)0x42ca, (q15_t)0x92cf, (q15_t)0x42c5, (q15_t)0x92cc, (q15_t)0x42c0, (q15_t)0x92c9, - (q15_t)0x42ba, (q15_t)0x92c6, (q15_t)0x42b5, (q15_t)0x92c2, (q15_t)0x42af, (q15_t)0x92bf, (q15_t)0x42aa, (q15_t)0x92bc, - (q15_t)0x42a5, (q15_t)0x92b8, (q15_t)0x429f, (q15_t)0x92b5, (q15_t)0x429a, (q15_t)0x92b2, (q15_t)0x4295, (q15_t)0x92af, - (q15_t)0x428f, (q15_t)0x92ab, (q15_t)0x428a, (q15_t)0x92a8, (q15_t)0x4284, (q15_t)0x92a5, (q15_t)0x427f, (q15_t)0x92a2, - (q15_t)0x427a, (q15_t)0x929e, (q15_t)0x4274, (q15_t)0x929b, (q15_t)0x426f, (q15_t)0x9298, (q15_t)0x426a, (q15_t)0x9295, - (q15_t)0x4264, (q15_t)0x9291, (q15_t)0x425f, (q15_t)0x928e, (q15_t)0x425a, (q15_t)0x928b, (q15_t)0x4254, (q15_t)0x9288, - (q15_t)0x424f, (q15_t)0x9284, (q15_t)0x4249, (q15_t)0x9281, (q15_t)0x4244, (q15_t)0x927e, (q15_t)0x423f, (q15_t)0x927b, - (q15_t)0x4239, (q15_t)0x9277, (q15_t)0x4234, (q15_t)0x9274, (q15_t)0x422f, (q15_t)0x9271, (q15_t)0x4229, (q15_t)0x926e, - (q15_t)0x4224, (q15_t)0x926a, (q15_t)0x421e, (q15_t)0x9267, (q15_t)0x4219, (q15_t)0x9264, (q15_t)0x4214, (q15_t)0x9261, - (q15_t)0x420e, (q15_t)0x925d, (q15_t)0x4209, (q15_t)0x925a, (q15_t)0x4203, (q15_t)0x9257, (q15_t)0x41fe, (q15_t)0x9254, - (q15_t)0x41f9, (q15_t)0x9250, (q15_t)0x41f3, (q15_t)0x924d, (q15_t)0x41ee, (q15_t)0x924a, (q15_t)0x41e9, (q15_t)0x9247, - (q15_t)0x41e3, (q15_t)0x9243, (q15_t)0x41de, (q15_t)0x9240, (q15_t)0x41d8, (q15_t)0x923d, (q15_t)0x41d3, (q15_t)0x923a, - (q15_t)0x41ce, (q15_t)0x9236, (q15_t)0x41c8, (q15_t)0x9233, (q15_t)0x41c3, (q15_t)0x9230, (q15_t)0x41bd, (q15_t)0x922d, - (q15_t)0x41b8, (q15_t)0x922a, (q15_t)0x41b3, (q15_t)0x9226, (q15_t)0x41ad, (q15_t)0x9223, (q15_t)0x41a8, (q15_t)0x9220, - (q15_t)0x41a2, (q15_t)0x921d, (q15_t)0x419d, (q15_t)0x9219, (q15_t)0x4198, (q15_t)0x9216, (q15_t)0x4192, (q15_t)0x9213, - (q15_t)0x418d, (q15_t)0x9210, (q15_t)0x4188, (q15_t)0x920d, (q15_t)0x4182, (q15_t)0x9209, (q15_t)0x417d, (q15_t)0x9206, - (q15_t)0x4177, (q15_t)0x9203, (q15_t)0x4172, (q15_t)0x9200, (q15_t)0x416d, (q15_t)0x91fc, (q15_t)0x4167, (q15_t)0x91f9, - (q15_t)0x4162, (q15_t)0x91f6, (q15_t)0x415c, (q15_t)0x91f3, (q15_t)0x4157, (q15_t)0x91f0, (q15_t)0x4152, (q15_t)0x91ec, - (q15_t)0x414c, (q15_t)0x91e9, (q15_t)0x4147, (q15_t)0x91e6, (q15_t)0x4141, (q15_t)0x91e3, (q15_t)0x413c, (q15_t)0x91e0, - (q15_t)0x4136, (q15_t)0x91dc, (q15_t)0x4131, (q15_t)0x91d9, (q15_t)0x412c, (q15_t)0x91d6, (q15_t)0x4126, (q15_t)0x91d3, - (q15_t)0x4121, (q15_t)0x91d0, (q15_t)0x411b, (q15_t)0x91cc, (q15_t)0x4116, (q15_t)0x91c9, (q15_t)0x4111, (q15_t)0x91c6, - (q15_t)0x410b, (q15_t)0x91c3, (q15_t)0x4106, (q15_t)0x91c0, (q15_t)0x4100, (q15_t)0x91bc, (q15_t)0x40fb, (q15_t)0x91b9, - (q15_t)0x40f6, (q15_t)0x91b6, (q15_t)0x40f0, (q15_t)0x91b3, (q15_t)0x40eb, (q15_t)0x91b0, (q15_t)0x40e5, (q15_t)0x91ad, - (q15_t)0x40e0, (q15_t)0x91a9, (q15_t)0x40da, (q15_t)0x91a6, (q15_t)0x40d5, (q15_t)0x91a3, (q15_t)0x40d0, (q15_t)0x91a0, - (q15_t)0x40ca, (q15_t)0x919d, (q15_t)0x40c5, (q15_t)0x9199, (q15_t)0x40bf, (q15_t)0x9196, (q15_t)0x40ba, (q15_t)0x9193, - (q15_t)0x40b5, (q15_t)0x9190, (q15_t)0x40af, (q15_t)0x918d, (q15_t)0x40aa, (q15_t)0x918a, (q15_t)0x40a4, (q15_t)0x9186, - (q15_t)0x409f, (q15_t)0x9183, (q15_t)0x4099, (q15_t)0x9180, (q15_t)0x4094, (q15_t)0x917d, (q15_t)0x408f, (q15_t)0x917a, - (q15_t)0x4089, (q15_t)0x9177, (q15_t)0x4084, (q15_t)0x9173, (q15_t)0x407e, (q15_t)0x9170, (q15_t)0x4079, (q15_t)0x916d, - (q15_t)0x4073, (q15_t)0x916a, (q15_t)0x406e, (q15_t)0x9167, (q15_t)0x4069, (q15_t)0x9164, (q15_t)0x4063, (q15_t)0x9160, - (q15_t)0x405e, (q15_t)0x915d, (q15_t)0x4058, (q15_t)0x915a, (q15_t)0x4053, (q15_t)0x9157, (q15_t)0x404d, (q15_t)0x9154, - (q15_t)0x4048, (q15_t)0x9151, (q15_t)0x4043, (q15_t)0x914d, (q15_t)0x403d, (q15_t)0x914a, (q15_t)0x4038, (q15_t)0x9147, - (q15_t)0x4032, (q15_t)0x9144, (q15_t)0x402d, (q15_t)0x9141, (q15_t)0x4027, (q15_t)0x913e, (q15_t)0x4022, (q15_t)0x913a, - (q15_t)0x401d, (q15_t)0x9137, (q15_t)0x4017, (q15_t)0x9134, (q15_t)0x4012, (q15_t)0x9131, (q15_t)0x400c, (q15_t)0x912e, - (q15_t)0x4007, (q15_t)0x912b, (q15_t)0x4001, (q15_t)0x9128, (q15_t)0x3ffc, (q15_t)0x9124, (q15_t)0x3ff6, (q15_t)0x9121, - (q15_t)0x3ff1, (q15_t)0x911e, (q15_t)0x3fec, (q15_t)0x911b, (q15_t)0x3fe6, (q15_t)0x9118, (q15_t)0x3fe1, (q15_t)0x9115, - (q15_t)0x3fdb, (q15_t)0x9112, (q15_t)0x3fd6, (q15_t)0x910f, (q15_t)0x3fd0, (q15_t)0x910b, (q15_t)0x3fcb, (q15_t)0x9108, - (q15_t)0x3fc5, (q15_t)0x9105, (q15_t)0x3fc0, (q15_t)0x9102, (q15_t)0x3fbb, (q15_t)0x90ff, (q15_t)0x3fb5, (q15_t)0x90fc, - (q15_t)0x3fb0, (q15_t)0x90f9, (q15_t)0x3faa, (q15_t)0x90f5, (q15_t)0x3fa5, (q15_t)0x90f2, (q15_t)0x3f9f, (q15_t)0x90ef, - (q15_t)0x3f9a, (q15_t)0x90ec, (q15_t)0x3f94, (q15_t)0x90e9, (q15_t)0x3f8f, (q15_t)0x90e6, (q15_t)0x3f89, (q15_t)0x90e3, - (q15_t)0x3f84, (q15_t)0x90e0, (q15_t)0x3f7f, (q15_t)0x90dd, (q15_t)0x3f79, (q15_t)0x90d9, (q15_t)0x3f74, (q15_t)0x90d6, - (q15_t)0x3f6e, (q15_t)0x90d3, (q15_t)0x3f69, (q15_t)0x90d0, (q15_t)0x3f63, (q15_t)0x90cd, (q15_t)0x3f5e, (q15_t)0x90ca, - (q15_t)0x3f58, (q15_t)0x90c7, (q15_t)0x3f53, (q15_t)0x90c4, (q15_t)0x3f4d, (q15_t)0x90c1, (q15_t)0x3f48, (q15_t)0x90bd, - (q15_t)0x3f43, (q15_t)0x90ba, (q15_t)0x3f3d, (q15_t)0x90b7, (q15_t)0x3f38, (q15_t)0x90b4, (q15_t)0x3f32, (q15_t)0x90b1, - (q15_t)0x3f2d, (q15_t)0x90ae, (q15_t)0x3f27, (q15_t)0x90ab, (q15_t)0x3f22, (q15_t)0x90a8, (q15_t)0x3f1c, (q15_t)0x90a5, - (q15_t)0x3f17, (q15_t)0x90a1, (q15_t)0x3f11, (q15_t)0x909e, (q15_t)0x3f0c, (q15_t)0x909b, (q15_t)0x3f06, (q15_t)0x9098, - (q15_t)0x3f01, (q15_t)0x9095, (q15_t)0x3efb, (q15_t)0x9092, (q15_t)0x3ef6, (q15_t)0x908f, (q15_t)0x3ef1, (q15_t)0x908c, - (q15_t)0x3eeb, (q15_t)0x9089, (q15_t)0x3ee6, (q15_t)0x9086, (q15_t)0x3ee0, (q15_t)0x9083, (q15_t)0x3edb, (q15_t)0x907f, - (q15_t)0x3ed5, (q15_t)0x907c, (q15_t)0x3ed0, (q15_t)0x9079, (q15_t)0x3eca, (q15_t)0x9076, (q15_t)0x3ec5, (q15_t)0x9073, - (q15_t)0x3ebf, (q15_t)0x9070, (q15_t)0x3eba, (q15_t)0x906d, (q15_t)0x3eb4, (q15_t)0x906a, (q15_t)0x3eaf, (q15_t)0x9067, - (q15_t)0x3ea9, (q15_t)0x9064, (q15_t)0x3ea4, (q15_t)0x9061, (q15_t)0x3e9e, (q15_t)0x905e, (q15_t)0x3e99, (q15_t)0x905b, - (q15_t)0x3e93, (q15_t)0x9057, (q15_t)0x3e8e, (q15_t)0x9054, (q15_t)0x3e88, (q15_t)0x9051, (q15_t)0x3e83, (q15_t)0x904e, - (q15_t)0x3e7d, (q15_t)0x904b, (q15_t)0x3e78, (q15_t)0x9048, (q15_t)0x3e73, (q15_t)0x9045, (q15_t)0x3e6d, (q15_t)0x9042, - (q15_t)0x3e68, (q15_t)0x903f, (q15_t)0x3e62, (q15_t)0x903c, (q15_t)0x3e5d, (q15_t)0x9039, (q15_t)0x3e57, (q15_t)0x9036, - (q15_t)0x3e52, (q15_t)0x9033, (q15_t)0x3e4c, (q15_t)0x9030, (q15_t)0x3e47, (q15_t)0x902d, (q15_t)0x3e41, (q15_t)0x902a, - (q15_t)0x3e3c, (q15_t)0x9026, (q15_t)0x3e36, (q15_t)0x9023, (q15_t)0x3e31, (q15_t)0x9020, (q15_t)0x3e2b, (q15_t)0x901d, - (q15_t)0x3e26, (q15_t)0x901a, (q15_t)0x3e20, (q15_t)0x9017, (q15_t)0x3e1b, (q15_t)0x9014, (q15_t)0x3e15, (q15_t)0x9011, - (q15_t)0x3e10, (q15_t)0x900e, (q15_t)0x3e0a, (q15_t)0x900b, (q15_t)0x3e05, (q15_t)0x9008, (q15_t)0x3dff, (q15_t)0x9005, - (q15_t)0x3dfa, (q15_t)0x9002, (q15_t)0x3df4, (q15_t)0x8fff, (q15_t)0x3def, (q15_t)0x8ffc, (q15_t)0x3de9, (q15_t)0x8ff9, - (q15_t)0x3de4, (q15_t)0x8ff6, (q15_t)0x3dde, (q15_t)0x8ff3, (q15_t)0x3dd9, (q15_t)0x8ff0, (q15_t)0x3dd3, (q15_t)0x8fed, - (q15_t)0x3dce, (q15_t)0x8fea, (q15_t)0x3dc8, (q15_t)0x8fe7, (q15_t)0x3dc3, (q15_t)0x8fe3, (q15_t)0x3dbd, (q15_t)0x8fe0, - (q15_t)0x3db8, (q15_t)0x8fdd, (q15_t)0x3db2, (q15_t)0x8fda, (q15_t)0x3dad, (q15_t)0x8fd7, (q15_t)0x3da7, (q15_t)0x8fd4, - (q15_t)0x3da2, (q15_t)0x8fd1, (q15_t)0x3d9c, (q15_t)0x8fce, (q15_t)0x3d97, (q15_t)0x8fcb, (q15_t)0x3d91, (q15_t)0x8fc8, - (q15_t)0x3d8c, (q15_t)0x8fc5, (q15_t)0x3d86, (q15_t)0x8fc2, (q15_t)0x3d81, (q15_t)0x8fbf, (q15_t)0x3d7b, (q15_t)0x8fbc, - (q15_t)0x3d76, (q15_t)0x8fb9, (q15_t)0x3d70, (q15_t)0x8fb6, (q15_t)0x3d6b, (q15_t)0x8fb3, (q15_t)0x3d65, (q15_t)0x8fb0, - (q15_t)0x3d60, (q15_t)0x8fad, (q15_t)0x3d5a, (q15_t)0x8faa, (q15_t)0x3d55, (q15_t)0x8fa7, (q15_t)0x3d4f, (q15_t)0x8fa4, - (q15_t)0x3d49, (q15_t)0x8fa1, (q15_t)0x3d44, (q15_t)0x8f9e, (q15_t)0x3d3e, (q15_t)0x8f9b, (q15_t)0x3d39, (q15_t)0x8f98, - (q15_t)0x3d33, (q15_t)0x8f95, (q15_t)0x3d2e, (q15_t)0x8f92, (q15_t)0x3d28, (q15_t)0x8f8f, (q15_t)0x3d23, (q15_t)0x8f8c, - (q15_t)0x3d1d, (q15_t)0x8f89, (q15_t)0x3d18, (q15_t)0x8f86, (q15_t)0x3d12, (q15_t)0x8f83, (q15_t)0x3d0d, (q15_t)0x8f80, - (q15_t)0x3d07, (q15_t)0x8f7d, (q15_t)0x3d02, (q15_t)0x8f7a, (q15_t)0x3cfc, (q15_t)0x8f77, (q15_t)0x3cf7, (q15_t)0x8f74, - (q15_t)0x3cf1, (q15_t)0x8f71, (q15_t)0x3cec, (q15_t)0x8f6e, (q15_t)0x3ce6, (q15_t)0x8f6b, (q15_t)0x3ce1, (q15_t)0x8f68, - (q15_t)0x3cdb, (q15_t)0x8f65, (q15_t)0x3cd6, (q15_t)0x8f62, (q15_t)0x3cd0, (q15_t)0x8f5f, (q15_t)0x3cca, (q15_t)0x8f5c, - (q15_t)0x3cc5, (q15_t)0x8f59, (q15_t)0x3cbf, (q15_t)0x8f56, (q15_t)0x3cba, (q15_t)0x8f53, (q15_t)0x3cb4, (q15_t)0x8f50, - (q15_t)0x3caf, (q15_t)0x8f4d, (q15_t)0x3ca9, (q15_t)0x8f4a, (q15_t)0x3ca4, (q15_t)0x8f47, (q15_t)0x3c9e, (q15_t)0x8f44, - (q15_t)0x3c99, (q15_t)0x8f41, (q15_t)0x3c93, (q15_t)0x8f3e, (q15_t)0x3c8e, (q15_t)0x8f3b, (q15_t)0x3c88, (q15_t)0x8f38, - (q15_t)0x3c83, (q15_t)0x8f35, (q15_t)0x3c7d, (q15_t)0x8f32, (q15_t)0x3c77, (q15_t)0x8f2f, (q15_t)0x3c72, (q15_t)0x8f2d, - (q15_t)0x3c6c, (q15_t)0x8f2a, (q15_t)0x3c67, (q15_t)0x8f27, (q15_t)0x3c61, (q15_t)0x8f24, (q15_t)0x3c5c, (q15_t)0x8f21, - (q15_t)0x3c56, (q15_t)0x8f1e, (q15_t)0x3c51, (q15_t)0x8f1b, (q15_t)0x3c4b, (q15_t)0x8f18, (q15_t)0x3c46, (q15_t)0x8f15, - (q15_t)0x3c40, (q15_t)0x8f12, (q15_t)0x3c3b, (q15_t)0x8f0f, (q15_t)0x3c35, (q15_t)0x8f0c, (q15_t)0x3c2f, (q15_t)0x8f09, - (q15_t)0x3c2a, (q15_t)0x8f06, (q15_t)0x3c24, (q15_t)0x8f03, (q15_t)0x3c1f, (q15_t)0x8f00, (q15_t)0x3c19, (q15_t)0x8efd, - (q15_t)0x3c14, (q15_t)0x8efa, (q15_t)0x3c0e, (q15_t)0x8ef7, (q15_t)0x3c09, (q15_t)0x8ef4, (q15_t)0x3c03, (q15_t)0x8ef1, - (q15_t)0x3bfd, (q15_t)0x8eee, (q15_t)0x3bf8, (q15_t)0x8eec, (q15_t)0x3bf2, (q15_t)0x8ee9, (q15_t)0x3bed, (q15_t)0x8ee6, - (q15_t)0x3be7, (q15_t)0x8ee3, (q15_t)0x3be2, (q15_t)0x8ee0, (q15_t)0x3bdc, (q15_t)0x8edd, (q15_t)0x3bd7, (q15_t)0x8eda, - (q15_t)0x3bd1, (q15_t)0x8ed7, (q15_t)0x3bcc, (q15_t)0x8ed4, (q15_t)0x3bc6, (q15_t)0x8ed1, (q15_t)0x3bc0, (q15_t)0x8ece, - (q15_t)0x3bbb, (q15_t)0x8ecb, (q15_t)0x3bb5, (q15_t)0x8ec8, (q15_t)0x3bb0, (q15_t)0x8ec5, (q15_t)0x3baa, (q15_t)0x8ec2, - (q15_t)0x3ba5, (q15_t)0x8ebf, (q15_t)0x3b9f, (q15_t)0x8ebd, (q15_t)0x3b99, (q15_t)0x8eba, (q15_t)0x3b94, (q15_t)0x8eb7, - (q15_t)0x3b8e, (q15_t)0x8eb4, (q15_t)0x3b89, (q15_t)0x8eb1, (q15_t)0x3b83, (q15_t)0x8eae, (q15_t)0x3b7e, (q15_t)0x8eab, - (q15_t)0x3b78, (q15_t)0x8ea8, (q15_t)0x3b73, (q15_t)0x8ea5, (q15_t)0x3b6d, (q15_t)0x8ea2, (q15_t)0x3b67, (q15_t)0x8e9f, - (q15_t)0x3b62, (q15_t)0x8e9c, (q15_t)0x3b5c, (q15_t)0x8e99, (q15_t)0x3b57, (q15_t)0x8e97, (q15_t)0x3b51, (q15_t)0x8e94, - (q15_t)0x3b4c, (q15_t)0x8e91, (q15_t)0x3b46, (q15_t)0x8e8e, (q15_t)0x3b40, (q15_t)0x8e8b, (q15_t)0x3b3b, (q15_t)0x8e88, - (q15_t)0x3b35, (q15_t)0x8e85, (q15_t)0x3b30, (q15_t)0x8e82, (q15_t)0x3b2a, (q15_t)0x8e7f, (q15_t)0x3b25, (q15_t)0x8e7c, - (q15_t)0x3b1f, (q15_t)0x8e7a, (q15_t)0x3b19, (q15_t)0x8e77, (q15_t)0x3b14, (q15_t)0x8e74, (q15_t)0x3b0e, (q15_t)0x8e71, - (q15_t)0x3b09, (q15_t)0x8e6e, (q15_t)0x3b03, (q15_t)0x8e6b, (q15_t)0x3afe, (q15_t)0x8e68, (q15_t)0x3af8, (q15_t)0x8e65, - (q15_t)0x3af2, (q15_t)0x8e62, (q15_t)0x3aed, (q15_t)0x8e5f, (q15_t)0x3ae7, (q15_t)0x8e5d, (q15_t)0x3ae2, (q15_t)0x8e5a, - (q15_t)0x3adc, (q15_t)0x8e57, (q15_t)0x3ad7, (q15_t)0x8e54, (q15_t)0x3ad1, (q15_t)0x8e51, (q15_t)0x3acb, (q15_t)0x8e4e, - (q15_t)0x3ac6, (q15_t)0x8e4b, (q15_t)0x3ac0, (q15_t)0x8e48, (q15_t)0x3abb, (q15_t)0x8e45, (q15_t)0x3ab5, (q15_t)0x8e43, - (q15_t)0x3aaf, (q15_t)0x8e40, (q15_t)0x3aaa, (q15_t)0x8e3d, (q15_t)0x3aa4, (q15_t)0x8e3a, (q15_t)0x3a9f, (q15_t)0x8e37, - (q15_t)0x3a99, (q15_t)0x8e34, (q15_t)0x3a94, (q15_t)0x8e31, (q15_t)0x3a8e, (q15_t)0x8e2e, (q15_t)0x3a88, (q15_t)0x8e2c, - (q15_t)0x3a83, (q15_t)0x8e29, (q15_t)0x3a7d, (q15_t)0x8e26, (q15_t)0x3a78, (q15_t)0x8e23, (q15_t)0x3a72, (q15_t)0x8e20, - (q15_t)0x3a6c, (q15_t)0x8e1d, (q15_t)0x3a67, (q15_t)0x8e1a, (q15_t)0x3a61, (q15_t)0x8e17, (q15_t)0x3a5c, (q15_t)0x8e15, - (q15_t)0x3a56, (q15_t)0x8e12, (q15_t)0x3a50, (q15_t)0x8e0f, (q15_t)0x3a4b, (q15_t)0x8e0c, (q15_t)0x3a45, (q15_t)0x8e09, - (q15_t)0x3a40, (q15_t)0x8e06, (q15_t)0x3a3a, (q15_t)0x8e03, (q15_t)0x3a34, (q15_t)0x8e01, (q15_t)0x3a2f, (q15_t)0x8dfe, - (q15_t)0x3a29, (q15_t)0x8dfb, (q15_t)0x3a24, (q15_t)0x8df8, (q15_t)0x3a1e, (q15_t)0x8df5, (q15_t)0x3a19, (q15_t)0x8df2, - (q15_t)0x3a13, (q15_t)0x8def, (q15_t)0x3a0d, (q15_t)0x8ded, (q15_t)0x3a08, (q15_t)0x8dea, (q15_t)0x3a02, (q15_t)0x8de7, - (q15_t)0x39fd, (q15_t)0x8de4, (q15_t)0x39f7, (q15_t)0x8de1, (q15_t)0x39f1, (q15_t)0x8dde, (q15_t)0x39ec, (q15_t)0x8ddc, - (q15_t)0x39e6, (q15_t)0x8dd9, (q15_t)0x39e0, (q15_t)0x8dd6, (q15_t)0x39db, (q15_t)0x8dd3, (q15_t)0x39d5, (q15_t)0x8dd0, - (q15_t)0x39d0, (q15_t)0x8dcd, (q15_t)0x39ca, (q15_t)0x8dca, (q15_t)0x39c4, (q15_t)0x8dc8, (q15_t)0x39bf, (q15_t)0x8dc5, - (q15_t)0x39b9, (q15_t)0x8dc2, (q15_t)0x39b4, (q15_t)0x8dbf, (q15_t)0x39ae, (q15_t)0x8dbc, (q15_t)0x39a8, (q15_t)0x8db9, - (q15_t)0x39a3, (q15_t)0x8db7, (q15_t)0x399d, (q15_t)0x8db4, (q15_t)0x3998, (q15_t)0x8db1, (q15_t)0x3992, (q15_t)0x8dae, - (q15_t)0x398c, (q15_t)0x8dab, (q15_t)0x3987, (q15_t)0x8da9, (q15_t)0x3981, (q15_t)0x8da6, (q15_t)0x397c, (q15_t)0x8da3, - (q15_t)0x3976, (q15_t)0x8da0, (q15_t)0x3970, (q15_t)0x8d9d, (q15_t)0x396b, (q15_t)0x8d9a, (q15_t)0x3965, (q15_t)0x8d98, - (q15_t)0x395f, (q15_t)0x8d95, (q15_t)0x395a, (q15_t)0x8d92, (q15_t)0x3954, (q15_t)0x8d8f, (q15_t)0x394f, (q15_t)0x8d8c, - (q15_t)0x3949, (q15_t)0x8d8a, (q15_t)0x3943, (q15_t)0x8d87, (q15_t)0x393e, (q15_t)0x8d84, (q15_t)0x3938, (q15_t)0x8d81, - (q15_t)0x3932, (q15_t)0x8d7e, (q15_t)0x392d, (q15_t)0x8d7b, (q15_t)0x3927, (q15_t)0x8d79, (q15_t)0x3922, (q15_t)0x8d76, - (q15_t)0x391c, (q15_t)0x8d73, (q15_t)0x3916, (q15_t)0x8d70, (q15_t)0x3911, (q15_t)0x8d6d, (q15_t)0x390b, (q15_t)0x8d6b, - (q15_t)0x3906, (q15_t)0x8d68, (q15_t)0x3900, (q15_t)0x8d65, (q15_t)0x38fa, (q15_t)0x8d62, (q15_t)0x38f5, (q15_t)0x8d5f, - (q15_t)0x38ef, (q15_t)0x8d5d, (q15_t)0x38e9, (q15_t)0x8d5a, (q15_t)0x38e4, (q15_t)0x8d57, (q15_t)0x38de, (q15_t)0x8d54, - (q15_t)0x38d8, (q15_t)0x8d51, (q15_t)0x38d3, (q15_t)0x8d4f, (q15_t)0x38cd, (q15_t)0x8d4c, (q15_t)0x38c8, (q15_t)0x8d49, - (q15_t)0x38c2, (q15_t)0x8d46, (q15_t)0x38bc, (q15_t)0x8d44, (q15_t)0x38b7, (q15_t)0x8d41, (q15_t)0x38b1, (q15_t)0x8d3e, - (q15_t)0x38ab, (q15_t)0x8d3b, (q15_t)0x38a6, (q15_t)0x8d38, (q15_t)0x38a0, (q15_t)0x8d36, (q15_t)0x389b, (q15_t)0x8d33, - (q15_t)0x3895, (q15_t)0x8d30, (q15_t)0x388f, (q15_t)0x8d2d, (q15_t)0x388a, (q15_t)0x8d2b, (q15_t)0x3884, (q15_t)0x8d28, - (q15_t)0x387e, (q15_t)0x8d25, (q15_t)0x3879, (q15_t)0x8d22, (q15_t)0x3873, (q15_t)0x8d1f, (q15_t)0x386d, (q15_t)0x8d1d, - (q15_t)0x3868, (q15_t)0x8d1a, (q15_t)0x3862, (q15_t)0x8d17, (q15_t)0x385d, (q15_t)0x8d14, (q15_t)0x3857, (q15_t)0x8d12, - (q15_t)0x3851, (q15_t)0x8d0f, (q15_t)0x384c, (q15_t)0x8d0c, (q15_t)0x3846, (q15_t)0x8d09, (q15_t)0x3840, (q15_t)0x8d07, - (q15_t)0x383b, (q15_t)0x8d04, (q15_t)0x3835, (q15_t)0x8d01, (q15_t)0x382f, (q15_t)0x8cfe, (q15_t)0x382a, (q15_t)0x8cfb, - (q15_t)0x3824, (q15_t)0x8cf9, (q15_t)0x381e, (q15_t)0x8cf6, (q15_t)0x3819, (q15_t)0x8cf3, (q15_t)0x3813, (q15_t)0x8cf0, - (q15_t)0x380d, (q15_t)0x8cee, (q15_t)0x3808, (q15_t)0x8ceb, (q15_t)0x3802, (q15_t)0x8ce8, (q15_t)0x37fd, (q15_t)0x8ce5, - (q15_t)0x37f7, (q15_t)0x8ce3, (q15_t)0x37f1, (q15_t)0x8ce0, (q15_t)0x37ec, (q15_t)0x8cdd, (q15_t)0x37e6, (q15_t)0x8cda, - (q15_t)0x37e0, (q15_t)0x8cd8, (q15_t)0x37db, (q15_t)0x8cd5, (q15_t)0x37d5, (q15_t)0x8cd2, (q15_t)0x37cf, (q15_t)0x8cd0, - (q15_t)0x37ca, (q15_t)0x8ccd, (q15_t)0x37c4, (q15_t)0x8cca, (q15_t)0x37be, (q15_t)0x8cc7, (q15_t)0x37b9, (q15_t)0x8cc5, - (q15_t)0x37b3, (q15_t)0x8cc2, (q15_t)0x37ad, (q15_t)0x8cbf, (q15_t)0x37a8, (q15_t)0x8cbc, (q15_t)0x37a2, (q15_t)0x8cba, - (q15_t)0x379c, (q15_t)0x8cb7, (q15_t)0x3797, (q15_t)0x8cb4, (q15_t)0x3791, (q15_t)0x8cb1, (q15_t)0x378b, (q15_t)0x8caf, - (q15_t)0x3786, (q15_t)0x8cac, (q15_t)0x3780, (q15_t)0x8ca9, (q15_t)0x377a, (q15_t)0x8ca7, (q15_t)0x3775, (q15_t)0x8ca4, - (q15_t)0x376f, (q15_t)0x8ca1, (q15_t)0x3769, (q15_t)0x8c9e, (q15_t)0x3764, (q15_t)0x8c9c, (q15_t)0x375e, (q15_t)0x8c99, - (q15_t)0x3758, (q15_t)0x8c96, (q15_t)0x3753, (q15_t)0x8c94, (q15_t)0x374d, (q15_t)0x8c91, (q15_t)0x3747, (q15_t)0x8c8e, - (q15_t)0x3742, (q15_t)0x8c8b, (q15_t)0x373c, (q15_t)0x8c89, (q15_t)0x3736, (q15_t)0x8c86, (q15_t)0x3731, (q15_t)0x8c83, - (q15_t)0x372b, (q15_t)0x8c81, (q15_t)0x3725, (q15_t)0x8c7e, (q15_t)0x3720, (q15_t)0x8c7b, (q15_t)0x371a, (q15_t)0x8c78, - (q15_t)0x3714, (q15_t)0x8c76, (q15_t)0x370f, (q15_t)0x8c73, (q15_t)0x3709, (q15_t)0x8c70, (q15_t)0x3703, (q15_t)0x8c6e, - (q15_t)0x36fe, (q15_t)0x8c6b, (q15_t)0x36f8, (q15_t)0x8c68, (q15_t)0x36f2, (q15_t)0x8c65, (q15_t)0x36ed, (q15_t)0x8c63, - (q15_t)0x36e7, (q15_t)0x8c60, (q15_t)0x36e1, (q15_t)0x8c5d, (q15_t)0x36dc, (q15_t)0x8c5b, (q15_t)0x36d6, (q15_t)0x8c58, - (q15_t)0x36d0, (q15_t)0x8c55, (q15_t)0x36cb, (q15_t)0x8c53, (q15_t)0x36c5, (q15_t)0x8c50, (q15_t)0x36bf, (q15_t)0x8c4d, - (q15_t)0x36ba, (q15_t)0x8c4b, (q15_t)0x36b4, (q15_t)0x8c48, (q15_t)0x36ae, (q15_t)0x8c45, (q15_t)0x36a9, (q15_t)0x8c43, - (q15_t)0x36a3, (q15_t)0x8c40, (q15_t)0x369d, (q15_t)0x8c3d, (q15_t)0x3698, (q15_t)0x8c3a, (q15_t)0x3692, (q15_t)0x8c38, - (q15_t)0x368c, (q15_t)0x8c35, (q15_t)0x3686, (q15_t)0x8c32, (q15_t)0x3681, (q15_t)0x8c30, (q15_t)0x367b, (q15_t)0x8c2d, - (q15_t)0x3675, (q15_t)0x8c2a, (q15_t)0x3670, (q15_t)0x8c28, (q15_t)0x366a, (q15_t)0x8c25, (q15_t)0x3664, (q15_t)0x8c22, - (q15_t)0x365f, (q15_t)0x8c20, (q15_t)0x3659, (q15_t)0x8c1d, (q15_t)0x3653, (q15_t)0x8c1a, (q15_t)0x364e, (q15_t)0x8c18, - (q15_t)0x3648, (q15_t)0x8c15, (q15_t)0x3642, (q15_t)0x8c12, (q15_t)0x363d, (q15_t)0x8c10, (q15_t)0x3637, (q15_t)0x8c0d, - (q15_t)0x3631, (q15_t)0x8c0a, (q15_t)0x362b, (q15_t)0x8c08, (q15_t)0x3626, (q15_t)0x8c05, (q15_t)0x3620, (q15_t)0x8c02, - (q15_t)0x361a, (q15_t)0x8c00, (q15_t)0x3615, (q15_t)0x8bfd, (q15_t)0x360f, (q15_t)0x8bfa, (q15_t)0x3609, (q15_t)0x8bf8, - (q15_t)0x3604, (q15_t)0x8bf5, (q15_t)0x35fe, (q15_t)0x8bf3, (q15_t)0x35f8, (q15_t)0x8bf0, (q15_t)0x35f3, (q15_t)0x8bed, - (q15_t)0x35ed, (q15_t)0x8beb, (q15_t)0x35e7, (q15_t)0x8be8, (q15_t)0x35e1, (q15_t)0x8be5, (q15_t)0x35dc, (q15_t)0x8be3, - (q15_t)0x35d6, (q15_t)0x8be0, (q15_t)0x35d0, (q15_t)0x8bdd, (q15_t)0x35cb, (q15_t)0x8bdb, (q15_t)0x35c5, (q15_t)0x8bd8, - (q15_t)0x35bf, (q15_t)0x8bd5, (q15_t)0x35ba, (q15_t)0x8bd3, (q15_t)0x35b4, (q15_t)0x8bd0, (q15_t)0x35ae, (q15_t)0x8bce, - (q15_t)0x35a8, (q15_t)0x8bcb, (q15_t)0x35a3, (q15_t)0x8bc8, (q15_t)0x359d, (q15_t)0x8bc6, (q15_t)0x3597, (q15_t)0x8bc3, - (q15_t)0x3592, (q15_t)0x8bc0, (q15_t)0x358c, (q15_t)0x8bbe, (q15_t)0x3586, (q15_t)0x8bbb, (q15_t)0x3580, (q15_t)0x8bb8, - (q15_t)0x357b, (q15_t)0x8bb6, (q15_t)0x3575, (q15_t)0x8bb3, (q15_t)0x356f, (q15_t)0x8bb1, (q15_t)0x356a, (q15_t)0x8bae, - (q15_t)0x3564, (q15_t)0x8bab, (q15_t)0x355e, (q15_t)0x8ba9, (q15_t)0x3558, (q15_t)0x8ba6, (q15_t)0x3553, (q15_t)0x8ba4, - (q15_t)0x354d, (q15_t)0x8ba1, (q15_t)0x3547, (q15_t)0x8b9e, (q15_t)0x3542, (q15_t)0x8b9c, (q15_t)0x353c, (q15_t)0x8b99, - (q15_t)0x3536, (q15_t)0x8b96, (q15_t)0x3530, (q15_t)0x8b94, (q15_t)0x352b, (q15_t)0x8b91, (q15_t)0x3525, (q15_t)0x8b8f, - (q15_t)0x351f, (q15_t)0x8b8c, (q15_t)0x351a, (q15_t)0x8b89, (q15_t)0x3514, (q15_t)0x8b87, (q15_t)0x350e, (q15_t)0x8b84, - (q15_t)0x3508, (q15_t)0x8b82, (q15_t)0x3503, (q15_t)0x8b7f, (q15_t)0x34fd, (q15_t)0x8b7c, (q15_t)0x34f7, (q15_t)0x8b7a, - (q15_t)0x34f2, (q15_t)0x8b77, (q15_t)0x34ec, (q15_t)0x8b75, (q15_t)0x34e6, (q15_t)0x8b72, (q15_t)0x34e0, (q15_t)0x8b6f, - (q15_t)0x34db, (q15_t)0x8b6d, (q15_t)0x34d5, (q15_t)0x8b6a, (q15_t)0x34cf, (q15_t)0x8b68, (q15_t)0x34ca, (q15_t)0x8b65, - (q15_t)0x34c4, (q15_t)0x8b62, (q15_t)0x34be, (q15_t)0x8b60, (q15_t)0x34b8, (q15_t)0x8b5d, (q15_t)0x34b3, (q15_t)0x8b5b, - (q15_t)0x34ad, (q15_t)0x8b58, (q15_t)0x34a7, (q15_t)0x8b55, (q15_t)0x34a1, (q15_t)0x8b53, (q15_t)0x349c, (q15_t)0x8b50, - (q15_t)0x3496, (q15_t)0x8b4e, (q15_t)0x3490, (q15_t)0x8b4b, (q15_t)0x348b, (q15_t)0x8b49, (q15_t)0x3485, (q15_t)0x8b46, - (q15_t)0x347f, (q15_t)0x8b43, (q15_t)0x3479, (q15_t)0x8b41, (q15_t)0x3474, (q15_t)0x8b3e, (q15_t)0x346e, (q15_t)0x8b3c, - (q15_t)0x3468, (q15_t)0x8b39, (q15_t)0x3462, (q15_t)0x8b37, (q15_t)0x345d, (q15_t)0x8b34, (q15_t)0x3457, (q15_t)0x8b31, - (q15_t)0x3451, (q15_t)0x8b2f, (q15_t)0x344b, (q15_t)0x8b2c, (q15_t)0x3446, (q15_t)0x8b2a, (q15_t)0x3440, (q15_t)0x8b27, - (q15_t)0x343a, (q15_t)0x8b25, (q15_t)0x3435, (q15_t)0x8b22, (q15_t)0x342f, (q15_t)0x8b1f, (q15_t)0x3429, (q15_t)0x8b1d, - (q15_t)0x3423, (q15_t)0x8b1a, (q15_t)0x341e, (q15_t)0x8b18, (q15_t)0x3418, (q15_t)0x8b15, (q15_t)0x3412, (q15_t)0x8b13, - (q15_t)0x340c, (q15_t)0x8b10, (q15_t)0x3407, (q15_t)0x8b0e, (q15_t)0x3401, (q15_t)0x8b0b, (q15_t)0x33fb, (q15_t)0x8b08, - (q15_t)0x33f5, (q15_t)0x8b06, (q15_t)0x33f0, (q15_t)0x8b03, (q15_t)0x33ea, (q15_t)0x8b01, (q15_t)0x33e4, (q15_t)0x8afe, - (q15_t)0x33de, (q15_t)0x8afc, (q15_t)0x33d9, (q15_t)0x8af9, (q15_t)0x33d3, (q15_t)0x8af7, (q15_t)0x33cd, (q15_t)0x8af4, - (q15_t)0x33c7, (q15_t)0x8af1, (q15_t)0x33c2, (q15_t)0x8aef, (q15_t)0x33bc, (q15_t)0x8aec, (q15_t)0x33b6, (q15_t)0x8aea, - (q15_t)0x33b0, (q15_t)0x8ae7, (q15_t)0x33ab, (q15_t)0x8ae5, (q15_t)0x33a5, (q15_t)0x8ae2, (q15_t)0x339f, (q15_t)0x8ae0, - (q15_t)0x3399, (q15_t)0x8add, (q15_t)0x3394, (q15_t)0x8adb, (q15_t)0x338e, (q15_t)0x8ad8, (q15_t)0x3388, (q15_t)0x8ad6, - (q15_t)0x3382, (q15_t)0x8ad3, (q15_t)0x337d, (q15_t)0x8ad1, (q15_t)0x3377, (q15_t)0x8ace, (q15_t)0x3371, (q15_t)0x8acb, - (q15_t)0x336b, (q15_t)0x8ac9, (q15_t)0x3366, (q15_t)0x8ac6, (q15_t)0x3360, (q15_t)0x8ac4, (q15_t)0x335a, (q15_t)0x8ac1, - (q15_t)0x3354, (q15_t)0x8abf, (q15_t)0x334f, (q15_t)0x8abc, (q15_t)0x3349, (q15_t)0x8aba, (q15_t)0x3343, (q15_t)0x8ab7, - (q15_t)0x333d, (q15_t)0x8ab5, (q15_t)0x3338, (q15_t)0x8ab2, (q15_t)0x3332, (q15_t)0x8ab0, (q15_t)0x332c, (q15_t)0x8aad, - (q15_t)0x3326, (q15_t)0x8aab, (q15_t)0x3321, (q15_t)0x8aa8, (q15_t)0x331b, (q15_t)0x8aa6, (q15_t)0x3315, (q15_t)0x8aa3, - (q15_t)0x330f, (q15_t)0x8aa1, (q15_t)0x330a, (q15_t)0x8a9e, (q15_t)0x3304, (q15_t)0x8a9c, (q15_t)0x32fe, (q15_t)0x8a99, - (q15_t)0x32f8, (q15_t)0x8a97, (q15_t)0x32f3, (q15_t)0x8a94, (q15_t)0x32ed, (q15_t)0x8a92, (q15_t)0x32e7, (q15_t)0x8a8f, - (q15_t)0x32e1, (q15_t)0x8a8d, (q15_t)0x32db, (q15_t)0x8a8a, (q15_t)0x32d6, (q15_t)0x8a88, (q15_t)0x32d0, (q15_t)0x8a85, - (q15_t)0x32ca, (q15_t)0x8a83, (q15_t)0x32c4, (q15_t)0x8a80, (q15_t)0x32bf, (q15_t)0x8a7e, (q15_t)0x32b9, (q15_t)0x8a7b, - (q15_t)0x32b3, (q15_t)0x8a79, (q15_t)0x32ad, (q15_t)0x8a76, (q15_t)0x32a8, (q15_t)0x8a74, (q15_t)0x32a2, (q15_t)0x8a71, - (q15_t)0x329c, (q15_t)0x8a6f, (q15_t)0x3296, (q15_t)0x8a6c, (q15_t)0x3290, (q15_t)0x8a6a, (q15_t)0x328b, (q15_t)0x8a67, - (q15_t)0x3285, (q15_t)0x8a65, (q15_t)0x327f, (q15_t)0x8a62, (q15_t)0x3279, (q15_t)0x8a60, (q15_t)0x3274, (q15_t)0x8a5d, - (q15_t)0x326e, (q15_t)0x8a5b, (q15_t)0x3268, (q15_t)0x8a59, (q15_t)0x3262, (q15_t)0x8a56, (q15_t)0x325d, (q15_t)0x8a54, - (q15_t)0x3257, (q15_t)0x8a51, (q15_t)0x3251, (q15_t)0x8a4f, (q15_t)0x324b, (q15_t)0x8a4c, (q15_t)0x3245, (q15_t)0x8a4a, - (q15_t)0x3240, (q15_t)0x8a47, (q15_t)0x323a, (q15_t)0x8a45, (q15_t)0x3234, (q15_t)0x8a42, (q15_t)0x322e, (q15_t)0x8a40, - (q15_t)0x3228, (q15_t)0x8a3d, (q15_t)0x3223, (q15_t)0x8a3b, (q15_t)0x321d, (q15_t)0x8a38, (q15_t)0x3217, (q15_t)0x8a36, - (q15_t)0x3211, (q15_t)0x8a34, (q15_t)0x320c, (q15_t)0x8a31, (q15_t)0x3206, (q15_t)0x8a2f, (q15_t)0x3200, (q15_t)0x8a2c, - (q15_t)0x31fa, (q15_t)0x8a2a, (q15_t)0x31f4, (q15_t)0x8a27, (q15_t)0x31ef, (q15_t)0x8a25, (q15_t)0x31e9, (q15_t)0x8a22, - (q15_t)0x31e3, (q15_t)0x8a20, (q15_t)0x31dd, (q15_t)0x8a1d, (q15_t)0x31d8, (q15_t)0x8a1b, (q15_t)0x31d2, (q15_t)0x8a19, - (q15_t)0x31cc, (q15_t)0x8a16, (q15_t)0x31c6, (q15_t)0x8a14, (q15_t)0x31c0, (q15_t)0x8a11, (q15_t)0x31bb, (q15_t)0x8a0f, - (q15_t)0x31b5, (q15_t)0x8a0c, (q15_t)0x31af, (q15_t)0x8a0a, (q15_t)0x31a9, (q15_t)0x8a07, (q15_t)0x31a3, (q15_t)0x8a05, - (q15_t)0x319e, (q15_t)0x8a03, (q15_t)0x3198, (q15_t)0x8a00, (q15_t)0x3192, (q15_t)0x89fe, (q15_t)0x318c, (q15_t)0x89fb, - (q15_t)0x3186, (q15_t)0x89f9, (q15_t)0x3181, (q15_t)0x89f6, (q15_t)0x317b, (q15_t)0x89f4, (q15_t)0x3175, (q15_t)0x89f2, - (q15_t)0x316f, (q15_t)0x89ef, (q15_t)0x3169, (q15_t)0x89ed, (q15_t)0x3164, (q15_t)0x89ea, (q15_t)0x315e, (q15_t)0x89e8, - (q15_t)0x3158, (q15_t)0x89e5, (q15_t)0x3152, (q15_t)0x89e3, (q15_t)0x314c, (q15_t)0x89e1, (q15_t)0x3147, (q15_t)0x89de, - (q15_t)0x3141, (q15_t)0x89dc, (q15_t)0x313b, (q15_t)0x89d9, (q15_t)0x3135, (q15_t)0x89d7, (q15_t)0x312f, (q15_t)0x89d5, - (q15_t)0x312a, (q15_t)0x89d2, (q15_t)0x3124, (q15_t)0x89d0, (q15_t)0x311e, (q15_t)0x89cd, (q15_t)0x3118, (q15_t)0x89cb, - (q15_t)0x3112, (q15_t)0x89c8, (q15_t)0x310d, (q15_t)0x89c6, (q15_t)0x3107, (q15_t)0x89c4, (q15_t)0x3101, (q15_t)0x89c1, - (q15_t)0x30fb, (q15_t)0x89bf, (q15_t)0x30f5, (q15_t)0x89bc, (q15_t)0x30f0, (q15_t)0x89ba, (q15_t)0x30ea, (q15_t)0x89b8, - (q15_t)0x30e4, (q15_t)0x89b5, (q15_t)0x30de, (q15_t)0x89b3, (q15_t)0x30d8, (q15_t)0x89b0, (q15_t)0x30d3, (q15_t)0x89ae, - (q15_t)0x30cd, (q15_t)0x89ac, (q15_t)0x30c7, (q15_t)0x89a9, (q15_t)0x30c1, (q15_t)0x89a7, (q15_t)0x30bb, (q15_t)0x89a4, - (q15_t)0x30b6, (q15_t)0x89a2, (q15_t)0x30b0, (q15_t)0x89a0, (q15_t)0x30aa, (q15_t)0x899d, (q15_t)0x30a4, (q15_t)0x899b, - (q15_t)0x309e, (q15_t)0x8998, (q15_t)0x3099, (q15_t)0x8996, (q15_t)0x3093, (q15_t)0x8994, (q15_t)0x308d, (q15_t)0x8991, - (q15_t)0x3087, (q15_t)0x898f, (q15_t)0x3081, (q15_t)0x898d, (q15_t)0x307b, (q15_t)0x898a, (q15_t)0x3076, (q15_t)0x8988, - (q15_t)0x3070, (q15_t)0x8985, (q15_t)0x306a, (q15_t)0x8983, (q15_t)0x3064, (q15_t)0x8981, (q15_t)0x305e, (q15_t)0x897e, - (q15_t)0x3059, (q15_t)0x897c, (q15_t)0x3053, (q15_t)0x897a, (q15_t)0x304d, (q15_t)0x8977, (q15_t)0x3047, (q15_t)0x8975, - (q15_t)0x3041, (q15_t)0x8972, (q15_t)0x303b, (q15_t)0x8970, (q15_t)0x3036, (q15_t)0x896e, (q15_t)0x3030, (q15_t)0x896b, - (q15_t)0x302a, (q15_t)0x8969, (q15_t)0x3024, (q15_t)0x8967, (q15_t)0x301e, (q15_t)0x8964, (q15_t)0x3019, (q15_t)0x8962, - (q15_t)0x3013, (q15_t)0x8960, (q15_t)0x300d, (q15_t)0x895d, (q15_t)0x3007, (q15_t)0x895b, (q15_t)0x3001, (q15_t)0x8958, - (q15_t)0x2ffb, (q15_t)0x8956, (q15_t)0x2ff6, (q15_t)0x8954, (q15_t)0x2ff0, (q15_t)0x8951, (q15_t)0x2fea, (q15_t)0x894f, - (q15_t)0x2fe4, (q15_t)0x894d, (q15_t)0x2fde, (q15_t)0x894a, (q15_t)0x2fd8, (q15_t)0x8948, (q15_t)0x2fd3, (q15_t)0x8946, - (q15_t)0x2fcd, (q15_t)0x8943, (q15_t)0x2fc7, (q15_t)0x8941, (q15_t)0x2fc1, (q15_t)0x893f, (q15_t)0x2fbb, (q15_t)0x893c, - (q15_t)0x2fb5, (q15_t)0x893a, (q15_t)0x2fb0, (q15_t)0x8938, (q15_t)0x2faa, (q15_t)0x8935, (q15_t)0x2fa4, (q15_t)0x8933, - (q15_t)0x2f9e, (q15_t)0x8931, (q15_t)0x2f98, (q15_t)0x892e, (q15_t)0x2f92, (q15_t)0x892c, (q15_t)0x2f8d, (q15_t)0x892a, - (q15_t)0x2f87, (q15_t)0x8927, (q15_t)0x2f81, (q15_t)0x8925, (q15_t)0x2f7b, (q15_t)0x8923, (q15_t)0x2f75, (q15_t)0x8920, - (q15_t)0x2f6f, (q15_t)0x891e, (q15_t)0x2f6a, (q15_t)0x891c, (q15_t)0x2f64, (q15_t)0x8919, (q15_t)0x2f5e, (q15_t)0x8917, - (q15_t)0x2f58, (q15_t)0x8915, (q15_t)0x2f52, (q15_t)0x8912, (q15_t)0x2f4c, (q15_t)0x8910, (q15_t)0x2f47, (q15_t)0x890e, - (q15_t)0x2f41, (q15_t)0x890b, (q15_t)0x2f3b, (q15_t)0x8909, (q15_t)0x2f35, (q15_t)0x8907, (q15_t)0x2f2f, (q15_t)0x8904, - (q15_t)0x2f29, (q15_t)0x8902, (q15_t)0x2f24, (q15_t)0x8900, (q15_t)0x2f1e, (q15_t)0x88fd, (q15_t)0x2f18, (q15_t)0x88fb, - (q15_t)0x2f12, (q15_t)0x88f9, (q15_t)0x2f0c, (q15_t)0x88f6, (q15_t)0x2f06, (q15_t)0x88f4, (q15_t)0x2f01, (q15_t)0x88f2, - (q15_t)0x2efb, (q15_t)0x88f0, (q15_t)0x2ef5, (q15_t)0x88ed, (q15_t)0x2eef, (q15_t)0x88eb, (q15_t)0x2ee9, (q15_t)0x88e9, - (q15_t)0x2ee3, (q15_t)0x88e6, (q15_t)0x2edd, (q15_t)0x88e4, (q15_t)0x2ed8, (q15_t)0x88e2, (q15_t)0x2ed2, (q15_t)0x88df, - (q15_t)0x2ecc, (q15_t)0x88dd, (q15_t)0x2ec6, (q15_t)0x88db, (q15_t)0x2ec0, (q15_t)0x88d9, (q15_t)0x2eba, (q15_t)0x88d6, - (q15_t)0x2eb5, (q15_t)0x88d4, (q15_t)0x2eaf, (q15_t)0x88d2, (q15_t)0x2ea9, (q15_t)0x88cf, (q15_t)0x2ea3, (q15_t)0x88cd, - (q15_t)0x2e9d, (q15_t)0x88cb, (q15_t)0x2e97, (q15_t)0x88c8, (q15_t)0x2e91, (q15_t)0x88c6, (q15_t)0x2e8c, (q15_t)0x88c4, - (q15_t)0x2e86, (q15_t)0x88c2, (q15_t)0x2e80, (q15_t)0x88bf, (q15_t)0x2e7a, (q15_t)0x88bd, (q15_t)0x2e74, (q15_t)0x88bb, - (q15_t)0x2e6e, (q15_t)0x88b9, (q15_t)0x2e68, (q15_t)0x88b6, (q15_t)0x2e63, (q15_t)0x88b4, (q15_t)0x2e5d, (q15_t)0x88b2, - (q15_t)0x2e57, (q15_t)0x88af, (q15_t)0x2e51, (q15_t)0x88ad, (q15_t)0x2e4b, (q15_t)0x88ab, (q15_t)0x2e45, (q15_t)0x88a9, - (q15_t)0x2e3f, (q15_t)0x88a6, (q15_t)0x2e3a, (q15_t)0x88a4, (q15_t)0x2e34, (q15_t)0x88a2, (q15_t)0x2e2e, (q15_t)0x88a0, - (q15_t)0x2e28, (q15_t)0x889d, (q15_t)0x2e22, (q15_t)0x889b, (q15_t)0x2e1c, (q15_t)0x8899, (q15_t)0x2e16, (q15_t)0x8896, - (q15_t)0x2e11, (q15_t)0x8894, (q15_t)0x2e0b, (q15_t)0x8892, (q15_t)0x2e05, (q15_t)0x8890, (q15_t)0x2dff, (q15_t)0x888d, - (q15_t)0x2df9, (q15_t)0x888b, (q15_t)0x2df3, (q15_t)0x8889, (q15_t)0x2ded, (q15_t)0x8887, (q15_t)0x2de7, (q15_t)0x8884, - (q15_t)0x2de2, (q15_t)0x8882, (q15_t)0x2ddc, (q15_t)0x8880, (q15_t)0x2dd6, (q15_t)0x887e, (q15_t)0x2dd0, (q15_t)0x887b, - (q15_t)0x2dca, (q15_t)0x8879, (q15_t)0x2dc4, (q15_t)0x8877, (q15_t)0x2dbe, (q15_t)0x8875, (q15_t)0x2db9, (q15_t)0x8872, - (q15_t)0x2db3, (q15_t)0x8870, (q15_t)0x2dad, (q15_t)0x886e, (q15_t)0x2da7, (q15_t)0x886c, (q15_t)0x2da1, (q15_t)0x8869, - (q15_t)0x2d9b, (q15_t)0x8867, (q15_t)0x2d95, (q15_t)0x8865, (q15_t)0x2d8f, (q15_t)0x8863, (q15_t)0x2d8a, (q15_t)0x8860, - (q15_t)0x2d84, (q15_t)0x885e, (q15_t)0x2d7e, (q15_t)0x885c, (q15_t)0x2d78, (q15_t)0x885a, (q15_t)0x2d72, (q15_t)0x8858, - (q15_t)0x2d6c, (q15_t)0x8855, (q15_t)0x2d66, (q15_t)0x8853, (q15_t)0x2d60, (q15_t)0x8851, (q15_t)0x2d5b, (q15_t)0x884f, - (q15_t)0x2d55, (q15_t)0x884c, (q15_t)0x2d4f, (q15_t)0x884a, (q15_t)0x2d49, (q15_t)0x8848, (q15_t)0x2d43, (q15_t)0x8846, - (q15_t)0x2d3d, (q15_t)0x8844, (q15_t)0x2d37, (q15_t)0x8841, (q15_t)0x2d31, (q15_t)0x883f, (q15_t)0x2d2c, (q15_t)0x883d, - (q15_t)0x2d26, (q15_t)0x883b, (q15_t)0x2d20, (q15_t)0x8838, (q15_t)0x2d1a, (q15_t)0x8836, (q15_t)0x2d14, (q15_t)0x8834, - (q15_t)0x2d0e, (q15_t)0x8832, (q15_t)0x2d08, (q15_t)0x8830, (q15_t)0x2d02, (q15_t)0x882d, (q15_t)0x2cfd, (q15_t)0x882b, - (q15_t)0x2cf7, (q15_t)0x8829, (q15_t)0x2cf1, (q15_t)0x8827, (q15_t)0x2ceb, (q15_t)0x8825, (q15_t)0x2ce5, (q15_t)0x8822, - (q15_t)0x2cdf, (q15_t)0x8820, (q15_t)0x2cd9, (q15_t)0x881e, (q15_t)0x2cd3, (q15_t)0x881c, (q15_t)0x2ccd, (q15_t)0x881a, - (q15_t)0x2cc8, (q15_t)0x8817, (q15_t)0x2cc2, (q15_t)0x8815, (q15_t)0x2cbc, (q15_t)0x8813, (q15_t)0x2cb6, (q15_t)0x8811, - (q15_t)0x2cb0, (q15_t)0x880f, (q15_t)0x2caa, (q15_t)0x880c, (q15_t)0x2ca4, (q15_t)0x880a, (q15_t)0x2c9e, (q15_t)0x8808, - (q15_t)0x2c98, (q15_t)0x8806, (q15_t)0x2c93, (q15_t)0x8804, (q15_t)0x2c8d, (q15_t)0x8801, (q15_t)0x2c87, (q15_t)0x87ff, - (q15_t)0x2c81, (q15_t)0x87fd, (q15_t)0x2c7b, (q15_t)0x87fb, (q15_t)0x2c75, (q15_t)0x87f9, (q15_t)0x2c6f, (q15_t)0x87f6, - (q15_t)0x2c69, (q15_t)0x87f4, (q15_t)0x2c63, (q15_t)0x87f2, (q15_t)0x2c5e, (q15_t)0x87f0, (q15_t)0x2c58, (q15_t)0x87ee, - (q15_t)0x2c52, (q15_t)0x87ec, (q15_t)0x2c4c, (q15_t)0x87e9, (q15_t)0x2c46, (q15_t)0x87e7, (q15_t)0x2c40, (q15_t)0x87e5, - (q15_t)0x2c3a, (q15_t)0x87e3, (q15_t)0x2c34, (q15_t)0x87e1, (q15_t)0x2c2e, (q15_t)0x87df, (q15_t)0x2c29, (q15_t)0x87dc, - (q15_t)0x2c23, (q15_t)0x87da, (q15_t)0x2c1d, (q15_t)0x87d8, (q15_t)0x2c17, (q15_t)0x87d6, (q15_t)0x2c11, (q15_t)0x87d4, - (q15_t)0x2c0b, (q15_t)0x87d2, (q15_t)0x2c05, (q15_t)0x87cf, (q15_t)0x2bff, (q15_t)0x87cd, (q15_t)0x2bf9, (q15_t)0x87cb, - (q15_t)0x2bf3, (q15_t)0x87c9, (q15_t)0x2bee, (q15_t)0x87c7, (q15_t)0x2be8, (q15_t)0x87c5, (q15_t)0x2be2, (q15_t)0x87c2, - (q15_t)0x2bdc, (q15_t)0x87c0, (q15_t)0x2bd6, (q15_t)0x87be, (q15_t)0x2bd0, (q15_t)0x87bc, (q15_t)0x2bca, (q15_t)0x87ba, - (q15_t)0x2bc4, (q15_t)0x87b8, (q15_t)0x2bbe, (q15_t)0x87b6, (q15_t)0x2bb8, (q15_t)0x87b3, (q15_t)0x2bb2, (q15_t)0x87b1, - (q15_t)0x2bad, (q15_t)0x87af, (q15_t)0x2ba7, (q15_t)0x87ad, (q15_t)0x2ba1, (q15_t)0x87ab, (q15_t)0x2b9b, (q15_t)0x87a9, - (q15_t)0x2b95, (q15_t)0x87a7, (q15_t)0x2b8f, (q15_t)0x87a4, (q15_t)0x2b89, (q15_t)0x87a2, (q15_t)0x2b83, (q15_t)0x87a0, - (q15_t)0x2b7d, (q15_t)0x879e, (q15_t)0x2b77, (q15_t)0x879c, (q15_t)0x2b71, (q15_t)0x879a, (q15_t)0x2b6c, (q15_t)0x8798, - (q15_t)0x2b66, (q15_t)0x8795, (q15_t)0x2b60, (q15_t)0x8793, (q15_t)0x2b5a, (q15_t)0x8791, (q15_t)0x2b54, (q15_t)0x878f, - (q15_t)0x2b4e, (q15_t)0x878d, (q15_t)0x2b48, (q15_t)0x878b, (q15_t)0x2b42, (q15_t)0x8789, (q15_t)0x2b3c, (q15_t)0x8787, - (q15_t)0x2b36, (q15_t)0x8784, (q15_t)0x2b30, (q15_t)0x8782, (q15_t)0x2b2b, (q15_t)0x8780, (q15_t)0x2b25, (q15_t)0x877e, - (q15_t)0x2b1f, (q15_t)0x877c, (q15_t)0x2b19, (q15_t)0x877a, (q15_t)0x2b13, (q15_t)0x8778, (q15_t)0x2b0d, (q15_t)0x8776, - (q15_t)0x2b07, (q15_t)0x8774, (q15_t)0x2b01, (q15_t)0x8771, (q15_t)0x2afb, (q15_t)0x876f, (q15_t)0x2af5, (q15_t)0x876d, - (q15_t)0x2aef, (q15_t)0x876b, (q15_t)0x2ae9, (q15_t)0x8769, (q15_t)0x2ae4, (q15_t)0x8767, (q15_t)0x2ade, (q15_t)0x8765, - (q15_t)0x2ad8, (q15_t)0x8763, (q15_t)0x2ad2, (q15_t)0x8761, (q15_t)0x2acc, (q15_t)0x875e, (q15_t)0x2ac6, (q15_t)0x875c, - (q15_t)0x2ac0, (q15_t)0x875a, (q15_t)0x2aba, (q15_t)0x8758, (q15_t)0x2ab4, (q15_t)0x8756, (q15_t)0x2aae, (q15_t)0x8754, - (q15_t)0x2aa8, (q15_t)0x8752, (q15_t)0x2aa2, (q15_t)0x8750, (q15_t)0x2a9c, (q15_t)0x874e, (q15_t)0x2a97, (q15_t)0x874c, - (q15_t)0x2a91, (q15_t)0x874a, (q15_t)0x2a8b, (q15_t)0x8747, (q15_t)0x2a85, (q15_t)0x8745, (q15_t)0x2a7f, (q15_t)0x8743, - (q15_t)0x2a79, (q15_t)0x8741, (q15_t)0x2a73, (q15_t)0x873f, (q15_t)0x2a6d, (q15_t)0x873d, (q15_t)0x2a67, (q15_t)0x873b, - (q15_t)0x2a61, (q15_t)0x8739, (q15_t)0x2a5b, (q15_t)0x8737, (q15_t)0x2a55, (q15_t)0x8735, (q15_t)0x2a4f, (q15_t)0x8733, - (q15_t)0x2a49, (q15_t)0x8731, (q15_t)0x2a44, (q15_t)0x872e, (q15_t)0x2a3e, (q15_t)0x872c, (q15_t)0x2a38, (q15_t)0x872a, - (q15_t)0x2a32, (q15_t)0x8728, (q15_t)0x2a2c, (q15_t)0x8726, (q15_t)0x2a26, (q15_t)0x8724, (q15_t)0x2a20, (q15_t)0x8722, - (q15_t)0x2a1a, (q15_t)0x8720, (q15_t)0x2a14, (q15_t)0x871e, (q15_t)0x2a0e, (q15_t)0x871c, (q15_t)0x2a08, (q15_t)0x871a, - (q15_t)0x2a02, (q15_t)0x8718, (q15_t)0x29fc, (q15_t)0x8716, (q15_t)0x29f6, (q15_t)0x8714, (q15_t)0x29f0, (q15_t)0x8712, - (q15_t)0x29eb, (q15_t)0x870f, (q15_t)0x29e5, (q15_t)0x870d, (q15_t)0x29df, (q15_t)0x870b, (q15_t)0x29d9, (q15_t)0x8709, - (q15_t)0x29d3, (q15_t)0x8707, (q15_t)0x29cd, (q15_t)0x8705, (q15_t)0x29c7, (q15_t)0x8703, (q15_t)0x29c1, (q15_t)0x8701, - (q15_t)0x29bb, (q15_t)0x86ff, (q15_t)0x29b5, (q15_t)0x86fd, (q15_t)0x29af, (q15_t)0x86fb, (q15_t)0x29a9, (q15_t)0x86f9, - (q15_t)0x29a3, (q15_t)0x86f7, (q15_t)0x299d, (q15_t)0x86f5, (q15_t)0x2997, (q15_t)0x86f3, (q15_t)0x2991, (q15_t)0x86f1, - (q15_t)0x298b, (q15_t)0x86ef, (q15_t)0x2986, (q15_t)0x86ed, (q15_t)0x2980, (q15_t)0x86eb, (q15_t)0x297a, (q15_t)0x86e9, - (q15_t)0x2974, (q15_t)0x86e7, (q15_t)0x296e, (q15_t)0x86e4, (q15_t)0x2968, (q15_t)0x86e2, (q15_t)0x2962, (q15_t)0x86e0, - (q15_t)0x295c, (q15_t)0x86de, (q15_t)0x2956, (q15_t)0x86dc, (q15_t)0x2950, (q15_t)0x86da, (q15_t)0x294a, (q15_t)0x86d8, - (q15_t)0x2944, (q15_t)0x86d6, (q15_t)0x293e, (q15_t)0x86d4, (q15_t)0x2938, (q15_t)0x86d2, (q15_t)0x2932, (q15_t)0x86d0, - (q15_t)0x292c, (q15_t)0x86ce, (q15_t)0x2926, (q15_t)0x86cc, (q15_t)0x2920, (q15_t)0x86ca, (q15_t)0x291b, (q15_t)0x86c8, - (q15_t)0x2915, (q15_t)0x86c6, (q15_t)0x290f, (q15_t)0x86c4, (q15_t)0x2909, (q15_t)0x86c2, (q15_t)0x2903, (q15_t)0x86c0, - (q15_t)0x28fd, (q15_t)0x86be, (q15_t)0x28f7, (q15_t)0x86bc, (q15_t)0x28f1, (q15_t)0x86ba, (q15_t)0x28eb, (q15_t)0x86b8, - (q15_t)0x28e5, (q15_t)0x86b6, (q15_t)0x28df, (q15_t)0x86b4, (q15_t)0x28d9, (q15_t)0x86b2, (q15_t)0x28d3, (q15_t)0x86b0, - (q15_t)0x28cd, (q15_t)0x86ae, (q15_t)0x28c7, (q15_t)0x86ac, (q15_t)0x28c1, (q15_t)0x86aa, (q15_t)0x28bb, (q15_t)0x86a8, - (q15_t)0x28b5, (q15_t)0x86a6, (q15_t)0x28af, (q15_t)0x86a4, (q15_t)0x28a9, (q15_t)0x86a2, (q15_t)0x28a3, (q15_t)0x86a0, - (q15_t)0x289d, (q15_t)0x869e, (q15_t)0x2898, (q15_t)0x869c, (q15_t)0x2892, (q15_t)0x869a, (q15_t)0x288c, (q15_t)0x8698, - (q15_t)0x2886, (q15_t)0x8696, (q15_t)0x2880, (q15_t)0x8694, (q15_t)0x287a, (q15_t)0x8692, (q15_t)0x2874, (q15_t)0x8690, - (q15_t)0x286e, (q15_t)0x868e, (q15_t)0x2868, (q15_t)0x868c, (q15_t)0x2862, (q15_t)0x868a, (q15_t)0x285c, (q15_t)0x8688, - (q15_t)0x2856, (q15_t)0x8686, (q15_t)0x2850, (q15_t)0x8684, (q15_t)0x284a, (q15_t)0x8682, (q15_t)0x2844, (q15_t)0x8680, - (q15_t)0x283e, (q15_t)0x867e, (q15_t)0x2838, (q15_t)0x867c, (q15_t)0x2832, (q15_t)0x867a, (q15_t)0x282c, (q15_t)0x8678, - (q15_t)0x2826, (q15_t)0x8676, (q15_t)0x2820, (q15_t)0x8674, (q15_t)0x281a, (q15_t)0x8672, (q15_t)0x2814, (q15_t)0x8670, - (q15_t)0x280e, (q15_t)0x866e, (q15_t)0x2808, (q15_t)0x866d, (q15_t)0x2802, (q15_t)0x866b, (q15_t)0x27fc, (q15_t)0x8669, - (q15_t)0x27f6, (q15_t)0x8667, (q15_t)0x27f1, (q15_t)0x8665, (q15_t)0x27eb, (q15_t)0x8663, (q15_t)0x27e5, (q15_t)0x8661, - (q15_t)0x27df, (q15_t)0x865f, (q15_t)0x27d9, (q15_t)0x865d, (q15_t)0x27d3, (q15_t)0x865b, (q15_t)0x27cd, (q15_t)0x8659, - (q15_t)0x27c7, (q15_t)0x8657, (q15_t)0x27c1, (q15_t)0x8655, (q15_t)0x27bb, (q15_t)0x8653, (q15_t)0x27b5, (q15_t)0x8651, - (q15_t)0x27af, (q15_t)0x864f, (q15_t)0x27a9, (q15_t)0x864d, (q15_t)0x27a3, (q15_t)0x864b, (q15_t)0x279d, (q15_t)0x8649, - (q15_t)0x2797, (q15_t)0x8647, (q15_t)0x2791, (q15_t)0x8645, (q15_t)0x278b, (q15_t)0x8644, (q15_t)0x2785, (q15_t)0x8642, - (q15_t)0x277f, (q15_t)0x8640, (q15_t)0x2779, (q15_t)0x863e, (q15_t)0x2773, (q15_t)0x863c, (q15_t)0x276d, (q15_t)0x863a, - (q15_t)0x2767, (q15_t)0x8638, (q15_t)0x2761, (q15_t)0x8636, (q15_t)0x275b, (q15_t)0x8634, (q15_t)0x2755, (q15_t)0x8632, - (q15_t)0x274f, (q15_t)0x8630, (q15_t)0x2749, (q15_t)0x862e, (q15_t)0x2743, (q15_t)0x862c, (q15_t)0x273d, (q15_t)0x862a, - (q15_t)0x2737, (q15_t)0x8628, (q15_t)0x2731, (q15_t)0x8627, (q15_t)0x272b, (q15_t)0x8625, (q15_t)0x2725, (q15_t)0x8623, - (q15_t)0x271f, (q15_t)0x8621, (q15_t)0x2719, (q15_t)0x861f, (q15_t)0x2713, (q15_t)0x861d, (q15_t)0x270d, (q15_t)0x861b, - (q15_t)0x2707, (q15_t)0x8619, (q15_t)0x2701, (q15_t)0x8617, (q15_t)0x26fb, (q15_t)0x8615, (q15_t)0x26f5, (q15_t)0x8613, - (q15_t)0x26ef, (q15_t)0x8611, (q15_t)0x26e9, (q15_t)0x8610, (q15_t)0x26e4, (q15_t)0x860e, (q15_t)0x26de, (q15_t)0x860c, - (q15_t)0x26d8, (q15_t)0x860a, (q15_t)0x26d2, (q15_t)0x8608, (q15_t)0x26cc, (q15_t)0x8606, (q15_t)0x26c6, (q15_t)0x8604, - (q15_t)0x26c0, (q15_t)0x8602, (q15_t)0x26ba, (q15_t)0x8600, (q15_t)0x26b4, (q15_t)0x85fe, (q15_t)0x26ae, (q15_t)0x85fc, - (q15_t)0x26a8, (q15_t)0x85fb, (q15_t)0x26a2, (q15_t)0x85f9, (q15_t)0x269c, (q15_t)0x85f7, (q15_t)0x2696, (q15_t)0x85f5, - (q15_t)0x2690, (q15_t)0x85f3, (q15_t)0x268a, (q15_t)0x85f1, (q15_t)0x2684, (q15_t)0x85ef, (q15_t)0x267e, (q15_t)0x85ed, - (q15_t)0x2678, (q15_t)0x85eb, (q15_t)0x2672, (q15_t)0x85ea, (q15_t)0x266c, (q15_t)0x85e8, (q15_t)0x2666, (q15_t)0x85e6, - (q15_t)0x2660, (q15_t)0x85e4, (q15_t)0x265a, (q15_t)0x85e2, (q15_t)0x2654, (q15_t)0x85e0, (q15_t)0x264e, (q15_t)0x85de, - (q15_t)0x2648, (q15_t)0x85dc, (q15_t)0x2642, (q15_t)0x85da, (q15_t)0x263c, (q15_t)0x85d9, (q15_t)0x2636, (q15_t)0x85d7, - (q15_t)0x2630, (q15_t)0x85d5, (q15_t)0x262a, (q15_t)0x85d3, (q15_t)0x2624, (q15_t)0x85d1, (q15_t)0x261e, (q15_t)0x85cf, - (q15_t)0x2618, (q15_t)0x85cd, (q15_t)0x2612, (q15_t)0x85cb, (q15_t)0x260c, (q15_t)0x85ca, (q15_t)0x2606, (q15_t)0x85c8, - (q15_t)0x2600, (q15_t)0x85c6, (q15_t)0x25fa, (q15_t)0x85c4, (q15_t)0x25f4, (q15_t)0x85c2, (q15_t)0x25ee, (q15_t)0x85c0, - (q15_t)0x25e8, (q15_t)0x85be, (q15_t)0x25e2, (q15_t)0x85bd, (q15_t)0x25dc, (q15_t)0x85bb, (q15_t)0x25d6, (q15_t)0x85b9, - (q15_t)0x25d0, (q15_t)0x85b7, (q15_t)0x25ca, (q15_t)0x85b5, (q15_t)0x25c4, (q15_t)0x85b3, (q15_t)0x25be, (q15_t)0x85b1, - (q15_t)0x25b8, (q15_t)0x85b0, (q15_t)0x25b2, (q15_t)0x85ae, (q15_t)0x25ac, (q15_t)0x85ac, (q15_t)0x25a6, (q15_t)0x85aa, - (q15_t)0x25a0, (q15_t)0x85a8, (q15_t)0x259a, (q15_t)0x85a6, (q15_t)0x2594, (q15_t)0x85a4, (q15_t)0x258e, (q15_t)0x85a3, - (q15_t)0x2588, (q15_t)0x85a1, (q15_t)0x2582, (q15_t)0x859f, (q15_t)0x257c, (q15_t)0x859d, (q15_t)0x2576, (q15_t)0x859b, - (q15_t)0x2570, (q15_t)0x8599, (q15_t)0x256a, (q15_t)0x8598, (q15_t)0x2564, (q15_t)0x8596, (q15_t)0x255e, (q15_t)0x8594, - (q15_t)0x2558, (q15_t)0x8592, (q15_t)0x2552, (q15_t)0x8590, (q15_t)0x254c, (q15_t)0x858e, (q15_t)0x2546, (q15_t)0x858d, - (q15_t)0x2540, (q15_t)0x858b, (q15_t)0x253a, (q15_t)0x8589, (q15_t)0x2534, (q15_t)0x8587, (q15_t)0x252e, (q15_t)0x8585, - (q15_t)0x2528, (q15_t)0x8583, (q15_t)0x2522, (q15_t)0x8582, (q15_t)0x251c, (q15_t)0x8580, (q15_t)0x2516, (q15_t)0x857e, - (q15_t)0x250f, (q15_t)0x857c, (q15_t)0x2509, (q15_t)0x857a, (q15_t)0x2503, (q15_t)0x8579, (q15_t)0x24fd, (q15_t)0x8577, - (q15_t)0x24f7, (q15_t)0x8575, (q15_t)0x24f1, (q15_t)0x8573, (q15_t)0x24eb, (q15_t)0x8571, (q15_t)0x24e5, (q15_t)0x856f, - (q15_t)0x24df, (q15_t)0x856e, (q15_t)0x24d9, (q15_t)0x856c, (q15_t)0x24d3, (q15_t)0x856a, (q15_t)0x24cd, (q15_t)0x8568, - (q15_t)0x24c7, (q15_t)0x8566, (q15_t)0x24c1, (q15_t)0x8565, (q15_t)0x24bb, (q15_t)0x8563, (q15_t)0x24b5, (q15_t)0x8561, - (q15_t)0x24af, (q15_t)0x855f, (q15_t)0x24a9, (q15_t)0x855d, (q15_t)0x24a3, (q15_t)0x855c, (q15_t)0x249d, (q15_t)0x855a, - (q15_t)0x2497, (q15_t)0x8558, (q15_t)0x2491, (q15_t)0x8556, (q15_t)0x248b, (q15_t)0x8554, (q15_t)0x2485, (q15_t)0x8553, - (q15_t)0x247f, (q15_t)0x8551, (q15_t)0x2479, (q15_t)0x854f, (q15_t)0x2473, (q15_t)0x854d, (q15_t)0x246d, (q15_t)0x854b, - (q15_t)0x2467, (q15_t)0x854a, (q15_t)0x2461, (q15_t)0x8548, (q15_t)0x245b, (q15_t)0x8546, (q15_t)0x2455, (q15_t)0x8544, - (q15_t)0x244f, (q15_t)0x8543, (q15_t)0x2449, (q15_t)0x8541, (q15_t)0x2443, (q15_t)0x853f, (q15_t)0x243d, (q15_t)0x853d, - (q15_t)0x2437, (q15_t)0x853b, (q15_t)0x2431, (q15_t)0x853a, (q15_t)0x242b, (q15_t)0x8538, (q15_t)0x2425, (q15_t)0x8536, - (q15_t)0x241f, (q15_t)0x8534, (q15_t)0x2419, (q15_t)0x8533, (q15_t)0x2413, (q15_t)0x8531, (q15_t)0x240d, (q15_t)0x852f, - (q15_t)0x2407, (q15_t)0x852d, (q15_t)0x2401, (q15_t)0x852b, (q15_t)0x23fa, (q15_t)0x852a, (q15_t)0x23f4, (q15_t)0x8528, - (q15_t)0x23ee, (q15_t)0x8526, (q15_t)0x23e8, (q15_t)0x8524, (q15_t)0x23e2, (q15_t)0x8523, (q15_t)0x23dc, (q15_t)0x8521, - (q15_t)0x23d6, (q15_t)0x851f, (q15_t)0x23d0, (q15_t)0x851d, (q15_t)0x23ca, (q15_t)0x851c, (q15_t)0x23c4, (q15_t)0x851a, - (q15_t)0x23be, (q15_t)0x8518, (q15_t)0x23b8, (q15_t)0x8516, (q15_t)0x23b2, (q15_t)0x8515, (q15_t)0x23ac, (q15_t)0x8513, - (q15_t)0x23a6, (q15_t)0x8511, (q15_t)0x23a0, (q15_t)0x850f, (q15_t)0x239a, (q15_t)0x850e, (q15_t)0x2394, (q15_t)0x850c, - (q15_t)0x238e, (q15_t)0x850a, (q15_t)0x2388, (q15_t)0x8508, (q15_t)0x2382, (q15_t)0x8507, (q15_t)0x237c, (q15_t)0x8505, - (q15_t)0x2376, (q15_t)0x8503, (q15_t)0x2370, (q15_t)0x8501, (q15_t)0x236a, (q15_t)0x8500, (q15_t)0x2364, (q15_t)0x84fe, - (q15_t)0x235e, (q15_t)0x84fc, (q15_t)0x2358, (q15_t)0x84fa, (q15_t)0x2352, (q15_t)0x84f9, (q15_t)0x234b, (q15_t)0x84f7, - (q15_t)0x2345, (q15_t)0x84f5, (q15_t)0x233f, (q15_t)0x84f4, (q15_t)0x2339, (q15_t)0x84f2, (q15_t)0x2333, (q15_t)0x84f0, - (q15_t)0x232d, (q15_t)0x84ee, (q15_t)0x2327, (q15_t)0x84ed, (q15_t)0x2321, (q15_t)0x84eb, (q15_t)0x231b, (q15_t)0x84e9, - (q15_t)0x2315, (q15_t)0x84e7, (q15_t)0x230f, (q15_t)0x84e6, (q15_t)0x2309, (q15_t)0x84e4, (q15_t)0x2303, (q15_t)0x84e2, - (q15_t)0x22fd, (q15_t)0x84e1, (q15_t)0x22f7, (q15_t)0x84df, (q15_t)0x22f1, (q15_t)0x84dd, (q15_t)0x22eb, (q15_t)0x84db, - (q15_t)0x22e5, (q15_t)0x84da, (q15_t)0x22df, (q15_t)0x84d8, (q15_t)0x22d9, (q15_t)0x84d6, (q15_t)0x22d3, (q15_t)0x84d5, - (q15_t)0x22cd, (q15_t)0x84d3, (q15_t)0x22c7, (q15_t)0x84d1, (q15_t)0x22c0, (q15_t)0x84cf, (q15_t)0x22ba, (q15_t)0x84ce, - (q15_t)0x22b4, (q15_t)0x84cc, (q15_t)0x22ae, (q15_t)0x84ca, (q15_t)0x22a8, (q15_t)0x84c9, (q15_t)0x22a2, (q15_t)0x84c7, - (q15_t)0x229c, (q15_t)0x84c5, (q15_t)0x2296, (q15_t)0x84c4, (q15_t)0x2290, (q15_t)0x84c2, (q15_t)0x228a, (q15_t)0x84c0, - (q15_t)0x2284, (q15_t)0x84be, (q15_t)0x227e, (q15_t)0x84bd, (q15_t)0x2278, (q15_t)0x84bb, (q15_t)0x2272, (q15_t)0x84b9, - (q15_t)0x226c, (q15_t)0x84b8, (q15_t)0x2266, (q15_t)0x84b6, (q15_t)0x2260, (q15_t)0x84b4, (q15_t)0x225a, (q15_t)0x84b3, - (q15_t)0x2254, (q15_t)0x84b1, (q15_t)0x224e, (q15_t)0x84af, (q15_t)0x2247, (q15_t)0x84ae, (q15_t)0x2241, (q15_t)0x84ac, - (q15_t)0x223b, (q15_t)0x84aa, (q15_t)0x2235, (q15_t)0x84a9, (q15_t)0x222f, (q15_t)0x84a7, (q15_t)0x2229, (q15_t)0x84a5, - (q15_t)0x2223, (q15_t)0x84a3, (q15_t)0x221d, (q15_t)0x84a2, (q15_t)0x2217, (q15_t)0x84a0, (q15_t)0x2211, (q15_t)0x849e, - (q15_t)0x220b, (q15_t)0x849d, (q15_t)0x2205, (q15_t)0x849b, (q15_t)0x21ff, (q15_t)0x8499, (q15_t)0x21f9, (q15_t)0x8498, - (q15_t)0x21f3, (q15_t)0x8496, (q15_t)0x21ed, (q15_t)0x8494, (q15_t)0x21e7, (q15_t)0x8493, (q15_t)0x21e1, (q15_t)0x8491, - (q15_t)0x21da, (q15_t)0x848f, (q15_t)0x21d4, (q15_t)0x848e, (q15_t)0x21ce, (q15_t)0x848c, (q15_t)0x21c8, (q15_t)0x848a, - (q15_t)0x21c2, (q15_t)0x8489, (q15_t)0x21bc, (q15_t)0x8487, (q15_t)0x21b6, (q15_t)0x8486, (q15_t)0x21b0, (q15_t)0x8484, - (q15_t)0x21aa, (q15_t)0x8482, (q15_t)0x21a4, (q15_t)0x8481, (q15_t)0x219e, (q15_t)0x847f, (q15_t)0x2198, (q15_t)0x847d, - (q15_t)0x2192, (q15_t)0x847c, (q15_t)0x218c, (q15_t)0x847a, (q15_t)0x2186, (q15_t)0x8478, (q15_t)0x2180, (q15_t)0x8477, - (q15_t)0x2179, (q15_t)0x8475, (q15_t)0x2173, (q15_t)0x8473, (q15_t)0x216d, (q15_t)0x8472, (q15_t)0x2167, (q15_t)0x8470, - (q15_t)0x2161, (q15_t)0x846e, (q15_t)0x215b, (q15_t)0x846d, (q15_t)0x2155, (q15_t)0x846b, (q15_t)0x214f, (q15_t)0x846a, - (q15_t)0x2149, (q15_t)0x8468, (q15_t)0x2143, (q15_t)0x8466, (q15_t)0x213d, (q15_t)0x8465, (q15_t)0x2137, (q15_t)0x8463, - (q15_t)0x2131, (q15_t)0x8461, (q15_t)0x212b, (q15_t)0x8460, (q15_t)0x2125, (q15_t)0x845e, (q15_t)0x211e, (q15_t)0x845d, - (q15_t)0x2118, (q15_t)0x845b, (q15_t)0x2112, (q15_t)0x8459, (q15_t)0x210c, (q15_t)0x8458, (q15_t)0x2106, (q15_t)0x8456, - (q15_t)0x2100, (q15_t)0x8454, (q15_t)0x20fa, (q15_t)0x8453, (q15_t)0x20f4, (q15_t)0x8451, (q15_t)0x20ee, (q15_t)0x8450, - (q15_t)0x20e8, (q15_t)0x844e, (q15_t)0x20e2, (q15_t)0x844c, (q15_t)0x20dc, (q15_t)0x844b, (q15_t)0x20d6, (q15_t)0x8449, - (q15_t)0x20d0, (q15_t)0x8447, (q15_t)0x20c9, (q15_t)0x8446, (q15_t)0x20c3, (q15_t)0x8444, (q15_t)0x20bd, (q15_t)0x8443, - (q15_t)0x20b7, (q15_t)0x8441, (q15_t)0x20b1, (q15_t)0x843f, (q15_t)0x20ab, (q15_t)0x843e, (q15_t)0x20a5, (q15_t)0x843c, - (q15_t)0x209f, (q15_t)0x843b, (q15_t)0x2099, (q15_t)0x8439, (q15_t)0x2093, (q15_t)0x8437, (q15_t)0x208d, (q15_t)0x8436, - (q15_t)0x2087, (q15_t)0x8434, (q15_t)0x2081, (q15_t)0x8433, (q15_t)0x207a, (q15_t)0x8431, (q15_t)0x2074, (q15_t)0x842f, - (q15_t)0x206e, (q15_t)0x842e, (q15_t)0x2068, (q15_t)0x842c, (q15_t)0x2062, (q15_t)0x842b, (q15_t)0x205c, (q15_t)0x8429, - (q15_t)0x2056, (q15_t)0x8427, (q15_t)0x2050, (q15_t)0x8426, (q15_t)0x204a, (q15_t)0x8424, (q15_t)0x2044, (q15_t)0x8423, - (q15_t)0x203e, (q15_t)0x8421, (q15_t)0x2038, (q15_t)0x8420, (q15_t)0x2032, (q15_t)0x841e, (q15_t)0x202b, (q15_t)0x841c, - (q15_t)0x2025, (q15_t)0x841b, (q15_t)0x201f, (q15_t)0x8419, (q15_t)0x2019, (q15_t)0x8418, (q15_t)0x2013, (q15_t)0x8416, - (q15_t)0x200d, (q15_t)0x8415, (q15_t)0x2007, (q15_t)0x8413, (q15_t)0x2001, (q15_t)0x8411, (q15_t)0x1ffb, (q15_t)0x8410, - (q15_t)0x1ff5, (q15_t)0x840e, (q15_t)0x1fef, (q15_t)0x840d, (q15_t)0x1fe9, (q15_t)0x840b, (q15_t)0x1fe2, (q15_t)0x840a, - (q15_t)0x1fdc, (q15_t)0x8408, (q15_t)0x1fd6, (q15_t)0x8406, (q15_t)0x1fd0, (q15_t)0x8405, (q15_t)0x1fca, (q15_t)0x8403, - (q15_t)0x1fc4, (q15_t)0x8402, (q15_t)0x1fbe, (q15_t)0x8400, (q15_t)0x1fb8, (q15_t)0x83ff, (q15_t)0x1fb2, (q15_t)0x83fd, - (q15_t)0x1fac, (q15_t)0x83fb, (q15_t)0x1fa6, (q15_t)0x83fa, (q15_t)0x1f9f, (q15_t)0x83f8, (q15_t)0x1f99, (q15_t)0x83f7, - (q15_t)0x1f93, (q15_t)0x83f5, (q15_t)0x1f8d, (q15_t)0x83f4, (q15_t)0x1f87, (q15_t)0x83f2, (q15_t)0x1f81, (q15_t)0x83f1, - (q15_t)0x1f7b, (q15_t)0x83ef, (q15_t)0x1f75, (q15_t)0x83ee, (q15_t)0x1f6f, (q15_t)0x83ec, (q15_t)0x1f69, (q15_t)0x83ea, - (q15_t)0x1f63, (q15_t)0x83e9, (q15_t)0x1f5d, (q15_t)0x83e7, (q15_t)0x1f56, (q15_t)0x83e6, (q15_t)0x1f50, (q15_t)0x83e4, - (q15_t)0x1f4a, (q15_t)0x83e3, (q15_t)0x1f44, (q15_t)0x83e1, (q15_t)0x1f3e, (q15_t)0x83e0, (q15_t)0x1f38, (q15_t)0x83de, - (q15_t)0x1f32, (q15_t)0x83dd, (q15_t)0x1f2c, (q15_t)0x83db, (q15_t)0x1f26, (q15_t)0x83da, (q15_t)0x1f20, (q15_t)0x83d8, - (q15_t)0x1f19, (q15_t)0x83d7, (q15_t)0x1f13, (q15_t)0x83d5, (q15_t)0x1f0d, (q15_t)0x83d3, (q15_t)0x1f07, (q15_t)0x83d2, - (q15_t)0x1f01, (q15_t)0x83d0, (q15_t)0x1efb, (q15_t)0x83cf, (q15_t)0x1ef5, (q15_t)0x83cd, (q15_t)0x1eef, (q15_t)0x83cc, - (q15_t)0x1ee9, (q15_t)0x83ca, (q15_t)0x1ee3, (q15_t)0x83c9, (q15_t)0x1edd, (q15_t)0x83c7, (q15_t)0x1ed6, (q15_t)0x83c6, - (q15_t)0x1ed0, (q15_t)0x83c4, (q15_t)0x1eca, (q15_t)0x83c3, (q15_t)0x1ec4, (q15_t)0x83c1, (q15_t)0x1ebe, (q15_t)0x83c0, - (q15_t)0x1eb8, (q15_t)0x83be, (q15_t)0x1eb2, (q15_t)0x83bd, (q15_t)0x1eac, (q15_t)0x83bb, (q15_t)0x1ea6, (q15_t)0x83ba, - (q15_t)0x1ea0, (q15_t)0x83b8, (q15_t)0x1e99, (q15_t)0x83b7, (q15_t)0x1e93, (q15_t)0x83b5, (q15_t)0x1e8d, (q15_t)0x83b4, - (q15_t)0x1e87, (q15_t)0x83b2, (q15_t)0x1e81, (q15_t)0x83b1, (q15_t)0x1e7b, (q15_t)0x83af, (q15_t)0x1e75, (q15_t)0x83ae, - (q15_t)0x1e6f, (q15_t)0x83ac, (q15_t)0x1e69, (q15_t)0x83ab, (q15_t)0x1e62, (q15_t)0x83a9, (q15_t)0x1e5c, (q15_t)0x83a8, - (q15_t)0x1e56, (q15_t)0x83a6, (q15_t)0x1e50, (q15_t)0x83a5, (q15_t)0x1e4a, (q15_t)0x83a3, (q15_t)0x1e44, (q15_t)0x83a2, - (q15_t)0x1e3e, (q15_t)0x83a0, (q15_t)0x1e38, (q15_t)0x839f, (q15_t)0x1e32, (q15_t)0x839d, (q15_t)0x1e2c, (q15_t)0x839c, - (q15_t)0x1e25, (q15_t)0x839a, (q15_t)0x1e1f, (q15_t)0x8399, (q15_t)0x1e19, (q15_t)0x8397, (q15_t)0x1e13, (q15_t)0x8396, - (q15_t)0x1e0d, (q15_t)0x8394, (q15_t)0x1e07, (q15_t)0x8393, (q15_t)0x1e01, (q15_t)0x8392, (q15_t)0x1dfb, (q15_t)0x8390, - (q15_t)0x1df5, (q15_t)0x838f, (q15_t)0x1dee, (q15_t)0x838d, (q15_t)0x1de8, (q15_t)0x838c, (q15_t)0x1de2, (q15_t)0x838a, - (q15_t)0x1ddc, (q15_t)0x8389, (q15_t)0x1dd6, (q15_t)0x8387, (q15_t)0x1dd0, (q15_t)0x8386, (q15_t)0x1dca, (q15_t)0x8384, - (q15_t)0x1dc4, (q15_t)0x8383, (q15_t)0x1dbe, (q15_t)0x8381, (q15_t)0x1db7, (q15_t)0x8380, (q15_t)0x1db1, (q15_t)0x837e, - (q15_t)0x1dab, (q15_t)0x837d, (q15_t)0x1da5, (q15_t)0x837c, (q15_t)0x1d9f, (q15_t)0x837a, (q15_t)0x1d99, (q15_t)0x8379, - (q15_t)0x1d93, (q15_t)0x8377, (q15_t)0x1d8d, (q15_t)0x8376, (q15_t)0x1d87, (q15_t)0x8374, (q15_t)0x1d80, (q15_t)0x8373, - (q15_t)0x1d7a, (q15_t)0x8371, (q15_t)0x1d74, (q15_t)0x8370, (q15_t)0x1d6e, (q15_t)0x836f, (q15_t)0x1d68, (q15_t)0x836d, - (q15_t)0x1d62, (q15_t)0x836c, (q15_t)0x1d5c, (q15_t)0x836a, (q15_t)0x1d56, (q15_t)0x8369, (q15_t)0x1d50, (q15_t)0x8367, - (q15_t)0x1d49, (q15_t)0x8366, (q15_t)0x1d43, (q15_t)0x8364, (q15_t)0x1d3d, (q15_t)0x8363, (q15_t)0x1d37, (q15_t)0x8362, - (q15_t)0x1d31, (q15_t)0x8360, (q15_t)0x1d2b, (q15_t)0x835f, (q15_t)0x1d25, (q15_t)0x835d, (q15_t)0x1d1f, (q15_t)0x835c, - (q15_t)0x1d18, (q15_t)0x835a, (q15_t)0x1d12, (q15_t)0x8359, (q15_t)0x1d0c, (q15_t)0x8358, (q15_t)0x1d06, (q15_t)0x8356, - (q15_t)0x1d00, (q15_t)0x8355, (q15_t)0x1cfa, (q15_t)0x8353, (q15_t)0x1cf4, (q15_t)0x8352, (q15_t)0x1cee, (q15_t)0x8350, - (q15_t)0x1ce8, (q15_t)0x834f, (q15_t)0x1ce1, (q15_t)0x834e, (q15_t)0x1cdb, (q15_t)0x834c, (q15_t)0x1cd5, (q15_t)0x834b, - (q15_t)0x1ccf, (q15_t)0x8349, (q15_t)0x1cc9, (q15_t)0x8348, (q15_t)0x1cc3, (q15_t)0x8347, (q15_t)0x1cbd, (q15_t)0x8345, - (q15_t)0x1cb7, (q15_t)0x8344, (q15_t)0x1cb0, (q15_t)0x8342, (q15_t)0x1caa, (q15_t)0x8341, (q15_t)0x1ca4, (q15_t)0x833f, - (q15_t)0x1c9e, (q15_t)0x833e, (q15_t)0x1c98, (q15_t)0x833d, (q15_t)0x1c92, (q15_t)0x833b, (q15_t)0x1c8c, (q15_t)0x833a, - (q15_t)0x1c86, (q15_t)0x8338, (q15_t)0x1c7f, (q15_t)0x8337, (q15_t)0x1c79, (q15_t)0x8336, (q15_t)0x1c73, (q15_t)0x8334, - (q15_t)0x1c6d, (q15_t)0x8333, (q15_t)0x1c67, (q15_t)0x8331, (q15_t)0x1c61, (q15_t)0x8330, (q15_t)0x1c5b, (q15_t)0x832f, - (q15_t)0x1c55, (q15_t)0x832d, (q15_t)0x1c4e, (q15_t)0x832c, (q15_t)0x1c48, (q15_t)0x832b, (q15_t)0x1c42, (q15_t)0x8329, - (q15_t)0x1c3c, (q15_t)0x8328, (q15_t)0x1c36, (q15_t)0x8326, (q15_t)0x1c30, (q15_t)0x8325, (q15_t)0x1c2a, (q15_t)0x8324, - (q15_t)0x1c24, (q15_t)0x8322, (q15_t)0x1c1d, (q15_t)0x8321, (q15_t)0x1c17, (q15_t)0x831f, (q15_t)0x1c11, (q15_t)0x831e, - (q15_t)0x1c0b, (q15_t)0x831d, (q15_t)0x1c05, (q15_t)0x831b, (q15_t)0x1bff, (q15_t)0x831a, (q15_t)0x1bf9, (q15_t)0x8319, - (q15_t)0x1bf2, (q15_t)0x8317, (q15_t)0x1bec, (q15_t)0x8316, (q15_t)0x1be6, (q15_t)0x8314, (q15_t)0x1be0, (q15_t)0x8313, - (q15_t)0x1bda, (q15_t)0x8312, (q15_t)0x1bd4, (q15_t)0x8310, (q15_t)0x1bce, (q15_t)0x830f, (q15_t)0x1bc8, (q15_t)0x830e, - (q15_t)0x1bc1, (q15_t)0x830c, (q15_t)0x1bbb, (q15_t)0x830b, (q15_t)0x1bb5, (q15_t)0x830a, (q15_t)0x1baf, (q15_t)0x8308, - (q15_t)0x1ba9, (q15_t)0x8307, (q15_t)0x1ba3, (q15_t)0x8305, (q15_t)0x1b9d, (q15_t)0x8304, (q15_t)0x1b96, (q15_t)0x8303, - (q15_t)0x1b90, (q15_t)0x8301, (q15_t)0x1b8a, (q15_t)0x8300, (q15_t)0x1b84, (q15_t)0x82ff, (q15_t)0x1b7e, (q15_t)0x82fd, - (q15_t)0x1b78, (q15_t)0x82fc, (q15_t)0x1b72, (q15_t)0x82fb, (q15_t)0x1b6c, (q15_t)0x82f9, (q15_t)0x1b65, (q15_t)0x82f8, - (q15_t)0x1b5f, (q15_t)0x82f7, (q15_t)0x1b59, (q15_t)0x82f5, (q15_t)0x1b53, (q15_t)0x82f4, (q15_t)0x1b4d, (q15_t)0x82f3, - (q15_t)0x1b47, (q15_t)0x82f1, (q15_t)0x1b41, (q15_t)0x82f0, (q15_t)0x1b3a, (q15_t)0x82ef, (q15_t)0x1b34, (q15_t)0x82ed, - (q15_t)0x1b2e, (q15_t)0x82ec, (q15_t)0x1b28, (q15_t)0x82eb, (q15_t)0x1b22, (q15_t)0x82e9, (q15_t)0x1b1c, (q15_t)0x82e8, - (q15_t)0x1b16, (q15_t)0x82e7, (q15_t)0x1b0f, (q15_t)0x82e5, (q15_t)0x1b09, (q15_t)0x82e4, (q15_t)0x1b03, (q15_t)0x82e3, - (q15_t)0x1afd, (q15_t)0x82e1, (q15_t)0x1af7, (q15_t)0x82e0, (q15_t)0x1af1, (q15_t)0x82df, (q15_t)0x1aeb, (q15_t)0x82dd, - (q15_t)0x1ae4, (q15_t)0x82dc, (q15_t)0x1ade, (q15_t)0x82db, (q15_t)0x1ad8, (q15_t)0x82d9, (q15_t)0x1ad2, (q15_t)0x82d8, - (q15_t)0x1acc, (q15_t)0x82d7, (q15_t)0x1ac6, (q15_t)0x82d5, (q15_t)0x1ac0, (q15_t)0x82d4, (q15_t)0x1ab9, (q15_t)0x82d3, - (q15_t)0x1ab3, (q15_t)0x82d1, (q15_t)0x1aad, (q15_t)0x82d0, (q15_t)0x1aa7, (q15_t)0x82cf, (q15_t)0x1aa1, (q15_t)0x82ce, - (q15_t)0x1a9b, (q15_t)0x82cc, (q15_t)0x1a95, (q15_t)0x82cb, (q15_t)0x1a8e, (q15_t)0x82ca, (q15_t)0x1a88, (q15_t)0x82c8, - (q15_t)0x1a82, (q15_t)0x82c7, (q15_t)0x1a7c, (q15_t)0x82c6, (q15_t)0x1a76, (q15_t)0x82c4, (q15_t)0x1a70, (q15_t)0x82c3, - (q15_t)0x1a6a, (q15_t)0x82c2, (q15_t)0x1a63, (q15_t)0x82c1, (q15_t)0x1a5d, (q15_t)0x82bf, (q15_t)0x1a57, (q15_t)0x82be, - (q15_t)0x1a51, (q15_t)0x82bd, (q15_t)0x1a4b, (q15_t)0x82bb, (q15_t)0x1a45, (q15_t)0x82ba, (q15_t)0x1a3e, (q15_t)0x82b9, - (q15_t)0x1a38, (q15_t)0x82b7, (q15_t)0x1a32, (q15_t)0x82b6, (q15_t)0x1a2c, (q15_t)0x82b5, (q15_t)0x1a26, (q15_t)0x82b4, - (q15_t)0x1a20, (q15_t)0x82b2, (q15_t)0x1a1a, (q15_t)0x82b1, (q15_t)0x1a13, (q15_t)0x82b0, (q15_t)0x1a0d, (q15_t)0x82ae, - (q15_t)0x1a07, (q15_t)0x82ad, (q15_t)0x1a01, (q15_t)0x82ac, (q15_t)0x19fb, (q15_t)0x82ab, (q15_t)0x19f5, (q15_t)0x82a9, - (q15_t)0x19ef, (q15_t)0x82a8, (q15_t)0x19e8, (q15_t)0x82a7, (q15_t)0x19e2, (q15_t)0x82a6, (q15_t)0x19dc, (q15_t)0x82a4, - (q15_t)0x19d6, (q15_t)0x82a3, (q15_t)0x19d0, (q15_t)0x82a2, (q15_t)0x19ca, (q15_t)0x82a0, (q15_t)0x19c3, (q15_t)0x829f, - (q15_t)0x19bd, (q15_t)0x829e, (q15_t)0x19b7, (q15_t)0x829d, (q15_t)0x19b1, (q15_t)0x829b, (q15_t)0x19ab, (q15_t)0x829a, - (q15_t)0x19a5, (q15_t)0x8299, (q15_t)0x199f, (q15_t)0x8298, (q15_t)0x1998, (q15_t)0x8296, (q15_t)0x1992, (q15_t)0x8295, - (q15_t)0x198c, (q15_t)0x8294, (q15_t)0x1986, (q15_t)0x8293, (q15_t)0x1980, (q15_t)0x8291, (q15_t)0x197a, (q15_t)0x8290, - (q15_t)0x1973, (q15_t)0x828f, (q15_t)0x196d, (q15_t)0x828e, (q15_t)0x1967, (q15_t)0x828c, (q15_t)0x1961, (q15_t)0x828b, - (q15_t)0x195b, (q15_t)0x828a, (q15_t)0x1955, (q15_t)0x8289, (q15_t)0x194e, (q15_t)0x8287, (q15_t)0x1948, (q15_t)0x8286, - (q15_t)0x1942, (q15_t)0x8285, (q15_t)0x193c, (q15_t)0x8284, (q15_t)0x1936, (q15_t)0x8282, (q15_t)0x1930, (q15_t)0x8281, - (q15_t)0x192a, (q15_t)0x8280, (q15_t)0x1923, (q15_t)0x827f, (q15_t)0x191d, (q15_t)0x827e, (q15_t)0x1917, (q15_t)0x827c, - (q15_t)0x1911, (q15_t)0x827b, (q15_t)0x190b, (q15_t)0x827a, (q15_t)0x1905, (q15_t)0x8279, (q15_t)0x18fe, (q15_t)0x8277, - (q15_t)0x18f8, (q15_t)0x8276, (q15_t)0x18f2, (q15_t)0x8275, (q15_t)0x18ec, (q15_t)0x8274, (q15_t)0x18e6, (q15_t)0x8272, - (q15_t)0x18e0, (q15_t)0x8271, (q15_t)0x18d9, (q15_t)0x8270, (q15_t)0x18d3, (q15_t)0x826f, (q15_t)0x18cd, (q15_t)0x826e, - (q15_t)0x18c7, (q15_t)0x826c, (q15_t)0x18c1, (q15_t)0x826b, (q15_t)0x18bb, (q15_t)0x826a, (q15_t)0x18b4, (q15_t)0x8269, - (q15_t)0x18ae, (q15_t)0x8268, (q15_t)0x18a8, (q15_t)0x8266, (q15_t)0x18a2, (q15_t)0x8265, (q15_t)0x189c, (q15_t)0x8264, - (q15_t)0x1896, (q15_t)0x8263, (q15_t)0x188f, (q15_t)0x8261, (q15_t)0x1889, (q15_t)0x8260, (q15_t)0x1883, (q15_t)0x825f, - (q15_t)0x187d, (q15_t)0x825e, (q15_t)0x1877, (q15_t)0x825d, (q15_t)0x1871, (q15_t)0x825b, (q15_t)0x186a, (q15_t)0x825a, - (q15_t)0x1864, (q15_t)0x8259, (q15_t)0x185e, (q15_t)0x8258, (q15_t)0x1858, (q15_t)0x8257, (q15_t)0x1852, (q15_t)0x8255, - (q15_t)0x184c, (q15_t)0x8254, (q15_t)0x1845, (q15_t)0x8253, (q15_t)0x183f, (q15_t)0x8252, (q15_t)0x1839, (q15_t)0x8251, - (q15_t)0x1833, (q15_t)0x8250, (q15_t)0x182d, (q15_t)0x824e, (q15_t)0x1827, (q15_t)0x824d, (q15_t)0x1820, (q15_t)0x824c, - (q15_t)0x181a, (q15_t)0x824b, (q15_t)0x1814, (q15_t)0x824a, (q15_t)0x180e, (q15_t)0x8248, (q15_t)0x1808, (q15_t)0x8247, - (q15_t)0x1802, (q15_t)0x8246, (q15_t)0x17fb, (q15_t)0x8245, (q15_t)0x17f5, (q15_t)0x8244, (q15_t)0x17ef, (q15_t)0x8243, - (q15_t)0x17e9, (q15_t)0x8241, (q15_t)0x17e3, (q15_t)0x8240, (q15_t)0x17dd, (q15_t)0x823f, (q15_t)0x17d6, (q15_t)0x823e, - (q15_t)0x17d0, (q15_t)0x823d, (q15_t)0x17ca, (q15_t)0x823b, (q15_t)0x17c4, (q15_t)0x823a, (q15_t)0x17be, (q15_t)0x8239, - (q15_t)0x17b7, (q15_t)0x8238, (q15_t)0x17b1, (q15_t)0x8237, (q15_t)0x17ab, (q15_t)0x8236, (q15_t)0x17a5, (q15_t)0x8234, - (q15_t)0x179f, (q15_t)0x8233, (q15_t)0x1799, (q15_t)0x8232, (q15_t)0x1792, (q15_t)0x8231, (q15_t)0x178c, (q15_t)0x8230, - (q15_t)0x1786, (q15_t)0x822f, (q15_t)0x1780, (q15_t)0x822e, (q15_t)0x177a, (q15_t)0x822c, (q15_t)0x1774, (q15_t)0x822b, - (q15_t)0x176d, (q15_t)0x822a, (q15_t)0x1767, (q15_t)0x8229, (q15_t)0x1761, (q15_t)0x8228, (q15_t)0x175b, (q15_t)0x8227, - (q15_t)0x1755, (q15_t)0x8226, (q15_t)0x174e, (q15_t)0x8224, (q15_t)0x1748, (q15_t)0x8223, (q15_t)0x1742, (q15_t)0x8222, - (q15_t)0x173c, (q15_t)0x8221, (q15_t)0x1736, (q15_t)0x8220, (q15_t)0x1730, (q15_t)0x821f, (q15_t)0x1729, (q15_t)0x821e, - (q15_t)0x1723, (q15_t)0x821c, (q15_t)0x171d, (q15_t)0x821b, (q15_t)0x1717, (q15_t)0x821a, (q15_t)0x1711, (q15_t)0x8219, - (q15_t)0x170a, (q15_t)0x8218, (q15_t)0x1704, (q15_t)0x8217, (q15_t)0x16fe, (q15_t)0x8216, (q15_t)0x16f8, (q15_t)0x8214, - (q15_t)0x16f2, (q15_t)0x8213, (q15_t)0x16ec, (q15_t)0x8212, (q15_t)0x16e5, (q15_t)0x8211, (q15_t)0x16df, (q15_t)0x8210, - (q15_t)0x16d9, (q15_t)0x820f, (q15_t)0x16d3, (q15_t)0x820e, (q15_t)0x16cd, (q15_t)0x820d, (q15_t)0x16c6, (q15_t)0x820b, - (q15_t)0x16c0, (q15_t)0x820a, (q15_t)0x16ba, (q15_t)0x8209, (q15_t)0x16b4, (q15_t)0x8208, (q15_t)0x16ae, (q15_t)0x8207, - (q15_t)0x16a8, (q15_t)0x8206, (q15_t)0x16a1, (q15_t)0x8205, (q15_t)0x169b, (q15_t)0x8204, (q15_t)0x1695, (q15_t)0x8203, - (q15_t)0x168f, (q15_t)0x8201, (q15_t)0x1689, (q15_t)0x8200, (q15_t)0x1682, (q15_t)0x81ff, (q15_t)0x167c, (q15_t)0x81fe, - (q15_t)0x1676, (q15_t)0x81fd, (q15_t)0x1670, (q15_t)0x81fc, (q15_t)0x166a, (q15_t)0x81fb, (q15_t)0x1664, (q15_t)0x81fa, - (q15_t)0x165d, (q15_t)0x81f9, (q15_t)0x1657, (q15_t)0x81f8, (q15_t)0x1651, (q15_t)0x81f6, (q15_t)0x164b, (q15_t)0x81f5, - (q15_t)0x1645, (q15_t)0x81f4, (q15_t)0x163e, (q15_t)0x81f3, (q15_t)0x1638, (q15_t)0x81f2, (q15_t)0x1632, (q15_t)0x81f1, - (q15_t)0x162c, (q15_t)0x81f0, (q15_t)0x1626, (q15_t)0x81ef, (q15_t)0x161f, (q15_t)0x81ee, (q15_t)0x1619, (q15_t)0x81ed, - (q15_t)0x1613, (q15_t)0x81ec, (q15_t)0x160d, (q15_t)0x81ea, (q15_t)0x1607, (q15_t)0x81e9, (q15_t)0x1601, (q15_t)0x81e8, - (q15_t)0x15fa, (q15_t)0x81e7, (q15_t)0x15f4, (q15_t)0x81e6, (q15_t)0x15ee, (q15_t)0x81e5, (q15_t)0x15e8, (q15_t)0x81e4, - (q15_t)0x15e2, (q15_t)0x81e3, (q15_t)0x15db, (q15_t)0x81e2, (q15_t)0x15d5, (q15_t)0x81e1, (q15_t)0x15cf, (q15_t)0x81e0, - (q15_t)0x15c9, (q15_t)0x81df, (q15_t)0x15c3, (q15_t)0x81de, (q15_t)0x15bc, (q15_t)0x81dc, (q15_t)0x15b6, (q15_t)0x81db, - (q15_t)0x15b0, (q15_t)0x81da, (q15_t)0x15aa, (q15_t)0x81d9, (q15_t)0x15a4, (q15_t)0x81d8, (q15_t)0x159d, (q15_t)0x81d7, - (q15_t)0x1597, (q15_t)0x81d6, (q15_t)0x1591, (q15_t)0x81d5, (q15_t)0x158b, (q15_t)0x81d4, (q15_t)0x1585, (q15_t)0x81d3, - (q15_t)0x157f, (q15_t)0x81d2, (q15_t)0x1578, (q15_t)0x81d1, (q15_t)0x1572, (q15_t)0x81d0, (q15_t)0x156c, (q15_t)0x81cf, - (q15_t)0x1566, (q15_t)0x81ce, (q15_t)0x1560, (q15_t)0x81cd, (q15_t)0x1559, (q15_t)0x81cc, (q15_t)0x1553, (q15_t)0x81cb, - (q15_t)0x154d, (q15_t)0x81c9, (q15_t)0x1547, (q15_t)0x81c8, (q15_t)0x1541, (q15_t)0x81c7, (q15_t)0x153a, (q15_t)0x81c6, - (q15_t)0x1534, (q15_t)0x81c5, (q15_t)0x152e, (q15_t)0x81c4, (q15_t)0x1528, (q15_t)0x81c3, (q15_t)0x1522, (q15_t)0x81c2, - (q15_t)0x151b, (q15_t)0x81c1, (q15_t)0x1515, (q15_t)0x81c0, (q15_t)0x150f, (q15_t)0x81bf, (q15_t)0x1509, (q15_t)0x81be, - (q15_t)0x1503, (q15_t)0x81bd, (q15_t)0x14fc, (q15_t)0x81bc, (q15_t)0x14f6, (q15_t)0x81bb, (q15_t)0x14f0, (q15_t)0x81ba, - (q15_t)0x14ea, (q15_t)0x81b9, (q15_t)0x14e4, (q15_t)0x81b8, (q15_t)0x14dd, (q15_t)0x81b7, (q15_t)0x14d7, (q15_t)0x81b6, - (q15_t)0x14d1, (q15_t)0x81b5, (q15_t)0x14cb, (q15_t)0x81b4, (q15_t)0x14c5, (q15_t)0x81b3, (q15_t)0x14be, (q15_t)0x81b2, - (q15_t)0x14b8, (q15_t)0x81b1, (q15_t)0x14b2, (q15_t)0x81b0, (q15_t)0x14ac, (q15_t)0x81af, (q15_t)0x14a6, (q15_t)0x81ae, - (q15_t)0x149f, (q15_t)0x81ad, (q15_t)0x1499, (q15_t)0x81ac, (q15_t)0x1493, (q15_t)0x81ab, (q15_t)0x148d, (q15_t)0x81aa, - (q15_t)0x1487, (q15_t)0x81a9, (q15_t)0x1480, (q15_t)0x81a8, (q15_t)0x147a, (q15_t)0x81a7, (q15_t)0x1474, (q15_t)0x81a6, - (q15_t)0x146e, (q15_t)0x81a5, (q15_t)0x1468, (q15_t)0x81a4, (q15_t)0x1461, (q15_t)0x81a3, (q15_t)0x145b, (q15_t)0x81a2, - (q15_t)0x1455, (q15_t)0x81a1, (q15_t)0x144f, (q15_t)0x81a0, (q15_t)0x1449, (q15_t)0x819f, (q15_t)0x1442, (q15_t)0x819e, - (q15_t)0x143c, (q15_t)0x819d, (q15_t)0x1436, (q15_t)0x819c, (q15_t)0x1430, (q15_t)0x819b, (q15_t)0x142a, (q15_t)0x819a, - (q15_t)0x1423, (q15_t)0x8199, (q15_t)0x141d, (q15_t)0x8198, (q15_t)0x1417, (q15_t)0x8197, (q15_t)0x1411, (q15_t)0x8196, - (q15_t)0x140b, (q15_t)0x8195, (q15_t)0x1404, (q15_t)0x8194, (q15_t)0x13fe, (q15_t)0x8193, (q15_t)0x13f8, (q15_t)0x8192, - (q15_t)0x13f2, (q15_t)0x8191, (q15_t)0x13eb, (q15_t)0x8190, (q15_t)0x13e5, (q15_t)0x818f, (q15_t)0x13df, (q15_t)0x818e, - (q15_t)0x13d9, (q15_t)0x818d, (q15_t)0x13d3, (q15_t)0x818c, (q15_t)0x13cc, (q15_t)0x818b, (q15_t)0x13c6, (q15_t)0x818a, - (q15_t)0x13c0, (q15_t)0x8189, (q15_t)0x13ba, (q15_t)0x8188, (q15_t)0x13b4, (q15_t)0x8187, (q15_t)0x13ad, (q15_t)0x8186, - (q15_t)0x13a7, (q15_t)0x8185, (q15_t)0x13a1, (q15_t)0x8184, (q15_t)0x139b, (q15_t)0x8183, (q15_t)0x1395, (q15_t)0x8182, - (q15_t)0x138e, (q15_t)0x8181, (q15_t)0x1388, (q15_t)0x8180, (q15_t)0x1382, (q15_t)0x817f, (q15_t)0x137c, (q15_t)0x817e, - (q15_t)0x1376, (q15_t)0x817d, (q15_t)0x136f, (q15_t)0x817c, (q15_t)0x1369, (q15_t)0x817c, (q15_t)0x1363, (q15_t)0x817b, - (q15_t)0x135d, (q15_t)0x817a, (q15_t)0x1356, (q15_t)0x8179, (q15_t)0x1350, (q15_t)0x8178, (q15_t)0x134a, (q15_t)0x8177, - (q15_t)0x1344, (q15_t)0x8176, (q15_t)0x133e, (q15_t)0x8175, (q15_t)0x1337, (q15_t)0x8174, (q15_t)0x1331, (q15_t)0x8173, - (q15_t)0x132b, (q15_t)0x8172, (q15_t)0x1325, (q15_t)0x8171, (q15_t)0x131f, (q15_t)0x8170, (q15_t)0x1318, (q15_t)0x816f, - (q15_t)0x1312, (q15_t)0x816e, (q15_t)0x130c, (q15_t)0x816d, (q15_t)0x1306, (q15_t)0x816c, (q15_t)0x12ff, (q15_t)0x816c, - (q15_t)0x12f9, (q15_t)0x816b, (q15_t)0x12f3, (q15_t)0x816a, (q15_t)0x12ed, (q15_t)0x8169, (q15_t)0x12e7, (q15_t)0x8168, - (q15_t)0x12e0, (q15_t)0x8167, (q15_t)0x12da, (q15_t)0x8166, (q15_t)0x12d4, (q15_t)0x8165, (q15_t)0x12ce, (q15_t)0x8164, - (q15_t)0x12c8, (q15_t)0x8163, (q15_t)0x12c1, (q15_t)0x8162, (q15_t)0x12bb, (q15_t)0x8161, (q15_t)0x12b5, (q15_t)0x8160, - (q15_t)0x12af, (q15_t)0x815f, (q15_t)0x12a8, (q15_t)0x815f, (q15_t)0x12a2, (q15_t)0x815e, (q15_t)0x129c, (q15_t)0x815d, - (q15_t)0x1296, (q15_t)0x815c, (q15_t)0x1290, (q15_t)0x815b, (q15_t)0x1289, (q15_t)0x815a, (q15_t)0x1283, (q15_t)0x8159, - (q15_t)0x127d, (q15_t)0x8158, (q15_t)0x1277, (q15_t)0x8157, (q15_t)0x1271, (q15_t)0x8156, (q15_t)0x126a, (q15_t)0x8155, - (q15_t)0x1264, (q15_t)0x8155, (q15_t)0x125e, (q15_t)0x8154, (q15_t)0x1258, (q15_t)0x8153, (q15_t)0x1251, (q15_t)0x8152, - (q15_t)0x124b, (q15_t)0x8151, (q15_t)0x1245, (q15_t)0x8150, (q15_t)0x123f, (q15_t)0x814f, (q15_t)0x1239, (q15_t)0x814e, - (q15_t)0x1232, (q15_t)0x814d, (q15_t)0x122c, (q15_t)0x814c, (q15_t)0x1226, (q15_t)0x814c, (q15_t)0x1220, (q15_t)0x814b, - (q15_t)0x1219, (q15_t)0x814a, (q15_t)0x1213, (q15_t)0x8149, (q15_t)0x120d, (q15_t)0x8148, (q15_t)0x1207, (q15_t)0x8147, - (q15_t)0x1201, (q15_t)0x8146, (q15_t)0x11fa, (q15_t)0x8145, (q15_t)0x11f4, (q15_t)0x8145, (q15_t)0x11ee, (q15_t)0x8144, - (q15_t)0x11e8, (q15_t)0x8143, (q15_t)0x11e1, (q15_t)0x8142, (q15_t)0x11db, (q15_t)0x8141, (q15_t)0x11d5, (q15_t)0x8140, - (q15_t)0x11cf, (q15_t)0x813f, (q15_t)0x11c9, (q15_t)0x813e, (q15_t)0x11c2, (q15_t)0x813d, (q15_t)0x11bc, (q15_t)0x813d, - (q15_t)0x11b6, (q15_t)0x813c, (q15_t)0x11b0, (q15_t)0x813b, (q15_t)0x11a9, (q15_t)0x813a, (q15_t)0x11a3, (q15_t)0x8139, - (q15_t)0x119d, (q15_t)0x8138, (q15_t)0x1197, (q15_t)0x8137, (q15_t)0x1191, (q15_t)0x8137, (q15_t)0x118a, (q15_t)0x8136, - (q15_t)0x1184, (q15_t)0x8135, (q15_t)0x117e, (q15_t)0x8134, (q15_t)0x1178, (q15_t)0x8133, (q15_t)0x1171, (q15_t)0x8132, - (q15_t)0x116b, (q15_t)0x8131, (q15_t)0x1165, (q15_t)0x8131, (q15_t)0x115f, (q15_t)0x8130, (q15_t)0x1159, (q15_t)0x812f, - (q15_t)0x1152, (q15_t)0x812e, (q15_t)0x114c, (q15_t)0x812d, (q15_t)0x1146, (q15_t)0x812c, (q15_t)0x1140, (q15_t)0x812b, - (q15_t)0x1139, (q15_t)0x812b, (q15_t)0x1133, (q15_t)0x812a, (q15_t)0x112d, (q15_t)0x8129, (q15_t)0x1127, (q15_t)0x8128, - (q15_t)0x1121, (q15_t)0x8127, (q15_t)0x111a, (q15_t)0x8126, (q15_t)0x1114, (q15_t)0x8126, (q15_t)0x110e, (q15_t)0x8125, - (q15_t)0x1108, (q15_t)0x8124, (q15_t)0x1101, (q15_t)0x8123, (q15_t)0x10fb, (q15_t)0x8122, (q15_t)0x10f5, (q15_t)0x8121, - (q15_t)0x10ef, (q15_t)0x8121, (q15_t)0x10e8, (q15_t)0x8120, (q15_t)0x10e2, (q15_t)0x811f, (q15_t)0x10dc, (q15_t)0x811e, - (q15_t)0x10d6, (q15_t)0x811d, (q15_t)0x10d0, (q15_t)0x811c, (q15_t)0x10c9, (q15_t)0x811c, (q15_t)0x10c3, (q15_t)0x811b, - (q15_t)0x10bd, (q15_t)0x811a, (q15_t)0x10b7, (q15_t)0x8119, (q15_t)0x10b0, (q15_t)0x8118, (q15_t)0x10aa, (q15_t)0x8117, - (q15_t)0x10a4, (q15_t)0x8117, (q15_t)0x109e, (q15_t)0x8116, (q15_t)0x1098, (q15_t)0x8115, (q15_t)0x1091, (q15_t)0x8114, - (q15_t)0x108b, (q15_t)0x8113, (q15_t)0x1085, (q15_t)0x8113, (q15_t)0x107f, (q15_t)0x8112, (q15_t)0x1078, (q15_t)0x8111, - (q15_t)0x1072, (q15_t)0x8110, (q15_t)0x106c, (q15_t)0x810f, (q15_t)0x1066, (q15_t)0x810f, (q15_t)0x105f, (q15_t)0x810e, - (q15_t)0x1059, (q15_t)0x810d, (q15_t)0x1053, (q15_t)0x810c, (q15_t)0x104d, (q15_t)0x810b, (q15_t)0x1047, (q15_t)0x810b, - (q15_t)0x1040, (q15_t)0x810a, (q15_t)0x103a, (q15_t)0x8109, (q15_t)0x1034, (q15_t)0x8108, (q15_t)0x102e, (q15_t)0x8107, - (q15_t)0x1027, (q15_t)0x8107, (q15_t)0x1021, (q15_t)0x8106, (q15_t)0x101b, (q15_t)0x8105, (q15_t)0x1015, (q15_t)0x8104, - (q15_t)0x100e, (q15_t)0x8103, (q15_t)0x1008, (q15_t)0x8103, (q15_t)0x1002, (q15_t)0x8102, (q15_t)0xffc, (q15_t)0x8101, - (q15_t)0xff5, (q15_t)0x8100, (q15_t)0xfef, (q15_t)0x80ff, (q15_t)0xfe9, (q15_t)0x80ff, (q15_t)0xfe3, (q15_t)0x80fe, - (q15_t)0xfdd, (q15_t)0x80fd, (q15_t)0xfd6, (q15_t)0x80fc, (q15_t)0xfd0, (q15_t)0x80fc, (q15_t)0xfca, (q15_t)0x80fb, - (q15_t)0xfc4, (q15_t)0x80fa, (q15_t)0xfbd, (q15_t)0x80f9, (q15_t)0xfb7, (q15_t)0x80f8, (q15_t)0xfb1, (q15_t)0x80f8, - (q15_t)0xfab, (q15_t)0x80f7, (q15_t)0xfa4, (q15_t)0x80f6, (q15_t)0xf9e, (q15_t)0x80f5, (q15_t)0xf98, (q15_t)0x80f5, - (q15_t)0xf92, (q15_t)0x80f4, (q15_t)0xf8b, (q15_t)0x80f3, (q15_t)0xf85, (q15_t)0x80f2, (q15_t)0xf7f, (q15_t)0x80f2, - (q15_t)0xf79, (q15_t)0x80f1, (q15_t)0xf73, (q15_t)0x80f0, (q15_t)0xf6c, (q15_t)0x80ef, (q15_t)0xf66, (q15_t)0x80ef, - (q15_t)0xf60, (q15_t)0x80ee, (q15_t)0xf5a, (q15_t)0x80ed, (q15_t)0xf53, (q15_t)0x80ec, (q15_t)0xf4d, (q15_t)0x80ec, - (q15_t)0xf47, (q15_t)0x80eb, (q15_t)0xf41, (q15_t)0x80ea, (q15_t)0xf3a, (q15_t)0x80e9, (q15_t)0xf34, (q15_t)0x80e9, - (q15_t)0xf2e, (q15_t)0x80e8, (q15_t)0xf28, (q15_t)0x80e7, (q15_t)0xf21, (q15_t)0x80e6, (q15_t)0xf1b, (q15_t)0x80e6, - (q15_t)0xf15, (q15_t)0x80e5, (q15_t)0xf0f, (q15_t)0x80e4, (q15_t)0xf08, (q15_t)0x80e3, (q15_t)0xf02, (q15_t)0x80e3, - (q15_t)0xefc, (q15_t)0x80e2, (q15_t)0xef6, (q15_t)0x80e1, (q15_t)0xef0, (q15_t)0x80e0, (q15_t)0xee9, (q15_t)0x80e0, - (q15_t)0xee3, (q15_t)0x80df, (q15_t)0xedd, (q15_t)0x80de, (q15_t)0xed7, (q15_t)0x80dd, (q15_t)0xed0, (q15_t)0x80dd, - (q15_t)0xeca, (q15_t)0x80dc, (q15_t)0xec4, (q15_t)0x80db, (q15_t)0xebe, (q15_t)0x80db, (q15_t)0xeb7, (q15_t)0x80da, - (q15_t)0xeb1, (q15_t)0x80d9, (q15_t)0xeab, (q15_t)0x80d8, (q15_t)0xea5, (q15_t)0x80d8, (q15_t)0xe9e, (q15_t)0x80d7, - (q15_t)0xe98, (q15_t)0x80d6, (q15_t)0xe92, (q15_t)0x80d6, (q15_t)0xe8c, (q15_t)0x80d5, (q15_t)0xe85, (q15_t)0x80d4, - (q15_t)0xe7f, (q15_t)0x80d3, (q15_t)0xe79, (q15_t)0x80d3, (q15_t)0xe73, (q15_t)0x80d2, (q15_t)0xe6c, (q15_t)0x80d1, - (q15_t)0xe66, (q15_t)0x80d1, (q15_t)0xe60, (q15_t)0x80d0, (q15_t)0xe5a, (q15_t)0x80cf, (q15_t)0xe53, (q15_t)0x80ce, - (q15_t)0xe4d, (q15_t)0x80ce, (q15_t)0xe47, (q15_t)0x80cd, (q15_t)0xe41, (q15_t)0x80cc, (q15_t)0xe3a, (q15_t)0x80cc, - (q15_t)0xe34, (q15_t)0x80cb, (q15_t)0xe2e, (q15_t)0x80ca, (q15_t)0xe28, (q15_t)0x80ca, (q15_t)0xe22, (q15_t)0x80c9, - (q15_t)0xe1b, (q15_t)0x80c8, (q15_t)0xe15, (q15_t)0x80c7, (q15_t)0xe0f, (q15_t)0x80c7, (q15_t)0xe09, (q15_t)0x80c6, - (q15_t)0xe02, (q15_t)0x80c5, (q15_t)0xdfc, (q15_t)0x80c5, (q15_t)0xdf6, (q15_t)0x80c4, (q15_t)0xdf0, (q15_t)0x80c3, - (q15_t)0xde9, (q15_t)0x80c3, (q15_t)0xde3, (q15_t)0x80c2, (q15_t)0xddd, (q15_t)0x80c1, (q15_t)0xdd7, (q15_t)0x80c1, - (q15_t)0xdd0, (q15_t)0x80c0, (q15_t)0xdca, (q15_t)0x80bf, (q15_t)0xdc4, (q15_t)0x80bf, (q15_t)0xdbe, (q15_t)0x80be, - (q15_t)0xdb7, (q15_t)0x80bd, (q15_t)0xdb1, (q15_t)0x80bd, (q15_t)0xdab, (q15_t)0x80bc, (q15_t)0xda5, (q15_t)0x80bb, - (q15_t)0xd9e, (q15_t)0x80bb, (q15_t)0xd98, (q15_t)0x80ba, (q15_t)0xd92, (q15_t)0x80b9, (q15_t)0xd8c, (q15_t)0x80b9, - (q15_t)0xd85, (q15_t)0x80b8, (q15_t)0xd7f, (q15_t)0x80b7, (q15_t)0xd79, (q15_t)0x80b7, (q15_t)0xd73, (q15_t)0x80b6, - (q15_t)0xd6c, (q15_t)0x80b5, (q15_t)0xd66, (q15_t)0x80b5, (q15_t)0xd60, (q15_t)0x80b4, (q15_t)0xd5a, (q15_t)0x80b3, - (q15_t)0xd53, (q15_t)0x80b3, (q15_t)0xd4d, (q15_t)0x80b2, (q15_t)0xd47, (q15_t)0x80b1, (q15_t)0xd41, (q15_t)0x80b1, - (q15_t)0xd3a, (q15_t)0x80b0, (q15_t)0xd34, (q15_t)0x80af, (q15_t)0xd2e, (q15_t)0x80af, (q15_t)0xd28, (q15_t)0x80ae, - (q15_t)0xd21, (q15_t)0x80ad, (q15_t)0xd1b, (q15_t)0x80ad, (q15_t)0xd15, (q15_t)0x80ac, (q15_t)0xd0f, (q15_t)0x80ab, - (q15_t)0xd08, (q15_t)0x80ab, (q15_t)0xd02, (q15_t)0x80aa, (q15_t)0xcfc, (q15_t)0x80aa, (q15_t)0xcf6, (q15_t)0x80a9, - (q15_t)0xcef, (q15_t)0x80a8, (q15_t)0xce9, (q15_t)0x80a8, (q15_t)0xce3, (q15_t)0x80a7, (q15_t)0xcdd, (q15_t)0x80a6, - (q15_t)0xcd6, (q15_t)0x80a6, (q15_t)0xcd0, (q15_t)0x80a5, (q15_t)0xcca, (q15_t)0x80a5, (q15_t)0xcc4, (q15_t)0x80a4, - (q15_t)0xcbd, (q15_t)0x80a3, (q15_t)0xcb7, (q15_t)0x80a3, (q15_t)0xcb1, (q15_t)0x80a2, (q15_t)0xcab, (q15_t)0x80a1, - (q15_t)0xca4, (q15_t)0x80a1, (q15_t)0xc9e, (q15_t)0x80a0, (q15_t)0xc98, (q15_t)0x80a0, (q15_t)0xc92, (q15_t)0x809f, - (q15_t)0xc8b, (q15_t)0x809e, (q15_t)0xc85, (q15_t)0x809e, (q15_t)0xc7f, (q15_t)0x809d, (q15_t)0xc79, (q15_t)0x809c, - (q15_t)0xc72, (q15_t)0x809c, (q15_t)0xc6c, (q15_t)0x809b, (q15_t)0xc66, (q15_t)0x809b, (q15_t)0xc60, (q15_t)0x809a, - (q15_t)0xc59, (q15_t)0x8099, (q15_t)0xc53, (q15_t)0x8099, (q15_t)0xc4d, (q15_t)0x8098, (q15_t)0xc47, (q15_t)0x8098, - (q15_t)0xc40, (q15_t)0x8097, (q15_t)0xc3a, (q15_t)0x8096, (q15_t)0xc34, (q15_t)0x8096, (q15_t)0xc2e, (q15_t)0x8095, - (q15_t)0xc27, (q15_t)0x8095, (q15_t)0xc21, (q15_t)0x8094, (q15_t)0xc1b, (q15_t)0x8093, (q15_t)0xc14, (q15_t)0x8093, - (q15_t)0xc0e, (q15_t)0x8092, (q15_t)0xc08, (q15_t)0x8092, (q15_t)0xc02, (q15_t)0x8091, (q15_t)0xbfb, (q15_t)0x8090, - (q15_t)0xbf5, (q15_t)0x8090, (q15_t)0xbef, (q15_t)0x808f, (q15_t)0xbe9, (q15_t)0x808f, (q15_t)0xbe2, (q15_t)0x808e, - (q15_t)0xbdc, (q15_t)0x808e, (q15_t)0xbd6, (q15_t)0x808d, (q15_t)0xbd0, (q15_t)0x808c, (q15_t)0xbc9, (q15_t)0x808c, - (q15_t)0xbc3, (q15_t)0x808b, (q15_t)0xbbd, (q15_t)0x808b, (q15_t)0xbb7, (q15_t)0x808a, (q15_t)0xbb0, (q15_t)0x8089, - (q15_t)0xbaa, (q15_t)0x8089, (q15_t)0xba4, (q15_t)0x8088, (q15_t)0xb9e, (q15_t)0x8088, (q15_t)0xb97, (q15_t)0x8087, - (q15_t)0xb91, (q15_t)0x8087, (q15_t)0xb8b, (q15_t)0x8086, (q15_t)0xb85, (q15_t)0x8085, (q15_t)0xb7e, (q15_t)0x8085, - (q15_t)0xb78, (q15_t)0x8084, (q15_t)0xb72, (q15_t)0x8084, (q15_t)0xb6c, (q15_t)0x8083, (q15_t)0xb65, (q15_t)0x8083, - (q15_t)0xb5f, (q15_t)0x8082, (q15_t)0xb59, (q15_t)0x8082, (q15_t)0xb53, (q15_t)0x8081, (q15_t)0xb4c, (q15_t)0x8080, - (q15_t)0xb46, (q15_t)0x8080, (q15_t)0xb40, (q15_t)0x807f, (q15_t)0xb3a, (q15_t)0x807f, (q15_t)0xb33, (q15_t)0x807e, - (q15_t)0xb2d, (q15_t)0x807e, (q15_t)0xb27, (q15_t)0x807d, (q15_t)0xb20, (q15_t)0x807d, (q15_t)0xb1a, (q15_t)0x807c, - (q15_t)0xb14, (q15_t)0x807b, (q15_t)0xb0e, (q15_t)0x807b, (q15_t)0xb07, (q15_t)0x807a, (q15_t)0xb01, (q15_t)0x807a, - (q15_t)0xafb, (q15_t)0x8079, (q15_t)0xaf5, (q15_t)0x8079, (q15_t)0xaee, (q15_t)0x8078, (q15_t)0xae8, (q15_t)0x8078, - (q15_t)0xae2, (q15_t)0x8077, (q15_t)0xadc, (q15_t)0x8077, (q15_t)0xad5, (q15_t)0x8076, (q15_t)0xacf, (q15_t)0x8076, - (q15_t)0xac9, (q15_t)0x8075, (q15_t)0xac3, (q15_t)0x8075, (q15_t)0xabc, (q15_t)0x8074, (q15_t)0xab6, (q15_t)0x8073, - (q15_t)0xab0, (q15_t)0x8073, (q15_t)0xaaa, (q15_t)0x8072, (q15_t)0xaa3, (q15_t)0x8072, (q15_t)0xa9d, (q15_t)0x8071, - (q15_t)0xa97, (q15_t)0x8071, (q15_t)0xa90, (q15_t)0x8070, (q15_t)0xa8a, (q15_t)0x8070, (q15_t)0xa84, (q15_t)0x806f, - (q15_t)0xa7e, (q15_t)0x806f, (q15_t)0xa77, (q15_t)0x806e, (q15_t)0xa71, (q15_t)0x806e, (q15_t)0xa6b, (q15_t)0x806d, - (q15_t)0xa65, (q15_t)0x806d, (q15_t)0xa5e, (q15_t)0x806c, (q15_t)0xa58, (q15_t)0x806c, (q15_t)0xa52, (q15_t)0x806b, - (q15_t)0xa4c, (q15_t)0x806b, (q15_t)0xa45, (q15_t)0x806a, (q15_t)0xa3f, (q15_t)0x806a, (q15_t)0xa39, (q15_t)0x8069, - (q15_t)0xa33, (q15_t)0x8069, (q15_t)0xa2c, (q15_t)0x8068, (q15_t)0xa26, (q15_t)0x8068, (q15_t)0xa20, (q15_t)0x8067, - (q15_t)0xa19, (q15_t)0x8067, (q15_t)0xa13, (q15_t)0x8066, (q15_t)0xa0d, (q15_t)0x8066, (q15_t)0xa07, (q15_t)0x8065, - (q15_t)0xa00, (q15_t)0x8065, (q15_t)0x9fa, (q15_t)0x8064, (q15_t)0x9f4, (q15_t)0x8064, (q15_t)0x9ee, (q15_t)0x8063, - (q15_t)0x9e7, (q15_t)0x8063, (q15_t)0x9e1, (q15_t)0x8062, (q15_t)0x9db, (q15_t)0x8062, (q15_t)0x9d5, (q15_t)0x8061, - (q15_t)0x9ce, (q15_t)0x8061, (q15_t)0x9c8, (q15_t)0x8060, (q15_t)0x9c2, (q15_t)0x8060, (q15_t)0x9bc, (q15_t)0x805f, - (q15_t)0x9b5, (q15_t)0x805f, (q15_t)0x9af, (q15_t)0x805e, (q15_t)0x9a9, (q15_t)0x805e, (q15_t)0x9a2, (q15_t)0x805d, - (q15_t)0x99c, (q15_t)0x805d, (q15_t)0x996, (q15_t)0x805d, (q15_t)0x990, (q15_t)0x805c, (q15_t)0x989, (q15_t)0x805c, - (q15_t)0x983, (q15_t)0x805b, (q15_t)0x97d, (q15_t)0x805b, (q15_t)0x977, (q15_t)0x805a, (q15_t)0x970, (q15_t)0x805a, - (q15_t)0x96a, (q15_t)0x8059, (q15_t)0x964, (q15_t)0x8059, (q15_t)0x95e, (q15_t)0x8058, (q15_t)0x957, (q15_t)0x8058, - (q15_t)0x951, (q15_t)0x8057, (q15_t)0x94b, (q15_t)0x8057, (q15_t)0x944, (q15_t)0x8057, (q15_t)0x93e, (q15_t)0x8056, - (q15_t)0x938, (q15_t)0x8056, (q15_t)0x932, (q15_t)0x8055, (q15_t)0x92b, (q15_t)0x8055, (q15_t)0x925, (q15_t)0x8054, - (q15_t)0x91f, (q15_t)0x8054, (q15_t)0x919, (q15_t)0x8053, (q15_t)0x912, (q15_t)0x8053, (q15_t)0x90c, (q15_t)0x8052, - (q15_t)0x906, (q15_t)0x8052, (q15_t)0x900, (q15_t)0x8052, (q15_t)0x8f9, (q15_t)0x8051, (q15_t)0x8f3, (q15_t)0x8051, - (q15_t)0x8ed, (q15_t)0x8050, (q15_t)0x8e6, (q15_t)0x8050, (q15_t)0x8e0, (q15_t)0x804f, (q15_t)0x8da, (q15_t)0x804f, - (q15_t)0x8d4, (q15_t)0x804f, (q15_t)0x8cd, (q15_t)0x804e, (q15_t)0x8c7, (q15_t)0x804e, (q15_t)0x8c1, (q15_t)0x804d, - (q15_t)0x8bb, (q15_t)0x804d, (q15_t)0x8b4, (q15_t)0x804c, (q15_t)0x8ae, (q15_t)0x804c, (q15_t)0x8a8, (q15_t)0x804c, - (q15_t)0x8a2, (q15_t)0x804b, (q15_t)0x89b, (q15_t)0x804b, (q15_t)0x895, (q15_t)0x804a, (q15_t)0x88f, (q15_t)0x804a, - (q15_t)0x888, (q15_t)0x8049, (q15_t)0x882, (q15_t)0x8049, (q15_t)0x87c, (q15_t)0x8049, (q15_t)0x876, (q15_t)0x8048, - (q15_t)0x86f, (q15_t)0x8048, (q15_t)0x869, (q15_t)0x8047, (q15_t)0x863, (q15_t)0x8047, (q15_t)0x85d, (q15_t)0x8047, - (q15_t)0x856, (q15_t)0x8046, (q15_t)0x850, (q15_t)0x8046, (q15_t)0x84a, (q15_t)0x8045, (q15_t)0x843, (q15_t)0x8045, - (q15_t)0x83d, (q15_t)0x8044, (q15_t)0x837, (q15_t)0x8044, (q15_t)0x831, (q15_t)0x8044, (q15_t)0x82a, (q15_t)0x8043, - (q15_t)0x824, (q15_t)0x8043, (q15_t)0x81e, (q15_t)0x8042, (q15_t)0x818, (q15_t)0x8042, (q15_t)0x811, (q15_t)0x8042, - (q15_t)0x80b, (q15_t)0x8041, (q15_t)0x805, (q15_t)0x8041, (q15_t)0x7fe, (q15_t)0x8040, (q15_t)0x7f8, (q15_t)0x8040, - (q15_t)0x7f2, (q15_t)0x8040, (q15_t)0x7ec, (q15_t)0x803f, (q15_t)0x7e5, (q15_t)0x803f, (q15_t)0x7df, (q15_t)0x803f, - (q15_t)0x7d9, (q15_t)0x803e, (q15_t)0x7d3, (q15_t)0x803e, (q15_t)0x7cc, (q15_t)0x803d, (q15_t)0x7c6, (q15_t)0x803d, - (q15_t)0x7c0, (q15_t)0x803d, (q15_t)0x7ba, (q15_t)0x803c, (q15_t)0x7b3, (q15_t)0x803c, (q15_t)0x7ad, (q15_t)0x803b, - (q15_t)0x7a7, (q15_t)0x803b, (q15_t)0x7a0, (q15_t)0x803b, (q15_t)0x79a, (q15_t)0x803a, (q15_t)0x794, (q15_t)0x803a, - (q15_t)0x78e, (q15_t)0x803a, (q15_t)0x787, (q15_t)0x8039, (q15_t)0x781, (q15_t)0x8039, (q15_t)0x77b, (q15_t)0x8039, - (q15_t)0x775, (q15_t)0x8038, (q15_t)0x76e, (q15_t)0x8038, (q15_t)0x768, (q15_t)0x8037, (q15_t)0x762, (q15_t)0x8037, - (q15_t)0x75b, (q15_t)0x8037, (q15_t)0x755, (q15_t)0x8036, (q15_t)0x74f, (q15_t)0x8036, (q15_t)0x749, (q15_t)0x8036, - (q15_t)0x742, (q15_t)0x8035, (q15_t)0x73c, (q15_t)0x8035, (q15_t)0x736, (q15_t)0x8035, (q15_t)0x730, (q15_t)0x8034, - (q15_t)0x729, (q15_t)0x8034, (q15_t)0x723, (q15_t)0x8033, (q15_t)0x71d, (q15_t)0x8033, (q15_t)0x716, (q15_t)0x8033, - (q15_t)0x710, (q15_t)0x8032, (q15_t)0x70a, (q15_t)0x8032, (q15_t)0x704, (q15_t)0x8032, (q15_t)0x6fd, (q15_t)0x8031, - (q15_t)0x6f7, (q15_t)0x8031, (q15_t)0x6f1, (q15_t)0x8031, (q15_t)0x6ea, (q15_t)0x8030, (q15_t)0x6e4, (q15_t)0x8030, - (q15_t)0x6de, (q15_t)0x8030, (q15_t)0x6d8, (q15_t)0x802f, (q15_t)0x6d1, (q15_t)0x802f, (q15_t)0x6cb, (q15_t)0x802f, - (q15_t)0x6c5, (q15_t)0x802e, (q15_t)0x6bf, (q15_t)0x802e, (q15_t)0x6b8, (q15_t)0x802e, (q15_t)0x6b2, (q15_t)0x802d, - (q15_t)0x6ac, (q15_t)0x802d, (q15_t)0x6a5, (q15_t)0x802d, (q15_t)0x69f, (q15_t)0x802c, (q15_t)0x699, (q15_t)0x802c, - (q15_t)0x693, (q15_t)0x802c, (q15_t)0x68c, (q15_t)0x802b, (q15_t)0x686, (q15_t)0x802b, (q15_t)0x680, (q15_t)0x802b, - (q15_t)0x67a, (q15_t)0x802a, (q15_t)0x673, (q15_t)0x802a, (q15_t)0x66d, (q15_t)0x802a, (q15_t)0x667, (q15_t)0x802a, - (q15_t)0x660, (q15_t)0x8029, (q15_t)0x65a, (q15_t)0x8029, (q15_t)0x654, (q15_t)0x8029, (q15_t)0x64e, (q15_t)0x8028, - (q15_t)0x647, (q15_t)0x8028, (q15_t)0x641, (q15_t)0x8028, (q15_t)0x63b, (q15_t)0x8027, (q15_t)0x635, (q15_t)0x8027, - (q15_t)0x62e, (q15_t)0x8027, (q15_t)0x628, (q15_t)0x8026, (q15_t)0x622, (q15_t)0x8026, (q15_t)0x61b, (q15_t)0x8026, - (q15_t)0x615, (q15_t)0x8026, (q15_t)0x60f, (q15_t)0x8025, (q15_t)0x609, (q15_t)0x8025, (q15_t)0x602, (q15_t)0x8025, - (q15_t)0x5fc, (q15_t)0x8024, (q15_t)0x5f6, (q15_t)0x8024, (q15_t)0x5ef, (q15_t)0x8024, (q15_t)0x5e9, (q15_t)0x8023, - (q15_t)0x5e3, (q15_t)0x8023, (q15_t)0x5dd, (q15_t)0x8023, (q15_t)0x5d6, (q15_t)0x8023, (q15_t)0x5d0, (q15_t)0x8022, - (q15_t)0x5ca, (q15_t)0x8022, (q15_t)0x5c4, (q15_t)0x8022, (q15_t)0x5bd, (q15_t)0x8021, (q15_t)0x5b7, (q15_t)0x8021, - (q15_t)0x5b1, (q15_t)0x8021, (q15_t)0x5aa, (q15_t)0x8021, (q15_t)0x5a4, (q15_t)0x8020, (q15_t)0x59e, (q15_t)0x8020, - (q15_t)0x598, (q15_t)0x8020, (q15_t)0x591, (q15_t)0x8020, (q15_t)0x58b, (q15_t)0x801f, (q15_t)0x585, (q15_t)0x801f, - (q15_t)0x57f, (q15_t)0x801f, (q15_t)0x578, (q15_t)0x801e, (q15_t)0x572, (q15_t)0x801e, (q15_t)0x56c, (q15_t)0x801e, - (q15_t)0x565, (q15_t)0x801e, (q15_t)0x55f, (q15_t)0x801d, (q15_t)0x559, (q15_t)0x801d, (q15_t)0x553, (q15_t)0x801d, - (q15_t)0x54c, (q15_t)0x801d, (q15_t)0x546, (q15_t)0x801c, (q15_t)0x540, (q15_t)0x801c, (q15_t)0x539, (q15_t)0x801c, - (q15_t)0x533, (q15_t)0x801c, (q15_t)0x52d, (q15_t)0x801b, (q15_t)0x527, (q15_t)0x801b, (q15_t)0x520, (q15_t)0x801b, - (q15_t)0x51a, (q15_t)0x801b, (q15_t)0x514, (q15_t)0x801a, (q15_t)0x50d, (q15_t)0x801a, (q15_t)0x507, (q15_t)0x801a, - (q15_t)0x501, (q15_t)0x801a, (q15_t)0x4fb, (q15_t)0x8019, (q15_t)0x4f4, (q15_t)0x8019, (q15_t)0x4ee, (q15_t)0x8019, - (q15_t)0x4e8, (q15_t)0x8019, (q15_t)0x4e2, (q15_t)0x8018, (q15_t)0x4db, (q15_t)0x8018, (q15_t)0x4d5, (q15_t)0x8018, - (q15_t)0x4cf, (q15_t)0x8018, (q15_t)0x4c8, (q15_t)0x8017, (q15_t)0x4c2, (q15_t)0x8017, (q15_t)0x4bc, (q15_t)0x8017, - (q15_t)0x4b6, (q15_t)0x8017, (q15_t)0x4af, (q15_t)0x8016, (q15_t)0x4a9, (q15_t)0x8016, (q15_t)0x4a3, (q15_t)0x8016, - (q15_t)0x49c, (q15_t)0x8016, (q15_t)0x496, (q15_t)0x8016, (q15_t)0x490, (q15_t)0x8015, (q15_t)0x48a, (q15_t)0x8015, - (q15_t)0x483, (q15_t)0x8015, (q15_t)0x47d, (q15_t)0x8015, (q15_t)0x477, (q15_t)0x8014, (q15_t)0x471, (q15_t)0x8014, - (q15_t)0x46a, (q15_t)0x8014, (q15_t)0x464, (q15_t)0x8014, (q15_t)0x45e, (q15_t)0x8014, (q15_t)0x457, (q15_t)0x8013, - (q15_t)0x451, (q15_t)0x8013, (q15_t)0x44b, (q15_t)0x8013, (q15_t)0x445, (q15_t)0x8013, (q15_t)0x43e, (q15_t)0x8013, - (q15_t)0x438, (q15_t)0x8012, (q15_t)0x432, (q15_t)0x8012, (q15_t)0x42b, (q15_t)0x8012, (q15_t)0x425, (q15_t)0x8012, - (q15_t)0x41f, (q15_t)0x8012, (q15_t)0x419, (q15_t)0x8011, (q15_t)0x412, (q15_t)0x8011, (q15_t)0x40c, (q15_t)0x8011, - (q15_t)0x406, (q15_t)0x8011, (q15_t)0x3ff, (q15_t)0x8011, (q15_t)0x3f9, (q15_t)0x8010, (q15_t)0x3f3, (q15_t)0x8010, - (q15_t)0x3ed, (q15_t)0x8010, (q15_t)0x3e6, (q15_t)0x8010, (q15_t)0x3e0, (q15_t)0x8010, (q15_t)0x3da, (q15_t)0x800f, - (q15_t)0x3d4, (q15_t)0x800f, (q15_t)0x3cd, (q15_t)0x800f, (q15_t)0x3c7, (q15_t)0x800f, (q15_t)0x3c1, (q15_t)0x800f, - (q15_t)0x3ba, (q15_t)0x800e, (q15_t)0x3b4, (q15_t)0x800e, (q15_t)0x3ae, (q15_t)0x800e, (q15_t)0x3a8, (q15_t)0x800e, - (q15_t)0x3a1, (q15_t)0x800e, (q15_t)0x39b, (q15_t)0x800e, (q15_t)0x395, (q15_t)0x800d, (q15_t)0x38e, (q15_t)0x800d, - (q15_t)0x388, (q15_t)0x800d, (q15_t)0x382, (q15_t)0x800d, (q15_t)0x37c, (q15_t)0x800d, (q15_t)0x375, (q15_t)0x800c, - (q15_t)0x36f, (q15_t)0x800c, (q15_t)0x369, (q15_t)0x800c, (q15_t)0x362, (q15_t)0x800c, (q15_t)0x35c, (q15_t)0x800c, - (q15_t)0x356, (q15_t)0x800c, (q15_t)0x350, (q15_t)0x800b, (q15_t)0x349, (q15_t)0x800b, (q15_t)0x343, (q15_t)0x800b, - (q15_t)0x33d, (q15_t)0x800b, (q15_t)0x337, (q15_t)0x800b, (q15_t)0x330, (q15_t)0x800b, (q15_t)0x32a, (q15_t)0x800b, - (q15_t)0x324, (q15_t)0x800a, (q15_t)0x31d, (q15_t)0x800a, (q15_t)0x317, (q15_t)0x800a, (q15_t)0x311, (q15_t)0x800a, - (q15_t)0x30b, (q15_t)0x800a, (q15_t)0x304, (q15_t)0x800a, (q15_t)0x2fe, (q15_t)0x8009, (q15_t)0x2f8, (q15_t)0x8009, - (q15_t)0x2f1, (q15_t)0x8009, (q15_t)0x2eb, (q15_t)0x8009, (q15_t)0x2e5, (q15_t)0x8009, (q15_t)0x2df, (q15_t)0x8009, - (q15_t)0x2d8, (q15_t)0x8009, (q15_t)0x2d2, (q15_t)0x8008, (q15_t)0x2cc, (q15_t)0x8008, (q15_t)0x2c5, (q15_t)0x8008, - (q15_t)0x2bf, (q15_t)0x8008, (q15_t)0x2b9, (q15_t)0x8008, (q15_t)0x2b3, (q15_t)0x8008, (q15_t)0x2ac, (q15_t)0x8008, - (q15_t)0x2a6, (q15_t)0x8008, (q15_t)0x2a0, (q15_t)0x8007, (q15_t)0x299, (q15_t)0x8007, (q15_t)0x293, (q15_t)0x8007, - (q15_t)0x28d, (q15_t)0x8007, (q15_t)0x287, (q15_t)0x8007, (q15_t)0x280, (q15_t)0x8007, (q15_t)0x27a, (q15_t)0x8007, - (q15_t)0x274, (q15_t)0x8007, (q15_t)0x26d, (q15_t)0x8006, (q15_t)0x267, (q15_t)0x8006, (q15_t)0x261, (q15_t)0x8006, - (q15_t)0x25b, (q15_t)0x8006, (q15_t)0x254, (q15_t)0x8006, (q15_t)0x24e, (q15_t)0x8006, (q15_t)0x248, (q15_t)0x8006, - (q15_t)0x242, (q15_t)0x8006, (q15_t)0x23b, (q15_t)0x8005, (q15_t)0x235, (q15_t)0x8005, (q15_t)0x22f, (q15_t)0x8005, - (q15_t)0x228, (q15_t)0x8005, (q15_t)0x222, (q15_t)0x8005, (q15_t)0x21c, (q15_t)0x8005, (q15_t)0x216, (q15_t)0x8005, - (q15_t)0x20f, (q15_t)0x8005, (q15_t)0x209, (q15_t)0x8005, (q15_t)0x203, (q15_t)0x8005, (q15_t)0x1fc, (q15_t)0x8004, - (q15_t)0x1f6, (q15_t)0x8004, (q15_t)0x1f0, (q15_t)0x8004, (q15_t)0x1ea, (q15_t)0x8004, (q15_t)0x1e3, (q15_t)0x8004, - (q15_t)0x1dd, (q15_t)0x8004, (q15_t)0x1d7, (q15_t)0x8004, (q15_t)0x1d0, (q15_t)0x8004, (q15_t)0x1ca, (q15_t)0x8004, - (q15_t)0x1c4, (q15_t)0x8004, (q15_t)0x1be, (q15_t)0x8004, (q15_t)0x1b7, (q15_t)0x8003, (q15_t)0x1b1, (q15_t)0x8003, - (q15_t)0x1ab, (q15_t)0x8003, (q15_t)0x1a4, (q15_t)0x8003, (q15_t)0x19e, (q15_t)0x8003, (q15_t)0x198, (q15_t)0x8003, - (q15_t)0x192, (q15_t)0x8003, (q15_t)0x18b, (q15_t)0x8003, (q15_t)0x185, (q15_t)0x8003, (q15_t)0x17f, (q15_t)0x8003, - (q15_t)0x178, (q15_t)0x8003, (q15_t)0x172, (q15_t)0x8003, (q15_t)0x16c, (q15_t)0x8003, (q15_t)0x166, (q15_t)0x8002, - (q15_t)0x15f, (q15_t)0x8002, (q15_t)0x159, (q15_t)0x8002, (q15_t)0x153, (q15_t)0x8002, (q15_t)0x14d, (q15_t)0x8002, - (q15_t)0x146, (q15_t)0x8002, (q15_t)0x140, (q15_t)0x8002, (q15_t)0x13a, (q15_t)0x8002, (q15_t)0x133, (q15_t)0x8002, - (q15_t)0x12d, (q15_t)0x8002, (q15_t)0x127, (q15_t)0x8002, (q15_t)0x121, (q15_t)0x8002, (q15_t)0x11a, (q15_t)0x8002, - (q15_t)0x114, (q15_t)0x8002, (q15_t)0x10e, (q15_t)0x8002, (q15_t)0x107, (q15_t)0x8002, (q15_t)0x101, (q15_t)0x8002, - (q15_t)0xfb, (q15_t)0x8001, (q15_t)0xf5, (q15_t)0x8001, (q15_t)0xee, (q15_t)0x8001, (q15_t)0xe8, (q15_t)0x8001, - (q15_t)0xe2, (q15_t)0x8001, (q15_t)0xdb, (q15_t)0x8001, (q15_t)0xd5, (q15_t)0x8001, (q15_t)0xcf, (q15_t)0x8001, - (q15_t)0xc9, (q15_t)0x8001, (q15_t)0xc2, (q15_t)0x8001, (q15_t)0xbc, (q15_t)0x8001, (q15_t)0xb6, (q15_t)0x8001, - (q15_t)0xaf, (q15_t)0x8001, (q15_t)0xa9, (q15_t)0x8001, (q15_t)0xa3, (q15_t)0x8001, (q15_t)0x9d, (q15_t)0x8001, - (q15_t)0x96, (q15_t)0x8001, (q15_t)0x90, (q15_t)0x8001, (q15_t)0x8a, (q15_t)0x8001, (q15_t)0x83, (q15_t)0x8001, - (q15_t)0x7d, (q15_t)0x8001, (q15_t)0x77, (q15_t)0x8001, (q15_t)0x71, (q15_t)0x8001, (q15_t)0x6a, (q15_t)0x8001, - (q15_t)0x64, (q15_t)0x8001, (q15_t)0x5e, (q15_t)0x8001, (q15_t)0x57, (q15_t)0x8001, (q15_t)0x51, (q15_t)0x8001, - (q15_t)0x4b, (q15_t)0x8001, (q15_t)0x45, (q15_t)0x8001, (q15_t)0x3e, (q15_t)0x8001, (q15_t)0x38, (q15_t)0x8001, - (q15_t)0x32, (q15_t)0x8001, (q15_t)0x2b, (q15_t)0x8001, (q15_t)0x25, (q15_t)0x8001, (q15_t)0x1f, (q15_t)0x8001, - (q15_t)0x19, (q15_t)0x8001, (q15_t)0x12, (q15_t)0x8001, (q15_t)0xc, (q15_t)0x8001, (q15_t)0x6, (q15_t)0x8001 -}; - - const q15_t __ALIGNED(4) cos_factorsQ15_8192[8192] = { - (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, - (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, - (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, - (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, - (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, (q15_t)0x7fff, - (q15_t)0x7fff, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, - (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffe, - (q15_t)0x7ffe, (q15_t)0x7ffe, (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffd, - (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffd, (q15_t)0x7ffc, - (q15_t)0x7ffc, (q15_t)0x7ffc, (q15_t)0x7ffc, (q15_t)0x7ffc, (q15_t)0x7ffc, (q15_t)0x7ffc, (q15_t)0x7ffc, (q15_t)0x7ffc, - (q15_t)0x7ffc, (q15_t)0x7ffb, (q15_t)0x7ffb, (q15_t)0x7ffb, (q15_t)0x7ffb, (q15_t)0x7ffb, (q15_t)0x7ffb, (q15_t)0x7ffb, - (q15_t)0x7ffb, (q15_t)0x7ffb, (q15_t)0x7ffb, (q15_t)0x7ffa, (q15_t)0x7ffa, (q15_t)0x7ffa, (q15_t)0x7ffa, (q15_t)0x7ffa, - (q15_t)0x7ffa, (q15_t)0x7ffa, (q15_t)0x7ffa, (q15_t)0x7ffa, (q15_t)0x7ff9, (q15_t)0x7ff9, (q15_t)0x7ff9, (q15_t)0x7ff9, - (q15_t)0x7ff9, (q15_t)0x7ff9, (q15_t)0x7ff9, (q15_t)0x7ff9, (q15_t)0x7ff8, (q15_t)0x7ff8, (q15_t)0x7ff8, (q15_t)0x7ff8, - (q15_t)0x7ff8, (q15_t)0x7ff8, (q15_t)0x7ff8, (q15_t)0x7ff7, (q15_t)0x7ff7, (q15_t)0x7ff7, (q15_t)0x7ff7, (q15_t)0x7ff7, - (q15_t)0x7ff7, (q15_t)0x7ff7, (q15_t)0x7ff6, (q15_t)0x7ff6, (q15_t)0x7ff6, (q15_t)0x7ff6, (q15_t)0x7ff6, (q15_t)0x7ff6, - (q15_t)0x7ff6, (q15_t)0x7ff5, (q15_t)0x7ff5, (q15_t)0x7ff5, (q15_t)0x7ff5, (q15_t)0x7ff5, (q15_t)0x7ff5, (q15_t)0x7ff4, - (q15_t)0x7ff4, (q15_t)0x7ff4, (q15_t)0x7ff4, (q15_t)0x7ff4, (q15_t)0x7ff4, (q15_t)0x7ff3, (q15_t)0x7ff3, (q15_t)0x7ff3, - (q15_t)0x7ff3, (q15_t)0x7ff3, (q15_t)0x7ff3, (q15_t)0x7ff2, (q15_t)0x7ff2, (q15_t)0x7ff2, (q15_t)0x7ff2, (q15_t)0x7ff2, - (q15_t)0x7ff1, (q15_t)0x7ff1, (q15_t)0x7ff1, (q15_t)0x7ff1, (q15_t)0x7ff1, (q15_t)0x7ff1, (q15_t)0x7ff0, (q15_t)0x7ff0, - (q15_t)0x7ff0, (q15_t)0x7ff0, (q15_t)0x7ff0, (q15_t)0x7fef, (q15_t)0x7fef, (q15_t)0x7fef, (q15_t)0x7fef, (q15_t)0x7fef, - (q15_t)0x7fee, (q15_t)0x7fee, (q15_t)0x7fee, (q15_t)0x7fee, (q15_t)0x7fee, (q15_t)0x7fed, (q15_t)0x7fed, (q15_t)0x7fed, - (q15_t)0x7fed, (q15_t)0x7fed, (q15_t)0x7fec, (q15_t)0x7fec, (q15_t)0x7fec, (q15_t)0x7fec, (q15_t)0x7feb, (q15_t)0x7feb, - (q15_t)0x7feb, (q15_t)0x7feb, (q15_t)0x7feb, (q15_t)0x7fea, (q15_t)0x7fea, (q15_t)0x7fea, (q15_t)0x7fea, (q15_t)0x7fe9, - (q15_t)0x7fe9, (q15_t)0x7fe9, (q15_t)0x7fe9, (q15_t)0x7fe8, (q15_t)0x7fe8, (q15_t)0x7fe8, (q15_t)0x7fe8, (q15_t)0x7fe8, - (q15_t)0x7fe7, (q15_t)0x7fe7, (q15_t)0x7fe7, (q15_t)0x7fe7, (q15_t)0x7fe6, (q15_t)0x7fe6, (q15_t)0x7fe6, (q15_t)0x7fe6, - (q15_t)0x7fe5, (q15_t)0x7fe5, (q15_t)0x7fe5, (q15_t)0x7fe5, (q15_t)0x7fe4, (q15_t)0x7fe4, (q15_t)0x7fe4, (q15_t)0x7fe4, - (q15_t)0x7fe3, (q15_t)0x7fe3, (q15_t)0x7fe3, (q15_t)0x7fe2, (q15_t)0x7fe2, (q15_t)0x7fe2, (q15_t)0x7fe2, (q15_t)0x7fe1, - (q15_t)0x7fe1, (q15_t)0x7fe1, (q15_t)0x7fe1, (q15_t)0x7fe0, (q15_t)0x7fe0, (q15_t)0x7fe0, (q15_t)0x7fdf, (q15_t)0x7fdf, - (q15_t)0x7fdf, (q15_t)0x7fdf, (q15_t)0x7fde, (q15_t)0x7fde, (q15_t)0x7fde, (q15_t)0x7fde, (q15_t)0x7fdd, (q15_t)0x7fdd, - (q15_t)0x7fdd, (q15_t)0x7fdc, (q15_t)0x7fdc, (q15_t)0x7fdc, (q15_t)0x7fdb, (q15_t)0x7fdb, (q15_t)0x7fdb, (q15_t)0x7fdb, - (q15_t)0x7fda, (q15_t)0x7fda, (q15_t)0x7fda, (q15_t)0x7fd9, (q15_t)0x7fd9, (q15_t)0x7fd9, (q15_t)0x7fd8, (q15_t)0x7fd8, - (q15_t)0x7fd8, (q15_t)0x7fd8, (q15_t)0x7fd7, (q15_t)0x7fd7, (q15_t)0x7fd7, (q15_t)0x7fd6, (q15_t)0x7fd6, (q15_t)0x7fd6, - (q15_t)0x7fd5, (q15_t)0x7fd5, (q15_t)0x7fd5, (q15_t)0x7fd4, (q15_t)0x7fd4, (q15_t)0x7fd4, (q15_t)0x7fd3, (q15_t)0x7fd3, - (q15_t)0x7fd3, (q15_t)0x7fd2, (q15_t)0x7fd2, (q15_t)0x7fd2, (q15_t)0x7fd1, (q15_t)0x7fd1, (q15_t)0x7fd1, (q15_t)0x7fd0, - (q15_t)0x7fd0, (q15_t)0x7fd0, (q15_t)0x7fcf, (q15_t)0x7fcf, (q15_t)0x7fcf, (q15_t)0x7fce, (q15_t)0x7fce, (q15_t)0x7fce, - (q15_t)0x7fcd, (q15_t)0x7fcd, (q15_t)0x7fcd, (q15_t)0x7fcc, (q15_t)0x7fcc, (q15_t)0x7fcc, (q15_t)0x7fcb, (q15_t)0x7fcb, - (q15_t)0x7fcb, (q15_t)0x7fca, (q15_t)0x7fca, (q15_t)0x7fc9, (q15_t)0x7fc9, (q15_t)0x7fc9, (q15_t)0x7fc8, (q15_t)0x7fc8, - (q15_t)0x7fc8, (q15_t)0x7fc7, (q15_t)0x7fc7, (q15_t)0x7fc7, (q15_t)0x7fc6, (q15_t)0x7fc6, (q15_t)0x7fc5, (q15_t)0x7fc5, - (q15_t)0x7fc5, (q15_t)0x7fc4, (q15_t)0x7fc4, (q15_t)0x7fc4, (q15_t)0x7fc3, (q15_t)0x7fc3, (q15_t)0x7fc2, (q15_t)0x7fc2, - (q15_t)0x7fc2, (q15_t)0x7fc1, (q15_t)0x7fc1, (q15_t)0x7fc0, (q15_t)0x7fc0, (q15_t)0x7fc0, (q15_t)0x7fbf, (q15_t)0x7fbf, - (q15_t)0x7fbf, (q15_t)0x7fbe, (q15_t)0x7fbe, (q15_t)0x7fbd, (q15_t)0x7fbd, (q15_t)0x7fbd, (q15_t)0x7fbc, (q15_t)0x7fbc, - (q15_t)0x7fbb, (q15_t)0x7fbb, (q15_t)0x7fbb, (q15_t)0x7fba, (q15_t)0x7fba, (q15_t)0x7fb9, (q15_t)0x7fb9, (q15_t)0x7fb8, - (q15_t)0x7fb8, (q15_t)0x7fb8, (q15_t)0x7fb7, (q15_t)0x7fb7, (q15_t)0x7fb6, (q15_t)0x7fb6, (q15_t)0x7fb6, (q15_t)0x7fb5, - (q15_t)0x7fb5, (q15_t)0x7fb4, (q15_t)0x7fb4, (q15_t)0x7fb3, (q15_t)0x7fb3, (q15_t)0x7fb3, (q15_t)0x7fb2, (q15_t)0x7fb2, - (q15_t)0x7fb1, (q15_t)0x7fb1, (q15_t)0x7fb0, (q15_t)0x7fb0, (q15_t)0x7faf, (q15_t)0x7faf, (q15_t)0x7faf, (q15_t)0x7fae, - (q15_t)0x7fae, (q15_t)0x7fad, (q15_t)0x7fad, (q15_t)0x7fac, (q15_t)0x7fac, (q15_t)0x7fac, (q15_t)0x7fab, (q15_t)0x7fab, - (q15_t)0x7faa, (q15_t)0x7faa, (q15_t)0x7fa9, (q15_t)0x7fa9, (q15_t)0x7fa8, (q15_t)0x7fa8, (q15_t)0x7fa7, (q15_t)0x7fa7, - (q15_t)0x7fa6, (q15_t)0x7fa6, (q15_t)0x7fa6, (q15_t)0x7fa5, (q15_t)0x7fa5, (q15_t)0x7fa4, (q15_t)0x7fa4, (q15_t)0x7fa3, - (q15_t)0x7fa3, (q15_t)0x7fa2, (q15_t)0x7fa2, (q15_t)0x7fa1, (q15_t)0x7fa1, (q15_t)0x7fa0, (q15_t)0x7fa0, (q15_t)0x7f9f, - (q15_t)0x7f9f, (q15_t)0x7f9e, (q15_t)0x7f9e, (q15_t)0x7f9d, (q15_t)0x7f9d, (q15_t)0x7f9c, (q15_t)0x7f9c, (q15_t)0x7f9c, - (q15_t)0x7f9b, (q15_t)0x7f9b, (q15_t)0x7f9a, (q15_t)0x7f9a, (q15_t)0x7f99, (q15_t)0x7f99, (q15_t)0x7f98, (q15_t)0x7f98, - (q15_t)0x7f97, (q15_t)0x7f97, (q15_t)0x7f96, (q15_t)0x7f96, (q15_t)0x7f95, (q15_t)0x7f95, (q15_t)0x7f94, (q15_t)0x7f94, - (q15_t)0x7f93, (q15_t)0x7f92, (q15_t)0x7f92, (q15_t)0x7f91, (q15_t)0x7f91, (q15_t)0x7f90, (q15_t)0x7f90, (q15_t)0x7f8f, - (q15_t)0x7f8f, (q15_t)0x7f8e, (q15_t)0x7f8e, (q15_t)0x7f8d, (q15_t)0x7f8d, (q15_t)0x7f8c, (q15_t)0x7f8c, (q15_t)0x7f8b, - (q15_t)0x7f8b, (q15_t)0x7f8a, (q15_t)0x7f8a, (q15_t)0x7f89, (q15_t)0x7f89, (q15_t)0x7f88, (q15_t)0x7f87, (q15_t)0x7f87, - (q15_t)0x7f86, (q15_t)0x7f86, (q15_t)0x7f85, (q15_t)0x7f85, (q15_t)0x7f84, (q15_t)0x7f84, (q15_t)0x7f83, (q15_t)0x7f83, - (q15_t)0x7f82, (q15_t)0x7f81, (q15_t)0x7f81, (q15_t)0x7f80, (q15_t)0x7f80, (q15_t)0x7f7f, (q15_t)0x7f7f, (q15_t)0x7f7e, - (q15_t)0x7f7e, (q15_t)0x7f7d, (q15_t)0x7f7c, (q15_t)0x7f7c, (q15_t)0x7f7b, (q15_t)0x7f7b, (q15_t)0x7f7a, (q15_t)0x7f7a, - (q15_t)0x7f79, (q15_t)0x7f79, (q15_t)0x7f78, (q15_t)0x7f77, (q15_t)0x7f77, (q15_t)0x7f76, (q15_t)0x7f76, (q15_t)0x7f75, - (q15_t)0x7f75, (q15_t)0x7f74, (q15_t)0x7f73, (q15_t)0x7f73, (q15_t)0x7f72, (q15_t)0x7f72, (q15_t)0x7f71, (q15_t)0x7f70, - (q15_t)0x7f70, (q15_t)0x7f6f, (q15_t)0x7f6f, (q15_t)0x7f6e, (q15_t)0x7f6d, (q15_t)0x7f6d, (q15_t)0x7f6c, (q15_t)0x7f6c, - (q15_t)0x7f6b, (q15_t)0x7f6b, (q15_t)0x7f6a, (q15_t)0x7f69, (q15_t)0x7f69, (q15_t)0x7f68, (q15_t)0x7f68, (q15_t)0x7f67, - (q15_t)0x7f66, (q15_t)0x7f66, (q15_t)0x7f65, (q15_t)0x7f64, (q15_t)0x7f64, (q15_t)0x7f63, (q15_t)0x7f63, (q15_t)0x7f62, - (q15_t)0x7f61, (q15_t)0x7f61, (q15_t)0x7f60, (q15_t)0x7f60, (q15_t)0x7f5f, (q15_t)0x7f5e, (q15_t)0x7f5e, (q15_t)0x7f5d, - (q15_t)0x7f5c, (q15_t)0x7f5c, (q15_t)0x7f5b, (q15_t)0x7f5b, (q15_t)0x7f5a, (q15_t)0x7f59, (q15_t)0x7f59, (q15_t)0x7f58, - (q15_t)0x7f57, (q15_t)0x7f57, (q15_t)0x7f56, (q15_t)0x7f55, (q15_t)0x7f55, (q15_t)0x7f54, (q15_t)0x7f54, (q15_t)0x7f53, - (q15_t)0x7f52, (q15_t)0x7f52, (q15_t)0x7f51, (q15_t)0x7f50, (q15_t)0x7f50, (q15_t)0x7f4f, (q15_t)0x7f4e, (q15_t)0x7f4e, - (q15_t)0x7f4d, (q15_t)0x7f4c, (q15_t)0x7f4c, (q15_t)0x7f4b, (q15_t)0x7f4a, (q15_t)0x7f4a, (q15_t)0x7f49, (q15_t)0x7f48, - (q15_t)0x7f48, (q15_t)0x7f47, (q15_t)0x7f46, (q15_t)0x7f46, (q15_t)0x7f45, (q15_t)0x7f44, (q15_t)0x7f44, (q15_t)0x7f43, - (q15_t)0x7f42, (q15_t)0x7f42, (q15_t)0x7f41, (q15_t)0x7f40, (q15_t)0x7f40, (q15_t)0x7f3f, (q15_t)0x7f3e, (q15_t)0x7f3e, - (q15_t)0x7f3d, (q15_t)0x7f3c, (q15_t)0x7f3c, (q15_t)0x7f3b, (q15_t)0x7f3a, (q15_t)0x7f3a, (q15_t)0x7f39, (q15_t)0x7f38, - (q15_t)0x7f37, (q15_t)0x7f37, (q15_t)0x7f36, (q15_t)0x7f35, (q15_t)0x7f35, (q15_t)0x7f34, (q15_t)0x7f33, (q15_t)0x7f33, - (q15_t)0x7f32, (q15_t)0x7f31, (q15_t)0x7f31, (q15_t)0x7f30, (q15_t)0x7f2f, (q15_t)0x7f2e, (q15_t)0x7f2e, (q15_t)0x7f2d, - (q15_t)0x7f2c, (q15_t)0x7f2c, (q15_t)0x7f2b, (q15_t)0x7f2a, (q15_t)0x7f29, (q15_t)0x7f29, (q15_t)0x7f28, (q15_t)0x7f27, - (q15_t)0x7f27, (q15_t)0x7f26, (q15_t)0x7f25, (q15_t)0x7f24, (q15_t)0x7f24, (q15_t)0x7f23, (q15_t)0x7f22, (q15_t)0x7f21, - (q15_t)0x7f21, (q15_t)0x7f20, (q15_t)0x7f1f, (q15_t)0x7f1f, (q15_t)0x7f1e, (q15_t)0x7f1d, (q15_t)0x7f1c, (q15_t)0x7f1c, - (q15_t)0x7f1b, (q15_t)0x7f1a, (q15_t)0x7f19, (q15_t)0x7f19, (q15_t)0x7f18, (q15_t)0x7f17, (q15_t)0x7f16, (q15_t)0x7f16, - (q15_t)0x7f15, (q15_t)0x7f14, (q15_t)0x7f13, (q15_t)0x7f13, (q15_t)0x7f12, (q15_t)0x7f11, (q15_t)0x7f10, (q15_t)0x7f10, - (q15_t)0x7f0f, (q15_t)0x7f0e, (q15_t)0x7f0d, (q15_t)0x7f0d, (q15_t)0x7f0c, (q15_t)0x7f0b, (q15_t)0x7f0a, (q15_t)0x7f09, - (q15_t)0x7f09, (q15_t)0x7f08, (q15_t)0x7f07, (q15_t)0x7f06, (q15_t)0x7f06, (q15_t)0x7f05, (q15_t)0x7f04, (q15_t)0x7f03, - (q15_t)0x7f02, (q15_t)0x7f02, (q15_t)0x7f01, (q15_t)0x7f00, (q15_t)0x7eff, (q15_t)0x7eff, (q15_t)0x7efe, (q15_t)0x7efd, - (q15_t)0x7efc, (q15_t)0x7efb, (q15_t)0x7efb, (q15_t)0x7efa, (q15_t)0x7ef9, (q15_t)0x7ef8, (q15_t)0x7ef7, (q15_t)0x7ef7, - (q15_t)0x7ef6, (q15_t)0x7ef5, (q15_t)0x7ef4, (q15_t)0x7ef3, (q15_t)0x7ef3, (q15_t)0x7ef2, (q15_t)0x7ef1, (q15_t)0x7ef0, - (q15_t)0x7eef, (q15_t)0x7eef, (q15_t)0x7eee, (q15_t)0x7eed, (q15_t)0x7eec, (q15_t)0x7eeb, (q15_t)0x7eeb, (q15_t)0x7eea, - (q15_t)0x7ee9, (q15_t)0x7ee8, (q15_t)0x7ee7, (q15_t)0x7ee6, (q15_t)0x7ee6, (q15_t)0x7ee5, (q15_t)0x7ee4, (q15_t)0x7ee3, - (q15_t)0x7ee2, (q15_t)0x7ee2, (q15_t)0x7ee1, (q15_t)0x7ee0, (q15_t)0x7edf, (q15_t)0x7ede, (q15_t)0x7edd, (q15_t)0x7edd, - (q15_t)0x7edc, (q15_t)0x7edb, (q15_t)0x7eda, (q15_t)0x7ed9, (q15_t)0x7ed8, (q15_t)0x7ed8, (q15_t)0x7ed7, (q15_t)0x7ed6, - (q15_t)0x7ed5, (q15_t)0x7ed4, (q15_t)0x7ed3, (q15_t)0x7ed2, (q15_t)0x7ed2, (q15_t)0x7ed1, (q15_t)0x7ed0, (q15_t)0x7ecf, - (q15_t)0x7ece, (q15_t)0x7ecd, (q15_t)0x7ecc, (q15_t)0x7ecc, (q15_t)0x7ecb, (q15_t)0x7eca, (q15_t)0x7ec9, (q15_t)0x7ec8, - (q15_t)0x7ec7, (q15_t)0x7ec6, (q15_t)0x7ec6, (q15_t)0x7ec5, (q15_t)0x7ec4, (q15_t)0x7ec3, (q15_t)0x7ec2, (q15_t)0x7ec1, - (q15_t)0x7ec0, (q15_t)0x7ebf, (q15_t)0x7ebf, (q15_t)0x7ebe, (q15_t)0x7ebd, (q15_t)0x7ebc, (q15_t)0x7ebb, (q15_t)0x7eba, - (q15_t)0x7eb9, (q15_t)0x7eb8, (q15_t)0x7eb8, (q15_t)0x7eb7, (q15_t)0x7eb6, (q15_t)0x7eb5, (q15_t)0x7eb4, (q15_t)0x7eb3, - (q15_t)0x7eb2, (q15_t)0x7eb1, (q15_t)0x7eb0, (q15_t)0x7eaf, (q15_t)0x7eaf, (q15_t)0x7eae, (q15_t)0x7ead, (q15_t)0x7eac, - (q15_t)0x7eab, (q15_t)0x7eaa, (q15_t)0x7ea9, (q15_t)0x7ea8, (q15_t)0x7ea7, (q15_t)0x7ea6, (q15_t)0x7ea6, (q15_t)0x7ea5, - (q15_t)0x7ea4, (q15_t)0x7ea3, (q15_t)0x7ea2, (q15_t)0x7ea1, (q15_t)0x7ea0, (q15_t)0x7e9f, (q15_t)0x7e9e, (q15_t)0x7e9d, - (q15_t)0x7e9c, (q15_t)0x7e9b, (q15_t)0x7e9b, (q15_t)0x7e9a, (q15_t)0x7e99, (q15_t)0x7e98, (q15_t)0x7e97, (q15_t)0x7e96, - (q15_t)0x7e95, (q15_t)0x7e94, (q15_t)0x7e93, (q15_t)0x7e92, (q15_t)0x7e91, (q15_t)0x7e90, (q15_t)0x7e8f, (q15_t)0x7e8e, - (q15_t)0x7e8d, (q15_t)0x7e8d, (q15_t)0x7e8c, (q15_t)0x7e8b, (q15_t)0x7e8a, (q15_t)0x7e89, (q15_t)0x7e88, (q15_t)0x7e87, - (q15_t)0x7e86, (q15_t)0x7e85, (q15_t)0x7e84, (q15_t)0x7e83, (q15_t)0x7e82, (q15_t)0x7e81, (q15_t)0x7e80, (q15_t)0x7e7f, - (q15_t)0x7e7e, (q15_t)0x7e7d, (q15_t)0x7e7c, (q15_t)0x7e7b, (q15_t)0x7e7a, (q15_t)0x7e79, (q15_t)0x7e78, (q15_t)0x7e77, - (q15_t)0x7e77, (q15_t)0x7e76, (q15_t)0x7e75, (q15_t)0x7e74, (q15_t)0x7e73, (q15_t)0x7e72, (q15_t)0x7e71, (q15_t)0x7e70, - (q15_t)0x7e6f, (q15_t)0x7e6e, (q15_t)0x7e6d, (q15_t)0x7e6c, (q15_t)0x7e6b, (q15_t)0x7e6a, (q15_t)0x7e69, (q15_t)0x7e68, - (q15_t)0x7e67, (q15_t)0x7e66, (q15_t)0x7e65, (q15_t)0x7e64, (q15_t)0x7e63, (q15_t)0x7e62, (q15_t)0x7e61, (q15_t)0x7e60, - (q15_t)0x7e5f, (q15_t)0x7e5e, (q15_t)0x7e5d, (q15_t)0x7e5c, (q15_t)0x7e5b, (q15_t)0x7e5a, (q15_t)0x7e59, (q15_t)0x7e58, - (q15_t)0x7e57, (q15_t)0x7e56, (q15_t)0x7e55, (q15_t)0x7e54, (q15_t)0x7e53, (q15_t)0x7e52, (q15_t)0x7e51, (q15_t)0x7e50, - (q15_t)0x7e4f, (q15_t)0x7e4e, (q15_t)0x7e4d, (q15_t)0x7e4c, (q15_t)0x7e4b, (q15_t)0x7e4a, (q15_t)0x7e49, (q15_t)0x7e48, - (q15_t)0x7e47, (q15_t)0x7e46, (q15_t)0x7e45, (q15_t)0x7e43, (q15_t)0x7e42, (q15_t)0x7e41, (q15_t)0x7e40, (q15_t)0x7e3f, - (q15_t)0x7e3e, (q15_t)0x7e3d, (q15_t)0x7e3c, (q15_t)0x7e3b, (q15_t)0x7e3a, (q15_t)0x7e39, (q15_t)0x7e38, (q15_t)0x7e37, - (q15_t)0x7e36, (q15_t)0x7e35, (q15_t)0x7e34, (q15_t)0x7e33, (q15_t)0x7e32, (q15_t)0x7e31, (q15_t)0x7e30, (q15_t)0x7e2f, - (q15_t)0x7e2e, (q15_t)0x7e2d, (q15_t)0x7e2b, (q15_t)0x7e2a, (q15_t)0x7e29, (q15_t)0x7e28, (q15_t)0x7e27, (q15_t)0x7e26, - (q15_t)0x7e25, (q15_t)0x7e24, (q15_t)0x7e23, (q15_t)0x7e22, (q15_t)0x7e21, (q15_t)0x7e20, (q15_t)0x7e1f, (q15_t)0x7e1e, - (q15_t)0x7e1d, (q15_t)0x7e1b, (q15_t)0x7e1a, (q15_t)0x7e19, (q15_t)0x7e18, (q15_t)0x7e17, (q15_t)0x7e16, (q15_t)0x7e15, - (q15_t)0x7e14, (q15_t)0x7e13, (q15_t)0x7e12, (q15_t)0x7e11, (q15_t)0x7e10, (q15_t)0x7e0e, (q15_t)0x7e0d, (q15_t)0x7e0c, - (q15_t)0x7e0b, (q15_t)0x7e0a, (q15_t)0x7e09, (q15_t)0x7e08, (q15_t)0x7e07, (q15_t)0x7e06, (q15_t)0x7e05, (q15_t)0x7e04, - (q15_t)0x7e02, (q15_t)0x7e01, (q15_t)0x7e00, (q15_t)0x7dff, (q15_t)0x7dfe, (q15_t)0x7dfd, (q15_t)0x7dfc, (q15_t)0x7dfb, - (q15_t)0x7dfa, (q15_t)0x7df8, (q15_t)0x7df7, (q15_t)0x7df6, (q15_t)0x7df5, (q15_t)0x7df4, (q15_t)0x7df3, (q15_t)0x7df2, - (q15_t)0x7df1, (q15_t)0x7def, (q15_t)0x7dee, (q15_t)0x7ded, (q15_t)0x7dec, (q15_t)0x7deb, (q15_t)0x7dea, (q15_t)0x7de9, - (q15_t)0x7de8, (q15_t)0x7de6, (q15_t)0x7de5, (q15_t)0x7de4, (q15_t)0x7de3, (q15_t)0x7de2, (q15_t)0x7de1, (q15_t)0x7de0, - (q15_t)0x7dde, (q15_t)0x7ddd, (q15_t)0x7ddc, (q15_t)0x7ddb, (q15_t)0x7dda, (q15_t)0x7dd9, (q15_t)0x7dd8, (q15_t)0x7dd6, - (q15_t)0x7dd5, (q15_t)0x7dd4, (q15_t)0x7dd3, (q15_t)0x7dd2, (q15_t)0x7dd1, (q15_t)0x7dd0, (q15_t)0x7dce, (q15_t)0x7dcd, - (q15_t)0x7dcc, (q15_t)0x7dcb, (q15_t)0x7dca, (q15_t)0x7dc9, (q15_t)0x7dc7, (q15_t)0x7dc6, (q15_t)0x7dc5, (q15_t)0x7dc4, - (q15_t)0x7dc3, (q15_t)0x7dc2, (q15_t)0x7dc0, (q15_t)0x7dbf, (q15_t)0x7dbe, (q15_t)0x7dbd, (q15_t)0x7dbc, (q15_t)0x7dbb, - (q15_t)0x7db9, (q15_t)0x7db8, (q15_t)0x7db7, (q15_t)0x7db6, (q15_t)0x7db5, (q15_t)0x7db3, (q15_t)0x7db2, (q15_t)0x7db1, - (q15_t)0x7db0, (q15_t)0x7daf, (q15_t)0x7dae, (q15_t)0x7dac, (q15_t)0x7dab, (q15_t)0x7daa, (q15_t)0x7da9, (q15_t)0x7da8, - (q15_t)0x7da6, (q15_t)0x7da5, (q15_t)0x7da4, (q15_t)0x7da3, (q15_t)0x7da2, (q15_t)0x7da0, (q15_t)0x7d9f, (q15_t)0x7d9e, - (q15_t)0x7d9d, (q15_t)0x7d9c, (q15_t)0x7d9a, (q15_t)0x7d99, (q15_t)0x7d98, (q15_t)0x7d97, (q15_t)0x7d95, (q15_t)0x7d94, - (q15_t)0x7d93, (q15_t)0x7d92, (q15_t)0x7d91, (q15_t)0x7d8f, (q15_t)0x7d8e, (q15_t)0x7d8d, (q15_t)0x7d8c, (q15_t)0x7d8a, - (q15_t)0x7d89, (q15_t)0x7d88, (q15_t)0x7d87, (q15_t)0x7d86, (q15_t)0x7d84, (q15_t)0x7d83, (q15_t)0x7d82, (q15_t)0x7d81, - (q15_t)0x7d7f, (q15_t)0x7d7e, (q15_t)0x7d7d, (q15_t)0x7d7c, (q15_t)0x7d7a, (q15_t)0x7d79, (q15_t)0x7d78, (q15_t)0x7d77, - (q15_t)0x7d75, (q15_t)0x7d74, (q15_t)0x7d73, (q15_t)0x7d72, (q15_t)0x7d70, (q15_t)0x7d6f, (q15_t)0x7d6e, (q15_t)0x7d6d, - (q15_t)0x7d6b, (q15_t)0x7d6a, (q15_t)0x7d69, (q15_t)0x7d68, (q15_t)0x7d66, (q15_t)0x7d65, (q15_t)0x7d64, (q15_t)0x7d63, - (q15_t)0x7d61, (q15_t)0x7d60, (q15_t)0x7d5f, (q15_t)0x7d5e, (q15_t)0x7d5c, (q15_t)0x7d5b, (q15_t)0x7d5a, (q15_t)0x7d59, - (q15_t)0x7d57, (q15_t)0x7d56, (q15_t)0x7d55, (q15_t)0x7d53, (q15_t)0x7d52, (q15_t)0x7d51, (q15_t)0x7d50, (q15_t)0x7d4e, - (q15_t)0x7d4d, (q15_t)0x7d4c, (q15_t)0x7d4a, (q15_t)0x7d49, (q15_t)0x7d48, (q15_t)0x7d47, (q15_t)0x7d45, (q15_t)0x7d44, - (q15_t)0x7d43, (q15_t)0x7d41, (q15_t)0x7d40, (q15_t)0x7d3f, (q15_t)0x7d3e, (q15_t)0x7d3c, (q15_t)0x7d3b, (q15_t)0x7d3a, - (q15_t)0x7d38, (q15_t)0x7d37, (q15_t)0x7d36, (q15_t)0x7d34, (q15_t)0x7d33, (q15_t)0x7d32, (q15_t)0x7d31, (q15_t)0x7d2f, - (q15_t)0x7d2e, (q15_t)0x7d2d, (q15_t)0x7d2b, (q15_t)0x7d2a, (q15_t)0x7d29, (q15_t)0x7d27, (q15_t)0x7d26, (q15_t)0x7d25, - (q15_t)0x7d23, (q15_t)0x7d22, (q15_t)0x7d21, (q15_t)0x7d1f, (q15_t)0x7d1e, (q15_t)0x7d1d, (q15_t)0x7d1b, (q15_t)0x7d1a, - (q15_t)0x7d19, (q15_t)0x7d17, (q15_t)0x7d16, (q15_t)0x7d15, (q15_t)0x7d13, (q15_t)0x7d12, (q15_t)0x7d11, (q15_t)0x7d0f, - (q15_t)0x7d0e, (q15_t)0x7d0d, (q15_t)0x7d0b, (q15_t)0x7d0a, (q15_t)0x7d09, (q15_t)0x7d07, (q15_t)0x7d06, (q15_t)0x7d05, - (q15_t)0x7d03, (q15_t)0x7d02, (q15_t)0x7d01, (q15_t)0x7cff, (q15_t)0x7cfe, (q15_t)0x7cfd, (q15_t)0x7cfb, (q15_t)0x7cfa, - (q15_t)0x7cf9, (q15_t)0x7cf7, (q15_t)0x7cf6, (q15_t)0x7cf4, (q15_t)0x7cf3, (q15_t)0x7cf2, (q15_t)0x7cf0, (q15_t)0x7cef, - (q15_t)0x7cee, (q15_t)0x7cec, (q15_t)0x7ceb, (q15_t)0x7ce9, (q15_t)0x7ce8, (q15_t)0x7ce7, (q15_t)0x7ce5, (q15_t)0x7ce4, - (q15_t)0x7ce3, (q15_t)0x7ce1, (q15_t)0x7ce0, (q15_t)0x7cde, (q15_t)0x7cdd, (q15_t)0x7cdc, (q15_t)0x7cda, (q15_t)0x7cd9, - (q15_t)0x7cd8, (q15_t)0x7cd6, (q15_t)0x7cd5, (q15_t)0x7cd3, (q15_t)0x7cd2, (q15_t)0x7cd1, (q15_t)0x7ccf, (q15_t)0x7cce, - (q15_t)0x7ccc, (q15_t)0x7ccb, (q15_t)0x7cca, (q15_t)0x7cc8, (q15_t)0x7cc7, (q15_t)0x7cc5, (q15_t)0x7cc4, (q15_t)0x7cc3, - (q15_t)0x7cc1, (q15_t)0x7cc0, (q15_t)0x7cbe, (q15_t)0x7cbd, (q15_t)0x7cbc, (q15_t)0x7cba, (q15_t)0x7cb9, (q15_t)0x7cb7, - (q15_t)0x7cb6, (q15_t)0x7cb5, (q15_t)0x7cb3, (q15_t)0x7cb2, (q15_t)0x7cb0, (q15_t)0x7caf, (q15_t)0x7cad, (q15_t)0x7cac, - (q15_t)0x7cab, (q15_t)0x7ca9, (q15_t)0x7ca8, (q15_t)0x7ca6, (q15_t)0x7ca5, (q15_t)0x7ca3, (q15_t)0x7ca2, (q15_t)0x7ca1, - (q15_t)0x7c9f, (q15_t)0x7c9e, (q15_t)0x7c9c, (q15_t)0x7c9b, (q15_t)0x7c99, (q15_t)0x7c98, (q15_t)0x7c97, (q15_t)0x7c95, - (q15_t)0x7c94, (q15_t)0x7c92, (q15_t)0x7c91, (q15_t)0x7c8f, (q15_t)0x7c8e, (q15_t)0x7c8c, (q15_t)0x7c8b, (q15_t)0x7c8a, - (q15_t)0x7c88, (q15_t)0x7c87, (q15_t)0x7c85, (q15_t)0x7c84, (q15_t)0x7c82, (q15_t)0x7c81, (q15_t)0x7c7f, (q15_t)0x7c7e, - (q15_t)0x7c7c, (q15_t)0x7c7b, (q15_t)0x7c79, (q15_t)0x7c78, (q15_t)0x7c77, (q15_t)0x7c75, (q15_t)0x7c74, (q15_t)0x7c72, - (q15_t)0x7c71, (q15_t)0x7c6f, (q15_t)0x7c6e, (q15_t)0x7c6c, (q15_t)0x7c6b, (q15_t)0x7c69, (q15_t)0x7c68, (q15_t)0x7c66, - (q15_t)0x7c65, (q15_t)0x7c63, (q15_t)0x7c62, (q15_t)0x7c60, (q15_t)0x7c5f, (q15_t)0x7c5d, (q15_t)0x7c5c, (q15_t)0x7c5a, - (q15_t)0x7c59, (q15_t)0x7c58, (q15_t)0x7c56, (q15_t)0x7c55, (q15_t)0x7c53, (q15_t)0x7c52, (q15_t)0x7c50, (q15_t)0x7c4f, - (q15_t)0x7c4d, (q15_t)0x7c4c, (q15_t)0x7c4a, (q15_t)0x7c49, (q15_t)0x7c47, (q15_t)0x7c46, (q15_t)0x7c44, (q15_t)0x7c43, - (q15_t)0x7c41, (q15_t)0x7c3f, (q15_t)0x7c3e, (q15_t)0x7c3c, (q15_t)0x7c3b, (q15_t)0x7c39, (q15_t)0x7c38, (q15_t)0x7c36, - (q15_t)0x7c35, (q15_t)0x7c33, (q15_t)0x7c32, (q15_t)0x7c30, (q15_t)0x7c2f, (q15_t)0x7c2d, (q15_t)0x7c2c, (q15_t)0x7c2a, - (q15_t)0x7c29, (q15_t)0x7c27, (q15_t)0x7c26, (q15_t)0x7c24, (q15_t)0x7c23, (q15_t)0x7c21, (q15_t)0x7c20, (q15_t)0x7c1e, - (q15_t)0x7c1c, (q15_t)0x7c1b, (q15_t)0x7c19, (q15_t)0x7c18, (q15_t)0x7c16, (q15_t)0x7c15, (q15_t)0x7c13, (q15_t)0x7c12, - (q15_t)0x7c10, (q15_t)0x7c0f, (q15_t)0x7c0d, (q15_t)0x7c0b, (q15_t)0x7c0a, (q15_t)0x7c08, (q15_t)0x7c07, (q15_t)0x7c05, - (q15_t)0x7c04, (q15_t)0x7c02, (q15_t)0x7c01, (q15_t)0x7bff, (q15_t)0x7bfd, (q15_t)0x7bfc, (q15_t)0x7bfa, (q15_t)0x7bf9, - (q15_t)0x7bf7, (q15_t)0x7bf6, (q15_t)0x7bf4, (q15_t)0x7bf3, (q15_t)0x7bf1, (q15_t)0x7bef, (q15_t)0x7bee, (q15_t)0x7bec, - (q15_t)0x7beb, (q15_t)0x7be9, (q15_t)0x7be8, (q15_t)0x7be6, (q15_t)0x7be4, (q15_t)0x7be3, (q15_t)0x7be1, (q15_t)0x7be0, - (q15_t)0x7bde, (q15_t)0x7bdc, (q15_t)0x7bdb, (q15_t)0x7bd9, (q15_t)0x7bd8, (q15_t)0x7bd6, (q15_t)0x7bd5, (q15_t)0x7bd3, - (q15_t)0x7bd1, (q15_t)0x7bd0, (q15_t)0x7bce, (q15_t)0x7bcd, (q15_t)0x7bcb, (q15_t)0x7bc9, (q15_t)0x7bc8, (q15_t)0x7bc6, - (q15_t)0x7bc5, (q15_t)0x7bc3, (q15_t)0x7bc1, (q15_t)0x7bc0, (q15_t)0x7bbe, (q15_t)0x7bbd, (q15_t)0x7bbb, (q15_t)0x7bb9, - (q15_t)0x7bb8, (q15_t)0x7bb6, (q15_t)0x7bb5, (q15_t)0x7bb3, (q15_t)0x7bb1, (q15_t)0x7bb0, (q15_t)0x7bae, (q15_t)0x7bac, - (q15_t)0x7bab, (q15_t)0x7ba9, (q15_t)0x7ba8, (q15_t)0x7ba6, (q15_t)0x7ba4, (q15_t)0x7ba3, (q15_t)0x7ba1, (q15_t)0x7b9f, - (q15_t)0x7b9e, (q15_t)0x7b9c, (q15_t)0x7b9b, (q15_t)0x7b99, (q15_t)0x7b97, (q15_t)0x7b96, (q15_t)0x7b94, (q15_t)0x7b92, - (q15_t)0x7b91, (q15_t)0x7b8f, (q15_t)0x7b8d, (q15_t)0x7b8c, (q15_t)0x7b8a, (q15_t)0x7b89, (q15_t)0x7b87, (q15_t)0x7b85, - (q15_t)0x7b84, (q15_t)0x7b82, (q15_t)0x7b80, (q15_t)0x7b7f, (q15_t)0x7b7d, (q15_t)0x7b7b, (q15_t)0x7b7a, (q15_t)0x7b78, - (q15_t)0x7b76, (q15_t)0x7b75, (q15_t)0x7b73, (q15_t)0x7b71, (q15_t)0x7b70, (q15_t)0x7b6e, (q15_t)0x7b6c, (q15_t)0x7b6b, - (q15_t)0x7b69, (q15_t)0x7b67, (q15_t)0x7b66, (q15_t)0x7b64, (q15_t)0x7b62, (q15_t)0x7b61, (q15_t)0x7b5f, (q15_t)0x7b5d, - (q15_t)0x7b5c, (q15_t)0x7b5a, (q15_t)0x7b58, (q15_t)0x7b57, (q15_t)0x7b55, (q15_t)0x7b53, (q15_t)0x7b52, (q15_t)0x7b50, - (q15_t)0x7b4e, (q15_t)0x7b4d, (q15_t)0x7b4b, (q15_t)0x7b49, (q15_t)0x7b47, (q15_t)0x7b46, (q15_t)0x7b44, (q15_t)0x7b42, - (q15_t)0x7b41, (q15_t)0x7b3f, (q15_t)0x7b3d, (q15_t)0x7b3c, (q15_t)0x7b3a, (q15_t)0x7b38, (q15_t)0x7b37, (q15_t)0x7b35, - (q15_t)0x7b33, (q15_t)0x7b31, (q15_t)0x7b30, (q15_t)0x7b2e, (q15_t)0x7b2c, (q15_t)0x7b2b, (q15_t)0x7b29, (q15_t)0x7b27, - (q15_t)0x7b25, (q15_t)0x7b24, (q15_t)0x7b22, (q15_t)0x7b20, (q15_t)0x7b1f, (q15_t)0x7b1d, (q15_t)0x7b1b, (q15_t)0x7b19, - (q15_t)0x7b18, (q15_t)0x7b16, (q15_t)0x7b14, (q15_t)0x7b13, (q15_t)0x7b11, (q15_t)0x7b0f, (q15_t)0x7b0d, (q15_t)0x7b0c, - (q15_t)0x7b0a, (q15_t)0x7b08, (q15_t)0x7b06, (q15_t)0x7b05, (q15_t)0x7b03, (q15_t)0x7b01, (q15_t)0x7aff, (q15_t)0x7afe, - (q15_t)0x7afc, (q15_t)0x7afa, (q15_t)0x7af8, (q15_t)0x7af7, (q15_t)0x7af5, (q15_t)0x7af3, (q15_t)0x7af2, (q15_t)0x7af0, - (q15_t)0x7aee, (q15_t)0x7aec, (q15_t)0x7aeb, (q15_t)0x7ae9, (q15_t)0x7ae7, (q15_t)0x7ae5, (q15_t)0x7ae3, (q15_t)0x7ae2, - (q15_t)0x7ae0, (q15_t)0x7ade, (q15_t)0x7adc, (q15_t)0x7adb, (q15_t)0x7ad9, (q15_t)0x7ad7, (q15_t)0x7ad5, (q15_t)0x7ad4, - (q15_t)0x7ad2, (q15_t)0x7ad0, (q15_t)0x7ace, (q15_t)0x7acd, (q15_t)0x7acb, (q15_t)0x7ac9, (q15_t)0x7ac7, (q15_t)0x7ac5, - (q15_t)0x7ac4, (q15_t)0x7ac2, (q15_t)0x7ac0, (q15_t)0x7abe, (q15_t)0x7abd, (q15_t)0x7abb, (q15_t)0x7ab9, (q15_t)0x7ab7, - (q15_t)0x7ab5, (q15_t)0x7ab4, (q15_t)0x7ab2, (q15_t)0x7ab0, (q15_t)0x7aae, (q15_t)0x7aac, (q15_t)0x7aab, (q15_t)0x7aa9, - (q15_t)0x7aa7, (q15_t)0x7aa5, (q15_t)0x7aa3, (q15_t)0x7aa2, (q15_t)0x7aa0, (q15_t)0x7a9e, (q15_t)0x7a9c, (q15_t)0x7a9a, - (q15_t)0x7a99, (q15_t)0x7a97, (q15_t)0x7a95, (q15_t)0x7a93, (q15_t)0x7a91, (q15_t)0x7a90, (q15_t)0x7a8e, (q15_t)0x7a8c, - (q15_t)0x7a8a, (q15_t)0x7a88, (q15_t)0x7a87, (q15_t)0x7a85, (q15_t)0x7a83, (q15_t)0x7a81, (q15_t)0x7a7f, (q15_t)0x7a7d, - (q15_t)0x7a7c, (q15_t)0x7a7a, (q15_t)0x7a78, (q15_t)0x7a76, (q15_t)0x7a74, (q15_t)0x7a72, (q15_t)0x7a71, (q15_t)0x7a6f, - (q15_t)0x7a6d, (q15_t)0x7a6b, (q15_t)0x7a69, (q15_t)0x7a67, (q15_t)0x7a66, (q15_t)0x7a64, (q15_t)0x7a62, (q15_t)0x7a60, - (q15_t)0x7a5e, (q15_t)0x7a5c, (q15_t)0x7a5b, (q15_t)0x7a59, (q15_t)0x7a57, (q15_t)0x7a55, (q15_t)0x7a53, (q15_t)0x7a51, - (q15_t)0x7a4f, (q15_t)0x7a4e, (q15_t)0x7a4c, (q15_t)0x7a4a, (q15_t)0x7a48, (q15_t)0x7a46, (q15_t)0x7a44, (q15_t)0x7a42, - (q15_t)0x7a41, (q15_t)0x7a3f, (q15_t)0x7a3d, (q15_t)0x7a3b, (q15_t)0x7a39, (q15_t)0x7a37, (q15_t)0x7a35, (q15_t)0x7a34, - (q15_t)0x7a32, (q15_t)0x7a30, (q15_t)0x7a2e, (q15_t)0x7a2c, (q15_t)0x7a2a, (q15_t)0x7a28, (q15_t)0x7a26, (q15_t)0x7a25, - (q15_t)0x7a23, (q15_t)0x7a21, (q15_t)0x7a1f, (q15_t)0x7a1d, (q15_t)0x7a1b, (q15_t)0x7a19, (q15_t)0x7a17, (q15_t)0x7a16, - (q15_t)0x7a14, (q15_t)0x7a12, (q15_t)0x7a10, (q15_t)0x7a0e, (q15_t)0x7a0c, (q15_t)0x7a0a, (q15_t)0x7a08, (q15_t)0x7a06, - (q15_t)0x7a04, (q15_t)0x7a03, (q15_t)0x7a01, (q15_t)0x79ff, (q15_t)0x79fd, (q15_t)0x79fb, (q15_t)0x79f9, (q15_t)0x79f7, - (q15_t)0x79f5, (q15_t)0x79f3, (q15_t)0x79f1, (q15_t)0x79f0, (q15_t)0x79ee, (q15_t)0x79ec, (q15_t)0x79ea, (q15_t)0x79e8, - (q15_t)0x79e6, (q15_t)0x79e4, (q15_t)0x79e2, (q15_t)0x79e0, (q15_t)0x79de, (q15_t)0x79dc, (q15_t)0x79da, (q15_t)0x79d9, - (q15_t)0x79d7, (q15_t)0x79d5, (q15_t)0x79d3, (q15_t)0x79d1, (q15_t)0x79cf, (q15_t)0x79cd, (q15_t)0x79cb, (q15_t)0x79c9, - (q15_t)0x79c7, (q15_t)0x79c5, (q15_t)0x79c3, (q15_t)0x79c1, (q15_t)0x79bf, (q15_t)0x79bd, (q15_t)0x79bc, (q15_t)0x79ba, - (q15_t)0x79b8, (q15_t)0x79b6, (q15_t)0x79b4, (q15_t)0x79b2, (q15_t)0x79b0, (q15_t)0x79ae, (q15_t)0x79ac, (q15_t)0x79aa, - (q15_t)0x79a8, (q15_t)0x79a6, (q15_t)0x79a4, (q15_t)0x79a2, (q15_t)0x79a0, (q15_t)0x799e, (q15_t)0x799c, (q15_t)0x799a, - (q15_t)0x7998, (q15_t)0x7996, (q15_t)0x7994, (q15_t)0x7992, (q15_t)0x7991, (q15_t)0x798f, (q15_t)0x798d, (q15_t)0x798b, - (q15_t)0x7989, (q15_t)0x7987, (q15_t)0x7985, (q15_t)0x7983, (q15_t)0x7981, (q15_t)0x797f, (q15_t)0x797d, (q15_t)0x797b, - (q15_t)0x7979, (q15_t)0x7977, (q15_t)0x7975, (q15_t)0x7973, (q15_t)0x7971, (q15_t)0x796f, (q15_t)0x796d, (q15_t)0x796b, - (q15_t)0x7969, (q15_t)0x7967, (q15_t)0x7965, (q15_t)0x7963, (q15_t)0x7961, (q15_t)0x795f, (q15_t)0x795d, (q15_t)0x795b, - (q15_t)0x7959, (q15_t)0x7957, (q15_t)0x7955, (q15_t)0x7953, (q15_t)0x7951, (q15_t)0x794f, (q15_t)0x794d, (q15_t)0x794b, - (q15_t)0x7949, (q15_t)0x7947, (q15_t)0x7945, (q15_t)0x7943, (q15_t)0x7941, (q15_t)0x793f, (q15_t)0x793d, (q15_t)0x793b, - (q15_t)0x7939, (q15_t)0x7937, (q15_t)0x7935, (q15_t)0x7933, (q15_t)0x7931, (q15_t)0x792f, (q15_t)0x792d, (q15_t)0x792b, - (q15_t)0x7929, (q15_t)0x7927, (q15_t)0x7925, (q15_t)0x7923, (q15_t)0x7921, (q15_t)0x791f, (q15_t)0x791d, (q15_t)0x791a, - (q15_t)0x7918, (q15_t)0x7916, (q15_t)0x7914, (q15_t)0x7912, (q15_t)0x7910, (q15_t)0x790e, (q15_t)0x790c, (q15_t)0x790a, - (q15_t)0x7908, (q15_t)0x7906, (q15_t)0x7904, (q15_t)0x7902, (q15_t)0x7900, (q15_t)0x78fe, (q15_t)0x78fc, (q15_t)0x78fa, - (q15_t)0x78f8, (q15_t)0x78f6, (q15_t)0x78f4, (q15_t)0x78f2, (q15_t)0x78f0, (q15_t)0x78ed, (q15_t)0x78eb, (q15_t)0x78e9, - (q15_t)0x78e7, (q15_t)0x78e5, (q15_t)0x78e3, (q15_t)0x78e1, (q15_t)0x78df, (q15_t)0x78dd, (q15_t)0x78db, (q15_t)0x78d9, - (q15_t)0x78d7, (q15_t)0x78d5, (q15_t)0x78d3, (q15_t)0x78d1, (q15_t)0x78ce, (q15_t)0x78cc, (q15_t)0x78ca, (q15_t)0x78c8, - (q15_t)0x78c6, (q15_t)0x78c4, (q15_t)0x78c2, (q15_t)0x78c0, (q15_t)0x78be, (q15_t)0x78bc, (q15_t)0x78ba, (q15_t)0x78b8, - (q15_t)0x78b5, (q15_t)0x78b3, (q15_t)0x78b1, (q15_t)0x78af, (q15_t)0x78ad, (q15_t)0x78ab, (q15_t)0x78a9, (q15_t)0x78a7, - (q15_t)0x78a5, (q15_t)0x78a3, (q15_t)0x78a0, (q15_t)0x789e, (q15_t)0x789c, (q15_t)0x789a, (q15_t)0x7898, (q15_t)0x7896, - (q15_t)0x7894, (q15_t)0x7892, (q15_t)0x7890, (q15_t)0x788e, (q15_t)0x788b, (q15_t)0x7889, (q15_t)0x7887, (q15_t)0x7885, - (q15_t)0x7883, (q15_t)0x7881, (q15_t)0x787f, (q15_t)0x787d, (q15_t)0x787a, (q15_t)0x7878, (q15_t)0x7876, (q15_t)0x7874, - (q15_t)0x7872, (q15_t)0x7870, (q15_t)0x786e, (q15_t)0x786c, (q15_t)0x7869, (q15_t)0x7867, (q15_t)0x7865, (q15_t)0x7863, - (q15_t)0x7861, (q15_t)0x785f, (q15_t)0x785d, (q15_t)0x785b, (q15_t)0x7858, (q15_t)0x7856, (q15_t)0x7854, (q15_t)0x7852, - (q15_t)0x7850, (q15_t)0x784e, (q15_t)0x784c, (q15_t)0x7849, (q15_t)0x7847, (q15_t)0x7845, (q15_t)0x7843, (q15_t)0x7841, - (q15_t)0x783f, (q15_t)0x783c, (q15_t)0x783a, (q15_t)0x7838, (q15_t)0x7836, (q15_t)0x7834, (q15_t)0x7832, (q15_t)0x7830, - (q15_t)0x782d, (q15_t)0x782b, (q15_t)0x7829, (q15_t)0x7827, (q15_t)0x7825, (q15_t)0x7823, (q15_t)0x7820, (q15_t)0x781e, - (q15_t)0x781c, (q15_t)0x781a, (q15_t)0x7818, (q15_t)0x7816, (q15_t)0x7813, (q15_t)0x7811, (q15_t)0x780f, (q15_t)0x780d, - (q15_t)0x780b, (q15_t)0x7808, (q15_t)0x7806, (q15_t)0x7804, (q15_t)0x7802, (q15_t)0x7800, (q15_t)0x77fe, (q15_t)0x77fb, - (q15_t)0x77f9, (q15_t)0x77f7, (q15_t)0x77f5, (q15_t)0x77f3, (q15_t)0x77f0, (q15_t)0x77ee, (q15_t)0x77ec, (q15_t)0x77ea, - (q15_t)0x77e8, (q15_t)0x77e5, (q15_t)0x77e3, (q15_t)0x77e1, (q15_t)0x77df, (q15_t)0x77dd, (q15_t)0x77da, (q15_t)0x77d8, - (q15_t)0x77d6, (q15_t)0x77d4, (q15_t)0x77d2, (q15_t)0x77cf, (q15_t)0x77cd, (q15_t)0x77cb, (q15_t)0x77c9, (q15_t)0x77c6, - (q15_t)0x77c4, (q15_t)0x77c2, (q15_t)0x77c0, (q15_t)0x77be, (q15_t)0x77bb, (q15_t)0x77b9, (q15_t)0x77b7, (q15_t)0x77b5, - (q15_t)0x77b2, (q15_t)0x77b0, (q15_t)0x77ae, (q15_t)0x77ac, (q15_t)0x77aa, (q15_t)0x77a7, (q15_t)0x77a5, (q15_t)0x77a3, - (q15_t)0x77a1, (q15_t)0x779e, (q15_t)0x779c, (q15_t)0x779a, (q15_t)0x7798, (q15_t)0x7795, (q15_t)0x7793, (q15_t)0x7791, - (q15_t)0x778f, (q15_t)0x778c, (q15_t)0x778a, (q15_t)0x7788, (q15_t)0x7786, (q15_t)0x7783, (q15_t)0x7781, (q15_t)0x777f, - (q15_t)0x777d, (q15_t)0x777a, (q15_t)0x7778, (q15_t)0x7776, (q15_t)0x7774, (q15_t)0x7771, (q15_t)0x776f, (q15_t)0x776d, - (q15_t)0x776b, (q15_t)0x7768, (q15_t)0x7766, (q15_t)0x7764, (q15_t)0x7762, (q15_t)0x775f, (q15_t)0x775d, (q15_t)0x775b, - (q15_t)0x7759, (q15_t)0x7756, (q15_t)0x7754, (q15_t)0x7752, (q15_t)0x774f, (q15_t)0x774d, (q15_t)0x774b, (q15_t)0x7749, - (q15_t)0x7746, (q15_t)0x7744, (q15_t)0x7742, (q15_t)0x773f, (q15_t)0x773d, (q15_t)0x773b, (q15_t)0x7739, (q15_t)0x7736, - (q15_t)0x7734, (q15_t)0x7732, (q15_t)0x772f, (q15_t)0x772d, (q15_t)0x772b, (q15_t)0x7729, (q15_t)0x7726, (q15_t)0x7724, - (q15_t)0x7722, (q15_t)0x771f, (q15_t)0x771d, (q15_t)0x771b, (q15_t)0x7719, (q15_t)0x7716, (q15_t)0x7714, (q15_t)0x7712, - (q15_t)0x770f, (q15_t)0x770d, (q15_t)0x770b, (q15_t)0x7708, (q15_t)0x7706, (q15_t)0x7704, (q15_t)0x7701, (q15_t)0x76ff, - (q15_t)0x76fd, (q15_t)0x76fa, (q15_t)0x76f8, (q15_t)0x76f6, (q15_t)0x76f4, (q15_t)0x76f1, (q15_t)0x76ef, (q15_t)0x76ed, - (q15_t)0x76ea, (q15_t)0x76e8, (q15_t)0x76e6, (q15_t)0x76e3, (q15_t)0x76e1, (q15_t)0x76df, (q15_t)0x76dc, (q15_t)0x76da, - (q15_t)0x76d8, (q15_t)0x76d5, (q15_t)0x76d3, (q15_t)0x76d1, (q15_t)0x76ce, (q15_t)0x76cc, (q15_t)0x76ca, (q15_t)0x76c7, - (q15_t)0x76c5, (q15_t)0x76c3, (q15_t)0x76c0, (q15_t)0x76be, (q15_t)0x76bc, (q15_t)0x76b9, (q15_t)0x76b7, (q15_t)0x76b4, - (q15_t)0x76b2, (q15_t)0x76b0, (q15_t)0x76ad, (q15_t)0x76ab, (q15_t)0x76a9, (q15_t)0x76a6, (q15_t)0x76a4, (q15_t)0x76a2, - (q15_t)0x769f, (q15_t)0x769d, (q15_t)0x769b, (q15_t)0x7698, (q15_t)0x7696, (q15_t)0x7693, (q15_t)0x7691, (q15_t)0x768f, - (q15_t)0x768c, (q15_t)0x768a, (q15_t)0x7688, (q15_t)0x7685, (q15_t)0x7683, (q15_t)0x7681, (q15_t)0x767e, (q15_t)0x767c, - (q15_t)0x7679, (q15_t)0x7677, (q15_t)0x7675, (q15_t)0x7672, (q15_t)0x7670, (q15_t)0x766d, (q15_t)0x766b, (q15_t)0x7669, - (q15_t)0x7666, (q15_t)0x7664, (q15_t)0x7662, (q15_t)0x765f, (q15_t)0x765d, (q15_t)0x765a, (q15_t)0x7658, (q15_t)0x7656, - (q15_t)0x7653, (q15_t)0x7651, (q15_t)0x764e, (q15_t)0x764c, (q15_t)0x764a, (q15_t)0x7647, (q15_t)0x7645, (q15_t)0x7642, - (q15_t)0x7640, (q15_t)0x763e, (q15_t)0x763b, (q15_t)0x7639, (q15_t)0x7636, (q15_t)0x7634, (q15_t)0x7632, (q15_t)0x762f, - (q15_t)0x762d, (q15_t)0x762a, (q15_t)0x7628, (q15_t)0x7625, (q15_t)0x7623, (q15_t)0x7621, (q15_t)0x761e, (q15_t)0x761c, - (q15_t)0x7619, (q15_t)0x7617, (q15_t)0x7615, (q15_t)0x7612, (q15_t)0x7610, (q15_t)0x760d, (q15_t)0x760b, (q15_t)0x7608, - (q15_t)0x7606, (q15_t)0x7604, (q15_t)0x7601, (q15_t)0x75ff, (q15_t)0x75fc, (q15_t)0x75fa, (q15_t)0x75f7, (q15_t)0x75f5, - (q15_t)0x75f2, (q15_t)0x75f0, (q15_t)0x75ee, (q15_t)0x75eb, (q15_t)0x75e9, (q15_t)0x75e6, (q15_t)0x75e4, (q15_t)0x75e1, - (q15_t)0x75df, (q15_t)0x75dc, (q15_t)0x75da, (q15_t)0x75d8, (q15_t)0x75d5, (q15_t)0x75d3, (q15_t)0x75d0, (q15_t)0x75ce, - (q15_t)0x75cb, (q15_t)0x75c9, (q15_t)0x75c6, (q15_t)0x75c4, (q15_t)0x75c1, (q15_t)0x75bf, (q15_t)0x75bc, (q15_t)0x75ba, - (q15_t)0x75b8, (q15_t)0x75b5, (q15_t)0x75b3, (q15_t)0x75b0, (q15_t)0x75ae, (q15_t)0x75ab, (q15_t)0x75a9, (q15_t)0x75a6, - (q15_t)0x75a4, (q15_t)0x75a1, (q15_t)0x759f, (q15_t)0x759c, (q15_t)0x759a, (q15_t)0x7597, (q15_t)0x7595, (q15_t)0x7592, - (q15_t)0x7590, (q15_t)0x758d, (q15_t)0x758b, (q15_t)0x7588, (q15_t)0x7586, (q15_t)0x7584, (q15_t)0x7581, (q15_t)0x757f, - (q15_t)0x757c, (q15_t)0x757a, (q15_t)0x7577, (q15_t)0x7575, (q15_t)0x7572, (q15_t)0x7570, (q15_t)0x756d, (q15_t)0x756b, - (q15_t)0x7568, (q15_t)0x7566, (q15_t)0x7563, (q15_t)0x7561, (q15_t)0x755e, (q15_t)0x755c, (q15_t)0x7559, (q15_t)0x7556, - (q15_t)0x7554, (q15_t)0x7551, (q15_t)0x754f, (q15_t)0x754c, (q15_t)0x754a, (q15_t)0x7547, (q15_t)0x7545, (q15_t)0x7542, - (q15_t)0x7540, (q15_t)0x753d, (q15_t)0x753b, (q15_t)0x7538, (q15_t)0x7536, (q15_t)0x7533, (q15_t)0x7531, (q15_t)0x752e, - (q15_t)0x752c, (q15_t)0x7529, (q15_t)0x7527, (q15_t)0x7524, (q15_t)0x7522, (q15_t)0x751f, (q15_t)0x751c, (q15_t)0x751a, - (q15_t)0x7517, (q15_t)0x7515, (q15_t)0x7512, (q15_t)0x7510, (q15_t)0x750d, (q15_t)0x750b, (q15_t)0x7508, (q15_t)0x7506, - (q15_t)0x7503, (q15_t)0x7501, (q15_t)0x74fe, (q15_t)0x74fb, (q15_t)0x74f9, (q15_t)0x74f6, (q15_t)0x74f4, (q15_t)0x74f1, - (q15_t)0x74ef, (q15_t)0x74ec, (q15_t)0x74ea, (q15_t)0x74e7, (q15_t)0x74e4, (q15_t)0x74e2, (q15_t)0x74df, (q15_t)0x74dd, - (q15_t)0x74da, (q15_t)0x74d8, (q15_t)0x74d5, (q15_t)0x74d2, (q15_t)0x74d0, (q15_t)0x74cd, (q15_t)0x74cb, (q15_t)0x74c8, - (q15_t)0x74c6, (q15_t)0x74c3, (q15_t)0x74c0, (q15_t)0x74be, (q15_t)0x74bb, (q15_t)0x74b9, (q15_t)0x74b6, (q15_t)0x74b4, - (q15_t)0x74b1, (q15_t)0x74ae, (q15_t)0x74ac, (q15_t)0x74a9, (q15_t)0x74a7, (q15_t)0x74a4, (q15_t)0x74a1, (q15_t)0x749f, - (q15_t)0x749c, (q15_t)0x749a, (q15_t)0x7497, (q15_t)0x7495, (q15_t)0x7492, (q15_t)0x748f, (q15_t)0x748d, (q15_t)0x748a, - (q15_t)0x7488, (q15_t)0x7485, (q15_t)0x7482, (q15_t)0x7480, (q15_t)0x747d, (q15_t)0x747b, (q15_t)0x7478, (q15_t)0x7475, - (q15_t)0x7473, (q15_t)0x7470, (q15_t)0x746d, (q15_t)0x746b, (q15_t)0x7468, (q15_t)0x7466, (q15_t)0x7463, (q15_t)0x7460, - (q15_t)0x745e, (q15_t)0x745b, (q15_t)0x7459, (q15_t)0x7456, (q15_t)0x7453, (q15_t)0x7451, (q15_t)0x744e, (q15_t)0x744b, - (q15_t)0x7449, (q15_t)0x7446, (q15_t)0x7444, (q15_t)0x7441, (q15_t)0x743e, (q15_t)0x743c, (q15_t)0x7439, (q15_t)0x7436, - (q15_t)0x7434, (q15_t)0x7431, (q15_t)0x742f, (q15_t)0x742c, (q15_t)0x7429, (q15_t)0x7427, (q15_t)0x7424, (q15_t)0x7421, - (q15_t)0x741f, (q15_t)0x741c, (q15_t)0x7419, (q15_t)0x7417, (q15_t)0x7414, (q15_t)0x7411, (q15_t)0x740f, (q15_t)0x740c, - (q15_t)0x740a, (q15_t)0x7407, (q15_t)0x7404, (q15_t)0x7402, (q15_t)0x73ff, (q15_t)0x73fc, (q15_t)0x73fa, (q15_t)0x73f7, - (q15_t)0x73f4, (q15_t)0x73f2, (q15_t)0x73ef, (q15_t)0x73ec, (q15_t)0x73ea, (q15_t)0x73e7, (q15_t)0x73e4, (q15_t)0x73e2, - (q15_t)0x73df, (q15_t)0x73dc, (q15_t)0x73da, (q15_t)0x73d7, (q15_t)0x73d4, (q15_t)0x73d2, (q15_t)0x73cf, (q15_t)0x73cc, - (q15_t)0x73ca, (q15_t)0x73c7, (q15_t)0x73c4, (q15_t)0x73c1, (q15_t)0x73bf, (q15_t)0x73bc, (q15_t)0x73b9, (q15_t)0x73b7, - (q15_t)0x73b4, (q15_t)0x73b1, (q15_t)0x73af, (q15_t)0x73ac, (q15_t)0x73a9, (q15_t)0x73a7, (q15_t)0x73a4, (q15_t)0x73a1, - (q15_t)0x739f, (q15_t)0x739c, (q15_t)0x7399, (q15_t)0x7396, (q15_t)0x7394, (q15_t)0x7391, (q15_t)0x738e, (q15_t)0x738c, - (q15_t)0x7389, (q15_t)0x7386, (q15_t)0x7384, (q15_t)0x7381, (q15_t)0x737e, (q15_t)0x737b, (q15_t)0x7379, (q15_t)0x7376, - (q15_t)0x7373, (q15_t)0x7371, (q15_t)0x736e, (q15_t)0x736b, (q15_t)0x7368, (q15_t)0x7366, (q15_t)0x7363, (q15_t)0x7360, - (q15_t)0x735e, (q15_t)0x735b, (q15_t)0x7358, (q15_t)0x7355, (q15_t)0x7353, (q15_t)0x7350, (q15_t)0x734d, (q15_t)0x734a, - (q15_t)0x7348, (q15_t)0x7345, (q15_t)0x7342, (q15_t)0x7340, (q15_t)0x733d, (q15_t)0x733a, (q15_t)0x7337, (q15_t)0x7335, - (q15_t)0x7332, (q15_t)0x732f, (q15_t)0x732c, (q15_t)0x732a, (q15_t)0x7327, (q15_t)0x7324, (q15_t)0x7321, (q15_t)0x731f, - (q15_t)0x731c, (q15_t)0x7319, (q15_t)0x7316, (q15_t)0x7314, (q15_t)0x7311, (q15_t)0x730e, (q15_t)0x730b, (q15_t)0x7309, - (q15_t)0x7306, (q15_t)0x7303, (q15_t)0x7300, (q15_t)0x72fe, (q15_t)0x72fb, (q15_t)0x72f8, (q15_t)0x72f5, (q15_t)0x72f3, - (q15_t)0x72f0, (q15_t)0x72ed, (q15_t)0x72ea, (q15_t)0x72e8, (q15_t)0x72e5, (q15_t)0x72e2, (q15_t)0x72df, (q15_t)0x72dc, - (q15_t)0x72da, (q15_t)0x72d7, (q15_t)0x72d4, (q15_t)0x72d1, (q15_t)0x72cf, (q15_t)0x72cc, (q15_t)0x72c9, (q15_t)0x72c6, - (q15_t)0x72c3, (q15_t)0x72c1, (q15_t)0x72be, (q15_t)0x72bb, (q15_t)0x72b8, (q15_t)0x72b5, (q15_t)0x72b3, (q15_t)0x72b0, - (q15_t)0x72ad, (q15_t)0x72aa, (q15_t)0x72a8, (q15_t)0x72a5, (q15_t)0x72a2, (q15_t)0x729f, (q15_t)0x729c, (q15_t)0x729a, - (q15_t)0x7297, (q15_t)0x7294, (q15_t)0x7291, (q15_t)0x728e, (q15_t)0x728c, (q15_t)0x7289, (q15_t)0x7286, (q15_t)0x7283, - (q15_t)0x7280, (q15_t)0x727e, (q15_t)0x727b, (q15_t)0x7278, (q15_t)0x7275, (q15_t)0x7272, (q15_t)0x726f, (q15_t)0x726d, - (q15_t)0x726a, (q15_t)0x7267, (q15_t)0x7264, (q15_t)0x7261, (q15_t)0x725f, (q15_t)0x725c, (q15_t)0x7259, (q15_t)0x7256, - (q15_t)0x7253, (q15_t)0x7250, (q15_t)0x724e, (q15_t)0x724b, (q15_t)0x7248, (q15_t)0x7245, (q15_t)0x7242, (q15_t)0x723f, - (q15_t)0x723d, (q15_t)0x723a, (q15_t)0x7237, (q15_t)0x7234, (q15_t)0x7231, (q15_t)0x722e, (q15_t)0x722c, (q15_t)0x7229, - (q15_t)0x7226, (q15_t)0x7223, (q15_t)0x7220, (q15_t)0x721d, (q15_t)0x721b, (q15_t)0x7218, (q15_t)0x7215, (q15_t)0x7212, - (q15_t)0x720f, (q15_t)0x720c, (q15_t)0x7209, (q15_t)0x7207, (q15_t)0x7204, (q15_t)0x7201, (q15_t)0x71fe, (q15_t)0x71fb, - (q15_t)0x71f8, (q15_t)0x71f5, (q15_t)0x71f3, (q15_t)0x71f0, (q15_t)0x71ed, (q15_t)0x71ea, (q15_t)0x71e7, (q15_t)0x71e4, - (q15_t)0x71e1, (q15_t)0x71df, (q15_t)0x71dc, (q15_t)0x71d9, (q15_t)0x71d6, (q15_t)0x71d3, (q15_t)0x71d0, (q15_t)0x71cd, - (q15_t)0x71ca, (q15_t)0x71c8, (q15_t)0x71c5, (q15_t)0x71c2, (q15_t)0x71bf, (q15_t)0x71bc, (q15_t)0x71b9, (q15_t)0x71b6, - (q15_t)0x71b3, (q15_t)0x71b0, (q15_t)0x71ae, (q15_t)0x71ab, (q15_t)0x71a8, (q15_t)0x71a5, (q15_t)0x71a2, (q15_t)0x719f, - (q15_t)0x719c, (q15_t)0x7199, (q15_t)0x7196, (q15_t)0x7194, (q15_t)0x7191, (q15_t)0x718e, (q15_t)0x718b, (q15_t)0x7188, - (q15_t)0x7185, (q15_t)0x7182, (q15_t)0x717f, (q15_t)0x717c, (q15_t)0x7179, (q15_t)0x7177, (q15_t)0x7174, (q15_t)0x7171, - (q15_t)0x716e, (q15_t)0x716b, (q15_t)0x7168, (q15_t)0x7165, (q15_t)0x7162, (q15_t)0x715f, (q15_t)0x715c, (q15_t)0x7159, - (q15_t)0x7156, (q15_t)0x7154, (q15_t)0x7151, (q15_t)0x714e, (q15_t)0x714b, (q15_t)0x7148, (q15_t)0x7145, (q15_t)0x7142, - (q15_t)0x713f, (q15_t)0x713c, (q15_t)0x7139, (q15_t)0x7136, (q15_t)0x7133, (q15_t)0x7130, (q15_t)0x712d, (q15_t)0x712b, - (q15_t)0x7128, (q15_t)0x7125, (q15_t)0x7122, (q15_t)0x711f, (q15_t)0x711c, (q15_t)0x7119, (q15_t)0x7116, (q15_t)0x7113, - (q15_t)0x7110, (q15_t)0x710d, (q15_t)0x710a, (q15_t)0x7107, (q15_t)0x7104, (q15_t)0x7101, (q15_t)0x70fe, (q15_t)0x70fb, - (q15_t)0x70f8, (q15_t)0x70f6, (q15_t)0x70f3, (q15_t)0x70f0, (q15_t)0x70ed, (q15_t)0x70ea, (q15_t)0x70e7, (q15_t)0x70e4, - (q15_t)0x70e1, (q15_t)0x70de, (q15_t)0x70db, (q15_t)0x70d8, (q15_t)0x70d5, (q15_t)0x70d2, (q15_t)0x70cf, (q15_t)0x70cc, - (q15_t)0x70c9, (q15_t)0x70c6, (q15_t)0x70c3, (q15_t)0x70c0, (q15_t)0x70bd, (q15_t)0x70ba, (q15_t)0x70b7, (q15_t)0x70b4, - (q15_t)0x70b1, (q15_t)0x70ae, (q15_t)0x70ab, (q15_t)0x70a8, (q15_t)0x70a5, (q15_t)0x70a2, (q15_t)0x709f, (q15_t)0x709c, - (q15_t)0x7099, (q15_t)0x7096, (q15_t)0x7093, (q15_t)0x7090, (q15_t)0x708d, (q15_t)0x708a, (q15_t)0x7087, (q15_t)0x7084, - (q15_t)0x7081, (q15_t)0x707e, (q15_t)0x707b, (q15_t)0x7078, (q15_t)0x7075, (q15_t)0x7072, (q15_t)0x706f, (q15_t)0x706c, - (q15_t)0x7069, (q15_t)0x7066, (q15_t)0x7063, (q15_t)0x7060, (q15_t)0x705d, (q15_t)0x705a, (q15_t)0x7057, (q15_t)0x7054, - (q15_t)0x7051, (q15_t)0x704e, (q15_t)0x704b, (q15_t)0x7048, (q15_t)0x7045, (q15_t)0x7042, (q15_t)0x703f, (q15_t)0x703c, - (q15_t)0x7039, (q15_t)0x7036, (q15_t)0x7033, (q15_t)0x7030, (q15_t)0x702d, (q15_t)0x702a, (q15_t)0x7027, (q15_t)0x7024, - (q15_t)0x7021, (q15_t)0x701e, (q15_t)0x701b, (q15_t)0x7018, (q15_t)0x7015, (q15_t)0x7012, (q15_t)0x700f, (q15_t)0x700c, - (q15_t)0x7009, (q15_t)0x7006, (q15_t)0x7003, (q15_t)0x7000, (q15_t)0x6ffd, (q15_t)0x6ffa, (q15_t)0x6ff7, (q15_t)0x6ff3, - (q15_t)0x6ff0, (q15_t)0x6fed, (q15_t)0x6fea, (q15_t)0x6fe7, (q15_t)0x6fe4, (q15_t)0x6fe1, (q15_t)0x6fde, (q15_t)0x6fdb, - (q15_t)0x6fd8, (q15_t)0x6fd5, (q15_t)0x6fd2, (q15_t)0x6fcf, (q15_t)0x6fcc, (q15_t)0x6fc9, (q15_t)0x6fc6, (q15_t)0x6fc3, - (q15_t)0x6fc0, (q15_t)0x6fbc, (q15_t)0x6fb9, (q15_t)0x6fb6, (q15_t)0x6fb3, (q15_t)0x6fb0, (q15_t)0x6fad, (q15_t)0x6faa, - (q15_t)0x6fa7, (q15_t)0x6fa4, (q15_t)0x6fa1, (q15_t)0x6f9e, (q15_t)0x6f9b, (q15_t)0x6f98, (q15_t)0x6f95, (q15_t)0x6f91, - (q15_t)0x6f8e, (q15_t)0x6f8b, (q15_t)0x6f88, (q15_t)0x6f85, (q15_t)0x6f82, (q15_t)0x6f7f, (q15_t)0x6f7c, (q15_t)0x6f79, - (q15_t)0x6f76, (q15_t)0x6f73, (q15_t)0x6f70, (q15_t)0x6f6c, (q15_t)0x6f69, (q15_t)0x6f66, (q15_t)0x6f63, (q15_t)0x6f60, - (q15_t)0x6f5d, (q15_t)0x6f5a, (q15_t)0x6f57, (q15_t)0x6f54, (q15_t)0x6f51, (q15_t)0x6f4d, (q15_t)0x6f4a, (q15_t)0x6f47, - (q15_t)0x6f44, (q15_t)0x6f41, (q15_t)0x6f3e, (q15_t)0x6f3b, (q15_t)0x6f38, (q15_t)0x6f35, (q15_t)0x6f31, (q15_t)0x6f2e, - (q15_t)0x6f2b, (q15_t)0x6f28, (q15_t)0x6f25, (q15_t)0x6f22, (q15_t)0x6f1f, (q15_t)0x6f1c, (q15_t)0x6f19, (q15_t)0x6f15, - (q15_t)0x6f12, (q15_t)0x6f0f, (q15_t)0x6f0c, (q15_t)0x6f09, (q15_t)0x6f06, (q15_t)0x6f03, (q15_t)0x6f00, (q15_t)0x6efc, - (q15_t)0x6ef9, (q15_t)0x6ef6, (q15_t)0x6ef3, (q15_t)0x6ef0, (q15_t)0x6eed, (q15_t)0x6eea, (q15_t)0x6ee7, (q15_t)0x6ee3, - (q15_t)0x6ee0, (q15_t)0x6edd, (q15_t)0x6eda, (q15_t)0x6ed7, (q15_t)0x6ed4, (q15_t)0x6ed1, (q15_t)0x6ecd, (q15_t)0x6eca, - (q15_t)0x6ec7, (q15_t)0x6ec4, (q15_t)0x6ec1, (q15_t)0x6ebe, (q15_t)0x6eba, (q15_t)0x6eb7, (q15_t)0x6eb4, (q15_t)0x6eb1, - (q15_t)0x6eae, (q15_t)0x6eab, (q15_t)0x6ea8, (q15_t)0x6ea4, (q15_t)0x6ea1, (q15_t)0x6e9e, (q15_t)0x6e9b, (q15_t)0x6e98, - (q15_t)0x6e95, (q15_t)0x6e91, (q15_t)0x6e8e, (q15_t)0x6e8b, (q15_t)0x6e88, (q15_t)0x6e85, (q15_t)0x6e82, (q15_t)0x6e7e, - (q15_t)0x6e7b, (q15_t)0x6e78, (q15_t)0x6e75, (q15_t)0x6e72, (q15_t)0x6e6f, (q15_t)0x6e6b, (q15_t)0x6e68, (q15_t)0x6e65, - (q15_t)0x6e62, (q15_t)0x6e5f, (q15_t)0x6e5b, (q15_t)0x6e58, (q15_t)0x6e55, (q15_t)0x6e52, (q15_t)0x6e4f, (q15_t)0x6e4c, - (q15_t)0x6e48, (q15_t)0x6e45, (q15_t)0x6e42, (q15_t)0x6e3f, (q15_t)0x6e3c, (q15_t)0x6e38, (q15_t)0x6e35, (q15_t)0x6e32, - (q15_t)0x6e2f, (q15_t)0x6e2c, (q15_t)0x6e28, (q15_t)0x6e25, (q15_t)0x6e22, (q15_t)0x6e1f, (q15_t)0x6e1c, (q15_t)0x6e18, - (q15_t)0x6e15, (q15_t)0x6e12, (q15_t)0x6e0f, (q15_t)0x6e0c, (q15_t)0x6e08, (q15_t)0x6e05, (q15_t)0x6e02, (q15_t)0x6dff, - (q15_t)0x6dfb, (q15_t)0x6df8, (q15_t)0x6df5, (q15_t)0x6df2, (q15_t)0x6def, (q15_t)0x6deb, (q15_t)0x6de8, (q15_t)0x6de5, - (q15_t)0x6de2, (q15_t)0x6ddf, (q15_t)0x6ddb, (q15_t)0x6dd8, (q15_t)0x6dd5, (q15_t)0x6dd2, (q15_t)0x6dce, (q15_t)0x6dcb, - (q15_t)0x6dc8, (q15_t)0x6dc5, (q15_t)0x6dc1, (q15_t)0x6dbe, (q15_t)0x6dbb, (q15_t)0x6db8, (q15_t)0x6db5, (q15_t)0x6db1, - (q15_t)0x6dae, (q15_t)0x6dab, (q15_t)0x6da8, (q15_t)0x6da4, (q15_t)0x6da1, (q15_t)0x6d9e, (q15_t)0x6d9b, (q15_t)0x6d97, - (q15_t)0x6d94, (q15_t)0x6d91, (q15_t)0x6d8e, (q15_t)0x6d8a, (q15_t)0x6d87, (q15_t)0x6d84, (q15_t)0x6d81, (q15_t)0x6d7d, - (q15_t)0x6d7a, (q15_t)0x6d77, (q15_t)0x6d74, (q15_t)0x6d70, (q15_t)0x6d6d, (q15_t)0x6d6a, (q15_t)0x6d67, (q15_t)0x6d63, - (q15_t)0x6d60, (q15_t)0x6d5d, (q15_t)0x6d59, (q15_t)0x6d56, (q15_t)0x6d53, (q15_t)0x6d50, (q15_t)0x6d4c, (q15_t)0x6d49, - (q15_t)0x6d46, (q15_t)0x6d43, (q15_t)0x6d3f, (q15_t)0x6d3c, (q15_t)0x6d39, (q15_t)0x6d36, (q15_t)0x6d32, (q15_t)0x6d2f, - (q15_t)0x6d2c, (q15_t)0x6d28, (q15_t)0x6d25, (q15_t)0x6d22, (q15_t)0x6d1f, (q15_t)0x6d1b, (q15_t)0x6d18, (q15_t)0x6d15, - (q15_t)0x6d11, (q15_t)0x6d0e, (q15_t)0x6d0b, (q15_t)0x6d08, (q15_t)0x6d04, (q15_t)0x6d01, (q15_t)0x6cfe, (q15_t)0x6cfa, - (q15_t)0x6cf7, (q15_t)0x6cf4, (q15_t)0x6cf0, (q15_t)0x6ced, (q15_t)0x6cea, (q15_t)0x6ce7, (q15_t)0x6ce3, (q15_t)0x6ce0, - (q15_t)0x6cdd, (q15_t)0x6cd9, (q15_t)0x6cd6, (q15_t)0x6cd3, (q15_t)0x6ccf, (q15_t)0x6ccc, (q15_t)0x6cc9, (q15_t)0x6cc5, - (q15_t)0x6cc2, (q15_t)0x6cbf, (q15_t)0x6cbc, (q15_t)0x6cb8, (q15_t)0x6cb5, (q15_t)0x6cb2, (q15_t)0x6cae, (q15_t)0x6cab, - (q15_t)0x6ca8, (q15_t)0x6ca4, (q15_t)0x6ca1, (q15_t)0x6c9e, (q15_t)0x6c9a, (q15_t)0x6c97, (q15_t)0x6c94, (q15_t)0x6c90, - (q15_t)0x6c8d, (q15_t)0x6c8a, (q15_t)0x6c86, (q15_t)0x6c83, (q15_t)0x6c80, (q15_t)0x6c7c, (q15_t)0x6c79, (q15_t)0x6c76, - (q15_t)0x6c72, (q15_t)0x6c6f, (q15_t)0x6c6c, (q15_t)0x6c68, (q15_t)0x6c65, (q15_t)0x6c62, (q15_t)0x6c5e, (q15_t)0x6c5b, - (q15_t)0x6c58, (q15_t)0x6c54, (q15_t)0x6c51, (q15_t)0x6c4e, (q15_t)0x6c4a, (q15_t)0x6c47, (q15_t)0x6c44, (q15_t)0x6c40, - (q15_t)0x6c3d, (q15_t)0x6c39, (q15_t)0x6c36, (q15_t)0x6c33, (q15_t)0x6c2f, (q15_t)0x6c2c, (q15_t)0x6c29, (q15_t)0x6c25, - (q15_t)0x6c22, (q15_t)0x6c1f, (q15_t)0x6c1b, (q15_t)0x6c18, (q15_t)0x6c15, (q15_t)0x6c11, (q15_t)0x6c0e, (q15_t)0x6c0a, - (q15_t)0x6c07, (q15_t)0x6c04, (q15_t)0x6c00, (q15_t)0x6bfd, (q15_t)0x6bfa, (q15_t)0x6bf6, (q15_t)0x6bf3, (q15_t)0x6bef, - (q15_t)0x6bec, (q15_t)0x6be9, (q15_t)0x6be5, (q15_t)0x6be2, (q15_t)0x6bdf, (q15_t)0x6bdb, (q15_t)0x6bd8, (q15_t)0x6bd4, - (q15_t)0x6bd1, (q15_t)0x6bce, (q15_t)0x6bca, (q15_t)0x6bc7, (q15_t)0x6bc3, (q15_t)0x6bc0, (q15_t)0x6bbd, (q15_t)0x6bb9, - (q15_t)0x6bb6, (q15_t)0x6bb2, (q15_t)0x6baf, (q15_t)0x6bac, (q15_t)0x6ba8, (q15_t)0x6ba5, (q15_t)0x6ba1, (q15_t)0x6b9e, - (q15_t)0x6b9b, (q15_t)0x6b97, (q15_t)0x6b94, (q15_t)0x6b90, (q15_t)0x6b8d, (q15_t)0x6b8a, (q15_t)0x6b86, (q15_t)0x6b83, - (q15_t)0x6b7f, (q15_t)0x6b7c, (q15_t)0x6b79, (q15_t)0x6b75, (q15_t)0x6b72, (q15_t)0x6b6e, (q15_t)0x6b6b, (q15_t)0x6b68, - (q15_t)0x6b64, (q15_t)0x6b61, (q15_t)0x6b5d, (q15_t)0x6b5a, (q15_t)0x6b56, (q15_t)0x6b53, (q15_t)0x6b50, (q15_t)0x6b4c, - (q15_t)0x6b49, (q15_t)0x6b45, (q15_t)0x6b42, (q15_t)0x6b3e, (q15_t)0x6b3b, (q15_t)0x6b38, (q15_t)0x6b34, (q15_t)0x6b31, - (q15_t)0x6b2d, (q15_t)0x6b2a, (q15_t)0x6b26, (q15_t)0x6b23, (q15_t)0x6b20, (q15_t)0x6b1c, (q15_t)0x6b19, (q15_t)0x6b15, - (q15_t)0x6b12, (q15_t)0x6b0e, (q15_t)0x6b0b, (q15_t)0x6b07, (q15_t)0x6b04, (q15_t)0x6b01, (q15_t)0x6afd, (q15_t)0x6afa, - (q15_t)0x6af6, (q15_t)0x6af3, (q15_t)0x6aef, (q15_t)0x6aec, (q15_t)0x6ae8, (q15_t)0x6ae5, (q15_t)0x6ae1, (q15_t)0x6ade, - (q15_t)0x6adb, (q15_t)0x6ad7, (q15_t)0x6ad4, (q15_t)0x6ad0, (q15_t)0x6acd, (q15_t)0x6ac9, (q15_t)0x6ac6, (q15_t)0x6ac2, - (q15_t)0x6abf, (q15_t)0x6abb, (q15_t)0x6ab8, (q15_t)0x6ab4, (q15_t)0x6ab1, (q15_t)0x6aae, (q15_t)0x6aaa, (q15_t)0x6aa7, - (q15_t)0x6aa3, (q15_t)0x6aa0, (q15_t)0x6a9c, (q15_t)0x6a99, (q15_t)0x6a95, (q15_t)0x6a92, (q15_t)0x6a8e, (q15_t)0x6a8b, - (q15_t)0x6a87, (q15_t)0x6a84, (q15_t)0x6a80, (q15_t)0x6a7d, (q15_t)0x6a79, (q15_t)0x6a76, (q15_t)0x6a72, (q15_t)0x6a6f, - (q15_t)0x6a6b, (q15_t)0x6a68, (q15_t)0x6a64, (q15_t)0x6a61, (q15_t)0x6a5d, (q15_t)0x6a5a, (q15_t)0x6a56, (q15_t)0x6a53, - (q15_t)0x6a4f, (q15_t)0x6a4c, (q15_t)0x6a48, (q15_t)0x6a45, (q15_t)0x6a41, (q15_t)0x6a3e, (q15_t)0x6a3a, (q15_t)0x6a37, - (q15_t)0x6a33, (q15_t)0x6a30, (q15_t)0x6a2c, (q15_t)0x6a29, (q15_t)0x6a25, (q15_t)0x6a22, (q15_t)0x6a1e, (q15_t)0x6a1b, - (q15_t)0x6a17, (q15_t)0x6a14, (q15_t)0x6a10, (q15_t)0x6a0d, (q15_t)0x6a09, (q15_t)0x6a06, (q15_t)0x6a02, (q15_t)0x69ff, - (q15_t)0x69fb, (q15_t)0x69f8, (q15_t)0x69f4, (q15_t)0x69f1, (q15_t)0x69ed, (q15_t)0x69e9, (q15_t)0x69e6, (q15_t)0x69e2, - (q15_t)0x69df, (q15_t)0x69db, (q15_t)0x69d8, (q15_t)0x69d4, (q15_t)0x69d1, (q15_t)0x69cd, (q15_t)0x69ca, (q15_t)0x69c6, - (q15_t)0x69c3, (q15_t)0x69bf, (q15_t)0x69bc, (q15_t)0x69b8, (q15_t)0x69b4, (q15_t)0x69b1, (q15_t)0x69ad, (q15_t)0x69aa, - (q15_t)0x69a6, (q15_t)0x69a3, (q15_t)0x699f, (q15_t)0x699c, (q15_t)0x6998, (q15_t)0x6995, (q15_t)0x6991, (q15_t)0x698d, - (q15_t)0x698a, (q15_t)0x6986, (q15_t)0x6983, (q15_t)0x697f, (q15_t)0x697c, (q15_t)0x6978, (q15_t)0x6975, (q15_t)0x6971, - (q15_t)0x696d, (q15_t)0x696a, (q15_t)0x6966, (q15_t)0x6963, (q15_t)0x695f, (q15_t)0x695c, (q15_t)0x6958, (q15_t)0x6954, - (q15_t)0x6951, (q15_t)0x694d, (q15_t)0x694a, (q15_t)0x6946, (q15_t)0x6943, (q15_t)0x693f, (q15_t)0x693b, (q15_t)0x6938, - (q15_t)0x6934, (q15_t)0x6931, (q15_t)0x692d, (q15_t)0x692a, (q15_t)0x6926, (q15_t)0x6922, (q15_t)0x691f, (q15_t)0x691b, - (q15_t)0x6918, (q15_t)0x6914, (q15_t)0x6910, (q15_t)0x690d, (q15_t)0x6909, (q15_t)0x6906, (q15_t)0x6902, (q15_t)0x68fe, - (q15_t)0x68fb, (q15_t)0x68f7, (q15_t)0x68f4, (q15_t)0x68f0, (q15_t)0x68ec, (q15_t)0x68e9, (q15_t)0x68e5, (q15_t)0x68e2, - (q15_t)0x68de, (q15_t)0x68da, (q15_t)0x68d7, (q15_t)0x68d3, (q15_t)0x68d0, (q15_t)0x68cc, (q15_t)0x68c8, (q15_t)0x68c5, - (q15_t)0x68c1, (q15_t)0x68be, (q15_t)0x68ba, (q15_t)0x68b6, (q15_t)0x68b3, (q15_t)0x68af, (q15_t)0x68ac, (q15_t)0x68a8, - (q15_t)0x68a4, (q15_t)0x68a1, (q15_t)0x689d, (q15_t)0x6899, (q15_t)0x6896, (q15_t)0x6892, (q15_t)0x688f, (q15_t)0x688b, - (q15_t)0x6887, (q15_t)0x6884, (q15_t)0x6880, (q15_t)0x687c, (q15_t)0x6879, (q15_t)0x6875, (q15_t)0x6872, (q15_t)0x686e, - (q15_t)0x686a, (q15_t)0x6867, (q15_t)0x6863, (q15_t)0x685f, (q15_t)0x685c, (q15_t)0x6858, (q15_t)0x6854, (q15_t)0x6851, - (q15_t)0x684d, (q15_t)0x684a, (q15_t)0x6846, (q15_t)0x6842, (q15_t)0x683f, (q15_t)0x683b, (q15_t)0x6837, (q15_t)0x6834, - (q15_t)0x6830, (q15_t)0x682c, (q15_t)0x6829, (q15_t)0x6825, (q15_t)0x6821, (q15_t)0x681e, (q15_t)0x681a, (q15_t)0x6816, - (q15_t)0x6813, (q15_t)0x680f, (q15_t)0x680b, (q15_t)0x6808, (q15_t)0x6804, (q15_t)0x6800, (q15_t)0x67fd, (q15_t)0x67f9, - (q15_t)0x67f5, (q15_t)0x67f2, (q15_t)0x67ee, (q15_t)0x67ea, (q15_t)0x67e7, (q15_t)0x67e3, (q15_t)0x67df, (q15_t)0x67dc, - (q15_t)0x67d8, (q15_t)0x67d4, (q15_t)0x67d1, (q15_t)0x67cd, (q15_t)0x67c9, (q15_t)0x67c6, (q15_t)0x67c2, (q15_t)0x67be, - (q15_t)0x67bb, (q15_t)0x67b7, (q15_t)0x67b3, (q15_t)0x67b0, (q15_t)0x67ac, (q15_t)0x67a8, (q15_t)0x67a5, (q15_t)0x67a1, - (q15_t)0x679d, (q15_t)0x679a, (q15_t)0x6796, (q15_t)0x6792, (q15_t)0x678e, (q15_t)0x678b, (q15_t)0x6787, (q15_t)0x6783, - (q15_t)0x6780, (q15_t)0x677c, (q15_t)0x6778, (q15_t)0x6775, (q15_t)0x6771, (q15_t)0x676d, (q15_t)0x6769, (q15_t)0x6766, - (q15_t)0x6762, (q15_t)0x675e, (q15_t)0x675b, (q15_t)0x6757, (q15_t)0x6753, (q15_t)0x6750, (q15_t)0x674c, (q15_t)0x6748, - (q15_t)0x6744, (q15_t)0x6741, (q15_t)0x673d, (q15_t)0x6739, (q15_t)0x6736, (q15_t)0x6732, (q15_t)0x672e, (q15_t)0x672a, - (q15_t)0x6727, (q15_t)0x6723, (q15_t)0x671f, (q15_t)0x671c, (q15_t)0x6718, (q15_t)0x6714, (q15_t)0x6710, (q15_t)0x670d, - (q15_t)0x6709, (q15_t)0x6705, (q15_t)0x6701, (q15_t)0x66fe, (q15_t)0x66fa, (q15_t)0x66f6, (q15_t)0x66f3, (q15_t)0x66ef, - (q15_t)0x66eb, (q15_t)0x66e7, (q15_t)0x66e4, (q15_t)0x66e0, (q15_t)0x66dc, (q15_t)0x66d8, (q15_t)0x66d5, (q15_t)0x66d1, - (q15_t)0x66cd, (q15_t)0x66c9, (q15_t)0x66c6, (q15_t)0x66c2, (q15_t)0x66be, (q15_t)0x66ba, (q15_t)0x66b7, (q15_t)0x66b3, - (q15_t)0x66af, (q15_t)0x66ab, (q15_t)0x66a8, (q15_t)0x66a4, (q15_t)0x66a0, (q15_t)0x669c, (q15_t)0x6699, (q15_t)0x6695, - (q15_t)0x6691, (q15_t)0x668d, (q15_t)0x668a, (q15_t)0x6686, (q15_t)0x6682, (q15_t)0x667e, (q15_t)0x667b, (q15_t)0x6677, - (q15_t)0x6673, (q15_t)0x666f, (q15_t)0x666b, (q15_t)0x6668, (q15_t)0x6664, (q15_t)0x6660, (q15_t)0x665c, (q15_t)0x6659, - (q15_t)0x6655, (q15_t)0x6651, (q15_t)0x664d, (q15_t)0x664a, (q15_t)0x6646, (q15_t)0x6642, (q15_t)0x663e, (q15_t)0x663a, - (q15_t)0x6637, (q15_t)0x6633, (q15_t)0x662f, (q15_t)0x662b, (q15_t)0x6627, (q15_t)0x6624, (q15_t)0x6620, (q15_t)0x661c, - (q15_t)0x6618, (q15_t)0x6615, (q15_t)0x6611, (q15_t)0x660d, (q15_t)0x6609, (q15_t)0x6605, (q15_t)0x6602, (q15_t)0x65fe, - (q15_t)0x65fa, (q15_t)0x65f6, (q15_t)0x65f2, (q15_t)0x65ef, (q15_t)0x65eb, (q15_t)0x65e7, (q15_t)0x65e3, (q15_t)0x65df, - (q15_t)0x65dc, (q15_t)0x65d8, (q15_t)0x65d4, (q15_t)0x65d0, (q15_t)0x65cc, (q15_t)0x65c9, (q15_t)0x65c5, (q15_t)0x65c1, - (q15_t)0x65bd, (q15_t)0x65b9, (q15_t)0x65b5, (q15_t)0x65b2, (q15_t)0x65ae, (q15_t)0x65aa, (q15_t)0x65a6, (q15_t)0x65a2, - (q15_t)0x659f, (q15_t)0x659b, (q15_t)0x6597, (q15_t)0x6593, (q15_t)0x658f, (q15_t)0x658b, (q15_t)0x6588, (q15_t)0x6584, - (q15_t)0x6580, (q15_t)0x657c, (q15_t)0x6578, (q15_t)0x6574, (q15_t)0x6571, (q15_t)0x656d, (q15_t)0x6569, (q15_t)0x6565, - (q15_t)0x6561, (q15_t)0x655d, (q15_t)0x655a, (q15_t)0x6556, (q15_t)0x6552, (q15_t)0x654e, (q15_t)0x654a, (q15_t)0x6546, - (q15_t)0x6543, (q15_t)0x653f, (q15_t)0x653b, (q15_t)0x6537, (q15_t)0x6533, (q15_t)0x652f, (q15_t)0x652c, (q15_t)0x6528, - (q15_t)0x6524, (q15_t)0x6520, (q15_t)0x651c, (q15_t)0x6518, (q15_t)0x6514, (q15_t)0x6511, (q15_t)0x650d, (q15_t)0x6509, - (q15_t)0x6505, (q15_t)0x6501, (q15_t)0x64fd, (q15_t)0x64f9, (q15_t)0x64f6, (q15_t)0x64f2, (q15_t)0x64ee, (q15_t)0x64ea, - (q15_t)0x64e6, (q15_t)0x64e2, (q15_t)0x64de, (q15_t)0x64db, (q15_t)0x64d7, (q15_t)0x64d3, (q15_t)0x64cf, (q15_t)0x64cb, - (q15_t)0x64c7, (q15_t)0x64c3, (q15_t)0x64bf, (q15_t)0x64bc, (q15_t)0x64b8, (q15_t)0x64b4, (q15_t)0x64b0, (q15_t)0x64ac, - (q15_t)0x64a8, (q15_t)0x64a4, (q15_t)0x64a0, (q15_t)0x649c, (q15_t)0x6499, (q15_t)0x6495, (q15_t)0x6491, (q15_t)0x648d, - (q15_t)0x6489, (q15_t)0x6485, (q15_t)0x6481, (q15_t)0x647d, (q15_t)0x6479, (q15_t)0x6476, (q15_t)0x6472, (q15_t)0x646e, - (q15_t)0x646a, (q15_t)0x6466, (q15_t)0x6462, (q15_t)0x645e, (q15_t)0x645a, (q15_t)0x6456, (q15_t)0x6453, (q15_t)0x644f, - (q15_t)0x644b, (q15_t)0x6447, (q15_t)0x6443, (q15_t)0x643f, (q15_t)0x643b, (q15_t)0x6437, (q15_t)0x6433, (q15_t)0x642f, - (q15_t)0x642b, (q15_t)0x6428, (q15_t)0x6424, (q15_t)0x6420, (q15_t)0x641c, (q15_t)0x6418, (q15_t)0x6414, (q15_t)0x6410, - (q15_t)0x640c, (q15_t)0x6408, (q15_t)0x6404, (q15_t)0x6400, (q15_t)0x63fc, (q15_t)0x63f9, (q15_t)0x63f5, (q15_t)0x63f1, - (q15_t)0x63ed, (q15_t)0x63e9, (q15_t)0x63e5, (q15_t)0x63e1, (q15_t)0x63dd, (q15_t)0x63d9, (q15_t)0x63d5, (q15_t)0x63d1, - (q15_t)0x63cd, (q15_t)0x63c9, (q15_t)0x63c5, (q15_t)0x63c1, (q15_t)0x63be, (q15_t)0x63ba, (q15_t)0x63b6, (q15_t)0x63b2, - (q15_t)0x63ae, (q15_t)0x63aa, (q15_t)0x63a6, (q15_t)0x63a2, (q15_t)0x639e, (q15_t)0x639a, (q15_t)0x6396, (q15_t)0x6392, - (q15_t)0x638e, (q15_t)0x638a, (q15_t)0x6386, (q15_t)0x6382, (q15_t)0x637e, (q15_t)0x637a, (q15_t)0x6377, (q15_t)0x6373, - (q15_t)0x636f, (q15_t)0x636b, (q15_t)0x6367, (q15_t)0x6363, (q15_t)0x635f, (q15_t)0x635b, (q15_t)0x6357, (q15_t)0x6353, - (q15_t)0x634f, (q15_t)0x634b, (q15_t)0x6347, (q15_t)0x6343, (q15_t)0x633f, (q15_t)0x633b, (q15_t)0x6337, (q15_t)0x6333, - (q15_t)0x632f, (q15_t)0x632b, (q15_t)0x6327, (q15_t)0x6323, (q15_t)0x631f, (q15_t)0x631b, (q15_t)0x6317, (q15_t)0x6313, - (q15_t)0x630f, (q15_t)0x630b, (q15_t)0x6307, (q15_t)0x6303, (q15_t)0x62ff, (q15_t)0x62fb, (q15_t)0x62f7, (q15_t)0x62f3, - (q15_t)0x62f0, (q15_t)0x62ec, (q15_t)0x62e8, (q15_t)0x62e4, (q15_t)0x62e0, (q15_t)0x62dc, (q15_t)0x62d8, (q15_t)0x62d4, - (q15_t)0x62d0, (q15_t)0x62cc, (q15_t)0x62c8, (q15_t)0x62c4, (q15_t)0x62c0, (q15_t)0x62bc, (q15_t)0x62b8, (q15_t)0x62b4, - (q15_t)0x62b0, (q15_t)0x62ac, (q15_t)0x62a8, (q15_t)0x62a4, (q15_t)0x62a0, (q15_t)0x629c, (q15_t)0x6298, (q15_t)0x6294, - (q15_t)0x6290, (q15_t)0x628c, (q15_t)0x6288, (q15_t)0x6284, (q15_t)0x6280, (q15_t)0x627c, (q15_t)0x6278, (q15_t)0x6273, - (q15_t)0x626f, (q15_t)0x626b, (q15_t)0x6267, (q15_t)0x6263, (q15_t)0x625f, (q15_t)0x625b, (q15_t)0x6257, (q15_t)0x6253, - (q15_t)0x624f, (q15_t)0x624b, (q15_t)0x6247, (q15_t)0x6243, (q15_t)0x623f, (q15_t)0x623b, (q15_t)0x6237, (q15_t)0x6233, - (q15_t)0x622f, (q15_t)0x622b, (q15_t)0x6227, (q15_t)0x6223, (q15_t)0x621f, (q15_t)0x621b, (q15_t)0x6217, (q15_t)0x6213, - (q15_t)0x620f, (q15_t)0x620b, (q15_t)0x6207, (q15_t)0x6203, (q15_t)0x61ff, (q15_t)0x61fb, (q15_t)0x61f7, (q15_t)0x61f3, - (q15_t)0x61ee, (q15_t)0x61ea, (q15_t)0x61e6, (q15_t)0x61e2, (q15_t)0x61de, (q15_t)0x61da, (q15_t)0x61d6, (q15_t)0x61d2, - (q15_t)0x61ce, (q15_t)0x61ca, (q15_t)0x61c6, (q15_t)0x61c2, (q15_t)0x61be, (q15_t)0x61ba, (q15_t)0x61b6, (q15_t)0x61b2, - (q15_t)0x61ae, (q15_t)0x61aa, (q15_t)0x61a6, (q15_t)0x61a1, (q15_t)0x619d, (q15_t)0x6199, (q15_t)0x6195, (q15_t)0x6191, - (q15_t)0x618d, (q15_t)0x6189, (q15_t)0x6185, (q15_t)0x6181, (q15_t)0x617d, (q15_t)0x6179, (q15_t)0x6175, (q15_t)0x6171, - (q15_t)0x616d, (q15_t)0x6168, (q15_t)0x6164, (q15_t)0x6160, (q15_t)0x615c, (q15_t)0x6158, (q15_t)0x6154, (q15_t)0x6150, - (q15_t)0x614c, (q15_t)0x6148, (q15_t)0x6144, (q15_t)0x6140, (q15_t)0x613c, (q15_t)0x6137, (q15_t)0x6133, (q15_t)0x612f, - (q15_t)0x612b, (q15_t)0x6127, (q15_t)0x6123, (q15_t)0x611f, (q15_t)0x611b, (q15_t)0x6117, (q15_t)0x6113, (q15_t)0x610f, - (q15_t)0x610a, (q15_t)0x6106, (q15_t)0x6102, (q15_t)0x60fe, (q15_t)0x60fa, (q15_t)0x60f6, (q15_t)0x60f2, (q15_t)0x60ee, - (q15_t)0x60ea, (q15_t)0x60e6, (q15_t)0x60e1, (q15_t)0x60dd, (q15_t)0x60d9, (q15_t)0x60d5, (q15_t)0x60d1, (q15_t)0x60cd, - (q15_t)0x60c9, (q15_t)0x60c5, (q15_t)0x60c1, (q15_t)0x60bc, (q15_t)0x60b8, (q15_t)0x60b4, (q15_t)0x60b0, (q15_t)0x60ac, - (q15_t)0x60a8, (q15_t)0x60a4, (q15_t)0x60a0, (q15_t)0x609c, (q15_t)0x6097, (q15_t)0x6093, (q15_t)0x608f, (q15_t)0x608b, - (q15_t)0x6087, (q15_t)0x6083, (q15_t)0x607f, (q15_t)0x607b, (q15_t)0x6076, (q15_t)0x6072, (q15_t)0x606e, (q15_t)0x606a, - (q15_t)0x6066, (q15_t)0x6062, (q15_t)0x605e, (q15_t)0x6059, (q15_t)0x6055, (q15_t)0x6051, (q15_t)0x604d, (q15_t)0x6049, - (q15_t)0x6045, (q15_t)0x6041, (q15_t)0x603c, (q15_t)0x6038, (q15_t)0x6034, (q15_t)0x6030, (q15_t)0x602c, (q15_t)0x6028, - (q15_t)0x6024, (q15_t)0x601f, (q15_t)0x601b, (q15_t)0x6017, (q15_t)0x6013, (q15_t)0x600f, (q15_t)0x600b, (q15_t)0x6007, - (q15_t)0x6002, (q15_t)0x5ffe, (q15_t)0x5ffa, (q15_t)0x5ff6, (q15_t)0x5ff2, (q15_t)0x5fee, (q15_t)0x5fe9, (q15_t)0x5fe5, - (q15_t)0x5fe1, (q15_t)0x5fdd, (q15_t)0x5fd9, (q15_t)0x5fd5, (q15_t)0x5fd0, (q15_t)0x5fcc, (q15_t)0x5fc8, (q15_t)0x5fc4, - (q15_t)0x5fc0, (q15_t)0x5fbc, (q15_t)0x5fb7, (q15_t)0x5fb3, (q15_t)0x5faf, (q15_t)0x5fab, (q15_t)0x5fa7, (q15_t)0x5fa3, - (q15_t)0x5f9e, (q15_t)0x5f9a, (q15_t)0x5f96, (q15_t)0x5f92, (q15_t)0x5f8e, (q15_t)0x5f8a, (q15_t)0x5f85, (q15_t)0x5f81, - (q15_t)0x5f7d, (q15_t)0x5f79, (q15_t)0x5f75, (q15_t)0x5f70, (q15_t)0x5f6c, (q15_t)0x5f68, (q15_t)0x5f64, (q15_t)0x5f60, - (q15_t)0x5f5b, (q15_t)0x5f57, (q15_t)0x5f53, (q15_t)0x5f4f, (q15_t)0x5f4b, (q15_t)0x5f46, (q15_t)0x5f42, (q15_t)0x5f3e, - (q15_t)0x5f3a, (q15_t)0x5f36, (q15_t)0x5f31, (q15_t)0x5f2d, (q15_t)0x5f29, (q15_t)0x5f25, (q15_t)0x5f21, (q15_t)0x5f1c, - (q15_t)0x5f18, (q15_t)0x5f14, (q15_t)0x5f10, (q15_t)0x5f0c, (q15_t)0x5f07, (q15_t)0x5f03, (q15_t)0x5eff, (q15_t)0x5efb, - (q15_t)0x5ef7, (q15_t)0x5ef2, (q15_t)0x5eee, (q15_t)0x5eea, (q15_t)0x5ee6, (q15_t)0x5ee2, (q15_t)0x5edd, (q15_t)0x5ed9, - (q15_t)0x5ed5, (q15_t)0x5ed1, (q15_t)0x5ecc, (q15_t)0x5ec8, (q15_t)0x5ec4, (q15_t)0x5ec0, (q15_t)0x5ebc, (q15_t)0x5eb7, - (q15_t)0x5eb3, (q15_t)0x5eaf, (q15_t)0x5eab, (q15_t)0x5ea6, (q15_t)0x5ea2, (q15_t)0x5e9e, (q15_t)0x5e9a, (q15_t)0x5e95, - (q15_t)0x5e91, (q15_t)0x5e8d, (q15_t)0x5e89, (q15_t)0x5e85, (q15_t)0x5e80, (q15_t)0x5e7c, (q15_t)0x5e78, (q15_t)0x5e74, - (q15_t)0x5e6f, (q15_t)0x5e6b, (q15_t)0x5e67, (q15_t)0x5e63, (q15_t)0x5e5e, (q15_t)0x5e5a, (q15_t)0x5e56, (q15_t)0x5e52, - (q15_t)0x5e4d, (q15_t)0x5e49, (q15_t)0x5e45, (q15_t)0x5e41, (q15_t)0x5e3c, (q15_t)0x5e38, (q15_t)0x5e34, (q15_t)0x5e30, - (q15_t)0x5e2b, (q15_t)0x5e27, (q15_t)0x5e23, (q15_t)0x5e1f, (q15_t)0x5e1a, (q15_t)0x5e16, (q15_t)0x5e12, (q15_t)0x5e0e, - (q15_t)0x5e09, (q15_t)0x5e05, (q15_t)0x5e01, (q15_t)0x5dfd, (q15_t)0x5df8, (q15_t)0x5df4, (q15_t)0x5df0, (q15_t)0x5deb, - (q15_t)0x5de7, (q15_t)0x5de3, (q15_t)0x5ddf, (q15_t)0x5dda, (q15_t)0x5dd6, (q15_t)0x5dd2, (q15_t)0x5dce, (q15_t)0x5dc9, - (q15_t)0x5dc5, (q15_t)0x5dc1, (q15_t)0x5dbc, (q15_t)0x5db8, (q15_t)0x5db4, (q15_t)0x5db0, (q15_t)0x5dab, (q15_t)0x5da7, - (q15_t)0x5da3, (q15_t)0x5d9e, (q15_t)0x5d9a, (q15_t)0x5d96, (q15_t)0x5d92, (q15_t)0x5d8d, (q15_t)0x5d89, (q15_t)0x5d85, - (q15_t)0x5d80, (q15_t)0x5d7c, (q15_t)0x5d78, (q15_t)0x5d74, (q15_t)0x5d6f, (q15_t)0x5d6b, (q15_t)0x5d67, (q15_t)0x5d62, - (q15_t)0x5d5e, (q15_t)0x5d5a, (q15_t)0x5d55, (q15_t)0x5d51, (q15_t)0x5d4d, (q15_t)0x5d49, (q15_t)0x5d44, (q15_t)0x5d40, - (q15_t)0x5d3c, (q15_t)0x5d37, (q15_t)0x5d33, (q15_t)0x5d2f, (q15_t)0x5d2a, (q15_t)0x5d26, (q15_t)0x5d22, (q15_t)0x5d1e, - (q15_t)0x5d19, (q15_t)0x5d15, (q15_t)0x5d11, (q15_t)0x5d0c, (q15_t)0x5d08, (q15_t)0x5d04, (q15_t)0x5cff, (q15_t)0x5cfb, - (q15_t)0x5cf7, (q15_t)0x5cf2, (q15_t)0x5cee, (q15_t)0x5cea, (q15_t)0x5ce5, (q15_t)0x5ce1, (q15_t)0x5cdd, (q15_t)0x5cd8, - (q15_t)0x5cd4, (q15_t)0x5cd0, (q15_t)0x5ccb, (q15_t)0x5cc7, (q15_t)0x5cc3, (q15_t)0x5cbe, (q15_t)0x5cba, (q15_t)0x5cb6, - (q15_t)0x5cb1, (q15_t)0x5cad, (q15_t)0x5ca9, (q15_t)0x5ca4, (q15_t)0x5ca0, (q15_t)0x5c9c, (q15_t)0x5c97, (q15_t)0x5c93, - (q15_t)0x5c8f, (q15_t)0x5c8a, (q15_t)0x5c86, (q15_t)0x5c82, (q15_t)0x5c7d, (q15_t)0x5c79, (q15_t)0x5c75, (q15_t)0x5c70, - (q15_t)0x5c6c, (q15_t)0x5c68, (q15_t)0x5c63, (q15_t)0x5c5f, (q15_t)0x5c5b, (q15_t)0x5c56, (q15_t)0x5c52, (q15_t)0x5c4e, - (q15_t)0x5c49, (q15_t)0x5c45, (q15_t)0x5c41, (q15_t)0x5c3c, (q15_t)0x5c38, (q15_t)0x5c33, (q15_t)0x5c2f, (q15_t)0x5c2b, - (q15_t)0x5c26, (q15_t)0x5c22, (q15_t)0x5c1e, (q15_t)0x5c19, (q15_t)0x5c15, (q15_t)0x5c11, (q15_t)0x5c0c, (q15_t)0x5c08, - (q15_t)0x5c03, (q15_t)0x5bff, (q15_t)0x5bfb, (q15_t)0x5bf6, (q15_t)0x5bf2, (q15_t)0x5bee, (q15_t)0x5be9, (q15_t)0x5be5, - (q15_t)0x5be0, (q15_t)0x5bdc, (q15_t)0x5bd8, (q15_t)0x5bd3, (q15_t)0x5bcf, (q15_t)0x5bcb, (q15_t)0x5bc6, (q15_t)0x5bc2, - (q15_t)0x5bbd, (q15_t)0x5bb9, (q15_t)0x5bb5, (q15_t)0x5bb0, (q15_t)0x5bac, (q15_t)0x5ba8, (q15_t)0x5ba3, (q15_t)0x5b9f, - (q15_t)0x5b9a, (q15_t)0x5b96, (q15_t)0x5b92, (q15_t)0x5b8d, (q15_t)0x5b89, (q15_t)0x5b84, (q15_t)0x5b80, (q15_t)0x5b7c, - (q15_t)0x5b77, (q15_t)0x5b73, (q15_t)0x5b6e, (q15_t)0x5b6a, (q15_t)0x5b66, (q15_t)0x5b61, (q15_t)0x5b5d, (q15_t)0x5b58, - (q15_t)0x5b54, (q15_t)0x5b50, (q15_t)0x5b4b, (q15_t)0x5b47, (q15_t)0x5b42, (q15_t)0x5b3e, (q15_t)0x5b3a, (q15_t)0x5b35, - (q15_t)0x5b31, (q15_t)0x5b2c, (q15_t)0x5b28, (q15_t)0x5b24, (q15_t)0x5b1f, (q15_t)0x5b1b, (q15_t)0x5b16, (q15_t)0x5b12, - (q15_t)0x5b0e, (q15_t)0x5b09, (q15_t)0x5b05, (q15_t)0x5b00, (q15_t)0x5afc, (q15_t)0x5af7, (q15_t)0x5af3, (q15_t)0x5aef, - (q15_t)0x5aea, (q15_t)0x5ae6, (q15_t)0x5ae1, (q15_t)0x5add, (q15_t)0x5ad8, (q15_t)0x5ad4, (q15_t)0x5ad0, (q15_t)0x5acb, - (q15_t)0x5ac7, (q15_t)0x5ac2, (q15_t)0x5abe, (q15_t)0x5ab9, (q15_t)0x5ab5, (q15_t)0x5ab1, (q15_t)0x5aac, (q15_t)0x5aa8, - (q15_t)0x5aa3, (q15_t)0x5a9f, (q15_t)0x5a9a, (q15_t)0x5a96, (q15_t)0x5a92, (q15_t)0x5a8d, (q15_t)0x5a89, (q15_t)0x5a84, - (q15_t)0x5a80, (q15_t)0x5a7b, (q15_t)0x5a77, (q15_t)0x5a72, (q15_t)0x5a6e, (q15_t)0x5a6a, (q15_t)0x5a65, (q15_t)0x5a61, - (q15_t)0x5a5c, (q15_t)0x5a58, (q15_t)0x5a53, (q15_t)0x5a4f, (q15_t)0x5a4a, (q15_t)0x5a46, (q15_t)0x5a41, (q15_t)0x5a3d, - (q15_t)0x5a39, (q15_t)0x5a34, (q15_t)0x5a30, (q15_t)0x5a2b, (q15_t)0x5a27, (q15_t)0x5a22, (q15_t)0x5a1e, (q15_t)0x5a19, - (q15_t)0x5a15, (q15_t)0x5a10, (q15_t)0x5a0c, (q15_t)0x5a07, (q15_t)0x5a03, (q15_t)0x59ff, (q15_t)0x59fa, (q15_t)0x59f6, - (q15_t)0x59f1, (q15_t)0x59ed, (q15_t)0x59e8, (q15_t)0x59e4, (q15_t)0x59df, (q15_t)0x59db, (q15_t)0x59d6, (q15_t)0x59d2, - (q15_t)0x59cd, (q15_t)0x59c9, (q15_t)0x59c4, (q15_t)0x59c0, (q15_t)0x59bb, (q15_t)0x59b7, (q15_t)0x59b2, (q15_t)0x59ae, - (q15_t)0x59a9, (q15_t)0x59a5, (q15_t)0x59a1, (q15_t)0x599c, (q15_t)0x5998, (q15_t)0x5993, (q15_t)0x598f, (q15_t)0x598a, - (q15_t)0x5986, (q15_t)0x5981, (q15_t)0x597d, (q15_t)0x5978, (q15_t)0x5974, (q15_t)0x596f, (q15_t)0x596b, (q15_t)0x5966, - (q15_t)0x5962, (q15_t)0x595d, (q15_t)0x5959, (q15_t)0x5954, (q15_t)0x5950, (q15_t)0x594b, (q15_t)0x5947, (q15_t)0x5942, - (q15_t)0x593e, (q15_t)0x5939, (q15_t)0x5935, (q15_t)0x5930, (q15_t)0x592c, (q15_t)0x5927, (q15_t)0x5923, (q15_t)0x591e, - (q15_t)0x591a, (q15_t)0x5915, (q15_t)0x5911, (q15_t)0x590c, (q15_t)0x5908, (q15_t)0x5903, (q15_t)0x58fe, (q15_t)0x58fa, - (q15_t)0x58f5, (q15_t)0x58f1, (q15_t)0x58ec, (q15_t)0x58e8, (q15_t)0x58e3, (q15_t)0x58df, (q15_t)0x58da, (q15_t)0x58d6, - (q15_t)0x58d1, (q15_t)0x58cd, (q15_t)0x58c8, (q15_t)0x58c4, (q15_t)0x58bf, (q15_t)0x58bb, (q15_t)0x58b6, (q15_t)0x58b2, - (q15_t)0x58ad, (q15_t)0x58a9, (q15_t)0x58a4, (q15_t)0x589f, (q15_t)0x589b, (q15_t)0x5896, (q15_t)0x5892, (q15_t)0x588d, - (q15_t)0x5889, (q15_t)0x5884, (q15_t)0x5880, (q15_t)0x587b, (q15_t)0x5877, (q15_t)0x5872, (q15_t)0x586e, (q15_t)0x5869, - (q15_t)0x5864, (q15_t)0x5860, (q15_t)0x585b, (q15_t)0x5857, (q15_t)0x5852, (q15_t)0x584e, (q15_t)0x5849, (q15_t)0x5845, - (q15_t)0x5840, (q15_t)0x583c, (q15_t)0x5837, (q15_t)0x5832, (q15_t)0x582e, (q15_t)0x5829, (q15_t)0x5825, (q15_t)0x5820, - (q15_t)0x581c, (q15_t)0x5817, (q15_t)0x5813, (q15_t)0x580e, (q15_t)0x5809, (q15_t)0x5805, (q15_t)0x5800, (q15_t)0x57fc, - (q15_t)0x57f7, (q15_t)0x57f3, (q15_t)0x57ee, (q15_t)0x57e9, (q15_t)0x57e5, (q15_t)0x57e0, (q15_t)0x57dc, (q15_t)0x57d7, - (q15_t)0x57d3, (q15_t)0x57ce, (q15_t)0x57c9, (q15_t)0x57c5, (q15_t)0x57c0, (q15_t)0x57bc, (q15_t)0x57b7, (q15_t)0x57b3, - (q15_t)0x57ae, (q15_t)0x57a9, (q15_t)0x57a5, (q15_t)0x57a0, (q15_t)0x579c, (q15_t)0x5797, (q15_t)0x5793, (q15_t)0x578e, - (q15_t)0x5789, (q15_t)0x5785, (q15_t)0x5780, (q15_t)0x577c, (q15_t)0x5777, (q15_t)0x5772, (q15_t)0x576e, (q15_t)0x5769, - (q15_t)0x5765, (q15_t)0x5760, (q15_t)0x575c, (q15_t)0x5757, (q15_t)0x5752, (q15_t)0x574e, (q15_t)0x5749, (q15_t)0x5745, - (q15_t)0x5740, (q15_t)0x573b, (q15_t)0x5737, (q15_t)0x5732, (q15_t)0x572e, (q15_t)0x5729, (q15_t)0x5724, (q15_t)0x5720, - (q15_t)0x571b, (q15_t)0x5717, (q15_t)0x5712, (q15_t)0x570d, (q15_t)0x5709, (q15_t)0x5704, (q15_t)0x56ff, (q15_t)0x56fb, - (q15_t)0x56f6, (q15_t)0x56f2, (q15_t)0x56ed, (q15_t)0x56e8, (q15_t)0x56e4, (q15_t)0x56df, (q15_t)0x56db, (q15_t)0x56d6, - (q15_t)0x56d1, (q15_t)0x56cd, (q15_t)0x56c8, (q15_t)0x56c4, (q15_t)0x56bf, (q15_t)0x56ba, (q15_t)0x56b6, (q15_t)0x56b1, - (q15_t)0x56ac, (q15_t)0x56a8, (q15_t)0x56a3, (q15_t)0x569f, (q15_t)0x569a, (q15_t)0x5695, (q15_t)0x5691, (q15_t)0x568c, - (q15_t)0x5687, (q15_t)0x5683, (q15_t)0x567e, (q15_t)0x5679, (q15_t)0x5675, (q15_t)0x5670, (q15_t)0x566c, (q15_t)0x5667, - (q15_t)0x5662, (q15_t)0x565e, (q15_t)0x5659, (q15_t)0x5654, (q15_t)0x5650, (q15_t)0x564b, (q15_t)0x5646, (q15_t)0x5642, - (q15_t)0x563d, (q15_t)0x5639, (q15_t)0x5634, (q15_t)0x562f, (q15_t)0x562b, (q15_t)0x5626, (q15_t)0x5621, (q15_t)0x561d, - (q15_t)0x5618, (q15_t)0x5613, (q15_t)0x560f, (q15_t)0x560a, (q15_t)0x5605, (q15_t)0x5601, (q15_t)0x55fc, (q15_t)0x55f7, - (q15_t)0x55f3, (q15_t)0x55ee, (q15_t)0x55ea, (q15_t)0x55e5, (q15_t)0x55e0, (q15_t)0x55dc, (q15_t)0x55d7, (q15_t)0x55d2, - (q15_t)0x55ce, (q15_t)0x55c9, (q15_t)0x55c4, (q15_t)0x55c0, (q15_t)0x55bb, (q15_t)0x55b6, (q15_t)0x55b2, (q15_t)0x55ad, - (q15_t)0x55a8, (q15_t)0x55a4, (q15_t)0x559f, (q15_t)0x559a, (q15_t)0x5596, (q15_t)0x5591, (q15_t)0x558c, (q15_t)0x5588, - (q15_t)0x5583, (q15_t)0x557e, (q15_t)0x5579, (q15_t)0x5575, (q15_t)0x5570, (q15_t)0x556b, (q15_t)0x5567, (q15_t)0x5562, - (q15_t)0x555d, (q15_t)0x5559, (q15_t)0x5554, (q15_t)0x554f, (q15_t)0x554b, (q15_t)0x5546, (q15_t)0x5541, (q15_t)0x553d, - (q15_t)0x5538, (q15_t)0x5533, (q15_t)0x552f, (q15_t)0x552a, (q15_t)0x5525, (q15_t)0x5520, (q15_t)0x551c, (q15_t)0x5517, - (q15_t)0x5512, (q15_t)0x550e, (q15_t)0x5509, (q15_t)0x5504, (q15_t)0x5500, (q15_t)0x54fb, (q15_t)0x54f6, (q15_t)0x54f2, - (q15_t)0x54ed, (q15_t)0x54e8, (q15_t)0x54e3, (q15_t)0x54df, (q15_t)0x54da, (q15_t)0x54d5, (q15_t)0x54d1, (q15_t)0x54cc, - (q15_t)0x54c7, (q15_t)0x54c2, (q15_t)0x54be, (q15_t)0x54b9, (q15_t)0x54b4, (q15_t)0x54b0, (q15_t)0x54ab, (q15_t)0x54a6, - (q15_t)0x54a2, (q15_t)0x549d, (q15_t)0x5498, (q15_t)0x5493, (q15_t)0x548f, (q15_t)0x548a, (q15_t)0x5485, (q15_t)0x5480, - (q15_t)0x547c, (q15_t)0x5477, (q15_t)0x5472, (q15_t)0x546e, (q15_t)0x5469, (q15_t)0x5464, (q15_t)0x545f, (q15_t)0x545b, - (q15_t)0x5456, (q15_t)0x5451, (q15_t)0x544d, (q15_t)0x5448, (q15_t)0x5443, (q15_t)0x543e, (q15_t)0x543a, (q15_t)0x5435, - (q15_t)0x5430, (q15_t)0x542b, (q15_t)0x5427, (q15_t)0x5422, (q15_t)0x541d, (q15_t)0x5418, (q15_t)0x5414, (q15_t)0x540f, - (q15_t)0x540a, (q15_t)0x5406, (q15_t)0x5401, (q15_t)0x53fc, (q15_t)0x53f7, (q15_t)0x53f3, (q15_t)0x53ee, (q15_t)0x53e9, - (q15_t)0x53e4, (q15_t)0x53e0, (q15_t)0x53db, (q15_t)0x53d6, (q15_t)0x53d1, (q15_t)0x53cd, (q15_t)0x53c8, (q15_t)0x53c3, - (q15_t)0x53be, (q15_t)0x53ba, (q15_t)0x53b5, (q15_t)0x53b0, (q15_t)0x53ab, (q15_t)0x53a7, (q15_t)0x53a2, (q15_t)0x539d, - (q15_t)0x5398, (q15_t)0x5394, (q15_t)0x538f, (q15_t)0x538a, (q15_t)0x5385, (q15_t)0x5380, (q15_t)0x537c, (q15_t)0x5377, - (q15_t)0x5372, (q15_t)0x536d, (q15_t)0x5369, (q15_t)0x5364, (q15_t)0x535f, (q15_t)0x535a, (q15_t)0x5356, (q15_t)0x5351, - (q15_t)0x534c, (q15_t)0x5347, (q15_t)0x5343, (q15_t)0x533e, (q15_t)0x5339, (q15_t)0x5334, (q15_t)0x532f, (q15_t)0x532b, - (q15_t)0x5326, (q15_t)0x5321, (q15_t)0x531c, (q15_t)0x5318, (q15_t)0x5313, (q15_t)0x530e, (q15_t)0x5309, (q15_t)0x5304, - (q15_t)0x5300, (q15_t)0x52fb, (q15_t)0x52f6, (q15_t)0x52f1, (q15_t)0x52ec, (q15_t)0x52e8, (q15_t)0x52e3, (q15_t)0x52de, - (q15_t)0x52d9, (q15_t)0x52d5, (q15_t)0x52d0, (q15_t)0x52cb, (q15_t)0x52c6, (q15_t)0x52c1, (q15_t)0x52bd, (q15_t)0x52b8, - (q15_t)0x52b3, (q15_t)0x52ae, (q15_t)0x52a9, (q15_t)0x52a5, (q15_t)0x52a0, (q15_t)0x529b, (q15_t)0x5296, (q15_t)0x5291, - (q15_t)0x528d, (q15_t)0x5288, (q15_t)0x5283, (q15_t)0x527e, (q15_t)0x5279, (q15_t)0x5275, (q15_t)0x5270, (q15_t)0x526b, - (q15_t)0x5266, (q15_t)0x5261, (q15_t)0x525d, (q15_t)0x5258, (q15_t)0x5253, (q15_t)0x524e, (q15_t)0x5249, (q15_t)0x5244, - (q15_t)0x5240, (q15_t)0x523b, (q15_t)0x5236, (q15_t)0x5231, (q15_t)0x522c, (q15_t)0x5228, (q15_t)0x5223, (q15_t)0x521e, - (q15_t)0x5219, (q15_t)0x5214, (q15_t)0x520f, (q15_t)0x520b, (q15_t)0x5206, (q15_t)0x5201, (q15_t)0x51fc, (q15_t)0x51f7, - (q15_t)0x51f3, (q15_t)0x51ee, (q15_t)0x51e9, (q15_t)0x51e4, (q15_t)0x51df, (q15_t)0x51da, (q15_t)0x51d6, (q15_t)0x51d1, - (q15_t)0x51cc, (q15_t)0x51c7, (q15_t)0x51c2, (q15_t)0x51bd, (q15_t)0x51b9, (q15_t)0x51b4, (q15_t)0x51af, (q15_t)0x51aa, - (q15_t)0x51a5, (q15_t)0x51a0, (q15_t)0x519c, (q15_t)0x5197, (q15_t)0x5192, (q15_t)0x518d, (q15_t)0x5188, (q15_t)0x5183, - (q15_t)0x517e, (q15_t)0x517a, (q15_t)0x5175, (q15_t)0x5170, (q15_t)0x516b, (q15_t)0x5166, (q15_t)0x5161, (q15_t)0x515d, - (q15_t)0x5158, (q15_t)0x5153, (q15_t)0x514e, (q15_t)0x5149, (q15_t)0x5144, (q15_t)0x513f, (q15_t)0x513b, (q15_t)0x5136, - (q15_t)0x5131, (q15_t)0x512c, (q15_t)0x5127, (q15_t)0x5122, (q15_t)0x511d, (q15_t)0x5119, (q15_t)0x5114, (q15_t)0x510f, - (q15_t)0x510a, (q15_t)0x5105, (q15_t)0x5100, (q15_t)0x50fb, (q15_t)0x50f7, (q15_t)0x50f2, (q15_t)0x50ed, (q15_t)0x50e8, - (q15_t)0x50e3, (q15_t)0x50de, (q15_t)0x50d9, (q15_t)0x50d4, (q15_t)0x50d0, (q15_t)0x50cb, (q15_t)0x50c6, (q15_t)0x50c1, - (q15_t)0x50bc, (q15_t)0x50b7, (q15_t)0x50b2, (q15_t)0x50ad, (q15_t)0x50a9, (q15_t)0x50a4, (q15_t)0x509f, (q15_t)0x509a, - (q15_t)0x5095, (q15_t)0x5090, (q15_t)0x508b, (q15_t)0x5086, (q15_t)0x5082, (q15_t)0x507d, (q15_t)0x5078, (q15_t)0x5073, - (q15_t)0x506e, (q15_t)0x5069, (q15_t)0x5064, (q15_t)0x505f, (q15_t)0x505a, (q15_t)0x5056, (q15_t)0x5051, (q15_t)0x504c, - (q15_t)0x5047, (q15_t)0x5042, (q15_t)0x503d, (q15_t)0x5038, (q15_t)0x5033, (q15_t)0x502e, (q15_t)0x5029, (q15_t)0x5025, - (q15_t)0x5020, (q15_t)0x501b, (q15_t)0x5016, (q15_t)0x5011, (q15_t)0x500c, (q15_t)0x5007, (q15_t)0x5002, (q15_t)0x4ffd, - (q15_t)0x4ff8, (q15_t)0x4ff4, (q15_t)0x4fef, (q15_t)0x4fea, (q15_t)0x4fe5, (q15_t)0x4fe0, (q15_t)0x4fdb, (q15_t)0x4fd6, - (q15_t)0x4fd1, (q15_t)0x4fcc, (q15_t)0x4fc7, (q15_t)0x4fc2, (q15_t)0x4fbe, (q15_t)0x4fb9, (q15_t)0x4fb4, (q15_t)0x4faf, - (q15_t)0x4faa, (q15_t)0x4fa5, (q15_t)0x4fa0, (q15_t)0x4f9b, (q15_t)0x4f96, (q15_t)0x4f91, (q15_t)0x4f8c, (q15_t)0x4f87, - (q15_t)0x4f82, (q15_t)0x4f7e, (q15_t)0x4f79, (q15_t)0x4f74, (q15_t)0x4f6f, (q15_t)0x4f6a, (q15_t)0x4f65, (q15_t)0x4f60, - (q15_t)0x4f5b, (q15_t)0x4f56, (q15_t)0x4f51, (q15_t)0x4f4c, (q15_t)0x4f47, (q15_t)0x4f42, (q15_t)0x4f3d, (q15_t)0x4f39, - (q15_t)0x4f34, (q15_t)0x4f2f, (q15_t)0x4f2a, (q15_t)0x4f25, (q15_t)0x4f20, (q15_t)0x4f1b, (q15_t)0x4f16, (q15_t)0x4f11, - (q15_t)0x4f0c, (q15_t)0x4f07, (q15_t)0x4f02, (q15_t)0x4efd, (q15_t)0x4ef8, (q15_t)0x4ef3, (q15_t)0x4eee, (q15_t)0x4ee9, - (q15_t)0x4ee5, (q15_t)0x4ee0, (q15_t)0x4edb, (q15_t)0x4ed6, (q15_t)0x4ed1, (q15_t)0x4ecc, (q15_t)0x4ec7, (q15_t)0x4ec2, - (q15_t)0x4ebd, (q15_t)0x4eb8, (q15_t)0x4eb3, (q15_t)0x4eae, (q15_t)0x4ea9, (q15_t)0x4ea4, (q15_t)0x4e9f, (q15_t)0x4e9a, - (q15_t)0x4e95, (q15_t)0x4e90, (q15_t)0x4e8b, (q15_t)0x4e86, (q15_t)0x4e81, (q15_t)0x4e7c, (q15_t)0x4e78, (q15_t)0x4e73, - (q15_t)0x4e6e, (q15_t)0x4e69, (q15_t)0x4e64, (q15_t)0x4e5f, (q15_t)0x4e5a, (q15_t)0x4e55, (q15_t)0x4e50, (q15_t)0x4e4b, - (q15_t)0x4e46, (q15_t)0x4e41, (q15_t)0x4e3c, (q15_t)0x4e37, (q15_t)0x4e32, (q15_t)0x4e2d, (q15_t)0x4e28, (q15_t)0x4e23, - (q15_t)0x4e1e, (q15_t)0x4e19, (q15_t)0x4e14, (q15_t)0x4e0f, (q15_t)0x4e0a, (q15_t)0x4e05, (q15_t)0x4e00, (q15_t)0x4dfb, - (q15_t)0x4df6, (q15_t)0x4df1, (q15_t)0x4dec, (q15_t)0x4de7, (q15_t)0x4de2, (q15_t)0x4ddd, (q15_t)0x4dd8, (q15_t)0x4dd3, - (q15_t)0x4dce, (q15_t)0x4dc9, (q15_t)0x4dc4, (q15_t)0x4dbf, (q15_t)0x4dba, (q15_t)0x4db5, (q15_t)0x4db0, (q15_t)0x4dab, - (q15_t)0x4da6, (q15_t)0x4da1, (q15_t)0x4d9c, (q15_t)0x4d97, (q15_t)0x4d92, (q15_t)0x4d8d, (q15_t)0x4d88, (q15_t)0x4d83, - (q15_t)0x4d7e, (q15_t)0x4d79, (q15_t)0x4d74, (q15_t)0x4d6f, (q15_t)0x4d6a, (q15_t)0x4d65, (q15_t)0x4d60, (q15_t)0x4d5b, - (q15_t)0x4d56, (q15_t)0x4d51, (q15_t)0x4d4c, (q15_t)0x4d47, (q15_t)0x4d42, (q15_t)0x4d3d, (q15_t)0x4d38, (q15_t)0x4d33, - (q15_t)0x4d2e, (q15_t)0x4d29, (q15_t)0x4d24, (q15_t)0x4d1f, (q15_t)0x4d1a, (q15_t)0x4d15, (q15_t)0x4d10, (q15_t)0x4d0b, - (q15_t)0x4d06, (q15_t)0x4d01, (q15_t)0x4cfc, (q15_t)0x4cf7, (q15_t)0x4cf2, (q15_t)0x4ced, (q15_t)0x4ce8, (q15_t)0x4ce3, - (q15_t)0x4cde, (q15_t)0x4cd9, (q15_t)0x4cd4, (q15_t)0x4ccf, (q15_t)0x4cca, (q15_t)0x4cc5, (q15_t)0x4cc0, (q15_t)0x4cbb, - (q15_t)0x4cb6, (q15_t)0x4cb1, (q15_t)0x4cac, (q15_t)0x4ca7, (q15_t)0x4ca2, (q15_t)0x4c9d, (q15_t)0x4c98, (q15_t)0x4c93, - (q15_t)0x4c8e, (q15_t)0x4c88, (q15_t)0x4c83, (q15_t)0x4c7e, (q15_t)0x4c79, (q15_t)0x4c74, (q15_t)0x4c6f, (q15_t)0x4c6a, - (q15_t)0x4c65, (q15_t)0x4c60, (q15_t)0x4c5b, (q15_t)0x4c56, (q15_t)0x4c51, (q15_t)0x4c4c, (q15_t)0x4c47, (q15_t)0x4c42, - (q15_t)0x4c3d, (q15_t)0x4c38, (q15_t)0x4c33, (q15_t)0x4c2e, (q15_t)0x4c29, (q15_t)0x4c24, (q15_t)0x4c1f, (q15_t)0x4c1a, - (q15_t)0x4c14, (q15_t)0x4c0f, (q15_t)0x4c0a, (q15_t)0x4c05, (q15_t)0x4c00, (q15_t)0x4bfb, (q15_t)0x4bf6, (q15_t)0x4bf1, - (q15_t)0x4bec, (q15_t)0x4be7, (q15_t)0x4be2, (q15_t)0x4bdd, (q15_t)0x4bd8, (q15_t)0x4bd3, (q15_t)0x4bce, (q15_t)0x4bc9, - (q15_t)0x4bc4, (q15_t)0x4bbe, (q15_t)0x4bb9, (q15_t)0x4bb4, (q15_t)0x4baf, (q15_t)0x4baa, (q15_t)0x4ba5, (q15_t)0x4ba0, - (q15_t)0x4b9b, (q15_t)0x4b96, (q15_t)0x4b91, (q15_t)0x4b8c, (q15_t)0x4b87, (q15_t)0x4b82, (q15_t)0x4b7d, (q15_t)0x4b77, - (q15_t)0x4b72, (q15_t)0x4b6d, (q15_t)0x4b68, (q15_t)0x4b63, (q15_t)0x4b5e, (q15_t)0x4b59, (q15_t)0x4b54, (q15_t)0x4b4f, - (q15_t)0x4b4a, (q15_t)0x4b45, (q15_t)0x4b40, (q15_t)0x4b3b, (q15_t)0x4b35, (q15_t)0x4b30, (q15_t)0x4b2b, (q15_t)0x4b26, - (q15_t)0x4b21, (q15_t)0x4b1c, (q15_t)0x4b17, (q15_t)0x4b12, (q15_t)0x4b0d, (q15_t)0x4b08, (q15_t)0x4b03, (q15_t)0x4afd, - (q15_t)0x4af8, (q15_t)0x4af3, (q15_t)0x4aee, (q15_t)0x4ae9, (q15_t)0x4ae4, (q15_t)0x4adf, (q15_t)0x4ada, (q15_t)0x4ad5, - (q15_t)0x4ad0, (q15_t)0x4acb, (q15_t)0x4ac5, (q15_t)0x4ac0, (q15_t)0x4abb, (q15_t)0x4ab6, (q15_t)0x4ab1, (q15_t)0x4aac, - (q15_t)0x4aa7, (q15_t)0x4aa2, (q15_t)0x4a9d, (q15_t)0x4a97, (q15_t)0x4a92, (q15_t)0x4a8d, (q15_t)0x4a88, (q15_t)0x4a83, - (q15_t)0x4a7e, (q15_t)0x4a79, (q15_t)0x4a74, (q15_t)0x4a6f, (q15_t)0x4a6a, (q15_t)0x4a64, (q15_t)0x4a5f, (q15_t)0x4a5a, - (q15_t)0x4a55, (q15_t)0x4a50, (q15_t)0x4a4b, (q15_t)0x4a46, (q15_t)0x4a41, (q15_t)0x4a3b, (q15_t)0x4a36, (q15_t)0x4a31, - (q15_t)0x4a2c, (q15_t)0x4a27, (q15_t)0x4a22, (q15_t)0x4a1d, (q15_t)0x4a18, (q15_t)0x4a12, (q15_t)0x4a0d, (q15_t)0x4a08, - (q15_t)0x4a03, (q15_t)0x49fe, (q15_t)0x49f9, (q15_t)0x49f4, (q15_t)0x49ef, (q15_t)0x49e9, (q15_t)0x49e4, (q15_t)0x49df, - (q15_t)0x49da, (q15_t)0x49d5, (q15_t)0x49d0, (q15_t)0x49cb, (q15_t)0x49c6, (q15_t)0x49c0, (q15_t)0x49bb, (q15_t)0x49b6, - (q15_t)0x49b1, (q15_t)0x49ac, (q15_t)0x49a7, (q15_t)0x49a2, (q15_t)0x499c, (q15_t)0x4997, (q15_t)0x4992, (q15_t)0x498d, - (q15_t)0x4988, (q15_t)0x4983, (q15_t)0x497e, (q15_t)0x4978, (q15_t)0x4973, (q15_t)0x496e, (q15_t)0x4969, (q15_t)0x4964, - (q15_t)0x495f, (q15_t)0x495a, (q15_t)0x4954, (q15_t)0x494f, (q15_t)0x494a, (q15_t)0x4945, (q15_t)0x4940, (q15_t)0x493b, - (q15_t)0x4936, (q15_t)0x4930, (q15_t)0x492b, (q15_t)0x4926, (q15_t)0x4921, (q15_t)0x491c, (q15_t)0x4917, (q15_t)0x4911, - (q15_t)0x490c, (q15_t)0x4907, (q15_t)0x4902, (q15_t)0x48fd, (q15_t)0x48f8, (q15_t)0x48f2, (q15_t)0x48ed, (q15_t)0x48e8, - (q15_t)0x48e3, (q15_t)0x48de, (q15_t)0x48d9, (q15_t)0x48d3, (q15_t)0x48ce, (q15_t)0x48c9, (q15_t)0x48c4, (q15_t)0x48bf, - (q15_t)0x48ba, (q15_t)0x48b4, (q15_t)0x48af, (q15_t)0x48aa, (q15_t)0x48a5, (q15_t)0x48a0, (q15_t)0x489b, (q15_t)0x4895, - (q15_t)0x4890, (q15_t)0x488b, (q15_t)0x4886, (q15_t)0x4881, (q15_t)0x487c, (q15_t)0x4876, (q15_t)0x4871, (q15_t)0x486c, - (q15_t)0x4867, (q15_t)0x4862, (q15_t)0x485c, (q15_t)0x4857, (q15_t)0x4852, (q15_t)0x484d, (q15_t)0x4848, (q15_t)0x4843, - (q15_t)0x483d, (q15_t)0x4838, (q15_t)0x4833, (q15_t)0x482e, (q15_t)0x4829, (q15_t)0x4823, (q15_t)0x481e, (q15_t)0x4819, - (q15_t)0x4814, (q15_t)0x480f, (q15_t)0x4809, (q15_t)0x4804, (q15_t)0x47ff, (q15_t)0x47fa, (q15_t)0x47f5, (q15_t)0x47ef, - (q15_t)0x47ea, (q15_t)0x47e5, (q15_t)0x47e0, (q15_t)0x47db, (q15_t)0x47d5, (q15_t)0x47d0, (q15_t)0x47cb, (q15_t)0x47c6, - (q15_t)0x47c1, (q15_t)0x47bb, (q15_t)0x47b6, (q15_t)0x47b1, (q15_t)0x47ac, (q15_t)0x47a7, (q15_t)0x47a1, (q15_t)0x479c, - (q15_t)0x4797, (q15_t)0x4792, (q15_t)0x478d, (q15_t)0x4787, (q15_t)0x4782, (q15_t)0x477d, (q15_t)0x4778, (q15_t)0x4773, - (q15_t)0x476d, (q15_t)0x4768, (q15_t)0x4763, (q15_t)0x475e, (q15_t)0x4758, (q15_t)0x4753, (q15_t)0x474e, (q15_t)0x4749, - (q15_t)0x4744, (q15_t)0x473e, (q15_t)0x4739, (q15_t)0x4734, (q15_t)0x472f, (q15_t)0x4729, (q15_t)0x4724, (q15_t)0x471f, - (q15_t)0x471a, (q15_t)0x4715, (q15_t)0x470f, (q15_t)0x470a, (q15_t)0x4705, (q15_t)0x4700, (q15_t)0x46fa, (q15_t)0x46f5, - (q15_t)0x46f0, (q15_t)0x46eb, (q15_t)0x46e6, (q15_t)0x46e0, (q15_t)0x46db, (q15_t)0x46d6, (q15_t)0x46d1, (q15_t)0x46cb, - (q15_t)0x46c6, (q15_t)0x46c1, (q15_t)0x46bc, (q15_t)0x46b6, (q15_t)0x46b1, (q15_t)0x46ac, (q15_t)0x46a7, (q15_t)0x46a1, - (q15_t)0x469c, (q15_t)0x4697, (q15_t)0x4692, (q15_t)0x468d, (q15_t)0x4687, (q15_t)0x4682, (q15_t)0x467d, (q15_t)0x4678, - (q15_t)0x4672, (q15_t)0x466d, (q15_t)0x4668, (q15_t)0x4663, (q15_t)0x465d, (q15_t)0x4658, (q15_t)0x4653, (q15_t)0x464e, - (q15_t)0x4648, (q15_t)0x4643, (q15_t)0x463e, (q15_t)0x4639, (q15_t)0x4633, (q15_t)0x462e, (q15_t)0x4629, (q15_t)0x4624, - (q15_t)0x461e, (q15_t)0x4619, (q15_t)0x4614, (q15_t)0x460e, (q15_t)0x4609, (q15_t)0x4604, (q15_t)0x45ff, (q15_t)0x45f9, - (q15_t)0x45f4, (q15_t)0x45ef, (q15_t)0x45ea, (q15_t)0x45e4, (q15_t)0x45df, (q15_t)0x45da, (q15_t)0x45d5, (q15_t)0x45cf, - (q15_t)0x45ca, (q15_t)0x45c5, (q15_t)0x45c0, (q15_t)0x45ba, (q15_t)0x45b5, (q15_t)0x45b0, (q15_t)0x45aa, (q15_t)0x45a5, - (q15_t)0x45a0, (q15_t)0x459b, (q15_t)0x4595, (q15_t)0x4590, (q15_t)0x458b, (q15_t)0x4586, (q15_t)0x4580, (q15_t)0x457b, - (q15_t)0x4576, (q15_t)0x4570, (q15_t)0x456b, (q15_t)0x4566, (q15_t)0x4561, (q15_t)0x455b, (q15_t)0x4556, (q15_t)0x4551, - (q15_t)0x454b, (q15_t)0x4546, (q15_t)0x4541, (q15_t)0x453c, (q15_t)0x4536, (q15_t)0x4531, (q15_t)0x452c, (q15_t)0x4526, - (q15_t)0x4521, (q15_t)0x451c, (q15_t)0x4517, (q15_t)0x4511, (q15_t)0x450c, (q15_t)0x4507, (q15_t)0x4501, (q15_t)0x44fc, - (q15_t)0x44f7, (q15_t)0x44f2, (q15_t)0x44ec, (q15_t)0x44e7, (q15_t)0x44e2, (q15_t)0x44dc, (q15_t)0x44d7, (q15_t)0x44d2, - (q15_t)0x44cd, (q15_t)0x44c7, (q15_t)0x44c2, (q15_t)0x44bd, (q15_t)0x44b7, (q15_t)0x44b2, (q15_t)0x44ad, (q15_t)0x44a7, - (q15_t)0x44a2, (q15_t)0x449d, (q15_t)0x4497, (q15_t)0x4492, (q15_t)0x448d, (q15_t)0x4488, (q15_t)0x4482, (q15_t)0x447d, - (q15_t)0x4478, (q15_t)0x4472, (q15_t)0x446d, (q15_t)0x4468, (q15_t)0x4462, (q15_t)0x445d, (q15_t)0x4458, (q15_t)0x4452, - (q15_t)0x444d, (q15_t)0x4448, (q15_t)0x4443, (q15_t)0x443d, (q15_t)0x4438, (q15_t)0x4433, (q15_t)0x442d, (q15_t)0x4428, - (q15_t)0x4423, (q15_t)0x441d, (q15_t)0x4418, (q15_t)0x4413, (q15_t)0x440d, (q15_t)0x4408, (q15_t)0x4403, (q15_t)0x43fd, - (q15_t)0x43f8, (q15_t)0x43f3, (q15_t)0x43ed, (q15_t)0x43e8, (q15_t)0x43e3, (q15_t)0x43dd, (q15_t)0x43d8, (q15_t)0x43d3, - (q15_t)0x43cd, (q15_t)0x43c8, (q15_t)0x43c3, (q15_t)0x43bd, (q15_t)0x43b8, (q15_t)0x43b3, (q15_t)0x43ad, (q15_t)0x43a8, - (q15_t)0x43a3, (q15_t)0x439d, (q15_t)0x4398, (q15_t)0x4393, (q15_t)0x438d, (q15_t)0x4388, (q15_t)0x4383, (q15_t)0x437d, - (q15_t)0x4378, (q15_t)0x4373, (q15_t)0x436d, (q15_t)0x4368, (q15_t)0x4363, (q15_t)0x435d, (q15_t)0x4358, (q15_t)0x4353, - (q15_t)0x434d, (q15_t)0x4348, (q15_t)0x4343, (q15_t)0x433d, (q15_t)0x4338, (q15_t)0x4333, (q15_t)0x432d, (q15_t)0x4328, - (q15_t)0x4323, (q15_t)0x431d, (q15_t)0x4318, (q15_t)0x4313, (q15_t)0x430d, (q15_t)0x4308, (q15_t)0x4302, (q15_t)0x42fd, - (q15_t)0x42f8, (q15_t)0x42f2, (q15_t)0x42ed, (q15_t)0x42e8, (q15_t)0x42e2, (q15_t)0x42dd, (q15_t)0x42d8, (q15_t)0x42d2, - (q15_t)0x42cd, (q15_t)0x42c8, (q15_t)0x42c2, (q15_t)0x42bd, (q15_t)0x42b7, (q15_t)0x42b2, (q15_t)0x42ad, (q15_t)0x42a7, - (q15_t)0x42a2, (q15_t)0x429d, (q15_t)0x4297, (q15_t)0x4292, (q15_t)0x428d, (q15_t)0x4287, (q15_t)0x4282, (q15_t)0x427c, - (q15_t)0x4277, (q15_t)0x4272, (q15_t)0x426c, (q15_t)0x4267, (q15_t)0x4262, (q15_t)0x425c, (q15_t)0x4257, (q15_t)0x4251, - (q15_t)0x424c, (q15_t)0x4247, (q15_t)0x4241, (q15_t)0x423c, (q15_t)0x4237, (q15_t)0x4231, (q15_t)0x422c, (q15_t)0x4226, - (q15_t)0x4221, (q15_t)0x421c, (q15_t)0x4216, (q15_t)0x4211, (q15_t)0x420c, (q15_t)0x4206, (q15_t)0x4201, (q15_t)0x41fb, - (q15_t)0x41f6, (q15_t)0x41f1, (q15_t)0x41eb, (q15_t)0x41e6, (q15_t)0x41e0, (q15_t)0x41db, (q15_t)0x41d6, (q15_t)0x41d0, - (q15_t)0x41cb, (q15_t)0x41c6, (q15_t)0x41c0, (q15_t)0x41bb, (q15_t)0x41b5, (q15_t)0x41b0, (q15_t)0x41ab, (q15_t)0x41a5, - (q15_t)0x41a0, (q15_t)0x419a, (q15_t)0x4195, (q15_t)0x4190, (q15_t)0x418a, (q15_t)0x4185, (q15_t)0x417f, (q15_t)0x417a, - (q15_t)0x4175, (q15_t)0x416f, (q15_t)0x416a, (q15_t)0x4164, (q15_t)0x415f, (q15_t)0x415a, (q15_t)0x4154, (q15_t)0x414f, - (q15_t)0x4149, (q15_t)0x4144, (q15_t)0x413f, (q15_t)0x4139, (q15_t)0x4134, (q15_t)0x412e, (q15_t)0x4129, (q15_t)0x4124, - (q15_t)0x411e, (q15_t)0x4119, (q15_t)0x4113, (q15_t)0x410e, (q15_t)0x4108, (q15_t)0x4103, (q15_t)0x40fe, (q15_t)0x40f8, - (q15_t)0x40f3, (q15_t)0x40ed, (q15_t)0x40e8, (q15_t)0x40e3, (q15_t)0x40dd, (q15_t)0x40d8, (q15_t)0x40d2, (q15_t)0x40cd, - (q15_t)0x40c8, (q15_t)0x40c2, (q15_t)0x40bd, (q15_t)0x40b7, (q15_t)0x40b2, (q15_t)0x40ac, (q15_t)0x40a7, (q15_t)0x40a2, - (q15_t)0x409c, (q15_t)0x4097, (q15_t)0x4091, (q15_t)0x408c, (q15_t)0x4086, (q15_t)0x4081, (q15_t)0x407c, (q15_t)0x4076, - (q15_t)0x4071, (q15_t)0x406b, (q15_t)0x4066, (q15_t)0x4060, (q15_t)0x405b, (q15_t)0x4056, (q15_t)0x4050, (q15_t)0x404b, - (q15_t)0x4045, (q15_t)0x4040, (q15_t)0x403a, (q15_t)0x4035, (q15_t)0x4030, (q15_t)0x402a, (q15_t)0x4025, (q15_t)0x401f, - (q15_t)0x401a, (q15_t)0x4014, (q15_t)0x400f, (q15_t)0x4009, (q15_t)0x4004, (q15_t)0x3fff, (q15_t)0x3ff9, (q15_t)0x3ff4, - (q15_t)0x3fee, (q15_t)0x3fe9, (q15_t)0x3fe3, (q15_t)0x3fde, (q15_t)0x3fd8, (q15_t)0x3fd3, (q15_t)0x3fce, (q15_t)0x3fc8, - (q15_t)0x3fc3, (q15_t)0x3fbd, (q15_t)0x3fb8, (q15_t)0x3fb2, (q15_t)0x3fad, (q15_t)0x3fa7, (q15_t)0x3fa2, (q15_t)0x3f9d, - (q15_t)0x3f97, (q15_t)0x3f92, (q15_t)0x3f8c, (q15_t)0x3f87, (q15_t)0x3f81, (q15_t)0x3f7c, (q15_t)0x3f76, (q15_t)0x3f71, - (q15_t)0x3f6b, (q15_t)0x3f66, (q15_t)0x3f61, (q15_t)0x3f5b, (q15_t)0x3f56, (q15_t)0x3f50, (q15_t)0x3f4b, (q15_t)0x3f45, - (q15_t)0x3f40, (q15_t)0x3f3a, (q15_t)0x3f35, (q15_t)0x3f2f, (q15_t)0x3f2a, (q15_t)0x3f24, (q15_t)0x3f1f, (q15_t)0x3f1a, - (q15_t)0x3f14, (q15_t)0x3f0f, (q15_t)0x3f09, (q15_t)0x3f04, (q15_t)0x3efe, (q15_t)0x3ef9, (q15_t)0x3ef3, (q15_t)0x3eee, - (q15_t)0x3ee8, (q15_t)0x3ee3, (q15_t)0x3edd, (q15_t)0x3ed8, (q15_t)0x3ed2, (q15_t)0x3ecd, (q15_t)0x3ec7, (q15_t)0x3ec2, - (q15_t)0x3ebd, (q15_t)0x3eb7, (q15_t)0x3eb2, (q15_t)0x3eac, (q15_t)0x3ea7, (q15_t)0x3ea1, (q15_t)0x3e9c, (q15_t)0x3e96, - (q15_t)0x3e91, (q15_t)0x3e8b, (q15_t)0x3e86, (q15_t)0x3e80, (q15_t)0x3e7b, (q15_t)0x3e75, (q15_t)0x3e70, (q15_t)0x3e6a, - (q15_t)0x3e65, (q15_t)0x3e5f, (q15_t)0x3e5a, (q15_t)0x3e54, (q15_t)0x3e4f, (q15_t)0x3e49, (q15_t)0x3e44, (q15_t)0x3e3e, - (q15_t)0x3e39, (q15_t)0x3e33, (q15_t)0x3e2e, (q15_t)0x3e28, (q15_t)0x3e23, (q15_t)0x3e1d, (q15_t)0x3e18, (q15_t)0x3e12, - (q15_t)0x3e0d, (q15_t)0x3e07, (q15_t)0x3e02, (q15_t)0x3dfc, (q15_t)0x3df7, (q15_t)0x3df1, (q15_t)0x3dec, (q15_t)0x3de6, - (q15_t)0x3de1, (q15_t)0x3ddb, (q15_t)0x3dd6, (q15_t)0x3dd0, (q15_t)0x3dcb, (q15_t)0x3dc5, (q15_t)0x3dc0, (q15_t)0x3dba, - (q15_t)0x3db5, (q15_t)0x3daf, (q15_t)0x3daa, (q15_t)0x3da4, (q15_t)0x3d9f, (q15_t)0x3d99, (q15_t)0x3d94, (q15_t)0x3d8e, - (q15_t)0x3d89, (q15_t)0x3d83, (q15_t)0x3d7e, (q15_t)0x3d78, (q15_t)0x3d73, (q15_t)0x3d6d, (q15_t)0x3d68, (q15_t)0x3d62, - (q15_t)0x3d5d, (q15_t)0x3d57, (q15_t)0x3d52, (q15_t)0x3d4c, (q15_t)0x3d47, (q15_t)0x3d41, (q15_t)0x3d3c, (q15_t)0x3d36, - (q15_t)0x3d31, (q15_t)0x3d2b, (q15_t)0x3d26, (q15_t)0x3d20, (q15_t)0x3d1b, (q15_t)0x3d15, (q15_t)0x3d10, (q15_t)0x3d0a, - (q15_t)0x3d04, (q15_t)0x3cff, (q15_t)0x3cf9, (q15_t)0x3cf4, (q15_t)0x3cee, (q15_t)0x3ce9, (q15_t)0x3ce3, (q15_t)0x3cde, - (q15_t)0x3cd8, (q15_t)0x3cd3, (q15_t)0x3ccd, (q15_t)0x3cc8, (q15_t)0x3cc2, (q15_t)0x3cbd, (q15_t)0x3cb7, (q15_t)0x3cb2, - (q15_t)0x3cac, (q15_t)0x3ca7, (q15_t)0x3ca1, (q15_t)0x3c9b, (q15_t)0x3c96, (q15_t)0x3c90, (q15_t)0x3c8b, (q15_t)0x3c85, - (q15_t)0x3c80, (q15_t)0x3c7a, (q15_t)0x3c75, (q15_t)0x3c6f, (q15_t)0x3c6a, (q15_t)0x3c64, (q15_t)0x3c5f, (q15_t)0x3c59, - (q15_t)0x3c53, (q15_t)0x3c4e, (q15_t)0x3c48, (q15_t)0x3c43, (q15_t)0x3c3d, (q15_t)0x3c38, (q15_t)0x3c32, (q15_t)0x3c2d, - (q15_t)0x3c27, (q15_t)0x3c22, (q15_t)0x3c1c, (q15_t)0x3c16, (q15_t)0x3c11, (q15_t)0x3c0b, (q15_t)0x3c06, (q15_t)0x3c00, - (q15_t)0x3bfb, (q15_t)0x3bf5, (q15_t)0x3bf0, (q15_t)0x3bea, (q15_t)0x3be5, (q15_t)0x3bdf, (q15_t)0x3bd9, (q15_t)0x3bd4, - (q15_t)0x3bce, (q15_t)0x3bc9, (q15_t)0x3bc3, (q15_t)0x3bbe, (q15_t)0x3bb8, (q15_t)0x3bb3, (q15_t)0x3bad, (q15_t)0x3ba7, - (q15_t)0x3ba2, (q15_t)0x3b9c, (q15_t)0x3b97, (q15_t)0x3b91, (q15_t)0x3b8c, (q15_t)0x3b86, (q15_t)0x3b80, (q15_t)0x3b7b, - (q15_t)0x3b75, (q15_t)0x3b70, (q15_t)0x3b6a, (q15_t)0x3b65, (q15_t)0x3b5f, (q15_t)0x3b5a, (q15_t)0x3b54, (q15_t)0x3b4e, - (q15_t)0x3b49, (q15_t)0x3b43, (q15_t)0x3b3e, (q15_t)0x3b38, (q15_t)0x3b33, (q15_t)0x3b2d, (q15_t)0x3b27, (q15_t)0x3b22, - (q15_t)0x3b1c, (q15_t)0x3b17, (q15_t)0x3b11, (q15_t)0x3b0c, (q15_t)0x3b06, (q15_t)0x3b00, (q15_t)0x3afb, (q15_t)0x3af5, - (q15_t)0x3af0, (q15_t)0x3aea, (q15_t)0x3ae4, (q15_t)0x3adf, (q15_t)0x3ad9, (q15_t)0x3ad4, (q15_t)0x3ace, (q15_t)0x3ac9, - (q15_t)0x3ac3, (q15_t)0x3abd, (q15_t)0x3ab8, (q15_t)0x3ab2, (q15_t)0x3aad, (q15_t)0x3aa7, (q15_t)0x3aa2, (q15_t)0x3a9c, - (q15_t)0x3a96, (q15_t)0x3a91, (q15_t)0x3a8b, (q15_t)0x3a86, (q15_t)0x3a80, (q15_t)0x3a7a, (q15_t)0x3a75, (q15_t)0x3a6f, - (q15_t)0x3a6a, (q15_t)0x3a64, (q15_t)0x3a5e, (q15_t)0x3a59, (q15_t)0x3a53, (q15_t)0x3a4e, (q15_t)0x3a48, (q15_t)0x3a42, - (q15_t)0x3a3d, (q15_t)0x3a37, (q15_t)0x3a32, (q15_t)0x3a2c, (q15_t)0x3a26, (q15_t)0x3a21, (q15_t)0x3a1b, (q15_t)0x3a16, - (q15_t)0x3a10, (q15_t)0x3a0b, (q15_t)0x3a05, (q15_t)0x39ff, (q15_t)0x39fa, (q15_t)0x39f4, (q15_t)0x39ee, (q15_t)0x39e9, - (q15_t)0x39e3, (q15_t)0x39de, (q15_t)0x39d8, (q15_t)0x39d2, (q15_t)0x39cd, (q15_t)0x39c7, (q15_t)0x39c2, (q15_t)0x39bc, - (q15_t)0x39b6, (q15_t)0x39b1, (q15_t)0x39ab, (q15_t)0x39a6, (q15_t)0x39a0, (q15_t)0x399a, (q15_t)0x3995, (q15_t)0x398f, - (q15_t)0x398a, (q15_t)0x3984, (q15_t)0x397e, (q15_t)0x3979, (q15_t)0x3973, (q15_t)0x396d, (q15_t)0x3968, (q15_t)0x3962, - (q15_t)0x395d, (q15_t)0x3957, (q15_t)0x3951, (q15_t)0x394c, (q15_t)0x3946, (q15_t)0x3941, (q15_t)0x393b, (q15_t)0x3935, - (q15_t)0x3930, (q15_t)0x392a, (q15_t)0x3924, (q15_t)0x391f, (q15_t)0x3919, (q15_t)0x3914, (q15_t)0x390e, (q15_t)0x3908, - (q15_t)0x3903, (q15_t)0x38fd, (q15_t)0x38f7, (q15_t)0x38f2, (q15_t)0x38ec, (q15_t)0x38e7, (q15_t)0x38e1, (q15_t)0x38db, - (q15_t)0x38d6, (q15_t)0x38d0, (q15_t)0x38ca, (q15_t)0x38c5, (q15_t)0x38bf, (q15_t)0x38ba, (q15_t)0x38b4, (q15_t)0x38ae, - (q15_t)0x38a9, (q15_t)0x38a3, (q15_t)0x389d, (q15_t)0x3898, (q15_t)0x3892, (q15_t)0x388c, (q15_t)0x3887, (q15_t)0x3881, - (q15_t)0x387c, (q15_t)0x3876, (q15_t)0x3870, (q15_t)0x386b, (q15_t)0x3865, (q15_t)0x385f, (q15_t)0x385a, (q15_t)0x3854, - (q15_t)0x384e, (q15_t)0x3849, (q15_t)0x3843, (q15_t)0x383d, (q15_t)0x3838, (q15_t)0x3832, (q15_t)0x382d, (q15_t)0x3827, - (q15_t)0x3821, (q15_t)0x381c, (q15_t)0x3816, (q15_t)0x3810, (q15_t)0x380b, (q15_t)0x3805, (q15_t)0x37ff, (q15_t)0x37fa, - (q15_t)0x37f4, (q15_t)0x37ee, (q15_t)0x37e9, (q15_t)0x37e3, (q15_t)0x37dd, (q15_t)0x37d8, (q15_t)0x37d2, (q15_t)0x37cc, - (q15_t)0x37c7, (q15_t)0x37c1, (q15_t)0x37bc, (q15_t)0x37b6, (q15_t)0x37b0, (q15_t)0x37ab, (q15_t)0x37a5, (q15_t)0x379f, - (q15_t)0x379a, (q15_t)0x3794, (q15_t)0x378e, (q15_t)0x3789, (q15_t)0x3783, (q15_t)0x377d, (q15_t)0x3778, (q15_t)0x3772, - (q15_t)0x376c, (q15_t)0x3767, (q15_t)0x3761, (q15_t)0x375b, (q15_t)0x3756, (q15_t)0x3750, (q15_t)0x374a, (q15_t)0x3745, - (q15_t)0x373f, (q15_t)0x3739, (q15_t)0x3734, (q15_t)0x372e, (q15_t)0x3728, (q15_t)0x3723, (q15_t)0x371d, (q15_t)0x3717, - (q15_t)0x3712, (q15_t)0x370c, (q15_t)0x3706, (q15_t)0x3701, (q15_t)0x36fb, (q15_t)0x36f5, (q15_t)0x36f0, (q15_t)0x36ea, - (q15_t)0x36e4, (q15_t)0x36df, (q15_t)0x36d9, (q15_t)0x36d3, (q15_t)0x36ce, (q15_t)0x36c8, (q15_t)0x36c2, (q15_t)0x36bc, - (q15_t)0x36b7, (q15_t)0x36b1, (q15_t)0x36ab, (q15_t)0x36a6, (q15_t)0x36a0, (q15_t)0x369a, (q15_t)0x3695, (q15_t)0x368f, - (q15_t)0x3689, (q15_t)0x3684, (q15_t)0x367e, (q15_t)0x3678, (q15_t)0x3673, (q15_t)0x366d, (q15_t)0x3667, (q15_t)0x3662, - (q15_t)0x365c, (q15_t)0x3656, (q15_t)0x3650, (q15_t)0x364b, (q15_t)0x3645, (q15_t)0x363f, (q15_t)0x363a, (q15_t)0x3634, - (q15_t)0x362e, (q15_t)0x3629, (q15_t)0x3623, (q15_t)0x361d, (q15_t)0x3618, (q15_t)0x3612, (q15_t)0x360c, (q15_t)0x3606, - (q15_t)0x3601, (q15_t)0x35fb, (q15_t)0x35f5, (q15_t)0x35f0, (q15_t)0x35ea, (q15_t)0x35e4, (q15_t)0x35df, (q15_t)0x35d9, - (q15_t)0x35d3, (q15_t)0x35cd, (q15_t)0x35c8, (q15_t)0x35c2, (q15_t)0x35bc, (q15_t)0x35b7, (q15_t)0x35b1, (q15_t)0x35ab, - (q15_t)0x35a6, (q15_t)0x35a0, (q15_t)0x359a, (q15_t)0x3594, (q15_t)0x358f, (q15_t)0x3589, (q15_t)0x3583, (q15_t)0x357e, - (q15_t)0x3578, (q15_t)0x3572, (q15_t)0x356c, (q15_t)0x3567, (q15_t)0x3561, (q15_t)0x355b, (q15_t)0x3556, (q15_t)0x3550, - (q15_t)0x354a, (q15_t)0x3544, (q15_t)0x353f, (q15_t)0x3539, (q15_t)0x3533, (q15_t)0x352e, (q15_t)0x3528, (q15_t)0x3522, - (q15_t)0x351c, (q15_t)0x3517, (q15_t)0x3511, (q15_t)0x350b, (q15_t)0x3506, (q15_t)0x3500, (q15_t)0x34fa, (q15_t)0x34f4, - (q15_t)0x34ef, (q15_t)0x34e9, (q15_t)0x34e3, (q15_t)0x34de, (q15_t)0x34d8, (q15_t)0x34d2, (q15_t)0x34cc, (q15_t)0x34c7, - (q15_t)0x34c1, (q15_t)0x34bb, (q15_t)0x34b6, (q15_t)0x34b0, (q15_t)0x34aa, (q15_t)0x34a4, (q15_t)0x349f, (q15_t)0x3499, - (q15_t)0x3493, (q15_t)0x348d, (q15_t)0x3488, (q15_t)0x3482, (q15_t)0x347c, (q15_t)0x3476, (q15_t)0x3471, (q15_t)0x346b, - (q15_t)0x3465, (q15_t)0x3460, (q15_t)0x345a, (q15_t)0x3454, (q15_t)0x344e, (q15_t)0x3449, (q15_t)0x3443, (q15_t)0x343d, - (q15_t)0x3437, (q15_t)0x3432, (q15_t)0x342c, (q15_t)0x3426, (q15_t)0x3420, (q15_t)0x341b, (q15_t)0x3415, (q15_t)0x340f, - (q15_t)0x340a, (q15_t)0x3404, (q15_t)0x33fe, (q15_t)0x33f8, (q15_t)0x33f3, (q15_t)0x33ed, (q15_t)0x33e7, (q15_t)0x33e1, - (q15_t)0x33dc, (q15_t)0x33d6, (q15_t)0x33d0, (q15_t)0x33ca, (q15_t)0x33c5, (q15_t)0x33bf, (q15_t)0x33b9, (q15_t)0x33b3, - (q15_t)0x33ae, (q15_t)0x33a8, (q15_t)0x33a2, (q15_t)0x339c, (q15_t)0x3397, (q15_t)0x3391, (q15_t)0x338b, (q15_t)0x3385, - (q15_t)0x3380, (q15_t)0x337a, (q15_t)0x3374, (q15_t)0x336e, (q15_t)0x3369, (q15_t)0x3363, (q15_t)0x335d, (q15_t)0x3357, - (q15_t)0x3352, (q15_t)0x334c, (q15_t)0x3346, (q15_t)0x3340, (q15_t)0x333b, (q15_t)0x3335, (q15_t)0x332f, (q15_t)0x3329, - (q15_t)0x3324, (q15_t)0x331e, (q15_t)0x3318, (q15_t)0x3312, (q15_t)0x330c, (q15_t)0x3307, (q15_t)0x3301, (q15_t)0x32fb, - (q15_t)0x32f5, (q15_t)0x32f0, (q15_t)0x32ea, (q15_t)0x32e4, (q15_t)0x32de, (q15_t)0x32d9, (q15_t)0x32d3, (q15_t)0x32cd, - (q15_t)0x32c7, (q15_t)0x32c2, (q15_t)0x32bc, (q15_t)0x32b6, (q15_t)0x32b0, (q15_t)0x32aa, (q15_t)0x32a5, (q15_t)0x329f, - (q15_t)0x3299, (q15_t)0x3293, (q15_t)0x328e, (q15_t)0x3288, (q15_t)0x3282, (q15_t)0x327c, (q15_t)0x3276, (q15_t)0x3271, - (q15_t)0x326b, (q15_t)0x3265, (q15_t)0x325f, (q15_t)0x325a, (q15_t)0x3254, (q15_t)0x324e, (q15_t)0x3248, (q15_t)0x3243, - (q15_t)0x323d, (q15_t)0x3237, (q15_t)0x3231, (q15_t)0x322b, (q15_t)0x3226, (q15_t)0x3220, (q15_t)0x321a, (q15_t)0x3214, - (q15_t)0x320e, (q15_t)0x3209, (q15_t)0x3203, (q15_t)0x31fd, (q15_t)0x31f7, (q15_t)0x31f2, (q15_t)0x31ec, (q15_t)0x31e6, - (q15_t)0x31e0, (q15_t)0x31da, (q15_t)0x31d5, (q15_t)0x31cf, (q15_t)0x31c9, (q15_t)0x31c3, (q15_t)0x31bd, (q15_t)0x31b8, - (q15_t)0x31b2, (q15_t)0x31ac, (q15_t)0x31a6, (q15_t)0x31a1, (q15_t)0x319b, (q15_t)0x3195, (q15_t)0x318f, (q15_t)0x3189, - (q15_t)0x3184, (q15_t)0x317e, (q15_t)0x3178, (q15_t)0x3172, (q15_t)0x316c, (q15_t)0x3167, (q15_t)0x3161, (q15_t)0x315b, - (q15_t)0x3155, (q15_t)0x314f, (q15_t)0x314a, (q15_t)0x3144, (q15_t)0x313e, (q15_t)0x3138, (q15_t)0x3132, (q15_t)0x312d, - (q15_t)0x3127, (q15_t)0x3121, (q15_t)0x311b, (q15_t)0x3115, (q15_t)0x3110, (q15_t)0x310a, (q15_t)0x3104, (q15_t)0x30fe, - (q15_t)0x30f8, (q15_t)0x30f3, (q15_t)0x30ed, (q15_t)0x30e7, (q15_t)0x30e1, (q15_t)0x30db, (q15_t)0x30d6, (q15_t)0x30d0, - (q15_t)0x30ca, (q15_t)0x30c4, (q15_t)0x30be, (q15_t)0x30b8, (q15_t)0x30b3, (q15_t)0x30ad, (q15_t)0x30a7, (q15_t)0x30a1, - (q15_t)0x309b, (q15_t)0x3096, (q15_t)0x3090, (q15_t)0x308a, (q15_t)0x3084, (q15_t)0x307e, (q15_t)0x3079, (q15_t)0x3073, - (q15_t)0x306d, (q15_t)0x3067, (q15_t)0x3061, (q15_t)0x305b, (q15_t)0x3056, (q15_t)0x3050, (q15_t)0x304a, (q15_t)0x3044, - (q15_t)0x303e, (q15_t)0x3039, (q15_t)0x3033, (q15_t)0x302d, (q15_t)0x3027, (q15_t)0x3021, (q15_t)0x301b, (q15_t)0x3016, - (q15_t)0x3010, (q15_t)0x300a, (q15_t)0x3004, (q15_t)0x2ffe, (q15_t)0x2ff8, (q15_t)0x2ff3, (q15_t)0x2fed, (q15_t)0x2fe7, - (q15_t)0x2fe1, (q15_t)0x2fdb, (q15_t)0x2fd6, (q15_t)0x2fd0, (q15_t)0x2fca, (q15_t)0x2fc4, (q15_t)0x2fbe, (q15_t)0x2fb8, - (q15_t)0x2fb3, (q15_t)0x2fad, (q15_t)0x2fa7, (q15_t)0x2fa1, (q15_t)0x2f9b, (q15_t)0x2f95, (q15_t)0x2f90, (q15_t)0x2f8a, - (q15_t)0x2f84, (q15_t)0x2f7e, (q15_t)0x2f78, (q15_t)0x2f72, (q15_t)0x2f6d, (q15_t)0x2f67, (q15_t)0x2f61, (q15_t)0x2f5b, - (q15_t)0x2f55, (q15_t)0x2f4f, (q15_t)0x2f4a, (q15_t)0x2f44, (q15_t)0x2f3e, (q15_t)0x2f38, (q15_t)0x2f32, (q15_t)0x2f2c, - (q15_t)0x2f27, (q15_t)0x2f21, (q15_t)0x2f1b, (q15_t)0x2f15, (q15_t)0x2f0f, (q15_t)0x2f09, (q15_t)0x2f03, (q15_t)0x2efe, - (q15_t)0x2ef8, (q15_t)0x2ef2, (q15_t)0x2eec, (q15_t)0x2ee6, (q15_t)0x2ee0, (q15_t)0x2edb, (q15_t)0x2ed5, (q15_t)0x2ecf, - (q15_t)0x2ec9, (q15_t)0x2ec3, (q15_t)0x2ebd, (q15_t)0x2eb7, (q15_t)0x2eb2, (q15_t)0x2eac, (q15_t)0x2ea6, (q15_t)0x2ea0, - (q15_t)0x2e9a, (q15_t)0x2e94, (q15_t)0x2e8e, (q15_t)0x2e89, (q15_t)0x2e83, (q15_t)0x2e7d, (q15_t)0x2e77, (q15_t)0x2e71, - (q15_t)0x2e6b, (q15_t)0x2e65, (q15_t)0x2e60, (q15_t)0x2e5a, (q15_t)0x2e54, (q15_t)0x2e4e, (q15_t)0x2e48, (q15_t)0x2e42, - (q15_t)0x2e3c, (q15_t)0x2e37, (q15_t)0x2e31, (q15_t)0x2e2b, (q15_t)0x2e25, (q15_t)0x2e1f, (q15_t)0x2e19, (q15_t)0x2e13, - (q15_t)0x2e0e, (q15_t)0x2e08, (q15_t)0x2e02, (q15_t)0x2dfc, (q15_t)0x2df6, (q15_t)0x2df0, (q15_t)0x2dea, (q15_t)0x2de5, - (q15_t)0x2ddf, (q15_t)0x2dd9, (q15_t)0x2dd3, (q15_t)0x2dcd, (q15_t)0x2dc7, (q15_t)0x2dc1, (q15_t)0x2dbb, (q15_t)0x2db6, - (q15_t)0x2db0, (q15_t)0x2daa, (q15_t)0x2da4, (q15_t)0x2d9e, (q15_t)0x2d98, (q15_t)0x2d92, (q15_t)0x2d8d, (q15_t)0x2d87, - (q15_t)0x2d81, (q15_t)0x2d7b, (q15_t)0x2d75, (q15_t)0x2d6f, (q15_t)0x2d69, (q15_t)0x2d63, (q15_t)0x2d5e, (q15_t)0x2d58, - (q15_t)0x2d52, (q15_t)0x2d4c, (q15_t)0x2d46, (q15_t)0x2d40, (q15_t)0x2d3a, (q15_t)0x2d34, (q15_t)0x2d2f, (q15_t)0x2d29, - (q15_t)0x2d23, (q15_t)0x2d1d, (q15_t)0x2d17, (q15_t)0x2d11, (q15_t)0x2d0b, (q15_t)0x2d05, (q15_t)0x2cff, (q15_t)0x2cfa, - (q15_t)0x2cf4, (q15_t)0x2cee, (q15_t)0x2ce8, (q15_t)0x2ce2, (q15_t)0x2cdc, (q15_t)0x2cd6, (q15_t)0x2cd0, (q15_t)0x2ccb, - (q15_t)0x2cc5, (q15_t)0x2cbf, (q15_t)0x2cb9, (q15_t)0x2cb3, (q15_t)0x2cad, (q15_t)0x2ca7, (q15_t)0x2ca1, (q15_t)0x2c9b, - (q15_t)0x2c96, (q15_t)0x2c90, (q15_t)0x2c8a, (q15_t)0x2c84, (q15_t)0x2c7e, (q15_t)0x2c78, (q15_t)0x2c72, (q15_t)0x2c6c, - (q15_t)0x2c66, (q15_t)0x2c61, (q15_t)0x2c5b, (q15_t)0x2c55, (q15_t)0x2c4f, (q15_t)0x2c49, (q15_t)0x2c43, (q15_t)0x2c3d, - (q15_t)0x2c37, (q15_t)0x2c31, (q15_t)0x2c2b, (q15_t)0x2c26, (q15_t)0x2c20, (q15_t)0x2c1a, (q15_t)0x2c14, (q15_t)0x2c0e, - (q15_t)0x2c08, (q15_t)0x2c02, (q15_t)0x2bfc, (q15_t)0x2bf6, (q15_t)0x2bf0, (q15_t)0x2beb, (q15_t)0x2be5, (q15_t)0x2bdf, - (q15_t)0x2bd9, (q15_t)0x2bd3, (q15_t)0x2bcd, (q15_t)0x2bc7, (q15_t)0x2bc1, (q15_t)0x2bbb, (q15_t)0x2bb5, (q15_t)0x2bb0, - (q15_t)0x2baa, (q15_t)0x2ba4, (q15_t)0x2b9e, (q15_t)0x2b98, (q15_t)0x2b92, (q15_t)0x2b8c, (q15_t)0x2b86, (q15_t)0x2b80, - (q15_t)0x2b7a, (q15_t)0x2b74, (q15_t)0x2b6f, (q15_t)0x2b69, (q15_t)0x2b63, (q15_t)0x2b5d, (q15_t)0x2b57, (q15_t)0x2b51, - (q15_t)0x2b4b, (q15_t)0x2b45, (q15_t)0x2b3f, (q15_t)0x2b39, (q15_t)0x2b33, (q15_t)0x2b2d, (q15_t)0x2b28, (q15_t)0x2b22, - (q15_t)0x2b1c, (q15_t)0x2b16, (q15_t)0x2b10, (q15_t)0x2b0a, (q15_t)0x2b04, (q15_t)0x2afe, (q15_t)0x2af8, (q15_t)0x2af2, - (q15_t)0x2aec, (q15_t)0x2ae6, (q15_t)0x2ae1, (q15_t)0x2adb, (q15_t)0x2ad5, (q15_t)0x2acf, (q15_t)0x2ac9, (q15_t)0x2ac3, - (q15_t)0x2abd, (q15_t)0x2ab7, (q15_t)0x2ab1, (q15_t)0x2aab, (q15_t)0x2aa5, (q15_t)0x2a9f, (q15_t)0x2a99, (q15_t)0x2a94, - (q15_t)0x2a8e, (q15_t)0x2a88, (q15_t)0x2a82, (q15_t)0x2a7c, (q15_t)0x2a76, (q15_t)0x2a70, (q15_t)0x2a6a, (q15_t)0x2a64, - (q15_t)0x2a5e, (q15_t)0x2a58, (q15_t)0x2a52, (q15_t)0x2a4c, (q15_t)0x2a47, (q15_t)0x2a41, (q15_t)0x2a3b, (q15_t)0x2a35, - (q15_t)0x2a2f, (q15_t)0x2a29, (q15_t)0x2a23, (q15_t)0x2a1d, (q15_t)0x2a17, (q15_t)0x2a11, (q15_t)0x2a0b, (q15_t)0x2a05, - (q15_t)0x29ff, (q15_t)0x29f9, (q15_t)0x29f3, (q15_t)0x29ee, (q15_t)0x29e8, (q15_t)0x29e2, (q15_t)0x29dc, (q15_t)0x29d6, - (q15_t)0x29d0, (q15_t)0x29ca, (q15_t)0x29c4, (q15_t)0x29be, (q15_t)0x29b8, (q15_t)0x29b2, (q15_t)0x29ac, (q15_t)0x29a6, - (q15_t)0x29a0, (q15_t)0x299a, (q15_t)0x2994, (q15_t)0x298e, (q15_t)0x2989, (q15_t)0x2983, (q15_t)0x297d, (q15_t)0x2977, - (q15_t)0x2971, (q15_t)0x296b, (q15_t)0x2965, (q15_t)0x295f, (q15_t)0x2959, (q15_t)0x2953, (q15_t)0x294d, (q15_t)0x2947, - (q15_t)0x2941, (q15_t)0x293b, (q15_t)0x2935, (q15_t)0x292f, (q15_t)0x2929, (q15_t)0x2923, (q15_t)0x291d, (q15_t)0x2918, - (q15_t)0x2912, (q15_t)0x290c, (q15_t)0x2906, (q15_t)0x2900, (q15_t)0x28fa, (q15_t)0x28f4, (q15_t)0x28ee, (q15_t)0x28e8, - (q15_t)0x28e2, (q15_t)0x28dc, (q15_t)0x28d6, (q15_t)0x28d0, (q15_t)0x28ca, (q15_t)0x28c4, (q15_t)0x28be, (q15_t)0x28b8, - (q15_t)0x28b2, (q15_t)0x28ac, (q15_t)0x28a6, (q15_t)0x28a0, (q15_t)0x289a, (q15_t)0x2895, (q15_t)0x288f, (q15_t)0x2889, - (q15_t)0x2883, (q15_t)0x287d, (q15_t)0x2877, (q15_t)0x2871, (q15_t)0x286b, (q15_t)0x2865, (q15_t)0x285f, (q15_t)0x2859, - (q15_t)0x2853, (q15_t)0x284d, (q15_t)0x2847, (q15_t)0x2841, (q15_t)0x283b, (q15_t)0x2835, (q15_t)0x282f, (q15_t)0x2829, - (q15_t)0x2823, (q15_t)0x281d, (q15_t)0x2817, (q15_t)0x2811, (q15_t)0x280b, (q15_t)0x2805, (q15_t)0x27ff, (q15_t)0x27f9, - (q15_t)0x27f3, (q15_t)0x27ee, (q15_t)0x27e8, (q15_t)0x27e2, (q15_t)0x27dc, (q15_t)0x27d6, (q15_t)0x27d0, (q15_t)0x27ca, - (q15_t)0x27c4, (q15_t)0x27be, (q15_t)0x27b8, (q15_t)0x27b2, (q15_t)0x27ac, (q15_t)0x27a6, (q15_t)0x27a0, (q15_t)0x279a, - (q15_t)0x2794, (q15_t)0x278e, (q15_t)0x2788, (q15_t)0x2782, (q15_t)0x277c, (q15_t)0x2776, (q15_t)0x2770, (q15_t)0x276a, - (q15_t)0x2764, (q15_t)0x275e, (q15_t)0x2758, (q15_t)0x2752, (q15_t)0x274c, (q15_t)0x2746, (q15_t)0x2740, (q15_t)0x273a, - (q15_t)0x2734, (q15_t)0x272e, (q15_t)0x2728, (q15_t)0x2722, (q15_t)0x271c, (q15_t)0x2716, (q15_t)0x2710, (q15_t)0x270a, - (q15_t)0x2704, (q15_t)0x26fe, (q15_t)0x26f8, (q15_t)0x26f2, (q15_t)0x26ec, (q15_t)0x26e7, (q15_t)0x26e1, (q15_t)0x26db, - (q15_t)0x26d5, (q15_t)0x26cf, (q15_t)0x26c9, (q15_t)0x26c3, (q15_t)0x26bd, (q15_t)0x26b7, (q15_t)0x26b1, (q15_t)0x26ab, - (q15_t)0x26a5, (q15_t)0x269f, (q15_t)0x2699, (q15_t)0x2693, (q15_t)0x268d, (q15_t)0x2687, (q15_t)0x2681, (q15_t)0x267b, - (q15_t)0x2675, (q15_t)0x266f, (q15_t)0x2669, (q15_t)0x2663, (q15_t)0x265d, (q15_t)0x2657, (q15_t)0x2651, (q15_t)0x264b, - (q15_t)0x2645, (q15_t)0x263f, (q15_t)0x2639, (q15_t)0x2633, (q15_t)0x262d, (q15_t)0x2627, (q15_t)0x2621, (q15_t)0x261b, - (q15_t)0x2615, (q15_t)0x260f, (q15_t)0x2609, (q15_t)0x2603, (q15_t)0x25fd, (q15_t)0x25f7, (q15_t)0x25f1, (q15_t)0x25eb, - (q15_t)0x25e5, (q15_t)0x25df, (q15_t)0x25d9, (q15_t)0x25d3, (q15_t)0x25cd, (q15_t)0x25c7, (q15_t)0x25c1, (q15_t)0x25bb, - (q15_t)0x25b5, (q15_t)0x25af, (q15_t)0x25a9, (q15_t)0x25a3, (q15_t)0x259d, (q15_t)0x2597, (q15_t)0x2591, (q15_t)0x258b, - (q15_t)0x2585, (q15_t)0x257f, (q15_t)0x2579, (q15_t)0x2573, (q15_t)0x256d, (q15_t)0x2567, (q15_t)0x2561, (q15_t)0x255b, - (q15_t)0x2555, (q15_t)0x254f, (q15_t)0x2549, (q15_t)0x2543, (q15_t)0x253d, (q15_t)0x2537, (q15_t)0x2531, (q15_t)0x252b, - (q15_t)0x2525, (q15_t)0x251f, (q15_t)0x2519, (q15_t)0x2513, (q15_t)0x250c, (q15_t)0x2506, (q15_t)0x2500, (q15_t)0x24fa, - (q15_t)0x24f4, (q15_t)0x24ee, (q15_t)0x24e8, (q15_t)0x24e2, (q15_t)0x24dc, (q15_t)0x24d6, (q15_t)0x24d0, (q15_t)0x24ca, - (q15_t)0x24c4, (q15_t)0x24be, (q15_t)0x24b8, (q15_t)0x24b2, (q15_t)0x24ac, (q15_t)0x24a6, (q15_t)0x24a0, (q15_t)0x249a, - (q15_t)0x2494, (q15_t)0x248e, (q15_t)0x2488, (q15_t)0x2482, (q15_t)0x247c, (q15_t)0x2476, (q15_t)0x2470, (q15_t)0x246a, - (q15_t)0x2464, (q15_t)0x245e, (q15_t)0x2458, (q15_t)0x2452, (q15_t)0x244c, (q15_t)0x2446, (q15_t)0x2440, (q15_t)0x243a, - (q15_t)0x2434, (q15_t)0x242e, (q15_t)0x2428, (q15_t)0x2422, (q15_t)0x241c, (q15_t)0x2416, (q15_t)0x2410, (q15_t)0x240a, - (q15_t)0x2404, (q15_t)0x23fd, (q15_t)0x23f7, (q15_t)0x23f1, (q15_t)0x23eb, (q15_t)0x23e5, (q15_t)0x23df, (q15_t)0x23d9, - (q15_t)0x23d3, (q15_t)0x23cd, (q15_t)0x23c7, (q15_t)0x23c1, (q15_t)0x23bb, (q15_t)0x23b5, (q15_t)0x23af, (q15_t)0x23a9, - (q15_t)0x23a3, (q15_t)0x239d, (q15_t)0x2397, (q15_t)0x2391, (q15_t)0x238b, (q15_t)0x2385, (q15_t)0x237f, (q15_t)0x2379, - (q15_t)0x2373, (q15_t)0x236d, (q15_t)0x2367, (q15_t)0x2361, (q15_t)0x235b, (q15_t)0x2355, (q15_t)0x234e, (q15_t)0x2348, - (q15_t)0x2342, (q15_t)0x233c, (q15_t)0x2336, (q15_t)0x2330, (q15_t)0x232a, (q15_t)0x2324, (q15_t)0x231e, (q15_t)0x2318, - (q15_t)0x2312, (q15_t)0x230c, (q15_t)0x2306, (q15_t)0x2300, (q15_t)0x22fa, (q15_t)0x22f4, (q15_t)0x22ee, (q15_t)0x22e8, - (q15_t)0x22e2, (q15_t)0x22dc, (q15_t)0x22d6, (q15_t)0x22d0, (q15_t)0x22ca, (q15_t)0x22c4, (q15_t)0x22bd, (q15_t)0x22b7, - (q15_t)0x22b1, (q15_t)0x22ab, (q15_t)0x22a5, (q15_t)0x229f, (q15_t)0x2299, (q15_t)0x2293, (q15_t)0x228d, (q15_t)0x2287, - (q15_t)0x2281, (q15_t)0x227b, (q15_t)0x2275, (q15_t)0x226f, (q15_t)0x2269, (q15_t)0x2263, (q15_t)0x225d, (q15_t)0x2257, - (q15_t)0x2251, (q15_t)0x224a, (q15_t)0x2244, (q15_t)0x223e, (q15_t)0x2238, (q15_t)0x2232, (q15_t)0x222c, (q15_t)0x2226, - (q15_t)0x2220, (q15_t)0x221a, (q15_t)0x2214, (q15_t)0x220e, (q15_t)0x2208, (q15_t)0x2202, (q15_t)0x21fc, (q15_t)0x21f6, - (q15_t)0x21f0, (q15_t)0x21ea, (q15_t)0x21e4, (q15_t)0x21dd, (q15_t)0x21d7, (q15_t)0x21d1, (q15_t)0x21cb, (q15_t)0x21c5, - (q15_t)0x21bf, (q15_t)0x21b9, (q15_t)0x21b3, (q15_t)0x21ad, (q15_t)0x21a7, (q15_t)0x21a1, (q15_t)0x219b, (q15_t)0x2195, - (q15_t)0x218f, (q15_t)0x2189, (q15_t)0x2183, (q15_t)0x217c, (q15_t)0x2176, (q15_t)0x2170, (q15_t)0x216a, (q15_t)0x2164, - (q15_t)0x215e, (q15_t)0x2158, (q15_t)0x2152, (q15_t)0x214c, (q15_t)0x2146, (q15_t)0x2140, (q15_t)0x213a, (q15_t)0x2134, - (q15_t)0x212e, (q15_t)0x2128, (q15_t)0x2121, (q15_t)0x211b, (q15_t)0x2115, (q15_t)0x210f, (q15_t)0x2109, (q15_t)0x2103, - (q15_t)0x20fd, (q15_t)0x20f7, (q15_t)0x20f1, (q15_t)0x20eb, (q15_t)0x20e5, (q15_t)0x20df, (q15_t)0x20d9, (q15_t)0x20d3, - (q15_t)0x20cc, (q15_t)0x20c6, (q15_t)0x20c0, (q15_t)0x20ba, (q15_t)0x20b4, (q15_t)0x20ae, (q15_t)0x20a8, (q15_t)0x20a2, - (q15_t)0x209c, (q15_t)0x2096, (q15_t)0x2090, (q15_t)0x208a, (q15_t)0x2084, (q15_t)0x207e, (q15_t)0x2077, (q15_t)0x2071, - (q15_t)0x206b, (q15_t)0x2065, (q15_t)0x205f, (q15_t)0x2059, (q15_t)0x2053, (q15_t)0x204d, (q15_t)0x2047, (q15_t)0x2041, - (q15_t)0x203b, (q15_t)0x2035, (q15_t)0x202e, (q15_t)0x2028, (q15_t)0x2022, (q15_t)0x201c, (q15_t)0x2016, (q15_t)0x2010, - (q15_t)0x200a, (q15_t)0x2004, (q15_t)0x1ffe, (q15_t)0x1ff8, (q15_t)0x1ff2, (q15_t)0x1fec, (q15_t)0x1fe5, (q15_t)0x1fdf, - (q15_t)0x1fd9, (q15_t)0x1fd3, (q15_t)0x1fcd, (q15_t)0x1fc7, (q15_t)0x1fc1, (q15_t)0x1fbb, (q15_t)0x1fb5, (q15_t)0x1faf, - (q15_t)0x1fa9, (q15_t)0x1fa3, (q15_t)0x1f9c, (q15_t)0x1f96, (q15_t)0x1f90, (q15_t)0x1f8a, (q15_t)0x1f84, (q15_t)0x1f7e, - (q15_t)0x1f78, (q15_t)0x1f72, (q15_t)0x1f6c, (q15_t)0x1f66, (q15_t)0x1f60, (q15_t)0x1f59, (q15_t)0x1f53, (q15_t)0x1f4d, - (q15_t)0x1f47, (q15_t)0x1f41, (q15_t)0x1f3b, (q15_t)0x1f35, (q15_t)0x1f2f, (q15_t)0x1f29, (q15_t)0x1f23, (q15_t)0x1f1d, - (q15_t)0x1f16, (q15_t)0x1f10, (q15_t)0x1f0a, (q15_t)0x1f04, (q15_t)0x1efe, (q15_t)0x1ef8, (q15_t)0x1ef2, (q15_t)0x1eec, - (q15_t)0x1ee6, (q15_t)0x1ee0, (q15_t)0x1ed9, (q15_t)0x1ed3, (q15_t)0x1ecd, (q15_t)0x1ec7, (q15_t)0x1ec1, (q15_t)0x1ebb, - (q15_t)0x1eb5, (q15_t)0x1eaf, (q15_t)0x1ea9, (q15_t)0x1ea3, (q15_t)0x1e9c, (q15_t)0x1e96, (q15_t)0x1e90, (q15_t)0x1e8a, - (q15_t)0x1e84, (q15_t)0x1e7e, (q15_t)0x1e78, (q15_t)0x1e72, (q15_t)0x1e6c, (q15_t)0x1e66, (q15_t)0x1e5f, (q15_t)0x1e59, - (q15_t)0x1e53, (q15_t)0x1e4d, (q15_t)0x1e47, (q15_t)0x1e41, (q15_t)0x1e3b, (q15_t)0x1e35, (q15_t)0x1e2f, (q15_t)0x1e29, - (q15_t)0x1e22, (q15_t)0x1e1c, (q15_t)0x1e16, (q15_t)0x1e10, (q15_t)0x1e0a, (q15_t)0x1e04, (q15_t)0x1dfe, (q15_t)0x1df8, - (q15_t)0x1df2, (q15_t)0x1deb, (q15_t)0x1de5, (q15_t)0x1ddf, (q15_t)0x1dd9, (q15_t)0x1dd3, (q15_t)0x1dcd, (q15_t)0x1dc7, - (q15_t)0x1dc1, (q15_t)0x1dbb, (q15_t)0x1db4, (q15_t)0x1dae, (q15_t)0x1da8, (q15_t)0x1da2, (q15_t)0x1d9c, (q15_t)0x1d96, - (q15_t)0x1d90, (q15_t)0x1d8a, (q15_t)0x1d84, (q15_t)0x1d7d, (q15_t)0x1d77, (q15_t)0x1d71, (q15_t)0x1d6b, (q15_t)0x1d65, - (q15_t)0x1d5f, (q15_t)0x1d59, (q15_t)0x1d53, (q15_t)0x1d4c, (q15_t)0x1d46, (q15_t)0x1d40, (q15_t)0x1d3a, (q15_t)0x1d34, - (q15_t)0x1d2e, (q15_t)0x1d28, (q15_t)0x1d22, (q15_t)0x1d1c, (q15_t)0x1d15, (q15_t)0x1d0f, (q15_t)0x1d09, (q15_t)0x1d03, - (q15_t)0x1cfd, (q15_t)0x1cf7, (q15_t)0x1cf1, (q15_t)0x1ceb, (q15_t)0x1ce4, (q15_t)0x1cde, (q15_t)0x1cd8, (q15_t)0x1cd2, - (q15_t)0x1ccc, (q15_t)0x1cc6, (q15_t)0x1cc0, (q15_t)0x1cba, (q15_t)0x1cb3, (q15_t)0x1cad, (q15_t)0x1ca7, (q15_t)0x1ca1, - (q15_t)0x1c9b, (q15_t)0x1c95, (q15_t)0x1c8f, (q15_t)0x1c89, (q15_t)0x1c83, (q15_t)0x1c7c, (q15_t)0x1c76, (q15_t)0x1c70, - (q15_t)0x1c6a, (q15_t)0x1c64, (q15_t)0x1c5e, (q15_t)0x1c58, (q15_t)0x1c51, (q15_t)0x1c4b, (q15_t)0x1c45, (q15_t)0x1c3f, - (q15_t)0x1c39, (q15_t)0x1c33, (q15_t)0x1c2d, (q15_t)0x1c27, (q15_t)0x1c20, (q15_t)0x1c1a, (q15_t)0x1c14, (q15_t)0x1c0e, - (q15_t)0x1c08, (q15_t)0x1c02, (q15_t)0x1bfc, (q15_t)0x1bf6, (q15_t)0x1bef, (q15_t)0x1be9, (q15_t)0x1be3, (q15_t)0x1bdd, - (q15_t)0x1bd7, (q15_t)0x1bd1, (q15_t)0x1bcb, (q15_t)0x1bc4, (q15_t)0x1bbe, (q15_t)0x1bb8, (q15_t)0x1bb2, (q15_t)0x1bac, - (q15_t)0x1ba6, (q15_t)0x1ba0, (q15_t)0x1b9a, (q15_t)0x1b93, (q15_t)0x1b8d, (q15_t)0x1b87, (q15_t)0x1b81, (q15_t)0x1b7b, - (q15_t)0x1b75, (q15_t)0x1b6f, (q15_t)0x1b68, (q15_t)0x1b62, (q15_t)0x1b5c, (q15_t)0x1b56, (q15_t)0x1b50, (q15_t)0x1b4a, - (q15_t)0x1b44, (q15_t)0x1b3d, (q15_t)0x1b37, (q15_t)0x1b31, (q15_t)0x1b2b, (q15_t)0x1b25, (q15_t)0x1b1f, (q15_t)0x1b19, - (q15_t)0x1b13, (q15_t)0x1b0c, (q15_t)0x1b06, (q15_t)0x1b00, (q15_t)0x1afa, (q15_t)0x1af4, (q15_t)0x1aee, (q15_t)0x1ae8, - (q15_t)0x1ae1, (q15_t)0x1adb, (q15_t)0x1ad5, (q15_t)0x1acf, (q15_t)0x1ac9, (q15_t)0x1ac3, (q15_t)0x1abd, (q15_t)0x1ab6, - (q15_t)0x1ab0, (q15_t)0x1aaa, (q15_t)0x1aa4, (q15_t)0x1a9e, (q15_t)0x1a98, (q15_t)0x1a91, (q15_t)0x1a8b, (q15_t)0x1a85, - (q15_t)0x1a7f, (q15_t)0x1a79, (q15_t)0x1a73, (q15_t)0x1a6d, (q15_t)0x1a66, (q15_t)0x1a60, (q15_t)0x1a5a, (q15_t)0x1a54, - (q15_t)0x1a4e, (q15_t)0x1a48, (q15_t)0x1a42, (q15_t)0x1a3b, (q15_t)0x1a35, (q15_t)0x1a2f, (q15_t)0x1a29, (q15_t)0x1a23, - (q15_t)0x1a1d, (q15_t)0x1a17, (q15_t)0x1a10, (q15_t)0x1a0a, (q15_t)0x1a04, (q15_t)0x19fe, (q15_t)0x19f8, (q15_t)0x19f2, - (q15_t)0x19eb, (q15_t)0x19e5, (q15_t)0x19df, (q15_t)0x19d9, (q15_t)0x19d3, (q15_t)0x19cd, (q15_t)0x19c7, (q15_t)0x19c0, - (q15_t)0x19ba, (q15_t)0x19b4, (q15_t)0x19ae, (q15_t)0x19a8, (q15_t)0x19a2, (q15_t)0x199b, (q15_t)0x1995, (q15_t)0x198f, - (q15_t)0x1989, (q15_t)0x1983, (q15_t)0x197d, (q15_t)0x1977, (q15_t)0x1970, (q15_t)0x196a, (q15_t)0x1964, (q15_t)0x195e, - (q15_t)0x1958, (q15_t)0x1952, (q15_t)0x194b, (q15_t)0x1945, (q15_t)0x193f, (q15_t)0x1939, (q15_t)0x1933, (q15_t)0x192d, - (q15_t)0x1926, (q15_t)0x1920, (q15_t)0x191a, (q15_t)0x1914, (q15_t)0x190e, (q15_t)0x1908, (q15_t)0x1901, (q15_t)0x18fb, - (q15_t)0x18f5, (q15_t)0x18ef, (q15_t)0x18e9, (q15_t)0x18e3, (q15_t)0x18dc, (q15_t)0x18d6, (q15_t)0x18d0, (q15_t)0x18ca, - (q15_t)0x18c4, (q15_t)0x18be, (q15_t)0x18b8, (q15_t)0x18b1, (q15_t)0x18ab, (q15_t)0x18a5, (q15_t)0x189f, (q15_t)0x1899, - (q15_t)0x1893, (q15_t)0x188c, (q15_t)0x1886, (q15_t)0x1880, (q15_t)0x187a, (q15_t)0x1874, (q15_t)0x186e, (q15_t)0x1867, - (q15_t)0x1861, (q15_t)0x185b, (q15_t)0x1855, (q15_t)0x184f, (q15_t)0x1848, (q15_t)0x1842, (q15_t)0x183c, (q15_t)0x1836, - (q15_t)0x1830, (q15_t)0x182a, (q15_t)0x1823, (q15_t)0x181d, (q15_t)0x1817, (q15_t)0x1811, (q15_t)0x180b, (q15_t)0x1805, - (q15_t)0x17fe, (q15_t)0x17f8, (q15_t)0x17f2, (q15_t)0x17ec, (q15_t)0x17e6, (q15_t)0x17e0, (q15_t)0x17d9, (q15_t)0x17d3, - (q15_t)0x17cd, (q15_t)0x17c7, (q15_t)0x17c1, (q15_t)0x17bb, (q15_t)0x17b4, (q15_t)0x17ae, (q15_t)0x17a8, (q15_t)0x17a2, - (q15_t)0x179c, (q15_t)0x1795, (q15_t)0x178f, (q15_t)0x1789, (q15_t)0x1783, (q15_t)0x177d, (q15_t)0x1777, (q15_t)0x1770, - (q15_t)0x176a, (q15_t)0x1764, (q15_t)0x175e, (q15_t)0x1758, (q15_t)0x1752, (q15_t)0x174b, (q15_t)0x1745, (q15_t)0x173f, - (q15_t)0x1739, (q15_t)0x1733, (q15_t)0x172c, (q15_t)0x1726, (q15_t)0x1720, (q15_t)0x171a, (q15_t)0x1714, (q15_t)0x170e, - (q15_t)0x1707, (q15_t)0x1701, (q15_t)0x16fb, (q15_t)0x16f5, (q15_t)0x16ef, (q15_t)0x16e8, (q15_t)0x16e2, (q15_t)0x16dc, - (q15_t)0x16d6, (q15_t)0x16d0, (q15_t)0x16ca, (q15_t)0x16c3, (q15_t)0x16bd, (q15_t)0x16b7, (q15_t)0x16b1, (q15_t)0x16ab, - (q15_t)0x16a4, (q15_t)0x169e, (q15_t)0x1698, (q15_t)0x1692, (q15_t)0x168c, (q15_t)0x1686, (q15_t)0x167f, (q15_t)0x1679, - (q15_t)0x1673, (q15_t)0x166d, (q15_t)0x1667, (q15_t)0x1660, (q15_t)0x165a, (q15_t)0x1654, (q15_t)0x164e, (q15_t)0x1648, - (q15_t)0x1642, (q15_t)0x163b, (q15_t)0x1635, (q15_t)0x162f, (q15_t)0x1629, (q15_t)0x1623, (q15_t)0x161c, (q15_t)0x1616, - (q15_t)0x1610, (q15_t)0x160a, (q15_t)0x1604, (q15_t)0x15fd, (q15_t)0x15f7, (q15_t)0x15f1, (q15_t)0x15eb, (q15_t)0x15e5, - (q15_t)0x15de, (q15_t)0x15d8, (q15_t)0x15d2, (q15_t)0x15cc, (q15_t)0x15c6, (q15_t)0x15c0, (q15_t)0x15b9, (q15_t)0x15b3, - (q15_t)0x15ad, (q15_t)0x15a7, (q15_t)0x15a1, (q15_t)0x159a, (q15_t)0x1594, (q15_t)0x158e, (q15_t)0x1588, (q15_t)0x1582, - (q15_t)0x157b, (q15_t)0x1575, (q15_t)0x156f, (q15_t)0x1569, (q15_t)0x1563, (q15_t)0x155c, (q15_t)0x1556, (q15_t)0x1550, - (q15_t)0x154a, (q15_t)0x1544, (q15_t)0x153d, (q15_t)0x1537, (q15_t)0x1531, (q15_t)0x152b, (q15_t)0x1525, (q15_t)0x151e, - (q15_t)0x1518, (q15_t)0x1512, (q15_t)0x150c, (q15_t)0x1506, (q15_t)0x14ff, (q15_t)0x14f9, (q15_t)0x14f3, (q15_t)0x14ed, - (q15_t)0x14e7, (q15_t)0x14e0, (q15_t)0x14da, (q15_t)0x14d4, (q15_t)0x14ce, (q15_t)0x14c8, (q15_t)0x14c1, (q15_t)0x14bb, - (q15_t)0x14b5, (q15_t)0x14af, (q15_t)0x14a9, (q15_t)0x14a2, (q15_t)0x149c, (q15_t)0x1496, (q15_t)0x1490, (q15_t)0x148a, - (q15_t)0x1483, (q15_t)0x147d, (q15_t)0x1477, (q15_t)0x1471, (q15_t)0x146b, (q15_t)0x1464, (q15_t)0x145e, (q15_t)0x1458, - (q15_t)0x1452, (q15_t)0x144c, (q15_t)0x1445, (q15_t)0x143f, (q15_t)0x1439, (q15_t)0x1433, (q15_t)0x142d, (q15_t)0x1426, - (q15_t)0x1420, (q15_t)0x141a, (q15_t)0x1414, (q15_t)0x140e, (q15_t)0x1407, (q15_t)0x1401, (q15_t)0x13fb, (q15_t)0x13f5, - (q15_t)0x13ef, (q15_t)0x13e8, (q15_t)0x13e2, (q15_t)0x13dc, (q15_t)0x13d6, (q15_t)0x13d0, (q15_t)0x13c9, (q15_t)0x13c3, - (q15_t)0x13bd, (q15_t)0x13b7, (q15_t)0x13b1, (q15_t)0x13aa, (q15_t)0x13a4, (q15_t)0x139e, (q15_t)0x1398, (q15_t)0x1391, - (q15_t)0x138b, (q15_t)0x1385, (q15_t)0x137f, (q15_t)0x1379, (q15_t)0x1372, (q15_t)0x136c, (q15_t)0x1366, (q15_t)0x1360, - (q15_t)0x135a, (q15_t)0x1353, (q15_t)0x134d, (q15_t)0x1347, (q15_t)0x1341, (q15_t)0x133b, (q15_t)0x1334, (q15_t)0x132e, - (q15_t)0x1328, (q15_t)0x1322, (q15_t)0x131b, (q15_t)0x1315, (q15_t)0x130f, (q15_t)0x1309, (q15_t)0x1303, (q15_t)0x12fc, - (q15_t)0x12f6, (q15_t)0x12f0, (q15_t)0x12ea, (q15_t)0x12e4, (q15_t)0x12dd, (q15_t)0x12d7, (q15_t)0x12d1, (q15_t)0x12cb, - (q15_t)0x12c4, (q15_t)0x12be, (q15_t)0x12b8, (q15_t)0x12b2, (q15_t)0x12ac, (q15_t)0x12a5, (q15_t)0x129f, (q15_t)0x1299, - (q15_t)0x1293, (q15_t)0x128d, (q15_t)0x1286, (q15_t)0x1280, (q15_t)0x127a, (q15_t)0x1274, (q15_t)0x126d, (q15_t)0x1267, - (q15_t)0x1261, (q15_t)0x125b, (q15_t)0x1255, (q15_t)0x124e, (q15_t)0x1248, (q15_t)0x1242, (q15_t)0x123c, (q15_t)0x1235, - (q15_t)0x122f, (q15_t)0x1229, (q15_t)0x1223, (q15_t)0x121d, (q15_t)0x1216, (q15_t)0x1210, (q15_t)0x120a, (q15_t)0x1204, - (q15_t)0x11fd, (q15_t)0x11f7, (q15_t)0x11f1, (q15_t)0x11eb, (q15_t)0x11e5, (q15_t)0x11de, (q15_t)0x11d8, (q15_t)0x11d2, - (q15_t)0x11cc, (q15_t)0x11c5, (q15_t)0x11bf, (q15_t)0x11b9, (q15_t)0x11b3, (q15_t)0x11ad, (q15_t)0x11a6, (q15_t)0x11a0, - (q15_t)0x119a, (q15_t)0x1194, (q15_t)0x118d, (q15_t)0x1187, (q15_t)0x1181, (q15_t)0x117b, (q15_t)0x1175, (q15_t)0x116e, - (q15_t)0x1168, (q15_t)0x1162, (q15_t)0x115c, (q15_t)0x1155, (q15_t)0x114f, (q15_t)0x1149, (q15_t)0x1143, (q15_t)0x113d, - (q15_t)0x1136, (q15_t)0x1130, (q15_t)0x112a, (q15_t)0x1124, (q15_t)0x111d, (q15_t)0x1117, (q15_t)0x1111, (q15_t)0x110b, - (q15_t)0x1105, (q15_t)0x10fe, (q15_t)0x10f8, (q15_t)0x10f2, (q15_t)0x10ec, (q15_t)0x10e5, (q15_t)0x10df, (q15_t)0x10d9, - (q15_t)0x10d3, (q15_t)0x10cc, (q15_t)0x10c6, (q15_t)0x10c0, (q15_t)0x10ba, (q15_t)0x10b4, (q15_t)0x10ad, (q15_t)0x10a7, - (q15_t)0x10a1, (q15_t)0x109b, (q15_t)0x1094, (q15_t)0x108e, (q15_t)0x1088, (q15_t)0x1082, (q15_t)0x107b, (q15_t)0x1075, - (q15_t)0x106f, (q15_t)0x1069, (q15_t)0x1063, (q15_t)0x105c, (q15_t)0x1056, (q15_t)0x1050, (q15_t)0x104a, (q15_t)0x1043, - (q15_t)0x103d, (q15_t)0x1037, (q15_t)0x1031, (q15_t)0x102a, (q15_t)0x1024, (q15_t)0x101e, (q15_t)0x1018, (q15_t)0x1012, - (q15_t)0x100b, (q15_t)0x1005, (q15_t)0xfff, (q15_t)0xff9, (q15_t)0xff2, (q15_t)0xfec, (q15_t)0xfe6, (q15_t)0xfe0, - (q15_t)0xfd9, (q15_t)0xfd3, (q15_t)0xfcd, (q15_t)0xfc7, (q15_t)0xfc0, (q15_t)0xfba, (q15_t)0xfb4, (q15_t)0xfae, - (q15_t)0xfa8, (q15_t)0xfa1, (q15_t)0xf9b, (q15_t)0xf95, (q15_t)0xf8f, (q15_t)0xf88, (q15_t)0xf82, (q15_t)0xf7c, - (q15_t)0xf76, (q15_t)0xf6f, (q15_t)0xf69, (q15_t)0xf63, (q15_t)0xf5d, (q15_t)0xf56, (q15_t)0xf50, (q15_t)0xf4a, - (q15_t)0xf44, (q15_t)0xf3e, (q15_t)0xf37, (q15_t)0xf31, (q15_t)0xf2b, (q15_t)0xf25, (q15_t)0xf1e, (q15_t)0xf18, - (q15_t)0xf12, (q15_t)0xf0c, (q15_t)0xf05, (q15_t)0xeff, (q15_t)0xef9, (q15_t)0xef3, (q15_t)0xeec, (q15_t)0xee6, - (q15_t)0xee0, (q15_t)0xeda, (q15_t)0xed3, (q15_t)0xecd, (q15_t)0xec7, (q15_t)0xec1, (q15_t)0xeba, (q15_t)0xeb4, - (q15_t)0xeae, (q15_t)0xea8, (q15_t)0xea1, (q15_t)0xe9b, (q15_t)0xe95, (q15_t)0xe8f, (q15_t)0xe89, (q15_t)0xe82, - (q15_t)0xe7c, (q15_t)0xe76, (q15_t)0xe70, (q15_t)0xe69, (q15_t)0xe63, (q15_t)0xe5d, (q15_t)0xe57, (q15_t)0xe50, - (q15_t)0xe4a, (q15_t)0xe44, (q15_t)0xe3e, (q15_t)0xe37, (q15_t)0xe31, (q15_t)0xe2b, (q15_t)0xe25, (q15_t)0xe1e, - (q15_t)0xe18, (q15_t)0xe12, (q15_t)0xe0c, (q15_t)0xe05, (q15_t)0xdff, (q15_t)0xdf9, (q15_t)0xdf3, (q15_t)0xdec, - (q15_t)0xde6, (q15_t)0xde0, (q15_t)0xdda, (q15_t)0xdd3, (q15_t)0xdcd, (q15_t)0xdc7, (q15_t)0xdc1, (q15_t)0xdba, - (q15_t)0xdb4, (q15_t)0xdae, (q15_t)0xda8, (q15_t)0xda1, (q15_t)0xd9b, (q15_t)0xd95, (q15_t)0xd8f, (q15_t)0xd88, - (q15_t)0xd82, (q15_t)0xd7c, (q15_t)0xd76, (q15_t)0xd6f, (q15_t)0xd69, (q15_t)0xd63, (q15_t)0xd5d, (q15_t)0xd56, - (q15_t)0xd50, (q15_t)0xd4a, (q15_t)0xd44, (q15_t)0xd3d, (q15_t)0xd37, (q15_t)0xd31, (q15_t)0xd2b, (q15_t)0xd24, - (q15_t)0xd1e, (q15_t)0xd18, (q15_t)0xd12, (q15_t)0xd0b, (q15_t)0xd05, (q15_t)0xcff, (q15_t)0xcf9, (q15_t)0xcf2, - (q15_t)0xcec, (q15_t)0xce6, (q15_t)0xce0, (q15_t)0xcd9, (q15_t)0xcd3, (q15_t)0xccd, (q15_t)0xcc7, (q15_t)0xcc0, - (q15_t)0xcba, (q15_t)0xcb4, (q15_t)0xcae, (q15_t)0xca7, (q15_t)0xca1, (q15_t)0xc9b, (q15_t)0xc95, (q15_t)0xc8e, - (q15_t)0xc88, (q15_t)0xc82, (q15_t)0xc7c, (q15_t)0xc75, (q15_t)0xc6f, (q15_t)0xc69, (q15_t)0xc63, (q15_t)0xc5c, - (q15_t)0xc56, (q15_t)0xc50, (q15_t)0xc4a, (q15_t)0xc43, (q15_t)0xc3d, (q15_t)0xc37, (q15_t)0xc31, (q15_t)0xc2a, - (q15_t)0xc24, (q15_t)0xc1e, (q15_t)0xc18, (q15_t)0xc11, (q15_t)0xc0b, (q15_t)0xc05, (q15_t)0xbff, (q15_t)0xbf8, - (q15_t)0xbf2, (q15_t)0xbec, (q15_t)0xbe6, (q15_t)0xbdf, (q15_t)0xbd9, (q15_t)0xbd3, (q15_t)0xbcd, (q15_t)0xbc6, - (q15_t)0xbc0, (q15_t)0xbba, (q15_t)0xbb4, (q15_t)0xbad, (q15_t)0xba7, (q15_t)0xba1, (q15_t)0xb9b, (q15_t)0xb94, - (q15_t)0xb8e, (q15_t)0xb88, (q15_t)0xb81, (q15_t)0xb7b, (q15_t)0xb75, (q15_t)0xb6f, (q15_t)0xb68, (q15_t)0xb62, - (q15_t)0xb5c, (q15_t)0xb56, (q15_t)0xb4f, (q15_t)0xb49, (q15_t)0xb43, (q15_t)0xb3d, (q15_t)0xb36, (q15_t)0xb30, - (q15_t)0xb2a, (q15_t)0xb24, (q15_t)0xb1d, (q15_t)0xb17, (q15_t)0xb11, (q15_t)0xb0b, (q15_t)0xb04, (q15_t)0xafe, - (q15_t)0xaf8, (q15_t)0xaf2, (q15_t)0xaeb, (q15_t)0xae5, (q15_t)0xadf, (q15_t)0xad8, (q15_t)0xad2, (q15_t)0xacc, - (q15_t)0xac6, (q15_t)0xabf, (q15_t)0xab9, (q15_t)0xab3, (q15_t)0xaad, (q15_t)0xaa6, (q15_t)0xaa0, (q15_t)0xa9a, - (q15_t)0xa94, (q15_t)0xa8d, (q15_t)0xa87, (q15_t)0xa81, (q15_t)0xa7b, (q15_t)0xa74, (q15_t)0xa6e, (q15_t)0xa68, - (q15_t)0xa62, (q15_t)0xa5b, (q15_t)0xa55, (q15_t)0xa4f, (q15_t)0xa48, (q15_t)0xa42, (q15_t)0xa3c, (q15_t)0xa36, - (q15_t)0xa2f, (q15_t)0xa29, (q15_t)0xa23, (q15_t)0xa1d, (q15_t)0xa16, (q15_t)0xa10, (q15_t)0xa0a, (q15_t)0xa04, - (q15_t)0x9fd, (q15_t)0x9f7, (q15_t)0x9f1, (q15_t)0x9eb, (q15_t)0x9e4, (q15_t)0x9de, (q15_t)0x9d8, (q15_t)0x9d1, - (q15_t)0x9cb, (q15_t)0x9c5, (q15_t)0x9bf, (q15_t)0x9b8, (q15_t)0x9b2, (q15_t)0x9ac, (q15_t)0x9a6, (q15_t)0x99f, - (q15_t)0x999, (q15_t)0x993, (q15_t)0x98d, (q15_t)0x986, (q15_t)0x980, (q15_t)0x97a, (q15_t)0x973, (q15_t)0x96d, - (q15_t)0x967, (q15_t)0x961, (q15_t)0x95a, (q15_t)0x954, (q15_t)0x94e, (q15_t)0x948, (q15_t)0x941, (q15_t)0x93b, - (q15_t)0x935, (q15_t)0x92f, (q15_t)0x928, (q15_t)0x922, (q15_t)0x91c, (q15_t)0x915, (q15_t)0x90f, (q15_t)0x909, - (q15_t)0x903, (q15_t)0x8fc, (q15_t)0x8f6, (q15_t)0x8f0, (q15_t)0x8ea, (q15_t)0x8e3, (q15_t)0x8dd, (q15_t)0x8d7, - (q15_t)0x8d1, (q15_t)0x8ca, (q15_t)0x8c4, (q15_t)0x8be, (q15_t)0x8b7, (q15_t)0x8b1, (q15_t)0x8ab, (q15_t)0x8a5, - (q15_t)0x89e, (q15_t)0x898, (q15_t)0x892, (q15_t)0x88c, (q15_t)0x885, (q15_t)0x87f, (q15_t)0x879, (q15_t)0x872, - (q15_t)0x86c, (q15_t)0x866, (q15_t)0x860, (q15_t)0x859, (q15_t)0x853, (q15_t)0x84d, (q15_t)0x847, (q15_t)0x840, - (q15_t)0x83a, (q15_t)0x834, (q15_t)0x82e, (q15_t)0x827, (q15_t)0x821, (q15_t)0x81b, (q15_t)0x814, (q15_t)0x80e, - (q15_t)0x808, (q15_t)0x802, (q15_t)0x7fb, (q15_t)0x7f5, (q15_t)0x7ef, (q15_t)0x7e9, (q15_t)0x7e2, (q15_t)0x7dc, - (q15_t)0x7d6, (q15_t)0x7cf, (q15_t)0x7c9, (q15_t)0x7c3, (q15_t)0x7bd, (q15_t)0x7b6, (q15_t)0x7b0, (q15_t)0x7aa, - (q15_t)0x7a4, (q15_t)0x79d, (q15_t)0x797, (q15_t)0x791, (q15_t)0x78a, (q15_t)0x784, (q15_t)0x77e, (q15_t)0x778, - (q15_t)0x771, (q15_t)0x76b, (q15_t)0x765, (q15_t)0x75f, (q15_t)0x758, (q15_t)0x752, (q15_t)0x74c, (q15_t)0x745, - (q15_t)0x73f, (q15_t)0x739, (q15_t)0x733, (q15_t)0x72c, (q15_t)0x726, (q15_t)0x720, (q15_t)0x71a, (q15_t)0x713, - (q15_t)0x70d, (q15_t)0x707, (q15_t)0x700, (q15_t)0x6fa, (q15_t)0x6f4, (q15_t)0x6ee, (q15_t)0x6e7, (q15_t)0x6e1, - (q15_t)0x6db, (q15_t)0x6d5, (q15_t)0x6ce, (q15_t)0x6c8, (q15_t)0x6c2, (q15_t)0x6bb, (q15_t)0x6b5, (q15_t)0x6af, - (q15_t)0x6a9, (q15_t)0x6a2, (q15_t)0x69c, (q15_t)0x696, (q15_t)0x690, (q15_t)0x689, (q15_t)0x683, (q15_t)0x67d, - (q15_t)0x676, (q15_t)0x670, (q15_t)0x66a, (q15_t)0x664, (q15_t)0x65d, (q15_t)0x657, (q15_t)0x651, (q15_t)0x64a, - (q15_t)0x644, (q15_t)0x63e, (q15_t)0x638, (q15_t)0x631, (q15_t)0x62b, (q15_t)0x625, (q15_t)0x61f, (q15_t)0x618, - (q15_t)0x612, (q15_t)0x60c, (q15_t)0x605, (q15_t)0x5ff, (q15_t)0x5f9, (q15_t)0x5f3, (q15_t)0x5ec, (q15_t)0x5e6, - (q15_t)0x5e0, (q15_t)0x5da, (q15_t)0x5d3, (q15_t)0x5cd, (q15_t)0x5c7, (q15_t)0x5c0, (q15_t)0x5ba, (q15_t)0x5b4, - (q15_t)0x5ae, (q15_t)0x5a7, (q15_t)0x5a1, (q15_t)0x59b, (q15_t)0x594, (q15_t)0x58e, (q15_t)0x588, (q15_t)0x582, - (q15_t)0x57b, (q15_t)0x575, (q15_t)0x56f, (q15_t)0x569, (q15_t)0x562, (q15_t)0x55c, (q15_t)0x556, (q15_t)0x54f, - (q15_t)0x549, (q15_t)0x543, (q15_t)0x53d, (q15_t)0x536, (q15_t)0x530, (q15_t)0x52a, (q15_t)0x523, (q15_t)0x51d, - (q15_t)0x517, (q15_t)0x511, (q15_t)0x50a, (q15_t)0x504, (q15_t)0x4fe, (q15_t)0x4f8, (q15_t)0x4f1, (q15_t)0x4eb, - (q15_t)0x4e5, (q15_t)0x4de, (q15_t)0x4d8, (q15_t)0x4d2, (q15_t)0x4cc, (q15_t)0x4c5, (q15_t)0x4bf, (q15_t)0x4b9, - (q15_t)0x4b2, (q15_t)0x4ac, (q15_t)0x4a6, (q15_t)0x4a0, (q15_t)0x499, (q15_t)0x493, (q15_t)0x48d, (q15_t)0x487, - (q15_t)0x480, (q15_t)0x47a, (q15_t)0x474, (q15_t)0x46d, (q15_t)0x467, (q15_t)0x461, (q15_t)0x45b, (q15_t)0x454, - (q15_t)0x44e, (q15_t)0x448, (q15_t)0x441, (q15_t)0x43b, (q15_t)0x435, (q15_t)0x42f, (q15_t)0x428, (q15_t)0x422, - (q15_t)0x41c, (q15_t)0x415, (q15_t)0x40f, (q15_t)0x409, (q15_t)0x403, (q15_t)0x3fc, (q15_t)0x3f6, (q15_t)0x3f0, - (q15_t)0x3ea, (q15_t)0x3e3, (q15_t)0x3dd, (q15_t)0x3d7, (q15_t)0x3d0, (q15_t)0x3ca, (q15_t)0x3c4, (q15_t)0x3be, - (q15_t)0x3b7, (q15_t)0x3b1, (q15_t)0x3ab, (q15_t)0x3a4, (q15_t)0x39e, (q15_t)0x398, (q15_t)0x392, (q15_t)0x38b, - (q15_t)0x385, (q15_t)0x37f, (q15_t)0x378, (q15_t)0x372, (q15_t)0x36c, (q15_t)0x366, (q15_t)0x35f, (q15_t)0x359, - (q15_t)0x353, (q15_t)0x34c, (q15_t)0x346, (q15_t)0x340, (q15_t)0x33a, (q15_t)0x333, (q15_t)0x32d, (q15_t)0x327, - (q15_t)0x321, (q15_t)0x31a, (q15_t)0x314, (q15_t)0x30e, (q15_t)0x307, (q15_t)0x301, (q15_t)0x2fb, (q15_t)0x2f5, - (q15_t)0x2ee, (q15_t)0x2e8, (q15_t)0x2e2, (q15_t)0x2db, (q15_t)0x2d5, (q15_t)0x2cf, (q15_t)0x2c9, (q15_t)0x2c2, - (q15_t)0x2bc, (q15_t)0x2b6, (q15_t)0x2af, (q15_t)0x2a9, (q15_t)0x2a3, (q15_t)0x29d, (q15_t)0x296, (q15_t)0x290, - (q15_t)0x28a, (q15_t)0x283, (q15_t)0x27d, (q15_t)0x277, (q15_t)0x271, (q15_t)0x26a, (q15_t)0x264, (q15_t)0x25e, - (q15_t)0x258, (q15_t)0x251, (q15_t)0x24b, (q15_t)0x245, (q15_t)0x23e, (q15_t)0x238, (q15_t)0x232, (q15_t)0x22c, - (q15_t)0x225, (q15_t)0x21f, (q15_t)0x219, (q15_t)0x212, (q15_t)0x20c, (q15_t)0x206, (q15_t)0x200, (q15_t)0x1f9, - (q15_t)0x1f3, (q15_t)0x1ed, (q15_t)0x1e6, (q15_t)0x1e0, (q15_t)0x1da, (q15_t)0x1d4, (q15_t)0x1cd, (q15_t)0x1c7, - (q15_t)0x1c1, (q15_t)0x1ba, (q15_t)0x1b4, (q15_t)0x1ae, (q15_t)0x1a8, (q15_t)0x1a1, (q15_t)0x19b, (q15_t)0x195, - (q15_t)0x18e, (q15_t)0x188, (q15_t)0x182, (q15_t)0x17c, (q15_t)0x175, (q15_t)0x16f, (q15_t)0x169, (q15_t)0x162, - (q15_t)0x15c, (q15_t)0x156, (q15_t)0x150, (q15_t)0x149, (q15_t)0x143, (q15_t)0x13d, (q15_t)0x137, (q15_t)0x130, - (q15_t)0x12a, (q15_t)0x124, (q15_t)0x11d, (q15_t)0x117, (q15_t)0x111, (q15_t)0x10b, (q15_t)0x104, (q15_t)0xfe, - (q15_t)0xf8, (q15_t)0xf1, (q15_t)0xeb, (q15_t)0xe5, (q15_t)0xdf, (q15_t)0xd8, (q15_t)0xd2, (q15_t)0xcc, - (q15_t)0xc5, (q15_t)0xbf, (q15_t)0xb9, (q15_t)0xb3, (q15_t)0xac, (q15_t)0xa6, (q15_t)0xa0, (q15_t)0x99, - (q15_t)0x93, (q15_t)0x8d, (q15_t)0x87, (q15_t)0x80, (q15_t)0x7a, (q15_t)0x74, (q15_t)0x6d, (q15_t)0x67, - (q15_t)0x61, (q15_t)0x5b, (q15_t)0x54, (q15_t)0x4e, (q15_t)0x48, (q15_t)0x41, (q15_t)0x3b, (q15_t)0x35, - (q15_t)0x2f, (q15_t)0x28, (q15_t)0x22, (q15_t)0x1c, (q15_t)0x15, (q15_t)0xf, (q15_t)0x9, (q15_t)0x3 -}; - #endif - -/** - @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. - */ - -/** - @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. -*/ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_128) - const q31_t WeightsQ31_128[256] = { - (q31_t)0x7fffffff, (q31_t)0x00000000, (q31_t)0x7ffd885a, (q31_t)0xfe6de2e0, (q31_t)0x7ff62182, (q31_t)0xfcdbd541, (q31_t)0x7fe9cbc0, (q31_t)0xfb49e6a3, - (q31_t)0x7fd8878e, (q31_t)0xf9b82684, (q31_t)0x7fc25596, (q31_t)0xf826a462, (q31_t)0x7fa736b4, (q31_t)0xf6956fb7, (q31_t)0x7f872bf3, (q31_t)0xf50497fb, - (q31_t)0x7f62368f, (q31_t)0xf3742ca2, (q31_t)0x7f3857f6, (q31_t)0xf1e43d1c, (q31_t)0x7f0991c4, (q31_t)0xf054d8d5, (q31_t)0x7ed5e5c6, (q31_t)0xeec60f31, - (q31_t)0x7e9d55fc, (q31_t)0xed37ef91, (q31_t)0x7e5fe493, (q31_t)0xebaa894f, (q31_t)0x7e1d93ea, (q31_t)0xea1debbb, (q31_t)0x7dd6668f, (q31_t)0xe8922622, - (q31_t)0x7d8a5f40, (q31_t)0xe70747c4, (q31_t)0x7d3980ec, (q31_t)0xe57d5fda, (q31_t)0x7ce3ceb2, (q31_t)0xe3f47d96, (q31_t)0x7c894bde, (q31_t)0xe26cb01b, - (q31_t)0x7c29fbee, (q31_t)0xe0e60685, (q31_t)0x7bc5e290, (q31_t)0xdf608fe4, (q31_t)0x7b5d039e, (q31_t)0xdddc5b3b, (q31_t)0x7aef6323, (q31_t)0xdc597781, - (q31_t)0x7a7d055b, (q31_t)0xdad7f3a2, (q31_t)0x7a05eead, (q31_t)0xd957de7a, (q31_t)0x798a23b1, (q31_t)0xd7d946d8, (q31_t)0x7909a92d, (q31_t)0xd65c3b7b, - (q31_t)0x78848414, (q31_t)0xd4e0cb15, (q31_t)0x77fab989, (q31_t)0xd3670446, (q31_t)0x776c4edb, (q31_t)0xd1eef59e, (q31_t)0x76d94989, (q31_t)0xd078ad9e, - (q31_t)0x7641af3d, (q31_t)0xcf043ab3, (q31_t)0x75a585cf, (q31_t)0xcd91ab39, (q31_t)0x7504d345, (q31_t)0xcc210d79, (q31_t)0x745f9dd1, (q31_t)0xcab26fa9, - (q31_t)0x73b5ebd1, (q31_t)0xc945dfec, (q31_t)0x7307c3d0, (q31_t)0xc7db6c50, (q31_t)0x72552c85, (q31_t)0xc67322ce, (q31_t)0x719e2cd2, (q31_t)0xc50d1149, - (q31_t)0x70e2cbc6, (q31_t)0xc3a94590, (q31_t)0x7023109a, (q31_t)0xc247cd5a, (q31_t)0x6f5f02b2, (q31_t)0xc0e8b648, (q31_t)0x6e96a99d, (q31_t)0xbf8c0de3, - (q31_t)0x6dca0d14, (q31_t)0xbe31e19b, (q31_t)0x6cf934fc, (q31_t)0xbcda3ecb, (q31_t)0x6c242960, (q31_t)0xbb8532b0, (q31_t)0x6b4af279, (q31_t)0xba32ca71, - (q31_t)0x6a6d98a4, (q31_t)0xb8e31319, (q31_t)0x698c246c, (q31_t)0xb796199b, (q31_t)0x68a69e81, (q31_t)0xb64beacd, (q31_t)0x67bd0fbd, (q31_t)0xb5049368, - (q31_t)0x66cf8120, (q31_t)0xb3c0200c, (q31_t)0x65ddfbd3, (q31_t)0xb27e9d3c, (q31_t)0x64e88926, (q31_t)0xb140175b, (q31_t)0x63ef3290, (q31_t)0xb0049ab3, - (q31_t)0x62f201ac, (q31_t)0xaecc336c, (q31_t)0x61f1003f, (q31_t)0xad96ed92, (q31_t)0x60ec3830, (q31_t)0xac64d510, (q31_t)0x5fe3b38d, (q31_t)0xab35f5b5, - (q31_t)0x5ed77c8a, (q31_t)0xaa0a5b2e, (q31_t)0x5dc79d7c, (q31_t)0xa8e21106, (q31_t)0x5cb420e0, (q31_t)0xa7bd22ac, (q31_t)0x5b9d1154, (q31_t)0xa69b9b68, - (q31_t)0x5a82799a, (q31_t)0xa57d8666, (q31_t)0x59646498, (q31_t)0xa462eeac, (q31_t)0x5842dd54, (q31_t)0xa34bdf20, (q31_t)0x571deefa, (q31_t)0xa2386284, - (q31_t)0x55f5a4d2, (q31_t)0xa1288376, (q31_t)0x54ca0a4b, (q31_t)0xa01c4c73, (q31_t)0x539b2af0, (q31_t)0x9f13c7d0, (q31_t)0x5269126e, (q31_t)0x9e0effc1, - (q31_t)0x5133cc94, (q31_t)0x9d0dfe54, (q31_t)0x4ffb654d, (q31_t)0x9c10cd70, (q31_t)0x4ebfe8a5, (q31_t)0x9b1776da, (q31_t)0x4d8162c4, (q31_t)0x9a22042d, - (q31_t)0x4c3fdff4, (q31_t)0x99307ee0, (q31_t)0x4afb6c98, (q31_t)0x9842f043, (q31_t)0x49b41533, (q31_t)0x9759617f, (q31_t)0x4869e665, (q31_t)0x9673db94, - (q31_t)0x471cece7, (q31_t)0x9592675c, (q31_t)0x45cd358f, (q31_t)0x94b50d87, (q31_t)0x447acd50, (q31_t)0x93dbd6a0, (q31_t)0x4325c135, (q31_t)0x9306cb04, - (q31_t)0x41ce1e65, (q31_t)0x9235f2ec, (q31_t)0x4073f21d, (q31_t)0x91695663, (q31_t)0x3f1749b8, (q31_t)0x90a0fd4e, (q31_t)0x3db832a6, (q31_t)0x8fdcef66, - (q31_t)0x3c56ba70, (q31_t)0x8f1d343a, (q31_t)0x3af2eeb7, (q31_t)0x8e61d32e, (q31_t)0x398cdd32, (q31_t)0x8daad37b, (q31_t)0x382493b0, (q31_t)0x8cf83c30, - (q31_t)0x36ba2014, (q31_t)0x8c4a142f, (q31_t)0x354d9057, (q31_t)0x8ba0622f, (q31_t)0x33def287, (q31_t)0x8afb2cbb, (q31_t)0x326e54c7, (q31_t)0x8a5a7a31, - (q31_t)0x30fbc54d, (q31_t)0x89be50c3, (q31_t)0x2f875262, (q31_t)0x8926b677, (q31_t)0x2e110a62, (q31_t)0x8893b125, (q31_t)0x2c98fbba, (q31_t)0x88054677, - (q31_t)0x2b1f34eb, (q31_t)0x877b7bec, (q31_t)0x29a3c485, (q31_t)0x86f656d3, (q31_t)0x2826b928, (q31_t)0x8675dc4f, (q31_t)0x26a82186, (q31_t)0x85fa1153, - (q31_t)0x25280c5e, (q31_t)0x8582faa5, (q31_t)0x23a6887f, (q31_t)0x85109cdd, (q31_t)0x2223a4c5, (q31_t)0x84a2fc62, (q31_t)0x209f701c, (q31_t)0x843a1d70, - (q31_t)0x1f19f97b, (q31_t)0x83d60412, (q31_t)0x1d934fe5, (q31_t)0x8376b422, (q31_t)0x1c0b826a, (q31_t)0x831c314e, (q31_t)0x1a82a026, (q31_t)0x82c67f14, - (q31_t)0x18f8b83c, (q31_t)0x8275a0c0, (q31_t)0x176dd9de, (q31_t)0x82299971, (q31_t)0x15e21445, (q31_t)0x81e26c16, (q31_t)0x145576b1, (q31_t)0x81a01b6d, - (q31_t)0x12c8106f, (q31_t)0x8162aa04, (q31_t)0x1139f0cf, (q31_t)0x812a1a3a, (q31_t)0x0fab272b, (q31_t)0x80f66e3c, (q31_t)0x0e1bc2e4, (q31_t)0x80c7a80a, - (q31_t)0x0c8bd35e, (q31_t)0x809dc971, (q31_t)0x0afb6805, (q31_t)0x8078d40d, (q31_t)0x096a9049, (q31_t)0x8058c94c, (q31_t)0x07d95b9e, (q31_t)0x803daa6a, - (q31_t)0x0647d97c, (q31_t)0x80277872, (q31_t)0x04b6195d, (q31_t)0x80163440, (q31_t)0x03242abf, (q31_t)0x8009de7e, (q31_t)0x01921d20, (q31_t)0x800277a6 -}; - const q31_t cos_factorsQ31_128[128] = { - (q31_t)0x7fff6216, (q31_t)0x7ffa72d1, (q31_t)0x7ff09478, (q31_t)0x7fe1c76b, (q31_t)0x7fce0c3e, (q31_t)0x7fb563b3, - (q31_t)0x7f97cebd, (q31_t)0x7f754e80, - (q31_t)0x7f4de451, (q31_t)0x7f2191b4, (q31_t)0x7ef05860, (q31_t)0x7eba3a39, (q31_t)0x7e7f3957, (q31_t)0x7e3f57ff, - (q31_t)0x7dfa98a8, (q31_t)0x7db0fdf8, - (q31_t)0x7d628ac6, (q31_t)0x7d0f4218, (q31_t)0x7cb72724, (q31_t)0x7c5a3d50, (q31_t)0x7bf88830, (q31_t)0x7b920b89, - (q31_t)0x7b26cb4f, (q31_t)0x7ab6cba4, - (q31_t)0x7a4210d8, (q31_t)0x79c89f6e, (q31_t)0x794a7c12, (q31_t)0x78c7aba2, (q31_t)0x78403329, (q31_t)0x77b417df, - (q31_t)0x77235f2d, (q31_t)0x768e0ea6, - (q31_t)0x75f42c0b, (q31_t)0x7555bd4c, (q31_t)0x74b2c884, (q31_t)0x740b53fb, (q31_t)0x735f6626, (q31_t)0x72af05a7, - (q31_t)0x71fa3949, (q31_t)0x71410805, - (q31_t)0x708378ff, (q31_t)0x6fc19385, (q31_t)0x6efb5f12, (q31_t)0x6e30e34a, (q31_t)0x6d6227fa, (q31_t)0x6c8f351c, - (q31_t)0x6bb812d1, (q31_t)0x6adcc964, - (q31_t)0x69fd614a, (q31_t)0x6919e320, (q31_t)0x683257ab, (q31_t)0x6746c7d8, (q31_t)0x66573cbb, (q31_t)0x6563bf92, - (q31_t)0x646c59bf, (q31_t)0x637114cc, - (q31_t)0x6271fa69, (q31_t)0x616f146c, (q31_t)0x60686ccf, (q31_t)0x5f5e0db3, (q31_t)0x5e50015d, (q31_t)0x5d3e5237, - (q31_t)0x5c290acc, (q31_t)0x5b1035cf, - (q31_t)0x59f3de12, (q31_t)0x58d40e8c, (q31_t)0x57b0d256, (q31_t)0x568a34a9, (q31_t)0x556040e2, (q31_t)0x5433027d, - (q31_t)0x53028518, (q31_t)0x51ced46e, - (q31_t)0x5097fc5e, (q31_t)0x4f5e08e3, (q31_t)0x4e210617, (q31_t)0x4ce10034, (q31_t)0x4b9e0390, (q31_t)0x4a581c9e, - (q31_t)0x490f57ee, (q31_t)0x47c3c22f, - (q31_t)0x46756828, (q31_t)0x452456bd, (q31_t)0x43d09aed, (q31_t)0x427a41d0, (q31_t)0x4121589b, (q31_t)0x3fc5ec98, - (q31_t)0x3e680b2c, (q31_t)0x3d07c1d6, - (q31_t)0x3ba51e29, (q31_t)0x3a402dd2, (q31_t)0x38d8fe93, (q31_t)0x376f9e46, (q31_t)0x36041ad9, (q31_t)0x34968250, - (q31_t)0x3326e2c3, (q31_t)0x31b54a5e, - (q31_t)0x3041c761, (q31_t)0x2ecc681e, (q31_t)0x2d553afc, (q31_t)0x2bdc4e6f, (q31_t)0x2a61b101, (q31_t)0x28e5714b, - (q31_t)0x27679df4, (q31_t)0x25e845b6, - (q31_t)0x24677758, (q31_t)0x22e541af, (q31_t)0x2161b3a0, (q31_t)0x1fdcdc1b, (q31_t)0x1e56ca1e, (q31_t)0x1ccf8cb3, - (q31_t)0x1b4732ef, (q31_t)0x19bdcbf3, - (q31_t)0x183366e9, (q31_t)0x16a81305, (q31_t)0x151bdf86, (q31_t)0x138edbb1, (q31_t)0x120116d5, (q31_t)0x1072a048, - (q31_t)0xee38766, (q31_t)0xd53db92, - (q31_t)0xbc3ac35, (q31_t)0xa3308bd, (q31_t)0x8a2009a, (q31_t)0x710a345, (q31_t)0x57f0035, (q31_t)0x3ed26e6, (q31_t)0x25b26d7, - (q31_t)0xc90f88 -}; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_512) - const q31_t WeightsQ31_512[1024] = { - (q31_t)0x7fffffff, (q31_t)0x00000000, (q31_t)0x7fffd886, (q31_t)0xff9b781d, (q31_t)0x7fff6216, (q31_t)0xff36f078, (q31_t)0x7ffe9cb2, (q31_t)0xfed2694f, - (q31_t)0x7ffd885a, (q31_t)0xfe6de2e0, (q31_t)0x7ffc250f, (q31_t)0xfe095d69, (q31_t)0x7ffa72d1, (q31_t)0xfda4d929, (q31_t)0x7ff871a2, (q31_t)0xfd40565c, - (q31_t)0x7ff62182, (q31_t)0xfcdbd541, (q31_t)0x7ff38274, (q31_t)0xfc775616, (q31_t)0x7ff09478, (q31_t)0xfc12d91a, (q31_t)0x7fed5791, (q31_t)0xfbae5e89, - (q31_t)0x7fe9cbc0, (q31_t)0xfb49e6a3, (q31_t)0x7fe5f108, (q31_t)0xfae571a4, (q31_t)0x7fe1c76b, (q31_t)0xfa80ffcb, (q31_t)0x7fdd4eec, (q31_t)0xfa1c9157, - (q31_t)0x7fd8878e, (q31_t)0xf9b82684, (q31_t)0x7fd37153, (q31_t)0xf953bf91, (q31_t)0x7fce0c3e, (q31_t)0xf8ef5cbb, (q31_t)0x7fc85854, (q31_t)0xf88afe42, - (q31_t)0x7fc25596, (q31_t)0xf826a462, (q31_t)0x7fbc040a, (q31_t)0xf7c24f59, (q31_t)0x7fb563b3, (q31_t)0xf75dff66, (q31_t)0x7fae7495, (q31_t)0xf6f9b4c6, - (q31_t)0x7fa736b4, (q31_t)0xf6956fb7, (q31_t)0x7f9faa15, (q31_t)0xf6313077, (q31_t)0x7f97cebd, (q31_t)0xf5ccf743, (q31_t)0x7f8fa4b0, (q31_t)0xf568c45b, - (q31_t)0x7f872bf3, (q31_t)0xf50497fb, (q31_t)0x7f7e648c, (q31_t)0xf4a07261, (q31_t)0x7f754e80, (q31_t)0xf43c53cb, (q31_t)0x7f6be9d4, (q31_t)0xf3d83c77, - (q31_t)0x7f62368f, (q31_t)0xf3742ca2, (q31_t)0x7f5834b7, (q31_t)0xf310248a, (q31_t)0x7f4de451, (q31_t)0xf2ac246e, (q31_t)0x7f434563, (q31_t)0xf2482c8a, - (q31_t)0x7f3857f6, (q31_t)0xf1e43d1c, (q31_t)0x7f2d1c0e, (q31_t)0xf1805662, (q31_t)0x7f2191b4, (q31_t)0xf11c789a, (q31_t)0x7f15b8ee, (q31_t)0xf0b8a401, - (q31_t)0x7f0991c4, (q31_t)0xf054d8d5, (q31_t)0x7efd1c3c, (q31_t)0xeff11753, (q31_t)0x7ef05860, (q31_t)0xef8d5fb8, (q31_t)0x7ee34636, (q31_t)0xef29b243, - (q31_t)0x7ed5e5c6, (q31_t)0xeec60f31, (q31_t)0x7ec8371a, (q31_t)0xee6276bf, (q31_t)0x7eba3a39, (q31_t)0xedfee92b, (q31_t)0x7eabef2c, (q31_t)0xed9b66b2, - (q31_t)0x7e9d55fc, (q31_t)0xed37ef91, (q31_t)0x7e8e6eb2, (q31_t)0xecd48407, (q31_t)0x7e7f3957, (q31_t)0xec71244f, (q31_t)0x7e6fb5f4, (q31_t)0xec0dd0a8, - (q31_t)0x7e5fe493, (q31_t)0xebaa894f, (q31_t)0x7e4fc53e, (q31_t)0xeb474e81, (q31_t)0x7e3f57ff, (q31_t)0xeae4207a, (q31_t)0x7e2e9cdf, (q31_t)0xea80ff7a, - (q31_t)0x7e1d93ea, (q31_t)0xea1debbb, (q31_t)0x7e0c3d29, (q31_t)0xe9bae57d, (q31_t)0x7dfa98a8, (q31_t)0xe957ecfb, (q31_t)0x7de8a670, (q31_t)0xe8f50273, - (q31_t)0x7dd6668f, (q31_t)0xe8922622, (q31_t)0x7dc3d90d, (q31_t)0xe82f5844, (q31_t)0x7db0fdf8, (q31_t)0xe7cc9917, (q31_t)0x7d9dd55a, (q31_t)0xe769e8d8, - (q31_t)0x7d8a5f40, (q31_t)0xe70747c4, (q31_t)0x7d769bb5, (q31_t)0xe6a4b616, (q31_t)0x7d628ac6, (q31_t)0xe642340d, (q31_t)0x7d4e2c7f, (q31_t)0xe5dfc1e5, - (q31_t)0x7d3980ec, (q31_t)0xe57d5fda, (q31_t)0x7d24881b, (q31_t)0xe51b0e2a, (q31_t)0x7d0f4218, (q31_t)0xe4b8cd11, (q31_t)0x7cf9aef0, (q31_t)0xe4569ccb, - (q31_t)0x7ce3ceb2, (q31_t)0xe3f47d96, (q31_t)0x7ccda169, (q31_t)0xe3926fad, (q31_t)0x7cb72724, (q31_t)0xe330734d, (q31_t)0x7ca05ff1, (q31_t)0xe2ce88b3, - (q31_t)0x7c894bde, (q31_t)0xe26cb01b, (q31_t)0x7c71eaf9, (q31_t)0xe20ae9c1, (q31_t)0x7c5a3d50, (q31_t)0xe1a935e2, (q31_t)0x7c4242f2, (q31_t)0xe14794ba, - (q31_t)0x7c29fbee, (q31_t)0xe0e60685, (q31_t)0x7c116853, (q31_t)0xe0848b7f, (q31_t)0x7bf88830, (q31_t)0xe02323e5, (q31_t)0x7bdf5b94, (q31_t)0xdfc1cff3, - (q31_t)0x7bc5e290, (q31_t)0xdf608fe4, (q31_t)0x7bac1d31, (q31_t)0xdeff63f4, (q31_t)0x7b920b89, (q31_t)0xde9e4c60, (q31_t)0x7b77ada8, (q31_t)0xde3d4964, - (q31_t)0x7b5d039e, (q31_t)0xdddc5b3b, (q31_t)0x7b420d7a, (q31_t)0xdd7b8220, (q31_t)0x7b26cb4f, (q31_t)0xdd1abe51, (q31_t)0x7b0b3d2c, (q31_t)0xdcba1008, - (q31_t)0x7aef6323, (q31_t)0xdc597781, (q31_t)0x7ad33d45, (q31_t)0xdbf8f4f8, (q31_t)0x7ab6cba4, (q31_t)0xdb9888a8, (q31_t)0x7a9a0e50, (q31_t)0xdb3832cd, - (q31_t)0x7a7d055b, (q31_t)0xdad7f3a2, (q31_t)0x7a5fb0d8, (q31_t)0xda77cb63, (q31_t)0x7a4210d8, (q31_t)0xda17ba4a, (q31_t)0x7a24256f, (q31_t)0xd9b7c094, - (q31_t)0x7a05eead, (q31_t)0xd957de7a, (q31_t)0x79e76ca7, (q31_t)0xd8f81439, (q31_t)0x79c89f6e, (q31_t)0xd898620c, (q31_t)0x79a98715, (q31_t)0xd838c82d, - (q31_t)0x798a23b1, (q31_t)0xd7d946d8, (q31_t)0x796a7554, (q31_t)0xd779de47, (q31_t)0x794a7c12, (q31_t)0xd71a8eb5, (q31_t)0x792a37fe, (q31_t)0xd6bb585e, - (q31_t)0x7909a92d, (q31_t)0xd65c3b7b, (q31_t)0x78e8cfb2, (q31_t)0xd5fd3848, (q31_t)0x78c7aba2, (q31_t)0xd59e4eff, (q31_t)0x78a63d11, (q31_t)0xd53f7fda, - (q31_t)0x78848414, (q31_t)0xd4e0cb15, (q31_t)0x786280bf, (q31_t)0xd48230e9, (q31_t)0x78403329, (q31_t)0xd423b191, (q31_t)0x781d9b65, (q31_t)0xd3c54d47, - (q31_t)0x77fab989, (q31_t)0xd3670446, (q31_t)0x77d78daa, (q31_t)0xd308d6c7, (q31_t)0x77b417df, (q31_t)0xd2aac504, (q31_t)0x7790583e, (q31_t)0xd24ccf39, - (q31_t)0x776c4edb, (q31_t)0xd1eef59e, (q31_t)0x7747fbce, (q31_t)0xd191386e, (q31_t)0x77235f2d, (q31_t)0xd13397e2, (q31_t)0x76fe790e, (q31_t)0xd0d61434, - (q31_t)0x76d94989, (q31_t)0xd078ad9e, (q31_t)0x76b3d0b4, (q31_t)0xd01b6459, (q31_t)0x768e0ea6, (q31_t)0xcfbe389f, (q31_t)0x76680376, (q31_t)0xcf612aaa, - (q31_t)0x7641af3d, (q31_t)0xcf043ab3, (q31_t)0x761b1211, (q31_t)0xcea768f2, (q31_t)0x75f42c0b, (q31_t)0xce4ab5a2, (q31_t)0x75ccfd42, (q31_t)0xcdee20fc, - (q31_t)0x75a585cf, (q31_t)0xcd91ab39, (q31_t)0x757dc5ca, (q31_t)0xcd355491, (q31_t)0x7555bd4c, (q31_t)0xccd91d3d, (q31_t)0x752d6c6c, (q31_t)0xcc7d0578, - (q31_t)0x7504d345, (q31_t)0xcc210d79, (q31_t)0x74dbf1ef, (q31_t)0xcbc53579, (q31_t)0x74b2c884, (q31_t)0xcb697db0, (q31_t)0x7489571c, (q31_t)0xcb0de658, - (q31_t)0x745f9dd1, (q31_t)0xcab26fa9, (q31_t)0x74359cbd, (q31_t)0xca5719db, (q31_t)0x740b53fb, (q31_t)0xc9fbe527, (q31_t)0x73e0c3a3, (q31_t)0xc9a0d1c5, - (q31_t)0x73b5ebd1, (q31_t)0xc945dfec, (q31_t)0x738acc9e, (q31_t)0xc8eb0fd6, (q31_t)0x735f6626, (q31_t)0xc89061ba, (q31_t)0x7333b883, (q31_t)0xc835d5d0, - (q31_t)0x7307c3d0, (q31_t)0xc7db6c50, (q31_t)0x72db8828, (q31_t)0xc7812572, (q31_t)0x72af05a7, (q31_t)0xc727016d, (q31_t)0x72823c67, (q31_t)0xc6cd0079, - (q31_t)0x72552c85, (q31_t)0xc67322ce, (q31_t)0x7227d61c, (q31_t)0xc61968a2, (q31_t)0x71fa3949, (q31_t)0xc5bfd22e, (q31_t)0x71cc5626, (q31_t)0xc5665fa9, - (q31_t)0x719e2cd2, (q31_t)0xc50d1149, (q31_t)0x716fbd68, (q31_t)0xc4b3e746, (q31_t)0x71410805, (q31_t)0xc45ae1d7, (q31_t)0x71120cc5, (q31_t)0xc4020133, - (q31_t)0x70e2cbc6, (q31_t)0xc3a94590, (q31_t)0x70b34525, (q31_t)0xc350af26, (q31_t)0x708378ff, (q31_t)0xc2f83e2a, (q31_t)0x70536771, (q31_t)0xc29ff2d4, - (q31_t)0x7023109a, (q31_t)0xc247cd5a, (q31_t)0x6ff27497, (q31_t)0xc1efcdf3, (q31_t)0x6fc19385, (q31_t)0xc197f4d4, (q31_t)0x6f906d84, (q31_t)0xc1404233, - (q31_t)0x6f5f02b2, (q31_t)0xc0e8b648, (q31_t)0x6f2d532c, (q31_t)0xc0915148, (q31_t)0x6efb5f12, (q31_t)0xc03a1368, (q31_t)0x6ec92683, (q31_t)0xbfe2fcdf, - (q31_t)0x6e96a99d, (q31_t)0xbf8c0de3, (q31_t)0x6e63e87f, (q31_t)0xbf3546a8, (q31_t)0x6e30e34a, (q31_t)0xbedea765, (q31_t)0x6dfd9a1c, (q31_t)0xbe88304f, - (q31_t)0x6dca0d14, (q31_t)0xbe31e19b, (q31_t)0x6d963c54, (q31_t)0xbddbbb7f, (q31_t)0x6d6227fa, (q31_t)0xbd85be30, (q31_t)0x6d2dd027, (q31_t)0xbd2fe9e2, - (q31_t)0x6cf934fc, (q31_t)0xbcda3ecb, (q31_t)0x6cc45698, (q31_t)0xbc84bd1f, (q31_t)0x6c8f351c, (q31_t)0xbc2f6513, (q31_t)0x6c59d0a9, (q31_t)0xbbda36dd, - (q31_t)0x6c242960, (q31_t)0xbb8532b0, (q31_t)0x6bee3f62, (q31_t)0xbb3058c0, (q31_t)0x6bb812d1, (q31_t)0xbadba943, (q31_t)0x6b81a3cd, (q31_t)0xba87246d, - (q31_t)0x6b4af279, (q31_t)0xba32ca71, (q31_t)0x6b13fef5, (q31_t)0xb9de9b83, (q31_t)0x6adcc964, (q31_t)0xb98a97d8, (q31_t)0x6aa551e9, (q31_t)0xb936bfa4, - (q31_t)0x6a6d98a4, (q31_t)0xb8e31319, (q31_t)0x6a359db9, (q31_t)0xb88f926d, (q31_t)0x69fd614a, (q31_t)0xb83c3dd1, (q31_t)0x69c4e37a, (q31_t)0xb7e9157a, - (q31_t)0x698c246c, (q31_t)0xb796199b, (q31_t)0x69532442, (q31_t)0xb7434a67, (q31_t)0x6919e320, (q31_t)0xb6f0a812, (q31_t)0x68e06129, (q31_t)0xb69e32cd, - (q31_t)0x68a69e81, (q31_t)0xb64beacd, (q31_t)0x686c9b4b, (q31_t)0xb5f9d043, (q31_t)0x683257ab, (q31_t)0xb5a7e362, (q31_t)0x67f7d3c5, (q31_t)0xb556245e, - (q31_t)0x67bd0fbd, (q31_t)0xb5049368, (q31_t)0x67820bb7, (q31_t)0xb4b330b3, (q31_t)0x6746c7d8, (q31_t)0xb461fc70, (q31_t)0x670b4444, (q31_t)0xb410f6d3, - (q31_t)0x66cf8120, (q31_t)0xb3c0200c, (q31_t)0x66937e91, (q31_t)0xb36f784f, (q31_t)0x66573cbb, (q31_t)0xb31effcc, (q31_t)0x661abbc5, (q31_t)0xb2ceb6b5, - (q31_t)0x65ddfbd3, (q31_t)0xb27e9d3c, (q31_t)0x65a0fd0b, (q31_t)0xb22eb392, (q31_t)0x6563bf92, (q31_t)0xb1def9e9, (q31_t)0x6526438f, (q31_t)0xb18f7071, - (q31_t)0x64e88926, (q31_t)0xb140175b, (q31_t)0x64aa907f, (q31_t)0xb0f0eeda, (q31_t)0x646c59bf, (q31_t)0xb0a1f71d, (q31_t)0x642de50d, (q31_t)0xb0533055, - (q31_t)0x63ef3290, (q31_t)0xb0049ab3, (q31_t)0x63b0426d, (q31_t)0xafb63667, (q31_t)0x637114cc, (q31_t)0xaf6803a2, (q31_t)0x6331a9d4, (q31_t)0xaf1a0293, - (q31_t)0x62f201ac, (q31_t)0xaecc336c, (q31_t)0x62b21c7b, (q31_t)0xae7e965b, (q31_t)0x6271fa69, (q31_t)0xae312b92, (q31_t)0x62319b9d, (q31_t)0xade3f33e, - (q31_t)0x61f1003f, (q31_t)0xad96ed92, (q31_t)0x61b02876, (q31_t)0xad4a1aba, (q31_t)0x616f146c, (q31_t)0xacfd7ae8, (q31_t)0x612dc447, (q31_t)0xacb10e4b, - (q31_t)0x60ec3830, (q31_t)0xac64d510, (q31_t)0x60aa7050, (q31_t)0xac18cf69, (q31_t)0x60686ccf, (q31_t)0xabccfd83, (q31_t)0x60262dd6, (q31_t)0xab815f8d, - (q31_t)0x5fe3b38d, (q31_t)0xab35f5b5, (q31_t)0x5fa0fe1f, (q31_t)0xaaeac02c, (q31_t)0x5f5e0db3, (q31_t)0xaa9fbf1e, (q31_t)0x5f1ae274, (q31_t)0xaa54f2ba, - (q31_t)0x5ed77c8a, (q31_t)0xaa0a5b2e, (q31_t)0x5e93dc1f, (q31_t)0xa9bff8a8, (q31_t)0x5e50015d, (q31_t)0xa975cb57, (q31_t)0x5e0bec6e, (q31_t)0xa92bd367, - (q31_t)0x5dc79d7c, (q31_t)0xa8e21106, (q31_t)0x5d8314b1, (q31_t)0xa8988463, (q31_t)0x5d3e5237, (q31_t)0xa84f2daa, (q31_t)0x5cf95638, (q31_t)0xa8060d08, - (q31_t)0x5cb420e0, (q31_t)0xa7bd22ac, (q31_t)0x5c6eb258, (q31_t)0xa7746ec0, (q31_t)0x5c290acc, (q31_t)0xa72bf174, (q31_t)0x5be32a67, (q31_t)0xa6e3aaf2, - (q31_t)0x5b9d1154, (q31_t)0xa69b9b68, (q31_t)0x5b56bfbd, (q31_t)0xa653c303, (q31_t)0x5b1035cf, (q31_t)0xa60c21ee, (q31_t)0x5ac973b5, (q31_t)0xa5c4b855, - (q31_t)0x5a82799a, (q31_t)0xa57d8666, (q31_t)0x5a3b47ab, (q31_t)0xa5368c4b, (q31_t)0x59f3de12, (q31_t)0xa4efca31, (q31_t)0x59ac3cfd, (q31_t)0xa4a94043, - (q31_t)0x59646498, (q31_t)0xa462eeac, (q31_t)0x591c550e, (q31_t)0xa41cd599, (q31_t)0x58d40e8c, (q31_t)0xa3d6f534, (q31_t)0x588b9140, (q31_t)0xa3914da8, - (q31_t)0x5842dd54, (q31_t)0xa34bdf20, (q31_t)0x57f9f2f8, (q31_t)0xa306a9c8, (q31_t)0x57b0d256, (q31_t)0xa2c1adc9, (q31_t)0x57677b9d, (q31_t)0xa27ceb4f, - (q31_t)0x571deefa, (q31_t)0xa2386284, (q31_t)0x56d42c99, (q31_t)0xa1f41392, (q31_t)0x568a34a9, (q31_t)0xa1affea3, (q31_t)0x56400758, (q31_t)0xa16c23e1, - (q31_t)0x55f5a4d2, (q31_t)0xa1288376, (q31_t)0x55ab0d46, (q31_t)0xa0e51d8c, (q31_t)0x556040e2, (q31_t)0xa0a1f24d, (q31_t)0x55153fd4, (q31_t)0xa05f01e1, - (q31_t)0x54ca0a4b, (q31_t)0xa01c4c73, (q31_t)0x547ea073, (q31_t)0x9fd9d22a, (q31_t)0x5433027d, (q31_t)0x9f979331, (q31_t)0x53e73097, (q31_t)0x9f558fb0, - (q31_t)0x539b2af0, (q31_t)0x9f13c7d0, (q31_t)0x534ef1b5, (q31_t)0x9ed23bb9, (q31_t)0x53028518, (q31_t)0x9e90eb94, (q31_t)0x52b5e546, (q31_t)0x9e4fd78a, - (q31_t)0x5269126e, (q31_t)0x9e0effc1, (q31_t)0x521c0cc2, (q31_t)0x9dce6463, (q31_t)0x51ced46e, (q31_t)0x9d8e0597, (q31_t)0x518169a5, (q31_t)0x9d4de385, - (q31_t)0x5133cc94, (q31_t)0x9d0dfe54, (q31_t)0x50e5fd6d, (q31_t)0x9cce562c, (q31_t)0x5097fc5e, (q31_t)0x9c8eeb34, (q31_t)0x5049c999, (q31_t)0x9c4fbd93, - (q31_t)0x4ffb654d, (q31_t)0x9c10cd70, (q31_t)0x4faccfab, (q31_t)0x9bd21af3, (q31_t)0x4f5e08e3, (q31_t)0x9b93a641, (q31_t)0x4f0f1126, (q31_t)0x9b556f81, - (q31_t)0x4ebfe8a5, (q31_t)0x9b1776da, (q31_t)0x4e708f8f, (q31_t)0x9ad9bc71, (q31_t)0x4e210617, (q31_t)0x9a9c406e, (q31_t)0x4dd14c6e, (q31_t)0x9a5f02f5, - (q31_t)0x4d8162c4, (q31_t)0x9a22042d, (q31_t)0x4d31494b, (q31_t)0x99e5443b, (q31_t)0x4ce10034, (q31_t)0x99a8c345, (q31_t)0x4c9087b1, (q31_t)0x996c816f, - (q31_t)0x4c3fdff4, (q31_t)0x99307ee0, (q31_t)0x4bef092d, (q31_t)0x98f4bbbc, (q31_t)0x4b9e0390, (q31_t)0x98b93828, (q31_t)0x4b4ccf4d, (q31_t)0x987df449, - (q31_t)0x4afb6c98, (q31_t)0x9842f043, (q31_t)0x4aa9dba2, (q31_t)0x98082c3b, (q31_t)0x4a581c9e, (q31_t)0x97cda855, (q31_t)0x4a062fbd, (q31_t)0x979364b5, - (q31_t)0x49b41533, (q31_t)0x9759617f, (q31_t)0x4961cd33, (q31_t)0x971f9ed7, (q31_t)0x490f57ee, (q31_t)0x96e61ce0, (q31_t)0x48bcb599, (q31_t)0x96acdbbe, - (q31_t)0x4869e665, (q31_t)0x9673db94, (q31_t)0x4816ea86, (q31_t)0x963b1c86, (q31_t)0x47c3c22f, (q31_t)0x96029eb6, (q31_t)0x47706d93, (q31_t)0x95ca6247, - (q31_t)0x471cece7, (q31_t)0x9592675c, (q31_t)0x46c9405c, (q31_t)0x955aae17, (q31_t)0x46756828, (q31_t)0x9523369c, (q31_t)0x4621647d, (q31_t)0x94ec010b, - (q31_t)0x45cd358f, (q31_t)0x94b50d87, (q31_t)0x4578db93, (q31_t)0x947e5c33, (q31_t)0x452456bd, (q31_t)0x9447ed2f, (q31_t)0x44cfa740, (q31_t)0x9411c09e, - (q31_t)0x447acd50, (q31_t)0x93dbd6a0, (q31_t)0x4425c923, (q31_t)0x93a62f57, (q31_t)0x43d09aed, (q31_t)0x9370cae4, (q31_t)0x437b42e1, (q31_t)0x933ba968, - (q31_t)0x4325c135, (q31_t)0x9306cb04, (q31_t)0x42d0161e, (q31_t)0x92d22fd9, (q31_t)0x427a41d0, (q31_t)0x929dd806, (q31_t)0x42244481, (q31_t)0x9269c3ac, - (q31_t)0x41ce1e65, (q31_t)0x9235f2ec, (q31_t)0x4177cfb1, (q31_t)0x920265e4, (q31_t)0x4121589b, (q31_t)0x91cf1cb6, (q31_t)0x40cab958, (q31_t)0x919c1781, - (q31_t)0x4073f21d, (q31_t)0x91695663, (q31_t)0x401d0321, (q31_t)0x9136d97d, (q31_t)0x3fc5ec98, (q31_t)0x9104a0ee, (q31_t)0x3f6eaeb8, (q31_t)0x90d2acd4, - (q31_t)0x3f1749b8, (q31_t)0x90a0fd4e, (q31_t)0x3ebfbdcd, (q31_t)0x906f927c, (q31_t)0x3e680b2c, (q31_t)0x903e6c7b, (q31_t)0x3e10320d, (q31_t)0x900d8b69, - (q31_t)0x3db832a6, (q31_t)0x8fdcef66, (q31_t)0x3d600d2c, (q31_t)0x8fac988f, (q31_t)0x3d07c1d6, (q31_t)0x8f7c8701, (q31_t)0x3caf50da, (q31_t)0x8f4cbadb, - (q31_t)0x3c56ba70, (q31_t)0x8f1d343a, (q31_t)0x3bfdfecd, (q31_t)0x8eedf33b, (q31_t)0x3ba51e29, (q31_t)0x8ebef7fb, (q31_t)0x3b4c18ba, (q31_t)0x8e904298, - (q31_t)0x3af2eeb7, (q31_t)0x8e61d32e, (q31_t)0x3a99a057, (q31_t)0x8e33a9da, (q31_t)0x3a402dd2, (q31_t)0x8e05c6b7, (q31_t)0x39e6975e, (q31_t)0x8dd829e4, - (q31_t)0x398cdd32, (q31_t)0x8daad37b, (q31_t)0x3932ff87, (q31_t)0x8d7dc399, (q31_t)0x38d8fe93, (q31_t)0x8d50fa59, (q31_t)0x387eda8e, (q31_t)0x8d2477d8, - (q31_t)0x382493b0, (q31_t)0x8cf83c30, (q31_t)0x37ca2a30, (q31_t)0x8ccc477d, (q31_t)0x376f9e46, (q31_t)0x8ca099da, (q31_t)0x3714f02a, (q31_t)0x8c753362, - (q31_t)0x36ba2014, (q31_t)0x8c4a142f, (q31_t)0x365f2e3b, (q31_t)0x8c1f3c5d, (q31_t)0x36041ad9, (q31_t)0x8bf4ac05, (q31_t)0x35a8e625, (q31_t)0x8bca6343, - (q31_t)0x354d9057, (q31_t)0x8ba0622f, (q31_t)0x34f219a8, (q31_t)0x8b76a8e4, (q31_t)0x34968250, (q31_t)0x8b4d377c, (q31_t)0x343aca87, (q31_t)0x8b240e11, - (q31_t)0x33def287, (q31_t)0x8afb2cbb, (q31_t)0x3382fa88, (q31_t)0x8ad29394, (q31_t)0x3326e2c3, (q31_t)0x8aaa42b4, (q31_t)0x32caab6f, (q31_t)0x8a823a36, - (q31_t)0x326e54c7, (q31_t)0x8a5a7a31, (q31_t)0x3211df04, (q31_t)0x8a3302be, (q31_t)0x31b54a5e, (q31_t)0x8a0bd3f5, (q31_t)0x3158970e, (q31_t)0x89e4edef, - (q31_t)0x30fbc54d, (q31_t)0x89be50c3, (q31_t)0x309ed556, (q31_t)0x8997fc8a, (q31_t)0x3041c761, (q31_t)0x8971f15a, (q31_t)0x2fe49ba7, (q31_t)0x894c2f4c, - (q31_t)0x2f875262, (q31_t)0x8926b677, (q31_t)0x2f29ebcc, (q31_t)0x890186f2, (q31_t)0x2ecc681e, (q31_t)0x88dca0d3, (q31_t)0x2e6ec792, (q31_t)0x88b80432, - (q31_t)0x2e110a62, (q31_t)0x8893b125, (q31_t)0x2db330c7, (q31_t)0x886fa7c2, (q31_t)0x2d553afc, (q31_t)0x884be821, (q31_t)0x2cf72939, (q31_t)0x88287256, - (q31_t)0x2c98fbba, (q31_t)0x88054677, (q31_t)0x2c3ab2b9, (q31_t)0x87e2649b, (q31_t)0x2bdc4e6f, (q31_t)0x87bfccd7, (q31_t)0x2b7dcf17, (q31_t)0x879d7f41, - (q31_t)0x2b1f34eb, (q31_t)0x877b7bec, (q31_t)0x2ac08026, (q31_t)0x8759c2ef, (q31_t)0x2a61b101, (q31_t)0x8738545e, (q31_t)0x2a02c7b8, (q31_t)0x8717304e, - (q31_t)0x29a3c485, (q31_t)0x86f656d3, (q31_t)0x2944a7a2, (q31_t)0x86d5c802, (q31_t)0x28e5714b, (q31_t)0x86b583ee, (q31_t)0x288621b9, (q31_t)0x86958aac, - (q31_t)0x2826b928, (q31_t)0x8675dc4f, (q31_t)0x27c737d3, (q31_t)0x865678eb, (q31_t)0x27679df4, (q31_t)0x86376092, (q31_t)0x2707ebc7, (q31_t)0x86189359, - (q31_t)0x26a82186, (q31_t)0x85fa1153, (q31_t)0x26483f6c, (q31_t)0x85dbda91, (q31_t)0x25e845b6, (q31_t)0x85bdef28, (q31_t)0x2588349d, (q31_t)0x85a04f28, - (q31_t)0x25280c5e, (q31_t)0x8582faa5, (q31_t)0x24c7cd33, (q31_t)0x8565f1b0, (q31_t)0x24677758, (q31_t)0x8549345c, (q31_t)0x24070b08, (q31_t)0x852cc2bb, - (q31_t)0x23a6887f, (q31_t)0x85109cdd, (q31_t)0x2345eff8, (q31_t)0x84f4c2d4, (q31_t)0x22e541af, (q31_t)0x84d934b1, (q31_t)0x22847de0, (q31_t)0x84bdf286, - (q31_t)0x2223a4c5, (q31_t)0x84a2fc62, (q31_t)0x21c2b69c, (q31_t)0x84885258, (q31_t)0x2161b3a0, (q31_t)0x846df477, (q31_t)0x21009c0c, (q31_t)0x8453e2cf, - (q31_t)0x209f701c, (q31_t)0x843a1d70, (q31_t)0x203e300d, (q31_t)0x8420a46c, (q31_t)0x1fdcdc1b, (q31_t)0x840777d0, (q31_t)0x1f7b7481, (q31_t)0x83ee97ad, - (q31_t)0x1f19f97b, (q31_t)0x83d60412, (q31_t)0x1eb86b46, (q31_t)0x83bdbd0e, (q31_t)0x1e56ca1e, (q31_t)0x83a5c2b0, (q31_t)0x1df5163f, (q31_t)0x838e1507, - (q31_t)0x1d934fe5, (q31_t)0x8376b422, (q31_t)0x1d31774d, (q31_t)0x835fa00f, (q31_t)0x1ccf8cb3, (q31_t)0x8348d8dc, (q31_t)0x1c6d9053, (q31_t)0x83325e97, - (q31_t)0x1c0b826a, (q31_t)0x831c314e, (q31_t)0x1ba96335, (q31_t)0x83065110, (q31_t)0x1b4732ef, (q31_t)0x82f0bde8, (q31_t)0x1ae4f1d6, (q31_t)0x82db77e5, - (q31_t)0x1a82a026, (q31_t)0x82c67f14, (q31_t)0x1a203e1b, (q31_t)0x82b1d381, (q31_t)0x19bdcbf3, (q31_t)0x829d753a, (q31_t)0x195b49ea, (q31_t)0x8289644b, - (q31_t)0x18f8b83c, (q31_t)0x8275a0c0, (q31_t)0x18961728, (q31_t)0x82622aa6, (q31_t)0x183366e9, (q31_t)0x824f0208, (q31_t)0x17d0a7bc, (q31_t)0x823c26f3, - (q31_t)0x176dd9de, (q31_t)0x82299971, (q31_t)0x170afd8d, (q31_t)0x82175990, (q31_t)0x16a81305, (q31_t)0x82056758, (q31_t)0x16451a83, (q31_t)0x81f3c2d7, - (q31_t)0x15e21445, (q31_t)0x81e26c16, (q31_t)0x157f0086, (q31_t)0x81d16321, (q31_t)0x151bdf86, (q31_t)0x81c0a801, (q31_t)0x14b8b17f, (q31_t)0x81b03ac2, - (q31_t)0x145576b1, (q31_t)0x81a01b6d, (q31_t)0x13f22f58, (q31_t)0x81904a0c, (q31_t)0x138edbb1, (q31_t)0x8180c6a9, (q31_t)0x132b7bf9, (q31_t)0x8171914e, - (q31_t)0x12c8106f, (q31_t)0x8162aa04, (q31_t)0x1264994e, (q31_t)0x815410d4, (q31_t)0x120116d5, (q31_t)0x8145c5c7, (q31_t)0x119d8941, (q31_t)0x8137c8e6, - (q31_t)0x1139f0cf, (q31_t)0x812a1a3a, (q31_t)0x10d64dbd, (q31_t)0x811cb9ca, (q31_t)0x1072a048, (q31_t)0x810fa7a0, (q31_t)0x100ee8ad, (q31_t)0x8102e3c4, - (q31_t)0x0fab272b, (q31_t)0x80f66e3c, (q31_t)0x0f475bff, (q31_t)0x80ea4712, (q31_t)0x0ee38766, (q31_t)0x80de6e4c, (q31_t)0x0e7fa99e, (q31_t)0x80d2e3f2, - (q31_t)0x0e1bc2e4, (q31_t)0x80c7a80a, (q31_t)0x0db7d376, (q31_t)0x80bcba9d, (q31_t)0x0d53db92, (q31_t)0x80b21baf, (q31_t)0x0cefdb76, (q31_t)0x80a7cb49, - (q31_t)0x0c8bd35e, (q31_t)0x809dc971, (q31_t)0x0c27c389, (q31_t)0x8094162c, (q31_t)0x0bc3ac35, (q31_t)0x808ab180, (q31_t)0x0b5f8d9f, (q31_t)0x80819b74, - (q31_t)0x0afb6805, (q31_t)0x8078d40d, (q31_t)0x0a973ba5, (q31_t)0x80705b50, (q31_t)0x0a3308bd, (q31_t)0x80683143, (q31_t)0x09cecf89, (q31_t)0x806055eb, - (q31_t)0x096a9049, (q31_t)0x8058c94c, (q31_t)0x09064b3a, (q31_t)0x80518b6b, (q31_t)0x08a2009a, (q31_t)0x804a9c4d, (q31_t)0x083db0a7, (q31_t)0x8043fbf6, - (q31_t)0x07d95b9e, (q31_t)0x803daa6a, (q31_t)0x077501be, (q31_t)0x8037a7ac, (q31_t)0x0710a345, (q31_t)0x8031f3c2, (q31_t)0x06ac406f, (q31_t)0x802c8ead, - (q31_t)0x0647d97c, (q31_t)0x80277872, (q31_t)0x05e36ea9, (q31_t)0x8022b114, (q31_t)0x057f0035, (q31_t)0x801e3895, (q31_t)0x051a8e5c, (q31_t)0x801a0ef8, - (q31_t)0x04b6195d, (q31_t)0x80163440, (q31_t)0x0451a177, (q31_t)0x8012a86f, (q31_t)0x03ed26e6, (q31_t)0x800f6b88, (q31_t)0x0388a9ea, (q31_t)0x800c7d8c, - (q31_t)0x03242abf, (q31_t)0x8009de7e, (q31_t)0x02bfa9a4, (q31_t)0x80078e5e, (q31_t)0x025b26d7, (q31_t)0x80058d2f, (q31_t)0x01f6a297, (q31_t)0x8003daf1, - (q31_t)0x01921d20, (q31_t)0x800277a6, (q31_t)0x012d96b1, (q31_t)0x8001634e, (q31_t)0x00c90f88, (q31_t)0x80009dea, (q31_t)0x006487e3, (q31_t)0x8000277a -}; - const q31_t cos_factorsQ31_512[512] = { - (q31_t)0x7ffff621, (q31_t)0x7fffa72c, (q31_t)0x7fff0943, (q31_t)0x7ffe1c65, (q31_t)0x7ffce093, (q31_t)0x7ffb55ce, - (q31_t)0x7ff97c18, (q31_t)0x7ff75370, - (q31_t)0x7ff4dbd9, (q31_t)0x7ff21553, (q31_t)0x7feeffe1, (q31_t)0x7feb9b85, (q31_t)0x7fe7e841, (q31_t)0x7fe3e616, - (q31_t)0x7fdf9508, (q31_t)0x7fdaf519, - (q31_t)0x7fd6064c, (q31_t)0x7fd0c8a3, (q31_t)0x7fcb3c23, (q31_t)0x7fc560cf, (q31_t)0x7fbf36aa, (q31_t)0x7fb8bdb8, - (q31_t)0x7fb1f5fc, (q31_t)0x7faadf7c, - (q31_t)0x7fa37a3c, (q31_t)0x7f9bc640, (q31_t)0x7f93c38c, (q31_t)0x7f8b7227, (q31_t)0x7f82d214, (q31_t)0x7f79e35a, - (q31_t)0x7f70a5fe, (q31_t)0x7f671a05, - (q31_t)0x7f5d3f75, (q31_t)0x7f531655, (q31_t)0x7f489eaa, (q31_t)0x7f3dd87c, (q31_t)0x7f32c3d1, (q31_t)0x7f2760af, - (q31_t)0x7f1baf1e, (q31_t)0x7f0faf25, - (q31_t)0x7f0360cb, (q31_t)0x7ef6c418, (q31_t)0x7ee9d914, (q31_t)0x7edc9fc6, (q31_t)0x7ecf1837, (q31_t)0x7ec14270, - (q31_t)0x7eb31e78, (q31_t)0x7ea4ac58, - (q31_t)0x7e95ec1a, (q31_t)0x7e86ddc6, (q31_t)0x7e778166, (q31_t)0x7e67d703, (q31_t)0x7e57dea7, (q31_t)0x7e47985b, - (q31_t)0x7e37042a, (q31_t)0x7e26221f, - (q31_t)0x7e14f242, (q31_t)0x7e0374a0, (q31_t)0x7df1a942, (q31_t)0x7ddf9034, (q31_t)0x7dcd2981, (q31_t)0x7dba7534, - (q31_t)0x7da77359, (q31_t)0x7d9423fc, - (q31_t)0x7d808728, (q31_t)0x7d6c9ce9, (q31_t)0x7d58654d, (q31_t)0x7d43e05e, (q31_t)0x7d2f0e2b, (q31_t)0x7d19eebf, - (q31_t)0x7d048228, (q31_t)0x7ceec873, - (q31_t)0x7cd8c1ae, (q31_t)0x7cc26de5, (q31_t)0x7cabcd28, (q31_t)0x7c94df83, (q31_t)0x7c7da505, (q31_t)0x7c661dbc, - (q31_t)0x7c4e49b7, (q31_t)0x7c362904, - (q31_t)0x7c1dbbb3, (q31_t)0x7c0501d2, (q31_t)0x7bebfb70, (q31_t)0x7bd2a89e, (q31_t)0x7bb9096b, (q31_t)0x7b9f1de6, - (q31_t)0x7b84e61f, (q31_t)0x7b6a6227, - (q31_t)0x7b4f920e, (q31_t)0x7b3475e5, (q31_t)0x7b190dbc, (q31_t)0x7afd59a4, (q31_t)0x7ae159ae, (q31_t)0x7ac50dec, - (q31_t)0x7aa8766f, (q31_t)0x7a8b9348, - (q31_t)0x7a6e648a, (q31_t)0x7a50ea47, (q31_t)0x7a332490, (q31_t)0x7a151378, (q31_t)0x79f6b711, (q31_t)0x79d80f6f, - (q31_t)0x79b91ca4, (q31_t)0x7999dec4, - (q31_t)0x797a55e0, (q31_t)0x795a820e, (q31_t)0x793a6361, (q31_t)0x7919f9ec, (q31_t)0x78f945c3, (q31_t)0x78d846fb, - (q31_t)0x78b6fda8, (q31_t)0x789569df, - (q31_t)0x78738bb3, (q31_t)0x7851633b, (q31_t)0x782ef08b, (q31_t)0x780c33b8, (q31_t)0x77e92cd9, (q31_t)0x77c5dc01, - (q31_t)0x77a24148, (q31_t)0x777e5cc3, - (q31_t)0x775a2e89, (q31_t)0x7735b6af, (q31_t)0x7710f54c, (q31_t)0x76ebea77, (q31_t)0x76c69647, (q31_t)0x76a0f8d2, - (q31_t)0x767b1231, (q31_t)0x7654e279, - (q31_t)0x762e69c4, (q31_t)0x7607a828, (q31_t)0x75e09dbd, (q31_t)0x75b94a9c, (q31_t)0x7591aedd, (q31_t)0x7569ca99, - (q31_t)0x75419de7, (q31_t)0x751928e0, - (q31_t)0x74f06b9e, (q31_t)0x74c7663a, (q31_t)0x749e18cd, (q31_t)0x74748371, (q31_t)0x744aa63f, (q31_t)0x74208150, - (q31_t)0x73f614c0, (q31_t)0x73cb60a8, - (q31_t)0x73a06522, (q31_t)0x73752249, (q31_t)0x73499838, (q31_t)0x731dc70a, (q31_t)0x72f1aed9, (q31_t)0x72c54fc1, - (q31_t)0x7298a9dd, (q31_t)0x726bbd48, - (q31_t)0x723e8a20, (q31_t)0x7211107e, (q31_t)0x71e35080, (q31_t)0x71b54a41, (q31_t)0x7186fdde, (q31_t)0x71586b74, - (q31_t)0x7129931f, (q31_t)0x70fa74fc, - (q31_t)0x70cb1128, (q31_t)0x709b67c0, (q31_t)0x706b78e3, (q31_t)0x703b44ad, (q31_t)0x700acb3c, (q31_t)0x6fda0cae, - (q31_t)0x6fa90921, (q31_t)0x6f77c0b3, - (q31_t)0x6f463383, (q31_t)0x6f1461b0, (q31_t)0x6ee24b57, (q31_t)0x6eaff099, (q31_t)0x6e7d5193, (q31_t)0x6e4a6e66, - (q31_t)0x6e174730, (q31_t)0x6de3dc11, - (q31_t)0x6db02d29, (q31_t)0x6d7c3a98, (q31_t)0x6d48047e, (q31_t)0x6d138afb, (q31_t)0x6cdece2f, (q31_t)0x6ca9ce3b, - (q31_t)0x6c748b3f, (q31_t)0x6c3f055d, - (q31_t)0x6c093cb6, (q31_t)0x6bd3316a, (q31_t)0x6b9ce39b, (q31_t)0x6b66536b, (q31_t)0x6b2f80fb, (q31_t)0x6af86c6c, - (q31_t)0x6ac115e2, (q31_t)0x6a897d7d, - (q31_t)0x6a51a361, (q31_t)0x6a1987b0, (q31_t)0x69e12a8c, (q31_t)0x69a88c19, (q31_t)0x696fac78, (q31_t)0x69368bce, - (q31_t)0x68fd2a3d, (q31_t)0x68c387e9, - (q31_t)0x6889a4f6, (q31_t)0x684f8186, (q31_t)0x68151dbe, (q31_t)0x67da79c3, (q31_t)0x679f95b7, (q31_t)0x676471c0, - (q31_t)0x67290e02, (q31_t)0x66ed6aa1, - (q31_t)0x66b187c3, (q31_t)0x6675658c, (q31_t)0x66390422, (q31_t)0x65fc63a9, (q31_t)0x65bf8447, (q31_t)0x65826622, - (q31_t)0x6545095f, (q31_t)0x65076e25, - (q31_t)0x64c99498, (q31_t)0x648b7ce0, (q31_t)0x644d2722, (q31_t)0x640e9386, (q31_t)0x63cfc231, (q31_t)0x6390b34a, - (q31_t)0x635166f9, (q31_t)0x6311dd64, - (q31_t)0x62d216b3, (q31_t)0x6292130c, (q31_t)0x6251d298, (q31_t)0x6211557e, (q31_t)0x61d09be5, (q31_t)0x618fa5f7, - (q31_t)0x614e73da, (q31_t)0x610d05b7, - (q31_t)0x60cb5bb7, (q31_t)0x60897601, (q31_t)0x604754bf, (q31_t)0x6004f819, (q31_t)0x5fc26038, (q31_t)0x5f7f8d46, - (q31_t)0x5f3c7f6b, (q31_t)0x5ef936d1, - (q31_t)0x5eb5b3a2, (q31_t)0x5e71f606, (q31_t)0x5e2dfe29, (q31_t)0x5de9cc33, (q31_t)0x5da5604f, (q31_t)0x5d60baa7, - (q31_t)0x5d1bdb65, (q31_t)0x5cd6c2b5, - (q31_t)0x5c9170bf, (q31_t)0x5c4be5b0, (q31_t)0x5c0621b2, (q31_t)0x5bc024f0, (q31_t)0x5b79ef96, (q31_t)0x5b3381ce, - (q31_t)0x5aecdbc5, (q31_t)0x5aa5fda5, - (q31_t)0x5a5ee79a, (q31_t)0x5a1799d1, (q31_t)0x59d01475, (q31_t)0x598857b2, (q31_t)0x594063b5, (q31_t)0x58f838a9, - (q31_t)0x58afd6bd, (q31_t)0x58673e1b, - (q31_t)0x581e6ef1, (q31_t)0x57d5696d, (q31_t)0x578c2dba, (q31_t)0x5742bc06, (q31_t)0x56f9147e, (q31_t)0x56af3750, - (q31_t)0x566524aa, (q31_t)0x561adcb9, - (q31_t)0x55d05faa, (q31_t)0x5585adad, (q31_t)0x553ac6ee, (q31_t)0x54efab9c, (q31_t)0x54a45be6, (q31_t)0x5458d7f9, - (q31_t)0x540d2005, (q31_t)0x53c13439, - (q31_t)0x537514c2, (q31_t)0x5328c1d0, (q31_t)0x52dc3b92, (q31_t)0x528f8238, (q31_t)0x524295f0, (q31_t)0x51f576ea, - (q31_t)0x51a82555, (q31_t)0x515aa162, - (q31_t)0x510ceb40, (q31_t)0x50bf031f, (q31_t)0x5070e92f, (q31_t)0x50229da1, (q31_t)0x4fd420a4, (q31_t)0x4f857269, - (q31_t)0x4f369320, (q31_t)0x4ee782fb, - (q31_t)0x4e984229, (q31_t)0x4e48d0dd, (q31_t)0x4df92f46, (q31_t)0x4da95d96, (q31_t)0x4d595bfe, (q31_t)0x4d092ab0, - (q31_t)0x4cb8c9dd, (q31_t)0x4c6839b7, - (q31_t)0x4c177a6e, (q31_t)0x4bc68c36, (q31_t)0x4b756f40, (q31_t)0x4b2423be, (q31_t)0x4ad2a9e2, (q31_t)0x4a8101de, - (q31_t)0x4a2f2be6, (q31_t)0x49dd282a, - (q31_t)0x498af6df, (q31_t)0x49389836, (q31_t)0x48e60c62, (q31_t)0x48935397, (q31_t)0x48406e08, (q31_t)0x47ed5be6, - (q31_t)0x479a1d67, (q31_t)0x4746b2bc, - (q31_t)0x46f31c1a, (q31_t)0x469f59b4, (q31_t)0x464b6bbe, (q31_t)0x45f7526b, (q31_t)0x45a30df0, (q31_t)0x454e9e80, - (q31_t)0x44fa0450, (q31_t)0x44a53f93, - (q31_t)0x4450507e, (q31_t)0x43fb3746, (q31_t)0x43a5f41e, (q31_t)0x4350873c, (q31_t)0x42faf0d4, (q31_t)0x42a5311b, - (q31_t)0x424f4845, (q31_t)0x41f93689, - (q31_t)0x41a2fc1a, (q31_t)0x414c992f, (q31_t)0x40f60dfb, (q31_t)0x409f5ab6, (q31_t)0x40487f94, (q31_t)0x3ff17cca, - (q31_t)0x3f9a5290, (q31_t)0x3f430119, - (q31_t)0x3eeb889c, (q31_t)0x3e93e950, (q31_t)0x3e3c2369, (q31_t)0x3de4371f, (q31_t)0x3d8c24a8, (q31_t)0x3d33ec39, - (q31_t)0x3cdb8e09, (q31_t)0x3c830a50, - (q31_t)0x3c2a6142, (q31_t)0x3bd19318, (q31_t)0x3b78a007, (q31_t)0x3b1f8848, (q31_t)0x3ac64c0f, (q31_t)0x3a6ceb96, - (q31_t)0x3a136712, (q31_t)0x39b9bebc, - (q31_t)0x395ff2c9, (q31_t)0x39060373, (q31_t)0x38abf0ef, (q31_t)0x3851bb77, (q31_t)0x37f76341, (q31_t)0x379ce885, - (q31_t)0x37424b7b, (q31_t)0x36e78c5b, - (q31_t)0x368cab5c, (q31_t)0x3631a8b8, (q31_t)0x35d684a6, (q31_t)0x357b3f5d, (q31_t)0x351fd918, (q31_t)0x34c4520d, - (q31_t)0x3468aa76, (q31_t)0x340ce28b, - (q31_t)0x33b0fa84, (q31_t)0x3354f29b, (q31_t)0x32f8cb07, (q31_t)0x329c8402, (q31_t)0x32401dc6, (q31_t)0x31e39889, - (q31_t)0x3186f487, (q31_t)0x312a31f8, - (q31_t)0x30cd5115, (q31_t)0x30705217, (q31_t)0x30133539, (q31_t)0x2fb5fab2, (q31_t)0x2f58a2be, (q31_t)0x2efb2d95, - (q31_t)0x2e9d9b70, (q31_t)0x2e3fec8b, - (q31_t)0x2de2211e, (q31_t)0x2d843964, (q31_t)0x2d263596, (q31_t)0x2cc815ee, (q31_t)0x2c69daa6, (q31_t)0x2c0b83fa, - (q31_t)0x2bad1221, (q31_t)0x2b4e8558, - (q31_t)0x2aefddd8, (q31_t)0x2a911bdc, (q31_t)0x2a323f9e, (q31_t)0x29d34958, (q31_t)0x29743946, (q31_t)0x29150fa1, - (q31_t)0x28b5cca5, (q31_t)0x2856708d, - (q31_t)0x27f6fb92, (q31_t)0x27976df1, (q31_t)0x2737c7e3, (q31_t)0x26d809a5, (q31_t)0x26783370, (q31_t)0x26184581, - (q31_t)0x25b84012, (q31_t)0x2558235f, - (q31_t)0x24f7efa2, (q31_t)0x2497a517, (q31_t)0x243743fa, (q31_t)0x23d6cc87, (q31_t)0x23763ef7, (q31_t)0x23159b88, - (q31_t)0x22b4e274, (q31_t)0x225413f8, - (q31_t)0x21f3304f, (q31_t)0x219237b5, (q31_t)0x21312a65, (q31_t)0x20d0089c, (q31_t)0x206ed295, (q31_t)0x200d888d, - (q31_t)0x1fac2abf, (q31_t)0x1f4ab968, - (q31_t)0x1ee934c3, (q31_t)0x1e879d0d, (q31_t)0x1e25f282, (q31_t)0x1dc4355e, (q31_t)0x1d6265dd, (q31_t)0x1d00843d, - (q31_t)0x1c9e90b8, (q31_t)0x1c3c8b8c, - (q31_t)0x1bda74f6, (q31_t)0x1b784d30, (q31_t)0x1b161479, (q31_t)0x1ab3cb0d, (q31_t)0x1a517128, (q31_t)0x19ef0707, - (q31_t)0x198c8ce7, (q31_t)0x192a0304, - (q31_t)0x18c7699b, (q31_t)0x1864c0ea, (q31_t)0x1802092c, (q31_t)0x179f429f, (q31_t)0x173c6d80, (q31_t)0x16d98a0c, - (q31_t)0x1676987f, (q31_t)0x16139918, - (q31_t)0x15b08c12, (q31_t)0x154d71aa, (q31_t)0x14ea4a1f, (q31_t)0x148715ae, (q31_t)0x1423d492, (q31_t)0x13c0870a, - (q31_t)0x135d2d53, (q31_t)0x12f9c7aa, - (q31_t)0x1296564d, (q31_t)0x1232d979, (q31_t)0x11cf516a, (q31_t)0x116bbe60, (q31_t)0x11082096, (q31_t)0x10a4784b, - (q31_t)0x1040c5bb, (q31_t)0xfdd0926, - (q31_t)0xf7942c7, (q31_t)0xf1572dc, (q31_t)0xeb199a4, (q31_t)0xe4db75b, (q31_t)0xde9cc40, (q31_t)0xd85d88f, (q31_t)0xd21dc87, - (q31_t)0xcbdd865, - (q31_t)0xc59cc68, (q31_t)0xbf5b8cb, (q31_t)0xb919dcf, (q31_t)0xb2d7baf, (q31_t)0xac952aa, (q31_t)0xa6522fe, (q31_t)0xa00ece8, - (q31_t)0x99cb0a7, - (q31_t)0x9386e78, (q31_t)0x8d42699, (q31_t)0x86fd947, (q31_t)0x80b86c2, (q31_t)0x7a72f45, (q31_t)0x742d311, (q31_t)0x6de7262, - (q31_t)0x67a0d76, - (q31_t)0x615a48b, (q31_t)0x5b137df, (q31_t)0x54cc7b1, (q31_t)0x4e8543e, (q31_t)0x483ddc3, (q31_t)0x41f6480, (q31_t)0x3bae8b2, - (q31_t)0x3566a96, - (q31_t)0x2f1ea6c, (q31_t)0x28d6870, (q31_t)0x228e4e2, (q31_t)0x1c45ffe, (q31_t)0x15fda03, (q31_t)0xfb5330, (q31_t)0x96cbc1, - (q31_t)0x3243f5 -}; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_2048) - const q31_t WeightsQ31_2048[4096] = { - (q31_t)0x7fffffff, (q31_t)0x00000000, (q31_t)0x7ffffd88, (q31_t)0xffe6de05, (q31_t)0x7ffff621, (q31_t)0xffcdbc0b, (q31_t)0x7fffe9cb, (q31_t)0xffb49a12, - (q31_t)0x7fffd886, (q31_t)0xff9b781d, (q31_t)0x7fffc251, (q31_t)0xff82562c, (q31_t)0x7fffa72c, (q31_t)0xff69343f, (q31_t)0x7fff8719, (q31_t)0xff501258, - (q31_t)0x7fff6216, (q31_t)0xff36f078, (q31_t)0x7fff3824, (q31_t)0xff1dcea0, (q31_t)0x7fff0943, (q31_t)0xff04acd0, (q31_t)0x7ffed572, (q31_t)0xfeeb8b0a, - (q31_t)0x7ffe9cb2, (q31_t)0xfed2694f, (q31_t)0x7ffe5f03, (q31_t)0xfeb947a0, (q31_t)0x7ffe1c65, (q31_t)0xfea025fd, (q31_t)0x7ffdd4d7, (q31_t)0xfe870467, - (q31_t)0x7ffd885a, (q31_t)0xfe6de2e0, (q31_t)0x7ffd36ee, (q31_t)0xfe54c169, (q31_t)0x7ffce093, (q31_t)0xfe3ba002, (q31_t)0x7ffc8549, (q31_t)0xfe227eac, - (q31_t)0x7ffc250f, (q31_t)0xfe095d69, (q31_t)0x7ffbbfe6, (q31_t)0xfdf03c3a, (q31_t)0x7ffb55ce, (q31_t)0xfdd71b1e, (q31_t)0x7ffae6c7, (q31_t)0xfdbdfa18, - (q31_t)0x7ffa72d1, (q31_t)0xfda4d929, (q31_t)0x7ff9f9ec, (q31_t)0xfd8bb850, (q31_t)0x7ff97c18, (q31_t)0xfd729790, (q31_t)0x7ff8f954, (q31_t)0xfd5976e9, - (q31_t)0x7ff871a2, (q31_t)0xfd40565c, (q31_t)0x7ff7e500, (q31_t)0xfd2735ea, (q31_t)0x7ff75370, (q31_t)0xfd0e1594, (q31_t)0x7ff6bcf0, (q31_t)0xfcf4f55c, - (q31_t)0x7ff62182, (q31_t)0xfcdbd541, (q31_t)0x7ff58125, (q31_t)0xfcc2b545, (q31_t)0x7ff4dbd9, (q31_t)0xfca9956a, (q31_t)0x7ff4319d, (q31_t)0xfc9075af, - (q31_t)0x7ff38274, (q31_t)0xfc775616, (q31_t)0x7ff2ce5b, (q31_t)0xfc5e36a0, (q31_t)0x7ff21553, (q31_t)0xfc45174e, (q31_t)0x7ff1575d, (q31_t)0xfc2bf821, - (q31_t)0x7ff09478, (q31_t)0xfc12d91a, (q31_t)0x7fefcca4, (q31_t)0xfbf9ba39, (q31_t)0x7feeffe1, (q31_t)0xfbe09b80, (q31_t)0x7fee2e30, (q31_t)0xfbc77cf0, - (q31_t)0x7fed5791, (q31_t)0xfbae5e89, (q31_t)0x7fec7c02, (q31_t)0xfb95404d, (q31_t)0x7feb9b85, (q31_t)0xfb7c223d, (q31_t)0x7feab61a, (q31_t)0xfb630459, - (q31_t)0x7fe9cbc0, (q31_t)0xfb49e6a3, (q31_t)0x7fe8dc78, (q31_t)0xfb30c91b, (q31_t)0x7fe7e841, (q31_t)0xfb17abc2, (q31_t)0x7fe6ef1c, (q31_t)0xfafe8e9b, - (q31_t)0x7fe5f108, (q31_t)0xfae571a4, (q31_t)0x7fe4ee06, (q31_t)0xfacc54e0, (q31_t)0x7fe3e616, (q31_t)0xfab3384f, (q31_t)0x7fe2d938, (q31_t)0xfa9a1bf3, - (q31_t)0x7fe1c76b, (q31_t)0xfa80ffcb, (q31_t)0x7fe0b0b1, (q31_t)0xfa67e3da, (q31_t)0x7fdf9508, (q31_t)0xfa4ec821, (q31_t)0x7fde7471, (q31_t)0xfa35ac9f, - (q31_t)0x7fdd4eec, (q31_t)0xfa1c9157, (q31_t)0x7fdc247a, (q31_t)0xfa037648, (q31_t)0x7fdaf519, (q31_t)0xf9ea5b75, (q31_t)0x7fd9c0ca, (q31_t)0xf9d140de, - (q31_t)0x7fd8878e, (q31_t)0xf9b82684, (q31_t)0x7fd74964, (q31_t)0xf99f0c68, (q31_t)0x7fd6064c, (q31_t)0xf985f28a, (q31_t)0x7fd4be46, (q31_t)0xf96cd8ed, - (q31_t)0x7fd37153, (q31_t)0xf953bf91, (q31_t)0x7fd21f72, (q31_t)0xf93aa676, (q31_t)0x7fd0c8a3, (q31_t)0xf9218d9e, (q31_t)0x7fcf6ce8, (q31_t)0xf908750a, - (q31_t)0x7fce0c3e, (q31_t)0xf8ef5cbb, (q31_t)0x7fcca6a7, (q31_t)0xf8d644b2, (q31_t)0x7fcb3c23, (q31_t)0xf8bd2cef, (q31_t)0x7fc9ccb2, (q31_t)0xf8a41574, - (q31_t)0x7fc85854, (q31_t)0xf88afe42, (q31_t)0x7fc6df08, (q31_t)0xf871e759, (q31_t)0x7fc560cf, (q31_t)0xf858d0bb, (q31_t)0x7fc3dda9, (q31_t)0xf83fba68, - (q31_t)0x7fc25596, (q31_t)0xf826a462, (q31_t)0x7fc0c896, (q31_t)0xf80d8ea9, (q31_t)0x7fbf36aa, (q31_t)0xf7f4793e, (q31_t)0x7fbd9fd0, (q31_t)0xf7db6423, - (q31_t)0x7fbc040a, (q31_t)0xf7c24f59, (q31_t)0x7fba6357, (q31_t)0xf7a93ae0, (q31_t)0x7fb8bdb8, (q31_t)0xf79026b9, (q31_t)0x7fb7132b, (q31_t)0xf77712e5, - (q31_t)0x7fb563b3, (q31_t)0xf75dff66, (q31_t)0x7fb3af4e, (q31_t)0xf744ec3b, (q31_t)0x7fb1f5fc, (q31_t)0xf72bd967, (q31_t)0x7fb037bf, (q31_t)0xf712c6ea, - (q31_t)0x7fae7495, (q31_t)0xf6f9b4c6, (q31_t)0x7facac7f, (q31_t)0xf6e0a2fa, (q31_t)0x7faadf7c, (q31_t)0xf6c79188, (q31_t)0x7fa90d8e, (q31_t)0xf6ae8071, - (q31_t)0x7fa736b4, (q31_t)0xf6956fb7, (q31_t)0x7fa55aee, (q31_t)0xf67c5f59, (q31_t)0x7fa37a3c, (q31_t)0xf6634f59, (q31_t)0x7fa1949e, (q31_t)0xf64a3fb8, - (q31_t)0x7f9faa15, (q31_t)0xf6313077, (q31_t)0x7f9dbaa0, (q31_t)0xf6182196, (q31_t)0x7f9bc640, (q31_t)0xf5ff1318, (q31_t)0x7f99ccf4, (q31_t)0xf5e604fc, - (q31_t)0x7f97cebd, (q31_t)0xf5ccf743, (q31_t)0x7f95cb9a, (q31_t)0xf5b3e9f0, (q31_t)0x7f93c38c, (q31_t)0xf59add02, (q31_t)0x7f91b694, (q31_t)0xf581d07b, - (q31_t)0x7f8fa4b0, (q31_t)0xf568c45b, (q31_t)0x7f8d8de1, (q31_t)0xf54fb8a4, (q31_t)0x7f8b7227, (q31_t)0xf536ad56, (q31_t)0x7f895182, (q31_t)0xf51da273, - (q31_t)0x7f872bf3, (q31_t)0xf50497fb, (q31_t)0x7f850179, (q31_t)0xf4eb8def, (q31_t)0x7f82d214, (q31_t)0xf4d28451, (q31_t)0x7f809dc5, (q31_t)0xf4b97b21, - (q31_t)0x7f7e648c, (q31_t)0xf4a07261, (q31_t)0x7f7c2668, (q31_t)0xf4876a10, (q31_t)0x7f79e35a, (q31_t)0xf46e6231, (q31_t)0x7f779b62, (q31_t)0xf4555ac5, - (q31_t)0x7f754e80, (q31_t)0xf43c53cb, (q31_t)0x7f72fcb4, (q31_t)0xf4234d45, (q31_t)0x7f70a5fe, (q31_t)0xf40a4735, (q31_t)0x7f6e4a5e, (q31_t)0xf3f1419a, - (q31_t)0x7f6be9d4, (q31_t)0xf3d83c77, (q31_t)0x7f698461, (q31_t)0xf3bf37cb, (q31_t)0x7f671a05, (q31_t)0xf3a63398, (q31_t)0x7f64aabf, (q31_t)0xf38d2fe0, - (q31_t)0x7f62368f, (q31_t)0xf3742ca2, (q31_t)0x7f5fbd77, (q31_t)0xf35b29e0, (q31_t)0x7f5d3f75, (q31_t)0xf342279b, (q31_t)0x7f5abc8a, (q31_t)0xf32925d3, - (q31_t)0x7f5834b7, (q31_t)0xf310248a, (q31_t)0x7f55a7fa, (q31_t)0xf2f723c1, (q31_t)0x7f531655, (q31_t)0xf2de2379, (q31_t)0x7f507fc7, (q31_t)0xf2c523b2, - (q31_t)0x7f4de451, (q31_t)0xf2ac246e, (q31_t)0x7f4b43f2, (q31_t)0xf29325ad, (q31_t)0x7f489eaa, (q31_t)0xf27a2771, (q31_t)0x7f45f47b, (q31_t)0xf26129ba, - (q31_t)0x7f434563, (q31_t)0xf2482c8a, (q31_t)0x7f409164, (q31_t)0xf22f2fe1, (q31_t)0x7f3dd87c, (q31_t)0xf21633c0, (q31_t)0x7f3b1aad, (q31_t)0xf1fd3829, - (q31_t)0x7f3857f6, (q31_t)0xf1e43d1c, (q31_t)0x7f359057, (q31_t)0xf1cb429a, (q31_t)0x7f32c3d1, (q31_t)0xf1b248a5, (q31_t)0x7f2ff263, (q31_t)0xf1994f3d, - (q31_t)0x7f2d1c0e, (q31_t)0xf1805662, (q31_t)0x7f2a40d2, (q31_t)0xf1675e17, (q31_t)0x7f2760af, (q31_t)0xf14e665c, (q31_t)0x7f247ba5, (q31_t)0xf1356f32, - (q31_t)0x7f2191b4, (q31_t)0xf11c789a, (q31_t)0x7f1ea2dc, (q31_t)0xf1038295, (q31_t)0x7f1baf1e, (q31_t)0xf0ea8d24, (q31_t)0x7f18b679, (q31_t)0xf0d19848, - (q31_t)0x7f15b8ee, (q31_t)0xf0b8a401, (q31_t)0x7f12b67c, (q31_t)0xf09fb051, (q31_t)0x7f0faf25, (q31_t)0xf086bd39, (q31_t)0x7f0ca2e7, (q31_t)0xf06dcaba, - (q31_t)0x7f0991c4, (q31_t)0xf054d8d5, (q31_t)0x7f067bba, (q31_t)0xf03be78a, (q31_t)0x7f0360cb, (q31_t)0xf022f6da, (q31_t)0x7f0040f6, (q31_t)0xf00a06c8, - (q31_t)0x7efd1c3c, (q31_t)0xeff11753, (q31_t)0x7ef9f29d, (q31_t)0xefd8287c, (q31_t)0x7ef6c418, (q31_t)0xefbf3a45, (q31_t)0x7ef390ae, (q31_t)0xefa64cae, - (q31_t)0x7ef05860, (q31_t)0xef8d5fb8, (q31_t)0x7eed1b2c, (q31_t)0xef747365, (q31_t)0x7ee9d914, (q31_t)0xef5b87b5, (q31_t)0x7ee69217, (q31_t)0xef429caa, - (q31_t)0x7ee34636, (q31_t)0xef29b243, (q31_t)0x7edff570, (q31_t)0xef10c883, (q31_t)0x7edc9fc6, (q31_t)0xeef7df6a, (q31_t)0x7ed94538, (q31_t)0xeedef6f9, - (q31_t)0x7ed5e5c6, (q31_t)0xeec60f31, (q31_t)0x7ed28171, (q31_t)0xeead2813, (q31_t)0x7ecf1837, (q31_t)0xee9441a0, (q31_t)0x7ecbaa1a, (q31_t)0xee7b5bd9, - (q31_t)0x7ec8371a, (q31_t)0xee6276bf, (q31_t)0x7ec4bf36, (q31_t)0xee499253, (q31_t)0x7ec14270, (q31_t)0xee30ae96, (q31_t)0x7ebdc0c6, (q31_t)0xee17cb88, - (q31_t)0x7eba3a39, (q31_t)0xedfee92b, (q31_t)0x7eb6aeca, (q31_t)0xede60780, (q31_t)0x7eb31e78, (q31_t)0xedcd2687, (q31_t)0x7eaf8943, (q31_t)0xedb44642, - (q31_t)0x7eabef2c, (q31_t)0xed9b66b2, (q31_t)0x7ea85033, (q31_t)0xed8287d7, (q31_t)0x7ea4ac58, (q31_t)0xed69a9b3, (q31_t)0x7ea1039b, (q31_t)0xed50cc46, - (q31_t)0x7e9d55fc, (q31_t)0xed37ef91, (q31_t)0x7e99a37c, (q31_t)0xed1f1396, (q31_t)0x7e95ec1a, (q31_t)0xed063856, (q31_t)0x7e922fd6, (q31_t)0xeced5dd0, - (q31_t)0x7e8e6eb2, (q31_t)0xecd48407, (q31_t)0x7e8aa8ac, (q31_t)0xecbbaafb, (q31_t)0x7e86ddc6, (q31_t)0xeca2d2ad, (q31_t)0x7e830dff, (q31_t)0xec89fb1e, - (q31_t)0x7e7f3957, (q31_t)0xec71244f, (q31_t)0x7e7b5fce, (q31_t)0xec584e41, (q31_t)0x7e778166, (q31_t)0xec3f78f6, (q31_t)0x7e739e1d, (q31_t)0xec26a46d, - (q31_t)0x7e6fb5f4, (q31_t)0xec0dd0a8, (q31_t)0x7e6bc8eb, (q31_t)0xebf4fda8, (q31_t)0x7e67d703, (q31_t)0xebdc2b6e, (q31_t)0x7e63e03b, (q31_t)0xebc359fb, - (q31_t)0x7e5fe493, (q31_t)0xebaa894f, (q31_t)0x7e5be40c, (q31_t)0xeb91b96c, (q31_t)0x7e57dea7, (q31_t)0xeb78ea52, (q31_t)0x7e53d462, (q31_t)0xeb601c04, - (q31_t)0x7e4fc53e, (q31_t)0xeb474e81, (q31_t)0x7e4bb13c, (q31_t)0xeb2e81ca, (q31_t)0x7e47985b, (q31_t)0xeb15b5e1, (q31_t)0x7e437a9c, (q31_t)0xeafceac6, - (q31_t)0x7e3f57ff, (q31_t)0xeae4207a, (q31_t)0x7e3b3083, (q31_t)0xeacb56ff, (q31_t)0x7e37042a, (q31_t)0xeab28e56, (q31_t)0x7e32d2f4, (q31_t)0xea99c67e, - (q31_t)0x7e2e9cdf, (q31_t)0xea80ff7a, (q31_t)0x7e2a61ed, (q31_t)0xea683949, (q31_t)0x7e26221f, (q31_t)0xea4f73ee, (q31_t)0x7e21dd73, (q31_t)0xea36af69, - (q31_t)0x7e1d93ea, (q31_t)0xea1debbb, (q31_t)0x7e194584, (q31_t)0xea0528e5, (q31_t)0x7e14f242, (q31_t)0xe9ec66e8, (q31_t)0x7e109a24, (q31_t)0xe9d3a5c5, - (q31_t)0x7e0c3d29, (q31_t)0xe9bae57d, (q31_t)0x7e07db52, (q31_t)0xe9a22610, (q31_t)0x7e0374a0, (q31_t)0xe9896781, (q31_t)0x7dff0911, (q31_t)0xe970a9ce, - (q31_t)0x7dfa98a8, (q31_t)0xe957ecfb, (q31_t)0x7df62362, (q31_t)0xe93f3107, (q31_t)0x7df1a942, (q31_t)0xe92675f4, (q31_t)0x7ded2a47, (q31_t)0xe90dbbc2, - (q31_t)0x7de8a670, (q31_t)0xe8f50273, (q31_t)0x7de41dc0, (q31_t)0xe8dc4a07, (q31_t)0x7ddf9034, (q31_t)0xe8c39280, (q31_t)0x7ddafdce, (q31_t)0xe8aadbde, - (q31_t)0x7dd6668f, (q31_t)0xe8922622, (q31_t)0x7dd1ca75, (q31_t)0xe879714d, (q31_t)0x7dcd2981, (q31_t)0xe860bd61, (q31_t)0x7dc883b4, (q31_t)0xe8480a5d, - (q31_t)0x7dc3d90d, (q31_t)0xe82f5844, (q31_t)0x7dbf298d, (q31_t)0xe816a716, (q31_t)0x7dba7534, (q31_t)0xe7fdf6d4, (q31_t)0x7db5bc02, (q31_t)0xe7e5477f, - (q31_t)0x7db0fdf8, (q31_t)0xe7cc9917, (q31_t)0x7dac3b15, (q31_t)0xe7b3eb9f, (q31_t)0x7da77359, (q31_t)0xe79b3f16, (q31_t)0x7da2a6c6, (q31_t)0xe782937e, - (q31_t)0x7d9dd55a, (q31_t)0xe769e8d8, (q31_t)0x7d98ff17, (q31_t)0xe7513f25, (q31_t)0x7d9423fc, (q31_t)0xe7389665, (q31_t)0x7d8f4409, (q31_t)0xe71fee99, - (q31_t)0x7d8a5f40, (q31_t)0xe70747c4, (q31_t)0x7d85759f, (q31_t)0xe6eea1e4, (q31_t)0x7d808728, (q31_t)0xe6d5fcfc, (q31_t)0x7d7b93da, (q31_t)0xe6bd590d, - (q31_t)0x7d769bb5, (q31_t)0xe6a4b616, (q31_t)0x7d719eba, (q31_t)0xe68c141a, (q31_t)0x7d6c9ce9, (q31_t)0xe6737319, (q31_t)0x7d679642, (q31_t)0xe65ad315, - (q31_t)0x7d628ac6, (q31_t)0xe642340d, (q31_t)0x7d5d7a74, (q31_t)0xe6299604, (q31_t)0x7d58654d, (q31_t)0xe610f8f9, (q31_t)0x7d534b50, (q31_t)0xe5f85cef, - (q31_t)0x7d4e2c7f, (q31_t)0xe5dfc1e5, (q31_t)0x7d4908d9, (q31_t)0xe5c727dd, (q31_t)0x7d43e05e, (q31_t)0xe5ae8ed8, (q31_t)0x7d3eb30f, (q31_t)0xe595f6d7, - (q31_t)0x7d3980ec, (q31_t)0xe57d5fda, (q31_t)0x7d3449f5, (q31_t)0xe564c9e3, (q31_t)0x7d2f0e2b, (q31_t)0xe54c34f3, (q31_t)0x7d29cd8c, (q31_t)0xe533a10a, - (q31_t)0x7d24881b, (q31_t)0xe51b0e2a, (q31_t)0x7d1f3dd6, (q31_t)0xe5027c53, (q31_t)0x7d19eebf, (q31_t)0xe4e9eb87, (q31_t)0x7d149ad5, (q31_t)0xe4d15bc6, - (q31_t)0x7d0f4218, (q31_t)0xe4b8cd11, (q31_t)0x7d09e489, (q31_t)0xe4a03f69, (q31_t)0x7d048228, (q31_t)0xe487b2d0, (q31_t)0x7cff1af5, (q31_t)0xe46f2745, - (q31_t)0x7cf9aef0, (q31_t)0xe4569ccb, (q31_t)0x7cf43e1a, (q31_t)0xe43e1362, (q31_t)0x7ceec873, (q31_t)0xe4258b0a, (q31_t)0x7ce94dfb, (q31_t)0xe40d03c6, - (q31_t)0x7ce3ceb2, (q31_t)0xe3f47d96, (q31_t)0x7cde4a98, (q31_t)0xe3dbf87a, (q31_t)0x7cd8c1ae, (q31_t)0xe3c37474, (q31_t)0x7cd333f3, (q31_t)0xe3aaf184, - (q31_t)0x7ccda169, (q31_t)0xe3926fad, (q31_t)0x7cc80a0f, (q31_t)0xe379eeed, (q31_t)0x7cc26de5, (q31_t)0xe3616f48, (q31_t)0x7cbcccec, (q31_t)0xe348f0bd, - (q31_t)0x7cb72724, (q31_t)0xe330734d, (q31_t)0x7cb17c8d, (q31_t)0xe317f6fa, (q31_t)0x7cabcd28, (q31_t)0xe2ff7bc3, (q31_t)0x7ca618f3, (q31_t)0xe2e701ac, - (q31_t)0x7ca05ff1, (q31_t)0xe2ce88b3, (q31_t)0x7c9aa221, (q31_t)0xe2b610da, (q31_t)0x7c94df83, (q31_t)0xe29d9a23, (q31_t)0x7c8f1817, (q31_t)0xe285248d, - (q31_t)0x7c894bde, (q31_t)0xe26cb01b, (q31_t)0x7c837ad8, (q31_t)0xe2543ccc, (q31_t)0x7c7da505, (q31_t)0xe23bcaa2, (q31_t)0x7c77ca65, (q31_t)0xe223599e, - (q31_t)0x7c71eaf9, (q31_t)0xe20ae9c1, (q31_t)0x7c6c06c0, (q31_t)0xe1f27b0b, (q31_t)0x7c661dbc, (q31_t)0xe1da0d7e, (q31_t)0x7c602fec, (q31_t)0xe1c1a11b, - (q31_t)0x7c5a3d50, (q31_t)0xe1a935e2, (q31_t)0x7c5445e9, (q31_t)0xe190cbd4, (q31_t)0x7c4e49b7, (q31_t)0xe17862f3, (q31_t)0x7c4848ba, (q31_t)0xe15ffb3f, - (q31_t)0x7c4242f2, (q31_t)0xe14794ba, (q31_t)0x7c3c3860, (q31_t)0xe12f2f63, (q31_t)0x7c362904, (q31_t)0xe116cb3d, (q31_t)0x7c3014de, (q31_t)0xe0fe6848, - (q31_t)0x7c29fbee, (q31_t)0xe0e60685, (q31_t)0x7c23de35, (q31_t)0xe0cda5f5, (q31_t)0x7c1dbbb3, (q31_t)0xe0b54698, (q31_t)0x7c179467, (q31_t)0xe09ce871, - (q31_t)0x7c116853, (q31_t)0xe0848b7f, (q31_t)0x7c0b3777, (q31_t)0xe06c2fc4, (q31_t)0x7c0501d2, (q31_t)0xe053d541, (q31_t)0x7bfec765, (q31_t)0xe03b7bf6, - (q31_t)0x7bf88830, (q31_t)0xe02323e5, (q31_t)0x7bf24434, (q31_t)0xe00acd0e, (q31_t)0x7bebfb70, (q31_t)0xdff27773, (q31_t)0x7be5ade6, (q31_t)0xdfda2314, - (q31_t)0x7bdf5b94, (q31_t)0xdfc1cff3, (q31_t)0x7bd9047c, (q31_t)0xdfa97e0f, (q31_t)0x7bd2a89e, (q31_t)0xdf912d6b, (q31_t)0x7bcc47fa, (q31_t)0xdf78de07, - (q31_t)0x7bc5e290, (q31_t)0xdf608fe4, (q31_t)0x7bbf7860, (q31_t)0xdf484302, (q31_t)0x7bb9096b, (q31_t)0xdf2ff764, (q31_t)0x7bb295b0, (q31_t)0xdf17ad0a, - (q31_t)0x7bac1d31, (q31_t)0xdeff63f4, (q31_t)0x7ba59fee, (q31_t)0xdee71c24, (q31_t)0x7b9f1de6, (q31_t)0xdeced59b, (q31_t)0x7b989719, (q31_t)0xdeb69059, - (q31_t)0x7b920b89, (q31_t)0xde9e4c60, (q31_t)0x7b8b7b36, (q31_t)0xde8609b1, (q31_t)0x7b84e61f, (q31_t)0xde6dc84b, (q31_t)0x7b7e4c45, (q31_t)0xde558831, - (q31_t)0x7b77ada8, (q31_t)0xde3d4964, (q31_t)0x7b710a49, (q31_t)0xde250be3, (q31_t)0x7b6a6227, (q31_t)0xde0ccfb1, (q31_t)0x7b63b543, (q31_t)0xddf494ce, - (q31_t)0x7b5d039e, (q31_t)0xdddc5b3b, (q31_t)0x7b564d36, (q31_t)0xddc422f8, (q31_t)0x7b4f920e, (q31_t)0xddabec08, (q31_t)0x7b48d225, (q31_t)0xdd93b66a, - (q31_t)0x7b420d7a, (q31_t)0xdd7b8220, (q31_t)0x7b3b4410, (q31_t)0xdd634f2b, (q31_t)0x7b3475e5, (q31_t)0xdd4b1d8c, (q31_t)0x7b2da2fa, (q31_t)0xdd32ed43, - (q31_t)0x7b26cb4f, (q31_t)0xdd1abe51, (q31_t)0x7b1feee5, (q31_t)0xdd0290b8, (q31_t)0x7b190dbc, (q31_t)0xdcea6478, (q31_t)0x7b1227d3, (q31_t)0xdcd23993, - (q31_t)0x7b0b3d2c, (q31_t)0xdcba1008, (q31_t)0x7b044dc7, (q31_t)0xdca1e7da, (q31_t)0x7afd59a4, (q31_t)0xdc89c109, (q31_t)0x7af660c2, (q31_t)0xdc719b96, - (q31_t)0x7aef6323, (q31_t)0xdc597781, (q31_t)0x7ae860c7, (q31_t)0xdc4154cd, (q31_t)0x7ae159ae, (q31_t)0xdc293379, (q31_t)0x7ada4dd8, (q31_t)0xdc111388, - (q31_t)0x7ad33d45, (q31_t)0xdbf8f4f8, (q31_t)0x7acc27f7, (q31_t)0xdbe0d7cd, (q31_t)0x7ac50dec, (q31_t)0xdbc8bc06, (q31_t)0x7abdef25, (q31_t)0xdbb0a1a4, - (q31_t)0x7ab6cba4, (q31_t)0xdb9888a8, (q31_t)0x7aafa367, (q31_t)0xdb807114, (q31_t)0x7aa8766f, (q31_t)0xdb685ae9, (q31_t)0x7aa144bc, (q31_t)0xdb504626, - (q31_t)0x7a9a0e50, (q31_t)0xdb3832cd, (q31_t)0x7a92d329, (q31_t)0xdb2020e0, (q31_t)0x7a8b9348, (q31_t)0xdb08105e, (q31_t)0x7a844eae, (q31_t)0xdaf00149, - (q31_t)0x7a7d055b, (q31_t)0xdad7f3a2, (q31_t)0x7a75b74f, (q31_t)0xdabfe76a, (q31_t)0x7a6e648a, (q31_t)0xdaa7dca1, (q31_t)0x7a670d0d, (q31_t)0xda8fd349, - (q31_t)0x7a5fb0d8, (q31_t)0xda77cb63, (q31_t)0x7a584feb, (q31_t)0xda5fc4ef, (q31_t)0x7a50ea47, (q31_t)0xda47bfee, (q31_t)0x7a497feb, (q31_t)0xda2fbc61, - (q31_t)0x7a4210d8, (q31_t)0xda17ba4a, (q31_t)0x7a3a9d0f, (q31_t)0xd9ffb9a9, (q31_t)0x7a332490, (q31_t)0xd9e7ba7f, (q31_t)0x7a2ba75a, (q31_t)0xd9cfbccd, - (q31_t)0x7a24256f, (q31_t)0xd9b7c094, (q31_t)0x7a1c9ece, (q31_t)0xd99fc5d4, (q31_t)0x7a151378, (q31_t)0xd987cc90, (q31_t)0x7a0d836d, (q31_t)0xd96fd4c7, - (q31_t)0x7a05eead, (q31_t)0xd957de7a, (q31_t)0x79fe5539, (q31_t)0xd93fe9ab, (q31_t)0x79f6b711, (q31_t)0xd927f65b, (q31_t)0x79ef1436, (q31_t)0xd910048a, - (q31_t)0x79e76ca7, (q31_t)0xd8f81439, (q31_t)0x79dfc064, (q31_t)0xd8e0256a, (q31_t)0x79d80f6f, (q31_t)0xd8c8381d, (q31_t)0x79d059c8, (q31_t)0xd8b04c52, - (q31_t)0x79c89f6e, (q31_t)0xd898620c, (q31_t)0x79c0e062, (q31_t)0xd880794b, (q31_t)0x79b91ca4, (q31_t)0xd868920f, (q31_t)0x79b15435, (q31_t)0xd850ac5a, - (q31_t)0x79a98715, (q31_t)0xd838c82d, (q31_t)0x79a1b545, (q31_t)0xd820e589, (q31_t)0x7999dec4, (q31_t)0xd809046e, (q31_t)0x79920392, (q31_t)0xd7f124dd, - (q31_t)0x798a23b1, (q31_t)0xd7d946d8, (q31_t)0x79823f20, (q31_t)0xd7c16a5f, (q31_t)0x797a55e0, (q31_t)0xd7a98f73, (q31_t)0x797267f2, (q31_t)0xd791b616, - (q31_t)0x796a7554, (q31_t)0xd779de47, (q31_t)0x79627e08, (q31_t)0xd7620808, (q31_t)0x795a820e, (q31_t)0xd74a335b, (q31_t)0x79528167, (q31_t)0xd732603f, - (q31_t)0x794a7c12, (q31_t)0xd71a8eb5, (q31_t)0x79427210, (q31_t)0xd702bec0, (q31_t)0x793a6361, (q31_t)0xd6eaf05f, (q31_t)0x79325006, (q31_t)0xd6d32393, - (q31_t)0x792a37fe, (q31_t)0xd6bb585e, (q31_t)0x79221b4b, (q31_t)0xd6a38ec0, (q31_t)0x7919f9ec, (q31_t)0xd68bc6ba, (q31_t)0x7911d3e2, (q31_t)0xd674004e, - (q31_t)0x7909a92d, (q31_t)0xd65c3b7b, (q31_t)0x790179cd, (q31_t)0xd6447844, (q31_t)0x78f945c3, (q31_t)0xd62cb6a8, (q31_t)0x78f10d0f, (q31_t)0xd614f6a9, - (q31_t)0x78e8cfb2, (q31_t)0xd5fd3848, (q31_t)0x78e08dab, (q31_t)0xd5e57b85, (q31_t)0x78d846fb, (q31_t)0xd5cdc062, (q31_t)0x78cffba3, (q31_t)0xd5b606e0, - (q31_t)0x78c7aba2, (q31_t)0xd59e4eff, (q31_t)0x78bf56f9, (q31_t)0xd58698c0, (q31_t)0x78b6fda8, (q31_t)0xd56ee424, (q31_t)0x78ae9fb0, (q31_t)0xd557312d, - (q31_t)0x78a63d11, (q31_t)0xd53f7fda, (q31_t)0x789dd5cb, (q31_t)0xd527d02e, (q31_t)0x789569df, (q31_t)0xd5102228, (q31_t)0x788cf94c, (q31_t)0xd4f875ca, - (q31_t)0x78848414, (q31_t)0xd4e0cb15, (q31_t)0x787c0a36, (q31_t)0xd4c92209, (q31_t)0x78738bb3, (q31_t)0xd4b17aa8, (q31_t)0x786b088c, (q31_t)0xd499d4f2, - (q31_t)0x786280bf, (q31_t)0xd48230e9, (q31_t)0x7859f44f, (q31_t)0xd46a8e8d, (q31_t)0x7851633b, (q31_t)0xd452eddf, (q31_t)0x7848cd83, (q31_t)0xd43b4ee0, - (q31_t)0x78403329, (q31_t)0xd423b191, (q31_t)0x7837942b, (q31_t)0xd40c15f3, (q31_t)0x782ef08b, (q31_t)0xd3f47c06, (q31_t)0x78264849, (q31_t)0xd3dce3cd, - (q31_t)0x781d9b65, (q31_t)0xd3c54d47, (q31_t)0x7814e9df, (q31_t)0xd3adb876, (q31_t)0x780c33b8, (q31_t)0xd396255a, (q31_t)0x780378f1, (q31_t)0xd37e93f4, - (q31_t)0x77fab989, (q31_t)0xd3670446, (q31_t)0x77f1f581, (q31_t)0xd34f764f, (q31_t)0x77e92cd9, (q31_t)0xd337ea12, (q31_t)0x77e05f91, (q31_t)0xd3205f8f, - (q31_t)0x77d78daa, (q31_t)0xd308d6c7, (q31_t)0x77ceb725, (q31_t)0xd2f14fba, (q31_t)0x77c5dc01, (q31_t)0xd2d9ca6a, (q31_t)0x77bcfc3f, (q31_t)0xd2c246d8, - (q31_t)0x77b417df, (q31_t)0xd2aac504, (q31_t)0x77ab2ee2, (q31_t)0xd29344f0, (q31_t)0x77a24148, (q31_t)0xd27bc69c, (q31_t)0x77994f11, (q31_t)0xd2644a0a, - (q31_t)0x7790583e, (q31_t)0xd24ccf39, (q31_t)0x77875cce, (q31_t)0xd235562b, (q31_t)0x777e5cc3, (q31_t)0xd21ddee2, (q31_t)0x7775581d, (q31_t)0xd206695d, - (q31_t)0x776c4edb, (q31_t)0xd1eef59e, (q31_t)0x776340ff, (q31_t)0xd1d783a6, (q31_t)0x775a2e89, (q31_t)0xd1c01375, (q31_t)0x77511778, (q31_t)0xd1a8a50d, - (q31_t)0x7747fbce, (q31_t)0xd191386e, (q31_t)0x773edb8b, (q31_t)0xd179cd99, (q31_t)0x7735b6af, (q31_t)0xd1626490, (q31_t)0x772c8d3a, (q31_t)0xd14afd52, - (q31_t)0x77235f2d, (q31_t)0xd13397e2, (q31_t)0x771a2c88, (q31_t)0xd11c343f, (q31_t)0x7710f54c, (q31_t)0xd104d26b, (q31_t)0x7707b979, (q31_t)0xd0ed7267, - (q31_t)0x76fe790e, (q31_t)0xd0d61434, (q31_t)0x76f5340e, (q31_t)0xd0beb7d2, (q31_t)0x76ebea77, (q31_t)0xd0a75d42, (q31_t)0x76e29c4b, (q31_t)0xd0900486, - (q31_t)0x76d94989, (q31_t)0xd078ad9e, (q31_t)0x76cff232, (q31_t)0xd061588b, (q31_t)0x76c69647, (q31_t)0xd04a054e, (q31_t)0x76bd35c7, (q31_t)0xd032b3e7, - (q31_t)0x76b3d0b4, (q31_t)0xd01b6459, (q31_t)0x76aa670d, (q31_t)0xd00416a3, (q31_t)0x76a0f8d2, (q31_t)0xcfeccac7, (q31_t)0x76978605, (q31_t)0xcfd580c6, - (q31_t)0x768e0ea6, (q31_t)0xcfbe389f, (q31_t)0x768492b4, (q31_t)0xcfa6f255, (q31_t)0x767b1231, (q31_t)0xcf8fade9, (q31_t)0x76718d1c, (q31_t)0xcf786b5a, - (q31_t)0x76680376, (q31_t)0xcf612aaa, (q31_t)0x765e7540, (q31_t)0xcf49ebda, (q31_t)0x7654e279, (q31_t)0xcf32aeeb, (q31_t)0x764b4b23, (q31_t)0xcf1b73de, - (q31_t)0x7641af3d, (q31_t)0xcf043ab3, (q31_t)0x76380ec8, (q31_t)0xceed036b, (q31_t)0x762e69c4, (q31_t)0xced5ce08, (q31_t)0x7624c031, (q31_t)0xcebe9a8a, - (q31_t)0x761b1211, (q31_t)0xcea768f2, (q31_t)0x76115f63, (q31_t)0xce903942, (q31_t)0x7607a828, (q31_t)0xce790b79, (q31_t)0x75fdec60, (q31_t)0xce61df99, - (q31_t)0x75f42c0b, (q31_t)0xce4ab5a2, (q31_t)0x75ea672a, (q31_t)0xce338d97, (q31_t)0x75e09dbd, (q31_t)0xce1c6777, (q31_t)0x75d6cfc5, (q31_t)0xce054343, - (q31_t)0x75ccfd42, (q31_t)0xcdee20fc, (q31_t)0x75c32634, (q31_t)0xcdd700a4, (q31_t)0x75b94a9c, (q31_t)0xcdbfe23a, (q31_t)0x75af6a7b, (q31_t)0xcda8c5c1, - (q31_t)0x75a585cf, (q31_t)0xcd91ab39, (q31_t)0x759b9c9b, (q31_t)0xcd7a92a2, (q31_t)0x7591aedd, (q31_t)0xcd637bfe, (q31_t)0x7587bc98, (q31_t)0xcd4c674d, - (q31_t)0x757dc5ca, (q31_t)0xcd355491, (q31_t)0x7573ca75, (q31_t)0xcd1e43ca, (q31_t)0x7569ca99, (q31_t)0xcd0734f9, (q31_t)0x755fc635, (q31_t)0xccf0281f, - (q31_t)0x7555bd4c, (q31_t)0xccd91d3d, (q31_t)0x754bafdc, (q31_t)0xccc21455, (q31_t)0x75419de7, (q31_t)0xccab0d65, (q31_t)0x7537876c, (q31_t)0xcc940871, - (q31_t)0x752d6c6c, (q31_t)0xcc7d0578, (q31_t)0x75234ce8, (q31_t)0xcc66047b, (q31_t)0x751928e0, (q31_t)0xcc4f057c, (q31_t)0x750f0054, (q31_t)0xcc38087b, - (q31_t)0x7504d345, (q31_t)0xcc210d79, (q31_t)0x74faa1b3, (q31_t)0xcc0a1477, (q31_t)0x74f06b9e, (q31_t)0xcbf31d75, (q31_t)0x74e63108, (q31_t)0xcbdc2876, - (q31_t)0x74dbf1ef, (q31_t)0xcbc53579, (q31_t)0x74d1ae55, (q31_t)0xcbae447f, (q31_t)0x74c7663a, (q31_t)0xcb97558a, (q31_t)0x74bd199f, (q31_t)0xcb80689a, - (q31_t)0x74b2c884, (q31_t)0xcb697db0, (q31_t)0x74a872e8, (q31_t)0xcb5294ce, (q31_t)0x749e18cd, (q31_t)0xcb3badf3, (q31_t)0x7493ba34, (q31_t)0xcb24c921, - (q31_t)0x7489571c, (q31_t)0xcb0de658, (q31_t)0x747eef85, (q31_t)0xcaf7059a, (q31_t)0x74748371, (q31_t)0xcae026e8, (q31_t)0x746a12df, (q31_t)0xcac94a42, - (q31_t)0x745f9dd1, (q31_t)0xcab26fa9, (q31_t)0x74552446, (q31_t)0xca9b971e, (q31_t)0x744aa63f, (q31_t)0xca84c0a3, (q31_t)0x744023bc, (q31_t)0xca6dec37, - (q31_t)0x74359cbd, (q31_t)0xca5719db, (q31_t)0x742b1144, (q31_t)0xca404992, (q31_t)0x74208150, (q31_t)0xca297b5a, (q31_t)0x7415ece2, (q31_t)0xca12af37, - (q31_t)0x740b53fb, (q31_t)0xc9fbe527, (q31_t)0x7400b69a, (q31_t)0xc9e51d2d, (q31_t)0x73f614c0, (q31_t)0xc9ce5748, (q31_t)0x73eb6e6e, (q31_t)0xc9b7937a, - (q31_t)0x73e0c3a3, (q31_t)0xc9a0d1c5, (q31_t)0x73d61461, (q31_t)0xc98a1227, (q31_t)0x73cb60a8, (q31_t)0xc97354a4, (q31_t)0x73c0a878, (q31_t)0xc95c993a, - (q31_t)0x73b5ebd1, (q31_t)0xc945dfec, (q31_t)0x73ab2ab4, (q31_t)0xc92f28ba, (q31_t)0x73a06522, (q31_t)0xc91873a5, (q31_t)0x73959b1b, (q31_t)0xc901c0ae, - (q31_t)0x738acc9e, (q31_t)0xc8eb0fd6, (q31_t)0x737ff9ae, (q31_t)0xc8d4611d, (q31_t)0x73752249, (q31_t)0xc8bdb485, (q31_t)0x736a4671, (q31_t)0xc8a70a0e, - (q31_t)0x735f6626, (q31_t)0xc89061ba, (q31_t)0x73548168, (q31_t)0xc879bb89, (q31_t)0x73499838, (q31_t)0xc863177b, (q31_t)0x733eaa96, (q31_t)0xc84c7593, - (q31_t)0x7333b883, (q31_t)0xc835d5d0, (q31_t)0x7328c1ff, (q31_t)0xc81f3834, (q31_t)0x731dc70a, (q31_t)0xc8089cbf, (q31_t)0x7312c7a5, (q31_t)0xc7f20373, - (q31_t)0x7307c3d0, (q31_t)0xc7db6c50, (q31_t)0x72fcbb8c, (q31_t)0xc7c4d757, (q31_t)0x72f1aed9, (q31_t)0xc7ae4489, (q31_t)0x72e69db7, (q31_t)0xc797b3e7, - (q31_t)0x72db8828, (q31_t)0xc7812572, (q31_t)0x72d06e2b, (q31_t)0xc76a992a, (q31_t)0x72c54fc1, (q31_t)0xc7540f11, (q31_t)0x72ba2cea, (q31_t)0xc73d8727, - (q31_t)0x72af05a7, (q31_t)0xc727016d, (q31_t)0x72a3d9f7, (q31_t)0xc7107de4, (q31_t)0x7298a9dd, (q31_t)0xc6f9fc8d, (q31_t)0x728d7557, (q31_t)0xc6e37d69, - (q31_t)0x72823c67, (q31_t)0xc6cd0079, (q31_t)0x7276ff0d, (q31_t)0xc6b685bd, (q31_t)0x726bbd48, (q31_t)0xc6a00d37, (q31_t)0x7260771b, (q31_t)0xc68996e7, - (q31_t)0x72552c85, (q31_t)0xc67322ce, (q31_t)0x7249dd86, (q31_t)0xc65cb0ed, (q31_t)0x723e8a20, (q31_t)0xc6464144, (q31_t)0x72333251, (q31_t)0xc62fd3d6, - (q31_t)0x7227d61c, (q31_t)0xc61968a2, (q31_t)0x721c7580, (q31_t)0xc602ffaa, (q31_t)0x7211107e, (q31_t)0xc5ec98ee, (q31_t)0x7205a716, (q31_t)0xc5d6346f, - (q31_t)0x71fa3949, (q31_t)0xc5bfd22e, (q31_t)0x71eec716, (q31_t)0xc5a9722c, (q31_t)0x71e35080, (q31_t)0xc593146a, (q31_t)0x71d7d585, (q31_t)0xc57cb8e9, - (q31_t)0x71cc5626, (q31_t)0xc5665fa9, (q31_t)0x71c0d265, (q31_t)0xc55008ab, (q31_t)0x71b54a41, (q31_t)0xc539b3f1, (q31_t)0x71a9bdba, (q31_t)0xc523617a, - (q31_t)0x719e2cd2, (q31_t)0xc50d1149, (q31_t)0x71929789, (q31_t)0xc4f6c35d, (q31_t)0x7186fdde, (q31_t)0xc4e077b8, (q31_t)0x717b5fd3, (q31_t)0xc4ca2e5b, - (q31_t)0x716fbd68, (q31_t)0xc4b3e746, (q31_t)0x7164169d, (q31_t)0xc49da27a, (q31_t)0x71586b74, (q31_t)0xc4875ff9, (q31_t)0x714cbbeb, (q31_t)0xc4711fc2, - (q31_t)0x71410805, (q31_t)0xc45ae1d7, (q31_t)0x71354fc0, (q31_t)0xc444a639, (q31_t)0x7129931f, (q31_t)0xc42e6ce8, (q31_t)0x711dd220, (q31_t)0xc41835e6, - (q31_t)0x71120cc5, (q31_t)0xc4020133, (q31_t)0x7106430e, (q31_t)0xc3ebced0, (q31_t)0x70fa74fc, (q31_t)0xc3d59ebe, (q31_t)0x70eea28e, (q31_t)0xc3bf70fd, - (q31_t)0x70e2cbc6, (q31_t)0xc3a94590, (q31_t)0x70d6f0a4, (q31_t)0xc3931c76, (q31_t)0x70cb1128, (q31_t)0xc37cf5b0, (q31_t)0x70bf2d53, (q31_t)0xc366d140, - (q31_t)0x70b34525, (q31_t)0xc350af26, (q31_t)0x70a7589f, (q31_t)0xc33a8f62, (q31_t)0x709b67c0, (q31_t)0xc32471f7, (q31_t)0x708f728b, (q31_t)0xc30e56e4, - (q31_t)0x708378ff, (q31_t)0xc2f83e2a, (q31_t)0x70777b1c, (q31_t)0xc2e227cb, (q31_t)0x706b78e3, (q31_t)0xc2cc13c7, (q31_t)0x705f7255, (q31_t)0xc2b6021f, - (q31_t)0x70536771, (q31_t)0xc29ff2d4, (q31_t)0x70475839, (q31_t)0xc289e5e7, (q31_t)0x703b44ad, (q31_t)0xc273db58, (q31_t)0x702f2ccd, (q31_t)0xc25dd329, - (q31_t)0x7023109a, (q31_t)0xc247cd5a, (q31_t)0x7016f014, (q31_t)0xc231c9ec, (q31_t)0x700acb3c, (q31_t)0xc21bc8e1, (q31_t)0x6ffea212, (q31_t)0xc205ca38, - (q31_t)0x6ff27497, (q31_t)0xc1efcdf3, (q31_t)0x6fe642ca, (q31_t)0xc1d9d412, (q31_t)0x6fda0cae, (q31_t)0xc1c3dc97, (q31_t)0x6fcdd241, (q31_t)0xc1ade781, - (q31_t)0x6fc19385, (q31_t)0xc197f4d4, (q31_t)0x6fb5507a, (q31_t)0xc182048d, (q31_t)0x6fa90921, (q31_t)0xc16c16b0, (q31_t)0x6f9cbd79, (q31_t)0xc1562b3d, - (q31_t)0x6f906d84, (q31_t)0xc1404233, (q31_t)0x6f841942, (q31_t)0xc12a5b95, (q31_t)0x6f77c0b3, (q31_t)0xc1147764, (q31_t)0x6f6b63d8, (q31_t)0xc0fe959f, - (q31_t)0x6f5f02b2, (q31_t)0xc0e8b648, (q31_t)0x6f529d40, (q31_t)0xc0d2d960, (q31_t)0x6f463383, (q31_t)0xc0bcfee7, (q31_t)0x6f39c57d, (q31_t)0xc0a726df, - (q31_t)0x6f2d532c, (q31_t)0xc0915148, (q31_t)0x6f20dc92, (q31_t)0xc07b7e23, (q31_t)0x6f1461b0, (q31_t)0xc065ad70, (q31_t)0x6f07e285, (q31_t)0xc04fdf32, - (q31_t)0x6efb5f12, (q31_t)0xc03a1368, (q31_t)0x6eeed758, (q31_t)0xc0244a14, (q31_t)0x6ee24b57, (q31_t)0xc00e8336, (q31_t)0x6ed5bb10, (q31_t)0xbff8bece, - (q31_t)0x6ec92683, (q31_t)0xbfe2fcdf, (q31_t)0x6ebc8db0, (q31_t)0xbfcd3d69, (q31_t)0x6eaff099, (q31_t)0xbfb7806c, (q31_t)0x6ea34f3d, (q31_t)0xbfa1c5ea, - (q31_t)0x6e96a99d, (q31_t)0xbf8c0de3, (q31_t)0x6e89ffb9, (q31_t)0xbf765858, (q31_t)0x6e7d5193, (q31_t)0xbf60a54a, (q31_t)0x6e709f2a, (q31_t)0xbf4af4ba, - (q31_t)0x6e63e87f, (q31_t)0xbf3546a8, (q31_t)0x6e572d93, (q31_t)0xbf1f9b16, (q31_t)0x6e4a6e66, (q31_t)0xbf09f205, (q31_t)0x6e3daaf8, (q31_t)0xbef44b74, - (q31_t)0x6e30e34a, (q31_t)0xbedea765, (q31_t)0x6e24175c, (q31_t)0xbec905d9, (q31_t)0x6e174730, (q31_t)0xbeb366d1, (q31_t)0x6e0a72c5, (q31_t)0xbe9dca4e, - (q31_t)0x6dfd9a1c, (q31_t)0xbe88304f, (q31_t)0x6df0bd35, (q31_t)0xbe7298d7, (q31_t)0x6de3dc11, (q31_t)0xbe5d03e6, (q31_t)0x6dd6f6b1, (q31_t)0xbe47717c, - (q31_t)0x6dca0d14, (q31_t)0xbe31e19b, (q31_t)0x6dbd1f3c, (q31_t)0xbe1c5444, (q31_t)0x6db02d29, (q31_t)0xbe06c977, (q31_t)0x6da336dc, (q31_t)0xbdf14135, - (q31_t)0x6d963c54, (q31_t)0xbddbbb7f, (q31_t)0x6d893d93, (q31_t)0xbdc63856, (q31_t)0x6d7c3a98, (q31_t)0xbdb0b7bb, (q31_t)0x6d6f3365, (q31_t)0xbd9b39ad, - (q31_t)0x6d6227fa, (q31_t)0xbd85be30, (q31_t)0x6d551858, (q31_t)0xbd704542, (q31_t)0x6d48047e, (q31_t)0xbd5acee5, (q31_t)0x6d3aec6e, (q31_t)0xbd455b1a, - (q31_t)0x6d2dd027, (q31_t)0xbd2fe9e2, (q31_t)0x6d20afac, (q31_t)0xbd1a7b3d, (q31_t)0x6d138afb, (q31_t)0xbd050f2c, (q31_t)0x6d066215, (q31_t)0xbcefa5b0, - (q31_t)0x6cf934fc, (q31_t)0xbcda3ecb, (q31_t)0x6cec03af, (q31_t)0xbcc4da7b, (q31_t)0x6cdece2f, (q31_t)0xbcaf78c4, (q31_t)0x6cd1947c, (q31_t)0xbc9a19a5, - (q31_t)0x6cc45698, (q31_t)0xbc84bd1f, (q31_t)0x6cb71482, (q31_t)0xbc6f6333, (q31_t)0x6ca9ce3b, (q31_t)0xbc5a0be2, (q31_t)0x6c9c83c3, (q31_t)0xbc44b72c, - (q31_t)0x6c8f351c, (q31_t)0xbc2f6513, (q31_t)0x6c81e245, (q31_t)0xbc1a1598, (q31_t)0x6c748b3f, (q31_t)0xbc04c8ba, (q31_t)0x6c67300b, (q31_t)0xbbef7e7c, - (q31_t)0x6c59d0a9, (q31_t)0xbbda36dd, (q31_t)0x6c4c6d1a, (q31_t)0xbbc4f1df, (q31_t)0x6c3f055d, (q31_t)0xbbafaf82, (q31_t)0x6c319975, (q31_t)0xbb9a6fc7, - (q31_t)0x6c242960, (q31_t)0xbb8532b0, (q31_t)0x6c16b521, (q31_t)0xbb6ff83c, (q31_t)0x6c093cb6, (q31_t)0xbb5ac06d, (q31_t)0x6bfbc021, (q31_t)0xbb458b43, - (q31_t)0x6bee3f62, (q31_t)0xbb3058c0, (q31_t)0x6be0ba7b, (q31_t)0xbb1b28e4, (q31_t)0x6bd3316a, (q31_t)0xbb05fbb0, (q31_t)0x6bc5a431, (q31_t)0xbaf0d125, - (q31_t)0x6bb812d1, (q31_t)0xbadba943, (q31_t)0x6baa7d49, (q31_t)0xbac6840c, (q31_t)0x6b9ce39b, (q31_t)0xbab16180, (q31_t)0x6b8f45c7, (q31_t)0xba9c41a0, - (q31_t)0x6b81a3cd, (q31_t)0xba87246d, (q31_t)0x6b73fdae, (q31_t)0xba7209e7, (q31_t)0x6b66536b, (q31_t)0xba5cf210, (q31_t)0x6b58a503, (q31_t)0xba47dce8, - (q31_t)0x6b4af279, (q31_t)0xba32ca71, (q31_t)0x6b3d3bcb, (q31_t)0xba1dbaaa, (q31_t)0x6b2f80fb, (q31_t)0xba08ad95, (q31_t)0x6b21c208, (q31_t)0xb9f3a332, - (q31_t)0x6b13fef5, (q31_t)0xb9de9b83, (q31_t)0x6b0637c1, (q31_t)0xb9c99688, (q31_t)0x6af86c6c, (q31_t)0xb9b49442, (q31_t)0x6aea9cf8, (q31_t)0xb99f94b2, - (q31_t)0x6adcc964, (q31_t)0xb98a97d8, (q31_t)0x6acef1b2, (q31_t)0xb9759db6, (q31_t)0x6ac115e2, (q31_t)0xb960a64c, (q31_t)0x6ab335f4, (q31_t)0xb94bb19b, - (q31_t)0x6aa551e9, (q31_t)0xb936bfa4, (q31_t)0x6a9769c1, (q31_t)0xb921d067, (q31_t)0x6a897d7d, (q31_t)0xb90ce3e6, (q31_t)0x6a7b8d1e, (q31_t)0xb8f7fa21, - (q31_t)0x6a6d98a4, (q31_t)0xb8e31319, (q31_t)0x6a5fa010, (q31_t)0xb8ce2ecf, (q31_t)0x6a51a361, (q31_t)0xb8b94d44, (q31_t)0x6a43a29a, (q31_t)0xb8a46e78, - (q31_t)0x6a359db9, (q31_t)0xb88f926d, (q31_t)0x6a2794c1, (q31_t)0xb87ab922, (q31_t)0x6a1987b0, (q31_t)0xb865e299, (q31_t)0x6a0b7689, (q31_t)0xb8510ed4, - (q31_t)0x69fd614a, (q31_t)0xb83c3dd1, (q31_t)0x69ef47f6, (q31_t)0xb8276f93, (q31_t)0x69e12a8c, (q31_t)0xb812a41a, (q31_t)0x69d3090e, (q31_t)0xb7fddb67, - (q31_t)0x69c4e37a, (q31_t)0xb7e9157a, (q31_t)0x69b6b9d3, (q31_t)0xb7d45255, (q31_t)0x69a88c19, (q31_t)0xb7bf91f8, (q31_t)0x699a5a4c, (q31_t)0xb7aad465, - (q31_t)0x698c246c, (q31_t)0xb796199b, (q31_t)0x697dea7b, (q31_t)0xb781619c, (q31_t)0x696fac78, (q31_t)0xb76cac69, (q31_t)0x69616a65, (q31_t)0xb757fa01, - (q31_t)0x69532442, (q31_t)0xb7434a67, (q31_t)0x6944da10, (q31_t)0xb72e9d9b, (q31_t)0x69368bce, (q31_t)0xb719f39e, (q31_t)0x6928397e, (q31_t)0xb7054c6f, - (q31_t)0x6919e320, (q31_t)0xb6f0a812, (q31_t)0x690b88b5, (q31_t)0xb6dc0685, (q31_t)0x68fd2a3d, (q31_t)0xb6c767ca, (q31_t)0x68eec7b9, (q31_t)0xb6b2cbe2, - (q31_t)0x68e06129, (q31_t)0xb69e32cd, (q31_t)0x68d1f68f, (q31_t)0xb6899c8d, (q31_t)0x68c387e9, (q31_t)0xb6750921, (q31_t)0x68b5153a, (q31_t)0xb660788c, - (q31_t)0x68a69e81, (q31_t)0xb64beacd, (q31_t)0x689823bf, (q31_t)0xb6375fe5, (q31_t)0x6889a4f6, (q31_t)0xb622d7d6, (q31_t)0x687b2224, (q31_t)0xb60e529f, - (q31_t)0x686c9b4b, (q31_t)0xb5f9d043, (q31_t)0x685e106c, (q31_t)0xb5e550c1, (q31_t)0x684f8186, (q31_t)0xb5d0d41a, (q31_t)0x6840ee9b, (q31_t)0xb5bc5a50, - (q31_t)0x683257ab, (q31_t)0xb5a7e362, (q31_t)0x6823bcb7, (q31_t)0xb5936f53, (q31_t)0x68151dbe, (q31_t)0xb57efe22, (q31_t)0x68067ac3, (q31_t)0xb56a8fd0, - (q31_t)0x67f7d3c5, (q31_t)0xb556245e, (q31_t)0x67e928c5, (q31_t)0xb541bbcd, (q31_t)0x67da79c3, (q31_t)0xb52d561e, (q31_t)0x67cbc6c0, (q31_t)0xb518f351, - (q31_t)0x67bd0fbd, (q31_t)0xb5049368, (q31_t)0x67ae54ba, (q31_t)0xb4f03663, (q31_t)0x679f95b7, (q31_t)0xb4dbdc42, (q31_t)0x6790d2b6, (q31_t)0xb4c78507, - (q31_t)0x67820bb7, (q31_t)0xb4b330b3, (q31_t)0x677340ba, (q31_t)0xb49edf45, (q31_t)0x676471c0, (q31_t)0xb48a90c0, (q31_t)0x67559eca, (q31_t)0xb4764523, - (q31_t)0x6746c7d8, (q31_t)0xb461fc70, (q31_t)0x6737ecea, (q31_t)0xb44db6a8, (q31_t)0x67290e02, (q31_t)0xb43973ca, (q31_t)0x671a2b20, (q31_t)0xb42533d8, - (q31_t)0x670b4444, (q31_t)0xb410f6d3, (q31_t)0x66fc596f, (q31_t)0xb3fcbcbb, (q31_t)0x66ed6aa1, (q31_t)0xb3e88592, (q31_t)0x66de77dc, (q31_t)0xb3d45157, - (q31_t)0x66cf8120, (q31_t)0xb3c0200c, (q31_t)0x66c0866d, (q31_t)0xb3abf1b2, (q31_t)0x66b187c3, (q31_t)0xb397c649, (q31_t)0x66a28524, (q31_t)0xb3839dd3, - (q31_t)0x66937e91, (q31_t)0xb36f784f, (q31_t)0x66847408, (q31_t)0xb35b55bf, (q31_t)0x6675658c, (q31_t)0xb3473623, (q31_t)0x6666531d, (q31_t)0xb333197c, - (q31_t)0x66573cbb, (q31_t)0xb31effcc, (q31_t)0x66482267, (q31_t)0xb30ae912, (q31_t)0x66390422, (q31_t)0xb2f6d550, (q31_t)0x6629e1ec, (q31_t)0xb2e2c486, - (q31_t)0x661abbc5, (q31_t)0xb2ceb6b5, (q31_t)0x660b91af, (q31_t)0xb2baabde, (q31_t)0x65fc63a9, (q31_t)0xb2a6a402, (q31_t)0x65ed31b5, (q31_t)0xb2929f21, - (q31_t)0x65ddfbd3, (q31_t)0xb27e9d3c, (q31_t)0x65cec204, (q31_t)0xb26a9e54, (q31_t)0x65bf8447, (q31_t)0xb256a26a, (q31_t)0x65b0429f, (q31_t)0xb242a97e, - (q31_t)0x65a0fd0b, (q31_t)0xb22eb392, (q31_t)0x6591b38c, (q31_t)0xb21ac0a6, (q31_t)0x65826622, (q31_t)0xb206d0ba, (q31_t)0x657314cf, (q31_t)0xb1f2e3d0, - (q31_t)0x6563bf92, (q31_t)0xb1def9e9, (q31_t)0x6554666d, (q31_t)0xb1cb1304, (q31_t)0x6545095f, (q31_t)0xb1b72f23, (q31_t)0x6535a86b, (q31_t)0xb1a34e47, - (q31_t)0x6526438f, (q31_t)0xb18f7071, (q31_t)0x6516dacd, (q31_t)0xb17b95a0, (q31_t)0x65076e25, (q31_t)0xb167bdd7, (q31_t)0x64f7fd98, (q31_t)0xb153e915, - (q31_t)0x64e88926, (q31_t)0xb140175b, (q31_t)0x64d910d1, (q31_t)0xb12c48ab, (q31_t)0x64c99498, (q31_t)0xb1187d05, (q31_t)0x64ba147d, (q31_t)0xb104b46a, - (q31_t)0x64aa907f, (q31_t)0xb0f0eeda, (q31_t)0x649b08a0, (q31_t)0xb0dd2c56, (q31_t)0x648b7ce0, (q31_t)0xb0c96ce0, (q31_t)0x647bed3f, (q31_t)0xb0b5b077, - (q31_t)0x646c59bf, (q31_t)0xb0a1f71d, (q31_t)0x645cc260, (q31_t)0xb08e40d2, (q31_t)0x644d2722, (q31_t)0xb07a8d97, (q31_t)0x643d8806, (q31_t)0xb066dd6d, - (q31_t)0x642de50d, (q31_t)0xb0533055, (q31_t)0x641e3e38, (q31_t)0xb03f864f, (q31_t)0x640e9386, (q31_t)0xb02bdf5c, (q31_t)0x63fee4f8, (q31_t)0xb0183b7d, - (q31_t)0x63ef3290, (q31_t)0xb0049ab3, (q31_t)0x63df7c4d, (q31_t)0xaff0fcfe, (q31_t)0x63cfc231, (q31_t)0xafdd625f, (q31_t)0x63c0043b, (q31_t)0xafc9cad7, - (q31_t)0x63b0426d, (q31_t)0xafb63667, (q31_t)0x63a07cc7, (q31_t)0xafa2a50f, (q31_t)0x6390b34a, (q31_t)0xaf8f16d1, (q31_t)0x6380e5f6, (q31_t)0xaf7b8bac, - (q31_t)0x637114cc, (q31_t)0xaf6803a2, (q31_t)0x63613fcd, (q31_t)0xaf547eb3, (q31_t)0x635166f9, (q31_t)0xaf40fce1, (q31_t)0x63418a50, (q31_t)0xaf2d7e2b, - (q31_t)0x6331a9d4, (q31_t)0xaf1a0293, (q31_t)0x6321c585, (q31_t)0xaf068a1a, (q31_t)0x6311dd64, (q31_t)0xaef314c0, (q31_t)0x6301f171, (q31_t)0xaedfa285, - (q31_t)0x62f201ac, (q31_t)0xaecc336c, (q31_t)0x62e20e17, (q31_t)0xaeb8c774, (q31_t)0x62d216b3, (q31_t)0xaea55e9e, (q31_t)0x62c21b7e, (q31_t)0xae91f8eb, - (q31_t)0x62b21c7b, (q31_t)0xae7e965b, (q31_t)0x62a219aa, (q31_t)0xae6b36f0, (q31_t)0x6292130c, (q31_t)0xae57daab, (q31_t)0x628208a1, (q31_t)0xae44818b, - (q31_t)0x6271fa69, (q31_t)0xae312b92, (q31_t)0x6261e866, (q31_t)0xae1dd8c0, (q31_t)0x6251d298, (q31_t)0xae0a8916, (q31_t)0x6241b8ff, (q31_t)0xadf73c96, - (q31_t)0x62319b9d, (q31_t)0xade3f33e, (q31_t)0x62217a72, (q31_t)0xadd0ad12, (q31_t)0x6211557e, (q31_t)0xadbd6a10, (q31_t)0x62012cc2, (q31_t)0xadaa2a3b, - (q31_t)0x61f1003f, (q31_t)0xad96ed92, (q31_t)0x61e0cff5, (q31_t)0xad83b416, (q31_t)0x61d09be5, (q31_t)0xad707dc8, (q31_t)0x61c06410, (q31_t)0xad5d4aaa, - (q31_t)0x61b02876, (q31_t)0xad4a1aba, (q31_t)0x619fe918, (q31_t)0xad36edfc, (q31_t)0x618fa5f7, (q31_t)0xad23c46e, (q31_t)0x617f5f12, (q31_t)0xad109e12, - (q31_t)0x616f146c, (q31_t)0xacfd7ae8, (q31_t)0x615ec603, (q31_t)0xacea5af2, (q31_t)0x614e73da, (q31_t)0xacd73e30, (q31_t)0x613e1df0, (q31_t)0xacc424a3, - (q31_t)0x612dc447, (q31_t)0xacb10e4b, (q31_t)0x611d66de, (q31_t)0xac9dfb29, (q31_t)0x610d05b7, (q31_t)0xac8aeb3e, (q31_t)0x60fca0d2, (q31_t)0xac77de8b, - (q31_t)0x60ec3830, (q31_t)0xac64d510, (q31_t)0x60dbcbd1, (q31_t)0xac51cecf, (q31_t)0x60cb5bb7, (q31_t)0xac3ecbc7, (q31_t)0x60bae7e1, (q31_t)0xac2bcbfa, - (q31_t)0x60aa7050, (q31_t)0xac18cf69, (q31_t)0x6099f505, (q31_t)0xac05d613, (q31_t)0x60897601, (q31_t)0xabf2dffb, (q31_t)0x6078f344, (q31_t)0xabdfed1f, - (q31_t)0x60686ccf, (q31_t)0xabccfd83, (q31_t)0x6057e2a2, (q31_t)0xabba1125, (q31_t)0x604754bf, (q31_t)0xaba72807, (q31_t)0x6036c325, (q31_t)0xab944229, - (q31_t)0x60262dd6, (q31_t)0xab815f8d, (q31_t)0x601594d1, (q31_t)0xab6e8032, (q31_t)0x6004f819, (q31_t)0xab5ba41a, (q31_t)0x5ff457ad, (q31_t)0xab48cb46, - (q31_t)0x5fe3b38d, (q31_t)0xab35f5b5, (q31_t)0x5fd30bbc, (q31_t)0xab23236a, (q31_t)0x5fc26038, (q31_t)0xab105464, (q31_t)0x5fb1b104, (q31_t)0xaafd88a4, - (q31_t)0x5fa0fe1f, (q31_t)0xaaeac02c, (q31_t)0x5f90478a, (q31_t)0xaad7fafb, (q31_t)0x5f7f8d46, (q31_t)0xaac53912, (q31_t)0x5f6ecf53, (q31_t)0xaab27a73, - (q31_t)0x5f5e0db3, (q31_t)0xaa9fbf1e, (q31_t)0x5f4d4865, (q31_t)0xaa8d0713, (q31_t)0x5f3c7f6b, (q31_t)0xaa7a5253, (q31_t)0x5f2bb2c5, (q31_t)0xaa67a0e0, - (q31_t)0x5f1ae274, (q31_t)0xaa54f2ba, (q31_t)0x5f0a0e77, (q31_t)0xaa4247e1, (q31_t)0x5ef936d1, (q31_t)0xaa2fa056, (q31_t)0x5ee85b82, (q31_t)0xaa1cfc1a, - (q31_t)0x5ed77c8a, (q31_t)0xaa0a5b2e, (q31_t)0x5ec699e9, (q31_t)0xa9f7bd92, (q31_t)0x5eb5b3a2, (q31_t)0xa9e52347, (q31_t)0x5ea4c9b3, (q31_t)0xa9d28c4e, - (q31_t)0x5e93dc1f, (q31_t)0xa9bff8a8, (q31_t)0x5e82eae5, (q31_t)0xa9ad6855, (q31_t)0x5e71f606, (q31_t)0xa99adb56, (q31_t)0x5e60fd84, (q31_t)0xa98851ac, - (q31_t)0x5e50015d, (q31_t)0xa975cb57, (q31_t)0x5e3f0194, (q31_t)0xa9634858, (q31_t)0x5e2dfe29, (q31_t)0xa950c8b0, (q31_t)0x5e1cf71c, (q31_t)0xa93e4c5f, - (q31_t)0x5e0bec6e, (q31_t)0xa92bd367, (q31_t)0x5dfade20, (q31_t)0xa9195dc7, (q31_t)0x5de9cc33, (q31_t)0xa906eb82, (q31_t)0x5dd8b6a7, (q31_t)0xa8f47c97, - (q31_t)0x5dc79d7c, (q31_t)0xa8e21106, (q31_t)0x5db680b4, (q31_t)0xa8cfa8d2, (q31_t)0x5da5604f, (q31_t)0xa8bd43fa, (q31_t)0x5d943c4e, (q31_t)0xa8aae280, - (q31_t)0x5d8314b1, (q31_t)0xa8988463, (q31_t)0x5d71e979, (q31_t)0xa88629a5, (q31_t)0x5d60baa7, (q31_t)0xa873d246, (q31_t)0x5d4f883b, (q31_t)0xa8617e48, - (q31_t)0x5d3e5237, (q31_t)0xa84f2daa, (q31_t)0x5d2d189a, (q31_t)0xa83ce06e, (q31_t)0x5d1bdb65, (q31_t)0xa82a9693, (q31_t)0x5d0a9a9a, (q31_t)0xa818501c, - (q31_t)0x5cf95638, (q31_t)0xa8060d08, (q31_t)0x5ce80e41, (q31_t)0xa7f3cd59, (q31_t)0x5cd6c2b5, (q31_t)0xa7e1910f, (q31_t)0x5cc57394, (q31_t)0xa7cf582a, - (q31_t)0x5cb420e0, (q31_t)0xa7bd22ac, (q31_t)0x5ca2ca99, (q31_t)0xa7aaf094, (q31_t)0x5c9170bf, (q31_t)0xa798c1e5, (q31_t)0x5c801354, (q31_t)0xa786969e, - (q31_t)0x5c6eb258, (q31_t)0xa7746ec0, (q31_t)0x5c5d4dcc, (q31_t)0xa7624a4d, (q31_t)0x5c4be5b0, (q31_t)0xa7502943, (q31_t)0x5c3a7a05, (q31_t)0xa73e0ba5, - (q31_t)0x5c290acc, (q31_t)0xa72bf174, (q31_t)0x5c179806, (q31_t)0xa719daae, (q31_t)0x5c0621b2, (q31_t)0xa707c757, (q31_t)0x5bf4a7d2, (q31_t)0xa6f5b76d, - (q31_t)0x5be32a67, (q31_t)0xa6e3aaf2, (q31_t)0x5bd1a971, (q31_t)0xa6d1a1e7, (q31_t)0x5bc024f0, (q31_t)0xa6bf9c4b, (q31_t)0x5bae9ce7, (q31_t)0xa6ad9a21, - (q31_t)0x5b9d1154, (q31_t)0xa69b9b68, (q31_t)0x5b8b8239, (q31_t)0xa689a022, (q31_t)0x5b79ef96, (q31_t)0xa677a84e, (q31_t)0x5b68596d, (q31_t)0xa665b3ee, - (q31_t)0x5b56bfbd, (q31_t)0xa653c303, (q31_t)0x5b452288, (q31_t)0xa641d58c, (q31_t)0x5b3381ce, (q31_t)0xa62feb8b, (q31_t)0x5b21dd90, (q31_t)0xa61e0501, - (q31_t)0x5b1035cf, (q31_t)0xa60c21ee, (q31_t)0x5afe8a8b, (q31_t)0xa5fa4252, (q31_t)0x5aecdbc5, (q31_t)0xa5e8662f, (q31_t)0x5adb297d, (q31_t)0xa5d68d85, - (q31_t)0x5ac973b5, (q31_t)0xa5c4b855, (q31_t)0x5ab7ba6c, (q31_t)0xa5b2e6a0, (q31_t)0x5aa5fda5, (q31_t)0xa5a11866, (q31_t)0x5a943d5e, (q31_t)0xa58f4da8, - (q31_t)0x5a82799a, (q31_t)0xa57d8666, (q31_t)0x5a70b258, (q31_t)0xa56bc2a2, (q31_t)0x5a5ee79a, (q31_t)0xa55a025b, (q31_t)0x5a4d1960, (q31_t)0xa5484594, - (q31_t)0x5a3b47ab, (q31_t)0xa5368c4b, (q31_t)0x5a29727b, (q31_t)0xa524d683, (q31_t)0x5a1799d1, (q31_t)0xa513243b, (q31_t)0x5a05bdae, (q31_t)0xa5017575, - (q31_t)0x59f3de12, (q31_t)0xa4efca31, (q31_t)0x59e1faff, (q31_t)0xa4de2270, (q31_t)0x59d01475, (q31_t)0xa4cc7e32, (q31_t)0x59be2a74, (q31_t)0xa4badd78, - (q31_t)0x59ac3cfd, (q31_t)0xa4a94043, (q31_t)0x599a4c12, (q31_t)0xa497a693, (q31_t)0x598857b2, (q31_t)0xa486106a, (q31_t)0x59765fde, (q31_t)0xa4747dc7, - (q31_t)0x59646498, (q31_t)0xa462eeac, (q31_t)0x595265df, (q31_t)0xa4516319, (q31_t)0x594063b5, (q31_t)0xa43fdb10, (q31_t)0x592e5e19, (q31_t)0xa42e568f, - (q31_t)0x591c550e, (q31_t)0xa41cd599, (q31_t)0x590a4893, (q31_t)0xa40b582e, (q31_t)0x58f838a9, (q31_t)0xa3f9de4e, (q31_t)0x58e62552, (q31_t)0xa3e867fa, - (q31_t)0x58d40e8c, (q31_t)0xa3d6f534, (q31_t)0x58c1f45b, (q31_t)0xa3c585fb, (q31_t)0x58afd6bd, (q31_t)0xa3b41a50, (q31_t)0x589db5b3, (q31_t)0xa3a2b234, - (q31_t)0x588b9140, (q31_t)0xa3914da8, (q31_t)0x58796962, (q31_t)0xa37fecac, (q31_t)0x58673e1b, (q31_t)0xa36e8f41, (q31_t)0x58550f6c, (q31_t)0xa35d3567, - (q31_t)0x5842dd54, (q31_t)0xa34bdf20, (q31_t)0x5830a7d6, (q31_t)0xa33a8c6c, (q31_t)0x581e6ef1, (q31_t)0xa3293d4b, (q31_t)0x580c32a7, (q31_t)0xa317f1bf, - (q31_t)0x57f9f2f8, (q31_t)0xa306a9c8, (q31_t)0x57e7afe4, (q31_t)0xa2f56566, (q31_t)0x57d5696d, (q31_t)0xa2e4249b, (q31_t)0x57c31f92, (q31_t)0xa2d2e766, - (q31_t)0x57b0d256, (q31_t)0xa2c1adc9, (q31_t)0x579e81b8, (q31_t)0xa2b077c5, (q31_t)0x578c2dba, (q31_t)0xa29f4559, (q31_t)0x5779d65b, (q31_t)0xa28e1687, - (q31_t)0x57677b9d, (q31_t)0xa27ceb4f, (q31_t)0x57551d80, (q31_t)0xa26bc3b2, (q31_t)0x5742bc06, (q31_t)0xa25a9fb1, (q31_t)0x5730572e, (q31_t)0xa2497f4c, - (q31_t)0x571deefa, (q31_t)0xa2386284, (q31_t)0x570b8369, (q31_t)0xa2274959, (q31_t)0x56f9147e, (q31_t)0xa21633cd, (q31_t)0x56e6a239, (q31_t)0xa20521e0, - (q31_t)0x56d42c99, (q31_t)0xa1f41392, (q31_t)0x56c1b3a1, (q31_t)0xa1e308e4, (q31_t)0x56af3750, (q31_t)0xa1d201d7, (q31_t)0x569cb7a8, (q31_t)0xa1c0fe6c, - (q31_t)0x568a34a9, (q31_t)0xa1affea3, (q31_t)0x5677ae54, (q31_t)0xa19f027c, (q31_t)0x566524aa, (q31_t)0xa18e09fa, (q31_t)0x565297ab, (q31_t)0xa17d151b, - (q31_t)0x56400758, (q31_t)0xa16c23e1, (q31_t)0x562d73b2, (q31_t)0xa15b364d, (q31_t)0x561adcb9, (q31_t)0xa14a4c5e, (q31_t)0x5608426e, (q31_t)0xa1396617, - (q31_t)0x55f5a4d2, (q31_t)0xa1288376, (q31_t)0x55e303e6, (q31_t)0xa117a47e, (q31_t)0x55d05faa, (q31_t)0xa106c92f, (q31_t)0x55bdb81f, (q31_t)0xa0f5f189, - (q31_t)0x55ab0d46, (q31_t)0xa0e51d8c, (q31_t)0x55985f20, (q31_t)0xa0d44d3b, (q31_t)0x5585adad, (q31_t)0xa0c38095, (q31_t)0x5572f8ed, (q31_t)0xa0b2b79b, - (q31_t)0x556040e2, (q31_t)0xa0a1f24d, (q31_t)0x554d858d, (q31_t)0xa09130ad, (q31_t)0x553ac6ee, (q31_t)0xa08072ba, (q31_t)0x55280505, (q31_t)0xa06fb876, - (q31_t)0x55153fd4, (q31_t)0xa05f01e1, (q31_t)0x5502775c, (q31_t)0xa04e4efc, (q31_t)0x54efab9c, (q31_t)0xa03d9fc8, (q31_t)0x54dcdc96, (q31_t)0xa02cf444, - (q31_t)0x54ca0a4b, (q31_t)0xa01c4c73, (q31_t)0x54b734ba, (q31_t)0xa00ba853, (q31_t)0x54a45be6, (q31_t)0x9ffb07e7, (q31_t)0x54917fce, (q31_t)0x9fea6b2f, - (q31_t)0x547ea073, (q31_t)0x9fd9d22a, (q31_t)0x546bbdd7, (q31_t)0x9fc93cdb, (q31_t)0x5458d7f9, (q31_t)0x9fb8ab41, (q31_t)0x5445eedb, (q31_t)0x9fa81d5e, - (q31_t)0x5433027d, (q31_t)0x9f979331, (q31_t)0x542012e1, (q31_t)0x9f870cbc, (q31_t)0x540d2005, (q31_t)0x9f7689ff, (q31_t)0x53fa29ed, (q31_t)0x9f660afb, - (q31_t)0x53e73097, (q31_t)0x9f558fb0, (q31_t)0x53d43406, (q31_t)0x9f45181f, (q31_t)0x53c13439, (q31_t)0x9f34a449, (q31_t)0x53ae3131, (q31_t)0x9f24342f, - (q31_t)0x539b2af0, (q31_t)0x9f13c7d0, (q31_t)0x53882175, (q31_t)0x9f035f2e, (q31_t)0x537514c2, (q31_t)0x9ef2fa49, (q31_t)0x536204d7, (q31_t)0x9ee29922, - (q31_t)0x534ef1b5, (q31_t)0x9ed23bb9, (q31_t)0x533bdb5d, (q31_t)0x9ec1e210, (q31_t)0x5328c1d0, (q31_t)0x9eb18c26, (q31_t)0x5315a50e, (q31_t)0x9ea139fd, - (q31_t)0x53028518, (q31_t)0x9e90eb94, (q31_t)0x52ef61ee, (q31_t)0x9e80a0ee, (q31_t)0x52dc3b92, (q31_t)0x9e705a09, (q31_t)0x52c91204, (q31_t)0x9e6016e8, - (q31_t)0x52b5e546, (q31_t)0x9e4fd78a, (q31_t)0x52a2b556, (q31_t)0x9e3f9bf0, (q31_t)0x528f8238, (q31_t)0x9e2f641b, (q31_t)0x527c4bea, (q31_t)0x9e1f300b, - (q31_t)0x5269126e, (q31_t)0x9e0effc1, (q31_t)0x5255d5c5, (q31_t)0x9dfed33e, (q31_t)0x524295f0, (q31_t)0x9deeaa82, (q31_t)0x522f52ee, (q31_t)0x9dde858e, - (q31_t)0x521c0cc2, (q31_t)0x9dce6463, (q31_t)0x5208c36a, (q31_t)0x9dbe4701, (q31_t)0x51f576ea, (q31_t)0x9dae2d68, (q31_t)0x51e22740, (q31_t)0x9d9e179a, - (q31_t)0x51ced46e, (q31_t)0x9d8e0597, (q31_t)0x51bb7e75, (q31_t)0x9d7df75f, (q31_t)0x51a82555, (q31_t)0x9d6decf4, (q31_t)0x5194c910, (q31_t)0x9d5de656, - (q31_t)0x518169a5, (q31_t)0x9d4de385, (q31_t)0x516e0715, (q31_t)0x9d3de482, (q31_t)0x515aa162, (q31_t)0x9d2de94d, (q31_t)0x5147388c, (q31_t)0x9d1df1e9, - (q31_t)0x5133cc94, (q31_t)0x9d0dfe54, (q31_t)0x51205d7b, (q31_t)0x9cfe0e8f, (q31_t)0x510ceb40, (q31_t)0x9cee229c, (q31_t)0x50f975e6, (q31_t)0x9cde3a7b, - (q31_t)0x50e5fd6d, (q31_t)0x9cce562c, (q31_t)0x50d281d5, (q31_t)0x9cbe75b0, (q31_t)0x50bf031f, (q31_t)0x9cae9907, (q31_t)0x50ab814d, (q31_t)0x9c9ec033, - (q31_t)0x5097fc5e, (q31_t)0x9c8eeb34, (q31_t)0x50847454, (q31_t)0x9c7f1a0a, (q31_t)0x5070e92f, (q31_t)0x9c6f4cb6, (q31_t)0x505d5af1, (q31_t)0x9c5f8339, - (q31_t)0x5049c999, (q31_t)0x9c4fbd93, (q31_t)0x50363529, (q31_t)0x9c3ffbc5, (q31_t)0x50229da1, (q31_t)0x9c303dcf, (q31_t)0x500f0302, (q31_t)0x9c2083b3, - (q31_t)0x4ffb654d, (q31_t)0x9c10cd70, (q31_t)0x4fe7c483, (q31_t)0x9c011b08, (q31_t)0x4fd420a4, (q31_t)0x9bf16c7a, (q31_t)0x4fc079b1, (q31_t)0x9be1c1c8, - (q31_t)0x4faccfab, (q31_t)0x9bd21af3, (q31_t)0x4f992293, (q31_t)0x9bc277fa, (q31_t)0x4f857269, (q31_t)0x9bb2d8de, (q31_t)0x4f71bf2e, (q31_t)0x9ba33da0, - (q31_t)0x4f5e08e3, (q31_t)0x9b93a641, (q31_t)0x4f4a4f89, (q31_t)0x9b8412c1, (q31_t)0x4f369320, (q31_t)0x9b748320, (q31_t)0x4f22d3aa, (q31_t)0x9b64f760, - (q31_t)0x4f0f1126, (q31_t)0x9b556f81, (q31_t)0x4efb4b96, (q31_t)0x9b45eb83, (q31_t)0x4ee782fb, (q31_t)0x9b366b68, (q31_t)0x4ed3b755, (q31_t)0x9b26ef2f, - (q31_t)0x4ebfe8a5, (q31_t)0x9b1776da, (q31_t)0x4eac16eb, (q31_t)0x9b080268, (q31_t)0x4e984229, (q31_t)0x9af891db, (q31_t)0x4e846a60, (q31_t)0x9ae92533, - (q31_t)0x4e708f8f, (q31_t)0x9ad9bc71, (q31_t)0x4e5cb1b9, (q31_t)0x9aca5795, (q31_t)0x4e48d0dd, (q31_t)0x9abaf6a1, (q31_t)0x4e34ecfc, (q31_t)0x9aab9993, - (q31_t)0x4e210617, (q31_t)0x9a9c406e, (q31_t)0x4e0d1c30, (q31_t)0x9a8ceb31, (q31_t)0x4df92f46, (q31_t)0x9a7d99de, (q31_t)0x4de53f5a, (q31_t)0x9a6e4c74, - (q31_t)0x4dd14c6e, (q31_t)0x9a5f02f5, (q31_t)0x4dbd5682, (q31_t)0x9a4fbd61, (q31_t)0x4da95d96, (q31_t)0x9a407bb9, (q31_t)0x4d9561ac, (q31_t)0x9a313dfc, - (q31_t)0x4d8162c4, (q31_t)0x9a22042d, (q31_t)0x4d6d60df, (q31_t)0x9a12ce4b, (q31_t)0x4d595bfe, (q31_t)0x9a039c57, (q31_t)0x4d455422, (q31_t)0x99f46e51, - (q31_t)0x4d31494b, (q31_t)0x99e5443b, (q31_t)0x4d1d3b7a, (q31_t)0x99d61e14, (q31_t)0x4d092ab0, (q31_t)0x99c6fbde, (q31_t)0x4cf516ee, (q31_t)0x99b7dd99, - (q31_t)0x4ce10034, (q31_t)0x99a8c345, (q31_t)0x4ccce684, (q31_t)0x9999ace3, (q31_t)0x4cb8c9dd, (q31_t)0x998a9a74, (q31_t)0x4ca4aa41, (q31_t)0x997b8bf8, - (q31_t)0x4c9087b1, (q31_t)0x996c816f, (q31_t)0x4c7c622d, (q31_t)0x995d7adc, (q31_t)0x4c6839b7, (q31_t)0x994e783d, (q31_t)0x4c540e4e, (q31_t)0x993f7993, - (q31_t)0x4c3fdff4, (q31_t)0x99307ee0, (q31_t)0x4c2baea9, (q31_t)0x99218824, (q31_t)0x4c177a6e, (q31_t)0x9912955f, (q31_t)0x4c034345, (q31_t)0x9903a691, - (q31_t)0x4bef092d, (q31_t)0x98f4bbbc, (q31_t)0x4bdacc28, (q31_t)0x98e5d4e0, (q31_t)0x4bc68c36, (q31_t)0x98d6f1fe, (q31_t)0x4bb24958, (q31_t)0x98c81316, - (q31_t)0x4b9e0390, (q31_t)0x98b93828, (q31_t)0x4b89badd, (q31_t)0x98aa6136, (q31_t)0x4b756f40, (q31_t)0x989b8e40, (q31_t)0x4b6120bb, (q31_t)0x988cbf46, - (q31_t)0x4b4ccf4d, (q31_t)0x987df449, (q31_t)0x4b387af9, (q31_t)0x986f2d4a, (q31_t)0x4b2423be, (q31_t)0x98606a49, (q31_t)0x4b0fc99d, (q31_t)0x9851ab46, - (q31_t)0x4afb6c98, (q31_t)0x9842f043, (q31_t)0x4ae70caf, (q31_t)0x98343940, (q31_t)0x4ad2a9e2, (q31_t)0x9825863d, (q31_t)0x4abe4433, (q31_t)0x9816d73b, - (q31_t)0x4aa9dba2, (q31_t)0x98082c3b, (q31_t)0x4a957030, (q31_t)0x97f9853d, (q31_t)0x4a8101de, (q31_t)0x97eae242, (q31_t)0x4a6c90ad, (q31_t)0x97dc4349, - (q31_t)0x4a581c9e, (q31_t)0x97cda855, (q31_t)0x4a43a5b0, (q31_t)0x97bf1165, (q31_t)0x4a2f2be6, (q31_t)0x97b07e7a, (q31_t)0x4a1aaf3f, (q31_t)0x97a1ef94, - (q31_t)0x4a062fbd, (q31_t)0x979364b5, (q31_t)0x49f1ad61, (q31_t)0x9784dddc, (q31_t)0x49dd282a, (q31_t)0x97765b0a, (q31_t)0x49c8a01b, (q31_t)0x9767dc41, - (q31_t)0x49b41533, (q31_t)0x9759617f, (q31_t)0x499f8774, (q31_t)0x974aeac6, (q31_t)0x498af6df, (q31_t)0x973c7817, (q31_t)0x49766373, (q31_t)0x972e0971, - (q31_t)0x4961cd33, (q31_t)0x971f9ed7, (q31_t)0x494d341e, (q31_t)0x97113847, (q31_t)0x49389836, (q31_t)0x9702d5c3, (q31_t)0x4923f97b, (q31_t)0x96f4774b, - (q31_t)0x490f57ee, (q31_t)0x96e61ce0, (q31_t)0x48fab391, (q31_t)0x96d7c682, (q31_t)0x48e60c62, (q31_t)0x96c97432, (q31_t)0x48d16265, (q31_t)0x96bb25f0, - (q31_t)0x48bcb599, (q31_t)0x96acdbbe, (q31_t)0x48a805ff, (q31_t)0x969e959b, (q31_t)0x48935397, (q31_t)0x96905388, (q31_t)0x487e9e64, (q31_t)0x96821585, - (q31_t)0x4869e665, (q31_t)0x9673db94, (q31_t)0x48552b9b, (q31_t)0x9665a5b4, (q31_t)0x48406e08, (q31_t)0x965773e7, (q31_t)0x482badab, (q31_t)0x9649462d, - (q31_t)0x4816ea86, (q31_t)0x963b1c86, (q31_t)0x48022499, (q31_t)0x962cf6f2, (q31_t)0x47ed5be6, (q31_t)0x961ed574, (q31_t)0x47d8906d, (q31_t)0x9610b80a, - (q31_t)0x47c3c22f, (q31_t)0x96029eb6, (q31_t)0x47aef12c, (q31_t)0x95f48977, (q31_t)0x479a1d67, (q31_t)0x95e67850, (q31_t)0x478546de, (q31_t)0x95d86b3f, - (q31_t)0x47706d93, (q31_t)0x95ca6247, (q31_t)0x475b9188, (q31_t)0x95bc5d66, (q31_t)0x4746b2bc, (q31_t)0x95ae5c9f, (q31_t)0x4731d131, (q31_t)0x95a05ff0, - (q31_t)0x471cece7, (q31_t)0x9592675c, (q31_t)0x470805df, (q31_t)0x958472e2, (q31_t)0x46f31c1a, (q31_t)0x95768283, (q31_t)0x46de2f99, (q31_t)0x9568963f, - (q31_t)0x46c9405c, (q31_t)0x955aae17, (q31_t)0x46b44e65, (q31_t)0x954cca0c, (q31_t)0x469f59b4, (q31_t)0x953eea1e, (q31_t)0x468a624a, (q31_t)0x95310e4e, - (q31_t)0x46756828, (q31_t)0x9523369c, (q31_t)0x46606b4e, (q31_t)0x95156308, (q31_t)0x464b6bbe, (q31_t)0x95079394, (q31_t)0x46366978, (q31_t)0x94f9c83f, - (q31_t)0x4621647d, (q31_t)0x94ec010b, (q31_t)0x460c5cce, (q31_t)0x94de3df8, (q31_t)0x45f7526b, (q31_t)0x94d07f05, (q31_t)0x45e24556, (q31_t)0x94c2c435, - (q31_t)0x45cd358f, (q31_t)0x94b50d87, (q31_t)0x45b82318, (q31_t)0x94a75afd, (q31_t)0x45a30df0, (q31_t)0x9499ac95, (q31_t)0x458df619, (q31_t)0x948c0252, - (q31_t)0x4578db93, (q31_t)0x947e5c33, (q31_t)0x4563be60, (q31_t)0x9470ba39, (q31_t)0x454e9e80, (q31_t)0x94631c65, (q31_t)0x45397bf4, (q31_t)0x945582b7, - (q31_t)0x452456bd, (q31_t)0x9447ed2f, (q31_t)0x450f2edb, (q31_t)0x943a5bcf, (q31_t)0x44fa0450, (q31_t)0x942cce96, (q31_t)0x44e4d71c, (q31_t)0x941f4585, - (q31_t)0x44cfa740, (q31_t)0x9411c09e, (q31_t)0x44ba74bd, (q31_t)0x94043fdf, (q31_t)0x44a53f93, (q31_t)0x93f6c34a, (q31_t)0x449007c4, (q31_t)0x93e94adf, - (q31_t)0x447acd50, (q31_t)0x93dbd6a0, (q31_t)0x44659039, (q31_t)0x93ce668b, (q31_t)0x4450507e, (q31_t)0x93c0faa3, (q31_t)0x443b0e21, (q31_t)0x93b392e6, - (q31_t)0x4425c923, (q31_t)0x93a62f57, (q31_t)0x44108184, (q31_t)0x9398cff5, (q31_t)0x43fb3746, (q31_t)0x938b74c1, (q31_t)0x43e5ea68, (q31_t)0x937e1dbb, - (q31_t)0x43d09aed, (q31_t)0x9370cae4, (q31_t)0x43bb48d4, (q31_t)0x93637c3d, (q31_t)0x43a5f41e, (q31_t)0x935631c5, (q31_t)0x43909ccd, (q31_t)0x9348eb7e, - (q31_t)0x437b42e1, (q31_t)0x933ba968, (q31_t)0x4365e65b, (q31_t)0x932e6b84, (q31_t)0x4350873c, (q31_t)0x932131d1, (q31_t)0x433b2585, (q31_t)0x9313fc51, - (q31_t)0x4325c135, (q31_t)0x9306cb04, (q31_t)0x43105a50, (q31_t)0x92f99deb, (q31_t)0x42faf0d4, (q31_t)0x92ec7505, (q31_t)0x42e584c3, (q31_t)0x92df5054, - (q31_t)0x42d0161e, (q31_t)0x92d22fd9, (q31_t)0x42baa4e6, (q31_t)0x92c51392, (q31_t)0x42a5311b, (q31_t)0x92b7fb82, (q31_t)0x428fbabe, (q31_t)0x92aae7a8, - (q31_t)0x427a41d0, (q31_t)0x929dd806, (q31_t)0x4264c653, (q31_t)0x9290cc9b, (q31_t)0x424f4845, (q31_t)0x9283c568, (q31_t)0x4239c7aa, (q31_t)0x9276c26d, - (q31_t)0x42244481, (q31_t)0x9269c3ac, (q31_t)0x420ebecb, (q31_t)0x925cc924, (q31_t)0x41f93689, (q31_t)0x924fd2d7, (q31_t)0x41e3abbc, (q31_t)0x9242e0c4, - (q31_t)0x41ce1e65, (q31_t)0x9235f2ec, (q31_t)0x41b88e84, (q31_t)0x9229094f, (q31_t)0x41a2fc1a, (q31_t)0x921c23ef, (q31_t)0x418d6729, (q31_t)0x920f42cb, - (q31_t)0x4177cfb1, (q31_t)0x920265e4, (q31_t)0x416235b2, (q31_t)0x91f58d3b, (q31_t)0x414c992f, (q31_t)0x91e8b8d0, (q31_t)0x4136fa27, (q31_t)0x91dbe8a4, - (q31_t)0x4121589b, (q31_t)0x91cf1cb6, (q31_t)0x410bb48c, (q31_t)0x91c25508, (q31_t)0x40f60dfb, (q31_t)0x91b5919a, (q31_t)0x40e064ea, (q31_t)0x91a8d26d, - (q31_t)0x40cab958, (q31_t)0x919c1781, (q31_t)0x40b50b46, (q31_t)0x918f60d6, (q31_t)0x409f5ab6, (q31_t)0x9182ae6d, (q31_t)0x4089a7a8, (q31_t)0x91760047, - (q31_t)0x4073f21d, (q31_t)0x91695663, (q31_t)0x405e3a16, (q31_t)0x915cb0c3, (q31_t)0x40487f94, (q31_t)0x91500f67, (q31_t)0x4032c297, (q31_t)0x91437250, - (q31_t)0x401d0321, (q31_t)0x9136d97d, (q31_t)0x40074132, (q31_t)0x912a44f0, (q31_t)0x3ff17cca, (q31_t)0x911db4a9, (q31_t)0x3fdbb5ec, (q31_t)0x911128a8, - (q31_t)0x3fc5ec98, (q31_t)0x9104a0ee, (q31_t)0x3fb020ce, (q31_t)0x90f81d7b, (q31_t)0x3f9a5290, (q31_t)0x90eb9e50, (q31_t)0x3f8481dd, (q31_t)0x90df236e, - (q31_t)0x3f6eaeb8, (q31_t)0x90d2acd4, (q31_t)0x3f58d921, (q31_t)0x90c63a83, (q31_t)0x3f430119, (q31_t)0x90b9cc7d, (q31_t)0x3f2d26a0, (q31_t)0x90ad62c0, - (q31_t)0x3f1749b8, (q31_t)0x90a0fd4e, (q31_t)0x3f016a61, (q31_t)0x90949c28, (q31_t)0x3eeb889c, (q31_t)0x90883f4d, (q31_t)0x3ed5a46b, (q31_t)0x907be6be, - (q31_t)0x3ebfbdcd, (q31_t)0x906f927c, (q31_t)0x3ea9d4c3, (q31_t)0x90634287, (q31_t)0x3e93e950, (q31_t)0x9056f6df, (q31_t)0x3e7dfb73, (q31_t)0x904aaf86, - (q31_t)0x3e680b2c, (q31_t)0x903e6c7b, (q31_t)0x3e52187f, (q31_t)0x90322dbf, (q31_t)0x3e3c2369, (q31_t)0x9025f352, (q31_t)0x3e262bee, (q31_t)0x9019bd36, - (q31_t)0x3e10320d, (q31_t)0x900d8b69, (q31_t)0x3dfa35c8, (q31_t)0x90015dee, (q31_t)0x3de4371f, (q31_t)0x8ff534c4, (q31_t)0x3dce3614, (q31_t)0x8fe90fec, - (q31_t)0x3db832a6, (q31_t)0x8fdcef66, (q31_t)0x3da22cd7, (q31_t)0x8fd0d333, (q31_t)0x3d8c24a8, (q31_t)0x8fc4bb53, (q31_t)0x3d761a19, (q31_t)0x8fb8a7c7, - (q31_t)0x3d600d2c, (q31_t)0x8fac988f, (q31_t)0x3d49fde1, (q31_t)0x8fa08dab, (q31_t)0x3d33ec39, (q31_t)0x8f94871d, (q31_t)0x3d1dd835, (q31_t)0x8f8884e4, - (q31_t)0x3d07c1d6, (q31_t)0x8f7c8701, (q31_t)0x3cf1a91c, (q31_t)0x8f708d75, (q31_t)0x3cdb8e09, (q31_t)0x8f649840, (q31_t)0x3cc5709e, (q31_t)0x8f58a761, - (q31_t)0x3caf50da, (q31_t)0x8f4cbadb, (q31_t)0x3c992ec0, (q31_t)0x8f40d2ad, (q31_t)0x3c830a50, (q31_t)0x8f34eed8, (q31_t)0x3c6ce38a, (q31_t)0x8f290f5c, - (q31_t)0x3c56ba70, (q31_t)0x8f1d343a, (q31_t)0x3c408f03, (q31_t)0x8f115d72, (q31_t)0x3c2a6142, (q31_t)0x8f058b04, (q31_t)0x3c143130, (q31_t)0x8ef9bcf2, - (q31_t)0x3bfdfecd, (q31_t)0x8eedf33b, (q31_t)0x3be7ca1a, (q31_t)0x8ee22de0, (q31_t)0x3bd19318, (q31_t)0x8ed66ce1, (q31_t)0x3bbb59c7, (q31_t)0x8ecab040, - (q31_t)0x3ba51e29, (q31_t)0x8ebef7fb, (q31_t)0x3b8ee03e, (q31_t)0x8eb34415, (q31_t)0x3b78a007, (q31_t)0x8ea7948c, (q31_t)0x3b625d86, (q31_t)0x8e9be963, - (q31_t)0x3b4c18ba, (q31_t)0x8e904298, (q31_t)0x3b35d1a5, (q31_t)0x8e84a02d, (q31_t)0x3b1f8848, (q31_t)0x8e790222, (q31_t)0x3b093ca3, (q31_t)0x8e6d6877, - (q31_t)0x3af2eeb7, (q31_t)0x8e61d32e, (q31_t)0x3adc9e86, (q31_t)0x8e564246, (q31_t)0x3ac64c0f, (q31_t)0x8e4ab5bf, (q31_t)0x3aaff755, (q31_t)0x8e3f2d9b, - (q31_t)0x3a99a057, (q31_t)0x8e33a9da, (q31_t)0x3a834717, (q31_t)0x8e282a7b, (q31_t)0x3a6ceb96, (q31_t)0x8e1caf80, (q31_t)0x3a568dd4, (q31_t)0x8e1138ea, - (q31_t)0x3a402dd2, (q31_t)0x8e05c6b7, (q31_t)0x3a29cb91, (q31_t)0x8dfa58ea, (q31_t)0x3a136712, (q31_t)0x8deeef82, (q31_t)0x39fd0056, (q31_t)0x8de38a80, - (q31_t)0x39e6975e, (q31_t)0x8dd829e4, (q31_t)0x39d02c2a, (q31_t)0x8dcccdaf, (q31_t)0x39b9bebc, (q31_t)0x8dc175e0, (q31_t)0x39a34f13, (q31_t)0x8db6227a, - (q31_t)0x398cdd32, (q31_t)0x8daad37b, (q31_t)0x39766919, (q31_t)0x8d9f88e5, (q31_t)0x395ff2c9, (q31_t)0x8d9442b8, (q31_t)0x39497a43, (q31_t)0x8d8900f3, - (q31_t)0x3932ff87, (q31_t)0x8d7dc399, (q31_t)0x391c8297, (q31_t)0x8d728aa9, (q31_t)0x39060373, (q31_t)0x8d675623, (q31_t)0x38ef821c, (q31_t)0x8d5c2609, - (q31_t)0x38d8fe93, (q31_t)0x8d50fa59, (q31_t)0x38c278d9, (q31_t)0x8d45d316, (q31_t)0x38abf0ef, (q31_t)0x8d3ab03f, (q31_t)0x389566d6, (q31_t)0x8d2f91d5, - (q31_t)0x387eda8e, (q31_t)0x8d2477d8, (q31_t)0x38684c19, (q31_t)0x8d196249, (q31_t)0x3851bb77, (q31_t)0x8d0e5127, (q31_t)0x383b28a9, (q31_t)0x8d034474, - (q31_t)0x382493b0, (q31_t)0x8cf83c30, (q31_t)0x380dfc8d, (q31_t)0x8ced385b, (q31_t)0x37f76341, (q31_t)0x8ce238f6, (q31_t)0x37e0c7cc, (q31_t)0x8cd73e01, - (q31_t)0x37ca2a30, (q31_t)0x8ccc477d, (q31_t)0x37b38a6d, (q31_t)0x8cc1556a, (q31_t)0x379ce885, (q31_t)0x8cb667c8, (q31_t)0x37864477, (q31_t)0x8cab7e98, - (q31_t)0x376f9e46, (q31_t)0x8ca099da, (q31_t)0x3758f5f2, (q31_t)0x8c95b98f, (q31_t)0x37424b7b, (q31_t)0x8c8addb7, (q31_t)0x372b9ee3, (q31_t)0x8c800652, - (q31_t)0x3714f02a, (q31_t)0x8c753362, (q31_t)0x36fe3f52, (q31_t)0x8c6a64e5, (q31_t)0x36e78c5b, (q31_t)0x8c5f9ade, (q31_t)0x36d0d746, (q31_t)0x8c54d54c, - (q31_t)0x36ba2014, (q31_t)0x8c4a142f, (q31_t)0x36a366c6, (q31_t)0x8c3f5788, (q31_t)0x368cab5c, (q31_t)0x8c349f58, (q31_t)0x3675edd9, (q31_t)0x8c29eb9f, - (q31_t)0x365f2e3b, (q31_t)0x8c1f3c5d, (q31_t)0x36486c86, (q31_t)0x8c149192, (q31_t)0x3631a8b8, (q31_t)0x8c09eb40, (q31_t)0x361ae2d3, (q31_t)0x8bff4966, - (q31_t)0x36041ad9, (q31_t)0x8bf4ac05, (q31_t)0x35ed50c9, (q31_t)0x8bea131e, (q31_t)0x35d684a6, (q31_t)0x8bdf7eb0, (q31_t)0x35bfb66e, (q31_t)0x8bd4eebc, - (q31_t)0x35a8e625, (q31_t)0x8bca6343, (q31_t)0x359213c9, (q31_t)0x8bbfdc44, (q31_t)0x357b3f5d, (q31_t)0x8bb559c1, (q31_t)0x356468e2, (q31_t)0x8baadbba, - (q31_t)0x354d9057, (q31_t)0x8ba0622f, (q31_t)0x3536b5be, (q31_t)0x8b95ed21, (q31_t)0x351fd918, (q31_t)0x8b8b7c8f, (q31_t)0x3508fa66, (q31_t)0x8b81107b, - (q31_t)0x34f219a8, (q31_t)0x8b76a8e4, (q31_t)0x34db36df, (q31_t)0x8b6c45cc, (q31_t)0x34c4520d, (q31_t)0x8b61e733, (q31_t)0x34ad6b32, (q31_t)0x8b578d18, - (q31_t)0x34968250, (q31_t)0x8b4d377c, (q31_t)0x347f9766, (q31_t)0x8b42e661, (q31_t)0x3468aa76, (q31_t)0x8b3899c6, (q31_t)0x3451bb81, (q31_t)0x8b2e51ab, - (q31_t)0x343aca87, (q31_t)0x8b240e11, (q31_t)0x3423d78a, (q31_t)0x8b19cef8, (q31_t)0x340ce28b, (q31_t)0x8b0f9462, (q31_t)0x33f5eb89, (q31_t)0x8b055e4d, - (q31_t)0x33def287, (q31_t)0x8afb2cbb, (q31_t)0x33c7f785, (q31_t)0x8af0ffac, (q31_t)0x33b0fa84, (q31_t)0x8ae6d720, (q31_t)0x3399fb85, (q31_t)0x8adcb318, - (q31_t)0x3382fa88, (q31_t)0x8ad29394, (q31_t)0x336bf78f, (q31_t)0x8ac87894, (q31_t)0x3354f29b, (q31_t)0x8abe6219, (q31_t)0x333debab, (q31_t)0x8ab45024, - (q31_t)0x3326e2c3, (q31_t)0x8aaa42b4, (q31_t)0x330fd7e1, (q31_t)0x8aa039cb, (q31_t)0x32f8cb07, (q31_t)0x8a963567, (q31_t)0x32e1bc36, (q31_t)0x8a8c358b, - (q31_t)0x32caab6f, (q31_t)0x8a823a36, (q31_t)0x32b398b3, (q31_t)0x8a784368, (q31_t)0x329c8402, (q31_t)0x8a6e5123, (q31_t)0x32856d5e, (q31_t)0x8a646365, - (q31_t)0x326e54c7, (q31_t)0x8a5a7a31, (q31_t)0x32573a3f, (q31_t)0x8a509585, (q31_t)0x32401dc6, (q31_t)0x8a46b564, (q31_t)0x3228ff5c, (q31_t)0x8a3cd9cc, - (q31_t)0x3211df04, (q31_t)0x8a3302be, (q31_t)0x31fabcbd, (q31_t)0x8a29303b, (q31_t)0x31e39889, (q31_t)0x8a1f6243, (q31_t)0x31cc7269, (q31_t)0x8a1598d6, - (q31_t)0x31b54a5e, (q31_t)0x8a0bd3f5, (q31_t)0x319e2067, (q31_t)0x8a0213a0, (q31_t)0x3186f487, (q31_t)0x89f857d8, (q31_t)0x316fc6be, (q31_t)0x89eea09d, - (q31_t)0x3158970e, (q31_t)0x89e4edef, (q31_t)0x31416576, (q31_t)0x89db3fcf, (q31_t)0x312a31f8, (q31_t)0x89d1963c, (q31_t)0x3112fc95, (q31_t)0x89c7f138, - (q31_t)0x30fbc54d, (q31_t)0x89be50c3, (q31_t)0x30e48c22, (q31_t)0x89b4b4dd, (q31_t)0x30cd5115, (q31_t)0x89ab1d87, (q31_t)0x30b61426, (q31_t)0x89a18ac0, - (q31_t)0x309ed556, (q31_t)0x8997fc8a, (q31_t)0x308794a6, (q31_t)0x898e72e4, (q31_t)0x30705217, (q31_t)0x8984edcf, (q31_t)0x30590dab, (q31_t)0x897b6d4c, - (q31_t)0x3041c761, (q31_t)0x8971f15a, (q31_t)0x302a7f3a, (q31_t)0x896879fb, (q31_t)0x30133539, (q31_t)0x895f072e, (q31_t)0x2ffbe95d, (q31_t)0x895598f3, - (q31_t)0x2fe49ba7, (q31_t)0x894c2f4c, (q31_t)0x2fcd4c19, (q31_t)0x8942ca39, (q31_t)0x2fb5fab2, (q31_t)0x893969b9, (q31_t)0x2f9ea775, (q31_t)0x89300dce, - (q31_t)0x2f875262, (q31_t)0x8926b677, (q31_t)0x2f6ffb7a, (q31_t)0x891d63b5, (q31_t)0x2f58a2be, (q31_t)0x89141589, (q31_t)0x2f41482e, (q31_t)0x890acbf2, - (q31_t)0x2f29ebcc, (q31_t)0x890186f2, (q31_t)0x2f128d99, (q31_t)0x88f84687, (q31_t)0x2efb2d95, (q31_t)0x88ef0ab4, (q31_t)0x2ee3cbc1, (q31_t)0x88e5d378, - (q31_t)0x2ecc681e, (q31_t)0x88dca0d3, (q31_t)0x2eb502ae, (q31_t)0x88d372c6, (q31_t)0x2e9d9b70, (q31_t)0x88ca4951, (q31_t)0x2e863267, (q31_t)0x88c12475, - (q31_t)0x2e6ec792, (q31_t)0x88b80432, (q31_t)0x2e575af3, (q31_t)0x88aee888, (q31_t)0x2e3fec8b, (q31_t)0x88a5d177, (q31_t)0x2e287c5a, (q31_t)0x889cbf01, - (q31_t)0x2e110a62, (q31_t)0x8893b125, (q31_t)0x2df996a3, (q31_t)0x888aa7e3, (q31_t)0x2de2211e, (q31_t)0x8881a33d, (q31_t)0x2dcaa9d5, (q31_t)0x8878a332, - (q31_t)0x2db330c7, (q31_t)0x886fa7c2, (q31_t)0x2d9bb5f6, (q31_t)0x8866b0ef, (q31_t)0x2d843964, (q31_t)0x885dbeb8, (q31_t)0x2d6cbb10, (q31_t)0x8854d11e, - (q31_t)0x2d553afc, (q31_t)0x884be821, (q31_t)0x2d3db928, (q31_t)0x884303c1, (q31_t)0x2d263596, (q31_t)0x883a23ff, (q31_t)0x2d0eb046, (q31_t)0x883148db, - (q31_t)0x2cf72939, (q31_t)0x88287256, (q31_t)0x2cdfa071, (q31_t)0x881fa06f, (q31_t)0x2cc815ee, (q31_t)0x8816d327, (q31_t)0x2cb089b1, (q31_t)0x880e0a7f, - (q31_t)0x2c98fbba, (q31_t)0x88054677, (q31_t)0x2c816c0c, (q31_t)0x87fc870f, (q31_t)0x2c69daa6, (q31_t)0x87f3cc48, (q31_t)0x2c52478a, (q31_t)0x87eb1621, - (q31_t)0x2c3ab2b9, (q31_t)0x87e2649b, (q31_t)0x2c231c33, (q31_t)0x87d9b7b7, (q31_t)0x2c0b83fa, (q31_t)0x87d10f75, (q31_t)0x2bf3ea0d, (q31_t)0x87c86bd5, - (q31_t)0x2bdc4e6f, (q31_t)0x87bfccd7, (q31_t)0x2bc4b120, (q31_t)0x87b7327d, (q31_t)0x2bad1221, (q31_t)0x87ae9cc5, (q31_t)0x2b957173, (q31_t)0x87a60bb1, - (q31_t)0x2b7dcf17, (q31_t)0x879d7f41, (q31_t)0x2b662b0e, (q31_t)0x8794f774, (q31_t)0x2b4e8558, (q31_t)0x878c744d, (q31_t)0x2b36ddf7, (q31_t)0x8783f5ca, - (q31_t)0x2b1f34eb, (q31_t)0x877b7bec, (q31_t)0x2b078a36, (q31_t)0x877306b4, (q31_t)0x2aefddd8, (q31_t)0x876a9621, (q31_t)0x2ad82fd2, (q31_t)0x87622a35, - (q31_t)0x2ac08026, (q31_t)0x8759c2ef, (q31_t)0x2aa8ced3, (q31_t)0x87516050, (q31_t)0x2a911bdc, (q31_t)0x87490258, (q31_t)0x2a796740, (q31_t)0x8740a907, - (q31_t)0x2a61b101, (q31_t)0x8738545e, (q31_t)0x2a49f920, (q31_t)0x8730045d, (q31_t)0x2a323f9e, (q31_t)0x8727b905, (q31_t)0x2a1a847b, (q31_t)0x871f7255, - (q31_t)0x2a02c7b8, (q31_t)0x8717304e, (q31_t)0x29eb0957, (q31_t)0x870ef2f1, (q31_t)0x29d34958, (q31_t)0x8706ba3d, (q31_t)0x29bb87bc, (q31_t)0x86fe8633, - (q31_t)0x29a3c485, (q31_t)0x86f656d3, (q31_t)0x298bffb2, (q31_t)0x86ee2c1e, (q31_t)0x29743946, (q31_t)0x86e60614, (q31_t)0x295c7140, (q31_t)0x86dde4b5, - (q31_t)0x2944a7a2, (q31_t)0x86d5c802, (q31_t)0x292cdc6d, (q31_t)0x86cdaffa, (q31_t)0x29150fa1, (q31_t)0x86c59c9f, (q31_t)0x28fd4140, (q31_t)0x86bd8df0, - (q31_t)0x28e5714b, (q31_t)0x86b583ee, (q31_t)0x28cd9fc1, (q31_t)0x86ad7e99, (q31_t)0x28b5cca5, (q31_t)0x86a57df2, (q31_t)0x289df7f8, (q31_t)0x869d81f8, - (q31_t)0x288621b9, (q31_t)0x86958aac, (q31_t)0x286e49ea, (q31_t)0x868d980e, (q31_t)0x2856708d, (q31_t)0x8685aa20, (q31_t)0x283e95a1, (q31_t)0x867dc0e0, - (q31_t)0x2826b928, (q31_t)0x8675dc4f, (q31_t)0x280edb23, (q31_t)0x866dfc6e, (q31_t)0x27f6fb92, (q31_t)0x8666213c, (q31_t)0x27df1a77, (q31_t)0x865e4abb, - (q31_t)0x27c737d3, (q31_t)0x865678eb, (q31_t)0x27af53a6, (q31_t)0x864eabcb, (q31_t)0x27976df1, (q31_t)0x8646e35c, (q31_t)0x277f86b5, (q31_t)0x863f1f9e, - (q31_t)0x27679df4, (q31_t)0x86376092, (q31_t)0x274fb3ae, (q31_t)0x862fa638, (q31_t)0x2737c7e3, (q31_t)0x8627f091, (q31_t)0x271fda96, (q31_t)0x86203f9c, - (q31_t)0x2707ebc7, (q31_t)0x86189359, (q31_t)0x26effb76, (q31_t)0x8610ebca, (q31_t)0x26d809a5, (q31_t)0x860948ef, (q31_t)0x26c01655, (q31_t)0x8601aac7, - (q31_t)0x26a82186, (q31_t)0x85fa1153, (q31_t)0x26902b39, (q31_t)0x85f27c93, (q31_t)0x26783370, (q31_t)0x85eaec88, (q31_t)0x26603a2c, (q31_t)0x85e36132, - (q31_t)0x26483f6c, (q31_t)0x85dbda91, (q31_t)0x26304333, (q31_t)0x85d458a6, (q31_t)0x26184581, (q31_t)0x85ccdb70, (q31_t)0x26004657, (q31_t)0x85c562f1, - (q31_t)0x25e845b6, (q31_t)0x85bdef28, (q31_t)0x25d0439f, (q31_t)0x85b68015, (q31_t)0x25b84012, (q31_t)0x85af15b9, (q31_t)0x25a03b11, (q31_t)0x85a7b015, - (q31_t)0x2588349d, (q31_t)0x85a04f28, (q31_t)0x25702cb7, (q31_t)0x8598f2f3, (q31_t)0x2558235f, (q31_t)0x85919b76, (q31_t)0x25401896, (q31_t)0x858a48b1, - (q31_t)0x25280c5e, (q31_t)0x8582faa5, (q31_t)0x250ffeb7, (q31_t)0x857bb152, (q31_t)0x24f7efa2, (q31_t)0x85746cb8, (q31_t)0x24dfdf20, (q31_t)0x856d2cd7, - (q31_t)0x24c7cd33, (q31_t)0x8565f1b0, (q31_t)0x24afb9da, (q31_t)0x855ebb44, (q31_t)0x2497a517, (q31_t)0x85578991, (q31_t)0x247f8eec, (q31_t)0x85505c99, - (q31_t)0x24677758, (q31_t)0x8549345c, (q31_t)0x244f5e5c, (q31_t)0x854210db, (q31_t)0x243743fa, (q31_t)0x853af214, (q31_t)0x241f2833, (q31_t)0x8533d809, - (q31_t)0x24070b08, (q31_t)0x852cc2bb, (q31_t)0x23eeec78, (q31_t)0x8525b228, (q31_t)0x23d6cc87, (q31_t)0x851ea652, (q31_t)0x23beab33, (q31_t)0x85179f39, - (q31_t)0x23a6887f, (q31_t)0x85109cdd, (q31_t)0x238e646a, (q31_t)0x85099f3e, (q31_t)0x23763ef7, (q31_t)0x8502a65c, (q31_t)0x235e1826, (q31_t)0x84fbb239, - (q31_t)0x2345eff8, (q31_t)0x84f4c2d4, (q31_t)0x232dc66d, (q31_t)0x84edd82d, (q31_t)0x23159b88, (q31_t)0x84e6f244, (q31_t)0x22fd6f48, (q31_t)0x84e0111b, - (q31_t)0x22e541af, (q31_t)0x84d934b1, (q31_t)0x22cd12bd, (q31_t)0x84d25d06, (q31_t)0x22b4e274, (q31_t)0x84cb8a1b, (q31_t)0x229cb0d5, (q31_t)0x84c4bbf0, - (q31_t)0x22847de0, (q31_t)0x84bdf286, (q31_t)0x226c4996, (q31_t)0x84b72ddb, (q31_t)0x225413f8, (q31_t)0x84b06df2, (q31_t)0x223bdd08, (q31_t)0x84a9b2ca, - (q31_t)0x2223a4c5, (q31_t)0x84a2fc62, (q31_t)0x220b6b32, (q31_t)0x849c4abd, (q31_t)0x21f3304f, (q31_t)0x84959dd9, (q31_t)0x21daf41d, (q31_t)0x848ef5b7, - (q31_t)0x21c2b69c, (q31_t)0x84885258, (q31_t)0x21aa77cf, (q31_t)0x8481b3bb, (q31_t)0x219237b5, (q31_t)0x847b19e1, (q31_t)0x2179f64f, (q31_t)0x847484ca, - (q31_t)0x2161b3a0, (q31_t)0x846df477, (q31_t)0x21496fa7, (q31_t)0x846768e7, (q31_t)0x21312a65, (q31_t)0x8460e21a, (q31_t)0x2118e3dc, (q31_t)0x845a6012, - (q31_t)0x21009c0c, (q31_t)0x8453e2cf, (q31_t)0x20e852f6, (q31_t)0x844d6a50, (q31_t)0x20d0089c, (q31_t)0x8446f695, (q31_t)0x20b7bcfe, (q31_t)0x844087a0, - (q31_t)0x209f701c, (q31_t)0x843a1d70, (q31_t)0x208721f9, (q31_t)0x8433b806, (q31_t)0x206ed295, (q31_t)0x842d5762, (q31_t)0x205681f1, (q31_t)0x8426fb84, - (q31_t)0x203e300d, (q31_t)0x8420a46c, (q31_t)0x2025dcec, (q31_t)0x841a521a, (q31_t)0x200d888d, (q31_t)0x84140490, (q31_t)0x1ff532f2, (q31_t)0x840dbbcc, - (q31_t)0x1fdcdc1b, (q31_t)0x840777d0, (q31_t)0x1fc4840a, (q31_t)0x8401389b, (q31_t)0x1fac2abf, (q31_t)0x83fafe2e, (q31_t)0x1f93d03c, (q31_t)0x83f4c889, - (q31_t)0x1f7b7481, (q31_t)0x83ee97ad, (q31_t)0x1f63178f, (q31_t)0x83e86b99, (q31_t)0x1f4ab968, (q31_t)0x83e2444d, (q31_t)0x1f325a0b, (q31_t)0x83dc21cb, - (q31_t)0x1f19f97b, (q31_t)0x83d60412, (q31_t)0x1f0197b8, (q31_t)0x83cfeb22, (q31_t)0x1ee934c3, (q31_t)0x83c9d6fc, (q31_t)0x1ed0d09d, (q31_t)0x83c3c7a0, - (q31_t)0x1eb86b46, (q31_t)0x83bdbd0e, (q31_t)0x1ea004c1, (q31_t)0x83b7b746, (q31_t)0x1e879d0d, (q31_t)0x83b1b649, (q31_t)0x1e6f342c, (q31_t)0x83abba17, - (q31_t)0x1e56ca1e, (q31_t)0x83a5c2b0, (q31_t)0x1e3e5ee5, (q31_t)0x839fd014, (q31_t)0x1e25f282, (q31_t)0x8399e244, (q31_t)0x1e0d84f5, (q31_t)0x8393f940, - (q31_t)0x1df5163f, (q31_t)0x838e1507, (q31_t)0x1ddca662, (q31_t)0x8388359b, (q31_t)0x1dc4355e, (q31_t)0x83825afb, (q31_t)0x1dabc334, (q31_t)0x837c8528, - (q31_t)0x1d934fe5, (q31_t)0x8376b422, (q31_t)0x1d7adb73, (q31_t)0x8370e7e9, (q31_t)0x1d6265dd, (q31_t)0x836b207d, (q31_t)0x1d49ef26, (q31_t)0x83655ddf, - (q31_t)0x1d31774d, (q31_t)0x835fa00f, (q31_t)0x1d18fe54, (q31_t)0x8359e70d, (q31_t)0x1d00843d, (q31_t)0x835432d8, (q31_t)0x1ce80906, (q31_t)0x834e8373, - (q31_t)0x1ccf8cb3, (q31_t)0x8348d8dc, (q31_t)0x1cb70f43, (q31_t)0x83433314, (q31_t)0x1c9e90b8, (q31_t)0x833d921b, (q31_t)0x1c861113, (q31_t)0x8337f5f1, - (q31_t)0x1c6d9053, (q31_t)0x83325e97, (q31_t)0x1c550e7c, (q31_t)0x832ccc0d, (q31_t)0x1c3c8b8c, (q31_t)0x83273e52, (q31_t)0x1c240786, (q31_t)0x8321b568, - (q31_t)0x1c0b826a, (q31_t)0x831c314e, (q31_t)0x1bf2fc3a, (q31_t)0x8316b205, (q31_t)0x1bda74f6, (q31_t)0x8311378d, (q31_t)0x1bc1ec9e, (q31_t)0x830bc1e6, - (q31_t)0x1ba96335, (q31_t)0x83065110, (q31_t)0x1b90d8bb, (q31_t)0x8300e50b, (q31_t)0x1b784d30, (q31_t)0x82fb7dd8, (q31_t)0x1b5fc097, (q31_t)0x82f61b77, - (q31_t)0x1b4732ef, (q31_t)0x82f0bde8, (q31_t)0x1b2ea43a, (q31_t)0x82eb652b, (q31_t)0x1b161479, (q31_t)0x82e61141, (q31_t)0x1afd83ad, (q31_t)0x82e0c22a, - (q31_t)0x1ae4f1d6, (q31_t)0x82db77e5, (q31_t)0x1acc5ef6, (q31_t)0x82d63274, (q31_t)0x1ab3cb0d, (q31_t)0x82d0f1d5, (q31_t)0x1a9b361d, (q31_t)0x82cbb60b, - (q31_t)0x1a82a026, (q31_t)0x82c67f14, (q31_t)0x1a6a0929, (q31_t)0x82c14cf1, (q31_t)0x1a517128, (q31_t)0x82bc1fa2, (q31_t)0x1a38d823, (q31_t)0x82b6f727, - (q31_t)0x1a203e1b, (q31_t)0x82b1d381, (q31_t)0x1a07a311, (q31_t)0x82acb4b0, (q31_t)0x19ef0707, (q31_t)0x82a79ab3, (q31_t)0x19d669fc, (q31_t)0x82a2858c, - (q31_t)0x19bdcbf3, (q31_t)0x829d753a, (q31_t)0x19a52ceb, (q31_t)0x829869be, (q31_t)0x198c8ce7, (q31_t)0x82936317, (q31_t)0x1973ebe6, (q31_t)0x828e6146, - (q31_t)0x195b49ea, (q31_t)0x8289644b, (q31_t)0x1942a6f3, (q31_t)0x82846c26, (q31_t)0x192a0304, (q31_t)0x827f78d8, (q31_t)0x19115e1c, (q31_t)0x827a8a61, - (q31_t)0x18f8b83c, (q31_t)0x8275a0c0, (q31_t)0x18e01167, (q31_t)0x8270bbf7, (q31_t)0x18c7699b, (q31_t)0x826bdc04, (q31_t)0x18aec0db, (q31_t)0x826700e9, - (q31_t)0x18961728, (q31_t)0x82622aa6, (q31_t)0x187d6c82, (q31_t)0x825d593a, (q31_t)0x1864c0ea, (q31_t)0x82588ca7, (q31_t)0x184c1461, (q31_t)0x8253c4eb, - (q31_t)0x183366e9, (q31_t)0x824f0208, (q31_t)0x181ab881, (q31_t)0x824a43fe, (q31_t)0x1802092c, (q31_t)0x82458acc, (q31_t)0x17e958ea, (q31_t)0x8240d673, - (q31_t)0x17d0a7bc, (q31_t)0x823c26f3, (q31_t)0x17b7f5a3, (q31_t)0x82377c4c, (q31_t)0x179f429f, (q31_t)0x8232d67f, (q31_t)0x17868eb3, (q31_t)0x822e358b, - (q31_t)0x176dd9de, (q31_t)0x82299971, (q31_t)0x17552422, (q31_t)0x82250232, (q31_t)0x173c6d80, (q31_t)0x82206fcc, (q31_t)0x1723b5f9, (q31_t)0x821be240, - (q31_t)0x170afd8d, (q31_t)0x82175990, (q31_t)0x16f2443e, (q31_t)0x8212d5b9, (q31_t)0x16d98a0c, (q31_t)0x820e56be, (q31_t)0x16c0cef9, (q31_t)0x8209dc9e, - (q31_t)0x16a81305, (q31_t)0x82056758, (q31_t)0x168f5632, (q31_t)0x8200f6ef, (q31_t)0x1676987f, (q31_t)0x81fc8b60, (q31_t)0x165dd9f0, (q31_t)0x81f824ae, - (q31_t)0x16451a83, (q31_t)0x81f3c2d7, (q31_t)0x162c5a3b, (q31_t)0x81ef65dc, (q31_t)0x16139918, (q31_t)0x81eb0dbe, (q31_t)0x15fad71b, (q31_t)0x81e6ba7c, - (q31_t)0x15e21445, (q31_t)0x81e26c16, (q31_t)0x15c95097, (q31_t)0x81de228d, (q31_t)0x15b08c12, (q31_t)0x81d9dde1, (q31_t)0x1597c6b7, (q31_t)0x81d59e13, - (q31_t)0x157f0086, (q31_t)0x81d16321, (q31_t)0x15663982, (q31_t)0x81cd2d0c, (q31_t)0x154d71aa, (q31_t)0x81c8fbd6, (q31_t)0x1534a901, (q31_t)0x81c4cf7d, - (q31_t)0x151bdf86, (q31_t)0x81c0a801, (q31_t)0x1503153a, (q31_t)0x81bc8564, (q31_t)0x14ea4a1f, (q31_t)0x81b867a5, (q31_t)0x14d17e36, (q31_t)0x81b44ec4, - (q31_t)0x14b8b17f, (q31_t)0x81b03ac2, (q31_t)0x149fe3fc, (q31_t)0x81ac2b9e, (q31_t)0x148715ae, (q31_t)0x81a82159, (q31_t)0x146e4694, (q31_t)0x81a41bf4, - (q31_t)0x145576b1, (q31_t)0x81a01b6d, (q31_t)0x143ca605, (q31_t)0x819c1fc5, (q31_t)0x1423d492, (q31_t)0x819828fd, (q31_t)0x140b0258, (q31_t)0x81943715, - (q31_t)0x13f22f58, (q31_t)0x81904a0c, (q31_t)0x13d95b93, (q31_t)0x818c61e3, (q31_t)0x13c0870a, (q31_t)0x81887e9a, (q31_t)0x13a7b1bf, (q31_t)0x8184a032, - (q31_t)0x138edbb1, (q31_t)0x8180c6a9, (q31_t)0x137604e2, (q31_t)0x817cf201, (q31_t)0x135d2d53, (q31_t)0x8179223a, (q31_t)0x13445505, (q31_t)0x81755754, - (q31_t)0x132b7bf9, (q31_t)0x8171914e, (q31_t)0x1312a230, (q31_t)0x816dd02a, (q31_t)0x12f9c7aa, (q31_t)0x816a13e6, (q31_t)0x12e0ec6a, (q31_t)0x81665c84, - (q31_t)0x12c8106f, (q31_t)0x8162aa04, (q31_t)0x12af33ba, (q31_t)0x815efc65, (q31_t)0x1296564d, (q31_t)0x815b53a8, (q31_t)0x127d7829, (q31_t)0x8157afcd, - (q31_t)0x1264994e, (q31_t)0x815410d4, (q31_t)0x124bb9be, (q31_t)0x815076bd, (q31_t)0x1232d979, (q31_t)0x814ce188, (q31_t)0x1219f880, (q31_t)0x81495136, - (q31_t)0x120116d5, (q31_t)0x8145c5c7, (q31_t)0x11e83478, (q31_t)0x81423f3a, (q31_t)0x11cf516a, (q31_t)0x813ebd90, (q31_t)0x11b66dad, (q31_t)0x813b40ca, - (q31_t)0x119d8941, (q31_t)0x8137c8e6, (q31_t)0x1184a427, (q31_t)0x813455e6, (q31_t)0x116bbe60, (q31_t)0x8130e7c9, (q31_t)0x1152d7ed, (q31_t)0x812d7e8f, - (q31_t)0x1139f0cf, (q31_t)0x812a1a3a, (q31_t)0x11210907, (q31_t)0x8126bac8, (q31_t)0x11082096, (q31_t)0x8123603a, (q31_t)0x10ef377d, (q31_t)0x81200a90, - (q31_t)0x10d64dbd, (q31_t)0x811cb9ca, (q31_t)0x10bd6356, (q31_t)0x81196de9, (q31_t)0x10a4784b, (q31_t)0x811626ec, (q31_t)0x108b8c9b, (q31_t)0x8112e4d4, - (q31_t)0x1072a048, (q31_t)0x810fa7a0, (q31_t)0x1059b352, (q31_t)0x810c6f52, (q31_t)0x1040c5bb, (q31_t)0x81093be8, (q31_t)0x1027d784, (q31_t)0x81060d63, - (q31_t)0x100ee8ad, (q31_t)0x8102e3c4, (q31_t)0xff5f938, (q31_t)0x80ffbf0a, (q31_t)0xfdd0926, (q31_t)0x80fc9f35, (q31_t)0xfc41876, (q31_t)0x80f98446, - (q31_t)0xfab272b, (q31_t)0x80f66e3c, (q31_t)0xf923546, (q31_t)0x80f35d19, (q31_t)0xf7942c7, (q31_t)0x80f050db, (q31_t)0xf604faf, (q31_t)0x80ed4984, - (q31_t)0xf475bff, (q31_t)0x80ea4712, (q31_t)0xf2e67b8, (q31_t)0x80e74987, (q31_t)0xf1572dc, (q31_t)0x80e450e2, (q31_t)0xefc7d6b, (q31_t)0x80e15d24, - (q31_t)0xee38766, (q31_t)0x80de6e4c, (q31_t)0xeca90ce, (q31_t)0x80db845b, (q31_t)0xeb199a4, (q31_t)0x80d89f51, (q31_t)0xe98a1e9, (q31_t)0x80d5bf2e, - (q31_t)0xe7fa99e, (q31_t)0x80d2e3f2, (q31_t)0xe66b0c3, (q31_t)0x80d00d9d, (q31_t)0xe4db75b, (q31_t)0x80cd3c2f, (q31_t)0xe34bd66, (q31_t)0x80ca6fa9, - (q31_t)0xe1bc2e4, (q31_t)0x80c7a80a, (q31_t)0xe02c7d7, (q31_t)0x80c4e553, (q31_t)0xde9cc40, (q31_t)0x80c22784, (q31_t)0xdd0d01f, (q31_t)0x80bf6e9c, - (q31_t)0xdb7d376, (q31_t)0x80bcba9d, (q31_t)0xd9ed646, (q31_t)0x80ba0b85, (q31_t)0xd85d88f, (q31_t)0x80b76156, (q31_t)0xd6cda53, (q31_t)0x80b4bc0e, - (q31_t)0xd53db92, (q31_t)0x80b21baf, (q31_t)0xd3adc4e, (q31_t)0x80af8039, (q31_t)0xd21dc87, (q31_t)0x80ace9ab, (q31_t)0xd08dc3f, (q31_t)0x80aa5806, - (q31_t)0xcefdb76, (q31_t)0x80a7cb49, (q31_t)0xcd6da2d, (q31_t)0x80a54376, (q31_t)0xcbdd865, (q31_t)0x80a2c08b, (q31_t)0xca4d620, (q31_t)0x80a04289, - (q31_t)0xc8bd35e, (q31_t)0x809dc971, (q31_t)0xc72d020, (q31_t)0x809b5541, (q31_t)0xc59cc68, (q31_t)0x8098e5fb, (q31_t)0xc40c835, (q31_t)0x80967b9f, - (q31_t)0xc27c389, (q31_t)0x8094162c, (q31_t)0xc0ebe66, (q31_t)0x8091b5a2, (q31_t)0xbf5b8cb, (q31_t)0x808f5a02, (q31_t)0xbdcb2bb, (q31_t)0x808d034c, - (q31_t)0xbc3ac35, (q31_t)0x808ab180, (q31_t)0xbaaa53b, (q31_t)0x8088649e, (q31_t)0xb919dcf, (q31_t)0x80861ca6, (q31_t)0xb7895f0, (q31_t)0x8083d998, - (q31_t)0xb5f8d9f, (q31_t)0x80819b74, (q31_t)0xb4684df, (q31_t)0x807f623b, (q31_t)0xb2d7baf, (q31_t)0x807d2dec, (q31_t)0xb147211, (q31_t)0x807afe87, - (q31_t)0xafb6805, (q31_t)0x8078d40d, (q31_t)0xae25d8d, (q31_t)0x8076ae7e, (q31_t)0xac952aa, (q31_t)0x80748dd9, (q31_t)0xab0475c, (q31_t)0x8072721f, - (q31_t)0xa973ba5, (q31_t)0x80705b50, (q31_t)0xa7e2f85, (q31_t)0x806e496c, (q31_t)0xa6522fe, (q31_t)0x806c3c74, (q31_t)0xa4c1610, (q31_t)0x806a3466, - (q31_t)0xa3308bd, (q31_t)0x80683143, (q31_t)0xa19fb04, (q31_t)0x8066330c, (q31_t)0xa00ece8, (q31_t)0x806439c0, (q31_t)0x9e7de6a, (q31_t)0x80624560, - (q31_t)0x9cecf89, (q31_t)0x806055eb, (q31_t)0x9b5c048, (q31_t)0x805e6b62, (q31_t)0x99cb0a7, (q31_t)0x805c85c4, (q31_t)0x983a0a7, (q31_t)0x805aa512, - (q31_t)0x96a9049, (q31_t)0x8058c94c, (q31_t)0x9517f8f, (q31_t)0x8056f272, (q31_t)0x9386e78, (q31_t)0x80552084, (q31_t)0x91f5d06, (q31_t)0x80535381, - (q31_t)0x9064b3a, (q31_t)0x80518b6b, (q31_t)0x8ed3916, (q31_t)0x804fc841, (q31_t)0x8d42699, (q31_t)0x804e0a04, (q31_t)0x8bb13c5, (q31_t)0x804c50b2, - (q31_t)0x8a2009a, (q31_t)0x804a9c4d, (q31_t)0x888ed1b, (q31_t)0x8048ecd5, (q31_t)0x86fd947, (q31_t)0x80474248, (q31_t)0x856c520, (q31_t)0x80459ca9, - (q31_t)0x83db0a7, (q31_t)0x8043fbf6, (q31_t)0x8249bdd, (q31_t)0x80426030, (q31_t)0x80b86c2, (q31_t)0x8040c956, (q31_t)0x7f27157, (q31_t)0x803f376a, - (q31_t)0x7d95b9e, (q31_t)0x803daa6a, (q31_t)0x7c04598, (q31_t)0x803c2257, (q31_t)0x7a72f45, (q31_t)0x803a9f31, (q31_t)0x78e18a7, (q31_t)0x803920f8, - (q31_t)0x77501be, (q31_t)0x8037a7ac, (q31_t)0x75bea8c, (q31_t)0x8036334e, (q31_t)0x742d311, (q31_t)0x8034c3dd, (q31_t)0x729bb4e, (q31_t)0x80335959, - (q31_t)0x710a345, (q31_t)0x8031f3c2, (q31_t)0x6f78af6, (q31_t)0x80309318, (q31_t)0x6de7262, (q31_t)0x802f375d, (q31_t)0x6c5598a, (q31_t)0x802de08e, - (q31_t)0x6ac406f, (q31_t)0x802c8ead, (q31_t)0x6932713, (q31_t)0x802b41ba, (q31_t)0x67a0d76, (q31_t)0x8029f9b4, (q31_t)0x660f398, (q31_t)0x8028b69c, - (q31_t)0x647d97c, (q31_t)0x80277872, (q31_t)0x62ebf22, (q31_t)0x80263f36, (q31_t)0x615a48b, (q31_t)0x80250ae7, (q31_t)0x5fc89b8, (q31_t)0x8023db86, - (q31_t)0x5e36ea9, (q31_t)0x8022b114, (q31_t)0x5ca5361, (q31_t)0x80218b8f, (q31_t)0x5b137df, (q31_t)0x80206af8, (q31_t)0x5981c26, (q31_t)0x801f4f4f, - (q31_t)0x57f0035, (q31_t)0x801e3895, (q31_t)0x565e40d, (q31_t)0x801d26c8, (q31_t)0x54cc7b1, (q31_t)0x801c19ea, (q31_t)0x533ab20, (q31_t)0x801b11fa, - (q31_t)0x51a8e5c, (q31_t)0x801a0ef8, (q31_t)0x5017165, (q31_t)0x801910e4, (q31_t)0x4e8543e, (q31_t)0x801817bf, (q31_t)0x4cf36e5, (q31_t)0x80172388, - (q31_t)0x4b6195d, (q31_t)0x80163440, (q31_t)0x49cfba7, (q31_t)0x801549e6, (q31_t)0x483ddc3, (q31_t)0x8014647b, (q31_t)0x46abfb3, (q31_t)0x801383fe, - (q31_t)0x451a177, (q31_t)0x8012a86f, (q31_t)0x4388310, (q31_t)0x8011d1d0, (q31_t)0x41f6480, (q31_t)0x8011001f, (q31_t)0x40645c7, (q31_t)0x8010335c, - (q31_t)0x3ed26e6, (q31_t)0x800f6b88, (q31_t)0x3d407df, (q31_t)0x800ea8a3, (q31_t)0x3bae8b2, (q31_t)0x800deaad, (q31_t)0x3a1c960, (q31_t)0x800d31a5, - (q31_t)0x388a9ea, (q31_t)0x800c7d8c, (q31_t)0x36f8a51, (q31_t)0x800bce63, (q31_t)0x3566a96, (q31_t)0x800b2427, (q31_t)0x33d4abb, (q31_t)0x800a7edb, - (q31_t)0x3242abf, (q31_t)0x8009de7e, (q31_t)0x30b0aa4, (q31_t)0x80094310, (q31_t)0x2f1ea6c, (q31_t)0x8008ac90, (q31_t)0x2d8ca16, (q31_t)0x80081b00, - (q31_t)0x2bfa9a4, (q31_t)0x80078e5e, (q31_t)0x2a68917, (q31_t)0x800706ac, (q31_t)0x28d6870, (q31_t)0x800683e8, (q31_t)0x27447b0, (q31_t)0x80060614, - (q31_t)0x25b26d7, (q31_t)0x80058d2f, (q31_t)0x24205e8, (q31_t)0x80051939, (q31_t)0x228e4e2, (q31_t)0x8004aa32, (q31_t)0x20fc3c6, (q31_t)0x8004401a, - (q31_t)0x1f6a297, (q31_t)0x8003daf1, (q31_t)0x1dd8154, (q31_t)0x80037ab7, (q31_t)0x1c45ffe, (q31_t)0x80031f6d, (q31_t)0x1ab3e97, (q31_t)0x8002c912, - (q31_t)0x1921d20, (q31_t)0x800277a6, (q31_t)0x178fb99, (q31_t)0x80022b29, (q31_t)0x15fda03, (q31_t)0x8001e39b, (q31_t)0x146b860, (q31_t)0x8001a0fd, - (q31_t)0x12d96b1, (q31_t)0x8001634e, (q31_t)0x11474f6, (q31_t)0x80012a8e, (q31_t)0x0fb5330, (q31_t)0x8000f6bd, (q31_t)0xe23160, (q31_t)0x8000c7dc, - (q31_t)0x0c90f88, (q31_t)0x80009dea, (q31_t)0x0afeda8, (q31_t)0x800078e7, (q31_t)0x096cbc1, (q31_t)0x800058d4, (q31_t)0x7da9d4, (q31_t)0x80003daf, - (q31_t)0x06487e3, (q31_t)0x8000277a, (q31_t)0x04b65ee, (q31_t)0x80001635, (q31_t)0x03243f5, (q31_t)0x800009df, (q31_t)0x1921fb, (q31_t)0x80000278 -}; - const q31_t cos_factorsQ31_2048[2048] = { - (q31_t)0x7fffff62, (q31_t)0x7ffffa73, (q31_t)0x7ffff094, (q31_t)0x7fffe1c6, (q31_t)0x7fffce09, (q31_t)0x7fffb55c, - (q31_t)0x7fff97c1, (q31_t)0x7fff7536, - (q31_t)0x7fff4dbb, (q31_t)0x7fff2151, (q31_t)0x7ffeeff8, (q31_t)0x7ffeb9b0, (q31_t)0x7ffe7e79, (q31_t)0x7ffe3e52, - (q31_t)0x7ffdf93c, (q31_t)0x7ffdaf37, - (q31_t)0x7ffd6042, (q31_t)0x7ffd0c5f, (q31_t)0x7ffcb38c, (q31_t)0x7ffc55ca, (q31_t)0x7ffbf319, (q31_t)0x7ffb8b78, - (q31_t)0x7ffb1ee9, (q31_t)0x7ffaad6a, - (q31_t)0x7ffa36fc, (q31_t)0x7ff9bba0, (q31_t)0x7ff93b54, (q31_t)0x7ff8b619, (q31_t)0x7ff82bef, (q31_t)0x7ff79cd6, - (q31_t)0x7ff708ce, (q31_t)0x7ff66fd7, - (q31_t)0x7ff5d1f1, (q31_t)0x7ff52f1d, (q31_t)0x7ff48759, (q31_t)0x7ff3daa6, (q31_t)0x7ff32905, (q31_t)0x7ff27275, - (q31_t)0x7ff1b6f6, (q31_t)0x7ff0f688, - (q31_t)0x7ff0312c, (q31_t)0x7fef66e1, (q31_t)0x7fee97a7, (q31_t)0x7fedc37e, (q31_t)0x7fecea67, (q31_t)0x7fec0c62, - (q31_t)0x7feb296d, (q31_t)0x7fea418b, - (q31_t)0x7fe954ba, (q31_t)0x7fe862fa, (q31_t)0x7fe76c4c, (q31_t)0x7fe670b0, (q31_t)0x7fe57025, (q31_t)0x7fe46aac, - (q31_t)0x7fe36045, (q31_t)0x7fe250ef, - (q31_t)0x7fe13cac, (q31_t)0x7fe0237a, (q31_t)0x7fdf055a, (q31_t)0x7fdde24d, (q31_t)0x7fdcba51, (q31_t)0x7fdb8d67, - (q31_t)0x7fda5b8f, (q31_t)0x7fd924ca, - (q31_t)0x7fd7e917, (q31_t)0x7fd6a875, (q31_t)0x7fd562e7, (q31_t)0x7fd4186a, (q31_t)0x7fd2c900, (q31_t)0x7fd174a8, - (q31_t)0x7fd01b63, (q31_t)0x7fcebd31, - (q31_t)0x7fcd5a11, (q31_t)0x7fcbf203, (q31_t)0x7fca8508, (q31_t)0x7fc91320, (q31_t)0x7fc79c4b, (q31_t)0x7fc62089, - (q31_t)0x7fc49fda, (q31_t)0x7fc31a3d, - (q31_t)0x7fc18fb4, (q31_t)0x7fc0003e, (q31_t)0x7fbe6bdb, (q31_t)0x7fbcd28b, (q31_t)0x7fbb344e, (q31_t)0x7fb99125, - (q31_t)0x7fb7e90f, (q31_t)0x7fb63c0d, - (q31_t)0x7fb48a1e, (q31_t)0x7fb2d343, (q31_t)0x7fb1177b, (q31_t)0x7faf56c7, (q31_t)0x7fad9127, (q31_t)0x7fabc69b, - (q31_t)0x7fa9f723, (q31_t)0x7fa822bf, - (q31_t)0x7fa6496e, (q31_t)0x7fa46b32, (q31_t)0x7fa2880b, (q31_t)0x7fa09ff7, (q31_t)0x7f9eb2f8, (q31_t)0x7f9cc10d, - (q31_t)0x7f9aca37, (q31_t)0x7f98ce76, - (q31_t)0x7f96cdc9, (q31_t)0x7f94c831, (q31_t)0x7f92bdad, (q31_t)0x7f90ae3f, (q31_t)0x7f8e99e6, (q31_t)0x7f8c80a1, - (q31_t)0x7f8a6272, (q31_t)0x7f883f58, - (q31_t)0x7f861753, (q31_t)0x7f83ea64, (q31_t)0x7f81b88a, (q31_t)0x7f7f81c6, (q31_t)0x7f7d4617, (q31_t)0x7f7b057e, - (q31_t)0x7f78bffb, (q31_t)0x7f76758e, - (q31_t)0x7f742637, (q31_t)0x7f71d1f6, (q31_t)0x7f6f78cb, (q31_t)0x7f6d1ab6, (q31_t)0x7f6ab7b8, (q31_t)0x7f684fd0, - (q31_t)0x7f65e2ff, (q31_t)0x7f637144, - (q31_t)0x7f60faa0, (q31_t)0x7f5e7f13, (q31_t)0x7f5bfe9d, (q31_t)0x7f59793e, (q31_t)0x7f56eef5, (q31_t)0x7f545fc5, - (q31_t)0x7f51cbab, (q31_t)0x7f4f32a9, - (q31_t)0x7f4c94be, (q31_t)0x7f49f1eb, (q31_t)0x7f474a30, (q31_t)0x7f449d8c, (q31_t)0x7f41ec01, (q31_t)0x7f3f358d, - (q31_t)0x7f3c7a31, (q31_t)0x7f39b9ee, - (q31_t)0x7f36f4c3, (q31_t)0x7f342ab1, (q31_t)0x7f315bb7, (q31_t)0x7f2e87d6, (q31_t)0x7f2baf0d, (q31_t)0x7f28d15d, - (q31_t)0x7f25eec7, (q31_t)0x7f230749, - (q31_t)0x7f201ae5, (q31_t)0x7f1d299a, (q31_t)0x7f1a3368, (q31_t)0x7f173850, (q31_t)0x7f143852, (q31_t)0x7f11336d, - (q31_t)0x7f0e29a3, (q31_t)0x7f0b1af2, - (q31_t)0x7f08075c, (q31_t)0x7f04eedf, (q31_t)0x7f01d17d, (q31_t)0x7efeaf36, (q31_t)0x7efb8809, (q31_t)0x7ef85bf7, - (q31_t)0x7ef52b00, (q31_t)0x7ef1f524, - (q31_t)0x7eeeba62, (q31_t)0x7eeb7abc, (q31_t)0x7ee83632, (q31_t)0x7ee4ecc3, (q31_t)0x7ee19e6f, (q31_t)0x7ede4b38, - (q31_t)0x7edaf31c, (q31_t)0x7ed7961c, - (q31_t)0x7ed43438, (q31_t)0x7ed0cd70, (q31_t)0x7ecd61c5, (q31_t)0x7ec9f137, (q31_t)0x7ec67bc5, (q31_t)0x7ec3016f, - (q31_t)0x7ebf8237, (q31_t)0x7ebbfe1c, - (q31_t)0x7eb8751e, (q31_t)0x7eb4e73d, (q31_t)0x7eb1547a, (q31_t)0x7eadbcd4, (q31_t)0x7eaa204c, (q31_t)0x7ea67ee2, - (q31_t)0x7ea2d896, (q31_t)0x7e9f2d68, - (q31_t)0x7e9b7d58, (q31_t)0x7e97c867, (q31_t)0x7e940e94, (q31_t)0x7e904fe0, (q31_t)0x7e8c8c4b, (q31_t)0x7e88c3d5, - (q31_t)0x7e84f67e, (q31_t)0x7e812447, - (q31_t)0x7e7d4d2f, (q31_t)0x7e797136, (q31_t)0x7e75905d, (q31_t)0x7e71aaa4, (q31_t)0x7e6dc00c, (q31_t)0x7e69d093, - (q31_t)0x7e65dc3b, (q31_t)0x7e61e303, - (q31_t)0x7e5de4ec, (q31_t)0x7e59e1f5, (q31_t)0x7e55da20, (q31_t)0x7e51cd6c, (q31_t)0x7e4dbbd9, (q31_t)0x7e49a567, - (q31_t)0x7e458a17, (q31_t)0x7e4169e9, - (q31_t)0x7e3d44dd, (q31_t)0x7e391af3, (q31_t)0x7e34ec2b, (q31_t)0x7e30b885, (q31_t)0x7e2c8002, (q31_t)0x7e2842a2, - (q31_t)0x7e240064, (q31_t)0x7e1fb94a, - (q31_t)0x7e1b6d53, (q31_t)0x7e171c7f, (q31_t)0x7e12c6ce, (q31_t)0x7e0e6c42, (q31_t)0x7e0a0cd9, (q31_t)0x7e05a894, - (q31_t)0x7e013f74, (q31_t)0x7dfcd178, - (q31_t)0x7df85ea0, (q31_t)0x7df3e6ee, (q31_t)0x7def6a60, (q31_t)0x7deae8f7, (q31_t)0x7de662b3, (q31_t)0x7de1d795, - (q31_t)0x7ddd479d, (q31_t)0x7dd8b2ca, - (q31_t)0x7dd4191d, (q31_t)0x7dcf7a96, (q31_t)0x7dcad736, (q31_t)0x7dc62efc, (q31_t)0x7dc181e8, (q31_t)0x7dbccffc, - (q31_t)0x7db81936, (q31_t)0x7db35d98, - (q31_t)0x7dae9d21, (q31_t)0x7da9d7d2, (q31_t)0x7da50dab, (q31_t)0x7da03eab, (q31_t)0x7d9b6ad3, (q31_t)0x7d969224, - (q31_t)0x7d91b49e, (q31_t)0x7d8cd240, - (q31_t)0x7d87eb0a, (q31_t)0x7d82fefe, (q31_t)0x7d7e0e1c, (q31_t)0x7d791862, (q31_t)0x7d741dd2, (q31_t)0x7d6f1e6c, - (q31_t)0x7d6a1a31, (q31_t)0x7d65111f, - (q31_t)0x7d600338, (q31_t)0x7d5af07b, (q31_t)0x7d55d8e9, (q31_t)0x7d50bc82, (q31_t)0x7d4b9b46, (q31_t)0x7d467536, - (q31_t)0x7d414a51, (q31_t)0x7d3c1a98, - (q31_t)0x7d36e60b, (q31_t)0x7d31acaa, (q31_t)0x7d2c6e76, (q31_t)0x7d272b6e, (q31_t)0x7d21e393, (q31_t)0x7d1c96e5, - (q31_t)0x7d174564, (q31_t)0x7d11ef11, - (q31_t)0x7d0c93eb, (q31_t)0x7d0733f3, (q31_t)0x7d01cf29, (q31_t)0x7cfc658d, (q31_t)0x7cf6f720, (q31_t)0x7cf183e1, - (q31_t)0x7cec0bd1, (q31_t)0x7ce68ef0, - (q31_t)0x7ce10d3f, (q31_t)0x7cdb86bd, (q31_t)0x7cd5fb6a, (q31_t)0x7cd06b48, (q31_t)0x7ccad656, (q31_t)0x7cc53c94, - (q31_t)0x7cbf9e03, (q31_t)0x7cb9faa2, - (q31_t)0x7cb45272, (q31_t)0x7caea574, (q31_t)0x7ca8f3a7, (q31_t)0x7ca33d0c, (q31_t)0x7c9d81a3, (q31_t)0x7c97c16b, - (q31_t)0x7c91fc66, (q31_t)0x7c8c3294, - (q31_t)0x7c8663f4, (q31_t)0x7c809088, (q31_t)0x7c7ab84e, (q31_t)0x7c74db48, (q31_t)0x7c6ef976, (q31_t)0x7c6912d7, - (q31_t)0x7c63276d, (q31_t)0x7c5d3737, - (q31_t)0x7c574236, (q31_t)0x7c514869, (q31_t)0x7c4b49d2, (q31_t)0x7c45466f, (q31_t)0x7c3f3e42, (q31_t)0x7c39314b, - (q31_t)0x7c331f8a, (q31_t)0x7c2d08ff, - (q31_t)0x7c26edab, (q31_t)0x7c20cd8d, (q31_t)0x7c1aa8a6, (q31_t)0x7c147ef6, (q31_t)0x7c0e507e, (q31_t)0x7c081d3d, - (q31_t)0x7c01e534, (q31_t)0x7bfba863, - (q31_t)0x7bf566cb, (q31_t)0x7bef206b, (q31_t)0x7be8d544, (q31_t)0x7be28556, (q31_t)0x7bdc30a1, (q31_t)0x7bd5d726, - (q31_t)0x7bcf78e5, (q31_t)0x7bc915dd, - (q31_t)0x7bc2ae10, (q31_t)0x7bbc417e, (q31_t)0x7bb5d026, (q31_t)0x7baf5a09, (q31_t)0x7ba8df28, (q31_t)0x7ba25f82, - (q31_t)0x7b9bdb18, (q31_t)0x7b9551ea, - (q31_t)0x7b8ec3f8, (q31_t)0x7b883143, (q31_t)0x7b8199ca, (q31_t)0x7b7afd8f, (q31_t)0x7b745c91, (q31_t)0x7b6db6d0, - (q31_t)0x7b670c4d, (q31_t)0x7b605d09, - (q31_t)0x7b59a902, (q31_t)0x7b52f03a, (q31_t)0x7b4c32b1, (q31_t)0x7b457068, (q31_t)0x7b3ea95d, (q31_t)0x7b37dd92, - (q31_t)0x7b310d07, (q31_t)0x7b2a37bc, - (q31_t)0x7b235db2, (q31_t)0x7b1c7ee8, (q31_t)0x7b159b5f, (q31_t)0x7b0eb318, (q31_t)0x7b07c612, (q31_t)0x7b00d44d, - (q31_t)0x7af9ddcb, (q31_t)0x7af2e28b, - (q31_t)0x7aebe28d, (q31_t)0x7ae4ddd2, (q31_t)0x7addd45b, (q31_t)0x7ad6c626, (q31_t)0x7acfb336, (q31_t)0x7ac89b89, - (q31_t)0x7ac17f20, (q31_t)0x7aba5dfc, - (q31_t)0x7ab3381d, (q31_t)0x7aac0d82, (q31_t)0x7aa4de2d, (q31_t)0x7a9daa1d, (q31_t)0x7a967153, (q31_t)0x7a8f33d0, - (q31_t)0x7a87f192, (q31_t)0x7a80aa9c, - (q31_t)0x7a795eec, (q31_t)0x7a720e84, (q31_t)0x7a6ab963, (q31_t)0x7a635f8a, (q31_t)0x7a5c00f9, (q31_t)0x7a549db0, - (q31_t)0x7a4d35b0, (q31_t)0x7a45c8f9, - (q31_t)0x7a3e578b, (q31_t)0x7a36e166, (q31_t)0x7a2f668c, (q31_t)0x7a27e6fb, (q31_t)0x7a2062b5, (q31_t)0x7a18d9b9, - (q31_t)0x7a114c09, (q31_t)0x7a09b9a4, - (q31_t)0x7a02228a, (q31_t)0x79fa86bc, (q31_t)0x79f2e63a, (q31_t)0x79eb4105, (q31_t)0x79e3971c, (q31_t)0x79dbe880, - (q31_t)0x79d43532, (q31_t)0x79cc7d31, - (q31_t)0x79c4c07e, (q31_t)0x79bcff19, (q31_t)0x79b53903, (q31_t)0x79ad6e3c, (q31_t)0x79a59ec3, (q31_t)0x799dca9a, - (q31_t)0x7995f1c1, (q31_t)0x798e1438, - (q31_t)0x798631ff, (q31_t)0x797e4b16, (q31_t)0x79765f7f, (q31_t)0x796e6f39, (q31_t)0x79667a44, (q31_t)0x795e80a1, - (q31_t)0x79568250, (q31_t)0x794e7f52, - (q31_t)0x794677a6, (q31_t)0x793e6b4e, (q31_t)0x79365a49, (q31_t)0x792e4497, (q31_t)0x79262a3a, (q31_t)0x791e0b31, - (q31_t)0x7915e77c, (q31_t)0x790dbf1d, - (q31_t)0x79059212, (q31_t)0x78fd605d, (q31_t)0x78f529fe, (q31_t)0x78eceef6, (q31_t)0x78e4af44, (q31_t)0x78dc6ae8, - (q31_t)0x78d421e4, (q31_t)0x78cbd437, - (q31_t)0x78c381e2, (q31_t)0x78bb2ae5, (q31_t)0x78b2cf41, (q31_t)0x78aa6ef5, (q31_t)0x78a20a03, (q31_t)0x7899a06a, - (q31_t)0x7891322a, (q31_t)0x7888bf45, - (q31_t)0x788047ba, (q31_t)0x7877cb89, (q31_t)0x786f4ab4, (q31_t)0x7866c53a, (q31_t)0x785e3b1c, (q31_t)0x7855ac5a, - (q31_t)0x784d18f4, (q31_t)0x784480ea, - (q31_t)0x783be43e, (q31_t)0x783342ef, (q31_t)0x782a9cfe, (q31_t)0x7821f26b, (q31_t)0x78194336, (q31_t)0x78108f60, - (q31_t)0x7807d6e9, (q31_t)0x77ff19d1, - (q31_t)0x77f65819, (q31_t)0x77ed91c0, (q31_t)0x77e4c6c9, (q31_t)0x77dbf732, (q31_t)0x77d322fc, (q31_t)0x77ca4a27, - (q31_t)0x77c16cb4, (q31_t)0x77b88aa3, - (q31_t)0x77afa3f5, (q31_t)0x77a6b8a9, (q31_t)0x779dc8c0, (q31_t)0x7794d43b, (q31_t)0x778bdb19, (q31_t)0x7782dd5c, - (q31_t)0x7779db03, (q31_t)0x7770d40f, - (q31_t)0x7767c880, (q31_t)0x775eb857, (q31_t)0x7755a394, (q31_t)0x774c8a36, (q31_t)0x77436c40, (q31_t)0x773a49b0, - (q31_t)0x77312287, (q31_t)0x7727f6c6, - (q31_t)0x771ec66e, (q31_t)0x7715917d, (q31_t)0x770c57f5, (q31_t)0x770319d6, (q31_t)0x76f9d721, (q31_t)0x76f08fd5, - (q31_t)0x76e743f4, (q31_t)0x76ddf37c, - (q31_t)0x76d49e70, (q31_t)0x76cb44cf, (q31_t)0x76c1e699, (q31_t)0x76b883d0, (q31_t)0x76af1c72, (q31_t)0x76a5b082, - (q31_t)0x769c3ffe, (q31_t)0x7692cae8, - (q31_t)0x7689513f, (q31_t)0x767fd304, (q31_t)0x76765038, (q31_t)0x766cc8db, (q31_t)0x76633ced, (q31_t)0x7659ac6f, - (q31_t)0x76501760, (q31_t)0x76467dc2, - (q31_t)0x763cdf94, (q31_t)0x76333cd8, (q31_t)0x7629958c, (q31_t)0x761fe9b3, (q31_t)0x7616394c, (q31_t)0x760c8457, - (q31_t)0x7602cad5, (q31_t)0x75f90cc7, - (q31_t)0x75ef4a2c, (q31_t)0x75e58305, (q31_t)0x75dbb753, (q31_t)0x75d1e715, (q31_t)0x75c8124d, (q31_t)0x75be38fa, - (q31_t)0x75b45b1d, (q31_t)0x75aa78b6, - (q31_t)0x75a091c6, (q31_t)0x7596a64d, (q31_t)0x758cb64c, (q31_t)0x7582c1c2, (q31_t)0x7578c8b0, (q31_t)0x756ecb18, - (q31_t)0x7564c8f8, (q31_t)0x755ac251, - (q31_t)0x7550b725, (q31_t)0x7546a772, (q31_t)0x753c933a, (q31_t)0x75327a7d, (q31_t)0x75285d3b, (q31_t)0x751e3b75, - (q31_t)0x7514152b, (q31_t)0x7509ea5d, - (q31_t)0x74ffbb0d, (q31_t)0x74f58739, (q31_t)0x74eb4ee3, (q31_t)0x74e1120c, (q31_t)0x74d6d0b2, (q31_t)0x74cc8ad8, - (q31_t)0x74c2407d, (q31_t)0x74b7f1a1, - (q31_t)0x74ad9e46, (q31_t)0x74a3466b, (q31_t)0x7498ea11, (q31_t)0x748e8938, (q31_t)0x748423e0, (q31_t)0x7479ba0b, - (q31_t)0x746f4bb8, (q31_t)0x7464d8e8, - (q31_t)0x745a619b, (q31_t)0x744fe5d2, (q31_t)0x7445658d, (q31_t)0x743ae0cc, (q31_t)0x74305790, (q31_t)0x7425c9da, - (q31_t)0x741b37a9, (q31_t)0x7410a0fe, - (q31_t)0x740605d9, (q31_t)0x73fb663c, (q31_t)0x73f0c226, (q31_t)0x73e61997, (q31_t)0x73db6c91, (q31_t)0x73d0bb13, - (q31_t)0x73c6051f, (q31_t)0x73bb4ab3, - (q31_t)0x73b08bd1, (q31_t)0x73a5c87a, (q31_t)0x739b00ad, (q31_t)0x7390346b, (q31_t)0x738563b5, (q31_t)0x737a8e8a, - (q31_t)0x736fb4ec, (q31_t)0x7364d6da, - (q31_t)0x7359f456, (q31_t)0x734f0d5f, (q31_t)0x734421f6, (q31_t)0x7339321b, (q31_t)0x732e3dcf, (q31_t)0x73234512, - (q31_t)0x731847e5, (q31_t)0x730d4648, - (q31_t)0x7302403c, (q31_t)0x72f735c0, (q31_t)0x72ec26d6, (q31_t)0x72e1137d, (q31_t)0x72d5fbb7, (q31_t)0x72cadf83, - (q31_t)0x72bfbee3, (q31_t)0x72b499d6, - (q31_t)0x72a9705c, (q31_t)0x729e4277, (q31_t)0x72931027, (q31_t)0x7287d96c, (q31_t)0x727c9e47, (q31_t)0x72715eb8, - (q31_t)0x72661abf, (q31_t)0x725ad25d, - (q31_t)0x724f8593, (q31_t)0x72443460, (q31_t)0x7238dec5, (q31_t)0x722d84c4, (q31_t)0x7222265b, (q31_t)0x7216c38c, - (q31_t)0x720b5c57, (q31_t)0x71fff0bc, - (q31_t)0x71f480bc, (q31_t)0x71e90c57, (q31_t)0x71dd938f, (q31_t)0x71d21662, (q31_t)0x71c694d2, (q31_t)0x71bb0edf, - (q31_t)0x71af848a, (q31_t)0x71a3f5d2, - (q31_t)0x719862b9, (q31_t)0x718ccb3f, (q31_t)0x71812f65, (q31_t)0x71758f29, (q31_t)0x7169ea8f, (q31_t)0x715e4194, - (q31_t)0x7152943b, (q31_t)0x7146e284, - (q31_t)0x713b2c6e, (q31_t)0x712f71fb, (q31_t)0x7123b32b, (q31_t)0x7117effe, (q31_t)0x710c2875, (q31_t)0x71005c90, - (q31_t)0x70f48c50, (q31_t)0x70e8b7b5, - (q31_t)0x70dcdec0, (q31_t)0x70d10171, (q31_t)0x70c51fc8, (q31_t)0x70b939c7, (q31_t)0x70ad4f6d, (q31_t)0x70a160ba, - (q31_t)0x70956db1, (q31_t)0x70897650, - (q31_t)0x707d7a98, (q31_t)0x70717a8a, (q31_t)0x70657626, (q31_t)0x70596d6d, (q31_t)0x704d6060, (q31_t)0x70414efd, - (q31_t)0x70353947, (q31_t)0x70291f3e, - (q31_t)0x701d00e1, (q31_t)0x7010de32, (q31_t)0x7004b731, (q31_t)0x6ff88bde, (q31_t)0x6fec5c3b, (q31_t)0x6fe02846, - (q31_t)0x6fd3f001, (q31_t)0x6fc7b36d, - (q31_t)0x6fbb728a, (q31_t)0x6faf2d57, (q31_t)0x6fa2e3d7, (q31_t)0x6f969608, (q31_t)0x6f8a43ed, (q31_t)0x6f7ded84, - (q31_t)0x6f7192cf, (q31_t)0x6f6533ce, - (q31_t)0x6f58d082, (q31_t)0x6f4c68eb, (q31_t)0x6f3ffd09, (q31_t)0x6f338cde, (q31_t)0x6f271868, (q31_t)0x6f1a9faa, - (q31_t)0x6f0e22a3, (q31_t)0x6f01a155, - (q31_t)0x6ef51bbe, (q31_t)0x6ee891e1, (q31_t)0x6edc03bc, (q31_t)0x6ecf7152, (q31_t)0x6ec2daa2, (q31_t)0x6eb63fad, - (q31_t)0x6ea9a073, (q31_t)0x6e9cfcf5, - (q31_t)0x6e905534, (q31_t)0x6e83a92f, (q31_t)0x6e76f8e7, (q31_t)0x6e6a445d, (q31_t)0x6e5d8b91, (q31_t)0x6e50ce84, - (q31_t)0x6e440d37, (q31_t)0x6e3747a9, - (q31_t)0x6e2a7ddb, (q31_t)0x6e1dafce, (q31_t)0x6e10dd82, (q31_t)0x6e0406f8, (q31_t)0x6df72c30, (q31_t)0x6dea4d2b, - (q31_t)0x6ddd69e9, (q31_t)0x6dd0826a, - (q31_t)0x6dc396b0, (q31_t)0x6db6a6ba, (q31_t)0x6da9b28a, (q31_t)0x6d9cba1f, (q31_t)0x6d8fbd7a, (q31_t)0x6d82bc9d, - (q31_t)0x6d75b786, (q31_t)0x6d68ae37, - (q31_t)0x6d5ba0b0, (q31_t)0x6d4e8ef2, (q31_t)0x6d4178fd, (q31_t)0x6d345ed1, (q31_t)0x6d274070, (q31_t)0x6d1a1dda, - (q31_t)0x6d0cf70f, (q31_t)0x6cffcc0f, - (q31_t)0x6cf29cdc, (q31_t)0x6ce56975, (q31_t)0x6cd831dc, (q31_t)0x6ccaf610, (q31_t)0x6cbdb613, (q31_t)0x6cb071e4, - (q31_t)0x6ca32985, (q31_t)0x6c95dcf6, - (q31_t)0x6c888c36, (q31_t)0x6c7b3748, (q31_t)0x6c6dde2b, (q31_t)0x6c6080e0, (q31_t)0x6c531f67, (q31_t)0x6c45b9c1, - (q31_t)0x6c384fef, (q31_t)0x6c2ae1f0, - (q31_t)0x6c1d6fc6, (q31_t)0x6c0ff971, (q31_t)0x6c027ef1, (q31_t)0x6bf50047, (q31_t)0x6be77d74, (q31_t)0x6bd9f677, - (q31_t)0x6bcc6b53, (q31_t)0x6bbedc06, - (q31_t)0x6bb14892, (q31_t)0x6ba3b0f7, (q31_t)0x6b961536, (q31_t)0x6b88754f, (q31_t)0x6b7ad142, (q31_t)0x6b6d2911, - (q31_t)0x6b5f7cbc, (q31_t)0x6b51cc42, - (q31_t)0x6b4417a6, (q31_t)0x6b365ee7, (q31_t)0x6b28a206, (q31_t)0x6b1ae103, (q31_t)0x6b0d1bdf, (q31_t)0x6aff529a, - (q31_t)0x6af18536, (q31_t)0x6ae3b3b2, - (q31_t)0x6ad5de0f, (q31_t)0x6ac8044e, (q31_t)0x6aba266e, (q31_t)0x6aac4472, (q31_t)0x6a9e5e58, (q31_t)0x6a907423, - (q31_t)0x6a8285d1, (q31_t)0x6a749365, - (q31_t)0x6a669cdd, (q31_t)0x6a58a23c, (q31_t)0x6a4aa381, (q31_t)0x6a3ca0ad, (q31_t)0x6a2e99c0, (q31_t)0x6a208ebb, - (q31_t)0x6a127f9f, (q31_t)0x6a046c6c, - (q31_t)0x69f65523, (q31_t)0x69e839c4, (q31_t)0x69da1a50, (q31_t)0x69cbf6c7, (q31_t)0x69bdcf29, (q31_t)0x69afa378, - (q31_t)0x69a173b5, (q31_t)0x69933fde, - (q31_t)0x698507f6, (q31_t)0x6976cbfc, (q31_t)0x69688bf1, (q31_t)0x695a47d6, (q31_t)0x694bffab, (q31_t)0x693db371, - (q31_t)0x692f6328, (q31_t)0x69210ed1, - (q31_t)0x6912b66c, (q31_t)0x690459fb, (q31_t)0x68f5f97d, (q31_t)0x68e794f3, (q31_t)0x68d92c5d, (q31_t)0x68cabfbd, - (q31_t)0x68bc4f13, (q31_t)0x68adda5f, - (q31_t)0x689f61a1, (q31_t)0x6890e4dc, (q31_t)0x6882640e, (q31_t)0x6873df38, (q31_t)0x6865565c, (q31_t)0x6856c979, - (q31_t)0x68483891, (q31_t)0x6839a3a4, - (q31_t)0x682b0ab1, (q31_t)0x681c6dbb, (q31_t)0x680dccc1, (q31_t)0x67ff27c4, (q31_t)0x67f07ec5, (q31_t)0x67e1d1c4, - (q31_t)0x67d320c1, (q31_t)0x67c46bbe, - (q31_t)0x67b5b2bb, (q31_t)0x67a6f5b8, (q31_t)0x679834b6, (q31_t)0x67896fb6, (q31_t)0x677aa6b8, (q31_t)0x676bd9bd, - (q31_t)0x675d08c4, (q31_t)0x674e33d0, - (q31_t)0x673f5ae0, (q31_t)0x67307df5, (q31_t)0x67219d10, (q31_t)0x6712b831, (q31_t)0x6703cf58, (q31_t)0x66f4e287, - (q31_t)0x66e5f1be, (q31_t)0x66d6fcfd, - (q31_t)0x66c80445, (q31_t)0x66b90797, (q31_t)0x66aa06f3, (q31_t)0x669b0259, (q31_t)0x668bf9cb, (q31_t)0x667ced49, - (q31_t)0x666ddcd3, (q31_t)0x665ec86b, - (q31_t)0x664fb010, (q31_t)0x664093c3, (q31_t)0x66317385, (q31_t)0x66224f56, (q31_t)0x66132738, (q31_t)0x6603fb2a, - (q31_t)0x65f4cb2d, (q31_t)0x65e59742, - (q31_t)0x65d65f69, (q31_t)0x65c723a3, (q31_t)0x65b7e3f1, (q31_t)0x65a8a052, (q31_t)0x659958c9, (q31_t)0x658a0d54, - (q31_t)0x657abdf6, (q31_t)0x656b6aae, - (q31_t)0x655c137d, (q31_t)0x654cb863, (q31_t)0x653d5962, (q31_t)0x652df679, (q31_t)0x651e8faa, (q31_t)0x650f24f5, - (q31_t)0x64ffb65b, (q31_t)0x64f043dc, - (q31_t)0x64e0cd78, (q31_t)0x64d15331, (q31_t)0x64c1d507, (q31_t)0x64b252fa, (q31_t)0x64a2cd0c, (q31_t)0x6493433c, - (q31_t)0x6483b58c, (q31_t)0x647423fb, - (q31_t)0x64648e8c, (q31_t)0x6454f53d, (q31_t)0x64455810, (q31_t)0x6435b706, (q31_t)0x6426121e, (q31_t)0x6416695a, - (q31_t)0x6406bcba, (q31_t)0x63f70c3f, - (q31_t)0x63e757ea, (q31_t)0x63d79fba, (q31_t)0x63c7e3b1, (q31_t)0x63b823cf, (q31_t)0x63a86015, (q31_t)0x63989884, - (q31_t)0x6388cd1b, (q31_t)0x6378fddc, - (q31_t)0x63692ac7, (q31_t)0x635953dd, (q31_t)0x6349791f, (q31_t)0x63399a8d, (q31_t)0x6329b827, (q31_t)0x6319d1ef, - (q31_t)0x6309e7e4, (q31_t)0x62f9fa09, - (q31_t)0x62ea085c, (q31_t)0x62da12df, (q31_t)0x62ca1992, (q31_t)0x62ba1c77, (q31_t)0x62aa1b8d, (q31_t)0x629a16d5, - (q31_t)0x628a0e50, (q31_t)0x627a01fe, - (q31_t)0x6269f1e1, (q31_t)0x6259ddf8, (q31_t)0x6249c645, (q31_t)0x6239aac7, (q31_t)0x62298b81, (q31_t)0x62196871, - (q31_t)0x62094199, (q31_t)0x61f916f9, - (q31_t)0x61e8e893, (q31_t)0x61d8b666, (q31_t)0x61c88074, (q31_t)0x61b846bc, (q31_t)0x61a80940, (q31_t)0x6197c800, - (q31_t)0x618782fd, (q31_t)0x61773a37, - (q31_t)0x6166edb0, (q31_t)0x61569d67, (q31_t)0x6146495d, (q31_t)0x6135f193, (q31_t)0x6125960a, (q31_t)0x611536c2, - (q31_t)0x6104d3bc, (q31_t)0x60f46cf9, - (q31_t)0x60e40278, (q31_t)0x60d3943b, (q31_t)0x60c32243, (q31_t)0x60b2ac8f, (q31_t)0x60a23322, (q31_t)0x6091b5fa, - (q31_t)0x60813519, (q31_t)0x6070b080, - (q31_t)0x6060282f, (q31_t)0x604f9c27, (q31_t)0x603f0c69, (q31_t)0x602e78f4, (q31_t)0x601de1ca, (q31_t)0x600d46ec, - (q31_t)0x5ffca859, (q31_t)0x5fec0613, - (q31_t)0x5fdb601b, (q31_t)0x5fcab670, (q31_t)0x5fba0914, (q31_t)0x5fa95807, (q31_t)0x5f98a34a, (q31_t)0x5f87eade, - (q31_t)0x5f772ec2, (q31_t)0x5f666ef9, - (q31_t)0x5f55ab82, (q31_t)0x5f44e45e, (q31_t)0x5f34198e, (q31_t)0x5f234b12, (q31_t)0x5f1278eb, (q31_t)0x5f01a31a, - (q31_t)0x5ef0c99f, (q31_t)0x5edfec7b, - (q31_t)0x5ecf0baf, (q31_t)0x5ebe273b, (q31_t)0x5ead3f1f, (q31_t)0x5e9c535e, (q31_t)0x5e8b63f7, (q31_t)0x5e7a70ea, - (q31_t)0x5e697a39, (q31_t)0x5e587fe5, - (q31_t)0x5e4781ed, (q31_t)0x5e368053, (q31_t)0x5e257b17, (q31_t)0x5e147239, (q31_t)0x5e0365bb, (q31_t)0x5df2559e, - (q31_t)0x5de141e1, (q31_t)0x5dd02a85, - (q31_t)0x5dbf0f8c, (q31_t)0x5dadf0f5, (q31_t)0x5d9ccec2, (q31_t)0x5d8ba8f3, (q31_t)0x5d7a7f88, (q31_t)0x5d695283, - (q31_t)0x5d5821e4, (q31_t)0x5d46edac, - (q31_t)0x5d35b5db, (q31_t)0x5d247a72, (q31_t)0x5d133b72, (q31_t)0x5d01f8dc, (q31_t)0x5cf0b2af, (q31_t)0x5cdf68ed, - (q31_t)0x5cce1b97, (q31_t)0x5cbccaac, - (q31_t)0x5cab762f, (q31_t)0x5c9a1e1e, (q31_t)0x5c88c27c, (q31_t)0x5c776348, (q31_t)0x5c660084, (q31_t)0x5c549a30, - (q31_t)0x5c43304d, (q31_t)0x5c31c2db, - (q31_t)0x5c2051db, (q31_t)0x5c0edd4e, (q31_t)0x5bfd6534, (q31_t)0x5bebe98e, (q31_t)0x5bda6a5d, (q31_t)0x5bc8e7a2, - (q31_t)0x5bb7615d, (q31_t)0x5ba5d78e, - (q31_t)0x5b944a37, (q31_t)0x5b82b958, (q31_t)0x5b7124f2, (q31_t)0x5b5f8d06, (q31_t)0x5b4df193, (q31_t)0x5b3c529c, - (q31_t)0x5b2ab020, (q31_t)0x5b190a20, - (q31_t)0x5b07609d, (q31_t)0x5af5b398, (q31_t)0x5ae40311, (q31_t)0x5ad24f09, (q31_t)0x5ac09781, (q31_t)0x5aaedc78, - (q31_t)0x5a9d1df1, (q31_t)0x5a8b5bec, - (q31_t)0x5a799669, (q31_t)0x5a67cd69, (q31_t)0x5a5600ec, (q31_t)0x5a4430f5, (q31_t)0x5a325d82, (q31_t)0x5a208695, - (q31_t)0x5a0eac2e, (q31_t)0x59fcce4f, - (q31_t)0x59eaecf8, (q31_t)0x59d90829, (q31_t)0x59c71fe3, (q31_t)0x59b53427, (q31_t)0x59a344f6, (q31_t)0x59915250, - (q31_t)0x597f5c36, (q31_t)0x596d62a9, - (q31_t)0x595b65aa, (q31_t)0x59496538, (q31_t)0x59376155, (q31_t)0x59255a02, (q31_t)0x59134f3e, (q31_t)0x5901410c, - (q31_t)0x58ef2f6b, (q31_t)0x58dd1a5d, - (q31_t)0x58cb01e1, (q31_t)0x58b8e5f9, (q31_t)0x58a6c6a5, (q31_t)0x5894a3e7, (q31_t)0x58827dbe, (q31_t)0x5870542c, - (q31_t)0x585e2730, (q31_t)0x584bf6cd, - (q31_t)0x5839c302, (q31_t)0x58278bd1, (q31_t)0x58155139, (q31_t)0x5803133c, (q31_t)0x57f0d1da, (q31_t)0x57de8d15, - (q31_t)0x57cc44ec, (q31_t)0x57b9f960, - (q31_t)0x57a7aa73, (q31_t)0x57955825, (q31_t)0x57830276, (q31_t)0x5770a968, (q31_t)0x575e4cfa, (q31_t)0x574bed2f, - (q31_t)0x57398a05, (q31_t)0x5727237f, - (q31_t)0x5714b99d, (q31_t)0x57024c5f, (q31_t)0x56efdbc7, (q31_t)0x56dd67d4, (q31_t)0x56caf088, (q31_t)0x56b875e4, - (q31_t)0x56a5f7e7, (q31_t)0x56937694, - (q31_t)0x5680f1ea, (q31_t)0x566e69ea, (q31_t)0x565bde95, (q31_t)0x56494fec, (q31_t)0x5636bdef, (q31_t)0x5624289f, - (q31_t)0x56118ffe, (q31_t)0x55fef40a, - (q31_t)0x55ec54c6, (q31_t)0x55d9b232, (q31_t)0x55c70c4f, (q31_t)0x55b4631d, (q31_t)0x55a1b69d, (q31_t)0x558f06d0, - (q31_t)0x557c53b6, (q31_t)0x55699d51, - (q31_t)0x5556e3a1, (q31_t)0x554426a7, (q31_t)0x55316663, (q31_t)0x551ea2d6, (q31_t)0x550bdc01, (q31_t)0x54f911e5, - (q31_t)0x54e64482, (q31_t)0x54d373d9, - (q31_t)0x54c09feb, (q31_t)0x54adc8b8, (q31_t)0x549aee42, (q31_t)0x54881089, (q31_t)0x54752f8d, (q31_t)0x54624b50, - (q31_t)0x544f63d2, (q31_t)0x543c7914, - (q31_t)0x54298b17, (q31_t)0x541699db, (q31_t)0x5403a561, (q31_t)0x53f0adaa, (q31_t)0x53ddb2b6, (q31_t)0x53cab486, - (q31_t)0x53b7b31c, (q31_t)0x53a4ae77, - (q31_t)0x5391a699, (q31_t)0x537e9b82, (q31_t)0x536b8d33, (q31_t)0x53587bad, (q31_t)0x534566f0, (q31_t)0x53324efd, - (q31_t)0x531f33d5, (q31_t)0x530c1579, - (q31_t)0x52f8f3e9, (q31_t)0x52e5cf27, (q31_t)0x52d2a732, (q31_t)0x52bf7c0b, (q31_t)0x52ac4db4, (q31_t)0x52991c2d, - (q31_t)0x5285e777, (q31_t)0x5272af92, - (q31_t)0x525f7480, (q31_t)0x524c3640, (q31_t)0x5238f4d4, (q31_t)0x5225b03d, (q31_t)0x5212687b, (q31_t)0x51ff1d8f, - (q31_t)0x51ebcf7a, (q31_t)0x51d87e3c, - (q31_t)0x51c529d7, (q31_t)0x51b1d24a, (q31_t)0x519e7797, (q31_t)0x518b19bf, (q31_t)0x5177b8c2, (q31_t)0x516454a0, - (q31_t)0x5150ed5c, (q31_t)0x513d82f4, - (q31_t)0x512a156b, (q31_t)0x5116a4c1, (q31_t)0x510330f7, (q31_t)0x50efba0d, (q31_t)0x50dc4005, (q31_t)0x50c8c2de, - (q31_t)0x50b5429a, (q31_t)0x50a1bf39, - (q31_t)0x508e38bd, (q31_t)0x507aaf25, (q31_t)0x50672273, (q31_t)0x505392a8, (q31_t)0x503fffc4, (q31_t)0x502c69c8, - (q31_t)0x5018d0b4, (q31_t)0x5005348a, - (q31_t)0x4ff1954b, (q31_t)0x4fddf2f6, (q31_t)0x4fca4d8d, (q31_t)0x4fb6a510, (q31_t)0x4fa2f981, (q31_t)0x4f8f4ae0, - (q31_t)0x4f7b992d, (q31_t)0x4f67e46a, - (q31_t)0x4f542c98, (q31_t)0x4f4071b6, (q31_t)0x4f2cb3c7, (q31_t)0x4f18f2c9, (q31_t)0x4f052ec0, (q31_t)0x4ef167aa, - (q31_t)0x4edd9d89, (q31_t)0x4ec9d05e, - (q31_t)0x4eb60029, (q31_t)0x4ea22ceb, (q31_t)0x4e8e56a5, (q31_t)0x4e7a7d58, (q31_t)0x4e66a105, (q31_t)0x4e52c1ab, - (q31_t)0x4e3edf4d, (q31_t)0x4e2af9ea, - (q31_t)0x4e171184, (q31_t)0x4e03261b, (q31_t)0x4def37b0, (q31_t)0x4ddb4644, (q31_t)0x4dc751d8, (q31_t)0x4db35a6c, - (q31_t)0x4d9f6001, (q31_t)0x4d8b6298, - (q31_t)0x4d776231, (q31_t)0x4d635ece, (q31_t)0x4d4f5870, (q31_t)0x4d3b4f16, (q31_t)0x4d2742c2, (q31_t)0x4d133374, - (q31_t)0x4cff212e, (q31_t)0x4ceb0bf0, - (q31_t)0x4cd6f3bb, (q31_t)0x4cc2d88f, (q31_t)0x4caeba6e, (q31_t)0x4c9a9958, (q31_t)0x4c86754e, (q31_t)0x4c724e50, - (q31_t)0x4c5e2460, (q31_t)0x4c49f77f, - (q31_t)0x4c35c7ac, (q31_t)0x4c2194e9, (q31_t)0x4c0d5f37, (q31_t)0x4bf92697, (q31_t)0x4be4eb08, (q31_t)0x4bd0ac8d, - (q31_t)0x4bbc6b25, (q31_t)0x4ba826d1, - (q31_t)0x4b93df93, (q31_t)0x4b7f956b, (q31_t)0x4b6b485a, (q31_t)0x4b56f861, (q31_t)0x4b42a580, (q31_t)0x4b2e4fb8, - (q31_t)0x4b19f70a, (q31_t)0x4b059b77, - (q31_t)0x4af13d00, (q31_t)0x4adcdba5, (q31_t)0x4ac87767, (q31_t)0x4ab41046, (q31_t)0x4a9fa645, (q31_t)0x4a8b3963, - (q31_t)0x4a76c9a2, (q31_t)0x4a625701, - (q31_t)0x4a4de182, (q31_t)0x4a396926, (q31_t)0x4a24edee, (q31_t)0x4a106fda, (q31_t)0x49fbeeea, (q31_t)0x49e76b21, - (q31_t)0x49d2e47e, (q31_t)0x49be5b02, - (q31_t)0x49a9ceaf, (q31_t)0x49953f84, (q31_t)0x4980ad84, (q31_t)0x496c18ae, (q31_t)0x49578103, (q31_t)0x4942e684, - (q31_t)0x492e4933, (q31_t)0x4919a90f, - (q31_t)0x4905061a, (q31_t)0x48f06054, (q31_t)0x48dbb7be, (q31_t)0x48c70c59, (q31_t)0x48b25e25, (q31_t)0x489dad25, - (q31_t)0x4888f957, (q31_t)0x487442be, - (q31_t)0x485f8959, (q31_t)0x484acd2a, (q31_t)0x48360e32, (q31_t)0x48214c71, (q31_t)0x480c87e8, (q31_t)0x47f7c099, - (q31_t)0x47e2f682, (q31_t)0x47ce29a7, - (q31_t)0x47b95a06, (q31_t)0x47a487a2, (q31_t)0x478fb27b, (q31_t)0x477ada91, (q31_t)0x4765ffe6, (q31_t)0x4751227a, - (q31_t)0x473c424e, (q31_t)0x47275f63, - (q31_t)0x471279ba, (q31_t)0x46fd9154, (q31_t)0x46e8a631, (q31_t)0x46d3b852, (q31_t)0x46bec7b8, (q31_t)0x46a9d464, - (q31_t)0x4694de56, (q31_t)0x467fe590, - (q31_t)0x466aea12, (q31_t)0x4655ebdd, (q31_t)0x4640eaf2, (q31_t)0x462be751, (q31_t)0x4616e0fc, (q31_t)0x4601d7f3, - (q31_t)0x45eccc37, (q31_t)0x45d7bdc9, - (q31_t)0x45c2acaa, (q31_t)0x45ad98da, (q31_t)0x4598825a, (q31_t)0x4583692c, (q31_t)0x456e4d4f, (q31_t)0x45592ec6, - (q31_t)0x45440d90, (q31_t)0x452ee9ae, - (q31_t)0x4519c321, (q31_t)0x450499eb, (q31_t)0x44ef6e0b, (q31_t)0x44da3f83, (q31_t)0x44c50e53, (q31_t)0x44afda7d, - (q31_t)0x449aa400, (q31_t)0x44856adf, - (q31_t)0x44702f19, (q31_t)0x445af0b0, (q31_t)0x4445afa4, (q31_t)0x44306bf6, (q31_t)0x441b25a8, (q31_t)0x4405dcb9, - (q31_t)0x43f0912b, (q31_t)0x43db42fe, - (q31_t)0x43c5f234, (q31_t)0x43b09ecc, (q31_t)0x439b48c9, (q31_t)0x4385f02a, (q31_t)0x437094f1, (q31_t)0x435b371f, - (q31_t)0x4345d6b3, (q31_t)0x433073b0, - (q31_t)0x431b0e15, (q31_t)0x4305a5e5, (q31_t)0x42f03b1e, (q31_t)0x42dacdc3, (q31_t)0x42c55dd4, (q31_t)0x42afeb53, - (q31_t)0x429a763f, (q31_t)0x4284fe99, - (q31_t)0x426f8463, (q31_t)0x425a079e, (q31_t)0x42448849, (q31_t)0x422f0667, (q31_t)0x421981f7, (q31_t)0x4203fafb, - (q31_t)0x41ee7174, (q31_t)0x41d8e561, - (q31_t)0x41c356c5, (q31_t)0x41adc5a0, (q31_t)0x419831f3, (q31_t)0x41829bbe, (q31_t)0x416d0302, (q31_t)0x415767c1, - (q31_t)0x4141c9fb, (q31_t)0x412c29b1, - (q31_t)0x411686e4, (q31_t)0x4100e194, (q31_t)0x40eb39c3, (q31_t)0x40d58f71, (q31_t)0x40bfe29f, (q31_t)0x40aa334e, - (q31_t)0x4094817f, (q31_t)0x407ecd32, - (q31_t)0x40691669, (q31_t)0x40535d24, (q31_t)0x403da165, (q31_t)0x4027e32b, (q31_t)0x40122278, (q31_t)0x3ffc5f4d, - (q31_t)0x3fe699aa, (q31_t)0x3fd0d191, - (q31_t)0x3fbb0702, (q31_t)0x3fa539fd, (q31_t)0x3f8f6a85, (q31_t)0x3f799899, (q31_t)0x3f63c43b, (q31_t)0x3f4ded6b, - (q31_t)0x3f38142a, (q31_t)0x3f22387a, - (q31_t)0x3f0c5a5a, (q31_t)0x3ef679cc, (q31_t)0x3ee096d1, (q31_t)0x3ecab169, (q31_t)0x3eb4c995, (q31_t)0x3e9edf57, - (q31_t)0x3e88f2ae, (q31_t)0x3e73039d, - (q31_t)0x3e5d1222, (q31_t)0x3e471e41, (q31_t)0x3e3127f9, (q31_t)0x3e1b2f4a, (q31_t)0x3e053437, (q31_t)0x3def36c0, - (q31_t)0x3dd936e6, (q31_t)0x3dc334a9, - (q31_t)0x3dad300b, (q31_t)0x3d97290b, (q31_t)0x3d811fac, (q31_t)0x3d6b13ee, (q31_t)0x3d5505d2, (q31_t)0x3d3ef559, - (q31_t)0x3d28e282, (q31_t)0x3d12cd51, - (q31_t)0x3cfcb5c4, (q31_t)0x3ce69bde, (q31_t)0x3cd07f9f, (q31_t)0x3cba6107, (q31_t)0x3ca44018, (q31_t)0x3c8e1cd3, - (q31_t)0x3c77f737, (q31_t)0x3c61cf48, - (q31_t)0x3c4ba504, (q31_t)0x3c35786d, (q31_t)0x3c1f4983, (q31_t)0x3c091849, (q31_t)0x3bf2e4be, (q31_t)0x3bdcaee3, - (q31_t)0x3bc676b9, (q31_t)0x3bb03c42, - (q31_t)0x3b99ff7d, (q31_t)0x3b83c06c, (q31_t)0x3b6d7f10, (q31_t)0x3b573b69, (q31_t)0x3b40f579, (q31_t)0x3b2aad3f, - (q31_t)0x3b1462be, (q31_t)0x3afe15f6, - (q31_t)0x3ae7c6e7, (q31_t)0x3ad17593, (q31_t)0x3abb21fb, (q31_t)0x3aa4cc1e, (q31_t)0x3a8e7400, (q31_t)0x3a78199f, - (q31_t)0x3a61bcfd, (q31_t)0x3a4b5e1b, - (q31_t)0x3a34fcf9, (q31_t)0x3a1e9999, (q31_t)0x3a0833fc, (q31_t)0x39f1cc21, (q31_t)0x39db620b, (q31_t)0x39c4f5ba, - (q31_t)0x39ae872f, (q31_t)0x3998166a, - (q31_t)0x3981a36d, (q31_t)0x396b2e38, (q31_t)0x3954b6cd, (q31_t)0x393e3d2c, (q31_t)0x3927c155, (q31_t)0x3911434b, - (q31_t)0x38fac30e, (q31_t)0x38e4409e, - (q31_t)0x38cdbbfc, (q31_t)0x38b7352a, (q31_t)0x38a0ac29, (q31_t)0x388a20f8, (q31_t)0x38739399, (q31_t)0x385d040d, - (q31_t)0x38467255, (q31_t)0x382fde72, - (q31_t)0x38194864, (q31_t)0x3802b02c, (q31_t)0x37ec15cb, (q31_t)0x37d57943, (q31_t)0x37beda93, (q31_t)0x37a839be, - (q31_t)0x379196c3, (q31_t)0x377af1a3, - (q31_t)0x37644a60, (q31_t)0x374da0fa, (q31_t)0x3736f573, (q31_t)0x372047ca, (q31_t)0x37099802, (q31_t)0x36f2e61a, - (q31_t)0x36dc3214, (q31_t)0x36c57bf0, - (q31_t)0x36aec3b0, (q31_t)0x36980954, (q31_t)0x36814cde, (q31_t)0x366a8e4d, (q31_t)0x3653cda3, (q31_t)0x363d0ae2, - (q31_t)0x36264609, (q31_t)0x360f7f19, - (q31_t)0x35f8b614, (q31_t)0x35e1eafa, (q31_t)0x35cb1dcc, (q31_t)0x35b44e8c, (q31_t)0x359d7d39, (q31_t)0x3586a9d5, - (q31_t)0x356fd461, (q31_t)0x3558fcde, - (q31_t)0x3542234c, (q31_t)0x352b47ad, (q31_t)0x35146a00, (q31_t)0x34fd8a48, (q31_t)0x34e6a885, (q31_t)0x34cfc4b7, - (q31_t)0x34b8dee1, (q31_t)0x34a1f702, - (q31_t)0x348b0d1c, (q31_t)0x3474212f, (q31_t)0x345d333c, (q31_t)0x34464345, (q31_t)0x342f5149, (q31_t)0x34185d4b, - (q31_t)0x3401674a, (q31_t)0x33ea6f48, - (q31_t)0x33d37546, (q31_t)0x33bc7944, (q31_t)0x33a57b44, (q31_t)0x338e7b46, (q31_t)0x3377794b, (q31_t)0x33607554, - (q31_t)0x33496f62, (q31_t)0x33326776, - (q31_t)0x331b5d91, (q31_t)0x330451b3, (q31_t)0x32ed43de, (q31_t)0x32d63412, (q31_t)0x32bf2250, (q31_t)0x32a80e99, - (q31_t)0x3290f8ef, (q31_t)0x3279e151, - (q31_t)0x3262c7c1, (q31_t)0x324bac40, (q31_t)0x32348ecf, (q31_t)0x321d6f6e, (q31_t)0x32064e1e, (q31_t)0x31ef2ae1, - (q31_t)0x31d805b7, (q31_t)0x31c0dea1, - (q31_t)0x31a9b5a0, (q31_t)0x31928ab4, (q31_t)0x317b5de0, (q31_t)0x31642f23, (q31_t)0x314cfe7f, (q31_t)0x3135cbf4, - (q31_t)0x311e9783, (q31_t)0x3107612e, - (q31_t)0x30f028f4, (q31_t)0x30d8eed8, (q31_t)0x30c1b2da, (q31_t)0x30aa74fa, (q31_t)0x3093353a, (q31_t)0x307bf39b, - (q31_t)0x3064b01d, (q31_t)0x304d6ac1, - (q31_t)0x30362389, (q31_t)0x301eda75, (q31_t)0x30078f86, (q31_t)0x2ff042bd, (q31_t)0x2fd8f41b, (q31_t)0x2fc1a3a0, - (q31_t)0x2faa514f, (q31_t)0x2f92fd26, - (q31_t)0x2f7ba729, (q31_t)0x2f644f56, (q31_t)0x2f4cf5b0, (q31_t)0x2f359a37, (q31_t)0x2f1e3ced, (q31_t)0x2f06ddd1, - (q31_t)0x2eef7ce5, (q31_t)0x2ed81a29, - (q31_t)0x2ec0b5a0, (q31_t)0x2ea94f49, (q31_t)0x2e91e725, (q31_t)0x2e7a7d36, (q31_t)0x2e63117c, (q31_t)0x2e4ba3f8, - (q31_t)0x2e3434ac, (q31_t)0x2e1cc397, - (q31_t)0x2e0550bb, (q31_t)0x2deddc19, (q31_t)0x2dd665b2, (q31_t)0x2dbeed86, (q31_t)0x2da77397, (q31_t)0x2d8ff7e5, - (q31_t)0x2d787a72, (q31_t)0x2d60fb3e, - (q31_t)0x2d497a4a, (q31_t)0x2d31f797, (q31_t)0x2d1a7325, (q31_t)0x2d02ecf7, (q31_t)0x2ceb650d, (q31_t)0x2cd3db67, - (q31_t)0x2cbc5006, (q31_t)0x2ca4c2ed, - (q31_t)0x2c8d341a, (q31_t)0x2c75a390, (q31_t)0x2c5e114f, (q31_t)0x2c467d58, (q31_t)0x2c2ee7ad, (q31_t)0x2c17504d, - (q31_t)0x2bffb73a, (q31_t)0x2be81c74, - (q31_t)0x2bd07ffe, (q31_t)0x2bb8e1d7, (q31_t)0x2ba14200, (q31_t)0x2b89a07b, (q31_t)0x2b71fd48, (q31_t)0x2b5a5868, - (q31_t)0x2b42b1dd, (q31_t)0x2b2b09a6, - (q31_t)0x2b135fc6, (q31_t)0x2afbb43c, (q31_t)0x2ae4070a, (q31_t)0x2acc5831, (q31_t)0x2ab4a7b1, (q31_t)0x2a9cf58c, - (q31_t)0x2a8541c3, (q31_t)0x2a6d8c55, - (q31_t)0x2a55d545, (q31_t)0x2a3e1c93, (q31_t)0x2a266240, (q31_t)0x2a0ea64d, (q31_t)0x29f6e8bb, (q31_t)0x29df298b, - (q31_t)0x29c768be, (q31_t)0x29afa654, - (q31_t)0x2997e24f, (q31_t)0x29801caf, (q31_t)0x29685576, (q31_t)0x29508ca4, (q31_t)0x2938c23a, (q31_t)0x2920f63a, - (q31_t)0x290928a3, (q31_t)0x28f15978, - (q31_t)0x28d988b8, (q31_t)0x28c1b666, (q31_t)0x28a9e281, (q31_t)0x28920d0a, (q31_t)0x287a3604, (q31_t)0x28625d6d, - (q31_t)0x284a8349, (q31_t)0x2832a796, - (q31_t)0x281aca57, (q31_t)0x2802eb8c, (q31_t)0x27eb0b36, (q31_t)0x27d32956, (q31_t)0x27bb45ed, (q31_t)0x27a360fc, - (q31_t)0x278b7a84, (q31_t)0x27739285, - (q31_t)0x275ba901, (q31_t)0x2743bdf9, (q31_t)0x272bd16d, (q31_t)0x2713e35f, (q31_t)0x26fbf3ce, (q31_t)0x26e402bd, - (q31_t)0x26cc102d, (q31_t)0x26b41c1d, - (q31_t)0x269c268f, (q31_t)0x26842f84, (q31_t)0x266c36fe, (q31_t)0x26543cfb, (q31_t)0x263c417f, (q31_t)0x26244489, - (q31_t)0x260c461b, (q31_t)0x25f44635, - (q31_t)0x25dc44d9, (q31_t)0x25c44207, (q31_t)0x25ac3dc0, (q31_t)0x25943806, (q31_t)0x257c30d8, (q31_t)0x25642839, - (q31_t)0x254c1e28, (q31_t)0x253412a8, - (q31_t)0x251c05b8, (q31_t)0x2503f75a, (q31_t)0x24ebe78f, (q31_t)0x24d3d657, (q31_t)0x24bbc3b4, (q31_t)0x24a3afa6, - (q31_t)0x248b9a2f, (q31_t)0x2473834f, - (q31_t)0x245b6b07, (q31_t)0x24435158, (q31_t)0x242b3644, (q31_t)0x241319ca, (q31_t)0x23fafbec, (q31_t)0x23e2dcac, - (q31_t)0x23cabc09, (q31_t)0x23b29a05, - (q31_t)0x239a76a0, (q31_t)0x238251dd, (q31_t)0x236a2bba, (q31_t)0x2352043b, (q31_t)0x2339db5e, (q31_t)0x2321b126, - (q31_t)0x23098593, (q31_t)0x22f158a7, - (q31_t)0x22d92a61, (q31_t)0x22c0fac4, (q31_t)0x22a8c9cf, (q31_t)0x22909785, (q31_t)0x227863e5, (q31_t)0x22602ef1, - (q31_t)0x2247f8aa, (q31_t)0x222fc111, - (q31_t)0x22178826, (q31_t)0x21ff4dea, (q31_t)0x21e71260, (q31_t)0x21ced586, (q31_t)0x21b6975f, (q31_t)0x219e57eb, - (q31_t)0x2186172b, (q31_t)0x216dd521, - (q31_t)0x215591cc, (q31_t)0x213d4d2f, (q31_t)0x21250749, (q31_t)0x210cc01d, (q31_t)0x20f477aa, (q31_t)0x20dc2df2, - (q31_t)0x20c3e2f5, (q31_t)0x20ab96b5, - (q31_t)0x20934933, (q31_t)0x207afa6f, (q31_t)0x2062aa6b, (q31_t)0x204a5927, (q31_t)0x203206a4, (q31_t)0x2019b2e4, - (q31_t)0x20015de7, (q31_t)0x1fe907ae, - (q31_t)0x1fd0b03a, (q31_t)0x1fb8578b, (q31_t)0x1f9ffda4, (q31_t)0x1f87a285, (q31_t)0x1f6f462f, (q31_t)0x1f56e8a2, - (q31_t)0x1f3e89e0, (q31_t)0x1f2629ea, - (q31_t)0x1f0dc8c0, (q31_t)0x1ef56664, (q31_t)0x1edd02d6, (q31_t)0x1ec49e17, (q31_t)0x1eac3829, (q31_t)0x1e93d10c, - (q31_t)0x1e7b68c2, (q31_t)0x1e62ff4a, - (q31_t)0x1e4a94a7, (q31_t)0x1e3228d9, (q31_t)0x1e19bbe0, (q31_t)0x1e014dbf, (q31_t)0x1de8de75, (q31_t)0x1dd06e04, - (q31_t)0x1db7fc6d, (q31_t)0x1d9f89b1, - (q31_t)0x1d8715d0, (q31_t)0x1d6ea0cc, (q31_t)0x1d562aa6, (q31_t)0x1d3db35e, (q31_t)0x1d253af5, (q31_t)0x1d0cc16c, - (q31_t)0x1cf446c5, (q31_t)0x1cdbcb00, - (q31_t)0x1cc34e1f, (q31_t)0x1caad021, (q31_t)0x1c925109, (q31_t)0x1c79d0d6, (q31_t)0x1c614f8b, (q31_t)0x1c48cd27, - (q31_t)0x1c3049ac, (q31_t)0x1c17c51b, - (q31_t)0x1bff3f75, (q31_t)0x1be6b8ba, (q31_t)0x1bce30ec, (q31_t)0x1bb5a80c, (q31_t)0x1b9d1e1a, (q31_t)0x1b849317, - (q31_t)0x1b6c0705, (q31_t)0x1b5379e5, - (q31_t)0x1b3aebb6, (q31_t)0x1b225c7b, (q31_t)0x1b09cc34, (q31_t)0x1af13ae3, (q31_t)0x1ad8a887, (q31_t)0x1ac01522, - (q31_t)0x1aa780b6, (q31_t)0x1a8eeb42, - (q31_t)0x1a7654c8, (q31_t)0x1a5dbd49, (q31_t)0x1a4524c6, (q31_t)0x1a2c8b3f, (q31_t)0x1a13f0b6, (q31_t)0x19fb552c, - (q31_t)0x19e2b8a2, (q31_t)0x19ca1b17, - (q31_t)0x19b17c8f, (q31_t)0x1998dd09, (q31_t)0x19803c86, (q31_t)0x19679b07, (q31_t)0x194ef88e, (q31_t)0x1936551b, - (q31_t)0x191db0af, (q31_t)0x19050b4b, - (q31_t)0x18ec64f0, (q31_t)0x18d3bda0, (q31_t)0x18bb155a, (q31_t)0x18a26c20, (q31_t)0x1889c1f3, (q31_t)0x187116d4, - (q31_t)0x18586ac3, (q31_t)0x183fbdc3, - (q31_t)0x18270fd3, (q31_t)0x180e60f4, (q31_t)0x17f5b129, (q31_t)0x17dd0070, (q31_t)0x17c44ecd, (q31_t)0x17ab9c3e, - (q31_t)0x1792e8c6, (q31_t)0x177a3466, - (q31_t)0x17617f1d, (q31_t)0x1748c8ee, (q31_t)0x173011d9, (q31_t)0x171759df, (q31_t)0x16fea102, (q31_t)0x16e5e741, - (q31_t)0x16cd2c9f, (q31_t)0x16b4711b, - (q31_t)0x169bb4b7, (q31_t)0x1682f774, (q31_t)0x166a3953, (q31_t)0x16517a55, (q31_t)0x1638ba7a, (q31_t)0x161ff9c4, - (q31_t)0x16073834, (q31_t)0x15ee75cb, - (q31_t)0x15d5b288, (q31_t)0x15bcee6f, (q31_t)0x15a4297f, (q31_t)0x158b63b9, (q31_t)0x15729d1f, (q31_t)0x1559d5b1, - (q31_t)0x15410d70, (q31_t)0x1528445d, - (q31_t)0x150f7a7a, (q31_t)0x14f6afc7, (q31_t)0x14dde445, (q31_t)0x14c517f4, (q31_t)0x14ac4ad7, (q31_t)0x14937cee, - (q31_t)0x147aae3a, (q31_t)0x1461debc, - (q31_t)0x14490e74, (q31_t)0x14303d65, (q31_t)0x14176b8e, (q31_t)0x13fe98f1, (q31_t)0x13e5c58e, (q31_t)0x13ccf167, - (q31_t)0x13b41c7d, (q31_t)0x139b46d0, - (q31_t)0x13827062, (q31_t)0x13699933, (q31_t)0x1350c144, (q31_t)0x1337e897, (q31_t)0x131f0f2c, (q31_t)0x13063505, - (q31_t)0x12ed5a21, (q31_t)0x12d47e83, - (q31_t)0x12bba22b, (q31_t)0x12a2c51b, (q31_t)0x1289e752, (q31_t)0x127108d2, (q31_t)0x1258299c, (q31_t)0x123f49b2, - (q31_t)0x12266913, (q31_t)0x120d87c1, - (q31_t)0x11f4a5bd, (q31_t)0x11dbc307, (q31_t)0x11c2dfa2, (q31_t)0x11a9fb8d, (q31_t)0x119116c9, (q31_t)0x11783159, - (q31_t)0x115f4b3c, (q31_t)0x11466473, - (q31_t)0x112d7d00, (q31_t)0x111494e4, (q31_t)0x10fbac1e, (q31_t)0x10e2c2b2, (q31_t)0x10c9d89e, (q31_t)0x10b0ede5, - (q31_t)0x10980287, (q31_t)0x107f1686, - (q31_t)0x106629e1, (q31_t)0x104d3c9b, (q31_t)0x10344eb4, (q31_t)0x101b602d, (q31_t)0x10027107, (q31_t)0xfe98143, - (q31_t)0xfd090e1, (q31_t)0xfb79fe4, - (q31_t)0xf9eae4c, (q31_t)0xf85bc19, (q31_t)0xf6cc94e, (q31_t)0xf53d5ea, (q31_t)0xf3ae1ee, (q31_t)0xf21ed5d, (q31_t)0xf08f836, - (q31_t)0xef0027b, - (q31_t)0xed70c2c, (q31_t)0xebe154b, (q31_t)0xea51dd8, (q31_t)0xe8c25d5, (q31_t)0xe732d42, (q31_t)0xe5a3421, (q31_t)0xe413a72, - (q31_t)0xe284036, - (q31_t)0xe0f456f, (q31_t)0xdf64a1c, (q31_t)0xddd4e40, (q31_t)0xdc451dc, (q31_t)0xdab54ef, (q31_t)0xd92577b, (q31_t)0xd795982, - (q31_t)0xd605b03, - (q31_t)0xd475c00, (q31_t)0xd2e5c7b, (q31_t)0xd155c73, (q31_t)0xcfc5bea, (q31_t)0xce35ae1, (q31_t)0xcca5959, (q31_t)0xcb15752, - (q31_t)0xc9854cf, - (q31_t)0xc7f51cf, (q31_t)0xc664e53, (q31_t)0xc4d4a5d, (q31_t)0xc3445ee, (q31_t)0xc1b4107, (q31_t)0xc023ba7, (q31_t)0xbe935d2, - (q31_t)0xbd02f87, - (q31_t)0xbb728c7, (q31_t)0xb9e2193, (q31_t)0xb8519ed, (q31_t)0xb6c11d5, (q31_t)0xb53094d, (q31_t)0xb3a0055, (q31_t)0xb20f6ee, - (q31_t)0xb07ed19, - (q31_t)0xaeee2d7, (q31_t)0xad5d829, (q31_t)0xabccd11, (q31_t)0xaa3c18e, (q31_t)0xa8ab5a2, (q31_t)0xa71a94f, (q31_t)0xa589c94, - (q31_t)0xa3f8f73, - (q31_t)0xa2681ed, (q31_t)0xa0d7403, (q31_t)0x9f465b5, (q31_t)0x9db5706, (q31_t)0x9c247f5, (q31_t)0x9a93884, (q31_t)0x99028b3, - (q31_t)0x9771884, - (q31_t)0x95e07f8, (q31_t)0x944f70f, (q31_t)0x92be5ca, (q31_t)0x912d42c, (q31_t)0x8f9c233, (q31_t)0x8e0afe2, (q31_t)0x8c79d3a, - (q31_t)0x8ae8a3a, - (q31_t)0x89576e5, (q31_t)0x87c633c, (q31_t)0x8634f3e, (q31_t)0x84a3aee, (q31_t)0x831264c, (q31_t)0x8181159, (q31_t)0x7fefc16, - (q31_t)0x7e5e685, - (q31_t)0x7ccd0a5, (q31_t)0x7b3ba78, (q31_t)0x79aa400, (q31_t)0x7818d3c, (q31_t)0x768762e, (q31_t)0x74f5ed7, (q31_t)0x7364738, - (q31_t)0x71d2f52, - (q31_t)0x7041726, (q31_t)0x6eafeb4, (q31_t)0x6d1e5fe, (q31_t)0x6b8cd05, (q31_t)0x69fb3c9, (q31_t)0x6869a4c, (q31_t)0x66d808f, - (q31_t)0x6546692, - (q31_t)0x63b4c57, (q31_t)0x62231de, (q31_t)0x6091729, (q31_t)0x5effc38, (q31_t)0x5d6e10c, (q31_t)0x5bdc5a7, (q31_t)0x5a4aa09, - (q31_t)0x58b8e34, - (q31_t)0x5727228, (q31_t)0x55955e6, (q31_t)0x540396f, (q31_t)0x5271cc4, (q31_t)0x50dffe7, (q31_t)0x4f4e2d8, (q31_t)0x4dbc597, - (q31_t)0x4c2a827, - (q31_t)0x4a98a88, (q31_t)0x4906cbb, (q31_t)0x4774ec1, (q31_t)0x45e309a, (q31_t)0x4451249, (q31_t)0x42bf3cd, (q31_t)0x412d528, - (q31_t)0x3f9b65b, - (q31_t)0x3e09767, (q31_t)0x3c7784d, (q31_t)0x3ae590d, (q31_t)0x39539a9, (q31_t)0x37c1a22, (q31_t)0x362fa78, (q31_t)0x349daac, - (q31_t)0x330bac1, - (q31_t)0x3179ab5, (q31_t)0x2fe7a8c, (q31_t)0x2e55a44, (q31_t)0x2cc39e1, (q31_t)0x2b31961, (q31_t)0x299f8c7, (q31_t)0x280d813, - (q31_t)0x267b747, - (q31_t)0x24e9662, (q31_t)0x2357567, (q31_t)0x21c5457, (q31_t)0x2033331, (q31_t)0x1ea11f7, (q31_t)0x1d0f0ab, (q31_t)0x1b7cf4d, - (q31_t)0x19eaddd, - (q31_t)0x1858c5e, (q31_t)0x16c6ad0, (q31_t)0x1534934, (q31_t)0x13a278a, (q31_t)0x12105d5, (q31_t)0x107e414, (q31_t)0xeec249, - (q31_t)0xd5a075, - (q31_t)0xbc7e99, (q31_t)0xa35cb5, (q31_t)0x8a3acb, (q31_t)0x7118dc, (q31_t)0x57f6e9, (q31_t)0x3ed4f2, (q31_t)0x25b2f8, - (q31_t)0xc90fe -}; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_8192) - const q31_t WeightsQ31_8192[16384] = { - (q31_t)0x7fffffff, (q31_t)0x00000000, (q31_t)0x7fffffd9, (q31_t)0xfff9b781, (q31_t)0x7fffff62, (q31_t)0xfff36f02, (q31_t)0x7ffffe9d, (q31_t)0xffed2684, - (q31_t)0x7ffffd88, (q31_t)0xffe6de05, (q31_t)0x7ffffc25, (q31_t)0xffe09586, (q31_t)0x7ffffa73, (q31_t)0xffda4d08, (q31_t)0x7ffff872, (q31_t)0xffd40489, - (q31_t)0x7ffff621, (q31_t)0xffcdbc0b, (q31_t)0x7ffff382, (q31_t)0xffc7738c, (q31_t)0x7ffff094, (q31_t)0xffc12b0e, (q31_t)0x7fffed57, (q31_t)0xffbae290, - (q31_t)0x7fffe9cb, (q31_t)0xffb49a12, (q31_t)0x7fffe5f0, (q31_t)0xffae5195, (q31_t)0x7fffe1c6, (q31_t)0xffa80917, (q31_t)0x7fffdd4d, (q31_t)0xffa1c09a, - (q31_t)0x7fffd886, (q31_t)0xff9b781d, (q31_t)0x7fffd36f, (q31_t)0xff952fa0, (q31_t)0x7fffce09, (q31_t)0xff8ee724, (q31_t)0x7fffc854, (q31_t)0xff889ea7, - (q31_t)0x7fffc251, (q31_t)0xff82562c, (q31_t)0x7fffbbfe, (q31_t)0xff7c0db0, (q31_t)0x7fffb55c, (q31_t)0xff75c535, (q31_t)0x7fffae6c, (q31_t)0xff6f7cba, - (q31_t)0x7fffa72c, (q31_t)0xff69343f, (q31_t)0x7fff9f9e, (q31_t)0xff62ebc5, (q31_t)0x7fff97c1, (q31_t)0xff5ca34b, (q31_t)0x7fff8f94, (q31_t)0xff565ad1, - (q31_t)0x7fff8719, (q31_t)0xff501258, (q31_t)0x7fff7e4f, (q31_t)0xff49c9df, (q31_t)0x7fff7536, (q31_t)0xff438167, (q31_t)0x7fff6bcd, (q31_t)0xff3d38ef, - (q31_t)0x7fff6216, (q31_t)0xff36f078, (q31_t)0x7fff5810, (q31_t)0xff30a801, (q31_t)0x7fff4dbb, (q31_t)0xff2a5f8b, (q31_t)0x7fff4317, (q31_t)0xff241715, - (q31_t)0x7fff3824, (q31_t)0xff1dcea0, (q31_t)0x7fff2ce2, (q31_t)0xff17862b, (q31_t)0x7fff2151, (q31_t)0xff113db7, (q31_t)0x7fff1572, (q31_t)0xff0af543, - (q31_t)0x7fff0943, (q31_t)0xff04acd0, (q31_t)0x7ffefcc5, (q31_t)0xfefe645e, (q31_t)0x7ffeeff8, (q31_t)0xfef81bec, (q31_t)0x7ffee2dd, (q31_t)0xfef1d37b, - (q31_t)0x7ffed572, (q31_t)0xfeeb8b0a, (q31_t)0x7ffec7b9, (q31_t)0xfee5429a, (q31_t)0x7ffeb9b0, (q31_t)0xfedefa2b, (q31_t)0x7ffeab59, (q31_t)0xfed8b1bd, - (q31_t)0x7ffe9cb2, (q31_t)0xfed2694f, (q31_t)0x7ffe8dbd, (q31_t)0xfecc20e2, (q31_t)0x7ffe7e79, (q31_t)0xfec5d876, (q31_t)0x7ffe6ee5, (q31_t)0xfebf900a, - (q31_t)0x7ffe5f03, (q31_t)0xfeb947a0, (q31_t)0x7ffe4ed2, (q31_t)0xfeb2ff36, (q31_t)0x7ffe3e52, (q31_t)0xfeacb6cc, (q31_t)0x7ffe2d83, (q31_t)0xfea66e64, - (q31_t)0x7ffe1c65, (q31_t)0xfea025fd, (q31_t)0x7ffe0af8, (q31_t)0xfe99dd96, (q31_t)0x7ffdf93c, (q31_t)0xfe939530, (q31_t)0x7ffde731, (q31_t)0xfe8d4ccb, - (q31_t)0x7ffdd4d7, (q31_t)0xfe870467, (q31_t)0x7ffdc22e, (q31_t)0xfe80bc04, (q31_t)0x7ffdaf37, (q31_t)0xfe7a73a2, (q31_t)0x7ffd9bf0, (q31_t)0xfe742b41, - (q31_t)0x7ffd885a, (q31_t)0xfe6de2e0, (q31_t)0x7ffd7476, (q31_t)0xfe679a81, (q31_t)0x7ffd6042, (q31_t)0xfe615223, (q31_t)0x7ffd4bc0, (q31_t)0xfe5b09c5, - (q31_t)0x7ffd36ee, (q31_t)0xfe54c169, (q31_t)0x7ffd21ce, (q31_t)0xfe4e790d, (q31_t)0x7ffd0c5f, (q31_t)0xfe4830b3, (q31_t)0x7ffcf6a0, (q31_t)0xfe41e85a, - (q31_t)0x7ffce093, (q31_t)0xfe3ba002, (q31_t)0x7ffcca37, (q31_t)0xfe3557ab, (q31_t)0x7ffcb38c, (q31_t)0xfe2f0f55, (q31_t)0x7ffc9c92, (q31_t)0xfe28c700, - (q31_t)0x7ffc8549, (q31_t)0xfe227eac, (q31_t)0x7ffc6db1, (q31_t)0xfe1c365a, (q31_t)0x7ffc55ca, (q31_t)0xfe15ee09, (q31_t)0x7ffc3d94, (q31_t)0xfe0fa5b8, - (q31_t)0x7ffc250f, (q31_t)0xfe095d69, (q31_t)0x7ffc0c3b, (q31_t)0xfe03151c, (q31_t)0x7ffbf319, (q31_t)0xfdfccccf, (q31_t)0x7ffbd9a7, (q31_t)0xfdf68484, - (q31_t)0x7ffbbfe6, (q31_t)0xfdf03c3a, (q31_t)0x7ffba5d7, (q31_t)0xfde9f3f1, (q31_t)0x7ffb8b78, (q31_t)0xfde3aba9, (q31_t)0x7ffb70cb, (q31_t)0xfddd6363, - (q31_t)0x7ffb55ce, (q31_t)0xfdd71b1e, (q31_t)0x7ffb3a83, (q31_t)0xfdd0d2db, (q31_t)0x7ffb1ee9, (q31_t)0xfdca8a99, (q31_t)0x7ffb0300, (q31_t)0xfdc44258, - (q31_t)0x7ffae6c7, (q31_t)0xfdbdfa18, (q31_t)0x7ffaca40, (q31_t)0xfdb7b1da, (q31_t)0x7ffaad6a, (q31_t)0xfdb1699e, (q31_t)0x7ffa9045, (q31_t)0xfdab2162, - (q31_t)0x7ffa72d1, (q31_t)0xfda4d929, (q31_t)0x7ffa550e, (q31_t)0xfd9e90f0, (q31_t)0x7ffa36fc, (q31_t)0xfd9848b9, (q31_t)0x7ffa189c, (q31_t)0xfd920084, - (q31_t)0x7ff9f9ec, (q31_t)0xfd8bb850, (q31_t)0x7ff9daed, (q31_t)0xfd85701e, (q31_t)0x7ff9bba0, (q31_t)0xfd7f27ed, (q31_t)0x7ff99c03, (q31_t)0xfd78dfbd, - (q31_t)0x7ff97c18, (q31_t)0xfd729790, (q31_t)0x7ff95bdd, (q31_t)0xfd6c4f64, (q31_t)0x7ff93b54, (q31_t)0xfd660739, (q31_t)0x7ff91a7b, (q31_t)0xfd5fbf10, - (q31_t)0x7ff8f954, (q31_t)0xfd5976e9, (q31_t)0x7ff8d7de, (q31_t)0xfd532ec3, (q31_t)0x7ff8b619, (q31_t)0xfd4ce69f, (q31_t)0x7ff89405, (q31_t)0xfd469e7c, - (q31_t)0x7ff871a2, (q31_t)0xfd40565c, (q31_t)0x7ff84ef0, (q31_t)0xfd3a0e3d, (q31_t)0x7ff82bef, (q31_t)0xfd33c61f, (q31_t)0x7ff8089f, (q31_t)0xfd2d7e04, - (q31_t)0x7ff7e500, (q31_t)0xfd2735ea, (q31_t)0x7ff7c113, (q31_t)0xfd20edd2, (q31_t)0x7ff79cd6, (q31_t)0xfd1aa5bc, (q31_t)0x7ff7784a, (q31_t)0xfd145da7, - (q31_t)0x7ff75370, (q31_t)0xfd0e1594, (q31_t)0x7ff72e46, (q31_t)0xfd07cd83, (q31_t)0x7ff708ce, (q31_t)0xfd018574, (q31_t)0x7ff6e307, (q31_t)0xfcfb3d67, - (q31_t)0x7ff6bcf0, (q31_t)0xfcf4f55c, (q31_t)0x7ff6968b, (q31_t)0xfceead52, (q31_t)0x7ff66fd7, (q31_t)0xfce8654b, (q31_t)0x7ff648d4, (q31_t)0xfce21d45, - (q31_t)0x7ff62182, (q31_t)0xfcdbd541, (q31_t)0x7ff5f9e1, (q31_t)0xfcd58d3f, (q31_t)0x7ff5d1f1, (q31_t)0xfccf453f, (q31_t)0x7ff5a9b2, (q31_t)0xfcc8fd41, - (q31_t)0x7ff58125, (q31_t)0xfcc2b545, (q31_t)0x7ff55848, (q31_t)0xfcbc6d4c, (q31_t)0x7ff52f1d, (q31_t)0xfcb62554, (q31_t)0x7ff505a2, (q31_t)0xfcafdd5e, - (q31_t)0x7ff4dbd9, (q31_t)0xfca9956a, (q31_t)0x7ff4b1c0, (q31_t)0xfca34d78, (q31_t)0x7ff48759, (q31_t)0xfc9d0588, (q31_t)0x7ff45ca3, (q31_t)0xfc96bd9b, - (q31_t)0x7ff4319d, (q31_t)0xfc9075af, (q31_t)0x7ff40649, (q31_t)0xfc8a2dc6, (q31_t)0x7ff3daa6, (q31_t)0xfc83e5de, (q31_t)0x7ff3aeb4, (q31_t)0xfc7d9df9, - (q31_t)0x7ff38274, (q31_t)0xfc775616, (q31_t)0x7ff355e4, (q31_t)0xfc710e36, (q31_t)0x7ff32905, (q31_t)0xfc6ac657, (q31_t)0x7ff2fbd7, (q31_t)0xfc647e7b, - (q31_t)0x7ff2ce5b, (q31_t)0xfc5e36a0, (q31_t)0x7ff2a08f, (q31_t)0xfc57eec9, (q31_t)0x7ff27275, (q31_t)0xfc51a6f3, (q31_t)0x7ff2440b, (q31_t)0xfc4b5f20, - (q31_t)0x7ff21553, (q31_t)0xfc45174e, (q31_t)0x7ff1e64c, (q31_t)0xfc3ecf80, (q31_t)0x7ff1b6f6, (q31_t)0xfc3887b3, (q31_t)0x7ff18751, (q31_t)0xfc323fe9, - (q31_t)0x7ff1575d, (q31_t)0xfc2bf821, (q31_t)0x7ff1271a, (q31_t)0xfc25b05c, (q31_t)0x7ff0f688, (q31_t)0xfc1f6899, (q31_t)0x7ff0c5a7, (q31_t)0xfc1920d8, - (q31_t)0x7ff09478, (q31_t)0xfc12d91a, (q31_t)0x7ff062f9, (q31_t)0xfc0c915e, (q31_t)0x7ff0312c, (q31_t)0xfc0649a5, (q31_t)0x7fefff0f, (q31_t)0xfc0001ee, - (q31_t)0x7fefcca4, (q31_t)0xfbf9ba39, (q31_t)0x7fef99ea, (q31_t)0xfbf37287, (q31_t)0x7fef66e1, (q31_t)0xfbed2ad8, (q31_t)0x7fef3388, (q31_t)0xfbe6e32b, - (q31_t)0x7feeffe1, (q31_t)0xfbe09b80, (q31_t)0x7feecbec, (q31_t)0xfbda53d8, (q31_t)0x7fee97a7, (q31_t)0xfbd40c33, (q31_t)0x7fee6313, (q31_t)0xfbcdc490, - (q31_t)0x7fee2e30, (q31_t)0xfbc77cf0, (q31_t)0x7fedf8ff, (q31_t)0xfbc13552, (q31_t)0x7fedc37e, (q31_t)0xfbbaedb7, (q31_t)0x7fed8daf, (q31_t)0xfbb4a61f, - (q31_t)0x7fed5791, (q31_t)0xfbae5e89, (q31_t)0x7fed2123, (q31_t)0xfba816f6, (q31_t)0x7fecea67, (q31_t)0xfba1cf66, (q31_t)0x7fecb35c, (q31_t)0xfb9b87d8, - (q31_t)0x7fec7c02, (q31_t)0xfb95404d, (q31_t)0x7fec4459, (q31_t)0xfb8ef8c5, (q31_t)0x7fec0c62, (q31_t)0xfb88b13f, (q31_t)0x7febd41b, (q31_t)0xfb8269bd, - (q31_t)0x7feb9b85, (q31_t)0xfb7c223d, (q31_t)0x7feb62a1, (q31_t)0xfb75dac0, (q31_t)0x7feb296d, (q31_t)0xfb6f9345, (q31_t)0x7feaefeb, (q31_t)0xfb694bce, - (q31_t)0x7feab61a, (q31_t)0xfb630459, (q31_t)0x7fea7bfa, (q31_t)0xfb5cbce7, (q31_t)0x7fea418b, (q31_t)0xfb567578, (q31_t)0x7fea06cd, (q31_t)0xfb502e0c, - (q31_t)0x7fe9cbc0, (q31_t)0xfb49e6a3, (q31_t)0x7fe99064, (q31_t)0xfb439f3c, (q31_t)0x7fe954ba, (q31_t)0xfb3d57d9, (q31_t)0x7fe918c0, (q31_t)0xfb371078, - (q31_t)0x7fe8dc78, (q31_t)0xfb30c91b, (q31_t)0x7fe89fe0, (q31_t)0xfb2a81c0, (q31_t)0x7fe862fa, (q31_t)0xfb243a69, (q31_t)0x7fe825c5, (q31_t)0xfb1df314, - (q31_t)0x7fe7e841, (q31_t)0xfb17abc2, (q31_t)0x7fe7aa6e, (q31_t)0xfb116474, (q31_t)0x7fe76c4c, (q31_t)0xfb0b1d28, (q31_t)0x7fe72ddb, (q31_t)0xfb04d5e0, - (q31_t)0x7fe6ef1c, (q31_t)0xfafe8e9b, (q31_t)0x7fe6b00d, (q31_t)0xfaf84758, (q31_t)0x7fe670b0, (q31_t)0xfaf20019, (q31_t)0x7fe63103, (q31_t)0xfaebb8dd, - (q31_t)0x7fe5f108, (q31_t)0xfae571a4, (q31_t)0x7fe5b0be, (q31_t)0xfadf2a6e, (q31_t)0x7fe57025, (q31_t)0xfad8e33c, (q31_t)0x7fe52f3d, (q31_t)0xfad29c0c, - (q31_t)0x7fe4ee06, (q31_t)0xfacc54e0, (q31_t)0x7fe4ac81, (q31_t)0xfac60db7, (q31_t)0x7fe46aac, (q31_t)0xfabfc691, (q31_t)0x7fe42889, (q31_t)0xfab97f6e, - (q31_t)0x7fe3e616, (q31_t)0xfab3384f, (q31_t)0x7fe3a355, (q31_t)0xfaacf133, (q31_t)0x7fe36045, (q31_t)0xfaa6aa1a, (q31_t)0x7fe31ce6, (q31_t)0xfaa06305, - (q31_t)0x7fe2d938, (q31_t)0xfa9a1bf3, (q31_t)0x7fe2953b, (q31_t)0xfa93d4e4, (q31_t)0x7fe250ef, (q31_t)0xfa8d8dd8, (q31_t)0x7fe20c55, (q31_t)0xfa8746d0, - (q31_t)0x7fe1c76b, (q31_t)0xfa80ffcb, (q31_t)0x7fe18233, (q31_t)0xfa7ab8ca, (q31_t)0x7fe13cac, (q31_t)0xfa7471cc, (q31_t)0x7fe0f6d6, (q31_t)0xfa6e2ad1, - (q31_t)0x7fe0b0b1, (q31_t)0xfa67e3da, (q31_t)0x7fe06a3d, (q31_t)0xfa619ce7, (q31_t)0x7fe0237a, (q31_t)0xfa5b55f7, (q31_t)0x7fdfdc69, (q31_t)0xfa550f0a, - (q31_t)0x7fdf9508, (q31_t)0xfa4ec821, (q31_t)0x7fdf4d59, (q31_t)0xfa48813b, (q31_t)0x7fdf055a, (q31_t)0xfa423a59, (q31_t)0x7fdebd0d, (q31_t)0xfa3bf37a, - (q31_t)0x7fde7471, (q31_t)0xfa35ac9f, (q31_t)0x7fde2b86, (q31_t)0xfa2f65c8, (q31_t)0x7fdde24d, (q31_t)0xfa291ef4, (q31_t)0x7fdd98c4, (q31_t)0xfa22d823, - (q31_t)0x7fdd4eec, (q31_t)0xfa1c9157, (q31_t)0x7fdd04c6, (q31_t)0xfa164a8e, (q31_t)0x7fdcba51, (q31_t)0xfa1003c8, (q31_t)0x7fdc6f8d, (q31_t)0xfa09bd06, - (q31_t)0x7fdc247a, (q31_t)0xfa037648, (q31_t)0x7fdbd918, (q31_t)0xf9fd2f8e, (q31_t)0x7fdb8d67, (q31_t)0xf9f6e8d7, (q31_t)0x7fdb4167, (q31_t)0xf9f0a224, - (q31_t)0x7fdaf519, (q31_t)0xf9ea5b75, (q31_t)0x7fdaa87c, (q31_t)0xf9e414ca, (q31_t)0x7fda5b8f, (q31_t)0xf9ddce22, (q31_t)0x7fda0e54, (q31_t)0xf9d7877e, - (q31_t)0x7fd9c0ca, (q31_t)0xf9d140de, (q31_t)0x7fd972f2, (q31_t)0xf9cafa42, (q31_t)0x7fd924ca, (q31_t)0xf9c4b3a9, (q31_t)0x7fd8d653, (q31_t)0xf9be6d15, - (q31_t)0x7fd8878e, (q31_t)0xf9b82684, (q31_t)0x7fd8387a, (q31_t)0xf9b1dff7, (q31_t)0x7fd7e917, (q31_t)0xf9ab996e, (q31_t)0x7fd79965, (q31_t)0xf9a552e9, - (q31_t)0x7fd74964, (q31_t)0xf99f0c68, (q31_t)0x7fd6f914, (q31_t)0xf998c5ea, (q31_t)0x7fd6a875, (q31_t)0xf9927f71, (q31_t)0x7fd65788, (q31_t)0xf98c38fc, - (q31_t)0x7fd6064c, (q31_t)0xf985f28a, (q31_t)0x7fd5b4c1, (q31_t)0xf97fac1d, (q31_t)0x7fd562e7, (q31_t)0xf97965b4, (q31_t)0x7fd510be, (q31_t)0xf9731f4e, - (q31_t)0x7fd4be46, (q31_t)0xf96cd8ed, (q31_t)0x7fd46b80, (q31_t)0xf9669290, (q31_t)0x7fd4186a, (q31_t)0xf9604c37, (q31_t)0x7fd3c506, (q31_t)0xf95a05e2, - (q31_t)0x7fd37153, (q31_t)0xf953bf91, (q31_t)0x7fd31d51, (q31_t)0xf94d7944, (q31_t)0x7fd2c900, (q31_t)0xf94732fb, (q31_t)0x7fd27460, (q31_t)0xf940ecb7, - (q31_t)0x7fd21f72, (q31_t)0xf93aa676, (q31_t)0x7fd1ca35, (q31_t)0xf934603a, (q31_t)0x7fd174a8, (q31_t)0xf92e1a02, (q31_t)0x7fd11ecd, (q31_t)0xf927d3ce, - (q31_t)0x7fd0c8a3, (q31_t)0xf9218d9e, (q31_t)0x7fd0722b, (q31_t)0xf91b4773, (q31_t)0x7fd01b63, (q31_t)0xf915014c, (q31_t)0x7fcfc44d, (q31_t)0xf90ebb29, - (q31_t)0x7fcf6ce8, (q31_t)0xf908750a, (q31_t)0x7fcf1533, (q31_t)0xf9022ef0, (q31_t)0x7fcebd31, (q31_t)0xf8fbe8da, (q31_t)0x7fce64df, (q31_t)0xf8f5a2c9, - (q31_t)0x7fce0c3e, (q31_t)0xf8ef5cbb, (q31_t)0x7fcdb34f, (q31_t)0xf8e916b2, (q31_t)0x7fcd5a11, (q31_t)0xf8e2d0ae, (q31_t)0x7fcd0083, (q31_t)0xf8dc8aae, - (q31_t)0x7fcca6a7, (q31_t)0xf8d644b2, (q31_t)0x7fcc4c7d, (q31_t)0xf8cffebb, (q31_t)0x7fcbf203, (q31_t)0xf8c9b8c8, (q31_t)0x7fcb973b, (q31_t)0xf8c372d9, - (q31_t)0x7fcb3c23, (q31_t)0xf8bd2cef, (q31_t)0x7fcae0bd, (q31_t)0xf8b6e70a, (q31_t)0x7fca8508, (q31_t)0xf8b0a129, (q31_t)0x7fca2905, (q31_t)0xf8aa5b4c, - (q31_t)0x7fc9ccb2, (q31_t)0xf8a41574, (q31_t)0x7fc97011, (q31_t)0xf89dcfa1, (q31_t)0x7fc91320, (q31_t)0xf89789d2, (q31_t)0x7fc8b5e1, (q31_t)0xf8914407, - (q31_t)0x7fc85854, (q31_t)0xf88afe42, (q31_t)0x7fc7fa77, (q31_t)0xf884b880, (q31_t)0x7fc79c4b, (q31_t)0xf87e72c4, (q31_t)0x7fc73dd1, (q31_t)0xf8782d0c, - (q31_t)0x7fc6df08, (q31_t)0xf871e759, (q31_t)0x7fc67ff0, (q31_t)0xf86ba1aa, (q31_t)0x7fc62089, (q31_t)0xf8655c00, (q31_t)0x7fc5c0d3, (q31_t)0xf85f165b, - (q31_t)0x7fc560cf, (q31_t)0xf858d0bb, (q31_t)0x7fc5007c, (q31_t)0xf8528b1f, (q31_t)0x7fc49fda, (q31_t)0xf84c4588, (q31_t)0x7fc43ee9, (q31_t)0xf845fff5, - (q31_t)0x7fc3dda9, (q31_t)0xf83fba68, (q31_t)0x7fc37c1b, (q31_t)0xf83974df, (q31_t)0x7fc31a3d, (q31_t)0xf8332f5b, (q31_t)0x7fc2b811, (q31_t)0xf82ce9dc, - (q31_t)0x7fc25596, (q31_t)0xf826a462, (q31_t)0x7fc1f2cc, (q31_t)0xf8205eec, (q31_t)0x7fc18fb4, (q31_t)0xf81a197b, (q31_t)0x7fc12c4d, (q31_t)0xf813d410, - (q31_t)0x7fc0c896, (q31_t)0xf80d8ea9, (q31_t)0x7fc06491, (q31_t)0xf8074947, (q31_t)0x7fc0003e, (q31_t)0xf80103ea, (q31_t)0x7fbf9b9b, (q31_t)0xf7fabe92, - (q31_t)0x7fbf36aa, (q31_t)0xf7f4793e, (q31_t)0x7fbed16a, (q31_t)0xf7ee33f0, (q31_t)0x7fbe6bdb, (q31_t)0xf7e7eea7, (q31_t)0x7fbe05fd, (q31_t)0xf7e1a963, - (q31_t)0x7fbd9fd0, (q31_t)0xf7db6423, (q31_t)0x7fbd3955, (q31_t)0xf7d51ee9, (q31_t)0x7fbcd28b, (q31_t)0xf7ced9b4, (q31_t)0x7fbc6b72, (q31_t)0xf7c89484, - (q31_t)0x7fbc040a, (q31_t)0xf7c24f59, (q31_t)0x7fbb9c53, (q31_t)0xf7bc0a33, (q31_t)0x7fbb344e, (q31_t)0xf7b5c512, (q31_t)0x7fbacbfa, (q31_t)0xf7af7ff6, - (q31_t)0x7fba6357, (q31_t)0xf7a93ae0, (q31_t)0x7fb9fa65, (q31_t)0xf7a2f5ce, (q31_t)0x7fb99125, (q31_t)0xf79cb0c2, (q31_t)0x7fb92796, (q31_t)0xf7966bbb, - (q31_t)0x7fb8bdb8, (q31_t)0xf79026b9, (q31_t)0x7fb8538b, (q31_t)0xf789e1bc, (q31_t)0x7fb7e90f, (q31_t)0xf7839cc4, (q31_t)0x7fb77e45, (q31_t)0xf77d57d2, - (q31_t)0x7fb7132b, (q31_t)0xf77712e5, (q31_t)0x7fb6a7c3, (q31_t)0xf770cdfd, (q31_t)0x7fb63c0d, (q31_t)0xf76a891b, (q31_t)0x7fb5d007, (q31_t)0xf764443d, - (q31_t)0x7fb563b3, (q31_t)0xf75dff66, (q31_t)0x7fb4f710, (q31_t)0xf757ba93, (q31_t)0x7fb48a1e, (q31_t)0xf75175c6, (q31_t)0x7fb41cdd, (q31_t)0xf74b30fe, - (q31_t)0x7fb3af4e, (q31_t)0xf744ec3b, (q31_t)0x7fb34170, (q31_t)0xf73ea77e, (q31_t)0x7fb2d343, (q31_t)0xf73862c6, (q31_t)0x7fb264c7, (q31_t)0xf7321e14, - (q31_t)0x7fb1f5fc, (q31_t)0xf72bd967, (q31_t)0x7fb186e3, (q31_t)0xf72594c0, (q31_t)0x7fb1177b, (q31_t)0xf71f501e, (q31_t)0x7fb0a7c4, (q31_t)0xf7190b81, - (q31_t)0x7fb037bf, (q31_t)0xf712c6ea, (q31_t)0x7fafc76a, (q31_t)0xf70c8259, (q31_t)0x7faf56c7, (q31_t)0xf7063dcd, (q31_t)0x7faee5d5, (q31_t)0xf6fff946, - (q31_t)0x7fae7495, (q31_t)0xf6f9b4c6, (q31_t)0x7fae0305, (q31_t)0xf6f3704a, (q31_t)0x7fad9127, (q31_t)0xf6ed2bd4, (q31_t)0x7fad1efa, (q31_t)0xf6e6e764, - (q31_t)0x7facac7f, (q31_t)0xf6e0a2fa, (q31_t)0x7fac39b4, (q31_t)0xf6da5e95, (q31_t)0x7fabc69b, (q31_t)0xf6d41a36, (q31_t)0x7fab5333, (q31_t)0xf6cdd5dc, - (q31_t)0x7faadf7c, (q31_t)0xf6c79188, (q31_t)0x7faa6b77, (q31_t)0xf6c14d3a, (q31_t)0x7fa9f723, (q31_t)0xf6bb08f1, (q31_t)0x7fa98280, (q31_t)0xf6b4c4ae, - (q31_t)0x7fa90d8e, (q31_t)0xf6ae8071, (q31_t)0x7fa8984e, (q31_t)0xf6a83c3a, (q31_t)0x7fa822bf, (q31_t)0xf6a1f808, (q31_t)0x7fa7ace1, (q31_t)0xf69bb3dd, - (q31_t)0x7fa736b4, (q31_t)0xf6956fb7, (q31_t)0x7fa6c039, (q31_t)0xf68f2b96, (q31_t)0x7fa6496e, (q31_t)0xf688e77c, (q31_t)0x7fa5d256, (q31_t)0xf682a367, - (q31_t)0x7fa55aee, (q31_t)0xf67c5f59, (q31_t)0x7fa4e338, (q31_t)0xf6761b50, (q31_t)0x7fa46b32, (q31_t)0xf66fd74d, (q31_t)0x7fa3f2df, (q31_t)0xf6699350, - (q31_t)0x7fa37a3c, (q31_t)0xf6634f59, (q31_t)0x7fa3014b, (q31_t)0xf65d0b68, (q31_t)0x7fa2880b, (q31_t)0xf656c77c, (q31_t)0x7fa20e7c, (q31_t)0xf6508397, - (q31_t)0x7fa1949e, (q31_t)0xf64a3fb8, (q31_t)0x7fa11a72, (q31_t)0xf643fbdf, (q31_t)0x7fa09ff7, (q31_t)0xf63db80b, (q31_t)0x7fa0252e, (q31_t)0xf637743e, - (q31_t)0x7f9faa15, (q31_t)0xf6313077, (q31_t)0x7f9f2eae, (q31_t)0xf62aecb5, (q31_t)0x7f9eb2f8, (q31_t)0xf624a8fa, (q31_t)0x7f9e36f4, (q31_t)0xf61e6545, - (q31_t)0x7f9dbaa0, (q31_t)0xf6182196, (q31_t)0x7f9d3dfe, (q31_t)0xf611dded, (q31_t)0x7f9cc10d, (q31_t)0xf60b9a4b, (q31_t)0x7f9c43ce, (q31_t)0xf60556ae, - (q31_t)0x7f9bc640, (q31_t)0xf5ff1318, (q31_t)0x7f9b4863, (q31_t)0xf5f8cf87, (q31_t)0x7f9aca37, (q31_t)0xf5f28bfd, (q31_t)0x7f9a4bbd, (q31_t)0xf5ec4879, - (q31_t)0x7f99ccf4, (q31_t)0xf5e604fc, (q31_t)0x7f994ddc, (q31_t)0xf5dfc184, (q31_t)0x7f98ce76, (q31_t)0xf5d97e13, (q31_t)0x7f984ec1, (q31_t)0xf5d33aa8, - (q31_t)0x7f97cebd, (q31_t)0xf5ccf743, (q31_t)0x7f974e6a, (q31_t)0xf5c6b3e5, (q31_t)0x7f96cdc9, (q31_t)0xf5c0708d, (q31_t)0x7f964cd9, (q31_t)0xf5ba2d3b, - (q31_t)0x7f95cb9a, (q31_t)0xf5b3e9f0, (q31_t)0x7f954a0d, (q31_t)0xf5ada6ab, (q31_t)0x7f94c831, (q31_t)0xf5a7636c, (q31_t)0x7f944606, (q31_t)0xf5a12034, - (q31_t)0x7f93c38c, (q31_t)0xf59add02, (q31_t)0x7f9340c4, (q31_t)0xf59499d6, (q31_t)0x7f92bdad, (q31_t)0xf58e56b1, (q31_t)0x7f923a48, (q31_t)0xf5881393, - (q31_t)0x7f91b694, (q31_t)0xf581d07b, (q31_t)0x7f913291, (q31_t)0xf57b8d69, (q31_t)0x7f90ae3f, (q31_t)0xf5754a5e, (q31_t)0x7f90299f, (q31_t)0xf56f0759, - (q31_t)0x7f8fa4b0, (q31_t)0xf568c45b, (q31_t)0x7f8f1f72, (q31_t)0xf5628163, (q31_t)0x7f8e99e6, (q31_t)0xf55c3e72, (q31_t)0x7f8e140a, (q31_t)0xf555fb88, - (q31_t)0x7f8d8de1, (q31_t)0xf54fb8a4, (q31_t)0x7f8d0768, (q31_t)0xf54975c6, (q31_t)0x7f8c80a1, (q31_t)0xf54332ef, (q31_t)0x7f8bf98b, (q31_t)0xf53cf01f, - (q31_t)0x7f8b7227, (q31_t)0xf536ad56, (q31_t)0x7f8aea74, (q31_t)0xf5306a93, (q31_t)0x7f8a6272, (q31_t)0xf52a27d7, (q31_t)0x7f89da21, (q31_t)0xf523e521, - (q31_t)0x7f895182, (q31_t)0xf51da273, (q31_t)0x7f88c894, (q31_t)0xf5175fca, (q31_t)0x7f883f58, (q31_t)0xf5111d29, (q31_t)0x7f87b5cd, (q31_t)0xf50ada8f, - (q31_t)0x7f872bf3, (q31_t)0xf50497fb, (q31_t)0x7f86a1ca, (q31_t)0xf4fe556e, (q31_t)0x7f861753, (q31_t)0xf4f812e7, (q31_t)0x7f858c8d, (q31_t)0xf4f1d068, - (q31_t)0x7f850179, (q31_t)0xf4eb8def, (q31_t)0x7f847616, (q31_t)0xf4e54b7d, (q31_t)0x7f83ea64, (q31_t)0xf4df0912, (q31_t)0x7f835e64, (q31_t)0xf4d8c6ae, - (q31_t)0x7f82d214, (q31_t)0xf4d28451, (q31_t)0x7f824577, (q31_t)0xf4cc41fb, (q31_t)0x7f81b88a, (q31_t)0xf4c5ffab, (q31_t)0x7f812b4f, (q31_t)0xf4bfbd63, - (q31_t)0x7f809dc5, (q31_t)0xf4b97b21, (q31_t)0x7f800fed, (q31_t)0xf4b338e7, (q31_t)0x7f7f81c6, (q31_t)0xf4acf6b3, (q31_t)0x7f7ef350, (q31_t)0xf4a6b486, - (q31_t)0x7f7e648c, (q31_t)0xf4a07261, (q31_t)0x7f7dd579, (q31_t)0xf49a3042, (q31_t)0x7f7d4617, (q31_t)0xf493ee2b, (q31_t)0x7f7cb667, (q31_t)0xf48dac1a, - (q31_t)0x7f7c2668, (q31_t)0xf4876a10, (q31_t)0x7f7b961b, (q31_t)0xf481280e, (q31_t)0x7f7b057e, (q31_t)0xf47ae613, (q31_t)0x7f7a7494, (q31_t)0xf474a41f, - (q31_t)0x7f79e35a, (q31_t)0xf46e6231, (q31_t)0x7f7951d2, (q31_t)0xf468204b, (q31_t)0x7f78bffb, (q31_t)0xf461de6d, (q31_t)0x7f782dd6, (q31_t)0xf45b9c95, - (q31_t)0x7f779b62, (q31_t)0xf4555ac5, (q31_t)0x7f77089f, (q31_t)0xf44f18fb, (q31_t)0x7f76758e, (q31_t)0xf448d739, (q31_t)0x7f75e22e, (q31_t)0xf442957e, - (q31_t)0x7f754e80, (q31_t)0xf43c53cb, (q31_t)0x7f74ba83, (q31_t)0xf436121e, (q31_t)0x7f742637, (q31_t)0xf42fd079, (q31_t)0x7f73919d, (q31_t)0xf4298edc, - (q31_t)0x7f72fcb4, (q31_t)0xf4234d45, (q31_t)0x7f72677c, (q31_t)0xf41d0bb6, (q31_t)0x7f71d1f6, (q31_t)0xf416ca2e, (q31_t)0x7f713c21, (q31_t)0xf41088ae, - (q31_t)0x7f70a5fe, (q31_t)0xf40a4735, (q31_t)0x7f700f8c, (q31_t)0xf40405c3, (q31_t)0x7f6f78cb, (q31_t)0xf3fdc459, (q31_t)0x7f6ee1bc, (q31_t)0xf3f782f6, - (q31_t)0x7f6e4a5e, (q31_t)0xf3f1419a, (q31_t)0x7f6db2b1, (q31_t)0xf3eb0046, (q31_t)0x7f6d1ab6, (q31_t)0xf3e4bef9, (q31_t)0x7f6c826d, (q31_t)0xf3de7db4, - (q31_t)0x7f6be9d4, (q31_t)0xf3d83c77, (q31_t)0x7f6b50ed, (q31_t)0xf3d1fb40, (q31_t)0x7f6ab7b8, (q31_t)0xf3cbba12, (q31_t)0x7f6a1e34, (q31_t)0xf3c578eb, - (q31_t)0x7f698461, (q31_t)0xf3bf37cb, (q31_t)0x7f68ea40, (q31_t)0xf3b8f6b3, (q31_t)0x7f684fd0, (q31_t)0xf3b2b5a3, (q31_t)0x7f67b512, (q31_t)0xf3ac749a, - (q31_t)0x7f671a05, (q31_t)0xf3a63398, (q31_t)0x7f667ea9, (q31_t)0xf39ff29f, (q31_t)0x7f65e2ff, (q31_t)0xf399b1ad, (q31_t)0x7f654706, (q31_t)0xf39370c2, - (q31_t)0x7f64aabf, (q31_t)0xf38d2fe0, (q31_t)0x7f640e29, (q31_t)0xf386ef05, (q31_t)0x7f637144, (q31_t)0xf380ae31, (q31_t)0x7f62d411, (q31_t)0xf37a6d66, - (q31_t)0x7f62368f, (q31_t)0xf3742ca2, (q31_t)0x7f6198bf, (q31_t)0xf36debe6, (q31_t)0x7f60faa0, (q31_t)0xf367ab31, (q31_t)0x7f605c33, (q31_t)0xf3616a85, - (q31_t)0x7f5fbd77, (q31_t)0xf35b29e0, (q31_t)0x7f5f1e6c, (q31_t)0xf354e943, (q31_t)0x7f5e7f13, (q31_t)0xf34ea8ae, (q31_t)0x7f5ddf6b, (q31_t)0xf3486820, - (q31_t)0x7f5d3f75, (q31_t)0xf342279b, (q31_t)0x7f5c9f30, (q31_t)0xf33be71d, (q31_t)0x7f5bfe9d, (q31_t)0xf335a6a7, (q31_t)0x7f5b5dbb, (q31_t)0xf32f6639, - (q31_t)0x7f5abc8a, (q31_t)0xf32925d3, (q31_t)0x7f5a1b0b, (q31_t)0xf322e575, (q31_t)0x7f59793e, (q31_t)0xf31ca51f, (q31_t)0x7f58d721, (q31_t)0xf31664d1, - (q31_t)0x7f5834b7, (q31_t)0xf310248a, (q31_t)0x7f5791fd, (q31_t)0xf309e44c, (q31_t)0x7f56eef5, (q31_t)0xf303a416, (q31_t)0x7f564b9f, (q31_t)0xf2fd63e8, - (q31_t)0x7f55a7fa, (q31_t)0xf2f723c1, (q31_t)0x7f550407, (q31_t)0xf2f0e3a3, (q31_t)0x7f545fc5, (q31_t)0xf2eaa38d, (q31_t)0x7f53bb34, (q31_t)0xf2e4637f, - (q31_t)0x7f531655, (q31_t)0xf2de2379, (q31_t)0x7f527127, (q31_t)0xf2d7e37b, (q31_t)0x7f51cbab, (q31_t)0xf2d1a385, (q31_t)0x7f5125e0, (q31_t)0xf2cb6398, - (q31_t)0x7f507fc7, (q31_t)0xf2c523b2, (q31_t)0x7f4fd95f, (q31_t)0xf2bee3d5, (q31_t)0x7f4f32a9, (q31_t)0xf2b8a400, (q31_t)0x7f4e8ba4, (q31_t)0xf2b26433, - (q31_t)0x7f4de451, (q31_t)0xf2ac246e, (q31_t)0x7f4d3caf, (q31_t)0xf2a5e4b1, (q31_t)0x7f4c94be, (q31_t)0xf29fa4fd, (q31_t)0x7f4bec7f, (q31_t)0xf2996551, - (q31_t)0x7f4b43f2, (q31_t)0xf29325ad, (q31_t)0x7f4a9b16, (q31_t)0xf28ce612, (q31_t)0x7f49f1eb, (q31_t)0xf286a67e, (q31_t)0x7f494872, (q31_t)0xf28066f4, - (q31_t)0x7f489eaa, (q31_t)0xf27a2771, (q31_t)0x7f47f494, (q31_t)0xf273e7f7, (q31_t)0x7f474a30, (q31_t)0xf26da885, (q31_t)0x7f469f7d, (q31_t)0xf267691b, - (q31_t)0x7f45f47b, (q31_t)0xf26129ba, (q31_t)0x7f45492b, (q31_t)0xf25aea61, (q31_t)0x7f449d8c, (q31_t)0xf254ab11, (q31_t)0x7f43f19f, (q31_t)0xf24e6bc9, - (q31_t)0x7f434563, (q31_t)0xf2482c8a, (q31_t)0x7f4298d9, (q31_t)0xf241ed53, (q31_t)0x7f41ec01, (q31_t)0xf23bae24, (q31_t)0x7f413ed9, (q31_t)0xf2356efe, - (q31_t)0x7f409164, (q31_t)0xf22f2fe1, (q31_t)0x7f3fe3a0, (q31_t)0xf228f0cc, (q31_t)0x7f3f358d, (q31_t)0xf222b1c0, (q31_t)0x7f3e872c, (q31_t)0xf21c72bc, - (q31_t)0x7f3dd87c, (q31_t)0xf21633c0, (q31_t)0x7f3d297e, (q31_t)0xf20ff4ce, (q31_t)0x7f3c7a31, (q31_t)0xf209b5e4, (q31_t)0x7f3bca96, (q31_t)0xf2037702, - (q31_t)0x7f3b1aad, (q31_t)0xf1fd3829, (q31_t)0x7f3a6a75, (q31_t)0xf1f6f959, (q31_t)0x7f39b9ee, (q31_t)0xf1f0ba91, (q31_t)0x7f390919, (q31_t)0xf1ea7bd2, - (q31_t)0x7f3857f6, (q31_t)0xf1e43d1c, (q31_t)0x7f37a684, (q31_t)0xf1ddfe6f, (q31_t)0x7f36f4c3, (q31_t)0xf1d7bfca, (q31_t)0x7f3642b4, (q31_t)0xf1d1812e, - (q31_t)0x7f359057, (q31_t)0xf1cb429a, (q31_t)0x7f34ddab, (q31_t)0xf1c50410, (q31_t)0x7f342ab1, (q31_t)0xf1bec58e, (q31_t)0x7f337768, (q31_t)0xf1b88715, - (q31_t)0x7f32c3d1, (q31_t)0xf1b248a5, (q31_t)0x7f320feb, (q31_t)0xf1ac0a3e, (q31_t)0x7f315bb7, (q31_t)0xf1a5cbdf, (q31_t)0x7f30a734, (q31_t)0xf19f8d89, - (q31_t)0x7f2ff263, (q31_t)0xf1994f3d, (q31_t)0x7f2f3d44, (q31_t)0xf19310f9, (q31_t)0x7f2e87d6, (q31_t)0xf18cd2be, (q31_t)0x7f2dd219, (q31_t)0xf186948c, - (q31_t)0x7f2d1c0e, (q31_t)0xf1805662, (q31_t)0x7f2c65b5, (q31_t)0xf17a1842, (q31_t)0x7f2baf0d, (q31_t)0xf173da2b, (q31_t)0x7f2af817, (q31_t)0xf16d9c1d, - (q31_t)0x7f2a40d2, (q31_t)0xf1675e17, (q31_t)0x7f29893f, (q31_t)0xf161201b, (q31_t)0x7f28d15d, (q31_t)0xf15ae228, (q31_t)0x7f28192d, (q31_t)0xf154a43d, - (q31_t)0x7f2760af, (q31_t)0xf14e665c, (q31_t)0x7f26a7e2, (q31_t)0xf1482884, (q31_t)0x7f25eec7, (q31_t)0xf141eab5, (q31_t)0x7f25355d, (q31_t)0xf13bacef, - (q31_t)0x7f247ba5, (q31_t)0xf1356f32, (q31_t)0x7f23c19e, (q31_t)0xf12f317e, (q31_t)0x7f230749, (q31_t)0xf128f3d4, (q31_t)0x7f224ca6, (q31_t)0xf122b632, - (q31_t)0x7f2191b4, (q31_t)0xf11c789a, (q31_t)0x7f20d674, (q31_t)0xf1163b0b, (q31_t)0x7f201ae5, (q31_t)0xf10ffd85, (q31_t)0x7f1f5f08, (q31_t)0xf109c009, - (q31_t)0x7f1ea2dc, (q31_t)0xf1038295, (q31_t)0x7f1de662, (q31_t)0xf0fd452b, (q31_t)0x7f1d299a, (q31_t)0xf0f707ca, (q31_t)0x7f1c6c83, (q31_t)0xf0f0ca72, - (q31_t)0x7f1baf1e, (q31_t)0xf0ea8d24, (q31_t)0x7f1af16a, (q31_t)0xf0e44fdf, (q31_t)0x7f1a3368, (q31_t)0xf0de12a3, (q31_t)0x7f197518, (q31_t)0xf0d7d571, - (q31_t)0x7f18b679, (q31_t)0xf0d19848, (q31_t)0x7f17f78c, (q31_t)0xf0cb5b28, (q31_t)0x7f173850, (q31_t)0xf0c51e12, (q31_t)0x7f1678c6, (q31_t)0xf0bee105, - (q31_t)0x7f15b8ee, (q31_t)0xf0b8a401, (q31_t)0x7f14f8c7, (q31_t)0xf0b26707, (q31_t)0x7f143852, (q31_t)0xf0ac2a16, (q31_t)0x7f13778e, (q31_t)0xf0a5ed2f, - (q31_t)0x7f12b67c, (q31_t)0xf09fb051, (q31_t)0x7f11f51c, (q31_t)0xf099737d, (q31_t)0x7f11336d, (q31_t)0xf09336b2, (q31_t)0x7f107170, (q31_t)0xf08cf9f1, - (q31_t)0x7f0faf25, (q31_t)0xf086bd39, (q31_t)0x7f0eec8b, (q31_t)0xf080808b, (q31_t)0x7f0e29a3, (q31_t)0xf07a43e7, (q31_t)0x7f0d666c, (q31_t)0xf074074c, - (q31_t)0x7f0ca2e7, (q31_t)0xf06dcaba, (q31_t)0x7f0bdf14, (q31_t)0xf0678e32, (q31_t)0x7f0b1af2, (q31_t)0xf06151b4, (q31_t)0x7f0a5682, (q31_t)0xf05b1540, - (q31_t)0x7f0991c4, (q31_t)0xf054d8d5, (q31_t)0x7f08ccb7, (q31_t)0xf04e9c73, (q31_t)0x7f08075c, (q31_t)0xf048601c, (q31_t)0x7f0741b2, (q31_t)0xf04223ce, - (q31_t)0x7f067bba, (q31_t)0xf03be78a, (q31_t)0x7f05b574, (q31_t)0xf035ab4f, (q31_t)0x7f04eedf, (q31_t)0xf02f6f1f, (q31_t)0x7f0427fc, (q31_t)0xf02932f8, - (q31_t)0x7f0360cb, (q31_t)0xf022f6da, (q31_t)0x7f02994b, (q31_t)0xf01cbac7, (q31_t)0x7f01d17d, (q31_t)0xf0167ebd, (q31_t)0x7f010961, (q31_t)0xf01042be, - (q31_t)0x7f0040f6, (q31_t)0xf00a06c8, (q31_t)0x7eff783d, (q31_t)0xf003cadc, (q31_t)0x7efeaf36, (q31_t)0xeffd8ef9, (q31_t)0x7efde5e0, (q31_t)0xeff75321, - (q31_t)0x7efd1c3c, (q31_t)0xeff11753, (q31_t)0x7efc524a, (q31_t)0xefeadb8e, (q31_t)0x7efb8809, (q31_t)0xefe49fd3, (q31_t)0x7efabd7a, (q31_t)0xefde6423, - (q31_t)0x7ef9f29d, (q31_t)0xefd8287c, (q31_t)0x7ef92771, (q31_t)0xefd1ecdf, (q31_t)0x7ef85bf7, (q31_t)0xefcbb14c, (q31_t)0x7ef7902f, (q31_t)0xefc575c3, - (q31_t)0x7ef6c418, (q31_t)0xefbf3a45, (q31_t)0x7ef5f7b3, (q31_t)0xefb8fed0, (q31_t)0x7ef52b00, (q31_t)0xefb2c365, (q31_t)0x7ef45dfe, (q31_t)0xefac8804, - (q31_t)0x7ef390ae, (q31_t)0xefa64cae, (q31_t)0x7ef2c310, (q31_t)0xefa01161, (q31_t)0x7ef1f524, (q31_t)0xef99d61f, (q31_t)0x7ef126e9, (q31_t)0xef939ae6, - (q31_t)0x7ef05860, (q31_t)0xef8d5fb8, (q31_t)0x7eef8988, (q31_t)0xef872494, (q31_t)0x7eeeba62, (q31_t)0xef80e97a, (q31_t)0x7eedeaee, (q31_t)0xef7aae6b, - (q31_t)0x7eed1b2c, (q31_t)0xef747365, (q31_t)0x7eec4b1b, (q31_t)0xef6e386a, (q31_t)0x7eeb7abc, (q31_t)0xef67fd79, (q31_t)0x7eeaaa0f, (q31_t)0xef61c292, - (q31_t)0x7ee9d914, (q31_t)0xef5b87b5, (q31_t)0x7ee907ca, (q31_t)0xef554ce3, (q31_t)0x7ee83632, (q31_t)0xef4f121b, (q31_t)0x7ee7644c, (q31_t)0xef48d75d, - (q31_t)0x7ee69217, (q31_t)0xef429caa, (q31_t)0x7ee5bf94, (q31_t)0xef3c6201, (q31_t)0x7ee4ecc3, (q31_t)0xef362762, (q31_t)0x7ee419a3, (q31_t)0xef2feccd, - (q31_t)0x7ee34636, (q31_t)0xef29b243, (q31_t)0x7ee2727a, (q31_t)0xef2377c4, (q31_t)0x7ee19e6f, (q31_t)0xef1d3d4e, (q31_t)0x7ee0ca17, (q31_t)0xef1702e4, - (q31_t)0x7edff570, (q31_t)0xef10c883, (q31_t)0x7edf207b, (q31_t)0xef0a8e2d, (q31_t)0x7ede4b38, (q31_t)0xef0453e2, (q31_t)0x7edd75a6, (q31_t)0xeefe19a1, - (q31_t)0x7edc9fc6, (q31_t)0xeef7df6a, (q31_t)0x7edbc998, (q31_t)0xeef1a53e, (q31_t)0x7edaf31c, (q31_t)0xeeeb6b1c, (q31_t)0x7eda1c51, (q31_t)0xeee53105, - (q31_t)0x7ed94538, (q31_t)0xeedef6f9, (q31_t)0x7ed86dd1, (q31_t)0xeed8bcf7, (q31_t)0x7ed7961c, (q31_t)0xeed28300, (q31_t)0x7ed6be18, (q31_t)0xeecc4913, - (q31_t)0x7ed5e5c6, (q31_t)0xeec60f31, (q31_t)0x7ed50d26, (q31_t)0xeebfd55a, (q31_t)0x7ed43438, (q31_t)0xeeb99b8d, (q31_t)0x7ed35afb, (q31_t)0xeeb361cb, - (q31_t)0x7ed28171, (q31_t)0xeead2813, (q31_t)0x7ed1a798, (q31_t)0xeea6ee66, (q31_t)0x7ed0cd70, (q31_t)0xeea0b4c4, (q31_t)0x7ecff2fb, (q31_t)0xee9a7b2d, - (q31_t)0x7ecf1837, (q31_t)0xee9441a0, (q31_t)0x7ece3d25, (q31_t)0xee8e081e, (q31_t)0x7ecd61c5, (q31_t)0xee87cea7, (q31_t)0x7ecc8617, (q31_t)0xee81953b, - (q31_t)0x7ecbaa1a, (q31_t)0xee7b5bd9, (q31_t)0x7ecacdd0, (q31_t)0xee752283, (q31_t)0x7ec9f137, (q31_t)0xee6ee937, (q31_t)0x7ec9144f, (q31_t)0xee68aff6, - (q31_t)0x7ec8371a, (q31_t)0xee6276bf, (q31_t)0x7ec75996, (q31_t)0xee5c3d94, (q31_t)0x7ec67bc5, (q31_t)0xee560473, (q31_t)0x7ec59da5, (q31_t)0xee4fcb5e, - (q31_t)0x7ec4bf36, (q31_t)0xee499253, (q31_t)0x7ec3e07a, (q31_t)0xee435953, (q31_t)0x7ec3016f, (q31_t)0xee3d205e, (q31_t)0x7ec22217, (q31_t)0xee36e775, - (q31_t)0x7ec14270, (q31_t)0xee30ae96, (q31_t)0x7ec0627a, (q31_t)0xee2a75c2, (q31_t)0x7ebf8237, (q31_t)0xee243cf9, (q31_t)0x7ebea1a6, (q31_t)0xee1e043b, - (q31_t)0x7ebdc0c6, (q31_t)0xee17cb88, (q31_t)0x7ebcdf98, (q31_t)0xee1192e0, (q31_t)0x7ebbfe1c, (q31_t)0xee0b5a43, (q31_t)0x7ebb1c52, (q31_t)0xee0521b2, - (q31_t)0x7eba3a39, (q31_t)0xedfee92b, (q31_t)0x7eb957d2, (q31_t)0xedf8b0b0, (q31_t)0x7eb8751e, (q31_t)0xedf2783f, (q31_t)0x7eb7921b, (q31_t)0xedec3fda, - (q31_t)0x7eb6aeca, (q31_t)0xede60780, (q31_t)0x7eb5cb2a, (q31_t)0xeddfcf31, (q31_t)0x7eb4e73d, (q31_t)0xedd996ed, (q31_t)0x7eb40301, (q31_t)0xedd35eb5, - (q31_t)0x7eb31e78, (q31_t)0xedcd2687, (q31_t)0x7eb239a0, (q31_t)0xedc6ee65, (q31_t)0x7eb1547a, (q31_t)0xedc0b64e, (q31_t)0x7eb06f05, (q31_t)0xedba7e43, - (q31_t)0x7eaf8943, (q31_t)0xedb44642, (q31_t)0x7eaea333, (q31_t)0xedae0e4d, (q31_t)0x7eadbcd4, (q31_t)0xeda7d664, (q31_t)0x7eacd627, (q31_t)0xeda19e85, - (q31_t)0x7eabef2c, (q31_t)0xed9b66b2, (q31_t)0x7eab07e3, (q31_t)0xed952eea, (q31_t)0x7eaa204c, (q31_t)0xed8ef72e, (q31_t)0x7ea93867, (q31_t)0xed88bf7d, - (q31_t)0x7ea85033, (q31_t)0xed8287d7, (q31_t)0x7ea767b2, (q31_t)0xed7c503d, (q31_t)0x7ea67ee2, (q31_t)0xed7618ae, (q31_t)0x7ea595c4, (q31_t)0xed6fe12b, - (q31_t)0x7ea4ac58, (q31_t)0xed69a9b3, (q31_t)0x7ea3c29e, (q31_t)0xed637246, (q31_t)0x7ea2d896, (q31_t)0xed5d3ae5, (q31_t)0x7ea1ee3f, (q31_t)0xed570390, - (q31_t)0x7ea1039b, (q31_t)0xed50cc46, (q31_t)0x7ea018a8, (q31_t)0xed4a9507, (q31_t)0x7e9f2d68, (q31_t)0xed445dd5, (q31_t)0x7e9e41d9, (q31_t)0xed3e26ad, - (q31_t)0x7e9d55fc, (q31_t)0xed37ef91, (q31_t)0x7e9c69d1, (q31_t)0xed31b881, (q31_t)0x7e9b7d58, (q31_t)0xed2b817d, (q31_t)0x7e9a9091, (q31_t)0xed254a84, - (q31_t)0x7e99a37c, (q31_t)0xed1f1396, (q31_t)0x7e98b618, (q31_t)0xed18dcb5, (q31_t)0x7e97c867, (q31_t)0xed12a5df, (q31_t)0x7e96da67, (q31_t)0xed0c6f14, - (q31_t)0x7e95ec1a, (q31_t)0xed063856, (q31_t)0x7e94fd7e, (q31_t)0xed0001a3, (q31_t)0x7e940e94, (q31_t)0xecf9cafb, (q31_t)0x7e931f5c, (q31_t)0xecf39460, - (q31_t)0x7e922fd6, (q31_t)0xeced5dd0, (q31_t)0x7e914002, (q31_t)0xece7274c, (q31_t)0x7e904fe0, (q31_t)0xece0f0d4, (q31_t)0x7e8f5f70, (q31_t)0xecdaba67, - (q31_t)0x7e8e6eb2, (q31_t)0xecd48407, (q31_t)0x7e8d7da6, (q31_t)0xecce4db2, (q31_t)0x7e8c8c4b, (q31_t)0xecc81769, (q31_t)0x7e8b9aa3, (q31_t)0xecc1e12c, - (q31_t)0x7e8aa8ac, (q31_t)0xecbbaafb, (q31_t)0x7e89b668, (q31_t)0xecb574d5, (q31_t)0x7e88c3d5, (q31_t)0xecaf3ebc, (q31_t)0x7e87d0f5, (q31_t)0xeca908ae, - (q31_t)0x7e86ddc6, (q31_t)0xeca2d2ad, (q31_t)0x7e85ea49, (q31_t)0xec9c9cb7, (q31_t)0x7e84f67e, (q31_t)0xec9666cd, (q31_t)0x7e840265, (q31_t)0xec9030f0, - (q31_t)0x7e830dff, (q31_t)0xec89fb1e, (q31_t)0x7e82194a, (q31_t)0xec83c558, (q31_t)0x7e812447, (q31_t)0xec7d8f9e, (q31_t)0x7e802ef6, (q31_t)0xec7759f1, - (q31_t)0x7e7f3957, (q31_t)0xec71244f, (q31_t)0x7e7e436a, (q31_t)0xec6aeeba, (q31_t)0x7e7d4d2f, (q31_t)0xec64b930, (q31_t)0x7e7c56a5, (q31_t)0xec5e83b3, - (q31_t)0x7e7b5fce, (q31_t)0xec584e41, (q31_t)0x7e7a68a9, (q31_t)0xec5218dc, (q31_t)0x7e797136, (q31_t)0xec4be383, (q31_t)0x7e787975, (q31_t)0xec45ae36, - (q31_t)0x7e778166, (q31_t)0xec3f78f6, (q31_t)0x7e768908, (q31_t)0xec3943c1, (q31_t)0x7e75905d, (q31_t)0xec330e99, (q31_t)0x7e749764, (q31_t)0xec2cd97d, - (q31_t)0x7e739e1d, (q31_t)0xec26a46d, (q31_t)0x7e72a488, (q31_t)0xec206f69, (q31_t)0x7e71aaa4, (q31_t)0xec1a3a72, (q31_t)0x7e70b073, (q31_t)0xec140587, - (q31_t)0x7e6fb5f4, (q31_t)0xec0dd0a8, (q31_t)0x7e6ebb27, (q31_t)0xec079bd6, (q31_t)0x7e6dc00c, (q31_t)0xec01670f, (q31_t)0x7e6cc4a2, (q31_t)0xebfb3256, - (q31_t)0x7e6bc8eb, (q31_t)0xebf4fda8, (q31_t)0x7e6acce6, (q31_t)0xebeec907, (q31_t)0x7e69d093, (q31_t)0xebe89472, (q31_t)0x7e68d3f2, (q31_t)0xebe25fea, - (q31_t)0x7e67d703, (q31_t)0xebdc2b6e, (q31_t)0x7e66d9c6, (q31_t)0xebd5f6fe, (q31_t)0x7e65dc3b, (q31_t)0xebcfc29b, (q31_t)0x7e64de62, (q31_t)0xebc98e45, - (q31_t)0x7e63e03b, (q31_t)0xebc359fb, (q31_t)0x7e62e1c6, (q31_t)0xebbd25bd, (q31_t)0x7e61e303, (q31_t)0xebb6f18c, (q31_t)0x7e60e3f2, (q31_t)0xebb0bd67, - (q31_t)0x7e5fe493, (q31_t)0xebaa894f, (q31_t)0x7e5ee4e6, (q31_t)0xeba45543, (q31_t)0x7e5de4ec, (q31_t)0xeb9e2144, (q31_t)0x7e5ce4a3, (q31_t)0xeb97ed52, - (q31_t)0x7e5be40c, (q31_t)0xeb91b96c, (q31_t)0x7e5ae328, (q31_t)0xeb8b8593, (q31_t)0x7e59e1f5, (q31_t)0xeb8551c6, (q31_t)0x7e58e075, (q31_t)0xeb7f1e06, - (q31_t)0x7e57dea7, (q31_t)0xeb78ea52, (q31_t)0x7e56dc8a, (q31_t)0xeb72b6ac, (q31_t)0x7e55da20, (q31_t)0xeb6c8312, (q31_t)0x7e54d768, (q31_t)0xeb664f84, - (q31_t)0x7e53d462, (q31_t)0xeb601c04, (q31_t)0x7e52d10e, (q31_t)0xeb59e890, (q31_t)0x7e51cd6c, (q31_t)0xeb53b529, (q31_t)0x7e50c97c, (q31_t)0xeb4d81ce, - (q31_t)0x7e4fc53e, (q31_t)0xeb474e81, (q31_t)0x7e4ec0b2, (q31_t)0xeb411b40, (q31_t)0x7e4dbbd9, (q31_t)0xeb3ae80c, (q31_t)0x7e4cb6b1, (q31_t)0xeb34b4e4, - (q31_t)0x7e4bb13c, (q31_t)0xeb2e81ca, (q31_t)0x7e4aab78, (q31_t)0xeb284ebc, (q31_t)0x7e49a567, (q31_t)0xeb221bbb, (q31_t)0x7e489f08, (q31_t)0xeb1be8c8, - (q31_t)0x7e47985b, (q31_t)0xeb15b5e1, (q31_t)0x7e469160, (q31_t)0xeb0f8307, (q31_t)0x7e458a17, (q31_t)0xeb095039, (q31_t)0x7e448281, (q31_t)0xeb031d79, - (q31_t)0x7e437a9c, (q31_t)0xeafceac6, (q31_t)0x7e427269, (q31_t)0xeaf6b81f, (q31_t)0x7e4169e9, (q31_t)0xeaf08586, (q31_t)0x7e40611b, (q31_t)0xeaea52fa, - (q31_t)0x7e3f57ff, (q31_t)0xeae4207a, (q31_t)0x7e3e4e95, (q31_t)0xeaddee08, (q31_t)0x7e3d44dd, (q31_t)0xead7bba3, (q31_t)0x7e3c3ad7, (q31_t)0xead1894b, - (q31_t)0x7e3b3083, (q31_t)0xeacb56ff, (q31_t)0x7e3a25e2, (q31_t)0xeac524c1, (q31_t)0x7e391af3, (q31_t)0xeabef290, (q31_t)0x7e380fb5, (q31_t)0xeab8c06c, - (q31_t)0x7e37042a, (q31_t)0xeab28e56, (q31_t)0x7e35f851, (q31_t)0xeaac5c4c, (q31_t)0x7e34ec2b, (q31_t)0xeaa62a4f, (q31_t)0x7e33dfb6, (q31_t)0xea9ff860, - (q31_t)0x7e32d2f4, (q31_t)0xea99c67e, (q31_t)0x7e31c5e3, (q31_t)0xea9394a9, (q31_t)0x7e30b885, (q31_t)0xea8d62e1, (q31_t)0x7e2faad9, (q31_t)0xea873127, - (q31_t)0x7e2e9cdf, (q31_t)0xea80ff7a, (q31_t)0x7e2d8e97, (q31_t)0xea7acdda, (q31_t)0x7e2c8002, (q31_t)0xea749c47, (q31_t)0x7e2b711f, (q31_t)0xea6e6ac2, - (q31_t)0x7e2a61ed, (q31_t)0xea683949, (q31_t)0x7e29526e, (q31_t)0xea6207df, (q31_t)0x7e2842a2, (q31_t)0xea5bd681, (q31_t)0x7e273287, (q31_t)0xea55a531, - (q31_t)0x7e26221f, (q31_t)0xea4f73ee, (q31_t)0x7e251168, (q31_t)0xea4942b9, (q31_t)0x7e240064, (q31_t)0xea431191, (q31_t)0x7e22ef12, (q31_t)0xea3ce077, - (q31_t)0x7e21dd73, (q31_t)0xea36af69, (q31_t)0x7e20cb85, (q31_t)0xea307e6a, (q31_t)0x7e1fb94a, (q31_t)0xea2a4d78, (q31_t)0x7e1ea6c1, (q31_t)0xea241c93, - (q31_t)0x7e1d93ea, (q31_t)0xea1debbb, (q31_t)0x7e1c80c5, (q31_t)0xea17baf2, (q31_t)0x7e1b6d53, (q31_t)0xea118a35, (q31_t)0x7e1a5992, (q31_t)0xea0b5987, - (q31_t)0x7e194584, (q31_t)0xea0528e5, (q31_t)0x7e183128, (q31_t)0xe9fef852, (q31_t)0x7e171c7f, (q31_t)0xe9f8c7cc, (q31_t)0x7e160787, (q31_t)0xe9f29753, - (q31_t)0x7e14f242, (q31_t)0xe9ec66e8, (q31_t)0x7e13dcaf, (q31_t)0xe9e6368b, (q31_t)0x7e12c6ce, (q31_t)0xe9e0063c, (q31_t)0x7e11b0a0, (q31_t)0xe9d9d5fa, - (q31_t)0x7e109a24, (q31_t)0xe9d3a5c5, (q31_t)0x7e0f835a, (q31_t)0xe9cd759f, (q31_t)0x7e0e6c42, (q31_t)0xe9c74586, (q31_t)0x7e0d54dc, (q31_t)0xe9c1157a, - (q31_t)0x7e0c3d29, (q31_t)0xe9bae57d, (q31_t)0x7e0b2528, (q31_t)0xe9b4b58d, (q31_t)0x7e0a0cd9, (q31_t)0xe9ae85ab, (q31_t)0x7e08f43d, (q31_t)0xe9a855d7, - (q31_t)0x7e07db52, (q31_t)0xe9a22610, (q31_t)0x7e06c21a, (q31_t)0xe99bf658, (q31_t)0x7e05a894, (q31_t)0xe995c6ad, (q31_t)0x7e048ec1, (q31_t)0xe98f9710, - (q31_t)0x7e0374a0, (q31_t)0xe9896781, (q31_t)0x7e025a31, (q31_t)0xe98337ff, (q31_t)0x7e013f74, (q31_t)0xe97d088c, (q31_t)0x7e00246a, (q31_t)0xe976d926, - (q31_t)0x7dff0911, (q31_t)0xe970a9ce, (q31_t)0x7dfded6c, (q31_t)0xe96a7a85, (q31_t)0x7dfcd178, (q31_t)0xe9644b49, (q31_t)0x7dfbb537, (q31_t)0xe95e1c1b, - (q31_t)0x7dfa98a8, (q31_t)0xe957ecfb, (q31_t)0x7df97bcb, (q31_t)0xe951bde9, (q31_t)0x7df85ea0, (q31_t)0xe94b8ee5, (q31_t)0x7df74128, (q31_t)0xe9455fef, - (q31_t)0x7df62362, (q31_t)0xe93f3107, (q31_t)0x7df5054f, (q31_t)0xe939022d, (q31_t)0x7df3e6ee, (q31_t)0xe932d361, (q31_t)0x7df2c83f, (q31_t)0xe92ca4a4, - (q31_t)0x7df1a942, (q31_t)0xe92675f4, (q31_t)0x7df089f8, (q31_t)0xe9204752, (q31_t)0x7def6a60, (q31_t)0xe91a18bf, (q31_t)0x7dee4a7a, (q31_t)0xe913ea39, - (q31_t)0x7ded2a47, (q31_t)0xe90dbbc2, (q31_t)0x7dec09c6, (q31_t)0xe9078d59, (q31_t)0x7deae8f7, (q31_t)0xe9015efe, (q31_t)0x7de9c7da, (q31_t)0xe8fb30b1, - (q31_t)0x7de8a670, (q31_t)0xe8f50273, (q31_t)0x7de784b9, (q31_t)0xe8eed443, (q31_t)0x7de662b3, (q31_t)0xe8e8a621, (q31_t)0x7de54060, (q31_t)0xe8e2780d, - (q31_t)0x7de41dc0, (q31_t)0xe8dc4a07, (q31_t)0x7de2fad1, (q31_t)0xe8d61c10, (q31_t)0x7de1d795, (q31_t)0xe8cfee27, (q31_t)0x7de0b40b, (q31_t)0xe8c9c04c, - (q31_t)0x7ddf9034, (q31_t)0xe8c39280, (q31_t)0x7dde6c0f, (q31_t)0xe8bd64c2, (q31_t)0x7ddd479d, (q31_t)0xe8b73712, (q31_t)0x7ddc22dc, (q31_t)0xe8b10971, - (q31_t)0x7ddafdce, (q31_t)0xe8aadbde, (q31_t)0x7dd9d873, (q31_t)0xe8a4ae59, (q31_t)0x7dd8b2ca, (q31_t)0xe89e80e3, (q31_t)0x7dd78cd3, (q31_t)0xe898537b, - (q31_t)0x7dd6668f, (q31_t)0xe8922622, (q31_t)0x7dd53ffc, (q31_t)0xe88bf8d7, (q31_t)0x7dd4191d, (q31_t)0xe885cb9a, (q31_t)0x7dd2f1f0, (q31_t)0xe87f9e6c, - (q31_t)0x7dd1ca75, (q31_t)0xe879714d, (q31_t)0x7dd0a2ac, (q31_t)0xe873443c, (q31_t)0x7dcf7a96, (q31_t)0xe86d173a, (q31_t)0x7dce5232, (q31_t)0xe866ea46, - (q31_t)0x7dcd2981, (q31_t)0xe860bd61, (q31_t)0x7dcc0082, (q31_t)0xe85a908a, (q31_t)0x7dcad736, (q31_t)0xe85463c2, (q31_t)0x7dc9ad9c, (q31_t)0xe84e3708, - (q31_t)0x7dc883b4, (q31_t)0xe8480a5d, (q31_t)0x7dc7597f, (q31_t)0xe841ddc1, (q31_t)0x7dc62efc, (q31_t)0xe83bb133, (q31_t)0x7dc5042b, (q31_t)0xe83584b4, - (q31_t)0x7dc3d90d, (q31_t)0xe82f5844, (q31_t)0x7dc2ada2, (q31_t)0xe8292be3, (q31_t)0x7dc181e8, (q31_t)0xe822ff90, (q31_t)0x7dc055e2, (q31_t)0xe81cd34b, - (q31_t)0x7dbf298d, (q31_t)0xe816a716, (q31_t)0x7dbdfceb, (q31_t)0xe8107aef, (q31_t)0x7dbccffc, (q31_t)0xe80a4ed7, (q31_t)0x7dbba2bf, (q31_t)0xe80422ce, - (q31_t)0x7dba7534, (q31_t)0xe7fdf6d4, (q31_t)0x7db9475c, (q31_t)0xe7f7cae8, (q31_t)0x7db81936, (q31_t)0xe7f19f0c, (q31_t)0x7db6eac3, (q31_t)0xe7eb733e, - (q31_t)0x7db5bc02, (q31_t)0xe7e5477f, (q31_t)0x7db48cf4, (q31_t)0xe7df1bcf, (q31_t)0x7db35d98, (q31_t)0xe7d8f02d, (q31_t)0x7db22def, (q31_t)0xe7d2c49b, - (q31_t)0x7db0fdf8, (q31_t)0xe7cc9917, (q31_t)0x7dafcdb3, (q31_t)0xe7c66da3, (q31_t)0x7dae9d21, (q31_t)0xe7c0423d, (q31_t)0x7dad6c42, (q31_t)0xe7ba16e7, - (q31_t)0x7dac3b15, (q31_t)0xe7b3eb9f, (q31_t)0x7dab099a, (q31_t)0xe7adc066, (q31_t)0x7da9d7d2, (q31_t)0xe7a7953d, (q31_t)0x7da8a5bc, (q31_t)0xe7a16a22, - (q31_t)0x7da77359, (q31_t)0xe79b3f16, (q31_t)0x7da640a9, (q31_t)0xe795141a, (q31_t)0x7da50dab, (q31_t)0xe78ee92c, (q31_t)0x7da3da5f, (q31_t)0xe788be4e, - (q31_t)0x7da2a6c6, (q31_t)0xe782937e, (q31_t)0x7da172df, (q31_t)0xe77c68be, (q31_t)0x7da03eab, (q31_t)0xe7763e0d, (q31_t)0x7d9f0a29, (q31_t)0xe770136b, - (q31_t)0x7d9dd55a, (q31_t)0xe769e8d8, (q31_t)0x7d9ca03e, (q31_t)0xe763be55, (q31_t)0x7d9b6ad3, (q31_t)0xe75d93e0, (q31_t)0x7d9a351c, (q31_t)0xe757697b, - (q31_t)0x7d98ff17, (q31_t)0xe7513f25, (q31_t)0x7d97c8c4, (q31_t)0xe74b14de, (q31_t)0x7d969224, (q31_t)0xe744eaa6, (q31_t)0x7d955b37, (q31_t)0xe73ec07e, - (q31_t)0x7d9423fc, (q31_t)0xe7389665, (q31_t)0x7d92ec73, (q31_t)0xe7326c5b, (q31_t)0x7d91b49e, (q31_t)0xe72c4260, (q31_t)0x7d907c7a, (q31_t)0xe7261875, - (q31_t)0x7d8f4409, (q31_t)0xe71fee99, (q31_t)0x7d8e0b4b, (q31_t)0xe719c4cd, (q31_t)0x7d8cd240, (q31_t)0xe7139b10, (q31_t)0x7d8b98e6, (q31_t)0xe70d7162, - (q31_t)0x7d8a5f40, (q31_t)0xe70747c4, (q31_t)0x7d89254c, (q31_t)0xe7011e35, (q31_t)0x7d87eb0a, (q31_t)0xe6faf4b5, (q31_t)0x7d86b07c, (q31_t)0xe6f4cb45, - (q31_t)0x7d85759f, (q31_t)0xe6eea1e4, (q31_t)0x7d843a76, (q31_t)0xe6e87893, (q31_t)0x7d82fefe, (q31_t)0xe6e24f51, (q31_t)0x7d81c33a, (q31_t)0xe6dc261f, - (q31_t)0x7d808728, (q31_t)0xe6d5fcfc, (q31_t)0x7d7f4ac8, (q31_t)0xe6cfd3e9, (q31_t)0x7d7e0e1c, (q31_t)0xe6c9aae5, (q31_t)0x7d7cd121, (q31_t)0xe6c381f1, - (q31_t)0x7d7b93da, (q31_t)0xe6bd590d, (q31_t)0x7d7a5645, (q31_t)0xe6b73038, (q31_t)0x7d791862, (q31_t)0xe6b10772, (q31_t)0x7d77da32, (q31_t)0xe6aadebc, - (q31_t)0x7d769bb5, (q31_t)0xe6a4b616, (q31_t)0x7d755cea, (q31_t)0xe69e8d80, (q31_t)0x7d741dd2, (q31_t)0xe69864f9, (q31_t)0x7d72de6d, (q31_t)0xe6923c82, - (q31_t)0x7d719eba, (q31_t)0xe68c141a, (q31_t)0x7d705eba, (q31_t)0xe685ebc2, (q31_t)0x7d6f1e6c, (q31_t)0xe67fc37a, (q31_t)0x7d6dddd2, (q31_t)0xe6799b42, - (q31_t)0x7d6c9ce9, (q31_t)0xe6737319, (q31_t)0x7d6b5bb4, (q31_t)0xe66d4b01, (q31_t)0x7d6a1a31, (q31_t)0xe66722f7, (q31_t)0x7d68d860, (q31_t)0xe660fafe, - (q31_t)0x7d679642, (q31_t)0xe65ad315, (q31_t)0x7d6653d7, (q31_t)0xe654ab3b, (q31_t)0x7d65111f, (q31_t)0xe64e8371, (q31_t)0x7d63ce19, (q31_t)0xe6485bb7, - (q31_t)0x7d628ac6, (q31_t)0xe642340d, (q31_t)0x7d614725, (q31_t)0xe63c0c73, (q31_t)0x7d600338, (q31_t)0xe635e4e9, (q31_t)0x7d5ebefc, (q31_t)0xe62fbd6e, - (q31_t)0x7d5d7a74, (q31_t)0xe6299604, (q31_t)0x7d5c359e, (q31_t)0xe6236ea9, (q31_t)0x7d5af07b, (q31_t)0xe61d475e, (q31_t)0x7d59ab0a, (q31_t)0xe6172024, - (q31_t)0x7d58654d, (q31_t)0xe610f8f9, (q31_t)0x7d571f41, (q31_t)0xe60ad1de, (q31_t)0x7d55d8e9, (q31_t)0xe604aad4, (q31_t)0x7d549243, (q31_t)0xe5fe83d9, - (q31_t)0x7d534b50, (q31_t)0xe5f85cef, (q31_t)0x7d520410, (q31_t)0xe5f23614, (q31_t)0x7d50bc82, (q31_t)0xe5ec0f4a, (q31_t)0x7d4f74a7, (q31_t)0xe5e5e88f, - (q31_t)0x7d4e2c7f, (q31_t)0xe5dfc1e5, (q31_t)0x7d4ce409, (q31_t)0xe5d99b4b, (q31_t)0x7d4b9b46, (q31_t)0xe5d374c1, (q31_t)0x7d4a5236, (q31_t)0xe5cd4e47, - (q31_t)0x7d4908d9, (q31_t)0xe5c727dd, (q31_t)0x7d47bf2e, (q31_t)0xe5c10184, (q31_t)0x7d467536, (q31_t)0xe5badb3a, (q31_t)0x7d452af1, (q31_t)0xe5b4b501, - (q31_t)0x7d43e05e, (q31_t)0xe5ae8ed8, (q31_t)0x7d42957e, (q31_t)0xe5a868bf, (q31_t)0x7d414a51, (q31_t)0xe5a242b7, (q31_t)0x7d3ffed7, (q31_t)0xe59c1cbf, - (q31_t)0x7d3eb30f, (q31_t)0xe595f6d7, (q31_t)0x7d3d66fa, (q31_t)0xe58fd0ff, (q31_t)0x7d3c1a98, (q31_t)0xe589ab38, (q31_t)0x7d3acde9, (q31_t)0xe5838581, - (q31_t)0x7d3980ec, (q31_t)0xe57d5fda, (q31_t)0x7d3833a2, (q31_t)0xe5773a44, (q31_t)0x7d36e60b, (q31_t)0xe57114be, (q31_t)0x7d359827, (q31_t)0xe56aef49, - (q31_t)0x7d3449f5, (q31_t)0xe564c9e3, (q31_t)0x7d32fb76, (q31_t)0xe55ea48f, (q31_t)0x7d31acaa, (q31_t)0xe5587f4a, (q31_t)0x7d305d91, (q31_t)0xe5525a17, - (q31_t)0x7d2f0e2b, (q31_t)0xe54c34f3, (q31_t)0x7d2dbe77, (q31_t)0xe5460fe0, (q31_t)0x7d2c6e76, (q31_t)0xe53feade, (q31_t)0x7d2b1e28, (q31_t)0xe539c5ec, - (q31_t)0x7d29cd8c, (q31_t)0xe533a10a, (q31_t)0x7d287ca4, (q31_t)0xe52d7c39, (q31_t)0x7d272b6e, (q31_t)0xe5275779, (q31_t)0x7d25d9eb, (q31_t)0xe52132c9, - (q31_t)0x7d24881b, (q31_t)0xe51b0e2a, (q31_t)0x7d2335fe, (q31_t)0xe514e99b, (q31_t)0x7d21e393, (q31_t)0xe50ec51d, (q31_t)0x7d2090db, (q31_t)0xe508a0b0, - (q31_t)0x7d1f3dd6, (q31_t)0xe5027c53, (q31_t)0x7d1dea84, (q31_t)0xe4fc5807, (q31_t)0x7d1c96e5, (q31_t)0xe4f633cc, (q31_t)0x7d1b42f9, (q31_t)0xe4f00fa1, - (q31_t)0x7d19eebf, (q31_t)0xe4e9eb87, (q31_t)0x7d189a38, (q31_t)0xe4e3c77d, (q31_t)0x7d174564, (q31_t)0xe4dda385, (q31_t)0x7d15f043, (q31_t)0xe4d77f9d, - (q31_t)0x7d149ad5, (q31_t)0xe4d15bc6, (q31_t)0x7d134519, (q31_t)0xe4cb37ff, (q31_t)0x7d11ef11, (q31_t)0xe4c5144a, (q31_t)0x7d1098bb, (q31_t)0xe4bef0a5, - (q31_t)0x7d0f4218, (q31_t)0xe4b8cd11, (q31_t)0x7d0deb28, (q31_t)0xe4b2a98e, (q31_t)0x7d0c93eb, (q31_t)0xe4ac861b, (q31_t)0x7d0b3c60, (q31_t)0xe4a662ba, - (q31_t)0x7d09e489, (q31_t)0xe4a03f69, (q31_t)0x7d088c64, (q31_t)0xe49a1c29, (q31_t)0x7d0733f3, (q31_t)0xe493f8fb, (q31_t)0x7d05db34, (q31_t)0xe48dd5dd, - (q31_t)0x7d048228, (q31_t)0xe487b2d0, (q31_t)0x7d0328cf, (q31_t)0xe4818fd4, (q31_t)0x7d01cf29, (q31_t)0xe47b6ce9, (q31_t)0x7d007535, (q31_t)0xe4754a0e, - (q31_t)0x7cff1af5, (q31_t)0xe46f2745, (q31_t)0x7cfdc068, (q31_t)0xe469048d, (q31_t)0x7cfc658d, (q31_t)0xe462e1e6, (q31_t)0x7cfb0a65, (q31_t)0xe45cbf50, - (q31_t)0x7cf9aef0, (q31_t)0xe4569ccb, (q31_t)0x7cf8532f, (q31_t)0xe4507a57, (q31_t)0x7cf6f720, (q31_t)0xe44a57f4, (q31_t)0x7cf59ac4, (q31_t)0xe44435a2, - (q31_t)0x7cf43e1a, (q31_t)0xe43e1362, (q31_t)0x7cf2e124, (q31_t)0xe437f132, (q31_t)0x7cf183e1, (q31_t)0xe431cf14, (q31_t)0x7cf02651, (q31_t)0xe42bad07, - (q31_t)0x7ceec873, (q31_t)0xe4258b0a, (q31_t)0x7ced6a49, (q31_t)0xe41f6920, (q31_t)0x7cec0bd1, (q31_t)0xe4194746, (q31_t)0x7ceaad0c, (q31_t)0xe413257d, - (q31_t)0x7ce94dfb, (q31_t)0xe40d03c6, (q31_t)0x7ce7ee9c, (q31_t)0xe406e220, (q31_t)0x7ce68ef0, (q31_t)0xe400c08b, (q31_t)0x7ce52ef7, (q31_t)0xe3fa9f08, - (q31_t)0x7ce3ceb2, (q31_t)0xe3f47d96, (q31_t)0x7ce26e1f, (q31_t)0xe3ee5c35, (q31_t)0x7ce10d3f, (q31_t)0xe3e83ae5, (q31_t)0x7cdfac12, (q31_t)0xe3e219a7, - (q31_t)0x7cde4a98, (q31_t)0xe3dbf87a, (q31_t)0x7cdce8d1, (q31_t)0xe3d5d75e, (q31_t)0x7cdb86bd, (q31_t)0xe3cfb654, (q31_t)0x7cda245c, (q31_t)0xe3c9955b, - (q31_t)0x7cd8c1ae, (q31_t)0xe3c37474, (q31_t)0x7cd75eb3, (q31_t)0xe3bd539e, (q31_t)0x7cd5fb6a, (q31_t)0xe3b732d9, (q31_t)0x7cd497d5, (q31_t)0xe3b11226, - (q31_t)0x7cd333f3, (q31_t)0xe3aaf184, (q31_t)0x7cd1cfc4, (q31_t)0xe3a4d0f4, (q31_t)0x7cd06b48, (q31_t)0xe39eb075, (q31_t)0x7ccf067f, (q31_t)0xe3989008, - (q31_t)0x7ccda169, (q31_t)0xe3926fad, (q31_t)0x7ccc3c06, (q31_t)0xe38c4f63, (q31_t)0x7ccad656, (q31_t)0xe3862f2a, (q31_t)0x7cc97059, (q31_t)0xe3800f03, - (q31_t)0x7cc80a0f, (q31_t)0xe379eeed, (q31_t)0x7cc6a378, (q31_t)0xe373ceea, (q31_t)0x7cc53c94, (q31_t)0xe36daef7, (q31_t)0x7cc3d563, (q31_t)0xe3678f17, - (q31_t)0x7cc26de5, (q31_t)0xe3616f48, (q31_t)0x7cc1061a, (q31_t)0xe35b4f8b, (q31_t)0x7cbf9e03, (q31_t)0xe3552fdf, (q31_t)0x7cbe359e, (q31_t)0xe34f1045, - (q31_t)0x7cbcccec, (q31_t)0xe348f0bd, (q31_t)0x7cbb63ee, (q31_t)0xe342d146, (q31_t)0x7cb9faa2, (q31_t)0xe33cb1e1, (q31_t)0x7cb8910a, (q31_t)0xe336928e, - (q31_t)0x7cb72724, (q31_t)0xe330734d, (q31_t)0x7cb5bcf2, (q31_t)0xe32a541d, (q31_t)0x7cb45272, (q31_t)0xe3243500, (q31_t)0x7cb2e7a6, (q31_t)0xe31e15f4, - (q31_t)0x7cb17c8d, (q31_t)0xe317f6fa, (q31_t)0x7cb01127, (q31_t)0xe311d811, (q31_t)0x7caea574, (q31_t)0xe30bb93b, (q31_t)0x7cad3974, (q31_t)0xe3059a76, - (q31_t)0x7cabcd28, (q31_t)0xe2ff7bc3, (q31_t)0x7caa608e, (q31_t)0xe2f95d23, (q31_t)0x7ca8f3a7, (q31_t)0xe2f33e94, (q31_t)0x7ca78674, (q31_t)0xe2ed2017, - (q31_t)0x7ca618f3, (q31_t)0xe2e701ac, (q31_t)0x7ca4ab26, (q31_t)0xe2e0e352, (q31_t)0x7ca33d0c, (q31_t)0xe2dac50b, (q31_t)0x7ca1cea5, (q31_t)0xe2d4a6d6, - (q31_t)0x7ca05ff1, (q31_t)0xe2ce88b3, (q31_t)0x7c9ef0f0, (q31_t)0xe2c86aa2, (q31_t)0x7c9d81a3, (q31_t)0xe2c24ca2, (q31_t)0x7c9c1208, (q31_t)0xe2bc2eb5, - (q31_t)0x7c9aa221, (q31_t)0xe2b610da, (q31_t)0x7c9931ec, (q31_t)0xe2aff311, (q31_t)0x7c97c16b, (q31_t)0xe2a9d55a, (q31_t)0x7c96509d, (q31_t)0xe2a3b7b5, - (q31_t)0x7c94df83, (q31_t)0xe29d9a23, (q31_t)0x7c936e1b, (q31_t)0xe2977ca2, (q31_t)0x7c91fc66, (q31_t)0xe2915f34, (q31_t)0x7c908a65, (q31_t)0xe28b41d7, - (q31_t)0x7c8f1817, (q31_t)0xe285248d, (q31_t)0x7c8da57c, (q31_t)0xe27f0755, (q31_t)0x7c8c3294, (q31_t)0xe278ea30, (q31_t)0x7c8abf5f, (q31_t)0xe272cd1c, - (q31_t)0x7c894bde, (q31_t)0xe26cb01b, (q31_t)0x7c87d810, (q31_t)0xe266932c, (q31_t)0x7c8663f4, (q31_t)0xe260764f, (q31_t)0x7c84ef8c, (q31_t)0xe25a5984, - (q31_t)0x7c837ad8, (q31_t)0xe2543ccc, (q31_t)0x7c8205d6, (q31_t)0xe24e2026, (q31_t)0x7c809088, (q31_t)0xe2480393, (q31_t)0x7c7f1aed, (q31_t)0xe241e711, - (q31_t)0x7c7da505, (q31_t)0xe23bcaa2, (q31_t)0x7c7c2ed0, (q31_t)0xe235ae46, (q31_t)0x7c7ab84e, (q31_t)0xe22f91fc, (q31_t)0x7c794180, (q31_t)0xe22975c4, - (q31_t)0x7c77ca65, (q31_t)0xe223599e, (q31_t)0x7c7652fd, (q31_t)0xe21d3d8b, (q31_t)0x7c74db48, (q31_t)0xe217218b, (q31_t)0x7c736347, (q31_t)0xe211059d, - (q31_t)0x7c71eaf9, (q31_t)0xe20ae9c1, (q31_t)0x7c70725e, (q31_t)0xe204cdf8, (q31_t)0x7c6ef976, (q31_t)0xe1feb241, (q31_t)0x7c6d8041, (q31_t)0xe1f8969d, - (q31_t)0x7c6c06c0, (q31_t)0xe1f27b0b, (q31_t)0x7c6a8cf2, (q31_t)0xe1ec5f8c, (q31_t)0x7c6912d7, (q31_t)0xe1e64420, (q31_t)0x7c679870, (q31_t)0xe1e028c6, - (q31_t)0x7c661dbc, (q31_t)0xe1da0d7e, (q31_t)0x7c64a2bb, (q31_t)0xe1d3f24a, (q31_t)0x7c63276d, (q31_t)0xe1cdd727, (q31_t)0x7c61abd3, (q31_t)0xe1c7bc18, - (q31_t)0x7c602fec, (q31_t)0xe1c1a11b, (q31_t)0x7c5eb3b8, (q31_t)0xe1bb8631, (q31_t)0x7c5d3737, (q31_t)0xe1b56b59, (q31_t)0x7c5bba6a, (q31_t)0xe1af5094, - (q31_t)0x7c5a3d50, (q31_t)0xe1a935e2, (q31_t)0x7c58bfe9, (q31_t)0xe1a31b42, (q31_t)0x7c574236, (q31_t)0xe19d00b6, (q31_t)0x7c55c436, (q31_t)0xe196e63c, - (q31_t)0x7c5445e9, (q31_t)0xe190cbd4, (q31_t)0x7c52c74f, (q31_t)0xe18ab180, (q31_t)0x7c514869, (q31_t)0xe184973e, (q31_t)0x7c4fc936, (q31_t)0xe17e7d0f, - (q31_t)0x7c4e49b7, (q31_t)0xe17862f3, (q31_t)0x7c4cc9ea, (q31_t)0xe17248ea, (q31_t)0x7c4b49d2, (q31_t)0xe16c2ef4, (q31_t)0x7c49c96c, (q31_t)0xe1661510, - (q31_t)0x7c4848ba, (q31_t)0xe15ffb3f, (q31_t)0x7c46c7bb, (q31_t)0xe159e182, (q31_t)0x7c45466f, (q31_t)0xe153c7d7, (q31_t)0x7c43c4d7, (q31_t)0xe14dae3f, - (q31_t)0x7c4242f2, (q31_t)0xe14794ba, (q31_t)0x7c40c0c1, (q31_t)0xe1417b48, (q31_t)0x7c3f3e42, (q31_t)0xe13b61e9, (q31_t)0x7c3dbb78, (q31_t)0xe135489d, - (q31_t)0x7c3c3860, (q31_t)0xe12f2f63, (q31_t)0x7c3ab4fc, (q31_t)0xe129163d, (q31_t)0x7c39314b, (q31_t)0xe122fd2a, (q31_t)0x7c37ad4e, (q31_t)0xe11ce42a, - (q31_t)0x7c362904, (q31_t)0xe116cb3d, (q31_t)0x7c34a46d, (q31_t)0xe110b263, (q31_t)0x7c331f8a, (q31_t)0xe10a999c, (q31_t)0x7c319a5a, (q31_t)0xe10480e9, - (q31_t)0x7c3014de, (q31_t)0xe0fe6848, (q31_t)0x7c2e8f15, (q31_t)0xe0f84fbb, (q31_t)0x7c2d08ff, (q31_t)0xe0f23740, (q31_t)0x7c2b829d, (q31_t)0xe0ec1ed9, - (q31_t)0x7c29fbee, (q31_t)0xe0e60685, (q31_t)0x7c2874f3, (q31_t)0xe0dfee44, (q31_t)0x7c26edab, (q31_t)0xe0d9d616, (q31_t)0x7c256616, (q31_t)0xe0d3bdfc, - (q31_t)0x7c23de35, (q31_t)0xe0cda5f5, (q31_t)0x7c225607, (q31_t)0xe0c78e01, (q31_t)0x7c20cd8d, (q31_t)0xe0c17620, (q31_t)0x7c1f44c6, (q31_t)0xe0bb5e53, - (q31_t)0x7c1dbbb3, (q31_t)0xe0b54698, (q31_t)0x7c1c3253, (q31_t)0xe0af2ef2, (q31_t)0x7c1aa8a6, (q31_t)0xe0a9175e, (q31_t)0x7c191ead, (q31_t)0xe0a2ffde, - (q31_t)0x7c179467, (q31_t)0xe09ce871, (q31_t)0x7c1609d5, (q31_t)0xe096d117, (q31_t)0x7c147ef6, (q31_t)0xe090b9d1, (q31_t)0x7c12f3cb, (q31_t)0xe08aa29f, - (q31_t)0x7c116853, (q31_t)0xe0848b7f, (q31_t)0x7c0fdc8f, (q31_t)0xe07e7473, (q31_t)0x7c0e507e, (q31_t)0xe0785d7b, (q31_t)0x7c0cc421, (q31_t)0xe0724696, - (q31_t)0x7c0b3777, (q31_t)0xe06c2fc4, (q31_t)0x7c09aa80, (q31_t)0xe0661906, (q31_t)0x7c081d3d, (q31_t)0xe060025c, (q31_t)0x7c068fae, (q31_t)0xe059ebc5, - (q31_t)0x7c0501d2, (q31_t)0xe053d541, (q31_t)0x7c0373a9, (q31_t)0xe04dbed1, (q31_t)0x7c01e534, (q31_t)0xe047a875, (q31_t)0x7c005673, (q31_t)0xe041922c, - (q31_t)0x7bfec765, (q31_t)0xe03b7bf6, (q31_t)0x7bfd380a, (q31_t)0xe03565d5, (q31_t)0x7bfba863, (q31_t)0xe02f4fc6, (q31_t)0x7bfa1870, (q31_t)0xe02939cc, - (q31_t)0x7bf88830, (q31_t)0xe02323e5, (q31_t)0x7bf6f7a4, (q31_t)0xe01d0e12, (q31_t)0x7bf566cb, (q31_t)0xe016f852, (q31_t)0x7bf3d5a6, (q31_t)0xe010e2a7, - (q31_t)0x7bf24434, (q31_t)0xe00acd0e, (q31_t)0x7bf0b276, (q31_t)0xe004b78a, (q31_t)0x7bef206b, (q31_t)0xdffea219, (q31_t)0x7bed8e14, (q31_t)0xdff88cbc, - (q31_t)0x7bebfb70, (q31_t)0xdff27773, (q31_t)0x7bea6880, (q31_t)0xdfec623e, (q31_t)0x7be8d544, (q31_t)0xdfe64d1c, (q31_t)0x7be741bb, (q31_t)0xdfe0380e, - (q31_t)0x7be5ade6, (q31_t)0xdfda2314, (q31_t)0x7be419c4, (q31_t)0xdfd40e2e, (q31_t)0x7be28556, (q31_t)0xdfcdf95c, (q31_t)0x7be0f09b, (q31_t)0xdfc7e49d, - (q31_t)0x7bdf5b94, (q31_t)0xdfc1cff3, (q31_t)0x7bddc641, (q31_t)0xdfbbbb5c, (q31_t)0x7bdc30a1, (q31_t)0xdfb5a6d9, (q31_t)0x7bda9ab5, (q31_t)0xdfaf926a, - (q31_t)0x7bd9047c, (q31_t)0xdfa97e0f, (q31_t)0x7bd76df7, (q31_t)0xdfa369c8, (q31_t)0x7bd5d726, (q31_t)0xdf9d5595, (q31_t)0x7bd44008, (q31_t)0xdf974176, - (q31_t)0x7bd2a89e, (q31_t)0xdf912d6b, (q31_t)0x7bd110e8, (q31_t)0xdf8b1974, (q31_t)0x7bcf78e5, (q31_t)0xdf850591, (q31_t)0x7bcde095, (q31_t)0xdf7ef1c2, - (q31_t)0x7bcc47fa, (q31_t)0xdf78de07, (q31_t)0x7bcaaf12, (q31_t)0xdf72ca60, (q31_t)0x7bc915dd, (q31_t)0xdf6cb6cd, (q31_t)0x7bc77c5d, (q31_t)0xdf66a34e, - (q31_t)0x7bc5e290, (q31_t)0xdf608fe4, (q31_t)0x7bc44876, (q31_t)0xdf5a7c8d, (q31_t)0x7bc2ae10, (q31_t)0xdf54694b, (q31_t)0x7bc1135e, (q31_t)0xdf4e561c, - (q31_t)0x7bbf7860, (q31_t)0xdf484302, (q31_t)0x7bbddd15, (q31_t)0xdf422ffd, (q31_t)0x7bbc417e, (q31_t)0xdf3c1d0b, (q31_t)0x7bbaa59a, (q31_t)0xdf360a2d, - (q31_t)0x7bb9096b, (q31_t)0xdf2ff764, (q31_t)0x7bb76cef, (q31_t)0xdf29e4af, (q31_t)0x7bb5d026, (q31_t)0xdf23d20e, (q31_t)0x7bb43311, (q31_t)0xdf1dbf82, - (q31_t)0x7bb295b0, (q31_t)0xdf17ad0a, (q31_t)0x7bb0f803, (q31_t)0xdf119aa6, (q31_t)0x7baf5a09, (q31_t)0xdf0b8856, (q31_t)0x7badbbc3, (q31_t)0xdf05761b, - (q31_t)0x7bac1d31, (q31_t)0xdeff63f4, (q31_t)0x7baa7e53, (q31_t)0xdef951e2, (q31_t)0x7ba8df28, (q31_t)0xdef33fe3, (q31_t)0x7ba73fb1, (q31_t)0xdeed2dfa, - (q31_t)0x7ba59fee, (q31_t)0xdee71c24, (q31_t)0x7ba3ffde, (q31_t)0xdee10a63, (q31_t)0x7ba25f82, (q31_t)0xdedaf8b7, (q31_t)0x7ba0beda, (q31_t)0xded4e71f, - (q31_t)0x7b9f1de6, (q31_t)0xdeced59b, (q31_t)0x7b9d7ca5, (q31_t)0xdec8c42c, (q31_t)0x7b9bdb18, (q31_t)0xdec2b2d1, (q31_t)0x7b9a393f, (q31_t)0xdebca18b, - (q31_t)0x7b989719, (q31_t)0xdeb69059, (q31_t)0x7b96f4a8, (q31_t)0xdeb07f3c, (q31_t)0x7b9551ea, (q31_t)0xdeaa6e34, (q31_t)0x7b93aee0, (q31_t)0xdea45d40, - (q31_t)0x7b920b89, (q31_t)0xde9e4c60, (q31_t)0x7b9067e7, (q31_t)0xde983b95, (q31_t)0x7b8ec3f8, (q31_t)0xde922adf, (q31_t)0x7b8d1fbd, (q31_t)0xde8c1a3e, - (q31_t)0x7b8b7b36, (q31_t)0xde8609b1, (q31_t)0x7b89d662, (q31_t)0xde7ff938, (q31_t)0x7b883143, (q31_t)0xde79e8d5, (q31_t)0x7b868bd7, (q31_t)0xde73d886, - (q31_t)0x7b84e61f, (q31_t)0xde6dc84b, (q31_t)0x7b83401b, (q31_t)0xde67b826, (q31_t)0x7b8199ca, (q31_t)0xde61a815, (q31_t)0x7b7ff32e, (q31_t)0xde5b9819, - (q31_t)0x7b7e4c45, (q31_t)0xde558831, (q31_t)0x7b7ca510, (q31_t)0xde4f785f, (q31_t)0x7b7afd8f, (q31_t)0xde4968a1, (q31_t)0x7b7955c2, (q31_t)0xde4358f8, - (q31_t)0x7b77ada8, (q31_t)0xde3d4964, (q31_t)0x7b760542, (q31_t)0xde3739e4, (q31_t)0x7b745c91, (q31_t)0xde312a7a, (q31_t)0x7b72b393, (q31_t)0xde2b1b24, - (q31_t)0x7b710a49, (q31_t)0xde250be3, (q31_t)0x7b6f60b2, (q31_t)0xde1efcb7, (q31_t)0x7b6db6d0, (q31_t)0xde18eda0, (q31_t)0x7b6c0ca2, (q31_t)0xde12de9e, - (q31_t)0x7b6a6227, (q31_t)0xde0ccfb1, (q31_t)0x7b68b760, (q31_t)0xde06c0d9, (q31_t)0x7b670c4d, (q31_t)0xde00b216, (q31_t)0x7b6560ee, (q31_t)0xddfaa367, - (q31_t)0x7b63b543, (q31_t)0xddf494ce, (q31_t)0x7b62094c, (q31_t)0xddee8649, (q31_t)0x7b605d09, (q31_t)0xdde877da, (q31_t)0x7b5eb079, (q31_t)0xdde26980, - (q31_t)0x7b5d039e, (q31_t)0xdddc5b3b, (q31_t)0x7b5b5676, (q31_t)0xddd64d0a, (q31_t)0x7b59a902, (q31_t)0xddd03eef, (q31_t)0x7b57fb42, (q31_t)0xddca30e9, - (q31_t)0x7b564d36, (q31_t)0xddc422f8, (q31_t)0x7b549ede, (q31_t)0xddbe151d, (q31_t)0x7b52f03a, (q31_t)0xddb80756, (q31_t)0x7b51414a, (q31_t)0xddb1f9a4, - (q31_t)0x7b4f920e, (q31_t)0xddabec08, (q31_t)0x7b4de286, (q31_t)0xdda5de81, (q31_t)0x7b4c32b1, (q31_t)0xdd9fd10f, (q31_t)0x7b4a8291, (q31_t)0xdd99c3b2, - (q31_t)0x7b48d225, (q31_t)0xdd93b66a, (q31_t)0x7b47216c, (q31_t)0xdd8da938, (q31_t)0x7b457068, (q31_t)0xdd879c1b, (q31_t)0x7b43bf17, (q31_t)0xdd818f13, - (q31_t)0x7b420d7a, (q31_t)0xdd7b8220, (q31_t)0x7b405b92, (q31_t)0xdd757543, (q31_t)0x7b3ea95d, (q31_t)0xdd6f687b, (q31_t)0x7b3cf6dc, (q31_t)0xdd695bc9, - (q31_t)0x7b3b4410, (q31_t)0xdd634f2b, (q31_t)0x7b3990f7, (q31_t)0xdd5d42a3, (q31_t)0x7b37dd92, (q31_t)0xdd573631, (q31_t)0x7b3629e1, (q31_t)0xdd5129d4, - (q31_t)0x7b3475e5, (q31_t)0xdd4b1d8c, (q31_t)0x7b32c19c, (q31_t)0xdd451159, (q31_t)0x7b310d07, (q31_t)0xdd3f053c, (q31_t)0x7b2f5826, (q31_t)0xdd38f935, - (q31_t)0x7b2da2fa, (q31_t)0xdd32ed43, (q31_t)0x7b2bed81, (q31_t)0xdd2ce166, (q31_t)0x7b2a37bc, (q31_t)0xdd26d59f, (q31_t)0x7b2881ac, (q31_t)0xdd20c9ed, - (q31_t)0x7b26cb4f, (q31_t)0xdd1abe51, (q31_t)0x7b2514a6, (q31_t)0xdd14b2ca, (q31_t)0x7b235db2, (q31_t)0xdd0ea759, (q31_t)0x7b21a671, (q31_t)0xdd089bfe, - (q31_t)0x7b1feee5, (q31_t)0xdd0290b8, (q31_t)0x7b1e370d, (q31_t)0xdcfc8588, (q31_t)0x7b1c7ee8, (q31_t)0xdcf67a6d, (q31_t)0x7b1ac678, (q31_t)0xdcf06f68, - (q31_t)0x7b190dbc, (q31_t)0xdcea6478, (q31_t)0x7b1754b3, (q31_t)0xdce4599e, (q31_t)0x7b159b5f, (q31_t)0xdcde4eda, (q31_t)0x7b13e1bf, (q31_t)0xdcd8442b, - (q31_t)0x7b1227d3, (q31_t)0xdcd23993, (q31_t)0x7b106d9b, (q31_t)0xdccc2f0f, (q31_t)0x7b0eb318, (q31_t)0xdcc624a2, (q31_t)0x7b0cf848, (q31_t)0xdcc01a4a, - (q31_t)0x7b0b3d2c, (q31_t)0xdcba1008, (q31_t)0x7b0981c5, (q31_t)0xdcb405dc, (q31_t)0x7b07c612, (q31_t)0xdcadfbc5, (q31_t)0x7b060a12, (q31_t)0xdca7f1c5, - (q31_t)0x7b044dc7, (q31_t)0xdca1e7da, (q31_t)0x7b029130, (q31_t)0xdc9bde05, (q31_t)0x7b00d44d, (q31_t)0xdc95d446, (q31_t)0x7aff171e, (q31_t)0xdc8fca9c, - (q31_t)0x7afd59a4, (q31_t)0xdc89c109, (q31_t)0x7afb9bdd, (q31_t)0xdc83b78b, (q31_t)0x7af9ddcb, (q31_t)0xdc7dae23, (q31_t)0x7af81f6c, (q31_t)0xdc77a4d2, - (q31_t)0x7af660c2, (q31_t)0xdc719b96, (q31_t)0x7af4a1cc, (q31_t)0xdc6b9270, (q31_t)0x7af2e28b, (q31_t)0xdc658960, (q31_t)0x7af122fd, (q31_t)0xdc5f8066, - (q31_t)0x7aef6323, (q31_t)0xdc597781, (q31_t)0x7aeda2fe, (q31_t)0xdc536eb3, (q31_t)0x7aebe28d, (q31_t)0xdc4d65fb, (q31_t)0x7aea21d0, (q31_t)0xdc475d59, - (q31_t)0x7ae860c7, (q31_t)0xdc4154cd, (q31_t)0x7ae69f73, (q31_t)0xdc3b4c57, (q31_t)0x7ae4ddd2, (q31_t)0xdc3543f7, (q31_t)0x7ae31be6, (q31_t)0xdc2f3bad, - (q31_t)0x7ae159ae, (q31_t)0xdc293379, (q31_t)0x7adf972a, (q31_t)0xdc232b5c, (q31_t)0x7addd45b, (q31_t)0xdc1d2354, (q31_t)0x7adc113f, (q31_t)0xdc171b63, - (q31_t)0x7ada4dd8, (q31_t)0xdc111388, (q31_t)0x7ad88a25, (q31_t)0xdc0b0bc2, (q31_t)0x7ad6c626, (q31_t)0xdc050414, (q31_t)0x7ad501dc, (q31_t)0xdbfefc7b, - (q31_t)0x7ad33d45, (q31_t)0xdbf8f4f8, (q31_t)0x7ad17863, (q31_t)0xdbf2ed8c, (q31_t)0x7acfb336, (q31_t)0xdbece636, (q31_t)0x7acdedbc, (q31_t)0xdbe6def6, - (q31_t)0x7acc27f7, (q31_t)0xdbe0d7cd, (q31_t)0x7aca61e6, (q31_t)0xdbdad0b9, (q31_t)0x7ac89b89, (q31_t)0xdbd4c9bc, (q31_t)0x7ac6d4e0, (q31_t)0xdbcec2d6, - (q31_t)0x7ac50dec, (q31_t)0xdbc8bc06, (q31_t)0x7ac346ac, (q31_t)0xdbc2b54c, (q31_t)0x7ac17f20, (q31_t)0xdbbcaea8, (q31_t)0x7abfb749, (q31_t)0xdbb6a81b, - (q31_t)0x7abdef25, (q31_t)0xdbb0a1a4, (q31_t)0x7abc26b7, (q31_t)0xdbaa9b43, (q31_t)0x7aba5dfc, (q31_t)0xdba494f9, (q31_t)0x7ab894f6, (q31_t)0xdb9e8ec6, - (q31_t)0x7ab6cba4, (q31_t)0xdb9888a8, (q31_t)0x7ab50206, (q31_t)0xdb9282a2, (q31_t)0x7ab3381d, (q31_t)0xdb8c7cb1, (q31_t)0x7ab16de7, (q31_t)0xdb8676d8, - (q31_t)0x7aafa367, (q31_t)0xdb807114, (q31_t)0x7aadd89a, (q31_t)0xdb7a6b68, (q31_t)0x7aac0d82, (q31_t)0xdb7465d1, (q31_t)0x7aaa421e, (q31_t)0xdb6e6052, - (q31_t)0x7aa8766f, (q31_t)0xdb685ae9, (q31_t)0x7aa6aa74, (q31_t)0xdb625596, (q31_t)0x7aa4de2d, (q31_t)0xdb5c505a, (q31_t)0x7aa3119a, (q31_t)0xdb564b35, - (q31_t)0x7aa144bc, (q31_t)0xdb504626, (q31_t)0x7a9f7793, (q31_t)0xdb4a412e, (q31_t)0x7a9daa1d, (q31_t)0xdb443c4c, (q31_t)0x7a9bdc5c, (q31_t)0xdb3e3781, - (q31_t)0x7a9a0e50, (q31_t)0xdb3832cd, (q31_t)0x7a983ff7, (q31_t)0xdb322e30, (q31_t)0x7a967153, (q31_t)0xdb2c29a9, (q31_t)0x7a94a264, (q31_t)0xdb262539, - (q31_t)0x7a92d329, (q31_t)0xdb2020e0, (q31_t)0x7a9103a2, (q31_t)0xdb1a1c9d, (q31_t)0x7a8f33d0, (q31_t)0xdb141871, (q31_t)0x7a8d63b2, (q31_t)0xdb0e145c, - (q31_t)0x7a8b9348, (q31_t)0xdb08105e, (q31_t)0x7a89c293, (q31_t)0xdb020c77, (q31_t)0x7a87f192, (q31_t)0xdafc08a6, (q31_t)0x7a862046, (q31_t)0xdaf604ec, - (q31_t)0x7a844eae, (q31_t)0xdaf00149, (q31_t)0x7a827ccb, (q31_t)0xdae9fdbd, (q31_t)0x7a80aa9c, (q31_t)0xdae3fa48, (q31_t)0x7a7ed821, (q31_t)0xdaddf6ea, - (q31_t)0x7a7d055b, (q31_t)0xdad7f3a2, (q31_t)0x7a7b3249, (q31_t)0xdad1f072, (q31_t)0x7a795eec, (q31_t)0xdacbed58, (q31_t)0x7a778b43, (q31_t)0xdac5ea56, - (q31_t)0x7a75b74f, (q31_t)0xdabfe76a, (q31_t)0x7a73e30f, (q31_t)0xdab9e495, (q31_t)0x7a720e84, (q31_t)0xdab3e1d8, (q31_t)0x7a7039ad, (q31_t)0xdaaddf31, - (q31_t)0x7a6e648a, (q31_t)0xdaa7dca1, (q31_t)0x7a6c8f1c, (q31_t)0xdaa1da29, (q31_t)0x7a6ab963, (q31_t)0xda9bd7c7, (q31_t)0x7a68e35e, (q31_t)0xda95d57d, - (q31_t)0x7a670d0d, (q31_t)0xda8fd349, (q31_t)0x7a653671, (q31_t)0xda89d12d, (q31_t)0x7a635f8a, (q31_t)0xda83cf28, (q31_t)0x7a618857, (q31_t)0xda7dcd3a, - (q31_t)0x7a5fb0d8, (q31_t)0xda77cb63, (q31_t)0x7a5dd90e, (q31_t)0xda71c9a3, (q31_t)0x7a5c00f9, (q31_t)0xda6bc7fa, (q31_t)0x7a5a2898, (q31_t)0xda65c669, - (q31_t)0x7a584feb, (q31_t)0xda5fc4ef, (q31_t)0x7a5676f3, (q31_t)0xda59c38c, (q31_t)0x7a549db0, (q31_t)0xda53c240, (q31_t)0x7a52c421, (q31_t)0xda4dc10b, - (q31_t)0x7a50ea47, (q31_t)0xda47bfee, (q31_t)0x7a4f1021, (q31_t)0xda41bee8, (q31_t)0x7a4d35b0, (q31_t)0xda3bbdf9, (q31_t)0x7a4b5af3, (q31_t)0xda35bd22, - (q31_t)0x7a497feb, (q31_t)0xda2fbc61, (q31_t)0x7a47a498, (q31_t)0xda29bbb9, (q31_t)0x7a45c8f9, (q31_t)0xda23bb27, (q31_t)0x7a43ed0e, (q31_t)0xda1dbaad, - (q31_t)0x7a4210d8, (q31_t)0xda17ba4a, (q31_t)0x7a403457, (q31_t)0xda11b9ff, (q31_t)0x7a3e578b, (q31_t)0xda0bb9cb, (q31_t)0x7a3c7a73, (q31_t)0xda05b9ae, - (q31_t)0x7a3a9d0f, (q31_t)0xd9ffb9a9, (q31_t)0x7a38bf60, (q31_t)0xd9f9b9bb, (q31_t)0x7a36e166, (q31_t)0xd9f3b9e5, (q31_t)0x7a350321, (q31_t)0xd9edba26, - (q31_t)0x7a332490, (q31_t)0xd9e7ba7f, (q31_t)0x7a3145b3, (q31_t)0xd9e1baef, (q31_t)0x7a2f668c, (q31_t)0xd9dbbb77, (q31_t)0x7a2d8719, (q31_t)0xd9d5bc16, - (q31_t)0x7a2ba75a, (q31_t)0xd9cfbccd, (q31_t)0x7a29c750, (q31_t)0xd9c9bd9b, (q31_t)0x7a27e6fb, (q31_t)0xd9c3be81, (q31_t)0x7a26065b, (q31_t)0xd9bdbf7e, - (q31_t)0x7a24256f, (q31_t)0xd9b7c094, (q31_t)0x7a224437, (q31_t)0xd9b1c1c0, (q31_t)0x7a2062b5, (q31_t)0xd9abc305, (q31_t)0x7a1e80e7, (q31_t)0xd9a5c461, - (q31_t)0x7a1c9ece, (q31_t)0xd99fc5d4, (q31_t)0x7a1abc69, (q31_t)0xd999c75f, (q31_t)0x7a18d9b9, (q31_t)0xd993c902, (q31_t)0x7a16f6be, (q31_t)0xd98dcabd, - (q31_t)0x7a151378, (q31_t)0xd987cc90, (q31_t)0x7a132fe6, (q31_t)0xd981ce7a, (q31_t)0x7a114c09, (q31_t)0xd97bd07c, (q31_t)0x7a0f67e0, (q31_t)0xd975d295, - (q31_t)0x7a0d836d, (q31_t)0xd96fd4c7, (q31_t)0x7a0b9eae, (q31_t)0xd969d710, (q31_t)0x7a09b9a4, (q31_t)0xd963d971, (q31_t)0x7a07d44e, (q31_t)0xd95ddbea, - (q31_t)0x7a05eead, (q31_t)0xd957de7a, (q31_t)0x7a0408c1, (q31_t)0xd951e123, (q31_t)0x7a02228a, (q31_t)0xd94be3e3, (q31_t)0x7a003c07, (q31_t)0xd945e6bb, - (q31_t)0x79fe5539, (q31_t)0xd93fe9ab, (q31_t)0x79fc6e20, (q31_t)0xd939ecb3, (q31_t)0x79fa86bc, (q31_t)0xd933efd3, (q31_t)0x79f89f0c, (q31_t)0xd92df30b, - (q31_t)0x79f6b711, (q31_t)0xd927f65b, (q31_t)0x79f4cecb, (q31_t)0xd921f9c3, (q31_t)0x79f2e63a, (q31_t)0xd91bfd43, (q31_t)0x79f0fd5d, (q31_t)0xd91600da, - (q31_t)0x79ef1436, (q31_t)0xd910048a, (q31_t)0x79ed2ac3, (q31_t)0xd90a0852, (q31_t)0x79eb4105, (q31_t)0xd9040c32, (q31_t)0x79e956fb, (q31_t)0xd8fe1029, - (q31_t)0x79e76ca7, (q31_t)0xd8f81439, (q31_t)0x79e58207, (q31_t)0xd8f21861, (q31_t)0x79e3971c, (q31_t)0xd8ec1ca1, (q31_t)0x79e1abe6, (q31_t)0xd8e620fa, - (q31_t)0x79dfc064, (q31_t)0xd8e0256a, (q31_t)0x79ddd498, (q31_t)0xd8da29f2, (q31_t)0x79dbe880, (q31_t)0xd8d42e93, (q31_t)0x79d9fc1d, (q31_t)0xd8ce334c, - (q31_t)0x79d80f6f, (q31_t)0xd8c8381d, (q31_t)0x79d62276, (q31_t)0xd8c23d06, (q31_t)0x79d43532, (q31_t)0xd8bc4207, (q31_t)0x79d247a2, (q31_t)0xd8b64720, - (q31_t)0x79d059c8, (q31_t)0xd8b04c52, (q31_t)0x79ce6ba2, (q31_t)0xd8aa519c, (q31_t)0x79cc7d31, (q31_t)0xd8a456ff, (q31_t)0x79ca8e75, (q31_t)0xd89e5c79, - (q31_t)0x79c89f6e, (q31_t)0xd898620c, (q31_t)0x79c6b01b, (q31_t)0xd89267b7, (q31_t)0x79c4c07e, (q31_t)0xd88c6d7b, (q31_t)0x79c2d095, (q31_t)0xd8867356, - (q31_t)0x79c0e062, (q31_t)0xd880794b, (q31_t)0x79beefe3, (q31_t)0xd87a7f57, (q31_t)0x79bcff19, (q31_t)0xd874857c, (q31_t)0x79bb0e04, (q31_t)0xd86e8bb9, - (q31_t)0x79b91ca4, (q31_t)0xd868920f, (q31_t)0x79b72af9, (q31_t)0xd862987d, (q31_t)0x79b53903, (q31_t)0xd85c9f04, (q31_t)0x79b346c2, (q31_t)0xd856a5a3, - (q31_t)0x79b15435, (q31_t)0xd850ac5a, (q31_t)0x79af615e, (q31_t)0xd84ab32a, (q31_t)0x79ad6e3c, (q31_t)0xd844ba13, (q31_t)0x79ab7ace, (q31_t)0xd83ec114, - (q31_t)0x79a98715, (q31_t)0xd838c82d, (q31_t)0x79a79312, (q31_t)0xd832cf5f, (q31_t)0x79a59ec3, (q31_t)0xd82cd6aa, (q31_t)0x79a3aa29, (q31_t)0xd826de0d, - (q31_t)0x79a1b545, (q31_t)0xd820e589, (q31_t)0x799fc015, (q31_t)0xd81aed1d, (q31_t)0x799dca9a, (q31_t)0xd814f4ca, (q31_t)0x799bd4d4, (q31_t)0xd80efc8f, - (q31_t)0x7999dec4, (q31_t)0xd809046e, (q31_t)0x7997e868, (q31_t)0xd8030c64, (q31_t)0x7995f1c1, (q31_t)0xd7fd1474, (q31_t)0x7993facf, (q31_t)0xd7f71c9c, - (q31_t)0x79920392, (q31_t)0xd7f124dd, (q31_t)0x79900c0a, (q31_t)0xd7eb2d37, (q31_t)0x798e1438, (q31_t)0xd7e535a9, (q31_t)0x798c1c1a, (q31_t)0xd7df3e34, - (q31_t)0x798a23b1, (q31_t)0xd7d946d8, (q31_t)0x79882afd, (q31_t)0xd7d34f94, (q31_t)0x798631ff, (q31_t)0xd7cd586a, (q31_t)0x798438b5, (q31_t)0xd7c76158, - (q31_t)0x79823f20, (q31_t)0xd7c16a5f, (q31_t)0x79804541, (q31_t)0xd7bb737f, (q31_t)0x797e4b16, (q31_t)0xd7b57cb7, (q31_t)0x797c50a1, (q31_t)0xd7af8609, - (q31_t)0x797a55e0, (q31_t)0xd7a98f73, (q31_t)0x79785ad5, (q31_t)0xd7a398f6, (q31_t)0x79765f7f, (q31_t)0xd79da293, (q31_t)0x797463de, (q31_t)0xd797ac48, - (q31_t)0x797267f2, (q31_t)0xd791b616, (q31_t)0x79706bbb, (q31_t)0xd78bbffc, (q31_t)0x796e6f39, (q31_t)0xd785c9fc, (q31_t)0x796c726c, (q31_t)0xd77fd415, - (q31_t)0x796a7554, (q31_t)0xd779de47, (q31_t)0x796877f1, (q31_t)0xd773e892, (q31_t)0x79667a44, (q31_t)0xd76df2f6, (q31_t)0x79647c4c, (q31_t)0xd767fd72, - (q31_t)0x79627e08, (q31_t)0xd7620808, (q31_t)0x79607f7a, (q31_t)0xd75c12b7, (q31_t)0x795e80a1, (q31_t)0xd7561d7f, (q31_t)0x795c817d, (q31_t)0xd7502860, - (q31_t)0x795a820e, (q31_t)0xd74a335b, (q31_t)0x79588255, (q31_t)0xd7443e6e, (q31_t)0x79568250, (q31_t)0xd73e499a, (q31_t)0x79548201, (q31_t)0xd73854e0, - (q31_t)0x79528167, (q31_t)0xd732603f, (q31_t)0x79508082, (q31_t)0xd72c6bb6, (q31_t)0x794e7f52, (q31_t)0xd7267748, (q31_t)0x794c7dd7, (q31_t)0xd72082f2, - (q31_t)0x794a7c12, (q31_t)0xd71a8eb5, (q31_t)0x79487a01, (q31_t)0xd7149a92, (q31_t)0x794677a6, (q31_t)0xd70ea688, (q31_t)0x79447500, (q31_t)0xd708b297, - (q31_t)0x79427210, (q31_t)0xd702bec0, (q31_t)0x79406ed4, (q31_t)0xd6fccb01, (q31_t)0x793e6b4e, (q31_t)0xd6f6d75d, (q31_t)0x793c677d, (q31_t)0xd6f0e3d1, - (q31_t)0x793a6361, (q31_t)0xd6eaf05f, (q31_t)0x79385efa, (q31_t)0xd6e4fd06, (q31_t)0x79365a49, (q31_t)0xd6df09c6, (q31_t)0x7934554d, (q31_t)0xd6d916a0, - (q31_t)0x79325006, (q31_t)0xd6d32393, (q31_t)0x79304a74, (q31_t)0xd6cd30a0, (q31_t)0x792e4497, (q31_t)0xd6c73dc6, (q31_t)0x792c3e70, (q31_t)0xd6c14b05, - (q31_t)0x792a37fe, (q31_t)0xd6bb585e, (q31_t)0x79283141, (q31_t)0xd6b565d0, (q31_t)0x79262a3a, (q31_t)0xd6af735c, (q31_t)0x792422e8, (q31_t)0xd6a98101, - (q31_t)0x79221b4b, (q31_t)0xd6a38ec0, (q31_t)0x79201363, (q31_t)0xd69d9c98, (q31_t)0x791e0b31, (q31_t)0xd697aa8a, (q31_t)0x791c02b4, (q31_t)0xd691b895, - (q31_t)0x7919f9ec, (q31_t)0xd68bc6ba, (q31_t)0x7917f0d9, (q31_t)0xd685d4f9, (q31_t)0x7915e77c, (q31_t)0xd67fe351, (q31_t)0x7913ddd4, (q31_t)0xd679f1c2, - (q31_t)0x7911d3e2, (q31_t)0xd674004e, (q31_t)0x790fc9a4, (q31_t)0xd66e0ef2, (q31_t)0x790dbf1d, (q31_t)0xd6681db1, (q31_t)0x790bb44a, (q31_t)0xd6622c89, - (q31_t)0x7909a92d, (q31_t)0xd65c3b7b, (q31_t)0x79079dc5, (q31_t)0xd6564a87, (q31_t)0x79059212, (q31_t)0xd65059ac, (q31_t)0x79038615, (q31_t)0xd64a68eb, - (q31_t)0x790179cd, (q31_t)0xd6447844, (q31_t)0x78ff6d3b, (q31_t)0xd63e87b6, (q31_t)0x78fd605d, (q31_t)0xd6389742, (q31_t)0x78fb5336, (q31_t)0xd632a6e8, - (q31_t)0x78f945c3, (q31_t)0xd62cb6a8, (q31_t)0x78f73806, (q31_t)0xd626c681, (q31_t)0x78f529fe, (q31_t)0xd620d675, (q31_t)0x78f31bac, (q31_t)0xd61ae682, - (q31_t)0x78f10d0f, (q31_t)0xd614f6a9, (q31_t)0x78eefe28, (q31_t)0xd60f06ea, (q31_t)0x78eceef6, (q31_t)0xd6091745, (q31_t)0x78eadf79, (q31_t)0xd60327b9, - (q31_t)0x78e8cfb2, (q31_t)0xd5fd3848, (q31_t)0x78e6bfa0, (q31_t)0xd5f748f0, (q31_t)0x78e4af44, (q31_t)0xd5f159b3, (q31_t)0x78e29e9d, (q31_t)0xd5eb6a8f, - (q31_t)0x78e08dab, (q31_t)0xd5e57b85, (q31_t)0x78de7c6f, (q31_t)0xd5df8c96, (q31_t)0x78dc6ae8, (q31_t)0xd5d99dc0, (q31_t)0x78da5917, (q31_t)0xd5d3af04, - (q31_t)0x78d846fb, (q31_t)0xd5cdc062, (q31_t)0x78d63495, (q31_t)0xd5c7d1db, (q31_t)0x78d421e4, (q31_t)0xd5c1e36d, (q31_t)0x78d20ee9, (q31_t)0xd5bbf519, - (q31_t)0x78cffba3, (q31_t)0xd5b606e0, (q31_t)0x78cde812, (q31_t)0xd5b018c0, (q31_t)0x78cbd437, (q31_t)0xd5aa2abb, (q31_t)0x78c9c012, (q31_t)0xd5a43cd0, - (q31_t)0x78c7aba2, (q31_t)0xd59e4eff, (q31_t)0x78c596e7, (q31_t)0xd5986148, (q31_t)0x78c381e2, (q31_t)0xd59273ab, (q31_t)0x78c16c93, (q31_t)0xd58c8628, - (q31_t)0x78bf56f9, (q31_t)0xd58698c0, (q31_t)0x78bd4114, (q31_t)0xd580ab72, (q31_t)0x78bb2ae5, (q31_t)0xd57abe3d, (q31_t)0x78b9146c, (q31_t)0xd574d124, - (q31_t)0x78b6fda8, (q31_t)0xd56ee424, (q31_t)0x78b4e69a, (q31_t)0xd568f73f, (q31_t)0x78b2cf41, (q31_t)0xd5630a74, (q31_t)0x78b0b79e, (q31_t)0xd55d1dc3, - (q31_t)0x78ae9fb0, (q31_t)0xd557312d, (q31_t)0x78ac8778, (q31_t)0xd55144b0, (q31_t)0x78aa6ef5, (q31_t)0xd54b584f, (q31_t)0x78a85628, (q31_t)0xd5456c07, - (q31_t)0x78a63d11, (q31_t)0xd53f7fda, (q31_t)0x78a423af, (q31_t)0xd53993c7, (q31_t)0x78a20a03, (q31_t)0xd533a7cf, (q31_t)0x789ff00c, (q31_t)0xd52dbbf1, - (q31_t)0x789dd5cb, (q31_t)0xd527d02e, (q31_t)0x789bbb3f, (q31_t)0xd521e484, (q31_t)0x7899a06a, (q31_t)0xd51bf8f6, (q31_t)0x78978549, (q31_t)0xd5160d82, - (q31_t)0x789569df, (q31_t)0xd5102228, (q31_t)0x78934e2a, (q31_t)0xd50a36e9, (q31_t)0x7891322a, (q31_t)0xd5044bc4, (q31_t)0x788f15e0, (q31_t)0xd4fe60ba, - (q31_t)0x788cf94c, (q31_t)0xd4f875ca, (q31_t)0x788adc6e, (q31_t)0xd4f28af5, (q31_t)0x7888bf45, (q31_t)0xd4eca03a, (q31_t)0x7886a1d1, (q31_t)0xd4e6b59a, - (q31_t)0x78848414, (q31_t)0xd4e0cb15, (q31_t)0x7882660c, (q31_t)0xd4dae0aa, (q31_t)0x788047ba, (q31_t)0xd4d4f65a, (q31_t)0x787e291d, (q31_t)0xd4cf0c24, - (q31_t)0x787c0a36, (q31_t)0xd4c92209, (q31_t)0x7879eb05, (q31_t)0xd4c33809, (q31_t)0x7877cb89, (q31_t)0xd4bd4e23, (q31_t)0x7875abc3, (q31_t)0xd4b76458, - (q31_t)0x78738bb3, (q31_t)0xd4b17aa8, (q31_t)0x78716b59, (q31_t)0xd4ab9112, (q31_t)0x786f4ab4, (q31_t)0xd4a5a798, (q31_t)0x786d29c5, (q31_t)0xd49fbe37, - (q31_t)0x786b088c, (q31_t)0xd499d4f2, (q31_t)0x7868e708, (q31_t)0xd493ebc8, (q31_t)0x7866c53a, (q31_t)0xd48e02b8, (q31_t)0x7864a322, (q31_t)0xd48819c3, - (q31_t)0x786280bf, (q31_t)0xd48230e9, (q31_t)0x78605e13, (q31_t)0xd47c4829, (q31_t)0x785e3b1c, (q31_t)0xd4765f85, (q31_t)0x785c17db, (q31_t)0xd47076fb, - (q31_t)0x7859f44f, (q31_t)0xd46a8e8d, (q31_t)0x7857d079, (q31_t)0xd464a639, (q31_t)0x7855ac5a, (q31_t)0xd45ebe00, (q31_t)0x785387ef, (q31_t)0xd458d5e2, - (q31_t)0x7851633b, (q31_t)0xd452eddf, (q31_t)0x784f3e3c, (q31_t)0xd44d05f6, (q31_t)0x784d18f4, (q31_t)0xd4471e29, (q31_t)0x784af361, (q31_t)0xd4413677, - (q31_t)0x7848cd83, (q31_t)0xd43b4ee0, (q31_t)0x7846a75c, (q31_t)0xd4356763, (q31_t)0x784480ea, (q31_t)0xd42f8002, (q31_t)0x78425a2f, (q31_t)0xd42998bc, - (q31_t)0x78403329, (q31_t)0xd423b191, (q31_t)0x783e0bd9, (q31_t)0xd41dca81, (q31_t)0x783be43e, (q31_t)0xd417e38c, (q31_t)0x7839bc5a, (q31_t)0xd411fcb2, - (q31_t)0x7837942b, (q31_t)0xd40c15f3, (q31_t)0x78356bb2, (q31_t)0xd4062f4f, (q31_t)0x783342ef, (q31_t)0xd40048c6, (q31_t)0x783119e2, (q31_t)0xd3fa6259, - (q31_t)0x782ef08b, (q31_t)0xd3f47c06, (q31_t)0x782cc6ea, (q31_t)0xd3ee95cf, (q31_t)0x782a9cfe, (q31_t)0xd3e8afb3, (q31_t)0x782872c8, (q31_t)0xd3e2c9b2, - (q31_t)0x78264849, (q31_t)0xd3dce3cd, (q31_t)0x78241d7f, (q31_t)0xd3d6fe03, (q31_t)0x7821f26b, (q31_t)0xd3d11853, (q31_t)0x781fc70d, (q31_t)0xd3cb32c0, - (q31_t)0x781d9b65, (q31_t)0xd3c54d47, (q31_t)0x781b6f72, (q31_t)0xd3bf67ea, (q31_t)0x78194336, (q31_t)0xd3b982a8, (q31_t)0x781716b0, (q31_t)0xd3b39d81, - (q31_t)0x7814e9df, (q31_t)0xd3adb876, (q31_t)0x7812bcc4, (q31_t)0xd3a7d385, (q31_t)0x78108f60, (q31_t)0xd3a1eeb1, (q31_t)0x780e61b1, (q31_t)0xd39c09f7, - (q31_t)0x780c33b8, (q31_t)0xd396255a, (q31_t)0x780a0575, (q31_t)0xd39040d7, (q31_t)0x7807d6e9, (q31_t)0xd38a5c70, (q31_t)0x7805a812, (q31_t)0xd3847824, - (q31_t)0x780378f1, (q31_t)0xd37e93f4, (q31_t)0x78014986, (q31_t)0xd378afdf, (q31_t)0x77ff19d1, (q31_t)0xd372cbe6, (q31_t)0x77fce9d2, (q31_t)0xd36ce808, - (q31_t)0x77fab989, (q31_t)0xd3670446, (q31_t)0x77f888f6, (q31_t)0xd361209f, (q31_t)0x77f65819, (q31_t)0xd35b3d13, (q31_t)0x77f426f2, (q31_t)0xd35559a4, - (q31_t)0x77f1f581, (q31_t)0xd34f764f, (q31_t)0x77efc3c5, (q31_t)0xd3499317, (q31_t)0x77ed91c0, (q31_t)0xd343affa, (q31_t)0x77eb5f71, (q31_t)0xd33dccf8, - (q31_t)0x77e92cd9, (q31_t)0xd337ea12, (q31_t)0x77e6f9f6, (q31_t)0xd3320748, (q31_t)0x77e4c6c9, (q31_t)0xd32c2499, (q31_t)0x77e29352, (q31_t)0xd3264206, - (q31_t)0x77e05f91, (q31_t)0xd3205f8f, (q31_t)0x77de2b86, (q31_t)0xd31a7d33, (q31_t)0x77dbf732, (q31_t)0xd3149af3, (q31_t)0x77d9c293, (q31_t)0xd30eb8cf, - (q31_t)0x77d78daa, (q31_t)0xd308d6c7, (q31_t)0x77d55878, (q31_t)0xd302f4da, (q31_t)0x77d322fc, (q31_t)0xd2fd1309, (q31_t)0x77d0ed35, (q31_t)0xd2f73154, - (q31_t)0x77ceb725, (q31_t)0xd2f14fba, (q31_t)0x77cc80cb, (q31_t)0xd2eb6e3c, (q31_t)0x77ca4a27, (q31_t)0xd2e58cdb, (q31_t)0x77c81339, (q31_t)0xd2dfab95, - (q31_t)0x77c5dc01, (q31_t)0xd2d9ca6a, (q31_t)0x77c3a47f, (q31_t)0xd2d3e95c, (q31_t)0x77c16cb4, (q31_t)0xd2ce0869, (q31_t)0x77bf349f, (q31_t)0xd2c82793, - (q31_t)0x77bcfc3f, (q31_t)0xd2c246d8, (q31_t)0x77bac396, (q31_t)0xd2bc6639, (q31_t)0x77b88aa3, (q31_t)0xd2b685b6, (q31_t)0x77b65166, (q31_t)0xd2b0a54f, - (q31_t)0x77b417df, (q31_t)0xd2aac504, (q31_t)0x77b1de0f, (q31_t)0xd2a4e4d5, (q31_t)0x77afa3f5, (q31_t)0xd29f04c2, (q31_t)0x77ad6990, (q31_t)0xd29924cb, - (q31_t)0x77ab2ee2, (q31_t)0xd29344f0, (q31_t)0x77a8f3ea, (q31_t)0xd28d6531, (q31_t)0x77a6b8a9, (q31_t)0xd287858e, (q31_t)0x77a47d1d, (q31_t)0xd281a607, - (q31_t)0x77a24148, (q31_t)0xd27bc69c, (q31_t)0x77a00529, (q31_t)0xd275e74d, (q31_t)0x779dc8c0, (q31_t)0xd270081b, (q31_t)0x779b8c0e, (q31_t)0xd26a2904, - (q31_t)0x77994f11, (q31_t)0xd2644a0a, (q31_t)0x779711cb, (q31_t)0xd25e6b2b, (q31_t)0x7794d43b, (q31_t)0xd2588c69, (q31_t)0x77929661, (q31_t)0xd252adc3, - (q31_t)0x7790583e, (q31_t)0xd24ccf39, (q31_t)0x778e19d0, (q31_t)0xd246f0cb, (q31_t)0x778bdb19, (q31_t)0xd241127a, (q31_t)0x77899c19, (q31_t)0xd23b3444, - (q31_t)0x77875cce, (q31_t)0xd235562b, (q31_t)0x77851d3a, (q31_t)0xd22f782f, (q31_t)0x7782dd5c, (q31_t)0xd2299a4e, (q31_t)0x77809d35, (q31_t)0xd223bc8a, - (q31_t)0x777e5cc3, (q31_t)0xd21ddee2, (q31_t)0x777c1c08, (q31_t)0xd2180156, (q31_t)0x7779db03, (q31_t)0xd21223e7, (q31_t)0x777799b5, (q31_t)0xd20c4694, - (q31_t)0x7775581d, (q31_t)0xd206695d, (q31_t)0x7773163b, (q31_t)0xd2008c43, (q31_t)0x7770d40f, (q31_t)0xd1faaf45, (q31_t)0x776e919a, (q31_t)0xd1f4d263, - (q31_t)0x776c4edb, (q31_t)0xd1eef59e, (q31_t)0x776a0bd3, (q31_t)0xd1e918f5, (q31_t)0x7767c880, (q31_t)0xd1e33c69, (q31_t)0x776584e5, (q31_t)0xd1dd5ff9, - (q31_t)0x776340ff, (q31_t)0xd1d783a6, (q31_t)0x7760fcd0, (q31_t)0xd1d1a76f, (q31_t)0x775eb857, (q31_t)0xd1cbcb54, (q31_t)0x775c7395, (q31_t)0xd1c5ef56, - (q31_t)0x775a2e89, (q31_t)0xd1c01375, (q31_t)0x7757e933, (q31_t)0xd1ba37b0, (q31_t)0x7755a394, (q31_t)0xd1b45c08, (q31_t)0x77535dab, (q31_t)0xd1ae807c, - (q31_t)0x77511778, (q31_t)0xd1a8a50d, (q31_t)0x774ed0fc, (q31_t)0xd1a2c9ba, (q31_t)0x774c8a36, (q31_t)0xd19cee84, (q31_t)0x774a4327, (q31_t)0xd197136b, - (q31_t)0x7747fbce, (q31_t)0xd191386e, (q31_t)0x7745b42c, (q31_t)0xd18b5d8e, (q31_t)0x77436c40, (q31_t)0xd18582ca, (q31_t)0x7741240a, (q31_t)0xd17fa823, - (q31_t)0x773edb8b, (q31_t)0xd179cd99, (q31_t)0x773c92c2, (q31_t)0xd173f32c, (q31_t)0x773a49b0, (q31_t)0xd16e18db, (q31_t)0x77380054, (q31_t)0xd1683ea7, - (q31_t)0x7735b6af, (q31_t)0xd1626490, (q31_t)0x77336cc0, (q31_t)0xd15c8a95, (q31_t)0x77312287, (q31_t)0xd156b0b7, (q31_t)0x772ed805, (q31_t)0xd150d6f6, - (q31_t)0x772c8d3a, (q31_t)0xd14afd52, (q31_t)0x772a4225, (q31_t)0xd14523cb, (q31_t)0x7727f6c6, (q31_t)0xd13f4a60, (q31_t)0x7725ab1f, (q31_t)0xd1397113, - (q31_t)0x77235f2d, (q31_t)0xd13397e2, (q31_t)0x772112f2, (q31_t)0xd12dbece, (q31_t)0x771ec66e, (q31_t)0xd127e5d7, (q31_t)0x771c79a0, (q31_t)0xd1220cfc, - (q31_t)0x771a2c88, (q31_t)0xd11c343f, (q31_t)0x7717df27, (q31_t)0xd1165b9f, (q31_t)0x7715917d, (q31_t)0xd110831b, (q31_t)0x77134389, (q31_t)0xd10aaab5, - (q31_t)0x7710f54c, (q31_t)0xd104d26b, (q31_t)0x770ea6c5, (q31_t)0xd0fefa3f, (q31_t)0x770c57f5, (q31_t)0xd0f9222f, (q31_t)0x770a08dc, (q31_t)0xd0f34a3d, - (q31_t)0x7707b979, (q31_t)0xd0ed7267, (q31_t)0x770569cc, (q31_t)0xd0e79aaf, (q31_t)0x770319d6, (q31_t)0xd0e1c313, (q31_t)0x7700c997, (q31_t)0xd0dbeb95, - (q31_t)0x76fe790e, (q31_t)0xd0d61434, (q31_t)0x76fc283c, (q31_t)0xd0d03cf0, (q31_t)0x76f9d721, (q31_t)0xd0ca65c9, (q31_t)0x76f785bc, (q31_t)0xd0c48ebf, - (q31_t)0x76f5340e, (q31_t)0xd0beb7d2, (q31_t)0x76f2e216, (q31_t)0xd0b8e102, (q31_t)0x76f08fd5, (q31_t)0xd0b30a50, (q31_t)0x76ee3d4b, (q31_t)0xd0ad33ba, - (q31_t)0x76ebea77, (q31_t)0xd0a75d42, (q31_t)0x76e9975a, (q31_t)0xd0a186e7, (q31_t)0x76e743f4, (q31_t)0xd09bb0aa, (q31_t)0x76e4f044, (q31_t)0xd095da89, - (q31_t)0x76e29c4b, (q31_t)0xd0900486, (q31_t)0x76e04808, (q31_t)0xd08a2ea0, (q31_t)0x76ddf37c, (q31_t)0xd08458d7, (q31_t)0x76db9ea7, (q31_t)0xd07e832c, - (q31_t)0x76d94989, (q31_t)0xd078ad9e, (q31_t)0x76d6f421, (q31_t)0xd072d82d, (q31_t)0x76d49e70, (q31_t)0xd06d02da, (q31_t)0x76d24876, (q31_t)0xd0672da3, - (q31_t)0x76cff232, (q31_t)0xd061588b, (q31_t)0x76cd9ba5, (q31_t)0xd05b838f, (q31_t)0x76cb44cf, (q31_t)0xd055aeb1, (q31_t)0x76c8edb0, (q31_t)0xd04fd9f1, - (q31_t)0x76c69647, (q31_t)0xd04a054e, (q31_t)0x76c43e95, (q31_t)0xd04430c8, (q31_t)0x76c1e699, (q31_t)0xd03e5c60, (q31_t)0x76bf8e55, (q31_t)0xd0388815, - (q31_t)0x76bd35c7, (q31_t)0xd032b3e7, (q31_t)0x76badcf0, (q31_t)0xd02cdfd8, (q31_t)0x76b883d0, (q31_t)0xd0270be5, (q31_t)0x76b62a66, (q31_t)0xd0213810, - (q31_t)0x76b3d0b4, (q31_t)0xd01b6459, (q31_t)0x76b176b8, (q31_t)0xd01590bf, (q31_t)0x76af1c72, (q31_t)0xd00fbd43, (q31_t)0x76acc1e4, (q31_t)0xd009e9e4, - (q31_t)0x76aa670d, (q31_t)0xd00416a3, (q31_t)0x76a80bec, (q31_t)0xcffe4380, (q31_t)0x76a5b082, (q31_t)0xcff8707a, (q31_t)0x76a354cf, (q31_t)0xcff29d92, - (q31_t)0x76a0f8d2, (q31_t)0xcfeccac7, (q31_t)0x769e9c8d, (q31_t)0xcfe6f81a, (q31_t)0x769c3ffe, (q31_t)0xcfe1258b, (q31_t)0x7699e326, (q31_t)0xcfdb531a, - (q31_t)0x76978605, (q31_t)0xcfd580c6, (q31_t)0x7695289b, (q31_t)0xcfcfae8f, (q31_t)0x7692cae8, (q31_t)0xcfc9dc77, (q31_t)0x76906ceb, (q31_t)0xcfc40a7c, - (q31_t)0x768e0ea6, (q31_t)0xcfbe389f, (q31_t)0x768bb017, (q31_t)0xcfb866e0, (q31_t)0x7689513f, (q31_t)0xcfb2953f, (q31_t)0x7686f21e, (q31_t)0xcfacc3bb, - (q31_t)0x768492b4, (q31_t)0xcfa6f255, (q31_t)0x76823301, (q31_t)0xcfa1210d, (q31_t)0x767fd304, (q31_t)0xcf9b4fe3, (q31_t)0x767d72bf, (q31_t)0xcf957ed7, - (q31_t)0x767b1231, (q31_t)0xcf8fade9, (q31_t)0x7678b159, (q31_t)0xcf89dd18, (q31_t)0x76765038, (q31_t)0xcf840c65, (q31_t)0x7673eecf, (q31_t)0xcf7e3bd1, - (q31_t)0x76718d1c, (q31_t)0xcf786b5a, (q31_t)0x766f2b20, (q31_t)0xcf729b01, (q31_t)0x766cc8db, (q31_t)0xcf6ccac6, (q31_t)0x766a664d, (q31_t)0xcf66faa9, - (q31_t)0x76680376, (q31_t)0xcf612aaa, (q31_t)0x7665a056, (q31_t)0xcf5b5ac9, (q31_t)0x76633ced, (q31_t)0xcf558b06, (q31_t)0x7660d93b, (q31_t)0xcf4fbb61, - (q31_t)0x765e7540, (q31_t)0xcf49ebda, (q31_t)0x765c10fc, (q31_t)0xcf441c71, (q31_t)0x7659ac6f, (q31_t)0xcf3e4d26, (q31_t)0x76574798, (q31_t)0xcf387dfa, - (q31_t)0x7654e279, (q31_t)0xcf32aeeb, (q31_t)0x76527d11, (q31_t)0xcf2cdffa, (q31_t)0x76501760, (q31_t)0xcf271128, (q31_t)0x764db166, (q31_t)0xcf214274, - (q31_t)0x764b4b23, (q31_t)0xcf1b73de, (q31_t)0x7648e497, (q31_t)0xcf15a566, (q31_t)0x76467dc2, (q31_t)0xcf0fd70c, (q31_t)0x764416a4, (q31_t)0xcf0a08d0, - (q31_t)0x7641af3d, (q31_t)0xcf043ab3, (q31_t)0x763f478d, (q31_t)0xcefe6cb3, (q31_t)0x763cdf94, (q31_t)0xcef89ed2, (q31_t)0x763a7752, (q31_t)0xcef2d110, - (q31_t)0x76380ec8, (q31_t)0xceed036b, (q31_t)0x7635a5f4, (q31_t)0xcee735e5, (q31_t)0x76333cd8, (q31_t)0xcee1687d, (q31_t)0x7630d372, (q31_t)0xcedb9b33, - (q31_t)0x762e69c4, (q31_t)0xced5ce08, (q31_t)0x762bffcd, (q31_t)0xced000fb, (q31_t)0x7629958c, (q31_t)0xceca340c, (q31_t)0x76272b03, (q31_t)0xcec4673c, - (q31_t)0x7624c031, (q31_t)0xcebe9a8a, (q31_t)0x76225517, (q31_t)0xceb8cdf7, (q31_t)0x761fe9b3, (q31_t)0xceb30181, (q31_t)0x761d7e06, (q31_t)0xcead352b, - (q31_t)0x761b1211, (q31_t)0xcea768f2, (q31_t)0x7618a5d3, (q31_t)0xcea19cd8, (q31_t)0x7616394c, (q31_t)0xce9bd0dd, (q31_t)0x7613cc7c, (q31_t)0xce960500, - (q31_t)0x76115f63, (q31_t)0xce903942, (q31_t)0x760ef201, (q31_t)0xce8a6da2, (q31_t)0x760c8457, (q31_t)0xce84a220, (q31_t)0x760a1664, (q31_t)0xce7ed6bd, - (q31_t)0x7607a828, (q31_t)0xce790b79, (q31_t)0x760539a3, (q31_t)0xce734053, (q31_t)0x7602cad5, (q31_t)0xce6d754c, (q31_t)0x76005bbf, (q31_t)0xce67aa63, - (q31_t)0x75fdec60, (q31_t)0xce61df99, (q31_t)0x75fb7cb8, (q31_t)0xce5c14ed, (q31_t)0x75f90cc7, (q31_t)0xce564a60, (q31_t)0x75f69c8d, (q31_t)0xce507ff2, - (q31_t)0x75f42c0b, (q31_t)0xce4ab5a2, (q31_t)0x75f1bb40, (q31_t)0xce44eb71, (q31_t)0x75ef4a2c, (q31_t)0xce3f215f, (q31_t)0x75ecd8cf, (q31_t)0xce39576c, - (q31_t)0x75ea672a, (q31_t)0xce338d97, (q31_t)0x75e7f53c, (q31_t)0xce2dc3e1, (q31_t)0x75e58305, (q31_t)0xce27fa49, (q31_t)0x75e31086, (q31_t)0xce2230d0, - (q31_t)0x75e09dbd, (q31_t)0xce1c6777, (q31_t)0x75de2aac, (q31_t)0xce169e3b, (q31_t)0x75dbb753, (q31_t)0xce10d51f, (q31_t)0x75d943b0, (q31_t)0xce0b0c21, - (q31_t)0x75d6cfc5, (q31_t)0xce054343, (q31_t)0x75d45b92, (q31_t)0xcdff7a83, (q31_t)0x75d1e715, (q31_t)0xcdf9b1e2, (q31_t)0x75cf7250, (q31_t)0xcdf3e95f, - (q31_t)0x75ccfd42, (q31_t)0xcdee20fc, (q31_t)0x75ca87ec, (q31_t)0xcde858b8, (q31_t)0x75c8124d, (q31_t)0xcde29092, (q31_t)0x75c59c65, (q31_t)0xcddcc88b, - (q31_t)0x75c32634, (q31_t)0xcdd700a4, (q31_t)0x75c0afbb, (q31_t)0xcdd138db, (q31_t)0x75be38fa, (q31_t)0xcdcb7131, (q31_t)0x75bbc1ef, (q31_t)0xcdc5a9a6, - (q31_t)0x75b94a9c, (q31_t)0xcdbfe23a, (q31_t)0x75b6d301, (q31_t)0xcdba1aee, (q31_t)0x75b45b1d, (q31_t)0xcdb453c0, (q31_t)0x75b1e2f0, (q31_t)0xcdae8cb1, - (q31_t)0x75af6a7b, (q31_t)0xcda8c5c1, (q31_t)0x75acf1bd, (q31_t)0xcda2fef0, (q31_t)0x75aa78b6, (q31_t)0xcd9d383f, (q31_t)0x75a7ff67, (q31_t)0xcd9771ac, - (q31_t)0x75a585cf, (q31_t)0xcd91ab39, (q31_t)0x75a30bef, (q31_t)0xcd8be4e4, (q31_t)0x75a091c6, (q31_t)0xcd861eaf, (q31_t)0x759e1755, (q31_t)0xcd805899, - (q31_t)0x759b9c9b, (q31_t)0xcd7a92a2, (q31_t)0x75992198, (q31_t)0xcd74ccca, (q31_t)0x7596a64d, (q31_t)0xcd6f0711, (q31_t)0x75942ab9, (q31_t)0xcd694178, - (q31_t)0x7591aedd, (q31_t)0xcd637bfe, (q31_t)0x758f32b9, (q31_t)0xcd5db6a3, (q31_t)0x758cb64c, (q31_t)0xcd57f167, (q31_t)0x758a3996, (q31_t)0xcd522c4a, - (q31_t)0x7587bc98, (q31_t)0xcd4c674d, (q31_t)0x75853f51, (q31_t)0xcd46a26f, (q31_t)0x7582c1c2, (q31_t)0xcd40ddb0, (q31_t)0x758043ea, (q31_t)0xcd3b1911, - (q31_t)0x757dc5ca, (q31_t)0xcd355491, (q31_t)0x757b4762, (q31_t)0xcd2f9030, (q31_t)0x7578c8b0, (q31_t)0xcd29cbee, (q31_t)0x757649b7, (q31_t)0xcd2407cc, - (q31_t)0x7573ca75, (q31_t)0xcd1e43ca, (q31_t)0x75714aea, (q31_t)0xcd187fe6, (q31_t)0x756ecb18, (q31_t)0xcd12bc22, (q31_t)0x756c4afc, (q31_t)0xcd0cf87e, - (q31_t)0x7569ca99, (q31_t)0xcd0734f9, (q31_t)0x756749ec, (q31_t)0xcd017193, (q31_t)0x7564c8f8, (q31_t)0xccfbae4d, (q31_t)0x756247bb, (q31_t)0xccf5eb26, - (q31_t)0x755fc635, (q31_t)0xccf0281f, (q31_t)0x755d4467, (q31_t)0xccea6538, (q31_t)0x755ac251, (q31_t)0xcce4a26f, (q31_t)0x75583ff3, (q31_t)0xccdedfc7, - (q31_t)0x7555bd4c, (q31_t)0xccd91d3d, (q31_t)0x75533a5c, (q31_t)0xccd35ad4, (q31_t)0x7550b725, (q31_t)0xcccd988a, (q31_t)0x754e33a4, (q31_t)0xccc7d65f, - (q31_t)0x754bafdc, (q31_t)0xccc21455, (q31_t)0x75492bcb, (q31_t)0xccbc5269, (q31_t)0x7546a772, (q31_t)0xccb6909e, (q31_t)0x754422d0, (q31_t)0xccb0cef2, - (q31_t)0x75419de7, (q31_t)0xccab0d65, (q31_t)0x753f18b4, (q31_t)0xcca54bf9, (q31_t)0x753c933a, (q31_t)0xcc9f8aac, (q31_t)0x753a0d77, (q31_t)0xcc99c97e, - (q31_t)0x7537876c, (q31_t)0xcc940871, (q31_t)0x75350118, (q31_t)0xcc8e4783, (q31_t)0x75327a7d, (q31_t)0xcc8886b5, (q31_t)0x752ff399, (q31_t)0xcc82c607, - (q31_t)0x752d6c6c, (q31_t)0xcc7d0578, (q31_t)0x752ae4f8, (q31_t)0xcc774509, (q31_t)0x75285d3b, (q31_t)0xcc7184ba, (q31_t)0x7525d536, (q31_t)0xcc6bc48b, - (q31_t)0x75234ce8, (q31_t)0xcc66047b, (q31_t)0x7520c453, (q31_t)0xcc60448c, (q31_t)0x751e3b75, (q31_t)0xcc5a84bc, (q31_t)0x751bb24f, (q31_t)0xcc54c50c, - (q31_t)0x751928e0, (q31_t)0xcc4f057c, (q31_t)0x75169f2a, (q31_t)0xcc49460c, (q31_t)0x7514152b, (q31_t)0xcc4386bc, (q31_t)0x75118ae4, (q31_t)0xcc3dc78b, - (q31_t)0x750f0054, (q31_t)0xcc38087b, (q31_t)0x750c757d, (q31_t)0xcc32498a, (q31_t)0x7509ea5d, (q31_t)0xcc2c8aba, (q31_t)0x75075ef5, (q31_t)0xcc26cc09, - (q31_t)0x7504d345, (q31_t)0xcc210d79, (q31_t)0x7502474d, (q31_t)0xcc1b4f08, (q31_t)0x74ffbb0d, (q31_t)0xcc1590b8, (q31_t)0x74fd2e84, (q31_t)0xcc0fd287, - (q31_t)0x74faa1b3, (q31_t)0xcc0a1477, (q31_t)0x74f8149a, (q31_t)0xcc045686, (q31_t)0x74f58739, (q31_t)0xcbfe98b6, (q31_t)0x74f2f990, (q31_t)0xcbf8db05, - (q31_t)0x74f06b9e, (q31_t)0xcbf31d75, (q31_t)0x74eddd65, (q31_t)0xcbed6005, (q31_t)0x74eb4ee3, (q31_t)0xcbe7a2b5, (q31_t)0x74e8c01a, (q31_t)0xcbe1e585, - (q31_t)0x74e63108, (q31_t)0xcbdc2876, (q31_t)0x74e3a1ae, (q31_t)0xcbd66b86, (q31_t)0x74e1120c, (q31_t)0xcbd0aeb7, (q31_t)0x74de8221, (q31_t)0xcbcaf208, - (q31_t)0x74dbf1ef, (q31_t)0xcbc53579, (q31_t)0x74d96175, (q31_t)0xcbbf790a, (q31_t)0x74d6d0b2, (q31_t)0xcbb9bcbb, (q31_t)0x74d43fa8, (q31_t)0xcbb4008d, - (q31_t)0x74d1ae55, (q31_t)0xcbae447f, (q31_t)0x74cf1cbb, (q31_t)0xcba88891, (q31_t)0x74cc8ad8, (q31_t)0xcba2ccc4, (q31_t)0x74c9f8ad, (q31_t)0xcb9d1117, - (q31_t)0x74c7663a, (q31_t)0xcb97558a, (q31_t)0x74c4d380, (q31_t)0xcb919a1d, (q31_t)0x74c2407d, (q31_t)0xcb8bded1, (q31_t)0x74bfad32, (q31_t)0xcb8623a5, - (q31_t)0x74bd199f, (q31_t)0xcb80689a, (q31_t)0x74ba85c4, (q31_t)0xcb7aadaf, (q31_t)0x74b7f1a1, (q31_t)0xcb74f2e4, (q31_t)0x74b55d36, (q31_t)0xcb6f383a, - (q31_t)0x74b2c884, (q31_t)0xcb697db0, (q31_t)0x74b03389, (q31_t)0xcb63c347, (q31_t)0x74ad9e46, (q31_t)0xcb5e08fe, (q31_t)0x74ab08bb, (q31_t)0xcb584ed6, - (q31_t)0x74a872e8, (q31_t)0xcb5294ce, (q31_t)0x74a5dccd, (q31_t)0xcb4cdae6, (q31_t)0x74a3466b, (q31_t)0xcb47211f, (q31_t)0x74a0afc0, (q31_t)0xcb416779, - (q31_t)0x749e18cd, (q31_t)0xcb3badf3, (q31_t)0x749b8193, (q31_t)0xcb35f48d, (q31_t)0x7498ea11, (q31_t)0xcb303b49, (q31_t)0x74965246, (q31_t)0xcb2a8224, - (q31_t)0x7493ba34, (q31_t)0xcb24c921, (q31_t)0x749121da, (q31_t)0xcb1f103e, (q31_t)0x748e8938, (q31_t)0xcb19577b, (q31_t)0x748bf04d, (q31_t)0xcb139ed9, - (q31_t)0x7489571c, (q31_t)0xcb0de658, (q31_t)0x7486bda2, (q31_t)0xcb082df8, (q31_t)0x748423e0, (q31_t)0xcb0275b8, (q31_t)0x748189d7, (q31_t)0xcafcbd99, - (q31_t)0x747eef85, (q31_t)0xcaf7059a, (q31_t)0x747c54ec, (q31_t)0xcaf14dbd, (q31_t)0x7479ba0b, (q31_t)0xcaeb9600, (q31_t)0x74771ee2, (q31_t)0xcae5de64, - (q31_t)0x74748371, (q31_t)0xcae026e8, (q31_t)0x7471e7b8, (q31_t)0xcada6f8d, (q31_t)0x746f4bb8, (q31_t)0xcad4b853, (q31_t)0x746caf70, (q31_t)0xcacf013a, - (q31_t)0x746a12df, (q31_t)0xcac94a42, (q31_t)0x74677608, (q31_t)0xcac3936b, (q31_t)0x7464d8e8, (q31_t)0xcabddcb4, (q31_t)0x74623b80, (q31_t)0xcab8261e, - (q31_t)0x745f9dd1, (q31_t)0xcab26fa9, (q31_t)0x745cffda, (q31_t)0xcaacb955, (q31_t)0x745a619b, (q31_t)0xcaa70322, (q31_t)0x7457c314, (q31_t)0xcaa14d10, - (q31_t)0x74552446, (q31_t)0xca9b971e, (q31_t)0x74528530, (q31_t)0xca95e14e, (q31_t)0x744fe5d2, (q31_t)0xca902b9f, (q31_t)0x744d462c, (q31_t)0xca8a7610, - (q31_t)0x744aa63f, (q31_t)0xca84c0a3, (q31_t)0x7448060a, (q31_t)0xca7f0b56, (q31_t)0x7445658d, (q31_t)0xca79562b, (q31_t)0x7442c4c8, (q31_t)0xca73a120, - (q31_t)0x744023bc, (q31_t)0xca6dec37, (q31_t)0x743d8268, (q31_t)0xca68376e, (q31_t)0x743ae0cc, (q31_t)0xca6282c7, (q31_t)0x74383ee9, (q31_t)0xca5cce40, - (q31_t)0x74359cbd, (q31_t)0xca5719db, (q31_t)0x7432fa4b, (q31_t)0xca516597, (q31_t)0x74305790, (q31_t)0xca4bb174, (q31_t)0x742db48e, (q31_t)0xca45fd72, - (q31_t)0x742b1144, (q31_t)0xca404992, (q31_t)0x74286db3, (q31_t)0xca3a95d2, (q31_t)0x7425c9da, (q31_t)0xca34e234, (q31_t)0x742325b9, (q31_t)0xca2f2eb6, - (q31_t)0x74208150, (q31_t)0xca297b5a, (q31_t)0x741ddca0, (q31_t)0xca23c820, (q31_t)0x741b37a9, (q31_t)0xca1e1506, (q31_t)0x74189269, (q31_t)0xca18620e, - (q31_t)0x7415ece2, (q31_t)0xca12af37, (q31_t)0x74134714, (q31_t)0xca0cfc81, (q31_t)0x7410a0fe, (q31_t)0xca0749ec, (q31_t)0x740dfaa0, (q31_t)0xca019779, - (q31_t)0x740b53fb, (q31_t)0xc9fbe527, (q31_t)0x7408ad0e, (q31_t)0xc9f632f6, (q31_t)0x740605d9, (q31_t)0xc9f080e7, (q31_t)0x74035e5d, (q31_t)0xc9eacef9, - (q31_t)0x7400b69a, (q31_t)0xc9e51d2d, (q31_t)0x73fe0e8f, (q31_t)0xc9df6b81, (q31_t)0x73fb663c, (q31_t)0xc9d9b9f7, (q31_t)0x73f8bda2, (q31_t)0xc9d4088f, - (q31_t)0x73f614c0, (q31_t)0xc9ce5748, (q31_t)0x73f36b97, (q31_t)0xc9c8a622, (q31_t)0x73f0c226, (q31_t)0xc9c2f51e, (q31_t)0x73ee186e, (q31_t)0xc9bd443c, - (q31_t)0x73eb6e6e, (q31_t)0xc9b7937a, (q31_t)0x73e8c426, (q31_t)0xc9b1e2db, (q31_t)0x73e61997, (q31_t)0xc9ac325d, (q31_t)0x73e36ec1, (q31_t)0xc9a68200, - (q31_t)0x73e0c3a3, (q31_t)0xc9a0d1c5, (q31_t)0x73de183e, (q31_t)0xc99b21ab, (q31_t)0x73db6c91, (q31_t)0xc99571b3, (q31_t)0x73d8c09d, (q31_t)0xc98fc1dc, - (q31_t)0x73d61461, (q31_t)0xc98a1227, (q31_t)0x73d367de, (q31_t)0xc9846294, (q31_t)0x73d0bb13, (q31_t)0xc97eb322, (q31_t)0x73ce0e01, (q31_t)0xc97903d2, - (q31_t)0x73cb60a8, (q31_t)0xc97354a4, (q31_t)0x73c8b307, (q31_t)0xc96da597, (q31_t)0x73c6051f, (q31_t)0xc967f6ac, (q31_t)0x73c356ef, (q31_t)0xc96247e2, - (q31_t)0x73c0a878, (q31_t)0xc95c993a, (q31_t)0x73bdf9b9, (q31_t)0xc956eab4, (q31_t)0x73bb4ab3, (q31_t)0xc9513c50, (q31_t)0x73b89b66, (q31_t)0xc94b8e0d, - (q31_t)0x73b5ebd1, (q31_t)0xc945dfec, (q31_t)0x73b33bf5, (q31_t)0xc94031ed, (q31_t)0x73b08bd1, (q31_t)0xc93a8410, (q31_t)0x73addb67, (q31_t)0xc934d654, - (q31_t)0x73ab2ab4, (q31_t)0xc92f28ba, (q31_t)0x73a879bb, (q31_t)0xc9297b42, (q31_t)0x73a5c87a, (q31_t)0xc923cdec, (q31_t)0x73a316f2, (q31_t)0xc91e20b8, - (q31_t)0x73a06522, (q31_t)0xc91873a5, (q31_t)0x739db30b, (q31_t)0xc912c6b5, (q31_t)0x739b00ad, (q31_t)0xc90d19e6, (q31_t)0x73984e07, (q31_t)0xc9076d39, - (q31_t)0x73959b1b, (q31_t)0xc901c0ae, (q31_t)0x7392e7e6, (q31_t)0xc8fc1445, (q31_t)0x7390346b, (q31_t)0xc8f667fe, (q31_t)0x738d80a8, (q31_t)0xc8f0bbd9, - (q31_t)0x738acc9e, (q31_t)0xc8eb0fd6, (q31_t)0x7388184d, (q31_t)0xc8e563f5, (q31_t)0x738563b5, (q31_t)0xc8dfb836, (q31_t)0x7382aed5, (q31_t)0xc8da0c99, - (q31_t)0x737ff9ae, (q31_t)0xc8d4611d, (q31_t)0x737d4440, (q31_t)0xc8ceb5c4, (q31_t)0x737a8e8a, (q31_t)0xc8c90a8d, (q31_t)0x7377d88d, (q31_t)0xc8c35f78, - (q31_t)0x73752249, (q31_t)0xc8bdb485, (q31_t)0x73726bbe, (q31_t)0xc8b809b4, (q31_t)0x736fb4ec, (q31_t)0xc8b25f06, (q31_t)0x736cfdd2, (q31_t)0xc8acb479, - (q31_t)0x736a4671, (q31_t)0xc8a70a0e, (q31_t)0x73678ec9, (q31_t)0xc8a15fc6, (q31_t)0x7364d6da, (q31_t)0xc89bb5a0, (q31_t)0x73621ea4, (q31_t)0xc8960b9c, - (q31_t)0x735f6626, (q31_t)0xc89061ba, (q31_t)0x735cad61, (q31_t)0xc88ab7fa, (q31_t)0x7359f456, (q31_t)0xc8850e5d, (q31_t)0x73573b03, (q31_t)0xc87f64e2, - (q31_t)0x73548168, (q31_t)0xc879bb89, (q31_t)0x7351c787, (q31_t)0xc8741252, (q31_t)0x734f0d5f, (q31_t)0xc86e693d, (q31_t)0x734c52ef, (q31_t)0xc868c04b, - (q31_t)0x73499838, (q31_t)0xc863177b, (q31_t)0x7346dd3a, (q31_t)0xc85d6ece, (q31_t)0x734421f6, (q31_t)0xc857c642, (q31_t)0x7341666a, (q31_t)0xc8521dd9, - (q31_t)0x733eaa96, (q31_t)0xc84c7593, (q31_t)0x733bee7c, (q31_t)0xc846cd6e, (q31_t)0x7339321b, (q31_t)0xc841256d, (q31_t)0x73367572, (q31_t)0xc83b7d8d, - (q31_t)0x7333b883, (q31_t)0xc835d5d0, (q31_t)0x7330fb4d, (q31_t)0xc8302e35, (q31_t)0x732e3dcf, (q31_t)0xc82a86bd, (q31_t)0x732b800a, (q31_t)0xc824df67, - (q31_t)0x7328c1ff, (q31_t)0xc81f3834, (q31_t)0x732603ac, (q31_t)0xc8199123, (q31_t)0x73234512, (q31_t)0xc813ea35, (q31_t)0x73208632, (q31_t)0xc80e4369, - (q31_t)0x731dc70a, (q31_t)0xc8089cbf, (q31_t)0x731b079b, (q31_t)0xc802f638, (q31_t)0x731847e5, (q31_t)0xc7fd4fd4, (q31_t)0x731587e8, (q31_t)0xc7f7a992, - (q31_t)0x7312c7a5, (q31_t)0xc7f20373, (q31_t)0x7310071a, (q31_t)0xc7ec5d76, (q31_t)0x730d4648, (q31_t)0xc7e6b79c, (q31_t)0x730a8530, (q31_t)0xc7e111e5, - (q31_t)0x7307c3d0, (q31_t)0xc7db6c50, (q31_t)0x73050229, (q31_t)0xc7d5c6de, (q31_t)0x7302403c, (q31_t)0xc7d0218e, (q31_t)0x72ff7e07, (q31_t)0xc7ca7c61, - (q31_t)0x72fcbb8c, (q31_t)0xc7c4d757, (q31_t)0x72f9f8c9, (q31_t)0xc7bf3270, (q31_t)0x72f735c0, (q31_t)0xc7b98dab, (q31_t)0x72f47270, (q31_t)0xc7b3e909, - (q31_t)0x72f1aed9, (q31_t)0xc7ae4489, (q31_t)0x72eeeafb, (q31_t)0xc7a8a02c, (q31_t)0x72ec26d6, (q31_t)0xc7a2fbf3, (q31_t)0x72e9626a, (q31_t)0xc79d57db, - (q31_t)0x72e69db7, (q31_t)0xc797b3e7, (q31_t)0x72e3d8be, (q31_t)0xc7921015, (q31_t)0x72e1137d, (q31_t)0xc78c6c67, (q31_t)0x72de4df6, (q31_t)0xc786c8db, - (q31_t)0x72db8828, (q31_t)0xc7812572, (q31_t)0x72d8c213, (q31_t)0xc77b822b, (q31_t)0x72d5fbb7, (q31_t)0xc775df08, (q31_t)0x72d33514, (q31_t)0xc7703c08, - (q31_t)0x72d06e2b, (q31_t)0xc76a992a, (q31_t)0x72cda6fb, (q31_t)0xc764f66f, (q31_t)0x72cadf83, (q31_t)0xc75f53d7, (q31_t)0x72c817c6, (q31_t)0xc759b163, - (q31_t)0x72c54fc1, (q31_t)0xc7540f11, (q31_t)0x72c28775, (q31_t)0xc74e6ce2, (q31_t)0x72bfbee3, (q31_t)0xc748cad6, (q31_t)0x72bcf60a, (q31_t)0xc74328ed, - (q31_t)0x72ba2cea, (q31_t)0xc73d8727, (q31_t)0x72b76383, (q31_t)0xc737e584, (q31_t)0x72b499d6, (q31_t)0xc7324404, (q31_t)0x72b1cfe1, (q31_t)0xc72ca2a7, - (q31_t)0x72af05a7, (q31_t)0xc727016d, (q31_t)0x72ac3b25, (q31_t)0xc7216056, (q31_t)0x72a9705c, (q31_t)0xc71bbf62, (q31_t)0x72a6a54d, (q31_t)0xc7161e92, - (q31_t)0x72a3d9f7, (q31_t)0xc7107de4, (q31_t)0x72a10e5b, (q31_t)0xc70add5a, (q31_t)0x729e4277, (q31_t)0xc7053cf2, (q31_t)0x729b764d, (q31_t)0xc6ff9cae, - (q31_t)0x7298a9dd, (q31_t)0xc6f9fc8d, (q31_t)0x7295dd25, (q31_t)0xc6f45c8f, (q31_t)0x72931027, (q31_t)0xc6eebcb5, (q31_t)0x729042e3, (q31_t)0xc6e91cfd, - (q31_t)0x728d7557, (q31_t)0xc6e37d69, (q31_t)0x728aa785, (q31_t)0xc6ddddf8, (q31_t)0x7287d96c, (q31_t)0xc6d83eab, (q31_t)0x72850b0d, (q31_t)0xc6d29f80, - (q31_t)0x72823c67, (q31_t)0xc6cd0079, (q31_t)0x727f6d7a, (q31_t)0xc6c76195, (q31_t)0x727c9e47, (q31_t)0xc6c1c2d4, (q31_t)0x7279cecd, (q31_t)0xc6bc2437, - (q31_t)0x7276ff0d, (q31_t)0xc6b685bd, (q31_t)0x72742f05, (q31_t)0xc6b0e767, (q31_t)0x72715eb8, (q31_t)0xc6ab4933, (q31_t)0x726e8e23, (q31_t)0xc6a5ab23, - (q31_t)0x726bbd48, (q31_t)0xc6a00d37, (q31_t)0x7268ec27, (q31_t)0xc69a6f6e, (q31_t)0x72661abf, (q31_t)0xc694d1c8, (q31_t)0x72634910, (q31_t)0xc68f3446, - (q31_t)0x7260771b, (q31_t)0xc68996e7, (q31_t)0x725da4df, (q31_t)0xc683f9ab, (q31_t)0x725ad25d, (q31_t)0xc67e5c93, (q31_t)0x7257ff94, (q31_t)0xc678bf9f, - (q31_t)0x72552c85, (q31_t)0xc67322ce, (q31_t)0x7252592f, (q31_t)0xc66d8620, (q31_t)0x724f8593, (q31_t)0xc667e996, (q31_t)0x724cb1b0, (q31_t)0xc6624d30, - (q31_t)0x7249dd86, (q31_t)0xc65cb0ed, (q31_t)0x72470916, (q31_t)0xc65714cd, (q31_t)0x72443460, (q31_t)0xc65178d1, (q31_t)0x72415f63, (q31_t)0xc64bdcf9, - (q31_t)0x723e8a20, (q31_t)0xc6464144, (q31_t)0x723bb496, (q31_t)0xc640a5b3, (q31_t)0x7238dec5, (q31_t)0xc63b0a46, (q31_t)0x723608af, (q31_t)0xc6356efc, - (q31_t)0x72333251, (q31_t)0xc62fd3d6, (q31_t)0x72305bae, (q31_t)0xc62a38d4, (q31_t)0x722d84c4, (q31_t)0xc6249df5, (q31_t)0x722aad93, (q31_t)0xc61f033a, - (q31_t)0x7227d61c, (q31_t)0xc61968a2, (q31_t)0x7224fe5f, (q31_t)0xc613ce2f, (q31_t)0x7222265b, (q31_t)0xc60e33df, (q31_t)0x721f4e11, (q31_t)0xc60899b2, - (q31_t)0x721c7580, (q31_t)0xc602ffaa, (q31_t)0x72199ca9, (q31_t)0xc5fd65c5, (q31_t)0x7216c38c, (q31_t)0xc5f7cc04, (q31_t)0x7213ea28, (q31_t)0xc5f23267, - (q31_t)0x7211107e, (q31_t)0xc5ec98ee, (q31_t)0x720e368d, (q31_t)0xc5e6ff98, (q31_t)0x720b5c57, (q31_t)0xc5e16667, (q31_t)0x720881d9, (q31_t)0xc5dbcd59, - (q31_t)0x7205a716, (q31_t)0xc5d6346f, (q31_t)0x7202cc0c, (q31_t)0xc5d09ba9, (q31_t)0x71fff0bc, (q31_t)0xc5cb0307, (q31_t)0x71fd1525, (q31_t)0xc5c56a89, - (q31_t)0x71fa3949, (q31_t)0xc5bfd22e, (q31_t)0x71f75d25, (q31_t)0xc5ba39f8, (q31_t)0x71f480bc, (q31_t)0xc5b4a1e5, (q31_t)0x71f1a40c, (q31_t)0xc5af09f7, - (q31_t)0x71eec716, (q31_t)0xc5a9722c, (q31_t)0x71ebe9da, (q31_t)0xc5a3da86, (q31_t)0x71e90c57, (q31_t)0xc59e4303, (q31_t)0x71e62e8f, (q31_t)0xc598aba5, - (q31_t)0x71e35080, (q31_t)0xc593146a, (q31_t)0x71e0722a, (q31_t)0xc58d7d54, (q31_t)0x71dd938f, (q31_t)0xc587e661, (q31_t)0x71dab4ad, (q31_t)0xc5824f93, - (q31_t)0x71d7d585, (q31_t)0xc57cb8e9, (q31_t)0x71d4f617, (q31_t)0xc5772263, (q31_t)0x71d21662, (q31_t)0xc5718c00, (q31_t)0x71cf3667, (q31_t)0xc56bf5c2, - (q31_t)0x71cc5626, (q31_t)0xc5665fa9, (q31_t)0x71c9759f, (q31_t)0xc560c9b3, (q31_t)0x71c694d2, (q31_t)0xc55b33e2, (q31_t)0x71c3b3bf, (q31_t)0xc5559e34, - (q31_t)0x71c0d265, (q31_t)0xc55008ab, (q31_t)0x71bdf0c5, (q31_t)0xc54a7346, (q31_t)0x71bb0edf, (q31_t)0xc544de05, (q31_t)0x71b82cb3, (q31_t)0xc53f48e9, - (q31_t)0x71b54a41, (q31_t)0xc539b3f1, (q31_t)0x71b26788, (q31_t)0xc5341f1d, (q31_t)0x71af848a, (q31_t)0xc52e8a6d, (q31_t)0x71aca145, (q31_t)0xc528f5e1, - (q31_t)0x71a9bdba, (q31_t)0xc523617a, (q31_t)0x71a6d9e9, (q31_t)0xc51dcd37, (q31_t)0x71a3f5d2, (q31_t)0xc5183919, (q31_t)0x71a11175, (q31_t)0xc512a51f, - (q31_t)0x719e2cd2, (q31_t)0xc50d1149, (q31_t)0x719b47e9, (q31_t)0xc5077d97, (q31_t)0x719862b9, (q31_t)0xc501ea0a, (q31_t)0x71957d44, (q31_t)0xc4fc56a2, - (q31_t)0x71929789, (q31_t)0xc4f6c35d, (q31_t)0x718fb187, (q31_t)0xc4f1303d, (q31_t)0x718ccb3f, (q31_t)0xc4eb9d42, (q31_t)0x7189e4b2, (q31_t)0xc4e60a6b, - (q31_t)0x7186fdde, (q31_t)0xc4e077b8, (q31_t)0x718416c4, (q31_t)0xc4dae52a, (q31_t)0x71812f65, (q31_t)0xc4d552c1, (q31_t)0x717e47bf, (q31_t)0xc4cfc07c, - (q31_t)0x717b5fd3, (q31_t)0xc4ca2e5b, (q31_t)0x717877a1, (q31_t)0xc4c49c5f, (q31_t)0x71758f29, (q31_t)0xc4bf0a87, (q31_t)0x7172a66c, (q31_t)0xc4b978d4, - (q31_t)0x716fbd68, (q31_t)0xc4b3e746, (q31_t)0x716cd41e, (q31_t)0xc4ae55dc, (q31_t)0x7169ea8f, (q31_t)0xc4a8c497, (q31_t)0x716700b9, (q31_t)0xc4a33376, - (q31_t)0x7164169d, (q31_t)0xc49da27a, (q31_t)0x71612c3c, (q31_t)0xc49811a3, (q31_t)0x715e4194, (q31_t)0xc49280f0, (q31_t)0x715b56a7, (q31_t)0xc48cf062, - (q31_t)0x71586b74, (q31_t)0xc4875ff9, (q31_t)0x71557ffa, (q31_t)0xc481cfb4, (q31_t)0x7152943b, (q31_t)0xc47c3f94, (q31_t)0x714fa836, (q31_t)0xc476af98, - (q31_t)0x714cbbeb, (q31_t)0xc4711fc2, (q31_t)0x7149cf5a, (q31_t)0xc46b9010, (q31_t)0x7146e284, (q31_t)0xc4660083, (q31_t)0x7143f567, (q31_t)0xc460711b, - (q31_t)0x71410805, (q31_t)0xc45ae1d7, (q31_t)0x713e1a5c, (q31_t)0xc45552b8, (q31_t)0x713b2c6e, (q31_t)0xc44fc3be, (q31_t)0x71383e3a, (q31_t)0xc44a34e9, - (q31_t)0x71354fc0, (q31_t)0xc444a639, (q31_t)0x71326101, (q31_t)0xc43f17ad, (q31_t)0x712f71fb, (q31_t)0xc4398947, (q31_t)0x712c82b0, (q31_t)0xc433fb05, - (q31_t)0x7129931f, (q31_t)0xc42e6ce8, (q31_t)0x7126a348, (q31_t)0xc428def0, (q31_t)0x7123b32b, (q31_t)0xc423511d, (q31_t)0x7120c2c8, (q31_t)0xc41dc36f, - (q31_t)0x711dd220, (q31_t)0xc41835e6, (q31_t)0x711ae132, (q31_t)0xc412a882, (q31_t)0x7117effe, (q31_t)0xc40d1b42, (q31_t)0x7114fe84, (q31_t)0xc4078e28, - (q31_t)0x71120cc5, (q31_t)0xc4020133, (q31_t)0x710f1ac0, (q31_t)0xc3fc7462, (q31_t)0x710c2875, (q31_t)0xc3f6e7b7, (q31_t)0x710935e4, (q31_t)0xc3f15b31, - (q31_t)0x7106430e, (q31_t)0xc3ebced0, (q31_t)0x71034ff2, (q31_t)0xc3e64294, (q31_t)0x71005c90, (q31_t)0xc3e0b67d, (q31_t)0x70fd68e9, (q31_t)0xc3db2a8b, - (q31_t)0x70fa74fc, (q31_t)0xc3d59ebe, (q31_t)0x70f780c9, (q31_t)0xc3d01316, (q31_t)0x70f48c50, (q31_t)0xc3ca8793, (q31_t)0x70f19792, (q31_t)0xc3c4fc36, - (q31_t)0x70eea28e, (q31_t)0xc3bf70fd, (q31_t)0x70ebad45, (q31_t)0xc3b9e5ea, (q31_t)0x70e8b7b5, (q31_t)0xc3b45afc, (q31_t)0x70e5c1e1, (q31_t)0xc3aed034, - (q31_t)0x70e2cbc6, (q31_t)0xc3a94590, (q31_t)0x70dfd566, (q31_t)0xc3a3bb12, (q31_t)0x70dcdec0, (q31_t)0xc39e30b8, (q31_t)0x70d9e7d5, (q31_t)0xc398a685, - (q31_t)0x70d6f0a4, (q31_t)0xc3931c76, (q31_t)0x70d3f92d, (q31_t)0xc38d928d, (q31_t)0x70d10171, (q31_t)0xc38808c9, (q31_t)0x70ce096f, (q31_t)0xc3827f2a, - (q31_t)0x70cb1128, (q31_t)0xc37cf5b0, (q31_t)0x70c8189b, (q31_t)0xc3776c5c, (q31_t)0x70c51fc8, (q31_t)0xc371e32d, (q31_t)0x70c226b0, (q31_t)0xc36c5a24, - (q31_t)0x70bf2d53, (q31_t)0xc366d140, (q31_t)0x70bc33b0, (q31_t)0xc3614881, (q31_t)0x70b939c7, (q31_t)0xc35bbfe8, (q31_t)0x70b63f99, (q31_t)0xc3563774, - (q31_t)0x70b34525, (q31_t)0xc350af26, (q31_t)0x70b04a6b, (q31_t)0xc34b26fc, (q31_t)0x70ad4f6d, (q31_t)0xc3459ef9, (q31_t)0x70aa5428, (q31_t)0xc340171b, - (q31_t)0x70a7589f, (q31_t)0xc33a8f62, (q31_t)0x70a45ccf, (q31_t)0xc33507cf, (q31_t)0x70a160ba, (q31_t)0xc32f8061, (q31_t)0x709e6460, (q31_t)0xc329f919, - (q31_t)0x709b67c0, (q31_t)0xc32471f7, (q31_t)0x70986adb, (q31_t)0xc31eeaf9, (q31_t)0x70956db1, (q31_t)0xc3196422, (q31_t)0x70927041, (q31_t)0xc313dd70, - (q31_t)0x708f728b, (q31_t)0xc30e56e4, (q31_t)0x708c7490, (q31_t)0xc308d07d, (q31_t)0x70897650, (q31_t)0xc3034a3c, (q31_t)0x708677ca, (q31_t)0xc2fdc420, - (q31_t)0x708378ff, (q31_t)0xc2f83e2a, (q31_t)0x708079ee, (q31_t)0xc2f2b85a, (q31_t)0x707d7a98, (q31_t)0xc2ed32af, (q31_t)0x707a7afd, (q31_t)0xc2e7ad2a, - (q31_t)0x70777b1c, (q31_t)0xc2e227cb, (q31_t)0x70747af6, (q31_t)0xc2dca291, (q31_t)0x70717a8a, (q31_t)0xc2d71d7e, (q31_t)0x706e79d9, (q31_t)0xc2d1988f, - (q31_t)0x706b78e3, (q31_t)0xc2cc13c7, (q31_t)0x706877a7, (q31_t)0xc2c68f24, (q31_t)0x70657626, (q31_t)0xc2c10aa7, (q31_t)0x70627460, (q31_t)0xc2bb8650, - (q31_t)0x705f7255, (q31_t)0xc2b6021f, (q31_t)0x705c7004, (q31_t)0xc2b07e14, (q31_t)0x70596d6d, (q31_t)0xc2aafa2e, (q31_t)0x70566a92, (q31_t)0xc2a5766e, - (q31_t)0x70536771, (q31_t)0xc29ff2d4, (q31_t)0x7050640b, (q31_t)0xc29a6f60, (q31_t)0x704d6060, (q31_t)0xc294ec12, (q31_t)0x704a5c6f, (q31_t)0xc28f68e9, - (q31_t)0x70475839, (q31_t)0xc289e5e7, (q31_t)0x704453be, (q31_t)0xc284630a, (q31_t)0x70414efd, (q31_t)0xc27ee054, (q31_t)0x703e49f8, (q31_t)0xc2795dc3, - (q31_t)0x703b44ad, (q31_t)0xc273db58, (q31_t)0x70383f1d, (q31_t)0xc26e5913, (q31_t)0x70353947, (q31_t)0xc268d6f5, (q31_t)0x7032332d, (q31_t)0xc26354fc, - (q31_t)0x702f2ccd, (q31_t)0xc25dd329, (q31_t)0x702c2628, (q31_t)0xc258517c, (q31_t)0x70291f3e, (q31_t)0xc252cff5, (q31_t)0x7026180e, (q31_t)0xc24d4e95, - (q31_t)0x7023109a, (q31_t)0xc247cd5a, (q31_t)0x702008e0, (q31_t)0xc2424c46, (q31_t)0x701d00e1, (q31_t)0xc23ccb57, (q31_t)0x7019f89d, (q31_t)0xc2374a8f, - (q31_t)0x7016f014, (q31_t)0xc231c9ec, (q31_t)0x7013e746, (q31_t)0xc22c4970, (q31_t)0x7010de32, (q31_t)0xc226c91a, (q31_t)0x700dd4da, (q31_t)0xc22148ea, - (q31_t)0x700acb3c, (q31_t)0xc21bc8e1, (q31_t)0x7007c159, (q31_t)0xc21648fd, (q31_t)0x7004b731, (q31_t)0xc210c940, (q31_t)0x7001acc4, (q31_t)0xc20b49a9, - (q31_t)0x6ffea212, (q31_t)0xc205ca38, (q31_t)0x6ffb971b, (q31_t)0xc2004aed, (q31_t)0x6ff88bde, (q31_t)0xc1facbc9, (q31_t)0x6ff5805d, (q31_t)0xc1f54cca, - (q31_t)0x6ff27497, (q31_t)0xc1efcdf3, (q31_t)0x6fef688b, (q31_t)0xc1ea4f41, (q31_t)0x6fec5c3b, (q31_t)0xc1e4d0b6, (q31_t)0x6fe94fa5, (q31_t)0xc1df5251, - (q31_t)0x6fe642ca, (q31_t)0xc1d9d412, (q31_t)0x6fe335ab, (q31_t)0xc1d455f9, (q31_t)0x6fe02846, (q31_t)0xc1ced807, (q31_t)0x6fdd1a9c, (q31_t)0xc1c95a3c, - (q31_t)0x6fda0cae, (q31_t)0xc1c3dc97, (q31_t)0x6fd6fe7a, (q31_t)0xc1be5f18, (q31_t)0x6fd3f001, (q31_t)0xc1b8e1bf, (q31_t)0x6fd0e144, (q31_t)0xc1b3648d, - (q31_t)0x6fcdd241, (q31_t)0xc1ade781, (q31_t)0x6fcac2fa, (q31_t)0xc1a86a9c, (q31_t)0x6fc7b36d, (q31_t)0xc1a2edde, (q31_t)0x6fc4a39c, (q31_t)0xc19d7145, - (q31_t)0x6fc19385, (q31_t)0xc197f4d4, (q31_t)0x6fbe832a, (q31_t)0xc1927888, (q31_t)0x6fbb728a, (q31_t)0xc18cfc63, (q31_t)0x6fb861a4, (q31_t)0xc1878065, - (q31_t)0x6fb5507a, (q31_t)0xc182048d, (q31_t)0x6fb23f0b, (q31_t)0xc17c88dc, (q31_t)0x6faf2d57, (q31_t)0xc1770d52, (q31_t)0x6fac1b5f, (q31_t)0xc17191ee, - (q31_t)0x6fa90921, (q31_t)0xc16c16b0, (q31_t)0x6fa5f69e, (q31_t)0xc1669b99, (q31_t)0x6fa2e3d7, (q31_t)0xc16120a9, (q31_t)0x6f9fd0cb, (q31_t)0xc15ba5df, - (q31_t)0x6f9cbd79, (q31_t)0xc1562b3d, (q31_t)0x6f99a9e3, (q31_t)0xc150b0c0, (q31_t)0x6f969608, (q31_t)0xc14b366b, (q31_t)0x6f9381e9, (q31_t)0xc145bc3c, - (q31_t)0x6f906d84, (q31_t)0xc1404233, (q31_t)0x6f8d58db, (q31_t)0xc13ac852, (q31_t)0x6f8a43ed, (q31_t)0xc1354e97, (q31_t)0x6f872eba, (q31_t)0xc12fd503, - (q31_t)0x6f841942, (q31_t)0xc12a5b95, (q31_t)0x6f810386, (q31_t)0xc124e24f, (q31_t)0x6f7ded84, (q31_t)0xc11f692f, (q31_t)0x6f7ad73e, (q31_t)0xc119f036, - (q31_t)0x6f77c0b3, (q31_t)0xc1147764, (q31_t)0x6f74a9e4, (q31_t)0xc10efeb8, (q31_t)0x6f7192cf, (q31_t)0xc1098634, (q31_t)0x6f6e7b76, (q31_t)0xc1040dd6, - (q31_t)0x6f6b63d8, (q31_t)0xc0fe959f, (q31_t)0x6f684bf6, (q31_t)0xc0f91d8f, (q31_t)0x6f6533ce, (q31_t)0xc0f3a5a6, (q31_t)0x6f621b62, (q31_t)0xc0ee2de3, - (q31_t)0x6f5f02b2, (q31_t)0xc0e8b648, (q31_t)0x6f5be9bc, (q31_t)0xc0e33ed4, (q31_t)0x6f58d082, (q31_t)0xc0ddc786, (q31_t)0x6f55b703, (q31_t)0xc0d8505f, - (q31_t)0x6f529d40, (q31_t)0xc0d2d960, (q31_t)0x6f4f8338, (q31_t)0xc0cd6287, (q31_t)0x6f4c68eb, (q31_t)0xc0c7ebd6, (q31_t)0x6f494e5a, (q31_t)0xc0c2754b, - (q31_t)0x6f463383, (q31_t)0xc0bcfee7, (q31_t)0x6f431869, (q31_t)0xc0b788ab, (q31_t)0x6f3ffd09, (q31_t)0xc0b21295, (q31_t)0x6f3ce165, (q31_t)0xc0ac9ca6, - (q31_t)0x6f39c57d, (q31_t)0xc0a726df, (q31_t)0x6f36a94f, (q31_t)0xc0a1b13e, (q31_t)0x6f338cde, (q31_t)0xc09c3bc5, (q31_t)0x6f307027, (q31_t)0xc096c673, - (q31_t)0x6f2d532c, (q31_t)0xc0915148, (q31_t)0x6f2a35ed, (q31_t)0xc08bdc44, (q31_t)0x6f271868, (q31_t)0xc0866767, (q31_t)0x6f23faa0, (q31_t)0xc080f2b1, - (q31_t)0x6f20dc92, (q31_t)0xc07b7e23, (q31_t)0x6f1dbe41, (q31_t)0xc07609bb, (q31_t)0x6f1a9faa, (q31_t)0xc070957b, (q31_t)0x6f1780cf, (q31_t)0xc06b2162, - (q31_t)0x6f1461b0, (q31_t)0xc065ad70, (q31_t)0x6f11424c, (q31_t)0xc06039a6, (q31_t)0x6f0e22a3, (q31_t)0xc05ac603, (q31_t)0x6f0b02b6, (q31_t)0xc0555287, - (q31_t)0x6f07e285, (q31_t)0xc04fdf32, (q31_t)0x6f04c20f, (q31_t)0xc04a6c05, (q31_t)0x6f01a155, (q31_t)0xc044f8fe, (q31_t)0x6efe8056, (q31_t)0xc03f8620, - (q31_t)0x6efb5f12, (q31_t)0xc03a1368, (q31_t)0x6ef83d8a, (q31_t)0xc034a0d8, (q31_t)0x6ef51bbe, (q31_t)0xc02f2e6f, (q31_t)0x6ef1f9ad, (q31_t)0xc029bc2e, - (q31_t)0x6eeed758, (q31_t)0xc0244a14, (q31_t)0x6eebb4bf, (q31_t)0xc01ed821, (q31_t)0x6ee891e1, (q31_t)0xc0196656, (q31_t)0x6ee56ebe, (q31_t)0xc013f4b2, - (q31_t)0x6ee24b57, (q31_t)0xc00e8336, (q31_t)0x6edf27ac, (q31_t)0xc00911e1, (q31_t)0x6edc03bc, (q31_t)0xc003a0b3, (q31_t)0x6ed8df88, (q31_t)0xbffe2fad, - (q31_t)0x6ed5bb10, (q31_t)0xbff8bece, (q31_t)0x6ed29653, (q31_t)0xbff34e17, (q31_t)0x6ecf7152, (q31_t)0xbfeddd88, (q31_t)0x6ecc4c0d, (q31_t)0xbfe86d20, - (q31_t)0x6ec92683, (q31_t)0xbfe2fcdf, (q31_t)0x6ec600b5, (q31_t)0xbfdd8cc6, (q31_t)0x6ec2daa2, (q31_t)0xbfd81cd5, (q31_t)0x6ebfb44b, (q31_t)0xbfd2ad0b, - (q31_t)0x6ebc8db0, (q31_t)0xbfcd3d69, (q31_t)0x6eb966d1, (q31_t)0xbfc7cdee, (q31_t)0x6eb63fad, (q31_t)0xbfc25e9b, (q31_t)0x6eb31845, (q31_t)0xbfbcef70, - (q31_t)0x6eaff099, (q31_t)0xbfb7806c, (q31_t)0x6eacc8a8, (q31_t)0xbfb21190, (q31_t)0x6ea9a073, (q31_t)0xbfaca2dc, (q31_t)0x6ea677fa, (q31_t)0xbfa7344f, - (q31_t)0x6ea34f3d, (q31_t)0xbfa1c5ea, (q31_t)0x6ea0263b, (q31_t)0xbf9c57ac, (q31_t)0x6e9cfcf5, (q31_t)0xbf96e997, (q31_t)0x6e99d36b, (q31_t)0xbf917ba9, - (q31_t)0x6e96a99d, (q31_t)0xbf8c0de3, (q31_t)0x6e937f8a, (q31_t)0xbf86a044, (q31_t)0x6e905534, (q31_t)0xbf8132ce, (q31_t)0x6e8d2a99, (q31_t)0xbf7bc57f, - (q31_t)0x6e89ffb9, (q31_t)0xbf765858, (q31_t)0x6e86d496, (q31_t)0xbf70eb59, (q31_t)0x6e83a92f, (q31_t)0xbf6b7e81, (q31_t)0x6e807d83, (q31_t)0xbf6611d2, - (q31_t)0x6e7d5193, (q31_t)0xbf60a54a, (q31_t)0x6e7a255f, (q31_t)0xbf5b38ea, (q31_t)0x6e76f8e7, (q31_t)0xbf55ccb2, (q31_t)0x6e73cc2b, (q31_t)0xbf5060a2, - (q31_t)0x6e709f2a, (q31_t)0xbf4af4ba, (q31_t)0x6e6d71e6, (q31_t)0xbf4588fa, (q31_t)0x6e6a445d, (q31_t)0xbf401d61, (q31_t)0x6e671690, (q31_t)0xbf3ab1f1, - (q31_t)0x6e63e87f, (q31_t)0xbf3546a8, (q31_t)0x6e60ba2a, (q31_t)0xbf2fdb88, (q31_t)0x6e5d8b91, (q31_t)0xbf2a708f, (q31_t)0x6e5a5cb4, (q31_t)0xbf2505bf, - (q31_t)0x6e572d93, (q31_t)0xbf1f9b16, (q31_t)0x6e53fe2e, (q31_t)0xbf1a3096, (q31_t)0x6e50ce84, (q31_t)0xbf14c63d, (q31_t)0x6e4d9e97, (q31_t)0xbf0f5c0d, - (q31_t)0x6e4a6e66, (q31_t)0xbf09f205, (q31_t)0x6e473df0, (q31_t)0xbf048824, (q31_t)0x6e440d37, (q31_t)0xbeff1e6c, (q31_t)0x6e40dc39, (q31_t)0xbef9b4dc, - (q31_t)0x6e3daaf8, (q31_t)0xbef44b74, (q31_t)0x6e3a7972, (q31_t)0xbeeee234, (q31_t)0x6e3747a9, (q31_t)0xbee9791c, (q31_t)0x6e34159b, (q31_t)0xbee4102d, - (q31_t)0x6e30e34a, (q31_t)0xbedea765, (q31_t)0x6e2db0b4, (q31_t)0xbed93ec6, (q31_t)0x6e2a7ddb, (q31_t)0xbed3d64f, (q31_t)0x6e274abe, (q31_t)0xbece6e00, - (q31_t)0x6e24175c, (q31_t)0xbec905d9, (q31_t)0x6e20e3b7, (q31_t)0xbec39ddb, (q31_t)0x6e1dafce, (q31_t)0xbebe3605, (q31_t)0x6e1a7ba1, (q31_t)0xbeb8ce57, - (q31_t)0x6e174730, (q31_t)0xbeb366d1, (q31_t)0x6e14127b, (q31_t)0xbeadff74, (q31_t)0x6e10dd82, (q31_t)0xbea8983f, (q31_t)0x6e0da845, (q31_t)0xbea33132, - (q31_t)0x6e0a72c5, (q31_t)0xbe9dca4e, (q31_t)0x6e073d00, (q31_t)0xbe986391, (q31_t)0x6e0406f8, (q31_t)0xbe92fcfe, (q31_t)0x6e00d0ac, (q31_t)0xbe8d9692, - (q31_t)0x6dfd9a1c, (q31_t)0xbe88304f, (q31_t)0x6dfa6348, (q31_t)0xbe82ca35, (q31_t)0x6df72c30, (q31_t)0xbe7d6442, (q31_t)0x6df3f4d4, (q31_t)0xbe77fe78, - (q31_t)0x6df0bd35, (q31_t)0xbe7298d7, (q31_t)0x6ded8552, (q31_t)0xbe6d335e, (q31_t)0x6dea4d2b, (q31_t)0xbe67ce0d, (q31_t)0x6de714c0, (q31_t)0xbe6268e5, - (q31_t)0x6de3dc11, (q31_t)0xbe5d03e6, (q31_t)0x6de0a31f, (q31_t)0xbe579f0f, (q31_t)0x6ddd69e9, (q31_t)0xbe523a60, (q31_t)0x6dda306f, (q31_t)0xbe4cd5da, - (q31_t)0x6dd6f6b1, (q31_t)0xbe47717c, (q31_t)0x6dd3bcaf, (q31_t)0xbe420d47, (q31_t)0x6dd0826a, (q31_t)0xbe3ca93b, (q31_t)0x6dcd47e1, (q31_t)0xbe374557, - (q31_t)0x6dca0d14, (q31_t)0xbe31e19b, (q31_t)0x6dc6d204, (q31_t)0xbe2c7e09, (q31_t)0x6dc396b0, (q31_t)0xbe271a9f, (q31_t)0x6dc05b18, (q31_t)0xbe21b75d, - (q31_t)0x6dbd1f3c, (q31_t)0xbe1c5444, (q31_t)0x6db9e31d, (q31_t)0xbe16f154, (q31_t)0x6db6a6ba, (q31_t)0xbe118e8c, (q31_t)0x6db36a14, (q31_t)0xbe0c2bed, - (q31_t)0x6db02d29, (q31_t)0xbe06c977, (q31_t)0x6daceffb, (q31_t)0xbe01672a, (q31_t)0x6da9b28a, (q31_t)0xbdfc0505, (q31_t)0x6da674d5, (q31_t)0xbdf6a309, - (q31_t)0x6da336dc, (q31_t)0xbdf14135, (q31_t)0x6d9ff89f, (q31_t)0xbdebdf8b, (q31_t)0x6d9cba1f, (q31_t)0xbde67e09, (q31_t)0x6d997b5b, (q31_t)0xbde11cb0, - (q31_t)0x6d963c54, (q31_t)0xbddbbb7f, (q31_t)0x6d92fd09, (q31_t)0xbdd65a78, (q31_t)0x6d8fbd7a, (q31_t)0xbdd0f999, (q31_t)0x6d8c7da8, (q31_t)0xbdcb98e3, - (q31_t)0x6d893d93, (q31_t)0xbdc63856, (q31_t)0x6d85fd39, (q31_t)0xbdc0d7f2, (q31_t)0x6d82bc9d, (q31_t)0xbdbb77b7, (q31_t)0x6d7f7bbc, (q31_t)0xbdb617a4, - (q31_t)0x6d7c3a98, (q31_t)0xbdb0b7bb, (q31_t)0x6d78f931, (q31_t)0xbdab57fa, (q31_t)0x6d75b786, (q31_t)0xbda5f862, (q31_t)0x6d727597, (q31_t)0xbda098f3, - (q31_t)0x6d6f3365, (q31_t)0xbd9b39ad, (q31_t)0x6d6bf0f0, (q31_t)0xbd95da91, (q31_t)0x6d68ae37, (q31_t)0xbd907b9d, (q31_t)0x6d656b3a, (q31_t)0xbd8b1cd2, - (q31_t)0x6d6227fa, (q31_t)0xbd85be30, (q31_t)0x6d5ee477, (q31_t)0xbd805fb7, (q31_t)0x6d5ba0b0, (q31_t)0xbd7b0167, (q31_t)0x6d585ca6, (q31_t)0xbd75a340, - (q31_t)0x6d551858, (q31_t)0xbd704542, (q31_t)0x6d51d3c6, (q31_t)0xbd6ae76d, (q31_t)0x6d4e8ef2, (q31_t)0xbd6589c1, (q31_t)0x6d4b49da, (q31_t)0xbd602c3f, - (q31_t)0x6d48047e, (q31_t)0xbd5acee5, (q31_t)0x6d44bedf, (q31_t)0xbd5571b5, (q31_t)0x6d4178fd, (q31_t)0xbd5014ad, (q31_t)0x6d3e32d7, (q31_t)0xbd4ab7cf, - (q31_t)0x6d3aec6e, (q31_t)0xbd455b1a, (q31_t)0x6d37a5c1, (q31_t)0xbd3ffe8e, (q31_t)0x6d345ed1, (q31_t)0xbd3aa22c, (q31_t)0x6d31179e, (q31_t)0xbd3545f2, - (q31_t)0x6d2dd027, (q31_t)0xbd2fe9e2, (q31_t)0x6d2a886e, (q31_t)0xbd2a8dfb, (q31_t)0x6d274070, (q31_t)0xbd25323d, (q31_t)0x6d23f830, (q31_t)0xbd1fd6a8, - (q31_t)0x6d20afac, (q31_t)0xbd1a7b3d, (q31_t)0x6d1d66e4, (q31_t)0xbd151ffb, (q31_t)0x6d1a1dda, (q31_t)0xbd0fc4e2, (q31_t)0x6d16d48c, (q31_t)0xbd0a69f2, - (q31_t)0x6d138afb, (q31_t)0xbd050f2c, (q31_t)0x6d104126, (q31_t)0xbcffb48f, (q31_t)0x6d0cf70f, (q31_t)0xbcfa5a1b, (q31_t)0x6d09acb4, (q31_t)0xbcf4ffd1, - (q31_t)0x6d066215, (q31_t)0xbcefa5b0, (q31_t)0x6d031734, (q31_t)0xbcea4bb9, (q31_t)0x6cffcc0f, (q31_t)0xbce4f1eb, (q31_t)0x6cfc80a7, (q31_t)0xbcdf9846, - (q31_t)0x6cf934fc, (q31_t)0xbcda3ecb, (q31_t)0x6cf5e90d, (q31_t)0xbcd4e579, (q31_t)0x6cf29cdc, (q31_t)0xbccf8c50, (q31_t)0x6cef5067, (q31_t)0xbcca3351, - (q31_t)0x6cec03af, (q31_t)0xbcc4da7b, (q31_t)0x6ce8b6b4, (q31_t)0xbcbf81cf, (q31_t)0x6ce56975, (q31_t)0xbcba294d, (q31_t)0x6ce21bf4, (q31_t)0xbcb4d0f4, - (q31_t)0x6cdece2f, (q31_t)0xbcaf78c4, (q31_t)0x6cdb8027, (q31_t)0xbcaa20be, (q31_t)0x6cd831dc, (q31_t)0xbca4c8e1, (q31_t)0x6cd4e34e, (q31_t)0xbc9f712e, - (q31_t)0x6cd1947c, (q31_t)0xbc9a19a5, (q31_t)0x6cce4568, (q31_t)0xbc94c245, (q31_t)0x6ccaf610, (q31_t)0xbc8f6b0f, (q31_t)0x6cc7a676, (q31_t)0xbc8a1402, - (q31_t)0x6cc45698, (q31_t)0xbc84bd1f, (q31_t)0x6cc10677, (q31_t)0xbc7f6665, (q31_t)0x6cbdb613, (q31_t)0xbc7a0fd6, (q31_t)0x6cba656c, (q31_t)0xbc74b96f, - (q31_t)0x6cb71482, (q31_t)0xbc6f6333, (q31_t)0x6cb3c355, (q31_t)0xbc6a0d20, (q31_t)0x6cb071e4, (q31_t)0xbc64b737, (q31_t)0x6cad2031, (q31_t)0xbc5f6177, - (q31_t)0x6ca9ce3b, (q31_t)0xbc5a0be2, (q31_t)0x6ca67c01, (q31_t)0xbc54b676, (q31_t)0x6ca32985, (q31_t)0xbc4f6134, (q31_t)0x6c9fd6c6, (q31_t)0xbc4a0c1b, - (q31_t)0x6c9c83c3, (q31_t)0xbc44b72c, (q31_t)0x6c99307e, (q31_t)0xbc3f6267, (q31_t)0x6c95dcf6, (q31_t)0xbc3a0dcc, (q31_t)0x6c92892a, (q31_t)0xbc34b95b, - (q31_t)0x6c8f351c, (q31_t)0xbc2f6513, (q31_t)0x6c8be0cb, (q31_t)0xbc2a10f6, (q31_t)0x6c888c36, (q31_t)0xbc24bd02, (q31_t)0x6c85375f, (q31_t)0xbc1f6938, - (q31_t)0x6c81e245, (q31_t)0xbc1a1598, (q31_t)0x6c7e8ce8, (q31_t)0xbc14c221, (q31_t)0x6c7b3748, (q31_t)0xbc0f6ed5, (q31_t)0x6c77e165, (q31_t)0xbc0a1bb3, - (q31_t)0x6c748b3f, (q31_t)0xbc04c8ba, (q31_t)0x6c7134d7, (q31_t)0xbbff75ec, (q31_t)0x6c6dde2b, (q31_t)0xbbfa2347, (q31_t)0x6c6a873d, (q31_t)0xbbf4d0cc, - (q31_t)0x6c67300b, (q31_t)0xbbef7e7c, (q31_t)0x6c63d897, (q31_t)0xbbea2c55, (q31_t)0x6c6080e0, (q31_t)0xbbe4da58, (q31_t)0x6c5d28e6, (q31_t)0xbbdf8885, - (q31_t)0x6c59d0a9, (q31_t)0xbbda36dd, (q31_t)0x6c56782a, (q31_t)0xbbd4e55e, (q31_t)0x6c531f67, (q31_t)0xbbcf940a, (q31_t)0x6c4fc662, (q31_t)0xbbca42df, - (q31_t)0x6c4c6d1a, (q31_t)0xbbc4f1df, (q31_t)0x6c49138f, (q31_t)0xbbbfa108, (q31_t)0x6c45b9c1, (q31_t)0xbbba505c, (q31_t)0x6c425fb1, (q31_t)0xbbb4ffda, - (q31_t)0x6c3f055d, (q31_t)0xbbafaf82, (q31_t)0x6c3baac7, (q31_t)0xbbaa5f54, (q31_t)0x6c384fef, (q31_t)0xbba50f50, (q31_t)0x6c34f4d3, (q31_t)0xbb9fbf77, - (q31_t)0x6c319975, (q31_t)0xbb9a6fc7, (q31_t)0x6c2e3dd4, (q31_t)0xbb952042, (q31_t)0x6c2ae1f0, (q31_t)0xbb8fd0e7, (q31_t)0x6c2785ca, (q31_t)0xbb8a81b6, - (q31_t)0x6c242960, (q31_t)0xbb8532b0, (q31_t)0x6c20ccb4, (q31_t)0xbb7fe3d3, (q31_t)0x6c1d6fc6, (q31_t)0xbb7a9521, (q31_t)0x6c1a1295, (q31_t)0xbb754699, - (q31_t)0x6c16b521, (q31_t)0xbb6ff83c, (q31_t)0x6c13576a, (q31_t)0xbb6aaa09, (q31_t)0x6c0ff971, (q31_t)0xbb655c00, (q31_t)0x6c0c9b35, (q31_t)0xbb600e21, - (q31_t)0x6c093cb6, (q31_t)0xbb5ac06d, (q31_t)0x6c05ddf5, (q31_t)0xbb5572e3, (q31_t)0x6c027ef1, (q31_t)0xbb502583, (q31_t)0x6bff1faa, (q31_t)0xbb4ad84e, - (q31_t)0x6bfbc021, (q31_t)0xbb458b43, (q31_t)0x6bf86055, (q31_t)0xbb403e63, (q31_t)0x6bf50047, (q31_t)0xbb3af1ad, (q31_t)0x6bf19ff6, (q31_t)0xbb35a521, - (q31_t)0x6bee3f62, (q31_t)0xbb3058c0, (q31_t)0x6beade8c, (q31_t)0xbb2b0c8a, (q31_t)0x6be77d74, (q31_t)0xbb25c07d, (q31_t)0x6be41c18, (q31_t)0xbb20749c, - (q31_t)0x6be0ba7b, (q31_t)0xbb1b28e4, (q31_t)0x6bdd589a, (q31_t)0xbb15dd57, (q31_t)0x6bd9f677, (q31_t)0xbb1091f5, (q31_t)0x6bd69412, (q31_t)0xbb0b46bd, - (q31_t)0x6bd3316a, (q31_t)0xbb05fbb0, (q31_t)0x6bcfce80, (q31_t)0xbb00b0ce, (q31_t)0x6bcc6b53, (q31_t)0xbafb6615, (q31_t)0x6bc907e3, (q31_t)0xbaf61b88, - (q31_t)0x6bc5a431, (q31_t)0xbaf0d125, (q31_t)0x6bc2403d, (q31_t)0xbaeb86ed, (q31_t)0x6bbedc06, (q31_t)0xbae63cdf, (q31_t)0x6bbb778d, (q31_t)0xbae0f2fc, - (q31_t)0x6bb812d1, (q31_t)0xbadba943, (q31_t)0x6bb4add3, (q31_t)0xbad65fb5, (q31_t)0x6bb14892, (q31_t)0xbad11652, (q31_t)0x6bade30f, (q31_t)0xbacbcd1a, - (q31_t)0x6baa7d49, (q31_t)0xbac6840c, (q31_t)0x6ba71741, (q31_t)0xbac13b29, (q31_t)0x6ba3b0f7, (q31_t)0xbabbf270, (q31_t)0x6ba04a6a, (q31_t)0xbab6a9e3, - (q31_t)0x6b9ce39b, (q31_t)0xbab16180, (q31_t)0x6b997c8a, (q31_t)0xbaac1948, (q31_t)0x6b961536, (q31_t)0xbaa6d13a, (q31_t)0x6b92ada0, (q31_t)0xbaa18958, - (q31_t)0x6b8f45c7, (q31_t)0xba9c41a0, (q31_t)0x6b8bddac, (q31_t)0xba96fa13, (q31_t)0x6b88754f, (q31_t)0xba91b2b1, (q31_t)0x6b850caf, (q31_t)0xba8c6b79, - (q31_t)0x6b81a3cd, (q31_t)0xba87246d, (q31_t)0x6b7e3aa9, (q31_t)0xba81dd8b, (q31_t)0x6b7ad142, (q31_t)0xba7c96d4, (q31_t)0x6b776799, (q31_t)0xba775048, - (q31_t)0x6b73fdae, (q31_t)0xba7209e7, (q31_t)0x6b709381, (q31_t)0xba6cc3b1, (q31_t)0x6b6d2911, (q31_t)0xba677da6, (q31_t)0x6b69be5f, (q31_t)0xba6237c5, - (q31_t)0x6b66536b, (q31_t)0xba5cf210, (q31_t)0x6b62e834, (q31_t)0xba57ac86, (q31_t)0x6b5f7cbc, (q31_t)0xba526726, (q31_t)0x6b5c1101, (q31_t)0xba4d21f2, - (q31_t)0x6b58a503, (q31_t)0xba47dce8, (q31_t)0x6b5538c4, (q31_t)0xba42980a, (q31_t)0x6b51cc42, (q31_t)0xba3d5356, (q31_t)0x6b4e5f7f, (q31_t)0xba380ece, - (q31_t)0x6b4af279, (q31_t)0xba32ca71, (q31_t)0x6b478530, (q31_t)0xba2d863e, (q31_t)0x6b4417a6, (q31_t)0xba284237, (q31_t)0x6b40a9d9, (q31_t)0xba22fe5b, - (q31_t)0x6b3d3bcb, (q31_t)0xba1dbaaa, (q31_t)0x6b39cd7a, (q31_t)0xba187724, (q31_t)0x6b365ee7, (q31_t)0xba1333c9, (q31_t)0x6b32f012, (q31_t)0xba0df099, - (q31_t)0x6b2f80fb, (q31_t)0xba08ad95, (q31_t)0x6b2c11a1, (q31_t)0xba036abb, (q31_t)0x6b28a206, (q31_t)0xb9fe280d, (q31_t)0x6b253228, (q31_t)0xb9f8e58a, - (q31_t)0x6b21c208, (q31_t)0xb9f3a332, (q31_t)0x6b1e51a7, (q31_t)0xb9ee6106, (q31_t)0x6b1ae103, (q31_t)0xb9e91f04, (q31_t)0x6b17701d, (q31_t)0xb9e3dd2e, - (q31_t)0x6b13fef5, (q31_t)0xb9de9b83, (q31_t)0x6b108d8b, (q31_t)0xb9d95a03, (q31_t)0x6b0d1bdf, (q31_t)0xb9d418af, (q31_t)0x6b09a9f1, (q31_t)0xb9ced786, - (q31_t)0x6b0637c1, (q31_t)0xb9c99688, (q31_t)0x6b02c54f, (q31_t)0xb9c455b6, (q31_t)0x6aff529a, (q31_t)0xb9bf150e, (q31_t)0x6afbdfa4, (q31_t)0xb9b9d493, - (q31_t)0x6af86c6c, (q31_t)0xb9b49442, (q31_t)0x6af4f8f2, (q31_t)0xb9af541d, (q31_t)0x6af18536, (q31_t)0xb9aa1423, (q31_t)0x6aee1138, (q31_t)0xb9a4d455, - (q31_t)0x6aea9cf8, (q31_t)0xb99f94b2, (q31_t)0x6ae72876, (q31_t)0xb99a553a, (q31_t)0x6ae3b3b2, (q31_t)0xb99515ee, (q31_t)0x6ae03eac, (q31_t)0xb98fd6cd, - (q31_t)0x6adcc964, (q31_t)0xb98a97d8, (q31_t)0x6ad953db, (q31_t)0xb985590e, (q31_t)0x6ad5de0f, (q31_t)0xb9801a70, (q31_t)0x6ad26802, (q31_t)0xb97adbfd, - (q31_t)0x6acef1b2, (q31_t)0xb9759db6, (q31_t)0x6acb7b21, (q31_t)0xb9705f9a, (q31_t)0x6ac8044e, (q31_t)0xb96b21aa, (q31_t)0x6ac48d39, (q31_t)0xb965e3e5, - (q31_t)0x6ac115e2, (q31_t)0xb960a64c, (q31_t)0x6abd9e49, (q31_t)0xb95b68de, (q31_t)0x6aba266e, (q31_t)0xb9562b9c, (q31_t)0x6ab6ae52, (q31_t)0xb950ee86, - (q31_t)0x6ab335f4, (q31_t)0xb94bb19b, (q31_t)0x6aafbd54, (q31_t)0xb94674dc, (q31_t)0x6aac4472, (q31_t)0xb9413848, (q31_t)0x6aa8cb4e, (q31_t)0xb93bfbe0, - (q31_t)0x6aa551e9, (q31_t)0xb936bfa4, (q31_t)0x6aa1d841, (q31_t)0xb9318393, (q31_t)0x6a9e5e58, (q31_t)0xb92c47ae, (q31_t)0x6a9ae42e, (q31_t)0xb9270bf5, - (q31_t)0x6a9769c1, (q31_t)0xb921d067, (q31_t)0x6a93ef13, (q31_t)0xb91c9505, (q31_t)0x6a907423, (q31_t)0xb91759cf, (q31_t)0x6a8cf8f1, (q31_t)0xb9121ec5, - (q31_t)0x6a897d7d, (q31_t)0xb90ce3e6, (q31_t)0x6a8601c8, (q31_t)0xb907a933, (q31_t)0x6a8285d1, (q31_t)0xb9026eac, (q31_t)0x6a7f0999, (q31_t)0xb8fd3451, - (q31_t)0x6a7b8d1e, (q31_t)0xb8f7fa21, (q31_t)0x6a781062, (q31_t)0xb8f2c01d, (q31_t)0x6a749365, (q31_t)0xb8ed8646, (q31_t)0x6a711625, (q31_t)0xb8e84c99, - (q31_t)0x6a6d98a4, (q31_t)0xb8e31319, (q31_t)0x6a6a1ae2, (q31_t)0xb8ddd9c5, (q31_t)0x6a669cdd, (q31_t)0xb8d8a09d, (q31_t)0x6a631e97, (q31_t)0xb8d367a0, - (q31_t)0x6a5fa010, (q31_t)0xb8ce2ecf, (q31_t)0x6a5c2147, (q31_t)0xb8c8f62b, (q31_t)0x6a58a23c, (q31_t)0xb8c3bdb2, (q31_t)0x6a5522ef, (q31_t)0xb8be8565, - (q31_t)0x6a51a361, (q31_t)0xb8b94d44, (q31_t)0x6a4e2392, (q31_t)0xb8b4154f, (q31_t)0x6a4aa381, (q31_t)0xb8aedd86, (q31_t)0x6a47232e, (q31_t)0xb8a9a5e9, - (q31_t)0x6a43a29a, (q31_t)0xb8a46e78, (q31_t)0x6a4021c4, (q31_t)0xb89f3733, (q31_t)0x6a3ca0ad, (q31_t)0xb89a001a, (q31_t)0x6a391f54, (q31_t)0xb894c92d, - (q31_t)0x6a359db9, (q31_t)0xb88f926d, (q31_t)0x6a321bdd, (q31_t)0xb88a5bd8, (q31_t)0x6a2e99c0, (q31_t)0xb885256f, (q31_t)0x6a2b1761, (q31_t)0xb87fef33, - (q31_t)0x6a2794c1, (q31_t)0xb87ab922, (q31_t)0x6a2411df, (q31_t)0xb875833e, (q31_t)0x6a208ebb, (q31_t)0xb8704d85, (q31_t)0x6a1d0b57, (q31_t)0xb86b17f9, - (q31_t)0x6a1987b0, (q31_t)0xb865e299, (q31_t)0x6a1603c8, (q31_t)0xb860ad66, (q31_t)0x6a127f9f, (q31_t)0xb85b785e, (q31_t)0x6a0efb35, (q31_t)0xb8564383, - (q31_t)0x6a0b7689, (q31_t)0xb8510ed4, (q31_t)0x6a07f19b, (q31_t)0xb84bda51, (q31_t)0x6a046c6c, (q31_t)0xb846a5fa, (q31_t)0x6a00e6fc, (q31_t)0xb84171cf, - (q31_t)0x69fd614a, (q31_t)0xb83c3dd1, (q31_t)0x69f9db57, (q31_t)0xb83709ff, (q31_t)0x69f65523, (q31_t)0xb831d659, (q31_t)0x69f2cead, (q31_t)0xb82ca2e0, - (q31_t)0x69ef47f6, (q31_t)0xb8276f93, (q31_t)0x69ebc0fe, (q31_t)0xb8223c72, (q31_t)0x69e839c4, (q31_t)0xb81d097e, (q31_t)0x69e4b249, (q31_t)0xb817d6b6, - (q31_t)0x69e12a8c, (q31_t)0xb812a41a, (q31_t)0x69dda28f, (q31_t)0xb80d71aa, (q31_t)0x69da1a50, (q31_t)0xb8083f67, (q31_t)0x69d691cf, (q31_t)0xb8030d51, - (q31_t)0x69d3090e, (q31_t)0xb7fddb67, (q31_t)0x69cf800b, (q31_t)0xb7f8a9a9, (q31_t)0x69cbf6c7, (q31_t)0xb7f37818, (q31_t)0x69c86d41, (q31_t)0xb7ee46b3, - (q31_t)0x69c4e37a, (q31_t)0xb7e9157a, (q31_t)0x69c15973, (q31_t)0xb7e3e46e, (q31_t)0x69bdcf29, (q31_t)0xb7deb38f, (q31_t)0x69ba449f, (q31_t)0xb7d982dc, - (q31_t)0x69b6b9d3, (q31_t)0xb7d45255, (q31_t)0x69b32ec7, (q31_t)0xb7cf21fb, (q31_t)0x69afa378, (q31_t)0xb7c9f1ce, (q31_t)0x69ac17e9, (q31_t)0xb7c4c1cd, - (q31_t)0x69a88c19, (q31_t)0xb7bf91f8, (q31_t)0x69a50007, (q31_t)0xb7ba6251, (q31_t)0x69a173b5, (q31_t)0xb7b532d6, (q31_t)0x699de721, (q31_t)0xb7b00387, - (q31_t)0x699a5a4c, (q31_t)0xb7aad465, (q31_t)0x6996cd35, (q31_t)0xb7a5a570, (q31_t)0x69933fde, (q31_t)0xb7a076a7, (q31_t)0x698fb246, (q31_t)0xb79b480b, - (q31_t)0x698c246c, (q31_t)0xb796199b, (q31_t)0x69889651, (q31_t)0xb790eb58, (q31_t)0x698507f6, (q31_t)0xb78bbd42, (q31_t)0x69817959, (q31_t)0xb7868f59, - (q31_t)0x697dea7b, (q31_t)0xb781619c, (q31_t)0x697a5b5c, (q31_t)0xb77c340c, (q31_t)0x6976cbfc, (q31_t)0xb77706a9, (q31_t)0x69733c5b, (q31_t)0xb771d972, - (q31_t)0x696fac78, (q31_t)0xb76cac69, (q31_t)0x696c1c55, (q31_t)0xb7677f8c, (q31_t)0x69688bf1, (q31_t)0xb76252db, (q31_t)0x6964fb4c, (q31_t)0xb75d2658, - (q31_t)0x69616a65, (q31_t)0xb757fa01, (q31_t)0x695dd93e, (q31_t)0xb752cdd8, (q31_t)0x695a47d6, (q31_t)0xb74da1db, (q31_t)0x6956b62d, (q31_t)0xb748760b, - (q31_t)0x69532442, (q31_t)0xb7434a67, (q31_t)0x694f9217, (q31_t)0xb73e1ef1, (q31_t)0x694bffab, (q31_t)0xb738f3a7, (q31_t)0x69486cfe, (q31_t)0xb733c88b, - (q31_t)0x6944da10, (q31_t)0xb72e9d9b, (q31_t)0x694146e1, (q31_t)0xb72972d8, (q31_t)0x693db371, (q31_t)0xb7244842, (q31_t)0x693a1fc0, (q31_t)0xb71f1dd9, - (q31_t)0x69368bce, (q31_t)0xb719f39e, (q31_t)0x6932f79b, (q31_t)0xb714c98e, (q31_t)0x692f6328, (q31_t)0xb70f9fac, (q31_t)0x692bce73, (q31_t)0xb70a75f7, - (q31_t)0x6928397e, (q31_t)0xb7054c6f, (q31_t)0x6924a448, (q31_t)0xb7002314, (q31_t)0x69210ed1, (q31_t)0xb6faf9e6, (q31_t)0x691d7919, (q31_t)0xb6f5d0e5, - (q31_t)0x6919e320, (q31_t)0xb6f0a812, (q31_t)0x69164ce7, (q31_t)0xb6eb7f6b, (q31_t)0x6912b66c, (q31_t)0xb6e656f1, (q31_t)0x690f1fb1, (q31_t)0xb6e12ea4, - (q31_t)0x690b88b5, (q31_t)0xb6dc0685, (q31_t)0x6907f178, (q31_t)0xb6d6de92, (q31_t)0x690459fb, (q31_t)0xb6d1b6cd, (q31_t)0x6900c23c, (q31_t)0xb6cc8f35, - (q31_t)0x68fd2a3d, (q31_t)0xb6c767ca, (q31_t)0x68f991fd, (q31_t)0xb6c2408c, (q31_t)0x68f5f97d, (q31_t)0xb6bd197c, (q31_t)0x68f260bb, (q31_t)0xb6b7f298, - (q31_t)0x68eec7b9, (q31_t)0xb6b2cbe2, (q31_t)0x68eb2e76, (q31_t)0xb6ada559, (q31_t)0x68e794f3, (q31_t)0xb6a87efd, (q31_t)0x68e3fb2e, (q31_t)0xb6a358ce, - (q31_t)0x68e06129, (q31_t)0xb69e32cd, (q31_t)0x68dcc6e4, (q31_t)0xb6990cf9, (q31_t)0x68d92c5d, (q31_t)0xb693e752, (q31_t)0x68d59196, (q31_t)0xb68ec1d9, - (q31_t)0x68d1f68f, (q31_t)0xb6899c8d, (q31_t)0x68ce5b46, (q31_t)0xb684776e, (q31_t)0x68cabfbd, (q31_t)0xb67f527c, (q31_t)0x68c723f3, (q31_t)0xb67a2db8, - (q31_t)0x68c387e9, (q31_t)0xb6750921, (q31_t)0x68bfeb9e, (q31_t)0xb66fe4b8, (q31_t)0x68bc4f13, (q31_t)0xb66ac07c, (q31_t)0x68b8b247, (q31_t)0xb6659c6d, - (q31_t)0x68b5153a, (q31_t)0xb660788c, (q31_t)0x68b177ed, (q31_t)0xb65b54d8, (q31_t)0x68adda5f, (q31_t)0xb6563151, (q31_t)0x68aa3c90, (q31_t)0xb6510df8, - (q31_t)0x68a69e81, (q31_t)0xb64beacd, (q31_t)0x68a30031, (q31_t)0xb646c7ce, (q31_t)0x689f61a1, (q31_t)0xb641a4fe, (q31_t)0x689bc2d1, (q31_t)0xb63c825b, - (q31_t)0x689823bf, (q31_t)0xb6375fe5, (q31_t)0x6894846e, (q31_t)0xb6323d9d, (q31_t)0x6890e4dc, (q31_t)0xb62d1b82, (q31_t)0x688d4509, (q31_t)0xb627f995, - (q31_t)0x6889a4f6, (q31_t)0xb622d7d6, (q31_t)0x688604a2, (q31_t)0xb61db644, (q31_t)0x6882640e, (q31_t)0xb61894df, (q31_t)0x687ec339, (q31_t)0xb61373a9, - (q31_t)0x687b2224, (q31_t)0xb60e529f, (q31_t)0x687780ce, (q31_t)0xb60931c4, (q31_t)0x6873df38, (q31_t)0xb6041116, (q31_t)0x68703d62, (q31_t)0xb5fef095, - (q31_t)0x686c9b4b, (q31_t)0xb5f9d043, (q31_t)0x6868f8f4, (q31_t)0xb5f4b01e, (q31_t)0x6865565c, (q31_t)0xb5ef9026, (q31_t)0x6861b384, (q31_t)0xb5ea705d, - (q31_t)0x685e106c, (q31_t)0xb5e550c1, (q31_t)0x685a6d13, (q31_t)0xb5e03153, (q31_t)0x6856c979, (q31_t)0xb5db1212, (q31_t)0x685325a0, (q31_t)0xb5d5f2ff, - (q31_t)0x684f8186, (q31_t)0xb5d0d41a, (q31_t)0x684bdd2c, (q31_t)0xb5cbb563, (q31_t)0x68483891, (q31_t)0xb5c696da, (q31_t)0x684493b6, (q31_t)0xb5c1787e, - (q31_t)0x6840ee9b, (q31_t)0xb5bc5a50, (q31_t)0x683d493f, (q31_t)0xb5b73c50, (q31_t)0x6839a3a4, (q31_t)0xb5b21e7e, (q31_t)0x6835fdc7, (q31_t)0xb5ad00d9, - (q31_t)0x683257ab, (q31_t)0xb5a7e362, (q31_t)0x682eb14e, (q31_t)0xb5a2c61a, (q31_t)0x682b0ab1, (q31_t)0xb59da8ff, (q31_t)0x682763d4, (q31_t)0xb5988c12, - (q31_t)0x6823bcb7, (q31_t)0xb5936f53, (q31_t)0x68201559, (q31_t)0xb58e52c2, (q31_t)0x681c6dbb, (q31_t)0xb589365e, (q31_t)0x6818c5dd, (q31_t)0xb5841a29, - (q31_t)0x68151dbe, (q31_t)0xb57efe22, (q31_t)0x68117560, (q31_t)0xb579e248, (q31_t)0x680dccc1, (q31_t)0xb574c69d, (q31_t)0x680a23e2, (q31_t)0xb56fab1f, - (q31_t)0x68067ac3, (q31_t)0xb56a8fd0, (q31_t)0x6802d164, (q31_t)0xb56574ae, (q31_t)0x67ff27c4, (q31_t)0xb56059bb, (q31_t)0x67fb7de5, (q31_t)0xb55b3ef5, - (q31_t)0x67f7d3c5, (q31_t)0xb556245e, (q31_t)0x67f42965, (q31_t)0xb55109f5, (q31_t)0x67f07ec5, (q31_t)0xb54befba, (q31_t)0x67ecd3e5, (q31_t)0xb546d5ac, - (q31_t)0x67e928c5, (q31_t)0xb541bbcd, (q31_t)0x67e57d64, (q31_t)0xb53ca21c, (q31_t)0x67e1d1c4, (q31_t)0xb5378899, (q31_t)0x67de25e3, (q31_t)0xb5326f45, - (q31_t)0x67da79c3, (q31_t)0xb52d561e, (q31_t)0x67d6cd62, (q31_t)0xb5283d26, (q31_t)0x67d320c1, (q31_t)0xb523245b, (q31_t)0x67cf73e1, (q31_t)0xb51e0bbf, - (q31_t)0x67cbc6c0, (q31_t)0xb518f351, (q31_t)0x67c8195f, (q31_t)0xb513db12, (q31_t)0x67c46bbe, (q31_t)0xb50ec300, (q31_t)0x67c0bddd, (q31_t)0xb509ab1d, - (q31_t)0x67bd0fbd, (q31_t)0xb5049368, (q31_t)0x67b9615c, (q31_t)0xb4ff7be1, (q31_t)0x67b5b2bb, (q31_t)0xb4fa6489, (q31_t)0x67b203da, (q31_t)0xb4f54d5f, - (q31_t)0x67ae54ba, (q31_t)0xb4f03663, (q31_t)0x67aaa559, (q31_t)0xb4eb1f95, (q31_t)0x67a6f5b8, (q31_t)0xb4e608f6, (q31_t)0x67a345d8, (q31_t)0xb4e0f285, - (q31_t)0x679f95b7, (q31_t)0xb4dbdc42, (q31_t)0x679be557, (q31_t)0xb4d6c62e, (q31_t)0x679834b6, (q31_t)0xb4d1b048, (q31_t)0x679483d6, (q31_t)0xb4cc9a90, - (q31_t)0x6790d2b6, (q31_t)0xb4c78507, (q31_t)0x678d2156, (q31_t)0xb4c26fad, (q31_t)0x67896fb6, (q31_t)0xb4bd5a80, (q31_t)0x6785bdd6, (q31_t)0xb4b84582, - (q31_t)0x67820bb7, (q31_t)0xb4b330b3, (q31_t)0x677e5957, (q31_t)0xb4ae1c12, (q31_t)0x677aa6b8, (q31_t)0xb4a9079f, (q31_t)0x6776f3d9, (q31_t)0xb4a3f35b, - (q31_t)0x677340ba, (q31_t)0xb49edf45, (q31_t)0x676f8d5b, (q31_t)0xb499cb5e, (q31_t)0x676bd9bd, (q31_t)0xb494b7a6, (q31_t)0x676825de, (q31_t)0xb48fa41c, - (q31_t)0x676471c0, (q31_t)0xb48a90c0, (q31_t)0x6760bd62, (q31_t)0xb4857d93, (q31_t)0x675d08c4, (q31_t)0xb4806a95, (q31_t)0x675953e7, (q31_t)0xb47b57c5, - (q31_t)0x67559eca, (q31_t)0xb4764523, (q31_t)0x6751e96d, (q31_t)0xb47132b1, (q31_t)0x674e33d0, (q31_t)0xb46c206d, (q31_t)0x674a7df4, (q31_t)0xb4670e57, - (q31_t)0x6746c7d8, (q31_t)0xb461fc70, (q31_t)0x6743117c, (q31_t)0xb45ceab8, (q31_t)0x673f5ae0, (q31_t)0xb457d92f, (q31_t)0x673ba405, (q31_t)0xb452c7d4, - (q31_t)0x6737ecea, (q31_t)0xb44db6a8, (q31_t)0x67343590, (q31_t)0xb448a5aa, (q31_t)0x67307df5, (q31_t)0xb44394db, (q31_t)0x672cc61c, (q31_t)0xb43e843b, - (q31_t)0x67290e02, (q31_t)0xb43973ca, (q31_t)0x672555a9, (q31_t)0xb4346387, (q31_t)0x67219d10, (q31_t)0xb42f5373, (q31_t)0x671de438, (q31_t)0xb42a438e, - (q31_t)0x671a2b20, (q31_t)0xb42533d8, (q31_t)0x671671c8, (q31_t)0xb4202451, (q31_t)0x6712b831, (q31_t)0xb41b14f8, (q31_t)0x670efe5a, (q31_t)0xb41605ce, - (q31_t)0x670b4444, (q31_t)0xb410f6d3, (q31_t)0x670789ee, (q31_t)0xb40be807, (q31_t)0x6703cf58, (q31_t)0xb406d969, (q31_t)0x67001483, (q31_t)0xb401cafb, - (q31_t)0x66fc596f, (q31_t)0xb3fcbcbb, (q31_t)0x66f89e1b, (q31_t)0xb3f7aeaa, (q31_t)0x66f4e287, (q31_t)0xb3f2a0c9, (q31_t)0x66f126b4, (q31_t)0xb3ed9316, - (q31_t)0x66ed6aa1, (q31_t)0xb3e88592, (q31_t)0x66e9ae4f, (q31_t)0xb3e3783d, (q31_t)0x66e5f1be, (q31_t)0xb3de6b17, (q31_t)0x66e234ed, (q31_t)0xb3d95e1f, - (q31_t)0x66de77dc, (q31_t)0xb3d45157, (q31_t)0x66daba8c, (q31_t)0xb3cf44be, (q31_t)0x66d6fcfd, (q31_t)0xb3ca3854, (q31_t)0x66d33f2e, (q31_t)0xb3c52c19, - (q31_t)0x66cf8120, (q31_t)0xb3c0200c, (q31_t)0x66cbc2d2, (q31_t)0xb3bb142f, (q31_t)0x66c80445, (q31_t)0xb3b60881, (q31_t)0x66c44579, (q31_t)0xb3b0fd02, - (q31_t)0x66c0866d, (q31_t)0xb3abf1b2, (q31_t)0x66bcc721, (q31_t)0xb3a6e691, (q31_t)0x66b90797, (q31_t)0xb3a1dba0, (q31_t)0x66b547cd, (q31_t)0xb39cd0dd, - (q31_t)0x66b187c3, (q31_t)0xb397c649, (q31_t)0x66adc77b, (q31_t)0xb392bbe5, (q31_t)0x66aa06f3, (q31_t)0xb38db1b0, (q31_t)0x66a6462b, (q31_t)0xb388a7aa, - (q31_t)0x66a28524, (q31_t)0xb3839dd3, (q31_t)0x669ec3de, (q31_t)0xb37e942b, (q31_t)0x669b0259, (q31_t)0xb3798ab2, (q31_t)0x66974095, (q31_t)0xb3748169, - (q31_t)0x66937e91, (q31_t)0xb36f784f, (q31_t)0x668fbc4e, (q31_t)0xb36a6f64, (q31_t)0x668bf9cb, (q31_t)0xb36566a8, (q31_t)0x66883709, (q31_t)0xb3605e1c, - (q31_t)0x66847408, (q31_t)0xb35b55bf, (q31_t)0x6680b0c8, (q31_t)0xb3564d91, (q31_t)0x667ced49, (q31_t)0xb3514592, (q31_t)0x6679298a, (q31_t)0xb34c3dc3, - (q31_t)0x6675658c, (q31_t)0xb3473623, (q31_t)0x6671a14f, (q31_t)0xb3422eb2, (q31_t)0x666ddcd3, (q31_t)0xb33d2771, (q31_t)0x666a1818, (q31_t)0xb338205f, - (q31_t)0x6666531d, (q31_t)0xb333197c, (q31_t)0x66628de4, (q31_t)0xb32e12c9, (q31_t)0x665ec86b, (q31_t)0xb3290c45, (q31_t)0x665b02b3, (q31_t)0xb32405f1, - (q31_t)0x66573cbb, (q31_t)0xb31effcc, (q31_t)0x66537685, (q31_t)0xb319f9d6, (q31_t)0x664fb010, (q31_t)0xb314f410, (q31_t)0x664be95b, (q31_t)0xb30fee79, - (q31_t)0x66482267, (q31_t)0xb30ae912, (q31_t)0x66445b35, (q31_t)0xb305e3da, (q31_t)0x664093c3, (q31_t)0xb300ded2, (q31_t)0x663ccc12, (q31_t)0xb2fbd9f9, - (q31_t)0x66390422, (q31_t)0xb2f6d550, (q31_t)0x66353bf3, (q31_t)0xb2f1d0d6, (q31_t)0x66317385, (q31_t)0xb2eccc8c, (q31_t)0x662daad8, (q31_t)0xb2e7c871, - (q31_t)0x6629e1ec, (q31_t)0xb2e2c486, (q31_t)0x662618c1, (q31_t)0xb2ddc0ca, (q31_t)0x66224f56, (q31_t)0xb2d8bd3e, (q31_t)0x661e85ad, (q31_t)0xb2d3b9e2, - (q31_t)0x661abbc5, (q31_t)0xb2ceb6b5, (q31_t)0x6616f19e, (q31_t)0xb2c9b3b8, (q31_t)0x66132738, (q31_t)0xb2c4b0ea, (q31_t)0x660f5c93, (q31_t)0xb2bfae4c, - (q31_t)0x660b91af, (q31_t)0xb2baabde, (q31_t)0x6607c68c, (q31_t)0xb2b5a99f, (q31_t)0x6603fb2a, (q31_t)0xb2b0a790, (q31_t)0x66002f89, (q31_t)0xb2aba5b1, - (q31_t)0x65fc63a9, (q31_t)0xb2a6a402, (q31_t)0x65f8978b, (q31_t)0xb2a1a282, (q31_t)0x65f4cb2d, (q31_t)0xb29ca132, (q31_t)0x65f0fe91, (q31_t)0xb297a011, - (q31_t)0x65ed31b5, (q31_t)0xb2929f21, (q31_t)0x65e9649b, (q31_t)0xb28d9e60, (q31_t)0x65e59742, (q31_t)0xb2889dcf, (q31_t)0x65e1c9aa, (q31_t)0xb2839d6d, - (q31_t)0x65ddfbd3, (q31_t)0xb27e9d3c, (q31_t)0x65da2dbd, (q31_t)0xb2799d3a, (q31_t)0x65d65f69, (q31_t)0xb2749d68, (q31_t)0x65d290d6, (q31_t)0xb26f9dc6, - (q31_t)0x65cec204, (q31_t)0xb26a9e54, (q31_t)0x65caf2f3, (q31_t)0xb2659f12, (q31_t)0x65c723a3, (q31_t)0xb2609fff, (q31_t)0x65c35415, (q31_t)0xb25ba11d, - (q31_t)0x65bf8447, (q31_t)0xb256a26a, (q31_t)0x65bbb43b, (q31_t)0xb251a3e7, (q31_t)0x65b7e3f1, (q31_t)0xb24ca594, (q31_t)0x65b41367, (q31_t)0xb247a771, - (q31_t)0x65b0429f, (q31_t)0xb242a97e, (q31_t)0x65ac7198, (q31_t)0xb23dabbb, (q31_t)0x65a8a052, (q31_t)0xb238ae28, (q31_t)0x65a4cece, (q31_t)0xb233b0c5, - (q31_t)0x65a0fd0b, (q31_t)0xb22eb392, (q31_t)0x659d2b09, (q31_t)0xb229b68f, (q31_t)0x659958c9, (q31_t)0xb224b9bc, (q31_t)0x6595864a, (q31_t)0xb21fbd19, - (q31_t)0x6591b38c, (q31_t)0xb21ac0a6, (q31_t)0x658de08f, (q31_t)0xb215c463, (q31_t)0x658a0d54, (q31_t)0xb210c850, (q31_t)0x658639db, (q31_t)0xb20bcc6d, - (q31_t)0x65826622, (q31_t)0xb206d0ba, (q31_t)0x657e922b, (q31_t)0xb201d537, (q31_t)0x657abdf6, (q31_t)0xb1fcd9e5, (q31_t)0x6576e982, (q31_t)0xb1f7dec2, - (q31_t)0x657314cf, (q31_t)0xb1f2e3d0, (q31_t)0x656f3fde, (q31_t)0xb1ede90e, (q31_t)0x656b6aae, (q31_t)0xb1e8ee7c, (q31_t)0x6567953f, (q31_t)0xb1e3f41a, - (q31_t)0x6563bf92, (q31_t)0xb1def9e9, (q31_t)0x655fe9a7, (q31_t)0xb1d9ffe7, (q31_t)0x655c137d, (q31_t)0xb1d50616, (q31_t)0x65583d14, (q31_t)0xb1d00c75, - (q31_t)0x6554666d, (q31_t)0xb1cb1304, (q31_t)0x65508f87, (q31_t)0xb1c619c3, (q31_t)0x654cb863, (q31_t)0xb1c120b3, (q31_t)0x6548e101, (q31_t)0xb1bc27d3, - (q31_t)0x6545095f, (q31_t)0xb1b72f23, (q31_t)0x65413180, (q31_t)0xb1b236a4, (q31_t)0x653d5962, (q31_t)0xb1ad3e55, (q31_t)0x65398105, (q31_t)0xb1a84636, - (q31_t)0x6535a86b, (q31_t)0xb1a34e47, (q31_t)0x6531cf91, (q31_t)0xb19e5689, (q31_t)0x652df679, (q31_t)0xb1995efb, (q31_t)0x652a1d23, (q31_t)0xb194679e, - (q31_t)0x6526438f, (q31_t)0xb18f7071, (q31_t)0x652269bc, (q31_t)0xb18a7974, (q31_t)0x651e8faa, (q31_t)0xb18582a8, (q31_t)0x651ab55b, (q31_t)0xb1808c0c, - (q31_t)0x6516dacd, (q31_t)0xb17b95a0, (q31_t)0x65130000, (q31_t)0xb1769f65, (q31_t)0x650f24f5, (q31_t)0xb171a95b, (q31_t)0x650b49ac, (q31_t)0xb16cb380, - (q31_t)0x65076e25, (q31_t)0xb167bdd7, (q31_t)0x6503925f, (q31_t)0xb162c85d, (q31_t)0x64ffb65b, (q31_t)0xb15dd315, (q31_t)0x64fbda18, (q31_t)0xb158ddfd, - (q31_t)0x64f7fd98, (q31_t)0xb153e915, (q31_t)0x64f420d9, (q31_t)0xb14ef45e, (q31_t)0x64f043dc, (q31_t)0xb149ffd7, (q31_t)0x64ec66a0, (q31_t)0xb1450b81, - (q31_t)0x64e88926, (q31_t)0xb140175b, (q31_t)0x64e4ab6e, (q31_t)0xb13b2367, (q31_t)0x64e0cd78, (q31_t)0xb1362fa2, (q31_t)0x64dcef44, (q31_t)0xb1313c0e, - (q31_t)0x64d910d1, (q31_t)0xb12c48ab, (q31_t)0x64d53220, (q31_t)0xb1275579, (q31_t)0x64d15331, (q31_t)0xb1226277, (q31_t)0x64cd7404, (q31_t)0xb11d6fa6, - (q31_t)0x64c99498, (q31_t)0xb1187d05, (q31_t)0x64c5b4ef, (q31_t)0xb1138a95, (q31_t)0x64c1d507, (q31_t)0xb10e9856, (q31_t)0x64bdf4e1, (q31_t)0xb109a648, - (q31_t)0x64ba147d, (q31_t)0xb104b46a, (q31_t)0x64b633da, (q31_t)0xb0ffc2bd, (q31_t)0x64b252fa, (q31_t)0xb0fad140, (q31_t)0x64ae71dc, (q31_t)0xb0f5dff5, - (q31_t)0x64aa907f, (q31_t)0xb0f0eeda, (q31_t)0x64a6aee4, (q31_t)0xb0ebfdf0, (q31_t)0x64a2cd0c, (q31_t)0xb0e70d37, (q31_t)0x649eeaf5, (q31_t)0xb0e21cae, - (q31_t)0x649b08a0, (q31_t)0xb0dd2c56, (q31_t)0x6497260d, (q31_t)0xb0d83c2f, (q31_t)0x6493433c, (q31_t)0xb0d34c39, (q31_t)0x648f602d, (q31_t)0xb0ce5c74, - (q31_t)0x648b7ce0, (q31_t)0xb0c96ce0, (q31_t)0x64879955, (q31_t)0xb0c47d7c, (q31_t)0x6483b58c, (q31_t)0xb0bf8e4a, (q31_t)0x647fd185, (q31_t)0xb0ba9f48, - (q31_t)0x647bed3f, (q31_t)0xb0b5b077, (q31_t)0x647808bc, (q31_t)0xb0b0c1d7, (q31_t)0x647423fb, (q31_t)0xb0abd368, (q31_t)0x64703efc, (q31_t)0xb0a6e52a, - (q31_t)0x646c59bf, (q31_t)0xb0a1f71d, (q31_t)0x64687444, (q31_t)0xb09d0941, (q31_t)0x64648e8c, (q31_t)0xb0981b96, (q31_t)0x6460a895, (q31_t)0xb0932e1b, - (q31_t)0x645cc260, (q31_t)0xb08e40d2, (q31_t)0x6458dbed, (q31_t)0xb08953ba, (q31_t)0x6454f53d, (q31_t)0xb08466d3, (q31_t)0x64510e4e, (q31_t)0xb07f7a1c, - (q31_t)0x644d2722, (q31_t)0xb07a8d97, (q31_t)0x64493fb8, (q31_t)0xb075a143, (q31_t)0x64455810, (q31_t)0xb070b520, (q31_t)0x6441702a, (q31_t)0xb06bc92e, - (q31_t)0x643d8806, (q31_t)0xb066dd6d, (q31_t)0x64399fa5, (q31_t)0xb061f1de, (q31_t)0x6435b706, (q31_t)0xb05d067f, (q31_t)0x6431ce28, (q31_t)0xb0581b51, - (q31_t)0x642de50d, (q31_t)0xb0533055, (q31_t)0x6429fbb5, (q31_t)0xb04e458a, (q31_t)0x6426121e, (q31_t)0xb0495af0, (q31_t)0x6422284a, (q31_t)0xb0447087, - (q31_t)0x641e3e38, (q31_t)0xb03f864f, (q31_t)0x641a53e8, (q31_t)0xb03a9c49, (q31_t)0x6416695a, (q31_t)0xb035b273, (q31_t)0x64127e8f, (q31_t)0xb030c8cf, - (q31_t)0x640e9386, (q31_t)0xb02bdf5c, (q31_t)0x640aa83f, (q31_t)0xb026f61b, (q31_t)0x6406bcba, (q31_t)0xb0220d0a, (q31_t)0x6402d0f8, (q31_t)0xb01d242b, - (q31_t)0x63fee4f8, (q31_t)0xb0183b7d, (q31_t)0x63faf8bb, (q31_t)0xb0135301, (q31_t)0x63f70c3f, (q31_t)0xb00e6ab5, (q31_t)0x63f31f86, (q31_t)0xb009829c, - (q31_t)0x63ef3290, (q31_t)0xb0049ab3, (q31_t)0x63eb455c, (q31_t)0xafffb2fc, (q31_t)0x63e757ea, (q31_t)0xaffacb76, (q31_t)0x63e36a3a, (q31_t)0xaff5e421, - (q31_t)0x63df7c4d, (q31_t)0xaff0fcfe, (q31_t)0x63db8e22, (q31_t)0xafec160c, (q31_t)0x63d79fba, (q31_t)0xafe72f4c, (q31_t)0x63d3b114, (q31_t)0xafe248bd, - (q31_t)0x63cfc231, (q31_t)0xafdd625f, (q31_t)0x63cbd310, (q31_t)0xafd87c33, (q31_t)0x63c7e3b1, (q31_t)0xafd39638, (q31_t)0x63c3f415, (q31_t)0xafceb06f, - (q31_t)0x63c0043b, (q31_t)0xafc9cad7, (q31_t)0x63bc1424, (q31_t)0xafc4e571, (q31_t)0x63b823cf, (q31_t)0xafc0003c, (q31_t)0x63b4333d, (q31_t)0xafbb1b39, - (q31_t)0x63b0426d, (q31_t)0xafb63667, (q31_t)0x63ac5160, (q31_t)0xafb151c7, (q31_t)0x63a86015, (q31_t)0xafac6d58, (q31_t)0x63a46e8d, (q31_t)0xafa7891b, - (q31_t)0x63a07cc7, (q31_t)0xafa2a50f, (q31_t)0x639c8ac4, (q31_t)0xaf9dc135, (q31_t)0x63989884, (q31_t)0xaf98dd8d, (q31_t)0x6394a606, (q31_t)0xaf93fa16, - (q31_t)0x6390b34a, (q31_t)0xaf8f16d1, (q31_t)0x638cc051, (q31_t)0xaf8a33bd, (q31_t)0x6388cd1b, (q31_t)0xaf8550db, (q31_t)0x6384d9a7, (q31_t)0xaf806e2b, - (q31_t)0x6380e5f6, (q31_t)0xaf7b8bac, (q31_t)0x637cf208, (q31_t)0xaf76a95f, (q31_t)0x6378fddc, (q31_t)0xaf71c743, (q31_t)0x63750973, (q31_t)0xaf6ce55a, - (q31_t)0x637114cc, (q31_t)0xaf6803a2, (q31_t)0x636d1fe9, (q31_t)0xaf63221c, (q31_t)0x63692ac7, (q31_t)0xaf5e40c7, (q31_t)0x63653569, (q31_t)0xaf595fa4, - (q31_t)0x63613fcd, (q31_t)0xaf547eb3, (q31_t)0x635d49f4, (q31_t)0xaf4f9df4, (q31_t)0x635953dd, (q31_t)0xaf4abd66, (q31_t)0x63555d8a, (q31_t)0xaf45dd0b, - (q31_t)0x635166f9, (q31_t)0xaf40fce1, (q31_t)0x634d702b, (q31_t)0xaf3c1ce9, (q31_t)0x6349791f, (q31_t)0xaf373d22, (q31_t)0x634581d6, (q31_t)0xaf325d8e, - (q31_t)0x63418a50, (q31_t)0xaf2d7e2b, (q31_t)0x633d928d, (q31_t)0xaf289efa, (q31_t)0x63399a8d, (q31_t)0xaf23bffb, (q31_t)0x6335a24f, (q31_t)0xaf1ee12e, - (q31_t)0x6331a9d4, (q31_t)0xaf1a0293, (q31_t)0x632db11c, (q31_t)0xaf15242a, (q31_t)0x6329b827, (q31_t)0xaf1045f3, (q31_t)0x6325bef5, (q31_t)0xaf0b67ed, - (q31_t)0x6321c585, (q31_t)0xaf068a1a, (q31_t)0x631dcbd9, (q31_t)0xaf01ac78, (q31_t)0x6319d1ef, (q31_t)0xaefccf09, (q31_t)0x6315d7c8, (q31_t)0xaef7f1cb, - (q31_t)0x6311dd64, (q31_t)0xaef314c0, (q31_t)0x630de2c3, (q31_t)0xaeee37e6, (q31_t)0x6309e7e4, (q31_t)0xaee95b3f, (q31_t)0x6305ecc9, (q31_t)0xaee47ec9, - (q31_t)0x6301f171, (q31_t)0xaedfa285, (q31_t)0x62fdf5db, (q31_t)0xaedac674, (q31_t)0x62f9fa09, (q31_t)0xaed5ea95, (q31_t)0x62f5fdf9, (q31_t)0xaed10ee7, - (q31_t)0x62f201ac, (q31_t)0xaecc336c, (q31_t)0x62ee0523, (q31_t)0xaec75823, (q31_t)0x62ea085c, (q31_t)0xaec27d0c, (q31_t)0x62e60b58, (q31_t)0xaebda227, - (q31_t)0x62e20e17, (q31_t)0xaeb8c774, (q31_t)0x62de109a, (q31_t)0xaeb3ecf3, (q31_t)0x62da12df, (q31_t)0xaeaf12a4, (q31_t)0x62d614e7, (q31_t)0xaeaa3888, - (q31_t)0x62d216b3, (q31_t)0xaea55e9e, (q31_t)0x62ce1841, (q31_t)0xaea084e6, (q31_t)0x62ca1992, (q31_t)0xae9bab60, (q31_t)0x62c61aa7, (q31_t)0xae96d20c, - (q31_t)0x62c21b7e, (q31_t)0xae91f8eb, (q31_t)0x62be1c19, (q31_t)0xae8d1ffb, (q31_t)0x62ba1c77, (q31_t)0xae88473e, (q31_t)0x62b61c98, (q31_t)0xae836eb4, - (q31_t)0x62b21c7b, (q31_t)0xae7e965b, (q31_t)0x62ae1c23, (q31_t)0xae79be35, (q31_t)0x62aa1b8d, (q31_t)0xae74e641, (q31_t)0x62a61aba, (q31_t)0xae700e80, - (q31_t)0x62a219aa, (q31_t)0xae6b36f0, (q31_t)0x629e185e, (q31_t)0xae665f93, (q31_t)0x629a16d5, (q31_t)0xae618869, (q31_t)0x6296150f, (q31_t)0xae5cb171, - (q31_t)0x6292130c, (q31_t)0xae57daab, (q31_t)0x628e10cc, (q31_t)0xae530417, (q31_t)0x628a0e50, (q31_t)0xae4e2db6, (q31_t)0x62860b97, (q31_t)0xae495787, - (q31_t)0x628208a1, (q31_t)0xae44818b, (q31_t)0x627e056e, (q31_t)0xae3fabc1, (q31_t)0x627a01fe, (q31_t)0xae3ad629, (q31_t)0x6275fe52, (q31_t)0xae3600c4, - (q31_t)0x6271fa69, (q31_t)0xae312b92, (q31_t)0x626df643, (q31_t)0xae2c5691, (q31_t)0x6269f1e1, (q31_t)0xae2781c4, (q31_t)0x6265ed42, (q31_t)0xae22ad29, - (q31_t)0x6261e866, (q31_t)0xae1dd8c0, (q31_t)0x625de34e, (q31_t)0xae19048a, (q31_t)0x6259ddf8, (q31_t)0xae143086, (q31_t)0x6255d866, (q31_t)0xae0f5cb5, - (q31_t)0x6251d298, (q31_t)0xae0a8916, (q31_t)0x624dcc8d, (q31_t)0xae05b5aa, (q31_t)0x6249c645, (q31_t)0xae00e271, (q31_t)0x6245bfc0, (q31_t)0xadfc0f6a, - (q31_t)0x6241b8ff, (q31_t)0xadf73c96, (q31_t)0x623db202, (q31_t)0xadf269f4, (q31_t)0x6239aac7, (q31_t)0xaded9785, (q31_t)0x6235a351, (q31_t)0xade8c548, - (q31_t)0x62319b9d, (q31_t)0xade3f33e, (q31_t)0x622d93ad, (q31_t)0xaddf2167, (q31_t)0x62298b81, (q31_t)0xadda4fc3, (q31_t)0x62258317, (q31_t)0xadd57e51, - (q31_t)0x62217a72, (q31_t)0xadd0ad12, (q31_t)0x621d7190, (q31_t)0xadcbdc05, (q31_t)0x62196871, (q31_t)0xadc70b2c, (q31_t)0x62155f16, (q31_t)0xadc23a85, - (q31_t)0x6211557e, (q31_t)0xadbd6a10, (q31_t)0x620d4baa, (q31_t)0xadb899cf, (q31_t)0x62094199, (q31_t)0xadb3c9c0, (q31_t)0x6205374c, (q31_t)0xadaef9e4, - (q31_t)0x62012cc2, (q31_t)0xadaa2a3b, (q31_t)0x61fd21fc, (q31_t)0xada55ac4, (q31_t)0x61f916f9, (q31_t)0xada08b80, (q31_t)0x61f50bba, (q31_t)0xad9bbc70, - (q31_t)0x61f1003f, (q31_t)0xad96ed92, (q31_t)0x61ecf487, (q31_t)0xad921ee6, (q31_t)0x61e8e893, (q31_t)0xad8d506e, (q31_t)0x61e4dc62, (q31_t)0xad888229, - (q31_t)0x61e0cff5, (q31_t)0xad83b416, (q31_t)0x61dcc34c, (q31_t)0xad7ee636, (q31_t)0x61d8b666, (q31_t)0xad7a1889, (q31_t)0x61d4a944, (q31_t)0xad754b0f, - (q31_t)0x61d09be5, (q31_t)0xad707dc8, (q31_t)0x61cc8e4b, (q31_t)0xad6bb0b4, (q31_t)0x61c88074, (q31_t)0xad66e3d3, (q31_t)0x61c47260, (q31_t)0xad621725, - (q31_t)0x61c06410, (q31_t)0xad5d4aaa, (q31_t)0x61bc5584, (q31_t)0xad587e61, (q31_t)0x61b846bc, (q31_t)0xad53b24c, (q31_t)0x61b437b7, (q31_t)0xad4ee66a, - (q31_t)0x61b02876, (q31_t)0xad4a1aba, (q31_t)0x61ac18f9, (q31_t)0xad454f3e, (q31_t)0x61a80940, (q31_t)0xad4083f5, (q31_t)0x61a3f94a, (q31_t)0xad3bb8df, - (q31_t)0x619fe918, (q31_t)0xad36edfc, (q31_t)0x619bd8aa, (q31_t)0xad32234b, (q31_t)0x6197c800, (q31_t)0xad2d58ce, (q31_t)0x6193b719, (q31_t)0xad288e85, - (q31_t)0x618fa5f7, (q31_t)0xad23c46e, (q31_t)0x618b9498, (q31_t)0xad1efa8a, (q31_t)0x618782fd, (q31_t)0xad1a30d9, (q31_t)0x61837126, (q31_t)0xad15675c, - (q31_t)0x617f5f12, (q31_t)0xad109e12, (q31_t)0x617b4cc3, (q31_t)0xad0bd4fb, (q31_t)0x61773a37, (q31_t)0xad070c17, (q31_t)0x61732770, (q31_t)0xad024366, - (q31_t)0x616f146c, (q31_t)0xacfd7ae8, (q31_t)0x616b012c, (q31_t)0xacf8b29e, (q31_t)0x6166edb0, (q31_t)0xacf3ea87, (q31_t)0x6162d9f8, (q31_t)0xacef22a3, - (q31_t)0x615ec603, (q31_t)0xacea5af2, (q31_t)0x615ab1d3, (q31_t)0xace59375, (q31_t)0x61569d67, (q31_t)0xace0cc2b, (q31_t)0x615288be, (q31_t)0xacdc0514, - (q31_t)0x614e73da, (q31_t)0xacd73e30, (q31_t)0x614a5eba, (q31_t)0xacd27780, (q31_t)0x6146495d, (q31_t)0xaccdb103, (q31_t)0x614233c5, (q31_t)0xacc8eab9, - (q31_t)0x613e1df0, (q31_t)0xacc424a3, (q31_t)0x613a07e0, (q31_t)0xacbf5ec0, (q31_t)0x6135f193, (q31_t)0xacba9910, (q31_t)0x6131db0b, (q31_t)0xacb5d394, - (q31_t)0x612dc447, (q31_t)0xacb10e4b, (q31_t)0x6129ad46, (q31_t)0xacac4935, (q31_t)0x6125960a, (q31_t)0xaca78453, (q31_t)0x61217e92, (q31_t)0xaca2bfa4, - (q31_t)0x611d66de, (q31_t)0xac9dfb29, (q31_t)0x61194eee, (q31_t)0xac9936e1, (q31_t)0x611536c2, (q31_t)0xac9472cd, (q31_t)0x61111e5b, (q31_t)0xac8faeec, - (q31_t)0x610d05b7, (q31_t)0xac8aeb3e, (q31_t)0x6108ecd8, (q31_t)0xac8627c4, (q31_t)0x6104d3bc, (q31_t)0xac81647e, (q31_t)0x6100ba65, (q31_t)0xac7ca16b, - (q31_t)0x60fca0d2, (q31_t)0xac77de8b, (q31_t)0x60f88703, (q31_t)0xac731bdf, (q31_t)0x60f46cf9, (q31_t)0xac6e5967, (q31_t)0x60f052b2, (q31_t)0xac699722, - (q31_t)0x60ec3830, (q31_t)0xac64d510, (q31_t)0x60e81d72, (q31_t)0xac601333, (q31_t)0x60e40278, (q31_t)0xac5b5189, (q31_t)0x60dfe743, (q31_t)0xac569012, - (q31_t)0x60dbcbd1, (q31_t)0xac51cecf, (q31_t)0x60d7b024, (q31_t)0xac4d0dc0, (q31_t)0x60d3943b, (q31_t)0xac484ce4, (q31_t)0x60cf7817, (q31_t)0xac438c3c, - (q31_t)0x60cb5bb7, (q31_t)0xac3ecbc7, (q31_t)0x60c73f1b, (q31_t)0xac3a0b87, (q31_t)0x60c32243, (q31_t)0xac354b7a, (q31_t)0x60bf0530, (q31_t)0xac308ba0, - (q31_t)0x60bae7e1, (q31_t)0xac2bcbfa, (q31_t)0x60b6ca56, (q31_t)0xac270c88, (q31_t)0x60b2ac8f, (q31_t)0xac224d4a, (q31_t)0x60ae8e8d, (q31_t)0xac1d8e40, - (q31_t)0x60aa7050, (q31_t)0xac18cf69, (q31_t)0x60a651d7, (q31_t)0xac1410c6, (q31_t)0x60a23322, (q31_t)0xac0f5256, (q31_t)0x609e1431, (q31_t)0xac0a941b, - (q31_t)0x6099f505, (q31_t)0xac05d613, (q31_t)0x6095d59d, (q31_t)0xac01183f, (q31_t)0x6091b5fa, (q31_t)0xabfc5a9f, (q31_t)0x608d961b, (q31_t)0xabf79d33, - (q31_t)0x60897601, (q31_t)0xabf2dffb, (q31_t)0x608555ab, (q31_t)0xabee22f6, (q31_t)0x60813519, (q31_t)0xabe96625, (q31_t)0x607d144c, (q31_t)0xabe4a988, - (q31_t)0x6078f344, (q31_t)0xabdfed1f, (q31_t)0x6074d200, (q31_t)0xabdb30ea, (q31_t)0x6070b080, (q31_t)0xabd674e9, (q31_t)0x606c8ec5, (q31_t)0xabd1b91c, - (q31_t)0x60686ccf, (q31_t)0xabccfd83, (q31_t)0x60644a9d, (q31_t)0xabc8421d, (q31_t)0x6060282f, (q31_t)0xabc386ec, (q31_t)0x605c0587, (q31_t)0xabbecbee, - (q31_t)0x6057e2a2, (q31_t)0xabba1125, (q31_t)0x6053bf82, (q31_t)0xabb5568f, (q31_t)0x604f9c27, (q31_t)0xabb09c2e, (q31_t)0x604b7891, (q31_t)0xababe200, - (q31_t)0x604754bf, (q31_t)0xaba72807, (q31_t)0x604330b1, (q31_t)0xaba26e41, (q31_t)0x603f0c69, (q31_t)0xab9db4b0, (q31_t)0x603ae7e5, (q31_t)0xab98fb52, - (q31_t)0x6036c325, (q31_t)0xab944229, (q31_t)0x60329e2a, (q31_t)0xab8f8934, (q31_t)0x602e78f4, (q31_t)0xab8ad073, (q31_t)0x602a5383, (q31_t)0xab8617e6, - (q31_t)0x60262dd6, (q31_t)0xab815f8d, (q31_t)0x602207ee, (q31_t)0xab7ca768, (q31_t)0x601de1ca, (q31_t)0xab77ef77, (q31_t)0x6019bb6b, (q31_t)0xab7337bb, - (q31_t)0x601594d1, (q31_t)0xab6e8032, (q31_t)0x60116dfc, (q31_t)0xab69c8de, (q31_t)0x600d46ec, (q31_t)0xab6511be, (q31_t)0x60091fa0, (q31_t)0xab605ad2, - (q31_t)0x6004f819, (q31_t)0xab5ba41a, (q31_t)0x6000d057, (q31_t)0xab56ed97, (q31_t)0x5ffca859, (q31_t)0xab523748, (q31_t)0x5ff88021, (q31_t)0xab4d812d, - (q31_t)0x5ff457ad, (q31_t)0xab48cb46, (q31_t)0x5ff02efe, (q31_t)0xab441593, (q31_t)0x5fec0613, (q31_t)0xab3f6015, (q31_t)0x5fe7dcee, (q31_t)0xab3aaacb, - (q31_t)0x5fe3b38d, (q31_t)0xab35f5b5, (q31_t)0x5fdf89f2, (q31_t)0xab3140d4, (q31_t)0x5fdb601b, (q31_t)0xab2c8c27, (q31_t)0x5fd73609, (q31_t)0xab27d7ae, - (q31_t)0x5fd30bbc, (q31_t)0xab23236a, (q31_t)0x5fcee133, (q31_t)0xab1e6f5a, (q31_t)0x5fcab670, (q31_t)0xab19bb7e, (q31_t)0x5fc68b72, (q31_t)0xab1507d7, - (q31_t)0x5fc26038, (q31_t)0xab105464, (q31_t)0x5fbe34c4, (q31_t)0xab0ba125, (q31_t)0x5fba0914, (q31_t)0xab06ee1b, (q31_t)0x5fb5dd29, (q31_t)0xab023b46, - (q31_t)0x5fb1b104, (q31_t)0xaafd88a4, (q31_t)0x5fad84a3, (q31_t)0xaaf8d637, (q31_t)0x5fa95807, (q31_t)0xaaf423ff, (q31_t)0x5fa52b31, (q31_t)0xaaef71fb, - (q31_t)0x5fa0fe1f, (q31_t)0xaaeac02c, (q31_t)0x5f9cd0d2, (q31_t)0xaae60e91, (q31_t)0x5f98a34a, (q31_t)0xaae15d2a, (q31_t)0x5f947588, (q31_t)0xaadcabf8, - (q31_t)0x5f90478a, (q31_t)0xaad7fafb, (q31_t)0x5f8c1951, (q31_t)0xaad34a32, (q31_t)0x5f87eade, (q31_t)0xaace999d, (q31_t)0x5f83bc2f, (q31_t)0xaac9e93e, - (q31_t)0x5f7f8d46, (q31_t)0xaac53912, (q31_t)0x5f7b5e22, (q31_t)0xaac0891c, (q31_t)0x5f772ec2, (q31_t)0xaabbd959, (q31_t)0x5f72ff28, (q31_t)0xaab729cc, - (q31_t)0x5f6ecf53, (q31_t)0xaab27a73, (q31_t)0x5f6a9f44, (q31_t)0xaaadcb4f, (q31_t)0x5f666ef9, (q31_t)0xaaa91c5f, (q31_t)0x5f623e73, (q31_t)0xaaa46da4, - (q31_t)0x5f5e0db3, (q31_t)0xaa9fbf1e, (q31_t)0x5f59dcb8, (q31_t)0xaa9b10cc, (q31_t)0x5f55ab82, (q31_t)0xaa9662af, (q31_t)0x5f517a11, (q31_t)0xaa91b4c7, - (q31_t)0x5f4d4865, (q31_t)0xaa8d0713, (q31_t)0x5f49167f, (q31_t)0xaa885994, (q31_t)0x5f44e45e, (q31_t)0xaa83ac4a, (q31_t)0x5f40b202, (q31_t)0xaa7eff34, - (q31_t)0x5f3c7f6b, (q31_t)0xaa7a5253, (q31_t)0x5f384c9a, (q31_t)0xaa75a5a8, (q31_t)0x5f34198e, (q31_t)0xaa70f930, (q31_t)0x5f2fe647, (q31_t)0xaa6c4cee, - (q31_t)0x5f2bb2c5, (q31_t)0xaa67a0e0, (q31_t)0x5f277f09, (q31_t)0xaa62f507, (q31_t)0x5f234b12, (q31_t)0xaa5e4963, (q31_t)0x5f1f16e0, (q31_t)0xaa599df4, - (q31_t)0x5f1ae274, (q31_t)0xaa54f2ba, (q31_t)0x5f16adcc, (q31_t)0xaa5047b4, (q31_t)0x5f1278eb, (q31_t)0xaa4b9ce3, (q31_t)0x5f0e43ce, (q31_t)0xaa46f248, - (q31_t)0x5f0a0e77, (q31_t)0xaa4247e1, (q31_t)0x5f05d8e6, (q31_t)0xaa3d9daf, (q31_t)0x5f01a31a, (q31_t)0xaa38f3b1, (q31_t)0x5efd6d13, (q31_t)0xaa3449e9, - (q31_t)0x5ef936d1, (q31_t)0xaa2fa056, (q31_t)0x5ef50055, (q31_t)0xaa2af6f7, (q31_t)0x5ef0c99f, (q31_t)0xaa264dce, (q31_t)0x5eec92ae, (q31_t)0xaa21a4d9, - (q31_t)0x5ee85b82, (q31_t)0xaa1cfc1a, (q31_t)0x5ee4241c, (q31_t)0xaa18538f, (q31_t)0x5edfec7b, (q31_t)0xaa13ab3a, (q31_t)0x5edbb49f, (q31_t)0xaa0f0319, - (q31_t)0x5ed77c8a, (q31_t)0xaa0a5b2e, (q31_t)0x5ed34439, (q31_t)0xaa05b377, (q31_t)0x5ecf0baf, (q31_t)0xaa010bf6, (q31_t)0x5ecad2e9, (q31_t)0xa9fc64a9, - (q31_t)0x5ec699e9, (q31_t)0xa9f7bd92, (q31_t)0x5ec260af, (q31_t)0xa9f316b0, (q31_t)0x5ebe273b, (q31_t)0xa9ee7002, (q31_t)0x5eb9ed8b, (q31_t)0xa9e9c98a, - (q31_t)0x5eb5b3a2, (q31_t)0xa9e52347, (q31_t)0x5eb1797e, (q31_t)0xa9e07d39, (q31_t)0x5ead3f1f, (q31_t)0xa9dbd761, (q31_t)0x5ea90487, (q31_t)0xa9d731bd, - (q31_t)0x5ea4c9b3, (q31_t)0xa9d28c4e, (q31_t)0x5ea08ea6, (q31_t)0xa9cde715, (q31_t)0x5e9c535e, (q31_t)0xa9c94211, (q31_t)0x5e9817dc, (q31_t)0xa9c49d42, - (q31_t)0x5e93dc1f, (q31_t)0xa9bff8a8, (q31_t)0x5e8fa028, (q31_t)0xa9bb5444, (q31_t)0x5e8b63f7, (q31_t)0xa9b6b014, (q31_t)0x5e87278b, (q31_t)0xa9b20c1a, - (q31_t)0x5e82eae5, (q31_t)0xa9ad6855, (q31_t)0x5e7eae05, (q31_t)0xa9a8c4c5, (q31_t)0x5e7a70ea, (q31_t)0xa9a4216b, (q31_t)0x5e763395, (q31_t)0xa99f7e46, - (q31_t)0x5e71f606, (q31_t)0xa99adb56, (q31_t)0x5e6db83d, (q31_t)0xa996389b, (q31_t)0x5e697a39, (q31_t)0xa9919616, (q31_t)0x5e653bfc, (q31_t)0xa98cf3c6, - (q31_t)0x5e60fd84, (q31_t)0xa98851ac, (q31_t)0x5e5cbed1, (q31_t)0xa983afc6, (q31_t)0x5e587fe5, (q31_t)0xa97f0e16, (q31_t)0x5e5440be, (q31_t)0xa97a6c9c, - (q31_t)0x5e50015d, (q31_t)0xa975cb57, (q31_t)0x5e4bc1c2, (q31_t)0xa9712a47, (q31_t)0x5e4781ed, (q31_t)0xa96c896c, (q31_t)0x5e4341de, (q31_t)0xa967e8c7, - (q31_t)0x5e3f0194, (q31_t)0xa9634858, (q31_t)0x5e3ac110, (q31_t)0xa95ea81d, (q31_t)0x5e368053, (q31_t)0xa95a0819, (q31_t)0x5e323f5b, (q31_t)0xa9556849, - (q31_t)0x5e2dfe29, (q31_t)0xa950c8b0, (q31_t)0x5e29bcbd, (q31_t)0xa94c294b, (q31_t)0x5e257b17, (q31_t)0xa9478a1c, (q31_t)0x5e213936, (q31_t)0xa942eb23, - (q31_t)0x5e1cf71c, (q31_t)0xa93e4c5f, (q31_t)0x5e18b4c8, (q31_t)0xa939add1, (q31_t)0x5e147239, (q31_t)0xa9350f78, (q31_t)0x5e102f71, (q31_t)0xa9307155, - (q31_t)0x5e0bec6e, (q31_t)0xa92bd367, (q31_t)0x5e07a932, (q31_t)0xa92735af, (q31_t)0x5e0365bb, (q31_t)0xa922982c, (q31_t)0x5dff220b, (q31_t)0xa91dfadf, - (q31_t)0x5dfade20, (q31_t)0xa9195dc7, (q31_t)0x5df699fc, (q31_t)0xa914c0e6, (q31_t)0x5df2559e, (q31_t)0xa9102439, (q31_t)0x5dee1105, (q31_t)0xa90b87c3, - (q31_t)0x5de9cc33, (q31_t)0xa906eb82, (q31_t)0x5de58727, (q31_t)0xa9024f76, (q31_t)0x5de141e1, (q31_t)0xa8fdb3a1, (q31_t)0x5ddcfc61, (q31_t)0xa8f91801, - (q31_t)0x5dd8b6a7, (q31_t)0xa8f47c97, (q31_t)0x5dd470b3, (q31_t)0xa8efe162, (q31_t)0x5dd02a85, (q31_t)0xa8eb4663, (q31_t)0x5dcbe41d, (q31_t)0xa8e6ab9a, - (q31_t)0x5dc79d7c, (q31_t)0xa8e21106, (q31_t)0x5dc356a1, (q31_t)0xa8dd76a9, (q31_t)0x5dbf0f8c, (q31_t)0xa8d8dc81, (q31_t)0x5dbac83d, (q31_t)0xa8d4428f, - (q31_t)0x5db680b4, (q31_t)0xa8cfa8d2, (q31_t)0x5db238f1, (q31_t)0xa8cb0f4b, (q31_t)0x5dadf0f5, (q31_t)0xa8c675fb, (q31_t)0x5da9a8bf, (q31_t)0xa8c1dce0, - (q31_t)0x5da5604f, (q31_t)0xa8bd43fa, (q31_t)0x5da117a5, (q31_t)0xa8b8ab4b, (q31_t)0x5d9ccec2, (q31_t)0xa8b412d1, (q31_t)0x5d9885a5, (q31_t)0xa8af7a8e, - (q31_t)0x5d943c4e, (q31_t)0xa8aae280, (q31_t)0x5d8ff2bd, (q31_t)0xa8a64aa8, (q31_t)0x5d8ba8f3, (q31_t)0xa8a1b306, (q31_t)0x5d875eef, (q31_t)0xa89d1b99, - (q31_t)0x5d8314b1, (q31_t)0xa8988463, (q31_t)0x5d7eca39, (q31_t)0xa893ed63, (q31_t)0x5d7a7f88, (q31_t)0xa88f5698, (q31_t)0x5d76349d, (q31_t)0xa88ac004, - (q31_t)0x5d71e979, (q31_t)0xa88629a5, (q31_t)0x5d6d9e1b, (q31_t)0xa881937c, (q31_t)0x5d695283, (q31_t)0xa87cfd8a, (q31_t)0x5d6506b2, (q31_t)0xa87867cd, - (q31_t)0x5d60baa7, (q31_t)0xa873d246, (q31_t)0x5d5c6e62, (q31_t)0xa86f3cf6, (q31_t)0x5d5821e4, (q31_t)0xa86aa7db, (q31_t)0x5d53d52d, (q31_t)0xa86612f6, - (q31_t)0x5d4f883b, (q31_t)0xa8617e48, (q31_t)0x5d4b3b10, (q31_t)0xa85ce9cf, (q31_t)0x5d46edac, (q31_t)0xa858558d, (q31_t)0x5d42a00e, (q31_t)0xa853c180, - (q31_t)0x5d3e5237, (q31_t)0xa84f2daa, (q31_t)0x5d3a0426, (q31_t)0xa84a9a0a, (q31_t)0x5d35b5db, (q31_t)0xa84606a0, (q31_t)0x5d316757, (q31_t)0xa841736c, - (q31_t)0x5d2d189a, (q31_t)0xa83ce06e, (q31_t)0x5d28c9a3, (q31_t)0xa8384da6, (q31_t)0x5d247a72, (q31_t)0xa833bb14, (q31_t)0x5d202b09, (q31_t)0xa82f28b9, - (q31_t)0x5d1bdb65, (q31_t)0xa82a9693, (q31_t)0x5d178b89, (q31_t)0xa82604a4, (q31_t)0x5d133b72, (q31_t)0xa82172eb, (q31_t)0x5d0eeb23, (q31_t)0xa81ce169, - (q31_t)0x5d0a9a9a, (q31_t)0xa818501c, (q31_t)0x5d0649d7, (q31_t)0xa813bf06, (q31_t)0x5d01f8dc, (q31_t)0xa80f2e26, (q31_t)0x5cfda7a7, (q31_t)0xa80a9d7c, - (q31_t)0x5cf95638, (q31_t)0xa8060d08, (q31_t)0x5cf50490, (q31_t)0xa8017ccb, (q31_t)0x5cf0b2af, (q31_t)0xa7fcecc4, (q31_t)0x5cec6095, (q31_t)0xa7f85cf3, - (q31_t)0x5ce80e41, (q31_t)0xa7f3cd59, (q31_t)0x5ce3bbb4, (q31_t)0xa7ef3df5, (q31_t)0x5cdf68ed, (q31_t)0xa7eaaec7, (q31_t)0x5cdb15ed, (q31_t)0xa7e61fd0, - (q31_t)0x5cd6c2b5, (q31_t)0xa7e1910f, (q31_t)0x5cd26f42, (q31_t)0xa7dd0284, (q31_t)0x5cce1b97, (q31_t)0xa7d8742f, (q31_t)0x5cc9c7b2, (q31_t)0xa7d3e611, - (q31_t)0x5cc57394, (q31_t)0xa7cf582a, (q31_t)0x5cc11f3d, (q31_t)0xa7caca79, (q31_t)0x5cbccaac, (q31_t)0xa7c63cfe, (q31_t)0x5cb875e3, (q31_t)0xa7c1afb9, - (q31_t)0x5cb420e0, (q31_t)0xa7bd22ac, (q31_t)0x5cafcba4, (q31_t)0xa7b895d4, (q31_t)0x5cab762f, (q31_t)0xa7b40933, (q31_t)0x5ca72080, (q31_t)0xa7af7cc8, - (q31_t)0x5ca2ca99, (q31_t)0xa7aaf094, (q31_t)0x5c9e7478, (q31_t)0xa7a66497, (q31_t)0x5c9a1e1e, (q31_t)0xa7a1d8d0, (q31_t)0x5c95c78b, (q31_t)0xa79d4d3f, - (q31_t)0x5c9170bf, (q31_t)0xa798c1e5, (q31_t)0x5c8d19ba, (q31_t)0xa79436c1, (q31_t)0x5c88c27c, (q31_t)0xa78fabd4, (q31_t)0x5c846b05, (q31_t)0xa78b211e, - (q31_t)0x5c801354, (q31_t)0xa786969e, (q31_t)0x5c7bbb6b, (q31_t)0xa7820c55, (q31_t)0x5c776348, (q31_t)0xa77d8242, (q31_t)0x5c730aed, (q31_t)0xa778f866, - (q31_t)0x5c6eb258, (q31_t)0xa7746ec0, (q31_t)0x5c6a598b, (q31_t)0xa76fe551, (q31_t)0x5c660084, (q31_t)0xa76b5c19, (q31_t)0x5c61a745, (q31_t)0xa766d317, - (q31_t)0x5c5d4dcc, (q31_t)0xa7624a4d, (q31_t)0x5c58f41a, (q31_t)0xa75dc1b8, (q31_t)0x5c549a30, (q31_t)0xa759395b, (q31_t)0x5c50400d, (q31_t)0xa754b134, - (q31_t)0x5c4be5b0, (q31_t)0xa7502943, (q31_t)0x5c478b1b, (q31_t)0xa74ba18a, (q31_t)0x5c43304d, (q31_t)0xa7471a07, (q31_t)0x5c3ed545, (q31_t)0xa74292bb, - (q31_t)0x5c3a7a05, (q31_t)0xa73e0ba5, (q31_t)0x5c361e8c, (q31_t)0xa73984c7, (q31_t)0x5c31c2db, (q31_t)0xa734fe1f, (q31_t)0x5c2d66f0, (q31_t)0xa73077ae, - (q31_t)0x5c290acc, (q31_t)0xa72bf174, (q31_t)0x5c24ae70, (q31_t)0xa7276b70, (q31_t)0x5c2051db, (q31_t)0xa722e5a3, (q31_t)0x5c1bf50d, (q31_t)0xa71e600d, - (q31_t)0x5c179806, (q31_t)0xa719daae, (q31_t)0x5c133ac6, (q31_t)0xa7155586, (q31_t)0x5c0edd4e, (q31_t)0xa710d095, (q31_t)0x5c0a7f9c, (q31_t)0xa70c4bda, - (q31_t)0x5c0621b2, (q31_t)0xa707c757, (q31_t)0x5c01c38f, (q31_t)0xa703430a, (q31_t)0x5bfd6534, (q31_t)0xa6febef4, (q31_t)0x5bf906a0, (q31_t)0xa6fa3b15, - (q31_t)0x5bf4a7d2, (q31_t)0xa6f5b76d, (q31_t)0x5bf048cd, (q31_t)0xa6f133fc, (q31_t)0x5bebe98e, (q31_t)0xa6ecb0c2, (q31_t)0x5be78a17, (q31_t)0xa6e82dbe, - (q31_t)0x5be32a67, (q31_t)0xa6e3aaf2, (q31_t)0x5bdeca7f, (q31_t)0xa6df285d, (q31_t)0x5bda6a5d, (q31_t)0xa6daa5fe, (q31_t)0x5bd60a03, (q31_t)0xa6d623d7, - (q31_t)0x5bd1a971, (q31_t)0xa6d1a1e7, (q31_t)0x5bcd48a6, (q31_t)0xa6cd202d, (q31_t)0x5bc8e7a2, (q31_t)0xa6c89eab, (q31_t)0x5bc48666, (q31_t)0xa6c41d60, - (q31_t)0x5bc024f0, (q31_t)0xa6bf9c4b, (q31_t)0x5bbbc343, (q31_t)0xa6bb1b6e, (q31_t)0x5bb7615d, (q31_t)0xa6b69ac8, (q31_t)0x5bb2ff3e, (q31_t)0xa6b21a59, - (q31_t)0x5bae9ce7, (q31_t)0xa6ad9a21, (q31_t)0x5baa3a57, (q31_t)0xa6a91a20, (q31_t)0x5ba5d78e, (q31_t)0xa6a49a56, (q31_t)0x5ba1748d, (q31_t)0xa6a01ac4, - (q31_t)0x5b9d1154, (q31_t)0xa69b9b68, (q31_t)0x5b98ade2, (q31_t)0xa6971c44, (q31_t)0x5b944a37, (q31_t)0xa6929d57, (q31_t)0x5b8fe654, (q31_t)0xa68e1ea1, - (q31_t)0x5b8b8239, (q31_t)0xa689a022, (q31_t)0x5b871de5, (q31_t)0xa68521da, (q31_t)0x5b82b958, (q31_t)0xa680a3ca, (q31_t)0x5b7e5493, (q31_t)0xa67c25f0, - (q31_t)0x5b79ef96, (q31_t)0xa677a84e, (q31_t)0x5b758a60, (q31_t)0xa6732ae3, (q31_t)0x5b7124f2, (q31_t)0xa66eadb0, (q31_t)0x5b6cbf4c, (q31_t)0xa66a30b3, - (q31_t)0x5b68596d, (q31_t)0xa665b3ee, (q31_t)0x5b63f355, (q31_t)0xa6613760, (q31_t)0x5b5f8d06, (q31_t)0xa65cbb0a, (q31_t)0x5b5b267e, (q31_t)0xa6583eeb, - (q31_t)0x5b56bfbd, (q31_t)0xa653c303, (q31_t)0x5b5258c4, (q31_t)0xa64f4752, (q31_t)0x5b4df193, (q31_t)0xa64acbd9, (q31_t)0x5b498a2a, (q31_t)0xa6465097, - (q31_t)0x5b452288, (q31_t)0xa641d58c, (q31_t)0x5b40baae, (q31_t)0xa63d5ab9, (q31_t)0x5b3c529c, (q31_t)0xa638e01d, (q31_t)0x5b37ea51, (q31_t)0xa63465b9, - (q31_t)0x5b3381ce, (q31_t)0xa62feb8b, (q31_t)0x5b2f1913, (q31_t)0xa62b7196, (q31_t)0x5b2ab020, (q31_t)0xa626f7d7, (q31_t)0x5b2646f4, (q31_t)0xa6227e50, - (q31_t)0x5b21dd90, (q31_t)0xa61e0501, (q31_t)0x5b1d73f4, (q31_t)0xa6198be9, (q31_t)0x5b190a20, (q31_t)0xa6151308, (q31_t)0x5b14a014, (q31_t)0xa6109a5f, - (q31_t)0x5b1035cf, (q31_t)0xa60c21ee, (q31_t)0x5b0bcb52, (q31_t)0xa607a9b4, (q31_t)0x5b07609d, (q31_t)0xa60331b1, (q31_t)0x5b02f5b0, (q31_t)0xa5feb9e6, - (q31_t)0x5afe8a8b, (q31_t)0xa5fa4252, (q31_t)0x5afa1f2e, (q31_t)0xa5f5caf6, (q31_t)0x5af5b398, (q31_t)0xa5f153d2, (q31_t)0x5af147ca, (q31_t)0xa5ecdce5, - (q31_t)0x5aecdbc5, (q31_t)0xa5e8662f, (q31_t)0x5ae86f87, (q31_t)0xa5e3efb1, (q31_t)0x5ae40311, (q31_t)0xa5df796b, (q31_t)0x5adf9663, (q31_t)0xa5db035c, - (q31_t)0x5adb297d, (q31_t)0xa5d68d85, (q31_t)0x5ad6bc5f, (q31_t)0xa5d217e6, (q31_t)0x5ad24f09, (q31_t)0xa5cda27e, (q31_t)0x5acde17b, (q31_t)0xa5c92d4e, - (q31_t)0x5ac973b5, (q31_t)0xa5c4b855, (q31_t)0x5ac505b7, (q31_t)0xa5c04395, (q31_t)0x5ac09781, (q31_t)0xa5bbcf0b, (q31_t)0x5abc2912, (q31_t)0xa5b75aba, - (q31_t)0x5ab7ba6c, (q31_t)0xa5b2e6a0, (q31_t)0x5ab34b8e, (q31_t)0xa5ae72be, (q31_t)0x5aaedc78, (q31_t)0xa5a9ff14, (q31_t)0x5aaa6d2b, (q31_t)0xa5a58ba1, - (q31_t)0x5aa5fda5, (q31_t)0xa5a11866, (q31_t)0x5aa18de7, (q31_t)0xa59ca563, (q31_t)0x5a9d1df1, (q31_t)0xa5983297, (q31_t)0x5a98adc4, (q31_t)0xa593c004, - (q31_t)0x5a943d5e, (q31_t)0xa58f4da8, (q31_t)0x5a8fccc1, (q31_t)0xa58adb84, (q31_t)0x5a8b5bec, (q31_t)0xa5866997, (q31_t)0x5a86eadf, (q31_t)0xa581f7e3, - (q31_t)0x5a82799a, (q31_t)0xa57d8666, (q31_t)0x5a7e081d, (q31_t)0xa5791521, (q31_t)0x5a799669, (q31_t)0xa574a414, (q31_t)0x5a75247c, (q31_t)0xa570333f, - (q31_t)0x5a70b258, (q31_t)0xa56bc2a2, (q31_t)0x5a6c3ffc, (q31_t)0xa567523c, (q31_t)0x5a67cd69, (q31_t)0xa562e20f, (q31_t)0x5a635a9d, (q31_t)0xa55e7219, - (q31_t)0x5a5ee79a, (q31_t)0xa55a025b, (q31_t)0x5a5a745f, (q31_t)0xa55592d5, (q31_t)0x5a5600ec, (q31_t)0xa5512388, (q31_t)0x5a518d42, (q31_t)0xa54cb472, - (q31_t)0x5a4d1960, (q31_t)0xa5484594, (q31_t)0x5a48a546, (q31_t)0xa543d6ee, (q31_t)0x5a4430f5, (q31_t)0xa53f687f, (q31_t)0x5a3fbc6b, (q31_t)0xa53afa49, - (q31_t)0x5a3b47ab, (q31_t)0xa5368c4b, (q31_t)0x5a36d2b2, (q31_t)0xa5321e85, (q31_t)0x5a325d82, (q31_t)0xa52db0f7, (q31_t)0x5a2de81a, (q31_t)0xa52943a1, - (q31_t)0x5a29727b, (q31_t)0xa524d683, (q31_t)0x5a24fca4, (q31_t)0xa520699d, (q31_t)0x5a208695, (q31_t)0xa51bfcef, (q31_t)0x5a1c104f, (q31_t)0xa5179079, - (q31_t)0x5a1799d1, (q31_t)0xa513243b, (q31_t)0x5a13231b, (q31_t)0xa50eb836, (q31_t)0x5a0eac2e, (q31_t)0xa50a4c68, (q31_t)0x5a0a350a, (q31_t)0xa505e0d2, - (q31_t)0x5a05bdae, (q31_t)0xa5017575, (q31_t)0x5a01461a, (q31_t)0xa4fd0a50, (q31_t)0x59fcce4f, (q31_t)0xa4f89f63, (q31_t)0x59f8564c, (q31_t)0xa4f434ae, - (q31_t)0x59f3de12, (q31_t)0xa4efca31, (q31_t)0x59ef65a1, (q31_t)0xa4eb5fec, (q31_t)0x59eaecf8, (q31_t)0xa4e6f5e0, (q31_t)0x59e67417, (q31_t)0xa4e28c0c, - (q31_t)0x59e1faff, (q31_t)0xa4de2270, (q31_t)0x59dd81b0, (q31_t)0xa4d9b90c, (q31_t)0x59d90829, (q31_t)0xa4d54fe0, (q31_t)0x59d48e6a, (q31_t)0xa4d0e6ed, - (q31_t)0x59d01475, (q31_t)0xa4cc7e32, (q31_t)0x59cb9a47, (q31_t)0xa4c815af, (q31_t)0x59c71fe3, (q31_t)0xa4c3ad64, (q31_t)0x59c2a547, (q31_t)0xa4bf4552, - (q31_t)0x59be2a74, (q31_t)0xa4badd78, (q31_t)0x59b9af69, (q31_t)0xa4b675d6, (q31_t)0x59b53427, (q31_t)0xa4b20e6d, (q31_t)0x59b0b8ae, (q31_t)0xa4ada73c, - (q31_t)0x59ac3cfd, (q31_t)0xa4a94043, (q31_t)0x59a7c115, (q31_t)0xa4a4d982, (q31_t)0x59a344f6, (q31_t)0xa4a072fa, (q31_t)0x599ec8a0, (q31_t)0xa49c0cab, - (q31_t)0x599a4c12, (q31_t)0xa497a693, (q31_t)0x5995cf4d, (q31_t)0xa49340b4, (q31_t)0x59915250, (q31_t)0xa48edb0e, (q31_t)0x598cd51d, (q31_t)0xa48a75a0, - (q31_t)0x598857b2, (q31_t)0xa486106a, (q31_t)0x5983da10, (q31_t)0xa481ab6d, (q31_t)0x597f5c36, (q31_t)0xa47d46a8, (q31_t)0x597ade26, (q31_t)0xa478e21b, - (q31_t)0x59765fde, (q31_t)0xa4747dc7, (q31_t)0x5971e15f, (q31_t)0xa47019ac, (q31_t)0x596d62a9, (q31_t)0xa46bb5c9, (q31_t)0x5968e3bc, (q31_t)0xa467521e, - (q31_t)0x59646498, (q31_t)0xa462eeac, (q31_t)0x595fe53c, (q31_t)0xa45e8b73, (q31_t)0x595b65aa, (q31_t)0xa45a2872, (q31_t)0x5956e5e0, (q31_t)0xa455c5a9, - (q31_t)0x595265df, (q31_t)0xa4516319, (q31_t)0x594de5a7, (q31_t)0xa44d00c2, (q31_t)0x59496538, (q31_t)0xa4489ea3, (q31_t)0x5944e492, (q31_t)0xa4443cbd, - (q31_t)0x594063b5, (q31_t)0xa43fdb10, (q31_t)0x593be2a0, (q31_t)0xa43b799a, (q31_t)0x59376155, (q31_t)0xa437185e, (q31_t)0x5932dfd3, (q31_t)0xa432b75a, - (q31_t)0x592e5e19, (q31_t)0xa42e568f, (q31_t)0x5929dc29, (q31_t)0xa429f5fd, (q31_t)0x59255a02, (q31_t)0xa42595a3, (q31_t)0x5920d7a3, (q31_t)0xa4213581, - (q31_t)0x591c550e, (q31_t)0xa41cd599, (q31_t)0x5917d242, (q31_t)0xa41875e9, (q31_t)0x59134f3e, (q31_t)0xa4141672, (q31_t)0x590ecc04, (q31_t)0xa40fb733, - (q31_t)0x590a4893, (q31_t)0xa40b582e, (q31_t)0x5905c4eb, (q31_t)0xa406f960, (q31_t)0x5901410c, (q31_t)0xa4029acc, (q31_t)0x58fcbcf6, (q31_t)0xa3fe3c71, - (q31_t)0x58f838a9, (q31_t)0xa3f9de4e, (q31_t)0x58f3b426, (q31_t)0xa3f58064, (q31_t)0x58ef2f6b, (q31_t)0xa3f122b2, (q31_t)0x58eaaa7a, (q31_t)0xa3ecc53a, - (q31_t)0x58e62552, (q31_t)0xa3e867fa, (q31_t)0x58e19ff3, (q31_t)0xa3e40af3, (q31_t)0x58dd1a5d, (q31_t)0xa3dfae25, (q31_t)0x58d89490, (q31_t)0xa3db5190, - (q31_t)0x58d40e8c, (q31_t)0xa3d6f534, (q31_t)0x58cf8852, (q31_t)0xa3d29910, (q31_t)0x58cb01e1, (q31_t)0xa3ce3d25, (q31_t)0x58c67b39, (q31_t)0xa3c9e174, - (q31_t)0x58c1f45b, (q31_t)0xa3c585fb, (q31_t)0x58bd6d45, (q31_t)0xa3c12abb, (q31_t)0x58b8e5f9, (q31_t)0xa3bccfb3, (q31_t)0x58b45e76, (q31_t)0xa3b874e5, - (q31_t)0x58afd6bd, (q31_t)0xa3b41a50, (q31_t)0x58ab4ecc, (q31_t)0xa3afbff3, (q31_t)0x58a6c6a5, (q31_t)0xa3ab65d0, (q31_t)0x58a23e48, (q31_t)0xa3a70be6, - (q31_t)0x589db5b3, (q31_t)0xa3a2b234, (q31_t)0x58992ce9, (q31_t)0xa39e58bb, (q31_t)0x5894a3e7, (q31_t)0xa399ff7c, (q31_t)0x58901aaf, (q31_t)0xa395a675, - (q31_t)0x588b9140, (q31_t)0xa3914da8, (q31_t)0x5887079a, (q31_t)0xa38cf513, (q31_t)0x58827dbe, (q31_t)0xa3889cb8, (q31_t)0x587df3ab, (q31_t)0xa3844495, - (q31_t)0x58796962, (q31_t)0xa37fecac, (q31_t)0x5874dee2, (q31_t)0xa37b94fb, (q31_t)0x5870542c, (q31_t)0xa3773d84, (q31_t)0x586bc93f, (q31_t)0xa372e646, - (q31_t)0x58673e1b, (q31_t)0xa36e8f41, (q31_t)0x5862b2c1, (q31_t)0xa36a3875, (q31_t)0x585e2730, (q31_t)0xa365e1e2, (q31_t)0x58599b69, (q31_t)0xa3618b88, - (q31_t)0x58550f6c, (q31_t)0xa35d3567, (q31_t)0x58508338, (q31_t)0xa358df80, (q31_t)0x584bf6cd, (q31_t)0xa35489d1, (q31_t)0x58476a2c, (q31_t)0xa350345c, - (q31_t)0x5842dd54, (q31_t)0xa34bdf20, (q31_t)0x583e5047, (q31_t)0xa3478a1d, (q31_t)0x5839c302, (q31_t)0xa3433554, (q31_t)0x58353587, (q31_t)0xa33ee0c3, - (q31_t)0x5830a7d6, (q31_t)0xa33a8c6c, (q31_t)0x582c19ef, (q31_t)0xa336384e, (q31_t)0x58278bd1, (q31_t)0xa331e469, (q31_t)0x5822fd7c, (q31_t)0xa32d90be, - (q31_t)0x581e6ef1, (q31_t)0xa3293d4b, (q31_t)0x5819e030, (q31_t)0xa324ea13, (q31_t)0x58155139, (q31_t)0xa3209713, (q31_t)0x5810c20b, (q31_t)0xa31c444c, - (q31_t)0x580c32a7, (q31_t)0xa317f1bf, (q31_t)0x5807a30d, (q31_t)0xa3139f6b, (q31_t)0x5803133c, (q31_t)0xa30f4d51, (q31_t)0x57fe8335, (q31_t)0xa30afb70, - (q31_t)0x57f9f2f8, (q31_t)0xa306a9c8, (q31_t)0x57f56284, (q31_t)0xa3025859, (q31_t)0x57f0d1da, (q31_t)0xa2fe0724, (q31_t)0x57ec40fa, (q31_t)0xa2f9b629, - (q31_t)0x57e7afe4, (q31_t)0xa2f56566, (q31_t)0x57e31e97, (q31_t)0xa2f114dd, (q31_t)0x57de8d15, (q31_t)0xa2ecc48e, (q31_t)0x57d9fb5c, (q31_t)0xa2e87477, - (q31_t)0x57d5696d, (q31_t)0xa2e4249b, (q31_t)0x57d0d747, (q31_t)0xa2dfd4f7, (q31_t)0x57cc44ec, (q31_t)0xa2db858e, (q31_t)0x57c7b25a, (q31_t)0xa2d7365d, - (q31_t)0x57c31f92, (q31_t)0xa2d2e766, (q31_t)0x57be8c94, (q31_t)0xa2ce98a9, (q31_t)0x57b9f960, (q31_t)0xa2ca4a25, (q31_t)0x57b565f6, (q31_t)0xa2c5fbda, - (q31_t)0x57b0d256, (q31_t)0xa2c1adc9, (q31_t)0x57ac3e80, (q31_t)0xa2bd5ff2, (q31_t)0x57a7aa73, (q31_t)0xa2b91254, (q31_t)0x57a31631, (q31_t)0xa2b4c4f0, - (q31_t)0x579e81b8, (q31_t)0xa2b077c5, (q31_t)0x5799ed0a, (q31_t)0xa2ac2ad3, (q31_t)0x57955825, (q31_t)0xa2a7de1c, (q31_t)0x5790c30a, (q31_t)0xa2a3919e, - (q31_t)0x578c2dba, (q31_t)0xa29f4559, (q31_t)0x57879833, (q31_t)0xa29af94e, (q31_t)0x57830276, (q31_t)0xa296ad7d, (q31_t)0x577e6c84, (q31_t)0xa29261e5, - (q31_t)0x5779d65b, (q31_t)0xa28e1687, (q31_t)0x57753ffc, (q31_t)0xa289cb63, (q31_t)0x5770a968, (q31_t)0xa2858078, (q31_t)0x576c129d, (q31_t)0xa28135c7, - (q31_t)0x57677b9d, (q31_t)0xa27ceb4f, (q31_t)0x5762e467, (q31_t)0xa278a111, (q31_t)0x575e4cfa, (q31_t)0xa274570d, (q31_t)0x5759b558, (q31_t)0xa2700d43, - (q31_t)0x57551d80, (q31_t)0xa26bc3b2, (q31_t)0x57508572, (q31_t)0xa2677a5b, (q31_t)0x574bed2f, (q31_t)0xa263313e, (q31_t)0x574754b5, (q31_t)0xa25ee85b, - (q31_t)0x5742bc06, (q31_t)0xa25a9fb1, (q31_t)0x573e2320, (q31_t)0xa2565741, (q31_t)0x57398a05, (q31_t)0xa2520f0b, (q31_t)0x5734f0b5, (q31_t)0xa24dc70f, - (q31_t)0x5730572e, (q31_t)0xa2497f4c, (q31_t)0x572bbd71, (q31_t)0xa24537c3, (q31_t)0x5727237f, (q31_t)0xa240f074, (q31_t)0x57228957, (q31_t)0xa23ca95f, - (q31_t)0x571deefa, (q31_t)0xa2386284, (q31_t)0x57195466, (q31_t)0xa2341be3, (q31_t)0x5714b99d, (q31_t)0xa22fd57b, (q31_t)0x57101e9e, (q31_t)0xa22b8f4d, - (q31_t)0x570b8369, (q31_t)0xa2274959, (q31_t)0x5706e7ff, (q31_t)0xa223039f, (q31_t)0x57024c5f, (q31_t)0xa21ebe1f, (q31_t)0x56fdb08a, (q31_t)0xa21a78d9, - (q31_t)0x56f9147e, (q31_t)0xa21633cd, (q31_t)0x56f4783d, (q31_t)0xa211eefb, (q31_t)0x56efdbc7, (q31_t)0xa20daa62, (q31_t)0x56eb3f1a, (q31_t)0xa2096604, - (q31_t)0x56e6a239, (q31_t)0xa20521e0, (q31_t)0x56e20521, (q31_t)0xa200ddf5, (q31_t)0x56dd67d4, (q31_t)0xa1fc9a45, (q31_t)0x56d8ca51, (q31_t)0xa1f856ce, - (q31_t)0x56d42c99, (q31_t)0xa1f41392, (q31_t)0x56cf8eab, (q31_t)0xa1efd08f, (q31_t)0x56caf088, (q31_t)0xa1eb8dc7, (q31_t)0x56c6522f, (q31_t)0xa1e74b38, - (q31_t)0x56c1b3a1, (q31_t)0xa1e308e4, (q31_t)0x56bd14dd, (q31_t)0xa1dec6ca, (q31_t)0x56b875e4, (q31_t)0xa1da84e9, (q31_t)0x56b3d6b5, (q31_t)0xa1d64343, - (q31_t)0x56af3750, (q31_t)0xa1d201d7, (q31_t)0x56aa97b7, (q31_t)0xa1cdc0a5, (q31_t)0x56a5f7e7, (q31_t)0xa1c97fad, (q31_t)0x56a157e3, (q31_t)0xa1c53ef0, - (q31_t)0x569cb7a8, (q31_t)0xa1c0fe6c, (q31_t)0x56981739, (q31_t)0xa1bcbe22, (q31_t)0x56937694, (q31_t)0xa1b87e13, (q31_t)0x568ed5b9, (q31_t)0xa1b43e3e, - (q31_t)0x568a34a9, (q31_t)0xa1affea3, (q31_t)0x56859364, (q31_t)0xa1abbf42, (q31_t)0x5680f1ea, (q31_t)0xa1a7801b, (q31_t)0x567c503a, (q31_t)0xa1a3412f, - (q31_t)0x5677ae54, (q31_t)0xa19f027c, (q31_t)0x56730c3a, (q31_t)0xa19ac404, (q31_t)0x566e69ea, (q31_t)0xa19685c7, (q31_t)0x5669c765, (q31_t)0xa19247c3, - (q31_t)0x566524aa, (q31_t)0xa18e09fa, (q31_t)0x566081ba, (q31_t)0xa189cc6b, (q31_t)0x565bde95, (q31_t)0xa1858f16, (q31_t)0x56573b3b, (q31_t)0xa18151fb, - (q31_t)0x565297ab, (q31_t)0xa17d151b, (q31_t)0x564df3e6, (q31_t)0xa178d875, (q31_t)0x56494fec, (q31_t)0xa1749c09, (q31_t)0x5644abbc, (q31_t)0xa1705fd8, - (q31_t)0x56400758, (q31_t)0xa16c23e1, (q31_t)0x563b62be, (q31_t)0xa167e824, (q31_t)0x5636bdef, (q31_t)0xa163aca2, (q31_t)0x563218eb, (q31_t)0xa15f715a, - (q31_t)0x562d73b2, (q31_t)0xa15b364d, (q31_t)0x5628ce43, (q31_t)0xa156fb79, (q31_t)0x5624289f, (q31_t)0xa152c0e1, (q31_t)0x561f82c7, (q31_t)0xa14e8682, - (q31_t)0x561adcb9, (q31_t)0xa14a4c5e, (q31_t)0x56163676, (q31_t)0xa1461275, (q31_t)0x56118ffe, (q31_t)0xa141d8c5, (q31_t)0x560ce950, (q31_t)0xa13d9f51, - (q31_t)0x5608426e, (q31_t)0xa1396617, (q31_t)0x56039b57, (q31_t)0xa1352d17, (q31_t)0x55fef40a, (q31_t)0xa130f451, (q31_t)0x55fa4c89, (q31_t)0xa12cbbc7, - (q31_t)0x55f5a4d2, (q31_t)0xa1288376, (q31_t)0x55f0fce7, (q31_t)0xa1244b61, (q31_t)0x55ec54c6, (q31_t)0xa1201385, (q31_t)0x55e7ac71, (q31_t)0xa11bdbe4, - (q31_t)0x55e303e6, (q31_t)0xa117a47e, (q31_t)0x55de5b27, (q31_t)0xa1136d52, (q31_t)0x55d9b232, (q31_t)0xa10f3661, (q31_t)0x55d50909, (q31_t)0xa10affab, - (q31_t)0x55d05faa, (q31_t)0xa106c92f, (q31_t)0x55cbb617, (q31_t)0xa10292ed, (q31_t)0x55c70c4f, (q31_t)0xa0fe5ce6, (q31_t)0x55c26251, (q31_t)0xa0fa271a, - (q31_t)0x55bdb81f, (q31_t)0xa0f5f189, (q31_t)0x55b90db8, (q31_t)0xa0f1bc32, (q31_t)0x55b4631d, (q31_t)0xa0ed8715, (q31_t)0x55afb84c, (q31_t)0xa0e95234, - (q31_t)0x55ab0d46, (q31_t)0xa0e51d8c, (q31_t)0x55a6620c, (q31_t)0xa0e0e920, (q31_t)0x55a1b69d, (q31_t)0xa0dcb4ee, (q31_t)0x559d0af9, (q31_t)0xa0d880f7, - (q31_t)0x55985f20, (q31_t)0xa0d44d3b, (q31_t)0x5593b312, (q31_t)0xa0d019b9, (q31_t)0x558f06d0, (q31_t)0xa0cbe672, (q31_t)0x558a5a58, (q31_t)0xa0c7b366, - (q31_t)0x5585adad, (q31_t)0xa0c38095, (q31_t)0x558100cc, (q31_t)0xa0bf4dfe, (q31_t)0x557c53b6, (q31_t)0xa0bb1ba2, (q31_t)0x5577a66c, (q31_t)0xa0b6e981, - (q31_t)0x5572f8ed, (q31_t)0xa0b2b79b, (q31_t)0x556e4b39, (q31_t)0xa0ae85ef, (q31_t)0x55699d51, (q31_t)0xa0aa547e, (q31_t)0x5564ef34, (q31_t)0xa0a62348, - (q31_t)0x556040e2, (q31_t)0xa0a1f24d, (q31_t)0x555b925c, (q31_t)0xa09dc18d, (q31_t)0x5556e3a1, (q31_t)0xa0999107, (q31_t)0x555234b1, (q31_t)0xa09560bc, - (q31_t)0x554d858d, (q31_t)0xa09130ad, (q31_t)0x5548d634, (q31_t)0xa08d00d8, (q31_t)0x554426a7, (q31_t)0xa088d13e, (q31_t)0x553f76e4, (q31_t)0xa084a1de, - (q31_t)0x553ac6ee, (q31_t)0xa08072ba, (q31_t)0x553616c2, (q31_t)0xa07c43d1, (q31_t)0x55316663, (q31_t)0xa0781522, (q31_t)0x552cb5ce, (q31_t)0xa073e6af, - (q31_t)0x55280505, (q31_t)0xa06fb876, (q31_t)0x55235408, (q31_t)0xa06b8a78, (q31_t)0x551ea2d6, (q31_t)0xa0675cb6, (q31_t)0x5519f16f, (q31_t)0xa0632f2e, - (q31_t)0x55153fd4, (q31_t)0xa05f01e1, (q31_t)0x55108e05, (q31_t)0xa05ad4cf, (q31_t)0x550bdc01, (q31_t)0xa056a7f9, (q31_t)0x550729c9, (q31_t)0xa0527b5d, - (q31_t)0x5502775c, (q31_t)0xa04e4efc, (q31_t)0x54fdc4ba, (q31_t)0xa04a22d7, (q31_t)0x54f911e5, (q31_t)0xa045f6ec, (q31_t)0x54f45edb, (q31_t)0xa041cb3c, - (q31_t)0x54efab9c, (q31_t)0xa03d9fc8, (q31_t)0x54eaf829, (q31_t)0xa039748e, (q31_t)0x54e64482, (q31_t)0xa0354990, (q31_t)0x54e190a6, (q31_t)0xa0311ecd, - (q31_t)0x54dcdc96, (q31_t)0xa02cf444, (q31_t)0x54d82852, (q31_t)0xa028c9f7, (q31_t)0x54d373d9, (q31_t)0xa0249fe5, (q31_t)0x54cebf2c, (q31_t)0xa020760e, - (q31_t)0x54ca0a4b, (q31_t)0xa01c4c73, (q31_t)0x54c55535, (q31_t)0xa0182312, (q31_t)0x54c09feb, (q31_t)0xa013f9ed, (q31_t)0x54bbea6d, (q31_t)0xa00fd102, - (q31_t)0x54b734ba, (q31_t)0xa00ba853, (q31_t)0x54b27ed3, (q31_t)0xa0077fdf, (q31_t)0x54adc8b8, (q31_t)0xa00357a7, (q31_t)0x54a91269, (q31_t)0x9fff2fa9, - (q31_t)0x54a45be6, (q31_t)0x9ffb07e7, (q31_t)0x549fa52e, (q31_t)0x9ff6e060, (q31_t)0x549aee42, (q31_t)0x9ff2b914, (q31_t)0x54963722, (q31_t)0x9fee9204, - (q31_t)0x54917fce, (q31_t)0x9fea6b2f, (q31_t)0x548cc845, (q31_t)0x9fe64495, (q31_t)0x54881089, (q31_t)0x9fe21e36, (q31_t)0x54835898, (q31_t)0x9fddf812, - (q31_t)0x547ea073, (q31_t)0x9fd9d22a, (q31_t)0x5479e81a, (q31_t)0x9fd5ac7d, (q31_t)0x54752f8d, (q31_t)0x9fd1870c, (q31_t)0x547076cc, (q31_t)0x9fcd61d6, - (q31_t)0x546bbdd7, (q31_t)0x9fc93cdb, (q31_t)0x546704ae, (q31_t)0x9fc5181b, (q31_t)0x54624b50, (q31_t)0x9fc0f397, (q31_t)0x545d91bf, (q31_t)0x9fbccf4f, - (q31_t)0x5458d7f9, (q31_t)0x9fb8ab41, (q31_t)0x54541e00, (q31_t)0x9fb4876f, (q31_t)0x544f63d2, (q31_t)0x9fb063d9, (q31_t)0x544aa971, (q31_t)0x9fac407e, - (q31_t)0x5445eedb, (q31_t)0x9fa81d5e, (q31_t)0x54413412, (q31_t)0x9fa3fa79, (q31_t)0x543c7914, (q31_t)0x9f9fd7d1, (q31_t)0x5437bde3, (q31_t)0x9f9bb563, - (q31_t)0x5433027d, (q31_t)0x9f979331, (q31_t)0x542e46e4, (q31_t)0x9f93713b, (q31_t)0x54298b17, (q31_t)0x9f8f4f80, (q31_t)0x5424cf16, (q31_t)0x9f8b2e00, - (q31_t)0x542012e1, (q31_t)0x9f870cbc, (q31_t)0x541b5678, (q31_t)0x9f82ebb4, (q31_t)0x541699db, (q31_t)0x9f7ecae7, (q31_t)0x5411dd0a, (q31_t)0x9f7aaa55, - (q31_t)0x540d2005, (q31_t)0x9f7689ff, (q31_t)0x540862cd, (q31_t)0x9f7269e5, (q31_t)0x5403a561, (q31_t)0x9f6e4a06, (q31_t)0x53fee7c1, (q31_t)0x9f6a2a63, - (q31_t)0x53fa29ed, (q31_t)0x9f660afb, (q31_t)0x53f56be5, (q31_t)0x9f61ebcf, (q31_t)0x53f0adaa, (q31_t)0x9f5dccde, (q31_t)0x53ebef3a, (q31_t)0x9f59ae29, - (q31_t)0x53e73097, (q31_t)0x9f558fb0, (q31_t)0x53e271c0, (q31_t)0x9f517173, (q31_t)0x53ddb2b6, (q31_t)0x9f4d5371, (q31_t)0x53d8f378, (q31_t)0x9f4935aa, - (q31_t)0x53d43406, (q31_t)0x9f45181f, (q31_t)0x53cf7460, (q31_t)0x9f40fad0, (q31_t)0x53cab486, (q31_t)0x9f3cddbd, (q31_t)0x53c5f479, (q31_t)0x9f38c0e5, - (q31_t)0x53c13439, (q31_t)0x9f34a449, (q31_t)0x53bc73c4, (q31_t)0x9f3087e9, (q31_t)0x53b7b31c, (q31_t)0x9f2c6bc5, (q31_t)0x53b2f240, (q31_t)0x9f284fdc, - (q31_t)0x53ae3131, (q31_t)0x9f24342f, (q31_t)0x53a96fee, (q31_t)0x9f2018bd, (q31_t)0x53a4ae77, (q31_t)0x9f1bfd88, (q31_t)0x539feccd, (q31_t)0x9f17e28e, - (q31_t)0x539b2af0, (q31_t)0x9f13c7d0, (q31_t)0x539668de, (q31_t)0x9f0fad4e, (q31_t)0x5391a699, (q31_t)0x9f0b9307, (q31_t)0x538ce421, (q31_t)0x9f0778fd, - (q31_t)0x53882175, (q31_t)0x9f035f2e, (q31_t)0x53835e95, (q31_t)0x9eff459b, (q31_t)0x537e9b82, (q31_t)0x9efb2c44, (q31_t)0x5379d83c, (q31_t)0x9ef71328, - (q31_t)0x537514c2, (q31_t)0x9ef2fa49, (q31_t)0x53705114, (q31_t)0x9eeee1a5, (q31_t)0x536b8d33, (q31_t)0x9eeac93e, (q31_t)0x5366c91f, (q31_t)0x9ee6b112, - (q31_t)0x536204d7, (q31_t)0x9ee29922, (q31_t)0x535d405c, (q31_t)0x9ede816e, (q31_t)0x53587bad, (q31_t)0x9eda69f6, (q31_t)0x5353b6cb, (q31_t)0x9ed652ba, - (q31_t)0x534ef1b5, (q31_t)0x9ed23bb9, (q31_t)0x534a2c6c, (q31_t)0x9ece24f5, (q31_t)0x534566f0, (q31_t)0x9eca0e6d, (q31_t)0x5340a140, (q31_t)0x9ec5f820, - (q31_t)0x533bdb5d, (q31_t)0x9ec1e210, (q31_t)0x53371547, (q31_t)0x9ebdcc3b, (q31_t)0x53324efd, (q31_t)0x9eb9b6a3, (q31_t)0x532d8880, (q31_t)0x9eb5a146, - (q31_t)0x5328c1d0, (q31_t)0x9eb18c26, (q31_t)0x5323faec, (q31_t)0x9ead7742, (q31_t)0x531f33d5, (q31_t)0x9ea96299, (q31_t)0x531a6c8b, (q31_t)0x9ea54e2d, - (q31_t)0x5315a50e, (q31_t)0x9ea139fd, (q31_t)0x5310dd5d, (q31_t)0x9e9d2608, (q31_t)0x530c1579, (q31_t)0x9e991250, (q31_t)0x53074d62, (q31_t)0x9e94fed4, - (q31_t)0x53028518, (q31_t)0x9e90eb94, (q31_t)0x52fdbc9a, (q31_t)0x9e8cd890, (q31_t)0x52f8f3e9, (q31_t)0x9e88c5c9, (q31_t)0x52f42b05, (q31_t)0x9e84b33d, - (q31_t)0x52ef61ee, (q31_t)0x9e80a0ee, (q31_t)0x52ea98a4, (q31_t)0x9e7c8eda, (q31_t)0x52e5cf27, (q31_t)0x9e787d03, (q31_t)0x52e10576, (q31_t)0x9e746b68, - (q31_t)0x52dc3b92, (q31_t)0x9e705a09, (q31_t)0x52d7717b, (q31_t)0x9e6c48e7, (q31_t)0x52d2a732, (q31_t)0x9e683800, (q31_t)0x52cddcb5, (q31_t)0x9e642756, - (q31_t)0x52c91204, (q31_t)0x9e6016e8, (q31_t)0x52c44721, (q31_t)0x9e5c06b6, (q31_t)0x52bf7c0b, (q31_t)0x9e57f6c0, (q31_t)0x52bab0c2, (q31_t)0x9e53e707, - (q31_t)0x52b5e546, (q31_t)0x9e4fd78a, (q31_t)0x52b11996, (q31_t)0x9e4bc849, (q31_t)0x52ac4db4, (q31_t)0x9e47b944, (q31_t)0x52a7819f, (q31_t)0x9e43aa7c, - (q31_t)0x52a2b556, (q31_t)0x9e3f9bf0, (q31_t)0x529de8db, (q31_t)0x9e3b8da0, (q31_t)0x52991c2d, (q31_t)0x9e377f8c, (q31_t)0x52944f4c, (q31_t)0x9e3371b5, - (q31_t)0x528f8238, (q31_t)0x9e2f641b, (q31_t)0x528ab4f1, (q31_t)0x9e2b56bc, (q31_t)0x5285e777, (q31_t)0x9e27499a, (q31_t)0x528119ca, (q31_t)0x9e233cb4, - (q31_t)0x527c4bea, (q31_t)0x9e1f300b, (q31_t)0x52777dd7, (q31_t)0x9e1b239e, (q31_t)0x5272af92, (q31_t)0x9e17176d, (q31_t)0x526de11a, (q31_t)0x9e130b79, - (q31_t)0x5269126e, (q31_t)0x9e0effc1, (q31_t)0x52644390, (q31_t)0x9e0af446, (q31_t)0x525f7480, (q31_t)0x9e06e907, (q31_t)0x525aa53c, (q31_t)0x9e02de04, - (q31_t)0x5255d5c5, (q31_t)0x9dfed33e, (q31_t)0x5251061c, (q31_t)0x9dfac8b4, (q31_t)0x524c3640, (q31_t)0x9df6be67, (q31_t)0x52476631, (q31_t)0x9df2b456, - (q31_t)0x524295f0, (q31_t)0x9deeaa82, (q31_t)0x523dc57b, (q31_t)0x9deaa0ea, (q31_t)0x5238f4d4, (q31_t)0x9de6978f, (q31_t)0x523423fb, (q31_t)0x9de28e70, - (q31_t)0x522f52ee, (q31_t)0x9dde858e, (q31_t)0x522a81af, (q31_t)0x9dda7ce9, (q31_t)0x5225b03d, (q31_t)0x9dd6747f, (q31_t)0x5220de99, (q31_t)0x9dd26c53, - (q31_t)0x521c0cc2, (q31_t)0x9dce6463, (q31_t)0x52173ab8, (q31_t)0x9dca5caf, (q31_t)0x5212687b, (q31_t)0x9dc65539, (q31_t)0x520d960c, (q31_t)0x9dc24dfe, - (q31_t)0x5208c36a, (q31_t)0x9dbe4701, (q31_t)0x5203f096, (q31_t)0x9dba4040, (q31_t)0x51ff1d8f, (q31_t)0x9db639bb, (q31_t)0x51fa4a56, (q31_t)0x9db23373, - (q31_t)0x51f576ea, (q31_t)0x9dae2d68, (q31_t)0x51f0a34b, (q31_t)0x9daa279a, (q31_t)0x51ebcf7a, (q31_t)0x9da62208, (q31_t)0x51e6fb76, (q31_t)0x9da21cb2, - (q31_t)0x51e22740, (q31_t)0x9d9e179a, (q31_t)0x51dd52d7, (q31_t)0x9d9a12be, (q31_t)0x51d87e3c, (q31_t)0x9d960e1f, (q31_t)0x51d3a96f, (q31_t)0x9d9209bd, - (q31_t)0x51ced46e, (q31_t)0x9d8e0597, (q31_t)0x51c9ff3c, (q31_t)0x9d8a01ae, (q31_t)0x51c529d7, (q31_t)0x9d85fe02, (q31_t)0x51c0543f, (q31_t)0x9d81fa92, - (q31_t)0x51bb7e75, (q31_t)0x9d7df75f, (q31_t)0x51b6a879, (q31_t)0x9d79f469, (q31_t)0x51b1d24a, (q31_t)0x9d75f1b0, (q31_t)0x51acfbe9, (q31_t)0x9d71ef34, - (q31_t)0x51a82555, (q31_t)0x9d6decf4, (q31_t)0x51a34e8f, (q31_t)0x9d69eaf1, (q31_t)0x519e7797, (q31_t)0x9d65e92b, (q31_t)0x5199a06d, (q31_t)0x9d61e7a2, - (q31_t)0x5194c910, (q31_t)0x9d5de656, (q31_t)0x518ff180, (q31_t)0x9d59e546, (q31_t)0x518b19bf, (q31_t)0x9d55e473, (q31_t)0x518641cb, (q31_t)0x9d51e3dd, - (q31_t)0x518169a5, (q31_t)0x9d4de385, (q31_t)0x517c914c, (q31_t)0x9d49e368, (q31_t)0x5177b8c2, (q31_t)0x9d45e389, (q31_t)0x5172e005, (q31_t)0x9d41e3e7, - (q31_t)0x516e0715, (q31_t)0x9d3de482, (q31_t)0x51692df4, (q31_t)0x9d39e559, (q31_t)0x516454a0, (q31_t)0x9d35e66e, (q31_t)0x515f7b1a, (q31_t)0x9d31e7bf, - (q31_t)0x515aa162, (q31_t)0x9d2de94d, (q31_t)0x5155c778, (q31_t)0x9d29eb19, (q31_t)0x5150ed5c, (q31_t)0x9d25ed21, (q31_t)0x514c130d, (q31_t)0x9d21ef66, - (q31_t)0x5147388c, (q31_t)0x9d1df1e9, (q31_t)0x51425dd9, (q31_t)0x9d19f4a8, (q31_t)0x513d82f4, (q31_t)0x9d15f7a4, (q31_t)0x5138a7dd, (q31_t)0x9d11fadd, - (q31_t)0x5133cc94, (q31_t)0x9d0dfe54, (q31_t)0x512ef119, (q31_t)0x9d0a0207, (q31_t)0x512a156b, (q31_t)0x9d0605f7, (q31_t)0x5125398c, (q31_t)0x9d020a25, - (q31_t)0x51205d7b, (q31_t)0x9cfe0e8f, (q31_t)0x511b8137, (q31_t)0x9cfa1337, (q31_t)0x5116a4c1, (q31_t)0x9cf6181c, (q31_t)0x5111c81a, (q31_t)0x9cf21d3d, - (q31_t)0x510ceb40, (q31_t)0x9cee229c, (q31_t)0x51080e35, (q31_t)0x9cea2838, (q31_t)0x510330f7, (q31_t)0x9ce62e11, (q31_t)0x50fe5388, (q31_t)0x9ce23427, - (q31_t)0x50f975e6, (q31_t)0x9cde3a7b, (q31_t)0x50f49813, (q31_t)0x9cda410b, (q31_t)0x50efba0d, (q31_t)0x9cd647d9, (q31_t)0x50eadbd6, (q31_t)0x9cd24ee4, - (q31_t)0x50e5fd6d, (q31_t)0x9cce562c, (q31_t)0x50e11ed2, (q31_t)0x9cca5db1, (q31_t)0x50dc4005, (q31_t)0x9cc66573, (q31_t)0x50d76106, (q31_t)0x9cc26d73, - (q31_t)0x50d281d5, (q31_t)0x9cbe75b0, (q31_t)0x50cda272, (q31_t)0x9cba7e2a, (q31_t)0x50c8c2de, (q31_t)0x9cb686e1, (q31_t)0x50c3e317, (q31_t)0x9cb28fd5, - (q31_t)0x50bf031f, (q31_t)0x9cae9907, (q31_t)0x50ba22f5, (q31_t)0x9caaa276, (q31_t)0x50b5429a, (q31_t)0x9ca6ac23, (q31_t)0x50b0620c, (q31_t)0x9ca2b60c, - (q31_t)0x50ab814d, (q31_t)0x9c9ec033, (q31_t)0x50a6a05c, (q31_t)0x9c9aca97, (q31_t)0x50a1bf39, (q31_t)0x9c96d539, (q31_t)0x509cdde4, (q31_t)0x9c92e017, - (q31_t)0x5097fc5e, (q31_t)0x9c8eeb34, (q31_t)0x50931aa6, (q31_t)0x9c8af68d, (q31_t)0x508e38bd, (q31_t)0x9c870224, (q31_t)0x508956a1, (q31_t)0x9c830df8, - (q31_t)0x50847454, (q31_t)0x9c7f1a0a, (q31_t)0x507f91d5, (q31_t)0x9c7b2659, (q31_t)0x507aaf25, (q31_t)0x9c7732e5, (q31_t)0x5075cc43, (q31_t)0x9c733faf, - (q31_t)0x5070e92f, (q31_t)0x9c6f4cb6, (q31_t)0x506c05ea, (q31_t)0x9c6b59fa, (q31_t)0x50672273, (q31_t)0x9c67677c, (q31_t)0x50623ecb, (q31_t)0x9c63753c, - (q31_t)0x505d5af1, (q31_t)0x9c5f8339, (q31_t)0x505876e5, (q31_t)0x9c5b9173, (q31_t)0x505392a8, (q31_t)0x9c579feb, (q31_t)0x504eae39, (q31_t)0x9c53aea0, - (q31_t)0x5049c999, (q31_t)0x9c4fbd93, (q31_t)0x5044e4c7, (q31_t)0x9c4bccc3, (q31_t)0x503fffc4, (q31_t)0x9c47dc31, (q31_t)0x503b1a8f, (q31_t)0x9c43ebdc, - (q31_t)0x50363529, (q31_t)0x9c3ffbc5, (q31_t)0x50314f91, (q31_t)0x9c3c0beb, (q31_t)0x502c69c8, (q31_t)0x9c381c4f, (q31_t)0x502783cd, (q31_t)0x9c342cf0, - (q31_t)0x50229da1, (q31_t)0x9c303dcf, (q31_t)0x501db743, (q31_t)0x9c2c4eec, (q31_t)0x5018d0b4, (q31_t)0x9c286046, (q31_t)0x5013e9f4, (q31_t)0x9c2471de, - (q31_t)0x500f0302, (q31_t)0x9c2083b3, (q31_t)0x500a1bdf, (q31_t)0x9c1c95c6, (q31_t)0x5005348a, (q31_t)0x9c18a816, (q31_t)0x50004d04, (q31_t)0x9c14baa4, - (q31_t)0x4ffb654d, (q31_t)0x9c10cd70, (q31_t)0x4ff67d64, (q31_t)0x9c0ce07a, (q31_t)0x4ff1954b, (q31_t)0x9c08f3c1, (q31_t)0x4fecacff, (q31_t)0x9c050745, - (q31_t)0x4fe7c483, (q31_t)0x9c011b08, (q31_t)0x4fe2dbd5, (q31_t)0x9bfd2f08, (q31_t)0x4fddf2f6, (q31_t)0x9bf94346, (q31_t)0x4fd909e5, (q31_t)0x9bf557c1, - (q31_t)0x4fd420a4, (q31_t)0x9bf16c7a, (q31_t)0x4fcf3731, (q31_t)0x9bed8171, (q31_t)0x4fca4d8d, (q31_t)0x9be996a6, (q31_t)0x4fc563b7, (q31_t)0x9be5ac18, - (q31_t)0x4fc079b1, (q31_t)0x9be1c1c8, (q31_t)0x4fbb8f79, (q31_t)0x9bddd7b6, (q31_t)0x4fb6a510, (q31_t)0x9bd9ede2, (q31_t)0x4fb1ba76, (q31_t)0x9bd6044b, - (q31_t)0x4faccfab, (q31_t)0x9bd21af3, (q31_t)0x4fa7e4af, (q31_t)0x9bce31d8, (q31_t)0x4fa2f981, (q31_t)0x9bca48fa, (q31_t)0x4f9e0e22, (q31_t)0x9bc6605b, - (q31_t)0x4f992293, (q31_t)0x9bc277fa, (q31_t)0x4f9436d2, (q31_t)0x9bbe8fd6, (q31_t)0x4f8f4ae0, (q31_t)0x9bbaa7f0, (q31_t)0x4f8a5ebd, (q31_t)0x9bb6c048, - (q31_t)0x4f857269, (q31_t)0x9bb2d8de, (q31_t)0x4f8085e4, (q31_t)0x9baef1b2, (q31_t)0x4f7b992d, (q31_t)0x9bab0ac3, (q31_t)0x4f76ac46, (q31_t)0x9ba72413, - (q31_t)0x4f71bf2e, (q31_t)0x9ba33da0, (q31_t)0x4f6cd1e5, (q31_t)0x9b9f576b, (q31_t)0x4f67e46a, (q31_t)0x9b9b7174, (q31_t)0x4f62f6bf, (q31_t)0x9b978bbc, - (q31_t)0x4f5e08e3, (q31_t)0x9b93a641, (q31_t)0x4f591ad6, (q31_t)0x9b8fc104, (q31_t)0x4f542c98, (q31_t)0x9b8bdc05, (q31_t)0x4f4f3e29, (q31_t)0x9b87f744, - (q31_t)0x4f4a4f89, (q31_t)0x9b8412c1, (q31_t)0x4f4560b8, (q31_t)0x9b802e7b, (q31_t)0x4f4071b6, (q31_t)0x9b7c4a74, (q31_t)0x4f3b8284, (q31_t)0x9b7866ab, - (q31_t)0x4f369320, (q31_t)0x9b748320, (q31_t)0x4f31a38c, (q31_t)0x9b709fd3, (q31_t)0x4f2cb3c7, (q31_t)0x9b6cbcc4, (q31_t)0x4f27c3d1, (q31_t)0x9b68d9f3, - (q31_t)0x4f22d3aa, (q31_t)0x9b64f760, (q31_t)0x4f1de352, (q31_t)0x9b61150b, (q31_t)0x4f18f2c9, (q31_t)0x9b5d32f4, (q31_t)0x4f140210, (q31_t)0x9b59511c, - (q31_t)0x4f0f1126, (q31_t)0x9b556f81, (q31_t)0x4f0a200b, (q31_t)0x9b518e24, (q31_t)0x4f052ec0, (q31_t)0x9b4dad06, (q31_t)0x4f003d43, (q31_t)0x9b49cc26, - (q31_t)0x4efb4b96, (q31_t)0x9b45eb83, (q31_t)0x4ef659b8, (q31_t)0x9b420b1f, (q31_t)0x4ef167aa, (q31_t)0x9b3e2af9, (q31_t)0x4eec756b, (q31_t)0x9b3a4b11, - (q31_t)0x4ee782fb, (q31_t)0x9b366b68, (q31_t)0x4ee2905a, (q31_t)0x9b328bfc, (q31_t)0x4edd9d89, (q31_t)0x9b2eaccf, (q31_t)0x4ed8aa87, (q31_t)0x9b2acde0, - (q31_t)0x4ed3b755, (q31_t)0x9b26ef2f, (q31_t)0x4ecec3f2, (q31_t)0x9b2310bc, (q31_t)0x4ec9d05e, (q31_t)0x9b1f3288, (q31_t)0x4ec4dc99, (q31_t)0x9b1b5492, - (q31_t)0x4ebfe8a5, (q31_t)0x9b1776da, (q31_t)0x4ebaf47f, (q31_t)0x9b139960, (q31_t)0x4eb60029, (q31_t)0x9b0fbc24, (q31_t)0x4eb10ba2, (q31_t)0x9b0bdf27, - (q31_t)0x4eac16eb, (q31_t)0x9b080268, (q31_t)0x4ea72203, (q31_t)0x9b0425e8, (q31_t)0x4ea22ceb, (q31_t)0x9b0049a5, (q31_t)0x4e9d37a3, (q31_t)0x9afc6da1, - (q31_t)0x4e984229, (q31_t)0x9af891db, (q31_t)0x4e934c80, (q31_t)0x9af4b654, (q31_t)0x4e8e56a5, (q31_t)0x9af0db0b, (q31_t)0x4e89609b, (q31_t)0x9aed0000, - (q31_t)0x4e846a60, (q31_t)0x9ae92533, (q31_t)0x4e7f73f4, (q31_t)0x9ae54aa5, (q31_t)0x4e7a7d58, (q31_t)0x9ae17056, (q31_t)0x4e75868c, (q31_t)0x9add9644, - (q31_t)0x4e708f8f, (q31_t)0x9ad9bc71, (q31_t)0x4e6b9862, (q31_t)0x9ad5e2dd, (q31_t)0x4e66a105, (q31_t)0x9ad20987, (q31_t)0x4e61a977, (q31_t)0x9ace306f, - (q31_t)0x4e5cb1b9, (q31_t)0x9aca5795, (q31_t)0x4e57b9ca, (q31_t)0x9ac67efb, (q31_t)0x4e52c1ab, (q31_t)0x9ac2a69e, (q31_t)0x4e4dc95c, (q31_t)0x9abece80, - (q31_t)0x4e48d0dd, (q31_t)0x9abaf6a1, (q31_t)0x4e43d82d, (q31_t)0x9ab71eff, (q31_t)0x4e3edf4d, (q31_t)0x9ab3479d, (q31_t)0x4e39e63d, (q31_t)0x9aaf7079, - (q31_t)0x4e34ecfc, (q31_t)0x9aab9993, (q31_t)0x4e2ff38b, (q31_t)0x9aa7c2ec, (q31_t)0x4e2af9ea, (q31_t)0x9aa3ec83, (q31_t)0x4e260019, (q31_t)0x9aa01659, - (q31_t)0x4e210617, (q31_t)0x9a9c406e, (q31_t)0x4e1c0be6, (q31_t)0x9a986ac1, (q31_t)0x4e171184, (q31_t)0x9a949552, (q31_t)0x4e1216f2, (q31_t)0x9a90c022, - (q31_t)0x4e0d1c30, (q31_t)0x9a8ceb31, (q31_t)0x4e08213e, (q31_t)0x9a89167e, (q31_t)0x4e03261b, (q31_t)0x9a85420a, (q31_t)0x4dfe2ac9, (q31_t)0x9a816dd5, - (q31_t)0x4df92f46, (q31_t)0x9a7d99de, (q31_t)0x4df43393, (q31_t)0x9a79c625, (q31_t)0x4def37b0, (q31_t)0x9a75f2ac, (q31_t)0x4dea3b9d, (q31_t)0x9a721f71, - (q31_t)0x4de53f5a, (q31_t)0x9a6e4c74, (q31_t)0x4de042e7, (q31_t)0x9a6a79b6, (q31_t)0x4ddb4644, (q31_t)0x9a66a737, (q31_t)0x4dd64971, (q31_t)0x9a62d4f7, - (q31_t)0x4dd14c6e, (q31_t)0x9a5f02f5, (q31_t)0x4dcc4f3b, (q31_t)0x9a5b3132, (q31_t)0x4dc751d8, (q31_t)0x9a575fae, (q31_t)0x4dc25445, (q31_t)0x9a538e68, - (q31_t)0x4dbd5682, (q31_t)0x9a4fbd61, (q31_t)0x4db8588f, (q31_t)0x9a4bec99, (q31_t)0x4db35a6c, (q31_t)0x9a481c0f, (q31_t)0x4dae5c19, (q31_t)0x9a444bc5, - (q31_t)0x4da95d96, (q31_t)0x9a407bb9, (q31_t)0x4da45ee3, (q31_t)0x9a3cabeb, (q31_t)0x4d9f6001, (q31_t)0x9a38dc5d, (q31_t)0x4d9a60ee, (q31_t)0x9a350d0d, - (q31_t)0x4d9561ac, (q31_t)0x9a313dfc, (q31_t)0x4d90623a, (q31_t)0x9a2d6f2a, (q31_t)0x4d8b6298, (q31_t)0x9a29a097, (q31_t)0x4d8662c6, (q31_t)0x9a25d243, - (q31_t)0x4d8162c4, (q31_t)0x9a22042d, (q31_t)0x4d7c6293, (q31_t)0x9a1e3656, (q31_t)0x4d776231, (q31_t)0x9a1a68be, (q31_t)0x4d7261a0, (q31_t)0x9a169b65, - (q31_t)0x4d6d60df, (q31_t)0x9a12ce4b, (q31_t)0x4d685fef, (q31_t)0x9a0f016f, (q31_t)0x4d635ece, (q31_t)0x9a0b34d3, (q31_t)0x4d5e5d7e, (q31_t)0x9a076875, - (q31_t)0x4d595bfe, (q31_t)0x9a039c57, (q31_t)0x4d545a4f, (q31_t)0x99ffd077, (q31_t)0x4d4f5870, (q31_t)0x99fc04d6, (q31_t)0x4d4a5661, (q31_t)0x99f83974, - (q31_t)0x4d455422, (q31_t)0x99f46e51, (q31_t)0x4d4051b4, (q31_t)0x99f0a36d, (q31_t)0x4d3b4f16, (q31_t)0x99ecd8c8, (q31_t)0x4d364c48, (q31_t)0x99e90e62, - (q31_t)0x4d31494b, (q31_t)0x99e5443b, (q31_t)0x4d2c461e, (q31_t)0x99e17a53, (q31_t)0x4d2742c2, (q31_t)0x99ddb0aa, (q31_t)0x4d223f36, (q31_t)0x99d9e73f, - (q31_t)0x4d1d3b7a, (q31_t)0x99d61e14, (q31_t)0x4d18378f, (q31_t)0x99d25528, (q31_t)0x4d133374, (q31_t)0x99ce8c7b, (q31_t)0x4d0e2f2a, (q31_t)0x99cac40d, - (q31_t)0x4d092ab0, (q31_t)0x99c6fbde, (q31_t)0x4d042607, (q31_t)0x99c333ee, (q31_t)0x4cff212e, (q31_t)0x99bf6c3d, (q31_t)0x4cfa1c26, (q31_t)0x99bba4cb, - (q31_t)0x4cf516ee, (q31_t)0x99b7dd99, (q31_t)0x4cf01187, (q31_t)0x99b416a5, (q31_t)0x4ceb0bf0, (q31_t)0x99b04ff0, (q31_t)0x4ce6062a, (q31_t)0x99ac897b, - (q31_t)0x4ce10034, (q31_t)0x99a8c345, (q31_t)0x4cdbfa0f, (q31_t)0x99a4fd4d, (q31_t)0x4cd6f3bb, (q31_t)0x99a13795, (q31_t)0x4cd1ed37, (q31_t)0x999d721c, - (q31_t)0x4ccce684, (q31_t)0x9999ace3, (q31_t)0x4cc7dfa1, (q31_t)0x9995e7e8, (q31_t)0x4cc2d88f, (q31_t)0x9992232d, (q31_t)0x4cbdd14e, (q31_t)0x998e5eb1, - (q31_t)0x4cb8c9dd, (q31_t)0x998a9a74, (q31_t)0x4cb3c23d, (q31_t)0x9986d676, (q31_t)0x4caeba6e, (q31_t)0x998312b7, (q31_t)0x4ca9b26f, (q31_t)0x997f4f38, - (q31_t)0x4ca4aa41, (q31_t)0x997b8bf8, (q31_t)0x4c9fa1e4, (q31_t)0x9977c8f7, (q31_t)0x4c9a9958, (q31_t)0x99740635, (q31_t)0x4c95909c, (q31_t)0x997043b2, - (q31_t)0x4c9087b1, (q31_t)0x996c816f, (q31_t)0x4c8b7e97, (q31_t)0x9968bf6b, (q31_t)0x4c86754e, (q31_t)0x9964fda7, (q31_t)0x4c816bd5, (q31_t)0x99613c22, - (q31_t)0x4c7c622d, (q31_t)0x995d7adc, (q31_t)0x4c775856, (q31_t)0x9959b9d5, (q31_t)0x4c724e50, (q31_t)0x9955f90d, (q31_t)0x4c6d441b, (q31_t)0x99523885, - (q31_t)0x4c6839b7, (q31_t)0x994e783d, (q31_t)0x4c632f23, (q31_t)0x994ab833, (q31_t)0x4c5e2460, (q31_t)0x9946f869, (q31_t)0x4c59196f, (q31_t)0x994338df, - (q31_t)0x4c540e4e, (q31_t)0x993f7993, (q31_t)0x4c4f02fe, (q31_t)0x993bba87, (q31_t)0x4c49f77f, (q31_t)0x9937fbbb, (q31_t)0x4c44ebd1, (q31_t)0x99343d2e, - (q31_t)0x4c3fdff4, (q31_t)0x99307ee0, (q31_t)0x4c3ad3e7, (q31_t)0x992cc0d2, (q31_t)0x4c35c7ac, (q31_t)0x99290303, (q31_t)0x4c30bb42, (q31_t)0x99254574, - (q31_t)0x4c2baea9, (q31_t)0x99218824, (q31_t)0x4c26a1e1, (q31_t)0x991dcb13, (q31_t)0x4c2194e9, (q31_t)0x991a0e42, (q31_t)0x4c1c87c3, (q31_t)0x991651b1, - (q31_t)0x4c177a6e, (q31_t)0x9912955f, (q31_t)0x4c126cea, (q31_t)0x990ed94c, (q31_t)0x4c0d5f37, (q31_t)0x990b1d79, (q31_t)0x4c085156, (q31_t)0x990761e5, - (q31_t)0x4c034345, (q31_t)0x9903a691, (q31_t)0x4bfe3505, (q31_t)0x98ffeb7d, (q31_t)0x4bf92697, (q31_t)0x98fc30a8, (q31_t)0x4bf417f9, (q31_t)0x98f87612, - (q31_t)0x4bef092d, (q31_t)0x98f4bbbc, (q31_t)0x4be9fa32, (q31_t)0x98f101a6, (q31_t)0x4be4eb08, (q31_t)0x98ed47cf, (q31_t)0x4bdfdbaf, (q31_t)0x98e98e38, - (q31_t)0x4bdacc28, (q31_t)0x98e5d4e0, (q31_t)0x4bd5bc72, (q31_t)0x98e21bc8, (q31_t)0x4bd0ac8d, (q31_t)0x98de62f0, (q31_t)0x4bcb9c79, (q31_t)0x98daaa57, - (q31_t)0x4bc68c36, (q31_t)0x98d6f1fe, (q31_t)0x4bc17bc5, (q31_t)0x98d339e4, (q31_t)0x4bbc6b25, (q31_t)0x98cf820b, (q31_t)0x4bb75a56, (q31_t)0x98cbca70, - (q31_t)0x4bb24958, (q31_t)0x98c81316, (q31_t)0x4bad382c, (q31_t)0x98c45bfb, (q31_t)0x4ba826d1, (q31_t)0x98c0a520, (q31_t)0x4ba31548, (q31_t)0x98bcee84, - (q31_t)0x4b9e0390, (q31_t)0x98b93828, (q31_t)0x4b98f1a9, (q31_t)0x98b5820c, (q31_t)0x4b93df93, (q31_t)0x98b1cc30, (q31_t)0x4b8ecd4f, (q31_t)0x98ae1693, - (q31_t)0x4b89badd, (q31_t)0x98aa6136, (q31_t)0x4b84a83b, (q31_t)0x98a6ac19, (q31_t)0x4b7f956b, (q31_t)0x98a2f73c, (q31_t)0x4b7a826d, (q31_t)0x989f429e, - (q31_t)0x4b756f40, (q31_t)0x989b8e40, (q31_t)0x4b705be4, (q31_t)0x9897da22, (q31_t)0x4b6b485a, (q31_t)0x98942643, (q31_t)0x4b6634a2, (q31_t)0x989072a5, - (q31_t)0x4b6120bb, (q31_t)0x988cbf46, (q31_t)0x4b5c0ca5, (q31_t)0x98890c27, (q31_t)0x4b56f861, (q31_t)0x98855948, (q31_t)0x4b51e3ee, (q31_t)0x9881a6a9, - (q31_t)0x4b4ccf4d, (q31_t)0x987df449, (q31_t)0x4b47ba7e, (q31_t)0x987a422a, (q31_t)0x4b42a580, (q31_t)0x9876904a, (q31_t)0x4b3d9053, (q31_t)0x9872deaa, - (q31_t)0x4b387af9, (q31_t)0x986f2d4a, (q31_t)0x4b336570, (q31_t)0x986b7c2a, (q31_t)0x4b2e4fb8, (q31_t)0x9867cb4a, (q31_t)0x4b2939d2, (q31_t)0x98641aa9, - (q31_t)0x4b2423be, (q31_t)0x98606a49, (q31_t)0x4b1f0d7b, (q31_t)0x985cba28, (q31_t)0x4b19f70a, (q31_t)0x98590a48, (q31_t)0x4b14e06b, (q31_t)0x98555aa7, - (q31_t)0x4b0fc99d, (q31_t)0x9851ab46, (q31_t)0x4b0ab2a1, (q31_t)0x984dfc26, (q31_t)0x4b059b77, (q31_t)0x984a4d45, (q31_t)0x4b00841f, (q31_t)0x98469ea4, - (q31_t)0x4afb6c98, (q31_t)0x9842f043, (q31_t)0x4af654e3, (q31_t)0x983f4223, (q31_t)0x4af13d00, (q31_t)0x983b9442, (q31_t)0x4aec24ee, (q31_t)0x9837e6a1, - (q31_t)0x4ae70caf, (q31_t)0x98343940, (q31_t)0x4ae1f441, (q31_t)0x98308c1f, (q31_t)0x4adcdba5, (q31_t)0x982cdf3f, (q31_t)0x4ad7c2da, (q31_t)0x9829329e, - (q31_t)0x4ad2a9e2, (q31_t)0x9825863d, (q31_t)0x4acd90bb, (q31_t)0x9821da1d, (q31_t)0x4ac87767, (q31_t)0x981e2e3c, (q31_t)0x4ac35de4, (q31_t)0x981a829c, - (q31_t)0x4abe4433, (q31_t)0x9816d73b, (q31_t)0x4ab92a54, (q31_t)0x98132c1b, (q31_t)0x4ab41046, (q31_t)0x980f813b, (q31_t)0x4aaef60b, (q31_t)0x980bd69b, - (q31_t)0x4aa9dba2, (q31_t)0x98082c3b, (q31_t)0x4aa4c10b, (q31_t)0x9804821b, (q31_t)0x4a9fa645, (q31_t)0x9800d83c, (q31_t)0x4a9a8b52, (q31_t)0x97fd2e9c, - (q31_t)0x4a957030, (q31_t)0x97f9853d, (q31_t)0x4a9054e1, (q31_t)0x97f5dc1e, (q31_t)0x4a8b3963, (q31_t)0x97f2333f, (q31_t)0x4a861db8, (q31_t)0x97ee8aa0, - (q31_t)0x4a8101de, (q31_t)0x97eae242, (q31_t)0x4a7be5d7, (q31_t)0x97e73a23, (q31_t)0x4a76c9a2, (q31_t)0x97e39245, (q31_t)0x4a71ad3e, (q31_t)0x97dfeaa7, - (q31_t)0x4a6c90ad, (q31_t)0x97dc4349, (q31_t)0x4a6773ee, (q31_t)0x97d89c2c, (q31_t)0x4a625701, (q31_t)0x97d4f54f, (q31_t)0x4a5d39e6, (q31_t)0x97d14eb2, - (q31_t)0x4a581c9e, (q31_t)0x97cda855, (q31_t)0x4a52ff27, (q31_t)0x97ca0239, (q31_t)0x4a4de182, (q31_t)0x97c65c5c, (q31_t)0x4a48c3b0, (q31_t)0x97c2b6c1, - (q31_t)0x4a43a5b0, (q31_t)0x97bf1165, (q31_t)0x4a3e8782, (q31_t)0x97bb6c4a, (q31_t)0x4a396926, (q31_t)0x97b7c76f, (q31_t)0x4a344a9d, (q31_t)0x97b422d4, - (q31_t)0x4a2f2be6, (q31_t)0x97b07e7a, (q31_t)0x4a2a0d01, (q31_t)0x97acda60, (q31_t)0x4a24edee, (q31_t)0x97a93687, (q31_t)0x4a1fcead, (q31_t)0x97a592ed, - (q31_t)0x4a1aaf3f, (q31_t)0x97a1ef94, (q31_t)0x4a158fa3, (q31_t)0x979e4c7c, (q31_t)0x4a106fda, (q31_t)0x979aa9a4, (q31_t)0x4a0b4fe2, (q31_t)0x9797070c, - (q31_t)0x4a062fbd, (q31_t)0x979364b5, (q31_t)0x4a010f6b, (q31_t)0x978fc29e, (q31_t)0x49fbeeea, (q31_t)0x978c20c8, (q31_t)0x49f6ce3c, (q31_t)0x97887f32, - (q31_t)0x49f1ad61, (q31_t)0x9784dddc, (q31_t)0x49ec8c57, (q31_t)0x97813cc7, (q31_t)0x49e76b21, (q31_t)0x977d9bf2, (q31_t)0x49e249bc, (q31_t)0x9779fb5e, - (q31_t)0x49dd282a, (q31_t)0x97765b0a, (q31_t)0x49d8066b, (q31_t)0x9772baf7, (q31_t)0x49d2e47e, (q31_t)0x976f1b24, (q31_t)0x49cdc263, (q31_t)0x976b7b92, - (q31_t)0x49c8a01b, (q31_t)0x9767dc41, (q31_t)0x49c37da5, (q31_t)0x97643d2f, (q31_t)0x49be5b02, (q31_t)0x97609e5f, (q31_t)0x49b93832, (q31_t)0x975cffcf, - (q31_t)0x49b41533, (q31_t)0x9759617f, (q31_t)0x49aef208, (q31_t)0x9755c370, (q31_t)0x49a9ceaf, (q31_t)0x975225a1, (q31_t)0x49a4ab28, (q31_t)0x974e8813, - (q31_t)0x499f8774, (q31_t)0x974aeac6, (q31_t)0x499a6393, (q31_t)0x97474db9, (q31_t)0x49953f84, (q31_t)0x9743b0ed, (q31_t)0x49901b48, (q31_t)0x97401462, - (q31_t)0x498af6df, (q31_t)0x973c7817, (q31_t)0x4985d248, (q31_t)0x9738dc0d, (q31_t)0x4980ad84, (q31_t)0x97354043, (q31_t)0x497b8892, (q31_t)0x9731a4ba, - (q31_t)0x49766373, (q31_t)0x972e0971, (q31_t)0x49713e27, (q31_t)0x972a6e6a, (q31_t)0x496c18ae, (q31_t)0x9726d3a3, (q31_t)0x4966f307, (q31_t)0x9723391c, - (q31_t)0x4961cd33, (q31_t)0x971f9ed7, (q31_t)0x495ca732, (q31_t)0x971c04d2, (q31_t)0x49578103, (q31_t)0x97186b0d, (q31_t)0x49525aa7, (q31_t)0x9714d18a, - (q31_t)0x494d341e, (q31_t)0x97113847, (q31_t)0x49480d68, (q31_t)0x970d9f45, (q31_t)0x4942e684, (q31_t)0x970a0683, (q31_t)0x493dbf74, (q31_t)0x97066e03, - (q31_t)0x49389836, (q31_t)0x9702d5c3, (q31_t)0x493370cb, (q31_t)0x96ff3dc4, (q31_t)0x492e4933, (q31_t)0x96fba605, (q31_t)0x4929216e, (q31_t)0x96f80e88, - (q31_t)0x4923f97b, (q31_t)0x96f4774b, (q31_t)0x491ed15c, (q31_t)0x96f0e04f, (q31_t)0x4919a90f, (q31_t)0x96ed4994, (q31_t)0x49148095, (q31_t)0x96e9b319, - (q31_t)0x490f57ee, (q31_t)0x96e61ce0, (q31_t)0x490a2f1b, (q31_t)0x96e286e7, (q31_t)0x4905061a, (q31_t)0x96def12f, (q31_t)0x48ffdcec, (q31_t)0x96db5bb8, - (q31_t)0x48fab391, (q31_t)0x96d7c682, (q31_t)0x48f58a09, (q31_t)0x96d4318d, (q31_t)0x48f06054, (q31_t)0x96d09cd8, (q31_t)0x48eb3672, (q31_t)0x96cd0865, - (q31_t)0x48e60c62, (q31_t)0x96c97432, (q31_t)0x48e0e227, (q31_t)0x96c5e040, (q31_t)0x48dbb7be, (q31_t)0x96c24c8f, (q31_t)0x48d68d28, (q31_t)0x96beb91f, - (q31_t)0x48d16265, (q31_t)0x96bb25f0, (q31_t)0x48cc3775, (q31_t)0x96b79302, (q31_t)0x48c70c59, (q31_t)0x96b40055, (q31_t)0x48c1e10f, (q31_t)0x96b06de9, - (q31_t)0x48bcb599, (q31_t)0x96acdbbe, (q31_t)0x48b789f5, (q31_t)0x96a949d3, (q31_t)0x48b25e25, (q31_t)0x96a5b82a, (q31_t)0x48ad3228, (q31_t)0x96a226c2, - (q31_t)0x48a805ff, (q31_t)0x969e959b, (q31_t)0x48a2d9a8, (q31_t)0x969b04b4, (q31_t)0x489dad25, (q31_t)0x9697740f, (q31_t)0x48988074, (q31_t)0x9693e3ab, - (q31_t)0x48935397, (q31_t)0x96905388, (q31_t)0x488e268e, (q31_t)0x968cc3a5, (q31_t)0x4888f957, (q31_t)0x96893404, (q31_t)0x4883cbf4, (q31_t)0x9685a4a4, - (q31_t)0x487e9e64, (q31_t)0x96821585, (q31_t)0x487970a7, (q31_t)0x967e86a7, (q31_t)0x487442be, (q31_t)0x967af80a, (q31_t)0x486f14a8, (q31_t)0x967769af, - (q31_t)0x4869e665, (q31_t)0x9673db94, (q31_t)0x4864b7f5, (q31_t)0x96704dba, (q31_t)0x485f8959, (q31_t)0x966cc022, (q31_t)0x485a5a90, (q31_t)0x966932cb, - (q31_t)0x48552b9b, (q31_t)0x9665a5b4, (q31_t)0x484ffc79, (q31_t)0x966218df, (q31_t)0x484acd2a, (q31_t)0x965e8c4b, (q31_t)0x48459daf, (q31_t)0x965afff9, - (q31_t)0x48406e08, (q31_t)0x965773e7, (q31_t)0x483b3e33, (q31_t)0x9653e817, (q31_t)0x48360e32, (q31_t)0x96505c88, (q31_t)0x4830de05, (q31_t)0x964cd139, - (q31_t)0x482badab, (q31_t)0x9649462d, (q31_t)0x48267d24, (q31_t)0x9645bb61, (q31_t)0x48214c71, (q31_t)0x964230d7, (q31_t)0x481c1b92, (q31_t)0x963ea68d, - (q31_t)0x4816ea86, (q31_t)0x963b1c86, (q31_t)0x4811b94d, (q31_t)0x963792bf, (q31_t)0x480c87e8, (q31_t)0x96340939, (q31_t)0x48075657, (q31_t)0x96307ff5, - (q31_t)0x48022499, (q31_t)0x962cf6f2, (q31_t)0x47fcf2af, (q31_t)0x96296e31, (q31_t)0x47f7c099, (q31_t)0x9625e5b0, (q31_t)0x47f28e56, (q31_t)0x96225d71, - (q31_t)0x47ed5be6, (q31_t)0x961ed574, (q31_t)0x47e8294a, (q31_t)0x961b4db7, (q31_t)0x47e2f682, (q31_t)0x9617c63c, (q31_t)0x47ddc38e, (q31_t)0x96143f02, - (q31_t)0x47d8906d, (q31_t)0x9610b80a, (q31_t)0x47d35d20, (q31_t)0x960d3153, (q31_t)0x47ce29a7, (q31_t)0x9609aadd, (q31_t)0x47c8f601, (q31_t)0x960624a9, - (q31_t)0x47c3c22f, (q31_t)0x96029eb6, (q31_t)0x47be8e31, (q31_t)0x95ff1904, (q31_t)0x47b95a06, (q31_t)0x95fb9394, (q31_t)0x47b425af, (q31_t)0x95f80e65, - (q31_t)0x47aef12c, (q31_t)0x95f48977, (q31_t)0x47a9bc7d, (q31_t)0x95f104cb, (q31_t)0x47a487a2, (q31_t)0x95ed8061, (q31_t)0x479f529a, (q31_t)0x95e9fc38, - (q31_t)0x479a1d67, (q31_t)0x95e67850, (q31_t)0x4794e807, (q31_t)0x95e2f4a9, (q31_t)0x478fb27b, (q31_t)0x95df7145, (q31_t)0x478a7cc2, (q31_t)0x95dbee21, - (q31_t)0x478546de, (q31_t)0x95d86b3f, (q31_t)0x478010cd, (q31_t)0x95d4e89f, (q31_t)0x477ada91, (q31_t)0x95d16640, (q31_t)0x4775a428, (q31_t)0x95cde423, - (q31_t)0x47706d93, (q31_t)0x95ca6247, (q31_t)0x476b36d3, (q31_t)0x95c6e0ac, (q31_t)0x4765ffe6, (q31_t)0x95c35f53, (q31_t)0x4760c8cd, (q31_t)0x95bfde3c, - (q31_t)0x475b9188, (q31_t)0x95bc5d66, (q31_t)0x47565a17, (q31_t)0x95b8dcd2, (q31_t)0x4751227a, (q31_t)0x95b55c7f, (q31_t)0x474beab1, (q31_t)0x95b1dc6e, - (q31_t)0x4746b2bc, (q31_t)0x95ae5c9f, (q31_t)0x47417a9b, (q31_t)0x95aadd11, (q31_t)0x473c424e, (q31_t)0x95a75dc4, (q31_t)0x473709d5, (q31_t)0x95a3deb9, - (q31_t)0x4731d131, (q31_t)0x95a05ff0, (q31_t)0x472c9860, (q31_t)0x959ce169, (q31_t)0x47275f63, (q31_t)0x95996323, (q31_t)0x4722263b, (q31_t)0x9595e51e, - (q31_t)0x471cece7, (q31_t)0x9592675c, (q31_t)0x4717b367, (q31_t)0x958ee9db, (q31_t)0x471279ba, (q31_t)0x958b6c9b, (q31_t)0x470d3fe3, (q31_t)0x9587ef9e, - (q31_t)0x470805df, (q31_t)0x958472e2, (q31_t)0x4702cbaf, (q31_t)0x9580f667, (q31_t)0x46fd9154, (q31_t)0x957d7a2f, (q31_t)0x46f856cd, (q31_t)0x9579fe38, - (q31_t)0x46f31c1a, (q31_t)0x95768283, (q31_t)0x46ede13b, (q31_t)0x9573070f, (q31_t)0x46e8a631, (q31_t)0x956f8bdd, (q31_t)0x46e36afb, (q31_t)0x956c10ed, - (q31_t)0x46de2f99, (q31_t)0x9568963f, (q31_t)0x46d8f40b, (q31_t)0x95651bd2, (q31_t)0x46d3b852, (q31_t)0x9561a1a8, (q31_t)0x46ce7c6d, (q31_t)0x955e27bf, - (q31_t)0x46c9405c, (q31_t)0x955aae17, (q31_t)0x46c40420, (q31_t)0x955734b2, (q31_t)0x46bec7b8, (q31_t)0x9553bb8e, (q31_t)0x46b98b24, (q31_t)0x955042ac, - (q31_t)0x46b44e65, (q31_t)0x954cca0c, (q31_t)0x46af117a, (q31_t)0x954951ae, (q31_t)0x46a9d464, (q31_t)0x9545d992, (q31_t)0x46a49722, (q31_t)0x954261b7, - (q31_t)0x469f59b4, (q31_t)0x953eea1e, (q31_t)0x469a1c1b, (q31_t)0x953b72c7, (q31_t)0x4694de56, (q31_t)0x9537fbb2, (q31_t)0x468fa066, (q31_t)0x953484df, - (q31_t)0x468a624a, (q31_t)0x95310e4e, (q31_t)0x46852403, (q31_t)0x952d97fe, (q31_t)0x467fe590, (q31_t)0x952a21f1, (q31_t)0x467aa6f2, (q31_t)0x9526ac25, - (q31_t)0x46756828, (q31_t)0x9523369c, (q31_t)0x46702933, (q31_t)0x951fc154, (q31_t)0x466aea12, (q31_t)0x951c4c4e, (q31_t)0x4665aac6, (q31_t)0x9518d78a, - (q31_t)0x46606b4e, (q31_t)0x95156308, (q31_t)0x465b2bab, (q31_t)0x9511eec8, (q31_t)0x4655ebdd, (q31_t)0x950e7aca, (q31_t)0x4650abe3, (q31_t)0x950b070e, - (q31_t)0x464b6bbe, (q31_t)0x95079394, (q31_t)0x46462b6d, (q31_t)0x9504205c, (q31_t)0x4640eaf2, (q31_t)0x9500ad66, (q31_t)0x463baa4a, (q31_t)0x94fd3ab1, - (q31_t)0x46366978, (q31_t)0x94f9c83f, (q31_t)0x4631287a, (q31_t)0x94f6560f, (q31_t)0x462be751, (q31_t)0x94f2e421, (q31_t)0x4626a5fd, (q31_t)0x94ef7275, - (q31_t)0x4621647d, (q31_t)0x94ec010b, (q31_t)0x461c22d2, (q31_t)0x94e88fe3, (q31_t)0x4616e0fc, (q31_t)0x94e51efd, (q31_t)0x46119efa, (q31_t)0x94e1ae59, - (q31_t)0x460c5cce, (q31_t)0x94de3df8, (q31_t)0x46071a76, (q31_t)0x94dacdd8, (q31_t)0x4601d7f3, (q31_t)0x94d75dfa, (q31_t)0x45fc9545, (q31_t)0x94d3ee5f, - (q31_t)0x45f7526b, (q31_t)0x94d07f05, (q31_t)0x45f20f67, (q31_t)0x94cd0fee, (q31_t)0x45eccc37, (q31_t)0x94c9a119, (q31_t)0x45e788dc, (q31_t)0x94c63286, - (q31_t)0x45e24556, (q31_t)0x94c2c435, (q31_t)0x45dd01a5, (q31_t)0x94bf5627, (q31_t)0x45d7bdc9, (q31_t)0x94bbe85a, (q31_t)0x45d279c2, (q31_t)0x94b87ad0, - (q31_t)0x45cd358f, (q31_t)0x94b50d87, (q31_t)0x45c7f132, (q31_t)0x94b1a081, (q31_t)0x45c2acaa, (q31_t)0x94ae33be, (q31_t)0x45bd67f6, (q31_t)0x94aac73c, - (q31_t)0x45b82318, (q31_t)0x94a75afd, (q31_t)0x45b2de0e, (q31_t)0x94a3eeff, (q31_t)0x45ad98da, (q31_t)0x94a08344, (q31_t)0x45a8537a, (q31_t)0x949d17cc, - (q31_t)0x45a30df0, (q31_t)0x9499ac95, (q31_t)0x459dc83b, (q31_t)0x949641a1, (q31_t)0x4598825a, (q31_t)0x9492d6ef, (q31_t)0x45933c4f, (q31_t)0x948f6c7f, - (q31_t)0x458df619, (q31_t)0x948c0252, (q31_t)0x4588afb8, (q31_t)0x94889867, (q31_t)0x4583692c, (q31_t)0x94852ebe, (q31_t)0x457e2275, (q31_t)0x9481c557, - (q31_t)0x4578db93, (q31_t)0x947e5c33, (q31_t)0x45739487, (q31_t)0x947af351, (q31_t)0x456e4d4f, (q31_t)0x94778ab1, (q31_t)0x456905ed, (q31_t)0x94742254, - (q31_t)0x4563be60, (q31_t)0x9470ba39, (q31_t)0x455e76a8, (q31_t)0x946d5260, (q31_t)0x45592ec6, (q31_t)0x9469eaca, (q31_t)0x4553e6b8, (q31_t)0x94668376, - (q31_t)0x454e9e80, (q31_t)0x94631c65, (q31_t)0x4549561d, (q31_t)0x945fb596, (q31_t)0x45440d90, (q31_t)0x945c4f09, (q31_t)0x453ec4d7, (q31_t)0x9458e8bf, - (q31_t)0x45397bf4, (q31_t)0x945582b7, (q31_t)0x453432e6, (q31_t)0x94521cf1, (q31_t)0x452ee9ae, (q31_t)0x944eb76e, (q31_t)0x4529a04b, (q31_t)0x944b522d, - (q31_t)0x452456bd, (q31_t)0x9447ed2f, (q31_t)0x451f0d04, (q31_t)0x94448873, (q31_t)0x4519c321, (q31_t)0x944123fa, (q31_t)0x45147913, (q31_t)0x943dbfc3, - (q31_t)0x450f2edb, (q31_t)0x943a5bcf, (q31_t)0x4509e478, (q31_t)0x9436f81d, (q31_t)0x450499eb, (q31_t)0x943394ad, (q31_t)0x44ff4f32, (q31_t)0x94303180, - (q31_t)0x44fa0450, (q31_t)0x942cce96, (q31_t)0x44f4b943, (q31_t)0x94296bee, (q31_t)0x44ef6e0b, (q31_t)0x94260989, (q31_t)0x44ea22a9, (q31_t)0x9422a766, - (q31_t)0x44e4d71c, (q31_t)0x941f4585, (q31_t)0x44df8b64, (q31_t)0x941be3e8, (q31_t)0x44da3f83, (q31_t)0x9418828c, (q31_t)0x44d4f376, (q31_t)0x94152174, - (q31_t)0x44cfa740, (q31_t)0x9411c09e, (q31_t)0x44ca5adf, (q31_t)0x940e600a, (q31_t)0x44c50e53, (q31_t)0x940affb9, (q31_t)0x44bfc19d, (q31_t)0x94079fab, - (q31_t)0x44ba74bd, (q31_t)0x94043fdf, (q31_t)0x44b527b2, (q31_t)0x9400e056, (q31_t)0x44afda7d, (q31_t)0x93fd810f, (q31_t)0x44aa8d1d, (q31_t)0x93fa220b, - (q31_t)0x44a53f93, (q31_t)0x93f6c34a, (q31_t)0x449ff1df, (q31_t)0x93f364cb, (q31_t)0x449aa400, (q31_t)0x93f0068f, (q31_t)0x449555f7, (q31_t)0x93eca896, - (q31_t)0x449007c4, (q31_t)0x93e94adf, (q31_t)0x448ab967, (q31_t)0x93e5ed6b, (q31_t)0x44856adf, (q31_t)0x93e2903a, (q31_t)0x44801c2d, (q31_t)0x93df334c, - (q31_t)0x447acd50, (q31_t)0x93dbd6a0, (q31_t)0x44757e4a, (q31_t)0x93d87a36, (q31_t)0x44702f19, (q31_t)0x93d51e10, (q31_t)0x446adfbe, (q31_t)0x93d1c22c, - (q31_t)0x44659039, (q31_t)0x93ce668b, (q31_t)0x44604089, (q31_t)0x93cb0b2d, (q31_t)0x445af0b0, (q31_t)0x93c7b011, (q31_t)0x4455a0ac, (q31_t)0x93c45539, - (q31_t)0x4450507e, (q31_t)0x93c0faa3, (q31_t)0x444b0026, (q31_t)0x93bda04f, (q31_t)0x4445afa4, (q31_t)0x93ba463f, (q31_t)0x44405ef8, (q31_t)0x93b6ec71, - (q31_t)0x443b0e21, (q31_t)0x93b392e6, (q31_t)0x4435bd21, (q31_t)0x93b0399e, (q31_t)0x44306bf6, (q31_t)0x93ace099, (q31_t)0x442b1aa2, (q31_t)0x93a987d6, - (q31_t)0x4425c923, (q31_t)0x93a62f57, (q31_t)0x4420777b, (q31_t)0x93a2d71a, (q31_t)0x441b25a8, (q31_t)0x939f7f20, (q31_t)0x4415d3ab, (q31_t)0x939c2769, - (q31_t)0x44108184, (q31_t)0x9398cff5, (q31_t)0x440b2f34, (q31_t)0x939578c3, (q31_t)0x4405dcb9, (q31_t)0x939221d5, (q31_t)0x44008a14, (q31_t)0x938ecb29, - (q31_t)0x43fb3746, (q31_t)0x938b74c1, (q31_t)0x43f5e44d, (q31_t)0x93881e9b, (q31_t)0x43f0912b, (q31_t)0x9384c8b8, (q31_t)0x43eb3ddf, (q31_t)0x93817318, - (q31_t)0x43e5ea68, (q31_t)0x937e1dbb, (q31_t)0x43e096c8, (q31_t)0x937ac8a1, (q31_t)0x43db42fe, (q31_t)0x937773ca, (q31_t)0x43d5ef0a, (q31_t)0x93741f35, - (q31_t)0x43d09aed, (q31_t)0x9370cae4, (q31_t)0x43cb46a5, (q31_t)0x936d76d6, (q31_t)0x43c5f234, (q31_t)0x936a230a, (q31_t)0x43c09d99, (q31_t)0x9366cf82, - (q31_t)0x43bb48d4, (q31_t)0x93637c3d, (q31_t)0x43b5f3e5, (q31_t)0x9360293a, (q31_t)0x43b09ecc, (q31_t)0x935cd67b, (q31_t)0x43ab498a, (q31_t)0x935983ff, - (q31_t)0x43a5f41e, (q31_t)0x935631c5, (q31_t)0x43a09e89, (q31_t)0x9352dfcf, (q31_t)0x439b48c9, (q31_t)0x934f8e1c, (q31_t)0x4395f2e0, (q31_t)0x934c3cab, - (q31_t)0x43909ccd, (q31_t)0x9348eb7e, (q31_t)0x438b4691, (q31_t)0x93459a94, (q31_t)0x4385f02a, (q31_t)0x934249ed, (q31_t)0x4380999b, (q31_t)0x933ef989, - (q31_t)0x437b42e1, (q31_t)0x933ba968, (q31_t)0x4375ebfe, (q31_t)0x9338598a, (q31_t)0x437094f1, (q31_t)0x933509f0, (q31_t)0x436b3dbb, (q31_t)0x9331ba98, - (q31_t)0x4365e65b, (q31_t)0x932e6b84, (q31_t)0x43608ed2, (q31_t)0x932b1cb2, (q31_t)0x435b371f, (q31_t)0x9327ce24, (q31_t)0x4355df42, (q31_t)0x93247fd9, - (q31_t)0x4350873c, (q31_t)0x932131d1, (q31_t)0x434b2f0c, (q31_t)0x931de40c, (q31_t)0x4345d6b3, (q31_t)0x931a968b, (q31_t)0x43407e31, (q31_t)0x9317494c, - (q31_t)0x433b2585, (q31_t)0x9313fc51, (q31_t)0x4335ccaf, (q31_t)0x9310af99, (q31_t)0x433073b0, (q31_t)0x930d6324, (q31_t)0x432b1a87, (q31_t)0x930a16f3, - (q31_t)0x4325c135, (q31_t)0x9306cb04, (q31_t)0x432067ba, (q31_t)0x93037f59, (q31_t)0x431b0e15, (q31_t)0x930033f1, (q31_t)0x4315b447, (q31_t)0x92fce8cc, - (q31_t)0x43105a50, (q31_t)0x92f99deb, (q31_t)0x430b002f, (q31_t)0x92f6534c, (q31_t)0x4305a5e5, (q31_t)0x92f308f1, (q31_t)0x43004b71, (q31_t)0x92efbeda, - (q31_t)0x42faf0d4, (q31_t)0x92ec7505, (q31_t)0x42f5960e, (q31_t)0x92e92b74, (q31_t)0x42f03b1e, (q31_t)0x92e5e226, (q31_t)0x42eae005, (q31_t)0x92e2991c, - (q31_t)0x42e584c3, (q31_t)0x92df5054, (q31_t)0x42e02958, (q31_t)0x92dc07d0, (q31_t)0x42dacdc3, (q31_t)0x92d8bf90, (q31_t)0x42d57205, (q31_t)0x92d57792, - (q31_t)0x42d0161e, (q31_t)0x92d22fd9, (q31_t)0x42caba0e, (q31_t)0x92cee862, (q31_t)0x42c55dd4, (q31_t)0x92cba12f, (q31_t)0x42c00172, (q31_t)0x92c85a3f, - (q31_t)0x42baa4e6, (q31_t)0x92c51392, (q31_t)0x42b54831, (q31_t)0x92c1cd29, (q31_t)0x42afeb53, (q31_t)0x92be8703, (q31_t)0x42aa8e4b, (q31_t)0x92bb4121, - (q31_t)0x42a5311b, (q31_t)0x92b7fb82, (q31_t)0x429fd3c1, (q31_t)0x92b4b626, (q31_t)0x429a763f, (q31_t)0x92b1710e, (q31_t)0x42951893, (q31_t)0x92ae2c3a, - (q31_t)0x428fbabe, (q31_t)0x92aae7a8, (q31_t)0x428a5cc0, (q31_t)0x92a7a35a, (q31_t)0x4284fe99, (q31_t)0x92a45f50, (q31_t)0x427fa049, (q31_t)0x92a11b89, - (q31_t)0x427a41d0, (q31_t)0x929dd806, (q31_t)0x4274e32e, (q31_t)0x929a94c6, (q31_t)0x426f8463, (q31_t)0x929751c9, (q31_t)0x426a256f, (q31_t)0x92940f10, - (q31_t)0x4264c653, (q31_t)0x9290cc9b, (q31_t)0x425f670d, (q31_t)0x928d8a69, (q31_t)0x425a079e, (q31_t)0x928a487a, (q31_t)0x4254a806, (q31_t)0x928706cf, - (q31_t)0x424f4845, (q31_t)0x9283c568, (q31_t)0x4249e85c, (q31_t)0x92808444, (q31_t)0x42448849, (q31_t)0x927d4363, (q31_t)0x423f280e, (q31_t)0x927a02c7, - (q31_t)0x4239c7aa, (q31_t)0x9276c26d, (q31_t)0x4234671d, (q31_t)0x92738258, (q31_t)0x422f0667, (q31_t)0x92704286, (q31_t)0x4229a588, (q31_t)0x926d02f7, - (q31_t)0x42244481, (q31_t)0x9269c3ac, (q31_t)0x421ee350, (q31_t)0x926684a5, (q31_t)0x421981f7, (q31_t)0x926345e1, (q31_t)0x42142075, (q31_t)0x92600761, - (q31_t)0x420ebecb, (q31_t)0x925cc924, (q31_t)0x42095cf7, (q31_t)0x92598b2b, (q31_t)0x4203fafb, (q31_t)0x92564d76, (q31_t)0x41fe98d6, (q31_t)0x92531005, - (q31_t)0x41f93689, (q31_t)0x924fd2d7, (q31_t)0x41f3d413, (q31_t)0x924c95ec, (q31_t)0x41ee7174, (q31_t)0x92495946, (q31_t)0x41e90eac, (q31_t)0x92461ce3, - (q31_t)0x41e3abbc, (q31_t)0x9242e0c4, (q31_t)0x41de48a3, (q31_t)0x923fa4e8, (q31_t)0x41d8e561, (q31_t)0x923c6950, (q31_t)0x41d381f7, (q31_t)0x92392dfc, - (q31_t)0x41ce1e65, (q31_t)0x9235f2ec, (q31_t)0x41c8baa9, (q31_t)0x9232b81f, (q31_t)0x41c356c5, (q31_t)0x922f7d96, (q31_t)0x41bdf2b9, (q31_t)0x922c4351, - (q31_t)0x41b88e84, (q31_t)0x9229094f, (q31_t)0x41b32a26, (q31_t)0x9225cf91, (q31_t)0x41adc5a0, (q31_t)0x92229617, (q31_t)0x41a860f1, (q31_t)0x921f5ce1, - (q31_t)0x41a2fc1a, (q31_t)0x921c23ef, (q31_t)0x419d971b, (q31_t)0x9218eb40, (q31_t)0x419831f3, (q31_t)0x9215b2d5, (q31_t)0x4192cca2, (q31_t)0x92127aae, - (q31_t)0x418d6729, (q31_t)0x920f42cb, (q31_t)0x41880188, (q31_t)0x920c0b2c, (q31_t)0x41829bbe, (q31_t)0x9208d3d0, (q31_t)0x417d35cb, (q31_t)0x92059cb8, - (q31_t)0x4177cfb1, (q31_t)0x920265e4, (q31_t)0x4172696e, (q31_t)0x91ff2f54, (q31_t)0x416d0302, (q31_t)0x91fbf908, (q31_t)0x41679c6f, (q31_t)0x91f8c300, - (q31_t)0x416235b2, (q31_t)0x91f58d3b, (q31_t)0x415ccece, (q31_t)0x91f257bb, (q31_t)0x415767c1, (q31_t)0x91ef227e, (q31_t)0x4152008c, (q31_t)0x91ebed85, - (q31_t)0x414c992f, (q31_t)0x91e8b8d0, (q31_t)0x414731a9, (q31_t)0x91e5845f, (q31_t)0x4141c9fb, (q31_t)0x91e25032, (q31_t)0x413c6225, (q31_t)0x91df1c49, - (q31_t)0x4136fa27, (q31_t)0x91dbe8a4, (q31_t)0x41319200, (q31_t)0x91d8b542, (q31_t)0x412c29b1, (q31_t)0x91d58225, (q31_t)0x4126c13a, (q31_t)0x91d24f4c, - (q31_t)0x4121589b, (q31_t)0x91cf1cb6, (q31_t)0x411befd3, (q31_t)0x91cbea65, (q31_t)0x411686e4, (q31_t)0x91c8b857, (q31_t)0x41111dcc, (q31_t)0x91c5868e, - (q31_t)0x410bb48c, (q31_t)0x91c25508, (q31_t)0x41064b24, (q31_t)0x91bf23c7, (q31_t)0x4100e194, (q31_t)0x91bbf2c9, (q31_t)0x40fb77dc, (q31_t)0x91b8c210, - (q31_t)0x40f60dfb, (q31_t)0x91b5919a, (q31_t)0x40f0a3f3, (q31_t)0x91b26169, (q31_t)0x40eb39c3, (q31_t)0x91af317c, (q31_t)0x40e5cf6a, (q31_t)0x91ac01d2, - (q31_t)0x40e064ea, (q31_t)0x91a8d26d, (q31_t)0x40dafa41, (q31_t)0x91a5a34c, (q31_t)0x40d58f71, (q31_t)0x91a2746f, (q31_t)0x40d02478, (q31_t)0x919f45d6, - (q31_t)0x40cab958, (q31_t)0x919c1781, (q31_t)0x40c54e0f, (q31_t)0x9198e970, (q31_t)0x40bfe29f, (q31_t)0x9195bba3, (q31_t)0x40ba7706, (q31_t)0x91928e1a, - (q31_t)0x40b50b46, (q31_t)0x918f60d6, (q31_t)0x40af9f5e, (q31_t)0x918c33d5, (q31_t)0x40aa334e, (q31_t)0x91890719, (q31_t)0x40a4c716, (q31_t)0x9185daa1, - (q31_t)0x409f5ab6, (q31_t)0x9182ae6d, (q31_t)0x4099ee2e, (q31_t)0x917f827d, (q31_t)0x4094817f, (q31_t)0x917c56d1, (q31_t)0x408f14a7, (q31_t)0x91792b6a, - (q31_t)0x4089a7a8, (q31_t)0x91760047, (q31_t)0x40843a81, (q31_t)0x9172d567, (q31_t)0x407ecd32, (q31_t)0x916faacc, (q31_t)0x40795fbc, (q31_t)0x916c8076, - (q31_t)0x4073f21d, (q31_t)0x91695663, (q31_t)0x406e8457, (q31_t)0x91662c95, (q31_t)0x40691669, (q31_t)0x9163030b, (q31_t)0x4063a854, (q31_t)0x915fd9c5, - (q31_t)0x405e3a16, (q31_t)0x915cb0c3, (q31_t)0x4058cbb1, (q31_t)0x91598806, (q31_t)0x40535d24, (q31_t)0x91565f8d, (q31_t)0x404dee70, (q31_t)0x91533758, - (q31_t)0x40487f94, (q31_t)0x91500f67, (q31_t)0x40431090, (q31_t)0x914ce7bb, (q31_t)0x403da165, (q31_t)0x9149c053, (q31_t)0x40383212, (q31_t)0x9146992f, - (q31_t)0x4032c297, (q31_t)0x91437250, (q31_t)0x402d52f5, (q31_t)0x91404bb5, (q31_t)0x4027e32b, (q31_t)0x913d255e, (q31_t)0x4022733a, (q31_t)0x9139ff4b, - (q31_t)0x401d0321, (q31_t)0x9136d97d, (q31_t)0x401792e0, (q31_t)0x9133b3f3, (q31_t)0x40122278, (q31_t)0x91308eae, (q31_t)0x400cb1e9, (q31_t)0x912d69ad, - (q31_t)0x40074132, (q31_t)0x912a44f0, (q31_t)0x4001d053, (q31_t)0x91272078, (q31_t)0x3ffc5f4d, (q31_t)0x9123fc44, (q31_t)0x3ff6ee1f, (q31_t)0x9120d854, - (q31_t)0x3ff17cca, (q31_t)0x911db4a9, (q31_t)0x3fec0b4e, (q31_t)0x911a9142, (q31_t)0x3fe699aa, (q31_t)0x91176e1f, (q31_t)0x3fe127df, (q31_t)0x91144b41, - (q31_t)0x3fdbb5ec, (q31_t)0x911128a8, (q31_t)0x3fd643d2, (q31_t)0x910e0653, (q31_t)0x3fd0d191, (q31_t)0x910ae442, (q31_t)0x3fcb5f28, (q31_t)0x9107c276, - (q31_t)0x3fc5ec98, (q31_t)0x9104a0ee, (q31_t)0x3fc079e0, (q31_t)0x91017faa, (q31_t)0x3fbb0702, (q31_t)0x90fe5eab, (q31_t)0x3fb593fb, (q31_t)0x90fb3df1, - (q31_t)0x3fb020ce, (q31_t)0x90f81d7b, (q31_t)0x3faaad79, (q31_t)0x90f4fd4a, (q31_t)0x3fa539fd, (q31_t)0x90f1dd5d, (q31_t)0x3f9fc65a, (q31_t)0x90eebdb4, - (q31_t)0x3f9a5290, (q31_t)0x90eb9e50, (q31_t)0x3f94de9e, (q31_t)0x90e87f31, (q31_t)0x3f8f6a85, (q31_t)0x90e56056, (q31_t)0x3f89f645, (q31_t)0x90e241bf, - (q31_t)0x3f8481dd, (q31_t)0x90df236e, (q31_t)0x3f7f0d4f, (q31_t)0x90dc0560, (q31_t)0x3f799899, (q31_t)0x90d8e798, (q31_t)0x3f7423bc, (q31_t)0x90d5ca13, - (q31_t)0x3f6eaeb8, (q31_t)0x90d2acd4, (q31_t)0x3f69398d, (q31_t)0x90cf8fd9, (q31_t)0x3f63c43b, (q31_t)0x90cc7322, (q31_t)0x3f5e4ec2, (q31_t)0x90c956b1, - (q31_t)0x3f58d921, (q31_t)0x90c63a83, (q31_t)0x3f53635a, (q31_t)0x90c31e9b, (q31_t)0x3f4ded6b, (q31_t)0x90c002f7, (q31_t)0x3f487755, (q31_t)0x90bce797, - (q31_t)0x3f430119, (q31_t)0x90b9cc7d, (q31_t)0x3f3d8ab5, (q31_t)0x90b6b1a6, (q31_t)0x3f38142a, (q31_t)0x90b39715, (q31_t)0x3f329d79, (q31_t)0x90b07cc8, - (q31_t)0x3f2d26a0, (q31_t)0x90ad62c0, (q31_t)0x3f27afa1, (q31_t)0x90aa48fd, (q31_t)0x3f22387a, (q31_t)0x90a72f7e, (q31_t)0x3f1cc12c, (q31_t)0x90a41644, - (q31_t)0x3f1749b8, (q31_t)0x90a0fd4e, (q31_t)0x3f11d21d, (q31_t)0x909de49e, (q31_t)0x3f0c5a5a, (q31_t)0x909acc32, (q31_t)0x3f06e271, (q31_t)0x9097b40a, - (q31_t)0x3f016a61, (q31_t)0x90949c28, (q31_t)0x3efbf22a, (q31_t)0x9091848a, (q31_t)0x3ef679cc, (q31_t)0x908e6d31, (q31_t)0x3ef10148, (q31_t)0x908b561c, - (q31_t)0x3eeb889c, (q31_t)0x90883f4d, (q31_t)0x3ee60fca, (q31_t)0x908528c2, (q31_t)0x3ee096d1, (q31_t)0x9082127c, (q31_t)0x3edb1db1, (q31_t)0x907efc7a, - (q31_t)0x3ed5a46b, (q31_t)0x907be6be, (q31_t)0x3ed02afd, (q31_t)0x9078d146, (q31_t)0x3ecab169, (q31_t)0x9075bc13, (q31_t)0x3ec537ae, (q31_t)0x9072a725, - (q31_t)0x3ebfbdcd, (q31_t)0x906f927c, (q31_t)0x3eba43c4, (q31_t)0x906c7e17, (q31_t)0x3eb4c995, (q31_t)0x906969f8, (q31_t)0x3eaf4f40, (q31_t)0x9066561d, - (q31_t)0x3ea9d4c3, (q31_t)0x90634287, (q31_t)0x3ea45a21, (q31_t)0x90602f35, (q31_t)0x3e9edf57, (q31_t)0x905d1c29, (q31_t)0x3e996467, (q31_t)0x905a0962, - (q31_t)0x3e93e950, (q31_t)0x9056f6df, (q31_t)0x3e8e6e12, (q31_t)0x9053e4a1, (q31_t)0x3e88f2ae, (q31_t)0x9050d2a9, (q31_t)0x3e837724, (q31_t)0x904dc0f5, - (q31_t)0x3e7dfb73, (q31_t)0x904aaf86, (q31_t)0x3e787f9b, (q31_t)0x90479e5c, (q31_t)0x3e73039d, (q31_t)0x90448d76, (q31_t)0x3e6d8778, (q31_t)0x90417cd6, - (q31_t)0x3e680b2c, (q31_t)0x903e6c7b, (q31_t)0x3e628ebb, (q31_t)0x903b5c64, (q31_t)0x3e5d1222, (q31_t)0x90384c93, (q31_t)0x3e579564, (q31_t)0x90353d06, - (q31_t)0x3e52187f, (q31_t)0x90322dbf, (q31_t)0x3e4c9b73, (q31_t)0x902f1ebc, (q31_t)0x3e471e41, (q31_t)0x902c0fff, (q31_t)0x3e41a0e8, (q31_t)0x90290186, - (q31_t)0x3e3c2369, (q31_t)0x9025f352, (q31_t)0x3e36a5c4, (q31_t)0x9022e564, (q31_t)0x3e3127f9, (q31_t)0x901fd7ba, (q31_t)0x3e2baa07, (q31_t)0x901cca55, - (q31_t)0x3e262bee, (q31_t)0x9019bd36, (q31_t)0x3e20adaf, (q31_t)0x9016b05b, (q31_t)0x3e1b2f4a, (q31_t)0x9013a3c5, (q31_t)0x3e15b0bf, (q31_t)0x90109775, - (q31_t)0x3e10320d, (q31_t)0x900d8b69, (q31_t)0x3e0ab336, (q31_t)0x900a7fa3, (q31_t)0x3e053437, (q31_t)0x90077422, (q31_t)0x3dffb513, (q31_t)0x900468e5, - (q31_t)0x3dfa35c8, (q31_t)0x90015dee, (q31_t)0x3df4b657, (q31_t)0x8ffe533c, (q31_t)0x3def36c0, (q31_t)0x8ffb48cf, (q31_t)0x3de9b703, (q31_t)0x8ff83ea7, - (q31_t)0x3de4371f, (q31_t)0x8ff534c4, (q31_t)0x3ddeb716, (q31_t)0x8ff22b26, (q31_t)0x3dd936e6, (q31_t)0x8fef21ce, (q31_t)0x3dd3b690, (q31_t)0x8fec18ba, - (q31_t)0x3dce3614, (q31_t)0x8fe90fec, (q31_t)0x3dc8b571, (q31_t)0x8fe60763, (q31_t)0x3dc334a9, (q31_t)0x8fe2ff1f, (q31_t)0x3dbdb3ba, (q31_t)0x8fdff720, - (q31_t)0x3db832a6, (q31_t)0x8fdcef66, (q31_t)0x3db2b16b, (q31_t)0x8fd9e7f2, (q31_t)0x3dad300b, (q31_t)0x8fd6e0c2, (q31_t)0x3da7ae84, (q31_t)0x8fd3d9d8, - (q31_t)0x3da22cd7, (q31_t)0x8fd0d333, (q31_t)0x3d9cab04, (q31_t)0x8fcdccd3, (q31_t)0x3d97290b, (q31_t)0x8fcac6b9, (q31_t)0x3d91a6ed, (q31_t)0x8fc7c0e3, - (q31_t)0x3d8c24a8, (q31_t)0x8fc4bb53, (q31_t)0x3d86a23d, (q31_t)0x8fc1b608, (q31_t)0x3d811fac, (q31_t)0x8fbeb103, (q31_t)0x3d7b9cf6, (q31_t)0x8fbbac42, - (q31_t)0x3d761a19, (q31_t)0x8fb8a7c7, (q31_t)0x3d709717, (q31_t)0x8fb5a391, (q31_t)0x3d6b13ee, (q31_t)0x8fb29fa0, (q31_t)0x3d6590a0, (q31_t)0x8faf9bf5, - (q31_t)0x3d600d2c, (q31_t)0x8fac988f, (q31_t)0x3d5a8992, (q31_t)0x8fa9956e, (q31_t)0x3d5505d2, (q31_t)0x8fa69293, (q31_t)0x3d4f81ec, (q31_t)0x8fa38ffc, - (q31_t)0x3d49fde1, (q31_t)0x8fa08dab, (q31_t)0x3d4479b0, (q31_t)0x8f9d8ba0, (q31_t)0x3d3ef559, (q31_t)0x8f9a89da, (q31_t)0x3d3970dc, (q31_t)0x8f978859, - (q31_t)0x3d33ec39, (q31_t)0x8f94871d, (q31_t)0x3d2e6771, (q31_t)0x8f918627, (q31_t)0x3d28e282, (q31_t)0x8f8e8576, (q31_t)0x3d235d6f, (q31_t)0x8f8b850a, - (q31_t)0x3d1dd835, (q31_t)0x8f8884e4, (q31_t)0x3d1852d6, (q31_t)0x8f858503, (q31_t)0x3d12cd51, (q31_t)0x8f828568, (q31_t)0x3d0d47a6, (q31_t)0x8f7f8612, - (q31_t)0x3d07c1d6, (q31_t)0x8f7c8701, (q31_t)0x3d023be0, (q31_t)0x8f798836, (q31_t)0x3cfcb5c4, (q31_t)0x8f7689b0, (q31_t)0x3cf72f83, (q31_t)0x8f738b70, - (q31_t)0x3cf1a91c, (q31_t)0x8f708d75, (q31_t)0x3cec2290, (q31_t)0x8f6d8fbf, (q31_t)0x3ce69bde, (q31_t)0x8f6a924f, (q31_t)0x3ce11507, (q31_t)0x8f679525, - (q31_t)0x3cdb8e09, (q31_t)0x8f649840, (q31_t)0x3cd606e7, (q31_t)0x8f619ba0, (q31_t)0x3cd07f9f, (q31_t)0x8f5e9f46, (q31_t)0x3ccaf831, (q31_t)0x8f5ba331, - (q31_t)0x3cc5709e, (q31_t)0x8f58a761, (q31_t)0x3cbfe8e5, (q31_t)0x8f55abd8, (q31_t)0x3cba6107, (q31_t)0x8f52b093, (q31_t)0x3cb4d904, (q31_t)0x8f4fb595, - (q31_t)0x3caf50da, (q31_t)0x8f4cbadb, (q31_t)0x3ca9c88c, (q31_t)0x8f49c067, (q31_t)0x3ca44018, (q31_t)0x8f46c639, (q31_t)0x3c9eb77f, (q31_t)0x8f43cc50, - (q31_t)0x3c992ec0, (q31_t)0x8f40d2ad, (q31_t)0x3c93a5dc, (q31_t)0x8f3dd950, (q31_t)0x3c8e1cd3, (q31_t)0x8f3ae038, (q31_t)0x3c8893a4, (q31_t)0x8f37e765, - (q31_t)0x3c830a50, (q31_t)0x8f34eed8, (q31_t)0x3c7d80d6, (q31_t)0x8f31f691, (q31_t)0x3c77f737, (q31_t)0x8f2efe8f, (q31_t)0x3c726d73, (q31_t)0x8f2c06d3, - (q31_t)0x3c6ce38a, (q31_t)0x8f290f5c, (q31_t)0x3c67597b, (q31_t)0x8f26182b, (q31_t)0x3c61cf48, (q31_t)0x8f232140, (q31_t)0x3c5c44ee, (q31_t)0x8f202a9a, - (q31_t)0x3c56ba70, (q31_t)0x8f1d343a, (q31_t)0x3c512fcc, (q31_t)0x8f1a3e1f, (q31_t)0x3c4ba504, (q31_t)0x8f17484b, (q31_t)0x3c461a16, (q31_t)0x8f1452bb, - (q31_t)0x3c408f03, (q31_t)0x8f115d72, (q31_t)0x3c3b03ca, (q31_t)0x8f0e686e, (q31_t)0x3c35786d, (q31_t)0x8f0b73b0, (q31_t)0x3c2fecea, (q31_t)0x8f087f37, - (q31_t)0x3c2a6142, (q31_t)0x8f058b04, (q31_t)0x3c24d575, (q31_t)0x8f029717, (q31_t)0x3c1f4983, (q31_t)0x8effa370, (q31_t)0x3c19bd6c, (q31_t)0x8efcb00e, - (q31_t)0x3c143130, (q31_t)0x8ef9bcf2, (q31_t)0x3c0ea4cf, (q31_t)0x8ef6ca1c, (q31_t)0x3c091849, (q31_t)0x8ef3d78b, (q31_t)0x3c038b9e, (q31_t)0x8ef0e540, - (q31_t)0x3bfdfecd, (q31_t)0x8eedf33b, (q31_t)0x3bf871d8, (q31_t)0x8eeb017c, (q31_t)0x3bf2e4be, (q31_t)0x8ee81002, (q31_t)0x3bed577e, (q31_t)0x8ee51ece, - (q31_t)0x3be7ca1a, (q31_t)0x8ee22de0, (q31_t)0x3be23c91, (q31_t)0x8edf3d38, (q31_t)0x3bdcaee3, (q31_t)0x8edc4cd5, (q31_t)0x3bd72110, (q31_t)0x8ed95cb8, - (q31_t)0x3bd19318, (q31_t)0x8ed66ce1, (q31_t)0x3bcc04fb, (q31_t)0x8ed37d50, (q31_t)0x3bc676b9, (q31_t)0x8ed08e05, (q31_t)0x3bc0e853, (q31_t)0x8ecd9eff, - (q31_t)0x3bbb59c7, (q31_t)0x8ecab040, (q31_t)0x3bb5cb17, (q31_t)0x8ec7c1c6, (q31_t)0x3bb03c42, (q31_t)0x8ec4d392, (q31_t)0x3baaad48, (q31_t)0x8ec1e5a4, - (q31_t)0x3ba51e29, (q31_t)0x8ebef7fb, (q31_t)0x3b9f8ee5, (q31_t)0x8ebc0a99, (q31_t)0x3b99ff7d, (q31_t)0x8eb91d7c, (q31_t)0x3b946ff0, (q31_t)0x8eb630a6, - (q31_t)0x3b8ee03e, (q31_t)0x8eb34415, (q31_t)0x3b895068, (q31_t)0x8eb057ca, (q31_t)0x3b83c06c, (q31_t)0x8ead6bc5, (q31_t)0x3b7e304c, (q31_t)0x8eaa8006, - (q31_t)0x3b78a007, (q31_t)0x8ea7948c, (q31_t)0x3b730f9e, (q31_t)0x8ea4a959, (q31_t)0x3b6d7f10, (q31_t)0x8ea1be6c, (q31_t)0x3b67ee5d, (q31_t)0x8e9ed3c4, - (q31_t)0x3b625d86, (q31_t)0x8e9be963, (q31_t)0x3b5ccc8a, (q31_t)0x8e98ff47, (q31_t)0x3b573b69, (q31_t)0x8e961571, (q31_t)0x3b51aa24, (q31_t)0x8e932be2, - (q31_t)0x3b4c18ba, (q31_t)0x8e904298, (q31_t)0x3b46872c, (q31_t)0x8e8d5994, (q31_t)0x3b40f579, (q31_t)0x8e8a70d7, (q31_t)0x3b3b63a1, (q31_t)0x8e87885f, - (q31_t)0x3b35d1a5, (q31_t)0x8e84a02d, (q31_t)0x3b303f84, (q31_t)0x8e81b841, (q31_t)0x3b2aad3f, (q31_t)0x8e7ed09b, (q31_t)0x3b251ad6, (q31_t)0x8e7be93c, - (q31_t)0x3b1f8848, (q31_t)0x8e790222, (q31_t)0x3b19f595, (q31_t)0x8e761b4e, (q31_t)0x3b1462be, (q31_t)0x8e7334c1, (q31_t)0x3b0ecfc3, (q31_t)0x8e704e79, - (q31_t)0x3b093ca3, (q31_t)0x8e6d6877, (q31_t)0x3b03a95e, (q31_t)0x8e6a82bc, (q31_t)0x3afe15f6, (q31_t)0x8e679d47, (q31_t)0x3af88269, (q31_t)0x8e64b817, - (q31_t)0x3af2eeb7, (q31_t)0x8e61d32e, (q31_t)0x3aed5ae1, (q31_t)0x8e5eee8b, (q31_t)0x3ae7c6e7, (q31_t)0x8e5c0a2e, (q31_t)0x3ae232c9, (q31_t)0x8e592617, - (q31_t)0x3adc9e86, (q31_t)0x8e564246, (q31_t)0x3ad70a1f, (q31_t)0x8e535ebb, (q31_t)0x3ad17593, (q31_t)0x8e507b76, (q31_t)0x3acbe0e3, (q31_t)0x8e4d9878, - (q31_t)0x3ac64c0f, (q31_t)0x8e4ab5bf, (q31_t)0x3ac0b717, (q31_t)0x8e47d34d, (q31_t)0x3abb21fb, (q31_t)0x8e44f121, (q31_t)0x3ab58cba, (q31_t)0x8e420f3b, - (q31_t)0x3aaff755, (q31_t)0x8e3f2d9b, (q31_t)0x3aaa61cc, (q31_t)0x8e3c4c41, (q31_t)0x3aa4cc1e, (q31_t)0x8e396b2e, (q31_t)0x3a9f364d, (q31_t)0x8e368a61, - (q31_t)0x3a99a057, (q31_t)0x8e33a9da, (q31_t)0x3a940a3e, (q31_t)0x8e30c999, (q31_t)0x3a8e7400, (q31_t)0x8e2de99e, (q31_t)0x3a88dd9d, (q31_t)0x8e2b09e9, - (q31_t)0x3a834717, (q31_t)0x8e282a7b, (q31_t)0x3a7db06d, (q31_t)0x8e254b53, (q31_t)0x3a78199f, (q31_t)0x8e226c71, (q31_t)0x3a7282ac, (q31_t)0x8e1f8dd6, - (q31_t)0x3a6ceb96, (q31_t)0x8e1caf80, (q31_t)0x3a67545b, (q31_t)0x8e19d171, (q31_t)0x3a61bcfd, (q31_t)0x8e16f3a9, (q31_t)0x3a5c257a, (q31_t)0x8e141626, - (q31_t)0x3a568dd4, (q31_t)0x8e1138ea, (q31_t)0x3a50f609, (q31_t)0x8e0e5bf4, (q31_t)0x3a4b5e1b, (q31_t)0x8e0b7f44, (q31_t)0x3a45c608, (q31_t)0x8e08a2db, - (q31_t)0x3a402dd2, (q31_t)0x8e05c6b7, (q31_t)0x3a3a9577, (q31_t)0x8e02eadb, (q31_t)0x3a34fcf9, (q31_t)0x8e000f44, (q31_t)0x3a2f6457, (q31_t)0x8dfd33f4, - (q31_t)0x3a29cb91, (q31_t)0x8dfa58ea, (q31_t)0x3a2432a7, (q31_t)0x8df77e27, (q31_t)0x3a1e9999, (q31_t)0x8df4a3a9, (q31_t)0x3a190068, (q31_t)0x8df1c973, - (q31_t)0x3a136712, (q31_t)0x8deeef82, (q31_t)0x3a0dcd99, (q31_t)0x8dec15d8, (q31_t)0x3a0833fc, (q31_t)0x8de93c74, (q31_t)0x3a029a3b, (q31_t)0x8de66357, - (q31_t)0x39fd0056, (q31_t)0x8de38a80, (q31_t)0x39f7664e, (q31_t)0x8de0b1ef, (q31_t)0x39f1cc21, (q31_t)0x8dddd9a5, (q31_t)0x39ec31d1, (q31_t)0x8ddb01a1, - (q31_t)0x39e6975e, (q31_t)0x8dd829e4, (q31_t)0x39e0fcc6, (q31_t)0x8dd5526d, (q31_t)0x39db620b, (q31_t)0x8dd27b3c, (q31_t)0x39d5c72c, (q31_t)0x8dcfa452, - (q31_t)0x39d02c2a, (q31_t)0x8dcccdaf, (q31_t)0x39ca9104, (q31_t)0x8dc9f751, (q31_t)0x39c4f5ba, (q31_t)0x8dc7213b, (q31_t)0x39bf5a4d, (q31_t)0x8dc44b6a, - (q31_t)0x39b9bebc, (q31_t)0x8dc175e0, (q31_t)0x39b42307, (q31_t)0x8dbea09d, (q31_t)0x39ae872f, (q31_t)0x8dbbcba0, (q31_t)0x39a8eb33, (q31_t)0x8db8f6ea, - (q31_t)0x39a34f13, (q31_t)0x8db6227a, (q31_t)0x399db2d0, (q31_t)0x8db34e50, (q31_t)0x3998166a, (q31_t)0x8db07a6d, (q31_t)0x399279e0, (q31_t)0x8dada6d1, - (q31_t)0x398cdd32, (q31_t)0x8daad37b, (q31_t)0x39874061, (q31_t)0x8da8006c, (q31_t)0x3981a36d, (q31_t)0x8da52da3, (q31_t)0x397c0655, (q31_t)0x8da25b21, - (q31_t)0x39766919, (q31_t)0x8d9f88e5, (q31_t)0x3970cbba, (q31_t)0x8d9cb6f0, (q31_t)0x396b2e38, (q31_t)0x8d99e541, (q31_t)0x39659092, (q31_t)0x8d9713d9, - (q31_t)0x395ff2c9, (q31_t)0x8d9442b8, (q31_t)0x395a54dd, (q31_t)0x8d9171dd, (q31_t)0x3954b6cd, (q31_t)0x8d8ea148, (q31_t)0x394f1899, (q31_t)0x8d8bd0fb, - (q31_t)0x39497a43, (q31_t)0x8d8900f3, (q31_t)0x3943dbc9, (q31_t)0x8d863133, (q31_t)0x393e3d2c, (q31_t)0x8d8361b9, (q31_t)0x39389e6b, (q31_t)0x8d809286, - (q31_t)0x3932ff87, (q31_t)0x8d7dc399, (q31_t)0x392d6080, (q31_t)0x8d7af4f3, (q31_t)0x3927c155, (q31_t)0x8d782694, (q31_t)0x39222208, (q31_t)0x8d75587b, - (q31_t)0x391c8297, (q31_t)0x8d728aa9, (q31_t)0x3916e303, (q31_t)0x8d6fbd1d, (q31_t)0x3911434b, (q31_t)0x8d6cefd9, (q31_t)0x390ba371, (q31_t)0x8d6a22db, - (q31_t)0x39060373, (q31_t)0x8d675623, (q31_t)0x39006352, (q31_t)0x8d6489b3, (q31_t)0x38fac30e, (q31_t)0x8d61bd89, (q31_t)0x38f522a6, (q31_t)0x8d5ef1a5, - (q31_t)0x38ef821c, (q31_t)0x8d5c2609, (q31_t)0x38e9e16e, (q31_t)0x8d595ab3, (q31_t)0x38e4409e, (q31_t)0x8d568fa4, (q31_t)0x38de9faa, (q31_t)0x8d53c4db, - (q31_t)0x38d8fe93, (q31_t)0x8d50fa59, (q31_t)0x38d35d59, (q31_t)0x8d4e301f, (q31_t)0x38cdbbfc, (q31_t)0x8d4b662a, (q31_t)0x38c81a7c, (q31_t)0x8d489c7d, - (q31_t)0x38c278d9, (q31_t)0x8d45d316, (q31_t)0x38bcd713, (q31_t)0x8d4309f6, (q31_t)0x38b7352a, (q31_t)0x8d40411d, (q31_t)0x38b1931e, (q31_t)0x8d3d788b, - (q31_t)0x38abf0ef, (q31_t)0x8d3ab03f, (q31_t)0x38a64e9d, (q31_t)0x8d37e83a, (q31_t)0x38a0ac29, (q31_t)0x8d35207d, (q31_t)0x389b0991, (q31_t)0x8d325905, - (q31_t)0x389566d6, (q31_t)0x8d2f91d5, (q31_t)0x388fc3f8, (q31_t)0x8d2ccaec, (q31_t)0x388a20f8, (q31_t)0x8d2a0449, (q31_t)0x38847dd5, (q31_t)0x8d273ded, - (q31_t)0x387eda8e, (q31_t)0x8d2477d8, (q31_t)0x38793725, (q31_t)0x8d21b20a, (q31_t)0x38739399, (q31_t)0x8d1eec83, (q31_t)0x386defeb, (q31_t)0x8d1c2742, - (q31_t)0x38684c19, (q31_t)0x8d196249, (q31_t)0x3862a825, (q31_t)0x8d169d96, (q31_t)0x385d040d, (q31_t)0x8d13d92a, (q31_t)0x38575fd4, (q31_t)0x8d111505, - (q31_t)0x3851bb77, (q31_t)0x8d0e5127, (q31_t)0x384c16f7, (q31_t)0x8d0b8d90, (q31_t)0x38467255, (q31_t)0x8d08ca40, (q31_t)0x3840cd90, (q31_t)0x8d060737, - (q31_t)0x383b28a9, (q31_t)0x8d034474, (q31_t)0x3835839f, (q31_t)0x8d0081f9, (q31_t)0x382fde72, (q31_t)0x8cfdbfc4, (q31_t)0x382a3922, (q31_t)0x8cfafdd7, - (q31_t)0x382493b0, (q31_t)0x8cf83c30, (q31_t)0x381eee1b, (q31_t)0x8cf57ad0, (q31_t)0x38194864, (q31_t)0x8cf2b9b8, (q31_t)0x3813a28a, (q31_t)0x8ceff8e6, - (q31_t)0x380dfc8d, (q31_t)0x8ced385b, (q31_t)0x3808566e, (q31_t)0x8cea7818, (q31_t)0x3802b02c, (q31_t)0x8ce7b81b, (q31_t)0x37fd09c8, (q31_t)0x8ce4f865, - (q31_t)0x37f76341, (q31_t)0x8ce238f6, (q31_t)0x37f1bc97, (q31_t)0x8cdf79ce, (q31_t)0x37ec15cb, (q31_t)0x8cdcbaee, (q31_t)0x37e66edd, (q31_t)0x8cd9fc54, - (q31_t)0x37e0c7cc, (q31_t)0x8cd73e01, (q31_t)0x37db2099, (q31_t)0x8cd47ff6, (q31_t)0x37d57943, (q31_t)0x8cd1c231, (q31_t)0x37cfd1cb, (q31_t)0x8ccf04b3, - (q31_t)0x37ca2a30, (q31_t)0x8ccc477d, (q31_t)0x37c48273, (q31_t)0x8cc98a8e, (q31_t)0x37beda93, (q31_t)0x8cc6cde5, (q31_t)0x37b93292, (q31_t)0x8cc41184, - (q31_t)0x37b38a6d, (q31_t)0x8cc1556a, (q31_t)0x37ade227, (q31_t)0x8cbe9996, (q31_t)0x37a839be, (q31_t)0x8cbbde0a, (q31_t)0x37a29132, (q31_t)0x8cb922c6, - (q31_t)0x379ce885, (q31_t)0x8cb667c8, (q31_t)0x37973fb5, (q31_t)0x8cb3ad11, (q31_t)0x379196c3, (q31_t)0x8cb0f2a1, (q31_t)0x378bedae, (q31_t)0x8cae3879, - (q31_t)0x37864477, (q31_t)0x8cab7e98, (q31_t)0x37809b1e, (q31_t)0x8ca8c4fd, (q31_t)0x377af1a3, (q31_t)0x8ca60baa, (q31_t)0x37754806, (q31_t)0x8ca3529f, - (q31_t)0x376f9e46, (q31_t)0x8ca099da, (q31_t)0x3769f464, (q31_t)0x8c9de15c, (q31_t)0x37644a60, (q31_t)0x8c9b2926, (q31_t)0x375ea03a, (q31_t)0x8c987137, - (q31_t)0x3758f5f2, (q31_t)0x8c95b98f, (q31_t)0x37534b87, (q31_t)0x8c93022e, (q31_t)0x374da0fa, (q31_t)0x8c904b14, (q31_t)0x3747f64c, (q31_t)0x8c8d9442, - (q31_t)0x37424b7b, (q31_t)0x8c8addb7, (q31_t)0x373ca088, (q31_t)0x8c882773, (q31_t)0x3736f573, (q31_t)0x8c857176, (q31_t)0x37314a3c, (q31_t)0x8c82bbc0, - (q31_t)0x372b9ee3, (q31_t)0x8c800652, (q31_t)0x3725f367, (q31_t)0x8c7d512b, (q31_t)0x372047ca, (q31_t)0x8c7a9c4b, (q31_t)0x371a9c0b, (q31_t)0x8c77e7b3, - (q31_t)0x3714f02a, (q31_t)0x8c753362, (q31_t)0x370f4427, (q31_t)0x8c727f58, (q31_t)0x37099802, (q31_t)0x8c6fcb95, (q31_t)0x3703ebbb, (q31_t)0x8c6d181a, - (q31_t)0x36fe3f52, (q31_t)0x8c6a64e5, (q31_t)0x36f892c7, (q31_t)0x8c67b1f9, (q31_t)0x36f2e61a, (q31_t)0x8c64ff53, (q31_t)0x36ed394b, (q31_t)0x8c624cf5, - (q31_t)0x36e78c5b, (q31_t)0x8c5f9ade, (q31_t)0x36e1df48, (q31_t)0x8c5ce90e, (q31_t)0x36dc3214, (q31_t)0x8c5a3786, (q31_t)0x36d684be, (q31_t)0x8c578645, - (q31_t)0x36d0d746, (q31_t)0x8c54d54c, (q31_t)0x36cb29ac, (q31_t)0x8c522499, (q31_t)0x36c57bf0, (q31_t)0x8c4f742f, (q31_t)0x36bfce13, (q31_t)0x8c4cc40b, - (q31_t)0x36ba2014, (q31_t)0x8c4a142f, (q31_t)0x36b471f3, (q31_t)0x8c47649a, (q31_t)0x36aec3b0, (q31_t)0x8c44b54d, (q31_t)0x36a9154c, (q31_t)0x8c420647, - (q31_t)0x36a366c6, (q31_t)0x8c3f5788, (q31_t)0x369db81e, (q31_t)0x8c3ca911, (q31_t)0x36980954, (q31_t)0x8c39fae1, (q31_t)0x36925a69, (q31_t)0x8c374cf9, - (q31_t)0x368cab5c, (q31_t)0x8c349f58, (q31_t)0x3686fc2e, (q31_t)0x8c31f1ff, (q31_t)0x36814cde, (q31_t)0x8c2f44ed, (q31_t)0x367b9d6c, (q31_t)0x8c2c9822, - (q31_t)0x3675edd9, (q31_t)0x8c29eb9f, (q31_t)0x36703e24, (q31_t)0x8c273f63, (q31_t)0x366a8e4d, (q31_t)0x8c24936f, (q31_t)0x3664de55, (q31_t)0x8c21e7c2, - (q31_t)0x365f2e3b, (q31_t)0x8c1f3c5d, (q31_t)0x36597e00, (q31_t)0x8c1c913f, (q31_t)0x3653cda3, (q31_t)0x8c19e669, (q31_t)0x364e1d25, (q31_t)0x8c173bda, - (q31_t)0x36486c86, (q31_t)0x8c149192, (q31_t)0x3642bbc4, (q31_t)0x8c11e792, (q31_t)0x363d0ae2, (q31_t)0x8c0f3dda, (q31_t)0x363759de, (q31_t)0x8c0c9469, - (q31_t)0x3631a8b8, (q31_t)0x8c09eb40, (q31_t)0x362bf771, (q31_t)0x8c07425e, (q31_t)0x36264609, (q31_t)0x8c0499c4, (q31_t)0x3620947f, (q31_t)0x8c01f171, - (q31_t)0x361ae2d3, (q31_t)0x8bff4966, (q31_t)0x36153107, (q31_t)0x8bfca1a3, (q31_t)0x360f7f19, (q31_t)0x8bf9fa27, (q31_t)0x3609cd0a, (q31_t)0x8bf752f2, - (q31_t)0x36041ad9, (q31_t)0x8bf4ac05, (q31_t)0x35fe6887, (q31_t)0x8bf20560, (q31_t)0x35f8b614, (q31_t)0x8bef5f02, (q31_t)0x35f3037f, (q31_t)0x8becb8ec, - (q31_t)0x35ed50c9, (q31_t)0x8bea131e, (q31_t)0x35e79df2, (q31_t)0x8be76d97, (q31_t)0x35e1eafa, (q31_t)0x8be4c857, (q31_t)0x35dc37e0, (q31_t)0x8be22360, - (q31_t)0x35d684a6, (q31_t)0x8bdf7eb0, (q31_t)0x35d0d14a, (q31_t)0x8bdcda47, (q31_t)0x35cb1dcc, (q31_t)0x8bda3626, (q31_t)0x35c56a2e, (q31_t)0x8bd7924d, - (q31_t)0x35bfb66e, (q31_t)0x8bd4eebc, (q31_t)0x35ba028e, (q31_t)0x8bd24b72, (q31_t)0x35b44e8c, (q31_t)0x8bcfa870, (q31_t)0x35ae9a69, (q31_t)0x8bcd05b5, - (q31_t)0x35a8e625, (q31_t)0x8bca6343, (q31_t)0x35a331c0, (q31_t)0x8bc7c117, (q31_t)0x359d7d39, (q31_t)0x8bc51f34, (q31_t)0x3597c892, (q31_t)0x8bc27d98, - (q31_t)0x359213c9, (q31_t)0x8bbfdc44, (q31_t)0x358c5ee0, (q31_t)0x8bbd3b38, (q31_t)0x3586a9d5, (q31_t)0x8bba9a73, (q31_t)0x3580f4aa, (q31_t)0x8bb7f9f6, - (q31_t)0x357b3f5d, (q31_t)0x8bb559c1, (q31_t)0x357589f0, (q31_t)0x8bb2b9d4, (q31_t)0x356fd461, (q31_t)0x8bb01a2e, (q31_t)0x356a1eb2, (q31_t)0x8bad7ad0, - (q31_t)0x356468e2, (q31_t)0x8baadbba, (q31_t)0x355eb2f0, (q31_t)0x8ba83cec, (q31_t)0x3558fcde, (q31_t)0x8ba59e65, (q31_t)0x355346ab, (q31_t)0x8ba30026, - (q31_t)0x354d9057, (q31_t)0x8ba0622f, (q31_t)0x3547d9e2, (q31_t)0x8b9dc480, (q31_t)0x3542234c, (q31_t)0x8b9b2718, (q31_t)0x353c6c95, (q31_t)0x8b9889f8, - (q31_t)0x3536b5be, (q31_t)0x8b95ed21, (q31_t)0x3530fec6, (q31_t)0x8b935090, (q31_t)0x352b47ad, (q31_t)0x8b90b448, (q31_t)0x35259073, (q31_t)0x8b8e1848, - (q31_t)0x351fd918, (q31_t)0x8b8b7c8f, (q31_t)0x351a219c, (q31_t)0x8b88e11e, (q31_t)0x35146a00, (q31_t)0x8b8645f5, (q31_t)0x350eb243, (q31_t)0x8b83ab14, - (q31_t)0x3508fa66, (q31_t)0x8b81107b, (q31_t)0x35034267, (q31_t)0x8b7e7629, (q31_t)0x34fd8a48, (q31_t)0x8b7bdc20, (q31_t)0x34f7d208, (q31_t)0x8b79425e, - (q31_t)0x34f219a8, (q31_t)0x8b76a8e4, (q31_t)0x34ec6127, (q31_t)0x8b740fb3, (q31_t)0x34e6a885, (q31_t)0x8b7176c8, (q31_t)0x34e0efc2, (q31_t)0x8b6ede26, - (q31_t)0x34db36df, (q31_t)0x8b6c45cc, (q31_t)0x34d57ddc, (q31_t)0x8b69adba, (q31_t)0x34cfc4b7, (q31_t)0x8b6715ef, (q31_t)0x34ca0b73, (q31_t)0x8b647e6d, - (q31_t)0x34c4520d, (q31_t)0x8b61e733, (q31_t)0x34be9887, (q31_t)0x8b5f5040, (q31_t)0x34b8dee1, (q31_t)0x8b5cb995, (q31_t)0x34b3251a, (q31_t)0x8b5a2333, - (q31_t)0x34ad6b32, (q31_t)0x8b578d18, (q31_t)0x34a7b12a, (q31_t)0x8b54f745, (q31_t)0x34a1f702, (q31_t)0x8b5261ba, (q31_t)0x349c3cb9, (q31_t)0x8b4fcc77, - (q31_t)0x34968250, (q31_t)0x8b4d377c, (q31_t)0x3490c7c6, (q31_t)0x8b4aa2ca, (q31_t)0x348b0d1c, (q31_t)0x8b480e5f, (q31_t)0x34855251, (q31_t)0x8b457a3c, - (q31_t)0x347f9766, (q31_t)0x8b42e661, (q31_t)0x3479dc5b, (q31_t)0x8b4052ce, (q31_t)0x3474212f, (q31_t)0x8b3dbf83, (q31_t)0x346e65e3, (q31_t)0x8b3b2c80, - (q31_t)0x3468aa76, (q31_t)0x8b3899c6, (q31_t)0x3462eee9, (q31_t)0x8b360753, (q31_t)0x345d333c, (q31_t)0x8b337528, (q31_t)0x3457776f, (q31_t)0x8b30e345, - (q31_t)0x3451bb81, (q31_t)0x8b2e51ab, (q31_t)0x344bff73, (q31_t)0x8b2bc058, (q31_t)0x34464345, (q31_t)0x8b292f4e, (q31_t)0x344086f6, (q31_t)0x8b269e8b, - (q31_t)0x343aca87, (q31_t)0x8b240e11, (q31_t)0x34350df8, (q31_t)0x8b217ddf, (q31_t)0x342f5149, (q31_t)0x8b1eedf4, (q31_t)0x3429947a, (q31_t)0x8b1c5e52, - (q31_t)0x3423d78a, (q31_t)0x8b19cef8, (q31_t)0x341e1a7b, (q31_t)0x8b173fe6, (q31_t)0x34185d4b, (q31_t)0x8b14b11d, (q31_t)0x34129ffb, (q31_t)0x8b12229b, - (q31_t)0x340ce28b, (q31_t)0x8b0f9462, (q31_t)0x340724fb, (q31_t)0x8b0d0670, (q31_t)0x3401674a, (q31_t)0x8b0a78c7, (q31_t)0x33fba97a, (q31_t)0x8b07eb66, - (q31_t)0x33f5eb89, (q31_t)0x8b055e4d, (q31_t)0x33f02d79, (q31_t)0x8b02d17c, (q31_t)0x33ea6f48, (q31_t)0x8b0044f3, (q31_t)0x33e4b0f8, (q31_t)0x8afdb8b3, - (q31_t)0x33def287, (q31_t)0x8afb2cbb, (q31_t)0x33d933f7, (q31_t)0x8af8a10b, (q31_t)0x33d37546, (q31_t)0x8af615a3, (q31_t)0x33cdb676, (q31_t)0x8af38a83, - (q31_t)0x33c7f785, (q31_t)0x8af0ffac, (q31_t)0x33c23875, (q31_t)0x8aee751c, (q31_t)0x33bc7944, (q31_t)0x8aebead5, (q31_t)0x33b6b9f4, (q31_t)0x8ae960d6, - (q31_t)0x33b0fa84, (q31_t)0x8ae6d720, (q31_t)0x33ab3af4, (q31_t)0x8ae44db1, (q31_t)0x33a57b44, (q31_t)0x8ae1c48b, (q31_t)0x339fbb74, (q31_t)0x8adf3bad, - (q31_t)0x3399fb85, (q31_t)0x8adcb318, (q31_t)0x33943b75, (q31_t)0x8ada2aca, (q31_t)0x338e7b46, (q31_t)0x8ad7a2c5, (q31_t)0x3388baf7, (q31_t)0x8ad51b08, - (q31_t)0x3382fa88, (q31_t)0x8ad29394, (q31_t)0x337d39f9, (q31_t)0x8ad00c67, (q31_t)0x3377794b, (q31_t)0x8acd8583, (q31_t)0x3371b87d, (q31_t)0x8acafee8, - (q31_t)0x336bf78f, (q31_t)0x8ac87894, (q31_t)0x33663682, (q31_t)0x8ac5f289, (q31_t)0x33607554, (q31_t)0x8ac36cc6, (q31_t)0x335ab407, (q31_t)0x8ac0e74c, - (q31_t)0x3354f29b, (q31_t)0x8abe6219, (q31_t)0x334f310e, (q31_t)0x8abbdd30, (q31_t)0x33496f62, (q31_t)0x8ab9588e, (q31_t)0x3343ad97, (q31_t)0x8ab6d435, - (q31_t)0x333debab, (q31_t)0x8ab45024, (q31_t)0x333829a1, (q31_t)0x8ab1cc5c, (q31_t)0x33326776, (q31_t)0x8aaf48db, (q31_t)0x332ca52c, (q31_t)0x8aacc5a4, - (q31_t)0x3326e2c3, (q31_t)0x8aaa42b4, (q31_t)0x33212039, (q31_t)0x8aa7c00d, (q31_t)0x331b5d91, (q31_t)0x8aa53daf, (q31_t)0x33159ac8, (q31_t)0x8aa2bb99, - (q31_t)0x330fd7e1, (q31_t)0x8aa039cb, (q31_t)0x330a14da, (q31_t)0x8a9db845, (q31_t)0x330451b3, (q31_t)0x8a9b3708, (q31_t)0x32fe8e6d, (q31_t)0x8a98b614, - (q31_t)0x32f8cb07, (q31_t)0x8a963567, (q31_t)0x32f30782, (q31_t)0x8a93b504, (q31_t)0x32ed43de, (q31_t)0x8a9134e8, (q31_t)0x32e7801a, (q31_t)0x8a8eb516, - (q31_t)0x32e1bc36, (q31_t)0x8a8c358b, (q31_t)0x32dbf834, (q31_t)0x8a89b649, (q31_t)0x32d63412, (q31_t)0x8a873750, (q31_t)0x32d06fd0, (q31_t)0x8a84b89e, - (q31_t)0x32caab6f, (q31_t)0x8a823a36, (q31_t)0x32c4e6ef, (q31_t)0x8a7fbc16, (q31_t)0x32bf2250, (q31_t)0x8a7d3e3e, (q31_t)0x32b95d91, (q31_t)0x8a7ac0af, - (q31_t)0x32b398b3, (q31_t)0x8a784368, (q31_t)0x32add3b6, (q31_t)0x8a75c66a, (q31_t)0x32a80e99, (q31_t)0x8a7349b4, (q31_t)0x32a2495d, (q31_t)0x8a70cd47, - (q31_t)0x329c8402, (q31_t)0x8a6e5123, (q31_t)0x3296be88, (q31_t)0x8a6bd547, (q31_t)0x3290f8ef, (q31_t)0x8a6959b3, (q31_t)0x328b3336, (q31_t)0x8a66de68, - (q31_t)0x32856d5e, (q31_t)0x8a646365, (q31_t)0x327fa767, (q31_t)0x8a61e8ab, (q31_t)0x3279e151, (q31_t)0x8a5f6e3a, (q31_t)0x32741b1c, (q31_t)0x8a5cf411, - (q31_t)0x326e54c7, (q31_t)0x8a5a7a31, (q31_t)0x32688e54, (q31_t)0x8a580099, (q31_t)0x3262c7c1, (q31_t)0x8a55874a, (q31_t)0x325d0110, (q31_t)0x8a530e43, - (q31_t)0x32573a3f, (q31_t)0x8a509585, (q31_t)0x3251734f, (q31_t)0x8a4e1d10, (q31_t)0x324bac40, (q31_t)0x8a4ba4e3, (q31_t)0x3245e512, (q31_t)0x8a492cff, - (q31_t)0x32401dc6, (q31_t)0x8a46b564, (q31_t)0x323a565a, (q31_t)0x8a443e11, (q31_t)0x32348ecf, (q31_t)0x8a41c706, (q31_t)0x322ec725, (q31_t)0x8a3f5045, - (q31_t)0x3228ff5c, (q31_t)0x8a3cd9cc, (q31_t)0x32233775, (q31_t)0x8a3a639b, (q31_t)0x321d6f6e, (q31_t)0x8a37edb3, (q31_t)0x3217a748, (q31_t)0x8a357814, - (q31_t)0x3211df04, (q31_t)0x8a3302be, (q31_t)0x320c16a1, (q31_t)0x8a308db0, (q31_t)0x32064e1e, (q31_t)0x8a2e18eb, (q31_t)0x3200857d, (q31_t)0x8a2ba46e, - (q31_t)0x31fabcbd, (q31_t)0x8a29303b, (q31_t)0x31f4f3df, (q31_t)0x8a26bc50, (q31_t)0x31ef2ae1, (q31_t)0x8a2448ad, (q31_t)0x31e961c5, (q31_t)0x8a21d554, - (q31_t)0x31e39889, (q31_t)0x8a1f6243, (q31_t)0x31ddcf30, (q31_t)0x8a1cef7a, (q31_t)0x31d805b7, (q31_t)0x8a1a7cfb, (q31_t)0x31d23c1f, (q31_t)0x8a180ac4, - (q31_t)0x31cc7269, (q31_t)0x8a1598d6, (q31_t)0x31c6a894, (q31_t)0x8a132731, (q31_t)0x31c0dea1, (q31_t)0x8a10b5d4, (q31_t)0x31bb148f, (q31_t)0x8a0e44c0, - (q31_t)0x31b54a5e, (q31_t)0x8a0bd3f5, (q31_t)0x31af800e, (q31_t)0x8a096373, (q31_t)0x31a9b5a0, (q31_t)0x8a06f339, (q31_t)0x31a3eb13, (q31_t)0x8a048348, - (q31_t)0x319e2067, (q31_t)0x8a0213a0, (q31_t)0x3198559d, (q31_t)0x89ffa441, (q31_t)0x31928ab4, (q31_t)0x89fd352b, (q31_t)0x318cbfad, (q31_t)0x89fac65d, - (q31_t)0x3186f487, (q31_t)0x89f857d8, (q31_t)0x31812943, (q31_t)0x89f5e99c, (q31_t)0x317b5de0, (q31_t)0x89f37ba9, (q31_t)0x3175925e, (q31_t)0x89f10dff, - (q31_t)0x316fc6be, (q31_t)0x89eea09d, (q31_t)0x3169fb00, (q31_t)0x89ec3384, (q31_t)0x31642f23, (q31_t)0x89e9c6b4, (q31_t)0x315e6328, (q31_t)0x89e75a2d, - (q31_t)0x3158970e, (q31_t)0x89e4edef, (q31_t)0x3152cad5, (q31_t)0x89e281fa, (q31_t)0x314cfe7f, (q31_t)0x89e0164d, (q31_t)0x31473209, (q31_t)0x89ddaae9, - (q31_t)0x31416576, (q31_t)0x89db3fcf, (q31_t)0x313b98c4, (q31_t)0x89d8d4fd, (q31_t)0x3135cbf4, (q31_t)0x89d66a74, (q31_t)0x312fff05, (q31_t)0x89d40033, - (q31_t)0x312a31f8, (q31_t)0x89d1963c, (q31_t)0x312464cd, (q31_t)0x89cf2c8e, (q31_t)0x311e9783, (q31_t)0x89ccc328, (q31_t)0x3118ca1b, (q31_t)0x89ca5a0c, - (q31_t)0x3112fc95, (q31_t)0x89c7f138, (q31_t)0x310d2ef0, (q31_t)0x89c588ae, (q31_t)0x3107612e, (q31_t)0x89c3206c, (q31_t)0x3101934d, (q31_t)0x89c0b873, - (q31_t)0x30fbc54d, (q31_t)0x89be50c3, (q31_t)0x30f5f730, (q31_t)0x89bbe95c, (q31_t)0x30f028f4, (q31_t)0x89b9823e, (q31_t)0x30ea5a9a, (q31_t)0x89b71b69, - (q31_t)0x30e48c22, (q31_t)0x89b4b4dd, (q31_t)0x30debd8c, (q31_t)0x89b24e9a, (q31_t)0x30d8eed8, (q31_t)0x89afe8a0, (q31_t)0x30d32006, (q31_t)0x89ad82ef, - (q31_t)0x30cd5115, (q31_t)0x89ab1d87, (q31_t)0x30c78206, (q31_t)0x89a8b868, (q31_t)0x30c1b2da, (q31_t)0x89a65391, (q31_t)0x30bbe38f, (q31_t)0x89a3ef04, - (q31_t)0x30b61426, (q31_t)0x89a18ac0, (q31_t)0x30b0449f, (q31_t)0x899f26c5, (q31_t)0x30aa74fa, (q31_t)0x899cc313, (q31_t)0x30a4a537, (q31_t)0x899a5faa, - (q31_t)0x309ed556, (q31_t)0x8997fc8a, (q31_t)0x30990557, (q31_t)0x899599b3, (q31_t)0x3093353a, (q31_t)0x89933725, (q31_t)0x308d64ff, (q31_t)0x8990d4e0, - (q31_t)0x308794a6, (q31_t)0x898e72e4, (q31_t)0x3081c42f, (q31_t)0x898c1131, (q31_t)0x307bf39b, (q31_t)0x8989afc8, (q31_t)0x307622e8, (q31_t)0x89874ea7, - (q31_t)0x30705217, (q31_t)0x8984edcf, (q31_t)0x306a8129, (q31_t)0x89828d41, (q31_t)0x3064b01d, (q31_t)0x89802cfc, (q31_t)0x305edef3, (q31_t)0x897dccff, - (q31_t)0x30590dab, (q31_t)0x897b6d4c, (q31_t)0x30533c45, (q31_t)0x89790de2, (q31_t)0x304d6ac1, (q31_t)0x8976aec1, (q31_t)0x30479920, (q31_t)0x89744fe9, - (q31_t)0x3041c761, (q31_t)0x8971f15a, (q31_t)0x303bf584, (q31_t)0x896f9315, (q31_t)0x30362389, (q31_t)0x896d3518, (q31_t)0x30305171, (q31_t)0x896ad765, - (q31_t)0x302a7f3a, (q31_t)0x896879fb, (q31_t)0x3024ace6, (q31_t)0x89661cda, (q31_t)0x301eda75, (q31_t)0x8963c002, (q31_t)0x301907e6, (q31_t)0x89616373, - (q31_t)0x30133539, (q31_t)0x895f072e, (q31_t)0x300d626e, (q31_t)0x895cab31, (q31_t)0x30078f86, (q31_t)0x895a4f7e, (q31_t)0x3001bc80, (q31_t)0x8957f414, - (q31_t)0x2ffbe95d, (q31_t)0x895598f3, (q31_t)0x2ff6161c, (q31_t)0x89533e1c, (q31_t)0x2ff042bd, (q31_t)0x8950e38e, (q31_t)0x2fea6f41, (q31_t)0x894e8948, - (q31_t)0x2fe49ba7, (q31_t)0x894c2f4c, (q31_t)0x2fdec7f0, (q31_t)0x8949d59a, (q31_t)0x2fd8f41b, (q31_t)0x89477c30, (q31_t)0x2fd32028, (q31_t)0x89452310, - (q31_t)0x2fcd4c19, (q31_t)0x8942ca39, (q31_t)0x2fc777eb, (q31_t)0x894071ab, (q31_t)0x2fc1a3a0, (q31_t)0x893e1967, (q31_t)0x2fbbcf38, (q31_t)0x893bc16b, - (q31_t)0x2fb5fab2, (q31_t)0x893969b9, (q31_t)0x2fb0260f, (q31_t)0x89371250, (q31_t)0x2faa514f, (q31_t)0x8934bb31, (q31_t)0x2fa47c71, (q31_t)0x8932645b, - (q31_t)0x2f9ea775, (q31_t)0x89300dce, (q31_t)0x2f98d25d, (q31_t)0x892db78a, (q31_t)0x2f92fd26, (q31_t)0x892b6190, (q31_t)0x2f8d27d3, (q31_t)0x89290bdf, - (q31_t)0x2f875262, (q31_t)0x8926b677, (q31_t)0x2f817cd4, (q31_t)0x89246159, (q31_t)0x2f7ba729, (q31_t)0x89220c84, (q31_t)0x2f75d160, (q31_t)0x891fb7f8, - (q31_t)0x2f6ffb7a, (q31_t)0x891d63b5, (q31_t)0x2f6a2577, (q31_t)0x891b0fbc, (q31_t)0x2f644f56, (q31_t)0x8918bc0c, (q31_t)0x2f5e7919, (q31_t)0x891668a6, - (q31_t)0x2f58a2be, (q31_t)0x89141589, (q31_t)0x2f52cc46, (q31_t)0x8911c2b5, (q31_t)0x2f4cf5b0, (q31_t)0x890f702b, (q31_t)0x2f471efe, (q31_t)0x890d1dea, - (q31_t)0x2f41482e, (q31_t)0x890acbf2, (q31_t)0x2f3b7141, (q31_t)0x89087a44, (q31_t)0x2f359a37, (q31_t)0x890628df, (q31_t)0x2f2fc310, (q31_t)0x8903d7c4, - (q31_t)0x2f29ebcc, (q31_t)0x890186f2, (q31_t)0x2f24146b, (q31_t)0x88ff3669, (q31_t)0x2f1e3ced, (q31_t)0x88fce62a, (q31_t)0x2f186551, (q31_t)0x88fa9634, - (q31_t)0x2f128d99, (q31_t)0x88f84687, (q31_t)0x2f0cb5c3, (q31_t)0x88f5f724, (q31_t)0x2f06ddd1, (q31_t)0x88f3a80b, (q31_t)0x2f0105c1, (q31_t)0x88f1593b, - (q31_t)0x2efb2d95, (q31_t)0x88ef0ab4, (q31_t)0x2ef5554b, (q31_t)0x88ecbc77, (q31_t)0x2eef7ce5, (q31_t)0x88ea6e83, (q31_t)0x2ee9a461, (q31_t)0x88e820d9, - (q31_t)0x2ee3cbc1, (q31_t)0x88e5d378, (q31_t)0x2eddf304, (q31_t)0x88e38660, (q31_t)0x2ed81a29, (q31_t)0x88e13992, (q31_t)0x2ed24132, (q31_t)0x88deed0e, - (q31_t)0x2ecc681e, (q31_t)0x88dca0d3, (q31_t)0x2ec68eed, (q31_t)0x88da54e1, (q31_t)0x2ec0b5a0, (q31_t)0x88d8093a, (q31_t)0x2ebadc35, (q31_t)0x88d5bddb, - (q31_t)0x2eb502ae, (q31_t)0x88d372c6, (q31_t)0x2eaf290a, (q31_t)0x88d127fb, (q31_t)0x2ea94f49, (q31_t)0x88cedd79, (q31_t)0x2ea3756b, (q31_t)0x88cc9340, - (q31_t)0x2e9d9b70, (q31_t)0x88ca4951, (q31_t)0x2e97c159, (q31_t)0x88c7ffac, (q31_t)0x2e91e725, (q31_t)0x88c5b650, (q31_t)0x2e8c0cd4, (q31_t)0x88c36d3e, - (q31_t)0x2e863267, (q31_t)0x88c12475, (q31_t)0x2e8057dd, (q31_t)0x88bedbf6, (q31_t)0x2e7a7d36, (q31_t)0x88bc93c0, (q31_t)0x2e74a272, (q31_t)0x88ba4bd4, - (q31_t)0x2e6ec792, (q31_t)0x88b80432, (q31_t)0x2e68ec95, (q31_t)0x88b5bcd9, (q31_t)0x2e63117c, (q31_t)0x88b375ca, (q31_t)0x2e5d3646, (q31_t)0x88b12f04, - (q31_t)0x2e575af3, (q31_t)0x88aee888, (q31_t)0x2e517f84, (q31_t)0x88aca255, (q31_t)0x2e4ba3f8, (q31_t)0x88aa5c6c, (q31_t)0x2e45c850, (q31_t)0x88a816cd, - (q31_t)0x2e3fec8b, (q31_t)0x88a5d177, (q31_t)0x2e3a10aa, (q31_t)0x88a38c6b, (q31_t)0x2e3434ac, (q31_t)0x88a147a9, (q31_t)0x2e2e5891, (q31_t)0x889f0330, - (q31_t)0x2e287c5a, (q31_t)0x889cbf01, (q31_t)0x2e22a007, (q31_t)0x889a7b1b, (q31_t)0x2e1cc397, (q31_t)0x88983780, (q31_t)0x2e16e70b, (q31_t)0x8895f42d, - (q31_t)0x2e110a62, (q31_t)0x8893b125, (q31_t)0x2e0b2d9d, (q31_t)0x88916e66, (q31_t)0x2e0550bb, (q31_t)0x888f2bf1, (q31_t)0x2dff73bd, (q31_t)0x888ce9c5, - (q31_t)0x2df996a3, (q31_t)0x888aa7e3, (q31_t)0x2df3b96c, (q31_t)0x8888664b, (q31_t)0x2deddc19, (q31_t)0x888624fd, (q31_t)0x2de7feaa, (q31_t)0x8883e3f8, - (q31_t)0x2de2211e, (q31_t)0x8881a33d, (q31_t)0x2ddc4376, (q31_t)0x887f62cb, (q31_t)0x2dd665b2, (q31_t)0x887d22a4, (q31_t)0x2dd087d1, (q31_t)0x887ae2c6, - (q31_t)0x2dcaa9d5, (q31_t)0x8878a332, (q31_t)0x2dc4cbbc, (q31_t)0x887663e7, (q31_t)0x2dbeed86, (q31_t)0x887424e7, (q31_t)0x2db90f35, (q31_t)0x8871e630, - (q31_t)0x2db330c7, (q31_t)0x886fa7c2, (q31_t)0x2dad523d, (q31_t)0x886d699f, (q31_t)0x2da77397, (q31_t)0x886b2bc5, (q31_t)0x2da194d5, (q31_t)0x8868ee35, - (q31_t)0x2d9bb5f6, (q31_t)0x8866b0ef, (q31_t)0x2d95d6fc, (q31_t)0x886473f2, (q31_t)0x2d8ff7e5, (q31_t)0x88623740, (q31_t)0x2d8a18b3, (q31_t)0x885ffad7, - (q31_t)0x2d843964, (q31_t)0x885dbeb8, (q31_t)0x2d7e59f9, (q31_t)0x885b82e3, (q31_t)0x2d787a72, (q31_t)0x88594757, (q31_t)0x2d729acf, (q31_t)0x88570c16, - (q31_t)0x2d6cbb10, (q31_t)0x8854d11e, (q31_t)0x2d66db35, (q31_t)0x88529670, (q31_t)0x2d60fb3e, (q31_t)0x88505c0b, (q31_t)0x2d5b1b2b, (q31_t)0x884e21f1, - (q31_t)0x2d553afc, (q31_t)0x884be821, (q31_t)0x2d4f5ab1, (q31_t)0x8849ae9a, (q31_t)0x2d497a4a, (q31_t)0x8847755d, (q31_t)0x2d4399c7, (q31_t)0x88453c6a, - (q31_t)0x2d3db928, (q31_t)0x884303c1, (q31_t)0x2d37d86d, (q31_t)0x8840cb61, (q31_t)0x2d31f797, (q31_t)0x883e934c, (q31_t)0x2d2c16a4, (q31_t)0x883c5b81, - (q31_t)0x2d263596, (q31_t)0x883a23ff, (q31_t)0x2d20546b, (q31_t)0x8837ecc7, (q31_t)0x2d1a7325, (q31_t)0x8835b5d9, (q31_t)0x2d1491c4, (q31_t)0x88337f35, - (q31_t)0x2d0eb046, (q31_t)0x883148db, (q31_t)0x2d08ceac, (q31_t)0x882f12cb, (q31_t)0x2d02ecf7, (q31_t)0x882cdd04, (q31_t)0x2cfd0b26, (q31_t)0x882aa788, - (q31_t)0x2cf72939, (q31_t)0x88287256, (q31_t)0x2cf14731, (q31_t)0x88263d6d, (q31_t)0x2ceb650d, (q31_t)0x882408ce, (q31_t)0x2ce582cd, (q31_t)0x8821d47a, - (q31_t)0x2cdfa071, (q31_t)0x881fa06f, (q31_t)0x2cd9bdfa, (q31_t)0x881d6cae, (q31_t)0x2cd3db67, (q31_t)0x881b3937, (q31_t)0x2ccdf8b8, (q31_t)0x8819060a, - (q31_t)0x2cc815ee, (q31_t)0x8816d327, (q31_t)0x2cc23308, (q31_t)0x8814a08f, (q31_t)0x2cbc5006, (q31_t)0x88126e40, (q31_t)0x2cb66ce9, (q31_t)0x88103c3b, - (q31_t)0x2cb089b1, (q31_t)0x880e0a7f, (q31_t)0x2caaa65c, (q31_t)0x880bd90e, (q31_t)0x2ca4c2ed, (q31_t)0x8809a7e7, (q31_t)0x2c9edf61, (q31_t)0x8807770a, - (q31_t)0x2c98fbba, (q31_t)0x88054677, (q31_t)0x2c9317f8, (q31_t)0x8803162e, (q31_t)0x2c8d341a, (q31_t)0x8800e62f, (q31_t)0x2c875021, (q31_t)0x87feb67a, - (q31_t)0x2c816c0c, (q31_t)0x87fc870f, (q31_t)0x2c7b87dc, (q31_t)0x87fa57ee, (q31_t)0x2c75a390, (q31_t)0x87f82917, (q31_t)0x2c6fbf29, (q31_t)0x87f5fa8b, - (q31_t)0x2c69daa6, (q31_t)0x87f3cc48, (q31_t)0x2c63f609, (q31_t)0x87f19e4f, (q31_t)0x2c5e114f, (q31_t)0x87ef70a0, (q31_t)0x2c582c7b, (q31_t)0x87ed433c, - (q31_t)0x2c52478a, (q31_t)0x87eb1621, (q31_t)0x2c4c627f, (q31_t)0x87e8e950, (q31_t)0x2c467d58, (q31_t)0x87e6bcca, (q31_t)0x2c409816, (q31_t)0x87e4908e, - (q31_t)0x2c3ab2b9, (q31_t)0x87e2649b, (q31_t)0x2c34cd40, (q31_t)0x87e038f3, (q31_t)0x2c2ee7ad, (q31_t)0x87de0d95, (q31_t)0x2c2901fd, (q31_t)0x87dbe281, - (q31_t)0x2c231c33, (q31_t)0x87d9b7b7, (q31_t)0x2c1d364e, (q31_t)0x87d78d38, (q31_t)0x2c17504d, (q31_t)0x87d56302, (q31_t)0x2c116a31, (q31_t)0x87d33916, - (q31_t)0x2c0b83fa, (q31_t)0x87d10f75, (q31_t)0x2c059da7, (q31_t)0x87cee61e, (q31_t)0x2bffb73a, (q31_t)0x87ccbd11, (q31_t)0x2bf9d0b1, (q31_t)0x87ca944e, - (q31_t)0x2bf3ea0d, (q31_t)0x87c86bd5, (q31_t)0x2bee034e, (q31_t)0x87c643a6, (q31_t)0x2be81c74, (q31_t)0x87c41bc2, (q31_t)0x2be2357f, (q31_t)0x87c1f427, - (q31_t)0x2bdc4e6f, (q31_t)0x87bfccd7, (q31_t)0x2bd66744, (q31_t)0x87bda5d1, (q31_t)0x2bd07ffe, (q31_t)0x87bb7f16, (q31_t)0x2bca989d, (q31_t)0x87b958a4, - (q31_t)0x2bc4b120, (q31_t)0x87b7327d, (q31_t)0x2bbec989, (q31_t)0x87b50c9f, (q31_t)0x2bb8e1d7, (q31_t)0x87b2e70c, (q31_t)0x2bb2fa0a, (q31_t)0x87b0c1c4, - (q31_t)0x2bad1221, (q31_t)0x87ae9cc5, (q31_t)0x2ba72a1e, (q31_t)0x87ac7811, (q31_t)0x2ba14200, (q31_t)0x87aa53a6, (q31_t)0x2b9b59c7, (q31_t)0x87a82f87, - (q31_t)0x2b957173, (q31_t)0x87a60bb1, (q31_t)0x2b8f8905, (q31_t)0x87a3e825, (q31_t)0x2b89a07b, (q31_t)0x87a1c4e4, (q31_t)0x2b83b7d7, (q31_t)0x879fa1ed, - (q31_t)0x2b7dcf17, (q31_t)0x879d7f41, (q31_t)0x2b77e63d, (q31_t)0x879b5cde, (q31_t)0x2b71fd48, (q31_t)0x87993ac6, (q31_t)0x2b6c1438, (q31_t)0x879718f8, - (q31_t)0x2b662b0e, (q31_t)0x8794f774, (q31_t)0x2b6041c9, (q31_t)0x8792d63b, (q31_t)0x2b5a5868, (q31_t)0x8790b54c, (q31_t)0x2b546eee, (q31_t)0x878e94a7, - (q31_t)0x2b4e8558, (q31_t)0x878c744d, (q31_t)0x2b489ba8, (q31_t)0x878a543d, (q31_t)0x2b42b1dd, (q31_t)0x87883477, (q31_t)0x2b3cc7f7, (q31_t)0x878614fb, - (q31_t)0x2b36ddf7, (q31_t)0x8783f5ca, (q31_t)0x2b30f3dc, (q31_t)0x8781d6e3, (q31_t)0x2b2b09a6, (q31_t)0x877fb846, (q31_t)0x2b251f56, (q31_t)0x877d99f4, - (q31_t)0x2b1f34eb, (q31_t)0x877b7bec, (q31_t)0x2b194a66, (q31_t)0x87795e2f, (q31_t)0x2b135fc6, (q31_t)0x877740bb, (q31_t)0x2b0d750b, (q31_t)0x87752392, - (q31_t)0x2b078a36, (q31_t)0x877306b4, (q31_t)0x2b019f46, (q31_t)0x8770ea20, (q31_t)0x2afbb43c, (q31_t)0x876ecdd6, (q31_t)0x2af5c917, (q31_t)0x876cb1d6, - (q31_t)0x2aefddd8, (q31_t)0x876a9621, (q31_t)0x2ae9f27e, (q31_t)0x87687ab7, (q31_t)0x2ae4070a, (q31_t)0x87665f96, (q31_t)0x2ade1b7c, (q31_t)0x876444c1, - (q31_t)0x2ad82fd2, (q31_t)0x87622a35, (q31_t)0x2ad2440f, (q31_t)0x87600ff4, (q31_t)0x2acc5831, (q31_t)0x875df5fd, (q31_t)0x2ac66c39, (q31_t)0x875bdc51, - (q31_t)0x2ac08026, (q31_t)0x8759c2ef, (q31_t)0x2aba93f9, (q31_t)0x8757a9d8, (q31_t)0x2ab4a7b1, (q31_t)0x8755910b, (q31_t)0x2aaebb50, (q31_t)0x87537888, - (q31_t)0x2aa8ced3, (q31_t)0x87516050, (q31_t)0x2aa2e23d, (q31_t)0x874f4862, (q31_t)0x2a9cf58c, (q31_t)0x874d30bf, (q31_t)0x2a9708c1, (q31_t)0x874b1966, - (q31_t)0x2a911bdc, (q31_t)0x87490258, (q31_t)0x2a8b2edc, (q31_t)0x8746eb94, (q31_t)0x2a8541c3, (q31_t)0x8744d51b, (q31_t)0x2a7f548e, (q31_t)0x8742beec, - (q31_t)0x2a796740, (q31_t)0x8740a907, (q31_t)0x2a7379d8, (q31_t)0x873e936d, (q31_t)0x2a6d8c55, (q31_t)0x873c7e1e, (q31_t)0x2a679eb8, (q31_t)0x873a6919, - (q31_t)0x2a61b101, (q31_t)0x8738545e, (q31_t)0x2a5bc330, (q31_t)0x87363fee, (q31_t)0x2a55d545, (q31_t)0x87342bc9, (q31_t)0x2a4fe740, (q31_t)0x873217ee, - (q31_t)0x2a49f920, (q31_t)0x8730045d, (q31_t)0x2a440ae7, (q31_t)0x872df117, (q31_t)0x2a3e1c93, (q31_t)0x872bde1c, (q31_t)0x2a382e25, (q31_t)0x8729cb6b, - (q31_t)0x2a323f9e, (q31_t)0x8727b905, (q31_t)0x2a2c50fc, (q31_t)0x8725a6e9, (q31_t)0x2a266240, (q31_t)0x87239518, (q31_t)0x2a20736a, (q31_t)0x87218391, - (q31_t)0x2a1a847b, (q31_t)0x871f7255, (q31_t)0x2a149571, (q31_t)0x871d6163, (q31_t)0x2a0ea64d, (q31_t)0x871b50bc, (q31_t)0x2a08b710, (q31_t)0x87194060, - (q31_t)0x2a02c7b8, (q31_t)0x8717304e, (q31_t)0x29fcd847, (q31_t)0x87152087, (q31_t)0x29f6e8bb, (q31_t)0x8713110a, (q31_t)0x29f0f916, (q31_t)0x871101d8, - (q31_t)0x29eb0957, (q31_t)0x870ef2f1, (q31_t)0x29e5197e, (q31_t)0x870ce454, (q31_t)0x29df298b, (q31_t)0x870ad602, (q31_t)0x29d9397f, (q31_t)0x8708c7fa, - (q31_t)0x29d34958, (q31_t)0x8706ba3d, (q31_t)0x29cd5918, (q31_t)0x8704acca, (q31_t)0x29c768be, (q31_t)0x87029fa3, (q31_t)0x29c1784a, (q31_t)0x870092c5, - (q31_t)0x29bb87bc, (q31_t)0x86fe8633, (q31_t)0x29b59715, (q31_t)0x86fc79eb, (q31_t)0x29afa654, (q31_t)0x86fa6dee, (q31_t)0x29a9b579, (q31_t)0x86f8623b, - (q31_t)0x29a3c485, (q31_t)0x86f656d3, (q31_t)0x299dd377, (q31_t)0x86f44bb6, (q31_t)0x2997e24f, (q31_t)0x86f240e3, (q31_t)0x2991f10e, (q31_t)0x86f0365c, - (q31_t)0x298bffb2, (q31_t)0x86ee2c1e, (q31_t)0x29860e3e, (q31_t)0x86ec222c, (q31_t)0x29801caf, (q31_t)0x86ea1884, (q31_t)0x297a2b07, (q31_t)0x86e80f27, - (q31_t)0x29743946, (q31_t)0x86e60614, (q31_t)0x296e476b, (q31_t)0x86e3fd4c, (q31_t)0x29685576, (q31_t)0x86e1f4cf, (q31_t)0x29626368, (q31_t)0x86dfec9d, - (q31_t)0x295c7140, (q31_t)0x86dde4b5, (q31_t)0x29567eff, (q31_t)0x86dbdd18, (q31_t)0x29508ca4, (q31_t)0x86d9d5c6, (q31_t)0x294a9a30, (q31_t)0x86d7cebf, - (q31_t)0x2944a7a2, (q31_t)0x86d5c802, (q31_t)0x293eb4fb, (q31_t)0x86d3c190, (q31_t)0x2938c23a, (q31_t)0x86d1bb69, (q31_t)0x2932cf60, (q31_t)0x86cfb58c, - (q31_t)0x292cdc6d, (q31_t)0x86cdaffa, (q31_t)0x2926e960, (q31_t)0x86cbaab3, (q31_t)0x2920f63a, (q31_t)0x86c9a5b7, (q31_t)0x291b02fa, (q31_t)0x86c7a106, - (q31_t)0x29150fa1, (q31_t)0x86c59c9f, (q31_t)0x290f1c2f, (q31_t)0x86c39883, (q31_t)0x290928a3, (q31_t)0x86c194b2, (q31_t)0x290334ff, (q31_t)0x86bf912c, - (q31_t)0x28fd4140, (q31_t)0x86bd8df0, (q31_t)0x28f74d69, (q31_t)0x86bb8b00, (q31_t)0x28f15978, (q31_t)0x86b9885a, (q31_t)0x28eb656e, (q31_t)0x86b785ff, - (q31_t)0x28e5714b, (q31_t)0x86b583ee, (q31_t)0x28df7d0e, (q31_t)0x86b38229, (q31_t)0x28d988b8, (q31_t)0x86b180ae, (q31_t)0x28d3944a, (q31_t)0x86af7f7e, - (q31_t)0x28cd9fc1, (q31_t)0x86ad7e99, (q31_t)0x28c7ab20, (q31_t)0x86ab7dff, (q31_t)0x28c1b666, (q31_t)0x86a97db0, (q31_t)0x28bbc192, (q31_t)0x86a77dab, - (q31_t)0x28b5cca5, (q31_t)0x86a57df2, (q31_t)0x28afd7a0, (q31_t)0x86a37e83, (q31_t)0x28a9e281, (q31_t)0x86a17f5f, (q31_t)0x28a3ed49, (q31_t)0x869f8086, - (q31_t)0x289df7f8, (q31_t)0x869d81f8, (q31_t)0x2898028e, (q31_t)0x869b83b4, (q31_t)0x28920d0a, (q31_t)0x869985bc, (q31_t)0x288c176e, (q31_t)0x8697880f, - (q31_t)0x288621b9, (q31_t)0x86958aac, (q31_t)0x28802beb, (q31_t)0x86938d94, (q31_t)0x287a3604, (q31_t)0x869190c7, (q31_t)0x28744004, (q31_t)0x868f9445, - (q31_t)0x286e49ea, (q31_t)0x868d980e, (q31_t)0x286853b8, (q31_t)0x868b9c22, (q31_t)0x28625d6d, (q31_t)0x8689a081, (q31_t)0x285c670a, (q31_t)0x8687a52b, - (q31_t)0x2856708d, (q31_t)0x8685aa20, (q31_t)0x285079f7, (q31_t)0x8683af5f, (q31_t)0x284a8349, (q31_t)0x8681b4ea, (q31_t)0x28448c81, (q31_t)0x867fbabf, - (q31_t)0x283e95a1, (q31_t)0x867dc0e0, (q31_t)0x28389ea8, (q31_t)0x867bc74b, (q31_t)0x2832a796, (q31_t)0x8679ce01, (q31_t)0x282cb06c, (q31_t)0x8677d503, - (q31_t)0x2826b928, (q31_t)0x8675dc4f, (q31_t)0x2820c1cc, (q31_t)0x8673e3e6, (q31_t)0x281aca57, (q31_t)0x8671ebc8, (q31_t)0x2814d2c9, (q31_t)0x866ff3f6, - (q31_t)0x280edb23, (q31_t)0x866dfc6e, (q31_t)0x2808e364, (q31_t)0x866c0531, (q31_t)0x2802eb8c, (q31_t)0x866a0e3f, (q31_t)0x27fcf39c, (q31_t)0x86681798, - (q31_t)0x27f6fb92, (q31_t)0x8666213c, (q31_t)0x27f10371, (q31_t)0x86642b2c, (q31_t)0x27eb0b36, (q31_t)0x86623566, (q31_t)0x27e512e3, (q31_t)0x86603feb, - (q31_t)0x27df1a77, (q31_t)0x865e4abb, (q31_t)0x27d921f3, (q31_t)0x865c55d7, (q31_t)0x27d32956, (q31_t)0x865a613d, (q31_t)0x27cd30a1, (q31_t)0x86586cee, - (q31_t)0x27c737d3, (q31_t)0x865678eb, (q31_t)0x27c13eec, (q31_t)0x86548532, (q31_t)0x27bb45ed, (q31_t)0x865291c4, (q31_t)0x27b54cd6, (q31_t)0x86509ea2, - (q31_t)0x27af53a6, (q31_t)0x864eabcb, (q31_t)0x27a95a5d, (q31_t)0x864cb93e, (q31_t)0x27a360fc, (q31_t)0x864ac6fd, (q31_t)0x279d6783, (q31_t)0x8648d507, - (q31_t)0x27976df1, (q31_t)0x8646e35c, (q31_t)0x27917447, (q31_t)0x8644f1fc, (q31_t)0x278b7a84, (q31_t)0x864300e7, (q31_t)0x278580a9, (q31_t)0x8641101d, - (q31_t)0x277f86b5, (q31_t)0x863f1f9e, (q31_t)0x27798caa, (q31_t)0x863d2f6b, (q31_t)0x27739285, (q31_t)0x863b3f82, (q31_t)0x276d9849, (q31_t)0x86394fe5, - (q31_t)0x27679df4, (q31_t)0x86376092, (q31_t)0x2761a387, (q31_t)0x8635718b, (q31_t)0x275ba901, (q31_t)0x863382cf, (q31_t)0x2755ae64, (q31_t)0x8631945e, - (q31_t)0x274fb3ae, (q31_t)0x862fa638, (q31_t)0x2749b8e0, (q31_t)0x862db85e, (q31_t)0x2743bdf9, (q31_t)0x862bcace, (q31_t)0x273dc2fa, (q31_t)0x8629dd8a, - (q31_t)0x2737c7e3, (q31_t)0x8627f091, (q31_t)0x2731ccb4, (q31_t)0x862603e3, (q31_t)0x272bd16d, (q31_t)0x86241780, (q31_t)0x2725d60e, (q31_t)0x86222b68, - (q31_t)0x271fda96, (q31_t)0x86203f9c, (q31_t)0x2719df06, (q31_t)0x861e541a, (q31_t)0x2713e35f, (q31_t)0x861c68e4, (q31_t)0x270de79f, (q31_t)0x861a7df9, - (q31_t)0x2707ebc7, (q31_t)0x86189359, (q31_t)0x2701efd7, (q31_t)0x8616a905, (q31_t)0x26fbf3ce, (q31_t)0x8614befb, (q31_t)0x26f5f7ae, (q31_t)0x8612d53d, - (q31_t)0x26effb76, (q31_t)0x8610ebca, (q31_t)0x26e9ff26, (q31_t)0x860f02a3, (q31_t)0x26e402bd, (q31_t)0x860d19c6, (q31_t)0x26de063d, (q31_t)0x860b3135, - (q31_t)0x26d809a5, (q31_t)0x860948ef, (q31_t)0x26d20cf5, (q31_t)0x860760f4, (q31_t)0x26cc102d, (q31_t)0x86057944, (q31_t)0x26c6134d, (q31_t)0x860391e0, - (q31_t)0x26c01655, (q31_t)0x8601aac7, (q31_t)0x26ba1945, (q31_t)0x85ffc3f9, (q31_t)0x26b41c1d, (q31_t)0x85fddd76, (q31_t)0x26ae1edd, (q31_t)0x85fbf73f, - (q31_t)0x26a82186, (q31_t)0x85fa1153, (q31_t)0x26a22416, (q31_t)0x85f82bb2, (q31_t)0x269c268f, (q31_t)0x85f6465c, (q31_t)0x269628f0, (q31_t)0x85f46152, - (q31_t)0x26902b39, (q31_t)0x85f27c93, (q31_t)0x268a2d6b, (q31_t)0x85f09820, (q31_t)0x26842f84, (q31_t)0x85eeb3f7, (q31_t)0x267e3186, (q31_t)0x85ecd01a, - (q31_t)0x26783370, (q31_t)0x85eaec88, (q31_t)0x26723543, (q31_t)0x85e90942, (q31_t)0x266c36fe, (q31_t)0x85e72647, (q31_t)0x266638a1, (q31_t)0x85e54397, - (q31_t)0x26603a2c, (q31_t)0x85e36132, (q31_t)0x265a3b9f, (q31_t)0x85e17f19, (q31_t)0x26543cfb, (q31_t)0x85df9d4b, (q31_t)0x264e3e40, (q31_t)0x85ddbbc9, - (q31_t)0x26483f6c, (q31_t)0x85dbda91, (q31_t)0x26424082, (q31_t)0x85d9f9a5, (q31_t)0x263c417f, (q31_t)0x85d81905, (q31_t)0x26364265, (q31_t)0x85d638b0, - (q31_t)0x26304333, (q31_t)0x85d458a6, (q31_t)0x262a43ea, (q31_t)0x85d278e7, (q31_t)0x26244489, (q31_t)0x85d09974, (q31_t)0x261e4511, (q31_t)0x85ceba4d, - (q31_t)0x26184581, (q31_t)0x85ccdb70, (q31_t)0x261245da, (q31_t)0x85cafcdf, (q31_t)0x260c461b, (q31_t)0x85c91e9a, (q31_t)0x26064645, (q31_t)0x85c740a0, - (q31_t)0x26004657, (q31_t)0x85c562f1, (q31_t)0x25fa4652, (q31_t)0x85c3858d, (q31_t)0x25f44635, (q31_t)0x85c1a875, (q31_t)0x25ee4601, (q31_t)0x85bfcba9, - (q31_t)0x25e845b6, (q31_t)0x85bdef28, (q31_t)0x25e24553, (q31_t)0x85bc12f2, (q31_t)0x25dc44d9, (q31_t)0x85ba3707, (q31_t)0x25d64447, (q31_t)0x85b85b68, - (q31_t)0x25d0439f, (q31_t)0x85b68015, (q31_t)0x25ca42de, (q31_t)0x85b4a50d, (q31_t)0x25c44207, (q31_t)0x85b2ca50, (q31_t)0x25be4118, (q31_t)0x85b0efdf, - (q31_t)0x25b84012, (q31_t)0x85af15b9, (q31_t)0x25b23ef5, (q31_t)0x85ad3bdf, (q31_t)0x25ac3dc0, (q31_t)0x85ab6250, (q31_t)0x25a63c74, (q31_t)0x85a9890d, - (q31_t)0x25a03b11, (q31_t)0x85a7b015, (q31_t)0x259a3997, (q31_t)0x85a5d768, (q31_t)0x25943806, (q31_t)0x85a3ff07, (q31_t)0x258e365d, (q31_t)0x85a226f2, - (q31_t)0x2588349d, (q31_t)0x85a04f28, (q31_t)0x258232c6, (q31_t)0x859e77a9, (q31_t)0x257c30d8, (q31_t)0x859ca076, (q31_t)0x25762ed3, (q31_t)0x859ac98f, - (q31_t)0x25702cb7, (q31_t)0x8598f2f3, (q31_t)0x256a2a83, (q31_t)0x85971ca2, (q31_t)0x25642839, (q31_t)0x8595469d, (q31_t)0x255e25d7, (q31_t)0x859370e4, - (q31_t)0x2558235f, (q31_t)0x85919b76, (q31_t)0x255220cf, (q31_t)0x858fc653, (q31_t)0x254c1e28, (q31_t)0x858df17c, (q31_t)0x25461b6b, (q31_t)0x858c1cf1, - (q31_t)0x25401896, (q31_t)0x858a48b1, (q31_t)0x253a15aa, (q31_t)0x858874bd, (q31_t)0x253412a8, (q31_t)0x8586a114, (q31_t)0x252e0f8e, (q31_t)0x8584cdb7, - (q31_t)0x25280c5e, (q31_t)0x8582faa5, (q31_t)0x25220916, (q31_t)0x858127df, (q31_t)0x251c05b8, (q31_t)0x857f5564, (q31_t)0x25160243, (q31_t)0x857d8335, - (q31_t)0x250ffeb7, (q31_t)0x857bb152, (q31_t)0x2509fb14, (q31_t)0x8579dfba, (q31_t)0x2503f75a, (q31_t)0x85780e6e, (q31_t)0x24fdf389, (q31_t)0x85763d6d, - (q31_t)0x24f7efa2, (q31_t)0x85746cb8, (q31_t)0x24f1eba4, (q31_t)0x85729c4e, (q31_t)0x24ebe78f, (q31_t)0x8570cc30, (q31_t)0x24e5e363, (q31_t)0x856efc5e, - (q31_t)0x24dfdf20, (q31_t)0x856d2cd7, (q31_t)0x24d9dac7, (q31_t)0x856b5d9c, (q31_t)0x24d3d657, (q31_t)0x85698ead, (q31_t)0x24cdd1d0, (q31_t)0x8567c009, - (q31_t)0x24c7cd33, (q31_t)0x8565f1b0, (q31_t)0x24c1c87f, (q31_t)0x856423a4, (q31_t)0x24bbc3b4, (q31_t)0x856255e3, (q31_t)0x24b5bed2, (q31_t)0x8560886d, - (q31_t)0x24afb9da, (q31_t)0x855ebb44, (q31_t)0x24a9b4cb, (q31_t)0x855cee66, (q31_t)0x24a3afa6, (q31_t)0x855b21d3, (q31_t)0x249daa6a, (q31_t)0x8559558c, - (q31_t)0x2497a517, (q31_t)0x85578991, (q31_t)0x24919fae, (q31_t)0x8555bde2, (q31_t)0x248b9a2f, (q31_t)0x8553f27e, (q31_t)0x24859498, (q31_t)0x85522766, - (q31_t)0x247f8eec, (q31_t)0x85505c99, (q31_t)0x24798928, (q31_t)0x854e9219, (q31_t)0x2473834f, (q31_t)0x854cc7e3, (q31_t)0x246d7d5e, (q31_t)0x854afdfa, - (q31_t)0x24677758, (q31_t)0x8549345c, (q31_t)0x2461713a, (q31_t)0x85476b0a, (q31_t)0x245b6b07, (q31_t)0x8545a204, (q31_t)0x245564bd, (q31_t)0x8543d949, - (q31_t)0x244f5e5c, (q31_t)0x854210db, (q31_t)0x244957e5, (q31_t)0x854048b7, (q31_t)0x24435158, (q31_t)0x853e80e0, (q31_t)0x243d4ab4, (q31_t)0x853cb954, - (q31_t)0x243743fa, (q31_t)0x853af214, (q31_t)0x24313d2a, (q31_t)0x85392b20, (q31_t)0x242b3644, (q31_t)0x85376477, (q31_t)0x24252f47, (q31_t)0x85359e1a, - (q31_t)0x241f2833, (q31_t)0x8533d809, (q31_t)0x2419210a, (q31_t)0x85321244, (q31_t)0x241319ca, (q31_t)0x85304cca, (q31_t)0x240d1274, (q31_t)0x852e879d, - (q31_t)0x24070b08, (q31_t)0x852cc2bb, (q31_t)0x24010385, (q31_t)0x852afe24, (q31_t)0x23fafbec, (q31_t)0x852939da, (q31_t)0x23f4f43e, (q31_t)0x852775db, - (q31_t)0x23eeec78, (q31_t)0x8525b228, (q31_t)0x23e8e49d, (q31_t)0x8523eec1, (q31_t)0x23e2dcac, (q31_t)0x85222ba5, (q31_t)0x23dcd4a4, (q31_t)0x852068d6, - (q31_t)0x23d6cc87, (q31_t)0x851ea652, (q31_t)0x23d0c453, (q31_t)0x851ce41a, (q31_t)0x23cabc09, (q31_t)0x851b222e, (q31_t)0x23c4b3a9, (q31_t)0x8519608d, - (q31_t)0x23beab33, (q31_t)0x85179f39, (q31_t)0x23b8a2a7, (q31_t)0x8515de30, (q31_t)0x23b29a05, (q31_t)0x85141d73, (q31_t)0x23ac914d, (q31_t)0x85125d02, - (q31_t)0x23a6887f, (q31_t)0x85109cdd, (q31_t)0x23a07f9a, (q31_t)0x850edd03, (q31_t)0x239a76a0, (q31_t)0x850d1d75, (q31_t)0x23946d90, (q31_t)0x850b5e34, - (q31_t)0x238e646a, (q31_t)0x85099f3e, (q31_t)0x23885b2e, (q31_t)0x8507e094, (q31_t)0x238251dd, (q31_t)0x85062235, (q31_t)0x237c4875, (q31_t)0x85046423, - (q31_t)0x23763ef7, (q31_t)0x8502a65c, (q31_t)0x23703564, (q31_t)0x8500e8e2, (q31_t)0x236a2bba, (q31_t)0x84ff2bb3, (q31_t)0x236421fb, (q31_t)0x84fd6ed0, - (q31_t)0x235e1826, (q31_t)0x84fbb239, (q31_t)0x23580e3b, (q31_t)0x84f9f5ee, (q31_t)0x2352043b, (q31_t)0x84f839ee, (q31_t)0x234bfa24, (q31_t)0x84f67e3b, - (q31_t)0x2345eff8, (q31_t)0x84f4c2d4, (q31_t)0x233fe5b6, (q31_t)0x84f307b8, (q31_t)0x2339db5e, (q31_t)0x84f14ce8, (q31_t)0x2333d0f1, (q31_t)0x84ef9265, - (q31_t)0x232dc66d, (q31_t)0x84edd82d, (q31_t)0x2327bbd5, (q31_t)0x84ec1e41, (q31_t)0x2321b126, (q31_t)0x84ea64a1, (q31_t)0x231ba662, (q31_t)0x84e8ab4d, - (q31_t)0x23159b88, (q31_t)0x84e6f244, (q31_t)0x230f9098, (q31_t)0x84e53988, (q31_t)0x23098593, (q31_t)0x84e38118, (q31_t)0x23037a78, (q31_t)0x84e1c8f3, - (q31_t)0x22fd6f48, (q31_t)0x84e0111b, (q31_t)0x22f76402, (q31_t)0x84de598f, (q31_t)0x22f158a7, (q31_t)0x84dca24e, (q31_t)0x22eb4d36, (q31_t)0x84daeb5a, - (q31_t)0x22e541af, (q31_t)0x84d934b1, (q31_t)0x22df3613, (q31_t)0x84d77e54, (q31_t)0x22d92a61, (q31_t)0x84d5c844, (q31_t)0x22d31e9a, (q31_t)0x84d4127f, - (q31_t)0x22cd12bd, (q31_t)0x84d25d06, (q31_t)0x22c706cb, (q31_t)0x84d0a7da, (q31_t)0x22c0fac4, (q31_t)0x84cef2f9, (q31_t)0x22baeea7, (q31_t)0x84cd3e64, - (q31_t)0x22b4e274, (q31_t)0x84cb8a1b, (q31_t)0x22aed62c, (q31_t)0x84c9d61f, (q31_t)0x22a8c9cf, (q31_t)0x84c8226e, (q31_t)0x22a2bd5d, (q31_t)0x84c66f09, - (q31_t)0x229cb0d5, (q31_t)0x84c4bbf0, (q31_t)0x2296a437, (q31_t)0x84c30924, (q31_t)0x22909785, (q31_t)0x84c156a3, (q31_t)0x228a8abd, (q31_t)0x84bfa46e, - (q31_t)0x22847de0, (q31_t)0x84bdf286, (q31_t)0x227e70ed, (q31_t)0x84bc40e9, (q31_t)0x227863e5, (q31_t)0x84ba8f98, (q31_t)0x227256c8, (q31_t)0x84b8de94, - (q31_t)0x226c4996, (q31_t)0x84b72ddb, (q31_t)0x22663c4e, (q31_t)0x84b57d6f, (q31_t)0x22602ef1, (q31_t)0x84b3cd4f, (q31_t)0x225a217f, (q31_t)0x84b21d7a, - (q31_t)0x225413f8, (q31_t)0x84b06df2, (q31_t)0x224e065c, (q31_t)0x84aebeb6, (q31_t)0x2247f8aa, (q31_t)0x84ad0fc6, (q31_t)0x2241eae3, (q31_t)0x84ab6122, - (q31_t)0x223bdd08, (q31_t)0x84a9b2ca, (q31_t)0x2235cf17, (q31_t)0x84a804be, (q31_t)0x222fc111, (q31_t)0x84a656fe, (q31_t)0x2229b2f6, (q31_t)0x84a4a98a, - (q31_t)0x2223a4c5, (q31_t)0x84a2fc62, (q31_t)0x221d9680, (q31_t)0x84a14f87, (q31_t)0x22178826, (q31_t)0x849fa2f7, (q31_t)0x221179b7, (q31_t)0x849df6b4, - (q31_t)0x220b6b32, (q31_t)0x849c4abd, (q31_t)0x22055c99, (q31_t)0x849a9f12, (q31_t)0x21ff4dea, (q31_t)0x8498f3b3, (q31_t)0x21f93f27, (q31_t)0x849748a0, - (q31_t)0x21f3304f, (q31_t)0x84959dd9, (q31_t)0x21ed2162, (q31_t)0x8493f35e, (q31_t)0x21e71260, (q31_t)0x84924930, (q31_t)0x21e10349, (q31_t)0x84909f4e, - (q31_t)0x21daf41d, (q31_t)0x848ef5b7, (q31_t)0x21d4e4dc, (q31_t)0x848d4c6d, (q31_t)0x21ced586, (q31_t)0x848ba36f, (q31_t)0x21c8c61c, (q31_t)0x8489fabe, - (q31_t)0x21c2b69c, (q31_t)0x84885258, (q31_t)0x21bca708, (q31_t)0x8486aa3e, (q31_t)0x21b6975f, (q31_t)0x84850271, (q31_t)0x21b087a1, (q31_t)0x84835af0, - (q31_t)0x21aa77cf, (q31_t)0x8481b3bb, (q31_t)0x21a467e7, (q31_t)0x84800cd2, (q31_t)0x219e57eb, (q31_t)0x847e6636, (q31_t)0x219847da, (q31_t)0x847cbfe5, - (q31_t)0x219237b5, (q31_t)0x847b19e1, (q31_t)0x218c277a, (q31_t)0x84797429, (q31_t)0x2186172b, (q31_t)0x8477cebd, (q31_t)0x218006c8, (q31_t)0x8476299e, - (q31_t)0x2179f64f, (q31_t)0x847484ca, (q31_t)0x2173e5c2, (q31_t)0x8472e043, (q31_t)0x216dd521, (q31_t)0x84713c08, (q31_t)0x2167c46b, (q31_t)0x846f9819, - (q31_t)0x2161b3a0, (q31_t)0x846df477, (q31_t)0x215ba2c0, (q31_t)0x846c5120, (q31_t)0x215591cc, (q31_t)0x846aae16, (q31_t)0x214f80c4, (q31_t)0x84690b58, - (q31_t)0x21496fa7, (q31_t)0x846768e7, (q31_t)0x21435e75, (q31_t)0x8465c6c1, (q31_t)0x213d4d2f, (q31_t)0x846424e8, (q31_t)0x21373bd4, (q31_t)0x8462835b, - (q31_t)0x21312a65, (q31_t)0x8460e21a, (q31_t)0x212b18e1, (q31_t)0x845f4126, (q31_t)0x21250749, (q31_t)0x845da07e, (q31_t)0x211ef59d, (q31_t)0x845c0022, - (q31_t)0x2118e3dc, (q31_t)0x845a6012, (q31_t)0x2112d206, (q31_t)0x8458c04f, (q31_t)0x210cc01d, (q31_t)0x845720d8, (q31_t)0x2106ae1e, (q31_t)0x845581ad, - (q31_t)0x21009c0c, (q31_t)0x8453e2cf, (q31_t)0x20fa89e5, (q31_t)0x8452443d, (q31_t)0x20f477aa, (q31_t)0x8450a5f7, (q31_t)0x20ee655a, (q31_t)0x844f07fd, - (q31_t)0x20e852f6, (q31_t)0x844d6a50, (q31_t)0x20e2407e, (q31_t)0x844bccef, (q31_t)0x20dc2df2, (q31_t)0x844a2fda, (q31_t)0x20d61b51, (q31_t)0x84489311, - (q31_t)0x20d0089c, (q31_t)0x8446f695, (q31_t)0x20c9f5d3, (q31_t)0x84455a66, (q31_t)0x20c3e2f5, (q31_t)0x8443be82, (q31_t)0x20bdd003, (q31_t)0x844222eb, - (q31_t)0x20b7bcfe, (q31_t)0x844087a0, (q31_t)0x20b1a9e4, (q31_t)0x843eeca2, (q31_t)0x20ab96b5, (q31_t)0x843d51f0, (q31_t)0x20a58373, (q31_t)0x843bb78a, - (q31_t)0x209f701c, (q31_t)0x843a1d70, (q31_t)0x20995cb2, (q31_t)0x843883a3, (q31_t)0x20934933, (q31_t)0x8436ea23, (q31_t)0x208d35a0, (q31_t)0x843550ee, - (q31_t)0x208721f9, (q31_t)0x8433b806, (q31_t)0x20810e3e, (q31_t)0x84321f6b, (q31_t)0x207afa6f, (q31_t)0x8430871b, (q31_t)0x2074e68c, (q31_t)0x842eef18, - (q31_t)0x206ed295, (q31_t)0x842d5762, (q31_t)0x2068be8a, (q31_t)0x842bbff8, (q31_t)0x2062aa6b, (q31_t)0x842a28da, (q31_t)0x205c9638, (q31_t)0x84289209, - (q31_t)0x205681f1, (q31_t)0x8426fb84, (q31_t)0x20506d96, (q31_t)0x8425654b, (q31_t)0x204a5927, (q31_t)0x8423cf5f, (q31_t)0x204444a4, (q31_t)0x842239bf, - (q31_t)0x203e300d, (q31_t)0x8420a46c, (q31_t)0x20381b63, (q31_t)0x841f0f65, (q31_t)0x203206a4, (q31_t)0x841d7aaa, (q31_t)0x202bf1d2, (q31_t)0x841be63c, - (q31_t)0x2025dcec, (q31_t)0x841a521a, (q31_t)0x201fc7f2, (q31_t)0x8418be45, (q31_t)0x2019b2e4, (q31_t)0x84172abc, (q31_t)0x20139dc2, (q31_t)0x84159780, - (q31_t)0x200d888d, (q31_t)0x84140490, (q31_t)0x20077344, (q31_t)0x841271ec, (q31_t)0x20015de7, (q31_t)0x8410df95, (q31_t)0x1ffb4876, (q31_t)0x840f4d8a, - (q31_t)0x1ff532f2, (q31_t)0x840dbbcc, (q31_t)0x1fef1d59, (q31_t)0x840c2a5a, (q31_t)0x1fe907ae, (q31_t)0x840a9935, (q31_t)0x1fe2f1ee, (q31_t)0x8409085c, - (q31_t)0x1fdcdc1b, (q31_t)0x840777d0, (q31_t)0x1fd6c634, (q31_t)0x8405e790, (q31_t)0x1fd0b03a, (q31_t)0x8404579d, (q31_t)0x1fca9a2b, (q31_t)0x8402c7f6, - (q31_t)0x1fc4840a, (q31_t)0x8401389b, (q31_t)0x1fbe6dd4, (q31_t)0x83ffa98d, (q31_t)0x1fb8578b, (q31_t)0x83fe1acc, (q31_t)0x1fb2412f, (q31_t)0x83fc8c57, - (q31_t)0x1fac2abf, (q31_t)0x83fafe2e, (q31_t)0x1fa6143b, (q31_t)0x83f97052, (q31_t)0x1f9ffda4, (q31_t)0x83f7e2c3, (q31_t)0x1f99e6fa, (q31_t)0x83f65580, - (q31_t)0x1f93d03c, (q31_t)0x83f4c889, (q31_t)0x1f8db96a, (q31_t)0x83f33bdf, (q31_t)0x1f87a285, (q31_t)0x83f1af82, (q31_t)0x1f818b8d, (q31_t)0x83f02371, - (q31_t)0x1f7b7481, (q31_t)0x83ee97ad, (q31_t)0x1f755d61, (q31_t)0x83ed0c35, (q31_t)0x1f6f462f, (q31_t)0x83eb810a, (q31_t)0x1f692ee9, (q31_t)0x83e9f62b, - (q31_t)0x1f63178f, (q31_t)0x83e86b99, (q31_t)0x1f5d0022, (q31_t)0x83e6e153, (q31_t)0x1f56e8a2, (q31_t)0x83e5575a, (q31_t)0x1f50d10e, (q31_t)0x83e3cdad, - (q31_t)0x1f4ab968, (q31_t)0x83e2444d, (q31_t)0x1f44a1ad, (q31_t)0x83e0bb3a, (q31_t)0x1f3e89e0, (q31_t)0x83df3273, (q31_t)0x1f3871ff, (q31_t)0x83dda9f9, - (q31_t)0x1f325a0b, (q31_t)0x83dc21cb, (q31_t)0x1f2c4204, (q31_t)0x83da99ea, (q31_t)0x1f2629ea, (q31_t)0x83d91255, (q31_t)0x1f2011bc, (q31_t)0x83d78b0d, - (q31_t)0x1f19f97b, (q31_t)0x83d60412, (q31_t)0x1f13e127, (q31_t)0x83d47d63, (q31_t)0x1f0dc8c0, (q31_t)0x83d2f701, (q31_t)0x1f07b045, (q31_t)0x83d170eb, - (q31_t)0x1f0197b8, (q31_t)0x83cfeb22, (q31_t)0x1efb7f17, (q31_t)0x83ce65a6, (q31_t)0x1ef56664, (q31_t)0x83cce076, (q31_t)0x1eef4d9d, (q31_t)0x83cb5b93, - (q31_t)0x1ee934c3, (q31_t)0x83c9d6fc, (q31_t)0x1ee31bd6, (q31_t)0x83c852b2, (q31_t)0x1edd02d6, (q31_t)0x83c6ceb5, (q31_t)0x1ed6e9c3, (q31_t)0x83c54b04, - (q31_t)0x1ed0d09d, (q31_t)0x83c3c7a0, (q31_t)0x1ecab763, (q31_t)0x83c24488, (q31_t)0x1ec49e17, (q31_t)0x83c0c1be, (q31_t)0x1ebe84b8, (q31_t)0x83bf3f3f, - (q31_t)0x1eb86b46, (q31_t)0x83bdbd0e, (q31_t)0x1eb251c1, (q31_t)0x83bc3b29, (q31_t)0x1eac3829, (q31_t)0x83bab991, (q31_t)0x1ea61e7e, (q31_t)0x83b93845, - (q31_t)0x1ea004c1, (q31_t)0x83b7b746, (q31_t)0x1e99eaf0, (q31_t)0x83b63694, (q31_t)0x1e93d10c, (q31_t)0x83b4b62e, (q31_t)0x1e8db716, (q31_t)0x83b33616, - (q31_t)0x1e879d0d, (q31_t)0x83b1b649, (q31_t)0x1e8182f1, (q31_t)0x83b036ca, (q31_t)0x1e7b68c2, (q31_t)0x83aeb797, (q31_t)0x1e754e80, (q31_t)0x83ad38b1, - (q31_t)0x1e6f342c, (q31_t)0x83abba17, (q31_t)0x1e6919c4, (q31_t)0x83aa3bca, (q31_t)0x1e62ff4a, (q31_t)0x83a8bdca, (q31_t)0x1e5ce4be, (q31_t)0x83a74017, - (q31_t)0x1e56ca1e, (q31_t)0x83a5c2b0, (q31_t)0x1e50af6c, (q31_t)0x83a44596, (q31_t)0x1e4a94a7, (q31_t)0x83a2c8c9, (q31_t)0x1e4479cf, (q31_t)0x83a14c48, - (q31_t)0x1e3e5ee5, (q31_t)0x839fd014, (q31_t)0x1e3843e8, (q31_t)0x839e542d, (q31_t)0x1e3228d9, (q31_t)0x839cd893, (q31_t)0x1e2c0db6, (q31_t)0x839b5d45, - (q31_t)0x1e25f282, (q31_t)0x8399e244, (q31_t)0x1e1fd73a, (q31_t)0x83986790, (q31_t)0x1e19bbe0, (q31_t)0x8396ed29, (q31_t)0x1e13a074, (q31_t)0x8395730e, - (q31_t)0x1e0d84f5, (q31_t)0x8393f940, (q31_t)0x1e076963, (q31_t)0x83927fbf, (q31_t)0x1e014dbf, (q31_t)0x8391068a, (q31_t)0x1dfb3208, (q31_t)0x838f8da2, - (q31_t)0x1df5163f, (q31_t)0x838e1507, (q31_t)0x1deefa63, (q31_t)0x838c9cb9, (q31_t)0x1de8de75, (q31_t)0x838b24b8, (q31_t)0x1de2c275, (q31_t)0x8389ad03, - (q31_t)0x1ddca662, (q31_t)0x8388359b, (q31_t)0x1dd68a3c, (q31_t)0x8386be80, (q31_t)0x1dd06e04, (q31_t)0x838547b2, (q31_t)0x1dca51ba, (q31_t)0x8383d130, - (q31_t)0x1dc4355e, (q31_t)0x83825afb, (q31_t)0x1dbe18ef, (q31_t)0x8380e513, (q31_t)0x1db7fc6d, (q31_t)0x837f6f78, (q31_t)0x1db1dfda, (q31_t)0x837dfa2a, - (q31_t)0x1dabc334, (q31_t)0x837c8528, (q31_t)0x1da5a67c, (q31_t)0x837b1074, (q31_t)0x1d9f89b1, (q31_t)0x83799c0c, (q31_t)0x1d996cd4, (q31_t)0x837827f0, - (q31_t)0x1d934fe5, (q31_t)0x8376b422, (q31_t)0x1d8d32e4, (q31_t)0x837540a1, (q31_t)0x1d8715d0, (q31_t)0x8373cd6c, (q31_t)0x1d80f8ab, (q31_t)0x83725a84, - (q31_t)0x1d7adb73, (q31_t)0x8370e7e9, (q31_t)0x1d74be29, (q31_t)0x836f759b, (q31_t)0x1d6ea0cc, (q31_t)0x836e039a, (q31_t)0x1d68835e, (q31_t)0x836c91e5, - (q31_t)0x1d6265dd, (q31_t)0x836b207d, (q31_t)0x1d5c484b, (q31_t)0x8369af63, (q31_t)0x1d562aa6, (q31_t)0x83683e95, (q31_t)0x1d500cef, (q31_t)0x8366ce14, - (q31_t)0x1d49ef26, (q31_t)0x83655ddf, (q31_t)0x1d43d14b, (q31_t)0x8363edf8, (q31_t)0x1d3db35e, (q31_t)0x83627e5d, (q31_t)0x1d37955e, (q31_t)0x83610f10, - (q31_t)0x1d31774d, (q31_t)0x835fa00f, (q31_t)0x1d2b592a, (q31_t)0x835e315b, (q31_t)0x1d253af5, (q31_t)0x835cc2f4, (q31_t)0x1d1f1cae, (q31_t)0x835b54da, - (q31_t)0x1d18fe54, (q31_t)0x8359e70d, (q31_t)0x1d12dfe9, (q31_t)0x8358798c, (q31_t)0x1d0cc16c, (q31_t)0x83570c59, (q31_t)0x1d06a2dd, (q31_t)0x83559f72, - (q31_t)0x1d00843d, (q31_t)0x835432d8, (q31_t)0x1cfa658a, (q31_t)0x8352c68c, (q31_t)0x1cf446c5, (q31_t)0x83515a8c, (q31_t)0x1cee27ef, (q31_t)0x834feed9, - (q31_t)0x1ce80906, (q31_t)0x834e8373, (q31_t)0x1ce1ea0c, (q31_t)0x834d185a, (q31_t)0x1cdbcb00, (q31_t)0x834bad8e, (q31_t)0x1cd5abe3, (q31_t)0x834a430e, - (q31_t)0x1ccf8cb3, (q31_t)0x8348d8dc, (q31_t)0x1cc96d72, (q31_t)0x83476ef6, (q31_t)0x1cc34e1f, (q31_t)0x8346055e, (q31_t)0x1cbd2eba, (q31_t)0x83449c12, - (q31_t)0x1cb70f43, (q31_t)0x83433314, (q31_t)0x1cb0efbb, (q31_t)0x8341ca62, (q31_t)0x1caad021, (q31_t)0x834061fd, (q31_t)0x1ca4b075, (q31_t)0x833ef9e6, - (q31_t)0x1c9e90b8, (q31_t)0x833d921b, (q31_t)0x1c9870e9, (q31_t)0x833c2a9d, (q31_t)0x1c925109, (q31_t)0x833ac36c, (q31_t)0x1c8c3116, (q31_t)0x83395c88, - (q31_t)0x1c861113, (q31_t)0x8337f5f1, (q31_t)0x1c7ff0fd, (q31_t)0x83368fa7, (q31_t)0x1c79d0d6, (q31_t)0x833529aa, (q31_t)0x1c73b09d, (q31_t)0x8333c3fa, - (q31_t)0x1c6d9053, (q31_t)0x83325e97, (q31_t)0x1c676ff8, (q31_t)0x8330f981, (q31_t)0x1c614f8b, (q31_t)0x832f94b8, (q31_t)0x1c5b2f0c, (q31_t)0x832e303c, - (q31_t)0x1c550e7c, (q31_t)0x832ccc0d, (q31_t)0x1c4eedda, (q31_t)0x832b682b, (q31_t)0x1c48cd27, (q31_t)0x832a0496, (q31_t)0x1c42ac62, (q31_t)0x8328a14d, - (q31_t)0x1c3c8b8c, (q31_t)0x83273e52, (q31_t)0x1c366aa5, (q31_t)0x8325dba4, (q31_t)0x1c3049ac, (q31_t)0x83247943, (q31_t)0x1c2a28a2, (q31_t)0x8323172f, - (q31_t)0x1c240786, (q31_t)0x8321b568, (q31_t)0x1c1de659, (q31_t)0x832053ee, (q31_t)0x1c17c51b, (q31_t)0x831ef2c1, (q31_t)0x1c11a3cb, (q31_t)0x831d91e1, - (q31_t)0x1c0b826a, (q31_t)0x831c314e, (q31_t)0x1c0560f8, (q31_t)0x831ad109, (q31_t)0x1bff3f75, (q31_t)0x83197110, (q31_t)0x1bf91de0, (q31_t)0x83181164, - (q31_t)0x1bf2fc3a, (q31_t)0x8316b205, (q31_t)0x1becda83, (q31_t)0x831552f4, (q31_t)0x1be6b8ba, (q31_t)0x8313f42f, (q31_t)0x1be096e0, (q31_t)0x831295b7, - (q31_t)0x1bda74f6, (q31_t)0x8311378d, (q31_t)0x1bd452f9, (q31_t)0x830fd9af, (q31_t)0x1bce30ec, (q31_t)0x830e7c1f, (q31_t)0x1bc80ece, (q31_t)0x830d1edc, - (q31_t)0x1bc1ec9e, (q31_t)0x830bc1e6, (q31_t)0x1bbbca5e, (q31_t)0x830a653c, (q31_t)0x1bb5a80c, (q31_t)0x830908e0, (q31_t)0x1baf85a9, (q31_t)0x8307acd1, - (q31_t)0x1ba96335, (q31_t)0x83065110, (q31_t)0x1ba340b0, (q31_t)0x8304f59b, (q31_t)0x1b9d1e1a, (q31_t)0x83039a73, (q31_t)0x1b96fb73, (q31_t)0x83023f98, - (q31_t)0x1b90d8bb, (q31_t)0x8300e50b, (q31_t)0x1b8ab5f2, (q31_t)0x82ff8acb, (q31_t)0x1b849317, (q31_t)0x82fe30d7, (q31_t)0x1b7e702c, (q31_t)0x82fcd731, - (q31_t)0x1b784d30, (q31_t)0x82fb7dd8, (q31_t)0x1b722a23, (q31_t)0x82fa24cc, (q31_t)0x1b6c0705, (q31_t)0x82f8cc0d, (q31_t)0x1b65e3d7, (q31_t)0x82f7739c, - (q31_t)0x1b5fc097, (q31_t)0x82f61b77, (q31_t)0x1b599d46, (q31_t)0x82f4c3a0, (q31_t)0x1b5379e5, (q31_t)0x82f36c15, (q31_t)0x1b4d5672, (q31_t)0x82f214d8, - (q31_t)0x1b4732ef, (q31_t)0x82f0bde8, (q31_t)0x1b410f5b, (q31_t)0x82ef6745, (q31_t)0x1b3aebb6, (q31_t)0x82ee10ef, (q31_t)0x1b34c801, (q31_t)0x82ecbae7, - (q31_t)0x1b2ea43a, (q31_t)0x82eb652b, (q31_t)0x1b288063, (q31_t)0x82ea0fbd, (q31_t)0x1b225c7b, (q31_t)0x82e8ba9c, (q31_t)0x1b1c3883, (q31_t)0x82e765c8, - (q31_t)0x1b161479, (q31_t)0x82e61141, (q31_t)0x1b0ff05f, (q31_t)0x82e4bd07, (q31_t)0x1b09cc34, (q31_t)0x82e3691b, (q31_t)0x1b03a7f9, (q31_t)0x82e2157c, - (q31_t)0x1afd83ad, (q31_t)0x82e0c22a, (q31_t)0x1af75f50, (q31_t)0x82df6f25, (q31_t)0x1af13ae3, (q31_t)0x82de1c6d, (q31_t)0x1aeb1665, (q31_t)0x82dcca02, - (q31_t)0x1ae4f1d6, (q31_t)0x82db77e5, (q31_t)0x1adecd37, (q31_t)0x82da2615, (q31_t)0x1ad8a887, (q31_t)0x82d8d492, (q31_t)0x1ad283c7, (q31_t)0x82d7835c, - (q31_t)0x1acc5ef6, (q31_t)0x82d63274, (q31_t)0x1ac63a14, (q31_t)0x82d4e1d8, (q31_t)0x1ac01522, (q31_t)0x82d3918a, (q31_t)0x1ab9f020, (q31_t)0x82d24189, - (q31_t)0x1ab3cb0d, (q31_t)0x82d0f1d5, (q31_t)0x1aada5e9, (q31_t)0x82cfa26f, (q31_t)0x1aa780b6, (q31_t)0x82ce5356, (q31_t)0x1aa15b71, (q31_t)0x82cd048a, - (q31_t)0x1a9b361d, (q31_t)0x82cbb60b, (q31_t)0x1a9510b7, (q31_t)0x82ca67d9, (q31_t)0x1a8eeb42, (q31_t)0x82c919f5, (q31_t)0x1a88c5bc, (q31_t)0x82c7cc5e, - (q31_t)0x1a82a026, (q31_t)0x82c67f14, (q31_t)0x1a7c7a7f, (q31_t)0x82c53217, (q31_t)0x1a7654c8, (q31_t)0x82c3e568, (q31_t)0x1a702f01, (q31_t)0x82c29906, - (q31_t)0x1a6a0929, (q31_t)0x82c14cf1, (q31_t)0x1a63e341, (q31_t)0x82c00129, (q31_t)0x1a5dbd49, (q31_t)0x82beb5af, (q31_t)0x1a579741, (q31_t)0x82bd6a82, - (q31_t)0x1a517128, (q31_t)0x82bc1fa2, (q31_t)0x1a4b4aff, (q31_t)0x82bad50f, (q31_t)0x1a4524c6, (q31_t)0x82b98aca, (q31_t)0x1a3efe7c, (q31_t)0x82b840d2, - (q31_t)0x1a38d823, (q31_t)0x82b6f727, (q31_t)0x1a32b1b9, (q31_t)0x82b5adca, (q31_t)0x1a2c8b3f, (q31_t)0x82b464ba, (q31_t)0x1a2664b5, (q31_t)0x82b31bf7, - (q31_t)0x1a203e1b, (q31_t)0x82b1d381, (q31_t)0x1a1a1771, (q31_t)0x82b08b59, (q31_t)0x1a13f0b6, (q31_t)0x82af437e, (q31_t)0x1a0dc9ec, (q31_t)0x82adfbf0, - (q31_t)0x1a07a311, (q31_t)0x82acb4b0, (q31_t)0x1a017c27, (q31_t)0x82ab6dbd, (q31_t)0x19fb552c, (q31_t)0x82aa2717, (q31_t)0x19f52e22, (q31_t)0x82a8e0bf, - (q31_t)0x19ef0707, (q31_t)0x82a79ab3, (q31_t)0x19e8dfdc, (q31_t)0x82a654f6, (q31_t)0x19e2b8a2, (q31_t)0x82a50f85, (q31_t)0x19dc9157, (q31_t)0x82a3ca62, - (q31_t)0x19d669fc, (q31_t)0x82a2858c, (q31_t)0x19d04292, (q31_t)0x82a14104, (q31_t)0x19ca1b17, (q31_t)0x829ffcc8, (q31_t)0x19c3f38d, (q31_t)0x829eb8db, - (q31_t)0x19bdcbf3, (q31_t)0x829d753a, (q31_t)0x19b7a449, (q31_t)0x829c31e7, (q31_t)0x19b17c8f, (q31_t)0x829aeee1, (q31_t)0x19ab54c5, (q31_t)0x8299ac29, - (q31_t)0x19a52ceb, (q31_t)0x829869be, (q31_t)0x199f0502, (q31_t)0x829727a0, (q31_t)0x1998dd09, (q31_t)0x8295e5cf, (q31_t)0x1992b4ff, (q31_t)0x8294a44c, - (q31_t)0x198c8ce7, (q31_t)0x82936317, (q31_t)0x198664be, (q31_t)0x8292222e, (q31_t)0x19803c86, (q31_t)0x8290e194, (q31_t)0x197a143e, (q31_t)0x828fa146, - (q31_t)0x1973ebe6, (q31_t)0x828e6146, (q31_t)0x196dc37e, (q31_t)0x828d2193, (q31_t)0x19679b07, (q31_t)0x828be22e, (q31_t)0x19617280, (q31_t)0x828aa316, - (q31_t)0x195b49ea, (q31_t)0x8289644b, (q31_t)0x19552144, (q31_t)0x828825ce, (q31_t)0x194ef88e, (q31_t)0x8286e79e, (q31_t)0x1948cfc8, (q31_t)0x8285a9bb, - (q31_t)0x1942a6f3, (q31_t)0x82846c26, (q31_t)0x193c7e0f, (q31_t)0x82832edf, (q31_t)0x1936551b, (q31_t)0x8281f1e4, (q31_t)0x19302c17, (q31_t)0x8280b538, - (q31_t)0x192a0304, (q31_t)0x827f78d8, (q31_t)0x1923d9e1, (q31_t)0x827e3cc6, (q31_t)0x191db0af, (q31_t)0x827d0102, (q31_t)0x1917876d, (q31_t)0x827bc58a, - (q31_t)0x19115e1c, (q31_t)0x827a8a61, (q31_t)0x190b34bb, (q31_t)0x82794f84, (q31_t)0x19050b4b, (q31_t)0x827814f6, (q31_t)0x18fee1cb, (q31_t)0x8276dab4, - (q31_t)0x18f8b83c, (q31_t)0x8275a0c0, (q31_t)0x18f28e9e, (q31_t)0x8274671a, (q31_t)0x18ec64f0, (q31_t)0x82732dc0, (q31_t)0x18e63b33, (q31_t)0x8271f4b5, - (q31_t)0x18e01167, (q31_t)0x8270bbf7, (q31_t)0x18d9e78b, (q31_t)0x826f8386, (q31_t)0x18d3bda0, (q31_t)0x826e4b62, (q31_t)0x18cd93a5, (q31_t)0x826d138d, - (q31_t)0x18c7699b, (q31_t)0x826bdc04, (q31_t)0x18c13f82, (q31_t)0x826aa4c9, (q31_t)0x18bb155a, (q31_t)0x82696ddc, (q31_t)0x18b4eb22, (q31_t)0x8268373c, - (q31_t)0x18aec0db, (q31_t)0x826700e9, (q31_t)0x18a89685, (q31_t)0x8265cae4, (q31_t)0x18a26c20, (q31_t)0x8264952d, (q31_t)0x189c41ab, (q31_t)0x82635fc2, - (q31_t)0x18961728, (q31_t)0x82622aa6, (q31_t)0x188fec95, (q31_t)0x8260f5d7, (q31_t)0x1889c1f3, (q31_t)0x825fc155, (q31_t)0x18839742, (q31_t)0x825e8d21, - (q31_t)0x187d6c82, (q31_t)0x825d593a, (q31_t)0x187741b2, (q31_t)0x825c25a1, (q31_t)0x187116d4, (q31_t)0x825af255, (q31_t)0x186aebe6, (q31_t)0x8259bf57, - (q31_t)0x1864c0ea, (q31_t)0x82588ca7, (q31_t)0x185e95de, (q31_t)0x82575a44, (q31_t)0x18586ac3, (q31_t)0x8256282e, (q31_t)0x18523f9a, (q31_t)0x8254f666, - (q31_t)0x184c1461, (q31_t)0x8253c4eb, (q31_t)0x1845e919, (q31_t)0x825293be, (q31_t)0x183fbdc3, (q31_t)0x825162df, (q31_t)0x1839925d, (q31_t)0x8250324d, - (q31_t)0x183366e9, (q31_t)0x824f0208, (q31_t)0x182d3b65, (q31_t)0x824dd211, (q31_t)0x18270fd3, (q31_t)0x824ca268, (q31_t)0x1820e431, (q31_t)0x824b730c, - (q31_t)0x181ab881, (q31_t)0x824a43fe, (q31_t)0x18148cc2, (q31_t)0x8249153d, (q31_t)0x180e60f4, (q31_t)0x8247e6ca, (q31_t)0x18083518, (q31_t)0x8246b8a4, - (q31_t)0x1802092c, (q31_t)0x82458acc, (q31_t)0x17fbdd32, (q31_t)0x82445d41, (q31_t)0x17f5b129, (q31_t)0x82433004, (q31_t)0x17ef8511, (q31_t)0x82420315, - (q31_t)0x17e958ea, (q31_t)0x8240d673, (q31_t)0x17e32cb5, (q31_t)0x823faa1e, (q31_t)0x17dd0070, (q31_t)0x823e7e18, (q31_t)0x17d6d41d, (q31_t)0x823d525e, - (q31_t)0x17d0a7bc, (q31_t)0x823c26f3, (q31_t)0x17ca7b4c, (q31_t)0x823afbd5, (q31_t)0x17c44ecd, (q31_t)0x8239d104, (q31_t)0x17be223f, (q31_t)0x8238a681, - (q31_t)0x17b7f5a3, (q31_t)0x82377c4c, (q31_t)0x17b1c8f8, (q31_t)0x82365264, (q31_t)0x17ab9c3e, (q31_t)0x823528ca, (q31_t)0x17a56f76, (q31_t)0x8233ff7e, - (q31_t)0x179f429f, (q31_t)0x8232d67f, (q31_t)0x179915ba, (q31_t)0x8231adce, (q31_t)0x1792e8c6, (q31_t)0x8230856a, (q31_t)0x178cbbc4, (q31_t)0x822f5d54, - (q31_t)0x17868eb3, (q31_t)0x822e358b, (q31_t)0x17806194, (q31_t)0x822d0e10, (q31_t)0x177a3466, (q31_t)0x822be6e3, (q31_t)0x17740729, (q31_t)0x822ac004, - (q31_t)0x176dd9de, (q31_t)0x82299971, (q31_t)0x1767ac85, (q31_t)0x8228732d, (q31_t)0x17617f1d, (q31_t)0x82274d36, (q31_t)0x175b51a7, (q31_t)0x8226278d, - (q31_t)0x17552422, (q31_t)0x82250232, (q31_t)0x174ef68f, (q31_t)0x8223dd24, (q31_t)0x1748c8ee, (q31_t)0x8222b863, (q31_t)0x17429b3e, (q31_t)0x822193f1, - (q31_t)0x173c6d80, (q31_t)0x82206fcc, (q31_t)0x17363fb4, (q31_t)0x821f4bf5, (q31_t)0x173011d9, (q31_t)0x821e286b, (q31_t)0x1729e3f0, (q31_t)0x821d052f, - (q31_t)0x1723b5f9, (q31_t)0x821be240, (q31_t)0x171d87f3, (q31_t)0x821abfa0, (q31_t)0x171759df, (q31_t)0x82199d4d, (q31_t)0x17112bbd, (q31_t)0x82187b47, - (q31_t)0x170afd8d, (q31_t)0x82175990, (q31_t)0x1704cf4f, (q31_t)0x82163826, (q31_t)0x16fea102, (q31_t)0x82151709, (q31_t)0x16f872a7, (q31_t)0x8213f63a, - (q31_t)0x16f2443e, (q31_t)0x8212d5b9, (q31_t)0x16ec15c7, (q31_t)0x8211b586, (q31_t)0x16e5e741, (q31_t)0x821095a0, (q31_t)0x16dfb8ae, (q31_t)0x820f7608, - (q31_t)0x16d98a0c, (q31_t)0x820e56be, (q31_t)0x16d35b5c, (q31_t)0x820d37c1, (q31_t)0x16cd2c9f, (q31_t)0x820c1912, (q31_t)0x16c6fdd3, (q31_t)0x820afab1, - (q31_t)0x16c0cef9, (q31_t)0x8209dc9e, (q31_t)0x16baa011, (q31_t)0x8208bed8, (q31_t)0x16b4711b, (q31_t)0x8207a160, (q31_t)0x16ae4217, (q31_t)0x82068435, - (q31_t)0x16a81305, (q31_t)0x82056758, (q31_t)0x16a1e3e5, (q31_t)0x82044ac9, (q31_t)0x169bb4b7, (q31_t)0x82032e88, (q31_t)0x1695857b, (q31_t)0x82021294, - (q31_t)0x168f5632, (q31_t)0x8200f6ef, (q31_t)0x168926da, (q31_t)0x81ffdb96, (q31_t)0x1682f774, (q31_t)0x81fec08c, (q31_t)0x167cc801, (q31_t)0x81fda5cf, - (q31_t)0x1676987f, (q31_t)0x81fc8b60, (q31_t)0x167068f0, (q31_t)0x81fb713f, (q31_t)0x166a3953, (q31_t)0x81fa576c, (q31_t)0x166409a8, (q31_t)0x81f93de6, - (q31_t)0x165dd9f0, (q31_t)0x81f824ae, (q31_t)0x1657aa29, (q31_t)0x81f70bc3, (q31_t)0x16517a55, (q31_t)0x81f5f327, (q31_t)0x164b4a73, (q31_t)0x81f4dad8, - (q31_t)0x16451a83, (q31_t)0x81f3c2d7, (q31_t)0x163eea86, (q31_t)0x81f2ab24, (q31_t)0x1638ba7a, (q31_t)0x81f193be, (q31_t)0x16328a61, (q31_t)0x81f07ca6, - (q31_t)0x162c5a3b, (q31_t)0x81ef65dc, (q31_t)0x16262a06, (q31_t)0x81ee4f60, (q31_t)0x161ff9c4, (q31_t)0x81ed3932, (q31_t)0x1619c975, (q31_t)0x81ec2351, - (q31_t)0x16139918, (q31_t)0x81eb0dbe, (q31_t)0x160d68ad, (q31_t)0x81e9f879, (q31_t)0x16073834, (q31_t)0x81e8e381, (q31_t)0x160107ae, (q31_t)0x81e7ced8, - (q31_t)0x15fad71b, (q31_t)0x81e6ba7c, (q31_t)0x15f4a679, (q31_t)0x81e5a66e, (q31_t)0x15ee75cb, (q31_t)0x81e492ad, (q31_t)0x15e8450e, (q31_t)0x81e37f3b, - (q31_t)0x15e21445, (q31_t)0x81e26c16, (q31_t)0x15dbe36d, (q31_t)0x81e1593f, (q31_t)0x15d5b288, (q31_t)0x81e046b6, (q31_t)0x15cf8196, (q31_t)0x81df347b, - (q31_t)0x15c95097, (q31_t)0x81de228d, (q31_t)0x15c31f89, (q31_t)0x81dd10ee, (q31_t)0x15bcee6f, (q31_t)0x81dbff9c, (q31_t)0x15b6bd47, (q31_t)0x81daee98, - (q31_t)0x15b08c12, (q31_t)0x81d9dde1, (q31_t)0x15aa5acf, (q31_t)0x81d8cd79, (q31_t)0x15a4297f, (q31_t)0x81d7bd5e, (q31_t)0x159df821, (q31_t)0x81d6ad92, - (q31_t)0x1597c6b7, (q31_t)0x81d59e13, (q31_t)0x1591953e, (q31_t)0x81d48ee1, (q31_t)0x158b63b9, (q31_t)0x81d37ffe, (q31_t)0x15853226, (q31_t)0x81d27169, - (q31_t)0x157f0086, (q31_t)0x81d16321, (q31_t)0x1578ced9, (q31_t)0x81d05527, (q31_t)0x15729d1f, (q31_t)0x81cf477b, (q31_t)0x156c6b57, (q31_t)0x81ce3a1d, - (q31_t)0x15663982, (q31_t)0x81cd2d0c, (q31_t)0x156007a0, (q31_t)0x81cc204a, (q31_t)0x1559d5b1, (q31_t)0x81cb13d5, (q31_t)0x1553a3b4, (q31_t)0x81ca07af, - (q31_t)0x154d71aa, (q31_t)0x81c8fbd6, (q31_t)0x15473f94, (q31_t)0x81c7f04b, (q31_t)0x15410d70, (q31_t)0x81c6e50d, (q31_t)0x153adb3f, (q31_t)0x81c5da1e, - (q31_t)0x1534a901, (q31_t)0x81c4cf7d, (q31_t)0x152e76b5, (q31_t)0x81c3c529, (q31_t)0x1528445d, (q31_t)0x81c2bb23, (q31_t)0x152211f8, (q31_t)0x81c1b16b, - (q31_t)0x151bdf86, (q31_t)0x81c0a801, (q31_t)0x1515ad06, (q31_t)0x81bf9ee5, (q31_t)0x150f7a7a, (q31_t)0x81be9617, (q31_t)0x150947e1, (q31_t)0x81bd8d97, - (q31_t)0x1503153a, (q31_t)0x81bc8564, (q31_t)0x14fce287, (q31_t)0x81bb7d7f, (q31_t)0x14f6afc7, (q31_t)0x81ba75e9, (q31_t)0x14f07cf9, (q31_t)0x81b96ea0, - (q31_t)0x14ea4a1f, (q31_t)0x81b867a5, (q31_t)0x14e41738, (q31_t)0x81b760f8, (q31_t)0x14dde445, (q31_t)0x81b65a99, (q31_t)0x14d7b144, (q31_t)0x81b55488, - (q31_t)0x14d17e36, (q31_t)0x81b44ec4, (q31_t)0x14cb4b1c, (q31_t)0x81b3494f, (q31_t)0x14c517f4, (q31_t)0x81b24427, (q31_t)0x14bee4c0, (q31_t)0x81b13f4e, - (q31_t)0x14b8b17f, (q31_t)0x81b03ac2, (q31_t)0x14b27e32, (q31_t)0x81af3684, (q31_t)0x14ac4ad7, (q31_t)0x81ae3294, (q31_t)0x14a61770, (q31_t)0x81ad2ef2, - (q31_t)0x149fe3fc, (q31_t)0x81ac2b9e, (q31_t)0x1499b07c, (q31_t)0x81ab2898, (q31_t)0x14937cee, (q31_t)0x81aa25e0, (q31_t)0x148d4954, (q31_t)0x81a92376, - (q31_t)0x148715ae, (q31_t)0x81a82159, (q31_t)0x1480e1fa, (q31_t)0x81a71f8b, (q31_t)0x147aae3a, (q31_t)0x81a61e0b, (q31_t)0x14747a6d, (q31_t)0x81a51cd8, - (q31_t)0x146e4694, (q31_t)0x81a41bf4, (q31_t)0x146812ae, (q31_t)0x81a31b5d, (q31_t)0x1461debc, (q31_t)0x81a21b14, (q31_t)0x145baabd, (q31_t)0x81a11b1a, - (q31_t)0x145576b1, (q31_t)0x81a01b6d, (q31_t)0x144f4299, (q31_t)0x819f1c0e, (q31_t)0x14490e74, (q31_t)0x819e1cfd, (q31_t)0x1442da43, (q31_t)0x819d1e3a, - (q31_t)0x143ca605, (q31_t)0x819c1fc5, (q31_t)0x143671bb, (q31_t)0x819b219e, (q31_t)0x14303d65, (q31_t)0x819a23c5, (q31_t)0x142a0902, (q31_t)0x8199263a, - (q31_t)0x1423d492, (q31_t)0x819828fd, (q31_t)0x141da016, (q31_t)0x81972c0e, (q31_t)0x14176b8e, (q31_t)0x81962f6d, (q31_t)0x141136f9, (q31_t)0x8195331a, - (q31_t)0x140b0258, (q31_t)0x81943715, (q31_t)0x1404cdaa, (q31_t)0x81933b5e, (q31_t)0x13fe98f1, (q31_t)0x81923ff4, (q31_t)0x13f8642a, (q31_t)0x819144d9, - (q31_t)0x13f22f58, (q31_t)0x81904a0c, (q31_t)0x13ebfa79, (q31_t)0x818f4f8d, (q31_t)0x13e5c58e, (q31_t)0x818e555c, (q31_t)0x13df9097, (q31_t)0x818d5b78, - (q31_t)0x13d95b93, (q31_t)0x818c61e3, (q31_t)0x13d32683, (q31_t)0x818b689c, (q31_t)0x13ccf167, (q31_t)0x818a6fa3, (q31_t)0x13c6bc3f, (q31_t)0x818976f8, - (q31_t)0x13c0870a, (q31_t)0x81887e9a, (q31_t)0x13ba51ca, (q31_t)0x8187868b, (q31_t)0x13b41c7d, (q31_t)0x81868eca, (q31_t)0x13ade724, (q31_t)0x81859757, - (q31_t)0x13a7b1bf, (q31_t)0x8184a032, (q31_t)0x13a17c4d, (q31_t)0x8183a95b, (q31_t)0x139b46d0, (q31_t)0x8182b2d1, (q31_t)0x13951146, (q31_t)0x8181bc96, - (q31_t)0x138edbb1, (q31_t)0x8180c6a9, (q31_t)0x1388a60f, (q31_t)0x817fd10a, (q31_t)0x13827062, (q31_t)0x817edbb9, (q31_t)0x137c3aa8, (q31_t)0x817de6b6, - (q31_t)0x137604e2, (q31_t)0x817cf201, (q31_t)0x136fcf10, (q31_t)0x817bfd9b, (q31_t)0x13699933, (q31_t)0x817b0982, (q31_t)0x13636349, (q31_t)0x817a15b7, - (q31_t)0x135d2d53, (q31_t)0x8179223a, (q31_t)0x1356f752, (q31_t)0x81782f0b, (q31_t)0x1350c144, (q31_t)0x81773c2b, (q31_t)0x134a8b2b, (q31_t)0x81764998, - (q31_t)0x13445505, (q31_t)0x81755754, (q31_t)0x133e1ed4, (q31_t)0x8174655d, (q31_t)0x1337e897, (q31_t)0x817373b5, (q31_t)0x1331b24e, (q31_t)0x8172825a, - (q31_t)0x132b7bf9, (q31_t)0x8171914e, (q31_t)0x13254599, (q31_t)0x8170a090, (q31_t)0x131f0f2c, (q31_t)0x816fb020, (q31_t)0x1318d8b4, (q31_t)0x816ebffe, - (q31_t)0x1312a230, (q31_t)0x816dd02a, (q31_t)0x130c6ba0, (q31_t)0x816ce0a4, (q31_t)0x13063505, (q31_t)0x816bf16c, (q31_t)0x12fffe5d, (q31_t)0x816b0282, - (q31_t)0x12f9c7aa, (q31_t)0x816a13e6, (q31_t)0x12f390ec, (q31_t)0x81692599, (q31_t)0x12ed5a21, (q31_t)0x81683799, (q31_t)0x12e7234b, (q31_t)0x816749e8, - (q31_t)0x12e0ec6a, (q31_t)0x81665c84, (q31_t)0x12dab57c, (q31_t)0x81656f6f, (q31_t)0x12d47e83, (q31_t)0x816482a8, (q31_t)0x12ce477f, (q31_t)0x8163962f, - (q31_t)0x12c8106f, (q31_t)0x8162aa04, (q31_t)0x12c1d953, (q31_t)0x8161be27, (q31_t)0x12bba22b, (q31_t)0x8160d298, (q31_t)0x12b56af9, (q31_t)0x815fe758, - (q31_t)0x12af33ba, (q31_t)0x815efc65, (q31_t)0x12a8fc70, (q31_t)0x815e11c1, (q31_t)0x12a2c51b, (q31_t)0x815d276a, (q31_t)0x129c8dba, (q31_t)0x815c3d62, - (q31_t)0x1296564d, (q31_t)0x815b53a8, (q31_t)0x12901ed5, (q31_t)0x815a6a3c, (q31_t)0x1289e752, (q31_t)0x8159811e, (q31_t)0x1283afc3, (q31_t)0x8158984e, - (q31_t)0x127d7829, (q31_t)0x8157afcd, (q31_t)0x12774083, (q31_t)0x8156c799, (q31_t)0x127108d2, (q31_t)0x8155dfb4, (q31_t)0x126ad116, (q31_t)0x8154f81d, - (q31_t)0x1264994e, (q31_t)0x815410d4, (q31_t)0x125e617b, (q31_t)0x815329d9, (q31_t)0x1258299c, (q31_t)0x8152432c, (q31_t)0x1251f1b3, (q31_t)0x81515ccd, - (q31_t)0x124bb9be, (q31_t)0x815076bd, (q31_t)0x124581bd, (q31_t)0x814f90fb, (q31_t)0x123f49b2, (q31_t)0x814eab86, (q31_t)0x1239119b, (q31_t)0x814dc660, - (q31_t)0x1232d979, (q31_t)0x814ce188, (q31_t)0x122ca14b, (q31_t)0x814bfcff, (q31_t)0x12266913, (q31_t)0x814b18c3, (q31_t)0x122030cf, (q31_t)0x814a34d6, - (q31_t)0x1219f880, (q31_t)0x81495136, (q31_t)0x1213c026, (q31_t)0x81486de5, (q31_t)0x120d87c1, (q31_t)0x81478ae2, (q31_t)0x12074f50, (q31_t)0x8146a82e, - (q31_t)0x120116d5, (q31_t)0x8145c5c7, (q31_t)0x11fade4e, (q31_t)0x8144e3ae, (q31_t)0x11f4a5bd, (q31_t)0x814401e4, (q31_t)0x11ee6d20, (q31_t)0x81432068, - (q31_t)0x11e83478, (q31_t)0x81423f3a, (q31_t)0x11e1fbc5, (q31_t)0x81415e5a, (q31_t)0x11dbc307, (q31_t)0x81407dc9, (q31_t)0x11d58a3e, (q31_t)0x813f9d86, - (q31_t)0x11cf516a, (q31_t)0x813ebd90, (q31_t)0x11c9188b, (q31_t)0x813ddde9, (q31_t)0x11c2dfa2, (q31_t)0x813cfe91, (q31_t)0x11bca6ad, (q31_t)0x813c1f86, - (q31_t)0x11b66dad, (q31_t)0x813b40ca, (q31_t)0x11b034a2, (q31_t)0x813a625b, (q31_t)0x11a9fb8d, (q31_t)0x8139843b, (q31_t)0x11a3c26c, (q31_t)0x8138a66a, - (q31_t)0x119d8941, (q31_t)0x8137c8e6, (q31_t)0x1197500a, (q31_t)0x8136ebb1, (q31_t)0x119116c9, (q31_t)0x81360ec9, (q31_t)0x118add7d, (q31_t)0x81353230, - (q31_t)0x1184a427, (q31_t)0x813455e6, (q31_t)0x117e6ac5, (q31_t)0x813379e9, (q31_t)0x11783159, (q31_t)0x81329e3b, (q31_t)0x1171f7e2, (q31_t)0x8131c2db, - (q31_t)0x116bbe60, (q31_t)0x8130e7c9, (q31_t)0x116584d3, (q31_t)0x81300d05, (q31_t)0x115f4b3c, (q31_t)0x812f3290, (q31_t)0x1159119a, (q31_t)0x812e5868, - (q31_t)0x1152d7ed, (q31_t)0x812d7e8f, (q31_t)0x114c9e35, (q31_t)0x812ca505, (q31_t)0x11466473, (q31_t)0x812bcbc8, (q31_t)0x11402aa6, (q31_t)0x812af2da, - (q31_t)0x1139f0cf, (q31_t)0x812a1a3a, (q31_t)0x1133b6ed, (q31_t)0x812941e8, (q31_t)0x112d7d00, (q31_t)0x812869e4, (q31_t)0x11274309, (q31_t)0x8127922f, - (q31_t)0x11210907, (q31_t)0x8126bac8, (q31_t)0x111acefb, (q31_t)0x8125e3af, (q31_t)0x111494e4, (q31_t)0x81250ce4, (q31_t)0x110e5ac2, (q31_t)0x81243668, - (q31_t)0x11082096, (q31_t)0x8123603a, (q31_t)0x1101e65f, (q31_t)0x81228a5a, (q31_t)0x10fbac1e, (q31_t)0x8121b4c8, (q31_t)0x10f571d3, (q31_t)0x8120df85, - (q31_t)0x10ef377d, (q31_t)0x81200a90, (q31_t)0x10e8fd1c, (q31_t)0x811f35e9, (q31_t)0x10e2c2b2, (q31_t)0x811e6191, (q31_t)0x10dc883c, (q31_t)0x811d8d86, - (q31_t)0x10d64dbd, (q31_t)0x811cb9ca, (q31_t)0x10d01333, (q31_t)0x811be65d, (q31_t)0x10c9d89e, (q31_t)0x811b133d, (q31_t)0x10c39dff, (q31_t)0x811a406c, - (q31_t)0x10bd6356, (q31_t)0x81196de9, (q31_t)0x10b728a3, (q31_t)0x81189bb4, (q31_t)0x10b0ede5, (q31_t)0x8117c9ce, (q31_t)0x10aab31d, (q31_t)0x8116f836, - (q31_t)0x10a4784b, (q31_t)0x811626ec, (q31_t)0x109e3d6e, (q31_t)0x811555f1, (q31_t)0x10980287, (q31_t)0x81148544, (q31_t)0x1091c796, (q31_t)0x8113b4e5, - (q31_t)0x108b8c9b, (q31_t)0x8112e4d4, (q31_t)0x10855195, (q31_t)0x81121512, (q31_t)0x107f1686, (q31_t)0x8111459e, (q31_t)0x1078db6c, (q31_t)0x81107678, - (q31_t)0x1072a048, (q31_t)0x810fa7a0, (q31_t)0x106c651a, (q31_t)0x810ed917, (q31_t)0x106629e1, (q31_t)0x810e0adc, (q31_t)0x105fee9f, (q31_t)0x810d3cf0, - (q31_t)0x1059b352, (q31_t)0x810c6f52, (q31_t)0x105377fc, (q31_t)0x810ba202, (q31_t)0x104d3c9b, (q31_t)0x810ad500, (q31_t)0x10470130, (q31_t)0x810a084d, - (q31_t)0x1040c5bb, (q31_t)0x81093be8, (q31_t)0x103a8a3d, (q31_t)0x81086fd1, (q31_t)0x10344eb4, (q31_t)0x8107a409, (q31_t)0x102e1321, (q31_t)0x8106d88f, - (q31_t)0x1027d784, (q31_t)0x81060d63, (q31_t)0x10219bdd, (q31_t)0x81054286, (q31_t)0x101b602d, (q31_t)0x810477f7, (q31_t)0x10152472, (q31_t)0x8103adb6, - (q31_t)0x100ee8ad, (q31_t)0x8102e3c4, (q31_t)0x1008acdf, (q31_t)0x81021a20, (q31_t)0x10027107, (q31_t)0x810150ca, (q31_t)0xffc3524, (q31_t)0x810087c3, - (q31_t)0xff5f938, (q31_t)0x80ffbf0a, (q31_t)0xfefbd42, (q31_t)0x80fef69f, (q31_t)0xfe98143, (q31_t)0x80fe2e83, (q31_t)0xfe34539, (q31_t)0x80fd66b5, - (q31_t)0xfdd0926, (q31_t)0x80fc9f35, (q31_t)0xfd6cd08, (q31_t)0x80fbd804, (q31_t)0xfd090e1, (q31_t)0x80fb1121, (q31_t)0xfca54b1, (q31_t)0x80fa4a8c, - (q31_t)0xfc41876, (q31_t)0x80f98446, (q31_t)0xfbddc32, (q31_t)0x80f8be4e, (q31_t)0xfb79fe4, (q31_t)0x80f7f8a4, (q31_t)0xfb1638d, (q31_t)0x80f73349, - (q31_t)0xfab272b, (q31_t)0x80f66e3c, (q31_t)0xfa4eac0, (q31_t)0x80f5a97e, (q31_t)0xf9eae4c, (q31_t)0x80f4e50e, (q31_t)0xf9871ce, (q31_t)0x80f420ec, - (q31_t)0xf923546, (q31_t)0x80f35d19, (q31_t)0xf8bf8b4, (q31_t)0x80f29994, (q31_t)0xf85bc19, (q31_t)0x80f1d65d, (q31_t)0xf7f7f75, (q31_t)0x80f11375, - (q31_t)0xf7942c7, (q31_t)0x80f050db, (q31_t)0xf73060f, (q31_t)0x80ef8e90, (q31_t)0xf6cc94e, (q31_t)0x80eecc93, (q31_t)0xf668c83, (q31_t)0x80ee0ae4, - (q31_t)0xf604faf, (q31_t)0x80ed4984, (q31_t)0xf5a12d1, (q31_t)0x80ec8872, (q31_t)0xf53d5ea, (q31_t)0x80ebc7ae, (q31_t)0xf4d98f9, (q31_t)0x80eb0739, - (q31_t)0xf475bff, (q31_t)0x80ea4712, (q31_t)0xf411efb, (q31_t)0x80e9873a, (q31_t)0xf3ae1ee, (q31_t)0x80e8c7b0, (q31_t)0xf34a4d8, (q31_t)0x80e80874, - (q31_t)0xf2e67b8, (q31_t)0x80e74987, (q31_t)0xf282a8f, (q31_t)0x80e68ae8, (q31_t)0xf21ed5d, (q31_t)0x80e5cc98, (q31_t)0xf1bb021, (q31_t)0x80e50e96, - (q31_t)0xf1572dc, (q31_t)0x80e450e2, (q31_t)0xf0f358e, (q31_t)0x80e3937d, (q31_t)0xf08f836, (q31_t)0x80e2d666, (q31_t)0xf02bad5, (q31_t)0x80e2199e, - (q31_t)0xefc7d6b, (q31_t)0x80e15d24, (q31_t)0xef63ff7, (q31_t)0x80e0a0f8, (q31_t)0xef0027b, (q31_t)0x80dfe51b, (q31_t)0xee9c4f5, (q31_t)0x80df298c, - (q31_t)0xee38766, (q31_t)0x80de6e4c, (q31_t)0xedd49ce, (q31_t)0x80ddb35a, (q31_t)0xed70c2c, (q31_t)0x80dcf8b7, (q31_t)0xed0ce82, (q31_t)0x80dc3e62, - (q31_t)0xeca90ce, (q31_t)0x80db845b, (q31_t)0xec45311, (q31_t)0x80dacaa3, (q31_t)0xebe154b, (q31_t)0x80da1139, (q31_t)0xeb7d77c, (q31_t)0x80d9581e, - (q31_t)0xeb199a4, (q31_t)0x80d89f51, (q31_t)0xeab5bc3, (q31_t)0x80d7e6d3, (q31_t)0xea51dd8, (q31_t)0x80d72ea3, (q31_t)0xe9edfe5, (q31_t)0x80d676c1, - (q31_t)0xe98a1e9, (q31_t)0x80d5bf2e, (q31_t)0xe9263e3, (q31_t)0x80d507e9, (q31_t)0xe8c25d5, (q31_t)0x80d450f3, (q31_t)0xe85e7be, (q31_t)0x80d39a4b, - (q31_t)0xe7fa99e, (q31_t)0x80d2e3f2, (q31_t)0xe796b74, (q31_t)0x80d22de7, (q31_t)0xe732d42, (q31_t)0x80d1782a, (q31_t)0xe6cef07, (q31_t)0x80d0c2bc, - (q31_t)0xe66b0c3, (q31_t)0x80d00d9d, (q31_t)0xe607277, (q31_t)0x80cf58cc, (q31_t)0xe5a3421, (q31_t)0x80cea449, (q31_t)0xe53f5c2, (q31_t)0x80cdf015, - (q31_t)0xe4db75b, (q31_t)0x80cd3c2f, (q31_t)0xe4778eb, (q31_t)0x80cc8898, (q31_t)0xe413a72, (q31_t)0x80cbd54f, (q31_t)0xe3afbf0, (q31_t)0x80cb2255, - (q31_t)0xe34bd66, (q31_t)0x80ca6fa9, (q31_t)0xe2e7ed2, (q31_t)0x80c9bd4c, (q31_t)0xe284036, (q31_t)0x80c90b3d, (q31_t)0xe220191, (q31_t)0x80c8597c, - (q31_t)0xe1bc2e4, (q31_t)0x80c7a80a, (q31_t)0xe15842e, (q31_t)0x80c6f6e7, (q31_t)0xe0f456f, (q31_t)0x80c64612, (q31_t)0xe0906a7, (q31_t)0x80c5958b, - (q31_t)0xe02c7d7, (q31_t)0x80c4e553, (q31_t)0xdfc88fe, (q31_t)0x80c4356a, (q31_t)0xdf64a1c, (q31_t)0x80c385cf, (q31_t)0xdf00b32, (q31_t)0x80c2d682, - (q31_t)0xde9cc40, (q31_t)0x80c22784, (q31_t)0xde38d44, (q31_t)0x80c178d4, (q31_t)0xddd4e40, (q31_t)0x80c0ca73, (q31_t)0xdd70f34, (q31_t)0x80c01c60, - (q31_t)0xdd0d01f, (q31_t)0x80bf6e9c, (q31_t)0xdca9102, (q31_t)0x80bec127, (q31_t)0xdc451dc, (q31_t)0x80be13ff, (q31_t)0xdbe12ad, (q31_t)0x80bd6727, - (q31_t)0xdb7d376, (q31_t)0x80bcba9d, (q31_t)0xdb19437, (q31_t)0x80bc0e61, (q31_t)0xdab54ef, (q31_t)0x80bb6274, (q31_t)0xda5159f, (q31_t)0x80bab6d5, - (q31_t)0xd9ed646, (q31_t)0x80ba0b85, (q31_t)0xd9896e5, (q31_t)0x80b96083, (q31_t)0xd92577b, (q31_t)0x80b8b5d0, (q31_t)0xd8c1809, (q31_t)0x80b80b6c, - (q31_t)0xd85d88f, (q31_t)0x80b76156, (q31_t)0xd7f990c, (q31_t)0x80b6b78e, (q31_t)0xd795982, (q31_t)0x80b60e15, (q31_t)0xd7319ee, (q31_t)0x80b564ea, - (q31_t)0xd6cda53, (q31_t)0x80b4bc0e, (q31_t)0xd669aaf, (q31_t)0x80b41381, (q31_t)0xd605b03, (q31_t)0x80b36b42, (q31_t)0xd5a1b4f, (q31_t)0x80b2c351, - (q31_t)0xd53db92, (q31_t)0x80b21baf, (q31_t)0xd4d9bcd, (q31_t)0x80b1745c, (q31_t)0xd475c00, (q31_t)0x80b0cd57, (q31_t)0xd411c2b, (q31_t)0x80b026a1, - (q31_t)0xd3adc4e, (q31_t)0x80af8039, (q31_t)0xd349c68, (q31_t)0x80aeda20, (q31_t)0xd2e5c7b, (q31_t)0x80ae3455, (q31_t)0xd281c85, (q31_t)0x80ad8ed9, - (q31_t)0xd21dc87, (q31_t)0x80ace9ab, (q31_t)0xd1b9c81, (q31_t)0x80ac44cc, (q31_t)0xd155c73, (q31_t)0x80aba03b, (q31_t)0xd0f1c5d, (q31_t)0x80aafbf9, - (q31_t)0xd08dc3f, (q31_t)0x80aa5806, (q31_t)0xd029c18, (q31_t)0x80a9b461, (q31_t)0xcfc5bea, (q31_t)0x80a9110b, (q31_t)0xcf61bb4, (q31_t)0x80a86e03, - (q31_t)0xcefdb76, (q31_t)0x80a7cb49, (q31_t)0xce99b2f, (q31_t)0x80a728df, (q31_t)0xce35ae1, (q31_t)0x80a686c2, (q31_t)0xcdd1a8b, (q31_t)0x80a5e4f5, - (q31_t)0xcd6da2d, (q31_t)0x80a54376, (q31_t)0xcd099c7, (q31_t)0x80a4a245, (q31_t)0xcca5959, (q31_t)0x80a40163, (q31_t)0xcc418e3, (q31_t)0x80a360d0, - (q31_t)0xcbdd865, (q31_t)0x80a2c08b, (q31_t)0xcb797e0, (q31_t)0x80a22095, (q31_t)0xcb15752, (q31_t)0x80a180ed, (q31_t)0xcab16bd, (q31_t)0x80a0e194, - (q31_t)0xca4d620, (q31_t)0x80a04289, (q31_t)0xc9e957b, (q31_t)0x809fa3cd, (q31_t)0xc9854cf, (q31_t)0x809f0560, (q31_t)0xc92141a, (q31_t)0x809e6741, - (q31_t)0xc8bd35e, (q31_t)0x809dc971, (q31_t)0xc85929a, (q31_t)0x809d2bef, (q31_t)0xc7f51cf, (q31_t)0x809c8ebc, (q31_t)0xc7910fb, (q31_t)0x809bf1d7, - (q31_t)0xc72d020, (q31_t)0x809b5541, (q31_t)0xc6c8f3e, (q31_t)0x809ab8fa, (q31_t)0xc664e53, (q31_t)0x809a1d01, (q31_t)0xc600d61, (q31_t)0x80998157, - (q31_t)0xc59cc68, (q31_t)0x8098e5fb, (q31_t)0xc538b66, (q31_t)0x80984aee, (q31_t)0xc4d4a5d, (q31_t)0x8097b030, (q31_t)0xc47094d, (q31_t)0x809715c0, - (q31_t)0xc40c835, (q31_t)0x80967b9f, (q31_t)0xc3a8715, (q31_t)0x8095e1cc, (q31_t)0xc3445ee, (q31_t)0x80954848, (q31_t)0xc2e04c0, (q31_t)0x8094af13, - (q31_t)0xc27c389, (q31_t)0x8094162c, (q31_t)0xc21824c, (q31_t)0x80937d93, (q31_t)0xc1b4107, (q31_t)0x8092e54a, (q31_t)0xc14ffba, (q31_t)0x80924d4f, - (q31_t)0xc0ebe66, (q31_t)0x8091b5a2, (q31_t)0xc087d0a, (q31_t)0x80911e44, (q31_t)0xc023ba7, (q31_t)0x80908735, (q31_t)0xbfbfa3d, (q31_t)0x808ff074, - (q31_t)0xbf5b8cb, (q31_t)0x808f5a02, (q31_t)0xbef7752, (q31_t)0x808ec3df, (q31_t)0xbe935d2, (q31_t)0x808e2e0a, (q31_t)0xbe2f44a, (q31_t)0x808d9884, - (q31_t)0xbdcb2bb, (q31_t)0x808d034c, (q31_t)0xbd67124, (q31_t)0x808c6e63, (q31_t)0xbd02f87, (q31_t)0x808bd9c9, (q31_t)0xbc9ede2, (q31_t)0x808b457d, - (q31_t)0xbc3ac35, (q31_t)0x808ab180, (q31_t)0xbbd6a82, (q31_t)0x808a1dd2, (q31_t)0xbb728c7, (q31_t)0x80898a72, (q31_t)0xbb0e705, (q31_t)0x8088f761, - (q31_t)0xbaaa53b, (q31_t)0x8088649e, (q31_t)0xba4636b, (q31_t)0x8087d22a, (q31_t)0xb9e2193, (q31_t)0x80874005, (q31_t)0xb97dfb5, (q31_t)0x8086ae2e, - (q31_t)0xb919dcf, (q31_t)0x80861ca6, (q31_t)0xb8b5be1, (q31_t)0x80858b6c, (q31_t)0xb8519ed, (q31_t)0x8084fa82, (q31_t)0xb7ed7f2, (q31_t)0x808469e5, - (q31_t)0xb7895f0, (q31_t)0x8083d998, (q31_t)0xb7253e6, (q31_t)0x80834999, (q31_t)0xb6c11d5, (q31_t)0x8082b9e9, (q31_t)0xb65cfbe, (q31_t)0x80822a87, - (q31_t)0xb5f8d9f, (q31_t)0x80819b74, (q31_t)0xb594b7a, (q31_t)0x80810cb0, (q31_t)0xb53094d, (q31_t)0x80807e3a, (q31_t)0xb4cc719, (q31_t)0x807ff013, - (q31_t)0xb4684df, (q31_t)0x807f623b, (q31_t)0xb40429d, (q31_t)0x807ed4b1, (q31_t)0xb3a0055, (q31_t)0x807e4776, (q31_t)0xb33be05, (q31_t)0x807dba89, - (q31_t)0xb2d7baf, (q31_t)0x807d2dec, (q31_t)0xb273952, (q31_t)0x807ca19c, (q31_t)0xb20f6ee, (q31_t)0x807c159c, (q31_t)0xb1ab483, (q31_t)0x807b89ea, - (q31_t)0xb147211, (q31_t)0x807afe87, (q31_t)0xb0e2f98, (q31_t)0x807a7373, (q31_t)0xb07ed19, (q31_t)0x8079e8ad, (q31_t)0xb01aa92, (q31_t)0x80795e36, - (q31_t)0xafb6805, (q31_t)0x8078d40d, (q31_t)0xaf52571, (q31_t)0x80784a33, (q31_t)0xaeee2d7, (q31_t)0x8077c0a8, (q31_t)0xae8a036, (q31_t)0x8077376c, - (q31_t)0xae25d8d, (q31_t)0x8076ae7e, (q31_t)0xadc1adf, (q31_t)0x807625df, (q31_t)0xad5d829, (q31_t)0x80759d8e, (q31_t)0xacf956d, (q31_t)0x8075158c, - (q31_t)0xac952aa, (q31_t)0x80748dd9, (q31_t)0xac30fe1, (q31_t)0x80740675, (q31_t)0xabccd11, (q31_t)0x80737f5f, (q31_t)0xab68a3a, (q31_t)0x8072f898, - (q31_t)0xab0475c, (q31_t)0x8072721f, (q31_t)0xaaa0478, (q31_t)0x8071ebf6, (q31_t)0xaa3c18e, (q31_t)0x8071661a, (q31_t)0xa9d7e9d, (q31_t)0x8070e08e, - (q31_t)0xa973ba5, (q31_t)0x80705b50, (q31_t)0xa90f8a7, (q31_t)0x806fd661, (q31_t)0xa8ab5a2, (q31_t)0x806f51c1, (q31_t)0xa847297, (q31_t)0x806ecd6f, - (q31_t)0xa7e2f85, (q31_t)0x806e496c, (q31_t)0xa77ec6d, (q31_t)0x806dc5b8, (q31_t)0xa71a94f, (q31_t)0x806d4253, (q31_t)0xa6b662a, (q31_t)0x806cbf3c, - (q31_t)0xa6522fe, (q31_t)0x806c3c74, (q31_t)0xa5edfcc, (q31_t)0x806bb9fa, (q31_t)0xa589c94, (q31_t)0x806b37cf, (q31_t)0xa525955, (q31_t)0x806ab5f3, - (q31_t)0xa4c1610, (q31_t)0x806a3466, (q31_t)0xa45d2c5, (q31_t)0x8069b327, (q31_t)0xa3f8f73, (q31_t)0x80693237, (q31_t)0xa394c1b, (q31_t)0x8068b196, - (q31_t)0xa3308bd, (q31_t)0x80683143, (q31_t)0xa2cc558, (q31_t)0x8067b13f, (q31_t)0xa2681ed, (q31_t)0x8067318a, (q31_t)0xa203e7c, (q31_t)0x8066b224, - (q31_t)0xa19fb04, (q31_t)0x8066330c, (q31_t)0xa13b787, (q31_t)0x8065b443, (q31_t)0xa0d7403, (q31_t)0x806535c9, (q31_t)0xa073079, (q31_t)0x8064b79d, - (q31_t)0xa00ece8, (q31_t)0x806439c0, (q31_t)0x9faa952, (q31_t)0x8063bc32, (q31_t)0x9f465b5, (q31_t)0x80633ef3, (q31_t)0x9ee2213, (q31_t)0x8062c202, - (q31_t)0x9e7de6a, (q31_t)0x80624560, (q31_t)0x9e19abb, (q31_t)0x8061c90c, (q31_t)0x9db5706, (q31_t)0x80614d08, (q31_t)0x9d5134b, (q31_t)0x8060d152, - (q31_t)0x9cecf89, (q31_t)0x806055eb, (q31_t)0x9c88bc2, (q31_t)0x805fdad2, (q31_t)0x9c247f5, (q31_t)0x805f6009, (q31_t)0x9bc0421, (q31_t)0x805ee58e, - (q31_t)0x9b5c048, (q31_t)0x805e6b62, (q31_t)0x9af7c69, (q31_t)0x805df184, (q31_t)0x9a93884, (q31_t)0x805d77f5, (q31_t)0x9a2f498, (q31_t)0x805cfeb5, - (q31_t)0x99cb0a7, (q31_t)0x805c85c4, (q31_t)0x9966cb0, (q31_t)0x805c0d21, (q31_t)0x99028b3, (q31_t)0x805b94ce, (q31_t)0x989e4b0, (q31_t)0x805b1cc8, - (q31_t)0x983a0a7, (q31_t)0x805aa512, (q31_t)0x97d5c99, (q31_t)0x805a2daa, (q31_t)0x9771884, (q31_t)0x8059b692, (q31_t)0x970d46a, (q31_t)0x80593fc7, - (q31_t)0x96a9049, (q31_t)0x8058c94c, (q31_t)0x9644c23, (q31_t)0x8058531f, (q31_t)0x95e07f8, (q31_t)0x8057dd41, (q31_t)0x957c3c6, (q31_t)0x805767b2, - (q31_t)0x9517f8f, (q31_t)0x8056f272, (q31_t)0x94b3b52, (q31_t)0x80567d80, (q31_t)0x944f70f, (q31_t)0x805608dd, (q31_t)0x93eb2c6, (q31_t)0x80559489, - (q31_t)0x9386e78, (q31_t)0x80552084, (q31_t)0x9322a24, (q31_t)0x8054accd, (q31_t)0x92be5ca, (q31_t)0x80543965, (q31_t)0x925a16b, (q31_t)0x8053c64c, - (q31_t)0x91f5d06, (q31_t)0x80535381, (q31_t)0x919189c, (q31_t)0x8052e106, (q31_t)0x912d42c, (q31_t)0x80526ed9, (q31_t)0x90c8fb6, (q31_t)0x8051fcfb, - (q31_t)0x9064b3a, (q31_t)0x80518b6b, (q31_t)0x90006ba, (q31_t)0x80511a2b, (q31_t)0x8f9c233, (q31_t)0x8050a939, (q31_t)0x8f37da7, (q31_t)0x80503896, - (q31_t)0x8ed3916, (q31_t)0x804fc841, (q31_t)0x8e6f47f, (q31_t)0x804f583c, (q31_t)0x8e0afe2, (q31_t)0x804ee885, (q31_t)0x8da6b40, (q31_t)0x804e791d, - (q31_t)0x8d42699, (q31_t)0x804e0a04, (q31_t)0x8cde1ec, (q31_t)0x804d9b39, (q31_t)0x8c79d3a, (q31_t)0x804d2cbd, (q31_t)0x8c15882, (q31_t)0x804cbe90, - (q31_t)0x8bb13c5, (q31_t)0x804c50b2, (q31_t)0x8b4cf02, (q31_t)0x804be323, (q31_t)0x8ae8a3a, (q31_t)0x804b75e2, (q31_t)0x8a8456d, (q31_t)0x804b08f0, - (q31_t)0x8a2009a, (q31_t)0x804a9c4d, (q31_t)0x89bbbc3, (q31_t)0x804a2ff9, (q31_t)0x89576e5, (q31_t)0x8049c3f3, (q31_t)0x88f3203, (q31_t)0x8049583d, - (q31_t)0x888ed1b, (q31_t)0x8048ecd5, (q31_t)0x882a82e, (q31_t)0x804881bb, (q31_t)0x87c633c, (q31_t)0x804816f1, (q31_t)0x8761e44, (q31_t)0x8047ac75, - (q31_t)0x86fd947, (q31_t)0x80474248, (q31_t)0x8699445, (q31_t)0x8046d86a, (q31_t)0x8634f3e, (q31_t)0x80466edb, (q31_t)0x85d0a32, (q31_t)0x8046059b, - (q31_t)0x856c520, (q31_t)0x80459ca9, (q31_t)0x850800a, (q31_t)0x80453406, (q31_t)0x84a3aee, (q31_t)0x8044cbb2, (q31_t)0x843f5cd, (q31_t)0x804463ad, - (q31_t)0x83db0a7, (q31_t)0x8043fbf6, (q31_t)0x8376b7c, (q31_t)0x8043948e, (q31_t)0x831264c, (q31_t)0x80432d75, (q31_t)0x82ae117, (q31_t)0x8042c6ab, - (q31_t)0x8249bdd, (q31_t)0x80426030, (q31_t)0x81e569d, (q31_t)0x8041fa03, (q31_t)0x8181159, (q31_t)0x80419425, (q31_t)0x811cc10, (q31_t)0x80412e96, - (q31_t)0x80b86c2, (q31_t)0x8040c956, (q31_t)0x805416e, (q31_t)0x80406465, (q31_t)0x7fefc16, (q31_t)0x803fffc2, (q31_t)0x7f8b6b9, (q31_t)0x803f9b6f, - (q31_t)0x7f27157, (q31_t)0x803f376a, (q31_t)0x7ec2bf0, (q31_t)0x803ed3b3, (q31_t)0x7e5e685, (q31_t)0x803e704c, (q31_t)0x7dfa114, (q31_t)0x803e0d34, - (q31_t)0x7d95b9e, (q31_t)0x803daa6a, (q31_t)0x7d31624, (q31_t)0x803d47ef, (q31_t)0x7ccd0a5, (q31_t)0x803ce5c3, (q31_t)0x7c68b21, (q31_t)0x803c83e5, - (q31_t)0x7c04598, (q31_t)0x803c2257, (q31_t)0x7ba000b, (q31_t)0x803bc117, (q31_t)0x7b3ba78, (q31_t)0x803b6026, (q31_t)0x7ad74e1, (q31_t)0x803aff84, - (q31_t)0x7a72f45, (q31_t)0x803a9f31, (q31_t)0x7a0e9a5, (q31_t)0x803a3f2d, (q31_t)0x79aa400, (q31_t)0x8039df77, (q31_t)0x7945e56, (q31_t)0x80398010, - (q31_t)0x78e18a7, (q31_t)0x803920f8, (q31_t)0x787d2f4, (q31_t)0x8038c22f, (q31_t)0x7818d3c, (q31_t)0x803863b5, (q31_t)0x77b4780, (q31_t)0x80380589, - (q31_t)0x77501be, (q31_t)0x8037a7ac, (q31_t)0x76ebbf9, (q31_t)0x80374a1f, (q31_t)0x768762e, (q31_t)0x8036ece0, (q31_t)0x762305f, (q31_t)0x80368fef, - (q31_t)0x75bea8c, (q31_t)0x8036334e, (q31_t)0x755a4b4, (q31_t)0x8035d6fb, (q31_t)0x74f5ed7, (q31_t)0x80357af8, (q31_t)0x74918f6, (q31_t)0x80351f43, - (q31_t)0x742d311, (q31_t)0x8034c3dd, (q31_t)0x73c8d27, (q31_t)0x803468c5, (q31_t)0x7364738, (q31_t)0x80340dfd, (q31_t)0x7300145, (q31_t)0x8033b383, - (q31_t)0x729bb4e, (q31_t)0x80335959, (q31_t)0x7237552, (q31_t)0x8032ff7d, (q31_t)0x71d2f52, (q31_t)0x8032a5ef, (q31_t)0x716e94e, (q31_t)0x80324cb1, - (q31_t)0x710a345, (q31_t)0x8031f3c2, (q31_t)0x70a5d37, (q31_t)0x80319b21, (q31_t)0x7041726, (q31_t)0x803142cf, (q31_t)0x6fdd110, (q31_t)0x8030eacd, - (q31_t)0x6f78af6, (q31_t)0x80309318, (q31_t)0x6f144d7, (q31_t)0x80303bb3, (q31_t)0x6eafeb4, (q31_t)0x802fe49d, (q31_t)0x6e4b88d, (q31_t)0x802f8dd5, - (q31_t)0x6de7262, (q31_t)0x802f375d, (q31_t)0x6d82c32, (q31_t)0x802ee133, (q31_t)0x6d1e5fe, (q31_t)0x802e8b58, (q31_t)0x6cb9fc6, (q31_t)0x802e35cb, - (q31_t)0x6c5598a, (q31_t)0x802de08e, (q31_t)0x6bf1349, (q31_t)0x802d8ba0, (q31_t)0x6b8cd05, (q31_t)0x802d3700, (q31_t)0x6b286bc, (q31_t)0x802ce2af, - (q31_t)0x6ac406f, (q31_t)0x802c8ead, (q31_t)0x6a5fa1e, (q31_t)0x802c3afa, (q31_t)0x69fb3c9, (q31_t)0x802be796, (q31_t)0x6996d70, (q31_t)0x802b9480, - (q31_t)0x6932713, (q31_t)0x802b41ba, (q31_t)0x68ce0b2, (q31_t)0x802aef42, (q31_t)0x6869a4c, (q31_t)0x802a9d19, (q31_t)0x68053e3, (q31_t)0x802a4b3f, - (q31_t)0x67a0d76, (q31_t)0x8029f9b4, (q31_t)0x673c704, (q31_t)0x8029a878, (q31_t)0x66d808f, (q31_t)0x8029578b, (q31_t)0x6673a16, (q31_t)0x802906ec, - (q31_t)0x660f398, (q31_t)0x8028b69c, (q31_t)0x65aad17, (q31_t)0x8028669b, (q31_t)0x6546692, (q31_t)0x802816e9, (q31_t)0x64e2009, (q31_t)0x8027c786, - (q31_t)0x647d97c, (q31_t)0x80277872, (q31_t)0x64192eb, (q31_t)0x802729ad, (q31_t)0x63b4c57, (q31_t)0x8026db36, (q31_t)0x63505be, (q31_t)0x80268d0e, - (q31_t)0x62ebf22, (q31_t)0x80263f36, (q31_t)0x6287882, (q31_t)0x8025f1ac, (q31_t)0x62231de, (q31_t)0x8025a471, (q31_t)0x61beb36, (q31_t)0x80255784, - (q31_t)0x615a48b, (q31_t)0x80250ae7, (q31_t)0x60f5ddc, (q31_t)0x8024be99, (q31_t)0x6091729, (q31_t)0x80247299, (q31_t)0x602d072, (q31_t)0x802426e8, - (q31_t)0x5fc89b8, (q31_t)0x8023db86, (q31_t)0x5f642fa, (q31_t)0x80239073, (q31_t)0x5effc38, (q31_t)0x802345af, (q31_t)0x5e9b572, (q31_t)0x8022fb3a, - (q31_t)0x5e36ea9, (q31_t)0x8022b114, (q31_t)0x5dd27dd, (q31_t)0x8022673c, (q31_t)0x5d6e10c, (q31_t)0x80221db3, (q31_t)0x5d09a38, (q31_t)0x8021d47a, - (q31_t)0x5ca5361, (q31_t)0x80218b8f, (q31_t)0x5c40c86, (q31_t)0x802142f3, (q31_t)0x5bdc5a7, (q31_t)0x8020faa6, (q31_t)0x5b77ec5, (q31_t)0x8020b2a7, - (q31_t)0x5b137df, (q31_t)0x80206af8, (q31_t)0x5aaf0f6, (q31_t)0x80202397, (q31_t)0x5a4aa09, (q31_t)0x801fdc86, (q31_t)0x59e6319, (q31_t)0x801f95c3, - (q31_t)0x5981c26, (q31_t)0x801f4f4f, (q31_t)0x591d52f, (q31_t)0x801f092a, (q31_t)0x58b8e34, (q31_t)0x801ec354, (q31_t)0x5854736, (q31_t)0x801e7dcd, - (q31_t)0x57f0035, (q31_t)0x801e3895, (q31_t)0x578b930, (q31_t)0x801df3ab, (q31_t)0x5727228, (q31_t)0x801daf11, (q31_t)0x56c2b1c, (q31_t)0x801d6ac5, - (q31_t)0x565e40d, (q31_t)0x801d26c8, (q31_t)0x55f9cfb, (q31_t)0x801ce31a, (q31_t)0x55955e6, (q31_t)0x801c9fbb, (q31_t)0x5530ecd, (q31_t)0x801c5cab, - (q31_t)0x54cc7b1, (q31_t)0x801c19ea, (q31_t)0x5468092, (q31_t)0x801bd777, (q31_t)0x540396f, (q31_t)0x801b9554, (q31_t)0x539f249, (q31_t)0x801b537f, - (q31_t)0x533ab20, (q31_t)0x801b11fa, (q31_t)0x52d63f4, (q31_t)0x801ad0c3, (q31_t)0x5271cc4, (q31_t)0x801a8fdb, (q31_t)0x520d592, (q31_t)0x801a4f42, - (q31_t)0x51a8e5c, (q31_t)0x801a0ef8, (q31_t)0x5144723, (q31_t)0x8019cefd, (q31_t)0x50dffe7, (q31_t)0x80198f50, (q31_t)0x507b8a8, (q31_t)0x80194ff3, - (q31_t)0x5017165, (q31_t)0x801910e4, (q31_t)0x4fb2a20, (q31_t)0x8018d225, (q31_t)0x4f4e2d8, (q31_t)0x801893b4, (q31_t)0x4ee9b8c, (q31_t)0x80185592, - (q31_t)0x4e8543e, (q31_t)0x801817bf, (q31_t)0x4e20cec, (q31_t)0x8017da3b, (q31_t)0x4dbc597, (q31_t)0x80179d06, (q31_t)0x4d57e40, (q31_t)0x80176020, - (q31_t)0x4cf36e5, (q31_t)0x80172388, (q31_t)0x4c8ef88, (q31_t)0x8016e740, (q31_t)0x4c2a827, (q31_t)0x8016ab46, (q31_t)0x4bc60c4, (q31_t)0x80166f9c, - (q31_t)0x4b6195d, (q31_t)0x80163440, (q31_t)0x4afd1f4, (q31_t)0x8015f933, (q31_t)0x4a98a88, (q31_t)0x8015be75, (q31_t)0x4a34319, (q31_t)0x80158406, - (q31_t)0x49cfba7, (q31_t)0x801549e6, (q31_t)0x496b432, (q31_t)0x80151015, (q31_t)0x4906cbb, (q31_t)0x8014d693, (q31_t)0x48a2540, (q31_t)0x80149d5f, - (q31_t)0x483ddc3, (q31_t)0x8014647b, (q31_t)0x47d9643, (q31_t)0x80142be5, (q31_t)0x4774ec1, (q31_t)0x8013f39e, (q31_t)0x471073b, (q31_t)0x8013bba7, - (q31_t)0x46abfb3, (q31_t)0x801383fe, (q31_t)0x4647828, (q31_t)0x80134ca4, (q31_t)0x45e309a, (q31_t)0x80131599, (q31_t)0x457e90a, (q31_t)0x8012dedd, - (q31_t)0x451a177, (q31_t)0x8012a86f, (q31_t)0x44b59e1, (q31_t)0x80127251, (q31_t)0x4451249, (q31_t)0x80123c82, (q31_t)0x43ecaae, (q31_t)0x80120701, - (q31_t)0x4388310, (q31_t)0x8011d1d0, (q31_t)0x4323b70, (q31_t)0x80119ced, (q31_t)0x42bf3cd, (q31_t)0x80116859, (q31_t)0x425ac28, (q31_t)0x80113414, - (q31_t)0x41f6480, (q31_t)0x8011001f, (q31_t)0x4191cd5, (q31_t)0x8010cc78, (q31_t)0x412d528, (q31_t)0x8010991f, (q31_t)0x40c8d79, (q31_t)0x80106616, - (q31_t)0x40645c7, (q31_t)0x8010335c, (q31_t)0x3fffe12, (q31_t)0x801000f1, (q31_t)0x3f9b65b, (q31_t)0x800fced4, (q31_t)0x3f36ea2, (q31_t)0x800f9d07, - (q31_t)0x3ed26e6, (q31_t)0x800f6b88, (q31_t)0x3e6df28, (q31_t)0x800f3a59, (q31_t)0x3e09767, (q31_t)0x800f0978, (q31_t)0x3da4fa4, (q31_t)0x800ed8e6, - (q31_t)0x3d407df, (q31_t)0x800ea8a3, (q31_t)0x3cdc017, (q31_t)0x800e78af, (q31_t)0x3c7784d, (q31_t)0x800e490a, (q31_t)0x3c13080, (q31_t)0x800e19b4, - (q31_t)0x3bae8b2, (q31_t)0x800deaad, (q31_t)0x3b4a0e0, (q31_t)0x800dbbf5, (q31_t)0x3ae590d, (q31_t)0x800d8d8b, (q31_t)0x3a81137, (q31_t)0x800d5f71, - (q31_t)0x3a1c960, (q31_t)0x800d31a5, (q31_t)0x39b8185, (q31_t)0x800d0429, (q31_t)0x39539a9, (q31_t)0x800cd6fb, (q31_t)0x38ef1ca, (q31_t)0x800caa1c, - (q31_t)0x388a9ea, (q31_t)0x800c7d8c, (q31_t)0x3826207, (q31_t)0x800c514c, (q31_t)0x37c1a22, (q31_t)0x800c255a, (q31_t)0x375d23a, (q31_t)0x800bf9b7, - (q31_t)0x36f8a51, (q31_t)0x800bce63, (q31_t)0x3694265, (q31_t)0x800ba35d, (q31_t)0x362fa78, (q31_t)0x800b78a7, (q31_t)0x35cb288, (q31_t)0x800b4e40, - (q31_t)0x3566a96, (q31_t)0x800b2427, (q31_t)0x35022a2, (q31_t)0x800afa5e, (q31_t)0x349daac, (q31_t)0x800ad0e3, (q31_t)0x34392b4, (q31_t)0x800aa7b8, - (q31_t)0x33d4abb, (q31_t)0x800a7edb, (q31_t)0x33702bf, (q31_t)0x800a564e, (q31_t)0x330bac1, (q31_t)0x800a2e0f, (q31_t)0x32a72c1, (q31_t)0x800a061f, - (q31_t)0x3242abf, (q31_t)0x8009de7e, (q31_t)0x31de2bb, (q31_t)0x8009b72c, (q31_t)0x3179ab5, (q31_t)0x80099029, (q31_t)0x31152ae, (q31_t)0x80096975, - (q31_t)0x30b0aa4, (q31_t)0x80094310, (q31_t)0x304c299, (q31_t)0x80091cf9, (q31_t)0x2fe7a8c, (q31_t)0x8008f732, (q31_t)0x2f8327d, (q31_t)0x8008d1ba, - (q31_t)0x2f1ea6c, (q31_t)0x8008ac90, (q31_t)0x2eba259, (q31_t)0x800887b6, (q31_t)0x2e55a44, (q31_t)0x8008632a, (q31_t)0x2df122e, (q31_t)0x80083eed, - (q31_t)0x2d8ca16, (q31_t)0x80081b00, (q31_t)0x2d281fc, (q31_t)0x8007f761, (q31_t)0x2cc39e1, (q31_t)0x8007d411, (q31_t)0x2c5f1c3, (q31_t)0x8007b110, - (q31_t)0x2bfa9a4, (q31_t)0x80078e5e, (q31_t)0x2b96184, (q31_t)0x80076bfb, (q31_t)0x2b31961, (q31_t)0x800749e7, (q31_t)0x2acd13d, (q31_t)0x80072822, - (q31_t)0x2a68917, (q31_t)0x800706ac, (q31_t)0x2a040f0, (q31_t)0x8006e585, (q31_t)0x299f8c7, (q31_t)0x8006c4ac, (q31_t)0x293b09c, (q31_t)0x8006a423, - (q31_t)0x28d6870, (q31_t)0x800683e8, (q31_t)0x2872043, (q31_t)0x800663fd, (q31_t)0x280d813, (q31_t)0x80064460, (q31_t)0x27a8fe2, (q31_t)0x80062513, - (q31_t)0x27447b0, (q31_t)0x80060614, (q31_t)0x26dff7c, (q31_t)0x8005e764, (q31_t)0x267b747, (q31_t)0x8005c904, (q31_t)0x2616f10, (q31_t)0x8005aaf2, - (q31_t)0x25b26d7, (q31_t)0x80058d2f, (q31_t)0x254de9e, (q31_t)0x80056fbb, (q31_t)0x24e9662, (q31_t)0x80055296, (q31_t)0x2484e26, (q31_t)0x800535c0, - (q31_t)0x24205e8, (q31_t)0x80051939, (q31_t)0x23bbda8, (q31_t)0x8004fd00, (q31_t)0x2357567, (q31_t)0x8004e117, (q31_t)0x22f2d25, (q31_t)0x8004c57d, - (q31_t)0x228e4e2, (q31_t)0x8004aa32, (q31_t)0x2229c9d, (q31_t)0x80048f35, (q31_t)0x21c5457, (q31_t)0x80047488, (q31_t)0x2160c0f, (q31_t)0x80045a29, - (q31_t)0x20fc3c6, (q31_t)0x8004401a, (q31_t)0x2097b7c, (q31_t)0x80042659, (q31_t)0x2033331, (q31_t)0x80040ce7, (q31_t)0x1fceae4, (q31_t)0x8003f3c5, - (q31_t)0x1f6a297, (q31_t)0x8003daf1, (q31_t)0x1f05a48, (q31_t)0x8003c26c, (q31_t)0x1ea11f7, (q31_t)0x8003aa36, (q31_t)0x1e3c9a6, (q31_t)0x8003924f, - (q31_t)0x1dd8154, (q31_t)0x80037ab7, (q31_t)0x1d73900, (q31_t)0x8003636e, (q31_t)0x1d0f0ab, (q31_t)0x80034c74, (q31_t)0x1caa855, (q31_t)0x800335c9, - (q31_t)0x1c45ffe, (q31_t)0x80031f6d, (q31_t)0x1be17a6, (q31_t)0x80030960, (q31_t)0x1b7cf4d, (q31_t)0x8002f3a1, (q31_t)0x1b186f3, (q31_t)0x8002de32, - (q31_t)0x1ab3e97, (q31_t)0x8002c912, (q31_t)0x1a4f63b, (q31_t)0x8002b440, (q31_t)0x19eaddd, (q31_t)0x80029fbe, (q31_t)0x198657f, (q31_t)0x80028b8a, - (q31_t)0x1921d20, (q31_t)0x800277a6, (q31_t)0x18bd4bf, (q31_t)0x80026410, (q31_t)0x1858c5e, (q31_t)0x800250c9, (q31_t)0x17f43fc, (q31_t)0x80023dd2, - (q31_t)0x178fb99, (q31_t)0x80022b29, (q31_t)0x172b335, (q31_t)0x800218cf, (q31_t)0x16c6ad0, (q31_t)0x800206c4, (q31_t)0x166226a, (q31_t)0x8001f508, - (q31_t)0x15fda03, (q31_t)0x8001e39b, (q31_t)0x159919c, (q31_t)0x8001d27d, (q31_t)0x1534934, (q31_t)0x8001c1ae, (q31_t)0x14d00ca, (q31_t)0x8001b12e, - (q31_t)0x146b860, (q31_t)0x8001a0fd, (q31_t)0x1406ff6, (q31_t)0x8001911b, (q31_t)0x13a278a, (q31_t)0x80018187, (q31_t)0x133df1e, (q31_t)0x80017243, - (q31_t)0x12d96b1, (q31_t)0x8001634e, (q31_t)0x1274e43, (q31_t)0x800154a7, (q31_t)0x12105d5, (q31_t)0x80014650, (q31_t)0x11abd66, (q31_t)0x80013847, - (q31_t)0x11474f6, (q31_t)0x80012a8e, (q31_t)0x10e2c85, (q31_t)0x80011d23, (q31_t)0x107e414, (q31_t)0x80011008, (q31_t)0x1019ba2, (q31_t)0x8001033b, - (q31_t)0x0fb5330, (q31_t)0x8000f6bd, (q31_t)0x0f50abd, (q31_t)0x8000ea8e, (q31_t)0x0eec249, (q31_t)0x8000deaf, (q31_t)0x0e879d5, (q31_t)0x8000d31e, - (q31_t)0x0e23160, (q31_t)0x8000c7dc, (q31_t)0x0dbe8eb, (q31_t)0x8000bce9, (q31_t)0x0d5a075, (q31_t)0x8000b245, (q31_t)0x0cf57ff, (q31_t)0x8000a7f0, - (q31_t)0x0c90f88, (q31_t)0x80009dea, (q31_t)0x0c2c711, (q31_t)0x80009433, (q31_t)0x0bc7e99, (q31_t)0x80008aca, (q31_t)0x0b63621, (q31_t)0x800081b1, - (q31_t)0x0afeda8, (q31_t)0x800078e7, (q31_t)0x0a9a52f, (q31_t)0x8000706c, (q31_t)0x0a35cb5, (q31_t)0x8000683f, (q31_t)0x09d143b, (q31_t)0x80006062, - (q31_t)0x096cbc1, (q31_t)0x800058d4, (q31_t)0x0908346, (q31_t)0x80005194, (q31_t)0x08a3acb, (q31_t)0x80004aa4, (q31_t)0x083f250, (q31_t)0x80004402, - (q31_t)0x07da9d4, (q31_t)0x80003daf, (q31_t)0x0776159, (q31_t)0x800037ac, (q31_t)0x07118dc, (q31_t)0x800031f7, (q31_t)0x06ad060, (q31_t)0x80002c91, - (q31_t)0x06487e3, (q31_t)0x8000277a, (q31_t)0x05e3f66, (q31_t)0x800022b3, (q31_t)0x057f6e9, (q31_t)0x80001e3a, (q31_t)0x051ae6b, (q31_t)0x80001a10, - (q31_t)0x04b65ee, (q31_t)0x80001635, (q31_t)0x0451d70, (q31_t)0x800012a9, (q31_t)0x03ed4f2, (q31_t)0x80000f6c, (q31_t)0x0388c74, (q31_t)0x80000c7e, - (q31_t)0x03243f5, (q31_t)0x800009df, (q31_t)0x02bfb77, (q31_t)0x8000078e, (q31_t)0x025b2f8, (q31_t)0x8000058d, (q31_t)0x01f6a7a, (q31_t)0x800003db, - (q31_t)0x01921fb, (q31_t)0x80000278, (q31_t)0x012d97c, (q31_t)0x80000163, (q31_t)0x00c90fe, (q31_t)0x8000009e, (q31_t)0x006487f, (q31_t)0x80000027 -}; - const q31_t cos_factorsQ31_8192[8192] = { - (q31_t)0x7ffffff6, (q31_t)0x7fffffa7, (q31_t)0x7fffff09, (q31_t)0x7ffffe1c, (q31_t)0x7ffffce1, (q31_t)0x7ffffb56, (q31_t)0x7ffff97c, (q31_t)0x7ffff753, - (q31_t)0x7ffff4dc, (q31_t)0x7ffff215, (q31_t)0x7fffef00, (q31_t)0x7fffeb9b, (q31_t)0x7fffe7e8, (q31_t)0x7fffe3e5, (q31_t)0x7fffdf94, (q31_t)0x7fffdaf3, - (q31_t)0x7fffd604, (q31_t)0x7fffd0c6, (q31_t)0x7fffcb39, (q31_t)0x7fffc55c, (q31_t)0x7fffbf31, (q31_t)0x7fffb8b7, (q31_t)0x7fffb1ee, (q31_t)0x7fffaad6, - (q31_t)0x7fffa36f, (q31_t)0x7fff9bb9, (q31_t)0x7fff93b4, (q31_t)0x7fff8b61, (q31_t)0x7fff82be, (q31_t)0x7fff79cc, (q31_t)0x7fff708b, (q31_t)0x7fff66fc, - (q31_t)0x7fff5d1d, (q31_t)0x7fff52ef, (q31_t)0x7fff4873, (q31_t)0x7fff3da8, (q31_t)0x7fff328d, (q31_t)0x7fff2724, (q31_t)0x7fff1b6b, (q31_t)0x7fff0f64, - (q31_t)0x7fff030e, (q31_t)0x7ffef669, (q31_t)0x7ffee975, (q31_t)0x7ffedc31, (q31_t)0x7ffece9f, (q31_t)0x7ffec0be, (q31_t)0x7ffeb28e, (q31_t)0x7ffea40f, - (q31_t)0x7ffe9542, (q31_t)0x7ffe8625, (q31_t)0x7ffe76b9, (q31_t)0x7ffe66fe, (q31_t)0x7ffe56f5, (q31_t)0x7ffe469c, (q31_t)0x7ffe35f4, (q31_t)0x7ffe24fe, - (q31_t)0x7ffe13b8, (q31_t)0x7ffe0224, (q31_t)0x7ffdf040, (q31_t)0x7ffdde0e, (q31_t)0x7ffdcb8d, (q31_t)0x7ffdb8bc, (q31_t)0x7ffda59d, (q31_t)0x7ffd922f, - (q31_t)0x7ffd7e72, (q31_t)0x7ffd6a66, (q31_t)0x7ffd560b, (q31_t)0x7ffd4161, (q31_t)0x7ffd2c68, (q31_t)0x7ffd1720, (q31_t)0x7ffd0189, (q31_t)0x7ffceba4, - (q31_t)0x7ffcd56f, (q31_t)0x7ffcbeeb, (q31_t)0x7ffca819, (q31_t)0x7ffc90f7, (q31_t)0x7ffc7987, (q31_t)0x7ffc61c7, (q31_t)0x7ffc49b9, (q31_t)0x7ffc315b, - (q31_t)0x7ffc18af, (q31_t)0x7ffbffb4, (q31_t)0x7ffbe66a, (q31_t)0x7ffbccd0, (q31_t)0x7ffbb2e8, (q31_t)0x7ffb98b1, (q31_t)0x7ffb7e2b, (q31_t)0x7ffb6356, - (q31_t)0x7ffb4833, (q31_t)0x7ffb2cc0, (q31_t)0x7ffb10fe, (q31_t)0x7ffaf4ed, (q31_t)0x7ffad88e, (q31_t)0x7ffabbdf, (q31_t)0x7ffa9ee2, (q31_t)0x7ffa8195, - (q31_t)0x7ffa63fa, (q31_t)0x7ffa460f, (q31_t)0x7ffa27d6, (q31_t)0x7ffa094e, (q31_t)0x7ff9ea76, (q31_t)0x7ff9cb50, (q31_t)0x7ff9abdb, (q31_t)0x7ff98c17, - (q31_t)0x7ff96c04, (q31_t)0x7ff94ba2, (q31_t)0x7ff92af1, (q31_t)0x7ff909f2, (q31_t)0x7ff8e8a3, (q31_t)0x7ff8c705, (q31_t)0x7ff8a519, (q31_t)0x7ff882dd, - (q31_t)0x7ff86053, (q31_t)0x7ff83d79, (q31_t)0x7ff81a51, (q31_t)0x7ff7f6da, (q31_t)0x7ff7d313, (q31_t)0x7ff7aefe, (q31_t)0x7ff78a9a, (q31_t)0x7ff765e7, - (q31_t)0x7ff740e5, (q31_t)0x7ff71b94, (q31_t)0x7ff6f5f4, (q31_t)0x7ff6d005, (q31_t)0x7ff6a9c8, (q31_t)0x7ff6833b, (q31_t)0x7ff65c5f, (q31_t)0x7ff63535, - (q31_t)0x7ff60dbb, (q31_t)0x7ff5e5f3, (q31_t)0x7ff5bddc, (q31_t)0x7ff59576, (q31_t)0x7ff56cc0, (q31_t)0x7ff543bc, (q31_t)0x7ff51a69, (q31_t)0x7ff4f0c7, - (q31_t)0x7ff4c6d6, (q31_t)0x7ff49c96, (q31_t)0x7ff47208, (q31_t)0x7ff4472a, (q31_t)0x7ff41bfd, (q31_t)0x7ff3f082, (q31_t)0x7ff3c4b7, (q31_t)0x7ff3989e, - (q31_t)0x7ff36c36, (q31_t)0x7ff33f7e, (q31_t)0x7ff31278, (q31_t)0x7ff2e523, (q31_t)0x7ff2b77f, (q31_t)0x7ff2898c, (q31_t)0x7ff25b4a, (q31_t)0x7ff22cb9, - (q31_t)0x7ff1fdd9, (q31_t)0x7ff1ceab, (q31_t)0x7ff19f2d, (q31_t)0x7ff16f61, (q31_t)0x7ff13f45, (q31_t)0x7ff10edb, (q31_t)0x7ff0de22, (q31_t)0x7ff0ad19, - (q31_t)0x7ff07bc2, (q31_t)0x7ff04a1c, (q31_t)0x7ff01827, (q31_t)0x7fefe5e4, (q31_t)0x7fefb351, (q31_t)0x7fef806f, (q31_t)0x7fef4d3e, (q31_t)0x7fef19bf, - (q31_t)0x7feee5f0, (q31_t)0x7feeb1d3, (q31_t)0x7fee7d67, (q31_t)0x7fee48ac, (q31_t)0x7fee13a1, (q31_t)0x7fedde48, (q31_t)0x7feda8a0, (q31_t)0x7fed72aa, - (q31_t)0x7fed3c64, (q31_t)0x7fed05cf, (q31_t)0x7fecceec, (q31_t)0x7fec97b9, (q31_t)0x7fec6038, (q31_t)0x7fec2867, (q31_t)0x7febf048, (q31_t)0x7febb7da, - (q31_t)0x7feb7f1d, (q31_t)0x7feb4611, (q31_t)0x7feb0cb6, (q31_t)0x7fead30c, (q31_t)0x7fea9914, (q31_t)0x7fea5ecc, (q31_t)0x7fea2436, (q31_t)0x7fe9e950, - (q31_t)0x7fe9ae1c, (q31_t)0x7fe97299, (q31_t)0x7fe936c7, (q31_t)0x7fe8faa6, (q31_t)0x7fe8be36, (q31_t)0x7fe88177, (q31_t)0x7fe84469, (q31_t)0x7fe8070d, - (q31_t)0x7fe7c961, (q31_t)0x7fe78b67, (q31_t)0x7fe74d1e, (q31_t)0x7fe70e85, (q31_t)0x7fe6cf9e, (q31_t)0x7fe69068, (q31_t)0x7fe650e3, (q31_t)0x7fe61110, - (q31_t)0x7fe5d0ed, (q31_t)0x7fe5907b, (q31_t)0x7fe54fbb, (q31_t)0x7fe50eac, (q31_t)0x7fe4cd4d, (q31_t)0x7fe48ba0, (q31_t)0x7fe449a4, (q31_t)0x7fe40759, - (q31_t)0x7fe3c4bf, (q31_t)0x7fe381d7, (q31_t)0x7fe33e9f, (q31_t)0x7fe2fb19, (q31_t)0x7fe2b743, (q31_t)0x7fe2731f, (q31_t)0x7fe22eac, (q31_t)0x7fe1e9ea, - (q31_t)0x7fe1a4d9, (q31_t)0x7fe15f79, (q31_t)0x7fe119cb, (q31_t)0x7fe0d3cd, (q31_t)0x7fe08d81, (q31_t)0x7fe046e5, (q31_t)0x7fdffffb, (q31_t)0x7fdfb8c2, - (q31_t)0x7fdf713a, (q31_t)0x7fdf2963, (q31_t)0x7fdee13e, (q31_t)0x7fde98c9, (q31_t)0x7fde5006, (q31_t)0x7fde06f3, (q31_t)0x7fddbd92, (q31_t)0x7fdd73e2, - (q31_t)0x7fdd29e3, (q31_t)0x7fdcdf95, (q31_t)0x7fdc94f9, (q31_t)0x7fdc4a0d, (q31_t)0x7fdbfed3, (q31_t)0x7fdbb349, (q31_t)0x7fdb6771, (q31_t)0x7fdb1b4a, - (q31_t)0x7fdaced4, (q31_t)0x7fda820f, (q31_t)0x7fda34fc, (q31_t)0x7fd9e799, (q31_t)0x7fd999e8, (q31_t)0x7fd94be8, (q31_t)0x7fd8fd98, (q31_t)0x7fd8aefa, - (q31_t)0x7fd8600e, (q31_t)0x7fd810d2, (q31_t)0x7fd7c147, (q31_t)0x7fd7716e, (q31_t)0x7fd72146, (q31_t)0x7fd6d0cf, (q31_t)0x7fd68009, (q31_t)0x7fd62ef4, - (q31_t)0x7fd5dd90, (q31_t)0x7fd58bdd, (q31_t)0x7fd539dc, (q31_t)0x7fd4e78c, (q31_t)0x7fd494ed, (q31_t)0x7fd441ff, (q31_t)0x7fd3eec2, (q31_t)0x7fd39b36, - (q31_t)0x7fd3475c, (q31_t)0x7fd2f332, (q31_t)0x7fd29eba, (q31_t)0x7fd249f3, (q31_t)0x7fd1f4dd, (q31_t)0x7fd19f78, (q31_t)0x7fd149c5, (q31_t)0x7fd0f3c2, - (q31_t)0x7fd09d71, (q31_t)0x7fd046d1, (q31_t)0x7fcfefe2, (q31_t)0x7fcf98a4, (q31_t)0x7fcf4117, (q31_t)0x7fcee93c, (q31_t)0x7fce9112, (q31_t)0x7fce3898, - (q31_t)0x7fcddfd0, (q31_t)0x7fcd86b9, (q31_t)0x7fcd2d54, (q31_t)0x7fccd39f, (q31_t)0x7fcc799c, (q31_t)0x7fcc1f4a, (q31_t)0x7fcbc4a9, (q31_t)0x7fcb69b9, - (q31_t)0x7fcb0e7a, (q31_t)0x7fcab2ed, (q31_t)0x7fca5710, (q31_t)0x7fc9fae5, (q31_t)0x7fc99e6b, (q31_t)0x7fc941a2, (q31_t)0x7fc8e48b, (q31_t)0x7fc88724, - (q31_t)0x7fc8296f, (q31_t)0x7fc7cb6b, (q31_t)0x7fc76d18, (q31_t)0x7fc70e76, (q31_t)0x7fc6af86, (q31_t)0x7fc65046, (q31_t)0x7fc5f0b8, (q31_t)0x7fc590db, - (q31_t)0x7fc530af, (q31_t)0x7fc4d035, (q31_t)0x7fc46f6b, (q31_t)0x7fc40e53, (q31_t)0x7fc3acec, (q31_t)0x7fc34b36, (q31_t)0x7fc2e931, (q31_t)0x7fc286de, - (q31_t)0x7fc2243b, (q31_t)0x7fc1c14a, (q31_t)0x7fc15e0a, (q31_t)0x7fc0fa7b, (q31_t)0x7fc0969e, (q31_t)0x7fc03271, (q31_t)0x7fbfcdf6, (q31_t)0x7fbf692c, - (q31_t)0x7fbf0414, (q31_t)0x7fbe9eac, (q31_t)0x7fbe38f6, (q31_t)0x7fbdd2f0, (q31_t)0x7fbd6c9c, (q31_t)0x7fbd05fa, (q31_t)0x7fbc9f08, (q31_t)0x7fbc37c8, - (q31_t)0x7fbbd039, (q31_t)0x7fbb685b, (q31_t)0x7fbb002e, (q31_t)0x7fba97b2, (q31_t)0x7fba2ee8, (q31_t)0x7fb9c5cf, (q31_t)0x7fb95c67, (q31_t)0x7fb8f2b0, - (q31_t)0x7fb888ab, (q31_t)0x7fb81e57, (q31_t)0x7fb7b3b4, (q31_t)0x7fb748c2, (q31_t)0x7fb6dd81, (q31_t)0x7fb671f2, (q31_t)0x7fb60614, (q31_t)0x7fb599e7, - (q31_t)0x7fb52d6b, (q31_t)0x7fb4c0a1, (q31_t)0x7fb45387, (q31_t)0x7fb3e61f, (q31_t)0x7fb37869, (q31_t)0x7fb30a63, (q31_t)0x7fb29c0f, (q31_t)0x7fb22d6c, - (q31_t)0x7fb1be7a, (q31_t)0x7fb14f39, (q31_t)0x7fb0dfaa, (q31_t)0x7fb06fcb, (q31_t)0x7fafff9e, (q31_t)0x7faf8f23, (q31_t)0x7faf1e58, (q31_t)0x7faead3f, - (q31_t)0x7fae3bd7, (q31_t)0x7fadca20, (q31_t)0x7fad581b, (q31_t)0x7face5c6, (q31_t)0x7fac7323, (q31_t)0x7fac0031, (q31_t)0x7fab8cf1, (q31_t)0x7fab1962, - (q31_t)0x7faaa584, (q31_t)0x7faa3157, (q31_t)0x7fa9bcdb, (q31_t)0x7fa94811, (q31_t)0x7fa8d2f8, (q31_t)0x7fa85d90, (q31_t)0x7fa7e7d9, (q31_t)0x7fa771d4, - (q31_t)0x7fa6fb80, (q31_t)0x7fa684dd, (q31_t)0x7fa60dec, (q31_t)0x7fa596ac, (q31_t)0x7fa51f1d, (q31_t)0x7fa4a73f, (q31_t)0x7fa42f12, (q31_t)0x7fa3b697, - (q31_t)0x7fa33dcd, (q31_t)0x7fa2c4b5, (q31_t)0x7fa24b4d, (q31_t)0x7fa1d197, (q31_t)0x7fa15792, (q31_t)0x7fa0dd3f, (q31_t)0x7fa0629c, (q31_t)0x7f9fe7ab, - (q31_t)0x7f9f6c6b, (q31_t)0x7f9ef0dd, (q31_t)0x7f9e7500, (q31_t)0x7f9df8d4, (q31_t)0x7f9d7c59, (q31_t)0x7f9cff90, (q31_t)0x7f9c8278, (q31_t)0x7f9c0511, - (q31_t)0x7f9b875b, (q31_t)0x7f9b0957, (q31_t)0x7f9a8b04, (q31_t)0x7f9a0c62, (q31_t)0x7f998d72, (q31_t)0x7f990e33, (q31_t)0x7f988ea5, (q31_t)0x7f980ec8, - (q31_t)0x7f978e9d, (q31_t)0x7f970e23, (q31_t)0x7f968d5b, (q31_t)0x7f960c43, (q31_t)0x7f958add, (q31_t)0x7f950929, (q31_t)0x7f948725, (q31_t)0x7f9404d3, - (q31_t)0x7f938232, (q31_t)0x7f92ff43, (q31_t)0x7f927c04, (q31_t)0x7f91f878, (q31_t)0x7f91749c, (q31_t)0x7f90f072, (q31_t)0x7f906bf9, (q31_t)0x7f8fe731, - (q31_t)0x7f8f621b, (q31_t)0x7f8edcb6, (q31_t)0x7f8e5702, (q31_t)0x7f8dd0ff, (q31_t)0x7f8d4aae, (q31_t)0x7f8cc40f, (q31_t)0x7f8c3d20, (q31_t)0x7f8bb5e3, - (q31_t)0x7f8b2e57, (q31_t)0x7f8aa67d, (q31_t)0x7f8a1e54, (q31_t)0x7f8995dc, (q31_t)0x7f890d15, (q31_t)0x7f888400, (q31_t)0x7f87fa9c, (q31_t)0x7f8770ea, - (q31_t)0x7f86e6e9, (q31_t)0x7f865c99, (q31_t)0x7f85d1fa, (q31_t)0x7f85470d, (q31_t)0x7f84bbd1, (q31_t)0x7f843047, (q31_t)0x7f83a46e, (q31_t)0x7f831846, - (q31_t)0x7f828bcf, (q31_t)0x7f81ff0a, (q31_t)0x7f8171f6, (q31_t)0x7f80e494, (q31_t)0x7f8056e3, (q31_t)0x7f7fc8e3, (q31_t)0x7f7f3a95, (q31_t)0x7f7eabf8, - (q31_t)0x7f7e1d0c, (q31_t)0x7f7d8dd2, (q31_t)0x7f7cfe49, (q31_t)0x7f7c6e71, (q31_t)0x7f7bde4b, (q31_t)0x7f7b4dd6, (q31_t)0x7f7abd13, (q31_t)0x7f7a2c01, - (q31_t)0x7f799aa0, (q31_t)0x7f7908f0, (q31_t)0x7f7876f2, (q31_t)0x7f77e4a6, (q31_t)0x7f77520a, (q31_t)0x7f76bf21, (q31_t)0x7f762be8, (q31_t)0x7f759861, - (q31_t)0x7f75048b, (q31_t)0x7f747067, (q31_t)0x7f73dbf4, (q31_t)0x7f734732, (q31_t)0x7f72b222, (q31_t)0x7f721cc3, (q31_t)0x7f718715, (q31_t)0x7f70f119, - (q31_t)0x7f705ace, (q31_t)0x7f6fc435, (q31_t)0x7f6f2d4d, (q31_t)0x7f6e9617, (q31_t)0x7f6dfe91, (q31_t)0x7f6d66be, (q31_t)0x7f6cce9b, (q31_t)0x7f6c362a, - (q31_t)0x7f6b9d6b, (q31_t)0x7f6b045d, (q31_t)0x7f6a6b00, (q31_t)0x7f69d154, (q31_t)0x7f69375a, (q31_t)0x7f689d12, (q31_t)0x7f68027b, (q31_t)0x7f676795, - (q31_t)0x7f66cc61, (q31_t)0x7f6630de, (q31_t)0x7f65950c, (q31_t)0x7f64f8ec, (q31_t)0x7f645c7d, (q31_t)0x7f63bfc0, (q31_t)0x7f6322b4, (q31_t)0x7f62855a, - (q31_t)0x7f61e7b1, (q31_t)0x7f6149b9, (q31_t)0x7f60ab73, (q31_t)0x7f600cdf, (q31_t)0x7f5f6dfb, (q31_t)0x7f5ecec9, (q31_t)0x7f5e2f49, (q31_t)0x7f5d8f7a, - (q31_t)0x7f5cef5c, (q31_t)0x7f5c4ef0, (q31_t)0x7f5bae36, (q31_t)0x7f5b0d2c, (q31_t)0x7f5a6bd5, (q31_t)0x7f59ca2e, (q31_t)0x7f592839, (q31_t)0x7f5885f6, - (q31_t)0x7f57e364, (q31_t)0x7f574083, (q31_t)0x7f569d54, (q31_t)0x7f55f9d6, (q31_t)0x7f55560a, (q31_t)0x7f54b1ef, (q31_t)0x7f540d86, (q31_t)0x7f5368ce, - (q31_t)0x7f52c3c8, (q31_t)0x7f521e73, (q31_t)0x7f5178cf, (q31_t)0x7f50d2dd, (q31_t)0x7f502c9d, (q31_t)0x7f4f860e, (q31_t)0x7f4edf30, (q31_t)0x7f4e3804, - (q31_t)0x7f4d9089, (q31_t)0x7f4ce8c0, (q31_t)0x7f4c40a8, (q31_t)0x7f4b9842, (q31_t)0x7f4aef8d, (q31_t)0x7f4a468a, (q31_t)0x7f499d38, (q31_t)0x7f48f398, - (q31_t)0x7f4849a9, (q31_t)0x7f479f6c, (q31_t)0x7f46f4e0, (q31_t)0x7f464a06, (q31_t)0x7f459edd, (q31_t)0x7f44f365, (q31_t)0x7f44479f, (q31_t)0x7f439b8b, - (q31_t)0x7f42ef28, (q31_t)0x7f424277, (q31_t)0x7f419577, (q31_t)0x7f40e828, (q31_t)0x7f403a8b, (q31_t)0x7f3f8ca0, (q31_t)0x7f3ede66, (q31_t)0x7f3e2fde, - (q31_t)0x7f3d8107, (q31_t)0x7f3cd1e2, (q31_t)0x7f3c226e, (q31_t)0x7f3b72ab, (q31_t)0x7f3ac29b, (q31_t)0x7f3a123b, (q31_t)0x7f39618e, (q31_t)0x7f38b091, - (q31_t)0x7f37ff47, (q31_t)0x7f374dad, (q31_t)0x7f369bc6, (q31_t)0x7f35e990, (q31_t)0x7f35370b, (q31_t)0x7f348438, (q31_t)0x7f33d116, (q31_t)0x7f331da6, - (q31_t)0x7f3269e8, (q31_t)0x7f31b5db, (q31_t)0x7f31017f, (q31_t)0x7f304cd6, (q31_t)0x7f2f97dd, (q31_t)0x7f2ee296, (q31_t)0x7f2e2d01, (q31_t)0x7f2d771e, - (q31_t)0x7f2cc0eb, (q31_t)0x7f2c0a6b, (q31_t)0x7f2b539c, (q31_t)0x7f2a9c7e, (q31_t)0x7f29e512, (q31_t)0x7f292d58, (q31_t)0x7f28754f, (q31_t)0x7f27bcf8, - (q31_t)0x7f270452, (q31_t)0x7f264b5e, (q31_t)0x7f25921c, (q31_t)0x7f24d88b, (q31_t)0x7f241eab, (q31_t)0x7f23647e, (q31_t)0x7f22aa01, (q31_t)0x7f21ef37, - (q31_t)0x7f21341e, (q31_t)0x7f2078b6, (q31_t)0x7f1fbd00, (q31_t)0x7f1f00fc, (q31_t)0x7f1e44a9, (q31_t)0x7f1d8808, (q31_t)0x7f1ccb18, (q31_t)0x7f1c0dda, - (q31_t)0x7f1b504e, (q31_t)0x7f1a9273, (q31_t)0x7f19d44a, (q31_t)0x7f1915d2, (q31_t)0x7f18570c, (q31_t)0x7f1797f8, (q31_t)0x7f16d895, (q31_t)0x7f1618e4, - (q31_t)0x7f1558e4, (q31_t)0x7f149896, (q31_t)0x7f13d7fa, (q31_t)0x7f13170f, (q31_t)0x7f1255d6, (q31_t)0x7f11944f, (q31_t)0x7f10d279, (q31_t)0x7f101054, - (q31_t)0x7f0f4de2, (q31_t)0x7f0e8b21, (q31_t)0x7f0dc811, (q31_t)0x7f0d04b3, (q31_t)0x7f0c4107, (q31_t)0x7f0b7d0d, (q31_t)0x7f0ab8c4, (q31_t)0x7f09f42d, - (q31_t)0x7f092f47, (q31_t)0x7f086a13, (q31_t)0x7f07a491, (q31_t)0x7f06dec0, (q31_t)0x7f0618a1, (q31_t)0x7f055233, (q31_t)0x7f048b78, (q31_t)0x7f03c46d, - (q31_t)0x7f02fd15, (q31_t)0x7f02356e, (q31_t)0x7f016d79, (q31_t)0x7f00a535, (q31_t)0x7effdca4, (q31_t)0x7eff13c3, (q31_t)0x7efe4a95, (q31_t)0x7efd8118, - (q31_t)0x7efcb74d, (q31_t)0x7efbed33, (q31_t)0x7efb22cb, (q31_t)0x7efa5815, (q31_t)0x7ef98d11, (q31_t)0x7ef8c1be, (q31_t)0x7ef7f61d, (q31_t)0x7ef72a2d, - (q31_t)0x7ef65def, (q31_t)0x7ef59163, (q31_t)0x7ef4c489, (q31_t)0x7ef3f760, (q31_t)0x7ef329e9, (q31_t)0x7ef25c24, (q31_t)0x7ef18e10, (q31_t)0x7ef0bfae, - (q31_t)0x7eeff0fe, (q31_t)0x7eef21ff, (q31_t)0x7eee52b2, (q31_t)0x7eed8317, (q31_t)0x7eecb32d, (q31_t)0x7eebe2f6, (q31_t)0x7eeb1270, (q31_t)0x7eea419b, - (q31_t)0x7ee97079, (q31_t)0x7ee89f08, (q31_t)0x7ee7cd49, (q31_t)0x7ee6fb3b, (q31_t)0x7ee628df, (q31_t)0x7ee55635, (q31_t)0x7ee4833d, (q31_t)0x7ee3aff6, - (q31_t)0x7ee2dc61, (q31_t)0x7ee2087e, (q31_t)0x7ee1344d, (q31_t)0x7ee05fcd, (q31_t)0x7edf8aff, (q31_t)0x7edeb5e3, (q31_t)0x7edde079, (q31_t)0x7edd0ac0, - (q31_t)0x7edc34b9, (q31_t)0x7edb5e64, (q31_t)0x7eda87c0, (q31_t)0x7ed9b0ce, (q31_t)0x7ed8d98e, (q31_t)0x7ed80200, (q31_t)0x7ed72a24, (q31_t)0x7ed651f9, - (q31_t)0x7ed57980, (q31_t)0x7ed4a0b9, (q31_t)0x7ed3c7a3, (q31_t)0x7ed2ee40, (q31_t)0x7ed2148e, (q31_t)0x7ed13a8e, (q31_t)0x7ed0603f, (q31_t)0x7ecf85a3, - (q31_t)0x7eceaab8, (q31_t)0x7ecdcf7f, (q31_t)0x7eccf3f8, (q31_t)0x7ecc1822, (q31_t)0x7ecb3bff, (q31_t)0x7eca5f8d, (q31_t)0x7ec982cd, (q31_t)0x7ec8a5bf, - (q31_t)0x7ec7c862, (q31_t)0x7ec6eab7, (q31_t)0x7ec60cbe, (q31_t)0x7ec52e77, (q31_t)0x7ec44fe2, (q31_t)0x7ec370fe, (q31_t)0x7ec291cd, (q31_t)0x7ec1b24d, - (q31_t)0x7ec0d27f, (q31_t)0x7ebff263, (q31_t)0x7ebf11f8, (q31_t)0x7ebe313f, (q31_t)0x7ebd5039, (q31_t)0x7ebc6ee4, (q31_t)0x7ebb8d40, (q31_t)0x7ebaab4f, - (q31_t)0x7eb9c910, (q31_t)0x7eb8e682, (q31_t)0x7eb803a6, (q31_t)0x7eb7207c, (q31_t)0x7eb63d04, (q31_t)0x7eb5593d, (q31_t)0x7eb47529, (q31_t)0x7eb390c6, - (q31_t)0x7eb2ac15, (q31_t)0x7eb1c716, (q31_t)0x7eb0e1c9, (q31_t)0x7eaffc2e, (q31_t)0x7eaf1645, (q31_t)0x7eae300d, (q31_t)0x7ead4987, (q31_t)0x7eac62b3, - (q31_t)0x7eab7b91, (q31_t)0x7eaa9421, (q31_t)0x7ea9ac63, (q31_t)0x7ea8c457, (q31_t)0x7ea7dbfc, (q31_t)0x7ea6f353, (q31_t)0x7ea60a5d, (q31_t)0x7ea52118, - (q31_t)0x7ea43785, (q31_t)0x7ea34da4, (q31_t)0x7ea26374, (q31_t)0x7ea178f7, (q31_t)0x7ea08e2b, (q31_t)0x7e9fa312, (q31_t)0x7e9eb7aa, (q31_t)0x7e9dcbf4, - (q31_t)0x7e9cdff0, (q31_t)0x7e9bf39e, (q31_t)0x7e9b06fe, (q31_t)0x7e9a1a10, (q31_t)0x7e992cd4, (q31_t)0x7e983f49, (q31_t)0x7e975171, (q31_t)0x7e96634a, - (q31_t)0x7e9574d6, (q31_t)0x7e948613, (q31_t)0x7e939702, (q31_t)0x7e92a7a3, (q31_t)0x7e91b7f6, (q31_t)0x7e90c7fb, (q31_t)0x7e8fd7b2, (q31_t)0x7e8ee71b, - (q31_t)0x7e8df636, (q31_t)0x7e8d0502, (q31_t)0x7e8c1381, (q31_t)0x7e8b21b1, (q31_t)0x7e8a2f94, (q31_t)0x7e893d28, (q31_t)0x7e884a6f, (q31_t)0x7e875767, - (q31_t)0x7e866411, (q31_t)0x7e85706d, (q31_t)0x7e847c7c, (q31_t)0x7e83883c, (q31_t)0x7e8293ae, (q31_t)0x7e819ed2, (q31_t)0x7e80a9a8, (q31_t)0x7e7fb430, - (q31_t)0x7e7ebe6a, (q31_t)0x7e7dc856, (q31_t)0x7e7cd1f4, (q31_t)0x7e7bdb44, (q31_t)0x7e7ae446, (q31_t)0x7e79ecf9, (q31_t)0x7e78f55f, (q31_t)0x7e77fd77, - (q31_t)0x7e770541, (q31_t)0x7e760cbd, (q31_t)0x7e7513ea, (q31_t)0x7e741aca, (q31_t)0x7e73215c, (q31_t)0x7e7227a0, (q31_t)0x7e712d96, (q31_t)0x7e70333d, - (q31_t)0x7e6f3897, (q31_t)0x7e6e3da3, (q31_t)0x7e6d4261, (q31_t)0x7e6c46d1, (q31_t)0x7e6b4af2, (q31_t)0x7e6a4ec6, (q31_t)0x7e69524c, (q31_t)0x7e685584, - (q31_t)0x7e67586e, (q31_t)0x7e665b0a, (q31_t)0x7e655d58, (q31_t)0x7e645f58, (q31_t)0x7e63610a, (q31_t)0x7e62626e, (q31_t)0x7e616384, (q31_t)0x7e60644c, - (q31_t)0x7e5f64c7, (q31_t)0x7e5e64f3, (q31_t)0x7e5d64d1, (q31_t)0x7e5c6461, (q31_t)0x7e5b63a4, (q31_t)0x7e5a6298, (q31_t)0x7e59613f, (q31_t)0x7e585f97, - (q31_t)0x7e575da2, (q31_t)0x7e565b5f, (q31_t)0x7e5558ce, (q31_t)0x7e5455ef, (q31_t)0x7e5352c1, (q31_t)0x7e524f46, (q31_t)0x7e514b7e, (q31_t)0x7e504767, - (q31_t)0x7e4f4302, (q31_t)0x7e4e3e4f, (q31_t)0x7e4d394f, (q31_t)0x7e4c3400, (q31_t)0x7e4b2e64, (q31_t)0x7e4a287a, (q31_t)0x7e492241, (q31_t)0x7e481bbb, - (q31_t)0x7e4714e7, (q31_t)0x7e460dc5, (q31_t)0x7e450656, (q31_t)0x7e43fe98, (q31_t)0x7e42f68c, (q31_t)0x7e41ee33, (q31_t)0x7e40e58c, (q31_t)0x7e3fdc97, - (q31_t)0x7e3ed353, (q31_t)0x7e3dc9c3, (q31_t)0x7e3cbfe4, (q31_t)0x7e3bb5b7, (q31_t)0x7e3aab3c, (q31_t)0x7e39a074, (q31_t)0x7e38955e, (q31_t)0x7e3789fa, - (q31_t)0x7e367e48, (q31_t)0x7e357248, (q31_t)0x7e3465fa, (q31_t)0x7e33595e, (q31_t)0x7e324c75, (q31_t)0x7e313f3e, (q31_t)0x7e3031b9, (q31_t)0x7e2f23e6, - (q31_t)0x7e2e15c5, (q31_t)0x7e2d0756, (q31_t)0x7e2bf89a, (q31_t)0x7e2ae990, (q31_t)0x7e29da38, (q31_t)0x7e28ca92, (q31_t)0x7e27ba9e, (q31_t)0x7e26aa5d, - (q31_t)0x7e2599cd, (q31_t)0x7e2488f0, (q31_t)0x7e2377c5, (q31_t)0x7e22664c, (q31_t)0x7e215486, (q31_t)0x7e204271, (q31_t)0x7e1f300f, (q31_t)0x7e1e1d5f, - (q31_t)0x7e1d0a61, (q31_t)0x7e1bf716, (q31_t)0x7e1ae37c, (q31_t)0x7e19cf95, (q31_t)0x7e18bb60, (q31_t)0x7e17a6dd, (q31_t)0x7e16920d, (q31_t)0x7e157cee, - (q31_t)0x7e146782, (q31_t)0x7e1351c9, (q31_t)0x7e123bc1, (q31_t)0x7e11256c, (q31_t)0x7e100ec8, (q31_t)0x7e0ef7d7, (q31_t)0x7e0de099, (q31_t)0x7e0cc90c, - (q31_t)0x7e0bb132, (q31_t)0x7e0a990a, (q31_t)0x7e098095, (q31_t)0x7e0867d1, (q31_t)0x7e074ec0, (q31_t)0x7e063561, (q31_t)0x7e051bb4, (q31_t)0x7e0401ba, - (q31_t)0x7e02e772, (q31_t)0x7e01ccdc, (q31_t)0x7e00b1f9, (q31_t)0x7dff96c7, (q31_t)0x7dfe7b48, (q31_t)0x7dfd5f7b, (q31_t)0x7dfc4361, (q31_t)0x7dfb26f9, - (q31_t)0x7dfa0a43, (q31_t)0x7df8ed3f, (q31_t)0x7df7cfee, (q31_t)0x7df6b24f, (q31_t)0x7df59462, (q31_t)0x7df47628, (q31_t)0x7df357a0, (q31_t)0x7df238ca, - (q31_t)0x7df119a7, (q31_t)0x7deffa35, (q31_t)0x7deeda77, (q31_t)0x7dedba6a, (q31_t)0x7dec9a10, (q31_t)0x7deb7968, (q31_t)0x7dea5872, (q31_t)0x7de9372f, - (q31_t)0x7de8159e, (q31_t)0x7de6f3c0, (q31_t)0x7de5d193, (q31_t)0x7de4af1a, (q31_t)0x7de38c52, (q31_t)0x7de2693d, (q31_t)0x7de145da, (q31_t)0x7de02229, - (q31_t)0x7ddefe2b, (q31_t)0x7dddd9e0, (q31_t)0x7ddcb546, (q31_t)0x7ddb905f, (q31_t)0x7dda6b2a, (q31_t)0x7dd945a8, (q31_t)0x7dd81fd8, (q31_t)0x7dd6f9ba, - (q31_t)0x7dd5d34f, (q31_t)0x7dd4ac96, (q31_t)0x7dd38590, (q31_t)0x7dd25e3c, (q31_t)0x7dd1369a, (q31_t)0x7dd00eab, (q31_t)0x7dcee66e, (q31_t)0x7dcdbde3, - (q31_t)0x7dcc950b, (q31_t)0x7dcb6be6, (q31_t)0x7dca4272, (q31_t)0x7dc918b1, (q31_t)0x7dc7eea3, (q31_t)0x7dc6c447, (q31_t)0x7dc5999d, (q31_t)0x7dc46ea6, - (q31_t)0x7dc34361, (q31_t)0x7dc217cf, (q31_t)0x7dc0ebef, (q31_t)0x7dbfbfc1, (q31_t)0x7dbe9346, (q31_t)0x7dbd667d, (q31_t)0x7dbc3967, (q31_t)0x7dbb0c03, - (q31_t)0x7db9de52, (q31_t)0x7db8b053, (q31_t)0x7db78207, (q31_t)0x7db6536d, (q31_t)0x7db52485, (q31_t)0x7db3f550, (q31_t)0x7db2c5cd, (q31_t)0x7db195fd, - (q31_t)0x7db065df, (q31_t)0x7daf3574, (q31_t)0x7dae04bb, (q31_t)0x7dacd3b5, (q31_t)0x7daba261, (q31_t)0x7daa70c0, (q31_t)0x7da93ed1, (q31_t)0x7da80c95, - (q31_t)0x7da6da0b, (q31_t)0x7da5a733, (q31_t)0x7da4740e, (q31_t)0x7da3409c, (q31_t)0x7da20cdc, (q31_t)0x7da0d8cf, (q31_t)0x7d9fa474, (q31_t)0x7d9e6fcb, - (q31_t)0x7d9d3ad6, (q31_t)0x7d9c0592, (q31_t)0x7d9ad001, (q31_t)0x7d999a23, (q31_t)0x7d9863f7, (q31_t)0x7d972d7e, (q31_t)0x7d95f6b7, (q31_t)0x7d94bfa3, - (q31_t)0x7d938841, (q31_t)0x7d925092, (q31_t)0x7d911896, (q31_t)0x7d8fe04c, (q31_t)0x7d8ea7b4, (q31_t)0x7d8d6ecf, (q31_t)0x7d8c359d, (q31_t)0x7d8afc1d, - (q31_t)0x7d89c250, (q31_t)0x7d888835, (q31_t)0x7d874dcd, (q31_t)0x7d861317, (q31_t)0x7d84d814, (q31_t)0x7d839cc4, (q31_t)0x7d826126, (q31_t)0x7d81253a, - (q31_t)0x7d7fe902, (q31_t)0x7d7eac7c, (q31_t)0x7d7d6fa8, (q31_t)0x7d7c3287, (q31_t)0x7d7af519, (q31_t)0x7d79b75d, (q31_t)0x7d787954, (q31_t)0x7d773afd, - (q31_t)0x7d75fc59, (q31_t)0x7d74bd68, (q31_t)0x7d737e29, (q31_t)0x7d723e9d, (q31_t)0x7d70fec4, (q31_t)0x7d6fbe9d, (q31_t)0x7d6e7e29, (q31_t)0x7d6d3d67, - (q31_t)0x7d6bfc58, (q31_t)0x7d6abafc, (q31_t)0x7d697952, (q31_t)0x7d68375b, (q31_t)0x7d66f517, (q31_t)0x7d65b285, (q31_t)0x7d646fa6, (q31_t)0x7d632c79, - (q31_t)0x7d61e8ff, (q31_t)0x7d60a538, (q31_t)0x7d5f6124, (q31_t)0x7d5e1cc2, (q31_t)0x7d5cd813, (q31_t)0x7d5b9316, (q31_t)0x7d5a4dcc, (q31_t)0x7d590835, - (q31_t)0x7d57c251, (q31_t)0x7d567c1f, (q31_t)0x7d5535a0, (q31_t)0x7d53eed3, (q31_t)0x7d52a7ba, (q31_t)0x7d516053, (q31_t)0x7d50189e, (q31_t)0x7d4ed09d, - (q31_t)0x7d4d884e, (q31_t)0x7d4c3fb1, (q31_t)0x7d4af6c8, (q31_t)0x7d49ad91, (q31_t)0x7d48640d, (q31_t)0x7d471a3c, (q31_t)0x7d45d01d, (q31_t)0x7d4485b1, - (q31_t)0x7d433af8, (q31_t)0x7d41eff1, (q31_t)0x7d40a49e, (q31_t)0x7d3f58fd, (q31_t)0x7d3e0d0e, (q31_t)0x7d3cc0d3, (q31_t)0x7d3b744a, (q31_t)0x7d3a2774, - (q31_t)0x7d38da51, (q31_t)0x7d378ce0, (q31_t)0x7d363f23, (q31_t)0x7d34f118, (q31_t)0x7d33a2bf, (q31_t)0x7d32541a, (q31_t)0x7d310527, (q31_t)0x7d2fb5e7, - (q31_t)0x7d2e665a, (q31_t)0x7d2d1680, (q31_t)0x7d2bc659, (q31_t)0x7d2a75e4, (q31_t)0x7d292522, (q31_t)0x7d27d413, (q31_t)0x7d2682b6, (q31_t)0x7d25310d, - (q31_t)0x7d23df16, (q31_t)0x7d228cd2, (q31_t)0x7d213a41, (q31_t)0x7d1fe762, (q31_t)0x7d1e9437, (q31_t)0x7d1d40be, (q31_t)0x7d1becf8, (q31_t)0x7d1a98e5, - (q31_t)0x7d194485, (q31_t)0x7d17efd8, (q31_t)0x7d169add, (q31_t)0x7d154595, (q31_t)0x7d13f001, (q31_t)0x7d129a1f, (q31_t)0x7d1143ef, (q31_t)0x7d0fed73, - (q31_t)0x7d0e96aa, (q31_t)0x7d0d3f93, (q31_t)0x7d0be82f, (q31_t)0x7d0a907e, (q31_t)0x7d093880, (q31_t)0x7d07e035, (q31_t)0x7d06879d, (q31_t)0x7d052eb8, - (q31_t)0x7d03d585, (q31_t)0x7d027c05, (q31_t)0x7d012239, (q31_t)0x7cffc81f, (q31_t)0x7cfe6db8, (q31_t)0x7cfd1304, (q31_t)0x7cfbb803, (q31_t)0x7cfa5cb4, - (q31_t)0x7cf90119, (q31_t)0x7cf7a531, (q31_t)0x7cf648fb, (q31_t)0x7cf4ec79, (q31_t)0x7cf38fa9, (q31_t)0x7cf2328c, (q31_t)0x7cf0d522, (q31_t)0x7cef776b, - (q31_t)0x7cee1967, (q31_t)0x7cecbb16, (q31_t)0x7ceb5c78, (q31_t)0x7ce9fd8d, (q31_t)0x7ce89e55, (q31_t)0x7ce73ed0, (q31_t)0x7ce5defd, (q31_t)0x7ce47ede, - (q31_t)0x7ce31e72, (q31_t)0x7ce1bdb8, (q31_t)0x7ce05cb2, (q31_t)0x7cdefb5e, (q31_t)0x7cdd99be, (q31_t)0x7cdc37d0, (q31_t)0x7cdad596, (q31_t)0x7cd9730e, - (q31_t)0x7cd8103a, (q31_t)0x7cd6ad18, (q31_t)0x7cd549aa, (q31_t)0x7cd3e5ee, (q31_t)0x7cd281e5, (q31_t)0x7cd11d90, (q31_t)0x7ccfb8ed, (q31_t)0x7cce53fe, - (q31_t)0x7ccceec1, (q31_t)0x7ccb8937, (q31_t)0x7cca2361, (q31_t)0x7cc8bd3d, (q31_t)0x7cc756cd, (q31_t)0x7cc5f010, (q31_t)0x7cc48905, (q31_t)0x7cc321ae, - (q31_t)0x7cc1ba09, (q31_t)0x7cc05218, (q31_t)0x7cbee9da, (q31_t)0x7cbd814f, (q31_t)0x7cbc1877, (q31_t)0x7cbaaf51, (q31_t)0x7cb945df, (q31_t)0x7cb7dc20, - (q31_t)0x7cb67215, (q31_t)0x7cb507bc, (q31_t)0x7cb39d16, (q31_t)0x7cb23223, (q31_t)0x7cb0c6e4, (q31_t)0x7caf5b57, (q31_t)0x7cadef7e, (q31_t)0x7cac8358, - (q31_t)0x7cab16e4, (q31_t)0x7ca9aa24, (q31_t)0x7ca83d17, (q31_t)0x7ca6cfbd, (q31_t)0x7ca56216, (q31_t)0x7ca3f423, (q31_t)0x7ca285e2, (q31_t)0x7ca11755, - (q31_t)0x7c9fa87a, (q31_t)0x7c9e3953, (q31_t)0x7c9cc9df, (q31_t)0x7c9b5a1e, (q31_t)0x7c99ea10, (q31_t)0x7c9879b6, (q31_t)0x7c97090e, (q31_t)0x7c95981a, - (q31_t)0x7c9426d8, (q31_t)0x7c92b54a, (q31_t)0x7c91436f, (q31_t)0x7c8fd148, (q31_t)0x7c8e5ed3, (q31_t)0x7c8cec12, (q31_t)0x7c8b7903, (q31_t)0x7c8a05a8, - (q31_t)0x7c889200, (q31_t)0x7c871e0c, (q31_t)0x7c85a9ca, (q31_t)0x7c84353c, (q31_t)0x7c82c060, (q31_t)0x7c814b39, (q31_t)0x7c7fd5c4, (q31_t)0x7c7e6002, - (q31_t)0x7c7ce9f4, (q31_t)0x7c7b7399, (q31_t)0x7c79fcf1, (q31_t)0x7c7885fc, (q31_t)0x7c770eba, (q31_t)0x7c75972c, (q31_t)0x7c741f51, (q31_t)0x7c72a729, - (q31_t)0x7c712eb5, (q31_t)0x7c6fb5f3, (q31_t)0x7c6e3ce5, (q31_t)0x7c6cc38a, (q31_t)0x7c6b49e3, (q31_t)0x7c69cfee, (q31_t)0x7c6855ad, (q31_t)0x7c66db1f, - (q31_t)0x7c656045, (q31_t)0x7c63e51e, (q31_t)0x7c6269aa, (q31_t)0x7c60ede9, (q31_t)0x7c5f71db, (q31_t)0x7c5df581, (q31_t)0x7c5c78da, (q31_t)0x7c5afbe6, - (q31_t)0x7c597ea6, (q31_t)0x7c580119, (q31_t)0x7c56833f, (q31_t)0x7c550519, (q31_t)0x7c5386a6, (q31_t)0x7c5207e6, (q31_t)0x7c5088d9, (q31_t)0x7c4f0980, - (q31_t)0x7c4d89da, (q31_t)0x7c4c09e8, (q31_t)0x7c4a89a8, (q31_t)0x7c49091c, (q31_t)0x7c478844, (q31_t)0x7c46071f, (q31_t)0x7c4485ad, (q31_t)0x7c4303ee, - (q31_t)0x7c4181e3, (q31_t)0x7c3fff8b, (q31_t)0x7c3e7ce7, (q31_t)0x7c3cf9f5, (q31_t)0x7c3b76b8, (q31_t)0x7c39f32d, (q31_t)0x7c386f56, (q31_t)0x7c36eb33, - (q31_t)0x7c3566c2, (q31_t)0x7c33e205, (q31_t)0x7c325cfc, (q31_t)0x7c30d7a6, (q31_t)0x7c2f5203, (q31_t)0x7c2dcc14, (q31_t)0x7c2c45d8, (q31_t)0x7c2abf4f, - (q31_t)0x7c29387a, (q31_t)0x7c27b158, (q31_t)0x7c2629ea, (q31_t)0x7c24a22f, (q31_t)0x7c231a28, (q31_t)0x7c2191d4, (q31_t)0x7c200933, (q31_t)0x7c1e8046, - (q31_t)0x7c1cf70c, (q31_t)0x7c1b6d86, (q31_t)0x7c19e3b3, (q31_t)0x7c185994, (q31_t)0x7c16cf28, (q31_t)0x7c15446f, (q31_t)0x7c13b96a, (q31_t)0x7c122e19, - (q31_t)0x7c10a27b, (q31_t)0x7c0f1690, (q31_t)0x7c0d8a59, (q31_t)0x7c0bfdd5, (q31_t)0x7c0a7105, (q31_t)0x7c08e3e8, (q31_t)0x7c07567f, (q31_t)0x7c05c8c9, - (q31_t)0x7c043ac7, (q31_t)0x7c02ac78, (q31_t)0x7c011ddd, (q31_t)0x7bff8ef5, (q31_t)0x7bfdffc1, (q31_t)0x7bfc7041, (q31_t)0x7bfae073, (q31_t)0x7bf9505a, - (q31_t)0x7bf7bff4, (q31_t)0x7bf62f41, (q31_t)0x7bf49e42, (q31_t)0x7bf30cf6, (q31_t)0x7bf17b5e, (q31_t)0x7befe97a, (q31_t)0x7bee5749, (q31_t)0x7becc4cc, - (q31_t)0x7beb3202, (q31_t)0x7be99eec, (q31_t)0x7be80b89, (q31_t)0x7be677da, (q31_t)0x7be4e3df, (q31_t)0x7be34f97, (q31_t)0x7be1bb02, (q31_t)0x7be02621, - (q31_t)0x7bde90f4, (q31_t)0x7bdcfb7b, (q31_t)0x7bdb65b5, (q31_t)0x7bd9cfa2, (q31_t)0x7bd83944, (q31_t)0x7bd6a298, (q31_t)0x7bd50ba1, (q31_t)0x7bd3745d, - (q31_t)0x7bd1dccc, (q31_t)0x7bd044f0, (q31_t)0x7bceacc7, (q31_t)0x7bcd1451, (q31_t)0x7bcb7b8f, (q31_t)0x7bc9e281, (q31_t)0x7bc84927, (q31_t)0x7bc6af80, - (q31_t)0x7bc5158c, (q31_t)0x7bc37b4d, (q31_t)0x7bc1e0c1, (q31_t)0x7bc045e9, (q31_t)0x7bbeaac4, (q31_t)0x7bbd0f53, (q31_t)0x7bbb7396, (q31_t)0x7bb9d78c, - (q31_t)0x7bb83b36, (q31_t)0x7bb69e94, (q31_t)0x7bb501a5, (q31_t)0x7bb3646a, (q31_t)0x7bb1c6e3, (q31_t)0x7bb02910, (q31_t)0x7bae8af0, (q31_t)0x7bacec84, - (q31_t)0x7bab4dcc, (q31_t)0x7ba9aec7, (q31_t)0x7ba80f76, (q31_t)0x7ba66fd9, (q31_t)0x7ba4cfef, (q31_t)0x7ba32fba, (q31_t)0x7ba18f38, (q31_t)0x7b9fee69, - (q31_t)0x7b9e4d4f, (q31_t)0x7b9cabe8, (q31_t)0x7b9b0a35, (q31_t)0x7b996836, (q31_t)0x7b97c5ea, (q31_t)0x7b962352, (q31_t)0x7b94806e, (q31_t)0x7b92dd3e, - (q31_t)0x7b9139c2, (q31_t)0x7b8f95f9, (q31_t)0x7b8df1e4, (q31_t)0x7b8c4d83, (q31_t)0x7b8aa8d6, (q31_t)0x7b8903dc, (q31_t)0x7b875e96, (q31_t)0x7b85b904, - (q31_t)0x7b841326, (q31_t)0x7b826cfc, (q31_t)0x7b80c686, (q31_t)0x7b7f1fc3, (q31_t)0x7b7d78b4, (q31_t)0x7b7bd159, (q31_t)0x7b7a29b2, (q31_t)0x7b7881be, - (q31_t)0x7b76d97f, (q31_t)0x7b7530f3, (q31_t)0x7b73881b, (q31_t)0x7b71def7, (q31_t)0x7b703587, (q31_t)0x7b6e8bcb, (q31_t)0x7b6ce1c2, (q31_t)0x7b6b376e, - (q31_t)0x7b698ccd, (q31_t)0x7b67e1e0, (q31_t)0x7b6636a7, (q31_t)0x7b648b22, (q31_t)0x7b62df51, (q31_t)0x7b613334, (q31_t)0x7b5f86ca, (q31_t)0x7b5dda15, - (q31_t)0x7b5c2d13, (q31_t)0x7b5a7fc6, (q31_t)0x7b58d22c, (q31_t)0x7b572446, (q31_t)0x7b557614, (q31_t)0x7b53c796, (q31_t)0x7b5218cc, (q31_t)0x7b5069b6, - (q31_t)0x7b4eba53, (q31_t)0x7b4d0aa5, (q31_t)0x7b4b5aab, (q31_t)0x7b49aa64, (q31_t)0x7b47f9d2, (q31_t)0x7b4648f3, (q31_t)0x7b4497c9, (q31_t)0x7b42e652, - (q31_t)0x7b413490, (q31_t)0x7b3f8281, (q31_t)0x7b3dd026, (q31_t)0x7b3c1d80, (q31_t)0x7b3a6a8d, (q31_t)0x7b38b74e, (q31_t)0x7b3703c3, (q31_t)0x7b354fed, - (q31_t)0x7b339bca, (q31_t)0x7b31e75b, (q31_t)0x7b3032a0, (q31_t)0x7b2e7d9a, (q31_t)0x7b2cc847, (q31_t)0x7b2b12a8, (q31_t)0x7b295cbe, (q31_t)0x7b27a687, - (q31_t)0x7b25f004, (q31_t)0x7b243936, (q31_t)0x7b22821b, (q31_t)0x7b20cab5, (q31_t)0x7b1f1302, (q31_t)0x7b1d5b04, (q31_t)0x7b1ba2b9, (q31_t)0x7b19ea23, - (q31_t)0x7b183141, (q31_t)0x7b167813, (q31_t)0x7b14be99, (q31_t)0x7b1304d3, (q31_t)0x7b114ac1, (q31_t)0x7b0f9063, (q31_t)0x7b0dd5b9, (q31_t)0x7b0c1ac4, - (q31_t)0x7b0a5f82, (q31_t)0x7b08a3f5, (q31_t)0x7b06e81b, (q31_t)0x7b052bf6, (q31_t)0x7b036f85, (q31_t)0x7b01b2c8, (q31_t)0x7afff5bf, (q31_t)0x7afe386a, - (q31_t)0x7afc7aca, (q31_t)0x7afabcdd, (q31_t)0x7af8fea5, (q31_t)0x7af74021, (q31_t)0x7af58151, (q31_t)0x7af3c235, (q31_t)0x7af202cd, (q31_t)0x7af0431a, - (q31_t)0x7aee831a, (q31_t)0x7aecc2cf, (q31_t)0x7aeb0238, (q31_t)0x7ae94155, (q31_t)0x7ae78026, (q31_t)0x7ae5beac, (q31_t)0x7ae3fce6, (q31_t)0x7ae23ad4, - (q31_t)0x7ae07876, (q31_t)0x7adeb5cc, (q31_t)0x7adcf2d6, (q31_t)0x7adb2f95, (q31_t)0x7ad96c08, (q31_t)0x7ad7a82f, (q31_t)0x7ad5e40a, (q31_t)0x7ad41f9a, - (q31_t)0x7ad25ade, (q31_t)0x7ad095d6, (q31_t)0x7aced082, (q31_t)0x7acd0ae3, (q31_t)0x7acb44f8, (q31_t)0x7ac97ec1, (q31_t)0x7ac7b83e, (q31_t)0x7ac5f170, - (q31_t)0x7ac42a55, (q31_t)0x7ac262ef, (q31_t)0x7ac09b3e, (q31_t)0x7abed341, (q31_t)0x7abd0af7, (q31_t)0x7abb4263, (q31_t)0x7ab97982, (q31_t)0x7ab7b056, - (q31_t)0x7ab5e6de, (q31_t)0x7ab41d1b, (q31_t)0x7ab2530b, (q31_t)0x7ab088b0, (q31_t)0x7aaebe0a, (q31_t)0x7aacf318, (q31_t)0x7aab27da, (q31_t)0x7aa95c50, - (q31_t)0x7aa7907b, (q31_t)0x7aa5c45a, (q31_t)0x7aa3f7ed, (q31_t)0x7aa22b35, (q31_t)0x7aa05e31, (q31_t)0x7a9e90e1, (q31_t)0x7a9cc346, (q31_t)0x7a9af55f, - (q31_t)0x7a99272d, (q31_t)0x7a9758af, (q31_t)0x7a9589e5, (q31_t)0x7a93bad0, (q31_t)0x7a91eb6f, (q31_t)0x7a901bc2, (q31_t)0x7a8e4bca, (q31_t)0x7a8c7b87, - (q31_t)0x7a8aaaf7, (q31_t)0x7a88da1c, (q31_t)0x7a8708f6, (q31_t)0x7a853784, (q31_t)0x7a8365c6, (q31_t)0x7a8193bd, (q31_t)0x7a7fc168, (q31_t)0x7a7deec8, - (q31_t)0x7a7c1bdc, (q31_t)0x7a7a48a4, (q31_t)0x7a787521, (q31_t)0x7a76a153, (q31_t)0x7a74cd38, (q31_t)0x7a72f8d3, (q31_t)0x7a712422, (q31_t)0x7a6f4f25, - (q31_t)0x7a6d79dd, (q31_t)0x7a6ba449, (q31_t)0x7a69ce6a, (q31_t)0x7a67f83f, (q31_t)0x7a6621c9, (q31_t)0x7a644b07, (q31_t)0x7a6273fa, (q31_t)0x7a609ca1, - (q31_t)0x7a5ec4fc, (q31_t)0x7a5ced0d, (q31_t)0x7a5b14d1, (q31_t)0x7a593c4b, (q31_t)0x7a576379, (q31_t)0x7a558a5b, (q31_t)0x7a53b0f2, (q31_t)0x7a51d73d, - (q31_t)0x7a4ffd3d, (q31_t)0x7a4e22f2, (q31_t)0x7a4c485b, (q31_t)0x7a4a6d78, (q31_t)0x7a48924b, (q31_t)0x7a46b6d1, (q31_t)0x7a44db0d, (q31_t)0x7a42fefd, - (q31_t)0x7a4122a1, (q31_t)0x7a3f45fa, (q31_t)0x7a3d6908, (q31_t)0x7a3b8bca, (q31_t)0x7a39ae41, (q31_t)0x7a37d06d, (q31_t)0x7a35f24d, (q31_t)0x7a3413e2, - (q31_t)0x7a32352b, (q31_t)0x7a305629, (q31_t)0x7a2e76dc, (q31_t)0x7a2c9743, (q31_t)0x7a2ab75f, (q31_t)0x7a28d72f, (q31_t)0x7a26f6b4, (q31_t)0x7a2515ee, - (q31_t)0x7a2334dd, (q31_t)0x7a215380, (q31_t)0x7a1f71d7, (q31_t)0x7a1d8fe4, (q31_t)0x7a1bada5, (q31_t)0x7a19cb1b, (q31_t)0x7a17e845, (q31_t)0x7a160524, - (q31_t)0x7a1421b8, (q31_t)0x7a123e01, (q31_t)0x7a1059fe, (q31_t)0x7a0e75b0, (q31_t)0x7a0c9117, (q31_t)0x7a0aac32, (q31_t)0x7a08c702, (q31_t)0x7a06e187, - (q31_t)0x7a04fbc1, (q31_t)0x7a0315af, (q31_t)0x7a012f52, (q31_t)0x79ff48aa, (q31_t)0x79fd61b6, (q31_t)0x79fb7a77, (q31_t)0x79f992ed, (q31_t)0x79f7ab18, - (q31_t)0x79f5c2f8, (q31_t)0x79f3da8c, (q31_t)0x79f1f1d5, (q31_t)0x79f008d3, (q31_t)0x79ee1f86, (q31_t)0x79ec35ed, (q31_t)0x79ea4c09, (q31_t)0x79e861da, - (q31_t)0x79e67760, (q31_t)0x79e48c9b, (q31_t)0x79e2a18a, (q31_t)0x79e0b62e, (q31_t)0x79deca87, (q31_t)0x79dcde95, (q31_t)0x79daf258, (q31_t)0x79d905d0, - (q31_t)0x79d718fc, (q31_t)0x79d52bdd, (q31_t)0x79d33e73, (q31_t)0x79d150be, (q31_t)0x79cf62be, (q31_t)0x79cd7473, (q31_t)0x79cb85dc, (q31_t)0x79c996fb, - (q31_t)0x79c7a7ce, (q31_t)0x79c5b856, (q31_t)0x79c3c893, (q31_t)0x79c1d885, (q31_t)0x79bfe82c, (q31_t)0x79bdf788, (q31_t)0x79bc0698, (q31_t)0x79ba155e, - (q31_t)0x79b823d8, (q31_t)0x79b63207, (q31_t)0x79b43fec, (q31_t)0x79b24d85, (q31_t)0x79b05ad3, (q31_t)0x79ae67d6, (q31_t)0x79ac748e, (q31_t)0x79aa80fb, - (q31_t)0x79a88d1d, (q31_t)0x79a698f4, (q31_t)0x79a4a480, (q31_t)0x79a2afc1, (q31_t)0x79a0bab6, (q31_t)0x799ec561, (q31_t)0x799ccfc1, (q31_t)0x799ad9d5, - (q31_t)0x7998e39f, (q31_t)0x7996ed1e, (q31_t)0x7994f651, (q31_t)0x7992ff3a, (q31_t)0x799107d8, (q31_t)0x798f102a, (q31_t)0x798d1832, (q31_t)0x798b1fef, - (q31_t)0x79892761, (q31_t)0x79872e87, (q31_t)0x79853563, (q31_t)0x79833bf4, (q31_t)0x7981423a, (q31_t)0x797f4835, (q31_t)0x797d4de5, (q31_t)0x797b534a, - (q31_t)0x79795864, (q31_t)0x79775d33, (q31_t)0x797561b8, (q31_t)0x797365f1, (q31_t)0x797169df, (q31_t)0x796f6d83, (q31_t)0x796d70dc, (q31_t)0x796b73e9, - (q31_t)0x796976ac, (q31_t)0x79677924, (q31_t)0x79657b51, (q31_t)0x79637d33, (q31_t)0x79617eca, (q31_t)0x795f8017, (q31_t)0x795d8118, (q31_t)0x795b81cf, - (q31_t)0x7959823b, (q31_t)0x7957825c, (q31_t)0x79558232, (q31_t)0x795381bd, (q31_t)0x795180fe, (q31_t)0x794f7ff3, (q31_t)0x794d7e9e, (q31_t)0x794b7cfe, - (q31_t)0x79497b13, (q31_t)0x794778dd, (q31_t)0x7945765d, (q31_t)0x79437391, (q31_t)0x7941707b, (q31_t)0x793f6d1a, (q31_t)0x793d696f, (q31_t)0x793b6578, - (q31_t)0x79396137, (q31_t)0x79375cab, (q31_t)0x793557d4, (q31_t)0x793352b2, (q31_t)0x79314d46, (q31_t)0x792f478f, (q31_t)0x792d418d, (q31_t)0x792b3b40, - (q31_t)0x792934a9, (q31_t)0x79272dc7, (q31_t)0x7925269a, (q31_t)0x79231f22, (q31_t)0x79211760, (q31_t)0x791f0f53, (q31_t)0x791d06fb, (q31_t)0x791afe59, - (q31_t)0x7918f56c, (q31_t)0x7916ec34, (q31_t)0x7914e2b2, (q31_t)0x7912d8e4, (q31_t)0x7910cecc, (q31_t)0x790ec46a, (q31_t)0x790cb9bd, (q31_t)0x790aaec5, - (q31_t)0x7908a382, (q31_t)0x790697f5, (q31_t)0x79048c1d, (q31_t)0x79027ffa, (q31_t)0x7900738d, (q31_t)0x78fe66d5, (q31_t)0x78fc59d3, (q31_t)0x78fa4c86, - (q31_t)0x78f83eee, (q31_t)0x78f6310c, (q31_t)0x78f422df, (q31_t)0x78f21467, (q31_t)0x78f005a5, (q31_t)0x78edf698, (q31_t)0x78ebe741, (q31_t)0x78e9d79f, - (q31_t)0x78e7c7b2, (q31_t)0x78e5b77b, (q31_t)0x78e3a6f9, (q31_t)0x78e1962d, (q31_t)0x78df8516, (q31_t)0x78dd73b5, (q31_t)0x78db6209, (q31_t)0x78d95012, - (q31_t)0x78d73dd1, (q31_t)0x78d52b46, (q31_t)0x78d31870, (q31_t)0x78d1054f, (q31_t)0x78cef1e4, (q31_t)0x78ccde2e, (q31_t)0x78caca2e, (q31_t)0x78c8b5e3, - (q31_t)0x78c6a14e, (q31_t)0x78c48c6e, (q31_t)0x78c27744, (q31_t)0x78c061cf, (q31_t)0x78be4c10, (q31_t)0x78bc3606, (q31_t)0x78ba1fb2, (q31_t)0x78b80913, - (q31_t)0x78b5f22a, (q31_t)0x78b3daf7, (q31_t)0x78b1c379, (q31_t)0x78afabb0, (q31_t)0x78ad939d, (q31_t)0x78ab7b40, (q31_t)0x78a96298, (q31_t)0x78a749a6, - (q31_t)0x78a53069, (q31_t)0x78a316e2, (q31_t)0x78a0fd11, (q31_t)0x789ee2f5, (q31_t)0x789cc88f, (q31_t)0x789aadde, (q31_t)0x789892e3, (q31_t)0x7896779d, - (q31_t)0x78945c0d, (q31_t)0x78924033, (q31_t)0x7890240e, (q31_t)0x788e07a0, (q31_t)0x788beae6, (q31_t)0x7889cde2, (q31_t)0x7887b094, (q31_t)0x788592fc, - (q31_t)0x78837519, (q31_t)0x788156ec, (q31_t)0x787f3875, (q31_t)0x787d19b3, (q31_t)0x787afaa7, (q31_t)0x7878db50, (q31_t)0x7876bbb0, (q31_t)0x78749bc5, - (q31_t)0x78727b8f, (q31_t)0x78705b10, (q31_t)0x786e3a46, (q31_t)0x786c1932, (q31_t)0x7869f7d3, (q31_t)0x7867d62a, (q31_t)0x7865b437, (q31_t)0x786391fa, - (q31_t)0x78616f72, (q31_t)0x785f4ca1, (q31_t)0x785d2984, (q31_t)0x785b061e, (q31_t)0x7858e26e, (q31_t)0x7856be73, (q31_t)0x78549a2e, (q31_t)0x7852759e, - (q31_t)0x785050c5, (q31_t)0x784e2ba1, (q31_t)0x784c0633, (q31_t)0x7849e07b, (q31_t)0x7847ba79, (q31_t)0x7845942c, (q31_t)0x78436d96, (q31_t)0x784146b5, - (q31_t)0x783f1f8a, (q31_t)0x783cf815, (q31_t)0x783ad055, (q31_t)0x7838a84c, (q31_t)0x78367ff8, (q31_t)0x7834575a, (q31_t)0x78322e72, (q31_t)0x78300540, - (q31_t)0x782ddbc4, (q31_t)0x782bb1fd, (q31_t)0x782987ed, (q31_t)0x78275d92, (q31_t)0x782532ed, (q31_t)0x782307fe, (q31_t)0x7820dcc5, (q31_t)0x781eb142, - (q31_t)0x781c8575, (q31_t)0x781a595d, (q31_t)0x78182cfc, (q31_t)0x78160051, (q31_t)0x7813d35b, (q31_t)0x7811a61b, (q31_t)0x780f7892, (q31_t)0x780d4abe, - (q31_t)0x780b1ca0, (q31_t)0x7808ee38, (q31_t)0x7806bf86, (q31_t)0x7804908a, (q31_t)0x78026145, (q31_t)0x780031b5, (q31_t)0x77fe01db, (q31_t)0x77fbd1b6, - (q31_t)0x77f9a148, (q31_t)0x77f77090, (q31_t)0x77f53f8e, (q31_t)0x77f30e42, (q31_t)0x77f0dcac, (q31_t)0x77eeaacc, (q31_t)0x77ec78a2, (q31_t)0x77ea462e, - (q31_t)0x77e81370, (q31_t)0x77e5e068, (q31_t)0x77e3ad17, (q31_t)0x77e1797b, (q31_t)0x77df4595, (q31_t)0x77dd1165, (q31_t)0x77dadcec, (q31_t)0x77d8a828, - (q31_t)0x77d6731a, (q31_t)0x77d43dc3, (q31_t)0x77d20822, (q31_t)0x77cfd236, (q31_t)0x77cd9c01, (q31_t)0x77cb6582, (q31_t)0x77c92eb9, (q31_t)0x77c6f7a6, - (q31_t)0x77c4c04a, (q31_t)0x77c288a3, (q31_t)0x77c050b2, (q31_t)0x77be1878, (q31_t)0x77bbdff4, (q31_t)0x77b9a726, (q31_t)0x77b76e0e, (q31_t)0x77b534ac, - (q31_t)0x77b2fb00, (q31_t)0x77b0c10b, (q31_t)0x77ae86cc, (q31_t)0x77ac4c43, (q31_t)0x77aa1170, (q31_t)0x77a7d653, (q31_t)0x77a59aec, (q31_t)0x77a35f3c, - (q31_t)0x77a12342, (q31_t)0x779ee6fe, (q31_t)0x779caa70, (q31_t)0x779a6d99, (q31_t)0x77983077, (q31_t)0x7795f30c, (q31_t)0x7793b557, (q31_t)0x77917759, - (q31_t)0x778f3910, (q31_t)0x778cfa7e, (q31_t)0x778abba2, (q31_t)0x77887c7d, (q31_t)0x77863d0d, (q31_t)0x7783fd54, (q31_t)0x7781bd52, (q31_t)0x777f7d05, - (q31_t)0x777d3c6f, (q31_t)0x777afb8f, (q31_t)0x7778ba65, (q31_t)0x777678f2, (q31_t)0x77743735, (q31_t)0x7771f52e, (q31_t)0x776fb2de, (q31_t)0x776d7044, - (q31_t)0x776b2d60, (q31_t)0x7768ea33, (q31_t)0x7766a6bc, (q31_t)0x776462fb, (q31_t)0x77621ef1, (q31_t)0x775fda9d, (q31_t)0x775d95ff, (q31_t)0x775b5118, - (q31_t)0x77590be7, (q31_t)0x7756c66c, (q31_t)0x775480a8, (q31_t)0x77523a9b, (q31_t)0x774ff443, (q31_t)0x774dada2, (q31_t)0x774b66b8, (q31_t)0x77491f84, - (q31_t)0x7746d806, (q31_t)0x7744903f, (q31_t)0x7742482e, (q31_t)0x773fffd4, (q31_t)0x773db730, (q31_t)0x773b6e42, (q31_t)0x7739250b, (q31_t)0x7736db8b, - (q31_t)0x773491c0, (q31_t)0x773247ad, (q31_t)0x772ffd50, (q31_t)0x772db2a9, (q31_t)0x772b67b9, (q31_t)0x77291c7f, (q31_t)0x7726d0fc, (q31_t)0x7724852f, - (q31_t)0x77223919, (q31_t)0x771fecb9, (q31_t)0x771da010, (q31_t)0x771b531d, (q31_t)0x771905e1, (q31_t)0x7716b85b, (q31_t)0x77146a8c, (q31_t)0x77121c74, - (q31_t)0x770fce12, (q31_t)0x770d7f66, (q31_t)0x770b3072, (q31_t)0x7708e133, (q31_t)0x770691ab, (q31_t)0x770441da, (q31_t)0x7701f1c0, (q31_t)0x76ffa15c, - (q31_t)0x76fd50ae, (q31_t)0x76faffb8, (q31_t)0x76f8ae78, (q31_t)0x76f65cee, (q31_t)0x76f40b1b, (q31_t)0x76f1b8ff, (q31_t)0x76ef6699, (q31_t)0x76ed13ea, - (q31_t)0x76eac0f2, (q31_t)0x76e86db0, (q31_t)0x76e61a25, (q31_t)0x76e3c650, (q31_t)0x76e17233, (q31_t)0x76df1dcb, (q31_t)0x76dcc91b, (q31_t)0x76da7421, - (q31_t)0x76d81ede, (q31_t)0x76d5c952, (q31_t)0x76d3737c, (q31_t)0x76d11d5d, (q31_t)0x76cec6f5, (q31_t)0x76cc7043, (q31_t)0x76ca1948, (q31_t)0x76c7c204, - (q31_t)0x76c56a77, (q31_t)0x76c312a0, (q31_t)0x76c0ba80, (q31_t)0x76be6217, (q31_t)0x76bc0965, (q31_t)0x76b9b069, (q31_t)0x76b75724, (q31_t)0x76b4fd96, - (q31_t)0x76b2a3bf, (q31_t)0x76b0499e, (q31_t)0x76adef34, (q31_t)0x76ab9481, (q31_t)0x76a93985, (q31_t)0x76a6de40, (q31_t)0x76a482b1, (q31_t)0x76a226da, - (q31_t)0x769fcab9, (q31_t)0x769d6e4f, (q31_t)0x769b119b, (q31_t)0x7698b49f, (q31_t)0x76965759, (q31_t)0x7693f9ca, (q31_t)0x76919bf3, (q31_t)0x768f3dd2, - (q31_t)0x768cdf67, (q31_t)0x768a80b4, (q31_t)0x768821b8, (q31_t)0x7685c272, (q31_t)0x768362e4, (q31_t)0x7681030c, (q31_t)0x767ea2eb, (q31_t)0x767c4281, - (q31_t)0x7679e1ce, (q31_t)0x767780d2, (q31_t)0x76751f8d, (q31_t)0x7672bdfe, (q31_t)0x76705c27, (q31_t)0x766dfa07, (q31_t)0x766b979d, (q31_t)0x766934eb, - (q31_t)0x7666d1ef, (q31_t)0x76646eab, (q31_t)0x76620b1d, (q31_t)0x765fa747, (q31_t)0x765d4327, (q31_t)0x765adebe, (q31_t)0x76587a0d, (q31_t)0x76561512, - (q31_t)0x7653afce, (q31_t)0x76514a42, (q31_t)0x764ee46c, (q31_t)0x764c7e4d, (q31_t)0x764a17e6, (q31_t)0x7647b135, (q31_t)0x76454a3c, (q31_t)0x7642e2f9, - (q31_t)0x76407b6e, (q31_t)0x763e139a, (q31_t)0x763bab7c, (q31_t)0x76394316, (q31_t)0x7636da67, (q31_t)0x7634716f, (q31_t)0x7632082e, (q31_t)0x762f9ea4, - (q31_t)0x762d34d1, (q31_t)0x762acab6, (q31_t)0x76286051, (q31_t)0x7625f5a3, (q31_t)0x76238aad, (q31_t)0x76211f6e, (q31_t)0x761eb3e6, (q31_t)0x761c4815, - (q31_t)0x7619dbfb, (q31_t)0x76176f98, (q31_t)0x761502ed, (q31_t)0x761295f9, (q31_t)0x761028bb, (q31_t)0x760dbb35, (q31_t)0x760b4d67, (q31_t)0x7608df4f, - (q31_t)0x760670ee, (q31_t)0x76040245, (q31_t)0x76019353, (q31_t)0x75ff2418, (q31_t)0x75fcb495, (q31_t)0x75fa44c8, (q31_t)0x75f7d4b3, (q31_t)0x75f56455, - (q31_t)0x75f2f3ae, (q31_t)0x75f082bf, (q31_t)0x75ee1187, (q31_t)0x75eba006, (q31_t)0x75e92e3c, (q31_t)0x75e6bc2a, (q31_t)0x75e449ce, (q31_t)0x75e1d72b, - (q31_t)0x75df643e, (q31_t)0x75dcf109, (q31_t)0x75da7d8b, (q31_t)0x75d809c4, (q31_t)0x75d595b4, (q31_t)0x75d3215c, (q31_t)0x75d0acbc, (q31_t)0x75ce37d2, - (q31_t)0x75cbc2a0, (q31_t)0x75c94d25, (q31_t)0x75c6d762, (q31_t)0x75c46156, (q31_t)0x75c1eb01, (q31_t)0x75bf7464, (q31_t)0x75bcfd7e, (q31_t)0x75ba864f, - (q31_t)0x75b80ed8, (q31_t)0x75b59718, (q31_t)0x75b31f0f, (q31_t)0x75b0a6be, (q31_t)0x75ae2e25, (q31_t)0x75abb542, (q31_t)0x75a93c18, (q31_t)0x75a6c2a4, - (q31_t)0x75a448e8, (q31_t)0x75a1cee4, (q31_t)0x759f5496, (q31_t)0x759cda01, (q31_t)0x759a5f22, (q31_t)0x7597e3fc, (q31_t)0x7595688c, (q31_t)0x7592ecd4, - (q31_t)0x759070d4, (q31_t)0x758df48b, (q31_t)0x758b77fa, (q31_t)0x7588fb20, (q31_t)0x75867dfd, (q31_t)0x75840093, (q31_t)0x758182df, (q31_t)0x757f04e3, - (q31_t)0x757c869f, (q31_t)0x757a0812, (q31_t)0x7577893d, (q31_t)0x75750a1f, (q31_t)0x75728ab9, (q31_t)0x75700b0a, (q31_t)0x756d8b13, (q31_t)0x756b0ad3, - (q31_t)0x75688a4b, (q31_t)0x7566097b, (q31_t)0x75638862, (q31_t)0x75610701, (q31_t)0x755e8557, (q31_t)0x755c0365, (q31_t)0x7559812b, (q31_t)0x7556fea8, - (q31_t)0x75547bdd, (q31_t)0x7551f8c9, (q31_t)0x754f756e, (q31_t)0x754cf1c9, (q31_t)0x754a6ddd, (q31_t)0x7547e9a8, (q31_t)0x7545652a, (q31_t)0x7542e065, - (q31_t)0x75405b57, (q31_t)0x753dd600, (q31_t)0x753b5061, (q31_t)0x7538ca7b, (q31_t)0x7536444b, (q31_t)0x7533bdd4, (q31_t)0x75313714, (q31_t)0x752eb00c, - (q31_t)0x752c28bb, (q31_t)0x7529a122, (q31_t)0x75271941, (q31_t)0x75249118, (q31_t)0x752208a7, (q31_t)0x751f7fed, (q31_t)0x751cf6eb, (q31_t)0x751a6da0, - (q31_t)0x7517e40e, (q31_t)0x75155a33, (q31_t)0x7512d010, (q31_t)0x751045a5, (q31_t)0x750dbaf2, (q31_t)0x750b2ff6, (q31_t)0x7508a4b2, (q31_t)0x75061926, - (q31_t)0x75038d52, (q31_t)0x75010136, (q31_t)0x74fe74d1, (q31_t)0x74fbe825, (q31_t)0x74f95b30, (q31_t)0x74f6cdf3, (q31_t)0x74f4406d, (q31_t)0x74f1b2a0, - (q31_t)0x74ef248b, (q31_t)0x74ec962d, (q31_t)0x74ea0787, (q31_t)0x74e7789a, (q31_t)0x74e4e964, (q31_t)0x74e259e6, (q31_t)0x74dfca20, (q31_t)0x74dd3a11, - (q31_t)0x74daa9bb, (q31_t)0x74d8191d, (q31_t)0x74d58836, (q31_t)0x74d2f708, (q31_t)0x74d06591, (q31_t)0x74cdd3d2, (q31_t)0x74cb41cc, (q31_t)0x74c8af7d, - (q31_t)0x74c61ce6, (q31_t)0x74c38a07, (q31_t)0x74c0f6e0, (q31_t)0x74be6372, (q31_t)0x74bbcfbb, (q31_t)0x74b93bbc, (q31_t)0x74b6a775, (q31_t)0x74b412e6, - (q31_t)0x74b17e0f, (q31_t)0x74aee8f0, (q31_t)0x74ac5389, (q31_t)0x74a9bddb, (q31_t)0x74a727e4, (q31_t)0x74a491a5, (q31_t)0x74a1fb1e, (q31_t)0x749f6450, - (q31_t)0x749ccd39, (q31_t)0x749a35db, (q31_t)0x74979e34, (q31_t)0x74950646, (q31_t)0x74926e10, (q31_t)0x748fd592, (q31_t)0x748d3ccb, (q31_t)0x748aa3be, - (q31_t)0x74880a68, (q31_t)0x748570ca, (q31_t)0x7482d6e4, (q31_t)0x74803cb7, (q31_t)0x747da242, (q31_t)0x747b0784, (q31_t)0x74786c7f, (q31_t)0x7475d132, - (q31_t)0x7473359e, (q31_t)0x747099c1, (q31_t)0x746dfd9d, (q31_t)0x746b6131, (q31_t)0x7468c47c, (q31_t)0x74662781, (q31_t)0x74638a3d, (q31_t)0x7460ecb2, - (q31_t)0x745e4ede, (q31_t)0x745bb0c3, (q31_t)0x74591261, (q31_t)0x745673b6, (q31_t)0x7453d4c4, (q31_t)0x7451358a, (q31_t)0x744e9608, (q31_t)0x744bf63e, - (q31_t)0x7449562d, (q31_t)0x7446b5d4, (q31_t)0x74441533, (q31_t)0x7441744b, (q31_t)0x743ed31b, (q31_t)0x743c31a3, (q31_t)0x74398fe3, (q31_t)0x7436eddc, - (q31_t)0x74344b8d, (q31_t)0x7431a8f6, (q31_t)0x742f0618, (q31_t)0x742c62f2, (q31_t)0x7429bf84, (q31_t)0x74271bcf, (q31_t)0x742477d2, (q31_t)0x7421d38e, - (q31_t)0x741f2f01, (q31_t)0x741c8a2d, (q31_t)0x7419e512, (q31_t)0x74173faf, (q31_t)0x74149a04, (q31_t)0x7411f412, (q31_t)0x740f4dd8, (q31_t)0x740ca756, - (q31_t)0x740a008d, (q31_t)0x7407597d, (q31_t)0x7404b224, (q31_t)0x74020a85, (q31_t)0x73ff629d, (q31_t)0x73fcba6e, (q31_t)0x73fa11f8, (q31_t)0x73f7693a, - (q31_t)0x73f4c034, (q31_t)0x73f216e7, (q31_t)0x73ef6d53, (q31_t)0x73ecc377, (q31_t)0x73ea1953, (q31_t)0x73e76ee8, (q31_t)0x73e4c435, (q31_t)0x73e2193b, - (q31_t)0x73df6df9, (q31_t)0x73dcc270, (q31_t)0x73da16a0, (q31_t)0x73d76a88, (q31_t)0x73d4be28, (q31_t)0x73d21182, (q31_t)0x73cf6493, (q31_t)0x73ccb75d, - (q31_t)0x73ca09e0, (q31_t)0x73c75c1c, (q31_t)0x73c4ae10, (q31_t)0x73c1ffbc, (q31_t)0x73bf5121, (q31_t)0x73bca23f, (q31_t)0x73b9f315, (q31_t)0x73b743a4, - (q31_t)0x73b493ec, (q31_t)0x73b1e3ec, (q31_t)0x73af33a5, (q31_t)0x73ac8316, (q31_t)0x73a9d240, (q31_t)0x73a72123, (q31_t)0x73a46fbf, (q31_t)0x73a1be13, - (q31_t)0x739f0c20, (q31_t)0x739c59e5, (q31_t)0x7399a763, (q31_t)0x7396f49a, (q31_t)0x73944189, (q31_t)0x73918e32, (q31_t)0x738eda93, (q31_t)0x738c26ac, - (q31_t)0x7389727f, (q31_t)0x7386be0a, (q31_t)0x7384094e, (q31_t)0x7381544a, (q31_t)0x737e9f00, (q31_t)0x737be96e, (q31_t)0x73793395, (q31_t)0x73767d74, - (q31_t)0x7373c70d, (q31_t)0x7371105e, (q31_t)0x736e5968, (q31_t)0x736ba22b, (q31_t)0x7368eaa6, (q31_t)0x736632db, (q31_t)0x73637ac8, (q31_t)0x7360c26e, - (q31_t)0x735e09cd, (q31_t)0x735b50e4, (q31_t)0x735897b5, (q31_t)0x7355de3e, (q31_t)0x73532481, (q31_t)0x73506a7c, (q31_t)0x734db030, (q31_t)0x734af59d, - (q31_t)0x73483ac2, (q31_t)0x73457fa1, (q31_t)0x7342c438, (q31_t)0x73400889, (q31_t)0x733d4c92, (q31_t)0x733a9054, (q31_t)0x7337d3d0, (q31_t)0x73351704, - (q31_t)0x733259f1, (q31_t)0x732f9c97, (q31_t)0x732cdef6, (q31_t)0x732a210d, (q31_t)0x732762de, (q31_t)0x7324a468, (q31_t)0x7321e5ab, (q31_t)0x731f26a7, - (q31_t)0x731c675b, (q31_t)0x7319a7c9, (q31_t)0x7316e7f0, (q31_t)0x731427cf, (q31_t)0x73116768, (q31_t)0x730ea6ba, (q31_t)0x730be5c5, (q31_t)0x73092489, - (q31_t)0x73066306, (q31_t)0x7303a13b, (q31_t)0x7300df2a, (q31_t)0x72fe1cd2, (q31_t)0x72fb5a34, (q31_t)0x72f8974e, (q31_t)0x72f5d421, (q31_t)0x72f310ad, - (q31_t)0x72f04cf3, (q31_t)0x72ed88f1, (q31_t)0x72eac4a9, (q31_t)0x72e8001a, (q31_t)0x72e53b44, (q31_t)0x72e27627, (q31_t)0x72dfb0c3, (q31_t)0x72dceb18, - (q31_t)0x72da2526, (q31_t)0x72d75eee, (q31_t)0x72d4986f, (q31_t)0x72d1d1a9, (q31_t)0x72cf0a9c, (q31_t)0x72cc4348, (q31_t)0x72c97bad, (q31_t)0x72c6b3cc, - (q31_t)0x72c3eba4, (q31_t)0x72c12335, (q31_t)0x72be5a7f, (q31_t)0x72bb9183, (q31_t)0x72b8c83f, (q31_t)0x72b5feb5, (q31_t)0x72b334e4, (q31_t)0x72b06acd, - (q31_t)0x72ada06f, (q31_t)0x72aad5c9, (q31_t)0x72a80ade, (q31_t)0x72a53fab, (q31_t)0x72a27432, (q31_t)0x729fa872, (q31_t)0x729cdc6b, (q31_t)0x729a101e, - (q31_t)0x7297438a, (q31_t)0x729476af, (q31_t)0x7291a98e, (q31_t)0x728edc26, (q31_t)0x728c0e77, (q31_t)0x72894082, (q31_t)0x72867245, (q31_t)0x7283a3c3, - (q31_t)0x7280d4f9, (q31_t)0x727e05e9, (q31_t)0x727b3693, (q31_t)0x727866f6, (q31_t)0x72759712, (q31_t)0x7272c6e7, (q31_t)0x726ff676, (q31_t)0x726d25bf, - (q31_t)0x726a54c1, (q31_t)0x7267837c, (q31_t)0x7264b1f0, (q31_t)0x7261e01e, (q31_t)0x725f0e06, (q31_t)0x725c3ba7, (q31_t)0x72596901, (q31_t)0x72569615, - (q31_t)0x7253c2e3, (q31_t)0x7250ef6a, (q31_t)0x724e1baa, (q31_t)0x724b47a4, (q31_t)0x72487357, (q31_t)0x72459ec4, (q31_t)0x7242c9ea, (q31_t)0x723ff4ca, - (q31_t)0x723d1f63, (q31_t)0x723a49b6, (q31_t)0x723773c3, (q31_t)0x72349d89, (q31_t)0x7231c708, (q31_t)0x722ef041, (q31_t)0x722c1934, (q31_t)0x722941e0, - (q31_t)0x72266a46, (q31_t)0x72239266, (q31_t)0x7220ba3f, (q31_t)0x721de1d1, (q31_t)0x721b091d, (q31_t)0x72183023, (q31_t)0x721556e3, (q31_t)0x72127d5c, - (q31_t)0x720fa38e, (q31_t)0x720cc97b, (q31_t)0x7209ef21, (q31_t)0x72071480, (q31_t)0x7204399a, (q31_t)0x72015e6d, (q31_t)0x71fe82f9, (q31_t)0x71fba740, - (q31_t)0x71f8cb40, (q31_t)0x71f5eefa, (q31_t)0x71f3126d, (q31_t)0x71f0359a, (q31_t)0x71ed5881, (q31_t)0x71ea7b22, (q31_t)0x71e79d7c, (q31_t)0x71e4bf90, - (q31_t)0x71e1e15e, (q31_t)0x71df02e5, (q31_t)0x71dc2427, (q31_t)0x71d94522, (q31_t)0x71d665d6, (q31_t)0x71d38645, (q31_t)0x71d0a66d, (q31_t)0x71cdc650, - (q31_t)0x71cae5ec, (q31_t)0x71c80542, (q31_t)0x71c52451, (q31_t)0x71c2431b, (q31_t)0x71bf619e, (q31_t)0x71bc7fdb, (q31_t)0x71b99dd2, (q31_t)0x71b6bb83, - (q31_t)0x71b3d8ed, (q31_t)0x71b0f612, (q31_t)0x71ae12f0, (q31_t)0x71ab2f89, (q31_t)0x71a84bdb, (q31_t)0x71a567e7, (q31_t)0x71a283ad, (q31_t)0x719f9f2c, - (q31_t)0x719cba66, (q31_t)0x7199d55a, (q31_t)0x7196f008, (q31_t)0x71940a6f, (q31_t)0x71912490, (q31_t)0x718e3e6c, (q31_t)0x718b5801, (q31_t)0x71887151, - (q31_t)0x71858a5a, (q31_t)0x7182a31d, (q31_t)0x717fbb9a, (q31_t)0x717cd3d2, (q31_t)0x7179ebc3, (q31_t)0x7177036e, (q31_t)0x71741ad3, (q31_t)0x717131f3, - (q31_t)0x716e48cc, (q31_t)0x716b5f5f, (q31_t)0x716875ad, (q31_t)0x71658bb4, (q31_t)0x7162a175, (q31_t)0x715fb6f1, (q31_t)0x715ccc26, (q31_t)0x7159e116, - (q31_t)0x7156f5c0, (q31_t)0x71540a24, (q31_t)0x71511e42, (q31_t)0x714e321a, (q31_t)0x714b45ac, (q31_t)0x714858f8, (q31_t)0x71456bfe, (q31_t)0x71427ebf, - (q31_t)0x713f9139, (q31_t)0x713ca36e, (q31_t)0x7139b55d, (q31_t)0x7136c706, (q31_t)0x7133d869, (q31_t)0x7130e987, (q31_t)0x712dfa5e, (q31_t)0x712b0af0, - (q31_t)0x71281b3c, (q31_t)0x71252b42, (q31_t)0x71223b02, (q31_t)0x711f4a7d, (q31_t)0x711c59b2, (q31_t)0x711968a1, (q31_t)0x7116774a, (q31_t)0x711385ad, - (q31_t)0x711093cb, (q31_t)0x710da1a3, (q31_t)0x710aaf35, (q31_t)0x7107bc82, (q31_t)0x7104c989, (q31_t)0x7101d64a, (q31_t)0x70fee2c5, (q31_t)0x70fbeefb, - (q31_t)0x70f8faeb, (q31_t)0x70f60695, (q31_t)0x70f311fa, (q31_t)0x70f01d19, (q31_t)0x70ed27f2, (q31_t)0x70ea3286, (q31_t)0x70e73cd4, (q31_t)0x70e446dc, - (q31_t)0x70e1509f, (q31_t)0x70de5a1c, (q31_t)0x70db6353, (q31_t)0x70d86c45, (q31_t)0x70d574f1, (q31_t)0x70d27d58, (q31_t)0x70cf8579, (q31_t)0x70cc8d54, - (q31_t)0x70c994ea, (q31_t)0x70c69c3a, (q31_t)0x70c3a345, (q31_t)0x70c0aa0a, (q31_t)0x70bdb08a, (q31_t)0x70bab6c4, (q31_t)0x70b7bcb8, (q31_t)0x70b4c267, - (q31_t)0x70b1c7d1, (q31_t)0x70aeccf5, (q31_t)0x70abd1d3, (q31_t)0x70a8d66c, (q31_t)0x70a5dac0, (q31_t)0x70a2dece, (q31_t)0x709fe296, (q31_t)0x709ce619, - (q31_t)0x7099e957, (q31_t)0x7096ec4f, (q31_t)0x7093ef01, (q31_t)0x7090f16e, (q31_t)0x708df396, (q31_t)0x708af579, (q31_t)0x7087f715, (q31_t)0x7084f86d, - (q31_t)0x7081f97f, (q31_t)0x707efa4c, (q31_t)0x707bfad3, (q31_t)0x7078fb15, (q31_t)0x7075fb11, (q31_t)0x7072fac9, (q31_t)0x706ffa3a, (q31_t)0x706cf967, - (q31_t)0x7069f84e, (q31_t)0x7066f6f0, (q31_t)0x7063f54c, (q31_t)0x7060f363, (q31_t)0x705df135, (q31_t)0x705aeec1, (q31_t)0x7057ec08, (q31_t)0x7054e90a, - (q31_t)0x7051e5c7, (q31_t)0x704ee23e, (q31_t)0x704bde70, (q31_t)0x7048da5d, (q31_t)0x7045d604, (q31_t)0x7042d166, (q31_t)0x703fcc83, (q31_t)0x703cc75b, - (q31_t)0x7039c1ed, (q31_t)0x7036bc3b, (q31_t)0x7033b643, (q31_t)0x7030b005, (q31_t)0x702da983, (q31_t)0x702aa2bb, (q31_t)0x70279baf, (q31_t)0x7024945d, - (q31_t)0x70218cc6, (q31_t)0x701e84e9, (q31_t)0x701b7cc8, (q31_t)0x70187461, (q31_t)0x70156bb5, (q31_t)0x701262c4, (q31_t)0x700f598e, (q31_t)0x700c5013, - (q31_t)0x70094653, (q31_t)0x70063c4e, (q31_t)0x70033203, (q31_t)0x70002774, (q31_t)0x6ffd1c9f, (q31_t)0x6ffa1185, (q31_t)0x6ff70626, (q31_t)0x6ff3fa82, - (q31_t)0x6ff0ee99, (q31_t)0x6fede26b, (q31_t)0x6fead5f8, (q31_t)0x6fe7c940, (q31_t)0x6fe4bc43, (q31_t)0x6fe1af01, (q31_t)0x6fdea17a, (q31_t)0x6fdb93ae, - (q31_t)0x6fd8859d, (q31_t)0x6fd57746, (q31_t)0x6fd268ab, (q31_t)0x6fcf59cb, (q31_t)0x6fcc4aa6, (q31_t)0x6fc93b3c, (q31_t)0x6fc62b8d, (q31_t)0x6fc31b99, - (q31_t)0x6fc00b60, (q31_t)0x6fbcfae2, (q31_t)0x6fb9ea20, (q31_t)0x6fb6d918, (q31_t)0x6fb3c7cb, (q31_t)0x6fb0b63a, (q31_t)0x6fada464, (q31_t)0x6faa9248, - (q31_t)0x6fa77fe8, (q31_t)0x6fa46d43, (q31_t)0x6fa15a59, (q31_t)0x6f9e472b, (q31_t)0x6f9b33b7, (q31_t)0x6f981fff, (q31_t)0x6f950c01, (q31_t)0x6f91f7bf, - (q31_t)0x6f8ee338, (q31_t)0x6f8bce6c, (q31_t)0x6f88b95c, (q31_t)0x6f85a407, (q31_t)0x6f828e6c, (q31_t)0x6f7f788d, (q31_t)0x6f7c626a, (q31_t)0x6f794c01, - (q31_t)0x6f763554, (q31_t)0x6f731e62, (q31_t)0x6f70072b, (q31_t)0x6f6cefb0, (q31_t)0x6f69d7f0, (q31_t)0x6f66bfeb, (q31_t)0x6f63a7a1, (q31_t)0x6f608f13, - (q31_t)0x6f5d7640, (q31_t)0x6f5a5d28, (q31_t)0x6f5743cb, (q31_t)0x6f542a2a, (q31_t)0x6f511044, (q31_t)0x6f4df61a, (q31_t)0x6f4adbab, (q31_t)0x6f47c0f7, - (q31_t)0x6f44a5ff, (q31_t)0x6f418ac2, (q31_t)0x6f3e6f40, (q31_t)0x6f3b537a, (q31_t)0x6f38376f, (q31_t)0x6f351b1f, (q31_t)0x6f31fe8b, (q31_t)0x6f2ee1b2, - (q31_t)0x6f2bc495, (q31_t)0x6f28a733, (q31_t)0x6f25898d, (q31_t)0x6f226ba2, (q31_t)0x6f1f4d72, (q31_t)0x6f1c2efe, (q31_t)0x6f191045, (q31_t)0x6f15f148, - (q31_t)0x6f12d206, (q31_t)0x6f0fb280, (q31_t)0x6f0c92b6, (q31_t)0x6f0972a6, (q31_t)0x6f065253, (q31_t)0x6f0331ba, (q31_t)0x6f0010de, (q31_t)0x6efcefbd, - (q31_t)0x6ef9ce57, (q31_t)0x6ef6acad, (q31_t)0x6ef38abe, (q31_t)0x6ef0688b, (q31_t)0x6eed4614, (q31_t)0x6eea2358, (q31_t)0x6ee70058, (q31_t)0x6ee3dd13, - (q31_t)0x6ee0b98a, (q31_t)0x6edd95bd, (q31_t)0x6eda71ab, (q31_t)0x6ed74d55, (q31_t)0x6ed428ba, (q31_t)0x6ed103db, (q31_t)0x6ecddeb8, (q31_t)0x6ecab950, - (q31_t)0x6ec793a4, (q31_t)0x6ec46db4, (q31_t)0x6ec1477f, (q31_t)0x6ebe2106, (q31_t)0x6ebafa49, (q31_t)0x6eb7d347, (q31_t)0x6eb4ac02, (q31_t)0x6eb18477, - (q31_t)0x6eae5ca9, (q31_t)0x6eab3496, (q31_t)0x6ea80c3f, (q31_t)0x6ea4e3a4, (q31_t)0x6ea1bac4, (q31_t)0x6e9e91a1, (q31_t)0x6e9b6839, (q31_t)0x6e983e8d, - (q31_t)0x6e95149c, (q31_t)0x6e91ea67, (q31_t)0x6e8ebfef, (q31_t)0x6e8b9532, (q31_t)0x6e886a30, (q31_t)0x6e853eeb, (q31_t)0x6e821361, (q31_t)0x6e7ee794, - (q31_t)0x6e7bbb82, (q31_t)0x6e788f2c, (q31_t)0x6e756291, (q31_t)0x6e7235b3, (q31_t)0x6e6f0890, (q31_t)0x6e6bdb2a, (q31_t)0x6e68ad7f, (q31_t)0x6e657f90, - (q31_t)0x6e62515d, (q31_t)0x6e5f22e6, (q31_t)0x6e5bf42b, (q31_t)0x6e58c52c, (q31_t)0x6e5595e9, (q31_t)0x6e526662, (q31_t)0x6e4f3696, (q31_t)0x6e4c0687, - (q31_t)0x6e48d633, (q31_t)0x6e45a59c, (q31_t)0x6e4274c1, (q31_t)0x6e3f43a1, (q31_t)0x6e3c123e, (q31_t)0x6e38e096, (q31_t)0x6e35aeab, (q31_t)0x6e327c7b, - (q31_t)0x6e2f4a08, (q31_t)0x6e2c1750, (q31_t)0x6e28e455, (q31_t)0x6e25b115, (q31_t)0x6e227d92, (q31_t)0x6e1f49cb, (q31_t)0x6e1c15c0, (q31_t)0x6e18e171, - (q31_t)0x6e15acde, (q31_t)0x6e127807, (q31_t)0x6e0f42ec, (q31_t)0x6e0c0d8e, (q31_t)0x6e08d7eb, (q31_t)0x6e05a205, (q31_t)0x6e026bda, (q31_t)0x6dff356c, - (q31_t)0x6dfbfeba, (q31_t)0x6df8c7c4, (q31_t)0x6df5908b, (q31_t)0x6df2590d, (q31_t)0x6def214c, (q31_t)0x6debe947, (q31_t)0x6de8b0fe, (q31_t)0x6de57871, - (q31_t)0x6de23fa0, (q31_t)0x6ddf068c, (q31_t)0x6ddbcd34, (q31_t)0x6dd89398, (q31_t)0x6dd559b9, (q31_t)0x6dd21f95, (q31_t)0x6dcee52e, (q31_t)0x6dcbaa83, - (q31_t)0x6dc86f95, (q31_t)0x6dc53462, (q31_t)0x6dc1f8ec, (q31_t)0x6dbebd33, (q31_t)0x6dbb8135, (q31_t)0x6db844f4, (q31_t)0x6db5086f, (q31_t)0x6db1cba7, - (q31_t)0x6dae8e9b, (q31_t)0x6dab514b, (q31_t)0x6da813b8, (q31_t)0x6da4d5e1, (q31_t)0x6da197c6, (q31_t)0x6d9e5968, (q31_t)0x6d9b1ac6, (q31_t)0x6d97dbe0, - (q31_t)0x6d949cb7, (q31_t)0x6d915d4a, (q31_t)0x6d8e1d9a, (q31_t)0x6d8adda6, (q31_t)0x6d879d6e, (q31_t)0x6d845cf3, (q31_t)0x6d811c35, (q31_t)0x6d7ddb33, - (q31_t)0x6d7a99ed, (q31_t)0x6d775864, (q31_t)0x6d741697, (q31_t)0x6d70d487, (q31_t)0x6d6d9233, (q31_t)0x6d6a4f9c, (q31_t)0x6d670cc1, (q31_t)0x6d63c9a3, - (q31_t)0x6d608641, (q31_t)0x6d5d429c, (q31_t)0x6d59feb3, (q31_t)0x6d56ba87, (q31_t)0x6d537617, (q31_t)0x6d503164, (q31_t)0x6d4cec6e, (q31_t)0x6d49a734, - (q31_t)0x6d4661b7, (q31_t)0x6d431bf6, (q31_t)0x6d3fd5f2, (q31_t)0x6d3c8fab, (q31_t)0x6d394920, (q31_t)0x6d360252, (q31_t)0x6d32bb40, (q31_t)0x6d2f73eb, - (q31_t)0x6d2c2c53, (q31_t)0x6d28e477, (q31_t)0x6d259c58, (q31_t)0x6d2253f6, (q31_t)0x6d1f0b50, (q31_t)0x6d1bc267, (q31_t)0x6d18793b, (q31_t)0x6d152fcc, - (q31_t)0x6d11e619, (q31_t)0x6d0e9c23, (q31_t)0x6d0b51e9, (q31_t)0x6d08076d, (q31_t)0x6d04bcad, (q31_t)0x6d0171aa, (q31_t)0x6cfe2663, (q31_t)0x6cfadada, - (q31_t)0x6cf78f0d, (q31_t)0x6cf442fd, (q31_t)0x6cf0f6aa, (q31_t)0x6cedaa13, (q31_t)0x6cea5d3a, (q31_t)0x6ce7101d, (q31_t)0x6ce3c2bd, (q31_t)0x6ce0751a, - (q31_t)0x6cdd2733, (q31_t)0x6cd9d90a, (q31_t)0x6cd68a9d, (q31_t)0x6cd33bed, (q31_t)0x6ccfecfa, (q31_t)0x6ccc9dc4, (q31_t)0x6cc94e4b, (q31_t)0x6cc5fe8f, - (q31_t)0x6cc2ae90, (q31_t)0x6cbf5e4d, (q31_t)0x6cbc0dc8, (q31_t)0x6cb8bcff, (q31_t)0x6cb56bf4, (q31_t)0x6cb21aa5, (q31_t)0x6caec913, (q31_t)0x6cab773e, - (q31_t)0x6ca82527, (q31_t)0x6ca4d2cc, (q31_t)0x6ca1802e, (q31_t)0x6c9e2d4d, (q31_t)0x6c9ada29, (q31_t)0x6c9786c2, (q31_t)0x6c943318, (q31_t)0x6c90df2c, - (q31_t)0x6c8d8afc, (q31_t)0x6c8a3689, (q31_t)0x6c86e1d3, (q31_t)0x6c838cdb, (q31_t)0x6c80379f, (q31_t)0x6c7ce220, (q31_t)0x6c798c5f, (q31_t)0x6c76365b, - (q31_t)0x6c72e013, (q31_t)0x6c6f8989, (q31_t)0x6c6c32bc, (q31_t)0x6c68dbac, (q31_t)0x6c658459, (q31_t)0x6c622cc4, (q31_t)0x6c5ed4eb, (q31_t)0x6c5b7cd0, - (q31_t)0x6c582472, (q31_t)0x6c54cbd1, (q31_t)0x6c5172ed, (q31_t)0x6c4e19c6, (q31_t)0x6c4ac05d, (q31_t)0x6c4766b0, (q31_t)0x6c440cc1, (q31_t)0x6c40b28f, - (q31_t)0x6c3d581b, (q31_t)0x6c39fd63, (q31_t)0x6c36a269, (q31_t)0x6c33472c, (q31_t)0x6c2febad, (q31_t)0x6c2c8fea, (q31_t)0x6c2933e5, (q31_t)0x6c25d79d, - (q31_t)0x6c227b13, (q31_t)0x6c1f1e45, (q31_t)0x6c1bc136, (q31_t)0x6c1863e3, (q31_t)0x6c15064e, (q31_t)0x6c11a876, (q31_t)0x6c0e4a5b, (q31_t)0x6c0aebfe, - (q31_t)0x6c078d5e, (q31_t)0x6c042e7b, (q31_t)0x6c00cf56, (q31_t)0x6bfd6fee, (q31_t)0x6bfa1044, (q31_t)0x6bf6b056, (q31_t)0x6bf35027, (q31_t)0x6befefb5, - (q31_t)0x6bec8f00, (q31_t)0x6be92e08, (q31_t)0x6be5ccce, (q31_t)0x6be26b52, (q31_t)0x6bdf0993, (q31_t)0x6bdba791, (q31_t)0x6bd8454d, (q31_t)0x6bd4e2c6, - (q31_t)0x6bd17ffd, (q31_t)0x6bce1cf1, (q31_t)0x6bcab9a3, (q31_t)0x6bc75613, (q31_t)0x6bc3f23f, (q31_t)0x6bc08e2a, (q31_t)0x6bbd29d2, (q31_t)0x6bb9c537, - (q31_t)0x6bb6605a, (q31_t)0x6bb2fb3b, (q31_t)0x6baf95d9, (q31_t)0x6bac3034, (q31_t)0x6ba8ca4e, (q31_t)0x6ba56425, (q31_t)0x6ba1fdb9, (q31_t)0x6b9e970b, - (q31_t)0x6b9b301b, (q31_t)0x6b97c8e8, (q31_t)0x6b946173, (q31_t)0x6b90f9bc, (q31_t)0x6b8d91c2, (q31_t)0x6b8a2986, (q31_t)0x6b86c107, (q31_t)0x6b835846, - (q31_t)0x6b7fef43, (q31_t)0x6b7c85fe, (q31_t)0x6b791c76, (q31_t)0x6b75b2ac, (q31_t)0x6b7248a0, (q31_t)0x6b6ede51, (q31_t)0x6b6b73c0, (q31_t)0x6b6808ed, - (q31_t)0x6b649dd8, (q31_t)0x6b613280, (q31_t)0x6b5dc6e6, (q31_t)0x6b5a5b0a, (q31_t)0x6b56eeec, (q31_t)0x6b53828b, (q31_t)0x6b5015e9, (q31_t)0x6b4ca904, - (q31_t)0x6b493bdd, (q31_t)0x6b45ce73, (q31_t)0x6b4260c8, (q31_t)0x6b3ef2da, (q31_t)0x6b3b84ab, (q31_t)0x6b381639, (q31_t)0x6b34a785, (q31_t)0x6b31388e, - (q31_t)0x6b2dc956, (q31_t)0x6b2a59dc, (q31_t)0x6b26ea1f, (q31_t)0x6b237a21, (q31_t)0x6b2009e0, (q31_t)0x6b1c995d, (q31_t)0x6b192898, (q31_t)0x6b15b791, - (q31_t)0x6b124648, (q31_t)0x6b0ed4bd, (q31_t)0x6b0b62f0, (q31_t)0x6b07f0e1, (q31_t)0x6b047e90, (q31_t)0x6b010bfd, (q31_t)0x6afd9928, (q31_t)0x6afa2610, - (q31_t)0x6af6b2b7, (q31_t)0x6af33f1c, (q31_t)0x6aefcb3f, (q31_t)0x6aec5720, (q31_t)0x6ae8e2bf, (q31_t)0x6ae56e1c, (q31_t)0x6ae1f937, (q31_t)0x6ade8410, - (q31_t)0x6adb0ea8, (q31_t)0x6ad798fd, (q31_t)0x6ad42311, (q31_t)0x6ad0ace2, (q31_t)0x6acd3672, (q31_t)0x6ac9bfc0, (q31_t)0x6ac648cb, (q31_t)0x6ac2d195, - (q31_t)0x6abf5a1e, (q31_t)0x6abbe264, (q31_t)0x6ab86a68, (q31_t)0x6ab4f22b, (q31_t)0x6ab179ac, (q31_t)0x6aae00eb, (q31_t)0x6aaa87e8, (q31_t)0x6aa70ea4, - (q31_t)0x6aa3951d, (q31_t)0x6aa01b55, (q31_t)0x6a9ca14b, (q31_t)0x6a992700, (q31_t)0x6a95ac72, (q31_t)0x6a9231a3, (q31_t)0x6a8eb692, (q31_t)0x6a8b3b3f, - (q31_t)0x6a87bfab, (q31_t)0x6a8443d5, (q31_t)0x6a80c7bd, (q31_t)0x6a7d4b64, (q31_t)0x6a79cec8, (q31_t)0x6a7651ec, (q31_t)0x6a72d4cd, (q31_t)0x6a6f576d, - (q31_t)0x6a6bd9cb, (q31_t)0x6a685be8, (q31_t)0x6a64ddc2, (q31_t)0x6a615f5c, (q31_t)0x6a5de0b3, (q31_t)0x6a5a61c9, (q31_t)0x6a56e29e, (q31_t)0x6a536331, - (q31_t)0x6a4fe382, (q31_t)0x6a4c6391, (q31_t)0x6a48e360, (q31_t)0x6a4562ec, (q31_t)0x6a41e237, (q31_t)0x6a3e6140, (q31_t)0x6a3ae008, (q31_t)0x6a375e8f, - (q31_t)0x6a33dcd4, (q31_t)0x6a305ad7, (q31_t)0x6a2cd899, (q31_t)0x6a295619, (q31_t)0x6a25d358, (q31_t)0x6a225055, (q31_t)0x6a1ecd11, (q31_t)0x6a1b498c, - (q31_t)0x6a17c5c5, (q31_t)0x6a1441bc, (q31_t)0x6a10bd72, (q31_t)0x6a0d38e7, (q31_t)0x6a09b41a, (q31_t)0x6a062f0c, (q31_t)0x6a02a9bc, (q31_t)0x69ff242b, - (q31_t)0x69fb9e59, (q31_t)0x69f81845, (q31_t)0x69f491f0, (q31_t)0x69f10b5a, (q31_t)0x69ed8482, (q31_t)0x69e9fd69, (q31_t)0x69e6760f, (q31_t)0x69e2ee73, - (q31_t)0x69df6696, (q31_t)0x69dbde77, (q31_t)0x69d85618, (q31_t)0x69d4cd77, (q31_t)0x69d14494, (q31_t)0x69cdbb71, (q31_t)0x69ca320c, (q31_t)0x69c6a866, - (q31_t)0x69c31e7f, (q31_t)0x69bf9456, (q31_t)0x69bc09ec, (q31_t)0x69b87f41, (q31_t)0x69b4f455, (q31_t)0x69b16928, (q31_t)0x69adddb9, (q31_t)0x69aa5209, - (q31_t)0x69a6c618, (q31_t)0x69a339e6, (q31_t)0x699fad73, (q31_t)0x699c20be, (q31_t)0x699893c9, (q31_t)0x69950692, (q31_t)0x6991791a, (q31_t)0x698deb61, - (q31_t)0x698a5d67, (q31_t)0x6986cf2c, (q31_t)0x698340af, (q31_t)0x697fb1f2, (q31_t)0x697c22f3, (q31_t)0x697893b4, (q31_t)0x69750433, (q31_t)0x69717472, - (q31_t)0x696de46f, (q31_t)0x696a542b, (q31_t)0x6966c3a6, (q31_t)0x696332e1, (q31_t)0x695fa1da, (q31_t)0x695c1092, (q31_t)0x69587f09, (q31_t)0x6954ed40, - (q31_t)0x69515b35, (q31_t)0x694dc8e9, (q31_t)0x694a365c, (q31_t)0x6946a38f, (q31_t)0x69431080, (q31_t)0x693f7d31, (q31_t)0x693be9a0, (q31_t)0x693855cf, - (q31_t)0x6934c1bd, (q31_t)0x69312d6a, (q31_t)0x692d98d6, (q31_t)0x692a0401, (q31_t)0x69266eeb, (q31_t)0x6922d995, (q31_t)0x691f43fd, (q31_t)0x691bae25, - (q31_t)0x6918180c, (q31_t)0x691481b2, (q31_t)0x6910eb17, (q31_t)0x690d543b, (q31_t)0x6909bd1f, (q31_t)0x690625c2, (q31_t)0x69028e24, (q31_t)0x68fef645, - (q31_t)0x68fb5e25, (q31_t)0x68f7c5c5, (q31_t)0x68f42d24, (q31_t)0x68f09442, (q31_t)0x68ecfb20, (q31_t)0x68e961bd, (q31_t)0x68e5c819, (q31_t)0x68e22e34, - (q31_t)0x68de940f, (q31_t)0x68daf9a9, (q31_t)0x68d75f02, (q31_t)0x68d3c41b, (q31_t)0x68d028f2, (q31_t)0x68cc8d8a, (q31_t)0x68c8f1e0, (q31_t)0x68c555f6, - (q31_t)0x68c1b9cc, (q31_t)0x68be1d61, (q31_t)0x68ba80b5, (q31_t)0x68b6e3c8, (q31_t)0x68b3469b, (q31_t)0x68afa92e, (q31_t)0x68ac0b7f, (q31_t)0x68a86d91, - (q31_t)0x68a4cf61, (q31_t)0x68a130f1, (q31_t)0x689d9241, (q31_t)0x6899f350, (q31_t)0x6896541f, (q31_t)0x6892b4ad, (q31_t)0x688f14fa, (q31_t)0x688b7507, - (q31_t)0x6887d4d4, (q31_t)0x68843460, (q31_t)0x688093ab, (q31_t)0x687cf2b6, (q31_t)0x68795181, (q31_t)0x6875b00b, (q31_t)0x68720e55, (q31_t)0x686e6c5e, - (q31_t)0x686aca27, (q31_t)0x686727b0, (q31_t)0x686384f8, (q31_t)0x685fe200, (q31_t)0x685c3ec7, (q31_t)0x68589b4e, (q31_t)0x6854f795, (q31_t)0x6851539b, - (q31_t)0x684daf61, (q31_t)0x684a0ae6, (q31_t)0x6846662c, (q31_t)0x6842c131, (q31_t)0x683f1bf5, (q31_t)0x683b7679, (q31_t)0x6837d0bd, (q31_t)0x68342ac1, - (q31_t)0x68308485, (q31_t)0x682cde08, (q31_t)0x6829374b, (q31_t)0x6825904d, (q31_t)0x6821e910, (q31_t)0x681e4192, (q31_t)0x681a99d4, (q31_t)0x6816f1d6, - (q31_t)0x68134997, (q31_t)0x680fa118, (q31_t)0x680bf85a, (q31_t)0x68084f5a, (q31_t)0x6804a61b, (q31_t)0x6800fc9c, (q31_t)0x67fd52dc, (q31_t)0x67f9a8dd, - (q31_t)0x67f5fe9d, (q31_t)0x67f2541d, (q31_t)0x67eea95d, (q31_t)0x67eafe5d, (q31_t)0x67e7531c, (q31_t)0x67e3a79c, (q31_t)0x67dffbdc, (q31_t)0x67dc4fdb, - (q31_t)0x67d8a39a, (q31_t)0x67d4f71a, (q31_t)0x67d14a59, (q31_t)0x67cd9d58, (q31_t)0x67c9f017, (q31_t)0x67c64297, (q31_t)0x67c294d6, (q31_t)0x67bee6d5, - (q31_t)0x67bb3894, (q31_t)0x67b78a13, (q31_t)0x67b3db53, (q31_t)0x67b02c52, (q31_t)0x67ac7d11, (q31_t)0x67a8cd91, (q31_t)0x67a51dd0, (q31_t)0x67a16dcf, - (q31_t)0x679dbd8f, (q31_t)0x679a0d0f, (q31_t)0x67965c4e, (q31_t)0x6792ab4e, (q31_t)0x678efa0e, (q31_t)0x678b488e, (q31_t)0x678796ce, (q31_t)0x6783e4cf, - (q31_t)0x6780328f, (q31_t)0x677c8010, (q31_t)0x6778cd50, (q31_t)0x67751a51, (q31_t)0x67716713, (q31_t)0x676db394, (q31_t)0x6769ffd5, (q31_t)0x67664bd7, - (q31_t)0x67629799, (q31_t)0x675ee31b, (q31_t)0x675b2e5e, (q31_t)0x67577960, (q31_t)0x6753c423, (q31_t)0x67500ea7, (q31_t)0x674c58ea, (q31_t)0x6748a2ee, - (q31_t)0x6744ecb2, (q31_t)0x67413636, (q31_t)0x673d7f7b, (q31_t)0x6739c880, (q31_t)0x67361145, (q31_t)0x673259ca, (q31_t)0x672ea210, (q31_t)0x672aea17, - (q31_t)0x672731dd, (q31_t)0x67237964, (q31_t)0x671fc0ac, (q31_t)0x671c07b4, (q31_t)0x67184e7c, (q31_t)0x67149504, (q31_t)0x6710db4d, (q31_t)0x670d2157, - (q31_t)0x67096721, (q31_t)0x6705acab, (q31_t)0x6701f1f6, (q31_t)0x66fe3701, (q31_t)0x66fa7bcd, (q31_t)0x66f6c059, (q31_t)0x66f304a6, (q31_t)0x66ef48b3, - (q31_t)0x66eb8c80, (q31_t)0x66e7d00f, (q31_t)0x66e4135d, (q31_t)0x66e0566c, (q31_t)0x66dc993c, (q31_t)0x66d8dbcd, (q31_t)0x66d51e1d, (q31_t)0x66d1602f, - (q31_t)0x66cda201, (q31_t)0x66c9e393, (q31_t)0x66c624e7, (q31_t)0x66c265fa, (q31_t)0x66bea6cf, (q31_t)0x66bae764, (q31_t)0x66b727ba, (q31_t)0x66b367d0, - (q31_t)0x66afa7a7, (q31_t)0x66abe73f, (q31_t)0x66a82697, (q31_t)0x66a465b0, (q31_t)0x66a0a489, (q31_t)0x669ce324, (q31_t)0x6699217f, (q31_t)0x66955f9b, - (q31_t)0x66919d77, (q31_t)0x668ddb14, (q31_t)0x668a1872, (q31_t)0x66865591, (q31_t)0x66829270, (q31_t)0x667ecf11, (q31_t)0x667b0b72, (q31_t)0x66774793, - (q31_t)0x66738376, (q31_t)0x666fbf19, (q31_t)0x666bfa7d, (q31_t)0x666835a2, (q31_t)0x66647088, (q31_t)0x6660ab2f, (q31_t)0x665ce596, (q31_t)0x66591fbf, - (q31_t)0x665559a8, (q31_t)0x66519352, (q31_t)0x664dccbd, (q31_t)0x664a05e9, (q31_t)0x66463ed6, (q31_t)0x66427784, (q31_t)0x663eaff2, (q31_t)0x663ae822, - (q31_t)0x66372012, (q31_t)0x663357c4, (q31_t)0x662f8f36, (q31_t)0x662bc66a, (q31_t)0x6627fd5e, (q31_t)0x66243413, (q31_t)0x66206a8a, (q31_t)0x661ca0c1, - (q31_t)0x6618d6b9, (q31_t)0x66150c73, (q31_t)0x661141ed, (q31_t)0x660d7729, (q31_t)0x6609ac25, (q31_t)0x6605e0e3, (q31_t)0x66021561, (q31_t)0x65fe49a1, - (q31_t)0x65fa7da2, (q31_t)0x65f6b164, (q31_t)0x65f2e4e7, (q31_t)0x65ef182b, (q31_t)0x65eb4b30, (q31_t)0x65e77df6, (q31_t)0x65e3b07e, (q31_t)0x65dfe2c6, - (q31_t)0x65dc14d0, (q31_t)0x65d8469b, (q31_t)0x65d47827, (q31_t)0x65d0a975, (q31_t)0x65ccda83, (q31_t)0x65c90b53, (q31_t)0x65c53be4, (q31_t)0x65c16c36, - (q31_t)0x65bd9c49, (q31_t)0x65b9cc1e, (q31_t)0x65b5fbb4, (q31_t)0x65b22b0b, (q31_t)0x65ae5a23, (q31_t)0x65aa88fd, (q31_t)0x65a6b798, (q31_t)0x65a2e5f4, - (q31_t)0x659f1412, (q31_t)0x659b41f1, (q31_t)0x65976f91, (q31_t)0x65939cf3, (q31_t)0x658fca15, (q31_t)0x658bf6fa, (q31_t)0x6588239f, (q31_t)0x65845006, - (q31_t)0x65807c2f, (q31_t)0x657ca818, (q31_t)0x6578d3c4, (q31_t)0x6574ff30, (q31_t)0x65712a5e, (q31_t)0x656d554d, (q31_t)0x65697ffe, (q31_t)0x6565aa71, - (q31_t)0x6561d4a4, (q31_t)0x655dfe99, (q31_t)0x655a2850, (q31_t)0x655651c8, (q31_t)0x65527b02, (q31_t)0x654ea3fd, (q31_t)0x654accba, (q31_t)0x6546f538, - (q31_t)0x65431d77, (q31_t)0x653f4579, (q31_t)0x653b6d3b, (q31_t)0x653794c0, (q31_t)0x6533bc06, (q31_t)0x652fe30d, (q31_t)0x652c09d6, (q31_t)0x65283061, - (q31_t)0x652456ad, (q31_t)0x65207cbb, (q31_t)0x651ca28a, (q31_t)0x6518c81b, (q31_t)0x6514ed6e, (q31_t)0x65111283, (q31_t)0x650d3759, (q31_t)0x65095bf0, - (q31_t)0x6505804a, (q31_t)0x6501a465, (q31_t)0x64fdc841, (q31_t)0x64f9ebe0, (q31_t)0x64f60f40, (q31_t)0x64f23262, (q31_t)0x64ee5546, (q31_t)0x64ea77eb, - (q31_t)0x64e69a52, (q31_t)0x64e2bc7b, (q31_t)0x64dede66, (q31_t)0x64db0012, (q31_t)0x64d72180, (q31_t)0x64d342b0, (q31_t)0x64cf63a2, (q31_t)0x64cb8456, - (q31_t)0x64c7a4cb, (q31_t)0x64c3c502, (q31_t)0x64bfe4fc, (q31_t)0x64bc04b6, (q31_t)0x64b82433, (q31_t)0x64b44372, (q31_t)0x64b06273, (q31_t)0x64ac8135, - (q31_t)0x64a89fba, (q31_t)0x64a4be00, (q31_t)0x64a0dc08, (q31_t)0x649cf9d2, (q31_t)0x6499175e, (q31_t)0x649534ac, (q31_t)0x649151bc, (q31_t)0x648d6e8e, - (q31_t)0x64898b22, (q31_t)0x6485a778, (q31_t)0x6481c390, (q31_t)0x647ddf6a, (q31_t)0x6479fb06, (q31_t)0x64761664, (q31_t)0x64723184, (q31_t)0x646e4c66, - (q31_t)0x646a670a, (q31_t)0x64668170, (q31_t)0x64629b98, (q31_t)0x645eb582, (q31_t)0x645acf2e, (q31_t)0x6456e89d, (q31_t)0x645301cd, (q31_t)0x644f1ac0, - (q31_t)0x644b3375, (q31_t)0x64474bec, (q31_t)0x64436425, (q31_t)0x643f7c20, (q31_t)0x643b93dd, (q31_t)0x6437ab5d, (q31_t)0x6433c29f, (q31_t)0x642fd9a3, - (q31_t)0x642bf069, (q31_t)0x642806f1, (q31_t)0x64241d3c, (q31_t)0x64203348, (q31_t)0x641c4917, (q31_t)0x64185ea9, (q31_t)0x641473fc, (q31_t)0x64108912, - (q31_t)0x640c9dea, (q31_t)0x6408b284, (q31_t)0x6404c6e1, (q31_t)0x6400db00, (q31_t)0x63fceee1, (q31_t)0x63f90285, (q31_t)0x63f515eb, (q31_t)0x63f12913, - (q31_t)0x63ed3bfd, (q31_t)0x63e94eaa, (q31_t)0x63e5611a, (q31_t)0x63e1734b, (q31_t)0x63dd853f, (q31_t)0x63d996f6, (q31_t)0x63d5a86f, (q31_t)0x63d1b9aa, - (q31_t)0x63cdcaa8, (q31_t)0x63c9db68, (q31_t)0x63c5ebeb, (q31_t)0x63c1fc30, (q31_t)0x63be0c37, (q31_t)0x63ba1c01, (q31_t)0x63b62b8e, (q31_t)0x63b23add, - (q31_t)0x63ae49ee, (q31_t)0x63aa58c2, (q31_t)0x63a66759, (q31_t)0x63a275b2, (q31_t)0x639e83cd, (q31_t)0x639a91ac, (q31_t)0x63969f4c, (q31_t)0x6392acaf, - (q31_t)0x638eb9d5, (q31_t)0x638ac6be, (q31_t)0x6386d369, (q31_t)0x6382dfd6, (q31_t)0x637eec07, (q31_t)0x637af7fa, (q31_t)0x637703af, (q31_t)0x63730f27, - (q31_t)0x636f1a62, (q31_t)0x636b2560, (q31_t)0x63673020, (q31_t)0x63633aa3, (q31_t)0x635f44e8, (q31_t)0x635b4ef0, (q31_t)0x635758bb, (q31_t)0x63536249, - (q31_t)0x634f6b99, (q31_t)0x634b74ad, (q31_t)0x63477d82, (q31_t)0x6343861b, (q31_t)0x633f8e76, (q31_t)0x633b9695, (q31_t)0x63379e76, (q31_t)0x6333a619, - (q31_t)0x632fad80, (q31_t)0x632bb4a9, (q31_t)0x6327bb96, (q31_t)0x6323c245, (q31_t)0x631fc8b7, (q31_t)0x631bceeb, (q31_t)0x6317d4e3, (q31_t)0x6313da9e, - (q31_t)0x630fe01b, (q31_t)0x630be55b, (q31_t)0x6307ea5e, (q31_t)0x6303ef25, (q31_t)0x62fff3ae, (q31_t)0x62fbf7fa, (q31_t)0x62f7fc08, (q31_t)0x62f3ffda, - (q31_t)0x62f0036f, (q31_t)0x62ec06c7, (q31_t)0x62e809e2, (q31_t)0x62e40cbf, (q31_t)0x62e00f60, (q31_t)0x62dc11c4, (q31_t)0x62d813eb, (q31_t)0x62d415d4, - (q31_t)0x62d01781, (q31_t)0x62cc18f1, (q31_t)0x62c81a24, (q31_t)0x62c41b1a, (q31_t)0x62c01bd3, (q31_t)0x62bc1c4f, (q31_t)0x62b81c8f, (q31_t)0x62b41c91, - (q31_t)0x62b01c57, (q31_t)0x62ac1bdf, (q31_t)0x62a81b2b, (q31_t)0x62a41a3a, (q31_t)0x62a0190c, (q31_t)0x629c17a1, (q31_t)0x629815fa, (q31_t)0x62941415, - (q31_t)0x629011f4, (q31_t)0x628c0f96, (q31_t)0x62880cfb, (q31_t)0x62840a23, (q31_t)0x6280070f, (q31_t)0x627c03be, (q31_t)0x62780030, (q31_t)0x6273fc65, - (q31_t)0x626ff85e, (q31_t)0x626bf41a, (q31_t)0x6267ef99, (q31_t)0x6263eadc, (q31_t)0x625fe5e1, (q31_t)0x625be0ab, (q31_t)0x6257db37, (q31_t)0x6253d587, - (q31_t)0x624fcf9a, (q31_t)0x624bc970, (q31_t)0x6247c30a, (q31_t)0x6243bc68, (q31_t)0x623fb588, (q31_t)0x623bae6c, (q31_t)0x6237a714, (q31_t)0x62339f7e, - (q31_t)0x622f97ad, (q31_t)0x622b8f9e, (q31_t)0x62278754, (q31_t)0x62237ecc, (q31_t)0x621f7608, (q31_t)0x621b6d08, (q31_t)0x621763cb, (q31_t)0x62135a51, - (q31_t)0x620f509b, (q31_t)0x620b46a9, (q31_t)0x62073c7a, (q31_t)0x6203320e, (q31_t)0x61ff2766, (q31_t)0x61fb1c82, (q31_t)0x61f71161, (q31_t)0x61f30604, - (q31_t)0x61eefa6b, (q31_t)0x61eaee95, (q31_t)0x61e6e282, (q31_t)0x61e2d633, (q31_t)0x61dec9a8, (q31_t)0x61dabce0, (q31_t)0x61d6afdd, (q31_t)0x61d2a29c, - (q31_t)0x61ce9520, (q31_t)0x61ca8767, (q31_t)0x61c67971, (q31_t)0x61c26b40, (q31_t)0x61be5cd2, (q31_t)0x61ba4e28, (q31_t)0x61b63f41, (q31_t)0x61b2301e, - (q31_t)0x61ae20bf, (q31_t)0x61aa1124, (q31_t)0x61a6014d, (q31_t)0x61a1f139, (q31_t)0x619de0e9, (q31_t)0x6199d05d, (q31_t)0x6195bf94, (q31_t)0x6191ae90, - (q31_t)0x618d9d4f, (q31_t)0x61898bd2, (q31_t)0x61857a19, (q31_t)0x61816824, (q31_t)0x617d55f2, (q31_t)0x61794385, (q31_t)0x617530db, (q31_t)0x61711df5, - (q31_t)0x616d0ad3, (q31_t)0x6168f775, (q31_t)0x6164e3db, (q31_t)0x6160d005, (q31_t)0x615cbbf3, (q31_t)0x6158a7a4, (q31_t)0x6154931a, (q31_t)0x61507e54, - (q31_t)0x614c6951, (q31_t)0x61485413, (q31_t)0x61443e98, (q31_t)0x614028e2, (q31_t)0x613c12f0, (q31_t)0x6137fcc1, (q31_t)0x6133e657, (q31_t)0x612fcfb0, - (q31_t)0x612bb8ce, (q31_t)0x6127a1b0, (q31_t)0x61238a56, (q31_t)0x611f72c0, (q31_t)0x611b5aee, (q31_t)0x611742e0, (q31_t)0x61132a96, (q31_t)0x610f1210, - (q31_t)0x610af94f, (q31_t)0x6106e051, (q31_t)0x6102c718, (q31_t)0x60feada3, (q31_t)0x60fa93f2, (q31_t)0x60f67a05, (q31_t)0x60f25fdd, (q31_t)0x60ee4579, - (q31_t)0x60ea2ad8, (q31_t)0x60e60ffd, (q31_t)0x60e1f4e5, (q31_t)0x60ddd991, (q31_t)0x60d9be02, (q31_t)0x60d5a237, (q31_t)0x60d18631, (q31_t)0x60cd69ee, - (q31_t)0x60c94d70, (q31_t)0x60c530b6, (q31_t)0x60c113c1, (q31_t)0x60bcf690, (q31_t)0x60b8d923, (q31_t)0x60b4bb7a, (q31_t)0x60b09d96, (q31_t)0x60ac7f76, - (q31_t)0x60a8611b, (q31_t)0x60a44284, (q31_t)0x60a023b1, (q31_t)0x609c04a3, (q31_t)0x6097e559, (q31_t)0x6093c5d3, (q31_t)0x608fa612, (q31_t)0x608b8616, - (q31_t)0x608765dd, (q31_t)0x6083456a, (q31_t)0x607f24ba, (q31_t)0x607b03d0, (q31_t)0x6076e2a9, (q31_t)0x6072c148, (q31_t)0x606e9faa, (q31_t)0x606a7dd2, - (q31_t)0x60665bbd, (q31_t)0x6062396e, (q31_t)0x605e16e2, (q31_t)0x6059f41c, (q31_t)0x6055d11a, (q31_t)0x6051addc, (q31_t)0x604d8a63, (q31_t)0x604966af, - (q31_t)0x604542bf, (q31_t)0x60411e94, (q31_t)0x603cfa2e, (q31_t)0x6038d58c, (q31_t)0x6034b0af, (q31_t)0x60308b97, (q31_t)0x602c6643, (q31_t)0x602840b4, - (q31_t)0x60241ae9, (q31_t)0x601ff4e3, (q31_t)0x601bcea2, (q31_t)0x6017a826, (q31_t)0x6013816e, (q31_t)0x600f5a7b, (q31_t)0x600b334d, (q31_t)0x60070be4, - (q31_t)0x6002e43f, (q31_t)0x5ffebc5f, (q31_t)0x5ffa9444, (q31_t)0x5ff66bee, (q31_t)0x5ff2435d, (q31_t)0x5fee1a90, (q31_t)0x5fe9f188, (q31_t)0x5fe5c845, - (q31_t)0x5fe19ec7, (q31_t)0x5fdd750e, (q31_t)0x5fd94b19, (q31_t)0x5fd520ea, (q31_t)0x5fd0f67f, (q31_t)0x5fcccbd9, (q31_t)0x5fc8a0f8, (q31_t)0x5fc475dc, - (q31_t)0x5fc04a85, (q31_t)0x5fbc1ef3, (q31_t)0x5fb7f326, (q31_t)0x5fb3c71e, (q31_t)0x5faf9adb, (q31_t)0x5fab6e5d, (q31_t)0x5fa741a3, (q31_t)0x5fa314af, - (q31_t)0x5f9ee780, (q31_t)0x5f9aba16, (q31_t)0x5f968c70, (q31_t)0x5f925e90, (q31_t)0x5f8e3075, (q31_t)0x5f8a021f, (q31_t)0x5f85d38e, (q31_t)0x5f81a4c2, - (q31_t)0x5f7d75bb, (q31_t)0x5f794679, (q31_t)0x5f7516fd, (q31_t)0x5f70e745, (q31_t)0x5f6cb753, (q31_t)0x5f688726, (q31_t)0x5f6456be, (q31_t)0x5f60261b, - (q31_t)0x5f5bf53d, (q31_t)0x5f57c424, (q31_t)0x5f5392d1, (q31_t)0x5f4f6143, (q31_t)0x5f4b2f7a, (q31_t)0x5f46fd76, (q31_t)0x5f42cb37, (q31_t)0x5f3e98be, - (q31_t)0x5f3a660a, (q31_t)0x5f36331b, (q31_t)0x5f31fff1, (q31_t)0x5f2dcc8d, (q31_t)0x5f2998ee, (q31_t)0x5f256515, (q31_t)0x5f213100, (q31_t)0x5f1cfcb1, - (q31_t)0x5f18c827, (q31_t)0x5f149363, (q31_t)0x5f105e64, (q31_t)0x5f0c292a, (q31_t)0x5f07f3b6, (q31_t)0x5f03be07, (q31_t)0x5eff881d, (q31_t)0x5efb51f9, - (q31_t)0x5ef71b9b, (q31_t)0x5ef2e501, (q31_t)0x5eeeae2d, (q31_t)0x5eea771f, (q31_t)0x5ee63fd6, (q31_t)0x5ee20853, (q31_t)0x5eddd094, (q31_t)0x5ed9989c, - (q31_t)0x5ed56069, (q31_t)0x5ed127fb, (q31_t)0x5eccef53, (q31_t)0x5ec8b671, (q31_t)0x5ec47d54, (q31_t)0x5ec043fc, (q31_t)0x5ebc0a6a, (q31_t)0x5eb7d09e, - (q31_t)0x5eb39697, (q31_t)0x5eaf5c56, (q31_t)0x5eab21da, (q31_t)0x5ea6e724, (q31_t)0x5ea2ac34, (q31_t)0x5e9e7109, (q31_t)0x5e9a35a4, (q31_t)0x5e95fa05, - (q31_t)0x5e91be2b, (q31_t)0x5e8d8217, (q31_t)0x5e8945c8, (q31_t)0x5e85093f, (q31_t)0x5e80cc7c, (q31_t)0x5e7c8f7f, (q31_t)0x5e785247, (q31_t)0x5e7414d5, - (q31_t)0x5e6fd729, (q31_t)0x5e6b9943, (q31_t)0x5e675b22, (q31_t)0x5e631cc7, (q31_t)0x5e5ede32, (q31_t)0x5e5a9f62, (q31_t)0x5e566059, (q31_t)0x5e522115, - (q31_t)0x5e4de197, (q31_t)0x5e49a1df, (q31_t)0x5e4561ed, (q31_t)0x5e4121c0, (q31_t)0x5e3ce15a, (q31_t)0x5e38a0b9, (q31_t)0x5e345fde, (q31_t)0x5e301ec9, - (q31_t)0x5e2bdd7a, (q31_t)0x5e279bf1, (q31_t)0x5e235a2e, (q31_t)0x5e1f1830, (q31_t)0x5e1ad5f9, (q31_t)0x5e169388, (q31_t)0x5e1250dc, (q31_t)0x5e0e0df7, - (q31_t)0x5e09cad7, (q31_t)0x5e05877e, (q31_t)0x5e0143ea, (q31_t)0x5dfd001d, (q31_t)0x5df8bc15, (q31_t)0x5df477d4, (q31_t)0x5df03359, (q31_t)0x5debeea3, - (q31_t)0x5de7a9b4, (q31_t)0x5de3648b, (q31_t)0x5ddf1f28, (q31_t)0x5ddad98b, (q31_t)0x5dd693b4, (q31_t)0x5dd24da3, (q31_t)0x5dce0759, (q31_t)0x5dc9c0d4, - (q31_t)0x5dc57a16, (q31_t)0x5dc1331d, (q31_t)0x5dbcebeb, (q31_t)0x5db8a480, (q31_t)0x5db45cda, (q31_t)0x5db014fa, (q31_t)0x5dabcce1, (q31_t)0x5da7848e, - (q31_t)0x5da33c01, (q31_t)0x5d9ef33b, (q31_t)0x5d9aaa3a, (q31_t)0x5d966100, (q31_t)0x5d92178d, (q31_t)0x5d8dcddf, (q31_t)0x5d8983f8, (q31_t)0x5d8539d7, - (q31_t)0x5d80ef7c, (q31_t)0x5d7ca4e8, (q31_t)0x5d785a1a, (q31_t)0x5d740f12, (q31_t)0x5d6fc3d1, (q31_t)0x5d6b7856, (q31_t)0x5d672ca2, (q31_t)0x5d62e0b4, - (q31_t)0x5d5e948c, (q31_t)0x5d5a482a, (q31_t)0x5d55fb90, (q31_t)0x5d51aebb, (q31_t)0x5d4d61ad, (q31_t)0x5d491465, (q31_t)0x5d44c6e4, (q31_t)0x5d40792a, - (q31_t)0x5d3c2b35, (q31_t)0x5d37dd08, (q31_t)0x5d338ea0, (q31_t)0x5d2f4000, (q31_t)0x5d2af125, (q31_t)0x5d26a212, (q31_t)0x5d2252c5, (q31_t)0x5d1e033e, - (q31_t)0x5d19b37e, (q31_t)0x5d156385, (q31_t)0x5d111352, (q31_t)0x5d0cc2e5, (q31_t)0x5d087240, (q31_t)0x5d042161, (q31_t)0x5cffd048, (q31_t)0x5cfb7ef7, - (q31_t)0x5cf72d6b, (q31_t)0x5cf2dba7, (q31_t)0x5cee89a9, (q31_t)0x5cea3772, (q31_t)0x5ce5e501, (q31_t)0x5ce19258, (q31_t)0x5cdd3f75, (q31_t)0x5cd8ec58, - (q31_t)0x5cd49903, (q31_t)0x5cd04574, (q31_t)0x5ccbf1ab, (q31_t)0x5cc79daa, (q31_t)0x5cc3496f, (q31_t)0x5cbef4fc, (q31_t)0x5cbaa04f, (q31_t)0x5cb64b68, - (q31_t)0x5cb1f649, (q31_t)0x5cada0f0, (q31_t)0x5ca94b5e, (q31_t)0x5ca4f594, (q31_t)0x5ca09f8f, (q31_t)0x5c9c4952, (q31_t)0x5c97f2dc, (q31_t)0x5c939c2c, - (q31_t)0x5c8f4544, (q31_t)0x5c8aee22, (q31_t)0x5c8696c7, (q31_t)0x5c823f34, (q31_t)0x5c7de767, (q31_t)0x5c798f61, (q31_t)0x5c753722, (q31_t)0x5c70deaa, - (q31_t)0x5c6c85f9, (q31_t)0x5c682d0f, (q31_t)0x5c63d3eb, (q31_t)0x5c5f7a8f, (q31_t)0x5c5b20fa, (q31_t)0x5c56c72c, (q31_t)0x5c526d25, (q31_t)0x5c4e12e5, - (q31_t)0x5c49b86d, (q31_t)0x5c455dbb, (q31_t)0x5c4102d0, (q31_t)0x5c3ca7ad, (q31_t)0x5c384c50, (q31_t)0x5c33f0bb, (q31_t)0x5c2f94ec, (q31_t)0x5c2b38e5, - (q31_t)0x5c26dca5, (q31_t)0x5c22802c, (q31_t)0x5c1e237b, (q31_t)0x5c19c690, (q31_t)0x5c15696d, (q31_t)0x5c110c11, (q31_t)0x5c0cae7c, (q31_t)0x5c0850ae, - (q31_t)0x5c03f2a8, (q31_t)0x5bff9469, (q31_t)0x5bfb35f1, (q31_t)0x5bf6d740, (q31_t)0x5bf27857, (q31_t)0x5bee1935, (q31_t)0x5be9b9da, (q31_t)0x5be55a46, - (q31_t)0x5be0fa7a, (q31_t)0x5bdc9a75, (q31_t)0x5bd83a37, (q31_t)0x5bd3d9c1, (q31_t)0x5bcf7912, (q31_t)0x5bcb182b, (q31_t)0x5bc6b70b, (q31_t)0x5bc255b2, - (q31_t)0x5bbdf421, (q31_t)0x5bb99257, (q31_t)0x5bb53054, (q31_t)0x5bb0ce19, (q31_t)0x5bac6ba6, (q31_t)0x5ba808f9, (q31_t)0x5ba3a615, (q31_t)0x5b9f42f7, - (q31_t)0x5b9adfa2, (q31_t)0x5b967c13, (q31_t)0x5b92184d, (q31_t)0x5b8db44d, (q31_t)0x5b895016, (q31_t)0x5b84eba6, (q31_t)0x5b8086fd, (q31_t)0x5b7c221c, - (q31_t)0x5b77bd02, (q31_t)0x5b7357b0, (q31_t)0x5b6ef226, (q31_t)0x5b6a8c63, (q31_t)0x5b662668, (q31_t)0x5b61c035, (q31_t)0x5b5d59c9, (q31_t)0x5b58f324, - (q31_t)0x5b548c48, (q31_t)0x5b502533, (q31_t)0x5b4bbde6, (q31_t)0x5b475660, (q31_t)0x5b42eea2, (q31_t)0x5b3e86ac, (q31_t)0x5b3a1e7e, (q31_t)0x5b35b617, - (q31_t)0x5b314d78, (q31_t)0x5b2ce4a1, (q31_t)0x5b287b91, (q31_t)0x5b241249, (q31_t)0x5b1fa8c9, (q31_t)0x5b1b3f11, (q31_t)0x5b16d521, (q31_t)0x5b126af8, - (q31_t)0x5b0e0098, (q31_t)0x5b0995ff, (q31_t)0x5b052b2e, (q31_t)0x5b00c025, (q31_t)0x5afc54e3, (q31_t)0x5af7e96a, (q31_t)0x5af37db8, (q31_t)0x5aef11cf, - (q31_t)0x5aeaa5ad, (q31_t)0x5ae63953, (q31_t)0x5ae1ccc1, (q31_t)0x5add5ff7, (q31_t)0x5ad8f2f5, (q31_t)0x5ad485bb, (q31_t)0x5ad01849, (q31_t)0x5acbaa9f, - (q31_t)0x5ac73cbd, (q31_t)0x5ac2cea3, (q31_t)0x5abe6050, (q31_t)0x5ab9f1c6, (q31_t)0x5ab58304, (q31_t)0x5ab1140a, (q31_t)0x5aaca4d8, (q31_t)0x5aa8356f, - (q31_t)0x5aa3c5cd, (q31_t)0x5a9f55f3, (q31_t)0x5a9ae5e2, (q31_t)0x5a967598, (q31_t)0x5a920517, (q31_t)0x5a8d945d, (q31_t)0x5a89236c, (q31_t)0x5a84b243, - (q31_t)0x5a8040e3, (q31_t)0x5a7bcf4a, (q31_t)0x5a775d7a, (q31_t)0x5a72eb71, (q31_t)0x5a6e7931, (q31_t)0x5a6a06ba, (q31_t)0x5a65940a, (q31_t)0x5a612123, - (q31_t)0x5a5cae04, (q31_t)0x5a583aad, (q31_t)0x5a53c71e, (q31_t)0x5a4f5358, (q31_t)0x5a4adf5a, (q31_t)0x5a466b24, (q31_t)0x5a41f6b7, (q31_t)0x5a3d8212, - (q31_t)0x5a390d35, (q31_t)0x5a349821, (q31_t)0x5a3022d5, (q31_t)0x5a2bad51, (q31_t)0x5a273796, (q31_t)0x5a22c1a3, (q31_t)0x5a1e4b79, (q31_t)0x5a19d517, - (q31_t)0x5a155e7d, (q31_t)0x5a10e7ac, (q31_t)0x5a0c70a3, (q31_t)0x5a07f963, (q31_t)0x5a0381eb, (q31_t)0x59ff0a3c, (q31_t)0x59fa9255, (q31_t)0x59f61a36, - (q31_t)0x59f1a1e0, (q31_t)0x59ed2953, (q31_t)0x59e8b08e, (q31_t)0x59e43792, (q31_t)0x59dfbe5e, (q31_t)0x59db44f3, (q31_t)0x59d6cb50, (q31_t)0x59d25176, - (q31_t)0x59cdd765, (q31_t)0x59c95d1c, (q31_t)0x59c4e29c, (q31_t)0x59c067e4, (q31_t)0x59bbecf5, (q31_t)0x59b771cf, (q31_t)0x59b2f671, (q31_t)0x59ae7add, - (q31_t)0x59a9ff10, (q31_t)0x59a5830d, (q31_t)0x59a106d2, (q31_t)0x599c8a60, (q31_t)0x59980db6, (q31_t)0x599390d5, (q31_t)0x598f13bd, (q31_t)0x598a966e, - (q31_t)0x598618e8, (q31_t)0x59819b2a, (q31_t)0x597d1d35, (q31_t)0x59789f09, (q31_t)0x597420a6, (q31_t)0x596fa20b, (q31_t)0x596b233a, (q31_t)0x5966a431, - (q31_t)0x596224f1, (q31_t)0x595da57a, (q31_t)0x595925cc, (q31_t)0x5954a5e6, (q31_t)0x595025ca, (q31_t)0x594ba576, (q31_t)0x594724ec, (q31_t)0x5942a42a, - (q31_t)0x593e2331, (q31_t)0x5939a202, (q31_t)0x5935209b, (q31_t)0x59309efd, (q31_t)0x592c1d28, (q31_t)0x59279b1c, (q31_t)0x592318d9, (q31_t)0x591e9660, - (q31_t)0x591a13af, (q31_t)0x591590c7, (q31_t)0x59110da8, (q31_t)0x590c8a53, (q31_t)0x590806c6, (q31_t)0x59038302, (q31_t)0x58feff08, (q31_t)0x58fa7ad7, - (q31_t)0x58f5f66e, (q31_t)0x58f171cf, (q31_t)0x58ececf9, (q31_t)0x58e867ed, (q31_t)0x58e3e2a9, (q31_t)0x58df5d2e, (q31_t)0x58dad77d, (q31_t)0x58d65195, - (q31_t)0x58d1cb76, (q31_t)0x58cd4520, (q31_t)0x58c8be94, (q31_t)0x58c437d1, (q31_t)0x58bfb0d7, (q31_t)0x58bb29a6, (q31_t)0x58b6a23e, (q31_t)0x58b21aa0, - (q31_t)0x58ad92cb, (q31_t)0x58a90ac0, (q31_t)0x58a4827d, (q31_t)0x589ffa04, (q31_t)0x589b7155, (q31_t)0x5896e86f, (q31_t)0x58925f52, (q31_t)0x588dd5fe, - (q31_t)0x58894c74, (q31_t)0x5884c2b3, (q31_t)0x588038bb, (q31_t)0x587bae8d, (q31_t)0x58772429, (q31_t)0x5872998e, (q31_t)0x586e0ebc, (q31_t)0x586983b4, - (q31_t)0x5864f875, (q31_t)0x58606d00, (q31_t)0x585be154, (q31_t)0x58575571, (q31_t)0x5852c958, (q31_t)0x584e3d09, (q31_t)0x5849b083, (q31_t)0x584523c7, - (q31_t)0x584096d4, (q31_t)0x583c09ab, (q31_t)0x58377c4c, (q31_t)0x5832eeb6, (q31_t)0x582e60e9, (q31_t)0x5829d2e6, (q31_t)0x582544ad, (q31_t)0x5820b63e, - (q31_t)0x581c2798, (q31_t)0x581798bb, (q31_t)0x581309a9, (q31_t)0x580e7a60, (q31_t)0x5809eae1, (q31_t)0x58055b2b, (q31_t)0x5800cb3f, (q31_t)0x57fc3b1d, - (q31_t)0x57f7aac5, (q31_t)0x57f31a36, (q31_t)0x57ee8971, (q31_t)0x57e9f876, (q31_t)0x57e56744, (q31_t)0x57e0d5dd, (q31_t)0x57dc443f, (q31_t)0x57d7b26b, - (q31_t)0x57d32061, (q31_t)0x57ce8e20, (q31_t)0x57c9fbaa, (q31_t)0x57c568fd, (q31_t)0x57c0d61a, (q31_t)0x57bc4301, (q31_t)0x57b7afb2, (q31_t)0x57b31c2d, - (q31_t)0x57ae8872, (q31_t)0x57a9f480, (q31_t)0x57a56059, (q31_t)0x57a0cbfb, (q31_t)0x579c3768, (q31_t)0x5797a29e, (q31_t)0x57930d9e, (q31_t)0x578e7869, - (q31_t)0x5789e2fd, (q31_t)0x57854d5b, (q31_t)0x5780b784, (q31_t)0x577c2176, (q31_t)0x57778b32, (q31_t)0x5772f4b9, (q31_t)0x576e5e09, (q31_t)0x5769c724, - (q31_t)0x57653009, (q31_t)0x576098b7, (q31_t)0x575c0130, (q31_t)0x57576973, (q31_t)0x5752d180, (q31_t)0x574e3957, (q31_t)0x5749a0f9, (q31_t)0x57450864, - (q31_t)0x57406f9a, (q31_t)0x573bd69a, (q31_t)0x57373d64, (q31_t)0x5732a3f8, (q31_t)0x572e0a56, (q31_t)0x5729707f, (q31_t)0x5724d672, (q31_t)0x57203c2f, - (q31_t)0x571ba1b7, (q31_t)0x57170708, (q31_t)0x57126c24, (q31_t)0x570dd10a, (q31_t)0x570935bb, (q31_t)0x57049a36, (q31_t)0x56fffe7b, (q31_t)0x56fb628b, - (q31_t)0x56f6c664, (q31_t)0x56f22a09, (q31_t)0x56ed8d77, (q31_t)0x56e8f0b0, (q31_t)0x56e453b4, (q31_t)0x56dfb681, (q31_t)0x56db1919, (q31_t)0x56d67b7c, - (q31_t)0x56d1dda9, (q31_t)0x56cd3fa1, (q31_t)0x56c8a162, (q31_t)0x56c402ef, (q31_t)0x56bf6446, (q31_t)0x56bac567, (q31_t)0x56b62653, (q31_t)0x56b18709, - (q31_t)0x56ace78a, (q31_t)0x56a847d6, (q31_t)0x56a3a7ec, (q31_t)0x569f07cc, (q31_t)0x569a6777, (q31_t)0x5695c6ed, (q31_t)0x5691262d, (q31_t)0x568c8538, - (q31_t)0x5687e40e, (q31_t)0x568342ae, (q31_t)0x567ea118, (q31_t)0x5679ff4e, (q31_t)0x56755d4e, (q31_t)0x5670bb19, (q31_t)0x566c18ae, (q31_t)0x5667760e, - (q31_t)0x5662d339, (q31_t)0x565e302e, (q31_t)0x56598cee, (q31_t)0x5654e979, (q31_t)0x565045cf, (q31_t)0x564ba1f0, (q31_t)0x5646fddb, (q31_t)0x56425991, - (q31_t)0x563db512, (q31_t)0x5639105d, (q31_t)0x56346b74, (q31_t)0x562fc655, (q31_t)0x562b2101, (q31_t)0x56267b78, (q31_t)0x5621d5ba, (q31_t)0x561d2fc6, - (q31_t)0x5618899e, (q31_t)0x5613e340, (q31_t)0x560f3cae, (q31_t)0x560a95e6, (q31_t)0x5605eee9, (q31_t)0x560147b7, (q31_t)0x55fca050, (q31_t)0x55f7f8b4, - (q31_t)0x55f350e3, (q31_t)0x55eea8dd, (q31_t)0x55ea00a2, (q31_t)0x55e55832, (q31_t)0x55e0af8d, (q31_t)0x55dc06b3, (q31_t)0x55d75da4, (q31_t)0x55d2b460, - (q31_t)0x55ce0ae7, (q31_t)0x55c96139, (q31_t)0x55c4b757, (q31_t)0x55c00d3f, (q31_t)0x55bb62f3, (q31_t)0x55b6b871, (q31_t)0x55b20dbb, (q31_t)0x55ad62d0, - (q31_t)0x55a8b7b0, (q31_t)0x55a40c5b, (q31_t)0x559f60d1, (q31_t)0x559ab513, (q31_t)0x55960920, (q31_t)0x55915cf8, (q31_t)0x558cb09b, (q31_t)0x55880409, - (q31_t)0x55835743, (q31_t)0x557eaa48, (q31_t)0x5579fd18, (q31_t)0x55754fb3, (q31_t)0x5570a21a, (q31_t)0x556bf44c, (q31_t)0x55674649, (q31_t)0x55629812, - (q31_t)0x555de9a6, (q31_t)0x55593b05, (q31_t)0x55548c30, (q31_t)0x554fdd26, (q31_t)0x554b2de7, (q31_t)0x55467e74, (q31_t)0x5541cecc, (q31_t)0x553d1ef0, - (q31_t)0x55386edf, (q31_t)0x5533be99, (q31_t)0x552f0e1f, (q31_t)0x552a5d70, (q31_t)0x5525ac8d, (q31_t)0x5520fb75, (q31_t)0x551c4a29, (q31_t)0x551798a8, - (q31_t)0x5512e6f3, (q31_t)0x550e3509, (q31_t)0x550982eb, (q31_t)0x5504d099, (q31_t)0x55001e12, (q31_t)0x54fb6b56, (q31_t)0x54f6b866, (q31_t)0x54f20542, - (q31_t)0x54ed51e9, (q31_t)0x54e89e5c, (q31_t)0x54e3ea9a, (q31_t)0x54df36a5, (q31_t)0x54da827a, (q31_t)0x54d5ce1c, (q31_t)0x54d11989, (q31_t)0x54cc64c2, - (q31_t)0x54c7afc6, (q31_t)0x54c2fa96, (q31_t)0x54be4532, (q31_t)0x54b98f9a, (q31_t)0x54b4d9cd, (q31_t)0x54b023cc, (q31_t)0x54ab6d97, (q31_t)0x54a6b72e, - (q31_t)0x54a20090, (q31_t)0x549d49bf, (q31_t)0x549892b9, (q31_t)0x5493db7f, (q31_t)0x548f2410, (q31_t)0x548a6c6e, (q31_t)0x5485b497, (q31_t)0x5480fc8c, - (q31_t)0x547c444d, (q31_t)0x54778bda, (q31_t)0x5472d333, (q31_t)0x546e1a58, (q31_t)0x54696149, (q31_t)0x5464a805, (q31_t)0x545fee8e, (q31_t)0x545b34e3, - (q31_t)0x54567b03, (q31_t)0x5451c0f0, (q31_t)0x544d06a8, (q31_t)0x54484c2d, (q31_t)0x5443917d, (q31_t)0x543ed699, (q31_t)0x543a1b82, (q31_t)0x54356037, - (q31_t)0x5430a4b7, (q31_t)0x542be904, (q31_t)0x54272d1d, (q31_t)0x54227102, (q31_t)0x541db4b3, (q31_t)0x5418f830, (q31_t)0x54143b79, (q31_t)0x540f7e8e, - (q31_t)0x540ac170, (q31_t)0x5406041d, (q31_t)0x54014697, (q31_t)0x53fc88dd, (q31_t)0x53f7caef, (q31_t)0x53f30cce, (q31_t)0x53ee4e78, (q31_t)0x53e98fef, - (q31_t)0x53e4d132, (q31_t)0x53e01242, (q31_t)0x53db531d, (q31_t)0x53d693c5, (q31_t)0x53d1d439, (q31_t)0x53cd147a, (q31_t)0x53c85486, (q31_t)0x53c3945f, - (q31_t)0x53bed405, (q31_t)0x53ba1377, (q31_t)0x53b552b5, (q31_t)0x53b091bf, (q31_t)0x53abd096, (q31_t)0x53a70f39, (q31_t)0x53a24da9, (q31_t)0x539d8be5, - (q31_t)0x5398c9ed, (q31_t)0x539407c2, (q31_t)0x538f4564, (q31_t)0x538a82d1, (q31_t)0x5385c00c, (q31_t)0x5380fd12, (q31_t)0x537c39e6, (q31_t)0x53777685, - (q31_t)0x5372b2f2, (q31_t)0x536def2a, (q31_t)0x53692b30, (q31_t)0x53646701, (q31_t)0x535fa2a0, (q31_t)0x535ade0b, (q31_t)0x53561942, (q31_t)0x53515447, - (q31_t)0x534c8f17, (q31_t)0x5347c9b5, (q31_t)0x5343041f, (q31_t)0x533e3e55, (q31_t)0x53397859, (q31_t)0x5334b229, (q31_t)0x532febc5, (q31_t)0x532b252f, - (q31_t)0x53265e65, (q31_t)0x53219767, (q31_t)0x531cd037, (q31_t)0x531808d3, (q31_t)0x5313413c, (q31_t)0x530e7972, (q31_t)0x5309b174, (q31_t)0x5304e943, - (q31_t)0x530020df, (q31_t)0x52fb5848, (q31_t)0x52f68f7e, (q31_t)0x52f1c680, (q31_t)0x52ecfd4f, (q31_t)0x52e833ec, (q31_t)0x52e36a55, (q31_t)0x52dea08a, - (q31_t)0x52d9d68d, (q31_t)0x52d50c5d, (q31_t)0x52d041f9, (q31_t)0x52cb7763, (q31_t)0x52c6ac99, (q31_t)0x52c1e19d, (q31_t)0x52bd166d, (q31_t)0x52b84b0a, - (q31_t)0x52b37f74, (q31_t)0x52aeb3ac, (q31_t)0x52a9e7b0, (q31_t)0x52a51b81, (q31_t)0x52a04f1f, (q31_t)0x529b828a, (q31_t)0x5296b5c3, (q31_t)0x5291e8c8, - (q31_t)0x528d1b9b, (q31_t)0x52884e3a, (q31_t)0x528380a7, (q31_t)0x527eb2e0, (q31_t)0x5279e4e7, (q31_t)0x527516bb, (q31_t)0x5270485c, (q31_t)0x526b79ca, - (q31_t)0x5266ab06, (q31_t)0x5261dc0e, (q31_t)0x525d0ce4, (q31_t)0x52583d87, (q31_t)0x52536df7, (q31_t)0x524e9e34, (q31_t)0x5249ce3f, (q31_t)0x5244fe17, - (q31_t)0x52402dbc, (q31_t)0x523b5d2e, (q31_t)0x52368c6e, (q31_t)0x5231bb7b, (q31_t)0x522cea55, (q31_t)0x522818fc, (q31_t)0x52234771, (q31_t)0x521e75b3, - (q31_t)0x5219a3c3, (q31_t)0x5214d1a0, (q31_t)0x520fff4a, (q31_t)0x520b2cc2, (q31_t)0x52065a07, (q31_t)0x52018719, (q31_t)0x51fcb3f9, (q31_t)0x51f7e0a6, - (q31_t)0x51f30d21, (q31_t)0x51ee3969, (q31_t)0x51e9657e, (q31_t)0x51e49162, (q31_t)0x51dfbd12, (q31_t)0x51dae890, (q31_t)0x51d613dc, (q31_t)0x51d13ef5, - (q31_t)0x51cc69db, (q31_t)0x51c79490, (q31_t)0x51c2bf11, (q31_t)0x51bde960, (q31_t)0x51b9137d, (q31_t)0x51b43d68, (q31_t)0x51af6720, (q31_t)0x51aa90a5, - (q31_t)0x51a5b9f9, (q31_t)0x51a0e31a, (q31_t)0x519c0c08, (q31_t)0x519734c4, (q31_t)0x51925d4e, (q31_t)0x518d85a6, (q31_t)0x5188adcb, (q31_t)0x5183d5be, - (q31_t)0x517efd7f, (q31_t)0x517a250d, (q31_t)0x51754c69, (q31_t)0x51707393, (q31_t)0x516b9a8b, (q31_t)0x5166c150, (q31_t)0x5161e7e4, (q31_t)0x515d0e45, - (q31_t)0x51583473, (q31_t)0x51535a70, (q31_t)0x514e803b, (q31_t)0x5149a5d3, (q31_t)0x5144cb39, (q31_t)0x513ff06d, (q31_t)0x513b156f, (q31_t)0x51363a3f, - (q31_t)0x51315edd, (q31_t)0x512c8348, (q31_t)0x5127a782, (q31_t)0x5122cb8a, (q31_t)0x511def5f, (q31_t)0x51191302, (q31_t)0x51143674, (q31_t)0x510f59b3, - (q31_t)0x510a7cc1, (q31_t)0x51059f9c, (q31_t)0x5100c246, (q31_t)0x50fbe4bd, (q31_t)0x50f70703, (q31_t)0x50f22916, (q31_t)0x50ed4af8, (q31_t)0x50e86ca8, - (q31_t)0x50e38e25, (q31_t)0x50deaf71, (q31_t)0x50d9d08b, (q31_t)0x50d4f173, (q31_t)0x50d0122a, (q31_t)0x50cb32ae, (q31_t)0x50c65301, (q31_t)0x50c17322, - (q31_t)0x50bc9311, (q31_t)0x50b7b2ce, (q31_t)0x50b2d259, (q31_t)0x50adf1b3, (q31_t)0x50a910db, (q31_t)0x50a42fd1, (q31_t)0x509f4e95, (q31_t)0x509a6d28, - (q31_t)0x50958b88, (q31_t)0x5090a9b8, (q31_t)0x508bc7b5, (q31_t)0x5086e581, (q31_t)0x5082031b, (q31_t)0x507d2083, (q31_t)0x50783dba, (q31_t)0x50735abf, - (q31_t)0x506e7793, (q31_t)0x50699435, (q31_t)0x5064b0a5, (q31_t)0x505fcce4, (q31_t)0x505ae8f1, (q31_t)0x505604cd, (q31_t)0x50512077, (q31_t)0x504c3bef, - (q31_t)0x50475736, (q31_t)0x5042724c, (q31_t)0x503d8d30, (q31_t)0x5038a7e2, (q31_t)0x5033c263, (q31_t)0x502edcb2, (q31_t)0x5029f6d1, (q31_t)0x502510bd, - (q31_t)0x50202a78, (q31_t)0x501b4402, (q31_t)0x50165d5a, (q31_t)0x50117681, (q31_t)0x500c8f77, (q31_t)0x5007a83b, (q31_t)0x5002c0cd, (q31_t)0x4ffdd92f, - (q31_t)0x4ff8f15f, (q31_t)0x4ff4095e, (q31_t)0x4fef212b, (q31_t)0x4fea38c7, (q31_t)0x4fe55032, (q31_t)0x4fe0676c, (q31_t)0x4fdb7e74, (q31_t)0x4fd6954b, - (q31_t)0x4fd1abf0, (q31_t)0x4fccc265, (q31_t)0x4fc7d8a8, (q31_t)0x4fc2eeba, (q31_t)0x4fbe049b, (q31_t)0x4fb91a4b, (q31_t)0x4fb42fc9, (q31_t)0x4faf4517, - (q31_t)0x4faa5a33, (q31_t)0x4fa56f1e, (q31_t)0x4fa083d8, (q31_t)0x4f9b9861, (q31_t)0x4f96acb8, (q31_t)0x4f91c0df, (q31_t)0x4f8cd4d4, (q31_t)0x4f87e899, - (q31_t)0x4f82fc2c, (q31_t)0x4f7e0f8f, (q31_t)0x4f7922c0, (q31_t)0x4f7435c0, (q31_t)0x4f6f488f, (q31_t)0x4f6a5b2e, (q31_t)0x4f656d9b, (q31_t)0x4f607fd7, - (q31_t)0x4f5b91e3, (q31_t)0x4f56a3bd, (q31_t)0x4f51b566, (q31_t)0x4f4cc6df, (q31_t)0x4f47d827, (q31_t)0x4f42e93d, (q31_t)0x4f3dfa23, (q31_t)0x4f390ad8, - (q31_t)0x4f341b5c, (q31_t)0x4f2f2baf, (q31_t)0x4f2a3bd2, (q31_t)0x4f254bc3, (q31_t)0x4f205b84, (q31_t)0x4f1b6b14, (q31_t)0x4f167a73, (q31_t)0x4f1189a1, - (q31_t)0x4f0c989f, (q31_t)0x4f07a76b, (q31_t)0x4f02b608, (q31_t)0x4efdc473, (q31_t)0x4ef8d2ad, (q31_t)0x4ef3e0b7, (q31_t)0x4eeeee90, (q31_t)0x4ee9fc39, - (q31_t)0x4ee509b1, (q31_t)0x4ee016f8, (q31_t)0x4edb240e, (q31_t)0x4ed630f4, (q31_t)0x4ed13da9, (q31_t)0x4ecc4a2e, (q31_t)0x4ec75682, (q31_t)0x4ec262a5, - (q31_t)0x4ebd6e98, (q31_t)0x4eb87a5a, (q31_t)0x4eb385ec, (q31_t)0x4eae914d, (q31_t)0x4ea99c7d, (q31_t)0x4ea4a77d, (q31_t)0x4e9fb24d, (q31_t)0x4e9abcec, - (q31_t)0x4e95c75b, (q31_t)0x4e90d199, (q31_t)0x4e8bdba6, (q31_t)0x4e86e583, (q31_t)0x4e81ef30, (q31_t)0x4e7cf8ac, (q31_t)0x4e7801f8, (q31_t)0x4e730b14, - (q31_t)0x4e6e13ff, (q31_t)0x4e691cba, (q31_t)0x4e642544, (q31_t)0x4e5f2d9e, (q31_t)0x4e5a35c7, (q31_t)0x4e553dc1, (q31_t)0x4e50458a, (q31_t)0x4e4b4d22, - (q31_t)0x4e46548b, (q31_t)0x4e415bc3, (q31_t)0x4e3c62cb, (q31_t)0x4e3769a2, (q31_t)0x4e32704a, (q31_t)0x4e2d76c1, (q31_t)0x4e287d08, (q31_t)0x4e23831e, - (q31_t)0x4e1e8905, (q31_t)0x4e198ebb, (q31_t)0x4e149441, (q31_t)0x4e0f9997, (q31_t)0x4e0a9ebd, (q31_t)0x4e05a3b2, (q31_t)0x4e00a878, (q31_t)0x4dfbad0d, - (q31_t)0x4df6b173, (q31_t)0x4df1b5a8, (q31_t)0x4decb9ad, (q31_t)0x4de7bd82, (q31_t)0x4de2c127, (q31_t)0x4dddc49c, (q31_t)0x4dd8c7e1, (q31_t)0x4dd3caf6, - (q31_t)0x4dcecdda, (q31_t)0x4dc9d08f, (q31_t)0x4dc4d314, (q31_t)0x4dbfd569, (q31_t)0x4dbad78e, (q31_t)0x4db5d983, (q31_t)0x4db0db48, (q31_t)0x4dabdcdd, - (q31_t)0x4da6de43, (q31_t)0x4da1df78, (q31_t)0x4d9ce07d, (q31_t)0x4d97e153, (q31_t)0x4d92e1f9, (q31_t)0x4d8de26f, (q31_t)0x4d88e2b5, (q31_t)0x4d83e2cb, - (q31_t)0x4d7ee2b1, (q31_t)0x4d79e268, (q31_t)0x4d74e1ef, (q31_t)0x4d6fe146, (q31_t)0x4d6ae06d, (q31_t)0x4d65df64, (q31_t)0x4d60de2c, (q31_t)0x4d5bdcc4, - (q31_t)0x4d56db2d, (q31_t)0x4d51d965, (q31_t)0x4d4cd76e, (q31_t)0x4d47d547, (q31_t)0x4d42d2f1, (q31_t)0x4d3dd06b, (q31_t)0x4d38cdb5, (q31_t)0x4d33cad0, - (q31_t)0x4d2ec7bb, (q31_t)0x4d29c476, (q31_t)0x4d24c102, (q31_t)0x4d1fbd5e, (q31_t)0x4d1ab98b, (q31_t)0x4d15b588, (q31_t)0x4d10b155, (q31_t)0x4d0bacf3, - (q31_t)0x4d06a862, (q31_t)0x4d01a3a0, (q31_t)0x4cfc9eb0, (q31_t)0x4cf79990, (q31_t)0x4cf29440, (q31_t)0x4ced8ec1, (q31_t)0x4ce88913, (q31_t)0x4ce38335, - (q31_t)0x4cde7d28, (q31_t)0x4cd976eb, (q31_t)0x4cd4707f, (q31_t)0x4ccf69e3, (q31_t)0x4cca6318, (q31_t)0x4cc55c1e, (q31_t)0x4cc054f4, (q31_t)0x4cbb4d9b, - (q31_t)0x4cb64613, (q31_t)0x4cb13e5b, (q31_t)0x4cac3674, (q31_t)0x4ca72e5e, (q31_t)0x4ca22619, (q31_t)0x4c9d1da4, (q31_t)0x4c981500, (q31_t)0x4c930c2d, - (q31_t)0x4c8e032a, (q31_t)0x4c88f9f8, (q31_t)0x4c83f097, (q31_t)0x4c7ee707, (q31_t)0x4c79dd48, (q31_t)0x4c74d359, (q31_t)0x4c6fc93b, (q31_t)0x4c6abeef, - (q31_t)0x4c65b473, (q31_t)0x4c60a9c8, (q31_t)0x4c5b9eed, (q31_t)0x4c5693e4, (q31_t)0x4c5188ac, (q31_t)0x4c4c7d44, (q31_t)0x4c4771ae, (q31_t)0x4c4265e8, - (q31_t)0x4c3d59f3, (q31_t)0x4c384dd0, (q31_t)0x4c33417d, (q31_t)0x4c2e34fb, (q31_t)0x4c29284b, (q31_t)0x4c241b6b, (q31_t)0x4c1f0e5c, (q31_t)0x4c1a011f, - (q31_t)0x4c14f3b2, (q31_t)0x4c0fe617, (q31_t)0x4c0ad84c, (q31_t)0x4c05ca53, (q31_t)0x4c00bc2b, (q31_t)0x4bfbadd4, (q31_t)0x4bf69f4e, (q31_t)0x4bf19099, - (q31_t)0x4bec81b5, (q31_t)0x4be772a3, (q31_t)0x4be26362, (q31_t)0x4bdd53f2, (q31_t)0x4bd84453, (q31_t)0x4bd33485, (q31_t)0x4bce2488, (q31_t)0x4bc9145d, - (q31_t)0x4bc40403, (q31_t)0x4bbef37b, (q31_t)0x4bb9e2c3, (q31_t)0x4bb4d1dd, (q31_t)0x4bafc0c8, (q31_t)0x4baaaf85, (q31_t)0x4ba59e12, (q31_t)0x4ba08c72, - (q31_t)0x4b9b7aa2, (q31_t)0x4b9668a4, (q31_t)0x4b915677, (q31_t)0x4b8c441c, (q31_t)0x4b873192, (q31_t)0x4b821ed9, (q31_t)0x4b7d0bf2, (q31_t)0x4b77f8dc, - (q31_t)0x4b72e598, (q31_t)0x4b6dd225, (q31_t)0x4b68be84, (q31_t)0x4b63aab4, (q31_t)0x4b5e96b6, (q31_t)0x4b598289, (q31_t)0x4b546e2d, (q31_t)0x4b4f59a4, - (q31_t)0x4b4a44eb, (q31_t)0x4b453005, (q31_t)0x4b401aef, (q31_t)0x4b3b05ac, (q31_t)0x4b35f03a, (q31_t)0x4b30da9a, (q31_t)0x4b2bc4cb, (q31_t)0x4b26aece, - (q31_t)0x4b2198a2, (q31_t)0x4b1c8248, (q31_t)0x4b176bc0, (q31_t)0x4b12550a, (q31_t)0x4b0d3e25, (q31_t)0x4b082712, (q31_t)0x4b030fd1, (q31_t)0x4afdf861, - (q31_t)0x4af8e0c3, (q31_t)0x4af3c8f7, (q31_t)0x4aeeb0fd, (q31_t)0x4ae998d4, (q31_t)0x4ae4807d, (q31_t)0x4adf67f8, (q31_t)0x4ada4f45, (q31_t)0x4ad53664, - (q31_t)0x4ad01d54, (q31_t)0x4acb0417, (q31_t)0x4ac5eaab, (q31_t)0x4ac0d111, (q31_t)0x4abbb749, (q31_t)0x4ab69d53, (q31_t)0x4ab1832f, (q31_t)0x4aac68dc, - (q31_t)0x4aa74e5c, (q31_t)0x4aa233ae, (q31_t)0x4a9d18d1, (q31_t)0x4a97fdc7, (q31_t)0x4a92e28e, (q31_t)0x4a8dc728, (q31_t)0x4a88ab93, (q31_t)0x4a838fd1, - (q31_t)0x4a7e73e0, (q31_t)0x4a7957c2, (q31_t)0x4a743b76, (q31_t)0x4a6f1efc, (q31_t)0x4a6a0253, (q31_t)0x4a64e57d, (q31_t)0x4a5fc879, (q31_t)0x4a5aab48, - (q31_t)0x4a558de8, (q31_t)0x4a50705a, (q31_t)0x4a4b529f, (q31_t)0x4a4634b6, (q31_t)0x4a41169f, (q31_t)0x4a3bf85a, (q31_t)0x4a36d9e7, (q31_t)0x4a31bb47, - (q31_t)0x4a2c9c79, (q31_t)0x4a277d7d, (q31_t)0x4a225e53, (q31_t)0x4a1d3efc, (q31_t)0x4a181f77, (q31_t)0x4a12ffc4, (q31_t)0x4a0ddfe4, (q31_t)0x4a08bfd5, - (q31_t)0x4a039f9a, (q31_t)0x49fe7f30, (q31_t)0x49f95e99, (q31_t)0x49f43dd4, (q31_t)0x49ef1ce2, (q31_t)0x49e9fbc2, (q31_t)0x49e4da74, (q31_t)0x49dfb8f9, - (q31_t)0x49da9750, (q31_t)0x49d5757a, (q31_t)0x49d05376, (q31_t)0x49cb3145, (q31_t)0x49c60ee6, (q31_t)0x49c0ec59, (q31_t)0x49bbc9a0, (q31_t)0x49b6a6b8, - (q31_t)0x49b183a3, (q31_t)0x49ac6061, (q31_t)0x49a73cf1, (q31_t)0x49a21954, (q31_t)0x499cf589, (q31_t)0x4997d191, (q31_t)0x4992ad6c, (q31_t)0x498d8919, - (q31_t)0x49886499, (q31_t)0x49833fec, (q31_t)0x497e1b11, (q31_t)0x4978f609, (q31_t)0x4973d0d3, (q31_t)0x496eab70, (q31_t)0x496985e0, (q31_t)0x49646023, - (q31_t)0x495f3a38, (q31_t)0x495a1420, (q31_t)0x4954eddb, (q31_t)0x494fc768, (q31_t)0x494aa0c9, (q31_t)0x494579fc, (q31_t)0x49405302, (q31_t)0x493b2bdb, - (q31_t)0x49360486, (q31_t)0x4930dd05, (q31_t)0x492bb556, (q31_t)0x49268d7a, (q31_t)0x49216571, (q31_t)0x491c3d3b, (q31_t)0x491714d8, (q31_t)0x4911ec47, - (q31_t)0x490cc38a, (q31_t)0x49079aa0, (q31_t)0x49027188, (q31_t)0x48fd4844, (q31_t)0x48f81ed2, (q31_t)0x48f2f534, (q31_t)0x48edcb68, (q31_t)0x48e8a170, - (q31_t)0x48e3774a, (q31_t)0x48de4cf8, (q31_t)0x48d92278, (q31_t)0x48d3f7cc, (q31_t)0x48ceccf3, (q31_t)0x48c9a1ed, (q31_t)0x48c476b9, (q31_t)0x48bf4b59, - (q31_t)0x48ba1fcd, (q31_t)0x48b4f413, (q31_t)0x48afc82c, (q31_t)0x48aa9c19, (q31_t)0x48a56fd9, (q31_t)0x48a0436c, (q31_t)0x489b16d2, (q31_t)0x4895ea0b, - (q31_t)0x4890bd18, (q31_t)0x488b8ff8, (q31_t)0x488662ab, (q31_t)0x48813531, (q31_t)0x487c078b, (q31_t)0x4876d9b8, (q31_t)0x4871abb8, (q31_t)0x486c7d8c, - (q31_t)0x48674f33, (q31_t)0x486220ad, (q31_t)0x485cf1fa, (q31_t)0x4857c31b, (q31_t)0x48529410, (q31_t)0x484d64d7, (q31_t)0x48483572, (q31_t)0x484305e1, - (q31_t)0x483dd623, (q31_t)0x4838a638, (q31_t)0x48337621, (q31_t)0x482e45dd, (q31_t)0x4829156d, (q31_t)0x4823e4d0, (q31_t)0x481eb407, (q31_t)0x48198311, - (q31_t)0x481451ef, (q31_t)0x480f20a0, (q31_t)0x4809ef25, (q31_t)0x4804bd7e, (q31_t)0x47ff8baa, (q31_t)0x47fa59a9, (q31_t)0x47f5277d, (q31_t)0x47eff523, - (q31_t)0x47eac29e, (q31_t)0x47e58fec, (q31_t)0x47e05d0e, (q31_t)0x47db2a03, (q31_t)0x47d5f6cc, (q31_t)0x47d0c369, (q31_t)0x47cb8fd9, (q31_t)0x47c65c1d, - (q31_t)0x47c12835, (q31_t)0x47bbf421, (q31_t)0x47b6bfe0, (q31_t)0x47b18b74, (q31_t)0x47ac56da, (q31_t)0x47a72215, (q31_t)0x47a1ed24, (q31_t)0x479cb806, - (q31_t)0x479782bc, (q31_t)0x47924d46, (q31_t)0x478d17a4, (q31_t)0x4787e1d6, (q31_t)0x4782abdb, (q31_t)0x477d75b5, (q31_t)0x47783f62, (q31_t)0x477308e3, - (q31_t)0x476dd239, (q31_t)0x47689b62, (q31_t)0x4763645f, (q31_t)0x475e2d30, (q31_t)0x4758f5d5, (q31_t)0x4753be4e, (q31_t)0x474e869b, (q31_t)0x47494ebc, - (q31_t)0x474416b1, (q31_t)0x473ede7a, (q31_t)0x4739a617, (q31_t)0x47346d89, (q31_t)0x472f34ce, (q31_t)0x4729fbe7, (q31_t)0x4724c2d5, (q31_t)0x471f8996, - (q31_t)0x471a502c, (q31_t)0x47151696, (q31_t)0x470fdcd4, (q31_t)0x470aa2e6, (q31_t)0x470568cd, (q31_t)0x47002e87, (q31_t)0x46faf416, (q31_t)0x46f5b979, - (q31_t)0x46f07eb0, (q31_t)0x46eb43bc, (q31_t)0x46e6089b, (q31_t)0x46e0cd4f, (q31_t)0x46db91d8, (q31_t)0x46d65634, (q31_t)0x46d11a65, (q31_t)0x46cbde6a, - (q31_t)0x46c6a244, (q31_t)0x46c165f1, (q31_t)0x46bc2974, (q31_t)0x46b6ecca, (q31_t)0x46b1aff5, (q31_t)0x46ac72f4, (q31_t)0x46a735c8, (q31_t)0x46a1f870, - (q31_t)0x469cbaed, (q31_t)0x46977d3e, (q31_t)0x46923f63, (q31_t)0x468d015d, (q31_t)0x4687c32c, (q31_t)0x468284cf, (q31_t)0x467d4646, (q31_t)0x46780792, - (q31_t)0x4672c8b3, (q31_t)0x466d89a8, (q31_t)0x46684a71, (q31_t)0x46630b0f, (q31_t)0x465dcb82, (q31_t)0x46588bc9, (q31_t)0x46534be5, (q31_t)0x464e0bd6, - (q31_t)0x4648cb9b, (q31_t)0x46438b35, (q31_t)0x463e4aa3, (q31_t)0x463909e7, (q31_t)0x4633c8fe, (q31_t)0x462e87eb, (q31_t)0x462946ac, (q31_t)0x46240542, - (q31_t)0x461ec3ad, (q31_t)0x461981ec, (q31_t)0x46144001, (q31_t)0x460efde9, (q31_t)0x4609bba7, (q31_t)0x4604793a, (q31_t)0x45ff36a1, (q31_t)0x45f9f3dd, - (q31_t)0x45f4b0ee, (q31_t)0x45ef6dd4, (q31_t)0x45ea2a8f, (q31_t)0x45e4e71f, (q31_t)0x45dfa383, (q31_t)0x45da5fbc, (q31_t)0x45d51bcb, (q31_t)0x45cfd7ae, - (q31_t)0x45ca9366, (q31_t)0x45c54ef3, (q31_t)0x45c00a55, (q31_t)0x45bac58c, (q31_t)0x45b58098, (q31_t)0x45b03b79, (q31_t)0x45aaf630, (q31_t)0x45a5b0bb, - (q31_t)0x45a06b1b, (q31_t)0x459b2550, (q31_t)0x4595df5a, (q31_t)0x45909939, (q31_t)0x458b52ee, (q31_t)0x45860c77, (q31_t)0x4580c5d6, (q31_t)0x457b7f0a, - (q31_t)0x45763813, (q31_t)0x4570f0f1, (q31_t)0x456ba9a4, (q31_t)0x4566622c, (q31_t)0x45611a8a, (q31_t)0x455bd2bc, (q31_t)0x45568ac4, (q31_t)0x455142a2, - (q31_t)0x454bfa54, (q31_t)0x4546b1dc, (q31_t)0x45416939, (q31_t)0x453c206b, (q31_t)0x4536d773, (q31_t)0x45318e4f, (q31_t)0x452c4502, (q31_t)0x4526fb89, - (q31_t)0x4521b1e6, (q31_t)0x451c6818, (q31_t)0x45171e20, (q31_t)0x4511d3fd, (q31_t)0x450c89af, (q31_t)0x45073f37, (q31_t)0x4501f494, (q31_t)0x44fca9c6, - (q31_t)0x44f75ecf, (q31_t)0x44f213ac, (q31_t)0x44ecc85f, (q31_t)0x44e77ce7, (q31_t)0x44e23145, (q31_t)0x44dce579, (q31_t)0x44d79982, (q31_t)0x44d24d60, - (q31_t)0x44cd0114, (q31_t)0x44c7b49e, (q31_t)0x44c267fd, (q31_t)0x44bd1b32, (q31_t)0x44b7ce3c, (q31_t)0x44b2811c, (q31_t)0x44ad33d2, (q31_t)0x44a7e65d, - (q31_t)0x44a298be, (q31_t)0x449d4af5, (q31_t)0x4497fd01, (q31_t)0x4492aee3, (q31_t)0x448d609b, (q31_t)0x44881228, (q31_t)0x4482c38b, (q31_t)0x447d74c4, - (q31_t)0x447825d2, (q31_t)0x4472d6b7, (q31_t)0x446d8771, (q31_t)0x44683801, (q31_t)0x4462e866, (q31_t)0x445d98a2, (q31_t)0x445848b3, (q31_t)0x4452f89b, - (q31_t)0x444da858, (q31_t)0x444857ea, (q31_t)0x44430753, (q31_t)0x443db692, (q31_t)0x443865a7, (q31_t)0x44331491, (q31_t)0x442dc351, (q31_t)0x442871e8, - (q31_t)0x44232054, (q31_t)0x441dce96, (q31_t)0x44187caf, (q31_t)0x44132a9d, (q31_t)0x440dd861, (q31_t)0x440885fc, (q31_t)0x4403336c, (q31_t)0x43fde0b2, - (q31_t)0x43f88dcf, (q31_t)0x43f33ac1, (q31_t)0x43ede78a, (q31_t)0x43e89429, (q31_t)0x43e3409d, (q31_t)0x43ddece8, (q31_t)0x43d8990a, (q31_t)0x43d34501, - (q31_t)0x43cdf0ce, (q31_t)0x43c89c72, (q31_t)0x43c347eb, (q31_t)0x43bdf33b, (q31_t)0x43b89e62, (q31_t)0x43b3495e, (q31_t)0x43adf431, (q31_t)0x43a89ed9, - (q31_t)0x43a34959, (q31_t)0x439df3ae, (q31_t)0x43989dda, (q31_t)0x439347dc, (q31_t)0x438df1b4, (q31_t)0x43889b63, (q31_t)0x438344e8, (q31_t)0x437dee43, - (q31_t)0x43789775, (q31_t)0x4373407d, (q31_t)0x436de95b, (q31_t)0x43689210, (q31_t)0x43633a9c, (q31_t)0x435de2fd, (q31_t)0x43588b36, (q31_t)0x43533344, - (q31_t)0x434ddb29, (q31_t)0x434882e5, (q31_t)0x43432a77, (q31_t)0x433dd1e0, (q31_t)0x4338791f, (q31_t)0x43332035, (q31_t)0x432dc721, (q31_t)0x43286de4, - (q31_t)0x4323147d, (q31_t)0x431dbaed, (q31_t)0x43186133, (q31_t)0x43130751, (q31_t)0x430dad44, (q31_t)0x4308530f, (q31_t)0x4302f8b0, (q31_t)0x42fd9e28, - (q31_t)0x42f84376, (q31_t)0x42f2e89b, (q31_t)0x42ed8d97, (q31_t)0x42e83269, (q31_t)0x42e2d713, (q31_t)0x42dd7b93, (q31_t)0x42d81fe9, (q31_t)0x42d2c417, - (q31_t)0x42cd681b, (q31_t)0x42c80bf6, (q31_t)0x42c2afa8, (q31_t)0x42bd5331, (q31_t)0x42b7f690, (q31_t)0x42b299c7, (q31_t)0x42ad3cd4, (q31_t)0x42a7dfb8, - (q31_t)0x42a28273, (q31_t)0x429d2505, (q31_t)0x4297c76e, (q31_t)0x429269ae, (q31_t)0x428d0bc4, (q31_t)0x4287adb2, (q31_t)0x42824f76, (q31_t)0x427cf112, - (q31_t)0x42779285, (q31_t)0x427233ce, (q31_t)0x426cd4ef, (q31_t)0x426775e6, (q31_t)0x426216b5, (q31_t)0x425cb75a, (q31_t)0x425757d7, (q31_t)0x4251f82b, - (q31_t)0x424c9856, (q31_t)0x42473858, (q31_t)0x4241d831, (q31_t)0x423c77e1, (q31_t)0x42371769, (q31_t)0x4231b6c7, (q31_t)0x422c55fd, (q31_t)0x4226f50a, - (q31_t)0x422193ee, (q31_t)0x421c32a9, (q31_t)0x4216d13c, (q31_t)0x42116fa5, (q31_t)0x420c0de6, (q31_t)0x4206abfe, (q31_t)0x420149ee, (q31_t)0x41fbe7b5, - (q31_t)0x41f68553, (q31_t)0x41f122c8, (q31_t)0x41ebc015, (q31_t)0x41e65d39, (q31_t)0x41e0fa35, (q31_t)0x41db9707, (q31_t)0x41d633b1, (q31_t)0x41d0d033, - (q31_t)0x41cb6c8c, (q31_t)0x41c608bc, (q31_t)0x41c0a4c4, (q31_t)0x41bb40a3, (q31_t)0x41b5dc5a, (q31_t)0x41b077e8, (q31_t)0x41ab134e, (q31_t)0x41a5ae8b, - (q31_t)0x41a049a0, (q31_t)0x419ae48c, (q31_t)0x41957f4f, (q31_t)0x419019eb, (q31_t)0x418ab45d, (q31_t)0x41854ea8, (q31_t)0x417fe8ca, (q31_t)0x417a82c3, - (q31_t)0x41751c94, (q31_t)0x416fb63d, (q31_t)0x416a4fbd, (q31_t)0x4164e916, (q31_t)0x415f8245, (q31_t)0x415a1b4d, (q31_t)0x4154b42c, (q31_t)0x414f4ce2, - (q31_t)0x4149e571, (q31_t)0x41447dd7, (q31_t)0x413f1615, (q31_t)0x4139ae2b, (q31_t)0x41344618, (q31_t)0x412edddd, (q31_t)0x4129757b, (q31_t)0x41240cef, - (q31_t)0x411ea43c, (q31_t)0x41193b61, (q31_t)0x4113d25d, (q31_t)0x410e6931, (q31_t)0x4108ffdd, (q31_t)0x41039661, (q31_t)0x40fe2cbd, (q31_t)0x40f8c2f1, - (q31_t)0x40f358fc, (q31_t)0x40edeee0, (q31_t)0x40e8849b, (q31_t)0x40e31a2f, (q31_t)0x40ddaf9b, (q31_t)0x40d844de, (q31_t)0x40d2d9f9, (q31_t)0x40cd6eed, - (q31_t)0x40c803b8, (q31_t)0x40c2985c, (q31_t)0x40bd2cd8, (q31_t)0x40b7c12b, (q31_t)0x40b25557, (q31_t)0x40ace95b, (q31_t)0x40a77d37, (q31_t)0x40a210eb, - (q31_t)0x409ca477, (q31_t)0x409737dc, (q31_t)0x4091cb18, (q31_t)0x408c5e2d, (q31_t)0x4086f11a, (q31_t)0x408183df, (q31_t)0x407c167c, (q31_t)0x4076a8f1, - (q31_t)0x40713b3f, (q31_t)0x406bcd65, (q31_t)0x40665f63, (q31_t)0x4060f13a, (q31_t)0x405b82e9, (q31_t)0x40561470, (q31_t)0x4050a5cf, (q31_t)0x404b3707, - (q31_t)0x4045c817, (q31_t)0x404058ff, (q31_t)0x403ae9c0, (q31_t)0x40357a59, (q31_t)0x40300acb, (q31_t)0x402a9b15, (q31_t)0x40252b37, (q31_t)0x401fbb32, - (q31_t)0x401a4b05, (q31_t)0x4014dab1, (q31_t)0x400f6a35, (q31_t)0x4009f992, (q31_t)0x400488c7, (q31_t)0x3fff17d5, (q31_t)0x3ff9a6bb, (q31_t)0x3ff4357a, - (q31_t)0x3feec411, (q31_t)0x3fe95281, (q31_t)0x3fe3e0c9, (q31_t)0x3fde6eeb, (q31_t)0x3fd8fce4, (q31_t)0x3fd38ab6, (q31_t)0x3fce1861, (q31_t)0x3fc8a5e5, - (q31_t)0x3fc33341, (q31_t)0x3fbdc076, (q31_t)0x3fb84d83, (q31_t)0x3fb2da6a, (q31_t)0x3fad6729, (q31_t)0x3fa7f3c0, (q31_t)0x3fa28031, (q31_t)0x3f9d0c7a, - (q31_t)0x3f97989c, (q31_t)0x3f922496, (q31_t)0x3f8cb06a, (q31_t)0x3f873c16, (q31_t)0x3f81c79b, (q31_t)0x3f7c52f9, (q31_t)0x3f76de30, (q31_t)0x3f71693f, - (q31_t)0x3f6bf428, (q31_t)0x3f667ee9, (q31_t)0x3f610983, (q31_t)0x3f5b93f6, (q31_t)0x3f561e42, (q31_t)0x3f50a867, (q31_t)0x3f4b3265, (q31_t)0x3f45bc3c, - (q31_t)0x3f4045ec, (q31_t)0x3f3acf75, (q31_t)0x3f3558d7, (q31_t)0x3f2fe211, (q31_t)0x3f2a6b25, (q31_t)0x3f24f412, (q31_t)0x3f1f7cd8, (q31_t)0x3f1a0577, - (q31_t)0x3f148def, (q31_t)0x3f0f1640, (q31_t)0x3f099e6b, (q31_t)0x3f04266e, (q31_t)0x3efeae4a, (q31_t)0x3ef93600, (q31_t)0x3ef3bd8f, (q31_t)0x3eee44f7, - (q31_t)0x3ee8cc38, (q31_t)0x3ee35352, (q31_t)0x3eddda46, (q31_t)0x3ed86113, (q31_t)0x3ed2e7b9, (q31_t)0x3ecd6e38, (q31_t)0x3ec7f491, (q31_t)0x3ec27ac2, - (q31_t)0x3ebd00cd, (q31_t)0x3eb786b2, (q31_t)0x3eb20c6f, (q31_t)0x3eac9206, (q31_t)0x3ea71777, (q31_t)0x3ea19cc1, (q31_t)0x3e9c21e4, (q31_t)0x3e96a6e0, - (q31_t)0x3e912bb6, (q31_t)0x3e8bb065, (q31_t)0x3e8634ee, (q31_t)0x3e80b950, (q31_t)0x3e7b3d8c, (q31_t)0x3e75c1a1, (q31_t)0x3e70458f, (q31_t)0x3e6ac957, - (q31_t)0x3e654cf8, (q31_t)0x3e5fd073, (q31_t)0x3e5a53c8, (q31_t)0x3e54d6f6, (q31_t)0x3e4f59fe, (q31_t)0x3e49dcdf, (q31_t)0x3e445f99, (q31_t)0x3e3ee22e, - (q31_t)0x3e39649c, (q31_t)0x3e33e6e3, (q31_t)0x3e2e6904, (q31_t)0x3e28eaff, (q31_t)0x3e236cd4, (q31_t)0x3e1dee82, (q31_t)0x3e18700a, (q31_t)0x3e12f16b, - (q31_t)0x3e0d72a6, (q31_t)0x3e07f3bb, (q31_t)0x3e0274aa, (q31_t)0x3dfcf572, (q31_t)0x3df77615, (q31_t)0x3df1f691, (q31_t)0x3dec76e6, (q31_t)0x3de6f716, - (q31_t)0x3de1771f, (q31_t)0x3ddbf703, (q31_t)0x3dd676c0, (q31_t)0x3dd0f656, (q31_t)0x3dcb75c7, (q31_t)0x3dc5f512, (q31_t)0x3dc07436, (q31_t)0x3dbaf335, - (q31_t)0x3db5720d, (q31_t)0x3daff0c0, (q31_t)0x3daa6f4c, (q31_t)0x3da4edb2, (q31_t)0x3d9f6bf2, (q31_t)0x3d99ea0d, (q31_t)0x3d946801, (q31_t)0x3d8ee5cf, - (q31_t)0x3d896377, (q31_t)0x3d83e0f9, (q31_t)0x3d7e5e56, (q31_t)0x3d78db8c, (q31_t)0x3d73589d, (q31_t)0x3d6dd587, (q31_t)0x3d68524c, (q31_t)0x3d62ceeb, - (q31_t)0x3d5d4b64, (q31_t)0x3d57c7b7, (q31_t)0x3d5243e4, (q31_t)0x3d4cbfeb, (q31_t)0x3d473bcd, (q31_t)0x3d41b789, (q31_t)0x3d3c331f, (q31_t)0x3d36ae8f, - (q31_t)0x3d3129da, (q31_t)0x3d2ba4fe, (q31_t)0x3d261ffd, (q31_t)0x3d209ad7, (q31_t)0x3d1b158a, (q31_t)0x3d159018, (q31_t)0x3d100a80, (q31_t)0x3d0a84c3, - (q31_t)0x3d04fee0, (q31_t)0x3cff78d7, (q31_t)0x3cf9f2a9, (q31_t)0x3cf46c55, (q31_t)0x3ceee5db, (q31_t)0x3ce95f3c, (q31_t)0x3ce3d877, (q31_t)0x3cde518d, - (q31_t)0x3cd8ca7d, (q31_t)0x3cd34347, (q31_t)0x3ccdbbed, (q31_t)0x3cc8346c, (q31_t)0x3cc2acc6, (q31_t)0x3cbd24fb, (q31_t)0x3cb79d0a, (q31_t)0x3cb214f4, - (q31_t)0x3cac8cb8, (q31_t)0x3ca70457, (q31_t)0x3ca17bd0, (q31_t)0x3c9bf324, (q31_t)0x3c966a53, (q31_t)0x3c90e15c, (q31_t)0x3c8b5840, (q31_t)0x3c85cefe, - (q31_t)0x3c804598, (q31_t)0x3c7abc0c, (q31_t)0x3c75325a, (q31_t)0x3c6fa883, (q31_t)0x3c6a1e87, (q31_t)0x3c649466, (q31_t)0x3c5f0a20, (q31_t)0x3c597fb4, - (q31_t)0x3c53f523, (q31_t)0x3c4e6a6d, (q31_t)0x3c48df91, (q31_t)0x3c435491, (q31_t)0x3c3dc96b, (q31_t)0x3c383e20, (q31_t)0x3c32b2b0, (q31_t)0x3c2d271b, - (q31_t)0x3c279b61, (q31_t)0x3c220f81, (q31_t)0x3c1c837d, (q31_t)0x3c16f753, (q31_t)0x3c116b04, (q31_t)0x3c0bde91, (q31_t)0x3c0651f8, (q31_t)0x3c00c53a, - (q31_t)0x3bfb3857, (q31_t)0x3bf5ab50, (q31_t)0x3bf01e23, (q31_t)0x3bea90d1, (q31_t)0x3be5035a, (q31_t)0x3bdf75bf, (q31_t)0x3bd9e7fe, (q31_t)0x3bd45a19, - (q31_t)0x3bcecc0e, (q31_t)0x3bc93ddf, (q31_t)0x3bc3af8b, (q31_t)0x3bbe2112, (q31_t)0x3bb89274, (q31_t)0x3bb303b1, (q31_t)0x3bad74c9, (q31_t)0x3ba7e5bd, - (q31_t)0x3ba2568c, (q31_t)0x3b9cc736, (q31_t)0x3b9737bb, (q31_t)0x3b91a81c, (q31_t)0x3b8c1857, (q31_t)0x3b86886e, (q31_t)0x3b80f861, (q31_t)0x3b7b682e, - (q31_t)0x3b75d7d7, (q31_t)0x3b70475c, (q31_t)0x3b6ab6bb, (q31_t)0x3b6525f6, (q31_t)0x3b5f950c, (q31_t)0x3b5a03fe, (q31_t)0x3b5472cb, (q31_t)0x3b4ee173, - (q31_t)0x3b494ff7, (q31_t)0x3b43be57, (q31_t)0x3b3e2c91, (q31_t)0x3b389aa8, (q31_t)0x3b330899, (q31_t)0x3b2d7666, (q31_t)0x3b27e40f, (q31_t)0x3b225193, - (q31_t)0x3b1cbef3, (q31_t)0x3b172c2e, (q31_t)0x3b119945, (q31_t)0x3b0c0637, (q31_t)0x3b067305, (q31_t)0x3b00dfaf, (q31_t)0x3afb4c34, (q31_t)0x3af5b894, - (q31_t)0x3af024d1, (q31_t)0x3aea90e9, (q31_t)0x3ae4fcdc, (q31_t)0x3adf68ac, (q31_t)0x3ad9d457, (q31_t)0x3ad43fdd, (q31_t)0x3aceab40, (q31_t)0x3ac9167e, - (q31_t)0x3ac38198, (q31_t)0x3abdec8d, (q31_t)0x3ab8575f, (q31_t)0x3ab2c20c, (q31_t)0x3aad2c95, (q31_t)0x3aa796fa, (q31_t)0x3aa2013a, (q31_t)0x3a9c6b57, - (q31_t)0x3a96d54f, (q31_t)0x3a913f23, (q31_t)0x3a8ba8d3, (q31_t)0x3a86125f, (q31_t)0x3a807bc7, (q31_t)0x3a7ae50a, (q31_t)0x3a754e2a, (q31_t)0x3a6fb726, - (q31_t)0x3a6a1ffd, (q31_t)0x3a6488b1, (q31_t)0x3a5ef140, (q31_t)0x3a5959ab, (q31_t)0x3a53c1f3, (q31_t)0x3a4e2a16, (q31_t)0x3a489216, (q31_t)0x3a42f9f2, - (q31_t)0x3a3d61a9, (q31_t)0x3a37c93d, (q31_t)0x3a3230ad, (q31_t)0x3a2c97f9, (q31_t)0x3a26ff21, (q31_t)0x3a216625, (q31_t)0x3a1bcd05, (q31_t)0x3a1633c1, - (q31_t)0x3a109a5a, (q31_t)0x3a0b00cf, (q31_t)0x3a056720, (q31_t)0x39ffcd4d, (q31_t)0x39fa3356, (q31_t)0x39f4993c, (q31_t)0x39eefefe, (q31_t)0x39e9649c, - (q31_t)0x39e3ca17, (q31_t)0x39de2f6d, (q31_t)0x39d894a0, (q31_t)0x39d2f9b0, (q31_t)0x39cd5e9b, (q31_t)0x39c7c363, (q31_t)0x39c22808, (q31_t)0x39bc8c89, - (q31_t)0x39b6f0e6, (q31_t)0x39b1551f, (q31_t)0x39abb935, (q31_t)0x39a61d28, (q31_t)0x39a080f6, (q31_t)0x399ae4a2, (q31_t)0x39954829, (q31_t)0x398fab8e, - (q31_t)0x398a0ece, (q31_t)0x398471ec, (q31_t)0x397ed4e5, (q31_t)0x397937bc, (q31_t)0x39739a6e, (q31_t)0x396dfcfe, (q31_t)0x39685f6a, (q31_t)0x3962c1b2, - (q31_t)0x395d23d7, (q31_t)0x395785d9, (q31_t)0x3951e7b8, (q31_t)0x394c4973, (q31_t)0x3946ab0a, (q31_t)0x39410c7f, (q31_t)0x393b6dd0, (q31_t)0x3935cefd, - (q31_t)0x39303008, (q31_t)0x392a90ef, (q31_t)0x3924f1b3, (q31_t)0x391f5254, (q31_t)0x3919b2d1, (q31_t)0x3914132b, (q31_t)0x390e7362, (q31_t)0x3908d376, - (q31_t)0x39033367, (q31_t)0x38fd9334, (q31_t)0x38f7f2de, (q31_t)0x38f25266, (q31_t)0x38ecb1ca, (q31_t)0x38e7110a, (q31_t)0x38e17028, (q31_t)0x38dbcf23, - (q31_t)0x38d62dfb, (q31_t)0x38d08caf, (q31_t)0x38caeb41, (q31_t)0x38c549af, (q31_t)0x38bfa7fb, (q31_t)0x38ba0623, (q31_t)0x38b46429, (q31_t)0x38aec20b, - (q31_t)0x38a91fcb, (q31_t)0x38a37d67, (q31_t)0x389ddae1, (q31_t)0x38983838, (q31_t)0x3892956c, (q31_t)0x388cf27d, (q31_t)0x38874f6b, (q31_t)0x3881ac36, - (q31_t)0x387c08de, (q31_t)0x38766564, (q31_t)0x3870c1c6, (q31_t)0x386b1e06, (q31_t)0x38657a23, (q31_t)0x385fd61d, (q31_t)0x385a31f5, (q31_t)0x38548daa, - (q31_t)0x384ee93b, (q31_t)0x384944ab, (q31_t)0x38439ff7, (q31_t)0x383dfb21, (q31_t)0x38385628, (q31_t)0x3832b10d, (q31_t)0x382d0bce, (q31_t)0x3827666d, - (q31_t)0x3821c0ea, (q31_t)0x381c1b44, (q31_t)0x3816757b, (q31_t)0x3810cf90, (q31_t)0x380b2982, (q31_t)0x38058351, (q31_t)0x37ffdcfe, (q31_t)0x37fa3688, - (q31_t)0x37f48ff0, (q31_t)0x37eee936, (q31_t)0x37e94259, (q31_t)0x37e39b59, (q31_t)0x37ddf437, (q31_t)0x37d84cf2, (q31_t)0x37d2a58b, (q31_t)0x37ccfe02, - (q31_t)0x37c75656, (q31_t)0x37c1ae87, (q31_t)0x37bc0697, (q31_t)0x37b65e84, (q31_t)0x37b0b64e, (q31_t)0x37ab0df6, (q31_t)0x37a5657c, (q31_t)0x379fbce0, - (q31_t)0x379a1421, (q31_t)0x37946b40, (q31_t)0x378ec23d, (q31_t)0x37891917, (q31_t)0x37836fcf, (q31_t)0x377dc665, (q31_t)0x37781cd9, (q31_t)0x3772732a, - (q31_t)0x376cc959, (q31_t)0x37671f66, (q31_t)0x37617551, (q31_t)0x375bcb1a, (q31_t)0x375620c1, (q31_t)0x37507645, (q31_t)0x374acba7, (q31_t)0x374520e7, - (q31_t)0x373f7606, (q31_t)0x3739cb02, (q31_t)0x37341fdc, (q31_t)0x372e7493, (q31_t)0x3728c929, (q31_t)0x37231d9d, (q31_t)0x371d71ef, (q31_t)0x3717c61f, - (q31_t)0x37121a2d, (q31_t)0x370c6e19, (q31_t)0x3706c1e2, (q31_t)0x3701158a, (q31_t)0x36fb6910, (q31_t)0x36f5bc75, (q31_t)0x36f00fb7, (q31_t)0x36ea62d7, - (q31_t)0x36e4b5d6, (q31_t)0x36df08b2, (q31_t)0x36d95b6d, (q31_t)0x36d3ae06, (q31_t)0x36ce007d, (q31_t)0x36c852d2, (q31_t)0x36c2a506, (q31_t)0x36bcf718, - (q31_t)0x36b74908, (q31_t)0x36b19ad6, (q31_t)0x36abec82, (q31_t)0x36a63e0d, (q31_t)0x36a08f76, (q31_t)0x369ae0bd, (q31_t)0x369531e3, (q31_t)0x368f82e7, - (q31_t)0x3689d3c9, (q31_t)0x3684248a, (q31_t)0x367e7529, (q31_t)0x3678c5a7, (q31_t)0x36731602, (q31_t)0x366d663d, (q31_t)0x3667b655, (q31_t)0x3662064c, - (q31_t)0x365c5622, (q31_t)0x3656a5d6, (q31_t)0x3650f569, (q31_t)0x364b44da, (q31_t)0x36459429, (q31_t)0x363fe357, (q31_t)0x363a3264, (q31_t)0x3634814f, - (q31_t)0x362ed019, (q31_t)0x36291ec1, (q31_t)0x36236d48, (q31_t)0x361dbbad, (q31_t)0x361809f1, (q31_t)0x36125814, (q31_t)0x360ca615, (q31_t)0x3606f3f5, - (q31_t)0x360141b4, (q31_t)0x35fb8f52, (q31_t)0x35f5dcce, (q31_t)0x35f02a28, (q31_t)0x35ea7762, (q31_t)0x35e4c47a, (q31_t)0x35df1171, (q31_t)0x35d95e47, - (q31_t)0x35d3aafc, (q31_t)0x35cdf78f, (q31_t)0x35c84401, (q31_t)0x35c29052, (q31_t)0x35bcdc82, (q31_t)0x35b72891, (q31_t)0x35b1747e, (q31_t)0x35abc04b, - (q31_t)0x35a60bf6, (q31_t)0x35a05781, (q31_t)0x359aa2ea, (q31_t)0x3594ee32, (q31_t)0x358f3959, (q31_t)0x3589845f, (q31_t)0x3583cf44, (q31_t)0x357e1a08, - (q31_t)0x357864ab, (q31_t)0x3572af2d, (q31_t)0x356cf98e, (q31_t)0x356743ce, (q31_t)0x35618ded, (q31_t)0x355bd7eb, (q31_t)0x355621c9, (q31_t)0x35506b85, - (q31_t)0x354ab520, (q31_t)0x3544fe9b, (q31_t)0x353f47f5, (q31_t)0x3539912e, (q31_t)0x3533da46, (q31_t)0x352e233d, (q31_t)0x35286c14, (q31_t)0x3522b4c9, - (q31_t)0x351cfd5e, (q31_t)0x351745d2, (q31_t)0x35118e26, (q31_t)0x350bd658, (q31_t)0x35061e6a, (q31_t)0x3500665c, (q31_t)0x34faae2c, (q31_t)0x34f4f5dc, - (q31_t)0x34ef3d6b, (q31_t)0x34e984da, (q31_t)0x34e3cc28, (q31_t)0x34de1355, (q31_t)0x34d85a62, (q31_t)0x34d2a14e, (q31_t)0x34cce819, (q31_t)0x34c72ec4, - (q31_t)0x34c1754e, (q31_t)0x34bbbbb8, (q31_t)0x34b60202, (q31_t)0x34b0482a, (q31_t)0x34aa8e33, (q31_t)0x34a4d41a, (q31_t)0x349f19e2, (q31_t)0x34995f88, - (q31_t)0x3493a50f, (q31_t)0x348dea75, (q31_t)0x34882fba, (q31_t)0x348274e0, (q31_t)0x347cb9e4, (q31_t)0x3476fec9, (q31_t)0x3471438d, (q31_t)0x346b8830, - (q31_t)0x3465ccb4, (q31_t)0x34601117, (q31_t)0x345a5559, (q31_t)0x3454997c, (q31_t)0x344edd7e, (q31_t)0x34492160, (q31_t)0x34436521, (q31_t)0x343da8c3, - (q31_t)0x3437ec44, (q31_t)0x34322fa5, (q31_t)0x342c72e6, (q31_t)0x3426b606, (q31_t)0x3420f907, (q31_t)0x341b3be7, (q31_t)0x34157ea7, (q31_t)0x340fc147, - (q31_t)0x340a03c7, (q31_t)0x34044626, (q31_t)0x33fe8866, (q31_t)0x33f8ca86, (q31_t)0x33f30c85, (q31_t)0x33ed4e65, (q31_t)0x33e79024, (q31_t)0x33e1d1c4, - (q31_t)0x33dc1343, (q31_t)0x33d654a2, (q31_t)0x33d095e2, (q31_t)0x33cad701, (q31_t)0x33c51801, (q31_t)0x33bf58e1, (q31_t)0x33b999a0, (q31_t)0x33b3da40, - (q31_t)0x33ae1ac0, (q31_t)0x33a85b20, (q31_t)0x33a29b60, (q31_t)0x339cdb81, (q31_t)0x33971b81, (q31_t)0x33915b62, (q31_t)0x338b9b22, (q31_t)0x3385dac4, - (q31_t)0x33801a45, (q31_t)0x337a59a6, (q31_t)0x337498e8, (q31_t)0x336ed80a, (q31_t)0x3369170c, (q31_t)0x336355ef, (q31_t)0x335d94b2, (q31_t)0x3357d355, - (q31_t)0x335211d8, (q31_t)0x334c503c, (q31_t)0x33468e80, (q31_t)0x3340cca5, (q31_t)0x333b0aaa, (q31_t)0x3335488f, (q31_t)0x332f8655, (q31_t)0x3329c3fb, - (q31_t)0x33240182, (q31_t)0x331e3ee9, (q31_t)0x33187c31, (q31_t)0x3312b959, (q31_t)0x330cf661, (q31_t)0x3307334a, (q31_t)0x33017014, (q31_t)0x32fbacbe, - (q31_t)0x32f5e948, (q31_t)0x32f025b4, (q31_t)0x32ea61ff, (q31_t)0x32e49e2c, (q31_t)0x32deda39, (q31_t)0x32d91626, (q31_t)0x32d351f5, (q31_t)0x32cd8da4, - (q31_t)0x32c7c933, (q31_t)0x32c204a3, (q31_t)0x32bc3ff4, (q31_t)0x32b67b26, (q31_t)0x32b0b638, (q31_t)0x32aaf12b, (q31_t)0x32a52bff, (q31_t)0x329f66b4, - (q31_t)0x3299a149, (q31_t)0x3293dbbf, (q31_t)0x328e1616, (q31_t)0x3288504e, (q31_t)0x32828a67, (q31_t)0x327cc460, (q31_t)0x3276fe3a, (q31_t)0x327137f6, - (q31_t)0x326b7192, (q31_t)0x3265ab0f, (q31_t)0x325fe46c, (q31_t)0x325a1dab, (q31_t)0x325456cb, (q31_t)0x324e8fcc, (q31_t)0x3248c8ad, (q31_t)0x32430170, - (q31_t)0x323d3a14, (q31_t)0x32377298, (q31_t)0x3231aafe, (q31_t)0x322be345, (q31_t)0x32261b6c, (q31_t)0x32205375, (q31_t)0x321a8b5f, (q31_t)0x3214c32a, - (q31_t)0x320efad6, (q31_t)0x32093263, (q31_t)0x320369d2, (q31_t)0x31fda121, (q31_t)0x31f7d852, (q31_t)0x31f20f64, (q31_t)0x31ec4657, (q31_t)0x31e67d2b, - (q31_t)0x31e0b3e0, (q31_t)0x31daea77, (q31_t)0x31d520ef, (q31_t)0x31cf5748, (q31_t)0x31c98d83, (q31_t)0x31c3c39e, (q31_t)0x31bdf99b, (q31_t)0x31b82f7a, - (q31_t)0x31b2653a, (q31_t)0x31ac9adb, (q31_t)0x31a6d05d, (q31_t)0x31a105c1, (q31_t)0x319b3b06, (q31_t)0x3195702d, (q31_t)0x318fa535, (q31_t)0x3189da1e, - (q31_t)0x31840ee9, (q31_t)0x317e4395, (q31_t)0x31787823, (q31_t)0x3172ac92, (q31_t)0x316ce0e3, (q31_t)0x31671515, (q31_t)0x31614929, (q31_t)0x315b7d1e, - (q31_t)0x3155b0f5, (q31_t)0x314fe4ae, (q31_t)0x314a1848, (q31_t)0x31444bc3, (q31_t)0x313e7f21, (q31_t)0x3138b260, (q31_t)0x3132e580, (q31_t)0x312d1882, - (q31_t)0x31274b66, (q31_t)0x31217e2c, (q31_t)0x311bb0d3, (q31_t)0x3115e35c, (q31_t)0x311015c6, (q31_t)0x310a4813, (q31_t)0x31047a41, (q31_t)0x30feac51, - (q31_t)0x30f8de42, (q31_t)0x30f31016, (q31_t)0x30ed41cb, (q31_t)0x30e77362, (q31_t)0x30e1a4db, (q31_t)0x30dbd636, (q31_t)0x30d60772, (q31_t)0x30d03891, - (q31_t)0x30ca6991, (q31_t)0x30c49a74, (q31_t)0x30becb38, (q31_t)0x30b8fbde, (q31_t)0x30b32c66, (q31_t)0x30ad5cd0, (q31_t)0x30a78d1c, (q31_t)0x30a1bd4a, - (q31_t)0x309bed5a, (q31_t)0x30961d4c, (q31_t)0x30904d20, (q31_t)0x308a7cd6, (q31_t)0x3084ac6e, (q31_t)0x307edbe9, (q31_t)0x30790b45, (q31_t)0x30733a83, - (q31_t)0x306d69a4, (q31_t)0x306798a7, (q31_t)0x3061c78b, (q31_t)0x305bf652, (q31_t)0x305624fb, (q31_t)0x30505387, (q31_t)0x304a81f4, (q31_t)0x3044b044, - (q31_t)0x303ede76, (q31_t)0x30390c8a, (q31_t)0x30333a80, (q31_t)0x302d6859, (q31_t)0x30279614, (q31_t)0x3021c3b1, (q31_t)0x301bf131, (q31_t)0x30161e93, - (q31_t)0x30104bd7, (q31_t)0x300a78fe, (q31_t)0x3004a607, (q31_t)0x2ffed2f2, (q31_t)0x2ff8ffc0, (q31_t)0x2ff32c70, (q31_t)0x2fed5902, (q31_t)0x2fe78577, - (q31_t)0x2fe1b1cf, (q31_t)0x2fdbde09, (q31_t)0x2fd60a25, (q31_t)0x2fd03624, (q31_t)0x2fca6206, (q31_t)0x2fc48dc9, (q31_t)0x2fbeb970, (q31_t)0x2fb8e4f9, - (q31_t)0x2fb31064, (q31_t)0x2fad3bb3, (q31_t)0x2fa766e3, (q31_t)0x2fa191f7, (q31_t)0x2f9bbced, (q31_t)0x2f95e7c5, (q31_t)0x2f901280, (q31_t)0x2f8a3d1e, - (q31_t)0x2f84679f, (q31_t)0x2f7e9202, (q31_t)0x2f78bc48, (q31_t)0x2f72e671, (q31_t)0x2f6d107c, (q31_t)0x2f673a6a, (q31_t)0x2f61643b, (q31_t)0x2f5b8def, - (q31_t)0x2f55b785, (q31_t)0x2f4fe0ff, (q31_t)0x2f4a0a5b, (q31_t)0x2f44339a, (q31_t)0x2f3e5cbb, (q31_t)0x2f3885c0, (q31_t)0x2f32aea8, (q31_t)0x2f2cd772, - (q31_t)0x2f27001f, (q31_t)0x2f2128af, (q31_t)0x2f1b5122, (q31_t)0x2f157979, (q31_t)0x2f0fa1b2, (q31_t)0x2f09c9ce, (q31_t)0x2f03f1cd, (q31_t)0x2efe19ae, - (q31_t)0x2ef84173, (q31_t)0x2ef2691b, (q31_t)0x2eec90a7, (q31_t)0x2ee6b815, (q31_t)0x2ee0df66, (q31_t)0x2edb069a, (q31_t)0x2ed52db1, (q31_t)0x2ecf54ac, - (q31_t)0x2ec97b89, (q31_t)0x2ec3a24a, (q31_t)0x2ebdc8ee, (q31_t)0x2eb7ef75, (q31_t)0x2eb215df, (q31_t)0x2eac3c2d, (q31_t)0x2ea6625d, (q31_t)0x2ea08871, - (q31_t)0x2e9aae68, (q31_t)0x2e94d443, (q31_t)0x2e8efa00, (q31_t)0x2e891fa1, (q31_t)0x2e834525, (q31_t)0x2e7d6a8d, (q31_t)0x2e778fd8, (q31_t)0x2e71b506, - (q31_t)0x2e6bda17, (q31_t)0x2e65ff0c, (q31_t)0x2e6023e5, (q31_t)0x2e5a48a0, (q31_t)0x2e546d3f, (q31_t)0x2e4e91c2, (q31_t)0x2e48b628, (q31_t)0x2e42da71, - (q31_t)0x2e3cfe9e, (q31_t)0x2e3722ae, (q31_t)0x2e3146a2, (q31_t)0x2e2b6a79, (q31_t)0x2e258e34, (q31_t)0x2e1fb1d3, (q31_t)0x2e19d554, (q31_t)0x2e13f8ba, - (q31_t)0x2e0e1c03, (q31_t)0x2e083f30, (q31_t)0x2e026240, (q31_t)0x2dfc8534, (q31_t)0x2df6a80b, (q31_t)0x2df0cac6, (q31_t)0x2deaed65, (q31_t)0x2de50fe8, - (q31_t)0x2ddf324e, (q31_t)0x2dd95498, (q31_t)0x2dd376c5, (q31_t)0x2dcd98d7, (q31_t)0x2dc7bacc, (q31_t)0x2dc1dca4, (q31_t)0x2dbbfe61, (q31_t)0x2db62001, - (q31_t)0x2db04186, (q31_t)0x2daa62ee, (q31_t)0x2da4843a, (q31_t)0x2d9ea569, (q31_t)0x2d98c67d, (q31_t)0x2d92e774, (q31_t)0x2d8d084f, (q31_t)0x2d87290f, - (q31_t)0x2d8149b2, (q31_t)0x2d7b6a39, (q31_t)0x2d758aa4, (q31_t)0x2d6faaf3, (q31_t)0x2d69cb26, (q31_t)0x2d63eb3d, (q31_t)0x2d5e0b38, (q31_t)0x2d582b17, - (q31_t)0x2d524ada, (q31_t)0x2d4c6a81, (q31_t)0x2d468a0c, (q31_t)0x2d40a97b, (q31_t)0x2d3ac8ce, (q31_t)0x2d34e805, (q31_t)0x2d2f0721, (q31_t)0x2d292620, - (q31_t)0x2d234504, (q31_t)0x2d1d63cc, (q31_t)0x2d178278, (q31_t)0x2d11a108, (q31_t)0x2d0bbf7d, (q31_t)0x2d05ddd5, (q31_t)0x2cfffc12, (q31_t)0x2cfa1a33, - (q31_t)0x2cf43839, (q31_t)0x2cee5622, (q31_t)0x2ce873f0, (q31_t)0x2ce291a2, (q31_t)0x2cdcaf39, (q31_t)0x2cd6ccb4, (q31_t)0x2cd0ea13, (q31_t)0x2ccb0756, - (q31_t)0x2cc5247e, (q31_t)0x2cbf418b, (q31_t)0x2cb95e7b, (q31_t)0x2cb37b51, (q31_t)0x2cad980a, (q31_t)0x2ca7b4a8, (q31_t)0x2ca1d12a, (q31_t)0x2c9bed91, - (q31_t)0x2c9609dd, (q31_t)0x2c90260d, (q31_t)0x2c8a4221, (q31_t)0x2c845e1a, (q31_t)0x2c7e79f7, (q31_t)0x2c7895b9, (q31_t)0x2c72b160, (q31_t)0x2c6ccceb, - (q31_t)0x2c66e85b, (q31_t)0x2c6103af, (q31_t)0x2c5b1ee8, (q31_t)0x2c553a06, (q31_t)0x2c4f5508, (q31_t)0x2c496fef, (q31_t)0x2c438abb, (q31_t)0x2c3da56b, - (q31_t)0x2c37c000, (q31_t)0x2c31da7a, (q31_t)0x2c2bf4d8, (q31_t)0x2c260f1c, (q31_t)0x2c202944, (q31_t)0x2c1a4351, (q31_t)0x2c145d42, (q31_t)0x2c0e7719, - (q31_t)0x2c0890d4, (q31_t)0x2c02aa74, (q31_t)0x2bfcc3f9, (q31_t)0x2bf6dd63, (q31_t)0x2bf0f6b1, (q31_t)0x2beb0fe5, (q31_t)0x2be528fd, (q31_t)0x2bdf41fb, - (q31_t)0x2bd95add, (q31_t)0x2bd373a4, (q31_t)0x2bcd8c51, (q31_t)0x2bc7a4e2, (q31_t)0x2bc1bd58, (q31_t)0x2bbbd5b3, (q31_t)0x2bb5edf4, (q31_t)0x2bb00619, - (q31_t)0x2baa1e23, (q31_t)0x2ba43613, (q31_t)0x2b9e4de7, (q31_t)0x2b9865a1, (q31_t)0x2b927d3f, (q31_t)0x2b8c94c3, (q31_t)0x2b86ac2c, (q31_t)0x2b80c37a, - (q31_t)0x2b7adaae, (q31_t)0x2b74f1c6, (q31_t)0x2b6f08c4, (q31_t)0x2b691fa6, (q31_t)0x2b63366f, (q31_t)0x2b5d4d1c, (q31_t)0x2b5763ae, (q31_t)0x2b517a26, - (q31_t)0x2b4b9083, (q31_t)0x2b45a6c6, (q31_t)0x2b3fbced, (q31_t)0x2b39d2fa, (q31_t)0x2b33e8ed, (q31_t)0x2b2dfec5, (q31_t)0x2b281482, (q31_t)0x2b222a24, - (q31_t)0x2b1c3fac, (q31_t)0x2b165519, (q31_t)0x2b106a6c, (q31_t)0x2b0a7fa4, (q31_t)0x2b0494c2, (q31_t)0x2afea9c5, (q31_t)0x2af8bead, (q31_t)0x2af2d37b, - (q31_t)0x2aece82f, (q31_t)0x2ae6fcc8, (q31_t)0x2ae11146, (q31_t)0x2adb25aa, (q31_t)0x2ad539f4, (q31_t)0x2acf4e23, (q31_t)0x2ac96238, (q31_t)0x2ac37633, - (q31_t)0x2abd8a13, (q31_t)0x2ab79dd8, (q31_t)0x2ab1b184, (q31_t)0x2aabc515, (q31_t)0x2aa5d88b, (q31_t)0x2a9febe8, (q31_t)0x2a99ff2a, (q31_t)0x2a941252, - (q31_t)0x2a8e255f, (q31_t)0x2a883853, (q31_t)0x2a824b2c, (q31_t)0x2a7c5deb, (q31_t)0x2a76708f, (q31_t)0x2a70831a, (q31_t)0x2a6a958a, (q31_t)0x2a64a7e0, - (q31_t)0x2a5eba1c, (q31_t)0x2a58cc3e, (q31_t)0x2a52de46, (q31_t)0x2a4cf033, (q31_t)0x2a470207, (q31_t)0x2a4113c0, (q31_t)0x2a3b2560, (q31_t)0x2a3536e5, - (q31_t)0x2a2f4850, (q31_t)0x2a2959a1, (q31_t)0x2a236ad9, (q31_t)0x2a1d7bf6, (q31_t)0x2a178cf9, (q31_t)0x2a119de2, (q31_t)0x2a0baeb2, (q31_t)0x2a05bf67, - (q31_t)0x29ffd003, (q31_t)0x29f9e084, (q31_t)0x29f3f0ec, (q31_t)0x29ee013a, (q31_t)0x29e8116e, (q31_t)0x29e22188, (q31_t)0x29dc3188, (q31_t)0x29d6416f, - (q31_t)0x29d0513b, (q31_t)0x29ca60ee, (q31_t)0x29c47087, (q31_t)0x29be8007, (q31_t)0x29b88f6c, (q31_t)0x29b29eb8, (q31_t)0x29acadea, (q31_t)0x29a6bd02, - (q31_t)0x29a0cc01, (q31_t)0x299adae6, (q31_t)0x2994e9b1, (q31_t)0x298ef863, (q31_t)0x298906fb, (q31_t)0x2983157a, (q31_t)0x297d23df, (q31_t)0x2977322a, - (q31_t)0x2971405b, (q31_t)0x296b4e74, (q31_t)0x29655c72, (q31_t)0x295f6a57, (q31_t)0x29597823, (q31_t)0x295385d5, (q31_t)0x294d936d, (q31_t)0x2947a0ec, - (q31_t)0x2941ae52, (q31_t)0x293bbb9e, (q31_t)0x2935c8d1, (q31_t)0x292fd5ea, (q31_t)0x2929e2ea, (q31_t)0x2923efd0, (q31_t)0x291dfc9d, (q31_t)0x29180951, - (q31_t)0x291215eb, (q31_t)0x290c226c, (q31_t)0x29062ed4, (q31_t)0x29003b23, (q31_t)0x28fa4758, (q31_t)0x28f45374, (q31_t)0x28ee5f76, (q31_t)0x28e86b5f, - (q31_t)0x28e27730, (q31_t)0x28dc82e6, (q31_t)0x28d68e84, (q31_t)0x28d09a09, (q31_t)0x28caa574, (q31_t)0x28c4b0c6, (q31_t)0x28bebbff, (q31_t)0x28b8c71f, - (q31_t)0x28b2d226, (q31_t)0x28acdd13, (q31_t)0x28a6e7e8, (q31_t)0x28a0f2a3, (q31_t)0x289afd46, (q31_t)0x289507cf, (q31_t)0x288f123f, (q31_t)0x28891c97, - (q31_t)0x288326d5, (q31_t)0x287d30fa, (q31_t)0x28773b07, (q31_t)0x287144fa, (q31_t)0x286b4ed5, (q31_t)0x28655896, (q31_t)0x285f623f, (q31_t)0x28596bce, - (q31_t)0x28537545, (q31_t)0x284d7ea3, (q31_t)0x284787e8, (q31_t)0x28419114, (q31_t)0x283b9a28, (q31_t)0x2835a322, (q31_t)0x282fac04, (q31_t)0x2829b4cd, - (q31_t)0x2823bd7d, (q31_t)0x281dc615, (q31_t)0x2817ce93, (q31_t)0x2811d6f9, (q31_t)0x280bdf46, (q31_t)0x2805e77b, (q31_t)0x27ffef97, (q31_t)0x27f9f79a, - (q31_t)0x27f3ff85, (q31_t)0x27ee0756, (q31_t)0x27e80f10, (q31_t)0x27e216b0, (q31_t)0x27dc1e38, (q31_t)0x27d625a8, (q31_t)0x27d02cff, (q31_t)0x27ca343d, - (q31_t)0x27c43b63, (q31_t)0x27be4270, (q31_t)0x27b84965, (q31_t)0x27b25041, (q31_t)0x27ac5705, (q31_t)0x27a65db0, (q31_t)0x27a06443, (q31_t)0x279a6abd, - (q31_t)0x2794711f, (q31_t)0x278e7768, (q31_t)0x27887d99, (q31_t)0x278283b2, (q31_t)0x277c89b3, (q31_t)0x27768f9b, (q31_t)0x2770956a, (q31_t)0x276a9b21, - (q31_t)0x2764a0c0, (q31_t)0x275ea647, (q31_t)0x2758abb6, (q31_t)0x2752b10c, (q31_t)0x274cb64a, (q31_t)0x2746bb6f, (q31_t)0x2740c07d, (q31_t)0x273ac572, - (q31_t)0x2734ca4f, (q31_t)0x272ecf14, (q31_t)0x2728d3c0, (q31_t)0x2722d855, (q31_t)0x271cdcd1, (q31_t)0x2716e136, (q31_t)0x2710e582, (q31_t)0x270ae9b6, - (q31_t)0x2704edd2, (q31_t)0x26fef1d5, (q31_t)0x26f8f5c1, (q31_t)0x26f2f995, (q31_t)0x26ecfd51, (q31_t)0x26e700f5, (q31_t)0x26e10480, (q31_t)0x26db07f4, - (q31_t)0x26d50b50, (q31_t)0x26cf0e94, (q31_t)0x26c911c0, (q31_t)0x26c314d4, (q31_t)0x26bd17d0, (q31_t)0x26b71ab4, (q31_t)0x26b11d80, (q31_t)0x26ab2034, - (q31_t)0x26a522d1, (q31_t)0x269f2556, (q31_t)0x269927c3, (q31_t)0x26932a18, (q31_t)0x268d2c55, (q31_t)0x26872e7b, (q31_t)0x26813088, (q31_t)0x267b327e, - (q31_t)0x2675345d, (q31_t)0x266f3623, (q31_t)0x266937d2, (q31_t)0x26633969, (q31_t)0x265d3ae9, (q31_t)0x26573c50, (q31_t)0x26513da1, (q31_t)0x264b3ed9, - (q31_t)0x26453ffa, (q31_t)0x263f4103, (q31_t)0x263941f5, (q31_t)0x263342cf, (q31_t)0x262d4392, (q31_t)0x2627443d, (q31_t)0x262144d0, (q31_t)0x261b454c, - (q31_t)0x261545b0, (q31_t)0x260f45fd, (q31_t)0x26094633, (q31_t)0x26034651, (q31_t)0x25fd4657, (q31_t)0x25f74646, (q31_t)0x25f1461e, (q31_t)0x25eb45de, - (q31_t)0x25e54587, (q31_t)0x25df4519, (q31_t)0x25d94493, (q31_t)0x25d343f6, (q31_t)0x25cd4341, (q31_t)0x25c74276, (q31_t)0x25c14192, (q31_t)0x25bb4098, - (q31_t)0x25b53f86, (q31_t)0x25af3e5d, (q31_t)0x25a93d1d, (q31_t)0x25a33bc6, (q31_t)0x259d3a57, (q31_t)0x259738d1, (q31_t)0x25913734, (q31_t)0x258b3580, - (q31_t)0x258533b5, (q31_t)0x257f31d2, (q31_t)0x25792fd8, (q31_t)0x25732dc8, (q31_t)0x256d2ba0, (q31_t)0x25672961, (q31_t)0x2561270b, (q31_t)0x255b249e, - (q31_t)0x2555221a, (q31_t)0x254f1f7e, (q31_t)0x25491ccc, (q31_t)0x25431a03, (q31_t)0x253d1723, (q31_t)0x2537142c, (q31_t)0x2531111e, (q31_t)0x252b0df9, - (q31_t)0x25250abd, (q31_t)0x251f076a, (q31_t)0x25190400, (q31_t)0x25130080, (q31_t)0x250cfce8, (q31_t)0x2506f93a, (q31_t)0x2500f574, (q31_t)0x24faf198, - (q31_t)0x24f4eda6, (q31_t)0x24eee99c, (q31_t)0x24e8e57c, (q31_t)0x24e2e144, (q31_t)0x24dcdcf6, (q31_t)0x24d6d892, (q31_t)0x24d0d416, (q31_t)0x24cacf84, - (q31_t)0x24c4cadb, (q31_t)0x24bec61c, (q31_t)0x24b8c146, (q31_t)0x24b2bc59, (q31_t)0x24acb756, (q31_t)0x24a6b23b, (q31_t)0x24a0ad0b, (q31_t)0x249aa7c4, - (q31_t)0x2494a266, (q31_t)0x248e9cf1, (q31_t)0x24889766, (q31_t)0x248291c5, (q31_t)0x247c8c0d, (q31_t)0x2476863e, (q31_t)0x24708059, (q31_t)0x246a7a5e, - (q31_t)0x2464744c, (q31_t)0x245e6e23, (q31_t)0x245867e4, (q31_t)0x2452618f, (q31_t)0x244c5b24, (q31_t)0x244654a1, (q31_t)0x24404e09, (q31_t)0x243a475a, - (q31_t)0x24344095, (q31_t)0x242e39ba, (q31_t)0x242832c8, (q31_t)0x24222bc0, (q31_t)0x241c24a1, (q31_t)0x24161d6d, (q31_t)0x24101622, (q31_t)0x240a0ec1, - (q31_t)0x24040749, (q31_t)0x23fdffbc, (q31_t)0x23f7f818, (q31_t)0x23f1f05e, (q31_t)0x23ebe88e, (q31_t)0x23e5e0a7, (q31_t)0x23dfd8ab, (q31_t)0x23d9d098, - (q31_t)0x23d3c86f, (q31_t)0x23cdc031, (q31_t)0x23c7b7dc, (q31_t)0x23c1af71, (q31_t)0x23bba6f0, (q31_t)0x23b59e59, (q31_t)0x23af95ac, (q31_t)0x23a98ce8, - (q31_t)0x23a3840f, (q31_t)0x239d7b20, (q31_t)0x2397721b, (q31_t)0x23916900, (q31_t)0x238b5fcf, (q31_t)0x23855688, (q31_t)0x237f4d2b, (q31_t)0x237943b9, - (q31_t)0x23733a30, (q31_t)0x236d3092, (q31_t)0x236726dd, (q31_t)0x23611d13, (q31_t)0x235b1333, (q31_t)0x2355093e, (q31_t)0x234eff32, (q31_t)0x2348f511, - (q31_t)0x2342eada, (q31_t)0x233ce08d, (q31_t)0x2336d62a, (q31_t)0x2330cbb2, (q31_t)0x232ac124, (q31_t)0x2324b680, (q31_t)0x231eabc7, (q31_t)0x2318a0f8, - (q31_t)0x23129613, (q31_t)0x230c8b19, (q31_t)0x23068009, (q31_t)0x230074e3, (q31_t)0x22fa69a8, (q31_t)0x22f45e57, (q31_t)0x22ee52f1, (q31_t)0x22e84775, - (q31_t)0x22e23be4, (q31_t)0x22dc303d, (q31_t)0x22d62480, (q31_t)0x22d018ae, (q31_t)0x22ca0cc7, (q31_t)0x22c400ca, (q31_t)0x22bdf4b8, (q31_t)0x22b7e890, - (q31_t)0x22b1dc53, (q31_t)0x22abd001, (q31_t)0x22a5c399, (q31_t)0x229fb71b, (q31_t)0x2299aa89, (q31_t)0x22939de1, (q31_t)0x228d9123, (q31_t)0x22878451, - (q31_t)0x22817769, (q31_t)0x227b6a6c, (q31_t)0x22755d59, (q31_t)0x226f5032, (q31_t)0x226942f5, (q31_t)0x226335a2, (q31_t)0x225d283b, (q31_t)0x22571abe, - (q31_t)0x22510d2d, (q31_t)0x224aff86, (q31_t)0x2244f1c9, (q31_t)0x223ee3f8, (q31_t)0x2238d612, (q31_t)0x2232c816, (q31_t)0x222cba06, (q31_t)0x2226abe0, - (q31_t)0x22209da5, (q31_t)0x221a8f56, (q31_t)0x221480f1, (q31_t)0x220e7277, (q31_t)0x220863e8, (q31_t)0x22025544, (q31_t)0x21fc468b, (q31_t)0x21f637be, - (q31_t)0x21f028db, (q31_t)0x21ea19e3, (q31_t)0x21e40ad7, (q31_t)0x21ddfbb5, (q31_t)0x21d7ec7f, (q31_t)0x21d1dd34, (q31_t)0x21cbcdd3, (q31_t)0x21c5be5e, - (q31_t)0x21bfaed5, (q31_t)0x21b99f36, (q31_t)0x21b38f83, (q31_t)0x21ad7fba, (q31_t)0x21a76fdd, (q31_t)0x21a15fec, (q31_t)0x219b4fe5, (q31_t)0x21953fca, - (q31_t)0x218f2f9a, (q31_t)0x21891f55, (q31_t)0x21830efc, (q31_t)0x217cfe8e, (q31_t)0x2176ee0b, (q31_t)0x2170dd74, (q31_t)0x216accc8, (q31_t)0x2164bc08, - (q31_t)0x215eab33, (q31_t)0x21589a49, (q31_t)0x2152894b, (q31_t)0x214c7838, (q31_t)0x21466710, (q31_t)0x214055d4, (q31_t)0x213a4484, (q31_t)0x2134331f, - (q31_t)0x212e21a6, (q31_t)0x21281018, (q31_t)0x2121fe76, (q31_t)0x211becbf, (q31_t)0x2115daf4, (q31_t)0x210fc914, (q31_t)0x2109b720, (q31_t)0x2103a518, - (q31_t)0x20fd92fb, (q31_t)0x20f780ca, (q31_t)0x20f16e84, (q31_t)0x20eb5c2b, (q31_t)0x20e549bd, (q31_t)0x20df373a, (q31_t)0x20d924a4, (q31_t)0x20d311f9, - (q31_t)0x20ccff3a, (q31_t)0x20c6ec66, (q31_t)0x20c0d97f, (q31_t)0x20bac683, (q31_t)0x20b4b373, (q31_t)0x20aea04f, (q31_t)0x20a88d17, (q31_t)0x20a279ca, - (q31_t)0x209c666a, (q31_t)0x209652f5, (q31_t)0x20903f6c, (q31_t)0x208a2bcf, (q31_t)0x2084181e, (q31_t)0x207e0459, (q31_t)0x2077f080, (q31_t)0x2071dc93, - (q31_t)0x206bc892, (q31_t)0x2065b47d, (q31_t)0x205fa054, (q31_t)0x20598c17, (q31_t)0x205377c6, (q31_t)0x204d6361, (q31_t)0x20474ee8, (q31_t)0x20413a5b, - (q31_t)0x203b25bb, (q31_t)0x20351106, (q31_t)0x202efc3e, (q31_t)0x2028e761, (q31_t)0x2022d271, (q31_t)0x201cbd6d, (q31_t)0x2016a856, (q31_t)0x2010932a, - (q31_t)0x200a7deb, (q31_t)0x20046898, (q31_t)0x1ffe5331, (q31_t)0x1ff83db6, (q31_t)0x1ff22828, (q31_t)0x1fec1286, (q31_t)0x1fe5fcd0, (q31_t)0x1fdfe707, - (q31_t)0x1fd9d12a, (q31_t)0x1fd3bb39, (q31_t)0x1fcda535, (q31_t)0x1fc78f1d, (q31_t)0x1fc178f1, (q31_t)0x1fbb62b2, (q31_t)0x1fb54c60, (q31_t)0x1faf35f9, - (q31_t)0x1fa91f80, (q31_t)0x1fa308f2, (q31_t)0x1f9cf252, (q31_t)0x1f96db9d, (q31_t)0x1f90c4d5, (q31_t)0x1f8aadfa, (q31_t)0x1f84970b, (q31_t)0x1f7e8009, - (q31_t)0x1f7868f4, (q31_t)0x1f7251ca, (q31_t)0x1f6c3a8e, (q31_t)0x1f66233e, (q31_t)0x1f600bdb, (q31_t)0x1f59f465, (q31_t)0x1f53dcdb, (q31_t)0x1f4dc53d, - (q31_t)0x1f47ad8d, (q31_t)0x1f4195c9, (q31_t)0x1f3b7df2, (q31_t)0x1f356608, (q31_t)0x1f2f4e0a, (q31_t)0x1f2935f9, (q31_t)0x1f231dd5, (q31_t)0x1f1d059e, - (q31_t)0x1f16ed54, (q31_t)0x1f10d4f6, (q31_t)0x1f0abc85, (q31_t)0x1f04a401, (q31_t)0x1efe8b6a, (q31_t)0x1ef872c0, (q31_t)0x1ef25a03, (q31_t)0x1eec4132, - (q31_t)0x1ee6284f, (q31_t)0x1ee00f58, (q31_t)0x1ed9f64f, (q31_t)0x1ed3dd32, (q31_t)0x1ecdc402, (q31_t)0x1ec7aac0, (q31_t)0x1ec1916a, (q31_t)0x1ebb7802, - (q31_t)0x1eb55e86, (q31_t)0x1eaf44f8, (q31_t)0x1ea92b56, (q31_t)0x1ea311a2, (q31_t)0x1e9cf7db, (q31_t)0x1e96de01, (q31_t)0x1e90c414, (q31_t)0x1e8aaa14, - (q31_t)0x1e849001, (q31_t)0x1e7e75dc, (q31_t)0x1e785ba3, (q31_t)0x1e724158, (q31_t)0x1e6c26fa, (q31_t)0x1e660c8a, (q31_t)0x1e5ff206, (q31_t)0x1e59d770, - (q31_t)0x1e53bcc7, (q31_t)0x1e4da20c, (q31_t)0x1e47873d, (q31_t)0x1e416c5d, (q31_t)0x1e3b5169, (q31_t)0x1e353663, (q31_t)0x1e2f1b4a, (q31_t)0x1e29001e, - (q31_t)0x1e22e4e0, (q31_t)0x1e1cc990, (q31_t)0x1e16ae2c, (q31_t)0x1e1092b6, (q31_t)0x1e0a772e, (q31_t)0x1e045b93, (q31_t)0x1dfe3fe6, (q31_t)0x1df82426, - (q31_t)0x1df20853, (q31_t)0x1debec6f, (q31_t)0x1de5d077, (q31_t)0x1ddfb46e, (q31_t)0x1dd99851, (q31_t)0x1dd37c23, (q31_t)0x1dcd5fe2, (q31_t)0x1dc7438e, - (q31_t)0x1dc12729, (q31_t)0x1dbb0ab0, (q31_t)0x1db4ee26, (q31_t)0x1daed189, (q31_t)0x1da8b4da, (q31_t)0x1da29819, (q31_t)0x1d9c7b45, (q31_t)0x1d965e5f, - (q31_t)0x1d904167, (q31_t)0x1d8a245c, (q31_t)0x1d840740, (q31_t)0x1d7dea11, (q31_t)0x1d77ccd0, (q31_t)0x1d71af7d, (q31_t)0x1d6b9217, (q31_t)0x1d6574a0, - (q31_t)0x1d5f5716, (q31_t)0x1d59397a, (q31_t)0x1d531bcc, (q31_t)0x1d4cfe0d, (q31_t)0x1d46e03a, (q31_t)0x1d40c256, (q31_t)0x1d3aa460, (q31_t)0x1d348658, - (q31_t)0x1d2e683e, (q31_t)0x1d284a12, (q31_t)0x1d222bd3, (q31_t)0x1d1c0d83, (q31_t)0x1d15ef21, (q31_t)0x1d0fd0ad, (q31_t)0x1d09b227, (q31_t)0x1d03938f, - (q31_t)0x1cfd74e5, (q31_t)0x1cf7562a, (q31_t)0x1cf1375c, (q31_t)0x1ceb187d, (q31_t)0x1ce4f98c, (q31_t)0x1cdeda89, (q31_t)0x1cd8bb74, (q31_t)0x1cd29c4d, - (q31_t)0x1ccc7d15, (q31_t)0x1cc65dca, (q31_t)0x1cc03e6e, (q31_t)0x1cba1f01, (q31_t)0x1cb3ff81, (q31_t)0x1caddff0, (q31_t)0x1ca7c04d, (q31_t)0x1ca1a099, - (q31_t)0x1c9b80d3, (q31_t)0x1c9560fb, (q31_t)0x1c8f4112, (q31_t)0x1c892117, (q31_t)0x1c83010a, (q31_t)0x1c7ce0ec, (q31_t)0x1c76c0bc, (q31_t)0x1c70a07b, - (q31_t)0x1c6a8028, (q31_t)0x1c645fc3, (q31_t)0x1c5e3f4d, (q31_t)0x1c581ec6, (q31_t)0x1c51fe2d, (q31_t)0x1c4bdd83, (q31_t)0x1c45bcc7, (q31_t)0x1c3f9bf9, - (q31_t)0x1c397b1b, (q31_t)0x1c335a2b, (q31_t)0x1c2d3929, (q31_t)0x1c271816, (q31_t)0x1c20f6f2, (q31_t)0x1c1ad5bc, (q31_t)0x1c14b475, (q31_t)0x1c0e931d, - (q31_t)0x1c0871b4, (q31_t)0x1c025039, (q31_t)0x1bfc2ead, (q31_t)0x1bf60d0f, (q31_t)0x1befeb60, (q31_t)0x1be9c9a1, (q31_t)0x1be3a7cf, (q31_t)0x1bdd85ed, - (q31_t)0x1bd763fa, (q31_t)0x1bd141f5, (q31_t)0x1bcb1fdf, (q31_t)0x1bc4fdb8, (q31_t)0x1bbedb80, (q31_t)0x1bb8b937, (q31_t)0x1bb296dc, (q31_t)0x1bac7471, - (q31_t)0x1ba651f5, (q31_t)0x1ba02f67, (q31_t)0x1b9a0cc8, (q31_t)0x1b93ea19, (q31_t)0x1b8dc758, (q31_t)0x1b87a487, (q31_t)0x1b8181a4, (q31_t)0x1b7b5eb0, - (q31_t)0x1b753bac, (q31_t)0x1b6f1897, (q31_t)0x1b68f570, (q31_t)0x1b62d239, (q31_t)0x1b5caef1, (q31_t)0x1b568b98, (q31_t)0x1b50682e, (q31_t)0x1b4a44b3, - (q31_t)0x1b442127, (q31_t)0x1b3dfd8b, (q31_t)0x1b37d9de, (q31_t)0x1b31b620, (q31_t)0x1b2b9251, (q31_t)0x1b256e71, (q31_t)0x1b1f4a81, (q31_t)0x1b192680, - (q31_t)0x1b13026e, (q31_t)0x1b0cde4c, (q31_t)0x1b06ba19, (q31_t)0x1b0095d5, (q31_t)0x1afa7180, (q31_t)0x1af44d1b, (q31_t)0x1aee28a6, (q31_t)0x1ae8041f, - (q31_t)0x1ae1df88, (q31_t)0x1adbbae1, (q31_t)0x1ad59629, (q31_t)0x1acf7160, (q31_t)0x1ac94c87, (q31_t)0x1ac3279d, (q31_t)0x1abd02a3, (q31_t)0x1ab6dd98, - (q31_t)0x1ab0b87d, (q31_t)0x1aaa9352, (q31_t)0x1aa46e16, (q31_t)0x1a9e48c9, (q31_t)0x1a98236c, (q31_t)0x1a91fdff, (q31_t)0x1a8bd881, (q31_t)0x1a85b2f3, - (q31_t)0x1a7f8d54, (q31_t)0x1a7967a6, (q31_t)0x1a7341e6, (q31_t)0x1a6d1c17, (q31_t)0x1a66f637, (q31_t)0x1a60d047, (q31_t)0x1a5aaa47, (q31_t)0x1a548436, - (q31_t)0x1a4e5e15, (q31_t)0x1a4837e4, (q31_t)0x1a4211a3, (q31_t)0x1a3beb52, (q31_t)0x1a35c4f0, (q31_t)0x1a2f9e7e, (q31_t)0x1a2977fc, (q31_t)0x1a23516a, - (q31_t)0x1a1d2ac8, (q31_t)0x1a170416, (q31_t)0x1a10dd53, (q31_t)0x1a0ab681, (q31_t)0x1a048f9e, (q31_t)0x19fe68ac, (q31_t)0x19f841a9, (q31_t)0x19f21a96, - (q31_t)0x19ebf374, (q31_t)0x19e5cc41, (q31_t)0x19dfa4fe, (q31_t)0x19d97dac, (q31_t)0x19d35649, (q31_t)0x19cd2ed7, (q31_t)0x19c70754, (q31_t)0x19c0dfc2, - (q31_t)0x19bab820, (q31_t)0x19b4906e, (q31_t)0x19ae68ac, (q31_t)0x19a840da, (q31_t)0x19a218f9, (q31_t)0x199bf107, (q31_t)0x1995c906, (q31_t)0x198fa0f5, - (q31_t)0x198978d4, (q31_t)0x198350a4, (q31_t)0x197d2864, (q31_t)0x19770014, (q31_t)0x1970d7b4, (q31_t)0x196aaf45, (q31_t)0x196486c6, (q31_t)0x195e5e37, - (q31_t)0x19583599, (q31_t)0x19520ceb, (q31_t)0x194be42d, (q31_t)0x1945bb60, (q31_t)0x193f9283, (q31_t)0x19396997, (q31_t)0x1933409b, (q31_t)0x192d178f, - (q31_t)0x1926ee74, (q31_t)0x1920c54a, (q31_t)0x191a9c10, (q31_t)0x191472c6, (q31_t)0x190e496d, (q31_t)0x19082005, (q31_t)0x1901f68d, (q31_t)0x18fbcd06, - (q31_t)0x18f5a36f, (q31_t)0x18ef79c9, (q31_t)0x18e95014, (q31_t)0x18e3264f, (q31_t)0x18dcfc7b, (q31_t)0x18d6d297, (q31_t)0x18d0a8a4, (q31_t)0x18ca7ea2, - (q31_t)0x18c45491, (q31_t)0x18be2a70, (q31_t)0x18b80040, (q31_t)0x18b1d601, (q31_t)0x18ababb2, (q31_t)0x18a58154, (q31_t)0x189f56e8, (q31_t)0x18992c6b, - (q31_t)0x189301e0, (q31_t)0x188cd746, (q31_t)0x1886ac9c, (q31_t)0x188081e4, (q31_t)0x187a571c, (q31_t)0x18742c45, (q31_t)0x186e015f, (q31_t)0x1867d66a, - (q31_t)0x1861ab66, (q31_t)0x185b8053, (q31_t)0x18555530, (q31_t)0x184f29ff, (q31_t)0x1848febf, (q31_t)0x1842d370, (q31_t)0x183ca812, (q31_t)0x18367ca5, - (q31_t)0x18305129, (q31_t)0x182a259e, (q31_t)0x1823fa04, (q31_t)0x181dce5b, (q31_t)0x1817a2a4, (q31_t)0x181176dd, (q31_t)0x180b4b08, (q31_t)0x18051f24, - (q31_t)0x17fef331, (q31_t)0x17f8c72f, (q31_t)0x17f29b1e, (q31_t)0x17ec6eff, (q31_t)0x17e642d1, (q31_t)0x17e01694, (q31_t)0x17d9ea49, (q31_t)0x17d3bdee, - (q31_t)0x17cd9186, (q31_t)0x17c7650e, (q31_t)0x17c13888, (q31_t)0x17bb0bf3, (q31_t)0x17b4df4f, (q31_t)0x17aeb29d, (q31_t)0x17a885dc, (q31_t)0x17a2590d, - (q31_t)0x179c2c2f, (q31_t)0x1795ff42, (q31_t)0x178fd247, (q31_t)0x1789a53d, (q31_t)0x17837825, (q31_t)0x177d4afe, (q31_t)0x17771dc9, (q31_t)0x1770f086, - (q31_t)0x176ac333, (q31_t)0x176495d3, (q31_t)0x175e6864, (q31_t)0x17583ae7, (q31_t)0x17520d5b, (q31_t)0x174bdfc1, (q31_t)0x1745b218, (q31_t)0x173f8461, - (q31_t)0x1739569c, (q31_t)0x173328c8, (q31_t)0x172cfae6, (q31_t)0x1726ccf6, (q31_t)0x17209ef8, (q31_t)0x171a70eb, (q31_t)0x171442d0, (q31_t)0x170e14a7, - (q31_t)0x1707e670, (q31_t)0x1701b82a, (q31_t)0x16fb89d6, (q31_t)0x16f55b74, (q31_t)0x16ef2d04, (q31_t)0x16e8fe86, (q31_t)0x16e2cff9, (q31_t)0x16dca15f, - (q31_t)0x16d672b6, (q31_t)0x16d043ff, (q31_t)0x16ca153a, (q31_t)0x16c3e667, (q31_t)0x16bdb787, (q31_t)0x16b78898, (q31_t)0x16b1599b, (q31_t)0x16ab2a90, - (q31_t)0x16a4fb77, (q31_t)0x169ecc50, (q31_t)0x16989d1b, (q31_t)0x16926dd8, (q31_t)0x168c3e87, (q31_t)0x16860f29, (q31_t)0x167fdfbc, (q31_t)0x1679b042, - (q31_t)0x167380ba, (q31_t)0x166d5123, (q31_t)0x1667217f, (q31_t)0x1660f1ce, (q31_t)0x165ac20e, (q31_t)0x16549241, (q31_t)0x164e6266, (q31_t)0x1648327d, - (q31_t)0x16420286, (q31_t)0x163bd282, (q31_t)0x1635a270, (q31_t)0x162f7250, (q31_t)0x16294222, (q31_t)0x162311e7, (q31_t)0x161ce19e, (q31_t)0x1616b148, - (q31_t)0x161080e4, (q31_t)0x160a5072, (q31_t)0x16041ff3, (q31_t)0x15fdef66, (q31_t)0x15f7becc, (q31_t)0x15f18e24, (q31_t)0x15eb5d6e, (q31_t)0x15e52cab, - (q31_t)0x15defbdb, (q31_t)0x15d8cafd, (q31_t)0x15d29a11, (q31_t)0x15cc6918, (q31_t)0x15c63812, (q31_t)0x15c006fe, (q31_t)0x15b9d5dd, (q31_t)0x15b3a4ae, - (q31_t)0x15ad7372, (q31_t)0x15a74228, (q31_t)0x15a110d2, (q31_t)0x159adf6e, (q31_t)0x1594adfc, (q31_t)0x158e7c7d, (q31_t)0x15884af1, (q31_t)0x15821958, - (q31_t)0x157be7b1, (q31_t)0x1575b5fe, (q31_t)0x156f843c, (q31_t)0x1569526e, (q31_t)0x15632093, (q31_t)0x155ceeaa, (q31_t)0x1556bcb4, (q31_t)0x15508ab1, - (q31_t)0x154a58a1, (q31_t)0x15442683, (q31_t)0x153df459, (q31_t)0x1537c221, (q31_t)0x15318fdd, (q31_t)0x152b5d8b, (q31_t)0x15252b2c, (q31_t)0x151ef8c0, - (q31_t)0x1518c648, (q31_t)0x151293c2, (q31_t)0x150c612f, (q31_t)0x15062e8f, (q31_t)0x14fffbe2, (q31_t)0x14f9c928, (q31_t)0x14f39662, (q31_t)0x14ed638e, - (q31_t)0x14e730ae, (q31_t)0x14e0fdc0, (q31_t)0x14dacac6, (q31_t)0x14d497bf, (q31_t)0x14ce64ab, (q31_t)0x14c8318a, (q31_t)0x14c1fe5c, (q31_t)0x14bbcb22, - (q31_t)0x14b597da, (q31_t)0x14af6486, (q31_t)0x14a93125, (q31_t)0x14a2fdb8, (q31_t)0x149cca3e, (q31_t)0x149696b7, (q31_t)0x14906323, (q31_t)0x148a2f82, - (q31_t)0x1483fbd5, (q31_t)0x147dc81c, (q31_t)0x14779455, (q31_t)0x14716082, (q31_t)0x146b2ca3, (q31_t)0x1464f8b7, (q31_t)0x145ec4be, (q31_t)0x145890b9, - (q31_t)0x14525ca7, (q31_t)0x144c2888, (q31_t)0x1445f45d, (q31_t)0x143fc026, (q31_t)0x14398be2, (q31_t)0x14335792, (q31_t)0x142d2335, (q31_t)0x1426eecb, - (q31_t)0x1420ba56, (q31_t)0x141a85d3, (q31_t)0x14145145, (q31_t)0x140e1caa, (q31_t)0x1407e803, (q31_t)0x1401b34f, (q31_t)0x13fb7e8f, (q31_t)0x13f549c3, - (q31_t)0x13ef14ea, (q31_t)0x13e8e005, (q31_t)0x13e2ab14, (q31_t)0x13dc7616, (q31_t)0x13d6410d, (q31_t)0x13d00bf7, (q31_t)0x13c9d6d4, (q31_t)0x13c3a1a6, - (q31_t)0x13bd6c6b, (q31_t)0x13b73725, (q31_t)0x13b101d2, (q31_t)0x13aacc73, (q31_t)0x13a49707, (q31_t)0x139e6190, (q31_t)0x13982c0d, (q31_t)0x1391f67d, - (q31_t)0x138bc0e1, (q31_t)0x13858b3a, (q31_t)0x137f5586, (q31_t)0x13791fc6, (q31_t)0x1372e9fb, (q31_t)0x136cb423, (q31_t)0x13667e3f, (q31_t)0x13604850, - (q31_t)0x135a1254, (q31_t)0x1353dc4c, (q31_t)0x134da639, (q31_t)0x1347701a, (q31_t)0x134139ee, (q31_t)0x133b03b7, (q31_t)0x1334cd74, (q31_t)0x132e9725, - (q31_t)0x132860ca, (q31_t)0x13222a64, (q31_t)0x131bf3f2, (q31_t)0x1315bd73, (q31_t)0x130f86ea, (q31_t)0x13095054, (q31_t)0x130319b3, (q31_t)0x12fce305, - (q31_t)0x12f6ac4d, (q31_t)0x12f07588, (q31_t)0x12ea3eb8, (q31_t)0x12e407dc, (q31_t)0x12ddd0f4, (q31_t)0x12d79a01, (q31_t)0x12d16303, (q31_t)0x12cb2bf8, - (q31_t)0x12c4f4e2, (q31_t)0x12bebdc1, (q31_t)0x12b88693, (q31_t)0x12b24f5b, (q31_t)0x12ac1817, (q31_t)0x12a5e0c7, (q31_t)0x129fa96c, (q31_t)0x12997205, - (q31_t)0x12933a93, (q31_t)0x128d0315, (q31_t)0x1286cb8c, (q31_t)0x128093f7, (q31_t)0x127a5c57, (q31_t)0x127424ac, (q31_t)0x126decf5, (q31_t)0x1267b533, - (q31_t)0x12617d66, (q31_t)0x125b458d, (q31_t)0x12550da9, (q31_t)0x124ed5ba, (q31_t)0x12489dbf, (q31_t)0x124265b9, (q31_t)0x123c2da8, (q31_t)0x1235f58b, - (q31_t)0x122fbd63, (q31_t)0x12298530, (q31_t)0x12234cf2, (q31_t)0x121d14a9, (q31_t)0x1216dc54, (q31_t)0x1210a3f5, (q31_t)0x120a6b8a, (q31_t)0x12043314, - (q31_t)0x11fdfa93, (q31_t)0x11f7c207, (q31_t)0x11f18970, (q31_t)0x11eb50cd, (q31_t)0x11e51820, (q31_t)0x11dedf68, (q31_t)0x11d8a6a4, (q31_t)0x11d26dd6, - (q31_t)0x11cc34fc, (q31_t)0x11c5fc18, (q31_t)0x11bfc329, (q31_t)0x11b98a2e, (q31_t)0x11b35129, (q31_t)0x11ad1819, (q31_t)0x11a6defe, (q31_t)0x11a0a5d8, - (q31_t)0x119a6ca7, (q31_t)0x1194336b, (q31_t)0x118dfa25, (q31_t)0x1187c0d3, (q31_t)0x11818777, (q31_t)0x117b4e10, (q31_t)0x1175149e, (q31_t)0x116edb22, - (q31_t)0x1168a19b, (q31_t)0x11626809, (q31_t)0x115c2e6c, (q31_t)0x1155f4c4, (q31_t)0x114fbb12, (q31_t)0x11498156, (q31_t)0x1143478e, (q31_t)0x113d0dbc, - (q31_t)0x1136d3df, (q31_t)0x113099f8, (q31_t)0x112a6006, (q31_t)0x11242609, (q31_t)0x111dec02, (q31_t)0x1117b1f0, (q31_t)0x111177d4, (q31_t)0x110b3dad, - (q31_t)0x1105037c, (q31_t)0x10fec940, (q31_t)0x10f88efa, (q31_t)0x10f254a9, (q31_t)0x10ec1a4e, (q31_t)0x10e5dfe8, (q31_t)0x10dfa578, (q31_t)0x10d96afe, - (q31_t)0x10d33079, (q31_t)0x10ccf5ea, (q31_t)0x10c6bb50, (q31_t)0x10c080ac, (q31_t)0x10ba45fe, (q31_t)0x10b40b45, (q31_t)0x10add082, (q31_t)0x10a795b5, - (q31_t)0x10a15ade, (q31_t)0x109b1ffc, (q31_t)0x1094e510, (q31_t)0x108eaa1a, (q31_t)0x10886f19, (q31_t)0x1082340f, (q31_t)0x107bf8fa, (q31_t)0x1075bddb, - (q31_t)0x106f82b2, (q31_t)0x1069477f, (q31_t)0x10630c41, (q31_t)0x105cd0fa, (q31_t)0x105695a8, (q31_t)0x10505a4d, (q31_t)0x104a1ee7, (q31_t)0x1043e377, - (q31_t)0x103da7fd, (q31_t)0x10376c79, (q31_t)0x103130ec, (q31_t)0x102af554, (q31_t)0x1024b9b2, (q31_t)0x101e7e06, (q31_t)0x10184251, (q31_t)0x10120691, - (q31_t)0x100bcac7, (q31_t)0x10058ef4, (q31_t)0xfff5317, (q31_t)0xff91730, (q31_t)0xff2db3e, (q31_t)0xfec9f44, (q31_t)0xfe6633f, (q31_t)0xfe02730, - (q31_t)0xfd9eb18, (q31_t)0xfd3aef6, (q31_t)0xfcd72ca, (q31_t)0xfc73695, (q31_t)0xfc0fa55, (q31_t)0xfbabe0c, (q31_t)0xfb481ba, (q31_t)0xfae455d, - (q31_t)0xfa808f7, (q31_t)0xfa1cc87, (q31_t)0xf9b900e, (q31_t)0xf95538b, (q31_t)0xf8f16fe, (q31_t)0xf88da68, (q31_t)0xf829dc8, (q31_t)0xf7c611f, - (q31_t)0xf76246c, (q31_t)0xf6fe7af, (q31_t)0xf69aae9, (q31_t)0xf636e1a, (q31_t)0xf5d3141, (q31_t)0xf56f45e, (q31_t)0xf50b773, (q31_t)0xf4a7a7d, - (q31_t)0xf443d7e, (q31_t)0xf3e0076, (q31_t)0xf37c365, (q31_t)0xf318649, (q31_t)0xf2b4925, (q31_t)0xf250bf7, (q31_t)0xf1ecec0, (q31_t)0xf189180, - (q31_t)0xf125436, (q31_t)0xf0c16e3, (q31_t)0xf05d987, (q31_t)0xeff9c21, (q31_t)0xef95eb2, (q31_t)0xef3213a, (q31_t)0xeece3b9, (q31_t)0xee6a62f, - (q31_t)0xee0689b, (q31_t)0xeda2afe, (q31_t)0xed3ed58, (q31_t)0xecdafa9, (q31_t)0xec771f1, (q31_t)0xec1342f, (q31_t)0xebaf665, (q31_t)0xeb4b891, - (q31_t)0xeae7ab4, (q31_t)0xea83ccf, (q31_t)0xea1fee0, (q31_t)0xe9bc0e8, (q31_t)0xe9582e7, (q31_t)0xe8f44dd, (q31_t)0xe8906cb, (q31_t)0xe82c8af, - (q31_t)0xe7c8a8a, (q31_t)0xe764c5c, (q31_t)0xe700e26, (q31_t)0xe69cfe6, (q31_t)0xe63919e, (q31_t)0xe5d534d, (q31_t)0xe5714f3, (q31_t)0xe50d690, - (q31_t)0xe4a9824, (q31_t)0xe4459af, (q31_t)0xe3e1b32, (q31_t)0xe37dcac, (q31_t)0xe319e1d, (q31_t)0xe2b5f85, (q31_t)0xe2520e5, (q31_t)0xe1ee23c, - (q31_t)0xe18a38a, (q31_t)0xe1264cf, (q31_t)0xe0c260c, (q31_t)0xe05e740, (q31_t)0xdffa86b, (q31_t)0xdf9698e, (q31_t)0xdf32aa8, (q31_t)0xdecebba, - (q31_t)0xde6acc3, (q31_t)0xde06dc3, (q31_t)0xdda2ebb, (q31_t)0xdd3efab, (q31_t)0xdcdb091, (q31_t)0xdc77170, (q31_t)0xdc13245, (q31_t)0xdbaf313, - (q31_t)0xdb4b3d7, (q31_t)0xdae7494, (q31_t)0xda83548, (q31_t)0xda1f5f3, (q31_t)0xd9bb696, (q31_t)0xd957731, (q31_t)0xd8f37c3, (q31_t)0xd88f84d, - (q31_t)0xd82b8cf, (q31_t)0xd7c7948, (q31_t)0xd7639b9, (q31_t)0xd6ffa22, (q31_t)0xd69ba82, (q31_t)0xd637ada, (q31_t)0xd5d3b2a, (q31_t)0xd56fb71, - (q31_t)0xd50bbb1, (q31_t)0xd4a7be8, (q31_t)0xd443c17, (q31_t)0xd3dfc3e, (q31_t)0xd37bc5c, (q31_t)0xd317c73, (q31_t)0xd2b3c81, (q31_t)0xd24fc87, - (q31_t)0xd1ebc85, (q31_t)0xd187c7b, (q31_t)0xd123c69, (q31_t)0xd0bfc4f, (q31_t)0xd05bc2d, (q31_t)0xcff7c02, (q31_t)0xcf93bd0, (q31_t)0xcf2fb96, - (q31_t)0xcecbb53, (q31_t)0xce67b09, (q31_t)0xce03ab7, (q31_t)0xcd9fa5d, (q31_t)0xcd3b9fb, (q31_t)0xccd7991, (q31_t)0xcc7391f, (q31_t)0xcc0f8a5, - (q31_t)0xcbab824, (q31_t)0xcb4779a, (q31_t)0xcae3709, (q31_t)0xca7f670, (q31_t)0xca1b5cf, (q31_t)0xc9b7526, (q31_t)0xc953475, (q31_t)0xc8ef3bd, - (q31_t)0xc88b2fd, (q31_t)0xc827235, (q31_t)0xc7c3166, (q31_t)0xc75f08f, (q31_t)0xc6fafb0, (q31_t)0xc696ec9, (q31_t)0xc632ddb, (q31_t)0xc5cece5, - (q31_t)0xc56abe8, (q31_t)0xc506ae3, (q31_t)0xc4a29d6, (q31_t)0xc43e8c2, (q31_t)0xc3da7a6, (q31_t)0xc376683, (q31_t)0xc312558, (q31_t)0xc2ae425, - (q31_t)0xc24a2eb, (q31_t)0xc1e61aa, (q31_t)0xc182061, (q31_t)0xc11df11, (q31_t)0xc0b9db9, (q31_t)0xc055c5a, (q31_t)0xbff1af3, (q31_t)0xbf8d985, - (q31_t)0xbf29810, (q31_t)0xbec5693, (q31_t)0xbe6150f, (q31_t)0xbdfd383, (q31_t)0xbd991f0, (q31_t)0xbd35056, (q31_t)0xbcd0eb5, (q31_t)0xbc6cd0c, - (q31_t)0xbc08b5c, (q31_t)0xbba49a5, (q31_t)0xbb407e7, (q31_t)0xbadc621, (q31_t)0xba78454, (q31_t)0xba14280, (q31_t)0xb9b00a5, (q31_t)0xb94bec2, - (q31_t)0xb8e7cd9, (q31_t)0xb883ae8, (q31_t)0xb81f8f0, (q31_t)0xb7bb6f2, (q31_t)0xb7574ec, (q31_t)0xb6f32df, (q31_t)0xb68f0cb, (q31_t)0xb62aeaf, - (q31_t)0xb5c6c8d, (q31_t)0xb562a64, (q31_t)0xb4fe834, (q31_t)0xb49a5fd, (q31_t)0xb4363bf, (q31_t)0xb3d217a, (q31_t)0xb36df2e, (q31_t)0xb309cdb, - (q31_t)0xb2a5a81, (q31_t)0xb241820, (q31_t)0xb1dd5b9, (q31_t)0xb17934b, (q31_t)0xb1150d5, (q31_t)0xb0b0e59, (q31_t)0xb04cbd6, (q31_t)0xafe894d, - (q31_t)0xaf846bc, (q31_t)0xaf20425, (q31_t)0xaebc187, (q31_t)0xae57ee2, (q31_t)0xadf3c37, (q31_t)0xad8f985, (q31_t)0xad2b6cc, (q31_t)0xacc740c, - (q31_t)0xac63146, (q31_t)0xabfee79, (q31_t)0xab9aba6, (q31_t)0xab368cc, (q31_t)0xaad25eb, (q31_t)0xaa6e304, (q31_t)0xaa0a016, (q31_t)0xa9a5d22, - (q31_t)0xa941a27, (q31_t)0xa8dd725, (q31_t)0xa87941d, (q31_t)0xa81510f, (q31_t)0xa7b0dfa, (q31_t)0xa74cadf, (q31_t)0xa6e87bd, (q31_t)0xa684495, - (q31_t)0xa620166, (q31_t)0xa5bbe31, (q31_t)0xa557af5, (q31_t)0xa4f37b3, (q31_t)0xa48f46b, (q31_t)0xa42b11d, (q31_t)0xa3c6dc8, (q31_t)0xa362a6d, - (q31_t)0xa2fe70b, (q31_t)0xa29a3a3, (q31_t)0xa236035, (q31_t)0xa1d1cc1, (q31_t)0xa16d946, (q31_t)0xa1095c6, (q31_t)0xa0a523f, (q31_t)0xa040eb1, - (q31_t)0x9fdcb1e, (q31_t)0x9f78784, (q31_t)0x9f143e5, (q31_t)0x9eb003f, (q31_t)0x9e4bc93, (q31_t)0x9de78e1, (q31_t)0x9d83529, (q31_t)0x9d1f16b, - (q31_t)0x9cbada7, (q31_t)0x9c569dc, (q31_t)0x9bf260c, (q31_t)0x9b8e236, (q31_t)0x9b29e59, (q31_t)0x9ac5a77, (q31_t)0x9a6168f, (q31_t)0x99fd2a0, - (q31_t)0x9998eac, (q31_t)0x9934ab2, (q31_t)0x98d06b2, (q31_t)0x986c2ac, (q31_t)0x9807ea1, (q31_t)0x97a3a8f, (q31_t)0x973f678, (q31_t)0x96db25a, - (q31_t)0x9676e37, (q31_t)0x9612a0e, (q31_t)0x95ae5e0, (q31_t)0x954a1ab, (q31_t)0x94e5d71, (q31_t)0x9481931, (q31_t)0x941d4eb, (q31_t)0x93b90a0, - (q31_t)0x9354c4f, (q31_t)0x92f07f8, (q31_t)0x928c39b, (q31_t)0x9227f39, (q31_t)0x91c3ad2, (q31_t)0x915f664, (q31_t)0x90fb1f1, (q31_t)0x9096d79, - (q31_t)0x90328fb, (q31_t)0x8fce477, (q31_t)0x8f69fee, (q31_t)0x8f05b5f, (q31_t)0x8ea16cb, (q31_t)0x8e3d231, (q31_t)0x8dd8d92, (q31_t)0x8d748ed, - (q31_t)0x8d10443, (q31_t)0x8cabf93, (q31_t)0x8c47ade, (q31_t)0x8be3624, (q31_t)0x8b7f164, (q31_t)0x8b1ac9f, (q31_t)0x8ab67d4, (q31_t)0x8a52304, - (q31_t)0x89ede2f, (q31_t)0x8989955, (q31_t)0x8925475, (q31_t)0x88c0f90, (q31_t)0x885caa5, (q31_t)0x87f85b5, (q31_t)0x87940c1, (q31_t)0x872fbc6, - (q31_t)0x86cb6c7, (q31_t)0x86671c2, (q31_t)0x8602cb9, (q31_t)0x859e7aa, (q31_t)0x853a296, (q31_t)0x84d5d7d, (q31_t)0x847185e, (q31_t)0x840d33b, - (q31_t)0x83a8e12, (q31_t)0x83448e5, (q31_t)0x82e03b2, (q31_t)0x827be7a, (q31_t)0x821793e, (q31_t)0x81b33fc, (q31_t)0x814eeb5, (q31_t)0x80ea969, - (q31_t)0x8086419, (q31_t)0x8021ec3, (q31_t)0x7fbd968, (q31_t)0x7f59409, (q31_t)0x7ef4ea4, (q31_t)0x7e9093b, (q31_t)0x7e2c3cd, (q31_t)0x7dc7e5a, - (q31_t)0x7d638e2, (q31_t)0x7cff365, (q31_t)0x7c9ade4, (q31_t)0x7c3685d, (q31_t)0x7bd22d2, (q31_t)0x7b6dd42, (q31_t)0x7b097ad, (q31_t)0x7aa5214, - (q31_t)0x7a40c76, (q31_t)0x79dc6d3, (q31_t)0x797812b, (q31_t)0x7913b7f, (q31_t)0x78af5ce, (q31_t)0x784b019, (q31_t)0x77e6a5e, (q31_t)0x77824a0, - (q31_t)0x771dedc, (q31_t)0x76b9914, (q31_t)0x7655347, (q31_t)0x75f0d76, (q31_t)0x758c7a1, (q31_t)0x75281c6, (q31_t)0x74c3be7, (q31_t)0x745f604, - (q31_t)0x73fb01c, (q31_t)0x7396a30, (q31_t)0x733243f, (q31_t)0x72cde4a, (q31_t)0x7269851, (q31_t)0x7205253, (q31_t)0x71a0c50, (q31_t)0x713c64a, - (q31_t)0x70d803f, (q31_t)0x7073a2f, (q31_t)0x700f41b, (q31_t)0x6faae03, (q31_t)0x6f467e7, (q31_t)0x6ee21c6, (q31_t)0x6e7dba1, (q31_t)0x6e19578, - (q31_t)0x6db4f4a, (q31_t)0x6d50919, (q31_t)0x6cec2e3, (q31_t)0x6c87ca9, (q31_t)0x6c2366a, (q31_t)0x6bbf028, (q31_t)0x6b5a9e1, (q31_t)0x6af6396, - (q31_t)0x6a91d47, (q31_t)0x6a2d6f4, (q31_t)0x69c909d, (q31_t)0x6964a42, (q31_t)0x69003e3, (q31_t)0x689bd80, (q31_t)0x6837718, (q31_t)0x67d30ad, - (q31_t)0x676ea3d, (q31_t)0x670a3ca, (q31_t)0x66a5d53, (q31_t)0x66416d8, (q31_t)0x65dd058, (q31_t)0x65789d5, (q31_t)0x651434e, (q31_t)0x64afcc3, - (q31_t)0x644b634, (q31_t)0x63e6fa2, (q31_t)0x638290b, (q31_t)0x631e271, (q31_t)0x62b9bd3, (q31_t)0x6255531, (q31_t)0x61f0e8b, (q31_t)0x618c7e1, - (q31_t)0x6128134, (q31_t)0x60c3a83, (q31_t)0x605f3ce, (q31_t)0x5ffad15, (q31_t)0x5f96659, (q31_t)0x5f31f99, (q31_t)0x5ecd8d6, (q31_t)0x5e6920e, - (q31_t)0x5e04b43, (q31_t)0x5da0475, (q31_t)0x5d3bda3, (q31_t)0x5cd76cd, (q31_t)0x5c72ff4, (q31_t)0x5c0e917, (q31_t)0x5baa237, (q31_t)0x5b45b53, - (q31_t)0x5ae146b, (q31_t)0x5a7cd80, (q31_t)0x5a18692, (q31_t)0x59b3fa0, (q31_t)0x594f8aa, (q31_t)0x58eb1b2, (q31_t)0x5886ab5, (q31_t)0x58223b6, - (q31_t)0x57bdcb3, (q31_t)0x57595ac, (q31_t)0x56f4ea2, (q31_t)0x5690795, (q31_t)0x562c085, (q31_t)0x55c7971, (q31_t)0x556325a, (q31_t)0x54feb3f, - (q31_t)0x549a422, (q31_t)0x5435d01, (q31_t)0x53d15dd, (q31_t)0x536ceb5, (q31_t)0x530878a, (q31_t)0x52a405d, (q31_t)0x523f92c, (q31_t)0x51db1f7, - (q31_t)0x5176ac0, (q31_t)0x5112385, (q31_t)0x50adc48, (q31_t)0x5049507, (q31_t)0x4fe4dc3, (q31_t)0x4f8067c, (q31_t)0x4f1bf32, (q31_t)0x4eb77e5, - (q31_t)0x4e53095, (q31_t)0x4dee942, (q31_t)0x4d8a1ec, (q31_t)0x4d25a93, (q31_t)0x4cc1337, (q31_t)0x4c5cbd8, (q31_t)0x4bf8476, (q31_t)0x4b93d11, - (q31_t)0x4b2f5a9, (q31_t)0x4acae3e, (q31_t)0x4a666d1, (q31_t)0x4a01f60, (q31_t)0x499d7ed, (q31_t)0x4939077, (q31_t)0x48d48fe, (q31_t)0x4870182, - (q31_t)0x480ba04, (q31_t)0x47a7282, (q31_t)0x4742afe, (q31_t)0x46de377, (q31_t)0x4679bee, (q31_t)0x4615461, (q31_t)0x45b0cd2, (q31_t)0x454c541, - (q31_t)0x44e7dac, (q31_t)0x4483615, (q31_t)0x441ee7c, (q31_t)0x43ba6df, (q31_t)0x4355f40, (q31_t)0x42f179f, (q31_t)0x428cffb, (q31_t)0x4228854, - (q31_t)0x41c40ab, (q31_t)0x415f8ff, (q31_t)0x40fb151, (q31_t)0x40969a0, (q31_t)0x40321ed, (q31_t)0x3fcda37, (q31_t)0x3f6927f, (q31_t)0x3f04ac4, - (q31_t)0x3ea0307, (q31_t)0x3e3bb48, (q31_t)0x3dd7386, (q31_t)0x3d72bc2, (q31_t)0x3d0e3fb, (q31_t)0x3ca9c32, (q31_t)0x3c45467, (q31_t)0x3be0c99, - (q31_t)0x3b7c4c9, (q31_t)0x3b17cf7, (q31_t)0x3ab3523, (q31_t)0x3a4ed4c, (q31_t)0x39ea573, (q31_t)0x3985d97, (q31_t)0x39215ba, (q31_t)0x38bcdda, - (q31_t)0x38585f8, (q31_t)0x37f3e14, (q31_t)0x378f62e, (q31_t)0x372ae46, (q31_t)0x36c665b, (q31_t)0x3661e6f, (q31_t)0x35fd680, (q31_t)0x3598e8f, - (q31_t)0x353469c, (q31_t)0x34cfea8, (q31_t)0x346b6b1, (q31_t)0x3406eb8, (q31_t)0x33a26bd, (q31_t)0x333dec0, (q31_t)0x32d96c1, (q31_t)0x3274ec0, - (q31_t)0x32106bd, (q31_t)0x31abeb9, (q31_t)0x31476b2, (q31_t)0x30e2ea9, (q31_t)0x307e69f, (q31_t)0x3019e93, (q31_t)0x2fb5684, (q31_t)0x2f50e74, - (q31_t)0x2eec663, (q31_t)0x2e87e4f, (q31_t)0x2e2363a, (q31_t)0x2dbee22, (q31_t)0x2d5a609, (q31_t)0x2cf5def, (q31_t)0x2c915d2, (q31_t)0x2c2cdb4, - (q31_t)0x2bc8594, (q31_t)0x2b63d73, (q31_t)0x2aff54f, (q31_t)0x2a9ad2a, (q31_t)0x2a36504, (q31_t)0x29d1cdc, (q31_t)0x296d4b2, (q31_t)0x2908c87, - (q31_t)0x28a445a, (q31_t)0x283fc2b, (q31_t)0x27db3fb, (q31_t)0x2776bc9, (q31_t)0x2712396, (q31_t)0x26adb62, (q31_t)0x264932b, (q31_t)0x25e4af4, - (q31_t)0x25802bb, (q31_t)0x251ba80, (q31_t)0x24b7244, (q31_t)0x2452a07, (q31_t)0x23ee1c8, (q31_t)0x2389988, (q31_t)0x2325147, (q31_t)0x22c0904, - (q31_t)0x225c0bf, (q31_t)0x21f787a, (q31_t)0x2193033, (q31_t)0x212e7eb, (q31_t)0x20c9fa1, (q31_t)0x2065757, (q31_t)0x2000f0b, (q31_t)0x1f9c6be, - (q31_t)0x1f37e6f, (q31_t)0x1ed3620, (q31_t)0x1e6edcf, (q31_t)0x1e0a57d, (q31_t)0x1da5d2a, (q31_t)0x1d414d6, (q31_t)0x1cdcc80, (q31_t)0x1c7842a, - (q31_t)0x1c13bd2, (q31_t)0x1baf37a, (q31_t)0x1b4ab20, (q31_t)0x1ae62c5, (q31_t)0x1a81a69, (q31_t)0x1a1d20c, (q31_t)0x19b89ae, (q31_t)0x1954150, - (q31_t)0x18ef8f0, (q31_t)0x188b08f, (q31_t)0x182682d, (q31_t)0x17c1fcb, (q31_t)0x175d767, (q31_t)0x16f8f03, (q31_t)0x169469d, (q31_t)0x162fe37, - (q31_t)0x15cb5d0, (q31_t)0x1566d68, (q31_t)0x15024ff, (q31_t)0x149dc96, (q31_t)0x143942b, (q31_t)0x13d4bc0, (q31_t)0x1370354, (q31_t)0x130bae7, - (q31_t)0x12a727a, (q31_t)0x1242a0c, (q31_t)0x11de19d, (q31_t)0x117992e, (q31_t)0x11150be, (q31_t)0x10b084d, (q31_t)0x104bfdb, (q31_t)0xfe7769, - (q31_t)0xf82ef6, (q31_t)0xf1e683, (q31_t)0xeb9e0f, (q31_t)0xe5559b, (q31_t)0xdf0d26, (q31_t)0xd8c4b0, (q31_t)0xd27c3a, (q31_t)0xcc33c3, - (q31_t)0xc5eb4c, (q31_t)0xbfa2d5, (q31_t)0xb95a5d, (q31_t)0xb311e4, (q31_t)0xacc96b, (q31_t)0xa680f2, (q31_t)0xa03878, (q31_t)0x99effe, - (q31_t)0x93a784, (q31_t)0x8d5f09, (q31_t)0x87168e, (q31_t)0x80ce12, (q31_t)0x7a8597, (q31_t)0x743d1a, (q31_t)0x6df49e, (q31_t)0x67ac21, - (q31_t)0x6163a5, (q31_t)0x5b1b27, (q31_t)0x54d2aa, (q31_t)0x4e8a2c, (q31_t)0x4841af, (q31_t)0x41f931, (q31_t)0x3bb0b3, (q31_t)0x356835, - (q31_t)0x2f1fb6, (q31_t)0x28d738, (q31_t)0x228eb9, (q31_t)0x1c463b, (q31_t)0x15fdbc, (q31_t)0xfb53d, (q31_t)0x96cbe, (q31_t)0x3243f -}; - #endif - -/** - @} end of DCT4_IDCT4_Table group - */ - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q15) -/** - @brief Q15 table for reciprocal -*/ -const q15_t __ALIGNED(4) 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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q31) - -/** - @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 -}; - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_F32) -/** - @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 -}; -#endif /* defined(ARM_ALL_FAST_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q31) -/** - @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] = { - 0L, 26352928L, 52701887L, 79042909L, 105372028L, 131685278L, 157978697L, - 184248325L, 210490206L, 236700388L, 262874923L, 289009871L, 315101295L, - 341145265L, 367137861L, 393075166L, 418953276L, 444768294L, 470516330L, - 496193509L, 521795963L, 547319836L, 572761285L, 598116479L, 623381598L, - 648552838L, 673626408L, 698598533L, 723465451L, 748223418L, 772868706L, - 797397602L, 821806413L, 846091463L, 870249095L, 894275671L, 918167572L, - 941921200L, 965532978L, 988999351L, 1012316784L, 1035481766L, 1058490808L, - 1081340445L, 1104027237L, 1126547765L, 1148898640L, 1171076495L, 1193077991L, - 1214899813L, 1236538675L, 1257991320L, 1279254516L, 1300325060L, 1321199781L, - 1341875533L, 1362349204L, 1382617710L, 1402678000L, 1422527051L, 1442161874L, - 1461579514L, 1480777044L, 1499751576L, 1518500250L, 1537020244L, 1555308768L, - 1573363068L, 1591180426L, 1608758157L, 1626093616L, 1643184191L, 1660027308L, - 1676620432L, 1692961062L, 1709046739L, 1724875040L, 1740443581L, 1755750017L, - 1770792044L, 1785567396L, 1800073849L, 1814309216L, 1828271356L, 1841958164L, - 1855367581L, 1868497586L, 1881346202L, 1893911494L, 1906191570L, 1918184581L, - 1929888720L, 1941302225L, 1952423377L, 1963250501L, 1973781967L, 1984016189L, - 1993951625L, 2003586779L, 2012920201L, 2021950484L, 2030676269L, 2039096241L, - 2047209133L, 2055013723L, 2062508835L, 2069693342L, 2076566160L, 2083126254L, - 2089372638L, 2095304370L, 2100920556L, 2106220352L, 2111202959L, 2115867626L, - 2120213651L, 2124240380L, 2127947206L, 2131333572L, 2134398966L, 2137142927L, - 2139565043L, 2141664948L, 2143442326L, 2144896910L, 2146028480L, 2146836866L, - 2147321946L, 2147483647L, 2147321946L, 2146836866L, 2146028480L, 2144896910L, - 2143442326L, 2141664948L, 2139565043L, 2137142927L, 2134398966L, 2131333572L, - 2127947206L, 2124240380L, 2120213651L, 2115867626L, 2111202959L, 2106220352L, - 2100920556L, 2095304370L, 2089372638L, 2083126254L, 2076566160L, 2069693342L, - 2062508835L, 2055013723L, 2047209133L, 2039096241L, 2030676269L, 2021950484L, - 2012920201L, 2003586779L, 1993951625L, 1984016189L, 1973781967L, 1963250501L, - 1952423377L, 1941302225L, 1929888720L, 1918184581L, 1906191570L, 1893911494L, - 1881346202L, 1868497586L, 1855367581L, 1841958164L, 1828271356L, 1814309216L, - 1800073849L, 1785567396L, 1770792044L, 1755750017L, 1740443581L, 1724875040L, - 1709046739L, 1692961062L, 1676620432L, 1660027308L, 1643184191L, 1626093616L, - 1608758157L, 1591180426L, 1573363068L, 1555308768L, 1537020244L, 1518500250L, - 1499751576L, 1480777044L, 1461579514L, 1442161874L, 1422527051L, 1402678000L, - 1382617710L, 1362349204L, 1341875533L, 1321199781L, 1300325060L, 1279254516L, - 1257991320L, 1236538675L, 1214899813L, 1193077991L, 1171076495L, 1148898640L, - 1126547765L, 1104027237L, 1081340445L, 1058490808L, 1035481766L, 1012316784L, - 988999351L, 965532978L, 941921200L, 918167572L, 894275671L, 870249095L, - 846091463L, 821806413L, 797397602L, 772868706L, 748223418L, 723465451L, - 698598533L, 673626408L, 648552838L, 623381598L, 598116479L, 572761285L, - 547319836L, 521795963L, 496193509L, 470516330L, 444768294L, 418953276L, - 393075166L, 367137861L, 341145265L, 315101295L, 289009871L, 262874923L, - 236700388L, 210490206L, 184248325L, 157978697L, 131685278L, 105372028L, - 79042909L, 52701887L, 26352928L, 0L, -26352928L, -52701887L, -79042909L, - -105372028L, -131685278L, -157978697L, -184248325L, -210490206L, -236700388L, - -262874923L, -289009871L, -315101295L, -341145265L, -367137861L, -393075166L, - -418953276L, -444768294L, -470516330L, -496193509L, -521795963L, -547319836L, - -572761285L, -598116479L, -623381598L, -648552838L, -673626408L, -698598533L, - -723465451L, -748223418L, -772868706L, -797397602L, -821806413L, -846091463L, - -870249095L, -894275671L, -918167572L, -941921200L, -965532978L, -988999351L, - -1012316784L, -1035481766L, -1058490808L, -1081340445L, -1104027237L, - -1126547765L, -1148898640L, -1171076495L, -1193077991L, -1214899813L, - -1236538675L, -1257991320L, -1279254516L, -1300325060L, -1321199781L, - -1341875533L, -1362349204L, -1382617710L, -1402678000L, -1422527051L, - -1442161874L, -1461579514L, -1480777044L, -1499751576L, -1518500250L, - -1537020244L, -1555308768L, -1573363068L, -1591180426L, -1608758157L, - -1626093616L, -1643184191L, -1660027308L, -1676620432L, -1692961062L, - -1709046739L, -1724875040L, -1740443581L, -1755750017L, -1770792044L, - -1785567396L, -1800073849L, -1814309216L, -1828271356L, -1841958164L, - -1855367581L, -1868497586L, -1881346202L, -1893911494L, -1906191570L, - -1918184581L, -1929888720L, -1941302225L, -1952423377L, -1963250501L, - -1973781967L, -1984016189L, -1993951625L, -2003586779L, -2012920201L, - -2021950484L, -2030676269L, -2039096241L, -2047209133L, -2055013723L, - -2062508835L, -2069693342L, -2076566160L, -2083126254L, -2089372638L, - -2095304370L, -2100920556L, -2106220352L, -2111202959L, -2115867626L, - -2120213651L, -2124240380L, -2127947206L, -2131333572L, -2134398966L, - -2137142927L, -2139565043L, -2141664948L, -2143442326L, -2144896910L, - -2146028480L, -2146836866L, -2147321946L, (q31_t)0x80000000, -2147321946L, - -2146836866L, -2146028480L, -2144896910L, -2143442326L, -2141664948L, - -2139565043L, -2137142927L, -2134398966L, -2131333572L, -2127947206L, - -2124240380L, -2120213651L, -2115867626L, -2111202959L, -2106220352L, - -2100920556L, -2095304370L, -2089372638L, -2083126254L, -2076566160L, - -2069693342L, -2062508835L, -2055013723L, -2047209133L, -2039096241L, - -2030676269L, -2021950484L, -2012920201L, -2003586779L, -1993951625L, - -1984016189L, -1973781967L, -1963250501L, -1952423377L, -1941302225L, - -1929888720L, -1918184581L, -1906191570L, -1893911494L, -1881346202L, - -1868497586L, -1855367581L, -1841958164L, -1828271356L, -1814309216L, - -1800073849L, -1785567396L, -1770792044L, -1755750017L, -1740443581L, - -1724875040L, -1709046739L, -1692961062L, -1676620432L, -1660027308L, - -1643184191L, -1626093616L, -1608758157L, -1591180426L, -1573363068L, - -1555308768L, -1537020244L, -1518500250L, -1499751576L, -1480777044L, - -1461579514L, -1442161874L, -1422527051L, -1402678000L, -1382617710L, - -1362349204L, -1341875533L, -1321199781L, -1300325060L, -1279254516L, - -1257991320L, -1236538675L, -1214899813L, -1193077991L, -1171076495L, - -1148898640L, -1126547765L, -1104027237L, -1081340445L, -1058490808L, - -1035481766L, -1012316784L, -988999351L, -965532978L, -941921200L, - -918167572L, -894275671L, -870249095L, -846091463L, -821806413L, -797397602L, - -772868706L, -748223418L, -723465451L, -698598533L, -673626408L, -648552838L, - -623381598L, -598116479L, -572761285L, -547319836L, -521795963L, -496193509L, - -470516330L, -444768294L, -418953276L, -393075166L, -367137861L, -341145265L, - -315101295L, -289009871L, -262874923L, -236700388L, -210490206L, -184248325L, - -157978697L, -131685278L, -105372028L, -79042909L, -52701887L, -26352928L, 0 -}; - -#endif /* defined(ARM_ALL_FAST_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q15) -/** - @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] = { - 0, 402, 804, 1206, 1608, 2009, 2411, 2811, 3212, 3612, 4011, 4410, 4808, - 5205, 5602, 5998, 6393, 6787, 7180, 7571, 7962, 8351, 8740, 9127, 9512, - 9896, 10279, 10660, 11039, 11417, 11793, 12167, 12540, 12910, 13279, - 13646, 14010, 14373, 14733, 15091, 15447, 15800, 16151, 16500, 16846, - 17190, 17531, 17869, 18205, 18538, 18868, 19195, 19520, 19841, 20160, - 20475, 20788, 21097, 21403, 21706, 22006, 22302, 22595, 22884, 23170, - 23453, 23732, 24008, 24279, 24548, 24812, 25073, 25330, 25583, 25833, - 26078, 26320, 26557, 26791, 27020, 27246, 27467, 27684, 27897, 28106, - 28311, 28511, 28707, 28899, 29086, 29269, 29448, 29622, 29792, 29957, - 30118, 30274, 30425, 30572, 30715, 30853, 30986, 31114, 31238, 31357, - 31471, 31581, 31686, 31786, 31881, 31972, 32058, 32138, 32214, 32286, - 32352, 32413, 32470, 32522, 32568, 32610, 32647, 32679, 32706, 32729, - 32746, 32758, 32766, 32767, 32766, 32758, 32746, 32729, 32706, 32679, - 32647, 32610, 32568, 32522, 32470, 32413, 32352, 32286, 32214, 32138, - 32058, 31972, 31881, 31786, 31686, 31581, 31471, 31357, 31238, 31114, - 30986, 30853, 30715, 30572, 30425, 30274, 30118, 29957, 29792, 29622, - 29448, 29269, 29086, 28899, 28707, 28511, 28311, 28106, 27897, 27684, - 27467, 27246, 27020, 26791, 26557, 26320, 26078, 25833, 25583, 25330, - 25073, 24812, 24548, 24279, 24008, 23732, 23453, 23170, 22884, 22595, - 22302, 22006, 21706, 21403, 21097, 20788, 20475, 20160, 19841, 19520, - 19195, 18868, 18538, 18205, 17869, 17531, 17190, 16846, 16500, 16151, - 15800, 15447, 15091, 14733, 14373, 14010, 13646, 13279, 12910, 12540, - 12167, 11793, 11417, 11039, 10660, 10279, 9896, 9512, 9127, 8740, 8351, - 7962, 7571, 7180, 6787, 6393, 5998, 5602, 5205, 4808, 4410, 4011, 3612, - 3212, 2811, 2411, 2009, 1608, 1206, 804, 402, 0, -402, -804, -1206, - -1608, -2009, -2411, -2811, -3212, -3612, -4011, -4410, -4808, -5205, - -5602, -5998, -6393, -6787, -7180, -7571, -7962, -8351, -8740, -9127, - -9512, -9896, -10279, -10660, -11039, -11417, -11793, -12167, -12540, - -12910, -13279, -13646, -14010, -14373, -14733, -15091, -15447, -15800, - -16151, -16500, -16846, -17190, -17531, -17869, -18205, -18538, -18868, - -19195, -19520, -19841, -20160, -20475, -20788, -21097, -21403, -21706, - -22006, -22302, -22595, -22884, -23170, -23453, -23732, -24008, -24279, - -24548, -24812, -25073, -25330, -25583, -25833, -26078, -26320, -26557, - -26791, -27020, -27246, -27467, -27684, -27897, -28106, -28311, -28511, - -28707, -28899, -29086, -29269, -29448, -29622, -29792, -29957, -30118, - -30274, -30425, -30572, -30715, -30853, -30986, -31114, -31238, -31357, - -31471, -31581, -31686, -31786, -31881, -31972, -32058, -32138, -32214, - -32286, -32352, -32413, -32470, -32522, -32568, -32610, -32647, -32679, - -32706, -32729, -32746, -32758, -32766, -32768, -32766, -32758, -32746, - -32729, -32706, -32679, -32647, -32610, -32568, -32522, -32470, -32413, - -32352, -32286, -32214, -32138, -32058, -31972, -31881, -31786, -31686, - -31581, -31471, -31357, -31238, -31114, -30986, -30853, -30715, -30572, - -30425, -30274, -30118, -29957, -29792, -29622, -29448, -29269, -29086, - -28899, -28707, -28511, -28311, -28106, -27897, -27684, -27467, -27246, - -27020, -26791, -26557, -26320, -26078, -25833, -25583, -25330, -25073, - -24812, -24548, -24279, -24008, -23732, -23453, -23170, -22884, -22595, - -22302, -22006, -21706, -21403, -21097, -20788, -20475, -20160, -19841, - -19520, -19195, -18868, -18538, -18205, -17869, -17531, -17190, -16846, - -16500, -16151, -15800, -15447, -15091, -14733, -14373, -14010, -13646, - -13279, -12910, -12540, -12167, -11793, -11417, -11039, -10660, -10279, - -9896, -9512, -9127, -8740, -8351, -7962, -7571, -7180, -6787, -6393, - -5998, -5602, -5205, -4808, -4410, -4011, -3612, -3212, -2811, -2411, - -2009, -1608, -1206, -804, -402, 0 -}; -#endif /* defined(ARM_ALL_FAST_TABLES) */ - -#if defined(ARM_MATH_MVEI) - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q31_MVE) -const q31_t sqrtTable_Q31[256] = { - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x5ffffffe, 0x7ffffffa, 0x5e88c596, 0x7a39e2ff, - 0x5d2238d8, 0x74dfa6b1, 0x5bcb268e, 0x6fe69562, - 0x5a827998, 0x6b454dba, 0x5947373a, 0x66f39063, - 0x58187bf8, 0x62ea1669, 0x56f578e6, 0x5f226e5f, - 0x55dd714e, 0x5b96df40, 0x54cfb8b0, 0x58424fca, - 0x53cbb102, 0x552031c7, 0x52d0c92c, 0x522c7048, - 0x51de7bb2, 0x4f6360a9, 0x50f44d86, 0x4cc1b594, - 0x5011cd0a, 0x4a4473f6, 0x4f36911a, 0x47e8e962, - 0x4e62384e, 0x45aca3d0, 0x4d946838, 0x438d6a6a, - 0x4cccccca, 0x41893746, 0x4c0b17c0, 0x3f9e31fa, - 0x4b4f0022, 0x3dcaaac3, 0x4a9841ce, 0x3c0d1660, - 0x49e69d14, 0x3a640a53, 0x4939d654, 0x38ce39a6, - 0x4891b5b2, 0x374a720b, 0x47ee06ba, 0x35d7993c, - 0x474e9830, 0x3474aacc, 0x46b33bc0, 0x3320b60c, - 0x461bc5d2, 0x31dadc4f, 0x45880d4c, 0x30a24f3c, - 0x44f7eb6a, 0x2f764f6a, 0x446b3b92, 0x2e562b0b, - 0x43e1db32, 0x2d413cc9, 0x435ba98a, 0x2c36eab0, - 0x42d887a4, 0x2b36a542, 0x42585824, 0x2a3fe69b, - 0x41daff34, 0x295231b0, 0x41606266, 0x286d118d, - 0x40e868a4, 0x279018c3, 0x4072fa10, 0x26bae0c8, - 0x3ffffffe, 0x25ed0979, 0x3f8f64d2, 0x25263894, - 0x3f2113f8, 0x24661958, 0x3eb4f9d8, 0x23ac5c10, - 0x3e4b03ba, 0x22f8b5bb, 0x3de31fc4, 0x224adfba, - 0x3d7d3cee, 0x21a2977a, 0x3d194ae8, 0x20ff9e30, - 0x3cb73a24, 0x2061b89a, 0x3c56fbba, 0x1fc8aebb, - 0x3bf88166, 0x1f344ba6, 0x3b9bbd80, 0x1ea45d4b, - 0x3b40a2f0, 0x1e18b448, 0x3ae7252e, 0x1d9123b9, - 0x3a8f382c, 0x1d0d8113, 0x3a38d062, 0x1c8da3fb, - 0x39e3e2b6, 0x1c116628, 0x39906482, 0x1b98a33c, - 0x393e4b8a, 0x1b2338aa, 0x38ed8df6, 0x1ab1059a, - 0x389e2250, 0x1a41eace, 0x384fff7a, 0x19d5ca89, - 0x38031cb2, 0x196c887b, 0x37b77184, 0x190609a9, - 0x376cf5ce, 0x18a2345b, 0x3723a1ba, 0x1840f00a, - 0x36db6db6, 0x17e22550, 0x36945276, 0x1785bdd2, - 0x364e48f4, 0x172ba43e, 0x36094a64, 0x16d3c42c, - 0x35c55036, 0x167e0a1f, 0x35825414, 0x162a6372, - 0x35404fde, 0x15d8be4d, 0x34ff3dac, 0x1589099d, - 0x34bf17c4, 0x153b3508, 0x347fd89e, 0x14ef30e4, - 0x34417ade, 0x14a4ee2a, 0x3403f956, 0x145c5e76, - 0x33c74f02, 0x141573fa, 0x338b7706, 0x13d02171, - 0x33506cae, 0x138c5a28, 0x33162b6a, 0x134a11e6, - 0x32dcaed0, 0x13093cee, 0x32a3f294, 0x12c9cffa, - 0x326bf292, 0x128bc034, 0x3234aac0, 0x124f0330, - 0x31fe1736, 0x12138ee5, 0x31c83428, 0x11d959b0, - 0x3192fde6, 0x11a05a45, 0x315e70de, 0x116887b5, - 0x312a8994, 0x1131d960, 0x30f744aa, 0x10fc46fd, - 0x30c49ed6, 0x10c7c88b, 0x309294ea, 0x10945653, - 0x306123cc, 0x1061e8e6, 0x30304878, 0x10307919 -}; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q15_MVE) -const q15_t sqrtTable_Q15[256] = { - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x5fff, 0x7fff, 0x5e88, 0x7a39, - 0x5d22, 0x74df, 0x5bcb, 0x6fe6, - 0x5a82, 0x6b45, 0x5947, 0x66f3, - 0x5818, 0x62ea, 0x56f5, 0x5f22, - 0x55dd, 0x5b96, 0x54cf, 0x5842, - 0x53cb, 0x5520, 0x52d0, 0x522c, - 0x51de, 0x4f63, 0x50f4, 0x4cc1, - 0x5011, 0x4a44, 0x4f36, 0x47e8, - 0x4e62, 0x45ac, 0x4d94, 0x438d, - 0x4ccc, 0x4189, 0x4c0b, 0x3f9e, - 0x4b4f, 0x3dca, 0x4a98, 0x3c0d, - 0x49e6, 0x3a64, 0x4939, 0x38ce, - 0x4891, 0x374a, 0x47ee, 0x35d7, - 0x474e, 0x3474, 0x46b3, 0x3320, - 0x461b, 0x31da, 0x4588, 0x30a2, - 0x44f7, 0x2f76, 0x446b, 0x2e56, - 0x43e1, 0x2d41, 0x435b, 0x2c36, - 0x42d8, 0x2b36, 0x4258, 0x2a3f, - 0x41da, 0x2952, 0x4160, 0x286d, - 0x40e8, 0x2790, 0x4072, 0x26ba, - 0x3fff, 0x25ed, 0x3f8f, 0x2526, - 0x3f21, 0x2466, 0x3eb4, 0x23ac, - 0x3e4b, 0x22f8, 0x3de3, 0x224a, - 0x3d7d, 0x21a2, 0x3d19, 0x20ff, - 0x3cb7, 0x2061, 0x3c56, 0x1fc8, - 0x3bf8, 0x1f34, 0x3b9b, 0x1ea4, - 0x3b40, 0x1e18, 0x3ae7, 0x1d91, - 0x3a8f, 0x1d0d, 0x3a38, 0x1c8d, - 0x39e3, 0x1c11, 0x3990, 0x1b98, - 0x393e, 0x1b23, 0x38ed, 0x1ab1, - 0x389e, 0x1a41, 0x384f, 0x19d5, - 0x3803, 0x196c, 0x37b7, 0x1906, - 0x376c, 0x18a2, 0x3723, 0x1840, - 0x36db, 0x17e2, 0x3694, 0x1785, - 0x364e, 0x172b, 0x3609, 0x16d3, - 0x35c5, 0x167e, 0x3582, 0x162a, - 0x3540, 0x15d8, 0x34ff, 0x1589, - 0x34bf, 0x153b, 0x347f, 0x14ef, - 0x3441, 0x14a4, 0x3403, 0x145c, - 0x33c7, 0x1415, 0x338b, 0x13d0, - 0x3350, 0x138c, 0x3316, 0x134a, - 0x32dc, 0x1309, 0x32a3, 0x12c9, - 0x326b, 0x128b, 0x3234, 0x124f, - 0x31fe, 0x1213, 0x31c8, 0x11d9, - 0x3192, 0x11a0, 0x315e, 0x1168, - 0x312a, 0x1131, 0x30f7, 0x10fc, - 0x30c4, 0x10c7, 0x3092, 0x1094, - 0x3061, 0x1061, 0x3030, 0x1030 -}; - #endif -#endif /* defined(ARM_MATH_MVEI) */ - - -#endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_TABLES) */ - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) -const float32_t exp_tab[8] = { - (1.f), - (0.0416598916054f), - (0.500000596046f), - (0.0014122662833f), - (1.00000011921f), - (0.00833693705499f), - (0.166665703058f), - (0.000195780929062f), -}; - -const float32_t __logf_lut_f32[8] = { - -2.295614848256274, /*p0*/ - -2.470711633419806, /*p4*/ - -5.686926051100417, /*p2*/ - -0.165253547131978, /*p6*/ - +5.175912446351073, /*p1*/ - +0.844006986174912, /*p5*/ - +4.584458825456749, /*p3*/ - +0.014127821926000 /*p7*/ -}; - -#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) - -/* haming weight LUT for bytes */ -#define B2(n) n, n + 1, n + 1, n + 2 -#define B4(n) B2(n) , B2(n + 1), B2(n + 1), B2(n + 2) -#define B6(n) B4(n) , B4(n + 1), B4(n + 1), B4(n + 2) - -// Lookup table that store the reverse of each table -const unsigned char hwLUT[256] = { B6(0), B6(1), B6(1), B6(2) }; - -#endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_const_structs.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_const_structs.c deleted file mode 100644 index fcec3bc..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_const_structs.c +++ /dev/null @@ -1,663 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_const_structs.c - * Description: Constant structs that are initialized for user convenience. - * For example, some can be given as arguments to the arm_cfft_f32() or arm_rfft_f32() functions. - * - * $Date: 27. January 2017 - * $Revision: V.1.5.1 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_const_structs.h" - -/* -ALLOW TABLE is true when config table is enabled and the Tramsform folder is included -for compilation. -*/ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -/* Floating-point structs */ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_16) && defined(ARM_TABLE_BITREVIDX_FLT64_16)) -const arm_cfft_instance_f64 arm_cfft_sR_f64_len16 = { - 16, (const float64_t *)twiddleCoefF64_16, armBitRevIndexTableF64_16, ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_32) && defined(ARM_TABLE_BITREVIDX_FLT64_32)) -const arm_cfft_instance_f64 arm_cfft_sR_f64_len32 = { - 32, (const float64_t *)twiddleCoefF64_32, armBitRevIndexTableF64_32, ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_64) && defined(ARM_TABLE_BITREVIDX_FLT64_64)) -const arm_cfft_instance_f64 arm_cfft_sR_f64_len64 = { - 64, (const float64_t *)twiddleCoefF64_64, armBitRevIndexTableF64_64, ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_128) && defined(ARM_TABLE_BITREVIDX_FLT64_128)) -const arm_cfft_instance_f64 arm_cfft_sR_f64_len128 = { - 128, (const float64_t *)twiddleCoefF64_128, armBitRevIndexTableF64_128, ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_256) && defined(ARM_TABLE_BITREVIDX_FLT64_256)) -const arm_cfft_instance_f64 arm_cfft_sR_f64_len256 = { - 256, (const float64_t *)twiddleCoefF64_256, armBitRevIndexTableF64_256, ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_512) && defined(ARM_TABLE_BITREVIDX_FLT64_512)) -const arm_cfft_instance_f64 arm_cfft_sR_f64_len512 = { - 512, (const float64_t *)twiddleCoefF64_512, armBitRevIndexTableF64_512, ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_1024) && defined(ARM_TABLE_BITREVIDX_FLT64_1024)) -const arm_cfft_instance_f64 arm_cfft_sR_f64_len1024 = { - 1024, (const float64_t *)twiddleCoefF64_1024, armBitRevIndexTableF64_1024, ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_2048) && defined(ARM_TABLE_BITREVIDX_FLT64_2048)) -const arm_cfft_instance_f64 arm_cfft_sR_f64_len2048 = { - 2048, (const float64_t *)twiddleCoefF64_2048, armBitRevIndexTableF64_2048, ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_4096) && defined(ARM_TABLE_BITREVIDX_FLT64_4096)) -const arm_cfft_instance_f64 arm_cfft_sR_f64_len4096 = { - 4096, (const float64_t *)twiddleCoefF64_4096, armBitRevIndexTableF64_4096, ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH -}; -#endif - -/* Floating-point structs */ -#if !defined(ARM_MATH_MVEF) || defined(ARM_MATH_AUTOVECTORIZE) - -/* - -Those structures cannot be used to initialize the MVE version of the FFT F32 instances. -So they are not compiled when MVE is defined. - -For the MVE version, the new arm_cfft_init_f32 must be used. - - -*/ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_BITREVIDX_FLT_16)) -const arm_cfft_instance_f32 arm_cfft_sR_f32_len16 = { - 16, twiddleCoef_16, armBitRevIndexTable16, ARMBITREVINDEXTABLE_16_TABLE_LENGTH -}; -#endif - - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32)) -const arm_cfft_instance_f32 arm_cfft_sR_f32_len32 = { - 32, twiddleCoef_32, armBitRevIndexTable32, ARMBITREVINDEXTABLE_32_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_BITREVIDX_FLT_64)) -const arm_cfft_instance_f32 arm_cfft_sR_f32_len64 = { - 64, twiddleCoef_64, armBitRevIndexTable64, ARMBITREVINDEXTABLE_64_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_BITREVIDX_FLT_128)) -const arm_cfft_instance_f32 arm_cfft_sR_f32_len128 = { - 128, twiddleCoef_128, armBitRevIndexTable128, ARMBITREVINDEXTABLE_128_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_BITREVIDX_FLT_256)) -const arm_cfft_instance_f32 arm_cfft_sR_f32_len256 = { - 256, twiddleCoef_256, armBitRevIndexTable256, ARMBITREVINDEXTABLE_256_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_BITREVIDX_FLT_512)) -const arm_cfft_instance_f32 arm_cfft_sR_f32_len512 = { - 512, twiddleCoef_512, armBitRevIndexTable512, ARMBITREVINDEXTABLE_512_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024)) -const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024 = { - 1024, twiddleCoef_1024, armBitRevIndexTable1024, ARMBITREVINDEXTABLE_1024_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048)) -const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048 = { - 2048, twiddleCoef_2048, armBitRevIndexTable2048, ARMBITREVINDEXTABLE_2048_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_4096) && defined(ARM_TABLE_BITREVIDX_FLT_4096)) -const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096 = { - 4096, twiddleCoef_4096, armBitRevIndexTable4096, ARMBITREVINDEXTABLE_4096_TABLE_LENGTH -}; -#endif - -#endif /* !defined(ARM_MATH_MVEF) || defined(ARM_MATH_AUTOVECTORIZE) */ - -/* Fixed-point structs */ - -#if !defined(ARM_MATH_MVEI) - -/* - -Those structures cannot be used to initialize the MVE version of the FFT Q31 instances. -So they are not compiled when MVE is defined. - -For the MVE version, the new arm_cfft_init_f32 must be used. - - -*/ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_16) && defined(ARM_TABLE_BITREVIDX_FXT_16)) -const arm_cfft_instance_q31 arm_cfft_sR_q31_len16 = { - 16, twiddleCoef_16_q31, armBitRevIndexTable_fixed_16, ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_32) && defined(ARM_TABLE_BITREVIDX_FXT_32)) -const arm_cfft_instance_q31 arm_cfft_sR_q31_len32 = { - 32, twiddleCoef_32_q31, armBitRevIndexTable_fixed_32, ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_64) && defined(ARM_TABLE_BITREVIDX_FXT_64)) -const arm_cfft_instance_q31 arm_cfft_sR_q31_len64 = { - 64, twiddleCoef_64_q31, armBitRevIndexTable_fixed_64, ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_128) && defined(ARM_TABLE_BITREVIDX_FXT_128)) -const arm_cfft_instance_q31 arm_cfft_sR_q31_len128 = { - 128, twiddleCoef_128_q31, armBitRevIndexTable_fixed_128, ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_256) && defined(ARM_TABLE_BITREVIDX_FXT_256)) -const arm_cfft_instance_q31 arm_cfft_sR_q31_len256 = { - 256, twiddleCoef_256_q31, armBitRevIndexTable_fixed_256, ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_512) && defined(ARM_TABLE_BITREVIDX_FXT_512)) -const arm_cfft_instance_q31 arm_cfft_sR_q31_len512 = { - 512, twiddleCoef_512_q31, armBitRevIndexTable_fixed_512, ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) && defined(ARM_TABLE_BITREVIDX_FXT_1024)) -const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024 = { - 1024, twiddleCoef_1024_q31, armBitRevIndexTable_fixed_1024, ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) && defined(ARM_TABLE_BITREVIDX_FXT_2048)) -const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048 = { - 2048, twiddleCoef_2048_q31, armBitRevIndexTable_fixed_2048, ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) && defined(ARM_TABLE_BITREVIDX_FXT_4096)) -const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096 = { - 4096, twiddleCoef_4096_q31, armBitRevIndexTable_fixed_4096, ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH -}; -#endif - - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_16) && defined(ARM_TABLE_BITREVIDX_FXT_16)) -const arm_cfft_instance_q15 arm_cfft_sR_q15_len16 = { - 16, twiddleCoef_16_q15, armBitRevIndexTable_fixed_16, ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_32) && defined(ARM_TABLE_BITREVIDX_FXT_32)) -const arm_cfft_instance_q15 arm_cfft_sR_q15_len32 = { - 32, twiddleCoef_32_q15, armBitRevIndexTable_fixed_32, ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_64) && defined(ARM_TABLE_BITREVIDX_FXT_64)) -const arm_cfft_instance_q15 arm_cfft_sR_q15_len64 = { - 64, twiddleCoef_64_q15, armBitRevIndexTable_fixed_64, ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_128) && defined(ARM_TABLE_BITREVIDX_FXT_128)) -const arm_cfft_instance_q15 arm_cfft_sR_q15_len128 = { - 128, twiddleCoef_128_q15, armBitRevIndexTable_fixed_128, ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_256) && defined(ARM_TABLE_BITREVIDX_FXT_256)) -const arm_cfft_instance_q15 arm_cfft_sR_q15_len256 = { - 256, twiddleCoef_256_q15, armBitRevIndexTable_fixed_256, ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_512) && defined(ARM_TABLE_BITREVIDX_FXT_512)) -const arm_cfft_instance_q15 arm_cfft_sR_q15_len512 = { - 512, twiddleCoef_512_q15, armBitRevIndexTable_fixed_512, ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) && defined(ARM_TABLE_BITREVIDX_FXT_1024)) -const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024 = { - 1024, twiddleCoef_1024_q15, armBitRevIndexTable_fixed_1024, ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) && defined(ARM_TABLE_BITREVIDX_FXT_2048)) -const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048 = { - 2048, twiddleCoef_2048_q15, armBitRevIndexTable_fixed_2048, ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) && defined(ARM_TABLE_BITREVIDX_FXT_4096)) -const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096 = { - 4096, twiddleCoef_4096_q15, armBitRevIndexTable_fixed_4096, ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH -}; -#endif - -#endif /* !defined(ARM_MATH_MVEI) */ - -/* Structure for real-value inputs */ -/* Double precision strucs */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_32) && defined(ARM_TABLE_BITREVIDX_FLT64_32) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_32)) -const arm_rfft_fast_instance_f64 arm_rfft_fast_sR_f64_len32 = { - { 16, (const float64_t *)twiddleCoefF64_16, armBitRevIndexTableF64_16, ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH }, - 32U, - (float64_t *)twiddleCoefF64_rfft_32 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_64) && defined(ARM_TABLE_BITREVIDX_FLT64_64) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_64)) -const arm_rfft_fast_instance_f64 arm_rfft_fast_sR_f64_len64 = { - { 32, (const float64_t *)twiddleCoefF64_32, armBitRevIndexTableF64_32, ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH }, - 64U, - (float64_t *)twiddleCoefF64_rfft_64 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_128) && defined(ARM_TABLE_BITREVIDX_FLT64_128) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_128)) -const arm_rfft_fast_instance_f64 arm_rfft_fast_sR_f64_len128 = { - { 64, (const float64_t *)twiddleCoefF64_64, armBitRevIndexTableF64_64, ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH }, - 128U, - (float64_t *)twiddleCoefF64_rfft_128 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_256) && defined(ARM_TABLE_BITREVIDX_FLT64_256) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_256)) -const arm_rfft_fast_instance_f64 arm_rfft_fast_sR_f64_len256 = { - { 128, (const float64_t *)twiddleCoefF64_128, armBitRevIndexTableF64_128, ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH }, - 256U, - (float64_t *)twiddleCoefF64_rfft_256 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_512) && defined(ARM_TABLE_BITREVIDX_FLT64_512) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_512)) -const arm_rfft_fast_instance_f64 arm_rfft_fast_sR_f64_len512 = { - { 256, (const float64_t *)twiddleCoefF64_256, armBitRevIndexTableF64_256, ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH }, - 512U, - (float64_t *)twiddleCoefF64_rfft_512 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_1024) && defined(ARM_TABLE_BITREVIDX_FLT64_1024) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_1024)) -const arm_rfft_fast_instance_f64 arm_rfft_fast_sR_f64_len1024 = { - { 512, (const float64_t *)twiddleCoefF64_512, armBitRevIndexTableF64_512, ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH }, - 1024U, - (float64_t *)twiddleCoefF64_rfft_1024 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_2048) && defined(ARM_TABLE_BITREVIDX_FLT64_2048) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_2048)) -const arm_rfft_fast_instance_f64 arm_rfft_fast_sR_f64_len2048 = { - { 1024, (const float64_t *)twiddleCoefF64_1024, armBitRevIndexTableF64_1024, ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH }, - 2048U, - (float64_t *)twiddleCoefF64_rfft_2048 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_4096) && defined(ARM_TABLE_BITREVIDX_FLT64_4096) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_4096)) -const arm_rfft_fast_instance_f64 arm_rfft_fast_sR_f64_len4096 = { - { 2048, (const float64_t *)twiddleCoefF64_2048, armBitRevIndexTableF64_2048, ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH }, - 4096U, - (float64_t *)twiddleCoefF64_rfft_4096 -}; -#endif - -/* Floating-point structs */ - -#if !defined(ARM_MATH_MVEF) || defined(ARM_MATH_AUTOVECTORIZE) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32)) -const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len32 = { - { 16, twiddleCoef_16, armBitRevIndexTable16, ARMBITREVINDEXTABLE_16_TABLE_LENGTH }, - 32U, - (float32_t *)twiddleCoef_rfft_32 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_BITREVIDX_FLT_64) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64)) -const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len64 = { - { 32, twiddleCoef_32, armBitRevIndexTable32, ARMBITREVINDEXTABLE_32_TABLE_LENGTH }, - 64U, - (float32_t *)twiddleCoef_rfft_64 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_BITREVIDX_FLT_128) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128)) -const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len128 = { - { 64, twiddleCoef_64, armBitRevIndexTable64, ARMBITREVINDEXTABLE_64_TABLE_LENGTH }, - 128U, - (float32_t *)twiddleCoef_rfft_128 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_BITREVIDX_FLT_256) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256)) -const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len256 = { - { 128, twiddleCoef_128, armBitRevIndexTable128, ARMBITREVINDEXTABLE_128_TABLE_LENGTH }, - 256U, - (float32_t *)twiddleCoef_rfft_256 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_BITREVIDX_FLT_512) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512)) -const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len512 = { - { 256, twiddleCoef_256, armBitRevIndexTable256, ARMBITREVINDEXTABLE_256_TABLE_LENGTH }, - 512U, - (float32_t *)twiddleCoef_rfft_512 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024)) -const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len1024 = { - { 512, twiddleCoef_512, armBitRevIndexTable512, ARMBITREVINDEXTABLE_512_TABLE_LENGTH }, - 1024U, - (float32_t *)twiddleCoef_rfft_1024 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048)) -const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len2048 = { - { 1024, twiddleCoef_1024, armBitRevIndexTable1024, ARMBITREVINDEXTABLE_1024_TABLE_LENGTH }, - 2048U, - (float32_t *)twiddleCoef_rfft_2048 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_4096) && defined(ARM_TABLE_BITREVIDX_FLT_4096) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096)) -const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len4096 = { - { 2048, twiddleCoef_2048, armBitRevIndexTable2048, ARMBITREVINDEXTABLE_2048_TABLE_LENGTH }, - 4096U, - (float32_t *)twiddleCoef_rfft_4096 -}; -#endif - -#endif /* #if !defined(ARM_MATH_MVEF) || defined(ARM_MATH_AUTOVECTORIZE) */ - -/* Fixed-point structs */ -/* q31_t */ - -#if !defined(ARM_MATH_MVEI) - -/* - -Those structures cannot be used to initialize the MVE version of the FFT Q31 instances. -So they are not compiled when MVE is defined. - -For the MVE version, the new arm_cfft_init_f32 must be used. - - -*/ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q31) && defined(ARM_TABLE_TWIDDLECOEF_Q31_16) && defined(ARM_TABLE_BITREVIDX_FXT_16)) -const arm_rfft_instance_q31 arm_rfft_sR_q31_len32 = { - 32U, - 0, - 1, - 256U, - (q31_t*)realCoefAQ31, - (q31_t*)realCoefBQ31, - &arm_cfft_sR_q31_len16 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q31) && defined(ARM_TABLE_TWIDDLECOEF_Q31_32) && defined(ARM_TABLE_BITREVIDX_FXT_32)) -const arm_rfft_instance_q31 arm_rfft_sR_q31_len64 = { - 64U, - 0, - 1, - 128U, - (q31_t*)realCoefAQ31, - (q31_t*)realCoefBQ31, - &arm_cfft_sR_q31_len32 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q31) && defined(ARM_TABLE_TWIDDLECOEF_Q31_64) && defined(ARM_TABLE_BITREVIDX_FXT_64)) -const arm_rfft_instance_q31 arm_rfft_sR_q31_len128 = { - 128U, - 0, - 1, - 64U, - (q31_t*)realCoefAQ31, - (q31_t*)realCoefBQ31, - &arm_cfft_sR_q31_len64 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q31) && defined(ARM_TABLE_TWIDDLECOEF_Q31_128) && defined(ARM_TABLE_BITREVIDX_FXT_128)) -const arm_rfft_instance_q31 arm_rfft_sR_q31_len256 = { - 256U, - 0, - 1, - 32U, - (q31_t*)realCoefAQ31, - (q31_t*)realCoefBQ31, - &arm_cfft_sR_q31_len128 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q31) && defined(ARM_TABLE_TWIDDLECOEF_Q31_256) && defined(ARM_TABLE_BITREVIDX_FXT_256)) -const arm_rfft_instance_q31 arm_rfft_sR_q31_len512 = { - 512U, - 0, - 1, - 16U, - (q31_t*)realCoefAQ31, - (q31_t*)realCoefBQ31, - &arm_cfft_sR_q31_len256 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q31) && defined(ARM_TABLE_TWIDDLECOEF_Q31_512) && defined(ARM_TABLE_BITREVIDX_FXT_512)) -const arm_rfft_instance_q31 arm_rfft_sR_q31_len1024 = { - 1024U, - 0, - 1, - 8U, - (q31_t*)realCoefAQ31, - (q31_t*)realCoefBQ31, - &arm_cfft_sR_q31_len512 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q31) && defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) && defined(ARM_TABLE_BITREVIDX_FXT_1024)) -const arm_rfft_instance_q31 arm_rfft_sR_q31_len2048 = { - 2048U, - 0, - 1, - 4U, - (q31_t*)realCoefAQ31, - (q31_t*)realCoefBQ31, - &arm_cfft_sR_q31_len1024 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q31) && defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) && defined(ARM_TABLE_BITREVIDX_FXT_2048)) -const arm_rfft_instance_q31 arm_rfft_sR_q31_len4096 = { - 4096U, - 0, - 1, - 2U, - (q31_t*)realCoefAQ31, - (q31_t*)realCoefBQ31, - &arm_cfft_sR_q31_len2048 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q31) && defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) && defined(ARM_TABLE_BITREVIDX_FXT_4096)) -const arm_rfft_instance_q31 arm_rfft_sR_q31_len8192 = { - 8192U, - 0, - 1, - 1U, - (q31_t*)realCoefAQ31, - (q31_t*)realCoefBQ31, - &arm_cfft_sR_q31_len4096 -}; -#endif - - - -/* q15_t */ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q15) && defined(ARM_TABLE_TWIDDLECOEF_Q15_16) && defined(ARM_TABLE_BITREVIDX_FXT_16)) -const arm_rfft_instance_q15 arm_rfft_sR_q15_len32 = { - 32U, - 0, - 1, - 256U, - (q15_t*)realCoefAQ15, - (q15_t*)realCoefBQ15, - &arm_cfft_sR_q15_len16 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q15) && defined(ARM_TABLE_TWIDDLECOEF_Q15_32) && defined(ARM_TABLE_BITREVIDX_FXT_32)) -const arm_rfft_instance_q15 arm_rfft_sR_q15_len64 = { - 64U, - 0, - 1, - 128U, - (q15_t*)realCoefAQ15, - (q15_t*)realCoefBQ15, - &arm_cfft_sR_q15_len32 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q15) && defined(ARM_TABLE_TWIDDLECOEF_Q15_64) && defined(ARM_TABLE_BITREVIDX_FXT_64)) -const arm_rfft_instance_q15 arm_rfft_sR_q15_len128 = { - 128U, - 0, - 1, - 64U, - (q15_t*)realCoefAQ15, - (q15_t*)realCoefBQ15, - &arm_cfft_sR_q15_len64 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q15) && defined(ARM_TABLE_TWIDDLECOEF_Q15_128) && defined(ARM_TABLE_BITREVIDX_FXT_128)) -const arm_rfft_instance_q15 arm_rfft_sR_q15_len256 = { - 256U, - 0, - 1, - 32U, - (q15_t*)realCoefAQ15, - (q15_t*)realCoefBQ15, - &arm_cfft_sR_q15_len128 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q15) && defined(ARM_TABLE_TWIDDLECOEF_Q15_256) && defined(ARM_TABLE_BITREVIDX_FXT_256)) -const arm_rfft_instance_q15 arm_rfft_sR_q15_len512 = { - 512U, - 0, - 1, - 16U, - (q15_t*)realCoefAQ15, - (q15_t*)realCoefBQ15, - &arm_cfft_sR_q15_len256 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q15) && defined(ARM_TABLE_TWIDDLECOEF_Q15_512) && defined(ARM_TABLE_BITREVIDX_FXT_512)) -const arm_rfft_instance_q15 arm_rfft_sR_q15_len1024 = { - 1024U, - 0, - 1, - 8U, - (q15_t*)realCoefAQ15, - (q15_t*)realCoefBQ15, - &arm_cfft_sR_q15_len512 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q15) && defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) && defined(ARM_TABLE_BITREVIDX_FXT_1024)) -const arm_rfft_instance_q15 arm_rfft_sR_q15_len2048 = { - 2048U, - 0, - 1, - 4U, - (q15_t*)realCoefAQ15, - (q15_t*)realCoefBQ15, - &arm_cfft_sR_q15_len1024 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q15) && defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) && defined(ARM_TABLE_BITREVIDX_FXT_2048)) -const arm_rfft_instance_q15 arm_rfft_sR_q15_len4096 = { - 4096U, - 0, - 1, - 2U, - (q15_t*)realCoefAQ15, - (q15_t*)realCoefBQ15, - &arm_cfft_sR_q15_len2048 -}; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_REALCOEF_Q15) && defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) && defined(ARM_TABLE_BITREVIDX_FXT_4096)) -const arm_rfft_instance_q15 arm_rfft_sR_q15_len8192 = { - 8192U, - 0, - 1, - 1U, - (q15_t*)realCoefAQ15, - (q15_t*)realCoefBQ15, - &arm_cfft_sR_q15_len4096 -}; -#endif - -#endif /* !defined(ARM_MATH_MVEI) */ - - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_mve_tables.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_mve_tables.c deleted file mode 100644 index 0cd002a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/CommonTables/arm_mve_tables.c +++ /dev/null @@ -1,6542 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mve_tables.c - * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc - * used for MVE implementation only - * - * $Date: 08. January 2020 - * $Revision: V1.7.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#include "arm_math.h" - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) - -uint32_t rearranged_twiddle_tab_stride1_arr_16_f32[2]={ -0,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_16_f32[2]={ -0,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_16_f32[2]={ -0,0,}; - -float32_t rearranged_twiddle_stride1_16_f32[8]={ -1.00000000000000000000f,0.00000000000000000000f,0.92387953251128673848f, -0.38268343236508978178f,0.70710678118654757274f,0.70710678118654757274f, -0.38268343236508983729f,0.92387953251128673848f,}; - -float32_t rearranged_twiddle_stride2_16_f32[8]={ -1.00000000000000000000f,0.00000000000000000000f,0.70710678118654757274f, -0.70710678118654757274f,0.00000000000000006123f,1.00000000000000000000f, --0.70710678118654746172f,0.70710678118654757274f,}; - -float32_t rearranged_twiddle_stride3_16_f32[8]={ -1.00000000000000000000f,0.00000000000000000000f,0.38268343236508983729f, -0.92387953251128673848f,-0.70710678118654746172f,0.70710678118654757274f, --0.92387953251128684951f,-0.38268343236508967076f,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) - -uint32_t rearranged_twiddle_tab_stride1_arr_64_f32[3]={ -0,32,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_64_f32[3]={ -0,32,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_64_f32[3]={ -0,32,0,}; - -float32_t rearranged_twiddle_stride1_64_f32[40]={ -1.00000000000000000000f,0.00000000000000000000f,0.99518472667219692873f, -0.09801714032956060363f,0.98078528040323043058f,0.19509032201612824808f, -0.95694033573220882438f,0.29028467725446233105f,0.92387953251128673848f, -0.38268343236508978178f,0.88192126434835504956f,0.47139673682599764204f, -0.83146961230254523567f,0.55557023301960217765f,0.77301045336273699338f, -0.63439328416364548779f,0.70710678118654757274f,0.70710678118654757274f, -0.63439328416364548779f,0.77301045336273688235f,0.55557023301960228867f, -0.83146961230254523567f,0.47139673682599780857f,0.88192126434835493853f, -0.38268343236508983729f,0.92387953251128673848f,0.29028467725446233105f, -0.95694033573220893540f,0.19509032201612833135f,0.98078528040323043058f, -0.09801714032956077016f,0.99518472667219681771f,1.00000000000000000000f, -0.00000000000000000000f,0.92387953251128673848f,0.38268343236508978178f, -0.70710678118654757274f,0.70710678118654757274f,0.38268343236508983729f, -0.92387953251128673848f,}; - -float32_t rearranged_twiddle_stride2_64_f32[40]={ -1.00000000000000000000f,0.00000000000000000000f,0.98078528040323043058f, -0.19509032201612824808f,0.92387953251128673848f,0.38268343236508978178f, -0.83146961230254523567f,0.55557023301960217765f,0.70710678118654757274f, -0.70710678118654757274f,0.55557023301960228867f,0.83146961230254523567f, -0.38268343236508983729f,0.92387953251128673848f,0.19509032201612833135f, -0.98078528040323043058f,0.00000000000000006123f,1.00000000000000000000f, --0.19509032201612819257f,0.98078528040323043058f,-0.38268343236508972627f, -0.92387953251128673848f,-0.55557023301960195560f,0.83146961230254534669f, --0.70710678118654746172f,0.70710678118654757274f,-0.83146961230254534669f, -0.55557023301960217765f,-0.92387953251128673848f,0.38268343236508989280f, --0.98078528040323043058f,0.19509032201612860891f,1.00000000000000000000f, -0.00000000000000000000f,0.70710678118654757274f,0.70710678118654757274f, -0.00000000000000006123f,1.00000000000000000000f,-0.70710678118654746172f, -0.70710678118654757274f,}; - -float32_t rearranged_twiddle_stride3_64_f32[40]={ -1.00000000000000000000f,0.00000000000000000000f,0.95694033573220882438f, -0.29028467725446233105f,0.83146961230254523567f,0.55557023301960217765f, -0.63439328416364548779f,0.77301045336273688235f,0.38268343236508983729f, -0.92387953251128673848f,0.09801714032956077016f,0.99518472667219681771f, --0.19509032201612819257f,0.98078528040323043058f,-0.47139673682599769755f, -0.88192126434835504956f,-0.70710678118654746172f,0.70710678118654757274f, --0.88192126434835493853f,0.47139673682599780857f,-0.98078528040323043058f, -0.19509032201612860891f,-0.99518472667219692873f,-0.09801714032956058975f, --0.92387953251128684951f,-0.38268343236508967076f,-0.77301045336273710440f, --0.63439328416364526575f,-0.55557023301960217765f,-0.83146961230254523567f, --0.29028467725446244208f,-0.95694033573220882438f,1.00000000000000000000f, -0.00000000000000000000f,0.38268343236508983729f,0.92387953251128673848f, --0.70710678118654746172f,0.70710678118654757274f,-0.92387953251128684951f, --0.38268343236508967076f,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) - -uint32_t rearranged_twiddle_tab_stride1_arr_256_f32[4]={ -0,128,160,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_256_f32[4]={ -0,128,160,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_256_f32[4]={ -0,128,160,0,}; - -float32_t rearranged_twiddle_stride1_256_f32[168]={ -1.00000000000000000000f,0.00000000000000000000f,0.99969881869620424997f, -0.02454122852291228812f,0.99879545620517240501f,0.04906767432741801493f, -0.99729045667869020697f,0.07356456359966742631f,0.99518472667219692873f, -0.09801714032956060363f,0.99247953459870996706f,0.12241067519921619566f, -0.98917650996478101444f,0.14673047445536174793f,0.98527764238894122162f, -0.17096188876030121717f,0.98078528040323043058f,0.19509032201612824808f, -0.97570213003852857003f,0.21910124015686979759f,0.97003125319454397424f, -0.24298017990326387094f,0.96377606579543984022f,0.26671275747489836538f, -0.95694033573220882438f,0.29028467725446233105f,0.94952818059303667475f, -0.31368174039889151761f,0.94154406518302080631f,0.33688985339222005111f, -0.93299279883473895669f,0.35989503653498811087f,0.92387953251128673848f, -0.38268343236508978178f,0.91420975570353069095f,0.40524131400498986100f, -0.90398929312344333820f,0.42755509343028208491f,0.89322430119551532446f, -0.44961132965460653965f,0.88192126434835504956f,0.47139673682599764204f, -0.87008699110871146054f,0.49289819222978403790f,0.85772861000027211809f, -0.51410274419322166128f,0.84485356524970711689f,0.53499761988709715332f, -0.83146961230254523567f,0.55557023301960217765f,0.81758481315158371139f, -0.57580819141784533866f,0.80320753148064494287f,0.59569930449243335691f, -0.78834642762660622761f,0.61523159058062681925f,0.77301045336273699338f, -0.63439328416364548779f,0.75720884650648456748f,0.65317284295377675551f, -0.74095112535495921691f,0.67155895484701833009f,0.72424708295146700276f, -0.68954054473706682948f,0.70710678118654757274f,0.70710678118654757274f, -0.68954054473706694051f,0.72424708295146689174f,0.67155895484701833009f, -0.74095112535495910588f,0.65317284295377686654f,0.75720884650648456748f, -0.63439328416364548779f,0.77301045336273688235f,0.61523159058062681925f, -0.78834642762660622761f,0.59569930449243346793f,0.80320753148064483184f, -0.57580819141784533866f,0.81758481315158371139f,0.55557023301960228867f, -0.83146961230254523567f,0.53499761988709726435f,0.84485356524970700587f, -0.51410274419322166128f,0.85772861000027211809f,0.49289819222978409341f, -0.87008699110871134952f,0.47139673682599780857f,0.88192126434835493853f, -0.44961132965460659516f,0.89322430119551532446f,0.42755509343028219593f, -0.90398929312344333820f,0.40524131400498986100f,0.91420975570353069095f, -0.38268343236508983729f,0.92387953251128673848f,0.35989503653498827740f, -0.93299279883473884567f,0.33688985339222005111f,0.94154406518302080631f, -0.31368174039889157312f,0.94952818059303667475f,0.29028467725446233105f, -0.95694033573220893540f,0.26671275747489842090f,0.96377606579543984022f, -0.24298017990326398197f,0.97003125319454397424f,0.21910124015686976984f, -0.97570213003852857003f,0.19509032201612833135f,0.98078528040323043058f, -0.17096188876030135595f,0.98527764238894122162f,0.14673047445536174793f, -0.98917650996478101444f,0.12241067519921627893f,0.99247953459870996706f, -0.09801714032956077016f,0.99518472667219681771f,0.07356456359966745406f, -0.99729045667869020697f,0.04906767432741812596f,0.99879545620517240501f, -0.02454122852291226384f,0.99969881869620424997f,1.00000000000000000000f, -0.00000000000000000000f,0.99518472667219692873f,0.09801714032956060363f, -0.98078528040323043058f,0.19509032201612824808f,0.95694033573220882438f, -0.29028467725446233105f,0.92387953251128673848f,0.38268343236508978178f, -0.88192126434835504956f,0.47139673682599764204f,0.83146961230254523567f, -0.55557023301960217765f,0.77301045336273699338f,0.63439328416364548779f, -0.70710678118654757274f,0.70710678118654757274f,0.63439328416364548779f, -0.77301045336273688235f,0.55557023301960228867f,0.83146961230254523567f, -0.47139673682599780857f,0.88192126434835493853f,0.38268343236508983729f, -0.92387953251128673848f,0.29028467725446233105f,0.95694033573220893540f, -0.19509032201612833135f,0.98078528040323043058f,0.09801714032956077016f, -0.99518472667219681771f,1.00000000000000000000f,0.00000000000000000000f, -0.92387953251128673848f,0.38268343236508978178f,0.70710678118654757274f, -0.70710678118654757274f,0.38268343236508983729f,0.92387953251128673848f,}; - -float32_t rearranged_twiddle_stride2_256_f32[168]={ -1.00000000000000000000f,0.00000000000000000000f,0.99879545620517240501f, -0.04906767432741801493f,0.99518472667219692873f,0.09801714032956060363f, -0.98917650996478101444f,0.14673047445536174793f,0.98078528040323043058f, -0.19509032201612824808f,0.97003125319454397424f,0.24298017990326387094f, -0.95694033573220882438f,0.29028467725446233105f,0.94154406518302080631f, -0.33688985339222005111f,0.92387953251128673848f,0.38268343236508978178f, -0.90398929312344333820f,0.42755509343028208491f,0.88192126434835504956f, -0.47139673682599764204f,0.85772861000027211809f,0.51410274419322166128f, -0.83146961230254523567f,0.55557023301960217765f,0.80320753148064494287f, -0.59569930449243335691f,0.77301045336273699338f,0.63439328416364548779f, -0.74095112535495921691f,0.67155895484701833009f,0.70710678118654757274f, -0.70710678118654757274f,0.67155895484701833009f,0.74095112535495910588f, -0.63439328416364548779f,0.77301045336273688235f,0.59569930449243346793f, -0.80320753148064483184f,0.55557023301960228867f,0.83146961230254523567f, -0.51410274419322166128f,0.85772861000027211809f,0.47139673682599780857f, -0.88192126434835493853f,0.42755509343028219593f,0.90398929312344333820f, -0.38268343236508983729f,0.92387953251128673848f,0.33688985339222005111f, -0.94154406518302080631f,0.29028467725446233105f,0.95694033573220893540f, -0.24298017990326398197f,0.97003125319454397424f,0.19509032201612833135f, -0.98078528040323043058f,0.14673047445536174793f,0.98917650996478101444f, -0.09801714032956077016f,0.99518472667219681771f,0.04906767432741812596f, -0.99879545620517240501f,0.00000000000000006123f,1.00000000000000000000f, --0.04906767432741800800f,0.99879545620517240501f,-0.09801714032956064526f, -0.99518472667219692873f,-0.14673047445536163691f,0.98917650996478101444f, --0.19509032201612819257f,0.98078528040323043058f,-0.24298017990326387094f, -0.97003125319454397424f,-0.29028467725446216452f,0.95694033573220893540f, --0.33688985339221994009f,0.94154406518302080631f,-0.38268343236508972627f, -0.92387953251128673848f,-0.42755509343028186287f,0.90398929312344344922f, --0.47139673682599769755f,0.88192126434835504956f,-0.51410274419322155026f, -0.85772861000027211809f,-0.55557023301960195560f,0.83146961230254534669f, --0.59569930449243335691f,0.80320753148064494287f,-0.63439328416364537677f, -0.77301045336273710440f,-0.67155895484701844111f,0.74095112535495899486f, --0.70710678118654746172f,0.70710678118654757274f,-0.74095112535495888384f, -0.67155895484701855214f,-0.77301045336273699338f,0.63439328416364548779f, --0.80320753148064483184f,0.59569930449243346793f,-0.83146961230254534669f, -0.55557023301960217765f,-0.85772861000027200706f,0.51410274419322177231f, --0.88192126434835493853f,0.47139673682599780857f,-0.90398929312344333820f, -0.42755509343028202940f,-0.92387953251128673848f,0.38268343236508989280f, --0.94154406518302069529f,0.33688985339222032867f,-0.95694033573220882438f, -0.29028467725446238656f,-0.97003125319454397424f,0.24298017990326406523f, --0.98078528040323043058f,0.19509032201612860891f,-0.98917650996478101444f, -0.14673047445536180344f,-0.99518472667219681771f,0.09801714032956082567f, --0.99879545620517240501f,0.04906767432741796636f,1.00000000000000000000f, -0.00000000000000000000f,0.98078528040323043058f,0.19509032201612824808f, -0.92387953251128673848f,0.38268343236508978178f,0.83146961230254523567f, -0.55557023301960217765f,0.70710678118654757274f,0.70710678118654757274f, -0.55557023301960228867f,0.83146961230254523567f,0.38268343236508983729f, -0.92387953251128673848f,0.19509032201612833135f,0.98078528040323043058f, -0.00000000000000006123f,1.00000000000000000000f,-0.19509032201612819257f, -0.98078528040323043058f,-0.38268343236508972627f,0.92387953251128673848f, --0.55557023301960195560f,0.83146961230254534669f,-0.70710678118654746172f, -0.70710678118654757274f,-0.83146961230254534669f,0.55557023301960217765f, --0.92387953251128673848f,0.38268343236508989280f,-0.98078528040323043058f, -0.19509032201612860891f,1.00000000000000000000f,0.00000000000000000000f, -0.70710678118654757274f,0.70710678118654757274f,0.00000000000000006123f, -1.00000000000000000000f,-0.70710678118654746172f,0.70710678118654757274f,}; - -float32_t rearranged_twiddle_stride3_256_f32[168]={ -1.00000000000000000000f,0.00000000000000000000f,0.99729045667869020697f, -0.07356456359966742631f,0.98917650996478101444f,0.14673047445536174793f, -0.97570213003852857003f,0.21910124015686979759f,0.95694033573220882438f, -0.29028467725446233105f,0.93299279883473895669f,0.35989503653498811087f, -0.90398929312344333820f,0.42755509343028208491f,0.87008699110871146054f, -0.49289819222978403790f,0.83146961230254523567f,0.55557023301960217765f, -0.78834642762660622761f,0.61523159058062681925f,0.74095112535495921691f, -0.67155895484701833009f,0.68954054473706694051f,0.72424708295146689174f, -0.63439328416364548779f,0.77301045336273688235f,0.57580819141784533866f, -0.81758481315158371139f,0.51410274419322166128f,0.85772861000027211809f, -0.44961132965460659516f,0.89322430119551532446f,0.38268343236508983729f, -0.92387953251128673848f,0.31368174039889157312f,0.94952818059303667475f, -0.24298017990326398197f,0.97003125319454397424f,0.17096188876030135595f, -0.98527764238894122162f,0.09801714032956077016f,0.99518472667219681771f, -0.02454122852291226384f,0.99969881869620424997f,-0.04906767432741800800f, -0.99879545620517240501f,-0.12241067519921615403f,0.99247953459870996706f, --0.19509032201612819257f,0.98078528040323043058f,-0.26671275747489830987f, -0.96377606579543984022f,-0.33688985339221994009f,0.94154406518302080631f, --0.40524131400498974998f,0.91420975570353069095f,-0.47139673682599769755f, -0.88192126434835504956f,-0.53499761988709704230f,0.84485356524970722791f, --0.59569930449243335691f,0.80320753148064494287f,-0.65317284295377653347f, -0.75720884650648467851f,-0.70710678118654746172f,0.70710678118654757274f, --0.75720884650648467851f,0.65317284295377664449f,-0.80320753148064483184f, -0.59569930449243346793f,-0.84485356524970711689f,0.53499761988709715332f, --0.88192126434835493853f,0.47139673682599780857f,-0.91420975570353069095f, -0.40524131400498991651f,-0.94154406518302069529f,0.33688985339222032867f, --0.96377606579543984022f,0.26671275747489847641f,-0.98078528040323043058f, -0.19509032201612860891f,-0.99247953459870996706f,0.12241067519921634832f, --0.99879545620517240501f,0.04906767432741796636f,-0.99969881869620424997f, --0.02454122852291207996f,-0.99518472667219692873f,-0.09801714032956058975f, --0.98527764238894133264f,-0.17096188876030096737f,-0.97003125319454397424f, --0.24298017990326381543f,-0.94952818059303678577f,-0.31368174039889118454f, --0.92387953251128684951f,-0.38268343236508967076f,-0.89322430119551532446f, --0.44961132965460665067f,-0.85772861000027211809f,-0.51410274419322155026f, --0.81758481315158371139f,-0.57580819141784533866f,-0.77301045336273710440f, --0.63439328416364526575f,-0.72424708295146700276f,-0.68954054473706682948f, --0.67155895484701866316f,-0.74095112535495888384f,-0.61523159058062726334f, --0.78834642762660589455f,-0.55557023301960217765f,-0.83146961230254523567f, --0.49289819222978420443f,-0.87008699110871134952f,-0.42755509343028247349f, --0.90398929312344311615f,-0.35989503653498794433f,-0.93299279883473895669f, --0.29028467725446244208f,-0.95694033573220882438f,-0.21910124015687010290f, --0.97570213003852845901f,-0.14673047445536230304f,-0.98917650996478090342f, --0.07356456359966735692f,-0.99729045667869020697f,1.00000000000000000000f, -0.00000000000000000000f,0.95694033573220882438f,0.29028467725446233105f, -0.83146961230254523567f,0.55557023301960217765f,0.63439328416364548779f, -0.77301045336273688235f,0.38268343236508983729f,0.92387953251128673848f, -0.09801714032956077016f,0.99518472667219681771f,-0.19509032201612819257f, -0.98078528040323043058f,-0.47139673682599769755f,0.88192126434835504956f, --0.70710678118654746172f,0.70710678118654757274f,-0.88192126434835493853f, -0.47139673682599780857f,-0.98078528040323043058f,0.19509032201612860891f, --0.99518472667219692873f,-0.09801714032956058975f,-0.92387953251128684951f, --0.38268343236508967076f,-0.77301045336273710440f,-0.63439328416364526575f, --0.55557023301960217765f,-0.83146961230254523567f,-0.29028467725446244208f, --0.95694033573220882438f,1.00000000000000000000f,0.00000000000000000000f, -0.38268343236508983729f,0.92387953251128673848f,-0.70710678118654746172f, -0.70710678118654757274f,-0.92387953251128684951f,-0.38268343236508967076f,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) - -uint32_t rearranged_twiddle_tab_stride1_arr_1024_f32[5]={ -0,512,640,672,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_1024_f32[5]={ -0,512,640,672,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_1024_f32[5]={ -0,512,640,672,0,}; - -float32_t rearranged_twiddle_stride1_1024_f32[680]={ -1.00000000000000000000f,0.00000000000000000000f,0.99998117528260110909f, -0.00613588464915447527f,0.99992470183914450299f,0.01227153828571992539f, -0.99983058179582340319f,0.01840672990580482019f,0.99969881869620424997f, -0.02454122852291228812f,0.99952941750109314256f,0.03067480317663662595f, -0.99932238458834954375f,0.03680722294135883171f,0.99907772775264536147f, -0.04293825693494082024f,0.99879545620517240501f,0.04906767432741801493f, -0.99847558057329477421f,0.05519524434968993420f,0.99811811290014917919f, -0.06132073630220857829f,0.99772306664419163624f,0.06744391956366405094f, -0.99729045667869020697f,0.07356456359966742631f,0.99682029929116566791f, -0.07968243797143012563f,0.99631261218277800129f,0.08579731234443989385f, -0.99576741446765981713f,0.09190895649713272386f,0.99518472667219692873f, -0.09801714032956060363f,0.99456457073425541537f,0.10412163387205458642f, -0.99390697000235606051f,0.11022220729388305938f,0.99321194923479450001f, -0.11631863091190475235f,0.99247953459870996706f,0.12241067519921619566f, -0.99170975366909952520f,0.12849811079379316880f,0.99090263542778000971f, -0.13458070850712616773f,0.99005821026229712256f,0.14065823933284921088f, -0.98917650996478101444f,0.14673047445536174793f,0.98825756773074946437f, -0.15279718525844343535f,0.98730141815785843473f,0.15885814333386144570f, -0.98630809724459866938f,0.16491312048996989437f,0.98527764238894122162f, -0.17096188876030121717f,0.98421009238692902521f,0.17700422041214874946f, -0.98310548743121628501f,0.18303988795514095078f,0.98196386910955524296f, -0.18906866414980619262f,0.98078528040323043058f,0.19509032201612824808f, -0.97956976568544051887f,0.20110463484209190055f,0.97831737071962765473f, -0.20711137619221856032f,0.97702814265775439484f,0.21311031991609136194f, -0.97570213003852857003f,0.21910124015686979759f,0.97433938278557585821f, -0.22508391135979283204f,0.97293995220556017678f,0.23105810828067110951f, -0.97150389098625178352f,0.23702360599436719801f,0.97003125319454397424f, -0.24298017990326387094f,0.96852209427441737777f,0.24892760574572014853f, -0.96697647104485207059f,0.25486565960451457169f,0.96539444169768939830f, -0.26079411791527551401f,0.96377606579543984022f,0.26671275747489836538f, -0.96212140426904158019f,0.27262135544994897662f,0.96043051941556578655f, -0.27851968938505305973f,0.95870347489587159906f,0.28440753721127187692f, -0.95694033573220882438f,0.29028467725446233105f,0.95514116830577078243f, -0.29615088824362378883f,0.95330604035419386211f,0.30200594931922808417f, -0.95143502096900833820f,0.30784964004153486661f,0.94952818059303667475f, -0.31368174039889151761f,0.94758559101774109124f,0.31950203081601569188f, -0.94560732538052127971f,0.32531029216226292622f,0.94359345816196038559f, -0.33110630575987642921f,0.94154406518302080631f,0.33688985339222005111f, -0.93945922360218991898f,0.34266071731199437833f,0.93733901191257495977f, -0.34841868024943456472f,0.93518350993894761025f,0.35416352542049034380f, -0.93299279883473895669f,0.35989503653498811087f,0.93076696107898371224f, -0.36561299780477385379f,0.92850608047321558924f,0.37131719395183754306f, -0.92621024213831137928f,0.37700741021641825945f,0.92387953251128673848f, -0.38268343236508978178f,0.92151403934204190183f,0.38834504669882624617f, -0.91911385169005777040f,0.39399204006104809883f,0.91667905992104270485f, -0.39962419984564678810f,0.91420975570353069095f,0.40524131400498986100f, -0.91170603200542987832f,0.41084317105790391089f,0.90916798309052238025f, -0.41642956009763715253f,0.90659570451491533483f,0.42200027079979968159f, -0.90398929312344333820f,0.42755509343028208491f,0.90134884704602202810f, -0.43309381885315195726f,0.89867446569395381673f,0.43861623853852765853f, -0.89596624975618521791f,0.44412214457042920035f,0.89322430119551532446f, -0.44961132965460653965f,0.89044872324475787817f,0.45508358712634383592f, -0.88763962040285393496f,0.46053871095824000514f,0.88479709843093778954f, -0.46597649576796618121f,0.88192126434835504956f,0.47139673682599764204f, -0.87901222642863352519f,0.47679923006332208812f,0.87607009419540660122f, -0.48218377207912271887f,0.87309497841829009079f,0.48755016014843599592f, -0.87008699110871146054f,0.49289819222978403790f,0.86704624551569264845f, -0.49822766697278181303f,0.86397285612158669643f,0.50353838372571757542f, -0.86086693863776730939f,0.50883014254310698909f,0.85772861000027211809f, -0.51410274419322166128f,0.85455798836540053376f,0.51935599016558964269f, -0.85135519310526519554f,0.52458968267846894928f,0.84812034480329723252f, -0.52980362468629460526f,0.84485356524970711689f,0.53499761988709715332f, -0.84155497743689844370f,0.54017147272989285423f,0.83822470555483807875f, -0.54532498842204646383f,0.83486287498638001026f,0.55045797293660481131f, -0.83146961230254523567f,0.55557023301960217765f,0.82804504525775579626f, -0.56066157619733603124f,0.82458930278502529099f,0.56573181078361312046f, -0.82110251499110464835f,0.57078074588696725566f,0.81758481315158371139f, -0.57580819141784533866f,0.81403632970594841378f,0.58081395809576452649f, -0.81045719825259476821f,0.58579785745643886408f,0.80684755354379933401f, -0.59075970185887416442f,0.80320753148064494287f,0.59569930449243335691f, -0.79953726910790501314f,0.60061647938386897305f,0.79583690460888356633f, -0.60551104140432554512f,0.79210657730021238887f,0.61038280627630947528f, -0.78834642762660622761f,0.61523159058062681925f,0.78455659715557524159f, -0.62005721176328909561f,0.78073722857209448822f,0.62485948814238634341f, -0.77688846567323244230f,0.62963823891492698426f,0.77301045336273699338f, -0.63439328416364548779f,0.76910333764557969882f,0.63912444486377573138f, -0.76516726562245895860f,0.64383154288979138613f,0.76120238548426177871f, -0.64851440102211244110f,0.75720884650648456748f,0.65317284295377675551f, -0.75318679904361252042f,0.65780669329707863735f,0.74913639452345937020f, -0.66241577759017178373f,0.74505778544146594733f,0.66699992230363747137f, -0.74095112535495921691f,0.67155895484701833009f,0.73681656887736979300f, -0.67609270357531592310f,0.73265427167241281570f,0.68060099779545302212f, -0.72846439044822519637f,0.68508366777270035541f,0.72424708295146700276f, -0.68954054473706682948f,0.72000250796138165477f,0.69397146088965389055f, -0.71573082528381870571f,0.69837624940897280457f,0.71143219574521643356f, -0.70275474445722529993f,0.70710678118654757274f,0.70710678118654757274f, -0.70275474445722529993f,0.71143219574521643356f,0.69837624940897291559f, -0.71573082528381859468f,0.69397146088965400157f,0.72000250796138165477f, -0.68954054473706694051f,0.72424708295146689174f,0.68508366777270035541f, -0.72846439044822519637f,0.68060099779545302212f,0.73265427167241281570f, -0.67609270357531603413f,0.73681656887736979300f,0.67155895484701833009f, -0.74095112535495910588f,0.66699992230363747137f,0.74505778544146594733f, -0.66241577759017178373f,0.74913639452345925918f,0.65780669329707874837f, -0.75318679904361252042f,0.65317284295377686654f,0.75720884650648456748f, -0.64851440102211255212f,0.76120238548426177871f,0.64383154288979149715f, -0.76516726562245895860f,0.63912444486377573138f,0.76910333764557958780f, -0.63439328416364548779f,0.77301045336273688235f,0.62963823891492709528f, -0.77688846567323244230f,0.62485948814238645443f,0.78073722857209448822f, -0.62005721176328920663f,0.78455659715557524159f,0.61523159058062681925f, -0.78834642762660622761f,0.61038280627630947528f,0.79210657730021227785f, -0.60551104140432554512f,0.79583690460888345530f,0.60061647938386897305f, -0.79953726910790501314f,0.59569930449243346793f,0.80320753148064483184f, -0.59075970185887427544f,0.80684755354379922299f,0.58579785745643886408f, -0.81045719825259476821f,0.58081395809576452649f,0.81403632970594830276f, -0.57580819141784533866f,0.81758481315158371139f,0.57078074588696736669f, -0.82110251499110464835f,0.56573181078361323149f,0.82458930278502529099f, -0.56066157619733603124f,0.82804504525775579626f,0.55557023301960228867f, -0.83146961230254523567f,0.55045797293660481131f,0.83486287498638001026f, -0.54532498842204646383f,0.83822470555483796772f,0.54017147272989296525f, -0.84155497743689833268f,0.53499761988709726435f,0.84485356524970700587f, -0.52980362468629482731f,0.84812034480329712149f,0.52458968267846883826f, -0.85135519310526519554f,0.51935599016558953167f,0.85455798836540053376f, -0.51410274419322166128f,0.85772861000027211809f,0.50883014254310698909f, -0.86086693863776730939f,0.50353838372571757542f,0.86397285612158669643f, -0.49822766697278186854f,0.86704624551569264845f,0.49289819222978409341f, -0.87008699110871134952f,0.48755016014843605143f,0.87309497841829009079f, -0.48218377207912282989f,0.87607009419540660122f,0.47679923006332225466f, -0.87901222642863341417f,0.47139673682599780857f,0.88192126434835493853f, -0.46597649576796612569f,0.88479709843093778954f,0.46053871095824000514f, -0.88763962040285393496f,0.45508358712634383592f,0.89044872324475787817f, -0.44961132965460659516f,0.89322430119551532446f,0.44412214457042925586f, -0.89596624975618510689f,0.43861623853852771404f,0.89867446569395381673f, -0.43309381885315201277f,0.90134884704602202810f,0.42755509343028219593f, -0.90398929312344333820f,0.42200027079979979261f,0.90659570451491533483f, -0.41642956009763731906f,0.90916798309052226923f,0.41084317105790391089f, -0.91170603200542987832f,0.40524131400498986100f,0.91420975570353069095f, -0.39962419984564678810f,0.91667905992104270485f,0.39399204006104809883f, -0.91911385169005777040f,0.38834504669882630168f,0.92151403934204190183f, -0.38268343236508983729f,0.92387953251128673848f,0.37700741021641831496f, -0.92621024213831126826f,0.37131719395183759858f,0.92850608047321558924f, -0.36561299780477396482f,0.93076696107898371224f,0.35989503653498827740f, -0.93299279883473884567f,0.35416352542049051033f,0.93518350993894749923f, -0.34841868024943450921f,0.93733901191257495977f,0.34266071731199437833f, -0.93945922360218991898f,0.33688985339222005111f,0.94154406518302080631f, -0.33110630575987642921f,0.94359345816196038559f,0.32531029216226298173f, -0.94560732538052127971f,0.31950203081601574739f,0.94758559101774109124f, -0.31368174039889157312f,0.94952818059303667475f,0.30784964004153497763f, -0.95143502096900833820f,0.30200594931922819519f,0.95330604035419375109f, -0.29615088824362395536f,0.95514116830577067141f,0.29028467725446233105f, -0.95694033573220893540f,0.28440753721127182141f,0.95870347489587159906f, -0.27851968938505305973f,0.96043051941556578655f,0.27262135544994897662f, -0.96212140426904158019f,0.26671275747489842090f,0.96377606579543984022f, -0.26079411791527556952f,0.96539444169768939830f,0.25486565960451462720f, -0.96697647104485207059f,0.24892760574572025956f,0.96852209427441726675f, -0.24298017990326398197f,0.97003125319454397424f,0.23702360599436733679f, -0.97150389098625178352f,0.23105810828067127605f,0.97293995220556006576f, -0.22508391135979277653f,0.97433938278557585821f,0.21910124015686976984f, -0.97570213003852857003f,0.21311031991609136194f,0.97702814265775439484f, -0.20711137619221856032f,0.97831737071962765473f,0.20110463484209195606f, -0.97956976568544051887f,0.19509032201612833135f,0.98078528040323043058f, -0.18906866414980627589f,0.98196386910955524296f,0.18303988795514106180f, -0.98310548743121628501f,0.17700422041214886049f,0.98421009238692902521f, -0.17096188876030135595f,0.98527764238894122162f,0.16491312048997008866f, -0.98630809724459866938f,0.15885814333386139019f,0.98730141815785843473f, -0.15279718525844340760f,0.98825756773074946437f,0.14673047445536174793f, -0.98917650996478101444f,0.14065823933284923863f,0.99005821026229712256f, -0.13458070850712622324f,0.99090263542778000971f,0.12849811079379322432f, -0.99170975366909952520f,0.12241067519921627893f,0.99247953459870996706f, -0.11631863091190487725f,0.99321194923479450001f,0.11022220729388318428f, -0.99390697000235606051f,0.10412163387205472520f,0.99456457073425541537f, -0.09801714032956077016f,0.99518472667219681771f,0.09190895649713269611f, -0.99576741446765981713f,0.08579731234443987997f,0.99631261218277800129f, -0.07968243797143012563f,0.99682029929116566791f,0.07356456359966745406f, -0.99729045667869020697f,0.06744391956366410645f,0.99772306664419163624f, -0.06132073630220864768f,0.99811811290014917919f,0.05519524434969003135f, -0.99847558057329477421f,0.04906767432741812596f,0.99879545620517240501f, -0.04293825693494095902f,0.99907772775264536147f,0.03680722294135899131f, -0.99932238458834954375f,0.03067480317663658085f,0.99952941750109314256f, -0.02454122852291226384f,0.99969881869620424997f,0.01840672990580482019f, -0.99983058179582340319f,0.01227153828571994447f,0.99992470183914450299f, -0.00613588464915451517f,0.99998117528260110909f,1.00000000000000000000f, -0.00000000000000000000f,0.99969881869620424997f,0.02454122852291228812f, -0.99879545620517240501f,0.04906767432741801493f,0.99729045667869020697f, -0.07356456359966742631f,0.99518472667219692873f,0.09801714032956060363f, -0.99247953459870996706f,0.12241067519921619566f,0.98917650996478101444f, -0.14673047445536174793f,0.98527764238894122162f,0.17096188876030121717f, -0.98078528040323043058f,0.19509032201612824808f,0.97570213003852857003f, -0.21910124015686979759f,0.97003125319454397424f,0.24298017990326387094f, -0.96377606579543984022f,0.26671275747489836538f,0.95694033573220882438f, -0.29028467725446233105f,0.94952818059303667475f,0.31368174039889151761f, -0.94154406518302080631f,0.33688985339222005111f,0.93299279883473895669f, -0.35989503653498811087f,0.92387953251128673848f,0.38268343236508978178f, -0.91420975570353069095f,0.40524131400498986100f,0.90398929312344333820f, -0.42755509343028208491f,0.89322430119551532446f,0.44961132965460653965f, -0.88192126434835504956f,0.47139673682599764204f,0.87008699110871146054f, -0.49289819222978403790f,0.85772861000027211809f,0.51410274419322166128f, -0.84485356524970711689f,0.53499761988709715332f,0.83146961230254523567f, -0.55557023301960217765f,0.81758481315158371139f,0.57580819141784533866f, -0.80320753148064494287f,0.59569930449243335691f,0.78834642762660622761f, -0.61523159058062681925f,0.77301045336273699338f,0.63439328416364548779f, -0.75720884650648456748f,0.65317284295377675551f,0.74095112535495921691f, -0.67155895484701833009f,0.72424708295146700276f,0.68954054473706682948f, -0.70710678118654757274f,0.70710678118654757274f,0.68954054473706694051f, -0.72424708295146689174f,0.67155895484701833009f,0.74095112535495910588f, -0.65317284295377686654f,0.75720884650648456748f,0.63439328416364548779f, -0.77301045336273688235f,0.61523159058062681925f,0.78834642762660622761f, -0.59569930449243346793f,0.80320753148064483184f,0.57580819141784533866f, -0.81758481315158371139f,0.55557023301960228867f,0.83146961230254523567f, -0.53499761988709726435f,0.84485356524970700587f,0.51410274419322166128f, -0.85772861000027211809f,0.49289819222978409341f,0.87008699110871134952f, -0.47139673682599780857f,0.88192126434835493853f,0.44961132965460659516f, -0.89322430119551532446f,0.42755509343028219593f,0.90398929312344333820f, -0.40524131400498986100f,0.91420975570353069095f,0.38268343236508983729f, -0.92387953251128673848f,0.35989503653498827740f,0.93299279883473884567f, -0.33688985339222005111f,0.94154406518302080631f,0.31368174039889157312f, -0.94952818059303667475f,0.29028467725446233105f,0.95694033573220893540f, -0.26671275747489842090f,0.96377606579543984022f,0.24298017990326398197f, -0.97003125319454397424f,0.21910124015686976984f,0.97570213003852857003f, -0.19509032201612833135f,0.98078528040323043058f,0.17096188876030135595f, -0.98527764238894122162f,0.14673047445536174793f,0.98917650996478101444f, -0.12241067519921627893f,0.99247953459870996706f,0.09801714032956077016f, -0.99518472667219681771f,0.07356456359966745406f,0.99729045667869020697f, -0.04906767432741812596f,0.99879545620517240501f,0.02454122852291226384f, -0.99969881869620424997f,1.00000000000000000000f,0.00000000000000000000f, -0.99518472667219692873f,0.09801714032956060363f,0.98078528040323043058f, -0.19509032201612824808f,0.95694033573220882438f,0.29028467725446233105f, -0.92387953251128673848f,0.38268343236508978178f,0.88192126434835504956f, -0.47139673682599764204f,0.83146961230254523567f,0.55557023301960217765f, -0.77301045336273699338f,0.63439328416364548779f,0.70710678118654757274f, -0.70710678118654757274f,0.63439328416364548779f,0.77301045336273688235f, -0.55557023301960228867f,0.83146961230254523567f,0.47139673682599780857f, -0.88192126434835493853f,0.38268343236508983729f,0.92387953251128673848f, -0.29028467725446233105f,0.95694033573220893540f,0.19509032201612833135f, -0.98078528040323043058f,0.09801714032956077016f,0.99518472667219681771f, -1.00000000000000000000f,0.00000000000000000000f,0.92387953251128673848f, -0.38268343236508978178f,0.70710678118654757274f,0.70710678118654757274f, -0.38268343236508983729f,0.92387953251128673848f,}; - -float32_t rearranged_twiddle_stride2_1024_f32[680]={ -1.00000000000000000000f,0.00000000000000000000f,0.99992470183914450299f, -0.01227153828571992539f,0.99969881869620424997f,0.02454122852291228812f, -0.99932238458834954375f,0.03680722294135883171f,0.99879545620517240501f, -0.04906767432741801493f,0.99811811290014917919f,0.06132073630220857829f, -0.99729045667869020697f,0.07356456359966742631f,0.99631261218277800129f, -0.08579731234443989385f,0.99518472667219692873f,0.09801714032956060363f, -0.99390697000235606051f,0.11022220729388305938f,0.99247953459870996706f, -0.12241067519921619566f,0.99090263542778000971f,0.13458070850712616773f, -0.98917650996478101444f,0.14673047445536174793f,0.98730141815785843473f, -0.15885814333386144570f,0.98527764238894122162f,0.17096188876030121717f, -0.98310548743121628501f,0.18303988795514095078f,0.98078528040323043058f, -0.19509032201612824808f,0.97831737071962765473f,0.20711137619221856032f, -0.97570213003852857003f,0.21910124015686979759f,0.97293995220556017678f, -0.23105810828067110951f,0.97003125319454397424f,0.24298017990326387094f, -0.96697647104485207059f,0.25486565960451457169f,0.96377606579543984022f, -0.26671275747489836538f,0.96043051941556578655f,0.27851968938505305973f, -0.95694033573220882438f,0.29028467725446233105f,0.95330604035419386211f, -0.30200594931922808417f,0.94952818059303667475f,0.31368174039889151761f, -0.94560732538052127971f,0.32531029216226292622f,0.94154406518302080631f, -0.33688985339222005111f,0.93733901191257495977f,0.34841868024943456472f, -0.93299279883473895669f,0.35989503653498811087f,0.92850608047321558924f, -0.37131719395183754306f,0.92387953251128673848f,0.38268343236508978178f, -0.91911385169005777040f,0.39399204006104809883f,0.91420975570353069095f, -0.40524131400498986100f,0.90916798309052238025f,0.41642956009763715253f, -0.90398929312344333820f,0.42755509343028208491f,0.89867446569395381673f, -0.43861623853852765853f,0.89322430119551532446f,0.44961132965460653965f, -0.88763962040285393496f,0.46053871095824000514f,0.88192126434835504956f, -0.47139673682599764204f,0.87607009419540660122f,0.48218377207912271887f, -0.87008699110871146054f,0.49289819222978403790f,0.86397285612158669643f, -0.50353838372571757542f,0.85772861000027211809f,0.51410274419322166128f, -0.85135519310526519554f,0.52458968267846894928f,0.84485356524970711689f, -0.53499761988709715332f,0.83822470555483807875f,0.54532498842204646383f, -0.83146961230254523567f,0.55557023301960217765f,0.82458930278502529099f, -0.56573181078361312046f,0.81758481315158371139f,0.57580819141784533866f, -0.81045719825259476821f,0.58579785745643886408f,0.80320753148064494287f, -0.59569930449243335691f,0.79583690460888356633f,0.60551104140432554512f, -0.78834642762660622761f,0.61523159058062681925f,0.78073722857209448822f, -0.62485948814238634341f,0.77301045336273699338f,0.63439328416364548779f, -0.76516726562245895860f,0.64383154288979138613f,0.75720884650648456748f, -0.65317284295377675551f,0.74913639452345937020f,0.66241577759017178373f, -0.74095112535495921691f,0.67155895484701833009f,0.73265427167241281570f, -0.68060099779545302212f,0.72424708295146700276f,0.68954054473706682948f, -0.71573082528381870571f,0.69837624940897280457f,0.70710678118654757274f, -0.70710678118654757274f,0.69837624940897291559f,0.71573082528381859468f, -0.68954054473706694051f,0.72424708295146689174f,0.68060099779545302212f, -0.73265427167241281570f,0.67155895484701833009f,0.74095112535495910588f, -0.66241577759017178373f,0.74913639452345925918f,0.65317284295377686654f, -0.75720884650648456748f,0.64383154288979149715f,0.76516726562245895860f, -0.63439328416364548779f,0.77301045336273688235f,0.62485948814238645443f, -0.78073722857209448822f,0.61523159058062681925f,0.78834642762660622761f, -0.60551104140432554512f,0.79583690460888345530f,0.59569930449243346793f, -0.80320753148064483184f,0.58579785745643886408f,0.81045719825259476821f, -0.57580819141784533866f,0.81758481315158371139f,0.56573181078361323149f, -0.82458930278502529099f,0.55557023301960228867f,0.83146961230254523567f, -0.54532498842204646383f,0.83822470555483796772f,0.53499761988709726435f, -0.84485356524970700587f,0.52458968267846883826f,0.85135519310526519554f, -0.51410274419322166128f,0.85772861000027211809f,0.50353838372571757542f, -0.86397285612158669643f,0.49289819222978409341f,0.87008699110871134952f, -0.48218377207912282989f,0.87607009419540660122f,0.47139673682599780857f, -0.88192126434835493853f,0.46053871095824000514f,0.88763962040285393496f, -0.44961132965460659516f,0.89322430119551532446f,0.43861623853852771404f, -0.89867446569395381673f,0.42755509343028219593f,0.90398929312344333820f, -0.41642956009763731906f,0.90916798309052226923f,0.40524131400498986100f, -0.91420975570353069095f,0.39399204006104809883f,0.91911385169005777040f, -0.38268343236508983729f,0.92387953251128673848f,0.37131719395183759858f, -0.92850608047321558924f,0.35989503653498827740f,0.93299279883473884567f, -0.34841868024943450921f,0.93733901191257495977f,0.33688985339222005111f, -0.94154406518302080631f,0.32531029216226298173f,0.94560732538052127971f, -0.31368174039889157312f,0.94952818059303667475f,0.30200594931922819519f, -0.95330604035419375109f,0.29028467725446233105f,0.95694033573220893540f, -0.27851968938505305973f,0.96043051941556578655f,0.26671275747489842090f, -0.96377606579543984022f,0.25486565960451462720f,0.96697647104485207059f, -0.24298017990326398197f,0.97003125319454397424f,0.23105810828067127605f, -0.97293995220556006576f,0.21910124015686976984f,0.97570213003852857003f, -0.20711137619221856032f,0.97831737071962765473f,0.19509032201612833135f, -0.98078528040323043058f,0.18303988795514106180f,0.98310548743121628501f, -0.17096188876030135595f,0.98527764238894122162f,0.15885814333386139019f, -0.98730141815785843473f,0.14673047445536174793f,0.98917650996478101444f, -0.13458070850712622324f,0.99090263542778000971f,0.12241067519921627893f, -0.99247953459870996706f,0.11022220729388318428f,0.99390697000235606051f, -0.09801714032956077016f,0.99518472667219681771f,0.08579731234443987997f, -0.99631261218277800129f,0.07356456359966745406f,0.99729045667869020697f, -0.06132073630220864768f,0.99811811290014917919f,0.04906767432741812596f, -0.99879545620517240501f,0.03680722294135899131f,0.99932238458834954375f, -0.02454122852291226384f,0.99969881869620424997f,0.01227153828571994447f, -0.99992470183914450299f,0.00000000000000006123f,1.00000000000000000000f, --0.01227153828571982304f,0.99992470183914450299f,-0.02454122852291214241f, -0.99969881869620424997f,-0.03680722294135886641f,0.99932238458834954375f, --0.04906767432741800800f,0.99879545620517240501f,-0.06132073630220852972f, -0.99811811290014917919f,-0.07356456359966732916f,0.99729045667869020697f, --0.08579731234443975507f,0.99631261218277800129f,-0.09801714032956064526f, -0.99518472667219692873f,-0.11022220729388305938f,0.99390697000235606051f, --0.12241067519921615403f,0.99247953459870996706f,-0.13458070850712611222f, -0.99090263542778000971f,-0.14673047445536163691f,0.98917650996478101444f, --0.15885814333386127917f,0.98730141815785843473f,-0.17096188876030124493f, -0.98527764238894122162f,-0.18303988795514092303f,0.98310548743121628501f, --0.19509032201612819257f,0.98078528040323043058f,-0.20711137619221844930f, -0.97831737071962765473f,-0.21910124015686965881f,0.97570213003852857003f, --0.23105810828067113727f,0.97293995220556017678f,-0.24298017990326387094f, -0.97003125319454397424f,-0.25486565960451451618f,0.96697647104485207059f, --0.26671275747489830987f,0.96377606579543984022f,-0.27851968938505294870f, -0.96043051941556589757f,-0.29028467725446216452f,0.95694033573220893540f, --0.30200594931922808417f,0.95330604035419386211f,-0.31368174039889140658f, -0.94952818059303667475f,-0.32531029216226287071f,0.94560732538052139073f, --0.33688985339221994009f,0.94154406518302080631f,-0.34841868024943439819f, -0.93733901191257495977f,-0.35989503653498816638f,0.93299279883473884567f, --0.37131719395183748755f,0.92850608047321558924f,-0.38268343236508972627f, -0.92387953251128673848f,-0.39399204006104798781f,0.91911385169005777040f, --0.40524131400498974998f,0.91420975570353069095f,-0.41642956009763698599f, -0.90916798309052249127f,-0.42755509343028186287f,0.90398929312344344922f, --0.43861623853852738097f,0.89867446569395392775f,-0.44961132965460670619f, -0.89322430119551521344f,-0.46053871095824006066f,0.88763962040285393496f, --0.47139673682599769755f,0.88192126434835504956f,-0.48218377207912271887f, -0.87607009419540660122f,-0.49289819222978398239f,0.87008699110871146054f, --0.50353838372571746440f,0.86397285612158680745f,-0.51410274419322155026f, -0.85772861000027211809f,-0.52458968267846872724f,0.85135519310526519554f, --0.53499761988709704230f,0.84485356524970722791f,-0.54532498842204624179f, -0.83822470555483818977f,-0.55557023301960195560f,0.83146961230254534669f, --0.56573181078361323149f,0.82458930278502517996f,-0.57580819141784533866f, -0.81758481315158371139f,-0.58579785745643886408f,0.81045719825259476821f, --0.59569930449243335691f,0.80320753148064494287f,-0.60551104140432543410f, -0.79583690460888356633f,-0.61523159058062670823f,0.78834642762660633863f, --0.62485948814238623239f,0.78073722857209459924f,-0.63439328416364537677f, -0.77301045336273710440f,-0.64383154288979127511f,0.76516726562245906962f, --0.65317284295377653347f,0.75720884650648467851f,-0.66241577759017189475f, -0.74913639452345925918f,-0.67155895484701844111f,0.74095112535495899486f, --0.68060099779545302212f,0.73265427167241281570f,-0.68954054473706694051f, -0.72424708295146689174f,-0.69837624940897280457f,0.71573082528381870571f, --0.70710678118654746172f,0.70710678118654757274f,-0.71573082528381859468f, -0.69837624940897291559f,-0.72424708295146678072f,0.68954054473706705153f, --0.73265427167241270467f,0.68060099779545324417f,-0.74095112535495888384f, -0.67155895484701855214f,-0.74913639452345914815f,0.66241577759017200577f, --0.75720884650648467851f,0.65317284295377664449f,-0.76516726562245895860f, -0.64383154288979138613f,-0.77301045336273699338f,0.63439328416364548779f, --0.78073722857209448822f,0.62485948814238634341f,-0.78834642762660622761f, -0.61523159058062693028f,-0.79583690460888345530f,0.60551104140432565615f, --0.80320753148064483184f,0.59569930449243346793f,-0.81045719825259465718f, -0.58579785745643897510f,-0.81758481315158360037f,0.57580819141784544968f, --0.82458930278502506894f,0.56573181078361345353f,-0.83146961230254534669f, -0.55557023301960217765f,-0.83822470555483807875f,0.54532498842204635281f, --0.84485356524970711689f,0.53499761988709715332f,-0.85135519310526519554f, -0.52458968267846894928f,-0.85772861000027200706f,0.51410274419322177231f, --0.86397285612158669643f,0.50353838372571757542f,-0.87008699110871134952f, -0.49289819222978414892f,-0.87607009419540649020f,0.48218377207912288540f, --0.88192126434835493853f,0.47139673682599780857f,-0.88763962040285382393f, -0.46053871095824022719f,-0.89322430119551521344f,0.44961132965460687272f, --0.89867446569395392775f,0.43861623853852754751f,-0.90398929312344333820f, -0.42755509343028202940f,-0.90916798309052238025f,0.41642956009763715253f, --0.91420975570353069095f,0.40524131400498991651f,-0.91911385169005777040f, -0.39399204006104815434f,-0.92387953251128673848f,0.38268343236508989280f, --0.92850608047321547822f,0.37131719395183770960f,-0.93299279883473884567f, -0.35989503653498833291f,-0.93733901191257484875f,0.34841868024943478677f, --0.94154406518302069529f,0.33688985339222032867f,-0.94560732538052116869f, -0.32531029216226325929f,-0.94952818059303667475f,0.31368174039889140658f, --0.95330604035419386211f,0.30200594931922802866f,-0.95694033573220882438f, -0.29028467725446238656f,-0.96043051941556578655f,0.27851968938505317075f, --0.96377606579543984022f,0.26671275747489847641f,-0.96697647104485207059f, -0.25486565960451468271f,-0.97003125319454397424f,0.24298017990326406523f, --0.97293995220556006576f,0.23105810828067133156f,-0.97570213003852845901f, -0.21910124015687004739f,-0.97831737071962754371f,0.20711137619221883788f, --0.98078528040323043058f,0.19509032201612860891f,-0.98310548743121628501f, -0.18303988795514089527f,-0.98527764238894122162f,0.17096188876030121717f, --0.98730141815785843473f,0.15885814333386147346f,-0.98917650996478101444f, -0.14673047445536180344f,-0.99090263542778000971f,0.13458070850712627875f, --0.99247953459870996706f,0.12241067519921634832f,-0.99390697000235606051f, -0.11022220729388323979f,-0.99518472667219681771f,0.09801714032956082567f, --0.99631261218277800129f,0.08579731234444015753f,-0.99729045667869020697f, -0.07356456359966773162f,-0.99811811290014917919f,0.06132073630220848809f, --0.99879545620517240501f,0.04906767432741796636f,-0.99932238458834954375f, -0.03680722294135883171f,-0.99969881869620424997f,0.02454122852291232629f, --0.99992470183914450299f,0.01227153828572000692f,1.00000000000000000000f, -0.00000000000000000000f,0.99879545620517240501f,0.04906767432741801493f, -0.99518472667219692873f,0.09801714032956060363f,0.98917650996478101444f, -0.14673047445536174793f,0.98078528040323043058f,0.19509032201612824808f, -0.97003125319454397424f,0.24298017990326387094f,0.95694033573220882438f, -0.29028467725446233105f,0.94154406518302080631f,0.33688985339222005111f, -0.92387953251128673848f,0.38268343236508978178f,0.90398929312344333820f, -0.42755509343028208491f,0.88192126434835504956f,0.47139673682599764204f, -0.85772861000027211809f,0.51410274419322166128f,0.83146961230254523567f, -0.55557023301960217765f,0.80320753148064494287f,0.59569930449243335691f, -0.77301045336273699338f,0.63439328416364548779f,0.74095112535495921691f, -0.67155895484701833009f,0.70710678118654757274f,0.70710678118654757274f, -0.67155895484701833009f,0.74095112535495910588f,0.63439328416364548779f, -0.77301045336273688235f,0.59569930449243346793f,0.80320753148064483184f, -0.55557023301960228867f,0.83146961230254523567f,0.51410274419322166128f, -0.85772861000027211809f,0.47139673682599780857f,0.88192126434835493853f, -0.42755509343028219593f,0.90398929312344333820f,0.38268343236508983729f, -0.92387953251128673848f,0.33688985339222005111f,0.94154406518302080631f, -0.29028467725446233105f,0.95694033573220893540f,0.24298017990326398197f, -0.97003125319454397424f,0.19509032201612833135f,0.98078528040323043058f, -0.14673047445536174793f,0.98917650996478101444f,0.09801714032956077016f, -0.99518472667219681771f,0.04906767432741812596f,0.99879545620517240501f, -0.00000000000000006123f,1.00000000000000000000f,-0.04906767432741800800f, -0.99879545620517240501f,-0.09801714032956064526f,0.99518472667219692873f, --0.14673047445536163691f,0.98917650996478101444f,-0.19509032201612819257f, -0.98078528040323043058f,-0.24298017990326387094f,0.97003125319454397424f, --0.29028467725446216452f,0.95694033573220893540f,-0.33688985339221994009f, -0.94154406518302080631f,-0.38268343236508972627f,0.92387953251128673848f, --0.42755509343028186287f,0.90398929312344344922f,-0.47139673682599769755f, -0.88192126434835504956f,-0.51410274419322155026f,0.85772861000027211809f, --0.55557023301960195560f,0.83146961230254534669f,-0.59569930449243335691f, -0.80320753148064494287f,-0.63439328416364537677f,0.77301045336273710440f, --0.67155895484701844111f,0.74095112535495899486f,-0.70710678118654746172f, -0.70710678118654757274f,-0.74095112535495888384f,0.67155895484701855214f, --0.77301045336273699338f,0.63439328416364548779f,-0.80320753148064483184f, -0.59569930449243346793f,-0.83146961230254534669f,0.55557023301960217765f, --0.85772861000027200706f,0.51410274419322177231f,-0.88192126434835493853f, -0.47139673682599780857f,-0.90398929312344333820f,0.42755509343028202940f, --0.92387953251128673848f,0.38268343236508989280f,-0.94154406518302069529f, -0.33688985339222032867f,-0.95694033573220882438f,0.29028467725446238656f, --0.97003125319454397424f,0.24298017990326406523f,-0.98078528040323043058f, -0.19509032201612860891f,-0.98917650996478101444f,0.14673047445536180344f, --0.99518472667219681771f,0.09801714032956082567f,-0.99879545620517240501f, -0.04906767432741796636f,1.00000000000000000000f,0.00000000000000000000f, -0.98078528040323043058f,0.19509032201612824808f,0.92387953251128673848f, -0.38268343236508978178f,0.83146961230254523567f,0.55557023301960217765f, -0.70710678118654757274f,0.70710678118654757274f,0.55557023301960228867f, -0.83146961230254523567f,0.38268343236508983729f,0.92387953251128673848f, -0.19509032201612833135f,0.98078528040323043058f,0.00000000000000006123f, -1.00000000000000000000f,-0.19509032201612819257f,0.98078528040323043058f, --0.38268343236508972627f,0.92387953251128673848f,-0.55557023301960195560f, -0.83146961230254534669f,-0.70710678118654746172f,0.70710678118654757274f, --0.83146961230254534669f,0.55557023301960217765f,-0.92387953251128673848f, -0.38268343236508989280f,-0.98078528040323043058f,0.19509032201612860891f, -1.00000000000000000000f,0.00000000000000000000f,0.70710678118654757274f, -0.70710678118654757274f,0.00000000000000006123f,1.00000000000000000000f, --0.70710678118654746172f,0.70710678118654757274f,}; - -float32_t rearranged_twiddle_stride3_1024_f32[680]={ -1.00000000000000000000f,0.00000000000000000000f,0.99983058179582340319f, -0.01840672990580482019f,0.99932238458834954375f,0.03680722294135883171f, -0.99847558057329477421f,0.05519524434968993420f,0.99729045667869020697f, -0.07356456359966742631f,0.99576741446765981713f,0.09190895649713272386f, -0.99390697000235606051f,0.11022220729388305938f,0.99170975366909952520f, -0.12849811079379316880f,0.98917650996478101444f,0.14673047445536174793f, -0.98630809724459866938f,0.16491312048996989437f,0.98310548743121628501f, -0.18303988795514095078f,0.97956976568544051887f,0.20110463484209190055f, -0.97570213003852857003f,0.21910124015686979759f,0.97150389098625178352f, -0.23702360599436719801f,0.96697647104485207059f,0.25486565960451457169f, -0.96212140426904158019f,0.27262135544994897662f,0.95694033573220882438f, -0.29028467725446233105f,0.95143502096900833820f,0.30784964004153486661f, -0.94560732538052127971f,0.32531029216226292622f,0.93945922360218991898f, -0.34266071731199437833f,0.93299279883473895669f,0.35989503653498811087f, -0.92621024213831137928f,0.37700741021641825945f,0.91911385169005777040f, -0.39399204006104809883f,0.91170603200542987832f,0.41084317105790391089f, -0.90398929312344333820f,0.42755509343028208491f,0.89596624975618521791f, -0.44412214457042920035f,0.88763962040285393496f,0.46053871095824000514f, -0.87901222642863352519f,0.47679923006332208812f,0.87008699110871146054f, -0.49289819222978403790f,0.86086693863776730939f,0.50883014254310698909f, -0.85135519310526519554f,0.52458968267846894928f,0.84155497743689844370f, -0.54017147272989285423f,0.83146961230254523567f,0.55557023301960217765f, -0.82110251499110464835f,0.57078074588696725566f,0.81045719825259476821f, -0.58579785745643886408f,0.79953726910790501314f,0.60061647938386897305f, -0.78834642762660622761f,0.61523159058062681925f,0.77688846567323244230f, -0.62963823891492698426f,0.76516726562245895860f,0.64383154288979138613f, -0.75318679904361252042f,0.65780669329707863735f,0.74095112535495921691f, -0.67155895484701833009f,0.72846439044822519637f,0.68508366777270035541f, -0.71573082528381870571f,0.69837624940897280457f,0.70275474445722529993f, -0.71143219574521643356f,0.68954054473706694051f,0.72424708295146689174f, -0.67609270357531603413f,0.73681656887736979300f,0.66241577759017178373f, -0.74913639452345925918f,0.64851440102211255212f,0.76120238548426177871f, -0.63439328416364548779f,0.77301045336273688235f,0.62005721176328920663f, -0.78455659715557524159f,0.60551104140432554512f,0.79583690460888345530f, -0.59075970185887427544f,0.80684755354379922299f,0.57580819141784533866f, -0.81758481315158371139f,0.56066157619733603124f,0.82804504525775579626f, -0.54532498842204646383f,0.83822470555483796772f,0.52980362468629482731f, -0.84812034480329712149f,0.51410274419322166128f,0.85772861000027211809f, -0.49822766697278186854f,0.86704624551569264845f,0.48218377207912282989f, -0.87607009419540660122f,0.46597649576796612569f,0.88479709843093778954f, -0.44961132965460659516f,0.89322430119551532446f,0.43309381885315201277f, -0.90134884704602202810f,0.41642956009763731906f,0.90916798309052226923f, -0.39962419984564678810f,0.91667905992104270485f,0.38268343236508983729f, -0.92387953251128673848f,0.36561299780477396482f,0.93076696107898371224f, -0.34841868024943450921f,0.93733901191257495977f,0.33110630575987642921f, -0.94359345816196038559f,0.31368174039889157312f,0.94952818059303667475f, -0.29615088824362395536f,0.95514116830577067141f,0.27851968938505305973f, -0.96043051941556578655f,0.26079411791527556952f,0.96539444169768939830f, -0.24298017990326398197f,0.97003125319454397424f,0.22508391135979277653f, -0.97433938278557585821f,0.20711137619221856032f,0.97831737071962765473f, -0.18906866414980627589f,0.98196386910955524296f,0.17096188876030135595f, -0.98527764238894122162f,0.15279718525844340760f,0.98825756773074946437f, -0.13458070850712622324f,0.99090263542778000971f,0.11631863091190487725f, -0.99321194923479450001f,0.09801714032956077016f,0.99518472667219681771f, -0.07968243797143012563f,0.99682029929116566791f,0.06132073630220864768f, -0.99811811290014917919f,0.04293825693494095902f,0.99907772775264536147f, -0.02454122852291226384f,0.99969881869620424997f,0.00613588464915451517f, -0.99998117528260110909f,-0.01227153828571982304f,0.99992470183914450299f, --0.03067480317663645942f,0.99952941750109314256f,-0.04906767432741800800f, -0.99879545620517240501f,-0.06744391956366398155f,0.99772306664419163624f, --0.08579731234443975507f,0.99631261218277800129f,-0.10412163387205460030f, -0.99456457073425541537f,-0.12241067519921615403f,0.99247953459870996706f, --0.14065823933284912761f,0.99005821026229712256f,-0.15885814333386127917f, -0.98730141815785843473f,-0.17700422041214874946f,0.98421009238692902521f, --0.19509032201612819257f,0.98078528040323043058f,-0.21311031991609125091f, -0.97702814265775439484f,-0.23105810828067113727f,0.97293995220556017678f, --0.24892760574572012078f,0.96852209427441737777f,-0.26671275747489830987f, -0.96377606579543984022f,-0.28440753721127171039f,0.95870347489587159906f, --0.30200594931922808417f,0.95330604035419386211f,-0.31950203081601563637f, -0.94758559101774120226f,-0.33688985339221994009f,0.94154406518302080631f, --0.35416352542049039931f,0.93518350993894761025f,-0.37131719395183748755f, -0.92850608047321558924f,-0.38834504669882619066f,0.92151403934204201285f, --0.40524131400498974998f,0.91420975570353069095f,-0.42200027079979968159f, -0.90659570451491533483f,-0.43861623853852738097f,0.89867446569395392775f, --0.45508358712634372489f,0.89044872324475798919f,-0.47139673682599769755f, -0.88192126434835504956f,-0.48755016014843571837f,0.87309497841829020182f, --0.50353838372571746440f,0.86397285612158680745f,-0.51935599016558964269f, -0.85455798836540053376f,-0.53499761988709704230f,0.84485356524970722791f, --0.55045797293660470029f,0.83486287498638012128f,-0.56573181078361323149f, -0.82458930278502517996f,-0.58081395809576441547f,0.81403632970594852480f, --0.59569930449243335691f,0.80320753148064494287f,-0.61038280627630958630f, -0.79210657730021227785f,-0.62485948814238623239f,0.78073722857209459924f, --0.63912444486377573138f,0.76910333764557958780f,-0.65317284295377653347f, -0.75720884650648467851f,-0.66699992230363736034f,0.74505778544146605835f, --0.68060099779545302212f,0.73265427167241281570f,-0.69397146088965377952f, -0.72000250796138176579f,-0.70710678118654746172f,0.70710678118654757274f, --0.72000250796138165477f,0.69397146088965389055f,-0.73265427167241270467f, -0.68060099779545324417f,-0.74505778544146594733f,0.66699992230363758239f, --0.75720884650648467851f,0.65317284295377664449f,-0.76910333764557947678f, -0.63912444486377584241f,-0.78073722857209448822f,0.62485948814238634341f, --0.79210657730021216683f,0.61038280627630969732f,-0.80320753148064483184f, -0.59569930449243346793f,-0.81403632970594841378f,0.58081395809576452649f, --0.82458930278502506894f,0.56573181078361345353f,-0.83486287498638001026f, -0.55045797293660492233f,-0.84485356524970711689f,0.53499761988709715332f, --0.85455798836540042274f,0.51935599016558975372f,-0.86397285612158669643f, -0.50353838372571757542f,-0.87309497841829009079f,0.48755016014843588490f, --0.88192126434835493853f,0.47139673682599780857f,-0.89044872324475787817f, -0.45508358712634389143f,-0.89867446569395392775f,0.43861623853852754751f, --0.90659570451491533483f,0.42200027079979984812f,-0.91420975570353069095f, -0.40524131400498991651f,-0.92151403934204179080f,0.38834504669882657923f, --0.92850608047321547822f,0.37131719395183770960f,-0.93518350993894761025f, -0.35416352542049039931f,-0.94154406518302069529f,0.33688985339222032867f, --0.94758559101774109124f,0.31950203081601580291f,-0.95330604035419386211f, -0.30200594931922802866f,-0.95870347489587148804f,0.28440753721127209896f, --0.96377606579543984022f,0.26671275747489847641f,-0.96852209427441737777f, -0.24892760574572009302f,-0.97293995220556006576f,0.23105810828067133156f, --0.97702814265775439484f,0.21311031991609141745f,-0.98078528040323043058f, -0.19509032201612860891f,-0.98421009238692902521f,0.17700422041214894375f, --0.98730141815785843473f,0.15885814333386147346f,-0.99005821026229701154f, -0.14065823933284954395f,-0.99247953459870996706f,0.12241067519921634832f, --0.99456457073425541537f,0.10412163387205457254f,-0.99631261218277800129f, -0.08579731234444015753f,-0.99772306664419163624f,0.06744391956366417584f, --0.99879545620517240501f,0.04906767432741796636f,-0.99952941750109314256f, -0.03067480317663686534f,-0.99992470183914450299f,0.01227153828572000692f, --0.99998117528260110909f,-0.00613588464915455420f,-0.99969881869620424997f, --0.02454122852291207996f,-0.99907772775264536147f,-0.04293825693494077861f, --0.99811811290014917919f,-0.06132073630220824523f,-0.99682029929116577893f, --0.07968243797142994522f,-0.99518472667219692873f,-0.09801714032956058975f, --0.99321194923479461103f,-0.11631863091190447479f,-0.99090263542778000971f, --0.13458070850712605671f,-0.98825756773074946437f,-0.15279718525844343535f, --0.98527764238894133264f,-0.17096188876030096737f,-0.98196386910955524296f, --0.18906866414980610935f,-0.97831737071962765473f,-0.20711137619221858808f, --0.97433938278557585821f,-0.22508391135979261000f,-0.97003125319454397424f, --0.24298017990326381543f,-0.96539444169768939830f,-0.26079411791527562503f, --0.96043051941556589757f,-0.27851968938505289319f,-0.95514116830577078243f, --0.29615088824362378883f,-0.94952818059303678577f,-0.31368174039889118454f, --0.94359345816196038559f,-0.33110630575987626267f,-0.93733901191257495977f, --0.34841868024943456472f,-0.93076696107898382326f,-0.36561299780477357624f, --0.92387953251128684951f,-0.38268343236508967076f,-0.91667905992104270485f, --0.39962419984564684361f,-0.90916798309052249127f,-0.41642956009763693048f, --0.90134884704602202810f,-0.43309381885315184624f,-0.89322430119551532446f, --0.44961132965460665067f,-0.88479709843093790056f,-0.46597649576796595916f, --0.87607009419540660122f,-0.48218377207912266336f,-0.86704624551569287050f, --0.49822766697278153547f,-0.85772861000027211809f,-0.51410274419322155026f, --0.84812034480329723252f,-0.52980362468629460526f,-0.83822470555483818977f, --0.54532498842204613076f,-0.82804504525775590729f,-0.56066157619733592021f, --0.81758481315158371139f,-0.57580819141784533866f,-0.80684755354379944503f, --0.59075970185887394237f,-0.79583690460888356633f,-0.60551104140432543410f, --0.78455659715557524159f,-0.62005721176328920663f,-0.77301045336273710440f, --0.63439328416364526575f,-0.76120238548426188974f,-0.64851440102211233008f, --0.74913639452345925918f,-0.66241577759017178373f,-0.73681656887737001504f, --0.67609270357531581208f,-0.72424708295146700276f,-0.68954054473706682948f, --0.71143219574521665560f,-0.70275474445722507788f,-0.69837624940897302661f, --0.71573082528381848366f,-0.68508366777270035541f,-0.72846439044822519637f, --0.67155895484701866316f,-0.74095112535495888384f,-0.65780669329707874837f, --0.75318679904361240940f,-0.64383154288979149715f,-0.76516726562245895860f, --0.62963823891492687324f,-0.77688846567323255332f,-0.61523159058062726334f, --0.78834642762660589455f,-0.60061647938386930612f,-0.79953726910790479110f, --0.58579785745643908612f,-0.81045719825259465718f,-0.57078074588696736669f, --0.82110251499110464835f,-0.55557023301960217765f,-0.83146961230254523567f, --0.54017147272989274320f,-0.84155497743689855472f,-0.52458968267846928235f, --0.85135519310526486247f,-0.50883014254310732216f,-0.86086693863776708735f, --0.49289819222978420443f,-0.87008699110871134952f,-0.47679923006332214364f, --0.87901222642863341417f,-0.46053871095823989412f,-0.88763962040285404598f, --0.44412214457042975546f,-0.89596624975618488484f,-0.42755509343028247349f, --0.90398929312344311615f,-0.41084317105790418845f,-0.91170603200542976730f, --0.39399204006104820985f,-0.91911385169005765938f,-0.37700741021641820394f, --0.92621024213831137928f,-0.35989503653498794433f,-0.93299279883473895669f, --0.34266071731199487793f,-0.93945922360218969693f,-0.32531029216226331480f, --0.94560732538052116869f,-0.30784964004153508865f,-0.95143502096900833820f, --0.29028467725446244208f,-0.95694033573220882438f,-0.27262135544994886560f, --0.96212140426904158019f,-0.25486565960451434965f,-0.96697647104485218161f, --0.23702360599436766986f,-0.97150389098625167250f,-0.21910124015687010290f, --0.97570213003852845901f,-0.20110463484209206708f,-0.97956976568544051887f, --0.18303988795514095078f,-0.98310548743121628501f,-0.16491312048996975559f, --0.98630809724459866938f,-0.14673047445536230304f,-0.98917650996478090342f, --0.12849811079379358514f,-0.99170975366909952520f,-0.11022220729388330918f, --0.99390697000235606051f,-0.09190895649713282101f,-0.99576741446765981713f, --0.07356456359966735692f,-0.99729045667869020697f,-0.05519524434968971216f, --0.99847558057329477421f,-0.03680722294135933131f,-0.99932238458834943273f, --0.01840672990580516366f,-0.99983058179582340319f,1.00000000000000000000f, -0.00000000000000000000f,0.99729045667869020697f,0.07356456359966742631f, -0.98917650996478101444f,0.14673047445536174793f,0.97570213003852857003f, -0.21910124015686979759f,0.95694033573220882438f,0.29028467725446233105f, -0.93299279883473895669f,0.35989503653498811087f,0.90398929312344333820f, -0.42755509343028208491f,0.87008699110871146054f,0.49289819222978403790f, -0.83146961230254523567f,0.55557023301960217765f,0.78834642762660622761f, -0.61523159058062681925f,0.74095112535495921691f,0.67155895484701833009f, -0.68954054473706694051f,0.72424708295146689174f,0.63439328416364548779f, -0.77301045336273688235f,0.57580819141784533866f,0.81758481315158371139f, -0.51410274419322166128f,0.85772861000027211809f,0.44961132965460659516f, -0.89322430119551532446f,0.38268343236508983729f,0.92387953251128673848f, -0.31368174039889157312f,0.94952818059303667475f,0.24298017990326398197f, -0.97003125319454397424f,0.17096188876030135595f,0.98527764238894122162f, -0.09801714032956077016f,0.99518472667219681771f,0.02454122852291226384f, -0.99969881869620424997f,-0.04906767432741800800f,0.99879545620517240501f, --0.12241067519921615403f,0.99247953459870996706f,-0.19509032201612819257f, -0.98078528040323043058f,-0.26671275747489830987f,0.96377606579543984022f, --0.33688985339221994009f,0.94154406518302080631f,-0.40524131400498974998f, -0.91420975570353069095f,-0.47139673682599769755f,0.88192126434835504956f, --0.53499761988709704230f,0.84485356524970722791f,-0.59569930449243335691f, -0.80320753148064494287f,-0.65317284295377653347f,0.75720884650648467851f, --0.70710678118654746172f,0.70710678118654757274f,-0.75720884650648467851f, -0.65317284295377664449f,-0.80320753148064483184f,0.59569930449243346793f, --0.84485356524970711689f,0.53499761988709715332f,-0.88192126434835493853f, -0.47139673682599780857f,-0.91420975570353069095f,0.40524131400498991651f, --0.94154406518302069529f,0.33688985339222032867f,-0.96377606579543984022f, -0.26671275747489847641f,-0.98078528040323043058f,0.19509032201612860891f, --0.99247953459870996706f,0.12241067519921634832f,-0.99879545620517240501f, -0.04906767432741796636f,-0.99969881869620424997f,-0.02454122852291207996f, --0.99518472667219692873f,-0.09801714032956058975f,-0.98527764238894133264f, --0.17096188876030096737f,-0.97003125319454397424f,-0.24298017990326381543f, --0.94952818059303678577f,-0.31368174039889118454f,-0.92387953251128684951f, --0.38268343236508967076f,-0.89322430119551532446f,-0.44961132965460665067f, --0.85772861000027211809f,-0.51410274419322155026f,-0.81758481315158371139f, --0.57580819141784533866f,-0.77301045336273710440f,-0.63439328416364526575f, --0.72424708295146700276f,-0.68954054473706682948f,-0.67155895484701866316f, --0.74095112535495888384f,-0.61523159058062726334f,-0.78834642762660589455f, --0.55557023301960217765f,-0.83146961230254523567f,-0.49289819222978420443f, --0.87008699110871134952f,-0.42755509343028247349f,-0.90398929312344311615f, --0.35989503653498794433f,-0.93299279883473895669f,-0.29028467725446244208f, --0.95694033573220882438f,-0.21910124015687010290f,-0.97570213003852845901f, --0.14673047445536230304f,-0.98917650996478090342f,-0.07356456359966735692f, --0.99729045667869020697f,1.00000000000000000000f,0.00000000000000000000f, -0.95694033573220882438f,0.29028467725446233105f,0.83146961230254523567f, -0.55557023301960217765f,0.63439328416364548779f,0.77301045336273688235f, -0.38268343236508983729f,0.92387953251128673848f,0.09801714032956077016f, -0.99518472667219681771f,-0.19509032201612819257f,0.98078528040323043058f, --0.47139673682599769755f,0.88192126434835504956f,-0.70710678118654746172f, -0.70710678118654757274f,-0.88192126434835493853f,0.47139673682599780857f, --0.98078528040323043058f,0.19509032201612860891f,-0.99518472667219692873f, --0.09801714032956058975f,-0.92387953251128684951f,-0.38268343236508967076f, --0.77301045336273710440f,-0.63439328416364526575f,-0.55557023301960217765f, --0.83146961230254523567f,-0.29028467725446244208f,-0.95694033573220882438f, -1.00000000000000000000f,0.00000000000000000000f,0.38268343236508983729f, -0.92387953251128673848f,-0.70710678118654746172f,0.70710678118654757274f, --0.92387953251128684951f,-0.38268343236508967076f,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) || defined(ARM_TABLE_TWIDDLECOEF_F32_8192) - -uint32_t rearranged_twiddle_tab_stride1_arr_4096_f32[6]={ -0,2048,2560,2688,2720,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_4096_f32[6]={ -0,2048,2560,2688,2720,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_4096_f32[6]={ -0,2048,2560,2688,2720,0,}; - -float32_t rearranged_twiddle_stride1_4096_f32[2728]={ -1.00000000000000000000f,0.00000000000000000000f,0.99999882345170187925f, -0.00153398018628476550f,0.99999529380957619118f,0.00306795676296597614f, -0.99998941108192840321f,0.00460192612044857050f,0.99998117528260110909f, -0.00613588464915447527f,0.99997058643097413988f,0.00766982873953109701f, -0.99995764455196389786f,0.00920375478205981944f,0.99994234967602391162f, -0.01073765916726449055f,0.99992470183914450299f,0.01227153828571992539f, -0.99990470108285289808f,0.01380538852806039059f,0.99988234745421256111f, -0.01533920628498810015f,0.99985764100582386060f,0.01687298794728171042f, -0.99983058179582340319f,0.01840672990580482019f,0.99980116988788425569f, -0.01994042855151444138f,0.99976940535121527898f,0.02147408027546950787f, -0.99973528826056168306f,0.02300768146883936868f,0.99969881869620424997f, -0.02454122852291228812f,0.99965999674395922270f,0.02607471782910390085f, -0.99961882249517863830f,0.02760814577896573974f,0.99957529604674921764f, -0.02914150876419372219f,0.99952941750109314256f,0.03067480317663662595f, -0.99948118696616694567f,0.03220802540830458582f,0.99943060455546173237f, -0.03374117185137757990f,0.99937767038800284780f,0.03527423889821394709f, -0.99932238458834954375f,0.03680722294135883171f,0.99926474728659442359f, -0.03834012037355269409f,0.99920475861836388631f,0.03987292758773981066f, -0.99914241872481690532f,0.04140564097707673946f,0.99907772775264536147f, -0.04293825693494082024f,0.99901068585407337697f,0.04447077185493866769f, -0.99894129318685687124f,0.04600318213091462299f,0.99886954991428356099f, -0.04753548415695930257f,0.99879545620517240501f,0.04906767432741801493f, -0.99871901223387293811f,0.05059974903689928166f,0.99864021818026527111f, -0.05213170468028332366f,0.99855907422975931365f,0.05366353765273051968f, -0.99847558057329477421f,0.05519524434968993420f,0.99838973740734016094f, -0.05672682116690774823f,0.99830154493389289261f,0.05825826450043575244f, -0.99821100336047818846f,0.05978957074663986820f,0.99811811290014917919f, -0.06132073630220857829f,0.99802287377148624081f,0.06285175756416140624f, -0.99792528619859599548f,0.06438263092985746505f,0.99782535041111164453f, -0.06591335279700380467f,0.99772306664419163624f,0.06744391956366405094f, -0.99761843513851955478f,0.06897432762826674613f,0.99751145614030345410f, -0.07050457338961385600f,0.99740212990127530279f,0.07203465324688933247f, -0.99729045667869020697f,0.07356456359966742631f,0.99717643673532618820f, -0.07509430084792130533f,0.99706007033948296225f,0.07662386139203149205f, -0.99694135776498216117f,0.07815324163279423197f,0.99682029929116566791f, -0.07968243797143012563f,0.99669689520289606044f,0.08121144680959244133f, -0.99657114579055483539f,0.08274026454937569164f,0.99644305135004263008f, -0.08426888759332407108f,0.99631261218277800129f,0.08579731234443989385f, -0.99617982859569698117f,0.08732553520619205922f,0.99604470090125196702f, -0.08885355258252460031f,0.99590722941741172125f,0.09038136087786498296f, -0.99576741446765981713f,0.09190895649713272386f,0.99562525638099430569f, -0.09343633584574778661f,0.99548075549192693856f,0.09496349532963899165f, -0.99533391214048227980f,0.09649043135525259274f,0.99518472667219692873f, -0.09801714032956060363f,0.99503319943811863180f,0.09954361866006931903f, -0.99487933079480561638f,0.10106986275482782167f,0.99472312110432570265f, -0.10259586902243628126f,0.99456457073425541537f,0.10412163387205458642f, -0.99440368005767909576f,0.10564715371341061589f,0.99424044945318790223f, -0.10717242495680884273f,0.99407487930487936634f,0.10869744401313871651f, -0.99390697000235606051f,0.11022220729388305938f,0.99373672194072459884f, -0.11174671121112658700f,0.99356413552059530403f,0.11327095217756434631f, -0.99338921114808065305f,0.11479492660651008373f,0.99321194923479450001f, -0.11631863091190475235f,0.99303235019785141002f,0.11784206150832497728f, -0.99285041445986510489f,0.11936521481099135467f,0.99266614244894801899f, -0.12088808723577708359f,0.99247953459870996706f,0.12241067519921619566f, -0.99229059134825736699f,0.12393297511851215920f,0.99209931314219179654f, -0.12545498341154623367f,0.99190570043060932726f,0.12697669649688586579f, -0.99170975366909952520f,0.12849811079379316880f,0.99151147331874389668f, -0.13001922272223334631f,0.99131085984611544415f,0.13154002870288311611f, -0.99110791372327688986f,0.13306052515713906459f,0.99090263542778000971f, -0.13458070850712616773f,0.99069502544266463406f,0.13610057517570620100f, -0.99048508425645709341f,0.13762012158648603832f,0.99027281236316910817f, -0.13913934416382620074f,0.99005821026229712256f,0.14065823933284921088f, -0.98984127845882052821f,0.14217680351944803063f,0.98962201746320088702f, -0.14369503315029447110f,0.98940042779138037687f,0.14521292465284746376f, -0.98917650996478101444f,0.14673047445536174793f,0.98895026451030298986f, -0.14824767898689603096f,0.98872169196032377858f,0.14976453467732150915f, -0.98849079285269658701f,0.15128103795733022219f,0.98825756773074946437f, -0.15279718525844343535f,0.98802201714328352633f,0.15431297301302010494f, -0.98778414164457217783f,0.15582839765426523271f,0.98754394179435922574f, -0.15734345561623824805f,0.98730141815785843473f,0.15885814333386144570f, -0.98705657130575097380f,0.16037245724292828464f,0.98680940181418552726f, -0.16188639378011182579f,0.98655991026477540817f,0.16339994938297322524f, -0.98630809724459866938f,0.16491312048996989437f,0.98605396334619543897f, -0.16642590354046410406f,0.98579750916756747614f,0.16793829497473117263f, -0.98553873531217606185f,0.16945029123396795900f,0.98527764238894122162f, -0.17096188876030121717f,0.98501423101223983814f,0.17247308399679595059f, -0.98474850180190420801f,0.17398387338746382214f,0.98448045538322093151f, -0.17549425337727142526f,0.98421009238692902521f,0.17700422041214874946f, -0.98393741344921892278f,0.17851377093899750692f,0.98366241921173025453f, -0.18002290140569951471f,0.98338511032155118130f,0.18153160826112496595f, -0.98310548743121628501f,0.18303988795514095078f,0.98282355119870523641f, -0.18454773693861961648f,0.98253930228744124076f,0.18605515166344663291f, -0.98225274136628937249f,0.18756212858252960252f,0.98196386910955524296f, -0.18906866414980619262f,0.98167268619698311305f,0.19057475482025273972f, -0.98137919331375456089f,0.19208039704989243734f,0.98108339115048670553f, -0.19358558729580360724f,0.98078528040323043058f,0.19509032201612824808f, -0.98048486177346938497f,0.19659459767008022335f,0.98018213596811742949f, -0.19809841071795356027f,0.97987710369951763756f,0.19960175762113097075f, -0.97956976568544051887f,0.20110463484209190055f,0.97926012264908202098f, -0.20260703884442113343f,0.97894817531906219710f,0.20410896609281686809f, -0.97863392442942320759f,0.20561041305309923910f,0.97831737071962765473f, -0.20711137619221856032f,0.97799851493455713936f,0.20861185197826348503f, -0.97767735782450992943f,0.21011183688046961016f,0.97735390014519996082f, -0.21161132736922755315f,0.97702814265775439484f,0.21311031991609136194f, -0.97670008612871184184f,0.21460881099378675829f,0.97636973133002114000f, -0.21610679707621952006f,0.97603707903903902388f,0.21760427463848364127f, -0.97570213003852857003f,0.21910124015686979759f,0.97536488511665697665f, -0.22059769010887350649f,0.97502534506699412020f,0.22209362097320350937f, -0.97468351068851066810f,0.22358902922978998729f,0.97433938278557585821f, -0.22508391135979283204f,0.97399296216795583359f,0.22657826384561000066f, -0.97364424965081197705f,0.22807208317088573102f,0.97329324605469824672f, -0.22956536582051886852f,0.97293995220556017678f,0.23105810828067110951f, -0.97258436893473221296f,0.23255030703877524467f,0.97222649707893626925f, -0.23404195858354343018f,0.97186633748027939639f,0.23553305940497548665f, -0.97150389098625178352f,0.23702360599436719801f,0.97113915844972509284f, -0.23851359484431841618f,0.97077214072895035013f,0.24000302244874149871f, -0.97040283868755550234f,0.24149188530286933019f,0.97003125319454397424f, -0.24298017990326387094f,0.96965738512429244800f,0.24446790274782415064f, -0.96928123535654853171f,0.24595505033579459497f,0.96890280477642887202f, -0.24744161916777326904f,0.96852209427441737777f,0.24892760574572014853f, -0.96813910474636244441f,0.25041300657296522436f,0.96775383709347551076f, -0.25189781815421696809f,0.96736629222232850545f,0.25338203699557015902f, -0.96697647104485207059f,0.25486565960451457169f,0.96658437447833311928f, -0.25634868248994291395f,0.96619000344541250413f,0.25783110216215898713f, -0.96579335887408368500f,0.25931291513288623474f,0.96539444169768939830f, -0.26079411791527551401f,0.96499325285492032478f,0.26227470702391358914f, -0.96458979328981275803f,0.26375467897483134694f,0.96418406395174582890f, -0.26523403028551179039f,0.96377606579543984022f,0.26671275747489836538f, -0.96336579978095404631f,0.26819085706340317632f,0.96295326687368387741f, -0.26966832557291509076f,0.96253846804435916340f,0.27114515952680801059f, -0.96212140426904158019f,0.27262135544994897662f,0.96170207652912254037f, -0.27409690986870638429f,0.96128048581132063966f,0.27557181931095814376f, -0.96085663310767965850f,0.27704608030609989555f,0.96043051941556578655f, -0.27851968938505305973f,0.96000214573766595727f,0.27999264308027321801f, -0.95957151308198451733f,0.28146493792575794091f,0.95913862246184189431f, -0.28293657045705539188f,0.95870347489587159906f,0.28440753721127187692f, -0.95826607140801767226f,0.28587783472708061527f,0.95782641302753290802f, -0.28734745954472951102f,0.95738450078897585627f,0.28881640820604947972f, -0.95694033573220882438f,0.29028467725446233105f,0.95649391890239510161f, -0.29175226323498926195f,0.95604525134999640557f,0.29321916269425862822f, -0.95559433413077110586f,0.29468537218051432669f,0.95514116830577078243f, -0.29615088824362378883f,0.95468575494133833814f,0.29761570743508619641f, -0.95422809510910566733f,0.29907982630804047508f,0.95376818988599032512f, -0.30054324141727345454f,0.95330604035419386211f,0.30200594931922808417f, -0.95284164760119871573f,0.30346794657201131562f,0.95237501271976587880f, -0.30492922973540237397f,0.95190613680793234597f,0.30638979537086091787f, -0.95143502096900833820f,0.30784964004153486661f,0.95096166631157508231f, -0.30930876031226872680f,0.95048607394948170235f,0.31076715274961147495f, -0.95000824500184299914f,0.31222481392182488413f,0.94952818059303667475f, -0.31368174039889151761f,0.94904588185270055689f,0.31513792875252244485f, -0.94856134991573026749f,0.31659337555616584581f,0.94807458592227622507f, -0.31804807738501494896f,0.94758559101774109124f,0.31950203081601569188f, -0.94709436635277721717f,0.32095523242787521445f,0.94660091308328353499f, -0.32240767880106985244f,0.94610523237040344835f,0.32385936651785285356f, -0.94560732538052127971f,0.32531029216226292622f,0.94510719328526060501f, -0.32676045232013173347f,0.94460483726148025685f,0.32820984357909249729f, -0.94410025849127265918f,0.32965846252858749255f,0.94359345816196038559f, -0.33110630575987642921f,0.94308443746609349478f,0.33255336986604422389f, -0.94257319760144686605f,0.33399965144200938205f,0.94205973977101731265f, -0.33544514708453160301f,0.94154406518302080631f,0.33688985339222005111f, -0.94102617505088925753f,0.33833376696554112728f,0.94050607059326829518f, -0.33977688440682685123f,0.93998375303401404679f,0.34121920232028235542f, -0.93945922360218991898f,0.34266071731199437833f,0.93893248353206459900f, -0.34410142598993881391f,0.93840353406310805795f,0.34554132496398909380f, -0.93787237643998988545f,0.34698041084592368133f,0.93733901191257495977f, -0.34841868024943456472f,0.93680344173592156043f,0.34985612979013491763f, -0.93626566717027825959f,0.35129275608556709276f,0.93572568948108036935f, -0.35272855575521072646f,0.93518350993894761025f,0.35416352542049034380f, -0.93463912981968078064f,0.35559766170478385172f,0.93409255040425887007f, -0.35703096123342997759f,0.93354377297883617270f,0.35846342063373654030f, -0.93299279883473895669f,0.35989503653498811087f,0.93243962926846235550f, -0.36132580556845428355f,0.93188426558166814750f,0.36275572436739722537f, -0.93132670908118042608f,0.36418478956707989180f,0.93076696107898371224f, -0.36561299780477385379f,0.93020502289221906889f,0.36704034571976718038f, -0.92964089584318121418f,0.36846682995337232125f,0.92907458125931585702f, -0.36989244714893410038f,0.92850608047321558924f,0.37131719395183754306f, -0.92793539482261788720f,0.37274106700951575855f,0.92736252565040111495f, -0.37416406297145793358f,0.92678747430458174872f,0.37558617848921721505f, -0.92621024213831137928f,0.37700741021641825945f,0.92563083050987271516f, -0.37842775480876555960f,0.92504924078267758425f,0.37984720892405116066f, -0.92446547432526260391f,0.38126576922216237620f,0.92387953251128673848f, -0.38268343236508978178f,0.92329141671952763559f,0.38410019501693504207f, -0.92270112833387862850f,0.38551605384391884890f,0.92210866874334518339f, -0.38693100551438858181f,0.92151403934204190183f,0.38834504669882624617f, -0.92091724152918941204f,0.38975817406985641123f,0.92031827670911059425f, -0.39117038430225387069f,0.91971714629122736095f,0.39258167407295146978f, -0.91911385169005777040f,0.39399204006104809883f,0.91850839432521225181f, -0.39540147894781635385f,0.91790077562139049672f,0.39680998741671030805f, -0.91729099700837790632f,0.39821756215337356100f,0.91667905992104270485f, -0.39962419984564678810f,0.91606496579933172075f,0.40102989718357562321f, -0.91544871608826783316f,0.40243465085941843018f,0.91483031223794619713f, -0.40383845756765407442f,0.91420975570353069095f,0.40524131400498986100f, -0.91358704794525080750f,0.40664321687036902864f,0.91296219042839821256f, -0.40804416286497868782f,0.91233518462332274801f,0.40944414869225759235f, -0.91170603200542987832f,0.41084317105790391089f,0.91107473405517636067f, -0.41224122666988288755f,0.91044129225806724737f,0.41363831223843450235f, -0.90980570810465222209f,0.41503442447608163146f,0.90916798309052238025f, -0.41642956009763715253f,0.90852811871630612117f,0.41782371582021227141f, -0.90788611648766626150f,0.41921688836322390515f,0.90724197791529581636f, -0.42060907444840250902f,0.90659570451491533483f,0.42200027079979968159f, -0.90594729780726845902f,0.42339047414379604728f,0.90529675931811881551f, -0.42477968120910880589f,0.90464409057824624050f,0.42616788872679961520f, -0.90398929312344333820f,0.42755509343028208491f,0.90333236849451181705f, -0.42894129205532949278f,0.90267331823725882600f,0.43032648134008261165f, -0.90201214390249317976f,0.43171065802505725895f,0.90134884704602202810f, -0.43309381885315195726f,0.90068342922864685907f,0.43447596056965565037f, -0.90001589201616016833f,0.43585707992225547480f,0.89934623697934157338f, -0.43723717366104408732f,0.89867446569395381673f,0.43861623853852765853f, -0.89800057974073987932f,0.43999427130963325583f,0.89732458070541831763f, -0.44137126873171667052f,0.89664647017868015499f,0.44274722756457002282f, -0.89596624975618521791f,0.44412214457042920035f,0.89528392103855758410f, -0.44549601651398174074f,0.89459948563138269595f,0.44686884016237415906f, -0.89391294514520325265f,0.44824061228521988598f,0.89322430119551532446f, -0.44961132965460653965f,0.89253355540276457791f,0.45098098904510386387f, -0.89184070939234272313f,0.45234958723377088896f,0.89114576479458318392f, -0.45371712100016386993f,0.89044872324475787817f,0.45508358712634383592f, -0.88974958638307277692f,0.45644898239688391772f,0.88904835585466457371f, -0.45781330359887717485f,0.88834503330959635470f,0.45917654752194408951f, -0.88763962040285393496f,0.46053871095824000514f,0.88693211879434219469f, -0.46189979070246273141f,0.88622253014888063838f,0.46325978355186014923f, -0.88551085613619995307f,0.46461868630623781584f,0.88479709843093778954f, -0.46597649576796618121f,0.88408125871263498752f,0.46733320874198841510f, -0.88336333866573157891f,0.46868882203582790114f,0.88264333997956279099f, -0.47004333245959561971f,0.88192126434835504956f,0.47139673682599764204f, -0.88119711347122209322f,0.47274903195034279069f,0.88047088905216075450f, -0.47410021465054996703f,0.87974259280004740713f,0.47545028174715586733f, -0.87901222642863352519f,0.47679923006332208812f,0.87827979165654157523f, -0.47814705642484300885f,0.87754529020726135258f,0.47949375766015295275f, -0.87680872380914565145f,0.48083933060033395845f,0.87607009419540660122f, -0.48218377207912271887f,0.87532940310411089246f,0.48352707893291868579f, -0.87458665227817611321f,0.48486924800079106435f,0.87384184346536686316f, -0.48621027612448641797f,0.87309497841829009079f,0.48755016014843599592f, -0.87234605889439154058f,0.48888889691976317176f,0.87159508665595097909f, -0.49022648328829115938f,0.87084206347007897531f,0.49156291610654989643f, -0.87008699110871146054f,0.49289819222978403790f,0.86932987134860684186f, -0.49423230851595967295f,0.86857070597134089507f,0.49556526182577254058f, -0.86780949676330332299f,0.49689704902265446895f,0.86704624551569264845f, -0.49822766697278181303f,0.86628095402451299467f,0.49955711254508183838f, -0.86551362409056908920f,0.50088538261124071482f,0.86474425751946237817f, -0.50221247404571078832f,0.86397285612158669643f,0.50353838372571757542f, -0.86319942171212415971f,0.50486310853126759035f,0.86242395611104050168f, -0.50618664534515522835f,0.86164646114308129921f,0.50750899105297087033f, -0.86086693863776730939f,0.50883014254310698909f,0.86008539042939013974f, -0.51015009670676680908f,0.85930181835700847337f,0.51146885043797030157f, -0.85851622426444273994f,0.51278640063356295542f,0.85772861000027211809f, -0.51410274419322166128f,0.85693897741782876221f,0.51541787801946292724f, -0.85614732837519447184f,0.51673179901764987321f,0.85535366473519602870f, -0.51804450409599933636f,0.85455798836540053376f,0.51935599016558964269f, -0.85376030113811141042f,0.52066625414036715735f,0.85296060493036363059f, -0.52197529293715438925f,0.85215890162391982887f,0.52328310347565643035f, -0.85135519310526519554f,0.52458968267846894928f,0.85054948126560347976f, -0.52589502747108463065f,0.84974176800085254868f,0.52719913478190127964f, -0.84893205521163961347f,0.52850200154222848337f,0.84812034480329723252f, -0.52980362468629460526f,0.84730663868585831544f,0.53110400115125500076f, -0.84649093877405212627f,0.53240312787719790144f,0.84567324698729906540f, -0.53370100180715296379f,0.84485356524970711689f,0.53499761988709715332f, -0.84403189549006640835f,0.53629297906596318235f,0.84320823964184543620f, -0.53758707629564539410f,0.84238259964318584760f,0.53887990853100842248f, -0.84155497743689844370f,0.54017147272989285423f,0.84072537497045807253f, -0.54146176585312344454f,0.83989379419599952126f,0.54275078486451588944f, -0.83906023707031274217f,0.54403852673088382019f,0.83822470555483807875f, -0.54532498842204646383f,0.83738720161566193578f,0.54661016691083486041f, -0.83654772722351200542f,0.54789405917310018967f,0.83570628435375260423f, -0.54917666218771965525f,0.83486287498638001026f,0.55045797293660481131f, -0.83401750110601813315f,0.55173798840470733573f,0.83317016470191318511f, -0.55301670558002746780f,0.83232086776792968408f,0.55429412145362000341f, -0.83146961230254523567f,0.55557023301960217765f,0.83061640030884631436f, -0.55684503727516010407f,0.82976123379452304540f,0.55811853122055610221f, -0.82890411477186487499f,0.55939071185913613604f,0.82804504525775579626f, -0.56066157619733603124f,0.82718402727366913130f,0.56193112124468935775f, -0.82632106284566353427f,0.56319934401383409117f,0.82545615400437755138f, -0.56446624152051938506f,0.82458930278502529099f,0.56573181078361312046f, -0.82372051122739142759f,0.56699604882510867832f,0.82284978137582642788f, -0.56825895267013148970f,0.82197711527924155472f,0.56952051934694714053f, -0.82110251499110464835f,0.57078074588696725566f,0.82022598256943468620f, -0.57203962932475704850f,0.81934752007679700903f,0.57329716669804220430f, -0.81846712958029865792f,0.57455335504771576360f,0.81758481315158371139f, -0.57580819141784533866f,0.81670057286682784525f,0.57706167285567944170f, -0.81581441080673378075f,0.57831379641165558958f,0.81492632905652662156f, -0.57956455913940563285f,0.81403632970594841378f,0.58081395809576452649f, -0.81314441484925359394f,0.58206199034077543697f,0.81225058658520399302f, -0.58330865293769829094f,0.81135484701706372945f,0.58455394295301532637f, -0.81045719825259476821f,0.58579785745643886408f,0.80955764240405125864f, -0.58704039352091796911f,0.80865618158817498262f,0.58828154822264522306f, -0.80775281792619035848f,0.58952131864106394055f,0.80684755354379933401f, -0.59075970185887416442f,0.80594039057117627944f,0.59199669496204099239f, -0.80503133114296365758f,0.59323229503979979516f,0.80412037739826569549f, -0.59446649918466443197f,0.80320753148064494287f,0.59569930449243335691f, -0.80229279553811572168f,0.59693070806219639124f,0.80137617172314024039f, -0.59816070699634238395f,0.80045766219262282082f,0.59938929840056454079f, -0.79953726910790501314f,0.60061647938386897305f,0.79861499463476093297f, -0.60184224705858002658f,0.79769084094339115509f,0.60306659854034816437f, -0.79676481020841882774f,0.60428953094815596181f,0.79583690460888356633f, -0.60551104140432554512f,0.79490712632823701256f,0.60673112703452447558f, -0.79397547755433717231f,0.60794978496777363208f,0.79304196047944364167f, -0.60916701233645320634f,0.79210657730021238887f,0.61038280627630947528f, -0.79116933021769020318f,0.61159716392646190641f,0.79023022143731003197f, -0.61281008242940970820f,0.78928925316888565167f,0.61402155893103849138f, -0.78834642762660622761f,0.61523159058062681925f,0.78740174702903142911f, -0.61644017453085364622f,0.78645521359908576731f,0.61764730793780386886f, -0.78550682956405393220f,0.61885298796097631957f,0.78455659715557524159f, -0.62005721176328909561f,0.78360451860963820092f,0.62125997651108755271f, -0.78265059616657572938f,0.62246127937414996723f,0.78169483207105938671f, -0.62366111752569453053f,0.78073722857209448822f,0.62485948814238634341f, -0.77977778792301455368f,0.62605638840434352232f,0.77881651238147597827f, -0.62725181549514408275f,0.77785340420945314754f,0.62844576660183271155f, -0.77688846567323244230f,0.62963823891492698426f,0.77592169904340768660f, -0.63082922962842447046f,0.77495310659487393057f,0.63201873593980906207f, -0.77398269060682289844f,0.63320675505005719064f,0.77301045336273699338f, -0.63439328416364548779f,0.77203639715038452351f,0.63557832048855611440f, -0.77106052426181381776f,0.63676186123628419899f,0.77008283699334789674f, -0.63794390362184405507f,0.76910333764557969882f,0.63912444486377573138f, -0.76812202852336541881f,0.64030348218415167327f,0.76713891193582040007f, -0.64148101280858305095f,0.76615399019631291733f,0.64265703396622686494f, -0.76516726562245895860f,0.64383154288979138613f,0.76417874053611667406f, -0.64500453681554392737f,0.76318841726338138010f,0.64617601298331628357f, -0.76219629813457900891f,0.64734596863651205911f,0.76120238548426177871f, -0.64851440102211244110f,0.76020668165120242055f,0.64968130739068319368f, -0.75920918897838796102f,0.65084668499638087535f,0.75820990981301528144f, -0.65201053109695950027f,0.75720884650648456748f,0.65317284295377675551f, -0.75620600141439453523f,0.65433361783180044036f,0.75520137689653654700f, -0.65549285299961534967f,0.75419497531688917125f,0.65665054572942893607f, -0.75318679904361252042f,0.65780669329707863735f,0.75217685044904269986f, -0.65896129298203731661f,0.75116513190968636771f,0.66011434206742047870f, -0.75015164580621507273f,0.66126583783999226540f,0.74913639452345937020f, -0.66241577759017178373f,0.74811938045040360379f,0.66356415861203976725f, -0.74710060598018013245f,0.66471097820334479334f,0.74608007351006377927f, -0.66585623366550972246f,0.74505778544146594733f,0.66699992230363747137f, -0.74403374417992929057f,0.66814204142651845153f,0.74300795213512171866f, -0.66928258834663600929f,0.74198041172083106787f,0.67042156038017308717f, -0.74095112535495921691f,0.67155895484701833009f,0.73992009545951620275f, -0.67269476907077285777f,0.73888732446061511361f,0.67382900037875603783f, -0.73785281478846598269f,0.67496164610201192513f,0.73681656887736979300f, -0.67609270357531592310f,0.73577858916571359238f,0.67722217013718033485f, -0.73473887809596349907f,0.67835004312986146857f,0.73369743811466026084f, -0.67947631989936496666f,0.73265427167241281570f,0.68060099779545302212f, -0.73160938122389262972f,0.68172407417164970767f,0.73056276922782759087f, -0.68284554638524808112f,0.72951443814699701296f,0.68396541179731540350f, -0.72846439044822519637f,0.68508366777270035541f,0.72741262860237576593f, -0.68620031168003858824f,0.72635915508434600873f,0.68731534089175905233f, -0.72530397237306076796f,0.68842875278409043638f,0.72424708295146700276f, -0.68954054473706682948f,0.72318848930652745999f,0.69065071413453460458f, -0.72212819392921534511f,0.69175925836415774750f,0.72106619931450810501f, -0.69286617481742462932f,0.72000250796138165477f,0.69397146088965389055f, -0.71893712237280449351f,0.69507511398000088043f,0.71787004505573170920f, -0.69617713149146298601f,0.71680127852109953857f,0.69727751083088651551f, -0.71573082528381870571f,0.69837624940897280457f,0.71465868786276909308f, -0.69947334464028376733f,0.71358486878079352422f,0.70056879394324833576f, -0.71250937056469243469f,0.70166259474016845488f,0.71143219574521643356f, -0.70275474445722529993f,0.71035334685706241764f,0.70384524052448493858f, -0.70927282643886568891f,0.70493408037590488124f,0.70819063703319540259f, -0.70602126144933974317f,0.70710678118654757274f,0.70710678118654757274f, -0.70602126144933974317f,0.70819063703319540259f,0.70493408037590499227f, -0.70927282643886568891f,0.70384524052448493858f,0.71035334685706241764f, -0.70275474445722529993f,0.71143219574521643356f,0.70166259474016845488f, -0.71250937056469232367f,0.70056879394324844679f,0.71358486878079352422f, -0.69947334464028376733f,0.71465868786276909308f,0.69837624940897291559f, -0.71573082528381859468f,0.69727751083088662654f,0.71680127852109942754f, -0.69617713149146298601f,0.71787004505573170920f,0.69507511398000088043f, -0.71893712237280438249f,0.69397146088965400157f,0.72000250796138165477f, -0.69286617481742474034f,0.72106619931450810501f,0.69175925836415774750f, -0.72212819392921534511f,0.69065071413453460458f,0.72318848930652734897f, -0.68954054473706694051f,0.72424708295146689174f,0.68842875278409043638f, -0.72530397237306076796f,0.68731534089175905233f,0.72635915508434600873f, -0.68620031168003858824f,0.72741262860237576593f,0.68508366777270035541f, -0.72846439044822519637f,0.68396541179731551452f,0.72951443814699690193f, -0.68284554638524808112f,0.73056276922782759087f,0.68172407417164981869f, -0.73160938122389262972f,0.68060099779545302212f,0.73265427167241281570f, -0.67947631989936496666f,0.73369743811466026084f,0.67835004312986146857f, -0.73473887809596349907f,0.67722217013718044587f,0.73577858916571348136f, -0.67609270357531603413f,0.73681656887736979300f,0.67496164610201203615f, -0.73785281478846598269f,0.67382900037875614885f,0.73888732446061511361f, -0.67269476907077296879f,0.73992009545951609173f,0.67155895484701833009f, -0.74095112535495910588f,0.67042156038017308717f,0.74198041172083095685f, -0.66928258834663600929f,0.74300795213512171866f,0.66814204142651856255f, -0.74403374417992929057f,0.66699992230363747137f,0.74505778544146594733f, -0.66585623366550972246f,0.74608007351006366825f,0.66471097820334490436f, -0.74710060598018013245f,0.66356415861203987827f,0.74811938045040349277f, -0.66241577759017178373f,0.74913639452345925918f,0.66126583783999226540f, -0.75015164580621496171f,0.66011434206742047870f,0.75116513190968636771f, -0.65896129298203731661f,0.75217685044904269986f,0.65780669329707874837f, -0.75318679904361252042f,0.65665054572942904709f,0.75419497531688917125f, -0.65549285299961546070f,0.75520137689653654700f,0.65433361783180055138f, -0.75620600141439453523f,0.65317284295377686654f,0.75720884650648456748f, -0.65201053109695950027f,0.75820990981301528144f,0.65084668499638098638f, -0.75920918897838796102f,0.64968130739068319368f,0.76020668165120242055f, -0.64851440102211255212f,0.76120238548426177871f,0.64734596863651205911f, -0.76219629813457889789f,0.64617601298331639459f,0.76318841726338126907f, -0.64500453681554403840f,0.76417874053611667406f,0.64383154288979149715f, -0.76516726562245895860f,0.64265703396622686494f,0.76615399019631280630f, -0.64148101280858316198f,0.76713891193582040007f,0.64030348218415167327f, -0.76812202852336530778f,0.63912444486377573138f,0.76910333764557958780f, -0.63794390362184416610f,0.77008283699334789674f,0.63676186123628419899f, -0.77106052426181381776f,0.63557832048855622542f,0.77203639715038441249f, -0.63439328416364548779f,0.77301045336273688235f,0.63320675505005719064f, -0.77398269060682278742f,0.63201873593980906207f,0.77495310659487381955f, -0.63082922962842458148f,0.77592169904340757558f,0.62963823891492709528f, -0.77688846567323244230f,0.62844576660183271155f,0.77785340420945303652f, -0.62725181549514419377f,0.77881651238147586724f,0.62605638840434352232f, -0.77977778792301444266f,0.62485948814238645443f,0.78073722857209448822f, -0.62366111752569464155f,0.78169483207105938671f,0.62246127937415007825f, -0.78265059616657572938f,0.62125997651108766373f,0.78360451860963820092f, -0.62005721176328920663f,0.78455659715557524159f,0.61885298796097631957f, -0.78550682956405393220f,0.61764730793780397988f,0.78645521359908576731f, -0.61644017453085364622f,0.78740174702903131809f,0.61523159058062681925f, -0.78834642762660622761f,0.61402155893103849138f,0.78928925316888565167f, -0.61281008242940970820f,0.79023022143731003197f,0.61159716392646201744f, -0.79116933021769009216f,0.61038280627630947528f,0.79210657730021227785f, -0.60916701233645320634f,0.79304196047944364167f,0.60794978496777374311f, -0.79397547755433717231f,0.60673112703452447558f,0.79490712632823701256f, -0.60551104140432554512f,0.79583690460888345530f,0.60428953094815607283f, -0.79676481020841871672f,0.60306659854034827539f,0.79769084094339104407f, -0.60184224705858002658f,0.79861499463476082195f,0.60061647938386897305f, -0.79953726910790501314f,0.59938929840056454079f,0.80045766219262270980f, -0.59816070699634238395f,0.80137617172314012937f,0.59693070806219650226f, -0.80229279553811572168f,0.59569930449243346793f,0.80320753148064483184f, -0.59446649918466454299f,0.80412037739826569549f,0.59323229503979979516f, -0.80503133114296365758f,0.59199669496204099239f,0.80594039057117627944f, -0.59075970185887427544f,0.80684755354379922299f,0.58952131864106394055f, -0.80775281792619024746f,0.58828154822264533408f,0.80865618158817498262f, -0.58704039352091808013f,0.80955764240405125864f,0.58579785745643886408f, -0.81045719825259476821f,0.58455394295301532637f,0.81135484701706372945f, -0.58330865293769829094f,0.81225058658520388200f,0.58206199034077554799f, -0.81314441484925359394f,0.58081395809576452649f,0.81403632970594830276f, -0.57956455913940574387f,0.81492632905652662156f,0.57831379641165558958f, -0.81581441080673378075f,0.57706167285567955272f,0.81670057286682784525f, -0.57580819141784533866f,0.81758481315158371139f,0.57455335504771576360f, -0.81846712958029865792f,0.57329716669804231532f,0.81934752007679689800f, -0.57203962932475704850f,0.82022598256943468620f,0.57078074588696736669f, -0.82110251499110464835f,0.56952051934694725155f,0.82197711527924155472f, -0.56825895267013148970f,0.82284978137582631685f,0.56699604882510867832f, -0.82372051122739131657f,0.56573181078361323149f,0.82458930278502529099f, -0.56446624152051949608f,0.82545615400437744036f,0.56319934401383409117f, -0.82632106284566353427f,0.56193112124468946877f,0.82718402727366913130f, -0.56066157619733603124f,0.82804504525775579626f,0.55939071185913613604f, -0.82890411477186487499f,0.55811853122055610221f,0.82976123379452304540f, -0.55684503727516010407f,0.83061640030884620334f,0.55557023301960228867f, -0.83146961230254523567f,0.55429412145362011444f,0.83232086776792968408f, -0.55301670558002757883f,0.83317016470191318511f,0.55173798840470744675f, -0.83401750110601813315f,0.55045797293660481131f,0.83486287498638001026f, -0.54917666218771976627f,0.83570628435375260423f,0.54789405917310018967f, -0.83654772722351189440f,0.54661016691083486041f,0.83738720161566193578f, -0.54532498842204646383f,0.83822470555483796772f,0.54403852673088393122f, -0.83906023707031263115f,0.54275078486451600046f,0.83989379419599941023f, -0.54146176585312355556f,0.84072537497045796151f,0.54017147272989296525f, -0.84155497743689833268f,0.53887990853100842248f,0.84238259964318584760f, -0.53758707629564550512f,0.84320823964184543620f,0.53629297906596318235f, -0.84403189549006640835f,0.53499761988709726435f,0.84485356524970700587f, -0.53370100180715296379f,0.84567324698729906540f,0.53240312787719801246f, -0.84649093877405212627f,0.53110400115125500076f,0.84730663868585831544f, -0.52980362468629482731f,0.84812034480329712149f,0.52850200154222848337f, -0.84893205521163961347f,0.52719913478190139067f,0.84974176800085243766f, -0.52589502747108474168f,0.85054948126560336874f,0.52458968267846883826f, -0.85135519310526519554f,0.52328310347565643035f,0.85215890162391982887f, -0.52197529293715438925f,0.85296060493036363059f,0.52066625414036726838f, -0.85376030113811129940f,0.51935599016558953167f,0.85455798836540053376f, -0.51804450409599933636f,0.85535366473519602870f,0.51673179901764998423f, -0.85614732837519447184f,0.51541787801946314929f,0.85693897741782865118f, -0.51410274419322166128f,0.85772861000027211809f,0.51278640063356306644f, -0.85851622426444273994f,0.51146885043797052361f,0.85930181835700836235f, -0.51015009670676669806f,0.86008539042939025077f,0.50883014254310698909f, -0.86086693863776730939f,0.50750899105297087033f,0.86164646114308129921f, -0.50618664534515533937f,0.86242395611104050168f,0.50486310853126747933f, -0.86319942171212415971f,0.50353838372571757542f,0.86397285612158669643f, -0.50221247404571089934f,0.86474425751946237817f,0.50088538261124093687f, -0.86551362409056897818f,0.49955711254508183838f,0.86628095402451299467f, -0.49822766697278186854f,0.86704624551569264845f,0.49689704902265463549f, -0.86780949676330321196f,0.49556526182577248507f,0.86857070597134089507f, -0.49423230851595972846f,0.86932987134860673084f,0.49289819222978409341f, -0.87008699110871134952f,0.49156291610655006297f,0.87084206347007886428f, -0.49022648328829110387f,0.87159508665595109012f,0.48888889691976322727f, -0.87234605889439142956f,0.48755016014843605143f,0.87309497841829009079f, -0.48621027612448652899f,0.87384184346536675214f,0.48486924800079111986f, -0.87458665227817611321f,0.48352707893291874131f,0.87532940310411078144f, -0.48218377207912282989f,0.87607009419540660122f,0.48083933060033390294f, -0.87680872380914576247f,0.47949375766015300826f,0.87754529020726124156f, -0.47814705642484311987f,0.87827979165654146421f,0.47679923006332225466f, -0.87901222642863341417f,0.47545028174715586733f,0.87974259280004740713f, -0.47410021465055002254f,0.88047088905216075450f,0.47274903195034290171f, -0.88119711347122198219f,0.47139673682599780857f,0.88192126434835493853f, -0.47004333245959561971f,0.88264333997956279099f,0.46868882203582795665f, -0.88336333866573157891f,0.46733320874198852612f,0.88408125871263498752f, -0.46597649576796612569f,0.88479709843093778954f,0.46461868630623781584f, -0.88551085613619995307f,0.46325978355186026025f,0.88622253014888063838f, -0.46189979070246284243f,0.88693211879434208367f,0.46053871095824000514f, -0.88763962040285393496f,0.45917654752194414502f,0.88834503330959635470f, -0.45781330359887728587f,0.88904835585466457371f,0.45644898239688386221f, -0.88974958638307288794f,0.45508358712634383592f,0.89044872324475787817f, -0.45371712100016392544f,0.89114576479458318392f,0.45234958723377099998f, -0.89184070939234272313f,0.45098098904510380835f,0.89253355540276468894f, -0.44961132965460659516f,0.89322430119551532446f,0.44824061228521999700f, -0.89391294514520325265f,0.44686884016237432560f,0.89459948563138258493f, -0.44549601651398174074f,0.89528392103855758410f,0.44412214457042925586f, -0.89596624975618510689f,0.44274722756457013384f,0.89664647017868015499f, -0.44137126873171661501f,0.89732458070541831763f,0.43999427130963325583f, -0.89800057974073987932f,0.43861623853852771404f,0.89867446569395381673f, -0.43723717366104419835f,0.89934623697934146236f,0.43585707992225547480f, -0.90001589201616027935f,0.43447596056965570588f,0.90068342922864685907f, -0.43309381885315201277f,0.90134884704602202810f,0.43171065802505736997f, -0.90201214390249306874f,0.43032648134008261165f,0.90267331823725882600f, -0.42894129205532954829f,0.90333236849451181705f,0.42755509343028219593f, -0.90398929312344333820f,0.42616788872679961520f,0.90464409057824624050f, -0.42477968120910880589f,0.90529675931811881551f,0.42339047414379610279f, -0.90594729780726845902f,0.42200027079979979261f,0.90659570451491533483f, -0.42060907444840250902f,0.90724197791529592738f,0.41921688836322396066f, -0.90788611648766626150f,0.41782371582021238243f,0.90852811871630612117f, -0.41642956009763731906f,0.90916798309052226923f,0.41503442447608163146f, -0.90980570810465222209f,0.41363831223843455787f,0.91044129225806713634f, -0.41224122666988299857f,0.91107473405517624965f,0.41084317105790391089f, -0.91170603200542987832f,0.40944414869225764786f,0.91233518462332274801f, -0.40804416286497874333f,0.91296219042839810154f,0.40664321687036913966f, -0.91358704794525080750f,0.40524131400498986100f,0.91420975570353069095f, -0.40383845756765412993f,0.91483031223794608611f,0.40243465085941854120f, -0.91544871608826783316f,0.40102989718357578974f,0.91606496579933160973f, -0.39962419984564678810f,0.91667905992104270485f,0.39821756215337361651f, -0.91729099700837790632f,0.39680998741671041907f,0.91790077562139038569f, -0.39540147894781629834f,0.91850839432521225181f,0.39399204006104809883f, -0.91911385169005777040f,0.39258167407295152529f,0.91971714629122736095f, -0.39117038430225398171f,0.92031827670911048322f,0.38975817406985641123f, -0.92091724152918941204f,0.38834504669882630168f,0.92151403934204190183f, -0.38693100551438869283f,0.92210866874334507237f,0.38551605384391901543f, -0.92270112833387851747f,0.38410019501693504207f,0.92329141671952763559f, -0.38268343236508983729f,0.92387953251128673848f,0.38126576922216248722f, -0.92446547432526260391f,0.37984720892405110515f,0.92504924078267758425f, -0.37842775480876561511f,0.92563083050987271516f,0.37700741021641831496f, -0.92621024213831126826f,0.37558617848921732607f,0.92678747430458174872f, -0.37416406297145798909f,0.92736252565040111495f,0.37274106700951581406f, -0.92793539482261788720f,0.37131719395183759858f,0.92850608047321558924f, -0.36989244714893426691f,0.92907458125931574600f,0.36846682995337232125f, -0.92964089584318121418f,0.36704034571976723589f,0.93020502289221906889f, -0.36561299780477396482f,0.93076696107898371224f,0.36418478956707983629f, -0.93132670908118042608f,0.36275572436739722537f,0.93188426558166814750f, -0.36132580556845433906f,0.93243962926846235550f,0.35989503653498827740f, -0.93299279883473884567f,0.35846342063373654030f,0.93354377297883617270f, -0.35703096123343003310f,0.93409255040425887007f,0.35559766170478396274f, -0.93463912981968078064f,0.35416352542049051033f,0.93518350993894749923f, -0.35272855575521072646f,0.93572568948108036935f,0.35129275608556714827f, -0.93626566717027825959f,0.34985612979013502866f,0.93680344173592156043f, -0.34841868024943450921f,0.93733901191257495977f,0.34698041084592368133f, -0.93787237643998988545f,0.34554132496398914931f,0.93840353406310805795f, -0.34410142598993898044f,0.93893248353206448797f,0.34266071731199437833f, -0.93945922360218991898f,0.34121920232028241093f,0.93998375303401393577f, -0.33977688440682696225f,0.94050607059326829518f,0.33833376696554129381f, -0.94102617505088925753f,0.33688985339222005111f,0.94154406518302080631f, -0.33544514708453165852f,0.94205973977101731265f,0.33399965144200949307f, -0.94257319760144686605f,0.33255336986604422389f,0.94308443746609349478f, -0.33110630575987642921f,0.94359345816196038559f,0.32965846252858754806f, -0.94410025849127265918f,0.32820984357909266382f,0.94460483726148025685f, -0.32676045232013178898f,0.94510719328526060501f,0.32531029216226298173f, -0.94560732538052127971f,0.32385936651785296458f,0.94610523237040333733f, -0.32240767880107001897f,0.94660091308328353499f,0.32095523242787521445f, -0.94709436635277721717f,0.31950203081601574739f,0.94758559101774109124f, -0.31804807738501505998f,0.94807458592227622507f,0.31659337555616584581f, -0.94856134991573026749f,0.31513792875252244485f,0.94904588185270055689f, -0.31368174039889157312f,0.94952818059303667475f,0.31222481392182505067f, -0.95000824500184299914f,0.31076715274961147495f,0.95048607394948170235f, -0.30930876031226878231f,0.95096166631157508231f,0.30784964004153497763f, -0.95143502096900833820f,0.30638979537086108440f,0.95190613680793223494f, -0.30492922973540242948f,0.95237501271976587880f,0.30346794657201137113f, -0.95284164760119871573f,0.30200594931922819519f,0.95330604035419375109f, -0.30054324141727339903f,0.95376818988599032512f,0.29907982630804047508f, -0.95422809510910566733f,0.29761570743508630743f,0.95468575494133833814f, -0.29615088824362395536f,0.95514116830577067141f,0.29468537218051432669f, -0.95559433413077110586f,0.29321916269425868373f,0.95604525134999640557f, -0.29175226323498937298f,0.95649391890239499059f,0.29028467725446233105f, -0.95694033573220893540f,0.28881640820604947972f,0.95738450078897585627f, -0.28734745954472956653f,0.95782641302753290802f,0.28587783472708072630f, -0.95826607140801767226f,0.28440753721127182141f,0.95870347489587159906f, -0.28293657045705539188f,0.95913862246184189431f,0.28146493792575805193f, -0.95957151308198451733f,0.27999264308027338455f,0.96000214573766584625f, -0.27851968938505305973f,0.96043051941556578655f,0.27704608030609995106f, -0.96085663310767965850f,0.27557181931095825478f,0.96128048581132063966f, -0.27409690986870632878f,0.96170207652912254037f,0.27262135544994897662f, -0.96212140426904158019f,0.27114515952680806610f,0.96253846804435916340f, -0.26966832557291520178f,0.96295326687368387741f,0.26819085706340317632f, -0.96336579978095404631f,0.26671275747489842090f,0.96377606579543984022f, -0.26523403028551190141f,0.96418406395174571788f,0.26375467897483151347f, -0.96458979328981264700f,0.26227470702391358914f,0.96499325285492032478f, -0.26079411791527556952f,0.96539444169768939830f,0.25931291513288634576f, -0.96579335887408357397f,0.25783110216215893162f,0.96619000344541261516f, -0.25634868248994291395f,0.96658437447833311928f,0.25486565960451462720f, -0.96697647104485207059f,0.25338203699557027004f,0.96736629222232850545f, -0.25189781815421691258f,0.96775383709347551076f,0.25041300657296527987f, -0.96813910474636244441f,0.24892760574572025956f,0.96852209427441726675f, -0.24744161916777343557f,0.96890280477642887202f,0.24595505033579459497f, -0.96928123535654853171f,0.24446790274782420616f,0.96965738512429244800f, -0.24298017990326398197f,0.97003125319454397424f,0.24149188530286930243f, -0.97040283868755550234f,0.24000302244874149871f,0.97077214072895035013f, -0.23851359484431849944f,0.97113915844972509284f,0.23702360599436733679f, -0.97150389098625178352f,0.23553305940497545889f,0.97186633748027939639f, -0.23404195858354345794f,0.97222649707893626925f,0.23255030703877532794f, -0.97258436893473221296f,0.23105810828067127605f,0.97293995220556006576f, -0.22956536582051886852f,0.97329324605469824672f,0.22807208317088578653f, -0.97364424965081186603f,0.22657826384561011168f,0.97399296216795583359f, -0.22508391135979277653f,0.97433938278557585821f,0.22358902922979001504f, -0.97468351068851066810f,0.22209362097320359264f,0.97502534506699412020f, -0.22059769010887364526f,0.97536488511665686563f,0.21910124015686976984f, -0.97570213003852857003f,0.21760427463848366902f,0.97603707903903902388f, -0.21610679707621960333f,0.97636973133002114000f,0.21460881099378692483f, -0.97670008612871184184f,0.21311031991609136194f,0.97702814265775439484f, -0.21161132736922760866f,0.97735390014519996082f,0.21011183688046972118f, -0.97767735782450992943f,0.20861185197826345727f,0.97799851493455713936f, -0.20711137619221856032f,0.97831737071962765473f,0.20561041305309932237f, -0.97863392442942309657f,0.20410896609281700687f,0.97894817531906219710f, -0.20260703884442110567f,0.97926012264908202098f,0.20110463484209195606f, -0.97956976568544051887f,0.19960175762113105402f,0.97987710369951763756f, -0.19809841071795372680f,0.98018213596811731847f,0.19659459767008022335f, -0.98048486177346938497f,0.19509032201612833135f,0.98078528040323043058f, -0.19358558729580374602f,0.98108339115048659451f,0.19208039704989238183f, -0.98137919331375456089f,0.19057475482025279523f,0.98167268619698311305f, -0.18906866414980627589f,0.98196386910955524296f,0.18756212858252974129f, -0.98225274136628937249f,0.18605515166344663291f,0.98253930228744124076f, -0.18454773693861964423f,0.98282355119870523641f,0.18303988795514106180f, -0.98310548743121628501f,0.18153160826112513249f,0.98338511032155118130f, -0.18002290140569951471f,0.98366241921173025453f,0.17851377093899759019f, -0.98393741344921892278f,0.17700422041214886049f,0.98421009238692902521f, -0.17549425337727139751f,0.98448045538322093151f,0.17398387338746384989f, -0.98474850180190420801f,0.17247308399679603386f,0.98501423101223983814f, -0.17096188876030135595f,0.98527764238894122162f,0.16945029123396793125f, -0.98553873531217606185f,0.16793829497473122814f,0.98579750916756736512f, -0.16642590354046421508f,0.98605396334619543897f,0.16491312048997008866f, -0.98630809724459866938f,0.16339994938297322524f,0.98655991026477540817f, -0.16188639378011188130f,0.98680940181418541624f,0.16037245724292839566f, -0.98705657130575097380f,0.15885814333386139019f,0.98730141815785843473f, -0.15734345561623827581f,0.98754394179435922574f,0.15582839765426531597f, -0.98778414164457217783f,0.15431297301302024372f,0.98802201714328352633f, -0.15279718525844340760f,0.98825756773074946437f,0.15128103795733024994f, -0.98849079285269658701f,0.14976453467732162017f,0.98872169196032377858f, -0.14824767898689619749f,0.98895026451030298986f,0.14673047445536174793f, -0.98917650996478101444f,0.14521292465284751927f,0.98940042779138037687f, -0.14369503315029458212f,0.98962201746320077600f,0.14217680351944800288f, -0.98984127845882052821f,0.14065823933284923863f,0.99005821026229712256f, -0.13913934416382628401f,0.99027281236316910817f,0.13762012158648617710f, -0.99048508425645698239f,0.13610057517570620100f,0.99069502544266463406f, -0.13458070850712622324f,0.99090263542778000971f,0.13306052515713917561f, -0.99110791372327677884f,0.13154002870288328264f,0.99131085984611544415f, -0.13001922272223334631f,0.99151147331874389668f,0.12849811079379322432f, -0.99170975366909952520f,0.12697669649688597682f,0.99190570043060932726f, -0.12545498341154620592f,0.99209931314219179654f,0.12393297511851220083f, -0.99229059134825736699f,0.12241067519921627893f,0.99247953459870996706f, -0.12088808723577722237f,0.99266614244894801899f,0.11936521481099135467f, -0.99285041445986510489f,0.11784206150832501891f,0.99303235019785141002f, -0.11631863091190487725f,0.99321194923479450001f,0.11479492660651025027f, -0.99338921114808065305f,0.11327095217756436019f,0.99356413552059530403f, -0.11174671121112665639f,0.99373672194072459884f,0.11022220729388318428f, -0.99390697000235606051f,0.10869744401313867488f,0.99407487930487936634f, -0.10717242495680887049f,0.99424044945318790223f,0.10564715371341069916f, -0.99440368005767909576f,0.10412163387205472520f,0.99456457073425541537f, -0.10259586902243628126f,0.99472312110432570265f,0.10106986275482787718f, -0.99487933079480561638f,0.09954361866006944393f,0.99503319943811863180f, -0.09801714032956077016f,0.99518472667219681771f,0.09649043135525260662f, -0.99533391214048227980f,0.09496349532963906104f,0.99548075549192693856f, -0.09343633584574791151f,0.99562525638099430569f,0.09190895649713269611f, -0.99576741446765981713f,0.09038136087786501072f,0.99590722941741172125f, -0.08885355258252468358f,0.99604470090125196702f,0.08732553520619222576f, -0.99617982859569687015f,0.08579731234443987997f,0.99631261218277800129f, -0.08426888759332412659f,0.99644305135004263008f,0.08274026454937580266f, -0.99657114579055483539f,0.08121144680959238582f,0.99669689520289606044f, -0.07968243797143012563f,0.99682029929116566791f,0.07815324163279431524f, -0.99694135776498216117f,0.07662386139203161695f,0.99706007033948296225f, -0.07509430084792129145f,0.99717643673532618820f,0.07356456359966745406f, -0.99729045667869020697f,0.07203465324688941573f,0.99740212990127530279f, -0.07050457338961400866f,0.99751145614030345410f,0.06897432762826673225f, -0.99761843513851955478f,0.06744391956366410645f,0.99772306664419163624f, -0.06591335279700392957f,0.99782535041111164453f,0.06438263092985740954f, -0.99792528619859599548f,0.06285175756416142012f,0.99802287377148624081f, -0.06132073630220864768f,0.99811811290014917919f,0.05978957074664000698f, -0.99821100336047818846f,0.05825826450043573163f,0.99830154493389289261f, -0.05672682116690778292f,0.99838973740734016094f,0.05519524434969003135f, -0.99847558057329477421f,0.05366353765273067927f,0.99855907422975931365f, -0.05213170468028331672f,0.99864021818026527111f,0.05059974903689933717f, -0.99871901223387293811f,0.04906767432741812596f,0.99879545620517240501f, -0.04753548415695926094f,0.99886954991428356099f,0.04600318213091464381f, -0.99894129318685687124f,0.04447077185493874402f,0.99901068585407337697f, -0.04293825693494095902f,0.99907772775264536147f,0.04140564097707671171f, -0.99914241872481690532f,0.03987292758773984536f,0.99920475861836388631f, -0.03834012037355279123f,0.99926474728659442359f,0.03680722294135899131f, -0.99932238458834954375f,0.03527423889821394709f,0.99937767038800284780f, -0.03374117185137764235f,0.99943060455546173237f,0.03220802540830470378f, -0.99948118696616694567f,0.03067480317663658085f,0.99952941750109314256f, -0.02914150876419373953f,0.99957529604674921764f,0.02760814577896581953f, -0.99961882249517863830f,0.02607471782910403962f,0.99965999674395922270f, -0.02454122852291226384f,0.99969881869620424997f,0.02300768146883941032f, -0.99973528826056168306f,0.02147408027546960502f,0.99976940535121527898f, -0.01994042855151459750f,0.99980116988788425569f,0.01840672990580482019f, -0.99983058179582340319f,0.01687298794728177287f,0.99985764100582386060f, -0.01533920628498821985f,0.99988234745421256111f,0.01380538852806034895f, -0.99990470108285289808f,0.01227153828571994447f,0.99992470183914450299f, -0.01073765916726457208f,0.99994234967602391162f,0.00920375478205995995f, -0.99995764455196389786f,0.00766982873953107706f,0.99997058643097413988f, -0.00613588464915451517f,0.99998117528260110909f,0.00460192612044867198f, -0.99998941108192840321f,0.00306795676296613791f,0.99999529380957619118f, -0.00153398018628476615f,0.99999882345170187925f,1.00000000000000000000f, -0.00000000000000000000f,0.99998117528260110909f,0.00613588464915447527f, -0.99992470183914450299f,0.01227153828571992539f,0.99983058179582340319f, -0.01840672990580482019f,0.99969881869620424997f,0.02454122852291228812f, -0.99952941750109314256f,0.03067480317663662595f,0.99932238458834954375f, -0.03680722294135883171f,0.99907772775264536147f,0.04293825693494082024f, -0.99879545620517240501f,0.04906767432741801493f,0.99847558057329477421f, -0.05519524434968993420f,0.99811811290014917919f,0.06132073630220857829f, -0.99772306664419163624f,0.06744391956366405094f,0.99729045667869020697f, -0.07356456359966742631f,0.99682029929116566791f,0.07968243797143012563f, -0.99631261218277800129f,0.08579731234443989385f,0.99576741446765981713f, -0.09190895649713272386f,0.99518472667219692873f,0.09801714032956060363f, -0.99456457073425541537f,0.10412163387205458642f,0.99390697000235606051f, -0.11022220729388305938f,0.99321194923479450001f,0.11631863091190475235f, -0.99247953459870996706f,0.12241067519921619566f,0.99170975366909952520f, -0.12849811079379316880f,0.99090263542778000971f,0.13458070850712616773f, -0.99005821026229712256f,0.14065823933284921088f,0.98917650996478101444f, -0.14673047445536174793f,0.98825756773074946437f,0.15279718525844343535f, -0.98730141815785843473f,0.15885814333386144570f,0.98630809724459866938f, -0.16491312048996989437f,0.98527764238894122162f,0.17096188876030121717f, -0.98421009238692902521f,0.17700422041214874946f,0.98310548743121628501f, -0.18303988795514095078f,0.98196386910955524296f,0.18906866414980619262f, -0.98078528040323043058f,0.19509032201612824808f,0.97956976568544051887f, -0.20110463484209190055f,0.97831737071962765473f,0.20711137619221856032f, -0.97702814265775439484f,0.21311031991609136194f,0.97570213003852857003f, -0.21910124015686979759f,0.97433938278557585821f,0.22508391135979283204f, -0.97293995220556017678f,0.23105810828067110951f,0.97150389098625178352f, -0.23702360599436719801f,0.97003125319454397424f,0.24298017990326387094f, -0.96852209427441737777f,0.24892760574572014853f,0.96697647104485207059f, -0.25486565960451457169f,0.96539444169768939830f,0.26079411791527551401f, -0.96377606579543984022f,0.26671275747489836538f,0.96212140426904158019f, -0.27262135544994897662f,0.96043051941556578655f,0.27851968938505305973f, -0.95870347489587159906f,0.28440753721127187692f,0.95694033573220882438f, -0.29028467725446233105f,0.95514116830577078243f,0.29615088824362378883f, -0.95330604035419386211f,0.30200594931922808417f,0.95143502096900833820f, -0.30784964004153486661f,0.94952818059303667475f,0.31368174039889151761f, -0.94758559101774109124f,0.31950203081601569188f,0.94560732538052127971f, -0.32531029216226292622f,0.94359345816196038559f,0.33110630575987642921f, -0.94154406518302080631f,0.33688985339222005111f,0.93945922360218991898f, -0.34266071731199437833f,0.93733901191257495977f,0.34841868024943456472f, -0.93518350993894761025f,0.35416352542049034380f,0.93299279883473895669f, -0.35989503653498811087f,0.93076696107898371224f,0.36561299780477385379f, -0.92850608047321558924f,0.37131719395183754306f,0.92621024213831137928f, -0.37700741021641825945f,0.92387953251128673848f,0.38268343236508978178f, -0.92151403934204190183f,0.38834504669882624617f,0.91911385169005777040f, -0.39399204006104809883f,0.91667905992104270485f,0.39962419984564678810f, -0.91420975570353069095f,0.40524131400498986100f,0.91170603200542987832f, -0.41084317105790391089f,0.90916798309052238025f,0.41642956009763715253f, -0.90659570451491533483f,0.42200027079979968159f,0.90398929312344333820f, -0.42755509343028208491f,0.90134884704602202810f,0.43309381885315195726f, -0.89867446569395381673f,0.43861623853852765853f,0.89596624975618521791f, -0.44412214457042920035f,0.89322430119551532446f,0.44961132965460653965f, -0.89044872324475787817f,0.45508358712634383592f,0.88763962040285393496f, -0.46053871095824000514f,0.88479709843093778954f,0.46597649576796618121f, -0.88192126434835504956f,0.47139673682599764204f,0.87901222642863352519f, -0.47679923006332208812f,0.87607009419540660122f,0.48218377207912271887f, -0.87309497841829009079f,0.48755016014843599592f,0.87008699110871146054f, -0.49289819222978403790f,0.86704624551569264845f,0.49822766697278181303f, -0.86397285612158669643f,0.50353838372571757542f,0.86086693863776730939f, -0.50883014254310698909f,0.85772861000027211809f,0.51410274419322166128f, -0.85455798836540053376f,0.51935599016558964269f,0.85135519310526519554f, -0.52458968267846894928f,0.84812034480329723252f,0.52980362468629460526f, -0.84485356524970711689f,0.53499761988709715332f,0.84155497743689844370f, -0.54017147272989285423f,0.83822470555483807875f,0.54532498842204646383f, -0.83486287498638001026f,0.55045797293660481131f,0.83146961230254523567f, -0.55557023301960217765f,0.82804504525775579626f,0.56066157619733603124f, -0.82458930278502529099f,0.56573181078361312046f,0.82110251499110464835f, -0.57078074588696725566f,0.81758481315158371139f,0.57580819141784533866f, -0.81403632970594841378f,0.58081395809576452649f,0.81045719825259476821f, -0.58579785745643886408f,0.80684755354379933401f,0.59075970185887416442f, -0.80320753148064494287f,0.59569930449243335691f,0.79953726910790501314f, -0.60061647938386897305f,0.79583690460888356633f,0.60551104140432554512f, -0.79210657730021238887f,0.61038280627630947528f,0.78834642762660622761f, -0.61523159058062681925f,0.78455659715557524159f,0.62005721176328909561f, -0.78073722857209448822f,0.62485948814238634341f,0.77688846567323244230f, -0.62963823891492698426f,0.77301045336273699338f,0.63439328416364548779f, -0.76910333764557969882f,0.63912444486377573138f,0.76516726562245895860f, -0.64383154288979138613f,0.76120238548426177871f,0.64851440102211244110f, -0.75720884650648456748f,0.65317284295377675551f,0.75318679904361252042f, -0.65780669329707863735f,0.74913639452345937020f,0.66241577759017178373f, -0.74505778544146594733f,0.66699992230363747137f,0.74095112535495921691f, -0.67155895484701833009f,0.73681656887736979300f,0.67609270357531592310f, -0.73265427167241281570f,0.68060099779545302212f,0.72846439044822519637f, -0.68508366777270035541f,0.72424708295146700276f,0.68954054473706682948f, -0.72000250796138165477f,0.69397146088965389055f,0.71573082528381870571f, -0.69837624940897280457f,0.71143219574521643356f,0.70275474445722529993f, -0.70710678118654757274f,0.70710678118654757274f,0.70275474445722529993f, -0.71143219574521643356f,0.69837624940897291559f,0.71573082528381859468f, -0.69397146088965400157f,0.72000250796138165477f,0.68954054473706694051f, -0.72424708295146689174f,0.68508366777270035541f,0.72846439044822519637f, -0.68060099779545302212f,0.73265427167241281570f,0.67609270357531603413f, -0.73681656887736979300f,0.67155895484701833009f,0.74095112535495910588f, -0.66699992230363747137f,0.74505778544146594733f,0.66241577759017178373f, -0.74913639452345925918f,0.65780669329707874837f,0.75318679904361252042f, -0.65317284295377686654f,0.75720884650648456748f,0.64851440102211255212f, -0.76120238548426177871f,0.64383154288979149715f,0.76516726562245895860f, -0.63912444486377573138f,0.76910333764557958780f,0.63439328416364548779f, -0.77301045336273688235f,0.62963823891492709528f,0.77688846567323244230f, -0.62485948814238645443f,0.78073722857209448822f,0.62005721176328920663f, -0.78455659715557524159f,0.61523159058062681925f,0.78834642762660622761f, -0.61038280627630947528f,0.79210657730021227785f,0.60551104140432554512f, -0.79583690460888345530f,0.60061647938386897305f,0.79953726910790501314f, -0.59569930449243346793f,0.80320753148064483184f,0.59075970185887427544f, -0.80684755354379922299f,0.58579785745643886408f,0.81045719825259476821f, -0.58081395809576452649f,0.81403632970594830276f,0.57580819141784533866f, -0.81758481315158371139f,0.57078074588696736669f,0.82110251499110464835f, -0.56573181078361323149f,0.82458930278502529099f,0.56066157619733603124f, -0.82804504525775579626f,0.55557023301960228867f,0.83146961230254523567f, -0.55045797293660481131f,0.83486287498638001026f,0.54532498842204646383f, -0.83822470555483796772f,0.54017147272989296525f,0.84155497743689833268f, -0.53499761988709726435f,0.84485356524970700587f,0.52980362468629482731f, -0.84812034480329712149f,0.52458968267846883826f,0.85135519310526519554f, -0.51935599016558953167f,0.85455798836540053376f,0.51410274419322166128f, -0.85772861000027211809f,0.50883014254310698909f,0.86086693863776730939f, -0.50353838372571757542f,0.86397285612158669643f,0.49822766697278186854f, -0.86704624551569264845f,0.49289819222978409341f,0.87008699110871134952f, -0.48755016014843605143f,0.87309497841829009079f,0.48218377207912282989f, -0.87607009419540660122f,0.47679923006332225466f,0.87901222642863341417f, -0.47139673682599780857f,0.88192126434835493853f,0.46597649576796612569f, -0.88479709843093778954f,0.46053871095824000514f,0.88763962040285393496f, -0.45508358712634383592f,0.89044872324475787817f,0.44961132965460659516f, -0.89322430119551532446f,0.44412214457042925586f,0.89596624975618510689f, -0.43861623853852771404f,0.89867446569395381673f,0.43309381885315201277f, -0.90134884704602202810f,0.42755509343028219593f,0.90398929312344333820f, -0.42200027079979979261f,0.90659570451491533483f,0.41642956009763731906f, -0.90916798309052226923f,0.41084317105790391089f,0.91170603200542987832f, -0.40524131400498986100f,0.91420975570353069095f,0.39962419984564678810f, -0.91667905992104270485f,0.39399204006104809883f,0.91911385169005777040f, -0.38834504669882630168f,0.92151403934204190183f,0.38268343236508983729f, -0.92387953251128673848f,0.37700741021641831496f,0.92621024213831126826f, -0.37131719395183759858f,0.92850608047321558924f,0.36561299780477396482f, -0.93076696107898371224f,0.35989503653498827740f,0.93299279883473884567f, -0.35416352542049051033f,0.93518350993894749923f,0.34841868024943450921f, -0.93733901191257495977f,0.34266071731199437833f,0.93945922360218991898f, -0.33688985339222005111f,0.94154406518302080631f,0.33110630575987642921f, -0.94359345816196038559f,0.32531029216226298173f,0.94560732538052127971f, -0.31950203081601574739f,0.94758559101774109124f,0.31368174039889157312f, -0.94952818059303667475f,0.30784964004153497763f,0.95143502096900833820f, -0.30200594931922819519f,0.95330604035419375109f,0.29615088824362395536f, -0.95514116830577067141f,0.29028467725446233105f,0.95694033573220893540f, -0.28440753721127182141f,0.95870347489587159906f,0.27851968938505305973f, -0.96043051941556578655f,0.27262135544994897662f,0.96212140426904158019f, -0.26671275747489842090f,0.96377606579543984022f,0.26079411791527556952f, -0.96539444169768939830f,0.25486565960451462720f,0.96697647104485207059f, -0.24892760574572025956f,0.96852209427441726675f,0.24298017990326398197f, -0.97003125319454397424f,0.23702360599436733679f,0.97150389098625178352f, -0.23105810828067127605f,0.97293995220556006576f,0.22508391135979277653f, -0.97433938278557585821f,0.21910124015686976984f,0.97570213003852857003f, -0.21311031991609136194f,0.97702814265775439484f,0.20711137619221856032f, -0.97831737071962765473f,0.20110463484209195606f,0.97956976568544051887f, -0.19509032201612833135f,0.98078528040323043058f,0.18906866414980627589f, -0.98196386910955524296f,0.18303988795514106180f,0.98310548743121628501f, -0.17700422041214886049f,0.98421009238692902521f,0.17096188876030135595f, -0.98527764238894122162f,0.16491312048997008866f,0.98630809724459866938f, -0.15885814333386139019f,0.98730141815785843473f,0.15279718525844340760f, -0.98825756773074946437f,0.14673047445536174793f,0.98917650996478101444f, -0.14065823933284923863f,0.99005821026229712256f,0.13458070850712622324f, -0.99090263542778000971f,0.12849811079379322432f,0.99170975366909952520f, -0.12241067519921627893f,0.99247953459870996706f,0.11631863091190487725f, -0.99321194923479450001f,0.11022220729388318428f,0.99390697000235606051f, -0.10412163387205472520f,0.99456457073425541537f,0.09801714032956077016f, -0.99518472667219681771f,0.09190895649713269611f,0.99576741446765981713f, -0.08579731234443987997f,0.99631261218277800129f,0.07968243797143012563f, -0.99682029929116566791f,0.07356456359966745406f,0.99729045667869020697f, -0.06744391956366410645f,0.99772306664419163624f,0.06132073630220864768f, -0.99811811290014917919f,0.05519524434969003135f,0.99847558057329477421f, -0.04906767432741812596f,0.99879545620517240501f,0.04293825693494095902f, -0.99907772775264536147f,0.03680722294135899131f,0.99932238458834954375f, -0.03067480317663658085f,0.99952941750109314256f,0.02454122852291226384f, -0.99969881869620424997f,0.01840672990580482019f,0.99983058179582340319f, -0.01227153828571994447f,0.99992470183914450299f,0.00613588464915451517f, -0.99998117528260110909f,1.00000000000000000000f,0.00000000000000000000f, -0.99969881869620424997f,0.02454122852291228812f,0.99879545620517240501f, -0.04906767432741801493f,0.99729045667869020697f,0.07356456359966742631f, -0.99518472667219692873f,0.09801714032956060363f,0.99247953459870996706f, -0.12241067519921619566f,0.98917650996478101444f,0.14673047445536174793f, -0.98527764238894122162f,0.17096188876030121717f,0.98078528040323043058f, -0.19509032201612824808f,0.97570213003852857003f,0.21910124015686979759f, -0.97003125319454397424f,0.24298017990326387094f,0.96377606579543984022f, -0.26671275747489836538f,0.95694033573220882438f,0.29028467725446233105f, -0.94952818059303667475f,0.31368174039889151761f,0.94154406518302080631f, -0.33688985339222005111f,0.93299279883473895669f,0.35989503653498811087f, -0.92387953251128673848f,0.38268343236508978178f,0.91420975570353069095f, -0.40524131400498986100f,0.90398929312344333820f,0.42755509343028208491f, -0.89322430119551532446f,0.44961132965460653965f,0.88192126434835504956f, -0.47139673682599764204f,0.87008699110871146054f,0.49289819222978403790f, -0.85772861000027211809f,0.51410274419322166128f,0.84485356524970711689f, -0.53499761988709715332f,0.83146961230254523567f,0.55557023301960217765f, -0.81758481315158371139f,0.57580819141784533866f,0.80320753148064494287f, -0.59569930449243335691f,0.78834642762660622761f,0.61523159058062681925f, -0.77301045336273699338f,0.63439328416364548779f,0.75720884650648456748f, -0.65317284295377675551f,0.74095112535495921691f,0.67155895484701833009f, -0.72424708295146700276f,0.68954054473706682948f,0.70710678118654757274f, -0.70710678118654757274f,0.68954054473706694051f,0.72424708295146689174f, -0.67155895484701833009f,0.74095112535495910588f,0.65317284295377686654f, -0.75720884650648456748f,0.63439328416364548779f,0.77301045336273688235f, -0.61523159058062681925f,0.78834642762660622761f,0.59569930449243346793f, -0.80320753148064483184f,0.57580819141784533866f,0.81758481315158371139f, -0.55557023301960228867f,0.83146961230254523567f,0.53499761988709726435f, -0.84485356524970700587f,0.51410274419322166128f,0.85772861000027211809f, -0.49289819222978409341f,0.87008699110871134952f,0.47139673682599780857f, -0.88192126434835493853f,0.44961132965460659516f,0.89322430119551532446f, -0.42755509343028219593f,0.90398929312344333820f,0.40524131400498986100f, -0.91420975570353069095f,0.38268343236508983729f,0.92387953251128673848f, -0.35989503653498827740f,0.93299279883473884567f,0.33688985339222005111f, -0.94154406518302080631f,0.31368174039889157312f,0.94952818059303667475f, -0.29028467725446233105f,0.95694033573220893540f,0.26671275747489842090f, -0.96377606579543984022f,0.24298017990326398197f,0.97003125319454397424f, -0.21910124015686976984f,0.97570213003852857003f,0.19509032201612833135f, -0.98078528040323043058f,0.17096188876030135595f,0.98527764238894122162f, -0.14673047445536174793f,0.98917650996478101444f,0.12241067519921627893f, -0.99247953459870996706f,0.09801714032956077016f,0.99518472667219681771f, -0.07356456359966745406f,0.99729045667869020697f,0.04906767432741812596f, -0.99879545620517240501f,0.02454122852291226384f,0.99969881869620424997f, -1.00000000000000000000f,0.00000000000000000000f,0.99518472667219692873f, -0.09801714032956060363f,0.98078528040323043058f,0.19509032201612824808f, -0.95694033573220882438f,0.29028467725446233105f,0.92387953251128673848f, -0.38268343236508978178f,0.88192126434835504956f,0.47139673682599764204f, -0.83146961230254523567f,0.55557023301960217765f,0.77301045336273699338f, -0.63439328416364548779f,0.70710678118654757274f,0.70710678118654757274f, -0.63439328416364548779f,0.77301045336273688235f,0.55557023301960228867f, -0.83146961230254523567f,0.47139673682599780857f,0.88192126434835493853f, -0.38268343236508983729f,0.92387953251128673848f,0.29028467725446233105f, -0.95694033573220893540f,0.19509032201612833135f,0.98078528040323043058f, -0.09801714032956077016f,0.99518472667219681771f,1.00000000000000000000f, -0.00000000000000000000f,0.92387953251128673848f,0.38268343236508978178f, -0.70710678118654757274f,0.70710678118654757274f,0.38268343236508983729f, -0.92387953251128673848f,}; - -float32_t rearranged_twiddle_stride2_4096_f32[2728]={ -1.00000000000000000000f,0.00000000000000000000f,0.99999529380957619118f, -0.00306795676296597614f,0.99998117528260110909f,0.00613588464915447527f, -0.99995764455196389786f,0.00920375478205981944f,0.99992470183914450299f, -0.01227153828571992539f,0.99988234745421256111f,0.01533920628498810015f, -0.99983058179582340319f,0.01840672990580482019f,0.99976940535121527898f, -0.02147408027546950787f,0.99969881869620424997f,0.02454122852291228812f, -0.99961882249517863830f,0.02760814577896573974f,0.99952941750109314256f, -0.03067480317663662595f,0.99943060455546173237f,0.03374117185137757990f, -0.99932238458834954375f,0.03680722294135883171f,0.99920475861836388631f, -0.03987292758773981066f,0.99907772775264536147f,0.04293825693494082024f, -0.99894129318685687124f,0.04600318213091462299f,0.99879545620517240501f, -0.04906767432741801493f,0.99864021818026527111f,0.05213170468028332366f, -0.99847558057329477421f,0.05519524434968993420f,0.99830154493389289261f, -0.05825826450043575244f,0.99811811290014917919f,0.06132073630220857829f, -0.99792528619859599548f,0.06438263092985746505f,0.99772306664419163624f, -0.06744391956366405094f,0.99751145614030345410f,0.07050457338961385600f, -0.99729045667869020697f,0.07356456359966742631f,0.99706007033948296225f, -0.07662386139203149205f,0.99682029929116566791f,0.07968243797143012563f, -0.99657114579055483539f,0.08274026454937569164f,0.99631261218277800129f, -0.08579731234443989385f,0.99604470090125196702f,0.08885355258252460031f, -0.99576741446765981713f,0.09190895649713272386f,0.99548075549192693856f, -0.09496349532963899165f,0.99518472667219692873f,0.09801714032956060363f, -0.99487933079480561638f,0.10106986275482782167f,0.99456457073425541537f, -0.10412163387205458642f,0.99424044945318790223f,0.10717242495680884273f, -0.99390697000235606051f,0.11022220729388305938f,0.99356413552059530403f, -0.11327095217756434631f,0.99321194923479450001f,0.11631863091190475235f, -0.99285041445986510489f,0.11936521481099135467f,0.99247953459870996706f, -0.12241067519921619566f,0.99209931314219179654f,0.12545498341154623367f, -0.99170975366909952520f,0.12849811079379316880f,0.99131085984611544415f, -0.13154002870288311611f,0.99090263542778000971f,0.13458070850712616773f, -0.99048508425645709341f,0.13762012158648603832f,0.99005821026229712256f, -0.14065823933284921088f,0.98962201746320088702f,0.14369503315029447110f, -0.98917650996478101444f,0.14673047445536174793f,0.98872169196032377858f, -0.14976453467732150915f,0.98825756773074946437f,0.15279718525844343535f, -0.98778414164457217783f,0.15582839765426523271f,0.98730141815785843473f, -0.15885814333386144570f,0.98680940181418552726f,0.16188639378011182579f, -0.98630809724459866938f,0.16491312048996989437f,0.98579750916756747614f, -0.16793829497473117263f,0.98527764238894122162f,0.17096188876030121717f, -0.98474850180190420801f,0.17398387338746382214f,0.98421009238692902521f, -0.17700422041214874946f,0.98366241921173025453f,0.18002290140569951471f, -0.98310548743121628501f,0.18303988795514095078f,0.98253930228744124076f, -0.18605515166344663291f,0.98196386910955524296f,0.18906866414980619262f, -0.98137919331375456089f,0.19208039704989243734f,0.98078528040323043058f, -0.19509032201612824808f,0.98018213596811742949f,0.19809841071795356027f, -0.97956976568544051887f,0.20110463484209190055f,0.97894817531906219710f, -0.20410896609281686809f,0.97831737071962765473f,0.20711137619221856032f, -0.97767735782450992943f,0.21011183688046961016f,0.97702814265775439484f, -0.21311031991609136194f,0.97636973133002114000f,0.21610679707621952006f, -0.97570213003852857003f,0.21910124015686979759f,0.97502534506699412020f, -0.22209362097320350937f,0.97433938278557585821f,0.22508391135979283204f, -0.97364424965081197705f,0.22807208317088573102f,0.97293995220556017678f, -0.23105810828067110951f,0.97222649707893626925f,0.23404195858354343018f, -0.97150389098625178352f,0.23702360599436719801f,0.97077214072895035013f, -0.24000302244874149871f,0.97003125319454397424f,0.24298017990326387094f, -0.96928123535654853171f,0.24595505033579459497f,0.96852209427441737777f, -0.24892760574572014853f,0.96775383709347551076f,0.25189781815421696809f, -0.96697647104485207059f,0.25486565960451457169f,0.96619000344541250413f, -0.25783110216215898713f,0.96539444169768939830f,0.26079411791527551401f, -0.96458979328981275803f,0.26375467897483134694f,0.96377606579543984022f, -0.26671275747489836538f,0.96295326687368387741f,0.26966832557291509076f, -0.96212140426904158019f,0.27262135544994897662f,0.96128048581132063966f, -0.27557181931095814376f,0.96043051941556578655f,0.27851968938505305973f, -0.95957151308198451733f,0.28146493792575794091f,0.95870347489587159906f, -0.28440753721127187692f,0.95782641302753290802f,0.28734745954472951102f, -0.95694033573220882438f,0.29028467725446233105f,0.95604525134999640557f, -0.29321916269425862822f,0.95514116830577078243f,0.29615088824362378883f, -0.95422809510910566733f,0.29907982630804047508f,0.95330604035419386211f, -0.30200594931922808417f,0.95237501271976587880f,0.30492922973540237397f, -0.95143502096900833820f,0.30784964004153486661f,0.95048607394948170235f, -0.31076715274961147495f,0.94952818059303667475f,0.31368174039889151761f, -0.94856134991573026749f,0.31659337555616584581f,0.94758559101774109124f, -0.31950203081601569188f,0.94660091308328353499f,0.32240767880106985244f, -0.94560732538052127971f,0.32531029216226292622f,0.94460483726148025685f, -0.32820984357909249729f,0.94359345816196038559f,0.33110630575987642921f, -0.94257319760144686605f,0.33399965144200938205f,0.94154406518302080631f, -0.33688985339222005111f,0.94050607059326829518f,0.33977688440682685123f, -0.93945922360218991898f,0.34266071731199437833f,0.93840353406310805795f, -0.34554132496398909380f,0.93733901191257495977f,0.34841868024943456472f, -0.93626566717027825959f,0.35129275608556709276f,0.93518350993894761025f, -0.35416352542049034380f,0.93409255040425887007f,0.35703096123342997759f, -0.93299279883473895669f,0.35989503653498811087f,0.93188426558166814750f, -0.36275572436739722537f,0.93076696107898371224f,0.36561299780477385379f, -0.92964089584318121418f,0.36846682995337232125f,0.92850608047321558924f, -0.37131719395183754306f,0.92736252565040111495f,0.37416406297145793358f, -0.92621024213831137928f,0.37700741021641825945f,0.92504924078267758425f, -0.37984720892405116066f,0.92387953251128673848f,0.38268343236508978178f, -0.92270112833387862850f,0.38551605384391884890f,0.92151403934204190183f, -0.38834504669882624617f,0.92031827670911059425f,0.39117038430225387069f, -0.91911385169005777040f,0.39399204006104809883f,0.91790077562139049672f, -0.39680998741671030805f,0.91667905992104270485f,0.39962419984564678810f, -0.91544871608826783316f,0.40243465085941843018f,0.91420975570353069095f, -0.40524131400498986100f,0.91296219042839821256f,0.40804416286497868782f, -0.91170603200542987832f,0.41084317105790391089f,0.91044129225806724737f, -0.41363831223843450235f,0.90916798309052238025f,0.41642956009763715253f, -0.90788611648766626150f,0.41921688836322390515f,0.90659570451491533483f, -0.42200027079979968159f,0.90529675931811881551f,0.42477968120910880589f, -0.90398929312344333820f,0.42755509343028208491f,0.90267331823725882600f, -0.43032648134008261165f,0.90134884704602202810f,0.43309381885315195726f, -0.90001589201616016833f,0.43585707992225547480f,0.89867446569395381673f, -0.43861623853852765853f,0.89732458070541831763f,0.44137126873171667052f, -0.89596624975618521791f,0.44412214457042920035f,0.89459948563138269595f, -0.44686884016237415906f,0.89322430119551532446f,0.44961132965460653965f, -0.89184070939234272313f,0.45234958723377088896f,0.89044872324475787817f, -0.45508358712634383592f,0.88904835585466457371f,0.45781330359887717485f, -0.88763962040285393496f,0.46053871095824000514f,0.88622253014888063838f, -0.46325978355186014923f,0.88479709843093778954f,0.46597649576796618121f, -0.88336333866573157891f,0.46868882203582790114f,0.88192126434835504956f, -0.47139673682599764204f,0.88047088905216075450f,0.47410021465054996703f, -0.87901222642863352519f,0.47679923006332208812f,0.87754529020726135258f, -0.47949375766015295275f,0.87607009419540660122f,0.48218377207912271887f, -0.87458665227817611321f,0.48486924800079106435f,0.87309497841829009079f, -0.48755016014843599592f,0.87159508665595097909f,0.49022648328829115938f, -0.87008699110871146054f,0.49289819222978403790f,0.86857070597134089507f, -0.49556526182577254058f,0.86704624551569264845f,0.49822766697278181303f, -0.86551362409056908920f,0.50088538261124071482f,0.86397285612158669643f, -0.50353838372571757542f,0.86242395611104050168f,0.50618664534515522835f, -0.86086693863776730939f,0.50883014254310698909f,0.85930181835700847337f, -0.51146885043797030157f,0.85772861000027211809f,0.51410274419322166128f, -0.85614732837519447184f,0.51673179901764987321f,0.85455798836540053376f, -0.51935599016558964269f,0.85296060493036363059f,0.52197529293715438925f, -0.85135519310526519554f,0.52458968267846894928f,0.84974176800085254868f, -0.52719913478190127964f,0.84812034480329723252f,0.52980362468629460526f, -0.84649093877405212627f,0.53240312787719790144f,0.84485356524970711689f, -0.53499761988709715332f,0.84320823964184543620f,0.53758707629564539410f, -0.84155497743689844370f,0.54017147272989285423f,0.83989379419599952126f, -0.54275078486451588944f,0.83822470555483807875f,0.54532498842204646383f, -0.83654772722351200542f,0.54789405917310018967f,0.83486287498638001026f, -0.55045797293660481131f,0.83317016470191318511f,0.55301670558002746780f, -0.83146961230254523567f,0.55557023301960217765f,0.82976123379452304540f, -0.55811853122055610221f,0.82804504525775579626f,0.56066157619733603124f, -0.82632106284566353427f,0.56319934401383409117f,0.82458930278502529099f, -0.56573181078361312046f,0.82284978137582642788f,0.56825895267013148970f, -0.82110251499110464835f,0.57078074588696725566f,0.81934752007679700903f, -0.57329716669804220430f,0.81758481315158371139f,0.57580819141784533866f, -0.81581441080673378075f,0.57831379641165558958f,0.81403632970594841378f, -0.58081395809576452649f,0.81225058658520399302f,0.58330865293769829094f, -0.81045719825259476821f,0.58579785745643886408f,0.80865618158817498262f, -0.58828154822264522306f,0.80684755354379933401f,0.59075970185887416442f, -0.80503133114296365758f,0.59323229503979979516f,0.80320753148064494287f, -0.59569930449243335691f,0.80137617172314024039f,0.59816070699634238395f, -0.79953726910790501314f,0.60061647938386897305f,0.79769084094339115509f, -0.60306659854034816437f,0.79583690460888356633f,0.60551104140432554512f, -0.79397547755433717231f,0.60794978496777363208f,0.79210657730021238887f, -0.61038280627630947528f,0.79023022143731003197f,0.61281008242940970820f, -0.78834642762660622761f,0.61523159058062681925f,0.78645521359908576731f, -0.61764730793780386886f,0.78455659715557524159f,0.62005721176328909561f, -0.78265059616657572938f,0.62246127937414996723f,0.78073722857209448822f, -0.62485948814238634341f,0.77881651238147597827f,0.62725181549514408275f, -0.77688846567323244230f,0.62963823891492698426f,0.77495310659487393057f, -0.63201873593980906207f,0.77301045336273699338f,0.63439328416364548779f, -0.77106052426181381776f,0.63676186123628419899f,0.76910333764557969882f, -0.63912444486377573138f,0.76713891193582040007f,0.64148101280858305095f, -0.76516726562245895860f,0.64383154288979138613f,0.76318841726338138010f, -0.64617601298331628357f,0.76120238548426177871f,0.64851440102211244110f, -0.75920918897838796102f,0.65084668499638087535f,0.75720884650648456748f, -0.65317284295377675551f,0.75520137689653654700f,0.65549285299961534967f, -0.75318679904361252042f,0.65780669329707863735f,0.75116513190968636771f, -0.66011434206742047870f,0.74913639452345937020f,0.66241577759017178373f, -0.74710060598018013245f,0.66471097820334479334f,0.74505778544146594733f, -0.66699992230363747137f,0.74300795213512171866f,0.66928258834663600929f, -0.74095112535495921691f,0.67155895484701833009f,0.73888732446061511361f, -0.67382900037875603783f,0.73681656887736979300f,0.67609270357531592310f, -0.73473887809596349907f,0.67835004312986146857f,0.73265427167241281570f, -0.68060099779545302212f,0.73056276922782759087f,0.68284554638524808112f, -0.72846439044822519637f,0.68508366777270035541f,0.72635915508434600873f, -0.68731534089175905233f,0.72424708295146700276f,0.68954054473706682948f, -0.72212819392921534511f,0.69175925836415774750f,0.72000250796138165477f, -0.69397146088965389055f,0.71787004505573170920f,0.69617713149146298601f, -0.71573082528381870571f,0.69837624940897280457f,0.71358486878079352422f, -0.70056879394324833576f,0.71143219574521643356f,0.70275474445722529993f, -0.70927282643886568891f,0.70493408037590488124f,0.70710678118654757274f, -0.70710678118654757274f,0.70493408037590499227f,0.70927282643886568891f, -0.70275474445722529993f,0.71143219574521643356f,0.70056879394324844679f, -0.71358486878079352422f,0.69837624940897291559f,0.71573082528381859468f, -0.69617713149146298601f,0.71787004505573170920f,0.69397146088965400157f, -0.72000250796138165477f,0.69175925836415774750f,0.72212819392921534511f, -0.68954054473706694051f,0.72424708295146689174f,0.68731534089175905233f, -0.72635915508434600873f,0.68508366777270035541f,0.72846439044822519637f, -0.68284554638524808112f,0.73056276922782759087f,0.68060099779545302212f, -0.73265427167241281570f,0.67835004312986146857f,0.73473887809596349907f, -0.67609270357531603413f,0.73681656887736979300f,0.67382900037875614885f, -0.73888732446061511361f,0.67155895484701833009f,0.74095112535495910588f, -0.66928258834663600929f,0.74300795213512171866f,0.66699992230363747137f, -0.74505778544146594733f,0.66471097820334490436f,0.74710060598018013245f, -0.66241577759017178373f,0.74913639452345925918f,0.66011434206742047870f, -0.75116513190968636771f,0.65780669329707874837f,0.75318679904361252042f, -0.65549285299961546070f,0.75520137689653654700f,0.65317284295377686654f, -0.75720884650648456748f,0.65084668499638098638f,0.75920918897838796102f, -0.64851440102211255212f,0.76120238548426177871f,0.64617601298331639459f, -0.76318841726338126907f,0.64383154288979149715f,0.76516726562245895860f, -0.64148101280858316198f,0.76713891193582040007f,0.63912444486377573138f, -0.76910333764557958780f,0.63676186123628419899f,0.77106052426181381776f, -0.63439328416364548779f,0.77301045336273688235f,0.63201873593980906207f, -0.77495310659487381955f,0.62963823891492709528f,0.77688846567323244230f, -0.62725181549514419377f,0.77881651238147586724f,0.62485948814238645443f, -0.78073722857209448822f,0.62246127937415007825f,0.78265059616657572938f, -0.62005721176328920663f,0.78455659715557524159f,0.61764730793780397988f, -0.78645521359908576731f,0.61523159058062681925f,0.78834642762660622761f, -0.61281008242940970820f,0.79023022143731003197f,0.61038280627630947528f, -0.79210657730021227785f,0.60794978496777374311f,0.79397547755433717231f, -0.60551104140432554512f,0.79583690460888345530f,0.60306659854034827539f, -0.79769084094339104407f,0.60061647938386897305f,0.79953726910790501314f, -0.59816070699634238395f,0.80137617172314012937f,0.59569930449243346793f, -0.80320753148064483184f,0.59323229503979979516f,0.80503133114296365758f, -0.59075970185887427544f,0.80684755354379922299f,0.58828154822264533408f, -0.80865618158817498262f,0.58579785745643886408f,0.81045719825259476821f, -0.58330865293769829094f,0.81225058658520388200f,0.58081395809576452649f, -0.81403632970594830276f,0.57831379641165558958f,0.81581441080673378075f, -0.57580819141784533866f,0.81758481315158371139f,0.57329716669804231532f, -0.81934752007679689800f,0.57078074588696736669f,0.82110251499110464835f, -0.56825895267013148970f,0.82284978137582631685f,0.56573181078361323149f, -0.82458930278502529099f,0.56319934401383409117f,0.82632106284566353427f, -0.56066157619733603124f,0.82804504525775579626f,0.55811853122055610221f, -0.82976123379452304540f,0.55557023301960228867f,0.83146961230254523567f, -0.55301670558002757883f,0.83317016470191318511f,0.55045797293660481131f, -0.83486287498638001026f,0.54789405917310018967f,0.83654772722351189440f, -0.54532498842204646383f,0.83822470555483796772f,0.54275078486451600046f, -0.83989379419599941023f,0.54017147272989296525f,0.84155497743689833268f, -0.53758707629564550512f,0.84320823964184543620f,0.53499761988709726435f, -0.84485356524970700587f,0.53240312787719801246f,0.84649093877405212627f, -0.52980362468629482731f,0.84812034480329712149f,0.52719913478190139067f, -0.84974176800085243766f,0.52458968267846883826f,0.85135519310526519554f, -0.52197529293715438925f,0.85296060493036363059f,0.51935599016558953167f, -0.85455798836540053376f,0.51673179901764998423f,0.85614732837519447184f, -0.51410274419322166128f,0.85772861000027211809f,0.51146885043797052361f, -0.85930181835700836235f,0.50883014254310698909f,0.86086693863776730939f, -0.50618664534515533937f,0.86242395611104050168f,0.50353838372571757542f, -0.86397285612158669643f,0.50088538261124093687f,0.86551362409056897818f, -0.49822766697278186854f,0.86704624551569264845f,0.49556526182577248507f, -0.86857070597134089507f,0.49289819222978409341f,0.87008699110871134952f, -0.49022648328829110387f,0.87159508665595109012f,0.48755016014843605143f, -0.87309497841829009079f,0.48486924800079111986f,0.87458665227817611321f, -0.48218377207912282989f,0.87607009419540660122f,0.47949375766015300826f, -0.87754529020726124156f,0.47679923006332225466f,0.87901222642863341417f, -0.47410021465055002254f,0.88047088905216075450f,0.47139673682599780857f, -0.88192126434835493853f,0.46868882203582795665f,0.88336333866573157891f, -0.46597649576796612569f,0.88479709843093778954f,0.46325978355186026025f, -0.88622253014888063838f,0.46053871095824000514f,0.88763962040285393496f, -0.45781330359887728587f,0.88904835585466457371f,0.45508358712634383592f, -0.89044872324475787817f,0.45234958723377099998f,0.89184070939234272313f, -0.44961132965460659516f,0.89322430119551532446f,0.44686884016237432560f, -0.89459948563138258493f,0.44412214457042925586f,0.89596624975618510689f, -0.44137126873171661501f,0.89732458070541831763f,0.43861623853852771404f, -0.89867446569395381673f,0.43585707992225547480f,0.90001589201616027935f, -0.43309381885315201277f,0.90134884704602202810f,0.43032648134008261165f, -0.90267331823725882600f,0.42755509343028219593f,0.90398929312344333820f, -0.42477968120910880589f,0.90529675931811881551f,0.42200027079979979261f, -0.90659570451491533483f,0.41921688836322396066f,0.90788611648766626150f, -0.41642956009763731906f,0.90916798309052226923f,0.41363831223843455787f, -0.91044129225806713634f,0.41084317105790391089f,0.91170603200542987832f, -0.40804416286497874333f,0.91296219042839810154f,0.40524131400498986100f, -0.91420975570353069095f,0.40243465085941854120f,0.91544871608826783316f, -0.39962419984564678810f,0.91667905992104270485f,0.39680998741671041907f, -0.91790077562139038569f,0.39399204006104809883f,0.91911385169005777040f, -0.39117038430225398171f,0.92031827670911048322f,0.38834504669882630168f, -0.92151403934204190183f,0.38551605384391901543f,0.92270112833387851747f, -0.38268343236508983729f,0.92387953251128673848f,0.37984720892405110515f, -0.92504924078267758425f,0.37700741021641831496f,0.92621024213831126826f, -0.37416406297145798909f,0.92736252565040111495f,0.37131719395183759858f, -0.92850608047321558924f,0.36846682995337232125f,0.92964089584318121418f, -0.36561299780477396482f,0.93076696107898371224f,0.36275572436739722537f, -0.93188426558166814750f,0.35989503653498827740f,0.93299279883473884567f, -0.35703096123343003310f,0.93409255040425887007f,0.35416352542049051033f, -0.93518350993894749923f,0.35129275608556714827f,0.93626566717027825959f, -0.34841868024943450921f,0.93733901191257495977f,0.34554132496398914931f, -0.93840353406310805795f,0.34266071731199437833f,0.93945922360218991898f, -0.33977688440682696225f,0.94050607059326829518f,0.33688985339222005111f, -0.94154406518302080631f,0.33399965144200949307f,0.94257319760144686605f, -0.33110630575987642921f,0.94359345816196038559f,0.32820984357909266382f, -0.94460483726148025685f,0.32531029216226298173f,0.94560732538052127971f, -0.32240767880107001897f,0.94660091308328353499f,0.31950203081601574739f, -0.94758559101774109124f,0.31659337555616584581f,0.94856134991573026749f, -0.31368174039889157312f,0.94952818059303667475f,0.31076715274961147495f, -0.95048607394948170235f,0.30784964004153497763f,0.95143502096900833820f, -0.30492922973540242948f,0.95237501271976587880f,0.30200594931922819519f, -0.95330604035419375109f,0.29907982630804047508f,0.95422809510910566733f, -0.29615088824362395536f,0.95514116830577067141f,0.29321916269425868373f, -0.95604525134999640557f,0.29028467725446233105f,0.95694033573220893540f, -0.28734745954472956653f,0.95782641302753290802f,0.28440753721127182141f, -0.95870347489587159906f,0.28146493792575805193f,0.95957151308198451733f, -0.27851968938505305973f,0.96043051941556578655f,0.27557181931095825478f, -0.96128048581132063966f,0.27262135544994897662f,0.96212140426904158019f, -0.26966832557291520178f,0.96295326687368387741f,0.26671275747489842090f, -0.96377606579543984022f,0.26375467897483151347f,0.96458979328981264700f, -0.26079411791527556952f,0.96539444169768939830f,0.25783110216215893162f, -0.96619000344541261516f,0.25486565960451462720f,0.96697647104485207059f, -0.25189781815421691258f,0.96775383709347551076f,0.24892760574572025956f, -0.96852209427441726675f,0.24595505033579459497f,0.96928123535654853171f, -0.24298017990326398197f,0.97003125319454397424f,0.24000302244874149871f, -0.97077214072895035013f,0.23702360599436733679f,0.97150389098625178352f, -0.23404195858354345794f,0.97222649707893626925f,0.23105810828067127605f, -0.97293995220556006576f,0.22807208317088578653f,0.97364424965081186603f, -0.22508391135979277653f,0.97433938278557585821f,0.22209362097320359264f, -0.97502534506699412020f,0.21910124015686976984f,0.97570213003852857003f, -0.21610679707621960333f,0.97636973133002114000f,0.21311031991609136194f, -0.97702814265775439484f,0.21011183688046972118f,0.97767735782450992943f, -0.20711137619221856032f,0.97831737071962765473f,0.20410896609281700687f, -0.97894817531906219710f,0.20110463484209195606f,0.97956976568544051887f, -0.19809841071795372680f,0.98018213596811731847f,0.19509032201612833135f, -0.98078528040323043058f,0.19208039704989238183f,0.98137919331375456089f, -0.18906866414980627589f,0.98196386910955524296f,0.18605515166344663291f, -0.98253930228744124076f,0.18303988795514106180f,0.98310548743121628501f, -0.18002290140569951471f,0.98366241921173025453f,0.17700422041214886049f, -0.98421009238692902521f,0.17398387338746384989f,0.98474850180190420801f, -0.17096188876030135595f,0.98527764238894122162f,0.16793829497473122814f, -0.98579750916756736512f,0.16491312048997008866f,0.98630809724459866938f, -0.16188639378011188130f,0.98680940181418541624f,0.15885814333386139019f, -0.98730141815785843473f,0.15582839765426531597f,0.98778414164457217783f, -0.15279718525844340760f,0.98825756773074946437f,0.14976453467732162017f, -0.98872169196032377858f,0.14673047445536174793f,0.98917650996478101444f, -0.14369503315029458212f,0.98962201746320077600f,0.14065823933284923863f, -0.99005821026229712256f,0.13762012158648617710f,0.99048508425645698239f, -0.13458070850712622324f,0.99090263542778000971f,0.13154002870288328264f, -0.99131085984611544415f,0.12849811079379322432f,0.99170975366909952520f, -0.12545498341154620592f,0.99209931314219179654f,0.12241067519921627893f, -0.99247953459870996706f,0.11936521481099135467f,0.99285041445986510489f, -0.11631863091190487725f,0.99321194923479450001f,0.11327095217756436019f, -0.99356413552059530403f,0.11022220729388318428f,0.99390697000235606051f, -0.10717242495680887049f,0.99424044945318790223f,0.10412163387205472520f, -0.99456457073425541537f,0.10106986275482787718f,0.99487933079480561638f, -0.09801714032956077016f,0.99518472667219681771f,0.09496349532963906104f, -0.99548075549192693856f,0.09190895649713269611f,0.99576741446765981713f, -0.08885355258252468358f,0.99604470090125196702f,0.08579731234443987997f, -0.99631261218277800129f,0.08274026454937580266f,0.99657114579055483539f, -0.07968243797143012563f,0.99682029929116566791f,0.07662386139203161695f, -0.99706007033948296225f,0.07356456359966745406f,0.99729045667869020697f, -0.07050457338961400866f,0.99751145614030345410f,0.06744391956366410645f, -0.99772306664419163624f,0.06438263092985740954f,0.99792528619859599548f, -0.06132073630220864768f,0.99811811290014917919f,0.05825826450043573163f, -0.99830154493389289261f,0.05519524434969003135f,0.99847558057329477421f, -0.05213170468028331672f,0.99864021818026527111f,0.04906767432741812596f, -0.99879545620517240501f,0.04600318213091464381f,0.99894129318685687124f, -0.04293825693494095902f,0.99907772775264536147f,0.03987292758773984536f, -0.99920475861836388631f,0.03680722294135899131f,0.99932238458834954375f, -0.03374117185137764235f,0.99943060455546173237f,0.03067480317663658085f, -0.99952941750109314256f,0.02760814577896581953f,0.99961882249517863830f, -0.02454122852291226384f,0.99969881869620424997f,0.02147408027546960502f, -0.99976940535121527898f,0.01840672990580482019f,0.99983058179582340319f, -0.01533920628498821985f,0.99988234745421256111f,0.01227153828571994447f, -0.99992470183914450299f,0.00920375478205995995f,0.99995764455196389786f, -0.00613588464915451517f,0.99998117528260110909f,0.00306795676296613791f, -0.99999529380957619118f,0.00000000000000006123f,1.00000000000000000000f, --0.00306795676296601561f,0.99999529380957619118f,-0.00613588464915439287f, -0.99998117528260110909f,-0.00920375478205983678f,0.99995764455196389786f, --0.01227153828571982304f,0.99992470183914450299f,-0.01533920628498809842f, -0.99988234745421256111f,-0.01840672990580469529f,0.99983058179582340319f, --0.02147408027546948359f,0.99976940535121527898f,-0.02454122852291214241f, -0.99969881869620424997f,-0.02760814577896569810f,0.99961882249517863830f, --0.03067480317663645942f,0.99952941750109314256f,-0.03374117185137751745f, -0.99943060455546173237f,-0.03680722294135886641f,0.99932238458834954375f, --0.03987292758773972740f,0.99920475861836388631f,-0.04293825693494083412f, -0.99907772775264536147f,-0.04600318213091451891f,0.99894129318685687124f, --0.04906767432741800800f,0.99879545620517240501f,-0.05213170468028319182f, -0.99864021818026527111f,-0.05519524434968991339f,0.99847558057329477421f, --0.05825826450043560673f,0.99830154493389289261f,-0.06132073630220852972f, -0.99811811290014917919f,-0.06438263092985728464f,0.99792528619859599548f, --0.06744391956366398155f,0.99772306664419163624f,-0.07050457338961389764f, -0.99751145614030345410f,-0.07356456359966732916f,0.99729045667869020697f, --0.07662386139203150592f,0.99706007033948296225f,-0.07968243797143001461f, -0.99682029929116577893f,-0.08274026454937567776f,0.99657114579055483539f, --0.08579731234443975507f,0.99631261218277800129f,-0.08885355258252455868f, -0.99604470090125196702f,-0.09190895649713257121f,0.99576741446765981713f, --0.09496349532963895002f,0.99548075549192693856f,-0.09801714032956064526f, -0.99518472667219692873f,-0.10106986275482775228f,0.99487933079480561638f, --0.10412163387205460030f,0.99456457073425541537f,-0.10717242495680875947f, -0.99424044945318790223f,-0.11022220729388305938f,0.99390697000235606051f, --0.11327095217756423529f,0.99356413552059530403f,-0.11631863091190475235f, -0.99321194923479450001f,-0.11936521481099122977f,0.99285041445986510489f, --0.12241067519921615403f,0.99247953459870996706f,-0.12545498341154606714f, -0.99209931314219179654f,-0.12849811079379311329f,0.99170975366909952520f, --0.13154002870288314386f,0.99131085984611544415f,-0.13458070850712611222f, -0.99090263542778000971f,-0.13762012158648606608f,0.99048508425645698239f, --0.14065823933284912761f,0.99005821026229712256f,-0.14369503315029444335f, -0.98962201746320088702f,-0.14673047445536163691f,0.98917650996478101444f, --0.14976453467732150915f,0.98872169196032377858f,-0.15279718525844329657f, -0.98825756773074946437f,-0.15582839765426520495f,0.98778414164457217783f, --0.15885814333386127917f,0.98730141815785843473f,-0.16188639378011177028f, -0.98680940181418552726f,-0.16491312048996994988f,0.98630809724459866938f, --0.16793829497473108936f,0.98579750916756747614f,-0.17096188876030124493f, -0.98527764238894122162f,-0.17398387338746371111f,0.98474850180190420801f, --0.17700422041214874946f,0.98421009238692902521f,-0.18002290140569940369f, -0.98366241921173025453f,-0.18303988795514092303f,0.98310548743121628501f, --0.18605515166344649414f,0.98253930228744124076f,-0.18906866414980616486f, -0.98196386910955524296f,-0.19208039704989227081f,0.98137919331375456089f, --0.19509032201612819257f,0.98078528040323043058f,-0.19809841071795361578f, -0.98018213596811742949f,-0.20110463484209181728f,0.97956976568544051887f, --0.20410896609281689584f,0.97894817531906219710f,-0.20711137619221844930f, -0.97831737071962765473f,-0.21011183688046961016f,0.97767735782450992943f, --0.21311031991609125091f,0.97702814265775439484f,-0.21610679707621949230f, -0.97636973133002114000f,-0.21910124015686965881f,0.97570213003852857003f, --0.22209362097320348162f,0.97502534506699412020f,-0.22508391135979266551f, -0.97433938278557585821f,-0.22807208317088567551f,0.97364424965081197705f, --0.23105810828067113727f,0.97293995220556017678f,-0.23404195858354331916f, -0.97222649707893638027f,-0.23702360599436722577f,0.97150389098625178352f, --0.24000302244874138768f,0.97077214072895035013f,-0.24298017990326387094f, -0.97003125319454397424f,-0.24595505033579448395f,0.96928123535654853171f, --0.24892760574572012078f,0.96852209427441737777f,-0.25189781815421680156f, -0.96775383709347551076f,-0.25486565960451451618f,0.96697647104485207059f, --0.25783110216215882060f,0.96619000344541261516f,-0.26079411791527545850f, -0.96539444169768939830f,-0.26375467897483140245f,0.96458979328981275803f, --0.26671275747489830987f,0.96377606579543984022f,-0.26966832557291509076f, -0.96295326687368387741f,-0.27262135544994886560f,0.96212140426904158019f, --0.27557181931095814376f,0.96128048581132063966f,-0.27851968938505294870f, -0.96043051941556589757f,-0.28146493792575794091f,0.95957151308198451733f, --0.28440753721127171039f,0.95870347489587159906f,-0.28734745954472945551f, -0.95782641302753290802f,-0.29028467725446216452f,0.95694033573220893540f, --0.29321916269425857271f,0.95604525134999651659f,-0.29615088824362384434f, -0.95514116830577067141f,-0.29907982630804036406f,0.95422809510910566733f, --0.30200594931922808417f,0.95330604035419386211f,-0.30492922973540226295f, -0.95237501271976587880f,-0.30784964004153486661f,0.95143502096900833820f, --0.31076715274961136393f,0.95048607394948181337f,-0.31368174039889140658f, -0.94952818059303667475f,-0.31659337555616573479f,0.94856134991573037851f, --0.31950203081601563637f,0.94758559101774120226f,-0.32240767880106985244f, -0.94660091308328353499f,-0.32531029216226287071f,0.94560732538052139073f, --0.32820984357909255280f,0.94460483726148025685f,-0.33110630575987631818f, -0.94359345816196038559f,-0.33399965144200938205f,0.94257319760144686605f, --0.33688985339221994009f,0.94154406518302080631f,-0.33977688440682685123f, -0.94050607059326829518f,-0.34266071731199426731f,0.93945922360218991898f, --0.34554132496398903829f,0.93840353406310816897f,-0.34841868024943439819f, -0.93733901191257495977f,-0.35129275608556703725f,0.93626566717027825959f, --0.35416352542049039931f,0.93518350993894761025f,-0.35703096123342992207f, -0.93409255040425898109f,-0.35989503653498816638f,0.93299279883473884567f, --0.36275572436739711435f,0.93188426558166814750f,-0.36561299780477385379f, -0.93076696107898371224f,-0.36846682995337221023f,0.92964089584318132520f, --0.37131719395183748755f,0.92850608047321558924f,-0.37416406297145787807f, -0.92736252565040111495f,-0.37700741021641820394f,0.92621024213831137928f, --0.37984720892405099413f,0.92504924078267769527f,-0.38268343236508972627f, -0.92387953251128673848f,-0.38551605384391890441f,0.92270112833387851747f, --0.38834504669882619066f,0.92151403934204201285f,-0.39117038430225387069f, -0.92031827670911059425f,-0.39399204006104798781f,0.91911385169005777040f, --0.39680998741671030805f,0.91790077562139049672f,-0.39962419984564667708f, -0.91667905992104270485f,-0.40243465085941843018f,0.91544871608826783316f, --0.40524131400498974998f,0.91420975570353069095f,-0.40804416286497863231f, -0.91296219042839821256f,-0.41084317105790379987f,0.91170603200542987832f, --0.41363831223843450235f,0.91044129225806724737f,-0.41642956009763698599f, -0.90916798309052249127f,-0.41921688836322407168f,0.90788611648766615048f, --0.42200027079979968159f,0.90659570451491533483f,-0.42477968120910869487f, -0.90529675931811881551f,-0.42755509343028186287f,0.90398929312344344922f, --0.43032648134008272267f,0.90267331823725871498f,-0.43309381885315190175f, -0.90134884704602202810f,-0.43585707992225536378f,0.90001589201616027935f, --0.43861623853852738097f,0.89867446569395392775f,-0.44137126873171672603f, -0.89732458070541831763f,-0.44412214457042914484f,0.89596624975618521791f, --0.44686884016237399253f,0.89459948563138280697f,-0.44961132965460670619f, -0.89322430119551521344f,-0.45234958723377088896f,0.89184070939234272313f, --0.45508358712634372489f,0.89044872324475798919f,-0.45781330359887700832f, -0.88904835585466468473f,-0.46053871095824006066f,0.88763962040285393496f, --0.46325978355186014923f,0.88622253014888063838f,-0.46597649576796601467f, -0.88479709843093790056f,-0.46868882203582767909f,0.88336333866573168994f, --0.47139673682599769755f,0.88192126434835504956f,-0.47410021465054991152f, -0.88047088905216086552f,-0.47679923006332192159f,0.87901222642863352519f, --0.47949375766015311928f,0.87754529020726124156f,-0.48218377207912271887f, -0.87607009419540660122f,-0.48486924800079100883f,0.87458665227817622423f, --0.48755016014843571837f,0.87309497841829020182f,-0.49022648328829121489f, -0.87159508665595097909f,-0.49289819222978398239f,0.87008699110871146054f, --0.49556526182577237405f,0.86857070597134100609f,-0.49822766697278159098f, -0.86704624551569275948f,-0.50088538261124082585f,0.86551362409056908920f, --0.50353838372571746440f,0.86397285612158680745f,-0.50618664534515511733f, -0.86242395611104061270f,-0.50883014254310710012f,0.86086693863776719837f, --0.51146885043797041259f,0.85930181835700847337f,-0.51410274419322155026f, -0.85772861000027211809f,-0.51673179901764965116f,0.85614732837519458286f, --0.51935599016558964269f,0.85455798836540053376f,-0.52197529293715427823f, -0.85296060493036374162f,-0.52458968267846872724f,0.85135519310526519554f, --0.52719913478190105760f,0.84974176800085265970f,-0.52980362468629471628f, -0.84812034480329723252f,-0.53240312787719790144f,0.84649093877405212627f, --0.53499761988709704230f,0.84485356524970722791f,-0.53758707629564561614f, -0.84320823964184532517f,-0.54017147272989285423f,0.84155497743689844370f, --0.54275078486451577842f,0.83989379419599952126f,-0.54532498842204624179f, -0.83822470555483818977f,-0.54789405917310018967f,0.83654772722351200542f, --0.55045797293660470029f,0.83486287498638012128f,-0.55301670558002735678f, -0.83317016470191329613f,-0.55557023301960195560f,0.83146961230254534669f, --0.55811853122055610221f,0.82976123379452304540f,-0.56066157619733592021f, -0.82804504525775579626f,-0.56319934401383386913f,0.82632106284566364529f, --0.56573181078361323149f,0.82458930278502517996f,-0.56825895267013148970f, -0.82284978137582631685f,-0.57078074588696714464f,0.82110251499110475937f, --0.57329716669804198226f,0.81934752007679712005f,-0.57580819141784533866f, -0.81758481315158371139f,-0.57831379641165547856f,0.81581441080673378075f, --0.58081395809576441547f,0.81403632970594852480f,-0.58330865293769840196f, -0.81225058658520388200f,-0.58579785745643886408f,0.81045719825259476821f, --0.58828154822264522306f,0.80865618158817509364f,-0.59075970185887405339f, -0.80684755354379944503f,-0.59323229503979990618f,0.80503133114296354655f, --0.59569930449243335691f,0.80320753148064494287f,-0.59816070699634216190f, -0.80137617172314024039f,-0.60061647938386875101f,0.79953726910790523519f, --0.60306659854034827539f,0.79769084094339104407f,-0.60551104140432543410f, -0.79583690460888356633f,-0.60794978496777352106f,0.79397547755433728334f, --0.61038280627630958630f,0.79210657730021227785f,-0.61281008242940970820f, -0.79023022143731003197f,-0.61523159058062670823f,0.78834642762660633863f, --0.61764730793780375784f,0.78645521359908587833f,-0.62005721176328920663f, -0.78455659715557513056f,-0.62246127937414996723f,0.78265059616657572938f, --0.62485948814238623239f,0.78073722857209459924f,-0.62725181549514386070f, -0.77881651238147608929f,-0.62963823891492709528f,0.77688846567323244230f, --0.63201873593980895105f,0.77495310659487393057f,-0.63439328416364537677f, -0.77301045336273710440f,-0.63676186123628431002f,0.77106052426181370674f, --0.63912444486377573138f,0.76910333764557958780f,-0.64148101280858305095f, -0.76713891193582040007f,-0.64383154288979127511f,0.76516726562245906962f, --0.64617601298331639459f,0.76318841726338115805f,-0.64851440102211244110f, -0.76120238548426188974f,-0.65084668499638076433f,0.75920918897838807204f, --0.65317284295377653347f,0.75720884650648467851f,-0.65549285299961546070f, -0.75520137689653643598f,-0.65780669329707852633f,0.75318679904361252042f, --0.66011434206742036768f,0.75116513190968658975f,-0.66241577759017189475f, -0.74913639452345925918f,-0.66471097820334490436f,0.74710060598018013245f, --0.66699992230363736034f,0.74505778544146605835f,-0.66928258834663589827f, -0.74300795213512182968f,-0.67155895484701844111f,0.74095112535495899486f, --0.67382900037875603783f,0.73888732446061522463f,-0.67609270357531581208f, -0.73681656887737001504f,-0.67835004312986124653f,0.73473887809596372112f, --0.68060099779545302212f,0.73265427167241281570f,-0.68284554638524797010f, -0.73056276922782759087f,-0.68508366777270024439f,0.72846439044822530740f, --0.68731534089175916336f,0.72635915508434589771f,-0.68954054473706694051f, -0.72424708295146689174f,-0.69175925836415763648f,0.72212819392921545614f, --0.69397146088965377952f,0.72000250796138176579f,-0.69617713149146298601f, -0.71787004505573170920f,-0.69837624940897280457f,0.71573082528381870571f, --0.70056879394324822474f,0.71358486878079363525f,-0.70275474445722507788f, -0.71143219574521665560f,-0.70493408037590488124f,0.70927282643886557789f, --0.70710678118654746172f,0.70710678118654757274f,-0.70927282643886546687f, -0.70493408037590510329f,-0.71143219574521654458f,0.70275474445722518890f, --0.71358486878079352422f,0.70056879394324833576f,-0.71573082528381859468f, -0.69837624940897291559f,-0.71787004505573159818f,0.69617713149146309703f, --0.72000250796138165477f,0.69397146088965389055f,-0.72212819392921523409f, -0.69175925836415785852f,-0.72424708295146678072f,0.68954054473706705153f, --0.72635915508434578669f,0.68731534089175927438f,-0.72846439044822519637f, -0.68508366777270035541f,-0.73056276922782747985f,0.68284554638524808112f, --0.73265427167241270467f,0.68060099779545324417f,-0.73473887809596349907f, -0.67835004312986135755f,-0.73681656887736979300f,0.67609270357531592310f, --0.73888732446061511361f,0.67382900037875614885f,-0.74095112535495888384f, -0.67155895484701855214f,-0.74300795213512171866f,0.66928258834663600929f, --0.74505778544146594733f,0.66699992230363758239f,-0.74710060598018002143f, -0.66471097820334501538f,-0.74913639452345914815f,0.66241577759017200577f, --0.75116513190968636771f,0.66011434206742047870f,-0.75318679904361240940f, -0.65780669329707874837f,-0.75520137689653643598f,0.65549285299961557172f, --0.75720884650648467851f,0.65317284295377664449f,-0.75920918897838796102f, -0.65084668499638098638f,-0.76120238548426166769f,0.64851440102211255212f, --0.76318841726338115805f,0.64617601298331661663f,-0.76516726562245895860f, -0.64383154288979138613f,-0.76713891193582040007f,0.64148101280858316198f, --0.76910333764557947678f,0.63912444486377584241f,-0.77106052426181359571f, -0.63676186123628442104f,-0.77301045336273699338f,0.63439328416364548779f, --0.77495310659487381955f,0.63201873593980906207f,-0.77688846567323233128f, -0.62963823891492720630f,-0.77881651238147597827f,0.62725181549514408275f, --0.78073722857209448822f,0.62485948814238634341f,-0.78265059616657561836f, -0.62246127937415007825f,-0.78455659715557501954f,0.62005721176328942867f, --0.78645521359908576731f,0.61764730793780386886f,-0.78834642762660622761f, -0.61523159058062693028f,-0.79023022143730992095f,0.61281008242940981923f, --0.79210657730021216683f,0.61038280627630969732f,-0.79397547755433717231f, -0.60794978496777363208f,-0.79583690460888345530f,0.60551104140432565615f, --0.79769084094339093305f,0.60306659854034838641f,-0.79953726910790512417f, -0.60061647938386886203f,-0.80137617172314024039f,0.59816070699634238395f, --0.80320753148064483184f,0.59569930449243346793f,-0.80503133114296343553f, -0.59323229503980001720f,-0.80684755354379933401f,0.59075970185887416442f, --0.80865618158817498262f,0.58828154822264533408f,-0.81045719825259465718f, -0.58579785745643897510f,-0.81225058658520377097f,0.58330865293769851299f, --0.81403632970594841378f,0.58081395809576452649f,-0.81581441080673378075f, -0.57831379641165570060f,-0.81758481315158360037f,0.57580819141784544968f, --0.81934752007679700903f,0.57329716669804209328f,-0.82110251499110464835f, -0.57078074588696725566f,-0.82284978137582620583f,0.56825895267013171175f, --0.82458930278502506894f,0.56573181078361345353f,-0.82632106284566353427f, -0.56319934401383409117f,-0.82804504525775568524f,0.56066157619733614226f, --0.82976123379452293438f,0.55811853122055632426f,-0.83146961230254534669f, -0.55557023301960217765f,-0.83317016470191318511f,0.55301670558002746780f, --0.83486287498638001026f,0.55045797293660492233f,-0.83654772722351189440f, -0.54789405917310041172f,-0.83822470555483807875f,0.54532498842204635281f, --0.83989379419599952126f,0.54275078486451588944f,-0.84155497743689833268f, -0.54017147272989296525f,-0.84320823964184532517f,0.53758707629564572716f, --0.84485356524970711689f,0.53499761988709715332f,-0.84649093877405201525f, -0.53240312787719801246f,-0.84812034480329712149f,0.52980362468629482731f, --0.84974176800085254868f,0.52719913478190127964f,-0.85135519310526519554f, -0.52458968267846894928f,-0.85296060493036363059f,0.52197529293715438925f, --0.85455798836540042274f,0.51935599016558975372f,-0.85614732837519447184f, -0.51673179901764976218f,-0.85772861000027200706f,0.51410274419322177231f, --0.85930181835700836235f,0.51146885043797052361f,-0.86086693863776719837f, -0.50883014254310732216f,-0.86242395611104050168f,0.50618664534515522835f, --0.86397285612158669643f,0.50353838372571757542f,-0.86551362409056897818f, -0.50088538261124093687f,-0.86704624551569264845f,0.49822766697278175752f, --0.86857070597134089507f,0.49556526182577254058f,-0.87008699110871134952f, -0.49289819222978414892f,-0.87159508665595086807f,0.49022648328829138142f, --0.87309497841829009079f,0.48755016014843588490f,-0.87458665227817611321f, -0.48486924800079111986f,-0.87607009419540649020f,0.48218377207912288540f, --0.87754529020726113053f,0.47949375766015328582f,-0.87901222642863352519f, -0.47679923006332208812f,-0.88047088905216075450f,0.47410021465055007805f, --0.88192126434835493853f,0.47139673682599780857f,-0.88336333866573168994f, -0.46868882203582784562f,-0.88479709843093778954f,0.46597649576796618121f, --0.88622253014888052736f,0.46325978355186031576f,-0.88763962040285382393f, -0.46053871095824022719f,-0.88904835585466457371f,0.45781330359887717485f, --0.89044872324475787817f,0.45508358712634389143f,-0.89184070939234261211f, -0.45234958723377105549f,-0.89322430119551521344f,0.44961132965460687272f, --0.89459948563138269595f,0.44686884016237415906f,-0.89596624975618510689f, -0.44412214457042931137f,-0.89732458070541820661f,0.44137126873171689256f, --0.89867446569395392775f,0.43861623853852754751f,-0.90001589201616016833f, -0.43585707992225553031f,-0.90134884704602191707f,0.43309381885315206828f, --0.90267331823725871498f,0.43032648134008288920f,-0.90398929312344333820f, -0.42755509343028202940f,-0.90529675931811870448f,0.42477968120910886141f, --0.90659570451491533483f,0.42200027079979984812f,-0.90788611648766603945f, -0.41921688836322423821f,-0.90916798309052238025f,0.41642956009763715253f, --0.91044129225806713634f,0.41363831223843466889f,-0.91170603200542976730f, -0.41084317105790413294f,-0.91296219042839821256f,0.40804416286497857680f, --0.91420975570353069095f,0.40524131400498991651f,-0.91544871608826772214f, -0.40243465085941859671f,-0.91667905992104259383f,0.39962419984564706565f, --0.91790077562139049672f,0.39680998741671025254f,-0.91911385169005777040f, -0.39399204006104815434f,-0.92031827670911048322f,0.39117038430225403722f, --0.92151403934204179080f,0.38834504669882657923f,-0.92270112833387862850f, -0.38551605384391884890f,-0.92387953251128673848f,0.38268343236508989280f, --0.92504924078267747323f,0.37984720892405138271f,-0.92621024213831137928f, -0.37700741021641814843f,-0.92736252565040111495f,0.37416406297145804460f, --0.92850608047321547822f,0.37131719395183770960f,-0.92964089584318121418f, -0.36846682995337259880f,-0.93076696107898371224f,0.36561299780477379828f, --0.93188426558166803648f,0.36275572436739728088f,-0.93299279883473884567f, -0.35989503653498833291f,-0.93409255040425875904f,0.35703096123343031065f, --0.93518350993894761025f,0.35416352542049039931f,-0.93626566717027825959f, -0.35129275608556720378f,-0.93733901191257484875f,0.34841868024943478677f, --0.93840353406310816897f,0.34554132496398898278f,-0.93945922360218991898f, -0.34266071731199443384f,-0.94050607059326829518f,0.33977688440682701776f, --0.94154406518302069529f,0.33688985339222032867f,-0.94257319760144686605f, -0.33399965144200938205f,-0.94359345816196038559f,0.33110630575987648472f, --0.94460483726148014583f,0.32820984357909271933f,-0.94560732538052116869f, -0.32531029216226325929f,-0.94660091308328353499f,0.32240767880106985244f, --0.94758559101774109124f,0.31950203081601580291f,-0.94856134991573026749f, -0.31659337555616606785f,-0.94952818059303667475f,0.31368174039889140658f, --0.95048607394948170235f,0.31076715274961153046f,-0.95143502096900833820f, -0.30784964004153503314f,-0.95237501271976576778f,0.30492922973540265152f, --0.95330604035419386211f,0.30200594931922802866f,-0.95422809510910555630f, -0.29907982630804053059f,-0.95514116830577067141f,0.29615088824362401088f, --0.95604525134999629454f,0.29321916269425896129f,-0.95694033573220882438f, -0.29028467725446238656f,-0.95782641302753290802f,0.28734745954472962204f, --0.95870347489587148804f,0.28440753721127209896f,-0.95957151308198451733f, -0.28146493792575788540f,-0.96043051941556578655f,0.27851968938505317075f, --0.96128048581132063966f,0.27557181931095831029f,-0.96212140426904146917f, -0.27262135544994925418f,-0.96295326687368387741f,0.26966832557291509076f, --0.96377606579543984022f,0.26671275747489847641f,-0.96458979328981264700f, -0.26375467897483156898f,-0.96539444169768928727f,0.26079411791527584707f, --0.96619000344541250413f,0.25783110216215898713f,-0.96697647104485207059f, -0.25486565960451468271f,-0.96775383709347539973f,0.25189781815421719013f, --0.96852209427441737777f,0.24892760574572009302f,-0.96928123535654842069f, -0.24595505033579465048f,-0.97003125319454397424f,0.24298017990326406523f, --0.97077214072895023911f,0.24000302244874177626f,-0.97150389098625178352f, -0.23702360599436717026f,-0.97222649707893626925f,0.23404195858354351345f, --0.97293995220556006576f,0.23105810828067133156f,-0.97364424965081186603f, -0.22807208317088606409f,-0.97433938278557585821f,0.22508391135979283204f, --0.97502534506699412020f,0.22209362097320364815f,-0.97570213003852845901f, -0.21910124015687004739f,-0.97636973133002114000f,0.21610679707621943679f, --0.97702814265775439484f,0.21311031991609141745f,-0.97767735782450992943f, -0.21011183688046980444f,-0.97831737071962754371f,0.20711137619221883788f, --0.97894817531906219710f,0.20410896609281684033f,-0.97956976568544051887f, -0.20110463484209201157f,-0.98018213596811731847f,0.19809841071795381007f, --0.98078528040323043058f,0.19509032201612860891f,-0.98137919331375456089f, -0.19208039704989246510f,-0.98196386910955524296f,0.18906866414980635915f, --0.98253930228744124076f,0.18605515166344691047f,-0.98310548743121628501f, -0.18303988795514089527f,-0.98366241921173025453f,0.18002290140569957022f, --0.98421009238692902521f,0.17700422041214894375f,-0.98474850180190420801f, -0.17398387338746412745f,-0.98527764238894122162f,0.17096188876030121717f, --0.98579750916756736512f,0.16793829497473128365f,-0.98630809724459855836f, -0.16491312048997014417f,-0.98680940181418552726f,0.16188639378011174252f, --0.98730141815785843473f,0.15885814333386147346f,-0.98778414164457217783f, -0.15582839765426537149f,-0.98825756773074946437f,0.15279718525844368515f, --0.98872169196032377858f,0.14976453467732145364f,-0.98917650996478101444f, -0.14673047445536180344f,-0.98962201746320077600f,0.14369503315029463764f, --0.99005821026229701154f,0.14065823933284954395f,-0.99048508425645709341f, -0.13762012158648603832f,-0.99090263542778000971f,0.13458070850712627875f, --0.99131085984611544415f,0.13154002870288333815f,-0.99170975366909952520f, -0.12849811079379308554f,-0.99209931314219179654f,0.12545498341154626143f, --0.99247953459870996706f,0.12241067519921634832f,-0.99285041445986510489f, -0.11936521481099163222f,-0.99321194923479450001f,0.11631863091190471071f, --0.99356413552059530403f,0.11327095217756441570f,-0.99390697000235606051f, -0.11022220729388323979f,-0.99424044945318790223f,0.10717242495680916192f, --0.99456457073425541537f,0.10412163387205457254f,-0.99487933079480561638f, -0.10106986275482793269f,-0.99518472667219681771f,0.09801714032956082567f, --0.99548075549192693856f,0.09496349532963890838f,-0.99576741446765981713f, -0.09190895649713275162f,-0.99604470090125196702f,0.08885355258252475297f, --0.99631261218277800129f,0.08579731234444015753f,-0.99657114579055483539f, -0.08274026454937563613f,-0.99682029929116566791f,0.07968243797143019502f, --0.99706007033948296225f,0.07662386139203168633f,-0.99729045667869020697f, -0.07356456359966773162f,-0.99751145614030345410f,0.07050457338961385600f, --0.99772306664419163624f,0.06744391956366417584f,-0.99792528619859599548f, -0.06438263092985770097f,-0.99811811290014917919f,0.06132073630220848809f, --0.99830154493389289261f,0.05825826450043579408f,-0.99847558057329477421f, -0.05519524434969009380f,-0.99864021818026516009f,0.05213170468028359428f, --0.99879545620517240501f,0.04906767432741796636f,-0.99894129318685687124f, -0.04600318213091470626f,-0.99907772775264536147f,0.04293825693494102147f, --0.99920475861836388631f,0.03987292758774012985f,-0.99932238458834954375f, -0.03680722294135883171f,-0.99943060455546173237f,0.03374117185137770480f, --0.99952941750109314256f,0.03067480317663686534f,-0.99961882249517863830f, -0.02760814577896565994f,-0.99969881869620424997f,0.02454122852291232629f, --0.99976940535121527898f,0.02147408027546966747f,-0.99983058179582340319f, -0.01840672990580510121f,-0.99988234745421256111f,0.01533920628498806026f, --0.99992470183914450299f,0.01227153828572000692f,-0.99995764455196389786f, -0.00920375478206002066f,-0.99998117528260110909f,0.00613588464915479880f, --0.99999529380957619118f,0.00306795676296597701f,1.00000000000000000000f, -0.00000000000000000000f,0.99992470183914450299f,0.01227153828571992539f, -0.99969881869620424997f,0.02454122852291228812f,0.99932238458834954375f, -0.03680722294135883171f,0.99879545620517240501f,0.04906767432741801493f, -0.99811811290014917919f,0.06132073630220857829f,0.99729045667869020697f, -0.07356456359966742631f,0.99631261218277800129f,0.08579731234443989385f, -0.99518472667219692873f,0.09801714032956060363f,0.99390697000235606051f, -0.11022220729388305938f,0.99247953459870996706f,0.12241067519921619566f, -0.99090263542778000971f,0.13458070850712616773f,0.98917650996478101444f, -0.14673047445536174793f,0.98730141815785843473f,0.15885814333386144570f, -0.98527764238894122162f,0.17096188876030121717f,0.98310548743121628501f, -0.18303988795514095078f,0.98078528040323043058f,0.19509032201612824808f, -0.97831737071962765473f,0.20711137619221856032f,0.97570213003852857003f, -0.21910124015686979759f,0.97293995220556017678f,0.23105810828067110951f, -0.97003125319454397424f,0.24298017990326387094f,0.96697647104485207059f, -0.25486565960451457169f,0.96377606579543984022f,0.26671275747489836538f, -0.96043051941556578655f,0.27851968938505305973f,0.95694033573220882438f, -0.29028467725446233105f,0.95330604035419386211f,0.30200594931922808417f, -0.94952818059303667475f,0.31368174039889151761f,0.94560732538052127971f, -0.32531029216226292622f,0.94154406518302080631f,0.33688985339222005111f, -0.93733901191257495977f,0.34841868024943456472f,0.93299279883473895669f, -0.35989503653498811087f,0.92850608047321558924f,0.37131719395183754306f, -0.92387953251128673848f,0.38268343236508978178f,0.91911385169005777040f, -0.39399204006104809883f,0.91420975570353069095f,0.40524131400498986100f, -0.90916798309052238025f,0.41642956009763715253f,0.90398929312344333820f, -0.42755509343028208491f,0.89867446569395381673f,0.43861623853852765853f, -0.89322430119551532446f,0.44961132965460653965f,0.88763962040285393496f, -0.46053871095824000514f,0.88192126434835504956f,0.47139673682599764204f, -0.87607009419540660122f,0.48218377207912271887f,0.87008699110871146054f, -0.49289819222978403790f,0.86397285612158669643f,0.50353838372571757542f, -0.85772861000027211809f,0.51410274419322166128f,0.85135519310526519554f, -0.52458968267846894928f,0.84485356524970711689f,0.53499761988709715332f, -0.83822470555483807875f,0.54532498842204646383f,0.83146961230254523567f, -0.55557023301960217765f,0.82458930278502529099f,0.56573181078361312046f, -0.81758481315158371139f,0.57580819141784533866f,0.81045719825259476821f, -0.58579785745643886408f,0.80320753148064494287f,0.59569930449243335691f, -0.79583690460888356633f,0.60551104140432554512f,0.78834642762660622761f, -0.61523159058062681925f,0.78073722857209448822f,0.62485948814238634341f, -0.77301045336273699338f,0.63439328416364548779f,0.76516726562245895860f, -0.64383154288979138613f,0.75720884650648456748f,0.65317284295377675551f, -0.74913639452345937020f,0.66241577759017178373f,0.74095112535495921691f, -0.67155895484701833009f,0.73265427167241281570f,0.68060099779545302212f, -0.72424708295146700276f,0.68954054473706682948f,0.71573082528381870571f, -0.69837624940897280457f,0.70710678118654757274f,0.70710678118654757274f, -0.69837624940897291559f,0.71573082528381859468f,0.68954054473706694051f, -0.72424708295146689174f,0.68060099779545302212f,0.73265427167241281570f, -0.67155895484701833009f,0.74095112535495910588f,0.66241577759017178373f, -0.74913639452345925918f,0.65317284295377686654f,0.75720884650648456748f, -0.64383154288979149715f,0.76516726562245895860f,0.63439328416364548779f, -0.77301045336273688235f,0.62485948814238645443f,0.78073722857209448822f, -0.61523159058062681925f,0.78834642762660622761f,0.60551104140432554512f, -0.79583690460888345530f,0.59569930449243346793f,0.80320753148064483184f, -0.58579785745643886408f,0.81045719825259476821f,0.57580819141784533866f, -0.81758481315158371139f,0.56573181078361323149f,0.82458930278502529099f, -0.55557023301960228867f,0.83146961230254523567f,0.54532498842204646383f, -0.83822470555483796772f,0.53499761988709726435f,0.84485356524970700587f, -0.52458968267846883826f,0.85135519310526519554f,0.51410274419322166128f, -0.85772861000027211809f,0.50353838372571757542f,0.86397285612158669643f, -0.49289819222978409341f,0.87008699110871134952f,0.48218377207912282989f, -0.87607009419540660122f,0.47139673682599780857f,0.88192126434835493853f, -0.46053871095824000514f,0.88763962040285393496f,0.44961132965460659516f, -0.89322430119551532446f,0.43861623853852771404f,0.89867446569395381673f, -0.42755509343028219593f,0.90398929312344333820f,0.41642956009763731906f, -0.90916798309052226923f,0.40524131400498986100f,0.91420975570353069095f, -0.39399204006104809883f,0.91911385169005777040f,0.38268343236508983729f, -0.92387953251128673848f,0.37131719395183759858f,0.92850608047321558924f, -0.35989503653498827740f,0.93299279883473884567f,0.34841868024943450921f, -0.93733901191257495977f,0.33688985339222005111f,0.94154406518302080631f, -0.32531029216226298173f,0.94560732538052127971f,0.31368174039889157312f, -0.94952818059303667475f,0.30200594931922819519f,0.95330604035419375109f, -0.29028467725446233105f,0.95694033573220893540f,0.27851968938505305973f, -0.96043051941556578655f,0.26671275747489842090f,0.96377606579543984022f, -0.25486565960451462720f,0.96697647104485207059f,0.24298017990326398197f, -0.97003125319454397424f,0.23105810828067127605f,0.97293995220556006576f, -0.21910124015686976984f,0.97570213003852857003f,0.20711137619221856032f, -0.97831737071962765473f,0.19509032201612833135f,0.98078528040323043058f, -0.18303988795514106180f,0.98310548743121628501f,0.17096188876030135595f, -0.98527764238894122162f,0.15885814333386139019f,0.98730141815785843473f, -0.14673047445536174793f,0.98917650996478101444f,0.13458070850712622324f, -0.99090263542778000971f,0.12241067519921627893f,0.99247953459870996706f, -0.11022220729388318428f,0.99390697000235606051f,0.09801714032956077016f, -0.99518472667219681771f,0.08579731234443987997f,0.99631261218277800129f, -0.07356456359966745406f,0.99729045667869020697f,0.06132073630220864768f, -0.99811811290014917919f,0.04906767432741812596f,0.99879545620517240501f, -0.03680722294135899131f,0.99932238458834954375f,0.02454122852291226384f, -0.99969881869620424997f,0.01227153828571994447f,0.99992470183914450299f, -0.00000000000000006123f,1.00000000000000000000f,-0.01227153828571982304f, -0.99992470183914450299f,-0.02454122852291214241f,0.99969881869620424997f, --0.03680722294135886641f,0.99932238458834954375f,-0.04906767432741800800f, -0.99879545620517240501f,-0.06132073630220852972f,0.99811811290014917919f, --0.07356456359966732916f,0.99729045667869020697f,-0.08579731234443975507f, -0.99631261218277800129f,-0.09801714032956064526f,0.99518472667219692873f, --0.11022220729388305938f,0.99390697000235606051f,-0.12241067519921615403f, -0.99247953459870996706f,-0.13458070850712611222f,0.99090263542778000971f, --0.14673047445536163691f,0.98917650996478101444f,-0.15885814333386127917f, -0.98730141815785843473f,-0.17096188876030124493f,0.98527764238894122162f, --0.18303988795514092303f,0.98310548743121628501f,-0.19509032201612819257f, -0.98078528040323043058f,-0.20711137619221844930f,0.97831737071962765473f, --0.21910124015686965881f,0.97570213003852857003f,-0.23105810828067113727f, -0.97293995220556017678f,-0.24298017990326387094f,0.97003125319454397424f, --0.25486565960451451618f,0.96697647104485207059f,-0.26671275747489830987f, -0.96377606579543984022f,-0.27851968938505294870f,0.96043051941556589757f, --0.29028467725446216452f,0.95694033573220893540f,-0.30200594931922808417f, -0.95330604035419386211f,-0.31368174039889140658f,0.94952818059303667475f, --0.32531029216226287071f,0.94560732538052139073f,-0.33688985339221994009f, -0.94154406518302080631f,-0.34841868024943439819f,0.93733901191257495977f, --0.35989503653498816638f,0.93299279883473884567f,-0.37131719395183748755f, -0.92850608047321558924f,-0.38268343236508972627f,0.92387953251128673848f, --0.39399204006104798781f,0.91911385169005777040f,-0.40524131400498974998f, -0.91420975570353069095f,-0.41642956009763698599f,0.90916798309052249127f, --0.42755509343028186287f,0.90398929312344344922f,-0.43861623853852738097f, -0.89867446569395392775f,-0.44961132965460670619f,0.89322430119551521344f, --0.46053871095824006066f,0.88763962040285393496f,-0.47139673682599769755f, -0.88192126434835504956f,-0.48218377207912271887f,0.87607009419540660122f, --0.49289819222978398239f,0.87008699110871146054f,-0.50353838372571746440f, -0.86397285612158680745f,-0.51410274419322155026f,0.85772861000027211809f, --0.52458968267846872724f,0.85135519310526519554f,-0.53499761988709704230f, -0.84485356524970722791f,-0.54532498842204624179f,0.83822470555483818977f, --0.55557023301960195560f,0.83146961230254534669f,-0.56573181078361323149f, -0.82458930278502517996f,-0.57580819141784533866f,0.81758481315158371139f, --0.58579785745643886408f,0.81045719825259476821f,-0.59569930449243335691f, -0.80320753148064494287f,-0.60551104140432543410f,0.79583690460888356633f, --0.61523159058062670823f,0.78834642762660633863f,-0.62485948814238623239f, -0.78073722857209459924f,-0.63439328416364537677f,0.77301045336273710440f, --0.64383154288979127511f,0.76516726562245906962f,-0.65317284295377653347f, -0.75720884650648467851f,-0.66241577759017189475f,0.74913639452345925918f, --0.67155895484701844111f,0.74095112535495899486f,-0.68060099779545302212f, -0.73265427167241281570f,-0.68954054473706694051f,0.72424708295146689174f, --0.69837624940897280457f,0.71573082528381870571f,-0.70710678118654746172f, -0.70710678118654757274f,-0.71573082528381859468f,0.69837624940897291559f, --0.72424708295146678072f,0.68954054473706705153f,-0.73265427167241270467f, -0.68060099779545324417f,-0.74095112535495888384f,0.67155895484701855214f, --0.74913639452345914815f,0.66241577759017200577f,-0.75720884650648467851f, -0.65317284295377664449f,-0.76516726562245895860f,0.64383154288979138613f, --0.77301045336273699338f,0.63439328416364548779f,-0.78073722857209448822f, -0.62485948814238634341f,-0.78834642762660622761f,0.61523159058062693028f, --0.79583690460888345530f,0.60551104140432565615f,-0.80320753148064483184f, -0.59569930449243346793f,-0.81045719825259465718f,0.58579785745643897510f, --0.81758481315158360037f,0.57580819141784544968f,-0.82458930278502506894f, -0.56573181078361345353f,-0.83146961230254534669f,0.55557023301960217765f, --0.83822470555483807875f,0.54532498842204635281f,-0.84485356524970711689f, -0.53499761988709715332f,-0.85135519310526519554f,0.52458968267846894928f, --0.85772861000027200706f,0.51410274419322177231f,-0.86397285612158669643f, -0.50353838372571757542f,-0.87008699110871134952f,0.49289819222978414892f, --0.87607009419540649020f,0.48218377207912288540f,-0.88192126434835493853f, -0.47139673682599780857f,-0.88763962040285382393f,0.46053871095824022719f, --0.89322430119551521344f,0.44961132965460687272f,-0.89867446569395392775f, -0.43861623853852754751f,-0.90398929312344333820f,0.42755509343028202940f, --0.90916798309052238025f,0.41642956009763715253f,-0.91420975570353069095f, -0.40524131400498991651f,-0.91911385169005777040f,0.39399204006104815434f, --0.92387953251128673848f,0.38268343236508989280f,-0.92850608047321547822f, -0.37131719395183770960f,-0.93299279883473884567f,0.35989503653498833291f, --0.93733901191257484875f,0.34841868024943478677f,-0.94154406518302069529f, -0.33688985339222032867f,-0.94560732538052116869f,0.32531029216226325929f, --0.94952818059303667475f,0.31368174039889140658f,-0.95330604035419386211f, -0.30200594931922802866f,-0.95694033573220882438f,0.29028467725446238656f, --0.96043051941556578655f,0.27851968938505317075f,-0.96377606579543984022f, -0.26671275747489847641f,-0.96697647104485207059f,0.25486565960451468271f, --0.97003125319454397424f,0.24298017990326406523f,-0.97293995220556006576f, -0.23105810828067133156f,-0.97570213003852845901f,0.21910124015687004739f, --0.97831737071962754371f,0.20711137619221883788f,-0.98078528040323043058f, -0.19509032201612860891f,-0.98310548743121628501f,0.18303988795514089527f, --0.98527764238894122162f,0.17096188876030121717f,-0.98730141815785843473f, -0.15885814333386147346f,-0.98917650996478101444f,0.14673047445536180344f, --0.99090263542778000971f,0.13458070850712627875f,-0.99247953459870996706f, -0.12241067519921634832f,-0.99390697000235606051f,0.11022220729388323979f, --0.99518472667219681771f,0.09801714032956082567f,-0.99631261218277800129f, -0.08579731234444015753f,-0.99729045667869020697f,0.07356456359966773162f, --0.99811811290014917919f,0.06132073630220848809f,-0.99879545620517240501f, -0.04906767432741796636f,-0.99932238458834954375f,0.03680722294135883171f, --0.99969881869620424997f,0.02454122852291232629f,-0.99992470183914450299f, -0.01227153828572000692f,1.00000000000000000000f,0.00000000000000000000f, -0.99879545620517240501f,0.04906767432741801493f,0.99518472667219692873f, -0.09801714032956060363f,0.98917650996478101444f,0.14673047445536174793f, -0.98078528040323043058f,0.19509032201612824808f,0.97003125319454397424f, -0.24298017990326387094f,0.95694033573220882438f,0.29028467725446233105f, -0.94154406518302080631f,0.33688985339222005111f,0.92387953251128673848f, -0.38268343236508978178f,0.90398929312344333820f,0.42755509343028208491f, -0.88192126434835504956f,0.47139673682599764204f,0.85772861000027211809f, -0.51410274419322166128f,0.83146961230254523567f,0.55557023301960217765f, -0.80320753148064494287f,0.59569930449243335691f,0.77301045336273699338f, -0.63439328416364548779f,0.74095112535495921691f,0.67155895484701833009f, -0.70710678118654757274f,0.70710678118654757274f,0.67155895484701833009f, -0.74095112535495910588f,0.63439328416364548779f,0.77301045336273688235f, -0.59569930449243346793f,0.80320753148064483184f,0.55557023301960228867f, -0.83146961230254523567f,0.51410274419322166128f,0.85772861000027211809f, -0.47139673682599780857f,0.88192126434835493853f,0.42755509343028219593f, -0.90398929312344333820f,0.38268343236508983729f,0.92387953251128673848f, -0.33688985339222005111f,0.94154406518302080631f,0.29028467725446233105f, -0.95694033573220893540f,0.24298017990326398197f,0.97003125319454397424f, -0.19509032201612833135f,0.98078528040323043058f,0.14673047445536174793f, -0.98917650996478101444f,0.09801714032956077016f,0.99518472667219681771f, -0.04906767432741812596f,0.99879545620517240501f,0.00000000000000006123f, -1.00000000000000000000f,-0.04906767432741800800f,0.99879545620517240501f, --0.09801714032956064526f,0.99518472667219692873f,-0.14673047445536163691f, -0.98917650996478101444f,-0.19509032201612819257f,0.98078528040323043058f, --0.24298017990326387094f,0.97003125319454397424f,-0.29028467725446216452f, -0.95694033573220893540f,-0.33688985339221994009f,0.94154406518302080631f, --0.38268343236508972627f,0.92387953251128673848f,-0.42755509343028186287f, -0.90398929312344344922f,-0.47139673682599769755f,0.88192126434835504956f, --0.51410274419322155026f,0.85772861000027211809f,-0.55557023301960195560f, -0.83146961230254534669f,-0.59569930449243335691f,0.80320753148064494287f, --0.63439328416364537677f,0.77301045336273710440f,-0.67155895484701844111f, -0.74095112535495899486f,-0.70710678118654746172f,0.70710678118654757274f, --0.74095112535495888384f,0.67155895484701855214f,-0.77301045336273699338f, -0.63439328416364548779f,-0.80320753148064483184f,0.59569930449243346793f, --0.83146961230254534669f,0.55557023301960217765f,-0.85772861000027200706f, -0.51410274419322177231f,-0.88192126434835493853f,0.47139673682599780857f, --0.90398929312344333820f,0.42755509343028202940f,-0.92387953251128673848f, -0.38268343236508989280f,-0.94154406518302069529f,0.33688985339222032867f, --0.95694033573220882438f,0.29028467725446238656f,-0.97003125319454397424f, -0.24298017990326406523f,-0.98078528040323043058f,0.19509032201612860891f, --0.98917650996478101444f,0.14673047445536180344f,-0.99518472667219681771f, -0.09801714032956082567f,-0.99879545620517240501f,0.04906767432741796636f, -1.00000000000000000000f,0.00000000000000000000f,0.98078528040323043058f, -0.19509032201612824808f,0.92387953251128673848f,0.38268343236508978178f, -0.83146961230254523567f,0.55557023301960217765f,0.70710678118654757274f, -0.70710678118654757274f,0.55557023301960228867f,0.83146961230254523567f, -0.38268343236508983729f,0.92387953251128673848f,0.19509032201612833135f, -0.98078528040323043058f,0.00000000000000006123f,1.00000000000000000000f, --0.19509032201612819257f,0.98078528040323043058f,-0.38268343236508972627f, -0.92387953251128673848f,-0.55557023301960195560f,0.83146961230254534669f, --0.70710678118654746172f,0.70710678118654757274f,-0.83146961230254534669f, -0.55557023301960217765f,-0.92387953251128673848f,0.38268343236508989280f, --0.98078528040323043058f,0.19509032201612860891f,1.00000000000000000000f, -0.00000000000000000000f,0.70710678118654757274f,0.70710678118654757274f, -0.00000000000000006123f,1.00000000000000000000f,-0.70710678118654746172f, -0.70710678118654757274f,}; - -float32_t rearranged_twiddle_stride3_4096_f32[2728]={ -1.00000000000000000000f,0.00000000000000000000f,0.99998941108192840321f, -0.00460192612044857050f,0.99995764455196389786f,0.00920375478205981944f, -0.99990470108285289808f,0.01380538852806039059f,0.99983058179582340319f, -0.01840672990580482019f,0.99973528826056168306f,0.02300768146883936868f, -0.99961882249517863830f,0.02760814577896573974f,0.99948118696616694567f, -0.03220802540830458582f,0.99932238458834954375f,0.03680722294135883171f, -0.99914241872481690532f,0.04140564097707673946f,0.99894129318685687124f, -0.04600318213091462299f,0.99871901223387293811f,0.05059974903689928166f, -0.99847558057329477421f,0.05519524434968993420f,0.99821100336047818846f, -0.05978957074663986820f,0.99792528619859599548f,0.06438263092985746505f, -0.99761843513851955478f,0.06897432762826674613f,0.99729045667869020697f, -0.07356456359966742631f,0.99694135776498216117f,0.07815324163279423197f, -0.99657114579055483539f,0.08274026454937569164f,0.99617982859569698117f, -0.08732553520619205922f,0.99576741446765981713f,0.09190895649713272386f, -0.99533391214048227980f,0.09649043135525259274f,0.99487933079480561638f, -0.10106986275482782167f,0.99440368005767909576f,0.10564715371341061589f, -0.99390697000235606051f,0.11022220729388305938f,0.99338921114808065305f, -0.11479492660651008373f,0.99285041445986510489f,0.11936521481099135467f, -0.99229059134825736699f,0.12393297511851215920f,0.99170975366909952520f, -0.12849811079379316880f,0.99110791372327688986f,0.13306052515713906459f, -0.99048508425645709341f,0.13762012158648603832f,0.98984127845882052821f, -0.14217680351944803063f,0.98917650996478101444f,0.14673047445536174793f, -0.98849079285269658701f,0.15128103795733022219f,0.98778414164457217783f, -0.15582839765426523271f,0.98705657130575097380f,0.16037245724292828464f, -0.98630809724459866938f,0.16491312048996989437f,0.98553873531217606185f, -0.16945029123396795900f,0.98474850180190420801f,0.17398387338746382214f, -0.98393741344921892278f,0.17851377093899750692f,0.98310548743121628501f, -0.18303988795514095078f,0.98225274136628937249f,0.18756212858252960252f, -0.98137919331375456089f,0.19208039704989243734f,0.98048486177346938497f, -0.19659459767008022335f,0.97956976568544051887f,0.20110463484209190055f, -0.97863392442942320759f,0.20561041305309923910f,0.97767735782450992943f, -0.21011183688046961016f,0.97670008612871184184f,0.21460881099378675829f, -0.97570213003852857003f,0.21910124015686979759f,0.97468351068851066810f, -0.22358902922978998729f,0.97364424965081197705f,0.22807208317088573102f, -0.97258436893473221296f,0.23255030703877524467f,0.97150389098625178352f, -0.23702360599436719801f,0.97040283868755550234f,0.24149188530286933019f, -0.96928123535654853171f,0.24595505033579459497f,0.96813910474636244441f, -0.25041300657296522436f,0.96697647104485207059f,0.25486565960451457169f, -0.96579335887408368500f,0.25931291513288623474f,0.96458979328981275803f, -0.26375467897483134694f,0.96336579978095404631f,0.26819085706340317632f, -0.96212140426904158019f,0.27262135544994897662f,0.96085663310767965850f, -0.27704608030609989555f,0.95957151308198451733f,0.28146493792575794091f, -0.95826607140801767226f,0.28587783472708061527f,0.95694033573220882438f, -0.29028467725446233105f,0.95559433413077110586f,0.29468537218051432669f, -0.95422809510910566733f,0.29907982630804047508f,0.95284164760119871573f, -0.30346794657201131562f,0.95143502096900833820f,0.30784964004153486661f, -0.95000824500184299914f,0.31222481392182488413f,0.94856134991573026749f, -0.31659337555616584581f,0.94709436635277721717f,0.32095523242787521445f, -0.94560732538052127971f,0.32531029216226292622f,0.94410025849127265918f, -0.32965846252858749255f,0.94257319760144686605f,0.33399965144200938205f, -0.94102617505088925753f,0.33833376696554112728f,0.93945922360218991898f, -0.34266071731199437833f,0.93787237643998988545f,0.34698041084592368133f, -0.93626566717027825959f,0.35129275608556709276f,0.93463912981968078064f, -0.35559766170478385172f,0.93299279883473895669f,0.35989503653498811087f, -0.93132670908118042608f,0.36418478956707989180f,0.92964089584318121418f, -0.36846682995337232125f,0.92793539482261788720f,0.37274106700951575855f, -0.92621024213831137928f,0.37700741021641825945f,0.92446547432526260391f, -0.38126576922216237620f,0.92270112833387862850f,0.38551605384391884890f, -0.92091724152918941204f,0.38975817406985641123f,0.91911385169005777040f, -0.39399204006104809883f,0.91729099700837790632f,0.39821756215337356100f, -0.91544871608826783316f,0.40243465085941843018f,0.91358704794525080750f, -0.40664321687036902864f,0.91170603200542987832f,0.41084317105790391089f, -0.90980570810465222209f,0.41503442447608163146f,0.90788611648766626150f, -0.41921688836322390515f,0.90594729780726845902f,0.42339047414379604728f, -0.90398929312344333820f,0.42755509343028208491f,0.90201214390249317976f, -0.43171065802505725895f,0.90001589201616016833f,0.43585707992225547480f, -0.89800057974073987932f,0.43999427130963325583f,0.89596624975618521791f, -0.44412214457042920035f,0.89391294514520325265f,0.44824061228521988598f, -0.89184070939234272313f,0.45234958723377088896f,0.88974958638307277692f, -0.45644898239688391772f,0.88763962040285393496f,0.46053871095824000514f, -0.88551085613619995307f,0.46461868630623781584f,0.88336333866573157891f, -0.46868882203582790114f,0.88119711347122209322f,0.47274903195034279069f, -0.87901222642863352519f,0.47679923006332208812f,0.87680872380914565145f, -0.48083933060033395845f,0.87458665227817611321f,0.48486924800079106435f, -0.87234605889439154058f,0.48888889691976317176f,0.87008699110871146054f, -0.49289819222978403790f,0.86780949676330332299f,0.49689704902265446895f, -0.86551362409056908920f,0.50088538261124071482f,0.86319942171212415971f, -0.50486310853126759035f,0.86086693863776730939f,0.50883014254310698909f, -0.85851622426444273994f,0.51278640063356295542f,0.85614732837519447184f, -0.51673179901764987321f,0.85376030113811141042f,0.52066625414036715735f, -0.85135519310526519554f,0.52458968267846894928f,0.84893205521163961347f, -0.52850200154222848337f,0.84649093877405212627f,0.53240312787719790144f, -0.84403189549006640835f,0.53629297906596318235f,0.84155497743689844370f, -0.54017147272989285423f,0.83906023707031274217f,0.54403852673088382019f, -0.83654772722351200542f,0.54789405917310018967f,0.83401750110601813315f, -0.55173798840470733573f,0.83146961230254523567f,0.55557023301960217765f, -0.82890411477186487499f,0.55939071185913613604f,0.82632106284566353427f, -0.56319934401383409117f,0.82372051122739142759f,0.56699604882510867832f, -0.82110251499110464835f,0.57078074588696725566f,0.81846712958029865792f, -0.57455335504771576360f,0.81581441080673378075f,0.57831379641165558958f, -0.81314441484925359394f,0.58206199034077543697f,0.81045719825259476821f, -0.58579785745643886408f,0.80775281792619035848f,0.58952131864106394055f, -0.80503133114296365758f,0.59323229503979979516f,0.80229279553811572168f, -0.59693070806219639124f,0.79953726910790501314f,0.60061647938386897305f, -0.79676481020841882774f,0.60428953094815596181f,0.79397547755433717231f, -0.60794978496777363208f,0.79116933021769020318f,0.61159716392646190641f, -0.78834642762660622761f,0.61523159058062681925f,0.78550682956405393220f, -0.61885298796097631957f,0.78265059616657572938f,0.62246127937414996723f, -0.77977778792301455368f,0.62605638840434352232f,0.77688846567323244230f, -0.62963823891492698426f,0.77398269060682289844f,0.63320675505005719064f, -0.77106052426181381776f,0.63676186123628419899f,0.76812202852336541881f, -0.64030348218415167327f,0.76516726562245895860f,0.64383154288979138613f, -0.76219629813457900891f,0.64734596863651205911f,0.75920918897838796102f, -0.65084668499638087535f,0.75620600141439453523f,0.65433361783180044036f, -0.75318679904361252042f,0.65780669329707863735f,0.75015164580621507273f, -0.66126583783999226540f,0.74710060598018013245f,0.66471097820334479334f, -0.74403374417992929057f,0.66814204142651845153f,0.74095112535495921691f, -0.67155895484701833009f,0.73785281478846598269f,0.67496164610201192513f, -0.73473887809596349907f,0.67835004312986146857f,0.73160938122389262972f, -0.68172407417164970767f,0.72846439044822519637f,0.68508366777270035541f, -0.72530397237306076796f,0.68842875278409043638f,0.72212819392921534511f, -0.69175925836415774750f,0.71893712237280449351f,0.69507511398000088043f, -0.71573082528381870571f,0.69837624940897280457f,0.71250937056469243469f, -0.70166259474016845488f,0.70927282643886568891f,0.70493408037590488124f, -0.70602126144933974317f,0.70819063703319540259f,0.70275474445722529993f, -0.71143219574521643356f,0.69947334464028376733f,0.71465868786276909308f, -0.69617713149146298601f,0.71787004505573170920f,0.69286617481742474034f, -0.72106619931450810501f,0.68954054473706694051f,0.72424708295146689174f, -0.68620031168003858824f,0.72741262860237576593f,0.68284554638524808112f, -0.73056276922782759087f,0.67947631989936496666f,0.73369743811466026084f, -0.67609270357531603413f,0.73681656887736979300f,0.67269476907077296879f, -0.73992009545951609173f,0.66928258834663600929f,0.74300795213512171866f, -0.66585623366550972246f,0.74608007351006366825f,0.66241577759017178373f, -0.74913639452345925918f,0.65896129298203731661f,0.75217685044904269986f, -0.65549285299961546070f,0.75520137689653654700f,0.65201053109695950027f, -0.75820990981301528144f,0.64851440102211255212f,0.76120238548426177871f, -0.64500453681554403840f,0.76417874053611667406f,0.64148101280858316198f, -0.76713891193582040007f,0.63794390362184416610f,0.77008283699334789674f, -0.63439328416364548779f,0.77301045336273688235f,0.63082922962842458148f, -0.77592169904340757558f,0.62725181549514419377f,0.77881651238147586724f, -0.62366111752569464155f,0.78169483207105938671f,0.62005721176328920663f, -0.78455659715557524159f,0.61644017453085364622f,0.78740174702903131809f, -0.61281008242940970820f,0.79023022143731003197f,0.60916701233645320634f, -0.79304196047944364167f,0.60551104140432554512f,0.79583690460888345530f, -0.60184224705858002658f,0.79861499463476082195f,0.59816070699634238395f, -0.80137617172314012937f,0.59446649918466454299f,0.80412037739826569549f, -0.59075970185887427544f,0.80684755354379922299f,0.58704039352091808013f, -0.80955764240405125864f,0.58330865293769829094f,0.81225058658520388200f, -0.57956455913940574387f,0.81492632905652662156f,0.57580819141784533866f, -0.81758481315158371139f,0.57203962932475704850f,0.82022598256943468620f, -0.56825895267013148970f,0.82284978137582631685f,0.56446624152051949608f, -0.82545615400437744036f,0.56066157619733603124f,0.82804504525775579626f, -0.55684503727516010407f,0.83061640030884620334f,0.55301670558002757883f, -0.83317016470191318511f,0.54917666218771976627f,0.83570628435375260423f, -0.54532498842204646383f,0.83822470555483796772f,0.54146176585312355556f, -0.84072537497045796151f,0.53758707629564550512f,0.84320823964184543620f, -0.53370100180715296379f,0.84567324698729906540f,0.52980362468629482731f, -0.84812034480329712149f,0.52589502747108474168f,0.85054948126560336874f, -0.52197529293715438925f,0.85296060493036363059f,0.51804450409599933636f, -0.85535366473519602870f,0.51410274419322166128f,0.85772861000027211809f, -0.51015009670676669806f,0.86008539042939025077f,0.50618664534515533937f, -0.86242395611104050168f,0.50221247404571089934f,0.86474425751946237817f, -0.49822766697278186854f,0.86704624551569264845f,0.49423230851595972846f, -0.86932987134860673084f,0.49022648328829110387f,0.87159508665595109012f, -0.48621027612448652899f,0.87384184346536675214f,0.48218377207912282989f, -0.87607009419540660122f,0.47814705642484311987f,0.87827979165654146421f, -0.47410021465055002254f,0.88047088905216075450f,0.47004333245959561971f, -0.88264333997956279099f,0.46597649576796612569f,0.88479709843093778954f, -0.46189979070246284243f,0.88693211879434208367f,0.45781330359887728587f, -0.88904835585466457371f,0.45371712100016392544f,0.89114576479458318392f, -0.44961132965460659516f,0.89322430119551532446f,0.44549601651398174074f, -0.89528392103855758410f,0.44137126873171661501f,0.89732458070541831763f, -0.43723717366104419835f,0.89934623697934146236f,0.43309381885315201277f, -0.90134884704602202810f,0.42894129205532954829f,0.90333236849451181705f, -0.42477968120910880589f,0.90529675931811881551f,0.42060907444840250902f, -0.90724197791529592738f,0.41642956009763731906f,0.90916798309052226923f, -0.41224122666988299857f,0.91107473405517624965f,0.40804416286497874333f, -0.91296219042839810154f,0.40383845756765412993f,0.91483031223794608611f, -0.39962419984564678810f,0.91667905992104270485f,0.39540147894781629834f, -0.91850839432521225181f,0.39117038430225398171f,0.92031827670911048322f, -0.38693100551438869283f,0.92210866874334507237f,0.38268343236508983729f, -0.92387953251128673848f,0.37842775480876561511f,0.92563083050987271516f, -0.37416406297145798909f,0.92736252565040111495f,0.36989244714893426691f, -0.92907458125931574600f,0.36561299780477396482f,0.93076696107898371224f, -0.36132580556845433906f,0.93243962926846235550f,0.35703096123343003310f, -0.93409255040425887007f,0.35272855575521072646f,0.93572568948108036935f, -0.34841868024943450921f,0.93733901191257495977f,0.34410142598993898044f, -0.93893248353206448797f,0.33977688440682696225f,0.94050607059326829518f, -0.33544514708453165852f,0.94205973977101731265f,0.33110630575987642921f, -0.94359345816196038559f,0.32676045232013178898f,0.94510719328526060501f, -0.32240767880107001897f,0.94660091308328353499f,0.31804807738501505998f, -0.94807458592227622507f,0.31368174039889157312f,0.94952818059303667475f, -0.30930876031226878231f,0.95096166631157508231f,0.30492922973540242948f, -0.95237501271976587880f,0.30054324141727339903f,0.95376818988599032512f, -0.29615088824362395536f,0.95514116830577067141f,0.29175226323498937298f, -0.95649391890239499059f,0.28734745954472956653f,0.95782641302753290802f, -0.28293657045705539188f,0.95913862246184189431f,0.27851968938505305973f, -0.96043051941556578655f,0.27409690986870632878f,0.96170207652912254037f, -0.26966832557291520178f,0.96295326687368387741f,0.26523403028551190141f, -0.96418406395174571788f,0.26079411791527556952f,0.96539444169768939830f, -0.25634868248994291395f,0.96658437447833311928f,0.25189781815421691258f, -0.96775383709347551076f,0.24744161916777343557f,0.96890280477642887202f, -0.24298017990326398197f,0.97003125319454397424f,0.23851359484431849944f, -0.97113915844972509284f,0.23404195858354345794f,0.97222649707893626925f, -0.22956536582051886852f,0.97329324605469824672f,0.22508391135979277653f, -0.97433938278557585821f,0.22059769010887364526f,0.97536488511665686563f, -0.21610679707621960333f,0.97636973133002114000f,0.21161132736922760866f, -0.97735390014519996082f,0.20711137619221856032f,0.97831737071962765473f, -0.20260703884442110567f,0.97926012264908202098f,0.19809841071795372680f, -0.98018213596811731847f,0.19358558729580374602f,0.98108339115048659451f, -0.18906866414980627589f,0.98196386910955524296f,0.18454773693861964423f, -0.98282355119870523641f,0.18002290140569951471f,0.98366241921173025453f, -0.17549425337727139751f,0.98448045538322093151f,0.17096188876030135595f, -0.98527764238894122162f,0.16642590354046421508f,0.98605396334619543897f, -0.16188639378011188130f,0.98680940181418541624f,0.15734345561623827581f, -0.98754394179435922574f,0.15279718525844340760f,0.98825756773074946437f, -0.14824767898689619749f,0.98895026451030298986f,0.14369503315029458212f, -0.98962201746320077600f,0.13913934416382628401f,0.99027281236316910817f, -0.13458070850712622324f,0.99090263542778000971f,0.13001922272223334631f, -0.99151147331874389668f,0.12545498341154620592f,0.99209931314219179654f, -0.12088808723577722237f,0.99266614244894801899f,0.11631863091190487725f, -0.99321194923479450001f,0.11174671121112665639f,0.99373672194072459884f, -0.10717242495680887049f,0.99424044945318790223f,0.10259586902243628126f, -0.99472312110432570265f,0.09801714032956077016f,0.99518472667219681771f, -0.09343633584574791151f,0.99562525638099430569f,0.08885355258252468358f, -0.99604470090125196702f,0.08426888759332412659f,0.99644305135004263008f, -0.07968243797143012563f,0.99682029929116566791f,0.07509430084792129145f, -0.99717643673532618820f,0.07050457338961400866f,0.99751145614030345410f, -0.06591335279700392957f,0.99782535041111164453f,0.06132073630220864768f, -0.99811811290014917919f,0.05672682116690778292f,0.99838973740734016094f, -0.05213170468028331672f,0.99864021818026527111f,0.04753548415695926094f, -0.99886954991428356099f,0.04293825693494095902f,0.99907772775264536147f, -0.03834012037355279123f,0.99926474728659442359f,0.03374117185137764235f, -0.99943060455546173237f,0.02914150876419373953f,0.99957529604674921764f, -0.02454122852291226384f,0.99969881869620424997f,0.01994042855151459750f, -0.99980116988788425569f,0.01533920628498821985f,0.99988234745421256111f, -0.01073765916726457208f,0.99994234967602391162f,0.00613588464915451517f, -0.99998117528260110909f,0.00153398018628476615f,0.99999882345170187925f, --0.00306795676296601561f,0.99999529380957619118f,-0.00766982873953095477f, -0.99997058643097413988f,-0.01227153828571982304f,0.99992470183914450299f, --0.01687298794728165144f,0.99985764100582386060f,-0.02147408027546948359f, -0.99976940535121527898f,-0.02607471782910391472f,0.99965999674395922270f, --0.03067480317663645942f,0.99952941750109314256f,-0.03527423889821382219f, -0.99937767038800284780f,-0.03987292758773972740f,0.99920475861836388631f, --0.04447077185493861912f,0.99901068585407337697f,-0.04906767432741800800f, -0.99879545620517240501f,-0.05366353765273055437f,0.99855907422975931365f, --0.05825826450043560673f,0.99830154493389289261f,-0.06285175756416130910f, -0.99802287377148624081f,-0.06744391956366398155f,0.99772306664419163624f, --0.07203465324688929083f,0.99740212990127530279f,-0.07662386139203150592f, -0.99706007033948296225f,-0.08121144680959226092f,0.99669689520289606044f, --0.08579731234443975507f,0.99631261218277800129f,-0.09038136087786488582f, -0.99590722941741172125f,-0.09496349532963895002f,0.99548075549192693856f, --0.09954361866006931903f,0.99503319943811863180f,-0.10412163387205460030f, -0.99456457073425541537f,-0.10869744401313856386f,0.99407487930487947736f, --0.11327095217756423529f,0.99356413552059530403f,-0.11784206150832489401f, -0.99303235019785141002f,-0.12241067519921615403f,0.99247953459870996706f, --0.12697669649688586579f,0.99190570043060932726f,-0.13154002870288314386f, -0.99131085984611544415f,-0.13610057517570606223f,0.99069502544266463406f, --0.14065823933284912761f,0.99005821026229712256f,-0.14521292465284740825f, -0.98940042779138037687f,-0.14976453467732150915f,0.98872169196032377858f, --0.15431297301302013270f,0.98802201714328352633f,-0.15885814333386127917f, -0.98730141815785843473f,-0.16339994938297311422f,0.98655991026477551920f, --0.16793829497473108936f,0.98579750916756747614f,-0.17247308399679592283f, -0.98501423101223983814f,-0.17700422041214874946f,0.98421009238692902521f, --0.18153160826112502146f,0.98338511032155118130f,-0.18605515166344649414f, -0.98253930228744124076f,-0.19057475482025265645f,0.98167268619698311305f, --0.19509032201612819257f,0.98078528040323043058f,-0.19960175762113094300f, -0.97987710369951763756f,-0.20410896609281689584f,0.97894817531906219710f, --0.20861185197826331850f,0.97799851493455713936f,-0.21311031991609125091f, -0.97702814265775439484f,-0.21760427463848355800f,0.97603707903903913490f, --0.22209362097320348162f,0.97502534506699412020f,-0.22657826384560997290f, -0.97399296216795583359f,-0.23105810828067113727f,0.97293995220556017678f, --0.23553305940497534787f,0.97186633748027939639f,-0.24000302244874138768f, -0.97077214072895035013f,-0.24446790274782409513f,0.96965738512429244800f, --0.24892760574572012078f,0.96852209427441737777f,-0.25338203699557015902f, -0.96736629222232850545f,-0.25783110216215882060f,0.96619000344541261516f, --0.26227470702391347812f,0.96499325285492043580f,-0.26671275747489830987f, -0.96377606579543984022f,-0.27114515952680795507f,0.96253846804435916340f, --0.27557181931095814376f,0.96128048581132063966f,-0.27999264308027327353f, -0.96000214573766584625f,-0.28440753721127171039f,0.95870347489587159906f, --0.28881640820604936870f,0.95738450078897596729f,-0.29321916269425857271f, -0.95604525134999651659f,-0.29761570743508619641f,0.95468575494133833814f, --0.30200594931922808417f,0.95330604035419386211f,-0.30638979537086097338f, -0.95190613680793234597f,-0.31076715274961136393f,0.95048607394948181337f, --0.31513792875252233383f,0.94904588185270055689f,-0.31950203081601563637f, -0.94758559101774120226f,-0.32385936651785285356f,0.94610523237040344835f, --0.32820984357909255280f,0.94460483726148025685f,-0.33255336986604405736f, -0.94308443746609349478f,-0.33688985339221994009f,0.94154406518302080631f, --0.34121920232028229991f,0.93998375303401404679f,-0.34554132496398903829f, -0.93840353406310816897f,-0.34985612979013491763f,0.93680344173592156043f, --0.35416352542049039931f,0.93518350993894761025f,-0.35846342063373642928f, -0.93354377297883628373f,-0.36275572436739711435f,0.93188426558166814750f, --0.36704034571976712487f,0.93020502289221906889f,-0.37131719395183748755f, -0.92850608047321558924f,-0.37558617848921721505f,0.92678747430458174872f, --0.37984720892405099413f,0.92504924078267769527f,-0.38410019501693493105f, -0.92329141671952774661f,-0.38834504669882619066f,0.92151403934204201285f, --0.39258167407295141427f,0.91971714629122736095f,-0.39680998741671030805f, -0.91790077562139049672f,-0.40102989718357567872f,0.91606496579933172075f, --0.40524131400498974998f,0.91420975570353069095f,-0.40944414869225753684f, -0.91233518462332285903f,-0.41363831223843450235f,0.91044129225806724737f, --0.41782371582021227141f,0.90852811871630612117f,-0.42200027079979968159f, -0.90659570451491533483f,-0.42616788872679967071f,0.90464409057824612947f, --0.43032648134008272267f,0.90267331823725871498f,-0.43447596056965581690f, -0.90068342922864685907f,-0.43861623853852738097f,0.89867446569395392775f, --0.44274722756456980077f,0.89664647017868026602f,-0.44686884016237399253f, -0.89459948563138280697f,-0.45098098904510369733f,0.89253355540276468894f, --0.45508358712634372489f,0.89044872324475798919f,-0.45917654752194403400f, -0.88834503330959635470f,-0.46325978355186014923f,0.88622253014888063838f, --0.46733320874198841510f,0.88408125871263498752f,-0.47139673682599769755f, -0.88192126434835504956f,-0.47545028174715592284f,0.87974259280004740713f, --0.47949375766015311928f,0.87754529020726124156f,-0.48352707893291846375f, -0.87532940310411100349f,-0.48755016014843571837f,0.87309497841829020182f, --0.49156291610654972990f,0.87084206347007897531f,-0.49556526182577237405f, -0.86857070597134100609f,-0.49955711254508178287f,0.86628095402451310569f, --0.50353838372571746440f,0.86397285612158680745f,-0.50750899105297075931f, -0.86164646114308141023f,-0.51146885043797041259f,0.85930181835700847337f, --0.51541787801946303826f,0.85693897741782865118f,-0.51935599016558964269f, -0.85455798836540053376f,-0.52328310347565654137f,0.85215890162391971785f, --0.52719913478190105760f,0.84974176800085265970f,-0.53110400115125477871f, -0.84730663868585853749f,-0.53499761988709704230f,0.84485356524970722791f, --0.53887990853100831146f,0.84238259964318595863f,-0.54275078486451577842f, -0.83989379419599952126f,-0.54661016691083474939f,0.83738720161566193578f, --0.55045797293660470029f,0.83486287498638012128f,-0.55429412145362011444f, -0.83232086776792968408f,-0.55811853122055610221f,0.82976123379452304540f, --0.56193112124468946877f,0.82718402727366902027f,-0.56573181078361323149f, -0.82458930278502517996f,-0.56952051934694725155f,0.82197711527924144370f, --0.57329716669804198226f,0.81934752007679712005f,-0.57706167285567933067f, -0.81670057286682795628f,-0.58081395809576441547f,0.81403632970594852480f, --0.58455394295301521534f,0.81135484701706384048f,-0.58828154822264522306f, -0.80865618158817509364f,-0.59199669496204088137f,0.80594039057117639047f, --0.59569930449243335691f,0.80320753148064494287f,-0.59938929840056454079f, -0.80045766219262282082f,-0.60306659854034827539f,0.79769084094339104407f, --0.60673112703452458661f,0.79490712632823690154f,-0.61038280627630958630f, -0.79210657730021227785f,-0.61402155893103815831f,0.78928925316888587371f, --0.61764730793780375784f,0.78645521359908587833f,-0.62125997651108744169f, -0.78360451860963831194f,-0.62485948814238623239f,0.78073722857209459924f, --0.62844576660183260053f,0.77785340420945314754f,-0.63201873593980895105f, -0.77495310659487393057f,-0.63557832048855611440f,0.77203639715038452351f, --0.63912444486377573138f,0.76910333764557958780f,-0.64265703396622686494f, -0.76615399019631280630f,-0.64617601298331639459f,0.76318841726338115805f, --0.64968130739068330470f,0.76020668165120230952f,-0.65317284295377653347f, -0.75720884650648467851f,-0.65665054572942882505f,0.75419497531688928227f, --0.66011434206742036768f,0.75116513190968658975f,-0.66356415861203965623f, -0.74811938045040371481f,-0.66699992230363736034f,0.74505778544146605835f, --0.67042156038017308717f,0.74198041172083106787f,-0.67382900037875603783f, -0.73888732446061522463f,-0.67722217013718044587f,0.73577858916571359238f, --0.68060099779545302212f,0.73265427167241281570f,-0.68396541179731551452f, -0.72951443814699701296f,-0.68731534089175916336f,0.72635915508434589771f, --0.69065071413453438254f,0.72318848930652757101f,-0.69397146088965377952f, -0.72000250796138176579f,-0.69727751083088640449f,0.71680127852109964959f, --0.70056879394324822474f,0.71358486878079363525f,-0.70384524052448482756f, -0.71035334685706241764f,-0.70710678118654746172f,0.70710678118654757274f, --0.71035334685706230662f,0.70384524052448504960f,-0.71358486878079352422f, -0.70056879394324833576f,-0.71680127852109953857f,0.69727751083088651551f, --0.72000250796138165477f,0.69397146088965389055f,-0.72318848930652745999f, -0.69065071413453460458f,-0.72635915508434578669f,0.68731534089175927438f, --0.72951443814699679091f,0.68396541179731562554f,-0.73265427167241270467f, -0.68060099779545324417f,-0.73577858916571337033f,0.67722217013718055689f, --0.73888732446061511361f,0.67382900037875614885f,-0.74198041172083095685f, -0.67042156038017319819f,-0.74505778544146594733f,0.66699992230363758239f, --0.74811938045040360379f,0.66356415861203976725f,-0.75116513190968636771f, -0.66011434206742047870f,-0.75419497531688917125f,0.65665054572942904709f, --0.75720884650648467851f,0.65317284295377664449f,-0.76020668165120219850f, -0.64968130739068341573f,-0.76318841726338115805f,0.64617601298331661663f, --0.76615399019631280630f,0.64265703396622708699f,-0.76910333764557947678f, -0.63912444486377584241f,-0.77203639715038441249f,0.63557832048855622542f, --0.77495310659487381955f,0.63201873593980906207f,-0.77785340420945303652f, -0.62844576660183271155f,-0.78073722857209448822f,0.62485948814238634341f, --0.78360451860963820092f,0.62125997651108755271f,-0.78645521359908576731f, -0.61764730793780386886f,-0.78928925316888576269f,0.61402155893103838036f, --0.79210657730021216683f,0.61038280627630969732f,-0.79490712632823679051f, -0.60673112703452469763f,-0.79769084094339093305f,0.60306659854034838641f, --0.80045766219262259877f,0.59938929840056465181f,-0.80320753148064483184f, -0.59569930449243346793f,-0.80594039057117627944f,0.59199669496204099239f, --0.80865618158817498262f,0.58828154822264533408f,-0.81135484701706372945f, -0.58455394295301532637f,-0.81403632970594841378f,0.58081395809576452649f, --0.81670057286682784525f,0.57706167285567944170f,-0.81934752007679700903f, -0.57329716669804209328f,-0.82197711527924133268f,0.56952051934694747359f, --0.82458930278502506894f,0.56573181078361345353f,-0.82718402727366902027f, -0.56193112124468957980f,-0.82976123379452293438f,0.55811853122055632426f, --0.83232086776792957306f,0.55429412145362022546f,-0.83486287498638001026f, -0.55045797293660492233f,-0.83738720161566182476f,0.54661016691083497143f, --0.83989379419599952126f,0.54275078486451588944f,-0.84238259964318584760f, -0.53887990853100842248f,-0.84485356524970711689f,0.53499761988709715332f, --0.84730663868585842646f,0.53110400115125488973f,-0.84974176800085254868f, -0.52719913478190127964f,-0.85215890162391960683f,0.52328310347565665239f, --0.85455798836540042274f,0.51935599016558975372f,-0.85693897741782865118f, -0.51541787801946314929f,-0.85930181835700836235f,0.51146885043797052361f, --0.86164646114308129921f,0.50750899105297098135f,-0.86397285612158669643f, -0.50353838372571757542f,-0.86628095402451299467f,0.49955711254508189390f, --0.86857070597134089507f,0.49556526182577254058f,-0.87084206347007886428f, -0.49156291610654989643f,-0.87309497841829009079f,0.48755016014843588490f, --0.87532940310411089246f,0.48352707893291863028f,-0.87754529020726113053f, -0.47949375766015328582f,-0.87974259280004729611f,0.47545028174715608937f, --0.88192126434835493853f,0.47139673682599780857f,-0.88408125871263487650f, -0.46733320874198858164f,-0.88622253014888052736f,0.46325978355186031576f, --0.88834503330959624368f,0.45917654752194420054f,-0.89044872324475787817f, -0.45508358712634389143f,-0.89253355540276457791f,0.45098098904510386387f, --0.89459948563138269595f,0.44686884016237415906f,-0.89664647017868026602f, -0.44274722756456996731f,-0.89867446569395392775f,0.43861623853852754751f, --0.90068342922864674804f,0.43447596056965598343f,-0.90267331823725871498f, -0.43032648134008288920f,-0.90464409057824612947f,0.42616788872679983724f, --0.90659570451491533483f,0.42200027079979984812f,-0.90852811871630612117f, -0.41782371582021243794f,-0.91044129225806713634f,0.41363831223843466889f, --0.91233518462332274801f,0.40944414869225770337f,-0.91420975570353069095f, -0.40524131400498991651f,-0.91606496579933172075f,0.40102989718357562321f, --0.91790077562139049672f,0.39680998741671025254f,-0.91971714629122736095f, -0.39258167407295141427f,-0.92151403934204179080f,0.38834504669882657923f, --0.92329141671952752457f,0.38410019501693531963f,-0.92504924078267747323f, -0.37984720892405138271f,-0.92678747430458174872f,0.37558617848921738158f, --0.92850608047321547822f,0.37131719395183770960f,-0.93020502289221906889f, -0.36704034571976729140f,-0.93188426558166803648f,0.36275572436739728088f, --0.93354377297883617270f,0.35846342063373659581f,-0.93518350993894761025f, -0.35416352542049039931f,-0.93680344173592167145f,0.34985612979013486212f, --0.93840353406310816897f,0.34554132496398898278f,-0.93998375303401382475f, -0.34121920232028268849f,-0.94154406518302069529f,0.33688985339222032867f, --0.94308443746609338376f,0.33255336986604444593f,-0.94460483726148014583f, -0.32820984357909271933f,-0.94610523237040333733f,0.32385936651785302010f, --0.94758559101774109124f,0.31950203081601580291f,-0.94904588185270055689f, -0.31513792875252250036f,-0.95048607394948170235f,0.31076715274961153046f, --0.95190613680793234597f,0.30638979537086091787f,-0.95330604035419386211f, -0.30200594931922802866f,-0.95468575494133833814f,0.29761570743508614090f, --0.95604525134999629454f,0.29321916269425896129f,-0.95738450078897585627f, -0.28881640820604975728f,-0.95870347489587148804f,0.28440753721127209896f, --0.96000214573766584625f,0.27999264308027344006f,-0.96128048581132063966f, -0.27557181931095831029f,-0.96253846804435916340f,0.27114515952680812161f, --0.96377606579543984022f,0.26671275747489847641f,-0.96499325285492032478f, -0.26227470702391370017f,-0.96619000344541250413f,0.25783110216215898713f, --0.96736629222232850545f,0.25338203699557010351f,-0.96852209427441737777f, -0.24892760574572009302f,-0.96965738512429233698f,0.24446790274782448371f, --0.97077214072895023911f,0.24000302244874177626f,-0.97186633748027928537f, -0.23553305940497573645f,-0.97293995220556006576f,0.23105810828067133156f, --0.97399296216795583359f,0.22657826384561016719f,-0.97502534506699412020f, -0.22209362097320364815f,-0.97603707903903902388f,0.21760427463848372454f, --0.97702814265775439484f,0.21311031991609141745f,-0.97799851493455713936f, -0.20861185197826351279f,-0.97894817531906219710f,0.20410896609281684033f, --0.97987710369951763756f,0.19960175762113091524f,-0.98078528040323043058f, -0.19509032201612860891f,-0.98167268619698311305f,0.19057475482025307278f, --0.98253930228744124076f,0.18605515166344691047f,-0.98338511032155118130f, -0.18153160826112521575f,-0.98421009238692902521f,0.17700422041214894375f, --0.98501423101223983814f,0.17247308399679611712f,-0.98579750916756736512f, -0.16793829497473128365f,-0.98655991026477540817f,0.16339994938297328075f, --0.98730141815785843473f,0.15885814333386147346f,-0.98802201714328352633f, -0.15431297301302007718f,-0.98872169196032377858f,0.14976453467732145364f, --0.98940042779138037687f,0.14521292465284735274f,-0.99005821026229701154f, -0.14065823933284954395f,-0.99069502544266463406f,0.13610057517570647856f, --0.99131085984611544415f,0.13154002870288333815f,-0.99190570043060932726f, -0.12697669649688606008f,-0.99247953459870996706f,0.12241067519921634832f, --0.99303235019785141002f,0.11784206150832508830f,-0.99356413552059530403f, -0.11327095217756441570f,-0.99407487930487936634f,0.10869744401313874427f, --0.99456457073425541537f,0.10412163387205457254f,-0.99503319943811863180f, -0.09954361866006927739f,-0.99548075549192693856f,0.09496349532963890838f, --0.99590722941741172125f,0.09038136087786528827f,-0.99631261218277800129f, -0.08579731234444015753f,-0.99669689520289606044f,0.08121144680959266338f, --0.99706007033948296225f,0.07662386139203168633f,-0.99740212990127530279f, -0.07203465324688947125f,-0.99772306664419163624f,0.06744391956366417584f, --0.99802287377148624081f,0.06285175756416148951f,-0.99830154493389289261f, -0.05825826450043579408f,-0.99855907422975931365f,0.05366353765273051968f, --0.99879545620517240501f,0.04906767432741796636f,-0.99901068585407337697f, -0.04447077185493858442f,-0.99920475861836388631f,0.03987292758774012985f, --0.99937767038800284780f,0.03527423889821423159f,-0.99952941750109314256f, -0.03067480317663686534f,-0.99965999674395922270f,0.02607471782910409860f, --0.99976940535121527898f,0.02147408027546966747f,-0.99985764100582386060f, -0.01687298794728183532f,-0.99992470183914450299f,0.01227153828572000692f, --0.99997058643097413988f,0.00766982873953113778f,-0.99999529380957619118f, -0.00306795676296597701f,-0.99999882345170187925f,-0.00153398018628480431f, --0.99998117528260110909f,-0.00613588464915455420f,-0.99994234967602391162f, --0.01073765916726416615f,-0.99988234745421256111f,-0.01533920628498781566f, --0.99980116988788425569f,-0.01994042855151419158f,-0.99969881869620424997f, --0.02454122852291207996f,-0.99957529604674921764f,-0.02914150876419355565f, --0.99943060455546173237f,-0.03374117185137745500f,-0.99926474728659442359f, --0.03834012037355261082f,-0.99907772775264536147f,-0.04293825693494077861f, --0.99886954991428356099f,-0.04753548415695929563f,-0.99864021818026527111f, --0.05213170468028335142f,-0.99838973740734016094f,-0.05672682116690781762f, --0.99811811290014917919f,-0.06132073630220824523f,-0.99782535041111164453f, --0.06591335279700352712f,-0.99751145614030345410f,-0.07050457338961360620f, --0.99717643673532618820f,-0.07509430084792109716f,-0.99682029929116577893f, --0.07968243797142994522f,-0.99644305135004263008f,-0.08426888759332393231f, --0.99604470090125196702f,-0.08885355258252450317f,-0.99562525638099430569f, --0.09343633584574773110f,-0.99518472667219692873f,-0.09801714032956058975f, --0.99472312110432570265f,-0.10259586902243630901f,-0.99424044945318790223f, --0.10717242495680891212f,-0.99373672194072470987f,-0.11174671121112625394f, --0.99321194923479461103f,-0.11631863091190447479f,-0.99266614244894801899f, --0.12088808723577681992f,-0.99209931314219179654f,-0.12545498341154601163f, --0.99151147331874400770f,-0.13001922272223317978f,-0.99090263542778000971f, --0.13458070850712605671f,-0.99027281236316910817f,-0.13913934416382611747f, --0.98962201746320088702f,-0.14369503315029438784f,-0.98895026451030298986f, --0.14824767898689603096f,-0.98825756773074946437f,-0.15279718525844343535f, --0.98754394179435922574f,-0.15734345561623830356f,-0.98680940181418552726f, --0.16188639378011149272f,-0.98605396334619543897f,-0.16642590354046382650f, --0.98527764238894133264f,-0.17096188876030096737f,-0.98448045538322093151f, --0.17549425337727120322f,-0.98366241921173025453f,-0.18002290140569934818f, --0.98282355119870534743f,-0.18454773693861947770f,-0.98196386910955524296f, --0.18906866414980610935f,-0.98108339115048670553f,-0.19358558729580355173f, --0.98018213596811742949f,-0.19809841071795356027f,-0.97926012264908202098f, --0.20260703884442113343f,-0.97831737071962765473f,-0.20711137619221858808f, --0.97735390014519996082f,-0.21161132736922766417f,-0.97636973133002125103f, --0.21610679707621921475f,-0.97536488511665697665f,-0.22059769010887325669f, --0.97433938278557585821f,-0.22508391135979261000f,-0.97329324605469824672f, --0.22956536582051870199f,-0.97222649707893638027f,-0.23404195858354326365f, --0.97113915844972520386f,-0.23851359484431830515f,-0.97003125319454397424f, --0.24298017990326381543f,-0.96890280477642887202f,-0.24744161916777326904f, --0.96775383709347551076f,-0.25189781815421696809f,-0.96658437447833311928f, --0.25634868248994291395f,-0.96539444169768939830f,-0.26079411791527562503f, --0.96418406395174582890f,-0.26523403028551151284f,-0.96295326687368398844f, --0.26966832557291481320f,-0.96170207652912265139f,-0.27409690986870616225f, --0.96043051941556589757f,-0.27851968938505289319f,-0.95913862246184200533f, --0.28293657045705516984f,-0.95782641302753290802f,-0.28734745954472939999f, --0.95649391890239510161f,-0.29175226323498920644f,-0.95514116830577078243f, --0.29615088824362378883f,-0.95376818988599032512f,-0.30054324141727345454f, --0.95237501271976587880f,-0.30492922973540242948f,-0.95096166631157508231f, --0.30930876031226878231f,-0.94952818059303678577f,-0.31368174039889118454f, --0.94807458592227633609f,-0.31804807738501467140f,-0.94660091308328364601f, --0.32240767880106963039f,-0.94510719328526060501f,-0.32676045232013156694f, --0.94359345816196038559f,-0.33110630575987626267f,-0.94205973977101742367f, --0.33544514708453149199f,-0.94050607059326840620f,-0.33977688440682679571f, --0.93893248353206459900f,-0.34410142598993881391f,-0.93733901191257495977f, --0.34841868024943456472f,-0.93572568948108036935f,-0.35272855575521072646f, --0.93409255040425887007f,-0.35703096123343008861f,-0.93243962926846246653f, --0.36132580556845395048f,-0.93076696107898382326f,-0.36561299780477357624f, --0.92907458125931585702f,-0.36989244714893387833f,-0.92736252565040111495f, --0.37416406297145782256f,-0.92563083050987282618f,-0.37842775480876539307f, --0.92387953251128684951f,-0.38268343236508967076f,-0.92210866874334518339f, --0.38693100551438852630f,-0.92031827670911059425f,-0.39117038430225381518f, --0.91850839432521225181f,-0.39540147894781629834f,-0.91667905992104270485f, --0.39962419984564684361f,-0.91483031223794608611f,-0.40383845756765418544f, --0.91296219042839832358f,-0.40804416286497835475f,-0.91107473405517647169f, --0.41224122666988260999f,-0.90916798309052249127f,-0.41642956009763693048f, --0.90724197791529592738f,-0.42060907444840234248f,-0.90529675931811881551f, --0.42477968120910863936f,-0.90333236849451192807f,-0.42894129205532938176f, --0.90134884704602202810f,-0.43309381885315184624f,-0.89934623697934157338f, --0.43723717366104403181f,-0.89732458070541831763f,-0.44137126873171667052f, --0.89528392103855747308f,-0.44549601651398174074f,-0.89322430119551532446f, --0.44961132965460665067f,-0.89114576479458340597f,-0.45371712100016353686f, --0.88904835585466468473f,-0.45781330359887695280f,-0.88693211879434230571f, --0.46189979070246250936f,-0.88479709843093790056f,-0.46597649576796595916f, --0.88264333997956290201f,-0.47004333245959545318f,-0.88047088905216086552f, --0.47410021465054985601f,-0.87827979165654157523f,-0.47814705642484295334f, --0.87607009419540660122f,-0.48218377207912266336f,-0.87384184346536686316f, --0.48621027612448636246f,-0.87159508665595109012f,-0.49022648328829115938f, --0.86932987134860673084f,-0.49423230851595978397f,-0.86704624551569287050f, --0.49822766697278153547f,-0.86474425751946248919f,-0.50221247404571056627f, --0.86242395611104072373f,-0.50618664534515500630f,-0.86008539042939025077f, --0.51015009670676658704f,-0.85772861000027211809f,-0.51410274419322155026f, --0.85535366473519613972f,-0.51804450409599922533f,-0.85296060493036374162f, --0.52197529293715427823f,-0.85054948126560347976f,-0.52589502747108463065f, --0.84812034480329723252f,-0.52980362468629460526f,-0.84567324698729906540f, --0.53370100180715296379f,-0.84320823964184543620f,-0.53758707629564550512f, --0.84072537497045818355f,-0.54146176585312322249f,-0.83822470555483818977f, --0.54532498842204613076f,-0.83570628435375271525f,-0.54917666218771943321f, --0.83317016470191329613f,-0.55301670558002735678f,-0.83061640030884642538f, --0.55684503727515988203f,-0.82804504525775590729f,-0.56066157619733592021f, --0.82545615400437755138f,-0.56446624152051938506f,-0.82284978137582642788f, --0.56825895267013148970f,-0.82022598256943468620f,-0.57203962932475704850f, --0.81758481315158371139f,-0.57580819141784533866f,-0.81492632905652662156f, --0.57956455913940574387f,-0.81225058658520388200f,-0.58330865293769829094f, --0.80955764240405148069f,-0.58704039352091774706f,-0.80684755354379944503f, --0.59075970185887394237f,-0.80412037739826591753f,-0.59446649918466420992f, --0.80137617172314035141f,-0.59816070699634216190f,-0.79861499463476093297f, --0.60184224705857991555f,-0.79583690460888356633f,-0.60551104140432543410f, --0.79304196047944375270f,-0.60916701233645309532f,-0.79023022143731003197f, --0.61281008242940970820f,-0.78740174702903142911f,-0.61644017453085364622f, --0.78455659715557524159f,-0.62005721176328920663f,-0.78169483207105938671f, --0.62366111752569464155f,-0.77881651238147620031f,-0.62725181549514386070f, --0.77592169904340779762f,-0.63082922962842424841f,-0.77301045336273710440f, --0.63439328416364526575f,-0.77008283699334811878f,-0.63794390362184394405f, --0.76713891193582051109f,-0.64148101280858305095f,-0.76417874053611678509f, --0.64500453681554381635f,-0.76120238548426188974f,-0.64851440102211233008f, --0.75820990981301539247f,-0.65201053109695950027f,-0.75520137689653654700f, --0.65549285299961534967f,-0.75217685044904269986f,-0.65896129298203731661f, --0.74913639452345925918f,-0.66241577759017178373f,-0.74608007351006400132f, --0.66585623366550938940f,-0.74300795213512194071f,-0.66928258834663578725f, --0.73992009545951631377f,-0.67269476907077274674f,-0.73681656887737001504f, --0.67609270357531581208f,-0.73369743811466037187f,-0.67947631989936485564f, --0.73056276922782770189f,-0.68284554638524797010f,-0.72741262860237587695f, --0.68620031168003847721f,-0.72424708295146700276f,-0.68954054473706682948f, --0.72106619931450810501f,-0.69286617481742462932f,-0.71787004505573170920f, --0.69617713149146298601f,-0.71465868786276898206f,-0.69947334464028387835f, --0.71143219574521665560f,-0.70275474445722507788f,-0.70819063703319551362f, --0.70602126144933952112f,-0.70493408037590510329f,-0.70927282643886546687f, --0.70166259474016867692f,-0.71250937056469221265f,-0.69837624940897302661f, --0.71573082528381848366f,-0.69507511398000099145f,-0.71893712237280438249f, --0.69175925836415785852f,-0.72212819392921523409f,-0.68842875278409054740f, --0.72530397237306065694f,-0.68508366777270035541f,-0.72846439044822519637f, --0.68172407417164981869f,-0.73160938122389251870f,-0.67835004312986146857f, --0.73473887809596349907f,-0.67496164610201225820f,-0.73785281478846576064f, --0.67155895484701866316f,-0.74095112535495888384f,-0.66814204142651867357f, --0.74403374417992906853f,-0.66471097820334501538f,-0.74710060598017991040f, --0.66126583783999237642f,-0.75015164580621496171f,-0.65780669329707874837f, --0.75318679904361240940f,-0.65433361783180066240f,-0.75620600141439442421f, --0.65084668499638098638f,-0.75920918897838796102f,-0.64734596863651250320f, --0.76219629813457856482f,-0.64383154288979149715f,-0.76516726562245895860f, --0.64030348218415200634f,-0.76812202852336519676f,-0.63676186123628419899f, --0.77106052426181381776f,-0.63320675505005752370f,-0.77398269060682256537f, --0.62963823891492687324f,-0.77688846567323255332f,-0.62605638840434374437f, --0.77977778792301433164f,-0.62246127937414974518f,-0.78265059616657584041f, --0.61885298796097643059f,-0.78550682956405382118f,-0.61523159058062726334f, --0.78834642762660589455f,-0.61159716392646201744f,-0.79116933021769009216f, --0.60794978496777407617f,-0.79397547755433683925f,-0.60428953094815607283f, --0.79676481020841871672f,-0.60061647938386930612f,-0.79953726910790479110f, --0.59693070806219639124f,-0.80229279553811572168f,-0.59323229503980012822f, --0.80503133114296343553f,-0.58952131864106382952f,-0.80775281792619046950f, --0.58579785745643908612f,-0.81045719825259465718f,-0.58206199034077532595f, --0.81314441484925370496f,-0.57831379641165570060f,-0.81581441080673366972f, --0.57455335504771631872f,-0.81846712958029832485f,-0.57078074588696736669f, --0.82110251499110464835f,-0.56699604882510901138f,-0.82372051122739109452f, --0.56319934401383409117f,-0.82632106284566342325f,-0.55939071185913646911f, --0.82890411477186465294f,-0.55557023301960217765f,-0.83146961230254523567f, --0.55173798840470766880f,-0.83401750110601791111f,-0.54789405917310007865f, --0.83654772722351211645f,-0.54403852673088415326f,-0.83906023707031252012f, --0.54017147272989274320f,-0.84155497743689855472f,-0.53629297906596329337f, --0.84403189549006629733f,-0.53240312787719845655f,-0.84649093877405179320f, --0.52850200154222859439f,-0.84893205521163961347f,-0.52458968267846928235f, --0.85135519310526486247f,-0.52066625414036715735f,-0.85376030113811141042f, --0.51673179901765020627f,-0.85614732837519424979f,-0.51278640063356295542f, --0.85851622426444285097f,-0.50883014254310732216f,-0.86086693863776708735f, --0.50486310853126736831f,-0.86319942171212427073f,-0.50088538261124104789f, --0.86551362409056897818f,-0.49689704902265435793f,-0.86780949676330332299f, --0.49289819222978420443f,-0.87008699110871134952f,-0.48888889691976367136f, --0.87234605889439120752f,-0.48486924800079117537f,-0.87458665227817611321f, --0.48083933060033440254f,-0.87680872380914542941f,-0.47679923006332214364f, --0.87901222642863341417f,-0.47274903195034317926f,-0.88119711347122187117f, --0.46868882203582790114f,-0.88336333866573157891f,-0.46461868630623814891f, --0.88551085613619973103f,-0.46053871095823989412f,-0.88763962040285404598f, --0.45644898239688419528f,-0.88974958638307266590f,-0.45234958723377066692f, --0.89184070939234283415f,-0.44824061228522010802f,-0.89391294514520314163f, --0.44412214457042975546f,-0.89596624975618488484f,-0.43999427130963336685f, --0.89800057974073976830f,-0.43585707992225597440f,-0.90001589201615994629f, --0.43171065802505731446f,-0.90201214390249317976f,-0.42755509343028247349f, --0.90398929312344311615f,-0.42339047414379599177f,-0.90594729780726845902f, --0.41921688836322429372f,-0.90788611648766603945f,-0.41503442447608152044f, --0.90980570810465233311f,-0.41084317105790418845f,-0.91170603200542976730f, --0.40664321687036886210f,-0.91358704794525091852f,-0.40243465085941865222f, --0.91544871608826772214f,-0.39821756215337417162f,-0.91729099700837768427f, --0.39399204006104820985f,-0.91911385169005765938f,-0.38975817406985696634f, --0.92091724152918930102f,-0.38551605384391890441f,-0.92270112833387851747f, --0.38126576922216276477f,-0.92446547432526249288f,-0.37700741021641820394f, --0.92621024213831137928f,-0.37274106700951614712f,-0.92793539482261766516f, --0.36846682995337221023f,-0.92964089584318132520f,-0.36418478956708016936f, --0.93132670908118031505f,-0.35989503653498794433f,-0.93299279883473895669f, --0.35559766170478407377f,-0.93463912981968066962f,-0.35129275608556687072f, --0.93626566717027837061f,-0.34698041084592379235f,-0.93787237643998977443f, --0.34266071731199487793f,-0.93945922360218969693f,-0.33833376696554123830f, --0.94102617505088925753f,-0.33399965144200982614f,-0.94257319760144675502f, --0.32965846252858749255f,-0.94410025849127265918f,-0.32531029216226331480f, --0.94560732538052116869f,-0.32095523242787515894f,-0.94709436635277721717f, --0.31659337555616617887f,-0.94856134991573015647f,-0.31222481392182477311f, --0.95000824500184311017f,-0.30784964004153508865f,-0.95143502096900833820f, --0.30346794657201103806f,-0.95284164760119871573f,-0.29907982630804058610f, --0.95422809510910555630f,-0.29468537218051488180f,-0.95559433413077088382f, --0.29028467725446244208f,-0.95694033573220882438f,-0.28587783472708105936f, --0.95826607140801756124f,-0.28146493792575794091f,-0.95957151308198451733f, --0.27704608030610028413f,-0.96085663310767954748f,-0.27262135544994886560f, --0.96212140426904158019f,-0.26819085706340350939f,-0.96336579978095393528f, --0.26375467897483123592f,-0.96458979328981275803f,-0.25931291513288645678f, --0.96579335887408357397f,-0.25486565960451434965f,-0.96697647104485218161f, --0.25041300657296539089f,-0.96813910474636233339f,-0.24595505033579515008f, --0.96928123535654830967f,-0.24149188530286941345f,-0.97040283868755550234f, --0.23702360599436766986f,-0.97150389098625167250f,-0.23255030703877521692f, --0.97258436893473221296f,-0.22807208317088611960f,-0.97364424965081186603f, --0.22358902922978990402f,-0.97468351068851066810f,-0.21910124015687010290f, --0.97570213003852845901f,-0.21460881099378659176f,-0.97670008612871184184f, --0.21011183688046985996f,-0.97767735782450992943f,-0.20561041305309901706f, --0.97863392442942320759f,-0.20110463484209206708f,-0.97956976568544051887f, --0.19659459767008077846f,-0.98048486177346927395f,-0.19208039704989252061f, --0.98137919331375456089f,-0.18756212858253007436f,-0.98225274136628937249f, --0.18303988795514095078f,-0.98310548743121628501f,-0.17851377093899792325f, --0.98393741344921881176f,-0.17398387338746373887f,-0.98474850180190420801f, --0.16945029123396829207f,-0.98553873531217606185f,-0.16491312048996975559f, --0.98630809724459866938f,-0.16037245724292850668f,-0.98705657130575097380f, --0.15582839765426498291f,-0.98778414164457217783f,-0.15128103795733036097f, --0.98849079285269658701f,-0.14673047445536230304f,-0.98917650996478090342f, --0.14217680351944814165f,-0.98984127845882052821f,-0.13762012158648653792f, --0.99048508425645698239f,-0.13306052515713906459f,-0.99110791372327688986f, --0.12849811079379358514f,-0.99170975366909952520f,-0.12393297511851208981f, --0.99229059134825736699f,-0.11936521481099168773f,-0.99285041445986510489f, --0.11479492660650993108f,-0.99338921114808065305f,-0.11022220729388330918f, --0.99390697000235606051f,-0.10564715371341037997f,-0.99440368005767909576f, --0.10106986275482798820f,-0.99487933079480561638f,-0.09649043135525316173f, --0.99533391214048216877f,-0.09190895649713282101f,-0.99576741446765981713f, --0.08732553520619255882f,-0.99617982859569687015f,-0.08274026454937570552f, --0.99657114579055483539f,-0.07815324163279464831f,-0.99694135776498205015f, --0.07356456359966735692f,-0.99729045667869020697f,-0.06897432762826707919f, --0.99761843513851955478f,-0.06438263092985731240f,-0.99792528619859599548f, --0.05978957074664013188f,-0.99821100336047818846f,-0.05519524434968971216f, --0.99847558057329477421f,-0.05059974903689945513f,-0.99871901223387293811f, --0.04600318213091520586f,-0.99894129318685687124f,-0.04140564097707683661f, --0.99914241872481690532f,-0.03680722294135933131f,-0.99932238458834943273f, --0.03220802540830459970f,-0.99948118696616694567f,-0.02760814577896616301f, --0.99961882249517863830f,-0.02300768146883930970f,-0.99973528826056168306f, --0.01840672990580516366f,-0.99983058179582340319f,-0.01380538852806025008f, --0.99990470108285289808f,-0.00920375478206008311f,-0.99995764455196389786f, --0.00460192612044835019f,-0.99998941108192840321f,1.00000000000000000000f, -0.00000000000000000000f,0.99983058179582340319f,0.01840672990580482019f, -0.99932238458834954375f,0.03680722294135883171f,0.99847558057329477421f, -0.05519524434968993420f,0.99729045667869020697f,0.07356456359966742631f, -0.99576741446765981713f,0.09190895649713272386f,0.99390697000235606051f, -0.11022220729388305938f,0.99170975366909952520f,0.12849811079379316880f, -0.98917650996478101444f,0.14673047445536174793f,0.98630809724459866938f, -0.16491312048996989437f,0.98310548743121628501f,0.18303988795514095078f, -0.97956976568544051887f,0.20110463484209190055f,0.97570213003852857003f, -0.21910124015686979759f,0.97150389098625178352f,0.23702360599436719801f, -0.96697647104485207059f,0.25486565960451457169f,0.96212140426904158019f, -0.27262135544994897662f,0.95694033573220882438f,0.29028467725446233105f, -0.95143502096900833820f,0.30784964004153486661f,0.94560732538052127971f, -0.32531029216226292622f,0.93945922360218991898f,0.34266071731199437833f, -0.93299279883473895669f,0.35989503653498811087f,0.92621024213831137928f, -0.37700741021641825945f,0.91911385169005777040f,0.39399204006104809883f, -0.91170603200542987832f,0.41084317105790391089f,0.90398929312344333820f, -0.42755509343028208491f,0.89596624975618521791f,0.44412214457042920035f, -0.88763962040285393496f,0.46053871095824000514f,0.87901222642863352519f, -0.47679923006332208812f,0.87008699110871146054f,0.49289819222978403790f, -0.86086693863776730939f,0.50883014254310698909f,0.85135519310526519554f, -0.52458968267846894928f,0.84155497743689844370f,0.54017147272989285423f, -0.83146961230254523567f,0.55557023301960217765f,0.82110251499110464835f, -0.57078074588696725566f,0.81045719825259476821f,0.58579785745643886408f, -0.79953726910790501314f,0.60061647938386897305f,0.78834642762660622761f, -0.61523159058062681925f,0.77688846567323244230f,0.62963823891492698426f, -0.76516726562245895860f,0.64383154288979138613f,0.75318679904361252042f, -0.65780669329707863735f,0.74095112535495921691f,0.67155895484701833009f, -0.72846439044822519637f,0.68508366777270035541f,0.71573082528381870571f, -0.69837624940897280457f,0.70275474445722529993f,0.71143219574521643356f, -0.68954054473706694051f,0.72424708295146689174f,0.67609270357531603413f, -0.73681656887736979300f,0.66241577759017178373f,0.74913639452345925918f, -0.64851440102211255212f,0.76120238548426177871f,0.63439328416364548779f, -0.77301045336273688235f,0.62005721176328920663f,0.78455659715557524159f, -0.60551104140432554512f,0.79583690460888345530f,0.59075970185887427544f, -0.80684755354379922299f,0.57580819141784533866f,0.81758481315158371139f, -0.56066157619733603124f,0.82804504525775579626f,0.54532498842204646383f, -0.83822470555483796772f,0.52980362468629482731f,0.84812034480329712149f, -0.51410274419322166128f,0.85772861000027211809f,0.49822766697278186854f, -0.86704624551569264845f,0.48218377207912282989f,0.87607009419540660122f, -0.46597649576796612569f,0.88479709843093778954f,0.44961132965460659516f, -0.89322430119551532446f,0.43309381885315201277f,0.90134884704602202810f, -0.41642956009763731906f,0.90916798309052226923f,0.39962419984564678810f, -0.91667905992104270485f,0.38268343236508983729f,0.92387953251128673848f, -0.36561299780477396482f,0.93076696107898371224f,0.34841868024943450921f, -0.93733901191257495977f,0.33110630575987642921f,0.94359345816196038559f, -0.31368174039889157312f,0.94952818059303667475f,0.29615088824362395536f, -0.95514116830577067141f,0.27851968938505305973f,0.96043051941556578655f, -0.26079411791527556952f,0.96539444169768939830f,0.24298017990326398197f, -0.97003125319454397424f,0.22508391135979277653f,0.97433938278557585821f, -0.20711137619221856032f,0.97831737071962765473f,0.18906866414980627589f, -0.98196386910955524296f,0.17096188876030135595f,0.98527764238894122162f, -0.15279718525844340760f,0.98825756773074946437f,0.13458070850712622324f, -0.99090263542778000971f,0.11631863091190487725f,0.99321194923479450001f, -0.09801714032956077016f,0.99518472667219681771f,0.07968243797143012563f, -0.99682029929116566791f,0.06132073630220864768f,0.99811811290014917919f, -0.04293825693494095902f,0.99907772775264536147f,0.02454122852291226384f, -0.99969881869620424997f,0.00613588464915451517f,0.99998117528260110909f, --0.01227153828571982304f,0.99992470183914450299f,-0.03067480317663645942f, -0.99952941750109314256f,-0.04906767432741800800f,0.99879545620517240501f, --0.06744391956366398155f,0.99772306664419163624f,-0.08579731234443975507f, -0.99631261218277800129f,-0.10412163387205460030f,0.99456457073425541537f, --0.12241067519921615403f,0.99247953459870996706f,-0.14065823933284912761f, -0.99005821026229712256f,-0.15885814333386127917f,0.98730141815785843473f, --0.17700422041214874946f,0.98421009238692902521f,-0.19509032201612819257f, -0.98078528040323043058f,-0.21311031991609125091f,0.97702814265775439484f, --0.23105810828067113727f,0.97293995220556017678f,-0.24892760574572012078f, -0.96852209427441737777f,-0.26671275747489830987f,0.96377606579543984022f, --0.28440753721127171039f,0.95870347489587159906f,-0.30200594931922808417f, -0.95330604035419386211f,-0.31950203081601563637f,0.94758559101774120226f, --0.33688985339221994009f,0.94154406518302080631f,-0.35416352542049039931f, -0.93518350993894761025f,-0.37131719395183748755f,0.92850608047321558924f, --0.38834504669882619066f,0.92151403934204201285f,-0.40524131400498974998f, -0.91420975570353069095f,-0.42200027079979968159f,0.90659570451491533483f, --0.43861623853852738097f,0.89867446569395392775f,-0.45508358712634372489f, -0.89044872324475798919f,-0.47139673682599769755f,0.88192126434835504956f, --0.48755016014843571837f,0.87309497841829020182f,-0.50353838372571746440f, -0.86397285612158680745f,-0.51935599016558964269f,0.85455798836540053376f, --0.53499761988709704230f,0.84485356524970722791f,-0.55045797293660470029f, -0.83486287498638012128f,-0.56573181078361323149f,0.82458930278502517996f, --0.58081395809576441547f,0.81403632970594852480f,-0.59569930449243335691f, -0.80320753148064494287f,-0.61038280627630958630f,0.79210657730021227785f, --0.62485948814238623239f,0.78073722857209459924f,-0.63912444486377573138f, -0.76910333764557958780f,-0.65317284295377653347f,0.75720884650648467851f, --0.66699992230363736034f,0.74505778544146605835f,-0.68060099779545302212f, -0.73265427167241281570f,-0.69397146088965377952f,0.72000250796138176579f, --0.70710678118654746172f,0.70710678118654757274f,-0.72000250796138165477f, -0.69397146088965389055f,-0.73265427167241270467f,0.68060099779545324417f, --0.74505778544146594733f,0.66699992230363758239f,-0.75720884650648467851f, -0.65317284295377664449f,-0.76910333764557947678f,0.63912444486377584241f, --0.78073722857209448822f,0.62485948814238634341f,-0.79210657730021216683f, -0.61038280627630969732f,-0.80320753148064483184f,0.59569930449243346793f, --0.81403632970594841378f,0.58081395809576452649f,-0.82458930278502506894f, -0.56573181078361345353f,-0.83486287498638001026f,0.55045797293660492233f, --0.84485356524970711689f,0.53499761988709715332f,-0.85455798836540042274f, -0.51935599016558975372f,-0.86397285612158669643f,0.50353838372571757542f, --0.87309497841829009079f,0.48755016014843588490f,-0.88192126434835493853f, -0.47139673682599780857f,-0.89044872324475787817f,0.45508358712634389143f, --0.89867446569395392775f,0.43861623853852754751f,-0.90659570451491533483f, -0.42200027079979984812f,-0.91420975570353069095f,0.40524131400498991651f, --0.92151403934204179080f,0.38834504669882657923f,-0.92850608047321547822f, -0.37131719395183770960f,-0.93518350993894761025f,0.35416352542049039931f, --0.94154406518302069529f,0.33688985339222032867f,-0.94758559101774109124f, -0.31950203081601580291f,-0.95330604035419386211f,0.30200594931922802866f, --0.95870347489587148804f,0.28440753721127209896f,-0.96377606579543984022f, -0.26671275747489847641f,-0.96852209427441737777f,0.24892760574572009302f, --0.97293995220556006576f,0.23105810828067133156f,-0.97702814265775439484f, -0.21311031991609141745f,-0.98078528040323043058f,0.19509032201612860891f, --0.98421009238692902521f,0.17700422041214894375f,-0.98730141815785843473f, -0.15885814333386147346f,-0.99005821026229701154f,0.14065823933284954395f, --0.99247953459870996706f,0.12241067519921634832f,-0.99456457073425541537f, -0.10412163387205457254f,-0.99631261218277800129f,0.08579731234444015753f, --0.99772306664419163624f,0.06744391956366417584f,-0.99879545620517240501f, -0.04906767432741796636f,-0.99952941750109314256f,0.03067480317663686534f, --0.99992470183914450299f,0.01227153828572000692f,-0.99998117528260110909f, --0.00613588464915455420f,-0.99969881869620424997f,-0.02454122852291207996f, --0.99907772775264536147f,-0.04293825693494077861f,-0.99811811290014917919f, --0.06132073630220824523f,-0.99682029929116577893f,-0.07968243797142994522f, --0.99518472667219692873f,-0.09801714032956058975f,-0.99321194923479461103f, --0.11631863091190447479f,-0.99090263542778000971f,-0.13458070850712605671f, --0.98825756773074946437f,-0.15279718525844343535f,-0.98527764238894133264f, --0.17096188876030096737f,-0.98196386910955524296f,-0.18906866414980610935f, --0.97831737071962765473f,-0.20711137619221858808f,-0.97433938278557585821f, --0.22508391135979261000f,-0.97003125319454397424f,-0.24298017990326381543f, --0.96539444169768939830f,-0.26079411791527562503f,-0.96043051941556589757f, --0.27851968938505289319f,-0.95514116830577078243f,-0.29615088824362378883f, --0.94952818059303678577f,-0.31368174039889118454f,-0.94359345816196038559f, --0.33110630575987626267f,-0.93733901191257495977f,-0.34841868024943456472f, --0.93076696107898382326f,-0.36561299780477357624f,-0.92387953251128684951f, --0.38268343236508967076f,-0.91667905992104270485f,-0.39962419984564684361f, --0.90916798309052249127f,-0.41642956009763693048f,-0.90134884704602202810f, --0.43309381885315184624f,-0.89322430119551532446f,-0.44961132965460665067f, --0.88479709843093790056f,-0.46597649576796595916f,-0.87607009419540660122f, --0.48218377207912266336f,-0.86704624551569287050f,-0.49822766697278153547f, --0.85772861000027211809f,-0.51410274419322155026f,-0.84812034480329723252f, --0.52980362468629460526f,-0.83822470555483818977f,-0.54532498842204613076f, --0.82804504525775590729f,-0.56066157619733592021f,-0.81758481315158371139f, --0.57580819141784533866f,-0.80684755354379944503f,-0.59075970185887394237f, --0.79583690460888356633f,-0.60551104140432543410f,-0.78455659715557524159f, --0.62005721176328920663f,-0.77301045336273710440f,-0.63439328416364526575f, --0.76120238548426188974f,-0.64851440102211233008f,-0.74913639452345925918f, --0.66241577759017178373f,-0.73681656887737001504f,-0.67609270357531581208f, --0.72424708295146700276f,-0.68954054473706682948f,-0.71143219574521665560f, --0.70275474445722507788f,-0.69837624940897302661f,-0.71573082528381848366f, --0.68508366777270035541f,-0.72846439044822519637f,-0.67155895484701866316f, --0.74095112535495888384f,-0.65780669329707874837f,-0.75318679904361240940f, --0.64383154288979149715f,-0.76516726562245895860f,-0.62963823891492687324f, --0.77688846567323255332f,-0.61523159058062726334f,-0.78834642762660589455f, --0.60061647938386930612f,-0.79953726910790479110f,-0.58579785745643908612f, --0.81045719825259465718f,-0.57078074588696736669f,-0.82110251499110464835f, --0.55557023301960217765f,-0.83146961230254523567f,-0.54017147272989274320f, --0.84155497743689855472f,-0.52458968267846928235f,-0.85135519310526486247f, --0.50883014254310732216f,-0.86086693863776708735f,-0.49289819222978420443f, --0.87008699110871134952f,-0.47679923006332214364f,-0.87901222642863341417f, --0.46053871095823989412f,-0.88763962040285404598f,-0.44412214457042975546f, --0.89596624975618488484f,-0.42755509343028247349f,-0.90398929312344311615f, --0.41084317105790418845f,-0.91170603200542976730f,-0.39399204006104820985f, --0.91911385169005765938f,-0.37700741021641820394f,-0.92621024213831137928f, --0.35989503653498794433f,-0.93299279883473895669f,-0.34266071731199487793f, --0.93945922360218969693f,-0.32531029216226331480f,-0.94560732538052116869f, --0.30784964004153508865f,-0.95143502096900833820f,-0.29028467725446244208f, --0.95694033573220882438f,-0.27262135544994886560f,-0.96212140426904158019f, --0.25486565960451434965f,-0.96697647104485218161f,-0.23702360599436766986f, --0.97150389098625167250f,-0.21910124015687010290f,-0.97570213003852845901f, --0.20110463484209206708f,-0.97956976568544051887f,-0.18303988795514095078f, --0.98310548743121628501f,-0.16491312048996975559f,-0.98630809724459866938f, --0.14673047445536230304f,-0.98917650996478090342f,-0.12849811079379358514f, --0.99170975366909952520f,-0.11022220729388330918f,-0.99390697000235606051f, --0.09190895649713282101f,-0.99576741446765981713f,-0.07356456359966735692f, --0.99729045667869020697f,-0.05519524434968971216f,-0.99847558057329477421f, --0.03680722294135933131f,-0.99932238458834943273f,-0.01840672990580516366f, --0.99983058179582340319f,1.00000000000000000000f,0.00000000000000000000f, -0.99729045667869020697f,0.07356456359966742631f,0.98917650996478101444f, -0.14673047445536174793f,0.97570213003852857003f,0.21910124015686979759f, -0.95694033573220882438f,0.29028467725446233105f,0.93299279883473895669f, -0.35989503653498811087f,0.90398929312344333820f,0.42755509343028208491f, -0.87008699110871146054f,0.49289819222978403790f,0.83146961230254523567f, -0.55557023301960217765f,0.78834642762660622761f,0.61523159058062681925f, -0.74095112535495921691f,0.67155895484701833009f,0.68954054473706694051f, -0.72424708295146689174f,0.63439328416364548779f,0.77301045336273688235f, -0.57580819141784533866f,0.81758481315158371139f,0.51410274419322166128f, -0.85772861000027211809f,0.44961132965460659516f,0.89322430119551532446f, -0.38268343236508983729f,0.92387953251128673848f,0.31368174039889157312f, -0.94952818059303667475f,0.24298017990326398197f,0.97003125319454397424f, -0.17096188876030135595f,0.98527764238894122162f,0.09801714032956077016f, -0.99518472667219681771f,0.02454122852291226384f,0.99969881869620424997f, --0.04906767432741800800f,0.99879545620517240501f,-0.12241067519921615403f, -0.99247953459870996706f,-0.19509032201612819257f,0.98078528040323043058f, --0.26671275747489830987f,0.96377606579543984022f,-0.33688985339221994009f, -0.94154406518302080631f,-0.40524131400498974998f,0.91420975570353069095f, --0.47139673682599769755f,0.88192126434835504956f,-0.53499761988709704230f, -0.84485356524970722791f,-0.59569930449243335691f,0.80320753148064494287f, --0.65317284295377653347f,0.75720884650648467851f,-0.70710678118654746172f, -0.70710678118654757274f,-0.75720884650648467851f,0.65317284295377664449f, --0.80320753148064483184f,0.59569930449243346793f,-0.84485356524970711689f, -0.53499761988709715332f,-0.88192126434835493853f,0.47139673682599780857f, --0.91420975570353069095f,0.40524131400498991651f,-0.94154406518302069529f, -0.33688985339222032867f,-0.96377606579543984022f,0.26671275747489847641f, --0.98078528040323043058f,0.19509032201612860891f,-0.99247953459870996706f, -0.12241067519921634832f,-0.99879545620517240501f,0.04906767432741796636f, --0.99969881869620424997f,-0.02454122852291207996f,-0.99518472667219692873f, --0.09801714032956058975f,-0.98527764238894133264f,-0.17096188876030096737f, --0.97003125319454397424f,-0.24298017990326381543f,-0.94952818059303678577f, --0.31368174039889118454f,-0.92387953251128684951f,-0.38268343236508967076f, --0.89322430119551532446f,-0.44961132965460665067f,-0.85772861000027211809f, --0.51410274419322155026f,-0.81758481315158371139f,-0.57580819141784533866f, --0.77301045336273710440f,-0.63439328416364526575f,-0.72424708295146700276f, --0.68954054473706682948f,-0.67155895484701866316f,-0.74095112535495888384f, --0.61523159058062726334f,-0.78834642762660589455f,-0.55557023301960217765f, --0.83146961230254523567f,-0.49289819222978420443f,-0.87008699110871134952f, --0.42755509343028247349f,-0.90398929312344311615f,-0.35989503653498794433f, --0.93299279883473895669f,-0.29028467725446244208f,-0.95694033573220882438f, --0.21910124015687010290f,-0.97570213003852845901f,-0.14673047445536230304f, --0.98917650996478090342f,-0.07356456359966735692f,-0.99729045667869020697f, -1.00000000000000000000f,0.00000000000000000000f,0.95694033573220882438f, -0.29028467725446233105f,0.83146961230254523567f,0.55557023301960217765f, -0.63439328416364548779f,0.77301045336273688235f,0.38268343236508983729f, -0.92387953251128673848f,0.09801714032956077016f,0.99518472667219681771f, --0.19509032201612819257f,0.98078528040323043058f,-0.47139673682599769755f, -0.88192126434835504956f,-0.70710678118654746172f,0.70710678118654757274f, --0.88192126434835493853f,0.47139673682599780857f,-0.98078528040323043058f, -0.19509032201612860891f,-0.99518472667219692873f,-0.09801714032956058975f, --0.92387953251128684951f,-0.38268343236508967076f,-0.77301045336273710440f, --0.63439328416364526575f,-0.55557023301960217765f,-0.83146961230254523567f, --0.29028467725446244208f,-0.95694033573220882438f,1.00000000000000000000f, -0.00000000000000000000f,0.38268343236508983729f,0.92387953251128673848f, --0.70710678118654746172f,0.70710678118654757274f,-0.92387953251128684951f, --0.38268343236508967076f,}; - -#endif - - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#include "arm_math.h" - -#if defined(ARM_MATH_MVEI) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_16) || defined(ARM_TABLE_TWIDDLECOEF_Q31_32) - -uint32_t rearranged_twiddle_tab_stride1_arr_16_q31[2]={ -0,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_16_q31[2]={ -0,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_16_q31[2]={ -0,0,}; - -q31_t rearranged_twiddle_stride1_16_q31[8]={ -0x7FFFFFFF,0x00000000,0x7641AF3D,0xCF043AB3,0x5A82799A,0xA57D8666,0x30FBC54D, -0x89BE50C3,}; - -q31_t rearranged_twiddle_stride2_16_q31[8]={ -0x7FFFFFFF,0x00000000,0x5A82799A,0xA57D8666,0x00000000,0x80000000,0xA57D8666, -0xA57D8666,}; - -q31_t rearranged_twiddle_stride3_16_q31[8]={ -0x7FFFFFFF,0x00000000,0x30FBC54D,0x89BE50C3,0xA57D8666,0xA57D8666,0x89BE50C3, -0x30FBC54D,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_64) || defined(ARM_TABLE_TWIDDLECOEF_Q31_128) - -uint32_t rearranged_twiddle_tab_stride1_arr_64_q31[3]={ -0,32,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_64_q31[3]={ -0,32,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_64_q31[3]={ -0,32,0,}; - -q31_t rearranged_twiddle_stride1_64_q31[40]={ -0x7FFFFFFF,0x00000000,0x7F62368F,0xF3742CA2,0x7D8A5F40,0xE70747C4,0x7A7D055B, -0xDAD7F3A2,0x7641AF3D,0xCF043AB3,0x70E2CBC6,0xC3A94590,0x6A6D98A4,0xB8E31319, -0x62F201AC,0xAECC336C,0x5A82799A,0xA57D8666,0x5133CC94,0x9D0DFE54,0x471CECE7, -0x9592675C,0x3C56BA70,0x8F1D343A,0x30FBC54D,0x89BE50C3,0x25280C5E,0x8582FAA5, -0x18F8B83C,0x8275A0C0,0x0C8BD35E,0x809DC971,0x7FFFFFFF,0x00000000,0x7641AF3D, -0xCF043AB3,0x5A82799A,0xA57D8666,0x30FBC54D,0x89BE50C3,}; - -q31_t rearranged_twiddle_stride2_64_q31[40]={ -0x7FFFFFFF,0x00000000,0x7D8A5F40,0xE70747C4,0x7641AF3D,0xCF043AB3,0x6A6D98A4, -0xB8E31319,0x5A82799A,0xA57D8666,0x471CECE7,0x9592675C,0x30FBC54D,0x89BE50C3, -0x18F8B83C,0x8275A0C0,0x00000000,0x80000000,0xE70747C4,0x8275A0C0,0xCF043AB3, -0x89BE50C3,0xB8E31319,0x9592675C,0xA57D8666,0xA57D8666,0x9592675C,0xB8E31319, -0x89BE50C3,0xCF043AB3,0x8275A0C0,0xE70747C4,0x7FFFFFFF,0x00000000,0x5A82799A, -0xA57D8666,0x00000000,0x80000000,0xA57D8666,0xA57D8666,}; - -q31_t rearranged_twiddle_stride3_64_q31[40]={ -0x7FFFFFFF,0x00000000,0x7A7D055B,0xDAD7F3A2,0x6A6D98A4,0xB8E31319,0x5133CC94, -0x9D0DFE54,0x30FBC54D,0x89BE50C3,0x0C8BD35E,0x809DC971,0xE70747C4,0x8275A0C0, -0xC3A94590,0x8F1D343A,0xA57D8666,0xA57D8666,0x8F1D343A,0xC3A94590,0x8275A0C0, -0xE70747C4,0x809DC971,0x0C8BD35E,0x89BE50C3,0x30FBC54D,0x9D0DFE54,0x5133CC94, -0xB8E31319,0x6A6D98A4,0xDAD7F3A2,0x7A7D055B,0x7FFFFFFF,0x00000000,0x30FBC54D, -0x89BE50C3,0xA57D8666,0xA57D8666,0x89BE50C3,0x30FBC54D,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_256) || defined(ARM_TABLE_TWIDDLECOEF_Q31_512) - -uint32_t rearranged_twiddle_tab_stride1_arr_256_q31[4]={ -0,128,160,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_256_q31[4]={ -0,128,160,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_256_q31[4]={ -0,128,160,0,}; - -q31_t rearranged_twiddle_stride1_256_q31[168]={ -0x7FFFFFFF,0x00000000,0x7FF62182,0xFCDBD541,0x7FD8878E,0xF9B82684,0x7FA736B4, -0xF6956FB7,0x7F62368F,0xF3742CA2,0x7F0991C4,0xF054D8D5,0x7E9D55FC,0xED37EF91, -0x7E1D93EA,0xEA1DEBBB,0x7D8A5F40,0xE70747C4,0x7CE3CEB2,0xE3F47D96,0x7C29FBEE, -0xE0E60685,0x7B5D039E,0xDDDC5B3B,0x7A7D055B,0xDAD7F3A2,0x798A23B1,0xD7D946D8, -0x78848414,0xD4E0CB15,0x776C4EDB,0xD1EEF59E,0x7641AF3D,0xCF043AB3,0x7504D345, -0xCC210D79,0x73B5EBD1,0xC945DFEC,0x72552C85,0xC67322CE,0x70E2CBC6,0xC3A94590, -0x6F5F02B2,0xC0E8B648,0x6DCA0D14,0xBE31E19B,0x6C242960,0xBB8532B0,0x6A6D98A4, -0xB8E31319,0x68A69E81,0xB64BEACD,0x66CF8120,0xB3C0200C,0x64E88926,0xB140175B, -0x62F201AC,0xAECC336C,0x60EC3830,0xAC64D510,0x5ED77C8A,0xAA0A5B2E,0x5CB420E0, -0xA7BD22AC,0x5A82799A,0xA57D8666,0x5842DD54,0xA34BDF20,0x55F5A4D2,0xA1288376, -0x539B2AF0,0x9F13C7D0,0x5133CC94,0x9D0DFE54,0x4EBFE8A5,0x9B1776DA,0x4C3FDFF4, -0x99307EE0,0x49B41533,0x9759617F,0x471CECE7,0x9592675C,0x447ACD50,0x93DBD6A0, -0x41CE1E65,0x9235F2EC,0x3F1749B8,0x90A0FD4E,0x3C56BA70,0x8F1D343A,0x398CDD32, -0x8DAAD37B,0x36BA2014,0x8C4A142F,0x33DEF287,0x8AFB2CBB,0x30FBC54D,0x89BE50C3, -0x2E110A62,0x8893B125,0x2B1F34EB,0x877B7BEC,0x2826B928,0x8675DC4F,0x25280C5E, -0x8582FAA5,0x2223A4C5,0x84A2FC62,0x1F19F97B,0x83D60412,0x1C0B826A,0x831C314E, -0x18F8B83C,0x8275A0C0,0x15E21445,0x81E26C16,0x12C8106F,0x8162AA04,0x0FAB272B, -0x80F66E3C,0x0C8BD35E,0x809DC971,0x096A9049,0x8058C94C,0x0647D97C,0x80277872, -0x03242ABF,0x8009DE7E,0x7FFFFFFF,0x00000000,0x7F62368F,0xF3742CA2,0x7D8A5F40, -0xE70747C4,0x7A7D055B,0xDAD7F3A2,0x7641AF3D,0xCF043AB3,0x70E2CBC6,0xC3A94590, -0x6A6D98A4,0xB8E31319,0x62F201AC,0xAECC336C,0x5A82799A,0xA57D8666,0x5133CC94, -0x9D0DFE54,0x471CECE7,0x9592675C,0x3C56BA70,0x8F1D343A,0x30FBC54D,0x89BE50C3, -0x25280C5E,0x8582FAA5,0x18F8B83C,0x8275A0C0,0x0C8BD35E,0x809DC971,0x7FFFFFFF, -0x00000000,0x7641AF3D,0xCF043AB3,0x5A82799A,0xA57D8666,0x30FBC54D,0x89BE50C3,}; - -q31_t rearranged_twiddle_stride2_256_q31[168]={ -0x7FFFFFFF,0x00000000,0x7FD8878E,0xF9B82684,0x7F62368F,0xF3742CA2,0x7E9D55FC, -0xED37EF91,0x7D8A5F40,0xE70747C4,0x7C29FBEE,0xE0E60685,0x7A7D055B,0xDAD7F3A2, -0x78848414,0xD4E0CB15,0x7641AF3D,0xCF043AB3,0x73B5EBD1,0xC945DFEC,0x70E2CBC6, -0xC3A94590,0x6DCA0D14,0xBE31E19B,0x6A6D98A4,0xB8E31319,0x66CF8120,0xB3C0200C, -0x62F201AC,0xAECC336C,0x5ED77C8A,0xAA0A5B2E,0x5A82799A,0xA57D8666,0x55F5A4D2, -0xA1288376,0x5133CC94,0x9D0DFE54,0x4C3FDFF4,0x99307EE0,0x471CECE7,0x9592675C, -0x41CE1E65,0x9235F2EC,0x3C56BA70,0x8F1D343A,0x36BA2014,0x8C4A142F,0x30FBC54D, -0x89BE50C3,0x2B1F34EB,0x877B7BEC,0x25280C5E,0x8582FAA5,0x1F19F97B,0x83D60412, -0x18F8B83C,0x8275A0C0,0x12C8106F,0x8162AA04,0x0C8BD35E,0x809DC971,0x0647D97C, -0x80277872,0x00000000,0x80000000,0xF9B82684,0x80277872,0xF3742CA2,0x809DC971, -0xED37EF91,0x8162AA04,0xE70747C4,0x8275A0C0,0xE0E60685,0x83D60412,0xDAD7F3A2, -0x8582FAA5,0xD4E0CB15,0x877B7BEC,0xCF043AB3,0x89BE50C3,0xC945DFEC,0x8C4A142F, -0xC3A94590,0x8F1D343A,0xBE31E19B,0x9235F2EC,0xB8E31319,0x9592675C,0xB3C0200C, -0x99307EE0,0xAECC336C,0x9D0DFE54,0xAA0A5B2E,0xA1288376,0xA57D8666,0xA57D8666, -0xA1288376,0xAA0A5B2E,0x9D0DFE54,0xAECC336C,0x99307EE0,0xB3C0200C,0x9592675C, -0xB8E31319,0x9235F2EC,0xBE31E19B,0x8F1D343A,0xC3A94590,0x8C4A142F,0xC945DFEC, -0x89BE50C3,0xCF043AB3,0x877B7BEC,0xD4E0CB15,0x8582FAA5,0xDAD7F3A2,0x83D60412, -0xE0E60685,0x8275A0C0,0xE70747C4,0x8162AA04,0xED37EF91,0x809DC971,0xF3742CA2, -0x80277872,0xF9B82684,0x7FFFFFFF,0x00000000,0x7D8A5F40,0xE70747C4,0x7641AF3D, -0xCF043AB3,0x6A6D98A4,0xB8E31319,0x5A82799A,0xA57D8666,0x471CECE7,0x9592675C, -0x30FBC54D,0x89BE50C3,0x18F8B83C,0x8275A0C0,0x00000000,0x80000000,0xE70747C4, -0x8275A0C0,0xCF043AB3,0x89BE50C3,0xB8E31319,0x9592675C,0xA57D8666,0xA57D8666, -0x9592675C,0xB8E31319,0x89BE50C3,0xCF043AB3,0x8275A0C0,0xE70747C4,0x7FFFFFFF, -0x00000000,0x5A82799A,0xA57D8666,0x00000000,0x80000000,0xA57D8666,0xA57D8666,}; - -q31_t rearranged_twiddle_stride3_256_q31[168]={ -0x7FFFFFFF,0x00000000,0x7FA736B4,0xF6956FB7,0x7E9D55FC,0xED37EF91,0x7CE3CEB2, -0xE3F47D96,0x7A7D055B,0xDAD7F3A2,0x776C4EDB,0xD1EEF59E,0x73B5EBD1,0xC945DFEC, -0x6F5F02B2,0xC0E8B648,0x6A6D98A4,0xB8E31319,0x64E88926,0xB140175B,0x5ED77C8A, -0xAA0A5B2E,0x5842DD54,0xA34BDF20,0x5133CC94,0x9D0DFE54,0x49B41533,0x9759617F, -0x41CE1E65,0x9235F2EC,0x398CDD32,0x8DAAD37B,0x30FBC54D,0x89BE50C3,0x2826B928, -0x8675DC4F,0x1F19F97B,0x83D60412,0x15E21445,0x81E26C16,0x0C8BD35E,0x809DC971, -0x03242ABF,0x8009DE7E,0xF9B82684,0x80277872,0xF054D8D5,0x80F66E3C,0xE70747C4, -0x8275A0C0,0xDDDC5B3B,0x84A2FC62,0xD4E0CB15,0x877B7BEC,0xCC210D79,0x8AFB2CBB, -0xC3A94590,0x8F1D343A,0xBB8532B0,0x93DBD6A0,0xB3C0200C,0x99307EE0,0xAC64D510, -0x9F13C7D0,0xA57D8666,0xA57D8666,0x9F13C7D0,0xAC64D510,0x99307EE0,0xB3C0200C, -0x93DBD6A0,0xBB8532B0,0x8F1D343A,0xC3A94590,0x8AFB2CBB,0xCC210D79,0x877B7BEC, -0xD4E0CB15,0x84A2FC62,0xDDDC5B3B,0x8275A0C0,0xE70747C4,0x80F66E3C,0xF054D8D5, -0x80277872,0xF9B82684,0x8009DE7E,0x03242ABF,0x809DC971,0x0C8BD35E,0x81E26C16, -0x15E21445,0x83D60412,0x1F19F97B,0x8675DC4F,0x2826B928,0x89BE50C3,0x30FBC54D, -0x8DAAD37B,0x398CDD32,0x9235F2EC,0x41CE1E65,0x9759617F,0x49B41533,0x9D0DFE54, -0x5133CC94,0xA34BDF20,0x5842DD54,0xAA0A5B2E,0x5ED77C8A,0xB140175B,0x64E88926, -0xB8E31319,0x6A6D98A4,0xC0E8B648,0x6F5F02B2,0xC945DFEC,0x73B5EBD1,0xD1EEF59E, -0x776C4EDB,0xDAD7F3A2,0x7A7D055B,0xE3F47D96,0x7CE3CEB2,0xED37EF91,0x7E9D55FC, -0xF6956FB7,0x7FA736B4,0x7FFFFFFF,0x00000000,0x7A7D055B,0xDAD7F3A2,0x6A6D98A4, -0xB8E31319,0x5133CC94,0x9D0DFE54,0x30FBC54D,0x89BE50C3,0x0C8BD35E,0x809DC971, -0xE70747C4,0x8275A0C0,0xC3A94590,0x8F1D343A,0xA57D8666,0xA57D8666,0x8F1D343A, -0xC3A94590,0x8275A0C0,0xE70747C4,0x809DC971,0x0C8BD35E,0x89BE50C3,0x30FBC54D, -0x9D0DFE54,0x5133CC94,0xB8E31319,0x6A6D98A4,0xDAD7F3A2,0x7A7D055B,0x7FFFFFFF, -0x00000000,0x30FBC54D,0x89BE50C3,0xA57D8666,0xA57D8666,0x89BE50C3,0x30FBC54D,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) - -uint32_t rearranged_twiddle_tab_stride1_arr_1024_q31[5]={ -0,512,640,672,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_1024_q31[5]={ -0,512,640,672,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_1024_q31[5]={ -0,512,640,672,0,}; - -q31_t rearranged_twiddle_stride1_1024_q31[680]={ -0x7FFFFFFF,0x00000000,0x7FFF6216,0xFF36F078,0x7FFD885A,0xFE6DE2E0,0x7FFA72D1, -0xFDA4D929,0x7FF62182,0xFCDBD541,0x7FF09478,0xFC12D91A,0x7FE9CBC0,0xFB49E6A3, -0x7FE1C76B,0xFA80FFCB,0x7FD8878E,0xF9B82684,0x7FCE0C3E,0xF8EF5CBB,0x7FC25596, -0xF826A462,0x7FB563B3,0xF75DFF66,0x7FA736B4,0xF6956FB7,0x7F97CEBD,0xF5CCF743, -0x7F872BF3,0xF50497FB,0x7F754E80,0xF43C53CB,0x7F62368F,0xF3742CA2,0x7F4DE451, -0xF2AC246E,0x7F3857F6,0xF1E43D1C,0x7F2191B4,0xF11C789A,0x7F0991C4,0xF054D8D5, -0x7EF05860,0xEF8D5FB8,0x7ED5E5C6,0xEEC60F31,0x7EBA3A39,0xEDFEE92B,0x7E9D55FC, -0xED37EF91,0x7E7F3957,0xEC71244F,0x7E5FE493,0xEBAA894F,0x7E3F57FF,0xEAE4207A, -0x7E1D93EA,0xEA1DEBBB,0x7DFA98A8,0xE957ECFB,0x7DD6668F,0xE8922622,0x7DB0FDF8, -0xE7CC9917,0x7D8A5F40,0xE70747C4,0x7D628AC6,0xE642340D,0x7D3980EC,0xE57D5FDA, -0x7D0F4218,0xE4B8CD11,0x7CE3CEB2,0xE3F47D96,0x7CB72724,0xE330734D,0x7C894BDE, -0xE26CB01B,0x7C5A3D50,0xE1A935E2,0x7C29FBEE,0xE0E60685,0x7BF88830,0xE02323E5, -0x7BC5E290,0xDF608FE4,0x7B920B89,0xDE9E4C60,0x7B5D039E,0xDDDC5B3B,0x7B26CB4F, -0xDD1ABE51,0x7AEF6323,0xDC597781,0x7AB6CBA4,0xDB9888A8,0x7A7D055B,0xDAD7F3A2, -0x7A4210D8,0xDA17BA4A,0x7A05EEAD,0xD957DE7A,0x79C89F6E,0xD898620C,0x798A23B1, -0xD7D946D8,0x794A7C12,0xD71A8EB5,0x7909A92D,0xD65C3B7B,0x78C7ABA2,0xD59E4EFF, -0x78848414,0xD4E0CB15,0x78403329,0xD423B191,0x77FAB989,0xD3670446,0x77B417DF, -0xD2AAC504,0x776C4EDB,0xD1EEF59E,0x77235F2D,0xD13397E2,0x76D94989,0xD078AD9E, -0x768E0EA6,0xCFBE389F,0x7641AF3D,0xCF043AB3,0x75F42C0B,0xCE4AB5A2,0x75A585CF, -0xCD91AB39,0x7555BD4C,0xCCD91D3D,0x7504D345,0xCC210D79,0x74B2C884,0xCB697DB0, -0x745F9DD1,0xCAB26FA9,0x740B53FB,0xC9FBE527,0x73B5EBD1,0xC945DFEC,0x735F6626, -0xC89061BA,0x7307C3D0,0xC7DB6C50,0x72AF05A7,0xC727016D,0x72552C85,0xC67322CE, -0x71FA3949,0xC5BFD22E,0x719E2CD2,0xC50D1149,0x71410805,0xC45AE1D7,0x70E2CBC6, -0xC3A94590,0x708378FF,0xC2F83E2A,0x7023109A,0xC247CD5A,0x6FC19385,0xC197F4D4, -0x6F5F02B2,0xC0E8B648,0x6EFB5F12,0xC03A1368,0x6E96A99D,0xBF8C0DE3,0x6E30E34A, -0xBEDEA765,0x6DCA0D14,0xBE31E19B,0x6D6227FA,0xBD85BE30,0x6CF934FC,0xBCDA3ECB, -0x6C8F351C,0xBC2F6513,0x6C242960,0xBB8532B0,0x6BB812D1,0xBADBA943,0x6B4AF279, -0xBA32CA71,0x6ADCC964,0xB98A97D8,0x6A6D98A4,0xB8E31319,0x69FD614A,0xB83C3DD1, -0x698C246C,0xB796199B,0x6919E320,0xB6F0A812,0x68A69E81,0xB64BEACD,0x683257AB, -0xB5A7E362,0x67BD0FBD,0xB5049368,0x6746C7D8,0xB461FC70,0x66CF8120,0xB3C0200C, -0x66573CBB,0xB31EFFCC,0x65DDFBD3,0xB27E9D3C,0x6563BF92,0xB1DEF9E9,0x64E88926, -0xB140175B,0x646C59BF,0xB0A1F71D,0x63EF3290,0xB0049AB3,0x637114CC,0xAF6803A2, -0x62F201AC,0xAECC336C,0x6271FA69,0xAE312B92,0x61F1003F,0xAD96ED92,0x616F146C, -0xACFD7AE8,0x60EC3830,0xAC64D510,0x60686CCF,0xABCCFD83,0x5FE3B38D,0xAB35F5B5, -0x5F5E0DB3,0xAA9FBF1E,0x5ED77C8A,0xAA0A5B2E,0x5E50015D,0xA975CB57,0x5DC79D7C, -0xA8E21106,0x5D3E5237,0xA84F2DAA,0x5CB420E0,0xA7BD22AC,0x5C290ACC,0xA72BF174, -0x5B9D1154,0xA69B9B68,0x5B1035CF,0xA60C21EE,0x5A82799A,0xA57D8666,0x59F3DE12, -0xA4EFCA31,0x59646498,0xA462EEAC,0x58D40E8C,0xA3D6F534,0x5842DD54,0xA34BDF20, -0x57B0D256,0xA2C1ADC9,0x571DEEFA,0xA2386284,0x568A34A9,0xA1AFFEA3,0x55F5A4D2, -0xA1288376,0x556040E2,0xA0A1F24D,0x54CA0A4B,0xA01C4C73,0x5433027D,0x9F979331, -0x539B2AF0,0x9F13C7D0,0x53028518,0x9E90EB94,0x5269126E,0x9E0EFFC1,0x51CED46E, -0x9D8E0597,0x5133CC94,0x9D0DFE54,0x5097FC5E,0x9C8EEB34,0x4FFB654D,0x9C10CD70, -0x4F5E08E3,0x9B93A641,0x4EBFE8A5,0x9B1776DA,0x4E210617,0x9A9C406E,0x4D8162C4, -0x9A22042D,0x4CE10034,0x99A8C345,0x4C3FDFF4,0x99307EE0,0x4B9E0390,0x98B93828, -0x4AFB6C98,0x9842F043,0x4A581C9E,0x97CDA855,0x49B41533,0x9759617F,0x490F57EE, -0x96E61CE0,0x4869E665,0x9673DB94,0x47C3C22F,0x96029EB6,0x471CECE7,0x9592675C, -0x46756828,0x9523369C,0x45CD358F,0x94B50D87,0x452456BD,0x9447ED2F,0x447ACD50, -0x93DBD6A0,0x43D09AED,0x9370CAE4,0x4325C135,0x9306CB04,0x427A41D0,0x929DD806, -0x41CE1E65,0x9235F2EC,0x4121589B,0x91CF1CB6,0x4073F21D,0x91695663,0x3FC5EC98, -0x9104A0EE,0x3F1749B8,0x90A0FD4E,0x3E680B2C,0x903E6C7B,0x3DB832A6,0x8FDCEF66, -0x3D07C1D6,0x8F7C8701,0x3C56BA70,0x8F1D343A,0x3BA51E29,0x8EBEF7FB,0x3AF2EEB7, -0x8E61D32E,0x3A402DD2,0x8E05C6B7,0x398CDD32,0x8DAAD37B,0x38D8FE93,0x8D50FA59, -0x382493B0,0x8CF83C30,0x376F9E46,0x8CA099DA,0x36BA2014,0x8C4A142F,0x36041AD9, -0x8BF4AC05,0x354D9057,0x8BA0622F,0x34968250,0x8B4D377C,0x33DEF287,0x8AFB2CBB, -0x3326E2C3,0x8AAA42B4,0x326E54C7,0x8A5A7A31,0x31B54A5E,0x8A0BD3F5,0x30FBC54D, -0x89BE50C3,0x3041C761,0x8971F15A,0x2F875262,0x8926B677,0x2ECC681E,0x88DCA0D3, -0x2E110A62,0x8893B125,0x2D553AFC,0x884BE821,0x2C98FBBA,0x88054677,0x2BDC4E6F, -0x87BFCCD7,0x2B1F34EB,0x877B7BEC,0x2A61B101,0x8738545E,0x29A3C485,0x86F656D3, -0x28E5714B,0x86B583EE,0x2826B928,0x8675DC4F,0x27679DF4,0x86376092,0x26A82186, -0x85FA1153,0x25E845B6,0x85BDEF28,0x25280C5E,0x8582FAA5,0x24677758,0x8549345C, -0x23A6887F,0x85109CDD,0x22E541AF,0x84D934B1,0x2223A4C5,0x84A2FC62,0x2161B3A0, -0x846DF477,0x209F701C,0x843A1D70,0x1FDCDC1B,0x840777D0,0x1F19F97B,0x83D60412, -0x1E56CA1E,0x83A5C2B0,0x1D934FE5,0x8376B422,0x1CCF8CB3,0x8348D8DC,0x1C0B826A, -0x831C314E,0x1B4732EF,0x82F0BDE8,0x1A82A026,0x82C67F14,0x19BDCBF3,0x829D753A, -0x18F8B83C,0x8275A0C0,0x183366E9,0x824F0208,0x176DD9DE,0x82299971,0x16A81305, -0x82056758,0x15E21445,0x81E26C16,0x151BDF86,0x81C0A801,0x145576B1,0x81A01B6D, -0x138EDBB1,0x8180C6A9,0x12C8106F,0x8162AA04,0x120116D5,0x8145C5C7,0x1139F0CF, -0x812A1A3A,0x1072A048,0x810FA7A0,0x0FAB272B,0x80F66E3C,0x0EE38766,0x80DE6E4C, -0x0E1BC2E4,0x80C7A80A,0x0D53DB92,0x80B21BAF,0x0C8BD35E,0x809DC971,0x0BC3AC35, -0x808AB180,0x0AFB6805,0x8078D40D,0x0A3308BD,0x80683143,0x096A9049,0x8058C94C, -0x08A2009A,0x804A9C4D,0x07D95B9E,0x803DAA6A,0x0710A345,0x8031F3C2,0x0647D97C, -0x80277872,0x057F0035,0x801E3895,0x04B6195D,0x80163440,0x03ED26E6,0x800F6B88, -0x03242ABF,0x8009DE7E,0x025B26D7,0x80058D2F,0x01921D20,0x800277A6,0x00C90F88, -0x80009DEA,0x7FFFFFFF,0x00000000,0x7FF62182,0xFCDBD541,0x7FD8878E,0xF9B82684, -0x7FA736B4,0xF6956FB7,0x7F62368F,0xF3742CA2,0x7F0991C4,0xF054D8D5,0x7E9D55FC, -0xED37EF91,0x7E1D93EA,0xEA1DEBBB,0x7D8A5F40,0xE70747C4,0x7CE3CEB2,0xE3F47D96, -0x7C29FBEE,0xE0E60685,0x7B5D039E,0xDDDC5B3B,0x7A7D055B,0xDAD7F3A2,0x798A23B1, -0xD7D946D8,0x78848414,0xD4E0CB15,0x776C4EDB,0xD1EEF59E,0x7641AF3D,0xCF043AB3, -0x7504D345,0xCC210D79,0x73B5EBD1,0xC945DFEC,0x72552C85,0xC67322CE,0x70E2CBC6, -0xC3A94590,0x6F5F02B2,0xC0E8B648,0x6DCA0D14,0xBE31E19B,0x6C242960,0xBB8532B0, -0x6A6D98A4,0xB8E31319,0x68A69E81,0xB64BEACD,0x66CF8120,0xB3C0200C,0x64E88926, -0xB140175B,0x62F201AC,0xAECC336C,0x60EC3830,0xAC64D510,0x5ED77C8A,0xAA0A5B2E, -0x5CB420E0,0xA7BD22AC,0x5A82799A,0xA57D8666,0x5842DD54,0xA34BDF20,0x55F5A4D2, -0xA1288376,0x539B2AF0,0x9F13C7D0,0x5133CC94,0x9D0DFE54,0x4EBFE8A5,0x9B1776DA, -0x4C3FDFF4,0x99307EE0,0x49B41533,0x9759617F,0x471CECE7,0x9592675C,0x447ACD50, -0x93DBD6A0,0x41CE1E65,0x9235F2EC,0x3F1749B8,0x90A0FD4E,0x3C56BA70,0x8F1D343A, -0x398CDD32,0x8DAAD37B,0x36BA2014,0x8C4A142F,0x33DEF287,0x8AFB2CBB,0x30FBC54D, -0x89BE50C3,0x2E110A62,0x8893B125,0x2B1F34EB,0x877B7BEC,0x2826B928,0x8675DC4F, -0x25280C5E,0x8582FAA5,0x2223A4C5,0x84A2FC62,0x1F19F97B,0x83D60412,0x1C0B826A, -0x831C314E,0x18F8B83C,0x8275A0C0,0x15E21445,0x81E26C16,0x12C8106F,0x8162AA04, -0x0FAB272B,0x80F66E3C,0x0C8BD35E,0x809DC971,0x096A9049,0x8058C94C,0x0647D97C, -0x80277872,0x03242ABF,0x8009DE7E,0x7FFFFFFF,0x00000000,0x7F62368F,0xF3742CA2, -0x7D8A5F40,0xE70747C4,0x7A7D055B,0xDAD7F3A2,0x7641AF3D,0xCF043AB3,0x70E2CBC6, -0xC3A94590,0x6A6D98A4,0xB8E31319,0x62F201AC,0xAECC336C,0x5A82799A,0xA57D8666, -0x5133CC94,0x9D0DFE54,0x471CECE7,0x9592675C,0x3C56BA70,0x8F1D343A,0x30FBC54D, -0x89BE50C3,0x25280C5E,0x8582FAA5,0x18F8B83C,0x8275A0C0,0x0C8BD35E,0x809DC971, -0x7FFFFFFF,0x00000000,0x7641AF3D,0xCF043AB3,0x5A82799A,0xA57D8666,0x30FBC54D, -0x89BE50C3,}; - -q31_t rearranged_twiddle_stride2_1024_q31[680]={ -0x7FFFFFFF,0x00000000,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,0x0FAB272B,0x80F66E3C, -0x0E1BC2E4,0x80C7A80A,0x0C8BD35E,0x809DC971,0x0AFB6805,0x8078D40D,0x096A9049, -0x8058C94C,0x07D95B9E,0x803DAA6A,0x0647D97C,0x80277872,0x04B6195D,0x80163440, -0x03242ABF,0x8009DE7E,0x01921D20,0x800277A6,0x00000000,0x80000000,0xFE6DE2E0, -0x800277A6,0xFCDBD541,0x8009DE7E,0xFB49E6A3,0x80163440,0xF9B82684,0x80277872, -0xF826A462,0x803DAA6A,0xF6956FB7,0x8058C94C,0xF50497FB,0x8078D40D,0xF3742CA2, -0x809DC971,0xF1E43D1C,0x80C7A80A,0xF054D8D5,0x80F66E3C,0xEEC60F31,0x812A1A3A, -0xED37EF91,0x8162AA04,0xEBAA894F,0x81A01B6D,0xEA1DEBBB,0x81E26C16,0xE8922622, -0x82299971,0xE70747C4,0x8275A0C0,0xE57D5FDA,0x82C67F14,0xE3F47D96,0x831C314E, -0xE26CB01B,0x8376B422,0xE0E60685,0x83D60412,0xDF608FE4,0x843A1D70,0xDDDC5B3B, -0x84A2FC62,0xDC597781,0x85109CDD,0xDAD7F3A2,0x8582FAA5,0xD957DE7A,0x85FA1153, -0xD7D946D8,0x8675DC4F,0xD65C3B7B,0x86F656D3,0xD4E0CB15,0x877B7BEC,0xD3670446, -0x88054677,0xD1EEF59E,0x8893B125,0xD078AD9E,0x8926B677,0xCF043AB3,0x89BE50C3, -0xCD91AB39,0x8A5A7A31,0xCC210D79,0x8AFB2CBB,0xCAB26FA9,0x8BA0622F,0xC945DFEC, -0x8C4A142F,0xC7DB6C50,0x8CF83C30,0xC67322CE,0x8DAAD37B,0xC50D1149,0x8E61D32E, -0xC3A94590,0x8F1D343A,0xC247CD5A,0x8FDCEF66,0xC0E8B648,0x90A0FD4E,0xBF8C0DE3, -0x91695663,0xBE31E19B,0x9235F2EC,0xBCDA3ECB,0x9306CB04,0xBB8532B0,0x93DBD6A0, -0xBA32CA71,0x94B50D87,0xB8E31319,0x9592675C,0xB796199B,0x9673DB94,0xB64BEACD, -0x9759617F,0xB5049368,0x9842F043,0xB3C0200C,0x99307EE0,0xB27E9D3C,0x9A22042D, -0xB140175B,0x9B1776DA,0xB0049AB3,0x9C10CD70,0xAECC336C,0x9D0DFE54,0xAD96ED92, -0x9E0EFFC1,0xAC64D510,0x9F13C7D0,0xAB35F5B5,0xA01C4C73,0xAA0A5B2E,0xA1288376, -0xA8E21106,0xA2386284,0xA7BD22AC,0xA34BDF20,0xA69B9B68,0xA462EEAC,0xA57D8666, -0xA57D8666,0xA462EEAC,0xA69B9B68,0xA34BDF20,0xA7BD22AC,0xA2386284,0xA8E21106, -0xA1288376,0xAA0A5B2E,0xA01C4C73,0xAB35F5B5,0x9F13C7D0,0xAC64D510,0x9E0EFFC1, -0xAD96ED92,0x9D0DFE54,0xAECC336C,0x9C10CD70,0xB0049AB3,0x9B1776DA,0xB140175B, -0x9A22042D,0xB27E9D3C,0x99307EE0,0xB3C0200C,0x9842F043,0xB5049368,0x9759617F, -0xB64BEACD,0x9673DB94,0xB796199B,0x9592675C,0xB8E31319,0x94B50D87,0xBA32CA71, -0x93DBD6A0,0xBB8532B0,0x9306CB04,0xBCDA3ECB,0x9235F2EC,0xBE31E19B,0x91695663, -0xBF8C0DE3,0x90A0FD4E,0xC0E8B648,0x8FDCEF66,0xC247CD5A,0x8F1D343A,0xC3A94590, -0x8E61D32E,0xC50D1149,0x8DAAD37B,0xC67322CE,0x8CF83C30,0xC7DB6C50,0x8C4A142F, -0xC945DFEC,0x8BA0622F,0xCAB26FA9,0x8AFB2CBB,0xCC210D79,0x8A5A7A31,0xCD91AB39, -0x89BE50C3,0xCF043AB3,0x8926B677,0xD078AD9E,0x8893B125,0xD1EEF59E,0x88054677, -0xD3670446,0x877B7BEC,0xD4E0CB15,0x86F656D3,0xD65C3B7B,0x8675DC4F,0xD7D946D8, -0x85FA1153,0xD957DE7A,0x8582FAA5,0xDAD7F3A2,0x85109CDD,0xDC597781,0x84A2FC62, -0xDDDC5B3B,0x843A1D70,0xDF608FE4,0x83D60412,0xE0E60685,0x8376B422,0xE26CB01B, -0x831C314E,0xE3F47D96,0x82C67F14,0xE57D5FDA,0x8275A0C0,0xE70747C4,0x82299971, -0xE8922622,0x81E26C16,0xEA1DEBBB,0x81A01B6D,0xEBAA894F,0x8162AA04,0xED37EF91, -0x812A1A3A,0xEEC60F31,0x80F66E3C,0xF054D8D5,0x80C7A80A,0xF1E43D1C,0x809DC971, -0xF3742CA2,0x8078D40D,0xF50497FB,0x8058C94C,0xF6956FB7,0x803DAA6A,0xF826A462, -0x80277872,0xF9B82684,0x80163440,0xFB49E6A3,0x8009DE7E,0xFCDBD541,0x800277A6, -0xFE6DE2E0,0x7FFFFFFF,0x00000000,0x7FD8878E,0xF9B82684,0x7F62368F,0xF3742CA2, -0x7E9D55FC,0xED37EF91,0x7D8A5F40,0xE70747C4,0x7C29FBEE,0xE0E60685,0x7A7D055B, -0xDAD7F3A2,0x78848414,0xD4E0CB15,0x7641AF3D,0xCF043AB3,0x73B5EBD1,0xC945DFEC, -0x70E2CBC6,0xC3A94590,0x6DCA0D14,0xBE31E19B,0x6A6D98A4,0xB8E31319,0x66CF8120, -0xB3C0200C,0x62F201AC,0xAECC336C,0x5ED77C8A,0xAA0A5B2E,0x5A82799A,0xA57D8666, -0x55F5A4D2,0xA1288376,0x5133CC94,0x9D0DFE54,0x4C3FDFF4,0x99307EE0,0x471CECE7, -0x9592675C,0x41CE1E65,0x9235F2EC,0x3C56BA70,0x8F1D343A,0x36BA2014,0x8C4A142F, -0x30FBC54D,0x89BE50C3,0x2B1F34EB,0x877B7BEC,0x25280C5E,0x8582FAA5,0x1F19F97B, -0x83D60412,0x18F8B83C,0x8275A0C0,0x12C8106F,0x8162AA04,0x0C8BD35E,0x809DC971, -0x0647D97C,0x80277872,0x00000000,0x80000000,0xF9B82684,0x80277872,0xF3742CA2, -0x809DC971,0xED37EF91,0x8162AA04,0xE70747C4,0x8275A0C0,0xE0E60685,0x83D60412, -0xDAD7F3A2,0x8582FAA5,0xD4E0CB15,0x877B7BEC,0xCF043AB3,0x89BE50C3,0xC945DFEC, -0x8C4A142F,0xC3A94590,0x8F1D343A,0xBE31E19B,0x9235F2EC,0xB8E31319,0x9592675C, -0xB3C0200C,0x99307EE0,0xAECC336C,0x9D0DFE54,0xAA0A5B2E,0xA1288376,0xA57D8666, -0xA57D8666,0xA1288376,0xAA0A5B2E,0x9D0DFE54,0xAECC336C,0x99307EE0,0xB3C0200C, -0x9592675C,0xB8E31319,0x9235F2EC,0xBE31E19B,0x8F1D343A,0xC3A94590,0x8C4A142F, -0xC945DFEC,0x89BE50C3,0xCF043AB3,0x877B7BEC,0xD4E0CB15,0x8582FAA5,0xDAD7F3A2, -0x83D60412,0xE0E60685,0x8275A0C0,0xE70747C4,0x8162AA04,0xED37EF91,0x809DC971, -0xF3742CA2,0x80277872,0xF9B82684,0x7FFFFFFF,0x00000000,0x7D8A5F40,0xE70747C4, -0x7641AF3D,0xCF043AB3,0x6A6D98A4,0xB8E31319,0x5A82799A,0xA57D8666,0x471CECE7, -0x9592675C,0x30FBC54D,0x89BE50C3,0x18F8B83C,0x8275A0C0,0x00000000,0x80000000, -0xE70747C4,0x8275A0C0,0xCF043AB3,0x89BE50C3,0xB8E31319,0x9592675C,0xA57D8666, -0xA57D8666,0x9592675C,0xB8E31319,0x89BE50C3,0xCF043AB3,0x8275A0C0,0xE70747C4, -0x7FFFFFFF,0x00000000,0x5A82799A,0xA57D8666,0x00000000,0x80000000,0xA57D8666, -0xA57D8666,}; - -q31_t rearranged_twiddle_stride3_1024_q31[680]={ -0x7FFFFFFF,0x00000000,0x7FFA72D1,0xFDA4D929,0x7FE9CBC0,0xFB49E6A3,0x7FCE0C3E, -0xF8EF5CBB,0x7FA736B4,0xF6956FB7,0x7F754E80,0xF43C53CB,0x7F3857F6,0xF1E43D1C, -0x7EF05860,0xEF8D5FB8,0x7E9D55FC,0xED37EF91,0x7E3F57FF,0xEAE4207A,0x7DD6668F, -0xE8922622,0x7D628AC6,0xE642340D,0x7CE3CEB2,0xE3F47D96,0x7C5A3D50,0xE1A935E2, -0x7BC5E290,0xDF608FE4,0x7B26CB4F,0xDD1ABE51,0x7A7D055B,0xDAD7F3A2,0x79C89F6E, -0xD898620C,0x7909A92D,0xD65C3B7B,0x78403329,0xD423B191,0x776C4EDB,0xD1EEF59E, -0x768E0EA6,0xCFBE389F,0x75A585CF,0xCD91AB39,0x74B2C884,0xCB697DB0,0x73B5EBD1, -0xC945DFEC,0x72AF05A7,0xC727016D,0x719E2CD2,0xC50D1149,0x708378FF,0xC2F83E2A, -0x6F5F02B2,0xC0E8B648,0x6E30E34A,0xBEDEA765,0x6CF934FC,0xBCDA3ECB,0x6BB812D1, -0xBADBA943,0x6A6D98A4,0xB8E31319,0x6919E320,0xB6F0A812,0x67BD0FBD,0xB5049368, -0x66573CBB,0xB31EFFCC,0x64E88926,0xB140175B,0x637114CC,0xAF6803A2,0x61F1003F, -0xAD96ED92,0x60686CCF,0xABCCFD83,0x5ED77C8A,0xAA0A5B2E,0x5D3E5237,0xA84F2DAA, -0x5B9D1154,0xA69B9B68,0x59F3DE12,0xA4EFCA31,0x5842DD54,0xA34BDF20,0x568A34A9, -0xA1AFFEA3,0x54CA0A4B,0xA01C4C73,0x53028518,0x9E90EB94,0x5133CC94,0x9D0DFE54, -0x4F5E08E3,0x9B93A641,0x4D8162C4,0x9A22042D,0x4B9E0390,0x98B93828,0x49B41533, -0x9759617F,0x47C3C22F,0x96029EB6,0x45CD358F,0x94B50D87,0x43D09AED,0x9370CAE4, -0x41CE1E65,0x9235F2EC,0x3FC5EC98,0x9104A0EE,0x3DB832A6,0x8FDCEF66,0x3BA51E29, -0x8EBEF7FB,0x398CDD32,0x8DAAD37B,0x376F9E46,0x8CA099DA,0x354D9057,0x8BA0622F, -0x3326E2C3,0x8AAA42B4,0x30FBC54D,0x89BE50C3,0x2ECC681E,0x88DCA0D3,0x2C98FBBA, -0x88054677,0x2A61B101,0x8738545E,0x2826B928,0x8675DC4F,0x25E845B6,0x85BDEF28, -0x23A6887F,0x85109CDD,0x2161B3A0,0x846DF477,0x1F19F97B,0x83D60412,0x1CCF8CB3, -0x8348D8DC,0x1A82A026,0x82C67F14,0x183366E9,0x824F0208,0x15E21445,0x81E26C16, -0x138EDBB1,0x8180C6A9,0x1139F0CF,0x812A1A3A,0x0EE38766,0x80DE6E4C,0x0C8BD35E, -0x809DC971,0x0A3308BD,0x80683143,0x07D95B9E,0x803DAA6A,0x057F0035,0x801E3895, -0x03242ABF,0x8009DE7E,0x00C90F88,0x80009DEA,0xFE6DE2E0,0x800277A6,0xFC12D91A, -0x800F6B88,0xF9B82684,0x80277872,0xF75DFF66,0x804A9C4D,0xF50497FB,0x8078D40D, -0xF2AC246E,0x80B21BAF,0xF054D8D5,0x80F66E3C,0xEDFEE92B,0x8145C5C7,0xEBAA894F, -0x81A01B6D,0xE957ECFB,0x82056758,0xE70747C4,0x8275A0C0,0xE4B8CD11,0x82F0BDE8, -0xE26CB01B,0x8376B422,0xE02323E5,0x840777D0,0xDDDC5B3B,0x84A2FC62,0xDB9888A8, -0x8549345C,0xD957DE7A,0x85FA1153,0xD71A8EB5,0x86B583EE,0xD4E0CB15,0x877B7BEC, -0xD2AAC504,0x884BE821,0xD078AD9E,0x8926B677,0xCE4AB5A2,0x8A0BD3F5,0xCC210D79, -0x8AFB2CBB,0xC9FBE527,0x8BF4AC05,0xC7DB6C50,0x8CF83C30,0xC5BFD22E,0x8E05C6B7, -0xC3A94590,0x8F1D343A,0xC197F4D4,0x903E6C7B,0xBF8C0DE3,0x91695663,0xBD85BE30, -0x929DD806,0xBB8532B0,0x93DBD6A0,0xB98A97D8,0x9523369C,0xB796199B,0x9673DB94, -0xB5A7E362,0x97CDA855,0xB3C0200C,0x99307EE0,0xB1DEF9E9,0x9A9C406E,0xB0049AB3, -0x9C10CD70,0xAE312B92,0x9D8E0597,0xAC64D510,0x9F13C7D0,0xAA9FBF1E,0xA0A1F24D, -0xA8E21106,0xA2386284,0xA72BF174,0xA3D6F534,0xA57D8666,0xA57D8666,0xA3D6F534, -0xA72BF174,0xA2386284,0xA8E21106,0xA0A1F24D,0xAA9FBF1E,0x9F13C7D0,0xAC64D510, -0x9D8E0597,0xAE312B92,0x9C10CD70,0xB0049AB3,0x9A9C406E,0xB1DEF9E9,0x99307EE0, -0xB3C0200C,0x97CDA855,0xB5A7E362,0x9673DB94,0xB796199B,0x9523369C,0xB98A97D8, -0x93DBD6A0,0xBB8532B0,0x929DD806,0xBD85BE30,0x91695663,0xBF8C0DE3,0x903E6C7B, -0xC197F4D4,0x8F1D343A,0xC3A94590,0x8E05C6B7,0xC5BFD22E,0x8CF83C30,0xC7DB6C50, -0x8BF4AC05,0xC9FBE527,0x8AFB2CBB,0xCC210D79,0x8A0BD3F5,0xCE4AB5A2,0x8926B677, -0xD078AD9E,0x884BE821,0xD2AAC504,0x877B7BEC,0xD4E0CB15,0x86B583EE,0xD71A8EB5, -0x85FA1153,0xD957DE7A,0x8549345C,0xDB9888A8,0x84A2FC62,0xDDDC5B3B,0x840777D0, -0xE02323E5,0x8376B422,0xE26CB01B,0x82F0BDE8,0xE4B8CD11,0x8275A0C0,0xE70747C4, -0x82056758,0xE957ECFB,0x81A01B6D,0xEBAA894F,0x8145C5C7,0xEDFEE92B,0x80F66E3C, -0xF054D8D5,0x80B21BAF,0xF2AC246E,0x8078D40D,0xF50497FB,0x804A9C4D,0xF75DFF66, -0x80277872,0xF9B82684,0x800F6B88,0xFC12D91A,0x800277A6,0xFE6DE2E0,0x80009DEA, -0x00C90F88,0x8009DE7E,0x03242ABF,0x801E3895,0x057F0035,0x803DAA6A,0x07D95B9E, -0x80683143,0x0A3308BD,0x809DC971,0x0C8BD35E,0x80DE6E4C,0x0EE38766,0x812A1A3A, -0x1139F0CF,0x8180C6A9,0x138EDBB1,0x81E26C16,0x15E21445,0x824F0208,0x183366E9, -0x82C67F14,0x1A82A026,0x8348D8DC,0x1CCF8CB3,0x83D60412,0x1F19F97B,0x846DF477, -0x2161B3A0,0x85109CDD,0x23A6887F,0x85BDEF28,0x25E845B6,0x8675DC4F,0x2826B928, -0x8738545E,0x2A61B101,0x88054677,0x2C98FBBA,0x88DCA0D3,0x2ECC681E,0x89BE50C3, -0x30FBC54D,0x8AAA42B4,0x3326E2C3,0x8BA0622F,0x354D9057,0x8CA099DA,0x376F9E46, -0x8DAAD37B,0x398CDD32,0x8EBEF7FB,0x3BA51E29,0x8FDCEF66,0x3DB832A6,0x9104A0EE, -0x3FC5EC98,0x9235F2EC,0x41CE1E65,0x9370CAE4,0x43D09AED,0x94B50D87,0x45CD358F, -0x96029EB6,0x47C3C22F,0x9759617F,0x49B41533,0x98B93828,0x4B9E0390,0x9A22042D, -0x4D8162C4,0x9B93A641,0x4F5E08E3,0x9D0DFE54,0x5133CC94,0x9E90EB94,0x53028518, -0xA01C4C73,0x54CA0A4B,0xA1AFFEA3,0x568A34A9,0xA34BDF20,0x5842DD54,0xA4EFCA31, -0x59F3DE12,0xA69B9B68,0x5B9D1154,0xA84F2DAA,0x5D3E5237,0xAA0A5B2E,0x5ED77C8A, -0xABCCFD83,0x60686CCF,0xAD96ED92,0x61F1003F,0xAF6803A2,0x637114CC,0xB140175B, -0x64E88926,0xB31EFFCC,0x66573CBB,0xB5049368,0x67BD0FBD,0xB6F0A812,0x6919E320, -0xB8E31319,0x6A6D98A4,0xBADBA943,0x6BB812D1,0xBCDA3ECB,0x6CF934FC,0xBEDEA765, -0x6E30E34A,0xC0E8B648,0x6F5F02B2,0xC2F83E2A,0x708378FF,0xC50D1149,0x719E2CD2, -0xC727016D,0x72AF05A7,0xC945DFEC,0x73B5EBD1,0xCB697DB0,0x74B2C884,0xCD91AB39, -0x75A585CF,0xCFBE389F,0x768E0EA6,0xD1EEF59E,0x776C4EDB,0xD423B191,0x78403329, -0xD65C3B7B,0x7909A92D,0xD898620C,0x79C89F6E,0xDAD7F3A2,0x7A7D055B,0xDD1ABE51, -0x7B26CB4F,0xDF608FE4,0x7BC5E290,0xE1A935E2,0x7C5A3D50,0xE3F47D96,0x7CE3CEB2, -0xE642340D,0x7D628AC6,0xE8922622,0x7DD6668F,0xEAE4207A,0x7E3F57FF,0xED37EF91, -0x7E9D55FC,0xEF8D5FB8,0x7EF05860,0xF1E43D1C,0x7F3857F6,0xF43C53CB,0x7F754E80, -0xF6956FB7,0x7FA736B4,0xF8EF5CBB,0x7FCE0C3E,0xFB49E6A3,0x7FE9CBC0,0xFDA4D929, -0x7FFA72D1,0x7FFFFFFF,0x00000000,0x7FA736B4,0xF6956FB7,0x7E9D55FC,0xED37EF91, -0x7CE3CEB2,0xE3F47D96,0x7A7D055B,0xDAD7F3A2,0x776C4EDB,0xD1EEF59E,0x73B5EBD1, -0xC945DFEC,0x6F5F02B2,0xC0E8B648,0x6A6D98A4,0xB8E31319,0x64E88926,0xB140175B, -0x5ED77C8A,0xAA0A5B2E,0x5842DD54,0xA34BDF20,0x5133CC94,0x9D0DFE54,0x49B41533, -0x9759617F,0x41CE1E65,0x9235F2EC,0x398CDD32,0x8DAAD37B,0x30FBC54D,0x89BE50C3, -0x2826B928,0x8675DC4F,0x1F19F97B,0x83D60412,0x15E21445,0x81E26C16,0x0C8BD35E, -0x809DC971,0x03242ABF,0x8009DE7E,0xF9B82684,0x80277872,0xF054D8D5,0x80F66E3C, -0xE70747C4,0x8275A0C0,0xDDDC5B3B,0x84A2FC62,0xD4E0CB15,0x877B7BEC,0xCC210D79, -0x8AFB2CBB,0xC3A94590,0x8F1D343A,0xBB8532B0,0x93DBD6A0,0xB3C0200C,0x99307EE0, -0xAC64D510,0x9F13C7D0,0xA57D8666,0xA57D8666,0x9F13C7D0,0xAC64D510,0x99307EE0, -0xB3C0200C,0x93DBD6A0,0xBB8532B0,0x8F1D343A,0xC3A94590,0x8AFB2CBB,0xCC210D79, -0x877B7BEC,0xD4E0CB15,0x84A2FC62,0xDDDC5B3B,0x8275A0C0,0xE70747C4,0x80F66E3C, -0xF054D8D5,0x80277872,0xF9B82684,0x8009DE7E,0x03242ABF,0x809DC971,0x0C8BD35E, -0x81E26C16,0x15E21445,0x83D60412,0x1F19F97B,0x8675DC4F,0x2826B928,0x89BE50C3, -0x30FBC54D,0x8DAAD37B,0x398CDD32,0x9235F2EC,0x41CE1E65,0x9759617F,0x49B41533, -0x9D0DFE54,0x5133CC94,0xA34BDF20,0x5842DD54,0xAA0A5B2E,0x5ED77C8A,0xB140175B, -0x64E88926,0xB8E31319,0x6A6D98A4,0xC0E8B648,0x6F5F02B2,0xC945DFEC,0x73B5EBD1, -0xD1EEF59E,0x776C4EDB,0xDAD7F3A2,0x7A7D055B,0xE3F47D96,0x7CE3CEB2,0xED37EF91, -0x7E9D55FC,0xF6956FB7,0x7FA736B4,0x7FFFFFFF,0x00000000,0x7A7D055B,0xDAD7F3A2, -0x6A6D98A4,0xB8E31319,0x5133CC94,0x9D0DFE54,0x30FBC54D,0x89BE50C3,0x0C8BD35E, -0x809DC971,0xE70747C4,0x8275A0C0,0xC3A94590,0x8F1D343A,0xA57D8666,0xA57D8666, -0x8F1D343A,0xC3A94590,0x8275A0C0,0xE70747C4,0x809DC971,0x0C8BD35E,0x89BE50C3, -0x30FBC54D,0x9D0DFE54,0x5133CC94,0xB8E31319,0x6A6D98A4,0xDAD7F3A2,0x7A7D055B, -0x7FFFFFFF,0x00000000,0x30FBC54D,0x89BE50C3,0xA57D8666,0xA57D8666,0x89BE50C3, -0x30FBC54D,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q31_8192) - -uint32_t rearranged_twiddle_tab_stride1_arr_4096_q31[6]={ -0,2048,2560,2688,2720,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_4096_q31[6]={ -0,2048,2560,2688,2720,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_4096_q31[6]={ -0,2048,2560,2688,2720,0,}; - -q31_t rearranged_twiddle_stride1_4096_q31[2728]={ -0x7FFFFFFF,0x00000000,0x7FFFF621,0xFFCDBC0B,0x7FFFD886,0xFF9B781D,0x7FFFA72C, -0xFF69343F,0x7FFF6216,0xFF36F078,0x7FFF0943,0xFF04ACD0,0x7FFE9CB2,0xFED2694F, -0x7FFE1C65,0xFEA025FD,0x7FFD885A,0xFE6DE2E0,0x7FFCE093,0xFE3BA002,0x7FFC250F, -0xFE095D69,0x7FFB55CE,0xFDD71B1E,0x7FFA72D1,0xFDA4D929,0x7FF97C18,0xFD729790, -0x7FF871A2,0xFD40565C,0x7FF75370,0xFD0E1594,0x7FF62182,0xFCDBD541,0x7FF4DBD9, -0xFCA9956A,0x7FF38274,0xFC775616,0x7FF21553,0xFC45174E,0x7FF09478,0xFC12D91A, -0x7FEEFFE1,0xFBE09B80,0x7FED5791,0xFBAE5E89,0x7FEB9B85,0xFB7C223D,0x7FE9CBC0, -0xFB49E6A3,0x7FE7E841,0xFB17ABC2,0x7FE5F108,0xFAE571A4,0x7FE3E616,0xFAB3384F, -0x7FE1C76B,0xFA80FFCB,0x7FDF9508,0xFA4EC821,0x7FDD4EEC,0xFA1C9157,0x7FDAF519, -0xF9EA5B75,0x7FD8878E,0xF9B82684,0x7FD6064C,0xF985F28A,0x7FD37153,0xF953BF91, -0x7FD0C8A3,0xF9218D9E,0x7FCE0C3E,0xF8EF5CBB,0x7FCB3C23,0xF8BD2CEF,0x7FC85854, -0xF88AFE42,0x7FC560CF,0xF858D0BB,0x7FC25596,0xF826A462,0x7FBF36AA,0xF7F4793E, -0x7FBC040A,0xF7C24F59,0x7FB8BDB8,0xF79026B9,0x7FB563B3,0xF75DFF66,0x7FB1F5FC, -0xF72BD967,0x7FAE7495,0xF6F9B4C6,0x7FAADF7C,0xF6C79188,0x7FA736B4,0xF6956FB7, -0x7FA37A3C,0xF6634F59,0x7F9FAA15,0xF6313077,0x7F9BC640,0xF5FF1318,0x7F97CEBD, -0xF5CCF743,0x7F93C38C,0xF59ADD02,0x7F8FA4B0,0xF568C45B,0x7F8B7227,0xF536AD56, -0x7F872BF3,0xF50497FB,0x7F82D214,0xF4D28451,0x7F7E648C,0xF4A07261,0x7F79E35A, -0xF46E6231,0x7F754E80,0xF43C53CB,0x7F70A5FE,0xF40A4735,0x7F6BE9D4,0xF3D83C77, -0x7F671A05,0xF3A63398,0x7F62368F,0xF3742CA2,0x7F5D3F75,0xF342279B,0x7F5834B7, -0xF310248A,0x7F531655,0xF2DE2379,0x7F4DE451,0xF2AC246E,0x7F489EAA,0xF27A2771, -0x7F434563,0xF2482C8A,0x7F3DD87C,0xF21633C0,0x7F3857F6,0xF1E43D1C,0x7F32C3D1, -0xF1B248A5,0x7F2D1C0E,0xF1805662,0x7F2760AF,0xF14E665C,0x7F2191B4,0xF11C789A, -0x7F1BAF1E,0xF0EA8D24,0x7F15B8EE,0xF0B8A401,0x7F0FAF25,0xF086BD39,0x7F0991C4, -0xF054D8D5,0x7F0360CB,0xF022F6DA,0x7EFD1C3C,0xEFF11753,0x7EF6C418,0xEFBF3A45, -0x7EF05860,0xEF8D5FB8,0x7EE9D914,0xEF5B87B5,0x7EE34636,0xEF29B243,0x7EDC9FC6, -0xEEF7DF6A,0x7ED5E5C6,0xEEC60F31,0x7ECF1837,0xEE9441A0,0x7EC8371A,0xEE6276BF, -0x7EC14270,0xEE30AE96,0x7EBA3A39,0xEDFEE92B,0x7EB31E78,0xEDCD2687,0x7EABEF2C, -0xED9B66B2,0x7EA4AC58,0xED69A9B3,0x7E9D55FC,0xED37EF91,0x7E95EC1A,0xED063856, -0x7E8E6EB2,0xECD48407,0x7E86DDC6,0xECA2D2AD,0x7E7F3957,0xEC71244F,0x7E778166, -0xEC3F78F6,0x7E6FB5F4,0xEC0DD0A8,0x7E67D703,0xEBDC2B6E,0x7E5FE493,0xEBAA894F, -0x7E57DEA7,0xEB78EA52,0x7E4FC53E,0xEB474E81,0x7E47985B,0xEB15B5E1,0x7E3F57FF, -0xEAE4207A,0x7E37042A,0xEAB28E56,0x7E2E9CDF,0xEA80FF7A,0x7E26221F,0xEA4F73EE, -0x7E1D93EA,0xEA1DEBBB,0x7E14F242,0xE9EC66E8,0x7E0C3D29,0xE9BAE57D,0x7E0374A0, -0xE9896781,0x7DFA98A8,0xE957ECFB,0x7DF1A942,0xE92675F4,0x7DE8A670,0xE8F50273, -0x7DDF9034,0xE8C39280,0x7DD6668F,0xE8922622,0x7DCD2981,0xE860BD61,0x7DC3D90D, -0xE82F5844,0x7DBA7534,0xE7FDF6D4,0x7DB0FDF8,0xE7CC9917,0x7DA77359,0xE79B3F16, -0x7D9DD55A,0xE769E8D8,0x7D9423FC,0xE7389665,0x7D8A5F40,0xE70747C4,0x7D808728, -0xE6D5FCFC,0x7D769BB5,0xE6A4B616,0x7D6C9CE9,0xE6737319,0x7D628AC6,0xE642340D, -0x7D58654D,0xE610F8F9,0x7D4E2C7F,0xE5DFC1E5,0x7D43E05E,0xE5AE8ED8,0x7D3980EC, -0xE57D5FDA,0x7D2F0E2B,0xE54C34F3,0x7D24881B,0xE51B0E2A,0x7D19EEBF,0xE4E9EB87, -0x7D0F4218,0xE4B8CD11,0x7D048228,0xE487B2D0,0x7CF9AEF0,0xE4569CCB,0x7CEEC873, -0xE4258B0A,0x7CE3CEB2,0xE3F47D96,0x7CD8C1AE,0xE3C37474,0x7CCDA169,0xE3926FAD, -0x7CC26DE5,0xE3616F48,0x7CB72724,0xE330734D,0x7CABCD28,0xE2FF7BC3,0x7CA05FF1, -0xE2CE88B3,0x7C94DF83,0xE29D9A23,0x7C894BDE,0xE26CB01B,0x7C7DA505,0xE23BCAA2, -0x7C71EAF9,0xE20AE9C1,0x7C661DBC,0xE1DA0D7E,0x7C5A3D50,0xE1A935E2,0x7C4E49B7, -0xE17862F3,0x7C4242F2,0xE14794BA,0x7C362904,0xE116CB3D,0x7C29FBEE,0xE0E60685, -0x7C1DBBB3,0xE0B54698,0x7C116853,0xE0848B7F,0x7C0501D2,0xE053D541,0x7BF88830, -0xE02323E5,0x7BEBFB70,0xDFF27773,0x7BDF5B94,0xDFC1CFF3,0x7BD2A89E,0xDF912D6B, -0x7BC5E290,0xDF608FE4,0x7BB9096B,0xDF2FF764,0x7BAC1D31,0xDEFF63F4,0x7B9F1DE6, -0xDECED59B,0x7B920B89,0xDE9E4C60,0x7B84E61F,0xDE6DC84B,0x7B77ADA8,0xDE3D4964, -0x7B6A6227,0xDE0CCFB1,0x7B5D039E,0xDDDC5B3B,0x7B4F920E,0xDDABEC08,0x7B420D7A, -0xDD7B8220,0x7B3475E5,0xDD4B1D8C,0x7B26CB4F,0xDD1ABE51,0x7B190DBC,0xDCEA6478, -0x7B0B3D2C,0xDCBA1008,0x7AFD59A4,0xDC89C109,0x7AEF6323,0xDC597781,0x7AE159AE, -0xDC293379,0x7AD33D45,0xDBF8F4F8,0x7AC50DEC,0xDBC8BC06,0x7AB6CBA4,0xDB9888A8, -0x7AA8766F,0xDB685AE9,0x7A9A0E50,0xDB3832CD,0x7A8B9348,0xDB08105E,0x7A7D055B, -0xDAD7F3A2,0x7A6E648A,0xDAA7DCA1,0x7A5FB0D8,0xDA77CB63,0x7A50EA47,0xDA47BFEE, -0x7A4210D8,0xDA17BA4A,0x7A332490,0xD9E7BA7F,0x7A24256F,0xD9B7C094,0x7A151378, -0xD987CC90,0x7A05EEAD,0xD957DE7A,0x79F6B711,0xD927F65B,0x79E76CA7,0xD8F81439, -0x79D80F6F,0xD8C8381D,0x79C89F6E,0xD898620C,0x79B91CA4,0xD868920F,0x79A98715, -0xD838C82D,0x7999DEC4,0xD809046E,0x798A23B1,0xD7D946D8,0x797A55E0,0xD7A98F73, -0x796A7554,0xD779DE47,0x795A820E,0xD74A335B,0x794A7C12,0xD71A8EB5,0x793A6361, -0xD6EAF05F,0x792A37FE,0xD6BB585E,0x7919F9EC,0xD68BC6BA,0x7909A92D,0xD65C3B7B, -0x78F945C3,0xD62CB6A8,0x78E8CFB2,0xD5FD3848,0x78D846FB,0xD5CDC062,0x78C7ABA2, -0xD59E4EFF,0x78B6FDA8,0xD56EE424,0x78A63D11,0xD53F7FDA,0x789569DF,0xD5102228, -0x78848414,0xD4E0CB15,0x78738BB3,0xD4B17AA8,0x786280BF,0xD48230E9,0x7851633B, -0xD452EDDF,0x78403329,0xD423B191,0x782EF08B,0xD3F47C06,0x781D9B65,0xD3C54D47, -0x780C33B8,0xD396255A,0x77FAB989,0xD3670446,0x77E92CD9,0xD337EA12,0x77D78DAA, -0xD308D6C7,0x77C5DC01,0xD2D9CA6A,0x77B417DF,0xD2AAC504,0x77A24148,0xD27BC69C, -0x7790583E,0xD24CCF39,0x777E5CC3,0xD21DDEE2,0x776C4EDB,0xD1EEF59E,0x775A2E89, -0xD1C01375,0x7747FBCE,0xD191386E,0x7735B6AF,0xD1626490,0x77235F2D,0xD13397E2, -0x7710F54C,0xD104D26B,0x76FE790E,0xD0D61434,0x76EBEA77,0xD0A75D42,0x76D94989, -0xD078AD9E,0x76C69647,0xD04A054E,0x76B3D0B4,0xD01B6459,0x76A0F8D2,0xCFECCAC7, -0x768E0EA6,0xCFBE389F,0x767B1231,0xCF8FADE9,0x76680376,0xCF612AAA,0x7654E279, -0xCF32AEEB,0x7641AF3D,0xCF043AB3,0x762E69C4,0xCED5CE08,0x761B1211,0xCEA768F2, -0x7607A828,0xCE790B79,0x75F42C0B,0xCE4AB5A2,0x75E09DBD,0xCE1C6777,0x75CCFD42, -0xCDEE20FC,0x75B94A9C,0xCDBFE23A,0x75A585CF,0xCD91AB39,0x7591AEDD,0xCD637BFE, -0x757DC5CA,0xCD355491,0x7569CA99,0xCD0734F9,0x7555BD4C,0xCCD91D3D,0x75419DE7, -0xCCAB0D65,0x752D6C6C,0xCC7D0578,0x751928E0,0xCC4F057C,0x7504D345,0xCC210D79, -0x74F06B9E,0xCBF31D75,0x74DBF1EF,0xCBC53579,0x74C7663A,0xCB97558A,0x74B2C884, -0xCB697DB0,0x749E18CD,0xCB3BADF3,0x7489571C,0xCB0DE658,0x74748371,0xCAE026E8, -0x745F9DD1,0xCAB26FA9,0x744AA63F,0xCA84C0A3,0x74359CBD,0xCA5719DB,0x74208150, -0xCA297B5A,0x740B53FB,0xC9FBE527,0x73F614C0,0xC9CE5748,0x73E0C3A3,0xC9A0D1C5, -0x73CB60A8,0xC97354A4,0x73B5EBD1,0xC945DFEC,0x73A06522,0xC91873A5,0x738ACC9E, -0xC8EB0FD6,0x73752249,0xC8BDB485,0x735F6626,0xC89061BA,0x73499838,0xC863177B, -0x7333B883,0xC835D5D0,0x731DC70A,0xC8089CBF,0x7307C3D0,0xC7DB6C50,0x72F1AED9, -0xC7AE4489,0x72DB8828,0xC7812572,0x72C54FC1,0xC7540F11,0x72AF05A7,0xC727016D, -0x7298A9DD,0xC6F9FC8D,0x72823C67,0xC6CD0079,0x726BBD48,0xC6A00D37,0x72552C85, -0xC67322CE,0x723E8A20,0xC6464144,0x7227D61C,0xC61968A2,0x7211107E,0xC5EC98EE, -0x71FA3949,0xC5BFD22E,0x71E35080,0xC593146A,0x71CC5626,0xC5665FA9,0x71B54A41, -0xC539B3F1,0x719E2CD2,0xC50D1149,0x7186FDDE,0xC4E077B8,0x716FBD68,0xC4B3E746, -0x71586B74,0xC4875FF9,0x71410805,0xC45AE1D7,0x7129931F,0xC42E6CE8,0x71120CC5, -0xC4020133,0x70FA74FC,0xC3D59EBE,0x70E2CBC6,0xC3A94590,0x70CB1128,0xC37CF5B0, -0x70B34525,0xC350AF26,0x709B67C0,0xC32471F7,0x708378FF,0xC2F83E2A,0x706B78E3, -0xC2CC13C7,0x70536771,0xC29FF2D4,0x703B44AD,0xC273DB58,0x7023109A,0xC247CD5A, -0x700ACB3C,0xC21BC8E1,0x6FF27497,0xC1EFCDF3,0x6FDA0CAE,0xC1C3DC97,0x6FC19385, -0xC197F4D4,0x6FA90921,0xC16C16B0,0x6F906D84,0xC1404233,0x6F77C0B3,0xC1147764, -0x6F5F02B2,0xC0E8B648,0x6F463383,0xC0BCFEE7,0x6F2D532C,0xC0915148,0x6F1461B0, -0xC065AD70,0x6EFB5F12,0xC03A1368,0x6EE24B57,0xC00E8336,0x6EC92683,0xBFE2FCDF, -0x6EAFF099,0xBFB7806C,0x6E96A99D,0xBF8C0DE3,0x6E7D5193,0xBF60A54A,0x6E63E87F, -0xBF3546A8,0x6E4A6E66,0xBF09F205,0x6E30E34A,0xBEDEA765,0x6E174730,0xBEB366D1, -0x6DFD9A1C,0xBE88304F,0x6DE3DC11,0xBE5D03E6,0x6DCA0D14,0xBE31E19B,0x6DB02D29, -0xBE06C977,0x6D963C54,0xBDDBBB7F,0x6D7C3A98,0xBDB0B7BB,0x6D6227FA,0xBD85BE30, -0x6D48047E,0xBD5ACEE5,0x6D2DD027,0xBD2FE9E2,0x6D138AFB,0xBD050F2C,0x6CF934FC, -0xBCDA3ECB,0x6CDECE2F,0xBCAF78C4,0x6CC45698,0xBC84BD1F,0x6CA9CE3B,0xBC5A0BE2, -0x6C8F351C,0xBC2F6513,0x6C748B3F,0xBC04C8BA,0x6C59D0A9,0xBBDA36DD,0x6C3F055D, -0xBBAFAF82,0x6C242960,0xBB8532B0,0x6C093CB6,0xBB5AC06D,0x6BEE3F62,0xBB3058C0, -0x6BD3316A,0xBB05FBB0,0x6BB812D1,0xBADBA943,0x6B9CE39B,0xBAB16180,0x6B81A3CD, -0xBA87246D,0x6B66536B,0xBA5CF210,0x6B4AF279,0xBA32CA71,0x6B2F80FB,0xBA08AD95, -0x6B13FEF5,0xB9DE9B83,0x6AF86C6C,0xB9B49442,0x6ADCC964,0xB98A97D8,0x6AC115E2, -0xB960A64C,0x6AA551E9,0xB936BFA4,0x6A897D7D,0xB90CE3E6,0x6A6D98A4,0xB8E31319, -0x6A51A361,0xB8B94D44,0x6A359DB9,0xB88F926D,0x6A1987B0,0xB865E299,0x69FD614A, -0xB83C3DD1,0x69E12A8C,0xB812A41A,0x69C4E37A,0xB7E9157A,0x69A88C19,0xB7BF91F8, -0x698C246C,0xB796199B,0x696FAC78,0xB76CAC69,0x69532442,0xB7434A67,0x69368BCE, -0xB719F39E,0x6919E320,0xB6F0A812,0x68FD2A3D,0xB6C767CA,0x68E06129,0xB69E32CD, -0x68C387E9,0xB6750921,0x68A69E81,0xB64BEACD,0x6889A4F6,0xB622D7D6,0x686C9B4B, -0xB5F9D043,0x684F8186,0xB5D0D41A,0x683257AB,0xB5A7E362,0x68151DBE,0xB57EFE22, -0x67F7D3C5,0xB556245E,0x67DA79C3,0xB52D561E,0x67BD0FBD,0xB5049368,0x679F95B7, -0xB4DBDC42,0x67820BB7,0xB4B330B3,0x676471C0,0xB48A90C0,0x6746C7D8,0xB461FC70, -0x67290E02,0xB43973CA,0x670B4444,0xB410F6D3,0x66ED6AA1,0xB3E88592,0x66CF8120, -0xB3C0200C,0x66B187C3,0xB397C649,0x66937E91,0xB36F784F,0x6675658C,0xB3473623, -0x66573CBB,0xB31EFFCC,0x66390422,0xB2F6D550,0x661ABBC5,0xB2CEB6B5,0x65FC63A9, -0xB2A6A402,0x65DDFBD3,0xB27E9D3C,0x65BF8447,0xB256A26A,0x65A0FD0B,0xB22EB392, -0x65826622,0xB206D0BA,0x6563BF92,0xB1DEF9E9,0x6545095F,0xB1B72F23,0x6526438F, -0xB18F7071,0x65076E25,0xB167BDD7,0x64E88926,0xB140175B,0x64C99498,0xB1187D05, -0x64AA907F,0xB0F0EEDA,0x648B7CE0,0xB0C96CE0,0x646C59BF,0xB0A1F71D,0x644D2722, -0xB07A8D97,0x642DE50D,0xB0533055,0x640E9386,0xB02BDF5C,0x63EF3290,0xB0049AB3, -0x63CFC231,0xAFDD625F,0x63B0426D,0xAFB63667,0x6390B34A,0xAF8F16D1,0x637114CC, -0xAF6803A2,0x635166F9,0xAF40FCE1,0x6331A9D4,0xAF1A0293,0x6311DD64,0xAEF314C0, -0x62F201AC,0xAECC336C,0x62D216B3,0xAEA55E9E,0x62B21C7B,0xAE7E965B,0x6292130C, -0xAE57DAAB,0x6271FA69,0xAE312B92,0x6251D298,0xAE0A8916,0x62319B9D,0xADE3F33E, -0x6211557E,0xADBD6A10,0x61F1003F,0xAD96ED92,0x61D09BE5,0xAD707DC8,0x61B02876, -0xAD4A1ABA,0x618FA5F7,0xAD23C46E,0x616F146C,0xACFD7AE8,0x614E73DA,0xACD73E30, -0x612DC447,0xACB10E4B,0x610D05B7,0xAC8AEB3E,0x60EC3830,0xAC64D510,0x60CB5BB7, -0xAC3ECBC7,0x60AA7050,0xAC18CF69,0x60897601,0xABF2DFFB,0x60686CCF,0xABCCFD83, -0x604754BF,0xABA72807,0x60262DD6,0xAB815F8D,0x6004F819,0xAB5BA41A,0x5FE3B38D, -0xAB35F5B5,0x5FC26038,0xAB105464,0x5FA0FE1F,0xAAEAC02C,0x5F7F8D46,0xAAC53912, -0x5F5E0DB3,0xAA9FBF1E,0x5F3C7F6B,0xAA7A5253,0x5F1AE274,0xAA54F2BA,0x5EF936D1, -0xAA2FA056,0x5ED77C8A,0xAA0A5B2E,0x5EB5B3A2,0xA9E52347,0x5E93DC1F,0xA9BFF8A8, -0x5E71F606,0xA99ADB56,0x5E50015D,0xA975CB57,0x5E2DFE29,0xA950C8B0,0x5E0BEC6E, -0xA92BD367,0x5DE9CC33,0xA906EB82,0x5DC79D7C,0xA8E21106,0x5DA5604F,0xA8BD43FA, -0x5D8314B1,0xA8988463,0x5D60BAA7,0xA873D246,0x5D3E5237,0xA84F2DAA,0x5D1BDB65, -0xA82A9693,0x5CF95638,0xA8060D08,0x5CD6C2B5,0xA7E1910F,0x5CB420E0,0xA7BD22AC, -0x5C9170BF,0xA798C1E5,0x5C6EB258,0xA7746EC0,0x5C4BE5B0,0xA7502943,0x5C290ACC, -0xA72BF174,0x5C0621B2,0xA707C757,0x5BE32A67,0xA6E3AAF2,0x5BC024F0,0xA6BF9C4B, -0x5B9D1154,0xA69B9B68,0x5B79EF96,0xA677A84E,0x5B56BFBD,0xA653C303,0x5B3381CE, -0xA62FEB8B,0x5B1035CF,0xA60C21EE,0x5AECDBC5,0xA5E8662F,0x5AC973B5,0xA5C4B855, -0x5AA5FDA5,0xA5A11866,0x5A82799A,0xA57D8666,0x5A5EE79A,0xA55A025B,0x5A3B47AB, -0xA5368C4B,0x5A1799D1,0xA513243B,0x59F3DE12,0xA4EFCA31,0x59D01475,0xA4CC7E32, -0x59AC3CFD,0xA4A94043,0x598857B2,0xA486106A,0x59646498,0xA462EEAC,0x594063B5, -0xA43FDB10,0x591C550E,0xA41CD599,0x58F838A9,0xA3F9DE4E,0x58D40E8C,0xA3D6F534, -0x58AFD6BD,0xA3B41A50,0x588B9140,0xA3914DA8,0x58673E1B,0xA36E8F41,0x5842DD54, -0xA34BDF20,0x581E6EF1,0xA3293D4B,0x57F9F2F8,0xA306A9C8,0x57D5696D,0xA2E4249B, -0x57B0D256,0xA2C1ADC9,0x578C2DBA,0xA29F4559,0x57677B9D,0xA27CEB4F,0x5742BC06, -0xA25A9FB1,0x571DEEFA,0xA2386284,0x56F9147E,0xA21633CD,0x56D42C99,0xA1F41392, -0x56AF3750,0xA1D201D7,0x568A34A9,0xA1AFFEA3,0x566524AA,0xA18E09FA,0x56400758, -0xA16C23E1,0x561ADCB9,0xA14A4C5E,0x55F5A4D2,0xA1288376,0x55D05FAA,0xA106C92F, -0x55AB0D46,0xA0E51D8C,0x5585ADAD,0xA0C38095,0x556040E2,0xA0A1F24D,0x553AC6EE, -0xA08072BA,0x55153FD4,0xA05F01E1,0x54EFAB9C,0xA03D9FC8,0x54CA0A4B,0xA01C4C73, -0x54A45BE6,0x9FFB07E7,0x547EA073,0x9FD9D22A,0x5458D7F9,0x9FB8AB41,0x5433027D, -0x9F979331,0x540D2005,0x9F7689FF,0x53E73097,0x9F558FB0,0x53C13439,0x9F34A449, -0x539B2AF0,0x9F13C7D0,0x537514C2,0x9EF2FA49,0x534EF1B5,0x9ED23BB9,0x5328C1D0, -0x9EB18C26,0x53028518,0x9E90EB94,0x52DC3B92,0x9E705A09,0x52B5E546,0x9E4FD78A, -0x528F8238,0x9E2F641B,0x5269126E,0x9E0EFFC1,0x524295F0,0x9DEEAA82,0x521C0CC2, -0x9DCE6463,0x51F576EA,0x9DAE2D68,0x51CED46E,0x9D8E0597,0x51A82555,0x9D6DECF4, -0x518169A5,0x9D4DE385,0x515AA162,0x9D2DE94D,0x5133CC94,0x9D0DFE54,0x510CEB40, -0x9CEE229C,0x50E5FD6D,0x9CCE562C,0x50BF031F,0x9CAE9907,0x5097FC5E,0x9C8EEB34, -0x5070E92F,0x9C6F4CB6,0x5049C999,0x9C4FBD93,0x50229DA1,0x9C303DCF,0x4FFB654D, -0x9C10CD70,0x4FD420A4,0x9BF16C7A,0x4FACCFAB,0x9BD21AF3,0x4F857269,0x9BB2D8DE, -0x4F5E08E3,0x9B93A641,0x4F369320,0x9B748320,0x4F0F1126,0x9B556F81,0x4EE782FB, -0x9B366B68,0x4EBFE8A5,0x9B1776DA,0x4E984229,0x9AF891DB,0x4E708F8F,0x9AD9BC71, -0x4E48D0DD,0x9ABAF6A1,0x4E210617,0x9A9C406E,0x4DF92F46,0x9A7D99DE,0x4DD14C6E, -0x9A5F02F5,0x4DA95D96,0x9A407BB9,0x4D8162C4,0x9A22042D,0x4D595BFE,0x9A039C57, -0x4D31494B,0x99E5443B,0x4D092AB0,0x99C6FBDE,0x4CE10034,0x99A8C345,0x4CB8C9DD, -0x998A9A74,0x4C9087B1,0x996C816F,0x4C6839B7,0x994E783D,0x4C3FDFF4,0x99307EE0, -0x4C177A6E,0x9912955F,0x4BEF092D,0x98F4BBBC,0x4BC68C36,0x98D6F1FE,0x4B9E0390, -0x98B93828,0x4B756F40,0x989B8E40,0x4B4CCF4D,0x987DF449,0x4B2423BE,0x98606A49, -0x4AFB6C98,0x9842F043,0x4AD2A9E2,0x9825863D,0x4AA9DBA2,0x98082C3B,0x4A8101DE, -0x97EAE242,0x4A581C9E,0x97CDA855,0x4A2F2BE6,0x97B07E7A,0x4A062FBD,0x979364B5, -0x49DD282A,0x97765B0A,0x49B41533,0x9759617F,0x498AF6DF,0x973C7817,0x4961CD33, -0x971F9ED7,0x49389836,0x9702D5C3,0x490F57EE,0x96E61CE0,0x48E60C62,0x96C97432, -0x48BCB599,0x96ACDBBE,0x48935397,0x96905388,0x4869E665,0x9673DB94,0x48406E08, -0x965773E7,0x4816EA86,0x963B1C86,0x47ED5BE6,0x961ED574,0x47C3C22F,0x96029EB6, -0x479A1D67,0x95E67850,0x47706D93,0x95CA6247,0x4746B2BC,0x95AE5C9F,0x471CECE7, -0x9592675C,0x46F31C1A,0x95768283,0x46C9405C,0x955AAE17,0x469F59B4,0x953EEA1E, -0x46756828,0x9523369C,0x464B6BBE,0x95079394,0x4621647D,0x94EC010B,0x45F7526B, -0x94D07F05,0x45CD358F,0x94B50D87,0x45A30DF0,0x9499AC95,0x4578DB93,0x947E5C33, -0x454E9E80,0x94631C65,0x452456BD,0x9447ED2F,0x44FA0450,0x942CCE96,0x44CFA740, -0x9411C09E,0x44A53F93,0x93F6C34A,0x447ACD50,0x93DBD6A0,0x4450507E,0x93C0FAA3, -0x4425C923,0x93A62F57,0x43FB3746,0x938B74C1,0x43D09AED,0x9370CAE4,0x43A5F41E, -0x935631C5,0x437B42E1,0x933BA968,0x4350873C,0x932131D1,0x4325C135,0x9306CB04, -0x42FAF0D4,0x92EC7505,0x42D0161E,0x92D22FD9,0x42A5311B,0x92B7FB82,0x427A41D0, -0x929DD806,0x424F4845,0x9283C568,0x42244481,0x9269C3AC,0x41F93689,0x924FD2D7, -0x41CE1E65,0x9235F2EC,0x41A2FC1A,0x921C23EF,0x4177CFB1,0x920265E4,0x414C992F, -0x91E8B8D0,0x4121589B,0x91CF1CB6,0x40F60DFB,0x91B5919A,0x40CAB958,0x919C1781, -0x409F5AB6,0x9182AE6D,0x4073F21D,0x91695663,0x40487F94,0x91500F67,0x401D0321, -0x9136D97D,0x3FF17CCA,0x911DB4A9,0x3FC5EC98,0x9104A0EE,0x3F9A5290,0x90EB9E50, -0x3F6EAEB8,0x90D2ACD4,0x3F430119,0x90B9CC7D,0x3F1749B8,0x90A0FD4E,0x3EEB889C, -0x90883F4D,0x3EBFBDCD,0x906F927C,0x3E93E950,0x9056F6DF,0x3E680B2C,0x903E6C7B, -0x3E3C2369,0x9025F352,0x3E10320D,0x900D8B69,0x3DE4371F,0x8FF534C4,0x3DB832A6, -0x8FDCEF66,0x3D8C24A8,0x8FC4BB53,0x3D600D2C,0x8FAC988F,0x3D33EC39,0x8F94871D, -0x3D07C1D6,0x8F7C8701,0x3CDB8E09,0x8F649840,0x3CAF50DA,0x8F4CBADB,0x3C830A50, -0x8F34EED8,0x3C56BA70,0x8F1D343A,0x3C2A6142,0x8F058B04,0x3BFDFECD,0x8EEDF33B, -0x3BD19318,0x8ED66CE1,0x3BA51E29,0x8EBEF7FB,0x3B78A007,0x8EA7948C,0x3B4C18BA, -0x8E904298,0x3B1F8848,0x8E790222,0x3AF2EEB7,0x8E61D32E,0x3AC64C0F,0x8E4AB5BF, -0x3A99A057,0x8E33A9DA,0x3A6CEB96,0x8E1CAF80,0x3A402DD2,0x8E05C6B7,0x3A136712, -0x8DEEEF82,0x39E6975E,0x8DD829E4,0x39B9BEBC,0x8DC175E0,0x398CDD32,0x8DAAD37B, -0x395FF2C9,0x8D9442B8,0x3932FF87,0x8D7DC399,0x39060373,0x8D675623,0x38D8FE93, -0x8D50FA59,0x38ABF0EF,0x8D3AB03F,0x387EDA8E,0x8D2477D8,0x3851BB77,0x8D0E5127, -0x382493B0,0x8CF83C30,0x37F76341,0x8CE238F6,0x37CA2A30,0x8CCC477D,0x379CE885, -0x8CB667C8,0x376F9E46,0x8CA099DA,0x37424B7B,0x8C8ADDB7,0x3714F02A,0x8C753362, -0x36E78C5B,0x8C5F9ADE,0x36BA2014,0x8C4A142F,0x368CAB5C,0x8C349F58,0x365F2E3B, -0x8C1F3C5D,0x3631A8B8,0x8C09EB40,0x36041AD9,0x8BF4AC05,0x35D684A6,0x8BDF7EB0, -0x35A8E625,0x8BCA6343,0x357B3F5D,0x8BB559C1,0x354D9057,0x8BA0622F,0x351FD918, -0x8B8B7C8F,0x34F219A8,0x8B76A8E4,0x34C4520D,0x8B61E733,0x34968250,0x8B4D377C, -0x3468AA76,0x8B3899C6,0x343ACA87,0x8B240E11,0x340CE28B,0x8B0F9462,0x33DEF287, -0x8AFB2CBB,0x33B0FA84,0x8AE6D720,0x3382FA88,0x8AD29394,0x3354F29B,0x8ABE6219, -0x3326E2C3,0x8AAA42B4,0x32F8CB07,0x8A963567,0x32CAAB6F,0x8A823A36,0x329C8402, -0x8A6E5123,0x326E54C7,0x8A5A7A31,0x32401DC6,0x8A46B564,0x3211DF04,0x8A3302BE, -0x31E39889,0x8A1F6243,0x31B54A5E,0x8A0BD3F5,0x3186F487,0x89F857D8,0x3158970E, -0x89E4EDEF,0x312A31F8,0x89D1963C,0x30FBC54D,0x89BE50C3,0x30CD5115,0x89AB1D87, -0x309ED556,0x8997FC8A,0x30705217,0x8984EDCF,0x3041C761,0x8971F15A,0x30133539, -0x895F072E,0x2FE49BA7,0x894C2F4C,0x2FB5FAB2,0x893969B9,0x2F875262,0x8926B677, -0x2F58A2BE,0x89141589,0x2F29EBCC,0x890186F2,0x2EFB2D95,0x88EF0AB4,0x2ECC681E, -0x88DCA0D3,0x2E9D9B70,0x88CA4951,0x2E6EC792,0x88B80432,0x2E3FEC8B,0x88A5D177, -0x2E110A62,0x8893B125,0x2DE2211E,0x8881A33D,0x2DB330C7,0x886FA7C2,0x2D843964, -0x885DBEB8,0x2D553AFC,0x884BE821,0x2D263596,0x883A23FF,0x2CF72939,0x88287256, -0x2CC815EE,0x8816D327,0x2C98FBBA,0x88054677,0x2C69DAA6,0x87F3CC48,0x2C3AB2B9, -0x87E2649B,0x2C0B83FA,0x87D10F75,0x2BDC4E6F,0x87BFCCD7,0x2BAD1221,0x87AE9CC5, -0x2B7DCF17,0x879D7F41,0x2B4E8558,0x878C744D,0x2B1F34EB,0x877B7BEC,0x2AEFDDD8, -0x876A9621,0x2AC08026,0x8759C2EF,0x2A911BDC,0x87490258,0x2A61B101,0x8738545E, -0x2A323F9E,0x8727B905,0x2A02C7B8,0x8717304E,0x29D34958,0x8706BA3D,0x29A3C485, -0x86F656D3,0x29743946,0x86E60614,0x2944A7A2,0x86D5C802,0x29150FA1,0x86C59C9F, -0x28E5714B,0x86B583EE,0x28B5CCA5,0x86A57DF2,0x288621B9,0x86958AAC,0x2856708D, -0x8685AA20,0x2826B928,0x8675DC4F,0x27F6FB92,0x8666213C,0x27C737D3,0x865678EB, -0x27976DF1,0x8646E35C,0x27679DF4,0x86376092,0x2737C7E3,0x8627F091,0x2707EBC7, -0x86189359,0x26D809A5,0x860948EF,0x26A82186,0x85FA1153,0x26783370,0x85EAEC88, -0x26483F6C,0x85DBDA91,0x26184581,0x85CCDB70,0x25E845B6,0x85BDEF28,0x25B84012, -0x85AF15B9,0x2588349D,0x85A04F28,0x2558235F,0x85919B76,0x25280C5E,0x8582FAA5, -0x24F7EFA2,0x85746CB8,0x24C7CD33,0x8565F1B0,0x2497A517,0x85578991,0x24677758, -0x8549345C,0x243743FA,0x853AF214,0x24070B08,0x852CC2BB,0x23D6CC87,0x851EA652, -0x23A6887F,0x85109CDD,0x23763EF7,0x8502A65C,0x2345EFF8,0x84F4C2D4,0x23159B88, -0x84E6F244,0x22E541AF,0x84D934B1,0x22B4E274,0x84CB8A1B,0x22847DE0,0x84BDF286, -0x225413F8,0x84B06DF2,0x2223A4C5,0x84A2FC62,0x21F3304F,0x84959DD9,0x21C2B69C, -0x84885258,0x219237B5,0x847B19E1,0x2161B3A0,0x846DF477,0x21312A65,0x8460E21A, -0x21009C0C,0x8453E2CF,0x20D0089C,0x8446F695,0x209F701C,0x843A1D70,0x206ED295, -0x842D5762,0x203E300D,0x8420A46C,0x200D888D,0x84140490,0x1FDCDC1B,0x840777D0, -0x1FAC2ABF,0x83FAFE2E,0x1F7B7481,0x83EE97AD,0x1F4AB968,0x83E2444D,0x1F19F97B, -0x83D60412,0x1EE934C3,0x83C9D6FC,0x1EB86B46,0x83BDBD0E,0x1E879D0D,0x83B1B649, -0x1E56CA1E,0x83A5C2B0,0x1E25F282,0x8399E244,0x1DF5163F,0x838E1507,0x1DC4355E, -0x83825AFB,0x1D934FE5,0x8376B422,0x1D6265DD,0x836B207D,0x1D31774D,0x835FA00F, -0x1D00843D,0x835432D8,0x1CCF8CB3,0x8348D8DC,0x1C9E90B8,0x833D921B,0x1C6D9053, -0x83325E97,0x1C3C8B8C,0x83273E52,0x1C0B826A,0x831C314E,0x1BDA74F6,0x8311378D, -0x1BA96335,0x83065110,0x1B784D30,0x82FB7DD8,0x1B4732EF,0x82F0BDE8,0x1B161479, -0x82E61141,0x1AE4F1D6,0x82DB77E5,0x1AB3CB0D,0x82D0F1D5,0x1A82A026,0x82C67F14, -0x1A517128,0x82BC1FA2,0x1A203E1B,0x82B1D381,0x19EF0707,0x82A79AB3,0x19BDCBF3, -0x829D753A,0x198C8CE7,0x82936317,0x195B49EA,0x8289644B,0x192A0304,0x827F78D8, -0x18F8B83C,0x8275A0C0,0x18C7699B,0x826BDC04,0x18961728,0x82622AA6,0x1864C0EA, -0x82588CA7,0x183366E9,0x824F0208,0x1802092C,0x82458ACC,0x17D0A7BC,0x823C26F3, -0x179F429F,0x8232D67F,0x176DD9DE,0x82299971,0x173C6D80,0x82206FCC,0x170AFD8D, -0x82175990,0x16D98A0C,0x820E56BE,0x16A81305,0x82056758,0x1676987F,0x81FC8B60, -0x16451A83,0x81F3C2D7,0x16139918,0x81EB0DBE,0x15E21445,0x81E26C16,0x15B08C12, -0x81D9DDE1,0x157F0086,0x81D16321,0x154D71AA,0x81C8FBD6,0x151BDF86,0x81C0A801, -0x14EA4A1F,0x81B867A5,0x14B8B17F,0x81B03AC2,0x148715AE,0x81A82159,0x145576B1, -0x81A01B6D,0x1423D492,0x819828FD,0x13F22F58,0x81904A0C,0x13C0870A,0x81887E9A, -0x138EDBB1,0x8180C6A9,0x135D2D53,0x8179223A,0x132B7BF9,0x8171914E,0x12F9C7AA, -0x816A13E6,0x12C8106F,0x8162AA04,0x1296564D,0x815B53A8,0x1264994E,0x815410D4, -0x1232D979,0x814CE188,0x120116D5,0x8145C5C7,0x11CF516A,0x813EBD90,0x119D8941, -0x8137C8E6,0x116BBE60,0x8130E7C9,0x1139F0CF,0x812A1A3A,0x11082096,0x8123603A, -0x10D64DBD,0x811CB9CA,0x10A4784B,0x811626EC,0x1072A048,0x810FA7A0,0x1040C5BB, -0x81093BE8,0x100EE8AD,0x8102E3C4,0x0FDD0926,0x80FC9F35,0x0FAB272B,0x80F66E3C, -0x0F7942C7,0x80F050DB,0x0F475BFF,0x80EA4712,0x0F1572DC,0x80E450E2,0x0EE38766, -0x80DE6E4C,0x0EB199A4,0x80D89F51,0x0E7FA99E,0x80D2E3F2,0x0E4DB75B,0x80CD3C2F, -0x0E1BC2E4,0x80C7A80A,0x0DE9CC40,0x80C22784,0x0DB7D376,0x80BCBA9D,0x0D85D88F, -0x80B76156,0x0D53DB92,0x80B21BAF,0x0D21DC87,0x80ACE9AB,0x0CEFDB76,0x80A7CB49, -0x0CBDD865,0x80A2C08B,0x0C8BD35E,0x809DC971,0x0C59CC68,0x8098E5FB,0x0C27C389, -0x8094162C,0x0BF5B8CB,0x808F5A02,0x0BC3AC35,0x808AB180,0x0B919DCF,0x80861CA6, -0x0B5F8D9F,0x80819B74,0x0B2D7BAF,0x807D2DEC,0x0AFB6805,0x8078D40D,0x0AC952AA, -0x80748DD9,0x0A973BA5,0x80705B50,0x0A6522FE,0x806C3C74,0x0A3308BD,0x80683143, -0x0A00ECE8,0x806439C0,0x09CECF89,0x806055EB,0x099CB0A7,0x805C85C4,0x096A9049, -0x8058C94C,0x09386E78,0x80552084,0x09064B3A,0x80518B6B,0x08D42699,0x804E0A04, -0x08A2009A,0x804A9C4D,0x086FD947,0x80474248,0x083DB0A7,0x8043FBF6,0x080B86C2, -0x8040C956,0x07D95B9E,0x803DAA6A,0x07A72F45,0x803A9F31,0x077501BE,0x8037A7AC, -0x0742D311,0x8034C3DD,0x0710A345,0x8031F3C2,0x06DE7262,0x802F375D,0x06AC406F, -0x802C8EAD,0x067A0D76,0x8029F9B4,0x0647D97C,0x80277872,0x0615A48B,0x80250AE7, -0x05E36EA9,0x8022B114,0x05B137DF,0x80206AF8,0x057F0035,0x801E3895,0x054CC7B1, -0x801C19EA,0x051A8E5C,0x801A0EF8,0x04E8543E,0x801817BF,0x04B6195D,0x80163440, -0x0483DDC3,0x8014647B,0x0451A177,0x8012A86F,0x041F6480,0x8011001F,0x03ED26E6, -0x800F6B88,0x03BAE8B2,0x800DEAAD,0x0388A9EA,0x800C7D8C,0x03566A96,0x800B2427, -0x03242ABF,0x8009DE7E,0x02F1EA6C,0x8008AC90,0x02BFA9A4,0x80078E5E,0x028D6870, -0x800683E8,0x025B26D7,0x80058D2F,0x0228E4E2,0x8004AA32,0x01F6A297,0x8003DAF1, -0x01C45FFE,0x80031F6D,0x01921D20,0x800277A6,0x015FDA03,0x8001E39B,0x012D96B1, -0x8001634E,0x00FB5330,0x8000F6BD,0x00C90F88,0x80009DEA,0x0096CBC1,0x800058D4, -0x006487E3,0x8000277A,0x003243F5,0x800009DF,0x7FFFFFFF,0x00000000,0x7FFF6216, -0xFF36F078,0x7FFD885A,0xFE6DE2E0,0x7FFA72D1,0xFDA4D929,0x7FF62182,0xFCDBD541, -0x7FF09478,0xFC12D91A,0x7FE9CBC0,0xFB49E6A3,0x7FE1C76B,0xFA80FFCB,0x7FD8878E, -0xF9B82684,0x7FCE0C3E,0xF8EF5CBB,0x7FC25596,0xF826A462,0x7FB563B3,0xF75DFF66, -0x7FA736B4,0xF6956FB7,0x7F97CEBD,0xF5CCF743,0x7F872BF3,0xF50497FB,0x7F754E80, -0xF43C53CB,0x7F62368F,0xF3742CA2,0x7F4DE451,0xF2AC246E,0x7F3857F6,0xF1E43D1C, -0x7F2191B4,0xF11C789A,0x7F0991C4,0xF054D8D5,0x7EF05860,0xEF8D5FB8,0x7ED5E5C6, -0xEEC60F31,0x7EBA3A39,0xEDFEE92B,0x7E9D55FC,0xED37EF91,0x7E7F3957,0xEC71244F, -0x7E5FE493,0xEBAA894F,0x7E3F57FF,0xEAE4207A,0x7E1D93EA,0xEA1DEBBB,0x7DFA98A8, -0xE957ECFB,0x7DD6668F,0xE8922622,0x7DB0FDF8,0xE7CC9917,0x7D8A5F40,0xE70747C4, -0x7D628AC6,0xE642340D,0x7D3980EC,0xE57D5FDA,0x7D0F4218,0xE4B8CD11,0x7CE3CEB2, -0xE3F47D96,0x7CB72724,0xE330734D,0x7C894BDE,0xE26CB01B,0x7C5A3D50,0xE1A935E2, -0x7C29FBEE,0xE0E60685,0x7BF88830,0xE02323E5,0x7BC5E290,0xDF608FE4,0x7B920B89, -0xDE9E4C60,0x7B5D039E,0xDDDC5B3B,0x7B26CB4F,0xDD1ABE51,0x7AEF6323,0xDC597781, -0x7AB6CBA4,0xDB9888A8,0x7A7D055B,0xDAD7F3A2,0x7A4210D8,0xDA17BA4A,0x7A05EEAD, -0xD957DE7A,0x79C89F6E,0xD898620C,0x798A23B1,0xD7D946D8,0x794A7C12,0xD71A8EB5, -0x7909A92D,0xD65C3B7B,0x78C7ABA2,0xD59E4EFF,0x78848414,0xD4E0CB15,0x78403329, -0xD423B191,0x77FAB989,0xD3670446,0x77B417DF,0xD2AAC504,0x776C4EDB,0xD1EEF59E, -0x77235F2D,0xD13397E2,0x76D94989,0xD078AD9E,0x768E0EA6,0xCFBE389F,0x7641AF3D, -0xCF043AB3,0x75F42C0B,0xCE4AB5A2,0x75A585CF,0xCD91AB39,0x7555BD4C,0xCCD91D3D, -0x7504D345,0xCC210D79,0x74B2C884,0xCB697DB0,0x745F9DD1,0xCAB26FA9,0x740B53FB, -0xC9FBE527,0x73B5EBD1,0xC945DFEC,0x735F6626,0xC89061BA,0x7307C3D0,0xC7DB6C50, -0x72AF05A7,0xC727016D,0x72552C85,0xC67322CE,0x71FA3949,0xC5BFD22E,0x719E2CD2, -0xC50D1149,0x71410805,0xC45AE1D7,0x70E2CBC6,0xC3A94590,0x708378FF,0xC2F83E2A, -0x7023109A,0xC247CD5A,0x6FC19385,0xC197F4D4,0x6F5F02B2,0xC0E8B648,0x6EFB5F12, -0xC03A1368,0x6E96A99D,0xBF8C0DE3,0x6E30E34A,0xBEDEA765,0x6DCA0D14,0xBE31E19B, -0x6D6227FA,0xBD85BE30,0x6CF934FC,0xBCDA3ECB,0x6C8F351C,0xBC2F6513,0x6C242960, -0xBB8532B0,0x6BB812D1,0xBADBA943,0x6B4AF279,0xBA32CA71,0x6ADCC964,0xB98A97D8, -0x6A6D98A4,0xB8E31319,0x69FD614A,0xB83C3DD1,0x698C246C,0xB796199B,0x6919E320, -0xB6F0A812,0x68A69E81,0xB64BEACD,0x683257AB,0xB5A7E362,0x67BD0FBD,0xB5049368, -0x6746C7D8,0xB461FC70,0x66CF8120,0xB3C0200C,0x66573CBB,0xB31EFFCC,0x65DDFBD3, -0xB27E9D3C,0x6563BF92,0xB1DEF9E9,0x64E88926,0xB140175B,0x646C59BF,0xB0A1F71D, -0x63EF3290,0xB0049AB3,0x637114CC,0xAF6803A2,0x62F201AC,0xAECC336C,0x6271FA69, -0xAE312B92,0x61F1003F,0xAD96ED92,0x616F146C,0xACFD7AE8,0x60EC3830,0xAC64D510, -0x60686CCF,0xABCCFD83,0x5FE3B38D,0xAB35F5B5,0x5F5E0DB3,0xAA9FBF1E,0x5ED77C8A, -0xAA0A5B2E,0x5E50015D,0xA975CB57,0x5DC79D7C,0xA8E21106,0x5D3E5237,0xA84F2DAA, -0x5CB420E0,0xA7BD22AC,0x5C290ACC,0xA72BF174,0x5B9D1154,0xA69B9B68,0x5B1035CF, -0xA60C21EE,0x5A82799A,0xA57D8666,0x59F3DE12,0xA4EFCA31,0x59646498,0xA462EEAC, -0x58D40E8C,0xA3D6F534,0x5842DD54,0xA34BDF20,0x57B0D256,0xA2C1ADC9,0x571DEEFA, -0xA2386284,0x568A34A9,0xA1AFFEA3,0x55F5A4D2,0xA1288376,0x556040E2,0xA0A1F24D, -0x54CA0A4B,0xA01C4C73,0x5433027D,0x9F979331,0x539B2AF0,0x9F13C7D0,0x53028518, -0x9E90EB94,0x5269126E,0x9E0EFFC1,0x51CED46E,0x9D8E0597,0x5133CC94,0x9D0DFE54, -0x5097FC5E,0x9C8EEB34,0x4FFB654D,0x9C10CD70,0x4F5E08E3,0x9B93A641,0x4EBFE8A5, -0x9B1776DA,0x4E210617,0x9A9C406E,0x4D8162C4,0x9A22042D,0x4CE10034,0x99A8C345, -0x4C3FDFF4,0x99307EE0,0x4B9E0390,0x98B93828,0x4AFB6C98,0x9842F043,0x4A581C9E, -0x97CDA855,0x49B41533,0x9759617F,0x490F57EE,0x96E61CE0,0x4869E665,0x9673DB94, -0x47C3C22F,0x96029EB6,0x471CECE7,0x9592675C,0x46756828,0x9523369C,0x45CD358F, -0x94B50D87,0x452456BD,0x9447ED2F,0x447ACD50,0x93DBD6A0,0x43D09AED,0x9370CAE4, -0x4325C135,0x9306CB04,0x427A41D0,0x929DD806,0x41CE1E65,0x9235F2EC,0x4121589B, -0x91CF1CB6,0x4073F21D,0x91695663,0x3FC5EC98,0x9104A0EE,0x3F1749B8,0x90A0FD4E, -0x3E680B2C,0x903E6C7B,0x3DB832A6,0x8FDCEF66,0x3D07C1D6,0x8F7C8701,0x3C56BA70, -0x8F1D343A,0x3BA51E29,0x8EBEF7FB,0x3AF2EEB7,0x8E61D32E,0x3A402DD2,0x8E05C6B7, -0x398CDD32,0x8DAAD37B,0x38D8FE93,0x8D50FA59,0x382493B0,0x8CF83C30,0x376F9E46, -0x8CA099DA,0x36BA2014,0x8C4A142F,0x36041AD9,0x8BF4AC05,0x354D9057,0x8BA0622F, -0x34968250,0x8B4D377C,0x33DEF287,0x8AFB2CBB,0x3326E2C3,0x8AAA42B4,0x326E54C7, -0x8A5A7A31,0x31B54A5E,0x8A0BD3F5,0x30FBC54D,0x89BE50C3,0x3041C761,0x8971F15A, -0x2F875262,0x8926B677,0x2ECC681E,0x88DCA0D3,0x2E110A62,0x8893B125,0x2D553AFC, -0x884BE821,0x2C98FBBA,0x88054677,0x2BDC4E6F,0x87BFCCD7,0x2B1F34EB,0x877B7BEC, -0x2A61B101,0x8738545E,0x29A3C485,0x86F656D3,0x28E5714B,0x86B583EE,0x2826B928, -0x8675DC4F,0x27679DF4,0x86376092,0x26A82186,0x85FA1153,0x25E845B6,0x85BDEF28, -0x25280C5E,0x8582FAA5,0x24677758,0x8549345C,0x23A6887F,0x85109CDD,0x22E541AF, -0x84D934B1,0x2223A4C5,0x84A2FC62,0x2161B3A0,0x846DF477,0x209F701C,0x843A1D70, -0x1FDCDC1B,0x840777D0,0x1F19F97B,0x83D60412,0x1E56CA1E,0x83A5C2B0,0x1D934FE5, -0x8376B422,0x1CCF8CB3,0x8348D8DC,0x1C0B826A,0x831C314E,0x1B4732EF,0x82F0BDE8, -0x1A82A026,0x82C67F14,0x19BDCBF3,0x829D753A,0x18F8B83C,0x8275A0C0,0x183366E9, -0x824F0208,0x176DD9DE,0x82299971,0x16A81305,0x82056758,0x15E21445,0x81E26C16, -0x151BDF86,0x81C0A801,0x145576B1,0x81A01B6D,0x138EDBB1,0x8180C6A9,0x12C8106F, -0x8162AA04,0x120116D5,0x8145C5C7,0x1139F0CF,0x812A1A3A,0x1072A048,0x810FA7A0, -0x0FAB272B,0x80F66E3C,0x0EE38766,0x80DE6E4C,0x0E1BC2E4,0x80C7A80A,0x0D53DB92, -0x80B21BAF,0x0C8BD35E,0x809DC971,0x0BC3AC35,0x808AB180,0x0AFB6805,0x8078D40D, -0x0A3308BD,0x80683143,0x096A9049,0x8058C94C,0x08A2009A,0x804A9C4D,0x07D95B9E, -0x803DAA6A,0x0710A345,0x8031F3C2,0x0647D97C,0x80277872,0x057F0035,0x801E3895, -0x04B6195D,0x80163440,0x03ED26E6,0x800F6B88,0x03242ABF,0x8009DE7E,0x025B26D7, -0x80058D2F,0x01921D20,0x800277A6,0x00C90F88,0x80009DEA,0x7FFFFFFF,0x00000000, -0x7FF62182,0xFCDBD541,0x7FD8878E,0xF9B82684,0x7FA736B4,0xF6956FB7,0x7F62368F, -0xF3742CA2,0x7F0991C4,0xF054D8D5,0x7E9D55FC,0xED37EF91,0x7E1D93EA,0xEA1DEBBB, -0x7D8A5F40,0xE70747C4,0x7CE3CEB2,0xE3F47D96,0x7C29FBEE,0xE0E60685,0x7B5D039E, -0xDDDC5B3B,0x7A7D055B,0xDAD7F3A2,0x798A23B1,0xD7D946D8,0x78848414,0xD4E0CB15, -0x776C4EDB,0xD1EEF59E,0x7641AF3D,0xCF043AB3,0x7504D345,0xCC210D79,0x73B5EBD1, -0xC945DFEC,0x72552C85,0xC67322CE,0x70E2CBC6,0xC3A94590,0x6F5F02B2,0xC0E8B648, -0x6DCA0D14,0xBE31E19B,0x6C242960,0xBB8532B0,0x6A6D98A4,0xB8E31319,0x68A69E81, -0xB64BEACD,0x66CF8120,0xB3C0200C,0x64E88926,0xB140175B,0x62F201AC,0xAECC336C, -0x60EC3830,0xAC64D510,0x5ED77C8A,0xAA0A5B2E,0x5CB420E0,0xA7BD22AC,0x5A82799A, -0xA57D8666,0x5842DD54,0xA34BDF20,0x55F5A4D2,0xA1288376,0x539B2AF0,0x9F13C7D0, -0x5133CC94,0x9D0DFE54,0x4EBFE8A5,0x9B1776DA,0x4C3FDFF4,0x99307EE0,0x49B41533, -0x9759617F,0x471CECE7,0x9592675C,0x447ACD50,0x93DBD6A0,0x41CE1E65,0x9235F2EC, -0x3F1749B8,0x90A0FD4E,0x3C56BA70,0x8F1D343A,0x398CDD32,0x8DAAD37B,0x36BA2014, -0x8C4A142F,0x33DEF287,0x8AFB2CBB,0x30FBC54D,0x89BE50C3,0x2E110A62,0x8893B125, -0x2B1F34EB,0x877B7BEC,0x2826B928,0x8675DC4F,0x25280C5E,0x8582FAA5,0x2223A4C5, -0x84A2FC62,0x1F19F97B,0x83D60412,0x1C0B826A,0x831C314E,0x18F8B83C,0x8275A0C0, -0x15E21445,0x81E26C16,0x12C8106F,0x8162AA04,0x0FAB272B,0x80F66E3C,0x0C8BD35E, -0x809DC971,0x096A9049,0x8058C94C,0x0647D97C,0x80277872,0x03242ABF,0x8009DE7E, -0x7FFFFFFF,0x00000000,0x7F62368F,0xF3742CA2,0x7D8A5F40,0xE70747C4,0x7A7D055B, -0xDAD7F3A2,0x7641AF3D,0xCF043AB3,0x70E2CBC6,0xC3A94590,0x6A6D98A4,0xB8E31319, -0x62F201AC,0xAECC336C,0x5A82799A,0xA57D8666,0x5133CC94,0x9D0DFE54,0x471CECE7, -0x9592675C,0x3C56BA70,0x8F1D343A,0x30FBC54D,0x89BE50C3,0x25280C5E,0x8582FAA5, -0x18F8B83C,0x8275A0C0,0x0C8BD35E,0x809DC971,0x7FFFFFFF,0x00000000,0x7641AF3D, -0xCF043AB3,0x5A82799A,0xA57D8666,0x30FBC54D,0x89BE50C3,}; - -q31_t rearranged_twiddle_stride2_4096_q31[2728]={ -0x7FFFFFFF,0x00000000,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,0x0FAB272B, -0x80F66E3C,0x0F475BFF,0x80EA4712,0x0EE38766,0x80DE6E4C,0x0E7FA99E,0x80D2E3F2, -0x0E1BC2E4,0x80C7A80A,0x0DB7D376,0x80BCBA9D,0x0D53DB92,0x80B21BAF,0x0CEFDB76, -0x80A7CB49,0x0C8BD35E,0x809DC971,0x0C27C389,0x8094162C,0x0BC3AC35,0x808AB180, -0x0B5F8D9F,0x80819B74,0x0AFB6805,0x8078D40D,0x0A973BA5,0x80705B50,0x0A3308BD, -0x80683143,0x09CECF89,0x806055EB,0x096A9049,0x8058C94C,0x09064B3A,0x80518B6B, -0x08A2009A,0x804A9C4D,0x083DB0A7,0x8043FBF6,0x07D95B9E,0x803DAA6A,0x077501BE, -0x8037A7AC,0x0710A345,0x8031F3C2,0x06AC406F,0x802C8EAD,0x0647D97C,0x80277872, -0x05E36EA9,0x8022B114,0x057F0035,0x801E3895,0x051A8E5C,0x801A0EF8,0x04B6195D, -0x80163440,0x0451A177,0x8012A86F,0x03ED26E6,0x800F6B88,0x0388A9EA,0x800C7D8C, -0x03242ABF,0x8009DE7E,0x02BFA9A4,0x80078E5E,0x025B26D7,0x80058D2F,0x01F6A297, -0x8003DAF1,0x01921D20,0x800277A6,0x012D96B1,0x8001634E,0x00C90F88,0x80009DEA, -0x006487E3,0x8000277A,0x00000000,0x80000000,0xFF9B781D,0x8000277A,0xFF36F078, -0x80009DEA,0xFED2694F,0x8001634E,0xFE6DE2E0,0x800277A6,0xFE095D69,0x8003DAF1, -0xFDA4D929,0x80058D2F,0xFD40565C,0x80078E5E,0xFCDBD541,0x8009DE7E,0xFC775616, -0x800C7D8C,0xFC12D91A,0x800F6B88,0xFBAE5E89,0x8012A86F,0xFB49E6A3,0x80163440, -0xFAE571A4,0x801A0EF8,0xFA80FFCB,0x801E3895,0xFA1C9157,0x8022B114,0xF9B82684, -0x80277872,0xF953BF91,0x802C8EAD,0xF8EF5CBB,0x8031F3C2,0xF88AFE42,0x8037A7AC, -0xF826A462,0x803DAA6A,0xF7C24F59,0x8043FBF6,0xF75DFF66,0x804A9C4D,0xF6F9B4C6, -0x80518B6B,0xF6956FB7,0x8058C94C,0xF6313077,0x806055EB,0xF5CCF743,0x80683143, -0xF568C45B,0x80705B50,0xF50497FB,0x8078D40D,0xF4A07261,0x80819B74,0xF43C53CB, -0x808AB180,0xF3D83C77,0x8094162C,0xF3742CA2,0x809DC971,0xF310248A,0x80A7CB49, -0xF2AC246E,0x80B21BAF,0xF2482C8A,0x80BCBA9D,0xF1E43D1C,0x80C7A80A,0xF1805662, -0x80D2E3F2,0xF11C789A,0x80DE6E4C,0xF0B8A401,0x80EA4712,0xF054D8D5,0x80F66E3C, -0xEFF11753,0x8102E3C4,0xEF8D5FB8,0x810FA7A0,0xEF29B243,0x811CB9CA,0xEEC60F31, -0x812A1A3A,0xEE6276BF,0x8137C8E6,0xEDFEE92B,0x8145C5C7,0xED9B66B2,0x815410D4, -0xED37EF91,0x8162AA04,0xECD48407,0x8171914E,0xEC71244F,0x8180C6A9,0xEC0DD0A8, -0x81904A0C,0xEBAA894F,0x81A01B6D,0xEB474E81,0x81B03AC2,0xEAE4207A,0x81C0A801, -0xEA80FF7A,0x81D16321,0xEA1DEBBB,0x81E26C16,0xE9BAE57D,0x81F3C2D7,0xE957ECFB, -0x82056758,0xE8F50273,0x82175990,0xE8922622,0x82299971,0xE82F5844,0x823C26F3, -0xE7CC9917,0x824F0208,0xE769E8D8,0x82622AA6,0xE70747C4,0x8275A0C0,0xE6A4B616, -0x8289644B,0xE642340D,0x829D753A,0xE5DFC1E5,0x82B1D381,0xE57D5FDA,0x82C67F14, -0xE51B0E2A,0x82DB77E5,0xE4B8CD11,0x82F0BDE8,0xE4569CCB,0x83065110,0xE3F47D96, -0x831C314E,0xE3926FAD,0x83325E97,0xE330734D,0x8348D8DC,0xE2CE88B3,0x835FA00F, -0xE26CB01B,0x8376B422,0xE20AE9C1,0x838E1507,0xE1A935E2,0x83A5C2B0,0xE14794BA, -0x83BDBD0E,0xE0E60685,0x83D60412,0xE0848B7F,0x83EE97AD,0xE02323E5,0x840777D0, -0xDFC1CFF3,0x8420A46C,0xDF608FE4,0x843A1D70,0xDEFF63F4,0x8453E2CF,0xDE9E4C60, -0x846DF477,0xDE3D4964,0x84885258,0xDDDC5B3B,0x84A2FC62,0xDD7B8220,0x84BDF286, -0xDD1ABE51,0x84D934B1,0xDCBA1008,0x84F4C2D4,0xDC597781,0x85109CDD,0xDBF8F4F8, -0x852CC2BB,0xDB9888A8,0x8549345C,0xDB3832CD,0x8565F1B0,0xDAD7F3A2,0x8582FAA5, -0xDA77CB63,0x85A04F28,0xDA17BA4A,0x85BDEF28,0xD9B7C094,0x85DBDA91,0xD957DE7A, -0x85FA1153,0xD8F81439,0x86189359,0xD898620C,0x86376092,0xD838C82D,0x865678EB, -0xD7D946D8,0x8675DC4F,0xD779DE47,0x86958AAC,0xD71A8EB5,0x86B583EE,0xD6BB585E, -0x86D5C802,0xD65C3B7B,0x86F656D3,0xD5FD3848,0x8717304E,0xD59E4EFF,0x8738545E, -0xD53F7FDA,0x8759C2EF,0xD4E0CB15,0x877B7BEC,0xD48230E9,0x879D7F41,0xD423B191, -0x87BFCCD7,0xD3C54D47,0x87E2649B,0xD3670446,0x88054677,0xD308D6C7,0x88287256, -0xD2AAC504,0x884BE821,0xD24CCF39,0x886FA7C2,0xD1EEF59E,0x8893B125,0xD191386E, -0x88B80432,0xD13397E2,0x88DCA0D3,0xD0D61434,0x890186F2,0xD078AD9E,0x8926B677, -0xD01B6459,0x894C2F4C,0xCFBE389F,0x8971F15A,0xCF612AAA,0x8997FC8A,0xCF043AB3, -0x89BE50C3,0xCEA768F2,0x89E4EDEF,0xCE4AB5A2,0x8A0BD3F5,0xCDEE20FC,0x8A3302BE, -0xCD91AB39,0x8A5A7A31,0xCD355491,0x8A823A36,0xCCD91D3D,0x8AAA42B4,0xCC7D0578, -0x8AD29394,0xCC210D79,0x8AFB2CBB,0xCBC53579,0x8B240E11,0xCB697DB0,0x8B4D377C, -0xCB0DE658,0x8B76A8E4,0xCAB26FA9,0x8BA0622F,0xCA5719DB,0x8BCA6343,0xC9FBE527, -0x8BF4AC05,0xC9A0D1C5,0x8C1F3C5D,0xC945DFEC,0x8C4A142F,0xC8EB0FD6,0x8C753362, -0xC89061BA,0x8CA099DA,0xC835D5D0,0x8CCC477D,0xC7DB6C50,0x8CF83C30,0xC7812572, -0x8D2477D8,0xC727016D,0x8D50FA59,0xC6CD0079,0x8D7DC399,0xC67322CE,0x8DAAD37B, -0xC61968A2,0x8DD829E4,0xC5BFD22E,0x8E05C6B7,0xC5665FA9,0x8E33A9DA,0xC50D1149, -0x8E61D32E,0xC4B3E746,0x8E904298,0xC45AE1D7,0x8EBEF7FB,0xC4020133,0x8EEDF33B, -0xC3A94590,0x8F1D343A,0xC350AF26,0x8F4CBADB,0xC2F83E2A,0x8F7C8701,0xC29FF2D4, -0x8FAC988F,0xC247CD5A,0x8FDCEF66,0xC1EFCDF3,0x900D8B69,0xC197F4D4,0x903E6C7B, -0xC1404233,0x906F927C,0xC0E8B648,0x90A0FD4E,0xC0915148,0x90D2ACD4,0xC03A1368, -0x9104A0EE,0xBFE2FCDF,0x9136D97D,0xBF8C0DE3,0x91695663,0xBF3546A8,0x919C1781, -0xBEDEA765,0x91CF1CB6,0xBE88304F,0x920265E4,0xBE31E19B,0x9235F2EC,0xBDDBBB7F, -0x9269C3AC,0xBD85BE30,0x929DD806,0xBD2FE9E2,0x92D22FD9,0xBCDA3ECB,0x9306CB04, -0xBC84BD1F,0x933BA968,0xBC2F6513,0x9370CAE4,0xBBDA36DD,0x93A62F57,0xBB8532B0, -0x93DBD6A0,0xBB3058C0,0x9411C09E,0xBADBA943,0x9447ED2F,0xBA87246D,0x947E5C33, -0xBA32CA71,0x94B50D87,0xB9DE9B83,0x94EC010B,0xB98A97D8,0x9523369C,0xB936BFA4, -0x955AAE17,0xB8E31319,0x9592675C,0xB88F926D,0x95CA6247,0xB83C3DD1,0x96029EB6, -0xB7E9157A,0x963B1C86,0xB796199B,0x9673DB94,0xB7434A67,0x96ACDBBE,0xB6F0A812, -0x96E61CE0,0xB69E32CD,0x971F9ED7,0xB64BEACD,0x9759617F,0xB5F9D043,0x979364B5, -0xB5A7E362,0x97CDA855,0xB556245E,0x98082C3B,0xB5049368,0x9842F043,0xB4B330B3, -0x987DF449,0xB461FC70,0x98B93828,0xB410F6D3,0x98F4BBBC,0xB3C0200C,0x99307EE0, -0xB36F784F,0x996C816F,0xB31EFFCC,0x99A8C345,0xB2CEB6B5,0x99E5443B,0xB27E9D3C, -0x9A22042D,0xB22EB392,0x9A5F02F5,0xB1DEF9E9,0x9A9C406E,0xB18F7071,0x9AD9BC71, -0xB140175B,0x9B1776DA,0xB0F0EEDA,0x9B556F81,0xB0A1F71D,0x9B93A641,0xB0533055, -0x9BD21AF3,0xB0049AB3,0x9C10CD70,0xAFB63667,0x9C4FBD93,0xAF6803A2,0x9C8EEB34, -0xAF1A0293,0x9CCE562C,0xAECC336C,0x9D0DFE54,0xAE7E965B,0x9D4DE385,0xAE312B92, -0x9D8E0597,0xADE3F33E,0x9DCE6463,0xAD96ED92,0x9E0EFFC1,0xAD4A1ABA,0x9E4FD78A, -0xACFD7AE8,0x9E90EB94,0xACB10E4B,0x9ED23BB9,0xAC64D510,0x9F13C7D0,0xAC18CF69, -0x9F558FB0,0xABCCFD83,0x9F979331,0xAB815F8D,0x9FD9D22A,0xAB35F5B5,0xA01C4C73, -0xAAEAC02C,0xA05F01E1,0xAA9FBF1E,0xA0A1F24D,0xAA54F2BA,0xA0E51D8C,0xAA0A5B2E, -0xA1288376,0xA9BFF8A8,0xA16C23E1,0xA975CB57,0xA1AFFEA3,0xA92BD367,0xA1F41392, -0xA8E21106,0xA2386284,0xA8988463,0xA27CEB4F,0xA84F2DAA,0xA2C1ADC9,0xA8060D08, -0xA306A9C8,0xA7BD22AC,0xA34BDF20,0xA7746EC0,0xA3914DA8,0xA72BF174,0xA3D6F534, -0xA6E3AAF2,0xA41CD599,0xA69B9B68,0xA462EEAC,0xA653C303,0xA4A94043,0xA60C21EE, -0xA4EFCA31,0xA5C4B855,0xA5368C4B,0xA57D8666,0xA57D8666,0xA5368C4B,0xA5C4B855, -0xA4EFCA31,0xA60C21EE,0xA4A94043,0xA653C303,0xA462EEAC,0xA69B9B68,0xA41CD599, -0xA6E3AAF2,0xA3D6F534,0xA72BF174,0xA3914DA8,0xA7746EC0,0xA34BDF20,0xA7BD22AC, -0xA306A9C8,0xA8060D08,0xA2C1ADC9,0xA84F2DAA,0xA27CEB4F,0xA8988463,0xA2386284, -0xA8E21106,0xA1F41392,0xA92BD367,0xA1AFFEA3,0xA975CB57,0xA16C23E1,0xA9BFF8A8, -0xA1288376,0xAA0A5B2E,0xA0E51D8C,0xAA54F2BA,0xA0A1F24D,0xAA9FBF1E,0xA05F01E1, -0xAAEAC02C,0xA01C4C73,0xAB35F5B5,0x9FD9D22A,0xAB815F8D,0x9F979331,0xABCCFD83, -0x9F558FB0,0xAC18CF69,0x9F13C7D0,0xAC64D510,0x9ED23BB9,0xACB10E4B,0x9E90EB94, -0xACFD7AE8,0x9E4FD78A,0xAD4A1ABA,0x9E0EFFC1,0xAD96ED92,0x9DCE6463,0xADE3F33E, -0x9D8E0597,0xAE312B92,0x9D4DE385,0xAE7E965B,0x9D0DFE54,0xAECC336C,0x9CCE562C, -0xAF1A0293,0x9C8EEB34,0xAF6803A2,0x9C4FBD93,0xAFB63667,0x9C10CD70,0xB0049AB3, -0x9BD21AF3,0xB0533055,0x9B93A641,0xB0A1F71D,0x9B556F81,0xB0F0EEDA,0x9B1776DA, -0xB140175B,0x9AD9BC71,0xB18F7071,0x9A9C406E,0xB1DEF9E9,0x9A5F02F5,0xB22EB392, -0x9A22042D,0xB27E9D3C,0x99E5443B,0xB2CEB6B5,0x99A8C345,0xB31EFFCC,0x996C816F, -0xB36F784F,0x99307EE0,0xB3C0200C,0x98F4BBBC,0xB410F6D3,0x98B93828,0xB461FC70, -0x987DF449,0xB4B330B3,0x9842F043,0xB5049368,0x98082C3B,0xB556245E,0x97CDA855, -0xB5A7E362,0x979364B5,0xB5F9D043,0x9759617F,0xB64BEACD,0x971F9ED7,0xB69E32CD, -0x96E61CE0,0xB6F0A812,0x96ACDBBE,0xB7434A67,0x9673DB94,0xB796199B,0x963B1C86, -0xB7E9157A,0x96029EB6,0xB83C3DD1,0x95CA6247,0xB88F926D,0x9592675C,0xB8E31319, -0x955AAE17,0xB936BFA4,0x9523369C,0xB98A97D8,0x94EC010B,0xB9DE9B83,0x94B50D87, -0xBA32CA71,0x947E5C33,0xBA87246D,0x9447ED2F,0xBADBA943,0x9411C09E,0xBB3058C0, -0x93DBD6A0,0xBB8532B0,0x93A62F57,0xBBDA36DD,0x9370CAE4,0xBC2F6513,0x933BA968, -0xBC84BD1F,0x9306CB04,0xBCDA3ECB,0x92D22FD9,0xBD2FE9E2,0x929DD806,0xBD85BE30, -0x9269C3AC,0xBDDBBB7F,0x9235F2EC,0xBE31E19B,0x920265E4,0xBE88304F,0x91CF1CB6, -0xBEDEA765,0x919C1781,0xBF3546A8,0x91695663,0xBF8C0DE3,0x9136D97D,0xBFE2FCDF, -0x9104A0EE,0xC03A1368,0x90D2ACD4,0xC0915148,0x90A0FD4E,0xC0E8B648,0x906F927C, -0xC1404233,0x903E6C7B,0xC197F4D4,0x900D8B69,0xC1EFCDF3,0x8FDCEF66,0xC247CD5A, -0x8FAC988F,0xC29FF2D4,0x8F7C8701,0xC2F83E2A,0x8F4CBADB,0xC350AF26,0x8F1D343A, -0xC3A94590,0x8EEDF33B,0xC4020133,0x8EBEF7FB,0xC45AE1D7,0x8E904298,0xC4B3E746, -0x8E61D32E,0xC50D1149,0x8E33A9DA,0xC5665FA9,0x8E05C6B7,0xC5BFD22E,0x8DD829E4, -0xC61968A2,0x8DAAD37B,0xC67322CE,0x8D7DC399,0xC6CD0079,0x8D50FA59,0xC727016D, -0x8D2477D8,0xC7812572,0x8CF83C30,0xC7DB6C50,0x8CCC477D,0xC835D5D0,0x8CA099DA, -0xC89061BA,0x8C753362,0xC8EB0FD6,0x8C4A142F,0xC945DFEC,0x8C1F3C5D,0xC9A0D1C5, -0x8BF4AC05,0xC9FBE527,0x8BCA6343,0xCA5719DB,0x8BA0622F,0xCAB26FA9,0x8B76A8E4, -0xCB0DE658,0x8B4D377C,0xCB697DB0,0x8B240E11,0xCBC53579,0x8AFB2CBB,0xCC210D79, -0x8AD29394,0xCC7D0578,0x8AAA42B4,0xCCD91D3D,0x8A823A36,0xCD355491,0x8A5A7A31, -0xCD91AB39,0x8A3302BE,0xCDEE20FC,0x8A0BD3F5,0xCE4AB5A2,0x89E4EDEF,0xCEA768F2, -0x89BE50C3,0xCF043AB3,0x8997FC8A,0xCF612AAA,0x8971F15A,0xCFBE389F,0x894C2F4C, -0xD01B6459,0x8926B677,0xD078AD9E,0x890186F2,0xD0D61434,0x88DCA0D3,0xD13397E2, -0x88B80432,0xD191386E,0x8893B125,0xD1EEF59E,0x886FA7C2,0xD24CCF39,0x884BE821, -0xD2AAC504,0x88287256,0xD308D6C7,0x88054677,0xD3670446,0x87E2649B,0xD3C54D47, -0x87BFCCD7,0xD423B191,0x879D7F41,0xD48230E9,0x877B7BEC,0xD4E0CB15,0x8759C2EF, -0xD53F7FDA,0x8738545E,0xD59E4EFF,0x8717304E,0xD5FD3848,0x86F656D3,0xD65C3B7B, -0x86D5C802,0xD6BB585E,0x86B583EE,0xD71A8EB5,0x86958AAC,0xD779DE47,0x8675DC4F, -0xD7D946D8,0x865678EB,0xD838C82D,0x86376092,0xD898620C,0x86189359,0xD8F81439, -0x85FA1153,0xD957DE7A,0x85DBDA91,0xD9B7C094,0x85BDEF28,0xDA17BA4A,0x85A04F28, -0xDA77CB63,0x8582FAA5,0xDAD7F3A2,0x8565F1B0,0xDB3832CD,0x8549345C,0xDB9888A8, -0x852CC2BB,0xDBF8F4F8,0x85109CDD,0xDC597781,0x84F4C2D4,0xDCBA1008,0x84D934B1, -0xDD1ABE51,0x84BDF286,0xDD7B8220,0x84A2FC62,0xDDDC5B3B,0x84885258,0xDE3D4964, -0x846DF477,0xDE9E4C60,0x8453E2CF,0xDEFF63F4,0x843A1D70,0xDF608FE4,0x8420A46C, -0xDFC1CFF3,0x840777D0,0xE02323E5,0x83EE97AD,0xE0848B7F,0x83D60412,0xE0E60685, -0x83BDBD0E,0xE14794BA,0x83A5C2B0,0xE1A935E2,0x838E1507,0xE20AE9C1,0x8376B422, -0xE26CB01B,0x835FA00F,0xE2CE88B3,0x8348D8DC,0xE330734D,0x83325E97,0xE3926FAD, -0x831C314E,0xE3F47D96,0x83065110,0xE4569CCB,0x82F0BDE8,0xE4B8CD11,0x82DB77E5, -0xE51B0E2A,0x82C67F14,0xE57D5FDA,0x82B1D381,0xE5DFC1E5,0x829D753A,0xE642340D, -0x8289644B,0xE6A4B616,0x8275A0C0,0xE70747C4,0x82622AA6,0xE769E8D8,0x824F0208, -0xE7CC9917,0x823C26F3,0xE82F5844,0x82299971,0xE8922622,0x82175990,0xE8F50273, -0x82056758,0xE957ECFB,0x81F3C2D7,0xE9BAE57D,0x81E26C16,0xEA1DEBBB,0x81D16321, -0xEA80FF7A,0x81C0A801,0xEAE4207A,0x81B03AC2,0xEB474E81,0x81A01B6D,0xEBAA894F, -0x81904A0C,0xEC0DD0A8,0x8180C6A9,0xEC71244F,0x8171914E,0xECD48407,0x8162AA04, -0xED37EF91,0x815410D4,0xED9B66B2,0x8145C5C7,0xEDFEE92B,0x8137C8E6,0xEE6276BF, -0x812A1A3A,0xEEC60F31,0x811CB9CA,0xEF29B243,0x810FA7A0,0xEF8D5FB8,0x8102E3C4, -0xEFF11753,0x80F66E3C,0xF054D8D5,0x80EA4712,0xF0B8A401,0x80DE6E4C,0xF11C789A, -0x80D2E3F2,0xF1805662,0x80C7A80A,0xF1E43D1C,0x80BCBA9D,0xF2482C8A,0x80B21BAF, -0xF2AC246E,0x80A7CB49,0xF310248A,0x809DC971,0xF3742CA2,0x8094162C,0xF3D83C77, -0x808AB180,0xF43C53CB,0x80819B74,0xF4A07261,0x8078D40D,0xF50497FB,0x80705B50, -0xF568C45B,0x80683143,0xF5CCF743,0x806055EB,0xF6313077,0x8058C94C,0xF6956FB7, -0x80518B6B,0xF6F9B4C6,0x804A9C4D,0xF75DFF66,0x8043FBF6,0xF7C24F59,0x803DAA6A, -0xF826A462,0x8037A7AC,0xF88AFE42,0x8031F3C2,0xF8EF5CBB,0x802C8EAD,0xF953BF91, -0x80277872,0xF9B82684,0x8022B114,0xFA1C9157,0x801E3895,0xFA80FFCB,0x801A0EF8, -0xFAE571A4,0x80163440,0xFB49E6A3,0x8012A86F,0xFBAE5E89,0x800F6B88,0xFC12D91A, -0x800C7D8C,0xFC775616,0x8009DE7E,0xFCDBD541,0x80078E5E,0xFD40565C,0x80058D2F, -0xFDA4D929,0x8003DAF1,0xFE095D69,0x800277A6,0xFE6DE2E0,0x8001634E,0xFED2694F, -0x80009DEA,0xFF36F078,0x8000277A,0xFF9B781D,0x7FFFFFFF,0x00000000,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,0x0FAB272B,0x80F66E3C,0x0E1BC2E4,0x80C7A80A,0x0C8BD35E, -0x809DC971,0x0AFB6805,0x8078D40D,0x096A9049,0x8058C94C,0x07D95B9E,0x803DAA6A, -0x0647D97C,0x80277872,0x04B6195D,0x80163440,0x03242ABF,0x8009DE7E,0x01921D20, -0x800277A6,0x00000000,0x80000000,0xFE6DE2E0,0x800277A6,0xFCDBD541,0x8009DE7E, -0xFB49E6A3,0x80163440,0xF9B82684,0x80277872,0xF826A462,0x803DAA6A,0xF6956FB7, -0x8058C94C,0xF50497FB,0x8078D40D,0xF3742CA2,0x809DC971,0xF1E43D1C,0x80C7A80A, -0xF054D8D5,0x80F66E3C,0xEEC60F31,0x812A1A3A,0xED37EF91,0x8162AA04,0xEBAA894F, -0x81A01B6D,0xEA1DEBBB,0x81E26C16,0xE8922622,0x82299971,0xE70747C4,0x8275A0C0, -0xE57D5FDA,0x82C67F14,0xE3F47D96,0x831C314E,0xE26CB01B,0x8376B422,0xE0E60685, -0x83D60412,0xDF608FE4,0x843A1D70,0xDDDC5B3B,0x84A2FC62,0xDC597781,0x85109CDD, -0xDAD7F3A2,0x8582FAA5,0xD957DE7A,0x85FA1153,0xD7D946D8,0x8675DC4F,0xD65C3B7B, -0x86F656D3,0xD4E0CB15,0x877B7BEC,0xD3670446,0x88054677,0xD1EEF59E,0x8893B125, -0xD078AD9E,0x8926B677,0xCF043AB3,0x89BE50C3,0xCD91AB39,0x8A5A7A31,0xCC210D79, -0x8AFB2CBB,0xCAB26FA9,0x8BA0622F,0xC945DFEC,0x8C4A142F,0xC7DB6C50,0x8CF83C30, -0xC67322CE,0x8DAAD37B,0xC50D1149,0x8E61D32E,0xC3A94590,0x8F1D343A,0xC247CD5A, -0x8FDCEF66,0xC0E8B648,0x90A0FD4E,0xBF8C0DE3,0x91695663,0xBE31E19B,0x9235F2EC, -0xBCDA3ECB,0x9306CB04,0xBB8532B0,0x93DBD6A0,0xBA32CA71,0x94B50D87,0xB8E31319, -0x9592675C,0xB796199B,0x9673DB94,0xB64BEACD,0x9759617F,0xB5049368,0x9842F043, -0xB3C0200C,0x99307EE0,0xB27E9D3C,0x9A22042D,0xB140175B,0x9B1776DA,0xB0049AB3, -0x9C10CD70,0xAECC336C,0x9D0DFE54,0xAD96ED92,0x9E0EFFC1,0xAC64D510,0x9F13C7D0, -0xAB35F5B5,0xA01C4C73,0xAA0A5B2E,0xA1288376,0xA8E21106,0xA2386284,0xA7BD22AC, -0xA34BDF20,0xA69B9B68,0xA462EEAC,0xA57D8666,0xA57D8666,0xA462EEAC,0xA69B9B68, -0xA34BDF20,0xA7BD22AC,0xA2386284,0xA8E21106,0xA1288376,0xAA0A5B2E,0xA01C4C73, -0xAB35F5B5,0x9F13C7D0,0xAC64D510,0x9E0EFFC1,0xAD96ED92,0x9D0DFE54,0xAECC336C, -0x9C10CD70,0xB0049AB3,0x9B1776DA,0xB140175B,0x9A22042D,0xB27E9D3C,0x99307EE0, -0xB3C0200C,0x9842F043,0xB5049368,0x9759617F,0xB64BEACD,0x9673DB94,0xB796199B, -0x9592675C,0xB8E31319,0x94B50D87,0xBA32CA71,0x93DBD6A0,0xBB8532B0,0x9306CB04, -0xBCDA3ECB,0x9235F2EC,0xBE31E19B,0x91695663,0xBF8C0DE3,0x90A0FD4E,0xC0E8B648, -0x8FDCEF66,0xC247CD5A,0x8F1D343A,0xC3A94590,0x8E61D32E,0xC50D1149,0x8DAAD37B, -0xC67322CE,0x8CF83C30,0xC7DB6C50,0x8C4A142F,0xC945DFEC,0x8BA0622F,0xCAB26FA9, -0x8AFB2CBB,0xCC210D79,0x8A5A7A31,0xCD91AB39,0x89BE50C3,0xCF043AB3,0x8926B677, -0xD078AD9E,0x8893B125,0xD1EEF59E,0x88054677,0xD3670446,0x877B7BEC,0xD4E0CB15, -0x86F656D3,0xD65C3B7B,0x8675DC4F,0xD7D946D8,0x85FA1153,0xD957DE7A,0x8582FAA5, -0xDAD7F3A2,0x85109CDD,0xDC597781,0x84A2FC62,0xDDDC5B3B,0x843A1D70,0xDF608FE4, -0x83D60412,0xE0E60685,0x8376B422,0xE26CB01B,0x831C314E,0xE3F47D96,0x82C67F14, -0xE57D5FDA,0x8275A0C0,0xE70747C4,0x82299971,0xE8922622,0x81E26C16,0xEA1DEBBB, -0x81A01B6D,0xEBAA894F,0x8162AA04,0xED37EF91,0x812A1A3A,0xEEC60F31,0x80F66E3C, -0xF054D8D5,0x80C7A80A,0xF1E43D1C,0x809DC971,0xF3742CA2,0x8078D40D,0xF50497FB, -0x8058C94C,0xF6956FB7,0x803DAA6A,0xF826A462,0x80277872,0xF9B82684,0x80163440, -0xFB49E6A3,0x8009DE7E,0xFCDBD541,0x800277A6,0xFE6DE2E0,0x7FFFFFFF,0x00000000, -0x7FD8878E,0xF9B82684,0x7F62368F,0xF3742CA2,0x7E9D55FC,0xED37EF91,0x7D8A5F40, -0xE70747C4,0x7C29FBEE,0xE0E60685,0x7A7D055B,0xDAD7F3A2,0x78848414,0xD4E0CB15, -0x7641AF3D,0xCF043AB3,0x73B5EBD1,0xC945DFEC,0x70E2CBC6,0xC3A94590,0x6DCA0D14, -0xBE31E19B,0x6A6D98A4,0xB8E31319,0x66CF8120,0xB3C0200C,0x62F201AC,0xAECC336C, -0x5ED77C8A,0xAA0A5B2E,0x5A82799A,0xA57D8666,0x55F5A4D2,0xA1288376,0x5133CC94, -0x9D0DFE54,0x4C3FDFF4,0x99307EE0,0x471CECE7,0x9592675C,0x41CE1E65,0x9235F2EC, -0x3C56BA70,0x8F1D343A,0x36BA2014,0x8C4A142F,0x30FBC54D,0x89BE50C3,0x2B1F34EB, -0x877B7BEC,0x25280C5E,0x8582FAA5,0x1F19F97B,0x83D60412,0x18F8B83C,0x8275A0C0, -0x12C8106F,0x8162AA04,0x0C8BD35E,0x809DC971,0x0647D97C,0x80277872,0x00000000, -0x80000000,0xF9B82684,0x80277872,0xF3742CA2,0x809DC971,0xED37EF91,0x8162AA04, -0xE70747C4,0x8275A0C0,0xE0E60685,0x83D60412,0xDAD7F3A2,0x8582FAA5,0xD4E0CB15, -0x877B7BEC,0xCF043AB3,0x89BE50C3,0xC945DFEC,0x8C4A142F,0xC3A94590,0x8F1D343A, -0xBE31E19B,0x9235F2EC,0xB8E31319,0x9592675C,0xB3C0200C,0x99307EE0,0xAECC336C, -0x9D0DFE54,0xAA0A5B2E,0xA1288376,0xA57D8666,0xA57D8666,0xA1288376,0xAA0A5B2E, -0x9D0DFE54,0xAECC336C,0x99307EE0,0xB3C0200C,0x9592675C,0xB8E31319,0x9235F2EC, -0xBE31E19B,0x8F1D343A,0xC3A94590,0x8C4A142F,0xC945DFEC,0x89BE50C3,0xCF043AB3, -0x877B7BEC,0xD4E0CB15,0x8582FAA5,0xDAD7F3A2,0x83D60412,0xE0E60685,0x8275A0C0, -0xE70747C4,0x8162AA04,0xED37EF91,0x809DC971,0xF3742CA2,0x80277872,0xF9B82684, -0x7FFFFFFF,0x00000000,0x7D8A5F40,0xE70747C4,0x7641AF3D,0xCF043AB3,0x6A6D98A4, -0xB8E31319,0x5A82799A,0xA57D8666,0x471CECE7,0x9592675C,0x30FBC54D,0x89BE50C3, -0x18F8B83C,0x8275A0C0,0x00000000,0x80000000,0xE70747C4,0x8275A0C0,0xCF043AB3, -0x89BE50C3,0xB8E31319,0x9592675C,0xA57D8666,0xA57D8666,0x9592675C,0xB8E31319, -0x89BE50C3,0xCF043AB3,0x8275A0C0,0xE70747C4,0x7FFFFFFF,0x00000000,0x5A82799A, -0xA57D8666,0x00000000,0x80000000,0xA57D8666,0xA57D8666,}; - -q31_t rearranged_twiddle_stride3_4096_q31[2728]={ -0x7FFFFFFF,0x00000000,0x7FFFA72C,0xFF69343F,0x7FFE9CB2,0xFED2694F,0x7FFCE093, -0xFE3BA002,0x7FFA72D1,0xFDA4D929,0x7FF75370,0xFD0E1594,0x7FF38274,0xFC775616, -0x7FEEFFE1,0xFBE09B80,0x7FE9CBC0,0xFB49E6A3,0x7FE3E616,0xFAB3384F,0x7FDD4EEC, -0xFA1C9157,0x7FD6064C,0xF985F28A,0x7FCE0C3E,0xF8EF5CBB,0x7FC560CF,0xF858D0BB, -0x7FBC040A,0xF7C24F59,0x7FB1F5FC,0xF72BD967,0x7FA736B4,0xF6956FB7,0x7F9BC640, -0xF5FF1318,0x7F8FA4B0,0xF568C45B,0x7F82D214,0xF4D28451,0x7F754E80,0xF43C53CB, -0x7F671A05,0xF3A63398,0x7F5834B7,0xF310248A,0x7F489EAA,0xF27A2771,0x7F3857F6, -0xF1E43D1C,0x7F2760AF,0xF14E665C,0x7F15B8EE,0xF0B8A401,0x7F0360CB,0xF022F6DA, -0x7EF05860,0xEF8D5FB8,0x7EDC9FC6,0xEEF7DF6A,0x7EC8371A,0xEE6276BF,0x7EB31E78, -0xEDCD2687,0x7E9D55FC,0xED37EF91,0x7E86DDC6,0xECA2D2AD,0x7E6FB5F4,0xEC0DD0A8, -0x7E57DEA7,0xEB78EA52,0x7E3F57FF,0xEAE4207A,0x7E26221F,0xEA4F73EE,0x7E0C3D29, -0xE9BAE57D,0x7DF1A942,0xE92675F4,0x7DD6668F,0xE8922622,0x7DBA7534,0xE7FDF6D4, -0x7D9DD55A,0xE769E8D8,0x7D808728,0xE6D5FCFC,0x7D628AC6,0xE642340D,0x7D43E05E, -0xE5AE8ED8,0x7D24881B,0xE51B0E2A,0x7D048228,0xE487B2D0,0x7CE3CEB2,0xE3F47D96, -0x7CC26DE5,0xE3616F48,0x7CA05FF1,0xE2CE88B3,0x7C7DA505,0xE23BCAA2,0x7C5A3D50, -0xE1A935E2,0x7C362904,0xE116CB3D,0x7C116853,0xE0848B7F,0x7BEBFB70,0xDFF27773, -0x7BC5E290,0xDF608FE4,0x7B9F1DE6,0xDECED59B,0x7B77ADA8,0xDE3D4964,0x7B4F920E, -0xDDABEC08,0x7B26CB4F,0xDD1ABE51,0x7AFD59A4,0xDC89C109,0x7AD33D45,0xDBF8F4F8, -0x7AA8766F,0xDB685AE9,0x7A7D055B,0xDAD7F3A2,0x7A50EA47,0xDA47BFEE,0x7A24256F, -0xD9B7C094,0x79F6B711,0xD927F65B,0x79C89F6E,0xD898620C,0x7999DEC4,0xD809046E, -0x796A7554,0xD779DE47,0x793A6361,0xD6EAF05F,0x7909A92D,0xD65C3B7B,0x78D846FB, -0xD5CDC062,0x78A63D11,0xD53F7FDA,0x78738BB3,0xD4B17AA8,0x78403329,0xD423B191, -0x780C33B8,0xD396255A,0x77D78DAA,0xD308D6C7,0x77A24148,0xD27BC69C,0x776C4EDB, -0xD1EEF59E,0x7735B6AF,0xD1626490,0x76FE790E,0xD0D61434,0x76C69647,0xD04A054E, -0x768E0EA6,0xCFBE389F,0x7654E279,0xCF32AEEB,0x761B1211,0xCEA768F2,0x75E09DBD, -0xCE1C6777,0x75A585CF,0xCD91AB39,0x7569CA99,0xCD0734F9,0x752D6C6C,0xCC7D0578, -0x74F06B9E,0xCBF31D75,0x74B2C884,0xCB697DB0,0x74748371,0xCAE026E8,0x74359CBD, -0xCA5719DB,0x73F614C0,0xC9CE5748,0x73B5EBD1,0xC945DFEC,0x73752249,0xC8BDB485, -0x7333B883,0xC835D5D0,0x72F1AED9,0xC7AE4489,0x72AF05A7,0xC727016D,0x726BBD48, -0xC6A00D37,0x7227D61C,0xC61968A2,0x71E35080,0xC593146A,0x719E2CD2,0xC50D1149, -0x71586B74,0xC4875FF9,0x71120CC5,0xC4020133,0x70CB1128,0xC37CF5B0,0x708378FF, -0xC2F83E2A,0x703B44AD,0xC273DB58,0x6FF27497,0xC1EFCDF3,0x6FA90921,0xC16C16B0, -0x6F5F02B2,0xC0E8B648,0x6F1461B0,0xC065AD70,0x6EC92683,0xBFE2FCDF,0x6E7D5193, -0xBF60A54A,0x6E30E34A,0xBEDEA765,0x6DE3DC11,0xBE5D03E6,0x6D963C54,0xBDDBBB7F, -0x6D48047E,0xBD5ACEE5,0x6CF934FC,0xBCDA3ECB,0x6CA9CE3B,0xBC5A0BE2,0x6C59D0A9, -0xBBDA36DD,0x6C093CB6,0xBB5AC06D,0x6BB812D1,0xBADBA943,0x6B66536B,0xBA5CF210, -0x6B13FEF5,0xB9DE9B83,0x6AC115E2,0xB960A64C,0x6A6D98A4,0xB8E31319,0x6A1987B0, -0xB865E299,0x69C4E37A,0xB7E9157A,0x696FAC78,0xB76CAC69,0x6919E320,0xB6F0A812, -0x68C387E9,0xB6750921,0x686C9B4B,0xB5F9D043,0x68151DBE,0xB57EFE22,0x67BD0FBD, -0xB5049368,0x676471C0,0xB48A90C0,0x670B4444,0xB410F6D3,0x66B187C3,0xB397C649, -0x66573CBB,0xB31EFFCC,0x65FC63A9,0xB2A6A402,0x65A0FD0B,0xB22EB392,0x6545095F, -0xB1B72F23,0x64E88926,0xB140175B,0x648B7CE0,0xB0C96CE0,0x642DE50D,0xB0533055, -0x63CFC231,0xAFDD625F,0x637114CC,0xAF6803A2,0x6311DD64,0xAEF314C0,0x62B21C7B, -0xAE7E965B,0x6251D298,0xAE0A8916,0x61F1003F,0xAD96ED92,0x618FA5F7,0xAD23C46E, -0x612DC447,0xACB10E4B,0x60CB5BB7,0xAC3ECBC7,0x60686CCF,0xABCCFD83,0x6004F819, -0xAB5BA41A,0x5FA0FE1F,0xAAEAC02C,0x5F3C7F6B,0xAA7A5253,0x5ED77C8A,0xAA0A5B2E, -0x5E71F606,0xA99ADB56,0x5E0BEC6E,0xA92BD367,0x5DA5604F,0xA8BD43FA,0x5D3E5237, -0xA84F2DAA,0x5CD6C2B5,0xA7E1910F,0x5C6EB258,0xA7746EC0,0x5C0621B2,0xA707C757, -0x5B9D1154,0xA69B9B68,0x5B3381CE,0xA62FEB8B,0x5AC973B5,0xA5C4B855,0x5A5EE79A, -0xA55A025B,0x59F3DE12,0xA4EFCA31,0x598857B2,0xA486106A,0x591C550E,0xA41CD599, -0x58AFD6BD,0xA3B41A50,0x5842DD54,0xA34BDF20,0x57D5696D,0xA2E4249B,0x57677B9D, -0xA27CEB4F,0x56F9147E,0xA21633CD,0x568A34A9,0xA1AFFEA3,0x561ADCB9,0xA14A4C5E, -0x55AB0D46,0xA0E51D8C,0x553AC6EE,0xA08072BA,0x54CA0A4B,0xA01C4C73,0x5458D7F9, -0x9FB8AB41,0x53E73097,0x9F558FB0,0x537514C2,0x9EF2FA49,0x53028518,0x9E90EB94, -0x528F8238,0x9E2F641B,0x521C0CC2,0x9DCE6463,0x51A82555,0x9D6DECF4,0x5133CC94, -0x9D0DFE54,0x50BF031F,0x9CAE9907,0x5049C999,0x9C4FBD93,0x4FD420A4,0x9BF16C7A, -0x4F5E08E3,0x9B93A641,0x4EE782FB,0x9B366B68,0x4E708F8F,0x9AD9BC71,0x4DF92F46, -0x9A7D99DE,0x4D8162C4,0x9A22042D,0x4D092AB0,0x99C6FBDE,0x4C9087B1,0x996C816F, -0x4C177A6E,0x9912955F,0x4B9E0390,0x98B93828,0x4B2423BE,0x98606A49,0x4AA9DBA2, -0x98082C3B,0x4A2F2BE6,0x97B07E7A,0x49B41533,0x9759617F,0x49389836,0x9702D5C3, -0x48BCB599,0x96ACDBBE,0x48406E08,0x965773E7,0x47C3C22F,0x96029EB6,0x4746B2BC, -0x95AE5C9F,0x46C9405C,0x955AAE17,0x464B6BBE,0x95079394,0x45CD358F,0x94B50D87, -0x454E9E80,0x94631C65,0x44CFA740,0x9411C09E,0x4450507E,0x93C0FAA3,0x43D09AED, -0x9370CAE4,0x4350873C,0x932131D1,0x42D0161E,0x92D22FD9,0x424F4845,0x9283C568, -0x41CE1E65,0x9235F2EC,0x414C992F,0x91E8B8D0,0x40CAB958,0x919C1781,0x40487F94, -0x91500F67,0x3FC5EC98,0x9104A0EE,0x3F430119,0x90B9CC7D,0x3EBFBDCD,0x906F927C, -0x3E3C2369,0x9025F352,0x3DB832A6,0x8FDCEF66,0x3D33EC39,0x8F94871D,0x3CAF50DA, -0x8F4CBADB,0x3C2A6142,0x8F058B04,0x3BA51E29,0x8EBEF7FB,0x3B1F8848,0x8E790222, -0x3A99A057,0x8E33A9DA,0x3A136712,0x8DEEEF82,0x398CDD32,0x8DAAD37B,0x39060373, -0x8D675623,0x387EDA8E,0x8D2477D8,0x37F76341,0x8CE238F6,0x376F9E46,0x8CA099DA, -0x36E78C5B,0x8C5F9ADE,0x365F2E3B,0x8C1F3C5D,0x35D684A6,0x8BDF7EB0,0x354D9057, -0x8BA0622F,0x34C4520D,0x8B61E733,0x343ACA87,0x8B240E11,0x33B0FA84,0x8AE6D720, -0x3326E2C3,0x8AAA42B4,0x329C8402,0x8A6E5123,0x3211DF04,0x8A3302BE,0x3186F487, -0x89F857D8,0x30FBC54D,0x89BE50C3,0x30705217,0x8984EDCF,0x2FE49BA7,0x894C2F4C, -0x2F58A2BE,0x89141589,0x2ECC681E,0x88DCA0D3,0x2E3FEC8B,0x88A5D177,0x2DB330C7, -0x886FA7C2,0x2D263596,0x883A23FF,0x2C98FBBA,0x88054677,0x2C0B83FA,0x87D10F75, -0x2B7DCF17,0x879D7F41,0x2AEFDDD8,0x876A9621,0x2A61B101,0x8738545E,0x29D34958, -0x8706BA3D,0x2944A7A2,0x86D5C802,0x28B5CCA5,0x86A57DF2,0x2826B928,0x8675DC4F, -0x27976DF1,0x8646E35C,0x2707EBC7,0x86189359,0x26783370,0x85EAEC88,0x25E845B6, -0x85BDEF28,0x2558235F,0x85919B76,0x24C7CD33,0x8565F1B0,0x243743FA,0x853AF214, -0x23A6887F,0x85109CDD,0x23159B88,0x84E6F244,0x22847DE0,0x84BDF286,0x21F3304F, -0x84959DD9,0x2161B3A0,0x846DF477,0x20D0089C,0x8446F695,0x203E300D,0x8420A46C, -0x1FAC2ABF,0x83FAFE2E,0x1F19F97B,0x83D60412,0x1E879D0D,0x83B1B649,0x1DF5163F, -0x838E1507,0x1D6265DD,0x836B207D,0x1CCF8CB3,0x8348D8DC,0x1C3C8B8C,0x83273E52, -0x1BA96335,0x83065110,0x1B161479,0x82E61141,0x1A82A026,0x82C67F14,0x19EF0707, -0x82A79AB3,0x195B49EA,0x8289644B,0x18C7699B,0x826BDC04,0x183366E9,0x824F0208, -0x179F429F,0x8232D67F,0x170AFD8D,0x82175990,0x1676987F,0x81FC8B60,0x15E21445, -0x81E26C16,0x154D71AA,0x81C8FBD6,0x14B8B17F,0x81B03AC2,0x1423D492,0x819828FD, -0x138EDBB1,0x8180C6A9,0x12F9C7AA,0x816A13E6,0x1264994E,0x815410D4,0x11CF516A, -0x813EBD90,0x1139F0CF,0x812A1A3A,0x10A4784B,0x811626EC,0x100EE8AD,0x8102E3C4, -0x0F7942C7,0x80F050DB,0x0EE38766,0x80DE6E4C,0x0E4DB75B,0x80CD3C2F,0x0DB7D376, -0x80BCBA9D,0x0D21DC87,0x80ACE9AB,0x0C8BD35E,0x809DC971,0x0BF5B8CB,0x808F5A02, -0x0B5F8D9F,0x80819B74,0x0AC952AA,0x80748DD9,0x0A3308BD,0x80683143,0x099CB0A7, -0x805C85C4,0x09064B3A,0x80518B6B,0x086FD947,0x80474248,0x07D95B9E,0x803DAA6A, -0x0742D311,0x8034C3DD,0x06AC406F,0x802C8EAD,0x0615A48B,0x80250AE7,0x057F0035, -0x801E3895,0x04E8543E,0x801817BF,0x0451A177,0x8012A86F,0x03BAE8B2,0x800DEAAD, -0x03242ABF,0x8009DE7E,0x028D6870,0x800683E8,0x01F6A297,0x8003DAF1,0x015FDA03, -0x8001E39B,0x00C90F88,0x80009DEA,0x003243F5,0x800009DF,0xFF9B781D,0x8000277A, -0xFF04ACD0,0x8000F6BD,0xFE6DE2E0,0x800277A6,0xFDD71B1E,0x8004AA32,0xFD40565C, -0x80078E5E,0xFCA9956A,0x800B2427,0xFC12D91A,0x800F6B88,0xFB7C223D,0x8014647B, -0xFAE571A4,0x801A0EF8,0xFA4EC821,0x80206AF8,0xF9B82684,0x80277872,0xF9218D9E, -0x802F375D,0xF88AFE42,0x8037A7AC,0xF7F4793E,0x8040C956,0xF75DFF66,0x804A9C4D, -0xF6C79188,0x80552084,0xF6313077,0x806055EB,0xF59ADD02,0x806C3C74,0xF50497FB, -0x8078D40D,0xF46E6231,0x80861CA6,0xF3D83C77,0x8094162C,0xF342279B,0x80A2C08B, -0xF2AC246E,0x80B21BAF,0xF21633C0,0x80C22784,0xF1805662,0x80D2E3F2,0xF0EA8D24, -0x80E450E2,0xF054D8D5,0x80F66E3C,0xEFBF3A45,0x81093BE8,0xEF29B243,0x811CB9CA, -0xEE9441A0,0x8130E7C9,0xEDFEE92B,0x8145C5C7,0xED69A9B3,0x815B53A8,0xECD48407, -0x8171914E,0xEC3F78F6,0x81887E9A,0xEBAA894F,0x81A01B6D,0xEB15B5E1,0x81B867A5, -0xEA80FF7A,0x81D16321,0xE9EC66E8,0x81EB0DBE,0xE957ECFB,0x82056758,0xE8C39280, -0x82206FCC,0xE82F5844,0x823C26F3,0xE79B3F16,0x82588CA7,0xE70747C4,0x8275A0C0, -0xE6737319,0x82936317,0xE5DFC1E5,0x82B1D381,0xE54C34F3,0x82D0F1D5,0xE4B8CD11, -0x82F0BDE8,0xE4258B0A,0x8311378D,0xE3926FAD,0x83325E97,0xE2FF7BC3,0x835432D8, -0xE26CB01B,0x8376B422,0xE1DA0D7E,0x8399E244,0xE14794BA,0x83BDBD0E,0xE0B54698, -0x83E2444D,0xE02323E5,0x840777D0,0xDF912D6B,0x842D5762,0xDEFF63F4,0x8453E2CF, -0xDE6DC84B,0x847B19E1,0xDDDC5B3B,0x84A2FC62,0xDD4B1D8C,0x84CB8A1B,0xDCBA1008, -0x84F4C2D4,0xDC293379,0x851EA652,0xDB9888A8,0x8549345C,0xDB08105E,0x85746CB8, -0xDA77CB63,0x85A04F28,0xD9E7BA7F,0x85CCDB70,0xD957DE7A,0x85FA1153,0xD8C8381D, -0x8627F091,0xD838C82D,0x865678EB,0xD7A98F73,0x8685AA20,0xD71A8EB5,0x86B583EE, -0xD68BC6BA,0x86E60614,0xD5FD3848,0x8717304E,0xD56EE424,0x87490258,0xD4E0CB15, -0x877B7BEC,0xD452EDDF,0x87AE9CC5,0xD3C54D47,0x87E2649B,0xD337EA12,0x8816D327, -0xD2AAC504,0x884BE821,0xD21DDEE2,0x8881A33D,0xD191386E,0x88B80432,0xD104D26B, -0x88EF0AB4,0xD078AD9E,0x8926B677,0xCFECCAC7,0x895F072E,0xCF612AAA,0x8997FC8A, -0xCED5CE08,0x89D1963C,0xCE4AB5A2,0x8A0BD3F5,0xCDBFE23A,0x8A46B564,0xCD355491, -0x8A823A36,0xCCAB0D65,0x8ABE6219,0xCC210D79,0x8AFB2CBB,0xCB97558A,0x8B3899C6, -0xCB0DE658,0x8B76A8E4,0xCA84C0A3,0x8BB559C1,0xC9FBE527,0x8BF4AC05,0xC97354A4, -0x8C349F58,0xC8EB0FD6,0x8C753362,0xC863177B,0x8CB667C8,0xC7DB6C50,0x8CF83C30, -0xC7540F11,0x8D3AB03F,0xC6CD0079,0x8D7DC399,0xC6464144,0x8DC175E0,0xC5BFD22E, -0x8E05C6B7,0xC539B3F1,0x8E4AB5BF,0xC4B3E746,0x8E904298,0xC42E6CE8,0x8ED66CE1, -0xC3A94590,0x8F1D343A,0xC32471F7,0x8F649840,0xC29FF2D4,0x8FAC988F,0xC21BC8E1, -0x8FF534C4,0xC197F4D4,0x903E6C7B,0xC1147764,0x90883F4D,0xC0915148,0x90D2ACD4, -0xC00E8336,0x911DB4A9,0xBF8C0DE3,0x91695663,0xBF09F205,0x91B5919A,0xBE88304F, -0x920265E4,0xBE06C977,0x924FD2D7,0xBD85BE30,0x929DD806,0xBD050F2C,0x92EC7505, -0xBC84BD1F,0x933BA968,0xBC04C8BA,0x938B74C1,0xBB8532B0,0x93DBD6A0,0xBB05FBB0, -0x942CCE96,0xBA87246D,0x947E5C33,0xBA08AD95,0x94D07F05,0xB98A97D8,0x9523369C, -0xB90CE3E6,0x95768283,0xB88F926D,0x95CA6247,0xB812A41A,0x961ED574,0xB796199B, -0x9673DB94,0xB719F39E,0x96C97432,0xB69E32CD,0x971F9ED7,0xB622D7D6,0x97765B0A, -0xB5A7E362,0x97CDA855,0xB52D561E,0x9825863D,0xB4B330B3,0x987DF449,0xB43973CA, -0x98D6F1FE,0xB3C0200C,0x99307EE0,0xB3473623,0x998A9A74,0xB2CEB6B5,0x99E5443B, -0xB256A26A,0x9A407BB9,0xB1DEF9E9,0x9A9C406E,0xB167BDD7,0x9AF891DB,0xB0F0EEDA, -0x9B556F81,0xB07A8D97,0x9BB2D8DE,0xB0049AB3,0x9C10CD70,0xAF8F16D1,0x9C6F4CB6, -0xAF1A0293,0x9CCE562C,0xAEA55E9E,0x9D2DE94D,0xAE312B92,0x9D8E0597,0xADBD6A10, -0x9DEEAA82,0xAD4A1ABA,0x9E4FD78A,0xACD73E30,0x9EB18C26,0xAC64D510,0x9F13C7D0, -0xABF2DFFB,0x9F7689FF,0xAB815F8D,0x9FD9D22A,0xAB105464,0xA03D9FC8,0xAA9FBF1E, -0xA0A1F24D,0xAA2FA056,0xA106C92F,0xA9BFF8A8,0xA16C23E1,0xA950C8B0,0xA1D201D7, -0xA8E21106,0xA2386284,0xA873D246,0xA29F4559,0xA8060D08,0xA306A9C8,0xA798C1E5, -0xA36E8F41,0xA72BF174,0xA3D6F534,0xA6BF9C4B,0xA43FDB10,0xA653C303,0xA4A94043, -0xA5E8662F,0xA513243B,0xA57D8666,0xA57D8666,0xA513243B,0xA5E8662F,0xA4A94043, -0xA653C303,0xA43FDB10,0xA6BF9C4B,0xA3D6F534,0xA72BF174,0xA36E8F41,0xA798C1E5, -0xA306A9C8,0xA8060D08,0xA29F4559,0xA873D246,0xA2386284,0xA8E21106,0xA1D201D7, -0xA950C8B0,0xA16C23E1,0xA9BFF8A8,0xA106C92F,0xAA2FA056,0xA0A1F24D,0xAA9FBF1E, -0xA03D9FC8,0xAB105464,0x9FD9D22A,0xAB815F8D,0x9F7689FF,0xABF2DFFB,0x9F13C7D0, -0xAC64D510,0x9EB18C26,0xACD73E30,0x9E4FD78A,0xAD4A1ABA,0x9DEEAA82,0xADBD6A10, -0x9D8E0597,0xAE312B92,0x9D2DE94D,0xAEA55E9E,0x9CCE562C,0xAF1A0293,0x9C6F4CB6, -0xAF8F16D1,0x9C10CD70,0xB0049AB3,0x9BB2D8DE,0xB07A8D97,0x9B556F81,0xB0F0EEDA, -0x9AF891DB,0xB167BDD7,0x9A9C406E,0xB1DEF9E9,0x9A407BB9,0xB256A26A,0x99E5443B, -0xB2CEB6B5,0x998A9A74,0xB3473623,0x99307EE0,0xB3C0200C,0x98D6F1FE,0xB43973CA, -0x987DF449,0xB4B330B3,0x9825863D,0xB52D561E,0x97CDA855,0xB5A7E362,0x97765B0A, -0xB622D7D6,0x971F9ED7,0xB69E32CD,0x96C97432,0xB719F39E,0x9673DB94,0xB796199B, -0x961ED574,0xB812A41A,0x95CA6247,0xB88F926D,0x95768283,0xB90CE3E6,0x9523369C, -0xB98A97D8,0x94D07F05,0xBA08AD95,0x947E5C33,0xBA87246D,0x942CCE96,0xBB05FBB0, -0x93DBD6A0,0xBB8532B0,0x938B74C1,0xBC04C8BA,0x933BA968,0xBC84BD1F,0x92EC7505, -0xBD050F2C,0x929DD806,0xBD85BE30,0x924FD2D7,0xBE06C977,0x920265E4,0xBE88304F, -0x91B5919A,0xBF09F205,0x91695663,0xBF8C0DE3,0x911DB4A9,0xC00E8336,0x90D2ACD4, -0xC0915148,0x90883F4D,0xC1147764,0x903E6C7B,0xC197F4D4,0x8FF534C4,0xC21BC8E1, -0x8FAC988F,0xC29FF2D4,0x8F649840,0xC32471F7,0x8F1D343A,0xC3A94590,0x8ED66CE1, -0xC42E6CE8,0x8E904298,0xC4B3E746,0x8E4AB5BF,0xC539B3F1,0x8E05C6B7,0xC5BFD22E, -0x8DC175E0,0xC6464144,0x8D7DC399,0xC6CD0079,0x8D3AB03F,0xC7540F11,0x8CF83C30, -0xC7DB6C50,0x8CB667C8,0xC863177B,0x8C753362,0xC8EB0FD6,0x8C349F58,0xC97354A4, -0x8BF4AC05,0xC9FBE527,0x8BB559C1,0xCA84C0A3,0x8B76A8E4,0xCB0DE658,0x8B3899C6, -0xCB97558A,0x8AFB2CBB,0xCC210D79,0x8ABE6219,0xCCAB0D65,0x8A823A36,0xCD355491, -0x8A46B564,0xCDBFE23A,0x8A0BD3F5,0xCE4AB5A2,0x89D1963C,0xCED5CE08,0x8997FC8A, -0xCF612AAA,0x895F072E,0xCFECCAC7,0x8926B677,0xD078AD9E,0x88EF0AB4,0xD104D26B, -0x88B80432,0xD191386E,0x8881A33D,0xD21DDEE2,0x884BE821,0xD2AAC504,0x8816D327, -0xD337EA12,0x87E2649B,0xD3C54D47,0x87AE9CC5,0xD452EDDF,0x877B7BEC,0xD4E0CB15, -0x87490258,0xD56EE424,0x8717304E,0xD5FD3848,0x86E60614,0xD68BC6BA,0x86B583EE, -0xD71A8EB5,0x8685AA20,0xD7A98F73,0x865678EB,0xD838C82D,0x8627F091,0xD8C8381D, -0x85FA1153,0xD957DE7A,0x85CCDB70,0xD9E7BA7F,0x85A04F28,0xDA77CB63,0x85746CB8, -0xDB08105E,0x8549345C,0xDB9888A8,0x851EA652,0xDC293379,0x84F4C2D4,0xDCBA1008, -0x84CB8A1B,0xDD4B1D8C,0x84A2FC62,0xDDDC5B3B,0x847B19E1,0xDE6DC84B,0x8453E2CF, -0xDEFF63F4,0x842D5762,0xDF912D6B,0x840777D0,0xE02323E5,0x83E2444D,0xE0B54698, -0x83BDBD0E,0xE14794BA,0x8399E244,0xE1DA0D7E,0x8376B422,0xE26CB01B,0x835432D8, -0xE2FF7BC3,0x83325E97,0xE3926FAD,0x8311378D,0xE4258B0A,0x82F0BDE8,0xE4B8CD11, -0x82D0F1D5,0xE54C34F3,0x82B1D381,0xE5DFC1E5,0x82936317,0xE6737319,0x8275A0C0, -0xE70747C4,0x82588CA7,0xE79B3F16,0x823C26F3,0xE82F5844,0x82206FCC,0xE8C39280, -0x82056758,0xE957ECFB,0x81EB0DBE,0xE9EC66E8,0x81D16321,0xEA80FF7A,0x81B867A5, -0xEB15B5E1,0x81A01B6D,0xEBAA894F,0x81887E9A,0xEC3F78F6,0x8171914E,0xECD48407, -0x815B53A8,0xED69A9B3,0x8145C5C7,0xEDFEE92B,0x8130E7C9,0xEE9441A0,0x811CB9CA, -0xEF29B243,0x81093BE8,0xEFBF3A45,0x80F66E3C,0xF054D8D5,0x80E450E2,0xF0EA8D24, -0x80D2E3F2,0xF1805662,0x80C22784,0xF21633C0,0x80B21BAF,0xF2AC246E,0x80A2C08B, -0xF342279B,0x8094162C,0xF3D83C77,0x80861CA6,0xF46E6231,0x8078D40D,0xF50497FB, -0x806C3C74,0xF59ADD02,0x806055EB,0xF6313077,0x80552084,0xF6C79188,0x804A9C4D, -0xF75DFF66,0x8040C956,0xF7F4793E,0x8037A7AC,0xF88AFE42,0x802F375D,0xF9218D9E, -0x80277872,0xF9B82684,0x80206AF8,0xFA4EC821,0x801A0EF8,0xFAE571A4,0x8014647B, -0xFB7C223D,0x800F6B88,0xFC12D91A,0x800B2427,0xFCA9956A,0x80078E5E,0xFD40565C, -0x8004AA32,0xFDD71B1E,0x800277A6,0xFE6DE2E0,0x8000F6BD,0xFF04ACD0,0x8000277A, -0xFF9B781D,0x800009DF,0x003243F5,0x80009DEA,0x00C90F88,0x8001E39B,0x015FDA03, -0x8003DAF1,0x01F6A297,0x800683E8,0x028D6870,0x8009DE7E,0x03242ABF,0x800DEAAD, -0x03BAE8B2,0x8012A86F,0x0451A177,0x801817BF,0x04E8543E,0x801E3895,0x057F0035, -0x80250AE7,0x0615A48B,0x802C8EAD,0x06AC406F,0x8034C3DD,0x0742D311,0x803DAA6A, -0x07D95B9E,0x80474248,0x086FD947,0x80518B6B,0x09064B3A,0x805C85C4,0x099CB0A7, -0x80683143,0x0A3308BD,0x80748DD9,0x0AC952AA,0x80819B74,0x0B5F8D9F,0x808F5A02, -0x0BF5B8CB,0x809DC971,0x0C8BD35E,0x80ACE9AB,0x0D21DC87,0x80BCBA9D,0x0DB7D376, -0x80CD3C2F,0x0E4DB75B,0x80DE6E4C,0x0EE38766,0x80F050DB,0x0F7942C7,0x8102E3C4, -0x100EE8AD,0x811626EC,0x10A4784B,0x812A1A3A,0x1139F0CF,0x813EBD90,0x11CF516A, -0x815410D4,0x1264994E,0x816A13E6,0x12F9C7AA,0x8180C6A9,0x138EDBB1,0x819828FD, -0x1423D492,0x81B03AC2,0x14B8B17F,0x81C8FBD6,0x154D71AA,0x81E26C16,0x15E21445, -0x81FC8B60,0x1676987F,0x82175990,0x170AFD8D,0x8232D67F,0x179F429F,0x824F0208, -0x183366E9,0x826BDC04,0x18C7699B,0x8289644B,0x195B49EA,0x82A79AB3,0x19EF0707, -0x82C67F14,0x1A82A026,0x82E61141,0x1B161479,0x83065110,0x1BA96335,0x83273E52, -0x1C3C8B8C,0x8348D8DC,0x1CCF8CB3,0x836B207D,0x1D6265DD,0x838E1507,0x1DF5163F, -0x83B1B649,0x1E879D0D,0x83D60412,0x1F19F97B,0x83FAFE2E,0x1FAC2ABF,0x8420A46C, -0x203E300D,0x8446F695,0x20D0089C,0x846DF477,0x2161B3A0,0x84959DD9,0x21F3304F, -0x84BDF286,0x22847DE0,0x84E6F244,0x23159B88,0x85109CDD,0x23A6887F,0x853AF214, -0x243743FA,0x8565F1B0,0x24C7CD33,0x85919B76,0x2558235F,0x85BDEF28,0x25E845B6, -0x85EAEC88,0x26783370,0x86189359,0x2707EBC7,0x8646E35C,0x27976DF1,0x8675DC4F, -0x2826B928,0x86A57DF2,0x28B5CCA5,0x86D5C802,0x2944A7A2,0x8706BA3D,0x29D34958, -0x8738545E,0x2A61B101,0x876A9621,0x2AEFDDD8,0x879D7F41,0x2B7DCF17,0x87D10F75, -0x2C0B83FA,0x88054677,0x2C98FBBA,0x883A23FF,0x2D263596,0x886FA7C2,0x2DB330C7, -0x88A5D177,0x2E3FEC8B,0x88DCA0D3,0x2ECC681E,0x89141589,0x2F58A2BE,0x894C2F4C, -0x2FE49BA7,0x8984EDCF,0x30705217,0x89BE50C3,0x30FBC54D,0x89F857D8,0x3186F487, -0x8A3302BE,0x3211DF04,0x8A6E5123,0x329C8402,0x8AAA42B4,0x3326E2C3,0x8AE6D720, -0x33B0FA84,0x8B240E11,0x343ACA87,0x8B61E733,0x34C4520D,0x8BA0622F,0x354D9057, -0x8BDF7EB0,0x35D684A6,0x8C1F3C5D,0x365F2E3B,0x8C5F9ADE,0x36E78C5B,0x8CA099DA, -0x376F9E46,0x8CE238F6,0x37F76341,0x8D2477D8,0x387EDA8E,0x8D675623,0x39060373, -0x8DAAD37B,0x398CDD32,0x8DEEEF82,0x3A136712,0x8E33A9DA,0x3A99A057,0x8E790222, -0x3B1F8848,0x8EBEF7FB,0x3BA51E29,0x8F058B04,0x3C2A6142,0x8F4CBADB,0x3CAF50DA, -0x8F94871D,0x3D33EC39,0x8FDCEF66,0x3DB832A6,0x9025F352,0x3E3C2369,0x906F927C, -0x3EBFBDCD,0x90B9CC7D,0x3F430119,0x9104A0EE,0x3FC5EC98,0x91500F67,0x40487F94, -0x919C1781,0x40CAB958,0x91E8B8D0,0x414C992F,0x9235F2EC,0x41CE1E65,0x9283C568, -0x424F4845,0x92D22FD9,0x42D0161E,0x932131D1,0x4350873C,0x9370CAE4,0x43D09AED, -0x93C0FAA3,0x4450507E,0x9411C09E,0x44CFA740,0x94631C65,0x454E9E80,0x94B50D87, -0x45CD358F,0x95079394,0x464B6BBE,0x955AAE17,0x46C9405C,0x95AE5C9F,0x4746B2BC, -0x96029EB6,0x47C3C22F,0x965773E7,0x48406E08,0x96ACDBBE,0x48BCB599,0x9702D5C3, -0x49389836,0x9759617F,0x49B41533,0x97B07E7A,0x4A2F2BE6,0x98082C3B,0x4AA9DBA2, -0x98606A49,0x4B2423BE,0x98B93828,0x4B9E0390,0x9912955F,0x4C177A6E,0x996C816F, -0x4C9087B1,0x99C6FBDE,0x4D092AB0,0x9A22042D,0x4D8162C4,0x9A7D99DE,0x4DF92F46, -0x9AD9BC71,0x4E708F8F,0x9B366B68,0x4EE782FB,0x9B93A641,0x4F5E08E3,0x9BF16C7A, -0x4FD420A4,0x9C4FBD93,0x5049C999,0x9CAE9907,0x50BF031F,0x9D0DFE54,0x5133CC94, -0x9D6DECF4,0x51A82555,0x9DCE6463,0x521C0CC2,0x9E2F641B,0x528F8238,0x9E90EB94, -0x53028518,0x9EF2FA49,0x537514C2,0x9F558FB0,0x53E73097,0x9FB8AB41,0x5458D7F9, -0xA01C4C73,0x54CA0A4B,0xA08072BA,0x553AC6EE,0xA0E51D8C,0x55AB0D46,0xA14A4C5E, -0x561ADCB9,0xA1AFFEA3,0x568A34A9,0xA21633CD,0x56F9147E,0xA27CEB4F,0x57677B9D, -0xA2E4249B,0x57D5696D,0xA34BDF20,0x5842DD54,0xA3B41A50,0x58AFD6BD,0xA41CD599, -0x591C550E,0xA486106A,0x598857B2,0xA4EFCA31,0x59F3DE12,0xA55A025B,0x5A5EE79A, -0xA5C4B855,0x5AC973B5,0xA62FEB8B,0x5B3381CE,0xA69B9B68,0x5B9D1154,0xA707C757, -0x5C0621B2,0xA7746EC0,0x5C6EB258,0xA7E1910F,0x5CD6C2B5,0xA84F2DAA,0x5D3E5237, -0xA8BD43FA,0x5DA5604F,0xA92BD367,0x5E0BEC6E,0xA99ADB56,0x5E71F606,0xAA0A5B2E, -0x5ED77C8A,0xAA7A5253,0x5F3C7F6B,0xAAEAC02C,0x5FA0FE1F,0xAB5BA41A,0x6004F819, -0xABCCFD83,0x60686CCF,0xAC3ECBC7,0x60CB5BB7,0xACB10E4B,0x612DC447,0xAD23C46E, -0x618FA5F7,0xAD96ED92,0x61F1003F,0xAE0A8916,0x6251D298,0xAE7E965B,0x62B21C7B, -0xAEF314C0,0x6311DD64,0xAF6803A2,0x637114CC,0xAFDD625F,0x63CFC231,0xB0533055, -0x642DE50D,0xB0C96CE0,0x648B7CE0,0xB140175B,0x64E88926,0xB1B72F23,0x6545095F, -0xB22EB392,0x65A0FD0B,0xB2A6A402,0x65FC63A9,0xB31EFFCC,0x66573CBB,0xB397C649, -0x66B187C3,0xB410F6D3,0x670B4444,0xB48A90C0,0x676471C0,0xB5049368,0x67BD0FBD, -0xB57EFE22,0x68151DBE,0xB5F9D043,0x686C9B4B,0xB6750921,0x68C387E9,0xB6F0A812, -0x6919E320,0xB76CAC69,0x696FAC78,0xB7E9157A,0x69C4E37A,0xB865E299,0x6A1987B0, -0xB8E31319,0x6A6D98A4,0xB960A64C,0x6AC115E2,0xB9DE9B83,0x6B13FEF5,0xBA5CF210, -0x6B66536B,0xBADBA943,0x6BB812D1,0xBB5AC06D,0x6C093CB6,0xBBDA36DD,0x6C59D0A9, -0xBC5A0BE2,0x6CA9CE3B,0xBCDA3ECB,0x6CF934FC,0xBD5ACEE5,0x6D48047E,0xBDDBBB7F, -0x6D963C54,0xBE5D03E6,0x6DE3DC11,0xBEDEA765,0x6E30E34A,0xBF60A54A,0x6E7D5193, -0xBFE2FCDF,0x6EC92683,0xC065AD70,0x6F1461B0,0xC0E8B648,0x6F5F02B2,0xC16C16B0, -0x6FA90921,0xC1EFCDF3,0x6FF27497,0xC273DB58,0x703B44AD,0xC2F83E2A,0x708378FF, -0xC37CF5B0,0x70CB1128,0xC4020133,0x71120CC5,0xC4875FF9,0x71586B74,0xC50D1149, -0x719E2CD2,0xC593146A,0x71E35080,0xC61968A2,0x7227D61C,0xC6A00D37,0x726BBD48, -0xC727016D,0x72AF05A7,0xC7AE4489,0x72F1AED9,0xC835D5D0,0x7333B883,0xC8BDB485, -0x73752249,0xC945DFEC,0x73B5EBD1,0xC9CE5748,0x73F614C0,0xCA5719DB,0x74359CBD, -0xCAE026E8,0x74748371,0xCB697DB0,0x74B2C884,0xCBF31D75,0x74F06B9E,0xCC7D0578, -0x752D6C6C,0xCD0734F9,0x7569CA99,0xCD91AB39,0x75A585CF,0xCE1C6777,0x75E09DBD, -0xCEA768F2,0x761B1211,0xCF32AEEB,0x7654E279,0xCFBE389F,0x768E0EA6,0xD04A054E, -0x76C69647,0xD0D61434,0x76FE790E,0xD1626490,0x7735B6AF,0xD1EEF59E,0x776C4EDB, -0xD27BC69C,0x77A24148,0xD308D6C7,0x77D78DAA,0xD396255A,0x780C33B8,0xD423B191, -0x78403329,0xD4B17AA8,0x78738BB3,0xD53F7FDA,0x78A63D11,0xD5CDC062,0x78D846FB, -0xD65C3B7B,0x7909A92D,0xD6EAF05F,0x793A6361,0xD779DE47,0x796A7554,0xD809046E, -0x7999DEC4,0xD898620C,0x79C89F6E,0xD927F65B,0x79F6B711,0xD9B7C094,0x7A24256F, -0xDA47BFEE,0x7A50EA47,0xDAD7F3A2,0x7A7D055B,0xDB685AE9,0x7AA8766F,0xDBF8F4F8, -0x7AD33D45,0xDC89C109,0x7AFD59A4,0xDD1ABE51,0x7B26CB4F,0xDDABEC08,0x7B4F920E, -0xDE3D4964,0x7B77ADA8,0xDECED59B,0x7B9F1DE6,0xDF608FE4,0x7BC5E290,0xDFF27773, -0x7BEBFB70,0xE0848B7F,0x7C116853,0xE116CB3D,0x7C362904,0xE1A935E2,0x7C5A3D50, -0xE23BCAA2,0x7C7DA505,0xE2CE88B3,0x7CA05FF1,0xE3616F48,0x7CC26DE5,0xE3F47D96, -0x7CE3CEB2,0xE487B2D0,0x7D048228,0xE51B0E2A,0x7D24881B,0xE5AE8ED8,0x7D43E05E, -0xE642340D,0x7D628AC6,0xE6D5FCFC,0x7D808728,0xE769E8D8,0x7D9DD55A,0xE7FDF6D4, -0x7DBA7534,0xE8922622,0x7DD6668F,0xE92675F4,0x7DF1A942,0xE9BAE57D,0x7E0C3D29, -0xEA4F73EE,0x7E26221F,0xEAE4207A,0x7E3F57FF,0xEB78EA52,0x7E57DEA7,0xEC0DD0A8, -0x7E6FB5F4,0xECA2D2AD,0x7E86DDC6,0xED37EF91,0x7E9D55FC,0xEDCD2687,0x7EB31E78, -0xEE6276BF,0x7EC8371A,0xEEF7DF6A,0x7EDC9FC6,0xEF8D5FB8,0x7EF05860,0xF022F6DA, -0x7F0360CB,0xF0B8A401,0x7F15B8EE,0xF14E665C,0x7F2760AF,0xF1E43D1C,0x7F3857F6, -0xF27A2771,0x7F489EAA,0xF310248A,0x7F5834B7,0xF3A63398,0x7F671A05,0xF43C53CB, -0x7F754E80,0xF4D28451,0x7F82D214,0xF568C45B,0x7F8FA4B0,0xF5FF1318,0x7F9BC640, -0xF6956FB7,0x7FA736B4,0xF72BD967,0x7FB1F5FC,0xF7C24F59,0x7FBC040A,0xF858D0BB, -0x7FC560CF,0xF8EF5CBB,0x7FCE0C3E,0xF985F28A,0x7FD6064C,0xFA1C9157,0x7FDD4EEC, -0xFAB3384F,0x7FE3E616,0xFB49E6A3,0x7FE9CBC0,0xFBE09B80,0x7FEEFFE1,0xFC775616, -0x7FF38274,0xFD0E1594,0x7FF75370,0xFDA4D929,0x7FFA72D1,0xFE3BA002,0x7FFCE093, -0xFED2694F,0x7FFE9CB2,0xFF69343F,0x7FFFA72C,0x7FFFFFFF,0x00000000,0x7FFA72D1, -0xFDA4D929,0x7FE9CBC0,0xFB49E6A3,0x7FCE0C3E,0xF8EF5CBB,0x7FA736B4,0xF6956FB7, -0x7F754E80,0xF43C53CB,0x7F3857F6,0xF1E43D1C,0x7EF05860,0xEF8D5FB8,0x7E9D55FC, -0xED37EF91,0x7E3F57FF,0xEAE4207A,0x7DD6668F,0xE8922622,0x7D628AC6,0xE642340D, -0x7CE3CEB2,0xE3F47D96,0x7C5A3D50,0xE1A935E2,0x7BC5E290,0xDF608FE4,0x7B26CB4F, -0xDD1ABE51,0x7A7D055B,0xDAD7F3A2,0x79C89F6E,0xD898620C,0x7909A92D,0xD65C3B7B, -0x78403329,0xD423B191,0x776C4EDB,0xD1EEF59E,0x768E0EA6,0xCFBE389F,0x75A585CF, -0xCD91AB39,0x74B2C884,0xCB697DB0,0x73B5EBD1,0xC945DFEC,0x72AF05A7,0xC727016D, -0x719E2CD2,0xC50D1149,0x708378FF,0xC2F83E2A,0x6F5F02B2,0xC0E8B648,0x6E30E34A, -0xBEDEA765,0x6CF934FC,0xBCDA3ECB,0x6BB812D1,0xBADBA943,0x6A6D98A4,0xB8E31319, -0x6919E320,0xB6F0A812,0x67BD0FBD,0xB5049368,0x66573CBB,0xB31EFFCC,0x64E88926, -0xB140175B,0x637114CC,0xAF6803A2,0x61F1003F,0xAD96ED92,0x60686CCF,0xABCCFD83, -0x5ED77C8A,0xAA0A5B2E,0x5D3E5237,0xA84F2DAA,0x5B9D1154,0xA69B9B68,0x59F3DE12, -0xA4EFCA31,0x5842DD54,0xA34BDF20,0x568A34A9,0xA1AFFEA3,0x54CA0A4B,0xA01C4C73, -0x53028518,0x9E90EB94,0x5133CC94,0x9D0DFE54,0x4F5E08E3,0x9B93A641,0x4D8162C4, -0x9A22042D,0x4B9E0390,0x98B93828,0x49B41533,0x9759617F,0x47C3C22F,0x96029EB6, -0x45CD358F,0x94B50D87,0x43D09AED,0x9370CAE4,0x41CE1E65,0x9235F2EC,0x3FC5EC98, -0x9104A0EE,0x3DB832A6,0x8FDCEF66,0x3BA51E29,0x8EBEF7FB,0x398CDD32,0x8DAAD37B, -0x376F9E46,0x8CA099DA,0x354D9057,0x8BA0622F,0x3326E2C3,0x8AAA42B4,0x30FBC54D, -0x89BE50C3,0x2ECC681E,0x88DCA0D3,0x2C98FBBA,0x88054677,0x2A61B101,0x8738545E, -0x2826B928,0x8675DC4F,0x25E845B6,0x85BDEF28,0x23A6887F,0x85109CDD,0x2161B3A0, -0x846DF477,0x1F19F97B,0x83D60412,0x1CCF8CB3,0x8348D8DC,0x1A82A026,0x82C67F14, -0x183366E9,0x824F0208,0x15E21445,0x81E26C16,0x138EDBB1,0x8180C6A9,0x1139F0CF, -0x812A1A3A,0x0EE38766,0x80DE6E4C,0x0C8BD35E,0x809DC971,0x0A3308BD,0x80683143, -0x07D95B9E,0x803DAA6A,0x057F0035,0x801E3895,0x03242ABF,0x8009DE7E,0x00C90F88, -0x80009DEA,0xFE6DE2E0,0x800277A6,0xFC12D91A,0x800F6B88,0xF9B82684,0x80277872, -0xF75DFF66,0x804A9C4D,0xF50497FB,0x8078D40D,0xF2AC246E,0x80B21BAF,0xF054D8D5, -0x80F66E3C,0xEDFEE92B,0x8145C5C7,0xEBAA894F,0x81A01B6D,0xE957ECFB,0x82056758, -0xE70747C4,0x8275A0C0,0xE4B8CD11,0x82F0BDE8,0xE26CB01B,0x8376B422,0xE02323E5, -0x840777D0,0xDDDC5B3B,0x84A2FC62,0xDB9888A8,0x8549345C,0xD957DE7A,0x85FA1153, -0xD71A8EB5,0x86B583EE,0xD4E0CB15,0x877B7BEC,0xD2AAC504,0x884BE821,0xD078AD9E, -0x8926B677,0xCE4AB5A2,0x8A0BD3F5,0xCC210D79,0x8AFB2CBB,0xC9FBE527,0x8BF4AC05, -0xC7DB6C50,0x8CF83C30,0xC5BFD22E,0x8E05C6B7,0xC3A94590,0x8F1D343A,0xC197F4D4, -0x903E6C7B,0xBF8C0DE3,0x91695663,0xBD85BE30,0x929DD806,0xBB8532B0,0x93DBD6A0, -0xB98A97D8,0x9523369C,0xB796199B,0x9673DB94,0xB5A7E362,0x97CDA855,0xB3C0200C, -0x99307EE0,0xB1DEF9E9,0x9A9C406E,0xB0049AB3,0x9C10CD70,0xAE312B92,0x9D8E0597, -0xAC64D510,0x9F13C7D0,0xAA9FBF1E,0xA0A1F24D,0xA8E21106,0xA2386284,0xA72BF174, -0xA3D6F534,0xA57D8666,0xA57D8666,0xA3D6F534,0xA72BF174,0xA2386284,0xA8E21106, -0xA0A1F24D,0xAA9FBF1E,0x9F13C7D0,0xAC64D510,0x9D8E0597,0xAE312B92,0x9C10CD70, -0xB0049AB3,0x9A9C406E,0xB1DEF9E9,0x99307EE0,0xB3C0200C,0x97CDA855,0xB5A7E362, -0x9673DB94,0xB796199B,0x9523369C,0xB98A97D8,0x93DBD6A0,0xBB8532B0,0x929DD806, -0xBD85BE30,0x91695663,0xBF8C0DE3,0x903E6C7B,0xC197F4D4,0x8F1D343A,0xC3A94590, -0x8E05C6B7,0xC5BFD22E,0x8CF83C30,0xC7DB6C50,0x8BF4AC05,0xC9FBE527,0x8AFB2CBB, -0xCC210D79,0x8A0BD3F5,0xCE4AB5A2,0x8926B677,0xD078AD9E,0x884BE821,0xD2AAC504, -0x877B7BEC,0xD4E0CB15,0x86B583EE,0xD71A8EB5,0x85FA1153,0xD957DE7A,0x8549345C, -0xDB9888A8,0x84A2FC62,0xDDDC5B3B,0x840777D0,0xE02323E5,0x8376B422,0xE26CB01B, -0x82F0BDE8,0xE4B8CD11,0x8275A0C0,0xE70747C4,0x82056758,0xE957ECFB,0x81A01B6D, -0xEBAA894F,0x8145C5C7,0xEDFEE92B,0x80F66E3C,0xF054D8D5,0x80B21BAF,0xF2AC246E, -0x8078D40D,0xF50497FB,0x804A9C4D,0xF75DFF66,0x80277872,0xF9B82684,0x800F6B88, -0xFC12D91A,0x800277A6,0xFE6DE2E0,0x80009DEA,0x00C90F88,0x8009DE7E,0x03242ABF, -0x801E3895,0x057F0035,0x803DAA6A,0x07D95B9E,0x80683143,0x0A3308BD,0x809DC971, -0x0C8BD35E,0x80DE6E4C,0x0EE38766,0x812A1A3A,0x1139F0CF,0x8180C6A9,0x138EDBB1, -0x81E26C16,0x15E21445,0x824F0208,0x183366E9,0x82C67F14,0x1A82A026,0x8348D8DC, -0x1CCF8CB3,0x83D60412,0x1F19F97B,0x846DF477,0x2161B3A0,0x85109CDD,0x23A6887F, -0x85BDEF28,0x25E845B6,0x8675DC4F,0x2826B928,0x8738545E,0x2A61B101,0x88054677, -0x2C98FBBA,0x88DCA0D3,0x2ECC681E,0x89BE50C3,0x30FBC54D,0x8AAA42B4,0x3326E2C3, -0x8BA0622F,0x354D9057,0x8CA099DA,0x376F9E46,0x8DAAD37B,0x398CDD32,0x8EBEF7FB, -0x3BA51E29,0x8FDCEF66,0x3DB832A6,0x9104A0EE,0x3FC5EC98,0x9235F2EC,0x41CE1E65, -0x9370CAE4,0x43D09AED,0x94B50D87,0x45CD358F,0x96029EB6,0x47C3C22F,0x9759617F, -0x49B41533,0x98B93828,0x4B9E0390,0x9A22042D,0x4D8162C4,0x9B93A641,0x4F5E08E3, -0x9D0DFE54,0x5133CC94,0x9E90EB94,0x53028518,0xA01C4C73,0x54CA0A4B,0xA1AFFEA3, -0x568A34A9,0xA34BDF20,0x5842DD54,0xA4EFCA31,0x59F3DE12,0xA69B9B68,0x5B9D1154, -0xA84F2DAA,0x5D3E5237,0xAA0A5B2E,0x5ED77C8A,0xABCCFD83,0x60686CCF,0xAD96ED92, -0x61F1003F,0xAF6803A2,0x637114CC,0xB140175B,0x64E88926,0xB31EFFCC,0x66573CBB, -0xB5049368,0x67BD0FBD,0xB6F0A812,0x6919E320,0xB8E31319,0x6A6D98A4,0xBADBA943, -0x6BB812D1,0xBCDA3ECB,0x6CF934FC,0xBEDEA765,0x6E30E34A,0xC0E8B648,0x6F5F02B2, -0xC2F83E2A,0x708378FF,0xC50D1149,0x719E2CD2,0xC727016D,0x72AF05A7,0xC945DFEC, -0x73B5EBD1,0xCB697DB0,0x74B2C884,0xCD91AB39,0x75A585CF,0xCFBE389F,0x768E0EA6, -0xD1EEF59E,0x776C4EDB,0xD423B191,0x78403329,0xD65C3B7B,0x7909A92D,0xD898620C, -0x79C89F6E,0xDAD7F3A2,0x7A7D055B,0xDD1ABE51,0x7B26CB4F,0xDF608FE4,0x7BC5E290, -0xE1A935E2,0x7C5A3D50,0xE3F47D96,0x7CE3CEB2,0xE642340D,0x7D628AC6,0xE8922622, -0x7DD6668F,0xEAE4207A,0x7E3F57FF,0xED37EF91,0x7E9D55FC,0xEF8D5FB8,0x7EF05860, -0xF1E43D1C,0x7F3857F6,0xF43C53CB,0x7F754E80,0xF6956FB7,0x7FA736B4,0xF8EF5CBB, -0x7FCE0C3E,0xFB49E6A3,0x7FE9CBC0,0xFDA4D929,0x7FFA72D1,0x7FFFFFFF,0x00000000, -0x7FA736B4,0xF6956FB7,0x7E9D55FC,0xED37EF91,0x7CE3CEB2,0xE3F47D96,0x7A7D055B, -0xDAD7F3A2,0x776C4EDB,0xD1EEF59E,0x73B5EBD1,0xC945DFEC,0x6F5F02B2,0xC0E8B648, -0x6A6D98A4,0xB8E31319,0x64E88926,0xB140175B,0x5ED77C8A,0xAA0A5B2E,0x5842DD54, -0xA34BDF20,0x5133CC94,0x9D0DFE54,0x49B41533,0x9759617F,0x41CE1E65,0x9235F2EC, -0x398CDD32,0x8DAAD37B,0x30FBC54D,0x89BE50C3,0x2826B928,0x8675DC4F,0x1F19F97B, -0x83D60412,0x15E21445,0x81E26C16,0x0C8BD35E,0x809DC971,0x03242ABF,0x8009DE7E, -0xF9B82684,0x80277872,0xF054D8D5,0x80F66E3C,0xE70747C4,0x8275A0C0,0xDDDC5B3B, -0x84A2FC62,0xD4E0CB15,0x877B7BEC,0xCC210D79,0x8AFB2CBB,0xC3A94590,0x8F1D343A, -0xBB8532B0,0x93DBD6A0,0xB3C0200C,0x99307EE0,0xAC64D510,0x9F13C7D0,0xA57D8666, -0xA57D8666,0x9F13C7D0,0xAC64D510,0x99307EE0,0xB3C0200C,0x93DBD6A0,0xBB8532B0, -0x8F1D343A,0xC3A94590,0x8AFB2CBB,0xCC210D79,0x877B7BEC,0xD4E0CB15,0x84A2FC62, -0xDDDC5B3B,0x8275A0C0,0xE70747C4,0x80F66E3C,0xF054D8D5,0x80277872,0xF9B82684, -0x8009DE7E,0x03242ABF,0x809DC971,0x0C8BD35E,0x81E26C16,0x15E21445,0x83D60412, -0x1F19F97B,0x8675DC4F,0x2826B928,0x89BE50C3,0x30FBC54D,0x8DAAD37B,0x398CDD32, -0x9235F2EC,0x41CE1E65,0x9759617F,0x49B41533,0x9D0DFE54,0x5133CC94,0xA34BDF20, -0x5842DD54,0xAA0A5B2E,0x5ED77C8A,0xB140175B,0x64E88926,0xB8E31319,0x6A6D98A4, -0xC0E8B648,0x6F5F02B2,0xC945DFEC,0x73B5EBD1,0xD1EEF59E,0x776C4EDB,0xDAD7F3A2, -0x7A7D055B,0xE3F47D96,0x7CE3CEB2,0xED37EF91,0x7E9D55FC,0xF6956FB7,0x7FA736B4, -0x7FFFFFFF,0x00000000,0x7A7D055B,0xDAD7F3A2,0x6A6D98A4,0xB8E31319,0x5133CC94, -0x9D0DFE54,0x30FBC54D,0x89BE50C3,0x0C8BD35E,0x809DC971,0xE70747C4,0x8275A0C0, -0xC3A94590,0x8F1D343A,0xA57D8666,0xA57D8666,0x8F1D343A,0xC3A94590,0x8275A0C0, -0xE70747C4,0x809DC971,0x0C8BD35E,0x89BE50C3,0x30FBC54D,0x9D0DFE54,0x5133CC94, -0xB8E31319,0x6A6D98A4,0xDAD7F3A2,0x7A7D055B,0x7FFFFFFF,0x00000000,0x30FBC54D, -0x89BE50C3,0xA57D8666,0xA57D8666,0x89BE50C3,0x30FBC54D,}; - -#endif - - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ -#endif /* defined(ARM_MATH_MVEI) */ - -#include "arm_math.h" - -#if defined(ARM_MATH_MVEI) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_16) || defined(ARM_TABLE_TWIDDLECOEF_Q15_32) - -uint32_t rearranged_twiddle_tab_stride1_arr_16_q15[2]={ -0,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_16_q15[2]={ -0,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_16_q15[2]={ -0,0,}; - -q15_t rearranged_twiddle_stride1_16_q15[8]={ -0x7FFF,0x0000,0x7642,0xCF04,0x5A82,0xA57E,0x30FC,0x89BE,}; - -q15_t rearranged_twiddle_stride2_16_q15[8]={ -0x7FFF,0x0000,0x5A82,0xA57E,0x0000,0x8000,0xA57E,0xA57E,}; - -q15_t rearranged_twiddle_stride3_16_q15[8]={ -0x7FFF,0x0000,0x30FC,0x89BE,0xA57E,0xA57E,0x89BE,0x30FC,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_64) || defined(ARM_TABLE_TWIDDLECOEF_Q15_128) - -uint32_t rearranged_twiddle_tab_stride1_arr_64_q15[3]={ -0,32,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_64_q15[3]={ -0,32,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_64_q15[3]={ -0,32,0,}; - -q15_t rearranged_twiddle_stride1_64_q15[40]={ -0x7FFF,0x0000,0x7F62,0xF374,0x7D8A,0xE707,0x7A7D,0xDAD8,0x7642,0xCF04,0x70E3, -0xC3A9,0x6A6E,0xB8E3,0x62F2,0xAECC,0x5A82,0xA57E,0x5134,0x9D0E,0x471D,0x9592, -0x3C57,0x8F1D,0x30FC,0x89BE,0x2528,0x8583,0x18F9,0x8276,0x0C8C,0x809E,0x7FFF, -0x0000,0x7642,0xCF04,0x5A82,0xA57E,0x30FC,0x89BE,}; - -q15_t rearranged_twiddle_stride2_64_q15[40]={ -0x7FFF,0x0000,0x7D8A,0xE707,0x7642,0xCF04,0x6A6E,0xB8E3,0x5A82,0xA57E,0x471D, -0x9592,0x30FC,0x89BE,0x18F9,0x8276,0x0000,0x8000,0xE707,0x8276,0xCF04,0x89BE, -0xB8E3,0x9592,0xA57E,0xA57E,0x9592,0xB8E3,0x89BE,0xCF04,0x8276,0xE707,0x7FFF, -0x0000,0x5A82,0xA57E,0x0000,0x8000,0xA57E,0xA57E,}; - -q15_t rearranged_twiddle_stride3_64_q15[40]={ -0x7FFF,0x0000,0x7A7D,0xDAD8,0x6A6E,0xB8E3,0x5134,0x9D0E,0x30FC,0x89BE,0x0C8C, -0x809E,0xE707,0x8276,0xC3A9,0x8F1D,0xA57E,0xA57E,0x8F1D,0xC3A9,0x8276,0xE707, -0x809E,0x0C8C,0x89BE,0x30FC,0x9D0E,0x5134,0xB8E3,0x6A6E,0xDAD8,0x7A7D,0x7FFF, -0x0000,0x30FC,0x89BE,0xA57E,0xA57E,0x89BE,0x30FC,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_256) || defined(ARM_TABLE_TWIDDLECOEF_Q15_512) - -uint32_t rearranged_twiddle_tab_stride1_arr_256_q15[4]={ -0,128,160,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_256_q15[4]={ -0,128,160,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_256_q15[4]={ -0,128,160,0,}; - -q15_t rearranged_twiddle_stride1_256_q15[168]={ -0x7FFF,0x0000,0x7FF6,0xFCDC,0x7FD9,0xF9B8,0x7FA7,0xF695,0x7F62,0xF374,0x7F0A, -0xF055,0x7E9D,0xED38,0x7E1E,0xEA1E,0x7D8A,0xE707,0x7CE4,0xE3F4,0x7C2A,0xE0E6, -0x7B5D,0xDDDC,0x7A7D,0xDAD8,0x798A,0xD7D9,0x7885,0xD4E1,0x776C,0xD1EF,0x7642, -0xCF04,0x7505,0xCC21,0x73B6,0xC946,0x7255,0xC673,0x70E3,0xC3A9,0x6F5F,0xC0E9, -0x6DCA,0xBE32,0x6C24,0xBB85,0x6A6E,0xB8E3,0x68A7,0xB64C,0x66D0,0xB3C0,0x64E9, -0xB140,0x62F2,0xAECC,0x60EC,0xAC65,0x5ED7,0xAA0A,0x5CB4,0xA7BD,0x5A82,0xA57E, -0x5843,0xA34C,0x55F6,0xA129,0x539B,0x9F14,0x5134,0x9D0E,0x4EC0,0x9B17,0x4C40, -0x9930,0x49B4,0x9759,0x471D,0x9592,0x447B,0x93DC,0x41CE,0x9236,0x3F17,0x90A1, -0x3C57,0x8F1D,0x398D,0x8DAB,0x36BA,0x8C4A,0x33DF,0x8AFB,0x30FC,0x89BE,0x2E11, -0x8894,0x2B1F,0x877B,0x2827,0x8676,0x2528,0x8583,0x2224,0x84A3,0x1F1A,0x83D6, -0x1C0C,0x831C,0x18F9,0x8276,0x15E2,0x81E2,0x12C8,0x8163,0x0FAB,0x80F6,0x0C8C, -0x809E,0x096B,0x8059,0x0648,0x8027,0x0324,0x800A,0x7FFF,0x0000,0x7F62,0xF374, -0x7D8A,0xE707,0x7A7D,0xDAD8,0x7642,0xCF04,0x70E3,0xC3A9,0x6A6E,0xB8E3,0x62F2, -0xAECC,0x5A82,0xA57E,0x5134,0x9D0E,0x471D,0x9592,0x3C57,0x8F1D,0x30FC,0x89BE, -0x2528,0x8583,0x18F9,0x8276,0x0C8C,0x809E,0x7FFF,0x0000,0x7642,0xCF04,0x5A82, -0xA57E,0x30FC,0x89BE,}; - -q15_t rearranged_twiddle_stride2_256_q15[168]={ -0x7FFF,0x0000,0x7FD9,0xF9B8,0x7F62,0xF374,0x7E9D,0xED38,0x7D8A,0xE707,0x7C2A, -0xE0E6,0x7A7D,0xDAD8,0x7885,0xD4E1,0x7642,0xCF04,0x73B6,0xC946,0x70E3,0xC3A9, -0x6DCA,0xBE32,0x6A6E,0xB8E3,0x66D0,0xB3C0,0x62F2,0xAECC,0x5ED7,0xAA0A,0x5A82, -0xA57E,0x55F6,0xA129,0x5134,0x9D0E,0x4C40,0x9930,0x471D,0x9592,0x41CE,0x9236, -0x3C57,0x8F1D,0x36BA,0x8C4A,0x30FC,0x89BE,0x2B1F,0x877B,0x2528,0x8583,0x1F1A, -0x83D6,0x18F9,0x8276,0x12C8,0x8163,0x0C8C,0x809E,0x0648,0x8027,0x0000,0x8000, -0xF9B8,0x8027,0xF374,0x809E,0xED38,0x8163,0xE707,0x8276,0xE0E6,0x83D6,0xDAD8, -0x8583,0xD4E1,0x877B,0xCF04,0x89BE,0xC946,0x8C4A,0xC3A9,0x8F1D,0xBE32,0x9236, -0xB8E3,0x9592,0xB3C0,0x9930,0xAECC,0x9D0E,0xAA0A,0xA129,0xA57E,0xA57E,0xA129, -0xAA0A,0x9D0E,0xAECC,0x9930,0xB3C0,0x9592,0xB8E3,0x9236,0xBE32,0x8F1D,0xC3A9, -0x8C4A,0xC946,0x89BE,0xCF04,0x877B,0xD4E1,0x8583,0xDAD8,0x83D6,0xE0E6,0x8276, -0xE707,0x8163,0xED38,0x809E,0xF374,0x8027,0xF9B8,0x7FFF,0x0000,0x7D8A,0xE707, -0x7642,0xCF04,0x6A6E,0xB8E3,0x5A82,0xA57E,0x471D,0x9592,0x30FC,0x89BE,0x18F9, -0x8276,0x0000,0x8000,0xE707,0x8276,0xCF04,0x89BE,0xB8E3,0x9592,0xA57E,0xA57E, -0x9592,0xB8E3,0x89BE,0xCF04,0x8276,0xE707,0x7FFF,0x0000,0x5A82,0xA57E,0x0000, -0x8000,0xA57E,0xA57E,}; - -q15_t rearranged_twiddle_stride3_256_q15[168]={ -0x7FFF,0x0000,0x7FA7,0xF695,0x7E9D,0xED38,0x7CE4,0xE3F4,0x7A7D,0xDAD8,0x776C, -0xD1EF,0x73B6,0xC946,0x6F5F,0xC0E9,0x6A6E,0xB8E3,0x64E9,0xB140,0x5ED7,0xAA0A, -0x5843,0xA34C,0x5134,0x9D0E,0x49B4,0x9759,0x41CE,0x9236,0x398D,0x8DAB,0x30FC, -0x89BE,0x2827,0x8676,0x1F1A,0x83D6,0x15E2,0x81E2,0x0C8C,0x809E,0x0324,0x800A, -0xF9B8,0x8027,0xF055,0x80F6,0xE707,0x8276,0xDDDC,0x84A3,0xD4E1,0x877B,0xCC21, -0x8AFB,0xC3A9,0x8F1D,0xBB85,0x93DC,0xB3C0,0x9930,0xAC65,0x9F14,0xA57E,0xA57E, -0x9F14,0xAC65,0x9930,0xB3C0,0x93DC,0xBB85,0x8F1D,0xC3A9,0x8AFB,0xCC21,0x877B, -0xD4E1,0x84A3,0xDDDC,0x8276,0xE707,0x80F6,0xF055,0x8027,0xF9B8,0x800A,0x0324, -0x809E,0x0C8C,0x81E2,0x15E2,0x83D6,0x1F1A,0x8676,0x2827,0x89BE,0x30FC,0x8DAB, -0x398D,0x9236,0x41CE,0x9759,0x49B4,0x9D0E,0x5134,0xA34C,0x5843,0xAA0A,0x5ED7, -0xB140,0x64E9,0xB8E3,0x6A6E,0xC0E9,0x6F5F,0xC946,0x73B6,0xD1EF,0x776C,0xDAD8, -0x7A7D,0xE3F4,0x7CE4,0xED38,0x7E9D,0xF695,0x7FA7,0x7FFF,0x0000,0x7A7D,0xDAD8, -0x6A6E,0xB8E3,0x5134,0x9D0E,0x30FC,0x89BE,0x0C8C,0x809E,0xE707,0x8276,0xC3A9, -0x8F1D,0xA57E,0xA57E,0x8F1D,0xC3A9,0x8276,0xE707,0x809E,0x0C8C,0x89BE,0x30FC, -0x9D0E,0x5134,0xB8E3,0x6A6E,0xDAD8,0x7A7D,0x7FFF,0x0000,0x30FC,0x89BE,0xA57E, -0xA57E,0x89BE,0x30FC,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) - -uint32_t rearranged_twiddle_tab_stride1_arr_1024_q15[5]={ -0,512,640,672,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_1024_q15[5]={ -0,512,640,672,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_1024_q15[5]={ -0,512,640,672,0,}; - -q15_t rearranged_twiddle_stride1_1024_q15[680]={ -0x7FFF,0x0000,0x7FFF,0xFF37,0x7FFE,0xFE6E,0x7FFA,0xFDA5,0x7FF6,0xFCDC,0x7FF1, -0xFC13,0x7FEA,0xFB4A,0x7FE2,0xFA81,0x7FD9,0xF9B8,0x7FCE,0xF8EF,0x7FC2,0xF827, -0x7FB5,0xF75E,0x7FA7,0xF695,0x7F98,0xF5CD,0x7F87,0xF505,0x7F75,0xF43C,0x7F62, -0xF374,0x7F4E,0xF2AC,0x7F38,0xF1E4,0x7F22,0xF11C,0x7F0A,0xF055,0x7EF0,0xEF8D, -0x7ED6,0xEEC6,0x7EBA,0xEDFF,0x7E9D,0xED38,0x7E7F,0xEC71,0x7E60,0xEBAB,0x7E3F, -0xEAE4,0x7E1E,0xEA1E,0x7DFB,0xE958,0x7DD6,0xE892,0x7DB1,0xE7CD,0x7D8A,0xE707, -0x7D63,0xE642,0x7D3A,0xE57D,0x7D0F,0xE4B9,0x7CE4,0xE3F4,0x7CB7,0xE330,0x7C89, -0xE26D,0x7C5A,0xE1A9,0x7C2A,0xE0E6,0x7BF9,0xE023,0x7BC6,0xDF61,0x7B92,0xDE9E, -0x7B5D,0xDDDC,0x7B27,0xDD1B,0x7AEF,0xDC59,0x7AB7,0xDB99,0x7A7D,0xDAD8,0x7A42, -0xDA18,0x7A06,0xD958,0x79C9,0xD898,0x798A,0xD7D9,0x794A,0xD71B,0x790A,0xD65C, -0x78C8,0xD59E,0x7885,0xD4E1,0x7840,0xD424,0x77FB,0xD367,0x77B4,0xD2AB,0x776C, -0xD1EF,0x7723,0xD134,0x76D9,0xD079,0x768E,0xCFBE,0x7642,0xCF04,0x75F4,0xCE4B, -0x75A6,0xCD92,0x7556,0xCCD9,0x7505,0xCC21,0x74B3,0xCB69,0x7460,0xCAB2,0x740B, -0xC9FC,0x73B6,0xC946,0x735F,0xC890,0x7308,0xC7DB,0x72AF,0xC727,0x7255,0xC673, -0x71FA,0xC5C0,0x719E,0xC50D,0x7141,0xC45B,0x70E3,0xC3A9,0x7083,0xC2F8,0x7023, -0xC248,0x6FC2,0xC198,0x6F5F,0xC0E9,0x6EFB,0xC03A,0x6E97,0xBF8C,0x6E31,0xBEDF, -0x6DCA,0xBE32,0x6D62,0xBD86,0x6CF9,0xBCDA,0x6C8F,0xBC2F,0x6C24,0xBB85,0x6BB8, -0xBADC,0x6B4B,0xBA33,0x6ADD,0xB98B,0x6A6E,0xB8E3,0x69FD,0xB83C,0x698C,0xB796, -0x691A,0xB6F1,0x68A7,0xB64C,0x6832,0xB5A8,0x67BD,0xB505,0x6747,0xB462,0x66D0, -0xB3C0,0x6657,0xB31F,0x65DE,0xB27F,0x6564,0xB1DF,0x64E9,0xB140,0x646C,0xB0A2, -0x63EF,0xB005,0x6371,0xAF68,0x62F2,0xAECC,0x6272,0xAE31,0x61F1,0xAD97,0x616F, -0xACFD,0x60EC,0xAC65,0x6068,0xABCD,0x5FE4,0xAB36,0x5F5E,0xAAA0,0x5ED7,0xAA0A, -0x5E50,0xA976,0x5DC8,0xA8E2,0x5D3E,0xA84F,0x5CB4,0xA7BD,0x5C29,0xA72C,0x5B9D, -0xA69C,0x5B10,0xA60C,0x5A82,0xA57E,0x59F4,0xA4F0,0x5964,0xA463,0x58D4,0xA3D7, -0x5843,0xA34C,0x57B1,0xA2C2,0x571E,0xA238,0x568A,0xA1B0,0x55F6,0xA129,0x5560, -0xA0A2,0x54CA,0xA01C,0x5433,0x9F98,0x539B,0x9F14,0x5303,0x9E91,0x5269,0x9E0F, -0x51CF,0x9D8E,0x5134,0x9D0E,0x5098,0x9C8F,0x4FFB,0x9C11,0x4F5E,0x9B94,0x4EC0, -0x9B17,0x4E21,0x9A9C,0x4D81,0x9A22,0x4CE1,0x99A9,0x4C40,0x9930,0x4B9E,0x98B9, -0x4AFB,0x9843,0x4A58,0x97CE,0x49B4,0x9759,0x490F,0x96E6,0x486A,0x9674,0x47C4, -0x9603,0x471D,0x9592,0x4675,0x9523,0x45CD,0x94B5,0x4524,0x9448,0x447B,0x93DC, -0x43D1,0x9371,0x4326,0x9307,0x427A,0x929E,0x41CE,0x9236,0x4121,0x91CF,0x4074, -0x9169,0x3FC6,0x9105,0x3F17,0x90A1,0x3E68,0x903E,0x3DB8,0x8FDD,0x3D08,0x8F7D, -0x3C57,0x8F1D,0x3BA5,0x8EBF,0x3AF3,0x8E62,0x3A40,0x8E06,0x398D,0x8DAB,0x38D9, -0x8D51,0x3825,0x8CF8,0x3770,0x8CA1,0x36BA,0x8C4A,0x3604,0x8BF5,0x354E,0x8BA0, -0x3497,0x8B4D,0x33DF,0x8AFB,0x3327,0x8AAA,0x326E,0x8A5A,0x31B5,0x8A0C,0x30FC, -0x89BE,0x3042,0x8972,0x2F87,0x8927,0x2ECC,0x88DD,0x2E11,0x8894,0x2D55,0x884C, -0x2C99,0x8805,0x2BDC,0x87C0,0x2B1F,0x877B,0x2A62,0x8738,0x29A4,0x86F6,0x28E5, -0x86B6,0x2827,0x8676,0x2768,0x8637,0x26A8,0x85FA,0x25E8,0x85BE,0x2528,0x8583, -0x2467,0x8549,0x23A7,0x8511,0x22E5,0x84D9,0x2224,0x84A3,0x2162,0x846E,0x209F, -0x843A,0x1FDD,0x8407,0x1F1A,0x83D6,0x1E57,0x83A6,0x1D93,0x8377,0x1CD0,0x8349, -0x1C0C,0x831C,0x1B47,0x82F1,0x1A83,0x82C6,0x19BE,0x829D,0x18F9,0x8276,0x1833, -0x824F,0x176E,0x822A,0x16A8,0x8205,0x15E2,0x81E2,0x151C,0x81C1,0x1455,0x81A0, -0x138F,0x8181,0x12C8,0x8163,0x1201,0x8146,0x113A,0x812A,0x1073,0x8110,0x0FAB, -0x80F6,0x0EE4,0x80DE,0x0E1C,0x80C8,0x0D54,0x80B2,0x0C8C,0x809E,0x0BC4,0x808B, -0x0AFB,0x8079,0x0A33,0x8068,0x096B,0x8059,0x08A2,0x804B,0x07D9,0x803E,0x0711, -0x8032,0x0648,0x8027,0x057F,0x801E,0x04B6,0x8016,0x03ED,0x800F,0x0324,0x800A, -0x025B,0x8006,0x0192,0x8002,0x00C9,0x8001,0x7FFF,0x0000,0x7FF6,0xFCDC,0x7FD9, -0xF9B8,0x7FA7,0xF695,0x7F62,0xF374,0x7F0A,0xF055,0x7E9D,0xED38,0x7E1E,0xEA1E, -0x7D8A,0xE707,0x7CE4,0xE3F4,0x7C2A,0xE0E6,0x7B5D,0xDDDC,0x7A7D,0xDAD8,0x798A, -0xD7D9,0x7885,0xD4E1,0x776C,0xD1EF,0x7642,0xCF04,0x7505,0xCC21,0x73B6,0xC946, -0x7255,0xC673,0x70E3,0xC3A9,0x6F5F,0xC0E9,0x6DCA,0xBE32,0x6C24,0xBB85,0x6A6E, -0xB8E3,0x68A7,0xB64C,0x66D0,0xB3C0,0x64E9,0xB140,0x62F2,0xAECC,0x60EC,0xAC65, -0x5ED7,0xAA0A,0x5CB4,0xA7BD,0x5A82,0xA57E,0x5843,0xA34C,0x55F6,0xA129,0x539B, -0x9F14,0x5134,0x9D0E,0x4EC0,0x9B17,0x4C40,0x9930,0x49B4,0x9759,0x471D,0x9592, -0x447B,0x93DC,0x41CE,0x9236,0x3F17,0x90A1,0x3C57,0x8F1D,0x398D,0x8DAB,0x36BA, -0x8C4A,0x33DF,0x8AFB,0x30FC,0x89BE,0x2E11,0x8894,0x2B1F,0x877B,0x2827,0x8676, -0x2528,0x8583,0x2224,0x84A3,0x1F1A,0x83D6,0x1C0C,0x831C,0x18F9,0x8276,0x15E2, -0x81E2,0x12C8,0x8163,0x0FAB,0x80F6,0x0C8C,0x809E,0x096B,0x8059,0x0648,0x8027, -0x0324,0x800A,0x7FFF,0x0000,0x7F62,0xF374,0x7D8A,0xE707,0x7A7D,0xDAD8,0x7642, -0xCF04,0x70E3,0xC3A9,0x6A6E,0xB8E3,0x62F2,0xAECC,0x5A82,0xA57E,0x5134,0x9D0E, -0x471D,0x9592,0x3C57,0x8F1D,0x30FC,0x89BE,0x2528,0x8583,0x18F9,0x8276,0x0C8C, -0x809E,0x7FFF,0x0000,0x7642,0xCF04,0x5A82,0xA57E,0x30FC,0x89BE,}; - -q15_t rearranged_twiddle_stride2_1024_q15[680]={ -0x7FFF,0x0000,0x7FFE,0xFE6E,0x7FF6,0xFCDC,0x7FEA,0xFB4A,0x7FD9,0xF9B8,0x7FC2, -0xF827,0x7FA7,0xF695,0x7F87,0xF505,0x7F62,0xF374,0x7F38,0xF1E4,0x7F0A,0xF055, -0x7ED6,0xEEC6,0x7E9D,0xED38,0x7E60,0xEBAB,0x7E1E,0xEA1E,0x7DD6,0xE892,0x7D8A, -0xE707,0x7D3A,0xE57D,0x7CE4,0xE3F4,0x7C89,0xE26D,0x7C2A,0xE0E6,0x7BC6,0xDF61, -0x7B5D,0xDDDC,0x7AEF,0xDC59,0x7A7D,0xDAD8,0x7A06,0xD958,0x798A,0xD7D9,0x790A, -0xD65C,0x7885,0xD4E1,0x77FB,0xD367,0x776C,0xD1EF,0x76D9,0xD079,0x7642,0xCF04, -0x75A6,0xCD92,0x7505,0xCC21,0x7460,0xCAB2,0x73B6,0xC946,0x7308,0xC7DB,0x7255, -0xC673,0x719E,0xC50D,0x70E3,0xC3A9,0x7023,0xC248,0x6F5F,0xC0E9,0x6E97,0xBF8C, -0x6DCA,0xBE32,0x6CF9,0xBCDA,0x6C24,0xBB85,0x6B4B,0xBA33,0x6A6E,0xB8E3,0x698C, -0xB796,0x68A7,0xB64C,0x67BD,0xB505,0x66D0,0xB3C0,0x65DE,0xB27F,0x64E9,0xB140, -0x63EF,0xB005,0x62F2,0xAECC,0x61F1,0xAD97,0x60EC,0xAC65,0x5FE4,0xAB36,0x5ED7, -0xAA0A,0x5DC8,0xA8E2,0x5CB4,0xA7BD,0x5B9D,0xA69C,0x5A82,0xA57E,0x5964,0xA463, -0x5843,0xA34C,0x571E,0xA238,0x55F6,0xA129,0x54CA,0xA01C,0x539B,0x9F14,0x5269, -0x9E0F,0x5134,0x9D0E,0x4FFB,0x9C11,0x4EC0,0x9B17,0x4D81,0x9A22,0x4C40,0x9930, -0x4AFB,0x9843,0x49B4,0x9759,0x486A,0x9674,0x471D,0x9592,0x45CD,0x94B5,0x447B, -0x93DC,0x4326,0x9307,0x41CE,0x9236,0x4074,0x9169,0x3F17,0x90A1,0x3DB8,0x8FDD, -0x3C57,0x8F1D,0x3AF3,0x8E62,0x398D,0x8DAB,0x3825,0x8CF8,0x36BA,0x8C4A,0x354E, -0x8BA0,0x33DF,0x8AFB,0x326E,0x8A5A,0x30FC,0x89BE,0x2F87,0x8927,0x2E11,0x8894, -0x2C99,0x8805,0x2B1F,0x877B,0x29A4,0x86F6,0x2827,0x8676,0x26A8,0x85FA,0x2528, -0x8583,0x23A7,0x8511,0x2224,0x84A3,0x209F,0x843A,0x1F1A,0x83D6,0x1D93,0x8377, -0x1C0C,0x831C,0x1A83,0x82C6,0x18F9,0x8276,0x176E,0x822A,0x15E2,0x81E2,0x1455, -0x81A0,0x12C8,0x8163,0x113A,0x812A,0x0FAB,0x80F6,0x0E1C,0x80C8,0x0C8C,0x809E, -0x0AFB,0x8079,0x096B,0x8059,0x07D9,0x803E,0x0648,0x8027,0x04B6,0x8016,0x0324, -0x800A,0x0192,0x8002,0x0000,0x8000,0xFE6E,0x8002,0xFCDC,0x800A,0xFB4A,0x8016, -0xF9B8,0x8027,0xF827,0x803E,0xF695,0x8059,0xF505,0x8079,0xF374,0x809E,0xF1E4, -0x80C8,0xF055,0x80F6,0xEEC6,0x812A,0xED38,0x8163,0xEBAB,0x81A0,0xEA1E,0x81E2, -0xE892,0x822A,0xE707,0x8276,0xE57D,0x82C6,0xE3F4,0x831C,0xE26D,0x8377,0xE0E6, -0x83D6,0xDF61,0x843A,0xDDDC,0x84A3,0xDC59,0x8511,0xDAD8,0x8583,0xD958,0x85FA, -0xD7D9,0x8676,0xD65C,0x86F6,0xD4E1,0x877B,0xD367,0x8805,0xD1EF,0x8894,0xD079, -0x8927,0xCF04,0x89BE,0xCD92,0x8A5A,0xCC21,0x8AFB,0xCAB2,0x8BA0,0xC946,0x8C4A, -0xC7DB,0x8CF8,0xC673,0x8DAB,0xC50D,0x8E62,0xC3A9,0x8F1D,0xC248,0x8FDD,0xC0E9, -0x90A1,0xBF8C,0x9169,0xBE32,0x9236,0xBCDA,0x9307,0xBB85,0x93DC,0xBA33,0x94B5, -0xB8E3,0x9592,0xB796,0x9674,0xB64C,0x9759,0xB505,0x9843,0xB3C0,0x9930,0xB27F, -0x9A22,0xB140,0x9B17,0xB005,0x9C11,0xAECC,0x9D0E,0xAD97,0x9E0F,0xAC65,0x9F14, -0xAB36,0xA01C,0xAA0A,0xA129,0xA8E2,0xA238,0xA7BD,0xA34C,0xA69C,0xA463,0xA57E, -0xA57E,0xA463,0xA69C,0xA34C,0xA7BD,0xA238,0xA8E2,0xA129,0xAA0A,0xA01C,0xAB36, -0x9F14,0xAC65,0x9E0F,0xAD97,0x9D0E,0xAECC,0x9C11,0xB005,0x9B17,0xB140,0x9A22, -0xB27F,0x9930,0xB3C0,0x9843,0xB505,0x9759,0xB64C,0x9674,0xB796,0x9592,0xB8E3, -0x94B5,0xBA33,0x93DC,0xBB85,0x9307,0xBCDA,0x9236,0xBE32,0x9169,0xBF8C,0x90A1, -0xC0E9,0x8FDD,0xC248,0x8F1D,0xC3A9,0x8E62,0xC50D,0x8DAB,0xC673,0x8CF8,0xC7DB, -0x8C4A,0xC946,0x8BA0,0xCAB2,0x8AFB,0xCC21,0x8A5A,0xCD92,0x89BE,0xCF04,0x8927, -0xD079,0x8894,0xD1EF,0x8805,0xD367,0x877B,0xD4E1,0x86F6,0xD65C,0x8676,0xD7D9, -0x85FA,0xD958,0x8583,0xDAD8,0x8511,0xDC59,0x84A3,0xDDDC,0x843A,0xDF61,0x83D6, -0xE0E6,0x8377,0xE26D,0x831C,0xE3F4,0x82C6,0xE57D,0x8276,0xE707,0x822A,0xE892, -0x81E2,0xEA1E,0x81A0,0xEBAB,0x8163,0xED38,0x812A,0xEEC6,0x80F6,0xF055,0x80C8, -0xF1E4,0x809E,0xF374,0x8079,0xF505,0x8059,0xF695,0x803E,0xF827,0x8027,0xF9B8, -0x8016,0xFB4A,0x800A,0xFCDC,0x8002,0xFE6E,0x7FFF,0x0000,0x7FD9,0xF9B8,0x7F62, -0xF374,0x7E9D,0xED38,0x7D8A,0xE707,0x7C2A,0xE0E6,0x7A7D,0xDAD8,0x7885,0xD4E1, -0x7642,0xCF04,0x73B6,0xC946,0x70E3,0xC3A9,0x6DCA,0xBE32,0x6A6E,0xB8E3,0x66D0, -0xB3C0,0x62F2,0xAECC,0x5ED7,0xAA0A,0x5A82,0xA57E,0x55F6,0xA129,0x5134,0x9D0E, -0x4C40,0x9930,0x471D,0x9592,0x41CE,0x9236,0x3C57,0x8F1D,0x36BA,0x8C4A,0x30FC, -0x89BE,0x2B1F,0x877B,0x2528,0x8583,0x1F1A,0x83D6,0x18F9,0x8276,0x12C8,0x8163, -0x0C8C,0x809E,0x0648,0x8027,0x0000,0x8000,0xF9B8,0x8027,0xF374,0x809E,0xED38, -0x8163,0xE707,0x8276,0xE0E6,0x83D6,0xDAD8,0x8583,0xD4E1,0x877B,0xCF04,0x89BE, -0xC946,0x8C4A,0xC3A9,0x8F1D,0xBE32,0x9236,0xB8E3,0x9592,0xB3C0,0x9930,0xAECC, -0x9D0E,0xAA0A,0xA129,0xA57E,0xA57E,0xA129,0xAA0A,0x9D0E,0xAECC,0x9930,0xB3C0, -0x9592,0xB8E3,0x9236,0xBE32,0x8F1D,0xC3A9,0x8C4A,0xC946,0x89BE,0xCF04,0x877B, -0xD4E1,0x8583,0xDAD8,0x83D6,0xE0E6,0x8276,0xE707,0x8163,0xED38,0x809E,0xF374, -0x8027,0xF9B8,0x7FFF,0x0000,0x7D8A,0xE707,0x7642,0xCF04,0x6A6E,0xB8E3,0x5A82, -0xA57E,0x471D,0x9592,0x30FC,0x89BE,0x18F9,0x8276,0x0000,0x8000,0xE707,0x8276, -0xCF04,0x89BE,0xB8E3,0x9592,0xA57E,0xA57E,0x9592,0xB8E3,0x89BE,0xCF04,0x8276, -0xE707,0x7FFF,0x0000,0x5A82,0xA57E,0x0000,0x8000,0xA57E,0xA57E,}; - -q15_t rearranged_twiddle_stride3_1024_q15[680]={ -0x7FFF,0x0000,0x7FFA,0xFDA5,0x7FEA,0xFB4A,0x7FCE,0xF8EF,0x7FA7,0xF695,0x7F75, -0xF43C,0x7F38,0xF1E4,0x7EF0,0xEF8D,0x7E9D,0xED38,0x7E3F,0xEAE4,0x7DD6,0xE892, -0x7D63,0xE642,0x7CE4,0xE3F4,0x7C5A,0xE1A9,0x7BC6,0xDF61,0x7B27,0xDD1B,0x7A7D, -0xDAD8,0x79C9,0xD898,0x790A,0xD65C,0x7840,0xD424,0x776C,0xD1EF,0x768E,0xCFBE, -0x75A6,0xCD92,0x74B3,0xCB69,0x73B6,0xC946,0x72AF,0xC727,0x719E,0xC50D,0x7083, -0xC2F8,0x6F5F,0xC0E9,0x6E31,0xBEDF,0x6CF9,0xBCDA,0x6BB8,0xBADC,0x6A6E,0xB8E3, -0x691A,0xB6F1,0x67BD,0xB505,0x6657,0xB31F,0x64E9,0xB140,0x6371,0xAF68,0x61F1, -0xAD97,0x6068,0xABCD,0x5ED7,0xAA0A,0x5D3E,0xA84F,0x5B9D,0xA69C,0x59F4,0xA4F0, -0x5843,0xA34C,0x568A,0xA1B0,0x54CA,0xA01C,0x5303,0x9E91,0x5134,0x9D0E,0x4F5E, -0x9B94,0x4D81,0x9A22,0x4B9E,0x98B9,0x49B4,0x9759,0x47C4,0x9603,0x45CD,0x94B5, -0x43D1,0x9371,0x41CE,0x9236,0x3FC6,0x9105,0x3DB8,0x8FDD,0x3BA5,0x8EBF,0x398D, -0x8DAB,0x3770,0x8CA1,0x354E,0x8BA0,0x3327,0x8AAA,0x30FC,0x89BE,0x2ECC,0x88DD, -0x2C99,0x8805,0x2A62,0x8738,0x2827,0x8676,0x25E8,0x85BE,0x23A7,0x8511,0x2162, -0x846E,0x1F1A,0x83D6,0x1CD0,0x8349,0x1A83,0x82C6,0x1833,0x824F,0x15E2,0x81E2, -0x138F,0x8181,0x113A,0x812A,0x0EE4,0x80DE,0x0C8C,0x809E,0x0A33,0x8068,0x07D9, -0x803E,0x057F,0x801E,0x0324,0x800A,0x00C9,0x8001,0xFE6E,0x8002,0xFC13,0x800F, -0xF9B8,0x8027,0xF75E,0x804B,0xF505,0x8079,0xF2AC,0x80B2,0xF055,0x80F6,0xEDFF, -0x8146,0xEBAB,0x81A0,0xE958,0x8205,0xE707,0x8276,0xE4B9,0x82F1,0xE26D,0x8377, -0xE023,0x8407,0xDDDC,0x84A3,0xDB99,0x8549,0xD958,0x85FA,0xD71B,0x86B6,0xD4E1, -0x877B,0xD2AB,0x884C,0xD079,0x8927,0xCE4B,0x8A0C,0xCC21,0x8AFB,0xC9FC,0x8BF5, -0xC7DB,0x8CF8,0xC5C0,0x8E06,0xC3A9,0x8F1D,0xC198,0x903E,0xBF8C,0x9169,0xBD86, -0x929E,0xBB85,0x93DC,0xB98B,0x9523,0xB796,0x9674,0xB5A8,0x97CE,0xB3C0,0x9930, -0xB1DF,0x9A9C,0xB005,0x9C11,0xAE31,0x9D8E,0xAC65,0x9F14,0xAAA0,0xA0A2,0xA8E2, -0xA238,0xA72C,0xA3D7,0xA57E,0xA57E,0xA3D7,0xA72C,0xA238,0xA8E2,0xA0A2,0xAAA0, -0x9F14,0xAC65,0x9D8E,0xAE31,0x9C11,0xB005,0x9A9C,0xB1DF,0x9930,0xB3C0,0x97CE, -0xB5A8,0x9674,0xB796,0x9523,0xB98B,0x93DC,0xBB85,0x929E,0xBD86,0x9169,0xBF8C, -0x903E,0xC198,0x8F1D,0xC3A9,0x8E06,0xC5C0,0x8CF8,0xC7DB,0x8BF5,0xC9FC,0x8AFB, -0xCC21,0x8A0C,0xCE4B,0x8927,0xD079,0x884C,0xD2AB,0x877B,0xD4E1,0x86B6,0xD71B, -0x85FA,0xD958,0x8549,0xDB99,0x84A3,0xDDDC,0x8407,0xE023,0x8377,0xE26D,0x82F1, -0xE4B9,0x8276,0xE707,0x8205,0xE958,0x81A0,0xEBAB,0x8146,0xEDFF,0x80F6,0xF055, -0x80B2,0xF2AC,0x8079,0xF505,0x804B,0xF75E,0x8027,0xF9B8,0x800F,0xFC13,0x8002, -0xFE6E,0x8001,0x00C9,0x800A,0x0324,0x801E,0x057F,0x803E,0x07D9,0x8068,0x0A33, -0x809E,0x0C8C,0x80DE,0x0EE4,0x812A,0x113A,0x8181,0x138F,0x81E2,0x15E2,0x824F, -0x1833,0x82C6,0x1A83,0x8349,0x1CD0,0x83D6,0x1F1A,0x846E,0x2162,0x8511,0x23A7, -0x85BE,0x25E8,0x8676,0x2827,0x8738,0x2A62,0x8805,0x2C99,0x88DD,0x2ECC,0x89BE, -0x30FC,0x8AAA,0x3327,0x8BA0,0x354E,0x8CA1,0x3770,0x8DAB,0x398D,0x8EBF,0x3BA5, -0x8FDD,0x3DB8,0x9105,0x3FC6,0x9236,0x41CE,0x9371,0x43D1,0x94B5,0x45CD,0x9603, -0x47C4,0x9759,0x49B4,0x98B9,0x4B9E,0x9A22,0x4D81,0x9B94,0x4F5E,0x9D0E,0x5134, -0x9E91,0x5303,0xA01C,0x54CA,0xA1B0,0x568A,0xA34C,0x5843,0xA4F0,0x59F4,0xA69C, -0x5B9D,0xA84F,0x5D3E,0xAA0A,0x5ED7,0xABCD,0x6068,0xAD97,0x61F1,0xAF68,0x6371, -0xB140,0x64E9,0xB31F,0x6657,0xB505,0x67BD,0xB6F1,0x691A,0xB8E3,0x6A6E,0xBADC, -0x6BB8,0xBCDA,0x6CF9,0xBEDF,0x6E31,0xC0E9,0x6F5F,0xC2F8,0x7083,0xC50D,0x719E, -0xC727,0x72AF,0xC946,0x73B6,0xCB69,0x74B3,0xCD92,0x75A6,0xCFBE,0x768E,0xD1EF, -0x776C,0xD424,0x7840,0xD65C,0x790A,0xD898,0x79C9,0xDAD8,0x7A7D,0xDD1B,0x7B27, -0xDF61,0x7BC6,0xE1A9,0x7C5A,0xE3F4,0x7CE4,0xE642,0x7D63,0xE892,0x7DD6,0xEAE4, -0x7E3F,0xED38,0x7E9D,0xEF8D,0x7EF0,0xF1E4,0x7F38,0xF43C,0x7F75,0xF695,0x7FA7, -0xF8EF,0x7FCE,0xFB4A,0x7FEA,0xFDA5,0x7FFA,0x7FFF,0x0000,0x7FA7,0xF695,0x7E9D, -0xED38,0x7CE4,0xE3F4,0x7A7D,0xDAD8,0x776C,0xD1EF,0x73B6,0xC946,0x6F5F,0xC0E9, -0x6A6E,0xB8E3,0x64E9,0xB140,0x5ED7,0xAA0A,0x5843,0xA34C,0x5134,0x9D0E,0x49B4, -0x9759,0x41CE,0x9236,0x398D,0x8DAB,0x30FC,0x89BE,0x2827,0x8676,0x1F1A,0x83D6, -0x15E2,0x81E2,0x0C8C,0x809E,0x0324,0x800A,0xF9B8,0x8027,0xF055,0x80F6,0xE707, -0x8276,0xDDDC,0x84A3,0xD4E1,0x877B,0xCC21,0x8AFB,0xC3A9,0x8F1D,0xBB85,0x93DC, -0xB3C0,0x9930,0xAC65,0x9F14,0xA57E,0xA57E,0x9F14,0xAC65,0x9930,0xB3C0,0x93DC, -0xBB85,0x8F1D,0xC3A9,0x8AFB,0xCC21,0x877B,0xD4E1,0x84A3,0xDDDC,0x8276,0xE707, -0x80F6,0xF055,0x8027,0xF9B8,0x800A,0x0324,0x809E,0x0C8C,0x81E2,0x15E2,0x83D6, -0x1F1A,0x8676,0x2827,0x89BE,0x30FC,0x8DAB,0x398D,0x9236,0x41CE,0x9759,0x49B4, -0x9D0E,0x5134,0xA34C,0x5843,0xAA0A,0x5ED7,0xB140,0x64E9,0xB8E3,0x6A6E,0xC0E9, -0x6F5F,0xC946,0x73B6,0xD1EF,0x776C,0xDAD8,0x7A7D,0xE3F4,0x7CE4,0xED38,0x7E9D, -0xF695,0x7FA7,0x7FFF,0x0000,0x7A7D,0xDAD8,0x6A6E,0xB8E3,0x5134,0x9D0E,0x30FC, -0x89BE,0x0C8C,0x809E,0xE707,0x8276,0xC3A9,0x8F1D,0xA57E,0xA57E,0x8F1D,0xC3A9, -0x8276,0xE707,0x809E,0x0C8C,0x89BE,0x30FC,0x9D0E,0x5134,0xB8E3,0x6A6E,0xDAD8, -0x7A7D,0x7FFF,0x0000,0x30FC,0x89BE,0xA57E,0xA57E,0x89BE,0x30FC,}; - -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q15_8192) - -uint32_t rearranged_twiddle_tab_stride1_arr_4096_q15[6]={ -0,2048,2560,2688,2720,0,}; - -uint32_t rearranged_twiddle_tab_stride2_arr_4096_q15[6]={ -0,2048,2560,2688,2720,0,}; - -uint32_t rearranged_twiddle_tab_stride3_arr_4096_q15[6]={ -0,2048,2560,2688,2720,0,}; - -q15_t rearranged_twiddle_stride1_4096_q15[2728]={ -0x7FFF,0x0000,0x7FFF,0xFFCE,0x7FFF,0xFF9B,0x7FFF,0xFF69,0x7FFF,0xFF37,0x7FFF, -0xFF05,0x7FFF,0xFED2,0x7FFE,0xFEA0,0x7FFE,0xFE6E,0x7FFD,0xFE3C,0x7FFC,0xFE09, -0x7FFB,0xFDD7,0x7FFA,0xFDA5,0x7FF9,0xFD73,0x7FF8,0xFD40,0x7FF7,0xFD0E,0x7FF6, -0xFCDC,0x7FF5,0xFCAA,0x7FF4,0xFC77,0x7FF2,0xFC45,0x7FF1,0xFC13,0x7FEF,0xFBE1, -0x7FED,0xFBAE,0x7FEC,0xFB7C,0x7FEA,0xFB4A,0x7FE8,0xFB18,0x7FE6,0xFAE5,0x7FE4, -0xFAB3,0x7FE2,0xFA81,0x7FE0,0xFA4F,0x7FDD,0xFA1D,0x7FDB,0xF9EA,0x7FD9,0xF9B8, -0x7FD6,0xF986,0x7FD3,0xF954,0x7FD1,0xF922,0x7FCE,0xF8EF,0x7FCB,0xF8BD,0x7FC8, -0xF88B,0x7FC5,0xF859,0x7FC2,0xF827,0x7FBF,0xF7F4,0x7FBC,0xF7C2,0x7FB9,0xF790, -0x7FB5,0xF75E,0x7FB2,0xF72C,0x7FAE,0xF6FA,0x7FAB,0xF6C8,0x7FA7,0xF695,0x7FA3, -0xF663,0x7FA0,0xF631,0x7F9C,0xF5FF,0x7F98,0xF5CD,0x7F94,0xF59B,0x7F90,0xF569, -0x7F8B,0xF537,0x7F87,0xF505,0x7F83,0xF4D3,0x7F7E,0xF4A0,0x7F7A,0xF46E,0x7F75, -0xF43C,0x7F71,0xF40A,0x7F6C,0xF3D8,0x7F67,0xF3A6,0x7F62,0xF374,0x7F5D,0xF342, -0x7F58,0xF310,0x7F53,0xF2DE,0x7F4E,0xF2AC,0x7F49,0xF27A,0x7F43,0xF248,0x7F3E, -0xF216,0x7F38,0xF1E4,0x7F33,0xF1B2,0x7F2D,0xF180,0x7F27,0xF14E,0x7F22,0xF11C, -0x7F1C,0xF0EB,0x7F16,0xF0B9,0x7F10,0xF087,0x7F0A,0xF055,0x7F03,0xF023,0x7EFD, -0xEFF1,0x7EF7,0xEFBF,0x7EF0,0xEF8D,0x7EEA,0xEF5C,0x7EE3,0xEF2A,0x7EDD,0xEEF8, -0x7ED6,0xEEC6,0x7ECF,0xEE94,0x7EC8,0xEE62,0x7EC1,0xEE31,0x7EBA,0xEDFF,0x7EB3, -0xEDCD,0x7EAC,0xED9B,0x7EA5,0xED6A,0x7E9D,0xED38,0x7E96,0xED06,0x7E8E,0xECD5, -0x7E87,0xECA3,0x7E7F,0xEC71,0x7E78,0xEC3F,0x7E70,0xEC0E,0x7E68,0xEBDC,0x7E60, -0xEBAB,0x7E58,0xEB79,0x7E50,0xEB47,0x7E48,0xEB16,0x7E3F,0xEAE4,0x7E37,0xEAB3, -0x7E2F,0xEA81,0x7E26,0xEA4F,0x7E1E,0xEA1E,0x7E15,0xE9EC,0x7E0C,0xE9BB,0x7E03, -0xE989,0x7DFB,0xE958,0x7DF2,0xE926,0x7DE9,0xE8F5,0x7DE0,0xE8C4,0x7DD6,0xE892, -0x7DCD,0xE861,0x7DC4,0xE82F,0x7DBA,0xE7FE,0x7DB1,0xE7CD,0x7DA7,0xE79B,0x7D9E, -0xE76A,0x7D94,0xE739,0x7D8A,0xE707,0x7D81,0xE6D6,0x7D77,0xE6A5,0x7D6D,0xE673, -0x7D63,0xE642,0x7D58,0xE611,0x7D4E,0xE5E0,0x7D44,0xE5AF,0x7D3A,0xE57D,0x7D2F, -0xE54C,0x7D25,0xE51B,0x7D1A,0xE4EA,0x7D0F,0xE4B9,0x7D05,0xE488,0x7CFA,0xE457, -0x7CEF,0xE426,0x7CE4,0xE3F4,0x7CD9,0xE3C3,0x7CCE,0xE392,0x7CC2,0xE361,0x7CB7, -0xE330,0x7CAC,0xE2FF,0x7CA0,0xE2CF,0x7C95,0xE29E,0x7C89,0xE26D,0x7C7E,0xE23C, -0x7C72,0xE20B,0x7C66,0xE1DA,0x7C5A,0xE1A9,0x7C4E,0xE178,0x7C42,0xE148,0x7C36, -0xE117,0x7C2A,0xE0E6,0x7C1E,0xE0B5,0x7C11,0xE085,0x7C05,0xE054,0x7BF9,0xE023, -0x7BEC,0xDFF2,0x7BDF,0xDFC2,0x7BD3,0xDF91,0x7BC6,0xDF61,0x7BB9,0xDF30,0x7BAC, -0xDEFF,0x7B9F,0xDECF,0x7B92,0xDE9E,0x7B85,0xDE6E,0x7B78,0xDE3D,0x7B6A,0xDE0D, -0x7B5D,0xDDDC,0x7B50,0xDDAC,0x7B42,0xDD7C,0x7B34,0xDD4B,0x7B27,0xDD1B,0x7B19, -0xDCEA,0x7B0B,0xDCBA,0x7AFD,0xDC8A,0x7AEF,0xDC59,0x7AE1,0xDC29,0x7AD3,0xDBF9, -0x7AC5,0xDBC9,0x7AB7,0xDB99,0x7AA8,0xDB68,0x7A9A,0xDB38,0x7A8C,0xDB08,0x7A7D, -0xDAD8,0x7A6E,0xDAA8,0x7A60,0xDA78,0x7A51,0xDA48,0x7A42,0xDA18,0x7A33,0xD9E8, -0x7A24,0xD9B8,0x7A15,0xD988,0x7A06,0xD958,0x79F7,0xD928,0x79E7,0xD8F8,0x79D8, -0xD8C8,0x79C9,0xD898,0x79B9,0xD869,0x79AA,0xD839,0x799A,0xD809,0x798A,0xD7D9, -0x797A,0xD7AA,0x796A,0xD77A,0x795B,0xD74A,0x794A,0xD71B,0x793A,0xD6EB,0x792A, -0xD6BB,0x791A,0xD68C,0x790A,0xD65C,0x78F9,0xD62D,0x78E9,0xD5FD,0x78D8,0xD5CE, -0x78C8,0xD59E,0x78B7,0xD56F,0x78A6,0xD53F,0x7895,0xD510,0x7885,0xD4E1,0x7874, -0xD4B1,0x7863,0xD482,0x7851,0xD453,0x7840,0xD424,0x782F,0xD3F4,0x781E,0xD3C5, -0x780C,0xD396,0x77FB,0xD367,0x77E9,0xD338,0x77D8,0xD309,0x77C6,0xD2DA,0x77B4, -0xD2AB,0x77A2,0xD27C,0x7790,0xD24D,0x777E,0xD21E,0x776C,0xD1EF,0x775A,0xD1C0, -0x7748,0xD191,0x7736,0xD162,0x7723,0xD134,0x7711,0xD105,0x76FE,0xD0D6,0x76EC, -0xD0A7,0x76D9,0xD079,0x76C7,0xD04A,0x76B4,0xD01B,0x76A1,0xCFED,0x768E,0xCFBE, -0x767B,0xCF90,0x7668,0xCF61,0x7655,0xCF33,0x7642,0xCF04,0x762E,0xCED6,0x761B, -0xCEA7,0x7608,0xCE79,0x75F4,0xCE4B,0x75E1,0xCE1C,0x75CD,0xCDEE,0x75B9,0xCDC0, -0x75A6,0xCD92,0x7592,0xCD63,0x757E,0xCD35,0x756A,0xCD07,0x7556,0xCCD9,0x7542, -0xCCAB,0x752D,0xCC7D,0x7519,0xCC4F,0x7505,0xCC21,0x74F0,0xCBF3,0x74DC,0xCBC5, -0x74C7,0xCB97,0x74B3,0xCB69,0x749E,0xCB3C,0x7489,0xCB0E,0x7475,0xCAE0,0x7460, -0xCAB2,0x744B,0xCA85,0x7436,0xCA57,0x7421,0xCA29,0x740B,0xC9FC,0x73F6,0xC9CE, -0x73E1,0xC9A1,0x73CB,0xC973,0x73B6,0xC946,0x73A0,0xC918,0x738B,0xC8EB,0x7375, -0xC8BE,0x735F,0xC890,0x734A,0xC863,0x7334,0xC836,0x731E,0xC809,0x7308,0xC7DB, -0x72F2,0xC7AE,0x72DC,0xC781,0x72C5,0xC754,0x72AF,0xC727,0x7299,0xC6FA,0x7282, -0xC6CD,0x726C,0xC6A0,0x7255,0xC673,0x723F,0xC646,0x7228,0xC619,0x7211,0xC5ED, -0x71FA,0xC5C0,0x71E3,0xC593,0x71CC,0xC566,0x71B5,0xC53A,0x719E,0xC50D,0x7187, -0xC4E0,0x7170,0xC4B4,0x7158,0xC487,0x7141,0xC45B,0x712A,0xC42E,0x7112,0xC402, -0x70FA,0xC3D6,0x70E3,0xC3A9,0x70CB,0xC37D,0x70B3,0xC351,0x709B,0xC324,0x7083, -0xC2F8,0x706B,0xC2CC,0x7053,0xC2A0,0x703B,0xC274,0x7023,0xC248,0x700B,0xC21C, -0x6FF2,0xC1F0,0x6FDA,0xC1C4,0x6FC2,0xC198,0x6FA9,0xC16C,0x6F90,0xC140,0x6F78, -0xC114,0x6F5F,0xC0E9,0x6F46,0xC0BD,0x6F2D,0xC091,0x6F14,0xC066,0x6EFB,0xC03A, -0x6EE2,0xC00F,0x6EC9,0xBFE3,0x6EB0,0xBFB8,0x6E97,0xBF8C,0x6E7D,0xBF61,0x6E64, -0xBF35,0x6E4A,0xBF0A,0x6E31,0xBEDF,0x6E17,0xBEB3,0x6DFE,0xBE88,0x6DE4,0xBE5D, -0x6DCA,0xBE32,0x6DB0,0xBE07,0x6D96,0xBDDC,0x6D7C,0xBDB1,0x6D62,0xBD86,0x6D48, -0xBD5B,0x6D2E,0xBD30,0x6D14,0xBD05,0x6CF9,0xBCDA,0x6CDF,0xBCAF,0x6CC4,0xBC85, -0x6CAA,0xBC5A,0x6C8F,0xBC2F,0x6C75,0xBC05,0x6C5A,0xBBDA,0x6C3F,0xBBB0,0x6C24, -0xBB85,0x6C09,0xBB5B,0x6BEE,0xBB30,0x6BD3,0xBB06,0x6BB8,0xBADC,0x6B9D,0xBAB1, -0x6B82,0xBA87,0x6B66,0xBA5D,0x6B4B,0xBA33,0x6B30,0xBA09,0x6B14,0xB9DF,0x6AF8, -0xB9B5,0x6ADD,0xB98B,0x6AC1,0xB961,0x6AA5,0xB937,0x6A89,0xB90D,0x6A6E,0xB8E3, -0x6A52,0xB8B9,0x6A36,0xB890,0x6A1A,0xB866,0x69FD,0xB83C,0x69E1,0xB813,0x69C5, -0xB7E9,0x69A9,0xB7C0,0x698C,0xB796,0x6970,0xB76D,0x6953,0xB743,0x6937,0xB71A, -0x691A,0xB6F1,0x68FD,0xB6C7,0x68E0,0xB69E,0x68C4,0xB675,0x68A7,0xB64C,0x688A, -0xB623,0x686D,0xB5FA,0x6850,0xB5D1,0x6832,0xB5A8,0x6815,0xB57F,0x67F8,0xB556, -0x67DA,0xB52D,0x67BD,0xB505,0x67A0,0xB4DC,0x6782,0xB4B3,0x6764,0xB48B,0x6747, -0xB462,0x6729,0xB439,0x670B,0xB411,0x66ED,0xB3E9,0x66D0,0xB3C0,0x66B2,0xB398, -0x6693,0xB36F,0x6675,0xB347,0x6657,0xB31F,0x6639,0xB2F7,0x661B,0xB2CF,0x65FC, -0xB2A7,0x65DE,0xB27F,0x65C0,0xB257,0x65A1,0xB22F,0x6582,0xB207,0x6564,0xB1DF, -0x6545,0xB1B7,0x6526,0xB18F,0x6507,0xB168,0x64E9,0xB140,0x64CA,0xB118,0x64AB, -0xB0F1,0x648B,0xB0C9,0x646C,0xB0A2,0x644D,0xB07B,0x642E,0xB053,0x640F,0xB02C, -0x63EF,0xB005,0x63D0,0xAFDD,0x63B0,0xAFB6,0x6391,0xAF8F,0x6371,0xAF68,0x6351, -0xAF41,0x6332,0xAF1A,0x6312,0xAEF3,0x62F2,0xAECC,0x62D2,0xAEA5,0x62B2,0xAE7F, -0x6292,0xAE58,0x6272,0xAE31,0x6252,0xAE0B,0x6232,0xADE4,0x6211,0xADBD,0x61F1, -0xAD97,0x61D1,0xAD70,0x61B0,0xAD4A,0x6190,0xAD24,0x616F,0xACFD,0x614E,0xACD7, -0x612E,0xACB1,0x610D,0xAC8B,0x60EC,0xAC65,0x60CB,0xAC3F,0x60AA,0xAC19,0x6089, -0xABF3,0x6068,0xABCD,0x6047,0xABA7,0x6026,0xAB81,0x6005,0xAB5C,0x5FE4,0xAB36, -0x5FC2,0xAB10,0x5FA1,0xAAEB,0x5F80,0xAAC5,0x5F5E,0xAAA0,0x5F3C,0xAA7A,0x5F1B, -0xAA55,0x5EF9,0xAA30,0x5ED7,0xAA0A,0x5EB6,0xA9E5,0x5E94,0xA9C0,0x5E72,0xA99B, -0x5E50,0xA976,0x5E2E,0xA951,0x5E0C,0xA92C,0x5DEA,0xA907,0x5DC8,0xA8E2,0x5DA5, -0xA8BD,0x5D83,0xA899,0x5D61,0xA874,0x5D3E,0xA84F,0x5D1C,0xA82B,0x5CF9,0xA806, -0x5CD7,0xA7E2,0x5CB4,0xA7BD,0x5C91,0xA799,0x5C6F,0xA774,0x5C4C,0xA750,0x5C29, -0xA72C,0x5C06,0xA708,0x5BE3,0xA6E4,0x5BC0,0xA6C0,0x5B9D,0xA69C,0x5B7A,0xA678, -0x5B57,0xA654,0x5B34,0xA630,0x5B10,0xA60C,0x5AED,0xA5E8,0x5AC9,0xA5C5,0x5AA6, -0xA5A1,0x5A82,0xA57E,0x5A5F,0xA55A,0x5A3B,0xA537,0x5A18,0xA513,0x59F4,0xA4F0, -0x59D0,0xA4CC,0x59AC,0xA4A9,0x5988,0xA486,0x5964,0xA463,0x5940,0xA440,0x591C, -0xA41D,0x58F8,0xA3FA,0x58D4,0xA3D7,0x58B0,0xA3B4,0x588C,0xA391,0x5867,0xA36F, -0x5843,0xA34C,0x581E,0xA329,0x57FA,0xA307,0x57D5,0xA2E4,0x57B1,0xA2C2,0x578C, -0xA29F,0x5767,0xA27D,0x5743,0xA25B,0x571E,0xA238,0x56F9,0xA216,0x56D4,0xA1F4, -0x56AF,0xA1D2,0x568A,0xA1B0,0x5665,0xA18E,0x5640,0xA16C,0x561B,0xA14A,0x55F6, -0xA129,0x55D0,0xA107,0x55AB,0xA0E5,0x5586,0xA0C4,0x5560,0xA0A2,0x553B,0xA080, -0x5515,0xA05F,0x54F0,0xA03E,0x54CA,0xA01C,0x54A4,0x9FFB,0x547F,0x9FDA,0x5459, -0x9FB9,0x5433,0x9F98,0x540D,0x9F77,0x53E7,0x9F56,0x53C1,0x9F35,0x539B,0x9F14, -0x5375,0x9EF3,0x534F,0x9ED2,0x5329,0x9EB2,0x5303,0x9E91,0x52DC,0x9E70,0x52B6, -0x9E50,0x5290,0x9E2F,0x5269,0x9E0F,0x5243,0x9DEF,0x521C,0x9DCE,0x51F5,0x9DAE, -0x51CF,0x9D8E,0x51A8,0x9D6E,0x5181,0x9D4E,0x515B,0x9D2E,0x5134,0x9D0E,0x510D, -0x9CEE,0x50E6,0x9CCE,0x50BF,0x9CAF,0x5098,0x9C8F,0x5071,0x9C6F,0x504A,0x9C50, -0x5023,0x9C30,0x4FFB,0x9C11,0x4FD4,0x9BF1,0x4FAD,0x9BD2,0x4F85,0x9BB3,0x4F5E, -0x9B94,0x4F37,0x9B75,0x4F0F,0x9B55,0x4EE8,0x9B36,0x4EC0,0x9B17,0x4E98,0x9AF9, -0x4E71,0x9ADA,0x4E49,0x9ABB,0x4E21,0x9A9C,0x4DF9,0x9A7E,0x4DD1,0x9A5F,0x4DA9, -0x9A40,0x4D81,0x9A22,0x4D59,0x9A04,0x4D31,0x99E5,0x4D09,0x99C7,0x4CE1,0x99A9, -0x4CB9,0x998B,0x4C91,0x996D,0x4C68,0x994E,0x4C40,0x9930,0x4C17,0x9913,0x4BEF, -0x98F5,0x4BC7,0x98D7,0x4B9E,0x98B9,0x4B75,0x989C,0x4B4D,0x987E,0x4B24,0x9860, -0x4AFB,0x9843,0x4AD3,0x9826,0x4AAA,0x9808,0x4A81,0x97EB,0x4A58,0x97CE,0x4A2F, -0x97B0,0x4A06,0x9793,0x49DD,0x9776,0x49B4,0x9759,0x498B,0x973C,0x4962,0x9720, -0x4939,0x9703,0x490F,0x96E6,0x48E6,0x96C9,0x48BD,0x96AD,0x4893,0x9690,0x486A, -0x9674,0x4840,0x9657,0x4817,0x963B,0x47ED,0x961F,0x47C4,0x9603,0x479A,0x95E6, -0x4770,0x95CA,0x4747,0x95AE,0x471D,0x9592,0x46F3,0x9577,0x46C9,0x955B,0x469F, -0x953F,0x4675,0x9523,0x464B,0x9508,0x4621,0x94EC,0x45F7,0x94D0,0x45CD,0x94B5, -0x45A3,0x949A,0x4579,0x947E,0x454F,0x9463,0x4524,0x9448,0x44FA,0x942D,0x44D0, -0x9412,0x44A5,0x93F7,0x447B,0x93DC,0x4450,0x93C1,0x4426,0x93A6,0x43FB,0x938B, -0x43D1,0x9371,0x43A6,0x9356,0x437B,0x933C,0x4351,0x9321,0x4326,0x9307,0x42FB, -0x92EC,0x42D0,0x92D2,0x42A5,0x92B8,0x427A,0x929E,0x424F,0x9284,0x4224,0x926A, -0x41F9,0x9250,0x41CE,0x9236,0x41A3,0x921C,0x4178,0x9202,0x414D,0x91E9,0x4121, -0x91CF,0x40F6,0x91B6,0x40CB,0x919C,0x409F,0x9183,0x4074,0x9169,0x4048,0x9150, -0x401D,0x9137,0x3FF1,0x911E,0x3FC6,0x9105,0x3F9A,0x90EC,0x3F6F,0x90D3,0x3F43, -0x90BA,0x3F17,0x90A1,0x3EEC,0x9088,0x3EC0,0x9070,0x3E94,0x9057,0x3E68,0x903E, -0x3E3C,0x9026,0x3E10,0x900E,0x3DE4,0x8FF5,0x3DB8,0x8FDD,0x3D8C,0x8FC5,0x3D60, -0x8FAD,0x3D34,0x8F95,0x3D08,0x8F7D,0x3CDC,0x8F65,0x3CAF,0x8F4D,0x3C83,0x8F35, -0x3C57,0x8F1D,0x3C2A,0x8F06,0x3BFE,0x8EEE,0x3BD2,0x8ED6,0x3BA5,0x8EBF,0x3B79, -0x8EA8,0x3B4C,0x8E90,0x3B20,0x8E79,0x3AF3,0x8E62,0x3AC6,0x8E4B,0x3A9A,0x8E34, -0x3A6D,0x8E1D,0x3A40,0x8E06,0x3A13,0x8DEF,0x39E7,0x8DD8,0x39BA,0x8DC1,0x398D, -0x8DAB,0x3960,0x8D94,0x3933,0x8D7E,0x3906,0x8D67,0x38D9,0x8D51,0x38AC,0x8D3B, -0x387F,0x8D24,0x3852,0x8D0E,0x3825,0x8CF8,0x37F7,0x8CE2,0x37CA,0x8CCC,0x379D, -0x8CB6,0x3770,0x8CA1,0x3742,0x8C8B,0x3715,0x8C75,0x36E8,0x8C60,0x36BA,0x8C4A, -0x368D,0x8C35,0x365F,0x8C1F,0x3632,0x8C0A,0x3604,0x8BF5,0x35D7,0x8BDF,0x35A9, -0x8BCA,0x357B,0x8BB5,0x354E,0x8BA0,0x3520,0x8B8B,0x34F2,0x8B77,0x34C4,0x8B62, -0x3497,0x8B4D,0x3469,0x8B39,0x343B,0x8B24,0x340D,0x8B10,0x33DF,0x8AFB,0x33B1, -0x8AE7,0x3383,0x8AD3,0x3355,0x8ABE,0x3327,0x8AAA,0x32F9,0x8A96,0x32CB,0x8A82, -0x329D,0x8A6E,0x326E,0x8A5A,0x3240,0x8A47,0x3212,0x8A33,0x31E4,0x8A1F,0x31B5, -0x8A0C,0x3187,0x89F8,0x3159,0x89E5,0x312A,0x89D2,0x30FC,0x89BE,0x30CD,0x89AB, -0x309F,0x8998,0x3070,0x8985,0x3042,0x8972,0x3013,0x895F,0x2FE5,0x894C,0x2FB6, -0x8939,0x2F87,0x8927,0x2F59,0x8914,0x2F2A,0x8902,0x2EFB,0x88EF,0x2ECC,0x88DD, -0x2E9E,0x88CA,0x2E6F,0x88B8,0x2E40,0x88A6,0x2E11,0x8894,0x2DE2,0x8882,0x2DB3, -0x8870,0x2D84,0x885E,0x2D55,0x884C,0x2D26,0x883A,0x2CF7,0x8828,0x2CC8,0x8817, -0x2C99,0x8805,0x2C6A,0x87F4,0x2C3B,0x87E2,0x2C0C,0x87D1,0x2BDC,0x87C0,0x2BAD, -0x87AF,0x2B7E,0x879D,0x2B4F,0x878C,0x2B1F,0x877B,0x2AF0,0x876B,0x2AC1,0x875A, -0x2A91,0x8749,0x2A62,0x8738,0x2A32,0x8728,0x2A03,0x8717,0x29D3,0x8707,0x29A4, -0x86F6,0x2974,0x86E6,0x2945,0x86D6,0x2915,0x86C6,0x28E5,0x86B6,0x28B6,0x86A5, -0x2886,0x8696,0x2856,0x8686,0x2827,0x8676,0x27F7,0x8666,0x27C7,0x8656,0x2797, -0x8647,0x2768,0x8637,0x2738,0x8628,0x2708,0x8619,0x26D8,0x8609,0x26A8,0x85FA, -0x2678,0x85EB,0x2648,0x85DC,0x2618,0x85CD,0x25E8,0x85BE,0x25B8,0x85AF,0x2588, -0x85A0,0x2558,0x8592,0x2528,0x8583,0x24F8,0x8574,0x24C8,0x8566,0x2498,0x8558, -0x2467,0x8549,0x2437,0x853B,0x2407,0x852D,0x23D7,0x851F,0x23A7,0x8511,0x2376, -0x8503,0x2346,0x84F5,0x2316,0x84E7,0x22E5,0x84D9,0x22B5,0x84CC,0x2284,0x84BE, -0x2254,0x84B0,0x2224,0x84A3,0x21F3,0x8496,0x21C3,0x8488,0x2192,0x847B,0x2162, -0x846E,0x2131,0x8461,0x2101,0x8454,0x20D0,0x8447,0x209F,0x843A,0x206F,0x842D, -0x203E,0x8421,0x200E,0x8414,0x1FDD,0x8407,0x1FAC,0x83FB,0x1F7B,0x83EF,0x1F4B, -0x83E2,0x1F1A,0x83D6,0x1EE9,0x83CA,0x1EB8,0x83BE,0x1E88,0x83B2,0x1E57,0x83A6, -0x1E26,0x839A,0x1DF5,0x838E,0x1DC4,0x8382,0x1D93,0x8377,0x1D62,0x836B,0x1D31, -0x8360,0x1D01,0x8354,0x1CD0,0x8349,0x1C9F,0x833E,0x1C6E,0x8332,0x1C3D,0x8327, -0x1C0C,0x831C,0x1BDA,0x8311,0x1BA9,0x8306,0x1B78,0x82FB,0x1B47,0x82F1,0x1B16, -0x82E6,0x1AE5,0x82DB,0x1AB4,0x82D1,0x1A83,0x82C6,0x1A51,0x82BC,0x1A20,0x82B2, -0x19EF,0x82A8,0x19BE,0x829D,0x198D,0x8293,0x195B,0x8289,0x192A,0x827F,0x18F9, -0x8276,0x18C7,0x826C,0x1896,0x8262,0x1865,0x8259,0x1833,0x824F,0x1802,0x8246, -0x17D1,0x823C,0x179F,0x8233,0x176E,0x822A,0x173C,0x8220,0x170B,0x8217,0x16DA, -0x820E,0x16A8,0x8205,0x1677,0x81FD,0x1645,0x81F4,0x1614,0x81EB,0x15E2,0x81E2, -0x15B1,0x81DA,0x157F,0x81D1,0x154D,0x81C9,0x151C,0x81C1,0x14EA,0x81B8,0x14B9, -0x81B0,0x1487,0x81A8,0x1455,0x81A0,0x1424,0x8198,0x13F2,0x8190,0x13C1,0x8188, -0x138F,0x8181,0x135D,0x8179,0x132B,0x8172,0x12FA,0x816A,0x12C8,0x8163,0x1296, -0x815B,0x1265,0x8154,0x1233,0x814D,0x1201,0x8146,0x11CF,0x813F,0x119E,0x8138, -0x116C,0x8131,0x113A,0x812A,0x1108,0x8123,0x10D6,0x811D,0x10A4,0x8116,0x1073, -0x8110,0x1041,0x8109,0x100F,0x8103,0x0FDD,0x80FD,0x0FAB,0x80F6,0x0F79,0x80F0, -0x0F47,0x80EA,0x0F15,0x80E4,0x0EE4,0x80DE,0x0EB2,0x80D9,0x0E80,0x80D3,0x0E4E, -0x80CD,0x0E1C,0x80C8,0x0DEA,0x80C2,0x0DB8,0x80BD,0x0D86,0x80B7,0x0D54,0x80B2, -0x0D22,0x80AD,0x0CF0,0x80A8,0x0CBE,0x80A3,0x0C8C,0x809E,0x0C5A,0x8099,0x0C28, -0x8094,0x0BF6,0x808F,0x0BC4,0x808B,0x0B92,0x8086,0x0B60,0x8082,0x0B2D,0x807D, -0x0AFB,0x8079,0x0AC9,0x8075,0x0A97,0x8070,0x0A65,0x806C,0x0A33,0x8068,0x0A01, -0x8064,0x09CF,0x8060,0x099D,0x805D,0x096B,0x8059,0x0938,0x8055,0x0906,0x8052, -0x08D4,0x804E,0x08A2,0x804B,0x0870,0x8047,0x083E,0x8044,0x080C,0x8041,0x07D9, -0x803E,0x07A7,0x803B,0x0775,0x8038,0x0743,0x8035,0x0711,0x8032,0x06DE,0x802F, -0x06AC,0x802D,0x067A,0x802A,0x0648,0x8027,0x0616,0x8025,0x05E3,0x8023,0x05B1, -0x8020,0x057F,0x801E,0x054D,0x801C,0x051B,0x801A,0x04E8,0x8018,0x04B6,0x8016, -0x0484,0x8014,0x0452,0x8013,0x041F,0x8011,0x03ED,0x800F,0x03BB,0x800E,0x0389, -0x800C,0x0356,0x800B,0x0324,0x800A,0x02F2,0x8009,0x02C0,0x8008,0x028D,0x8007, -0x025B,0x8006,0x0229,0x8005,0x01F7,0x8004,0x01C4,0x8003,0x0192,0x8002,0x0160, -0x8002,0x012E,0x8001,0x00FB,0x8001,0x00C9,0x8001,0x0097,0x8000,0x0065,0x8000, -0x0032,0x8000,0x7FFF,0x0000,0x7FFF,0xFF37,0x7FFE,0xFE6E,0x7FFA,0xFDA5,0x7FF6, -0xFCDC,0x7FF1,0xFC13,0x7FEA,0xFB4A,0x7FE2,0xFA81,0x7FD9,0xF9B8,0x7FCE,0xF8EF, -0x7FC2,0xF827,0x7FB5,0xF75E,0x7FA7,0xF695,0x7F98,0xF5CD,0x7F87,0xF505,0x7F75, -0xF43C,0x7F62,0xF374,0x7F4E,0xF2AC,0x7F38,0xF1E4,0x7F22,0xF11C,0x7F0A,0xF055, -0x7EF0,0xEF8D,0x7ED6,0xEEC6,0x7EBA,0xEDFF,0x7E9D,0xED38,0x7E7F,0xEC71,0x7E60, -0xEBAB,0x7E3F,0xEAE4,0x7E1E,0xEA1E,0x7DFB,0xE958,0x7DD6,0xE892,0x7DB1,0xE7CD, -0x7D8A,0xE707,0x7D63,0xE642,0x7D3A,0xE57D,0x7D0F,0xE4B9,0x7CE4,0xE3F4,0x7CB7, -0xE330,0x7C89,0xE26D,0x7C5A,0xE1A9,0x7C2A,0xE0E6,0x7BF9,0xE023,0x7BC6,0xDF61, -0x7B92,0xDE9E,0x7B5D,0xDDDC,0x7B27,0xDD1B,0x7AEF,0xDC59,0x7AB7,0xDB99,0x7A7D, -0xDAD8,0x7A42,0xDA18,0x7A06,0xD958,0x79C9,0xD898,0x798A,0xD7D9,0x794A,0xD71B, -0x790A,0xD65C,0x78C8,0xD59E,0x7885,0xD4E1,0x7840,0xD424,0x77FB,0xD367,0x77B4, -0xD2AB,0x776C,0xD1EF,0x7723,0xD134,0x76D9,0xD079,0x768E,0xCFBE,0x7642,0xCF04, -0x75F4,0xCE4B,0x75A6,0xCD92,0x7556,0xCCD9,0x7505,0xCC21,0x74B3,0xCB69,0x7460, -0xCAB2,0x740B,0xC9FC,0x73B6,0xC946,0x735F,0xC890,0x7308,0xC7DB,0x72AF,0xC727, -0x7255,0xC673,0x71FA,0xC5C0,0x719E,0xC50D,0x7141,0xC45B,0x70E3,0xC3A9,0x7083, -0xC2F8,0x7023,0xC248,0x6FC2,0xC198,0x6F5F,0xC0E9,0x6EFB,0xC03A,0x6E97,0xBF8C, -0x6E31,0xBEDF,0x6DCA,0xBE32,0x6D62,0xBD86,0x6CF9,0xBCDA,0x6C8F,0xBC2F,0x6C24, -0xBB85,0x6BB8,0xBADC,0x6B4B,0xBA33,0x6ADD,0xB98B,0x6A6E,0xB8E3,0x69FD,0xB83C, -0x698C,0xB796,0x691A,0xB6F1,0x68A7,0xB64C,0x6832,0xB5A8,0x67BD,0xB505,0x6747, -0xB462,0x66D0,0xB3C0,0x6657,0xB31F,0x65DE,0xB27F,0x6564,0xB1DF,0x64E9,0xB140, -0x646C,0xB0A2,0x63EF,0xB005,0x6371,0xAF68,0x62F2,0xAECC,0x6272,0xAE31,0x61F1, -0xAD97,0x616F,0xACFD,0x60EC,0xAC65,0x6068,0xABCD,0x5FE4,0xAB36,0x5F5E,0xAAA0, -0x5ED7,0xAA0A,0x5E50,0xA976,0x5DC8,0xA8E2,0x5D3E,0xA84F,0x5CB4,0xA7BD,0x5C29, -0xA72C,0x5B9D,0xA69C,0x5B10,0xA60C,0x5A82,0xA57E,0x59F4,0xA4F0,0x5964,0xA463, -0x58D4,0xA3D7,0x5843,0xA34C,0x57B1,0xA2C2,0x571E,0xA238,0x568A,0xA1B0,0x55F6, -0xA129,0x5560,0xA0A2,0x54CA,0xA01C,0x5433,0x9F98,0x539B,0x9F14,0x5303,0x9E91, -0x5269,0x9E0F,0x51CF,0x9D8E,0x5134,0x9D0E,0x5098,0x9C8F,0x4FFB,0x9C11,0x4F5E, -0x9B94,0x4EC0,0x9B17,0x4E21,0x9A9C,0x4D81,0x9A22,0x4CE1,0x99A9,0x4C40,0x9930, -0x4B9E,0x98B9,0x4AFB,0x9843,0x4A58,0x97CE,0x49B4,0x9759,0x490F,0x96E6,0x486A, -0x9674,0x47C4,0x9603,0x471D,0x9592,0x4675,0x9523,0x45CD,0x94B5,0x4524,0x9448, -0x447B,0x93DC,0x43D1,0x9371,0x4326,0x9307,0x427A,0x929E,0x41CE,0x9236,0x4121, -0x91CF,0x4074,0x9169,0x3FC6,0x9105,0x3F17,0x90A1,0x3E68,0x903E,0x3DB8,0x8FDD, -0x3D08,0x8F7D,0x3C57,0x8F1D,0x3BA5,0x8EBF,0x3AF3,0x8E62,0x3A40,0x8E06,0x398D, -0x8DAB,0x38D9,0x8D51,0x3825,0x8CF8,0x3770,0x8CA1,0x36BA,0x8C4A,0x3604,0x8BF5, -0x354E,0x8BA0,0x3497,0x8B4D,0x33DF,0x8AFB,0x3327,0x8AAA,0x326E,0x8A5A,0x31B5, -0x8A0C,0x30FC,0x89BE,0x3042,0x8972,0x2F87,0x8927,0x2ECC,0x88DD,0x2E11,0x8894, -0x2D55,0x884C,0x2C99,0x8805,0x2BDC,0x87C0,0x2B1F,0x877B,0x2A62,0x8738,0x29A4, -0x86F6,0x28E5,0x86B6,0x2827,0x8676,0x2768,0x8637,0x26A8,0x85FA,0x25E8,0x85BE, -0x2528,0x8583,0x2467,0x8549,0x23A7,0x8511,0x22E5,0x84D9,0x2224,0x84A3,0x2162, -0x846E,0x209F,0x843A,0x1FDD,0x8407,0x1F1A,0x83D6,0x1E57,0x83A6,0x1D93,0x8377, -0x1CD0,0x8349,0x1C0C,0x831C,0x1B47,0x82F1,0x1A83,0x82C6,0x19BE,0x829D,0x18F9, -0x8276,0x1833,0x824F,0x176E,0x822A,0x16A8,0x8205,0x15E2,0x81E2,0x151C,0x81C1, -0x1455,0x81A0,0x138F,0x8181,0x12C8,0x8163,0x1201,0x8146,0x113A,0x812A,0x1073, -0x8110,0x0FAB,0x80F6,0x0EE4,0x80DE,0x0E1C,0x80C8,0x0D54,0x80B2,0x0C8C,0x809E, -0x0BC4,0x808B,0x0AFB,0x8079,0x0A33,0x8068,0x096B,0x8059,0x08A2,0x804B,0x07D9, -0x803E,0x0711,0x8032,0x0648,0x8027,0x057F,0x801E,0x04B6,0x8016,0x03ED,0x800F, -0x0324,0x800A,0x025B,0x8006,0x0192,0x8002,0x00C9,0x8001,0x7FFF,0x0000,0x7FF6, -0xFCDC,0x7FD9,0xF9B8,0x7FA7,0xF695,0x7F62,0xF374,0x7F0A,0xF055,0x7E9D,0xED38, -0x7E1E,0xEA1E,0x7D8A,0xE707,0x7CE4,0xE3F4,0x7C2A,0xE0E6,0x7B5D,0xDDDC,0x7A7D, -0xDAD8,0x798A,0xD7D9,0x7885,0xD4E1,0x776C,0xD1EF,0x7642,0xCF04,0x7505,0xCC21, -0x73B6,0xC946,0x7255,0xC673,0x70E3,0xC3A9,0x6F5F,0xC0E9,0x6DCA,0xBE32,0x6C24, -0xBB85,0x6A6E,0xB8E3,0x68A7,0xB64C,0x66D0,0xB3C0,0x64E9,0xB140,0x62F2,0xAECC, -0x60EC,0xAC65,0x5ED7,0xAA0A,0x5CB4,0xA7BD,0x5A82,0xA57E,0x5843,0xA34C,0x55F6, -0xA129,0x539B,0x9F14,0x5134,0x9D0E,0x4EC0,0x9B17,0x4C40,0x9930,0x49B4,0x9759, -0x471D,0x9592,0x447B,0x93DC,0x41CE,0x9236,0x3F17,0x90A1,0x3C57,0x8F1D,0x398D, -0x8DAB,0x36BA,0x8C4A,0x33DF,0x8AFB,0x30FC,0x89BE,0x2E11,0x8894,0x2B1F,0x877B, -0x2827,0x8676,0x2528,0x8583,0x2224,0x84A3,0x1F1A,0x83D6,0x1C0C,0x831C,0x18F9, -0x8276,0x15E2,0x81E2,0x12C8,0x8163,0x0FAB,0x80F6,0x0C8C,0x809E,0x096B,0x8059, -0x0648,0x8027,0x0324,0x800A,0x7FFF,0x0000,0x7F62,0xF374,0x7D8A,0xE707,0x7A7D, -0xDAD8,0x7642,0xCF04,0x70E3,0xC3A9,0x6A6E,0xB8E3,0x62F2,0xAECC,0x5A82,0xA57E, -0x5134,0x9D0E,0x471D,0x9592,0x3C57,0x8F1D,0x30FC,0x89BE,0x2528,0x8583,0x18F9, -0x8276,0x0C8C,0x809E,0x7FFF,0x0000,0x7642,0xCF04,0x5A82,0xA57E,0x30FC,0x89BE,}; - -q15_t rearranged_twiddle_stride2_4096_q15[2728]={ -0x7FFF,0x0000,0x7FFF,0xFF9B,0x7FFF,0xFF37,0x7FFF,0xFED2,0x7FFE,0xFE6E,0x7FFC, -0xFE09,0x7FFA,0xFDA5,0x7FF8,0xFD40,0x7FF6,0xFCDC,0x7FF4,0xFC77,0x7FF1,0xFC13, -0x7FED,0xFBAE,0x7FEA,0xFB4A,0x7FE6,0xFAE5,0x7FE2,0xFA81,0x7FDD,0xFA1D,0x7FD9, -0xF9B8,0x7FD3,0xF954,0x7FCE,0xF8EF,0x7FC8,0xF88B,0x7FC2,0xF827,0x7FBC,0xF7C2, -0x7FB5,0xF75E,0x7FAE,0xF6FA,0x7FA7,0xF695,0x7FA0,0xF631,0x7F98,0xF5CD,0x7F90, -0xF569,0x7F87,0xF505,0x7F7E,0xF4A0,0x7F75,0xF43C,0x7F6C,0xF3D8,0x7F62,0xF374, -0x7F58,0xF310,0x7F4E,0xF2AC,0x7F43,0xF248,0x7F38,0xF1E4,0x7F2D,0xF180,0x7F22, -0xF11C,0x7F16,0xF0B9,0x7F0A,0xF055,0x7EFD,0xEFF1,0x7EF0,0xEF8D,0x7EE3,0xEF2A, -0x7ED6,0xEEC6,0x7EC8,0xEE62,0x7EBA,0xEDFF,0x7EAC,0xED9B,0x7E9D,0xED38,0x7E8E, -0xECD5,0x7E7F,0xEC71,0x7E70,0xEC0E,0x7E60,0xEBAB,0x7E50,0xEB47,0x7E3F,0xEAE4, -0x7E2F,0xEA81,0x7E1E,0xEA1E,0x7E0C,0xE9BB,0x7DFB,0xE958,0x7DE9,0xE8F5,0x7DD6, -0xE892,0x7DC4,0xE82F,0x7DB1,0xE7CD,0x7D9E,0xE76A,0x7D8A,0xE707,0x7D77,0xE6A5, -0x7D63,0xE642,0x7D4E,0xE5E0,0x7D3A,0xE57D,0x7D25,0xE51B,0x7D0F,0xE4B9,0x7CFA, -0xE457,0x7CE4,0xE3F4,0x7CCE,0xE392,0x7CB7,0xE330,0x7CA0,0xE2CF,0x7C89,0xE26D, -0x7C72,0xE20B,0x7C5A,0xE1A9,0x7C42,0xE148,0x7C2A,0xE0E6,0x7C11,0xE085,0x7BF9, -0xE023,0x7BDF,0xDFC2,0x7BC6,0xDF61,0x7BAC,0xDEFF,0x7B92,0xDE9E,0x7B78,0xDE3D, -0x7B5D,0xDDDC,0x7B42,0xDD7C,0x7B27,0xDD1B,0x7B0B,0xDCBA,0x7AEF,0xDC59,0x7AD3, -0xDBF9,0x7AB7,0xDB99,0x7A9A,0xDB38,0x7A7D,0xDAD8,0x7A60,0xDA78,0x7A42,0xDA18, -0x7A24,0xD9B8,0x7A06,0xD958,0x79E7,0xD8F8,0x79C9,0xD898,0x79AA,0xD839,0x798A, -0xD7D9,0x796A,0xD77A,0x794A,0xD71B,0x792A,0xD6BB,0x790A,0xD65C,0x78E9,0xD5FD, -0x78C8,0xD59E,0x78A6,0xD53F,0x7885,0xD4E1,0x7863,0xD482,0x7840,0xD424,0x781E, -0xD3C5,0x77FB,0xD367,0x77D8,0xD309,0x77B4,0xD2AB,0x7790,0xD24D,0x776C,0xD1EF, -0x7748,0xD191,0x7723,0xD134,0x76FE,0xD0D6,0x76D9,0xD079,0x76B4,0xD01B,0x768E, -0xCFBE,0x7668,0xCF61,0x7642,0xCF04,0x761B,0xCEA7,0x75F4,0xCE4B,0x75CD,0xCDEE, -0x75A6,0xCD92,0x757E,0xCD35,0x7556,0xCCD9,0x752D,0xCC7D,0x7505,0xCC21,0x74DC, -0xCBC5,0x74B3,0xCB69,0x7489,0xCB0E,0x7460,0xCAB2,0x7436,0xCA57,0x740B,0xC9FC, -0x73E1,0xC9A1,0x73B6,0xC946,0x738B,0xC8EB,0x735F,0xC890,0x7334,0xC836,0x7308, -0xC7DB,0x72DC,0xC781,0x72AF,0xC727,0x7282,0xC6CD,0x7255,0xC673,0x7228,0xC619, -0x71FA,0xC5C0,0x71CC,0xC566,0x719E,0xC50D,0x7170,0xC4B4,0x7141,0xC45B,0x7112, -0xC402,0x70E3,0xC3A9,0x70B3,0xC351,0x7083,0xC2F8,0x7053,0xC2A0,0x7023,0xC248, -0x6FF2,0xC1F0,0x6FC2,0xC198,0x6F90,0xC140,0x6F5F,0xC0E9,0x6F2D,0xC091,0x6EFB, -0xC03A,0x6EC9,0xBFE3,0x6E97,0xBF8C,0x6E64,0xBF35,0x6E31,0xBEDF,0x6DFE,0xBE88, -0x6DCA,0xBE32,0x6D96,0xBDDC,0x6D62,0xBD86,0x6D2E,0xBD30,0x6CF9,0xBCDA,0x6CC4, -0xBC85,0x6C8F,0xBC2F,0x6C5A,0xBBDA,0x6C24,0xBB85,0x6BEE,0xBB30,0x6BB8,0xBADC, -0x6B82,0xBA87,0x6B4B,0xBA33,0x6B14,0xB9DF,0x6ADD,0xB98B,0x6AA5,0xB937,0x6A6E, -0xB8E3,0x6A36,0xB890,0x69FD,0xB83C,0x69C5,0xB7E9,0x698C,0xB796,0x6953,0xB743, -0x691A,0xB6F1,0x68E0,0xB69E,0x68A7,0xB64C,0x686D,0xB5FA,0x6832,0xB5A8,0x67F8, -0xB556,0x67BD,0xB505,0x6782,0xB4B3,0x6747,0xB462,0x670B,0xB411,0x66D0,0xB3C0, -0x6693,0xB36F,0x6657,0xB31F,0x661B,0xB2CF,0x65DE,0xB27F,0x65A1,0xB22F,0x6564, -0xB1DF,0x6526,0xB18F,0x64E9,0xB140,0x64AB,0xB0F1,0x646C,0xB0A2,0x642E,0xB053, -0x63EF,0xB005,0x63B0,0xAFB6,0x6371,0xAF68,0x6332,0xAF1A,0x62F2,0xAECC,0x62B2, -0xAE7F,0x6272,0xAE31,0x6232,0xADE4,0x61F1,0xAD97,0x61B0,0xAD4A,0x616F,0xACFD, -0x612E,0xACB1,0x60EC,0xAC65,0x60AA,0xAC19,0x6068,0xABCD,0x6026,0xAB81,0x5FE4, -0xAB36,0x5FA1,0xAAEB,0x5F5E,0xAAA0,0x5F1B,0xAA55,0x5ED7,0xAA0A,0x5E94,0xA9C0, -0x5E50,0xA976,0x5E0C,0xA92C,0x5DC8,0xA8E2,0x5D83,0xA899,0x5D3E,0xA84F,0x5CF9, -0xA806,0x5CB4,0xA7BD,0x5C6F,0xA774,0x5C29,0xA72C,0x5BE3,0xA6E4,0x5B9D,0xA69C, -0x5B57,0xA654,0x5B10,0xA60C,0x5AC9,0xA5C5,0x5A82,0xA57E,0x5A3B,0xA537,0x59F4, -0xA4F0,0x59AC,0xA4A9,0x5964,0xA463,0x591C,0xA41D,0x58D4,0xA3D7,0x588C,0xA391, -0x5843,0xA34C,0x57FA,0xA307,0x57B1,0xA2C2,0x5767,0xA27D,0x571E,0xA238,0x56D4, -0xA1F4,0x568A,0xA1B0,0x5640,0xA16C,0x55F6,0xA129,0x55AB,0xA0E5,0x5560,0xA0A2, -0x5515,0xA05F,0x54CA,0xA01C,0x547F,0x9FDA,0x5433,0x9F98,0x53E7,0x9F56,0x539B, -0x9F14,0x534F,0x9ED2,0x5303,0x9E91,0x52B6,0x9E50,0x5269,0x9E0F,0x521C,0x9DCE, -0x51CF,0x9D8E,0x5181,0x9D4E,0x5134,0x9D0E,0x50E6,0x9CCE,0x5098,0x9C8F,0x504A, -0x9C50,0x4FFB,0x9C11,0x4FAD,0x9BD2,0x4F5E,0x9B94,0x4F0F,0x9B55,0x4EC0,0x9B17, -0x4E71,0x9ADA,0x4E21,0x9A9C,0x4DD1,0x9A5F,0x4D81,0x9A22,0x4D31,0x99E5,0x4CE1, -0x99A9,0x4C91,0x996D,0x4C40,0x9930,0x4BEF,0x98F5,0x4B9E,0x98B9,0x4B4D,0x987E, -0x4AFB,0x9843,0x4AAA,0x9808,0x4A58,0x97CE,0x4A06,0x9793,0x49B4,0x9759,0x4962, -0x9720,0x490F,0x96E6,0x48BD,0x96AD,0x486A,0x9674,0x4817,0x963B,0x47C4,0x9603, -0x4770,0x95CA,0x471D,0x9592,0x46C9,0x955B,0x4675,0x9523,0x4621,0x94EC,0x45CD, -0x94B5,0x4579,0x947E,0x4524,0x9448,0x44D0,0x9412,0x447B,0x93DC,0x4426,0x93A6, -0x43D1,0x9371,0x437B,0x933C,0x4326,0x9307,0x42D0,0x92D2,0x427A,0x929E,0x4224, -0x926A,0x41CE,0x9236,0x4178,0x9202,0x4121,0x91CF,0x40CB,0x919C,0x4074,0x9169, -0x401D,0x9137,0x3FC6,0x9105,0x3F6F,0x90D3,0x3F17,0x90A1,0x3EC0,0x9070,0x3E68, -0x903E,0x3E10,0x900E,0x3DB8,0x8FDD,0x3D60,0x8FAD,0x3D08,0x8F7D,0x3CAF,0x8F4D, -0x3C57,0x8F1D,0x3BFE,0x8EEE,0x3BA5,0x8EBF,0x3B4C,0x8E90,0x3AF3,0x8E62,0x3A9A, -0x8E34,0x3A40,0x8E06,0x39E7,0x8DD8,0x398D,0x8DAB,0x3933,0x8D7E,0x38D9,0x8D51, -0x387F,0x8D24,0x3825,0x8CF8,0x37CA,0x8CCC,0x3770,0x8CA1,0x3715,0x8C75,0x36BA, -0x8C4A,0x365F,0x8C1F,0x3604,0x8BF5,0x35A9,0x8BCA,0x354E,0x8BA0,0x34F2,0x8B77, -0x3497,0x8B4D,0x343B,0x8B24,0x33DF,0x8AFB,0x3383,0x8AD3,0x3327,0x8AAA,0x32CB, -0x8A82,0x326E,0x8A5A,0x3212,0x8A33,0x31B5,0x8A0C,0x3159,0x89E5,0x30FC,0x89BE, -0x309F,0x8998,0x3042,0x8972,0x2FE5,0x894C,0x2F87,0x8927,0x2F2A,0x8902,0x2ECC, -0x88DD,0x2E6F,0x88B8,0x2E11,0x8894,0x2DB3,0x8870,0x2D55,0x884C,0x2CF7,0x8828, -0x2C99,0x8805,0x2C3B,0x87E2,0x2BDC,0x87C0,0x2B7E,0x879D,0x2B1F,0x877B,0x2AC1, -0x875A,0x2A62,0x8738,0x2A03,0x8717,0x29A4,0x86F6,0x2945,0x86D6,0x28E5,0x86B6, -0x2886,0x8696,0x2827,0x8676,0x27C7,0x8656,0x2768,0x8637,0x2708,0x8619,0x26A8, -0x85FA,0x2648,0x85DC,0x25E8,0x85BE,0x2588,0x85A0,0x2528,0x8583,0x24C8,0x8566, -0x2467,0x8549,0x2407,0x852D,0x23A7,0x8511,0x2346,0x84F5,0x22E5,0x84D9,0x2284, -0x84BE,0x2224,0x84A3,0x21C3,0x8488,0x2162,0x846E,0x2101,0x8454,0x209F,0x843A, -0x203E,0x8421,0x1FDD,0x8407,0x1F7B,0x83EF,0x1F1A,0x83D6,0x1EB8,0x83BE,0x1E57, -0x83A6,0x1DF5,0x838E,0x1D93,0x8377,0x1D31,0x8360,0x1CD0,0x8349,0x1C6E,0x8332, -0x1C0C,0x831C,0x1BA9,0x8306,0x1B47,0x82F1,0x1AE5,0x82DB,0x1A83,0x82C6,0x1A20, -0x82B2,0x19BE,0x829D,0x195B,0x8289,0x18F9,0x8276,0x1896,0x8262,0x1833,0x824F, -0x17D1,0x823C,0x176E,0x822A,0x170B,0x8217,0x16A8,0x8205,0x1645,0x81F4,0x15E2, -0x81E2,0x157F,0x81D1,0x151C,0x81C1,0x14B9,0x81B0,0x1455,0x81A0,0x13F2,0x8190, -0x138F,0x8181,0x132B,0x8172,0x12C8,0x8163,0x1265,0x8154,0x1201,0x8146,0x119E, -0x8138,0x113A,0x812A,0x10D6,0x811D,0x1073,0x8110,0x100F,0x8103,0x0FAB,0x80F6, -0x0F47,0x80EA,0x0EE4,0x80DE,0x0E80,0x80D3,0x0E1C,0x80C8,0x0DB8,0x80BD,0x0D54, -0x80B2,0x0CF0,0x80A8,0x0C8C,0x809E,0x0C28,0x8094,0x0BC4,0x808B,0x0B60,0x8082, -0x0AFB,0x8079,0x0A97,0x8070,0x0A33,0x8068,0x09CF,0x8060,0x096B,0x8059,0x0906, -0x8052,0x08A2,0x804B,0x083E,0x8044,0x07D9,0x803E,0x0775,0x8038,0x0711,0x8032, -0x06AC,0x802D,0x0648,0x8027,0x05E3,0x8023,0x057F,0x801E,0x051B,0x801A,0x04B6, -0x8016,0x0452,0x8013,0x03ED,0x800F,0x0389,0x800C,0x0324,0x800A,0x02C0,0x8008, -0x025B,0x8006,0x01F7,0x8004,0x0192,0x8002,0x012E,0x8001,0x00C9,0x8001,0x0065, -0x8000,0x0000,0x8000,0xFF9B,0x8000,0xFF37,0x8001,0xFED2,0x8001,0xFE6E,0x8002, -0xFE09,0x8004,0xFDA5,0x8006,0xFD40,0x8008,0xFCDC,0x800A,0xFC77,0x800C,0xFC13, -0x800F,0xFBAE,0x8013,0xFB4A,0x8016,0xFAE5,0x801A,0xFA81,0x801E,0xFA1D,0x8023, -0xF9B8,0x8027,0xF954,0x802D,0xF8EF,0x8032,0xF88B,0x8038,0xF827,0x803E,0xF7C2, -0x8044,0xF75E,0x804B,0xF6FA,0x8052,0xF695,0x8059,0xF631,0x8060,0xF5CD,0x8068, -0xF569,0x8070,0xF505,0x8079,0xF4A0,0x8082,0xF43C,0x808B,0xF3D8,0x8094,0xF374, -0x809E,0xF310,0x80A8,0xF2AC,0x80B2,0xF248,0x80BD,0xF1E4,0x80C8,0xF180,0x80D3, -0xF11C,0x80DE,0xF0B9,0x80EA,0xF055,0x80F6,0xEFF1,0x8103,0xEF8D,0x8110,0xEF2A, -0x811D,0xEEC6,0x812A,0xEE62,0x8138,0xEDFF,0x8146,0xED9B,0x8154,0xED38,0x8163, -0xECD5,0x8172,0xEC71,0x8181,0xEC0E,0x8190,0xEBAB,0x81A0,0xEB47,0x81B0,0xEAE4, -0x81C1,0xEA81,0x81D1,0xEA1E,0x81E2,0xE9BB,0x81F4,0xE958,0x8205,0xE8F5,0x8217, -0xE892,0x822A,0xE82F,0x823C,0xE7CD,0x824F,0xE76A,0x8262,0xE707,0x8276,0xE6A5, -0x8289,0xE642,0x829D,0xE5E0,0x82B2,0xE57D,0x82C6,0xE51B,0x82DB,0xE4B9,0x82F1, -0xE457,0x8306,0xE3F4,0x831C,0xE392,0x8332,0xE330,0x8349,0xE2CF,0x8360,0xE26D, -0x8377,0xE20B,0x838E,0xE1A9,0x83A6,0xE148,0x83BE,0xE0E6,0x83D6,0xE085,0x83EF, -0xE023,0x8407,0xDFC2,0x8421,0xDF61,0x843A,0xDEFF,0x8454,0xDE9E,0x846E,0xDE3D, -0x8488,0xDDDC,0x84A3,0xDD7C,0x84BE,0xDD1B,0x84D9,0xDCBA,0x84F5,0xDC59,0x8511, -0xDBF9,0x852D,0xDB99,0x8549,0xDB38,0x8566,0xDAD8,0x8583,0xDA78,0x85A0,0xDA18, -0x85BE,0xD9B8,0x85DC,0xD958,0x85FA,0xD8F8,0x8619,0xD898,0x8637,0xD839,0x8656, -0xD7D9,0x8676,0xD77A,0x8696,0xD71B,0x86B6,0xD6BB,0x86D6,0xD65C,0x86F6,0xD5FD, -0x8717,0xD59E,0x8738,0xD53F,0x875A,0xD4E1,0x877B,0xD482,0x879D,0xD424,0x87C0, -0xD3C5,0x87E2,0xD367,0x8805,0xD309,0x8828,0xD2AB,0x884C,0xD24D,0x8870,0xD1EF, -0x8894,0xD191,0x88B8,0xD134,0x88DD,0xD0D6,0x8902,0xD079,0x8927,0xD01B,0x894C, -0xCFBE,0x8972,0xCF61,0x8998,0xCF04,0x89BE,0xCEA7,0x89E5,0xCE4B,0x8A0C,0xCDEE, -0x8A33,0xCD92,0x8A5A,0xCD35,0x8A82,0xCCD9,0x8AAA,0xCC7D,0x8AD3,0xCC21,0x8AFB, -0xCBC5,0x8B24,0xCB69,0x8B4D,0xCB0E,0x8B77,0xCAB2,0x8BA0,0xCA57,0x8BCA,0xC9FC, -0x8BF5,0xC9A1,0x8C1F,0xC946,0x8C4A,0xC8EB,0x8C75,0xC890,0x8CA1,0xC836,0x8CCC, -0xC7DB,0x8CF8,0xC781,0x8D24,0xC727,0x8D51,0xC6CD,0x8D7E,0xC673,0x8DAB,0xC619, -0x8DD8,0xC5C0,0x8E06,0xC566,0x8E34,0xC50D,0x8E62,0xC4B4,0x8E90,0xC45B,0x8EBF, -0xC402,0x8EEE,0xC3A9,0x8F1D,0xC351,0x8F4D,0xC2F8,0x8F7D,0xC2A0,0x8FAD,0xC248, -0x8FDD,0xC1F0,0x900E,0xC198,0x903E,0xC140,0x9070,0xC0E9,0x90A1,0xC091,0x90D3, -0xC03A,0x9105,0xBFE3,0x9137,0xBF8C,0x9169,0xBF35,0x919C,0xBEDF,0x91CF,0xBE88, -0x9202,0xBE32,0x9236,0xBDDC,0x926A,0xBD86,0x929E,0xBD30,0x92D2,0xBCDA,0x9307, -0xBC85,0x933C,0xBC2F,0x9371,0xBBDA,0x93A6,0xBB85,0x93DC,0xBB30,0x9412,0xBADC, -0x9448,0xBA87,0x947E,0xBA33,0x94B5,0xB9DF,0x94EC,0xB98B,0x9523,0xB937,0x955B, -0xB8E3,0x9592,0xB890,0x95CA,0xB83C,0x9603,0xB7E9,0x963B,0xB796,0x9674,0xB743, -0x96AD,0xB6F1,0x96E6,0xB69E,0x9720,0xB64C,0x9759,0xB5FA,0x9793,0xB5A8,0x97CE, -0xB556,0x9808,0xB505,0x9843,0xB4B3,0x987E,0xB462,0x98B9,0xB411,0x98F5,0xB3C0, -0x9930,0xB36F,0x996D,0xB31F,0x99A9,0xB2CF,0x99E5,0xB27F,0x9A22,0xB22F,0x9A5F, -0xB1DF,0x9A9C,0xB18F,0x9ADA,0xB140,0x9B17,0xB0F1,0x9B55,0xB0A2,0x9B94,0xB053, -0x9BD2,0xB005,0x9C11,0xAFB6,0x9C50,0xAF68,0x9C8F,0xAF1A,0x9CCE,0xAECC,0x9D0E, -0xAE7F,0x9D4E,0xAE31,0x9D8E,0xADE4,0x9DCE,0xAD97,0x9E0F,0xAD4A,0x9E50,0xACFD, -0x9E91,0xACB1,0x9ED2,0xAC65,0x9F14,0xAC19,0x9F56,0xABCD,0x9F98,0xAB81,0x9FDA, -0xAB36,0xA01C,0xAAEB,0xA05F,0xAAA0,0xA0A2,0xAA55,0xA0E5,0xAA0A,0xA129,0xA9C0, -0xA16C,0xA976,0xA1B0,0xA92C,0xA1F4,0xA8E2,0xA238,0xA899,0xA27D,0xA84F,0xA2C2, -0xA806,0xA307,0xA7BD,0xA34C,0xA774,0xA391,0xA72C,0xA3D7,0xA6E4,0xA41D,0xA69C, -0xA463,0xA654,0xA4A9,0xA60C,0xA4F0,0xA5C5,0xA537,0xA57E,0xA57E,0xA537,0xA5C5, -0xA4F0,0xA60C,0xA4A9,0xA654,0xA463,0xA69C,0xA41D,0xA6E4,0xA3D7,0xA72C,0xA391, -0xA774,0xA34C,0xA7BD,0xA307,0xA806,0xA2C2,0xA84F,0xA27D,0xA899,0xA238,0xA8E2, -0xA1F4,0xA92C,0xA1B0,0xA976,0xA16C,0xA9C0,0xA129,0xAA0A,0xA0E5,0xAA55,0xA0A2, -0xAAA0,0xA05F,0xAAEB,0xA01C,0xAB36,0x9FDA,0xAB81,0x9F98,0xABCD,0x9F56,0xAC19, -0x9F14,0xAC65,0x9ED2,0xACB1,0x9E91,0xACFD,0x9E50,0xAD4A,0x9E0F,0xAD97,0x9DCE, -0xADE4,0x9D8E,0xAE31,0x9D4E,0xAE7F,0x9D0E,0xAECC,0x9CCE,0xAF1A,0x9C8F,0xAF68, -0x9C50,0xAFB6,0x9C11,0xB005,0x9BD2,0xB053,0x9B94,0xB0A2,0x9B55,0xB0F1,0x9B17, -0xB140,0x9ADA,0xB18F,0x9A9C,0xB1DF,0x9A5F,0xB22F,0x9A22,0xB27F,0x99E5,0xB2CF, -0x99A9,0xB31F,0x996D,0xB36F,0x9930,0xB3C0,0x98F5,0xB411,0x98B9,0xB462,0x987E, -0xB4B3,0x9843,0xB505,0x9808,0xB556,0x97CE,0xB5A8,0x9793,0xB5FA,0x9759,0xB64C, -0x9720,0xB69E,0x96E6,0xB6F1,0x96AD,0xB743,0x9674,0xB796,0x963B,0xB7E9,0x9603, -0xB83C,0x95CA,0xB890,0x9592,0xB8E3,0x955B,0xB937,0x9523,0xB98B,0x94EC,0xB9DF, -0x94B5,0xBA33,0x947E,0xBA87,0x9448,0xBADC,0x9412,0xBB30,0x93DC,0xBB85,0x93A6, -0xBBDA,0x9371,0xBC2F,0x933C,0xBC85,0x9307,0xBCDA,0x92D2,0xBD30,0x929E,0xBD86, -0x926A,0xBDDC,0x9236,0xBE32,0x9202,0xBE88,0x91CF,0xBEDF,0x919C,0xBF35,0x9169, -0xBF8C,0x9137,0xBFE3,0x9105,0xC03A,0x90D3,0xC091,0x90A1,0xC0E9,0x9070,0xC140, -0x903E,0xC198,0x900E,0xC1F0,0x8FDD,0xC248,0x8FAD,0xC2A0,0x8F7D,0xC2F8,0x8F4D, -0xC351,0x8F1D,0xC3A9,0x8EEE,0xC402,0x8EBF,0xC45B,0x8E90,0xC4B4,0x8E62,0xC50D, -0x8E34,0xC566,0x8E06,0xC5C0,0x8DD8,0xC619,0x8DAB,0xC673,0x8D7E,0xC6CD,0x8D51, -0xC727,0x8D24,0xC781,0x8CF8,0xC7DB,0x8CCC,0xC836,0x8CA1,0xC890,0x8C75,0xC8EB, -0x8C4A,0xC946,0x8C1F,0xC9A1,0x8BF5,0xC9FC,0x8BCA,0xCA57,0x8BA0,0xCAB2,0x8B77, -0xCB0E,0x8B4D,0xCB69,0x8B24,0xCBC5,0x8AFB,0xCC21,0x8AD3,0xCC7D,0x8AAA,0xCCD9, -0x8A82,0xCD35,0x8A5A,0xCD92,0x8A33,0xCDEE,0x8A0C,0xCE4B,0x89E5,0xCEA7,0x89BE, -0xCF04,0x8998,0xCF61,0x8972,0xCFBE,0x894C,0xD01B,0x8927,0xD079,0x8902,0xD0D6, -0x88DD,0xD134,0x88B8,0xD191,0x8894,0xD1EF,0x8870,0xD24D,0x884C,0xD2AB,0x8828, -0xD309,0x8805,0xD367,0x87E2,0xD3C5,0x87C0,0xD424,0x879D,0xD482,0x877B,0xD4E1, -0x875A,0xD53F,0x8738,0xD59E,0x8717,0xD5FD,0x86F6,0xD65C,0x86D6,0xD6BB,0x86B6, -0xD71B,0x8696,0xD77A,0x8676,0xD7D9,0x8656,0xD839,0x8637,0xD898,0x8619,0xD8F8, -0x85FA,0xD958,0x85DC,0xD9B8,0x85BE,0xDA18,0x85A0,0xDA78,0x8583,0xDAD8,0x8566, -0xDB38,0x8549,0xDB99,0x852D,0xDBF9,0x8511,0xDC59,0x84F5,0xDCBA,0x84D9,0xDD1B, -0x84BE,0xDD7C,0x84A3,0xDDDC,0x8488,0xDE3D,0x846E,0xDE9E,0x8454,0xDEFF,0x843A, -0xDF61,0x8421,0xDFC2,0x8407,0xE023,0x83EF,0xE085,0x83D6,0xE0E6,0x83BE,0xE148, -0x83A6,0xE1A9,0x838E,0xE20B,0x8377,0xE26D,0x8360,0xE2CF,0x8349,0xE330,0x8332, -0xE392,0x831C,0xE3F4,0x8306,0xE457,0x82F1,0xE4B9,0x82DB,0xE51B,0x82C6,0xE57D, -0x82B2,0xE5E0,0x829D,0xE642,0x8289,0xE6A5,0x8276,0xE707,0x8262,0xE76A,0x824F, -0xE7CD,0x823C,0xE82F,0x822A,0xE892,0x8217,0xE8F5,0x8205,0xE958,0x81F4,0xE9BB, -0x81E2,0xEA1E,0x81D1,0xEA81,0x81C1,0xEAE4,0x81B0,0xEB47,0x81A0,0xEBAB,0x8190, -0xEC0E,0x8181,0xEC71,0x8172,0xECD5,0x8163,0xED38,0x8154,0xED9B,0x8146,0xEDFF, -0x8138,0xEE62,0x812A,0xEEC6,0x811D,0xEF2A,0x8110,0xEF8D,0x8103,0xEFF1,0x80F6, -0xF055,0x80EA,0xF0B9,0x80DE,0xF11C,0x80D3,0xF180,0x80C8,0xF1E4,0x80BD,0xF248, -0x80B2,0xF2AC,0x80A8,0xF310,0x809E,0xF374,0x8094,0xF3D8,0x808B,0xF43C,0x8082, -0xF4A0,0x8079,0xF505,0x8070,0xF569,0x8068,0xF5CD,0x8060,0xF631,0x8059,0xF695, -0x8052,0xF6FA,0x804B,0xF75E,0x8044,0xF7C2,0x803E,0xF827,0x8038,0xF88B,0x8032, -0xF8EF,0x802D,0xF954,0x8027,0xF9B8,0x8023,0xFA1D,0x801E,0xFA81,0x801A,0xFAE5, -0x8016,0xFB4A,0x8013,0xFBAE,0x800F,0xFC13,0x800C,0xFC77,0x800A,0xFCDC,0x8008, -0xFD40,0x8006,0xFDA5,0x8004,0xFE09,0x8002,0xFE6E,0x8001,0xFED2,0x8001,0xFF37, -0x8000,0xFF9B,0x7FFF,0x0000,0x7FFE,0xFE6E,0x7FF6,0xFCDC,0x7FEA,0xFB4A,0x7FD9, -0xF9B8,0x7FC2,0xF827,0x7FA7,0xF695,0x7F87,0xF505,0x7F62,0xF374,0x7F38,0xF1E4, -0x7F0A,0xF055,0x7ED6,0xEEC6,0x7E9D,0xED38,0x7E60,0xEBAB,0x7E1E,0xEA1E,0x7DD6, -0xE892,0x7D8A,0xE707,0x7D3A,0xE57D,0x7CE4,0xE3F4,0x7C89,0xE26D,0x7C2A,0xE0E6, -0x7BC6,0xDF61,0x7B5D,0xDDDC,0x7AEF,0xDC59,0x7A7D,0xDAD8,0x7A06,0xD958,0x798A, -0xD7D9,0x790A,0xD65C,0x7885,0xD4E1,0x77FB,0xD367,0x776C,0xD1EF,0x76D9,0xD079, -0x7642,0xCF04,0x75A6,0xCD92,0x7505,0xCC21,0x7460,0xCAB2,0x73B6,0xC946,0x7308, -0xC7DB,0x7255,0xC673,0x719E,0xC50D,0x70E3,0xC3A9,0x7023,0xC248,0x6F5F,0xC0E9, -0x6E97,0xBF8C,0x6DCA,0xBE32,0x6CF9,0xBCDA,0x6C24,0xBB85,0x6B4B,0xBA33,0x6A6E, -0xB8E3,0x698C,0xB796,0x68A7,0xB64C,0x67BD,0xB505,0x66D0,0xB3C0,0x65DE,0xB27F, -0x64E9,0xB140,0x63EF,0xB005,0x62F2,0xAECC,0x61F1,0xAD97,0x60EC,0xAC65,0x5FE4, -0xAB36,0x5ED7,0xAA0A,0x5DC8,0xA8E2,0x5CB4,0xA7BD,0x5B9D,0xA69C,0x5A82,0xA57E, -0x5964,0xA463,0x5843,0xA34C,0x571E,0xA238,0x55F6,0xA129,0x54CA,0xA01C,0x539B, -0x9F14,0x5269,0x9E0F,0x5134,0x9D0E,0x4FFB,0x9C11,0x4EC0,0x9B17,0x4D81,0x9A22, -0x4C40,0x9930,0x4AFB,0x9843,0x49B4,0x9759,0x486A,0x9674,0x471D,0x9592,0x45CD, -0x94B5,0x447B,0x93DC,0x4326,0x9307,0x41CE,0x9236,0x4074,0x9169,0x3F17,0x90A1, -0x3DB8,0x8FDD,0x3C57,0x8F1D,0x3AF3,0x8E62,0x398D,0x8DAB,0x3825,0x8CF8,0x36BA, -0x8C4A,0x354E,0x8BA0,0x33DF,0x8AFB,0x326E,0x8A5A,0x30FC,0x89BE,0x2F87,0x8927, -0x2E11,0x8894,0x2C99,0x8805,0x2B1F,0x877B,0x29A4,0x86F6,0x2827,0x8676,0x26A8, -0x85FA,0x2528,0x8583,0x23A7,0x8511,0x2224,0x84A3,0x209F,0x843A,0x1F1A,0x83D6, -0x1D93,0x8377,0x1C0C,0x831C,0x1A83,0x82C6,0x18F9,0x8276,0x176E,0x822A,0x15E2, -0x81E2,0x1455,0x81A0,0x12C8,0x8163,0x113A,0x812A,0x0FAB,0x80F6,0x0E1C,0x80C8, -0x0C8C,0x809E,0x0AFB,0x8079,0x096B,0x8059,0x07D9,0x803E,0x0648,0x8027,0x04B6, -0x8016,0x0324,0x800A,0x0192,0x8002,0x0000,0x8000,0xFE6E,0x8002,0xFCDC,0x800A, -0xFB4A,0x8016,0xF9B8,0x8027,0xF827,0x803E,0xF695,0x8059,0xF505,0x8079,0xF374, -0x809E,0xF1E4,0x80C8,0xF055,0x80F6,0xEEC6,0x812A,0xED38,0x8163,0xEBAB,0x81A0, -0xEA1E,0x81E2,0xE892,0x822A,0xE707,0x8276,0xE57D,0x82C6,0xE3F4,0x831C,0xE26D, -0x8377,0xE0E6,0x83D6,0xDF61,0x843A,0xDDDC,0x84A3,0xDC59,0x8511,0xDAD8,0x8583, -0xD958,0x85FA,0xD7D9,0x8676,0xD65C,0x86F6,0xD4E1,0x877B,0xD367,0x8805,0xD1EF, -0x8894,0xD079,0x8927,0xCF04,0x89BE,0xCD92,0x8A5A,0xCC21,0x8AFB,0xCAB2,0x8BA0, -0xC946,0x8C4A,0xC7DB,0x8CF8,0xC673,0x8DAB,0xC50D,0x8E62,0xC3A9,0x8F1D,0xC248, -0x8FDD,0xC0E9,0x90A1,0xBF8C,0x9169,0xBE32,0x9236,0xBCDA,0x9307,0xBB85,0x93DC, -0xBA33,0x94B5,0xB8E3,0x9592,0xB796,0x9674,0xB64C,0x9759,0xB505,0x9843,0xB3C0, -0x9930,0xB27F,0x9A22,0xB140,0x9B17,0xB005,0x9C11,0xAECC,0x9D0E,0xAD97,0x9E0F, -0xAC65,0x9F14,0xAB36,0xA01C,0xAA0A,0xA129,0xA8E2,0xA238,0xA7BD,0xA34C,0xA69C, -0xA463,0xA57E,0xA57E,0xA463,0xA69C,0xA34C,0xA7BD,0xA238,0xA8E2,0xA129,0xAA0A, -0xA01C,0xAB36,0x9F14,0xAC65,0x9E0F,0xAD97,0x9D0E,0xAECC,0x9C11,0xB005,0x9B17, -0xB140,0x9A22,0xB27F,0x9930,0xB3C0,0x9843,0xB505,0x9759,0xB64C,0x9674,0xB796, -0x9592,0xB8E3,0x94B5,0xBA33,0x93DC,0xBB85,0x9307,0xBCDA,0x9236,0xBE32,0x9169, -0xBF8C,0x90A1,0xC0E9,0x8FDD,0xC248,0x8F1D,0xC3A9,0x8E62,0xC50D,0x8DAB,0xC673, -0x8CF8,0xC7DB,0x8C4A,0xC946,0x8BA0,0xCAB2,0x8AFB,0xCC21,0x8A5A,0xCD92,0x89BE, -0xCF04,0x8927,0xD079,0x8894,0xD1EF,0x8805,0xD367,0x877B,0xD4E1,0x86F6,0xD65C, -0x8676,0xD7D9,0x85FA,0xD958,0x8583,0xDAD8,0x8511,0xDC59,0x84A3,0xDDDC,0x843A, -0xDF61,0x83D6,0xE0E6,0x8377,0xE26D,0x831C,0xE3F4,0x82C6,0xE57D,0x8276,0xE707, -0x822A,0xE892,0x81E2,0xEA1E,0x81A0,0xEBAB,0x8163,0xED38,0x812A,0xEEC6,0x80F6, -0xF055,0x80C8,0xF1E4,0x809E,0xF374,0x8079,0xF505,0x8059,0xF695,0x803E,0xF827, -0x8027,0xF9B8,0x8016,0xFB4A,0x800A,0xFCDC,0x8002,0xFE6E,0x7FFF,0x0000,0x7FD9, -0xF9B8,0x7F62,0xF374,0x7E9D,0xED38,0x7D8A,0xE707,0x7C2A,0xE0E6,0x7A7D,0xDAD8, -0x7885,0xD4E1,0x7642,0xCF04,0x73B6,0xC946,0x70E3,0xC3A9,0x6DCA,0xBE32,0x6A6E, -0xB8E3,0x66D0,0xB3C0,0x62F2,0xAECC,0x5ED7,0xAA0A,0x5A82,0xA57E,0x55F6,0xA129, -0x5134,0x9D0E,0x4C40,0x9930,0x471D,0x9592,0x41CE,0x9236,0x3C57,0x8F1D,0x36BA, -0x8C4A,0x30FC,0x89BE,0x2B1F,0x877B,0x2528,0x8583,0x1F1A,0x83D6,0x18F9,0x8276, -0x12C8,0x8163,0x0C8C,0x809E,0x0648,0x8027,0x0000,0x8000,0xF9B8,0x8027,0xF374, -0x809E,0xED38,0x8163,0xE707,0x8276,0xE0E6,0x83D6,0xDAD8,0x8583,0xD4E1,0x877B, -0xCF04,0x89BE,0xC946,0x8C4A,0xC3A9,0x8F1D,0xBE32,0x9236,0xB8E3,0x9592,0xB3C0, -0x9930,0xAECC,0x9D0E,0xAA0A,0xA129,0xA57E,0xA57E,0xA129,0xAA0A,0x9D0E,0xAECC, -0x9930,0xB3C0,0x9592,0xB8E3,0x9236,0xBE32,0x8F1D,0xC3A9,0x8C4A,0xC946,0x89BE, -0xCF04,0x877B,0xD4E1,0x8583,0xDAD8,0x83D6,0xE0E6,0x8276,0xE707,0x8163,0xED38, -0x809E,0xF374,0x8027,0xF9B8,0x7FFF,0x0000,0x7D8A,0xE707,0x7642,0xCF04,0x6A6E, -0xB8E3,0x5A82,0xA57E,0x471D,0x9592,0x30FC,0x89BE,0x18F9,0x8276,0x0000,0x8000, -0xE707,0x8276,0xCF04,0x89BE,0xB8E3,0x9592,0xA57E,0xA57E,0x9592,0xB8E3,0x89BE, -0xCF04,0x8276,0xE707,0x7FFF,0x0000,0x5A82,0xA57E,0x0000,0x8000,0xA57E,0xA57E,}; - -q15_t rearranged_twiddle_stride3_4096_q15[2728]={ -0x7FFF,0x0000,0x7FFF,0xFF69,0x7FFF,0xFED2,0x7FFD,0xFE3C,0x7FFA,0xFDA5,0x7FF7, -0xFD0E,0x7FF4,0xFC77,0x7FEF,0xFBE1,0x7FEA,0xFB4A,0x7FE4,0xFAB3,0x7FDD,0xFA1D, -0x7FD6,0xF986,0x7FCE,0xF8EF,0x7FC5,0xF859,0x7FBC,0xF7C2,0x7FB2,0xF72C,0x7FA7, -0xF695,0x7F9C,0xF5FF,0x7F90,0xF569,0x7F83,0xF4D3,0x7F75,0xF43C,0x7F67,0xF3A6, -0x7F58,0xF310,0x7F49,0xF27A,0x7F38,0xF1E4,0x7F27,0xF14E,0x7F16,0xF0B9,0x7F03, -0xF023,0x7EF0,0xEF8D,0x7EDD,0xEEF8,0x7EC8,0xEE62,0x7EB3,0xEDCD,0x7E9D,0xED38, -0x7E87,0xECA3,0x7E70,0xEC0E,0x7E58,0xEB79,0x7E3F,0xEAE4,0x7E26,0xEA4F,0x7E0C, -0xE9BB,0x7DF2,0xE926,0x7DD6,0xE892,0x7DBA,0xE7FE,0x7D9E,0xE76A,0x7D81,0xE6D6, -0x7D63,0xE642,0x7D44,0xE5AF,0x7D25,0xE51B,0x7D05,0xE488,0x7CE4,0xE3F4,0x7CC2, -0xE361,0x7CA0,0xE2CF,0x7C7E,0xE23C,0x7C5A,0xE1A9,0x7C36,0xE117,0x7C11,0xE085, -0x7BEC,0xDFF2,0x7BC6,0xDF61,0x7B9F,0xDECF,0x7B78,0xDE3D,0x7B50,0xDDAC,0x7B27, -0xDD1B,0x7AFD,0xDC8A,0x7AD3,0xDBF9,0x7AA8,0xDB68,0x7A7D,0xDAD8,0x7A51,0xDA48, -0x7A24,0xD9B8,0x79F7,0xD928,0x79C9,0xD898,0x799A,0xD809,0x796A,0xD77A,0x793A, -0xD6EB,0x790A,0xD65C,0x78D8,0xD5CE,0x78A6,0xD53F,0x7874,0xD4B1,0x7840,0xD424, -0x780C,0xD396,0x77D8,0xD309,0x77A2,0xD27C,0x776C,0xD1EF,0x7736,0xD162,0x76FE, -0xD0D6,0x76C7,0xD04A,0x768E,0xCFBE,0x7655,0xCF33,0x761B,0xCEA7,0x75E1,0xCE1C, -0x75A6,0xCD92,0x756A,0xCD07,0x752D,0xCC7D,0x74F0,0xCBF3,0x74B3,0xCB69,0x7475, -0xCAE0,0x7436,0xCA57,0x73F6,0xC9CE,0x73B6,0xC946,0x7375,0xC8BE,0x7334,0xC836, -0x72F2,0xC7AE,0x72AF,0xC727,0x726C,0xC6A0,0x7228,0xC619,0x71E3,0xC593,0x719E, -0xC50D,0x7158,0xC487,0x7112,0xC402,0x70CB,0xC37D,0x7083,0xC2F8,0x703B,0xC274, -0x6FF2,0xC1F0,0x6FA9,0xC16C,0x6F5F,0xC0E9,0x6F14,0xC066,0x6EC9,0xBFE3,0x6E7D, -0xBF61,0x6E31,0xBEDF,0x6DE4,0xBE5D,0x6D96,0xBDDC,0x6D48,0xBD5B,0x6CF9,0xBCDA, -0x6CAA,0xBC5A,0x6C5A,0xBBDA,0x6C09,0xBB5B,0x6BB8,0xBADC,0x6B66,0xBA5D,0x6B14, -0xB9DF,0x6AC1,0xB961,0x6A6E,0xB8E3,0x6A1A,0xB866,0x69C5,0xB7E9,0x6970,0xB76D, -0x691A,0xB6F1,0x68C4,0xB675,0x686D,0xB5FA,0x6815,0xB57F,0x67BD,0xB505,0x6764, -0xB48B,0x670B,0xB411,0x66B2,0xB398,0x6657,0xB31F,0x65FC,0xB2A7,0x65A1,0xB22F, -0x6545,0xB1B7,0x64E9,0xB140,0x648B,0xB0C9,0x642E,0xB053,0x63D0,0xAFDD,0x6371, -0xAF68,0x6312,0xAEF3,0x62B2,0xAE7F,0x6252,0xAE0B,0x61F1,0xAD97,0x6190,0xAD24, -0x612E,0xACB1,0x60CB,0xAC3F,0x6068,0xABCD,0x6005,0xAB5C,0x5FA1,0xAAEB,0x5F3C, -0xAA7A,0x5ED7,0xAA0A,0x5E72,0xA99B,0x5E0C,0xA92C,0x5DA5,0xA8BD,0x5D3E,0xA84F, -0x5CD7,0xA7E2,0x5C6F,0xA774,0x5C06,0xA708,0x5B9D,0xA69C,0x5B34,0xA630,0x5AC9, -0xA5C5,0x5A5F,0xA55A,0x59F4,0xA4F0,0x5988,0xA486,0x591C,0xA41D,0x58B0,0xA3B4, -0x5843,0xA34C,0x57D5,0xA2E4,0x5767,0xA27D,0x56F9,0xA216,0x568A,0xA1B0,0x561B, -0xA14A,0x55AB,0xA0E5,0x553B,0xA080,0x54CA,0xA01C,0x5459,0x9FB9,0x53E7,0x9F56, -0x5375,0x9EF3,0x5303,0x9E91,0x5290,0x9E2F,0x521C,0x9DCE,0x51A8,0x9D6E,0x5134, -0x9D0E,0x50BF,0x9CAF,0x504A,0x9C50,0x4FD4,0x9BF1,0x4F5E,0x9B94,0x4EE8,0x9B36, -0x4E71,0x9ADA,0x4DF9,0x9A7E,0x4D81,0x9A22,0x4D09,0x99C7,0x4C91,0x996D,0x4C17, -0x9913,0x4B9E,0x98B9,0x4B24,0x9860,0x4AAA,0x9808,0x4A2F,0x97B0,0x49B4,0x9759, -0x4939,0x9703,0x48BD,0x96AD,0x4840,0x9657,0x47C4,0x9603,0x4747,0x95AE,0x46C9, -0x955B,0x464B,0x9508,0x45CD,0x94B5,0x454F,0x9463,0x44D0,0x9412,0x4450,0x93C1, -0x43D1,0x9371,0x4351,0x9321,0x42D0,0x92D2,0x424F,0x9284,0x41CE,0x9236,0x414D, -0x91E9,0x40CB,0x919C,0x4048,0x9150,0x3FC6,0x9105,0x3F43,0x90BA,0x3EC0,0x9070, -0x3E3C,0x9026,0x3DB8,0x8FDD,0x3D34,0x8F95,0x3CAF,0x8F4D,0x3C2A,0x8F06,0x3BA5, -0x8EBF,0x3B20,0x8E79,0x3A9A,0x8E34,0x3A13,0x8DEF,0x398D,0x8DAB,0x3906,0x8D67, -0x387F,0x8D24,0x37F7,0x8CE2,0x3770,0x8CA1,0x36E8,0x8C60,0x365F,0x8C1F,0x35D7, -0x8BDF,0x354E,0x8BA0,0x34C4,0x8B62,0x343B,0x8B24,0x33B1,0x8AE7,0x3327,0x8AAA, -0x329D,0x8A6E,0x3212,0x8A33,0x3187,0x89F8,0x30FC,0x89BE,0x3070,0x8985,0x2FE5, -0x894C,0x2F59,0x8914,0x2ECC,0x88DD,0x2E40,0x88A6,0x2DB3,0x8870,0x2D26,0x883A, -0x2C99,0x8805,0x2C0C,0x87D1,0x2B7E,0x879D,0x2AF0,0x876B,0x2A62,0x8738,0x29D3, -0x8707,0x2945,0x86D6,0x28B6,0x86A5,0x2827,0x8676,0x2797,0x8647,0x2708,0x8619, -0x2678,0x85EB,0x25E8,0x85BE,0x2558,0x8592,0x24C8,0x8566,0x2437,0x853B,0x23A7, -0x8511,0x2316,0x84E7,0x2284,0x84BE,0x21F3,0x8496,0x2162,0x846E,0x20D0,0x8447, -0x203E,0x8421,0x1FAC,0x83FB,0x1F1A,0x83D6,0x1E88,0x83B2,0x1DF5,0x838E,0x1D62, -0x836B,0x1CD0,0x8349,0x1C3D,0x8327,0x1BA9,0x8306,0x1B16,0x82E6,0x1A83,0x82C6, -0x19EF,0x82A8,0x195B,0x8289,0x18C7,0x826C,0x1833,0x824F,0x179F,0x8233,0x170B, -0x8217,0x1677,0x81FD,0x15E2,0x81E2,0x154D,0x81C9,0x14B9,0x81B0,0x1424,0x8198, -0x138F,0x8181,0x12FA,0x816A,0x1265,0x8154,0x11CF,0x813F,0x113A,0x812A,0x10A4, -0x8116,0x100F,0x8103,0x0F79,0x80F0,0x0EE4,0x80DE,0x0E4E,0x80CD,0x0DB8,0x80BD, -0x0D22,0x80AD,0x0C8C,0x809E,0x0BF6,0x808F,0x0B60,0x8082,0x0AC9,0x8075,0x0A33, -0x8068,0x099D,0x805D,0x0906,0x8052,0x0870,0x8047,0x07D9,0x803E,0x0743,0x8035, -0x06AC,0x802D,0x0616,0x8025,0x057F,0x801E,0x04E8,0x8018,0x0452,0x8013,0x03BB, -0x800E,0x0324,0x800A,0x028D,0x8007,0x01F7,0x8004,0x0160,0x8002,0x00C9,0x8001, -0x0032,0x8000,0xFF9B,0x8000,0xFF05,0x8001,0xFE6E,0x8002,0xFDD7,0x8005,0xFD40, -0x8008,0xFCAA,0x800B,0xFC13,0x800F,0xFB7C,0x8014,0xFAE5,0x801A,0xFA4F,0x8020, -0xF9B8,0x8027,0xF922,0x802F,0xF88B,0x8038,0xF7F4,0x8041,0xF75E,0x804B,0xF6C8, -0x8055,0xF631,0x8060,0xF59B,0x806C,0xF505,0x8079,0xF46E,0x8086,0xF3D8,0x8094, -0xF342,0x80A3,0xF2AC,0x80B2,0xF216,0x80C2,0xF180,0x80D3,0xF0EB,0x80E4,0xF055, -0x80F6,0xEFBF,0x8109,0xEF2A,0x811D,0xEE94,0x8131,0xEDFF,0x8146,0xED6A,0x815B, -0xECD5,0x8172,0xEC3F,0x8188,0xEBAB,0x81A0,0xEB16,0x81B8,0xEA81,0x81D1,0xE9EC, -0x81EB,0xE958,0x8205,0xE8C4,0x8220,0xE82F,0x823C,0xE79B,0x8259,0xE707,0x8276, -0xE673,0x8293,0xE5E0,0x82B2,0xE54C,0x82D1,0xE4B9,0x82F1,0xE426,0x8311,0xE392, -0x8332,0xE2FF,0x8354,0xE26D,0x8377,0xE1DA,0x839A,0xE148,0x83BE,0xE0B5,0x83E2, -0xE023,0x8407,0xDF91,0x842D,0xDEFF,0x8454,0xDE6E,0x847B,0xDDDC,0x84A3,0xDD4B, -0x84CC,0xDCBA,0x84F5,0xDC29,0x851F,0xDB99,0x8549,0xDB08,0x8574,0xDA78,0x85A0, -0xD9E8,0x85CD,0xD958,0x85FA,0xD8C8,0x8628,0xD839,0x8656,0xD7AA,0x8686,0xD71B, -0x86B6,0xD68C,0x86E6,0xD5FD,0x8717,0xD56F,0x8749,0xD4E1,0x877B,0xD453,0x87AF, -0xD3C5,0x87E2,0xD338,0x8817,0xD2AB,0x884C,0xD21E,0x8882,0xD191,0x88B8,0xD105, -0x88EF,0xD079,0x8927,0xCFED,0x895F,0xCF61,0x8998,0xCED6,0x89D2,0xCE4B,0x8A0C, -0xCDC0,0x8A47,0xCD35,0x8A82,0xCCAB,0x8ABE,0xCC21,0x8AFB,0xCB97,0x8B39,0xCB0E, -0x8B77,0xCA85,0x8BB5,0xC9FC,0x8BF5,0xC973,0x8C35,0xC8EB,0x8C75,0xC863,0x8CB6, -0xC7DB,0x8CF8,0xC754,0x8D3B,0xC6CD,0x8D7E,0xC646,0x8DC1,0xC5C0,0x8E06,0xC53A, -0x8E4B,0xC4B4,0x8E90,0xC42E,0x8ED6,0xC3A9,0x8F1D,0xC324,0x8F65,0xC2A0,0x8FAD, -0xC21C,0x8FF5,0xC198,0x903E,0xC114,0x9088,0xC091,0x90D3,0xC00F,0x911E,0xBF8C, -0x9169,0xBF0A,0x91B6,0xBE88,0x9202,0xBE07,0x9250,0xBD86,0x929E,0xBD05,0x92EC, -0xBC85,0x933C,0xBC05,0x938B,0xBB85,0x93DC,0xBB06,0x942D,0xBA87,0x947E,0xBA09, -0x94D0,0xB98B,0x9523,0xB90D,0x9577,0xB890,0x95CA,0xB813,0x961F,0xB796,0x9674, -0xB71A,0x96C9,0xB69E,0x9720,0xB623,0x9776,0xB5A8,0x97CE,0xB52D,0x9826,0xB4B3, -0x987E,0xB439,0x98D7,0xB3C0,0x9930,0xB347,0x998B,0xB2CF,0x99E5,0xB257,0x9A40, -0xB1DF,0x9A9C,0xB168,0x9AF9,0xB0F1,0x9B55,0xB07B,0x9BB3,0xB005,0x9C11,0xAF8F, -0x9C6F,0xAF1A,0x9CCE,0xAEA5,0x9D2E,0xAE31,0x9D8E,0xADBD,0x9DEF,0xAD4A,0x9E50, -0xACD7,0x9EB2,0xAC65,0x9F14,0xABF3,0x9F77,0xAB81,0x9FDA,0xAB10,0xA03E,0xAAA0, -0xA0A2,0xAA30,0xA107,0xA9C0,0xA16C,0xA951,0xA1D2,0xA8E2,0xA238,0xA874,0xA29F, -0xA806,0xA307,0xA799,0xA36F,0xA72C,0xA3D7,0xA6C0,0xA440,0xA654,0xA4A9,0xA5E8, -0xA513,0xA57E,0xA57E,0xA513,0xA5E8,0xA4A9,0xA654,0xA440,0xA6C0,0xA3D7,0xA72C, -0xA36F,0xA799,0xA307,0xA806,0xA29F,0xA874,0xA238,0xA8E2,0xA1D2,0xA951,0xA16C, -0xA9C0,0xA107,0xAA30,0xA0A2,0xAAA0,0xA03E,0xAB10,0x9FDA,0xAB81,0x9F77,0xABF3, -0x9F14,0xAC65,0x9EB2,0xACD7,0x9E50,0xAD4A,0x9DEF,0xADBD,0x9D8E,0xAE31,0x9D2E, -0xAEA5,0x9CCE,0xAF1A,0x9C6F,0xAF8F,0x9C11,0xB005,0x9BB3,0xB07B,0x9B55,0xB0F1, -0x9AF9,0xB168,0x9A9C,0xB1DF,0x9A40,0xB257,0x99E5,0xB2CF,0x998B,0xB347,0x9930, -0xB3C0,0x98D7,0xB439,0x987E,0xB4B3,0x9826,0xB52D,0x97CE,0xB5A8,0x9776,0xB623, -0x9720,0xB69E,0x96C9,0xB71A,0x9674,0xB796,0x961F,0xB813,0x95CA,0xB890,0x9577, -0xB90D,0x9523,0xB98B,0x94D0,0xBA09,0x947E,0xBA87,0x942D,0xBB06,0x93DC,0xBB85, -0x938B,0xBC05,0x933C,0xBC85,0x92EC,0xBD05,0x929E,0xBD86,0x9250,0xBE07,0x9202, -0xBE88,0x91B6,0xBF0A,0x9169,0xBF8C,0x911E,0xC00F,0x90D3,0xC091,0x9088,0xC114, -0x903E,0xC198,0x8FF5,0xC21C,0x8FAD,0xC2A0,0x8F65,0xC324,0x8F1D,0xC3A9,0x8ED6, -0xC42E,0x8E90,0xC4B4,0x8E4B,0xC53A,0x8E06,0xC5C0,0x8DC1,0xC646,0x8D7E,0xC6CD, -0x8D3B,0xC754,0x8CF8,0xC7DB,0x8CB6,0xC863,0x8C75,0xC8EB,0x8C35,0xC973,0x8BF5, -0xC9FC,0x8BB5,0xCA85,0x8B77,0xCB0E,0x8B39,0xCB97,0x8AFB,0xCC21,0x8ABE,0xCCAB, -0x8A82,0xCD35,0x8A47,0xCDC0,0x8A0C,0xCE4B,0x89D2,0xCED6,0x8998,0xCF61,0x895F, -0xCFED,0x8927,0xD079,0x88EF,0xD105,0x88B8,0xD191,0x8882,0xD21E,0x884C,0xD2AB, -0x8817,0xD338,0x87E2,0xD3C5,0x87AF,0xD453,0x877B,0xD4E1,0x8749,0xD56F,0x8717, -0xD5FD,0x86E6,0xD68C,0x86B6,0xD71B,0x8686,0xD7AA,0x8656,0xD839,0x8628,0xD8C8, -0x85FA,0xD958,0x85CD,0xD9E8,0x85A0,0xDA78,0x8574,0xDB08,0x8549,0xDB99,0x851F, -0xDC29,0x84F5,0xDCBA,0x84CC,0xDD4B,0x84A3,0xDDDC,0x847B,0xDE6E,0x8454,0xDEFF, -0x842D,0xDF91,0x8407,0xE023,0x83E2,0xE0B5,0x83BE,0xE148,0x839A,0xE1DA,0x8377, -0xE26D,0x8354,0xE2FF,0x8332,0xE392,0x8311,0xE426,0x82F1,0xE4B9,0x82D1,0xE54C, -0x82B2,0xE5E0,0x8293,0xE673,0x8276,0xE707,0x8259,0xE79B,0x823C,0xE82F,0x8220, -0xE8C4,0x8205,0xE958,0x81EB,0xE9EC,0x81D1,0xEA81,0x81B8,0xEB16,0x81A0,0xEBAB, -0x8188,0xEC3F,0x8172,0xECD5,0x815B,0xED6A,0x8146,0xEDFF,0x8131,0xEE94,0x811D, -0xEF2A,0x8109,0xEFBF,0x80F6,0xF055,0x80E4,0xF0EB,0x80D3,0xF180,0x80C2,0xF216, -0x80B2,0xF2AC,0x80A3,0xF342,0x8094,0xF3D8,0x8086,0xF46E,0x8079,0xF505,0x806C, -0xF59B,0x8060,0xF631,0x8055,0xF6C8,0x804B,0xF75E,0x8041,0xF7F4,0x8038,0xF88B, -0x802F,0xF922,0x8027,0xF9B8,0x8020,0xFA4F,0x801A,0xFAE5,0x8014,0xFB7C,0x800F, -0xFC13,0x800B,0xFCAA,0x8008,0xFD40,0x8005,0xFDD7,0x8002,0xFE6E,0x8001,0xFF05, -0x8000,0xFF9B,0x8000,0x0032,0x8001,0x00C9,0x8002,0x0160,0x8004,0x01F7,0x8007, -0x028D,0x800A,0x0324,0x800E,0x03BB,0x8013,0x0452,0x8018,0x04E8,0x801E,0x057F, -0x8025,0x0616,0x802D,0x06AC,0x8035,0x0743,0x803E,0x07D9,0x8047,0x0870,0x8052, -0x0906,0x805D,0x099D,0x8068,0x0A33,0x8075,0x0AC9,0x8082,0x0B60,0x808F,0x0BF6, -0x809E,0x0C8C,0x80AD,0x0D22,0x80BD,0x0DB8,0x80CD,0x0E4E,0x80DE,0x0EE4,0x80F0, -0x0F79,0x8103,0x100F,0x8116,0x10A4,0x812A,0x113A,0x813F,0x11CF,0x8154,0x1265, -0x816A,0x12FA,0x8181,0x138F,0x8198,0x1424,0x81B0,0x14B9,0x81C9,0x154D,0x81E2, -0x15E2,0x81FD,0x1677,0x8217,0x170B,0x8233,0x179F,0x824F,0x1833,0x826C,0x18C7, -0x8289,0x195B,0x82A8,0x19EF,0x82C6,0x1A83,0x82E6,0x1B16,0x8306,0x1BA9,0x8327, -0x1C3D,0x8349,0x1CD0,0x836B,0x1D62,0x838E,0x1DF5,0x83B2,0x1E88,0x83D6,0x1F1A, -0x83FB,0x1FAC,0x8421,0x203E,0x8447,0x20D0,0x846E,0x2162,0x8496,0x21F3,0x84BE, -0x2284,0x84E7,0x2316,0x8511,0x23A7,0x853B,0x2437,0x8566,0x24C8,0x8592,0x2558, -0x85BE,0x25E8,0x85EB,0x2678,0x8619,0x2708,0x8647,0x2797,0x8676,0x2827,0x86A5, -0x28B6,0x86D6,0x2945,0x8707,0x29D3,0x8738,0x2A62,0x876B,0x2AF0,0x879D,0x2B7E, -0x87D1,0x2C0C,0x8805,0x2C99,0x883A,0x2D26,0x8870,0x2DB3,0x88A6,0x2E40,0x88DD, -0x2ECC,0x8914,0x2F59,0x894C,0x2FE5,0x8985,0x3070,0x89BE,0x30FC,0x89F8,0x3187, -0x8A33,0x3212,0x8A6E,0x329D,0x8AAA,0x3327,0x8AE7,0x33B1,0x8B24,0x343B,0x8B62, -0x34C4,0x8BA0,0x354E,0x8BDF,0x35D7,0x8C1F,0x365F,0x8C60,0x36E8,0x8CA1,0x3770, -0x8CE2,0x37F7,0x8D24,0x387F,0x8D67,0x3906,0x8DAB,0x398D,0x8DEF,0x3A13,0x8E34, -0x3A9A,0x8E79,0x3B20,0x8EBF,0x3BA5,0x8F06,0x3C2A,0x8F4D,0x3CAF,0x8F95,0x3D34, -0x8FDD,0x3DB8,0x9026,0x3E3C,0x9070,0x3EC0,0x90BA,0x3F43,0x9105,0x3FC6,0x9150, -0x4048,0x919C,0x40CB,0x91E9,0x414D,0x9236,0x41CE,0x9284,0x424F,0x92D2,0x42D0, -0x9321,0x4351,0x9371,0x43D1,0x93C1,0x4450,0x9412,0x44D0,0x9463,0x454F,0x94B5, -0x45CD,0x9508,0x464B,0x955B,0x46C9,0x95AE,0x4747,0x9603,0x47C4,0x9657,0x4840, -0x96AD,0x48BD,0x9703,0x4939,0x9759,0x49B4,0x97B0,0x4A2F,0x9808,0x4AAA,0x9860, -0x4B24,0x98B9,0x4B9E,0x9913,0x4C17,0x996D,0x4C91,0x99C7,0x4D09,0x9A22,0x4D81, -0x9A7E,0x4DF9,0x9ADA,0x4E71,0x9B36,0x4EE8,0x9B94,0x4F5E,0x9BF1,0x4FD4,0x9C50, -0x504A,0x9CAF,0x50BF,0x9D0E,0x5134,0x9D6E,0x51A8,0x9DCE,0x521C,0x9E2F,0x5290, -0x9E91,0x5303,0x9EF3,0x5375,0x9F56,0x53E7,0x9FB9,0x5459,0xA01C,0x54CA,0xA080, -0x553B,0xA0E5,0x55AB,0xA14A,0x561B,0xA1B0,0x568A,0xA216,0x56F9,0xA27D,0x5767, -0xA2E4,0x57D5,0xA34C,0x5843,0xA3B4,0x58B0,0xA41D,0x591C,0xA486,0x5988,0xA4F0, -0x59F4,0xA55A,0x5A5F,0xA5C5,0x5AC9,0xA630,0x5B34,0xA69C,0x5B9D,0xA708,0x5C06, -0xA774,0x5C6F,0xA7E2,0x5CD7,0xA84F,0x5D3E,0xA8BD,0x5DA5,0xA92C,0x5E0C,0xA99B, -0x5E72,0xAA0A,0x5ED7,0xAA7A,0x5F3C,0xAAEB,0x5FA1,0xAB5C,0x6005,0xABCD,0x6068, -0xAC3F,0x60CB,0xACB1,0x612E,0xAD24,0x6190,0xAD97,0x61F1,0xAE0B,0x6252,0xAE7F, -0x62B2,0xAEF3,0x6312,0xAF68,0x6371,0xAFDD,0x63D0,0xB053,0x642E,0xB0C9,0x648B, -0xB140,0x64E9,0xB1B7,0x6545,0xB22F,0x65A1,0xB2A7,0x65FC,0xB31F,0x6657,0xB398, -0x66B2,0xB411,0x670B,0xB48B,0x6764,0xB505,0x67BD,0xB57F,0x6815,0xB5FA,0x686D, -0xB675,0x68C4,0xB6F1,0x691A,0xB76D,0x6970,0xB7E9,0x69C5,0xB866,0x6A1A,0xB8E3, -0x6A6E,0xB961,0x6AC1,0xB9DF,0x6B14,0xBA5D,0x6B66,0xBADC,0x6BB8,0xBB5B,0x6C09, -0xBBDA,0x6C5A,0xBC5A,0x6CAA,0xBCDA,0x6CF9,0xBD5B,0x6D48,0xBDDC,0x6D96,0xBE5D, -0x6DE4,0xBEDF,0x6E31,0xBF61,0x6E7D,0xBFE3,0x6EC9,0xC066,0x6F14,0xC0E9,0x6F5F, -0xC16C,0x6FA9,0xC1F0,0x6FF2,0xC274,0x703B,0xC2F8,0x7083,0xC37D,0x70CB,0xC402, -0x7112,0xC487,0x7158,0xC50D,0x719E,0xC593,0x71E3,0xC619,0x7228,0xC6A0,0x726C, -0xC727,0x72AF,0xC7AE,0x72F2,0xC836,0x7334,0xC8BE,0x7375,0xC946,0x73B6,0xC9CE, -0x73F6,0xCA57,0x7436,0xCAE0,0x7475,0xCB69,0x74B3,0xCBF3,0x74F0,0xCC7D,0x752D, -0xCD07,0x756A,0xCD92,0x75A6,0xCE1C,0x75E1,0xCEA7,0x761B,0xCF33,0x7655,0xCFBE, -0x768E,0xD04A,0x76C7,0xD0D6,0x76FE,0xD162,0x7736,0xD1EF,0x776C,0xD27C,0x77A2, -0xD309,0x77D8,0xD396,0x780C,0xD424,0x7840,0xD4B1,0x7874,0xD53F,0x78A6,0xD5CE, -0x78D8,0xD65C,0x790A,0xD6EB,0x793A,0xD77A,0x796A,0xD809,0x799A,0xD898,0x79C9, -0xD928,0x79F7,0xD9B8,0x7A24,0xDA48,0x7A51,0xDAD8,0x7A7D,0xDB68,0x7AA8,0xDBF9, -0x7AD3,0xDC8A,0x7AFD,0xDD1B,0x7B27,0xDDAC,0x7B50,0xDE3D,0x7B78,0xDECF,0x7B9F, -0xDF61,0x7BC6,0xDFF2,0x7BEC,0xE085,0x7C11,0xE117,0x7C36,0xE1A9,0x7C5A,0xE23C, -0x7C7E,0xE2CF,0x7CA0,0xE361,0x7CC2,0xE3F4,0x7CE4,0xE488,0x7D05,0xE51B,0x7D25, -0xE5AF,0x7D44,0xE642,0x7D63,0xE6D6,0x7D81,0xE76A,0x7D9E,0xE7FE,0x7DBA,0xE892, -0x7DD6,0xE926,0x7DF2,0xE9BB,0x7E0C,0xEA4F,0x7E26,0xEAE4,0x7E3F,0xEB79,0x7E58, -0xEC0E,0x7E70,0xECA3,0x7E87,0xED38,0x7E9D,0xEDCD,0x7EB3,0xEE62,0x7EC8,0xEEF8, -0x7EDD,0xEF8D,0x7EF0,0xF023,0x7F03,0xF0B9,0x7F16,0xF14E,0x7F27,0xF1E4,0x7F38, -0xF27A,0x7F49,0xF310,0x7F58,0xF3A6,0x7F67,0xF43C,0x7F75,0xF4D3,0x7F83,0xF569, -0x7F90,0xF5FF,0x7F9C,0xF695,0x7FA7,0xF72C,0x7FB2,0xF7C2,0x7FBC,0xF859,0x7FC5, -0xF8EF,0x7FCE,0xF986,0x7FD6,0xFA1D,0x7FDD,0xFAB3,0x7FE4,0xFB4A,0x7FEA,0xFBE1, -0x7FEF,0xFC77,0x7FF4,0xFD0E,0x7FF7,0xFDA5,0x7FFA,0xFE3C,0x7FFD,0xFED2,0x7FFF, -0xFF69,0x7FFF,0x7FFF,0x0000,0x7FFA,0xFDA5,0x7FEA,0xFB4A,0x7FCE,0xF8EF,0x7FA7, -0xF695,0x7F75,0xF43C,0x7F38,0xF1E4,0x7EF0,0xEF8D,0x7E9D,0xED38,0x7E3F,0xEAE4, -0x7DD6,0xE892,0x7D63,0xE642,0x7CE4,0xE3F4,0x7C5A,0xE1A9,0x7BC6,0xDF61,0x7B27, -0xDD1B,0x7A7D,0xDAD8,0x79C9,0xD898,0x790A,0xD65C,0x7840,0xD424,0x776C,0xD1EF, -0x768E,0xCFBE,0x75A6,0xCD92,0x74B3,0xCB69,0x73B6,0xC946,0x72AF,0xC727,0x719E, -0xC50D,0x7083,0xC2F8,0x6F5F,0xC0E9,0x6E31,0xBEDF,0x6CF9,0xBCDA,0x6BB8,0xBADC, -0x6A6E,0xB8E3,0x691A,0xB6F1,0x67BD,0xB505,0x6657,0xB31F,0x64E9,0xB140,0x6371, -0xAF68,0x61F1,0xAD97,0x6068,0xABCD,0x5ED7,0xAA0A,0x5D3E,0xA84F,0x5B9D,0xA69C, -0x59F4,0xA4F0,0x5843,0xA34C,0x568A,0xA1B0,0x54CA,0xA01C,0x5303,0x9E91,0x5134, -0x9D0E,0x4F5E,0x9B94,0x4D81,0x9A22,0x4B9E,0x98B9,0x49B4,0x9759,0x47C4,0x9603, -0x45CD,0x94B5,0x43D1,0x9371,0x41CE,0x9236,0x3FC6,0x9105,0x3DB8,0x8FDD,0x3BA5, -0x8EBF,0x398D,0x8DAB,0x3770,0x8CA1,0x354E,0x8BA0,0x3327,0x8AAA,0x30FC,0x89BE, -0x2ECC,0x88DD,0x2C99,0x8805,0x2A62,0x8738,0x2827,0x8676,0x25E8,0x85BE,0x23A7, -0x8511,0x2162,0x846E,0x1F1A,0x83D6,0x1CD0,0x8349,0x1A83,0x82C6,0x1833,0x824F, -0x15E2,0x81E2,0x138F,0x8181,0x113A,0x812A,0x0EE4,0x80DE,0x0C8C,0x809E,0x0A33, -0x8068,0x07D9,0x803E,0x057F,0x801E,0x0324,0x800A,0x00C9,0x8001,0xFE6E,0x8002, -0xFC13,0x800F,0xF9B8,0x8027,0xF75E,0x804B,0xF505,0x8079,0xF2AC,0x80B2,0xF055, -0x80F6,0xEDFF,0x8146,0xEBAB,0x81A0,0xE958,0x8205,0xE707,0x8276,0xE4B9,0x82F1, -0xE26D,0x8377,0xE023,0x8407,0xDDDC,0x84A3,0xDB99,0x8549,0xD958,0x85FA,0xD71B, -0x86B6,0xD4E1,0x877B,0xD2AB,0x884C,0xD079,0x8927,0xCE4B,0x8A0C,0xCC21,0x8AFB, -0xC9FC,0x8BF5,0xC7DB,0x8CF8,0xC5C0,0x8E06,0xC3A9,0x8F1D,0xC198,0x903E,0xBF8C, -0x9169,0xBD86,0x929E,0xBB85,0x93DC,0xB98B,0x9523,0xB796,0x9674,0xB5A8,0x97CE, -0xB3C0,0x9930,0xB1DF,0x9A9C,0xB005,0x9C11,0xAE31,0x9D8E,0xAC65,0x9F14,0xAAA0, -0xA0A2,0xA8E2,0xA238,0xA72C,0xA3D7,0xA57E,0xA57E,0xA3D7,0xA72C,0xA238,0xA8E2, -0xA0A2,0xAAA0,0x9F14,0xAC65,0x9D8E,0xAE31,0x9C11,0xB005,0x9A9C,0xB1DF,0x9930, -0xB3C0,0x97CE,0xB5A8,0x9674,0xB796,0x9523,0xB98B,0x93DC,0xBB85,0x929E,0xBD86, -0x9169,0xBF8C,0x903E,0xC198,0x8F1D,0xC3A9,0x8E06,0xC5C0,0x8CF8,0xC7DB,0x8BF5, -0xC9FC,0x8AFB,0xCC21,0x8A0C,0xCE4B,0x8927,0xD079,0x884C,0xD2AB,0x877B,0xD4E1, -0x86B6,0xD71B,0x85FA,0xD958,0x8549,0xDB99,0x84A3,0xDDDC,0x8407,0xE023,0x8377, -0xE26D,0x82F1,0xE4B9,0x8276,0xE707,0x8205,0xE958,0x81A0,0xEBAB,0x8146,0xEDFF, -0x80F6,0xF055,0x80B2,0xF2AC,0x8079,0xF505,0x804B,0xF75E,0x8027,0xF9B8,0x800F, -0xFC13,0x8002,0xFE6E,0x8001,0x00C9,0x800A,0x0324,0x801E,0x057F,0x803E,0x07D9, -0x8068,0x0A33,0x809E,0x0C8C,0x80DE,0x0EE4,0x812A,0x113A,0x8181,0x138F,0x81E2, -0x15E2,0x824F,0x1833,0x82C6,0x1A83,0x8349,0x1CD0,0x83D6,0x1F1A,0x846E,0x2162, -0x8511,0x23A7,0x85BE,0x25E8,0x8676,0x2827,0x8738,0x2A62,0x8805,0x2C99,0x88DD, -0x2ECC,0x89BE,0x30FC,0x8AAA,0x3327,0x8BA0,0x354E,0x8CA1,0x3770,0x8DAB,0x398D, -0x8EBF,0x3BA5,0x8FDD,0x3DB8,0x9105,0x3FC6,0x9236,0x41CE,0x9371,0x43D1,0x94B5, -0x45CD,0x9603,0x47C4,0x9759,0x49B4,0x98B9,0x4B9E,0x9A22,0x4D81,0x9B94,0x4F5E, -0x9D0E,0x5134,0x9E91,0x5303,0xA01C,0x54CA,0xA1B0,0x568A,0xA34C,0x5843,0xA4F0, -0x59F4,0xA69C,0x5B9D,0xA84F,0x5D3E,0xAA0A,0x5ED7,0xABCD,0x6068,0xAD97,0x61F1, -0xAF68,0x6371,0xB140,0x64E9,0xB31F,0x6657,0xB505,0x67BD,0xB6F1,0x691A,0xB8E3, -0x6A6E,0xBADC,0x6BB8,0xBCDA,0x6CF9,0xBEDF,0x6E31,0xC0E9,0x6F5F,0xC2F8,0x7083, -0xC50D,0x719E,0xC727,0x72AF,0xC946,0x73B6,0xCB69,0x74B3,0xCD92,0x75A6,0xCFBE, -0x768E,0xD1EF,0x776C,0xD424,0x7840,0xD65C,0x790A,0xD898,0x79C9,0xDAD8,0x7A7D, -0xDD1B,0x7B27,0xDF61,0x7BC6,0xE1A9,0x7C5A,0xE3F4,0x7CE4,0xE642,0x7D63,0xE892, -0x7DD6,0xEAE4,0x7E3F,0xED38,0x7E9D,0xEF8D,0x7EF0,0xF1E4,0x7F38,0xF43C,0x7F75, -0xF695,0x7FA7,0xF8EF,0x7FCE,0xFB4A,0x7FEA,0xFDA5,0x7FFA,0x7FFF,0x0000,0x7FA7, -0xF695,0x7E9D,0xED38,0x7CE4,0xE3F4,0x7A7D,0xDAD8,0x776C,0xD1EF,0x73B6,0xC946, -0x6F5F,0xC0E9,0x6A6E,0xB8E3,0x64E9,0xB140,0x5ED7,0xAA0A,0x5843,0xA34C,0x5134, -0x9D0E,0x49B4,0x9759,0x41CE,0x9236,0x398D,0x8DAB,0x30FC,0x89BE,0x2827,0x8676, -0x1F1A,0x83D6,0x15E2,0x81E2,0x0C8C,0x809E,0x0324,0x800A,0xF9B8,0x8027,0xF055, -0x80F6,0xE707,0x8276,0xDDDC,0x84A3,0xD4E1,0x877B,0xCC21,0x8AFB,0xC3A9,0x8F1D, -0xBB85,0x93DC,0xB3C0,0x9930,0xAC65,0x9F14,0xA57E,0xA57E,0x9F14,0xAC65,0x9930, -0xB3C0,0x93DC,0xBB85,0x8F1D,0xC3A9,0x8AFB,0xCC21,0x877B,0xD4E1,0x84A3,0xDDDC, -0x8276,0xE707,0x80F6,0xF055,0x8027,0xF9B8,0x800A,0x0324,0x809E,0x0C8C,0x81E2, -0x15E2,0x83D6,0x1F1A,0x8676,0x2827,0x89BE,0x30FC,0x8DAB,0x398D,0x9236,0x41CE, -0x9759,0x49B4,0x9D0E,0x5134,0xA34C,0x5843,0xAA0A,0x5ED7,0xB140,0x64E9,0xB8E3, -0x6A6E,0xC0E9,0x6F5F,0xC946,0x73B6,0xD1EF,0x776C,0xDAD8,0x7A7D,0xE3F4,0x7CE4, -0xED38,0x7E9D,0xF695,0x7FA7,0x7FFF,0x0000,0x7A7D,0xDAD8,0x6A6E,0xB8E3,0x5134, -0x9D0E,0x30FC,0x89BE,0x0C8C,0x809E,0xE707,0x8276,0xC3A9,0x8F1D,0xA57E,0xA57E, -0x8F1D,0xC3A9,0x8276,0xE707,0x809E,0x0C8C,0x89BE,0x30FC,0x9D0E,0x5134,0xB8E3, -0x6A6E,0xDAD8,0x7A7D,0x7FFF,0x0000,0x30FC,0x89BE,0xA57E,0xA57E,0x89BE,0x30FC,}; - -#endif - - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ -#endif /* defined(ARM_MATH_MVEI) */ - -#include "arm_math.h" - -#if defined(ARM_MATH_MVEI) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ -#endif /* defined(ARM_MATH_MVEI) */ - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/CMakeLists.txt deleted file mode 100644 index 87ea102..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPComplexMath) - -include(configLib) -include(configDsp) - -file(GLOB SRC "./*_*.c") - -add_library(CMSISDSPComplexMath STATIC) - -configLib(CMSISDSPComplexMath ${ROOT}) -configDsp(CMSISDSPComplexMath ${ROOT}) - - -include(interpol) -interpol(CMSISDSPFastMath) - -if (CONFIGTABLE AND ALLFAST) - target_compile_definitions(CMSISDSPComplexMath PUBLIC ARM_ALL_FAST_TABLES) -endif() - -# MVE code is using a table for computing the fast sqrt arm_cmplx_mag_q31 -# There is the possibility of not compiling this function and not including -# the table. -if (NOT CONFIGTABLE OR ALLFAST OR ARM_CMPLX_MAG_Q31 OR (NOT HELIUM AND NOT MVEI)) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mag_q31.c) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_CMPLX_MAG_Q15 OR (NOT HELIUM AND NOT MVEI)) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mag_q15.c) -endif() - -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_conj_f32.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_conj_q15.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_conj_q31.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_dot_prod_f32.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_dot_prod_q15.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_dot_prod_q31.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mag_f32.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mag_squared_f32.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mag_squared_q15.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mag_squared_q31.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mult_cmplx_f32.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mult_cmplx_q15.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mult_cmplx_q31.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mult_real_f32.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mult_real_q15.c) -target_sources(CMSISDSPComplexMath PRIVATE arm_cmplx_mult_real_q31.c) - - -### Includes -target_include_directories(CMSISDSPComplexMath PUBLIC "${DSP}/Include") diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/ComplexMathFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/ComplexMathFunctions.c deleted file mode 100644 index 2210533..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/ComplexMathFunctions.c +++ /dev/null @@ -1,46 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: CompexMathFunctions.c - * Description: Combination of all comlex math function source files. - * - * $Date: 18. March 2019 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_cmplx_conj_f32.c" -#include "arm_cmplx_conj_q15.c" -#include "arm_cmplx_conj_q31.c" -#include "arm_cmplx_dot_prod_f32.c" -#include "arm_cmplx_dot_prod_q15.c" -#include "arm_cmplx_dot_prod_q31.c" -#include "arm_cmplx_mag_f32.c" -#include "arm_cmplx_mag_q15.c" -#include "arm_cmplx_mag_q31.c" -#include "arm_cmplx_mag_squared_f32.c" -#include "arm_cmplx_mag_squared_q15.c" -#include "arm_cmplx_mag_squared_q31.c" -#include "arm_cmplx_mult_cmplx_f32.c" -#include "arm_cmplx_mult_cmplx_q15.c" -#include "arm_cmplx_mult_cmplx_q31.c" -#include "arm_cmplx_mult_real_f32.c" -#include "arm_cmplx_mult_real_q15.c" -#include "arm_cmplx_mult_real_q31.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c deleted file mode 100644 index e8f9e44..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c +++ /dev/null @@ -1,213 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_conj_f32.c - * Description: Floating-point complex conjugate - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 destination data 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 < numSamples; n++) {
    -      pDst[(2*n)  ] =  pSrc[(2*n)  ];    // real part
    -      pDst[(2*n)+1] = -pSrc[(2*n)+1];    // imag part
    -  }
    -  
    - - There are separate functions for floating-point, Q15, and Q31 data types. - */ - -/** - @addtogroup cmplx_conj - @{ - */ - -/** - @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 samples in each vector - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -void arm_cmplx_conj_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t numSamples) -{ - static const float32_t cmplx_conj_sign[4] = { 1.0f, -1.0f, 1.0f, -1.0f }; - uint32_t blockSize = numSamples * CMPLX_DIM; /* loop counters */ - uint32_t blkCnt; - f32x4_t vecSrc; - f32x4_t vecSign; - - /* - * load sign vector - */ - vecSign = *(f32x4_t *) cmplx_conj_sign; - - /* Compute 4 real samples at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - vecSrc = vld1q(pSrc); - vst1q(pDst,vmulq(vecSrc, vecSign)); - /* - * Decrement the blkCnt loop counter - * Advance vector source and destination pointers - */ - pSrc += 4; - pDst += 4; - blkCnt--; - } - - /* Tail */ - blkCnt = (blockSize & 0x3) >> 1; - - while (blkCnt > 0U) - { - /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ - - /* Calculate Complex Conjugate and store result in destination buffer. */ - *pDst++ = *pSrc++; - *pDst++ = -*pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#else -void arm_cmplx_conj_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - float32x4_t zero; - float32x4x2_t vec; - - zero = vdupq_n_f32(0.0f); - - /* Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[0]+jC[1] = A[0]+(-1)*jA[1] */ - /* Calculate Complex Conjugate and then store the results in the destination buffer. */ - vec = vld2q_f32(pSrc); - vec.val[1] = vsubq_f32(zero,vec.val[1]); - vst2q_f32(pDst,vec); - - /* Increment pointers */ - pSrc += 8; - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = numSamples & 0x3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ - - /* Calculate Complex Conjugate and store result in destination buffer. */ - *pDst++ = *pSrc++; - *pDst++ = -*pSrc++; - - *pDst++ = *pSrc++; - *pDst++ = -*pSrc++; - - *pDst++ = *pSrc++; - *pDst++ = -*pSrc++; - - *pDst++ = *pSrc++; - *pDst++ = -*pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined (ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ - - /* Calculate Complex Conjugate and store result in destination buffer. */ - *pDst++ = *pSrc++; - *pDst++ = -*pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of cmplx_conj group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c deleted file mode 100644 index f1d2589..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c +++ /dev/null @@ -1,207 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_conj_q15.c - * Description: Q15 complex conjugate - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup cmplx_conj - @{ - */ - -/** - @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 samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - The Q15 value -1 (0x8000) is saturated to the maximum allowable positive value 0x7FFF. - */ - - -#if defined(ARM_MATH_MVEI) -void arm_cmplx_conj_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t numSamples) -{ - uint32_t blockSize = numSamples * CMPLX_DIM; /* loop counters */ - uint32_t blkCnt; - q31_t in1; - - q15x8x2_t vecSrc; - q15x8_t zero; - - zero = vdupq_n_s16(0); - - /* Compute 8 real samples at a time */ - blkCnt = blockSize >> 4U; - while (blkCnt > 0U) - { - vecSrc = vld2q(pSrc); - vecSrc.val[1] = vqsubq(zero, vecSrc.val[1]); - vst2q(pDst,vecSrc); - /* - * Decrement the blkCnt loop counter - * Advance vector source and destination pointers - */ - pSrc += 16; - pDst += 16; - blkCnt --; - } - - /* Tail */ - blkCnt = (blockSize & 0xF) >> 1; - - while (blkCnt > 0U) - { - /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ - - /* Calculate Complex Conjugate and store result in destination buffer. */ - *pDst++ = *pSrc++; - in1 = *pSrc++; - *pDst++ = __SSAT(-in1, 16); - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -void arm_cmplx_conj_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t in1; /* Temporary input variable */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t in2, in3, in4; /* Temporary input variables */ -#endif - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ - - /* Calculate Complex Conjugate and store result in destination buffer. */ - - #if defined (ARM_MATH_DSP) - in1 = read_q15x2_ia ((q15_t **) &pSrc); - in2 = read_q15x2_ia ((q15_t **) &pSrc); - in3 = read_q15x2_ia ((q15_t **) &pSrc); - in4 = read_q15x2_ia ((q15_t **) &pSrc); - -#ifndef ARM_MATH_BIG_ENDIAN - in1 = __QASX(0, in1); - in2 = __QASX(0, in2); - in3 = __QASX(0, in3); - in4 = __QASX(0, in4); -#else - in1 = __QSAX(0, in1); - in2 = __QSAX(0, in2); - in3 = __QSAX(0, in3); - in4 = __QSAX(0, 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); - - write_q15x2_ia (&pDst, in1); - write_q15x2_ia (&pDst, in2); - write_q15x2_ia (&pDst, in3); - write_q15x2_ia (&pDst, in4); -#else - *pDst++ = *pSrc++; - in1 = *pSrc++; - *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; - - *pDst++ = *pSrc++; - in1 = *pSrc++; - *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; - - *pDst++ = *pSrc++; - in1 = *pSrc++; - *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; - - *pDst++ = *pSrc++; - in1 = *pSrc++; - *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ - - /* Calculate Complex Conjugate and store result in destination buffer. */ - *pDst++ = *pSrc++; - in1 = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __SSAT(-in1, 16); -#else - *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of cmplx_conj group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c deleted file mode 100644 index 115474b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c +++ /dev/null @@ -1,193 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_conj_q31.c - * Description: Q31 complex conjugate - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup cmplx_conj - @{ - */ - -/** - @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 samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - The Q31 value -1 (0x80000000) is saturated to the maximum allowable positive value 0x7FFFFFFF. - */ - -#if defined(ARM_MATH_MVEI) - -void arm_cmplx_conj_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t numSamples) -{ - - uint32_t blockSize = numSamples * CMPLX_DIM; /* loop counters */ - uint32_t blkCnt; - q31x4x2_t vecSrc; - q31_t in; /* Temporary input variable */ - q31x4_t zero; - - zero = vdupq_n_s32(0); - - - /* Compute 4 real samples at a time */ - blkCnt = blockSize >> 3U; - - while (blkCnt > 0U) - { - - vecSrc = vld2q(pSrc); - vecSrc.val[1] = vqsubq(zero, vecSrc.val[1]); - vst2q(pDst,vecSrc); - /* - * Decrement the blkCnt loop counter - * Advance vector source and destination pointers - */ - pSrc += 8; - pDst += 8; - blkCnt --; - } - - /* Tail */ - blkCnt = (blockSize & 0x7) >> 1; - - while (blkCnt > 0U) - { - /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ - - /* Calculate Complex Conjugate and store result in destination buffer. */ - *pDst++ = *pSrc++; - in = *pSrc++; - *pDst++ = __QSUB(0, in); - - /* Decrement loop counter */ - blkCnt--; - } - - -} -#else - -void arm_cmplx_conj_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t in; /* Temporary input variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ - - /* Calculate Complex Conjugate and store result in destination buffer. */ - *pDst++ = *pSrc++; - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - *pDst++ = *pSrc++; - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - *pDst++ = *pSrc++; - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - *pDst++ = *pSrc++; - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ - - /* Calculate Complex Conjugate and store result in destination buffer. */ - *pDst++ = *pSrc++; - in = *pSrc++; -#if defined (ARM_MATH_DSP) - *pDst++ = __QSUB(0, in); -#else - *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of cmplx_conj group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c deleted file mode 100644 index 7382859..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c +++ /dev/null @@ -1,302 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_dot_prod_f32.c - * Description: Floating-point complex dot product - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 < numSamples; n++) {
    -      realResult += pSrcA[(2*n)+0] * pSrcB[(2*n)+0] - pSrcA[(2*n)+1] * pSrcB[(2*n)+1];
    -      imagResult += pSrcA[(2*n)+0] * pSrcB[(2*n)+1] + pSrcA[(2*n)+1] * pSrcB[(2*n)+0];
    -  }
    -  
    - - There are separate functions for floating-point, Q15, and Q31 data types. - */ - -/** - @addtogroup cmplx_dot_prod - @{ - */ - -/** - @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 samples in each vector - @param[out] realResult real part of the result returned here - @param[out] imagResult imaginary part of the result returned here - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -void arm_cmplx_dot_prod_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - uint32_t numSamples, - float32_t * realResult, - float32_t * imagResult) -{ - uint32_t blockSize = numSamples * CMPLX_DIM; /* loop counters */ - uint32_t blkCnt; - float32_t real_sum, imag_sum; - f32x4_t vecSrcA, vecSrcB; - f32x4_t vec_acc = vdupq_n_f32(0.0f); - float32_t a0,b0,c0,d0; - - /* Compute 2 complex samples at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - vec_acc = vcmlaq(vec_acc, vecSrcA, vecSrcB); - vec_acc = vcmlaq_rot90(vec_acc, vecSrcA, vecSrcB); - - /* - * Decrement the blkCnt loop counter - * Advance vector source and destination pointers - */ - pSrcA += 4; - pSrcB += 4; - blkCnt--; - } - - - real_sum = vgetq_lane(vec_acc, 0) + vgetq_lane(vec_acc, 2); - imag_sum = vgetq_lane(vec_acc, 1) + vgetq_lane(vec_acc, 3); - - /* Tail */ - blkCnt = (blockSize & 3) >> 1; - - 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 loop counter */ - blkCnt--; - } - - - /* - * Store the real and imaginary results in the destination buffers - */ - *realResult = real_sum; - *imagResult = imag_sum; -} - -#else -void arm_cmplx_dot_prod_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - uint32_t numSamples, - float32_t * realResult, - float32_t * imagResult) -{ - uint32_t blkCnt; /* Loop counter */ - float32_t real_sum = 0.0f, imag_sum = 0.0f; /* Temporary result variables */ - float32_t a0,b0,c0,d0; - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - float32x4x2_t vec1,vec2,vec3,vec4; - float32x4_t accR,accI; - float32x2_t accum = vdup_n_f32(0); - - accR = vdupq_n_f32(0.0f); - accI = vdupq_n_f32(0.0f); - - /* Loop unrolling: Compute 8 outputs at a time */ - blkCnt = numSamples >> 3U; - - while (blkCnt > 0U) - { - /* C = (A[0]+jA[1])*(B[0]+jB[1]) + ... */ - /* Calculate dot product and then store the result in a temporary buffer. */ - - vec1 = vld2q_f32(pSrcA); - vec2 = vld2q_f32(pSrcB); - - /* Increment pointers */ - pSrcA += 8; - pSrcB += 8; - - /* Re{C} = Re{A}*Re{B} - Im{A}*Im{B} */ - accR = vmlaq_f32(accR,vec1.val[0],vec2.val[0]); - accR = vmlsq_f32(accR,vec1.val[1],vec2.val[1]); - - /* Im{C} = Re{A}*Im{B} + Im{A}*Re{B} */ - accI = vmlaq_f32(accI,vec1.val[1],vec2.val[0]); - accI = vmlaq_f32(accI,vec1.val[0],vec2.val[1]); - - vec3 = vld2q_f32(pSrcA); - vec4 = vld2q_f32(pSrcB); - - /* Increment pointers */ - pSrcA += 8; - pSrcB += 8; - - /* Re{C} = Re{A}*Re{B} - Im{A}*Im{B} */ - accR = vmlaq_f32(accR,vec3.val[0],vec4.val[0]); - accR = vmlsq_f32(accR,vec3.val[1],vec4.val[1]); - - /* Im{C} = Re{A}*Im{B} + Im{A}*Re{B} */ - accI = vmlaq_f32(accI,vec3.val[1],vec4.val[0]); - accI = vmlaq_f32(accI,vec3.val[0],vec4.val[1]); - - /* Decrement the loop counter */ - blkCnt--; - } - - accum = vpadd_f32(vget_low_f32(accR), vget_high_f32(accR)); - real_sum += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(accI), vget_high_f32(accI)); - imag_sum += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - /* Tail */ - blkCnt = numSamples & 0x7; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - 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 loop counter */ - blkCnt--; - } - - /* Store real and imaginary result in destination buffer. */ - *realResult = real_sum; - *imagResult = imag_sum; -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of cmplx_dot_prod group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c deleted file mode 100644 index 19d40e2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c +++ /dev/null @@ -1,234 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_dot_prod_q15.c - * Description: Processing function for the Q15 Complex Dot product - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup cmplx_dot_prod - @{ - */ - -/** - @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 samples in each vector - @param[out] realResult real part of the result returned here - @param[out] imagResult imaginary part of the result returned her - @return none - - @par Scaling and Overflow Behavior - 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. - */ - -#if defined(ARM_MATH_MVEI) -void arm_cmplx_dot_prod_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - uint32_t numSamples, - q31_t * realResult, - q31_t * imagResult) -{ - - uint32_t blockSize = numSamples * CMPLX_DIM; /* loop counters */ - uint32_t blkCnt; - q15_t a0,b0,c0,d0; - - q63_t accReal = 0LL; q63_t accImag = 0LL; - q15x8_t vecSrcA, vecSrcB; - - - - /* should give more freedom to generate stall free code */ - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - pSrcA += 8; - pSrcB += 8; - - /* Compute 4 complex samples at a time */ - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - q15x8_t vecSrcC, vecSrcD; - - accReal = vmlsldavaq(accReal, vecSrcA, vecSrcB); - vecSrcC = vld1q(pSrcA); - pSrcA += 8; - - accImag = vmlaldavaxq(accImag, vecSrcA, vecSrcB); - vecSrcD = vld1q(pSrcB); - pSrcB += 8; - - accReal = vmlsldavaq(accReal, vecSrcC, vecSrcD); - vecSrcA = vld1q(pSrcA); - pSrcA += 8; - - accImag = vmlaldavaxq(accImag, vecSrcC, vecSrcD); - vecSrcB = vld1q(pSrcB); - pSrcB += 8; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* Tail */ - pSrcA -= 8; - pSrcB -= 8; - - blkCnt = (blockSize & 7) >> 1; - - while (blkCnt > 0U) - { - a0 = *pSrcA++; - b0 = *pSrcA++; - c0 = *pSrcB++; - d0 = *pSrcB++; - - accReal += (q31_t)a0 * c0; - accImag += (q31_t)a0 * d0; - accReal -= (q31_t)b0 * d0; - accImag += (q31_t)b0 * c0; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store real and imaginary result in 8.24 format */ - /* Convert real data in 34.30 to 8.24 by 6 right shifts */ - *realResult = (q31_t) (accReal >> 6); - /* Convert imaginary data in 34.30 to 8.24 by 6 right shifts */ - *imagResult = (q31_t) (accImag >> 6); -} -#else -void arm_cmplx_dot_prod_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - uint32_t numSamples, - q31_t * realResult, - q31_t * imagResult) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t real_sum = 0, imag_sum = 0; /* Temporary result variables */ - q15_t a0,b0,c0,d0; - -#if defined (ARM_MATH_LOOPUNROLL) - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 loop counter */ - blkCnt--; - } - - /* Store real and imaginary result 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); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of cmplx_dot_prod group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c deleted file mode 100644 index 82975a3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c +++ /dev/null @@ -1,220 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_dot_prod_q31.c - * Description: Q31 complex dot product - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup cmplx_dot_prod - @{ - */ - -/** - @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 samples in each vector - @param[out] realResult real part of the result returned here - @param[out] imagResult imaginary part of the result returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ - -#if defined(ARM_MATH_MVEI) - -void arm_cmplx_dot_prod_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - uint32_t numSamples, - q63_t * realResult, - q63_t * imagResult) -{ - uint32_t blockSize = numSamples * CMPLX_DIM; /* loop counters */ - uint32_t blkCnt; - q31x4_t vecSrcA, vecSrcB; - q63_t accReal = 0LL; - q63_t accImag = 0LL; - - q31_t a0,b0,c0,d0; - - /* Compute 2 complex samples at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - - vecSrcA = vld1q(pSrcA); - vecSrcB = vld1q(pSrcB); - - accReal = vrmlsldavhaq(accReal, vecSrcA, vecSrcB); - accImag = vrmlaldavhaxq(accImag, vecSrcA, vecSrcB); - - /* - * Decrement the blkCnt loop counter - * Advance vector source and destination pointers - */ - pSrcA += 4; - pSrcB += 4; - blkCnt --; - } - - accReal = asrl(accReal, (14 - 8)); - accImag = asrl(accImag, (14 - 8)); - - /* Tail */ - blkCnt = (blockSize & 3) >> 1; - - while (blkCnt > 0U) - { - a0 = *pSrcA++; - b0 = *pSrcA++; - c0 = *pSrcB++; - d0 = *pSrcB++; - - accReal += ((q63_t)a0 * c0) >> 14; - accImag += ((q63_t)a0 * d0) >> 14; - accReal -= ((q63_t)b0 * d0) >> 14; - accImag += ((q63_t)b0 * c0) >> 14; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store real and imaginary result in destination buffer. */ - *realResult = accReal; - *imagResult = accImag; -} - -#else -void arm_cmplx_dot_prod_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - uint32_t numSamples, - q63_t * realResult, - q63_t * imagResult) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t real_sum = 0, imag_sum = 0; /* Temporary result variables */ - q31_t a0,b0,c0,d0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 loop counter */ - blkCnt--; - } - - /* Store real and imaginary result in 16.48 format */ - *realResult = real_sum; - *imagResult = imag_sum; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of cmplx_dot_prod group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c deleted file mode 100644 index 38c43e1..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c +++ /dev/null @@ -1,273 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mag_f32.c - * Description: Floating-point complex magnitude - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 < numSamples; n++) {
    -      pDst[n] = sqrt(pSrc[(2*n)+0]^2 + pSrc[(2*n)+1]^2);
    -  }
    -  
    - - 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 input vector - @param[out] pDst points to output vector - @param[in] numSamples number of samples in each vector - @return none - */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) -#include "arm_vec_math.h" -#endif - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - - -void arm_cmplx_mag_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t numSamples) -{ - int32_t blockSize = numSamples; /* loop counters */ - uint32_t blkCnt; /* loop counters */ - f32x4x2_t vecSrc; - f32x4_t sum; - float32_t real, imag; /* Temporary variables to hold input values */ - - /* Compute 4 complex samples at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - q31x4_t newtonStartVec; - f32x4_t sumHalf, invSqrt; - - vecSrc = vld2q(pSrc); - pSrc += 8; - sum = vmulq(vecSrc.val[0], vecSrc.val[0]); - sum = vfmaq(sum, vecSrc.val[1], vecSrc.val[1]); - - /* - * inlined Fast SQRT using inverse SQRT newton-raphson method - */ - - /* compute initial value */ - newtonStartVec = vdupq_n_s32(INVSQRT_MAGIC_F32) - vshrq((q31x4_t) sum, 1); - sumHalf = sum * 0.5f; - /* - * compute 3 x iterations - * - * The more iterations, the more accuracy. - * If you need to trade a bit of accuracy for more performance, - * you can comment out the 3rd use of the macro. - */ - INVSQRT_NEWTON_MVE_F32(invSqrt, sumHalf, (f32x4_t) newtonStartVec); - INVSQRT_NEWTON_MVE_F32(invSqrt, sumHalf, invSqrt); - INVSQRT_NEWTON_MVE_F32(invSqrt, sumHalf, invSqrt); - /* - * set negative values to 0 - */ - invSqrt = vdupq_m(invSqrt, 0.0f, vcmpltq(invSqrt, 0.0f)); - /* - * sqrt(x) = x * invSqrt(x) - */ - sum = vmulq(sum, invSqrt); - vst1q(pDst, sum); - pDst += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = blockSize & 3; - while (blkCnt > 0U) - { - /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ - - real = *pSrc++; - imag = *pSrc++; - - /* store result in destination buffer. */ - arm_sqrt_f32((real * real) + (imag * imag), pDst++); - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -void arm_cmplx_mag_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* loop counter */ - float32_t real, imag; /* Temporary variables to hold input values */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - - float32x4x2_t vecA; - float32x4_t vRealA; - float32x4_t vImagA; - float32x4_t vMagSqA; - - float32x4x2_t vecB; - float32x4_t vRealB; - float32x4_t vImagB; - float32x4_t vMagSqB; - - /* Loop unrolling: Compute 8 outputs at a time */ - blkCnt = numSamples >> 3; - - while (blkCnt > 0U) - { - /* out = sqrt((real * real) + (imag * imag)) */ - - vecA = vld2q_f32(pSrc); - pSrc += 8; - - vecB = vld2q_f32(pSrc); - pSrc += 8; - - vRealA = vmulq_f32(vecA.val[0], vecA.val[0]); - vImagA = vmulq_f32(vecA.val[1], vecA.val[1]); - vMagSqA = vaddq_f32(vRealA, vImagA); - - vRealB = vmulq_f32(vecB.val[0], vecB.val[0]); - vImagB = vmulq_f32(vecB.val[1], vecB.val[1]); - vMagSqB = vaddq_f32(vRealB, vImagB); - - /* Store the result in the destination buffer. */ - vst1q_f32(pDst, __arm_vec_sqrt_f32_neon(vMagSqA)); - pDst += 4; - - vst1q_f32(pDst, __arm_vec_sqrt_f32_neon(vMagSqB)); - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - blkCnt = numSamples & 7; - -#else - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ - - real = *pSrc++; - imag = *pSrc++; - - /* store result in destination buffer. */ - arm_sqrt_f32((real * real) + (imag * imag), pDst++); - - real = *pSrc++; - imag = *pSrc++; - arm_sqrt_f32((real * real) + (imag * imag), pDst++); - - real = *pSrc++; - imag = *pSrc++; - arm_sqrt_f32((real * real) + (imag * imag), pDst++); - - real = *pSrc++; - imag = *pSrc++; - arm_sqrt_f32((real * real) + (imag * imag), pDst++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ - - real = *pSrc++; - imag = *pSrc++; - - /* store result in destination buffer. */ - arm_sqrt_f32((real * real) + (imag * imag), pDst++); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of cmplx_mag group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c deleted file mode 100644 index 3354a64..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c +++ /dev/null @@ -1,221 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mag_q15.c - * Description: Q15 complex magnitude - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup cmplx_mag - @{ - */ - -/** - @brief Q15 complex magnitude. - @param[in] pSrc points to input vector - @param[out] pDst points to output vector - @param[in] numSamples number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function implements 1.15 by 1.15 multiplications and finally output is converted into 2.14 format. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_cmplx_mag_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t numSamples) -{ - - int32_t blockSize = numSamples; /* loop counters */ - uint32_t blkCnt; /* loop counters */ - q15x8x2_t vecSrc; - q15x8_t sum; - q31_t in; - q31_t acc0; - - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - vecSrc = vld2q(pSrc); - pSrc += 16; - sum = vqaddq(vmulhq(vecSrc.val[0], vecSrc.val[0]), - vmulhq(vecSrc.val[1], vecSrc.val[1])); - - sum = vshrq(sum, 1); - - sum = FAST_VSQRT_Q15(sum); - - vst1q(pDst, sum); - pDst += 8; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * tail - */ - blkCnt = blockSize & 7; - - while (blkCnt > 0U) - { - /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ - - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - - /* store result in 2.14 format in destination buffer. */ - arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); - - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -void arm_cmplx_mag_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_DSP) - q31_t in; - q31_t acc0; /* Accumulators */ -#else - q15_t real, imag; /* Temporary input variables */ - q31_t acc0, acc1; /* Accumulators */ -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ - -#if defined (ARM_MATH_DSP) - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - /* store result in 2.14 format in destination buffer. */ - arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); - - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); - - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); - - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); -#else - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - - /* store result in 2.14 format in destination buffer. */ - arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); - - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); - - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); - - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ - -#if defined (ARM_MATH_DSP) - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - - /* store result in 2.14 format in destination buffer. */ - arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); -#else - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - - /* store result in 2.14 format in destination buffer. */ - arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of cmplx_mag group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c deleted file mode 100644 index d1321ee..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c +++ /dev/null @@ -1,201 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mag_q31.c - * Description: Q31 complex magnitude - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup cmplx_mag - @{ - */ - -/** - @brief Q31 complex magnitude. - @param[in] pSrc points to input vector - @param[out] pDst points to output vector - @param[in] numSamples number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function implements 1.31 by 1.31 multiplications and finally output is converted into 2.30 format. - Input down scaling is not required. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_cmplx_mag_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t numSamples) -{ - int32_t blockSize = numSamples; /* loop counters */ - uint32_t blkCnt; /* loop counters */ - - q31x4x2_t vecSrc; - q31x4_t sum; - - q31_t real, imag; /* Temporary input variables */ - q31_t acc0, acc1; /* Accumulators */ - - /* Compute 4 complex samples at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - vecSrc = vld2q(pSrc); - - sum = vqaddq(vmulhq(vecSrc.val[0], vecSrc.val[0]), - vmulhq(vecSrc.val[1], vecSrc.val[1])); - - sum = vshrq(sum, 1); - - /* - - This function is using a table. There are compilations flags to avoid - including this table (and in this case, arm_cmplx_maq_q31 must not - be built and linked.) - - */ - sum = FAST_VSQRT_Q31(sum); - - vst1q(pDst, sum); - - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - pSrc += 8; - pDst += 4; - } - - /* - * tail - */ - blkCnt = blockSize & 3; - 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 result in 2.30 format in destination buffer. */ - arm_sqrt_q31(acc0 + acc1, pDst++); - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -void arm_cmplx_mag_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t real, imag; /* Temporary input variables */ - q31_t acc0, acc1; /* Accumulators */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - 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 result in 2.30 format in destination buffer. */ - arm_sqrt_q31(acc0 + acc1, pDst++); - - real = *pSrc++; - imag = *pSrc++; - acc0 = (q31_t) (((q63_t) real * real) >> 33); - acc1 = (q31_t) (((q63_t) imag * imag) >> 33); - arm_sqrt_q31(acc0 + acc1, pDst++); - - real = *pSrc++; - imag = *pSrc++; - acc0 = (q31_t) (((q63_t) real * real) >> 33); - acc1 = (q31_t) (((q63_t) imag * imag) >> 33); - arm_sqrt_q31(acc0 + acc1, pDst++); - - real = *pSrc++; - imag = *pSrc++; - acc0 = (q31_t) (((q63_t) real * real) >> 33); - acc1 = (q31_t) (((q63_t) imag * imag) >> 33); - arm_sqrt_q31(acc0 + acc1, pDst++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 result in 2.30 format in destination buffer. */ - arm_sqrt_q31(acc0 + acc1, pDst++); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of cmplx_mag group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c deleted file mode 100644 index ce2a1e5..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c +++ /dev/null @@ -1,235 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mag_squared_f32.c - * Description: Floating-point complex magnitude squared - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 < numSamples; n++) {
    -      pDst[n] = pSrc[(2*n)+0]^2 + pSrc[(2*n)+1]^2;
    -  }
    -  
    - - 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 input vector - @param[out] pDst points to output vector - @param[in] numSamples number of samples in each vector - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -void arm_cmplx_mag_squared_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t numSamples) -{ - int32_t blockSize = numSamples; /* loop counters */ - uint32_t blkCnt; /* loop counters */ - f32x4x2_t vecSrc; - f32x4_t sum; - float32_t real, imag; /* Temporary input variables */ - - /* Compute 4 complex samples at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - vecSrc = vld2q(pSrc); - sum = vmulq(vecSrc.val[0], vecSrc.val[0]); - sum = vfmaq(sum, vecSrc.val[1], vecSrc.val[1]); - vst1q(pDst, sum); - - pSrc += 8; - pDst += 4; - - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; - while (blkCnt > 0U) - { - /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ - - real = *pSrc++; - imag = *pSrc++; - - /* store result in destination buffer. */ - *pDst++ = (real * real) + (imag * imag); - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#else -void arm_cmplx_mag_squared_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - float32_t real, imag; /* Temporary input variables */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - float32x4x2_t vecA; - float32x4_t vRealA; - float32x4_t vImagA; - float32x4_t vMagSqA; - - float32x4x2_t vecB; - float32x4_t vRealB; - float32x4_t vImagB; - float32x4_t vMagSqB; - - /* Loop unrolling: Compute 8 outputs at a time */ - blkCnt = numSamples >> 3; - - while (blkCnt > 0U) - { - /* out = sqrt((real * real) + (imag * imag)) */ - - vecA = vld2q_f32(pSrc); - pSrc += 8; - - vRealA = vmulq_f32(vecA.val[0], vecA.val[0]); - vImagA = vmulq_f32(vecA.val[1], vecA.val[1]); - vMagSqA = vaddq_f32(vRealA, vImagA); - - vecB = vld2q_f32(pSrc); - pSrc += 8; - - vRealB = vmulq_f32(vecB.val[0], vecB.val[0]); - vImagB = vmulq_f32(vecB.val[1], vecB.val[1]); - vMagSqB = vaddq_f32(vRealB, vImagB); - - /* Store the result in the destination buffer. */ - vst1q_f32(pDst, vMagSqA); - pDst += 4; - - vst1q_f32(pDst, vMagSqB); - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - blkCnt = numSamples & 7; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ - - real = *pSrc++; - imag = *pSrc++; - *pDst++ = (real * real) + (imag * imag); - - real = *pSrc++; - imag = *pSrc++; - *pDst++ = (real * real) + (imag * imag); - - real = *pSrc++; - imag = *pSrc++; - *pDst++ = (real * real) + (imag * imag); - - real = *pSrc++; - imag = *pSrc++; - *pDst++ = (real * real) + (imag * imag); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ - - real = *pSrc++; - imag = *pSrc++; - - /* store result in destination buffer. */ - *pDst++ = (real * real) + (imag * imag); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of cmplx_mag_squared group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c deleted file mode 100644 index 7ca2f29..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c +++ /dev/null @@ -1,221 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mag_squared_q15.c - * Description: Q15 complex magnitude squared - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup cmplx_mag_squared - @{ - */ - -/** - @brief Q15 complex magnitude squared. - @param[in] pSrc points to input vector - @param[out] pDst points to output vector - @param[in] numSamples number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function implements 1.15 by 1.15 multiplications and finally output is converted into 3.13 format. - */ - -#if defined(ARM_MATH_MVEI) - -void arm_cmplx_mag_squared_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t numSamples) -{ - int32_t blockSize = numSamples; /* loop counters */ - uint32_t blkCnt; /* loop counters */ - q31_t in; - q31_t acc0; /* Accumulators */ - q15x8x2_t vecSrc; - q15x8_t vReal, vImag; - q15x8_t vMagSq; - - - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - vecSrc = vld2q(pSrc); - vReal = vmulhq(vecSrc.val[0], vecSrc.val[0]); - vImag = vmulhq(vecSrc.val[1], vecSrc.val[1]); - vMagSq = vqaddq(vReal, vImag); - vMagSq = vshrq(vMagSq, 1); - - vst1q(pDst, vMagSq); - - pSrc += 16; - pDst += 8; - /* - * Decrement the blkCnt loop counter - * Advance vector source and destination pointers - */ - blkCnt --; - } - - /* - * tail - */ - blkCnt = blockSize & 7; - while (blkCnt > 0U) - { - /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ - - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - - /* store result in 3.13 format in destination buffer. */ - *pDst++ = (q15_t) (acc0 >> 17); - - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#else -void arm_cmplx_mag_squared_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_DSP) - q31_t in; - q31_t acc0; /* Accumulators */ -#else - q15_t real, imag; /* Temporary input variables */ - q31_t acc0, acc1; /* Accumulators */ -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ - -#if defined (ARM_MATH_DSP) - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - /* store result in 3.13 format in destination buffer. */ - *pDst++ = (q15_t) (acc0 >> 17); - - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - *pDst++ = (q15_t) (acc0 >> 17); - - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - *pDst++ = (q15_t) (acc0 >> 17); - - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - *pDst++ = (q15_t) (acc0 >> 17); -#else - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - /* store result in 3.13 format in destination buffer. */ - *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); - - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); - - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); - - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ - -#if defined (ARM_MATH_DSP) - in = read_q15x2_ia ((q15_t **) &pSrc); - acc0 = __SMUAD(in, in); - - /* store result in 3.13 format in destination buffer. */ - *pDst++ = (q15_t) (acc0 >> 17); -#else - real = *pSrc++; - imag = *pSrc++; - acc0 = ((q31_t) real * real); - acc1 = ((q31_t) imag * imag); - - /* store result in 3.13 format in destination buffer. */ - *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of cmplx_mag_squared group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c deleted file mode 100644 index 34a7ef4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c +++ /dev/null @@ -1,187 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mag_squared_q31.c - * Description: Q31 complex magnitude squared - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup cmplx_mag_squared - @{ - */ - -/** - @brief Q31 complex magnitude squared. - @param[in] pSrc points to input vector - @param[out] pDst points to output vector - @param[in] numSamples number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function implements 1.31 by 1.31 multiplications and finally output is converted into 3.29 format. - Input down scaling is not required. - */ - -#if defined(ARM_MATH_MVEI) - -void arm_cmplx_mag_squared_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t numSamples) -{ - int32_t blockSize = numSamples; /* loop counters */ - uint32_t blkCnt; /* loop counters */ - q31x4x2_t vecSrc; - q31x4_t vReal, vImag; - q31x4_t vMagSq; - q31_t real, imag; /* Temporary input variables */ - q31_t acc0, acc1; /* Accumulators */ - - /* Compute 4 complex samples at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - vecSrc = vld2q(pSrc); - vReal = vmulhq(vecSrc.val[0], vecSrc.val[0]); - vImag = vmulhq(vecSrc.val[1], vecSrc.val[1]); - vMagSq = vqaddq(vReal, vImag); - vMagSq = vshrq(vMagSq, 1); - - vst1q(pDst, vMagSq); - - pSrc += 8; - pDst += 4; - /* - * Decrement the blkCnt loop counter - * Advance vector source and destination pointers - */ - blkCnt --; - } - - /* Tail */ - blkCnt = blockSize & 3; - 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 result in 3.29 format in destination buffer. */ - *pDst++ = acc0 + acc1; - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -void arm_cmplx_mag_squared_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t real, imag; /* Temporary input variables */ - q31_t acc0, acc1; /* Accumulators */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - 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); - *pDst++ = acc0 + acc1; - - real = *pSrc++; - imag = *pSrc++; - acc0 = (q31_t) (((q63_t) real * real) >> 33); - acc1 = (q31_t) (((q63_t) imag * imag) >> 33); - *pDst++ = acc0 + acc1; - - real = *pSrc++; - imag = *pSrc++; - acc0 = (q31_t) (((q63_t) real * real) >> 33); - acc1 = (q31_t) (((q63_t) imag * imag) >> 33); - *pDst++ = acc0 + acc1; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 result in 3.29 format in destination buffer. */ - *pDst++ = acc0 + acc1; - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of cmplx_mag_squared group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c deleted file mode 100644 index 5272cc4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c +++ /dev/null @@ -1,255 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mult_cmplx_f32.c - * Description: Floating-point complex-by-complex multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 < numSamples; n++) {
    -      pDst[(2*n)+0] = pSrcA[(2*n)+0] * pSrcB[(2*n)+0] - pSrcA[(2*n)+1] * pSrcB[(2*n)+1];
    -      pDst[(2*n)+1] = pSrcA[(2*n)+0] * pSrcB[(2*n)+1] + pSrcA[(2*n)+1] * pSrcB[(2*n)+0];
    -  }
    -  
    - - 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 first input vector - @param[in] pSrcB points to second input vector - @param[out] pDst points to output vector - @param[in] numSamples number of samples in each vector - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -void arm_cmplx_mult_cmplx_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - float32_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* loop counters */ - uint32_t blockSize = numSamples; /* loop counters */ - float32_t a, b, c, d; /* Temporary variables to store real and imaginary values */ - - f32x4x2_t vecA; - f32x4x2_t vecB; - f32x4x2_t vecDst; - - /* Compute 4 complex outputs at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - vecA = vld2q(pSrcA); // load & separate real/imag pSrcA (de-interleave 2) - vecB = vld2q(pSrcB); // load & separate real/imag pSrcB - pSrcA += 8; - pSrcB += 8; - - /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1]. */ - vecDst.val[0] = vmulq(vecA.val[0], vecB.val[0]); - vecDst.val[0] = vfmsq(vecDst.val[0],vecA.val[1], vecB.val[1]); - /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i]. */ - vecDst.val[1] = vmulq(vecA.val[0], vecB.val[1]); - vecDst.val[1] = vfmaq(vecDst.val[1], vecA.val[1], vecB.val[0]); - - vst2q(pDst, vecDst); - pDst += 8; - - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 3; - 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 result in destination buffer. */ - *pDst++ = (a * c) - (b * d); - *pDst++ = (a * d) + (b * c); - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#else -void arm_cmplx_mult_cmplx_f32( - const float32_t * pSrcA, - const float32_t * pSrcB, - float32_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - float32_t a, b, c, d; /* Temporary variables to store real and imaginary values */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - float32x4x2_t va, vb; - float32x4x2_t outCplx; - - /* Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - va = vld2q_f32(pSrcA); // load & separate real/imag pSrcA (de-interleave 2) - vb = vld2q_f32(pSrcB); // load & separate real/imag pSrcB - - /* Increment pointers */ - pSrcA += 8; - pSrcB += 8; - - /* Re{C} = Re{A}*Re{B} - Im{A}*Im{B} */ - outCplx.val[0] = vmulq_f32(va.val[0], vb.val[0]); - outCplx.val[0] = vmlsq_f32(outCplx.val[0], va.val[1], vb.val[1]); - - /* Im{C} = Re{A}*Im{B} + Im{A}*Re{B} */ - outCplx.val[1] = vmulq_f32(va.val[0], vb.val[1]); - outCplx.val[1] = vmlaq_f32(outCplx.val[1], va.val[1], vb.val[0]); - - vst2q_f32(pDst, outCplx); - - /* Increment pointer */ - pDst += 8; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Tail */ - blkCnt = numSamples & 3; - -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - 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 result in destination buffer. */ - *pDst++ = (a * c) - (b * d); - *pDst++ = (a * d) + (b * c); - - a = *pSrcA++; - b = *pSrcA++; - c = *pSrcB++; - d = *pSrcB++; - *pDst++ = (a * c) - (b * d); - *pDst++ = (a * d) + (b * c); - - a = *pSrcA++; - b = *pSrcA++; - c = *pSrcB++; - d = *pSrcB++; - *pDst++ = (a * c) - (b * d); - *pDst++ = (a * d) + (b * c); - - a = *pSrcA++; - b = *pSrcA++; - c = *pSrcB++; - d = *pSrcB++; - *pDst++ = (a * c) - (b * d); - *pDst++ = (a * d) + (b * c); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - 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 result in destination buffer. */ - *pDst++ = (a * c) - (b * d); - *pDst++ = (a * d) + (b * c); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of CmplxByCmplxMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c deleted file mode 100644 index bb3d0f0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c +++ /dev/null @@ -1,196 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mult_cmplx_q15.c - * Description: Q15 complex-by-complex multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup CmplxByCmplxMult - @{ - */ - -/** - @brief Q15 complex-by-complex multiplication. - @param[in] pSrcA points to first input vector - @param[in] pSrcB points to second input vector - @param[out] pDst points to output vector - @param[in] numSamples number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function implements 1.15 by 1.15 multiplications and finally output is converted into 3.13 format. - */ - -#if defined(ARM_MATH_MVEI) - -void arm_cmplx_mult_cmplx_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - q15_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* loop counters */ - uint32_t blockSize = numSamples * CMPLX_DIM; /* loop counters */ - q15_t a, b, c, d; - - q15x8_t vecA; - q15x8_t vecB; - q15x8_t vecDst; - - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1]. */ - vecDst = vqdmlsdhq_s16(vuninitializedq_s16(), vecA, vecB); - /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i]. */ - vecDst = vqdmladhxq_s16(vecDst, vecA, vecB); - - vecDst = vshrq(vecDst, 2); - - vst1q(pDst, vecDst); - - blkCnt --; - pSrcA += 8; - pSrcB += 8; - pDst += 8; - }; - - /* - * tail - */ - blkCnt = (blockSize & 7) >> 1; - 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 result in 3.13 format in destination buffer. */ - *pDst++ = (q15_t) ( (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17) ); - *pDst++ = (q15_t) ( (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17) ); - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -void arm_cmplx_mult_cmplx_q15( - const q15_t * pSrcA, - const q15_t * pSrcB, - q15_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - q15_t a, b, c, d; /* Temporary variables */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - 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 result in 3.13 format in destination buffer. */ - *pDst++ = (q15_t) ( (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17) ); - *pDst++ = (q15_t) ( (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17) ); - - a = *pSrcA++; - b = *pSrcA++; - c = *pSrcB++; - d = *pSrcB++; - *pDst++ = (q15_t) ( (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17) ); - *pDst++ = (q15_t) ( (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17) ); - - a = *pSrcA++; - b = *pSrcA++; - c = *pSrcB++; - d = *pSrcB++; - *pDst++ = (q15_t) ( (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17) ); - *pDst++ = (q15_t) ( (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17) ); - - a = *pSrcA++; - b = *pSrcA++; - c = *pSrcB++; - d = *pSrcB++; - *pDst++ = (q15_t) ( (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17) ); - *pDst++ = (q15_t) ( (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17) ); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 result in 3.13 format in destination buffer. */ - *pDst++ = (q15_t) ( (((q31_t) a * c) >> 17) - (((q31_t) b * d) >> 17) ); - *pDst++ = (q15_t) ( (((q31_t) a * d) >> 17) + (((q31_t) b * c) >> 17) ); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of CmplxByCmplxMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c deleted file mode 100644 index ae07a68..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c +++ /dev/null @@ -1,194 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mult_cmplx_q31.c - * Description: Q31 complex-by-complex multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup CmplxByCmplxMult - @{ - */ - -/** - @brief Q31 complex-by-complex multiplication. - @param[in] pSrcA points to first input vector - @param[in] pSrcB points to second input vector - @param[out] pDst points to output vector - @param[in] numSamples number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function implements 1.31 by 1.31 multiplications and finally output is converted into 3.29 format. - Input down scaling is not required. - */ - -#if defined(ARM_MATH_MVEI) -void arm_cmplx_mult_cmplx_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - q31_t * pDst, - uint32_t numSamples) -{ - - uint32_t blkCnt; /* loop counters */ - uint32_t blockSize = numSamples * CMPLX_DIM; /* loop counters */ - q31x4_t vecA; - q31x4_t vecB; - q31x4_t vecDst; - q31_t a, b, c, d; /* Temporary variables */ - - /* Compute 2 complex outputs at a time */ - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - - vecA = vld1q(pSrcA); - vecB = vld1q(pSrcB); - /* C[2 * i] = A[2 * i] * B[2 * i] - A[2 * i + 1] * B[2 * i + 1]. */ - vecDst = vqdmlsdhq(vuninitializedq_s32(),vecA, vecB); - /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i]. */ - vecDst = vqdmladhxq(vecDst, vecA, vecB); - - vecDst = vshrq(vecDst, 2); - vst1q(pDst, vecDst); - - blkCnt --; - pSrcA += 4; - pSrcB += 4; - pDst += 4; - }; - - blkCnt = (blockSize & 3) >> 1; - 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 result in 3.29 format in destination buffer. */ - *pDst++ = (q31_t) ( (((q63_t) a * c) >> 33) - (((q63_t) b * d) >> 33) ); - *pDst++ = (q31_t) ( (((q63_t) a * d) >> 33) + (((q63_t) b * c) >> 33) ); - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -void arm_cmplx_mult_cmplx_q31( - const q31_t * pSrcA, - const q31_t * pSrcB, - q31_t * pDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t a, b, c, d; /* Temporary variables */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - 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 result in 3.29 format in destination buffer. */ - *pDst++ = (q31_t) ( (((q63_t) a * c) >> 33) - (((q63_t) b * d) >> 33) ); - *pDst++ = (q31_t) ( (((q63_t) a * d) >> 33) + (((q63_t) b * c) >> 33) ); - - a = *pSrcA++; - b = *pSrcA++; - c = *pSrcB++; - d = *pSrcB++; - *pDst++ = (q31_t) ( (((q63_t) a * c) >> 33) - (((q63_t) b * d) >> 33) ); - *pDst++ = (q31_t) ( (((q63_t) a * d) >> 33) + (((q63_t) b * c) >> 33) ); - - a = *pSrcA++; - b = *pSrcA++; - c = *pSrcB++; - d = *pSrcB++; - *pDst++ = (q31_t) ( (((q63_t) a * c) >> 33) - (((q63_t) b * d) >> 33) ); - *pDst++ = (q31_t) ( (((q63_t) a * d) >> 33) + (((q63_t) b * c) >> 33) ); - - a = *pSrcA++; - b = *pSrcA++; - c = *pSrcB++; - d = *pSrcB++; - *pDst++ = (q31_t) ( (((q63_t) a * c) >> 33) - (((q63_t) b * d) >> 33) ); - *pDst++ = (q31_t) ( (((q63_t) a * d) >> 33) + (((q63_t) b * c) >> 33) ); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 result in 3.29 format in destination buffer. */ - *pDst++ = (q31_t) ( (((q63_t) a * c) >> 33) - (((q63_t) b * d) >> 33) ); - *pDst++ = (q31_t) ( (((q63_t) a * d) >> 33) + (((q63_t) b * c) >> 33) ); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of CmplxByCmplxMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c deleted file mode 100644 index 8ba17cf..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c +++ /dev/null @@ -1,224 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mult_real_f32.c - * Description: Floating-point complex by real multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 < numSamples; n++) {
    -      pCmplxDst[(2*n)+0] = pSrcCmplx[(2*n)+0] * pSrcReal[n];
    -      pCmplxDst[(2*n)+1] = pSrcCmplx[(2*n)+1] * pSrcReal[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 complex input vector - @param[in] pSrcReal points to real input vector - @param[out] pCmplxDst points to complex output vector - @param[in] numSamples number of samples in each vector - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -void arm_cmplx_mult_real_f32( - const float32_t * pSrcCmplx, - const float32_t * pSrcReal, - float32_t * pCmplxDst, - uint32_t numSamples) -{ - const static uint32_t stride_cmplx_x_real_32[4] = { 0, 0, 1, 1 }; - - uint32_t blockSizeC = numSamples * CMPLX_DIM; /* loop counters */ - uint32_t blkCnt; - f32x4_t rVec; - f32x4_t cmplxVec; - f32x4_t dstVec; - uint32x4_t strideVec; - float32_t in; - - - /* stride vector for pairs of real generation */ - strideVec = vld1q(stride_cmplx_x_real_32); - - /* Compute 4 complex outputs at a time */ - blkCnt = blockSizeC >> 2; - while (blkCnt > 0U) - { - cmplxVec = vld1q(pSrcCmplx); - rVec = vldrwq_gather_shifted_offset_f32(pSrcReal, strideVec); - dstVec = vmulq(cmplxVec, rVec); - vst1q(pCmplxDst, dstVec); - - pSrcReal += 2; - pSrcCmplx += 4; - pCmplxDst += 4; - blkCnt--; - } - - blkCnt = (blockSizeC & 3) >> 1; - while (blkCnt > 0U) - { - /* C[2 * i ] = A[2 * i ] * B[i]. */ - /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ - - in = *pSrcReal++; - /* store result in destination buffer. */ - *pCmplxDst++ = *pSrcCmplx++ * in; - *pCmplxDst++ = *pSrcCmplx++ * in; - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -void arm_cmplx_mult_real_f32( - const float32_t * pSrcCmplx, - const float32_t * pSrcReal, - float32_t * pCmplxDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - float32_t in; /* Temporary variable */ - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - float32x4_t r; - float32x4x2_t ab,outCplx; - - /* Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - ab = vld2q_f32(pSrcCmplx); // load & separate real/imag pSrcA (de-interleave 2) - r = vld1q_f32(pSrcReal); // load & separate real/imag pSrcB - - /* Increment pointers */ - pSrcCmplx += 8; - pSrcReal += 4; - - outCplx.val[0] = vmulq_f32(ab.val[0], r); - outCplx.val[1] = vmulq_f32(ab.val[1], r); - - vst2q_f32(pCmplxDst, outCplx); - pCmplxDst += 8; - - blkCnt--; - } - - /* Tail */ - blkCnt = numSamples & 3; -#else -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[2 * i ] = A[2 * i ] * B[i]. */ - /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ - - in = *pSrcReal++; - /* store result in destination buffer. */ - *pCmplxDst++ = *pSrcCmplx++ * in; - *pCmplxDst++ = *pSrcCmplx++ * in; - - in = *pSrcReal++; - *pCmplxDst++ = *pSrcCmplx++ * in; - *pCmplxDst++ = *pSrcCmplx++ * in; - - in = *pSrcReal++; - *pCmplxDst++ = *pSrcCmplx++ * in; - *pCmplxDst++ = *pSrcCmplx++ * in; - - in = *pSrcReal++; - *pCmplxDst++ = *pSrcCmplx++* in; - *pCmplxDst++ = *pSrcCmplx++ * in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ -#endif /* #if defined(ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* C[2 * i ] = A[2 * i ] * B[i]. */ - /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ - - in = *pSrcReal++; - /* store result in destination buffer. */ - *pCmplxDst++ = *pSrcCmplx++ * in; - *pCmplxDst++ = *pSrcCmplx++ * in; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of CmplxByRealMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c deleted file mode 100644 index cbcf8eb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c +++ /dev/null @@ -1,238 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mult_real_q15.c - * Description: Q15 complex by real multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup CmplxByRealMult - @{ - */ - -/** - @brief Q15 complex-by-real multiplication. - @param[in] pSrcCmplx points to complex input vector - @param[in] pSrcReal points to real input vector - @param[out] pCmplxDst points to complex output vector - @param[in] numSamples number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. - */ -#if defined(ARM_MATH_MVEI) - -void arm_cmplx_mult_real_q15( - const q15_t * pSrcCmplx, - const q15_t * pSrcReal, - q15_t * pCmplxDst, - uint32_t numSamples) -{ - const static uint16_t stride_cmplx_x_real_16[8] = { - 0, 0, 1, 1, 2, 2, 3, 3 - }; - q15x8_t rVec; - q15x8_t cmplxVec; - q15x8_t dstVec; - uint16x8_t strideVec; - uint32_t blockSizeC = numSamples * CMPLX_DIM; /* loop counters */ - uint32_t blkCnt; - q15_t in; - - /* - * stride vector for pairs of real generation - */ - strideVec = vld1q(stride_cmplx_x_real_16); - - blkCnt = blockSizeC >> 3; - - while (blkCnt > 0U) - { - cmplxVec = vld1q(pSrcCmplx); - rVec = vldrhq_gather_shifted_offset_s16(pSrcReal, strideVec); - dstVec = vqdmulhq(cmplxVec, rVec); - vst1q(pCmplxDst, dstVec); - - pSrcReal += 4; - pSrcCmplx += 8; - pCmplxDst += 8; - blkCnt --; - } - - /* Tail */ - blkCnt = (blockSizeC & 7) >> 1; - 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 loop counter */ - blkCnt--; - } -} -#else -void arm_cmplx_mult_real_q15( - const q15_t * pSrcCmplx, - const q15_t * pSrcReal, - q15_t * pCmplxDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - q15_t in; /* Temporary variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - -#if defined (ARM_MATH_DSP) - 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 */ -#endif - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[2 * i ] = A[2 * i ] * B[i]. */ - /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ - -#if defined (ARM_MATH_DSP) - /* read 2 complex numbers both real and imaginary from complex input buffer */ - inA1 = read_q15x2_ia ((q15_t **) &pSrcCmplx); - inA2 = read_q15x2_ia ((q15_t **) &pSrcCmplx); - /* read 2 real values at a time from real input buffer */ - inB1 = read_q15x2_ia ((q15_t **) &pSrcReal); - - /* 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 */ - write_q15x2_ia (&pCmplxDst, __PKHBT(out1, out2, 16)); - write_q15x2_ia (&pCmplxDst, __PKHBT(out3, out4, 16)); - - inA1 = read_q15x2_ia ((q15_t **) &pSrcCmplx); - inA2 = read_q15x2_ia ((q15_t **) &pSrcCmplx); - inB1 = read_q15x2_ia ((q15_t **) &pSrcReal); - -#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); - - write_q15x2_ia (&pCmplxDst, __PKHBT(out1, out2, 16)); - write_q15x2_ia (&pCmplxDst, __PKHBT(out3, out4, 16)); -#else - in = *pSrcReal++; - *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); - *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); - - in = *pSrcReal++; - *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); - *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); - - in = *pSrcReal++; - *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); - *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); - - in = *pSrcReal++; - *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); - *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of CmplxByRealMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c deleted file mode 100644 index 6904df1..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c +++ /dev/null @@ -1,204 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mult_real_q31.c - * Description: Q31 complex by real multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupCmplxMath - */ - -/** - @addtogroup CmplxByRealMult - @{ - */ - -/** - @brief Q31 complex-by-real multiplication. - @param[in] pSrcCmplx points to complex input vector - @param[in] pSrcReal points to real input vector - @param[out] pCmplxDst points to complex output vector - @param[in] numSamples number of samples in each vector - @return none - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] are saturated. - */ - -#if defined(ARM_MATH_MVEI) -void arm_cmplx_mult_real_q31( - const q31_t * pSrcCmplx, - const q31_t * pSrcReal, - q31_t * pCmplxDst, - uint32_t numSamples) -{ - - const static uint32_t stride_cmplx_x_real_32[4] = { - 0, 0, 1, 1 - }; - q31x4_t rVec; - q31x4_t cmplxVec; - q31x4_t dstVec; - uint32x4_t strideVec; - uint32_t blockSizeC = numSamples * CMPLX_DIM; /* loop counters */ - uint32_t blkCnt; - q31_t in; - - /* - * stride vector for pairs of real generation - */ - strideVec = vld1q(stride_cmplx_x_real_32); - - /* Compute 4 complex outputs at a time */ - blkCnt = blockSizeC >> 2; - while (blkCnt > 0U) - { - cmplxVec = vld1q(pSrcCmplx); - rVec = vldrwq_gather_shifted_offset_s32(pSrcReal, strideVec); - dstVec = vqdmulhq(cmplxVec, rVec); - vst1q(pCmplxDst, dstVec); - - pSrcReal += 2; - pSrcCmplx += 4; - pCmplxDst += 4; - blkCnt --; - } - - blkCnt = (blockSizeC & 3) >> 1; - while (blkCnt > 0U) - { - /* C[2 * i ] = A[2 * i ] * B[i]. */ - /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ - - in = *pSrcReal++; - /* store saturated result in 1.31 format to destination buffer */ - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -void arm_cmplx_mult_real_q31( - const q31_t * pSrcCmplx, - const q31_t * pSrcReal, - q31_t * pCmplxDst, - uint32_t numSamples) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t in; /* Temporary variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C[2 * i ] = A[2 * i ] * B[i]. */ - /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ - - in = *pSrcReal++; -#if defined (ARM_MATH_DSP) - /* store saturated result in 1.31 format to destination buffer */ - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); -#else - /* store result in destination buffer. */ - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); -#endif - - in = *pSrcReal++; -#if defined (ARM_MATH_DSP) - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); -#else - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); -#endif - - in = *pSrcReal++; -#if defined (ARM_MATH_DSP) - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); -#else - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); -#endif - - in = *pSrcReal++; -#if defined (ARM_MATH_DSP) - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); -#else - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C[2 * i ] = A[2 * i ] * B[i]. */ - /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ - - in = *pSrcReal++; -#if defined (ARM_MATH_DSP) - /* store saturated result in 1.31 format to destination buffer */ - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); - *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); -#else - /* store result in destination buffer. */ - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); - *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of CmplxByRealMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/CMakeLists.txt deleted file mode 100644 index da41e42..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPController) - -include(configLib) -include(configDsp) - -add_library(CMSISDSPController STATIC) - -configLib(CMSISDSPController ${ROOT}) -configDsp(CMSISDSPController ${ROOT}) - -include(interpol) -interpol(CMSISDSPController) - -if (CONFIGTABLE AND ALLFAST) - target_compile_definitions(CMSISDSPController PUBLIC ARM_ALL_FAST_TABLES) -endif() - -target_sources(CMSISDSPController PRIVATE arm_pid_init_f32.c) -target_sources(CMSISDSPController PRIVATE arm_pid_init_q15.c) -target_sources(CMSISDSPController PRIVATE arm_pid_init_q31.c) -target_sources(CMSISDSPController PRIVATE arm_pid_reset_f32.c) -target_sources(CMSISDSPController PRIVATE arm_pid_reset_q15.c) -target_sources(CMSISDSPController PRIVATE arm_pid_reset_q31.c) - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_SIN_COS_F32) -target_sources(CMSISDSPController PRIVATE arm_sin_cos_f32.c) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_SIN_COS_Q31) -target_sources(CMSISDSPController PRIVATE arm_sin_cos_q31.c) -endif() - - - -### Includes -target_include_directories(CMSISDSPController PUBLIC "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/ControllerFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/ControllerFunctions.c deleted file mode 100644 index 51720bc..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/ControllerFunctions.c +++ /dev/null @@ -1,37 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: ControllerFunctions.c - * Description: Combination of all controller function source files. - * - * $Date: 18. March 2019 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_pid_init_f32.c" -#include "arm_pid_init_q15.c" -#include "arm_pid_init_q31.c" -#include "arm_pid_reset_f32.c" -#include "arm_pid_reset_q15.c" -#include "arm_pid_reset_q31.c" -#include "arm_sin_cos_f32.c" -#include "arm_sin_cos_q31.c" - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_f32.c deleted file mode 100644 index ecb703a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_f32.c +++ /dev/null @@ -1,75 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_pid_init_f32.c - * Description: Floating-point PID Control initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - value = 0: no change in state - - value = 1: reset state - @return none - - @par Details - 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.0f * S->Kd); - - /* Derived coefficient A2 */ - S->A2 = S->Kd; - - /* Check whether state needs reset or not */ - if (resetStateFlag) - { - /* Reset state to zero, The size will be always 3 samples */ - memset(S->state, 0, 3U * sizeof(float32_t)); - } - -} - -/** - @} end of PID group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_q15.c deleted file mode 100644 index c88a3d9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_q15.c +++ /dev/null @@ -1,95 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_pid_init_q15.c - * Description: Q15 PID Control initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @addtogroup PID - @{ - */ - -/** - @brief Initialization function for the Q15 PID Control. - @param[in,out] S points to an instance of the Q15 PID structure - @param[in] resetStateFlag - - value = 0: no change in state - - value = 1: reset state - @return none - - @par Details - 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) -{ - -#if defined (ARM_MATH_DSP) - - /* 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 - -#else - - 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; - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Check whether state needs reset or not */ - if (resetStateFlag) - { - /* Reset state to zero, The size will be always 3 samples */ - memset(S->state, 0, 3U * sizeof(q15_t)); - } - -} - -/** - @} end of PID group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_q31.c deleted file mode 100644 index 1625a5f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_init_q31.c +++ /dev/null @@ -1,92 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_pid_init_q31.c - * Description: Q31 PID Control initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - value = 0: no change in state - - value = 1: reset state - @return none - - @par Details - 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) -{ - -#if defined (ARM_MATH_DSP) - - /* 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 - - q31_t temp; /* to store the sum */ - - /* 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 /* #if defined (ARM_MATH_DSP) */ - - /* Derived coefficient A2 */ - S->A2 = S->Kd; - - /* Check whether state needs reset or not */ - if (resetStateFlag) - { - /* Reset state to zero, The size will be always 3 samples */ - memset(S->state, 0, 3U * sizeof(q31_t)); - } - -} - -/** - @} end of PID group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_f32.c deleted file mode 100644 index d839e55..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_f32.c +++ /dev/null @@ -1,54 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_pid_reset_f32.c - * Description: Floating-point PID Control reset function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @addtogroup PID - @{ - */ - -/** - @brief Reset function for the floating-point PID Control. - @param[in,out] S points to an instance of the floating-point PID structure - @return none - - @par Details - The function resets the state buffer to zeros. - */ - -void arm_pid_reset_f32( - arm_pid_instance_f32 * S) -{ - /* Reset state to zero, The size will be always 3 samples */ - memset(S->state, 0, 3U * sizeof(float32_t)); -} - -/** - @} end of PID group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_q15.c deleted file mode 100644 index 256fd8c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_q15.c +++ /dev/null @@ -1,54 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_pid_reset_q15.c - * Description: Q15 PID Control reset function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @addtogroup PID - @{ - */ - -/** - @brief Reset function for the Q15 PID Control. - @param[in,out] S points to an instance of the Q15 PID structure - @return none - - @par Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_q31.c deleted file mode 100644 index 2aa391c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_pid_reset_q31.c +++ /dev/null @@ -1,54 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_pid_reset_q31.c - * Description: Q31 PID Control reset function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @addtogroup PID - @{ - */ - -/** - @brief Reset function for the Q31 PID Control. - @param[in,out] S points to an instance of the Q31 PID structure - @return none - - @par Details - The function resets the state buffer to zeros. - */ - -void arm_pid_reset_q31( - arm_pid_instance_q31 * S) -{ - /* Reset state to zero, The size will be always 3 samples */ - memset(S->state, 0, 3U * sizeof(q31_t)); -} - -/** - @} end of PID group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_sin_cos_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_sin_cos_f32.c deleted file mode 100644 index 12a1c83..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_sin_cos_f32.c +++ /dev/null @@ -1,146 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sin_cos_f32.c - * Description: Sine and Cosine calculation for floating-point values - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 result is accurate to 5 digits after the decimal point. - - 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 processed sine output - @param[out] pCosVal points to processed cosine output - @return none - */ - -void arm_sin_cos_f32( - float32_t theta, - float32_t * pSinVal, - float32_t * pCosVal) -{ - float32_t fract, in; /* Temporary input, output variables */ - uint16_t indexS, indexC; /* Index variable */ - float32_t f1, f2, d1, d2; /* Two nearest output values */ - float32_t Dn, Df; - float32_t temp, findex; - - /* input x is in degrees */ - /* Scale input, divide input by 360, for cosine add 0.25 (pi/2) to read sine table */ - in = theta * 0.00277777777778f; - - if (in < 0.0f) - { - in = -in; - } - - in = in - (int32_t)in; - - /* Calculate the nearest index */ - findex = (float32_t)FAST_MATH_TABLE_SIZE * in; - indexS = ((uint16_t)findex) & 0x1ff; - indexC = (indexS + (FAST_MATH_TABLE_SIZE / 4)) & 0x1ff; - - /* Calculation of fractional value */ - fract = findex - (float32_t) indexS; - - /* Read two nearest values of input value from the cos & sin tables */ - f1 = sinTable_f32[indexC ]; - f2 = sinTable_f32[indexC+1]; - d1 = -sinTable_f32[indexS ]; - d2 = -sinTable_f32[indexS+1]; - - temp = (1.0f - fract) * f1 + fract * f2; - - 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 ]; - f2 = sinTable_f32[indexS+1]; - d1 = sinTable_f32[indexC ]; - d2 = sinTable_f32[indexC+1]; - - temp = (1.0f - fract) * f1 + fract * f2; - - 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; - - if (theta < 0.0f) - { - *pSinVal = -*pSinVal; - } -} - -/** - @} end of SinCos group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_sin_cos_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_sin_cos_q31.c deleted file mode 100644 index 84ee3d2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/ControllerFunctions/arm_sin_cos_q31.c +++ /dev/null @@ -1,110 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sin_cos_q31.c - * Description: Cosine & Sine calculation for Q31 values - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 processed sine output - @param[out] pCosVal points to 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 input, output variables */ - 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 ]; - f2 = sinTable_q31[indexC+1]; - d1 = -sinTable_q31[indexS ]; - 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 ]; - f2 = sinTable_q31[indexS+1]; - d1 = sinTable_q31[indexC ]; - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/CMakeLists.txt deleted file mode 100644 index 63da550..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPDistance) - -include(configLib) -include(configDsp) - -file(GLOB SRC "./*_*.c") - -add_library(CMSISDSPDistance STATIC ${SRC}) - -configLib(CMSISDSPDistance ${ROOT}) -configDsp(CMSISDSPDistance ${ROOT}) - -### Includes -target_include_directories(CMSISDSPDistance PUBLIC "${DSP}/Include") -target_include_directories(CMSISDSPDistance PRIVATE ".") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/DistanceFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/DistanceFunctions.c deleted file mode 100644 index 7a8e062..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/DistanceFunctions.c +++ /dev/null @@ -1,47 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: BayesFunctions.c - * Description: Combination of all distance function source files. - * - * $Date: 16. March 2020 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_boolean_distance.c" -#include "arm_braycurtis_distance_f32.c" -#include "arm_canberra_distance_f32.c" -#include "arm_chebyshev_distance_f32.c" -#include "arm_cityblock_distance_f32.c" -#include "arm_correlation_distance_f32.c" -#include "arm_cosine_distance_f32.c" -#include "arm_dice_distance.c" -#include "arm_euclidean_distance_f32.c" -#include "arm_hamming_distance.c" -#include "arm_jaccard_distance.c" -#include "arm_jensenshannon_distance_f32.c" -#include "arm_kulsinski_distance.c" -#include "arm_minkowski_distance_f32.c" -#include "arm_rogerstanimoto_distance.c" -#include "arm_russellrao_distance.c" -#include "arm_sokalmichener_distance.c" -#include "arm_sokalsneath_distance.c" -#include "arm_yule_distance.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_boolean_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_boolean_distance.c deleted file mode 100644 index b31e486..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_boolean_distance.c +++ /dev/null @@ -1,78 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_svm_linear_init_f32.c - * Description: SVM Linear Instance Initialization - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - - - -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - -#endif - - -#define TT -#define TF -#define FT -#define EXT _TT_TF_FT -#include "arm_boolean_distance_template.h" - -#undef TT -#undef FF -#undef TF -#undef FT -#undef EXT -#define TF -#define FT -#define EXT _TF_FT -#include "arm_boolean_distance_template.h" - -#undef TT -#undef FF -#undef TF -#undef FT -#undef EXT -#define TT -#define FF -#define TF -#define FT -#define EXT _TT_FF_TF_FT -#include "arm_boolean_distance_template.h" - -#undef TT -#undef FF -#undef TF -#undef FT -#undef EXT -#define TT -#define EXT _TT -#include "arm_boolean_distance_template.h" - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_boolean_distance_template.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_boolean_distance_template.h deleted file mode 100644 index e6ec25a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_boolean_distance_template.h +++ /dev/null @@ -1,550 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_boolean_distance.c - * Description: Templates for boolean distances - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -/** - * @defgroup DISTANCEF Distance Functions - * - * Computes Distances between vectors. - * - * Distance functions are useful in a lot of algorithms. - * - */ - - -/** - * @addtogroup DISTANCEF - * @{ - */ - - -/** - * @brief Elements of boolean distances - * - * Different values which are used to compute boolean distances - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @param[out] cTT cTT value - * @param[out] cTF cTF value - * @param[out] cFT cFT value - * @return None - * - */ - -#define _FUNC(A,B) A##B - -#define FUNC(EXT) _FUNC(arm_boolean_distance, EXT) - -#if defined(ARM_MATH_MVEI) - -#include "arm_common_tables.h" - -void FUNC(EXT)(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools -#ifdef TT - , uint32_t *cTT -#endif -#ifdef FF - , uint32_t *cFF -#endif -#ifdef TF - , uint32_t *cTF -#endif -#ifdef FT - , uint32_t *cFT -#endif - ) -{ - -#ifdef TT - uint32_t _ctt=0; -#endif -#ifdef FF - uint32_t _cff=0; -#endif -#ifdef TF - uint32_t _ctf=0; -#endif -#ifdef FT - uint32_t _cft=0; -#endif - uint32_t a, b, ba, bb; - int shift; - const uint8_t *pA8 = (const uint8_t *) pA; - const uint8_t *pB8 = (const uint8_t *) pB; - - /* handle vector blocks */ - uint32_t blkCnt = numberOfBools / 128; - - - - while (blkCnt > 0U) { - uint8x16_t vecA = vld1q((const uint8_t *) pA8); - uint8x16_t vecB = vld1q((const uint8_t *) pB8); - -#ifdef TT - uint8x16_t vecTT = vecA & vecB; - vecTT = vldrbq_gather_offset_u8(hwLUT, vecTT); - _ctt += vaddvq(vecTT); -#endif -#ifdef FF - uint8x16_t vecFF = vmvnq(vecA) & vmvnq(vecB); - vecFF = vldrbq_gather_offset_u8(hwLUT, vecFF); - _cff += vaddvq(vecFF); -#endif -#ifdef TF - uint8x16_t vecTF = vecA & vmvnq(vecB); - vecTF = vldrbq_gather_offset_u8(hwLUT, vecTF); - _ctf += vaddvq(vecTF); -#endif -#ifdef FT - uint8x16_t vecFT = vmvnq(vecA) & vecB; - vecFT = vldrbq_gather_offset_u8(hwLUT, vecFT); - _cft += vaddvq(vecFT); -#endif - - pA8 += 16; - pB8 += 16; - blkCnt--; - - } - - pA = (const uint32_t *)pA8; - pB = (const uint32_t *)pB8; - - blkCnt = numberOfBools & 0x7F; - while(blkCnt >= 32) - { - a = *pA++; - b = *pB++; - shift = 0; - while(shift < 32) - { - ba = a & 1; - bb = b & 1; - a = a >> 1; - b = b >> 1; - -#ifdef TT - _ctt += (ba && bb); -#endif -#ifdef FF - _cff += ((1 ^ ba) && (1 ^ bb)); -#endif -#ifdef TF - _ctf += (ba && (1 ^ bb)); -#endif -#ifdef FT - _cft += ((1 ^ ba) && bb); -#endif - shift ++; - } - - blkCnt -= 32; - } - - a = *pA++; - b = *pB++; - - a = a >> (32 - blkCnt); - b = b >> (32 - blkCnt); - - while(blkCnt > 0) - { - ba = a & 1; - bb = b & 1; - a = a >> 1; - - b = b >> 1; -#ifdef TT - _ctt += (ba && bb); -#endif -#ifdef FF - _cff += ((1 ^ ba) && (1 ^ bb)); -#endif -#ifdef TF - _ctf += (ba && (1 ^ bb)); -#endif -#ifdef FT - _cft += ((1 ^ ba) && bb); -#endif - blkCnt --; - } - -#ifdef TT - *cTT = _ctt; -#endif -#ifdef FF - *cFF = _cff; -#endif -#ifdef TF - *cTF = _ctf; -#endif -#ifdef FT - *cFT = _cft; -#endif -} - -#else -#if defined(ARM_MATH_NEON) - - -void FUNC(EXT)(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools -#ifdef TT - , uint32_t *cTT -#endif -#ifdef FF - , uint32_t *cFF -#endif -#ifdef TF - , uint32_t *cTF -#endif -#ifdef FT - , uint32_t *cFT -#endif - ) -{ -#ifdef TT - uint32_t _ctt=0; -#endif -#ifdef FF - uint32_t _cff=0; -#endif -#ifdef TF - uint32_t _ctf=0; -#endif -#ifdef FT - uint32_t _cft=0; -#endif - uint32_t nbBoolBlock; - uint32_t a,b,ba,bb; - int shift; - uint32x4_t aV, bV; -#ifdef TT - uint32x4_t cttV; -#endif -#ifdef FF - uint32x4_t cffV; -#endif -#ifdef TF - uint32x4_t ctfV; -#endif -#ifdef FT - uint32x4_t cftV; -#endif - uint8x16_t tmp; - uint16x8_t tmp2; - uint32x4_t tmp3; - uint64x2_t tmp4; -#ifdef TT - uint64x2_t tmp4tt; -#endif -#ifdef FF - uint64x2_t tmp4ff; -#endif -#ifdef TF - uint64x2_t tmp4tf; -#endif -#ifdef FT - uint64x2_t tmp4ft; -#endif - -#ifdef TT - tmp4tt = vdupq_n_u64(0); -#endif -#ifdef FF - tmp4ff = vdupq_n_u64(0); -#endif -#ifdef TF - tmp4tf = vdupq_n_u64(0); -#endif -#ifdef FT - tmp4ft = vdupq_n_u64(0); -#endif - - nbBoolBlock = numberOfBools >> 7; - while(nbBoolBlock > 0) - { - aV = vld1q_u32(pA); - bV = vld1q_u32(pB); - pA += 4; - pB += 4; - -#ifdef TT - cttV = vandq_u32(aV,bV); -#endif -#ifdef FF - cffV = vandq_u32(vmvnq_u32(aV),vmvnq_u32(bV)); -#endif -#ifdef TF - ctfV = vandq_u32(aV,vmvnq_u32(bV)); -#endif -#ifdef FT - cftV = vandq_u32(vmvnq_u32(aV),bV); -#endif - -#ifdef TT - tmp = vcntq_u8(vreinterpretq_u8_u32(cttV)); - tmp2 = vpaddlq_u8(tmp); - tmp3 = vpaddlq_u16(tmp2); - tmp4 = vpaddlq_u32(tmp3); - tmp4tt = vaddq_u64(tmp4tt, tmp4); -#endif - -#ifdef FF - tmp = vcntq_u8(vreinterpretq_u8_u32(cffV)); - tmp2 = vpaddlq_u8(tmp); - tmp3 = vpaddlq_u16(tmp2); - tmp4 = vpaddlq_u32(tmp3); - tmp4ff = vaddq_u64(tmp4ff, tmp4); -#endif - -#ifdef TF - tmp = vcntq_u8(vreinterpretq_u8_u32(ctfV)); - tmp2 = vpaddlq_u8(tmp); - tmp3 = vpaddlq_u16(tmp2); - tmp4 = vpaddlq_u32(tmp3); - tmp4tf = vaddq_u64(tmp4tf, tmp4); -#endif - -#ifdef FT - tmp = vcntq_u8(vreinterpretq_u8_u32(cftV)); - tmp2 = vpaddlq_u8(tmp); - tmp3 = vpaddlq_u16(tmp2); - tmp4 = vpaddlq_u32(tmp3); - tmp4ft = vaddq_u64(tmp4ft, tmp4); -#endif - - - nbBoolBlock --; - } - -#ifdef TT - _ctt += vgetq_lane_u64(tmp4tt, 0) + vgetq_lane_u64(tmp4tt, 1); -#endif -#ifdef FF - _cff +=vgetq_lane_u64(tmp4ff, 0) + vgetq_lane_u64(tmp4ff, 1); -#endif -#ifdef TF - _ctf += vgetq_lane_u64(tmp4tf, 0) + vgetq_lane_u64(tmp4tf, 1); -#endif -#ifdef FT - _cft += vgetq_lane_u64(tmp4ft, 0) + vgetq_lane_u64(tmp4ft, 1); -#endif - - nbBoolBlock = numberOfBools & 0x7F; - while(nbBoolBlock >= 32) - { - a = *pA++; - b = *pB++; - shift = 0; - while(shift < 32) - { - ba = a & 1; - bb = b & 1; - a = a >> 1; - b = b >> 1; - -#ifdef TT - _ctt += (ba && bb); -#endif -#ifdef FF - _cff += ((1 ^ ba) && (1 ^ bb)); -#endif -#ifdef TF - _ctf += (ba && (1 ^ bb)); -#endif -#ifdef FT - _cft += ((1 ^ ba) && bb); -#endif - shift ++; - } - - nbBoolBlock -= 32; - } - - a = *pA++; - b = *pB++; - - a = a >> (32 - nbBoolBlock); - b = b >> (32 - nbBoolBlock); - - while(nbBoolBlock > 0) - { - ba = a & 1; - bb = b & 1; - a = a >> 1; - - b = b >> 1; -#ifdef TT - _ctt += (ba && bb); -#endif -#ifdef FF - _cff += ((1 ^ ba) && (1 ^ bb)); -#endif -#ifdef TF - _ctf += (ba && (1 ^ bb)); -#endif -#ifdef FT - _cft += ((1 ^ ba) && bb); -#endif - nbBoolBlock --; - } - -#ifdef TT - *cTT = _ctt; -#endif -#ifdef FF - *cFF = _cff; -#endif -#ifdef TF - *cTF = _ctf; -#endif -#ifdef FT - *cFT = _cft; -#endif -} - -#else - -void FUNC(EXT)(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools -#ifdef TT - , uint32_t *cTT -#endif -#ifdef FF - , uint32_t *cFF -#endif -#ifdef TF - , uint32_t *cTF -#endif -#ifdef FT - , uint32_t *cFT -#endif - ) -{ - -#ifdef TT - uint32_t _ctt=0; -#endif -#ifdef FF - uint32_t _cff=0; -#endif -#ifdef TF - uint32_t _ctf=0; -#endif -#ifdef FT - uint32_t _cft=0; -#endif - uint32_t a,b,ba,bb; - int shift; - - while(numberOfBools >= 32) - { - a = *pA++; - b = *pB++; - shift = 0; - while(shift < 32) - { - ba = a & 1; - bb = b & 1; - a = a >> 1; - b = b >> 1; -#ifdef TT - _ctt += (ba && bb); -#endif -#ifdef FF - _cff += ((1 ^ ba) && (1 ^ bb)); -#endif -#ifdef TF - _ctf += (ba && (1 ^ bb)); -#endif -#ifdef FT - _cft += ((1 ^ ba) && bb); -#endif - shift ++; - } - - numberOfBools -= 32; - } - - a = *pA++; - b = *pB++; - - a = a >> (32 - numberOfBools); - b = b >> (32 - numberOfBools); - - while(numberOfBools > 0) - { - ba = a & 1; - bb = b & 1; - a = a >> 1; - b = b >> 1; - -#ifdef TT - _ctt += (ba && bb); -#endif -#ifdef FF - _cff += ((1 ^ ba) && (1 ^ bb)); -#endif -#ifdef TF - _ctf += (ba && (1 ^ bb)); -#endif -#ifdef FT - _cft += ((1 ^ ba) && bb); -#endif - numberOfBools --; - } - -#ifdef TT - *cTT = _ctt; -#endif -#ifdef FF - *cFF = _cff; -#endif -#ifdef TF - *cTF = _ctf; -#endif -#ifdef FT - *cFT = _cft; -#endif -} -#endif -#endif /* defined(ARM_MATH_MVEI) */ - - -/** - * @} end of DISTANCEF group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_braycurtis_distance_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_braycurtis_distance_f32.c deleted file mode 100644 index 38c9d18..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_braycurtis_distance_f32.c +++ /dev/null @@ -1,199 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_braycurtis_distance_f32.c - * Description: Bray-Curtis distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - - -/** - * @ingroup groupDistance - * @{ - */ - -/** - * @defgroup FloatDist Float Distances - * - * Distances between two vectors of float values. - */ - -/** - @addtogroup FloatDist - @{ - */ - - -/** - * @brief Bray-Curtis distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -float32_t arm_braycurtis_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accumDiff = 0.0f, accumSum = 0.0f; - uint32_t blkCnt; - f32x4_t a, b, c, accumDiffV, accumSumV; - - - accumDiffV = vdupq_n_f32(0.0f); - accumSumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while (blkCnt > 0) { - a = vld1q(pA); - b = vld1q(pB); - - c = vabdq(a, b); - accumDiffV = vaddq(accumDiffV, c); - - c = vaddq_f32(a, b); - c = vabsq_f32(c); - accumSumV = vaddq(accumSumV, c); - - pA += 4; - pB += 4; - blkCnt--; - } - - blkCnt = blockSize & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - - a = vldrwq_z_f32(pA, p0); - b = vldrwq_z_f32(pB, p0); - - c = vabdq(a, b); - accumDiffV = vaddq_m(accumDiffV, accumDiffV, c, p0); - - c = vaddq_f32(a, b); - c = vabsq_f32(c); - accumSumV = vaddq_m(accumSumV, accumSumV, c, p0); - } - - accumDiff = vecAddAcrossF32Mve(accumDiffV); - accumSum = vecAddAcrossF32Mve(accumSumV); - - /* - It is assumed that accumSum is not zero. Since it is the sum of several absolute - values it would imply that all of them are zero. It is very unlikely for long vectors. - */ - return (accumDiff / accumSum); -} -#else -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - -float32_t arm_braycurtis_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accumDiff=0.0f, accumSum=0.0f; - uint32_t blkCnt; - float32x4_t a,b,c,accumDiffV, accumSumV; - float32x2_t accumV2; - - accumDiffV = vdupq_n_f32(0.0f); - accumSumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - a = vld1q_f32(pA); - b = vld1q_f32(pB); - - c = vabdq_f32(a,b); - accumDiffV = vaddq_f32(accumDiffV,c); - - c = vaddq_f32(a,b); - c = vabsq_f32(c); - accumSumV = vaddq_f32(accumSumV,c); - - pA += 4; - pB += 4; - blkCnt --; - } - accumV2 = vpadd_f32(vget_low_f32(accumDiffV),vget_high_f32(accumDiffV)); - accumDiff = vget_lane_f32(accumV2, 0) + vget_lane_f32(accumV2, 1); - - accumV2 = vpadd_f32(vget_low_f32(accumSumV),vget_high_f32(accumSumV)); - accumSum = vget_lane_f32(accumV2, 0) + vget_lane_f32(accumV2, 1); - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - accumDiff += fabsf(*pA - *pB); - accumSum += fabsf(*pA++ + *pB++); - blkCnt --; - } - /* - - It is assumed that accumSum is not zero. Since it is the sum of several absolute - values it would imply that all of them are zero. It is very unlikely for long vectors. - - */ - return(accumDiff / accumSum); -} - -#else -float32_t arm_braycurtis_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accumDiff=0.0f, accumSum=0.0f, tmpA, tmpB; - - while(blockSize > 0) - { - tmpA = *pA++; - tmpB = *pB++; - accumDiff += fabsf(tmpA - tmpB); - accumSum += fabsf(tmpA + tmpB); - blockSize --; - } - /* - - It is assumed that accumSum is not zero. Since it is the sum of several absolute - values it would imply that all of them are zero. It is very unlikely for long vectors. - - */ - return(accumDiff / accumSum); -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - - -/** - * @} end of FloatDist group - */ - -/** - * @} end of groupDistance group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_canberra_distance_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_canberra_distance_f32.c deleted file mode 100644 index a0ae660..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_canberra_distance_f32.c +++ /dev/null @@ -1,220 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_canberra_distance_f32.c - * Description: Canberra distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - @addtogroup FloatDist - @{ - */ - - -/** - * @brief Canberra distance between two vectors - * - * This function may divide by zero when samples pA[i] and pB[i] are both zero. - * The result of the computation will be correct. So the division per zero may be - * ignored. - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -float32_t arm_canberra_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accum = 0.0f; - uint32_t blkCnt; - f32x4_t a, b, c, accumV; - - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while (blkCnt > 0) { - a = vld1q(pA); - b = vld1q(pB); - - c = vabdq(a, b); - - a = vabsq(a); - b = vabsq(b); - a = vaddq(a, b); - - /* - * May divide by zero when a and b have both the same lane at zero. - */ - a = vrecip_medprec_f32(a); - - /* - * Force result of a division by 0 to 0. It the behavior of the - * sklearn canberra function. - */ - a = vdupq_m_n_f32(a, 0.0f, vcmpeqq(a, 0.0f)); - c = vmulq(c, a); - accumV = vaddq(accumV, c); - - pA += 4; - pB += 4; - blkCnt--; - } - - blkCnt = blockSize & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - - a = vldrwq_z_f32(pA, p0); - b = vldrwq_z_f32(pB, p0); - - c = vabdq(a, b); - - a = vabsq(a); - b = vabsq(b); - a = vaddq(a, b); - - /* - * May divide by zero when a and b have both the same lane at zero. - */ - a = vrecip_medprec_f32(a); - - /* - * Force result of a division by 0 to 0. It the behavior of the - * sklearn canberra function. - */ - a = vdupq_m_n_f32(a, 0.0f, vcmpeqq(a, 0.0f)); - c = vmulq(c, a); - accumV = vaddq_m(accumV, accumV, c, p0); - } - - accum = vecAddAcrossF32Mve(accumV); - - return (accum); -} - -#else -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - -float32_t arm_canberra_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accum=0.0f, tmpA, tmpB,diff,sum; - uint32_t blkCnt; - float32x4_t a,b,c,accumV; - float32x2_t accumV2; - uint32x4_t isZeroV; - float32x4_t zeroV = vdupq_n_f32(0.0f); - - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - a = vld1q_f32(pA); - b = vld1q_f32(pB); - - c = vabdq_f32(a,b); - - a = vabsq_f32(a); - b = vabsq_f32(b); - a = vaddq_f32(a,b); - isZeroV = vceqq_f32(a,zeroV); - - /* - * May divide by zero when a and b have both the same lane at zero. - */ - a = vinvq_f32(a); - - /* - * Force result of a division by 0 to 0. It the behavior of the - * sklearn canberra function. - */ - a = vreinterpretq_f32_s32(vbicq_s32(vreinterpretq_s32_f32(a),vreinterpretq_s32_u32(isZeroV))); - c = vmulq_f32(c,a); - accumV = vaddq_f32(accumV,c); - - pA += 4; - pB += 4; - blkCnt --; - } - accumV2 = vpadd_f32(vget_low_f32(accumV),vget_high_f32(accumV)); - accum = vget_lane_f32(accumV2, 0) + vget_lane_f32(accumV2, 1); - - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - tmpA = *pA++; - tmpB = *pB++; - - diff = fabsf(tmpA - tmpB); - sum = fabsf(tmpA) + fabsf(tmpB); - if ((tmpA != 0.0f) || (tmpB != 0.0f)) - { - accum += (diff / sum); - } - blkCnt --; - } - return(accum); -} - -#else -float32_t arm_canberra_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accum=0.0f, tmpA, tmpB,diff,sum; - - while(blockSize > 0) - { - tmpA = *pA++; - tmpB = *pB++; - - diff = fabsf(tmpA - tmpB); - sum = fabsf(tmpA) + fabsf(tmpB); - if ((tmpA != 0.0f) || (tmpB != 0.0f)) - { - accum += (diff / sum); - } - blockSize --; - } - return(accum); -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - - -/** - * @} end of FloatDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_chebyshev_distance_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_chebyshev_distance_f32.c deleted file mode 100644 index dab84e2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_chebyshev_distance_f32.c +++ /dev/null @@ -1,211 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_chebyshev_distance_f32.c - * Description: Chebyshev distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - @addtogroup FloatDist - @{ - */ - - -/** - * @brief Chebyshev distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -float32_t arm_chebyshev_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - f32x4_t vecA, vecB; - f32x4_t vecDiff = vdupq_n_f32(0.0); - float32_t maxValue = 0.0; - - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) { - vecA = vld1q(pA); - pA += 4; - vecB = vld1q(pB); - pB += 4; - /* - * update per-lane max. - */ - vecDiff = vmaxnmaq(vsubq(vecA, vecB), vecDiff); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - - vecA = vldrwq_z_f32(pA, p0); - vecB = vldrwq_z_f32(pB, p0); - - /* - * Get current max per lane and current index per lane - * when a max is selected - */ - vecDiff = vmaxnmaq_m(vecDiff, vsubq(vecA, vecB), p0); - } - /* - * Get max value across the vector - */ - return vmaxnmavq(maxValue, vecDiff); -} - -#else -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - -float32_t arm_chebyshev_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t diff=0.0f, maxVal=0.0f, tmpA, tmpB; - uint32_t blkCnt; - float32x4_t a,b,diffV, maxValV; - float32x2_t maxValV2; - - if (blockSize <= 3) - { - tmpA = *pA++; - tmpB = *pB++; - diff = fabsf(tmpA - tmpB); - maxVal = diff; - blockSize--; - - while(blockSize > 0) - { - tmpA = *pA++; - tmpB = *pB++; - diff = fabsf(tmpA - tmpB); - if (diff > maxVal) - { - maxVal = diff; - } - blockSize --; - } - } - else - { - - a = vld1q_f32(pA); - b = vld1q_f32(pB); - pA += 4; - pB += 4; - - diffV = vabdq_f32(a,b); - - blockSize -= 4; - - maxValV = diffV; - - - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - a = vld1q_f32(pA); - b = vld1q_f32(pB); - - diffV = vabdq_f32(a,b); - maxValV = vmaxq_f32(maxValV, diffV); - - pA += 4; - pB += 4; - blkCnt --; - } - maxValV2 = vpmax_f32(vget_low_f32(maxValV),vget_high_f32(maxValV)); - maxValV2 = vpmax_f32(maxValV2,maxValV2); - maxVal = vget_lane_f32(maxValV2,0); - - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - tmpA = *pA++; - tmpB = *pB++; - diff = fabsf(tmpA - tmpB); - if (diff > maxVal) - { - maxVal = diff; - } - blkCnt --; - } - } - return(maxVal); -} - -#else -float32_t arm_chebyshev_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t diff=0.0f, maxVal,tmpA, tmpB; - - tmpA = *pA++; - tmpB = *pB++; - diff = fabsf(tmpA - tmpB); - maxVal = diff; - blockSize--; - - while(blockSize > 0) - { - tmpA = *pA++; - tmpB = *pB++; - diff = fabsf(tmpA - tmpB); - if (diff > maxVal) - { - maxVal = diff; - } - blockSize --; - } - - return(maxVal); -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - - -/** - * @} end of FloatDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_cityblock_distance_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_cityblock_distance_f32.c deleted file mode 100644 index f80757c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_cityblock_distance_f32.c +++ /dev/null @@ -1,155 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cityblock_distance_f32.c - * Description: Cityblock (Manhattan) distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - -/** - @addtogroup FloatDist - @{ - */ - - -/** - * @brief Cityblock (Manhattan) distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -float32_t arm_cityblock_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - uint32_t blkCnt; - f32x4_t a, b, accumV, tempV; - - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) { - a = vld1q(pA); - b = vld1q(pB); - - tempV = vabdq(a, b); - accumV = vaddq(accumV, tempV); - - pA += 4; - pB += 4; - blkCnt--; - } - - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - - a = vldrwq_z_f32(pA, p0); - b = vldrwq_z_f32(pB, p0); - - tempV = vabdq(a, b); - accumV = vaddq_m(accumV, accumV, tempV, p0); - } - - return vecAddAcrossF32Mve(accumV); -} - -#else -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - -float32_t arm_cityblock_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accum=0.0f, tmpA, tmpB; - uint32_t blkCnt; - float32x4_t a,b,accumV, tempV; - float32x2_t accumV2; - - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - a = vld1q_f32(pA); - b = vld1q_f32(pB); - - tempV = vabdq_f32(a,b); - accumV = vaddq_f32(accumV, tempV); - - pA += 4; - pB += 4; - blkCnt --; - } - accumV2 = vpadd_f32(vget_low_f32(accumV),vget_high_f32(accumV)); - accumV2 = vpadd_f32(accumV2,accumV2); - accum = vget_lane_f32(accumV2,0); - - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - tmpA = *pA++; - tmpB = *pB++; - accum += fabsf(tmpA - tmpB); - - blkCnt --; - } - return(accum); -} - -#else -float32_t arm_cityblock_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accum,tmpA, tmpB; - - accum = 0.0f; - while(blockSize > 0) - { - tmpA = *pA++; - tmpB = *pB++; - accum += fabsf(tmpA - tmpB); - - blockSize --; - } - - return(accum); -} -#endif -#endif - -/** - * @} end of FloatDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_correlation_distance_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_correlation_distance_f32.c deleted file mode 100644 index 5384983..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_correlation_distance_f32.c +++ /dev/null @@ -1,82 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlation_distance_f32.c - * Description: Correlation distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - - -/** - @addtogroup FloatDist - @{ - */ - - -/** - * @brief Correlation distance between two vectors - * - * The input vectors are modified in place ! - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -float32_t arm_correlation_distance_f32(float32_t *pA,float32_t *pB, uint32_t blockSize) -{ - float32_t ma,mb,pwra,pwrb,dot,tmp; - - arm_mean_f32(pA, blockSize, &ma); - arm_mean_f32(pB, blockSize, &mb); - - arm_offset_f32(pA, -ma, pA, blockSize); - arm_offset_f32(pB, -mb, pB, blockSize); - - arm_power_f32(pA, blockSize, &pwra); - arm_power_f32(pB, blockSize, &pwrb); - - arm_dot_prod_f32(pA,pB,blockSize,&dot); - - dot = dot / blockSize; - pwra = pwra / blockSize; - pwrb = pwrb / blockSize; - - arm_sqrt_f32(pwra * pwrb,&tmp); - - return(1.0f - dot / tmp); - - -} - - - -/** - * @} end of FloatDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_cosine_distance_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_cosine_distance_f32.c deleted file mode 100644 index b35b5ee..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_cosine_distance_f32.c +++ /dev/null @@ -1,68 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cosine_distance_f32.c - * Description: Cosine distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - @addtogroup FloatDist - @{ - */ - - - -/** - * @brief Cosine distance between two vectors - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -float32_t arm_cosine_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t pwra,pwrb,dot,tmp; - - arm_power_f32(pA, blockSize, &pwra); - arm_power_f32(pB, blockSize, &pwrb); - - arm_dot_prod_f32(pA,pB,blockSize,&dot); - - arm_sqrt_f32(pwra * pwrb, &tmp); - return(1.0f - dot / tmp); - -} - - - -/** - * @} end of FloatDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_dice_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_dice_distance.c deleted file mode 100644 index 81533a6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_dice_distance.c +++ /dev/null @@ -1,90 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dice_distance.c - * Description: Dice distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - -extern void arm_boolean_distance_TT_TF_FT(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools - , uint32_t *cTT - , uint32_t *cTF - , uint32_t *cFT - ); - - -/** - * @ingroup groupDistance - * @{ - */ - -/** - * @defgroup BoolDist Boolean Distances - * - * Distances between two vectors of boolean values. - * - * Booleans are packed in 32 bit words. - * numberOfBooleans argument is the number of booleans and not the - * number of words. - * - * Bits are packed in big-endian mode (because of behavior of numpy packbits in - * in version < 1.17) - */ - -/** - @addtogroup BoolDist - @{ - */ - -/** - * @brief Dice distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_dice_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools) -{ - uint32_t ctt=0,ctf=0,cft=0; - - arm_boolean_distance_TT_TF_FT(pA, pB, numberOfBools, &ctt, &ctf, &cft); - - return(1.0*(ctf + cft) / (2.0*ctt + cft + ctf)); -} - - -/** - * @} end of BoolDist group - */ - -/** - * @} end of groupDistance group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_euclidean_distance_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_euclidean_distance_f32.c deleted file mode 100644 index 34df6d7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_euclidean_distance_f32.c +++ /dev/null @@ -1,150 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_euclidean_distance_f32.c - * Description: Euclidean distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - - -/** - @addtogroup FloatDist - @{ - */ - - -/** - * @brief Euclidean distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" -float32_t arm_euclidean_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - uint32_t blkCnt; - float32_t tmp; - f32x4_t a, b, accumV, tempV; - - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) { - a = vld1q(pA); - b = vld1q(pB); - - tempV = vsubq(a, b); - accumV = vfmaq(accumV, tempV, tempV); - - pA += 4; - pB += 4; - blkCnt--; - } - - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - - a = vldrwq_z_f32(pA, p0); - b = vldrwq_z_f32(pB, p0); - - tempV = vsubq(a, b); - accumV = vfmaq_m(accumV, tempV, tempV, p0); - } - - arm_sqrt_f32(vecAddAcrossF32Mve(accumV), &tmp); - return (tmp); -} -#else -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - -float32_t arm_euclidean_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accum=0.0f,tmp; - uint32_t blkCnt; - float32x4_t a,b,accumV; - float32x2_t accumV2; - - accumV = vdupq_n_f32(0.0f); - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - a = vld1q_f32(pA); - b = vld1q_f32(pB); - - a = vsubq_f32(a,b); - accumV = vmlaq_f32(accumV,a,a); - pA += 4; - pB += 4; - blkCnt --; - } - accumV2 = vpadd_f32(vget_low_f32(accumV),vget_high_f32(accumV)); - accum = vget_lane_f32(accumV2, 0) + vget_lane_f32(accumV2, 1); - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - tmp = *pA++ - *pB++; - accum += SQ(tmp); - blkCnt --; - } - arm_sqrt_f32(accum,&tmp); - return(tmp); -} - -#else -float32_t arm_euclidean_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accum=0.0f,tmp; - - while(blockSize > 0) - { - tmp = *pA++ - *pB++; - accum += SQ(tmp); - blockSize --; - } - arm_sqrt_f32(accum,&tmp); - return(tmp); -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - - -/** - * @} end of FloatDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_hamming_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_hamming_distance.c deleted file mode 100644 index e895420..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_hamming_distance.c +++ /dev/null @@ -1,68 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_hamming_distance.c - * Description: Hamming distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -extern void arm_boolean_distance_TF_FT(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools - , uint32_t *cTF - , uint32_t *cFT - ); - -/** - @addtogroup BoolDist - @{ - */ - - -/** - * @brief Hamming distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_hamming_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools) -{ - uint32_t ctf=0,cft=0; - - arm_boolean_distance_TF_FT(pA, pB, numberOfBools, &ctf, &cft); - - return(1.0*(ctf + cft) / numberOfBools); -} - - -/** - * @} end of BoolDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_jaccard_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_jaccard_distance.c deleted file mode 100644 index c708859..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_jaccard_distance.c +++ /dev/null @@ -1,70 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_jaccard_distance.c - * Description: Jaccard distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - - -extern void arm_boolean_distance_TT_TF_FT(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools - , uint32_t *cTT - , uint32_t *cTF - , uint32_t *cFT - ); - - -/** - @addtogroup BoolDist - @{ - */ - -/** - * @brief Jaccard distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_jaccard_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools) -{ - uint32_t ctt=0,ctf=0,cft=0; - - arm_boolean_distance_TT_TF_FT(pA, pB, numberOfBools, &ctt, &ctf, &cft); - - return(1.0*(ctf + cft) / (ctt + cft + ctf)); -} - - -/** - * @} end of BoolDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_jensenshannon_distance_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_jensenshannon_distance_f32.c deleted file mode 100644 index 9337817..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_jensenshannon_distance_f32.c +++ /dev/null @@ -1,244 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_jensenshannon_distance_f32.c - * Description: Jensen-Shannon distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - @addtogroup FloatDist - @{ - */ - -#if !defined(ARM_MATH_MVEF) || defined(ARM_MATH_AUTOVECTORIZE) -__STATIC_INLINE float32_t rel_entr(float32_t x, float32_t y) -{ - return (x * logf(x / y)); -} -#endif - - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -float32_t arm_jensenshannon_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - uint32_t blkCnt; - float32_t tmp; - f32x4_t a, b, t, tmpV, accumV; - - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) { - a = vld1q(pA); - b = vld1q(pB); - - t = vaddq(a, b); - t = vmulq(t, 0.5f); - - tmpV = vmulq(a, vrecip_medprec_f32(t)); - tmpV = vlogq_f32(tmpV); - accumV = vfmaq(accumV, a, tmpV); - - tmpV = vmulq_f32(b, vrecip_medprec_f32(t)); - tmpV = vlogq_f32(tmpV); - accumV = vfmaq(accumV, b, tmpV); - - pA += 4; - pB += 4; - blkCnt--; - } - - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - - a = vldrwq_z_f32(pA, p0); - b = vldrwq_z_f32(pB, p0); - - t = vaddq(a, b); - t = vmulq(t, 0.5f); - - tmpV = vmulq_f32(a, vrecip_medprec_f32(t)); - tmpV = vlogq_f32(tmpV); - accumV = vfmaq_m_f32(accumV, a, tmpV, p0); - - tmpV = vmulq_f32(b, vrecip_medprec_f32(t)); - tmpV = vlogq_f32(tmpV); - accumV = vfmaq_m_f32(accumV, b, tmpV, p0); - - } - - arm_sqrt_f32(vecAddAcrossF32Mve(accumV) / 2.0f, &tmp); - return (tmp); -} - -#else - -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - - -/** - * @brief Jensen-Shannon distance between two vectors - * - * This function is assuming that elements of second vector are > 0 - * and 0 only when the corresponding element of first vector is 0. - * Otherwise the result of the computation does not make sense - * and for speed reasons, the cases returning NaN or Infinity are not - * managed. - * - * When the function is computing x log (x / y) with x == 0 and y == 0, - * it will compute the right result (0) but a division by zero will occur - * and should be ignored in client code. - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - - -float32_t arm_jensenshannon_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t accum, result, tmp,a,b; - uint32_t blkCnt; - float32x4_t aV,bV,t, tmpV, accumV; - float32x2_t accumV2; - - accum = 0.0f; - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - aV = vld1q_f32(pA); - bV = vld1q_f32(pB); - t = vaddq_f32(aV,bV); - t = vmulq_n_f32(t, 0.5f); - - tmpV = vmulq_f32(aV, vinvq_f32(t)); - tmpV = vlogq_f32(tmpV); - accumV = vmlaq_f32(accumV, aV, tmpV); - - - tmpV = vmulq_f32(bV, vinvq_f32(t)); - tmpV = vlogq_f32(tmpV); - accumV = vmlaq_f32(accumV, bV, tmpV); - - pA += 4; - pB += 4; - - - blkCnt --; - } - - accumV2 = vpadd_f32(vget_low_f32(accumV),vget_high_f32(accumV)); - accum = vget_lane_f32(accumV2, 0) + vget_lane_f32(accumV2, 1); - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - a = *pA; - b = *pB; - tmp = (a + b) / 2.0f; - accum += rel_entr(a, tmp); - accum += rel_entr(b, tmp); - - pA++; - pB++; - - blkCnt --; - } - - - arm_sqrt_f32(accum/2.0f, &result); - return(result); - -} - -#else - - -/** - * @brief Jensen-Shannon distance between two vectors - * - * This function is assuming that elements of second vector are > 0 - * and 0 only when the corresponding element of first vector is 0. - * Otherwise the result of the computation does not make sense - * and for speed reasons, the cases returning NaN or Infinity are not - * managed. - * - * When the function is computing x log (x / y) with x == 0 and y == 0, - * it will compute the right result (0) but a division by zero will occur - * and should be ignored in client code. - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - - -float32_t arm_jensenshannon_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize) -{ - float32_t left, right,sum, result, tmp; - uint32_t i; - - left = 0.0f; - right = 0.0f; - for(i=0; i < blockSize; i++) - { - tmp = (pA[i] + pB[i]) / 2.0f; - left += rel_entr(pA[i], tmp); - right += rel_entr(pB[i], tmp); - } - - - sum = left + right; - arm_sqrt_f32(sum/2.0f, &result); - return(result); - -} - -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of FloatDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_kulsinski_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_kulsinski_distance.c deleted file mode 100644 index 9e5c819..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_kulsinski_distance.c +++ /dev/null @@ -1,71 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_kulsinski_distance.c - * Description: Kulsinski distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - - -extern void arm_boolean_distance_TT_TF_FT(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools - , uint32_t *cTT - , uint32_t *cTF - , uint32_t *cFT - ); - - -/** - @addtogroup BoolDist - @{ - */ - - -/** - * @brief Kulsinski distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_kulsinski_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools) -{ - uint32_t ctt=0,ctf=0,cft=0; - - arm_boolean_distance_TT_TF_FT(pA, pB, numberOfBools, &ctt, &ctf, &cft); - - return(1.0*(ctf + cft - ctt + numberOfBools) / (cft + ctf + numberOfBools)); -} - - -/** - * @} end of BoolDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_minkowski_distance_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_minkowski_distance_f32.c deleted file mode 100644 index ee8b82d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_minkowski_distance_f32.c +++ /dev/null @@ -1,168 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_minkowski_distance_f32.c - * Description: Minkowski distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - @addtogroup FloatDist - @{ - */ - - -/** - * @brief Minkowski distance between two vectors - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] order Distance order - * @param[in] blockSize Number of samples - * @return distance - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -float32_t arm_minkowski_distance_f32(const float32_t *pA,const float32_t *pB, int32_t order, uint32_t blockSize) -{ - uint32_t blkCnt; - f32x4_t a, b, tmpV, accumV, sumV; - - sumV = vdupq_n_f32(0.0f); - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) { - a = vld1q(pA); - b = vld1q(pB); - - tmpV = vabdq(a, b); - tmpV = vpowq_f32(tmpV, vdupq_n_f32(order)); - sumV = vaddq(sumV, tmpV); - - pA += 4; - pB += 4; - blkCnt--; - } - - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = blockSize & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - - a = vldrwq_z_f32(pA, p0); - b = vldrwq_z_f32(pB, p0); - - tmpV = vabdq(a, b); - tmpV = vpowq_f32(tmpV, vdupq_n_f32(order)); - sumV = vaddq_m(sumV, sumV, tmpV, p0); - } - - return (powf(vecAddAcrossF32Mve(sumV), (1.0f / (float32_t) order))); -} - -#else -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - -float32_t arm_minkowski_distance_f32(const float32_t *pA,const float32_t *pB, int32_t order, uint32_t blockSize) -{ - float32_t sum; - uint32_t blkCnt; - float32x4_t sumV,aV,bV, tmpV, n; - float32x2_t sumV2; - - sum = 0.0f; - sumV = vdupq_n_f32(0.0f); - n = vdupq_n_f32(order); - - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - aV = vld1q_f32(pA); - bV = vld1q_f32(pB); - pA += 4; - pB += 4; - - tmpV = vabdq_f32(aV,bV); - tmpV = vpowq_f32(tmpV,n); - sumV = vaddq_f32(sumV, tmpV); - - - blkCnt --; - } - - sumV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); - sum = vget_lane_f32(sumV2, 0) + vget_lane_f32(sumV2, 1); - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - sum += powf(fabsf(*pA++ - *pB++),order); - - blkCnt --; - } - - - return(powf(sum,(1.0f/order))); - -} - -#else - - -float32_t arm_minkowski_distance_f32(const float32_t *pA,const float32_t *pB, int32_t order, uint32_t blockSize) -{ - float32_t sum; - uint32_t i; - - sum = 0.0f; - for(i=0; i < blockSize; i++) - { - sum += powf(fabsf(pA[i] - pB[i]),order); - } - - - return(powf(sum,(1.0f/order))); - -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - - -/** - * @} end of FloatDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_rogerstanimoto_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_rogerstanimoto_distance.c deleted file mode 100644 index 6d4a4c0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_rogerstanimoto_distance.c +++ /dev/null @@ -1,73 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rogerstanimoto_distance.c - * Description: Roger Stanimoto distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - - -extern void arm_boolean_distance_TT_FF_TF_FT(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools - , uint32_t *cTT - , uint32_t *cFF - , uint32_t *cTF - , uint32_t *cFT - ); - - -/** - @addtogroup BoolDist - @{ - */ - -/** - * @brief Roger Stanimoto distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_rogerstanimoto_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools) -{ - uint32_t ctt=0,cff=0,ctf=0,cft=0,r; - - arm_boolean_distance_TT_FF_TF_FT(pA, pB, numberOfBools, &ctt,&cff, &ctf, &cft); - - r = 2*(ctf + cft); - - return(1.0*r / (r + ctt + cff)); -} - - -/** - * @} end of BoolDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_russellrao_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_russellrao_distance.c deleted file mode 100644 index 98913a5..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_russellrao_distance.c +++ /dev/null @@ -1,70 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_russellrao_distance.c - * Description: Russell-Rao distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - - -extern void arm_boolean_distance_TT(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools - , uint32_t *cTT - ); - - -/** - @addtogroup BoolDist - @{ - */ - -/** - * @brief Russell-Rao distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_russellrao_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools) -{ - uint32_t ctt=0; - - - arm_boolean_distance_TT(pA, pB, numberOfBools, &ctt); - - - return(1.0*(numberOfBools - ctt) / ((float32_t)numberOfBools)); -} - - -/** - * @} end of BoolDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_sokalmichener_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_sokalmichener_distance.c deleted file mode 100644 index 28f0696..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_sokalmichener_distance.c +++ /dev/null @@ -1,74 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sokalmichener_distance.c - * Description: Sokal-Michener distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -extern void arm_boolean_distance_TT_FF_TF_FT(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools - , uint32_t *cTT - , uint32_t *cFF - , uint32_t *cTF - , uint32_t *cFT - ); - - -/** - @addtogroup BoolDist - @{ - */ - -/** - * @brief Sokal-Michener distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_sokalmichener_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools) -{ - uint32_t ctt=0,cff=0,cft=0,ctf=0; - float32_t r,s; - - arm_boolean_distance_TT_FF_TF_FT(pA, pB, numberOfBools, &ctt, &cff, &ctf, &cft); - - r = 2.0*(ctf + cft); - s = 1.0*(cff + ctt); - - return(r / (s+r)); -} - - -/** - * @} end of BoolDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_sokalsneath_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_sokalsneath_distance.c deleted file mode 100644 index d70f958..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_sokalsneath_distance.c +++ /dev/null @@ -1,72 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sokalsneath_distance.c - * Description: Sokal-Sneath distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -extern void arm_boolean_distance_TT_TF_FT(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools - , uint32_t *cTT - , uint32_t *cTF - , uint32_t *cFT - ); - - -/** - @addtogroup BoolDist - @{ - */ - -/** - * @brief Sokal-Sneath distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_sokalsneath_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools) -{ - uint32_t ctt=0,cft=0,ctf=0; - float32_t r; - - arm_boolean_distance_TT_TF_FT(pA, pB, numberOfBools, &ctt, &ctf, &cft); - - r = 2.0*(ctf + cft); - - return(r / (r + ctt)); -} - - -/** - * @} end of BoolDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_yule_distance.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_yule_distance.c deleted file mode 100644 index 000cced..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/DistanceFunctions/arm_yule_distance.c +++ /dev/null @@ -1,72 +0,0 @@ - -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_yule_distance.c - * Description: Yule distance between two vectors - * - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -extern void arm_boolean_distance_TT_FF_TF_FT(const uint32_t *pA - , const uint32_t *pB - , uint32_t numberOfBools - , uint32_t *cTT - , uint32_t *cFF - , uint32_t *cTF - , uint32_t *cFT - ); - -/** - @addtogroup BoolDist - @{ - */ - - -/** - * @brief Yule distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_yule_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools) -{ - uint32_t ctt=0,cff=0,ctf=0,cft=0,r; - - arm_boolean_distance_TT_FF_TF_FT(pA, pB, numberOfBools, &ctt,&cff, &ctf, &cft); - - r = 2*(ctf * cft); - - return(1.0*r / (r/2.0 + ctt * cff)); -} - - -/** - * @} end of BoolDist group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/CMakeLists.txt deleted file mode 100644 index 04a0840..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPFastMath) - -include(configLib) -include(configDsp) - -file(GLOB SRC "./*_*.c") - -add_library(CMSISDSPFastMath STATIC) -configLib(CMSISDSPFastMath ${ROOT}) -configDsp(CMSISDSPFastMath ${ROOT}) - -include(interpol) -interpol(CMSISDSPFastMath) - -if (CONFIGTABLE AND ALLFAST) - target_compile_definitions(CMSISDSPFastMath PUBLIC ARM_ALL_FAST_TABLES) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_COS_F32) -target_sources(CMSISDSPFastMath PRIVATE arm_cos_f32.c) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_COS_Q15) -target_sources(CMSISDSPFastMath PRIVATE arm_cos_q15.c) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_COS_Q31) -target_sources(CMSISDSPFastMath PRIVATE arm_cos_q31.c) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_SIN_F32) -target_sources(CMSISDSPFastMath PRIVATE arm_sin_f32.c) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_SIN_Q15) -target_sources(CMSISDSPFastMath PRIVATE arm_sin_q15.c) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_SIN_Q31) -target_sources(CMSISDSPFastMath PRIVATE arm_sin_q31.c) -endif() - -target_sources(CMSISDSPFastMath PRIVATE arm_sqrt_q15.c) -target_sources(CMSISDSPFastMath PRIVATE arm_sqrt_q31.c) -target_sources(CMSISDSPFastMath PRIVATE arm_vlog_f32.c) -target_sources(CMSISDSPFastMath PRIVATE arm_vexp_f32.c) - - -### Includes -target_include_directories(CMSISDSPFastMath PUBLIC "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/FastMathFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/FastMathFunctions.c deleted file mode 100644 index 75dec1c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/FastMathFunctions.c +++ /dev/null @@ -1,38 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: FastMathFunctions.c - * Description: Combination of all fast math function source files. - * - * $Date: 16. March 2020 - * $Revision: V1.1.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_cos_f32.c" -#include "arm_cos_q15.c" -#include "arm_cos_q31.c" -#include "arm_sin_f32.c" -#include "arm_sin_q15.c" -#include "arm_sin_q31.c" -#include "arm_sqrt_q15.c" -#include "arm_sqrt_q31.c" -#include "arm_vexp_f32.c" -#include "arm_vlog_f32.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_f32.c deleted file mode 100644 index e9a7d7b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_f32.c +++ /dev/null @@ -1,121 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cos_f32.c - * Description: Fast cosine calculation for floating-point values - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 -
    -     a = Table[index];
    -     b = 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 input, output variables */ - 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 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; - - /* when "in" is exactly 1, we need to rotate the index down to 0 */ - if (index >= FAST_MATH_TABLE_SIZE) { - index = 0; - findex -= (float32_t)FAST_MATH_TABLE_SIZE; - } - - /* 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 output value */ - return (cosVal); -} - -/** - @} end of cos group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_q15.c deleted file mode 100644 index 3bb829c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_q15.c +++ /dev/null @@ -1,84 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cos_q15.c - * Description: Fast cosine calculation for Q15 values - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 input, output variables */ - int32_t index; /* Index variable */ - q15_t a, b; /* Two 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 output value */ - return (cosVal << 1); -} - -/** - @} end of cos group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_q31.c deleted file mode 100644 index 8b7ff78..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_cos_q31.c +++ /dev/null @@ -1,84 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cos_q31.c - * Description: Fast cosine calculation for Q31 values - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 input, output variables */ - int32_t index; /* Index variable */ - q31_t a, b; /* Two 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 output value */ - return (cosVal << 1); -} - -/** - @} end of cos group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_f32.c deleted file mode 100644 index 97c6902..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_f32.c +++ /dev/null @@ -1,122 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sin_f32.c - * Description: Fast sine calculation for floating-point values - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -/** - @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];
    -     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 input, output variables */ - 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 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 (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; - - /* when "in" is exactly 1, we need to rotate the index down to 0 */ - if (index >= FAST_MATH_TABLE_SIZE) { - index = 0; - findex -= (float32_t)FAST_MATH_TABLE_SIZE; - } - - /* 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 output value */ - return (sinVal); -} - -/** - @} end of sin group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_q15.c deleted file mode 100644 index 1487c21..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_q15.c +++ /dev/null @@ -1,83 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sin_q15.c - * Description: Fast sine calculation for Q15 values - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 input, output variables */ - int32_t index; /* Index variable */ - q15_t a, b; /* Two nearest output values */ - q15_t fract; /* Temporary values for fractional values */ - - - 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 */ - sinVal = (q31_t) (0x8000 - fract) * a >> 16; - sinVal = (q15_t) ((((q31_t) sinVal << 16) + ((q31_t) fract * b)) >> 16); - - /* Return output value */ - return (sinVal << 1); -} - -/** - @} end of sin group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_q31.c deleted file mode 100644 index b1f1544..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sin_q31.c +++ /dev/null @@ -1,82 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sin_q31.c - * Description: Fast sine calculation for Q31 values - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 variable */ - q31_t a, b; /* Two nearest output values */ - q31_t fract; /* Temporary values for fractional values */ - - 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 */ - sinVal = (q63_t) (0x80000000 - fract) * a >> 32; - sinVal = (q31_t) ((((q63_t) sinVal << 32) + ((q63_t) fract * b)) >> 32); - - /* Return output value */ - return (sinVal << 1); -} - -/** - @} end of sin group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sqrt_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sqrt_q15.c deleted file mode 100644 index fab0a32..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sqrt_q15.c +++ /dev/null @@ -1,144 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sqrt_q15.c - * Description: Q15 square root function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 points to square root of input value - @return execution status - - \ref ARM_MATH_SUCCESS : input value is positive - - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 - */ - -arm_status arm_sqrt_q15( - q15_t in, - q15_t * pOut) -{ - q31_t bits_val1; - q15_t number, temp1, 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) - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sqrt_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sqrt_q31.c deleted file mode 100644 index 9889b13..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_sqrt_q31.c +++ /dev/null @@ -1,144 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sqrt_q31.c - * Description: Q31 square root function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 points to square root of input value - @return execution status - - \ref ARM_MATH_SUCCESS : input value is positive - - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 - */ - -arm_status arm_sqrt_q31( - q31_t in, - q31_t * pOut) -{ - q31_t bits_val1; - q31_t number, temp1, 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_vexp_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_vexp_f32.c deleted file mode 100644 index ceb784b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_vexp_f32.c +++ /dev/null @@ -1,97 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_vlog_f32.c - * Description: Fast vectorized log - * - * $Date: 15. Octoboer 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM) || defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) -#include "arm_vec_math.h" -#endif - -void arm_vexp_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t src; - f32x4_t dst; - - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - src = vld1q(pSrc); - dst = vexpq_f32(src); - vst1q(pDst, dst); - - pSrc += 4; - pDst += 4; - /* Decrement loop counter */ - blkCnt--; - } - - blkCnt = blockSize & 3; -#else -#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t src; - f32x4_t dst; - - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - src = vld1q_f32(pSrc); - dst = vexpq_f32(src); - vst1q_f32(pDst, dst); - - pSrc += 4; - pDst += 4; - /* Decrement loop counter */ - blkCnt--; - } - - blkCnt = blockSize & 3; -#else - blkCnt = blockSize; -#endif -#endif - - while (blkCnt > 0U) - { - /* C = log(A) */ - - /* Calculate log and store result in destination buffer. */ - *pDst++ = expf(*pSrc++); - - /* Decrement loop counter */ - blkCnt--; - } -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_vlog_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_vlog_f32.c deleted file mode 100644 index 0317bd3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FastMathFunctions/arm_vlog_f32.c +++ /dev/null @@ -1,97 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_vlog_f32.c - * Description: Fast vectorized log - * - * $Date: 15. Octoboer 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM) || defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) -#include "arm_vec_math.h" -#endif - -void arm_vlog_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t src; - f32x4_t dst; - - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - src = vld1q(pSrc); - dst = vlogq_f32(src); - vst1q(pDst, dst); - - pSrc += 4; - pDst += 4; - /* Decrement loop counter */ - blkCnt--; - } - - blkCnt = blockSize & 3; -#else -#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) - f32x4_t src; - f32x4_t dst; - - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - src = vld1q_f32(pSrc); - dst = vlogq_f32(src); - vst1q_f32(pDst, dst); - - pSrc += 4; - pDst += 4; - /* Decrement loop counter */ - blkCnt--; - } - - blkCnt = blockSize & 3; -#else - blkCnt = blockSize; -#endif -#endif - - while (blkCnt > 0U) - { - /* C = log(A) */ - - /* Calculate log and store result in destination buffer. */ - *pDst++ = logf(*pSrc++); - - /* Decrement loop counter */ - blkCnt--; - } -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/CMakeLists.txt deleted file mode 100644 index d5d0acb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/CMakeLists.txt +++ /dev/null @@ -1,131 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPFiltering) - -include(configLib) -include(configDsp) - -add_library(CMSISDSPFiltering STATIC) - -include(interpol) -interpol(CMSISDSPFiltering) - -configLib(CMSISDSPFiltering ${ROOT}) -configDsp(CMSISDSPFiltering ${ROOT}) - -if (CONFIGTABLE AND ALLFAST) -target_compile_definitions(CMSISDSPFiltering PUBLIC ARM_ALL_FAST_TABLES) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_LMS_NORM_Q31) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_norm_init_q31.c) -endif() - -if (NOT CONFIGTABLE OR ALLFAST OR ARM_LMS_NORM_Q15) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_norm_init_q15.c) -endif() - -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_32x64_init_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_32x64_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_fast_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_fast_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_init_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_init_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df1_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df2T_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df2T_f64.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df2T_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_df2T_init_f64.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_stereo_df2T_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_biquad_cascade_stereo_df2T_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_fast_opt_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_fast_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_fast_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_opt_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_opt_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_partial_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_partial_fast_opt_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_partial_fast_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_partial_fast_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_partial_opt_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_partial_opt_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_partial_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_partial_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_partial_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_conv_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_correlate_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_correlate_fast_opt_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_correlate_fast_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_correlate_fast_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_correlate_opt_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_correlate_opt_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_correlate_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_correlate_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_correlate_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_decimate_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_decimate_fast_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_decimate_fast_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_decimate_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_decimate_init_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_decimate_init_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_decimate_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_decimate_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_fast_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_fast_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_init_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_init_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_init_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_interpolate_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_interpolate_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_interpolate_init_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_interpolate_init_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_interpolate_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_interpolate_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_lattice_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_lattice_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_lattice_init_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_lattice_init_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_lattice_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_lattice_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_sparse_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_sparse_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_sparse_init_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_sparse_init_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_sparse_init_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_sparse_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_sparse_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_fir_sparse_q7.c) -target_sources(CMSISDSPFiltering PRIVATE arm_iir_lattice_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_iir_lattice_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_iir_lattice_init_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_iir_lattice_init_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_iir_lattice_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_iir_lattice_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_init_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_init_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_norm_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_norm_init_f32.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_norm_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_norm_q31.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_q15.c) -target_sources(CMSISDSPFiltering PRIVATE arm_lms_q31.c) - - -### Includes -target_include_directories(CMSISDSPFiltering PUBLIC "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/FilteringFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/FilteringFunctions.c deleted file mode 100644 index 7ce0cdb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/FilteringFunctions.c +++ /dev/null @@ -1,127 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: FilteringFunctions.c - * Description: Combination of all filtering function source files. - * - * $Date: 18. March 2019 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_biquad_cascade_df1_32x64_init_q31.c" -#include "arm_biquad_cascade_df1_32x64_q31.c" -#include "arm_biquad_cascade_df1_f32.c" -#include "arm_biquad_cascade_df1_fast_q15.c" -#include "arm_biquad_cascade_df1_fast_q31.c" -#include "arm_biquad_cascade_df1_init_f32.c" -#include "arm_biquad_cascade_df1_init_q15.c" -#include "arm_biquad_cascade_df1_init_q31.c" -#include "arm_biquad_cascade_df1_q15.c" -#include "arm_biquad_cascade_df1_q31.c" -#include "arm_biquad_cascade_df2T_f32.c" -#include "arm_biquad_cascade_df2T_f64.c" -#include "arm_biquad_cascade_df2T_init_f32.c" -#include "arm_biquad_cascade_df2T_init_f64.c" -#include "arm_biquad_cascade_stereo_df2T_f32.c" -#include "arm_biquad_cascade_stereo_df2T_init_f32.c" -#include "arm_conv_f32.c" -#include "arm_conv_fast_opt_q15.c" -#include "arm_conv_fast_q15.c" -#include "arm_conv_fast_q31.c" -#include "arm_conv_opt_q15.c" -#include "arm_conv_opt_q7.c" -#include "arm_conv_partial_f32.c" -#include "arm_conv_partial_fast_opt_q15.c" -#include "arm_conv_partial_fast_q15.c" -#include "arm_conv_partial_fast_q31.c" -#include "arm_conv_partial_opt_q15.c" -#include "arm_conv_partial_opt_q7.c" -#include "arm_conv_partial_q15.c" -#include "arm_conv_partial_q31.c" -#include "arm_conv_partial_q7.c" -#include "arm_conv_q15.c" -#include "arm_conv_q31.c" -#include "arm_conv_q7.c" -#include "arm_correlate_f32.c" -#include "arm_correlate_fast_opt_q15.c" -#include "arm_correlate_fast_q15.c" -#include "arm_correlate_fast_q31.c" -#include "arm_correlate_opt_q15.c" -#include "arm_correlate_opt_q7.c" -#include "arm_correlate_q15.c" -#include "arm_correlate_q31.c" -#include "arm_correlate_q7.c" -#include "arm_fir_decimate_f32.c" -#include "arm_fir_decimate_fast_q15.c" -#include "arm_fir_decimate_fast_q31.c" -#include "arm_fir_decimate_init_f32.c" -#include "arm_fir_decimate_init_q15.c" -#include "arm_fir_decimate_init_q31.c" -#include "arm_fir_decimate_q15.c" -#include "arm_fir_decimate_q31.c" -#include "arm_fir_f32.c" -#include "arm_fir_fast_q15.c" -#include "arm_fir_fast_q31.c" -#include "arm_fir_init_f32.c" -#include "arm_fir_init_q15.c" -#include "arm_fir_init_q31.c" -#include "arm_fir_init_q7.c" -#include "arm_fir_interpolate_f32.c" -#include "arm_fir_interpolate_init_f32.c" -#include "arm_fir_interpolate_init_q15.c" -#include "arm_fir_interpolate_init_q31.c" -#include "arm_fir_interpolate_q15.c" -#include "arm_fir_interpolate_q31.c" -#include "arm_fir_lattice_f32.c" -#include "arm_fir_lattice_init_f32.c" -#include "arm_fir_lattice_init_q15.c" -#include "arm_fir_lattice_init_q31.c" -#include "arm_fir_lattice_q15.c" -#include "arm_fir_lattice_q31.c" -#include "arm_fir_q15.c" -#include "arm_fir_q31.c" -#include "arm_fir_q7.c" -#include "arm_fir_sparse_f32.c" -#include "arm_fir_sparse_init_f32.c" -#include "arm_fir_sparse_init_q15.c" -#include "arm_fir_sparse_init_q31.c" -#include "arm_fir_sparse_init_q7.c" -#include "arm_fir_sparse_q15.c" -#include "arm_fir_sparse_q31.c" -#include "arm_fir_sparse_q7.c" -#include "arm_iir_lattice_f32.c" -#include "arm_iir_lattice_init_f32.c" -#include "arm_iir_lattice_init_q15.c" -#include "arm_iir_lattice_init_q31.c" -#include "arm_iir_lattice_q15.c" -#include "arm_iir_lattice_q31.c" -#include "arm_lms_f32.c" -#include "arm_lms_init_f32.c" -#include "arm_lms_init_q15.c" -#include "arm_lms_init_q31.c" -#include "arm_lms_norm_f32.c" -#include "arm_lms_norm_init_f32.c" -#include "arm_lms_norm_init_q15.c" -#include "arm_lms_norm_init_q31.c" -#include "arm_lms_norm_q15.c" -#include "arm_lms_norm_q31.c" -#include "arm_lms_q15.c" -#include "arm_lms_q31.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c deleted file mode 100644 index ac2313f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c +++ /dev/null @@ -1,94 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_32x64_init_q31.c - * Description: High precision Q31 Biquad cascade filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup BiquadCascadeDF1_32x64 - @{ - */ - -/** - @brief Initialization function for the Q31 Biquad cascade 32x64 filter. - @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 - - @par Coefficient and State Ordering - 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c deleted file mode 100644 index 2b70c2a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c +++ /dev/null @@ -1,694 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_32x64_q31.c - * Description: High precision Q31 Biquad cascade filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - @{ - */ - -/** - @brief Processing function for the Q31 Biquad cascade 32x64 filter. - @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 Details - 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. - - \ref arm_biquad_cascade_df1_q31() implements a Biquad cascade with 32-bit coefficients and state variables with a Q63 accumulator. - - \ref arm_biquad_cascade_df1_fast_q31() implements a Biquad cascade with 32-bit coefficients and state variables with a Q31 accumulator. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" -void arm_biquad_cas_df1_32x64_q31( - const arm_biquad_cas_df1_32x64_ins_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - const q31_t *pIn = pSrc; /* input pointer initialization */ - q31_t *pOut = pDst; /* output pointer initialization */ - q63_t *pState = S->pState; /* state pointer initialization */ - const q31_t *pCoeffs = S->pCoeffs; /* coeff pointer initialization */ - 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 */ - int32_t shift = (int32_t) S->postShift + 1; /* Shift to be applied to the output */ - uint32_t sample, stage = S->numStages; /* loop counters */ - q31x4_t vecCoef, vecIn; - q63_t acc; - - do - { - uint32_t i; - /* - * Reading the coefficients - */ - b0 = *pCoeffs++; - b1 = *pCoeffs++; - b2 = *pCoeffs++; - a1 = *pCoeffs++; - a2 = *pCoeffs++; - - vecCoef[0] = 0; - vecCoef[1] = b2; - vecCoef[2] = b1; - vecCoef[3] = b0; - /* - * Reading the state values - */ - Xn1 = pState[0]; - Xn2 = pState[1]; - Yn1 = pState[2]; - Yn2 = pState[3]; - - /* - * append history with initial samples - */ - q31_t hist[6]; - hist[0] = 0; - hist[1] = Xn2; - hist[2] = Xn1; - hist[3] = pIn[0]; - hist[4] = pIn[1]; - hist[5] = pIn[2]; - - const q31_t *pIn1 = hist; - q31x4_t vecIn0 = *(q31x4_t *) & pIn[0]; - q31x4_t vecIn1 = *(q31x4_t *) & pIn[1]; - q31x4_t vecIn2 = *(q31x4_t *) & pIn[2]; - - i = 3; - do - { - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - vecIn = vld1q(pIn1); - pIn1 += 1; - Yn1 = vmlaldavaq(Yn1, vecIn, vecCoef); - Yn1 = asrl(Yn1, -shift); - /* - * Store the output in the destination buffer in 1.31 format. - */ - *pOut++ = (q31_t) (Yn1 >> 32); - } - while (--i); - - sample = blockSize - 3; - pIn1 = pIn + 3; - - i = sample / 4; - while (i > 0U) - { - - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn0, vecCoef); - vecIn = vld1q(pIn1); - pIn1 += 1; - Yn1 = asrl(Yn1, -shift); - /* - * Store the output in the destination buffer in 1.31 format. - */ - *pOut++ = (q31_t) (Yn1 >> 32); - - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn1, vecCoef); - vecIn0 = vld1q(pIn1); - pIn1 += 1; - Yn1 = asrl(Yn1, -shift); - *pOut++ = (q31_t) (Yn1 >> 32); - - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn2, vecCoef); - vecIn1 = vld1q(pIn1); - pIn1 += 1; - Yn1 = asrl(Yn1, -shift); - *pOut++ = (q31_t) (Yn1 >> 32); - - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn, vecCoef); - vecIn2 = vld1q(pIn1); - pIn1 += 1; - Yn1 = asrl(Yn1, -shift); - *pOut++ = (q31_t) (Yn1 >> 32); - /* - * Decrement the loop counter - */ - i--; - } - /* - * save input state - */ - Xn2 = vecIn[2]; - Xn1 = vecIn[3]; - - int loopRemainder = blockSize - 3 - 4 * ((blockSize - 3) / 4); - if (loopRemainder == 1) - { - /* - * remainder - */ - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn0, vecCoef); - Yn1 = asrl(Yn1, -shift); - *pOut++ = (q31_t) (Yn1 >> 32); - /* - * save input state - */ - Xn2 = vecIn0[2]; - Xn1 = vecIn0[3]; - - } - else if (loopRemainder == 2) - { - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn0, vecCoef); - Yn1 = asrl(Yn1, -shift); - *pOut++ = (q31_t) (Yn1 >> 32); - - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn1, vecCoef); - Yn1 = asrl(Yn1, -shift); - *pOut++ = (q31_t) (Yn1 >> 32); - /* - * save input state - */ - Xn2 = vecIn1[2]; - Xn1 = vecIn1[3]; - - } - else if (loopRemainder == 3) - { - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn0, vecCoef); - Yn1 = asrl(Yn1, -shift); - *pOut++ = (q31_t) (Yn1 >> 32); - - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn1, vecCoef); - Yn1 = asrl(Yn1, -shift); - *pOut++ = (q31_t) (Yn1 >> 32); - - acc = mult32x64(Yn1, a1); - acc += mult32x64(Yn2, a2); - Yn2 = Yn1; - Yn1 = acc; - Yn1 = vmlaldavaq(Yn1, vecIn2, vecCoef); - Yn1 = asrl(Yn1, -shift); - *pOut++ = (q31_t) (Yn1 >> 32); - /* - * save input state - */ - Xn2 = vecIn2[2]; - Xn1 = vecIn2[3]; - - } - - /* - * 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); -} -#else -void arm_biquad_cas_df1_32x64_q31( - const arm_biquad_cas_df1_32x64_ins_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - const q31_t *pIn = pSrc; /* input pointer initialization */ - q31_t *pOut = pDst; /* output pointer initialization */ - q63_t *pState = S->pState; /* state pointer initialization */ - const 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 */ - - 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]; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Apply loop unrolling and compute 4 output values simultaneously. */ - /* Variable acc hold output value that is being computed and stored in destination buffer - * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] - */ - - /* Loop unrolling: Compute 4 outputs at a time */ - sample = blockSize >> 2U; - - 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 loop counter */ - sample--; - } - - /* Loop unrolling: Compute remaining outputs */ - sample = blockSize & 0x3U; - -#else - - /* Initialize blkCnt with number of samples */ - sample = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 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 /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BiquadCascadeDF1_32x64 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c deleted file mode 100644 index 58c4568..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c +++ /dev/null @@ -1,684 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_f32.c - * Description: Processing function for the floating-point Biquad cascade DirectFormI(DF1) filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 available. - - 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 Function - 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 - @{ - */ - -/** - @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 - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -#include "arm_helium_utils.h" -void arm_biquad_cascade_df1_f32( - const arm_biquad_casd_df1_inst_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* source pointer */ - float32_t *pOut = pDst; /* destination pointer */ - float32_t *pState = S->pState; /* pState pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* coefficient pointer */ - float32_t Xn1, Xn2, Yn1, Yn2; /* Filter pState variables */ - float32_t lastX, lastY; /* X,Y history for tail handling */ - float32_t X0, X1, X2, X3; /* temporary input */ - f32x4_t coeffs; - f32x4_t accVec; /* accumultor vector */ - uint32_t sample, stage = S->numStages; /* loop counters */ - - do - { - /* - * Reading the pState values - */ - Xn1 = pState[0]; - Xn2 = pState[1]; - Yn1 = pState[2]; - Yn2 = pState[3]; - - sample = blockSize >> 2U; - - /* - * First part of the processing with loop unrolling. Compute 4 outputs at a time. - * second loop below computes the remaining 1 to 3 samples. - */ - while (sample > 0U) - { - X0 = *pIn++; - X1 = *pIn++; - X2 = *pIn++; - X3 = *pIn++; - - coeffs = vld1q(pCoeffs); - accVec = vmulq(coeffs, X3); - - coeffs = vld1q(&pCoeffs[4]); - accVec = vfmaq(accVec, coeffs, X2); - - coeffs = vld1q(&pCoeffs[8]); - accVec = vfmaq(accVec, coeffs, X1); - - coeffs = vld1q(&pCoeffs[12]); - accVec = vfmaq(accVec, coeffs, X0); - - coeffs = vld1q(&pCoeffs[16]); - accVec = vfmaq(accVec, coeffs, Xn1); - - coeffs = vld1q(&pCoeffs[20]); - accVec = vfmaq(accVec, coeffs, Xn2); - - coeffs = vld1q(&pCoeffs[24]); - accVec = vfmaq(accVec, coeffs, Yn1); - - coeffs = vld1q(&pCoeffs[28]); - accVec = vfmaq(accVec, coeffs, Yn2); - /* - * Store the result in the accumulator in the destination buffer. - */ - vst1q(pOut, accVec); - pOut += 4; - - /* - * update recurrence - */ - Xn1 = X3; - Xn2 = X2; - Yn1 = vgetq_lane(accVec, 3); - Yn2 = vgetq_lane(accVec, 2); - /* - * decrement the loop counter - */ - sample--; - } - - /* - * If the blockSize is not a multiple of 4, - * compute any remaining output samples here. - */ - sample = blockSize & 0x3U; - if (sample) - { - /* save previous X, Y for modulo 1 length case */ - lastX = X3; - lastY = Yn1; - - X0 = *pIn++; - X1 = *pIn++; - X2 = *pIn++; - X3 = *pIn++; - - coeffs = vld1q(pCoeffs); - accVec = vmulq(coeffs, X3); - - coeffs = vld1q(&pCoeffs[4]); - accVec = vfmaq(accVec, coeffs, X2); - - coeffs = vld1q(&pCoeffs[8]); - accVec = vfmaq(accVec, coeffs, X1); - - coeffs = vld1q(&pCoeffs[12]); - accVec = vfmaq(accVec, coeffs, X0); - - coeffs = vld1q(&pCoeffs[16]); - accVec = vfmaq(accVec, coeffs, Xn1); - - coeffs = vld1q(&pCoeffs[20]); - accVec = vfmaq(accVec, coeffs, Xn2); - - coeffs = vld1q(&pCoeffs[24]); - accVec = vfmaq(accVec, coeffs, Yn1); - - coeffs = vld1q(&pCoeffs[28]); - accVec = vfmaq(accVec, coeffs, Yn2); - - if (sample == 1) - { - *pOut++ = vgetq_lane(accVec, 0); - Xn1 = X0; - Xn2 = lastX; - Yn1 = vgetq_lane(accVec, 0); - Yn2 = lastY; - } - else if (sample == 2) - { - *pOut++ = vgetq_lane(accVec, 0); - *pOut++ = vgetq_lane(accVec, 1); - Xn1 = X1; - Xn2 = X0; - Yn1 = vgetq_lane(accVec, 1); - Yn2 = vgetq_lane(accVec, 0); - } - else - { - *pOut++ = vgetq_lane(accVec, 0); - *pOut++ = vgetq_lane(accVec, 1); - *pOut++ = vgetq_lane(accVec, 2); - Xn1 = X2; - Xn2 = X1; - Yn1 = vgetq_lane(accVec, 2); - Yn2 = vgetq_lane(accVec, 1); - } - } - /* - * Store the updated state variables back into the pState array - */ - *pState++ = Xn1; - *pState++ = Xn2; - *pState++ = Yn1; - *pState++ = Yn2; - - pCoeffs += sizeof(arm_biquad_mod_coef_f32) / sizeof(float32_t); - /* - * 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 -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_biquad_cascade_df1_f32( - const arm_biquad_casd_df1_inst_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - - const float32_t *pIn = pSrc; /* source pointer */ - float32_t *pOut = pDst; /* destination pointer */ - float32_t *pState = S->pState; /* pState pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* coefficient pointer */ - float32_t acc; /* Simulates the accumulator */ - - uint32_t sample, stage = S->numStages; /* loop counters */ - - float32x4_t Xn; - float32x2_t Yn; - float32x2_t a; - float32x4_t b; - - float32x4_t x,tmp; - float32x2_t t; - float32x2x2_t y; - - float32_t Xns; - - while (stage > 0U) - { - /* Reading the coefficients */ - Xn = vdupq_n_f32(0.0f); - - Xn = vsetq_lane_f32(pState[0],Xn,2); - Xn = vsetq_lane_f32(pState[1],Xn,3); - Yn = vset_lane_f32(pState[2],Yn,0); - Yn = vset_lane_f32(pState[3],Yn,1); - - b = vld1q_f32(pCoeffs); - b = vrev64q_f32(b); - b = vcombine_f32(vget_high_f32(b), vget_low_f32(b)); - - a = vld1_f32(pCoeffs + 3); - a = vrev64_f32(a); - b = vsetq_lane_f32(0.0f,b,0); - pCoeffs += 5; - - /* Reading the pState values */ - - /* 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] - */ - - /* 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. */ - sample = blockSize >> 2U; - - while (sample > 0U) - { - /* Read the first 4 inputs */ - x = vld1q_f32(pIn); - - pIn += 4; - - tmp = vextq_f32(Xn, x, 1); - t = vmul_f32(vget_high_f32(b), vget_high_f32(tmp)); - t = vmla_f32(t, vget_low_f32(b), vget_low_f32(tmp)); - t = vmla_f32(t, a, Yn); - t = vpadd_f32(t, t); - Yn = vext_f32(Yn, t, 1); - - tmp = vextq_f32(Xn, x, 2); - t = vmul_f32(vget_high_f32(b), vget_high_f32(tmp)); - t = vmla_f32(t, vget_low_f32(b), vget_low_f32(tmp)); - t = vmla_f32(t, a, Yn); - t = vpadd_f32(t, t); - Yn = vext_f32(Yn, t, 1); - - y.val[0] = Yn; - - tmp = vextq_f32(Xn, x, 3); - t = vmul_f32(vget_high_f32(b), vget_high_f32(tmp)); - t = vmla_f32(t, vget_low_f32(b), vget_low_f32(tmp)); - t = vmla_f32(t, a, Yn); - t = vpadd_f32(t, t); - Yn = vext_f32(Yn, t, 1); - - Xn = x; - t = vmul_f32(vget_high_f32(b), vget_high_f32(Xn)); - t = vmla_f32(t, vget_low_f32(b), vget_low_f32(Xn)); - t = vmla_f32(t, a, Yn); - t = vpadd_f32(t, t); - Yn = vext_f32(Yn, t, 1); - - y.val[1] = Yn; - - tmp = vcombine_f32(y.val[0], y.val[1]); - - /* Store the 4 outputs and increment the pointer */ - vst1q_f32(pOut, tmp); - pOut += 4; - - /* Decrement the loop counter */ - sample--; - } - - - /* If the block size 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 */ - Xns = *pIn++; - - /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ - acc = (vgetq_lane_f32(b, 1) * vgetq_lane_f32(Xn, 2)) - + (vgetq_lane_f32(b, 2) * vgetq_lane_f32(Xn, 3)) - + (vgetq_lane_f32(b, 3) * Xns) - + (vget_lane_f32(a, 0) * vget_lane_f32(Yn, 0)) - + (vget_lane_f32(a, 1) * vget_lane_f32(Yn, 1)); - - /* 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 */ - Xn = vsetq_lane_f32(vgetq_lane_f32(Xn, 3),Xn,2); - Xn = vsetq_lane_f32(Xns,Xn,3); - Yn = vset_lane_f32(vget_lane_f32(Yn, 1),Yn,0); - Yn = vset_lane_f32(acc,Yn,1); - - /* Decrement the loop counter */ - sample--; - - } - - vst1q_f32(pState,vcombine_f32((vget_high_f32(Xn)),(Yn))); - pState += 4; - /* Store the updated state variables back into the pState array */ - - /* 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--; - } -} - -#else -void arm_biquad_cascade_df1_f32( - const arm_biquad_casd_df1_inst_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* Source pointer */ - float32_t *pOut = pDst; /* Destination pointer */ - float32_t *pState = S->pState; /* pState pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t acc; /* 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 */ - - 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]; - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Apply loop unrolling and compute 4 output values simultaneously. */ - /* 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] - */ - - /* Loop unrolling: Compute 4 outputs at a time */ - sample = blockSize >> 2U; - - 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 output in 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 output in 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 output in 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 output in 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 loop counter */ - sample--; - } - - /* Loop unrolling: Compute remaining outputs */ - sample = blockSize & 0x3U; - -#else - - /* Initialize blkCnt with number of samples */ - sample = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 output in 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 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 output pointer */ - pOut = pDst; - - /* decrement loop counter */ - stage--; - - } while (stage > 0U); - -} - -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BiquadCascadeDF1 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c deleted file mode 100644 index 1a568d7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c +++ /dev/null @@ -1,250 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_fast_q15.c - * Description: Fast processing function for the Q15 Biquad cascade filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup BiquadCascadeDF1 - @{ - */ - -/** - @brief Processing function for the Q15 Biquad cascade filter (fast variant). - @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 - - @par Scaling and Overflow Behavior - 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. - @remark - Refer to \ref 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 \ref 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, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - const q15_t *pIn = pSrc; /* Source pointer */ - q15_t *pOut = pDst; /* Destination pointer */ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t acc; /* Accumulator */ - 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 */ - int32_t shift = (int32_t) (15 - S->postShift); /* Post shift */ - uint32_t sample, stage = S->numStages; /* Loop counters */ - - do - { - /* Read the b0 and 0 coefficients using SIMD */ - b0 = read_q15x2_ia ((q15_t **) &pCoeffs); - - /* Read the b1 and b2 coefficients using SIMD */ - b1 = read_q15x2_ia ((q15_t **) &pCoeffs); - - /* Read the a1 and a2 coefficients using SIMD */ - a1 = read_q15x2_ia ((q15_t **) &pCoeffs); - - /* Read the input state values from the state buffer: x[n-1], x[n-2] */ - state_in = read_q15x2_ia (&pState); - - /* Read the output state values from the state buffer: y[n-1], y[n-2] */ - state_out = read_q15x2_da (&pState); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Apply loop unrolling and compute 2 output values simultaneously. */ - /* 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] - */ - - /* Loop unrolling: Compute 2 outputs at a time */ - sample = blockSize >> 1U; - - while (sample > 0U) - { - - /* Read the input */ - in = read_q15x2_ia ((q15_t **) &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 - write_q15x2_ia (&pOut, __PKHBT(state_out, out, 16)); -#else - write_q15x2_ia (&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 loop counter */ - sample--; - } - - /* Loop unrolling: Compute remaining outputs */ - sample = (blockSize & 0x1U); - -#else - - /* Initialize blkCnt with number of samples */ - sample = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (sample > 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 */ - - /* decrement loop counter */ - sample--; - } - - /* 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 */ - write_q15x2_ia(&pState, state_in); - write_q15x2_ia(&pState, state_out); - - /* Decrement loop counter */ - stage--; - - } while (stage > 0U); -} - -/** - @} end of BiquadCascadeDF1 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c deleted file mode 100644 index 586296b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c +++ /dev/null @@ -1,296 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_fast_q31.c - * Description: Processing function for the Q31 Fast Biquad cascade DirectFormI(DF1) filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup BiquadCascadeDF1 - @{ - */ - -/** - @brief Processing function for the Q31 Biquad cascade filter (fast variant). - @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 - - @par Scaling and Overflow Behavior - 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. - @remark - Refer to \ref 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 \ref 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, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - const q31_t *pIn = pSrc; /* Source pointer */ - q31_t *pOut = pDst; /* Destination pointer */ - q31_t *pState = S->pState; /* pState pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t acc = 0; /* Accumulator */ - q31_t b0, b1, b2, a1, a2; /* Filter coefficients */ - q31_t Xn1, Xn2, Yn1, Yn2; /* Filter pState variables */ - 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 pState values */ - Xn1 = pState[0]; - Xn2 = pState[1]; - Yn1 = pState[2]; - Yn2 = pState[3]; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Apply loop unrolling and compute 4 output values simultaneously. */ - /* 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] - */ - - /* Loop unrolling: Compute 4 outputs at a time */ - sample = blockSize >> 2U; - - 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 loop counter */ - sample--; - } - - /* Loop unrolling: Compute remaining outputs */ - sample = (blockSize & 0x3U); - -#else - - /* Initialize blkCnt with number of samples */ - sample = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c deleted file mode 100644 index f6610b5..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c +++ /dev/null @@ -1,146 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_init_f32.c - * Description: Floating-point Biquad cascade DirectFormI(DF1) filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup BiquadCascadeDF1 - @{ - */ - -/** - @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. - @return none - - @par Coefficient and State Ordering - 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. - - @par For MVE code, an additional buffer of modified coefficients is required. - Its size is numStages and each element of this buffer has type arm_biquad_mod_coef_f32. - So, its total size is 32*numStages float32_t elements. - - The initialization function which must be used is arm_biquad_cascade_df1_mve_init_f32. - */ - - -void arm_biquad_cascade_df1_init_f32( - arm_biquad_casd_df1_inst_f32 * S, - uint8_t numStages, - const 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; -} - - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -static void generateCoefsFastBiquadF32(float32_t b0, float32_t b1, float32_t b2, float32_t a1, float32_t a2, - arm_biquad_mod_coef_f32 * newCoef) -{ - float32_t coeffs[4][8] = { - {0, 0, 0, b0, b1, b2, a1, a2}, - {0, 0, b0, b1, b2, 0, a2, 0}, - {0, b0, b1, b2, 0, 0, 0, 0}, - {b0, b1, b2, 0, 0, 0, 0, 0}, - }; - - for (int i = 0; i < 8; i++) - { - coeffs[1][i] += a1 * coeffs[0][i]; - coeffs[2][i] += a1 * coeffs[1][i] + a2 * coeffs[0][i]; - coeffs[3][i] += a1 * coeffs[2][i] + a2 * coeffs[1][i]; - - /* - * transpose - */ - newCoef->coeffs[i][0] = (float32_t) coeffs[0][i]; - newCoef->coeffs[i][1] = (float32_t) coeffs[1][i]; - newCoef->coeffs[i][2] = (float32_t) coeffs[2][i]; - newCoef->coeffs[i][3] = (float32_t) coeffs[3][i]; - } -} - -void arm_biquad_cascade_df1_mve_init_f32( - arm_biquad_casd_df1_inst_f32 * S, - uint8_t numStages, - const float32_t * pCoeffs, - arm_biquad_mod_coef_f32 * pCoeffsMod, - float32_t * pState) -{ - arm_biquad_cascade_df1_init_f32(S, numStages, (float32_t *)pCoeffsMod, pState); - - /* Generate SIMD friendly modified coefs */ - for (int i = 0; i < numStages; i++) - { - generateCoefsFastBiquadF32(pCoeffs[0], pCoeffs[1], pCoeffs[2], pCoeffs[3], pCoeffs[4], pCoeffsMod); - pCoeffs += 5; - pCoeffsMod++; - } -} -#endif - -/** - @} end of BiquadCascadeDF1 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c deleted file mode 100644 index c2e542c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c +++ /dev/null @@ -1,96 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_init_q15.c - * Description: Q15 Biquad cascade DirectFormI(DF1) filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup BiquadCascadeDF1 - @{ - */ - -/** - @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 accumulator result. Varies according to the coefficients format - @return none - - @par Coefficient and State Ordering - The coefficients are stored in the array pCoeffs in the following order: -
    -      {b10, 0, b11, b12, a11, a12, b20, 0, 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 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c deleted file mode 100644 index 8637889..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c +++ /dev/null @@ -1,95 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_init_q31.c - * Description: Q31 Biquad cascade DirectFormI(DF1) filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup BiquadCascadeDF1 - @{ - */ - -/** - @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 after the accumulator. Varies according to the coefficients format - @return none - - @par Coefficient and State Ordering - 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 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c deleted file mode 100644 index 4149aac..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c +++ /dev/null @@ -1,618 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_q15.c - * Description: Processing function for the Q15 Biquad cascade DirectFormI(DF1) filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - @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. - 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. - @remark - Refer to \ref arm_biquad_cascade_df1_fast_q15() for a faster but less precise implementation of this filter. - */ - -#if defined(ARM_MATH_MVEI) - -void arm_biquad_cascade_df1_q15( - const arm_biquad_casd_df1_inst_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - const q15_t *pIn = pSrc; /* input pointer initialization */ - q15_t *pOut = pDst; /* output pointer initialization */ - int shift; - uint32_t sample, stages = S->numStages; /* loop counters */ - int postShift = S->postShift; - q15x8_t bCoeffs0, bCoeffs1, bCoeffs2, bCoeffs3; /* Coefficients vector */ - q15_t *pState = S->pState; /* pState pointer initialization */ - q15x8_t inVec0; - int64_t acc; - const q15_t *pCoeffs = S->pCoeffs; /* coeff pointer initialization */ - q31_t out, out1; - - shift = (15 - postShift) - 32; - - do { - q15_t a2 = pCoeffs[5]; - q15_t a1 = pCoeffs[4]; - - bCoeffs0 = vdupq_n_s16(0); - bCoeffs0[0] = pCoeffs[3]; // b2 - bCoeffs0[1] = pCoeffs[2]; // b1 - bCoeffs0[2] = pCoeffs[0]; // b0 - - uint32_t zero = 0; - bCoeffs1 = bCoeffs0; - bCoeffs1 = vshlcq_s16(bCoeffs1, &zero, 16); - - bCoeffs2 = bCoeffs1; - bCoeffs2 = vshlcq_s16(bCoeffs2, &zero, 16); - - bCoeffs3 = bCoeffs2; - bCoeffs3 = vshlcq_s16(bCoeffs3, &zero, 16); - - bCoeffs0[6] = a2; - bCoeffs0[7] = a1; - bCoeffs1[7] = a2; - bCoeffs1[6] = a1; - - bCoeffs2 = - vsetq_lane_s32(vgetq_lane_s32((q31x4_t) bCoeffs0, 3), (q31x4_t) bCoeffs2, 3); - bCoeffs3 = - vsetq_lane_s32(vgetq_lane_s32((q31x4_t) bCoeffs1, 3), (q31x4_t) bCoeffs3, 3); - - - /* 2 first elements are garbage, will be updated with history */ - inVec0 = vld1q(pIn - 2); - pIn += 2; - - inVec0[0] = pState[1]; - inVec0[1] = pState[0]; - inVec0[6] = pState[3]; - inVec0[7] = pState[2]; - - acc = vmlaldavq(bCoeffs0, inVec0); - acc = sqrshrl_sat48(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - - inVec0[6] = out1; - acc = vmlaldavq(bCoeffs1, inVec0); - acc = sqrshrl_sat48(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - inVec0[7] = out; - *pOut++ = (q15_t) out1; - *pOut++ = (q15_t) out; - - acc = vmlaldavq(bCoeffs2, inVec0); - acc = sqrshrl_sat48(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - - - inVec0[6] = out1; - acc = vmlaldavq(bCoeffs3, inVec0); - acc = sqrshrl_sat48(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - /* - * main loop - */ - sample = (blockSize - 4) >> 2U; - /* preload (efficient scheduling) */ - inVec0 = vld1q(pIn); - pIn += 4; - - /* - * Compute 4 outputs at a time. - */ - while (sample > 0U) { - - inVec0[6] = out1; - inVec0[7] = out; - - /* store */ - *pOut++ = (q15_t) out1; - *pOut++ = (q15_t) out; - - /* - * in { x0 x1 x2 x3 x4 x5 yn2 yn1 } - * x - * bCoeffs0 { b2 b1 b0 0 0 0 a2 a1 } - * - */ - acc = vmlaldavq(bCoeffs0, inVec0); - /* shift + saturate to 16 bit */ - acc = sqrshrl_sat48(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - inVec0[6] = out1; - - /* - * in { x0 x1 x2 x3 x4 x5 y0 yn1 } - * x - * bCoeffs1 { 0 b2 b1 b0 0 0 a1 a2 } - */ - acc = vmlaldavq(bCoeffs1, inVec0); - acc = sqrshrl_sat48(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - *pOut++ = (q15_t) out1; - *pOut++ = (q15_t) out; - - - inVec0[7] = out; - /* - * in { x0 x1 x2 x3 x4 x5 y0 yp1 } - * x - * bCoeffs2 { 0 0 b2 b1 b0 0 a2 a1 } - */ - acc = vmlaldavq(bCoeffs2, inVec0); - acc = sqrshrl_sat48(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - inVec0[6] = out1; - - /* - * in { x0 x1 x2 x3 x4 x5 y0 yp1 } - * x - * bCoeffs2 { 0 0 0 b2 b1 b0 a1 a2 } - */ - acc = vmlaldavq(bCoeffs3, inVec0); - acc = sqrshrl_sat48(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - inVec0 = vld1q(pIn); - pIn += 4; - - /* decrement the loop counter */ - sample--; - } - - *pOut++ = (q15_t) out1; - *pOut++ = (q15_t) out; - - /* - * Tail handling - */ - int32_t loopRemainder = blockSize & 3; - - if (loopRemainder == 3) { - inVec0[6] = out1; - inVec0[7] = out; - - acc = vmlaldavq(bCoeffs0, inVec0); - acc = sqrshrl_sat48(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - inVec0[6] = out1; - - acc = vmlaldavq(bCoeffs1, inVec0); - acc = sqrshrl_sat48(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - *pOut++ = (q15_t) out1; - *pOut++ = (q15_t) out; - - inVec0[7] = out; - acc = vmlaldavq(bCoeffs2, inVec0); - acc = sqrshrl_sat48(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - *pOut++ = (q15_t) out1; - - /* Store the updated state variables back into the pState array */ - pState[0] = vgetq_lane_s16(inVec0, 4); - pState[1] = vgetq_lane_s16(inVec0, 3); - pState[3] = out; - pState[2] = out1; - - } else if (loopRemainder == 2) { - inVec0[6] = out1; - inVec0[7] = out; - - acc = vmlaldavq(bCoeffs0, inVec0); - acc = sqrshrl_sat48(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - inVec0[6] = out1; - - acc = vmlaldavq(bCoeffs1, inVec0); - acc = sqrshrl_sat48(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - *pOut++ = (q15_t) out1; - *pOut++ = (q15_t) out; - - /* Store the updated state variables back into the pState array */ - pState[0] = vgetq_lane_s16(inVec0, 3); - pState[1] = vgetq_lane_s16(inVec0, 2); - pState[3] = out1; - pState[2] = out; - } else if (loopRemainder == 1) { - - inVec0[6] = out1; - inVec0[7] = out; - - acc = vmlaldavq(bCoeffs0, inVec0); - acc = sqrshrl_sat48(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - *pOut++ = (q15_t) out1; - - /* Store the updated state variables back into the pState array */ - pState[0] = vgetq_lane_s16(inVec0, 2); - pState[1] = vgetq_lane_s16(inVec0, 1); - pState[3] = out; - pState[2] = out1; - - - } else { - /* Store the updated state variables back into the pState array */ - pState[0] = vgetq_lane_s16(inVec0, 1); - pState[1] = vgetq_lane_s16(inVec0, 0); - pState[3] = out1; - pState[2] = out; - } - - pState += 4; - pCoeffs += 6; - - /* - * 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; - } - while (--stages); -} -#else -void arm_biquad_cascade_df1_q15( - const arm_biquad_casd_df1_inst_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - - -#if defined (ARM_MATH_DSP) - - const 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 */ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - int32_t lShift = (15 - (int32_t) S->postShift); /* Post shift */ - 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 = read_q15x2_ia ((q15_t **) &pCoeffs); - - /* Read the b1 and b2 coefficients using SIMD */ - b1 = read_q15x2_ia ((q15_t **) &pCoeffs); - - /* Read the a1 and a2 coefficients using SIMD */ - a1 = read_q15x2_ia ((q15_t **) &pCoeffs); - - /* Read the input state values from the state buffer: x[n-1], x[n-2] */ - state_in = read_q15x2_ia (&pState); - - /* Read the output state values from the state buffer: y[n-1], y[n-2] */ - state_out = read_q15x2_da (&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 = read_q15x2_ia ((q15_t **) &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 - write_q15x2_ia (&pOut, __PKHBT(state_out, out, 16)); -#else - write_q15x2_ia (&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 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 */ - write_q15x2_ia (&pState, state_in); - write_q15x2_ia (&pState, state_out); - - /* Decrement loop counter */ - stage--; - - } while (stage > 0U); - -#else - - const 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 */ - const 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 /* #if defined (ARM_MATH_DSP) */ - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BiquadCascadeDF1 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c deleted file mode 100644 index 04413a3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c +++ /dev/null @@ -1,510 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df1_q31.c - * Description: Processing function for the Q31 Biquad cascade filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - @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 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. - @remark - Refer to \ref arm_biquad_cascade_df1_fast_q31() for a faster but less precise implementation of this filter. - */ -#if defined(ARM_MATH_MVEI) - -void arm_biquad_cascade_df1_q31( - const arm_biquad_casd_df1_inst_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - const q31_t *pIn = pSrc; /* input pointer initialization */ - q31_t *pOut = pDst; /* output pointer initialization */ - int shift; - uint32_t stages = S->numStages; /* loop counters */ - int postShift = S->postShift; - q31x4_t b0Coeffs, b1Coeffs, a0Coeffs, a1Coeffs; /* Coefficients vector */ - q31x4_t stateVec; - q31_t *pState = S->pState; /* pState pointer initialization */ - q31x4_t inVec0; - int64_t acc; - const q31_t *pCoeffs = S->pCoeffs; /* coeff pointer initialization */ - q31_t out, out1; - - - shift = (postShift + 1 + 8); - - do { - /* - * Reading the coefficients - * generates : - * Fwd0 { b2 b1 b0 0 } - * Fwd1 { 0 b2 b1 b0 } - * Bwd0 { 0 0 a2 a1 } - * Bwd0 { 0 0 a1 a2 } - * (can be moved in init) - */ - b0Coeffs = vdupq_n_s32(0); - a0Coeffs = vdupq_n_s32(0); - - b0Coeffs[0] = pCoeffs[2]; // b2 - b0Coeffs[1] = pCoeffs[1]; // b1 - b0Coeffs[2] = pCoeffs[0]; // b0 - - b1Coeffs = b0Coeffs; - uint32_t zero = 0; - b1Coeffs = vshlcq_s32(b1Coeffs, &zero, 32); - - a0Coeffs[2] = pCoeffs[4]; - a0Coeffs[3] = pCoeffs[3]; - a1Coeffs = vrev64q_s32(a0Coeffs); - - - /* - * prologue consumes history samples - */ - - /* 2 first elements are garbage, will be updated with history */ - inVec0 = vld1q(pIn - 2); - - inVec0[0] = pState[1]; - inVec0[1] = pState[0]; - - stateVec[2] = pState[3]; - stateVec[3] = pState[2]; - - acc = vrmlaldavhq(b0Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a0Coeffs, stateVec); - acc = lsll(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - stateVec[2] = out; - acc = vrmlaldavhq(b1Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a1Coeffs, stateVec); - - acc = lsll(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - - - inVec0 = vld1q(pIn); - pIn += 2; - - /* - * main loop - */ - uint32_t sample = (blockSize - 2) >> 2U; - /* - * First part of the processing with loop unrolling. - * Compute 4 outputs at a time. - */ - while (sample > 0U) { - - stateVec[3] = out1; - - *pOut++ = out; - *pOut++ = out1; - - /* - * in { x0 x1 x2 x3 } - * x - * b0Coeffs { b2 b1 b0 0 } - */ - acc = vrmlaldavhq(b0Coeffs, inVec0); - /* - * out { 0 0 yn2 yn1 } - * x - * a0Coeffs { 0 0 a2 a1 } - */ - acc = vrmlaldavhaq(acc, a0Coeffs, stateVec); - acc = lsll(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - stateVec[2] = out; - - /* - * in { x0 x1 x2 x3 } - * x - * b0Coeffs { 0 b2 b1 b0 } - */ - acc = vrmlaldavhq(b1Coeffs, inVec0); - /* - * out { 0 0 y0 yn1 } - * x - * a0Coeffs { 0 0 a1 a2 } - */ - acc = vrmlaldavhaq(acc, a1Coeffs, stateVec); - acc = lsll(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - - stateVec[3] = out1; - - inVec0 = vld1q(pIn); - pIn += 2; - - /* unrolled part */ - *pOut++ = out; - *pOut++ = out1; - - acc = vrmlaldavhq(b0Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a0Coeffs, stateVec); - acc = lsll(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - stateVec[2] = out; - - acc = vrmlaldavhq(b1Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a1Coeffs, stateVec); - acc = lsll(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - - inVec0 = vld1q(pIn); - pIn += 2; - - sample--; - } - - *pOut++ = out; - *pOut++ = out1; - - /* - * Tail handling - */ - int32_t loopRemainder = blockSize & 3; - if (loopRemainder == 2) { - /* - * Store the updated state variables back into the pState array - */ - pState[0] = inVec0[1]; - pState[1] = inVec0[0]; - pState[3] = out; - pState[2] = out1; - } else if (loopRemainder == 1) { - stateVec[3] = out1; - - acc = vrmlaldavhq(b0Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a0Coeffs, stateVec); - acc = lsll(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - stateVec[2] = out; - - acc = vrmlaldavhq(b1Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a1Coeffs, stateVec); - acc = lsll(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - - stateVec[3] = out1; - - inVec0 = vld1q(pIn); - pIn += 2; - - *pOut++ = out; - *pOut++ = out1; - - acc = vrmlaldavhq(b0Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a0Coeffs, stateVec); - acc = lsll(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - *pOut++ = out; - - /* - * Store the updated state variables back into the pState array - */ - pState[0] = inVec0[2]; - pState[1] = inVec0[1]; - pState[3] = out1; - pState[2] = out; - } else if (loopRemainder == 0) { - stateVec[3] = out1; - - acc = vrmlaldavhq(b0Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a0Coeffs, stateVec); - acc = lsll(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - stateVec[2] = out; - - acc = vrmlaldavhq(b1Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a1Coeffs, stateVec); - acc = lsll(acc, shift); - out1 = (q31_t) ((acc >> 32) & 0xffffffff); - - *pOut++ = out; - *pOut++ = out1; - - /* - * Store the updated state variables back into the pState array - */ - pState[0] = inVec0[3]; - pState[1] = inVec0[2]; - pState[3] = out; - pState[2] = out1; - } else { - stateVec[3] = out1; - - acc = vrmlaldavhq(b0Coeffs, inVec0); - acc = vrmlaldavhaq(acc, a0Coeffs, stateVec); - acc = lsll(acc, shift); - out = (q31_t) ((acc >> 32) & 0xffffffff); - - *pOut++ = out; - - /* - * Store the updated state variables back into the pState array - */ - pState[0] = inVec0[2]; - pState[1] = inVec0[1]; - pState[3] = out1; - pState[2] = out; - } - - - pCoeffs += 5; - pState += 4; - - /* 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; - } - while (--stages); -} -#else -void arm_biquad_cascade_df1_q31( - const arm_biquad_casd_df1_inst_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - const q31_t *pIn = pSrc; /* Source pointer */ - q31_t *pOut = pDst; /* Destination pointer */ - q31_t *pState = S->pState; /* pState pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q63_t acc; /* Accumulator */ - q31_t b0, b1, b2, a1, a2; /* Filter coefficients */ - q31_t Xn1, Xn2, Yn1, Yn2; /* Filter pState variables */ - q31_t Xn; /* Temporary input */ - uint32_t uShift = ((uint32_t) S->postShift + 1U); - uint32_t lShift = 32U - uShift; /* Shift to be applied to the output */ - uint32_t sample, stage = S->numStages; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc_l, acc_h; /* temporary output variables */ -#endif - - 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]; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Apply loop unrolling and compute 4 output values simultaneously. */ - /* 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] - */ - - /* Loop unrolling: Compute 4 outputs at a time */ - sample = blockSize >> 2U; - - 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] */ - acc = ((q63_t) b0 * Xn) + ((q63_t) b1 * Xn1) + ((q63_t) b2 * Xn2) + ((q63_t) a1 * Yn1) + ((q63_t) a2 * Yn2); - - /* The result is converted to 1.31 , Yn2 variable is reused */ - acc_l = (acc ) & 0xffffffff; /* Calc lower part of acc */ - acc_h = (acc >> 32) & 0xffffffff; /* Calc upper part of acc */ - - /* Apply shift for lower part of acc and upper part of acc */ - Yn2 = (uint32_t) acc_l >> lShift | acc_h << uShift; - - /* Store output in 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 = ((q63_t) b0 * Xn2) + ((q63_t) b1 * Xn) + ((q63_t) b2 * Xn1) + ((q63_t) a1 * Yn2) + ((q63_t) a2 * Yn1); - - /* The result is converted to 1.31, Yn1 variable is reused */ - acc_l = (acc ) & 0xffffffff; /* Calc lower part of acc */ - acc_h = (acc >> 32) & 0xffffffff; /* Calc upper part of acc */ - - /* Apply shift for lower part of acc and upper part of acc */ - Yn1 = (uint32_t) acc_l >> lShift | acc_h << uShift; - - /* Store output in 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 = ((q63_t) b0 * Xn1) + ((q63_t) b1 * Xn2) + ((q63_t) b2 * Xn) + ((q63_t) a1 * Yn1) + ((q63_t) a2 * Yn2); - - /* The result is converted to 1.31, Yn2 variable is reused */ - acc_l = (acc ) & 0xffffffff; /* Calc lower part of acc */ - acc_h = (acc >> 32) & 0xffffffff; /* Calc upper part of acc */ - - /* Apply shift for lower part of acc and upper part of acc */ - Yn2 = (uint32_t) acc_l >> lShift | acc_h << uShift; - - /* Store output in 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 = ((q63_t) b0 * Xn) + ((q63_t) b1 * Xn1) + ((q63_t) b2 * Xn2) + ((q63_t) a1 * Yn2) + ((q63_t) a2 * Yn1); - - /* The result is converted to 1.31, Yn1 variable is reused */ - acc_l = (acc ) & 0xffffffff; /* Calc lower part of acc */ - acc_h = (acc >> 32) & 0xffffffff; /* Calc upper part of acc */ - - /* Apply shift for lower part of acc and upper part of acc */ - Yn1 = (uint32_t) acc_l >> lShift | acc_h << uShift; - - /* Store output in 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 loop counter */ - sample--; - } - - /* Loop unrolling: Compute remaining outputs */ - sample = blockSize & 0x3U; - -#else - - /* Initialize blkCnt with number of samples */ - sample = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 = ((q63_t) b0 * Xn) + ((q63_t) b1 * Xn1) + ((q63_t) b2 * Xn2) + ((q63_t) a1 * Yn1) + ((q63_t) a2 * Yn2); - - /* The result is converted to 1.31 */ - acc = acc >> lShift; - - /* Store output in destination buffer. */ - *pOut++ = (q31_t) 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 = (q31_t) acc; - - /* decrement 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 output pointer */ - pOut = pDst; - - /* decrement loop counter */ - stage--; - - } while (stage > 0U); - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BiquadCascadeDF1 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_f32.c deleted file mode 100644 index 287a4dd..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_f32.c +++ /dev/null @@ -1,652 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df2T_f32.c - * Description: Processing function for floating-point transposed direct form II Biquad cascade filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters -*/ - -/** - @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 - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -#include "arm_helium_utils.h" - -void arm_biquad_cascade_df2T_f32( - const arm_biquad_cascade_df2T_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* source pointer */ - float32_t Xn0, Xn1; - float32_t acc0, acc1; - float32_t *pOut = pDst; /* destination pointer */ - float32_t *pState = S->pState; /* State pointer */ - uint32_t sample, stage = S->numStages; /* loop counters */ - float32_t const *pCurCoeffs = /* coefficient pointer */ - (float32_t const *) S->pCoeffs; - f32x4_t b0Coeffs, a0Coeffs; /* Coefficients vector */ - f32x4_t b1Coeffs, a1Coeffs; /* Modified coef. vector */ - f32x4_t state; /* State vector */ - - do - { - /* - * temporary carry variable for feeding the 128-bit vector shifter - */ - uint32_t tmp = 0; - /* - * Reading the coefficients - * b0Coeffs = {b0, b1, b2, x} - * a0Coeffs = { x, a1, a2, x} - */ - b0Coeffs = vld1q(pCurCoeffs); pCurCoeffs+= 2; - a0Coeffs = vld1q(pCurCoeffs); pCurCoeffs+= 3; - /* - * Reading the state values - * state = {d1, d2, 0, 0} - */ - state = *(f32x4_t *) pState; - state = vsetq_lane(0.0f, state, 2); - state = vsetq_lane(0.0f, state, 3); - - /* b1Coeffs = {b0, b1, b2, x} */ - /* b1Coeffs = { x, x, a1, a2} */ - b1Coeffs = vshlcq_s32(b0Coeffs, &tmp, 32); - a1Coeffs = vshlcq_s32(a0Coeffs, &tmp, 32); - - sample = blockSize / 2; - - /* unrolled 2 x */ - while (sample > 0U) - { - /* - * Read 2 inputs - */ - Xn0 = *pIn++; - Xn1 = *pIn++; - - /* - * 1st half: - * / acc0 \ / b0 \ / d1 \ / 0 \ - * | d1 | = | b1 | * Xn0 + | d2 | + | a1 | x acc0 - * | d2 | | b2 | | 0 | | a2 | - * \ x / \ x / \ x / \ x / - */ - - state = vfmaq(state, b0Coeffs, Xn0); - acc0 = vgetq_lane(state, 0); - state = vfmaq(state, a0Coeffs, acc0); - state = vsetq_lane(0.0f, state, 3); - - /* - * 2nd half: - * same as 1st half, but all vector elements shifted down. - * / x \ / x \ / x \ / x \ - * | acc1 | = | b0 | * Xn1 + | d1 | + | 0 | x acc1 - * | d1 | | b1 | | d2 | | a1 | - * \ d2 / \ b2 / \ 0 / \ a2 / - */ - - state = vfmaq(state, b1Coeffs, Xn1); - acc1 = vgetq_lane(state, 1); - state = vfmaq(state, a1Coeffs, acc1); - - /* move d1, d2 up + clearing */ - /* expect dual move or long move */ - state = vsetq_lane(vgetq_lane(state, 2), state, 0); - state = vsetq_lane(vgetq_lane(state, 3), state, 1); - state = vsetq_lane(0.0f, state, 2); - /* - * Store the results in the destination buffer. - */ - *pOut++ = acc0; - *pOut++ = acc1; - /* - * decrement the loop counter - */ - sample--; - } - - /* - * tail handling - */ - if (blockSize & 1) - { - Xn0 = *pIn++; - state = vfmaq(state, b0Coeffs, Xn0); - acc0 = vgetq_lane(state, 0); - - state = vfmaq(state, a0Coeffs, acc0); - *pOut++ = acc0; - *pState++ = vgetq_lane(state, 1); - *pState++ = vgetq_lane(state, 2); - } - else - { - *pState++ = vgetq_lane(state, 0); - *pState++ = vgetq_lane(state, 1); - } - /* - * The current stage output is given as the input to the next stage - */ - pIn = pDst; - /* - * Reset the output working pointer - */ - pOut = pDst; - /* - * decrement the loop counter - */ - stage--; - } - while (stage > 0U); -} -#else -#if defined(ARM_MATH_NEON) - -void arm_biquad_cascade_df2T_f32( - const arm_biquad_cascade_df2T_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* source pointer */ - float32_t *pOut = pDst; /* destination pointer */ - float32_t *pState = S->pState; /* State pointer */ - const 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, stageCnt,stage = S->numStages; /* loop counters */ - - - float32x4_t XnV, YnV; - float32x4x2_t dV; - float32x4_t zeroV = vdupq_n_f32(0.0); - float32x4_t t1,t2,t3,t4,b1V,b2V,a1V,a2V,s; - - /* Loop unrolling. Compute 4 outputs at a time */ - stageCnt = stage >> 2; - - while (stageCnt > 0U) - { - /* Reading the coefficients */ - t1 = vld1q_f32(pCoeffs); - pCoeffs += 4; - - t2 = vld1q_f32(pCoeffs); - pCoeffs += 4; - - t3 = vld1q_f32(pCoeffs); - pCoeffs += 4; - - t4 = vld1q_f32(pCoeffs); - pCoeffs += 4; - - b1V = vld1q_f32(pCoeffs); - pCoeffs += 4; - - b2V = vld1q_f32(pCoeffs); - pCoeffs += 4; - - a1V = vld1q_f32(pCoeffs); - pCoeffs += 4; - - a2V = vld1q_f32(pCoeffs); - pCoeffs += 4; - - /* Reading the state values */ - dV = vld2q_f32(pState); - - sample = blockSize; - - while (sample > 0U) { - /* y[n] = b0 * x[n] + d1 */ - /* d1 = b1 * x[n] + a1 * y[n] + d2 */ - /* d2 = b2 * x[n] + a2 * y[n] */ - - XnV = vdupq_n_f32(*pIn++); - - s = dV.val[0]; - YnV = s; - - s = vextq_f32(zeroV,dV.val[0],3); - YnV = vmlaq_f32(YnV, t1, s); - - s = vextq_f32(zeroV,dV.val[0],2); - YnV = vmlaq_f32(YnV, t2, s); - - s = vextq_f32(zeroV,dV.val[0],1); - YnV = vmlaq_f32(YnV, t3, s); - - YnV = vmlaq_f32(YnV, t4, XnV); - - s = vextq_f32(XnV,YnV,3); - - dV.val[0] = vmlaq_f32(dV.val[1], s, b1V); - dV.val[0] = vmlaq_f32(dV.val[0], YnV, a1V); - - dV.val[1] = vmulq_f32(s, b2V); - dV.val[1] = vmlaq_f32(dV.val[1], YnV, a2V); - - *pOut++ = vgetq_lane_f32(YnV, 3) ; - - sample--; - } - - /* Store the updated state variables back into the state array */ - vst2q_f32(pState,dV); - pState += 8; - - /* The current stage output is given as the input to the next stage */ - pIn = pDst; - - /*Reset the output working pointer */ - pOut = pDst; - - /* decrement the loop counter */ - stageCnt--; - - } - - /* Tail */ - stageCnt = stage & 3; - - while (stageCnt > 0U) - { - /* 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 output is given as the input to the next stage */ - pIn = pDst; - - /*Reset the output working pointer */ - pOut = pDst; - - /* decrement the loop counter */ - stageCnt--; - } -} -#else -LOW_OPTIMIZATION_ENTER -void arm_biquad_cascade_df2T_f32( - const arm_biquad_cascade_df2T_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* Source pointer */ - float32_t *pOut = pDst; /* Destination pointer */ - float32_t *pState = S->pState; /* State pointer */ - const 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 */ - - do - { - /* Reading the coefficients */ - b0 = pCoeffs[0]; - b1 = pCoeffs[1]; - b2 = pCoeffs[2]; - a1 = pCoeffs[3]; - a2 = pCoeffs[4]; - - /* Reading the state values */ - d1 = pState[0]; - d2 = pState[1]; - - pCoeffs += 5U; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 16 outputs at a time */ - sample = blockSize >> 4U; - - while (sample > 0U) { - - /* y[n] = b0 * x[n] + d1 */ - /* d1 = b1 * x[n] + a1 * y[n] + d2 */ - /* d2 = b2 * x[n] + a2 * y[n] */ - -/* 1 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 2 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 3 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 4 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 5 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 6 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 7 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 8 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 9 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 10 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 11 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 12 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 13 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 14 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 15 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 16 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - - /* decrement loop counter */ - sample--; - } - - /* Loop unrolling: Compute remaining outputs */ - sample = blockSize & 0xFU; - -#else - - /* Initialize blkCnt with number of samples */ - sample = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (sample > 0U) { - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - - /* decrement loop counter */ - sample--; - } - - /* Store the updated state variables back into the state array */ - pState[0] = d1; - pState[1] = d2; - - pState += 2U; - - /* The current stage output is given as the input to the next stage */ - pIn = pDst; - - /* Reset the output working pointer */ - pOut = pDst; - - /* decrement loop counter */ - stage--; - - } while (stage > 0U); - -} -LOW_OPTIMIZATION_EXIT -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BiquadCascadeDF2T group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c deleted file mode 100644 index 35d401d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c +++ /dev/null @@ -1,443 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df2T_f64.c - * Description: Processing function for floating-point transposed direct form II Biquad cascade filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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};
    -      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_f64( - const arm_biquad_cascade_df2T_instance_f64 * S, - const float64_t * pSrc, - float64_t * pDst, - uint32_t blockSize) -{ - - const float64_t *pIn = pSrc; /* Source pointer */ - float64_t *pOut = pDst; /* Destination pointer */ - float64_t *pState = S->pState; /* State pointer */ - const 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 */ - - - do - { - /* Reading the coefficients */ - b0 = pCoeffs[0]; - b1 = pCoeffs[1]; - b2 = pCoeffs[2]; - a1 = pCoeffs[3]; - a2 = pCoeffs[4]; - - /* Reading the state values */ - d1 = pState[0]; - d2 = pState[1]; - - pCoeffs += 5U; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 16 outputs at a time */ - sample = blockSize >> 4U; - - while (sample > 0U) { - - /* y[n] = b0 * x[n] + d1 */ - /* d1 = b1 * x[n] + a1 * y[n] + d2 */ - /* d2 = b2 * x[n] + a2 * y[n] */ - -/* 1 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - - -/* 2 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 3 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 4 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 5 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 6 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 7 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 8 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 9 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 10 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 11 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 12 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 13 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 14 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 15 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - -/* 16 */ - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - - /* decrement loop counter */ - sample--; - } - - /* Loop unrolling: Compute remaining outputs */ - sample = blockSize & 0xFU; - -#else - - /* Initialize blkCnt with number of samples */ - sample = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (sample > 0U) { - Xn1 = *pIn++; - - acc1 = b0 * Xn1 + d1; - - d1 = b1 * Xn1 + d2; - d1 += a1 * acc1; - - d2 = b2 * Xn1; - d2 += a2 * acc1; - - *pOut++ = acc1; - - /* decrement loop counter */ - sample--; - } - - /* Store the updated state variables back into the state array */ - pState[0] = d1; - pState[1] = d2; - - pState += 2U; - - /* The current stage output is given as the input to the next stage */ - pIn = pDst; - - /* Reset the output working pointer */ - pOut = pDst; - - /* decrement loop counter */ - stage--; - - } while (stage > 0U); - -} -LOW_OPTIMIZATION_EXIT - -/** - @} end of BiquadCascadeDF2T group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f32.c deleted file mode 100644 index 107914e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f32.c +++ /dev/null @@ -1,211 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df2T_init_f32.c - * Description: Initialization function for floating-point transposed direct form II Biquad cascade filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Coefficient and State Ordering - The coefficients are stored in the array pCoeffs in the following order - in the not Neon version. -
    -      {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. - - For Neon version, this array is bigger. If numstages = 4x + y, then the array has size: - 32*x + 5*y - and it must be initialized using the function - arm_biquad_cascade_df2T_compute_coefs_f32 which is taking the - standard array coefficient as parameters. - - But, an array of 8*numstages is a good approximation. - - Then, the initialization can be done with: -
    -                   arm_biquad_cascade_df2T_init_f32(&SNeon, nbCascade, neonCoefs, stateNeon);
    -                   arm_biquad_cascade_df2T_compute_coefs_f32(&SNeon,nbCascade,coefs);
    -  
    - - @par In this example, neonCoefs is a bigger array of size 8 * numStages. - coefs is the standard array: - -
    -      {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}
    -  
    - - - @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. - */ - -#if defined(ARM_MATH_NEON) -/* - -Must be called after initializing the biquad instance. -pCoeffs has size 5 * nbCascade -Whereas the pCoeffs for the init has size (4*4 + 4*4)* nbCascade - -So this pCoeffs is the one which would be used for the not Neon version. -The pCoeffs passed in init is bigger than the one for the not Neon version. - -*/ -void arm_biquad_cascade_df2T_compute_coefs_f32( - arm_biquad_cascade_df2T_instance_f32 * S, - uint8_t numStages, - float32_t * pCoeffs) -{ - uint8_t cnt; - float32_t *pDstCoeffs; - float32_t b0[4],b1[4],b2[4],a1[4],a2[4]; - - pDstCoeffs = (float32_t*)S->pCoeffs; - - cnt = numStages >> 2; - while(cnt > 0) - { - for(int i=0;i<4;i++) - { - b0[i] = pCoeffs[0]; - b1[i] = pCoeffs[1]; - b2[i] = pCoeffs[2]; - a1[i] = pCoeffs[3]; - a2[i] = pCoeffs[4]; - pCoeffs += 5; - } - - /* Vec 1 */ - *pDstCoeffs++ = 0; - *pDstCoeffs++ = b0[1]; - *pDstCoeffs++ = b0[2]; - *pDstCoeffs++ = b0[3]; - - /* Vec 2 */ - *pDstCoeffs++ = 0; - *pDstCoeffs++ = 0; - *pDstCoeffs++ = b0[1] * b0[2]; - *pDstCoeffs++ = b0[2] * b0[3]; - - /* Vec 3 */ - *pDstCoeffs++ = 0; - *pDstCoeffs++ = 0; - *pDstCoeffs++ = 0; - *pDstCoeffs++ = b0[1] * b0[2] * b0[3]; - - /* Vec 4 */ - *pDstCoeffs++ = b0[0]; - *pDstCoeffs++ = b0[0] * b0[1]; - *pDstCoeffs++ = b0[0] * b0[1] * b0[2]; - *pDstCoeffs++ = b0[0] * b0[1] * b0[2] * b0[3]; - - /* Vec 5 */ - *pDstCoeffs++ = b1[0]; - *pDstCoeffs++ = b1[1]; - *pDstCoeffs++ = b1[2]; - *pDstCoeffs++ = b1[3]; - - /* Vec 6 */ - *pDstCoeffs++ = b2[0]; - *pDstCoeffs++ = b2[1]; - *pDstCoeffs++ = b2[2]; - *pDstCoeffs++ = b2[3]; - - /* Vec 7 */ - *pDstCoeffs++ = a1[0]; - *pDstCoeffs++ = a1[1]; - *pDstCoeffs++ = a1[2]; - *pDstCoeffs++ = a1[3]; - - /* Vec 8 */ - *pDstCoeffs++ = a2[0]; - *pDstCoeffs++ = a2[1]; - *pDstCoeffs++ = a2[2]; - *pDstCoeffs++ = a2[3]; - - cnt--; - } - - cnt = numStages & 0x3; - while(cnt > 0) - { - *pDstCoeffs++ = *pCoeffs++; - *pDstCoeffs++ = *pCoeffs++; - *pDstCoeffs++ = *pCoeffs++; - *pDstCoeffs++ = *pCoeffs++; - *pDstCoeffs++ = *pCoeffs++; - cnt--; - } - -} -#endif - -void arm_biquad_cascade_df2T_init_f32( - arm_biquad_cascade_df2T_instance_f32 * S, - uint8_t numStages, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c deleted file mode 100644 index 2ab272f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c +++ /dev/null @@ -1,86 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_df2T_init_f64.c - * Description: Initialization function for floating-point transposed direct form II Biquad cascade filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Coefficient and State Ordering - 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c deleted file mode 100644 index 426efef..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c +++ /dev/null @@ -1,420 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_stereo_df2T_f32.c - * Description: Processing function for floating-point transposed direct form II Biquad cascade filter. 2 channels - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters -*/ - -/** - @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 - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -#include "arm_helium_utils.h" - -void arm_biquad_cascade_stereo_df2T_f32( - const arm_biquad_cascade_stereo_df2T_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* source pointer */ - float32_t *pOut = pDst; /* destination pointer */ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* coefficient pointer */ - float32_t b0, b1, b2, a1, a2; /* Filter coefficients */ - uint32_t sample, stage = S->numStages; /* loop counters */ - float32_t scratch[6]; - uint32x4_t loadIdxVec; - f32x4_t aCoeffs, bCoeffs; - f32x4_t stateVec0, stateVec1; - f32x4_t inVec; - uint32_t startIdx = 0; - - /* - * {0, 1, 0, 1} generator - */ - loadIdxVec = viwdupq_u32(&startIdx, 2, 1); - - /* - * scratch top clearing - * layout : [d1a d1b d2a d2b 0 0] - */ - scratch[4] = 0.0f; - scratch[5] = 0.0f; - - do - { - /* - * Reading the coefficients - */ - b0 = *pCoeffs++; - b1 = *pCoeffs++; - b2 = *pCoeffs++; - a1 = *pCoeffs++; - a2 = *pCoeffs++; - - /* - * aCoeffs = {a1 a1 a2 a2} - */ - aCoeffs = vdupq_n_f32(a1); - aCoeffs = vsetq_lane(a2, aCoeffs, 2); - aCoeffs = vsetq_lane(a2, aCoeffs, 3); - - /* - * bCoeffs = {b1 b1 b2 b2} - */ - bCoeffs = vdupq_n_f32(b1); - bCoeffs = vsetq_lane(b2, bCoeffs, 2); - bCoeffs = vsetq_lane(b2, bCoeffs, 3); - - /* - * Reading the state values - * Save into scratch - */ - *(f32x4_t *) scratch = *(f32x4_t *) pState; - - sample = blockSize; - - while (sample > 0U) - { - /* - * step 1 - * - * 0 | acc1a = xn1a * b0 + d1a - * 1 | acc1b = xn1b * b0 + d1b - * 2 | acc1a = xn1a * b0 + d1a - * 3 | acc1b = xn1b * b0 + d1b - */ - /* - * load {d1a, d1b, d1a, d1b} - */ - stateVec0 = vldrwq_gather_shifted_offset((uint32_t const *) scratch, loadIdxVec); - /* - * load {in0 in1 in0 in1} - */ - inVec = vldrwq_gather_shifted_offset((uint32_t const *) pIn, loadIdxVec); - - stateVec0 = vfmaq(stateVec0, inVec, b0); - *pOut++ = vgetq_lane(stateVec0, 0); - *pOut++ = vgetq_lane(stateVec0, 1); - - /* - * step 2 - * - * 0 | d1a = b1 * xn1a + a1 * acc1a + d2a - * 1 | d1b = b1 * xn1b + a1 * acc1b + d2b - * 2 | d2a = b2 * xn1a + a2 * acc1a + 0 - * 3 | d2b = b2 * xn1b + a2 * acc1b + 0 - */ - - /* - * load {d2a, d2b, 0, 0} - */ - stateVec1 = *(f32x4_t *) & scratch[2]; - stateVec1 = vfmaq(stateVec1, stateVec0, aCoeffs); - stateVec1 = vfmaq(stateVec1, inVec, bCoeffs); - *(f32x4_t *) scratch = stateVec1; - - pIn = pIn + 2; - sample--; - } - - /* - * Store the updated state variables back into the state array - */ - vst1q(pState, stateVec1); - pState += 4; - - /* - * The current stage output is given as the input to the next stage - */ - pIn = pDst; - /* - * Reset the output working pointer - */ - pOut = pDst; - /* - * decrement the loop counter - */ - stage--; - } - while (stage > 0U); -} - -#else -LOW_OPTIMIZATION_ENTER -void arm_biquad_cascade_stereo_df2T_f32( - const arm_biquad_cascade_stereo_df2T_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* Source pointer */ - float32_t *pOut = pDst; /* Destination pointer */ - float32_t *pState = S->pState; /* State pointer */ - const 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 */ - - do - { - /* Reading the coefficients */ - b0 = pCoeffs[0]; - b1 = pCoeffs[1]; - b2 = pCoeffs[2]; - a1 = pCoeffs[3]; - a2 = pCoeffs[4]; - - /* Reading the state values */ - d1a = pState[0]; - d2a = pState[1]; - d1b = pState[2]; - d2b = pState[3]; - - pCoeffs += 5U; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 8 outputs at a time */ - sample = blockSize >> 3U; - - while (sample > 0U) { - /* y[n] = b0 * x[n] + d1 */ - /* d1 = b1 * x[n] + a1 * y[n] + d2 */ - /* d2 = b2 * x[n] + a2 * y[n] */ - -/* 1 */ - Xn1a = *pIn++; /* Channel a */ - Xn1b = *pIn++; /* Channel b */ - - acc1a = (b0 * Xn1a) + d1a; - acc1b = (b0 * Xn1b) + d1b; - - *pOut++ = acc1a; - *pOut++ = acc1b; - - d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; - d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; - - d2a = (b2 * Xn1a) + (a2 * acc1a); - d2b = (b2 * Xn1b) + (a2 * acc1b); - -/* 2 */ - Xn1a = *pIn++; /* Channel a */ - Xn1b = *pIn++; /* Channel b */ - - acc1a = (b0 * Xn1a) + d1a; - acc1b = (b0 * Xn1b) + d1b; - - *pOut++ = acc1a; - *pOut++ = acc1b; - - d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; - d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; - - d2a = (b2 * Xn1a) + (a2 * acc1a); - d2b = (b2 * Xn1b) + (a2 * acc1b); - -/* 3 */ - Xn1a = *pIn++; /* Channel a */ - Xn1b = *pIn++; /* Channel b */ - - acc1a = (b0 * Xn1a) + d1a; - acc1b = (b0 * Xn1b) + d1b; - - *pOut++ = acc1a; - *pOut++ = acc1b; - - d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; - d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; - - d2a = (b2 * Xn1a) + (a2 * acc1a); - d2b = (b2 * Xn1b) + (a2 * acc1b); - -/* 4 */ - Xn1a = *pIn++; /* Channel a */ - Xn1b = *pIn++; /* Channel b */ - - acc1a = (b0 * Xn1a) + d1a; - acc1b = (b0 * Xn1b) + d1b; - - *pOut++ = acc1a; - *pOut++ = acc1b; - - d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; - d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; - - d2a = (b2 * Xn1a) + (a2 * acc1a); - d2b = (b2 * Xn1b) + (a2 * acc1b); - -/* 5 */ - Xn1a = *pIn++; /* Channel a */ - Xn1b = *pIn++; /* Channel b */ - - acc1a = (b0 * Xn1a) + d1a; - acc1b = (b0 * Xn1b) + d1b; - - *pOut++ = acc1a; - *pOut++ = acc1b; - - d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; - d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; - - d2a = (b2 * Xn1a) + (a2 * acc1a); - d2b = (b2 * Xn1b) + (a2 * acc1b); - -/* 6 */ - Xn1a = *pIn++; /* Channel a */ - Xn1b = *pIn++; /* Channel b */ - - acc1a = (b0 * Xn1a) + d1a; - acc1b = (b0 * Xn1b) + d1b; - - *pOut++ = acc1a; - *pOut++ = acc1b; - - d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; - d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; - - d2a = (b2 * Xn1a) + (a2 * acc1a); - d2b = (b2 * Xn1b) + (a2 * acc1b); - -/* 7 */ - Xn1a = *pIn++; /* Channel a */ - Xn1b = *pIn++; /* Channel b */ - - acc1a = (b0 * Xn1a) + d1a; - acc1b = (b0 * Xn1b) + d1b; - - *pOut++ = acc1a; - *pOut++ = acc1b; - - d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; - d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; - - d2a = (b2 * Xn1a) + (a2 * acc1a); - d2b = (b2 * Xn1b) + (a2 * acc1b); - -/* 8 */ - Xn1a = *pIn++; /* Channel a */ - Xn1b = *pIn++; /* Channel b */ - - acc1a = (b0 * Xn1a) + d1a; - acc1b = (b0 * Xn1b) + d1b; - - *pOut++ = acc1a; - *pOut++ = acc1b; - - d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; - d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; - - d2a = (b2 * Xn1a) + (a2 * acc1a); - d2b = (b2 * Xn1b) + (a2 * acc1b); - - /* decrement loop counter */ - sample--; - } - - /* Loop unrolling: Compute remaining outputs */ - sample = blockSize & 0x7U; - -#else - - /* Initialize blkCnt with number of samples */ - sample = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 loop counter */ - sample--; - } - - /* Store the updated state variables back into the state array */ - pState[0] = d1a; - pState[1] = d2a; - - pState[2] = d1b; - pState[3] = d2b; - - pState += 4U; - - /* The current stage output is given as the input to the next stage */ - pIn = pDst; - - /* Reset the output working pointer */ - pOut = pDst; - - /* Decrement the loop counter */ - stage--; - - } while (stage > 0U); - -} -LOW_OPTIMIZATION_EXIT -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BiquadCascadeDF2T group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c deleted file mode 100644 index d398f18..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c +++ /dev/null @@ -1,86 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_biquad_cascade_stereo_df2T_init_f32.c - * Description: Initialization function for floating-point transposed direct form II Biquad cascade filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Coefficient and State Ordering - 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_f32.c deleted file mode 100644 index 973434b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_f32.c +++ /dev/null @@ -1,964 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_f32.c - * Description: Convolution of floating-point sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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. - - @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. - - @par Fixed-Point Behavior - 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. - - @par Fast Versions - 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. - - @par Opt Versions - 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 - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_filtering.h" - - -void arm_conv_f32( - const float32_t * pSrcA, - uint32_t srcALen, - const float32_t * pSrcB, - uint32_t srcBLen, - float32_t * pDst) -{ - const float32_t *pIn1 = pSrcA; /* inputA pointer */ - const float32_t *pIn2 = pSrcB; /* inputB pointer */ - /* - * Loop to perform MAC operations according to correlation equation - */ - const float32_t *pX; - const float32_t *pY; - const float32_t *pA; - const float32_t *pB; - int32_t i = 0U, j = 0; /* loop counters */ - int32_t block1, block2, block3; - uint32_t vddupStartIdx = 3; - uint32x4_t decrIdxVec = vddupq_u32(vddupStartIdx, 1); - - if (srcALen < srcBLen) - { - /* - * Initialization to inputB pointer - */ - pIn1 = pSrcB; - /* - * Initialization to the end of inputA pointer - */ - pIn2 = pSrcA; - /* - * Swapping the lengths - */ - j = srcALen; - srcALen = srcBLen; - srcBLen = j; - } - - block1 = srcBLen - 1; - block2 = srcALen - srcBLen + 1; - block3 = srcBLen - 1; - - pA = pIn1; - pB = pIn2 - 3; - - for (i = 0; i <= block1 - 2; i += 2) - { - uint32_t count = i + 1; - float32_t acc0; - float32_t acc1; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is incrementing for successive accumulators - * Y pointer is incrementing for successive accumulators - */ - MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_F32(acc0, acc1, pX, pY, count); - - *pDst++ = acc0; - *pDst++ = acc1; - pB += 2; - } - - for (; i < block1; i++) - { - uint32_t count = i + 1; - float32_t acc; - - pX = pA; - pY = pB; - MVE_INTR_CONV_SINGLE_F32(acc, pX, pY, count); - - *pDst++ = acc; - pB++; - } - - for (i = 0; i <= block2 - 2; i += 2) - { - uint32_t count = srcBLen; - float32_t acc0 = 0; - float32_t acc1 = 0; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_F32(acc0, acc1, pX, pY, count); - *pDst++ = acc0; - *pDst++ = acc1; - pA += 2; - } - if (block2 & 1) - { - uint32_t count = srcBLen; - float32_t acc = 0; - - pX = pA; - pY = pB; - MVE_INTR_CONV_SINGLE_F32(acc, pX, pY, count); - - *pDst++ = acc; - pA++; - } - - for (i = block3; i >= 2; i -= 2) - { - int32_t count = i; - float32_t acc0; - float32_t acc1; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is decrementing for successive accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_F32(acc0, acc1, pX, pY, count); - - *pDst++ = acc0; - *pDst++ = acc1; - pA += 2; - } - for (; i >= 1; i--) - { - int32_t count = i; - float32_t acc; - - pX = pA; - pY = pB; - MVE_INTR_CONV_SINGLE_F32(acc, pX, pY, count); - - *pDst++ = acc; - pA++; - } -} -#else -void arm_conv_f32( - const float32_t * pSrcA, - uint32_t srcALen, - const float32_t * pSrcB, - uint32_t srcBLen, - float32_t * pDst) -{ - -#if defined(ARM_MATH_DSP) - - const float32_t *pIn1; /* InputA pointer */ - const float32_t *pIn2; /* InputB pointer */ - float32_t *pOut = pDst; /* Output pointer */ - const float32_t *px; /* Intermediate inputA pointer */ - const float32_t *py; /* Intermediate inputB pointer */ - const float32_t *pSrc1, *pSrc2; /* Intermediate pointers */ - float32_t sum; /* Accumulators */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* Loop counters */ - - -#if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) - float32_t acc0, acc1, acc2, acc3, c0; /* Accumulators */ -#if !defined(ARM_MATH_NEON) - float32_t x0, x1, x2, x3; /* Temporary variables to hold state and coefficient values */ -#endif -#endif - - /* 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 - * ----------------------*/ -#if defined(ARM_MATH_NEON) - float32x4_t vec1; - float32x4_t vec2; - float32x4_t res = vdupq_n_f32(0) ; - float32x2_t accum = vdup_n_f32(0); -#endif /* #if defined(ARM_MATH_NEON) */ - - /* The first stage starts here */ - while (blockSize1 > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0.0f; - -#if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - -#if defined(ARM_MATH_NEON) - res = vdupq_n_f32(0) ; - accum = vdup_n_f32(0); - - /* Compute 4 MACs simultaneously. */ - k = count >> 2U; - - /* First part of the processing. Compute 4 MACs at a time. - ** a second loop below computes MACs for the remaining 1 to 3 samples. */ - - while (k > 0U) - { - vec1 = vld1q_f32(px); - vec2 = vld1q_f32(py-3); - vec2 = vrev64q_f32(vec2); - vec2 = vcombine_f32(vget_high_f32(vec2), vget_low_f32(vec2)); - - res = vmlaq_f32(res,vec1, vec2); - - /* Increment pointers */ - px += 4; - py -= 4; - - /* Decrement the loop counter */ - k--; - } - - accum = vpadd_f32(vget_low_f32(res), vget_high_f32(res)); - sum += accum[0] + accum[1]; - - /* If the count is not a multiple of 4, compute any remaining MACs here. - ** No loop unrolling is used. */ - k = count & 3; -#else - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#endif /* #if defined(ARM_MATH_NEON) */ - -#else /* defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) */ - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += *px++ * *py--; - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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) - { - -#if defined(ARM_MATH_NEON) - float32x4_t c; - float32x4_t x1v; - float32x4_t x2v; - float32x4_t x; - float32x4_t res = vdupq_n_f32(0) ; -#endif /* #if defined(ARM_MATH_NEON) */ - -#if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize2 >> 2U; - - while (blkCnt > 0U) - { - /* Set all accumulators to zero */ - acc0 = 0.0f; - acc1 = 0.0f; - acc2 = 0.0f; - acc3 = 0.0f; - - /* Apply loop unrolling and compute 4 MACs simultaneously. */ - k = srcBLen >> 2U; - -#if defined(ARM_MATH_NEON) - res = vdupq_n_f32(0) ; - - x1v = vld1q_f32(px); - x2v = vld1q_f32(px+4); - - do - { - c = vld1q_f32(py-3); - - px += 4; - x = x1v; - res = vmlaq_n_f32(res,x,c[3]); - - x = vextq_f32(x1v,x2v,1); - - res = vmlaq_n_f32(res,x,c[2]); - - x = vextq_f32(x1v,x2v,2); - - res = vmlaq_n_f32(res,x,c[1]); - - x = vextq_f32(x1v,x2v,3); - - res = vmlaq_n_f32(res,x,c[0]); - - py -= 4; - - x1v = x2v ; - x2v = vld1q_f32(px+4); - - } while (--k); - - - /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. - ** No loop unrolling is used. */ - k = srcBLen & 0x3; - - x1v = vld1q_f32(px); - px += 4; - - while (k > 0U) - { - /* Read y[srcBLen - 5] sample */ - c0 = *(py--); - - res = vmlaq_n_f32(res,x1v,c0); - - /* Reuse the present samples for the next MAC */ - x1v[0] = x1v[1]; - x1v[1] = x1v[2]; - x1v[2] = x1v[3]; - - x1v[3] = *(px++); - - /* Decrement the loop counter */ - k--; - } - - acc0 = res[0]; - acc1 = res[1]; - acc2 = res[2]; - acc3 = res[3]; - -#else - /* read x[0], x[1], x[2] samples */ - x0 = *px++; - x1 = *px++; - x2 = *px++; - - /* 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-accumulate */ - /* 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-accumulate */ - /* 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-accumulate */ - /* 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--; - } -#endif /* #if defined(ARM_MATH_NEON) */ - - /* 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; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) || defined (ARM_MATH_NEON)*/ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0.0f; - -#if defined(ARM_MATH_NEON) || defined (ARM_MATH_LOOPUNROLL) - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - -#if defined (ARM_MATH_NEON) - float32x4_t res = vdupq_n_f32(0) ; - float32x4_t x = vdupq_n_f32(0) ; - float32x4_t y = vdupq_n_f32(0) ; - float32x2_t accum = vdup_n_f32(0) ; - - /* First part of the processing. Compute 4 MACs at a time. - ** a second loop below computes MACs for the remaining 1 to 3 samples. */ - while (k > 0U) - { - x = vld1q_f32(px); - y = vld1q_f32(py-3); - - y = vrev64q_f32(y); - y = vcombine_f32(vget_high_f32(y), vget_low_f32(y)); - - res = vmlaq_f32(res,x,y); - - px += 4 ; - py -= 4 ; - - /* Decrement the loop counter */ - k--; - } - - accum = vpadd_f32(vget_low_f32(res), vget_high_f32(res)); - sum += accum[0] + accum[1]; - - /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. - ** No loop unrolling is used. */ - k = srcBLen & 0x3U; - -#else - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += *px++ * *py--; - sum += *px++ * *py--; - sum += *px++ * *py--; - sum += *px++ * *py--; - - /* Decrement loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#endif /* if defined (ARM_MATH_NEON) */ -#else - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined(ARM_MATH_NEON) || defined (ARM_MATH_LOOPUNROLL) */ - - 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; - -#if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) - /* Loop unrolling: Compute 4 outputs at a time */ - k = blockSize3 >> 2U; - -#if defined(ARM_MATH_NEON) - float32x4_t res = vdupq_n_f32(0) ; - float32x4_t x = vdupq_n_f32(0) ; - float32x4_t y = vdupq_n_f32(0) ; - float32x2_t accum = vdup_n_f32(0) ; - - while (k > 0U) - { - x = vld1q_f32(px); - y = vld1q_f32(py-3); - - y = vrev64q_f32(y); - y = vcombine_f32(vget_high_f32(y), vget_low_f32(y)); - - res = vmlaq_f32(res,x,y); - - px += 4 ; - py -= 4 ; - - /* Decrement the loop counter */ - k--; - } - - accum = vpadd_f32(vget_low_f32(res), vget_high_f32(res)); - sum += accum[0] + accum[1]; - -#else - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* 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 loop counter */ - k--; - } -#endif /* #if defined (ARM_MATH_NEON) */ - - /* Loop unrolling: Compute remaining outputs */ - k = blockSize3 % 0x4U; -#else - - /* Initialize blkCnt with number of samples */ - k = blockSize3; - -#endif /* #if defined (ARM_MATH_NEON) || defined (ARM_MATH_LOOPUNROLL)*/ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* sum += x[srcALen-1] * y[srcBLen-1] */ - sum += *px++ * *py--; - - /* Decrement 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 -/* alternate version for CM0_FAMILY */ - - const float32_t *pIn1 = pSrcA; /* InputA pointer */ - const 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 /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of Conv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_opt_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_opt_q15.c deleted file mode 100644 index ed2aea9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_opt_q15.c +++ /dev/null @@ -1,366 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_fast_opt_q15.c - * Description: Fast Q15 Convolution - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup Conv - @{ - */ - -/** - @brief Convolution of Q15 sequences (fast version). - @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 Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref 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( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - q15_t * pScratch1, - q15_t * pScratch2) -{ - q31_t acc0; /* Accumulators */ - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - q15_t *pOut = pDst; /* Output pointer */ - q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ - q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ - const q15_t *px; /* Intermediate inputA pointer */ - q15_t *py; /* Intermediate inputB pointer */ - uint32_t j, k, blkCnt; /* Loop counter */ - uint32_t tapCnt; /* Loop count */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc1, acc2, acc3; /* Accumulators */ - q31_t x1, x2, x3; /* Temporary variables to hold state and coefficient values */ - q31_t y1, y2; /* State variables */ -#endif - - - /* 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - /* 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* copy second buffer in reversal manner for remaining samples */ - *pScr2-- = *px++; - - /* Decrement 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 */ - - /* 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); - - /* Temporary pointer for scratch2 */ - py = pScratch2; - - - /* Initialization of pIn2 pointer */ - pIn2 = py; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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 = read_q15x2_ia (&pScr1); - - /* Read next two samples from scratch1 buffer */ - x2 = read_q15x2_ia (&pScr1); - - tapCnt = (srcBLen) >> 2U; - - while (tapCnt > 0U) - { - - /* Read four samples from smaller buffer */ - y1 = read_q15x2_ia ((q15_t **) &pIn2); - y2 = read_q15x2_ia ((q15_t **) &pIn2); - - /* 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 = read_q15x2_ia (&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 = read_q15x2_ia (&pScr1); - -#ifndef ARM_MATH_BIG_ENDIAN - x3 = __PKHBT(x2, x1, 0); -#else - x3 = __PKHBT(x1, x2, 0); -#endif - - acc3 = __SMLADX(x3, y2, acc3); - - /* Decrement 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 loop counter */ - tapCnt--; - } - - blkCnt--; - - /* Store the results in the accumulators in the destination buffer. */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); -#else - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); - write_q15x2_ia (&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; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (srcALen + srcBLen - 1U) & 0x3; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (srcALen + srcBLen - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* 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 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 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_q15.c deleted file mode 100644 index 3102a05..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_q15.c +++ /dev/null @@ -1,663 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_fast_q15.c - * Description: Fast Q15 Convolution - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup Conv - @{ - */ - -/** - @brief Convolution of Q15 sequences (fast version). - @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 - - @par Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref 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( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst) -{ - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - q15_t *pOut = pDst; /* Output pointer */ - q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ - const q15_t *px; /* Intermediate inputA pointer */ - const q15_t *py; /* Intermediate inputB pointer */ - const 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; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* 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 - * ----------------------*/ - - /* 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 MAC count */ - count++; - - /* Decrement 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(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ - sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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 = read_q15x2 ((q15_t *) px); - /* read x[1], x[2] samples */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2_da ((q15_t **) &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 = read_q15x2 ((q15_t *) px); - - /* Read x[3], x[4] */ - x3 = read_q15x2 ((q15_t *) 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 = read_q15x2_da ((q15_t **) &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 = read_q15x2 ((q15_t *) px + 2); - - /* Read x[5], x[6] */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) 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. */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pOut, __PKHBT((acc0 >> 15), (acc1 >> 15), 16)); - write_q15x2_ia (&pOut, __PKHBT((acc2 >> 15), (acc3 >> 15), 16)); -#else - write_q15x2_ia (&pOut, __PKHBT((acc1 >> 15), (acc0 >> 15), 16)); - write_q15x2_ia (&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 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 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 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 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 loop counter */ - k--; - } - - /* Store the result in the accumulator in the destination buffer. */ - *pOut++ = (q15_t) (sum >> 15); - - /* Increment MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pSrc2; - - /* Decrement 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(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied - * with y[srcBLen - 3], y[srcBLen - 4] respectively */ - sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - - /* Decrement 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 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 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 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--; - } - -} - -/** - @} end of Conv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_q31.c deleted file mode 100644 index e87eddc..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_fast_q31.c +++ /dev/null @@ -1,558 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_fast_q31.c - * Description: Fast Q31 Convolution - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup Conv - @{ - */ - -/** - @brief Convolution of Q31 sequences (fast version). - @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 - - @par Scaling and Overflow Behavior - 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. - @remark - Refer to \ref arm_conv_q31() for a slower implementation of this function which uses 64-bit accumulation to provide higher precision. - */ - -void arm_conv_fast_q31( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst) -{ - const q31_t *pIn1; /* InputA pointer */ - const q31_t *pIn2; /* InputB pointer */ - q31_t *pOut = pDst; /* Output pointer */ - const q31_t *px; /* Intermediate inputA pointer */ - const q31_t *py; /* Intermediate inputB pointer */ - const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ - q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ - q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* 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; - - /* 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 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 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 MAC count */ - count++; - - /* Decrement 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-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 - 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 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 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 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 loop counter */ - k--; - } - - /* Store the result in the accumulator in the destination buffer. */ - *pOut++ = sum << 1; - - /* Increment MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pSrc2; - - /* Decrement 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 loop counter */ - k--; - } - - /* Store the result in the accumulator in the destination buffer. */ - *pOut++ = sum << 1; - - /* Increment MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pSrc2; - - /* Decrement 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) - { - /* Perform the multiply-accumulate */ - /* 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 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 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 loop counter */ - blockSize3--; - } - -} - -/** - @} end of Conv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_opt_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_opt_q15.c deleted file mode 100644 index 6ad34cd..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_opt_q15.c +++ /dev/null @@ -1,362 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_opt_q15.c - * Description: Convolution of Q15 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 Scaling and Overflow Behavior - 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. - @remark - Refer to \ref arm_conv_fast_q15() for a faster but less precise version of this function. - */ - -void arm_conv_opt_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - q15_t * pScratch1, - q15_t * pScratch2) -{ - q63_t acc0; /* Accumulators */ - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - q15_t *pOut = pDst; /* Output pointer */ - q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ - q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ - const q15_t *px; /* Intermediate inputA pointer */ - q15_t *py; /* Intermediate inputB pointer */ - uint32_t j, k, blkCnt; /* Loop counter */ - uint32_t tapCnt; /* Loop count */ - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc1, acc2, acc3; /* Accumulators */ - q31_t x1, x2, x3; /* Temporary variables to hold state and coefficient values */ - q31_t y1, y2; /* State variables */ -#endif - - - /* 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - /* 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* copy second buffer in reversal manner for remaining samples */ - *pScr2-- = *px++; - - /* Decrement 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 */ - - /* 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); - - /* Temporary pointer for scratch2 */ - py = pScratch2; - - - /* Initialization of pIn2 pointer */ - pIn2 = py; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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 = read_q15x2_ia (&pScr1); - - /* Read next two samples from scratch1 buffer */ - x2 = read_q15x2_ia (&pScr1); - - tapCnt = (srcBLen) >> 2U; - - while (tapCnt > 0U) - { - - /* Read four samples from smaller buffer */ - y1 = read_q15x2_ia ((q15_t **) &pIn2); - y2 = read_q15x2_ia ((q15_t **) &pIn2); - - /* 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 = read_q15x2_ia (&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 = read_q15x2_ia (&pScr1); - -#ifndef ARM_MATH_BIG_ENDIAN - x3 = __PKHBT(x2, x1, 0); -#else - x3 = __PKHBT(x1, x2, 0); -#endif - - acc3 = __SMLALDX(x3, y2, acc3); - - /* Decrement 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 loop counter */ - tapCnt--; - } - - blkCnt--; - - /* Store the results in the accumulators in the destination buffer. */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); -#else - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); - write_q15x2_ia (&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; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (srcALen + srcBLen - 1U) & 0x3; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (srcALen + srcBLen - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* 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 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 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_opt_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_opt_q7.c deleted file mode 100644 index fb9e2ec..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_opt_q7.c +++ /dev/null @@ -1,360 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_opt_q7.c - * Description: Convolution of Q7 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 Scaling and Overflow Behavior - 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( - const q7_t * pSrcA, - uint32_t srcALen, - const q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst, - q15_t * pScratch1, - q15_t * pScratch2) -{ - q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch */ - q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch */ - q15_t x4; /* Temporary input variable */ - q15_t *py; /* Temporary input2 pointer */ - q31_t acc0, acc1, acc2, acc3; /* Accumulators */ - const q7_t *pIn1, *pIn2; /* InputA and inputB pointer */ - uint32_t j, k, blkCnt, tapCnt; /* Loop counter */ - q31_t x1, x2, x3, y1; /* Temporary input variables */ - const q7_t *px; /* Temporary input1 pointer */ - 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; - } - - /* 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 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 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 */ - /* 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 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; - - /* Actual convolution process starts here */ - blkCnt = (srcALen + srcBLen - 1U) >> 2U; - - 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 = read_q15x2_ia (&pScr1); - - /* Read next two samples from scratch1 buffer */ - x2 = read_q15x2_ia (&pScr1); - - tapCnt = (srcBLen) >> 2U; - - while (tapCnt > 0U) - { - /* Read four samples from smaller buffer */ - y1 = read_q15x2_ia (&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 = read_q15x2_ia (&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 = read_q15x2_ia (&pScr2); - - acc0 = __SMLAD(x2, y1, acc0); - - acc2 = __SMLAD(x1, y1, acc2); - - acc1 = __SMLADX(x3, y1, acc1); - - x2 = read_q15x2_ia (&pScr1); - -#ifndef ARM_MATH_BIG_ENDIAN - x3 = __PKHBT(x2, x1, 0); -#else - x3 = __PKHBT(x1, x2, 0); -#endif - - acc3 = __SMLADX(x3, y1, acc3); - - /* Decrement 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 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)); - - write_q7x4_ia (&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 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 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_f32.c deleted file mode 100644 index 34c77f2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_f32.c +++ /dev/null @@ -1,672 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_partial_f32.c - * Description: Partial convolution of floating-point sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 to \ref arm_conv_f32() for details on fixed point behavior. - - @par Fast Versions - 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. - - @par Opt Versions - 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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] - */ - -arm_status arm_conv_partial_f32( - const float32_t * pSrcA, - uint32_t srcALen, - const float32_t * pSrcB, - uint32_t srcBLen, - float32_t * pDst, - uint32_t firstIndex, - uint32_t numPoints) -{ -#if defined (ARM_MATH_DSP) - const float32_t *pIn1 = pSrcA; /* InputA pointer */ - const float32_t *pIn2 = pSrcB; /* InputB pointer */ - float32_t *pOut = pDst; /* Output pointer */ - const float32_t *px; /* Intermediate inputA pointer */ - const float32_t *py; /* Intermediate inputB pointer */ - const float32_t *pSrc1, *pSrc2; /* Intermediate pointers */ - float32_t sum; /* Accumulator */ - uint32_t j, k, count, blkCnt, check; - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - arm_status status; /* Status of Partial convolution */ - -#if defined (ARM_MATH_LOOPUNROLL) - float32_t acc0, acc1, acc2, acc3; /* Accumulator */ - float32_t x0, x1, x2, x3, c0; /* Temporary variables */ -#endif - - /* 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 : 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 */ - pSrc1 = pIn2 + firstIndex; - py = pSrc1; - - /* ------------------------ - * Stage1 process - * ----------------------*/ - - /* The first stage starts here */ - while (blockSize1 > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0.0f; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += *px++ * *py--; - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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) - { - pSrc1 = pIn1 + firstIndex - srcBLen + 1; - } - else - { - pSrc1 = pIn1; - } - px = pSrc1; - - /* 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) - { -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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-accumulate */ - /* 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-accumulate */ - /* 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 = pSrc1 + count; - py = pSrc2; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (uint32_t) blockSize2 % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0.0f; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - while (k > 0U) - { - /* Perform the multiply-accumulates */ - sum += *px++ * *py--; - sum += *px++ * *py--; - sum += *px++ * *py--; - sum += *px++ * *py--; - - /* Decrement loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += *px++ * *py--; - - /* Decrement loop counter */ - k--; - } - - /* Store the result in the accumulator in the destination buffer. */ - *pOut++ = sum; - - /* Increment MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pSrc1 + count; - py = pSrc2; - - /* Decrement 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 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 = pSrc1 + 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 > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0.0f; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* sum += x[srcALen-1] * y[srcBLen-1] */ - sum += *px++ * *py--; - - /* Decrement 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 MAC count */ - count--; - - /* Decrement the loop counter */ - blockSize3--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -#else -/* alternate version for CM0_FAMILY */ - - const float32_t *pIn1 = pSrcA; /* InputA pointer */ - const 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_MATH_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 */ - 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 */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -#endif /* defined(ARM_MATH_DSP) */ -} - -/** - @} end of PartialConv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c deleted file mode 100644 index 7166b57..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c +++ /dev/null @@ -1,387 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_partial_fast_opt_q15.c - * Description: Fast Q15 Partial convolution - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup PartialConv - @{ - */ - -/** - @brief Partial convolution of Q15 sequences (fast version). - @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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] - - @remark - Refer to \ref 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_opt_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const 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; /* Accumulator */ - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - const q15_t *px; /* Intermediate inputA pointer */ - q15_t *py; /* Intermediate inputB pointer */ - uint32_t j, k, blkCnt; /* Loop counter */ - uint32_t tapCnt; /* Loop count */ - arm_status status; /* Status variable */ - q31_t x1; /* Temporary variables to hold state and coefficient values */ - q31_t y1; /* State variables */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc1, acc2, acc3; /* Accumulator */ - q31_t x2, x3; /* Temporary variables to hold state and coefficient values */ - q31_t y2; /* State variables */ -#endif - - /* 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - /* 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* copy second buffer in reversal manner for remaining samples */ - *pScr2-- = *px++; - - /* Decrement 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; - - /* Actual convolution process starts here */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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 = read_q15x2_ia (&pScr1); - - /* Read next two samples from scratch1 buffer */ - x2 = read_q15x2_ia (&pScr1); - - tapCnt = (srcBLen) >> 2U; - - while (tapCnt > 0U) - { - - /* Read four samples from smaller buffer */ - y1 = read_q15x2_ia ((q15_t **) &pIn2); - y2 = read_q15x2_ia ((q15_t **) &pIn2); - - /* 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 = read_q15x2_ia (&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 = read_q15x2_ia (&pScr1); - -#ifndef ARM_MATH_BIG_ENDIAN - x3 = __PKHBT(x2, x1, 0); -#else - x3 = __PKHBT(x1, x2, 0); -#endif - - /* multiply and accumlate */ - acc3 = __SMLADX(x3, y2, acc3); - - /* Decrement 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 loop counter */ - tapCnt--; - } - - blkCnt--; - - /* Store the results in the accumulators in the destination buffer. */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); -#else - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); - write_q15x2_ia (&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; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numPoints & 0x3; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numPoints; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* 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 = read_q15x2_ia (&pScr1); - - /* Read two samples from smaller buffer */ - y1 = read_q15x2_ia ((q15_t **) &pIn2); - - /* multiply and accumlate */ - acc0 = __SMLAD(x1, y1, acc0); - - /* Decrement 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 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); -} - -/** - @} end of PartialConv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_q15.c deleted file mode 100644 index 535fbc7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_q15.c +++ /dev/null @@ -1,700 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_partial_fast_q15.c - * Description: Fast Q15 Partial convolution - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup PartialConv - @{ - */ - -/** - @brief Partial convolution of Q15 sequences (fast version). - @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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] - @remark - Refer to \ref 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( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - uint32_t firstIndex, - uint32_t numPoints) -{ - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - q15_t *pOut = pDst; /* Output pointer */ - q31_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ - const q15_t *px; /* Intermediate inputA pointer */ - const q15_t *py; /* Intermediate inputB pointer */ - const q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ - q31_t x0, x1, x2, x3, c0; /* Temporary input variables */ - uint32_t j, k, count, 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 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 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 MAC count */ - count++; - - /* Decrement 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-accumulate */ - /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ - sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ - sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - - /* Decrement 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 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 MAC count */ - count++; - - /* Decrement 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) - { - pSrc1 = pIn1 + firstIndex - srcBLen + 1; - } - else - { - pSrc1 = pIn1; - } - px = pSrc1; - - /* 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 unrolling: Compute 4 outputs at a time */ - 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 = read_q15x2 ((q15_t *) px); - /* read x[1], x[2] samples */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2_da ((q15_t **) &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 = read_q15x2 ((q15_t *) px); - - /* Read x[3], x[4] */ - x3 = read_q15x2 ((q15_t *) 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 = read_q15x2_da ((q15_t **) &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 = read_q15x2 ((q15_t *) px + 2); - - /* Read x[5], x[6] */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) px); - px++; - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) px + 1); - px += 2U; - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) px + 1); - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) 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 - write_q15x2_ia (&pOut, __PKHBT(acc0 >> 15, acc1 >> 15, 16)); - write_q15x2_ia (&pOut, __PKHBT(acc2 >> 15, acc3 >> 15, 16)); -#else - write_q15x2_ia (&pOut, __PKHBT(acc1 >> 15, acc0 >> 15, 16)); - write_q15x2_ia (&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 = pSrc1 + 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 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 = pSrc1 + count; - py = pSrc2; - - /* Decrement 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 = pSrc1 + 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(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied - * with y[srcBLen - 3], y[srcBLen - 4] respectively */ - sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - - /* Decrement 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); - -} - -/** - @} end of PartialConv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_q31.c deleted file mode 100644 index fe2e2bb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_fast_q31.c +++ /dev/null @@ -1,618 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_partial_fast_q31.c - * Description: Fast Q31 Partial convolution - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup PartialConv - @{ - */ - -/** - @brief Partial convolution of Q31 sequences (fast version). - @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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] - - @remark - Refer to \ref 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( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst, - uint32_t firstIndex, - uint32_t numPoints) -{ - const q31_t *pIn1; /* InputA pointer */ - const q31_t *pIn2; /* InputB pointer */ - q31_t *pOut = pDst; /* Output pointer */ - const q31_t *px; /* Intermediate inputA pointer */ - const q31_t *py; /* Intermediate inputB pointer */ - const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ - q31_t sum; /* Accumulators */ - uint32_t j, k, count, check, blkCnt; - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - arm_status status; /* Status of Partial convolution */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc0, acc1, acc2, acc3; /* Accumulators */ - q31_t x0, x1, x2, x3, c0; -#endif - - /* 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 : 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 stage starts here */ - while (blockSize1 > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum = (q31_t) ((((q63_t) sum << 32) + - ((q63_t) *px++ * (*py--))) >> 32); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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) - { - pSrc1 = pIn1 + firstIndex - srcBLen + 1; - } - else - { - pSrc1 = pIn1; - } - px = pSrc1; - - /* 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) - { -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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 = pSrc1 + count; - py = pSrc2; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (uint32_t) blockSize2 % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum = (q31_t) ((((q63_t) sum << 32) + - ((q63_t) *px++ * (*py--))) >> 32); - - /* Decrement loop counter */ - k--; - } - - /* Store the result in the accumulator in the destination buffer. */ - *pOut++ = sum << 1; - - /* Increment MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pSrc1 + count; - py = pSrc2; - - /* Decrement 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 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 = pSrc1 + 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 > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 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 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_opt_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_opt_q15.c deleted file mode 100644 index 21999d2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_opt_q15.c +++ /dev/null @@ -1,386 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_partial_opt_q15.c - * Description: Partial convolution of Q15 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] - - @remark - Refer to \ref arm_conv_partial_fast_q15() for a faster but less precise version of this function. - */ - -arm_status arm_conv_partial_opt_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const 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; /* Accumulator */ - q31_t x1; /* Temporary variables to hold state and coefficient values */ - q31_t y1; /* State variables */ - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - const q15_t *px; /* Intermediate inputA pointer */ - q15_t *py; /* Intermediate inputB pointer */ - uint32_t j, k, blkCnt; /* Loop counter */ - uint32_t tapCnt; /* Loop count */ - arm_status status; /* Status variable */ - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc1, acc2, acc3; /* Accumulator */ - q31_t x2, x3; /* Temporary variables to hold state and coefficient values */ - q31_t y2; /* State variables */ -#endif - - /* 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - /* 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* copy second buffer in reversal manner for remaining samples */ - *pScr2-- = *px++; - - /* Decrement 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; - - /* Actual convolution process starts here */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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 = read_q15x2_ia (&pScr1); - - /* Read next two samples from scratch1 buffer */ - x2 = read_q15x2_ia (&pScr1); - - tapCnt = (srcBLen) >> 2U; - - while (tapCnt > 0U) - { - - /* Read four samples from smaller buffer */ - y1 = read_q15x2_ia ((q15_t **) &pIn2); - y2 = read_q15x2_ia ((q15_t **) &pIn2); - - /* 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 = read_q15x2_ia (&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 = read_q15x2_ia (&pScr1); - -#ifndef ARM_MATH_BIG_ENDIAN - x3 = __PKHBT(x2, x1, 0); -#else - x3 = __PKHBT(x1, x2, 0); -#endif - - acc3 = __SMLALDX(x3, y2, acc3); - - /* Decrement 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 loop counter */ - tapCnt--; - } - - blkCnt--; - - /* Store the results in the accumulators in the destination buffer. */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); -#else - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); - write_q15x2_ia (&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; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numPoints & 0x3; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numPoints; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* 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 = read_q15x2_ia (&pScr1); - - /* Read two samples from smaller buffer */ - y1 = read_q15x2_ia ((q15_t **) &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 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); -} - -/** - @} end of PartialConv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_opt_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_opt_q7.c deleted file mode 100644 index 811f386..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_opt_q7.c +++ /dev/null @@ -1,390 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_partial_opt_q7.c - * Description: Partial convolution of Q7 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] - */ - -arm_status arm_conv_partial_opt_q7( - const q7_t * pSrcA, - uint32_t srcALen, - const 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 */ - const q7_t *pIn1, *pIn2; /* InputA and inputB pointer */ - uint32_t j, k, blkCnt, tapCnt; /* Loop counter */ - const 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 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 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 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) - { - /* Initialize temporary scratch pointer as scratch1 */ - pScr1 = pScratch1; - - /* Clear Accumulators */ - acc0 = 0; - acc1 = 0; - acc2 = 0; - acc3 = 0; - - /* Read two samples from scratch1 buffer */ - x1 = read_q15x2_ia (&pScr1); - - /* Read next two samples from scratch1 buffer */ - x2 = read_q15x2_ia (&pScr1); - - tapCnt = (srcBLen) >> 2U; - - while (tapCnt > 0U) - { - /* Read four samples from smaller buffer */ - y1 = read_q15x2_ia (&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 = read_q15x2_ia (&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 = read_q15x2_ia (&pScr2); - - acc0 = __SMLAD(x2, y1, acc0); - - acc2 = __SMLAD(x1, y1, acc2); - - acc1 = __SMLADX(x3, y1, acc1); - - x2 = read_q15x2_ia (&pScr1); - -#ifndef ARM_MATH_BIG_ENDIAN - x3 = __PKHBT(x2, x1, 0); -#else - x3 = __PKHBT(x1, x2, 0); -#endif - - acc3 = __SMLADX(x3, y1, acc3); - - /* Decrement 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 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)); - - write_q7x4_ia (&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 = read_q15x2_ia (&pScr1); - - /* Read two samples from smaller buffer */ - y1 = read_q15x2_ia (&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 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); -} - -/** - @} end of PartialConv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q15.c deleted file mode 100644 index eb24641..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q15.c +++ /dev/null @@ -1,752 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_partial_q15.c - * Description: Partial convolution of Q15 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] - - @remark - Refer to \ref arm_conv_partial_fast_q15() for a faster but less precise version of this function. - @remark - Refer to \ref arm_conv_partial_opt_q15() for a faster implementation of this function using scratch buffers. - */ - -arm_status arm_conv_partial_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - uint32_t firstIndex, - uint32_t numPoints) -{ - -#if defined (ARM_MATH_DSP) - - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - q15_t *pOut = pDst; /* Output pointer */ - q63_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ - const q15_t *px; /* Intermediate inputA pointer */ - const q15_t *py; /* Intermediate inputB pointer */ - const q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ - q31_t x0, x1, x2, x3, c0; /* Temporary input variables to hold state and coefficient values */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt, check; - 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 : 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 > 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 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 MAC count */ - count++; - - /* Decrement 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-accumulate */ - /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ - sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ - sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - - /* Decrement 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 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 MAC count */ - count++; - - /* Decrement 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) - { - pSrc1 = pIn1 + firstIndex - srcBLen + 1; - } - else - { - pSrc1 = pIn1; - } - px = pSrc1; - - /* 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 unrolling: Compute 4 outputs at a time */ - 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 = read_q15x2 ((q15_t *) px); - /* read x[1], x[2] samples */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2_da ((q15_t **) &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 = read_q15x2 ((q15_t *) px); - - /* Read x[3], x[4] */ - x3 = read_q15x2 ((q15_t *) 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 = read_q15x2_da ((q15_t **) &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 = read_q15x2 ((q15_t *) px + 2); - - /* Read x[5], x[6] */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) px); - px++; - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) px + 1); - px += 2U; - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) px + 1); - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) 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 - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); -#else - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); - write_q15x2_ia (&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 = pSrc1 + count; - py = pSrc2; - - /* Decrement 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 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) ((q31_t) *px++ * *py--); - - /* Decrement 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 = pSrc1 + count; - py = pSrc2; - - /* Decrement 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 = pSrc1 + 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 > 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] are multiplied - * with y[srcBLen - 1], y[srcBLen - 2] respectively */ - sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied - * with y[srcBLen - 3], y[srcBLen - 4] respectively */ - sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - - /* Decrement 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 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 MAC count */ - count--; - - /* Decrement 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 = count; - - while (k > 0U) - { - /* Perform the multiply-accumulates */ - /* sum += x[srcALen-1] * y[srcBLen-1] */ - sum = __SMLALD(*px++, *py--, sum); - - /* Decrement 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 MAC count */ - count--; - - /* Decrement the loop counter */ - blockSize3--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -#else /* #if defined (ARM_MATH_DSP) */ - - const q15_t *pIn1 = pSrcA; /* InputA pointer */ - const 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_MATH_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 = 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[i - j]); - } - } - - /* Store the output in the destination buffer */ - pDst[i] = (q15_t) __SSAT((sum >> 15U), 16U); - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -#endif /* #if defined (ARM_MATH_DSP) */ - -} - -/** - @} end of PartialConv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q31.c deleted file mode 100644 index cfb1ad0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q31.c +++ /dev/null @@ -1,633 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_partial_q31.c - * Description: Partial convolution of Q31 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] - - @remark - Refer to \ref arm_conv_partial_fast_q31() for a faster but less precise implementation of this function. - */ - -arm_status arm_conv_partial_q31( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst, - uint32_t firstIndex, - uint32_t numPoints) -{ - -#if defined(ARM_MATH_DSP) - - const q31_t *pIn1; /* InputA pointer */ - const q31_t *pIn2; /* InputB pointer */ - q31_t *pOut = pDst; /* Output pointer */ - const q31_t *px; /* Intermediate inputA pointer */ - const q31_t *py; /* Intermediate inputB pointer */ - const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ - q63_t sum; /* Accumulator */ - uint32_t j, k, count, blkCnt, check; - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - arm_status status; /* Status of Partial convolution */ - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc0, acc1, acc2; /* Accumulator */ - q31_t x0, x1, x2, c0; /* Temporary variables */ -#endif - - /* 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 : 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 stage starts here */ - while (blockSize1 > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += (q63_t) *px++ * (*py--); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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) - { - pSrc1 = pIn1 + firstIndex - srcBLen + 1; - } - else - { - pSrc1 = pIn1; - } - px = pSrc1; - - /* 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) - { -#if defined (ARM_MATH_LOOPUNROLL) - - /* 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-accumulate */ - /* 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-accumulate */ - /* 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 = pSrc1 + count; - py = pSrc2; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize2 - 3 * (blockSize2 / 3); - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += (q63_t) *px++ * *py--; - - /* Decrement loop counter */ - k--; - } - - /* Store the result in the accumulator in the destination buffer. */ - *pOut++ = (q31_t) (sum >> 31); - - /* Increment MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pSrc1 + count; - py = pSrc2; - - /* Decrement 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 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 = pSrc1 + 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 > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* sum += x[srcALen-1] * y[srcBLen-1] */ - sum += (q63_t) *px++ * *py--; - - /* Decrement 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 MAC count */ - count--; - - /* Decrement the loop counter */ - blockSize3--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -#else -/* alternate version for CM0_FAMILY */ - - const q31_t *pIn1 = pSrcA; /* InputA pointer */ - const 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_MATH_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 = 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[i - j]); - } - } - - /* Store the output in the destination buffer */ - pDst[i] = (q31_t) (sum >> 31U); - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} - -/** - @} end of PartialConv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q7.c deleted file mode 100644 index bcfc51e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_partial_q7.c +++ /dev/null @@ -1,752 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_partial_q7.c - * Description: Partial convolution of Q7 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] - - @remark - Refer to \ref arm_conv_partial_opt_q7() for a faster implementation of this function. - */ - -arm_status arm_conv_partial_q7( - const q7_t * pSrcA, - uint32_t srcALen, - const q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst, - uint32_t firstIndex, - uint32_t numPoints) -{ - -#if ARM_MATH_DSP - - const q7_t *pIn1; /* InputA pointer */ - const q7_t *pIn2; /* InputB pointer */ - q7_t *pOut = pDst; /* Output pointer */ - const q7_t *px; /* Intermediate inputA pointer */ - const q7_t *py; /* Intermediate inputB pointer */ - const q7_t *pSrc1, *pSrc2; /* Intermediate pointers */ - q31_t sum; /* Accumulator */ - uint32_t j, k, count, blkCnt, check; /* Loop counters */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - arm_status status; /* Status of Partial convolution */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc0, acc1, acc2, acc3; /* Accumulator */ - q31_t input1, input2; /* Temporary input variables */ - q15_t in1, in2; /* Temporary input variables */ - q7_t x0, x1, x2, x3, c0, c1; /* Temporary variables to hold state and coefficient values */ -#endif - - /* 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 : 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 stage starts here */ - while (blockSize1 > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += ((q31_t) * px++ * *py--); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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) - { - pSrc1 = pIn1 + firstIndex - srcBLen + 1; - } - else - { - pSrc1 = pIn1; - } - px = pSrc1; - - /* 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) - { -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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 = pSrc1 + count; - py = pSrc2; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (uint32_t) blockSize2 % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - 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-accumulate */ - 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-accumulate */ - sum = __SMLAD(input1, input2, sum); - - /* Decrement loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += ((q31_t) * px++ * *py--); - - /* Decrement 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 = pSrc1 + count; - py = pSrc2; - - /* Decrement 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 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 = pSrc1 + 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 > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulates */ - /* sum += x[srcALen-1] * y[srcBLen-1] */ - sum += ((q31_t) * px++ * *py--); - - /* Decrement 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 MAC count */ - count--; - - /* Decrement the loop counter */ - blockSize3--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -#else -/* alternate version for CM0_FAMILY */ - - const q7_t *pIn1 = pSrcA; /* InputA pointer */ - const 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_MATH_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 = 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[i - j])); - } - } - - /* Store the output in the destination buffer */ - pDst[i] = (q7_t) __SSAT((sum >> 7U), 8U); - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} - -/** - @} end of PartialConv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q15.c deleted file mode 100644 index c088b8a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q15.c +++ /dev/null @@ -1,858 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_q15.c - * Description: Convolution of Q15 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref arm_conv_fast_q15() for a faster but less precise version of this function. - @remark - Refer to \ref arm_conv_opt_q15() for a faster implementation of this function using scratch buffers. - */ -#if defined(ARM_MATH_MVEI) -#include "arm_helium_utils.h" -#include "arm_vec_filtering.h" - -void arm_conv_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst) -{ - const q15_t *pIn1 = pSrcA; /* inputA pointer */ - const q15_t *pIn2 = pSrcB; /* inputB pointer */ - /* - * Loop to perform MAC operations according to correlation equation - */ - const q15_t *pX; - const q15_t *pY; - const q15_t *pA; - const q15_t *pB; - int32_t i = 0U, j = 0; /* loop counters */ - int32_t block1, block2, block3; - - - uint16x8_t decrIdxVec = vddupq_u16(7, 1); - - - if (srcALen < srcBLen) - { - /* - * Initialization to inputB pointer - */ - pIn1 = pSrcB; - /* - * Initialization to the end of inputA pointer - */ - pIn2 = pSrcA; - /* - * Swapping the lengths - */ - j = srcALen; - srcALen = srcBLen; - srcBLen = j; - } - - block1 = srcBLen - 1; - block2 = srcALen - srcBLen + 1; - block3 = srcBLen - 1; - - pA = pIn1; - pB = pIn2 - 7; - - for (i = 0; i <= block1 - 2; i += 2) - { - uint32_t count = i + 1; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_Q15(acc0, acc1, pX, pY, count); - *pDst++ = (q15_t) acc0; - *pDst++ = (q15_t) acc1; - pB += 2; - } - for (; i < block1; i++) - { - uint32_t count = i + 1; - int64_t acc = 0LL; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_SINGLE_Q15(acc, pX, pY, count); - *pDst++ = (q15_t) acc; - pB++; - } - - for (i = 0; i <= block2 - 4; i += 4) - { - uint32_t count = srcBLen; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - int64_t acc2 = 0LL; - int64_t acc3 = 0LL; - - pX = pA; - pY = pB; - /* - * compute 4 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CONV_QUAD_INC_X_FIXED_SIZE_Q15(acc0, acc1, acc2, acc3, pX, pY, count); - *pDst++ = (q15_t) acc0; - *pDst++ = (q15_t) acc1; - *pDst++ = (q15_t) acc2; - *pDst++ = (q15_t) acc3; - - pA += 4; - } - for (; i <= block2 - 2; i += 2) - { - uint32_t count = srcBLen; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_Q15(acc0, acc1, pX, pY, count); - *pDst++ = (q15_t) acc0; - *pDst++ = (q15_t) acc1; - - pA += 2; - } - if (block2 & 1) - { - uint32_t count = srcBLen; - int64_t acc = 0LL; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_SINGLE_Q15(acc, pX, pY, count); - *pDst++ = (q15_t) acc; - pA++; - } - - for (i = block3; i >= 1; i -= 2) - { - uint32_t count = i; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_Q15(acc0, acc1, pX, pY, count); - *pDst++ = (q15_t) acc0; - *pDst++ = (q15_t) acc1; - pA += 2; - } - for (; i >= 1; i--) - { - uint32_t count = i; - int64_t acc = 0LL; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_SINGLE_Q15(acc, pX, pY, count); - *pDst++ = (q15_t) acc; - pA++; - } -} -#else -void arm_conv_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst) -{ - -#if defined (ARM_MATH_DSP) - - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - q15_t *pOut = pDst; /* Output pointer */ - q63_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ - const q15_t *px; /* Intermediate inputA pointer */ - const q15_t *py; /* Intermediate inputB pointer */ - const q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ - q31_t x0, x1, x2, x3, c0; /* Temporary input variables to hold state and coefficient values */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* 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); - - /* -------------------------- - * 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 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 MAC count */ - count++; - - /* Decrement 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-accumulate */ - /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ - sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ - sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - - /* Decrement 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-accumulate */ - sum = __SMLALD(*px++, *py--, sum); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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 unrolling: Compute 4 outputs at a time */ - 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 = read_q15x2 ((q15_t *) px); - - /* read x[1], x[2] samples */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2_da ((q15_t **) &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 = read_q15x2 ((q15_t *) px); - - /* Read x[3], x[4] */ - x3 = read_q15x2 ((q15_t *) 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 = read_q15x2_da ((q15_t **) &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 = read_q15x2 ((q15_t *) px + 2); - - /* Read x[5], x[6] */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) px); - px++; - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) px + 1); - px += 2U; - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) px + 1); - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) 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. */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); -#else - write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); - write_q15x2_ia (&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 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 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) - { - /* Perform the multiply-accumulate */ - /* x[srcALen - srcBLen + 1], x[srcALen - srcBLen + 2] are multiplied - * with y[srcBLen - 1], y[srcBLen - 2] respectively */ - sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied - * with y[srcBLen - 3], y[srcBLen - 4] respectively */ - sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); - - /* Decrement 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 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 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 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 loop counter */ - blockSize3--; - } - -#else /* #if defined (ARM_MATH_DSP) */ - - const q15_t *pIn1 = pSrcA; /* InputA pointer */ - const q15_t *pIn2 = pSrcB; /* InputB pointer */ - q63_t sum; /* Accumulator */ - uint32_t i, j; /* Loop counters */ - - /* Loop to calculate convolution for output length number of values */ - 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 = 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[i - j]); - } - } - - /* Store the output in the destination buffer */ - pDst[i] = (q15_t) __SSAT((sum >> 15U), 16U); - } - -#endif /* #if defined (ARM_MATH_DSP) */ - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Conv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q31.c deleted file mode 100644 index 88c6cc4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q31.c +++ /dev/null @@ -1,745 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_q31.c - * Description: Convolution of Q31 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @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. - 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. - - @remark - Refer to \ref arm_conv_fast_q31() for a faster but less precise implementation of this function. - */ -#if defined(ARM_MATH_MVEI) -#include "arm_helium_utils.h" -#include "arm_vec_filtering.h" - -void arm_conv_q31( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst) -{ - const q31_t *pIn1 = pSrcA; /* inputA pointer */ - const q31_t *pIn2 = pSrcB; /* inputB pointer */ - /* - * Loop to perform MAC operations according to correlation equation - */ - const q31_t *pX; - const q31_t *pY; - const q31_t *pA; - const q31_t *pB; - int32_t i = 0U, j = 0; /* loop counters */ - int32_t block1, block2, block3; - uint32_t vddupStartIdx = 3; - uint32x4_t decrIdxVec = vddupq_u32(vddupStartIdx, 1); - - if (srcALen < srcBLen) - { - /* - * Initialization to inputB pointer - */ - pIn1 = pSrcB; - /* - * Initialization to the end of inputA pointer - */ - pIn2 = pSrcA; - /* - * Swapping the lengths - */ - j = srcALen; - srcALen = srcBLen; - srcBLen = j; - } - - block1 = srcBLen - 1; - block2 = srcALen - srcBLen + 1; - block3 = srcBLen - 1; - - pA = pIn1; - pB = pIn2 - 3; - - for (i = 0; i <= block1 - 2; i += 2) - { - uint32_t count = i + 1; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_Q31(acc0, acc1, pX, pY, count); - - *pDst++ = (q31_t) acc0; - *pDst++ = (q31_t) acc1; - pB += 2; - } - for (; i < block1; i++) - { - uint32_t count = i + 1; - int64_t acc = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CONV_SINGLE_Q31(acc, pX, pY, count); - - *pDst++ = (q31_t) acc; - pB++; - } - - for (i = 0; i <= block2 - 4; i += 4) - { - uint32_t count = srcBLen; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - int64_t acc2 = 0LL; - int64_t acc3 = 0LL; - - pX = pA; - pY = pB; - /* - * compute 4 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CONV_QUAD_INC_X_FIXED_SIZE_Q31(acc0, acc1, acc2, acc3, pX, pY, count); - *pDst++ = (q31_t) acc0; - *pDst++ = (q31_t) acc1; - *pDst++ = (q31_t) acc2; - *pDst++ = (q31_t) acc3; - - pA += 4; - } - - for (; i <= block2 - 2; i += 2) - { - uint32_t count = srcBLen; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_Q31(acc0, acc1, pX, pY, count); - *pDst++ = (q31_t) acc0; - *pDst++ = (q31_t) acc1; - - pA += 2; - } - if (block2 & 1) - { - uint32_t count = srcBLen; - int64_t acc = 0LL; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_SINGLE_Q31(acc, pX, pY, count); - *pDst++ = (q31_t) acc; - pA++; - } - - for (i = block3; i >= 2; i -= 2) - { - uint32_t count = i; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_Q31(acc0, acc1, pX, pY, count); - *pDst++ = (q31_t) acc0; - *pDst++ = (q31_t) acc1; - pA += 2; - } - - for (; i >= 1; i--) - { - uint32_t count = i; - int64_t acc = 0LL; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_SINGLE_Q31(acc, pX, pY, count); - *pDst++ = (q31_t) acc; - pA++; - } - -} - -#else -void arm_conv_q31( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst) -{ - -#if (1) -//#if !defined(ARM_MATH_CM0_FAMILY) - - const q31_t *pIn1; /* InputA pointer */ - const q31_t *pIn2; /* InputB pointer */ - q31_t *pOut = pDst; /* Output pointer */ - const q31_t *px; /* Intermediate inputA pointer */ - const q31_t *py; /* Intermediate inputB pointer */ - const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ - q63_t sum; /* Accumulators */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc0, acc1, acc2; /* Accumulators */ - q31_t x0, x1, x2, c0; /* Temporary variables to hold state and coefficient values */ -#endif - - /* 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += (q63_t) *px++ * *py--; - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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) - { -#if defined (ARM_MATH_LOOPUNROLL) - - /* 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-accumulate */ - /* 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-accumulate */ - /* 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 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize2 - 3 * (blockSize2 / 3); - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pSrc2; - - /* Decrement 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 MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pSrc2; - - /* Decrement 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = blockSize3 >> 2U; - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = blockSize3 % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = blockSize3; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* sum += x[srcALen-1] * y[srcBLen-1] */ - sum += (q63_t) *px++ * *py--; - - /* Decrement 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 loop counter */ - blockSize3--; - } - -#else -/* alternate version for CM0_FAMILY */ - - const q31_t *pIn1 = pSrcA; /* InputA pointer */ - const q31_t *pIn2 = pSrcB; /* InputB pointer */ - q63_t sum; /* Accumulators */ - 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; - - /* 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 += ((q63_t) pIn1[j] * pIn2[i - j]); - } - } - - /* Store the output in the destination buffer */ - pDst[i] = (q31_t) (sum >> 31U); - } - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Conv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q7.c deleted file mode 100644 index 97d540a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_conv_q7.c +++ /dev/null @@ -1,860 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_conv_q7.c - * Description: Convolution of Q7 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - 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. - @remark - Refer to \ref arm_conv_opt_q7() for a faster implementation of this function. - */ -#if defined(ARM_MATH_MVEI) -#include "arm_helium_utils.h" - -#include "arm_vec_filtering.h" - -void arm_conv_q7( - const q7_t * pSrcA, - uint32_t srcALen, - const q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst) -{ - const q7_t *pIn1 = pSrcA; /* inputA pointer */ - const q7_t *pIn2 = pSrcB; /* inputB pointer */ - /* - * Loop to perform MAC operations according to correlation equation - */ - const q7_t *pX; - const q7_t *pY; - const q7_t *pA; - const q7_t *pB; - int32_t i = 0U, j = 0; /* loop counters */ - int32_t block1, block2, block3; - uint8_t vddupStartIdx = 15; - uint8x16_t decrIdxVec = vddupq_u8(vddupStartIdx, 1); - - if (srcALen < srcBLen) - { - /* - * Initialization to inputB pointer - */ - pIn1 = pSrcB; - /* - * Initialization to the end of inputA pointer - */ - pIn2 = pSrcA; - /* - * Swapping the lengths - */ - j = srcALen; - srcALen = srcBLen; - srcBLen = j; - } - - block1 = srcBLen - 1; - block2 = srcALen - srcBLen + 1; - block3 = srcBLen - 1; - - pA = pIn1; - pB = pIn2 - 15; - - for (i = 0; i <= block1 - 2; i += 2) - { - uint32_t count = i + 1; - int32_t acc0 = 0; - int32_t acc1 = 0; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_Q7(acc0, acc1, pX, pY, count); - *pDst++ = (q7_t) acc0; - *pDst++ = (q7_t) acc1; - pB += 2; - } - for (; i < block1; i++) - { - uint32_t count = i + 1; - int32_t acc = 0; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_SINGLE_Q7(acc, pX, pY, count); - *pDst++ = (q7_t) acc; - pB++; - } - - for (i = 0; i <= block2 - 4; i += 4) - { - uint32_t count = srcBLen; - int32_t acc0 = 0; - int32_t acc1 = 0; - int32_t acc2 = 0; - int32_t acc3 = 0; - - pX = pA; - pY = pB; - /* - * compute 4 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CONV_QUAD_INC_X_FIXED_SIZE_Q7(acc0, acc1, acc2, acc3, pX, pY, count); - *pDst++ = (q7_t) acc0; - *pDst++ = (q7_t) acc1; - *pDst++ = (q7_t) acc2; - *pDst++ = (q7_t) acc3; - pA += 4; - } - for (; i <= block2 - 2; i += 2) - { - uint32_t count = srcBLen; - int32_t acc0 = 0; - int32_t acc1 = 0; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_Q7(acc0, acc1, pX, pY, count); - *pDst++ = (q7_t) acc0; - *pDst++ = (q7_t) acc1; - pA += 2; - } - if (block2 & 1) - { - uint32_t count = srcBLen; - int32_t acc = 0; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_SINGLE_Q7(acc, pX, pY, count); - *pDst++ = (q7_t) acc; - pA++; - } - - for (i = block3; i >= 1; i -= 2) - { - uint32_t count = i; - int32_t acc0 = 0; - int32_t acc1 = 0; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_Q7(acc0, acc1, pX, pY, count); - *pDst++ = (q7_t) acc0; - *pDst++ = (q7_t) acc1; - pA += 2; - } - for (; i >= 1; i--) - { - uint32_t count = i; - int32_t acc = 0; - - pX = pA; - pY = pB; - - MVE_INTR_CONV_SINGLE_Q7(acc, pX, pY, count); - *pDst++ = (q7_t) acc; - pA++; - } -} - -#else -void arm_conv_q7( - const q7_t * pSrcA, - uint32_t srcALen, - const q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst) -{ - -#if (1) -//#if !defined(ARM_MATH_CM0_FAMILY) - - const q7_t *pIn1; /* InputA pointer */ - const q7_t *pIn2; /* InputB pointer */ - q7_t *pOut = pDst; /* Output pointer */ - const q7_t *px; /* Intermediate inputA pointer */ - const q7_t *py; /* Intermediate inputB pointer */ - const q7_t *pSrc1, *pSrc2; /* Intermediate pointers */ - q31_t sum; /* Accumulators */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc0, acc1, acc2, acc3; /* Accumulators */ - q31_t input1, input2; /* Temporary input variables */ - q15_t in1, in2; /* Temporary input variables */ - q7_t x0, x1, x2, x3, c0, c1; /* Temporary variables to hold state and coefficient values */ -#endif - - /* 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += ((q15_t) *px++ * *py--); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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) - { -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize2 % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - 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-accumulate */ - 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-accumulate */ - sum = __SMLAD(input1, input2, sum); - - /* Decrement loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 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 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = blockSize3 >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = blockSize3 % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = blockSize3; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* sum += x[srcALen-1] * y[srcBLen-1] */ - sum += ((q15_t) *px++ * *py--); - - /* Decrement 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 loop counter */ - blockSize3--; - } - -#else -/* alternate version for CM0_FAMILY */ - - const q7_t *pIn1 = pSrcA; /* InputA pointer */ - const q7_t *pIn2 = pSrcB; /* InputB pointer */ - q31_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; - - /* 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[i - j]); - } - } - - /* Store the output in the destination buffer */ - pDst[i] = (q7_t) __SSAT((sum >> 7U), 8U); - } - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Conv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_f32.c deleted file mode 100644 index e4690d6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_f32.c +++ /dev/null @@ -1,1095 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlate_f32.c - * Description: Correlation of floating-point sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - The pDst should be initialized to all zeros before being used. - - @par Fixed-Point Behavior - 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. - - @par Fast Versions - 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. - - @par Opt Versions - 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 - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_filtering.h" - - -void arm_correlate_f32( - const float32_t * pSrcA, - uint32_t srcALen, - const float32_t * pSrcB, - uint32_t srcBLen, - float32_t * pDst) -{ - const float32_t *pIn1 = pSrcA; /* inputA pointer */ - const float32_t *pIn2 = pSrcB + (srcBLen - 1U); /* inputB pointer */ - const float32_t *pX, *pY; - const float32_t *pA, *pB; - int32_t i = 0U, j = 0; /* loop counters */ - int32_t inv = 4U; /* Reverse order flag */ - uint32_t tot = 0U; /* Length */ - int32_t block1, block2, block3; - int32_t incr; - - tot = ((srcALen + srcBLen) - 2U); - if (srcALen > srcBLen) - { - /* - * Calculating the number of zeros to be padded to the output - */ - j = srcALen - srcBLen; - /* - * Initialize 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 = -4; - } - - block1 = srcBLen - 1; - block2 = srcALen - srcBLen + 1; - block3 = srcBLen - 1; - - pA = pIn1; - pB = pIn2; - incr = inv / 4; - - for (i = 0U; i <= block1 - 2; i += 2) - { - uint32_t count = i + 1; - float32_t acc0; - float32_t acc1; - - /* - * compute 2 accumulators per loop - * size is incrementing for second accumulator - * Y pointer is decrementing for second accumulator - */ - pX = pA; - pY = pB; - MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_F32(acc0, acc1, pX, pY, count); - - *pDst = acc0; - pDst += incr; - *pDst = acc1; - pDst += incr; - pB -= 2; - } - for (; i < block1; i++) - { - uint32_t count = i + 1; - float32_t acc; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_F32(acc, pX, pY, count); - - *pDst = acc; - pDst += incr; - pB--; - } - - for (i = 0U; i <= block2 - 4; i += 4) - { - float32_t acc0; - float32_t acc1; - float32_t acc2; - float32_t acc3; - - pX = pA; - pY = pB; - /* - * compute 4 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_F32(acc0, acc1, acc2, acc3, pX, pY, srcBLen); - - *pDst = acc0; - pDst += incr; - *pDst = acc1; - pDst += incr; - *pDst = acc2; - pDst += incr; - *pDst = acc3; - pDst += incr; - pA += 4; - } - - for (; i <= block2 - 2; i += 2) - { - float32_t acc0; - float32_t acc1; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for second accumulator - */ - MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_F32(acc0, acc1, pX, pY, srcBLen); - - *pDst = acc0; - pDst += incr; - *pDst = acc1; - pDst += incr; - pA += 2; - } - - if (block2 & 1) - { - float32_t acc; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_F32(acc, pX, pY, srcBLen); - - *pDst = acc; - pDst += incr; - pA++; - } - - for (i = block3 - 1; i >= 0; i -= 2) - { - - uint32_t count = (i + 1); - float32_t acc0; - float32_t acc1; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is decrementing for second accumulator - * X pointer is incrementing for second accumulator - */ - MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_F32(acc0, acc1, pX, pY, count); - - *pDst = acc0; - pDst += incr; - *pDst = acc1; - pDst += incr; - pA += 2; - - } - for (; i >= 0; i--) - { - uint32_t count = (i + 1); - float32_t acc; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_F32(acc, pX, pY, count); - - *pDst = acc; - pDst += incr; - pA++; - } -} - -#else -void arm_correlate_f32( - const float32_t * pSrcA, - uint32_t srcALen, - const float32_t * pSrcB, - uint32_t srcBLen, - float32_t * pDst) -{ - -#if defined(ARM_MATH_DSP) && !defined(ARM_MATH_AUTOVECTORIZE) - - const float32_t *pIn1; /* InputA pointer */ - const float32_t *pIn2; /* InputB pointer */ - float32_t *pOut = pDst; /* Output pointer */ - const float32_t *px; /* Intermediate inputA pointer */ - const float32_t *py; /* Intermediate inputB pointer */ - const float32_t *pSrc1; - float32_t sum; - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* Loop counters */ - uint32_t outBlockSize; /* Loop counter */ - int32_t inc = 1; /* Destination address modifier */ - -#if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) - float32_t acc0, acc1, acc2, acc3,c0; /* Accumulators */ -#if !defined(ARM_MATH_NEON) - float32_t x0, x1, x2, x3; /* temporary variables for holding input and coefficient values */ -#endif -#endif - - /* 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; - } - 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 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[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; - -#if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - -#if defined(ARM_MATH_NEON) - float32x4_t x,y; - float32x4_t res = vdupq_n_f32(0) ; - float32x2_t accum = vdup_n_f32(0); - - while (k > 0U) - { - x = vld1q_f32(px); - y = vld1q_f32(py); - - res = vmlaq_f32(res,x, y); - - px += 4; - py += 4; - - /* Decrement the loop counter */ - k--; - } - - accum = vpadd_f32(vget_low_f32(res), vget_high_f32(res)); - sum += accum[0] + accum[1]; - - k = count & 0x3; -#else - /* 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#endif /* #if defined(ARM_MATH_NEON) */ -#else - - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* x[0] * y[srcBLen - 1] */ - sum += *px++ * *py++; - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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) - { -#if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize2 >> 2U; - -#if defined(ARM_MATH_NEON) - float32x4_t c; - float32x4_t x1v; - float32x4_t x2v; - float32x4_t x; - float32x4_t res = vdupq_n_f32(0) ; -#endif /* #if defined(ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* Set all accumulators to zero */ - acc0 = 0.0f; - acc1 = 0.0f; - acc2 = 0.0f; - acc3 = 0.0f; - -#if defined(ARM_MATH_NEON) - /* Compute 4 MACs simultaneously. */ - k = srcBLen >> 2U; - - res = vdupq_n_f32(0) ; - - x1v = vld1q_f32(px); - px += 4; - do - { - x2v = vld1q_f32(px); - c = vld1q_f32(py); - - py += 4; - - x = x1v; - res = vmlaq_n_f32(res,x,c[0]); - - x = vextq_f32(x1v,x2v,1); - - res = vmlaq_n_f32(res,x,c[1]); - - x = vextq_f32(x1v,x2v,2); - - res = vmlaq_n_f32(res,x,c[2]); - - x = vextq_f32(x1v,x2v,3); - - res = vmlaq_n_f32(res,x,c[3]); - - x1v = x2v; - px+=4; - } while (--k); - - /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. - ** No loop unrolling is used. */ - k = srcBLen & 0x3; - - while (k > 0U) - { - /* Read y[srcBLen - 5] sample */ - c0 = *(py++); - - res = vmlaq_n_f32(res,x1v,c0); - - /* Reuse the present samples for the next MAC */ - x1v[0] = x1v[1]; - x1v[1] = x1v[2]; - x1v[2] = x1v[3]; - - x1v[3] = *(px++); - - /* Decrement the loop counter */ - k--; - } - - px-=1; - - acc0 = res[0]; - acc1 = res[1]; - acc2 = res[2]; - acc3 = res[3]; -#else - /* 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-accumulate */ - /* 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-accumulate */ - /* 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-accumulate */ - /* 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--; - } - -#endif /* #if defined(ARM_MATH_NEON) */ - - /* 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize2 % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) */ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0.0f; - -#if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - -#if defined(ARM_MATH_NEON) - float32x4_t x,y; - float32x4_t res = vdupq_n_f32(0) ; - float32x2_t accum = vdup_n_f32(0); - - while (k > 0U) - { - x = vld1q_f32(px); - y = vld1q_f32(py); - - res = vmlaq_f32(res,x, y); - - px += 4; - py += 4; - /* Decrement the loop counter */ - k--; - } - - accum = vpadd_f32(vget_low_f32(res), vget_high_f32(res)); - sum += accum[0] + accum[1]; -#else - /* 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-accumulate */ - sum += *px++ * *py++; - sum += *px++ * *py++; - sum += *px++ * *py++; - sum += *px++ * *py++; - - /* Decrement loop counter */ - k--; - } -#endif /* #if defined(ARM_MATH_NEON) */ - /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. - ** No loop unrolling is used. */ - k = srcBLen % 0x4U; -#else - - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) */ - - 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; - -#if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - -#if defined(ARM_MATH_NEON) - float32x4_t x,y; - float32x4_t res = vdupq_n_f32(0) ; - float32x2_t accum = vdup_n_f32(0); - - while (k > 0U) - { - x = vld1q_f32(px); - y = vld1q_f32(py); - - res = vmlaq_f32(res,x, y); - - px += 4; - py += 4; - - /* Decrement the loop counter */ - k--; - } - - accum = vpadd_f32(vget_low_f32(res), vget_high_f32(res)); - sum += accum[0] + accum[1]; -#else - /* 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-accumulate */ - /* 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 loop counter */ - k--; - } - -#endif /* #if defined (ARM_MATH_NEON) */ - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) || defined(ARM_MATH_NEON) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += *px++ * *py++; - - /* Decrement 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 MAC count */ - count--; - - /* Decrement the loop counter */ - blockSize3--; - } - -#else -/* alternate version for CM0_FAMILY */ - - const float32_t *pIn1 = pSrcA; /* inputA pointer */ - const 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 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[-((int32_t) i - j)]; - } - } - - /* Store the output in the destination buffer */ - if (inv == 1) - *pDst-- = sum; - else - *pDst++ = sum; - } - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of Corr group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c deleted file mode 100644 index 13661cb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c +++ /dev/null @@ -1,345 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlate_fast_opt_q15.c - * Description: Fast Q15 Correlation - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup Corr - @{ - */ - -/** - @brief Correlation of Q15 sequences (fast version). - @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 Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref 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( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - q15_t * pScratch) -{ - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - q31_t acc0; /* Accumulators */ - q15_t *pOut = pDst; /* Output pointer */ - q15_t *pScr1 = pScratch; /* Temporary pointer for scratch */ - const q15_t *py; /* Intermediate inputB pointer */ - uint32_t j, blkCnt, outBlockSize; /* Loop counter */ - int32_t inc = 1; /* Destination address modifier */ - uint32_t tapCnt; /* Loop count */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc1, acc2, acc3; /* Accumulators */ - q31_t x1, x2, x3; /* Temporary variables for holding input and coefficient values */ - q31_t y1, y2; /* State variables */ -#endif - - /* 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; - } - - pScr1 = pScratch; - - /* 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 */ - 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); - - /* Temporary pointer for scratch2 */ - py = pIn2; - - - /* Actual correlation process starts here */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (srcALen + srcBLen - 1U) >> 2; - - while (blkCnt > 0) - { - /* Initialze temporary scratch pointer as scratch1 */ - pScr1 = pScratch; - - /* Clear Accumlators */ - acc0 = 0; - acc1 = 0; - acc2 = 0; - acc3 = 0; - - /* Read two samples from scratch buffer */ - x1 = read_q15x2_ia (&pScr1); - - /* Read next two samples from scratch buffer */ - x2 = read_q15x2_ia (&pScr1); - - tapCnt = (srcBLen) >> 2U; - - while (tapCnt > 0U) - { - /* Read four samples from smaller buffer */ - y1 = read_q15x2_ia ((q15_t **) &pIn2); - y2 = read_q15x2_ia ((q15_t **) &pIn2); - - /* 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 scratch buffer */ - x1 = read_q15x2_ia (&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 = read_q15x2_ia (&pScr1); - -#ifndef ARM_MATH_BIG_ENDIAN - x3 = __PKHBT(x2, x1, 0); -#else - x3 = __PKHBT(x1, x2, 0); -#endif - - acc3 = __SMLADX(x3, y2, acc3); - - /* Decrement 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 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; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (srcALen + srcBLen - 1U) & 0x3; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (srcALen + srcBLen - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Calculate correlation for remaining samples of Bigger length sequence */ - while (blkCnt > 0) - { - /* Initialze temporary scratch pointer as scratch1 */ - pScr1 = pScratch; - - /* Clear Accumlators */ - acc0 = 0; - - tapCnt = (srcBLen) >> 1U; - - while (tapCnt > 0U) - { - - /* Read next two samples from scratch buffer */ - acc0 += (*pScr1++ * *pIn2++); - acc0 += (*pScr1++ * *pIn2++); - - /* Decrement 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 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)); - pOut += inc; - - /* Initialization of inputB pointer */ - pIn2 = py; - - pScratch += 1U; - } - -} - -/** - @} end of Corr group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_q15.c deleted file mode 100644 index 6898618..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_q15.c +++ /dev/null @@ -1,614 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlate_fast_q15.c - * Description: Fast Q15 Correlation - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup Corr - @{ - */ - -/** - @brief Correlation of Q15 sequences (fast version). - @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 - - @par Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref 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( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst) -{ - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - q15_t *pOut = pDst; /* Output pointer */ - q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ - const q15_t *px; /* Intermediate inputA pointer */ - const q15_t *py; /* Intermediate inputB pointer */ - const q15_t *pSrc1; /* Intermediate pointers */ - q31_t x0, x1, x2, x3, c0; /* Temporary variables for holding input and coefficient values */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* Loop counters */ - uint32_t outBlockSize; - 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 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[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 >> 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] , x[1] * y[srcBLen - 3] */ - sum = __SMLAD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); - /* x[3] * y[srcBLen - 1] , x[2] * y[srcBLen - 2] */ - sum = __SMLAD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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 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) - { - /* Set all accumulators to zero */ - acc0 = 0; - acc1 = 0; - acc2 = 0; - acc3 = 0; - - /* read x[0], x[1] samples */ - x0 = read_q15x2 ((q15_t *) px); - /* read x[1], x[2] samples */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2_ia ((q15_t **) &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 = read_q15x2 ((q15_t *) px); - - /* Read x[3], x[4] */ - x3 = read_q15x2 ((q15_t *) 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 = read_q15x2_ia ((q15_t **) &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 = read_q15x2 ((q15_t *) px + 2); - - /* Read x[5], x[6] */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) 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 = read_q15x2_ia ((q15_t **) &py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) 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 4 */ - count += 4U; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pIn2; - - /* Decrement 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 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 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 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 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 MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pIn2; - - /* Decrement 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(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); - /* sum += x[srcALen - srcBLen + 2] * y[1] , sum += x[srcALen - srcBLen + 1] * y[0] */ - sum = __SMLAD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); - - /* Decrement 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 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--; - } - -} - -/** - @} end of Corr group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_q31.c deleted file mode 100644 index a5840b7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_fast_q31.c +++ /dev/null @@ -1,601 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlate_fast_q31.c - * Description: Fast Q31 Correlation - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup Corr - @{ - */ - -/** - @brief Correlation of Q31 sequences (fast version). - @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 - - @par Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref arm_correlate_q31() for a slower implementation of this function which uses 64-bit accumulation to provide higher precision. - */ - -void arm_correlate_fast_q31( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst) -{ - const q31_t *pIn1; /* InputA pointer */ - const q31_t *pIn2; /* InputB pointer */ - q31_t *pOut = pDst; /* Output pointer */ - const q31_t *px; /* Intermediate inputA pointer */ - const q31_t *py; /* Intermediate inputB pointer */ - const 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 blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* Loop counters */ - uint32_t outBlockSize; - 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 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[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 >> 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 = (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 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 = (q31_t) ((((q63_t) sum << 32) + - ((q63_t) *px++ * (*py++))) >> 32); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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-accumulate */ - /* 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 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 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 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 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 MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pIn2; - - /* Decrement 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 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 MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pIn2; - - /* Decrement 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-accumulate */ - /* 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 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 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 MAC count */ - count--; - - /* Decrement loop counter */ - blockSize3--; - } - -} - -/** - @} end of Corr group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_opt_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_opt_q15.c deleted file mode 100644 index d46d9a0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_opt_q15.c +++ /dev/null @@ -1,341 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlate_opt_q15.c - * Description: Correlation of Q15 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref arm_correlate_fast_q15() for a faster but less precise version of this function. - */ - -void arm_correlate_opt_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - q15_t * pScratch) -{ - q63_t acc0; /* Accumulators */ - q15_t *pOut = pDst; /* Output pointer */ - q15_t *pScr1; /* Temporary pointer for scratch1 */ - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - const q15_t *py; /* Intermediate inputB pointer */ - uint32_t j, blkCnt, outBlockSize; /* Loop counter */ - int32_t inc = 1; /* Output pointer increment */ - uint32_t tapCnt; - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc1, acc2, acc3; /* Accumulators */ - q31_t x1, x2, x3; /* Temporary variables for holding input1 and input2 values */ - q31_t y1, y2; /* State variables */ -#endif - - /* 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 = (srcALen * 2U) - 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; - } - - pScr1 = pScratch; - - /* 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 */ - 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); - - /* Temporary pointer for scratch2 */ - py = pIn2; - - - /* Actual correlation process starts here */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (srcALen + srcBLen - 1U) >> 2; - - while (blkCnt > 0) - { - /* Initialze temporary scratch pointer as scratch1 */ - pScr1 = pScratch; - - /* Clear Accumlators */ - acc0 = 0; - acc1 = 0; - acc2 = 0; - acc3 = 0; - - /* Read two samples from scratch1 buffer */ - x1 = read_q15x2_ia (&pScr1); - - /* Read next two samples from scratch1 buffer */ - x2 = read_q15x2_ia (&pScr1); - - tapCnt = (srcBLen) >> 2U; - - while (tapCnt > 0U) - { - /* Read four samples from smaller buffer */ - y1 = read_q15x2_ia ((q15_t **) &pIn2); - y2 = read_q15x2_ia ((q15_t **) &pIn2); - - /* 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 = read_q15x2_ia (&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 = read_q15x2_ia (&pScr1); - -#ifndef ARM_MATH_BIG_ENDIAN - x3 = __PKHBT(x2, x1, 0); -#else - x3 = __PKHBT(x1, x2, 0); -#endif - - acc3 = __SMLALDX(x3, y2, acc3); - - /* Decrement 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 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; - } - - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (srcALen + srcBLen - 1U) & 0x3; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (srcALen + srcBLen - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Calculate correlation for remaining samples of Bigger length sequence */ - while (blkCnt > 0) - { - /* Initialze temporary scratch pointer as scratch1 */ - pScr1 = pScratch; - - /* Clear Accumlators */ - acc0 = 0; - - tapCnt = (srcBLen) >> 1U; - - while (tapCnt > 0U) - { - - /* Read next two samples from scratch1 buffer */ - acc0 += (*pScr1++ * *pIn2++); - acc0 += (*pScr1++ * *pIn2++); - - /* Decrement 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 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)); - pOut += inc; - - /* Initialization of inputB pointer */ - pIn2 = py; - - pScratch += 1U; - } - -} - -/** - @} end of Corr group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_opt_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_opt_q7.c deleted file mode 100644 index 035bfba..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_opt_q7.c +++ /dev/null @@ -1,388 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlate_opt_q7.c - * Description: Correlation of Q7 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 Scaling and Overflow Behavior - 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_correlate_opt_q7( - const q7_t * pSrcA, - uint32_t srcALen, - const q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst, - q15_t * pScratch1, - q15_t * pScratch2) -{ - q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch */ - q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch */ - q15_t x4; /* Temporary input variable */ - q15_t *py; /* Temporary input2 pointer */ - q31_t acc0, acc1, acc2, acc3; /* Accumulators */ - const q7_t *pIn1, *pIn2; /* InputA and inputB pointer */ - uint32_t j, k, blkCnt, tapCnt; /* Loop counter */ - int32_t inc = 1; /* Output pointer increment */ - uint32_t outBlockSize; /* Loop counter */ - q31_t x1, x2, x3, y1; /* Temporary input variables */ - q7_t *pOut = pDst; /* Output pointer */ - - /* 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 = (srcALen * 2U) - 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 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 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 */ - /* 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 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 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 = read_q15x2_ia (&pScr1); - - /* Read next two samples from scratch1 buffer */ - x2 = read_q15x2_ia (&pScr1); - - tapCnt = (srcBLen) >> 2U; - - while (tapCnt > 0U) - { - /* Read four samples from smaller buffer */ - y1 = read_q15x2_ia (&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 = read_q15x2_ia (&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 = read_q15x2_ia (&pScr2); - - acc0 = __SMLAD(x2, y1, acc0); - - acc2 = __SMLAD(x1, y1, acc2); - - acc1 = __SMLADX(x3, y1, acc1); - - x2 = read_q15x2_ia (&pScr1); - -#ifndef ARM_MATH_BIG_ENDIAN - x3 = __PKHBT(x2, x1, 0); -#else - x3 = __PKHBT(x1, x2, 0); -#endif - - acc3 = __SMLADX(x3, y1, acc3); - - /* Decrement 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 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 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 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q15.c deleted file mode 100644 index 0ec4ab7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q15.c +++ /dev/null @@ -1,903 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlate_q15.c - * Description: Correlation of Q15 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref arm_correlate_fast_q15() for a faster but less precise version of this function. - @remark - Refer to \ref arm_correlate_opt_q15() for a faster implementation of this function using scratch buffers. - */ -#if defined(ARM_MATH_MVEI) -#include "arm_helium_utils.h" -#include "arm_vec_filtering.h" - -void arm_correlate_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst) -{ - const q15_t *pIn1 = pSrcA; /* inputA pointer */ - const q15_t *pIn2 = pSrcB + (srcBLen - 1U); /* inputB pointer */ - /* - * Loop to perform MAC operations according to correlation equation - */ - const q15_t *pX; - const q15_t *pY; - const q15_t *pA; - const q15_t *pB; - int32_t i = 0U, j = 0; /* loop counters */ - int32_t inv = 2U; /* Reverse order flag */ - uint32_t tot = 0U; /* Length */ - int32_t block1, block2, block3; - int32_t incr; - - tot = ((srcALen + srcBLen) - 2U); - if (srcALen > srcBLen) - { - /* - * Calculating the number of zeros to be padded to the output - */ - j = srcALen - srcBLen; - /* - * Initialize 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 = -2; - } - - block1 = srcBLen - 1; - block2 = srcALen - srcBLen + 1; - block3 = srcBLen - 1; - - pA = pIn1; - pB = pIn2; - incr = inv / 2; - - for (i = 0U; i <= block1 - 2; i += 2) - { - uint32_t count = i + 1; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - /* - * compute 2 accumulators per loop - * size is incrementing for second accumulator - * Y pointer is decrementing for second accumulator - */ - pX = pA; - pY = pB; - MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_Q15(acc0, acc1, pX, pY, count); - - *pDst = (q15_t) acc0; - pDst += incr; - *pDst = (q15_t) acc1; - pDst += incr; - pB -= 2; - } - for (; i < block1; i++) - { - uint32_t count = i + 1; - int64_t acc = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_Q15(acc, pX, pY, count); - - *pDst = (q15_t) acc; - pDst += incr; - pB--; - } - - for (i = 0U; i <= block2 - 4; i += 4) - { - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - int64_t acc2 = 0LL; - int64_t acc3 = 0LL; - - pX = pA; - pY = pB; - /* - * compute 4 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_Q15(acc0, acc1, acc2, acc3, pX, pY, srcBLen); - - *pDst = (q15_t) acc0; - pDst += incr; - *pDst = (q15_t) acc1; - pDst += incr; - *pDst = (q15_t) acc2; - pDst += incr; - *pDst = (q15_t) acc3; - pDst += incr; - pA += 4; - } - - for (; i <= block2 - 2; i += 2) - { - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for second accumulator - */ - MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_Q15(acc0, acc1, pX, pY, srcBLen); - - *pDst = (q15_t) acc0; - pDst += incr; - *pDst = (q15_t) acc1; - pDst += incr; - pA += 2; - } - - if (block2 & 1) - { - int64_t acc = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_Q15(acc, pX, pY, srcBLen); - - *pDst = (q15_t) acc; - pDst += incr; - pA++; - } - - for (i = block3 - 1; i >= 0; i -= 2) - { - - uint32_t count = (i + 1); - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is decrementing for second accumulator - * X pointer is incrementing for second accumulator - */ - MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_Q15(acc0, acc1, pX, pY, count); - - *pDst = (q15_t) acc0; - pDst += incr; - *pDst = (q15_t) acc1; - pDst += incr; - pA += 2; - - } - for (; i >= 0; i--) - { - uint32_t count = (i + 1); - int64_t acc = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_Q15(acc, pX, pY, count); - - *pDst = (q15_t) acc; - pDst += incr; - pA++; - } -} - -#else -void arm_correlate_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst) -{ - -#if defined (ARM_MATH_DSP) - - const q15_t *pIn1; /* InputA pointer */ - const q15_t *pIn2; /* InputB pointer */ - q15_t *pOut = pDst; /* Output pointer */ - q63_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ - const q15_t *px; /* Intermediate inputA pointer */ - const q15_t *py; /* Intermediate inputB pointer */ - const q15_t *pSrc1; /* Intermediate pointers */ - q31_t x0, x1, x2, x3, c0; /* Temporary input variables for holding input and coefficient values */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* Loop counters */ - uint32_t outBlockSize; - 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 = (srcALen * 2U) - 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 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[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 >> 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-accumulate */ - /* x[0] * y[srcBLen - 4] , x[1] * y[srcBLen - 3] */ - sum = __SMLALD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); - /* x[3] * y[srcBLen - 1] , x[2] * y[srcBLen - 2] */ - sum = __SMLALD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); - - /* Decrement 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 = __SMLALD(*px++, *py++, sum); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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 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 unrolling: Compute 4 outputs at a time */ - 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 = read_q15x2 ((q15_t *) px); - - /* read x[1], x[2] samples */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2_ia ((q15_t **) &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 = read_q15x2 ((q15_t *) px); - - /* Read x[3], x[4] */ - x3 = read_q15x2 ((q15_t *) 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 = read_q15x2_ia ((q15_t **) &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 = read_q15x2 ((q15_t *) px + 2); - - /* Read x[5], x[6] */ - x1 = read_q15x2 ((q15_t *) 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 = read_q15x2 ((q15_t *) px); - px++; - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) px + 1); - px += 2U; - - /* Perform the multiply-accumulate */ - 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 = read_q15x2_ia ((q15_t **) &py); - - /* Read x[7], x[8] */ - x3 = read_q15x2 ((q15_t *) px); - - /* Read x[9] */ - x2 = read_q15x2 ((q15_t *) px + 1); - - /* Perform the multiply-accumulate */ - 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 = read_q15x2 ((q15_t *) 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 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 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; - - /* 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 = (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-accumulate */ - /* sum += x[srcALen - srcBLen + 4] * y[3] , sum += x[srcALen - srcBLen + 3] * y[2] */ - sum = __SMLALD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); - /* sum += x[srcALen - srcBLen + 2] * y[1] , sum += x[srcALen - srcBLen + 1] * y[0] */ - sum = __SMLALD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); - - /* Decrement 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 = __SMLALD(*px++, *py++, sum); - - /* Decrement 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 MAC count */ - count--; - - /* Decrement loop counter */ - blockSize3--; - } - -#else /* #if defined (ARM_MATH_DSP) */ - - const q15_t *pIn1 = pSrcA; /* InputA pointer */ - const 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 values */ - 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_DSP) */ - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Corr group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q31.c deleted file mode 100644 index 1c3e33b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q31.c +++ /dev/null @@ -1,879 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlate_q31.c - * Description: Correlation of Q31 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @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. - 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. - - @remark - Refer to \ref arm_correlate_fast_q31() for a faster but less precise implementation of this function. - */ -#if defined(ARM_MATH_MVEI) -#include "arm_helium_utils.h" -#include "arm_vec_filtering.h" -void arm_correlate_q31( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst) -{ - const q31_t *pIn1 = pSrcA; /* inputA pointer */ - const q31_t *pIn2 = pSrcB + (srcBLen - 1U); /* inputB pointer */ - /* - * Loop to perform MAC operations according to correlation equation - */ - const q31_t *pX; - const q31_t *pY; - const q31_t *pA; - const q31_t *pB; - int32_t i = 0U, j = 0; /* loop counters */ - int32_t inv = 4; /* Reverse order flag */ - uint32_t tot = 0U; /* Length */ - int32_t block1, block2, block3; - int32_t incr; - - tot = ((srcALen + srcBLen) - 2U); - if (srcALen > srcBLen) - { - /* - * Calculating the number of zeros to be padded to the output - */ - j = srcALen - srcBLen; - /* - * Initialize 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); - /* - * Initialization of the pointer after zero padding - */ - pDst = pDst + tot; - /* - * Swapping the lengths - */ - j = srcALen; - srcALen = srcBLen; - srcBLen = j; - /* - * Setting the reverse flag - */ - inv = -4; - - } - - block1 = srcBLen - 1; - block2 = srcALen - srcBLen + 1; - block3 = srcBLen - 1; - pA = pIn1; - pB = pIn2; - incr = inv / 4; - - for (i = 0U; i <= block1 - 2; i += 2) - { - uint32_t count = i + 1; - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - /* compute 2 accumulators per loop */ - /* size is incrementing for second accumulator */ - /* Y pointer is decrementing for second accumulator */ - pX = pA; - pY = pB; - MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_Q31(acc0, acc1, pX, pY, count); - - *pDst = (q31_t) acc0; - pDst += incr; - *pDst = (q31_t) acc1; - pDst += incr; - pB -= 2; - } - for (; i < block1; i++) - { - uint32_t count = i + 1; - int64_t acc = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_Q31(acc, pX, pY, count); - - *pDst = (q31_t) acc; - pDst += incr; - pB--; - } - - for (i = 0U; i <= block2 - 4; i += 4) - { - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - int64_t acc2 = 0LL; - int64_t acc3 = 0LL; - - pX = pA; - pY = pB; - /* compute 4 accumulators per loop */ - /* size is fixed for all accumulators */ - /* X pointer is incrementing for successive accumulators */ - MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_Q31(acc0, acc1, acc2, acc3, pX, pY, srcBLen); - - *pDst = (q31_t) acc0; - pDst += incr; - *pDst = (q31_t) acc1; - pDst += incr; - *pDst = (q31_t) acc2; - pDst += incr; - *pDst = (q31_t) acc3; - pDst += incr; - pA += 4; - } - - for (; i <= block2 - 2; i += 2) - { - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - /* compute 2 accumulators per loop */ - /* size is fixed for all accumulators */ - /* X pointer is incrementing for second accumulator */ - MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_Q31(acc0, acc1, pX, pY, srcBLen); - - *pDst = (q31_t) acc0; - pDst += incr; - *pDst = (q31_t) acc1; - pDst += incr; - pA += 2; - } - - if (block2 & 1) - { - int64_t acc = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_Q31(acc, pX, pY, srcBLen); - - *pDst = (q31_t) acc; - pDst += incr; - pA++; - } - - for (i = block3 - 1; i >= 0; i -= 2) - { - - uint32_t count = (i + 1); - int64_t acc0 = 0LL; - int64_t acc1 = 0LL; - - pX = pA; - pY = pB; - /* compute 2 accumulators per loop */ - /* size is decrementing for second accumulator */ - /* X pointer is incrementing for second accumulator */ - MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_Q31(acc0, acc1, pX, pY, count); - - *pDst = (q31_t) acc0; - pDst += incr; - *pDst = (q31_t) acc1; - pDst += incr; - pA += 2; - - } - for (; i >= 0; i--) - { - uint32_t count = (i + 1); - int64_t acc = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_Q31(acc, pX, pY, count); - - *pDst = (q31_t) acc; - pDst += incr; - pA++; - } -} -#else -void arm_correlate_q31( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst) -{ - -#if (1) -//#if !defined(ARM_MATH_CM0_FAMILY) - - const q31_t *pIn1; /* InputA pointer */ - const q31_t *pIn2; /* InputB pointer */ - q31_t *pOut = pDst; /* Output pointer */ - const q31_t *px; /* Intermediate inputA pointer */ - const q31_t *py; /* Intermediate inputB pointer */ - const q31_t *pSrc1; /* Intermediate pointers */ - q63_t sum; /* Accumulators */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* Loop counters */ - uint32_t outBlockSize; - int32_t inc = 1; /* Destination address modifier */ - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc0, acc1, acc2; /* Accumulators */ - q31_t x0, x1, x2, c0; /* Temporary variables for holding input and coefficient values */ -#endif - - /* 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 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[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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* x[0] * y[srcBLen - 1] */ - sum += (q63_t) *px++ * (*py++); - - /* Decrement 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 MAC count */ - count++; - - /* Decrement 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) - { -#if defined (ARM_MATH_LOOPUNROLL) - - /* 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-accumulate */ - /* 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-accumulate */ - /* 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 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize2 - 3 * (blockSize2 / 3); - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pIn2; - - /* Decrement 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); - /* Destination pointer is updated according to the address modifier, inc */ - pOut += inc; - - /* Increment MAC count */ - count++; - - /* Update the inputA and inputB pointers for next MAC calculation */ - px = pIn1 + count; - py = pIn2; - - /* Decrement 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += (q63_t) *px++ * *py++; - - /* Decrement 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 MAC count */ - count--; - - /* Decrement loop counter */ - blockSize3--; - } - -#else -/* alternate version for CM0_FAMILY */ - - const q31_t *pIn1 = pSrcA; /* InputA pointer */ - const 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 out 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 /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Corr group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q7.c deleted file mode 100644 index 113fdbc..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_correlate_q7.c +++ /dev/null @@ -1,1002 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_correlate_q7.c - * Description: Correlation of Q7 sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref arm_correlate_opt_q7() for a faster implementation of this function. - */ -#if defined(ARM_MATH_MVEI) -#include "arm_helium_utils.h" - -#include "arm_vec_filtering.h" -void arm_correlate_q7( - const q7_t * pSrcA, - uint32_t srcALen, - const q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst) -{ - const q7_t *pIn1 = pSrcA; /* inputA pointer */ - const q7_t *pIn2 = pSrcB + (srcBLen - 1U); /* inputB pointer */ - const q7_t *pX, *pY; - const q7_t *pA, *pB; - int32_t i = 0U, j = 0; /* loop counters */ - int32_t inv = 1U; /* Reverse order flag */ - uint32_t tot = 0U; /* Length */ - int32_t block1, block2, block3; - int32_t incr; - - tot = ((srcALen + srcBLen) - 2U); - if (srcALen > srcBLen) - { - /* - * Calculating the number of zeros to be padded to the output - */ - j = srcALen - srcBLen; - /* - * Initialize 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; - } - - block1 = srcBLen - 1; - block2 = srcALen - srcBLen + 1; - block3 = srcBLen - 1; - - pA = pIn1; - pB = pIn2; - incr = inv; - - for (i = 0U; i <= block1 - 2; i += 2) - { - uint32_t count = i + 1; - int32_t acc0 = 0; - int32_t acc1 = 0; - - /* - * compute 2 accumulators per loop - * size is incrementing for second accumulator - * Y pointer is decrementing for second accumulator - */ - pX = pA; - pY = pB; - MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_Q7(acc0, acc1, pX, pY, count); - - *pDst = (q7_t) acc0; - pDst += incr; - *pDst = (q7_t) acc1; - pDst += incr; - pB -= 2; - } - for (; i < block1; i++) - { - uint32_t count = i + 1; - int32_t acc = 0; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_Q7(acc, pX, pY, count); - - *pDst = (q7_t) acc; - pDst += incr; - pB--; - } - - for (i = 0U; i <= block2 - 4; i += 4) - { - int32_t acc0 = 0; - int32_t acc1 = 0; - int32_t acc2 = 0; - int32_t acc3 = 0; - - pX = pA; - pY = pB; - /* - * compute 4 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for successive accumulators - */ - MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_Q7(acc0, acc1, acc2, acc3, pX, pY, srcBLen); - - *pDst = (q7_t) acc0; - pDst += incr; - *pDst = (q7_t) acc1; - pDst += incr; - *pDst = (q7_t) acc2; - pDst += incr; - *pDst = (q7_t) acc3; - pDst += incr; - - pA += 4; - } - - for (; i <= block2 - 2; i += 2) - { - int32_t acc0 = 0LL; - int32_t acc1 = 0LL; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is fixed for all accumulators - * X pointer is incrementing for second accumulator - */ - MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_Q7(acc0, acc1, pX, pY, srcBLen); - - *pDst = (q7_t) acc0; - pDst += incr; - *pDst = (q7_t) acc1; - pDst += incr; - pA += 2; - } - - if (block2 & 1) - { - int32_t acc = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_Q7(acc, pX, pY, srcBLen); - - *pDst = (q7_t) acc; - pDst += incr; - pA++; - } - - for (i = block3 - 1; i >= 0; i -= 2) - { - uint32_t count = (i + 1); - int32_t acc0 = 0LL; - int32_t acc1 = 0LL; - - pX = pA; - pY = pB; - /* - * compute 2 accumulators per loop - * size is decrementing for second accumulator - * X pointer is incrementing for second accumulator - */ - MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_Q7(acc0, acc1, pX, pY, count); - - *pDst = (q7_t) acc0; - pDst += incr; - *pDst = (q7_t) acc1; - pDst += incr; - pA += 2; - - } - for (; i >= 0; i--) - { - uint32_t count = (i + 1); - int64_t acc = 0LL; - - pX = pA; - pY = pB; - MVE_INTR_CORR_SINGLE_Q7(acc, pX, pY, count); - - *pDst = (q7_t) acc; - pDst += incr; - pA++; - } -} - -#else -void arm_correlate_q7( - const q7_t * pSrcA, - uint32_t srcALen, - const q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst) -{ - -#if (1) -//#if !defined(ARM_MATH_CM0_FAMILY) - - const q7_t *pIn1; /* InputA pointer */ - const q7_t *pIn2; /* InputB pointer */ - q7_t *pOut = pDst; /* Output pointer */ - const q7_t *px; /* Intermediate inputA pointer */ - const q7_t *py; /* Intermediate inputB pointer */ - const q7_t *pSrc1; /* Intermediate pointers */ - q31_t sum; /* Accumulators */ - uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ - uint32_t j, k, count, blkCnt; /* Loop counters */ - uint32_t outBlockSize; - int32_t inc = 1; - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc0, acc1, acc2, acc3; /* Accumulators */ - q31_t input1, input2; /* Temporary input variables */ - q15_t in1, in2; /* Temporary input variables */ - q7_t x0, x1, x2, x3, c0, c1; /* Temporary variables for holding input and coefficient values */ -#endif - - /* 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 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[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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize k with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - /* x[0] * y[srcBLen - 1] */ - sum += (q31_t) ((q15_t) *px++ * *py++); - - /* Decrement loop counter */ - k--; - } - - /* Store the result in the accumulator in the destination buffer. */ - *pOut = (q7_t) (__SSAT(sum >> 7U, 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 MAC count */ - count++; - - /* Decrement 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) - { -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - 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 << 16U); - - /* y[0] and y[1] are packed */ - in1 = (q15_t) c0; - in2 = (q15_t) c1; - - input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); - - /* 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 << 16U); - - /* 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 << 16U); - - /* 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 << 16U); - - /* 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 << 16U); - - /* y[2] and y[3] are packed */ - in1 = (q15_t) c0; - in2 = (q15_t) c1; - - input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); - - /* 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 << 16U); - - /* 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 << 16U); - - /* 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 << 16U); - - /* 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 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize2 % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize2; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Accumulator is made zero for every iteration */ - sum = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = srcBLen >> 2U; - - 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-accumulate */ - 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-accumulate */ - sum = __SMLAD(input1, input2, sum); - - /* Decrement loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = srcBLen % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = srcBLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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)); - /* 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; - - /* 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)); - /* 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 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - k = count >> 2U; - - 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 << 16U); - - /* y[0] , y[1] */ - in1 = (q15_t) *py++; - in2 = (q15_t) *py++; - input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); - - /* 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 << 16U); - - /* y[2] , y[3] */ - in1 = (q15_t) *py++; - in2 = (q15_t) *py++; - input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); - - /* sum += x[srcALen - srcBLen + 3] * y[2] */ - /* sum += x[srcALen - srcBLen + 4] * y[3] */ - sum = __SMLAD(input1, input2, sum); - - /* Decrement loop counter */ - k--; - } - - /* Loop unrolling: Compute remaining outputs */ - k = count % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - k = count; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (k > 0U) - { - /* Perform the multiply-accumulate */ - sum += ((q15_t) *px++ * *py++); - - /* Decrement loop counter */ - k--; - } - - /* Store the result in the accumulator in the destination buffer. */ - *pOut = (q7_t) (__SSAT(sum >> 7U, 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 MAC count */ - count--; - - /* Decrement loop counter */ - blockSize3--; - } - -#else -/* alternate version for CM0_FAMILY */ - - const q7_t *pIn1 = pSrcA; /* InputA pointer */ - const 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 out 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 /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Corr group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_f32.c deleted file mode 100644 index 1d3576f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_f32.c +++ /dev/null @@ -1,951 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_decimate_f32.c - * Description: FIR decimation for floating-point sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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 samples to process - @return none - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_fir_decimate_f32( - const arm_fir_decimate_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCurnt; /* Points to the current sample of the state */ - const 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, outBlockSize = blockSize / S->M; /* Loop counters */ - uint32_t blkCntN4; - const float32_t *px0, *px1, *px2, *px3; - f32x4_t accv, acc0v, acc1v, acc2v, acc3v; - f32x4_t x0v, x1v, x2v, x3v; - f32x4_t c0v; - - /* - * 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) >> 2; - do - { - vst1q(pStateCurnt, vld1q((const float32_t *)pSrc)); - pSrc += 4; - pStateCurnt += 4; - i--; - } - while (i > 0U); - - /* - * Set accumulators to zero - */ - acc0v = vdupq_n_f32(0.0f); - acc1v = vdupq_n_f32(0.0f); - acc2v = vdupq_n_f32(0.0f); - acc3v = vdupq_n_f32(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 - */ - c0v = vld1q((const float32_t *)pb); - pb += 4; - /* - * Read x[n-numTaps-1] sample for acc0 - */ - x0v = vld1q(px0); - x1v = vld1q(px1); - x2v = vld1q(px2); - x3v = vld1q(px3); - px0 += 4; - px1 += 4; - px2 += 4; - px3 += 4; - - acc0v = vfmaq(acc0v, x0v, c0v); - acc1v = vfmaq(acc1v, x1v, c0v); - acc2v = vfmaq(acc2v, x2v, c0v); - acc3v = vfmaq(acc3v, x3v, c0v); - /* - * Decrement the loop counter - */ - tapCnt--; - } - - /* - * If the filter length is not a multiple of 4, compute the remaining filter taps - * should be tail predicated - */ - tapCnt = numTaps % 0x4U; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - /* - * Read the b[numTaps-1] coefficient - */ - c0v = vldrwq_z_f32(pb, p0); - pb += 4; - /* - * Read x[n-numTaps-1] sample for acc0 - */ - x0v = vld1q(px0); - x1v = vld1q(px1); - x2v = vld1q(px2); - x3v = vld1q(px3); - px0 += 4; - px1 += 4; - px2 += 4; - px3 += 4; - - acc0v = vfmaq_f32(acc0v, x0v, c0v); - acc1v = vfmaq_f32(acc1v, x1v, c0v); - acc2v = vfmaq_f32(acc2v, x2v, c0v); - acc3v = vfmaq_f32(acc3v, x3v, c0v); - } - - /* reduction */ - accv[0] = vecAddAcrossF32Mve(acc0v); - accv[1] = vecAddAcrossF32Mve(acc1v); - accv[2] = vecAddAcrossF32Mve(acc2v); - accv[3] = vecAddAcrossF32Mve(acc3v); - - /* - * 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. - */ - vst1q(pDst, accv); - pDst += 4; - - /* - * 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 - */ - acc0v = vdupq_n_f32(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) - { - c0v = vldrwq_f32(pb); - x0v = vldrwq_f32(px); - pb += 4; - px += 4; - acc0v = vfmaq_f32(acc0v, x0v, c0v); - /* - * Decrement the loop counter - */ - tapCnt--; - } - tapCnt = numTaps % 0x4U; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - c0v = vldrwq_z_f32(pb, p0); - x0v = vldrwq_f32(px); - acc0v = vfmaq_f32(acc0v, x0v, c0v); - } - accv[0] = vecAddAcrossF32Mve(acc0v); - - /* - * 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++ = accv[0]; - /* - * Decrement the loop counter - */ - blkCntN4--; - } - - /* - * 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. - */ - - pStateCurnt = S->pState; - blkCnt =(numTaps - 1) >> 2; - while (blkCnt > 0U) - { - vst1q(pStateCurnt, vldrwq_f32(pState)); - pState += 4; - pStateCurnt += 4; - blkCnt--; - } - blkCnt = (numTaps - 1) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_f32(pStateCurnt, vldrwq_f32(pState), p0); - } -} -#else -#if defined(ARM_MATH_NEON) -void arm_fir_decimate_f32( - const arm_fir_decimate_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCurnt; /* Points to the current sample of the state */ - float32_t *px; /* Temporary pointer for state buffer */ - const float32_t *pb; /* Temporary pointer for coefficient buffer */ - 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 */ - - uint32_t blkCntN4; - float32_t *px0, *px1, *px2, *px3; - float32_t x1, x2, x3; - - float32x4_t accv,acc0v,acc1v,acc2v,acc3v; - float32x4_t x0v, x1v, x2v, x3v; - float32x4_t c0v; - float32x2_t temp; - float32x4_t sum0v; - - /* 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 */ - acc0v = vdupq_n_f32(0.0); - acc1v = vdupq_n_f32(0.0); - acc2v = vdupq_n_f32(0.0); - acc3v = vdupq_n_f32(0.0); - - /* 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; - - /* Process 4 taps at a time. */ - tapCnt = numTaps >> 2; - - /* Loop over the number of taps. - ** Repeat until we've computed numTaps-4 coefficients. */ - - while (tapCnt > 0U) - { - /* Read the b[numTaps-1] coefficient */ - c0v = vld1q_f32(pb); - pb += 4; - - /* Read x[n-numTaps-1] sample for acc0 */ - x0v = vld1q_f32(px0); - x1v = vld1q_f32(px1); - x2v = vld1q_f32(px2); - x3v = vld1q_f32(px3); - - px0 += 4; - px1 += 4; - px2 += 4; - px3 += 4; - - acc0v = vmlaq_f32(acc0v, x0v, c0v); - acc1v = vmlaq_f32(acc1v, x1v, c0v); - acc2v = vmlaq_f32(acc2v, x2v, c0v); - acc3v = vmlaq_f32(acc3v, x3v, c0v); - - /* Decrement the loop counter */ - tapCnt--; - } - - temp = vpadd_f32(vget_low_f32(acc0v),vget_high_f32(acc0v)); - accv = vsetq_lane_f32(vget_lane_f32(temp, 0) + vget_lane_f32(temp, 1),accv,0); - - temp = vpadd_f32(vget_low_f32(acc1v),vget_high_f32(acc1v)); - accv = vsetq_lane_f32(vget_lane_f32(temp, 0) + vget_lane_f32(temp, 1),accv,1); - - temp = vpadd_f32(vget_low_f32(acc2v),vget_high_f32(acc2v)); - accv = vsetq_lane_f32(vget_lane_f32(temp, 0) + vget_lane_f32(temp, 1),accv,2); - - temp = vpadd_f32(vget_low_f32(acc3v),vget_high_f32(acc3v)); - accv = vsetq_lane_f32(vget_lane_f32(temp, 0) + vget_lane_f32(temp, 1),accv,3); - - /* 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 */ - accv = vsetq_lane_f32(vgetq_lane_f32(accv, 0) + x0 * c0,accv,0); - accv = vsetq_lane_f32(vgetq_lane_f32(accv, 1) + x1 * c0,accv,1); - accv = vsetq_lane_f32(vgetq_lane_f32(accv, 2) + x2 * c0,accv,2); - accv = vsetq_lane_f32(vgetq_lane_f32(accv, 3) + x3 * c0,accv,3); - - /* 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. */ - vst1q_f32(pDst,accv); - pDst += 4; - - /* 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 */ - sum0v = vdupq_n_f32(0.0); - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pb = pCoeffs; - - /* Process 4 taps at a time. */ - tapCnt = numTaps >> 2; - - /* Loop over the number of taps. - ** Repeat until we've computed numTaps-4 coefficients. */ - while (tapCnt > 0U) - { - c0v = vld1q_f32(pb); - pb += 4; - - x0v = vld1q_f32(px); - px += 4; - - sum0v = vmlaq_f32(sum0v, x0v, c0v); - - /* Decrement the loop counter */ - tapCnt--; - } - - temp = vpadd_f32(vget_low_f32(sum0v),vget_high_f32(sum0v)); - sum0 = vget_lane_f32(temp, 0) + vget_lane_f32(temp, 1); - - /* 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) - { - sum0v = vld1q_f32(pState); - vst1q_f32(pStateCurnt,sum0v); - pState += 4; - pStateCurnt += 4; - - /* 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_f32( - const arm_fir_decimate_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCur; /* Points to the current sample of the state */ - float32_t *px0; /* Temporary pointer for state buffer */ - const float32_t *pb; /* Temporary pointer for coefficient buffer */ - float32_t x0, c0; /* Temporary variables to hold state and coefficient values */ - float32_t acc0; /* Accumulator */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - float32_t *px1, *px2, *px3; - float32_t x1, x2, x3; - float32_t acc1, acc2, acc3; -#endif - - /* S->pState buffer contains previous frame (numTaps - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (numTaps - 1U); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 samples at a time */ - blkCnt = outBlockSize >> 2U; - - /* Samples loop unrolled by 4 */ - while (blkCnt > 0U) - { - /* Copy 4 * decimation factor number of new input samples into the state buffer */ - i = S->M * 4; - - do - { - *pStateCur++ = *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: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining 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 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 * 4; - - /* The result is in the accumulator, store in the destination buffer. */ - *pDst++ = acc0; - *pDst++ = acc1; - *pDst++ = acc2; - *pDst++ = acc3; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining samples */ - blkCnt = outBlockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = outBlockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Copy decimation factor number of new input samples into the state buffer */ - i = S->M; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulator to zero */ - acc0 = 0.0f; - - /* Initialize state pointer */ - px0 = pState; - - /* Initialize coeff pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Read the b[numTaps-1] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-1] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += x0 * c0; - - /* Read the b[numTaps-2] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-2] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += x0 * c0; - - /* Read the b[numTaps-3] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-3] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += x0 * c0; - - /* Read the b[numTaps-4] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-4] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += x0 * c0; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Read coefficients */ - c0 = *pb++; - - /* Fetch 1 state variable */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += x0 * c0; - - /* Decrement 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++ = acc0; - - /* Decrement 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 */ - pStateCur = S->pState; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = (numTaps - 1U) >> 2U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numTaps - 1U) % 0x04U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} -#endif /* #if defined(ARM_MATH_NEON) */ - -#endif /*defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ -/** - @} end of FIR_decimate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c deleted file mode 100644 index 948b15c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c +++ /dev/null @@ -1,595 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_decimate_fast_q15.c - * Description: Fast Q15 FIR Decimator - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR_decimate - @{ - */ - -/** - @brief Processing function for the Q15 FIR decimator (fast variant). - @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 Scaling and Overflow Behavior - 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. - @remark - Refer to \ref 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 function \ref arm_fir_decimate_init_q15() to initialize the filter structure. - */ - -#if defined (ARM_MATH_DSP) - -void arm_fir_decimate_fast_q15( - const arm_fir_decimate_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCur; /* Points to the current sample of the state */ - q15_t *px; /* Temporary pointer for state buffer */ - const q15_t *pb; /* Temporary pointer for coefficient buffer */ - q31_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 */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t c1; /* Temporary variables to hold state and coefficient values */ -#endif - - /* S->pState buffer contains previous frame (numTaps - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (numTaps - 1U); - - /* Total number of output samples to be computed */ - blkCnt = outBlockSize / 2; - blkCntN3 = outBlockSize - (2 * blkCnt); - - while (blkCnt > 0U) - { - /* Copy 2 * decimation factor number of new input samples into the state buffer */ - i = S->M * 2; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulator to zero */ - acc0 = 0; - acc1 = 0; - - /* Initialize state pointer for all the samples */ - px0 = pState; - px1 = pState + S->M; - - /* Initialize coeff pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Read the b[numTaps-1] and b[numTaps-2] coefficients */ - c0 = read_q15x2_ia ((q15_t **) &pb); - - /* Read x[n-numTaps-1] and x[n-numTaps-2]sample */ - x0 = read_q15x2_ia (&px0); - x1 = read_q15x2_ia (&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 = read_q15x2_ia ((q15_t **) &pb); - - /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ - x0 = read_q15x2_ia (&px0); - x1 = read_q15x2_ia (&px1); - - /* Perform the multiply-accumulate */ - acc0 = __SMLAD(x0, c0, acc0); - acc1 = __SMLAD(x1, c0, acc1); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Read coefficients */ - c0 = *pb++; - - /* Fetch state variables for acc0, acc1 */ - x0 = *px0++; - x1 = *px1++; - - /* Perform the multiply-accumulate */ - acc0 = __SMLAD(x0, c0, acc0); - acc1 = __SMLAD(x1, c0, acc1); - - /* Decrement 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 loop counter */ - blkCnt--; - } - - while (blkCntN3 > 0U) - { - /* Copy decimation factor number of new input samples into the state buffer */ - i = S->M; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulator to zero */ - sum0 = 0; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Read the b[numTaps-1] and b[numTaps-2] coefficients */ - c0 = read_q15x2_ia ((q15_t **) &pb); - - /* Read x[n-numTaps-1] and x[n-numTaps-2] sample */ - x0 = read_q15x2_ia (&px); - - /* Read the b[numTaps-3] and b[numTaps-4] coefficients */ - c1 = read_q15x2_ia ((q15_t **) &pb); - - /* Perform the multiply-accumulate */ - sum0 = __SMLAD(x0, c0, sum0); - - /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ - x0 = read_q15x2_ia (&px); - - /* Perform the multiply-accumulate */ - sum0 = __SMLAD(x0, c1, sum0); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Read coefficients */ - c0 = *pb++; - - /* Fetch 1 state variable */ - x0 = *px++; - - /* Perform the multiply-accumulate */ - sum0 = __SMLAD(x0, c0, sum0); - - /* Decrement 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 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 */ - pStateCur = S->pState; - - i = (numTaps - 1U) >> 2U; - - /* copy data */ - while (i > 0U) - { - write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); - write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); - - /* Decrement loop counter */ - i--; - } - - i = (numTaps - 1U) % 0x04U; - - /* Copy data */ - while (i > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - i--; - } - -} - -#else /* #if defined (ARM_MATH_DSP) */ - -void arm_fir_decimate_fast_q15( - const arm_fir_decimate_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCur; /* Points to the current sample of the state */ - q15_t *px; /* Temporary pointer for state buffer */ - const q15_t *pb; /* Temporary pointer for 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 */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (numTaps - 1U); - - /* Total number of output samples to be computed */ - blkCnt = outBlockSize / 2; - blkCntN3 = outBlockSize - (2 * blkCnt); - - while (blkCnt > 0U) - { - /* Copy 2 * decimation factor number of new input samples into the state buffer */ - i = S->M * 2; - - do - { - *pStateCur++ = *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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - 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--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 loop counter */ - blkCnt--; - } - - while (blkCntN3 > 0U) - { - /* Copy decimation factor number of new input samples into the state buffer */ - i = S->M; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulator to zero */ - sum0 = 0; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 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 */ - pStateCur = S->pState; - - i = (numTaps - 1U) >> 2U; - - /* copy data */ - while (i > 0U) - { - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - i--; - } - - i = (numTaps - 1U) % 0x04U; - - /* copy data */ - while (i > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - i--; - } -} - -#endif /* #if defined (ARM_MATH_DSP) */ - -/** - @} end of FIR_decimate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c deleted file mode 100644 index 2c3a28a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c +++ /dev/null @@ -1,390 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_decimate_fast_q31.c - * Description: Fast Q31 FIR Decimator - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR_decimate - @{ - */ - -/** - @brief Processing function for the Q31 FIR decimator (fast variant). - @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 samples to process - @return none - - @par Scaling and Overflow Behavior - 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). - - @remark - Refer to \ref 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 function \ref arm_fir_decimate_init_q31() to initialize the filter structure. - */ - -void arm_fir_decimate_fast_q31( - const arm_fir_decimate_instance_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCur; /* Points to the current sample of the state */ - q31_t *px0; /* Temporary pointer for state buffer */ - const q31_t *pb; /* Temporary pointer for coefficient buffer */ - q31_t x0, c0; /* Temporary variables to hold state and coefficient values */ - q63_t acc0; /* Accumulator */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t *px1, *px2, *px3; - q31_t x1, x2, x3; - q63_t acc1, acc2, acc3; -#endif - - /* S->pState buffer contains previous frame (numTaps - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (numTaps - 1U); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 samples at a time */ - blkCnt = outBlockSize >> 2U; - - /* Samples loop unrolled by 4 */ - while (blkCnt > 0U) - { - /* Copy 4 * decimation factor number of new input samples into the state buffer */ - i = S->M * 4; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulators to zero */ - acc0 = 0; - acc1 = 0; - acc2 = 0; - acc3 = 0; - - /* 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: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - 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 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); - acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); - acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); - - /* 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 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); - acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); - acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); - - /* 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 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); - acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); - acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); - - /* 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 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); - acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); - acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining 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 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); - acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); - acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); - - /* Decrement 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 * 4; - - /* The result is in the accumulator, store 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining samples */ - blkCnt = outBlockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = outBlockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Copy decimation factor number of new input samples into the state buffer */ - i = S->M; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulator to zero */ - acc0 = 0; - - /* Initialize state pointer */ - px0 = pState; - - /* Initialize coeff pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Read the b[numTaps-1] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-1] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - - /* Read the b[numTaps-2] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-2] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - - /* Read the b[numTaps-3] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-3] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - - /* Read the b[numTaps-4] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-4] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Read coefficients */ - c0 = *pb++; - - /* Fetch 1 state variable */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); - - /* Decrement 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) (acc0 << 1); - - /* Decrement 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 */ - pStateCur = S->pState; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = (numTaps - 1U) >> 2U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numTaps - 1U) % 0x04U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} - -/** - @} end of FIR_decimate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_f32.c deleted file mode 100644 index 9382f09..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_f32.c +++ /dev/null @@ -1,105 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_decimate_init_f32.c - * Description: Floating-point FIR Decimator initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_LENGTH_ERROR : blockSize is not a multiple of M - - @par Details - 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, - const 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 the state buffer. The 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_q15.c deleted file mode 100644 index f583a03..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_q15.c +++ /dev/null @@ -1,106 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_decimate_init_q15.c - * Description: Initialization function for the Q15 FIR Decimator - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_LENGTH_ERROR : blockSize is not a multiple of M - - @par Details - 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, - const 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 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_q31.c deleted file mode 100644 index 5ee69c6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_init_q31.c +++ /dev/null @@ -1,105 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_decimate_init_q31.c - * Description: Initialization function for Q31 FIR Decimation filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_LENGTH_ERROR : blockSize is not a multiple of M - - @par Details - 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, - const 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 - 1U)) * 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_q15.c deleted file mode 100644 index 0bcd0bd..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_q15.c +++ /dev/null @@ -1,852 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_decimate_q15.c - * Description: Q15 FIR Decimator - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 block of output data - @param[in] blockSize number of input samples to process per call - @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. - - @remark - Refer to \ref arm_fir_decimate_fast_q15() for a faster but less precise implementation of this function. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_fir_decimate_q15( - const arm_fir_decimate_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCurnt; /* Points to the current sample of the state */ - const q15_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, outBlockSize = blockSize / S->M; /* Loop counters */ - uint32_t blkCntN4; - const q15_t *px0, *px1, *px2, *px3; - q63_t acc0v, acc1v, acc2v, acc3v; - q15x8_t x0v, x1v, x2v, x3v; - q15x8_t c0v; - - /* - * 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) - { - /* - * Need extra temp variables as 4 * S->M is not necessarily a multiple of 8 - * and cause final tail predicated post incremented pointers to jump ahead - */ - const q15_t *pSrcTmp = pSrc; - q15_t *pStateCurntTmp = pStateCurnt; - - /* - * Copy 4 * decimation factor number of new input samples into the state buffer - */ - i = (4 * S->M) >> 3; - while (i > 0U) - { - vstrhq_s16(pStateCurntTmp, vldrhq_s16(pSrcTmp)); - pSrcTmp += 8; - pStateCurntTmp += 8; - i--; - } - i = (4 * S->M) & 7; - if (i > 0U) - { - mve_pred16_t p0 = vctp16q(i); - vstrhq_p_s16(pStateCurntTmp, vldrhq_s16(pSrcTmp), p0); - } - - pSrc += (4 * S->M); - pStateCurnt += (4 * S->M); - - /* - * Clear all accumulators - */ - acc0v = 0LL; - acc1v = 0LL; - acc2v = 0LL; - acc3v = 0LL; - /* - * 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; - - tapCnt = numTaps >> 3; - /* - * 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 - */ - c0v = vldrhq_s16(pb); - pb += 8; - /* - * Read x[n-numTaps-1] sample for acc0 - */ - x0v = vld1q(px0); - x1v = vld1q(px1); - x2v = vld1q(px2); - x3v = vld1q(px3); - px0 += 8; - px1 += 8; - px2 += 8; - px3 += 8; - - acc0v = vmlaldavaq(acc0v, x0v, c0v); - acc1v = vmlaldavaq(acc1v, x1v, c0v); - acc2v = vmlaldavaq(acc2v, x2v, c0v); - acc3v = vmlaldavaq(acc3v, x3v, c0v); - /* - * Decrement the loop counter - */ - tapCnt--; - } - - /* - * If the filter length is not a multiple of 4, compute the remaining filter taps - * should be tail predicated - */ - tapCnt = numTaps & 7; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp16q(tapCnt); - /* - * Read the b[numTaps-1] coefficient - */ - c0v = vldrhq_z_s16(pb, p0); - pb += 8; - /* - * Read x[n-numTaps-1] sample for acc0 - */ - x0v = vld1q(px0); - x1v = vld1q(px1); - x2v = vld1q(px2); - x3v = vld1q(px3); - px0 += 8; - px1 += 8; - px2 += 8; - px3 += 8; - - acc0v = vmlaldavaq(acc0v, x0v, c0v); - acc1v = vmlaldavaq(acc1v, x1v, c0v); - acc2v = vmlaldavaq(acc2v, x2v, c0v); - acc3v = vmlaldavaq(acc3v, x3v, c0v); - } - - acc0v = asrl(acc0v, 15); - acc1v = asrl(acc1v, 15); - acc2v = asrl(acc2v, 15); - acc3v = asrl(acc3v, 15); - /* - * store in the destination buffer. - */ - *pDst++ = (q15_t) __SSAT((q31_t) acc0v, 16); - *pDst++ = (q15_t) __SSAT((q31_t) acc1v, 16);; - *pDst++ = (q15_t) __SSAT((q31_t) acc2v, 16);; - *pDst++ = (q15_t) __SSAT((q31_t) acc3v, 16);; - - /* - * Advance the state pointer by the decimation factor - * to process the next group of decimation factor number samples - */ - pState = pState + 4 * S->M; - /* - * 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 - */ - acc0v = 0LL; - /* - * Initialize state pointer - */ - px = pState; - /* - * Initialize coeff. pointer - */ - pb = pCoeffs; - - tapCnt = numTaps >> 3; - while (tapCnt > 0U) - { - c0v = vldrhq_s16(pb); - x0v = vldrhq_s16(px); - pb += 8; - px += 8; - acc0v = vmlaldavaq(acc0v, x0v, c0v); - /* - * Decrement the loop counter - */ - tapCnt--; - } - - tapCnt = numTaps & 7; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp16q(tapCnt); - c0v = vldrhq_z_s16(pb, p0); - x0v = vldrhq_z_s16(px, p0); - acc0v = vmlaldavaq_p(acc0v, x0v, c0v, p0); - } - - acc0v = asrl(acc0v, 15); - - /* - * 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++ = (q15_t) __SSAT((q31_t) acc0v, 16); - /* - * Decrement the loop counter - */ - blkCntN4--; - } - - /* - * 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. - */ - - pStateCurnt = S->pState; - blkCnt = (numTaps - 1) >> 3; - while (blkCnt > 0U) - { - vstrhq_s16(pStateCurnt, vldrhq_s16(pState)); - pState += 8; - pStateCurnt += 8; - blkCnt--; - } - blkCnt = (numTaps - 1) & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vstrhq_p_s16(pStateCurnt, vldrhq_s16(pState), p0); - } -} -#else -#if defined (ARM_MATH_DSP) - -void arm_fir_decimate_q15( - const arm_fir_decimate_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCur; /* Points to the current sample of the state */ - q15_t *px; /* Temporary pointer for state buffer */ - const q15_t *pb; /* Temporary pointer for coefficient buffer */ - q31_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 */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t c1; /* Temporary variables to hold state and coefficient values */ -#endif - - /* S->pState buffer contains previous frame (numTaps - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (numTaps - 1U); - - /* Total number of output samples to be computed */ - blkCnt = outBlockSize / 2; - blkCntN3 = outBlockSize - (2 * blkCnt); - - while (blkCnt > 0U) - { - /* Copy 2 * decimation factor number of new input samples into the state buffer */ - i = S->M * 2; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulator to zero */ - acc0 = 0; - acc1 = 0; - - /* Initialize state pointer for all the samples */ - px0 = pState; - px1 = pState + S->M; - - /* Initialize coeff pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Read the b[numTaps-1] and b[numTaps-2] coefficients */ - c0 = read_q15x2_ia ((q15_t **) &pb); - - /* Read x[n-numTaps-1] and x[n-numTaps-2]sample */ - x0 = read_q15x2_ia (&px0); - x1 = read_q15x2_ia (&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 = read_q15x2_ia ((q15_t **) &pb); - - /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ - x0 = read_q15x2_ia (&px0); - x1 = read_q15x2_ia (&px1); - - /* Perform the multiply-accumulate */ - acc0 = __SMLALD(x0, c0, acc0); - acc1 = __SMLALD(x1, c0, acc1); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Read coefficients */ - c0 = *pb++; - - /* Fetch state variables for acc0, acc1 */ - x0 = *px0++; - x1 = *px1++; - - /* Perform the multiply-accumulate */ - acc0 = __SMLALD(x0, c0, acc0); - acc1 = __SMLALD(x1, c0, acc1); - - /* Decrement 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 loop counter */ - blkCnt--; - } - - while (blkCntN3 > 0U) - { - /* Copy decimation factor number of new input samples into the state buffer */ - i = S->M; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulator to zero */ - sum0 = 0; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Read the b[numTaps-1] and b[numTaps-2] coefficients */ - c0 = read_q15x2_ia ((q15_t **) &pb); - - /* Read x[n-numTaps-1] and x[n-numTaps-2] sample */ - x0 = read_q15x2_ia (&px); - - /* Read the b[numTaps-3] and b[numTaps-4] coefficients */ - c1 = read_q15x2_ia ((q15_t **) &pb); - - /* Perform the multiply-accumulate */ - sum0 = __SMLALD(x0, c0, sum0); - - /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ - x0 = read_q15x2_ia (&px); - - /* Perform the multiply-accumulate */ - sum0 = __SMLALD(x0, c1, sum0); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Read coefficients */ - c0 = *pb++; - - /* Fetch 1 state variable */ - x0 = *px++; - - /* Perform the multiply-accumulate */ - sum0 = __SMLALD(x0, c0, sum0); - - /* Decrement 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 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 */ - pStateCur = S->pState; - - i = (numTaps - 1U) >> 2U; - - /* copy data */ - while (i > 0U) - { - write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); - write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); - - /* Decrement loop counter */ - i--; - } - - i = (numTaps - 1U) % 0x04U; - - /* Copy data */ - while (i > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - i--; - } - -} - -#else /* #if defined (ARM_MATH_DSP) */ - -void arm_fir_decimate_q15( - const arm_fir_decimate_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCur; /* Points to the current sample of the state */ - q15_t *px; /* Temporary pointer for state buffer */ - const q15_t *pb; /* Temporary pointer for 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 */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (numTaps - 1U); - - /* Total number of output samples to be computed */ - blkCnt = outBlockSize / 2; - blkCntN3 = outBlockSize - (2 * blkCnt); - - while (blkCnt > 0U) - { - /* Copy 2 * decimation factor number of new input samples into the state buffer */ - i = S->M * 2; - - do - { - *pStateCur++ = *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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - 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--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 loop counter */ - blkCnt--; - } - - while (blkCntN3 > 0U) - { - /* Copy decimation factor number of new input samples into the state buffer */ - i = S->M; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulator to zero */ - sum0 = 0; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 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 */ - pStateCur = S->pState; - - i = (numTaps - 1U) >> 2U; - - /* copy data */ - while (i > 0U) - { - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - i--; - } - - i = (numTaps - 1U) % 0x04U; - - /* copy data */ - while (i > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - i--; - } -} - -#endif /* #if defined (ARM_MATH_DSP) */ -#endif /* defined(ARM_MATH_MVEI) */ -/** - @} end of FIR_decimate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_q31.c deleted file mode 100644 index b88748e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_decimate_q31.c +++ /dev/null @@ -1,634 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_decimate_q31.c - * Description: Q31 FIR Decimator - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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 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. - - @remark - Refer to \ref arm_fir_decimate_fast_q31() for a faster but less precise implementation of this function. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_fir_decimate_q31( - const arm_fir_decimate_instance_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCurnt; /* Points to the current sample of the state */ - const q31_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, outBlockSize = blockSize / S->M; /* Loop counters */ - uint32_t blkCntN4; - const q31_t *px0, *px1, *px2, *px3; - q63_t acc0v, acc1v, acc2v, acc3v; - q31x4_t x0v, x1v, x2v, x3v; - q31x4_t c0v; - - /* - * 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) >> 2; - do - { - vst1q(pStateCurnt, vldrwq_s32(pSrc)); - pSrc += 4; - pStateCurnt += 4; - i--; - } - while (i > 0U); - - /* - * Clear all accumulators - */ - acc0v = 0LL; - acc1v = 0LL; - acc2v = 0LL; - acc3v = 0LL; - /* - * 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 - */ - c0v = vldrwq_s32(pb); - pb += 4; - /* - * Read x[n-numTaps-1] sample for acc0 - */ - x0v = vld1q(px0); - x1v = vld1q(px1); - x2v = vld1q(px2); - x3v = vld1q(px3); - px0 += 4; - px1 += 4; - px2 += 4; - px3 += 4; - - acc0v = vrmlaldavhaq(acc0v, x0v, c0v); - acc1v = vrmlaldavhaq(acc1v, x1v, c0v); - acc2v = vrmlaldavhaq(acc2v, x2v, c0v); - acc3v = vrmlaldavhaq(acc3v, x3v, c0v); - /* - * Decrement the loop counter - */ - tapCnt--; - } - - /* - * If the filter length is not a multiple of 4, compute the remaining filter taps - * should be tail predicated - */ - tapCnt = numTaps % 0x4U; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - /* - * Read the b[numTaps-1] coefficient - */ - c0v = vldrwq_z_s32(pb, p0); - pb += 4; - /* - * Read x[n-numTaps-1] sample for acc0 - */ - x0v = vld1q(px0); - x1v = vld1q(px1); - x2v = vld1q(px2); - x3v = vld1q(px3); - px0 += 4; - px1 += 4; - px2 += 4; - px3 += 4; - - acc0v = vrmlaldavhaq(acc0v, x0v, c0v); - acc1v = vrmlaldavhaq(acc1v, x1v, c0v); - acc2v = vrmlaldavhaq(acc2v, x2v, c0v); - acc3v = vrmlaldavhaq(acc3v, x3v, c0v); - } - - acc0v = asrl(acc0v, 31 - 8); - acc1v = asrl(acc1v, 31 - 8); - acc2v = asrl(acc2v, 31 - 8); - acc3v = asrl(acc3v, 31 - 8); - /* - * store in the destination buffer. - */ - *pDst++ = (q31_t) acc0v; - *pDst++ = (q31_t) acc1v; - *pDst++ = (q31_t) acc2v; - *pDst++ = (q31_t) acc3v; - - /* - * Advance the state pointer by the decimation factor - * to process the next group of decimation factor number samples - */ - pState = pState + 4 * S->M; - /* - * 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 - */ - acc0v = 0LL; - /* - * 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) - { - c0v = vldrwq_s32(pb); - x0v = vldrwq_s32(px); - pb += 4; - px += 4; - acc0v = vrmlaldavhaq(acc0v, x0v, c0v); - /* - * Decrement the loop counter - */ - tapCnt--; - } - tapCnt = numTaps % 0x4U; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - c0v = vldrwq_z_s32(pb, p0); - x0v = vldrwq_z_s32(px, p0); - acc0v = vrmlaldavhaq_p(acc0v, x0v, c0v, p0); - } - acc0v = asrl(acc0v, 31 - 8); - - /* - * 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) acc0v; - /* - * Decrement the loop counter - */ - blkCntN4--; - } - - /* - * 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. - */ - pStateCurnt = S->pState; - blkCnt = (numTaps - 1) >> 2; - while (blkCnt > 0U) - { - vst1q(pStateCurnt, vldrwq_s32(pState)); - pState += 4; - pStateCurnt += 4; - blkCnt--; - } - blkCnt = (numTaps - 1) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_s32(pStateCurnt, vldrwq_s32(pState), p0); - } -} -#else -void arm_fir_decimate_q31( - const arm_fir_decimate_instance_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCur; /* Points to the current sample of the state */ - q31_t *px0; /* Temporary pointer for state buffer */ - const q31_t *pb; /* Temporary pointer for coefficient buffer */ - q31_t x0, c0; /* Temporary variables to hold state and coefficient values */ - q63_t acc0; /* Accumulator */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t *px1, *px2, *px3; - q31_t x1, x2, x3; - q63_t acc1, acc2, acc3; -#endif - - /* S->pState buffer contains previous frame (numTaps - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (numTaps - 1U); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 samples at a time */ - blkCnt = outBlockSize >> 2U; - - /* Samples loop unrolled by 4 */ - while (blkCnt > 0U) - { - /* Copy 4 * decimation factor number of new input samples into the state buffer */ - i = S->M * 4; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulators to zero */ - acc0 = 0; - acc1 = 0; - acc2 = 0; - acc3 = 0; - - /* 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: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - 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 += (q63_t) x0 * c0; - acc1 += (q63_t) x1 * c0; - acc2 += (q63_t) x2 * c0; - acc3 += (q63_t) 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 += (q63_t) x0 * c0; - acc1 += (q63_t) x1 * c0; - acc2 += (q63_t) x2 * c0; - acc3 += (q63_t) 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 += (q63_t) x0 * c0; - acc1 += (q63_t) x1 * c0; - acc2 += (q63_t) x2 * c0; - acc3 += (q63_t) 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 += (q63_t) x0 * c0; - acc1 += (q63_t) x1 * c0; - acc2 += (q63_t) x2 * c0; - acc3 += (q63_t) x3 * c0; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining 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 += (q63_t) x0 * c0; - acc1 += (q63_t) x1 * c0; - acc2 += (q63_t) x2 * c0; - acc3 += (q63_t) x3 * c0; - - /* Decrement 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 * 4; - - /* The result is in the accumulator, store in the destination buffer. */ - *pDst++ = (q31_t) (acc0 >> 31); - *pDst++ = (q31_t) (acc1 >> 31); - *pDst++ = (q31_t) (acc2 >> 31); - *pDst++ = (q31_t) (acc3 >> 31); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining samples */ - blkCnt = outBlockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = outBlockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Copy decimation factor number of new input samples into the state buffer */ - i = S->M; - - do - { - *pStateCur++ = *pSrc++; - - } while (--i); - - /* Set accumulator to zero */ - acc0 = 0; - - /* Initialize state pointer */ - px0 = pState; - - /* Initialize coeff pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Read the b[numTaps-1] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-1] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x0 * c0; - - /* Read the b[numTaps-2] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-2] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x0 * c0; - - /* Read the b[numTaps-3] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-3] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x0 * c0; - - /* Read the b[numTaps-4] coefficient */ - c0 = *pb++; - - /* Read x[n-numTaps-4] sample */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x0 * c0; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Read coefficients */ - c0 = *pb++; - - /* Fetch 1 state variable */ - x0 = *px0++; - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x0 * c0; - - /* Decrement 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) (acc0 >> 31); - - /* Decrement 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 */ - pStateCur = S->pState; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = (numTaps - 1U) >> 2U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numTaps - 1U) % 0x04U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ -/** - @} end of FIR_decimate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_f32.c deleted file mode 100644 index 4ce8dfa..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_f32.c +++ /dev/null @@ -1,1305 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_f32.c - * Description: Floating-point FIR filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 Initialization of Helium version - For Helium version the array of coefficients must be a multiple of 16 even if less - then 16 coefficients are used. The additional coefficients must be set to 0. - It does not mean that all the coefficients will be used in the filter (numTaps - is still set to its right value in the init function.) It just means that - the implementation may require to read more coefficients due to the vectorization and - to avoid having to manage too many different cases in the code. - - @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 - @{ - */ - -/** - @brief Processing function for floating-point FIR filter. - @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 - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -static void arm_fir_f32_1_4_mve(const arm_fir_instance_f32 * S, const float32_t * pSrc, float32_t * pDst, uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCur; /* Points to the current sample of the state */ - const float32_t *pSamples; /* Temporary pointer to the sample buffer */ - float32_t *pOutput; /* Temporary pointer to the output buffer */ - const float32_t *pTempSrc; /* Temporary pointer to the source data */ - float32_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - f32x4_t vecIn0; - f32x4_t vecAcc0; - float32_t c0, c1, c2, c3; - - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - pStateCur = &(pState[(numTaps - 1u)]); - pSamples = pState; - pTempSrc = pSrc; - pOutput = pDst; - - if (((numTaps - 1) / 4) == 0) - { - const float32_t *pCoeffsCur = pCoeffs; - - c0 = *pCoeffsCur++; - c1 = *pCoeffsCur++; - c2 = *pCoeffsCur++; - c3 = *pCoeffsCur++; - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamples); - vecAcc0 = vmulq(vecIn0, c0); - - vecIn0 = vld1q(&pSamples[1]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c1); - - vecIn0 = vld1q(&pSamples[2]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c2); - - vecIn0 = vld1q(&pSamples[3]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c3); - - vst1q(pOutput, vecAcc0); - - pOutput += 4; - pSamples += 4; - - blkCnt--; - } - - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - - vstrwq_p_f32(pStateCur, vld1q(pTempSrc),p0); - pStateCur += blkCnt; - pTempSrc += blkCnt; - - vecIn0 = vld1q(pSamples); - vecAcc0 = vmulq(vecIn0, c0); - - vecIn0 = vld1q(&pSamples[1]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c1); - - vecIn0 = vld1q(&pSamples[2]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c2); - - vecIn0 = vld1q(&pSamples[3]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c3); - - vstrwq_p_f32(pOutput, vecAcc0, p0); - } - } - - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &S->pState[blockSize]; - pTempDest = S->pState; - - blkCnt = numTaps >> 2; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 4; - pTempDest += 4; - blkCnt--; - } - - blkCnt = numTaps & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_f32(pTempDest, vld1q(pTempSrc), p0); - } -} - - -static void arm_fir_f32_5_8_mve(const arm_fir_instance_f32 * S, const float32_t * pSrc, float32_t * pDst, uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCur; /* Points to the current sample of the state */ - const float32_t *pSamples; /* Temporary pointer to the sample buffer */ - float32_t *pOutput; /* Temporary pointer to the output buffer */ - const float32_t *pTempSrc; /* Temporary pointer to the source data */ - float32_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - f32x4_t vecIn0; - f32x4_t vecAcc0; - float32_t c0, c1, c2, c3; - float32_t c4, c5, c6, c7; - const float32_t *pCoeffsCur = pCoeffs; - - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - pStateCur = &(pState[(numTaps - 1u)]); - pTempSrc = pSrc; - - pSamples = pState; - pOutput = pDst; - - c0 = *pCoeffsCur++; - c1 = *pCoeffsCur++; - c2 = *pCoeffsCur++; - c3 = *pCoeffsCur++; - c4 = *pCoeffsCur++; - c5 = *pCoeffsCur++; - c6 = *pCoeffsCur++; - c7 = *pCoeffsCur++; - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamples); - vecAcc0 = vmulq(vecIn0, c0); - - vecIn0 = vld1q(&pSamples[1]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c1); - - vecIn0 = vld1q(&pSamples[2]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c2); - - vecIn0 = vld1q(&pSamples[3]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c3); - - vecIn0 = vld1q(&pSamples[4]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c4); - - vecIn0 = vld1q(&pSamples[5]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c5); - - vecIn0 = vld1q(&pSamples[6]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c6); - - vecIn0 = vld1q(&pSamples[7]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c7); - - vst1q(pOutput, vecAcc0); - - pOutput += 4; - pSamples += 4; - - blkCnt--; - } - - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - - vstrwq_p_f32(pStateCur, vld1q(pTempSrc),p0); - pStateCur += blkCnt; - pTempSrc += blkCnt; - - vecIn0 = vld1q(pSamples); - vecAcc0 = vmulq(vecIn0, c0); - - vecIn0 = vld1q(&pSamples[1]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c1); - - vecIn0 = vld1q(&pSamples[2]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c2); - - vecIn0 = vld1q(&pSamples[3]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c3); - - vecIn0 = vld1q(&pSamples[4]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c4); - - vecIn0 = vld1q(&pSamples[5]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c5); - - vecIn0 = vld1q(&pSamples[6]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c6); - - vecIn0 = vld1q(&pSamples[7]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c7); - - vstrwq_p_f32(pOutput, vecAcc0, p0); - } - - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &S->pState[blockSize]; - pTempDest = S->pState; - - blkCnt = numTaps >> 2; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 4; - pTempDest += 4; - blkCnt--; - } - - blkCnt = numTaps & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_f32(pTempDest, vld1q(pTempSrc), p0); - } -} - - -void arm_fir_f32( -const arm_fir_instance_f32 * S, -const float32_t * pSrc, -float32_t * pDst, -uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCur; /* Points to the current sample of the state */ - const float32_t *pSamples; /* Temporary pointer to the sample buffer */ - float32_t *pOutput; /* Temporary pointer to the output buffer */ - const float32_t *pTempSrc; /* Temporary pointer to the source data */ - float32_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - int32_t numCnt; - f32x4_t vecIn0; - f32x4_t vecAcc0; - float32_t c0, c1, c2, c3; - float32_t c4, c5, c6, c7; - - /* - * [1 to 8 taps] specialized routines - */ - if (blockSize >= 8) - { - if (numTaps <= 4) - { - arm_fir_f32_1_4_mve(S, pSrc, pDst, blockSize); - return; - } - } - if (blockSize >= 8) - { - if (numTaps <= 8) - { - arm_fir_f32_5_8_mve(S, pSrc, pDst, blockSize); - return; - } - } - - if (blockSize >= 8) - { - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - pStateCur = &(pState[(numTaps - 1u)]); - pTempSrc = pSrc; - pSamples = pState; - pOutput = pDst; - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - int32_t i; - const float32_t *pCoeffsCur = pCoeffs; - - c0 = *pCoeffsCur++; - c1 = *pCoeffsCur++; - c2 = *pCoeffsCur++; - c3 = *pCoeffsCur++; - c4 = *pCoeffsCur++; - c5 = *pCoeffsCur++; - c6 = *pCoeffsCur++; - c7 = *pCoeffsCur++; - - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamples); - vecAcc0 = vmulq(vecIn0, c0); - - vecIn0 = vld1q(&pSamples[1]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c1); - - vecIn0 = vld1q(&pSamples[2]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c2); - - vecIn0 = vld1q(&pSamples[3]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c3); - - vecIn0 = vld1q(&pSamples[4]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c4); - - vecIn0 = vld1q(&pSamples[5]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c5); - - vecIn0 = vld1q(&pSamples[6]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c6); - - vecIn0 = vld1q(&pSamples[7]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c7); - - pSamples += 8; - - numCnt = ((int32_t)numTaps - 8) / 8; - - for (i = 0; i < numCnt; i++) - { - c0 = *pCoeffsCur++; - c1 = *pCoeffsCur++; - c2 = *pCoeffsCur++; - c3 = *pCoeffsCur++; - c4 = *pCoeffsCur++; - c5 = *pCoeffsCur++; - c6 = *pCoeffsCur++; - c7 = *pCoeffsCur++; - - vecIn0 = vld1q(pSamples); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c0); - - vecIn0 = vld1q(&pSamples[1]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c1); - - vecIn0 = vld1q(&pSamples[2]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c2); - - vecIn0 = vld1q(&pSamples[3]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c3); - - vecIn0 = vld1q(&pSamples[4]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c4); - - vecIn0 = vld1q(&pSamples[5]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c5); - - vecIn0 = vld1q(&pSamples[6]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c6); - - vecIn0 = vld1q(&pSamples[7]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c7); - - pSamples += 8; - } - - numCnt = ((int32_t)numTaps - 8) & 7; - - while (numCnt > 0) - { - c0 = *pCoeffsCur++; - vecIn0 = vld1q(pSamples); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c0); - pSamples ++; - - numCnt --; - } - - vst1q(pOutput, vecAcc0); - pOutput += 4; - pSamples = pSamples - numTaps + 4; - - blkCnt--; - } - - blkCnt = blockSize & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - int32_t i; - const float32_t *pCoeffsCur = pCoeffs; - - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - c0 = *pCoeffsCur++; - c1 = *pCoeffsCur++; - c2 = *pCoeffsCur++; - c3 = *pCoeffsCur++; - c4 = *pCoeffsCur++; - c5 = *pCoeffsCur++; - c6 = *pCoeffsCur++; - c7 = *pCoeffsCur++; - - vecIn0 = vld1q(pSamples); - vecAcc0 = vmulq(vecIn0, c0); - - vecIn0 = vld1q(&pSamples[1]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c1); - - vecIn0 = vld1q(&pSamples[2]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c2); - - vecIn0 = vld1q(&pSamples[3]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c3); - - vecIn0 = vld1q(&pSamples[4]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c4); - - vecIn0 = vld1q(&pSamples[5]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c5); - - vecIn0 = vld1q(&pSamples[6]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c6); - - vecIn0 = vld1q(&pSamples[7]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c7); - - pSamples += 8; - - numCnt = ((int32_t)numTaps - 8) / 8; - - for (i = 0; i < numCnt; i++) - { - c0 = *pCoeffsCur++; - c1 = *pCoeffsCur++; - c2 = *pCoeffsCur++; - c3 = *pCoeffsCur++; - c4 = *pCoeffsCur++; - c5 = *pCoeffsCur++; - c6 = *pCoeffsCur++; - c7 = *pCoeffsCur++; - - vecIn0 = vld1q(pSamples); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c0); - - vecIn0 = vld1q(&pSamples[1]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c1); - - vecIn0 = vld1q(&pSamples[2]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c2); - - vecIn0 = vld1q(&pSamples[3]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c3); - - vecIn0 = vld1q(&pSamples[4]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c4); - - vecIn0 = vld1q(&pSamples[5]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c5); - - vecIn0 = vld1q(&pSamples[6]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c6); - - vecIn0 = vld1q(&pSamples[7]); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c7); - - pSamples += 8; - } - - numCnt = ((int32_t)numTaps - 8) & 7; - - while (numCnt > 0) - { - c0 = *pCoeffsCur++; - vecIn0 = vld1q(pSamples); - vecAcc0 = vfmaq(vecAcc0, vecIn0, c0); - pSamples ++; - - numCnt --; - } - - vstrwq_p_f32(pOutput, vecAcc0, p0); - } - } - else - { - float32_t *pStateCurnt; /* Points to the current sample of the state */ - float32_t *px; /* Temporary pointer for state buffer */ - const float32_t *pb; /* Temporary pointer for coefficient buffer */ - float32_t acc0; /* Accumulator */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t i, blkCnt; /* Loop counters */ - pStateCurnt = &(S->pState[(numTaps - 1U)]); - - blkCnt = blockSize; - 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 */ - 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] */ - acc0 += *px++ * *pb++; - - i--; - } - - - /* Store result in destination buffer. */ - *pDst++ = acc0; - - /* Advance state pointer by 1 for the next sample */ - pState = pState + 1U; - - /* Decrement loop counter */ - blkCnt--; - } - } - - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &S->pState[blockSize]; - pTempDest = S->pState; - - blkCnt = numTaps >> 2; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 4; - pTempDest += 4; - blkCnt--; - } - - blkCnt = numTaps & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_f32(pTempDest, vld1q(pTempSrc), p0); - } -} - -#else -#if defined(ARM_MATH_NEON) - -void arm_fir_f32( -const arm_fir_instance_f32 * S, -const float32_t * pSrc, -float32_t * pDst, -uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCurnt; /* Points to the current sample of the state */ - float32_t *px; /* Temporary pointers for state buffer */ - const float32_t *pb; /* Temporary pointers for coefficient buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t i, tapCnt, blkCnt; /* Loop counters */ - - float32x4_t accv0,accv1,samples0,samples1,x0,x1,x2,xa,xb,b; - 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)]); - - /* Loop unrolling */ - blkCnt = blockSize >> 3; - - while (blkCnt > 0U) - { - /* Copy 8 samples at a time into state buffers */ - samples0 = vld1q_f32(pSrc); - vst1q_f32(pStateCurnt,samples0); - - pStateCurnt += 4; - pSrc += 4 ; - - samples1 = vld1q_f32(pSrc); - vst1q_f32(pStateCurnt,samples1); - - pStateCurnt += 4; - pSrc += 4 ; - - /* Set the accumulators to zero */ - accv0 = vdupq_n_f32(0); - accv1 = vdupq_n_f32(0); - - /* Initialize state pointer */ - px = pState; - - /* Initialize coefficient pointer */ - pb = pCoeffs; - - /* Loop unroling */ - i = numTaps >> 2; - - /* Perform the multiply-accumulates */ - x0 = vld1q_f32(px); - x1 = vld1q_f32(px + 4); - - while(i > 0) - { - /* 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] */ - x2 = vld1q_f32(px + 8); - b = vld1q_f32(pb); - xa = x0; - xb = x1; - accv0 = vmlaq_n_f32(accv0,xa,vgetq_lane_f32(b, 0)); - accv1 = vmlaq_n_f32(accv1,xb,vgetq_lane_f32(b, 0)); - - xa = vextq_f32(x0,x1,1); - xb = vextq_f32(x1,x2,1); - - accv0 = vmlaq_n_f32(accv0,xa,vgetq_lane_f32(b, 1)); - accv1 = vmlaq_n_f32(accv1,xb,vgetq_lane_f32(b, 1)); - - xa = vextq_f32(x0,x1,2); - xb = vextq_f32(x1,x2,2); - - accv0 = vmlaq_n_f32(accv0,xa,vgetq_lane_f32(b, 2)); - accv1 = vmlaq_n_f32(accv1,xb,vgetq_lane_f32(b, 2)); - - xa = vextq_f32(x0,x1,3); - xb = vextq_f32(x1,x2,3); - - accv0 = vmlaq_n_f32(accv0,xa,vgetq_lane_f32(b, 3)); - accv1 = vmlaq_n_f32(accv1,xb,vgetq_lane_f32(b, 3)); - - pb += 4; - x0 = x1; - x1 = x2; - px += 4; - i--; - - } - - /* Tail */ - i = numTaps & 3; - x2 = vld1q_f32(px + 8); - - /* Perform the multiply-accumulates */ - switch(i) - { - case 3: - { - accv0 = vmlaq_n_f32(accv0,x0,*pb); - accv1 = vmlaq_n_f32(accv1,x1,*pb); - - pb++; - - xa = vextq_f32(x0,x1,1); - xb = vextq_f32(x1,x2,1); - - accv0 = vmlaq_n_f32(accv0,xa,*pb); - accv1 = vmlaq_n_f32(accv1,xb,*pb); - - pb++; - - xa = vextq_f32(x0,x1,2); - xb = vextq_f32(x1,x2,2); - - accv0 = vmlaq_n_f32(accv0,xa,*pb); - accv1 = vmlaq_n_f32(accv1,xb,*pb); - - } - break; - case 2: - { - accv0 = vmlaq_n_f32(accv0,x0,*pb); - accv1 = vmlaq_n_f32(accv1,x1,*pb); - - pb++; - - xa = vextq_f32(x0,x1,1); - xb = vextq_f32(x1,x2,1); - - accv0 = vmlaq_n_f32(accv0,xa,*pb); - accv1 = vmlaq_n_f32(accv1,xb,*pb); - - } - break; - case 1: - { - - accv0 = vmlaq_n_f32(accv0,x0,*pb); - accv1 = vmlaq_n_f32(accv1,x1,*pb); - - } - break; - default: - break; - } - - /* The result is stored in the destination buffer. */ - vst1q_f32(pDst,accv0); - pDst += 4; - vst1q_f32(pDst,accv1); - pDst += 4; - - /* Advance state pointer by 8 for the next 8 samples */ - pState = pState + 8; - - blkCnt--; - } - - /* Tail */ - blkCnt = blockSize & 0x7; - - 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 stored 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 -void arm_fir_f32( - const arm_fir_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCurnt; /* Points to the current sample of the state */ - float32_t *px; /* Temporary pointer for state buffer */ - const float32_t *pb; /* Temporary pointer for coefficient buffer */ - float32_t acc0; /* Accumulator */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t i, tapCnt, blkCnt; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - float32_t acc1, acc2, acc3, acc4, acc5, acc6, acc7; /* Accumulators */ - float32_t x0, x1, x2, x3, x4, x5, x6, x7; /* Temporary variables to hold state values */ - float32_t c0; /* Temporary variable to hold coefficient value */ -#endif - - /* 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)]); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: 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 >> 3U; - - while (blkCnt > 0U) - { - /* Copy 4 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 coefficient 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 7 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; - - 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; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - 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 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; - - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining output samples */ - blkCnt = blockSize % 0x8U; - -#else - - /* Initialize blkCnt with number of taps */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 */ - 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] */ - acc0 += *px++ * *pb++; - - i--; - } - - /* Store result in destination buffer. */ - *pDst++ = acc0; - - /* Advance state pointer by 1 for the next sample */ - pState = pState + 1U; - - /* Decrement 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = (numTaps - 1U) >> 2U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Calculate remaining number of copies */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy remaining data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} - -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** -* @} end of FIR group -*/ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_fast_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_fast_q15.c deleted file mode 100644 index 5f8df95..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_fast_q15.c +++ /dev/null @@ -1,332 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_fast_q15.c - * Description: Q15 Fast FIR filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR - @{ - */ - -/** - @brief Processing function for the Q15 FIR filter (fast version). - @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 - @return none - - @par Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref 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 function \ref arm_fir_init_q15() to initialize the filter structure. - */ - -void arm_fir_fast_q15( - const arm_fir_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const 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 */ - const q15_t *pb; /* Temporary pointer for coefficient buffer */ - q31_t acc0; /* Accumulators */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t tapCnt, blkCnt; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc1, acc2, acc3; /* Accumulators */ - q31_t x0, x1, x2, c0; /* Temporary variables to hold state and coefficient values */ -#endif - - /* 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)]); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: 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 >> 2U; - - while (blkCnt > 0U) - { - /* Copy 4 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; - - /* 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 = read_q15x2_ia (&px); - - /* Read the third and forth samples from the state buffer: x[n-N-2], x[n-N-3] */ - x2 = read_q15x2_ia (&px); - - /* Loop over the number of taps. Unroll by a factor of 4. - Repeat until we've computed numTaps-(numTaps%4) coefficients. */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Read the first two coefficients using SIMD: b[N] and b[N-1] coefficients */ - c0 = read_q15x2_ia ((q15_t **) &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 = read_q15x2_ia (&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 = read_q15x2_ia ((q15_t **) &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 = read_q15x2_ia (&px); - - /* 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); - - /* 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 = read_q15x2_ia ((q15_t **) &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 = read_q15x2 (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 - write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); - write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); -#else - write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); - write_q15x2_ia (&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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining output samples */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of taps */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = (numTaps - 1U) >> 2U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Calculate remaining number of copies */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy remaining data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} - -/** - @} end of FIR group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_fast_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_fast_q31.c deleted file mode 100644 index 513cb72..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_fast_q31.c +++ /dev/null @@ -1,324 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_fast_q31.c - * Description: Processing function for the Q31 Fast FIR filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR - @{ - */ - -/** - @brief Processing function for the Q31 FIR filter (fast version). - @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 of output data - @param[in] blockSize number of samples to process - @return none - - @par Scaling and Overflow Behavior - 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. - - @remark - Refer to \ref 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 function \ref 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, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCurnt; /* Points to the current sample of the state */ - q31_t *px; /* Temporary pointer for state buffer */ - const q31_t *pb; /* Temporary pointer for coefficient buffer */ - q31_t acc0; /* Accumulators */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t i, tapCnt, blkCnt; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc1, acc2, acc3; /* Accumulators */ - q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ -#endif - - /* 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)]); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: 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 >> 2U; - - while (blkCnt > 0U) - { - /* Copy 4 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 3 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 >> 2U; - - /* 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] 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 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 */ - 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 loop counter */ - tapCnt--; - } - - /* 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); - - /* Advance the state pointer by 4 to process the next group of 4 samples */ - pState = pState + 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining output samples */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of taps */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 + 1U; - - /* Decrement 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = (numTaps - 1U) >> 2U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Calculate remaining number of copies */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy remaining data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement the loop counter */ - tapCnt--; - } - -} -IAR_ONLY_LOW_OPTIMIZATION_EXIT -/** - @} end of FIR group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_f32.c deleted file mode 100644 index 2405c3f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_f32.c +++ /dev/null @@ -1,89 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_init_f32.c - * Description: Floating-point FIR filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR - @{ - */ - -/** - @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 buffer - @param[in] pState points to the state buffer - @param[in] blockSize number of samples processed per call - @return none - - @par Details - 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(). - @par Initialization of Helium version - For Helium version the array of coefficients must be a multiple of 16 even if less - then 16 coefficients are used. The additional coefficients must be set to 0. - It does not mean that all the coefficients will be used in the filter (numTaps - is still set to its right value in the init function.) It just means that - the implementation may require to read more coefficients due to the vectorization and - to avoid having to manage too many different cases in the code. - - */ - -void arm_fir_init_f32( - arm_fir_instance_f32 * S, - uint16_t numTaps, - const float32_t * pCoeffs, - float32_t * pState, - uint32_t blockSize) -{ - /* Assign filter taps */ - S->numTaps = numTaps; - - /* Assign coefficient pointer */ - S->pCoeffs = pCoeffs; - - /* Clear state buffer. The size is always (blockSize + numTaps - 1) */ - memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(float32_t)); - - /* Assign state pointer */ - S->pState = pState; -} - -/** - @} end of FIR group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q15.c deleted file mode 100644 index a5b2d06..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q15.c +++ /dev/null @@ -1,137 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_init_q15.c - * Description: Q15 FIR filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR - @{ - */ - -/** - @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 buffer. - @param[in] pState points to the state buffer. - @param[in] blockSize number of samples processed per call. - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : numTaps is not greater than or equal to 4 and even - - @par Details - 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}.
    -  
    - 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, - const q15_t * pCoeffs, - q15_t * pState, - uint32_t blockSize) -{ - arm_status status; - -#if defined (ARM_MATH_DSP) - - /* 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 - - /* Assign filter taps */ - S->numTaps = numTaps; - - /* Assign coefficient pointer */ - S->pCoeffs = pCoeffs; - - /* Clear 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 /* #if defined (ARM_MATH_DSP) */ - -} - -/** - @} end of FIR group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q31.c deleted file mode 100644 index 7d8376f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q31.c +++ /dev/null @@ -1,80 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_init_q31.c - * Description: Q31 FIR filter initialization function. - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR - @{ - */ - -/** - @brief Initialization function for the Q31 FIR filter. - @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 processed - @return none - - @par Details - 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]}
    -  
    - 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, - const q31_t * pCoeffs, - q31_t * pState, - uint32_t blockSize) -{ - /* Assign filter taps */ - S->numTaps = numTaps; - - /* Assign coefficient pointer */ - S->pCoeffs = pCoeffs; - - /* Clear state buffer. The size is always (blockSize + numTaps - 1) */ - memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(q31_t)); - - /* Assign state pointer */ - S->pState = pState; -} - -/** - @} end of FIR group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q7.c deleted file mode 100644 index f96d250..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_init_q7.c +++ /dev/null @@ -1,81 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_init_q7.c - * Description: Q7 FIR filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR - @{ - */ - -/** - @brief Initialization function for the Q7 FIR filter. - @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 processed - @return none - - @par Details - 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, - const q7_t * pCoeffs, - q7_t * pState, - uint32_t blockSize) -{ - /* Assign filter taps */ - S->numTaps = numTaps; - - /* Assign coefficient pointer */ - S->pCoeffs = pCoeffs; - - /* Clear 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_f32.c deleted file mode 100644 index a5fe0e6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_f32.c +++ /dev/null @@ -1,1252 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_interpolate_f32.c - * Description: Floating-point FIR interpolation sequences - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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. -
    -      {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: -
    -     {x[n-phaseLength+1], x[n-phaseLength], x[n-phaseLength-1], x[n-phaseLength-2]....x[0], x[1], ..., x[blockSize-1]}
    -  
    - @par - 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};
    -  
    - @par - 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 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 samples to process - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -static void arm_fir_interpolate2_f32_mve( - const arm_fir_interpolate_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCurnt; /* Points to the current sample of the state */ - const float32_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ - uint32_t tapCnt; - uint32_t blkCnt; /* Loop counters */ - uint16_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - uint32_t strides[4] = { 0, 1 * 2, 2 * 2, 3 * 2 }; - uint32x4_t vec_strides0 = *(uint32x4_t *) strides; - uint32x4_t vec_strides1 = vec_strides0 + 1; - f32x4_t acc0, acc1; - - /* - * 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++; - /* - * Initialize state pointer - */ - ptr1 = pState; - - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs; - - tapCnt = phaseLen >> 2; - while (tapCnt > 0U) - { - f32x4_t vecCoef, vecState; - - vecState = vldrwq_f32(ptr1); - - vecCoef = vldrwq_gather_shifted_offset_f32(ptr2, vec_strides1); - acc1 = vfmaq_f32(acc1, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_f32(ptr2, vec_strides0); - acc0 = vfmaq_f32(acc0, vecState, vecCoef); - - ptr2 += 4 * 2; - ptr1 += 4; - /* - * Decrement the loop counter - */ - tapCnt--; - } - - tapCnt = phaseLen & 3; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - f32x4_t vecCoef, vecState; - - vecState = vldrwq_z_f32(ptr1, p0); - - vecCoef = vldrwq_gather_shifted_offset_z_f32(ptr2, vec_strides1, p0); - acc1 = vfmaq_f32(acc1, vecState, vecCoef); - vecCoef = vldrwq_gather_shifted_offset_z_f32(ptr2, vec_strides0, p0); - acc0 = vfmaq_f32(acc0, vecState, vecCoef); - - } - *pDst++ = vecAddAcrossF32Mve(acc1); - *pDst++ = vecAddAcrossF32Mve(acc0); - - /* - * 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; - blkCnt = (phaseLen - 1U) >> 2; - while (blkCnt > 0U) - { - vst1q(pStateCurnt, vldrwq_f32(pState)); - pState += 4; - pStateCurnt += 4; - blkCnt--; - } - blkCnt = (phaseLen - 1U) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_f32(pStateCurnt, vldrwq_f32(pState), p0); - } -} - -void arm_fir_interpolate_f32( - const arm_fir_interpolate_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCurnt; /* Points to the current sample of the state */ - const float32_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ - uint32_t tapCnt; - uint32_t i, blkCnt; /* Loop counters */ - uint16_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - uint32_t strides[4] = { 0, 1 * S->L, 2 * S->L, 3 * S->L }; - uint32_t stridesM[4] = { 4, 3, 2, 1 }; - uint32x4_t vec_stridesM = *(uint32x4_t *) stridesM; - uint32x4_t vec_strides = *(uint32x4_t *) strides; - f32x4_t acc; - - - if ( S->L == 2 ) { - arm_fir_interpolate2_f32_mve(S, pSrc, pDst, blockSize); - return; - } - - /* - * 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) - { - /* - * Initialize state pointer - */ - ptr1 = pState; - if (i >= 4) - { - float32_t state0, state1, state2, state3; - acc = vdupq_n_f32(0.0f); - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1U) - 4; - tapCnt = phaseLen >> 2; - while (tapCnt > 0U) - { - f32x4_t vecCoef; - const float32_t *pCoef = ptr2; - - state0 = ptr1[0]; - state1 = ptr1[1]; - state2 = ptr1[2]; - state3 = ptr1[3]; - ptr1 += 4; - - vecCoef = vldrwq_gather_shifted_offset_f32(pCoef, vec_stridesM); - pCoef += S->L; - acc = vfmaq_n_f32(acc, vecCoef, state0); - - vecCoef = vldrwq_gather_shifted_offset_f32(pCoef, vec_stridesM); - pCoef += S->L; - acc = vfmaq_n_f32(acc, vecCoef, state1); - - vecCoef = vldrwq_gather_shifted_offset_f32(pCoef, vec_stridesM); - pCoef += S->L; - acc = vfmaq_n_f32(acc, vecCoef, state2); - - vecCoef = vldrwq_gather_shifted_offset_f32(pCoef, vec_stridesM); - pCoef += S->L; - acc = vfmaq_n_f32(acc, vecCoef, state3); - - ptr2 = ptr2 + 4 * S->L; - /* - * Decrement the loop counter - */ - tapCnt--; - } - - tapCnt = phaseLen & 3; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - f32x4_t vecCoef; - const float32_t *pCoef = ptr2; - - state0 = ptr1[0]; - state1 = ptr1[1]; - state2 = ptr1[2]; - state3 = ptr1[3]; - - vecCoef = vldrwq_gather_shifted_offset_z_f32(pCoef, vec_stridesM, p0); - pCoef += S->L; - acc = vfmaq_n_f32(acc, vecCoef, state0); - - vecCoef = vldrwq_gather_shifted_offset_z_f32(pCoef, vec_stridesM, p0); - pCoef += S->L; - acc = vfmaq_n_f32(acc, vecCoef, state1); - - vecCoef = vldrwq_gather_shifted_offset_z_f32(pCoef, vec_stridesM, p0); - pCoef += S->L; - acc = vfmaq_n_f32(acc, vecCoef, state2); - - vecCoef = vldrwq_gather_shifted_offset_z_f32(pCoef, vec_stridesM, p0); - pCoef += S->L; - acc = vfmaq_n_f32(acc, vecCoef, state3); - } - - vst1q(pDst, acc); - pDst += 4; - i -= 4; - } - else - { - acc = vdupq_n_f32(0.0f); - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1U); - - tapCnt = phaseLen >> 2; - while (tapCnt > 0U) - { - f32x4_t vecCoef, vecState; - - vecState = vldrwq_f32(ptr1); - ptr1 += 4; - - vecCoef = vldrwq_gather_shifted_offset_f32(ptr2, vec_strides); - ptr2 += 4 * S->L; - acc = vfmaq_f32(acc, vecState, vecCoef); - /* - * Decrement the loop counter - */ - tapCnt--; - } - - tapCnt = phaseLen & 3; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - f32x4_t vecCoef, vecState; - - vecState = vldrwq_z_f32(ptr1, p0); - - vecCoef = vldrwq_gather_shifted_offset_z_f32(ptr2, vec_strides, p0); - acc = vfmaq_f32(acc, vecState, vecCoef); - } - *pDst++ = vecAddAcrossF32Mve(acc); - /* - * 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; - blkCnt = (phaseLen - 1U) >> 2; - while (blkCnt > 0U) - { - vst1q(pStateCurnt, vldrwq_f32(pState)); - pState += 4; - pStateCurnt += 4; - blkCnt--; - } - blkCnt = (phaseLen - 1U) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_f32(pStateCurnt, vldrwq_f32(pState), p0); - } -} - -#else -#if defined(ARM_MATH_NEON) -void arm_fir_interpolate_f32( - const arm_fir_interpolate_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCurnt; /* Points to the current sample of the state */ - float32_t *ptr1; /* Temporary pointers for state buffer */ - const float32_t *ptr2; /* Temporary pointers for coefficient buffer */ - float32_t sum0; /* Accumulators */ - float32_t 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 blkCntN4; - float32_t c1, c2, c3; - - float32x4_t sum0v; - float32x4_t accV0,accV1; - float32x4_t x0v,x1v,x2v,xa,xb; - float32x2_t tempV; - - /* 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 >> 3; - blkCntN4 = blockSize & 7; - - /* Loop unrolling */ - while (blkCnt > 0U) - { - /* Copy new input samples into the state buffer */ - sum0v = vld1q_f32(pSrc); - vst1q_f32(pStateCurnt,sum0v); - pSrc += 4; - pStateCurnt += 4; - - sum0v = vld1q_f32(pSrc); - vst1q_f32(pStateCurnt,sum0v); - pSrc += 4; - pStateCurnt += 4; - - /* Address modifier index of coefficient buffer */ - j = 1U; - - /* Loop over the Interpolation factor. */ - i = (S->L); - - while (i > 0U) - { - /* Set accumulator to zero */ - accV0 = vdupq_n_f32(0.0); - accV1 = vdupq_n_f32(0.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; - - x0v = vld1q_f32(ptr1); - x1v = vld1q_f32(ptr1 + 4); - - while (tapCnt > 0U) - { - /* Read the input samples */ - x2v = vld1q_f32(ptr1 + 8); - - /* Read the coefficients */ - c0 = *(ptr2); - - /* Perform the multiply-accumulate */ - accV0 = vmlaq_n_f32(accV0,x0v,c0); - accV1 = vmlaq_n_f32(accV1,x1v,c0); - - /* Read the coefficients, inputs and perform multiply-accumulate */ - c1 = *(ptr2 + S->L); - - xa = vextq_f32(x0v,x1v,1); - xb = vextq_f32(x1v,x2v,1); - - accV0 = vmlaq_n_f32(accV0,xa,c1); - accV1 = vmlaq_n_f32(accV1,xb,c1); - - /* Read the coefficients, inputs and perform multiply-accumulate */ - c2 = *(ptr2 + S->L * 2); - - xa = vextq_f32(x0v,x1v,2); - xb = vextq_f32(x1v,x2v,2); - - accV0 = vmlaq_n_f32(accV0,xa,c2); - accV1 = vmlaq_n_f32(accV1,xb,c2); - - /* Read the coefficients, inputs and perform multiply-accumulate */ - c3 = *(ptr2 + S->L * 3); - - xa = vextq_f32(x0v,x1v,3); - xb = vextq_f32(x1v,x2v,3); - - accV0 = vmlaq_n_f32(accV0,xa,c3); - accV1 = vmlaq_n_f32(accV1,xb,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; - ptr1 += 4; - x0v = x1v; - x1v = x2v; - - /* Decrement the loop counter */ - tapCnt--; - } - - /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ - tapCnt = phaseLen % 0x4U; - - x2v = vld1q_f32(ptr1 + 8); - - switch (tapCnt) - { - case 3: - c0 = *(ptr2); - accV0 = vmlaq_n_f32(accV0,x0v,c0); - accV1 = vmlaq_n_f32(accV1,x1v,c0); - ptr2 += S->L; - - c0 = *(ptr2); - - xa = vextq_f32(x0v,x1v,1); - xb = vextq_f32(x1v,x2v,1); - - accV0 = vmlaq_n_f32(accV0,xa,c0); - accV1 = vmlaq_n_f32(accV1,xb,c0); - ptr2 += S->L; - - c0 = *(ptr2); - - xa = vextq_f32(x0v,x1v,2); - xb = vextq_f32(x1v,x2v,2); - - accV0 = vmlaq_n_f32(accV0,xa,c0); - accV1 = vmlaq_n_f32(accV1,xb,c0); - ptr2 += S->L; - - break; - - case 2: - c0 = *(ptr2); - accV0 = vmlaq_n_f32(accV0,x0v,c0); - accV1 = vmlaq_n_f32(accV1,x1v,c0); - ptr2 += S->L; - - c0 = *(ptr2); - - xa = vextq_f32(x0v,x1v,1); - xb = vextq_f32(x1v,x2v,1); - - accV0 = vmlaq_n_f32(accV0,xa,c0); - accV1 = vmlaq_n_f32(accV1,xb,c0); - ptr2 += S->L; - - break; - - case 1: - c0 = *(ptr2); - accV0 = vmlaq_n_f32(accV0,x0v,c0); - accV1 = vmlaq_n_f32(accV1,x1v,c0); - ptr2 += S->L; - - break; - - default: - break; - - } - - /* The result is in the accumulator, store in the destination buffer. */ - *pDst = vgetq_lane_f32(accV0, 0); - *(pDst + S->L) = vgetq_lane_f32(accV0, 1); - *(pDst + 2 * S->L) = vgetq_lane_f32(accV0, 2); - *(pDst + 3 * S->L) = vgetq_lane_f32(accV0, 3); - - *(pDst + 4 * S->L) = vgetq_lane_f32(accV1, 0); - *(pDst + 5 * S->L) = vgetq_lane_f32(accV1, 1); - *(pDst + 6 * S->L) = vgetq_lane_f32(accV1, 2); - *(pDst + 7 * S->L) = vgetq_lane_f32(accV1, 3); - - 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 + 8; - - pDst += S->L * 7; - - /* 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 */ - sum0v = vdupq_n_f32(0.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; - - while (tapCnt > 0U) - { - /* Read the coefficient */ - x1v = vsetq_lane_f32(*(ptr2),x1v,0); - - /* 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 */ - x0v = vld1q_f32(ptr1); - ptr1 += 4; - - /* Read the coefficient */ - x1v = vsetq_lane_f32(*(ptr2),x1v,1); - - /* Increment the coefficient pointer by interpolation factor times. */ - ptr2 += S->L; - - /* Read the coefficient */ - x1v = vsetq_lane_f32(*(ptr2),x1v,2); - - /* Increment the coefficient pointer by interpolation factor times. */ - ptr2 += S->L; - - /* Read the coefficient */ - x1v = vsetq_lane_f32(*(ptr2),x1v,3); - - /* Increment the coefficient pointer by interpolation factor times. */ - ptr2 += S->L; - - sum0v = vmlaq_f32(sum0v,x0v,x1v); - - /* Decrement the loop counter */ - tapCnt--; - } - - tempV = vpadd_f32(vget_low_f32(sum0v),vget_high_f32(sum0v)); - sum0 = vget_lane_f32(tempV, 0) + vget_lane_f32(tempV, 1); - - /* 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) - { - sum0v = vld1q_f32(pState); - vst1q_f32(pStateCurnt,sum0v); - pState += 4; - pStateCurnt += 4; - - /* 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_f32( - const arm_fir_interpolate_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ -#if (1) -//#if !defined(ARM_MATH_CM0_FAMILY) - - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCur; /* Points to the current sample of the state */ - float32_t *ptr1; /* Temporary pointer for state buffer */ - const float32_t *ptr2; /* Temporary pointer for coefficient buffer */ - float32_t sum0; /* Accumulators */ - uint32_t i, blkCnt, tapCnt; /* Loop counters */ - uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - uint32_t j; - -#if defined (ARM_MATH_LOOPUNROLL) - float32_t acc0, acc1, acc2, acc3; - float32_t x0, x1, x2, x3; - float32_t c0, c1, c2, c3; -#endif - - /* S->pState buffer contains previous frame (phaseLen - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (phaseLen - 1U); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* Copy new input sample into the state buffer */ - *pStateCur++ = *pSrc++; - *pStateCur++ = *pSrc++; - *pStateCur++ = *pSrc++; - *pStateCur++ = *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 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 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 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Copy new input sample into the state buffer */ - *pStateCur++ = *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. - Repeat until we've computed numTaps-(4*S->L) coefficients. */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - tapCnt = phaseLen >> 2U; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - sum0 += *ptr1++ * *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; - - sum0 += *ptr1++ * *ptr2; - ptr2 += S->L; - - sum0 += *ptr1++ * *ptr2; - ptr2 += S->L; - - sum0 += *ptr1++ * *ptr2; - ptr2 += S->L; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - tapCnt = phaseLen % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = phaseLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - sum0 += *ptr1++ * *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; - - /* Decrement 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 */ - 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 */ - pStateCur = S->pState; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - tapCnt = (phaseLen - 1U) >> 2U; - - /* copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - tapCnt = (phaseLen - 1U) % 0x04U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = (phaseLen - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#else -/* alternate version for CM0_FAMILY */ - - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *pStateCur; /* Points to the current sample of the state */ - float32_t *ptr1; /* Temporary pointer for state buffer */ - const float32_t *ptr2; /* Temporary pointer for coefficient buffer */ - float32_t sum0; /* Accumulators */ - uint32_t i, blkCnt, tapCnt; /* Loop counters */ - uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - - /* S->pState buffer contains previous frame (phaseLen - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = 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 */ - *pStateCur++ = *pSrc++; - - /* 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 + (i - 1U); - - /* Loop over the polyPhase length */ - tapCnt = phaseLen; - - 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; - - /* Decrement loop counter */ - i--; - } - - /* Advance the state pointer by 1 - * to process the next group of interpolation factor number samples */ - pState = pState + 1; - - /* Decrement 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 */ - pStateCur = S->pState; - - tapCnt = phaseLen - 1U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} - -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ -/** - @} end of FIR_Interpolate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c deleted file mode 100644 index 287d347..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c +++ /dev/null @@ -1,106 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_interpolate_init_f32.c - * Description: Floating-point FIR interpolator initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : filter length numTaps is not a multiple of the interpolation factor L - - @par Details - 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]}
    -  
    - @par - 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, - const 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 buffer 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c deleted file mode 100644 index 7f43bbf..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c +++ /dev/null @@ -1,106 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_interpolate_init_q15.c - * Description: Q15 FIR interpolator initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : filter length numTaps is not a multiple of the interpolation factor L - - - @par Details - 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c deleted file mode 100644 index 248e236..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c +++ /dev/null @@ -1,105 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_interpolate_init_q31.c - * Description: Q31 FIR interpolator initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : filter length numTaps is not a multiple of the interpolation factor L - - @par Details - 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_q15.c deleted file mode 100644 index a889793..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_q15.c +++ /dev/null @@ -1,774 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_interpolate_q15.c - * Description: Q15 FIR interpolation - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" -void arm_fir_interpolate_q15( - const arm_fir_interpolate_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCurnt; /* Points to the current sample of the state */ - const q15_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ - - uint32_t i, blkCnt; /* Loop counters */ - uint16_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - uint16_t strides[8] = { - 0, 1 * S->L, 2 * S->L, 3 * S->L, - 4 * S->L, 5 * S->L, 6 * S->L, 7 * S->L - }; - uint16x8_t vec_strides0 = *(uint16x8_t *) strides; - uint16x8_t vec_strides1 = vec_strides0 + 1; - uint16x8_t vec_strides2 = vec_strides0 + 2; - uint16x8_t vec_strides3 = vec_strides0 + 3; - q15x8_t vecState, vecCoef; - - /* - * 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 + ((q15_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) - { - /* - * Initialize state pointer - */ - ptr1 = pState; - if (i >= 4) - { - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1 - 3U); - - q63_t acc0 = 0LL; - q63_t acc1 = 0LL; - q63_t acc2 = 0LL; - q63_t acc3 = 0LL; - - uint32_t tapCnt = phaseLen >> 3; - while (tapCnt > 0U) - { - vecState = vldrhq_s16(ptr1); - - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides3); - acc0 = vmlaldavaq(acc0, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides2); - acc1 = vmlaldavaq(acc1, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides1); - acc2 = vmlaldavaq(acc2, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides0); - acc3 = vmlaldavaq(acc3, vecState, vecCoef); - - ptr1 += 8; - ptr2 = ptr2 + S->L * 8; - tapCnt--; - } - tapCnt = phaseLen & 7; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp16q(tapCnt); - - vecState = vldrhq_z_s16(ptr1, p0); - - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides3, p0); - acc0 = vmlaldavaq(acc0, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides2, p0); - acc1 = vmlaldavaq(acc1, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides1, p0); - acc2 = vmlaldavaq(acc2, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides0, p0); - acc3 = vmlaldavaq(acc3, vecState, vecCoef); - } - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - acc2 = asrl(acc2, 15); - acc3 = asrl(acc3, 15); - - *pDst++ = (q15_t) __SSAT(acc0, 16); - *pDst++ = (q15_t) __SSAT(acc1, 16); - *pDst++ = (q15_t) __SSAT(acc2, 16); - *pDst++ = (q15_t) __SSAT(acc3, 16); - i -= 4; - } - else if (i >= 3) - { - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1U - 2); - - q63_t acc0 = 0LL; - q63_t acc1 = 0LL; - q63_t acc2 = 0LL; - - uint32_t tapCnt = phaseLen >> 3; - while (tapCnt > 0U) - { - vecState = vldrhq_s16(ptr1); - - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides2); - acc0 = vmlaldavaq(acc0, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides1); - acc1 = vmlaldavaq(acc1, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides0); - acc2 = vmlaldavaq(acc2, vecState, vecCoef); - - ptr1 += 8; - ptr2 = ptr2 + S->L * 8; - tapCnt--; - } - tapCnt = phaseLen & 7; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp16q(tapCnt); - - vecState = vldrhq_z_s16(ptr1, p0); - - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides2, p0); - acc0 = vmlaldavaq(acc0, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides1, p0); - acc1 = vmlaldavaq(acc1, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides0, p0); - acc2 = vmlaldavaq(acc2, vecState, vecCoef); - } - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - acc2 = asrl(acc2, 15); - - *pDst++ = (q15_t) __SSAT(acc0, 16);; - *pDst++ = (q15_t) __SSAT(acc1, 16);; - *pDst++ = (q15_t) __SSAT(acc2, 16);; - i -= 3; - } - else if (i >= 2) - { - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1U - 1); - - q63_t acc0 = 0LL; - q63_t acc1 = 0LL; - - uint32_t tapCnt = phaseLen >> 3; - while (tapCnt > 0U) - { - vecState = vldrhq_s16(ptr1); - - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides1); - acc0 = vmlaldavaq(acc0, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides0); - acc1 = vmlaldavaq(acc1, vecState, vecCoef); - - ptr1 += 8; - ptr2 = ptr2 + S->L * 8; - tapCnt--; - } - tapCnt = phaseLen & 7; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp16q(tapCnt); - - vecState = vldrhq_z_s16(ptr1, p0); - - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides1, p0); - acc0 = vmlaldavaq(acc0, vecState, vecCoef); - - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides0, p0); - acc1 = vmlaldavaq(acc1, vecState, vecCoef); - } - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - - *pDst++ = (q15_t) __SSAT(acc0, 16); - *pDst++ = (q15_t) __SSAT(acc1, 16); - i -= 2; - } - else - { - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1U); - - q63_t acc0 = 0LL; - - uint32_t tapCnt = phaseLen >> 3; - while (tapCnt > 0U) - { - vecState = vldrhq_s16(ptr1); - vecCoef = vldrhq_gather_shifted_offset_s16(ptr2, vec_strides0); - - acc0 = vmlaldavaq(acc0, vecState, vecCoef); - - ptr1 += 8; - ptr2 = ptr2 + S->L * 8; - tapCnt--; - } - tapCnt = phaseLen & 7; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp16q(tapCnt); - - vecState = vldrhq_z_s16(ptr1, p0); - vecCoef = vldrhq_gather_shifted_offset_z_s16(ptr2, vec_strides0, p0); - acc0 = vmlaldavaq(acc0, vecState, vecCoef); - } - - acc0 = asrl(acc0, 15); - *pDst++ = (q15_t) __SSAT(acc0, 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 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; - blkCnt = (phaseLen - 1U) >> 3; - while (blkCnt > 0U) - { - vstrhq_s16(pStateCurnt, vldrhq_s16(pState)); - pState += 8; - pStateCurnt += 8; - blkCnt--; - } - blkCnt = (phaseLen - 1U) & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vstrhq_p_s16(pStateCurnt, vldrhq_s16(pState), p0); - } -} -#else -void arm_fir_interpolate_q15( - const arm_fir_interpolate_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ -#if (1) -//#if !defined(ARM_MATH_CM0_FAMILY) - - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCur; /* Points to the current sample of the state */ - q15_t *ptr1; /* Temporary pointer for state buffer */ - const q15_t *ptr2; /* Temporary pointer for coefficient buffer */ - q63_t sum0; /* Accumulators */ - uint32_t i, blkCnt, tapCnt; /* Loop counters */ - uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - uint32_t j; - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc0, acc1, acc2, acc3; - q15_t x0, x1, x2, x3; - q15_t c0, c1, c2, c3; -#endif - - /* S->pState buffer contains previous frame (phaseLen - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (phaseLen - 1U); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* Copy new input sample into the state buffer */ - *pStateCur++ = *pSrc++; - *pStateCur++ = *pSrc++; - *pStateCur++ = *pSrc++; - *pStateCur++ = *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; - acc2 = 0; - acc3 = 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++); - x1 = *(ptr1++); - x2 = *(ptr1++); - - while (tapCnt > 0U) - { - /* Read the input sample */ - x3 = *(ptr1++); - - /* Read the coefficient */ - c0 = *(ptr2); - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x0 * c0; - acc1 += (q63_t) x1 * c0; - acc2 += (q63_t) x2 * c0; - acc3 += (q63_t) x3 * c0; - - /* Read the coefficient */ - c1 = *(ptr2 + S->L); - - /* Read the input sample */ - x0 = *(ptr1++); - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x1 * c1; - acc1 += (q63_t) x2 * c1; - acc2 += (q63_t) x3 * c1; - acc3 += (q63_t) x0 * c1; - - /* Read the coefficient */ - c2 = *(ptr2 + S->L * 2); - - /* Read the input sample */ - x1 = *(ptr1++); - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x2 * c2; - acc1 += (q63_t) x3 * c2; - acc2 += (q63_t) x0 * c2; - acc3 += (q63_t) x1 * c2; - - /* Read the coefficient */ - c3 = *(ptr2 + S->L * 3); - - /* Read the input sample */ - x2 = *(ptr1++); - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x3 * c3; - acc1 += (q63_t) x0 * c3; - acc2 += (q63_t) x1 * c3; - acc3 += (q63_t) 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 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 += (q63_t) x0 * c0; - acc1 += (q63_t) x1 * c0; - acc2 += (q63_t) x2 * c0; - acc3 += (q63_t) 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 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 + 2 * S->L) = (q15_t) (__SSAT((acc2 >> 15), 16)); - *(pDst + 3 * S->L) = (q15_t) (__SSAT((acc3 >> 15), 16)); - - pDst++; - - /* Increment the address modifier index of coefficient buffer */ - j++; - - /* Decrement 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Copy new input sample into the state buffer */ - *pStateCur++ = *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. - Repeat until we've computed numTaps-(4*S->L) coefficients. */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - tapCnt = phaseLen >> 2U; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - sum0 += (q63_t) *ptr1++ * *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; - - sum0 += (q63_t) *ptr1++ * *ptr2; - ptr2 += S->L; - - sum0 += (q63_t) *ptr1++ * *ptr2; - ptr2 += S->L; - - sum0 += (q63_t) *ptr1++ * *ptr2; - ptr2 += S->L; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - tapCnt = phaseLen % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = phaseLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - sum0 += (q63_t) *ptr1++ * *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; - - /* Decrement loop counter */ - tapCnt--; - } - - /* The result is in the accumulator, store in the destination buffer. */ - *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); - - /* 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 */ - pStateCur = S->pState; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - tapCnt = (phaseLen - 1U) >> 2U; - - /* copy data */ - while (tapCnt > 0U) - { - write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); - write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - tapCnt = (phaseLen - 1U) % 0x04U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = (phaseLen - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#else -/* alternate version for CM0_FAMILY */ - - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCur; /* Points to the current sample of the state */ - q15_t *ptr1; /* Temporary pointer for state buffer */ - const q15_t *ptr2; /* Temporary pointer for coefficient buffer */ - q63_t sum0; /* Accumulators */ - uint32_t i, blkCnt, tapCnt; /* Loop counters */ - uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - - /* S->pState buffer contains previous frame (phaseLen - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = 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 */ - *pStateCur++ = *pSrc++; - - /* 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 + (i - 1U); - - /* Loop over the polyPhase length */ - tapCnt = phaseLen; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - sum0 += ((q63_t) *ptr1++ * *ptr2); - - /* Increment the coefficient pointer by interpolation factor times. */ - ptr2 += S->L; - - /* Decrement the loop counter */ - tapCnt--; - } - - /* Store the result after converting to 1.15 format in the destination buffer. */ - *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); - - /* Decrement loop counter */ - i--; - } - - /* Advance the state pointer by 1 - * to process the next group of interpolation factor number samples */ - pState = pState + 1; - - /* Decrement 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 */ - pStateCur = S->pState; - - tapCnt = phaseLen - 1U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} -#endif /* defined(ARM_MATH_MVEI)*/ -/** - @} end of FIR_Interpolate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_q31.c deleted file mode 100644 index 826b156..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_interpolate_q31.c +++ /dev/null @@ -1,773 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_interpolate_q31.c - * Description: Q31 FIR interpolation - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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 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. - */ - -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" -void arm_fir_interpolate_q31( - const arm_fir_interpolate_instance_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCurnt; /* Points to the current sample of the state */ - const q31_t *ptr1, *ptr2; /* Temporary pointers for state and coefficient buffers */ - - uint32_t i, blkCnt; /* Loop counters */ - uint16_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - uint32_t strides[4] = { 0, 1 * S->L, 2 * S->L, 3 * S->L }; - uint32x4_t vec_strides0 = *(uint32x4_t *) strides; - uint32x4_t vec_strides1 = vec_strides0 + 1; - uint32x4_t vec_strides2 = vec_strides0 + 2; - uint32x4_t vec_strides3 = vec_strides0 + 3; - q31x4_t vecState, vecCoef; - - /* - * 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) - { - /* - * Initialize state pointer - */ - ptr1 = pState; - if (i >= 4) - { - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1 - 3U); - - q63_t acc0 = 0LL; - q63_t acc1 = 0LL; - q63_t acc2 = 0LL; - q63_t acc3 = 0LL; - - uint32_t tapCnt = phaseLen >> 2; - while (tapCnt > 0U) - { - vecState = vldrwq_s32(ptr1); - - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides3); - acc0 = vrmlaldavhaq(acc0, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides2); - acc1 = vrmlaldavhaq(acc1, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides1); - acc2 = vrmlaldavhaq(acc2, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides0); - acc3 = vrmlaldavhaq(acc3, vecState, vecCoef); - - ptr1 += 4; - ptr2 = ptr2 + S->L * 4; - tapCnt--; - } - tapCnt = phaseLen & 3; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - - vecState = vldrwq_z_s32(ptr1, p0); - - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides3, p0); - acc0 = vrmlaldavhaq(acc0, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides2, p0); - acc1 = vrmlaldavhaq(acc1, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides1, p0); - acc2 = vrmlaldavhaq(acc2, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides0, p0); - acc3 = vrmlaldavhaq(acc3, vecState, vecCoef); - } - - acc0 = asrl(acc0, 31 - 8); - acc1 = asrl(acc1, 31 - 8); - acc2 = asrl(acc2, 31 - 8); - acc3 = asrl(acc3, 31 - 8); - - *pDst++ = (q31_t) acc0; - *pDst++ = (q31_t) acc1; - *pDst++ = (q31_t) acc2; - *pDst++ = (q31_t) acc3; - i -= 4; - } - else if (i >= 3) - { - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1U - 2); - - q63_t acc0 = 0LL; - q63_t acc1 = 0LL; - q63_t acc2 = 0LL; - - uint32_t tapCnt = phaseLen >> 2; - while (tapCnt > 0U) - { - vecState = vldrwq_s32(ptr1); - - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides2); - acc0 = vrmlaldavhaq(acc0, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides1); - acc1 = vrmlaldavhaq(acc1, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides0); - acc2 = vrmlaldavhaq(acc2, vecState, vecCoef); - - ptr1 += 4; - ptr2 = ptr2 + S->L * 4; - tapCnt--; - } - tapCnt = phaseLen & 3; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - - vecState = vldrwq_z_s32(ptr1, p0); - - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides2, p0); - acc0 = vrmlaldavhaq(acc0, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides1, p0); - acc1 = vrmlaldavhaq(acc1, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides0, p0); - acc2 = vrmlaldavhaq(acc2, vecState, vecCoef); - } - - acc0 = asrl(acc0, 31 - 8); - acc1 = asrl(acc1, 31 - 8); - acc2 = asrl(acc2, 31 - 8); - - *pDst++ = (q31_t) acc0; - *pDst++ = (q31_t) acc1; - *pDst++ = (q31_t) acc2; - i -= 3; - } - else if (i >= 2) - { - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1U - 1); - - q63_t acc0 = 0LL; - q63_t acc1 = 0LL; - - uint32_t tapCnt = phaseLen >> 2; - while (tapCnt > 0U) - { - vecState = vldrwq_s32(ptr1); - - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides1); - acc0 = vrmlaldavhaq(acc0, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides0); - acc1 = vrmlaldavhaq(acc1, vecState, vecCoef); - - ptr1 += 4; - ptr2 = ptr2 + S->L * 4; - tapCnt--; - } - tapCnt = phaseLen & 3; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - - vecState = vldrwq_z_s32(ptr1, p0); - - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides1, p0); - acc0 = vrmlaldavhaq(acc0, vecState, vecCoef); - - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides0, p0); - acc1 = vrmlaldavhaq(acc1, vecState, vecCoef); - } - - acc0 = asrl(acc0, 31 - 8); - acc1 = asrl(acc1, 31 - 8); - - *pDst++ = (q31_t) acc0; - *pDst++ = (q31_t) acc1; - i -= 2; - } - else - { - /* - * Initialize coefficient pointer - */ - ptr2 = pCoeffs + (i - 1U); - - q63_t acc0 = 0LL; - - uint32_t tapCnt = phaseLen >> 2; - while (tapCnt > 0U) - { - vecState = vldrwq_s32(ptr1); - vecCoef = vldrwq_gather_shifted_offset_s32(ptr2, vec_strides0); - - acc0 = vrmlaldavhaq(acc0, vecState, vecCoef); - - ptr1 += 4; - ptr2 = ptr2 + S->L * 4; - tapCnt--; - } - tapCnt = phaseLen & 3; - if (tapCnt > 0U) - { - mve_pred16_t p0 = vctp32q(tapCnt); - - vecState = vldrwq_z_s32(ptr1, p0); - vecCoef = vldrwq_gather_shifted_offset_z_s32(ptr2, vec_strides0, p0); - acc0 = vrmlaldavhaq(acc0, vecState, vecCoef); - } - - acc0 = asrl(acc0, 31 - 8); - *pDst++ = (q31_t) acc0; - /* - * 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; - blkCnt = (phaseLen - 1U) >> 2; - while (blkCnt > 0U) - { - vst1q(pStateCurnt, vldrwq_s32(pState)); - pState += 4; - pStateCurnt += 4; - blkCnt--; - } - blkCnt = (phaseLen - 1U) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_s32(pStateCurnt, vldrwq_s32(pState), p0); - } -} -#else -void arm_fir_interpolate_q31( - const arm_fir_interpolate_instance_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ -#if (1) -//#if !defined(ARM_MATH_CM0_FAMILY) - - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCur; /* Points to the current sample of the state */ - q31_t *ptr1; /* Temporary pointer for state buffer */ - const q31_t *ptr2; /* Temporary pointer for coefficient buffer */ - q63_t sum0; /* Accumulators */ - uint32_t i, blkCnt, tapCnt; /* Loop counters */ - uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - uint32_t j; - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc0, acc1, acc2, acc3; - q31_t x0, x1, x2, x3; - q31_t c0, c1, c2, c3; -#endif - - /* S->pState buffer contains previous frame (phaseLen - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = S->pState + (phaseLen - 1U); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* Copy new input sample into the state buffer */ - *pStateCur++ = *pSrc++; - *pStateCur++ = *pSrc++; - *pStateCur++ = *pSrc++; - *pStateCur++ = *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; - acc2 = 0; - acc3 = 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++); - x1 = *(ptr1++); - x2 = *(ptr1++); - - while (tapCnt > 0U) - { - /* Read the input sample */ - x3 = *(ptr1++); - - /* Read the coefficient */ - c0 = *(ptr2); - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x0 * c0; - acc1 += (q63_t) x1 * c0; - acc2 += (q63_t) x2 * c0; - acc3 += (q63_t) x3 * c0; - - /* Read the coefficient */ - c1 = *(ptr2 + S->L); - - /* Read the input sample */ - x0 = *(ptr1++); - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x1 * c1; - acc1 += (q63_t) x2 * c1; - acc2 += (q63_t) x3 * c1; - acc3 += (q63_t) x0 * c1; - - /* Read the coefficient */ - c2 = *(ptr2 + S->L * 2); - - /* Read the input sample */ - x1 = *(ptr1++); - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x2 * c2; - acc1 += (q63_t) x3 * c2; - acc2 += (q63_t) x0 * c2; - acc3 += (q63_t) x1 * c2; - - /* Read the coefficient */ - c3 = *(ptr2 + S->L * 3); - - /* Read the input sample */ - x2 = *(ptr1++); - - /* Perform the multiply-accumulate */ - acc0 += (q63_t) x3 * c3; - acc1 += (q63_t) x0 * c3; - acc2 += (q63_t) x1 * c3; - acc3 += (q63_t) 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 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 += (q63_t) x0 * c0; - acc1 += (q63_t) x1 * c0; - acc2 += (q63_t) x2 * c0; - acc3 += (q63_t) 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 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 + 2 * S->L) = (q31_t) (acc2 >> 31); - *(pDst + 3 * S->L) = (q31_t) (acc3 >> 31); - - pDst++; - - /* Increment the address modifier index of coefficient buffer */ - j++; - - /* Decrement 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Copy new input sample into the state buffer */ - *pStateCur++ = *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. - Repeat until we've computed numTaps-(4*S->L) coefficients. */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - tapCnt = phaseLen >> 2U; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - sum0 += (q63_t) *ptr1++ * *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; - - sum0 += (q63_t) *ptr1++ * *ptr2; - ptr2 += S->L; - - sum0 += (q63_t) *ptr1++ * *ptr2; - ptr2 += S->L; - - sum0 += (q63_t) *ptr1++ * *ptr2; - ptr2 += S->L; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - tapCnt = phaseLen % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = phaseLen; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - sum0 += (q63_t) *ptr1++ * *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; - - /* Decrement 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 */ - pStateCur = S->pState; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - tapCnt = (phaseLen - 1U) >> 2U; - - /* copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - tapCnt = (phaseLen - 1U) % 0x04U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = (phaseLen - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#else -/* alternate version for CM0_FAMILY */ - - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCur; /* Points to the current sample of the state */ - q31_t *ptr1; /* Temporary pointer for state buffer */ - const q31_t *ptr2; /* Temporary pointer for coefficient buffer */ - q63_t sum0; /* Accumulators */ - uint32_t i, blkCnt, tapCnt; /* Loop counters */ - uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ - - /* S->pState buffer contains previous frame (phaseLen - 1) samples */ - /* pStateCur points to the location where the new input data should be written */ - pStateCur = 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 */ - *pStateCur++ = *pSrc++; - - /* 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 + (i - 1U); - - /* Loop over the polyPhase length */ - tapCnt = phaseLen; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - sum0 += ((q63_t) *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++ = (q31_t) (sum0 >> 31); - - /* Decrement loop counter */ - i--; - } - - /* Advance the state pointer by 1 - * to process the next group of interpolation factor number samples */ - pState = pState + 1; - - /* Decrement 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 */ - pStateCur = S->pState; - - tapCnt = phaseLen - 1U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} -#endif /* defined(ARM_MATH_MVEI) */ -/** - @} end of FIR_Interpolate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_f32.c deleted file mode 100644 index a3d95c1..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_f32.c +++ /dev/null @@ -1,453 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_lattice_f32.c - * Description: Processing function for floating-point FIR Lattice filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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: - @par -
    -      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, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - float32_t *px; /* Temporary state pointer */ - const float32_t *pk; /* Temporary coefficient pointer */ - uint32_t numStages = S->numStages; /* Number of stages in the filter */ - uint32_t blkCnt, stageCnt; /* Loop counters */ - float32_t fcurr0, fnext0, gnext0, gcurr0; /* Temporary variables */ - -#if defined (ARM_MATH_LOOPUNROLL) - float32_t fcurr1, fnext1, gnext1; /* Temporary variables for second sample in loop unrolling */ - float32_t fcurr2, fnext2, gnext2; /* Temporary variables for third sample in loop unrolling */ - float32_t fcurr3, fnext3, gnext3; /* Temporary variables for fourth sample in loop unrolling */ -#endif - - gcurr0 = 0.0f; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* Read two samples from input buffer */ - /* f0(n) = x(n) */ - fcurr0 = *pSrc++; - fcurr1 = *pSrc++; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pk = pCoeffs; - - /* Read g0(n-1) from state buffer */ - gcurr0 = *px; - - /* Process first sample for first tap */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = (gcurr0 * (*pk)) + fcurr0; - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext0 = (fcurr0 * (*pk)) + gcurr0; - - /* Process second sample for first tap */ - fnext1 = (fcurr0 * (*pk)) + fcurr1; - gnext1 = (fcurr1 * (*pk)) + fcurr0; - - /* Read next two samples from input buffer */ - /* f0(n+2) = x(n+2) */ - fcurr2 = *pSrc++; - fcurr3 = *pSrc++; - - /* Process third sample for first tap */ - fnext2 = (fcurr1 * (*pk)) + fcurr2; - gnext2 = (fcurr2 * (*pk)) + fcurr1; - - /* Process fourth sample for first tap */ - fnext3 = (fcurr2 * (*pk )) + fcurr3; - gnext3 = (fcurr3 * (*pk++)) + fcurr2; - - /* Copy only last input sample into the state buffer - which will be used for next samples processing */ - *px++ = fcurr3; - - /* Update of f values for next coefficient set processing */ - fcurr0 = fnext0; - fcurr1 = fnext1; - fcurr2 = fnext2; - fcurr3 = fnext3; - - /* 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 */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = gnext3; - - /* Process first sample for 2nd, 6th .. tap */ - /* Sample processing for K2, K6.... */ - /* f2(n) = f1(n) + K2 * g1(n-1) */ - fnext0 = (gcurr0 * (*pk)) + fcurr0; - - /* Process second sample for 2nd, 6th .. tap */ - /* for sample 2 processing */ - fnext1 = (gnext0 * (*pk)) + fcurr1; - - /* Process third sample for 2nd, 6th .. tap */ - fnext2 = (gnext1 * (*pk)) + fcurr2; - - /* Process fourth sample for 2nd, 6th .. tap */ - fnext3 = (gnext2 * (*pk)) + fcurr3; - - /* g2(n) = f1(n) * K2 + g1(n-1) */ - /* Calculation of state values for next stage */ - gnext3 = (fcurr3 * (*pk)) + gnext2; - - gnext2 = (fcurr2 * (*pk)) + gnext1; - - gnext1 = (fcurr1 * (*pk)) + gnext0; - - gnext0 = (fcurr0 * (*pk++)) + gcurr0; - - - /* Read g2(n-1), g4(n-1) .... from state */ - gcurr0 = *px; - - /* save g2(n) in state buffer */ - *px++ = gnext3; - - /* Sample processing for K3, K7.... */ - /* Process first sample for 3rd, 7th .. tap */ - /* f3(n) = f2(n) + K3 * g2(n-1) */ - fcurr0 = (gcurr0 * (*pk)) + fnext0; - - /* Process second sample for 3rd, 7th .. tap */ - fcurr1 = (gnext0 * (*pk)) + fnext1; - - /* Process third sample for 3rd, 7th .. tap */ - fcurr2 = (gnext1 * (*pk)) + fnext2; - - /* Process fourth sample for 3rd, 7th .. tap */ - fcurr3 = (gnext2 * (*pk)) + fnext3; - - /* Calculation of state values for next stage */ - /* g3(n) = f2(n) * K3 + g2(n-1) */ - gnext3 = (fnext3 * (*pk)) + gnext2; - - gnext2 = (fnext2 * (*pk)) + gnext1; - - gnext1 = (fnext1 * (*pk)) + gnext0; - - gnext0 = (fnext0 * (*pk++)) + gcurr0; - - - /* Read g1(n-1), g3(n-1) .... from state */ - gcurr0 = *px; - - /* save g3(n) in state buffer */ - *px++ = gnext3; - - /* Sample processing for K4, K8.... */ - /* Process first sample for 4th, 8th .. tap */ - /* f4(n) = f3(n) + K4 * g3(n-1) */ - fnext0 = (gcurr0 * (*pk)) + fcurr0; - - /* Process second sample for 4th, 8th .. tap */ - /* for sample 2 processing */ - fnext1 = (gnext0 * (*pk)) + fcurr1; - - /* Process third sample for 4th, 8th .. tap */ - fnext2 = (gnext1 * (*pk)) + fcurr2; - - /* Process fourth sample for 4th, 8th .. tap */ - fnext3 = (gnext2 * (*pk)) + fcurr3; - - /* g4(n) = f3(n) * K4 + g3(n-1) */ - /* Calculation of state values for next stage */ - gnext3 = (fcurr3 * (*pk)) + gnext2; - - gnext2 = (fcurr2 * (*pk)) + gnext1; - - gnext1 = (fcurr1 * (*pk)) + gnext0; - - gnext0 = (fcurr0 * (*pk++)) + gcurr0; - - - /* Read g2(n-1), g4(n-1) .... from state */ - gcurr0 = *px; - - /* save g4(n) in state buffer */ - *px++ = gnext3; - - /* Sample processing for K5, K9.... */ - /* Process first sample for 5th, 9th .. tap */ - /* f5(n) = f4(n) + K5 * g4(n-1) */ - fcurr0 = (gcurr0 * (*pk)) + fnext0; - - /* Process second sample for 5th, 9th .. tap */ - fcurr1 = (gnext0 * (*pk)) + fnext1; - - /* Process third sample for 5th, 9th .. tap */ - fcurr2 = (gnext1 * (*pk)) + fnext2; - - /* Process fourth sample for 5th, 9th .. tap */ - fcurr3 = (gnext2 * (*pk)) + fnext3; - - /* Calculation of state values for next stage */ - /* g5(n) = f4(n) * K5 + g4(n-1) */ - gnext3 = (fnext3 * (*pk)) + gnext2; - - gnext2 = (fnext2 * (*pk)) + gnext1; - - gnext1 = (fnext1 * (*pk)) + gnext0; - - gnext0 = (fnext0 * (*pk++)) + gcurr0; - - stageCnt--; - } - - /* If the (filter length -1) is not a multiple of 4, compute the remaining filter taps */ - stageCnt = (numStages - 1U) % 0x4U; - - while (stageCnt > 0U) - { - gcurr0 = *px; - - /* save g value in state buffer */ - *px++ = gnext3; - - /* Process four samples for last three taps here */ - fnext0 = (gcurr0 * (*pk)) + fcurr0; - - fnext1 = (gnext0 * (*pk)) + fcurr1; - - fnext2 = (gnext1 * (*pk)) + fcurr2; - - fnext3 = (gnext2 * (*pk)) + fcurr3; - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext3 = (fcurr3 * (*pk)) + gnext2; - - gnext2 = (fcurr2 * (*pk)) + gnext1; - - gnext1 = (fcurr1 * (*pk)) + gnext0; - - gnext0 = (fcurr0 * (*pk++)) + gcurr0; - - /* Update of f values for next coefficient set processing */ - fcurr0 = fnext0; - fcurr1 = fnext1; - fcurr2 = fnext2; - fcurr3 = fnext3; - - stageCnt--; - } - - /* The results in the 4 accumulators, store in the destination buffer. */ - /* y(n) = fN(n) */ - *pDst++ = fcurr0; - *pDst++ = fcurr1; - *pDst++ = fcurr2; - *pDst++ = fcurr3; - - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* f0(n) = x(n) */ - fcurr0 = *pSrc++; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pk = pCoeffs; - - /* read g2(n) from state buffer */ - gcurr0 = *px; - - /* for sample 1 processing */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = (gcurr0 * (*pk)) + fcurr0; - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext0 = (fcurr0 * (*pk++)) + gcurr0; - - /* save g1(n) in state buffer */ - *px++ = fcurr0; - - /* f1(n) is saved in fcurr0 for next stage processing */ - fcurr0 = fnext0; - - stageCnt = (numStages - 1U); - - /* stage loop */ - while (stageCnt > 0U) - { - /* read g2(n) from state buffer */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = gnext0; - - /* Sample processing for K2, K3.... */ - /* f2(n) = f1(n) + K2 * g1(n-1) */ - fnext0 = (gcurr0 * (*pk)) + fcurr0; - - /* g2(n) = f1(n) * K2 + g1(n-1) */ - gnext0 = (fcurr0 * (*pk++)) + gcurr0; - - /* f1(n) is saved in fcurr0 for next stage processing */ - fcurr0 = fnext0; - - stageCnt--; - } - - /* y(n) = fN(n) */ - *pDst++ = fcurr0; - - blkCnt--; - } - -} - -/** - @} end of FIR_Lattice group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_f32.c deleted file mode 100644 index 7929629..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_f32.c +++ /dev/null @@ -1,70 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_lattice_init_f32.c - * Description: Floating-point FIR Lattice filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_q15.c deleted file mode 100644 index 5c80dff..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_q15.c +++ /dev/null @@ -1,70 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_lattice_init_q15.c - * Description: Q15 FIR Lattice filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_q31.c deleted file mode 100644 index 476296d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_init_q31.c +++ /dev/null @@ -1,70 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_lattice_init_q31.c - * Description: Q31 FIR lattice filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_q15.c deleted file mode 100644 index 42e7c0d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_q15.c +++ /dev/null @@ -1,506 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_lattice_q15.c - * Description: Q15 FIR lattice filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR_Lattice - @{ - */ - -/** - @brief Processing function for 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, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *px; /* Temporary state pointer */ - const q15_t *pk; /* Temporary coefficient pointer */ - uint32_t numStages = S->numStages; /* Number of stages in the filter */ - uint32_t blkCnt, stageCnt; /* Loop counters */ - q31_t fcurr0, fnext0, gnext0, gcurr0; /* Temporary variables */ - -#if (1) -//#if !defined(ARM_MATH_CM0_FAMILY) - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t fcurr1, fnext1, gnext1; /* Temporary variables for second sample in loop unrolling */ - q31_t fcurr2, fnext2, gnext2; /* Temporary variables for third sample in loop unrolling */ - q31_t fcurr3, fnext3, gnext3; /* Temporary variables for fourth sample in loop unrolling */ -#endif - - gcurr0 = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* Read two samples from input buffer */ - /* f0(n) = x(n) */ - fcurr0 = *pSrc++; - fcurr1 = *pSrc++; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pk = pCoeffs; - - /* Read g0(n-1) from state buffer */ - gcurr0 = *px; - - /* Process first sample for first tap */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fcurr0; - fnext0 = __SSAT(fnext0, 16); - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext0 = (q31_t) ((fcurr0 * (*pk)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 16); - - /* Process second sample for first tap */ - fnext1 = (q31_t) ((fcurr0 * (*pk)) >> 15U) + fcurr1; - fnext1 = __SSAT(fnext1, 16); - gnext1 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + fcurr0; - gnext1 = __SSAT(gnext1, 16); - - /* Read next two samples from input buffer */ - /* f0(n+2) = x(n+2) */ - fcurr2 = *pSrc++; - fcurr3 = *pSrc++; - - /* Process third sample for first tap */ - fnext2 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + fcurr2; - fnext2 = __SSAT(fnext2, 16); - gnext2 = (q31_t) ((fcurr2 * (*pk)) >> 15U) + fcurr1; - gnext2 = __SSAT(gnext2, 16); - - /* Process fourth sample for first tap */ - fnext3 = (q31_t) ((fcurr2 * (*pk )) >> 15U) + fcurr3; - fnext3 = __SSAT(fnext3, 16); - gnext3 = (q31_t) ((fcurr3 * (*pk++)) >> 15U) + fcurr2; - gnext3 = __SSAT(gnext3, 16); - - /* Copy only last input sample into the state buffer - which will be used for next samples processing */ - *px++ = (q15_t) fcurr3; - - /* Update of f values for next coefficient set processing */ - fcurr0 = fnext0; - fcurr1 = fnext1; - fcurr2 = fnext2; - fcurr3 = fnext3; - - /* 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 */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = (q15_t) gnext3; - - /* Process first sample for 2nd, 6th .. tap */ - /* Sample processing for K2, K6.... */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fcurr0; - fnext0 = __SSAT(fnext0, 16); - - /* Process second sample for 2nd, 6th .. tap */ - /* for sample 2 processing */ - fnext1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fcurr1; - fnext1 = __SSAT(fnext1, 16); - - /* Process third sample for 2nd, 6th .. tap */ - fnext2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fcurr2; - fnext2 = __SSAT(fnext2, 16); - - /* Process fourth sample for 2nd, 6th .. tap */ - fnext3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fcurr3; - fnext3 = __SSAT(fnext3, 16); - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - /* Calculation of state values for next stage */ - gnext3 = (q31_t) ((fcurr3 * (*pk)) >> 15U) + gnext2; - gnext3 = __SSAT(gnext3, 16); - - gnext2 = (q31_t) ((fcurr2 * (*pk)) >> 15U) + gnext1; - gnext2 = __SSAT(gnext2, 16); - - gnext1 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + gnext0; - gnext1 = __SSAT(gnext1, 16); - - gnext0 = (q31_t) ((fcurr0 * (*pk++)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 16); - - - /* Read g2(n-1), g4(n-1) .... from state */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = (q15_t) gnext3; - - /* Sample processing for K3, K7.... */ - /* Process first sample for 3rd, 7th .. tap */ - /* f3(n) = f2(n) + K3 * g2(n-1) */ - fcurr0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fnext0; - fcurr0 = __SSAT(fcurr0, 16); - - /* Process second sample for 3rd, 7th .. tap */ - fcurr1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fnext1; - fcurr1 = __SSAT(fcurr1, 16); - - /* Process third sample for 3rd, 7th .. tap */ - fcurr2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fnext2; - fcurr2 = __SSAT(fcurr2, 16); - - /* Process fourth sample for 3rd, 7th .. tap */ - fcurr3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fnext3; - fcurr3 = __SSAT(fcurr3, 16); - - /* Calculation of state values for next stage */ - /* g3(n) = f2(n) * K3 + g2(n-1) */ - 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) + gnext0; - gnext1 = __SSAT(gnext1, 16); - - gnext0 = (q31_t) ((fnext0 * (*pk++)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 16); - - /* Read g1(n-1), g3(n-1) .... from state */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = (q15_t) gnext3; - - /* Sample processing for K4, K8.... */ - /* Process first sample for 4th, 8th .. tap */ - /* f4(n) = f3(n) + K4 * g3(n-1) */ - fnext0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fcurr0; - fnext0 = __SSAT(fnext0, 16); - - /* Process second sample for 4th, 8th .. tap */ - /* for sample 2 processing */ - fnext1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fcurr1; - fnext1 = __SSAT(fnext1, 16); - - /* Process third sample for 4th, 8th .. tap */ - fnext2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fcurr2; - fnext2 = __SSAT(fnext2, 16); - - /* Process fourth sample for 4th, 8th .. tap */ - fnext3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fcurr3; - fnext3 = __SSAT(fnext3, 16); - - /* g4(n) = f3(n) * K4 + g3(n-1) */ - /* Calculation of state values for next stage */ - gnext3 = (q31_t) ((fcurr3 * (*pk)) >> 15U) + gnext2; - gnext3 = __SSAT(gnext3, 16); - - gnext2 = (q31_t) ((fcurr2 * (*pk)) >> 15U) + gnext1; - gnext2 = __SSAT(gnext2, 16); - - gnext1 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + gnext0; - gnext1 = __SSAT(gnext1, 16); - - gnext0 = (q31_t) ((fcurr0 * (*pk++)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 16); - - /* Read g2(n-1), g4(n-1) .... from state */ - gcurr0 = *px; - - /* save g4(n) in state buffer */ - *px++ = (q15_t) gnext3; - - /* Sample processing for K5, K9.... */ - /* Process first sample for 5th, 9th .. tap */ - /* f5(n) = f4(n) + K5 * g4(n-1) */ - fcurr0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fnext0; - fcurr0 = __SSAT(fcurr0, 16); - - /* Process second sample for 5th, 9th .. tap */ - fcurr1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fnext1; - fcurr1 = __SSAT(fcurr1, 16); - - /* Process third sample for 5th, 9th .. tap */ - fcurr2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fnext2; - fcurr2 = __SSAT(fcurr2, 16); - - /* Process fourth sample for 5th, 9th .. tap */ - fcurr3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fnext3; - fcurr3 = __SSAT(fcurr3, 16); - - /* Calculation of state values for next stage */ - /* g5(n) = f4(n) * K5 + g4(n-1) */ - 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) + gnext0; - gnext1 = __SSAT(gnext1, 16); - - gnext0 = (q31_t) ((fnext0 * (*pk++)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 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) - { - gcurr0 = *px; - - /* save g value in state buffer */ - *px++ = (q15_t) gnext3; - - /* Process four samples for last three taps here */ - fnext0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fcurr0; - fnext0 = __SSAT(fnext0, 16); - - fnext1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fcurr1; - fnext1 = __SSAT(fnext1, 16); - - fnext2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fcurr2; - fnext2 = __SSAT(fnext2, 16); - - fnext3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fcurr3; - fnext3 = __SSAT(fnext3, 16); - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext3 = (q31_t) ((fcurr3 * (*pk)) >> 15U) + gnext2; - gnext3 = __SSAT(gnext3, 16); - - gnext2 = (q31_t) ((fcurr2 * (*pk)) >> 15U) + gnext1; - gnext2 = __SSAT(gnext2, 16); - - gnext1 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + gnext0; - gnext1 = __SSAT(gnext1, 16); - - gnext0 = (q31_t) ((fcurr0 * (*pk++)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 16); - - /* Update of f values for next coefficient set processing */ - fcurr0 = fnext0; - fcurr1 = fnext1; - fcurr2 = fnext2; - fcurr3 = fnext3; - - stageCnt--; - } - - /* The results in the 4 accumulators, store in the destination buffer. */ - /* y(n) = fN(n) */ - -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pDst, __PKHBT(fcurr0, fcurr1, 16)); - write_q15x2_ia (&pDst, __PKHBT(fcurr2, fcurr3, 16)); -#else - write_q15x2_ia (&pDst, __PKHBT(fcurr1, fcurr0, 16)); - write_q15x2_ia (&pDst, __PKHBT(fcurr3, fcurr2, 16)); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* f0(n) = x(n) */ - fcurr0 = *pSrc++; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pk = pCoeffs; - - /* read g2(n) from state buffer */ - gcurr0 = *px; - - /* for sample 1 processing */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = (((q31_t) gcurr0 * (*pk)) >> 15U) + fcurr0; - fnext0 = __SSAT(fnext0, 16); - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext0 = (((q31_t) fcurr0 * (*pk++)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 16); - - /* save g1(n) in state buffer */ - *px++ = (q15_t) fcurr0; - - /* f1(n) is saved in fcurr0 for next stage processing */ - fcurr0 = fnext0; - - stageCnt = (numStages - 1U); - - /* stage loop */ - while (stageCnt > 0U) - { - /* read g2(n) from state buffer */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = (q15_t) gnext0; - - /* Sample processing for K2, K3.... */ - /* f2(n) = f1(n) + K2 * g1(n-1) */ - fnext0 = (((q31_t) gcurr0 * (*pk)) >> 15U) + fcurr0; - fnext0 = __SSAT(fnext0, 16); - - /* g2(n) = f1(n) * K2 + g1(n-1) */ - gnext0 = (((q31_t) fcurr0 * (*pk++)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 16); - - /* f1(n) is saved in fcurr0 for next stage processing */ - fcurr0 = fnext0; - - stageCnt--; - } - - /* y(n) = fN(n) */ - *pDst++ = __SSAT(fcurr0, 16); - - blkCnt--; - } - -#else -/* alternate version for CM0_FAMILY */ - - blkCnt = blockSize; - - while (blkCnt > 0U) - { - /* f0(n) = x(n) */ - fcurr0 = *pSrc++; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pk = pCoeffs; - - /* read g0(n-1) from state buffer */ - gcurr0 = *px; - - /* for sample 1 processing */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = ((gcurr0 * (*pk)) >> 15U) + fcurr0; - fnext0 = __SSAT(fnext, 16); - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext0 = ((fcurr0 * (*pk++)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 16); - - /* save f0(n) in state buffer */ - *px++ = (q15_t) fcurr0; - - /* f1(n) is saved in fcurr for next stage processing */ - fcurr0 = fnext0; - - stageCnt = (numStages - 1U); - - /* stage loop */ - while (stageCnt > 0U) - { - /* read g1(n-1) from state buffer */ - gcurr0 = *px; - - /* save g0(n-1) in state buffer */ - *px++ = (q15_t) gnext0; - - /* Sample processing for K2, K3.... */ - /* f2(n) = f1(n) + K2 * g1(n-1) */ - fnext0 = ((gcurr0 * (*pk)) >> 15U) + fcurr0; - fnext0 = __SSAT(fnext0, 16); - - /* g2(n) = f1(n) * K2 + g1(n-1) */ - gnext0 = ((fcurr0 * (*pk++)) >> 15U) + gcurr0; - gnext0 = __SSAT(gnext0, 16); - - /* f1(n) is saved in fcurr0 for next stage processing */ - fcurr0 = fnext0; - - stageCnt--; - } - - /* y(n) = fN(n) */ - *pDst++ = __SSAT(fcurr0, 16); - - blkCnt--; - } - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} - -/** - @} end of FIR_Lattice group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_q31.c deleted file mode 100644 index c8d28d7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_lattice_q31.c +++ /dev/null @@ -1,505 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_lattice_q31.c - * Description: Q31 FIR lattice filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - In order to avoid overflows the input signal must be scaled down by 2*log2(numStages) bits. - */ - -void arm_fir_lattice_q31( - const arm_fir_lattice_instance_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *px; /* Temporary state pointer */ - const q31_t *pk; /* Temporary coefficient pointer */ - uint32_t numStages = S->numStages; /* Number of stages in the filter */ - uint32_t blkCnt, stageCnt; /* Loop counters */ - q31_t fcurr0, fnext0, gnext0, gcurr0; /* Temporary variables */ - -#if (1) -//#if !defined(ARM_MATH_CM0_FAMILY) - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t fcurr1, fnext1, gnext1; /* Temporary variables for second sample in loop unrolling */ - q31_t fcurr2, fnext2, gnext2; /* Temporary variables for third sample in loop unrolling */ - q31_t fcurr3, fnext3, gnext3; /* Temporary variables for fourth sample in loop unrolling */ -#endif - - gcurr0 = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* Read two samples from input buffer */ - /* f0(n) = x(n) */ - fcurr0 = *pSrc++; - fcurr1 = *pSrc++; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pk = pCoeffs; - - /* Read g0(n-1) from state buffer */ - gcurr0 = *px; - - /* Process first sample for first tap */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fnext0 = (fnext0 << 1U) + fcurr0; - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - /* Process second sample for first tap */ - fnext1 = (q31_t) (((q63_t) fcurr0 * (*pk)) >> 32U); - fnext1 = (fnext1 << 1U) + fcurr1; - gnext1 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); - gnext1 = (gnext1 << 1U) + fcurr0; - - /* Read next two samples from input buffer */ - /* f0(n+2) = x(n+2) */ - fcurr2 = *pSrc++; - fcurr3 = *pSrc++; - - /* Process third sample for first tap */ - fnext2 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); - fnext2 = (fnext2 << 1U) + fcurr2; - gnext2 = (q31_t) (((q63_t) fcurr2 * (*pk)) >> 32U); - gnext2 = (gnext2 << 1U) + fcurr1; - - /* Process fourth sample for first tap */ - fnext3 = (q31_t) (((q63_t) fcurr2 * (*pk )) >> 32U); - fnext3 = (fnext3 << 1U) + fcurr3; - gnext3 = (q31_t) (((q63_t) fcurr3 * (*pk++)) >> 32U); - gnext3 = (gnext3 << 1U) + fcurr2; - - /* Copy only last input sample into the state buffer - which will be used for next samples processing */ - *px++ = fcurr3; - - /* Update of f values for next coefficient set processing */ - fcurr0 = fnext0; - fcurr1 = fnext1; - fcurr2 = fnext2; - fcurr3 = fnext3; - - /* 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 */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = gnext3; - - /* Process first sample for 2nd, 6th .. tap */ - /* Sample processing for K2, K6.... */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fnext0 = (fnext0 << 1U) + fcurr0; - - /* Process second sample for 2nd, 6th .. tap */ - /* for sample 2 processing */ - fnext1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); - fnext1 = (fnext1 << 1U) + fcurr1; - - /* Process third sample for 2nd, 6th .. tap */ - fnext2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); - fnext2 = (fnext2 << 1U) + fcurr2; - - /* Process fourth sample for 2nd, 6th .. tap */ - fnext3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); - fnext3 = (fnext3 << 1U) + fcurr3; - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - /* Calculation of state values for next stage */ - gnext3 = (q31_t) (((q63_t) fcurr3 * (*pk)) >> 32U); - gnext3 = (gnext3 << 1U) + gnext2; - - gnext2 = (q31_t) (((q63_t) fcurr2 * (*pk)) >> 32U); - gnext2 = (gnext2 << 1U) + gnext1; - - gnext1 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); - gnext1 = (gnext1 << 1U) + gnext0; - - gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - - /* Read g2(n-1), g4(n-1) .... from state */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = gnext3; - - /* Sample processing for K3, K7.... */ - /* Process first sample for 3rd, 7th .. tap */ - /* f3(n) = f2(n) + K3 * g2(n-1) */ - fcurr0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fcurr0 = (fcurr0 << 1U) + fnext0; - - /* Process second sample for 3rd, 7th .. tap */ - fcurr1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); - fcurr1 = (fcurr1 << 1U) + fnext1; - - /* Process third sample for 3rd, 7th .. tap */ - fcurr2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); - fcurr2 = (fcurr2 << 1U) + fnext2; - - /* Process fourth sample for 3rd, 7th .. tap */ - fcurr3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); - fcurr3 = (fcurr3 << 1U) + fnext3; - - /* Calculation of state values for next stage */ - /* g3(n) = f2(n) * K3 + g2(n-1) */ - gnext3 = (q31_t) (((q63_t) fnext3 * (*pk)) >> 32U); - gnext3 = (gnext3 << 1U) + gnext2; - - gnext2 = (q31_t) (((q63_t) fnext2 * (*pk)) >> 32U); - gnext2 = (gnext2 << 1U) + gnext1; - - gnext1 = (q31_t) (((q63_t) fnext1 * (*pk)) >> 32U); - gnext1 = (gnext1 << 1U) + gnext0; - - gnext0 = (q31_t) (((q63_t) fnext0 * (*pk++)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - /* Read g1(n-1), g3(n-1) .... from state */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = gnext3; - - /* Sample processing for K4, K8.... */ - /* Process first sample for 4th, 8th .. tap */ - /* f4(n) = f3(n) + K4 * g3(n-1) */ - fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fnext0 = (fnext0 << 1U) + fcurr0; - - /* Process second sample for 4th, 8th .. tap */ - /* for sample 2 processing */ - fnext1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); - fnext1 = (fnext1 << 1U) + fcurr1; - - /* Process third sample for 4th, 8th .. tap */ - fnext2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); - fnext2 = (fnext2 << 1U) + fcurr2; - - /* Process fourth sample for 4th, 8th .. tap */ - fnext3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); - fnext3 = (fnext3 << 1U) + fcurr3; - - /* g4(n) = f3(n) * K4 + g3(n-1) */ - /* Calculation of state values for next stage */ - gnext3 = (q31_t) (((q63_t) fcurr3 * (*pk)) >> 32U); - gnext3 = (gnext3 << 1U) + gnext2; - - gnext2 = (q31_t) (((q63_t) fcurr2 * (*pk)) >> 32U); - gnext2 = (gnext2 << 1U) + gnext1; - - gnext1 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); - gnext1 = (gnext1 << 1U) + gnext0; - - gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - /* Read g2(n-1), g4(n-1) .... from state */ - gcurr0 = *px; - - /* save g4(n) in state buffer */ - *px++ = gnext3; - - /* Sample processing for K5, K9.... */ - /* Process first sample for 5th, 9th .. tap */ - /* f5(n) = f4(n) + K5 * g4(n-1) */ - fcurr0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fcurr0 = (fcurr0 << 1U) + fnext0; - - /* Process second sample for 5th, 9th .. tap */ - fcurr1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); - fcurr1 = (fcurr1 << 1U) + fnext1; - - /* Process third sample for 5th, 9th .. tap */ - fcurr2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); - fcurr2 = (fcurr2 << 1U) + fnext2; - - /* Process fourth sample for 5th, 9th .. tap */ - fcurr3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); - fcurr3 = (fcurr3 << 1U) + fnext3; - - /* Calculation of state values for next stage */ - /* g5(n) = f4(n) * K5 + g4(n-1) */ - gnext3 = (q31_t) (((q63_t) fnext3 * (*pk)) >> 32U); - gnext3 = (gnext3 << 1U) + gnext2; - - gnext2 = (q31_t) (((q63_t) fnext2 * (*pk)) >> 32U); - gnext2 = (gnext2 << 1U) + gnext1; - - gnext1 = (q31_t) (((q63_t) fnext1 * (*pk)) >> 32U); - gnext1 = (gnext1 << 1U) + gnext0; - - gnext0 = (q31_t) (((q63_t) fnext0 * (*pk++)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - stageCnt--; - } - - /* If the (filter length -1) is not a multiple of 4, compute the remaining filter taps */ - stageCnt = (numStages - 1U) % 0x4U; - - while (stageCnt > 0U) - { - gcurr0 = *px; - - /* save g value in state buffer */ - *px++ = gnext3; - - /* Process four samples for last three taps here */ - fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fnext0 = (fnext0 << 1U) + fcurr0; - - fnext1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); - fnext1 = (fnext1 << 1U) + fcurr1; - - fnext2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); - fnext2 = (fnext2 << 1U) + fcurr2; - - fnext3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); - fnext3 = (fnext3 << 1U) + fcurr3; - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext3 = (q31_t) (((q63_t) fcurr3 * (*pk)) >> 32U); - gnext3 = (gnext3 << 1U) + gnext2; - - gnext2 = (q31_t) (((q63_t) fcurr2 * (*pk)) >> 32U); - gnext2 = (gnext2 << 1U) + gnext1; - - gnext1 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); - gnext1 = (gnext1 << 1U) + gnext0; - - gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - /* Update of f values for next coefficient set processing */ - fcurr0 = fnext0; - fcurr1 = fnext1; - fcurr2 = fnext2; - fcurr3 = fnext3; - - stageCnt--; - } - - /* The results in the 4 accumulators, store in the destination buffer. */ - /* y(n) = fN(n) */ - *pDst++ = fcurr0; - *pDst++ = fcurr1; - *pDst++ = fcurr2; - *pDst++ = fcurr3; - - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* f0(n) = x(n) */ - fcurr0 = *pSrc++; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pk = pCoeffs; - - /* read g2(n) from state buffer */ - gcurr0 = *px; - - /* for sample 1 processing */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fnext0 = (fnext0 << 1U) + fcurr0; - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - /* save g1(n) in state buffer */ - *px++ = fcurr0; - - /* f1(n) is saved in fcurr0 for next stage processing */ - fcurr0 = fnext0; - - stageCnt = (numStages - 1U); - - /* stage loop */ - while (stageCnt > 0U) - { - /* read g2(n) from state buffer */ - gcurr0 = *px; - - /* save g1(n) in state buffer */ - *px++ = gnext0; - - /* Sample processing for K2, K3.... */ - /* f2(n) = f1(n) + K2 * g1(n-1) */ - fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fnext0 = (fnext0 << 1U) + fcurr0; - - /* g2(n) = f1(n) * K2 + g1(n-1) */ - gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - /* f1(n) is saved in fcurr0 for next stage processing */ - fcurr0 = fnext0; - - stageCnt--; - } - - /* y(n) = fN(n) */ - *pDst++ = fcurr0; - - blkCnt--; - } - -#else -/* alternate version for CM0_FAMILY */ - - blkCnt = blockSize; - - while (blkCnt > 0U) - { - /* f0(n) = x(n) */ - fcurr0 = *pSrc++; - - /* Initialize state pointer */ - px = pState; - - /* Initialize coeff pointer */ - pk = pCoeffs; - - /* read g0(n-1) from state buffer */ - gcurr0 = *px; - - /* for sample 1 processing */ - /* f1(n) = f0(n) + K1 * g0(n-1) */ - fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fnext0 = (fnext << 1U) + fcurr0; - - /* g1(n) = f0(n) * K1 + g0(n-1) */ - gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - /* save f0(n) in state buffer */ - *px++ = fcurr0; - - /* f1(n) is saved in fcurr for next stage processing */ - fcurr0 = fnext0; - - stageCnt = (numStages - 1U); - - /* stage loop */ - while (stageCnt > 0U) - { - /* read g1(n-1) from state buffer */ - gcurr0 = *px; - - /* save g0(n-1) in state buffer */ - *px++ = gnext0; - - /* Sample processing for K2, K3.... */ - /* f2(n) = f1(n) + K2 * g1(n-1) */ - fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); - fnext0 = (fnext0 << 1U) + fcurr0; - - /* g2(n) = f1(n) * K2 + g1(n-1) */ - gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); - gnext0 = (gnext0 << 1U) + gcurr0; - - /* f1(n) is saved in fcurr0 for next stage processing */ - fcurr0 = fnext0; - - stageCnt--; - } - - /* y(n) = fN(n) */ - *pDst++ = fcurr0; - - blkCnt--; - } - -#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ - -} - -/** - @} end of FIR_Lattice group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q15.c deleted file mode 100644 index 7fba642..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q15.c +++ /dev/null @@ -1,797 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_q15.c - * Description: Q15 FIR filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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 - @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. - - @remark - Refer to \ref arm_fir_fast_q15() for a faster but less precise implementation of this function. - */ -#if defined(ARM_MATH_MVEI) - -#define MVE_ASRL_SAT16(acc, shift) ((sqrshrl_sat48(acc, -(32-shift)) >> 32) & 0xffffffff) - -static void arm_fir_q15_1_8_mve(const arm_fir_instance_q15 * S, const q15_t * pSrc, q15_t * pDst, uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCur; /* Points to the current sample of the state */ - const q15_t *pSamples; /* Temporary pointer to the sample buffer */ - q15_t *pOutput; /* Temporary pointer to the output buffer */ - const q15_t *pTempSrc; /* Temporary pointer to the source data */ - q15_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - q15x8_t vecIn0; - /* - * load 8 coefs - */ - q15x8_t vecCoeffs = *(q15x8_t *) pCoeffs; - - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - pStateCur = &(pState[(numTaps - 1u)]); - pTempSrc = pSrc; - pSamples = pState; - pOutput = pDst; - - q63_t acc0, acc1, acc2, acc3; - - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - const q15_t *pSamplesTmp = pSamples; - - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 8; - pTempSrc += 8; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmlaldavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vmlaldavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vmlaldavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[3]); - acc3 = vmlaldavq(vecIn0, vecCoeffs); - - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc0, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc1, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc2, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc3, 15); - - pSamples += 4; - /* - * Decrement the sample block loop counter - */ - blkCnt--; - } - - uint32_t residual = blockSize & 3; - switch (residual) - { - case 3: - { - const q15_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - acc1 = 0LL; - acc2 = 0LL; - - /* - * Save 4 input samples in the history buffer - */ - *(q15x8_t *) pStateCur = *(q15x8_t *) pTempSrc; - pStateCur += 8; - pTempSrc += 8; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmlaldavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vmlaldavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vmlaldavq(vecIn0, vecCoeffs); - - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc0, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc1, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc2, 15); - } - break; - - case 2: - { - const q15_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - acc1 = 0LL; - - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 8; - pTempSrc += 8; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmlaldavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vmlaldavq(vecIn0, vecCoeffs); - - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc0, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc1, 15); - } - break; - - case 1: - { - const q15_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 8; - pTempSrc += 8; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmlaldavq(vecIn0, vecCoeffs); - - pSamplesTmp += 4; - - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc0, 15); - } - break; - } - - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &S->pState[blockSize]; - pTempDest = S->pState; - - blkCnt = numTaps >> 3; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 8; - pTempDest += 8; - blkCnt--; - } - blkCnt = numTaps & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vstrhq_p_s16(pTempDest, vld1q(pTempSrc), p0); - } -} - -void arm_fir_q15( - const arm_fir_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *pStateCur; /* Points to the current sample of the state */ - const q15_t *pSamples; /* Temporary pointer to the sample buffer */ - q15_t *pOutput; /* Temporary pointer to the output buffer */ - const q15_t *pTempSrc; /* Temporary pointer to the source data */ - q15_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - q15x8_t vecIn0; - uint32_t tapsBlkCnt = (numTaps + 7) / 8; - q63_t acc0, acc1, acc2, acc3; - - if (blockSize >= 12) - { - if(numTaps <= 8) { - /* [1 to 8 taps] specialized routine */ - arm_fir_q15_1_8_mve(S,pSrc, pDst, blockSize); - return; - } - } - - if (blockSize >= 12) - { - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - pStateCur = &(pState[(numTaps - 1u)]); - pTempSrc = pSrc; - pSamples = pState; - pOutput = pDst; - blkCnt = blockSize >> 2; - - while (blkCnt > 0U) - { - const q15_t *pCoeffsTmp = pCoeffs; - const q15_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - acc1 = 0LL; - acc2 = 0LL; - acc3 = 0LL; - - /* - * Save 8 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 8; - pTempSrc += 8; - - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - /* - * load 8 coefs - */ - q15x8_t vecCoeffs = *(q15x8_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmlaldavaq(acc0, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vmlaldavaq(acc1, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vmlaldavaq(acc2, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[3]); - acc3 = vmlaldavaq(acc3, vecIn0, vecCoeffs); - - pSamplesTmp += 8; - pCoeffsTmp += 8; - /* - * Decrement the taps block loop counter - */ - i--; - } - - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc0, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc1, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc2, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc3, 15); - - pSamples += 4; - /* - * Decrement the sample block loop counter - */ - blkCnt--; - } - - uint32_t residual = blockSize & 3; - switch (residual) - { - case 3: - { - const q15_t *pCoeffsTmp = pCoeffs; - const q15_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - acc1 = 0LL; - acc2 = 0LL; - - /* - * Save 8 input samples in the history buffer - */ - *(q15x8_t *) pStateCur = *(q15x8_t *) pTempSrc; - pStateCur += 8; - pTempSrc += 8; - - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - /* - * load 8 coefs - */ - q15x8_t vecCoeffs = *(q15x8_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmlaldavaq(acc0, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vmlaldavaq(acc1, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vmlaldavaq(acc2, vecIn0, vecCoeffs); - - pSamplesTmp += 8; - pCoeffsTmp += 8; - /* - * Decrement the taps block loop counter - */ - i--; - } - - - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc0, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc1, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc2, 15); - } - break; - - case 2: - { - const q15_t *pCoeffsTmp = pCoeffs; - const q15_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - acc1 = 0LL; - /* - * Save 8 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 8; - pTempSrc += 8; - - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - /* - * load 8 coefs - */ - q15x8_t vecCoeffs = *(q15x8_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmlaldavaq(acc0, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vmlaldavaq(acc1, vecIn0, vecCoeffs); - - pSamplesTmp += 8; - pCoeffsTmp += 8; - /* - * Decrement the taps block loop counter - */ - i--; - } - - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc0, 15); - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc1, 15); - } - break; - - case 1: - { - const q15_t *pCoeffsTmp = pCoeffs; - const q15_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - - /* - * Save 8 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 8; - pTempSrc += 8; - - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - /* - * load 8 coefs - */ - q15x8_t vecCoeffs = *(q15x8_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmlaldavaq(acc0, vecIn0, vecCoeffs); - - pSamplesTmp += 8; - pCoeffsTmp += 8; - /* - * Decrement the taps block loop counter - */ - i--; - } - - *pOutput++ = (q15_t) MVE_ASRL_SAT16(acc0, 15); - } - break; - } - } - else - { - q15_t *pStateCurnt; /* Points to the current sample of the state */ - q15_t *px; /* Temporary pointer for state buffer */ - const q15_t *pb; /* Temporary pointer for coefficient buffer */ - q63_t acc0; /* Accumulator */ - uint32_t blkCnt,tapCnt; /* Loop counters */ - pStateCurnt = &(S->pState[(numTaps - 1U)]); - blkCnt = blockSize; - 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; - - while (tapCnt > 0U) - { - acc0 += (q15_t) *px++ * *pb++; - acc0 += (q15_t) *px++ * *pb++; - - tapCnt--; - } - - - /* 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 loop counter */ - blkCnt--; - } - } - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &S->pState[blockSize]; - pTempDest = S->pState; - - blkCnt = numTaps >> 3; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 8; - pTempDest += 8; - blkCnt--; - } - blkCnt = numTaps & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vstrhq_p_s16(pTempDest, vld1q(pTempSrc), p0); - } -} - -#else -void arm_fir_q15( - const arm_fir_instance_q15 * S, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const 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 */ - const q15_t *pb; /* Temporary pointer for coefficient buffer */ - q63_t acc0; /* Accumulators */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t tapCnt, blkCnt; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc1, acc2, acc3; /* Accumulators */ - q31_t x0, x1, x2, c0; /* Temporary variables to hold state and coefficient values */ -#endif - - /* 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)]); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: 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 >> 2U; - - while (blkCnt > 0U) - { - /* Copy 4 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; - - /* 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 = read_q15x2_ia (&px); - - /* Read the third and forth samples from the state buffer: x[n-N-2], x[n-N-3] */ - x2 = read_q15x2_ia (&px); - - /* Loop over the number of taps. Unroll by a factor of 4. - Repeat until we've computed numTaps-(numTaps%4) coefficients. */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Read the first two coefficients using SIMD: b[N] and b[N-1] coefficients */ - c0 = read_q15x2_ia ((q15_t **) &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 = read_q15x2_ia (&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 = read_q15x2_ia ((q15_t **) &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 = read_q15x2_ia (&px); - - /* 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); - - /* 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 = read_q15x2_ia ((q15_t **) &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 = read_q15x2 (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 - write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); - write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); -#else - write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); - write_q15x2_ia (&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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining output samples */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of taps */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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; - - while (tapCnt > 0U) - { - acc0 += (q31_t) *px++ * *pb++; - acc0 += (q31_t) *px++ * *pb++; - - tapCnt--; - } - - - /* 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 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = (numTaps - 1U) >> 2U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Calculate remaining number of copies */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy remaining data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of FIR group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q31.c deleted file mode 100644 index 246aa1b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q31.c +++ /dev/null @@ -1,1049 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_q31.c - * Description: Q31 FIR filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR - @{ - */ - -/** - @brief Processing function for 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 - @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 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. - - @remark - Refer to \ref arm_fir_fast_q31() for a faster but less precise implementation of this filter. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - - - -static void arm_fir_q31_1_4_mve(const arm_fir_instance_q31 * S, const q31_t * pSrc, q31_t * pDst, uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCur; /* Points to the current sample of the state */ - const q31_t *pSamples; /* Temporary pointer to the sample buffer */ - q31_t *pOutput; /* Temporary pointer to the output buffer */ - const q31_t *pTempSrc; /* Temporary pointer to the source data */ - q31_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - q31x4_t vecIn0; - - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - pStateCur = &(pState[(numTaps - 1u)]); - pTempSrc = pSrc; - pSamples = pState; - pOutput = pDst; - - q63_t acc0, acc1, acc2, acc3; - /* - * load 4 coefs - */ - q31x4_t vecCoeffs = *(q31x4_t *) pCoeffs; - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - const q31_t *pSamplesTmp = pSamples; - - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vrmlaldavhq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vrmlaldavhq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vrmlaldavhq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[3]); - acc3 = vrmlaldavhq(vecIn0, vecCoeffs); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - acc3 = asrl(acc3, 23); - - *pOutput++ = (q31_t) acc0; - *pOutput++ = (q31_t) acc1; - *pOutput++ = (q31_t) acc2; - *pOutput++ = (q31_t) acc3; - - pSamples += 4; - /* - * Decrement the sample block loop counter - */ - blkCnt--; - } - - uint32_t residual = blockSize & 3; - - switch (residual) - { - case 3: - { - /* - * Save 4 input samples in the history buffer - */ - - *(q31x4_t *) pStateCur = *(q31x4_t *) pTempSrc; - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamples); - acc0 = vrmlaldavhq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamples[1]); - acc1 = vrmlaldavhq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamples[2]); - acc2 = vrmlaldavhq(vecIn0, vecCoeffs); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - - *pOutput++ = (q31_t) acc0; - *pOutput++ = (q31_t) acc1; - *pOutput++ = (q31_t) acc2; - } - break; - - case 2: - { - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamples); - acc0 = vrmlaldavhq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamples[1]); - acc1 = vrmlaldavhq(vecIn0, vecCoeffs); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - - *pOutput++ = (q31_t) acc0; - *pOutput++ = (q31_t) acc1; - } - break; - - case 1: - { - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamples); - acc0 = vrmlaldavhq(vecIn0, vecCoeffs); - - acc0 = asrl(acc0, 23); - - *pOutput++ = (q31_t) acc0; - } - break; - } - - - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &S->pState[blockSize]; - pTempDest = S->pState; - - blkCnt = numTaps >> 2; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 4; - pTempDest += 4; - blkCnt--; - } - blkCnt = numTaps & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_s32(pTempDest, vld1q(pTempSrc), p0); - } -} - -static void arm_fir_q31_5_8_mve(const arm_fir_instance_q31 * S, const q31_t * pSrc, q31_t * pDst, uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCur; /* Points to the current sample of the state */ - const q31_t *pSamples; /* Temporary pointer to the sample buffer */ - q31_t *pOutput; /* Temporary pointer to the output buffer */ - const q31_t *pTempSrc; /* Temporary pointer to the source data */ - q31_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - q31x4_t vecIn0; - q63_t acc0, acc1, acc2, acc3; - q31x4_t vecCoeffs1_4, vecCoeffs5_8; - - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - pStateCur = &(pState[(numTaps - 1u)]); - pTempSrc = pSrc; - pSamples = pState; - pOutput = pDst; - - - /* - * load 8 coefs - */ - vecCoeffs1_4 = *(q31x4_t *) pCoeffs; - vecCoeffs5_8 = *(q31x4_t *) (pCoeffs + 4); - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - const q31_t *pSamplesTmp = pSamples; - - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamplesTmp[3]); - acc3 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamplesTmp[4]); - acc0 = vrmlaldavhaq(acc0, vecIn0, vecCoeffs5_8); - - vecIn0 = vld1q(&pSamplesTmp[5]); - acc1 = vrmlaldavhaq(acc1, vecIn0, vecCoeffs5_8); - - vecIn0 = vld1q(&pSamplesTmp[6]); - acc2 = vrmlaldavhaq(acc2, vecIn0, vecCoeffs5_8); - - vecIn0 = vld1q(&pSamplesTmp[7]); - acc3 = vrmlaldavhaq(acc3, vecIn0, vecCoeffs5_8); - - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - acc3 = asrl(acc3, 23); - - *pOutput++ = (q31_t) acc0; - *pOutput++ = (q31_t) acc1; - *pOutput++ = (q31_t) acc2; - *pOutput++ = (q31_t) acc3; - - pSamples += 4; - pStateCur += 4; - pTempSrc += 4; - - /* - * Decrement the sample block loop counter - */ - blkCnt--; - } - - uint32_t residual = blockSize & 3; - switch (residual) - { - case 3: - { - /* - * Save 4 input samples in the history buffer - */ - *(q31x4_t *) pStateCur = *(q31x4_t *) pTempSrc; - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamples); - acc0 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamples[1]); - acc1 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamples[2]); - acc2 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamples[4]); - acc0 = vrmlaldavhaq(acc0, vecIn0, vecCoeffs5_8); - - vecIn0 = vld1q(&pSamples[5]); - acc1 = vrmlaldavhaq(acc1, vecIn0, vecCoeffs5_8); - - vecIn0 = vld1q(&pSamples[6]); - acc2 = vrmlaldavhaq(acc2, vecIn0, vecCoeffs5_8); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - - *pOutput++ = (q31_t) acc0; - *pOutput++ = (q31_t) acc1; - *pOutput++ = (q31_t) acc2; - } - break; - - case 2: - { - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamples); - acc0 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamples[1]); - acc1 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamples[4]); - acc0 = vrmlaldavhaq(acc0, vecIn0, vecCoeffs5_8); - - vecIn0 = vld1q(&pSamples[5]); - acc1 = vrmlaldavhaq(acc1, vecIn0, vecCoeffs5_8); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - - *pOutput++ = (q31_t) acc0; - *pOutput++ = (q31_t) acc1; - } - break; - - case 1: - { - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - vecIn0 = vld1q(pSamples); - acc0 = vrmlaldavhq(vecIn0, vecCoeffs1_4); - - vecIn0 = vld1q(&pSamples[4]); - acc0 = vrmlaldavhaq(acc0, vecIn0, vecCoeffs5_8); - - acc0 = asrl(acc0, 23); - - *pOutput++ = (q31_t) acc0; - } - break; - } - - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &S->pState[blockSize]; - pTempDest = S->pState; - - blkCnt = numTaps >> 2; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 4; - pTempDest += 4; - blkCnt--; - } - blkCnt = numTaps & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_s32(pTempDest, vld1q(pTempSrc), p0); - } -} - -void arm_fir_q31( - const arm_fir_instance_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCur; /* Points to the current sample of the state */ - const q31_t *pSamples; /* Temporary pointer to the sample buffer */ - q31_t *pOutput; /* Temporary pointer to the output buffer */ - const q31_t *pTempSrc; /* Temporary pointer to the source data */ - q31_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - q31x4_t vecIn0; - uint32_t tapsBlkCnt = (numTaps + 3) / 4; - q63_t acc0, acc1, acc2, acc3; - q31x4_t vecCoeffs; - - /* - * [1 to 8 taps] specialized routines - */ - - if (blockSize >= 8) - { - if (numTaps <= 4) - { - arm_fir_q31_1_4_mve(S, pSrc, pDst, blockSize); - return; - } - else if (numTaps <= 8) - { - arm_fir_q31_5_8_mve(S, pSrc, pDst, blockSize); - return; - } - } - - - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - if (blockSize >= 8) - { - pStateCur = &(pState[(numTaps - 1u)]); - pSamples = pState; - pTempSrc = pSrc; - pOutput = pDst; - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - const q31_t *pCoeffsTmp = pCoeffs; - const q31_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - acc1 = 0LL; - acc2 = 0LL; - acc3 = 0LL; - - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - tapsBlkCnt = (numTaps ) / 4; - uint32_t i = tapsBlkCnt ; - while (i > 0U) - { - /* - * load 4 coefs - */ - vecCoeffs = *(q31x4_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vrmlaldavhaq(acc0, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vrmlaldavhaq(acc1, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vrmlaldavhaq(acc2, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[3]); - acc3 = vrmlaldavhaq(acc3, vecIn0, vecCoeffs); - - pSamplesTmp += 4; - pCoeffsTmp += 4; - /* - * Decrement the taps block loop counter - */ - i--; - } - - tapsBlkCnt = (numTaps ) & 3; - i = tapsBlkCnt ; - while (i > 0U) - { - /* - * load 4 coefs - */ - - /* 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] */ - acc0 += ((q63_t) *pSamplesTmp * *pCoeffsTmp) >> 8; - acc1 += ((q63_t) pSamplesTmp[1] * *pCoeffsTmp) >> 8; - acc2 += ((q63_t) pSamplesTmp[2] * *pCoeffsTmp) >> 8; - acc3 += ((q63_t) pSamplesTmp[3] * *pCoeffsTmp) >> 8; - - - pSamplesTmp += 1; - pCoeffsTmp += 1; - /* - * Decrement the taps block loop counter - */ - i--; - } - - /* .54-> .31 conversion and store accumulators */ - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - acc3 = asrl(acc3, 23); - - *pOutput++ = (q31_t) acc0; - *pOutput++ = (q31_t) acc1; - *pOutput++ = (q31_t) acc2; - *pOutput++ = (q31_t) acc3; - - pSamples += 4; - - - /* - * Decrement the sample block loop counter - */ - blkCnt--; - } - - uint32_t residual = blockSize & 3; - switch (residual) - { - case 3: - { - const q31_t *pCoeffsTmp = pCoeffs; - const q31_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - acc1 = 0LL; - acc2 = 0LL; - - /* - * Save 4 input samples in the history buffer - */ - - *(q31x4_t *) pStateCur = *(q31x4_t *) pTempSrc; - pStateCur += 4; - pTempSrc += 4; - - tapsBlkCnt = numTaps / 4; - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - vecCoeffs = *(q31x4_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vrmlaldavhaq(acc0, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vrmlaldavhaq(acc1, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vrmlaldavhaq(acc2, vecIn0, vecCoeffs); - - pSamplesTmp += 4; - pCoeffsTmp += 4; - i--; - } - - tapsBlkCnt = (numTaps ) & 3; - - i = tapsBlkCnt ; - 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] */ - acc0 += ((q63_t) *pSamplesTmp * *pCoeffsTmp) >> 8; - acc1 += ((q63_t) pSamplesTmp[1] * *pCoeffsTmp) >> 8; - acc2 += ((q63_t) pSamplesTmp[2] * *pCoeffsTmp) >> 8; - - pSamplesTmp += 1; - pCoeffsTmp += 1; - /* - * Decrement the taps block loop counter - */ - i--; - } - - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - - *pOutput++ = (q31_t) acc0; - *pOutput++ = (q31_t) acc1; - *pOutput++ = (q31_t) acc2; - } - break; - - case 2: - { - const q31_t *pCoeffsTmp = pCoeffs; - const q31_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - acc1 = 0LL; - - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - tapsBlkCnt = (numTaps ) / 4; - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - vecCoeffs = *(q31x4_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vrmlaldavhaq(acc0, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vrmlaldavhaq(acc1, vecIn0, vecCoeffs); - - pSamplesTmp += 4; - pCoeffsTmp += 4; - i--; - } - - tapsBlkCnt = (numTaps ) & 3; - i = tapsBlkCnt ; - 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] */ - acc0 += ((q63_t) *pSamplesTmp * *pCoeffsTmp) >> 8; - acc1 += ((q63_t) pSamplesTmp[1] * *pCoeffsTmp) >> 8; - - pSamplesTmp += 1; - pCoeffsTmp += 1; - /* - * Decrement the taps block loop counter - */ - i--; - } - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - - *pOutput++ = (q31_t) acc0; - *pOutput++ = (q31_t) acc1; - } - break; - - case 1: - { - const q31_t *pCoeffsTmp = pCoeffs; - const q31_t *pSamplesTmp = pSamples; - - acc0 = 0LL; - - /* - * Save 4 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 4; - pTempSrc += 4; - - tapsBlkCnt = (numTaps ) / 4; - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - vecCoeffs = *(q31x4_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vrmlaldavhaq(acc0, vecIn0, vecCoeffs); - - pSamplesTmp += 4; - pCoeffsTmp += 4; - i--; - } - - tapsBlkCnt = (numTaps ) & 3; - i = tapsBlkCnt ; - 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] */ - acc0 += ((q63_t) *pSamplesTmp * *pCoeffsTmp) >> 8; - - pSamplesTmp += 1; - pCoeffsTmp += 1; - /* - * Decrement the taps block loop counter - */ - i--; - } - - acc0 = asrl(acc0, 23); - - *pOutput++ = (q31_t) acc0; - } - break; - } - } - else - { - - q31_t *pStateCurnt; /* Points to the current sample of the state */ - q31_t *px; /* Temporary pointer for state buffer */ - const q31_t *pb; /* Temporary pointer for coefficient buffer */ - q63_t acc0; /* Accumulator */ - uint32_t i, blkCnt; /* Loop counters */ - pStateCurnt = &(S->pState[(numTaps - 1U)]); - blkCnt = blockSize; - - 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 - { - /* 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] */ - acc0 += (q63_t) *px++ * *pb++; - - i--; - } while (i > 0U); - - /* Result is in 2.62 format. Convert to 1.31 and store in destination buffer. */ - *pDst++ = (q31_t) (acc0 >> 31U); - - /* Advance state pointer by 1 for the next sample */ - pState = pState + 1U; - - /* Decrement loop counter */ - blkCnt--; - } - } - - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &S->pState[blockSize]; - pTempDest = S->pState; - - blkCnt = numTaps >> 2; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 4; - pTempDest += 4; - blkCnt--; - } - blkCnt = numTaps & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vstrwq_p_s32(pTempDest, vld1q(pTempSrc), p0); - } -} - -#else -void arm_fir_q31( - const arm_fir_instance_q31 * S, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q31_t *pStateCurnt; /* Points to the current sample of the state */ - q31_t *px; /* Temporary pointer for state buffer */ - const q31_t *pb; /* Temporary pointer for coefficient buffer */ - q63_t acc0; /* Accumulator */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t i, tapCnt, blkCnt; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q63_t acc1, acc2; /* Accumulators */ - q31_t x0, x1, x2; /* Temporary variables to hold state values */ - q31_t c0; /* Temporary variable to hold coefficient value */ -#endif - - /* 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)]); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: 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; - - while (blkCnt > 0U) - { - /* Copy 3 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 2 samples from the state buffer: x[n-numTaps], x[n-numTaps-1] */ - x0 = *px++; - x1 = *px++; - - /* Loop unrolling: process 3 taps at a time. */ - tapCnt = numTaps / 3; - - while (tapCnt > 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - tapCnt = numTaps % 0x3U; - - while (tapCnt > 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 loop counter */ - tapCnt--; - } - - /* Advance the state pointer by 3 to process the next group of 3 samples */ - pState = pState + 3; - - /* The result is in 2.30 format. Convert to 1.31 and store in destination buffer. */ - *pDst++ = (q31_t) (acc0 >> 31U); - *pDst++ = (q31_t) (acc1 >> 31U); - *pDst++ = (q31_t) (acc2 >> 31U); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining output samples */ - blkCnt = blockSize % 0x3U; - -#else - - /* Initialize blkCnt with number of taps */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 - { - /* 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] */ - acc0 += (q63_t) *px++ * *pb++; - - i--; - } while (i > 0U); - - /* Result is in 2.62 format. Convert to 1.31 and store in destination buffer. */ - *pDst++ = (q31_t) (acc0 >> 31U); - - /* Advance state pointer by 1 for the next sample */ - pState = pState + 1U; - - /* Decrement 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = (numTaps - 1U) >> 2U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Calculate remaining number of copies */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy remaining data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of FIR group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q7.c deleted file mode 100644 index 19f1df6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_q7.c +++ /dev/null @@ -1,751 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_q7.c - * Description: Q7 FIR filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup FIR - @{ - */ - -/** - @brief Processing function for 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 - @return none - - @par Scaling and Overflow Behavior - 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. - */ - -#if defined(ARM_MATH_MVEI) - -void arm_fir_q7_1_16_mve(const arm_fir_instance_q7 * S, const q7_t * pSrc, q7_t * pDst, uint32_t blockSize) -{ - q7_t *pState = S->pState; /* State pointer */ - const q7_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q7_t *pStateCur; /* Points to the current sample of the state */ - const q7_t *pSamples; /* Temporary pointer to the sample buffer */ - q7_t *pOutput; /* Temporary pointer to the output buffer */ - const q7_t *pTempSrc; /* Temporary pointer to the source data */ - q7_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - q7x16_t vecIn0; - q31_t acc0, acc1, acc2, acc3; - q7x16_t vecCoeffs; - - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - pStateCur = &(pState[(numTaps - 1u)]); - pSamples = pState; - pTempSrc = pSrc; - pOutput = pDst; - blkCnt = blockSize >> 2; - - /* - * load 16 coefs - */ - vecCoeffs = *(q7x16_t *) pCoeffs; - - while (blkCnt > 0U) - { - /* - * Save 16 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 16; - pTempSrc += 16; - - vecIn0 = vld1q(pSamples); - acc0 = vmladavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamples[1]);; - acc1 = vmladavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamples[2]);; - acc2 = vmladavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamples[3]); - acc3 = vmladavq(vecIn0, vecCoeffs); - - /* - * Store the 1.7 format filter output in destination buffer - */ - *pOutput++ = (q7_t) __SSAT((acc0 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc1 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc2 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc3 >> 7U), 8); - - pSamples += 4; - /* - * Decrement the sample block loop counter - */ - blkCnt--; - } - - uint32_t residual = blockSize & 3; - switch (residual) - { - case 3: - { - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 16; - pTempSrc += 16; - - vecIn0 = vld1q(pSamples); - acc0 = vmladavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamples[1]); - acc1 = vmladavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamples[2]); - acc2 = vmladavq(vecIn0, vecCoeffs); - - *pOutput++ = (q7_t) __SSAT((acc0 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc1 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc2 >> 7U), 8); - } - break; - - case 2: - { - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 16; - pTempSrc += 16; - - vecIn0 = vld1q(pSamples); - acc0 = vmladavq(vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamples[1]); - acc1 = vmladavq(vecIn0, vecCoeffs); - - *pOutput++ = (q7_t) __SSAT((acc0 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc1 >> 7U), 8); - } - break; - - case 1: - { - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 16; - pTempSrc += 16; - - vecIn0 = vld1q(pSamples); - acc0 = vmladavq(vecIn0, vecCoeffs); - - *pOutput++ = (q7_t) __SSAT((acc0 >> 7U), 8); - } - break; - } - - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &pState[blockSize]; - pTempDest = pState; - - blkCnt = numTaps >> 4; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 16; - pTempDest += 16; - blkCnt--; - } - blkCnt = numTaps & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vstrbq_p_s8(pTempDest, vld1q(pTempSrc), p0); - } -} - -void arm_fir_q7( - const arm_fir_instance_q7 * S, - const q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - q7_t *pState = S->pState; /* State pointer */ - const q7_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q7_t *pStateCur; /* Points to the current sample of the state */ - const q7_t *pSamples; /* Temporary pointer to the sample buffer */ - q7_t *pOutput; /* Temporary pointer to the output buffer */ - const q7_t *pTempSrc; /* Temporary pointer to the source data */ - q7_t *pTempDest; /* Temporary pointer to the destination buffer */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t blkCnt; - q7x16_t vecIn0; - uint32_t tapsBlkCnt = (numTaps + 15) / 16; - q31_t acc0, acc1, acc2, acc3; - q7x16_t vecCoeffs; - - if (blockSize >= 20) - { - if (numTaps <= 16) - { - /* - * [1 to 16 taps] specialized routine - */ - arm_fir_q7_1_16_mve(S, pSrc, pDst, blockSize); - return; - } - } - - if (blockSize >= 20) - { - /* - * pState points to state array which contains previous frame (numTaps - 1) samples - * pStateCur points to the location where the new input data should be written - */ - pStateCur = &(pState[(numTaps - 1u)]); - pSamples = pState; - pTempSrc = pSrc; - pOutput = pDst; - blkCnt = blockSize >> 2; - - /* - * outer samples loop - */ - while (blkCnt > 0U) - { - const q7_t *pCoeffsTmp = pCoeffs; - const q7_t *pSamplesTmp = pSamples; - - acc0 = 0; - acc1 = 0; - acc2 = 0; - acc3 = 0; - /* - * Save 16 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 16; - pTempSrc += 16; - - /* - * inner coefficients loop - */ - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - /* - * load 16 coefs - */ - vecCoeffs = *(q7x16_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmladavaq(acc0, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vmladavaq(acc1, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vmladavaq(acc2, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[3]); - acc3 = vmladavaq(acc3, vecIn0, vecCoeffs); - - pSamplesTmp += 16; - pCoeffsTmp += 16; - /* - * Decrement the taps block loop counter - */ - i--; - } - /* - * Store the 1.7 format filter output in destination buffer - */ - *pOutput++ = (q7_t) __SSAT((acc0 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc1 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc2 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc3 >> 7U), 8); - - pSamples += 4; - /* - * Decrement the sample block loop counter - */ - blkCnt--; - } - - uint32_t residual = blockSize & 3; - switch (residual) - { - case 3: - { - const q7_t *pCoeffsTmp = pCoeffs; - const q7_t *pSamplesTmp = pSamples; - - acc0 = 0; - acc1 = 0; - acc2 = 0; - /* - * Save 16 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 16; - pTempSrc += 16; - - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - vecCoeffs = *(q7x16_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmladavaq(acc0, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vmladavaq(acc1, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[2]); - acc2 = vmladavaq(acc2, vecIn0, vecCoeffs); - - pSamplesTmp += 16; - pCoeffsTmp += 16; - i--; - } - - *pOutput++ = (q7_t) __SSAT((acc0 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc1 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc2 >> 7U), 8); - } - break; - - case 2: - { - const q7_t *pCoeffsTmp = pCoeffs; - const q7_t *pSamplesTmp = pSamples; - - acc0 = 0; - acc1 = 0; - /* - * Save 16 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 16; - pTempSrc += 16; - - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - vecCoeffs = *(q7x16_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmladavaq(acc0, vecIn0, vecCoeffs); - - vecIn0 = vld1q(&pSamplesTmp[1]); - acc1 = vmladavaq(acc1, vecIn0, vecCoeffs); - - pSamplesTmp += 16; - pCoeffsTmp += 16; - i--; - } - - *pOutput++ = (q7_t) __SSAT((acc0 >> 7U), 8); - *pOutput++ = (q7_t) __SSAT((acc1 >> 7U), 8); - } - break; - - case 1: - { - const q7_t *pCoeffsTmp = pCoeffs; - const q7_t *pSamplesTmp = pSamples; - - acc0 = 0; - /* - * Save 16 input samples in the history buffer - */ - vst1q(pStateCur, vld1q(pTempSrc)); - pStateCur += 16; - pTempSrc += 16; - - uint32_t i = tapsBlkCnt; - while (i > 0U) - { - vecCoeffs = *(q7x16_t *) pCoeffsTmp; - - vecIn0 = vld1q(pSamplesTmp); - acc0 = vmladavaq(acc0, vecIn0, vecCoeffs); - - pSamplesTmp += 16; - pCoeffsTmp += 16; - i--; - } - *pOutput++ = (q7_t) __SSAT((acc0 >> 7U), 8); - } - break; - } - } - else - { - q7_t *pStateCurnt; /* Points to the current sample of the state */ - q7_t *px; /* Temporary pointer for state buffer */ - const q7_t *pb; /* Temporary pointer for coefficient buffer */ - q31_t acc0; /* Accumulator */ - uint32_t i,blkCnt; /* Loop counters */ - pStateCurnt = &(S->pState[(numTaps - 1U)]); - blkCnt = blockSize; - - 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 */ - while (i > 0U) - { - acc0 += (q15_t) * (px++) * (*(pb++)); - i--; - } - - /* 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 + 1U; - - /* Decrement loop counter */ - blkCnt--; - } - } - /* - * Copy the samples back into the history buffer start - */ - pTempSrc = &S->pState[blockSize]; - pTempDest = S->pState; - - blkCnt = numTaps >> 4; - while (blkCnt > 0U) - { - vst1q(pTempDest, vld1q(pTempSrc)); - pTempSrc += 16; - pTempDest += 16; - blkCnt--; - } - blkCnt = numTaps & 0xF; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp8q(blkCnt); - vstrbq_p_s8(pTempDest, vld1q(pTempSrc), p0); - } -} -#else -void arm_fir_q7( - const arm_fir_instance_q7 * S, - const q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - q7_t *pState = S->pState; /* State pointer */ - const q7_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q7_t *pStateCurnt; /* Points to the current sample of the state */ - q7_t *px; /* Temporary pointer for state buffer */ - const q7_t *pb; /* Temporary pointer for coefficient buffer */ - q31_t acc0; /* Accumulators */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t i, tapCnt, blkCnt; /* Loop counters */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t acc1, acc2, acc3; /* Accumulators */ - q7_t x0, x1, x2, x3, c0; /* Temporary variables to hold state */ -#endif - - /* 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)]); - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: 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 >> 2U; - - while (blkCnt > 0U) - { - /* Copy 4 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 3 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 >> 2U; - - /* 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] 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 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 */ - 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 loop counter */ - tapCnt--; - } - - /* 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; - - /* Advance the state pointer by 4 to process the next group of 4 samples */ - pState = pState + 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining output samples */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of taps */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 */ - while (i > 0U) - { - acc0 += (q15_t) * (px++) * (*(pb++)); - i--; - } - - /* 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 + 1U; - - /* Decrement 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time */ - tapCnt = (numTaps - 1U) >> 2U; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Calculate remaining number of copies */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of taps */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - /* Copy remaining data */ - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement the loop counter */ - tapCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of FIR group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_f32.c deleted file mode 100644 index f44f037..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_f32.c +++ /dev/null @@ -1,341 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_sparse_f32.c - * Description: Floating-point sparse FIR filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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 - @return none - */ - -void arm_fir_sparse_f32( - arm_fir_sparse_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - float32_t * pScratchIn, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - const 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 - 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiplication and store in destination buffer */ - *pOut++ = *px++ * coeff; - - /* Decrement 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - *pOut++ += *px++ * coeff; - - /* Decrement 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 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - *pOut++ += *px++ * coeff; - - /* Decrement loop counter */ - blkCnt--; - } - -} - -/** - @} end of FIR_Sparse group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_f32.c deleted file mode 100644 index 4750f77..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_f32.c +++ /dev/null @@ -1,93 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_sparse_init_f32.c - * Description: Floating-point sparse FIR filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Details - 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q15.c deleted file mode 100644 index d07d611..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q15.c +++ /dev/null @@ -1,93 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_sparse_init_q15.c - * Description: Q15 sparse FIR filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Details - 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q31.c deleted file mode 100644 index 7c32cea..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q31.c +++ /dev/null @@ -1,92 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_sparse_init_q31.c - * Description: Q31 sparse FIR filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Details - 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q7.c deleted file mode 100644 index 98153f3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_init_q7.c +++ /dev/null @@ -1,93 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_sparse_init_q7.c - * Description: Q7 sparse FIR filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Details - 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q15.c deleted file mode 100644 index 9cea93e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q15.c +++ /dev/null @@ -1,341 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_sparse_q15.c - * Description: Q15 sparse FIR filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @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 - - @par Scaling and Overflow Behavior - 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, - const q15_t * pSrc, - q15_t * pDst, - q15_t * pScratchIn, - q31_t * pScratchOut, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ - q15_t *px; /* Temporary pointers for scratch buffer */ - q15_t *py = pState; /* Temporary pointers for state buffer */ - q15_t *pb = pScratchIn; /* Temporary pointers for scratch buffer */ - q15_t *pOut = pDst; /* Working pointer for output */ - 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 */ - q31_t *pScr2 = pScratchOut; /* Working pointer for scratch buffer of output values */ - q15_t coeff = *pCoeffs++; /* Read the first coefficient value */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t in1, in2; /* Temporary variables */ -#endif - - /* 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, (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 - 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, (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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiplication and store in the scratch buffer */ - *pScratchOut++ = ((q31_t) *px++ * coeff); - - /* Decrement 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_q15(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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - *pScratchOut++ += (q31_t) *px++ * coeff; - - /* Decrement 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 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, (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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - *pScratchOut++ += (q31_t) *px++ * coeff; - - /* Decrement loop counter */ - blkCnt--; - } - - /* All the output values are in pScratchOut buffer. - Convert them into 1.15 format, saturate and store in the destination buffer. */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - in1 = *pScr2++; - in2 = *pScr2++; - -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pOut, __PKHBT((q15_t) __SSAT(in1 >> 15, 16), (q15_t) __SSAT(in2 >> 15, 16), 16)); -#else - write_q15x2_ia (&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 - write_q15x2_ia (&pOut, __PKHBT((q15_t) __SSAT(in1 >> 15, 16), (q15_t) __SSAT(in2 >> 15, 16), 16)); -#else - write_q15x2_ia (&pOut, __PKHBT((q15_t) __SSAT(in2 >> 15, 16), (q15_t) __SSAT(in1 >> 15, 16), 16)); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - *pOut++ = (q15_t) __SSAT(*pScr2++ >> 15, 16); - - /* Decrement loop counter */ - blkCnt--; - } - -} - -/** - @} end of FIR_Sparse group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q31.c deleted file mode 100644 index 86d3e1d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q31.c +++ /dev/null @@ -1,357 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_sparse_q31.c - * Description: Q31 sparse FIR filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @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 - @return none - - @par Scaling and Overflow Behavior - 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, - const q31_t * pSrc, - q31_t * pDst, - q31_t * pScratchIn, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - const 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 */ - 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 */ - q31_t coeff = *pCoeffs++; /* Read the first coefficient value */ - q31_t in; - q63_t out; /* Temporary output variable */ - - - /* 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* Perform Multiplications and store in 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiplication and store in destination buffer */ - *pOut++ = (q31_t) (((q63_t) *px++ * coeff) >> 32); - - /* Decrement 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - out = *pOut; - out += ((q63_t) *px++ * coeff) >> 32; - *pOut++ = (q31_t) (out); - - /* Decrement 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 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - out = *pOut; - out += ((q63_t) *px++ * coeff) >> 32; - *pOut++ = (q31_t) (out); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Working output pointer is updated */ - pOut = pDst; - - /* Output is converted into 1.31 format. */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - in = *pOut << 1; - *pOut++ = in; - in = *pOut << 1; - *pOut++ = in; - in = *pOut << 1; - *pOut++ = in; - in = *pOut << 1; - *pOut++ = in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - in = *pOut << 1; - *pOut++ = in; - - /* Decrement loop counter */ - blkCnt--; - } - -} - -/** - @} end of FIR_Sparse group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q7.c deleted file mode 100644 index 7a2b57f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_fir_sparse_q7.c +++ /dev/null @@ -1,341 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fir_sparse_q7.c - * Description: Q7 sparse FIR filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - @return none - - @par Scaling and Overflow Behavior - 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, - const q7_t * pSrc, - q7_t * pDst, - q7_t * pScratchIn, - q31_t * pScratchOut, - uint32_t blockSize) -{ - q7_t *pState = S->pState; /* State pointer */ - const 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; /* Number of filter coefficients in the filter */ - int32_t readIndex; /* Read index of the state buffer */ - uint32_t tapCnt, blkCnt; /* loop counters */ - q31_t *pScr2 = pScratchOut; /* Working pointer for scratch buffer of output values */ - q31_t in; - q7_t coeff = *pCoeffs++; /* Read the coefficient value */ - -#if defined (ARM_MATH_LOOPUNROLL) - q7_t in1, in2, in3, in4; -#endif - - /* 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 - 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiplication and store in the scratch buffer */ - *pScratchOut++ = ((q31_t) *px++ * coeff); - - /* Decrement 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_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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - in = *pScratchOut + ((q31_t) *px++ * coeff); - *pScratchOut++ = in; - - /* Decrement 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 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Perform Multiply-Accumulate */ - in = *pScratchOut + ((q31_t) *px++ * coeff); - *pScratchOut++ = in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* All the output values are in pScratchOut buffer. - Convert them into 1.15 format, saturate and store in the destination buffer. */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time. */ - blkCnt = blockSize >> 2U; - - 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); - - write_q7x4_ia (&pOut, __PACKq7(in1, in2, in3, in4)); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - *pOut++ = (q7_t) __SSAT(*pScr2++ >> 7, 8); - - /* Decrement loop counter */ - blkCnt--; - } - -} - -/** - @} end of FIR_Sparse group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_f32.c deleted file mode 100644 index b38fca2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_f32.c +++ /dev/null @@ -1,354 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_iir_lattice_f32.c - * Description: Floating-point IIR Lattice filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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" - @par -
    -      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}
    -  
    - @par - pvCoeffs points to the array of ladder coefficients of size (numStages+1). - Ladder coefficients are stored in time-reversed order. -
    -      {vN, vN-1, ..., v0}
    -  
    - @par - 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 - */ - -void arm_iir_lattice_f32( - const arm_iir_lattice_instance_f32 * S, - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t *pState = S->pState; /* State pointer */ - float32_t *pStateCur; /* State current pointer */ - float32_t acc; /* Accumlator */ - float32_t fnext1, fnext2, gcurr1, gnext; /* Temporary variables for lattice stages */ - float32_t *px1, *px2, *pk, *pv; /* Temporary pointers for state and coef */ - uint32_t numStages = S->numStages; /* Number of stages */ - uint32_t blkCnt, tapCnt; /* Temporary variables for counts */ - -#if defined (ARM_MATH_LOOPUNROLL) - float32_t gcurr2; /* Temporary variables for lattice stages */ - float32_t k1, k2; - float32_t v1, v2, v3, v4; -#endif - - /* initialise loop count */ - blkCnt = blockSize; - - /* 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = (numStages) >> 2U; - - 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; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numStages % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numStages; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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; - - /* Decrement loop counter */ - 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; - - /* Decrement loop counter */ - 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 */ - pStateCur = &S->pState[0]; - pState = &S->pState[blockSize]; - - /* Copy data */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numStages >> 2U; - - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numStages % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - tapCnt = numStages; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} - -/** - @} end of IIR_Lattice group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_f32.c deleted file mode 100644 index bd9f933..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_f32.c +++ /dev/null @@ -1,77 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_iir_lattice_init_f32.c - * Description: Floating-point IIR lattice filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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 - @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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_q15.c deleted file mode 100644 index 01abf48..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_q15.c +++ /dev/null @@ -1,77 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_iir_lattice_init_q15.c - * Description: Q15 IIR lattice filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - @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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_q31.c deleted file mode 100644 index b472f6c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_init_q31.c +++ /dev/null @@ -1,77 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_iir_lattice_init_q31.c - * Description: Initialization function for the Q31 IIR lattice filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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 - @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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_q15.c deleted file mode 100644 index 9dbea81..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_q15.c +++ /dev/null @@ -1,396 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_iir_lattice_q15.c - * Description: Q15 IIR Lattice filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Scaling and Overflow Behavior - The function is implemented using an internal 64-bit 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, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - q15_t *pState = S->pState; /* State pointer */ - q15_t *pStateCur; /* State current pointer */ - q31_t fcurr, fnext = 0, gcurr = 0, gnext; /* Temporary variables for lattice stages */ - q63_t acc; /* Accumlator */ - q15_t *px1, *px2, *pk, *pv; /* Temporary pointers for state and coef */ - uint32_t numStages = S->numStages; /* Number of stages */ - uint32_t blkCnt, tapCnt; /* Temporary variables for counts */ - q15_t out; /* Temporary variable for output */ - -#if defined (ARM_MATH_DSP) && defined (ARM_MATH_LOOPUNROLL) - q15_t gnext1, gnext2; /* Temporary variables for lattice stages */ - q31_t v; /* Temporary variable for ladder coefficient */ -#endif - - /* initialise loop count */ - blkCnt = blockSize; - -#if defined (ARM_MATH_DSP) - - /* Sample processing */ - while (blkCnt > 0U) - { - /* Read Sample from input buffer */ - /* fN(n) = x(n) */ - fcurr = *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; - - /* 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = (numStages - 1U) >> 2U; - - 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 = 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 for next sample processing */ - *px2++ = (q15_t) gnext1; - - /* 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 = 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 */ - v = read_q15x2_ia (&pv); - - /* 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 buffer */ - 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 buffer */ - 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 */ - v = read_q15x2_ia (&pv); - - /* 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); - - /* Decrement loop counter */ - tapCnt--; - } - - fnext = fcurr; - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numStages - 1U) % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - tapCnt = (numStages - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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; - - /* Decrement loop counter */ - 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; - - /* Decrement loop counter */ - 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 */ - pStateCur = &S->pState[0]; - pState = &S->pState[blockSize]; - - /* copy data */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numStages >> 2U; - - while (tapCnt > 0U) - { - write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); - write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numStages % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - tapCnt = (numStages - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#else /* #if defined (ARM_MATH_DSP) */ - - /* Sample processing */ - while (blkCnt > 0U) - { - /* Read Sample from input buffer */ - /* fN(n) = x(n) */ - fcurr = *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; - - 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; - - /* Decrement loop counter */ - 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 */ - pStateCur = &S->pState[0]; - pState = &S->pState[blockSize]; - - tapCnt = numStages; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#endif /* #if defined (ARM_MATH_DSP) */ - -} - -/** - @} end of IIR_Lattice group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_q31.c deleted file mode 100644 index fbc74d8..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_iir_lattice_q31.c +++ /dev/null @@ -1,356 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_iir_lattice_q31.c - * Description: Q31 IIR Lattice filter processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @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 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, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - q31_t *pState = S->pState; /* State pointer */ - q31_t *pStateCur; /* State current pointer */ - q31_t fcurr, fnext = 0, gcurr = 0, gnext; /* Temporary variables for lattice stages */ - q63_t acc; /* Accumlator */ - q31_t *px1, *px2, *pk, *pv; /* Temporary pointers for state and coef */ - uint32_t numStages = S->numStages; /* Number of stages */ - uint32_t blkCnt, tapCnt; /* Temporary variables for counts */ - - - /* initialise loop count */ - blkCnt = blockSize; - -#if defined (ARM_MATH_DSP) - - /* Sample processing */ - while (blkCnt > 0U) - { - /* Read Sample from input buffer */ - /* fN(n) = x(n) */ - fcurr = *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; - - /* 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = (numStages - 1U) >> 2U; - - 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; - - /* Decrement loop counter */ - tapCnt--; - } - - fnext = fcurr; - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numStages - 1U) % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - tapCnt = (numStages - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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; - - /* Decrement loop counter */ - 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; - - /* Decrement loop counter */ - 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 */ - pStateCur = &S->pState[0]; - pState = &S->pState[blockSize]; - - /* Copy data */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numStages >> 2U; - - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numStages % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - tapCnt = (numStages - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#else /* #if defined (ARM_MATH_DSP) */ - - /* Sample processing */ - while (blkCnt > 0U) - { - /* Read Sample from input buffer */ - /* fN(n) = x(n) */ - fcurr = *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; - - 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; - - /* Decrement loop counter */ - 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 */ - pStateCur = &S->pState[0]; - pState = &S->pState[blockSize]; - - tapCnt = numStages; - - /* Copy data */ - while (tapCnt > 0U) - { - *pStateCur++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -#endif /* #if defined (ARM_MATH_DSP) */ - -} - -/** - @} end of IIR_Lattice group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_f32.c deleted file mode 100644 index 0a312e9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_f32.c +++ /dev/null @@ -1,533 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_f32.c - * Description: Processing function for the floating-point LMS filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - @{ - */ - -/** - @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 - */ -#if defined(ARM_MATH_NEON) -void arm_lms_f32( - const arm_lms_instance_f32 * S, - const 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 */ - - float32x4_t tempV, sumV, xV, bV; - float32x2_t tempV2; - - 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; - - 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; - sumV = vdupq_n_f32(0.0); - - /* Process 4 taps at a time. */ - tapCnt = numTaps >> 2; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - xV = vld1q_f32(px); - bV = vld1q_f32(pb); - sumV = vmlaq_f32(sumV, xV, bV); - - px += 4; - pb += 4; - - /* Decrement the loop counter */ - tapCnt--; - } - tempV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); - sum = vget_lane_f32(tempV2, 0) + vget_lane_f32(tempV2, 1); - - - /* 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); - - /* Process 4 taps at a time. */ - tapCnt = numTaps >> 2; - - /* Update filter coefficients */ - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - xV = vld1q_f32(px); - bV = vld1q_f32(pb); - px += 4; - bV = vmlaq_n_f32(bV,xV,w); - - vst1q_f32(pb,bV); - pb += 4; - - - /* 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; - - /* Process 4 taps at a time for (numTaps - 1U) samples copy */ - tapCnt = (numTaps - 1U) >> 2U; - - /* copy data */ - while (tapCnt > 0U) - { - tempV = vld1q_f32(pState); - vst1q_f32(pStateCurnt,tempV); - pState += 4; - pStateCurnt += 4; - - /* 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 -void arm_lms_f32( - const arm_lms_instance_f32 * S, - const 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 */ - float32_t acc, e; /* Accumulator, error */ - float32_t w; /* Weight factor */ - uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ - uint32_t tapCnt, blkCnt; /* Loop counters */ - - /* Initializations of error, difference, Coefficient update */ - e = 0.0f; - w = 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)]); - - /* initialise loop count */ - blkCnt = blockSize; - - while (blkCnt > 0U) - { - /* Copy the new input sample into the state buffer */ - *pStateCurnt++ = *pSrc++; - - /* Initialize pState pointer */ - px = pState; - - /* Initialize coefficient pointer */ - pb = pCoeffs; - - /* Set the accumulator to zero */ - acc = 0.0f; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - acc += (*px++) * (*pb++); - - acc += (*px++) * (*pb++); - - acc += (*px++) * (*pb++); - - acc += (*px++) * (*pb++); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - acc += (*px++) * (*pb++); - - /* Decrement the loop counter */ - tapCnt--; - } - - /* Store the result from accumulator into the destination buffer. */ - *pOut++ = acc; - - /* Compute and store error */ - e = (float32_t) *pRef++ - acc; - *pErr++ = e; - - /* Calculation of Weighting factor for updating filter coefficients */ - w = e * mu; - - /* Initialize pState pointer */ - /* Advance state pointer by 1 for the next sample */ - px = pState++; - - /* Initialize coefficient pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - /* 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - *pb += w * (*px++); - pb++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Decrement 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 data */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = (numTaps - 1U) >> 2U; - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} -#endif /* #if defined(ARM_MATH_NEON) */ - -/** - @} end of LMS group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_f32.c deleted file mode 100644 index f418f46..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_f32.c +++ /dev/null @@ -1,81 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_init_f32.c - * Description: Floating-point LMS filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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 Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_q15.c deleted file mode 100644 index fe0a5c5..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_q15.c +++ /dev/null @@ -1,92 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_init_q15.c - * Description: Q15 LMS filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 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 Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_q31.c deleted file mode 100644 index 3410b9f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_init_q31.c +++ /dev/null @@ -1,92 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_init_q31.c - * Description: Q31 LMS filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 Details - 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, (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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_f32.c deleted file mode 100644 index d718402..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_f32.c +++ /dev/null @@ -1,564 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_norm_f32.c - * Description: Processing function for the floating-point NLMS filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 (fixed point versions) - 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 (fixed point versions) - 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 - */ - -#if defined(ARM_MATH_NEON) -void arm_lms_norm_f32( - arm_lms_norm_instance_f32 * S, - const 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 */ - - float32x4_t tempV, sumV, xV, bV; - float32x2_t tempV2; - - /* 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; - - 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; - sumV = vdupq_n_f32(0.0); - - /* Process 4 taps at a time. */ - tapCnt = numTaps >> 2; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - xV = vld1q_f32(px); - bV = vld1q_f32(pb); - sumV = vmlaq_f32(sumV, xV, bV); - - px += 4; - pb += 4; - - /* Decrement the loop counter */ - tapCnt--; - } - tempV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); - sum = vget_lane_f32(tempV2, 0) + vget_lane_f32(tempV2, 1); - - /* 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); - - /* Process 4 taps at a time. */ - tapCnt = numTaps >> 2; - - /* Update filter coefficients */ - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - xV = vld1q_f32(px); - bV = vld1q_f32(pb); - px += 4; - bV = vmlaq_n_f32(bV,xV,w); - - vst1q_f32(pb,bV); - pb += 4; - - - /* 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; - - /* Process 4 taps at a time for (numTaps - 1U)/4 samples copy */ - tapCnt = (numTaps - 1U) >> 2U; - - /* copy data */ - while (tapCnt > 0U) - { - tempV = vld1q_f32(pState); - vst1q_f32(pStateCurnt,tempV); - pState += 4; - pStateCurnt += 4; - - /* 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 -void arm_lms_norm_f32( - arm_lms_norm_instance_f32 * S, - const 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 */ - float32_t acc, e; /* Accumulator, error */ - float32_t w; /* Weight 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 x0, in; /* Temporary variable to hold input sample and state */ - - /* Initializations of error, difference, Coefficient update */ - e = 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)]); - - /* initialise loop count */ - blkCnt = blockSize; - - while (blkCnt > 0U) - { - /* Copy the new input sample into the state buffer */ - *pStateCurnt++ = *pSrc; - - /* Initialize pState pointer */ - px = pState; - - /* Initialize coefficient 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 */ - acc = 0.0f; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - acc += (*px++) * (*pb++); - - acc += (*px++) * (*pb++); - - acc += (*px++) * (*pb++); - - acc += (*px++) * (*pb++); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - acc += (*px++) * (*pb++); - - /* Decrement the loop counter */ - tapCnt--; - } - - /* Store the result from accumulator into the destination buffer. */ - *pOut++ = acc; - - /* Compute and store error */ - e = (float32_t) *pRef++ - acc; - *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 coefficient pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - /* 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - *pb += w * (*px++); - pb++; - - /* Decrement loop counter */ - tapCnt--; - } - - x0 = *pState; - - /* Advance state pointer by 1 for the next sample */ - pState = pState + 1; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Save energy and x0 values for the next frame */ - S->energy = 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; - - /* copy data */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = (numTaps - 1U) >> 2U; - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} -#endif /* #if defined(ARM_MATH_NEON) */ -/** - @} end of LMS_NORM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_f32.c deleted file mode 100644 index 543dc72..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_f32.c +++ /dev/null @@ -1,92 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_norm_init_f32.c - * Description: Floating-point NLMS filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_q15.c deleted file mode 100644 index d581ac1..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_q15.c +++ /dev/null @@ -1,98 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_norm_init_q15.c - * Description: Q15 NLMS filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_q31.c deleted file mode 100644 index 30e78ec..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_init_q31.c +++ /dev/null @@ -1,97 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_norm_init_q31.c - * Description: Q31 NLMS filter initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @par Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_q15.c deleted file mode 100644 index c15ad5e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_q15.c +++ /dev/null @@ -1,297 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_norm_q15.c - * Description: Processing function for Q15 normalized LMS filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @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_norm_q15( - arm_lms_norm_instance_q15 * S, - const 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 */ - q63_t acc; /* Accumulator */ - q31_t energy; /* Energy of the input */ - 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 */ - 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; /* Temporary variable for coefficient */ - q31_t acc_l, acc_h; /* Temporary input */ - 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)]); - - /* initialise loop count */ - blkCnt = blockSize; - - while (blkCnt > 0U) - { - /* Copy the new input sample into the state buffer */ - *pStateCurnt++ = *pSrc; - - /* Initialize pState pointer */ - px = pState; - - /* Initialize coefficient 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - /* acc += b[N] * x[n-N] + b[N-1] * x[n-N-1] */ - acc = __SMLALD(read_q15x2_ia (&px), read_q15x2_ia (&pb), acc); - acc = __SMLALD(read_q15x2_ia (&px), read_q15x2_ia (&pb), acc); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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, 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 coefficient pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - /* Update filter coefficients */ - while (tapCnt > 0U) - { - coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); - *pb++ = (q15_t) __SSAT(coef, 16); - - coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); - *pb++ = (q15_t) __SSAT(coef, 16); - - coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); - *pb++ = (q15_t) __SSAT(coef, 16); - - coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); - *pb++ = (q15_t) __SSAT(coef, 16); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); - *pb++ = (q15_t) __SSAT(coef, 16); - - /* Decrement loop counter */ - tapCnt--; - } - - x0 = *pState; - - /* Advance state pointer by 1 for the next sample */ - pState = pState + 1; - - /* Decrement 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 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 data */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = (numTaps - 1U) >> 2U; - - while (tapCnt > 0U) - { - write_q15x2_ia (&pStateCurnt, read_q15x2_ia (&pState)); - write_q15x2_ia (&pStateCurnt, read_q15x2_ia (&pState)); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} - -/** - @} end of LMS_NORM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_q31.c deleted file mode 100644 index e26219e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_norm_q31.c +++ /dev/null @@ -1,311 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_norm_q31.c - * Description: Processing function for the Q31 NLMS filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - - @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 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, - const 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 acc; /* Accumulator */ - q63_t energy; /* Energy of the input */ - q31_t e = 0; /* Error data sample */ - q31_t w = 0, in; /* Weight factor and state */ - q31_t x0; /* Temporary variable to hold input sample */ - 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)]); - - /* initialise loop count */ - blkCnt = blockSize; - - while (blkCnt > 0U) - { - /* Copy the new input sample into the state buffer */ - *pStateCurnt++ = *pSrc; - - /* Initialize pState pointer */ - px = pState; - - /* Initialize coefficient 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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++ = 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 coefficient pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - /* 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 loop counter */ - tapCnt--; - } - - /* Read the sample from state buffer */ - x0 = *pState; - - /* Advance state pointer by 1 for the next sample */ - pState = pState + 1; - - /* Decrement 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; - - /* copy data */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = (numTaps - 1U) >> 2U; - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} - -/** - @} end of LMS_NORM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_q15.c deleted file mode 100644 index 0fc9878..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_q15.c +++ /dev/null @@ -1,262 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_q15.c - * Description: Processing function for Q15 LMS filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 an internal 64-bit 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, - const 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 */ - q63_t acc; /* Accumulator */ - q15_t e = 0; /* Error of data sample */ - q15_t alpha; /* Intermediate constant for taps update */ - q31_t coef; /* Temporary variable for coefficient */ - q31_t acc_l, acc_h; /* Temporary input */ - int32_t lShift = (15 - (int32_t) S->postShift); /* Post shift */ - int32_t uShift = (32 - lShift); - - /* 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)]); - - /* initialise loop count */ - blkCnt = blockSize; - - while (blkCnt > 0U) - { - /* Copy the new input sample into the state buffer */ - *pStateCurnt++ = *pSrc++; - - /* Initialize pState pointer */ - px = pState; - - /* Initialize coefficient pointer */ - pb = pCoeffs; - - /* Set the accumulator to zero */ - acc = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - /* acc += b[N] * x[n-N] + b[N-1] * x[n-N-1] */ - acc = __SMLALD(read_q15x2_ia (&px), read_q15x2_ia (&pb), acc); - acc = __SMLALD(read_q15x2_ia (&px), read_q15x2_ia (&pb), acc); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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, 16U); - - /* 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 coefficient pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - coef = (q31_t) *pb + (((q31_t) alpha * (*px++)) >> 15); - *pb++ = (q15_t) __SSAT((coef), 16); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Decrement 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 data */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = (numTaps - 1U) >> 2U; - - while (tapCnt > 0U) - { - write_q15x2_ia (&pStateCurnt, read_q15x2_ia (&pState)); - write_q15x2_ia (&pStateCurnt, read_q15x2_ia (&pState)); - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} - -/** - @} end of LMS group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_q31.c deleted file mode 100644 index 2fb8808..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/FilteringFunctions/arm_lms_q31.c +++ /dev/null @@ -1,283 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_lms_q31.c - * Description: Processing function for the Q31 LMS filter - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupFilters - */ - -/** - @addtogroup LMS - @{ - */ - -/** - @brief Processing function for Q31 LMS filter. - @param[in] S points to an instance of the Q31 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, - const 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 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)]); - - /* initialise loop count */ - blkCnt = blockSize; - - while (blkCnt > 0U) - { - /* Copy the new input sample into the state buffer */ - *pStateCurnt++ = *pSrc++; - - /* Initialize pState pointer */ - px = pState; - - /* Initialize coefficient pointer */ - pb = pCoeffs; - - /* Set the accumulator to zero */ - acc = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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++ = e; - - /* Compute alpha i.e. intermediate constant for taps update */ - alpha = (q31_t) (((q63_t) e * mu) >> 31); - - /* Initialize pState pointer */ - /* Advance state pointer by 1 for the next sample */ - px = pState++; - - /* Initialize coefficient pointer */ - pb = pCoeffs; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = numTaps >> 2U; - - /* Update filter coefficients */ - while (tapCnt > 0U) - { - /* Perform the multiply-accumulate */ - - /* 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 loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = numTaps % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = numTaps; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 loop counter */ - tapCnt--; - } - - /* Decrement 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 data */ -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 taps at a time. */ - tapCnt = (numTaps - 1U) >> 2U; - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - - /* Loop unrolling: Compute remaining taps */ - tapCnt = (numTaps - 1U) % 0x4U; - -#else - - /* Initialize tapCnt with number of samples */ - tapCnt = (numTaps - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (tapCnt > 0U) - { - *pStateCurnt++ = *pState++; - - /* Decrement loop counter */ - tapCnt--; - } - -} - -/** - @} end of LMS group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/CMakeLists.txt deleted file mode 100644 index e8838b2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPMatrix) - -include(configLib) -include(configDsp) - -file(GLOB SRC "./*_*.c") - -add_library(CMSISDSPMatrix STATIC ${SRC}) - -configLib(CMSISDSPMatrix ${ROOT}) -configDsp(CMSISDSPMatrix ${ROOT}) - -### Includes -target_include_directories(CMSISDSPMatrix PUBLIC "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/MatrixFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/MatrixFunctions.c deleted file mode 100644 index da721fe..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/MatrixFunctions.c +++ /dev/null @@ -1,53 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: MatrixFunctions.c - * Description: Combination of all matrix function source files. - * - * $Date: 18. March 2019 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_mat_add_f32.c" -#include "arm_mat_add_q15.c" -#include "arm_mat_add_q31.c" -#include "arm_mat_cmplx_mult_f32.c" -#include "arm_mat_cmplx_mult_q15.c" -#include "arm_mat_cmplx_mult_q31.c" -#include "arm_mat_init_f32.c" -#include "arm_mat_init_q15.c" -#include "arm_mat_init_q31.c" -#include "arm_mat_inverse_f32.c" -#include "arm_mat_inverse_f64.c" -#include "arm_mat_mult_f32.c" -#include "arm_mat_mult_fast_q15.c" -#include "arm_mat_mult_fast_q31.c" -#include "arm_mat_mult_q15.c" -#include "arm_mat_mult_q31.c" -#include "arm_mat_scale_f32.c" -#include "arm_mat_scale_q15.c" -#include "arm_mat_scale_q31.c" -#include "arm_mat_sub_f32.c" -#include "arm_mat_sub_q15.c" -#include "arm_mat_sub_q31.c" -#include "arm_mat_trans_f32.c" -#include "arm_mat_trans_q15.c" -#include "arm_mat_trans_q31.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_f32.c deleted file mode 100644 index 071e1d7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_f32.c +++ /dev/null @@ -1,304 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_add_f32.c - * Description: Floating-point matrix addition - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 first input matrix structure - @param[in] pSrcB points to second input matrix structure - @param[out] pDst points to output matrix structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -arm_status arm_mat_add_f32( - const arm_matrix_instance_f32 * pSrcA, - const arm_matrix_instance_f32 * pSrcB, - arm_matrix_instance_f32 * pDst) -{ - arm_status status; - uint32_t numSamples; /* total number of elements in the matrix */ - float32_t *pDataA, *pDataB, *pDataDst; - f32x4_t vecA, vecB, vecDst; - float32_t const *pSrcAVec; - float32_t const *pSrcBVec; - uint32_t blkCnt; /* loop counters */ - - pDataA = pSrcA->pData; - pDataB = pSrcB->pData; - pDataDst = pDst->pData; - pSrcAVec = (float32_t const *) pDataA; - pSrcBVec = (float32_t const *) pDataB; - -#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; - blkCnt = numSamples >> 2; - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - /* Add and then store the results in the destination buffer. */ - vecA = vld1q(pSrcAVec); - pSrcAVec += 4; - vecB = vld1q(pSrcBVec); - pSrcBVec += 4; - vecDst = vaddq(vecA, vecB); - vst1q(pDataDst, vecDst); - pDataDst += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = numSamples & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecA = vld1q(pSrcAVec); - vecB = vld1q(pSrcBVec); - vecDst = vaddq_m(vecDst, vecA, vecB, p0); - vstrwq_p(pDataDst, vecDst, p0); - } - /* set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - return (status); -} -#else -#if defined(ARM_MATH_NEON) -/* - -Neon version is assuming the matrix is small enough. -So no blocking is used for taking into account cache effects. -For big matrix, there exist better libraries for Neon. - -*/ -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 */ - - - 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 - { - float32x4_t vec1; - float32x4_t vec2; - float32x4_t res; - - /* Total number of samples in the input matrix */ - numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; - - blkCnt = numSamples >> 2U; - - /* 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. */ - vec1 = vld1q_f32(pIn1); - vec2 = vld1q_f32(pIn2); - res = vaddq_f32(vec1, vec2); - vst1q_f32(pOut, res); - - /* 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; - - 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); -} -#else -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 *pInA = pSrcA->pData; /* input data matrix pointer A */ - float32_t *pInB = pSrcB->pData; /* input data matrix pointer B */ - 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 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 input matrix */ - numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - - /* Add and store result in destination buffer. */ - *pOut++ = *pInA++ + *pInB++; - - *pOut++ = *pInA++ + *pInB++; - - *pOut++ = *pInA++ + *pInB++; - - *pOut++ = *pInA++ + *pInB++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - - /* Add and store result in destination buffer. */ - *pOut++ = *pInA++ + *pInB++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of MatrixAdd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_q15.c deleted file mode 100644 index 03e87d8..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_q15.c +++ /dev/null @@ -1,227 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_add_q15.c - * Description: Q15 matrix addition - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - -/** - @addtogroup MatrixAdd - @{ - */ - -/** - @brief Q15 matrix addition. - @param[in] pSrcA points to first input matrix structure - @param[in] pSrcB points to second input matrix structure - @param[out] pDst points to output matrix structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. - */ -#if defined(ARM_MATH_MVEI) - -arm_status arm_mat_add_q15( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst) -{ - uint32_t numSamples; /* total number of elements in the matrix */ - q15_t *pDataA, *pDataB, *pDataDst; - q15x8_t vecA, vecB, vecDst; - q15_t const *pSrcAVec; - q15_t const *pSrcBVec; - uint32_t blkCnt; /* loop counters */ - arm_status status; /* status of matrix addition */ - - pDataA = pSrcA->pData; - pDataB = pSrcB->pData; - pDataDst = pDst->pData; - pSrcAVec = (q15_t const *) pDataA; - pSrcBVec = (q15_t const *) pDataB; - - #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; - blkCnt = numSamples >> 3; - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - /* Add and then store the results in the destination buffer. */ - vecA = vld1q(pSrcAVec); pSrcAVec += 8; - vecB = vld1q(pSrcBVec); pSrcBVec += 8; - vecDst = vqaddq(vecA, vecB); - vst1q(pDataDst, vecDst); pDataDst += 8; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numSamples & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecA = vld1q(pSrcAVec); pSrcAVec += 8; - vecB = vld1q(pSrcBVec); pSrcBVec += 8; - vecDst = vqaddq_m(vecDst, vecA, vecB, p0); - vstrhq_p(pDataDst, vecDst, p0); - } - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -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 */ - - 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 /* #ifdef ARM_MATH_MATRIX_CHECK */ - - { - /* Total number of samples in input matrix */ - numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - - /* Add, saturate and store result in destination buffer. */ -#if defined (ARM_MATH_DSP) - write_q15x2_ia (&pOut, __QADD16(read_q15x2_ia (&pInA), read_q15x2_ia (&pInB))); - - write_q15x2_ia (&pOut, __QADD16(read_q15x2_ia (&pInA), read_q15x2_ia (&pInB))); -#else - *pOut++ = (q15_t) __SSAT(((q31_t) *pInA++ + *pInB++), 16); - - *pOut++ = (q15_t) __SSAT(((q31_t) *pInA++ + *pInB++), 16); - - *pOut++ = (q15_t) __SSAT(((q31_t) *pInA++ + *pInB++), 16); - - *pOut++ = (q15_t) __SSAT(((q31_t) *pInA++ + *pInB++), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - - /* Add, saturate and store result in destination buffer. */ -#if defined (ARM_MATH_DSP) - *pOut++ = (q15_t) __QADD16(*pInA++, *pInB++); -#else - *pOut++ = (q15_t) __SSAT(((q31_t) *pInA++ + *pInB++), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixAdd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_q31.c deleted file mode 100644 index 29eddbb..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_add_q31.c +++ /dev/null @@ -1,216 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_add_q31.c - * Description: Q31 matrix addition - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - -/** - @addtogroup MatrixAdd - @{ - */ - -/** - @brief Q31 matrix addition. - @param[in] pSrcA points to first input matrix structure - @param[in] pSrcB points to second input matrix structure - @param[out] pDst points to output matrix structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. - */ -#if defined(ARM_MATH_MVEI) -arm_status arm_mat_add_q31( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst) -{ - arm_status status; /* status of matrix addition */ - uint32_t numSamples; /* total number of elements in the matrix */ - q31_t *pDataA, *pDataB, *pDataDst; - q31x4_t vecA, vecB, vecDst; - q31_t const *pSrcAVec; - q31_t const *pSrcBVec; - uint32_t blkCnt; /* loop counters */ - - pDataA = pSrcA->pData; - pDataB = pSrcB->pData; - pDataDst = pDst->pData; - pSrcAVec = (q31_t const *) pDataA; - pSrcBVec = (q31_t const *) pDataB; - -#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; - blkCnt = numSamples >> 2; - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - /* Add and then store the results in the destination buffer. */ - vecA = vld1q(pSrcAVec); - pSrcAVec += 4; - vecB = vld1q(pSrcBVec); - pSrcBVec += 4; - vecDst = vqaddq(vecA, vecB); - vst1q(pDataDst, vecDst); - pDataDst += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = numSamples & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecA = vld1q(pSrcAVec); - pSrcAVec += 4; - vecB = vld1q(pSrcBVec); - pSrcBVec += 4; - vecDst = vqaddq_m(vecDst, vecA, vecB, p0); - vstrwq_p(pDataDst, vecDst, p0); - } - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -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 *pInA = pSrcA->pData; /* input data matrix pointer A */ - q31_t *pInB = pSrcB->pData; /* input data matrix pointer B */ - q31_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 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 input matrix */ - numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - - /* Add, saturate and store result in destination buffer. */ - *pOut++ = __QADD(*pInA++, *pInB++); - - *pOut++ = __QADD(*pInA++, *pInB++); - - *pOut++ = __QADD(*pInA++, *pInB++); - - *pOut++ = __QADD(*pInA++, *pInB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - - /* Add, saturate and store result in destination buffer. */ - *pOut++ = __QADD(*pInA++, *pInB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixAdd group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c deleted file mode 100644 index b4bb20b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c +++ /dev/null @@ -1,1409 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_cmplx_mult_f32.c - * Description: Floating-point matrix multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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. - @par - When matrix size checking is enabled, the functions check: - - that the inner dimensions of pSrcA and pSrcB are equal; - - 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 first input complex matrix structure - @param[in] pSrcB points to second input complex matrix structure - @param[out] pDst points to output complex matrix structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -#define MATRIX_DIM2 2 -#define MATRIX_DIM3 3 -#define MATRIX_DIM4 4 - -__STATIC_INLINE arm_status arm_mat_cmplx_mult_f32_2x2_mve( - const arm_matrix_instance_f32 * pSrcA, - const arm_matrix_instance_f32 * pSrcB, - arm_matrix_instance_f32 * pDst) -{ - float32_t const *pInB = 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 */ - uint32x4_t vecColBOffs0; - float32_t *pInA0 = pInA; - float32_t *pInA1 = pInA0 + CMPLX_DIM * MATRIX_DIM2; - f32x4_t acc0, acc1; - f32x4_t vecB, vecA; - - static const uint32_t offsetB0[4] = { 0, 1, - MATRIX_DIM2 * CMPLX_DIM, MATRIX_DIM2 * CMPLX_DIM + 1 - }; - - vecColBOffs0 = vldrwq_u32((uint32_t const *) offsetB0); - - pInB = (float32_t const *)pSrcB->pData; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - - vecA = vldrwq_f32(pInA0); - acc0 = vcmulq(vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(pInA1); - acc1 = vcmulq(vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - pOut[0 * CMPLX_DIM * MATRIX_DIM2 + 0] = acc0[0] + acc0[2]; - pOut[0 * CMPLX_DIM * MATRIX_DIM2 + 1] = acc0[1] + acc0[3]; - pOut[1 * CMPLX_DIM * MATRIX_DIM2 + 0] = acc1[0] + acc1[2]; - pOut[1 * CMPLX_DIM * MATRIX_DIM2 + 1] = acc1[1] + acc1[3]; - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - - vecA = vldrwq_f32(pInA0); - acc0 = vcmulq(vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(pInA1); - acc1 = vcmulq(vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - pOut[0 * CMPLX_DIM * MATRIX_DIM2 + 0] = acc0[0] + acc0[2]; - pOut[0 * CMPLX_DIM * MATRIX_DIM2 + 1] = acc0[1] + acc0[3]; - pOut[1 * CMPLX_DIM * MATRIX_DIM2 + 0] = acc1[0] + acc1[2]; - pOut[1 * CMPLX_DIM * MATRIX_DIM2 + 1] = acc1[1] + acc1[3]; - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - - -__STATIC_INLINE arm_status arm_mat_cmplx_mult_f32_3x3_mve( - const arm_matrix_instance_f32 * pSrcA, - const arm_matrix_instance_f32 * pSrcB, - arm_matrix_instance_f32 * pDst) -{ - float32_t const *pInB = 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 */ - uint32x4_t vecColBOffs0, vecColBOffs1; - float32_t *pInA0 = pInA; - float32_t *pInA1 = pInA0 + CMPLX_DIM * MATRIX_DIM3; - float32_t *pInA2 = pInA1 + CMPLX_DIM * MATRIX_DIM3; - f32x4_t acc0, acc1, acc2; - f32x4_t vecB, vecA; - /* enable predication to disable upper half complex vector element */ - mve_pred16_t p0 = vctp32q(CMPLX_DIM); - - static const uint32_t offsetB0[4] = { 0, 1, - MATRIX_DIM3 * CMPLX_DIM, MATRIX_DIM3 * CMPLX_DIM + 1 - }; - static const uint32_t offsetB1[4] = { 2 * MATRIX_DIM3 * CMPLX_DIM, 2 * MATRIX_DIM3 * CMPLX_DIM + 1, - INACTIVELANE, INACTIVELANE - }; - - vecColBOffs0 = vldrwq_u32((uint32_t const *) offsetB0); - vecColBOffs1 = vldrwq_u32((uint32_t const *) offsetB1); - - pInB = (float32_t const *)pSrcB->pData; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - - vecA = vldrwq_f32(pInA0); - acc0 = vcmulq(vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(pInA1); - acc1 = vcmulq(vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(pInA2); - acc2 = vcmulq(vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - - vecB = vldrwq_gather_shifted_offset_z(pInB, vecColBOffs1, p0); - - vecA = vldrwq_f32(&pInA0[4]); - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(&pInA1[4]); - acc1 = vcmlaq(acc1, vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(&pInA2[4]); - acc2 = vcmlaq(acc2, vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 0] = acc0[0] + acc0[2]; - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 1] = acc0[1] + acc0[3]; - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 0] = acc1[0] + acc1[2]; - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 1] = acc1[1] + acc1[3]; - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 0] = acc2[0] + acc2[2]; - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 1] = acc2[1] + acc2[3]; - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - - vecA = vldrwq_f32(pInA0); - acc0 = vcmulq(vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(pInA1); - acc1 = vcmulq(vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(pInA2); - acc2 = vcmulq(vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecB = vldrwq_gather_shifted_offset_z(pInB, vecColBOffs1, p0); - - vecA = vldrwq_f32(&pInA0[4]); - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(&pInA1[4]); - acc1 = vcmlaq(acc1, vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(&pInA2[4]); - acc2 = vcmlaq(acc2, vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 0] = acc0[0] + acc0[2]; - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 1] = acc0[1] + acc0[3]; - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 0] = acc1[0] + acc1[2]; - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 1] = acc1[1] + acc1[3]; - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 0] = acc2[0] + acc2[2]; - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 1] = acc2[1] + acc2[3]; - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - - vecA = vldrwq_f32(pInA0); - acc0 = vcmulq(vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(pInA1); - acc1 = vcmulq(vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(pInA2); - acc2 = vcmulq(vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecB = vldrwq_gather_shifted_offset_z(pInB, vecColBOffs1, p0); - - vecA = vldrwq_f32(&pInA0[4]); - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(&pInA1[4]); - acc1 = vcmlaq(acc1, vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(&pInA2[4]); - acc2 = vcmlaq(acc2, vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 0] = acc0[0] + acc0[2]; - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 1] = acc0[1] + acc0[3]; - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 0] = acc1[0] + acc1[2]; - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 1] = acc1[1] + acc1[3]; - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 0] = acc2[0] + acc2[2]; - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 1] = acc2[1] + acc2[3]; - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - - - -__STATIC_INLINE arm_status arm_mat_cmplx_mult_f32_4x4_mve( - const arm_matrix_instance_f32 * pSrcA, - const arm_matrix_instance_f32 * pSrcB, - arm_matrix_instance_f32 * pDst) -{ - float32_t const *pInB = 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 */ - uint32x4_t vecColBOffs0, vecColBOffs1; - float32_t *pInA0 = pInA; - float32_t *pInA1 = pInA0 + CMPLX_DIM * MATRIX_DIM4; - float32_t *pInA2 = pInA1 + CMPLX_DIM * MATRIX_DIM4; - float32_t *pInA3 = pInA2 + CMPLX_DIM * MATRIX_DIM4; - f32x4_t acc0, acc1, acc2, acc3; - f32x4_t vecB, vecA; - - static const uint32_t offsetB0[4] = { 0, 1, - MATRIX_DIM4 * CMPLX_DIM, MATRIX_DIM4 * CMPLX_DIM + 1 - }; - static const uint32_t offsetB1[4] = { 2 * MATRIX_DIM4 * CMPLX_DIM, 2 * MATRIX_DIM4 * CMPLX_DIM + 1, - 3 * MATRIX_DIM4 * CMPLX_DIM, 3 * MATRIX_DIM4 * CMPLX_DIM + 1 - }; - - vecColBOffs0 = vldrwq_u32((uint32_t const *) offsetB0); - vecColBOffs1 = vldrwq_u32((uint32_t const *) offsetB1); - - pInB = (float32_t const *)pSrcB->pData; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - - vecA = vldrwq_f32(pInA0); - acc0 = vcmulq(vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(pInA1); - acc1 = vcmulq(vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(pInA2); - acc2 = vcmulq(vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecA = vldrwq_f32(pInA3); - acc3 = vcmulq(vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_f32(&pInA0[4]); - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(&pInA1[4]); - acc1 = vcmlaq(acc1, vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(&pInA2[4]); - acc2 = vcmlaq(acc2, vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecA = vldrwq_f32(&pInA3[4]); - acc3 = vcmlaq(acc3, vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc0[0] + acc0[2]; - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc0[1] + acc0[3]; - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc1[0] + acc1[2]; - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc1[1] + acc1[3]; - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc2[0] + acc2[2]; - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc2[1] + acc2[3]; - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc3[0] + acc3[2]; - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc3[1] + acc3[3]; - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - - vecA = vldrwq_f32(pInA0); - acc0 = vcmulq(vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(pInA1); - acc1 = vcmulq(vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(pInA2); - acc2 = vcmulq(vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecA = vldrwq_f32(pInA3); - acc3 = vcmulq(vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_f32(&pInA0[4]); - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(&pInA1[4]); - acc1 = vcmlaq(acc1, vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(&pInA2[4]); - acc2 = vcmlaq(acc2, vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecA = vldrwq_f32(&pInA3[4]); - acc3 = vcmlaq(acc3, vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc0[0] + acc0[2]; - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc0[1] + acc0[3]; - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc1[0] + acc1[2]; - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc1[1] + acc1[3]; - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc2[0] + acc2[2]; - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc2[1] + acc2[3]; - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc3[0] + acc3[2]; - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc3[1] + acc3[3]; - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - - vecA = vldrwq_f32(pInA0); - acc0 = vcmulq(vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(pInA1); - acc1 = vcmulq(vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(pInA2); - acc2 = vcmulq(vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecA = vldrwq_f32(pInA3); - acc3 = vcmulq(vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_f32(&pInA0[4]); - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(&pInA1[4]); - acc1 = vcmlaq(acc1, vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(&pInA2[4]); - acc2 = vcmlaq(acc2, vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecA = vldrwq_f32(&pInA3[4]); - acc3 = vcmlaq(acc3, vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc0[0] + acc0[2]; - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc0[1] + acc0[3]; - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc1[0] + acc1[2]; - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc1[1] + acc1[3]; - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc2[0] + acc2[2]; - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc2[1] + acc2[3]; - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc3[0] + acc3[2]; - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc3[1] + acc3[3]; - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - - vecA = vldrwq_f32(pInA0); - acc0 = vcmulq(vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(pInA1); - acc1 = vcmulq(vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(pInA2); - acc2 = vcmulq(vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecA = vldrwq_f32(pInA3); - acc3 = vcmulq(vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_f32(&pInA0[4]); - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - vecA = vldrwq_f32(&pInA1[4]); - acc1 = vcmlaq(acc1, vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - - vecA = vldrwq_f32(&pInA2[4]); - acc2 = vcmlaq(acc2, vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - - vecA = vldrwq_f32(&pInA3[4]); - acc3 = vcmlaq(acc3, vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc0[0] + acc0[2]; - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc0[1] + acc0[3]; - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc1[0] + acc1[2]; - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc1[1] + acc1[3]; - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc2[0] + acc2[2]; - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc2[1] + acc2[3]; - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 0] = acc3[0] + acc3[2]; - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 1] = acc3[1] + acc3[3]; - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - -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 const *pInB = (float32_t const *) pSrcB->pData; /* input data matrix pointer B */ - float32_t const *pInA = (float32_t const *) 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 */ - uint16_t col, i = 0U, row = numRowsA, colCnt; /* loop counters */ - arm_status status; /* status of matrix multiplication */ - uint32x4_t vecOffs, vecColBOffs; - uint32_t blkCnt, rowCnt; /* loop counters */ - - #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 */ - - { - /* - * small squared matrix specialized routines - */ - if (numRowsA == numColsB && numColsB == numColsA) - { - if (numRowsA == 1) - { - pOut[0] = pInA[0] * pInB[0] - pInA[1] * pInB[1]; - pOut[1] = pInA[0] * pInB[1] + pInA[1] * pInB[0]; - return (ARM_MATH_SUCCESS); - } - else if (numRowsA == 2) - return arm_mat_cmplx_mult_f32_2x2_mve(pSrcA, pSrcB, pDst); - else if (numRowsA == 3) - return arm_mat_cmplx_mult_f32_3x3_mve(pSrcA, pSrcB, pDst); - else if (numRowsA == 4) - return arm_mat_cmplx_mult_f32_4x4_mve(pSrcA, pSrcB, pDst); - } - - vecColBOffs[0] = 0; - vecColBOffs[1] = 1; - vecColBOffs[2] = numColsB * CMPLX_DIM; - vecColBOffs[3] = (numColsB * CMPLX_DIM) + 1; - - /* - * The following loop performs the dot-product of each row in pSrcA with each column in pSrcB - */ - - /* - * row loop - */ - rowCnt = row >> 2; - while (rowCnt > 0u) - { - /* - * Output pointer is set to starting address of the row being processed - */ - px = pOut + i * CMPLX_DIM; - i = i + 4 * numColsB; - /* - * For every row wise process, the column loop counter is to be initiated - */ - col = numColsB; - /* - * For every row wise process, the pInB pointer is set - * to the starting address of the pSrcB data - */ - pInB = (float32_t const *) pSrcB->pData; - /* - * column loop - */ - while (col > 0u) - { - /* - * generate 4 columns elements - */ - /* - * Matrix A columns number of MAC operations are to be performed - */ - colCnt = numColsA; - - float32_t const *pSrcA0Vec, *pSrcA1Vec, *pSrcA2Vec, *pSrcA3Vec; - float32_t const *pInA0 = pInA; - float32_t const *pInA1 = pInA0 + numColsA * CMPLX_DIM; - float32_t const *pInA2 = pInA1 + numColsA * CMPLX_DIM; - float32_t const *pInA3 = pInA2 + numColsA * CMPLX_DIM; - f32x4_t acc0, acc1, acc2, acc3; - - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - acc2 = vdupq_n_f32(0.0f); - acc3 = vdupq_n_f32(0.0f); - - pSrcA0Vec = (float32_t const *) pInA0; - pSrcA1Vec = (float32_t const *) pInA1; - pSrcA2Vec = (float32_t const *) pInA2; - pSrcA3Vec = (float32_t const *) pInA3; - - vecOffs = vecColBOffs; - - /* - * process 1 x 4 block output - */ - blkCnt = (numColsA * CMPLX_DIM) >> 2; - while (blkCnt > 0U) - { - f32x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset(pInB, vecOffs); - /* - * move Matrix B read offsets, 4 rows down - */ - vecOffs = vecOffs + (uint32_t) (numColsB * 2 * CMPLX_DIM); - - vecA = vld1q(pSrcA0Vec); pSrcA0Vec += 4; - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - vecA = vld1q(pSrcA1Vec); pSrcA1Vec += 4; - acc1 = vcmlaq(acc1, vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - vecA = vld1q(pSrcA2Vec); pSrcA2Vec += 4; - acc2 = vcmlaq(acc2, vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - vecA = vld1q(pSrcA3Vec); pSrcA3Vec += 4; - acc3 = vcmlaq(acc3, vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - blkCnt--; - } - - - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = (numColsA * CMPLX_DIM) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset_z(pInB, vecOffs, p0); - /* - * move Matrix B read offsets, 4 rows down - */ - vecOffs = vecOffs + (uint32_t) (numColsB * 2 * CMPLX_DIM); - - vecA = vld1q(pSrcA0Vec); - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - vecA = vld1q(pSrcA1Vec); - acc1 = vcmlaq(acc1, vecA, vecB); - acc1 = vcmlaq_rot90(acc1, vecA, vecB); - vecA = vld1q(pSrcA2Vec); - acc2 = vcmlaq(acc2, vecA, vecB); - acc2 = vcmlaq_rot90(acc2, vecA, vecB); - vecA = vld1q(pSrcA3Vec); - acc3 = vcmlaq(acc3, vecA, vecB); - acc3 = vcmlaq_rot90(acc3, vecA, vecB); - - } - - px[0 * CMPLX_DIM * numColsB + 0] = acc0[0] + acc0[2]; - px[0 * CMPLX_DIM * numColsB + 1] = acc0[1] + acc0[3]; - px[1 * CMPLX_DIM * numColsB + 0] = acc1[0] + acc1[2]; - px[1 * CMPLX_DIM * numColsB + 1] = acc1[1] + acc1[3]; - px[2 * CMPLX_DIM * numColsB + 0] = acc2[0] + acc2[2]; - px[2 * CMPLX_DIM * numColsB + 1] = acc2[1] + acc2[3]; - px[3 * CMPLX_DIM * numColsB + 0] = acc3[0] + acc3[2]; - px[3 * CMPLX_DIM * numColsB + 1] = acc3[1] + acc3[3]; - px += CMPLX_DIM; - /* - * Decrement the column loop counter - */ - col--; - /* - * Update the pointer pInB to point to the starting address of the next column - */ - pInB = (float32_t const *) pSrcB->pData + (numColsB - col) * CMPLX_DIM; - } - - /* - * Update the pointer pInA to point to the starting address of the next row - */ - pInA += (numColsA * 4) * CMPLX_DIM; - /* - * Decrement the row loop counter - */ - rowCnt --; - - } - - rowCnt = row & 3; - while (rowCnt > 0u) - { - /* - * Output pointer is set to starting address of the row being processed - */ - px = pOut + i * CMPLX_DIM; - i = i + numColsB; - /* - * For every row wise process, the column loop counter is to be initiated - */ - col = numColsB; - /* - * For every row wise process, the pInB pointer is set - * to the starting address of the pSrcB data - */ - pInB = (float32_t const *) pSrcB->pData; - /* - * column loop - */ - while (col > 0u) - { - /* - * generate 4 columns elements - */ - /* - * Matrix A columns number of MAC operations are to be performed - */ - colCnt = numColsA; - - float32_t const *pSrcA0Vec; - float32_t const *pInA0 = pInA; - f32x4_t acc0; - - acc0 = vdupq_n_f32(0.0f); - - pSrcA0Vec = (float32_t const *) pInA0; - - vecOffs = vecColBOffs; - - /* - * process 1 x 4 block output - */ - blkCnt = (numColsA * CMPLX_DIM) >> 2; - while (blkCnt > 0U) - { - f32x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset(pInB, vecOffs); - /* - * move Matrix B read offsets, 4 rows down - */ - vecOffs = vecOffs + (uint32_t) (numColsB * 2 * CMPLX_DIM); - - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - - blkCnt--; - } - - - /* - * tail - */ - blkCnt = (numColsA * CMPLX_DIM) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset_z(pInB, vecOffs, p0); - - vecA = vld1q(pSrcA0Vec); - acc0 = vcmlaq(acc0, vecA, vecB); - acc0 = vcmlaq_rot90(acc0, vecA, vecB); - - } - - px[0] = acc0[0] + acc0[2]; - px[1] = acc0[1] + acc0[3]; - - px += CMPLX_DIM; - /* - * Decrement the column loop counter - */ - col--; - /* - * Update the pointer pInB to point to the starting address of the next column - */ - pInB = (float32_t const *) pSrcB->pData + (numColsB - col) * CMPLX_DIM; - } - - /* - * Update the pointer pInA to point to the starting address of the next row - */ - pInA += numColsA * CMPLX_DIM; - rowCnt--; - } - - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -} - -#else -#if defined(ARM_MATH_NEON) -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 a1, a1B,b1, b1B, c1, d1; - float32_t sumReal2, sumImag2; /* accumulator */ - - - float32x4x2_t a0V, a1V; - float32x4_t accR0,accI0, accR1,accI1,tempR, tempI; - float32x2_t accum = vdup_n_f32(0); - float32_t *pIn1B = pSrcA->pData; - - uint16_t col, i = 0U, j, rowCnt, row = numRowsA, colCnt; /* loop counters */ - arm_status status; /* status of matrix multiplication */ - float32_t sumReal1B, sumImag1B; - float32_t sumReal2B, sumImag2B; - float32_t *pxB; - -#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 */ - - rowCnt = row >> 1; - - /* Row loop */ - while (rowCnt > 0U) - { - /* Output pointer is set to starting address of the row being processed */ - px = pOut + 2 * i; - pxB = px + 2 * numColsB; - - /* 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 */ - while (col > 0U) - { - /* Set the variable sum, that acts as accumulator, to zero */ - sumReal1 = 0.0f; - sumImag1 = 0.0f; - sumReal1B = 0.0f; - sumImag1B = 0.0f; - - sumReal2 = 0.0f; - sumImag2 = 0.0f; - sumReal2B = 0.0f; - sumImag2B = 0.0f; - - /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ - pIn1 = pInA; - pIn1B = pIn1 + 2*numColsA; - - accR0 = vdupq_n_f32(0.0); - accI0 = vdupq_n_f32(0.0); - accR1 = vdupq_n_f32(0.0); - accI1 = vdupq_n_f32(0.0); - - /* Compute 4 MACs simultaneously. */ - colCnt = numColsA >> 2; - - /* Matrix multiplication */ - while (colCnt > 0U) - { - /* Reading real part of complex matrix A */ - a0V = vld2q_f32(pIn1); // load & separate real/imag pSrcA (de-interleave 2) - a1V = vld2q_f32(pIn1B); // load & separate real/imag pSrcA (de-interleave 2) - - pIn1 += 8; - pIn1B += 8; - - tempR = vsetq_lane_f32(*pIn2,tempR,0); - tempI = vsetq_lane_f32(*(pIn2 + 1U),tempI,0); - pIn2 += 2 * numColsB; - - - tempR = vsetq_lane_f32(*pIn2,tempR,1); - tempI = vsetq_lane_f32(*(pIn2 + 1U),tempI,1); - pIn2 += 2 * numColsB; - - tempR = vsetq_lane_f32(*pIn2,tempR,2); - tempI = vsetq_lane_f32(*(pIn2 + 1U),tempI,2); - pIn2 += 2 * numColsB; - - tempR = vsetq_lane_f32(*pIn2,tempR,3); - tempI = vsetq_lane_f32(*(pIn2 + 1U),tempI,3); - pIn2 += 2 * numColsB; - - accR0 = vmlaq_f32(accR0,a0V.val[0],tempR); - accR0 = vmlsq_f32(accR0,a0V.val[1],tempI); - - accI0 = vmlaq_f32(accI0,a0V.val[1],tempR); - accI0 = vmlaq_f32(accI0,a0V.val[0],tempI); - - accR1 = vmlaq_f32(accR1,a1V.val[0],tempR); - accR1 = vmlsq_f32(accR1,a1V.val[1],tempI); - - accI1 = vmlaq_f32(accI1,a1V.val[1],tempR); - accI1 = vmlaq_f32(accI1,a1V.val[0],tempI); - - /* Decrement the loop count */ - colCnt--; - } - - accum = vpadd_f32(vget_low_f32(accR0), vget_high_f32(accR0)); - sumReal1 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(accI0), vget_high_f32(accI0)); - sumImag1 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(accR1), vget_high_f32(accR1)); - sumReal1B += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(accI1), vget_high_f32(accI1)); - sumImag1B += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. - ** No loop unrolling is used. */ - colCnt = numColsA & 3; - - 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; - a1B = *pIn1B; - - c1 = *pIn2; - - b1 = *(pIn1 + 1U); - b1B = *(pIn1B + 1U); - - d1 = *(pIn2 + 1U); - - sumReal1 += a1 * c1; - sumImag1 += b1 * c1; - - sumReal1B += a1B * c1; - sumImag1B += b1B * c1; - - pIn1 += 2U; - pIn1B += 2U; - pIn2 += 2 * numColsB; - - sumReal2 -= b1 * d1; - sumImag2 += a1 * d1; - - sumReal2B -= b1B * d1; - sumImag2B += a1B * d1; - - /* Decrement the loop counter */ - colCnt--; - } - - sumReal1 += sumReal2; - sumImag1 += sumImag2; - - sumReal1B += sumReal2B; - sumImag1B += sumImag2B; - - /* Store the result in the destination buffer */ - *px++ = sumReal1; - *px++ = sumImag1; - *pxB++ = sumReal1B; - *pxB++ = sumImag1B; - - /* 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--; - } - - /* Update the pointer pInA to point to the starting address of the next 2 row */ - i = i + 2*numColsB; - pInA = pInA + 4 * numColsA; - - /* Decrement the row loop counter */ - rowCnt--; - } - - rowCnt = row & 1; - while (rowCnt > 0U) - { - /* 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 */ - while (col > 0U) - { - /* 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; - - accR0 = vdupq_n_f32(0.0); - accI0 = vdupq_n_f32(0.0); - - /* Compute 4 MACs simultaneously. */ - colCnt = numColsA >> 2; - - /* Matrix multiplication */ - while (colCnt > 0U) - { - /* Reading real part of complex matrix A */ - a0V = vld2q_f32(pIn1); // load & separate real/imag pSrcA (de-interleave 2) - pIn1 += 8; - - tempR = vsetq_lane_f32(*pIn2,tempR,0); - tempI = vsetq_lane_f32(*(pIn2 + 1U),tempI,0); - pIn2 += 2 * numColsB; - - tempR = vsetq_lane_f32(*pIn2,tempR,1); - tempI = vsetq_lane_f32(*(pIn2 + 1U),tempI,1); - pIn2 += 2 * numColsB; - - tempR = vsetq_lane_f32(*pIn2,tempR,2); - tempI = vsetq_lane_f32(*(pIn2 + 1U),tempI,2); - pIn2 += 2 * numColsB; - - tempR = vsetq_lane_f32(*pIn2,tempR,3); - tempI = vsetq_lane_f32(*(pIn2 + 1U),tempI,3); - pIn2 += 2 * numColsB; - - accR0 = vmlaq_f32(accR0,a0V.val[0],tempR); - accR0 = vmlsq_f32(accR0,a0V.val[1],tempI); - - accI0 = vmlaq_f32(accI0,a0V.val[1],tempR); - accI0 = vmlaq_f32(accI0,a0V.val[0],tempI); - - /* Decrement the loop count */ - colCnt--; - } - - accum = vpadd_f32(vget_low_f32(accR0), vget_high_f32(accR0)); - sumReal1 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(accI0), vget_high_f32(accI0)); - sumImag1 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. - ** No loop unrolling is used. */ - colCnt = numColsA & 3; - - 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--; - - } - - /* 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 */ - rowCnt--; - - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#else -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 sumReal, sumImag; /* Accumulator */ - float32_t a1, b1, c1, d1; - uint32_t col, i = 0U, j, row = numRowsA, colCnt; /* loop counters */ - arm_status status; /* status of matrix multiplication */ - -#if defined (ARM_MATH_LOOPUNROLL) - float32_t a0, b0, c0, d0; -#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 /* #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 */ - sumReal = 0.0f; - sumImag = 0.0f; - - /* Initiate pointer pIn1 to point to starting address of column being processed */ - pIn1 = pInA; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Apply loop unrolling and compute 4 MACs simultaneously. */ - colCnt = numColsA >> 2U; - - /* 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 */ - sumReal += a0 * c0; - sumImag += b0 * c0; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= b0 * d0; - sumImag += 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 */ - sumReal += a1 * c1; - sumImag += b1 * c1; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= b1 * d1; - sumImag += a1 * d1; - - a0 = *(pIn1 ); - c0 = *(pIn2 ); - b0 = *(pIn1 + 1U); - d0 = *(pIn2 + 1U); - - /* Multiply and Accumlates */ - sumReal += a0 * c0; - sumImag += b0 * c0; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= b0 * d0; - sumImag += 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 */ - sumReal += a1 * c1; - sumImag += b1 * c1; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= b1 * d1; - sumImag += a1 * d1; - - /* Decrement 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; - -#else - - /* Initialize blkCnt with number of samples */ - colCnt = numColsA; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 */ - sumReal += a1 * c1; - sumImag += b1 * c1; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= b1 * d1; - sumImag += a1 * d1; - - /* Decrement loop counter */ - colCnt--; - } - - /* Store result in destination buffer */ - *px++ = sumReal; - *px++ = sumImag; - - /* Update pointer pIn2 to point to starting address of next column */ - j++; - pIn2 = pSrcB->pData + 2U * j; - - /* Decrement column loop counter */ - col--; - - } while (col > 0U); - - /* Update pointer pInA to point to starting address of next row */ - i = i + numColsB; - pInA = pInA + 2 * numColsA; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of MatrixMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c deleted file mode 100644 index 104d4c3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c +++ /dev/null @@ -1,595 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cmplx_mat_mult_q15.c - * Description: Q15 complex matrix multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - -/** - @addtogroup CmplxMatrixMult - @{ - */ - -/** - @brief Q15 Complex matrix multiplication. - @param[in] pSrcA points to first input complex matrix structure - @param[in] pSrcB points to second input complex matrix structure - @param[out] pDst points to output complex matrix structure - @param[in] pScratch points to an array for storing intermediate results - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Conditions for optimum performance - Input, output and state buffers should be aligned by 32-bit - - @par Scaling and Overflow Behavior - The function is implemented using an internal 64-bit 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. - */ -#if defined(ARM_MATH_MVEI) - -#define MVE_ASRL_SAT16(acc, shift) ((sqrshrl_sat48(acc, -(32-shift)) >> 32) & 0xffffffff) - -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) -{ - q15_t const *pInA = (q15_t const *) pSrcA->pData; /* input data matrix pointer A of Q15 type */ - q15_t const *pInB = (q15_t const *) pSrcB->pData; /* input data matrix pointer B of Q15 type */ - q15_t const *pInB2; - q15_t *px; /* Temporary output data matrix pointer */ - uint32_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ - uint32_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ - uint32_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ - uint32_t numRowsB = pSrcB->numRows; /* number of rows of input matrix A */ - uint32_t col, i = 0u, j, row = numRowsB; /* loop counters */ - uint32_t blkCnt; /* loop counters */ - uint16x8_t vecOffs, vecColBOffs; - arm_status status; /* Status of matrix multiplication */ - (void)pScratch; - -#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 */ - - { - vecColBOffs[0] = 0; - vecColBOffs[1] = 1; - vecColBOffs[2] = numColsB * CMPLX_DIM; - vecColBOffs[3] = (numColsB * CMPLX_DIM) + 1; - vecColBOffs[4] = 2 * numColsB * CMPLX_DIM; - vecColBOffs[5] = 2 * (numColsB * CMPLX_DIM) + 1; - vecColBOffs[6] = 3 * numColsB * CMPLX_DIM; - vecColBOffs[7] = 3 * (numColsB * CMPLX_DIM) + 1; - - /* - * Reset the variables for the usage in the following multiplication process - */ - i = 0; - row = numRowsA; - px = pDst->pData; - - /* - * The following loop performs the dot-product of each row in pSrcA with each column in pSrcB - */ - - /* - * row loop - */ - while (row > 0u) - { - /* - * For every row wise process, the column loop counter is to be initiated - */ - col = numColsB >> 1; - j = 0; - /* - * column loop - */ - while (col > 0u) - { - q15_t const *pSrcAVec; - //, *pSrcBVec, *pSrcB2Vec; - q15x8_t vecA, vecB, vecB2; - q63_t acc0, acc1, acc2, acc3; - - /* - * Initiate the pointer pIn1 to point to the starting address of the column being processed - */ - pInA = pSrcA->pData + i; - pInB = pSrcB->pData + j; - pInB2 = pInB + CMPLX_DIM; - - j += 2 * CMPLX_DIM; - /* - * Decrement the column loop counter - */ - col--; - - /* - * Initiate the pointers - * - current Matrix A rows - * - 2 x consecutive Matrix B' rows (j increment is 2 x numRowsB) - */ - pSrcAVec = (q15_t const *) pInA; - - acc0 = 0LL; - acc1 = 0LL; - acc2 = 0LL; - acc3 = 0LL; - - vecOffs = vecColBOffs; - - - blkCnt = (numColsA * CMPLX_DIM) >> 3; - while (blkCnt > 0U) - { - vecA = vld1q(pSrcAVec); - pSrcAVec += 8; - vecB = vldrhq_gather_shifted_offset(pInB, vecOffs); - - acc0 = vmlsldavaq(acc0, vecA, vecB); - acc1 = vmlaldavaxq(acc1, vecA, vecB); - vecB2 = vldrhq_gather_shifted_offset(pInB2, vecOffs); - /* - * move Matrix B read offsets, 4 rows down - */ - vecOffs = vaddq(vecOffs, (uint16_t) (numColsB * 4 * CMPLX_DIM)); - - acc2 = vmlsldavaq(acc2, vecA, vecB2); - acc3 = vmlaldavaxq(acc3, vecA, vecB2); - - blkCnt--; - } - - /* - * tail - */ - blkCnt = (numColsA * CMPLX_DIM) & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecB = vldrhq_gather_shifted_offset(pInB, vecOffs); - - vecA = vldrhq_z_s16(pSrcAVec, p0); - - acc0 = vmlsldavaq(acc0, vecA, vecB); - acc1 = vmlaldavaxq(acc1, vecA, vecB); - vecB2 = vldrhq_gather_shifted_offset(pInB2, vecOffs); - - /* - * move Matrix B read offsets, 4 rows down - */ - vecOffs = vaddq(vecOffs, (uint16_t) (numColsB * 4 * CMPLX_DIM)); - - acc2 = vmlsldavaq(acc2, vecA, vecB2); - acc3 = vmlaldavaxq(acc3, vecA, vecB2); - - } - /* - * Convert to 1.15, Store the results (1 x 2 block) in the destination buffer - */ - *px++ = (q15_t)MVE_ASRL_SAT16(acc0, 15); - *px++ = (q15_t)MVE_ASRL_SAT16(acc1, 15); - *px++ = (q15_t)MVE_ASRL_SAT16(acc2, 15); - *px++ = (q15_t)MVE_ASRL_SAT16(acc3, 15); - } - - col = numColsB & 1; - /* - * column loop - */ - while (col > 0u) - { - - q15_t const *pSrcAVec; - //, *pSrcBVec, *pSrcB2Vec; - q15x8_t vecA, vecB; - q63_t acc0, acc1; - - /* - * Initiate the pointer pIn1 to point to the starting address of the column being processed - */ - pInA = pSrcA->pData + i; - pInB = pSrcB->pData + j; - - j += CMPLX_DIM; - /* - * Decrement the column loop counter - */ - col--; - - /* - * Initiate the pointers - * - current Matrix A rows - * - 2 x consecutive Matrix B' rows (j increment is 2 x numRowsB) - */ - pSrcAVec = (q15_t const *) pInA; - - acc0 = 0LL; - acc1 = 0LL; - - - vecOffs = vecColBOffs; - - - - blkCnt = (numColsA * CMPLX_DIM) >> 3; - while (blkCnt > 0U) - { - vecA = vld1q(pSrcAVec); - pSrcAVec += 8; - vecB = vldrhq_gather_shifted_offset(pInB, vecOffs); - - acc0 = vmlsldavaq(acc0, vecA, vecB); - acc1 = vmlaldavaxq(acc1, vecA, vecB); - /* - * move Matrix B read offsets, 4 rows down - */ - vecOffs = vaddq(vecOffs, (uint16_t) (numColsB * 4 * CMPLX_DIM)); - - blkCnt--; - } - - /* - * tail - */ - blkCnt = (numColsA * CMPLX_DIM) & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecB = vldrhq_gather_shifted_offset(pInB, vecOffs); - vecA = vldrhq_z_s16(pSrcAVec, p0); - - acc0 = vmlsldavaq(acc0, vecA, vecB); - acc1 = vmlaldavaxq(acc1, vecA, vecB); - - } - /* - * Convert to 1.15, Store the results (1 x 2 block) in the destination buffer - */ - *px++ = (q15_t)MVE_ASRL_SAT16(acc0, 15); - *px++ = (q15_t)MVE_ASRL_SAT16(acc1, 15); - - } - - i = i + numColsA * CMPLX_DIM; - - /* - * Decrement the row loop counter - */ - row--; - } - - - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#else -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) -{ - 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 */ - q63_t sumReal, sumImag; /* accumulator */ - uint32_t col, i = 0U, row = numRowsB, colCnt; /* Loop counters */ - arm_status status; /* Status of matrix multiplication */ - -#if defined (ARM_MATH_DSP) - q31_t prod1, prod2; - q31_t pSourceA, pSourceB; -#else - q15_t a, b, c, d; -#endif /* #if defined (ARM_MATH_DSP) */ - -#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 - { - /* The pointer px is set to starting address of column being processed */ - px = pSrcBT + i; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Apply loop unrolling and exchange the columns with row elements */ - col = numColsB >> 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 (col > 0U) - { - /* Read two elements from row */ - write_q15x2 (px, read_q15x2_ia (&pInB)); - - /* Update pointer px to point to next row of transposed matrix */ - px += numRowsB * 2; - - /* Read two elements from row */ - write_q15x2 (px, read_q15x2_ia (&pInB)); - - /* Update pointer px to point to next row of transposed matrix */ - px += numRowsB * 2; - - /* Read two elements from row */ - write_q15x2 (px, read_q15x2_ia (&pInB)); - - /* Update pointer px to point to next row of transposed matrix */ - px += numRowsB * 2; - - /* Read two elements from row */ - write_q15x2 (px, read_q15x2_ia (&pInB)); - - /* Update pointer px to point to next row of transposed matrix */ - px += numRowsB * 2; - - /* Decrement 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; - -#else - - /* Initialize blkCnt with number of samples */ - col = numColsB; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (col > 0U) - { - /* Read two elements from row */ - write_q15x2 (px, read_q15x2_ia (&pInB)); - - /* Update pointer px to point to next row of transposed matrix */ - px += numRowsB * 2; - - /* Decrement column loop counter */ - col--; - } - - i = i + 2U; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - - /* Reset variables for usage in 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, column loop counter is to be initiated */ - col = numColsB; - - /* For every row wise process, pIn2 pointer is set to starting address of transposed pSrcB data */ - pInB = pSrcBT; - - /* column loop */ - do - { - /* Set variable sum, that acts as accumulator, to zero */ - sumReal = 0; - sumImag = 0; - - /* Initiate pointer pInA to point to starting address of column being processed */ - pInA = pSrcA->pData + i * 2; - - /* Apply loop unrolling and compute 2 MACs simultaneously. */ - colCnt = numColsA >> 1U; - - /* 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) */ - -#if defined (ARM_MATH_DSP) - - /* read real and imag values from pSrcA and pSrcB buffer */ - pSourceA = read_q15x2_ia ((q15_t **) &pInA); - pSourceB = read_q15x2_ia ((q15_t **) &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 = read_q15x2_ia ((q15_t **) &pInA); - pSourceB = read_q15x2_ia ((q15_t **) &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; - -#else /* #if defined (ARM_MATH_DSP) */ - - /* 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; - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement 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) */ - -#if defined (ARM_MATH_DSP) - /* read real and imag values from pSrcA and pSrcB buffer */ - pSourceA = read_q15x2_ia ((q15_t **) &pInA); - pSourceB = read_q15x2_ia ((q15_t **) &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; - -#else /* #if defined (ARM_MATH_DSP) */ - - /* 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; - -#endif /* #if defined (ARM_MATH_DSP) */ - - } - - /* Saturate and store result in destination buffer */ - *px++ = (q15_t) (__SSAT(sumReal >> 15, 16)); - *px++ = (q15_t) (__SSAT(sumImag >> 15, 16)); - - /* Decrement column loop counter */ - col--; - - } while (col > 0U); - - i = i + numColsA; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c deleted file mode 100644 index a7b13a8..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c +++ /dev/null @@ -1,1063 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_cmplx_mult_q31.c - * Description: Floating-point matrix multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - -/** - @addtogroup CmplxMatrixMult - @{ - */ - -/** - @brief Q31 Complex matrix multiplication. - @param[in] pSrcA points to first input complex matrix structure - @param[in] pSrcB points to second input complex matrix structure - @param[out] pDst points to output complex matrix structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @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. 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. - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -#define MATRIX_DIM2 2 -#define MATRIX_DIM3 3 -#define MATRIX_DIM4 4 - -__STATIC_INLINE arm_status arm_mat_cmplx_mult_q31_2x2_mve( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst) -{ - q31_t const *pInB = pSrcB->pData; /* input data matrix pointer B */ - q31_t const *pInA = pSrcA->pData; /* input data matrix pointer A */ - q31_t *pOut = pDst->pData; /* output data matrix pointer */ - uint32x4_t vecColBOffs0; - q31_t const *pInA0 = pInA; - q31_t const *pInA1 = pInA0 + CMPLX_DIM * MATRIX_DIM2; - q63_t acc0, acc1, acc2, acc3; - q31x4_t vecB, vecA; - - static const uint32_t offsetB0[4] = { - 0, 1, - MATRIX_DIM2 * CMPLX_DIM, MATRIX_DIM2 * CMPLX_DIM + 1 - }; - - vecColBOffs0 = vldrwq_u32(offsetB0); - - pInB = (q31_t const *) pSrcB->pData; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - vecA = vldrwq_s32(pInA0); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA1); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - pOut[0 * CMPLX_DIM * MATRIX_DIM2 + 0] = (q31_t) asrl(acc0, 31); - pOut[0 * CMPLX_DIM * MATRIX_DIM2 + 1] = (q31_t) asrl(acc1, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM2 + 0] = (q31_t) asrl(acc2, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM2 + 1] = (q31_t) asrl(acc3, 31); - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - vecA = vldrwq_s32(pInA0); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA1); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - pOut += CMPLX_DIM; - - pOut[0 * CMPLX_DIM * MATRIX_DIM2 + 0] = (q31_t) asrl(acc0, 31); - pOut[0 * CMPLX_DIM * MATRIX_DIM2 + 1] = (q31_t) asrl(acc1, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM2 + 0] = (q31_t) asrl(acc2, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM2 + 1] = (q31_t) asrl(acc3, 31); - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - -__STATIC_INLINE arm_status arm_mat_cmplx_mult_q31_3x3_mve( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst) -{ - q31_t const *pInB = pSrcB->pData; /* input data matrix pointer B */ - q31_t const *pInA = pSrcA->pData; /* input data matrix pointer A */ - q31_t *pOut = pDst->pData; /* output data matrix pointer */ - uint32x4_t vecColBOffs0, vecColBOffs1; - q31_t const *pInA0 = pInA; - q31_t const *pInA1 = pInA0 + CMPLX_DIM * MATRIX_DIM3; - q31_t const *pInA2 = pInA1 + CMPLX_DIM * MATRIX_DIM3; - q63_t acc0, acc1, acc2, acc3; - q31x4_t vecB, vecB1, vecA; - /* - * enable predication to disable upper half complex vector element - */ - mve_pred16_t p0 = vctp32q(CMPLX_DIM); - - static const uint32_t offsetB0[4] = { - 0, 1, - MATRIX_DIM3 * CMPLX_DIM, MATRIX_DIM3 * CMPLX_DIM + 1 - }; - static const uint32_t offsetB1[4] = { - 2 * MATRIX_DIM3 * CMPLX_DIM, 2 * MATRIX_DIM3 * CMPLX_DIM + 1, - INACTIVELANE, INACTIVELANE - }; - - vecColBOffs0 = vldrwq_u32(offsetB0); - vecColBOffs1 = vldrwq_u32(offsetB1); - - pInB = (q31_t const *) pSrcB->pData; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - vecB1 = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_s32(pInA0); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA1); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_z_s32(&pInA0[4], p0); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_z_s32(&pInA1[4], p0); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 0] = (q31_t) asrl(acc0, 31); - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 1] = (q31_t) asrl(acc1, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 0] = (q31_t) asrl(acc2, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 1] = (q31_t) asrl(acc3, 31); - - vecA = vldrwq_s32(pInA2); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_z_s32(&pInA2[4], p0); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 0] = (q31_t) asrl(acc0, 31); - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 1] = (q31_t) asrl(acc1, 31); - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - vecB1 = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_s32(pInA0); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA1); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_z_s32(&pInA0[4], p0); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_z_s32(&pInA1[4], p0); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 0] = (q31_t) asrl(acc0, 31); - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 1] = (q31_t) asrl(acc1, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 0] = (q31_t) asrl(acc2, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 1] = (q31_t) asrl(acc3, 31); - - vecA = vldrwq_s32(pInA2); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_z_s32(&pInA2[4], p0); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 0] = (q31_t) asrl(acc0, 31); - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 1] = (q31_t) asrl(acc1, 31); - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - vecB1 = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_s32(pInA0); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA1); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_z_s32(&pInA0[4], p0); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_z_s32(&pInA1[4], p0); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 0] = (q31_t) asrl(acc0, 31); - pOut[0 * CMPLX_DIM * MATRIX_DIM3 + 1] = (q31_t) asrl(acc1, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 0] = (q31_t) asrl(acc2, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM3 + 1] = (q31_t) asrl(acc3, 31); - - vecA = vldrwq_s32(pInA2); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_z_s32(&pInA2[4], p0); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 0] = (q31_t) asrl(acc0, 31); - pOut[2 * CMPLX_DIM * MATRIX_DIM3 + 1] = (q31_t) asrl(acc1, 31); - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - -__STATIC_INLINE arm_status arm_mat_cmplx_mult_q31_4x4_mve( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst) -{ - q31_t const *pInB = pSrcB->pData; /* input data matrix pointer B */ - q31_t const *pInA = pSrcA->pData; /* input data matrix pointer A */ - q31_t *pOut = pDst->pData; /* output data matrix pointer */ - uint32x4_t vecColBOffs0, vecColBOffs1; - q31_t const *pInA0 = pInA; - q31_t const *pInA1 = pInA0 + CMPLX_DIM * MATRIX_DIM4; - q31_t const *pInA2 = pInA1 + CMPLX_DIM * MATRIX_DIM4; - q31_t const *pInA3 = pInA2 + CMPLX_DIM * MATRIX_DIM4; - q63_t acc0, acc1, acc2, acc3; - q31x4_t vecB, vecB1, vecA; - - static const uint32_t offsetB0[4] = { - 0, 1, - MATRIX_DIM4 * CMPLX_DIM, MATRIX_DIM4 * CMPLX_DIM + 1 - }; - static const uint32_t offsetB1[4] = { - 2 * MATRIX_DIM4 * CMPLX_DIM, 2 * MATRIX_DIM4 * CMPLX_DIM + 1, - 3 * MATRIX_DIM4 * CMPLX_DIM, 3 * MATRIX_DIM4 * CMPLX_DIM + 1 - }; - - vecColBOffs0 = vldrwq_u32(offsetB0); - vecColBOffs1 = vldrwq_u32(offsetB1); - - pInB = (q31_t const *) pSrcB->pData; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - vecB1 = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_s32(pInA0); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA1); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(&pInA0[4]); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_s32(&pInA1[4]); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc0, 31); - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc1, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc2, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc3, 31); - - vecA = vldrwq_s32(pInA2); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA3); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(&pInA2[4]); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_s32(&pInA3[4]); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc0, 31); - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc1, 31); - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc2, 31); - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc3, 31); - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - vecB1 = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_s32(pInA0); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA1); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(&pInA0[4]); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_s32(&pInA1[4]); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc0, 31); - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc1, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc2, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc3, 31); - - vecA = vldrwq_s32(pInA2); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA3); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(&pInA2[4]); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_s32(&pInA3[4]); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc0, 31); - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc1, 31); - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc2, 31); - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc3, 31); - pOut += CMPLX_DIM; - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - vecB1 = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_s32(pInA0); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA1); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(&pInA0[4]); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_s32(&pInA1[4]); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc0, 31); - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc1, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc2, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc3, 31); - - vecA = vldrwq_s32(pInA2); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA3); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(&pInA2[4]); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_s32(&pInA3[4]); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc0, 31); - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc1, 31); - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc2, 31); - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc3, 31); - pOut += CMPLX_DIM; - - /* - * move to next B column - */ - pInB = pInB + CMPLX_DIM; - - vecB = vldrwq_gather_shifted_offset(pInB, vecColBOffs0); - vecB1 = vldrwq_gather_shifted_offset(pInB, vecColBOffs1); - - vecA = vldrwq_s32(pInA0); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA1); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(&pInA0[4]); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_s32(&pInA1[4]); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc0, 31); - pOut[0 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc1, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc2, 31); - pOut[1 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc3, 31); - - vecA = vldrwq_s32(pInA2); - acc0 = vmlsldavq_s32(vecA, vecB); - acc1 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(pInA3); - acc2 = vmlsldavq_s32(vecA, vecB); - acc3 = vmlaldavxq_s32(vecA, vecB); - - vecA = vldrwq_s32(&pInA2[4]); - acc0 = vmlsldavaq_s32(acc0, vecA, vecB1); - acc1 = vmlaldavaxq_s32(acc1, vecA, vecB1); - - vecA = vldrwq_s32(&pInA3[4]); - acc2 = vmlsldavaq_s32(acc2, vecA, vecB1); - acc3 = vmlaldavaxq_s32(acc3, vecA, vecB1); - - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc0, 31); - pOut[2 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc1, 31); - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 0] = (q31_t) asrl(acc2, 31); - pOut[3 * CMPLX_DIM * MATRIX_DIM4 + 1] = (q31_t) asrl(acc3, 31); - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - - -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 const *pInB = (q31_t const *) pSrcB->pData; /* input data matrix pointer B */ - q31_t const *pInA = (q31_t const *) 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 */ - uint16_t col, i = 0U, row = numRowsA, colCnt; /* loop counters */ - arm_status status; /* status of matrix multiplication */ - uint32x4_t vecOffs, vecColBOffs; - uint32_t blkCnt, rowCnt; /* loop counters */ - - #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 */ - - { - /* - * small squared matrix specialized routines - */ - if (numRowsA == numColsB && numColsB == numColsA) - { - if (numRowsA == 1) - { - q63_t sumReal = (q63_t) pInA[0] * pInB[0]; - sumReal -= (q63_t) pInA[1] * pInB[1]; - - q63_t sumImag = (q63_t) pInA[0] * pInB[1]; - sumImag += (q63_t) pInA[1] * pInB[0]; - - /* Store result in destination buffer */ - pOut[0] = (q31_t) clip_q63_to_q31(sumReal >> 31); - pOut[1] = (q31_t) clip_q63_to_q31(sumImag >> 31); - return (ARM_MATH_SUCCESS); - } - else if (numRowsA == 2) - return arm_mat_cmplx_mult_q31_2x2_mve(pSrcA, pSrcB, pDst); - else if (numRowsA == 3) - return arm_mat_cmplx_mult_q31_3x3_mve(pSrcA, pSrcB, pDst); - else if (numRowsA == 4) - return arm_mat_cmplx_mult_q31_4x4_mve(pSrcA, pSrcB, pDst); - } - - vecColBOffs[0] = 0; - vecColBOffs[1] = 1; - vecColBOffs[2] = numColsB * CMPLX_DIM; - vecColBOffs[3] = (numColsB * CMPLX_DIM) + 1; - - /* - * The following loop performs the dot-product of each row in pSrcA with each column in pSrcB - */ - - /* - * row loop - */ - rowCnt = row >> 1; - while (rowCnt > 0u) - { - /* - * Output pointer is set to starting address of the row being processed - */ - px = pOut + i * CMPLX_DIM; - i = i + 2 * numColsB; - /* - * For every row wise process, the column loop counter is to be initiated - */ - col = numColsB; - /* - * For every row wise process, the pInB pointer is set - * to the starting address of the pSrcB data - */ - pInB = (q31_t const *) pSrcB->pData; - /* - * column loop - */ - while (col > 0u) - { - /* - * generate 4 columns elements - */ - /* - * Matrix A columns number of MAC operations are to be performed - */ - colCnt = numColsA; - - q31_t const *pSrcA0Vec, *pSrcA1Vec; - q31_t const *pInA0 = pInA; - q31_t const *pInA1 = pInA0 + numColsA * CMPLX_DIM; - q63_t acc0, acc1, acc2, acc3; - - acc0 = 0LL; - acc1 = 0LL; - acc2 = 0LL; - acc3 = 0LL; - - pSrcA0Vec = (q31_t const *) pInA0; - pSrcA1Vec = (q31_t const *) pInA1; - - - vecOffs = vecColBOffs; - - /* - * process 1 x 2 block output - */ - blkCnt = (numColsA * CMPLX_DIM) >> 2; - while (blkCnt > 0U) - { - q31x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset(pInB, vecOffs); - /* - * move Matrix B read offsets, 2 rows down - */ - vecOffs = vecOffs + (uint32_t) (numColsB * 2 * CMPLX_DIM); - - - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vmlsldavaq(acc0, vecA, vecB); - acc1 = vmlaldavaxq(acc1, vecA, vecB); - - - vecA = vld1q(pSrcA1Vec); - pSrcA1Vec += 4; - - acc2 = vmlsldavaq(acc2, vecA, vecB); - acc3 = vmlaldavaxq(acc3, vecA, vecB); - - - blkCnt--; - } - - - /* - * tail - */ - blkCnt = (numColsA * CMPLX_DIM) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - q31x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset_z(pInB, vecOffs, p0); - - /* - * move Matrix B read offsets, 2 rows down - */ - vecOffs = vecOffs + (uint32_t) (numColsB * 2 * CMPLX_DIM); - - - vecA = vld1q(pSrcA0Vec); - acc0 = vmlsldavaq(acc0, vecA, vecB); - acc1 = vmlaldavaxq(acc1, vecA, vecB); - vecA = vld1q(pSrcA1Vec); - acc2 = vmlsldavaq(acc2, vecA, vecB); - acc3 = vmlaldavaxq(acc3, vecA, vecB); - - - } - - px[0 * CMPLX_DIM * numColsB + 0] = (q31_t) clip_q63_to_q31(acc0 >> 31); - px[0 * CMPLX_DIM * numColsB + 1] = (q31_t) clip_q63_to_q31(acc1 >> 31); - px[1 * CMPLX_DIM * numColsB + 0] = (q31_t) clip_q63_to_q31(acc2 >> 31); - px[1 * CMPLX_DIM * numColsB + 1] = (q31_t) clip_q63_to_q31(acc3 >> 31); - px += CMPLX_DIM; - /* - * Decrement the column loop counter - */ - col--; - /* - * Update the pointer pInB to point to the starting address of the next column - */ - pInB = (q31_t const *) pSrcB->pData + (numColsB - col) * CMPLX_DIM; - } - - /* - * Update the pointer pInA to point to the starting address of the next row - */ - pInA += (numColsA * 2) * CMPLX_DIM; - /* - * Decrement the row loop counter - */ - rowCnt --; - - } - - rowCnt = row & 1; - while (rowCnt > 0u) - { - /* - * Output pointer is set to starting address of the row being processed - */ - px = pOut + i * CMPLX_DIM; - i = i + numColsB; - /* - * For every row wise process, the column loop counter is to be initiated - */ - col = numColsB; - /* - * For every row wise process, the pInB pointer is set - * to the starting address of the pSrcB data - */ - pInB = (q31_t const *) pSrcB->pData; - /* - * column loop - */ - while (col > 0u) - { - /* - * generate 4 columns elements - */ - /* - * Matrix A columns number of MAC operations are to be performed - */ - colCnt = numColsA; - - q31_t const *pSrcA0Vec; - q31_t const *pInA0 = pInA; - q63_t acc0,acc1; - - acc0 = 0LL; - acc1 = 0LL; - - pSrcA0Vec = (q31_t const *) pInA0; - - vecOffs = vecColBOffs; - - /* - * process 1 x 2 block output - */ - blkCnt = (numColsA * CMPLX_DIM) >> 2; - while (blkCnt > 0U) - { - q31x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset(pInB, vecOffs); - /* - * move Matrix B read offsets, 2 rows down - */ - vecOffs = vecOffs + (uint32_t) (numColsB * 2 * CMPLX_DIM); - - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vmlsldavaq(acc0, vecA, vecB); - acc1 = vmlaldavaxq(acc1, vecA, vecB); - - - blkCnt--; - } - - - /* - * tail - */ - blkCnt = (numColsA * CMPLX_DIM) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - q31x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset_z(pInB, vecOffs, p0); - - /* - * move Matrix B read offsets, 2 rows down - */ - vecOffs = vecOffs + (uint32_t) (numColsB * 2 * CMPLX_DIM); - - vecA = vld1q(pSrcA0Vec); - - - acc0 = vmlsldavaq(acc0, vecA, vecB); - acc1 = vmlaldavaxq(acc1, vecA, vecB); - - - } - - px[0] = (q31_t) clip_q63_to_q31(acc0 >> 31); - px[1] = (q31_t) clip_q63_to_q31(acc1 >> 31); - - - px += CMPLX_DIM; - /* - * Decrement the column loop counter - */ - col--; - /* - * Update the pointer pInB to point to the starting address of the next column - */ - pInB = (q31_t const *) pSrcB->pData + (numColsB - col) * CMPLX_DIM; - } - - /* - * Update the pointer pInA to point to the starting address of the next row - */ - pInA += numColsA * CMPLX_DIM; - rowCnt--; - } - - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -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 sumReal, sumImag; /* Accumulator */ - q31_t a1, b1, c1, d1; - uint32_t col, i = 0U, j, row = numRowsA, colCnt; /* loop counters */ - arm_status status; /* status of matrix multiplication */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t a0, b0, c0, d0; -#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 /* #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 */ - sumReal = 0.0; - sumImag = 0.0; - - /* Initiate pointer pIn1 to point to starting address of column being processed */ - pIn1 = pInA; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Apply loop unrolling and compute 4 MACs simultaneously. */ - colCnt = numColsA >> 2U; - - /* 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 */ - sumReal += (q63_t) a0 * c0; - sumImag += (q63_t) b0 * c0; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= (q63_t) b0 * d0; - sumImag += (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 */ - sumReal += (q63_t) a1 * c1; - sumImag += (q63_t) b1 * c1; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= (q63_t) b1 * d1; - sumImag += (q63_t) a1 * d1; - - a0 = *(pIn1 ); - c0 = *(pIn2 ); - b0 = *(pIn1 + 1U); - d0 = *(pIn2 + 1U); - - /* Multiply and Accumlates */ - sumReal += (q63_t) a0 * c0; - sumImag += (q63_t) b0 * c0; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= (q63_t) b0 * d0; - sumImag += (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 */ - sumReal += (q63_t) a1 * c1; - sumImag += (q63_t) b1 * c1; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= (q63_t) b1 * d1; - sumImag += (q63_t) a1 * d1; - - /* Decrement 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; - -#else - - /* Initialize blkCnt with number of samples */ - colCnt = numColsA; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 */ - sumReal += (q63_t) a1 * c1; - sumImag += (q63_t) b1 * c1; - - /* update pointers */ - pIn1 += 2U; - pIn2 += 2 * numColsB; - - /* Multiply and Accumlates */ - sumReal -= (q63_t) b1 * d1; - sumImag += (q63_t) a1 * d1; - - /* Decrement loop counter */ - colCnt--; - } - - /* Store result in destination buffer */ - *px++ = (q31_t) clip_q63_to_q31(sumReal >> 31); - *px++ = (q31_t) clip_q63_to_q31(sumImag >> 31); - - /* Update pointer pIn2 to point to starting address of next column */ - j++; - pIn2 = pSrcB->pData + 2U * j; - - /* Decrement column loop counter */ - col--; - - } while (col > 0U); - - /* Update pointer pInA to point to starting address of next row */ - i = i + numColsB; - pInA = pInA + 2 * numColsA; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_f32.c deleted file mode 100644 index d5f64ac..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_f32.c +++ /dev/null @@ -1,76 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_init_f32.c - * Description: Floating-point matrix initialization - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_q15.c deleted file mode 100644 index 0275503..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_q15.c +++ /dev/null @@ -1,67 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_init_q15.c - * Description: Q15 matrix initialization - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_q31.c deleted file mode 100644 index 54eeec7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_init_q31.c +++ /dev/null @@ -1,72 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_init_q31.c - * Description: Q31 matrix initialization - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 Q31 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_inverse_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_inverse_f32.c deleted file mode 100644 index 9858785..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_inverse_f32.c +++ /dev/null @@ -1,1589 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_inverse_f32.c - * Description: Floating-point matrix inverse - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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. The source matrix is modified by the function. - @param[out] pDst points to output matrix structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - \ref ARM_MATH_SINGULAR : Input matrix is found to be singular (non-invertible) - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -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 */ - float32_t *pTmpA, *pTmpB; - - float32_t 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 */ - uint32_t blkCnt; - -#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; - 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 * i); - pOutT2 = pOutT1 + (numCols * k); - /* - * Check if there is a non zero pivot element to - * * replace in the rows below - */ - if (*pInT2 != 0.0f) - { - f32x4_t vecA, vecB; - /* - * Loop over number of columns - * * to the right of the pilot element - */ - pTmpA = pInT1; - pTmpB = pInT2; - blkCnt = (numCols - l) >> 2; - while (blkCnt > 0U) - { - - vecA = vldrwq_f32(pTmpA); - vecB = vldrwq_f32(pTmpB); - vstrwq_f32(pTmpB, vecA); - vstrwq_f32(pTmpA, vecB); - - pTmpA += 4; - pTmpB += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = (numCols - l) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - - vecA = vldrwq_f32(pTmpA); - vecB = vldrwq_f32(pTmpB); - vstrwq_p_f32(pTmpB, vecA, p0); - vstrwq_p_f32(pTmpA, vecB, p0); - } - - pInT1 += numCols - l; - pInT2 += numCols - l; - pTmpA = pOutT1; - pTmpB = pOutT2; - blkCnt = numCols >> 2; - while (blkCnt > 0U) - { - - vecA = vldrwq_f32(pTmpA); - vecB = vldrwq_f32(pTmpB); - vstrwq_f32(pTmpB, vecA); - vstrwq_f32(pTmpA, vecB); - pTmpA += 4; - pTmpB += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - - vecA = vldrwq_f32(pTmpA); - vecB = vldrwq_f32(pTmpB); - vstrwq_p_f32(pTmpB, vecA, p0); - vstrwq_p_f32(pTmpA, vecB, p0); - } - - pOutT1 += numCols; - pOutT2 += numCols; - /* - * 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)); - - pTmpA = pInT1; - - f32x4_t invIn = vdupq_n_f32(1.0f / in); - - blkCnt = (numCols - l) >> 2; - f32x4_t vecA; - while (blkCnt > 0U) - { - *(f32x4_t *) pTmpA = *(f32x4_t *) pTmpA * invIn; - pTmpA += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = (numCols - l) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - - - vecA = vldrwq_f32(pTmpA); - vecA = vecA * invIn; - vstrwq_p_f32(pTmpA, vecA, p0); - } - - pInT1 += numCols - l; - /* - * Loop over number of columns - * * to the right of the pilot element - */ - - pTmpA = pOutT1; - blkCnt = numCols >> 2; - while (blkCnt > 0U) - { - *(f32x4_t *) pTmpA = *(f32x4_t *) pTmpA *invIn; - pTmpA += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - - vecA = vldrwq_f32(pTmpA); - vecA = vecA * invIn; - vstrwq_p_f32(pTmpA, vecA, p0); - } - - pOutT1 += numCols; - - /* - * 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 - */ - - /* - * 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 - */ - - in = *pInT1; - f32x4_t tmpV = vdupq_n_f32(in); - - blkCnt = (numCols - l) >> 2; - while (blkCnt > 0U) - { - f32x4_t vec1, vec2; - /* - * Replace the element by the sum of that row - * and a multiple of the reference row - */ - vec1 = vldrwq_f32(pInT1); - vec2 = vldrwq_f32(pPRT_in); - vec1 = vfmsq_f32(vec1, tmpV, vec2); - vstrwq_f32(pInT1, vec1); - pPRT_in += 4; - pInT1 += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = (numCols - l) & 3; - if (blkCnt > 0U) - { - f32x4_t vec1, vec2; - mve_pred16_t p0 = vctp32q(blkCnt); - - vec1 = vldrwq_f32(pInT1); - vec2 = vldrwq_f32(pPRT_in); - vec1 = vfmsq_f32(vec1, tmpV, vec2); - vstrwq_p_f32(pInT1, vec1, p0); - pInT1 += blkCnt; - } - - blkCnt = numCols >> 2; - while (blkCnt > 0U) - { - f32x4_t vec1, vec2; - - /* - * Replace the element by the sum of that row - * and a multiple of the reference row - */ - vec1 = vldrwq_f32(pOutT1); - vec2 = vldrwq_f32(pPRT_pDst); - vec1 = vfmsq_f32(vec1, tmpV, vec2); - vstrwq_f32(pOutT1, vec1); - pPRT_pDst += 4; - pOutT1 += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) - { - f32x4_t vec1, vec2; - mve_pred16_t p0 = vctp32q(blkCnt); - - vec1 = vldrwq_f32(pOutT1); - vec2 = vldrwq_f32(pPRT_pDst); - vec1 = vfmsq_f32(vec1, tmpV, vec2); - vstrwq_p_f32(pOutT1, vec1, p0); - - pInT2 += blkCnt; - pOutT1 += blkCnt; - } - } - /* - * Increment the temporary input pointer - */ - pInT1 = pInT1 + l; - } - /* - * Increment the input pointer - */ - pIn++; - /* - * Decrement the loop counter - */ - loopCnt--; - /* - * Increment the index modifier - */ - l++; - } - - /* - * 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); -} - -#else -#if defined(ARM_MATH_NEON) -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 */ - - - 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 */ - float32x4_t vec1; - float32x4_t vec2; - float32x4_t tmpV; - -#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, 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; - - - /* 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 * i); - 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 */ - 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++; - } - } - - /* 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; - tmpV = vdupq_n_f32(1.0f/in); - - /* Loop over number of columns - * to the right of the pilot element */ - j = (numCols - l) >> 2; - - while (j > 0U) - { - /* Divide each element of the row of the input matrix - * by the pivot element */ - vec1 = vld1q_f32(pInT1); - - vec1 = vmulq_f32(vec1, tmpV); - vst1q_f32(pInT1, vec1); - pInT1 += 4; - - /* Decrement the loop counter */ - j--; - } - - /* Tail */ - j = (numCols - l) & 3; - - 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 >> 2; - - while (j > 0U) - { - /* Divide each element of the row of the destination matrix - * by the pivot element */ - vec1 = vld1q_f32(pInT2); - - vec1 = vmulq_f32(vec1, tmpV); - vst1q_f32(pInT2, vec1); - pInT2 += 4; - - /* Decrement the loop counter */ - j--; - } - - /* Tail */ - j = numCols & 3; - - 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; - tmpV = vdupq_n_f32(in); - - /* 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) >> 2; - - while (j > 0U) - { - /* Replace the element by the sum of that row - and a multiple of the reference row */ - vec1 = vld1q_f32(pInT1); - vec2 = vld1q_f32(pPRT_in); - vec1 = vmlsq_f32(vec1, tmpV, vec2); - vst1q_f32(pInT1, vec1); - pPRT_in += 4; - pInT1 += 4; - - /* Decrement the loop counter */ - j--; - } - - /* Tail */ - j = (numCols - l) & 3; - - 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 >> 2; - - while (j > 0U) - { - /* Replace the element by the sum of that row - and a multiple of the reference row */ - vec1 = vld1q_f32(pInT2); - vec2 = vld1q_f32(pPRT_pDst); - vec1 = vmlsq_f32(vec1, tmpV, vec2); - vst1q_f32(pInT2, vec1); - pPRT_pDst += 4; - pInT2 += 4; - - /* Decrement the loop counter */ - j--; - } - - /* Tail */ - j = numCols & 3; - - 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++; - } - - /* 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); -} -#else -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 */ - -#if defined (ARM_MATH_DSP) - - 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 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, 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 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; - - - /* 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 * i); - 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 */ - 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 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 loop counter */ - } - } - - /* 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 loop counter */ - j--; - } - - } - - /* Increment temporary input pointer */ - pInT1 = pInT1 + l; - - /* Decrement loop counter */ - k--; - - /* Increment pivot index */ - i++; - } - - /* Increment the input pointer */ - pIn++; - - /* Decrement the loop counter */ - loopCnt--; - - /* Increment the index modifier */ - l++; - } - - -#else - - 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 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; - - /* 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 * i); - 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 temporary input pointer */ - pInT1 = pInT1 + l; - } - - /* Increment the input pointer */ - pIn++; - - /* Decrement the loop counter */ - loopCnt--; - - /* Increment the index modifier */ - l++; - } - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* 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); -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of MatrixInv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_inverse_f64.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_inverse_f64.c deleted file mode 100644 index b9b9309..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_inverse_f64.c +++ /dev/null @@ -1,652 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_inverse_f64.c - * Description: Floating-point matrix inverse - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - - -/** - @addtogroup MatrixInv - @{ - */ - -/** - @brief Floating-point (64 bit) matrix inverse. - @param[in] pSrc points to input matrix structure. The source matrix is modified by the function. - @param[out] pDst points to output matrix structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - \ref ARM_MATH_SINGULAR : Input matrix is found to be singular (non-invertible) - */ - -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 */ - -#if defined (ARM_MATH_DSP) - - float64_t Xchg, in = 0.0, 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 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, 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.0; - j--; - } - - /* Writing all ones in the diagonal of the destination matrix */ - *pOutT1++ = 1.0; - - /* Writing all zeroes in upper triangle of the destination matrix */ - j = rowCnt - 1U; - while (j > 0U) - { - *pOutT1++ = 0.0; - j--; - } - - /* Decrement 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; - - /* Destination pointer modifier */ - k = 1U; - - /* Check if the pivot element is zero */ - if (*pInT1 == 0.0) - { - /* Loop over the number rows present below */ - for (i = (l + 1U); i < numRows; i++) - { - /* Update the input and destination pointers */ - pInT2 = pInT1 + (numCols * i); - pOutT2 = pOutT1 + (numCols * k); - - /* Check if there is a non zero pivot element to - * replace in the rows below */ - if (*pInT2 != 0.0) - { - /* 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 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 loop counter */ - i--; - } - } - - /* Update the status if the matrix is singular */ - if ((flag != 1U) && (in == 0.0)) - { - 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 loop counter */ - j--; - } - - } - - /* Increment temporary input pointer */ - pInT1 = pInT1 + l; - - /* Decrement loop counter */ - k--; - - /* Increment pivot index */ - i++; - } - - /* Increment the input pointer */ - pIn++; - - /* Decrement the loop counter */ - loopCnt--; - - /* Increment the index modifier */ - l++; - } - - -#else - - float64_t Xchg, in = 0.0; /* 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.0; - j--; - } - - /* Writing all ones in the diagonal of the destination matrix */ - *pOutT1++ = 1.0; - - /* Writing all zeroes in upper triangle of the destination matrix */ - j = rowCnt - 1U; - while (j > 0U) - { - *pOutT1++ = 0.0; - j--; - } - - /* Decrement 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; - - /* Destination pointer modifier */ - k = 1U; - - /* Check if the pivot element is zero */ - if (*pInT1 == 0.0) - { - /* Loop over the number rows present below */ - for (i = (l + 1U); i < numRows; i++) - { - /* Update the input and destination pointers */ - pInT2 = pInT1 + (numCols * i); - pOutT2 = pOutT1 + (numCols * k); - - /* Check if there is a non zero pivot element to - * replace in the rows below */ - if (*pInT2 != 0.0) - { - /* 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.0)) - { - 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 temporary input pointer */ - pInT1 = pInT1 + l; - } - - /* Increment the input pointer */ - pIn++; - - /* Decrement the loop counter */ - loopCnt--; - - /* Increment the index modifier */ - l++; - } - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - - if ((flag != 1U) && (in == 0.0)) - { - pIn = pSrc->pData; - for (i = 0; i < numRows * numCols; i++) - { - if (pIn[i] != 0.0) - break; - } - - if (i == numRows * numCols) - status = ARM_MATH_SINGULAR; - } - } - - /* Return to application */ - return (status); -} - -/** - @} end of MatrixInv group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_f32.c deleted file mode 100644 index e7cf233..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_f32.c +++ /dev/null @@ -1,983 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_mult_f32.c - * Description: Floating-point matrix multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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. - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#define MATRIX_DIM3 3 -#define MATRIX_DIM4 4 - -__STATIC_INLINE arm_status arm_mat_mult_f32_2x2_mve( - const arm_matrix_instance_f32 *pSrcA, - const arm_matrix_instance_f32 *pSrcB, - arm_matrix_instance_f32 *pDst) -{ - /* {a00, a00, a10, a10} */ - static const uint32_t offsetA0[4] = { 0, 0, 2, 2 }; - /* {b00, b01, b00, b01} */ - static const uint32_t offsetB0[4] = { 0, 1, 0, 1 }; - /* {a01, a01, a11, a11} */ - static const uint32_t offsetA1[4] = { 1, 1, 3, 3 }; - /* {b10, b11, b10, b11} */ - static const uint32_t offsetB1[4] = { 2, 3, 2, 3 }; - - uint32x4_t vecOffsA, vecOffsB; - f32x4_t vecInA, vecInB, vecDst; - - vecOffsA = vldrwq_u32((uint32_t const *) offsetA0); - vecOffsB = vldrwq_u32((uint32_t const *) offsetB0); - - vecInA = vldrwq_gather_shifted_offset((float32_t const *) pSrcA->pData, vecOffsA); - vecInB = vldrwq_gather_shifted_offset((float32_t const *) pSrcB->pData, vecOffsB); - - vecDst = vmulq(vecInA, vecInB); - - vecOffsA = vldrwq_u32((uint32_t const *) offsetA1); - vecOffsB = vldrwq_u32((uint32_t const *) offsetB1); - - vecInA = vldrwq_gather_shifted_offset((float32_t const *) pSrcA->pData, vecOffsA); - vecInB = vldrwq_gather_shifted_offset((float32_t const *) pSrcB->pData, vecOffsB); - - vecDst = vfmaq(vecDst, vecInA, vecInB); - - vstrwq_f32(pDst->pData, vecDst); - - return (ARM_MATH_SUCCESS); - -} - - -/* - * A = {{a00, a01, a02}, - * {a10, a11, a12}, - * {a20, a21, a22}} - * B = {{b00, b01, b02}, - * {b10, b11, b12}, - * {b20, b21, b22}} - * - * Dst = {{a00 b00 + a01 b10 + a02 b20, a00 b01 + a01 b11 + a02 b21, a00 b02 + a01 b12 + a02 b22}, - * {a10 b00 + a11 b10 + a12 b20, a10 b01 + a11 b11 + a12 b21, a10 b02 + a11 b12 + a12 b22}, - * {a20 b00 + a21 b10 + a22 b20, a20 b01 + a21 b11 + a22 b21, a20 b02 + a21 b12 + a22 b22}} - */ -__STATIC_INLINE arm_status arm_mat_mult_f32_3x3_mve( - const arm_matrix_instance_f32 *pSrcA, - const arm_matrix_instance_f32 *pSrcB, - arm_matrix_instance_f32 *pDst) -{ - float32_t *pInB = 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 *pInA0, *pInA1, *pInA2; - f32x4_t vecMac0, vecMac1, vecMac2; - f32x4_t vecInB; - float32_t const *pSrBVec; - - pSrBVec = (float32_t const *) pInB; - - pInA0 = pInA; - pInA1 = pInA0 + MATRIX_DIM3; - pInA2 = pInA1 + MATRIX_DIM3; - /* enable predication to disable last (4th) vector element */ - mve_pred16_t p0 = vctp32q(MATRIX_DIM3); - - /* - * load {b0,0, b0,1, b0,2, 0} - */ - vecInB = vldrwq_z_f32(pSrBVec, p0); - pSrBVec += MATRIX_DIM3; - - vecMac0 = vmulq(vecInB, *pInA0++); - vecMac1 = vmulq(vecInB, *pInA1++); - vecMac2 = vmulq(vecInB, *pInA2++); - /* - * load {b1,0, b1,1, b1,2, 0} - */ - vecInB = vldrwq_z_f32(pSrBVec, p0); - pSrBVec += MATRIX_DIM3; - - vecMac0 = vfmaq(vecMac0, vecInB, *pInA0++); - vecMac1 = vfmaq(vecMac1, vecInB, *pInA1++); - vecMac2 = vfmaq(vecMac2, vecInB, *pInA2++); - /* - * load {b2,0, b2,1 , b2,2, 0} - */ - vecInB = vldrwq_z_f32(pSrBVec, p0); - pSrBVec += MATRIX_DIM3; - - vecMac0 = vfmaq(vecMac0, vecInB, *pInA0++); - vecMac1 = vfmaq(vecMac1, vecInB, *pInA1++); - vecMac2 = vfmaq(vecMac2, vecInB, *pInA2++); - - /* partial vector stores */ - vstrwq_p_f32(pOut, vecMac0, p0); - pOut += MATRIX_DIM3; - vstrwq_p_f32(pOut, vecMac1, p0); - pOut += MATRIX_DIM3; - vstrwq_p_f32(pOut, vecMac2, p0); - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - - - - -__STATIC_INLINE arm_status arm_mat_mult_f32_4x4_mve( - const arm_matrix_instance_f32 *pSrcA, - const arm_matrix_instance_f32 *pSrcB, - arm_matrix_instance_f32 *pDst) -{ - float32_t const *pSrBVec; - float32_t *pInB = 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 *pInA0, *pInA1, *pInA2, *pInA3; - f32x4_t vecMac0, vecMac1, vecMac2, vecMac3; - f32x4_t vecInB; - - pSrBVec = (float32_t const *) pInB; - - pInA0 = pInA; - pInA1 = pInA0 + MATRIX_DIM4; - pInA2 = pInA1 + MATRIX_DIM4; - pInA3 = pInA2 + MATRIX_DIM4; - /* - * load {b0,0, b0,1, b0,2, b0,3} - */ - vecInB = vld1q(pSrBVec); - pSrBVec += MATRIX_DIM4; - - vecMac0 = vmulq(vecInB, *pInA0++); - vecMac1 = vmulq(vecInB, *pInA1++); - vecMac2 = vmulq(vecInB, *pInA2++); - vecMac3 = vmulq(vecInB, *pInA3++); - /* - * load {b1,0, b1,1, b1,2, b1,3} - */ - vecInB = vld1q(pSrBVec); - pSrBVec += MATRIX_DIM4; - - vecMac0 = vfmaq(vecMac0, vecInB, *pInA0++); - vecMac1 = vfmaq(vecMac1, vecInB, *pInA1++); - vecMac2 = vfmaq(vecMac2, vecInB, *pInA2++); - vecMac3 = vfmaq(vecMac3, vecInB, *pInA3++); - /* - * load {b2,0, b2,1, b2,2, b2,3} - */ - vecInB = vld1q(pSrBVec); - pSrBVec += MATRIX_DIM4; - - vecMac0 = vfmaq(vecMac0, vecInB, *pInA0++); - vecMac1 = vfmaq(vecMac1, vecInB, *pInA1++); - vecMac2 = vfmaq(vecMac2, vecInB, *pInA2++); - vecMac3 = vfmaq(vecMac3, vecInB, *pInA3++); - /* - * load {b3,0, b3,1, b3,2, b3,3} - */ - vecInB = vld1q(pSrBVec); - pSrBVec += MATRIX_DIM4; - - vecMac0 = vfmaq(vecMac0, vecInB, *pInA0++); - vecMac1 = vfmaq(vecMac1, vecInB, *pInA1++); - vecMac2 = vfmaq(vecMac2, vecInB, *pInA2++); - vecMac3 = vfmaq(vecMac3, vecInB, *pInA3++); - - vst1q(pOut, vecMac0); - pOut += MATRIX_DIM4; - vst1q(pOut, vecMac1); - pOut += MATRIX_DIM4; - vst1q(pOut, vecMac2); - pOut += MATRIX_DIM4; - vst1q(pOut, vecMac3); - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - - -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 *pInB = 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 */ - int numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ - int numColsB = pSrcB->numCols; /* number of columns of input matrix B */ - int numColsA = pSrcA->numCols; /* number of columns of input matrix A */ - uint32_t blkCnt; /* loop counters */ - uint32_t i; - arm_status status; - -#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 */ - { - /* small squared matrix specialized routines */ - if(numRowsA == numColsB && numColsB == numColsA) { - if (numRowsA == 1) - { - pOut[0] = pInA[0] * pInB[0]; - return(ARM_MATH_SUCCESS); - } - else if(numRowsA == 2) - return arm_mat_mult_f32_2x2_mve(pSrcA, pSrcB, pDst); - else if(numRowsA == 3) - return arm_mat_mult_f32_3x3_mve(pSrcA, pSrcB, pDst); - else if(numRowsA == 4) - return arm_mat_mult_f32_4x4_mve(pSrcA, pSrcB, pDst); - } - - /* main loop process 4 rows */ - i = numRowsA >> 2; - while (i > 0U) - { - float32_t *pInA0, *pInA1, *pInA2, *pInA3; - float32_t *pInB0; - float32_t *pOut0, *pOut1, *pOut2, *pOut3; - f32x4_t vecMac0, vecMac1, vecMac2, vecMac3; - f32x4_t vecInB; - - /* pointers to 4 consecutive output rows */ - pOut0 = pOut; - pOut1 = pOut0 + numColsB; - pOut2 = pOut1 + numColsB; - pOut3 = pOut2 + numColsB; - pInB0 = pInB; - - uint32_t k = numColsB >> 2; - while (k > 0U) - { - /* pointers to 4 consecutive Matrix A rows */ - pInA0 = pInA; - pInA1 = pInA0 + numColsA; - pInA2 = pInA1 + numColsA; - pInA3 = pInA2 + numColsA; - - vecMac0 = vdupq_n_f32(0.0f); - vecMac1 = vdupq_n_f32(0.0f); - vecMac2 = vdupq_n_f32(0.0f); - vecMac3 = vdupq_n_f32(0.0f); - - blkCnt = numColsA; - - while (blkCnt > 0U) - { - /* - * load {bi,4n+0, bi,4n+1, bi,4n+2, bi,4n+3} - */ - vecInB = *(f32x4_t *)pInB0; /* vldrwq_f32(pInB0, 0); */ - - vecMac0 = vfmaq(vecMac0, vecInB, *pInA0++); - vecMac1 = vfmaq(vecMac1, vecInB, *pInA1++); - vecMac2 = vfmaq(vecMac2, vecInB, *pInA2++); - vecMac3 = vfmaq(vecMac3, vecInB, *pInA3++); - - pInB0 = pInB0 + numColsB; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* Store the results (4 x 4 block) in the destination buffer */ - vst1q(pOut0, vecMac0); - pOut0 += 4; - vst1q(pOut1, vecMac1); - pOut1 += 4; - vst1q(pOut2, vecMac2); - pOut2 += 4; - vst1q(pOut3, vecMac3); - pOut3 += 4; - - /* - * rewind - */ - pInB0 -= (numColsB * numColsA) - 4; - k--; - } - - int colBLeft = numColsB & 3; - if (colBLeft) - { - pInA0 = pInA; - pInA1 = pInA0 + numColsA; - pInA2 = pInA1 + numColsA; - pInA3 = pInA2 + numColsA; - mve_pred16_t p0 = vctp32q(colBLeft); - - vecMac0 = vdupq_n_f32(0.0f); - vecMac1 = vdupq_n_f32(0.0f); - vecMac2 = vdupq_n_f32(0.0f); - vecMac3 = vdupq_n_f32(0.0f); - - blkCnt = numColsA; - - while (blkCnt > 0U) - { - /* - * load {bi,4n+0, bi,4n+1, bi,4n+2, bi,4n+3} - */ - vecInB = vldrwq_z_f32(pInB0, p0); - - vecMac0 = vfmaq(vecMac0, vecInB, *pInA0++); - vecMac1 = vfmaq(vecMac1, vecInB, *pInA1++); - vecMac2 = vfmaq(vecMac2, vecInB, *pInA2++); - vecMac3 = vfmaq(vecMac3, vecInB, *pInA3++); - - pInB0 = pInB0 + numColsB; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* Store the results (4 x colBLeft block) in the destination buffer */ - vstrwq_p_f32(pOut0, vecMac0, p0); - vstrwq_p_f32(pOut1, vecMac1, p0); - vstrwq_p_f32(pOut2, vecMac2, p0); - vstrwq_p_f32(pOut3, vecMac3, p0); - } - - /* move to next rows */ - pInA += 4 * numColsA; - pOut += 4 * numColsB; - i--; - } - - /* - * non multiple of 4 rows for Matrix A - * process single row - */ - if (numRowsA & 3) - { - i = numRowsA & 3; - while (i > 0U) - { - float32_t *pInA0; - float32_t *pInB0; - float32_t *pOut0; - f32x4_t vecInB; - f32x4_t vecMac0; - - pOut0 = pOut; - pInB0 = pInB; - - uint32_t k = numColsB >> 2; - while (k > 0U) - { - pInA0 = pInA; - - vecMac0 = vdupq_n_f32(0.0f); - blkCnt = numColsA; - while (blkCnt > 0U) - { - /* - * load {bi,4n+0, bi,4n+1, bi,4n+2, bi,4n+3} - */ - vecInB = *(f32x4_t *)pInB0; /* vldrwq_f32(pInB0, 0); */ - - vecMac0 = vfmaq(vecMac0, vecInB, *pInA0++); - - pInB0 = pInB0 + numColsB; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* Store the results (1 x 4 block) in the destination buffer */ - vst1q(pOut0, vecMac0); - pOut0 += 4; - - /* - * rewind - */ - pInB0 -= (numColsB * numColsA) - 4; - k--; - } - - int colBLeft = numColsB & 3; - if (colBLeft) - { - pInA0 = pInA; - mve_pred16_t p0 = vctp32q(colBLeft); - - vecMac0 = vdupq_n_f32(0.0f); - blkCnt = numColsA; - while (blkCnt > 0U) - { - /* - * load {bi,4n+0, bi,4n+1, bi,4n+2, bi,4n+3} - */ - vecInB = vldrwq_z_f32(pInB0, p0); - - vecMac0 = vfmaq(vecMac0, vecInB, *pInA0++); - - pInB0 = pInB0 + numColsB; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* Store the results (1 x colBLeft block) in the destination buffer */ - vstrwq_p_f32(pOut0, vecMac0, p0); - } - - /* move to next row */ - pInA += 1 * numColsA; - pOut += 1 * numColsB; - i--; - } - - } - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#else - -#if defined(ARM_MATH_NEON) - -#define GROUPOFROWS 8 - -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 */ - - - uint16_t col, i = 0U, j, row = numRowsA, rowCnt, colCnt; /* loop counters */ - arm_status status; /* status of matrix multiplication */ - - float32x4_t a0V, a1V, a2V, a3V, a4V, a5V, a6V, a7V; - float32x4_t acc0,acc1,acc2,acc3,acc4,acc5,acc6,acc7,temp; - float32x2_t accum = vdup_n_f32(0); - float32_t *pIn1B = pSrcA->pData; - float32_t *pIn1C = pSrcA->pData; - float32_t *pIn1D = pSrcA->pData; - float32_t *pIn1E = pSrcA->pData; - float32_t *pIn1F = pSrcA->pData; - float32_t *pIn1G = pSrcA->pData; - float32_t *pIn1H = pSrcA->pData; - - float32_t *pxB,*pxC, *pxD, *pxE, *pxF, *pxG, *pxH; /* Temporary output data matrix pointer */ - float32_t sum0,sum1, sum2,sum3, sum4, sum5 , sum6, sum7; - -#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 */ - rowCnt = row >> 3; - - while(rowCnt > 0) - { - /* Output pointer is set to starting address of the row being processed */ - px = pOut + GROUPOFROWS*i; - pxB = px + numColsB; - pxC = px + 2*numColsB; - pxD = px + 3*numColsB; - pxE = px + 4*numColsB; - pxF = px + 5*numColsB; - pxG = px + 6*numColsB; - pxH = px + 7*numColsB; - - /* 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 */ - sum0 = 0.0f; - sum1 = 0.0f; - sum2 = 0.0f; - sum3 = 0.0f; - sum4 = 0.0f; - sum5 = 0.0f; - sum6 = 0.0f; - sum7 = 0.0f; - - /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ - pIn1 = pInA; - pIn1B = pIn1 + numColsA; - pIn1C = pIn1 + 2*numColsA; - pIn1D = pIn1 + 3*numColsA; - pIn1E = pIn1 + 4*numColsA; - pIn1F = pIn1 + 5*numColsA; - pIn1G = pIn1 + 6*numColsA; - pIn1H = pIn1 + 7*numColsA; - - acc0 = vdupq_n_f32(0.0); - acc1 = vdupq_n_f32(0.0); - acc2 = vdupq_n_f32(0.0); - acc3 = vdupq_n_f32(0.0); - acc4 = vdupq_n_f32(0.0); - acc5 = vdupq_n_f32(0.0); - acc6 = vdupq_n_f32(0.0); - acc7 = vdupq_n_f32(0.0); - - /* 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) */ - a0V = vld1q_f32(pIn1); - a1V = vld1q_f32(pIn1B); - a2V = vld1q_f32(pIn1C); - a3V = vld1q_f32(pIn1D); - a4V = vld1q_f32(pIn1E); - a5V = vld1q_f32(pIn1F); - a6V = vld1q_f32(pIn1G); - a7V = vld1q_f32(pIn1H); - - pIn1 += 4; - pIn1B += 4; - pIn1C += 4; - pIn1D += 4; - pIn1E += 4; - pIn1F += 4; - pIn1G += 4; - pIn1H += 4; - - temp = vsetq_lane_f32(*pIn2,temp,0); - pIn2 += numColsB; - temp = vsetq_lane_f32(*pIn2,temp,1); - pIn2 += numColsB; - temp = vsetq_lane_f32(*pIn2,temp,2); - pIn2 += numColsB; - temp = vsetq_lane_f32(*pIn2,temp,3); - pIn2 += numColsB; - - acc0 = vmlaq_f32(acc0,a0V,temp); - acc1 = vmlaq_f32(acc1,a1V,temp); - acc2 = vmlaq_f32(acc2,a2V,temp); - acc3 = vmlaq_f32(acc3,a3V,temp); - acc4 = vmlaq_f32(acc4,a4V,temp); - acc5 = vmlaq_f32(acc5,a5V,temp); - acc6 = vmlaq_f32(acc6,a6V,temp); - acc7 = vmlaq_f32(acc7,a7V,temp); - - /* Decrement the loop count */ - colCnt--; - } - - accum = vpadd_f32(vget_low_f32(acc0), vget_high_f32(acc0)); - sum0 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(acc1), vget_high_f32(acc1)); - sum1 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(acc2), vget_high_f32(acc2)); - sum2 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(acc3), vget_high_f32(acc3)); - sum3 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(acc4), vget_high_f32(acc4)); - sum4 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(acc5), vget_high_f32(acc5)); - sum5 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(acc6), vget_high_f32(acc6)); - sum6 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - accum = vpadd_f32(vget_low_f32(acc7), vget_high_f32(acc7)); - sum7 += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. - ** No loop unrolling is used. */ - colCnt = numColsA & 3; - - while (colCnt > 0U) - { - /* c(m,n) = a(1,1)*b(1,1) + a(1,2)*b(2,1) + ... + a(m,p)*b(p,n) */ - sum0 += *pIn1++ * (*pIn2); - sum1 += *pIn1B++ * (*pIn2); - sum2 += *pIn1C++ * (*pIn2); - sum3 += *pIn1D++ * (*pIn2); - sum4 += *pIn1E++ * (*pIn2); - sum5 += *pIn1F++ * (*pIn2); - sum6 += *pIn1G++ * (*pIn2); - sum7 += *pIn1H++ * (*pIn2); - pIn2 += numColsB; - - /* Decrement the loop counter */ - colCnt--; - } - - /* Store the result in the destination buffer */ - *px++ = sum0; - *pxB++ = sum1; - *pxC++ = sum2; - *pxD++ = sum3; - *pxE++ = sum4; - *pxF++ = sum5; - *pxG++ = sum6; - *pxH++ = sum7; - - /* 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 + GROUPOFROWS*numColsA; - - /* Decrement the row loop counter */ - rowCnt--; - } - - /* - - i was the index of a group of rows computed by previous loop. - Now i is the index of a row since below code is computing row per row - and no more group of row per group of rows. - - */ - - i = GROUPOFROWS*i; - rowCnt = row & 7; - - while(rowCnt > 0) - { - /* 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; - - acc0 = vdupq_n_f32(0.0); - - /* 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) */ - a0V = vld1q_f32(pIn1); // load & separate real/imag pSrcA (de-interleave 2) - pIn1 += 4; - - temp = vsetq_lane_f32(*pIn2,temp,0); - pIn2 += numColsB; - temp = vsetq_lane_f32(*pIn2,temp,1); - pIn2 += numColsB; - temp = vsetq_lane_f32(*pIn2,temp,2); - pIn2 += numColsB; - temp = vsetq_lane_f32(*pIn2,temp,3); - pIn2 += numColsB; - - acc0 = vmlaq_f32(acc0,a0V,temp); - - /* Decrement the loop count */ - colCnt--; - } - - accum = vpadd_f32(vget_low_f32(acc0), vget_high_f32(acc0)); - sum += vget_lane_f32(accum, 0) + vget_lane_f32(accum, 1); - - /* 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); - - - /* 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 */ - rowCnt--; - - } - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#else -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 *pInB = pSrcB->pData; /* Input data matrix pointer B */ - 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 */ - uint32_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 row being processed */ - px = pOut + i; - - /* For every row wise process, column loop counter is to be initiated */ - col = numColsB; - - /* For every row wise process, pIn2 pointer is set to starting address of pSrcB data */ - pIn2 = pSrcB->pData; - - /* column loop */ - do - { - /* Set the variable sum, that acts as accumulator, to zero */ - sum = 0.0f; - - /* Initialize pointer pIn1 to point to starting address of column being processed */ - pIn1 = pInA; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 MACs at a time. */ - 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) */ - - /* Perform the multiply-accumulates */ - sum += *pIn1++ * *pIn2; - pIn2 += numColsB; - - sum += *pIn1++ * *pIn2; - pIn2 += numColsB; - - sum += *pIn1++ * *pIn2; - pIn2 += numColsB; - - sum += *pIn1++ * *pIn2; - pIn2 += numColsB; - - /* Decrement loop counter */ - colCnt--; - } - - /* Loop unrolling: Compute remaining MACs */ - colCnt = numColsA % 0x4U; - -#else - - /* Initialize cntCnt with number of columns */ - colCnt = numColsA; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 += *pIn1++ * *pIn2; - pIn2 += numColsB; - - /* Decrement loop counter */ - colCnt--; - } - - /* Store result in destination buffer */ - *px++ = sum; - - /* Decrement column loop counter */ - col--; - - /* Update pointer pIn2 to point to starting address of next column */ - pIn2 = pInB + (numColsB - col); - - } while (col > 0U); - - /* Update pointer pInA to point to starting address of next row */ - i = i + numColsB; - pInA = pInA + numColsA; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of MatrixMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_fast_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_fast_q15.c deleted file mode 100644 index 670ace1..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_fast_q15.c +++ /dev/null @@ -1,483 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_mult_fast_q15.c - * Description: Q15 matrix multiplication (fast variant) - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - -/** - @addtogroup MatrixMult - @{ - */ - -/** - @brief Q15 matrix multiplication (fast variant). - @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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Scaling and Overflow Behavior - The difference between the function \ref 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. - @remark - Refer to \ref 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 */ - uint32_t col, i = 0U, row = numRowsB, colCnt; /* Loop counters */ - arm_status status; /* Status of matrix multiplication */ - -#if defined (ARM_MATH_DSP) - q31_t in; /* Temporary variable to hold the input value */ - q31_t inA1, inB1, inA2, inB2; - q31_t sum2, sum3, sum4; - q15_t *pInA2, *pInB2, *px2; - uint32_t j = 0; -#else - q15_t in; /* Temporary variable to hold the input value */ - q15_t inA1, inB1, inA2, inB2; -#endif /* #if defined (ARM_MATH_DSP) */ - -#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 - { - /* The pointer px is set to starting address of column being processed */ - px = pSrcBT + i; - - /* Apply loop unrolling and exchange columns with row elements */ - col = numColsB >> 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 (col > 0U) - { - -#if defined (ARM_MATH_DSP) - - /* Read two elements from row */ - in = read_q15x2_ia ((q15_t **) &pInB); - - /* Unpack and store one element in 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 pointer px to point to next row of transposed matrix */ - px += numRowsB; - - /* Unpack and store second element in 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 pointer px to point to next row of transposed matrix */ - px += numRowsB; - - in = read_q15x2_ia ((q15_t **) &pInB); -#ifndef ARM_MATH_BIG_ENDIAN - *px = (q15_t) in; -#else - *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - px += numRowsB; - -#ifndef ARM_MATH_BIG_ENDIAN - *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); -#else - *px = (q15_t) in; -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - px += numRowsB; - -#else /* #if defined (ARM_MATH_DSP) */ - - /* Read one element from row */ - in = *pInB++; - - /* Store one element in destination */ - *px = in; - - /* Update pointer px to point to next row of transposed matrix */ - px += numRowsB; - - in = *pInB++; - *px = in; - px += numRowsB; - - in = *pInB++; - *px = in; - px += numRowsB; - - in = *pInB++; - *px = in; - px += numRowsB; - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement 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 input element in destination */ - *px = *pInB++; - - /* Update pointer px to point to next row of transposed matrix */ - px += numRowsB; - - /* Decrement column loop counter */ - col--; - } - - i++; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - - /* Reset variables for usage in following multiplication process */ - row = numRowsA; - i = 0U; - px = pDst->pData; - -#if defined (ARM_MATH_DSP) - /* Process two rows from matrix A at a time and output two rows at a time */ - row = row >> 1U; - px2 = px + numColsB; -#endif - - /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ - /* row loop */ - while (row > 0U) - { - /* For every row wise process, column loop counter is to be initiated */ - col = numColsB; - - /* For every row wise process, pIn2 pointer is set to starting address of transposed pSrcB data */ - pInB = pSrcBT; - -#if defined (ARM_MATH_DSP) - /* Process two (transposed) columns from matrix B at a time */ - col = col >> 1U; - j = 0; -#endif - - /* column loop */ - while (col > 0U) - { - /* Set variable sum, that acts as accumulator, to zero */ - sum = 0; - - /* Initiate pointer pInA to point to starting address of column being processed */ - pInA = pSrcA->pData + i; - -#if defined (ARM_MATH_DSP) - sum2 = 0; - sum3 = 0; - sum4 = 0; - pInB = pSrcBT + j; - pInA2 = pInA + numColsA; - pInB2 = pInB + numRowsB; - - /* Read in two elements at once - alows dual MAC instruction */ - colCnt = numColsA >> 1U; -#else - colCnt = numColsA >> 2U; -#endif - - /* 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) */ - -#if defined (ARM_MATH_DSP) - /* read real and imag values from pSrcA and pSrcB buffer */ - inA1 = read_q15x2_ia ((q15_t **) &pInA); - inB1 = read_q15x2_ia ((q15_t **) &pInB); - - inA2 = read_q15x2_ia ((q15_t **) &pInA2); - inB2 = read_q15x2_ia ((q15_t **) &pInB2); - - /* Multiply and Accumlates */ - sum = __SMLAD(inA1, inB1, sum); - sum2 = __SMLAD(inA1, inB2, sum2); - sum3 = __SMLAD(inA2, inB1, sum3); - sum4 = __SMLAD(inA2, inB2, sum4); -#else - /* read real and imag values from pSrcA and pSrcB buffer */ - inA1 = *pInA++; - inB1 = *pInB++; - /* Multiply and Accumlates */ - sum += inA1 * inB1; - - inA2 = *pInA++; - inB2 = *pInB++; - sum += inA2 * inB2; - - inA1 = *pInA++; - inB1 = *pInB++; - sum += inA1 * inB1; - - inA2 = *pInA++; - inB2 = *pInB++; - sum += inA2 * inB2; -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - colCnt--; - } - - /* process odd column samples */ -#if defined (ARM_MATH_DSP) - if (numColsA & 1U) { - inA1 = *pInA++; - inB1 = *pInB++; - inA2 = *pInA2++; - inB2 = *pInB2++; - sum += inA1 * inB1; - sum2 += inA1 * inB2; - sum3 += inA2 * inB1; - sum4 += inA2 * inB2; - } -#else - 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++; - - /* Decrement loop counter */ - colCnt--; - } -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Saturate and store result in destination buffer */ - *px++ = (q15_t) (sum >> 15); - -#if defined (ARM_MATH_DSP) - *px++ = (q15_t) (sum2 >> 15); - *px2++ = (q15_t) (sum3 >> 15); - *px2++ = (q15_t) (sum4 >> 15); - j += numRowsB * 2; -#endif - - /* Decrement column loop counter */ - col--; - - } - - i = i + numColsA; - -#if defined (ARM_MATH_DSP) - i = i + numColsA; - px = px2 + (numColsB & 1U); - px2 = px + numColsB; -#endif - - /* Decrement row loop counter */ - row--; - - } - - /* Compute any remaining odd row/column below */ - -#if defined (ARM_MATH_DSP) - - /* Compute remaining output column */ - if (numColsB & 1U) { - - /* Avoid redundant computation of last element */ - row = numRowsA & (~0x1); - - /* Point to remaining unfilled column in output matrix */ - px = pDst->pData + numColsB-1; - pInA = pSrcA->pData; - - /* row loop */ - while (row > 0) - { - - /* point to last column in matrix B */ - pInB = pSrcBT + numRowsB * (numColsB-1); - - /* Set variable sum, that acts as accumulator, to zero */ - sum = 0; - - /* Compute 4 columns at once */ - colCnt = numColsA >> 2U; - - /* matrix multiplication */ - while (colCnt > 0U) - { - inA1 = read_q15x2_ia ((q15_t **) &pInA); - inA2 = read_q15x2_ia ((q15_t **) &pInA); - inB1 = read_q15x2_ia ((q15_t **) &pInB); - inB2 = read_q15x2_ia ((q15_t **) &pInB); - - sum = __SMLAD(inA1, inB1, sum); - sum = __SMLAD(inA2, inB2, sum); - - /* Decrement loop counter */ - colCnt--; - } - - colCnt = numColsA & 3U; - while (colCnt > 0U) { - sum += (q31_t) (*pInA++) * (*pInB++); - colCnt--; - } - - /* Store result in destination buffer */ - *px = (q15_t) (sum >> 15); - px += numColsB; - - /* Decrement row loop counter */ - row--; - } - } - - /* Compute remaining output row */ - if (numRowsA & 1U) { - - /* point to last row in output matrix */ - px = pDst->pData + (numColsB) * (numRowsA-1); - - pInB = pSrcBT; - col = numColsB; - i = 0U; - - /* col loop */ - while (col > 0) - { - /* point to last row in matrix A */ - pInA = pSrcA->pData + (numRowsA-1) * numColsA; - - /* Set variable sum, that acts as accumulator, to zero */ - sum = 0; - - /* Compute 4 columns at once */ - colCnt = numColsA >> 2U; - - /* matrix multiplication */ - while (colCnt > 0U) - { - inA1 = read_q15x2_ia ((q15_t **) &pInA); - inA2 = read_q15x2_ia ((q15_t **) &pInA); - inB1 = read_q15x2_ia ((q15_t **) &pInB); - inB2 = read_q15x2_ia ((q15_t **) &pInB); - - sum = __SMLAD(inA1, inB1, sum); - sum = __SMLAD(inA2, inB2, sum); - - /* Decrement loop counter */ - colCnt--; - } - - colCnt = numColsA % 4U; - while (colCnt > 0U) { - sum += (q31_t) (*pInA++) * (*pInB++); - - colCnt--; - } - - /* Store result in destination buffer */ - *px++ = (q15_t) (sum >> 15); - - /* Decrement column loop counter */ - col--; - } - } - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -/** - @} end of MatrixMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_fast_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_fast_q31.c deleted file mode 100644 index 6f6bf38..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_fast_q31.c +++ /dev/null @@ -1,374 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_mult_fast_q31.c - * Description: Q31 matrix multiplication (fast variant) - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - -/** - @addtogroup MatrixMult - @{ - */ - -/** - @brief Q31 matrix multiplication (fast variant). - @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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Scaling and Overflow Behavior - The difference between the function \ref 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. - @remark - Refer to \ref 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 *pInA = pSrcA->pData; /* Input data matrix pointer A */ - q31_t *pInB = pSrcB->pData; /* Input data matrix pointer B */ - q31_t *pInA2; - q31_t *px; /* Temporary output data matrix pointer */ - q31_t *px2; - q31_t sum1, sum2, sum3, sum4; /* Accumulator */ - q31_t inA1, inA2, inB1, inB2; - 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 */ - uint32_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 */ - - { - px = pDst->pData; - - row = row >> 1U; - px2 = px + numColsB; - - /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ - /* row loop */ - while (row > 0U) - { - /* For every row wise process, column loop counter is to be initiated */ - col = numColsB; - - /* For every row wise process, pIn2 pointer is set to starting address of pSrcB data */ - pInB = pSrcB->pData; - - j = 0U; - - col = col >> 1U; - - /* column loop */ - while (col > 0U) - { - /* Set the variable sum, that acts as accumulator, to zero */ - sum1 = 0; - sum2 = 0; - sum3 = 0; - sum4 = 0; - - /* Initiate data pointers */ - pInA = pSrcA->pData + i; - pInB = pSrcB->pData + j; - pInA2 = pInA + numColsA; - - 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) */ - - inA1 = *pInA++; - inB1 = pInB[0]; - inA2 = *pInA2++; - inB2 = pInB[1]; - pInB += numColsB; - -#if defined (ARM_MATH_DSP) - sum1 = __SMMLA(inA1, inB1, sum1); - sum2 = __SMMLA(inA1, inB2, sum2); - sum3 = __SMMLA(inA2, inB1, sum3); - sum4 = __SMMLA(inA2, inB2, sum4); -#else - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA1 * inB1)) >> 32); - sum2 = (q31_t) ((((q63_t) sum2 << 32) + ((q63_t) inA1 * inB2)) >> 32); - sum3 = (q31_t) ((((q63_t) sum3 << 32) + ((q63_t) inA2 * inB1)) >> 32); - sum4 = (q31_t) ((((q63_t) sum4 << 32) + ((q63_t) inA2 * inB2)) >> 32); -#endif - - /* Decrement loop counter */ - colCnt--; - } - - /* Convert the result from 2.30 to 1.31 format and store in destination buffer */ - *px++ = sum1 << 1; - *px++ = sum2 << 1; - *px2++ = sum3 << 1; - *px2++ = sum4 << 1; - - j += 2; - - /* Decrement column loop counter */ - col--; - } - - i = i + (numColsA << 1U); - px = px2 + (numColsB & 1U); - px2 = px + numColsB; - - /* Decrement row loop counter */ - row--; - } - - /* Compute any remaining odd row/column below */ - - /* Compute remaining output column */ - if (numColsB & 1U) { - - /* Avoid redundant computation of last element */ - row = numRowsA & (~1U); - - /* Point to remaining unfilled column in output matrix */ - px = pDst->pData + numColsB-1; - pInA = pSrcA->pData; - - /* row loop */ - while (row > 0) - { - - /* point to last column in matrix B */ - pInB = pSrcB->pData + numColsB-1; - - /* Set variable sum1, that acts as accumulator, to zero */ - sum1 = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 columns at a time. */ - colCnt = numColsA >> 2U; - - /* matrix multiplication */ - while (colCnt > 0U) - { -#if defined (ARM_MATH_DSP) - sum1 = __SMMLA(*pInA++, *pInB, sum1); -#else - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); -#endif - pInB += numColsB; - -#if defined (ARM_MATH_DSP) - sum1 = __SMMLA(*pInA++, *pInB, sum1); -#else - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); -#endif - pInB += numColsB; - -#if defined (ARM_MATH_DSP) - sum1 = __SMMLA(*pInA++, *pInB, sum1); -#else - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); -#endif - pInB += numColsB; - -#if defined (ARM_MATH_DSP) - sum1 = __SMMLA(*pInA++, *pInB, sum1); -#else - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); -#endif - pInB += numColsB; - - /* Decrement loop counter */ - colCnt--; - } - - /* Loop unrolling: Compute remaining column */ - colCnt = numColsA % 4U; - -#else - - /* Initialize colCnt with number of columns */ - colCnt = numColsA; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (colCnt > 0U) { -#if defined (ARM_MATH_DSP) - sum1 = __SMMLA(*pInA++, *pInB, sum1); -#else - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); -#endif - pInB += numColsB; - - colCnt--; - } - - /* Convert the result from 2.30 to 1.31 format and store in destination buffer */ - *px = sum1 << 1; - px += numColsB; - - /* Decrement row loop counter */ - row--; - } - } - - /* Compute remaining output row */ - if (numRowsA & 1U) { - - /* point to last row in output matrix */ - px = pDst->pData + (numColsB) * (numRowsA-1); - - col = numColsB; - i = 0U; - - /* col loop */ - while (col > 0) - { - - /* point to last row in matrix A */ - pInA = pSrcA->pData + (numRowsA-1) * numColsA; - pInB = pSrcB->pData + i; - - /* Set variable sum1, that acts as accumulator, to zero */ - sum1 = 0; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 columns at a time. */ - colCnt = numColsA >> 2U; - - /* matrix multiplication */ - while (colCnt > 0U) - { - inA1 = *pInA++; - inA2 = *pInA++; - inB1 = *pInB; - pInB += numColsB; - inB2 = *pInB; - pInB += numColsB; -#if defined (ARM_MATH_DSP) - sum1 = __SMMLA(inA1, inB1, sum1); - sum1 = __SMMLA(inA2, inB2, sum1); -#else - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA1 * inB1)) >> 32); - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA2 * inB2)) >> 32); -#endif - - inA1 = *pInA++; - inA2 = *pInA++; - inB1 = *pInB; - pInB += numColsB; - inB2 = *pInB; - pInB += numColsB; -#if defined (ARM_MATH_DSP) - sum1 = __SMMLA(inA1, inB1, sum1); - sum1 = __SMMLA(inA2, inB2, sum1); -#else - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA1 * inB1)) >> 32); - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA2 * inB2)) >> 32); -#endif - - /* Decrement loop counter */ - colCnt--; - } - - /* Loop unrolling: Compute remaining column */ - colCnt = numColsA % 4U; - -#else - - /* Initialize colCnt with number of columns */ - colCnt = numColsA; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (colCnt > 0U) { -#if defined (ARM_MATH_DSP) - sum1 = __SMMLA(*pInA++, *pInB, sum1); -#else - sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); -#endif - pInB += numColsB; - - colCnt--; - } - - /* Saturate and store the result in the destination buffer */ - *px++ = sum1 << 1; - i++; - - /* Decrement col loop counter */ - col--; - } - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -/** - @} end of MatrixMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_q15.c deleted file mode 100644 index d0c45c0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_q15.c +++ /dev/null @@ -1,892 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_mult_q15.c - * Description: Q15 matrix multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Scaling and Overflow Behavior - The function is implemented using an internal 64-bit 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 \ref arm_mat_mult_fast_q15() for a faster but less precise version of this function. - */ -#if defined(ARM_MATH_MVEI) - -#define MVE_ASRL_SAT16(acc, shift) ((sqrshrl_sat48(acc, -(32-shift)) >> 32) & 0xffffffff) - -#define MATRIX_DIM2 2 -#define MATRIX_DIM3 3 -#define MATRIX_DIM4 4 - -__STATIC_INLINE arm_status arm_mat_mult_q15_2x2_mve( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst) -{ - q15_t *pInB = pSrcB->pData; /* input data matrix pointer B */ - q15_t *pInA = pSrcA->pData; /* input data matrix pointer A */ - q15_t *pOut = pDst->pData; /* output data matrix pointer */ - uint16x8_t vecColBOffs; - q15_t *pInA0 = pInA; - q15_t *pInA1 = pInA0 + MATRIX_DIM2; - q63_t acc0, acc1; - q15x8_t vecB, vecA0, vecA1; - mve_pred16_t p0 = vctp16q(MATRIX_DIM2); - - vecColBOffs = vidupq_u16((uint32_t)0, 2); /* MATRIX_DIM2 */ - - pInB = pSrcB->pData; - - vecB = vldrhq_gather_shifted_offset_z_s16((q15_t const *)pInB, vecColBOffs, p0); - - vecA0 = vldrhq_s16(pInA0); - vecA1 = vldrhq_s16(pInA1); - - acc0 = vmlaldavq(vecA0, vecB); - acc1 = vmlaldavq(vecA1, vecB); - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - - pOut[0 * MATRIX_DIM2] = (q15_t) __SSAT(acc0, 16); - pOut[1 * MATRIX_DIM2] = (q15_t) __SSAT(acc1, 16); - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrhq_gather_shifted_offset_z_s16(pInB, vecColBOffs, p0); - - acc0 = vmlaldavq(vecA0, vecB); - acc1 = vmlaldavq(vecA1, vecB); - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - - pOut[0 * MATRIX_DIM2] = (q15_t) __SSAT(acc0, 16); - pOut[1 * MATRIX_DIM2] = (q15_t) __SSAT(acc1, 16); - - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - - - -__STATIC_INLINE arm_status arm_mat_mult_q15_3x3_mve( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst) -{ - q15_t *pInB = pSrcB->pData; /* input data matrix pointer B */ - q15_t *pInA = pSrcA->pData; /* input data matrix pointer A */ - q15_t *pOut = pDst->pData; /* output data matrix pointer */ - uint16x8_t vecColBOffs; - q15_t *pInA0 = pInA; - q15_t *pInA1 = pInA0 + MATRIX_DIM3; - q15_t *pInA2 = pInA1 + MATRIX_DIM3; - q63_t acc0, acc1, acc2; - q15x8_t vecB, vecA0, vecA1, vecA2; - mve_pred16_t p0 = vctp16q(MATRIX_DIM3); - - vecColBOffs = vidupq_u16((uint32_t)0, 1); - vecColBOffs = vecColBOffs * MATRIX_DIM3; - - pInB = pSrcB->pData; - - vecB = vldrhq_gather_shifted_offset_z_s16((q15_t const *)pInB, vecColBOffs, p0); - - vecA0 = vldrhq_s16(pInA0); - vecA1 = vldrhq_s16(pInA1); - vecA2 = vldrhq_s16(pInA2); - - acc0 = vmlaldavq(vecA0, vecB); - acc1 = vmlaldavq(vecA1, vecB); - acc2 = vmlaldavq(vecA2, vecB); - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - acc2 = asrl(acc2, 15); - - pOut[0 * MATRIX_DIM3] = (q15_t) __SSAT(acc0, 16); - pOut[1 * MATRIX_DIM3] = (q15_t) __SSAT(acc1, 16); - pOut[2 * MATRIX_DIM3] = (q15_t) __SSAT(acc2, 16); - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrhq_gather_shifted_offset_z_s16(pInB, vecColBOffs, p0); - - acc0 = vmlaldavq(vecA0, vecB); - acc1 = vmlaldavq(vecA1, vecB); - acc2 = vmlaldavq(vecA2, vecB); - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - acc2 = asrl(acc2, 15); - - pOut[0 * MATRIX_DIM3] = (q15_t) __SSAT(acc0, 16); - pOut[1 * MATRIX_DIM3] = (q15_t) __SSAT(acc1, 16); - pOut[2 * MATRIX_DIM3] = (q15_t) __SSAT(acc2, 16); - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrhq_gather_shifted_offset_z_s16(pInB, vecColBOffs, p0); - - acc0 = vmlaldavq(vecA0, vecB); - acc1 = vmlaldavq(vecA1, vecB); - acc2 = vmlaldavq(vecA2, vecB); - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - acc2 = asrl(acc2, 15); - - pOut[0 * MATRIX_DIM3] = (q15_t) __SSAT(acc0, 16); - pOut[1 * MATRIX_DIM3] = (q15_t) __SSAT(acc1, 16); - pOut[2 * MATRIX_DIM3] = (q15_t) __SSAT(acc2, 16); - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - - -__STATIC_INLINE arm_status arm_mat_mult_q15_4x4_mve( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst) -{ - q15_t *pInB = pSrcB->pData; /* input data matrix pointer B */ - q15_t *pInA = pSrcA->pData; /* input data matrix pointer A */ - q15_t *pOut = pDst->pData; /* output data matrix pointer */ - uint16x8_t vecColBOffs; - q15_t *pInA0 = pInA; - q15_t *pInA1 = pInA0 + MATRIX_DIM4; - q15_t *pInA2 = pInA1 + MATRIX_DIM4; - q15_t *pInA3 = pInA2 + MATRIX_DIM4; - q63_t acc0, acc1, acc2, acc3; - q15x8_t vecB, vecA0, vecA1, vecA2, vecA3; - mve_pred16_t p0 = vctp16q(MATRIX_DIM4); - - vecColBOffs = vidupq_u16((uint32_t)0, 4); - - pInB = pSrcB->pData; - - vecB = vldrhq_gather_shifted_offset_z_s16((q15_t const *)pInB, vecColBOffs, p0); - - vecA0 = vldrhq_s16(pInA0); - vecA1 = vldrhq_s16(pInA1); - vecA2 = vldrhq_s16(pInA2); - vecA3 = vldrhq_s16(pInA3); - - acc0 = vmlaldavq(vecA0, vecB); - acc1 = vmlaldavq(vecA1, vecB); - acc2 = vmlaldavq(vecA2, vecB); - acc3 = vmlaldavq(vecA3, vecB); - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - acc2 = asrl(acc2, 15); - acc3 = asrl(acc3, 15); - - pOut[0 * MATRIX_DIM4] = (q15_t) __SSAT(acc0, 16); - pOut[1 * MATRIX_DIM4] = (q15_t) __SSAT(acc1, 16); - pOut[2 * MATRIX_DIM4] = (q15_t) __SSAT(acc2, 16); - pOut[3 * MATRIX_DIM4] = (q15_t) __SSAT(acc3, 16); - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrhq_gather_shifted_offset_z_s16(pInB, vecColBOffs, p0); - - acc0 = vmlaldavq(vecA0, vecB); - acc1 = vmlaldavq(vecA1, vecB); - acc2 = vmlaldavq(vecA2, vecB); - acc3 = vmlaldavq(vecA3, vecB); - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - acc2 = asrl(acc2, 15); - acc3 = asrl(acc3, 15); - - pOut[0 * MATRIX_DIM4] = (q15_t) __SSAT(acc0, 16); - pOut[1 * MATRIX_DIM4] = (q15_t) __SSAT(acc1, 16); - pOut[2 * MATRIX_DIM4] = (q15_t) __SSAT(acc2, 16); - pOut[3 * MATRIX_DIM4] = (q15_t) __SSAT(acc3, 16); - - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrhq_gather_shifted_offset_z_s16(pInB, vecColBOffs, p0); - - acc0 = vmlaldavq(vecA0, vecB); - acc1 = vmlaldavq(vecA1, vecB); - acc2 = vmlaldavq(vecA2, vecB); - acc3 = vmlaldavq(vecA3, vecB); - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - acc2 = asrl(acc2, 15); - acc3 = asrl(acc3, 15); - - pOut[0 * MATRIX_DIM4] = (q15_t) __SSAT(acc0, 16); - pOut[1 * MATRIX_DIM4] = (q15_t) __SSAT(acc1, 16); - pOut[2 * MATRIX_DIM4] = (q15_t) __SSAT(acc2, 16); - pOut[3 * MATRIX_DIM4] = (q15_t) __SSAT(acc3, 16); - - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrhq_gather_shifted_offset_z_s16(pInB, vecColBOffs, p0); - - acc0 = vmlaldavq(vecA0, vecB); - acc1 = vmlaldavq(vecA1, vecB); - acc2 = vmlaldavq(vecA2, vecB); - acc3 = vmlaldavq(vecA3, vecB); - - acc0 = asrl(acc0, 15); - acc1 = asrl(acc1, 15); - acc2 = asrl(acc2, 15); - acc3 = asrl(acc3, 15); - - pOut[0 * MATRIX_DIM4] = (q15_t) __SSAT(acc0, 16); - pOut[1 * MATRIX_DIM4] = (q15_t) __SSAT(acc1, 16); - pOut[2 * MATRIX_DIM4] = (q15_t) __SSAT(acc2, 16); - pOut[3 * MATRIX_DIM4] = (q15_t) __SSAT(acc3, 16); - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - -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) -{ - q15_t *pInB = pSrcB->pData; /* input data matrix pointer B */ - q15_t *pInA = pSrcA->pData; /* input data matrix pointer A */ - q15_t *pOut = pDst->pData; /* output data matrix pointer */ - 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 col, i = 0U, row = numRowsA, colCnt; /* loop counters */ - uint16x8_t vecOffs, vecColBOffs; - uint32_t blkCnt,rowCnt; /* loop counters */ - arm_status status; /* Status of matrix multiplication */ - (void)pState; - -#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 - { - /* small squared matrix specialized routines */ - if(numRowsA == numColsB && numColsB == numColsA) { - - if (numRowsA == 1) - { - q63_t sum; - sum = pInA[0] * pInB[0]; - pOut[0] = (q15_t) __SSAT((sum >> 15), 16); - return (ARM_MATH_SUCCESS); - } - else if(numRowsA == 2) - return arm_mat_mult_q15_2x2_mve(pSrcA, pSrcB, pDst); - else if(numRowsA == 3) - return arm_mat_mult_q15_3x3_mve(pSrcA, pSrcB, pDst); - else if (numRowsA == 4) - return arm_mat_mult_q15_4x4_mve(pSrcA, pSrcB, pDst); - } - - vecColBOffs = vidupq_u16((uint32_t)0, 1); - vecColBOffs = vecColBOffs * (uint16_t) (numColsB); - - /* - * The following loop performs the dot-product of each row in pSrcA with each column in pSrcB - */ - - /* - * row loop - */ - rowCnt = row >> 2; - while (rowCnt > 0U) - { - /* - * Output pointer is set to starting address of the row being processed - */ - px = pOut + i; - i = i + 4 * numColsB; - /* - * For every row wise process, the column loop counter is to be initiated - */ - col = numColsB; - /* - * For every row wise process, the pInB pointer is set - * to the starting address of the pSrcB data - */ - pInB = pSrcB->pData; - /* - * column loop - */ - while (col > 0U) - { - /* - * generate 4 columns elements - */ - /* - * Matrix A columns number of MAC operations are to be performed - */ - colCnt = numColsA; - - q15_t const *pSrcA0Vec, *pSrcA1Vec, *pSrcA2Vec, *pSrcA3Vec; - q15_t *pInA0 = pInA; - q15_t *pInA1 = pInA0 + numColsA; - q15_t *pInA2 = pInA1 + numColsA; - q15_t *pInA3 = pInA2 + numColsA; - q63_t acc0, acc1, acc2, acc3; - - acc0 = 0LL; - acc1 = 0LL; - acc2 = 0LL; - acc3 = 0LL; - - pSrcA0Vec = (q15_t const *) pInA0; - pSrcA1Vec = (q15_t const *) pInA1; - pSrcA2Vec = (q15_t const *) pInA2; - pSrcA3Vec = (q15_t const *) pInA3; - - vecOffs = vecColBOffs; - - blkCnt = (numColsA) >> 3; - while (blkCnt > 0U) - { - q15x8_t vecB, vecA; - - vecB = vldrhq_gather_shifted_offset((int16_t const *)pInB, vecOffs); - vecOffs = vecOffs + (uint16_t) (numColsB * 8); - - vecA = vld1q(pSrcA0Vec); pSrcA0Vec += 8; - acc0 = vmlaldavaq(acc0, vecA, vecB); - vecA = vld1q(pSrcA1Vec); pSrcA1Vec += 8; - acc1 = vmlaldavaq(acc1, vecA, vecB); - vecA = vld1q(pSrcA2Vec); pSrcA2Vec += 8; - acc2 = vmlaldavaq(acc2, vecA, vecB); - vecA = vld1q(pSrcA3Vec); pSrcA3Vec += 8; - acc3 = vmlaldavaq(acc3, vecA, vecB); - blkCnt--; - - } - /* - * tail - */ - blkCnt = numColsA & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - q15x8_t vecB, vecA; - - vecB = vldrhq_gather_shifted_offset((int16_t const *)pInB, vecOffs); - vecOffs = vecOffs + (uint16_t) (numColsB * 8); - - vecA = vld1q(pSrcA0Vec); - acc0 = vmlaldavaq_p(acc0, vecA, vecB, p0); - vecA = vld1q(pSrcA1Vec); - acc1 = vmlaldavaq_p(acc1, vecA, vecB, p0); - vecA = vld1q(pSrcA2Vec); - acc2 = vmlaldavaq_p(acc2, vecA, vecB, p0); - vecA = vld1q(pSrcA3Vec); - acc3 = vmlaldavaq_p(acc3, vecA, vecB, p0); - } - - px[0] = (q15_t)MVE_ASRL_SAT16(acc0, 15); - px[1 * numColsB] = (q15_t)MVE_ASRL_SAT16(acc1, 15); - px[2 * numColsB] = (q15_t)MVE_ASRL_SAT16(acc2, 15); - px[3 * numColsB] = (q15_t)MVE_ASRL_SAT16(acc3, 15); - px++; - /* - * Decrement the column loop counter - */ - col--; - /* - * Update the pointer pInB to point to the starting address of the next column - */ - pInB = pSrcB->pData + (numColsB - col); - } - - /* - * Update the pointer pInA to point to the starting address of the next row - */ - pInA += (numColsA * 4); - /* - * Decrement the row loop counter - */ - rowCnt --; - - } - - rowCnt = row & 3; - while (rowCnt > 0U) - { - /* - * Output pointer is set to starting address of the row being processed - */ - px = pOut + i; - i = i + numColsB; - /* - * For every row wise process, the column loop counter is to be initiated - */ - col = numColsB; - /* - * For every row wise process, the pInB pointer is set - * to the starting address of the pSrcB data - */ - pInB = pSrcB->pData; - /* - * column loop - */ - while (col > 0U) - { - /* - * generate 4 columns elements - */ - /* - * Matrix A columns number of MAC operations are to be performed - */ - colCnt = numColsA; - - q15_t const *pSrcA0Vec; - q15_t *pInA0 = pInA; - q63_t acc0; - - acc0 = 0LL; - - pSrcA0Vec = (q15_t const *) pInA0; - - vecOffs = vecColBOffs; - - blkCnt = (numColsA) >> 3; - while (blkCnt > 0U) - { - q15x8_t vecB, vecA; - - vecB = vldrhq_gather_shifted_offset((int16_t const *)pInB, vecOffs); - vecOffs = vecOffs + (uint16_t) (numColsB * 8); - - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 8; - acc0 = vmlaldavaq(acc0, vecA, vecB); - - blkCnt--; - - } - /* - * tail - */ - blkCnt = numColsA & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - q15x8_t vecB, vecA; - - vecB = vldrhq_gather_shifted_offset((int16_t const *)pInB, vecOffs); - vecOffs = vecOffs + (uint16_t) (numColsB * 8); - - vecA = vld1q(pSrcA0Vec); - acc0 = vmlaldavaq_p(acc0, vecA, vecB, p0); - - } - - px[0] = (q15_t)MVE_ASRL_SAT16(acc0, 15); - - px++; - /* - * Decrement the column loop counter - */ - col--; - /* - * Update the pointer pInB to point to the starting address of the next column - */ - pInB = pSrcB->pData + (numColsB - col); - } - - /* - * Update the pointer pInA to point to the starting address of the next row - */ - pInA += (numColsA ); - rowCnt--; - } - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -} -#else -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) -{ - q63_t sum; /* Accumulator */ - -#if defined (ARM_MATH_DSP) /* != CM0 */ - - 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 */ - uint32_t col, i = 0U, row = numRowsB, colCnt; /* Loop counters */ - arm_status status; /* Status of matrix multiplication */ - - q31_t in; /* Temporary variable to hold the input value */ - q31_t inA1, inB1, inA2, inB2; - -#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 - { - /* The pointer px is set to starting address of column being processed */ - px = pSrcBT + i; - - /* Apply loop unrolling and exchange columns with row elements */ - col = numColsB >> 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 (col > 0U) - { - /* Read two elements from row */ - in = read_q15x2_ia ((q15_t **) &pInB); - - /* Unpack and store one element in 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 pointer px to point to next row of transposed matrix */ - px += numRowsB; - - /* Unpack and store second element in 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 pointer px to point to next row of transposed matrix */ - px += numRowsB; - - /* Read two elements from row */ - in = read_q15x2_ia ((q15_t **) &pInB); - - /* Unpack and store one element in 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 */ - px += numRowsB; - -#ifndef ARM_MATH_BIG_ENDIAN - *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); -#else - *px = (q15_t) in; -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - px += numRowsB; - - /* Decrement 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 input element in destination */ - *px = *pInB++; - - /* Update pointer px to point to next row of transposed matrix */ - px += numRowsB; - - /* Decrement column loop counter */ - col--; - } - - i++; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - - /* Reset variables for usage in 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, column loop counter is to be initiated */ - col = numColsB; - - /* For every row wise process, pIn2 pointer is set to starting address of transposed pSrcB data */ - pInB = pSrcBT; - - /* column loop */ - do - { - /* Set variable sum, that acts as accumulator, to zero */ - sum = 0; - - /* Initiate pointer pInA to point to starting address of column being processed */ - pInA = pSrcA->pData + i; - - /* Apply loop unrolling and compute 2 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) */ - - /* read real and imag values from pSrcA and pSrcB buffer */ - inA1 = read_q15x2_ia ((q15_t **) &pInA); - inB1 = read_q15x2_ia ((q15_t **) &pInB); - - inA2 = read_q15x2_ia ((q15_t **) &pInA); - inB2 = read_q15x2_ia ((q15_t **) &pInB); - - /* Multiply and Accumlates */ - sum = __SMLALD(inA1, inB1, sum); - sum = __SMLALD(inA2, inB2, sum); - - /* Decrement loop counter */ - colCnt--; - } - - /* process remaining 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 += *pInA++ * *pInB++; - - /* Decrement loop counter */ - colCnt--; - } - - /* Saturate and store result in destination buffer */ - *px = (q15_t) (__SSAT((sum >> 15), 16)); - px++; - - /* Decrement column loop counter */ - col--; - - } while (col > 0U); - - i = i + numColsA; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - -#else /* #if defined (ARM_MATH_DSP) */ - - 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 */ - uint32_t col, i = 0U, row = numRowsA, colCnt; /* Loop counters */ - arm_status status; /* Status of matrix multiplication */ - (void)pState; - -#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, column loop counter is to be initiated */ - col = numColsB; - - /* For every row wise process, pIn2 pointer is set to starting address of pSrcB data */ - pIn2 = pSrcB->pData; - - /* column loop */ - do - { - /* Set the variable sum, that acts as accumulator, to zero */ - sum = 0; - - /* Initiate pointer pIn1 to point to 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 multiply-accumulates */ - sum += (q31_t) * pIn1++ * *pIn2; - pIn2 += numColsB; - - /* Decrement loop counter */ - colCnt--; - } - - /* Convert result from 34.30 to 1.15 format and store saturated value in destination buffer */ - - /* Saturate and store result in destination buffer */ - *px++ = (q15_t) __SSAT((sum >> 15), 16); - - /* Decrement column loop counter */ - col--; - - /* Update pointer pIn2 to point to starting address of next column */ - pIn2 = pInB + (numColsB - col); - - } while (col > 0U); - - /* Update pointer pSrcA to point to starting address of next row */ - i = i + numColsB; - pInA = pInA + numColsA; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_q31.c deleted file mode 100644 index 6a7b34f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_mult_q31.c +++ /dev/null @@ -1,763 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_mult_q31.c - * Description: Q31 matrix multiplication - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @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. 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. - @remark - Refer to \ref arm_mat_mult_fast_q31() for a faster but less precise implementation of this function. - */ -#if defined(ARM_MATH_MVEI) - -#define MATRIX_DIM2 2 -#define MATRIX_DIM3 3 -#define MATRIX_DIM4 4 - -__STATIC_INLINE arm_status arm_mat_mult_q31_2x2_mve( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst) -{ - q31_t *pInB = 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 */ - uint32x4_t vecColBOffs; - q31_t *pInA0 = pInA; - q31_t *pInA1 = pInA0 + MATRIX_DIM2; - q63_t acc0, acc1; - q31x4_t vecB, vecA0, vecA1; - /* enable predication to disable half of vector elements */ - mve_pred16_t p0 = vctp32q(MATRIX_DIM2); - - vecColBOffs = vidupq_u32((uint32_t)0, 1); - vecColBOffs = vecColBOffs * MATRIX_DIM2; - - pInB = pSrcB->pData; - - /* load 1st B column (partial load) */ - vecB = vldrwq_gather_shifted_offset_z_s32(pInB, vecColBOffs, p0); - - /* load A rows */ - vecA0 = vldrwq_s32(pInA0); - vecA1 = vldrwq_s32(pInA1); - - acc0 = vrmlaldavhq(vecA0, vecB); - acc1 = vrmlaldavhq(vecA1, vecB); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - - pOut[0 * MATRIX_DIM2] = (q31_t) acc0; - pOut[1 * MATRIX_DIM2] = (q31_t) acc1; - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrwq_gather_shifted_offset_z_s32(pInB, vecColBOffs, p0); - - acc0 = vrmlaldavhq(vecA0, vecB); - acc1 = vrmlaldavhq(vecA1, vecB); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - - pOut[0 * MATRIX_DIM2] = (q31_t) acc0; - pOut[1 * MATRIX_DIM2] = (q31_t) acc1; - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - - - -__STATIC_INLINE arm_status arm_mat_mult_q31_3x3_mve( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst) -{ - q31_t *pInB = 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 */ - uint32x4_t vecColBOffs; - q31_t *pInA0 = pInA; - q31_t *pInA1 = pInA0 + MATRIX_DIM3; - q31_t *pInA2 = pInA1 + MATRIX_DIM3; - q63_t acc0, acc1, acc2; - q31x4_t vecB, vecA; - /* enable predication to disable last (4th) vector element */ - mve_pred16_t p0 = vctp32q(MATRIX_DIM3); - - vecColBOffs = vidupq_u32((uint32_t)0, 1); - vecColBOffs = vecColBOffs * MATRIX_DIM3; - - pInB = pSrcB->pData; - - vecB = vldrwq_gather_shifted_offset_z_s32(pInB, vecColBOffs, p0); - - vecA = vldrwq_s32(pInA0); - acc0 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA1); - acc1 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA2); - acc2 = vrmlaldavhq(vecA, vecB); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - - pOut[0 * MATRIX_DIM3] = (q31_t) acc0; - pOut[1 * MATRIX_DIM3] = (q31_t) acc1; - pOut[2 * MATRIX_DIM3] = (q31_t) acc2; - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrwq_gather_shifted_offset_z_s32(pInB, vecColBOffs, p0); - - vecA = vldrwq_s32(pInA0); - acc0 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA1); - acc1 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA2); - acc2 = vrmlaldavhq(vecA, vecB); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - - pOut[0 * MATRIX_DIM3] = (q31_t) acc0; - pOut[1 * MATRIX_DIM3] = (q31_t) acc1; - pOut[2 * MATRIX_DIM3] = (q31_t) acc2; - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrwq_gather_shifted_offset_z_s32(pInB, vecColBOffs, p0); - - vecA = vldrwq_s32(pInA0); - acc0 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA1); - acc1 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA2); - acc2 = vrmlaldavhq(vecA, vecB); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - - pOut[0 * MATRIX_DIM3] = (q31_t) acc0; - pOut[1 * MATRIX_DIM3] = (q31_t) acc1; - pOut[2 * MATRIX_DIM3] = (q31_t) acc2; - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - -__STATIC_INLINE arm_status arm_mat_mult_q31_4x4_mve( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst) -{ - q31_t *pInB = 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 */ - uint32x4_t vecColBOffs; - q31_t *pInA0 = pInA; - q31_t *pInA1 = pInA0 + MATRIX_DIM4; - q31_t *pInA2 = pInA1 + MATRIX_DIM4; - q31_t *pInA3 = pInA2 + MATRIX_DIM4; - q63_t acc0, acc1, acc2, acc3; - q31x4_t vecB, vecA; - - vecColBOffs = vidupq_u32((uint32_t)0, 4); - - pInB = pSrcB->pData; - - vecB = vldrwq_gather_shifted_offset_s32(pInB, vecColBOffs); - - vecA = vldrwq_s32(pInA0); - acc0 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA1); - acc1 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA2); - acc2 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA3); - acc3 = vrmlaldavhq(vecA, vecB); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - acc3 = asrl(acc3, 23); - - pOut[0 * MATRIX_DIM4] = (q31_t) acc0; - pOut[1 * MATRIX_DIM4] = (q31_t) acc1; - pOut[2 * MATRIX_DIM4] = (q31_t) acc2; - pOut[3 * MATRIX_DIM4] = (q31_t) acc3; - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrwq_gather_shifted_offset_s32(pInB, vecColBOffs); - - vecA = vldrwq_s32(pInA0); - acc0 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA1); - acc1 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA2); - acc2 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA3); - acc3 = vrmlaldavhq(vecA, vecB); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - acc3 = asrl(acc3, 23); - - pOut[0 * MATRIX_DIM4] = (q31_t) acc0; - pOut[1 * MATRIX_DIM4] = (q31_t) acc1; - pOut[2 * MATRIX_DIM4] = (q31_t) acc2; - pOut[3 * MATRIX_DIM4] = (q31_t) acc3; - - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrwq_gather_shifted_offset_s32(pInB, vecColBOffs); - - vecA = vldrwq_s32(pInA0); - acc0 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA1); - acc1 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA2); - acc2 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA3); - acc3 = vrmlaldavhq(vecA, vecB); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - acc3 = asrl(acc3, 23); - - pOut[0 * MATRIX_DIM4] = (q31_t) acc0; - pOut[1 * MATRIX_DIM4] = (q31_t) acc1; - pOut[2 * MATRIX_DIM4] = (q31_t) acc2; - pOut[3 * MATRIX_DIM4] = (q31_t) acc3; - - pOut++; - - /* move to next B column */ - pInB = pInB + 1; - - vecB = vldrwq_gather_shifted_offset_s32(pInB, vecColBOffs); - - vecA = vldrwq_s32(pInA0); - acc0 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA1); - acc1 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA2); - acc2 = vrmlaldavhq(vecA, vecB); - vecA = vldrwq_s32(pInA3); - acc3 = vrmlaldavhq(vecA, vecB); - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - acc3 = asrl(acc3, 23); - - pOut[0 * MATRIX_DIM4] = (q31_t) acc0; - pOut[1 * MATRIX_DIM4] = (q31_t) acc1; - pOut[2 * MATRIX_DIM4] = (q31_t) acc2; - pOut[3 * MATRIX_DIM4] = (q31_t) acc3; - /* - * Return to application - */ - return (ARM_MATH_SUCCESS); -} - -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 const *pInB = (q31_t const *)pSrcB->pData; /* input data matrix pointer B */ - q31_t const *pInA = (q31_t const *)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 */ - uint16_t col, i = 0U, row = numRowsA, colCnt; /* loop counters */ - arm_status status; /* status of matrix multiplication */ - uint32x4_t vecOffs, vecColBOffs; - uint32_t blkCnt, rowCnt; /* loop counters */ - - #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 */ - - { - /* small squared matrix specialized routines */ - if(numRowsA == numColsB && numColsB == numColsA) { - if (numRowsA == 1) - { - q63_t sum = (q63_t) *pInA * *pInB; - pOut[0] = (q31_t)(sum >> 31); - return (ARM_MATH_SUCCESS); - } - else if(numRowsA == 2) - return arm_mat_mult_q31_2x2_mve(pSrcA, pSrcB, pDst); - else if(numRowsA == 3) - return arm_mat_mult_q31_3x3_mve(pSrcA, pSrcB, pDst); - else if (numRowsA == 4) - return arm_mat_mult_q31_4x4_mve(pSrcA, pSrcB, pDst); - } - - vecColBOffs = vidupq_u32((uint32_t)0, 1); - vecColBOffs = vecColBOffs * (uint32_t) (numColsB); - - /* - * The following loop performs the dot-product of each row in pSrcA with each column in pSrcB - */ - - /* - * row loop - */ - rowCnt = row >> 2; - while (rowCnt > 0U) - { - /* - * Output pointer is set to starting address of the row being processed - */ - px = pOut + i; - i = i + 4 * numColsB; - /* - * For every row wise process, the column loop counter is to be initiated - */ - col = numColsB; - /* - * For every row wise process, the pInB pointer is set - * to the starting address of the pSrcB data - */ - pInB = (q31_t const *)pSrcB->pData; - /* - * column loop - */ - while (col > 0U) - { - /* - * generate 4 columns elements - */ - /* - * Matrix A columns number of MAC operations are to be performed - */ - colCnt = numColsA; - - q31_t const *pSrcA0Vec, *pSrcA1Vec, *pSrcA2Vec, *pSrcA3Vec; - q31_t const *pInA0 = pInA; - q31_t const *pInA1 = pInA0 + numColsA; - q31_t const *pInA2 = pInA1 + numColsA; - q31_t const *pInA3 = pInA2 + numColsA; - q63_t acc0, acc1, acc2, acc3; - - acc0 = 0LL; - acc1 = 0LL; - acc2 = 0LL; - acc3 = 0LL; - - pSrcA0Vec = (q31_t const *) pInA0; - pSrcA1Vec = (q31_t const *) pInA1; - pSrcA2Vec = (q31_t const *) pInA2; - pSrcA3Vec = (q31_t const *) pInA3; - - vecOffs = vecColBOffs; - - /* process 1 x 4 block output */ - blkCnt = numColsA >> 2; - while (blkCnt > 0U) - { - q31x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset(pInB, vecOffs); - /* move Matrix B read offsets, 4 rows down */ - vecOffs = vecOffs + (uint32_t) (numColsB * 4); - - vecA = vld1q(pSrcA0Vec); pSrcA0Vec += 4; - acc0 = vrmlaldavhaq(acc0, vecA, vecB); - vecA = vld1q(pSrcA1Vec); pSrcA1Vec += 4; - acc1 = vrmlaldavhaq(acc1, vecA, vecB); - vecA = vld1q(pSrcA2Vec); pSrcA2Vec += 4; - acc2 = vrmlaldavhaq(acc2, vecA, vecB); - vecA = vld1q(pSrcA3Vec); pSrcA3Vec += 4; - acc3 = vrmlaldavhaq(acc3, vecA, vecB); - blkCnt--; - } - - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numColsA & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - q31x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset_z(pInB, vecOffs, p0); - //vecOffs = vecOffs + (uint32_t) (numColsB * 4); - - vecA = vld1q(pSrcA0Vec); pSrcA0Vec += 4; - acc0 = vrmlaldavhaq(acc0, vecA, vecB); - vecA = vld1q(pSrcA1Vec); pSrcA1Vec += 4; - acc1 = vrmlaldavhaq(acc1, vecA, vecB); - vecA = vld1q(pSrcA2Vec); pSrcA2Vec += 4; - acc2 = vrmlaldavhaq(acc2, vecA, vecB); - vecA = vld1q(pSrcA3Vec); pSrcA3Vec += 4; - acc3 = vrmlaldavhaq(acc3, vecA, vecB); - } - - acc0 = asrl(acc0, 23); - acc1 = asrl(acc1, 23); - acc2 = asrl(acc2, 23); - acc3 = asrl(acc3, 23); - - px[0] = (q31_t) acc0; - px[1 * numColsB] = (q31_t) acc1; - px[2 * numColsB] = (q31_t) acc2; - px[3 * numColsB] = (q31_t) acc3; - px++; - /* - * Decrement the column loop counter - */ - col--; - /* - * Update the pointer pInB to point to the starting address of the next column - */ - pInB = (q31_t const *)pSrcB->pData + (numColsB - col); - } - - /* - * Update the pointer pInA to point to the starting address of the next row - */ - pInA += (numColsA * 4); - /* - * Decrement the row loop counter - */ - rowCnt --; - - } - rowCnt = row & 3; - while (rowCnt > 0U) - { - /* - * Output pointer is set to starting address of the row being processed - */ - px = pOut + i; - i = i + numColsB; - /* - * For every row wise process, the column loop counter is to be initiated - */ - col = numColsB; - /* - * For every row wise process, the pInB pointer is set - * to the starting address of the pSrcB data - */ - pInB = (q31_t const *)pSrcB->pData; - /* - * column loop - */ - while (col > 0U) - { - /* - * generate 4 columns elements - */ - /* - * Matrix A columns number of MAC operations are to be performed - */ - colCnt = numColsA; - - q31_t const *pSrcA0Vec; - q31_t const *pInA0 = pInA; - q63_t acc0; - - acc0 = 0LL; - - - pSrcA0Vec = (q31_t const *) pInA0; - - vecOffs = vecColBOffs; - - /* process 1 x 4 block output */ - blkCnt = numColsA >> 2; - while (blkCnt > 0U) - { - q31x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset(pInB, vecOffs); - /* move Matrix B read offsets, 4 rows down */ - vecOffs = vecOffs + (uint32_t) (numColsB * 4); - - vecA = vld1q(pSrcA0Vec); pSrcA0Vec += 4; - acc0 = vrmlaldavhaq(acc0, vecA, vecB); - - blkCnt--; - } - - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numColsA & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - q31x4_t vecB, vecA; - - vecB = vldrwq_gather_shifted_offset_z(pInB, vecOffs, p0); - //vecOffs = vecOffs + (uint32_t) (numColsB * 4); - - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vrmlaldavhaq(acc0, vecA, vecB); - - } - - acc0 = asrl(acc0, 23); - - - px[0] = (q31_t) acc0; - px++; - /* - * Decrement the column loop counter - */ - col--; - /* - * Update the pointer pInB to point to the starting address of the next column - */ - pInB = (q31_t const *)pSrcB->pData + (numColsB - col); - } - - /* - * Update the pointer pInA to point to the starting address of the next row - */ - pInA += numColsA; - /* - * Decrement the row loop counter - */ - rowCnt--; - } - - /* - * set status as ARM_MATH_SUCCESS - */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -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 *pInB = pSrcB->pData; /* Input data matrix pointer B */ - 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 */ - uint32_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 row being processed */ - px = pOut + i; - - /* For every row wise process, column loop counter is to be initiated */ - col = numColsB; - - /* For every row wise process, pIn2 pointer is set to starting address of pSrcB data */ - pIn2 = pSrcB->pData; - - /* column loop */ - do - { - /* Set the variable sum, that acts as accumulator, to zero */ - sum = 0; - - /* Initialize pointer pIn1 to point to starting address of column being processed */ - pIn1 = pInA; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 MACs at a time. */ - 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) */ - - /* Perform the multiply-accumulates */ - sum += (q63_t) *pIn1++ * *pIn2; - pIn2 += numColsB; - - sum += (q63_t) *pIn1++ * *pIn2; - pIn2 += numColsB; - - sum += (q63_t) *pIn1++ * *pIn2; - pIn2 += numColsB; - - sum += (q63_t) *pIn1++ * *pIn2; - pIn2 += numColsB; - - /* Decrement loop counter */ - colCnt--; - } - - /* Loop unrolling: Compute remaining MACs */ - colCnt = numColsA % 0x4U; - -#else - - /* Initialize cntCnt with number of columns */ - colCnt = numColsA; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - 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 loop counter */ - colCnt--; - } - - /* Convert result from 2.62 to 1.31 format and store in destination buffer */ - *px++ = (q31_t) (sum >> 31); - - /* Decrement column loop counter */ - col--; - - /* Update pointer pIn2 to point to starting address of next column */ - pIn2 = pInB + (numColsB - col); - - } while (col > 0U); - - /* Update pointer pInA to point to starting address of next row */ - i = i + numColsB; - pInA = pInA + numColsA; - - /* Decrement row loop counter */ - row--; - - } while (row > 0U); - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixMult group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_f32.c deleted file mode 100644 index 51c761b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_f32.c +++ /dev/null @@ -1,287 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_scale_f32.c - * Description: Multiplies a floating-point matrix by a scalar - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - @param[in] scale scale factor to be applied - @param[out] pDst points to output matrix structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -arm_status arm_mat_scale_f32( - const arm_matrix_instance_f32 * pSrc, - float32_t scale, - arm_matrix_instance_f32 * pDst) -{ - arm_status status; /* status of matrix scaling */ - #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 */ - { - 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 */ - f32x4_t vecIn, vecOut; - float32_t const *pInVec; - - pInVec = (float32_t const *) pIn; - /* - * Total number of samples in the input matrix - */ - numSamples = (uint32_t) pSrc->numRows * pSrc->numCols; - blkCnt = numSamples >> 2; - while (blkCnt > 0U) - { - /* - * C(m,n) = A(m,n) * scale - * Scaling and results are stored in the destination buffer. - */ - vecIn = vld1q(pInVec); - pInVec += 4; - - vecOut = vecIn * scale; - - vst1q(pOut, vecOut); - pOut += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = numSamples & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecIn = vld1q(pInVec); - vecOut = vecIn * scale; - - vstrwq_p(pOut, vecOut, p0); - } - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); - -} -#else -#if defined(ARM_MATH_NEON_EXPERIMENTAL) -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 */ - - -#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 */ - { - float32x4_t vec1; - float32x4_t res; - - /* Total number of samples in the input matrix */ - numSamples = (uint32_t) pSrc->numRows * pSrc->numCols; - - blkCnt = numSamples >> 2; - - /* 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. */ - vec1 = vld1q_f32(pIn); - res = vmulq_f32(vec1, vdupq_n_f32(scale)); - vst1q_f32(pOut, res); - - /* 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; - - 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); -} -#else -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 */ - -#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 input matrix */ - numSamples = (uint32_t) pSrc->numRows * pSrc->numCols; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) * scale */ - - /* Scale and store result in destination buffer. */ - *pOut++ = (*pIn++) * scale; - *pOut++ = (*pIn++) * scale; - *pOut++ = (*pIn++) * scale; - *pOut++ = (*pIn++) * scale; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) * scale */ - - /* Scale and store result in destination buffer. */ - *pOut++ = (*pIn++) * scale; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of MatrixScale group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_q15.c deleted file mode 100644 index 6177ecd..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_q15.c +++ /dev/null @@ -1,249 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_scale_q15.c - * Description: Multiplies a Q15 matrix by a scalar - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) -arm_status arm_mat_scale_q15( - const arm_matrix_instance_q15 * pSrc, - q15_t scaleFract, - int32_t shift, - arm_matrix_instance_q15 * pDst) -{ - arm_status status; /* Status of matrix scaling */ - 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 */ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecIn, vecOut; - q15_t const *pInVec; - int32_t totShift = shift + 1; /* shift to apply after scaling */ - - pInVec = (q15_t const *) pIn; - - #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; - blkCnt = numSamples >> 3; - while (blkCnt > 0U) - { - /* - * C(m,n) = A(m,n) * scale - * Scaling and results are stored in the destination buffer. - */ - vecIn = vld1q(pInVec); pInVec += 8; - - /* multiply input with scaler value */ - vecOut = vmulhq(vecIn, vdupq_n_s16(scaleFract)); - /* apply shifting */ - vecOut = vqshlq_r(vecOut, totShift); - - vst1q(pOut, vecOut); pOut += 8; - - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numSamples & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecIn = vld1q(pInVec); pInVec += 8; - vecOut = vmulhq(vecIn, vdupq_n_s16(scaleFract)); - vecOut = vqshlq_r(vecOut, totShift); - vstrhq_p(pOut, vecOut, p0); - } - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -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 */ - uint32_t blkCnt; /* Loop counter */ - arm_status status; /* Status of matrix scaling */ - int32_t kShift = 15 - shift; /* Total shift to apply after scaling */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t inA1, inA2; - q31_t out1, out2, out3, out4; /* Temporary output variables */ - q15_t in1, in2, in3, in4; /* Temporary input variables */ -#endif - -#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 input matrix */ - numSamples = (uint32_t) pSrc->numRows * pSrc->numCols; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) * k */ - -#if defined (ARM_MATH_DSP) - /* read 2 times 2 samples at a time from source */ - inA1 = read_q15x2_ia ((q15_t **) &pIn); - inA2 = read_q15x2_ia ((q15_t **) &pIn); - - /* Scale inputs and store result in temporary variables - * 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 result to destination */ - write_q15x2_ia (&pOut, __PKHBT(in2, in1, 16)); - write_q15x2_ia (&pOut, __PKHBT(in4, in3, 16)); - -#else - *pOut++ = (q15_t) (__SSAT(((q31_t) (*pIn++) * scaleFract) >> kShift, 16)); - *pOut++ = (q15_t) (__SSAT(((q31_t) (*pIn++) * scaleFract) >> kShift, 16)); - *pOut++ = (q15_t) (__SSAT(((q31_t) (*pIn++) * scaleFract) >> kShift, 16)); - *pOut++ = (q15_t) (__SSAT(((q31_t) (*pIn++) * scaleFract) >> kShift, 16)); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) * k */ - - /* Scale, saturate and store result in destination buffer. */ - *pOut++ = (q15_t) (__SSAT(((q31_t) (*pIn++) * scaleFract) >> kShift, 16)); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixScale group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_q31.c deleted file mode 100644 index 1fb859f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_scale_q31.c +++ /dev/null @@ -1,242 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_scale_q31.c - * Description: Multiplies a Q31 matrix by a scalar - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Scaling and Overflow Behavior - The input data *pSrc and scaleFract are in 1.31 format. - These are multiplied to yield a 2.62 intermediate result which is shifted with saturation to 1.31 format. - */ -#if defined(ARM_MATH_MVEI) -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 */ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecIn, vecOut; - q31_t const *pInVec; - int32_t totShift = shift + 1; /* shift to apply after scaling */ - arm_status status; /* Status of matrix scaling */ - - pInVec = (q31_t const *) pIn; - #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; - blkCnt = numSamples >> 2; - while (blkCnt > 0U) - { - /* - * C(m,n) = A(m,n) * scale - * Scaling and results are stored in the destination buffer. - */ - vecIn = vld1q(pInVec); - pInVec += 4; - /* multiply input with scaler value */ - vecOut = vmulhq(vecIn, vdupq_n_s32(scaleFract)); - /* apply shifting */ - vecOut = vqshlq_r(vecOut, totShift); - - vst1q(pOut, vecOut); - pOut += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = numSamples & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecIn = vld1q(pInVec); - pInVec += 4; - vecOut = vmulhq(vecIn, vdupq_n_s32(scaleFract)); - vecOut = vqshlq_r(vecOut, totShift); - vstrwq_p(pOut, vecOut, p0); - } - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -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 */ - uint32_t blkCnt; /* Loop counter */ - arm_status status; /* Status of matrix scaling */ - int32_t kShift = shift + 1; /* Shift to apply after scaling */ - q31_t in, out; /* Temporary variabels */ - -#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 input matrix */ - numSamples = (uint32_t) pSrc->numRows * pSrc->numCols; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) * k */ - - /* Scale, saturate and store result in destination buffer. */ - in = *pIn++; /* read four inputs from source */ - in = ((q63_t) in * scaleFract) >> 32; /* multiply input with scaler value */ - out = in << kShift; /* apply shifting */ - if (in != (out >> kShift)) /* saturate the results. */ - out = 0x7FFFFFFF ^ (in >> 31); - *pOut++ = out; /* Store result destination */ - - in = *pIn++; - in = ((q63_t) in * scaleFract) >> 32; - out = in << kShift; - if (in != (out >> kShift)) - out = 0x7FFFFFFF ^ (in >> 31); - *pOut++ = out; - - in = *pIn++; - in = ((q63_t) in * scaleFract) >> 32; - out = in << kShift; - if (in != (out >> kShift)) - out = 0x7FFFFFFF ^ (in >> 31); - *pOut++ = out; - - in = *pIn++; - in = ((q63_t) in * scaleFract) >> 32; - out = in << kShift; - if (in != (out >> kShift)) - out = 0x7FFFFFFF ^ (in >> 31); - *pOut++ = out; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) * k */ - - /* Scale, saturate and store result in destination buffer. */ - in = *pIn++; - in = ((q63_t) in * scaleFract) >> 32; - out = in << kShift; - if (in != (out >> kShift)) - out = 0x7FFFFFFF ^ (in >> 31); - *pOut++ = out; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixScale group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_f32.c deleted file mode 100644 index 35fc551..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_f32.c +++ /dev/null @@ -1,298 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_sub_f32.c - * Description: Floating-point matrix subtraction - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -arm_status arm_mat_sub_f32( - const arm_matrix_instance_f32 * pSrcA, - const arm_matrix_instance_f32 * pSrcB, - arm_matrix_instance_f32 * pDst) -{ - arm_status status; /* status of matrix subtraction */ - uint32_t numSamples; /* total number of elements in the matrix */ - float32_t *pDataA, *pDataB, *pDataDst; - f32x4_t vecA, vecB, vecDst; - float32_t const *pSrcAVec; - float32_t const *pSrcBVec; - uint32_t blkCnt; /* loop counters */ - - pDataA = pSrcA->pData; - pDataB = pSrcB->pData; - pDataDst = pDst->pData; - pSrcAVec = (float32_t const *) pDataA; - pSrcBVec = (float32_t const *) pDataB; - -#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; - blkCnt = numSamples >> 2; - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - /* sub and then store the results in the destination buffer. */ - vecA = vld1q(pSrcAVec); - pSrcAVec += 4; - vecB = vld1q(pSrcBVec); - pSrcBVec += 4; - vecDst = vsubq(vecA, vecB); - vst1q(pDataDst, vecDst); - pDataDst += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numSamples & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecA = vld1q(pSrcAVec); - vecB = vld1q(pSrcBVec); - vecDst = vsubq_m(vecDst, vecA, vecB, p0); - vstrwq_p(pDataDst, vecDst, p0); - } - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -#if defined(ARM_MATH_NEON) -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 */ - - - 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 */ - { - float32x4_t vec1; - float32x4_t vec2; - float32x4_t res; - - /* Total number of samples in the input matrix */ - numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; - - blkCnt = numSamples >> 2U; - - /* 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 */ - vec1 = vld1q_f32(pIn1); - vec2 = vld1q_f32(pIn2); - res = vsubq_f32(vec1, vec2); - vst1q_f32(pOut, res); - - /* 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; - - - 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); -} -#else -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 *pInA = pSrcA->pData; /* input data matrix pointer A */ - float32_t *pInB = pSrcB->pData; /* input data matrix pointer B */ - 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 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 input matrix */ - numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) - B(m,n) */ - - /* Subtract and store result in destination buffer. */ - *pOut++ = (*pInA++) - (*pInB++); - *pOut++ = (*pInA++) - (*pInB++); - *pOut++ = (*pInA++) - (*pInB++); - *pOut++ = (*pInA++) - (*pInB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) - B(m,n) */ - - /* Subtract and store result in destination buffer. */ - *pOut++ = (*pInA++) - (*pInB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of MatrixSub group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_q15.c deleted file mode 100644 index b0c7bf3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_q15.c +++ /dev/null @@ -1,219 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_sub_q15.c - * Description: Q15 Matrix subtraction - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. - */ -#if defined(ARM_MATH_MVEI) - -arm_status arm_mat_sub_q15( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst) -{ - uint32_t numSamples; /* total number of elements in the matrix */ - q15_t *pDataA, *pDataB, *pDataDst; - q15x8_t vecA, vecB, vecDst; - q15_t const *pSrcAVec; - q15_t const *pSrcBVec; - uint32_t blkCnt; /* loop counters */ - arm_status status; /* status of matrix subtraction */ - - - pDataA = pSrcA->pData; - pDataB = pSrcB->pData; - pDataDst = pDst->pData; - pSrcAVec = (q15_t const *) pDataA; - pSrcBVec = (q15_t const *) pDataB; - - #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; - blkCnt = numSamples >> 3; - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - /* sub and then store the results in the destination buffer. */ - vecA = vld1q(pSrcAVec); pSrcAVec += 8; - vecB = vld1q(pSrcBVec); pSrcBVec += 8; - vecDst = vqsubq(vecA, vecB); - vst1q(pDataDst, vecDst); pDataDst += 8; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = numSamples & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecA = vld1q(pSrcAVec); pSrcAVec += 8; - vecB = vld1q(pSrcBVec); pSrcBVec += 8; - vecDst = vqsubq_m(vecDst, vecA, vecB, p0); - vstrhq_p(pDataDst, vecDst, p0); - } - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -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 input matrix */ - numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) - B(m,n) */ - - /* Subtract, Saturate and store result in destination buffer. */ -#if defined (ARM_MATH_DSP) - write_q15x2_ia (&pOut, __QSUB16(read_q15x2_ia ((q15_t **) &pInA), read_q15x2_ia ((q15_t **) &pInB))); - write_q15x2_ia (&pOut, __QSUB16(read_q15x2_ia ((q15_t **) &pInA), read_q15x2_ia ((q15_t **) &pInB))); -#else - *pOut++ = (q15_t) __SSAT(((q31_t) * pInA++ - *pInB++), 16); - *pOut++ = (q15_t) __SSAT(((q31_t) * pInA++ - *pInB++), 16); - *pOut++ = (q15_t) __SSAT(((q31_t) * pInA++ - *pInB++), 16); - *pOut++ = (q15_t) __SSAT(((q31_t) * pInA++ - *pInB++), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) - B(m,n) */ - - /* Subtract and store result in destination buffer. */ -#if defined (ARM_MATH_DSP) - *pOut++ = (q15_t) __QSUB16(*pInA++, *pInB++); -#else - *pOut++ = (q15_t) __SSAT(((q31_t) * pInA++ - *pInB++), 16); -#endif - - /* Decrement loop counter */ - blkCnt--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixSub group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_q31.c deleted file mode 100644 index 6f332b2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_sub_q31.c +++ /dev/null @@ -1,218 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_sub_q31.c - * Description: Q31 matrix subtraction - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. - */ -#if defined(ARM_MATH_MVEI) -arm_status arm_mat_sub_q31( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst) -{ - uint32_t numSamples; /* total number of elements in the matrix */ - q31_t *pDataA, *pDataB, *pDataDst; - q31x4_t vecA, vecB, vecDst; - q31_t const *pSrcAVec; - q31_t const *pSrcBVec; - uint32_t blkCnt; /* loop counters */ - arm_status status; /* status of matrix subtraction */ - - pDataA = pSrcA->pData; - pDataB = pSrcB->pData; - pDataDst = pDst->pData; - pSrcAVec = (q31_t const *) pDataA; - pSrcBVec = (q31_t const *) pDataB; - -#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; - blkCnt = numSamples >> 2; - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) + B(m,n) */ - /* sub and then store the results in the destination buffer. */ - vecA = vld1q(pSrcAVec); - pSrcAVec += 4; - vecB = vld1q(pSrcBVec); - pSrcBVec += 4; - vecDst = vqsubq(vecA, vecB); - vst1q(pDataDst, vecDst); - pDataDst += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = numSamples & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecA = vld1q(pSrcAVec); - pSrcAVec += 4; - vecB = vld1q(pSrcBVec); - pSrcBVec += 4; - vecDst = vqsubq_m(vecDst, vecA, vecB, p0); - vstrwq_p(pDataDst, vecDst, p0); - } - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -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 *pInA = pSrcA->pData; /* input data matrix pointer A */ - q31_t *pInB = pSrcB->pData; /* input data matrix pointer B */ - q31_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 input matrix */ - numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = numSamples >> 2U; - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) - B(m,n) */ - - /* Subtract, saturate and then store the results in the destination buffer. */ - *pOut++ = __QSUB(*pInA++, *pInB++); - - *pOut++ = __QSUB(*pInA++, *pInB++); - - *pOut++ = __QSUB(*pInA++, *pInB++); - - *pOut++ = __QSUB(*pInA++, *pInB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = numSamples % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = numSamples; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C(m,n) = A(m,n) - B(m,n) */ - - /* Subtract, saturate and store result in destination buffer. */ - *pOut++ = __QSUB(*pInA++, *pInB++); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixSub group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_f32.c deleted file mode 100644 index 096cc77..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_f32.c +++ /dev/null @@ -1,325 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_trans_f32.c - * Description: Floating-point matrix transpose - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - -/** - @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" - */ - -/** - @addtogroup MatrixTrans - @{ - */ - -/** - @brief Floating-point matrix transpose. - @param[in] pSrc points to input matrix - @param[out] pDst points to output matrix - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -arm_status arm_mat_trans_f32( - const arm_matrix_instance_f32 * pSrc, - arm_matrix_instance_f32 * pDst) -{ - 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 */ - { - if (pDst->numRows == pDst->numCols) - { - if (pDst->numCols == 2) - return arm_mat_trans_32bit_2x2_mve((uint32_t *)pSrc->pData, (uint32_t *)pDst->pData); - if (pDst->numCols == 3) - return arm_mat_trans_32bit_3x3_mve((uint32_t *)pSrc->pData, (uint32_t *)pDst->pData); - if (pDst->numCols == 4) - return arm_mat_trans_32bit_4x4_mve((uint32_t *)pSrc->pData, (uint32_t *)pDst->pData); - } - - arm_mat_trans_32bit_generic_mve(pSrc->numRows, pSrc->numCols, (uint32_t *)pSrc->pData, (uint32_t *)pDst->pData); - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} - -#else -#if defined(ARM_MATH_NEON) - -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 */ - - uint16_t blkCnt, rowCnt, 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 */ - rowCnt = row >> 2; - while (rowCnt > 0U) - { - float32x4_t row0V,row1V,row2V,row3V; - float32x4x2_t ra0,ra1,rb0,rb1; - - blkCnt = nColumns >> 2; - - /* The pointer px is set to starting address of the column being processed */ - px = pOut + i; - - /* Compute 4 outputs at a time. - ** a second loop below computes the remaining 1 to 3 samples. */ - while (blkCnt > 0U) /* Column loop */ - { - row0V = vld1q_f32(pIn); - row1V = vld1q_f32(pIn + 1 * nColumns); - row2V = vld1q_f32(pIn + 2 * nColumns); - row3V = vld1q_f32(pIn + 3 * nColumns); - pIn += 4; - - ra0 = vzipq_f32(row0V,row2V); - ra1 = vzipq_f32(row1V,row3V); - - rb0 = vzipq_f32(ra0.val[0],ra1.val[0]); - rb1 = vzipq_f32(ra0.val[1],ra1.val[1]); - - vst1q_f32(px,rb0.val[0]); - px += nRows; - - vst1q_f32(px,rb0.val[1]); - px += nRows; - - vst1q_f32(px,rb1.val[0]); - px += nRows; - - vst1q_f32(px,rb1.val[1]); - 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; - *px++ = *(pIn + 1 * nColumns); - *px++ = *(pIn + 2 * nColumns); - *px++ = *(pIn + 3 * nColumns); - - px += (nRows - 4); - pIn++; - - /* Decrement the column loop counter */ - blkCnt--; - } - - i += 4; - pIn += 3 * nColumns; - - /* Decrement the row loop counter */ - rowCnt--; - - } /* Row loop end */ - - rowCnt = row & 3; - while (rowCnt > 0U) - { - blkCnt = nColumns ; - /* The pointer px is set to starting address of the column being processed */ - px = pOut + i; - - 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--; - } - i++; - rowCnt -- ; - } - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#else -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 nCols = pSrc->numCols; /* number of columns */ - uint32_t col, row = nRows, i = 0U; /* 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 - { - /* Pointer px is set to starting address of column being processed */ - px = pOut + i; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - col = nCols >> 2U; - - while (col > 0U) /* column loop */ - { - /* Read and store input element in destination */ - *px = *pIn++; - /* Update pointer px to point to next row of transposed matrix */ - px += nRows; - - *px = *pIn++; - px += nRows; - - *px = *pIn++; - px += nRows; - - *px = *pIn++; - px += nRows; - - /* Decrement column loop counter */ - col--; - } - - /* Loop unrolling: Compute remaining outputs */ - col = nCols % 0x4U; - -#else - - /* Initialize col with number of samples */ - col = nCols; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (col > 0U) - { - /* Read and store input element in destination */ - *px = *pIn++; - - /* Update pointer px to point to next row of transposed matrix */ - px += nRows; - - /* Decrement column loop counter */ - col--; - } - - i++; - - /* Decrement 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); -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of MatrixTrans group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_q15.c deleted file mode 100644 index 87df9bf..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_q15.c +++ /dev/null @@ -1,348 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_trans_q15.c - * Description: Q15 matrix transpose - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - -/** - @addtogroup MatrixTrans - @{ - */ - -/** - @brief Q15 matrix transpose. - @param[in] pSrc points to input matrix - @param[out] pDst points to output matrix - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - */ - -#if defined(ARM_MATH_MVEI) - -__STATIC_INLINE arm_status arm_mat_trans_16bit_2x2(uint16_t * pDataSrc, uint16_t * pDataDest) -{ - pDataDest[0] = pDataSrc[0]; - pDataDest[3] = pDataSrc[3]; - pDataDest[2] = pDataSrc[1]; - pDataDest[1] = pDataSrc[2]; - - return (ARM_MATH_SUCCESS); -} - -static arm_status arm_mat_trans_16bit_3x3_mve(uint16_t * pDataSrc, uint16_t * pDataDest) -{ - static const uint16_t stridesTr33[8] = { 0, 3, 6, 1, 4, 7, 2, 5 }; - uint16x8_t vecOffs1; - uint16x8_t vecIn1; - /* - * - * | 0 1 2 | | 0 3 6 | 8 x 16 flattened version | 0 3 6 1 4 7 2 5 | - * | 3 4 5 | => | 1 4 7 | => | 8 . . . . . . . | - * | 6 7 8 | | 2 5 8 | (row major) - * - */ - vecOffs1 = vldrhq_u16((uint16_t const *) stridesTr33); - vecIn1 = vldrhq_u16((uint16_t const *) pDataSrc); - - vstrhq_scatter_shifted_offset_u16(pDataDest, vecOffs1, vecIn1); - - pDataDest[8] = pDataSrc[8]; - - return (ARM_MATH_SUCCESS); -} - - -static arm_status arm_mat_trans_16bit_4x4_mve(uint16_t * pDataSrc, uint16_t * pDataDest) -{ - static const uint16_t stridesTr44_1[8] = { 0, 4, 8, 12, 1, 5, 9, 13 }; - static const uint16_t stridesTr44_2[8] = { 2, 6, 10, 14, 3, 7, 11, 15 }; - uint16x8_t vecOffs1, vecOffs2; - uint16x8_t vecIn1, vecIn2; - uint16_t const * pDataSrcVec = (uint16_t const *) pDataSrc; - - /* - * 4x4 Matrix transposition - * - * | 0 1 2 3 | | 0 4 8 12 | 8 x 16 flattened version - * | 4 5 6 7 | => | 1 5 9 13 | => [0 4 8 12 1 5 9 13] - * | 8 9 10 11 | | 2 6 10 14 | [2 6 10 14 3 7 11 15] - * | 12 13 14 15 | | 3 7 11 15 | - */ - - vecOffs1 = vldrhq_u16((uint16_t const *) stridesTr44_1); - vecOffs2 = vldrhq_u16((uint16_t const *) stridesTr44_2); - vecIn1 = vldrhq_u16(pDataSrcVec); - pDataSrcVec += 8; - vecIn2 = vldrhq_u16(pDataSrcVec); - - vstrhq_scatter_shifted_offset_u16(pDataDest, vecOffs1, vecIn1); - vstrhq_scatter_shifted_offset_u16(pDataDest, vecOffs2, vecIn2); - - - return (ARM_MATH_SUCCESS); -} - - - -static arm_status arm_mat_trans_16bit_generic( - uint16_t srcRows, - uint16_t srcCols, - uint16_t * pDataSrc, - uint16_t * pDataDest) -{ - uint16x8_t vecOffs; - uint32_t i; - uint32_t blkCnt; - uint16_t const *pDataC; - uint16_t *pDataDestR; - uint16x8_t vecIn; - - vecOffs = vidupq_u16((uint32_t)0, 1); - vecOffs = vecOffs * srcCols; - - i = srcCols; - while(i > 0U) - { - pDataC = (uint16_t const *) pDataSrc; - pDataDestR = pDataDest; - - blkCnt = srcRows >> 3; - while (blkCnt > 0U) - { - vecIn = vldrhq_gather_shifted_offset_u16(pDataC, vecOffs); - vstrhq_u16(pDataDestR, vecIn); - pDataDestR += 8; - pDataC = pDataC + srcCols * 8; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * tail - */ - blkCnt = srcRows & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - vecIn = vldrhq_gather_shifted_offset_u16(pDataC, vecOffs); - vstrhq_p_u16(pDataDestR, vecIn, p0); - } - pDataSrc += 1; - pDataDest += srcRows; - i--; - } - - return (ARM_MATH_SUCCESS); -} - - -arm_status arm_mat_trans_q15( - const arm_matrix_instance_q15 * pSrc, - arm_matrix_instance_q15 * pDst) -{ - 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 */ - - { - if (pDst->numRows == pDst->numCols) - { - if (pDst->numCols == 1) - { - pDst->pData[0] = pSrc->pData[0]; - return(ARM_MATH_SUCCESS); - } - if (pDst->numCols == 2) - return arm_mat_trans_16bit_2x2((uint16_t *)pSrc->pData, (uint16_t *)pDst->pData); - if (pDst->numCols == 3) - return arm_mat_trans_16bit_3x3_mve((uint16_t *)pSrc->pData, (uint16_t *)pDst->pData); - if (pDst->numCols == 4) - return arm_mat_trans_16bit_4x4_mve((uint16_t *)pSrc->pData, (uint16_t *)pDst->pData); - } - - arm_mat_trans_16bit_generic(pSrc->numRows, pSrc->numCols, (uint16_t *)pSrc->pData, (uint16_t *)pDst->pData); - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#else -arm_status arm_mat_trans_q15( - const arm_matrix_instance_q15 * pSrc, - arm_matrix_instance_q15 * pDst) -{ - q15_t *pIn = pSrc->pData; /* input data matrix pointer */ - q15_t *pOut = pDst->pData; /* output data matrix pointer */ - uint16_t nRows = pSrc->numRows; /* number of rows */ - uint16_t nCols = pSrc->numCols; /* number of columns */ - uint32_t col, row = nRows, i = 0U; /* Loop counters */ - arm_status status; /* status of matrix transpose */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t in; /* variable to hold temporary output */ -#endif - -#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 - { - /* Pointer pOut is set to starting address of column being processed */ - pOut = pDst->pData + i; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - col = nCols >> 2U; - - while (col > 0U) /* column loop */ - { - /* Read two elements from row */ - in = read_q15x2_ia ((q15_t **) &pIn); - - /* Unpack and store one element in 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 pointer pOut to point to next row of transposed matrix */ - pOut += nRows; - - /* Unpack and store second element in 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 pointer pOut to point to next row of transposed matrix */ - pOut += nRows; - - /* Read two elements from row */ - in = read_q15x2_ia ((q15_t **) &pIn); - - /* Unpack and store one element in 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 pointer pOut to point to next row of transposed matrix */ - pOut += nRows; - - /* Unpack and store second element in 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 pointer pOut to point to next row of transposed matrix */ - pOut += nRows; - - /* Decrement column loop counter */ - col--; - } - - /* Loop unrolling: Compute remaining outputs */ - col = nCols % 0x4U; - -#else - - /* Initialize col with number of samples */ - col = nCols; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (col > 0U) - { - /* Read and store input element in destination */ - *pOut = *pIn++; - - /* Update pointer pOut to point to next row of transposed matrix */ - pOut += nRows; - - /* Decrement column loop counter */ - col--; - } - - i++; - - /* Decrement 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); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixTrans group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_q31.c deleted file mode 100644 index 9d92abd..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/MatrixFunctions/arm_mat_trans_q31.c +++ /dev/null @@ -1,191 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mat_trans_q31.c - * Description: Q31 matrix transpose - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupMatrix - */ - -/** - @addtogroup MatrixTrans - @{ - */ - -/** - @brief Q31 matrix transpose. - @param[in] pSrc points to input matrix - @param[out] pDst points to output matrix - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -arm_status arm_mat_trans_q31( - const arm_matrix_instance_q31 * pSrc, - arm_matrix_instance_q31 * pDst) -{ - 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 */ - - { - if (pDst->numRows == pDst->numCols) - { - if (pDst->numCols == 2) - return arm_mat_trans_32bit_2x2_mve((uint32_t *)pSrc->pData, (uint32_t *)pDst->pData); - if (pDst->numCols == 3) - return arm_mat_trans_32bit_3x3_mve((uint32_t *)pSrc->pData, (uint32_t *)pDst->pData); - if (pDst->numCols == 4) - return arm_mat_trans_32bit_4x4_mve((uint32_t *)pSrc->pData, (uint32_t *)pDst->pData); - } - - arm_mat_trans_32bit_generic_mve(pSrc->numRows, pSrc->numCols, (uint32_t *)pSrc->pData, (uint32_t *)pDst->pData); - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - - /* Set status as ARM_MATH_SUCCESS */ - status = ARM_MATH_SUCCESS; - } - - /* Return to application */ - return (status); -} -#else -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 rows */ - uint16_t nCols = pSrc->numCols; /* number of columns */ - uint32_t col, row = nRows, i = 0U; /* 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 - { - /* Pointer px is set to starting address of column being processed */ - px = pOut + i; - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - col = nCols >> 2U; - - while (col > 0U) /* column loop */ - { - /* Read and store input element in destination */ - *px = *pIn++; - /* Update pointer px to point to next row of transposed matrix */ - px += nRows; - - *px = *pIn++; - px += nRows; - - *px = *pIn++; - px += nRows; - - *px = *pIn++; - px += nRows; - - /* Decrement column loop counter */ - col--; - } - - /* Loop unrolling: Compute remaining outputs */ - col = nCols % 0x4U; - -#else - - /* Initialize col with number of samples */ - col = nCols; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (col > 0U) - { - /* Read and store input element in destination */ - *px = *pIn++; - - /* Update pointer px to point to next row of transposed matrix */ - px += nRows; - - /* Decrement column loop counter */ - col--; - } - - i++; - - /* Decrement 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); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of MatrixTrans group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/CMakeLists.txt deleted file mode 100644 index 2a54738..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPSVM) - -include(configLib) -include(configDsp) - -file(GLOB SRC "./*_*.c") - -add_library(CMSISDSPSVM STATIC ${SRC}) - -configLib(CMSISDSPSVM ${ROOT}) -configDsp(CMSISDSPSVM ${ROOT}) - -### Includes -target_include_directories(CMSISDSPSVM PUBLIC "${DSP}/Include") - - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/SVMFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/SVMFunctions.c deleted file mode 100644 index 85f19b9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/SVMFunctions.c +++ /dev/null @@ -1,36 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: BayesFunctions.c - * Description: Combination of all SVM function source files. - * - * $Date: 16. March 2020 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_svm_linear_init_f32.c" -#include "arm_svm_linear_predict_f32.c" -#include "arm_svm_polynomial_init_f32.c" -#include "arm_svm_polynomial_predict_f32.c" -#include "arm_svm_rbf_init_f32.c" -#include "arm_svm_rbf_predict_f32.c" -#include "arm_svm_sigmoid_init_f32.c" -#include "arm_svm_sigmoid_predict_f32.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_linear_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_linear_init_f32.c deleted file mode 100644 index 6b75b1f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_linear_init_f32.c +++ /dev/null @@ -1,81 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_svm_linear_init_f32.c - * Description: SVM Linear Instance Initialization - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - -/** - * @defgroup groupSVM SVM Functions - * - */ - - -/** - * @addtogroup groupSVM - * @{ - */ - - -/** - * @brief SVM linear instance init function - * - * Classes are integer used as output of the function (instead of having -1,1 - * as class values). - * - * @param[in] S Parameters for the SVM function - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @return none. - * - */ - - -void arm_svm_linear_init_f32(arm_svm_linear_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes) -{ - S->nbOfSupportVectors = nbOfSupportVectors; - S->vectorDimension = vectorDimension; - S->intercept = intercept; - S->dualCoefficients = dualCoefficients; - S->supportVectors = supportVectors; - S->classes = classes; -} - - - -/** - * @} end of groupSVM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_linear_predict_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_linear_predict_f32.c deleted file mode 100644 index 17dd5d2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_linear_predict_f32.c +++ /dev/null @@ -1,453 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_svm_linear_predict_f32.c - * Description: SVM Linear Classifier - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupSVM - * @{ - */ - - -/** - * @brief SVM linear prediction - * @param[in] S Pointer to an instance of the linear SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult Decision value - * @return none. - * - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_svm_linear_predict_f32( - const arm_svm_linear_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - /* inlined Matrix x Vector function interleaved with dot prod */ - uint32_t numRows = S->nbOfSupportVectors; - uint32_t numCols = S->vectorDimension; - const float32_t *pSupport = S->supportVectors; - const float32_t *pSrcA = pSupport; - const float32_t *pInA0; - const float32_t *pInA1; - uint32_t row; - uint32_t blkCnt; /* loop counters */ - const float32_t *pDualCoef = S->dualCoefficients; - float32_t sum = S->intercept; - row = numRows; - - /* - * compute 4 rows in parrallel - */ - while (row >= 4) - { - const float32_t *pInA2, *pInA3; - float32_t const *pSrcA0Vec, *pSrcA1Vec, *pSrcA2Vec, *pSrcA3Vec, *pInVec; - f32x4_t vecIn, acc0, acc1, acc2, acc3; - float32_t const *pSrcVecPtr = in; - - /* - * Initialize the pointers to 4 consecutive MatrixA rows - */ - pInA0 = pSrcA; - pInA1 = pInA0 + numCols; - pInA2 = pInA1 + numCols; - pInA3 = pInA2 + numCols; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - acc2 = vdupq_n_f32(0.0f); - acc3 = vdupq_n_f32(0.0f); - - pSrcA0Vec = pInA0; - pSrcA1Vec = pInA1; - pSrcA2Vec = pInA2; - pSrcA3Vec = pInA3; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vld1q(pSrcA1Vec); - pSrcA1Vec += 4; - acc1 = vfmaq(acc1, vecIn, vecA); - vecA = vld1q(pSrcA2Vec); - pSrcA2Vec += 4; - acc2 = vfmaq(acc2, vecIn, vecA); - vecA = vld1q(pSrcA3Vec); - pSrcA3Vec += 4; - acc3 = vfmaq(acc3, vecIn, vecA); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA1Vec, p0); - acc1 = vfmaq(acc1, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA2Vec, p0); - acc2 = vfmaq(acc2, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA3Vec, p0); - acc3 = vfmaq(acc3, vecIn, vecA); - } - /* - * Sum the partial parts - */ - sum += *pDualCoef++ * vecAddAcrossF32Mve(acc0); - sum += *pDualCoef++ * vecAddAcrossF32Mve(acc1); - sum += *pDualCoef++ * vecAddAcrossF32Mve(acc2); - sum += *pDualCoef++ * vecAddAcrossF32Mve(acc3); - - pSrcA += numCols * 4; - /* - * Decrement the row loop counter - */ - row -= 4; - } - - /* - * compute 2 rows in parallel - */ - if (row >= 2) { - float32_t const *pSrcA0Vec, *pSrcA1Vec, *pInVec; - f32x4_t vecIn, acc0, acc1; - float32_t const *pSrcVecPtr = in; - - /* - * Initialize the pointers to 2 consecutive MatrixA rows - */ - pInA0 = pSrcA; - pInA1 = pInA0 + numCols; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - pSrcA0Vec = pInA0; - pSrcA1Vec = pInA1; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vld1q(pSrcA1Vec); - pSrcA1Vec += 4; - acc1 = vfmaq(acc1, vecIn, vecA); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA1Vec, p0); - acc1 = vfmaq(acc1, vecIn, vecA); - } - /* - * Sum the partial parts - */ - sum += *pDualCoef++ * vecAddAcrossF32Mve(acc0); - sum += *pDualCoef++ * vecAddAcrossF32Mve(acc1); - - pSrcA += numCols * 2; - row -= 2; - } - - if (row >= 1) { - f32x4_t vecIn, acc0; - float32_t const *pSrcA0Vec, *pInVec; - float32_t const *pSrcVecPtr = in; - /* - * Initialize the pointers to last MatrixA row - */ - pInA0 = pSrcA; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - - pSrcA0Vec = pInA0; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vfmaq(acc0, vecIn, vecA); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - acc0 = vfmaq(acc0, vecIn, vecA); - } - /* - * Sum the partial parts - */ - sum += *pDualCoef++ * vecAddAcrossF32Mve(acc0); - - } - - *pResult = S->classes[STEP(sum)]; -} - -#else -#if defined(ARM_MATH_NEON) -void arm_svm_linear_predict_f32( - const arm_svm_linear_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - float32_t sum = S->intercept; - - float32_t dot; - float32x4_t dotV; - - float32x4_t accuma,accumb,accumc,accumd,accum; - float32x2_t accum2; - float32x4_t vec1; - - float32x4_t vec2,vec2a,vec2b,vec2c,vec2d; - - uint32_t blkCnt; - uint32_t vectorBlkCnt; - - const float32_t *pIn = in; - - const float32_t *pSupport = S->supportVectors; - - const float32_t *pSupporta = S->supportVectors; - const float32_t *pSupportb; - const float32_t *pSupportc; - const float32_t *pSupportd; - - pSupportb = pSupporta + S->vectorDimension; - pSupportc = pSupportb + S->vectorDimension; - pSupportd = pSupportc + S->vectorDimension; - - const float32_t *pDualCoefs = S->dualCoefficients; - - vectorBlkCnt = S->nbOfSupportVectors >> 2; - - while (vectorBlkCnt > 0U) - { - accuma = vdupq_n_f32(0); - accumb = vdupq_n_f32(0); - accumc = vdupq_n_f32(0); - accumd = vdupq_n_f32(0); - - pIn = in; - - blkCnt = S->vectorDimension >> 2; - while (blkCnt > 0U) - { - - vec1 = vld1q_f32(pIn); - vec2a = vld1q_f32(pSupporta); - vec2b = vld1q_f32(pSupportb); - vec2c = vld1q_f32(pSupportc); - vec2d = vld1q_f32(pSupportd); - - pIn += 4; - pSupporta += 4; - pSupportb += 4; - pSupportc += 4; - pSupportd += 4; - - accuma = vmlaq_f32(accuma, vec1,vec2a); - accumb = vmlaq_f32(accumb, vec1,vec2b); - accumc = vmlaq_f32(accumc, vec1,vec2c); - accumd = vmlaq_f32(accumd, vec1,vec2d); - - blkCnt -- ; - } - accum2 = vpadd_f32(vget_low_f32(accuma),vget_high_f32(accuma)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,0); - - accum2 = vpadd_f32(vget_low_f32(accumb),vget_high_f32(accumb)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,1); - - accum2 = vpadd_f32(vget_low_f32(accumc),vget_high_f32(accumc)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,2); - - accum2 = vpadd_f32(vget_low_f32(accumd),vget_high_f32(accumd)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,3); - - - blkCnt = S->vectorDimension & 3; - while (blkCnt > 0U) - { - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,0) + *pIn * *pSupporta++, dotV,0); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,1) + *pIn * *pSupportb++, dotV,1); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,2) + *pIn * *pSupportc++, dotV,2); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,3) + *pIn * *pSupportd++, dotV,3); - - pIn++; - - blkCnt -- ; - } - - vec1 = vld1q_f32(pDualCoefs); - pDualCoefs += 4; - - accum = vmulq_f32(vec1,dotV); - accum2 = vpadd_f32(vget_low_f32(accum),vget_high_f32(accum)); - sum += vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1); - - pSupporta += 3*S->vectorDimension; - pSupportb += 3*S->vectorDimension; - pSupportc += 3*S->vectorDimension; - pSupportd += 3*S->vectorDimension; - - vectorBlkCnt -- ; - } - - pSupport = pSupporta; - vectorBlkCnt = S->nbOfSupportVectors & 3; - while (vectorBlkCnt > 0U) - { - accum = vdupq_n_f32(0); - dot = 0.0f; - pIn = in; - - blkCnt = S->vectorDimension >> 2; - while (blkCnt > 0U) - { - - vec1 = vld1q_f32(pIn); - vec2 = vld1q_f32(pSupport); - pIn += 4; - pSupport += 4; - - accum = vmlaq_f32(accum, vec1,vec2); - - blkCnt -- ; - } - accum2 = vpadd_f32(vget_low_f32(accum),vget_high_f32(accum)); - dot = vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1); - - - blkCnt = S->vectorDimension & 3; - while (blkCnt > 0U) - { - dot = dot + *pIn++ * *pSupport++; - - blkCnt -- ; - } - - sum += *pDualCoefs++ * dot; - vectorBlkCnt -- ; - } - - *pResult=S->classes[STEP(sum)]; -} -#else -void arm_svm_linear_predict_f32( - const arm_svm_linear_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - float32_t sum=S->intercept; - float32_t dot=0; - uint32_t i,j; - const float32_t *pSupport = S->supportVectors; - - for(i=0; i < S->nbOfSupportVectors; i++) - { - dot=0; - for(j=0; j < S->vectorDimension; j++) - { - dot = dot + in[j]* *pSupport++; - } - sum += S->dualCoefficients[i] * dot; - } - *pResult=S->classes[STEP(sum)]; -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of groupSVM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_polynomial_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_polynomial_init_f32.c deleted file mode 100644 index 2bf4a67..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_polynomial_init_f32.c +++ /dev/null @@ -1,87 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_svm_polynomial_init_f32.c - * Description: SVM Polynomial Instance Initialization - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupSVM - * @{ - */ - - - -/** - * @brief SVM polynomial instance init function - * - * Classes are integer used as output of the function (instead of having -1,1 - * as class values). - * - * @param[in] S points to an instance of the polynomial SVM structure. - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @param[in] degree Polynomial degree - * @param[in] coef0 coeff0 (scikit-learn terminology) - * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * - */ - - -void arm_svm_polynomial_init_f32(arm_svm_polynomial_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes, - int32_t degree, - float32_t coef0, - float32_t gamma - ) -{ - S->nbOfSupportVectors = nbOfSupportVectors; - S->vectorDimension = vectorDimension; - S->intercept = intercept; - S->dualCoefficients = dualCoefficients; - S->supportVectors = supportVectors; - S->classes = classes; - S->degree = degree; - S->coef0 = coef0; - S->gamma = gamma; -} - - - -/** - * @} end of groupSVM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_polynomial_predict_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_polynomial_predict_f32.c deleted file mode 100644 index cc83e3c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_polynomial_predict_f32.c +++ /dev/null @@ -1,488 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_svm_polynomial_predict_f32.c - * Description: SVM Polynomial Classifier - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) -#include "arm_vec_math.h" -#endif - -/** - * @addtogroup groupSVM - * @{ - */ - - -/** - * @brief SVM polynomial prediction - * @param[in] S Pointer to an instance of the polynomial SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult Decision value - * @return none. - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -void arm_svm_polynomial_predict_f32( - const arm_svm_polynomial_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - /* inlined Matrix x Vector function interleaved with dot prod */ - uint32_t numRows = S->nbOfSupportVectors; - uint32_t numCols = S->vectorDimension; - const float32_t *pSupport = S->supportVectors; - const float32_t *pSrcA = pSupport; - const float32_t *pInA0; - const float32_t *pInA1; - uint32_t row; - uint32_t blkCnt; /* loop counters */ - const float32_t *pDualCoef = S->dualCoefficients; - float32_t sum = S->intercept; - f32x4_t vSum = vdupq_n_f32(0.0f); - - row = numRows; - - /* - * compute 4 rows in parrallel - */ - while (row >= 4) { - const float32_t *pInA2, *pInA3; - float32_t const *pSrcA0Vec, *pSrcA1Vec, *pSrcA2Vec, *pSrcA3Vec, *pInVec; - f32x4_t vecIn, acc0, acc1, acc2, acc3; - float32_t const *pSrcVecPtr = in; - - /* - * Initialize the pointers to 4 consecutive MatrixA rows - */ - pInA0 = pSrcA; - pInA1 = pInA0 + numCols; - pInA2 = pInA1 + numCols; - pInA3 = pInA2 + numCols; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - acc2 = vdupq_n_f32(0.0f); - acc3 = vdupq_n_f32(0.0f); - - pSrcA0Vec = pInA0; - pSrcA1Vec = pInA1; - pSrcA2Vec = pInA2; - pSrcA3Vec = pInA3; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vld1q(pSrcA1Vec); - pSrcA1Vec += 4; - acc1 = vfmaq(acc1, vecIn, vecA); - vecA = vld1q(pSrcA2Vec); - pSrcA2Vec += 4; - acc2 = vfmaq(acc2, vecIn, vecA); - vecA = vld1q(pSrcA3Vec); - pSrcA3Vec += 4; - acc3 = vfmaq(acc3, vecIn, vecA); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA1Vec, p0); - acc1 = vfmaq(acc1, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA2Vec, p0); - acc2 = vfmaq(acc2, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA3Vec, p0); - acc3 = vfmaq(acc3, vecIn, vecA); - } - /* - * Sum the partial parts - */ - f32x4_t vtmp = vuninitializedq_f32(); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc0), vtmp, 0); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc1), vtmp, 1); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc2), vtmp, 2); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc3), vtmp, 3); - - vSum = vfmaq_f32(vSum, vld1q(pDualCoef), - arm_vec_exponent_f32 - (vaddq_n_f32(vmulq_n_f32(vtmp, S->gamma), S->coef0), S->degree)); - - pDualCoef += 4; - - pSrcA += numCols * 4; - /* - * Decrement the row loop counter - */ - row -= 4; - } - - /* - * compute 2 rows in parrallel - */ - if (row >= 2) { - float32_t const *pSrcA0Vec, *pSrcA1Vec, *pInVec; - f32x4_t vecIn, acc0, acc1; - float32_t const *pSrcVecPtr = in; - - /* - * Initialize the pointers to 2 consecutive MatrixA rows - */ - pInA0 = pSrcA; - pInA1 = pInA0 + numCols; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - pSrcA0Vec = pInA0; - pSrcA1Vec = pInA1; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vld1q(pSrcA1Vec); - pSrcA1Vec += 4; - acc1 = vfmaq(acc1, vecIn, vecA); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA1Vec, p0); - acc1 = vfmaq(acc1, vecIn, vecA); - } - /* - * Sum the partial parts - */ - f32x4_t vtmp = vuninitializedq_f32(); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc0), vtmp, 0); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc1), vtmp, 1); - - vSum = vfmaq_m_f32(vSum, vld1q(pDualCoef), - arm_vec_exponent_f32 - (vaddq_n_f32(vmulq_n_f32(vtmp, S->gamma), S->coef0), S->degree), - vctp32q(2)); - - pDualCoef += 2; - pSrcA += numCols * 2; - row -= 2; - } - - if (row >= 1) { - f32x4_t vecIn, acc0; - float32_t const *pSrcA0Vec, *pInVec; - float32_t const *pSrcVecPtr = in; - /* - * Initialize the pointers to last MatrixA row - */ - pInA0 = pSrcA; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - - pSrcA0Vec = pInA0; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vfmaq(acc0, vecIn, vecA); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - acc0 = vfmaq(acc0, vecIn, vecA); - } - /* - * Sum the partial parts - */ - f32x4_t vtmp = vuninitializedq_f32(); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc0), vtmp, 0); - vSum = vfmaq_m_f32(vSum, vld1q(pDualCoef), - arm_vec_exponent_f32 - (vaddq_n_f32(vmulq_n_f32(vtmp, S->gamma), S->coef0), S->degree), - vctp32q(1)); - } - sum += vecAddAcrossF32Mve(vSum); - - - *pResult = S->classes[STEP(sum)]; -} - -#else -#if defined(ARM_MATH_NEON) -void arm_svm_polynomial_predict_f32( - const arm_svm_polynomial_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - float32_t sum = S->intercept; - - float32_t dot; - float32x4_t dotV; - - float32x4_t accuma,accumb,accumc,accumd,accum; - float32x2_t accum2; - float32x4_t vec1; - float32x4_t coef0 = vdupq_n_f32(S->coef0); - - float32x4_t vec2,vec2a,vec2b,vec2c,vec2d; - - uint32_t blkCnt; - uint32_t vectorBlkCnt; - - const float32_t *pIn = in; - - const float32_t *pSupport = S->supportVectors; - - const float32_t *pSupporta = S->supportVectors; - const float32_t *pSupportb; - const float32_t *pSupportc; - const float32_t *pSupportd; - - pSupportb = pSupporta + S->vectorDimension; - pSupportc = pSupportb + S->vectorDimension; - pSupportd = pSupportc + S->vectorDimension; - - const float32_t *pDualCoefs = S->dualCoefficients; - - vectorBlkCnt = S->nbOfSupportVectors >> 2; - while (vectorBlkCnt > 0U) - { - accuma = vdupq_n_f32(0); - accumb = vdupq_n_f32(0); - accumc = vdupq_n_f32(0); - accumd = vdupq_n_f32(0); - - pIn = in; - - blkCnt = S->vectorDimension >> 2; - while (blkCnt > 0U) - { - - vec1 = vld1q_f32(pIn); - vec2a = vld1q_f32(pSupporta); - vec2b = vld1q_f32(pSupportb); - vec2c = vld1q_f32(pSupportc); - vec2d = vld1q_f32(pSupportd); - - pIn += 4; - pSupporta += 4; - pSupportb += 4; - pSupportc += 4; - pSupportd += 4; - - accuma = vmlaq_f32(accuma, vec1,vec2a); - accumb = vmlaq_f32(accumb, vec1,vec2b); - accumc = vmlaq_f32(accumc, vec1,vec2c); - accumd = vmlaq_f32(accumd, vec1,vec2d); - - blkCnt -- ; - } - accum2 = vpadd_f32(vget_low_f32(accuma),vget_high_f32(accuma)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,0); - - accum2 = vpadd_f32(vget_low_f32(accumb),vget_high_f32(accumb)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,1); - - accum2 = vpadd_f32(vget_low_f32(accumc),vget_high_f32(accumc)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,2); - - accum2 = vpadd_f32(vget_low_f32(accumd),vget_high_f32(accumd)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,3); - - - blkCnt = S->vectorDimension & 3; - while (blkCnt > 0U) - { - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,0) + *pIn * *pSupporta++, dotV,0); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,1) + *pIn * *pSupportb++, dotV,1); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,2) + *pIn * *pSupportc++, dotV,2); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,3) + *pIn * *pSupportd++, dotV,3); - - pIn++; - - blkCnt -- ; - } - - vec1 = vld1q_f32(pDualCoefs); - pDualCoefs += 4; - - // To vectorize later - dotV = vmulq_n_f32(dotV, S->gamma); - dotV = vaddq_f32(dotV, coef0); - - dotV = arm_vec_exponent_f32(dotV,S->degree); - - accum = vmulq_f32(vec1,dotV); - accum2 = vpadd_f32(vget_low_f32(accum),vget_high_f32(accum)); - sum += vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1); - - pSupporta += 3*S->vectorDimension; - pSupportb += 3*S->vectorDimension; - pSupportc += 3*S->vectorDimension; - pSupportd += 3*S->vectorDimension; - - vectorBlkCnt -- ; - } - - pSupport = pSupporta; - vectorBlkCnt = S->nbOfSupportVectors & 3; - - while (vectorBlkCnt > 0U) - { - accum = vdupq_n_f32(0); - dot = 0.0f; - pIn = in; - - blkCnt = S->vectorDimension >> 2; - while (blkCnt > 0U) - { - - vec1 = vld1q_f32(pIn); - vec2 = vld1q_f32(pSupport); - pIn += 4; - pSupport += 4; - - accum = vmlaq_f32(accum, vec1,vec2); - - blkCnt -- ; - } - accum2 = vpadd_f32(vget_low_f32(accum),vget_high_f32(accum)); - dot = vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1); - - - blkCnt = S->vectorDimension & 3; - while (blkCnt > 0U) - { - dot = dot + *pIn++ * *pSupport++; - - blkCnt -- ; - } - - sum += *pDualCoefs++ * arm_exponent_f32(S->gamma * dot + S->coef0, S->degree); - vectorBlkCnt -- ; - } - - *pResult=S->classes[STEP(sum)]; -} -#else -void arm_svm_polynomial_predict_f32( - const arm_svm_polynomial_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - float32_t sum=S->intercept; - float32_t dot=0; - uint32_t i,j; - const float32_t *pSupport = S->supportVectors; - - for(i=0; i < S->nbOfSupportVectors; i++) - { - dot=0; - for(j=0; j < S->vectorDimension; j++) - { - dot = dot + in[j]* *pSupport++; - } - sum += S->dualCoefficients[i] * arm_exponent_f32(S->gamma * dot + S->coef0, S->degree); - } - - *pResult=S->classes[STEP(sum)]; -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - - -/** - * @} end of groupSVM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_rbf_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_rbf_init_f32.c deleted file mode 100644 index 55b25d9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_rbf_init_f32.c +++ /dev/null @@ -1,79 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_svm_rbf_init_f32.c - * Description: SVM Radial Basis Function Instance Initialization - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupSVM - * @{ - */ - - -/** - * @brief SVM radial basis function instance init function - * - * Classes are integer used as output of the function (instead of having -1,1 - * as class values). - * - * @param[in] S points to an instance of the polynomial SVM structure. - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * - */ - -void arm_svm_rbf_init_f32(arm_svm_rbf_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes, - float32_t gamma - ) -{ - S->nbOfSupportVectors = nbOfSupportVectors; - S->vectorDimension = vectorDimension; - S->intercept = intercept; - S->dualCoefficients = dualCoefficients; - S->supportVectors = supportVectors; - S->classes = classes; - S->gamma = gamma; -} - - - -/** - * @} end of groupSVM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_rbf_predict_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_rbf_predict_f32.c deleted file mode 100644 index b129551..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_rbf_predict_f32.c +++ /dev/null @@ -1,521 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_svm_rbf_predict_f32.c - * Description: SVM Radial Basis Function Classifier - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupSVM - * @{ - */ - - -/** - * @brief SVM rbf prediction - * @param[in] S Pointer to an instance of the rbf SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult decision value - * @return none. - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -void arm_svm_rbf_predict_f32( - const arm_svm_rbf_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - /* inlined Matrix x Vector function interleaved with dot prod */ - uint32_t numRows = S->nbOfSupportVectors; - uint32_t numCols = S->vectorDimension; - const float32_t *pSupport = S->supportVectors; - const float32_t *pSrcA = pSupport; - const float32_t *pInA0; - const float32_t *pInA1; - uint32_t row; - uint32_t blkCnt; /* loop counters */ - const float32_t *pDualCoef = S->dualCoefficients; - float32_t sum = S->intercept; - f32x4_t vSum = vdupq_n_f32(0); - - row = numRows; - - /* - * compute 4 rows in parrallel - */ - while (row >= 4) { - const float32_t *pInA2, *pInA3; - float32_t const *pSrcA0Vec, *pSrcA1Vec, *pSrcA2Vec, *pSrcA3Vec, *pInVec; - f32x4_t vecIn, acc0, acc1, acc2, acc3; - float32_t const *pSrcVecPtr = in; - - /* - * Initialize the pointers to 4 consecutive MatrixA rows - */ - pInA0 = pSrcA; - pInA1 = pInA0 + numCols; - pInA2 = pInA1 + numCols; - pInA3 = pInA2 + numCols; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - acc2 = vdupq_n_f32(0.0f); - acc3 = vdupq_n_f32(0.0f); - - pSrcA0Vec = pInA0; - pSrcA1Vec = pInA1; - pSrcA2Vec = pInA2; - pSrcA3Vec = pInA3; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - f32x4_t vecDif; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - vecDif = vsubq(vecIn, vecA); - acc0 = vfmaq(acc0, vecDif, vecDif); - vecA = vld1q(pSrcA1Vec); - pSrcA1Vec += 4; - vecDif = vsubq(vecIn, vecA); - acc1 = vfmaq(acc1, vecDif, vecDif); - vecA = vld1q(pSrcA2Vec); - pSrcA2Vec += 4; - vecDif = vsubq(vecIn, vecA); - acc2 = vfmaq(acc2, vecDif, vecDif); - vecA = vld1q(pSrcA3Vec); - pSrcA3Vec += 4; - vecDif = vsubq(vecIn, vecA); - acc3 = vfmaq(acc3, vecDif, vecDif); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - f32x4_t vecDif; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - vecDif = vsubq(vecIn, vecA); - acc0 = vfmaq(acc0, vecDif, vecDif); - vecA = vldrwq_z_f32(pSrcA1Vec, p0); - vecDif = vsubq(vecIn, vecA); - acc1 = vfmaq(acc1, vecDif, vecDif); - vecA = vldrwq_z_f32(pSrcA2Vec, p0);; - vecDif = vsubq(vecIn, vecA); - acc2 = vfmaq(acc2, vecDif, vecDif); - vecA = vldrwq_z_f32(pSrcA3Vec, p0); - vecDif = vsubq(vecIn, vecA); - acc3 = vfmaq(acc3, vecDif, vecDif); - } - /* - * Sum the partial parts - */ - - //sum += *pDualCoef++ * expf(-S->gamma * vecReduceF32Mve(acc0)); - f32x4_t vtmp = vuninitializedq_f32(); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc0), vtmp, 0); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc1), vtmp, 1); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc2), vtmp, 2); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc3), vtmp, 3); - - vSum = - vfmaq_f32(vSum, vld1q(pDualCoef), - vexpq_f32(vmulq_n_f32(vtmp, -S->gamma))); - pDualCoef += 4; - pSrcA += numCols * 4; - /* - * Decrement the row loop counter - */ - row -= 4; - } - - /* - * compute 2 rows in parrallel - */ - if (row >= 2) { - float32_t const *pSrcA0Vec, *pSrcA1Vec, *pInVec; - f32x4_t vecIn, acc0, acc1; - float32_t const *pSrcVecPtr = in; - - /* - * Initialize the pointers to 2 consecutive MatrixA rows - */ - pInA0 = pSrcA; - pInA1 = pInA0 + numCols; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - pSrcA0Vec = pInA0; - pSrcA1Vec = pInA1; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - f32x4_t vecDif; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - vecDif = vsubq(vecIn, vecA); - acc0 = vfmaq(acc0, vecDif, vecDif);; - vecA = vld1q(pSrcA1Vec); - pSrcA1Vec += 4; - vecDif = vsubq(vecIn, vecA); - acc1 = vfmaq(acc1, vecDif, vecDif); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA, vecDif; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - vecDif = vsubq(vecIn, vecA); - acc0 = vfmaq(acc0, vecDif, vecDif); - vecA = vldrwq_z_f32(pSrcA1Vec, p0); - vecDif = vsubq(vecIn, vecA); - acc1 = vfmaq(acc1, vecDif, vecDif); - } - /* - * Sum the partial parts - */ - f32x4_t vtmp = vuninitializedq_f32(); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc0), vtmp, 0); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc1), vtmp, 1); - - vSum = - vfmaq_m_f32(vSum, vld1q(pDualCoef), - vexpq_f32(vmulq_n_f32(vtmp, -S->gamma)), vctp32q(2)); - pDualCoef += 2; - - pSrcA += numCols * 2; - row -= 2; - } - - if (row >= 1) { - f32x4_t vecIn, acc0; - float32_t const *pSrcA0Vec, *pInVec; - float32_t const *pSrcVecPtr = in; - /* - * Initialize the pointers to last MatrixA row - */ - pInA0 = pSrcA; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - - pSrcA0Vec = pInA0; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA, vecDif; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - vecDif = vsubq(vecIn, vecA); - acc0 = vfmaq(acc0, vecDif, vecDif); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA, vecDif; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - vecDif = vsubq(vecIn, vecA); - acc0 = vfmaq(acc0, vecDif, vecDif); - } - /* - * Sum the partial parts - */ - f32x4_t vtmp = vuninitializedq_f32(); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc0), vtmp, 0); - - vSum = - vfmaq_m_f32(vSum, vld1q(pDualCoef), - vexpq_f32(vmulq_n_f32(vtmp, -S->gamma)), vctp32q(1)); - - } - - - sum += vecAddAcrossF32Mve(vSum); - *pResult = S->classes[STEP(sum)]; -} - - -#else -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" - -void arm_svm_rbf_predict_f32( - const arm_svm_rbf_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - float32_t sum = S->intercept; - - float32_t dot; - float32x4_t dotV; - - float32x4_t accuma,accumb,accumc,accumd,accum; - float32x2_t accum2; - float32x4_t temp; - float32x4_t vec1; - - float32x4_t vec2,vec2a,vec2b,vec2c,vec2d; - - uint32_t blkCnt; - uint32_t vectorBlkCnt; - - const float32_t *pIn = in; - - const float32_t *pSupport = S->supportVectors; - - const float32_t *pSupporta = S->supportVectors; - const float32_t *pSupportb; - const float32_t *pSupportc; - const float32_t *pSupportd; - - pSupportb = pSupporta + S->vectorDimension; - pSupportc = pSupportb + S->vectorDimension; - pSupportd = pSupportc + S->vectorDimension; - - const float32_t *pDualCoefs = S->dualCoefficients; - - - vectorBlkCnt = S->nbOfSupportVectors >> 2; - while (vectorBlkCnt > 0U) - { - accuma = vdupq_n_f32(0); - accumb = vdupq_n_f32(0); - accumc = vdupq_n_f32(0); - accumd = vdupq_n_f32(0); - - pIn = in; - - blkCnt = S->vectorDimension >> 2; - while (blkCnt > 0U) - { - - vec1 = vld1q_f32(pIn); - vec2a = vld1q_f32(pSupporta); - vec2b = vld1q_f32(pSupportb); - vec2c = vld1q_f32(pSupportc); - vec2d = vld1q_f32(pSupportd); - - pIn += 4; - pSupporta += 4; - pSupportb += 4; - pSupportc += 4; - pSupportd += 4; - - temp = vsubq_f32(vec1, vec2a); - accuma = vmlaq_f32(accuma, temp, temp); - - temp = vsubq_f32(vec1, vec2b); - accumb = vmlaq_f32(accumb, temp, temp); - - temp = vsubq_f32(vec1, vec2c); - accumc = vmlaq_f32(accumc, temp, temp); - - temp = vsubq_f32(vec1, vec2d); - accumd = vmlaq_f32(accumd, temp, temp); - - blkCnt -- ; - } - accum2 = vpadd_f32(vget_low_f32(accuma),vget_high_f32(accuma)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,0); - - accum2 = vpadd_f32(vget_low_f32(accumb),vget_high_f32(accumb)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,1); - - accum2 = vpadd_f32(vget_low_f32(accumc),vget_high_f32(accumc)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,2); - - accum2 = vpadd_f32(vget_low_f32(accumd),vget_high_f32(accumd)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,3); - - - blkCnt = S->vectorDimension & 3; - while (blkCnt > 0U) - { - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,0) + SQ(*pIn - *pSupporta), dotV,0); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,1) + SQ(*pIn - *pSupportb), dotV,1); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,2) + SQ(*pIn - *pSupportc), dotV,2); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,3) + SQ(*pIn - *pSupportd), dotV,3); - - pSupporta++; - pSupportb++; - pSupportc++; - pSupportd++; - - pIn++; - - blkCnt -- ; - } - - vec1 = vld1q_f32(pDualCoefs); - pDualCoefs += 4; - - // To vectorize later - dotV = vmulq_n_f32(dotV, -S->gamma); - dotV = vexpq_f32(dotV); - - accum = vmulq_f32(vec1,dotV); - accum2 = vpadd_f32(vget_low_f32(accum),vget_high_f32(accum)); - sum += vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1); - - pSupporta += 3*S->vectorDimension; - pSupportb += 3*S->vectorDimension; - pSupportc += 3*S->vectorDimension; - pSupportd += 3*S->vectorDimension; - - vectorBlkCnt -- ; - } - - pSupport = pSupporta; - vectorBlkCnt = S->nbOfSupportVectors & 3; - - while (vectorBlkCnt > 0U) - { - accum = vdupq_n_f32(0); - dot = 0.0f; - pIn = in; - - blkCnt = S->vectorDimension >> 2; - while (blkCnt > 0U) - { - - vec1 = vld1q_f32(pIn); - vec2 = vld1q_f32(pSupport); - pIn += 4; - pSupport += 4; - - temp = vsubq_f32(vec1,vec2); - accum = vmlaq_f32(accum, temp,temp); - - blkCnt -- ; - } - accum2 = vpadd_f32(vget_low_f32(accum),vget_high_f32(accum)); - dot = vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1); - - - blkCnt = S->vectorDimension & 3; - while (blkCnt > 0U) - { - - dot = dot + SQ(*pIn - *pSupport); - pIn++; - pSupport++; - - blkCnt -- ; - } - - sum += *pDualCoefs++ * expf(-S->gamma * dot); - vectorBlkCnt -- ; - } - - *pResult=S->classes[STEP(sum)]; -} -#else -void arm_svm_rbf_predict_f32( - const arm_svm_rbf_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - float32_t sum=S->intercept; - float32_t dot=0; - uint32_t i,j; - const float32_t *pSupport = S->supportVectors; - - for(i=0; i < S->nbOfSupportVectors; i++) - { - dot=0; - for(j=0; j < S->vectorDimension; j++) - { - dot = dot + SQ(in[j] - *pSupport); - pSupport++; - } - sum += S->dualCoefficients[i] * expf(-S->gamma * dot); - } - *pResult=S->classes[STEP(sum)]; -} -#endif - -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of groupSVM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_sigmoid_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_sigmoid_init_f32.c deleted file mode 100644 index 2660313..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_sigmoid_init_f32.c +++ /dev/null @@ -1,81 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_svm_sigmoid_predict_f32.c - * Description: SVM Sigmoid Instance Initialization - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupSVM - * @{ - */ - - -/** - * @brief SVM sigmoid instance init function - * - * Classes are integer used as output of the function (instead of having -1,1 - * as class values). - * - * @param[in] S points to an instance of the rbf SVM structure. - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @param[in] coef0 coeff0 (scikit-learn terminology) - * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * - */ - -void arm_svm_sigmoid_init_f32(arm_svm_sigmoid_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes, - float32_t coef0, - float32_t gamma - ) -{ - S->nbOfSupportVectors = nbOfSupportVectors; - S->vectorDimension = vectorDimension; - S->intercept = intercept; - S->dualCoefficients = dualCoefficients; - S->supportVectors = supportVectors; - S->classes = classes; - S->coef0 = coef0; - S->gamma = gamma; -} - - -/** - * @} end of groupSVM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_sigmoid_predict_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_sigmoid_predict_f32.c deleted file mode 100644 index 02f179b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SVMFunctions/arm_svm_sigmoid_predict_f32.c +++ /dev/null @@ -1,485 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_svm_sigmoid_predict_f32.c - * Description: SVM Sigmoid Classifier - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - -/** - * @addtogroup groupSVM - * @{ - */ - - - -/** - * @brief SVM sigmoid prediction - * @param[in] S Pointer to an instance of the rbf SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult Decision value - * @return none. - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -void arm_svm_sigmoid_predict_f32( - const arm_svm_sigmoid_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - /* inlined Matrix x Vector function interleaved with dot prod */ - uint32_t numRows = S->nbOfSupportVectors; - uint32_t numCols = S->vectorDimension; - const float32_t *pSupport = S->supportVectors; - const float32_t *pSrcA = pSupport; - const float32_t *pInA0; - const float32_t *pInA1; - uint32_t row; - uint32_t blkCnt; /* loop counters */ - const float32_t *pDualCoef = S->dualCoefficients; - float32_t sum = S->intercept; - f32x4_t vSum = vdupq_n_f32(0.0f); - - row = numRows; - - /* - * compute 4 rows in parrallel - */ - while (row >= 4) { - const float32_t *pInA2, *pInA3; - float32_t const *pSrcA0Vec, *pSrcA1Vec, *pSrcA2Vec, *pSrcA3Vec, *pInVec; - f32x4_t vecIn, acc0, acc1, acc2, acc3; - float32_t const *pSrcVecPtr = in; - - /* - * Initialize the pointers to 4 consecutive MatrixA rows - */ - pInA0 = pSrcA; - pInA1 = pInA0 + numCols; - pInA2 = pInA1 + numCols; - pInA3 = pInA2 + numCols; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - acc2 = vdupq_n_f32(0.0f); - acc3 = vdupq_n_f32(0.0f); - - pSrcA0Vec = pInA0; - pSrcA1Vec = pInA1; - pSrcA2Vec = pInA2; - pSrcA3Vec = pInA3; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vld1q(pSrcA1Vec); - pSrcA1Vec += 4; - acc1 = vfmaq(acc1, vecIn, vecA); - vecA = vld1q(pSrcA2Vec); - pSrcA2Vec += 4; - acc2 = vfmaq(acc2, vecIn, vecA); - vecA = vld1q(pSrcA3Vec); - pSrcA3Vec += 4; - acc3 = vfmaq(acc3, vecIn, vecA); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA1Vec, p0); - acc1 = vfmaq(acc1, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA2Vec, p0); - acc2 = vfmaq(acc2, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA3Vec, p0); - acc3 = vfmaq(acc3, vecIn, vecA); - } - /* - * Sum the partial parts - */ - f32x4_t vtmp = vuninitializedq_f32(); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc0), vtmp, 0); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc1), vtmp, 1); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc2), vtmp, 2); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc3), vtmp, 3); - - vSum = - vfmaq_f32(vSum, vld1q(pDualCoef), - vtanhq_f32(vaddq_n_f32(vmulq_n_f32(vtmp, S->gamma), S->coef0))); - - pDualCoef += 4; - - pSrcA += numCols * 4; - /* - * Decrement the row loop counter - */ - row -= 4; - } - - /* - * compute 2 rows in parrallel - */ - if (row >= 2) { - float32_t const *pSrcA0Vec, *pSrcA1Vec, *pInVec; - f32x4_t vecIn, acc0, acc1; - float32_t const *pSrcVecPtr = in; - - /* - * Initialize the pointers to 2 consecutive MatrixA rows - */ - pInA0 = pSrcA; - pInA1 = pInA0 + numCols; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - acc1 = vdupq_n_f32(0.0f); - pSrcA0Vec = pInA0; - pSrcA1Vec = pInA1; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vld1q(pSrcA1Vec); - pSrcA1Vec += 4; - acc1 = vfmaq(acc1, vecIn, vecA); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - acc0 = vfmaq(acc0, vecIn, vecA); - vecA = vldrwq_z_f32(pSrcA1Vec, p0); - acc1 = vfmaq(acc1, vecIn, vecA); - } - /* - * Sum the partial parts - */ - f32x4_t vtmp = vuninitializedq_f32(); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc0), vtmp, 0); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc1), vtmp, 1); - - vSum = - vfmaq_m_f32(vSum, vld1q(pDualCoef), - vtanhq_f32(vaddq_n_f32(vmulq_n_f32(vtmp, S->gamma), S->coef0)), - vctp32q(2)); - - pSrcA += numCols * 2; - row -= 2; - } - - if (row >= 1) { - f32x4_t vecIn, acc0; - float32_t const *pSrcA0Vec, *pInVec; - float32_t const *pSrcVecPtr = in; - /* - * Initialize the pointers to last MatrixA row - */ - pInA0 = pSrcA; - /* - * Initialize the vector pointer - */ - pInVec = pSrcVecPtr; - /* - * reset accumulators - */ - acc0 = vdupq_n_f32(0.0f); - - pSrcA0Vec = pInA0; - - blkCnt = numCols >> 2; - while (blkCnt > 0U) { - f32x4_t vecA; - - vecIn = vld1q(pInVec); - pInVec += 4; - vecA = vld1q(pSrcA0Vec); - pSrcA0Vec += 4; - acc0 = vfmaq(acc0, vecIn, vecA); - - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = numCols & 3; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp32q(blkCnt); - f32x4_t vecA; - - vecIn = vldrwq_z_f32(pInVec, p0); - vecA = vldrwq_z_f32(pSrcA0Vec, p0); - acc0 = vfmaq(acc0, vecIn, vecA); - } - /* - * Sum the partial parts - */ - f32x4_t vtmp = vuninitializedq_f32(); - vtmp = vsetq_lane(vecAddAcrossF32Mve(acc0), vtmp, 0); - - vSum = - vfmaq_m_f32(vSum, vld1q(pDualCoef), - vtanhq_f32(vaddq_n_f32(vmulq_n_f32(vtmp, S->gamma), S->coef0)), - vctp32q(1)); - } - sum += vecAddAcrossF32Mve(vSum); - - *pResult = S->classes[STEP(sum)]; -} - -#else -#if defined(ARM_MATH_NEON) -#include "NEMath.h" - -void arm_svm_sigmoid_predict_f32( - const arm_svm_sigmoid_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - float32_t sum = S->intercept; - - float32_t dot; - float32x4_t dotV; - - float32x4_t accuma,accumb,accumc,accumd,accum; - float32x2_t accum2; - float32x4_t vec1; - float32x4_t coef0 = vdupq_n_f32(S->coef0); - - float32x4_t vec2,vec2a,vec2b,vec2c,vec2d; - - uint32_t blkCnt; - uint32_t vectorBlkCnt; - - const float32_t *pIn = in; - - const float32_t *pSupport = S->supportVectors; - - const float32_t *pSupporta = S->supportVectors; - const float32_t *pSupportb; - const float32_t *pSupportc; - const float32_t *pSupportd; - - pSupportb = pSupporta + S->vectorDimension; - pSupportc = pSupportb + S->vectorDimension; - pSupportd = pSupportc + S->vectorDimension; - - const float32_t *pDualCoefs = S->dualCoefficients; - - vectorBlkCnt = S->nbOfSupportVectors >> 2; - while (vectorBlkCnt > 0U) - { - accuma = vdupq_n_f32(0); - accumb = vdupq_n_f32(0); - accumc = vdupq_n_f32(0); - accumd = vdupq_n_f32(0); - - pIn = in; - - blkCnt = S->vectorDimension >> 2; - while (blkCnt > 0U) - { - - vec1 = vld1q_f32(pIn); - vec2a = vld1q_f32(pSupporta); - vec2b = vld1q_f32(pSupportb); - vec2c = vld1q_f32(pSupportc); - vec2d = vld1q_f32(pSupportd); - - pIn += 4; - pSupporta += 4; - pSupportb += 4; - pSupportc += 4; - pSupportd += 4; - - accuma = vmlaq_f32(accuma, vec1,vec2a); - accumb = vmlaq_f32(accumb, vec1,vec2b); - accumc = vmlaq_f32(accumc, vec1,vec2c); - accumd = vmlaq_f32(accumd, vec1,vec2d); - - blkCnt -- ; - } - accum2 = vpadd_f32(vget_low_f32(accuma),vget_high_f32(accuma)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,0); - - accum2 = vpadd_f32(vget_low_f32(accumb),vget_high_f32(accumb)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,1); - - accum2 = vpadd_f32(vget_low_f32(accumc),vget_high_f32(accumc)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,2); - - accum2 = vpadd_f32(vget_low_f32(accumd),vget_high_f32(accumd)); - dotV = vsetq_lane_f32(vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1),dotV,3); - - - blkCnt = S->vectorDimension & 3; - while (blkCnt > 0U) - { - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,0) + *pIn * *pSupporta++, dotV,0); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,1) + *pIn * *pSupportb++, dotV,1); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,2) + *pIn * *pSupportc++, dotV,2); - dotV = vsetq_lane_f32(vgetq_lane_f32(dotV,3) + *pIn * *pSupportd++, dotV,3); - - pIn++; - - blkCnt -- ; - } - - vec1 = vld1q_f32(pDualCoefs); - pDualCoefs += 4; - - // To vectorize later - dotV = vmulq_n_f32(dotV, S->gamma); - dotV = vaddq_f32(dotV, coef0); - - dotV = vtanhq_f32(dotV); - - accum = vmulq_f32(vec1,dotV); - accum2 = vpadd_f32(vget_low_f32(accum),vget_high_f32(accum)); - sum += vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1); - - pSupporta += 3*S->vectorDimension; - pSupportb += 3*S->vectorDimension; - pSupportc += 3*S->vectorDimension; - pSupportd += 3*S->vectorDimension; - - vectorBlkCnt -- ; - } - - pSupport = pSupporta; - vectorBlkCnt = S->nbOfSupportVectors & 3; - - while (vectorBlkCnt > 0U) - { - accum = vdupq_n_f32(0); - dot = 0.0f; - pIn = in; - - blkCnt = S->vectorDimension >> 2; - while (blkCnt > 0U) - { - - vec1 = vld1q_f32(pIn); - vec2 = vld1q_f32(pSupport); - pIn += 4; - pSupport += 4; - - accum = vmlaq_f32(accum, vec1,vec2); - - blkCnt -- ; - } - accum2 = vpadd_f32(vget_low_f32(accum),vget_high_f32(accum)); - dot = vget_lane_f32(accum2, 0) + vget_lane_f32(accum2, 1); - - - blkCnt = S->vectorDimension & 3; - while (blkCnt > 0U) - { - dot = dot + *pIn++ * *pSupport++; - - blkCnt -- ; - } - - sum += *pDualCoefs++ * tanhf(S->gamma * dot + S->coef0); - vectorBlkCnt -- ; - } - - *pResult=S->classes[STEP(sum)]; -} -#else -void arm_svm_sigmoid_predict_f32( - const arm_svm_sigmoid_instance_f32 *S, - const float32_t * in, - int32_t * pResult) -{ - float32_t sum=S->intercept; - float32_t dot=0; - uint32_t i,j; - const float32_t *pSupport = S->supportVectors; - - for(i=0; i < S->nbOfSupportVectors; i++) - { - dot=0; - for(j=0; j < S->vectorDimension; j++) - { - dot = dot + in[j]* *pSupport++; - } - sum += S->dualCoefficients[i] * tanhf(S->gamma * dot + S->coef0); - } - *pResult=S->classes[STEP(sum)]; -} - -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of groupSVM group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/CMakeLists.txt deleted file mode 100644 index 20b9f8a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPStatistics) - -include(configLib) -include(configDsp) - -file(GLOB SRC "./*_*.c") - -add_library(CMSISDSPStatistics STATIC ${SRC}) - -configLib(CMSISDSPStatistics ${ROOT}) -configDsp(CMSISDSPStatistics ${ROOT}) - -### Includes -target_include_directories(CMSISDSPStatistics PUBLIC "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/StatisticsFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/StatisticsFunctions.c deleted file mode 100644 index bc72a9f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/StatisticsFunctions.c +++ /dev/null @@ -1,60 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: StatisticsFunctions.c - * Description: Combination of all statistics function source files. - * - * $Date: 16. March 2020 - * $Revision: V1.1.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_entropy_f32.c" -#include "arm_entropy_f64.c" -#include "arm_kullback_leibler_f32.c" -#include "arm_kullback_leibler_f64.c" -#include "arm_logsumexp_dot_prod_f32.c" -#include "arm_logsumexp_f32.c" -#include "arm_max_f32.c" -#include "arm_max_q15.c" -#include "arm_max_q31.c" -#include "arm_max_q7.c" -#include "arm_max_no_idx_f32.c" -#include "arm_mean_f32.c" -#include "arm_mean_q15.c" -#include "arm_mean_q31.c" -#include "arm_mean_q7.c" -#include "arm_min_f32.c" -#include "arm_min_q15.c" -#include "arm_min_q31.c" -#include "arm_min_q7.c" -#include "arm_power_f32.c" -#include "arm_power_q15.c" -#include "arm_power_q31.c" -#include "arm_power_q7.c" -#include "arm_rms_f32.c" -#include "arm_rms_q15.c" -#include "arm_rms_q31.c" -#include "arm_std_f32.c" -#include "arm_std_q15.c" -#include "arm_std_q31.c" -#include "arm_var_f32.c" -#include "arm_var_q15.c" -#include "arm_var_q31.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_entropy_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_entropy_f32.c deleted file mode 100644 index ebd30ad..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_entropy_f32.c +++ /dev/null @@ -1,172 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_logsumexp_f32.c - * Description: LogSumExp - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupStats - * @{ - */ - - -/** - * @brief Entropy - * - * @param[in] pSrcA Array of input values. - * @param[in] blockSize Number of samples in the input array. - * @return Entropy -Sum(p ln p) - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -float32_t arm_entropy_f32(const float32_t * pSrcA,uint32_t blockSize) -{ - uint32_t blkCnt; - float32_t accum=0.0f,p; - - - blkCnt = blockSize; - - f32x4_t vSum = vdupq_n_f32(0.0f); - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - f32x4_t vecIn = vld1q(pSrcA); - - vSum = vaddq_f32(vSum, vmulq(vecIn, vlogq_f32(vecIn))); - - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pSrcA += 4; - blkCnt --; - } - - accum = vecAddAcrossF32Mve(vSum); - - /* Tail */ - blkCnt = blockSize & 0x3; - while(blkCnt > 0) - { - p = *pSrcA++; - accum += p * logf(p); - - blkCnt--; - - } - - return (-accum); -} - -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "NEMath.h" - -float32_t arm_entropy_f32(const float32_t * pSrcA,uint32_t blockSize) -{ - const float32_t *pIn; - uint32_t blkCnt; - float32_t accum, p; - - float32x4_t accumV; - float32x2_t accumV2; - float32x4_t tmpV, tmpV2; - - pIn = pSrcA; - - accum = 0.0f; - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - tmpV = vld1q_f32(pIn); - pIn += 4; - - tmpV2 = vlogq_f32(tmpV); - accumV = vmlaq_f32(accumV, tmpV, tmpV2); - - blkCnt--; - - } - - accumV2 = vpadd_f32(vget_low_f32(accumV),vget_high_f32(accumV)); - accum = vget_lane_f32(accumV2, 0) + vget_lane_f32(accumV2, 1); - - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - p = *pIn++; - accum += p * logf(p); - - blkCnt--; - - } - - return(-accum); -} - -#else -float32_t arm_entropy_f32(const float32_t * pSrcA,uint32_t blockSize) -{ - const float32_t *pIn; - uint32_t blkCnt; - float32_t accum, p; - - pIn = pSrcA; - blkCnt = blockSize; - - accum = 0.0f; - - while(blkCnt > 0) - { - p = *pIn++; - accum += p * logf(p); - - blkCnt--; - - } - - return(-accum); -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of groupStats group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_entropy_f64.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_entropy_f64.c deleted file mode 100644 index 7b93c52..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_entropy_f64.c +++ /dev/null @@ -1,71 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_logsumexp_f64.c - * Description: LogSumExp - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - -/** - * @addtogroup groupStats - * @{ - */ - -/** - * @brief Entropy - * - * @param[in] pSrcA Array of input values. - * @param[in] blockSize Number of samples in the input array. - * @return Entropy -Sum(p ln p) - * - */ - -float64_t arm_entropy_f64(const float64_t * pSrcA, uint32_t blockSize) -{ - const float64_t *pIn; - uint32_t blkCnt; - float64_t accum, p; - - pIn = pSrcA; - blkCnt = blockSize; - - accum = 0.0f; - - while(blkCnt > 0) - { - p = *pIn++; - - accum += p * log(p); - - blkCnt--; - - } - - return(-accum); -} - -/** - * @} end of groupStats group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_kullback_leibler_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_kullback_leibler_f32.c deleted file mode 100644 index 5068906..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_kullback_leibler_f32.c +++ /dev/null @@ -1,191 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_logsumexp_f32.c - * Description: LogSumExp - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupStats - * @{ - */ - - -/** - * @brief Kullback-Leibler - * - * Distribution A may contain 0 with Neon version. - * Result will be right but some exception flags will be set. - * - * Distribution B must not contain 0 probability. - * - * @param[in] *pSrcA points to an array of input values for probaility distribution A. - * @param[in] *pSrcB points to an array of input values for probaility distribution B. - * @param[in] blockSize number of samples in the input array. - * @return Kullback-Leibler divergence D(A || B) - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -float32_t arm_kullback_leibler_f32(const float32_t * pSrcA,const float32_t * pSrcB,uint32_t blockSize) -{ - uint32_t blkCnt; - float32_t accum, pA,pB; - - - blkCnt = blockSize; - - accum = 0.0f; - - f32x4_t vSum = vdupq_n_f32(0.0f); - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - f32x4_t vecA = vld1q(pSrcA); - f32x4_t vecB = vld1q(pSrcB); - f32x4_t vRatio; - - vRatio = vdiv_f32(vecB, vecA); - vSum = vaddq_f32(vSum, vmulq(vecA, vlogq_f32(vRatio))); - - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pSrcA += 4; - pSrcB += 4; - blkCnt --; - } - - accum = vecAddAcrossF32Mve(vSum); - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - pA = *pSrcA++; - pB = *pSrcB++; - accum += pA * logf(pB / pA); - - blkCnt--; - - } - - return(-accum); -} - -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "NEMath.h" - -float32_t arm_kullback_leibler_f32(const float32_t * pSrcA,const float32_t * pSrcB,uint32_t blockSize) -{ - const float32_t *pInA, *pInB; - uint32_t blkCnt; - float32_t accum, pA,pB; - - float32x4_t accumV; - float32x2_t accumV2; - float32x4_t tmpVA, tmpVB,tmpV; - - pInA = pSrcA; - pInB = pSrcB; - - accum = 0.0f; - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - tmpVA = vld1q_f32(pInA); - pInA += 4; - - tmpVB = vld1q_f32(pInB); - pInB += 4; - - tmpV = vinvq_f32(tmpVA); - tmpVB = vmulq_f32(tmpVB, tmpV); - tmpVB = vlogq_f32(tmpVB); - - accumV = vmlaq_f32(accumV, tmpVA, tmpVB); - - blkCnt--; - - } - - accumV2 = vpadd_f32(vget_low_f32(accumV),vget_high_f32(accumV)); - accum = vget_lane_f32(accumV2, 0) + vget_lane_f32(accumV2, 1); - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - pA = *pInA++; - pB = *pInB++; - accum += pA * logf(pB/pA); - - blkCnt--; - - } - - return(-accum); -} - -#else -float32_t arm_kullback_leibler_f32(const float32_t * pSrcA,const float32_t * pSrcB,uint32_t blockSize) -{ - const float32_t *pInA, *pInB; - uint32_t blkCnt; - float32_t accum, pA,pB; - - pInA = pSrcA; - pInB = pSrcB; - blkCnt = blockSize; - - accum = 0.0f; - - while(blkCnt > 0) - { - pA = *pInA++; - pB = *pInB++; - accum += pA * logf(pB / pA); - - blkCnt--; - - } - - return(-accum); -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of groupStats group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_kullback_leibler_f64.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_kullback_leibler_f64.c deleted file mode 100644 index 456e7de..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_kullback_leibler_f64.c +++ /dev/null @@ -1,73 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_logsumexp_f64.c - * Description: LogSumExp - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - -/** - * @addtogroup groupStats - * @{ - */ - -/** - * @brief Kullback-Leibler - * - * @param[in] *pSrcA points to an array of input values for probaility distribution A. - * @param[in] *pSrcB points to an array of input values for probaility distribution B. - * @param[in] blockSize number of samples in the input array. - * @return Kullback-Leibler divergence D(A || B) - * - */ - -float64_t arm_kullback_leibler_f64(const float64_t * pSrcA, const float64_t * pSrcB, uint32_t blockSize) -{ - const float64_t *pInA, *pInB; - uint32_t blkCnt; - float64_t accum, pA,pB; - - pInA = pSrcA; - pInB = pSrcB; - blkCnt = blockSize; - - accum = 0.0f; - - while(blkCnt > 0) - { - pA = *pInA++; - pB = *pInB++; - - accum += pA * log(pB / pA); - - blkCnt--; - } - - return(-accum); -} - -/** - * @} end of groupStats group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f32.c deleted file mode 100644 index 3f0c554..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f32.c +++ /dev/null @@ -1,66 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_logsumexp_f32.c - * Description: LogSumExp - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupStats - * @{ - */ - - -/** - * @brief Dot product with log arithmetic - * - * Vectors are containing the log of the samples - * - * @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[in] *pTmpBuffer temporary buffer of length blockSize - * @return The log of the dot product. - * - */ - - -float32_t arm_logsumexp_dot_prod_f32(const float32_t * pSrcA, - const float32_t * pSrcB, - uint32_t blockSize, - float32_t *pTmpBuffer) -{ - float32_t result; - arm_add_f32((float32_t*)pSrcA, (float32_t*)pSrcB, pTmpBuffer, blockSize); - - result = arm_logsumexp_f32(pTmpBuffer, blockSize); - return(result); -} - -/** - * @} end of groupStats group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_logsumexp_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_logsumexp_f32.c deleted file mode 100644 index 069acf7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_logsumexp_f32.c +++ /dev/null @@ -1,275 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_logsumexp_f32.c - * Description: LogSumExp - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupStats - * @{ - */ - - -/** - * @brief Computation of the LogSumExp - * - * In probabilistic computations, the dynamic of the probability values can be very - * wide because they come from gaussian functions. - * To avoid underflow and overflow issues, the values are represented by their log. - * In this representation, multiplying the original exp values is easy : their logs are added. - * But adding the original exp values is requiring some special handling and it is the - * goal of the LogSumExp function. - * - * If the values are x1...xn, the function is computing: - * - * ln(exp(x1) + ... + exp(xn)) and the computation is done in such a way that - * rounding issues are minimised. - * - * The max xm of the values is extracted and the function is computing: - * xm + ln(exp(x1 - xm) + ... + exp(xn - xm)) - * - * @param[in] *in Pointer to an array of input values. - * @param[in] blockSize Number of samples in the input array. - * @return LogSumExp - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_math.h" - -float32_t arm_logsumexp_f32(const float32_t *in, uint32_t blockSize) -{ - float32_t maxVal; - const float32_t *pIn; - int32_t blkCnt; - float32_t accum=0.0f; - float32_t tmp; - - - arm_max_no_idx_f32((float32_t *) in, blockSize, &maxVal); - - - blkCnt = blockSize; - pIn = in; - - - f32x4_t vSum = vdupq_n_f32(0.0f); - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - f32x4_t vecIn = vld1q(pIn); - f32x4_t vecExp; - - vecExp = vexpq_f32(vsubq_n_f32(vecIn, maxVal)); - - vSum = vaddq_f32(vSum, vecExp); - - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pIn += 4; - blkCnt --; - } - - /* sum + log */ - accum = vecAddAcrossF32Mve(vSum); - - blkCnt = blockSize & 0x3; - while(blkCnt > 0) - { - tmp = *pIn++; - accum += expf(tmp - maxVal); - blkCnt--; - - } - - accum = maxVal + log(accum); - - return (accum); -} - -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "NEMath.h" -float32_t arm_logsumexp_f32(const float32_t *in, uint32_t blockSize) -{ - float32_t maxVal; - float32_t tmp; - float32x4_t tmpV, tmpVb; - float32x4_t maxValV; - uint32x4_t idxV; - float32x4_t accumV; - float32x2_t accumV2; - - const float32_t *pIn; - uint32_t blkCnt; - float32_t accum; - - pIn = in; - - blkCnt = blockSize; - - if (blockSize <= 3) - { - maxVal = *pIn++; - blkCnt--; - - while(blkCnt > 0) - { - tmp = *pIn++; - - if (tmp > maxVal) - { - maxVal = tmp; - } - blkCnt--; - } - } - else - { - maxValV = vld1q_f32(pIn); - pIn += 4; - blkCnt = (blockSize - 4) >> 2; - - while(blkCnt > 0) - { - tmpVb = vld1q_f32(pIn); - pIn += 4; - - idxV = vcgtq_f32(tmpVb, maxValV); - maxValV = vbslq_f32(idxV, tmpVb, maxValV ); - - blkCnt--; - } - - accumV2 = vpmax_f32(vget_low_f32(maxValV),vget_high_f32(maxValV)); - accumV2 = vpmax_f32(accumV2,accumV2); - maxVal = vget_lane_f32(accumV2, 0) ; - - blkCnt = (blockSize - 4) & 3; - - while(blkCnt > 0) - { - tmp = *pIn++; - - if (tmp > maxVal) - { - maxVal = tmp; - } - blkCnt--; - } - - } - - - - maxValV = vdupq_n_f32(maxVal); - pIn = in; - accum = 0; - accumV = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - - while(blkCnt > 0) - { - tmpV = vld1q_f32(pIn); - pIn += 4; - tmpV = vsubq_f32(tmpV, maxValV); - tmpV = vexpq_f32(tmpV); - accumV = vaddq_f32(accumV, tmpV); - - blkCnt--; - - } - accumV2 = vpadd_f32(vget_low_f32(accumV),vget_high_f32(accumV)); - accum = vget_lane_f32(accumV2, 0) + vget_lane_f32(accumV2, 1); - - blkCnt = blockSize & 0x3; - while(blkCnt > 0) - { - tmp = *pIn++; - accum += expf(tmp - maxVal); - blkCnt--; - - } - - accum = maxVal + logf(accum); - - return(accum); -} -#else -float32_t arm_logsumexp_f32(const float32_t *in, uint32_t blockSize) -{ - float32_t maxVal; - float32_t tmp; - const float32_t *pIn; - uint32_t blkCnt; - float32_t accum; - - pIn = in; - blkCnt = blockSize; - - maxVal = *pIn++; - blkCnt--; - - while(blkCnt > 0) - { - tmp = *pIn++; - - if (tmp > maxVal) - { - maxVal = tmp; - } - blkCnt--; - - } - - blkCnt = blockSize; - pIn = in; - accum = 0; - while(blkCnt > 0) - { - tmp = *pIn++; - accum += expf(tmp - maxVal); - blkCnt--; - - } - accum = maxVal + logf(accum); - - return(accum); -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of groupStats group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_f32.c deleted file mode 100644 index 3206815..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_f32.c +++ /dev/null @@ -1,365 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_max_f32.c - * Description: Maximum value of a floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_MVEF)) && !defined(ARM_MATH_AUTOVECTORIZE) -#include -#endif - -/** - @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 number of samples in input vector - @param[out] pResult maximum value returned here - @param[out] pIndex index of maximum value returned here - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_max_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex) -{ - uint32_t blkCnt; - f32x4_t vecSrc; - f32x4_t curExtremValVec = vdupq_n_f32(F32_MIN); - float32_t maxValue = F32_MIN; - uint32_t idx = blockSize; - uint32x4_t indexVec; - uint32x4_t curExtremIdxVec; - uint32_t curIdx = 0; - mve_pred16_t p0; - float32_t tmp; - - - indexVec = vidupq_wb_u32(&curIdx, 1); - curExtremIdxVec = vdupq_n_u32(0); - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - vecSrc = vldrwq_f32(pSrc); - /* - * Get current max per lane and current index per lane - * when a max is selected - */ - p0 = vcmpgeq(vecSrc, curExtremValVec); - curExtremValVec = vpselq(vecSrc, curExtremValVec, p0); - curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0); - - indexVec = vidupq_wb_u32(&curIdx, 1); - - pSrc += 4; - /* Decrement the loop counter */ - blkCnt--; - } - - - /* - * Get max value across the vector - */ - maxValue = vmaxnmvq(maxValue, curExtremValVec); - /* - * set index for lower values to max possible index - */ - p0 = vcmpgeq(curExtremValVec, maxValue); - indexVec = vpselq(curExtremIdxVec, vdupq_n_u32(blockSize), p0); - /* - * Get min index which is thus for a max value - */ - idx = vminvq(idx, indexVec); - - /* Tail */ - blkCnt = blockSize & 0x3; - - while (blkCnt > 0U) - { - /* Initialize tmp to the next consecutive values one by one */ - tmp = *pSrc++; - - /* compare for the maximum value */ - if (maxValue < tmp) - { - /* Update the maximum value and it's index */ - maxValue = tmp; - idx = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* - * Save result - */ - *pIndex = idx; - *pResult = maxValue; -} - -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_max_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex) -{ - float32_t maxVal1, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* loop counter */ - - float32x4_t outV, srcV; - float32x2_t outV2; - - uint32x4_t idxV; - uint32x4_t maxIdx; - static const uint32_t indexInit[4]={4,5,6,7}; - static const uint32_t countVInit[4]={0,1,2,3}; - - uint32x4_t index; - uint32x4_t delta; - uint32x4_t countV; - uint32x2_t countV2; - - maxIdx = vdupq_n_u32(ULONG_MAX); - delta = vdupq_n_u32(4); - index = vld1q_u32(indexInit); - countV = vld1q_u32(countVInit); - - - /* Initialise the index value to zero. */ - outIndex = 0U; - - /* Load first input value that act as reference value for comparison */ - if (blockSize <= 3) - { - out = *pSrc++; - - blkCnt = blockSize - 1; - - 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--; - } - } - else - { - outV = vld1q_f32(pSrc); - pSrc += 4; - - /* Compute 4 outputs at a time */ - blkCnt = (blockSize - 4 ) >> 2U; - - while (blkCnt > 0U) - { - srcV = vld1q_f32(pSrc); - pSrc += 4; - - idxV = vcgtq_f32(srcV, outV); - outV = vbslq_f32(idxV, srcV, outV ); - countV = vbslq_u32(idxV, index,countV ); - - index = vaddq_u32(index,delta); - - /* Decrement the loop counter */ - blkCnt--; - } - - outV2 = vpmax_f32(vget_low_f32(outV),vget_high_f32(outV)); - outV2 = vpmax_f32(outV2,outV2); - out = vget_lane_f32(outV2, 0); - - idxV = vceqq_f32(outV, vdupq_n_f32(out)); - countV = vbslq_u32(idxV, countV,maxIdx); - - countV2 = vpmin_u32(vget_low_u32(countV),vget_high_u32(countV)); - countV2 = vpmin_u32(countV2,countV2); - outIndex = vget_lane_u32(countV2,0); - - /* if (blockSize - 1U) is not multiple of 4 */ - blkCnt = (blockSize - 4 ) % 4U; - - 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; -} -#else -void arm_max_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex) -{ - float32_t maxVal, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - uint32_t index; /* index of maximum value */ -#endif - - /* Initialise index value to zero. */ - outIndex = 0U; - - /* Load first input value that act as reference value for comparision */ - out = *pSrc++; - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - /* Initialise index of maximum value. */ - index = 0U; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (blockSize - 1U) >> 2U; - - while (blkCnt > 0U) - { - /* Initialize maxVal to next consecutive values one by one */ - maxVal = *pSrc++; - - /* compare for the maximum value */ - if (out < maxVal) - { - /* Update the maximum value and it's index */ - out = maxVal; - outIndex = index + 1U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 2U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 3U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 4U; - } - - index += 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (blockSize - 1U) % 4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (blockSize - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Initialize maxVal to the next consecutive values one by one */ - maxVal = *pSrc++; - - /* compare for the maximum value */ - if (out < maxVal) - { - /* Update the maximum value and it's index */ - out = maxVal; - outIndex = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store the maximum value and it's index into destination pointers */ - *pResult = out; - *pIndex = outIndex; -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of Max group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_no_idx_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_no_idx_f32.c deleted file mode 100644 index 992e3bf..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_no_idx_f32.c +++ /dev/null @@ -1,138 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_max_no_idx_f32.c - * Description: Maximum value of a floating-point vector without returning the index - * - * $Date: 16. October 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_MVEF)) && !defined(ARM_MATH_AUTOVECTORIZE) -#include -#endif - -/** - @ingroup groupStats - */ - - -/** - @addtogroup Max - @{ - */ - -/** - @brief Maximum value of a floating-point vector. - @param[in] pSrc points to the input vector - @param[in] blockSize number of samples in input vector - @param[out] pResult maximum value returned here - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -void arm_max_no_idx_f32( - const float32_t *pSrc, - uint32_t blockSize, - float32_t *pResult) -{ - f32x4_t vecSrc; - f32x4_t curExtremValVec = vdupq_n_f32(F32_MIN); - float32_t maxValue = F32_MIN; - float32_t newVal; - uint32_t blkCnt; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - - vecSrc = vldrwq_f32(pSrc); - /* - * update per-lane max. - */ - curExtremValVec = vmaxnmq(vecSrc, curExtremValVec); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pSrc += 4; - blkCnt --; - } - /* - * Get max value across the vector - */ - maxValue = vmaxnmvq(maxValue, curExtremValVec); - - blkCnt = blockSize & 3; - - while (blkCnt > 0U) - { - newVal = *pSrc++; - - /* compare for the maximum value */ - if (maxValue < newVal) - { - /* Update the maximum value and it's index */ - maxValue = newVal; - } - - blkCnt --; - } - - *pResult = maxValue; -} - -#else - -void arm_max_no_idx_f32( - const float32_t *pSrc, - uint32_t blockSize, - float32_t *pResult) -{ - float32_t maxValue = F32_MIN; - float32_t newVal; - - while (blockSize > 0U) - { - newVal = *pSrc++; - - /* compare for the maximum value */ - if (maxValue < newVal) - { - /* Update the maximum value and it's index */ - maxValue = newVal; - } - - blockSize --; - } - - *pResult = maxValue; -} - -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of Max group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q15.c deleted file mode 100644 index 1ea46c4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q15.c +++ /dev/null @@ -1,230 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_max_q15.c - * Description: Maximum value of a Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult maximum value returned here - @param[out] pIndex index of maximum value returned here - @return none - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_max_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult, - uint32_t * pIndex) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - q15x8_t curExtremValVec = vdupq_n_s16(Q15_MIN); - q15_t maxValue = Q15_MIN, temp; - uint32_t idx = blockSize; - uint16x8_t indexVec; - uint16x8_t curExtremIdxVec; - mve_pred16_t p0; - - - indexVec = vidupq_u16((uint32_t)0, 1); - curExtremIdxVec = vdupq_n_u16(0); - - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - vecSrc = vldrhq_s16(pSrc); - pSrc += 8; - /* - * Get current max per lane and current index per lane - * when a max is selected - */ - p0 = vcmpgeq(vecSrc, curExtremValVec); - curExtremValVec = vpselq(vecSrc, curExtremValVec, p0); - curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0); - - indexVec = indexVec + 8; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * Get max value across the vector - */ - maxValue = vmaxvq(maxValue, curExtremValVec); - /* - * set index for lower values to max possible index - */ - p0 = vcmpgeq(curExtremValVec, maxValue); - indexVec = vpselq(curExtremIdxVec, vdupq_n_u16(blockSize), p0); - /* - * Get min index which is thus for a max value - */ - idx = vminvq(idx, indexVec); - - /* Tail */ - blkCnt = blockSize & 0x7; - while (blkCnt > 0U) - { - /* Initialize temp to the next consecutive values one by one */ - temp = *pSrc++; - - /* compare for the maximum value */ - if (maxValue < temp) - { - /* Update the maximum value and it's index */ - maxValue = temp; - idx = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* - * Save result - */ - *pIndex = idx; - *pResult = maxValue; -} -#else -void arm_max_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult, - uint32_t * pIndex) -{ - q15_t maxVal, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - uint32_t index; /* index of maximum value */ -#endif - - /* Initialise index value to zero. */ - outIndex = 0U; - /* Load first input value that act as reference value for comparision */ - out = *pSrc++; - -#if defined (ARM_MATH_LOOPUNROLL) - /* Initialise index of maximum value. */ - index = 0U; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (blockSize - 1U) >> 2U; - - while (blkCnt > 0U) - { - /* Initialize maxVal to next consecutive values one by one */ - maxVal = *pSrc++; - - /* compare for the maximum value */ - if (out < maxVal) - { - /* Update the maximum value and it's index */ - out = maxVal; - outIndex = index + 1U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 2U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 3U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 4U; - } - - index += 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (blockSize - 1U) % 4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (blockSize - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Initialize maxVal to the next consecutive values one by one */ - maxVal = *pSrc++; - - /* compare for the maximum value */ - if (out < maxVal) - { - /* Update the maximum value and it's index */ - out = maxVal; - outIndex = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store the maximum value and it's index into destination pointers */ - *pResult = out; - *pIndex = outIndex; -} -#endif /* defined(ARM_MATH_MVEI) */ -/** - @} end of Max group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q31.c deleted file mode 100644 index 5d2ea7d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q31.c +++ /dev/null @@ -1,234 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_max_q31.c - * Description: Maximum value of a Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult maximum value returned here - @param[out] pIndex index of maximum value returned here - @return none - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_max_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult, - uint32_t * pIndex) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecSrc; - q31x4_t curExtremValVec = vdupq_n_s32( Q31_MIN); - q31_t maxValue = Q31_MIN; - q31_t temp; - uint32_t idx = blockSize; - uint32x4_t indexVec; - uint32x4_t curExtremIdxVec; - mve_pred16_t p0; - - - indexVec = vidupq_u32((uint32_t)0, 1); - curExtremIdxVec = vdupq_n_u32(0); - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - vecSrc = vldrwq_s32(pSrc); - pSrc += 4; - /* - * Get current max per lane and current index per lane - * when a max is selected - */ - p0 = vcmpgeq(vecSrc, curExtremValVec); - curExtremValVec = vpselq(vecSrc, curExtremValVec, p0); - curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0); - - indexVec = indexVec + 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * Get max value across the vector - */ - maxValue = vmaxvq(maxValue, curExtremValVec); - /* - * set index for lower values to max possible index - */ - p0 = vcmpgeq(curExtremValVec, maxValue); - indexVec = vpselq(curExtremIdxVec, vdupq_n_u32(blockSize), p0); - /* - * Get min index which is thus for a max value - */ - idx = vminvq(idx, indexVec); - - /* Tail */ - blkCnt = blockSize & 0x3; - - while (blkCnt > 0U) - { - /* Initialize maxVal to the next consecutive values one by one */ - temp = *pSrc++; - - /* compare for the maximum value */ - if (maxValue < temp) - { - /* Update the maximum value and it's index */ - maxValue = temp; - idx = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* - * Save result - */ - *pIndex = idx; - *pResult = maxValue; -} -#else -void arm_max_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult, - uint32_t * pIndex) -{ - q31_t maxVal, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - uint32_t index; /* index of maximum value */ -#endif - - /* Initialise index value to zero. */ - outIndex = 0U; - /* Load first input value that act as reference value for comparision */ - out = *pSrc++; - -#if defined (ARM_MATH_LOOPUNROLL) - /* Initialise index of maximum value. */ - index = 0U; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (blockSize - 1U) >> 2U; - - while (blkCnt > 0U) - { - /* Initialize maxVal to next consecutive values one by one */ - maxVal = *pSrc++; - - /* compare for the maximum value */ - if (out < maxVal) - { - /* Update the maximum value and it's index */ - out = maxVal; - outIndex = index + 1U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 2U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 3U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 4U; - } - - index += 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (blockSize - 1U) % 4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (blockSize - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Initialize maxVal to the next consecutive values one by one */ - maxVal = *pSrc++; - - /* compare for the maximum value */ - if (out < maxVal) - { - /* Update the maximum value and it's index */ - out = maxVal; - outIndex = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store the maximum value and it's index into destination pointers */ - *pResult = out; - *pIndex = outIndex; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Max group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q7.c deleted file mode 100644 index e19bed7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_max_q7.c +++ /dev/null @@ -1,288 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_max_q7.c - * Description: Maximum value of a Q7 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult maximum value returned here - @param[out] pIndex index of maximum value returned here - @return none - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -static void arm_small_blk_max_q7( - const q7_t * pSrc, - uint8_t blockSize, - q7_t * pResult, - uint32_t * pIndex) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecSrc; - q7x16_t curExtremValVec = vdupq_n_s8( Q7_MIN); - q7_t maxValue = Q7_MIN, temp; - uint32_t idx = blockSize; - uint8x16_t indexVec; - uint8x16_t curExtremIdxVec; - mve_pred16_t p0; - - - indexVec = vidupq_u8((uint32_t)0, 1); - curExtremIdxVec = vdupq_n_u8(0); - - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - vecSrc = vldrbq_s8(pSrc); - pSrc += 16; - /* - * Get current max per lane and current index per lane - * when a max is selected - */ - p0 = vcmpgeq(vecSrc, curExtremValVec); - curExtremValVec = vpselq(vecSrc, curExtremValVec, p0); - curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0); - - indexVec = indexVec + 16; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - - /* - * Get max value across the vector - */ - maxValue = vmaxvq(maxValue, curExtremValVec); - /* - * set index for lower values to max possible index - */ - p0 = vcmpgeq(curExtremValVec, maxValue); - indexVec = vpselq(curExtremIdxVec, vdupq_n_u8(blockSize), p0); - /* - * Get min index which is thus for a max value - */ - idx = vminvq(idx, indexVec); - - /* - * tail - */ - blkCnt = blockSize & 0xF; - - while (blkCnt > 0U) - { - /* Initialize temp to the next consecutive values one by one */ - temp = *pSrc++; - - /* compare for the maximum value */ - if (maxValue < temp) - { - /* Update the maximum value and it's index */ - maxValue = temp; - idx = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - /* - * Save result - */ - *pIndex = idx; - *pResult = maxValue; -} - -void arm_max_q7( - const q7_t * pSrc, - uint32_t blockSize, - q7_t * pResult, - uint32_t * pIndex) -{ - int32_t totalSize = blockSize; - - if (totalSize <= UINT8_MAX) - { - arm_small_blk_max_q7(pSrc, blockSize, pResult, pIndex); - } - else - { - uint32_t curIdx = 0; - q7_t curBlkExtr = Q7_MIN; - uint32_t curBlkPos = 0; - uint32_t curBlkIdx = 0; - /* - * process blocks of 255 elts - */ - while (totalSize >= UINT8_MAX) - { - const q7_t *curSrc = pSrc; - - arm_small_blk_max_q7(curSrc, UINT8_MAX, pResult, pIndex); - if (*pResult > curBlkExtr) - { - /* - * update partial extrema - */ - curBlkExtr = *pResult; - curBlkPos = *pIndex; - curBlkIdx = curIdx; - } - curIdx++; - pSrc += UINT8_MAX; - totalSize -= UINT8_MAX; - } - /* - * remainder - */ - arm_small_blk_max_q7(pSrc, totalSize, pResult, pIndex); - if (*pResult > curBlkExtr) - { - curBlkExtr = *pResult; - curBlkPos = *pIndex; - curBlkIdx = curIdx; - } - *pIndex = curBlkIdx * UINT8_MAX + curBlkPos; - *pResult = curBlkExtr; - } -} -#else -void arm_max_q7( - const q7_t * pSrc, - uint32_t blockSize, - q7_t * pResult, - uint32_t * pIndex) -{ - q7_t maxVal, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - uint32_t index; /* index of maximum value */ -#endif - - /* Initialise index value to zero. */ - outIndex = 0U; - /* Load first input value that act as reference value for comparision */ - out = *pSrc++; - -#if defined (ARM_MATH_LOOPUNROLL) - /* Initialise index of maximum value. */ - index = 0U; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (blockSize - 1U) >> 2U; - - while (blkCnt > 0U) - { - /* Initialize maxVal to next consecutive values one by one */ - maxVal = *pSrc++; - - /* compare for the maximum value */ - if (out < maxVal) - { - /* Update the maximum value and it's index */ - out = maxVal; - outIndex = index + 1U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 2U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 3U; - } - - maxVal = *pSrc++; - if (out < maxVal) - { - out = maxVal; - outIndex = index + 4U; - } - - index += 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (blockSize - 1U) % 4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (blockSize - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Initialize maxVal to the next consecutive values one by one */ - maxVal = *pSrc++; - - /* compare for the maximum value */ - if (out < maxVal) - { - /* Update the maximum value and it's index */ - out = maxVal; - outIndex = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store the maximum value and it's index into destination pointers */ - *pResult = out; - *pIndex = outIndex; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Max group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_f32.c deleted file mode 100644 index 8361eaa..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_f32.c +++ /dev/null @@ -1,210 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mean_f32.c - * Description: Mean value of a floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector. - @param[out] pResult mean value returned here. - @return none - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_mean_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - f32x4_t vecSrc; - f32x4_t sumVec = vdupq_n_f32(0.0f); - float32_t sum = 0.0f; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - vecSrc = vldrwq_f32(pSrc); - sumVec = vaddq_f32(sumVec, vecSrc); - - blkCnt --; - pSrc += 4; - } - - sum = vecAddAcrossF32Mve(sumVec); - - /* Tail */ - blkCnt = blockSize & 0x3; - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - *pResult = sum / (float32_t) blockSize; -} - - -#else -#if defined(ARM_MATH_NEON_EXPERIMENTAL) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_mean_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - float32_t sum = 0.0f; /* Temporary result storage */ - float32x4_t sumV = vdupq_n_f32(0.0f); /* Temporary result storage */ - float32x2_t sumV2; - - uint32_t blkCnt; /* Loop counter */ - - float32x4_t inV; - - blkCnt = blockSize >> 2U; - - /* 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]) */ - inV = vld1q_f32(pSrc); - sumV = vaddq_f32(sumV, inV); - - pSrc += 4; - /* Decrement the loop counter */ - blkCnt--; - } - - sumV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); - sum = vget_lane_f32(sumV2, 0) + vget_lane_f32(sumV2, 1); - - /* If the blockSize is not a multiple of 4, compute any remaining output samples here. - ** No loop unrolling is used. */ - blkCnt = blockSize & 3; - - 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; -} -#else -void arm_mean_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - float32_t sum = 0.0f; /* Temporary result storage */ - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - - sum += *pSrc++; - - sum += *pSrc++; - - sum += *pSrc++; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ - /* Store result to destination */ - *pResult = (sum / blockSize); -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of mean group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q15.c deleted file mode 100644 index 6920869..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q15.c +++ /dev/null @@ -1,156 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mean_q15.c - * Description: Mean value of a Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult mean value returned here - @return none - - @par Scaling and Overflow Behavior - 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 truncated to yield a result of 1.15 format. - */ - -#if defined(ARM_MATH_MVEI) -void arm_mean_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - q31_t sum = 0L; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3U; - while (blkCnt > 0U) - { - vecSrc = vldrhq_s16(pSrc); - /* - * sum lanes - */ - sum = vaddvaq(sum, vecSrc); - - blkCnt--; - pSrc += 8; - } - - /* Tail */ - blkCnt = blockSize & 0x7; - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ - /* Store the result to the destination */ - *pResult = (q15_t) (sum / (int32_t) blockSize); -} -#else -void arm_mean_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t sum = 0; /* Temporary result storage */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t in; -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - in = read_q15x2_ia ((q15_t **) &pSrc); - sum += ((in << 16U) >> 16U); - sum += (in >> 16U); - - in = read_q15x2_ia ((q15_t **) &pSrc); - sum += ((in << 16U) >> 16U); - sum += (in >> 16U); - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ - /* Store result to destination */ - *pResult = (q15_t) (sum / (int32_t) blockSize); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of mean group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q31.c deleted file mode 100644 index 2694ef5..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q31.c +++ /dev/null @@ -1,149 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mean_q31.c - * Description: Mean value of a Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult mean value returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) -void arm_mean_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecSrc; - q63_t sum = 0LL; - - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - - vecSrc = vldrwq_s32(pSrc); - /* - * sum lanes - */ - sum = vaddlvaq(sum, vecSrc); - - blkCnt --; - pSrc += 4; - } - - /* Tail */ - blkCnt = blockSize & 0x3; - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - blkCnt --; - } - - *pResult = arm_div_q63_to_q31(sum, blockSize); -} -#else -void arm_mean_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t sum = 0; /* Temporary result storage */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - - sum += *pSrc++; - - sum += *pSrc++; - - sum += *pSrc++; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ - /* Store result to destination */ - *pResult = (q31_t) (sum / blockSize); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of mean group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q7.c deleted file mode 100644 index 2413c21..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_mean_q7.c +++ /dev/null @@ -1,153 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mean_q7.c - * Description: Mean value of a Q7 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult mean value returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ - -#if defined(ARM_MATH_MVEI) - -void arm_mean_q7( - const q7_t * pSrc, - uint32_t blockSize, - q7_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecSrc; - q31_t sum = 0L; - - - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - vecSrc = vldrbq_s8(pSrc); - /* - * sum lanes - */ - sum = vaddvaq(sum, vecSrc); - - blkCnt--; - pSrc += 16; - } - - blkCnt = blockSize & 0xF; - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - - /* Decrement 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); -} -#else -void arm_mean_q7( - const q7_t * pSrc, - uint32_t blockSize, - q7_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t sum = 0; /* Temporary result storage */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t in; -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - in = read_q7x4_ia ((q7_t **) &pSrc); - sum += ((in << 24U) >> 24U); - sum += ((in << 16U) >> 24U); - sum += ((in << 8U) >> 24U); - sum += (in >> 24U); - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - sum += *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ - /* Store result to destination */ - *pResult = (q7_t) (sum / (int32_t) blockSize); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of mean group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_f32.c deleted file mode 100644 index ee74572..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_f32.c +++ /dev/null @@ -1,363 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_min_f32.c - * Description: Minimum value of a floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_MVEF)) && !defined(ARM_MATH_AUTOVECTORIZE) -#include -#endif - - -/** - @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 number of samples in input vector - @param[out] pResult minimum value returned here - @param[out] pIndex index of minimum value returned here - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -void arm_min_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex) -{ - uint32_t blkCnt; /* loop counters */ - f32x4_t vecSrc; - float32_t const *pSrcVec; - f32x4_t curExtremValVec = vdupq_n_f32(F32_MAX); - float32_t minValue = F32_MAX; - uint32_t idx = blockSize; - uint32x4_t indexVec; - uint32x4_t curExtremIdxVec; - float32_t tmp; - mve_pred16_t p0; - - indexVec = vidupq_u32((uint32_t)0, 1); - curExtremIdxVec = vdupq_n_u32(0); - - pSrcVec = (float32_t const *) pSrc; - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - vecSrc = vldrwq_f32(pSrcVec); - pSrcVec += 4; - /* - * Get current max per lane and current index per lane - * when a max is selected - */ - p0 = vcmpleq(vecSrc, curExtremValVec); - curExtremValVec = vpselq(vecSrc, curExtremValVec, p0); - curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0); - - indexVec = indexVec + 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * Get min value across the vector - */ - minValue = vminnmvq(minValue, curExtremValVec); - /* - * set index for lower values to max possible index - */ - p0 = vcmpleq(curExtremValVec, minValue); - indexVec = vpselq(curExtremIdxVec, vdupq_n_u32(blockSize), p0); - /* - * Get min index which is thus for a max value - */ - idx = vminvq(idx, indexVec); - - /* - * tail - */ - blkCnt = blockSize & 0x3; - - while (blkCnt > 0U) - { - /* Initialize minVal to the next consecutive values one by one */ - tmp = *pSrc++; - - /* compare for the minimum value */ - if (minValue > tmp) - { - /* Update the minimum value and it's index */ - minValue = tmp; - idx = blockSize - blkCnt; - } - blkCnt--; - } - /* - * Save result - */ - *pIndex = idx; - *pResult = minValue; -} - -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_min_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex) -{ - float32_t maxVal1, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* loop counter */ - - float32x4_t outV, srcV; - float32x2_t outV2; - - uint32x4_t idxV; - static const uint32_t indexInit[4]={4,5,6,7}; - static const uint32_t countVInit[4]={0,1,2,3}; - uint32x4_t maxIdx; - uint32x4_t index; - uint32x4_t delta; - uint32x4_t countV; - uint32x2_t countV2; - - maxIdx = vdupq_n_u32(ULONG_MAX); - delta = vdupq_n_u32(4); - index = vld1q_u32(indexInit); - countV = vld1q_u32(countVInit); - - /* Initialise the index value to zero. */ - outIndex = 0U; - - /* Load first input value that act as reference value for comparison */ - if (blockSize <= 3) - { - out = *pSrc++; - - blkCnt = blockSize - 1; - - 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--; - } - } - else - { - outV = vld1q_f32(pSrc); - pSrc += 4; - - /* Compute 4 outputs at a time */ - blkCnt = (blockSize - 4 ) >> 2U; - - while (blkCnt > 0U) - { - srcV = vld1q_f32(pSrc); - pSrc += 4; - - idxV = vcltq_f32(srcV, outV); - outV = vbslq_f32(idxV, srcV, outV ); - countV = vbslq_u32(idxV, index,countV ); - - index = vaddq_u32(index,delta); - - /* Decrement the loop counter */ - blkCnt--; - } - - outV2 = vpmin_f32(vget_low_f32(outV),vget_high_f32(outV)); - outV2 = vpmin_f32(outV2,outV2); - out = vget_lane_f32(outV2,0); - - idxV = vceqq_f32(outV, vdupq_n_f32(out)); - countV = vbslq_u32(idxV, countV,maxIdx); - - countV2 = vpmin_u32(vget_low_u32(countV),vget_high_u32(countV)); - countV2 = vpmin_u32(countV2,countV2); - outIndex = vget_lane_u32(countV2,0); - - /* if (blockSize - 1U) is not multiple of 4 */ - blkCnt = (blockSize - 4 ) % 4U; - - 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; -} -#else -void arm_min_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex) -{ - float32_t minVal, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - uint32_t index; /* index of maximum value */ -#endif - - /* Initialise index value to zero. */ - outIndex = 0U; - - /* Load first input value that act as reference value for comparision */ - out = *pSrc++; - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - /* Initialise index of maximum value. */ - index = 0U; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (blockSize - 1U) >> 2U; - - while (blkCnt > 0U) - { - /* Initialize minVal to next consecutive values one by one */ - minVal = *pSrc++; - - /* compare for the minimum value */ - if (out > minVal) - { - /* Update the minimum value and it's index */ - out = minVal; - outIndex = index + 1U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 2U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 3U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 4U; - } - - index += 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (blockSize - 1U) % 4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (blockSize - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Initialize minVal to the next consecutive values one by one */ - minVal = *pSrc++; - - /* compare for the minimum value */ - if (out > minVal) - { - /* Update the minimum value and it's index */ - out = minVal; - outIndex = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store the minimum value and it's index into destination pointers */ - *pResult = out; - *pIndex = outIndex; -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of Min group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q15.c deleted file mode 100644 index ef136d3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q15.c +++ /dev/null @@ -1,234 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_min_q15.c - * Description: Minimum value of a Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult minimum value returned here - @param[out] pIndex index of minimum value returned here - @return none - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_min_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult, - uint32_t * pIndex) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - q15x8_t curExtremValVec = vdupq_n_s16(Q15_MAX); - q15_t minValue = Q15_MAX,temp; - uint32_t idx = blockSize; - uint16x8_t indexVec; - uint16x8_t curExtremIdxVec; - mve_pred16_t p0; - - - indexVec = vidupq_u16((uint32_t)0, 1); - curExtremIdxVec = vdupq_n_u16(0); - - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - vecSrc = vldrhq_s16(pSrc); - pSrc += 8; - /* - * Get current min per lane and current index per lane - * when a min is selected - */ - p0 = vcmpleq(vecSrc, curExtremValVec); - curExtremValVec = vpselq(vecSrc, curExtremValVec, p0); - curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0); - - indexVec = indexVec + 8; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * Get min value across the vector - */ - minValue = vminvq(minValue, curExtremValVec); - /* - * set index for lower values to min possible index - */ - p0 = vcmpleq(curExtremValVec, minValue); - indexVec = vpselq(curExtremIdxVec, vdupq_n_u16(blockSize), p0); - /* - * Get min index which is thus for a min value - */ - idx = vminvq(idx, indexVec); - - /* - * tail - */ - blkCnt = blockSize & 7; - while (blkCnt > 0U) - { - /* Initialize minVal to the next consecutive values one by one */ - temp = *pSrc++; - - /* compare for the minimum value */ - if (minValue > temp) - { - /* Update the minimum value and it's index */ - minValue = temp; - idx = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* - * Save result - */ - *pIndex = idx; - *pResult = minValue; -} -#else -void arm_min_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult, - uint32_t * pIndex) -{ - q15_t minVal, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - uint32_t index; /* index of maximum value */ -#endif - - /* Initialise index value to zero. */ - outIndex = 0U; - /* Load first input value that act as reference value for comparision */ - out = *pSrc++; - -#if defined (ARM_MATH_LOOPUNROLL) - /* Initialise index of maximum value. */ - index = 0U; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (blockSize - 1U) >> 2U; - - while (blkCnt > 0U) - { - /* Initialize minVal to next consecutive values one by one */ - minVal = *pSrc++; - - /* compare for the minimum value */ - if (out > minVal) - { - /* Update the minimum value and it's index */ - out = minVal; - outIndex = index + 1U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 2U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 3U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 4U; - } - - index += 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (blockSize - 1U) % 4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (blockSize - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Initialize minVal to the next consecutive values one by one */ - minVal = *pSrc++; - - /* compare for the minimum value */ - if (out > minVal) - { - /* Update the minimum value and it's index */ - out = minVal; - outIndex = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store the minimum value and it's index into destination pointers */ - *pResult = out; - *pIndex = outIndex; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Min group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q31.c deleted file mode 100644 index e55b52f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q31.c +++ /dev/null @@ -1,233 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_min_q31.c - * Description: Minimum value of a Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult minimum value returned here - @param[out] pIndex index of minimum value returned here - @return none - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -void arm_min_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult, - uint32_t * pIndex) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecSrc; - q31x4_t curExtremValVec = vdupq_n_s32(Q31_MAX); - q31_t minValue = Q31_MAX, temp; - uint32_t idx = blockSize; - uint32x4_t indexVec; - uint32x4_t curExtremIdxVec; - mve_pred16_t p0; - - - indexVec = vidupq_u32((uint32_t)0, 1); - curExtremIdxVec = vdupq_n_u32(0); - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - vecSrc = vldrwq_s32(pSrc); - pSrc += 4; - /* - * Get current min per lane and current index per lane - * when a min is selected - */ - p0 = vcmpleq(vecSrc, curExtremValVec); - curExtremValVec = vpselq(vecSrc, curExtremValVec, p0); - curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0); - - indexVec = indexVec + 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * Get min value across the vector - */ - minValue = vminvq(minValue, curExtremValVec); - /* - * set index for lower values to min possible index - */ - p0 = vcmpleq(curExtremValVec, minValue); - indexVec = vpselq(curExtremIdxVec, vdupq_n_u32(blockSize), p0); - /* - * Get min index which is thus for a min value - */ - idx = vminvq(idx, indexVec); - - - /* Tail */ - blkCnt = blockSize & 0x3; - while (blkCnt > 0U) - { - /* Initialize temp to the next consecutive values one by one */ - temp = *pSrc++; - - /* compare for the minimum value */ - if (minValue > temp) - { - /* Update the minimum value and it's index */ - minValue = temp; - idx = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - /* - * Save result - */ - *pIndex = idx; - *pResult = minValue; -} -#else -void arm_min_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult, - uint32_t * pIndex) -{ - q31_t minVal, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - uint32_t index; /* index of maximum value */ -#endif - - /* Initialise index value to zero. */ - outIndex = 0U; - /* Load first input value that act as reference value for comparision */ - out = *pSrc++; - -#if defined (ARM_MATH_LOOPUNROLL) - /* Initialise index of maximum value. */ - index = 0U; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (blockSize - 1U) >> 2U; - - while (blkCnt > 0U) - { - /* Initialize minVal to next consecutive values one by one */ - minVal = *pSrc++; - - /* compare for the minimum value */ - if (out > minVal) - { - /* Update the minimum value and it's index */ - out = minVal; - outIndex = index + 1U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 2U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 3U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 4U; - } - - index += 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (blockSize - 1U) % 4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (blockSize - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Initialize minVal to the next consecutive values one by one */ - minVal = *pSrc++; - - /* compare for the minimum value */ - if (out > minVal) - { - /* Update the minimum value and it's index */ - out = minVal; - outIndex = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store the minimum value and it's index into destination pointers */ - *pResult = out; - *pIndex = outIndex; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Min group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q7.c deleted file mode 100644 index f1ce64e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_min_q7.c +++ /dev/null @@ -1,284 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_min_q7.c - * Description: Minimum value of a Q7 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult minimum value returned here - @param[out] pIndex index of minimum value returned here - @return none - */ -#if defined(ARM_MATH_MVEI) - -#include "arm_helium_utils.h" - -static void arm_small_blk_min_q7( - const q7_t * pSrc, - uint8_t blockSize, - q7_t * pResult, - uint32_t * pIndex) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecSrc; - q7x16_t curExtremValVec = vdupq_n_s8(Q7_MAX); - q7_t minValue = Q7_MAX,temp; - uint32_t idx = blockSize; - uint8x16_t indexVec; - uint8x16_t curExtremIdxVec; - mve_pred16_t p0; - - - indexVec = vidupq_u8((uint32_t)0, 1); - curExtremIdxVec = vdupq_n_u8(0); - - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - vecSrc = vldrbq_s8(pSrc); - pSrc += 16; - /* - * Get current min per lane and current index per lane - * when a min is selected - */ - p0 = vcmpleq(vecSrc, curExtremValVec); - curExtremValVec = vpselq(vecSrc, curExtremValVec, p0); - curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0); - - indexVec = indexVec + 16; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * Get min value across the vector - */ - minValue = vminvq(minValue, curExtremValVec); - /* - * set index for lower values to min possible index - */ - p0 = vcmpleq(curExtremValVec, minValue); - indexVec = vpselq(curExtremIdxVec, vdupq_n_u8(blockSize), p0); - /* - * Get min index which is thus for a min value - */ - idx = vminvq(idx, indexVec); - - blkCnt = blockSize & 0xF; - while (blkCnt > 0U) - { - /* Initialize minVal to the next consecutive values one by one */ - temp = *pSrc++; - - /* compare for the minimum value */ - if (minValue > temp) - { - /* Update the minimum value and it's index */ - minValue = temp; - idx = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - /* - * Save result - */ - *pIndex = idx; - *pResult = minValue; -} - -void arm_min_q7( - const q7_t * pSrc, - uint32_t blockSize, - q7_t * pResult, - uint32_t * pIndex) -{ - int32_t totalSize = blockSize; - - if (totalSize <= UINT8_MAX) - { - arm_small_blk_min_q7(pSrc, blockSize, pResult, pIndex); - } - else - { - uint32_t curIdx = 0; - q7_t curBlkExtr = Q7_MAX; - uint32_t curBlkPos = 0; - uint32_t curBlkIdx = 0; - /* - * process blocks of 255 elts - */ - while (totalSize >= UINT8_MAX) - { - const q7_t *curSrc = pSrc; - - arm_small_blk_min_q7(curSrc, UINT8_MAX, pResult, pIndex); - if (*pResult < curBlkExtr) - { - /* - * update partial extrema - */ - curBlkExtr = *pResult; - curBlkPos = *pIndex; - curBlkIdx = curIdx; - } - curIdx++; - pSrc += UINT8_MAX; - totalSize -= UINT8_MAX; - } - /* - * remainder - */ - arm_small_blk_min_q7(pSrc, totalSize, pResult, pIndex); - if (*pResult < curBlkExtr) - { - curBlkExtr = *pResult; - curBlkPos = *pIndex; - curBlkIdx = curIdx; - } - *pIndex = curBlkIdx * UINT8_MAX + curBlkPos; - *pResult = curBlkExtr; - } -} -#else -void arm_min_q7( - const q7_t * pSrc, - uint32_t blockSize, - q7_t * pResult, - uint32_t * pIndex) -{ - q7_t minVal, out; /* Temporary variables to store the output value. */ - uint32_t blkCnt, outIndex; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - uint32_t index; /* index of maximum value */ -#endif - - /* Initialise index value to zero. */ - outIndex = 0U; - /* Load first input value that act as reference value for comparision */ - out = *pSrc++; - -#if defined (ARM_MATH_LOOPUNROLL) - /* Initialise index of maximum value. */ - index = 0U; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = (blockSize - 1U) >> 2U; - - while (blkCnt > 0U) - { - /* Initialize minVal to next consecutive values one by one */ - minVal = *pSrc++; - - /* compare for the minimum value */ - if (out > minVal) - { - /* Update the minimum value and it's index */ - out = minVal; - outIndex = index + 1U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 2U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 3U; - } - - minVal = *pSrc++; - if (out > minVal) - { - out = minVal; - outIndex = index + 4U; - } - - index += 4U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = (blockSize - 1U) % 4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = (blockSize - 1U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* Initialize minVal to the next consecutive values one by one */ - minVal = *pSrc++; - - /* compare for the minimum value */ - if (out > minVal) - { - /* Update the minimum value and it's index */ - out = minVal; - outIndex = blockSize - blkCnt; - } - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store the minimum value and it's index into destination pointers */ - *pResult = out; - *pIndex = outIndex; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Min group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_f32.c deleted file mode 100644 index a5509a9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_f32.c +++ /dev/null @@ -1,225 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_power_f32.c - * Description: Sum of the squares of the elements of a floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult sum of the squares value returned here - @return none - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_power_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - f32x4_t vecSrc; - f32x4_t sumVec = vdupq_n_f32(0.0f); - float32_t sum = 0.0f; - float32_t in; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - vecSrc = vldrwq_f32(pSrc); - /* - * sum lanes - */ - sumVec = vfmaq(sumVec, vecSrc, vecSrc); - - blkCnt --; - pSrc += 4; - } - sum = vecAddAcrossF32Mve(sumVec); - - /* - * tail - */ - blkCnt = blockSize & 0x3; - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ - in = *pSrc++; - sum += in * in; - - /* Decrement loop counter */ - blkCnt--; - } - - *pResult = sum; -} -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_power_f32( - const 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 */ - - float32x4_t sumV = vdupq_n_f32(0.0f); /* Temporary result storage */ - float32x2_t sumV2; - float32x4_t inV; - - blkCnt = blockSize >> 2U; - - /* 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. */ - inV = vld1q_f32(pSrc); - sumV = vmlaq_f32(sumV, inV, inV); - pSrc += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - sumV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); - sum = vget_lane_f32(sumV2, 0) + vget_lane_f32(sumV2, 1); - - /* 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. */ - in = *pSrc++; - sum += in * in; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Store the result to the destination */ - *pResult = sum; -} -#else -void arm_power_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - float32_t sum = 0.0f; /* Temporary result storage */ - float32_t in; /* Temporary variable to store input value */ - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ - in = *pSrc++; - sum += in * in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store result to destination */ - *pResult = sum; -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of power group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q15.c deleted file mode 100644 index 69c9c94..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q15.c +++ /dev/null @@ -1,177 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_power_q15.c - * Description: Sum of the squares of the elements of a Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult sum of the squares value returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) - -void arm_power_q15( - const q15_t * pSrc, - uint32_t blockSize, - q63_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - q63_t sum = 0LL; - q15_t in; - - /* Compute 8 outputs at a time */ - blkCnt = blockSize >> 3U; - while (blkCnt > 0U) - { - vecSrc = vldrhq_s16(pSrc); - /* - * sum lanes - */ - sum = vmlaldavaq(sum, vecSrc, vecSrc); - - blkCnt --; - pSrc += 8; - } - - /* - * tail - */ - blkCnt = blockSize & 0x7; - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ - in = *pSrc++; - sum += ((q31_t) in * in); - - /* Decrement loop counter */ - blkCnt--; - } - - *pResult = sum; -} -#else -void arm_power_q15( - const q15_t * pSrc, - uint32_t blockSize, - q63_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t sum = 0; /* Temporary result storage */ - q15_t in; /* Temporary variable to store input value */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t in32; /* Temporary variable to store packed input value */ -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ -#if defined (ARM_MATH_DSP) - in32 = read_q15x2_ia ((q15_t **) &pSrc); - sum = __SMLALD(in32, in32, sum); - - in32 = read_q15x2_ia ((q15_t **) &pSrc); - sum = __SMLALD(in32, in32, sum); -#else - in = *pSrc++; - sum += ((q31_t) in * in); - - in = *pSrc++; - sum += ((q31_t) in * in); - - in = *pSrc++; - sum += ((q31_t) in * in); - - in = *pSrc++; - sum += ((q31_t) in * in); -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ - in = *pSrc++; - sum += ((q31_t) in * in); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store result in 34.30 format */ - *pResult = sum; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of power group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q31.c deleted file mode 100644 index 4de4c9e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q31.c +++ /dev/null @@ -1,165 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_power_q31.c - * Description: Sum of the squares of the elements of a Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult sum of the squares value returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) -void arm_power_q31( - const q31_t * pSrc, - uint32_t blockSize, - q63_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecSrc; - q63_t sum = 0LL; - q31_t in; - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - vecSrc = vldrwq_s32(pSrc); - /* - * sum lanes - */ - sum = vrmlaldavhaq(sum, vecSrc, vecSrc); - - blkCnt --; - pSrc += 4; - } - - /* - * tail - */ - blkCnt = blockSize & 0x3; - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ - in = *pSrc++; - sum += ((q63_t) in * in) >> 8; - - /* Decrement loop counter */ - blkCnt--; - } - - *pResult = asrl(sum, 6); -} -#else -void arm_power_q31( - const q31_t * pSrc, - uint32_t blockSize, - q63_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t sum = 0; /* Temporary result storage */ - q31_t in; /* Temporary variable to store input value */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power then shift intermediate results by 14 bits to maintain 16.48 format and store 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ - in = *pSrc++; - sum += ((q63_t) in * in) >> 14U; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store results in 16.48 format */ - *pResult = sum; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of power group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q7.c deleted file mode 100644 index 0e1b9da..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_power_q7.c +++ /dev/null @@ -1,180 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_power_q7.c - * Description: Sum of the squares of the elements of a Q7 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult sum of the squares value returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) -void arm_power_q7( - const q7_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecSrc; - q31_t sum = 0LL; - q7_t in; - - /* Compute 16 outputs at a time */ - blkCnt = blockSize >> 4U; - while (blkCnt > 0U) - { - vecSrc = vldrbq_s8(pSrc); - /* - * sum lanes - */ - sum = vmladavaq(sum, vecSrc, vecSrc); - - blkCnt--; - pSrc += 16; - } - - /* - * tail - */ - blkCnt = blockSize & 0xF; - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ - in = *pSrc++; - sum += ((q15_t) in * in); - - /* Decrement loop counter */ - blkCnt--; - } - - *pResult = sum; -} -#else -void arm_power_q7( - const q7_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t sum = 0; /* Temporary result storage */ - q7_t in; /* Temporary variable to store input value */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t in32; /* Temporary variable to store packed input value */ - q31_t in1, in2; /* Temporary variables to store input value */ -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ -#if defined (ARM_MATH_DSP) - in32 = read_q7x4_ia ((q7_t **) &pSrc); - - in1 = __SXTB16(__ROR(in32, 8)); - in2 = __SXTB16(in32); - - /* calculate power and accumulate to accumulator */ - sum = __SMLAD(in1, in1, sum); - sum = __SMLAD(in2, in2, sum); -#else - in = *pSrc++; - sum += ((q15_t) in * in); - - in = *pSrc++; - sum += ((q15_t) in * in); - - in = *pSrc++; - sum += ((q15_t) in * in); - - in = *pSrc++; - sum += ((q15_t) in * in); -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute Power and store result in a temporary variable, sum. */ - in = *pSrc++; - sum += ((q15_t) in * in); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Store result in 18.14 format */ - *pResult = sum; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of power group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_f32.c deleted file mode 100644 index 7f26aff..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_f32.c +++ /dev/null @@ -1,192 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rms_f32.c - * Description: Root mean square value of the elements of a floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupStats - */ - -/** - @defgroup RMS Root mean square (RMS) - - Calculates the Root Mean Square 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 number of samples in input vector - @param[out] pResult root mean square value returned here - @return none - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_rms_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - float32_t pow = 0.0f; - - arm_power_f32(pSrc, blockSize, &pow); - - /* Compute Rms and store the result in the destination */ - arm_sqrt_f32(pow / (float32_t) blockSize, pResult); -} -#else -#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_rms_f32( - const 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 */ - - float32x4_t sumV = vdupq_n_f32(0.0f); /* Temporary result storage */ - float32x2_t sumV2; - float32x4_t inV; - - blkCnt = blockSize >> 2U; - - /* 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. */ - inV = vld1q_f32(pSrc); - sumV = vmlaq_f32(sumV, inV, inV); - pSrc += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - sumV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); - sum = vget_lane_f32(sumV2, 0) + vget_lane_f32(sumV2, 1); - - /* 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. */ - 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); -} -#else -void arm_rms_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - float32_t sum = 0.0f; /* Temporary result storage */ - float32_t in; /* Temporary variable to store input value */ - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - in = *pSrc++; - /* Compute sum of squares and store result in a temporary variable, sum. */ - sum += in * in; - - in = *pSrc++; - sum += in * in; - - in = *pSrc++; - sum += in * in; - - in = *pSrc++; - sum += in * in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - in = *pSrc++; - /* Compute sum of squares and store result in a temporary variable. */ - sum += ( in * in); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Compute Rms and store result in destination */ - arm_sqrt_f32(sum / (float32_t) blockSize, pResult); -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of RMS group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_q15.c deleted file mode 100644 index 8097771..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_q15.c +++ /dev/null @@ -1,149 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rms_q15.c - * Description: Root Mean Square of the elements of a Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupStats - */ - -/** - @addtogroup RMS - @{ - */ - -/** - @brief Root Mean Square of the elements of a Q15 vector. - @param[in] pSrc points to the input vector - @param[in] blockSize number of samples in input vector - @param[out] pResult root mean square value returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) -void arm_rms_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult) -{ - q63_t pow = 0.0f; - q15_t normalizedPower; - - arm_power_q15(pSrc, blockSize, &pow); - - normalizedPower=__SSAT((pow / (q63_t) blockSize) >> 15,16); - arm_sqrt_q15(normalizedPower, pResult); -} -#else -void arm_rms_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t sum = 0; /* Temporary result storage */ - q15_t in; /* Temporary variable to store input value */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t in32; /* Temporary variable to store input value */ -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - /* Compute sum of squares and store result in a temporary variable. */ -#if defined (ARM_MATH_DSP) - in32 = read_q15x2_ia ((q15_t **) &pSrc); - sum = __SMLALD(in32, in32, sum); - - in32 = read_q15x2_ia ((q15_t **) &pSrc); - sum = __SMLALD(in32, in32, sum); -#else - in = *pSrc++; - sum += ((q31_t) in * in); - - in = *pSrc++; - sum += ((q31_t) in * in); - - in = *pSrc++; - sum += ((q31_t) in * in); - - in = *pSrc++; - sum += ((q31_t) in * in); -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - in = *pSrc++; - /* Compute sum of squares and store result in a temporary variable. */ - sum += ((q31_t) in * in); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Truncating and saturating the accumulator to 1.15 format */ - /* Store result in destination */ - arm_sqrt_q15(__SSAT((sum / (q63_t)blockSize) >> 15, 16), pResult); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of RMS group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_q31.c deleted file mode 100644 index 3c1c692..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_rms_q31.c +++ /dev/null @@ -1,141 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rms_q31.c - * Description: Root Mean Square of the elements of a Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupStats - */ - -/** - @addtogroup RMS - @{ - */ - -/** - @brief Root Mean Square of the elements of a Q31 vector. - @param[in] pSrc points to the input vector - @param[in] blockSize number of samples in input vector - @param[out] pResult root mean square value returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) - -void arm_rms_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - q63_t pow = 0.0f; - q31_t normalizedPower; - arm_power_q31(pSrc, blockSize, &pow); - - normalizedPower=clip_q63_to_q31((pow / (q63_t) blockSize) >> 17); - arm_sqrt_q31(normalizedPower, pResult); - -} - -#else -void arm_rms_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - uint64_t sum = 0; /* Temporary result storage (can get never negative. changed type from q63 to uint64 */ - q31_t in; /* Temporary variable to store input value */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - in = *pSrc++; - /* Compute sum of squares and store result in a temporary variable, sum. */ - sum += ((q63_t) in * in); - - in = *pSrc++; - sum += ((q63_t) in * in); - - in = *pSrc++; - sum += ((q63_t) in * in); - - in = *pSrc++; - sum += ((q63_t) in * in); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - - in = *pSrc++; - /* Compute sum of squares and store result in a temporary variable. */ - sum += ((q63_t) in * in); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Convert data in 2.62 to 1.31 by 31 right shifts and saturate */ - /* Compute Rms and store result in destination vector */ - arm_sqrt_q31(clip_q63_to_q31((sum / (q63_t) blockSize) >> 31), pResult); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of RMS group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_f32.c deleted file mode 100644 index b584dcd..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_f32.c +++ /dev/null @@ -1,83 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_std_f32.c - * Description: Standard deviation of the elements of a floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupStats - */ - -/** - @defgroup STD Standard deviation - - Calculates the standard deviation of the elements in the input vector. - - The float implementation is relying on arm_var_f32 which is using a two-pass algorithm - to avoid problem of numerical instabilities and cancellation errors. - - Fixed point versions are using the standard textbook algorithm since the fixed point - numerical behavior is different from the float one. - - Algorithm for fixed point versions is summarized below: - - -
    -      Result = sqrt((sumOfSquares - sum2 / blockSize) / (blockSize - 1))
    -
    -      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 number of samples in input vector - @param[out] pResult standard deviation value returned here - @return none - */ -void arm_std_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - float32_t var; - arm_var_f32(pSrc,blockSize,&var); - arm_sqrt_f32(var, pResult); -} - -/** - @} end of STD group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_q15.c deleted file mode 100644 index 8003f83..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_q15.c +++ /dev/null @@ -1,173 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_std_q15.c - * Description: Standard deviation of an array of Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult standard deviation value returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) -void arm_std_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult) -{ - q15_t var=0; - - arm_var_q15(pSrc, blockSize, &var); - arm_sqrt_q15(var,pResult); -} -#else -void arm_std_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t sum = 0; /* Accumulator */ - q31_t meanOfSquares, squareOfMean; /* Square of mean and mean of square */ - q63_t sumOfSquares = 0; /* Sum of squares */ - q15_t in; /* Temporary variable to store input value */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t in32; /* Temporary variable to store input value */ -#endif - - if (blockSize <= 1U) - { - *pResult = 0; - return; - } - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ - /* Compute sum and store result in a temporary variable, sum. */ -#if defined (ARM_MATH_DSP) - in32 = read_q15x2_ia ((q15_t **) &pSrc); - sumOfSquares = __SMLALD(in32, in32, sumOfSquares); - sum += ((in32 << 16U) >> 16U); - sum += (in32 >> 16U); - - in32 = read_q15x2_ia ((q15_t **) &pSrc); - sumOfSquares = __SMLALD(in32, in32, sumOfSquares); - sum += ((in32 << 16U) >> 16U); - sum += (in32 >> 16U); -#else - in = *pSrc++; - sumOfSquares += (in * in); - sum += in; - - in = *pSrc++; - sumOfSquares += (in * in); - sum += in; - - in = *pSrc++; - sumOfSquares += (in * in); - sum += in; - - in = *pSrc++; - sumOfSquares += (in * in); - sum += in; -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - in = *pSrc++; - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ - sumOfSquares += (in * in); - /* Compute sum and store result in a temporary variable, sum. */ - sum += in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Compute Mean of squares and store result in a temporary variable, meanOfSquares. */ - meanOfSquares = (q31_t) (sumOfSquares / (q63_t)(blockSize - 1U)); - - /* Compute square of mean */ - squareOfMean = (q31_t) ((q63_t) sum * sum / (q63_t)(blockSize * (blockSize - 1U))); - - /* mean of squares minus the square of mean. */ - /* Compute standard deviation and store result in destination */ - arm_sqrt_q15(__SSAT((meanOfSquares - squareOfMean) >> 15U, 16U), pResult); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of STD group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_q31.c deleted file mode 100644 index 190e595..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_std_q31.c +++ /dev/null @@ -1,159 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_std_q31.c - * Description: Standard deviation of the elements of a Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector. - @param[out] pResult standard deviation value returned here. - @return none - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) -void arm_std_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - q31_t var=0; - - arm_var_q31(pSrc, blockSize, &var); - arm_sqrt_q31(var, pResult); -} -#else -void arm_std_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t sum = 0; /* Accumulator */ - q63_t meanOfSquares, squareOfMean; /* Square of mean and mean of square */ - q63_t sumOfSquares = 0; /* Sum of squares */ - q31_t in; /* Temporary variable to store input value */ - - if (blockSize <= 1U) - { - *pResult = 0; - return; - } - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - in = *pSrc++ >> 8U; - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ - sumOfSquares += ((q63_t) (in) * (in)); - /* Compute sum and store result in a temporary variable, sum. */ - sum += in; - - in = *pSrc++ >> 8U; - sumOfSquares += ((q63_t) (in) * (in)); - sum += in; - - in = *pSrc++ >> 8U; - sumOfSquares += ((q63_t) (in) * (in)); - sum += in; - - in = *pSrc++ >> 8U; - sumOfSquares += ((q63_t) (in) * (in)); - sum += in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - in = *pSrc++ >> 8U; - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ - sumOfSquares += ((q63_t) (in) * (in)); - /* Compute sum and store result in a temporary variable, sum. */ - sum += in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Compute Mean of squares and store result in a temporary variable, meanOfSquares. */ - meanOfSquares = (sumOfSquares / (q63_t)(blockSize - 1U)); - - /* Compute square of mean */ - squareOfMean = ( sum * sum / (q63_t)(blockSize * (blockSize - 1U))); - - /* Compute standard deviation and store result in destination */ - arm_sqrt_q31((meanOfSquares - squareOfMean) >> 15U, pResult); -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of STD group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_f32.c deleted file mode 100644 index 23ca8b2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_f32.c +++ /dev/null @@ -1,293 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_var_f32.c - * Description: Variance of the elements of a floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupStats - */ - -/** - @defgroup variance Variance - - Calculates the variance of the elements in the input vector. - The underlying algorithm used is the direct method sometimes referred to as the two-pass method: - -
    -      Result = sum(element - meanOfElements)^2) / numElement - 1
    -
    -      meanOfElements = ( pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] ) / blockSize
    -  
    - - 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 number of samples in input vector - @param[out] pResult variance value returned here - @return none - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -void arm_var_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - f32x4_t vecSrc; - f32x4_t sumVec = vdupq_n_f32(0.0f); - float32_t fMean; - float32_t sum = 0.0f; /* accumulator */ - float32_t in; /* Temporary variable to store input value */ - - if (blockSize <= 1U) { - *pResult = 0; - return; - } - - arm_mean_f32(pSrc, blockSize, &fMean); - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - - vecSrc = vldrwq_f32(pSrc); - /* - * sum lanes - */ - vecSrc = vsubq(vecSrc, fMean); - sumVec = vfmaq(sumVec, vecSrc, vecSrc); - - blkCnt --; - pSrc += 4; - } - - sum = vecAddAcrossF32Mve(sumVec); - - /* - * tail - */ - blkCnt = blockSize & 0x3; - while (blkCnt > 0U) - { - in = *pSrc++ - fMean; - sum += in * in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Variance */ - *pResult = sum / (float32_t) (blockSize - 1); -} -#else -#if defined(ARM_MATH_NEON_EXPERIMENTAL) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_var_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - float32_t mean; - - float32_t sum = 0.0f; /* accumulator */ - float32_t in; /* Temporary variable to store input value */ - uint32_t blkCnt; /* loop counter */ - - float32x4_t sumV = vdupq_n_f32(0.0f); /* Temporary result storage */ - float32x2_t sumV2; - float32x4_t inV; - float32x4_t avg; - - arm_mean_f32(pSrc,blockSize,&mean); - avg = vdupq_n_f32(mean); - - blkCnt = blockSize >> 2U; - - /* 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. */ - inV = vld1q_f32(pSrc); - inV = vsubq_f32(inV, avg); - sumV = vmlaq_f32(sumV, inV, inV); - pSrc += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - sumV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); - sum = vget_lane_f32(sumV2, 0) + vget_lane_f32(sumV2, 1); - - /* 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. */ - in = *pSrc++; - in = in - mean; - sum += in * in; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* Variance */ - *pResult = sum / (float32_t)(blockSize - 1.0f); - -} - -#else -void arm_var_f32( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - float32_t sum = 0.0f; /* Temporary result storage */ - float32_t fSum = 0.0f; - float32_t fMean, fValue; - const float32_t * pInput = pSrc; - - if (blockSize <= 1U) - { - *pResult = 0; - return; - } - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - - sum += *pInput++; - sum += *pInput++; - sum += *pInput++; - sum += *pInput++; - - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ - - sum += *pInput++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ - fMean = sum / (float32_t) blockSize; - - pInput = pSrc; - -#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - fValue = *pInput++ - fMean; - fSum += fValue * fValue; - - fValue = *pInput++ - fMean; - fSum += fValue * fValue; - - fValue = *pInput++ - fMean; - fSum += fValue * fValue; - - fValue = *pInput++ - fMean; - fSum += fValue * fValue; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - fValue = *pInput++ - fMean; - fSum += fValue * fValue; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Variance */ - *pResult = fSum / (float32_t)(blockSize - 1.0f); -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of variance group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_q15.c deleted file mode 100644 index 51621ef..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_q15.c +++ /dev/null @@ -1,230 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_var_q15.c - * Description: Variance of an array of Q15 type - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult variance value returned here - @return none - - @par Scaling and Overflow Behavior - 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. - */ -#if defined(ARM_MATH_MVEI) -void arm_var_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - q15x8_t vecSrc; - q63_t sumOfSquares = 0LL; - q63_t meanOfSquares, squareOfMean; /* square of mean and mean of square */ - q63_t sum = 0LL; - q15_t in; - - if (blockSize <= 1U) { - *pResult = 0; - return; - } - - - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - vecSrc = vldrhq_s16(pSrc); - /* 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. */ - - sumOfSquares = vmlaldavaq(sumOfSquares, vecSrc, vecSrc); - sum = vaddvaq(sum, vecSrc); - - blkCnt --; - pSrc += 8; - } - - /* Tail */ - blkCnt = blockSize & 7; - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - in = *pSrc++; - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ -#if defined (ARM_MATH_DSP) - sumOfSquares = __SMLALD(in, in, sumOfSquares); -#else - sumOfSquares += (in * in); -#endif /* #if defined (ARM_MATH_DSP) */ - /* Compute sum and store result in a temporary variable, sum. */ - sum += in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Compute Mean of squares of the input samples - * and then store the result in a temporary variable, meanOfSquares. */ - meanOfSquares = arm_div_q63_to_q31(sumOfSquares, (blockSize - 1U)); - - /* Compute square of mean */ - squareOfMean = arm_div_q63_to_q31((q63_t)sum * sum, (q31_t)(blockSize * (blockSize - 1U))); - - /* mean of the squares minus the square of the mean. */ - *pResult = (meanOfSquares - squareOfMean) >> 15; -} -#else -void arm_var_q15( - const q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q31_t sum = 0; /* Accumulator */ - q31_t meanOfSquares, squareOfMean; /* Square of mean and mean of square */ - q63_t sumOfSquares = 0; /* Sum of squares */ - q15_t in; /* Temporary variable to store input value */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t in32; /* Temporary variable to store input value */ -#endif - - if (blockSize <= 1U) - { - *pResult = 0; - return; - } - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ - /* Compute sum and store result in a temporary variable, sum. */ -#if defined (ARM_MATH_DSP) - in32 = read_q15x2_ia ((q15_t **) &pSrc); - sumOfSquares = __SMLALD(in32, in32, sumOfSquares); - sum += ((in32 << 16U) >> 16U); - sum += (in32 >> 16U); - - in32 = read_q15x2_ia ((q15_t **) &pSrc); - sumOfSquares = __SMLALD(in32, in32, sumOfSquares); - sum += ((in32 << 16U) >> 16U); - sum += (in32 >> 16U); -#else - in = *pSrc++; - sumOfSquares += (in * in); - sum += in; - - in = *pSrc++; - sumOfSquares += (in * in); - sum += in; - - in = *pSrc++; - sumOfSquares += (in * in); - sum += in; - - in = *pSrc++; - sumOfSquares += (in * in); - sum += in; -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - in = *pSrc++; - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ -#if defined (ARM_MATH_DSP) - sumOfSquares = __SMLALD(in, in, sumOfSquares); -#else - sumOfSquares += (in * in); -#endif /* #if defined (ARM_MATH_DSP) */ - /* Compute sum and store result in a temporary variable, sum. */ - sum += in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Compute Mean of squares and store result in a temporary variable, meanOfSquares. */ - meanOfSquares = (q31_t) (sumOfSquares / (q63_t)(blockSize - 1U)); - - /* Compute square of mean */ - squareOfMean = (q31_t) ((q63_t) sum * sum / (q63_t)(blockSize * (blockSize - 1U))); - - /* mean of squares minus the square of mean. */ - *pResult = (meanOfSquares - squareOfMean) >> 15U; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of variance group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_q31.c deleted file mode 100644 index 9c3de06..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/StatisticsFunctions/arm_var_q31.c +++ /dev/null @@ -1,214 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_var_q31.c - * Description: Variance of an array of Q31 type - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in input vector - @param[out] pResult variance value returned here - @return none - - @par Scaling and Overflow Behavior - 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, - and as a consequence has only 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. - */ -#if defined(ARM_MATH_MVEI) -void arm_var_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecSrc; - q63_t sumOfSquares = 0LL; - q63_t meanOfSquares, squareOfMean; /* square of mean and mean of square */ - q63_t sum = 0LL; - q31_t in; - - if (blockSize <= 1U) { - *pResult = 0; - return; - } - - - /* Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - while (blkCnt > 0U) - { - vecSrc = vldrwq_s32(pSrc); - /* 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. */ - - /* downscale */ - vecSrc = vshrq(vecSrc, 8); - sumOfSquares = vmlaldavaq(sumOfSquares, vecSrc, vecSrc); - sum = vaddlvaq(sum, vecSrc); - - blkCnt --; - pSrc += 4; - } - - - /* - * tail - */ - blkCnt = blockSize & 0x3; - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - in = *pSrc++ >> 8U; - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ - sumOfSquares += ((q63_t) (in) * (in)); - /* Compute sum and store result in a temporary variable, sum. */ - sum += in; - - /* Decrement 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 - 1U); - - /* Compute square of mean */ - squareOfMean = sum * sum / (q63_t) (blockSize * (blockSize - 1U)); - - /* Compute standard deviation and then store the result to the destination */ - *pResult = asrl(meanOfSquares - squareOfMean, 15U); -} -#else -void arm_var_q31( - const q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult) -{ - uint32_t blkCnt; /* Loop counter */ - q63_t sum = 0; /* Temporary result storage */ - q63_t meanOfSquares, squareOfMean; /* Square of mean and mean of square */ - q63_t sumOfSquares = 0; /* Sum of squares */ - q31_t in; /* Temporary variable to store input value */ - - if (blockSize <= 1U) - { - *pResult = 0; - return; - } - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - in = *pSrc++ >> 8U; - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ - sumOfSquares += ((q63_t) (in) * (in)); - /* Compute sum and store result in a temporary variable, sum. */ - sum += in; - - in = *pSrc++ >> 8U; - sumOfSquares += ((q63_t) (in) * (in)); - sum += in; - - in = *pSrc++ >> 8U; - sumOfSquares += ((q63_t) (in) * (in)); - sum += in; - - in = *pSrc++ >> 8U; - sumOfSquares += ((q63_t) (in) * (in)); - sum += in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ - /* C = A[0] + A[1] + ... + A[blockSize-1] */ - - in = *pSrc++ >> 8U; - /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ - sumOfSquares += ((q63_t) (in) * (in)); - /* Compute sum and store result in a temporary variable, sum. */ - sum += in; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Compute Mean of squares and store result in a temporary variable, meanOfSquares. */ - meanOfSquares = (sumOfSquares / (q63_t)(blockSize - 1U)); - - /* Compute square of mean */ - squareOfMean = ( sum * sum / (q63_t)(blockSize * (blockSize - 1U))); - - /* Compute variance and store result in destination */ - *pResult = (meanOfSquares - squareOfMean) >> 15U; -} -#endif -/** - @} end of variance group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/CMakeLists.txt deleted file mode 100644 index 0379721..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPSupport) - -include(configLib) -include(configDsp) - -file(GLOB SRC "./*_*.c") - -add_library(CMSISDSPSupport STATIC ${SRC}) - -configLib(CMSISDSPSupport ${ROOT}) -configDsp(CMSISDSPSupport ${ROOT}) - -### Includes -target_include_directories(CMSISDSPSupport PUBLIC "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/SupportFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/SupportFunctions.c deleted file mode 100644 index 9042d8a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/SupportFunctions.c +++ /dev/null @@ -1,63 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: SupportFunctions.c - * Description: Combination of all support function source files. - * - * $Date: 16. March 2020 - * $Revision: V1.1.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_barycenter_f32.c" -#include "arm_bitonic_sort_f32.c" -#include "arm_bubble_sort_f32.c" -#include "arm_copy_f32.c" -#include "arm_copy_q15.c" -#include "arm_copy_q31.c" -#include "arm_copy_q7.c" -#include "arm_fill_f32.c" -#include "arm_fill_q15.c" -#include "arm_fill_q31.c" -#include "arm_fill_q7.c" -#include "arm_heap_sort_f32.c" -#include "arm_insertion_sort_f32.c" -#include "arm_merge_sort_f32.c" -#include "arm_merge_sort_init_f32.c" -#include "arm_quick_sort_f32.c" -#include "arm_selection_sort_f32.c" -#include "arm_sort_f32.c" -#include "arm_sort_init_f32.c" -#include "arm_spline_interp_f32.c" -#include "arm_spline_interp_init_f32.c" -#include "arm_weighted_sum_f32.c" - -#include "arm_float_to_q15.c" -#include "arm_float_to_q31.c" -#include "arm_float_to_q7.c" -#include "arm_q15_to_float.c" -#include "arm_q15_to_q31.c" -#include "arm_q15_to_q7.c" -#include "arm_q31_to_float.c" -#include "arm_q31_to_q15.c" -#include "arm_q31_to_q7.c" -#include "arm_q7_to_float.c" -#include "arm_q7_to_q15.c" -#include "arm_q7_to_q31.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_barycenter_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_barycenter_f32.c deleted file mode 100644 index 1fcd91a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_barycenter_f32.c +++ /dev/null @@ -1,412 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_barycenter_f32.c - * Description: Barycenter - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - @ingroup groupSupport - */ - - -/** - * @brief Barycenter - * - * - * @param[in] *in List of vectors - * @param[in] *weights Weights of the vectors - * @param[out] *out Barycenter - * @param[in] nbVectors Number of vectors - * @param[in] vecDim Dimension of space (vector dimension) - * @return None - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_barycenter_f32(const float32_t *in, - const float32_t *weights, - float32_t *out, - uint32_t nbVectors, - uint32_t vecDim) -{ - const float32_t *pIn, *pW; - const float32_t *pIn1, *pIn2, *pIn3, *pIn4; - float32_t *pOut; - uint32_t blkCntVector, blkCntSample; - float32_t accum, w; - - blkCntVector = nbVectors; - blkCntSample = vecDim; - - accum = 0.0f; - - pW = weights; - pIn = in; - - - arm_fill_f32(0.0f, out, vecDim); - - - /* Sum */ - pIn1 = pIn; - pIn2 = pIn1 + vecDim; - pIn3 = pIn2 + vecDim; - pIn4 = pIn3 + vecDim; - - blkCntVector = nbVectors >> 2; - while (blkCntVector > 0) - { - f32x4_t outV, inV1, inV2, inV3, inV4; - float32_t w1, w2, w3, w4; - - pOut = out; - w1 = *pW++; - w2 = *pW++; - w3 = *pW++; - w4 = *pW++; - accum += w1 + w2 + w3 + w4; - - blkCntSample = vecDim >> 2; - while (blkCntSample > 0) { - outV = vld1q((const float32_t *) pOut); - inV1 = vld1q(pIn1); - inV2 = vld1q(pIn2); - inV3 = vld1q(pIn3); - inV4 = vld1q(pIn4); - outV = vfmaq(outV, inV1, w1); - outV = vfmaq(outV, inV2, w2); - outV = vfmaq(outV, inV3, w3); - outV = vfmaq(outV, inV4, w4); - vst1q(pOut, outV); - - pOut += 4; - pIn1 += 4; - pIn2 += 4; - pIn3 += 4; - pIn4 += 4; - - blkCntSample--; - } - - blkCntSample = vecDim & 3; - while (blkCntSample > 0) { - *pOut = *pOut + *pIn1++ * w1; - *pOut = *pOut + *pIn2++ * w2; - *pOut = *pOut + *pIn3++ * w3; - *pOut = *pOut + *pIn4++ * w4; - pOut++; - blkCntSample--; - } - - pIn1 += 3 * vecDim; - pIn2 += 3 * vecDim; - pIn3 += 3 * vecDim; - pIn4 += 3 * vecDim; - - blkCntVector--; - } - - pIn = pIn1; - - blkCntVector = nbVectors & 3; - while (blkCntVector > 0) - { - f32x4_t inV, outV; - - pOut = out; - w = *pW++; - accum += w; - - blkCntSample = vecDim >> 2; - while (blkCntSample > 0) - { - outV = vld1q_f32(pOut); - inV = vld1q_f32(pIn); - outV = vfmaq(outV, inV, w); - vst1q_f32(pOut, outV); - pOut += 4; - pIn += 4; - - blkCntSample--; - } - - blkCntSample = vecDim & 3; - while (blkCntSample > 0) - { - *pOut = *pOut + *pIn++ * w; - pOut++; - blkCntSample--; - } - - blkCntVector--; - } - - /* Normalize */ - pOut = out; - accum = 1.0f / accum; - - blkCntSample = vecDim >> 2; - while (blkCntSample > 0) - { - f32x4_t tmp; - - tmp = vld1q((const float32_t *) pOut); - tmp = vmulq(tmp, accum); - vst1q(pOut, tmp); - pOut += 4; - blkCntSample--; - } - - blkCntSample = vecDim & 3; - while (blkCntSample > 0) - { - *pOut = *pOut * accum; - pOut++; - blkCntSample--; - } -} -#else -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" -void arm_barycenter_f32(const float32_t *in, const float32_t *weights, float32_t *out, uint32_t nbVectors,uint32_t vecDim) -{ - - const float32_t *pIn,*pW, *pIn1, *pIn2, *pIn3, *pIn4; - float32_t *pOut; - uint32_t blkCntVector,blkCntSample; - float32_t accum, w,w1,w2,w3,w4; - - float32x4_t tmp, inV,outV, inV1, inV2, inV3, inV4; - - blkCntVector = nbVectors; - blkCntSample = vecDim; - - accum = 0.0f; - - pW = weights; - pIn = in; - - /* Set counters to 0 */ - tmp = vdupq_n_f32(0.0f); - pOut = out; - - blkCntSample = vecDim >> 2; - while(blkCntSample > 0) - { - vst1q_f32(pOut, tmp); - pOut += 4; - blkCntSample--; - } - - blkCntSample = vecDim & 3; - while(blkCntSample > 0) - { - *pOut = 0.0f; - pOut++; - blkCntSample--; - } - - /* Sum */ - - pIn1 = pIn; - pIn2 = pIn1 + vecDim; - pIn3 = pIn2 + vecDim; - pIn4 = pIn3 + vecDim; - - blkCntVector = nbVectors >> 2; - while(blkCntVector > 0) - { - pOut = out; - w1 = *pW++; - w2 = *pW++; - w3 = *pW++; - w4 = *pW++; - accum += w1 + w2 + w3 + w4; - - blkCntSample = vecDim >> 2; - while(blkCntSample > 0) - { - outV = vld1q_f32(pOut); - inV1 = vld1q_f32(pIn1); - inV2 = vld1q_f32(pIn2); - inV3 = vld1q_f32(pIn3); - inV4 = vld1q_f32(pIn4); - outV = vmlaq_n_f32(outV,inV1,w1); - outV = vmlaq_n_f32(outV,inV2,w2); - outV = vmlaq_n_f32(outV,inV3,w3); - outV = vmlaq_n_f32(outV,inV4,w4); - vst1q_f32(pOut, outV); - pOut += 4; - pIn1 += 4; - pIn2 += 4; - pIn3 += 4; - pIn4 += 4; - - blkCntSample--; - } - - blkCntSample = vecDim & 3; - while(blkCntSample > 0) - { - *pOut = *pOut + *pIn1++ * w1; - *pOut = *pOut + *pIn2++ * w2; - *pOut = *pOut + *pIn3++ * w3; - *pOut = *pOut + *pIn4++ * w4; - pOut++; - blkCntSample--; - } - - pIn1 += 3*vecDim; - pIn2 += 3*vecDim; - pIn3 += 3*vecDim; - pIn4 += 3*vecDim; - - blkCntVector--; - } - - pIn = pIn1; - - blkCntVector = nbVectors & 3; - while(blkCntVector > 0) - { - pOut = out; - w = *pW++; - accum += w; - - blkCntSample = vecDim >> 2; - while(blkCntSample > 0) - { - outV = vld1q_f32(pOut); - inV = vld1q_f32(pIn); - outV = vmlaq_n_f32(outV,inV,w); - vst1q_f32(pOut, outV); - pOut += 4; - pIn += 4; - - blkCntSample--; - } - - blkCntSample = vecDim & 3; - while(blkCntSample > 0) - { - *pOut = *pOut + *pIn++ * w; - pOut++; - blkCntSample--; - } - - blkCntVector--; - } - - /* Normalize */ - pOut = out; - accum = 1.0f / accum; - - blkCntSample = vecDim >> 2; - while(blkCntSample > 0) - { - tmp = vld1q_f32(pOut); - tmp = vmulq_n_f32(tmp,accum); - vst1q_f32(pOut, tmp); - pOut += 4; - blkCntSample--; - } - - blkCntSample = vecDim & 3; - while(blkCntSample > 0) - { - *pOut = *pOut * accum; - pOut++; - blkCntSample--; - } - -} -#else -void arm_barycenter_f32(const float32_t *in, const float32_t *weights, float32_t *out, uint32_t nbVectors,uint32_t vecDim) -{ - - const float32_t *pIn,*pW; - float32_t *pOut; - uint32_t blkCntVector,blkCntSample; - float32_t accum, w; - - blkCntVector = nbVectors; - blkCntSample = vecDim; - - accum = 0.0f; - - pW = weights; - pIn = in; - - /* Set counters to 0 */ - blkCntSample = vecDim; - pOut = out; - - while(blkCntSample > 0) - { - *pOut = 0.0f; - pOut++; - blkCntSample--; - } - - /* Sum */ - while(blkCntVector > 0) - { - pOut = out; - w = *pW++; - accum += w; - - blkCntSample = vecDim; - while(blkCntSample > 0) - { - *pOut = *pOut + *pIn++ * w; - pOut++; - blkCntSample--; - } - - blkCntVector--; - } - - /* Normalize */ - blkCntSample = vecDim; - pOut = out; - - while(blkCntSample > 0) - { - *pOut = *pOut / accum; - pOut++; - blkCntSample--; - } - -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of groupSupport group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_bitonic_sort_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_bitonic_sort_f32.c deleted file mode 100644 index cbbb70f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_bitonic_sort_f32.c +++ /dev/null @@ -1,1039 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_bitonic_sort_f32.c - * Description: Floating point bitonic sort - * - * $Date: 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_sorting.h" - - -#if !defined(ARM_MATH_NEON) - -static void arm_bitonic_sort_core_f32(float32_t *pSrc, uint32_t n, uint8_t dir) -{ - uint32_t step; - uint32_t k, j; - float32_t *leftPtr, *rightPtr; - float32_t temp; - - step = n>>1; - leftPtr = pSrc; - rightPtr = pSrc+n-1; - - for(k=0; k *rightPtr)) - { - // Swap - temp=*leftPtr; - *leftPtr=*rightPtr; - *rightPtr=temp; - } - - leftPtr++; // Move right - rightPtr--; // Move left - } - - // Merge - for(step=(n>>2); step>0; step/=2) - { - for(j=0; j *rightPtr) - { - // Swap - temp=*leftPtr; - *leftPtr=*rightPtr; - *rightPtr=temp; - } - - leftPtr++; - rightPtr++; - } - } - } -} -#endif - -#if defined(ARM_MATH_NEON) - - -static float32x4x2_t arm_bitonic_resort_8_f32(float32x4_t a, float32x4_t b, uint8_t dir) -{ - /* Start with two vectors: - * +---+---+---+---+ - * | a | b | c | d | - * +---+---+---+---+ - * +---+---+---+---+ - * | e | f | g | h | - * +---+---+---+---+ - * All the elements of the first are guaranteed to be less than or equal to - * all of the elements in the second, and both vectors are bitonic. - * We need to perform these operations to completely sort both lists: - * vminmax([abcd],[efgh]) - * vminmax([acbd],[egfh]) - */ - vtrn128_64q(a, b); - /* +---+---+---+---+ - * | a | b | e | f | - * +---+---+---+---+ - * +---+---+---+---+ - * | c | d | g | h | - * +---+---+---+---+ - */ - if(dir) - vminmaxq(a, b); - else - vminmaxq(b, a); - - vtrn128_32q(a, b); - /* +---+---+---+---+ - * | a | c | e | g | - * +---+---+---+---+ - * +---+---+---+---+ - * | b | d | f | h | - * +---+---+---+---+ - */ - if(dir) - vminmaxq(a, b); - else - vminmaxq(b, a); - - return vzipq_f32(a, b); -} - - -static float32x4x2_t arm_bitonic_merge_8_f32(float32x4_t a, float32x4_t b, uint8_t dir) -{ - /* a and b are guaranteed to be bitonic */ - // Reverse the element of the second vector - b = vrev128q_f32(b); - - // Compare the two vectors - if(dir) - vminmaxq(a, b); - else - vminmaxq(b, a); - - // Merge the two vectors - float32x4x2_t ab = arm_bitonic_resort_8_f32(a, b, dir); - - return ab; -} - -static void arm_bitonic_resort_16_f32(float32_t * pOut, float32x4x2_t a, float32x4x2_t b, uint8_t dir) -{ - /* Start with two vectors: - * +---+---+---+---+---+---+---+---+ - * | a | b | c | d | e | f | g | h | - * +---+---+---+---+---+---+---+---+ - * +---+---+---+---+---+---+---+---+ - * | i | j | k | l | m | n | o | p | - * +---+---+---+---+---+---+---+---+ - * All the elements of the first are guaranteed to be less than or equal to - * all of the elements in the second, and both vectors are bitonic. - * We need to perform these operations to completely sort both lists: - * vminmax([abcd],[efgh]) vminmax([ijkl],[mnop]) - * vminmax([abef],[cdgh]) vminmax([ijmn],[klop]) - * vminmax([acef],[bdfh]) vminmax([ikmo],[jlmp]) - */ - - vtrn256_128q(a, b); - /* +---+---+---+---+---+---+---+---+ - * | a | b | c | d | i | j | k | l | - * +---+---+---+---+---+---+---+---+ - * +---+---+---+---+---+---+---+---+ - * | e | f | g | h | m | n | o | p | - * +---+---+---+---+---+---+---+---+ - */ - if(dir) - vminmax256q(a, b); - else - vminmax256q(b, a); - - vtrn256_64q(a, b); - - /* +---+---+---+---+---+---+---+---+ - * | a | b | e | f | i | j | m | n | - * +---+---+---+---+---+---+---+---+ - * +---+---+---+---+---+---+---+---+ - * | c | d | g | h | k | l | o | p | - * +---+---+---+---+---+---+---+---+ - */ - if(dir) - vminmax256q(a, b); - else - vminmax256q(b, a); - - vtrn256_32q(a, b); - /* We now have: - * +---+---+---+---+---+---+---+---+ - * | a | c | e | g | i | k | m | o | - * +---+---+---+---+---+---+---+---+ - * +---+---+---+---+---+---+---+---+ - * | b | d | f | h | j | l | n | p | - * +---+---+---+---+---+---+---+---+ - */ - if(dir) - vminmax256q(a, b); - else - vminmax256q(b, a); - - float32x4x2_t out1 = vzipq_f32(a.val[0], b.val[0]); - float32x4x2_t out2 = vzipq_f32(a.val[1], b.val[1]); - - vst1q_f32(pOut, out1.val[0]); - vst1q_f32(pOut+4, out1.val[1]); - vst1q_f32(pOut+8, out2.val[0]); - vst1q_f32(pOut+12, out2.val[1]); -} - -static void arm_bitonic_merge_16_f32(float32_t * pOut, float32x4x2_t a, float32x4x2_t b, uint8_t dir) -{ - // Merge two preordered float32x4x2_t - vrev256q_f32(b); - - if(dir) - vminmax256q(a, b); - else - vminmax256q(b, a); - - arm_bitonic_resort_16_f32(pOut, a, b, dir); -} - -static void arm_bitonic_sort_16_f32(float32_t *pSrc, float32_t *pDst, uint8_t dir) -{ - float32x4_t a; - float32x4_t b; - float32x4_t c; - float32x4_t d; - - // Load 16 samples - a = vld1q_f32(pSrc); - b = vld1q_f32(pSrc+4); - c = vld1q_f32(pSrc+8); - d = vld1q_f32(pSrc+12); - - // Bitonic sorting network for 4 samples x 4 times - if(dir) - { - vminmaxq(a, b); - vminmaxq(c, d); - - vminmaxq(a, d); - vminmaxq(b, c); - - vminmaxq(a, b); - vminmaxq(c, d); - } - else - { - vminmaxq(b, a); - vminmaxq(d, c); - - vminmaxq(d, a); - vminmaxq(c, b); - - vminmaxq(b, a); - vminmaxq(d, c); - } - - float32x4x2_t ab = vtrnq_f32 (a, b); - float32x4x2_t cd = vtrnq_f32 (c, d); - - // Transpose 4 ordered arrays of 4 samples - a = vcombine_f32(vget_low_f32(ab.val[0]), vget_low_f32(cd.val[0])); - b = vcombine_f32(vget_low_f32(ab.val[1]), vget_low_f32(cd.val[1])); - c = vcombine_f32(vget_high_f32(ab.val[0]), vget_high_f32(cd.val[0])); - d = vcombine_f32(vget_high_f32(ab.val[1]), vget_high_f32(cd.val[1])); - - // Merge pairs of arrays of 4 samples - ab = arm_bitonic_merge_8_f32(a, b, dir); - cd = arm_bitonic_merge_8_f32(c, d, dir); - - // Merge arrays of 8 samples - arm_bitonic_merge_16_f32(pDst, ab, cd, dir); -} - - - - - -static void arm_bitonic_merge_32_f32(float32_t * pSrc, float32x4x2_t ab1, float32x4x2_t ab2, float32x4x2_t cd1, float32x4x2_t cd2, uint8_t dir) -{ - //Compare - if(dir) - { - vminmax256q(ab1, cd1); - vminmax256q(ab2, cd2); - } - else - { - vminmax256q(cd1, ab1); - vminmax256q(cd2, ab2); - } - //Transpose 256 - float32x4_t temp; - - temp = ab2.val[0]; - ab2.val[0] = cd1.val[0]; - cd1.val[0] = temp; - temp = ab2.val[1]; - ab2.val[1] = cd1.val[1]; - cd1.val[1] = temp; - - //Compare - if(dir) - { - vminmax256q(ab1, cd1); - vminmax256q(ab2, cd2); - } - else - { - vminmax256q(cd1, ab1); - vminmax256q(cd2, ab2); - } - - //Transpose 128 - arm_bitonic_merge_16_f32(pSrc+0, ab1, cd1, dir); - arm_bitonic_merge_16_f32(pSrc+16, ab2, cd2, dir); -} - -static void arm_bitonic_merge_64_f32(float32_t * pSrc, uint8_t dir) -{ - float32x4x2_t ab1, ab2, ab3, ab4; - float32x4x2_t cd1, cd2, cd3, cd4; - - //Load and reverse second array - ab1.val[0] = vld1q_f32(pSrc+0 ); - ab1.val[1] = vld1q_f32(pSrc+4 ); - ab2.val[0] = vld1q_f32(pSrc+8 ); - ab2.val[1] = vld1q_f32(pSrc+12); - ab3.val[0] = vld1q_f32(pSrc+16); - ab3.val[1] = vld1q_f32(pSrc+20); - ab4.val[0] = vld1q_f32(pSrc+24); - ab4.val[1] = vld1q_f32(pSrc+28); - - vldrev128q_f32(cd4.val[1], pSrc+32); - vldrev128q_f32(cd4.val[0], pSrc+36); - vldrev128q_f32(cd3.val[1], pSrc+40); - vldrev128q_f32(cd3.val[0], pSrc+44); - vldrev128q_f32(cd2.val[1], pSrc+48); - vldrev128q_f32(cd2.val[0], pSrc+52); - vldrev128q_f32(cd1.val[1], pSrc+56); - vldrev128q_f32(cd1.val[0], pSrc+60); - - //Compare - if(dir) - { - vminmax256q(ab1, cd1); - vminmax256q(ab2, cd2); - vminmax256q(ab3, cd3); - vminmax256q(ab4, cd4); - } - else - { - vminmax256q(cd1, ab1); - vminmax256q(cd2, ab2); - vminmax256q(cd3, ab3); - vminmax256q(cd4, ab4); - } - - //Transpose 512 - float32x4_t temp; - - temp = ab3.val[0]; - ab3.val[0] = cd1.val[0]; - cd1.val[0] = temp; - temp = ab3.val[1]; - ab3.val[1] = cd1.val[1]; - cd1.val[1] = temp; - temp = ab4.val[0]; - ab4.val[0] = cd2.val[0]; - cd2.val[0] = temp; - temp = ab4.val[1]; - ab4.val[1] = cd2.val[1]; - cd2.val[1] = temp; - - //Compare - if(dir) - { - vminmax256q(ab1, cd1); - vminmax256q(ab2, cd2); - vminmax256q(ab3, cd3); - vminmax256q(ab4, cd4); - } - else - { - vminmax256q(cd1, ab1); - vminmax256q(cd2, ab2); - vminmax256q(cd3, ab3); - vminmax256q(cd4, ab4); - } - - //Transpose 256 - arm_bitonic_merge_32_f32(pSrc+0, ab1, ab2, cd1, cd2, dir); - arm_bitonic_merge_32_f32(pSrc+32, ab3, ab4, cd3, cd4, dir); -} - -static void arm_bitonic_merge_128_f32(float32_t * pSrc, uint8_t dir) -{ - float32x4x2_t ab1, ab2, ab3, ab4, ab5, ab6, ab7, ab8; - float32x4x2_t cd1, cd2, cd3, cd4, cd5, cd6, cd7, cd8; - - //Load and reverse second array - ab1.val[0] = vld1q_f32(pSrc+0 ); - ab1.val[1] = vld1q_f32(pSrc+4 ); - ab2.val[0] = vld1q_f32(pSrc+8 ); - ab2.val[1] = vld1q_f32(pSrc+12); - ab3.val[0] = vld1q_f32(pSrc+16); - ab3.val[1] = vld1q_f32(pSrc+20); - ab4.val[0] = vld1q_f32(pSrc+24); - ab4.val[1] = vld1q_f32(pSrc+28); - ab5.val[0] = vld1q_f32(pSrc+32); - ab5.val[1] = vld1q_f32(pSrc+36); - ab6.val[0] = vld1q_f32(pSrc+40); - ab6.val[1] = vld1q_f32(pSrc+44); - ab7.val[0] = vld1q_f32(pSrc+48); - ab7.val[1] = vld1q_f32(pSrc+52); - ab8.val[0] = vld1q_f32(pSrc+56); - ab8.val[1] = vld1q_f32(pSrc+60); - - vldrev128q_f32(cd8.val[1], pSrc+64); - vldrev128q_f32(cd8.val[0], pSrc+68); - vldrev128q_f32(cd7.val[1], pSrc+72); - vldrev128q_f32(cd7.val[0], pSrc+76); - vldrev128q_f32(cd6.val[1], pSrc+80); - vldrev128q_f32(cd6.val[0], pSrc+84); - vldrev128q_f32(cd5.val[1], pSrc+88); - vldrev128q_f32(cd5.val[0], pSrc+92); - vldrev128q_f32(cd4.val[1], pSrc+96); - vldrev128q_f32(cd4.val[0], pSrc+100); - vldrev128q_f32(cd3.val[1], pSrc+104); - vldrev128q_f32(cd3.val[0], pSrc+108); - vldrev128q_f32(cd2.val[1], pSrc+112); - vldrev128q_f32(cd2.val[0], pSrc+116); - vldrev128q_f32(cd1.val[1], pSrc+120); - vldrev128q_f32(cd1.val[0], pSrc+124); - - //Compare - if(dir) - { - vminmax256q(ab1, cd1); - vminmax256q(ab2, cd2); - vminmax256q(ab3, cd3); - vminmax256q(ab4, cd4); - vminmax256q(ab5, cd5); - vminmax256q(ab6, cd6); - vminmax256q(ab7, cd7); - vminmax256q(ab8, cd8); - } - else - { - vminmax256q(cd1, ab1); - vminmax256q(cd2, ab2); - vminmax256q(cd3, ab3); - vminmax256q(cd4, ab4); - vminmax256q(cd5, ab5); - vminmax256q(cd6, ab6); - vminmax256q(cd7, ab7); - vminmax256q(cd8, ab8); - } - - //Transpose - float32x4_t temp; - - temp = ab5.val[0]; - ab5.val[0] = cd1.val[0]; - cd1.val[0] = temp; - temp = ab5.val[1]; - ab5.val[1] = cd1.val[1]; - cd1.val[1] = temp; - temp = ab6.val[0]; - ab6.val[0] = cd2.val[0]; - cd2.val[0] = temp; - temp = ab6.val[1]; - ab6.val[1] = cd2.val[1]; - cd2.val[1] = temp; - temp = ab7.val[0]; - ab7.val[0] = cd3.val[0]; - cd3.val[0] = temp; - temp = ab7.val[1]; - ab7.val[1] = cd3.val[1]; - cd3.val[1] = temp; - temp = ab8.val[0]; - ab8.val[0] = cd4.val[0]; - cd4.val[0] = temp; - temp = ab8.val[1]; - ab8.val[1] = cd4.val[1]; - cd4.val[1] = temp; - - //Compare - if(dir) - { - vminmax256q(ab1, cd1); - vminmax256q(ab2, cd2); - vminmax256q(ab3, cd3); - vminmax256q(ab4, cd4); - vminmax256q(ab5, cd5); - vminmax256q(ab6, cd6); - vminmax256q(ab7, cd7); - vminmax256q(ab8, cd8); - } - else - { - vminmax256q(cd1, ab1); - vminmax256q(cd2, ab2); - vminmax256q(cd3, ab3); - vminmax256q(cd4, ab4); - vminmax256q(cd5, ab5); - vminmax256q(cd6, ab6); - vminmax256q(cd7, ab7); - vminmax256q(cd8, ab8); - } - - vst1q_f32(pSrc, ab1.val[0]); - vst1q_f32(pSrc+4, ab1.val[1]); - vst1q_f32(pSrc+8, ab2.val[0]); - vst1q_f32(pSrc+12, ab2.val[1]); - vst1q_f32(pSrc+16, ab3.val[0]); - vst1q_f32(pSrc+20, ab3.val[1]); - vst1q_f32(pSrc+24, ab4.val[0]); - vst1q_f32(pSrc+28, ab4.val[1]); - vst1q_f32(pSrc+32, cd1.val[0]); - vst1q_f32(pSrc+36, cd1.val[1]); - vst1q_f32(pSrc+40, cd2.val[0]); - vst1q_f32(pSrc+44, cd2.val[1]); - vst1q_f32(pSrc+48, cd3.val[0]); - vst1q_f32(pSrc+52, cd3.val[1]); - vst1q_f32(pSrc+56, cd4.val[0]); - vst1q_f32(pSrc+60, cd4.val[1]); - vst1q_f32(pSrc+64, ab5.val[0]); - vst1q_f32(pSrc+68, ab5.val[1]); - vst1q_f32(pSrc+72, ab6.val[0]); - vst1q_f32(pSrc+76, ab6.val[1]); - vst1q_f32(pSrc+80, ab7.val[0]); - vst1q_f32(pSrc+84, ab7.val[1]); - vst1q_f32(pSrc+88, ab8.val[0]); - vst1q_f32(pSrc+92, ab8.val[1]); - vst1q_f32(pSrc+96, cd5.val[0]); - vst1q_f32(pSrc+100, cd5.val[1]); - vst1q_f32(pSrc+104, cd6.val[0]); - vst1q_f32(pSrc+108, cd6.val[1]); - vst1q_f32(pSrc+112, cd7.val[0]); - vst1q_f32(pSrc+116, cd7.val[1]); - vst1q_f32(pSrc+120, cd8.val[0]); - vst1q_f32(pSrc+124, cd8.val[1]); - - //Transpose - arm_bitonic_merge_64_f32(pSrc+0 , dir); - arm_bitonic_merge_64_f32(pSrc+64, dir); -} - -static void arm_bitonic_merge_256_f32(float32_t * pSrc, uint8_t dir) -{ - float32x4x2_t ab1, ab2, ab3, ab4, ab5, ab6, ab7, ab8; - float32x4x2_t ab9, ab10, ab11, ab12, ab13, ab14, ab15, ab16; - float32x4x2_t cd1, cd2, cd3, cd4, cd5, cd6, cd7, cd8; - float32x4x2_t cd9, cd10, cd11, cd12, cd13, cd14, cd15, cd16; - - //Load and reverse second array - ab1.val[0] = vld1q_f32(pSrc+0 ); - ab1.val[1] = vld1q_f32(pSrc+4 ); - ab2.val[0] = vld1q_f32(pSrc+8 ); - ab2.val[1] = vld1q_f32(pSrc+12 ); - ab3.val[0] = vld1q_f32(pSrc+16 ); - ab3.val[1] = vld1q_f32(pSrc+20 ); - ab4.val[0] = vld1q_f32(pSrc+24 ); - ab4.val[1] = vld1q_f32(pSrc+28 ); - ab5.val[0] = vld1q_f32(pSrc+32 ); - ab5.val[1] = vld1q_f32(pSrc+36 ); - ab6.val[0] = vld1q_f32(pSrc+40 ); - ab6.val[1] = vld1q_f32(pSrc+44 ); - ab7.val[0] = vld1q_f32(pSrc+48 ); - ab7.val[1] = vld1q_f32(pSrc+52 ); - ab8.val[0] = vld1q_f32(pSrc+56 ); - ab8.val[1] = vld1q_f32(pSrc+60 ); - ab9.val[0] = vld1q_f32(pSrc+64 ); - ab9.val[1] = vld1q_f32(pSrc+68 ); - ab10.val[0] = vld1q_f32(pSrc+72 ); - ab10.val[1] = vld1q_f32(pSrc+76 ); - ab11.val[0] = vld1q_f32(pSrc+80 ); - ab11.val[1] = vld1q_f32(pSrc+84 ); - ab12.val[0] = vld1q_f32(pSrc+88 ); - ab12.val[1] = vld1q_f32(pSrc+92 ); - ab13.val[0] = vld1q_f32(pSrc+96 ); - ab13.val[1] = vld1q_f32(pSrc+100); - ab14.val[0] = vld1q_f32(pSrc+104); - ab14.val[1] = vld1q_f32(pSrc+108); - ab15.val[0] = vld1q_f32(pSrc+112); - ab15.val[1] = vld1q_f32(pSrc+116); - ab16.val[0] = vld1q_f32(pSrc+120); - ab16.val[1] = vld1q_f32(pSrc+124); - - vldrev128q_f32(cd16.val[1], pSrc+128); - vldrev128q_f32(cd16.val[0], pSrc+132); - vldrev128q_f32(cd15.val[1], pSrc+136); - vldrev128q_f32(cd15.val[0], pSrc+140); - vldrev128q_f32(cd14.val[1], pSrc+144); - vldrev128q_f32(cd14.val[0], pSrc+148); - vldrev128q_f32(cd13.val[1], pSrc+152); - vldrev128q_f32(cd13.val[0], pSrc+156); - vldrev128q_f32(cd12.val[1], pSrc+160); - vldrev128q_f32(cd12.val[0], pSrc+164); - vldrev128q_f32(cd11.val[1], pSrc+168); - vldrev128q_f32(cd11.val[0], pSrc+172); - vldrev128q_f32(cd10.val[1], pSrc+176); - vldrev128q_f32(cd10.val[0], pSrc+180); - vldrev128q_f32(cd9.val[1] , pSrc+184); - vldrev128q_f32(cd9.val[0] , pSrc+188); - vldrev128q_f32(cd8.val[1] , pSrc+192); - vldrev128q_f32(cd8.val[0] , pSrc+196); - vldrev128q_f32(cd7.val[1] , pSrc+200); - vldrev128q_f32(cd7.val[0] , pSrc+204); - vldrev128q_f32(cd6.val[1] , pSrc+208); - vldrev128q_f32(cd6.val[0] , pSrc+212); - vldrev128q_f32(cd5.val[1] , pSrc+216); - vldrev128q_f32(cd5.val[0] , pSrc+220); - vldrev128q_f32(cd4.val[1] , pSrc+224); - vldrev128q_f32(cd4.val[0] , pSrc+228); - vldrev128q_f32(cd3.val[1] , pSrc+232); - vldrev128q_f32(cd3.val[0] , pSrc+236); - vldrev128q_f32(cd2.val[1] , pSrc+240); - vldrev128q_f32(cd2.val[0] , pSrc+244); - vldrev128q_f32(cd1.val[1] , pSrc+248); - vldrev128q_f32(cd1.val[0] , pSrc+252); - - //Compare - if(dir) - { - vminmax256q(ab1 , cd1 ); - vminmax256q(ab2 , cd2 ); - vminmax256q(ab3 , cd3 ); - vminmax256q(ab4 , cd4 ); - vminmax256q(ab5 , cd5 ); - vminmax256q(ab6 , cd6 ); - vminmax256q(ab7 , cd7 ); - vminmax256q(ab8 , cd8 ); - vminmax256q(ab9 , cd9 ); - vminmax256q(ab10, cd10); - vminmax256q(ab11, cd11); - vminmax256q(ab12, cd12); - vminmax256q(ab13, cd13); - vminmax256q(ab14, cd14); - vminmax256q(ab15, cd15); - vminmax256q(ab16, cd16); - } - else - { - vminmax256q(cd1 , ab1 ); - vminmax256q(cd2 , ab2 ); - vminmax256q(cd3 , ab3 ); - vminmax256q(cd4 , ab4 ); - vminmax256q(cd5 , ab5 ); - vminmax256q(cd6 , ab6 ); - vminmax256q(cd7 , ab7 ); - vminmax256q(cd8 , ab8 ); - vminmax256q(cd9 , ab9 ); - vminmax256q(cd10, ab10); - vminmax256q(cd11, ab11); - vminmax256q(cd12, ab12); - vminmax256q(cd13, ab13); - vminmax256q(cd14, ab14); - vminmax256q(cd15, ab15); - vminmax256q(cd16, ab16); - } - - //Transpose - float32x4_t temp; - - temp = ab9.val[0]; - ab9.val[0] = cd1.val[0]; - cd1.val[0] = temp; - temp = ab9.val[1]; - ab9.val[1] = cd1.val[1]; - cd1.val[1] = temp; - temp = ab10.val[0]; - ab10.val[0] = cd2.val[0]; - cd2.val[0] = temp; - temp = ab10.val[1]; - ab10.val[1] = cd2.val[1]; - cd2.val[1] = temp; - temp = ab11.val[0]; - ab11.val[0] = cd3.val[0]; - cd3.val[0] = temp; - temp = ab11.val[1]; - ab11.val[1] = cd3.val[1]; - cd3.val[1] = temp; - temp = ab12.val[0]; - ab12.val[0] = cd4.val[0]; - cd4.val[0] = temp; - temp = ab12.val[1]; - ab12.val[1] = cd4.val[1]; - cd4.val[1] = temp; - temp = ab13.val[0]; - ab13.val[0] = cd5.val[0]; - cd5.val[0] = temp; - temp = ab13.val[1]; - ab13.val[1] = cd5.val[1]; - cd5.val[1] = temp; - temp = ab14.val[0]; - ab14.val[0] = cd6.val[0]; - cd6.val[0] = temp; - temp = ab14.val[1]; - ab14.val[1] = cd6.val[1]; - cd6.val[1] = temp; - temp = ab15.val[0]; - ab15.val[0] = cd7.val[0]; - cd7.val[0] = temp; - temp = ab15.val[1]; - ab15.val[1] = cd7.val[1]; - cd7.val[1] = temp; - temp = ab16.val[0]; - ab16.val[0] = cd8.val[0]; - cd8.val[0] = temp; - temp = ab16.val[1]; - ab16.val[1] = cd8.val[1]; - cd8.val[1] = temp; - - //Compare - if(dir) - { - vminmax256q(ab1 , cd1 ); - vminmax256q(ab2 , cd2 ); - vminmax256q(ab3 , cd3 ); - vminmax256q(ab4 , cd4 ); - vminmax256q(ab5 , cd5 ); - vminmax256q(ab6 , cd6 ); - vminmax256q(ab7 , cd7 ); - vminmax256q(ab8 , cd8 ); - vminmax256q(ab9 , cd9 ); - vminmax256q(ab10, cd10); - vminmax256q(ab11, cd11); - vminmax256q(ab12, cd12); - vminmax256q(ab13, cd13); - vminmax256q(ab14, cd14); - vminmax256q(ab15, cd15); - vminmax256q(ab16, cd16); - } - else - { - vminmax256q(cd1 , ab1 ); - vminmax256q(cd2 , ab2 ); - vminmax256q(cd3 , ab3 ); - vminmax256q(cd4 , ab4 ); - vminmax256q(cd5 , ab5 ); - vminmax256q(cd6 , ab6 ); - vminmax256q(cd7 , ab7 ); - vminmax256q(cd8 , ab8 ); - vminmax256q(cd9 , ab9 ); - vminmax256q(cd10, ab10); - vminmax256q(cd11, ab11); - vminmax256q(cd12, ab12); - vminmax256q(cd13, ab13); - vminmax256q(cd14, ab14); - vminmax256q(cd15, ab15); - vminmax256q(cd16, ab16); - } - - vst1q_f32(pSrc, ab1.val[0] ); - vst1q_f32(pSrc+4, ab1.val[1] ); - vst1q_f32(pSrc+8, ab2.val[0] ); - vst1q_f32(pSrc+12, ab2.val[1] ); - vst1q_f32(pSrc+16, ab3.val[0] ); - vst1q_f32(pSrc+20, ab3.val[1] ); - vst1q_f32(pSrc+24, ab4.val[0] ); - vst1q_f32(pSrc+28, ab4.val[1] ); - vst1q_f32(pSrc+32, ab5.val[0] ); - vst1q_f32(pSrc+36, ab5.val[1] ); - vst1q_f32(pSrc+40, ab6.val[0] ); - vst1q_f32(pSrc+44, ab6.val[1] ); - vst1q_f32(pSrc+48, ab7.val[0] ); - vst1q_f32(pSrc+52, ab7.val[1] ); - vst1q_f32(pSrc+56, ab8.val[0] ); - vst1q_f32(pSrc+60, ab8.val[1] ); - vst1q_f32(pSrc+64, cd1.val[0] ); - vst1q_f32(pSrc+68, cd1.val[1] ); - vst1q_f32(pSrc+72, cd2.val[0] ); - vst1q_f32(pSrc+76, cd2.val[1] ); - vst1q_f32(pSrc+80, cd3.val[0] ); - vst1q_f32(pSrc+84, cd3.val[1] ); - vst1q_f32(pSrc+88, cd4.val[0] ); - vst1q_f32(pSrc+92, cd4.val[1] ); - vst1q_f32(pSrc+96, cd5.val[0] ); - vst1q_f32(pSrc+100, cd5.val[1] ); - vst1q_f32(pSrc+104, cd6.val[0] ); - vst1q_f32(pSrc+108, cd6.val[1] ); - vst1q_f32(pSrc+112, cd7.val[0] ); - vst1q_f32(pSrc+116, cd7.val[1] ); - vst1q_f32(pSrc+120, cd8.val[0] ); - vst1q_f32(pSrc+124, cd8.val[1] ); - vst1q_f32(pSrc+128, ab9.val[0] ); - vst1q_f32(pSrc+132, ab9.val[1] ); - vst1q_f32(pSrc+136, ab10.val[0]); - vst1q_f32(pSrc+140, ab10.val[1]); - vst1q_f32(pSrc+144, ab11.val[0]); - vst1q_f32(pSrc+148, ab11.val[1]); - vst1q_f32(pSrc+152, ab12.val[0]); - vst1q_f32(pSrc+156, ab12.val[1]); - vst1q_f32(pSrc+160, ab13.val[0]); - vst1q_f32(pSrc+164, ab13.val[1]); - vst1q_f32(pSrc+168, ab14.val[0]); - vst1q_f32(pSrc+172, ab14.val[1]); - vst1q_f32(pSrc+176, ab15.val[0]); - vst1q_f32(pSrc+180, ab15.val[1]); - vst1q_f32(pSrc+184, ab16.val[0]); - vst1q_f32(pSrc+188, ab16.val[1]); - vst1q_f32(pSrc+192, cd9.val[0] ); - vst1q_f32(pSrc+196, cd9.val[1] ); - vst1q_f32(pSrc+200, cd10.val[0]); - vst1q_f32(pSrc+204, cd10.val[1]); - vst1q_f32(pSrc+208, cd11.val[0]); - vst1q_f32(pSrc+212, cd11.val[1]); - vst1q_f32(pSrc+216, cd12.val[0]); - vst1q_f32(pSrc+220, cd12.val[1]); - vst1q_f32(pSrc+224, cd13.val[0]); - vst1q_f32(pSrc+228, cd13.val[1]); - vst1q_f32(pSrc+232, cd14.val[0]); - vst1q_f32(pSrc+236, cd14.val[1]); - vst1q_f32(pSrc+240, cd15.val[0]); - vst1q_f32(pSrc+244, cd15.val[1]); - vst1q_f32(pSrc+248, cd16.val[0]); - vst1q_f32(pSrc+252, cd16.val[1]); - - //Transpose - arm_bitonic_merge_128_f32(pSrc+0 , dir); - arm_bitonic_merge_128_f32(pSrc+128, dir); -} - -#define SWAP(a,i,j) \ - temp = vgetq_lane_f32(a, j); \ - a = vsetq_lane_f32(vgetq_lane_f32(a, i), a, j);\ - a = vsetq_lane_f32(temp, a, i); - -static float32x4_t arm_bitonic_sort_4_f32(float32x4_t a, uint8_t dir) -{ - float32_t temp; - - - if( dir==(vgetq_lane_f32(a, 0) > vgetq_lane_f32(a, 1)) ) - { - SWAP(a,0,1); - } - if( dir==(vgetq_lane_f32(a, 2) > vgetq_lane_f32(a, 3)) ) - { - SWAP(a,2,3); - } - - if( dir==(vgetq_lane_f32(a, 0) > vgetq_lane_f32(a, 3)) ) - { - SWAP(a,0,3); - } - if( dir==(vgetq_lane_f32(a, 1) > vgetq_lane_f32(a, 2)) ) - { - SWAP(a,1,2); - } - - if( dir==(vgetq_lane_f32(a, 0) > vgetq_lane_f32(a, 1)) ) - { - SWAP(a,0,1); - } - if( dir==(vgetq_lane_f32(a, 2)>vgetq_lane_f32(a, 3)) ) - { - SWAP(a,2,3); - } - - return a; -} - -static float32x4x2_t arm_bitonic_sort_8_f32(float32x4_t a, float32x4_t b, uint8_t dir) -{ - a = arm_bitonic_sort_4_f32(a, dir); - b = arm_bitonic_sort_4_f32(b, dir); - return arm_bitonic_merge_8_f32(a, b, dir); -} - - - -#endif - -/** - @ingroup groupSupport - */ - -/** - @defgroup Sorting Vector sorting algorithms - - Sort the elements of a vector - - There are separate functions for floating-point, Q31, Q15, and Q7 data types. - */ - -/** - @addtogroup Sorting - @{ - */ - -/** - * @private - * @param[in] S points to an instance of the sorting 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_bitonic_sort_f32( -const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint16_t s, i; - uint8_t dir = S->dir; - -#ifdef ARM_MATH_NEON - (void)s; - - float32_t * pOut; - uint16_t counter = blockSize>>5; - - if( (blockSize & (blockSize-1)) == 0 ) // Powers of 2 only - { - if(pSrc == pDst) // in-place - pOut = pSrc; - else - pOut = pDst; - - float32x4x2_t ab1, ab2; - float32x4x2_t cd1, cd2; - - if(blockSize == 1) - pOut = pSrc; - else if(blockSize == 2) - { - float32_t temp; - - if( dir==(pSrc[0]>pSrc[1]) ) - { - temp = pSrc[1]; - pOut[1] = pSrc[0]; - pOut[0] = temp; - } - else - pOut = pSrc; - } - else if(blockSize == 4) - { - float32x4_t a = vld1q_f32(pSrc); - - a = arm_bitonic_sort_4_f32(a, dir); - - vst1q_f32(pOut, a); - } - else if(blockSize == 8) - { - float32x4_t a; - float32x4_t b; - float32x4x2_t ab; - - a = vld1q_f32(pSrc); - b = vld1q_f32(pSrc+4); - - ab = arm_bitonic_sort_8_f32(a, b, dir); - - vst1q_f32(pOut, ab.val[0]); - vst1q_f32(pOut+4, ab.val[1]); - } - else if(blockSize >=16) - { - // Order 16 bits long vectors - for(i=0; i>1; - for(i=0; i>1; - for(i=0; i>1; - for(i=0; idir; - uint32_t i; - uint8_t swapped =1; - float32_t * pA; - float32_t temp; - - if(pSrc != pDst) // out-of-place - { - memcpy(pDst, pSrc, blockSize*sizeof(float32_t) ); - pA = pDst; - } - else - pA = pSrc; - - while(swapped==1) // If nothing has been swapped after one loop stop - { - swapped=0; - - for(i=0; ipA[i+1])) - { - // Swap - temp = pA[i]; - pA[i] = pA[i+1]; - pA[i+1] = temp; - - // Update flag - swapped = 1; - } - } - - blockSize--; - } -} - -/** - @} end of Sorting group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_f32.c deleted file mode 100644 index 181a9ca..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_f32.c +++ /dev/null @@ -1,192 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_copy_f32.c - * Description: Copies the elements of a floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -void arm_copy_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - blkCnt = blockSize >> 2U; - - /* Compute 4 outputs at a time */ - while (blkCnt > 0U) - { - vstrwq_f32(pDst, vldrwq_f32(pSrc)); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pSrc += 4; - pDst += 4; - blkCnt --; - } - - blkCnt = blockSize & 3; - - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#else -#if defined(ARM_MATH_NEON_EXPERIMENTAL) -void arm_copy_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counter */ - - float32x4_t inV; - - blkCnt = blockSize >> 2U; - - /* 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 */ - inV = vld1q_f32(pSrc); - vst1q_f32(pDst, inV); - pSrc += 4; - pDst += 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 & 3; - - while (blkCnt > 0U) - { - /* C = A */ - /* Copy and then store the results in the destination buffer */ - *pDst++ = *pSrc++; - - /* Decrement the loop counter */ - blkCnt--; - } -} -#else -void arm_copy_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - *pDst++ = *pSrc++; - *pDst++ = *pSrc++; - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of BasicCopy group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q15.c deleted file mode 100644 index d99f725..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q15.c +++ /dev/null @@ -1,130 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_copy_q15.c - * Description: Copies the elements of a Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - */ -#if defined(ARM_MATH_MVEI) -void arm_copy_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - vstrhq_s16(pDst,vldrhq_s16(pSrc)); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pSrc += 8; - pDst += 8; - blkCnt --; - } - - blkCnt = blockSize & 7; - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -void arm_copy_q15( - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A */ - - /* read 2 times 2 samples at a time */ - write_q15x2_ia (&pDst, read_q15x2_ia ((q15_t **) &pSrc)); - write_q15x2_ia (&pDst, read_q15x2_ia ((q15_t **) &pSrc)); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicCopy group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q31.c deleted file mode 100644 index 4b748a5..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q31.c +++ /dev/null @@ -1,135 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_copy_q31.c - * Description: Copies the elements of a Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - */ -#if defined(ARM_MATH_MVEI) -void arm_copy_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - blkCnt = blockSize >> 2U; - - /* Compute 4 outputs at a time */ - while (blkCnt > 0U) - { - vstrwq_s32(pDst,vldrwq_s32(pSrc)); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pSrc += 4; - pDst += 4; - blkCnt --; - } - - blkCnt = blockSize & 3; - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#else -void arm_copy_q31( - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - *pDst++ = *pSrc++; - *pDst++ = *pSrc++; - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicCopy group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q7.c deleted file mode 100644 index 33ee4f0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_copy_q7.c +++ /dev/null @@ -1,132 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_copy_q7.c - * Description: Copies the elements of a Q7 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - */ -#if defined(ARM_MATH_MVEI) -void arm_copy_q7( - const q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - - uint32_t blkCnt; - - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - - vstrbq_s8(pDst,vldrbq_s8(pSrc)); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pSrc += 16; - pDst += 16; - blkCnt --; - } - - blkCnt = blockSize & 0xF; - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -void arm_copy_q7( - const q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A */ - - /* read 4 samples at a time */ - write_q7x4_ia (&pDst, read_q7x4_ia ((q7_t **) &pSrc)); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A */ - - /* Copy and store result in destination buffer */ - *pDst++ = *pSrc++; - - /* Decrement loop counter */ - blkCnt--; - } -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of BasicCopy group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_f32.c deleted file mode 100644 index 2c40773..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_f32.c +++ /dev/null @@ -1,189 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fill_f32.c - * Description: Fills a constant value into a floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_fill_f32( - float32_t value, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - blkCnt = blockSize >> 2U; - - /* Compute 4 outputs at a time */ - while (blkCnt > 0U) - { - - vstrwq_f32(pDst,vdupq_n_f32(value)); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pDst += 4; - blkCnt --; - } - - blkCnt = blockSize & 3; - - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#else -#if defined(ARM_MATH_NEON_EXPERIMENTAL) -void arm_fill_f32( - float32_t value, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counter */ - - - float32x4_t inV = vdupq_n_f32(value); - - blkCnt = blockSize >> 2U; - - /* 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 */ - vst1q_f32(pDst, inV); - pDst += 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 & 3; - - while (blkCnt > 0U) - { - /* C = value */ - /* Fill the value in the destination buffer */ - *pDst++ = value; - - /* Decrement the loop counter */ - blkCnt--; - } -} -#else -void arm_fill_f32( - float32_t value, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - *pDst++ = value; - *pDst++ = value; - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of Fill group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q15.c deleted file mode 100644 index 7e17c0e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q15.c +++ /dev/null @@ -1,134 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fill_q15.c - * Description: Fills a constant value into a Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - */ -#if defined(ARM_MATH_MVEI) -void arm_fill_q15( - q15_t value, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - - vstrhq_s16(pDst,vdupq_n_s16(value)); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pDst += 8; - blkCnt --; - } - - blkCnt = blockSize & 7; - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -void arm_fill_q15( - q15_t value, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t packedValue; /* value packed to 32 bits */ - - /* Packing two 16 bit values to 32 bit value in order to use SIMD */ - packedValue = __PKHBT(value, value, 16U); - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = value */ - - /* fill 2 times 2 samples at a time */ - write_q15x2_ia (&pDst, packedValue); - write_q15x2_ia (&pDst, packedValue); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Fill group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q31.c deleted file mode 100644 index 1f9d77e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q31.c +++ /dev/null @@ -1,135 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fill_q31.c - * Description: Fills a constant value into a Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - */ -#if defined(ARM_MATH_MVEI) -void arm_fill_q31( - q31_t value, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - blkCnt = blockSize >> 2U; - - /* Compute 4 outputs at a time */ - while (blkCnt > 0U) - { - - vstrwq_s32(pDst,vdupq_n_s32(value)); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pDst += 4; - blkCnt --; - } - - blkCnt = blockSize & 3; - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } - -} - -#else -void arm_fill_q31( - q31_t value, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - *pDst++ = value; - *pDst++ = value; - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Fill group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q7.c deleted file mode 100644 index 6d78540..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_fill_q7.c +++ /dev/null @@ -1,133 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_fill_q7.c - * Description: Fills a constant value into a Q7 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - */ -#if defined(ARM_MATH_MVEI) -void arm_fill_q7( - q7_t value, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - - vstrbq_s8(pDst,vdupq_n_s8(value)); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pDst += 16; - blkCnt --; - } - - blkCnt = blockSize & 0xF; - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -void arm_fill_q7( - q7_t value, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t packedValue; /* value packed to 32 bits */ - - /* Packing four 8 bit values to 32 bit value in order to use SIMD */ - packedValue = __PACKq7(value, value, value, value); - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = value */ - - /* fill 4 samples at a time */ - write_q7x4_ia (&pDst, packedValue); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = value */ - - /* Fill value in destination buffer */ - *pDst++ = value; - - /* Decrement loop counter */ - blkCnt--; - } -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of Fill group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q15.c deleted file mode 100644 index 21f15e9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q15.c +++ /dev/null @@ -1,308 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_float_to_q15.c - * Description: Converts the elements of the floating-point vector to Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (q15_t)(pSrc[n] * 32768);   0 <= n < blockSize.
    -  
    - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. - - @note - In order to apply rounding, the library should be rebuilt with the ROUNDING macro - defined in the preprocessor section of project options. - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_float_to_q15( - const float32_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - float32_t maxQ = (float32_t) Q15_MAX; - f32x4x2_t tmp; - q15x8_t vecDst; -#ifdef ARM_MATH_ROUNDING - float32_t in; -#endif - - - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* C = A * 32768 */ - /* convert from float to q15 and then store the results in the destination buffer */ - tmp = vld2q(pSrc); - - tmp.val[0] = vmulq(tmp.val[0], maxQ); - tmp.val[1] = vmulq(tmp.val[1], maxQ); - - vecDst = vqmovnbq(vecDst, vcvtaq_s32_f32(tmp.val[0])); - vecDst = vqmovntq(vecDst, vcvtaq_s32_f32(tmp.val[1])); - vst1q(pDst, vecDst); - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - pDst += 8; - pSrc += 8; - } - - blkCnt = blockSize & 7; - while (blkCnt > 0U) - { - /* C = A * 32768 */ - - /* convert from float to Q15 and store result in destination buffer */ -#ifdef ARM_MATH_ROUNDING - - in = (*pSrc++ * 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) (*pSrc++ * 32768.0f), 16); - -#endif /* #ifdef ARM_MATH_ROUNDING */ - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -#if defined(ARM_MATH_NEON_EXPERIMENTAL) -void arm_float_to_q15( - const float32_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* Src pointer */ - uint32_t blkCnt; /* loop counter */ - - float32x4_t inV; - #ifdef ARM_MATH_ROUNDING - float32x4_t zeroV = vdupq_n_f32(0.0f); - float32x4_t pHalf = vdupq_n_f32(0.5f / 32768.0f); - float32x4_t mHalf = vdupq_n_f32(-0.5f / 32768.0f); - float32x4_t r; - uint32x4_t cmp; - float32_t in; - #endif - - int32x4_t cvt; - int16x4_t outV; - - blkCnt = blockSize >> 2U; - - /* 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 */ - inV = vld1q_f32(pIn); - cmp = vcgtq_f32(inV,zeroV); - r = vbslq_f32(cmp,pHalf,mHalf); - inV = vaddq_f32(inV, r); - - pIn += 4; - - cvt = vcvtq_n_s32_f32(inV,15); - outV = vqmovn_s32(cvt); - - vst1_s16(pDst, outV); - pDst += 4; - -#else - - /* C = A * 32768 */ - /* Convert from float to q15 and then store the results in the destination buffer */ - inV = vld1q_f32(pIn); - - cvt = vcvtq_n_s32_f32(inV,15); - outV = vqmovn_s32(cvt); - - vst1_s16(pDst, outV); - pDst += 4; - pIn += 4; - -#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 & 3; - - 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 -void arm_float_to_q15( - const float32_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const float32_t *pIn = pSrc; /* Source pointer */ - -#ifdef ARM_MATH_ROUNDING - float32_t in; -#endif /* #ifdef ARM_MATH_ROUNDING */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * 32768 */ - - /* convert from float to Q15 and store result in destination buffer */ -#ifdef ARM_MATH_ROUNDING - - in = (*pIn++ * 32768.0f); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); - - in = (*pIn++ * 32768.0f); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); - - in = (*pIn++ * 32768.0f); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); - - in = (*pIn++ * 32768.0f); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); - -#else - - *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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A * 32768 */ - - /* convert from float to Q15 and store result in destination buffer */ -#ifdef ARM_MATH_ROUNDING - - in = (*pIn++ * 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 loop counter */ - blkCnt--; - } - -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of float_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q31.c deleted file mode 100644 index e24f94d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q31.c +++ /dev/null @@ -1,314 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_float_to_q31.c - * Description: Converts the elements of the floating-point vector to Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (q31_t)(pSrc[n] * 2147483648);   0 <= n < blockSize.
    -  
    - - @par Scaling and Overflow Behavior - The function uses saturating arithmetic. - Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] are saturated. - - @note - In order to apply rounding, the library should be rebuilt with the ROUNDING macro - defined in the preprocessor section of project options. - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_float_to_q31( - const float32_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - float32_t maxQ = (float32_t) Q31_MAX; - f32x4_t vecDst; -#ifdef ARM_MATH_ROUNDING - float32_t in; -#endif - - - blkCnt = blockSize >> 2U; - - /* Compute 4 outputs at a time. */ - while (blkCnt > 0U) - { - - vecDst = vldrwq_f32(pSrc); - /* C = A * 2147483648 */ - /* convert from float to Q31 and then store the results in the destination buffer */ - vecDst = vmulq(vecDst, maxQ); - - vstrwq_s32(pDst, vcvtaq_s32_f32(vecDst)); - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pSrc += 4; - pDst += 4; - blkCnt --; - } - - blkCnt = blockSize & 3; - - while (blkCnt > 0U) - { - /* C = A * 2147483648 */ - - /* convert from float to Q31 and store result in destination buffer */ -#ifdef ARM_MATH_ROUNDING - - in = (*pSrc++ * 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) (*pSrc++ * 2147483648.0f)); - -#endif /* #ifdef ARM_MATH_ROUNDING */ - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -#if defined(ARM_MATH_NEON) -void arm_float_to_q31( - const float32_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* Src pointer */ - uint32_t blkCnt; /* loop counter */ - - float32x4_t inV; - #ifdef ARM_MATH_ROUNDING - float32_t in; - float32x4_t zeroV = vdupq_n_f32(0.0f); - float32x4_t pHalf = vdupq_n_f32(0.5f / 2147483648.0f); - float32x4_t mHalf = vdupq_n_f32(-0.5f / 2147483648.0f); - float32x4_t r; - uint32x4_t cmp; - #endif - - int32x4_t outV; - - blkCnt = blockSize >> 2U; - - /* 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 */ - inV = vld1q_f32(pIn); - cmp = vcgtq_f32(inV,zeroV); - r = vbslq_f32(cmp,pHalf,mHalf); - inV = vaddq_f32(inV, r); - - pIn += 4; - - outV = vcvtq_n_s32_f32(inV,31); - - vst1q_s32(pDst, outV); - pDst += 4; - -#else - - /* C = A * 2147483648 */ - /* Convert from float to Q31 and then store the results in the destination buffer */ - inV = vld1q_f32(pIn); - - outV = vcvtq_n_s32_f32(inV,31); - - vst1q_s32(pDst, outV); - pDst += 4; - pIn += 4; - -#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 & 3; - - 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 -void arm_float_to_q31( - const float32_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const float32_t *pIn = pSrc; /* Source pointer */ - -#ifdef ARM_MATH_ROUNDING - float32_t in; -#endif /* #ifdef ARM_MATH_ROUNDING */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * 2147483648 */ - - /* convert from float to Q31 and store result in destination buffer */ -#ifdef ARM_MATH_ROUNDING - - in = (*pIn++ * 2147483648.0f); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = clip_q63_to_q31((q63_t) (in)); - - in = (*pIn++ * 2147483648.0f); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = clip_q63_to_q31((q63_t) (in)); - - in = (*pIn++ * 2147483648.0f); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = clip_q63_to_q31((q63_t) (in)); - - in = (*pIn++ * 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A * 2147483648 */ - - /* convert from float to Q31 and store result in destination buffer */ -#ifdef ARM_MATH_ROUNDING - - in = (*pIn++ * 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 loop counter */ - blkCnt--; - } - -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of float_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q7.c deleted file mode 100644 index 05f842f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_float_to_q7.c +++ /dev/null @@ -1,330 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_float_to_q7.c - * Description: Converts the elements of the floating-point vector to Q7 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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. - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_float_to_q7( - const float32_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - float32_t maxQ = powf(2.0, 7); - f32x4x4_t tmp; - q15x8_t evVec, oddVec; - q7x16_t vecDst; - float32_t const *pSrcVec; -#ifdef ARM_MATH_ROUNDING - float32_t in; -#endif - - pSrcVec = (float32_t const *) pSrc; - blkCnt = blockSize >> 4; - while (blkCnt > 0U) { - tmp = vld4q(pSrcVec); - pSrcVec += 16; - /* - * C = A * 128.0 - * convert from float to q7 and then store the results in the destination buffer - */ - tmp.val[0] = vmulq(tmp.val[0], maxQ); - tmp.val[1] = vmulq(tmp.val[1], maxQ); - tmp.val[2] = vmulq(tmp.val[2], maxQ); - tmp.val[3] = vmulq(tmp.val[3], maxQ); - - /* - * convert and pack evens - */ - evVec = vqmovnbq(evVec, vcvtaq_s32_f32(tmp.val[0])); - evVec = vqmovntq(evVec, vcvtaq_s32_f32(tmp.val[2])); - /* - * convert and pack odds - */ - oddVec = vqmovnbq(oddVec, vcvtaq_s32_f32(tmp.val[1])); - oddVec = vqmovntq(oddVec, vcvtaq_s32_f32(tmp.val[3])); - /* - * merge - */ - vecDst = vqmovnbq(vecDst, evVec); - vecDst = vqmovntq(vecDst, oddVec); - - vst1q(pDst, vecDst); - pDst += 16; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - blkCnt = blockSize & 0xF; - while (blkCnt > 0U) - { - /* C = A * 128 */ - - /* Convert from float to q7 and store result in destination buffer */ -#ifdef ARM_MATH_ROUNDING - - in = (*pSrcVec++ * 128); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); - -#else - - *pDst++ = (q7_t) __SSAT((q31_t) (*pSrcVec++ * 128.0f), 8); - -#endif /* #ifdef ARM_MATH_ROUNDING */ - - /* Decrement loop counter */ - blkCnt--; - } - -} -#else -#if defined(ARM_MATH_NEON) -void arm_float_to_q7( - const float32_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - const float32_t *pIn = pSrc; /* Src pointer */ - uint32_t blkCnt; /* loop counter */ - - float32x4_t inV; - #ifdef ARM_MATH_ROUNDING - float32_t in; - float32x4_t zeroV = vdupq_n_f32(0.0f); - float32x4_t pHalf = vdupq_n_f32(0.5f / 128.0f); - float32x4_t mHalf = vdupq_n_f32(-0.5f / 128.0f); - float32x4_t r; - uint32x4_t cmp; - #endif - - int16x4_t cvt1,cvt2; - int8x8_t outV; - - blkCnt = blockSize >> 3U; - - /* Compute 8 outputs at a time. - ** a second loop below computes the remaining 1 to 7 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 */ - inV = vld1q_f32(pIn); - cmp = vcgtq_f32(inV,zeroV); - r = vbslq_f32(cmp,pHalf,mHalf); - inV = vaddq_f32(inV, r); - cvt1 = vqmovn_s32(vcvtq_n_s32_f32(inV,7)); - pIn += 4; - - inV = vld1q_f32(pIn); - cmp = vcgtq_f32(inV,zeroV); - r = vbslq_f32(cmp,pHalf,mHalf); - inV = vaddq_f32(inV, r); - cvt2 = vqmovn_s32(vcvtq_n_s32_f32(inV,7)); - pIn += 4; - - outV = vqmovn_s16(vcombine_s16(cvt1,cvt2)); - vst1_s8(pDst, outV); - pDst += 8; - -#else - - /* C = A * 128 */ - /* Convert from float to q7 and then store the results in the destination buffer */ - inV = vld1q_f32(pIn); - cvt1 = vqmovn_s32(vcvtq_n_s32_f32(inV,7)); - pIn += 4; - - inV = vld1q_f32(pIn); - cvt2 = vqmovn_s32(vcvtq_n_s32_f32(inV,7)); - pIn += 4; - - outV = vqmovn_s16(vcombine_s16(cvt1,cvt2)); - - vst1_s8(pDst, outV); - pDst += 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 & 7; - - 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 -void arm_float_to_q7( - const float32_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const float32_t *pIn = pSrc; /* Source pointer */ - -#ifdef ARM_MATH_ROUNDING - float32_t in; -#endif /* #ifdef ARM_MATH_ROUNDING */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = A * 128 */ - - /* Convert from float to q7 and store result in destination buffer */ -#ifdef ARM_MATH_ROUNDING - - in = (*pIn++ * 128); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); - - in = (*pIn++ * 128); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); - - in = (*pIn++ * 128); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); - - in = (*pIn++ * 128); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); - -#else - - *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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = A * 128 */ - - /* Convert from float to q7 and store result in destination buffer */ -#ifdef ARM_MATH_ROUNDING - - in = (*pIn++ * 128); - in += in > 0.0f ? 0.5f : -0.5f; - *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); - -#else - - *pDst++ = (q7_t) __SSAT((q31_t) (*pIn++ * 128.0f), 8); - -#endif /* #ifdef ARM_MATH_ROUNDING */ - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of float_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_heap_sort_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_heap_sort_f32.c deleted file mode 100644 index 4ef6b09..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_heap_sort_f32.c +++ /dev/null @@ -1,119 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_heap_sort_f32.c - * Description: Floating point heap sort - * - * $Date: 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_sorting.h" - - - -static void arm_heapify(float32_t * pSrc, uint32_t n, uint32_t i, uint8_t dir) -{ - /* Put all the elements of pSrc in heap order */ - uint32_t k = i; // Initialize largest/smallest as root - uint32_t l = 2*i + 1; // left = 2*i + 1 - uint32_t r = 2*i + 2; // right = 2*i + 2 - float32_t temp; - - if (l < n && dir==(pSrc[l] > pSrc[k]) ) - k = l; - - if (r < n && dir==(pSrc[r] > pSrc[k]) ) - k = r; - - if (k != i) - { - temp = pSrc[i]; - pSrc[i]=pSrc[k]; - pSrc[k]=temp; - - arm_heapify(pSrc, n, k, dir); - } -} - -/** - @ingroup groupSupport - */ - -/** - @addtogroup Sorting - @{ - */ - -/** - * @private - * @param[in] S points to an instance of the sorting 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. - * - * @par Algorithm - * The heap sort algorithm is a comparison algorithm that - * divides the input array into a sorted and an unsorted region, - * and shrinks the unsorted region by extracting the largest - * element and moving it to the sorted region. A heap data - * structure is used to find the maximum. - * - * @par It's an in-place algorithm. In order to obtain an out-of-place - * function, a memcpy of the source vector is performed. - */ -void arm_heap_sort_f32( - const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - float32_t * pA; - int32_t i; - float32_t temp; - - if(pSrc != pDst) // out-of-place - { - memcpy(pDst, pSrc, blockSize*sizeof(float32_t) ); - pA = pDst; - } - else - pA = pSrc; - - // Build the heap array so that the largest value is the root - for (i = blockSize/2 - 1; i >= 0; i--) - arm_heapify(pA, blockSize, i, S->dir); - - for (i = blockSize - 1; i >= 0; i--) - { - // Swap - temp = pA[i]; - pA[i] = pA[0]; - pA[0] = temp; - - // Restore heap order - arm_heapify(pA, i, 0, S->dir); - } -} -/** - @} end of Sorting group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_insertion_sort_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_insertion_sort_f32.c deleted file mode 100644 index feec285..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_insertion_sort_f32.c +++ /dev/null @@ -1,93 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_insertion_sort_f32.c - * Description: Floating point insertion sort - * - * $Date: 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_sorting.h" - -/** - @ingroup groupSupport - */ - -/** - @addtogroup Sorting - @{ - */ - -/** - * @private - * @param[in] S points to an instance of the sorting 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. - * - * @par Algorithm - * The insertion sort is a simple sorting algorithm that - * reads all the element of the input array and removes one element - * at a time, finds the location it belongs in the final sorted list, - * and inserts it there. - * - * @par It's an in-place algorithm. In order to obtain an out-of-place - * function, a memcpy of the source vector is performed. - */ - -void arm_insertion_sort_f32( - const arm_sort_instance_f32 * S, - float32_t *pSrc, - float32_t* pDst, - uint32_t blockSize) -{ - float32_t * pA; - uint8_t dir = S->dir; - uint32_t i, j; - float32_t temp; - - if(pSrc != pDst) // out-of-place - { - memcpy(pDst, pSrc, blockSize*sizeof(float32_t) ); - pA = pDst; - } - else - pA = pSrc; - - // Real all the element of the input array - for(i=0; i0 && dir==(pA[j]= end || dir==(pA[i] <= pA[j])) ) - { - pB[k] = pA[i]; - i++; - } - else - { - pB[k] = pA[j]; - j++; - } - } -} - -static void arm_merge_sort_core_f32(float32_t * pB, uint32_t begin, uint32_t end, float32_t * pA, uint8_t dir) -{ - if((int32_t)end - (int32_t)begin >= 2 ) // If run size != 1 divide - { - int32_t middle = (end + begin) / 2; // Take the middle point - - arm_merge_sort_core_f32(pA, begin, middle, pB, dir); // Sort the left part - arm_merge_sort_core_f32(pA, middle, end, pB, dir); // Sort the right part - - topDownMerge(pB, begin, middle, end, pA, dir); - } -} - - -/** - @ingroup groupSupport - */ - -/** - @addtogroup Sorting - @{ - */ - -/** - * @param[in] S points to an instance of the sorting 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. - * - * @par Algorithm - * The merge sort algorithm is a comparison algorithm that - * divide the input array in sublists and merge them to produce - * longer sorted sublists until there is only one list remaining. - * - * @par A work array is always needed. It must be allocated by the user - * linked to the instance at initialization time. - * - * @par It's an in-place algorithm. In order to obtain an out-of-place - * function, a memcpy of the source vector is performed - */ - - -void arm_merge_sort_f32( - const arm_merge_sort_instance_f32 * S, - float32_t *pSrc, - float32_t *pDst, - uint32_t blockSize) -{ - float32_t * pA; - - /* Out-of-place */ - if(pSrc != pDst) - { - memcpy(pDst, pSrc, blockSize*sizeof(float32_t)); - pA = pDst; - } - else - pA = pSrc; - - /* A working buffer is needed */ - memcpy(S->buffer, pSrc, blockSize*sizeof(float32_t)); - - arm_merge_sort_core_f32(S->buffer, 0, blockSize, pA, S->dir); -} -/** - @} end of Sorting group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_merge_sort_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_merge_sort_init_f32.c deleted file mode 100644 index 31431f3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_merge_sort_init_f32.c +++ /dev/null @@ -1,53 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_merge_sort_init_f32.c - * Description: Floating point merge sort initialization function - * - * $Date: 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupSupport - */ - -/** - @addtogroup Sorting - @{ - */ - - - /** - * @param[in,out] S points to an instance of the sorting structure. - * @param[in] dir Sorting order. - * @param[in] buffer Working buffer. - */ -void arm_merge_sort_init_f32(arm_merge_sort_instance_f32 * S, arm_sort_dir dir, float32_t * buffer) -{ - S->dir = dir; - S->buffer = buffer; -} -/** - @} end of Sorting group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_float.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_float.c deleted file mode 100644 index f1fac4f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_float.c +++ /dev/null @@ -1,207 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_q15_to_float.c - * Description: Converts the elements of the Q15 vector to floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (float32_t) pSrc[n] / 32768;   0 <= n < blockSize.
    -  
    - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_q15_to_float( - const q15_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - - q15x8_t vecDst; - q15_t const *pSrcVec; - - pSrcVec = (q15_t const *) pSrc; - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* C = (float32_t) A / 32768 */ - /* convert from q15 to float and then store the results in the destination buffer */ - vecDst = vldrhq_s32(pSrcVec); - pSrcVec += 4; - vstrwq(pDst, vcvtq_n_f32_s32(vecDst, 15)); - pDst += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - blkCnt = blockSize & 3; - while (blkCnt > 0U) - { - /* C = (float32_t) A / 32768 */ - - /* Convert from q15 to float and store result in destination buffer */ - *pDst++ = ((float32_t) *pSrcVec++ / 32768.0f); - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -#if defined(ARM_MATH_NEON_EXPERIMENTAL) -void arm_q15_to_float( - const q15_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const q15_t *pIn = pSrc; /* Src pointer */ - uint32_t blkCnt; /* loop counter */ - - int16x8_t inV; - int32x4_t inV0, inV1; - float32x4_t outV; - - blkCnt = blockSize >> 3U; - - /* Compute 8 outputs at a time. - ** a second loop below computes the remaining 1 to 7 samples. */ - while (blkCnt > 0U) - { - /* C = (float32_t) A / 32768 */ - /* convert from q15 to float and then store the results in the destination buffer */ - inV = vld1q_s16(pIn); - pIn += 8; - - inV0 = vmovl_s16(vget_low_s16(inV)); - inV1 = vmovl_s16(vget_high_s16(inV)); - - outV = vcvtq_n_f32_s32(inV0,15); - vst1q_f32(pDst, outV); - pDst += 4; - - outV = vcvtq_n_f32_s32(inV1,15); - vst1q_f32(pDst, outV); - pDst += 4; - - /* 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 & 7; - - - 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--; - } -} -#else -void arm_q15_to_float( - const q15_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const q15_t *pIn = pSrc; /* Source pointer */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (float32_t) A / 32768 */ - - /* Convert from q15 to float and store result in 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (float32_t) A / 32768 */ - - /* Convert from q15 to float and store result in destination buffer */ - *pDst++ = ((float32_t) *pIn++ / 32768.0f); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of q15_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_q31.c deleted file mode 100644 index a33bcb7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_q31.c +++ /dev/null @@ -1,182 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_q15_to_q31.c - * Description: Converts the elements of the Q15 vector to Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (q31_t) pSrc[n] << 16;   0 <= n < blockSize.
    -  
    - */ -#if defined(ARM_MATH_MVEI) -void arm_q15_to_q31( - const q15_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - - uint32_t blkCnt; - - q31x4_t vecDst; - - blkCnt = blockSize>> 2; - while (blkCnt > 0U) - { - - /* C = (q31_t)A << 16 */ - /* convert from q15 to q31 and then store the results in the destination buffer */ - /* load q15 + 32-bit widening */ - vecDst = vldrhq_s32((q15_t const *) pSrc); - vecDst = vshlq_n(vecDst, 16); - vstrwq_s32(pDst, vecDst); - - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pDst += 4; - pSrc += 4; - blkCnt --; - } - - blkCnt = blockSize & 3; - while (blkCnt > 0U) - { - /* C = (q31_t) A << 16 */ - - /* Convert from q15 to q31 and store result in destination buffer */ - *pDst++ = (q31_t) *pSrc++ << 16; - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -void arm_q15_to_q31( - const q15_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const q15_t *pIn = pSrc; /* Source pointer */ - -#if defined (ARM_MATH_LOOPUNROLL) - q31_t in1, in2; - q31_t out1, out2, out3, out4; -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (q31_t)A << 16 */ - - /* Convert from q15 to q31 and store result in destination buffer */ - in1 = read_q15x2_ia ((q15_t **) &pIn); - in2 = read_q15x2_ia ((q15_t **) &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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (q31_t) A << 16 */ - - /* Convert from q15 to q31 and store result in destination buffer */ - *pDst++ = (q31_t) *pIn++ << 16; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of q15_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_q7.c deleted file mode 100644 index 251b0cf..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q15_to_q7.c +++ /dev/null @@ -1,190 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_q15_to_q7.c - * Description: Converts the elements of the Q15 vector to Q7 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (q7_t) pSrc[n] >> 8;   0 <= n < blockSize.
    -  
    - */ -#if defined(ARM_MATH_MVEI) -void arm_q15_to_q7( - const q15_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - - uint32_t blkCnt; /* loop counters */ - q15x8x2_t tmp; - q15_t const *pSrcVec; - q7x16_t vecDst; - - - pSrcVec = (q15_t const *) pSrc; - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - /* C = (q7_t) A >> 8 */ - /* convert from q15 to q7 and then store the results in the destination buffer */ - tmp = vld2q(pSrcVec); - pSrcVec += 16; - vecDst = vqshrnbq_n_s16(vecDst, tmp.val[0], 8); - vecDst = vqshrntq_n_s16(vecDst, tmp.val[1], 8); - vst1q(pDst, vecDst); - pDst += 16; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - blkCnt = blockSize & 0xF; - while (blkCnt > 0U) - { - /* C = (q7_t) A >> 8 */ - - /* Convert from q15 to q7 and store result in destination buffer */ - *pDst++ = (q7_t) (*pSrcVec++ >> 8); - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -void arm_q15_to_q7( - const q15_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const q15_t *pIn = pSrc; /* Source pointer */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t in1, in2; - q31_t out1, out2; -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (q7_t) A >> 8 */ - - /* Convert from q15 to q7 and store result in destination buffer */ -#if defined (ARM_MATH_DSP) - - in1 = read_q15x2_ia ((q15_t **) &pIn); - in2 = read_q15x2_ia ((q15_t **) &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 */ - write_q7x4_ia (&pDst, out1); - -#else - - *pDst++ = (q7_t) (*pIn++ >> 8); - *pDst++ = (q7_t) (*pIn++ >> 8); - *pDst++ = (q7_t) (*pIn++ >> 8); - *pDst++ = (q7_t) (*pIn++ >> 8); - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (q7_t) A >> 8 */ - - /* Convert from q15 to q7 and store result in destination buffer */ - *pDst++ = (q7_t) (*pIn++ >> 8); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of q15_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_float.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_float.c deleted file mode 100644 index 72433db..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_float.c +++ /dev/null @@ -1,202 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_q31_to_float.c - * Description: Converts the elements of the Q31 vector to floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (float32_t) pSrc[n] / 2147483648;   0 <= n < blockSize.
    -  
    - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_q31_to_float( - const q31_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q31x4_t vecDst; - q31_t const *pSrcVec; - - pSrcVec = (q31_t const *) pSrc; - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* C = (float32_t) A / 2147483648 */ - /* convert from q31 to float and then store the results in the destination buffer */ - vecDst = vld1q(pSrcVec); - pSrcVec += 4; - vstrwq(pDst, vcvtq_n_f32_s32(vecDst, 31)); - pDst += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = blockSize & 3; - while (blkCnt > 0U) - { - /* C = (float32_t) A / 2147483648 */ - - /* Convert from q31 to float and store result in destination buffer */ - *pDst++ = ((float32_t) *pSrcVec++ / 2147483648.0f); - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -#if defined(ARM_MATH_NEON_EXPERIMENTAL) -void arm_q31_to_float( - const q31_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const q31_t *pIn = pSrc; /* Src pointer */ - uint32_t blkCnt; /* loop counter */ - - int32x4_t inV; - float32x4_t outV; - - blkCnt = blockSize >> 2U; - - /* 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 */ - inV = vld1q_s32(pIn); - pIn += 4; - - outV = vcvtq_n_f32_s32(inV,31); - - vst1q_f32(pDst, outV); - pDst += 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 & 3; - - - 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--; - } -} -#else -void arm_q31_to_float( - const q31_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const q31_t *pIn = pSrc; /* Src pointer */ - uint32_t blkCnt; /* loop counter */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (float32_t) A / 2147483648 */ - - /* Convert from q31 to float and store result in 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (float32_t) A / 2147483648 */ - - /* Convert from q31 to float and store result in destination buffer */ - *pDst++ = ((float32_t) *pIn++ / 2147483648.0f); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of q31_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_q15.c deleted file mode 100644 index 297b8e0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_q15.c +++ /dev/null @@ -1,181 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_q31_to_q15.c - * Description: Converts the elements of the Q31 vector to Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (q15_t) pSrc[n] >> 16;   0 <= n < blockSize.
    -  
    - */ -#if defined(ARM_MATH_MVEI) -void arm_q31_to_q15( - const q31_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q31x4x2_t tmp; - q15x8_t vecDst; - q31_t const *pSrcVec; - - - pSrcVec = (q31_t const *) pSrc; - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* C = (q15_t) A >> 16 */ - /* convert from q31 to q15 and then store the results in the destination buffer */ - tmp = vld2q(pSrcVec); - pSrcVec += 8; - vecDst = vshrnbq_n_s32(vecDst, tmp.val[0], 16); - vecDst = vshrntq_n_s32(vecDst, tmp.val[1], 16); - vst1q(pDst, vecDst); - pDst += 8; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * tail - */ - blkCnt = blockSize & 7; - while (blkCnt > 0U) - { - /* C = (q15_t) (A >> 16) */ - - /* Convert from q31 to q15 and store result in destination buffer */ - *pDst++ = (q15_t) (*pSrcVec++ >> 16); - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -void arm_q31_to_q15( - const q31_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const q31_t *pIn = pSrc; /* Source pointer */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t in1, in2, in3, in4; - q31_t out1, out2; -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (q15_t) (A >> 16) */ - - /* Convert from q31 to q15 and store result in destination buffer */ -#if defined (ARM_MATH_DSP) - - 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 */ - - write_q15x2_ia (&pDst, out1); - write_q15x2_ia (&pDst, out2); - -#else - - *pDst++ = (q15_t) (*pIn++ >> 16); - *pDst++ = (q15_t) (*pIn++ >> 16); - *pDst++ = (q15_t) (*pIn++ >> 16); - *pDst++ = (q15_t) (*pIn++ >> 16); - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (q15_t) (A >> 16) */ - - /* Convert from q31 to q15 and store result in destination buffer */ - *pDst++ = (q15_t) (*pIn++ >> 16); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of q31_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_q7.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_q7.c deleted file mode 100644 index e0d881b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q31_to_q7.c +++ /dev/null @@ -1,169 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_q31_to_q7.c - * Description: Converts the elements of the Q31 vector to Q7 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (q7_t) pSrc[n] >> 24;   0 <= n < blockSize.
    -  
    - */ -#if defined(ARM_MATH_MVEI) -void arm_q31_to_q7( - const q31_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q31x4x4_t tmp; - q15x8_t evVec, oddVec; - q7x16_t vecDst; - q31_t const *pSrcVec; - - pSrcVec = (q31_t const *) pSrc; - blkCnt = blockSize >> 4; - while (blkCnt > 0U) - { - tmp = vld4q(pSrcVec); - pSrcVec += 16; - /* C = (q7_t) A >> 24 */ - /* convert from q31 to q7 and then store the results in the destination buffer */ - /* - * narrow and pack evens - */ - evVec = vshrnbq_n_s32(evVec, tmp.val[0], 16); - evVec = vshrntq_n_s32(evVec, tmp.val[2], 16); - /* - * narrow and pack odds - */ - oddVec = vshrnbq_n_s32(oddVec, tmp.val[1], 16); - oddVec = vshrntq_n_s32(oddVec, tmp.val[3], 16); - /* - * narrow & merge - */ - vecDst = vshrnbq_n_s16(vecDst, evVec, 8); - vecDst = vshrntq_n_s16(vecDst, oddVec, 8); - - vst1q(pDst, vecDst); - pDst += 16; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - /* - * tail - */ - blkCnt = blockSize & 0xF; - while (blkCnt > 0U) - { - /* C = (q7_t) (A >> 24) */ - - /* Convert from q31 to q7 and store result in destination buffer */ - *pDst++ = (q7_t) (*pSrcVec++ >> 24); - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -void arm_q31_to_q7( - const q31_t * pSrc, - q7_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const q31_t *pIn = pSrc; /* Source pointer */ - -#if defined (ARM_MATH_LOOPUNROLL) - - q7_t out1, out2, out3, out4; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (q7_t) (A >> 24) */ - - /* Convert from q31 to q7 and store result in destination buffer */ - - out1 = (q7_t) (*pIn++ >> 24); - out2 = (q7_t) (*pIn++ >> 24); - out3 = (q7_t) (*pIn++ >> 24); - out4 = (q7_t) (*pIn++ >> 24); - write_q7x4_ia (&pDst, __PACKq7(out1, out2, out3, out4)); - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (q7_t) (A >> 24) */ - - /* Convert from q31 to q7 and store result in destination buffer */ - *pDst++ = (q7_t) (*pIn++ >> 24); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of q31_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_float.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_float.c deleted file mode 100644 index a209c70..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_float.c +++ /dev/null @@ -1,218 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_q7_to_float.c - * Description: Converts the elements of the Q7 vector to floating-point vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (float32_t) pSrc[n] / 128;   0 <= n < blockSize.
    -  
    - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_q7_to_float( - const q7_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* loop counters */ - q7x16_t vecDst; - q7_t const *pSrcVec; - - pSrcVec = (q7_t const *) pSrc; - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - /* C = (float32_t) A / 32768 */ - /* convert from q7 to float and then store the results in the destination buffer */ - vecDst = vldrbq_s32(pSrcVec); - pSrcVec += 4; - vstrwq(pDst, vcvtq_n_f32_s32(vecDst, 7)); - pDst += 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - blkCnt = blockSize & 3; - while (blkCnt > 0U) - { - /* C = (float32_t) A / 128 */ - - /* Convert from q7 to float and store result in destination buffer */ - *pDst++ = ((float32_t) * pSrcVec++ / 128.0f); - - /* Decrement loop counter */ - blkCnt--; - } -} -#else -#if defined(ARM_MATH_NEON) -void arm_q7_to_float( - const q7_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - const q7_t *pIn = pSrc; /* Src pointer */ - uint32_t blkCnt; /* loop counter */ - - int8x16_t inV; - int16x8_t inVLO, inVHI; - int32x4_t inVLL, inVLH, inVHL, inVHH; - float32x4_t outV; - - blkCnt = blockSize >> 4U; - - /* Compute 16 outputs at a time. - ** a second loop below computes the remaining 1 to 15 samples. */ - while (blkCnt > 0U) - { - /* C = (float32_t) A / 128 */ - /* Convert from q7 to float and then store the results in the destination buffer */ - inV = vld1q_s8(pIn); - pIn += 16; - - inVLO = vmovl_s8(vget_low_s8(inV)); - inVHI = vmovl_s8(vget_high_s8(inV)); - - inVLL = vmovl_s16(vget_low_s16(inVLO)); - inVLH = vmovl_s16(vget_high_s16(inVLO)); - inVHL = vmovl_s16(vget_low_s16(inVHI)); - inVHH = vmovl_s16(vget_high_s16(inVHI)); - - outV = vcvtq_n_f32_s32(inVLL,7); - vst1q_f32(pDst, outV); - pDst += 4; - - outV = vcvtq_n_f32_s32(inVLH,7); - vst1q_f32(pDst, outV); - pDst += 4; - - outV = vcvtq_n_f32_s32(inVHL,7); - vst1q_f32(pDst, outV); - pDst += 4; - - outV = vcvtq_n_f32_s32(inVHH,7); - vst1q_f32(pDst, outV); - pDst += 4; - - /* Decrement the loop counter */ - blkCnt--; - } - - /* If the blockSize is not a multiple of 16, compute any remaining output samples here. - ** No loop unrolling is used. */ - blkCnt = blockSize & 0xF; - - 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--; - } -} -#else -void arm_q7_to_float( - const q7_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const q7_t *pIn = pSrc; /* Source pointer */ - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (float32_t) A / 128 */ - - /* Convert from q7 to float and store result in 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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (float32_t) A / 128 */ - - /* Convert from q7 to float and store result in destination buffer */ - *pDst++ = ((float32_t) * pIn++ / 128.0f); - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* #if defined(ARM_MATH_NEON) */ -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of q7_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_q15.c deleted file mode 100644 index 4138492..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_q15.c +++ /dev/null @@ -1,188 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_q7_to_q15.c - * Description: Converts the elements of the Q7 vector to Q15 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (q15_t) pSrc[n] << 8;   0 <= n < blockSize.
    -  
    - */ - -#if defined(ARM_MATH_MVEI) -void arm_q7_to_q15( - const q7_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - - uint32_t blkCnt; /* loop counters */ - q15x8_t vecDst; - q7_t const *pSrcVec; - - - pSrcVec = (q7_t const *) pSrc; - blkCnt = blockSize >> 3; - while (blkCnt > 0U) - { - /* C = (q15_t) A << 8 */ - /* convert from q7 to q15 and then store the results in the destination buffer */ - /* load q7 + 32-bit widening */ - vecDst = vldrbq_s16(pSrcVec); - pSrcVec += 8; - vecDst = vecDst << 8; - vstrhq(pDst, vecDst); - pDst += 8; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - blkCnt = blockSize & 7; - while (blkCnt > 0U) - { - /* C = (q15_t) A << 8 */ - - /* Convert from q7 to q15 and store result in destination buffer */ - *pDst++ = (q15_t) * pSrcVec++ << 8; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#else -void arm_q7_to_q15( - const q7_t * pSrc, - q15_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const q7_t *pIn = pSrc; /* Source pointer */ - -#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) - q31_t in; - q31_t in1, in2; - q31_t out1, out2; -#endif - -#if defined (ARM_MATH_LOOPUNROLL) - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (q15_t) A << 8 */ - - /* Convert from q7 to q15 and store result in destination buffer */ -#if defined (ARM_MATH_DSP) - - in = read_q7x4_ia ((q7_t **) &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 - - write_q15x2_ia (&pDst, out1); - write_q15x2_ia (&pDst, out2); - -#else - - *pDst++ = (q15_t) *pIn++ << 8; - *pDst++ = (q15_t) *pIn++ << 8; - *pDst++ = (q15_t) *pIn++ << 8; - *pDst++ = (q15_t) *pIn++ << 8; - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* Decrement loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (q15_t) A << 8 */ - - /* Convert from q7 to q15 and store result in destination buffer */ - *pDst++ = (q15_t) * pIn++ << 8; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of q7_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_q31.c deleted file mode 100644 index c7166ca..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_q7_to_q31.c +++ /dev/null @@ -1,164 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_q7_to_q31.c - * Description: Converts the elements of the Q7 vector to Q31 vector - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 number of samples in each vector - @return none - - @par Details - The equation used for the conversion process is: -
    -      pDst[n] = (q31_t) pSrc[n] << 24;   0 <= n < blockSize.
    -  
    - */ -#if defined(ARM_MATH_MVEI) -void arm_q7_to_q31( - const q7_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; - q31x4_t vecDst; - - blkCnt = blockSize >> 2; - while (blkCnt > 0U) - { - - /* C = (q31_t)A << 16 */ - /* convert from q15 to q31 and then store the results in the destination buffer */ - /* load q15 + 32-bit widening */ - vecDst = vldrbq_s32((q7_t const *) pSrc); - vecDst = vshlq_n(vecDst, 24); - vstrwq_s32(pDst, vecDst); - - /* - * Decrement the blockSize loop counter - * Advance vector source and destination pointers - */ - pDst += 4; - pSrc += 4; - blkCnt --; - } - - blkCnt = blockSize & 3; - while (blkCnt > 0U) - { - /* C = (q31_t) A << 24 */ - - /* Convert from q7 to q31 and store result in destination buffer */ - *pDst++ = (q31_t) *pSrc++ << 24; - - /* Decrement loop counter */ - blkCnt--; - } -} - -#else -void arm_q7_to_q31( - const q7_t * pSrc, - q31_t * pDst, - uint32_t blockSize) -{ - uint32_t blkCnt; /* Loop counter */ - const q7_t *pIn = pSrc; /* Source pointer */ - -#if defined (ARM_MATH_LOOPUNROLL) - - q31_t in; - - /* Loop unrolling: Compute 4 outputs at a time */ - blkCnt = blockSize >> 2U; - - while (blkCnt > 0U) - { - /* C = (q31_t) A << 24 */ - - /* Convert from q7 to q31 and store result in destination buffer */ - in = read_q7x4_ia ((q7_t **) &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 loop counter */ - blkCnt--; - } - - /* Loop unrolling: Compute remaining outputs */ - blkCnt = blockSize % 0x4U; - -#else - - /* Initialize blkCnt with number of samples */ - blkCnt = blockSize; - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - - while (blkCnt > 0U) - { - /* C = (q31_t) A << 24 */ - - /* Convert from q7 to q31 and store result in destination buffer */ - *pDst++ = (q31_t) * pIn++ << 24; - - /* Decrement loop counter */ - blkCnt--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @} end of q7_to_x group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_quick_sort_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_quick_sort_f32.c deleted file mode 100644 index f9bf12b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_quick_sort_f32.c +++ /dev/null @@ -1,182 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_quick_sort_f32.c - * Description: Floating point quick sort - * - * $Date: 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_sorting.h" - -static uint32_t arm_quick_sort_partition_f32(float32_t *pSrc, int32_t first, int32_t last, uint8_t dir) -{ - /* This function will be called */ - int32_t i, j, pivot_index; - float32_t pivot; - float32_t temp; - - /* The first element is the pivot */ - pivot_index = first; - pivot = pSrc[pivot_index]; - - /* Initialize indices for do-while loops */ - i = first - 1; - j = last + 1; - - while(i < j) - { - /* The loop will stop as soon as the indices i and j cross each other. - * - * This event will happen surely since the values of the indices are incremented and - * decrement in the do-while loops that are executed at least once. - * It is impossible to loop forever inside the do-while loops since the pivot is - * always an element of the array and the conditions cannot be always true (at least - * the i-th or the j-th element will be equal to the pivot-th element). - * For example, in the extreme case of an ordered array the do-while loop related to i will stop - * at the first iteration (because pSrc[i]=pSrc[pivot] already), and the loop related to j - * will stop after (last-first) iterations (when j=pivot=i=first). j is returned and - * j+1 is going to be used as pivot by other calls of the function, until j=pivot=last. */ - - /* Move indices to the right and to the left */ - if(dir) - { - /* Compare left elements with pivot */ - do - { - i++; - } while (pSrc[i] < pivot && i pivot); - } - else - { - /* Compare left elements with pivot */ - do - { - i++; - } while (pSrc[i] > pivot && i Swap */ - temp=pSrc[i]; - pSrc[i]=pSrc[j]; - pSrc[j]=temp; - } - } - - return j; -} - -static void arm_quick_sort_core_f32(float32_t *pSrc, int32_t first, int32_t last, uint8_t dir) -{ - /* If the array [first ... last] has more than one element */ - if(firstdir); - /* The previous function could be called recursively a maximum - * of (blockSize-1) times, generating a stack consumption of 4*(blockSize-1) bytes. */ -} - -/** - @} end of Sorting group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_selection_sort_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_selection_sort_f32.c deleted file mode 100644 index 76d256d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_selection_sort_f32.c +++ /dev/null @@ -1,108 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_selection_sort_f32.c - * Description: Floating point selection sort - * - * $Date: 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_sorting.h" - -/** - @ingroup groupSupport - */ - -/** - @addtogroup Sorting - @{ - */ - -/** - * @private - * @param[in] S points to an instance of the sorting 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. - * - * @par Algorithm - * The Selection sort algorithm is a comparison algorithm that - * divides the input array into a sorted and an unsorted sublist - * (initially the sorted sublist is empty and the unsorted sublist - * is the input array), looks for the smallest (or biggest) - * element in the unsorted sublist, swapping it with the leftmost - * one, and moving the sublists boundary one element to the right. - * - * @par It's an in-place algorithm. In order to obtain an out-of-place - * function, a memcpy of the source vector is performed. - */ - -void arm_selection_sort_f32( - const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize) -{ - uint32_t i, j, k; - uint8_t dir = S->dir; - float32_t temp; - - float32_t * pA; - - if(pSrc != pDst) // out-of-place - { - memcpy(pDst, pSrc, blockSize*sizeof(float32_t) ); - pA = pDst; - } - else - pA = pSrc; - - /* Move the boundary one element to the right */ - for (i=0; ialg) - { - case ARM_SORT_BITONIC: - arm_bitonic_sort_f32(S, pSrc, pDst, blockSize); - break; - - case ARM_SORT_BUBBLE: - arm_bubble_sort_f32(S, pSrc, pDst, blockSize); - break; - - case ARM_SORT_HEAP: - arm_heap_sort_f32(S, pSrc, pDst, blockSize); - break; - - case ARM_SORT_INSERTION: - arm_insertion_sort_f32(S, pSrc, pDst, blockSize); - break; - - case ARM_SORT_QUICK: - arm_quick_sort_f32(S, pSrc, pDst, blockSize); - break; - - case ARM_SORT_SELECTION: - arm_selection_sort_f32(S, pSrc, pDst, blockSize); - break; - } -} - -/** - @} end of Sorting group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_sort_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_sort_init_f32.c deleted file mode 100644 index 264b5c3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_sort_init_f32.c +++ /dev/null @@ -1,55 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_sort_init_f32.c - * Description: Floating point sort initialization function - * - * $Date: 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_sorting.h" - -/** - @ingroup groupSupport - */ - -/** - @addtogroup Sorting - @{ - */ - - - /** - * @param[in,out] S points to an instance of the sorting structure. - * @param[in] alg Selected algorithm. - * @param[in] dir Sorting order. - */ -void arm_sort_init_f32(arm_sort_instance_f32 * S, arm_sort_alg alg, arm_sort_dir dir) -{ - S->alg = alg; - S->dir = dir; -} - -/** - @} end of Sorting group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_spline_interp_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_spline_interp_f32.c deleted file mode 100644 index 604aecd..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_spline_interp_f32.c +++ /dev/null @@ -1,283 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_spline_interp_f32.c - * Description: Floating-point cubic spline interpolation - * - * $Date: 13 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupSupport - */ - -/** - @defgroup SplineInterpolate Cubic Spline Interpolation - - Spline interpolation is a method of interpolation where the interpolant - is a piecewise-defined polynomial called "spline". - - @par Introduction - - Given a function f defined on the interval [a,b], a set of n nodes x(i) - where a=x(1) - S1(x) x(1) < x < x(2) - S(x) = ... - Sn-1(x) x(n-1) < x < x(n) - - - where - -
    -  Si(x) = a_i+b_i(x-xi)+c_i(x-xi)^2+d_i(x-xi)^3    i=1, ..., n-1
    -  
    - - @par Algorithm - - Having defined h(i) = x(i+1) - x(i) - -
    -  h(i-1)c(i-1)+2[h(i-1)+h(i)]c(i)+h(i)c(i+1) = 3/h(i)*[a(i+1)-a(i)]-3/h(i-1)*[a(i)-a(i-1)]    i=2, ..., n-1
    -  
    - - It is possible to write the previous conditions in matrix form (Ax=B). - In order to solve the system two boundary conidtions are needed. - - Natural spline: S1''(x1)=2*c(1)=0 ; Sn''(xn)=2*c(n)=0 - In matrix form: - -
    -  |  1        0         0  ...    0         0           0     ||  c(1)  | |                        0                        |
    -  | h(0) 2[h(0)+h(1)] h(1) ...    0         0           0     ||  c(2)  | |      3/h(2)*[a(3)-a(2)]-3/h(1)*[a(2)-a(1)]      |
    -  | ...      ...       ... ...   ...       ...         ...    ||  ...   |=|                       ...                       |
    -  |  0        0         0  ... h(n-2) 2[h(n-2)+h(n-1)] h(n-1) || c(n-1) | | 3/h(n-1)*[a(n)-a(n-1)]-3/h(n-2)*[a(n-1)-a(n-2)] |
    -  |  0        0         0  ...    0         0           1     ||  c(n)  | |                        0                        |
    -  
    - - - Parabolic runout spline: S1''(x1)=2*c(1)=S2''(x2)=2*c(2) ; Sn-1''(xn-1)=2*c(n-1)=Sn''(xn)=2*c(n) - In matrix form: - -
    -  |  1       -1         0  ...    0         0           0     ||  c(1)  | |                        0                        |
    -  | h(0) 2[h(0)+h(1)] h(1) ...    0         0           0     ||  c(2)  | |      3/h(2)*[a(3)-a(2)]-3/h(1)*[a(2)-a(1)]      |
    -  | ...      ...       ... ...   ...       ...         ...    ||  ...   |=|                       ...                       |
    -  |  0        0         0  ... h(n-2) 2[h(n-2)+h(n-1)] h(n-1) || c(n-1) | | 3/h(n-1)*[a(n)-a(n-1)]-3/h(n-2)*[a(n-1)-a(n-2)] |
    -  |  0        0         0  ...    0        -1           1     ||  c(n)  | |                        0                        |
    -  
    - - A is a tridiagonal matrix (a band matrix of bandwidth 3) of size N=n+1. The factorization - algorithms (A=LU) can be simplified considerably because a large number of zeros appear - in regular patterns. The Crout method has been used: - 1) Solve LZ=B - -
    -  u(1,2) = A(1,2)/A(1,1)
    -  z(1)   = B(1)/l(11)
    -
    -  FOR i=2, ..., N-1
    -    l(i,i)   = A(i,i)-A(i,i-1)u(i-1,i)
    -    u(i,i+1) = a(i,i+1)/l(i,i)
    -    z(i)     = [B(i)-A(i,i-1)z(i-1)]/l(i,i)
    -
    -  l(N,N) = A(N,N)-A(N,N-1)u(N-1,N)
    -  z(N)   = [B(N)-A(N,N-1)z(N-1)]/l(N,N)
    -  
    - - 2) Solve UX=Z - -
    -  c(N)=z(N)
    -
    -  FOR i=N-1, ..., 1
    -    c(i)=z(i)-u(i,i+1)c(i+1)
    -  
    - - c(i) for i=1, ..., n-1 are needed to compute the n-1 polynomials. - b(i) and d(i) are computed as: - - b(i) = [y(i+1)-y(i)]/h(i)-h(i)*[c(i+1)+2*c(i)]/3 - - d(i) = [c(i+1)-c(i)]/[3*h(i)] - Moreover, a(i)=y(i). - - @par Behaviour outside the given intervals - - It is possible to compute the interpolated vector for x values outside the - input range (xqx(n)). The coefficients used to compute the y values for - xqx(n) the - coefficients used for the last interval. - - */ - -/** - @addtogroup SplineInterpolate - @{ - */ - -/** - * @brief Processing function for the floating-point cubic spline interpolation. - * @param[in] S points to an instance of the floating-point spline structure. - * @param[in] xq points to the x values ot the interpolated data points. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples of output data. - */ - -void arm_spline_f32( - arm_spline_instance_f32 * S, - const float32_t * xq, - float32_t * pDst, - uint32_t blockSize) -{ - const float32_t * x = S->x; - const float32_t * y = S->y; - int32_t n = S->n_x; - - /* Coefficients (a==y for i<=n-1) */ - float32_t * b = (S->coeffs); - float32_t * c = (S->coeffs)+(n-1); - float32_t * d = (S->coeffs)+(2*(n-1)); - - const float32_t * pXq = xq; - int32_t blkCnt = (int32_t)blockSize; - int32_t blkCnt2; - int32_t i; - float32_t x_sc; - -#ifdef ARM_MATH_NEON - float32x4_t xiv; - float32x4_t aiv; - float32x4_t biv; - float32x4_t civ; - float32x4_t div; - - float32x4_t xqv; - - float32x4_t temp; - float32x4_t diff; - float32x4_t yv; -#endif - - /* Create output for x(i) 4 ) - { - /* Load [xq(k) xq(k+1) xq(k+2) xq(k+3)] */ - xqv = vld1q_f32(pXq); - pXq+=4; - - /* Compute [xq(k)-x(i) xq(k+1)-x(i) xq(k+2)-x(i) xq(k+3)-x(i)] */ - diff = vsubq_f32(xqv, xiv); - temp = diff; - - /* y(i) = a(i) + ... */ - yv = aiv; - /* ... + b(i)*(x-x(i)) + ... */ - yv = vmlaq_f32(yv, biv, temp); - /* ... + c(i)*(x-x(i))^2 + ... */ - temp = vmulq_f32(temp, diff); - yv = vmlaq_f32(yv, civ, temp); - /* ... + d(i)*(x-x(i))^3 */ - temp = vmulq_f32(temp, diff); - yv = vmlaq_f32(yv, div, temp); - - /* Store [y(k) y(k+1) y(k+2) y(k+3)] */ - vst1q_f32(pDst, yv); - pDst+=4; - - blkCnt-=4; - } -#endif - while( *pXq <= x[i+1] && blkCnt > 0 ) - { - x_sc = *pXq++; - - *pDst = y[i]+b[i]*(x_sc-x[i])+c[i]*(x_sc-x[i])*(x_sc-x[i])+d[i]*(x_sc-x[i])*(x_sc-x[i])*(x_sc-x[i]); - - pDst++; - blkCnt--; - } - } - - /* Create output for remaining samples (x>=x(n)) */ -#ifdef ARM_MATH_NEON - /* Compute 4 outputs at a time */ - blkCnt2 = blkCnt >> 2; - - while(blkCnt2 > 0) - { - /* Load [xq(k) xq(k+1) xq(k+2) xq(k+3)] */ - xqv = vld1q_f32(pXq); - pXq+=4; - - /* Compute [xq(k)-x(i) xq(k+1)-x(i) xq(k+2)-x(i) xq(k+3)-x(i)] */ - diff = vsubq_f32(xqv, xiv); - temp = diff; - - /* y(i) = a(i) + ... */ - yv = aiv; - /* ... + b(i)*(x-x(i)) + ... */ - yv = vmlaq_f32(yv, biv, temp); - /* ... + c(i)*(x-x(i))^2 + ... */ - temp = vmulq_f32(temp, diff); - yv = vmlaq_f32(yv, civ, temp); - /* ... + d(i)*(x-x(i))^3 */ - temp = vmulq_f32(temp, diff); - yv = vmlaq_f32(yv, div, temp); - - /* Store [y(k) y(k+1) y(k+2) y(k+3)] */ - vst1q_f32(pDst, yv); - pDst+=4; - - blkCnt2--; - } - - /* Tail */ - blkCnt2 = blkCnt & 3; -#else - blkCnt2 = blkCnt; -#endif - - while(blkCnt2 > 0) - { - x_sc = *pXq++; - - *pDst = y[i-1]+b[i-1]*(x_sc-x[i-1])+c[i-1]*(x_sc-x[i-1])*(x_sc-x[i-1])+d[i-1]*(x_sc-x[i-1])*(x_sc-x[i-1])*(x_sc-x[i-1]); - - pDst++; - blkCnt2--; - } -} - -/** - @} end of SplineInterpolate group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_spline_interp_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_spline_interp_init_f32.c deleted file mode 100644 index a594d30..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_spline_interp_init_f32.c +++ /dev/null @@ -1,175 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_spline_interp_init_f32.c - * Description: Floating-point cubic spline initialization function - * - * $Date: 13 November 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/** - @ingroup groupSupport - */ - -/** - @addtogroup SplineInterpolate - @{ - - @par Initialization function - - The initialization function takes as input two arrays that the user has to allocate: - coeffs will contain the b, c, and d coefficients for the (n-1) intervals - (n is the number of known points), hence its size must be 3*(n-1); tempBuffer - is temporally used for internal computations and its size is n+n-1. - - @par - - The x input array must be strictly sorted in ascending order and it must - not contain twice the same value (x(i)x = x; - S->y = y; - S->n_x = n; - - /* == Solve LZ=B to obtain z(i) and u(i) == */ - - /* -- Row 1 -- */ - /* B(0) = 0, not computed */ - /* u(1,2) = a(1,2)/a(1,1) = a(1,2) */ - if(type == ARM_SPLINE_NATURAL) - u[0] = 0; /* a(1,2) = 0 */ - else if(type == ARM_SPLINE_PARABOLIC_RUNOUT) - u[0] = -1; /* a(1,2) = -1 */ - - z[0] = 0; /* z(1) = B(1)/a(1,1) = 0 always */ - - /* -- Rows 2 to N-1 (N=n+1) -- */ - hm1 = x[1] - x[0]; /* Initialize h(i-1) = h(1) = x(2)-x(1) */ - - for (i=1; i<(int32_t)n-1; i++) - { - /* Compute B(i) */ - hi = x[i+1]-x[i]; - Bi = 3*(y[i+1]-y[i])/hi - 3*(y[i]-y[i-1])/hm1; - - /* l(i) = a(i)-a(i,i-1)*u(i-1) = 2[h(i-1)+h(i)]-h(i-1)*u(i-1) */ - li = 2*(hi+hm1) - hm1*u[i-1]; - - /* u(i) = a(i,i+1)/l(i) = h(i)/l(i) */ - u[i] = hi/li; - - /* z(i) = [B(i)-h(i-1)*z(i-1)]/l(i) */ - z[i] = (Bi-hm1*z[i-1])/li; - - /* Update h(i-1) for next iteration */ - hm1 = hi; - } - - /* -- Row N -- */ - /* l(N) = a(N,N)-a(N,N-1)u(N-1) */ - /* z(N) = [-a(N,N-1)z(N-1)]/l(N) */ - if(type == ARM_SPLINE_NATURAL) - { - /* li = 1; a(N,N) = 1; a(N,N-1) = 0 */ - z[n-1] = 0; /* a(N,N-1) = 0 */ - } - else if(type == ARM_SPLINE_PARABOLIC_RUNOUT) - { - li = 1+u[n-2]; /* a(N,N) = 1; a(N,N-1) = -1 */ - z[n-1] = z[n-2]/li; /* a(N,N-1) = -1 */ - } - - /* == Solve UX = Z to obtain c(i) and */ - /* compute b(i) and d(i) from c(i) == */ - - cp1 = z[n-1]; /* Initialize c(i+1) = c(N) = z(N) */ - - for (i=n-2; i>=0; i--) - { - /* c(i) = z(i)-u(i+1)c(i+1) */ - c[i] = z[i]-u[i]*cp1; - - hi = x[i+1]-x[i]; - /* b(i) = [y(i+1)-y(i)]/h(i)-h(i)*[c(i+1)+2*c(i)]/3 */ - b[i] = (y[i+1]-y[i])/hi-hi*(cp1+2*c[i])/3; - - /* d(i) = [c(i+1)-c(i)]/[3*h(i)] */ - d[i] = (cp1-c[i])/(3*hi); - - /* Update c(i+1) for next iteration */ - cp1 = c[i]; - } - - /* == Finally, store the coefficients in the instance == */ - - S->coeffs = coeffs; -} - -/** - @} end of SplineInterpolate group - */ - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_weighted_sum_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_weighted_sum_f32.c deleted file mode 100644 index 3b26363..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/SupportFunctions/arm_weighted_sum_f32.c +++ /dev/null @@ -1,185 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_weighted_sum_f32.c - * Description: Weighted Sum - * - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include -#include - - -/** - * @addtogroup groupSupport - * @{ - */ - - -/** - * @brief Weighted sum - * - * - * @param[in] *in Array of input values. - * @param[in] *weigths Weights - * @param[in] blockSize Number of samples in the input array. - * @return Weighted sum - * - */ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" - -float32_t arm_weighted_sum_f32(const float32_t *in,const float32_t *weigths, uint32_t blockSize) -{ - float32_t accum1, accum2; - f32x4_t accum1V, accum2V; - f32x4_t inV, wV; - const float32_t *pIn, *pW; - uint32_t blkCnt; - - - pIn = in; - pW = weigths; - - - accum1V = vdupq_n_f32(0.0); - accum2V = vdupq_n_f32(0.0); - - blkCnt = blockSize >> 2; - while (blkCnt > 0) - { - inV = vld1q(pIn); - wV = vld1q(pW); - - pIn += 4; - pW += 4; - - accum1V = vfmaq(accum1V, inV, wV); - accum2V = vaddq(accum2V, wV); - blkCnt--; - } - - accum1 = vecAddAcrossF32Mve(accum1V); - accum2 = vecAddAcrossF32Mve(accum2V); - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - accum1 += *pIn++ * *pW; - accum2 += *pW++; - blkCnt--; - } - - - return (accum1 / accum2); -} - -#else -#if defined(ARM_MATH_NEON) - -#include "NEMath.h" -float32_t arm_weighted_sum_f32(const float32_t *in,const float32_t *weigths, uint32_t blockSize) -{ - - float32_t accum1, accum2; - float32x4_t accum1V, accum2V; - float32x2_t tempV; - - float32x4_t inV,wV; - - const float32_t *pIn, *pW; - uint32_t blkCnt; - - - pIn = in; - pW = weigths; - - accum1=0.0f; - accum2=0.0f; - - accum1V = vdupq_n_f32(0.0f); - accum2V = vdupq_n_f32(0.0f); - - blkCnt = blockSize >> 2; - while(blkCnt > 0) - { - inV = vld1q_f32(pIn); - wV = vld1q_f32(pW); - - pIn += 4; - pW += 4; - - accum1V = vmlaq_f32(accum1V,inV,wV); - accum2V = vaddq_f32(accum2V,wV); - blkCnt--; - } - - tempV = vpadd_f32(vget_low_f32(accum1V),vget_high_f32(accum1V)); - accum1 = vget_lane_f32(tempV, 0) + vget_lane_f32(tempV, 1); - - tempV = vpadd_f32(vget_low_f32(accum2V),vget_high_f32(accum2V)); - accum2 = vget_lane_f32(tempV, 0) + vget_lane_f32(tempV, 1); - - blkCnt = blockSize & 3; - while(blkCnt > 0) - { - accum1 += *pIn++ * *pW; - accum2 += *pW++; - blkCnt--; - } - - - return(accum1 / accum2); -} -#else -float32_t arm_weighted_sum_f32(const float32_t *in, const float32_t *weigths, uint32_t blockSize) -{ - - float32_t accum1, accum2; - const float32_t *pIn, *pW; - uint32_t blkCnt; - - - pIn = in; - pW = weigths; - - accum1=0.0f; - accum2=0.0f; - - blkCnt = blockSize; - while(blkCnt > 0) - { - accum1 += *pIn++ * *pW; - accum2 += *pW++; - blkCnt--; - } - - return(accum1 / accum2); -} -#endif -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - * @} end of groupSupport group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/CMakeLists.txt b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/CMakeLists.txt deleted file mode 100644 index 42f16cf..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/CMakeLists.txt +++ /dev/null @@ -1,144 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -project(CMSISDSPTransform) - -include(configLib) -include(configDsp) - -add_library(CMSISDSPTransform STATIC) -configLib(CMSISDSPTransform ${ROOT}) -configDsp(CMSISDSPTransform ${ROOT}) - -include(fft) -fft(CMSISDSPTransform) - -if (CONFIGTABLE AND ALLFFT) -target_compile_definitions(CMSISDSPTransform PUBLIC ARM_ALL_FFT_TABLES) -endif() - -target_sources(CMSISDSPTransform PRIVATE arm_bitreversal.c) -target_sources(CMSISDSPTransform PRIVATE arm_bitreversal2.c) - -if (NOT CONFIGTABLE OR ALLFFT OR CFFT_F32_16 OR CFFT_F32_32 OR CFFT_F32_64 OR CFFT_F32_128 OR CFFT_F32_256 OR CFFT_F32_512 - OR CFFT_F32_1024 OR CFFT_F32_2048 OR CFFT_F32_4096) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix2_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix8_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_init_f32.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR CFFT_F64_16 OR CFFT_F64_32 OR CFFT_F64_64 OR CFFT_F64_128 OR CFFT_F64_256 OR CFFT_F64_512 - OR CFFT_F64_1024 OR CFFT_F64_2048 OR CFFT_F64_4096) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_f64.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR CFFT_Q15_16 OR CFFT_Q15_32 OR CFFT_Q15_64 OR CFFT_Q15_128 OR CFFT_Q15_256 OR CFFT_Q15_512 - OR CFFT_Q15_1024 OR CFFT_Q15_2048 OR CFFT_Q15_4096) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix2_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_init_q15.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR CFFT_Q31_16 OR CFFT_Q31_32 OR CFFT_Q31_64 OR CFFT_Q31_128 OR CFFT_Q31_256 OR CFFT_Q31_512 - OR CFFT_Q31_1024 OR CFFT_Q31_2048 OR CFFT_Q31_4096) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix2_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_init_q31.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix2_init_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix2_init_q31.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR DCT4_F32_128 OR DCT4_F32_512 OR DCT4_F32_2048 OR DCT4_F32_8192) -target_sources(CMSISDSPTransform PRIVATE arm_dct4_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_dct4_init_f32.c) - -target_sources(CMSISDSPTransform PRIVATE arm_rfft_init_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_init_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_f32.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR DCT4_Q31_128 OR DCT4_Q31_512 OR DCT4_Q31_2048 OR DCT4_Q31_8192) -target_sources(CMSISDSPTransform PRIVATE arm_dct4_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_dct4_init_q31.c) - -target_sources(CMSISDSPTransform PRIVATE arm_rfft_init_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_init_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_init_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_q31.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR ALLFFT OR DCT4_Q15_128 OR DCT4_Q15_512 OR DCT4_Q15_2048 OR DCT4_Q15_8192) -target_sources(CMSISDSPTransform PRIVATE arm_dct4_init_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_dct4_q15.c) - -target_sources(CMSISDSPTransform PRIVATE arm_rfft_init_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_init_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_init_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_q15.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR RFFT_FAST_F32_32 OR RFFT_FAST_F32_64 OR RFFT_FAST_F32_128 - OR RFFT_FAST_F32_256 OR RFFT_FAST_F32_512 OR RFFT_FAST_F32_1024 OR RFFT_FAST_F32_2048 - OR RFFT_FAST_F32_4096 ) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_fast_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_fast_init_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_init_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix8_f32.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR RFFT_FAST_F64_32 OR RFFT_FAST_F64_64 OR RFFT_FAST_F64_128 - OR RFFT_FAST_F64_256 OR RFFT_FAST_F64_512 OR RFFT_FAST_F64_1024 OR RFFT_FAST_F64_2048 - OR RFFT_FAST_F64_4096 ) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_fast_f64.c) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_fast_init_f64.c) -endif() - - - -if (NOT CONFIGTABLE OR ALLFFT OR RFFT_F32_128 OR RFFT_F32_512 OR RFFT_F32_2048 OR RFFT_F32_8192) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_init_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_init_f32.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_f32.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR RFFT_Q15_32 OR RFFT_Q15_64 OR RFFT_Q15_128 OR RFFT_Q15_256 - OR RFFT_Q15_512 OR RFFT_Q15_1024 OR RFFT_Q15_2048 OR RFFT_Q15_4096 OR RFFT_Q15_8192) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_init_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_init_q15.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_q15.c) -endif() - -if (NOT CONFIGTABLE OR ALLFFT OR RFFT_Q31_32 OR RFFT_Q31_64 OR RFFT_Q31_128 OR RFFT_Q31_256 - OR RFFT_Q31_512 OR RFFT_Q31_1024 OR RFFT_Q31_2048 OR RFFT_Q31_4096 OR RFFT_Q31_8192) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_init_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_rfft_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_init_q31.c) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_q31.c) -endif() - -# For scipy or wrappers or benchmarks -if (WRAPPER) -target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix2_init_f32.c) -endif() - -### Includes -target_include_directories(CMSISDSPTransform PUBLIC "${DSP}/Include") - - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/TransformFunctions.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/TransformFunctions.c deleted file mode 100644 index dd54fc9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/TransformFunctions.c +++ /dev/null @@ -1,67 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: TransformFunctions.c - * Description: Combination of all transform function source files. - * - * $Date: 18. March 2019 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_bitreversal.c" -#include "arm_bitreversal2.c" -#include "arm_cfft_f32.c" -#include "arm_cfft_f64.c" -#include "arm_cfft_q15.c" -#include "arm_cfft_q31.c" -#include "arm_cfft_init_f32.c" -#include "arm_cfft_init_f64.c" -#include "arm_cfft_init_q15.c" -#include "arm_cfft_init_q31.c" -#include "arm_cfft_radix2_f32.c" -#include "arm_cfft_radix2_init_f32.c" -#include "arm_cfft_radix2_init_q15.c" -#include "arm_cfft_radix2_init_q31.c" -#include "arm_cfft_radix2_q15.c" -#include "arm_cfft_radix2_q31.c" -#include "arm_cfft_radix4_f32.c" -#include "arm_cfft_radix4_init_f32.c" -#include "arm_cfft_radix4_init_q15.c" -#include "arm_cfft_radix4_init_q31.c" -#include "arm_cfft_radix4_q15.c" -#include "arm_cfft_radix4_q31.c" -#include "arm_cfft_radix8_f32.c" -#include "arm_dct4_f32.c" -#include "arm_dct4_init_f32.c" -#include "arm_dct4_init_q15.c" -#include "arm_dct4_init_q31.c" -#include "arm_dct4_q15.c" -#include "arm_dct4_q31.c" -#include "arm_rfft_f32.c" -#include "arm_rfft_fast_f32.c" -#include "arm_rfft_fast_f64.c" -#include "arm_rfft_fast_init_f32.c" -#include "arm_rfft_fast_init_f64.c" -#include "arm_rfft_init_f32.c" -#include "arm_rfft_init_q15.c" -#include "arm_rfft_init_q31.c" -#include "arm_rfft_q15.c" -#include "arm_rfft_q31.c" diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal.c deleted file mode 100644 index c608129..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal.c +++ /dev/null @@ -1,229 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_bitreversal.c - * Description: Bitreversal functions - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -/** - @brief In-place floating-point bit reversal function. - @param[in,out] pSrc points to in-place floating-point data buffer - @param[in] fftSize length of 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_f32( - float32_t * pSrc, - uint16_t fftSize, - uint16_t bitRevFactor, - const 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 Q31 bit reversal function. - @param[in,out] pSrc points to in-place Q31 data buffer. - @param[in] fftLen length of 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, - const uint16_t * pBitRevTab) -{ - 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 = *pBitRevTab; - - /* Updating the bit reversal index depending on the fft length */ - pBitRevTab += bitRevFactor; - } -} - - - -/** - @brief In-place Q15 bit reversal function. - @param[in,out] pSrc16 points to in-place Q15 data buffer - @param[in] fftLen length of 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal2.S b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal2.S deleted file mode 100644 index c16091b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal2.S +++ /dev/null @@ -1,216 +0,0 @@ -;/* ---------------------------------------------------------------------- -; * Project: CMSIS DSP Library -; * Title: arm_bitreversal2.S -; * Description: arm_bitreversal_32 function done in assembly for maximum speed. -; * Called after doing an fft to reorder the output. -; * The function is loop unrolled by 2. arm_bitreversal_16 as well. -; * -; * $Date: 18. March 2019 -; * $Revision: V1.5.2 -; * -; * Target Processor: Cortex-M cores -; * -------------------------------------------------------------------- */ -;/* -; * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. -; * -; * SPDX-License-Identifier: Apache-2.0 -; * -; * Licensed under the Apache License, Version 2.0 (the License); you may -; * not use this file except in compliance with the License. -; * You may obtain a copy of the License at -; * -; * www.apache.org/licenses/LICENSE-2.0 -; * -; * Unless required by applicable law or agreed to in writing, software -; * distributed under the License is distributed on an AS IS BASIS, WITHOUT -; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -; * See the License for the specific language governing permissions and -; * limitations under the License. -; */ - -#if defined ( __CC_ARM ) /* Keil */ - #define CODESECT AREA ||.text||, CODE, READONLY, ALIGN=2 - #define LABEL -#elif defined ( __IASMARM__ ) /* IAR */ - #define CODESECT SECTION `.text`:CODE - #define PROC - #define LABEL - #define ENDP - #define EXPORT PUBLIC -#elif defined ( __CSMC__ ) /* Cosmic */ - #define CODESECT switch .text - #define THUMB - #define EXPORT xdef - #define PROC : - #define LABEL : - #define ENDP - #define arm_bitreversal_32 _arm_bitreversal_32 -#elif defined ( __TI_ARM__ ) /* TI ARM */ - #define THUMB .thumb - #define CODESECT .text - #define EXPORT .global - #define PROC : .asmfunc - #define LABEL : - #define ENDP .endasmfunc - #define END -#elif defined ( __GNUC__ ) /* GCC */ - #define THUMB .thumb - #define CODESECT .section .text - #define EXPORT .global - #define PROC : - #define LABEL : - #define ENDP - #define END - - .syntax unified -#endif - - CODESECT - THUMB - -;/** -; @brief In-place bit reversal function. -; @param[in,out] pSrc points to the in-place buffer of unknown 32-bit data type -; @param[in] bitRevLen bit reversal table length -; @param[in] pBitRevTab points to bit reversal table -; @return none -; */ - EXPORT arm_bitreversal_32 - EXPORT arm_bitreversal_16 - -#if defined ( __CC_ARM ) /* Keil */ -#elif defined ( __IASMARM__ ) /* IAR */ -#elif defined ( __CSMC__ ) /* Cosmic */ -#elif defined ( __TI_ARM__ ) /* TI ARM */ -#elif defined ( __GNUC__ ) /* GCC */ - .type arm_bitreversal_16, %function - .type arm_bitreversal_32, %function -#endif - -#if defined (ARM_MATH_CM0_FAMILY) - -arm_bitreversal_32 PROC - ADDS r3,r1,#1 - PUSH {r4-r6} - ADDS r1,r2,#0 - LSRS r3,r3,#1 -arm_bitreversal_32_0 LABEL - LDRH r2,[r1,#2] - LDRH r6,[r1,#0] - ADD r2,r0,r2 - ADD r6,r0,r6 - LDR r5,[r2,#0] - LDR r4,[r6,#0] - STR r5,[r6,#0] - STR r4,[r2,#0] - LDR r5,[r2,#4] - LDR r4,[r6,#4] - STR r5,[r6,#4] - STR r4,[r2,#4] - ADDS r1,r1,#4 - SUBS r3,r3,#1 - BNE arm_bitreversal_32_0 - POP {r4-r6} - BX lr - ENDP - -arm_bitreversal_16 PROC - ADDS r3,r1,#1 - PUSH {r4-r6} - ADDS r1,r2,#0 - LSRS r3,r3,#1 -arm_bitreversal_16_0 LABEL - LDRH r2,[r1,#2] - LDRH r6,[r1,#0] - LSRS r2,r2,#1 - LSRS r6,r6,#1 - ADD r2,r0,r2 - ADD r6,r0,r6 - LDR r5,[r2,#0] - LDR r4,[r6,#0] - STR r5,[r6,#0] - STR r4,[r2,#0] - ADDS r1,r1,#4 - SUBS r3,r3,#1 - BNE arm_bitreversal_16_0 - POP {r4-r6} - BX lr - ENDP - -#else - -arm_bitreversal_32 PROC - ADDS r3,r1,#1 - CMP r3,#1 - IT LS - BXLS lr - PUSH {r4-r9} - ADDS r1,r2,#2 - LSRS r3,r3,#2 -arm_bitreversal_32_0 LABEL ;/* loop unrolled by 2 */ - LDRH r8,[r1,#4] - LDRH r9,[r1,#2] - LDRH r2,[r1,#0] - LDRH r12,[r1,#-2] - ADD r8,r0,r8 - ADD r9,r0,r9 - ADD r2,r0,r2 - ADD r12,r0,r12 - LDR r7,[r9,#0] - LDR r6,[r8,#0] - LDR r5,[r2,#0] - LDR r4,[r12,#0] - STR r6,[r9,#0] - STR r7,[r8,#0] - STR r5,[r12,#0] - STR r4,[r2,#0] - LDR r7,[r9,#4] - LDR r6,[r8,#4] - LDR r5,[r2,#4] - LDR r4,[r12,#4] - STR r6,[r9,#4] - STR r7,[r8,#4] - STR r5,[r12,#4] - STR r4,[r2,#4] - ADDS r1,r1,#8 - SUBS r3,r3,#1 - BNE arm_bitreversal_32_0 - POP {r4-r9} - BX lr - ENDP - -arm_bitreversal_16 PROC - ADDS r3,r1,#1 - CMP r3,#1 - IT LS - BXLS lr - PUSH {r4-r9} - ADDS r1,r2,#2 - LSRS r3,r3,#2 -arm_bitreversal_16_0 LABEL ;/* loop unrolled by 2 */ - LDRH r8,[r1,#4] - LDRH r9,[r1,#2] - LDRH r2,[r1,#0] - LDRH r12,[r1,#-2] - ADD r8,r0,r8,LSR #1 - ADD r9,r0,r9,LSR #1 - ADD r2,r0,r2,LSR #1 - ADD r12,r0,r12,LSR #1 - LDR r7,[r9,#0] - LDR r6,[r8,#0] - LDR r5,[r2,#0] - LDR r4,[r12,#0] - STR r6,[r9,#0] - STR r7,[r8,#0] - STR r5,[r12,#0] - STR r4,[r2,#0] - ADDS r1,r1,#8 - SUBS r3,r3,#1 - BNE arm_bitreversal_16_0 - POP {r4-r9} - BX lr - ENDP - -#endif - - END diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal2.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal2.c deleted file mode 100644 index 802129d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_bitreversal2.c +++ /dev/null @@ -1,134 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_bitreversal2.c - * Description: Bitreversal functions - * - * $Date: 18. March 2019 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - - -/** - @brief In-place 64 bit reversal function. - @param[in,out] pSrc points to in-place buffer of unknown 64-bit data type - @param[in] bitRevLen bit reversal table length - @param[in] pBitRevTab points to bit reversal table - @return none -*/ - -void arm_bitreversal_64( - uint64_t *pSrc, - const uint16_t bitRevLen, - const uint16_t *pBitRevTab) -{ - uint64_t a, b, i, tmp; - - for (i = 0; i < bitRevLen; ) - { - a = pBitRevTab[i ] >> 2; - b = pBitRevTab[i + 1] >> 2; - - //real - tmp = pSrc[a]; - pSrc[a] = pSrc[b]; - pSrc[b] = tmp; - - //complex - tmp = pSrc[a+1]; - pSrc[a+1] = pSrc[b+1]; - pSrc[b+1] = tmp; - - i += 2; - } -} - -/** - @brief In-place 32 bit reversal function. - @param[in,out] pSrc points to in-place buffer of unknown 32-bit data type - @param[in] bitRevLen bit reversal table length - @param[in] pBitRevTab points to bit reversal table - @return none -*/ - -void arm_bitreversal_32( - uint32_t *pSrc, - const uint16_t bitRevLen, - const uint16_t *pBitRevTab) -{ - uint32_t a, b, i, tmp; - - for (i = 0; i < bitRevLen; ) - { - a = pBitRevTab[i ] >> 2; - b = pBitRevTab[i + 1] >> 2; - - //real - tmp = pSrc[a]; - pSrc[a] = pSrc[b]; - pSrc[b] = tmp; - - //complex - tmp = pSrc[a+1]; - pSrc[a+1] = pSrc[b+1]; - pSrc[b+1] = tmp; - - i += 2; - } -} - - -/** - @brief In-place 16 bit reversal function. - @param[in,out] pSrc points to in-place buffer of unknown 16-bit data type - @param[in] bitRevLen bit reversal table length - @param[in] pBitRevTab points to bit reversal table - @return none -*/ - -void arm_bitreversal_16( - uint16_t *pSrc, - const uint16_t bitRevLen, - const uint16_t *pBitRevTab) -{ - uint16_t a, b, i, tmp; - - for (i = 0; i < bitRevLen; ) - { - a = pBitRevTab[i ] >> 2; - b = pBitRevTab[i + 1] >> 2; - - //real - tmp = pSrc[a]; - pSrc[a] = pSrc[b]; - pSrc[b] = tmp; - - //complex - tmp = pSrc[a+1]; - pSrc[a+1] = pSrc[b+1]; - pSrc[b+1] = tmp; - - i += 2; - } -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_f32.c deleted file mode 100644 index 7dc0738..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_f32.c +++ /dev/null @@ -1,1222 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_f32.c - * Description: Combined Radix Decimation in Frequency CFFT Floating point processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_helium_utils.h" -#include "arm_vec_fft.h" -#include "arm_mve_tables.h" - - -static float32_t arm_inverse_fft_length_f32(uint16_t fftLen) -{ - float32_t retValue=1.0; - - switch (fftLen) - { - - case 4096U: - retValue = 0.000244140625; - break; - - case 2048U: - retValue = 0.00048828125; - break; - - case 1024U: - retValue = 0.0009765625f; - break; - - case 512U: - retValue = 0.001953125; - break; - - case 256U: - retValue = 0.00390625f; - break; - - case 128U: - retValue = 0.0078125; - break; - - case 64U: - retValue = 0.015625f; - break; - - case 32U: - retValue = 0.03125; - break; - - case 16U: - retValue = 0.0625f; - break; - - - default: - break; - } - return(retValue); -} - - -static void arm_bitreversal_f32_inpl_mve( - uint32_t *pSrc, - const uint16_t bitRevLen, - const uint16_t *pBitRevTab) - -{ - uint64_t *src = (uint64_t *) pSrc; - uint32_t blkCnt; /* loop counters */ - uint32x4_t bitRevTabOff; - uint32x4_t one = vdupq_n_u32(1); - - blkCnt = (bitRevLen / 2) / 2; - while (blkCnt > 0U) { - bitRevTabOff = vldrhq_u32(pBitRevTab); - pBitRevTab += 4; - - uint64x2_t bitRevOff1 = vmullbq_int_u32(bitRevTabOff, one); - uint64x2_t bitRevOff2 = vmulltq_int_u32(bitRevTabOff, one); - - uint64x2_t in1 = vldrdq_gather_offset_u64(src, bitRevOff1); - uint64x2_t in2 = vldrdq_gather_offset_u64(src, bitRevOff2); - - vstrdq_scatter_offset_u64(src, bitRevOff1, in2); - vstrdq_scatter_offset_u64(src, bitRevOff2, in1); - - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } -} - - -static void _arm_radix4_butterfly_f32_mve(const arm_cfft_instance_f32 * S,float32_t * pSrc, uint32_t fftLen) -{ - f32x4_t vecTmp0, vecTmp1; - f32x4_t vecSum0, vecDiff0, vecSum1, vecDiff1; - f32x4_t vecA, vecB, vecC, vecD; - uint32_t blkCnt; - uint32_t n1, n2; - uint32_t stage = 0; - int32_t iter = 1; - static const uint32_t strides[4] = { - (0 - 16) * sizeof(q31_t *), - (1 - 16) * sizeof(q31_t *), - (8 - 16) * sizeof(q31_t *), - (9 - 16) * sizeof(q31_t *) - }; - - n2 = fftLen; - n1 = n2; - n2 >>= 2u; - for (int k = fftLen / 4u; k > 1; k >>= 2) - { - for (int i = 0; i < iter; i++) - { - float32_t const *p_rearranged_twiddle_tab_stride1 = - &S->rearranged_twiddle_stride1[ - S->rearranged_twiddle_tab_stride1_arr[stage]]; - float32_t const *p_rearranged_twiddle_tab_stride2 = - &S->rearranged_twiddle_stride2[ - S->rearranged_twiddle_tab_stride2_arr[stage]]; - float32_t const *p_rearranged_twiddle_tab_stride3 = - &S->rearranged_twiddle_stride3[ - S->rearranged_twiddle_tab_stride3_arr[stage]]; - float32_t const *pW1, *pW2, *pW3; - float32_t *inA = pSrc + CMPLX_DIM * i * n1; - float32_t *inB = inA + n2 * CMPLX_DIM; - float32_t *inC = inB + n2 * CMPLX_DIM; - float32_t *inD = inC + n2 * CMPLX_DIM; - f32x4_t vecW; - - - pW1 = p_rearranged_twiddle_tab_stride1; - pW2 = p_rearranged_twiddle_tab_stride2; - pW3 = p_rearranged_twiddle_tab_stride3; - - blkCnt = n2 / 2; - /* - * load 2 f32 complex pair - */ - vecA = vldrwq_f32(inA); - vecC = vldrwq_f32(inC); - while (blkCnt > 0U) - { - vecB = vldrwq_f32(inB); - vecD = vldrwq_f32(inD); - - vecSum0 = vecA + vecC; /* vecSum0 = vaddq(vecA, vecC) */ - vecDiff0 = vecA - vecC; /* vecSum0 = vsubq(vecA, vecC) */ - - vecSum1 = vecB + vecD; - vecDiff1 = vecB - vecD; - /* - * [ 1 1 1 1 ] * [ A B C D ]' .* 1 - */ - vecTmp0 = vecSum0 + vecSum1; - vst1q(inA, vecTmp0); - inA += 4; - - /* - * [ 1 -1 1 -1 ] * [ A B C D ]' - */ - vecTmp0 = vecSum0 - vecSum1; - /* - * [ 1 -1 1 -1 ] * [ A B C D ]'.* W2 - */ - vecW = vld1q(pW2); - pW2 += 4; - vecTmp1 = MVE_CMPLX_MULT_FLT_Conj_AxB(vecW, vecTmp0); - vst1q(inB, vecTmp1); - inB += 4; - - /* - * [ 1 -i -1 +i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_SUB_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 -i -1 +i ] * [ A B C D ]'.* W1 - */ - vecW = vld1q(pW1); - pW1 +=4; - vecTmp1 = MVE_CMPLX_MULT_FLT_Conj_AxB(vecW, vecTmp0); - vst1q(inC, vecTmp1); - inC += 4; - - /* - * [ 1 +i -1 -i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_ADD_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 +i -1 -i ] * [ A B C D ]'.* W3 - */ - vecW = vld1q(pW3); - pW3 += 4; - vecTmp1 = MVE_CMPLX_MULT_FLT_Conj_AxB(vecW, vecTmp0); - vst1q(inD, vecTmp1); - inD += 4; - - vecA = vldrwq_f32(inA); - vecC = vldrwq_f32(inC); - - blkCnt--; - } - } - n1 = n2; - n2 >>= 2u; - iter = iter << 2; - stage++; - } - - /* - * start of Last stage process - */ - uint32x4_t vecScGathAddr = *(uint32x4_t *) strides; - vecScGathAddr = vecScGathAddr + (uint32_t) pSrc; - - /* load scheduling */ - vecA = vldrwq_gather_base_wb_f32(&vecScGathAddr, 64); - vecC = vldrwq_gather_base_f32(vecScGathAddr, 16); - - blkCnt = (fftLen >> 3); - while (blkCnt > 0U) - { - vecSum0 = vecA + vecC; /* vecSum0 = vaddq(vecA, vecC) */ - vecDiff0 = vecA - vecC; /* vecSum0 = vsubq(vecA, vecC) */ - - vecB = vldrwq_gather_base_f32(vecScGathAddr, 8); - vecD = vldrwq_gather_base_f32(vecScGathAddr, 24); - - vecSum1 = vecB + vecD; - vecDiff1 = vecB - vecD; - - /* pre-load for next iteration */ - vecA = vldrwq_gather_base_wb_f32(&vecScGathAddr, 64); - vecC = vldrwq_gather_base_f32(vecScGathAddr, 16); - - vecTmp0 = vecSum0 + vecSum1; - vstrwq_scatter_base_f32(vecScGathAddr, -64, vecTmp0); - - vecTmp0 = vecSum0 - vecSum1; - vstrwq_scatter_base_f32(vecScGathAddr, -64 + 8, vecTmp0); - - vecTmp0 = MVE_CMPLX_SUB_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_f32(vecScGathAddr, -64 + 16, vecTmp0); - - vecTmp0 = MVE_CMPLX_ADD_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_f32(vecScGathAddr, -64 + 24, vecTmp0); - - blkCnt--; - } - - /* - * End of last stage process - */ -} - -static void arm_cfft_radix4by2_f32_mve(const arm_cfft_instance_f32 * S, float32_t *pSrc, uint32_t fftLen) -{ - float32_t const *pCoefVec; - float32_t const *pCoef = S->pTwiddle; - float32_t *pIn0, *pIn1; - uint32_t n2; - uint32_t blkCnt; - f32x4_t vecIn0, vecIn1, vecSum, vecDiff; - f32x4_t vecCmplxTmp, vecTw; - - - n2 = fftLen >> 1; - pIn0 = pSrc; - pIn1 = pSrc + fftLen; - pCoefVec = pCoef; - - blkCnt = n2 / 2; - while (blkCnt > 0U) - { - vecIn0 = *(f32x4_t *) pIn0; - vecIn1 = *(f32x4_t *) pIn1; - vecTw = vld1q(pCoefVec); - pCoefVec += 4; - - vecSum = vecIn0 + vecIn1; - vecDiff = vecIn0 - vecIn1; - - vecCmplxTmp = MVE_CMPLX_MULT_FLT_Conj_AxB(vecTw, vecDiff); - - vst1q(pIn0, vecSum); - pIn0 += 4; - vst1q(pIn1, vecCmplxTmp); - pIn1 += 4; - - blkCnt--; - } - - _arm_radix4_butterfly_f32_mve(S, pSrc, n2); - - _arm_radix4_butterfly_f32_mve(S, pSrc + fftLen, n2); - - pIn0 = pSrc; -} - -static void _arm_radix4_butterfly_inverse_f32_mve(const arm_cfft_instance_f32 * S,float32_t * pSrc, uint32_t fftLen, float32_t onebyfftLen) -{ - f32x4_t vecTmp0, vecTmp1; - f32x4_t vecSum0, vecDiff0, vecSum1, vecDiff1; - f32x4_t vecA, vecB, vecC, vecD; - f32x4_t vecW; - uint32_t blkCnt; - uint32_t n1, n2; - uint32_t stage = 0; - int32_t iter = 1; - static const uint32_t strides[4] = { - (0 - 16) * sizeof(q31_t *), - (1 - 16) * sizeof(q31_t *), - (8 - 16) * sizeof(q31_t *), - (9 - 16) * sizeof(q31_t *) - }; - - n2 = fftLen; - n1 = n2; - n2 >>= 2u; - for (int k = fftLen / 4; k > 1; k >>= 2) - { - for (int i = 0; i < iter; i++) - { - float32_t const *p_rearranged_twiddle_tab_stride1 = - &S->rearranged_twiddle_stride1[ - S->rearranged_twiddle_tab_stride1_arr[stage]]; - float32_t const *p_rearranged_twiddle_tab_stride2 = - &S->rearranged_twiddle_stride2[ - S->rearranged_twiddle_tab_stride2_arr[stage]]; - float32_t const *p_rearranged_twiddle_tab_stride3 = - &S->rearranged_twiddle_stride3[ - S->rearranged_twiddle_tab_stride3_arr[stage]]; - float32_t const *pW1, *pW2, *pW3; - float32_t *inA = pSrc + CMPLX_DIM * i * n1; - float32_t *inB = inA + n2 * CMPLX_DIM; - float32_t *inC = inB + n2 * CMPLX_DIM; - float32_t *inD = inC + n2 * CMPLX_DIM; - - pW1 = p_rearranged_twiddle_tab_stride1; - pW2 = p_rearranged_twiddle_tab_stride2; - pW3 = p_rearranged_twiddle_tab_stride3; - - blkCnt = n2 / 2; - /* - * load 2 f32 complex pair - */ - vecA = vldrwq_f32(inA); - vecC = vldrwq_f32(inC); - while (blkCnt > 0U) - { - vecB = vldrwq_f32(inB); - vecD = vldrwq_f32(inD); - - vecSum0 = vecA + vecC; /* vecSum0 = vaddq(vecA, vecC) */ - vecDiff0 = vecA - vecC; /* vecSum0 = vsubq(vecA, vecC) */ - - vecSum1 = vecB + vecD; - vecDiff1 = vecB - vecD; - /* - * [ 1 1 1 1 ] * [ A B C D ]' .* 1 - */ - vecTmp0 = vecSum0 + vecSum1; - vst1q(inA, vecTmp0); - inA += 4; - /* - * [ 1 -1 1 -1 ] * [ A B C D ]' - */ - vecTmp0 = vecSum0 - vecSum1; - /* - * [ 1 -1 1 -1 ] * [ A B C D ]'.* W1 - */ - vecW = vld1q(pW2); - pW2 += 4; - vecTmp1 = MVE_CMPLX_MULT_FLT_AxB(vecW, vecTmp0); - vst1q(inB, vecTmp1); - inB += 4; - - /* - * [ 1 -i -1 +i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_ADD_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 -i -1 +i ] * [ A B C D ]'.* W2 - */ - vecW = vld1q(pW1); - pW1 += 4; - vecTmp1 = MVE_CMPLX_MULT_FLT_AxB(vecW, vecTmp0); - vst1q(inC, vecTmp1); - inC += 4; - - /* - * [ 1 +i -1 -i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_SUB_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 +i -1 -i ] * [ A B C D ]'.* W3 - */ - vecW = vld1q(pW3); - pW3 += 4; - vecTmp1 = MVE_CMPLX_MULT_FLT_AxB(vecW, vecTmp0); - vst1q(inD, vecTmp1); - inD += 4; - - vecA = vldrwq_f32(inA); - vecC = vldrwq_f32(inC); - - blkCnt--; - } - } - n1 = n2; - n2 >>= 2u; - iter = iter << 2; - stage++; - } - - /* - * start of Last stage process - */ - uint32x4_t vecScGathAddr = *(uint32x4_t *) strides; - vecScGathAddr = vecScGathAddr + (uint32_t) pSrc; - - /* - * load scheduling - */ - vecA = vldrwq_gather_base_wb_f32(&vecScGathAddr, 64); - vecC = vldrwq_gather_base_f32(vecScGathAddr, 16); - - blkCnt = (fftLen >> 3); - while (blkCnt > 0U) - { - vecSum0 = vecA + vecC; /* vecSum0 = vaddq(vecA, vecC) */ - vecDiff0 = vecA - vecC; /* vecSum0 = vsubq(vecA, vecC) */ - - vecB = vldrwq_gather_base_f32(vecScGathAddr, 8); - vecD = vldrwq_gather_base_f32(vecScGathAddr, 24); - - vecSum1 = vecB + vecD; - vecDiff1 = vecB - vecD; - - vecA = vldrwq_gather_base_wb_f32(&vecScGathAddr, 64); - vecC = vldrwq_gather_base_f32(vecScGathAddr, 16); - - vecTmp0 = vecSum0 + vecSum1; - vecTmp0 = vecTmp0 * onebyfftLen; - vstrwq_scatter_base_f32(vecScGathAddr, -64, vecTmp0); - - vecTmp0 = vecSum0 - vecSum1; - vecTmp0 = vecTmp0 * onebyfftLen; - vstrwq_scatter_base_f32(vecScGathAddr, -64 + 8, vecTmp0); - - vecTmp0 = MVE_CMPLX_ADD_A_ixB(vecDiff0, vecDiff1); - vecTmp0 = vecTmp0 * onebyfftLen; - vstrwq_scatter_base_f32(vecScGathAddr, -64 + 16, vecTmp0); - - vecTmp0 = MVE_CMPLX_SUB_A_ixB(vecDiff0, vecDiff1); - vecTmp0 = vecTmp0 * onebyfftLen; - vstrwq_scatter_base_f32(vecScGathAddr, -64 + 24, vecTmp0); - - blkCnt--; - } - - /* - * End of last stage process - */ -} - -static void arm_cfft_radix4by2_inverse_f32_mve(const arm_cfft_instance_f32 * S,float32_t *pSrc, uint32_t fftLen) -{ - float32_t const *pCoefVec; - float32_t const *pCoef = S->pTwiddle; - float32_t *pIn0, *pIn1; - uint32_t n2; - float32_t onebyfftLen = arm_inverse_fft_length_f32(fftLen); - uint32_t blkCnt; - f32x4_t vecIn0, vecIn1, vecSum, vecDiff; - f32x4_t vecCmplxTmp, vecTw; - - - n2 = fftLen >> 1; - pIn0 = pSrc; - pIn1 = pSrc + fftLen; - pCoefVec = pCoef; - - blkCnt = n2 / 2; - while (blkCnt > 0U) - { - vecIn0 = *(f32x4_t *) pIn0; - vecIn1 = *(f32x4_t *) pIn1; - vecTw = vld1q(pCoefVec); - pCoefVec += 4; - - vecSum = vecIn0 + vecIn1; - vecDiff = vecIn0 - vecIn1; - - vecCmplxTmp = MVE_CMPLX_MULT_FLT_AxB(vecTw, vecDiff); - - vst1q(pIn0, vecSum); - pIn0 += 4; - vst1q(pIn1, vecCmplxTmp); - pIn1 += 4; - - blkCnt--; - } - - _arm_radix4_butterfly_inverse_f32_mve(S, pSrc, n2, onebyfftLen); - - _arm_radix4_butterfly_inverse_f32_mve(S, pSrc + fftLen, n2, onebyfftLen); -} - - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return none - */ - - -void arm_cfft_f32( - const arm_cfft_instance_f32 * S, - float32_t * pSrc, - uint8_t ifftFlag, - uint8_t bitReverseFlag) -{ - uint32_t fftLen = S->fftLen; - - if (ifftFlag == 1U) { - - switch (fftLen) { - case 16: - case 64: - case 256: - case 1024: - case 4096: - _arm_radix4_butterfly_inverse_f32_mve(S, pSrc, fftLen, arm_inverse_fft_length_f32(S->fftLen)); - break; - - case 32: - case 128: - case 512: - case 2048: - arm_cfft_radix4by2_inverse_f32_mve(S, pSrc, fftLen); - break; - } - } else { - switch (fftLen) { - case 16: - case 64: - case 256: - case 1024: - case 4096: - _arm_radix4_butterfly_f32_mve(S, pSrc, fftLen); - break; - - case 32: - case 128: - case 512: - case 2048: - arm_cfft_radix4by2_f32_mve(S, pSrc, fftLen); - break; - } - } - - - if (bitReverseFlag) - { - - arm_bitreversal_f32_inpl_mve((uint32_t*)pSrc, S->bitRevLength, S->pBitRevTable); - - } -} - - -#else -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 - For the MVE version, the new arm_cfft_init_f32 initialization function is - mandatory. Compilation flags are available to include only the required tables for the - needed FFTs. Other FFT versions can continue to be initialized as - explained below. - @par - For not MVE versions, 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 - The new arm_cfft_init_f32 can also be used. - @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 - @{ - */ - -/** - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables 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; l < L; l++) - { - *pSrc = -*pSrc; - pSrc += 2; - } - } - - switch (L) - { - case 16: - case 128: - case 1024: - arm_cfft_radix8by2_f32 ( (arm_cfft_instance_f32 *) S, p1); - break; - case 32: - case 256: - case 2048: - arm_cfft_radix8by4_f32 ( (arm_cfft_instance_f32 *) S, p1); - break; - case 64: - case 512: - case 4096: - arm_radix8_butterfly_f32 ( p1, L, (float32_t *) S->pTwiddle, 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; l < L; l++) - { - *pSrc++ *= invL ; - *pSrc = -(*pSrc) * invL; - pSrc++; - } - } -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of ComplexFFT group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_f64.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_f64.c deleted file mode 100644 index 8c6d3e6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_f64.c +++ /dev/null @@ -1,318 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_f64.c - * Description: Combined Radix Decimation in Frequency CFFT Double Precision Floating point processing function - * - * $Date: 29. November 2019 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - - -extern void arm_radix4_butterfly_f64( - float64_t * pSrc, - uint16_t fftLen, - const float64_t * pCoef, - uint16_t twidCoefModifier); - -extern void arm_bitreversal_64( - uint64_t * pSrc, - const uint16_t bitRevLen, - const uint16_t * pBitRevTable); - -/** -* @} end of ComplexFFT group -*/ - -/* ---------------------------------------------------------------------- - * Internal helper function used by the FFTs - * ---------------------------------------------------------------------- */ - -/* -* @brief Core function for the Double Precision floating-point CFFT butterfly process. -* @param[in, out] *pSrc points to the in-place buffer of F64 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_f64( - float64_t * pSrc, - uint16_t fftLen, - const float64_t * pCoef, - uint16_t twidCoefModifier) -{ - - float64_t co1, co2, co3, si1, si2, si3; - uint32_t ia1, ia2, ia3; - uint32_t i0, i1, i2, i3; - uint32_t n1, n2, j, k; - - float64_t t1, t2, r1, r2, s1, s2; - - - /* 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; - } -} - -/* -* @brief Core function for the Double Precision floating-point CFFT butterfly process. -* @param[in, out] *pSrc points to the in-place buffer of F64 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_cfft_radix4by2_f64( - float64_t * pSrc, - uint32_t fftLen, - const float64_t * pCoef) -{ - uint32_t i, l; - uint32_t n2, ia; - float64_t xt, yt, cosVal, sinVal; - float64_t p0, p1,p2,p3,a0,a1; - - n2 = fftLen >> 1; - ia = 0; - for (i = 0; i < n2; i++) - { - cosVal = pCoef[2*ia]; - sinVal = pCoef[2*ia + 1]; - ia++; - - 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; - - } - - // first col - arm_radix4_butterfly_f64( pSrc, n2, (float64_t*)pCoef, 2U); - // second col - arm_radix4_butterfly_f64( pSrc + fftLen, n2, (float64_t*)pCoef, 2U); - -} - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @brief Processing function for the Double Precision floating-point complex FFT. - @param[in] S points to an instance of the Double Precision 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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return none - */ - -void arm_cfft_f64( - const arm_cfft_instance_f64 * S, - float64_t * p1, - uint8_t ifftFlag, - uint8_t bitReverseFlag) -{ - uint32_t L = S->fftLen, l; - float64_t invL, * pSrc; - - if (ifftFlag == 1U) - { - /* Conjugate input data */ - pSrc = p1 + 1; - for(l=0; lpTwiddle, 1U); - break; - - case 32: - case 128: - case 512: - case 2048: - arm_cfft_radix4by2_f64 ( p1, L, (float64_t*)S->pTwiddle); - break; - - } - - if ( bitReverseFlag ) - arm_bitreversal_64((uint64_t*)p1, S->bitRevLength,S->pBitRevTable); - - if (ifftFlag == 1U) - { - invL = 1.0 / (float64_t)L; - /* Conjugate and scale output data */ - pSrc = p1; - for(l=0; lbitRevLength = arm_cfft_sR_##EXT##_len##SIZE.bitRevLength; \ - S->pBitRevTable = arm_cfft_sR_##EXT##_len##SIZE.pBitRevTable; \ - S->pTwiddle = arm_cfft_sR_##EXT##_len##SIZE.pTwiddle; - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @brief Initialization function for the cfft f32 function - @param[in,out] S points to an instance of the floating-point CFFT structure - @param[in] fftLen fft length (number of complex samples) - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - - @par Use of this function is mandatory only for the MVE version of the FFT. - Other versions can still initialize directly the data structure using - variables declared in arm_const_structs.h - */ - -#include "arm_math.h" -#include "arm_common_tables.h" -#include "arm_const_structs.h" - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "arm_vec_fft.h" -#include "arm_mve_tables.h" - -arm_status arm_cfft_radix4by2_rearrange_twiddles_f32(arm_cfft_instance_f32 *S, int twidCoefModifier) -{ - - switch (S->fftLen >> (twidCoefModifier - 1)) { - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) - case 4096U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_4096_f32; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_4096_f32; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_4096_f32; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_4096_f32; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_4096_f32; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_4096_f32; - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) || defined(ARM_TABLE_BITREVIDX_FXT_2048) - case 1024U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_1024_f32; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_1024_f32; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_1024_f32; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_1024_f32; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_1024_f32; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_1024_f32; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) || defined(ARM_TABLE_BITREVIDX_FXT_512) - case 256U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_256_f32; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_256_f32; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_256_f32; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_256_f32; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_256_f32; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_256_f32; - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) || defined(ARM_TABLE_BITREVIDX_FXT_128) - case 64U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_64_f32; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_64_f32; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_64_f32; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_64_f32; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_64_f32; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_64_f32; - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) || defined(ARM_TABLE_BITREVIDX_FXT_32) - case 16U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_16_f32; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_16_f32; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_16_f32; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_16_f32; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_16_f32; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_16_f32; - break; -#endif - - default: - return(ARM_MATH_ARGUMENT_ERROR); - break; - /* invalid sizes already filtered */ - } - - return(ARM_MATH_SUCCESS); - -} - -arm_status arm_cfft_init_f32( - arm_cfft_instance_f32 * S, - uint16_t fftLen) -{ - - /* 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 = NULL; - - - /* Initializations of Instance structure depending on the FFT length */ - switch (S->fftLen) { - /* Initializations of structure parameters for 4096 point FFT */ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) - case 4096U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_4096; - S->pTwiddle = (float32_t *)twiddleCoef_4096; - status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_2048) - /* Initializations of structure parameters for 2048 point FFT */ - case 2048U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_2048; - S->pTwiddle = (float32_t *)twiddleCoef_2048; - status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) - /* Initializations of structure parameters for 1024 point FFT */ - case 1024U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_1024; - S->pTwiddle = (float32_t *)twiddleCoef_1024; - status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_512) - /* Initializations of structure parameters for 512 point FFT */ - case 512U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_512; - S->pTwiddle = (float32_t *)twiddleCoef_512; - status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) - case 256U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_256; - S->pTwiddle = (float32_t *)twiddleCoef_256; - status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_128) - case 128U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_128; - S->pTwiddle = (float32_t *)twiddleCoef_128; - status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) - case 64U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_64; - S->pTwiddle = (float32_t *)twiddleCoef_64; - status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_32) - case 32U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_32; - S->pTwiddle = (float32_t *)twiddleCoef_32; - status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) - case 16U: - /* Initializations of structure parameters for 16 point FFT */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_16; - S->pTwiddle = (float32_t *)twiddleCoef_16; - status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); - break; -#endif - - default: - /* Reporting argument error if fftSize is not valid value */ - status = ARM_MATH_ARGUMENT_ERROR; - break; - } - - - return (status); -} -#else -arm_status arm_cfft_init_f32( - arm_cfft_instance_f32 * S, - uint16_t fftLen) -{ - /* 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 = NULL; - - - /* Initializations of Instance structure depending on the FFT length */ - switch (S->fftLen) { -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_4096) && defined(ARM_TABLE_BITREVIDX_FLT_4096)) - /* Initializations of structure parameters for 4096 point FFT */ - case 4096U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f32,4096); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048)) - /* Initializations of structure parameters for 2048 point FFT */ - case 2048U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f32,2048); - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024)) - /* Initializations of structure parameters for 1024 point FFT */ - case 1024U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f32,1024); - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_BITREVIDX_FLT_512)) - /* Initializations of structure parameters for 512 point FFT */ - case 512U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f32,512); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_BITREVIDX_FLT_256)) - case 256U: - FFTINIT(f32,256); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_BITREVIDX_FLT_128)) - case 128U: - FFTINIT(f32,128); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_BITREVIDX_FLT_64)) - case 64U: - FFTINIT(f32,64); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32)) - case 32U: - FFTINIT(f32,32); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_BITREVIDX_FLT_16)) - case 16U: - /* Initializations of structure parameters for 16 point FFT */ - FFTINIT(f32,16); - break; -#endif - - default: - /* Reporting argument error if fftSize is not valid value */ - status = ARM_MATH_ARGUMENT_ERROR; - break; - } - - - return (status); -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of ComplexFFT group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_f64.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_f64.c deleted file mode 100644 index 54615d3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_f64.c +++ /dev/null @@ -1,150 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_init_f64.c - * Description: Initialization function for cfft f64 instance - * - * $Date: 23. January 2020 - * $Revision: V1.7.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define FFTINIT(EXT,SIZE) \ - S->bitRevLength = arm_cfft_sR_##EXT##_len##SIZE.bitRevLength; \ - S->pBitRevTable = arm_cfft_sR_##EXT##_len##SIZE.pBitRevTable; \ - S->pTwiddle = arm_cfft_sR_##EXT##_len##SIZE.pTwiddle; - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @brief Initialization function for the cfft f64 function - @param[in,out] S points to an instance of the floating-point CFFT structure - @param[in] fftLen fft length (number of complex samples) - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - - @par Use of this function is mandatory only for the MVE version of the FFT. - Other versions can still initialize directly the data structure using - variables declared in arm_const_structs.h - */ - -#include "arm_math.h" -#include "arm_common_tables.h" -#include "arm_const_structs.h" - - -arm_status arm_cfft_init_f64( - arm_cfft_instance_f64 * S, - uint16_t fftLen) -{ - /* 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 = NULL; - - - /* Initializations of Instance structure depending on the FFT length */ - switch (S->fftLen) { -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_f64_4096) && defined(ARM_TABLE_BITREVIDX_FLT_4096)) - /* Initializations of structure parameters for 4096 point FFT */ - case 4096U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f64,4096); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_f64_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048)) - /* Initializations of structure parameters for 2048 point FFT */ - case 2048U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f64,2048); - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_f64_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024)) - /* Initializations of structure parameters for 1024 point FFT */ - case 1024U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f64,1024); - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_f64_512) && defined(ARM_TABLE_BITREVIDX_FLT_512)) - /* Initializations of structure parameters for 512 point FFT */ - case 512U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f64,512); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_f64_256) && defined(ARM_TABLE_BITREVIDX_FLT_256)) - case 256U: - FFTINIT(f64,256); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_f64_128) && defined(ARM_TABLE_BITREVIDX_FLT_128)) - case 128U: - FFTINIT(f64,128); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_f64_64) && defined(ARM_TABLE_BITREVIDX_FLT_64)) - case 64U: - FFTINIT(f64,64); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_f64_32) && defined(ARM_TABLE_BITREVIDX_FLT_32)) - case 32U: - FFTINIT(f64,32); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_f64_16) && defined(ARM_TABLE_BITREVIDX_FLT_16)) - case 16U: - /* Initializations of structure parameters for 16 point FFT */ - FFTINIT(f64,16); - break; -#endif - - default: - /* Reporting argument error if fftSize is not valid value */ - status = ARM_MATH_ARGUMENT_ERROR; - break; - } - - - return (status); -} - -/** - @} end of ComplexFFT group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_q15.c deleted file mode 100644 index 048d708..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_q15.c +++ /dev/null @@ -1,356 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_init_q15.c - * Description: Initialization function for cfft q15 instance - * - * $Date: 07. January 2020 - * $Revision: V1.7.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define FFTINIT(EXT,SIZE) \ - S->bitRevLength = arm_cfft_sR_##EXT##_len##SIZE.bitRevLength; \ - S->pBitRevTable = arm_cfft_sR_##EXT##_len##SIZE.pBitRevTable; \ - S->pTwiddle = arm_cfft_sR_##EXT##_len##SIZE.pTwiddle; - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @brief Initialization function for the cfft q15 function - @param[in,out] S points to an instance of the floating-point CFFT structure - @param[in] fftLen fft length (number of complex samples) - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - - @par Use of this function is mandatory only for the MVE version of the FFT. - Other versions can still initialize directly the data structure using - variables declared in arm_const_structs.h - */ - -#include "arm_math.h" -#include "arm_common_tables.h" -#include "arm_const_structs.h" - -#if defined(ARM_MATH_MVEI) - -#include "arm_vec_fft.h" -#include "arm_mve_tables.h" - - -arm_status arm_cfft_radix4by2_rearrange_twiddles_q15(arm_cfft_instance_q15 *S, int twidCoefModifier) -{ - - switch (S->fftLen >> (twidCoefModifier - 1)) { - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) - case 4096U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_4096_q15; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_4096_q15; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_4096_q15; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_4096_q15; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_4096_q15; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_4096_q15; - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) || defined(ARM_TABLE_BITREVIDX_FXT_2048) - case 1024U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_1024_q15; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_1024_q15; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_1024_q15; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_1024_q15; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_1024_q15; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_1024_q15; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) || defined(ARM_TABLE_BITREVIDX_FXT_512) - case 256U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_256_q15; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_256_q15; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_256_q15; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_256_q15; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_256_q15; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_256_q15; - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) || defined(ARM_TABLE_BITREVIDX_FXT_128) - case 64U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_64_q15; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_64_q15; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_64_q15; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_64_q15; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_64_q15; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_64_q15; - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) || defined(ARM_TABLE_BITREVIDX_FXT_32) - case 16U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_16_q15; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_16_q15; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_16_q15; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_16_q15; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_16_q15; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_16_q15; - break; -#endif - - default: - return(ARM_MATH_ARGUMENT_ERROR); - break; - /* invalid sizes already filtered */ - } - - return(ARM_MATH_SUCCESS); - -} - - - -arm_status arm_cfft_init_q15( - arm_cfft_instance_q15 * S, - uint16_t fftLen) -{ - - /* 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 = NULL; - - - /* Initializations of Instance structure depending on the FFT length */ - switch (S->fftLen) { - /* Initializations of structure parameters for 4096 point FFT */ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) - case 4096U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_4096; - S->pTwiddle = (q15_t *)twiddleCoef_4096_q15; - status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_2048) - /* Initializations of structure parameters for 2048 point FFT */ - case 2048U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_2048; - S->pTwiddle = (q15_t *)twiddleCoef_2048_q15; - status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) - /* Initializations of structure parameters for 1024 point FFT */ - case 1024U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_1024; - S->pTwiddle = (q15_t *)twiddleCoef_1024_q15; - status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_512) - /* Initializations of structure parameters for 512 point FFT */ - case 512U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_512; - S->pTwiddle = (q15_t *)twiddleCoef_512_q15; - status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) - case 256U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_256; - S->pTwiddle = (q15_t *)twiddleCoef_256_q15; - status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_128) - case 128U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_128; - S->pTwiddle = (q15_t *)twiddleCoef_128_q15; - status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) - case 64U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_64; - S->pTwiddle = (q15_t *)twiddleCoef_64_q15; - status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_32) - case 32U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_32; - S->pTwiddle = (q15_t *)twiddleCoef_32_q15; - status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) - case 16U: - /* Initializations of structure parameters for 16 point FFT */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_16; - S->pTwiddle = (q15_t *)twiddleCoef_16_q15; - status=arm_cfft_radix4by2_rearrange_twiddles_q15(S, 1); - break; -#endif - - default: - /* Reporting argument error if fftSize is not valid value */ - status = ARM_MATH_ARGUMENT_ERROR; - break; - } - - - return (status); -} -#else -arm_status arm_cfft_init_q15( - arm_cfft_instance_q15 * S, - uint16_t fftLen) -{ - /* 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 = NULL; - - - /* Initializations of Instance structure depending on the FFT length */ - switch (S->fftLen) { -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) && defined(ARM_TABLE_BITREVIDX_FLT_4096)) - /* Initializations of structure parameters for 4096 point FFT */ - case 4096U: - /* Initialise the bit reversal table modifier */ - FFTINIT(q15,4096); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048)) - /* Initializations of structure parameters for 2048 point FFT */ - case 2048U: - /* Initialise the bit reversal table modifier */ - FFTINIT(q15,2048); - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024)) - /* Initializations of structure parameters for 1024 point FFT */ - case 1024U: - /* Initialise the bit reversal table modifier */ - FFTINIT(q15,1024); - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_512) && defined(ARM_TABLE_BITREVIDX_FLT_512)) - /* Initializations of structure parameters for 512 point FFT */ - case 512U: - /* Initialise the bit reversal table modifier */ - FFTINIT(q15,512); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_256) && defined(ARM_TABLE_BITREVIDX_FLT_256)) - case 256U: - FFTINIT(q15,256); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_128) && defined(ARM_TABLE_BITREVIDX_FLT_128)) - case 128U: - FFTINIT(q15,128); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_64) && defined(ARM_TABLE_BITREVIDX_FLT_64)) - case 64U: - FFTINIT(q15,64); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_32) && defined(ARM_TABLE_BITREVIDX_FLT_32)) - case 32U: - FFTINIT(q15,32); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_16) && defined(ARM_TABLE_BITREVIDX_FLT_16)) - case 16U: - /* Initializations of structure parameters for 16 point FFT */ - FFTINIT(q15,16); - break; -#endif - - default: - /* Reporting argument error if fftSize is not valid value */ - status = ARM_MATH_ARGUMENT_ERROR; - break; - } - - - return (status); -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of ComplexFFT group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_q31.c deleted file mode 100644 index b49700e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_init_q31.c +++ /dev/null @@ -1,356 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_init_q31.c - * Description: Initialization function for cfft q31 instance - * - * $Date: 07. January 2020 - * $Revision: V1.7.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define FFTINIT(EXT,SIZE) \ - S->bitRevLength = arm_cfft_sR_##EXT##_len##SIZE.bitRevLength; \ - S->pBitRevTable = arm_cfft_sR_##EXT##_len##SIZE.pBitRevTable; \ - S->pTwiddle = arm_cfft_sR_##EXT##_len##SIZE.pTwiddle; - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @brief Initialization function for the cfft q31 function - @param[in,out] S points to an instance of the floating-point CFFT structure - @param[in] fftLen fft length (number of complex samples) - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - - @par Use of this function is mandatory only for the MVE version of the FFT. - Other versions can still initialize directly the data structure using - variables declared in arm_const_structs.h - */ - -#include "arm_math.h" -#include "arm_common_tables.h" -#include "arm_const_structs.h" - -#if defined(ARM_MATH_MVEI) - -#include "arm_vec_fft.h" -#include "arm_mve_tables.h" - - -arm_status arm_cfft_radix4by2_rearrange_twiddles_q31(arm_cfft_instance_q31 *S, int twidCoefModifier) -{ - - switch (S->fftLen >> (twidCoefModifier - 1)) { - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) - case 4096U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_4096_q31; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_4096_q31; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_4096_q31; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_4096_q31; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_4096_q31; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_4096_q31; - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) || defined(ARM_TABLE_BITREVIDX_FXT_2048) - case 1024U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_1024_q31; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_1024_q31; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_1024_q31; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_1024_q31; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_1024_q31; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_1024_q31; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) || defined(ARM_TABLE_BITREVIDX_FXT_512) - case 256U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_256_q31; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_256_q31; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_256_q31; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_256_q31; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_256_q31; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_256_q31; - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) || defined(ARM_TABLE_BITREVIDX_FXT_128) - case 64U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_64_q31; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_64_q31; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_64_q31; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_64_q31; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_64_q31; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_64_q31; - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) || defined(ARM_TABLE_BITREVIDX_FXT_32) - case 16U: - S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_16_q31; - S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_16_q31; - - S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_16_q31; - S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_16_q31; - - S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_16_q31; - S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_16_q31; - break; -#endif - - default: - return(ARM_MATH_ARGUMENT_ERROR); - break; - /* invalid sizes already filtered */ - } - - return(ARM_MATH_SUCCESS); - -} - - - -arm_status arm_cfft_init_q31( - arm_cfft_instance_q31 * S, - uint16_t fftLen) -{ - - /* 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 = NULL; - - - /* Initializations of Instance structure depending on the FFT length */ - switch (S->fftLen) { - /* Initializations of structure parameters for 4096 point FFT */ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) - case 4096U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_4096; - S->pTwiddle = (q31_t *)twiddleCoef_4096_q31; - status=arm_cfft_radix4by2_rearrange_twiddles_q31(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_2048) - /* Initializations of structure parameters for 2048 point FFT */ - case 2048U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_2048; - S->pTwiddle = (q31_t *)twiddleCoef_2048_q31; - status=arm_cfft_radix4by2_rearrange_twiddles_q31(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) - /* Initializations of structure parameters for 1024 point FFT */ - case 1024U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_1024; - S->pTwiddle = (q31_t *)twiddleCoef_1024_q31; - status=arm_cfft_radix4by2_rearrange_twiddles_q31(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_512) - /* Initializations of structure parameters for 512 point FFT */ - case 512U: - /* Initialise the bit reversal table modifier */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_512; - S->pTwiddle = (q31_t *)twiddleCoef_512_q31; - status=arm_cfft_radix4by2_rearrange_twiddles_q31(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) - case 256U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_256; - S->pTwiddle = (q31_t *)twiddleCoef_256_q31; - status=arm_cfft_radix4by2_rearrange_twiddles_q31(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_128) - case 128U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_128; - S->pTwiddle = (q31_t *)twiddleCoef_128_q31; - status=arm_cfft_radix4by2_rearrange_twiddles_q31(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) - case 64U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_64; - S->pTwiddle = (q31_t *)twiddleCoef_64_q31; - status=arm_cfft_radix4by2_rearrange_twiddles_q31(S, 1); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_32) - case 32U: - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_32; - S->pTwiddle = (q31_t *)twiddleCoef_32_q31; - status=arm_cfft_radix4by2_rearrange_twiddles_q31(S, 2); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) - case 16U: - /* Initializations of structure parameters for 16 point FFT */ - S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH; - S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_16; - S->pTwiddle = (q31_t *)twiddleCoef_16_q31; - status=arm_cfft_radix4by2_rearrange_twiddles_q31(S, 1); - break; -#endif - - default: - /* Reporting argument error if fftSize is not valid value */ - status = ARM_MATH_ARGUMENT_ERROR; - break; - } - - - return (status); -} -#else -arm_status arm_cfft_init_q31( - arm_cfft_instance_q31 * S, - uint16_t fftLen) -{ - /* 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 = NULL; - - - /* Initializations of Instance structure depending on the FFT length */ - switch (S->fftLen) { -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) && defined(ARM_TABLE_BITREVIDX_FLT_4096)) - /* Initializations of structure parameters for 4096 point FFT */ - case 4096U: - /* Initialise the bit reversal table modifier */ - FFTINIT(q31,4096); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048)) - /* Initializations of structure parameters for 2048 point FFT */ - case 2048U: - /* Initialise the bit reversal table modifier */ - FFTINIT(q31,2048); - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024)) - /* Initializations of structure parameters for 1024 point FFT */ - case 1024U: - /* Initialise the bit reversal table modifier */ - FFTINIT(q31,1024); - - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_512) && defined(ARM_TABLE_BITREVIDX_FLT_512)) - /* Initializations of structure parameters for 512 point FFT */ - case 512U: - /* Initialise the bit reversal table modifier */ - FFTINIT(q31,512); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_256) && defined(ARM_TABLE_BITREVIDX_FLT_256)) - case 256U: - FFTINIT(q31,256); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_128) && defined(ARM_TABLE_BITREVIDX_FLT_128)) - case 128U: - FFTINIT(q31,128); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_64) && defined(ARM_TABLE_BITREVIDX_FLT_64)) - case 64U: - FFTINIT(q31,64); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_32) && defined(ARM_TABLE_BITREVIDX_FLT_32)) - case 32U: - FFTINIT(q31,32); - break; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_16) && defined(ARM_TABLE_BITREVIDX_FLT_16)) - case 16U: - /* Initializations of structure parameters for 16 point FFT */ - FFTINIT(q31,16); - break; -#endif - - default: - /* Reporting argument error if fftSize is not valid value */ - status = ARM_MATH_ARGUMENT_ERROR; - break; - } - - - return (status); -} -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @} end of ComplexFFT group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_q15.c deleted file mode 100644 index 66788e2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_q15.c +++ /dev/null @@ -1,949 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_q15.c - * Description: Combined Radix Decimation in Q15 Frequency CFFT processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -#if defined(ARM_MATH_MVEI) - -#include "arm_vec_fft.h" - - -static void arm_bitreversal_16_inpl_mve( - uint16_t *pSrc, - const uint16_t bitRevLen, - const uint16_t *pBitRevTab) - -{ - uint32_t *src = (uint32_t *)pSrc; - uint32_t blkCnt; /* loop counters */ - uint32x4_t bitRevTabOff; - uint16x8_t one = vdupq_n_u16(1); - - blkCnt = (bitRevLen / 2) / 4; - while (blkCnt > 0U) { - bitRevTabOff = vldrhq_u16(pBitRevTab); - pBitRevTab += 8; - - uint32x4_t bitRevOff1 = vmullbq_int_u16(bitRevTabOff, one); - uint32x4_t bitRevOff2 = vmulltq_int_u16(bitRevTabOff, one); - - bitRevOff1 = bitRevOff1 >> 3; - bitRevOff2 = bitRevOff2 >> 3; - - uint32x4_t in1 = vldrwq_gather_shifted_offset_u32(src, bitRevOff1); - uint32x4_t in2 = vldrwq_gather_shifted_offset_u32(src, bitRevOff2); - - vstrwq_scatter_shifted_offset_u32(src, bitRevOff1, in2); - vstrwq_scatter_shifted_offset_u32(src, bitRevOff2, in1); - - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = bitRevLen & 7; - if (blkCnt > 0U) { - mve_pred16_t p0 = vctp16q(blkCnt); - - bitRevTabOff = vldrhq_z_u16(pBitRevTab, p0); - - uint32x4_t bitRevOff1 = vmullbq_int_u16(bitRevTabOff, one); - uint32x4_t bitRevOff2 = vmulltq_int_u16(bitRevTabOff, one); - - bitRevOff1 = bitRevOff1 >> 3; - bitRevOff2 = bitRevOff2 >> 3; - - uint32x4_t in1 = vldrwq_gather_shifted_offset_z_u32(src, bitRevOff1, p0); - uint32x4_t in2 = vldrwq_gather_shifted_offset_z_u32(src, bitRevOff2, p0); - - vstrwq_scatter_shifted_offset_p_u32(src, bitRevOff1, in2, p0); - vstrwq_scatter_shifted_offset_p_u32(src, bitRevOff2, in1, p0); - } -} - -static void _arm_radix4_butterfly_q15_mve( - const arm_cfft_instance_q15 * S, - q15_t *pSrc, - uint32_t fftLen) -{ - q15x8_t vecTmp0, vecTmp1; - q15x8_t vecSum0, vecDiff0, vecSum1, vecDiff1; - q15x8_t vecA, vecB, vecC, vecD; - q15x8_t vecW; - uint32_t blkCnt; - uint32_t n1, n2; - uint32_t stage = 0; - int32_t iter = 1; - static const uint32_t strides[4] = { - (0 - 16) * sizeof(q15_t *), (4 - 16) * sizeof(q15_t *), - (8 - 16) * sizeof(q15_t *), (12 - 16) * sizeof(q15_t *) - }; - - /* - * Process first stages - * Each stage in middle stages provides two down scaling of the input - */ - n2 = fftLen; - n1 = n2; - n2 >>= 2u; - - for (int k = fftLen / 4u; k > 1; k >>= 2u) - { - for (int i = 0; i < iter; i++) - { - q15_t const *p_rearranged_twiddle_tab_stride2 = - &S->rearranged_twiddle_stride2[ - S->rearranged_twiddle_tab_stride2_arr[stage]]; - q15_t const *p_rearranged_twiddle_tab_stride3 = &S->rearranged_twiddle_stride3[ - S->rearranged_twiddle_tab_stride3_arr[stage]]; - q15_t const *p_rearranged_twiddle_tab_stride1 = - &S->rearranged_twiddle_stride1[ - S->rearranged_twiddle_tab_stride1_arr[stage]]; - q15_t const *pW1, *pW2, *pW3; - q15_t *inA = pSrc + CMPLX_DIM * i * n1; - q15_t *inB = inA + n2 * CMPLX_DIM; - q15_t *inC = inB + n2 * CMPLX_DIM; - q15_t *inD = inC + n2 * CMPLX_DIM; - - pW1 = p_rearranged_twiddle_tab_stride1; - pW2 = p_rearranged_twiddle_tab_stride2; - pW3 = p_rearranged_twiddle_tab_stride3; - - blkCnt = n2 / 4; - /* - * load 4 x q15 complex pair - */ - vecA = vldrhq_s16(inA); - vecC = vldrhq_s16(inC); - while (blkCnt > 0U) - { - vecB = vldrhq_s16(inB); - vecD = vldrhq_s16(inD); - - vecSum0 = vhaddq(vecA, vecC); - vecDiff0 = vhsubq(vecA, vecC); - - vecSum1 = vhaddq(vecB, vecD); - vecDiff1 = vhsubq(vecB, vecD); - /* - * [ 1 1 1 1 ] * [ A B C D ]' .* 1 - */ - vecTmp0 = vhaddq(vecSum0, vecSum1); - vst1q(inA, vecTmp0); - inA += 8; - /* - * [ 1 -1 1 -1 ] * [ A B C D ]' - */ - vecTmp0 = vhsubq(vecSum0, vecSum1); - /* - * [ 1 -1 1 -1 ] * [ A B C D ]'.* W2 - */ - vecW = vld1q(pW2); - pW2 += 8; - vecTmp1 = MVE_CMPLX_MULT_FX_AxB(vecW, vecTmp0); - - vst1q(inB, vecTmp1); - inB += 8; - /* - * [ 1 -i -1 +i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_SUB_FX_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 -i -1 +i ] * [ A B C D ]'.* W1 - */ - vecW = vld1q(pW1); - pW1 += 8; - vecTmp1 = MVE_CMPLX_MULT_FX_AxB(vecW, vecTmp0); - vst1q(inC, vecTmp1); - inC += 8; - - /* - * [ 1 +i -1 -i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_ADD_FX_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 +i -1 -i ] * [ A B C D ]'.* W3 - */ - vecW = vld1q(pW3); - pW3 += 8; - vecTmp1 = MVE_CMPLX_MULT_FX_AxB(vecW, vecTmp0); - vst1q(inD, vecTmp1); - inD += 8; - - vecA = vldrhq_s16(inA); - vecC = vldrhq_s16(inC); - - blkCnt--; - } - } - n1 = n2; - n2 >>= 2u; - iter = iter << 2; - stage++; - } - - /* - * start of Last stage process - */ - uint32x4_t vecScGathAddr = *(uint32x4_t *) strides; - vecScGathAddr = vecScGathAddr + (uint32_t) pSrc; - - /* - * load scheduling - */ - vecA = (q15x8_t) vldrwq_gather_base_wb_s32(&vecScGathAddr, 64); - vecC = (q15x8_t) vldrwq_gather_base_s32(vecScGathAddr, 8); - - blkCnt = (fftLen >> 4); - while (blkCnt > 0U) - { - vecSum0 = vhaddq(vecA, vecC); - vecDiff0 = vhsubq(vecA, vecC); - - vecB = (q15x8_t) vldrwq_gather_base_s32(vecScGathAddr, 4); - vecD = (q15x8_t) vldrwq_gather_base_s32(vecScGathAddr, 12); - - vecSum1 = vhaddq(vecB, vecD); - vecDiff1 = vhsubq(vecB, vecD); - /* - * pre-load for next iteration - */ - vecA = (q15x8_t) vldrwq_gather_base_wb_s32(&vecScGathAddr, 64); - vecC = (q15x8_t) vldrwq_gather_base_s32(vecScGathAddr, 8); - - vecTmp0 = vhaddq(vecSum0, vecSum1); - vstrwq_scatter_base_s32(vecScGathAddr, -64, (q15x8_t) vecTmp0); - - vecTmp0 = vhsubq(vecSum0, vecSum1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 4, (q15x8_t) vecTmp0); - - vecTmp0 = MVE_CMPLX_SUB_FX_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 8, (q15x8_t) vecTmp0); - - vecTmp0 = MVE_CMPLX_ADD_FX_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 12, (q15x8_t) vecTmp0); - - blkCnt--; - } - -} - -static void arm_cfft_radix4by2_q15_mve(const arm_cfft_instance_q15 *S, q15_t *pSrc, uint32_t fftLen) -{ - uint32_t n2; - q15_t *pIn0; - q15_t *pIn1; - const q15_t *pCoef = S->pTwiddle; - uint32_t blkCnt; - q15x8_t vecIn0, vecIn1, vecSum, vecDiff; - q15x8_t vecCmplxTmp, vecTw; - q15_t const *pCoefVec; - - n2 = fftLen >> 1; - - pIn0 = pSrc; - pIn1 = pSrc + fftLen; - pCoefVec = pCoef; - - blkCnt = n2 / 4; - - while (blkCnt > 0U) - { - vecIn0 = *(q15x8_t *) pIn0; - vecIn1 = *(q15x8_t *) pIn1; - - vecIn0 = vecIn0 >> 1; - vecIn1 = vecIn1 >> 1; - vecSum = vhaddq(vecIn0, vecIn1); - vst1q(pIn0, vecSum); - pIn0 += 8; - - vecTw = vld1q(pCoefVec); - pCoefVec += 8; - - vecDiff = vhsubq(vecIn0, vecIn1); - vecCmplxTmp = MVE_CMPLX_MULT_FX_AxConjB(vecDiff, vecTw); - vst1q(pIn1, vecCmplxTmp); - pIn1 += 8; - - blkCnt--; - } - - _arm_radix4_butterfly_q15_mve(S, pSrc, n2); - - _arm_radix4_butterfly_q15_mve(S, pSrc + fftLen, n2); - - - pIn0 = pSrc; - blkCnt = (fftLen << 1) >> 3; - while (blkCnt > 0U) - { - vecIn0 = *(q15x8_t *) pIn0; - vecIn0 = vecIn0 << 1; - vst1q(pIn0, vecIn0); - pIn0 += 8; - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = (fftLen << 1) & 7; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - - vecIn0 = *(q15x8_t *) pIn0; - vecIn0 = vecIn0 << 1; - vstrhq_p(pIn0, vecIn0, p0); - } -} - -static void _arm_radix4_butterfly_inverse_q15_mve(const arm_cfft_instance_q15 *S,q15_t *pSrc, uint32_t fftLen) -{ - q15x8_t vecTmp0, vecTmp1; - q15x8_t vecSum0, vecDiff0, vecSum1, vecDiff1; - q15x8_t vecA, vecB, vecC, vecD; - q15x8_t vecW; - uint32_t blkCnt; - uint32_t n1, n2; - uint32_t stage = 0; - int32_t iter = 1; - static const uint32_t strides[4] = { - (0 - 16) * sizeof(q15_t *), (4 - 16) * sizeof(q15_t *), - (8 - 16) * sizeof(q15_t *), (12 - 16) * sizeof(q15_t *) - }; - - - /* - * Process first stages - * Each stage in middle stages provides two down scaling of the input - */ - n2 = fftLen; - n1 = n2; - n2 >>= 2u; - - for (int k = fftLen / 4u; k > 1; k >>= 2u) - { - for (int i = 0; i < iter; i++) - { - q15_t const *p_rearranged_twiddle_tab_stride2 = - &S->rearranged_twiddle_stride2[ - S->rearranged_twiddle_tab_stride2_arr[stage]]; - q15_t const *p_rearranged_twiddle_tab_stride3 = &S->rearranged_twiddle_stride3[ - S->rearranged_twiddle_tab_stride3_arr[stage]]; - q15_t const *p_rearranged_twiddle_tab_stride1 = - &S->rearranged_twiddle_stride1[ - S->rearranged_twiddle_tab_stride1_arr[stage]]; - q15_t const *pW1, *pW2, *pW3; - q15_t *inA = pSrc + CMPLX_DIM * i * n1; - q15_t *inB = inA + n2 * CMPLX_DIM; - q15_t *inC = inB + n2 * CMPLX_DIM; - q15_t *inD = inC + n2 * CMPLX_DIM; - - pW1 = p_rearranged_twiddle_tab_stride1; - pW2 = p_rearranged_twiddle_tab_stride2; - pW3 = p_rearranged_twiddle_tab_stride3; - - blkCnt = n2 / 4; - /* - * load 4 x q15 complex pair - */ - vecA = vldrhq_s16(inA); - vecC = vldrhq_s16(inC); - while (blkCnt > 0U) - { - vecB = vldrhq_s16(inB); - vecD = vldrhq_s16(inD); - - vecSum0 = vhaddq(vecA, vecC); - vecDiff0 = vhsubq(vecA, vecC); - - vecSum1 = vhaddq(vecB, vecD); - vecDiff1 = vhsubq(vecB, vecD); - /* - * [ 1 1 1 1 ] * [ A B C D ]' .* 1 - */ - vecTmp0 = vhaddq(vecSum0, vecSum1); - vst1q(inA, vecTmp0); - inA += 8; - /* - * [ 1 -1 1 -1 ] * [ A B C D ]' - */ - vecTmp0 = vhsubq(vecSum0, vecSum1); - /* - * [ 1 -1 1 -1 ] * [ A B C D ]'.* W2 - */ - vecW = vld1q(pW2); - pW2 += 8; - vecTmp1 = MVE_CMPLX_MULT_FX_AxConjB(vecTmp0, vecW); - - vst1q(inB, vecTmp1); - inB += 8; - /* - * [ 1 -i -1 +i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_ADD_FX_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 -i -1 +i ] * [ A B C D ]'.* W1 - */ - vecW = vld1q(pW1); - pW1 += 8; - vecTmp1 = MVE_CMPLX_MULT_FX_AxConjB(vecTmp0, vecW); - vst1q(inC, vecTmp1); - inC += 8; - /* - * [ 1 +i -1 -i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_SUB_FX_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 +i -1 -i ] * [ A B C D ]'.* W3 - */ - vecW = vld1q(pW3); - pW3 += 8; - vecTmp1 = MVE_CMPLX_MULT_FX_AxConjB(vecTmp0, vecW); - vst1q(inD, vecTmp1); - inD += 8; - - vecA = vldrhq_s16(inA); - vecC = vldrhq_s16(inC); - - blkCnt--; - } - } - n1 = n2; - n2 >>= 2u; - iter = iter << 2; - stage++; - } - - /* - * start of Last stage process - */ - uint32x4_t vecScGathAddr = *(uint32x4_t *) strides; - vecScGathAddr = vecScGathAddr + (uint32_t) pSrc; - - /* - * load scheduling - */ - vecA = (q15x8_t) vldrwq_gather_base_wb_s32(&vecScGathAddr, 64); - vecC = (q15x8_t) vldrwq_gather_base_s32(vecScGathAddr, 8); - - blkCnt = (fftLen >> 4); - while (blkCnt > 0U) - { - vecSum0 = vhaddq(vecA, vecC); - vecDiff0 = vhsubq(vecA, vecC); - - vecB = (q15x8_t) vldrwq_gather_base_s32(vecScGathAddr, 4); - vecD = (q15x8_t) vldrwq_gather_base_s32(vecScGathAddr, 12); - - vecSum1 = vhaddq(vecB, vecD); - vecDiff1 = vhsubq(vecB, vecD); - /* - * pre-load for next iteration - */ - vecA = (q15x8_t) vldrwq_gather_base_wb_s32(&vecScGathAddr, 64); - vecC = (q15x8_t) vldrwq_gather_base_s32(vecScGathAddr, 8); - - vecTmp0 = vhaddq(vecSum0, vecSum1); - vstrwq_scatter_base_s32(vecScGathAddr, -64, (q15x8_t) vecTmp0); - - vecTmp0 = vhsubq(vecSum0, vecSum1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 4, (q15x8_t) vecTmp0); - - vecTmp0 = MVE_CMPLX_ADD_FX_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 8, (q15x8_t) vecTmp0); - - vecTmp0 = MVE_CMPLX_SUB_FX_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 12, (q15x8_t) vecTmp0); - - blkCnt--; - } -} - -static void arm_cfft_radix4by2_inverse_q15_mve(const arm_cfft_instance_q15 *S, q15_t *pSrc, uint32_t fftLen) -{ - uint32_t n2; - q15_t *pIn0; - q15_t *pIn1; - const q15_t *pCoef = S->pTwiddle; - - uint32_t blkCnt; - q15x8_t vecIn0, vecIn1, vecSum, vecDiff; - q15x8_t vecCmplxTmp, vecTw; - q15_t const *pCoefVec; - - n2 = fftLen >> 1; - - pIn0 = pSrc; - pIn1 = pSrc + fftLen; - pCoefVec = pCoef; - - blkCnt = n2 / 4; - - while (blkCnt > 0U) - { - vecIn0 = *(q15x8_t *) pIn0; - vecIn1 = *(q15x8_t *) pIn1; - - vecIn0 = vecIn0 >> 1; - vecIn1 = vecIn1 >> 1; - vecSum = vhaddq(vecIn0, vecIn1); - vst1q(pIn0, vecSum); - pIn0 += 8; - - vecTw = vld1q(pCoefVec); - pCoefVec += 8; - - vecDiff = vhsubq(vecIn0, vecIn1); - vecCmplxTmp = vqrdmlsdhq(vuninitializedq_s16() , vecDiff, vecTw); - vecCmplxTmp = vqrdmladhxq(vecCmplxTmp, vecDiff, vecTw); - vst1q(pIn1, vecCmplxTmp); - pIn1 += 8; - - blkCnt--; - } - - - _arm_radix4_butterfly_inverse_q15_mve(S, pSrc, n2); - - _arm_radix4_butterfly_inverse_q15_mve(S, pSrc + fftLen, n2); - - pIn0 = pSrc; - blkCnt = (fftLen << 1) >> 3; - while (blkCnt > 0U) - { - vecIn0 = *(q15x8_t *) pIn0; - vecIn0 = vecIn0 << 1; - vst1q(pIn0, vecIn0); - pIn0 += 8; - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = (fftLen << 1) & 7; - while (blkCnt > 0U) - { - mve_pred16_t p0 = vctp16q(blkCnt); - - vecIn0 = *(q15x8_t *) pIn0; - vecIn0 = vecIn0 << 1; - vstrhq_p(pIn0, vecIn0, p0); - } -} - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @brief Processing function for Q15 complex FFT. - @param[in] S points to an instance of Q15 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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return none - */ -void arm_cfft_q15( - const arm_cfft_instance_q15 * S, - q15_t * pSrc, - uint8_t ifftFlag, - uint8_t bitReverseFlag) -{ - uint32_t fftLen = S->fftLen; - - if (ifftFlag == 1U) { - - switch (fftLen) { - case 16: - case 64: - case 256: - case 1024: - case 4096: - _arm_radix4_butterfly_inverse_q15_mve(S, pSrc, fftLen); - break; - - case 32: - case 128: - case 512: - case 2048: - arm_cfft_radix4by2_inverse_q15_mve(S, pSrc, fftLen); - break; - } - } else { - switch (fftLen) { - case 16: - case 64: - case 256: - case 1024: - case 4096: - _arm_radix4_butterfly_q15_mve(S, pSrc, fftLen); - break; - - case 32: - case 128: - case 512: - case 2048: - arm_cfft_radix4by2_q15_mve(S, pSrc, fftLen); - break; - } - } - - - if (bitReverseFlag) - { - - arm_bitreversal_16_inpl_mve((uint16_t*)pSrc, S->bitRevLength, S->pBitRevTable); - - } -} - -#else - -extern void arm_radix4_butterfly_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pCoef, - uint32_t twidCoefModifier); - -extern void arm_radix4_butterfly_inverse_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pCoef, - uint32_t twidCoefModifier); - -extern void arm_bitreversal_16( - uint16_t * pSrc, - const uint16_t bitRevLen, - const uint16_t * pBitRevTable); - -void arm_cfft_radix4by2_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pCoef); - -void arm_cfft_radix4by2_inverse_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pCoef); - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @brief Processing function for Q15 complex FFT. - @param[in] S points to an instance of Q15 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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables 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; -#if defined (ARM_MATH_DSP) - 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 l; - q15_t xt, yt, cosVal, sinVal; -#endif - - n2 = fftLen >> 1U; - -#if defined (ARM_MATH_DSP) - - for (i = n2; i > 0; i--) - { - coeff = read_q15x2_ia ((q15_t **) &pC); - - T = read_q15x2 (pSi); - T = __SHADD16(T, 0); /* this is just a SIMD arithmetic shift right by 1 */ - - S = read_q15x2 (pSl); - S = __SHADD16(S, 0); /* this is just a SIMD arithmetic shift right by 1 */ - - R = __QSUB16(T, S); - - write_q15x2_ia (&pSi, __SHADD16(T, S)); - -#ifndef ARM_MATH_BIG_ENDIAN - out1 = __SMUAD(coeff, R) >> 16U; - out2 = __SMUSDX(coeff, R); -#else - out1 = __SMUSDX(R, coeff) >> 16U; - out2 = __SMUAD(coeff, R); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - - write_q15x2_ia (&pSl, (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - } - -#else /* #if defined (ARM_MATH_DSP) */ - - for (i = 0; i < n2; i++) - { - cosVal = pCoef[2 * i]; - sinVal = pCoef[2 * i + 1]; - - 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[2 * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16U)) + - ((int16_t) (((q31_t) yt * sinVal) >> 16U)) ); - - pSrc[2 * l + 1] = (((int16_t) (((q31_t) yt * cosVal) >> 16U)) - - ((int16_t) (((q31_t) xt * sinVal) >> 16U)) ); - } - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* 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); - - n2 = fftLen >> 1U; - for (i = 0; i < n2; i++) - { - p0 = pSrc[4 * i + 0]; - p1 = pSrc[4 * i + 1]; - p2 = pSrc[4 * i + 2]; - p3 = pSrc[4 * i + 3]; - - p0 <<= 1U; - p1 <<= 1U; - p2 <<= 1U; - p3 <<= 1U; - - 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; -#if defined (ARM_MATH_DSP) - 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 l; - q15_t xt, yt, cosVal, sinVal; -#endif - - n2 = fftLen >> 1U; - -#if defined (ARM_MATH_DSP) - - for (i = n2; i > 0; i--) - { - coeff = read_q15x2_ia ((q15_t **) &pC); - - T = read_q15x2 (pSi); - T = __SHADD16(T, 0); /* this is just a SIMD arithmetic shift right by 1 */ - - S = read_q15x2 (pSl); - S = __SHADD16(S, 0); /* this is just a SIMD arithmetic shift right by 1 */ - - R = __QSUB16(T, S); - - write_q15x2_ia (&pSi, __SHADD16(T, S)); - -#ifndef ARM_MATH_BIG_ENDIAN - out1 = __SMUSD(coeff, R) >> 16U; - out2 = __SMUADX(coeff, R); -#else - out1 = __SMUADX(R, coeff) >> 16U; - out2 = __SMUSD(__QSUB(0, coeff), R); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - - write_q15x2_ia (&pSl, (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - } - -#else /* #if defined (ARM_MATH_DSP) */ - - for (i = 0; i < n2; i++) - { - cosVal = pCoef[2 * i]; - sinVal = pCoef[2 * i + 1]; - - 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[2 * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16U)) - - ((int16_t) (((q31_t) yt * sinVal) >> 16U)) ); - - pSrc[2 * l + 1] = (((int16_t) (((q31_t) yt * cosVal) >> 16U)) + - ((int16_t) (((q31_t) xt * sinVal) >> 16U)) ); - } - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* 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); - - n2 = fftLen >> 1U; - for (i = 0; i < n2; i++) - { - p0 = pSrc[4 * i + 0]; - p1 = pSrc[4 * i + 1]; - p2 = pSrc[4 * i + 2]; - p3 = pSrc[4 * i + 3]; - - p0 <<= 1U; - p1 <<= 1U; - p2 <<= 1U; - p3 <<= 1U; - - pSrc[4 * i + 0] = p0; - pSrc[4 * i + 1] = p1; - pSrc[4 * i + 2] = p2; - pSrc[4 * i + 3] = p3; - } -} - -#endif /* defined(ARM_MATH_MVEI) */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_q31.c deleted file mode 100644 index cbc89d8..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_q31.c +++ /dev/null @@ -1,876 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_q31.c - * Description: Combined Radix Decimation in Frequency CFFT fixed point processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - - - -#if defined(ARM_MATH_MVEI) - -#include "arm_vec_fft.h" - -static void arm_bitreversal_32_inpl_mve( - uint32_t *pSrc, - const uint16_t bitRevLen, - const uint16_t *pBitRevTab) - -{ - uint64_t *src = (uint64_t *) pSrc; - uint32_t blkCnt; /* loop counters */ - uint32x4_t bitRevTabOff; - uint32x4_t one = vdupq_n_u32(1); - - blkCnt = (bitRevLen / 2) / 2; - while (blkCnt > 0U) { - bitRevTabOff = vldrhq_u32(pBitRevTab); - pBitRevTab += 4; - - uint64x2_t bitRevOff1 = vmullbq_int_u32(bitRevTabOff, one); - uint64x2_t bitRevOff2 = vmulltq_int_u32(bitRevTabOff, one); - - uint64x2_t in1 = vldrdq_gather_offset_u64(src, bitRevOff1); - uint64x2_t in2 = vldrdq_gather_offset_u64(src, bitRevOff2); - - vstrdq_scatter_offset_u64(src, bitRevOff1, in2); - vstrdq_scatter_offset_u64(src, bitRevOff2, in1); - - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } -} - -static void _arm_radix4_butterfly_q31_mve( - const arm_cfft_instance_q31 * S, - q31_t *pSrc, - uint32_t fftLen) -{ - q31x4_t vecTmp0, vecTmp1; - q31x4_t vecSum0, vecDiff0, vecSum1, vecDiff1; - q31x4_t vecA, vecB, vecC, vecD; - q31x4_t vecW; - uint32_t blkCnt; - uint32_t n1, n2; - uint32_t stage = 0; - int32_t iter = 1; - static const uint32_t strides[4] = { - (0 - 16) * sizeof(q31_t *), (1 - 16) * sizeof(q31_t *), - (8 - 16) * sizeof(q31_t *), (9 - 16) * sizeof(q31_t *) - }; - - - /* - * Process first stages - * Each stage in middle stages provides two down scaling of the input - */ - n2 = fftLen; - n1 = n2; - n2 >>= 2u; - - for (int k = fftLen / 4u; k > 1; k >>= 2u) - { - for (int i = 0; i < iter; i++) - { - q31_t const *p_rearranged_twiddle_tab_stride2 = - &S->rearranged_twiddle_stride2[ - S->rearranged_twiddle_tab_stride2_arr[stage]]; - q31_t const *p_rearranged_twiddle_tab_stride3 = &S->rearranged_twiddle_stride3[ - S->rearranged_twiddle_tab_stride3_arr[stage]]; - q31_t const *p_rearranged_twiddle_tab_stride1 = - &S->rearranged_twiddle_stride1[ - S->rearranged_twiddle_tab_stride1_arr[stage]]; - q31_t const *pW1, *pW2, *pW3; - q31_t *inA = pSrc + CMPLX_DIM * i * n1; - q31_t *inB = inA + n2 * CMPLX_DIM; - q31_t *inC = inB + n2 * CMPLX_DIM; - q31_t *inD = inC + n2 * CMPLX_DIM; - - pW1 = p_rearranged_twiddle_tab_stride1; - pW2 = p_rearranged_twiddle_tab_stride2; - pW3 = p_rearranged_twiddle_tab_stride3; - - blkCnt = n2 / 2; - /* - * load 2 x q31 complex pair - */ - vecA = vldrwq_s32(inA); - vecC = vldrwq_s32(inC); - while (blkCnt > 0U) - { - vecB = vldrwq_s32(inB); - vecD = vldrwq_s32(inD); - - vecSum0 = vhaddq(vecA, vecC); - vecDiff0 = vhsubq(vecA, vecC); - - vecSum1 = vhaddq(vecB, vecD); - vecDiff1 = vhsubq(vecB, vecD); - /* - * [ 1 1 1 1 ] * [ A B C D ]' .* 1 - */ - vecTmp0 = vhaddq(vecSum0, vecSum1); - vst1q(inA, vecTmp0); - inA += 4; - /* - * [ 1 -1 1 -1 ] * [ A B C D ]' - */ - vecTmp0 = vhsubq(vecSum0, vecSum1); - /* - * [ 1 -1 1 -1 ] * [ A B C D ]'.* W2 - */ - vecW = vld1q(pW2); - pW2 += 4; - vecTmp1 = MVE_CMPLX_MULT_FX_AxB(vecW, vecTmp0); - - vst1q(inB, vecTmp1); - inB += 4; - /* - * [ 1 -i -1 +i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_SUB_FX_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 -i -1 +i ] * [ A B C D ]'.* W1 - */ - vecW = vld1q(pW1); - pW1 += 4; - vecTmp1 = MVE_CMPLX_MULT_FX_AxB(vecW, vecTmp0); - vst1q(inC, vecTmp1); - inC += 4; - /* - * [ 1 +i -1 -i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_ADD_FX_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 +i -1 -i ] * [ A B C D ]'.* W3 - */ - vecW = vld1q(pW3); - pW3 += 4; - vecTmp1 = MVE_CMPLX_MULT_FX_AxB(vecW, vecTmp0); - vst1q(inD, vecTmp1); - inD += 4; - - vecA = vldrwq_s32(inA); - vecC = vldrwq_s32(inC); - - blkCnt--; - } - } - n1 = n2; - n2 >>= 2u; - iter = iter << 2; - stage++; - } - - /* - * End of 1st 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 - */ - uint32x4_t vecScGathAddr = *(uint32x4_t *) strides; - vecScGathAddr = vecScGathAddr + (uint32_t) pSrc; - - /* - * load scheduling - */ - vecA = vldrwq_gather_base_wb_s32(&vecScGathAddr, 64); - vecC = vldrwq_gather_base_s32(vecScGathAddr, 16); - - blkCnt = (fftLen >> 3); - while (blkCnt > 0U) - { - vecSum0 = vhaddq(vecA, vecC); - vecDiff0 = vhsubq(vecA, vecC); - - vecB = vldrwq_gather_base_s32(vecScGathAddr, 8); - vecD = vldrwq_gather_base_s32(vecScGathAddr, 24); - - vecSum1 = vhaddq(vecB, vecD); - vecDiff1 = vhsubq(vecB, vecD); - /* - * pre-load for next iteration - */ - vecA = vldrwq_gather_base_wb_s32(&vecScGathAddr, 64); - vecC = vldrwq_gather_base_s32(vecScGathAddr, 16); - - vecTmp0 = vhaddq(vecSum0, vecSum1); - vstrwq_scatter_base_s32(vecScGathAddr, -64, vecTmp0); - - vecTmp0 = vhsubq(vecSum0, vecSum1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 8, vecTmp0); - - vecTmp0 = MVE_CMPLX_SUB_FX_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 16, vecTmp0); - - vecTmp0 = MVE_CMPLX_ADD_FX_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 24, vecTmp0); - - blkCnt--; - } - - /* - * 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 - */ -} - - -static void arm_cfft_radix4by2_q31_mve(const arm_cfft_instance_q31 *S, q31_t *pSrc, uint32_t fftLen) -{ - uint32_t n2; - q31_t *pIn0; - q31_t *pIn1; - const q31_t *pCoef = S->pTwiddle; - uint32_t blkCnt; - q31x4_t vecIn0, vecIn1, vecSum, vecDiff; - q31x4_t vecCmplxTmp, vecTw; - - n2 = fftLen >> 1; - pIn0 = pSrc; - pIn1 = pSrc + fftLen; - - blkCnt = n2 / 2; - - while (blkCnt > 0U) - { - vecIn0 = vld1q_s32(pIn0); - vecIn1 = vld1q_s32(pIn1); - - vecIn0 = vecIn0 >> 1; - vecIn1 = vecIn1 >> 1; - vecSum = vhaddq(vecIn0, vecIn1); - vst1q(pIn0, vecSum); - pIn0 += 4; - - vecTw = vld1q_s32(pCoef); - pCoef += 4; - vecDiff = vhsubq(vecIn0, vecIn1); - - vecCmplxTmp = MVE_CMPLX_MULT_FX_AxConjB(vecDiff, vecTw); - vst1q(pIn1, vecCmplxTmp); - pIn1 += 4; - - blkCnt--; - } - - _arm_radix4_butterfly_q31_mve(S, pSrc, n2); - - _arm_radix4_butterfly_q31_mve(S, pSrc + fftLen, n2); - - pIn0 = pSrc; - blkCnt = (fftLen << 1) >> 2; - while (blkCnt > 0U) - { - vecIn0 = vld1q_s32(pIn0); - vecIn0 = vecIn0 << 1; - vst1q(pIn0, vecIn0); - pIn0 += 4; - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = (fftLen << 1) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - - vecIn0 = vld1q_s32(pIn0); - vecIn0 = vecIn0 << 1; - vstrwq_p(pIn0, vecIn0, p0); - } - -} - -static void _arm_radix4_butterfly_inverse_q31_mve( - const arm_cfft_instance_q31 *S, - q31_t *pSrc, - uint32_t fftLen) -{ - q31x4_t vecTmp0, vecTmp1; - q31x4_t vecSum0, vecDiff0, vecSum1, vecDiff1; - q31x4_t vecA, vecB, vecC, vecD; - q31x4_t vecW; - uint32_t blkCnt; - uint32_t n1, n2; - uint32_t stage = 0; - int32_t iter = 1; - static const uint32_t strides[4] = { - (0 - 16) * sizeof(q31_t *), (1 - 16) * sizeof(q31_t *), - (8 - 16) * sizeof(q31_t *), (9 - 16) * sizeof(q31_t *) - }; - - /* - * Process first stages - * Each stage in middle stages provides two down scaling of the input - */ - n2 = fftLen; - n1 = n2; - n2 >>= 2u; - - for (int k = fftLen / 4u; k > 1; k >>= 2u) - { - for (int i = 0; i < iter; i++) - { - q31_t const *p_rearranged_twiddle_tab_stride2 = - &S->rearranged_twiddle_stride2[ - S->rearranged_twiddle_tab_stride2_arr[stage]]; - q31_t const *p_rearranged_twiddle_tab_stride3 = &S->rearranged_twiddle_stride3[ - S->rearranged_twiddle_tab_stride3_arr[stage]]; - q31_t const *p_rearranged_twiddle_tab_stride1 = - &S->rearranged_twiddle_stride1[ - S->rearranged_twiddle_tab_stride1_arr[stage]]; - - q31_t const *pW1, *pW2, *pW3; - q31_t *inA = pSrc + CMPLX_DIM * i * n1; - q31_t *inB = inA + n2 * CMPLX_DIM; - q31_t *inC = inB + n2 * CMPLX_DIM; - q31_t *inD = inC + n2 * CMPLX_DIM; - - pW1 = p_rearranged_twiddle_tab_stride1; - pW2 = p_rearranged_twiddle_tab_stride2; - pW3 = p_rearranged_twiddle_tab_stride3; - - blkCnt = n2 / 2; - /* - * load 2 x q31 complex pair - */ - vecA = vldrwq_s32(inA); - vecC = vldrwq_s32(inC); - while (blkCnt > 0U) - { - vecB = vldrwq_s32(inB); - vecD = vldrwq_s32(inD); - - vecSum0 = vhaddq(vecA, vecC); - vecDiff0 = vhsubq(vecA, vecC); - - vecSum1 = vhaddq(vecB, vecD); - vecDiff1 = vhsubq(vecB, vecD); - /* - * [ 1 1 1 1 ] * [ A B C D ]' .* 1 - */ - vecTmp0 = vhaddq(vecSum0, vecSum1); - vst1q(inA, vecTmp0); - inA += 4; - /* - * [ 1 -1 1 -1 ] * [ A B C D ]' - */ - vecTmp0 = vhsubq(vecSum0, vecSum1); - /* - * [ 1 -1 1 -1 ] * [ A B C D ]'.* W2 - */ - vecW = vld1q(pW2); - pW2 += 4; - vecTmp1 = MVE_CMPLX_MULT_FX_AxConjB(vecTmp0, vecW); - - vst1q(inB, vecTmp1); - inB += 4; - /* - * [ 1 -i -1 +i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_ADD_FX_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 -i -1 +i ] * [ A B C D ]'.* W1 - */ - vecW = vld1q(pW1); - pW1 += 4; - vecTmp1 = MVE_CMPLX_MULT_FX_AxConjB(vecTmp0, vecW); - vst1q(inC, vecTmp1); - inC += 4; - /* - * [ 1 +i -1 -i ] * [ A B C D ]' - */ - vecTmp0 = MVE_CMPLX_SUB_FX_A_ixB(vecDiff0, vecDiff1); - /* - * [ 1 +i -1 -i ] * [ A B C D ]'.* W3 - */ - vecW = vld1q(pW3); - pW3 += 4; - vecTmp1 = MVE_CMPLX_MULT_FX_AxConjB(vecTmp0, vecW); - vst1q(inD, vecTmp1); - inD += 4; - - vecA = vldrwq_s32(inA); - vecC = vldrwq_s32(inC); - - blkCnt--; - } - } - n1 = n2; - n2 >>= 2u; - iter = iter << 2; - stage++; - } - - /* - * End of 1st 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 - */ - uint32x4_t vecScGathAddr = *(uint32x4_t *) strides; - vecScGathAddr = vecScGathAddr + (uint32_t) pSrc; - - /* - * load scheduling - */ - vecA = vldrwq_gather_base_wb_s32(&vecScGathAddr, 64); - vecC = vldrwq_gather_base_s32(vecScGathAddr, 16); - - blkCnt = (fftLen >> 3); - while (blkCnt > 0U) - { - vecSum0 = vhaddq(vecA, vecC); - vecDiff0 = vhsubq(vecA, vecC); - - vecB = vldrwq_gather_base_s32(vecScGathAddr, 8); - vecD = vldrwq_gather_base_s32(vecScGathAddr, 24); - - vecSum1 = vhaddq(vecB, vecD); - vecDiff1 = vhsubq(vecB, vecD); - /* - * pre-load for next iteration - */ - vecA = vldrwq_gather_base_wb_s32(&vecScGathAddr, 64); - vecC = vldrwq_gather_base_s32(vecScGathAddr, 16); - - vecTmp0 = vhaddq(vecSum0, vecSum1); - vstrwq_scatter_base_s32(vecScGathAddr, -64, vecTmp0); - - vecTmp0 = vhsubq(vecSum0, vecSum1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 8, vecTmp0); - - vecTmp0 = MVE_CMPLX_ADD_FX_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 16, vecTmp0); - - vecTmp0 = MVE_CMPLX_SUB_FX_A_ixB(vecDiff0, vecDiff1); - vstrwq_scatter_base_s32(vecScGathAddr, -64 + 24, vecTmp0); - - blkCnt--; - } - /* - * 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 - */ -} - -static void arm_cfft_radix4by2_inverse_q31_mve(const arm_cfft_instance_q31 *S, q31_t *pSrc, uint32_t fftLen) -{ - uint32_t n2; - q31_t *pIn0; - q31_t *pIn1; - const q31_t *pCoef = S->pTwiddle; - - //uint16_t twidCoefModifier = arm_cfft_radix2_twiddle_factor(S->fftLen); - //q31_t twidIncr = (2 * twidCoefModifier * sizeof(q31_t)); - uint32_t blkCnt; - //uint64x2_t vecOffs; - q31x4_t vecIn0, vecIn1, vecSum, vecDiff; - q31x4_t vecCmplxTmp, vecTw; - - n2 = fftLen >> 1; - - pIn0 = pSrc; - pIn1 = pSrc + fftLen; - //vecOffs[0] = 0; - //vecOffs[1] = (uint64_t) twidIncr; - blkCnt = n2 / 2; - - while (blkCnt > 0U) - { - vecIn0 = vld1q_s32(pIn0); - vecIn1 = vld1q_s32(pIn1); - - vecIn0 = vecIn0 >> 1; - vecIn1 = vecIn1 >> 1; - vecSum = vhaddq(vecIn0, vecIn1); - vst1q(pIn0, vecSum); - pIn0 += 4; - - //vecTw = (q31x4_t) vldrdq_gather_offset_s64(pCoef, vecOffs); - vecTw = vld1q_s32(pCoef); - pCoef += 4; - vecDiff = vhsubq(vecIn0, vecIn1); - - vecCmplxTmp = MVE_CMPLX_MULT_FX_AxB(vecDiff, vecTw); - vst1q(pIn1, vecCmplxTmp); - pIn1 += 4; - - //vecOffs = vaddq((q31x4_t) vecOffs, 2 * twidIncr); - blkCnt--; - } - - _arm_radix4_butterfly_inverse_q31_mve(S, pSrc, n2); - - _arm_radix4_butterfly_inverse_q31_mve(S, pSrc + fftLen, n2); - - pIn0 = pSrc; - blkCnt = (fftLen << 1) >> 2; - while (blkCnt > 0U) - { - vecIn0 = vld1q_s32(pIn0); - vecIn0 = vecIn0 << 1; - vst1q(pIn0, vecIn0); - pIn0 += 4; - blkCnt--; - } - /* - * tail - * (will be merged thru tail predication) - */ - blkCnt = (fftLen << 1) & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - - vecIn0 = vld1q_s32(pIn0); - vecIn0 = vecIn0 << 1; - vstrwq_p(pIn0, vecIn0, p0); - } - -} - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @brief Processing function for the Q31 complex FFT. - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return none - */ -void arm_cfft_q31( - const arm_cfft_instance_q31 * S, - q31_t * pSrc, - uint8_t ifftFlag, - uint8_t bitReverseFlag) -{ - uint32_t fftLen = S->fftLen; - - if (ifftFlag == 1U) { - - switch (fftLen) { - case 16: - case 64: - case 256: - case 1024: - case 4096: - _arm_radix4_butterfly_inverse_q31_mve(S, pSrc, fftLen); - break; - - case 32: - case 128: - case 512: - case 2048: - arm_cfft_radix4by2_inverse_q31_mve(S, pSrc, fftLen); - break; - } - } else { - switch (fftLen) { - case 16: - case 64: - case 256: - case 1024: - case 4096: - _arm_radix4_butterfly_q31_mve(S, pSrc, fftLen); - break; - - case 32: - case 128: - case 512: - case 2048: - arm_cfft_radix4by2_q31_mve(S, pSrc, fftLen); - break; - } - } - - - if (bitReverseFlag) - { - - arm_bitreversal_32_inpl_mve((uint32_t*)pSrc, S->bitRevLength, S->pBitRevTable); - - } -} -#else - -extern void arm_radix4_butterfly_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pCoef, - uint32_t twidCoefModifier); - -extern void arm_radix4_butterfly_inverse_q31( - q31_t * pSrc, - uint32_t fftLen, - const 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 - @{ - */ - -/** - @brief Processing function for the Q31 complex FFT. - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables 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; - q31_t xt, yt, cosVal, sinVal; - q31_t p0, p1; - - n2 = fftLen >> 1U; - for (i = 0; i < n2; i++) - { - cosVal = pCoef[2 * i]; - sinVal = pCoef[2 * i + 1]; - - l = i + n2; - - xt = (pSrc[2 * i] >> 2U) - (pSrc[2 * l] >> 2U); - pSrc[2 * i] = (pSrc[2 * i] >> 2U) + (pSrc[2 * l] >> 2U); - - yt = (pSrc[2 * i + 1] >> 2U) - (pSrc[2 * l + 1] >> 2U); - pSrc[2 * i + 1] = (pSrc[2 * l + 1] >> 2U) + (pSrc[2 * i + 1] >> 2U); - - 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[2 * l] = p0 << 1; - pSrc[2 * l + 1] = 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); - - n2 = fftLen >> 1U; - for (i = 0; i < n2; i++) - { - p0 = pSrc[4 * i + 0]; - p1 = pSrc[4 * i + 1]; - xt = pSrc[4 * i + 2]; - yt = pSrc[4 * i + 3]; - - p0 <<= 1U; - p1 <<= 1U; - xt <<= 1U; - yt <<= 1U; - - 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; - q31_t xt, yt, cosVal, sinVal; - q31_t p0, p1; - - n2 = fftLen >> 1U; - for (i = 0; i < n2; i++) - { - cosVal = pCoef[2 * i]; - sinVal = pCoef[2 * i + 1]; - - l = i + n2; - - xt = (pSrc[2 * i] >> 2U) - (pSrc[2 * l] >> 2U); - pSrc[2 * i] = (pSrc[2 * i] >> 2U) + (pSrc[2 * l] >> 2U); - - yt = (pSrc[2 * i + 1] >> 2U) - (pSrc[2 * l + 1] >> 2U); - pSrc[2 * i + 1] = (pSrc[2 * l + 1] >> 2U) + (pSrc[2 * i + 1] >> 2U); - - 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[2 * l] = p0 << 1U; - pSrc[2 * l + 1] = p1 << 1U; - } - - /* 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); - - n2 = fftLen >> 1U; - for (i = 0; i < n2; i++) - { - p0 = pSrc[4 * i + 0]; - p1 = pSrc[4 * i + 1]; - xt = pSrc[4 * i + 2]; - yt = pSrc[4 * i + 3]; - - p0 <<= 1U; - p1 <<= 1U; - xt <<= 1U; - yt <<= 1U; - - pSrc[4 * i + 0] = p0; - pSrc[4 * i + 1] = p1; - pSrc[4 * i + 2] = xt; - pSrc[4 * i + 3] = yt; - } -} -#endif /* defined(ARM_MATH_MVEI) */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_f32.c deleted file mode 100644 index f75e329..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_f32.c +++ /dev/null @@ -1,470 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix2_f32.c - * Description: Radix-2 Decimation in Frequency CFFT & CIFFT Floating point processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -void arm_radix2_butterfly_f32( - float32_t * pSrc, - uint32_t fftLen, - const float32_t * pCoef, - uint16_t twidCoefModifier); - -void arm_radix2_butterfly_inverse_f32( - float32_t * pSrc, - uint32_t fftLen, - const float32_t * pCoef, - uint16_t twidCoefModifier, - float32_t onebyfftLen); - -extern void arm_bitreversal_f32( - float32_t * pSrc, - uint16_t fftSize, - uint16_t bitRevFactor, - const uint16_t * pBitRevTab); - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @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 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 - return none - */ - -void arm_radix2_butterfly_f32( - float32_t * pSrc, - uint32_t fftLen, - const 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; - -#if defined (ARM_MATH_DSP) - - /* 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 /* #if defined (ARM_MATH_DSP) */ - - 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 /* #if defined (ARM_MATH_DSP) */ - -} - - -void arm_radix2_butterfly_inverse_f32( - float32_t * pSrc, - uint32_t fftLen, - const 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; - -#if defined (ARM_MATH_DSP) - - 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 /* #if defined (ARM_MATH_DSP) */ - - 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[2 * l] = p2; - - pSrc[2 * i + 1] = p1; - pSrc[2 * l + 1] = p3; - } // butterfly loop end - -#endif /* #if defined (ARM_MATH_DSP) */ - -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_f32.c deleted file mode 100644 index 417ad91..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_f32.c +++ /dev/null @@ -1,197 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix2_init_f32.c - * Description: Radix-2 Decimation in Frequency Floating-point CFFT & CIFFT Initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length - - @par Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_q15.c deleted file mode 100644 index 3d865d0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_q15.c +++ /dev/null @@ -1,182 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix2_init_q15.c - * Description: Radix-2 Decimation in Frequency Q15 FFT & IFFT initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length - - @par Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_q31.c deleted file mode 100644 index f4a20d6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_init_q31.c +++ /dev/null @@ -1,179 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix2_init_q31.c - * Description: Radix-2 Decimation in Frequency Fixed-point CFFT & CIFFT Initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 in the future. - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length - - @par Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_q15.c deleted file mode 100644 index 2a03b57..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_q15.c +++ /dev/null @@ -1,689 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix2_q15.c - * Description: Radix-2 Decimation in Frequency CFFT & CIFFT Fixed point processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -void arm_radix2_butterfly_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pCoef, - uint16_t twidCoefModifier); - -void arm_radix2_butterfly_inverse_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pCoef, - uint16_t twidCoefModifier); - -void arm_bitreversal_q15( - q15_t * pSrc, - uint32_t fftLen, - uint16_t bitRevFactor, - const uint16_t * pBitRevTab); - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @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 in the future. - @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, - const q15_t * pCoef, - uint16_t twidCoefModifier) -{ -#if defined (ARM_MATH_DSP) - - uint32_t i, j, k, l; - uint32_t 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 = read_q15x2 ((q15_t *)pCoef + (ia * 2U)); - - ia = ia + twidCoefModifier; - - l = i + n2; - - T = read_q15x2 (pSrc + (2 * i)); - in = ((int16_t) (T & 0xFFFF)) >> 1; - T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF); - - S = read_q15x2 (pSrc + (2 * l)); - in = ((int16_t) (S & 0xFFFF)) >> 1; - S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF); - - R = __QSUB16(T, S); - - write_q15x2 (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 */ - - write_q15x2 (pSrc + (2U * l), (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - - coeff = read_q15x2 ((q15_t *)pCoef + (ia * 2U)); - - ia = ia + twidCoefModifier; - - /* loop for butterfly */ - i++; - l++; - - T = read_q15x2 (pSrc + (2 * i)); - in = ((int16_t) (T & 0xFFFF)) >> 1; - T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF); - - S = read_q15x2 (pSrc + (2 * l)); - in = ((int16_t) (S & 0xFFFF)) >> 1; - S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF); - - R = __QSUB16(T, S); - - write_q15x2 (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 */ - - write_q15x2 (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 = read_q15x2 ((q15_t *)pCoef + (ia * 2U)); - - ia = ia + twidCoefModifier; - - /* loop for butterfly */ - for (i = j; i < fftLen; i += n1) - { - l = i + n2; - - T = read_q15x2 (pSrc + (2 * i)); - - S = read_q15x2 (pSrc + (2 * l)); - - R = __QSUB16(T, S); - - write_q15x2 (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 */ - - write_q15x2 (pSrc + (2U * l), (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - - i += n1; - - l = i + n2; - - T = read_q15x2 (pSrc + (2 * i)); - - S = read_q15x2 (pSrc + (2 * l)); - - R = __QSUB16(T, S); - - write_q15x2 (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 */ - - write_q15x2 (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 = read_q15x2 ((q15_t *)pCoef + (ia * 2U)); - - ia = ia + twidCoefModifier; - - /* loop for butterfly */ - for (i = 0; i < fftLen; i += n1) - { - l = i + n2; - - T = read_q15x2 (pSrc + (2 * i)); - - S = read_q15x2 (pSrc + (2 * l)); - - R = __QSUB16(T, S); - - write_q15x2 (pSrc + (2 * i), __QADD16(T, S)); - - write_q15x2 (pSrc + (2 * l), R); - - i += n1; - l = i + n2; - - T = read_q15x2 (pSrc + (2 * i)); - - S = read_q15x2 (pSrc + (2 * l)); - - R = __QSUB16(T, S); - - write_q15x2 (pSrc + (2 * i), __QADD16(T, S)); - - write_q15x2 (pSrc + (2 * l), R); - - } /* groups loop end */ - - -#else /* #if defined (ARM_MATH_DSP) */ - - uint32_t i, j, k, l; - uint32_t 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[2 * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) + - ((int16_t) (((q31_t) yt * sinVal) >> 16))); - - pSrc[2U * l + 1] = (((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[2 * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) + - ((int16_t) (((q31_t) yt * sinVal) >> 16))); - - pSrc[2U * l + 1] = (((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[2 * l] = xt; - - pSrc[2 * l + 1] = yt; - - } /* butterfly loop end */ - - } /* groups loop end */ - - twidCoefModifier = twidCoefModifier << 1U; - -#endif /* #if defined (ARM_MATH_DSP) */ - -} - - -void arm_radix2_butterfly_inverse_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pCoef, - uint16_t twidCoefModifier) -{ -#if defined (ARM_MATH_DSP) - - uint32_t i, j, k, l; - uint32_t 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 = read_q15x2 ((q15_t *)pCoef + (ia * 2U)); - - ia = ia + twidCoefModifier; - - l = i + n2; - - T = read_q15x2 (pSrc + (2 * i)); - in = ((int16_t) (T & 0xFFFF)) >> 1; - T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF); - - S = read_q15x2 (pSrc + (2 * l)); - in = ((int16_t) (S & 0xFFFF)) >> 1; - S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF); - - R = __QSUB16(T, S); - - write_q15x2 (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 */ - - write_q15x2 (pSrc + (2 * l), (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - - coeff = read_q15x2 ((q15_t *)pCoef + (ia * 2U)); - - ia = ia + twidCoefModifier; - - /* loop for butterfly */ - i++; - l++; - - T = read_q15x2 (pSrc + (2 * i)); - in = ((int16_t) (T & 0xFFFF)) >> 1; - T = ((T >> 1) & 0xFFFF0000) | (in & 0xFFFF); - - S = read_q15x2 (pSrc + (2 * l)); - in = ((int16_t) (S & 0xFFFF)) >> 1; - S = ((S >> 1) & 0xFFFF0000) | (in & 0xFFFF); - - R = __QSUB16(T, S); - - write_q15x2 (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 */ - - write_q15x2 (pSrc + (2 * 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 = read_q15x2 ((q15_t *)pCoef + (ia * 2U)); - - ia = ia + twidCoefModifier; - - /* loop for butterfly */ - for (i = j; i < fftLen; i += n1) - { - l = i + n2; - - T = read_q15x2 (pSrc + (2 * i)); - - S = read_q15x2 (pSrc + (2 * l)); - - R = __QSUB16(T, S); - - write_q15x2 (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 */ - - write_q15x2 (pSrc + (2 * l), (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - - i += n1; - - l = i + n2; - - T = read_q15x2 (pSrc + (2 * i)); - - S = read_q15x2 (pSrc + (2 * l)); - - R = __QSUB16(T, S); - - write_q15x2 (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 */ - - write_q15x2 (pSrc + (2 * 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 = read_q15x2 ((q15_t *)pCoef + (ia * 2U)); - - ia = ia + twidCoefModifier; - - /* loop for butterfly */ - for (i = j; i < fftLen; i += n1) - { - l = i + n2; - - T = read_q15x2 (pSrc + (2 * i)); - - S = read_q15x2 (pSrc + (2 * l)); - - R = __QSUB16(T, S); - - write_q15x2 (pSrc + (2 * i), __QADD16(T, S)); - - write_q15x2 (pSrc + (2 * l), R); - - } /* butterfly loop end */ - - } /* groups loop end */ - - twidCoefModifier = twidCoefModifier << 1U; - -#else /* #if defined (ARM_MATH_DSP) */ - - uint32_t i, j, k, l; - uint32_t 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[2 * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) - - ((int16_t) (((q31_t) yt * sinVal) >> 16))); - - pSrc[2 * l + 1] = (((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[2 * l] = (((int16_t) (((q31_t) xt * cosVal) >> 16)) - - ((int16_t) (((q31_t) yt * sinVal) >> 16)) ); - - pSrc[2 * l + 1] = (((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[2 * l] = xt; - - pSrc[2 * l + 1] = yt; - - } /* groups loop end */ - - -#endif /* #if defined (ARM_MATH_DSP) */ - -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_q31.c deleted file mode 100644 index 6c79a65..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix2_q31.c +++ /dev/null @@ -1,337 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix2_q31.c - * Description: Radix-2 Decimation in Frequency CFFT & CIFFT Fixed point processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -void arm_radix2_butterfly_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pCoef, - uint16_t twidCoefModifier); - -void arm_radix2_butterfly_inverse_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pCoef, - uint16_t twidCoefModifier); - -void arm_bitreversal_q31( - q31_t * pSrc, - uint32_t fftLen, - uint16_t bitRevFactor, - const uint16_t * pBitRevTab); - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @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 in the future. - @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, - const 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, - const 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_f32.c deleted file mode 100644 index 9629145..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_f32.c +++ /dev/null @@ -1,1200 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix4_f32.c - * Description: Radix-4 Decimation in Frequency CFFT & CIFFT Floating point processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -extern void arm_bitreversal_f32( - float32_t * pSrc, - uint16_t fftSize, - uint16_t bitRevFactor, - const uint16_t * pBitRevTab); - -void arm_radix4_butterfly_f32( - float32_t * pSrc, - uint16_t fftLen, - const float32_t * pCoef, - uint16_t twidCoefModifier); - -void arm_radix4_butterfly_inverse_f32( - float32_t * pSrc, - uint16_t fftLen, - const float32_t * pCoef, - uint16_t twidCoefModifier, - float32_t onebyfftLen); - - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @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 - */ - -/* ---------------------------------------------------------------------- - * 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, - const 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - 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; - - /* 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 /* #if defined (ARM_MATH_LOOPUNROLL) */ - -} - -/** - 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, - const 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; - -#if defined (ARM_MATH_LOOPUNROLL) - - 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; - - /* 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 /* #if defined (ARM_MATH_LOOPUNROLL) */ -} - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_f32.c deleted file mode 100644 index 930c2c1..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_f32.c +++ /dev/null @@ -1,156 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix4_init_f32.c - * Description: Radix-4 Decimation in Frequency Floating-point CFFT & CIFFT Initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length - - @par Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_q15.c deleted file mode 100644 index 0090688..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_q15.c +++ /dev/null @@ -1,145 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix4_init_q15.c - * Description: Radix-4 Decimation in Frequency Q15 FFT & IFFT initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 in the future. - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length - - @par Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_q31.c deleted file mode 100644 index 17d16b7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_init_q31.c +++ /dev/null @@ -1,141 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix4_init_q31.c - * Description: Radix-4 Decimation in Frequency Q31 FFT & IFFT initialization function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 in the future. - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length - - @par Details - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_q15.c deleted file mode 100644 index f07c5ec..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_q15.c +++ /dev/null @@ -1,1809 +0,0 @@ -/* ---------------------------------------------------------------------- - * 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 - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - - -void arm_radix4_butterfly_q15( - q15_t * pSrc16, - uint32_t fftLen, - const q15_t * pCoef16, - uint32_t twidCoefModifier); - -void arm_radix4_butterfly_inverse_q15( - q15_t * pSrc16, - uint32_t fftLen, - const q15_t * pCoef16, - uint32_t twidCoefModifier); - -void arm_bitreversal_q15( - q15_t * pSrc, - uint32_t fftLen, - uint16_t bitRevFactor, - const uint16_t * pBitRevTab); - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup ComplexFFT - @{ - */ - - -/** - @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 in the future. - @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: - 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, - const q15_t * pCoef16, - uint32_t twidCoefModifier) -{ - -#if defined (ARM_MATH_DSP) - - 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 = read_q15x2 (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 = read_q15x2 (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 = read_q15x2 (pSi1); - T = __SHADD16(T, 0); - T = __SHADD16(T, 0); - - /* Read yd (real), xd(imag) input */ - U = read_q15x2 (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 */ - write_q15x2_ia (&pSi0, __SHADD16(R, T)); - - /* R = packed((ya + yc) - (yb + yd), (xa + xc)- (xb + xd)) */ - R = __QSUB16(R, T); - - /* co2 & si2 are read from SIMD Coefficient pointer */ - C2 = read_q15x2 ((q15_t *) 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 = read_q15x2 (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 */ - write_q15x2_ia (&pSi1, (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - - /* Butterfly calculations */ - /* U = packed(yd, xd) */ - U = read_q15x2 (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 = read_q15x2 ((q15_t *) 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 */ - write_q15x2_ia (&pSi2, ((out2) & 0xFFFF0000) | ((out1) & 0x0000FFFF)); - - /* co3 & si3 are read from SIMD Coefficient pointer */ - C3 = read_q15x2 ((q15_t *) 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 */ - write_q15x2_ia (&pSi3, ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - - /* 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 = read_q15x2 ((q15_t *) pCoef16 + (2U * ic)); - C2 = read_q15x2 ((q15_t *) pCoef16 + (4U * ic)); - C3 = read_q15x2 ((q15_t *) 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 = read_q15x2 (pSi0); - - /* Read yc (real), xc(imag) input */ - S = read_q15x2 (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 = read_q15x2 (pSi1); - - /* Read yd (real), xd(imag) input */ - U = read_q15x2 (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); - write_q15x2 (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 = read_q15x2 (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) */ - write_q15x2 (pSi1, ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - pSi1 += 2 * n1; - - /* Butterfly calculations */ - - /* Read yd (real), xd(imag) input */ - U = read_q15x2 (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) */ - write_q15x2 (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) */ - write_q15x2 (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 = read_q15x2_ia ((q15_t **) &ptr1); - - /* Read xb (real), yb(imag) input */ - xbyb = read_q15x2_ia ((q15_t **) &ptr1); - - /* Read xc (real), yc(imag) input */ - xcyc = read_q15x2_ia ((q15_t **) &ptr1); - - /* Read xd (real), yd(imag) input */ - xdyd = read_q15x2_ia ((q15_t **) &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 */ - write_q15x2_ia (&ptr1, __SHADD16(R, T)); - - /* T = packed((yb + yd), (xb + xd)) */ - T = __QADD16(xbyb, xdyd); - - /* xc' = (xa-xb+xc-xd) */ - /* yc' = (ya-yb+yc-yd) */ - write_q15x2_ia (&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) */ - write_q15x2_ia (&ptr1, __SHSAX(S, U)); - - /* xd' = (xa-yb-xc+yd) */ - /* yd' = (ya+xb-yc-xd) */ - write_q15x2_ia (&ptr1, __SHASX(S, U)); -#else - /* xb' = (xa+yb-xc-yd) */ - /* yb' = (ya-xb-yc+xd) */ - write_q15x2_ia (&ptr1, __SHASX(S, U)); - - /* xd' = (xa-yb-xc+yd) */ - /* yd' = (ya+xb-yc-xd) */ - write_q15x2_ia (&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 /* #if defined (ARM_MATH_DSP) */ - - 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 /* #if defined (ARM_MATH_DSP) */ - -} - - -/** - @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, - const q15_t * pCoef16, - uint32_t twidCoefModifier) -{ - -#if defined (ARM_MATH_DSP) - - 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 = read_q15x2 (pSi0); - T = __SHADD16(T, 0); - T = __SHADD16(T, 0); - - /* Read yc (real), xc(imag) input */ - S = read_q15x2 (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 = read_q15x2 (pSi1); - T = __SHADD16(T, 0); - T = __SHADD16(T, 0); - - /* Read yd (real), xd(imag) input */ - U = read_q15x2 (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 */ - write_q15x2_ia (&pSi0, __SHADD16(R, T)); - - /* R = packed((ya + yc) - (yb + yd), (xa + xc)- (xb + xd)) */ - R = __QSUB16(R, T); - - /* co2 & si2 are read from SIMD Coefficient pointer */ - C2 = read_q15x2 ((q15_t *) 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 = read_q15x2 (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 */ - write_q15x2_ia (&pSi1, (q31_t) ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - - /* Butterfly calculations */ - /* U = packed(yd, xd) */ - U = read_q15x2 (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 = read_q15x2 ((q15_t *) 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 */ - write_q15x2_ia (&pSi2, ((out2) & 0xFFFF0000) | ((out1) & 0x0000FFFF)); - - /* co3 & si3 are read from SIMD Coefficient pointer */ - C3 = read_q15x2 ((q15_t *) 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 */ - write_q15x2_ia (&pSi3, ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - - /* 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 = read_q15x2 ((q15_t *) pCoef16 + (2U * ic)); - C2 = read_q15x2 ((q15_t *) pCoef16 + (4U * ic)); - C3 = read_q15x2 ((q15_t *) 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 = read_q15x2 (pSi0); - - /* Read yc (real), xc(imag) input */ - S = read_q15x2 (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 = read_q15x2 (pSi1); - - /* Read yd (real), xd(imag) input */ - U = read_q15x2 (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); - write_q15x2 (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 = read_q15x2 (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) */ - write_q15x2 (pSi1, ((out2) & 0xFFFF0000) | (out1 & 0x0000FFFF)); - pSi1 += 2 * n1; - - /* Butterfly calculations */ - - /* Read yd (real), xd(imag) input */ - U = read_q15x2 (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) */ - write_q15x2 (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) */ - write_q15x2 (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 = read_q15x2_ia ((q15_t **) &ptr1); - - /* Read xb (real), yb(imag) input */ - xbyb = read_q15x2_ia ((q15_t **) &ptr1); - - /* Read xc (real), yc(imag) input */ - xcyc = read_q15x2_ia ((q15_t **) &ptr1); - - /* Read xd (real), yd(imag) input */ - xdyd = read_q15x2_ia ((q15_t **) &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 */ - write_q15x2_ia (&ptr1, __SHADD16(R, T)); - - /* T = packed((yb + yd), (xb + xd)) */ - T = __QADD16(xbyb, xdyd); - - /* xc' = (xa-xb+xc-xd) */ - /* yc' = (ya-yb+yc-yd) */ - write_q15x2_ia (&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) */ - write_q15x2_ia (&ptr1, __SHASX(S, U)); - - /* xd' = (xa-yb-xc+yd) */ - /* yd' = (ya+xb-yc-xd) */ - write_q15x2_ia (&ptr1, __SHSAX(S, U)); -#else - /* xb' = (xa+yb-xc-yd) */ - /* yb' = (ya-xb-yc+xd) */ - write_q15x2_ia (&ptr1, __SHSAX(S, U)); - - /* xd' = (xa-yb-xc+yd) */ - /* yd' = (ya+xb-yc-xd) */ - write_q15x2_ia (&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 /* arm_radix4_butterfly_inverse_q15 */ - - 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 /* #if defined (ARM_MATH_DSP) */ - -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_q31.c deleted file mode 100644 index e9ba1d4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix4_q31.c +++ /dev/null @@ -1,827 +0,0 @@ -/* ---------------------------------------------------------------------- - * 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 - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -void arm_radix4_butterfly_inverse_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pCoef, - uint32_t twidCoefModifier); - -void arm_radix4_butterfly_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pCoef, - uint32_t twidCoefModifier); - -void arm_bitreversal_q31( - q31_t * pSrc, - uint32_t fftLen, - uint16_t bitRevFactor, - const uint16_t * pBitRevTab); - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup ComplexFFT - @{ - */ - -/** - @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 in the future. - @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: - 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, - const q31_t * pCoef, - uint32_t twidCoefModifier) -{ - 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; - - /* 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; - } - - /* 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 - { - /* Read xa (real), ya(imag) input */ - xa = *ptr1++; - ya = *ptr1++; - - /* Read xb (real), yb(imag) input */ - xb = *ptr1++; - yb = *ptr1++; - - /* Read xc (real), yc(imag) input */ - xc = *ptr1++; - yc = *ptr1++; - - /* Read xc (real), yc(imag) input */ - xd = *ptr1++; - yd = *ptr1++; - - /* 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, - const q31_t * pCoef, - uint32_t twidCoefModifier) -{ - 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; - - /* 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; - } - - /* 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 - { - /* Read xa (real), ya(imag) input */ - xa = *ptr1++; - ya = *ptr1++; - - /* Read xb (real), yb(imag) input */ - xb = *ptr1++; - yb = *ptr1++; - - /* Read xc (real), yc(imag) input */ - xc = *ptr1++; - yc = *ptr1++; - - /* Read xc (real), yc(imag) input */ - xd = *ptr1++; - yd = *ptr1++; - - /* 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix8_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix8_f32.c deleted file mode 100644 index 50048f6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_cfft_radix8_f32.c +++ /dev/null @@ -1,285 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_radix8_f32.c - * Description: Radix-8 Decimation in Frequency CFFT & CIFFT Floating point processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - - -/* ---------------------------------------------------------------------- - * 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_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); -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_f32.c deleted file mode 100644 index e92c595..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_f32.c +++ /dev/null @@ -1,448 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dct4_f32.c - * Description: Processing function of DCT4 & IDCT4 F32 - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 128, 512, 2048 and 8192. - 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 \ref 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) -{ - const float32_t *weights = S->pTwiddle; /* Pointer to the Weights table */ - const 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 */ - uint32_t i; /* Loop counter */ - - - /* 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* 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 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_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 = (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 = (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++ = 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 - - /* 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_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 = (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 loop counter */ - i--; - } while (i > 0U); - - /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ - - /* Initializing 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++ = in * S->normalize; - - /* Decrement loop counter */ - i--; - } while (i > 0U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - -} - -/** - @} end of DCT4_IDCT4 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_f32.c deleted file mode 100644 index 42b9df0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_f32.c +++ /dev/null @@ -1,130 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dct4_init_f32.c - * Description: Initialization function of DCT-4 & IDCT4 F32 - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -/** - @ingroup groupTransforms - */ - - /** - @addtogroup DCT4_IDCT4 - @{ - */ - -/** - @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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : 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. - 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; - - - /* 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) - { - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_8192) - /* Initialize the table modifier values */ - case 8192U: - S->pTwiddle = Weights_8192; - S->pCosFactor = cos_factors_8192; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_2048) - case 2048U: - S->pTwiddle = Weights_2048; - S->pCosFactor = cos_factors_2048; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_512) - case 512U: - S->pTwiddle = Weights_512; - S->pCosFactor = cos_factors_512; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_128) - case 128U: - S->pTwiddle = Weights_128; - S->pCosFactor = cos_factors_128; - break; - #endif - default: - status = ARM_MATH_ARGUMENT_ERROR; - } - - /* Initialize the RFFT/RIFFT Function */ - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_q15.c deleted file mode 100644 index dc24ef3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_q15.c +++ /dev/null @@ -1,130 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dct4_init_q15.c - * Description: Initialization function of DCT-4 & IDCT4 Q15 - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -/** - @ingroup groupTransforms - */ - - /** - @addtogroup DCT4_IDCT4 - @{ - */ - -/** - @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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : 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; - - /* 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) - { - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_8192) - /* Initialize the table modifier values */ - case 8192U: - S->pTwiddle = WeightsQ15_8192; - S->pCosFactor = cos_factorsQ15_8192; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_2048) - case 2048U: - S->pTwiddle = WeightsQ15_2048; - S->pCosFactor = cos_factorsQ15_2048; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_512) - case 512U: - S->pTwiddle = WeightsQ15_512; - S->pCosFactor = cos_factorsQ15_512; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_128) - case 128U: - S->pTwiddle = WeightsQ15_128; - S->pCosFactor = cos_factorsQ15_128; - break; - #endif - - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_q31.c deleted file mode 100644 index b0642d9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_init_q31.c +++ /dev/null @@ -1,129 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dct4_init_q31.c - * Description: Initialization function of DCT-4 & IDCT4 Q31 - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -/** - @ingroup groupTransforms - */ - - /** - @addtogroup DCT4_IDCT4 - @{ - */ - -/** - @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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : 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) -{ - /* Initialize the default arm status */ - arm_status status = ARM_MATH_SUCCESS; - - /* 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) - { - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_8192) - /* Initialize the table modifier values */ - case 8192U: - S->pTwiddle = WeightsQ31_8192; - S->pCosFactor = cos_factorsQ31_8192; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_2048) - case 2048U: - S->pTwiddle = WeightsQ31_2048; - S->pCosFactor = cos_factorsQ31_2048; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_512) - case 512U: - S->pTwiddle = WeightsQ31_512; - S->pCosFactor = cos_factorsQ31_512; - break; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_128) - case 128U: - S->pTwiddle = WeightsQ31_128; - S->pCosFactor = cos_factorsQ31_128; - break; - #endif - default: - status = ARM_MATH_ARGUMENT_ERROR; - } - - /* Initialize the RFFT/RIFFT Function */ - arm_rfft_init_q31(S->pRfft, S->N, 0U, 1U); - - /* return the status of DCT4 Init function */ - return (status); -} - -/** - @} end of DCT4_IDCT4 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_q15.c deleted file mode 100644 index a2b2ae9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_q15.c +++ /dev/null @@ -1,381 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dct4_q15.c - * Description: Processing function of DCT4 & IDCT4 Q15 - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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) -{ - const q15_t *weights = S->pTwiddle; /* Pointer to the Weights table */ - const 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 */ - uint32_t i; /* Loop counter */ - - - /* 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* 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 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_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 = (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 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++ = ((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 loop counter */ - i--; - } while (i > 0U); - - -#else - - /* 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_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 */ - - /* 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); - - 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 loop counter */ - i--; - } while (i > 0U); - - /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ - - /* Initializing 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++ = ((q15_t) (((q31_t) in * S->normalize) >> 15)); - - /* Decrement loop counter */ - i--; - - } while (i > 0U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - -} - -/** - @} end of DCT4_IDCT4 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_q31.c deleted file mode 100644 index 369a5c3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_dct4_q31.c +++ /dev/null @@ -1,383 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_dct4_q31.c - * Description: Processing function of DCT4 & IDCT4 Q31 - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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) -{ - const q31_t *weights = S->pTwiddle; /* Pointer to the Weights table */ - const 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 */ - uint32_t i; /* Loop counter */ - - - /* 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; - - -#if defined (ARM_MATH_LOOPUNROLL) - - /* 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 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 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 loop counter */ - i--; - } while (i > 0U); - - -#else - - /* 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 loop counter */ - i--; - } - - /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ - - /* Initializing 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 loop counter */ - i--; - } while (i > 0U); - -#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ - -} - -/** - @} end of DCT4_IDCT4 group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_f32.c deleted file mode 100644 index ef5070f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_f32.c +++ /dev/null @@ -1,311 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rfft_f32.c - * Description: RFFT & RIFFT Floating point process function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/* ---------------------------------------------------------------------- - * Internal functions prototypes - * -------------------------------------------------------------------- */ - -extern void arm_radix4_butterfly_f32( - float32_t * pSrc, - uint16_t fftLen, - const float32_t * pCoef, - uint16_t twidCoefModifier); - -extern void arm_radix4_butterfly_inverse_f32( - float32_t * pSrc, - uint16_t fftLen, - const float32_t * pCoef, - uint16_t twidCoefModifier, - float32_t onebyfftLen); - -extern void arm_bitreversal_f32( - float32_t * pSrc, - uint16_t fftSize, - uint16_t bitRevFactor, - const uint16_t * pBitRevTab); - -void arm_split_rfft_f32( - float32_t * pSrc, - uint32_t fftLen, - const float32_t * pATable, - const float32_t * pBTable, - float32_t * pDst, - uint32_t modifier); - -void arm_split_rifft_f32( - float32_t * pSrc, - uint32_t fftLen, - const float32_t * pATable, - const float32_t * pBTable, - float32_t * pDst, - uint32_t modifier); - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup RealFFT - @{ - */ - -/** - @brief Processing function for the floating-point RFFT/RIFFT. - Source buffer is modified by this function. - - @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 input buffer - @param[in] fftLen length of FFT - @param[in] pATable points to twiddle Coef A buffer - @param[in] pBTable points to twiddle Coef B buffer - @param[out] pDst points to 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, - const float32_t * pATable, - const float32_t * pBTable, - float32_t * pDst, - uint32_t modifier) -{ - uint32_t i; /* Loop Counter */ - float32_t outR, outI; /* Temporary variables for output */ - const 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 * 2]; - pCoefB = &pBTable[modifier * 2]; - - 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 input buffer - @param[in] fftLen length of FFT - @param[in] pATable points to twiddle Coef A buffer - @param[in] pBTable points to twiddle Coef B buffer - @param[out] pDst points to 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, - const float32_t * pATable, - const float32_t * pBTable, - float32_t * pDst, - uint32_t modifier) -{ - float32_t outR, outI; /* Temporary variables for output */ - const 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 * 2); - pCoefA = pCoefA + (modifier * 2 - 1); - - /* Decrement loop count */ - fftLen--; - } - -} diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_f32.c deleted file mode 100644 index effdede..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_f32.c +++ /dev/null @@ -1,603 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rfft_f32.c - * Description: RFFT & RIFFT Floating point process function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void stage_rfft_f32( - const arm_rfft_fast_instance_f32 * S, - float32_t * p, - float32_t * pOut) -{ - uint32_t k; /* Loop Counter */ - float32_t twR, twI; /* RFFT Twiddle coefficients */ - const 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 */ - - float32x4x2_t tw,xA,xB; - float32x4x2_t tmp1, tmp2, res; - - uint32x4_t vecStridesFwd, vecStridesBkwd; - - vecStridesFwd = vidupq_u32((uint32_t)0, 2); - vecStridesBkwd = -vecStridesFwd; - - int blockCnt; - - - 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; - - blockCnt = k >> 2; - while (blockCnt > 0) - { - /* - 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; - */ - - - xA = vld2q_f32(pA); - pA += 8; - - xB = vld2q_f32(pB); - - xB.val[0] = vldrwq_gather_shifted_offset_f32(pB, vecStridesBkwd); - xB.val[1] = vldrwq_gather_shifted_offset_f32(&pB[1], vecStridesBkwd); - - xB.val[1] = vnegq_f32(xB.val[1]); - pB -= 8; - - - tw = vld2q_f32(pCoeff); - pCoeff += 8; - - - tmp1.val[0] = vaddq_f32(xA.val[0],xB.val[0]); - tmp1.val[1] = vaddq_f32(xA.val[1],xB.val[1]); - - tmp2.val[0] = vsubq_f32(xB.val[0],xA.val[0]); - tmp2.val[1] = vsubq_f32(xB.val[1],xA.val[1]); - - res.val[0] = vmulq(tw.val[0], tmp2.val[0]); - res.val[0] = vfmsq(res.val[0],tw.val[1], tmp2.val[1]); - - res.val[1] = vmulq(tw.val[0], tmp2.val[1]); - res.val[1] = vfmaq(res.val[1], tw.val[1], tmp2.val[0]); - - res.val[0] = vaddq_f32(res.val[0],tmp1.val[0] ); - res.val[1] = vaddq_f32(res.val[1],tmp1.val[1] ); - - res.val[0] = vmulq_n_f32(res.val[0], 0.5f); - res.val[1] = vmulq_n_f32(res.val[1], 0.5f); - - - vst2q_f32(pOut, res); - pOut += 8; - - - blockCnt--; - } - - blockCnt = k & 3; - while (blockCnt > 0) - { - /* - 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; - blockCnt--; - } -} - -/* Prepares data for inverse cfft */ -void merge_rfft_f32( - const arm_rfft_fast_instance_f32 * S, - float32_t * p, - float32_t * pOut) -{ - uint32_t k; /* Loop Counter */ - float32_t twR, twI; /* RFFT Twiddle coefficients */ - const 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 */ - - float32x4x2_t tw,xA,xB; - float32x4x2_t tmp1, tmp2, res; - uint32x4_t vecStridesFwd, vecStridesBkwd; - - vecStridesFwd = vidupq_u32((uint32_t)0, 2); - vecStridesBkwd = -vecStridesFwd; - - int blockCnt; - - - 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 ; - - blockCnt = k >> 2; - while (blockCnt > 0) - { - /* 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)))); - xA = vld2q_f32(pA); - pA += 8; - - xB = vld2q_f32(pB); - - xB.val[0] = vldrwq_gather_shifted_offset_f32(pB, vecStridesBkwd); - xB.val[1] = vldrwq_gather_shifted_offset_f32(&pB[1], vecStridesBkwd); - - xB.val[1] = vnegq_f32(xB.val[1]); - pB -= 8; - - - tw = vld2q_f32(pCoeff); - tw.val[1] = vnegq_f32(tw.val[1]); - pCoeff += 8; - - - tmp1.val[0] = vaddq_f32(xA.val[0],xB.val[0]); - tmp1.val[1] = vaddq_f32(xA.val[1],xB.val[1]); - - tmp2.val[0] = vsubq_f32(xB.val[0],xA.val[0]); - tmp2.val[1] = vsubq_f32(xB.val[1],xA.val[1]); - - res.val[0] = vmulq(tw.val[0], tmp2.val[0]); - res.val[0] = vfmsq(res.val[0],tw.val[1], tmp2.val[1]); - - res.val[1] = vmulq(tw.val[0], tmp2.val[1]); - res.val[1] = vfmaq(res.val[1], tw.val[1], tmp2.val[0]); - - res.val[0] = vaddq_f32(res.val[0],tmp1.val[0] ); - res.val[1] = vaddq_f32(res.val[1],tmp1.val[1] ); - - res.val[0] = vmulq_n_f32(res.val[0], 0.5f); - res.val[1] = vmulq_n_f32(res.val[1], 0.5f); - - - vst2q_f32(pOut, res); - pOut += 8; - - - blockCnt--; - } - - blockCnt = k & 3; - while (blockCnt > 0) - { - /* 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; - blockCnt--; - } - -} -#else -void stage_rfft_f32( - const arm_rfft_fast_instance_f32 * S, - float32_t * p, - float32_t * pOut) -{ - uint32_t k; /* Loop Counter */ - float32_t twR, twI; /* RFFT Twiddle coefficients */ - const 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( - const arm_rfft_fast_instance_f32 * S, - float32_t * p, - float32_t * pOut) -{ - uint32_t k; /* Loop Counter */ - float32_t twR, twI; /* RFFT Twiddle coefficients */ - const 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--; - } - -} - -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -/** - @ingroup groupTransforms -*/ - -/** - @defgroup RealFFT 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 \ref arm_rfft_fast_f32() and \ref arm_rfft_fast_init_f32(). - The older functions \ref arm_rfft_f32() and \ref 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. - Looking at the data, we see that we can uniquely represent the FFT using only N/2 complex numbers. - These are packed into the output array in alternating real and imaginary components: - @par - X = { real[0], imag[0], real[1], imag[1], real[2], imag[2] ... - real[(N/2)-1], imag[(N/2)-1 } - @par - It happens that the first complex number (real[0], imag[0]) is actually - all real. real[0] represents the DC offset, and imag[0] should be 0. - (real[1], imag[1]) is the fundamental frequency, (real[2], imag[2]) is - the first harmonic and so on. - @par - 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 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). - Due to the use of complex transform internally, the source buffer is - modified by the rfft. - @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 **except for MVE versions where it is mandatory**. - If you don't use the initialization functions, then the structures should be initialized with code - similar to the one below: -
    -      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 (fftLenReal/2). - 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. -@par - Note that with MVE versions you can't initialize instance structures directly and **must - use the initialization function**. - */ - -/** - @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 input buffer (Source buffer is modified by this function.) - @param[in] pOut points to output buffer - @param[in] ifftFlag - - value = 0: RFFT - - value = 1: RIFFT - @return none -*/ - -void arm_rfft_fast_f32( - const arm_rfft_fast_instance_f32 * S, - float32_t * p, - float32_t * pOut, - uint8_t ifftFlag) -{ - const arm_cfft_instance_f32 * Sint = &(S->Sint); - - /* 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_f64.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_f64.c deleted file mode 100644 index 16a7a03..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_f64.c +++ /dev/null @@ -1,228 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rfft_f64.c - * Description: RFFT & RIFFT Double precision Floating point process function - * - * $Date: 29. November 2019 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -void stage_rfft_f64( - const arm_rfft_fast_instance_f64 * S, - float64_t * p, - float64_t * pOut) -{ - uint32_t k; /* Loop Counter */ - float64_t twR, twI; /* RFFT Twiddle coefficients */ - const float64_t * pCoeff = S->pTwiddleRFFT; /* Points to RFFT Twiddle factors */ - float64_t *pA = p; /* increasing pointer */ - float64_t *pB = p; /* decreasing pointer */ - float64_t xAR, xAI, xBR, xBI; /* temporary variables */ - float64_t t1a, t1b; /* temporary variables */ - float64_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.5 * ( t1a + t1b ); - *pOut++ = 0.5 * ( 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.5 * (xAR + xBR + p0 + p3 ); //xAR - *pOut++ = 0.5 * (xAI - xBI + p1 - p2 ); //xAI - - pA += 2; - pB -= 2; - k--; - } while (k > 0U); -} - -/* Prepares data for inverse cfft */ -void merge_rfft_f64( - const arm_rfft_fast_instance_f64 * S, - float64_t * p, - float64_t * pOut) -{ - uint32_t k; /* Loop Counter */ - float64_t twR, twI; /* RFFT Twiddle coefficients */ - const float64_t *pCoeff = S->pTwiddleRFFT; /* Points to RFFT Twiddle factors */ - float64_t *pA = p; /* increasing pointer */ - float64_t *pB = p; /* decreasing pointer */ - float64_t xAR, xAI, xBR, xBI; /* temporary variables */ - float64_t t1a, t1b, r, s, t, u; /* temporary variables */ - - k = (S->Sint).fftLen - 1; - - xAR = pA[0]; - xAI = pA[1]; - - pCoeff += 2 ; - - *pOut++ = 0.5 * ( xAR + xAI ); - *pOut++ = 0.5 * ( 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.5 * (xAR + xBR - r - s ); //xAR - *pOut++ = 0.5 * (xAI - xBI + t - u ); //xAI - - pA += 2; - pB -= 2; - k--; - } - -} - -/** - @ingroup groupTransforms -*/ - - -/** - @addtogroup RealFFT - @{ -*/ - -/** - @brief Processing function for the Double Precision floating-point real FFT. - @param[in] S points to an arm_rfft_fast_instance_f64 structure - @param[in] p points to input buffer (Source buffer is modified by this function.) - @param[in] pOut points to output buffer - @param[in] ifftFlag - - value = 0: RFFT - - value = 1: RIFFT - @return none -*/ - -void arm_rfft_fast_f64( - arm_rfft_fast_instance_f64 * S, - float64_t * p, - float64_t * pOut, - uint8_t ifftFlag) -{ - arm_cfft_instance_f64 * Sint = &(S->Sint); - Sint->fftLen = S->fftLenRFFT / 2; - - /* Calculation of Real FFT */ - if (ifftFlag) - { - /* Real FFT compression */ - merge_rfft_f64(S, p, pOut); - - /* Complex radix-4 IFFT process */ - arm_cfft_f64( Sint, pOut, ifftFlag, 1); - } - else - { - /* Calculation of RFFT of input */ - arm_cfft_f64( Sint, p, ifftFlag, 1); - - /* Real FFT extraction */ - stage_rfft_f64(S, p, pOut); - } -} - -/** -* @} end of RealFFT group -*/ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_init_f32.c deleted file mode 100644 index 1101a9f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_init_f32.c +++ /dev/null @@ -1,352 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_init_f32.c - * Description: Split Radix Decimation in Frequency CFFT Floating point processing function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup RealFFT - @{ - */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_BITREVIDX_FLT_16) && defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32)) - -/** - @private - @brief Initialization function for the 32pt floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f32 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_32_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - - arm_status status; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - status=arm_cfft_init_f32(&(S->Sint),16); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - - S->fftLenRFFT = 32U; - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_32; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32) && defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64)) - -/** - @private - @brief Initialization function for the 64pt floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f32 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_64_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - - arm_status status; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - status=arm_cfft_init_f32(&(S->Sint),32); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - S->fftLenRFFT = 64U; - - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_64; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_BITREVIDX_FLT_64) && defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128)) - -/** - @private - @brief Initialization function for the 128pt floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f32 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_128_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - - arm_status status; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - status=arm_cfft_init_f32(&(S->Sint),64); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - S->fftLenRFFT = 128; - - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_128; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_BITREVIDX_FLT_128) && defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256)) - -/** - @private - @brief Initialization function for the 256pt floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f32 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected -*/ - -static arm_status arm_rfft_256_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - - arm_status status; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - status=arm_cfft_init_f32(&(S->Sint),128); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - S->fftLenRFFT = 256U; - - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_256; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_BITREVIDX_FLT_256) && defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512)) - -/** - @private - @brief Initialization function for the 512pt floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f32 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_512_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - - arm_status status; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - status=arm_cfft_init_f32(&(S->Sint),256); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - S->fftLenRFFT = 512U; - - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_512; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_BITREVIDX_FLT_512) && defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024)) -/** - @private - @brief Initialization function for the 1024pt floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f32 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_1024_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - - arm_status status; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - status=arm_cfft_init_f32(&(S->Sint),512); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - S->fftLenRFFT = 1024U; - - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_1024; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024) && defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048)) -/** - @private - @brief Initialization function for the 2048pt floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f32 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ -static arm_status arm_rfft_2048_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - - arm_status status; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - status=arm_cfft_init_f32(&(S->Sint),1024); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - S->fftLenRFFT = 2048U; - - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_2048; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048) && defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096)) -/** - @private -* @brief Initialization function for the 4096pt floating-point real FFT. -* @param[in,out] S points to an arm_rfft_fast_instance_f32 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_4096_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - - arm_status status; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - status=arm_cfft_init_f32(&(S->Sint),2048); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - S->fftLenRFFT = 4096U; - - S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_4096; - - return ARM_MATH_SUCCESS; -} -#endif - -/** - @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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length - - @par Description - The parameter fftLen specifies the 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) -{ - typedef arm_status(*fft_init_ptr)( arm_rfft_fast_instance_f32 *); - fft_init_ptr fptr = 0x0; - - switch (fftLen) - { -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048) && defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096)) - case 4096U: - fptr = arm_rfft_4096_fast_init_f32; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024) && defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048)) - case 2048U: - fptr = arm_rfft_2048_fast_init_f32; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_BITREVIDX_FLT_512) && defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024)) - case 1024U: - fptr = arm_rfft_1024_fast_init_f32; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_BITREVIDX_FLT_256) && defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512)) - case 512U: - fptr = arm_rfft_512_fast_init_f32; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_BITREVIDX_FLT_128) && defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256)) - case 256U: - fptr = arm_rfft_256_fast_init_f32; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_BITREVIDX_FLT_64) && defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128)) - case 128U: - fptr = arm_rfft_128_fast_init_f32; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32) && defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64)) - case 64U: - fptr = arm_rfft_64_fast_init_f32; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_BITREVIDX_FLT_16) && defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32)) - case 32U: - fptr = arm_rfft_32_fast_init_f32; - break; -#endif - default: - return ARM_MATH_ARGUMENT_ERROR; - } - - if( ! fptr ) return ARM_MATH_ARGUMENT_ERROR; - return fptr( S ); - -} - -/** - @} end of RealFFT group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_init_f64.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_init_f64.c deleted file mode 100644 index 3ea02ff..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_fast_init_f64.c +++ /dev/null @@ -1,344 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_cfft_init_f64.c - * Description: Split Radix Decimation in Frequency CFFT Double Precision Floating point processing function - * - * $Date: 29. November 2019 - * $Revision: V1.0.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - -/** - @ingroup groupTransforms - */ - -/** - @addtogroup RealFFT - @{ - */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_16) && defined(ARM_TABLE_BITREVIDX_FLT64_16) && defined(ARM_TABLE_TWIDDLECOEF_F64_16) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_32)) - -/** - @brief Initialization function for the 32pt double precision floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f64 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_32_fast_init_f64( arm_rfft_fast_instance_f64 * S ) { - - arm_cfft_instance_f64 * Sint; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - Sint = &(S->Sint); - Sint->fftLen = 16U; - S->fftLenRFFT = 32U; - - Sint->bitRevLength = ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTableF64_16; - Sint->pTwiddle = (float64_t *) twiddleCoefF64_16; - S->pTwiddleRFFT = (float64_t *) twiddleCoefF64_rfft_32; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_32) && defined(ARM_TABLE_BITREVIDX_FLT64_32) && defined(ARM_TABLE_TWIDDLECOEF_F64_32) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_64)) - -/** - @brief Initialization function for the 64pt Double Precision floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f64 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_64_fast_init_f64( arm_rfft_fast_instance_f64 * S ) { - - arm_cfft_instance_f64 * Sint; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - Sint = &(S->Sint); - Sint->fftLen = 32U; - S->fftLenRFFT = 64U; - - Sint->bitRevLength = ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTableF64_32; - Sint->pTwiddle = (float64_t *) twiddleCoefF64_32; - S->pTwiddleRFFT = (float64_t *) twiddleCoefF64_rfft_64; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_64) && defined(ARM_TABLE_BITREVIDX_FLT64_64) && defined(ARM_TABLE_TWIDDLECOEF_F64_64) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_128)) - -/** - @brief Initialization function for the 128pt Double Precision floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f64 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_128_fast_init_f64( arm_rfft_fast_instance_f64 * S ) { - - arm_cfft_instance_f64 * Sint; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - Sint = &(S->Sint); - Sint->fftLen = 64U; - S->fftLenRFFT = 128U; - - Sint->bitRevLength = ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTableF64_64; - Sint->pTwiddle = (float64_t *) twiddleCoefF64_64; - S->pTwiddleRFFT = (float64_t *) twiddleCoefF64_rfft_128; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_128) && defined(ARM_TABLE_BITREVIDX_FLT64_128) && defined(ARM_TABLE_TWIDDLECOEF_F64_128) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_256)) - -/** - @brief Initialization function for the 256pt Double Precision floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f64 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected -*/ - -static arm_status arm_rfft_256_fast_init_f64( arm_rfft_fast_instance_f64 * S ) { - - arm_cfft_instance_f64 * Sint; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - Sint = &(S->Sint); - Sint->fftLen = 128U; - S->fftLenRFFT = 256U; - - Sint->bitRevLength = ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTableF64_128; - Sint->pTwiddle = (float64_t *) twiddleCoefF64_128; - S->pTwiddleRFFT = (float64_t *) twiddleCoefF64_rfft_256; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_256) && defined(ARM_TABLE_BITREVIDX_FLT64_256) && defined(ARM_TABLE_TWIDDLECOEF_F64_256) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_512)) - -/** - @brief Initialization function for the 512pt Double Precision floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f64 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_512_fast_init_f64( arm_rfft_fast_instance_f64 * S ) { - - arm_cfft_instance_f64 * Sint; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - Sint = &(S->Sint); - Sint->fftLen = 256U; - S->fftLenRFFT = 512U; - - Sint->bitRevLength = ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTableF64_256; - Sint->pTwiddle = (float64_t *) twiddleCoefF64_256; - S->pTwiddleRFFT = (float64_t *) twiddleCoefF64_rfft_512; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_512) && defined(ARM_TABLE_BITREVIDX_FLT64_512) && defined(ARM_TABLE_TWIDDLECOEF_F64_512) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_1024)) -/** - @brief Initialization function for the 1024pt Double Precision floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f64 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_1024_fast_init_f64( arm_rfft_fast_instance_f64 * S ) { - - arm_cfft_instance_f64 * Sint; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - Sint = &(S->Sint); - Sint->fftLen = 512U; - S->fftLenRFFT = 1024U; - - Sint->bitRevLength = ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTableF64_512; - Sint->pTwiddle = (float64_t *) twiddleCoefF64_512; - S->pTwiddleRFFT = (float64_t *) twiddleCoefF64_rfft_1024; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_1024) && defined(ARM_TABLE_BITREVIDX_FLT64_1024) && defined(ARM_TABLE_TWIDDLECOEF_F64_1024) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_2048)) -/** - @brief Initialization function for the 2048pt Double Precision floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f64 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ -static arm_status arm_rfft_2048_fast_init_f64( arm_rfft_fast_instance_f64 * S ) { - - arm_cfft_instance_f64 * Sint; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - Sint = &(S->Sint); - Sint->fftLen = 1024U; - S->fftLenRFFT = 2048U; - - Sint->bitRevLength = ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTableF64_1024; - Sint->pTwiddle = (float64_t *) twiddleCoefF64_1024; - S->pTwiddleRFFT = (float64_t *) twiddleCoefF64_rfft_2048; - - return ARM_MATH_SUCCESS; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_2048) && defined(ARM_TABLE_BITREVIDX_FLT64_2048) && defined(ARM_TABLE_TWIDDLECOEF_F64_2048) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_4096)) -/** -* @brief Initialization function for the 4096pt Double Precision floating-point real FFT. -* @param[in,out] S points to an arm_rfft_fast_instance_f64 structure - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected - */ - -static arm_status arm_rfft_4096_fast_init_f64( arm_rfft_fast_instance_f64 * S ) { - - arm_cfft_instance_f64 * Sint; - - if( !S ) return ARM_MATH_ARGUMENT_ERROR; - - Sint = &(S->Sint); - Sint->fftLen = 2048U; - S->fftLenRFFT = 4096U; - - Sint->bitRevLength = ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTableF64_2048; - Sint->pTwiddle = (float64_t *) twiddleCoefF64_2048; - S->pTwiddleRFFT = (float64_t *) twiddleCoefF64_rfft_4096; - - return ARM_MATH_SUCCESS; -} -#endif - -/** - @brief Initialization function for the Double Precision floating-point real FFT. - @param[in,out] S points to an arm_rfft_fast_instance_f64 structure - @param[in] fftLen length of the Real Sequence - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length - - @par Description - The parameter fftLen specifies the 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_f64( - arm_rfft_fast_instance_f64 * S, - uint16_t fftLen) -{ - typedef arm_status(*fft_init_ptr)( arm_rfft_fast_instance_f64 *); - fft_init_ptr fptr = 0x0; - - switch (fftLen) - { -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_2048) && defined(ARM_TABLE_BITREVIDX_FLT64_2048) && defined(ARM_TABLE_TWIDDLECOEF_F64_2048) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_4096)) - case 4096U: - fptr = arm_rfft_4096_fast_init_f64; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_1024) && defined(ARM_TABLE_BITREVIDX_FLT64_1024) && defined(ARM_TABLE_TWIDDLECOEF_F64_1024) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_2048)) - case 2048U: - fptr = arm_rfft_2048_fast_init_f64; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_512) && defined(ARM_TABLE_BITREVIDX_FLT64_512) && defined(ARM_TABLE_TWIDDLECOEF_F64_512) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_1024)) - case 1024U: - fptr = arm_rfft_1024_fast_init_f64; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_256) && defined(ARM_TABLE_BITREVIDX_FLT64_256) && defined(ARM_TABLE_TWIDDLECOEF_F64_256) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_512)) - case 512U: - fptr = arm_rfft_512_fast_init_f64; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_128) && defined(ARM_TABLE_BITREVIDX_FLT64_128) && defined(ARM_TABLE_TWIDDLECOEF_F64_128) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_256)) - case 256U: - fptr = arm_rfft_256_fast_init_f64; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_64) && defined(ARM_TABLE_BITREVIDX_FLT64_64) && defined(ARM_TABLE_TWIDDLECOEF_F64_64) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_128)) - case 128U: - fptr = arm_rfft_128_fast_init_f64; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_32) && defined(ARM_TABLE_BITREVIDX_FLT64_32) && defined(ARM_TABLE_TWIDDLECOEF_F64_32) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_64)) - case 64U: - fptr = arm_rfft_64_fast_init_f64; - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F64_16) && defined(ARM_TABLE_BITREVIDX_FLT64_16) && defined(ARM_TABLE_TWIDDLECOEF_F64_16) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_32)) - case 32U: - fptr = arm_rfft_32_fast_init_f64; - break; -#endif - default: - return ARM_MATH_ARGUMENT_ERROR; - } - - if( ! fptr ) return ARM_MATH_ARGUMENT_ERROR; - return fptr( S ); - -} - -/** - @} end of RealFFT group - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_f32.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_f32.c deleted file mode 100644 index 141f8b6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_f32.c +++ /dev/null @@ -1,139 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rfft_init_f32.c - * Description: RFFT & RIFFT Floating point initialisation function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" - - -/** - @addtogroup RealFFT - @{ - */ - -/** - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLenReal is not a supported length - - @par Description - The parameter fftLenRealspecifies 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_q15.c deleted file mode 100644 index a0b8a09..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_q15.c +++ /dev/null @@ -1,239 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rfft_init_q15.c - * Description: RFFT & RIFFT Q15 initialisation function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" -#include "arm_const_structs.h" - -/** - @addtogroup RealFFT - @{ - */ - -/** - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLenReal is not a supported length - - @par Details - 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) - { -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) && defined(ARM_TABLE_BITREVIDX_FXT_4096)) - case 8192U: - S->twidCoefRModifier = 1U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q15(&(S->cfftInst),4096); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q15_len4096; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) && defined(ARM_TABLE_BITREVIDX_FXT_2048)) - case 4096U: - S->twidCoefRModifier = 2U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q15(&(S->cfftInst),2048); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q15_len2048; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) && defined(ARM_TABLE_BITREVIDX_FXT_1024)) - case 2048U: - S->twidCoefRModifier = 4U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q15(&(S->cfftInst),1024); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q15_len1024; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_512) && defined(ARM_TABLE_BITREVIDX_FXT_512)) - case 1024U: - S->twidCoefRModifier = 8U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q15(&(S->cfftInst),512); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q15_len512; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_256) && defined(ARM_TABLE_BITREVIDX_FXT_256)) - case 512U: - S->twidCoefRModifier = 16U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q15(&(S->cfftInst),256); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q15_len256; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_128) && defined(ARM_TABLE_BITREVIDX_FXT_128)) - case 256U: - S->twidCoefRModifier = 32U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q15(&(S->cfftInst),128); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q15_len128; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_64) && defined(ARM_TABLE_BITREVIDX_FXT_64)) - case 128U: - S->twidCoefRModifier = 64U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q15(&(S->cfftInst),64); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q15_len64; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_32) && defined(ARM_TABLE_BITREVIDX_FXT_32)) - case 64U: - S->twidCoefRModifier = 128U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q15(&(S->cfftInst),32); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q15_len32; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q15_16) && defined(ARM_TABLE_BITREVIDX_FXT_16)) - case 32U: - S->twidCoefRModifier = 256U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q15(&(S->cfftInst),16); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q15_len16; - #endif - break; -#endif - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_q31.c deleted file mode 100644 index 2bb897a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_init_q31.c +++ /dev/null @@ -1,237 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rfft_init_q31.c - * Description: RFFT & RIFFT Q31 initialisation function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" -#include "arm_common_tables.h" -#include "arm_const_structs.h" - - - -/** - @addtogroup RealFFT - @{ - */ - -/** - @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 transform direction - - value = 0: forward transform - - value = 1: inverse transform - @param[in] bitReverseFlag flag that enables / disables bit reversal of output - - value = 0: disables bit reversal of output - - value = 1: enables bit reversal of output - @return execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_ARGUMENT_ERROR : fftLenReal is not a supported length - - @par Details - 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_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) - { -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) && defined(ARM_TABLE_BITREVIDX_FXT_4096)) - case 8192U: - - - S->twidCoefRModifier = 1U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q31(&(S->cfftInst),4096); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q31_len4096; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) && defined(ARM_TABLE_BITREVIDX_FXT_2048)) - case 4096U: - S->twidCoefRModifier = 2U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q31(&(S->cfftInst),2048); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q31_len2048; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) && defined(ARM_TABLE_BITREVIDX_FXT_1024)) - case 2048U: - S->twidCoefRModifier = 4U; - - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q31(&(S->cfftInst),1024); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q31_len1024; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_512) && defined(ARM_TABLE_BITREVIDX_FXT_512)) - case 1024U: - S->twidCoefRModifier = 8U; - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q31(&(S->cfftInst),512); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q31_len512; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_256) && defined(ARM_TABLE_BITREVIDX_FXT_256)) - case 512U: - S->twidCoefRModifier = 16U; - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q31(&(S->cfftInst),256); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q31_len256; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_128) && defined(ARM_TABLE_BITREVIDX_FXT_128)) - case 256U: - S->twidCoefRModifier = 32U; - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q31(&(S->cfftInst),128); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q31_len128; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_64) && defined(ARM_TABLE_BITREVIDX_FXT_64)) - case 128U: - S->twidCoefRModifier = 64U; - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q31(&(S->cfftInst),64); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q31_len64; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_32) && defined(ARM_TABLE_BITREVIDX_FXT_32)) - case 64U: - S->twidCoefRModifier = 128U; - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q31(&(S->cfftInst),32); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q31_len32; - #endif - break; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_16) && defined(ARM_TABLE_BITREVIDX_FXT_16)) - case 32U: - S->twidCoefRModifier = 256U; - #if defined(ARM_MATH_MVEI) - status=arm_cfft_init_q31(&(S->cfftInst),16); - if (status != ARM_MATH_SUCCESS) - { - return(status); - } - #else - S->pCfft = &arm_cfft_sR_q31_len16; - #endif - break; -#endif - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_q15.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_q15.c deleted file mode 100644 index e1dbb11..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_q15.c +++ /dev/null @@ -1,592 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rfft_q15.c - * Description: RFFT & RIFFT Q15 process function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/* ---------------------------------------------------------------------- - * Internal functions prototypes - * -------------------------------------------------------------------- */ - -void arm_split_rfft_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pATable, - const q15_t * pBTable, - q15_t * pDst, - uint32_t modifier); - -void arm_split_rifft_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pATable, - const 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 input buffer (Source buffer is modified by this function.) - @param[out] pDst points to output buffer - @return none - - @par Input an output formats - 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" - @par - If the input buffer is of length N, the output buffer must have length 2*N. - The input buffer is modified by this function. - */ - -void arm_rfft_q15( - const arm_rfft_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst) -{ -#if defined(ARM_MATH_MVEI) - const arm_cfft_instance_q15 *S_CFFT = &(S->cfftInst); -#else - const arm_cfft_instance_q15 *S_CFFT = S->pCfft; -#endif - uint32_t L2 = S->fftLenReal >> 1U; - uint32_t i; - - /* 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; i < S->fftLenReal; i++) - { - pDst[i] = pDst[i] << 1U; - } - } - 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[in] pSrc points to input buffer - @param[in] fftLen length of FFT - @param[in] pATable points to twiddle Coef A buffer - @param[in] pBTable points to twiddle Coef B buffer - @param[out] pDst points to output buffer - @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table - @return none - - @par - The function implements a Real FFT - */ - -#if defined(ARM_MATH_MVEI) -void arm_split_rfft_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pATable, - const q15_t * pBTable, - q15_t * pDst, - uint32_t modifier) -{ - q15_t const *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ - q15_t *pDst1 = &pDst[2], *pDst2 = &pDst[(4U * fftLen) - 1U - 14]; /* temp pointers for output buffer */ - q15_t const *pSrc1 = &pSrc[2], *pSrc2 = &pSrc[(2U * fftLen) - 1U - 14]; /* temp pointers for input buffer */ - q15_t const *pVecSrc1; - q15_t *pVecDst1; - q15x8x2_t vecIn, vecSum; - uint32_t blkCnt; - uint16x8_t vecStridesFwd, vecStridesBkwd; - q15x8_t vecInBkwd, vecCoefFwd0, vecCoefFwd1; - - /* - * Init coefficient pointers - */ - pCoefA = &pATable[modifier * 2U]; - pCoefB = &pBTable[modifier * 2U]; - /* - * scatter / gather offsets - * for ascending & descending addressing - */ - vecStridesFwd = vidupq_u16((uint32_t)0, 2); // 0, 2, 4, 6, 8, 10, 12, 14 - vecStridesBkwd = vddupq_u16(14, 2); // 14, 12, 10, 8, 6, 4, 2, 0 - vecStridesFwd = vecStridesFwd * (uint16_t) modifier; - - pVecSrc1 = (q15_t const *) pSrc1; - pVecDst1 = pDst1; - - blkCnt = fftLen >> 3; - while (blkCnt > 0U) - { - vecCoefFwd0 = vldrhq_gather_shifted_offset(pCoefA, vecStridesFwd); - vecCoefFwd1 = vldrhq_gather_shifted_offset(&pCoefA[1], vecStridesFwd); - vecIn = vld2q(pVecSrc1); - pVecSrc1 += 16; - /* - * outR = *pSrc1 * CoefA1; - */ - vecSum.val[0] = vrmulhq(vecIn.val[0], vecCoefFwd0); - /* - * outI = *pSrc1++ * CoefA2; - */ - vecSum.val[1] = vrmulhq(vecIn.val[0], vecCoefFwd1); - - vecInBkwd = vldrhq_gather_shifted_offset(pSrc2, vecStridesBkwd); - /* - * outR -= (*pSrc1 + *pSrc2) * CoefA2; - */ - vecInBkwd = vqaddq(vecIn.val[1], vecInBkwd); - vecSum.val[0] = vqsubq(vecSum.val[0], vrmulhq(vecInBkwd, vecCoefFwd1)); - - vecInBkwd = vldrhq_gather_shifted_offset(pSrc2, vecStridesBkwd); - /* - * outI += *pSrc1++ * CoefA1; - */ - vecSum.val[1] = vqaddq(vecSum.val[1], vrmulhq(vecIn.val[1], vecCoefFwd0)); - - vecCoefFwd0 = vldrhq_gather_shifted_offset(pCoefB, vecStridesFwd); - /* - * outI -= *pSrc2-- * CoefB1; - */ - vecSum.val[1] = vqsubq(vecSum.val[1], vrmulhq(vecInBkwd, vecCoefFwd0)); - - vecInBkwd = vldrhq_gather_shifted_offset(&pSrc2[-1], vecStridesBkwd); - /* - * outI -= *pSrc2 * CoefA2; - */ - vecSum.val[1] = vqsubq(vecSum.val[1], vrmulhq(vecInBkwd, vecCoefFwd1)); - /* - * outR += *pSrc2-- * CoefB1; - */ - vecSum.val[0] = vqaddq(vecSum.val[0], vrmulhq(vecInBkwd, vecCoefFwd0)); - - vst2q(pVecDst1, vecSum); - pVecDst1 += 16; - /* - * write complex conjugate output - */ - vecSum.val[1] = -vecSum.val[1]; - vstrhq_scatter_shifted_offset(pDst2, vecStridesBkwd, vecSum.val[1]); - vstrhq_scatter_shifted_offset(&pDst2[-1], vecStridesBkwd, vecSum.val[0]); - /* - * update fwd and backwd offsets - */ - vecStridesFwd = vecStridesFwd + (uint16_t)(modifier * 16U); - /* cannot use negative 16-bit offsets (would lead to positive 32-65K jump*/ - //vecStridesBkwd = vecStridesBkwd - (uint16_t)16; - pSrc2 = pSrc2 - 16; - pDst2 = pDst2 - 16; - - blkCnt--; - } - - pDst[2U * fftLen] = (pSrc[0] - pSrc[1]) >> 1; - pDst[(2U * fftLen) + 1U] = 0; - - pDst[0] = (pSrc[0] + pSrc[1]) >> 1; - pDst[1] = 0; -} -#else -void arm_split_rfft_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pATable, - const q15_t * pBTable, - q15_t * pDst, - uint32_t modifier) -{ - uint32_t i; /* Loop Counter */ - q31_t outR, outI; /* Temporary variables for output */ - const q15_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ - q15_t *pSrc1, *pSrc2; -#if defined (ARM_MATH_DSP) - q15_t *pD1, *pD2; -#endif - - /* Init coefficient pointers */ - pCoefA = &pATable[modifier * 2]; - pCoefB = &pBTable[modifier * 2]; - - pSrc1 = &pSrc[2]; - pSrc2 = &pSrc[(2U * fftLen) - 2U]; - -#if defined (ARM_MATH_DSP) - - 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(read_q15x2 (pSrc1), read_q15x2((q15_t *) pCoefA)); -#else - /* -(pSrc[2 * i + 1] * pATable[2 * i + 1] - pSrc[2 * i] * pATable[2 * i]) */ - outR = -(__SMUSD(read_q15x2 (pSrc1), read_q15x2((q15_t *) 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(read_q15x2 (pSrc2), read_q15x2((q15_t *) 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(read_q15x2_da (&pSrc2), read_q15x2((q15_t *) pCoefB)); -#else - outI = __SMUSDX(read_q15x2 ((q15_t *) pCoefB), read_q15x2_da (&pSrc2)); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - - /* (pIn[2 * i + 1] * pATable[2 * i] + pIn[2 * i] * pATable[2 * i + 1] */ - outI = __SMLADX(read_q15x2_ia (&pSrc1), read_q15x2 ((q15_t *) 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]) >> 1U; - pDst[2U * fftLen + 1U] = 0; - - pDst[0] = (pSrc[0] + pSrc[1]) >> 1U; - pDst[1] = 0; - -#else - - 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 /* #if defined (ARM_MATH_DSP) */ -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @brief Core Real IFFT process - @param[in] pSrc points to input buffer - @param[in] fftLen length of FFT - @param[in] pATable points to twiddle Coef A buffer - @param[in] pBTable points to twiddle Coef B buffer - @param[out] pDst points to output buffer - @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table - @return none - - @par - The function implements a Real IFFT - */ - -#if defined(ARM_MATH_MVEI) - -void arm_split_rifft_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pATable, - const q15_t * pBTable, - q15_t * pDst, - uint32_t modifier) -{ - q15_t const *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ - q15_t const *pSrc1 = &pSrc[0], *pSrc2 = &pSrc[(2U * fftLen) + 1U - 14U]; - q15_t *pDst1 = &pDst[0]; - q15_t const *pVecSrc1; - q15_t *pVecDst1; - q15x8x2_t vecIn, vecSum; - uint32_t blkCnt; - uint16x8_t vecStridesFwd, vecStridesBkwd; - q15x8_t vecInBkwd, vecCoefFwd0, vecCoefFwd1; - - /* - * Init coefficient pointers - */ - pCoefA = &pATable[0]; - pCoefB = &pBTable[0]; - /* - * scatter / gather offsets - * for ascending & descending addressing - */ - vecStridesFwd = vidupq_u16((uint32_t)0, 2); // 0, 2, 4, 6, 8, 10, 12, 14 - vecStridesBkwd = vddupq_u16(14, 2); // 14, 12, 10, 8, 6, 4, 2, 0 - vecStridesFwd = vecStridesFwd * (uint16_t) modifier; - - - pVecSrc1 = (q15_t const *) pSrc1; - pVecDst1 = pDst1; - - blkCnt = fftLen >> 3; - while (blkCnt > 0U) - { - vecCoefFwd0 = vldrhq_gather_shifted_offset(pCoefA, vecStridesFwd); - vecCoefFwd1 = vldrhq_gather_shifted_offset(&pCoefA[1], vecStridesFwd); - vecIn = vld2q(pVecSrc1); - pVecSrc1 += 16; - /* - * outR = *pSrc1 * CoefA1; - */ - vecSum.val[0] = vmulhq(vecIn.val[0], vecCoefFwd0); - /* - * outI = -(*pSrc1++) * CoefA2; - */ - vecIn.val[0] = vnegq(vecIn.val[0]); - vecSum.val[1] = vmulhq(vecIn.val[0], vecCoefFwd1); - - vecInBkwd = vldrhq_gather_shifted_offset(pSrc2, vecStridesBkwd); - /* - * outR += (*pSrc1 + *pSrc2) * CoefA2; - */ - vecInBkwd = vqaddq(vecIn.val[1], vecInBkwd); - vecSum.val[0] = vqaddq(vecSum.val[0], vmulhq(vecInBkwd, vecCoefFwd1)); - - vecInBkwd = vldrhq_gather_shifted_offset(pSrc2, vecStridesBkwd); - /* - * outI += *pSrc1++ * CoefA1; - */ - vecSum.val[1] = vqaddq(vecSum.val[1], vmulhq(vecIn.val[1], vecCoefFwd0)); - - vecCoefFwd0 = vldrhq_gather_shifted_offset(pCoefB, vecStridesFwd); - /* - * outI -= *pSrc2-- * CoefB1; - */ - vecSum.val[1] = vqsubq(vecSum.val[1], vmulhq(vecInBkwd, vecCoefFwd0)); - - vecInBkwd = vldrhq_gather_shifted_offset(&pSrc2[-1], vecStridesBkwd); - /* - * outI += *pSrc2 * CoefA2; - */ - vecSum.val[1] = vqaddq(vecSum.val[1], vmulhq(vecInBkwd, vecCoefFwd1)); - /* - * outR += *pSrc2-- * CoefB1; - */ - vecSum.val[0] = vqaddq(vecSum.val[0], vmulhq(vecInBkwd, vecCoefFwd0)); - - vst2q(pVecDst1, vecSum); - pVecDst1 += 16; - /* - * update fwd and backwd offsets - */ - vecStridesFwd = vecStridesFwd + (uint16_t)(modifier * 16U); - - /* cannot use negative 16-bit offsets (would lead to positive 32-65K jump*/ - //vecStridesBkwd = vecStridesBkwd - (uint16_t)16; - pSrc2 = pSrc2 - 16; - blkCnt--; - } -} -#else -void arm_split_rifft_q15( - q15_t * pSrc, - uint32_t fftLen, - const q15_t * pATable, - const q15_t * pBTable, - q15_t * pDst, - uint32_t modifier) -{ - uint32_t i; /* Loop Counter */ - q31_t outR, outI; /* Temporary variables for output */ - const 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[2 * fftLen]; - - 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]); - */ - -#if defined (ARM_MATH_DSP) - -#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(read_q15x2(pSrc2), read_q15x2((q15_t *) pCoefB)); -#else - /* -(-pIn[2 * n - 2 * i] * pBTable[2 * i] + pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1])) */ - outR = -(__SMUSD(read_q15x2(pSrc2), read_q15x2((q15_t *) 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(read_q15x2(pSrc1), read_q15x2 ((q15_t *) pCoefA), outR) >> 16U; - - /* -pIn[2 * n - 2 * i] * pBTable[2 * i + 1] + pIn[2 * n - 2 * i + 1] * pBTable[2 * i] */ - outI = __SMUADX(read_q15x2_da (&pSrc2), read_q15x2((q15_t *) pCoefB)); - - /* pIn[2 * i + 1] * pATable[2 * i] - pIn[2 * i] * pATable[2 * i + 1] */ -#ifndef ARM_MATH_BIG_ENDIAN - outI = __SMLSDX(read_q15x2 ((q15_t *) pCoefA), read_q15x2_ia (&pSrc1), -outI); -#else - outI = __SMLSDX(read_q15x2_ia (&pSrc1), read_q15x2 ((q15_t *) pCoefA), -outI); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - - /* write output */ -#ifndef ARM_MATH_BIG_ENDIAN - write_q15x2_ia (&pDst1, __PKHBT(outR, (outI >> 16U), 16)); -#else - write_q15x2_ia (&pDst1, __PKHBT((outI >> 16U), outR, 16)); -#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ - - -#else /* #if defined (ARM_MATH_DSP) */ - - outR = *pSrc2 * *pCoefB; - outR = outR - (*(pSrc2 + 1) * *(pCoefB + 1)); - outR = outR + (*pSrc1 * *pCoefA); - outR = (outR + (*(pSrc1 + 1) * *(pCoefA + 1))) >> 16; - - 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); - -#endif /* #if defined (ARM_MATH_DSP) */ - - /* update coefficient pointer */ - pCoefB = pCoefB + (2 * modifier); - pCoefA = pCoefA + (2 * modifier); - - i--; - } - -} -#endif /* defined(ARM_MATH_MVEI) */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_q31.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_q31.c deleted file mode 100644 index 5103601..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/TransformFunctions/arm_rfft_q31.c +++ /dev/null @@ -1,500 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_rfft_q31.c - * Description: FFT & RIFFT Q31 process function - * - * $Date: 18. March 2019 - * $Revision: V1.6.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "arm_math.h" - -/* ---------------------------------------------------------------------- - * Internal functions prototypes - * -------------------------------------------------------------------- */ - -void arm_split_rfft_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pATable, - const q31_t * pBTable, - q31_t * pDst, - uint32_t modifier); - -void arm_split_rifft_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pATable, - const 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 input buffer (Source buffer is modified by this function) - @param[out] pDst points to output buffer - @return none - - @par Input an output formats - 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" - @par - If the input buffer is of length N, the output buffer must have length 2*N. - The input buffer is modified by this function. - */ - -void arm_rfft_q31( - const arm_rfft_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst) -{ -#if defined(ARM_MATH_MVEI) - const arm_cfft_instance_q31 *S_CFFT = &(S->cfftInst); -#else - const arm_cfft_instance_q31 *S_CFFT = S->pCfft; -#endif - uint32_t L2 = S->fftLenReal >> 1U; - uint32_t i; - - /* 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; i < S->fftLenReal; i++) - { - pDst[i] = pDst[i] << 1U; - } - } - 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 input buffer - @param[in] fftLen length of FFT - @param[in] pATable points to twiddle Coef A buffer - @param[in] pBTable points to twiddle Coef B buffer - @param[out] pDst points to output buffer - @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table - @return none - */ - -#if defined(ARM_MATH_MVEI) - -void arm_split_rfft_q31( - q31_t *pSrc, - uint32_t fftLen, - const q31_t *pATable, - const q31_t *pBTable, - q31_t *pDst, - uint32_t modifier) -{ - q31_t const *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ - q31_t *pDst1 = &pDst[2], *pDst2 = &pDst[(4U * fftLen) - 1U]; /* temp pointers for output buffer */ - q31_t const *pSrc1 = &pSrc[2], *pSrc2 = &pSrc[(2U * fftLen) - 1U]; /* temp pointers for input buffer */ - q31_t const *pVecSrc1; - q31_t *pVecDst1; - q31x4x2_t vecIn, vecSum; - uint32_t blkCnt; - uint32x4_t vecStridesFwd, vecStridesBkwd; - q31x4_t vecInBkwd, vecCoefFwd0, vecCoefFwd1; - - /* - * Init coefficient pointers - */ - pCoefA = &pATable[modifier * 2U]; - pCoefB = &pBTable[modifier * 2U]; - /* - * scatter / gather offsets - * for ascending & descending addressing - */ - vecStridesFwd = vidupq_u32((uint32_t)0, 2); - vecStridesBkwd = -vecStridesFwd; - vecStridesFwd = vecStridesFwd * modifier; - - pVecSrc1 = (q31_t const *) pSrc1; - pVecDst1 = pDst1; - - blkCnt = fftLen >> 2; - while (blkCnt > 0U) - { - vecCoefFwd0 = vldrwq_gather_shifted_offset(pCoefA, vecStridesFwd); - vecCoefFwd1 = vldrwq_gather_shifted_offset(&pCoefA[1], vecStridesFwd); - vecIn = vld2q(pVecSrc1); - pVecSrc1 += 8; - /* - * outR = *pSrc1 * CoefA1; - */ - vecSum.val[0] = vmulhq(vecIn.val[0], vecCoefFwd0); - /* - * outI = *pSrc1++ * CoefA2; - */ - vecSum.val[1] = vmulhq(vecIn.val[0], vecCoefFwd1); - - vecInBkwd = vldrwq_gather_shifted_offset(pSrc2, vecStridesBkwd); - /* - * outR -= (*pSrc1 + *pSrc2) * CoefA2; - */ - vecInBkwd = vqaddq(vecIn.val[1], vecInBkwd); - vecSum.val[0] = vqsubq(vecSum.val[0], vmulhq(vecInBkwd, vecCoefFwd1)); - - vecInBkwd = vldrwq_gather_shifted_offset(pSrc2, vecStridesBkwd); - /* - * outI += *pSrc1++ * CoefA1; - */ - vecSum.val[1] = vqaddq(vecSum.val[1], vmulhq(vecIn.val[1], vecCoefFwd0)); - - vecCoefFwd0 = vldrwq_gather_shifted_offset(pCoefB, vecStridesFwd); - /* - * outI -= *pSrc2-- * CoefB1; - */ - vecSum.val[1] = vqsubq(vecSum.val[1], vmulhq(vecInBkwd, vecCoefFwd0)); - - vecInBkwd = vldrwq_gather_shifted_offset(&pSrc2[-1], vecStridesBkwd); - /* - * outI -= *pSrc2 * CoefA2; - */ - vecSum.val[1] = vqsubq(vecSum.val[1], vmulhq(vecInBkwd, vecCoefFwd1)); - /* - * outR += *pSrc2-- * CoefB1; - */ - vecSum.val[0] = vqaddq(vecSum.val[0], vmulhq(vecInBkwd, vecCoefFwd0)); - - vst2q(pVecDst1, vecSum); - pVecDst1 += 8; - /* - * write complex conjugate output - */ - vecSum.val[1] = -vecSum.val[1]; - vstrwq_scatter_shifted_offset(pDst2, vecStridesBkwd, vecSum.val[1]); - vstrwq_scatter_shifted_offset(&pDst2[-1], vecStridesBkwd, vecSum.val[0]); - /* - * update fwd and backwd offsets - */ - vecStridesFwd = vecStridesFwd + (modifier * 8U); - vecStridesBkwd = vecStridesBkwd - 8; - - blkCnt--; - } - - pDst[2U * fftLen] = (pSrc[0] - pSrc[1]) >> 1; - pDst[(2U * fftLen) + 1U] = 0; - - pDst[0] = (pSrc[0] + pSrc[1]) >> 1; - pDst[1] = 0; -} -#else -void arm_split_rfft_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pATable, - const q31_t * pBTable, - q31_t * pDst, - uint32_t modifier) -{ - uint32_t i; /* Loop Counter */ - q31_t outR, outI; /* Temporary variables for output */ - const 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[4 * fftLen - 1]; - q31_t *pIn1 = &pSrc[2], *pIn2 = &pSrc[2 * fftLen - 1]; - - /* Init coefficient pointers */ - pCoefA = &pATable[modifier * 2]; - pCoefB = &pBTable[modifier * 2]; - - 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 + (2 * modifier); - pCoefA = pCoefA + (2 * modifier - 1); - - /* Decrement loop count */ - i--; - } - - pDst[2 * fftLen] = (pSrc[0] - pSrc[1]) >> 1U; - pDst[2 * fftLen + 1] = 0; - - pDst[0] = (pSrc[0] + pSrc[1]) >> 1U; - pDst[1] = 0; -} -#endif /* defined(ARM_MATH_MVEI) */ - -/** - @brief Core Real IFFT process - @param[in] pSrc points to input buffer - @param[in] fftLen length of FFT - @param[in] pATable points to twiddle Coef A buffer - @param[in] pBTable points to twiddle Coef B buffer - @param[out] pDst points to output buffer - @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table - @return none - */ - -#if defined(ARM_MATH_MVEI) - -void arm_split_rifft_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pATable, - const q31_t * pBTable, - q31_t * pDst, - uint32_t modifier) -{ - q31_t const *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ - q31_t const *pSrc1 = &pSrc[0], *pSrc2 = &pSrc[(2U * fftLen) + 1U]; - q31_t const *pVecSrc1; - q31_t *pVecDst; - q31x4x2_t vecIn, vecSum; - uint32_t blkCnt; - uint32x4_t vecStridesFwd, vecStridesBkwd; - q31x4_t vecInBkwd, vecCoefFwd0, vecCoefFwd1; - - - /* - * Init coefficient pointers - */ - pCoefA = &pATable[0]; - pCoefB = &pBTable[0]; - /* - * scatter / gather offsets - * for ascending & descending addressing - */ - vecStridesFwd = vidupq_u32((uint32_t)0, 2); - vecStridesBkwd = -vecStridesFwd; - vecStridesFwd = vecStridesFwd * modifier; - - pVecSrc1 = (q31_t const *) pSrc1; - pVecDst = pDst; - - blkCnt = fftLen >> 2; - while (blkCnt > 0U) - { - vecCoefFwd0 = vldrwq_gather_shifted_offset(pCoefA, vecStridesFwd); - vecCoefFwd1 = vldrwq_gather_shifted_offset(&pCoefA[1], vecStridesFwd); - vecIn = vld2q(pVecSrc1); - pVecSrc1 += 8; - /* - * outR = *pSrc1 * CoefA1; - */ - vecSum.val[0] = vmulhq(vecIn.val[0], vecCoefFwd0); - /* - * outI = -(*pSrc1++) * CoefA2; - */ - vecIn.val[0] = (-vecIn.val[0]); - vecSum.val[1] = vmulhq(vecIn.val[0], vecCoefFwd1); - - vecInBkwd = vldrwq_gather_shifted_offset(pSrc2, vecStridesBkwd); - /* - * outR += (*pSrc1 + *pSrc2) * CoefA2; - */ - vecInBkwd = vqaddq(vecIn.val[1], vecInBkwd); - vecSum.val[0] = vqaddq(vecSum.val[0], vmulhq(vecInBkwd, vecCoefFwd1)); - - vecInBkwd = vldrwq_gather_shifted_offset(pSrc2, vecStridesBkwd); - /* - * outI += *pSrc1++ * CoefA1; - */ - vecSum.val[1] = vqaddq(vecSum.val[1], vmulhq(vecIn.val[1], vecCoefFwd0)); - - vecCoefFwd0 = vldrwq_gather_shifted_offset(pCoefB, vecStridesFwd); - /* - * outI -= *pSrc2-- * CoefB1; - */ - vecSum.val[1] = vqsubq(vecSum.val[1], vmulhq(vecInBkwd, vecCoefFwd0)); - - vecInBkwd = vldrwq_gather_shifted_offset(&pSrc2[-1], vecStridesBkwd); - /* - * outI += *pSrc2-- * CoefA2;; - */ - vecSum.val[1] = vqaddq(vecSum.val[1], vmulhq(vecInBkwd, vecCoefFwd1)); - /* - * outR += *pSrc2-- * CoefB1; - */ - vecSum.val[0] = vqaddq(vecSum.val[0], vmulhq(vecInBkwd, vecCoefFwd0)); - - vst2q(pVecDst, vecSum); - pVecDst += 8; - /* - * update fwd and backwd offsets - */ - vecStridesFwd = vecStridesFwd + (modifier * 8U); - vecStridesBkwd = vecStridesBkwd - 8; - - blkCnt--; - } -} -#else -void arm_split_rifft_q31( - q31_t * pSrc, - uint32_t fftLen, - const q31_t * pATable, - const q31_t * pBTable, - q31_t * pDst, - uint32_t modifier) -{ - q31_t outR, outI; /* Temporary variables for output */ - const 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[2 * fftLen + 1]; - - 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 * 2); - pCoefA = pCoefA + (modifier * 2 - 1); - - /* Decrement loop count */ - fftLen--; - } - -} - -#endif /* defined(ARM_MATH_MVEI) */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/configDsp.cmake b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/configDsp.cmake deleted file mode 100644 index 32c11a0..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/configDsp.cmake +++ /dev/null @@ -1,37 +0,0 @@ -function(configDsp project root) - -if (CONFIGTABLE) - # Public because initialization for FFT may be defined in client code - # and needs access to the table. - target_compile_definitions(${project} PUBLIC ARM_DSP_CONFIG_TABLES) -endif() - -if (LOOPUNROLL) - target_compile_definitions(${project} PRIVATE ARM_MATH_LOOPUNROLL) -endif() - -if (ROUNDING) - target_compile_definitions(${project} PRIVATE ARM_MATH_ROUNDING) -endif() - -if (MATRIXCHECK) - target_compile_definitions(${project} PRIVATE ARM_MATH_MATRIX_CHECK) -endif() - -if (AUTOVECTORIZE) - target_compile_definitions(${project} PRIVATE ARM_MATH_AUTOVECTORIZE) -endif() - -if (NEON OR NEONEXPERIMENTAL) - target_include_directories(${project} PRIVATE "${root}/CMSIS/DSP/ComputeLibrary/Include") -endif() - -if (FLOAT16) - target_compile_definitions(${project} PRIVATE ARM_MATH_FLOAT16) -endif() - -if (HELIUM OR MVEF OR SUPPORT) - target_include_directories(${project} PRIVATE "${root}/CMSIS/DSP/PrivateInclude") -endif() - -endfunction() diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/fft.cmake b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/fft.cmake deleted file mode 100644 index 2356c2b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/fft.cmake +++ /dev/null @@ -1,672 +0,0 @@ -function(fft PROJECT) -####################################### -# -# CFFT F32 -# - - -if (CONFIGTABLE AND CFFT_F32_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_16) -if (HELIUM OR MVEF) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_16) -else() - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_16) -endif() -endif() - -if (CONFIGTABLE AND CFFT_F32_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_32) -if (HELIUM OR MVEF) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_32) -else() - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_32) -endif() -endif() - -if (CONFIGTABLE AND CFFT_F32_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_64) -if (HELIUM OR MVEF) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_64) -else() - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_64) -endif() -endif() - -if (CONFIGTABLE AND CFFT_F32_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_128) -if (HELIUM OR MVEF) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_128) -else() - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_128) -endif() -endif() - -if (CONFIGTABLE AND CFFT_F32_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_256) -if (HELIUM OR MVEF) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_256) -else() - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_256) -endif() -endif() - -if (CONFIGTABLE AND CFFT_F32_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_512) -if (HELIUM OR MVEF) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_512) -else() - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_512) -endif() -endif() - -if (CONFIGTABLE AND CFFT_F32_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_1024) -if (HELIUM OR MVEF) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_1024) -else() - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_1024) -endif() -endif() - -if (CONFIGTABLE AND CFFT_F32_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_2048) -if (HELIUM OR MVEF) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_2048) -else() - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_2048) -endif() -endif() - -if (CONFIGTABLE AND CFFT_F32_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -if (HELIUM OR MVEF) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_4096) -else() - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_4096) -endif() -endif() - - -####################################### -# -# CFFT F64 -# - - -if (CONFIGTABLE AND CFFT_F64_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_16) -endif() - -if (CONFIGTABLE AND CFFT_F64_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_64) -endif() - -if (CONFIGTABLE AND CFFT_F64_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_64) -endif() - -if (CONFIGTABLE AND CFFT_F64_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_128) -endif() - -if (CONFIGTABLE AND CFFT_F64_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_256) -endif() - -if (CONFIGTABLE AND CFFT_F64_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_512) -endif() - -if (CONFIGTABLE AND CFFT_F64_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_1024) -endif() - -if (CONFIGTABLE AND CFFT_F64_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_2048) -endif() - -if (CONFIGTABLE AND CFFT_F64_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_4096) -endif() - -####################################### -# -# CFFT Q31 -# - -if (CONFIGTABLE AND CFFT_Q31_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_16) -endif() - -if (CONFIGTABLE AND CFFT_Q31_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_32) -endif() - -if (CONFIGTABLE AND CFFT_Q31_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_64) -endif() - -if (CONFIGTABLE AND CFFT_Q31_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_128) -endif() - -if (CONFIGTABLE AND CFFT_Q31_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_256) -endif() - -if (CONFIGTABLE AND CFFT_Q31_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_512) -endif() - -if (CONFIGTABLE AND CFFT_Q31_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_1024) -endif() - -if (CONFIGTABLE AND CFFT_Q31_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_2048) -endif() - -if (CONFIGTABLE AND CFFT_Q31_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_4096) -endif() - -####################################### -# -# CFFT Q15 -# - -if (CONFIGTABLE AND CFFT_Q15_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_16) -endif() - -if (CONFIGTABLE AND CFFT_Q15_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_32) -endif() - -if (CONFIGTABLE AND CFFT_Q15_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_64) -endif() - -if (CONFIGTABLE AND CFFT_Q15_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_128) -endif() - -if (CONFIGTABLE AND CFFT_Q15_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_256) -endif() - -if (CONFIGTABLE AND CFFT_Q15_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_512) -endif() - -if (CONFIGTABLE AND CFFT_Q15_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_1024) -endif() - -if (CONFIGTABLE AND CFFT_Q15_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_2048) -endif() - -if (CONFIGTABLE AND CFFT_Q15_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_4096) -endif() - -####################################### -# -# RFFT FAST F64 -# - -if (CONFIGTABLE AND RFFT_FAST_F64_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F64_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_16) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F64_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F64_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_32) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F64_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F64_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_64) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F64_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F64_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_128) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F64_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F64_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_256) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F64_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F64_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_512) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F64_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F64_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_1024) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F64_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT64_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F64_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F64_2048) -endif() - -####################################### -# -# RFFT FAST F32 -# - -if (CONFIGTABLE AND RFFT_FAST_F32_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F32_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_16) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F32_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F32_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_32) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F32_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F32_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_64) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F32_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F32_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_128) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F32_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F32_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_256) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F32_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_512) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F32_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_1024) -endif() - -if (CONFIGTABLE AND RFFT_FAST_F32_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_2048) -endif() - -####################################### -# -# RFFT F32 -# - -if (CONFIGTABLE AND RFFT_F32_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND RFFT_F32_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND RFFT_F32_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND RFFT_F32_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND RFFT_F32_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND RFFT_F32_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND RFFT_F32_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND RFFT_F32_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND RFFT_F32_8192) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -####################################### -# -# RFFT Q31 -# - -if (CONFIGTABLE AND RFFT_Q31_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_16) -endif() - -if (CONFIGTABLE AND RFFT_Q31_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_32) -endif() - -if (CONFIGTABLE AND RFFT_Q31_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_64) -endif() - -if (CONFIGTABLE AND RFFT_Q31_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_128) -endif() - -if (CONFIGTABLE AND RFFT_Q31_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_256) -endif() - -if (CONFIGTABLE AND RFFT_Q31_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_512) -endif() - -if (CONFIGTABLE AND RFFT_Q31_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_1024) -endif() - -if (CONFIGTABLE AND RFFT_Q31_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_2048) -endif() - -if (CONFIGTABLE AND RFFT_Q31_8192) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_4096) -endif() - -####################################### -# -# RFFT FAST Q15 -# - -if (CONFIGTABLE AND RFFT_Q15_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_16) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_16) -endif() - -if (CONFIGTABLE AND RFFT_Q15_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_32) -endif() - -if (CONFIGTABLE AND RFFT_Q15_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_64) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_64) -endif() - -if (CONFIGTABLE AND RFFT_Q15_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_128) -endif() - -if (CONFIGTABLE AND RFFT_Q15_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_256) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_256) -endif() - -if (CONFIGTABLE AND RFFT_Q15_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_512) -endif() - -if (CONFIGTABLE AND RFFT_Q15_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_1024) -endif() - -if (CONFIGTABLE AND RFFT_Q15_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_2048) -endif() - -if (CONFIGTABLE AND RFFT_Q15_8192) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_4096) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_4096) -endif() - -####################################### -# -# DCT4 F32 -# - -if (CONFIGTABLE AND DCT4_F32_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_F32_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND DCT4_F32_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_F32_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND DCT4_F32_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_F32_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -if (CONFIGTABLE AND DCT4_F32_8192) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_F32_8192) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_F32) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) -endif() - -####################################### -# -# DCT4 Q31 -# - -if (CONFIGTABLE AND DCT4_Q31_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_Q31_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_4096) -endif() - -if (CONFIGTABLE AND DCT4_Q31_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_Q31_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_4096) -endif() - -if (CONFIGTABLE AND DCT4_Q31_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_Q31_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_4096) -endif() - -if (CONFIGTABLE AND DCT4_Q31_8192) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_Q31_8192) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q31) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q31_4096) -endif() - -####################################### -# -# DCT4 Q15 -# - -if (CONFIGTABLE AND DCT4_Q15_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_Q15_128) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_4096) -endif() - -if (CONFIGTABLE AND DCT4_Q15_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_Q15_512) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_4096) -endif() - -if (CONFIGTABLE AND DCT4_Q15_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_Q15_2048) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_4096) -endif() - -if (CONFIGTABLE AND DCT4_Q15_8192) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_DCT4_Q15_8192) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_REALCOEF_Q15) - - # For cfft_radix4_init - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREV_1024) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_Q15_4096) -endif() - -endfunction() \ No newline at end of file diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/interpol.cmake b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/interpol.cmake deleted file mode 100644 index 2538d91..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/Source/interpol.cmake +++ /dev/null @@ -1,51 +0,0 @@ -function(interpol PROJECT) - -if (CONFIGTABLE AND ARM_COS_F32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_SIN_F32) -endif() - -if (CONFIGTABLE AND ARM_COS_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_SIN_Q31) -endif() - -if (CONFIGTABLE AND ARM_COS_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_SIN_Q15) -endif() - -if (CONFIGTABLE AND ARM_SIN_F32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_SIN_F32) -endif() - -if (CONFIGTABLE AND ARM_SIN_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_SIN_Q31) -endif() - -if (CONFIGTABLE AND ARM_SIN_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_SIN_Q15) -endif() - -if (CONFIGTABLE AND ARM_SIN_COS_F32) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_SIN_F32) -endif() - -if (CONFIGTABLE AND ARM_SIN_COS_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_SIN_Q31) -endif() - -if (CONFIGTABLE AND ARM_LMS_NORM_Q31) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_RECIP_Q31) -endif() - -if (CONFIGTABLE AND ARM_LMS_NORM_Q15) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_RECIP_Q15) -endif() - -if (CONFIGTABLE AND ARM_CMPLX_MAG_Q31 AND (MVEI OR HELIUM)) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_FAST_SQRT_Q31_MVE) -endif() - -if (CONFIGTABLE AND ARM_CMPLX_MAG_Q15 AND (MVEI OR HELIUM)) - target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_FAST_SQRT_Q15_MVE) -endif() - -endfunction() \ No newline at end of file diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_common_tables.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_common_tables.h deleted file mode 100644 index 721b18d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_common_tables.h +++ /dev/null @@ -1,517 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_common_tables.h - * Description: Extern declaration for common tables - * - * $Date: 27. January 2017 - * $Revision: V.1.5.1 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_COMMON_TABLES_H -#define _ARM_COMMON_TABLES_H - -#include "arm_math.h" - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - /* Double Precision Float CFFT twiddles */ - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREV_1024) - extern const uint16_t armBitRevTable[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_16) - extern const uint64_t twiddleCoefF64_16[32]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_32) - extern const uint64_t twiddleCoefF64_32[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_64) - extern const uint64_t twiddleCoefF64_64[128]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_128) - extern const uint64_t twiddleCoefF64_128[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_256) - extern const uint64_t twiddleCoefF64_256[512]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_512) - extern const uint64_t twiddleCoefF64_512[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_1024) - extern const uint64_t twiddleCoefF64_1024[2048]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_2048) - extern const uint64_t twiddleCoefF64_2048[4096]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_4096) - extern const uint64_t twiddleCoefF64_4096[8192]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) - extern const float32_t twiddleCoef_16[32]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) - extern const float32_t twiddleCoef_32[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) - extern const float32_t twiddleCoef_64[128]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) - extern const float32_t twiddleCoef_128[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) - extern const float32_t twiddleCoef_256[512]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) - extern const float32_t twiddleCoef_512[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) - extern const float32_t twiddleCoef_1024[2048]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) - extern const float32_t twiddleCoef_2048[4096]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) - extern const float32_t twiddleCoef_4096[8192]; - #define twiddleCoef twiddleCoef_4096 - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_16) - extern const q31_t twiddleCoef_16_q31[24]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_32) - extern const q31_t twiddleCoef_32_q31[48]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_64) - extern const q31_t twiddleCoef_64_q31[96]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_128) - extern const q31_t twiddleCoef_128_q31[192]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_256) - extern const q31_t twiddleCoef_256_q31[384]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_512) - extern const q31_t twiddleCoef_512_q31[768]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) - extern const q31_t twiddleCoef_1024_q31[1536]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) - extern const q31_t twiddleCoef_2048_q31[3072]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) - extern const q31_t twiddleCoef_4096_q31[6144]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_16) - extern const q15_t twiddleCoef_16_q15[24]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_32) - extern const q15_t twiddleCoef_32_q15[48]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_64) - extern const q15_t twiddleCoef_64_q15[96]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_128) - extern const q15_t twiddleCoef_128_q15[192]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_256) - extern const q15_t twiddleCoef_256_q15[384]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_512) - extern const q15_t twiddleCoef_512_q15[768]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) - extern const q15_t twiddleCoef_1024_q15[1536]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) - extern const q15_t twiddleCoef_2048_q15[3072]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) - extern const q15_t twiddleCoef_4096_q15[6144]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - /* Double Precision Float RFFT twiddles */ - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_32) - extern const uint64_t twiddleCoefF64_rfft_32[32]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_64) - extern const uint64_t twiddleCoefF64_rfft_64[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_128) - extern const uint64_t twiddleCoefF64_rfft_128[128]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_256) - extern const uint64_t twiddleCoefF64_rfft_256[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_512) - extern const uint64_t twiddleCoefF64_rfft_512[512]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_1024) - extern const uint64_t twiddleCoefF64_rfft_1024[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_2048) - extern const uint64_t twiddleCoefF64_rfft_2048[2048]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_4096) - extern const uint64_t twiddleCoefF64_rfft_4096[4096]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32) - extern const float32_t twiddleCoef_rfft_32[32]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64) - extern const float32_t twiddleCoef_rfft_64[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128) - extern const float32_t twiddleCoef_rfft_128[128]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256) - extern const float32_t twiddleCoef_rfft_256[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512) - extern const float32_t twiddleCoef_rfft_512[512]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024) - extern const float32_t twiddleCoef_rfft_1024[1024]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048) - extern const float32_t twiddleCoef_rfft_2048[2048]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096) - extern const float32_t twiddleCoef_rfft_4096[4096]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - - /* Double precision floating-point bit reversal tables */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_16) - #define ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH ((uint16_t)12) - extern const uint16_t armBitRevIndexTableF64_16[ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_32) - #define ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH ((uint16_t)24) - extern const uint16_t armBitRevIndexTableF64_32[ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_64) - #define ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH ((uint16_t)56) - extern const uint16_t armBitRevIndexTableF64_64[ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_128) - #define ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH ((uint16_t)112) - extern const uint16_t armBitRevIndexTableF64_128[ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_256) - #define ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH ((uint16_t)240) - extern const uint16_t armBitRevIndexTableF64_256[ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_512) - #define ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH ((uint16_t)480) - extern const uint16_t armBitRevIndexTableF64_512[ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_1024) - #define ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH ((uint16_t)992) - extern const uint16_t armBitRevIndexTableF64_1024[ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_2048) - #define ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH ((uint16_t)1984) - extern const uint16_t armBitRevIndexTableF64_2048[ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_4096) - #define ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH ((uint16_t)4032) - extern const uint16_t armBitRevIndexTableF64_4096[ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - /* floating-point bit reversal tables */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_16) - #define ARMBITREVINDEXTABLE_16_TABLE_LENGTH ((uint16_t)20) - extern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE_16_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_32) - #define ARMBITREVINDEXTABLE_32_TABLE_LENGTH ((uint16_t)48) - extern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE_32_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_64) - #define ARMBITREVINDEXTABLE_64_TABLE_LENGTH ((uint16_t)56) - extern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE_64_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_128) - #define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208) - extern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_256) - #define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440) - extern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_512) - #define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448) - extern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_1024) - #define ARMBITREVINDEXTABLE_1024_TABLE_LENGTH ((uint16_t)1800) - extern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE_1024_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_2048) - #define ARMBITREVINDEXTABLE_2048_TABLE_LENGTH ((uint16_t)3808) - extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE_2048_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_4096) - #define ARMBITREVINDEXTABLE_4096_TABLE_LENGTH ((uint16_t)4032) - extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE_4096_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - - /* fixed-point bit reversal tables */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) - #define ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH ((uint16_t)12) - extern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_32) - #define ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH ((uint16_t)24) - extern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) - #define ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH ((uint16_t)56) - extern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_128) - #define ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH ((uint16_t)112) - extern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) - #define ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH ((uint16_t)240) - extern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_512) - #define ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH ((uint16_t)480) - extern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) - #define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992) - extern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_2048) - #define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984) - extern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) - #define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032) - extern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_F32) - extern const float32_t realCoefA[8192]; - extern const float32_t realCoefB[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_Q31) - extern const q31_t realCoefAQ31[8192]; - extern const q31_t realCoefBQ31[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_Q15) - extern const q15_t realCoefAQ15[8192]; - extern const q15_t realCoefBQ15[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_128) - extern const float32_t Weights_128[256]; - extern const float32_t cos_factors_128[128]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_512) - extern const float32_t Weights_512[1024]; - extern const float32_t cos_factors_512[512]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_2048) - extern const float32_t Weights_2048[4096]; - extern const float32_t cos_factors_2048[2048]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_8192) - extern const float32_t Weights_8192[16384]; - extern const float32_t cos_factors_8192[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_128) - extern const q15_t WeightsQ15_128[256]; - extern const q15_t cos_factorsQ15_128[128]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_512) - extern const q15_t WeightsQ15_512[1024]; - extern const q15_t cos_factorsQ15_512[512]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_2048) - extern const q15_t WeightsQ15_2048[4096]; - extern const q15_t cos_factorsQ15_2048[2048]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_8192) - extern const q15_t WeightsQ15_8192[16384]; - extern const q15_t cos_factorsQ15_8192[8192]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_128) - extern const q31_t WeightsQ31_128[256]; - extern const q31_t cos_factorsQ31_128[128]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_512) - extern const q31_t WeightsQ31_512[1024]; - extern const q31_t cos_factorsQ31_512[512]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_2048) - extern const q31_t WeightsQ31_2048[4096]; - extern const q31_t cos_factorsQ31_2048[2048]; - #endif - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_8192) - extern const q31_t WeightsQ31_8192[16384]; - extern const q31_t cos_factorsQ31_8192[8192]; - #endif - -#endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_ALLOW_TABLES) - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q15) - extern const q15_t armRecipTableQ15[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q31) - extern const q31_t armRecipTableQ31[64]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - /* Tables for Fast Math Sine and Cosine */ - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_F32) - extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q31) - extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q15) - extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - - #if defined(ARM_MATH_MVEI) - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q31_MVE) - extern const q31_t sqrtTable_Q31[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - #endif - - #if defined(ARM_MATH_MVEI) - #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q15_MVE) - extern const q15_t sqrtTable_Q15[256]; - #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - #endif - -#endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_TABLES) */ - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) - extern const float32_t exp_tab[8]; - extern const float32_t __logf_lut_f32[8]; -#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) -extern const unsigned char hwLUT[256]; -#endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ - -#endif /* ARM_COMMON_TABLES_H */ - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_const_structs.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_const_structs.h deleted file mode 100644 index 83984c4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_const_structs.h +++ /dev/null @@ -1,76 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_const_structs.h - * Description: Constant structs that are initialized for user convenience. - * For example, some can be given as arguments to the arm_cfft_f32() function. - * - * $Date: 27. January 2017 - * $Revision: V.1.5.1 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_CONST_STRUCTS_H -#define _ARM_CONST_STRUCTS_H - -#include "arm_math.h" -#include "arm_common_tables.h" - - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len16; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len32; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len64; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len128; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len256; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len512; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len1024; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len2048; - extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len4096; - - 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 --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_helium_utils.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_helium_utils.h deleted file mode 100644 index 8568857..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_helium_utils.h +++ /dev/null @@ -1,348 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_helium_utils.h - * Description: Utility functions for Helium development - * - * $Date: 09. September 2019 - * $Revision: V.1.5.1 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_UTILS_HELIUM_H_ -#define _ARM_UTILS_HELIUM_H_ - -/*************************************** - -Definitions available for MVEF and MVEI - -***************************************/ -#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) - -#define INACTIVELANE 0 /* inactive lane content */ - - -#endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) */ - -/*************************************** - -Definitions available for MVEF only - -***************************************/ -#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) - -__STATIC_FORCEINLINE float32_t vecAddAcrossF32Mve(float32x4_t in) -{ - float32_t acc; - - acc = vgetq_lane(in, 0) + vgetq_lane(in, 1) + - vgetq_lane(in, 2) + vgetq_lane(in, 3); - - return acc; -} - -/* newton initial guess */ -#define INVSQRT_MAGIC_F32 0x5f3759df - -#define INVSQRT_NEWTON_MVE_F32(invSqrt, xHalf, xStart)\ -{ \ - float32x4_t tmp; \ - \ - /* tmp = xhalf * x * x */ \ - tmp = vmulq(xStart, xStart); \ - tmp = vmulq(tmp, xHalf); \ - /* (1.5f - xhalf * x * x) */ \ - tmp = vsubq(vdupq_n_f32(1.5f), tmp); \ - /* x = x*(1.5f-xhalf*x*x); */ \ - invSqrt = vmulq(tmp, xStart); \ -} -#endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) */ - -/*************************************** - -Definitions available for MVEI only - -***************************************/ -#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI) - - -#include "arm_common_tables.h" - -/* Following functions are used to transpose matrix in f32 and q31 cases */ -__STATIC_INLINE arm_status arm_mat_trans_32bit_2x2_mve( - uint32_t * pDataSrc, - uint32_t * pDataDest) -{ - static const uint32x4_t vecOffs = { 0, 2, 1, 3 }; - /* - * - * | 0 1 | => | 0 2 | - * | 2 3 | | 1 3 | - * - */ - uint32x4_t vecIn = vldrwq_u32((uint32_t const *)pDataSrc); - vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs, vecIn); - - return (ARM_MATH_SUCCESS); -} - -__STATIC_INLINE arm_status arm_mat_trans_32bit_3x3_mve( - uint32_t * pDataSrc, - uint32_t * pDataDest) -{ - const uint32x4_t vecOffs1 = { 0, 3, 6, 1}; - const uint32x4_t vecOffs2 = { 4, 7, 2, 5}; - /* - * - * | 0 1 2 | | 0 3 6 | 4 x 32 flattened version | 0 3 6 1 | - * | 3 4 5 | => | 1 4 7 | => | 4 7 2 5 | - * | 6 7 8 | | 2 5 8 | (row major) | 8 . . . | - * - */ - uint32x4_t vecIn1 = vldrwq_u32((uint32_t const *) pDataSrc); - uint32x4_t vecIn2 = vldrwq_u32((uint32_t const *) &pDataSrc[4]); - - vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs1, vecIn1); - vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs2, vecIn2); - - pDataDest[8] = pDataSrc[8]; - - return (ARM_MATH_SUCCESS); -} - -__STATIC_INLINE arm_status arm_mat_trans_32bit_4x4_mve(uint32_t * pDataSrc, uint32_t * pDataDest) -{ - /* - * 4x4 Matrix transposition - * is 4 x de-interleave operation - * - * 0 1 2 3 0 4 8 12 - * 4 5 6 7 1 5 9 13 - * 8 9 10 11 2 6 10 14 - * 12 13 14 15 3 7 11 15 - */ - - uint32x4x4_t vecIn; - - vecIn = vld4q((uint32_t const *) pDataSrc); - vstrwq(pDataDest, vecIn.val[0]); - pDataDest += 4; - vstrwq(pDataDest, vecIn.val[1]); - pDataDest += 4; - vstrwq(pDataDest, vecIn.val[2]); - pDataDest += 4; - vstrwq(pDataDest, vecIn.val[3]); - - return (ARM_MATH_SUCCESS); -} - - -__STATIC_INLINE arm_status arm_mat_trans_32bit_generic_mve( - uint16_t srcRows, - uint16_t srcCols, - uint32_t * pDataSrc, - uint32_t * pDataDest) -{ - uint32x4_t vecOffs; - uint32_t i; - uint32_t blkCnt; - uint32_t const *pDataC; - uint32_t *pDataDestR; - uint32x4_t vecIn; - - vecOffs = vidupq_u32((uint32_t)0, 1); - vecOffs = vecOffs * srcCols; - - i = srcCols; - do - { - pDataC = (uint32_t const *) pDataSrc; - pDataDestR = pDataDest; - - blkCnt = srcRows >> 2; - while (blkCnt > 0U) - { - vecIn = vldrwq_gather_shifted_offset_u32(pDataC, vecOffs); - vstrwq(pDataDestR, vecIn); - pDataDestR += 4; - pDataC = pDataC + srcCols * 4; - /* - * Decrement the blockSize loop counter - */ - blkCnt--; - } - - /* - * tail - */ - blkCnt = srcRows & 3; - if (blkCnt > 0U) - { - mve_pred16_t p0 = vctp32q(blkCnt); - vecIn = vldrwq_gather_shifted_offset_u32(pDataC, vecOffs); - vstrwq_p(pDataDestR, vecIn, p0); - } - - pDataSrc += 1; - pDataDest += srcRows; - } - while (--i); - - return (ARM_MATH_SUCCESS); -} - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q31_MVE) -__STATIC_INLINE q31x4_t FAST_VSQRT_Q31(q31x4_t vecIn) -{ - q63x2_t vecTmpLL; - q31x4_t vecTmp0, vecTmp1; - q31_t scale; - q63_t tmp64; - q31x4_t vecNrm, vecDst, vecIdx, vecSignBits; - - - vecSignBits = vclsq(vecIn); - vecSignBits = vbicq(vecSignBits, 1); - /* - * in = in << no_of_sign_bits; - */ - vecNrm = vshlq(vecIn, vecSignBits); - /* - * index = in >> 24; - */ - vecIdx = vecNrm >> 24; - vecIdx = vecIdx << 1; - - vecTmp0 = vldrwq_gather_shifted_offset_s32(sqrtTable_Q31, vecIdx); - - vecIdx = vecIdx + 1; - - vecTmp1 = vldrwq_gather_shifted_offset_s32(sqrtTable_Q31, vecIdx); - - vecTmp1 = vqrdmulhq(vecTmp1, vecNrm); - vecTmp0 = vecTmp0 - vecTmp1; - vecTmp1 = vqrdmulhq(vecTmp0, vecTmp0); - vecTmp1 = vqrdmulhq(vecNrm, vecTmp1); - vecTmp1 = vdupq_n_s32(0x18000000) - vecTmp1; - vecTmp0 = vqrdmulhq(vecTmp0, vecTmp1); - vecTmpLL = vmullbq_int(vecNrm, vecTmp0); - - /* - * scale elements 0, 2 - */ - scale = 26 + (vecSignBits[0] >> 1); - tmp64 = asrl(vecTmpLL[0], scale); - vecDst[0] = (q31_t) tmp64; - - scale = 26 + (vecSignBits[2] >> 1); - tmp64 = asrl(vecTmpLL[1], scale); - vecDst[2] = (q31_t) tmp64; - - vecTmpLL = vmulltq_int(vecNrm, vecTmp0); - - /* - * scale elements 1, 3 - */ - scale = 26 + (vecSignBits[1] >> 1); - tmp64 = asrl(vecTmpLL[0], scale); - vecDst[1] = (q31_t) tmp64; - - scale = 26 + (vecSignBits[3] >> 1); - tmp64 = asrl(vecTmpLL[1], scale); - vecDst[3] = (q31_t) tmp64; - /* - * set negative values to 0 - */ - vecDst = vdupq_m(vecDst, 0, vcmpltq_n_s32(vecIn, 0)); - - return vecDst; -} -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q15_MVE) -__STATIC_INLINE q15x8_t FAST_VSQRT_Q15(q15x8_t vecIn) -{ - q31x4_t vecTmpLev, vecTmpLodd, vecSignL; - q15x8_t vecTmp0, vecTmp1; - q15x8_t vecNrm, vecDst, vecIdx, vecSignBits; - - vecDst = vuninitializedq_s16(); - - vecSignBits = vclsq(vecIn); - vecSignBits = vbicq(vecSignBits, 1); - /* - * in = in << no_of_sign_bits; - */ - vecNrm = vshlq(vecIn, vecSignBits); - - vecIdx = vecNrm >> 8; - vecIdx = vecIdx << 1; - - vecTmp0 = vldrhq_gather_shifted_offset_s16(sqrtTable_Q15, vecIdx); - - vecIdx = vecIdx + 1; - - vecTmp1 = vldrhq_gather_shifted_offset_s16(sqrtTable_Q15, vecIdx); - - vecTmp1 = vqrdmulhq(vecTmp1, vecNrm); - vecTmp0 = vecTmp0 - vecTmp1; - vecTmp1 = vqrdmulhq(vecTmp0, vecTmp0); - vecTmp1 = vqrdmulhq(vecNrm, vecTmp1); - vecTmp1 = vdupq_n_s16(0x1800) - vecTmp1; - vecTmp0 = vqrdmulhq(vecTmp0, vecTmp1); - - vecSignBits = vecSignBits >> 1; - - vecTmpLev = vmullbq_int(vecNrm, vecTmp0); - vecTmpLodd = vmulltq_int(vecNrm, vecTmp0); - - vecTmp0 = vecSignBits + 10; - /* - * negate sign to apply register based vshl - */ - vecTmp0 = -vecTmp0; - - /* - * shift even elements - */ - vecSignL = vmovlbq(vecTmp0); - vecTmpLev = vshlq(vecTmpLev, vecSignL); - /* - * shift odd elements - */ - vecSignL = vmovltq(vecTmp0); - vecTmpLodd = vshlq(vecTmpLodd, vecSignL); - /* - * merge and narrow odd and even parts - */ - vecDst = vmovnbq_s32(vecDst, vecTmpLev); - vecDst = vmovntq_s32(vecDst, vecTmpLodd); - /* - * set negative values to 0 - */ - vecDst = vdupq_m(vecDst, 0, vcmpltq_n_s16(vecIn, 0)); - - return vecDst; -} -#endif - -#endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI) */ - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_math.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_math.h deleted file mode 100644 index 6ba056e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_math.h +++ /dev/null @@ -1,8970 +0,0 @@ -/****************************************************************************** - * @file arm_math.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief Public header file for CMSIS DSP Library - ******************************************************************************/ -/* - * Copyright (c) 2010-2019 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - \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 and Cortex-A 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 - * - Filtering functions - * - Matrix functions - * - Transform functions - * - Motor control functions - * - Statistical functions - * - Support functions - * - Interpolation functions - * - Support Vector Machine functions (SVM) - * - Bayes classifier functions - * - Distance functions - * - * The library has generally 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. - * - * Here is the list of pre-built libraries : - * - arm_cortexM7lfdp_math.lib (Cortex-M7, Little endian, Double Precision Floating Point Unit) - * - arm_cortexM7bfdp_math.lib (Cortex-M7, Big endian, Double Precision Floating Point Unit) - * - arm_cortexM7lfsp_math.lib (Cortex-M7, Little endian, Single Precision Floating Point Unit) - * - arm_cortexM7bfsp_math.lib (Cortex-M7, Big endian and Single Precision Floating Point Unit on) - * - arm_cortexM7l_math.lib (Cortex-M7, Little endian) - * - arm_cortexM7b_math.lib (Cortex-M7, Big endian) - * - arm_cortexM4lf_math.lib (Cortex-M4, Little endian, Floating Point Unit) - * - arm_cortexM4bf_math.lib (Cortex-M4, Big endian, Floating Point Unit) - * - arm_cortexM4l_math.lib (Cortex-M4, Little endian) - * - arm_cortexM4b_math.lib (Cortex-M4, Big endian) - * - arm_cortexM3l_math.lib (Cortex-M3, Little endian) - * - arm_cortexM3b_math.lib (Cortex-M3, Big endian) - * - arm_cortexM0l_math.lib (Cortex-M0 / Cortex-M0+, Little endian) - * - arm_cortexM0b_math.lib (Cortex-M0 / Cortex-M0+, Big endian) - * - arm_ARMv8MBLl_math.lib (Armv8-M Baseline, Little endian) - * - arm_ARMv8MMLl_math.lib (Armv8-M Mainline, Little endian) - * - arm_ARMv8MMLlfsp_math.lib (Armv8-M Mainline, Little endian, Single Precision Floating Point Unit) - * - arm_ARMv8MMLld_math.lib (Armv8-M Mainline, Little endian, DSP instructions) - * - arm_ARMv8MMLldfsp_math.lib (Armv8-M Mainline, Little endian, DSP instructions, Single Precision Floating Point Unit) - * - * 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-M cores with little endian and big endian. Same header file will be used for floating point unit(FPU) variants. - * - * - * Examples - * -------- - * - * The library ships with a number of examples which demonstrate how to use the library functions. - * - * Toolchain Support - * ------------ - * - * The library is now tested on Fast Models building with cmake. - * Core M0, M7, A5 are tested. - * - * - * - * Building the Library - * ------------ - * - * The library installer contains a project file to rebuild libraries on MDK toolchain in the CMSIS\\DSP\\Projects\\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 preprocessor macros detailed above. - * - * There is also a work in progress cmake build. The README file is giving more details. - * - * Preprocessor Macros - * ------------ - * - * Each library project have different preprocessor macros. - * - * - 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_LOOPUNROLL: - * - * Define macro ARM_MATH_LOOPUNROLL to enable manual loop unrolling in DSP functions - * - * - ARM_MATH_NEON: - * - * Define macro ARM_MATH_NEON to enable Neon versions of the DSP functions. - * It is not enabled by default when Neon is available because performances are - * dependent on the compiler and target architecture. - * - * - ARM_MATH_NEON_EXPERIMENTAL: - * - * Define macro ARM_MATH_NEON_EXPERIMENTAL to enable experimental Neon versions of - * of some DSP functions. Experimental Neon versions currently do not have better - * performances than the scalar versions. - * - * - ARM_MATH_HELIUM: - * - * It implies the flags ARM_MATH_MVEF and ARM_MATH_MVEI and ARM_MATH_FLOAT16. - * - * - ARM_MATH_MVEF: - * - * Select Helium versions of the f32 algorithms. - * It implies ARM_MATH_FLOAT16 and ARM_MATH_MVEI. - * - * - ARM_MATH_MVEI: - * - * Select Helium versions of the int and fixed point algorithms. - * - * - ARM_MATH_FLOAT16: - * - * Float16 implementations of some algorithms (Requires MVE extension). - * - *
    - * 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\\DSP_Lib_TestSuite | DSP_Lib test suite | - * |\b CMSIS\\DSP\\Examples | Example projects demonstrating the usage of the library functions | - * |\b CMSIS\\DSP\\Include | DSP_Lib include files | - * |\b CMSIS\\DSP\\Lib | DSP_Lib binaries | - * |\b CMSIS\\DSP\\Projects | Projects to rebuild DSP_Lib binaries | - * |\b CMSIS\\DSP\\Source | DSP_Lib source files | - * - *
    - * Revision History of CMSIS-DSP - * ------------ - * Please refer to \ref ChangeLog_pg. - */ - - -/** - * @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 \ref arm_mat_init_f32(), \ref arm_mat_init_q31() and \ref 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 - */ - -/** - * @defgroup groupSVM SVM Functions - * This set of functions is implementing SVM classification on 2 classes. - * The training must be done from scikit-learn. The parameters can be easily - * generated from the scikit-learn object. Some examples are given in - * DSP/Testing/PatternGeneration/SVM.py - * - * If more than 2 classes are needed, the functions in this folder - * will have to be used, as building blocks, to do multi-class classification. - * - * No multi-class classification is provided in this SVM folder. - * - */ - - -/** - * @defgroup groupBayes Bayesian estimators - * - * Implement the naive gaussian Bayes estimator. - * The training must be done from scikit-learn. - * - * The parameters can be easily - * generated from the scikit-learn object. Some examples are given in - * DSP/Testing/PatternGeneration/Bayes.py - */ - -/** - * @defgroup groupDistance Distance functions - * - * Distance functions for use with clustering algorithms. - * There are distance functions for float vectors and boolean vectors. - * - */ - - -#ifndef _ARM_MATH_H -#define _ARM_MATH_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Compiler specific diagnostic adjustment */ -#if defined ( __CC_ARM ) - -#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - -#elif defined ( __GNUC__ ) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wsign-conversion" - #pragma GCC diagnostic ignored "-Wconversion" - #pragma GCC diagnostic ignored "-Wunused-parameter" - -#elif defined ( __ICCARM__ ) - -#elif defined ( __TI_ARM__ ) - -#elif defined ( __CSMC__ ) - -#elif defined ( __TASKING__ ) - -#elif defined ( _MSC_VER ) - -#else - #error Unknown compiler -#endif - - -/* Included for instrinsics definitions */ -#if defined (_MSC_VER ) -#include -#define __STATIC_FORCEINLINE static __forceinline -#define __STATIC_INLINE static __inline -#define __ALIGNED(x) __declspec(align(x)) - -#elif defined (__GNUC_PYTHON__) -#include -#define __ALIGNED(x) __attribute__((aligned(x))) -#define __STATIC_FORCEINLINE static __attribute__((inline)) -#define __STATIC_INLINE static __attribute__((inline)) -#pragma GCC diagnostic ignored "-Wunused-function" -#pragma GCC diagnostic ignored "-Wattributes" - -#else -#include "cmsis_compiler.h" -#endif - - - -#include -#include -#include -#include - - -#define F64_MAX ((float64_t)DBL_MAX) -#define F32_MAX ((float32_t)FLT_MAX) - -#if defined(ARM_MATH_FLOAT16) -#define F16_MAX ((float16_t)FLT_MAX) -#endif - -#define F64_MIN (-DBL_MAX) -#define F32_MIN (-FLT_MAX) - -#if defined(ARM_MATH_FLOAT16) -#define F16_MIN (-(float16_t)FLT_MAX) -#endif - -#define F64_ABSMAX ((float64_t)DBL_MAX) -#define F32_ABSMAX ((float32_t)FLT_MAX) - -#if defined(ARM_MATH_FLOAT16) -#define F16_ABSMAX ((float16_t)FLT_MAX) -#endif - -#define F64_ABSMIN ((float64_t)0.0) -#define F32_ABSMIN ((float32_t)0.0) - -#if defined(ARM_MATH_FLOAT16) -#define F16_ABSMIN ((float16_t)0.0) -#endif - -#define Q31_MAX ((q31_t)(0x7FFFFFFFL)) -#define Q15_MAX ((q15_t)(0x7FFF)) -#define Q7_MAX ((q7_t)(0x7F)) -#define Q31_MIN ((q31_t)(0x80000000L)) -#define Q15_MIN ((q15_t)(0x8000)) -#define Q7_MIN ((q7_t)(0x80)) - -#define Q31_ABSMAX ((q31_t)(0x7FFFFFFFL)) -#define Q15_ABSMAX ((q15_t)(0x7FFF)) -#define Q7_ABSMAX ((q7_t)(0x7F)) -#define Q31_ABSMIN ((q31_t)0) -#define Q15_ABSMIN ((q15_t)0) -#define Q7_ABSMIN ((q7_t)0) - -/* evaluate ARM DSP feature */ -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - #define ARM_MATH_DSP 1 -#endif - -#if defined(ARM_MATH_NEON) -#include -#endif - -#if defined (ARM_MATH_HELIUM) - #define ARM_MATH_MVEF - #define ARM_MATH_FLOAT16 -#endif - -#if defined (ARM_MATH_MVEF) - #define ARM_MATH_MVEI - #define ARM_MATH_FLOAT16 -#endif - -#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) -#include -#endif - - - /** - * @brief Macros required for reciprocal calculation in Normalized LMS - */ - -#define DELTA_Q31 ((q31_t)(0x100)) -#define DELTA_Q15 ((q15_t)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_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 Macros for complex numbers - */ - - /* Dimension C vector space */ - #define CMPLX_DIM 2 - - /** - * @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, /**< 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 vector types - */ -#if defined(ARM_MATH_NEON) || defined (ARM_MATH_MVEI) - /** - * @brief 64-bit fractional 128-bit vector data type in 1.63 format - */ - typedef int64x2_t q63x2_t; - - /** - * @brief 32-bit fractional 128-bit vector data type in 1.31 format. - */ - typedef int32x4_t q31x4_t; - - /** - * @brief 16-bit fractional 128-bit vector data type with 16-bit alignement in 1.15 format. - */ - typedef __ALIGNED(2) int16x8_t q15x8_t; - - /** - * @brief 8-bit fractional 128-bit vector data type with 8-bit alignement in 1.7 format. - */ - typedef __ALIGNED(1) int8x16_t q7x16_t; - - /** - * @brief 32-bit fractional 128-bit vector pair data type in 1.31 format. - */ - typedef int32x4x2_t q31x4x2_t; - - /** - * @brief 32-bit fractional 128-bit vector quadruplet data type in 1.31 format. - */ - typedef int32x4x4_t q31x4x4_t; - - /** - * @brief 16-bit fractional 128-bit vector pair data type in 1.15 format. - */ - typedef int16x8x2_t q15x8x2_t; - - /** - * @brief 16-bit fractional 128-bit vector quadruplet data type in 1.15 format. - */ - typedef int16x8x4_t q15x8x4_t; - - /** - * @brief 8-bit fractional 128-bit vector pair data type in 1.7 format. - */ - typedef int8x16x2_t q7x16x2_t; - - /** - * @brief 8-bit fractional 128-bit vector quadruplet data type in 1.7 format. - */ - typedef int8x16x4_t q7x16x4_t; - - /** - * @brief 32-bit fractional data type in 9.23 format. - */ - typedef int32_t q23_t; - - /** - * @brief 32-bit fractional 128-bit vector data type in 9.23 format. - */ - typedef int32x4_t q23x4_t; - - /** - * @brief 64-bit status 128-bit vector data type. - */ - typedef int64x2_t status64x2_t; - - /** - * @brief 32-bit status 128-bit vector data type. - */ - typedef int32x4_t status32x4_t; - - /** - * @brief 16-bit status 128-bit vector data type. - */ - typedef int16x8_t status16x8_t; - - /** - * @brief 8-bit status 128-bit vector data type. - */ - typedef int8x16_t status8x16_t; - - -#endif - -#if defined(ARM_MATH_NEON) || defined(ARM_MATH_MVEF) /* floating point vector*/ - /** - * @brief 32-bit floating-point 128-bit vector type - */ - typedef float32x4_t f32x4_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit floating-point 128-bit vector data type - */ - typedef __ALIGNED(2) float16x8_t f16x8_t; -#endif - - /** - * @brief 32-bit floating-point 128-bit vector pair data type - */ - typedef float32x4x2_t f32x4x2_t; - - /** - * @brief 32-bit floating-point 128-bit vector quadruplet data type - */ - typedef float32x4x4_t f32x4x4_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit floating-point 128-bit vector pair data type - */ - typedef float16x8x2_t f16x8x2_t; - - /** - * @brief 16-bit floating-point 128-bit vector quadruplet data type - */ - typedef float16x8x4_t f16x8x4_t; -#endif - - /** - * @brief 32-bit ubiquitous 128-bit vector data type - */ - typedef union _any32x4_t - { - float32x4_t f; - int32x4_t i; - } any32x4_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit ubiquitous 128-bit vector data type - */ - typedef union _any16x8_t - { - float16x8_t f; - int16x8_t i; - } any16x8_t; -#endif - -#endif - -#if defined(ARM_MATH_NEON) - /** - * @brief 32-bit fractional 64-bit vector data type in 1.31 format. - */ - typedef int32x2_t q31x2_t; - - /** - * @brief 16-bit fractional 64-bit vector data type in 1.15 format. - */ - typedef __ALIGNED(2) int16x4_t q15x4_t; - - /** - * @brief 8-bit fractional 64-bit vector data type in 1.7 format. - */ - typedef __ALIGNED(1) int8x8_t q7x8_t; - - /** - * @brief 32-bit float 64-bit vector data type. - */ - typedef float32x2_t f32x2_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit float 64-bit vector data type. - */ - typedef __ALIGNED(2) float16x4_t f16x4_t; -#endif - - /** - * @brief 32-bit floating-point 128-bit vector triplet data type - */ - typedef float32x4x3_t f32x4x3_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit floating-point 128-bit vector triplet data type - */ - typedef float16x8x3_t f16x8x3_t; -#endif - - /** - * @brief 32-bit fractional 128-bit vector triplet data type in 1.31 format - */ - typedef int32x4x3_t q31x4x3_t; - - /** - * @brief 16-bit fractional 128-bit vector triplet data type in 1.15 format - */ - typedef int16x8x3_t q15x8x3_t; - - /** - * @brief 8-bit fractional 128-bit vector triplet data type in 1.7 format - */ - typedef int8x16x3_t q7x16x3_t; - - /** - * @brief 32-bit floating-point 64-bit vector pair data type - */ - typedef float32x2x2_t f32x2x2_t; - - /** - * @brief 32-bit floating-point 64-bit vector triplet data type - */ - typedef float32x2x3_t f32x2x3_t; - - /** - * @brief 32-bit floating-point 64-bit vector quadruplet data type - */ - typedef float32x2x4_t f32x2x4_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit floating-point 64-bit vector pair data type - */ - typedef float16x4x2_t f16x4x2_t; - - /** - * @brief 16-bit floating-point 64-bit vector triplet data type - */ - typedef float16x4x3_t f16x4x3_t; - - /** - * @brief 16-bit floating-point 64-bit vector quadruplet data type - */ - typedef float16x4x4_t f16x4x4_t; -#endif - - /** - * @brief 32-bit fractional 64-bit vector pair data type in 1.31 format - */ - typedef int32x2x2_t q31x2x2_t; - - /** - * @brief 32-bit fractional 64-bit vector triplet data type in 1.31 format - */ - typedef int32x2x3_t q31x2x3_t; - - /** - * @brief 32-bit fractional 64-bit vector quadruplet data type in 1.31 format - */ - typedef int32x4x3_t q31x2x4_t; - - /** - * @brief 16-bit fractional 64-bit vector pair data type in 1.15 format - */ - typedef int16x4x2_t q15x4x2_t; - - /** - * @brief 16-bit fractional 64-bit vector triplet data type in 1.15 format - */ - typedef int16x4x2_t q15x4x3_t; - - /** - * @brief 16-bit fractional 64-bit vector quadruplet data type in 1.15 format - */ - typedef int16x4x3_t q15x4x4_t; - - /** - * @brief 8-bit fractional 64-bit vector pair data type in 1.7 format - */ - typedef int8x8x2_t q7x8x2_t; - - /** - * @brief 8-bit fractional 64-bit vector triplet data type in 1.7 format - */ - typedef int8x8x3_t q7x8x3_t; - - /** - * @brief 8-bit fractional 64-bit vector quadruplet data type in 1.7 format - */ - typedef int8x8x4_t q7x8x4_t; - - /** - * @brief 32-bit ubiquitous 64-bit vector data type - */ - typedef union _any32x2_t - { - float32x2_t f; - int32x2_t i; - } any32x2_t; - -#if defined(ARM_MATH_FLOAT16) - /** - * @brief 16-bit ubiquitous 64-bit vector data type - */ - typedef union _any16x4_t - { - float16x4_t f; - int16x4_t i; - } any16x4_t; -#endif - - /** - * @brief 32-bit status 64-bit vector data type. - */ - typedef int32x4_t status32x2_t; - - /** - * @brief 16-bit status 64-bit vector data type. - */ - typedef int16x8_t status16x4_t; - - /** - * @brief 8-bit status 64-bit vector data type. - */ - typedef int8x16_t status8x8_t; - -#endif - - - -/** - @brief definition to read/write two 16 bit values. - @deprecated - */ -#if defined ( __CC_ARM ) - #define __SIMD32_TYPE int32_t __packed -#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - #define __SIMD32_TYPE int32_t -#elif defined ( __GNUC__ ) - #define __SIMD32_TYPE int32_t -#elif defined ( __ICCARM__ ) - #define __SIMD32_TYPE int32_t __packed -#elif defined ( __TI_ARM__ ) - #define __SIMD32_TYPE int32_t -#elif defined ( __CSMC__ ) - #define __SIMD32_TYPE int32_t -#elif defined ( __TASKING__ ) - #define __SIMD32_TYPE __un(aligned) int32_t -#elif defined(_MSC_VER ) - #define __SIMD32_TYPE int32_t -#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)) - -#define STEP(x) (x) <= 0 ? 0 : 1 -#define SQ(x) ((x) * (x)) - -/* SIMD replacement */ - - -/** - @brief Read 2 Q15 from Q15 pointer. - @param[in] pQ15 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q15x2 ( - q15_t * pQ15) -{ - q31_t val; - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, pQ15, 4); -#else - val = (pQ15[1] << 16) | (pQ15[0] & 0x0FFFF) ; -#endif - - return (val); -} - -/** - @brief Read 2 Q15 from Q15 pointer and increment pointer afterwards. - @param[in] pQ15 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q15x2_ia ( - q15_t ** pQ15) -{ - q31_t val; - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, *pQ15, 4); -#else - val = ((*pQ15)[1] << 16) | ((*pQ15)[0] & 0x0FFFF); -#endif - - *pQ15 += 2; - return (val); -} - -/** - @brief Read 2 Q15 from Q15 pointer and decrement pointer afterwards. - @param[in] pQ15 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q15x2_da ( - q15_t ** pQ15) -{ - q31_t val; - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, *pQ15, 4); -#else - val = ((*pQ15)[1] << 16) | ((*pQ15)[0] & 0x0FFFF); -#endif - - *pQ15 -= 2; - return (val); -} - -/** - @brief Write 2 Q15 to Q15 pointer and increment pointer afterwards. - @param[in] pQ15 points to input value - @param[in] value Q31 value - @return none - */ -__STATIC_FORCEINLINE void write_q15x2_ia ( - q15_t ** pQ15, - q31_t value) -{ - q31_t val = value; -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (*pQ15, &val, 4); -#else - (*pQ15)[0] = (val & 0x0FFFF); - (*pQ15)[1] = (val >> 16) & 0x0FFFF; -#endif - - *pQ15 += 2; -} - -/** - @brief Write 2 Q15 to Q15 pointer. - @param[in] pQ15 points to input value - @param[in] value Q31 value - @return none - */ -__STATIC_FORCEINLINE void write_q15x2 ( - q15_t * pQ15, - q31_t value) -{ - q31_t val = value; - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (pQ15, &val, 4); -#else - pQ15[0] = val & 0x0FFFF; - pQ15[1] = val >> 16; -#endif -} - - -/** - @brief Read 4 Q7 from Q7 pointer and increment pointer afterwards. - @param[in] pQ7 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q7x4_ia ( - q7_t ** pQ7) -{ - q31_t val; - - -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, *pQ7, 4); -#else - val =(((*pQ7)[3] & 0x0FF) << 24) | (((*pQ7)[2] & 0x0FF) << 16) | (((*pQ7)[1] & 0x0FF) << 8) | ((*pQ7)[0] & 0x0FF); -#endif - - *pQ7 += 4; - - return (val); -} - -/** - @brief Read 4 Q7 from Q7 pointer and decrement pointer afterwards. - @param[in] pQ7 points to input value - @return Q31 value - */ -__STATIC_FORCEINLINE q31_t read_q7x4_da ( - q7_t ** pQ7) -{ - q31_t val; -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (&val, *pQ7, 4); -#else - val = ((((*pQ7)[3]) & 0x0FF) << 24) | ((((*pQ7)[2]) & 0x0FF) << 16) | ((((*pQ7)[1]) & 0x0FF) << 8) | ((*pQ7)[0] & 0x0FF); -#endif - *pQ7 -= 4; - - return (val); -} - -/** - @brief Write 4 Q7 to Q7 pointer and increment pointer afterwards. - @param[in] pQ7 points to input value - @param[in] value Q31 value - @return none - */ -__STATIC_FORCEINLINE void write_q7x4_ia ( - q7_t ** pQ7, - q31_t value) -{ - q31_t val = value; -#ifdef __ARM_FEATURE_UNALIGNED - memcpy (*pQ7, &val, 4); -#else - (*pQ7)[0] = val & 0x0FF; - (*pQ7)[1] = (val >> 8) & 0x0FF; - (*pQ7)[2] = (val >> 16) & 0x0FF; - (*pQ7)[3] = (val >> 24) & 0x0FF; - -#endif - *pQ7 += 4; -} - -/* - -Normally those kind of definitions are in a compiler file -in Core or Core_A. - -But for MSVC compiler it is a bit special. The goal is very specific -to CMSIS-DSP and only to allow the use of this library from other -systems like Python or Matlab. - -MSVC is not going to be used to cross-compile to ARM. So, having a MSVC -compiler file in Core or Core_A would not make sense. - -*/ -#if defined ( _MSC_VER ) || defined(__GNUC_PYTHON__) - __STATIC_FORCEINLINE uint8_t __CLZ(uint32_t data) - { - if (data == 0U) { return 32U; } - - uint32_t count = 0U; - uint32_t mask = 0x80000000U; - - while ((data & mask) == 0U) - { - count += 1U; - mask = mask >> 1U; - } - return count; - } - - __STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) - { - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; - } - - __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) - { - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; - } -#endif - -#ifndef ARM_MATH_DSP - /** - * @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_FORCEINLINE 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_FORCEINLINE 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_FORCEINLINE 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_FORCEINLINE 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_FORCEINLINE q63_t mult32x64( - q63_t x, - q31_t y) - { - return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) + - (((q63_t) (x >> 32) * y) ) ); - } - - /** - * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type. - */ - __STATIC_FORCEINLINE uint32_t arm_recip_q31( - q31_t in, - q31_t * dst, - const 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_FORCEINLINE uint32_t arm_recip_q15( - q15_t in, - q15_t * dst, - const 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 Integer exponentiation - * @param[in] x value - * @param[in] nb integer exponent >= 1 - * @return x^nb - * - */ -__STATIC_INLINE float32_t arm_exponent_f32(float32_t x, int32_t nb) -{ - float32_t r = x; - nb --; - while(nb > 0) - { - r = r * x; - nb--; - } - return(r); -} - -/** - * @brief 64-bit to 32-bit unsigned normalization - * @param[in] in is input unsigned long long value - * @param[out] normalized is the 32-bit normalized value - * @param[out] norm is norm scale - */ -__STATIC_INLINE void arm_norm_64_to_32u(uint64_t in, int32_t * normalized, int32_t *norm) -{ - int32_t n1; - int32_t hi = (int32_t) (in >> 32); - int32_t lo = (int32_t) ((in << 32) >> 32); - - n1 = __CLZ(hi) - 32; - if (!n1) - { - /* - * input fits in 32-bit - */ - n1 = __CLZ(lo); - if (!n1) - { - /* - * MSB set, need to scale down by 1 - */ - *norm = -1; - *normalized = (((uint32_t) lo) >> 1); - } else - { - if (n1 == 32) - { - /* - * input is zero - */ - *norm = 0; - *normalized = 0; - } else - { - /* - * 32-bit normalization - */ - *norm = n1 - 1; - *normalized = lo << *norm; - } - } - } else - { - /* - * input fits in 64-bit - */ - n1 = 1 - n1; - *norm = -n1; - /* - * 64 bit normalization - */ - *normalized = (((uint32_t) lo) >> n1) | (hi << (32 - n1)); - } -} - -__STATIC_INLINE q31_t arm_div_q63_to_q31(q63_t num, q31_t den) -{ - q31_t result; - uint64_t absNum; - int32_t normalized; - int32_t norm; - - /* - * if sum fits in 32bits - * avoid costly 64-bit division - */ - absNum = num > 0 ? num : -num; - arm_norm_64_to_32u(absNum, &normalized, &norm); - if (norm > 0) - /* - * 32-bit division - */ - result = (q31_t) num / den; - else - /* - * 64-bit division - */ - result = (q31_t) (num / den); - - return result; -} - - -/* - * @brief C custom defined intrinsic functions - */ -#if !defined (ARM_MATH_DSP) - - /* - * @brief C custom defined QADD8 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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 - */ - __STATIC_FORCEINLINE 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) )); - } - - /* - * @brief C custom defined SMMLA - */ - __STATIC_FORCEINLINE int32_t __SMMLA( - int32_t x, - int32_t y, - int32_t sum) - { - return (sum + (int32_t) (((int64_t) x * y) >> 32)); - } - -#endif /* !defined (ARM_MATH_DSP) */ - - - /** - * @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. */ - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - /** - * @brief Processing function for the fast Q15 FIR filter (fast version). - * @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, - const 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 either - * 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, - const 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, - const q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - /** - * @brief Processing function for the fast Q31 FIR filter (fast version). - * @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_fast_q31( - const arm_fir_instance_q31 * S, - const 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, - const 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, - const 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, - const 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. */ - const 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. */ - const 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. */ - const float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ - } arm_biquad_casd_df1_inst_f32; - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - /** - * @brief Instance structure for the modified Biquad coefs required by vectorized code. - */ - typedef struct - { - float32_t coeffs[8][4]; /**< Points to the array of modified coefficients. The array is of length 32. There is one per stage */ - } arm_biquad_mod_coef_f32; -#endif - - /** - * @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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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] pCoeffsMod points to the modified filter coefficients (only MVE version). - * @param[in] pState points to the state buffer. - */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - void arm_biquad_cascade_df1_mve_init_f32( - arm_biquad_casd_df1_inst_f32 * S, - uint8_t numStages, - const float32_t * pCoeffs, - arm_biquad_mod_coef_f32 * pCoeffsMod, - float32_t * pState); -#endif - - void arm_biquad_cascade_df1_init_f32( - arm_biquad_casd_df1_inst_f32 * S, - uint8_t numStages, - const float32_t * pCoeffs, - float32_t * pState); - - - /** - * @brief Compute the logical bitwise AND of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_and_u16( - const uint16_t * pSrcA, - const uint16_t * pSrcB, - uint16_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise AND of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_and_u32( - const uint32_t * pSrcA, - const uint32_t * pSrcB, - uint32_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise AND of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_and_u8( - const uint8_t * pSrcA, - const uint8_t * pSrcB, - uint8_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise OR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_or_u16( - const uint16_t * pSrcA, - const uint16_t * pSrcB, - uint16_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise OR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_or_u32( - const uint32_t * pSrcA, - const uint32_t * pSrcB, - uint32_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise OR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_or_u8( - const uint8_t * pSrcA, - const uint8_t * pSrcB, - uint8_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise NOT of a fixed-point vector. - * @param[in] pSrc points to input vector - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_not_u16( - const uint16_t * pSrc, - uint16_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise NOT of a fixed-point vector. - * @param[in] pSrc points to input vector - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_not_u32( - const uint32_t * pSrc, - uint32_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise NOT of a fixed-point vector. - * @param[in] pSrc points to input vector - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_not_u8( - const uint8_t * pSrc, - uint8_t * pDst, - uint32_t blockSize); - -/** - * @brief Compute the logical bitwise XOR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_xor_u16( - const uint16_t * pSrcA, - const uint16_t * pSrcB, - uint16_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise XOR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_xor_u32( - const uint32_t * pSrcA, - const uint32_t * pSrcB, - uint32_t * pDst, - uint32_t blockSize); - - /** - * @brief Compute the logical bitwise XOR of two fixed-point vectors. - * @param[in] pSrcA points to input vector A - * @param[in] pSrcB points to input vector B - * @param[out] pDst points to output vector - * @param[in] blockSize number of samples in each vector - * @return none - */ - void arm_xor_u8( - const uint8_t * pSrcA, - const uint8_t * pSrcB, - uint8_t * pDst, - uint32_t blockSize); - - /** - * @brief Struct for specifying sorting algorithm - */ - typedef enum - { - ARM_SORT_BITONIC = 0, - /**< Bitonic sort */ - ARM_SORT_BUBBLE = 1, - /**< Bubble sort */ - ARM_SORT_HEAP = 2, - /**< Heap sort */ - ARM_SORT_INSERTION = 3, - /**< Insertion sort */ - ARM_SORT_QUICK = 4, - /**< Quick sort */ - ARM_SORT_SELECTION = 5 - /**< Selection sort */ - } arm_sort_alg; - - /** - * @brief Struct for specifying sorting algorithm - */ - typedef enum - { - ARM_SORT_DESCENDING = 0, - /**< Descending order (9 to 0) */ - ARM_SORT_ASCENDING = 1 - /**< Ascending order (0 to 9) */ - } arm_sort_dir; - - /** - * @brief Instance structure for the sorting algorithms. - */ - typedef struct - { - arm_sort_alg alg; /**< Sorting algorithm selected */ - arm_sort_dir dir; /**< Sorting order (direction) */ - } arm_sort_instance_f32; - - /** - * @param[in] S points to an instance of the sorting 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_sort_f32( - const arm_sort_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - /** - * @param[in,out] S points to an instance of the sorting structure. - * @param[in] alg Selected algorithm. - * @param[in] dir Sorting order. - */ - void arm_sort_init_f32( - arm_sort_instance_f32 * S, - arm_sort_alg alg, - arm_sort_dir dir); - - /** - * @brief Instance structure for the sorting algorithms. - */ - typedef struct - { - arm_sort_dir dir; /**< Sorting order (direction) */ - float32_t * buffer; /**< Working buffer */ - } arm_merge_sort_instance_f32; - - /** - * @param[in] S points to an instance of the sorting structure. - * @param[in,out] 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_merge_sort_f32( - const arm_merge_sort_instance_f32 * S, - float32_t *pSrc, - float32_t *pDst, - uint32_t blockSize); - - /** - * @param[in,out] S points to an instance of the sorting structure. - * @param[in] dir Sorting order. - * @param[in] buffer Working buffer. - */ - void arm_merge_sort_init_f32( - arm_merge_sort_instance_f32 * S, - arm_sort_dir dir, - float32_t * buffer); - - /** - * @brief Struct for specifying cubic spline type - */ - typedef enum - { - ARM_SPLINE_NATURAL = 0, /**< Natural spline */ - ARM_SPLINE_PARABOLIC_RUNOUT = 1 /**< Parabolic runout spline */ - } arm_spline_type; - - /** - * @brief Instance structure for the floating-point cubic spline interpolation. - */ - typedef struct - { - arm_spline_type type; /**< Type (boundary conditions) */ - const float32_t * x; /**< x values */ - const float32_t * y; /**< y values */ - uint32_t n_x; /**< Number of known data points */ - float32_t * coeffs; /**< Coefficients buffer (b,c, and d) */ - } arm_spline_instance_f32; - - /** - * @brief Processing function for the floating-point cubic spline interpolation. - * @param[in] S points to an instance of the floating-point spline structure. - * @param[in] xq points to the x values ot the interpolated data points. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples of output data. - */ - void arm_spline_f32( - arm_spline_instance_f32 * S, - const float32_t * xq, - float32_t * pDst, - uint32_t blockSize); - - /** - * @brief Initialization function for the floating-point cubic spline interpolation. - * @param[in,out] S points to an instance of the floating-point spline structure. - * @param[in] type type of cubic spline interpolation (boundary conditions) - * @param[in] x points to the x values of the known data points. - * @param[in] y points to the y values of the known data points. - * @param[in] n number of known data points. - * @param[in] coeffs coefficients array for b, c, and d - * @param[in] tempBuffer buffer array for internal computations - */ - void arm_spline_init_f32( - arm_spline_instance_f32 * S, - arm_spline_type type, - const float32_t * x, - const float32_t * y, - uint32_t n, - float32_t * coeffs, - float32_t * tempBuffer); - - /** - * @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 . */ -#if !defined (ARM_MATH_DSP) - 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( - const q7_t * pSrcA, - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const float32_t * pSrcA, - const 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. */ - const q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ - const 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. */ - const q15_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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. */ - const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ - const 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. */ - const q31_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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. */ - const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - const 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. */ - const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - const 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. */ -#if defined(ARM_MATH_MVEI) - const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ - const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ - const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ - const q15_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ - const q15_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ - const q15_t *rearranged_twiddle_stride3; -#endif - } arm_cfft_instance_q15; - -arm_status arm_cfft_init_q15( - arm_cfft_instance_q15 * S, - uint16_t fftLen); - -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. */ -#if defined(ARM_MATH_MVEI) - const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ - const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ - const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ - const q31_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ - const q31_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ - const q31_t *rearranged_twiddle_stride3; -#endif - } arm_cfft_instance_q31; - -arm_status arm_cfft_init_q31( - arm_cfft_instance_q31 * S, - uint16_t fftLen); - -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. */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ - const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ - const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ - const float32_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ - const float32_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ - const float32_t *rearranged_twiddle_stride3; -#endif - } arm_cfft_instance_f32; - - - arm_status arm_cfft_init_f32( - arm_cfft_instance_f32 * S, - uint16_t fftLen); - - void arm_cfft_f32( - const arm_cfft_instance_f32 * S, - float32_t * p1, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - - - /** - * @brief Instance structure for the Double Precision Floating-point CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - const float64_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_f64; - - void arm_cfft_f64( - const arm_cfft_instance_f64 * S, - float64_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. */ - const q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - const q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ -#if defined(ARM_MATH_MVEI) - arm_cfft_instance_q15 cfftInst; -#else - const arm_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */ -#endif - } 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. */ - const q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - const q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ -#if defined(ARM_MATH_MVEI) - arm_cfft_instance_q31 cfftInst; -#else - const arm_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */ -#endif - } 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. */ - const float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - const 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 Double Precision Floating-point RFFT/RIFFT function. - */ -typedef struct - { - arm_cfft_instance_f64 Sint; /**< Internal CFFT structure. */ - uint16_t fftLenRFFT; /**< length of the real sequence */ - const float64_t * pTwiddleRFFT; /**< Twiddle factors real stage */ - } arm_rfft_fast_instance_f64 ; - -arm_status arm_rfft_fast_init_f64 ( - arm_rfft_fast_instance_f64 * S, - uint16_t fftLen); - - -void arm_rfft_fast_f64( - arm_rfft_fast_instance_f64 * S, - float64_t * p, float64_t * pOut, - uint8_t ifftFlag); - - - /** - * @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 */ - const 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( - const 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. */ - const float32_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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. */ - const q31_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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. */ - const q15_t *pTwiddle; /**< points to the twiddle factor table. */ - const 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( - const float32_t * pSrcA, - const 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( - const q7_t * pSrcA, - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const float32_t * pSrcA, - const 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( - const q7_t * pSrcA, - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const float32_t * pSrcA, - const 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( - const q7_t * pSrcA, - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const float32_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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( - const float32_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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. */ - const 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. */ - const 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 floating-point FIR decimator. - */ -typedef struct - { - uint8_t M; /**< decimation factor. */ - uint16_t numTaps; /**< number of coefficients in the filter. */ - const 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 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 samples to process - */ -void arm_fir_decimate_f32( - const arm_fir_decimate_instance_f32 * S, - const 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 execution status - - \ref ARM_MATH_SUCCESS : Operation successful - - \ref ARM_MATH_LENGTH_ERROR : 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, - const 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, - const 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, - const 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, - const 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, - const 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( - const arm_fir_decimate_instance_q31 * S, - const 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, - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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. */ - const 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, - const 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, - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const float64_t * pSrc, - float64_t * pDst, - uint32_t blockSize); - - -#if defined(ARM_MATH_NEON) -void arm_biquad_cascade_df2T_compute_coefs_f32( - arm_biquad_cascade_df2T_instance_f32 * S, - uint8_t numStages, - float32_t * pCoeffs); -#endif - /** - * @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, - const 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, - const 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, - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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. */ - const 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, - const 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. */ - const 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, - const 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( - const float32_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst); - - -/** - @brief Correlation of Q15 sequences (fast version). - @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_fast_q15( - const q15_t * pSrcA, - uint32_t srcALen, - const q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst); - - -/** - @brief Correlation of Q15 sequences (fast version). - @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( - const q15_t * pSrcA, - uint32_t srcALen, - const 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( - const q31_t * pSrcA, - uint32_t srcALen, - const q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst); - - -/** - @brief Correlation of Q31 sequences (fast version). - @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( - const q31_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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( - const q7_t * pSrcA, - uint32_t srcALen, - const 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. */ - const 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. */ - const 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. */ - const 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. */ - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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, - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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 processed output sample. - */ - __STATIC_FORCEINLINE 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 processed output sample. - - \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 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_FORCEINLINE 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 processed output sample. - - \par Scaling and Overflow Behavior - 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_FORCEINLINE q15_t arm_pid_q15( - arm_pid_instance_q15 * S, - q15_t in) - { - q63_t acc; - q15_t out; - -#if defined (ARM_MATH_DSP) - /* 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] */ - acc = (q63_t)__SMLALD((uint32_t)S->A1, (uint32_t)read_q15x2 (S->state), (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((q31_t)(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 - * @return none - */ - __STATIC_FORCEINLINE 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 - @return none - - \par Scaling and Overflow Behavior - 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_FORCEINLINE 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 - */ - - - /** - * @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 - * @return none - */ - __STATIC_FORCEINLINE 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 - @return none - - \par Scaling and Overflow Behavior - 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_FORCEINLINE 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 - */ - - - - /** - * @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 - * @return none - * - * The function implements the forward Park transform. - * - */ - __STATIC_FORCEINLINE 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 - @return none - - \par Scaling and Overflow Behavior - 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_FORCEINLINE 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 - */ - - - /** - * @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 - * @return none - */ - __STATIC_FORCEINLINE 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 - @return none - - @par Scaling and Overflow Behavior - 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_FORCEINLINE 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 - */ - - - /** - * @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_FORCEINLINE 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 - 1)) - { - /* 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_FORCEINLINE 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_FORCEINLINE 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_FORCEINLINE 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); - - -/** - @brief Floating-point vector of log values. - @param[in] pSrc points to the input vector - @param[out] pDst points to the output vector - @param[in] blockSize number of samples in each vector - @return none - */ - void arm_vlog_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - -/** - @brief Floating-point vector of exp values. - @param[in] pSrc points to the input vector - @param[out] pDst points to the output vector - @param[in] blockSize number of samples in each vector - @return none - */ - void arm_vexp_f32( - const float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - /** - * @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 execution status - - \ref ARM_MATH_SUCCESS : input value is positive - - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 - */ -__STATIC_FORCEINLINE arm_status arm_sqrt_f32( - float32_t in, - float32_t * pOut) - { - if (in >= 0.0f) - { -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - *pOut = __sqrtf(in); - #else - *pOut = sqrtf(in); - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - __ASM("VSQRT.F32 %0,%1" : "=t"(*pOut) : "t"(in)); - #else - *pOut = sqrtf(in); - #endif - -#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 points to square root of input value - @return execution status - - \ref ARM_MATH_SUCCESS : input value is positive - - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 - */ -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 points to square root of input value - @return execution status - - \ref ARM_MATH_SUCCESS : input value is positive - - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 - */ -arm_status arm_sqrt_q15( - q15_t in, - q15_t * pOut); - - /** - * @brief Vector Floating-point square root function. - * @param[in] pIn input vector. - * @param[out] pOut vector of square roots of input elements. - * @param[in] len length of input vector. - * @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. - */ - void arm_vsqrt_f32( - float32_t * pIn, - float32_t * pOut, - uint16_t len); - - void arm_vsqrt_q31( - q31_t * pIn, - q31_t * pOut, - uint16_t len); - - void arm_vsqrt_q15( - q15_t * pIn, - q15_t * pOut, - uint16_t len); - - /** - * @} end of SQRT group - */ - - - /** - * @brief floating-point Circular write function. - */ - __STATIC_FORCEINLINE 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_FORCEINLINE 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; - int32_t* 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 = 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 == 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_FORCEINLINE 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_FORCEINLINE 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; - q15_t* 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 = 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 == 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_FORCEINLINE 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_FORCEINLINE 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; - q7_t* 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 = 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 == 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const float32_t * pSrcA, - const 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( - const q15_t * pSrcCmplx, - const 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( - const q31_t * pSrcCmplx, - const 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( - const float32_t * pSrcCmplx, - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const 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( - const float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex); - - /** - @brief Maximum value of a floating-point vector. - @param[in] pSrc points to the input vector - @param[in] blockSize number of samples in input vector - @param[out] pResult maximum value returned here - @return none - */ - void arm_max_no_idx_f32( - const float32_t *pSrc, - uint32_t blockSize, - float32_t *pResult); - - /** - * @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( - const q15_t * pSrcA, - const 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( - const q31_t * pSrcA, - const 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( - const float32_t * pSrcA, - const 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( - const 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( - const 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( - const float32_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @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( - const q31_t * pSrc, - float32_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( - const 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( - const 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( - const 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( - const 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( - const q15_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @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( - const q7_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @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( - const q7_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @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( - const q7_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - -/** - * @brief Struct for specifying SVM Kernel - */ -typedef enum -{ - ARM_ML_KERNEL_LINEAR = 0, - /**< Linear kernel */ - ARM_ML_KERNEL_POLYNOMIAL = 1, - /**< Polynomial kernel */ - ARM_ML_KERNEL_RBF = 2, - /**< Radial Basis Function kernel */ - ARM_ML_KERNEL_SIGMOID = 3 - /**< Sigmoid kernel */ -} arm_ml_kernel_type; - - -/** - * @brief Instance structure for linear SVM prediction function. - */ -typedef struct -{ - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ -} arm_svm_linear_instance_f32; - - -/** - * @brief Instance structure for polynomial SVM prediction function. - */ -typedef struct -{ - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - int32_t degree; /**< Polynomial degree */ - float32_t coef0; /**< Polynomial constant */ - float32_t gamma; /**< Gamma factor */ -} arm_svm_polynomial_instance_f32; - -/** - * @brief Instance structure for rbf SVM prediction function. - */ -typedef struct -{ - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - float32_t gamma; /**< Gamma factor */ -} arm_svm_rbf_instance_f32; - -/** - * @brief Instance structure for sigmoid SVM prediction function. - */ -typedef struct -{ - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - float32_t coef0; /**< Independant constant */ - float32_t gamma; /**< Gamma factor */ -} arm_svm_sigmoid_instance_f32; - -/** - * @brief SVM linear instance init function - * @param[in] S Parameters for SVM functions - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @return none. - * - */ - - -void arm_svm_linear_init_f32(arm_svm_linear_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes); - -/** - * @brief SVM linear prediction - * @param[in] S Pointer to an instance of the linear SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult Decision value - * @return none. - * - */ - -void arm_svm_linear_predict_f32(const arm_svm_linear_instance_f32 *S, - const float32_t * in, - int32_t * pResult); - - -/** - * @brief SVM polynomial instance init function - * @param[in] S points to an instance of the polynomial SVM structure. - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @param[in] degree Polynomial degree - * @param[in] coef0 coeff0 (scikit-learn terminology) - * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * - */ - - -void arm_svm_polynomial_init_f32(arm_svm_polynomial_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes, - int32_t degree, - float32_t coef0, - float32_t gamma - ); - -/** - * @brief SVM polynomial prediction - * @param[in] S Pointer to an instance of the polynomial SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult Decision value - * @return none. - * - */ -void arm_svm_polynomial_predict_f32(const arm_svm_polynomial_instance_f32 *S, - const float32_t * in, - int32_t * pResult); - - -/** - * @brief SVM radial basis function instance init function - * @param[in] S points to an instance of the polynomial SVM structure. - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * - */ - -void arm_svm_rbf_init_f32(arm_svm_rbf_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes, - float32_t gamma - ); - -/** - * @brief SVM rbf prediction - * @param[in] S Pointer to an instance of the rbf SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult decision value - * @return none. - * - */ -void arm_svm_rbf_predict_f32(const arm_svm_rbf_instance_f32 *S, - const float32_t * in, - int32_t * pResult); - -/** - * @brief SVM sigmoid instance init function - * @param[in] S points to an instance of the rbf SVM structure. - * @param[in] nbOfSupportVectors Number of support vectors - * @param[in] vectorDimension Dimension of vector space - * @param[in] intercept Intercept - * @param[in] dualCoefficients Array of dual coefficients - * @param[in] supportVectors Array of support vectors - * @param[in] classes Array of 2 classes ID - * @param[in] coef0 coeff0 (scikit-learn terminology) - * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * - */ - -void arm_svm_sigmoid_init_f32(arm_svm_sigmoid_instance_f32 *S, - uint32_t nbOfSupportVectors, - uint32_t vectorDimension, - float32_t intercept, - const float32_t *dualCoefficients, - const float32_t *supportVectors, - const int32_t *classes, - float32_t coef0, - float32_t gamma - ); - -/** - * @brief SVM sigmoid prediction - * @param[in] S Pointer to an instance of the rbf SVM structure. - * @param[in] in Pointer to input vector - * @param[out] pResult Decision value - * @return none. - * - */ -void arm_svm_sigmoid_predict_f32(const arm_svm_sigmoid_instance_f32 *S, - const float32_t * in, - int32_t * pResult); - - - -/** - * @brief Instance structure for Naive Gaussian Bayesian estimator. - */ -typedef struct -{ - uint32_t vectorDimension; /**< Dimension of vector space */ - uint32_t numberOfClasses; /**< Number of different classes */ - const float32_t *theta; /**< Mean values for the Gaussians */ - const float32_t *sigma; /**< Variances for the Gaussians */ - const float32_t *classPriors; /**< Class prior probabilities */ - float32_t epsilon; /**< Additive value to variances */ -} arm_gaussian_naive_bayes_instance_f32; - -/** - * @brief Naive Gaussian Bayesian Estimator - * - * @param[in] S points to a naive bayes instance structure - * @param[in] in points to the elements of the input vector. - * @param[in] pBuffer points to a buffer of length numberOfClasses - * @return The predicted class - * - */ - - -uint32_t arm_gaussian_naive_bayes_predict_f32(const arm_gaussian_naive_bayes_instance_f32 *S, - const float32_t * in, - float32_t *pBuffer); - -/** - * @brief Computation of the LogSumExp - * - * In probabilistic computations, the dynamic of the probability values can be very - * wide because they come from gaussian functions. - * To avoid underflow and overflow issues, the values are represented by their log. - * In this representation, multiplying the original exp values is easy : their logs are added. - * But adding the original exp values is requiring some special handling and it is the - * goal of the LogSumExp function. - * - * If the values are x1...xn, the function is computing: - * - * ln(exp(x1) + ... + exp(xn)) and the computation is done in such a way that - * rounding issues are minimised. - * - * The max xm of the values is extracted and the function is computing: - * xm + ln(exp(x1 - xm) + ... + exp(xn - xm)) - * - * @param[in] *in Pointer to an array of input values. - * @param[in] blockSize Number of samples in the input array. - * @return LogSumExp - * - */ - - -float32_t arm_logsumexp_f32(const float32_t *in, uint32_t blockSize); - -/** - * @brief Dot product with log arithmetic - * - * Vectors are containing the log of the samples - * - * @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[in] pTmpBuffer temporary buffer of length blockSize - * @return The log of the dot product . - * - */ - - -float32_t arm_logsumexp_dot_prod_f32(const float32_t * pSrcA, - const float32_t * pSrcB, - uint32_t blockSize, - float32_t *pTmpBuffer); - -/** - * @brief Entropy - * - * @param[in] pSrcA Array of input values. - * @param[in] blockSize Number of samples in the input array. - * @return Entropy -Sum(p ln p) - * - */ - - -float32_t arm_entropy_f32(const float32_t * pSrcA,uint32_t blockSize); - - -/** - * @brief Entropy - * - * @param[in] pSrcA Array of input values. - * @param[in] blockSize Number of samples in the input array. - * @return Entropy -Sum(p ln p) - * - */ - - -float64_t arm_entropy_f64(const float64_t * pSrcA, uint32_t blockSize); - - -/** - * @brief Kullback-Leibler - * - * @param[in] pSrcA Pointer to an array of input values for probability distribution A. - * @param[in] pSrcB Pointer to an array of input values for probability distribution B. - * @param[in] blockSize Number of samples in the input array. - * @return Kullback-Leibler Divergence D(A || B) - * - */ -float32_t arm_kullback_leibler_f32(const float32_t * pSrcA - ,const float32_t * pSrcB - ,uint32_t blockSize); - - -/** - * @brief Kullback-Leibler - * - * @param[in] pSrcA Pointer to an array of input values for probability distribution A. - * @param[in] pSrcB Pointer to an array of input values for probability distribution B. - * @param[in] blockSize Number of samples in the input array. - * @return Kullback-Leibler Divergence D(A || B) - * - */ -float64_t arm_kullback_leibler_f64(const float64_t * pSrcA, - const float64_t * pSrcB, - uint32_t blockSize); - - -/** - * @brief Weighted sum - * - * - * @param[in] *in Array of input values. - * @param[in] *weigths Weights - * @param[in] blockSize Number of samples in the input array. - * @return Weighted sum - * - */ -float32_t arm_weighted_sum_f32(const float32_t *in - , const float32_t *weigths - , uint32_t blockSize); - - -/** - * @brief Barycenter - * - * - * @param[in] in List of vectors - * @param[in] weights Weights of the vectors - * @param[out] out Barycenter - * @param[in] nbVectors Number of vectors - * @param[in] vecDim Dimension of space (vector dimension) - * @return None - * - */ -void arm_barycenter_f32(const float32_t *in - , const float32_t *weights - , float32_t *out - , uint32_t nbVectors - , uint32_t vecDim); - -/** - * @brief Euclidean distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -float32_t arm_euclidean_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - -/** - * @brief Bray-Curtis distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_braycurtis_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - -/** - * @brief Canberra distance between two vectors - * - * This function may divide by zero when samples pA[i] and pB[i] are both zero. - * The result of the computation will be correct. So the division per zero may be - * ignored. - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_canberra_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - - -/** - * @brief Chebyshev distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_chebyshev_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - - -/** - * @brief Cityblock (Manhattan) distance between two vectors - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_cityblock_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - -/** - * @brief Correlation distance between two vectors - * - * The input vectors are modified in place ! - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ -float32_t arm_correlation_distance_f32(float32_t *pA,float32_t *pB, uint32_t blockSize); - -/** - * @brief Cosine distance between two vectors - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -float32_t arm_cosine_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); - -/** - * @brief Jensen-Shannon distance between two vectors - * - * This function is assuming that elements of second vector are > 0 - * and 0 only when the corresponding element of first vector is 0. - * Otherwise the result of the computation does not make sense - * and for speed reasons, the cases returning NaN or Infinity are not - * managed. - * - * When the function is computing x log (x / y) with x 0 and y 0, - * it will compute the right value (0) but a division per zero will occur - * and shoudl be ignored in client code. - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] blockSize vector length - * @return distance - * - */ - -float32_t arm_jensenshannon_distance_f32(const float32_t *pA,const float32_t *pB,uint32_t blockSize); - -/** - * @brief Minkowski distance between two vectors - * - * @param[in] pA First vector - * @param[in] pB Second vector - * @param[in] n Norm order (>= 2) - * @param[in] blockSize vector length - * @return distance - * - */ - - - -float32_t arm_minkowski_distance_f32(const float32_t *pA,const float32_t *pB, int32_t order, uint32_t blockSize); - -/** - * @brief Dice distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] order Distance order - * @param[in] blockSize Number of samples - * @return distance - * - */ - - -float32_t arm_dice_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Hamming distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_hamming_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Jaccard distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_jaccard_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Kulsinski distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_kulsinski_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Roger Stanimoto distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_rogerstanimoto_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Russell-Rao distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_russellrao_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Sokal-Michener distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_sokalmichener_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Sokal-Sneath distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_sokalsneath_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - -/** - * @brief Yule distance between two vectors - * - * @param[in] pA First vector of packed booleans - * @param[in] pB Second vector of packed booleans - * @param[in] numberOfBools Number of booleans - * @return distance - * - */ - -float32_t arm_yule_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); - - - /** - * @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_FORCEINLINE 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->numCols - 2) || yIndex < 0 || yIndex > (S->numRows - 2)) - { - return (0); - } - - /* Calculation of index for two nearest points in X-direction */ - index = (xIndex ) + (yIndex ) * 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 ) + (yIndex+1) * 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_FORCEINLINE 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->numCols - 2) || cI < 0 || cI > (S->numRows - 2)) - { - 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_FORCEINLINE 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->numCols - 2) || cI < 0 || cI > (S->numRows - 2)) - { - 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 * (0x0FFFFF - xfract)) >> 4U); - acc = ((q63_t) out * (0x0FFFFF - yfract)); - - /* x2 * (xfract) * (1-yfract) in 1.51 and adding to acc */ - out = (q31_t) (((q63_t) x2 * (0x0FFFFF - yfract)) >> 4U); - acc += ((q63_t) out * (xfract)); - - /* y1 * (1 - xfract) * (yfract) in 1.51 and adding to acc */ - out = (q31_t) (((q63_t) y1 * (0x0FFFFF - 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_FORCEINLINE 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->numCols - 2) || cI < 0 || cI > (S->numRows - 2)) - { - 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_ARCH_7EM__ ) - #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_ARCH_7EM__ ) - #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_ARCH_7EM__ ) - #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_ARCH_7EM__ ) - #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 ( __TI_ARM__ ) - #define LOW_OPTIMIZATION_ENTER - #define LOW_OPTIMIZATION_EXIT - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #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 - -#elif defined ( _MSC_VER ) || defined(__GNUC_PYTHON__) - #define LOW_OPTIMIZATION_ENTER - #define LOW_OPTIMIZATION_EXIT - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #define IAR_ONLY_LOW_OPTIMIZATION_EXIT -#endif - - - -/* Compiler specific diagnostic adjustment */ -#if defined ( __CC_ARM ) - -#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - -#elif defined ( __GNUC__ ) -#pragma GCC diagnostic pop - -#elif defined ( __ICCARM__ ) - -#elif defined ( __TI_ARM__ ) - -#elif defined ( __CSMC__ ) - -#elif defined ( __TASKING__ ) - -#elif defined ( _MSC_VER ) - -#else - #error Unknown compiler -#endif - -#ifdef __cplusplus -} -#endif - - -#endif /* _ARM_MATH_H */ - -/** - * - * End of file. - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_mve_tables.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_mve_tables.h deleted file mode 100644 index c07f988..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_mve_tables.h +++ /dev/null @@ -1,235 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mve_tables.h - * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc - * used for MVE implementation only - * - * $Date: 08. January 2020 - * $Revision: V1.7.0 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - #ifndef _ARM_MVE_TABLES_H - #define _ARM_MVE_TABLES_H - - #include "arm_math.h" - - - - - - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_f32[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_f32[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_f32[2]; -extern float32_t rearranged_twiddle_stride1_16_f32[8]; -extern float32_t rearranged_twiddle_stride2_16_f32[8]; -extern float32_t rearranged_twiddle_stride3_16_f32[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_f32[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_f32[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_f32[3]; -extern float32_t rearranged_twiddle_stride1_64_f32[40]; -extern float32_t rearranged_twiddle_stride2_64_f32[40]; -extern float32_t rearranged_twiddle_stride3_64_f32[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_f32[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_f32[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_f32[4]; -extern float32_t rearranged_twiddle_stride1_256_f32[168]; -extern float32_t rearranged_twiddle_stride2_256_f32[168]; -extern float32_t rearranged_twiddle_stride3_256_f32[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_f32[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_f32[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_f32[5]; -extern float32_t rearranged_twiddle_stride1_1024_f32[680]; -extern float32_t rearranged_twiddle_stride2_1024_f32[680]; -extern float32_t rearranged_twiddle_stride3_1024_f32[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) || defined(ARM_TABLE_TWIDDLECOEF_F32_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_f32[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_f32[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_f32[6]; -extern float32_t rearranged_twiddle_stride1_4096_f32[2728]; -extern float32_t rearranged_twiddle_stride2_4096_f32[2728]; -extern float32_t rearranged_twiddle_stride3_4096_f32[2728]; -#endif - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - - - -#if defined(ARM_MATH_MVEI) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_16) || defined(ARM_TABLE_TWIDDLECOEF_Q31_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_q31[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_q31[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_q31[2]; -extern q31_t rearranged_twiddle_stride1_16_q31[8]; -extern q31_t rearranged_twiddle_stride2_16_q31[8]; -extern q31_t rearranged_twiddle_stride3_16_q31[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_64) || defined(ARM_TABLE_TWIDDLECOEF_Q31_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_q31[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_q31[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_q31[3]; -extern q31_t rearranged_twiddle_stride1_64_q31[40]; -extern q31_t rearranged_twiddle_stride2_64_q31[40]; -extern q31_t rearranged_twiddle_stride3_64_q31[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_256) || defined(ARM_TABLE_TWIDDLECOEF_Q31_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_q31[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_q31[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_q31[4]; -extern q31_t rearranged_twiddle_stride1_256_q31[168]; -extern q31_t rearranged_twiddle_stride2_256_q31[168]; -extern q31_t rearranged_twiddle_stride3_256_q31[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_q31[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_q31[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_q31[5]; -extern q31_t rearranged_twiddle_stride1_1024_q31[680]; -extern q31_t rearranged_twiddle_stride2_1024_q31[680]; -extern q31_t rearranged_twiddle_stride3_1024_q31[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q31_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_q31[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_q31[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_q31[6]; -extern q31_t rearranged_twiddle_stride1_4096_q31[2728]; -extern q31_t rearranged_twiddle_stride2_4096_q31[2728]; -extern q31_t rearranged_twiddle_stride3_4096_q31[2728]; -#endif - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEI) */ - - - -#if defined(ARM_MATH_MVEI) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_16) || defined(ARM_TABLE_TWIDDLECOEF_Q15_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_q15[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_q15[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_q15[2]; -extern q15_t rearranged_twiddle_stride1_16_q15[8]; -extern q15_t rearranged_twiddle_stride2_16_q15[8]; -extern q15_t rearranged_twiddle_stride3_16_q15[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_64) || defined(ARM_TABLE_TWIDDLECOEF_Q15_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_q15[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_q15[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_q15[3]; -extern q15_t rearranged_twiddle_stride1_64_q15[40]; -extern q15_t rearranged_twiddle_stride2_64_q15[40]; -extern q15_t rearranged_twiddle_stride3_64_q15[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_256) || defined(ARM_TABLE_TWIDDLECOEF_Q15_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_q15[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_q15[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_q15[4]; -extern q15_t rearranged_twiddle_stride1_256_q15[168]; -extern q15_t rearranged_twiddle_stride2_256_q15[168]; -extern q15_t rearranged_twiddle_stride3_256_q15[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_q15[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_q15[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_q15[5]; -extern q15_t rearranged_twiddle_stride1_1024_q15[680]; -extern q15_t rearranged_twiddle_stride2_1024_q15[680]; -extern q15_t rearranged_twiddle_stride3_1024_q15[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q15_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_q15[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_q15[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_q15[6]; -extern q15_t rearranged_twiddle_stride1_4096_q15[2728]; -extern q15_t rearranged_twiddle_stride2_4096_q15[2728]; -extern q15_t rearranged_twiddle_stride3_4096_q15[2728]; -#endif - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEI) */ - - - -#if defined(ARM_MATH_MVEI) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEI) */ - - - -#endif /*_ARM_MVE_TABLES_H*/ - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_vec_math.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_vec_math.h deleted file mode 100644 index fdf87d7..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/cmsis/dsp/include/arm_vec_math.h +++ /dev/null @@ -1,372 +0,0 @@ -/****************************************************************************** - * @file arm_vec_math.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief Public header file for CMSIS DSP Library - ******************************************************************************/ -/* - * Copyright (c) 2010-2019 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_VEC_MATH_H -#define _ARM_VEC_MATH_H - -#include "arm_math.h" -#include "arm_common_tables.h" -#include "arm_helium_utils.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) - -#define INV_NEWTON_INIT_F32 0x7EF127EA - -static const float32_t __logf_rng_f32=0.693147180f; - - -/* fast inverse approximation (3x newton) */ -__STATIC_INLINE f32x4_t vrecip_medprec_f32( - f32x4_t x) -{ - q31x4_t m; - f32x4_t b; - any32x4_t xinv; - f32x4_t ax = vabsq(x); - - xinv.f = ax; - m = 0x3F800000 - (xinv.i & 0x7F800000); - xinv.i = xinv.i + m; - xinv.f = 1.41176471f - 0.47058824f * xinv.f; - xinv.i = xinv.i + m; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - xinv.f = vdupq_m(xinv.f, INFINITY, vcmpeqq(x, 0.0f)); - /* - * restore sign - */ - xinv.f = vnegq_m(xinv.f, xinv.f, vcmpltq(x, 0.0f)); - - return xinv.f; -} - -/* fast inverse approximation (4x newton) */ -__STATIC_INLINE f32x4_t vrecip_hiprec_f32( - f32x4_t x) -{ - q31x4_t m; - f32x4_t b; - any32x4_t xinv; - f32x4_t ax = vabsq(x); - - xinv.f = ax; - - m = 0x3F800000 - (xinv.i & 0x7F800000); - xinv.i = xinv.i + m; - xinv.f = 1.41176471f - 0.47058824f * xinv.f; - xinv.i = xinv.i + m; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - b = 2.0f - xinv.f * ax; - xinv.f = xinv.f * b; - - xinv.f = vdupq_m(xinv.f, INFINITY, vcmpeqq(x, 0.0f)); - /* - * restore sign - */ - xinv.f = vnegq_m(xinv.f, xinv.f, vcmpltq(x, 0.0f)); - - return xinv.f; -} - -__STATIC_INLINE f32x4_t vdiv_f32( - f32x4_t num, f32x4_t den) -{ - return vmulq(num, vrecip_hiprec_f32(den)); -} - -/** - @brief Single-precision taylor dev. - @param[in] x f32 quad vector input - @param[in] coeffs f32 quad vector coeffs - @return destination f32 quad vector - */ - -__STATIC_INLINE f32x4_t vtaylor_polyq_f32( - f32x4_t x, - const float32_t * coeffs) -{ - f32x4_t A = vfmasq(vdupq_n_f32(coeffs[4]), x, coeffs[0]); - f32x4_t B = vfmasq(vdupq_n_f32(coeffs[6]), x, coeffs[2]); - f32x4_t C = vfmasq(vdupq_n_f32(coeffs[5]), x, coeffs[1]); - f32x4_t D = vfmasq(vdupq_n_f32(coeffs[7]), x, coeffs[3]); - f32x4_t x2 = vmulq(x, x); - f32x4_t x4 = vmulq(x2, x2); - f32x4_t res = vfmaq(vfmaq_f32(A, B, x2), vfmaq_f32(C, D, x2), x4); - - return res; -} - -__STATIC_INLINE f32x4_t vmant_exp_f32( - f32x4_t x, - int32x4_t * e) -{ - any32x4_t r; - int32x4_t n; - - r.f = x; - n = r.i >> 23; - n = n - 127; - r.i = r.i - (n << 23); - - *e = n; - return r.f; -} - - -__STATIC_INLINE f32x4_t vlogq_f32(f32x4_t vecIn) -{ - q31x4_t vecExpUnBiased; - f32x4_t vecTmpFlt0, vecTmpFlt1; - f32x4_t vecAcc0, vecAcc1, vecAcc2, vecAcc3; - f32x4_t vecExpUnBiasedFlt; - - /* - * extract exponent - */ - vecTmpFlt1 = vmant_exp_f32(vecIn, &vecExpUnBiased); - - vecTmpFlt0 = vecTmpFlt1 * vecTmpFlt1; - /* - * a = (__logf_lut_f32[4] * r.f) + (__logf_lut_f32[0]); - */ - vecAcc0 = vdupq_n_f32(__logf_lut_f32[0]); - vecAcc0 = vfmaq(vecAcc0, vecTmpFlt1, __logf_lut_f32[4]); - /* - * b = (__logf_lut_f32[6] * r.f) + (__logf_lut_f32[2]); - */ - vecAcc1 = vdupq_n_f32(__logf_lut_f32[2]); - vecAcc1 = vfmaq(vecAcc1, vecTmpFlt1, __logf_lut_f32[6]); - /* - * c = (__logf_lut_f32[5] * r.f) + (__logf_lut_f32[1]); - */ - vecAcc2 = vdupq_n_f32(__logf_lut_f32[1]); - vecAcc2 = vfmaq(vecAcc2, vecTmpFlt1, __logf_lut_f32[5]); - /* - * d = (__logf_lut_f32[7] * r.f) + (__logf_lut_f32[3]); - */ - vecAcc3 = vdupq_n_f32(__logf_lut_f32[3]); - vecAcc3 = vfmaq(vecAcc3, vecTmpFlt1, __logf_lut_f32[7]); - /* - * a = a + b * xx; - */ - vecAcc0 = vfmaq(vecAcc0, vecAcc1, vecTmpFlt0); - /* - * c = c + d * xx; - */ - vecAcc2 = vfmaq(vecAcc2, vecAcc3, vecTmpFlt0); - /* - * xx = xx * xx; - */ - vecTmpFlt0 = vecTmpFlt0 * vecTmpFlt0; - vecExpUnBiasedFlt = vcvtq_f32_s32(vecExpUnBiased); - /* - * r.f = a + c * xx; - */ - vecAcc0 = vfmaq(vecAcc0, vecAcc2, vecTmpFlt0); - /* - * add exponent - * r.f = r.f + ((float32_t) m) * __logf_rng_f32; - */ - vecAcc0 = vfmaq(vecAcc0, vecExpUnBiasedFlt, __logf_rng_f32); - // set log0 down to -inf - vecAcc0 = vdupq_m(vecAcc0, -INFINITY, vcmpeqq(vecIn, 0.0f)); - return vecAcc0; -} - -__STATIC_INLINE f32x4_t vexpq_f32( - f32x4_t x) -{ - // Perform range reduction [-log(2),log(2)] - int32x4_t m = vcvtq_s32_f32(vmulq_n_f32(x, 1.4426950408f)); - f32x4_t val = vfmsq_f32(x, vcvtq_f32_s32(m), vdupq_n_f32(0.6931471805f)); - - // Polynomial Approximation - f32x4_t poly = vtaylor_polyq_f32(val, exp_tab); - - // Reconstruct - poly = (f32x4_t) (vqaddq_s32((q31x4_t) (poly), vqshlq_n_s32(m, 23))); - - poly = vdupq_m(poly, 0.0f, vcmpltq_n_s32(m, -126)); - return poly; -} - -__STATIC_INLINE f32x4_t arm_vec_exponent_f32(f32x4_t x, int32_t nb) -{ - f32x4_t r = x; - nb--; - while (nb > 0) { - r = vmulq(r, x); - nb--; - } - return (r); -} - -__STATIC_INLINE f32x4_t vrecip_f32(f32x4_t vecIn) -{ - f32x4_t vecSx, vecW, vecTmp; - any32x4_t v; - - vecSx = vabsq(vecIn); - - v.f = vecIn; - v.i = vsubq(vdupq_n_s32(INV_NEWTON_INIT_F32), v.i); - - vecW = vmulq(vecSx, v.f); - - // v.f = v.f * (8 + w * (-28 + w * (56 + w * (-70 + w *(56 + w * (-28 + w * (8 - w))))))); - vecTmp = vsubq(vdupq_n_f32(8.0f), vecW); - vecTmp = vfmasq(vecW, vecTmp, -28.0f); - vecTmp = vfmasq(vecW, vecTmp, 56.0f); - vecTmp = vfmasq(vecW, vecTmp, -70.0f); - vecTmp = vfmasq(vecW, vecTmp, 56.0f); - vecTmp = vfmasq(vecW, vecTmp, -28.0f); - vecTmp = vfmasq(vecW, vecTmp, 8.0f); - v.f = vmulq(v.f, vecTmp); - - v.f = vdupq_m(v.f, INFINITY, vcmpeqq(vecIn, 0.0f)); - /* - * restore sign - */ - v.f = vnegq_m(v.f, v.f, vcmpltq(vecIn, 0.0f)); - return v.f; -} - -__STATIC_INLINE f32x4_t vtanhq_f32( - f32x4_t val) -{ - f32x4_t x = - vminnmq_f32(vmaxnmq_f32(val, vdupq_n_f32(-10.f)), vdupq_n_f32(10.0f)); - f32x4_t exp2x = vexpq_f32(vmulq_n_f32(x, 2.f)); - f32x4_t num = vsubq_n_f32(exp2x, 1.f); - f32x4_t den = vaddq_n_f32(exp2x, 1.f); - f32x4_t tanh = vmulq_f32(num, vrecip_f32(den)); - return tanh; -} - -__STATIC_INLINE f32x4_t vpowq_f32( - f32x4_t val, - f32x4_t n) -{ - return vexpq_f32(vmulq_f32(n, vlogq_f32(val))); -} - -#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)*/ - -#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) -#endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ - -#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) - -#include "NEMath.h" -/** - * @brief Vectorized integer exponentiation - * @param[in] x value - * @param[in] nb integer exponent >= 1 - * @return x^nb - * - */ -__STATIC_INLINE float32x4_t arm_vec_exponent_f32(float32x4_t x, int32_t nb) -{ - float32x4_t r = x; - nb --; - while(nb > 0) - { - r = vmulq_f32(r , x); - nb--; - } - return(r); -} - - -__STATIC_INLINE float32x4_t __arm_vec_sqrt_f32_neon(float32x4_t x) -{ - float32x4_t x1 = vmaxq_f32(x, vdupq_n_f32(FLT_MIN)); - float32x4_t e = vrsqrteq_f32(x1); - e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x1, e), e), e); - e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x1, e), e), e); - return vmulq_f32(x, e); -} - -__STATIC_INLINE int16x8_t __arm_vec_sqrt_q15_neon(int16x8_t vec) -{ - float32x4_t tempF; - int32x4_t tempHI,tempLO; - - tempLO = vmovl_s16(vget_low_s16(vec)); - tempF = vcvtq_n_f32_s32(tempLO,15); - tempF = __arm_vec_sqrt_f32_neon(tempF); - tempLO = vcvtq_n_s32_f32(tempF,15); - - tempHI = vmovl_s16(vget_high_s16(vec)); - tempF = vcvtq_n_f32_s32(tempHI,15); - tempF = __arm_vec_sqrt_f32_neon(tempF); - tempHI = vcvtq_n_s32_f32(tempF,15); - - return(vcombine_s16(vqmovn_s32(tempLO),vqmovn_s32(tempHI))); -} - -__STATIC_INLINE int32x4_t __arm_vec_sqrt_q31_neon(int32x4_t vec) -{ - float32x4_t temp; - - temp = vcvtq_n_f32_s32(vec,31); - temp = __arm_vec_sqrt_f32_neon(temp); - return(vcvtq_n_s32_f32(temp,31)); -} - -#endif /* (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#ifdef __cplusplus -} -#endif - - -#endif /* _ARM_VEC_MATH_H */ - -/** - * - * End of file. - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_acc.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_acc.h deleted file mode 100644 index 5415a24..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_acc.h +++ /dev/null @@ -1,202 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_acc.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 acc header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_ACC_H -#define __AT32F403A_407_ACC_H - - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup ACC - * @{ - */ - -/** @defgroup ACC_exported_constants - * @{ - */ - -#define ACC_CAL_HICKCAL ((uint16_t)0x0000) /*!< acc hick calibration */ -#define ACC_CAL_HICKTRIM ((uint16_t)0x0002) /*!< acc hick trim */ - -#define ACC_RSLOST_FLAG ((uint16_t)0x0002) /*!< acc reference signal lost error flag */ -#define ACC_CALRDY_FLAG ((uint16_t)0x0001) /*!< acc internal high-speed clock calibration ready error flag */ - -#define ACC_CALRDYIEN_INT ((uint16_t)0x0020) /*!< acc internal high-speed clock calibration ready interrupt enable */ -#define ACC_EIEN_INT ((uint16_t)0x0010) /*!< acc reference signal lost interrupt enable */ - -/** - * @} - */ - -/** @defgroup ACC_exported_types - * @{ - */ - -/** - * @brief type define acc register all - */ -typedef struct -{ - - /** - * @brief acc sts register, offset:0x00 - */ - union - { - __IO uint32_t sts; - struct - { - __IO uint32_t calrdy : 1; /* [0] */ - __IO uint32_t rslost : 1; /* [1] */ - __IO uint32_t reserved1 : 30;/* [31:2] */ - } sts_bit; - }; - - /** - * @brief acc ctrl1 register, offset:0x04 - */ - union - { - __IO uint32_t ctrl1; - struct - { - __IO uint32_t calon : 1; /* [0] */ - __IO uint32_t entrim : 1; /* [1] */ - __IO uint32_t reserved1 : 2; /* [3:2] */ - __IO uint32_t eien : 1; /* [4] */ - __IO uint32_t calrdyien : 1; /* [5] */ - __IO uint32_t reserved2 : 2; /* [7:6] */ - __IO uint32_t step : 4; /* [11:8] */ - __IO uint32_t reserved3 : 20;/* [31:12] */ - } ctrl1_bit; - }; - - /** - * @brief acc ctrl2 register, offset:0x08 - */ - union - { - __IO uint32_t ctrl2; - struct - { - __IO uint32_t hickcal : 8; /* [7:0] */ - __IO uint32_t hicktrim : 6; /* [13:8] */ - __IO uint32_t reserved1 : 18;/* [31:14] */ - } ctrl2_bit; - }; - - /** - * @brief acc acc_c1 register, offset:0x0C - */ - union - { - __IO uint32_t c1; - struct - { - __IO uint32_t c1 : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:16] */ - } c1_bit; - }; - - /** - * @brief acc acc_c2 register, offset:0x10 - */ - union - { - __IO uint32_t c2; - struct - { - __IO uint32_t c2 : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:16] */ - } c2_bit; - }; - - /** - * @brief acc acc_c3 register, offset:0x14 - */ - union - { - __IO uint32_t c3; - struct - { - __IO uint32_t c3 : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:16] */ - } c3_bit; - }; -} acc_type; - -/** - * @} - */ - -#define ACC ((acc_type *) ACC_BASE) - -/** @defgroup ACC_exported_functions - * @{ - */ - -void acc_calibration_mode_enable(uint16_t acc_trim, confirm_state new_state); -void acc_step_set(uint8_t step_value); -void acc_interrupt_enable(uint16_t acc_int, confirm_state new_state); -uint8_t acc_hicktrim_get(void); -uint8_t acc_hickcal_get(void); -void acc_write_c1(uint16_t acc_c1_value); -void acc_write_c2(uint16_t acc_c2_value); -void acc_write_c3(uint16_t acc_c3_value); -uint16_t acc_read_c1(void); -uint16_t acc_read_c2(void); -uint16_t acc_read_c3(void); -flag_status acc_flag_get(uint16_t acc_flag); -void acc_flag_clear(uint16_t acc_flag); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_adc.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_adc.h deleted file mode 100644 index cb07297..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_adc.h +++ /dev/null @@ -1,642 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_adc.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 adc header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_ADC_H -#define __AT32F403A_407_ADC_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup ADC - * @{ - */ - -/** @defgroup ADC_interrupts_definition - * @brief adc interrupt - * @{ - */ - -#define ADC_CCE_INT ((uint32_t)0x00000020) /*!< channels conversion end interrupt */ -#define ADC_VMOR_INT ((uint32_t)0x00000040) /*!< voltage monitoring out of range interrupt */ -#define ADC_PCCE_INT ((uint32_t)0x00000080) /*!< preempt channels conversion end interrupt */ - -/** - * @} - */ - -/** @defgroup ADC_flags_definition - * @brief adc flag - * @{ - */ - -#define ADC_VMOR_FLAG ((uint8_t)0x01) /*!< voltage monitoring out of range flag */ -#define ADC_CCE_FLAG ((uint8_t)0x02) /*!< channels conversion end flag */ -#define ADC_PCCE_FLAG ((uint8_t)0x04) /*!< preempt channels conversion end flag */ -#define ADC_PCCS_FLAG ((uint8_t)0x08) /*!< preempt channel conversion start flag */ -#define ADC_OCCS_FLAG ((uint8_t)0x10) /*!< ordinary channel conversion start flag */ - -/** - * @} - */ - -/** @defgroup ADC_exported_types - * @{ - */ - -/** - * @brief adc combine mode type(these options are reserved in adc2 and adc3) - */ -typedef enum -{ - ADC_INDEPENDENT_MODE = 0x00, /*!< independent mode */ - ADC_ORDINARY_SMLT_PREEMPT_SMLT_MODE = 0x01, /*!< combined ordinary simultaneous + preempt simultaneous mode */ - ADC_ORDINARY_SMLT_PREEMPT_INTERLTRIG_MODE = 0x02, /*!< combined ordinary simultaneous + preempt interleaved trigger mode */ - ADC_ORDINARY_SHORTSHIFT_PREEMPT_SMLT_MODE = 0x03, /*!< combined ordinary short shifting + preempt simultaneous mode */ - ADC_ORDINARY_LONGSHIFT_PREEMPT_SMLT_MODE = 0x04, /*!< combined ordinary long shifting + preempt simultaneous mode */ - ADC_PREEMPT_SMLT_ONLY_MODE = 0x05, /*!< preempt simultaneous mode only */ - ADC_ORDINARY_SMLT_ONLY_MODE = 0x06, /*!< ordinary simultaneous mode only */ - ADC_ORDINARY_SHORTSHIFT_ONLY_MODE = 0x07, /*!< ordinary short shifting mode only */ - ADC_ORDINARY_LONGSHIFT_ONLY_MODE = 0x08, /*!< slow interleaved mode only */ - ADC_PREEMPT_INTERLTRIG_ONLY_MODE = 0x09 /*!< alternate trigger mode only */ -} adc_combine_mode_type; - -/** - * @brief adc data align type - */ -typedef enum -{ - ADC_RIGHT_ALIGNMENT = 0x00, /*!< data right alignment */ - ADC_LEFT_ALIGNMENT = 0x01 /*!< data left alignment */ -} adc_data_align_type; - -/** - * @brief adc channel select type - */ -typedef enum -{ - ADC_CHANNEL_0 = 0x00, /*!< adc channel 0 */ - ADC_CHANNEL_1 = 0x01, /*!< adc channel 1 */ - ADC_CHANNEL_2 = 0x02, /*!< adc channel 2 */ - ADC_CHANNEL_3 = 0x03, /*!< adc channel 3 */ - ADC_CHANNEL_4 = 0x04, /*!< adc channel 4 */ - ADC_CHANNEL_5 = 0x05, /*!< adc channel 5 */ - ADC_CHANNEL_6 = 0x06, /*!< adc channel 6 */ - ADC_CHANNEL_7 = 0x07, /*!< adc channel 7 */ - ADC_CHANNEL_8 = 0x08, /*!< adc channel 8 */ - ADC_CHANNEL_9 = 0x09, /*!< adc channel 9 */ - ADC_CHANNEL_10 = 0x0A, /*!< adc channel 10 */ - ADC_CHANNEL_11 = 0x0B, /*!< adc channel 11 */ - ADC_CHANNEL_12 = 0x0C, /*!< adc channel 12 */ - ADC_CHANNEL_13 = 0x0D, /*!< adc channel 13 */ - ADC_CHANNEL_14 = 0x0E, /*!< adc channel 14 */ - ADC_CHANNEL_15 = 0x0F, /*!< adc channel 15 */ - ADC_CHANNEL_16 = 0x10, /*!< adc channel 16 */ - ADC_CHANNEL_17 = 0x11 /*!< adc channel 17 */ -} adc_channel_select_type; - -/** - * @brief adc sampletime select type - */ -typedef enum -{ - ADC_SAMPLETIME_1_5 = 0x00, /*!< adc sample time 1.5 cycle */ - ADC_SAMPLETIME_7_5 = 0x01, /*!< adc sample time 7.5 cycle */ - ADC_SAMPLETIME_13_5 = 0x02, /*!< adc sample time 13.5 cycle */ - ADC_SAMPLETIME_28_5 = 0x03, /*!< adc sample time 28.5 cycle */ - ADC_SAMPLETIME_41_5 = 0x04, /*!< adc sample time 41.5 cycle */ - ADC_SAMPLETIME_55_5 = 0x05, /*!< adc sample time 55.5 cycle */ - ADC_SAMPLETIME_71_5 = 0x06, /*!< adc sample time 71.5 cycle */ - ADC_SAMPLETIME_239_5 = 0x07 /*!< adc sample time 239.5 cycle */ -} adc_sampletime_select_type; - -/** - * @brief adc ordinary group trigger event select type - */ -typedef enum -{ - /*adc1 and adc2 ordinary trigger event*/ - ADC12_ORDINARY_TRIG_TMR1CH1 = 0x00, /*!< timer1 ch1 event as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_TMR1CH2 = 0x01, /*!< timer1 ch2 event as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_TMR1CH3 = 0x02, /*!< timer1 ch3 event as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_TMR2CH2 = 0x03, /*!< timer2 ch2 event as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_TMR3TRGOUT = 0x04, /*!< timer3 trgout event as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_TMR4CH4 = 0x05, /*!< timer4 ch4 event as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_EXINT11_TMR8TRGOUT = 0x06, /*!< exint line11/timer8 trgout event as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_SOFTWARE = 0x07, /*!< software(OCSWTRG) control bit as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_TMR1TRGOUT = 0x0D, /*!< timer1 trgout event as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_TMR8CH1 = 0x0E, /*!< timer8 ch1 event as trigger source of adc1/adc2 ordinary sequence */ - ADC12_ORDINARY_TRIG_TMR8CH2 = 0x0F, /*!< timer8 ch2 event as trigger source of adc1/adc2 ordinary sequence */ - /*adc3 ordinary trigger event*/ - ADC3_ORDINARY_TRIG_TMR3CH1 = 0x00, /*!< timer3 ch1 event as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_TMR2CH3 = 0x01, /*!< timer2 ch3 event as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_TMR1CH3 = 0x02, /*!< timer1 ch3 event as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_TMR8CH1 = 0x03, /*!< timer8 ch1 event as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_TMR8TRGOUT = 0x04, /*!< timer8 trgout event as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_TMR5CH1 = 0x05, /*!< timer5 ch1 event as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_TMR5CH3 = 0x06, /*!< timer5 ch3 event as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_SOFTWARE = 0x07, /*!< software(OCSWTRG) control bit as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_TMR1TRGOUT = 0x0D, /*!< timer1 trgout event as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_TMR1CH1 = 0x0E, /*!< timer1 ch1 event as trigger source of adc3 ordinary sequence */ - ADC3_ORDINARY_TRIG_TMR8CH3 = 0x0F /*!< timer8 ch3 event as trigger source of adc3 ordinary sequence */ -} adc_ordinary_trig_select_type; - -/** - * @brief adc preempt group trigger event select type - */ -typedef enum -{ - /*adc1 and adc2 preempt trigger event*/ - ADC12_PREEMPT_TRIG_TMR1TRGOUT = 0x00, /*!< timer1 trgout event as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_TMR1CH4 = 0x01, /*!< timer1 ch4 event as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_TMR2TRGOUT = 0x02, /*!< timer2 trgout event as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_TMR2CH1 = 0x03, /*!< timer2 ch1 event as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_TMR3CH4 = 0x04, /*!< timer3 ch4 event as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_TMR4TRGOUT = 0x05, /*!< timer4 trgout event as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_EXINT15_TMR8CH4 = 0x06, /*!< exint line15/timer8 ch4 event as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_SOFTWARE = 0x07, /*!< software(PCSWTRG) control bit as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_TMR1CH1 = 0x0D, /*!< timer1 ch1 event as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_TMR8CH1 = 0x0E, /*!< timer8 ch1 event as trigger source of adc1/adc2 preempt sequence */ - ADC12_PREEMPT_TRIG_TMR8TRGOUT = 0x0F, /*!< timer8 trgout event as trigger source of adc1/adc2 preempt sequence */ - /*adc3 preempt trigger event*/ - ADC3_PREEMPT_TRIG_TMR1TRGOUT = 0x00, /*!< timer1 trgout event as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_TMR1CH4 = 0x01, /*!< timer1 ch4 event as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_TMR4CH3 = 0x02, /*!< timer4 ch3 event as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_TMR8CH2 = 0x03, /*!< timer8 ch2 event as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_TMR8CH4 = 0x04, /*!< timer8 ch4 event as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_TMR5TRGOUT = 0x05, /*!< timer5 trgout event as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_TMR5CH4 = 0x06, /*!< timer5 ch4 event as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_SOFTWARE = 0x07, /*!< software(PCSWTRG) control bit as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_TMR1CH1 = 0x0D, /*!< timer1 ch1 event as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_TMR1CH2 = 0x0E, /*!< timer1 ch2 event as trigger source of adc3 preempt sequence */ - ADC3_PREEMPT_TRIG_TMR8TRGOUT = 0x0F /*!< timer8 trgout event as trigger source of adc3 preempt sequence */ -} adc_preempt_trig_select_type; - -/** - * @brief adc preempt channel type - */ -typedef enum -{ - ADC_PREEMPT_CHANNEL_1 = 0x00, /*!< adc preempt channel 1 */ - ADC_PREEMPT_CHANNEL_2 = 0x01, /*!< adc preempt channel 2 */ - ADC_PREEMPT_CHANNEL_3 = 0x02, /*!< adc preempt channel 3 */ - ADC_PREEMPT_CHANNEL_4 = 0x03 /*!< adc preempt channel 4 */ -} adc_preempt_channel_type; - -/** - * @brief adc voltage_monitoring type - */ -typedef enum -{ - ADC_VMONITOR_SINGLE_ORDINARY = 0x00800200, /*!< voltage_monitoring on a single ordinary channel */ - ADC_VMONITOR_SINGLE_PREEMPT = 0x00400200, /*!< voltage_monitoring on a single preempt channel */ - ADC_VMONITOR_SINGLE_ORDINARY_PREEMPT = 0x00C00200, /*!< voltage_monitoring on a single ordinary or preempt channel */ - ADC_VMONITOR_ALL_ORDINARY = 0x00800000, /*!< voltage_monitoring on all ordinary channel */ - ADC_VMONITOR_ALL_PREEMPT = 0x00400000, /*!< voltage_monitoring on all preempt channel */ - ADC_VMONITOR_ALL_ORDINARY_PREEMPT = 0x00C00000, /*!< voltage_monitoring on all ordinary and preempt channel */ - ADC_VMONITOR_NONE = 0x00000000 /*!< no channel guarded by the voltage_monitoring */ -} adc_voltage_monitoring_type; - -/** - * @brief adc base config type - */ -typedef struct -{ - confirm_state sequence_mode; /*!< adc sequence mode */ - confirm_state repeat_mode; /*!< adc repeat mode */ - adc_data_align_type data_align; /*!< adc data alignment */ - uint8_t ordinary_channel_length; /*!< adc ordinary channel sequence length*/ -} adc_base_config_type; - -/** - * @brief type define adc register all - */ -typedef struct -{ - - /** - * @brief adc sts register, offset:0x00 - */ - union - { - __IO uint32_t sts; - struct - { - __IO uint32_t vmor : 1; /* [0] */ - __IO uint32_t cce : 1; /* [1] */ - __IO uint32_t pcce : 1; /* [2] */ - __IO uint32_t pccs : 1; /* [3] */ - __IO uint32_t occs : 1; /* [4] */ - __IO uint32_t reserved1 : 27;/* [31:5] */ - } sts_bit; - }; - - /** - * @brief adc ctrl1 register, offset:0x04 - */ - union - { - __IO uint32_t ctrl1; - struct - { - __IO uint32_t vmcsel : 5; /* [4:0] */ - __IO uint32_t cceien : 1; /* [5] */ - __IO uint32_t vmorien : 1; /* [6] */ - __IO uint32_t pcceien : 1; /* [7] */ - __IO uint32_t sqen : 1; /* [8] */ - __IO uint32_t vmsgen : 1; /* [9] */ - __IO uint32_t pcautoen : 1; /* [10] */ - __IO uint32_t ocpen : 1; /* [11] */ - __IO uint32_t pcpen : 1; /* [12] */ - __IO uint32_t ocpcnt : 3; /* [15:13] */ - __IO uint32_t mssel : 4; /* [19:16] */ - __IO uint32_t reserved1 : 2; /* [21:20] */ - __IO uint32_t pcvmen : 1; /* [22] */ - __IO uint32_t ocvmen : 1; /* [23] */ - __IO uint32_t reserved2 : 8; /* [31:24] */ - } ctrl1_bit; - }; - - /** - * @brief adc ctrl2 register, offset:0x08 - */ - union - { - __IO uint32_t ctrl2; - struct - { - __IO uint32_t adcen : 1; /* [0] */ - __IO uint32_t rpen : 1; /* [1] */ - __IO uint32_t adcal : 1; /* [2] */ - __IO uint32_t adcalinit : 1; /* [3] */ - __IO uint32_t reserved1 : 4; /* [7:4] */ - __IO uint32_t ocdmaen : 1; /* [8] */ - __IO uint32_t reserved2 : 2; /* [10:9] */ - __IO uint32_t dtalign : 1; /* [11] */ - __IO uint32_t pctesel_l : 3; /* [14:12] */ - __IO uint32_t pcten : 1; /* [15] */ - __IO uint32_t reserved3 : 1; /* [16] */ - __IO uint32_t octesel_l : 3; /* [19:17] */ - __IO uint32_t octen : 1; /* [20] */ - __IO uint32_t pcswtrg : 1; /* [21] */ - __IO uint32_t ocswtrg : 1; /* [22] */ - __IO uint32_t itsrven : 1; /* [23] */ - __IO uint32_t pctesel_h : 1; /* [24] */ - __IO uint32_t octesel_h : 1; /* [25] */ - __IO uint32_t reserved4 : 6; /* [31:26] */ - } ctrl2_bit; - }; - - /** - * @brief adc spt1 register, offset:0x0C - */ - union - { - __IO uint32_t spt1; - struct - { - __IO uint32_t cspt10 : 3; /* [2:0] */ - __IO uint32_t cspt11 : 3; /* [5:3] */ - __IO uint32_t cspt12 : 3; /* [8:6] */ - __IO uint32_t cspt13 : 3; /* [11:9] */ - __IO uint32_t cspt14 : 3; /* [14:12] */ - __IO uint32_t cspt15 : 3; /* [17:15] */ - __IO uint32_t cspt16 : 3; /* [20:18] */ - __IO uint32_t cspt17 : 3; /* [23:21] */ - __IO uint32_t reserved1 : 8;/* [31:24] */ - } spt1_bit; - }; - - /** - * @brief adc spt2 register, offset:0x10 - */ - union - { - __IO uint32_t spt2; - struct - { - __IO uint32_t cspt0 : 3;/* [2:0] */ - __IO uint32_t cspt1 : 3;/* [5:3] */ - __IO uint32_t cspt2 : 3;/* [8:6] */ - __IO uint32_t cspt3 : 3;/* [11:9] */ - __IO uint32_t cspt4 : 3;/* [14:12] */ - __IO uint32_t cspt5 : 3;/* [17:15] */ - __IO uint32_t cspt6 : 3;/* [20:18] */ - __IO uint32_t cspt7 : 3;/* [23:21] */ - __IO uint32_t cspt8 : 3;/* [26:24] */ - __IO uint32_t cspt9 : 3;/* [29:27] */ - __IO uint32_t reserved1 : 2;/* [31:30] */ - } spt2_bit; - }; - - /** - * @brief adc pcdto1 register, offset:0x14 - */ - union - { - __IO uint32_t pcdto1; - struct - { - __IO uint32_t pcdto1 : 12; /* [11:0] */ - __IO uint32_t reserved1 : 20; /* [31:12] */ - } pcdto1_bit; - }; - - /** - * @brief adc pcdto2 register, offset:0x18 - */ - union - { - __IO uint32_t pcdto2; - struct - { - __IO uint32_t pcdto2 : 12; /* [11:0] */ - __IO uint32_t reserved1 : 20; /* [31:12] */ - } pcdto2_bit; - }; - - /** - * @brief adc pcdto3 register, offset:0x1C - */ - union - { - __IO uint32_t pcdto3; - struct - { - __IO uint32_t pcdto3 : 12; /* [11:0] */ - __IO uint32_t reserved1 : 20; /* [31:12] */ - } pcdto3_bit; - }; - - /** - * @brief adc pcdto4 register, offset:0x20 - */ - union - { - __IO uint32_t pcdto4; - struct - { - __IO uint32_t pcdto4 : 12; /* [11:0] */ - __IO uint32_t reserved1 : 20; /* [31:12] */ - } pcdto4_bit; - }; - - /** - * @brief adc vmhb register, offset:0x24 - */ - union - { - __IO uint32_t vmhb; - struct - { - __IO uint32_t vmhb : 12; /* [11:0] */ - __IO uint32_t reserved1 : 20; /* [31:12] */ - } vmhb_bit; - }; - - /** - * @brief adc vmlb register, offset:0x28 - */ - union - { - __IO uint32_t vmlb; - struct - { - __IO uint32_t vmlb : 12; /* [11:0] */ - __IO uint32_t reserved1 : 20; /* [31:12] */ - } vmlb_bit; - }; - - /** - * @brief adc osq1 register, offset:0x2C - */ - union - { - __IO uint32_t osq1; - struct - { - __IO uint32_t osn13 : 5; /* [4:0] */ - __IO uint32_t osn14 : 5; /* [9:5] */ - __IO uint32_t osn15 : 5; /* [14:10] */ - __IO uint32_t osn16 : 5; /* [19:15] */ - __IO uint32_t oclen : 4; /* [23:20] */ - __IO uint32_t reserved1 : 8; /* [31:24] */ - } osq1_bit; - }; - - /** - * @brief adc osq2 register, offset:0x30 - */ - union - { - __IO uint32_t osq2; - struct - { - __IO uint32_t osn7 : 5; /* [4:0] */ - __IO uint32_t osn8 : 5; /* [9:5] */ - __IO uint32_t osn9 : 5; /* [14:10] */ - __IO uint32_t osn10 : 5; /* [19:15] */ - __IO uint32_t osn11 : 5; /* [24:20] */ - __IO uint32_t osn12 : 5; /* [29:25] */ - __IO uint32_t reserved1 : 2; /* [31:30] */ - } osq2_bit; - }; - - /** - * @brief adc osq3 register, offset:0x34 - */ - union - { - __IO uint32_t osq3; - struct - { - __IO uint32_t osn1 : 5; /* [4:0] */ - __IO uint32_t osn2 : 5; /* [9:5] */ - __IO uint32_t osn3 : 5; /* [14:10] */ - __IO uint32_t osn4 : 5; /* [19:15] */ - __IO uint32_t osn5 : 5; /* [24:20] */ - __IO uint32_t osn6 : 5; /* [29:25] */ - __IO uint32_t reserved1 : 2; /* [31:30] */ - } osq3_bit; - }; - - /** - * @brief adc psq register, offset:0x38 - */ - union - { - __IO uint32_t psq; - struct - { - __IO uint32_t psn1 : 5; /* [4:0] */ - __IO uint32_t psn2 : 5; /* [9:5] */ - __IO uint32_t psn3 : 5; /* [14:10] */ - __IO uint32_t psn4 : 5; /* [19:15] */ - __IO uint32_t pclen : 2; /* [21:20] */ - __IO uint32_t reserved1 : 10;/* [31:22] */ - } psq_bit; - }; - - /** - * @brief adc pdt1 register, offset:0x3C - */ - union - { - __IO uint32_t pdt1; - struct - { - __IO uint32_t pdt1 : 16; /* [15:0] */ - __IO uint32_t reserved1 : 16; /* [31:16] */ - } pdt1_bit; - }; - - /** - * @brief adc pdt2 register, offset:0x40 - */ - union - { - __IO uint32_t pdt2; - struct - { - __IO uint32_t pdt2 : 16; /* [15:0] */ - __IO uint32_t reserved1 : 16; /* [31:16] */ - } pdt2_bit; - }; - - /** - * @brief adc pdt3 register, offset:0x44 - */ - union - { - __IO uint32_t pdt3; - struct - { - __IO uint32_t pdt3 : 16; /* [15:0] */ - __IO uint32_t reserved1 : 16; /* [31:16] */ - } pdt3_bit; - }; - - /** - * @brief adc pdt4 register, offset:0x48 - */ - union - { - __IO uint32_t pdt4; - struct - { - __IO uint32_t pdt4 : 16; /* [15:0] */ - __IO uint32_t reserved1 : 16; /* [31:16] */ - } pdt4_bit; - }; - - /** - * @brief adc odt register, offset:0x4C - */ - union - { - __IO uint32_t odt; - struct - { - __IO uint32_t odt : 16; /* [15:0] */ - __IO uint32_t adc2odt : 16; /* [31:16] */ - } odt_bit; - }; - -} adc_type; - -/** - * @} - */ - -#define ADC1 ((adc_type *) ADC1_BASE) -#define ADC2 ((adc_type *) ADC2_BASE) -#define ADC3 ((adc_type *) ADC3_BASE) - -/** @defgroup ADC_exported_functions - * @{ - */ - -void adc_reset(adc_type *adc_x); -void adc_enable(adc_type *adc_x, confirm_state new_state); -void adc_combine_mode_select(adc_combine_mode_type combine_mode); -void adc_base_default_para_init(adc_base_config_type *adc_base_struct); -void adc_base_config(adc_type *adc_x, adc_base_config_type *adc_base_struct); -void adc_dma_mode_enable(adc_type *adc_x, confirm_state new_state); -void adc_interrupt_enable(adc_type *adc_x, uint32_t adc_int, confirm_state new_state); -void adc_calibration_init(adc_type *adc_x); -flag_status adc_calibration_init_status_get(adc_type *adc_x); -void adc_calibration_start(adc_type *adc_x); -flag_status adc_calibration_status_get(adc_type *adc_x); -void adc_voltage_monitor_enable(adc_type *adc_x, adc_voltage_monitoring_type adc_voltage_monitoring); -void adc_voltage_monitor_threshold_value_set(adc_type *adc_x, uint16_t adc_high_threshold, uint16_t adc_low_threshold); -void adc_voltage_monitor_single_channel_select(adc_type *adc_x, adc_channel_select_type adc_channel); -void adc_ordinary_channel_set(adc_type *adc_x, adc_channel_select_type adc_channel, uint8_t adc_sequence, adc_sampletime_select_type adc_sampletime); -void adc_preempt_channel_length_set(adc_type *adc_x, uint8_t adc_channel_lenght); -void adc_preempt_channel_set(adc_type *adc_x, adc_channel_select_type adc_channel, uint8_t adc_sequence, adc_sampletime_select_type adc_sampletime); -void adc_ordinary_conversion_trigger_set(adc_type *adc_x, adc_ordinary_trig_select_type adc_ordinary_trig, confirm_state new_state); -void adc_preempt_conversion_trigger_set(adc_type *adc_x, adc_preempt_trig_select_type adc_preempt_trig, confirm_state new_state); -void adc_preempt_offset_value_set(adc_type *adc_x, adc_preempt_channel_type adc_preempt_channel, uint16_t adc_offset_value); -void adc_ordinary_part_count_set(adc_type *adc_x, uint8_t adc_channel_count); -void adc_ordinary_part_mode_enable(adc_type *adc_x, confirm_state new_state); -void adc_preempt_part_mode_enable(adc_type *adc_x, confirm_state new_state); -void adc_preempt_auto_mode_enable(adc_type *adc_x, confirm_state new_state); -void adc_tempersensor_vintrv_enable(confirm_state new_state); -void adc_ordinary_software_trigger_enable(adc_type *adc_x, confirm_state new_state); -flag_status adc_ordinary_software_trigger_status_get(adc_type *adc_x); -void adc_preempt_software_trigger_enable(adc_type *adc_x, confirm_state new_state); -flag_status adc_preempt_software_trigger_status_get(adc_type *adc_x); -uint16_t adc_ordinary_conversion_data_get(adc_type *adc_x); -uint32_t adc_combine_ordinary_conversion_data_get(void); -uint16_t adc_preempt_conversion_data_get(adc_type *adc_x, adc_preempt_channel_type adc_preempt_channel); -flag_status adc_flag_get(adc_type *adc_x, uint8_t adc_flag); -void adc_flag_clear(adc_type *adc_x, uint32_t adc_flag); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_bpr.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_bpr.h deleted file mode 100644 index 03235e1..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_bpr.h +++ /dev/null @@ -1,789 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_bpr.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 bpr header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_BPR_H -#define __AT32F403A_407_BPR_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup BPR - * @{ - */ - -/** @defgroup BPR_flags_definition - * @brief bpr flag - * @{ - */ - -#define BPR_TAMPER_INTERRUPT_FLAG ((uint32_t)0x00000001) /*!< bpr tamper interrupt flag */ -#define BPR_TAMPER_EVENT_FLAG ((uint32_t)0x00000002) /*!< bpr tamper event flag */ - -/** - * @} - */ - -/** @defgroup BPR_exported_types - * @{ - */ - -/** - * @brief battery powered register data type - */ -typedef enum -{ - BPR_DATA1 = 0x04, /*!< bpr data register 1 */ - BPR_DATA2 = 0x08, /*!< bpr data register 2 */ - BPR_DATA3 = 0x0C, /*!< bpr data register 3 */ - BPR_DATA4 = 0x10, /*!< bpr data register 4 */ - BPR_DATA5 = 0x14, /*!< bpr data register 5 */ - BPR_DATA6 = 0x18, /*!< bpr data register 6 */ - BPR_DATA7 = 0x1C, /*!< bpr data register 7 */ - BPR_DATA8 = 0x20, /*!< bpr data register 8 */ - BPR_DATA9 = 0x24, /*!< bpr data register 9 */ - BPR_DATA10 = 0x28, /*!< bpr data register 10 */ - BPR_DATA11 = 0x40, /*!< bpr data register 11 */ - BPR_DATA12 = 0x44, /*!< bpr data register 12 */ - BPR_DATA13 = 0x48, /*!< bpr data register 13 */ - BPR_DATA14 = 0x4C, /*!< bpr data register 14 */ - BPR_DATA15 = 0x50, /*!< bpr data register 15 */ - BPR_DATA16 = 0x54, /*!< bpr data register 16 */ - BPR_DATA17 = 0x58, /*!< bpr data register 17 */ - BPR_DATA18 = 0x5C, /*!< bpr data register 18 */ - BPR_DATA19 = 0x60, /*!< bpr data register 19 */ - BPR_DATA20 = 0x64, /*!< bpr data register 20 */ - BPR_DATA21 = 0x68, /*!< bpr data register 21 */ - BPR_DATA22 = 0x6C, /*!< bpr data register 22 */ - BPR_DATA23 = 0x70, /*!< bpr data register 23 */ - BPR_DATA24 = 0x74, /*!< bpr data register 24 */ - BPR_DATA25 = 0x78, /*!< bpr data register 25 */ - BPR_DATA26 = 0x7C, /*!< bpr data register 26 */ - BPR_DATA27 = 0x80, /*!< bpr data register 27 */ - BPR_DATA28 = 0x84, /*!< bpr data register 28 */ - BPR_DATA29 = 0x88, /*!< bpr data register 29 */ - BPR_DATA30 = 0x8C, /*!< bpr data register 30 */ - BPR_DATA31 = 0x90, /*!< bpr data register 31 */ - BPR_DATA32 = 0x94, /*!< bpr data register 32 */ - BPR_DATA33 = 0x98, /*!< bpr data register 33 */ - BPR_DATA34 = 0x9C, /*!< bpr data register 34 */ - BPR_DATA35 = 0xA0, /*!< bpr data register 35 */ - BPR_DATA36 = 0xA4, /*!< bpr data register 36 */ - BPR_DATA37 = 0xA8, /*!< bpr data register 37 */ - BPR_DATA38 = 0xAC, /*!< bpr data register 38 */ - BPR_DATA39 = 0xB0, /*!< bpr data register 39 */ - BPR_DATA40 = 0xB4, /*!< bpr data register 40 */ - BPR_DATA41 = 0xB8, /*!< bpr data register 41 */ - BPR_DATA42 = 0xBC /*!< bpr data register 42 */ -} bpr_data_type; - -/** - * @brief bpr rtc output type - */ -typedef enum -{ - BPR_RTC_OUTPUT_NONE = 0x000, /*!< output disable */ - BPR_RTC_OUTPUT_CLOCK_CAL_BEFORE = 0x080, /*!< output clock before calibration */ - BPR_RTC_OUTPUT_ALARM = 0x100, /*!< output alarm event with pluse mode */ - BPR_RTC_OUTPUT_SECOND = 0x300, /*!< output second event with pluse mode */ - BPR_RTC_OUTPUT_CLOCK_CAL_AFTER = 0x480, /*!< output clock after calibration */ - BPR_RTC_OUTPUT_ALARM_TOGGLE = 0x900, /*!< output alarm event with toggle mode */ - BPR_RTC_OUTPUT_SECOND_TOGGLE = 0xB00 /*!< output second event with toggle mode */ -} bpr_rtc_output_type; - -/** - * @brief tamper pin active level type - */ -typedef enum -{ - BPR_TAMPER_PIN_ACTIVE_HIGH = 0x00, /*!< tamper pin input active level is high */ - BPR_TAMPER_PIN_ACTIVE_LOW = 0x01 /*!< tamper pin input active level is low */ -} bpr_tamper_pin_active_level_type; - -/** - * @brief type define bpr register all - */ -typedef struct -{ - /** - * @brief reserved, offset:0x00 - */ - __IO uint32_t reserved1; - - /** - * @brief bpr dt1 register, offset:0x04 - */ - union - { - __IO uint32_t dt1; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt1_bit; - }; - - /** - * @brief bpr dt2 register, offset:0x08 - */ - union - { - __IO uint32_t dt2; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt2_bit; - }; - - /** - * @brief bpr dt3 register, offset:0x0C - */ - union - { - __IO uint32_t dt3; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt3_bit; - }; - - /** - * @brief bpr dt4 register, offset:0x10 - */ - union - { - __IO uint32_t dt4; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt4_bit; - }; - - /** - * @brief bpr dt5 register, offset:0x14 - */ - union - { - __IO uint32_t dt5; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt5_bit; - }; - - /** - * @brief bpr dt6 register, offset:0x18 - */ - union - { - __IO uint32_t dt6; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt6_bit; - }; - - /** - * @brief bpr dt7 register, offset:0x1C - */ - union - { - __IO uint32_t dt7; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt7_bit; - }; - - /** - * @brief bpr dt8 register, offset:0x20 - */ - union - { - __IO uint32_t dt8; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt8_bit; - }; - - /** - * @brief bpr dt9 register, offset:0x24 - */ - union - { - __IO uint32_t dt9; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt9_bit; - }; - - /** - * @brief bpr dt10 register, offset:0x28 - */ - union - { - __IO uint32_t dt10; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt10_bit; - }; - - /** - * @brief bpr rtccal register, offset:0x2C - */ - union - { - __IO uint32_t rtccal; - struct - { - __IO uint32_t calval : 7; /* [6:0] */ - __IO uint32_t calout : 1; /* [7] */ - __IO uint32_t outen : 1; /* [8] */ - __IO uint32_t outsel : 1; /* [9] */ - __IO uint32_t ccos : 1; /* [10] */ - __IO uint32_t outm : 1; /* [11] */ - __IO uint32_t reserved1 : 20;/* [31:12] */ - } rtccal_bit; - }; - - /** - * @brief bpr ctrl register, offset:0x30 - */ - union - { - __IO uint32_t ctrl; - struct - { - __IO uint32_t tpen : 1; /* [0] */ - __IO uint32_t tpp : 1; /* [1] */ - __IO uint32_t reserved1 : 30;/* [31:2] */ - } ctrl_bit; - }; - - /** - * @brief bpr ctrlsts register, offset:0x34 - */ - union - { - __IO uint32_t ctrlsts; - struct - { - __IO uint32_t tpefclr : 1;/* [0] */ - __IO uint32_t tpifclr : 1;/* [1] */ - __IO uint32_t tpien : 1;/* [2] */ - __IO uint32_t reserved1 : 5;/* [7:3] */ - __IO uint32_t tpef : 1;/* [8] */ - __IO uint32_t tpif : 1;/* [9] */ - __IO uint32_t reserved2 : 22;/* [31:10] */ - } ctrlsts_bit; - }; - - /** - * @brief reserved, offset:0x38 - */ - __IO uint32_t reserved2; - - /** - * @brief reserved, offset:0x3C - */ - __IO uint32_t reserved3; - - /** - * @brief bpr dt11 register, offset:0x40 - */ - union - { - __IO uint32_t dt11; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt11_bit; - }; - - /** - * @brief bpr dt12 register, offset:0x44 - */ - union - { - __IO uint32_t dt12; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt12_bit; - }; - - /** - * @brief bpr dt13 register, offset:0x48 - */ - union - { - __IO uint32_t dt13; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt13_bit; - }; - - /** - * @brief bpr dt14 register, offset:0x4C - */ - union - { - __IO uint32_t dt14; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt14_bit; - }; - - /** - * @brief bpr dt15 register, offset:0x50 - */ - union - { - __IO uint32_t dt15; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt15_bit; - }; - - /** - * @brief bpr dt16 register, offset:0x54 - */ - union - { - __IO uint32_t dt16; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt16_bit; - }; - - /** - * @brief bpr dt17 register, offset:0x58 - */ - union - { - __IO uint32_t dt17; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt17_bit; - }; - - /** - * @brief bpr dt18 register, offset:0x5C - */ - union - { - __IO uint32_t dt18; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt18_bit; - }; - - /** - * @brief bpr dt19 register, offset:0x60 - */ - union - { - __IO uint32_t dt19; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt19_bit; - }; - - /** - * @brief bpr dt20 register, offset:0x64 - */ - union - { - __IO uint32_t dt20; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt20_bit; - }; - - /** - * @brief bpr dt21 register, offset:0x68 - */ - union - { - __IO uint32_t dt21; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt21_bit; - }; - - /** - * @brief bpr dt22 register, offset:6C - */ - union - { - __IO uint32_t dt22; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt22_bit; - }; - - /** - * @brief bpr dt23 register, offset:0x70 - */ - union - { - __IO uint32_t dt23; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt23_bit; - }; - - /** - * @brief bpr dt24 register, offset:0x74 - */ - union - { - __IO uint32_t dt24; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt24_bit; - }; - - /** - * @brief bpr dt25 register, offset:0x78 - */ - union - { - __IO uint32_t dt25; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt25_bit; - }; - - /** - * @brief bpr dt26 register, offset:0x7C - */ - union - { - __IO uint32_t dt26; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt26_bit; - }; - - /** - * @brief bpr dt27 register, offset:0x80 - */ - union - { - __IO uint32_t dt27; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt27_bit; - }; - - /** - * @brief bpr dt28 register, offset:0x84 - */ - union - { - __IO uint32_t dt28; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt28_bit; - }; - - /** - * @brief bpr dt29 register, offset:0x88 - */ - union - { - __IO uint32_t dt29; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt29_bit; - }; - - /** - * @brief bpr dt30 register, offset:0x8C - */ - union - { - __IO uint32_t dt30; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt30_bit; - }; - - /** - * @brief bpr dt31 register, offset:0x90 - */ - union - { - __IO uint32_t dt31; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt31_bit; - }; - - /** - * @brief bpr dt32 register, offset:0x94 - */ - union - { - __IO uint32_t dt32; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt32_bit; - }; - - /** - * @brief bpr dt33 register, offset:0x98 - */ - union - { - __IO uint32_t dt33; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt33_bit; - }; - - /** - * @brief bpr dt34 register, offset:0x9C - */ - union - { - __IO uint32_t dt34; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt34_bit; - }; - - /** - * @brief bpr dt35 register, offset:0xA0 - */ - union - { - __IO uint32_t dt35; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt35_bit; - }; - - /** - * @brief bpr dt36 register, offset:0xA4 - */ - union - { - __IO uint32_t dt36; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt36_bit; - }; - - /** - * @brief bpr dt37 register, offset:0xA8 - */ - union - { - __IO uint32_t dt37; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt37_bit; - }; - - /** - * @brief bpr dt38 register, offset:0xAC - */ - union - { - __IO uint32_t dt38; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt38_bit; - }; - - /** - * @brief bpr dt39 register, offset:0xB0 - */ - union - { - __IO uint32_t dt39; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt39_bit; - }; - - /** - * @brief bpr dt40 register, offset:0xB4 - */ - union - { - __IO uint32_t dt40; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt40_bit; - }; - - /** - * @brief bpr dt41 register, offset:0xB8 - */ - union - { - __IO uint32_t dt41; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt41_bit; - }; - - /** - * @brief bpr dt42 register, offset:0xBC - */ - union - { - __IO uint32_t dt42; - struct - { - __IO uint32_t dt : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:15] */ - } dt42_bit; - }; -} bpr_type; - -/** - * @} - */ - -#define BPR ((bpr_type *) BPR_BASE) - -/** @defgroup BPR_exported_functions - * @{ - */ - -void bpr_reset(void); -flag_status bpr_flag_get(uint32_t flag); -void bpr_flag_clear(uint32_t flag); -void bpr_interrupt_enable(confirm_state new_state); -uint16_t bpr_data_read(bpr_data_type bpr_data); -void bpr_data_write(bpr_data_type bpr_data, uint16_t data_value); -void bpr_rtc_output_select(bpr_rtc_output_type output_source); -void bpr_rtc_clock_calibration_value_set(uint8_t calibration_value); -void bpr_tamper_pin_enable(confirm_state new_state); -void bpr_tamper_pin_active_level_set(bpr_tamper_pin_active_level_type active_level); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_can.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_can.h deleted file mode 100644 index 247dfff..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_can.h +++ /dev/null @@ -1,986 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_can.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 can header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_CAN_H -#define __AT32F403A_407_CAN_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup CAN - * @{ - */ - - -/** @defgroup CAN_timeout_count - * @{ - */ - -#define FZC_TIMEOUT ((uint32_t)0x0000FFFF) /*!< time out for fzc bit */ -#define DZC_TIMEOUT ((uint32_t)0x0000FFFF) /*!< time out for dzc bit */ - -/** - * @} - */ - -/** @defgroup CAN_flags_definition - * @brief can flag - * @{ - */ - -#define CAN_EAF_FLAG ((uint32_t)0x01) /*!< error active flag */ -#define CAN_EPF_FLAG ((uint32_t)0x02) /*!< error passive flag */ -#define CAN_BOF_FLAG ((uint32_t)0x03) /*!< bus-off flag */ -#define CAN_ETR_FLAG ((uint32_t)0x04) /*!< error type record flag */ -#define CAN_EOIF_FLAG ((uint32_t)0x05) /*!< error occur interrupt flag */ -#define CAN_TM0TCF_FLAG ((uint32_t)0x06) /*!< transmit mailbox 0 transmission completed flag */ -#define CAN_TM1TCF_FLAG ((uint32_t)0x07) /*!< transmit mailbox 1 transmission completed flag */ -#define CAN_TM2TCF_FLAG ((uint32_t)0x08) /*!< transmit mailbox 2 transmission completed flag */ -#define CAN_RF0MN_FLAG ((uint32_t)0x09) /*!< receive fifo 0 message num flag */ -#define CAN_RF0FF_FLAG ((uint32_t)0x0A) /*!< receive fifo 0 full flag */ -#define CAN_RF0OF_FLAG ((uint32_t)0x0B) /*!< receive fifo 0 overflow flag */ -#define CAN_RF1MN_FLAG ((uint32_t)0x0C) /*!< receive fifo 1 message num flag */ -#define CAN_RF1FF_FLAG ((uint32_t)0x0D) /*!< receive fifo 1 full flag */ -#define CAN_RF1OF_FLAG ((uint32_t)0x0E) /*!< receive fifo 1 overflow flag */ -#define CAN_QDZIF_FLAG ((uint32_t)0x0F) /*!< quit doze mode interrupt flag */ -#define CAN_EDZC_FLAG ((uint32_t)0x10) /*!< enter doze mode confirm flag */ -#define CAN_TMEF_FLAG ((uint32_t)0x11) /*!< transmit mailbox empty flag */ - -/** - * @} - */ - -/** @defgroup CAN_interrupts_definition - * @brief can interrupt - * @{ - */ - -#define CAN_TCIEN_INT ((uint32_t)0x00000001) /*!< transmission complete interrupt */ -#define CAN_RF0MIEN_INT ((uint32_t)0x00000002) /*!< receive fifo 0 message interrupt */ -#define CAN_RF0FIEN_INT ((uint32_t)0x00000004) /*!< receive fifo 0 full interrupt */ -#define CAN_RF0OIEN_INT ((uint32_t)0x00000008) /*!< receive fifo 0 overflow interrupt */ -#define CAN_RF1MIEN_INT ((uint32_t)0x00000010) /*!< receive fifo 1 message interrupt */ -#define CAN_RF1FIEN_INT ((uint32_t)0x00000020) /*!< receive fifo 1 full interrupt */ -#define CAN_RF1OIEN_INT ((uint32_t)0x00000040) /*!< receive fifo 1 overflow interrupt */ -#define CAN_EAIEN_INT ((uint32_t)0x00000100) /*!< error active interrupt */ -#define CAN_EPIEN_INT ((uint32_t)0x00000200) /*!< error passive interrupt */ -#define CAN_BOIEN_INT ((uint32_t)0x00000400) /*!< bus-off interrupt */ -#define CAN_ETRIEN_INT ((uint32_t)0x00000800) /*!< error type record interrupt */ -#define CAN_EOIEN_INT ((uint32_t)0x00008000) /*!< error occur interrupt */ -#define CAN_QDZIEN_INT ((uint32_t)0x00010000) /*!< quit doze mode interrupt */ -#define CAN_EDZIEN_INT ((uint32_t)0x00020000) /*!< enter doze mode confirm interrupt */ - -/** - * @} - */ - -/** - * @brief can flag clear operation macro definition val - */ -#define CAN_MSTS_EOIF_VAL ((uint32_t)0x00000004) /*!< eoif bit value, it clear by writing 1 */ -#define CAN_MSTS_QDZIF_VAL ((uint32_t)0x00000008) /*!< qdzif bit value, it clear by writing 1 */ -#define CAN_MSTS_EDZIF_VAL ((uint32_t)0x00000010) /*!< edzif bit value, it clear by writing 1 */ -#define CAN_TSTS_TM0TCF_VAL ((uint32_t)0x00000001) /*!< tm0tcf bit value, it clear by writing 1 */ -#define CAN_TSTS_TM1TCF_VAL ((uint32_t)0x00000100) /*!< tm1tcf bit value, it clear by writing 1 */ -#define CAN_TSTS_TM2TCF_VAL ((uint32_t)0x00010000) /*!< tm2tcf bit value, it clear by writing 1 */ -#define CAN_TSTS_TM0CT_VAL ((uint32_t)0x00000080) /*!< tm0ct bit value, it clear by writing 1 */ -#define CAN_TSTS_TM1CT_VAL ((uint32_t)0x00008000) /*!< tm1ct bit value, it clear by writing 1 */ -#define CAN_TSTS_TM2CT_VAL ((uint32_t)0x00800000) /*!< tm2ct bit value, it clear by writing 1 */ -#define CAN_RF0_RF0FF_VAL ((uint32_t)0x00000008) /*!< rf0ff bit value, it clear by writing 1 */ -#define CAN_RF0_RF0OF_VAL ((uint32_t)0x00000010) /*!< rf0of bit value, it clear by writing 1 */ -#define CAN_RF0_RF0R_VAL ((uint32_t)0x00000020) /*!< rf0r bit value, it clear by writing 1 */ -#define CAN_RF1_RF1FF_VAL ((uint32_t)0x00000008) /*!< rf1ff bit value, it clear by writing 1 */ -#define CAN_RF1_RF1OF_VAL ((uint32_t)0x00000010) /*!< rf1of bit value, it clear by writing 1 */ -#define CAN_RF1_RF1R_VAL ((uint32_t)0x00000020) /*!< rf1r bit value, it clear by writing 1 */ - -/** @defgroup CAN_exported_types - * @{ - */ - -/** - * @brief can filter fifo - */ -typedef enum -{ - CAN_FILTER_FIFO0 = 0x00, /*!< filter fifo 0 assignment for filter x */ - CAN_FILTER_FIFO1 = 0x01 /*!< filter fifo 1 assignment for filter x */ -} can_filter_fifo_type; - -/** - * @brief can filter mode - */ -typedef enum -{ - CAN_FILTER_MODE_ID_MASK = 0x00, /*!< identifier mask mode */ - CAN_FILTER_MODE_ID_LIST = 0x01 /*!< identifier list mode */ -} can_filter_mode_type; - -/** - * @brief can filter bit width select - */ -typedef enum -{ - CAN_FILTER_16BIT = 0x00, /*!< two 16-bit filters */ - CAN_FILTER_32BIT = 0x01 /*!< one 32-bit filter */ -} can_filter_bit_width_type; - -/** - * @brief can mode - */ -typedef enum -{ - CAN_MODE_COMMUNICATE = 0x00, /*!< communication mode */ - CAN_MODE_LOOPBACK = 0x01, /*!< loopback mode */ - CAN_MODE_LISTENONLY = 0x02, /*!< listen-only mode */ - CAN_MODE_LISTENONLY_LOOPBACK = 0x03 /*!< loopback combined with listen-only mode */ -} can_mode_type; - -/** - * @brief can operating mode - */ -typedef enum -{ - CAN_OPERATINGMODE_FREEZE = 0x00, /*!< freeze mode */ - CAN_OPERATINGMODE_DOZE = 0x01, /*!< doze mode */ - CAN_OPERATINGMODE_COMMUNICATE = 0x02 /*!< communication mode */ -} can_operating_mode_type; - -/** - * @brief can resynchronization adjust width - */ -typedef enum -{ - CAN_RSAW_1TQ = 0x00, /*!< 1 time quantum */ - CAN_RSAW_2TQ = 0x01, /*!< 2 time quantum */ - CAN_RSAW_3TQ = 0x02, /*!< 3 time quantum */ - CAN_RSAW_4TQ = 0x03 /*!< 4 time quantum */ -} can_rsaw_type; - -/** - * @brief can bit time segment 1 - */ -typedef enum -{ - CAN_BTS1_1TQ = 0x00, /*!< 1 time quantum */ - CAN_BTS1_2TQ = 0x01, /*!< 2 time quantum */ - CAN_BTS1_3TQ = 0x02, /*!< 3 time quantum */ - CAN_BTS1_4TQ = 0x03, /*!< 4 time quantum */ - CAN_BTS1_5TQ = 0x04, /*!< 5 time quantum */ - CAN_BTS1_6TQ = 0x05, /*!< 6 time quantum */ - CAN_BTS1_7TQ = 0x06, /*!< 7 time quantum */ - CAN_BTS1_8TQ = 0x07, /*!< 8 time quantum */ - CAN_BTS1_9TQ = 0x08, /*!< 9 time quantum */ - CAN_BTS1_10TQ = 0x09, /*!< 10 time quantum */ - CAN_BTS1_11TQ = 0x0A, /*!< 11 time quantum */ - CAN_BTS1_12TQ = 0x0B, /*!< 12 time quantum */ - CAN_BTS1_13TQ = 0x0C, /*!< 13 time quantum */ - CAN_BTS1_14TQ = 0x0D, /*!< 14 time quantum */ - CAN_BTS1_15TQ = 0x0E, /*!< 15 time quantum */ - CAN_BTS1_16TQ = 0x0F /*!< 16 time quantum */ -} can_bts1_type; - -/** - * @brief can bit time segment 2 - */ -typedef enum -{ - CAN_BTS2_1TQ = 0x00, /*!< 1 time quantum */ - CAN_BTS2_2TQ = 0x01, /*!< 2 time quantum */ - CAN_BTS2_3TQ = 0x02, /*!< 3 time quantum */ - CAN_BTS2_4TQ = 0x03, /*!< 4 time quantum */ - CAN_BTS2_5TQ = 0x04, /*!< 5 time quantum */ - CAN_BTS2_6TQ = 0x05, /*!< 6 time quantum */ - CAN_BTS2_7TQ = 0x06, /*!< 7 time quantum */ - CAN_BTS2_8TQ = 0x07 /*!< 8 time quantum */ -} can_bts2_type; - -/** - * @brief can identifier type - */ -typedef enum -{ - CAN_ID_STANDARD = 0x00, /*!< standard Id */ - CAN_ID_EXTENDED = 0x01 /*!< extended Id */ -} can_identifier_type; - -/** - * @brief can transmission frame type - */ -typedef enum -{ - CAN_TFT_DATA = 0x00, /*!< data frame */ - CAN_TFT_REMOTE = 0x01 /*!< remote frame */ -} can_trans_frame_type; - -/** - * @brief can tx mailboxes - */ -typedef enum -{ - CAN_TX_MAILBOX0 = 0x00, /*!< can tx mailbox 0 */ - CAN_TX_MAILBOX1 = 0x01, /*!< can tx mailbox 1 */ - CAN_TX_MAILBOX2 = 0x02 /*!< can tx mailbox 2 */ -} can_tx_mailbox_num_type; - -/** - * @brief can receive fifo - */ -typedef enum -{ - CAN_RX_FIFO0 = 0x00, /*!< can fifo 0 used to receive */ - CAN_RX_FIFO1 = 0x01 /*!< can fifo 1 used to receive */ -} can_rx_fifo_num_type; - -/** - * @brief can transmit status - */ -typedef enum -{ - CAN_TX_STATUS_FAILED = 0x00, /*!< can transmission failed */ - CAN_TX_STATUS_SUCCESSFUL = 0x01, /*!< can transmission successful */ - CAN_TX_STATUS_PENDING = 0x02, /*!< can transmission pending */ - CAN_TX_STATUS_NO_EMPTY = 0x04 /*!< can transmission no empty mailbox */ -} can_transmit_status_type; - -/** - * @brief can enter doze mode status - */ -typedef enum -{ - CAN_ENTER_DOZE_FAILED = 0x00, /*!< can enter the doze mode failed */ - CAN_ENTER_DOZE_SUCCESSFUL = 0x01 /*!< can enter the doze mode successful */ -} can_enter_doze_status_type; - -/** - * @brief can quit doze mode status - */ -typedef enum -{ - CAN_QUIT_DOZE_FAILED = 0x00, /*!< can quit doze mode failed */ - CAN_QUIT_DOZE_SUCCESSFUL = 0x01 /*!< can quit doze mode successful */ -} can_quit_doze_status_type; - -/** - * @brief can message discarding rule select when overflow - */ -typedef enum -{ - CAN_DISCARDING_FIRST_RECEIVED = 0x00, /*!< can discarding the first received message */ - CAN_DISCARDING_LAST_RECEIVED = 0x01 /*!< can discarding the last received message */ -} can_msg_discarding_rule_type; - -/** - * @brief can multiple message sending sequence rule - */ -typedef enum -{ - CAN_SENDING_BY_ID = 0x00, /*!< can sending the minimum id message first*/ - CAN_SENDING_BY_REQUEST = 0x01 /*!< can sending the first request message first */ -} can_msg_sending_rule_type; - -/** - * @brief can error type record - */ -typedef enum -{ - CAN_ERRORRECORD_NOERR = 0x00, /*!< no error */ - CAN_ERRORRECORD_STUFFERR = 0x01, /*!< stuff error */ - CAN_ERRORRECORD_FORMERR = 0x02, /*!< form error */ - CAN_ERRORRECORD_ACKERR = 0x03, /*!< acknowledgment error */ - CAN_ERRORRECORD_BITRECESSIVEERR = 0x04, /*!< bit recessive error */ - CAN_ERRORRECORD_BITDOMINANTERR = 0x05, /*!< bit dominant error */ - CAN_ERRORRECORD_CRCERR = 0x06, /*!< crc error */ - CAN_ERRORRECORD_SOFTWARESETERR = 0x07 /*!< software set error */ -} can_error_record_type; - -/** - * @brief can init structure definition - */ -typedef struct -{ - can_mode_type mode_selection; /*!< specifies the can mode.*/ - - confirm_state ttc_enable; /*!< time triggered communication mode enable */ - - confirm_state aebo_enable; /*!< automatic exit bus-off enable */ - - confirm_state aed_enable; /*!< automatic exit doze mode enable */ - - confirm_state prsf_enable; /*!< prohibit retransmission when sending fails enable */ - - can_msg_discarding_rule_type mdrsel_selection; /*!< message discarding rule select when overflow */ - - can_msg_sending_rule_type mmssr_selection; /*!< multiple message sending sequence rule */ - -} can_base_type; - -/** - * @brief can baudrate structure definition - */ -typedef struct -{ - uint16_t baudrate_div; /*!< baudrate division,this parameter can be 0x001~0x400.*/ - - can_rsaw_type rsaw_size; /*!< resynchronization adjust width */ - - can_bts1_type bts1_size; /*!< bit time segment 1 */ - - can_bts2_type bts2_size; /*!< bit time segment 2 */ - -} can_baudrate_type; - -/** - * @brief can filter init structure definition - */ -typedef struct -{ - confirm_state filter_activate_enable; /*!< enable or disable the filter activate.*/ - - can_filter_mode_type filter_mode; /*!< config the filter mode mask or list.*/ - - can_filter_fifo_type filter_fifo; /*!< config the fifo which will be assigned to the filter. */ - - uint8_t filter_number; /*!< config the filter number, parameter ranges from 0 to 13. */ - - can_filter_bit_width_type filter_bit; /*!< config the filter bit width 16bit or 32bit.*/ - - uint16_t filter_id_high; /*!< config the filter identification, for 32-bit configuration - it's high 16 bits, for 16-bit configuration it's first. */ - - uint16_t filter_id_low; /*!< config the filter identification, for 32-bit configuration - it's low 16 bits, for 16-bit configuration it's second. */ - - uint16_t filter_mask_high; /*!< config the filter mask or identification, according to the filtering mode, - for 32-bit configuration it's high 16 bits, for 16-bit configuration it's first. */ - - uint16_t filter_mask_low; /*!< config the filter mask or identification, according to the filtering mode, - for 32-bit configuration it's low 16 bits, for 16-bit configuration it's second. */ -} can_filter_init_type; - -/** - * @brief can tx message structure definition - */ -typedef struct -{ - uint32_t standard_id; /*!< specifies the 11 bits standard identifier. - this parameter can be a value between 0 to 0x7FF. */ - - uint32_t extended_id; /*!< specifies the 29 bits extended identifier. - this parameter can be a value between 0 to 0x1FFFFFFF. */ - - can_identifier_type id_type; /*!< specifies identifier type for the transmit message.*/ - - can_trans_frame_type frame_type; /*!< specifies frame type for the transmit message.*/ - - uint8_t dlc; /*!< specifies frame data length that will be transmitted. - this parameter can be a value between 0 to 8 */ - - uint8_t data[8]; /*!< contains the transmit data. it ranges from 0 to 0xFF. */ - -} can_tx_message_type; - -/** - * @brief can rx message structure definition - */ -typedef struct -{ - uint32_t standard_id; /*!< specifies the 11 bits standard identifier - this parameter can be a value between 0 to 0x7FF. */ - - uint32_t extended_id; /*!< specifies the 29 bits extended identifier. - this parameter can be a value between 0 to 0x1FFFFFFF. */ - - can_identifier_type id_type; /*!< specifies identifier type for the receive message.*/ - - can_trans_frame_type frame_type; /*!< specifies frame type for the receive message.*/ - - uint8_t dlc; /*!< specifies the frame data length that will be received. - this parameter can be a value between 0 to 8 */ - - uint8_t data[8]; /*!< contains the receive data. it ranges from 0 to 0xFF.*/ - - uint8_t filter_index; /*!< specifies the message stored in which filter - this parameter can be a value between 0 to 0xFF */ -} can_rx_message_type; - -/** - * @brief can controller area network tx mailbox - */ -typedef struct -{ - /** - * @brief can tmi register - */ - union - { - __IO uint32_t tmi; - struct - { - __IO uint32_t tmsr : 1; /* [0] */ - __IO uint32_t tmfrsel : 1; /* [1] */ - __IO uint32_t tmidsel : 1; /* [2] */ - __IO uint32_t tmeid : 18;/* [20:3] */ - __IO uint32_t tmsid : 11;/* [31:21] */ - } tmi_bit; - }; - - /** - * @brief can tmc register - */ - union - { - __IO uint32_t tmc; - struct - { - __IO uint32_t tmdtbl : 4; /* [3:0] */ - __IO uint32_t reserved1 : 4; /* [7:4] */ - __IO uint32_t tmtsten : 1; /* [8] */ - __IO uint32_t reserved2 : 7; /* [15:9] */ - __IO uint32_t tmts : 16;/* [31:16] */ - } tmc_bit; - }; - - /** - * @brief can tmdtl register - */ - union - { - __IO uint32_t tmdtl; - struct - { - __IO uint32_t tmdt0 : 8; /* [7:0] */ - __IO uint32_t tmdt1 : 8; /* [15:8] */ - __IO uint32_t tmdt2 : 8; /* [23:16] */ - __IO uint32_t tmdt3 : 8; /* [31:24] */ - } tmdtl_bit; - }; - - /** - * @brief can tmdth register - */ - union - { - __IO uint32_t tmdth; - struct - { - __IO uint32_t tmdt4 : 8; /* [7:0] */ - __IO uint32_t tmdt5 : 8; /* [15:8] */ - __IO uint32_t tmdt6 : 8; /* [23:16] */ - __IO uint32_t tmdt7 : 8; /* [31:24] */ - } tmdth_bit; - }; -} can_tx_mailbox_type; - -/** - * @brief can controller area network fifo mailbox - */ -typedef struct -{ - /** - * @brief can rfi register - */ - union - { - __IO uint32_t rfi; - struct - { - __IO uint32_t reserved1 : 1; /* [0] */ - __IO uint32_t rffri : 1; /* [1] */ - __IO uint32_t rfidi : 1; /* [2] */ - __IO uint32_t rfeid : 18;/* [20:3] */ - __IO uint32_t rfsid : 11;/* [31:21] */ - } rfi_bit; - }; - - /** - * @brief can rfc register - */ - union - { - __IO uint32_t rfc; - struct - { - __IO uint32_t rfdtl : 4; /* [3:0] */ - __IO uint32_t reserved1 : 4; /* [7:4] */ - __IO uint32_t rffmn : 8; /* [15:8] */ - __IO uint32_t rfts : 16;/* [31:16] */ - } rfc_bit; - }; - - /** - * @brief can rfdtl register - */ - union - { - __IO uint32_t rfdtl; - struct - { - __IO uint32_t rfdt0 : 8; /* [7:0] */ - __IO uint32_t rfdt1 : 8; /* [15:8] */ - __IO uint32_t rfdt2 : 8; /* [23:16] */ - __IO uint32_t rfdt3 : 8; /* [31:24] */ - } rfdtl_bit; - }; - - /** - * @brief can rfdth register - */ - union - { - __IO uint32_t rfdth; - struct - { - __IO uint32_t rfdt4 : 8; /* [7:0] */ - __IO uint32_t rfdt5 : 8; /* [15:8] */ - __IO uint32_t rfdt6 : 8; /* [23:16] */ - __IO uint32_t rfdt7 : 8; /* [31:24] */ - } rfdth_bit; - }; -} can_fifo_mailbox_type; - -/** - * @brief can controller area network filter bit register - */ -typedef struct -{ - __IO uint32_t ffdb1; - __IO uint32_t ffdb2; -} can_filter_register_type; - -/** - * @brief type define can register all - */ -typedef struct -{ - - /** - * @brief can mctrl register, offset:0x00 - */ - union - { - __IO uint32_t mctrl; - struct - { - __IO uint32_t fzen : 1; /* [0] */ - __IO uint32_t dzen : 1; /* [1] */ - __IO uint32_t mmssr : 1; /* [2] */ - __IO uint32_t mdrsel : 1; /* [3] */ - __IO uint32_t prsfen : 1; /* [4] */ - __IO uint32_t aeden : 1; /* [5] */ - __IO uint32_t aeboen : 1; /* [6] */ - __IO uint32_t ttcen : 1; /* [7] */ - __IO uint32_t reserved1 : 7; /* [14:8] */ - __IO uint32_t sprst : 1; /* [15] */ - __IO uint32_t ptd : 1; /* [16] */ - __IO uint32_t reserved2 : 15;/*[31:17] */ - } mctrl_bit; - }; - - /** - * @brief can msts register, offset:0x04 - */ - union - { - __IO uint32_t msts; - struct - { - __IO uint32_t fzc : 1; /* [0] */ - __IO uint32_t dzc : 1; /* [1] */ - __IO uint32_t eoif : 1; /* [2] */ - __IO uint32_t qdzif : 1; /* [3] */ - __IO uint32_t edzif : 1; /* [4] */ - __IO uint32_t reserved1 : 3; /* [7:5] */ - __IO uint32_t cuss : 1; /* [8] */ - __IO uint32_t curs : 1; /* [9] */ - __IO uint32_t lsamprx : 1; /* [10] */ - __IO uint32_t realrx : 1; /* [11] */ - __IO uint32_t reserved2 : 20;/*[31:12] */ - } msts_bit; - }; - - /** - * @brief can tsts register, offset:0x08 - */ - union - { - __IO uint32_t tsts; - struct - { - __IO uint32_t tm0tcf : 1; /* [0] */ - __IO uint32_t tm0tsf : 1; /* [1] */ - __IO uint32_t tm0alf : 1; /* [2] */ - __IO uint32_t tm0tef : 1; /* [3] */ - __IO uint32_t reserved1 : 3; /* [6:4] */ - __IO uint32_t tm0ct : 1; /* [7] */ - __IO uint32_t tm1tcf : 1; /* [8] */ - __IO uint32_t tm1tsf : 1; /* [9] */ - __IO uint32_t tm1alf : 1; /* [10] */ - __IO uint32_t tm1tef : 1; /* [11] */ - __IO uint32_t reserved2 : 3; /* [14:12] */ - __IO uint32_t tm1ct : 1; /* [15] */ - __IO uint32_t tm2tcf : 1; /* [16] */ - __IO uint32_t tm2tsf : 1; /* [17] */ - __IO uint32_t tm2alf : 1; /* [18] */ - __IO uint32_t tm2tef : 1; /* [19] */ - __IO uint32_t reserved3 : 3; /* [22:20] */ - __IO uint32_t tm2ct : 1; /* [23] */ - __IO uint32_t tmnr : 2; /* [25:24] */ - __IO uint32_t tm0ef : 1; /* [26] */ - __IO uint32_t tm1ef : 1; /* [27] */ - __IO uint32_t tm2ef : 1; /* [28] */ - __IO uint32_t tm0lpf : 1; /* [29] */ - __IO uint32_t tm1lpf : 1; /* [30] */ - __IO uint32_t tm2lpf : 1; /* [31] */ - } tsts_bit; - }; - - /** - * @brief can rf0 register, offset:0x0C - */ - union - { - __IO uint32_t rf0; - struct - { - __IO uint32_t rf0mn : 2; /* [1:0] */ - __IO uint32_t reserved1 : 1; /* [2] */ - __IO uint32_t rf0ff : 1; /* [3] */ - __IO uint32_t rf0of : 1; /* [4] */ - __IO uint32_t rf0r : 1; /* [5] */ - __IO uint32_t reserved2 : 26;/* [31:6] */ - } rf0_bit; - }; - - /** - * @brief can rf1 register, offset:0x10 - */ - union - { - __IO uint32_t rf1; - struct - { - __IO uint32_t rf1mn : 2; /* [1:0] */ - __IO uint32_t reserved1 : 1; /* [2] */ - __IO uint32_t rf1ff : 1; /* [3] */ - __IO uint32_t rf1of : 1; /* [4] */ - __IO uint32_t rf1r : 1; /* [5] */ - __IO uint32_t reserved2 : 26;/* [31:6] */ - } rf1_bit; - }; - - /** - * @brief can inten register, offset:0x14 - */ - union - { - __IO uint32_t inten; - struct - { - __IO uint32_t tcien : 1; /* [0] */ - __IO uint32_t rf0mien : 1; /* [1] */ - __IO uint32_t rf0fien : 1; /* [2] */ - __IO uint32_t rf0oien : 1; /* [3] */ - __IO uint32_t rf1mien : 1; /* [4] */ - __IO uint32_t rf1fien : 1; /* [5] */ - __IO uint32_t rf1oien : 1; /* [6] */ - __IO uint32_t reserved1 : 1; /* [7] */ - __IO uint32_t eaien : 1; /* [8] */ - __IO uint32_t epien : 1; /* [9] */ - __IO uint32_t boien : 1; /* [10] */ - __IO uint32_t etrien : 1; /* [11] */ - __IO uint32_t reserved2 : 3; /* [14:12] */ - __IO uint32_t eoien : 1; /* [15] */ - __IO uint32_t qdzien : 1; /* [16] */ - __IO uint32_t edzien : 1; /* [17] */ - __IO uint32_t reserved3 : 14;/* [31:18] */ - } inten_bit; - }; - - /** - * @brief can ests register, offset:0x18 - */ - union - { - __IO uint32_t ests; - struct - { - __IO uint32_t eaf : 1; /* [0] */ - __IO uint32_t epf : 1; /* [1] */ - __IO uint32_t bof : 1; /* [2] */ - __IO uint32_t reserved1 : 1; /* [3] */ - __IO uint32_t etr : 3; /* [6:4] */ - __IO uint32_t reserved2 : 9; /* [15:7] */ - __IO uint32_t tec : 8; /* [23:16] */ - __IO uint32_t rec : 8; /* [31:24] */ - } ests_bit; - }; - - /** - * @brief can btmg register, offset:0x1C - */ - union - { - __IO uint32_t btmg; - struct - { - __IO uint32_t brdiv : 12;/* [11:0] */ - __IO uint32_t reserved1 : 4; /* [15:12] */ - __IO uint32_t bts1 : 4; /* [19:16] */ - __IO uint32_t bts2 : 3; /* [22:20] */ - __IO uint32_t reserved2 : 1; /* [23] */ - __IO uint32_t rsaw : 2; /* [25:24] */ - __IO uint32_t reserved3 : 4; /* [29:26] */ - __IO uint32_t lben : 1; /* [30] */ - __IO uint32_t loen : 1; /* [31] */ - } btmg_bit; - }; - - /** - * @brief can reserved register, offset:0x20~0x17C - */ - __IO uint32_t reserved1[88]; - - /** - * @brief can controller area network tx mailbox register, offset:0x180~0x1AC - */ - can_tx_mailbox_type tx_mailbox[3]; - - /** - * @brief can controller area network fifo mailbox register, offset:0x1B0~0x1CC - */ - can_fifo_mailbox_type fifo_mailbox[2]; - - /** - * @brief can reserved register, offset:0x1D0~0x1FC - */ - __IO uint32_t reserved2[12]; - - /** - * @brief can fctrl register, offset:0x200 - */ - union - { - __IO uint32_t fctrl; - struct - { - __IO uint32_t fcs : 1; /* [0] */ - __IO uint32_t reserved1 : 31;/* [31:1] */ - } fctrl_bit; - }; - - /** - * @brief can fmcfg register, offset:0x204 - */ - union - { - __IO uint32_t fmcfg; - struct - { - __IO uint32_t fmsel0 : 1; /* [0] */ - __IO uint32_t fmsel1 : 1; /* [1] */ - __IO uint32_t fmsel2 : 1; /* [2] */ - __IO uint32_t fmsel3 : 1; /* [3] */ - __IO uint32_t fmsel4 : 1; /* [4] */ - __IO uint32_t fmsel5 : 1; /* [5] */ - __IO uint32_t fmsel6 : 1; /* [6] */ - __IO uint32_t fmsel7 : 1; /* [7] */ - __IO uint32_t fmsel8 : 1; /* [8] */ - __IO uint32_t fmsel9 : 1; /* [9] */ - __IO uint32_t fmsel10 : 1; /* [10] */ - __IO uint32_t fmsel11 : 1; /* [11] */ - __IO uint32_t fmsel12 : 1; /* [12] */ - __IO uint32_t fmsel13 : 1; /* [13] */ - __IO uint32_t reserved1 : 18;/* [31:14] */ - } fmcfg_bit; - }; - - /** - * @brief can reserved register, offset:0x208 - */ - __IO uint32_t reserved3; - - /** - * @brief can fbwcfg register, offset:0x20C - */ - union - { - __IO uint32_t fbwcfg; - struct - { - __IO uint32_t fbwsel0 : 1; /* [0] */ - __IO uint32_t fbwsel1 : 1; /* [1] */ - __IO uint32_t fbwsel2 : 1; /* [2] */ - __IO uint32_t fbwsel3 : 1; /* [3] */ - __IO uint32_t fbwsel4 : 1; /* [4] */ - __IO uint32_t fbwsel5 : 1; /* [5] */ - __IO uint32_t fbwsel6 : 1; /* [6] */ - __IO uint32_t fbwsel7 : 1; /* [7] */ - __IO uint32_t fbwsel8 : 1; /* [8] */ - __IO uint32_t fbwsel9 : 1; /* [9] */ - __IO uint32_t fbwsel10 : 1; /* [10] */ - __IO uint32_t fbwsel11 : 1; /* [11] */ - __IO uint32_t fbwsel12 : 1; /* [12] */ - __IO uint32_t fbwsel13 : 1; /* [13] */ - __IO uint32_t reserved1 : 18;/* [31:14] */ - } fbwcfg_bit; - }; - - /** - * @brief can reserved register, offset:0x210 - */ - __IO uint32_t reserved4; - - /** - * @brief can frf register, offset:0x214 - */ - union - { - __IO uint32_t frf; - struct - { - __IO uint32_t frfsel0 : 1; /* [0] */ - __IO uint32_t frfsel1 : 1; /* [1] */ - __IO uint32_t frfsel2 : 1; /* [2] */ - __IO uint32_t frfsel3 : 1; /* [3] */ - __IO uint32_t frfsel4 : 1; /* [4] */ - __IO uint32_t frfsel5 : 1; /* [5] */ - __IO uint32_t frfsel6 : 1; /* [6] */ - __IO uint32_t frfsel7 : 1; /* [7] */ - __IO uint32_t frfsel8 : 1; /* [8] */ - __IO uint32_t frfsel9 : 1; /* [9] */ - __IO uint32_t frfsel10 : 1; /* [10] */ - __IO uint32_t frfsel11 : 1; /* [11] */ - __IO uint32_t frfsel12 : 1; /* [12] */ - __IO uint32_t frfsel13 : 1; /* [13] */ - __IO uint32_t reserved1 : 18;/* [31:14] */ - } frf_bit; - }; - - /** - * @brief can reserved register, offset:0x218 - */ - __IO uint32_t reserved5; - - /** - * @brief can facfg register, offset:0x21C - */ - union - { - __IO uint32_t facfg; - struct - { - __IO uint32_t faen0 : 1; /* [0] */ - __IO uint32_t faen1 : 1; /* [1] */ - __IO uint32_t faen2 : 1; /* [2] */ - __IO uint32_t faen3 : 1; /* [3] */ - __IO uint32_t faen4 : 1; /* [4] */ - __IO uint32_t faen5 : 1; /* [5] */ - __IO uint32_t faen6 : 1; /* [6] */ - __IO uint32_t faen7 : 1; /* [7] */ - __IO uint32_t faen8 : 1; /* [8] */ - __IO uint32_t faen9 : 1; /* [9] */ - __IO uint32_t faen10 : 1; /* [10] */ - __IO uint32_t faen11 : 1; /* [11] */ - __IO uint32_t faen12 : 1; /* [12] */ - __IO uint32_t faen13 : 1; /* [13] */ - __IO uint32_t reserved1 : 18;/* [31:14] */ - } facfg_bit; - }; - - /** - * @brief can reserved register, offset:0x220~0x23C - */ - __IO uint32_t reserved6[8]; - - /** - * @brief can ffb register, offset:0x240~0x2AC - */ - can_filter_register_type ffb[14]; -} can_type; - -/** - * @} - */ - -#define CAN1 ((can_type *) CAN1_BASE) -#define CAN2 ((can_type *) CAN2_BASE) - -/** @defgroup CAN_exported_functions - * @{ - */ - -void can_reset(can_type* can_x); -void can_baudrate_default_para_init(can_baudrate_type* can_baudrate_struct); -error_status can_baudrate_set(can_type* can_x, can_baudrate_type* can_baudrate_struct); -void can_default_para_init(can_base_type* can_base_struct); -error_status can_base_init(can_type* can_x, can_base_type* can_base_struct); -void can_filter_default_para_init(can_filter_init_type* can_filter_init_struct); -void can_filter_init(can_type* can_x, can_filter_init_type* can_filter_init_struct); -void can_debug_transmission_prohibit(can_type* can_x, confirm_state new_state); -void can_ttc_mode_enable(can_type* can_x, confirm_state new_state); -uint8_t can_message_transmit(can_type* can_x, can_tx_message_type* tx_message_struct); -can_transmit_status_type can_transmit_status_get(can_type* can_x, can_tx_mailbox_num_type transmit_mailbox); -void can_transmit_cancel(can_type* can_x, can_tx_mailbox_num_type transmit_mailbox); -void can_message_receive(can_type* can_x, can_rx_fifo_num_type fifo_number, can_rx_message_type* rx_message_struct); -void can_receive_fifo_release(can_type* can_x, can_rx_fifo_num_type fifo_number); -uint8_t can_receive_message_pending_get(can_type* can_x, can_rx_fifo_num_type fifo_number); -error_status can_operating_mode_set(can_type* can_x, can_operating_mode_type can_operating_mode); -can_enter_doze_status_type can_doze_mode_enter(can_type* can_x); -can_quit_doze_status_type can_doze_mode_exit(can_type* can_x); -can_error_record_type can_error_type_record_get(can_type* can_x); -uint8_t can_receive_error_counter_get(can_type* can_x); -uint8_t can_transmit_error_counter_get(can_type* can_x); -void can_interrupt_enable(can_type* can_x, uint32_t can_int, confirm_state new_state); -flag_status can_flag_get(can_type* can_x, uint32_t can_flag); -void can_flag_clear(can_type* can_x, uint32_t can_flag); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_crc.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_crc.h deleted file mode 100644 index 99a8157..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_crc.h +++ /dev/null @@ -1,172 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_crc.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 crc header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_CRC_H -#define __AT32F403A_407_CRC_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup CRC - * @{ - */ - -/** @defgroup CRC_exported_types - * @{ - */ - -/** - * @brief crc reverse input data - */ -typedef enum -{ - CRC_REVERSE_INPUT_NO_AFFECTE = 0x00, /*!< input data no reverse */ - CRC_REVERSE_INPUT_BY_BYTE = 0x01, /*!< input data reverse by byte */ - CRC_REVERSE_INPUT_BY_HALFWORD = 0x02, /*!< input data reverse by half word */ - CRC_REVERSE_INPUT_BY_WORD = 0x03 /*!< input data reverse by word */ -} crc_reverse_input_type; - -/** - * @brief crc reverse output data - */ -typedef enum -{ - CRC_REVERSE_OUTPUT_NO_AFFECTE = 0x00, /*!< output data no reverse */ - CRC_REVERSE_OUTPUT_DATA = 0x01 /*!< output data reverse by word */ -} crc_reverse_output_type; - -/** - * @brief type define crc register all - */ -typedef struct -{ - /** - * @brief crc dt register, offset:0x00 - */ - union - { - __IO uint32_t dt; - struct - { - __IO uint32_t dt : 32; /* [31:0] */ - } dt_bit; - }; - - /** - * @brief crc cdt register, offset:0x04 - */ - union - { - __IO uint32_t cdt; - struct - { - __IO uint32_t cdt : 8 ; /* [7:0] */ - __IO uint32_t reserved1 : 24 ;/* [31:8] */ - } cdt_bit; - }; - - /** - * @brief crc ctrl register, offset:0x08 - */ - union - { - __IO uint32_t ctrl; - struct - { - __IO uint32_t rst : 1 ; /* [0] */ - __IO uint32_t reserved1 : 4 ; /* [4:1] */ - __IO uint32_t revid : 2 ; /* [6:5] */ - __IO uint32_t revod : 1 ; /* [7] */ - __IO uint32_t reserved2 : 24 ;/* [31:8] */ - } ctrl_bit; - }; - - /** - * @brief crm reserved1 register, offset:0x0C - */ - __IO uint32_t reserved1; - - /** - * @brief crc idt register, offset:0x10 - */ - union - { - __IO uint32_t idt; - struct - { - __IO uint32_t idt : 32; /* [31:0] */ - } idt_bit; - }; - -} crc_type; - -/** - * @} - */ - -#define CRC ((crc_type *) CRC_BASE) - -/** @defgroup CRC_exported_functions - * @{ - */ - -void crc_data_reset(void); -uint32_t crc_one_word_calculate(uint32_t data); -uint32_t crc_block_calculate(uint32_t *pbuffer, uint32_t length); -uint32_t crc_data_get(void); -void crc_common_data_set(uint8_t cdt_value); -uint8_t crc_common_date_get(void); -void crc_init_data_set(uint32_t value); -void crc_reverse_input_data_set(crc_reverse_input_type value); -void crc_reverse_output_data_set(crc_reverse_output_type value); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_crm.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_crm.h deleted file mode 100644 index eaaa59e..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_crm.h +++ /dev/null @@ -1,1142 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_crm.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 crm header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_CRM_H -#define __AT32F403A_407_CRM_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup CRM - * @{ - */ - -#define CRM_REG(value) PERIPH_REG(CRM_BASE, value) -#define CRM_REG_BIT(value) PERIPH_REG_BIT(value) - -/** @defgroup CRM_flags_definition - * @brief crm flag - * @{ - */ - -#define CRM_HICK_STABLE_FLAG MAKE_VALUE(0x00, 1) /*!< high speed internal clock stable flag */ -#define CRM_HEXT_STABLE_FLAG MAKE_VALUE(0x00, 17) /*!< high speed external crystal stable flag */ -#define CRM_PLL_STABLE_FLAG MAKE_VALUE(0x00, 25) /*!< phase locking loop stable flag */ -#define CRM_LEXT_STABLE_FLAG MAKE_VALUE(0x20, 1) /*!< low speed external crystal stable flag */ -#define CRM_LICK_STABLE_FLAG MAKE_VALUE(0x24, 1) /*!< low speed internal clock stable flag */ -#define CRM_ALL_RESET_FLAG MAKE_VALUE(0x24, 24) /*!< all reset flag */ -#define CRM_NRST_RESET_FLAG MAKE_VALUE(0x24, 26) /*!< nrst pin reset flag */ -#define CRM_POR_RESET_FLAG MAKE_VALUE(0x24, 27) /*!< power on reset flag */ -#define CRM_SW_RESET_FLAG MAKE_VALUE(0x24, 28) /*!< software reset flag */ -#define CRM_WDT_RESET_FLAG MAKE_VALUE(0x24, 29) /*!< watchdog timer reset flag */ -#define CRM_WWDT_RESET_FLAG MAKE_VALUE(0x24, 30) /*!< window watchdog timer reset flag */ -#define CRM_LOWPOWER_RESET_FLAG MAKE_VALUE(0x24, 31) /*!< low-power reset flag */ -#define CRM_LICK_READY_INT_FLAG MAKE_VALUE(0x08, 0) /*!< low speed internal clock stable interrupt ready flag */ -#define CRM_LEXT_READY_INT_FLAG MAKE_VALUE(0x08, 1) /*!< low speed external crystal stable interrupt ready flag */ -#define CRM_HICK_READY_INT_FLAG MAKE_VALUE(0x08, 2) /*!< high speed internal clock stable interrupt ready flag */ -#define CRM_HEXT_READY_INT_FLAG MAKE_VALUE(0x08, 3) /*!< high speed external crystal stable interrupt ready flag */ -#define CRM_PLL_READY_INT_FLAG MAKE_VALUE(0x08, 4) /*!< phase locking loop stable interrupt ready flag */ -#define CRM_CLOCK_FAILURE_INT_FLAG MAKE_VALUE(0x08, 7) /*!< clock failure interrupt ready flag */ - -/** - * @} - */ - -/** @defgroup CRM_interrupts_definition - * @brief crm interrupt - * @{ - */ - -#define CRM_LICK_STABLE_INT ((uint32_t)0x00000100) /*!< low speed internal clock stable interrupt */ -#define CRM_LEXT_STABLE_INT ((uint32_t)0x00000200) /*!< low speed external crystal stable interrupt */ -#define CRM_HICK_STABLE_INT ((uint32_t)0x00000400) /*!< high speed internal clock stable interrupt */ -#define CRM_HEXT_STABLE_INT ((uint32_t)0x00000800) /*!< high speed external crystal stable interrupt */ -#define CRM_PLL_STABLE_INT ((uint32_t)0x00001000) /*!< phase locking loop stable interrupt */ -#define CRM_CLOCK_FAILURE_INT ((uint32_t)0x00800000) /*!< clock failure interrupt */ - -/** - * @} - */ - -/** @defgroup CRM_exported_types - * @{ - */ - -/** - * @brief crm periph clock - */ -typedef enum -{ -#if defined (AT32F403Axx) - /* ahb periph */ - CRM_DMA1_PERIPH_CLOCK = MAKE_VALUE(0x14, 0), /*!< dma1 periph clock */ - CRM_DMA2_PERIPH_CLOCK = MAKE_VALUE(0x14, 1), /*!< dma2 periph clock */ - CRM_CRC_PERIPH_CLOCK = MAKE_VALUE(0x14, 6), /*!< crc periph clock */ - CRM_XMC_PERIPH_CLOCK = MAKE_VALUE(0x14, 8), /*!< xmc periph clock */ - CRM_SDIO1_PERIPH_CLOCK = MAKE_VALUE(0x14, 10), /*!< sdio1 periph clock */ - CRM_SDIO2_PERIPH_CLOCK = MAKE_VALUE(0x14, 11), /*!< sdio2 periph clock */ - /* apb2 periph */ - CRM_IOMUX_PERIPH_CLOCK = MAKE_VALUE(0x18, 0), /*!< iomux periph clock */ - CRM_GPIOA_PERIPH_CLOCK = MAKE_VALUE(0x18, 2), /*!< gpioa periph clock */ - CRM_GPIOB_PERIPH_CLOCK = MAKE_VALUE(0x18, 3), /*!< gpiob periph clock */ - CRM_GPIOC_PERIPH_CLOCK = MAKE_VALUE(0x18, 4), /*!< gpioc periph clock */ - CRM_GPIOD_PERIPH_CLOCK = MAKE_VALUE(0x18, 5), /*!< gpiod periph clock */ - CRM_GPIOE_PERIPH_CLOCK = MAKE_VALUE(0x18, 6), /*!< gpioe periph clock */ - CRM_ADC1_PERIPH_CLOCK = MAKE_VALUE(0x18, 9), /*!< adc1 periph clock */ - CRM_ADC2_PERIPH_CLOCK = MAKE_VALUE(0x18, 10), /*!< adc2 periph clock */ - CRM_TMR1_PERIPH_CLOCK = MAKE_VALUE(0x18, 11), /*!< tmr1 periph clock */ - CRM_SPI1_PERIPH_CLOCK = MAKE_VALUE(0x18, 12), /*!< spi1 periph clock */ - CRM_TMR8_PERIPH_CLOCK = MAKE_VALUE(0x18, 13), /*!< tmr8 periph clock */ - CRM_USART1_PERIPH_CLOCK = MAKE_VALUE(0x18, 14), /*!< usart1 periph clock */ - CRM_ADC3_PERIPH_CLOCK = MAKE_VALUE(0x18, 15), /*!< adc3 periph clock */ - CRM_TMR9_PERIPH_CLOCK = MAKE_VALUE(0x18, 19), /*!< tmr9 periph clock */ - CRM_TMR10_PERIPH_CLOCK = MAKE_VALUE(0x18, 20), /*!< tmr10 periph clock */ - CRM_TMR11_PERIPH_CLOCK = MAKE_VALUE(0x18, 21), /*!< tmr11 periph clock */ - CRM_ACC_PERIPH_CLOCK = MAKE_VALUE(0x18, 22), /*!< acc periph clock */ - CRM_I2C3_PERIPH_CLOCK = MAKE_VALUE(0x18, 23), /*!< i2c3 periph clock */ - CRM_USART6_PERIPH_CLOCK = MAKE_VALUE(0x18, 24), /*!< usart6 periph clock */ - CRM_UART7_PERIPH_CLOCK = MAKE_VALUE(0x18, 25), /*!< uart7 periph clock */ - CRM_UART8_PERIPH_CLOCK = MAKE_VALUE(0x18, 26), /*!< uart8 periph clock */ - /* apb1 periph */ - CRM_TMR2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 0), /*!< tmr2 periph clock */ - CRM_TMR3_PERIPH_CLOCK = MAKE_VALUE(0x1C, 1), /*!< tmr3 periph clock */ - CRM_TMR4_PERIPH_CLOCK = MAKE_VALUE(0x1C, 2), /*!< tmr4 periph clock */ - CRM_TMR5_PERIPH_CLOCK = MAKE_VALUE(0x1C, 3), /*!< tmr5 periph clock */ - CRM_TMR6_PERIPH_CLOCK = MAKE_VALUE(0x1C, 4), /*!< tmr6 periph clock */ - CRM_TMR7_PERIPH_CLOCK = MAKE_VALUE(0x1C, 5), /*!< tmr7 periph clock */ - CRM_TMR12_PERIPH_CLOCK = MAKE_VALUE(0x1C, 6), /*!< tmr12 periph clock */ - CRM_TMR13_PERIPH_CLOCK = MAKE_VALUE(0x1C, 7), /*!< tmr13 periph clock */ - CRM_TMR14_PERIPH_CLOCK = MAKE_VALUE(0x1C, 8), /*!< tmr14 periph clock */ - CRM_WWDT_PERIPH_CLOCK = MAKE_VALUE(0x1C, 11), /*!< wwdt periph clock */ - CRM_SPI2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 14), /*!< spi2 periph clock */ - CRM_SPI3_PERIPH_CLOCK = MAKE_VALUE(0x1C, 15), /*!< spi3 periph clock */ - CRM_SPI4_PERIPH_CLOCK = MAKE_VALUE(0x1C, 16), /*!< spi4 periph clock */ - CRM_USART2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 17), /*!< usart2 periph clock */ - CRM_USART3_PERIPH_CLOCK = MAKE_VALUE(0x1C, 18), /*!< usart3 periph clock */ - CRM_UART4_PERIPH_CLOCK = MAKE_VALUE(0x1C, 19), /*!< uart4 periph clock */ - CRM_UART5_PERIPH_CLOCK = MAKE_VALUE(0x1C, 20), /*!< uart5 periph clock */ - CRM_I2C1_PERIPH_CLOCK = MAKE_VALUE(0x1C, 21), /*!< i2c1 periph clock */ - CRM_I2C2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 22), /*!< i2c2 periph clock */ - CRM_USB_PERIPH_CLOCK = MAKE_VALUE(0x1C, 23), /*!< usb periph clock */ - CRM_CAN1_PERIPH_CLOCK = MAKE_VALUE(0x1C, 25), /*!< can1 periph clock */ - CRM_CAN2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 26), /*!< can2 periph clock */ - CRM_BPR_PERIPH_CLOCK = MAKE_VALUE(0x1C, 27), /*!< bpr periph clock */ - CRM_PWC_PERIPH_CLOCK = MAKE_VALUE(0x1C, 28), /*!< pwc periph clock */ - CRM_DAC_PERIPH_CLOCK = MAKE_VALUE(0x1C, 29) /*!< dac periph clock */ -#endif - -#if defined (AT32F407xx) - /* ahb periph */ - CRM_DMA1_PERIPH_CLOCK = MAKE_VALUE(0x14, 0), /*!< dma1 periph clock */ - CRM_DMA2_PERIPH_CLOCK = MAKE_VALUE(0x14, 1), /*!< dma2 periph clock */ - CRM_CRC_PERIPH_CLOCK = MAKE_VALUE(0x14, 6), /*!< crc periph clock */ - CRM_XMC_PERIPH_CLOCK = MAKE_VALUE(0x14, 8), /*!< xmc periph clock */ - CRM_SDIO1_PERIPH_CLOCK = MAKE_VALUE(0x14, 10), /*!< sdio1 periph clock */ - CRM_SDIO2_PERIPH_CLOCK = MAKE_VALUE(0x14, 11), /*!< sdio2 periph clock */ - CRM_EMAC_PERIPH_CLOCK = MAKE_VALUE(0x14, 14), /*!< emac periph clock */ - CRM_EMACTX_PERIPH_CLOCK = MAKE_VALUE(0x14, 15), /*!< emac tx periph clock */ - CRM_EMACRX_PERIPH_CLOCK = MAKE_VALUE(0x14, 16), /*!< emac rx periph clock */ - CRM_EMACPTP_PERIPH_CLOCK = MAKE_VALUE(0x14, 28), /*!< emac ptp periph clock */ - /* apb2 periph */ - CRM_IOMUX_PERIPH_CLOCK = MAKE_VALUE(0x18, 0), /*!< iomux periph clock */ - CRM_GPIOA_PERIPH_CLOCK = MAKE_VALUE(0x18, 2), /*!< gpioa periph clock */ - CRM_GPIOB_PERIPH_CLOCK = MAKE_VALUE(0x18, 3), /*!< gpiob periph clock */ - CRM_GPIOC_PERIPH_CLOCK = MAKE_VALUE(0x18, 4), /*!< gpioc periph clock */ - CRM_GPIOD_PERIPH_CLOCK = MAKE_VALUE(0x18, 5), /*!< gpiod periph clock */ - CRM_GPIOE_PERIPH_CLOCK = MAKE_VALUE(0x18, 6), /*!< gpioe periph clock */ - CRM_ADC1_PERIPH_CLOCK = MAKE_VALUE(0x18, 9), /*!< adc1 periph clock */ - CRM_ADC2_PERIPH_CLOCK = MAKE_VALUE(0x18, 10), /*!< adc2 periph clock */ - CRM_TMR1_PERIPH_CLOCK = MAKE_VALUE(0x18, 11), /*!< tmr1 periph clock */ - CRM_SPI1_PERIPH_CLOCK = MAKE_VALUE(0x18, 12), /*!< spi1 periph clock */ - CRM_TMR8_PERIPH_CLOCK = MAKE_VALUE(0x18, 13), /*!< tmr8 periph clock */ - CRM_USART1_PERIPH_CLOCK = MAKE_VALUE(0x18, 14), /*!< usart1 periph clock */ - CRM_ADC3_PERIPH_CLOCK = MAKE_VALUE(0x18, 15), /*!< adc3 periph clock */ - CRM_TMR9_PERIPH_CLOCK = MAKE_VALUE(0x18, 19), /*!< tmr9 periph clock */ - CRM_TMR10_PERIPH_CLOCK = MAKE_VALUE(0x18, 20), /*!< tmr10 periph clock */ - CRM_TMR11_PERIPH_CLOCK = MAKE_VALUE(0x18, 21), /*!< tmr11 periph clock */ - CRM_ACC_PERIPH_CLOCK = MAKE_VALUE(0x18, 22), /*!< acc periph clock */ - CRM_I2C3_PERIPH_CLOCK = MAKE_VALUE(0x18, 23), /*!< i2c3 periph clock */ - CRM_USART6_PERIPH_CLOCK = MAKE_VALUE(0x18, 24), /*!< usart6 periph clock */ - CRM_UART7_PERIPH_CLOCK = MAKE_VALUE(0x18, 25), /*!< uart7 periph clock */ - CRM_UART8_PERIPH_CLOCK = MAKE_VALUE(0x18, 26), /*!< uart8 periph clock */ - /* apb1 periph */ - CRM_TMR2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 0), /*!< tmr2 periph clock */ - CRM_TMR3_PERIPH_CLOCK = MAKE_VALUE(0x1C, 1), /*!< tmr3 periph clock */ - CRM_TMR4_PERIPH_CLOCK = MAKE_VALUE(0x1C, 2), /*!< tmr4 periph clock */ - CRM_TMR5_PERIPH_CLOCK = MAKE_VALUE(0x1C, 3), /*!< tmr5 periph clock */ - CRM_TMR6_PERIPH_CLOCK = MAKE_VALUE(0x1C, 4), /*!< tmr6 periph clock */ - CRM_TMR7_PERIPH_CLOCK = MAKE_VALUE(0x1C, 5), /*!< tmr7 periph clock */ - CRM_TMR12_PERIPH_CLOCK = MAKE_VALUE(0x1C, 6), /*!< tmr12 periph clock */ - CRM_TMR13_PERIPH_CLOCK = MAKE_VALUE(0x1C, 7), /*!< tmr13 periph clock */ - CRM_TMR14_PERIPH_CLOCK = MAKE_VALUE(0x1C, 8), /*!< tmr14 periph clock */ - CRM_WWDT_PERIPH_CLOCK = MAKE_VALUE(0x1C, 11), /*!< wwdt periph clock */ - CRM_SPI2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 14), /*!< spi2 periph clock */ - CRM_SPI3_PERIPH_CLOCK = MAKE_VALUE(0x1C, 15), /*!< spi3 periph clock */ - CRM_SPI4_PERIPH_CLOCK = MAKE_VALUE(0x1C, 16), /*!< spi4 periph clock */ - CRM_USART2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 17), /*!< usart2 periph clock */ - CRM_USART3_PERIPH_CLOCK = MAKE_VALUE(0x1C, 18), /*!< usart3 periph clock */ - CRM_UART4_PERIPH_CLOCK = MAKE_VALUE(0x1C, 19), /*!< uart4 periph clock */ - CRM_UART5_PERIPH_CLOCK = MAKE_VALUE(0x1C, 20), /*!< uart5 periph clock */ - CRM_I2C1_PERIPH_CLOCK = MAKE_VALUE(0x1C, 21), /*!< i2c1 periph clock */ - CRM_I2C2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 22), /*!< i2c2 periph clock */ - CRM_USB_PERIPH_CLOCK = MAKE_VALUE(0x1C, 23), /*!< usb periph clock */ - CRM_CAN1_PERIPH_CLOCK = MAKE_VALUE(0x1C, 25), /*!< can1 periph clock */ - CRM_CAN2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 26), /*!< can2 periph clock */ - CRM_BPR_PERIPH_CLOCK = MAKE_VALUE(0x1C, 27), /*!< bpr periph clock */ - CRM_PWC_PERIPH_CLOCK = MAKE_VALUE(0x1C, 28), /*!< pwc periph clock */ - CRM_DAC_PERIPH_CLOCK = MAKE_VALUE(0x1C, 29) /*!< dac periph clock */ -#endif - -} crm_periph_clock_type; - -/** - * @brief crm periph reset - */ -typedef enum -{ -#if defined (AT32F403Axx) - /* apb2 periph */ - CRM_IOMUX_PERIPH_RESET = MAKE_VALUE(0x0C, 0), /*!< iomux periph reset */ - CRM_EXINT_PERIPH_RESET = MAKE_VALUE(0x0C, 1), /*!< exint periph reset */ - CRM_GPIOA_PERIPH_RESET = MAKE_VALUE(0x0C, 2), /*!< gpioa periph reset */ - CRM_GPIOB_PERIPH_RESET = MAKE_VALUE(0x0C, 3), /*!< gpiob periph reset */ - CRM_GPIOC_PERIPH_RESET = MAKE_VALUE(0x0C, 4), /*!< gpioc periph reset */ - CRM_GPIOD_PERIPH_RESET = MAKE_VALUE(0x0C, 5), /*!< gpiod periph reset */ - CRM_GPIOE_PERIPH_RESET = MAKE_VALUE(0x0C, 6), /*!< gpioe periph reset */ - CRM_ADC1_PERIPH_RESET = MAKE_VALUE(0x0C, 9), /*!< adc1 periph reset */ - CRM_ADC2_PERIPH_RESET = MAKE_VALUE(0x0C, 10), /*!< adc2 periph reset */ - CRM_TMR1_PERIPH_RESET = MAKE_VALUE(0x0C, 11), /*!< tmr1 periph reset */ - CRM_SPI1_PERIPH_RESET = MAKE_VALUE(0x0C, 12), /*!< spi2 periph reset */ - CRM_TMR8_PERIPH_RESET = MAKE_VALUE(0x0C, 13), /*!< tmr8 periph reset */ - CRM_USART1_PERIPH_RESET = MAKE_VALUE(0x0C, 14), /*!< usart1 periph reset */ - CRM_ADC3_PERIPH_RESET = MAKE_VALUE(0x0C, 15), /*!< adc3 periph reset */ - CRM_TMR9_PERIPH_RESET = MAKE_VALUE(0x0C, 19), /*!< tmr9 periph reset */ - CRM_TMR10_PERIPH_RESET = MAKE_VALUE(0x0C, 20), /*!< tmr10 periph reset */ - CRM_TMR11_PERIPH_RESET = MAKE_VALUE(0x0C, 21), /*!< tmr11 periph reset */ - CRM_ACC_PERIPH_RESET = MAKE_VALUE(0x0C, 22), /*!< acc periph reset */ - CRM_I2C3_PERIPH_RESET = MAKE_VALUE(0x0C, 23), /*!< i2c3 periph reset */ - CRM_USART6_PERIPH_RESET = MAKE_VALUE(0x0C, 24), /*!< usart6 periph reset */ - CRM_UART7_PERIPH_RESET = MAKE_VALUE(0x0C, 25), /*!< uart7 periph reset */ - CRM_UART8_PERIPH_RESET = MAKE_VALUE(0x0C, 26), /*!< uart8 periph reset */ - /* apb1 periph */ - CRM_TMR2_PERIPH_RESET = MAKE_VALUE(0x10, 0), /*!< tmr2 periph reset */ - CRM_TMR3_PERIPH_RESET = MAKE_VALUE(0x10, 1), /*!< tmr3 periph reset */ - CRM_TMR4_PERIPH_RESET = MAKE_VALUE(0x10, 2), /*!< tmr4 periph reset */ - CRM_TMR5_PERIPH_RESET = MAKE_VALUE(0x10, 3), /*!< tmr5 periph reset */ - CRM_TMR6_PERIPH_RESET = MAKE_VALUE(0x10, 4), /*!< tmr6 periph reset */ - CRM_TMR7_PERIPH_RESET = MAKE_VALUE(0x10, 5), /*!< tmr7 periph reset */ - CRM_TMR12_PERIPH_RESET = MAKE_VALUE(0x10, 6), /*!< tmr12 periph reset */ - CRM_TMR13_PERIPH_RESET = MAKE_VALUE(0x10, 7), /*!< tmr13 periph reset */ - CRM_TMR14_PERIPH_RESET = MAKE_VALUE(0x10, 8), /*!< tmr14 periph reset */ - CRM_WWDT_PERIPH_RESET = MAKE_VALUE(0x10, 11), /*!< wwdt periph reset */ - CRM_SPI2_PERIPH_RESET = MAKE_VALUE(0x10, 14), /*!< spi2 periph reset */ - CRM_SPI3_PERIPH_RESET = MAKE_VALUE(0x10, 15), /*!< spi3 periph reset */ - CRM_SPI4_PERIPH_RESET = MAKE_VALUE(0x10, 16), /*!< spi4 periph reset */ - CRM_USART2_PERIPH_RESET = MAKE_VALUE(0x10, 17), /*!< usart2 periph reset */ - CRM_USART3_PERIPH_RESET = MAKE_VALUE(0x10, 18), /*!< usart3 periph reset */ - CRM_UART4_PERIPH_RESET = MAKE_VALUE(0x10, 19), /*!< uart4 periph reset */ - CRM_UART5_PERIPH_RESET = MAKE_VALUE(0x10, 20), /*!< uart5 periph reset */ - CRM_I2C1_PERIPH_RESET = MAKE_VALUE(0x10, 21), /*!< i2c1 periph reset */ - CRM_I2C2_PERIPH_RESET = MAKE_VALUE(0x10, 22), /*!< i2c2 periph reset */ - CRM_USB_PERIPH_RESET = MAKE_VALUE(0x10, 23), /*!< usb periph reset */ - CRM_CAN1_PERIPH_RESET = MAKE_VALUE(0x10, 25), /*!< can1 periph reset */ - CRM_CAN2_PERIPH_RESET = MAKE_VALUE(0x10, 26), /*!< can2 periph reset */ - CRM_BPR_PERIPH_RESET = MAKE_VALUE(0x10, 27), /*!< bpr periph reset */ - CRM_PWC_PERIPH_RESET = MAKE_VALUE(0x10, 28), /*!< pwc periph reset */ - CRM_DAC_PERIPH_RESET = MAKE_VALUE(0x10, 29) /*!< dac periph reset */ -#endif - -#if defined (AT32F407xx) - /* ahb periph */ - CRM_EMAC_PERIPH_RESET = MAKE_VALUE(0x28, 14), /*!< emac periph reset */ - /* apb2 periph */ - CRM_IOMUX_PERIPH_RESET = MAKE_VALUE(0x0C, 0), /*!< iomux periph reset */ - CRM_EXINT_PERIPH_RESET = MAKE_VALUE(0x0C, 1), /*!< exint periph reset */ - CRM_GPIOA_PERIPH_RESET = MAKE_VALUE(0x0C, 2), /*!< gpioa periph reset */ - CRM_GPIOB_PERIPH_RESET = MAKE_VALUE(0x0C, 3), /*!< gpiob periph reset */ - CRM_GPIOC_PERIPH_RESET = MAKE_VALUE(0x0C, 4), /*!< gpioc periph reset */ - CRM_GPIOD_PERIPH_RESET = MAKE_VALUE(0x0C, 5), /*!< gpiod periph reset */ - CRM_GPIOE_PERIPH_RESET = MAKE_VALUE(0x0C, 6), /*!< gpioe periph reset */ - CRM_ADC1_PERIPH_RESET = MAKE_VALUE(0x0C, 9), /*!< adc1 periph reset */ - CRM_ADC2_PERIPH_RESET = MAKE_VALUE(0x0C, 10), /*!< adc2 periph reset */ - CRM_TMR1_PERIPH_RESET = MAKE_VALUE(0x0C, 11), /*!< tmr1 periph reset */ - CRM_SPI1_PERIPH_RESET = MAKE_VALUE(0x0C, 12), /*!< spi2 periph reset */ - CRM_TMR8_PERIPH_RESET = MAKE_VALUE(0x0C, 13), /*!< tmr8 periph reset */ - CRM_USART1_PERIPH_RESET = MAKE_VALUE(0x0C, 14), /*!< usart1 periph reset */ - CRM_ADC3_PERIPH_RESET = MAKE_VALUE(0x0C, 15), /*!< adc3 periph reset */ - CRM_TMR9_PERIPH_RESET = MAKE_VALUE(0x0C, 19), /*!< tmr9 periph reset */ - CRM_TMR10_PERIPH_RESET = MAKE_VALUE(0x0C, 20), /*!< tmr10 periph reset */ - CRM_TMR11_PERIPH_RESET = MAKE_VALUE(0x0C, 21), /*!< tmr11 periph reset */ - CRM_ACC_PERIPH_RESET = MAKE_VALUE(0x0C, 22), /*!< acc periph reset */ - CRM_I2C3_PERIPH_RESET = MAKE_VALUE(0x0C, 23), /*!< i2c3 periph reset */ - CRM_USART6_PERIPH_RESET = MAKE_VALUE(0x0C, 24), /*!< usart6 periph reset */ - CRM_UART7_PERIPH_RESET = MAKE_VALUE(0x0C, 25), /*!< uart7 periph reset */ - CRM_UART8_PERIPH_RESET = MAKE_VALUE(0x0C, 26), /*!< uart8 periph reset */ - /* apb1 periph */ - CRM_TMR2_PERIPH_RESET = MAKE_VALUE(0x10, 0), /*!< tmr2 periph reset */ - CRM_TMR3_PERIPH_RESET = MAKE_VALUE(0x10, 1), /*!< tmr3 periph reset */ - CRM_TMR4_PERIPH_RESET = MAKE_VALUE(0x10, 2), /*!< tmr4 periph reset */ - CRM_TMR5_PERIPH_RESET = MAKE_VALUE(0x10, 3), /*!< tmr5 periph reset */ - CRM_TMR6_PERIPH_RESET = MAKE_VALUE(0x10, 4), /*!< tmr6 periph reset */ - CRM_TMR7_PERIPH_RESET = MAKE_VALUE(0x10, 5), /*!< tmr7 periph reset */ - CRM_TMR12_PERIPH_RESET = MAKE_VALUE(0x10, 6), /*!< tmr12 periph reset */ - CRM_TMR13_PERIPH_RESET = MAKE_VALUE(0x10, 7), /*!< tmr13 periph reset */ - CRM_TMR14_PERIPH_RESET = MAKE_VALUE(0x10, 8), /*!< tmr14 periph reset */ - CRM_WWDT_PERIPH_RESET = MAKE_VALUE(0x10, 11), /*!< wwdt periph reset */ - CRM_SPI2_PERIPH_RESET = MAKE_VALUE(0x10, 14), /*!< spi2 periph reset */ - CRM_SPI3_PERIPH_RESET = MAKE_VALUE(0x10, 15), /*!< spi3 periph reset */ - CRM_SPI4_PERIPH_RESET = MAKE_VALUE(0x10, 16), /*!< spi4 periph reset */ - CRM_USART2_PERIPH_RESET = MAKE_VALUE(0x10, 17), /*!< usart2 periph reset */ - CRM_USART3_PERIPH_RESET = MAKE_VALUE(0x10, 18), /*!< usart3 periph reset */ - CRM_UART4_PERIPH_RESET = MAKE_VALUE(0x10, 19), /*!< uart4 periph reset */ - CRM_UART5_PERIPH_RESET = MAKE_VALUE(0x10, 20), /*!< uart5 periph reset */ - CRM_I2C1_PERIPH_RESET = MAKE_VALUE(0x10, 21), /*!< i2c1 periph reset */ - CRM_I2C2_PERIPH_RESET = MAKE_VALUE(0x10, 22), /*!< i2c2 periph reset */ - CRM_USB_PERIPH_RESET = MAKE_VALUE(0x10, 23), /*!< usb periph reset */ - CRM_CAN1_PERIPH_RESET = MAKE_VALUE(0x10, 25), /*!< can1 periph reset */ - CRM_CAN2_PERIPH_RESET = MAKE_VALUE(0x10, 26), /*!< can2 periph reset */ - CRM_BPR_PERIPH_RESET = MAKE_VALUE(0x10, 27), /*!< bpr periph reset */ - CRM_PWC_PERIPH_RESET = MAKE_VALUE(0x10, 28), /*!< pwc periph reset */ - CRM_DAC_PERIPH_RESET = MAKE_VALUE(0x10, 29) /*!< dac periph reset */ -#endif - -} crm_periph_reset_type; - -/** - * @brief crm periph clock in sleep mode - */ -typedef enum -{ - /* ahb periph */ - CRM_SRAM_PERIPH_CLOCK_SLEEP_MODE = MAKE_VALUE(0x14, 2), /*!< sram sleep mode periph clock */ - CRM_FLASH_PERIPH_CLOCK_SLEEP_MODE = MAKE_VALUE(0x14, 4) /*!< flash sleep mode periph clock */ -} crm_periph_clock_sleepmd_type; - -/** - * @brief crm pll mult_x - */ -typedef enum -{ - CRM_PLL_MULT_2 = 0, /*!< pll multiplication factor 2 */ - CRM_PLL_MULT_3 = 1, /*!< pll multiplication factor 3 */ - CRM_PLL_MULT_4 = 2, /*!< pll multiplication factor 4 */ - CRM_PLL_MULT_5 = 3, /*!< pll multiplication factor 5 */ - CRM_PLL_MULT_6 = 4, /*!< pll multiplication factor 6 */ - CRM_PLL_MULT_7 = 5, /*!< pll multiplication factor 7 */ - CRM_PLL_MULT_8 = 6, /*!< pll multiplication factor 8 */ - CRM_PLL_MULT_9 = 7, /*!< pll multiplication factor 9 */ - CRM_PLL_MULT_10 = 8, /*!< pll multiplication factor 10 */ - CRM_PLL_MULT_11 = 9, /*!< pll multiplication factor 11 */ - CRM_PLL_MULT_12 = 10, /*!< pll multiplication factor 12 */ - CRM_PLL_MULT_13 = 11, /*!< pll multiplication factor 13 */ - CRM_PLL_MULT_14 = 12, /*!< pll multiplication factor 14 */ - CRM_PLL_MULT_15 = 13, /*!< pll multiplication factor 15 */ - CRM_PLL_MULT_16 = 15, /*!< pll multiplication factor 16 */ - CRM_PLL_MULT_17 = 16, /*!< pll multiplication factor 17 */ - CRM_PLL_MULT_18 = 17, /*!< pll multiplication factor 18 */ - CRM_PLL_MULT_19 = 18, /*!< pll multiplication factor 19 */ - CRM_PLL_MULT_20 = 19, /*!< pll multiplication factor 20 */ - CRM_PLL_MULT_21 = 20, /*!< pll multiplication factor 21 */ - CRM_PLL_MULT_22 = 21, /*!< pll multiplication factor 22 */ - CRM_PLL_MULT_23 = 22, /*!< pll multiplication factor 23 */ - CRM_PLL_MULT_24 = 23, /*!< pll multiplication factor 24 */ - CRM_PLL_MULT_25 = 24, /*!< pll multiplication factor 25 */ - CRM_PLL_MULT_26 = 25, /*!< pll multiplication factor 26 */ - CRM_PLL_MULT_27 = 26, /*!< pll multiplication factor 27 */ - CRM_PLL_MULT_28 = 27, /*!< pll multiplication factor 28 */ - CRM_PLL_MULT_29 = 28, /*!< pll multiplication factor 29 */ - CRM_PLL_MULT_30 = 29, /*!< pll multiplication factor 30 */ - CRM_PLL_MULT_31 = 30, /*!< pll multiplication factor 31 */ - CRM_PLL_MULT_32 = 31, /*!< pll multiplication factor 32 */ - CRM_PLL_MULT_33 = 32, /*!< pll multiplication factor 33 */ - CRM_PLL_MULT_34 = 33, /*!< pll multiplication factor 34 */ - CRM_PLL_MULT_35 = 34, /*!< pll multiplication factor 35 */ - CRM_PLL_MULT_36 = 35, /*!< pll multiplication factor 36 */ - CRM_PLL_MULT_37 = 36, /*!< pll multiplication factor 37 */ - CRM_PLL_MULT_38 = 37, /*!< pll multiplication factor 38 */ - CRM_PLL_MULT_39 = 38, /*!< pll multiplication factor 39 */ - CRM_PLL_MULT_40 = 39, /*!< pll multiplication factor 40 */ - CRM_PLL_MULT_41 = 40, /*!< pll multiplication factor 41 */ - CRM_PLL_MULT_42 = 41, /*!< pll multiplication factor 42 */ - CRM_PLL_MULT_43 = 42, /*!< pll multiplication factor 43 */ - CRM_PLL_MULT_44 = 43, /*!< pll multiplication factor 44 */ - CRM_PLL_MULT_45 = 44, /*!< pll multiplication factor 45 */ - CRM_PLL_MULT_46 = 45, /*!< pll multiplication factor 46 */ - CRM_PLL_MULT_47 = 46, /*!< pll multiplication factor 47 */ - CRM_PLL_MULT_48 = 47, /*!< pll multiplication factor 48 */ - CRM_PLL_MULT_49 = 48, /*!< pll multiplication factor 49 */ - CRM_PLL_MULT_50 = 49, /*!< pll multiplication factor 50 */ - CRM_PLL_MULT_51 = 50, /*!< pll multiplication factor 51 */ - CRM_PLL_MULT_52 = 51, /*!< pll multiplication factor 52 */ - CRM_PLL_MULT_53 = 52, /*!< pll multiplication factor 53 */ - CRM_PLL_MULT_54 = 53, /*!< pll multiplication factor 54 */ - CRM_PLL_MULT_55 = 54, /*!< pll multiplication factor 55 */ - CRM_PLL_MULT_56 = 55, /*!< pll multiplication factor 56 */ - CRM_PLL_MULT_57 = 56, /*!< pll multiplication factor 57 */ - CRM_PLL_MULT_58 = 57, /*!< pll multiplication factor 58 */ - CRM_PLL_MULT_59 = 58, /*!< pll multiplication factor 59 */ - CRM_PLL_MULT_60 = 59, /*!< pll multiplication factor 60 */ - CRM_PLL_MULT_61 = 60, /*!< pll multiplication factor 61 */ - CRM_PLL_MULT_62 = 61, /*!< pll multiplication factor 62 */ - CRM_PLL_MULT_63 = 62, /*!< pll multiplication factor 63 */ - CRM_PLL_MULT_64 = 63 /*!< pll multiplication factor 64 */ -} crm_pll_mult_type; - -/** - * @brief crm pll clock source - */ -typedef enum -{ - CRM_PLL_SOURCE_HICK = 0x00, /*!< high speed internal clock as pll reference clock source */ - CRM_PLL_SOURCE_HEXT = 0x01, /*!< high speed external crystal as pll reference clock source */ - CRM_PLL_SOURCE_HEXT_DIV = 0x02 /*!< high speed external crystal div as pll reference clock source */ -} crm_pll_clock_source_type; - -/** - * @brief crm pll clock output range - */ -typedef enum -{ - CRM_PLL_OUTPUT_RANGE_LE72MHZ = 0x00, /*!< pll clock output range less than or equal to 72mhz */ - CRM_PLL_OUTPUT_RANGE_GT72MHZ = 0x01 /*!< pll clock output range greater than 72mhz */ -} crm_pll_output_range_type; - -/** - * @brief crm clock source - */ -typedef enum -{ - CRM_CLOCK_SOURCE_HICK = 0x00, /*!< high speed internal clock */ - CRM_CLOCK_SOURCE_HEXT = 0x01, /*!< high speed external crystal */ - CRM_CLOCK_SOURCE_PLL = 0x02, /*!< phase locking loop */ - CRM_CLOCK_SOURCE_LEXT = 0x03, /*!< low speed external crystal */ - CRM_CLOCK_SOURCE_LICK = 0x04 /*!< low speed internal clock */ -} crm_clock_source_type; - -/** - * @brief crm ahb division - */ -typedef enum -{ - CRM_AHB_DIV_1 = 0x00, /*!< sclk div1 to ahbclk */ - CRM_AHB_DIV_2 = 0x08, /*!< sclk div2 to ahbclk */ - CRM_AHB_DIV_4 = 0x09, /*!< sclk div4 to ahbclk */ - CRM_AHB_DIV_8 = 0x0A, /*!< sclk div8 to ahbclk */ - CRM_AHB_DIV_16 = 0x0B, /*!< sclk div16 to ahbclk */ - CRM_AHB_DIV_64 = 0x0C, /*!< sclk div64 to ahbclk */ - CRM_AHB_DIV_128 = 0x0D, /*!< sclk div128 to ahbclk */ - CRM_AHB_DIV_256 = 0x0E, /*!< sclk div256 to ahbclk */ - CRM_AHB_DIV_512 = 0x0F /*!< sclk div512 to ahbclk */ -} crm_ahb_div_type; - -/** - * @brief crm apb1 division - */ -typedef enum -{ - CRM_APB1_DIV_1 = 0x00, /*!< ahbclk div1 to apb1clk */ - CRM_APB1_DIV_2 = 0x04, /*!< ahbclk div2 to apb1clk */ - CRM_APB1_DIV_4 = 0x05, /*!< ahbclk div4 to apb1clk */ - CRM_APB1_DIV_8 = 0x06, /*!< ahbclk div8 to apb1clk */ - CRM_APB1_DIV_16 = 0x07 /*!< ahbclk div16 to apb1clk */ -} crm_apb1_div_type; - -/** - * @brief crm apb2 division - */ -typedef enum -{ - CRM_APB2_DIV_1 = 0x00, /*!< ahbclk div1 to apb2clk */ - CRM_APB2_DIV_2 = 0x04, /*!< ahbclk div2 to apb2clk */ - CRM_APB2_DIV_4 = 0x05, /*!< ahbclk div4 to apb2clk */ - CRM_APB2_DIV_8 = 0x06, /*!< ahbclk div8 to apb2clk */ - CRM_APB2_DIV_16 = 0x07 /*!< ahbclk div16 to apb2clk */ -} crm_apb2_div_type; - -/** - * @brief crm adc division - */ -typedef enum -{ - CRM_ADC_DIV_2 = 0x00, /*!< apb2clk div2 to adcclk */ - CRM_ADC_DIV_4 = 0x01, /*!< apb2clk div4 to adcclk */ - CRM_ADC_DIV_6 = 0x02, /*!< apb2clk div6 to adcclk */ - CRM_ADC_DIV_8 = 0x03, /*!< apb2clk div8 to adcclk */ - CRM_ADC_DIV_12 = 0x05, /*!< apb2clk div12 to adcclk */ - CRM_ADC_DIV_16 = 0x07 /*!< apb2clk div16 to adcclk */ -} crm_adc_div_type; - -/** - * @brief crm usb division - */ -typedef enum -{ - CRM_USB_DIV_1_5 = 0x00, /*!< pllclk div1.5 to usbclk */ - CRM_USB_DIV_1 = 0x01, /*!< pllclk div1 to usbclk */ - CRM_USB_DIV_2_5 = 0x02, /*!< pllclk div2.5 to usbclk */ - CRM_USB_DIV_2 = 0x03, /*!< pllclk div2 to usbclk */ - CRM_USB_DIV_3_5 = 0x04, /*!< pllclk div3.5 to usbclk */ - CRM_USB_DIV_3 = 0x05, /*!< pllclk div3 to usbclk */ - CRM_USB_DIV_4 = 0x06 /*!< pllclk div4 to usbclk */ -} crm_usb_div_type; - -/** - * @brief crm rtc clock - */ -typedef enum -{ - CRM_RTC_CLOCK_NOCLK = 0x00, /*!< no clock as rtc clock source */ - CRM_RTC_CLOCK_LEXT = 0x01, /*!< low speed external crystal as rtc clock source */ - CRM_RTC_CLOCK_LICK = 0x02, /*!< low speed internal clock as rtc clock source */ - CRM_RTC_CLOCK_HEXT_DIV = 0x03 /*!< high speed external crystal div as rtc clock source */ -} crm_rtc_clock_type; - -/** - * @brief crm hick 48mhz division - */ -typedef enum -{ - CRM_HICK48_DIV6 = 0x00, /*!< high speed internal clock (48 mhz) div6 */ - CRM_HICK48_NODIV = 0x01 /*!< high speed internal clock (48 mhz) no div */ -} crm_hick_div_6_type; - -/** - * @brief crm hext division - */ -typedef enum -{ - CRM_HEXT_DIV_2 = 0x00, /*!< high speed external crystal div2 */ - CRM_HEXT_DIV_3 = 0x01, /*!< high speed external crystal div3 */ - CRM_HEXT_DIV_4 = 0x02, /*!< high speed external crystal div4 */ - CRM_HEXT_DIV_5 = 0x03 /*!< high speed external crystal div5 */ -} crm_hext_div_type; - -/** - * @brief crm sclk select - */ -typedef enum -{ - CRM_SCLK_HICK = 0x00, /*!< select high speed internal clock as sclk */ - CRM_SCLK_HEXT = 0x01, /*!< select high speed external crystal as sclk */ - CRM_SCLK_PLL = 0x02 /*!< select phase locking loop clock as sclk */ -} crm_sclk_type; - -/** - * @brief crm clkout select - */ -typedef enum -{ - CRM_CLKOUT_NOCLK = 0x00, /*!< output no clock to clkout pin */ - CRM_CLKOUT_LICK = 0x02, /*!< output low speed internal clock to clkout pin */ - CRM_CLKOUT_LEXT = 0x03, /*!< output low speed external crystal to clkout pin */ - CRM_CLKOUT_SCLK = 0x04, /*!< output system clock to clkout pin */ - CRM_CLKOUT_HICK = 0x05, /*!< output high speed internal clock to clkout pin */ - CRM_CLKOUT_HEXT = 0x06, /*!< output high speed external crystal to clkout pin */ - CRM_CLKOUT_PLL_DIV_2 = 0x07, /*!< output phase locking loop clock div2 to clkout pin */ - CRM_CLKOUT_PLL_DIV_4 = 0x0C, /*!< output phase locking loop clock div4 to clkout pin */ - CRM_CLKOUT_USB = 0x0D, /*!< output usbclk to clkout pin */ - CRM_CLKOUT_ADC = 0x0E /*!< output adcclk to clkout pin */ -} crm_clkout_select_type; - -/** - * @brief crm clkout division - */ -typedef enum -{ - CRM_CLKOUT_DIV_1 = 0x00, /*!< clkout div1 */ - CRM_CLKOUT_DIV_2 = 0x08, /*!< clkout div2 */ - CRM_CLKOUT_DIV_4 = 0x09, /*!< clkout div4 */ - CRM_CLKOUT_DIV_8 = 0x0A, /*!< clkout div8 */ - CRM_CLKOUT_DIV_16 = 0x0B, /*!< clkout div16 */ - CRM_CLKOUT_DIV_64 = 0x0C, /*!< clkout div64 */ - CRM_CLKOUT_DIV_128 = 0x0D, /*!< clkout div128 */ - CRM_CLKOUT_DIV_256 = 0x0E, /*!< clkout div256 */ - CRM_CLKOUT_DIV_512 = 0x0F /*!< clkout div512 */ -} crm_clkout_div_type; - -/** - * @brief crm auto step mode - */ -typedef enum -{ - CRM_AUTO_STEP_MODE_DISABLE = 0x00, /*!< disable auto step mode */ - CRM_AUTO_STEP_MODE_ENABLE = 0x03 /*!< enable auto step mode */ -} crm_auto_step_mode_type; - -/** - * @brief crm usbdev interrupt remap - */ -typedef enum -{ - CRM_USB_INT19_INT20 = 0x00, /*!< usb high and low priority irq numer use 19 and 20 */ - CRM_USB_INT73_INT74 = 0x01 /*!< usb high and low priority irq numer use 73 and 74 */ -} crm_usb_int_map_type; - -/** - * @brief crm usb 48 mhz clock source select - */ -typedef enum -{ - CRM_USB_CLOCK_SOURCE_PLL = 0x00, /*!< select phase locking loop clock as usb clock source */ - CRM_USB_CLOCK_SOURCE_HICK = 0x01 /*!< select high speed internal clock as usb clock source */ -} crm_usb_clock_source_type; - -/** - * @brief crm hick as system clock frequency select - */ -typedef enum -{ - CRM_HICK_SCLK_8MHZ = 0x00, /*!< fixed 8 mhz when hick is selected as sclk */ - CRM_HICK_SCLK_48MHZ = 0x01 /*!< 8 mhz or 48 mhz depend on hickdiv when hick is selected as sclk */ -} crm_hick_sclk_frequency_type; - -/** - * @brief crm emac output pulse width - */ -typedef enum -{ - CRM_EMAC_PULSE_125MS = 0x00, /*!< emac output pulse width 125ms */ - CRM_EMAC_PULSE_1SCLK = 0x01 /*!< emac output pulse width 1 system clock */ -} crm_emac_output_pulse_type; - -/** - * @brief crm clocks freqency structure - */ -typedef struct -{ - uint32_t sclk_freq; /*!< system clock frequency */ - uint32_t ahb_freq; /*!< ahb bus clock frequency */ - uint32_t apb2_freq; /*!< apb2 bus clock frequency */ - uint32_t apb1_freq; /*!< apb1 bus clock frequency */ - uint32_t adc_freq; /*!< adc clock frequency */ -} crm_clocks_freq_type; - -/** - * @brief type define crm register all - */ -typedef struct -{ - /** - * @brief crm ctrl register, offset:0x00 - */ - union - { - __IO uint32_t ctrl; - struct - { - __IO uint32_t hicken : 1; /* [0] */ - __IO uint32_t hickstbl : 1; /* [1] */ - __IO uint32_t hicktrim : 6; /* [7:2] */ - __IO uint32_t hickcal : 8; /* [15:8] */ - __IO uint32_t hexten : 1; /* [16] */ - __IO uint32_t hextstbl : 1; /* [17] */ - __IO uint32_t hextbyps : 1; /* [18] */ - __IO uint32_t cfden : 1; /* [19] */ - __IO uint32_t reserved1 : 4; /* [23:20] */ - __IO uint32_t pllen : 1; /* [24] */ - __IO uint32_t pllstbl : 1; /* [25] */ - __IO uint32_t reserved2 : 6; /* [31:26] */ - } ctrl_bit; - }; - - /** - * @brief crm cfg register, offset:0x04 - */ - union - { - __IO uint32_t cfg; - struct - { - __IO uint32_t sclksel : 2; /* [1:0] */ - __IO uint32_t sclksts : 2; /* [3:2] */ - __IO uint32_t ahbdiv : 4; /* [7:4] */ - __IO uint32_t apb1div : 3; /* [10:8] */ - __IO uint32_t apb2div : 3; /* [13:11] */ - __IO uint32_t adcdiv_l : 2; /* [15:14] */ - __IO uint32_t pllrcs : 1; /* [16] */ - __IO uint32_t pllhextdiv : 1; /* [17] */ - __IO uint32_t pllmult_l : 4; /* [21:18] */ - __IO uint32_t usbdiv_l : 2; /* [23:22] */ - __IO uint32_t clkout_sel : 3; /* [26:24] */ - __IO uint32_t usbdiv_h : 1; /* [27] */ - __IO uint32_t adcdiv_h : 1; /* [28] */ - __IO uint32_t pllmult_h : 2; /* [30:29] */ - __IO uint32_t pllrange : 1; /* [31] */ - } cfg_bit; - }; - - /** - * @brief crm clkint register, offset:0x08 - */ - union - { - __IO uint32_t clkint; - struct - { - __IO uint32_t lickstblf : 1; /* [0] */ - __IO uint32_t lextstblf : 1; /* [1] */ - __IO uint32_t hickstblf : 1; /* [2] */ - __IO uint32_t hextstblf : 1; /* [3] */ - __IO uint32_t pllstblf : 1; /* [4] */ - __IO uint32_t reserved1 : 2; /* [6:5] */ - __IO uint32_t cfdf : 1; /* [7] */ - __IO uint32_t lickstblien : 1; /* [8] */ - __IO uint32_t lextstblien : 1; /* [9] */ - __IO uint32_t hickstblien : 1; /* [10] */ - __IO uint32_t hextstblien : 1; /* [11] */ - __IO uint32_t pllstblien : 1; /* [12] */ - __IO uint32_t reserved2 : 3; /* [15:13] */ - __IO uint32_t lickstblfc : 1; /* [16] */ - __IO uint32_t lextstblfc : 1; /* [17] */ - __IO uint32_t hickstblfc : 1; /* [18] */ - __IO uint32_t hextstblfc : 1; /* [19] */ - __IO uint32_t pllstblfc : 1; /* [20] */ - __IO uint32_t reserved3 : 2; /* [22:21] */ - __IO uint32_t cfdfc : 1; /* [23] */ - __IO uint32_t reserved4 : 8; /* [31:24] */ - } clkint_bit; - }; - - /** - * @brief crm apb2rst register, offset:0x0C - */ - union - { - __IO uint32_t apb2rst; - struct - { - __IO uint32_t iomuxrst : 1; /* [0] */ - __IO uint32_t exintrst : 1; /* [1] */ - __IO uint32_t gpioarst : 1; /* [2] */ - __IO uint32_t gpiobrst : 1; /* [3] */ - __IO uint32_t gpiocrst : 1; /* [4] */ - __IO uint32_t gpiodrst : 1; /* [5] */ - __IO uint32_t gpioerst : 1; /* [6] */ - __IO uint32_t reserved1 : 2; /* [8:7] */ - __IO uint32_t adc1rst : 1; /* [9] */ - __IO uint32_t adc2rst : 1; /* [10] */ - __IO uint32_t tmr1rst : 1; /* [11] */ - __IO uint32_t spi1rst : 1; /* [12] */ - __IO uint32_t tmr8rst : 1; /* [13] */ - __IO uint32_t usart1rst : 1; /* [14] */ - __IO uint32_t adc3rst : 1; /* [15] */ - __IO uint32_t reserved2 : 3; /* [18:16] */ - __IO uint32_t tmr9rst : 1; /* [19] */ - __IO uint32_t tmr10rst : 1; /* [20] */ - __IO uint32_t tmr11rst : 1; /* [21] */ - __IO uint32_t accrst : 1; /* [22] */ - __IO uint32_t i2c3rst : 1; /* [23] */ - __IO uint32_t usart6rst : 1; /* [24] */ - __IO uint32_t uart7rst : 1; /* [25] */ - __IO uint32_t uart8rst : 1; /* [26] */ - __IO uint32_t reserved3 : 5; /* [31:27] */ - } apb2rst_bit; - }; - - /** - * @brief crm apb1rst register, offset:0x10 - */ - union - { - __IO uint32_t apb1rst; - struct - { - __IO uint32_t tmr2rst : 1; /* [0] */ - __IO uint32_t tmr3rst : 1; /* [1] */ - __IO uint32_t tmr4rst : 1; /* [2] */ - __IO uint32_t tmr5rst : 1; /* [3] */ - __IO uint32_t tmr6rst : 1; /* [4] */ - __IO uint32_t tmr7rst : 1; /* [5] */ - __IO uint32_t tmr12rst : 1; /* [6] */ - __IO uint32_t tmr13rst : 1; /* [7] */ - __IO uint32_t tmr14rst : 1; /* [8] */ - __IO uint32_t reserved1 : 2; /* [10:9] */ - __IO uint32_t wwdtrst : 1; /* [11] */ - __IO uint32_t reserved2 : 2; /* [13:12] */ - __IO uint32_t spi2rst : 1; /* [14] */ - __IO uint32_t spi3rst : 1; /* [15] */ - __IO uint32_t spi4rst : 1; /* [16] */ - __IO uint32_t usart2rst : 1; /* [17] */ - __IO uint32_t usart3rst : 1; /* [18] */ - __IO uint32_t uart4rst : 1; /* [19] */ - __IO uint32_t uart5rst : 1; /* [20] */ - __IO uint32_t i2c1rst : 1; /* [21] */ - __IO uint32_t i2c2rst : 1; /* [22] */ - __IO uint32_t usbrst : 1; /* [23] */ - __IO uint32_t reserved3 : 1; /* [24] */ - __IO uint32_t can1rst : 1; /* [25] */ - __IO uint32_t can2rst : 1; /* [26] */ - __IO uint32_t bprrst : 1; /* [27] */ - __IO uint32_t pwcrst : 1; /* [28] */ - __IO uint32_t dacrst : 1; /* [29] */ - __IO uint32_t reserved4 : 2; /* [31:30] */ - } apb1rst_bit; - }; - - /** - * @brief crm ahben register, offset:0x14 - */ - union - { - __IO uint32_t ahben; -#if defined (AT32F403Axx) - struct - { - __IO uint32_t dma1en : 1; /* [0] */ - __IO uint32_t dma2en : 1; /* [1] */ - __IO uint32_t sramen : 1; /* [2] */ - __IO uint32_t reserved1 : 1; /* [3] */ - __IO uint32_t flashen : 1; /* [4] */ - __IO uint32_t reserved2 : 1; /* [5] */ - __IO uint32_t crcen : 1; /* [6] */ - __IO uint32_t reserved3 : 1; /* [7] */ - __IO uint32_t xmcen : 1; /* [8] */ - __IO uint32_t reserved4 : 1; /* [9] */ - __IO uint32_t sdio1en : 1; /* [10] */ - __IO uint32_t sdio2en : 1; /* [11] */ - __IO uint32_t reserved5 : 20;/* [31:12] */ - } ahben_bit; -#endif -#if defined (AT32F407xx) - struct - { - __IO uint32_t dma1en : 1; /* [0] */ - __IO uint32_t dma2en : 1; /* [1] */ - __IO uint32_t sramen : 1; /* [2] */ - __IO uint32_t reserved1 : 1; /* [3] */ - __IO uint32_t flashen : 1; /* [4] */ - __IO uint32_t reserved2 : 1; /* [5] */ - __IO uint32_t crcen : 1; /* [6] */ - __IO uint32_t reserved3 : 1; /* [7] */ - __IO uint32_t xmcen : 1; /* [8] */ - __IO uint32_t reserved4 : 1; /* [9] */ - __IO uint32_t sdio1en : 1; /* [10] */ - __IO uint32_t sdio2en : 1; /* [11] */ - __IO uint32_t reserved5 : 2; /* [13:12] */ - __IO uint32_t emacen : 1; /* [14] */ - __IO uint32_t emactxen : 1; /* [15] */ - __IO uint32_t emacrxen : 1; /* [16] */ - __IO uint32_t reserved6 : 11;/* [27:17] */ - __IO uint32_t emacptpen : 1; /* [28] */ - __IO uint32_t reserved7 : 3; /* [31:29] */ - } ahben_bit; -#endif - }; - - /** - * @brief crm apb2en register, offset:0x18 - */ - union - { - __IO uint32_t apb2en; - struct - { - __IO uint32_t iomuxen : 1; /* [0] */ - __IO uint32_t reserved1 : 1; /* [1] */ - __IO uint32_t gpioaen : 1; /* [2] */ - __IO uint32_t gpioben : 1; /* [3] */ - __IO uint32_t gpiocen : 1; /* [4] */ - __IO uint32_t gpioden : 1; /* [5] */ - __IO uint32_t gpioeen : 1; /* [6] */ - __IO uint32_t reserved2 : 2; /* [8:7] */ - __IO uint32_t adc1en : 1; /* [9] */ - __IO uint32_t adc2en : 1; /* [10] */ - __IO uint32_t tmr1en : 1; /* [11] */ - __IO uint32_t spi1en : 1; /* [12] */ - __IO uint32_t tmr8en : 1; /* [13] */ - __IO uint32_t usart1en : 1; /* [14] */ - __IO uint32_t adc3en : 1; /* [15] */ - __IO uint32_t reserved3 : 3; /* [18:16] */ - __IO uint32_t tmr9en : 1; /* [19] */ - __IO uint32_t tmr10en : 1; /* [20] */ - __IO uint32_t tmr11en : 1; /* [21] */ - __IO uint32_t accen : 1; /* [22] */ - __IO uint32_t i2c3en : 1; /* [23] */ - __IO uint32_t usart6en : 1; /* [24] */ - __IO uint32_t uart7en : 1; /* [25] */ - __IO uint32_t uart8en : 1; /* [26] */ - __IO uint32_t reserved4 : 5; /* [31:27] */ - } apb2en_bit; - }; - - /** - * @brief crm apb1en register, offset:0x1C - */ - union - { - __IO uint32_t apb1en; - struct - { - __IO uint32_t tmr2en : 1; /* [0] */ - __IO uint32_t tmr3en : 1; /* [1] */ - __IO uint32_t tmr4en : 1; /* [2] */ - __IO uint32_t tmr5en : 1; /* [3] */ - __IO uint32_t tmr6en : 1; /* [4] */ - __IO uint32_t tmr7en : 1; /* [5] */ - __IO uint32_t tmr12en : 1; /* [6] */ - __IO uint32_t tmr13en : 1; /* [7] */ - __IO uint32_t tmr14en : 1; /* [8] */ - __IO uint32_t reserved1 : 2; /* [10:9] */ - __IO uint32_t wwdten : 1; /* [11] */ - __IO uint32_t reserved2 : 2; /* [13:12] */ - __IO uint32_t spi2en : 1; /* [14] */ - __IO uint32_t spi3en : 1; /* [15] */ - __IO uint32_t spi4en : 1; /* [16] */ - __IO uint32_t usart2en : 1; /* [17] */ - __IO uint32_t usart3en : 1; /* [18] */ - __IO uint32_t uart4en : 1; /* [19] */ - __IO uint32_t uart5en : 1; /* [20] */ - __IO uint32_t i2c1en : 1; /* [21] */ - __IO uint32_t i2c2en : 1; /* [22] */ - __IO uint32_t usben : 1; /* [23] */ - __IO uint32_t reserved3 : 1; /* [24] */ - __IO uint32_t can1en : 1; /* [25] */ - __IO uint32_t can2en : 1; /* [26] */ - __IO uint32_t bpren : 1; /* [27] */ - __IO uint32_t pwcen : 1; /* [28] */ - __IO uint32_t dacen : 1; /* [29] */ - __IO uint32_t reserved4 : 2; /* [31:30] */ - } apb1en_bit; - }; - - /** - * @brief crm bpdc register, offset:0x20 - */ - union - { - __IO uint32_t bpdc; - struct - { - __IO uint32_t lexten : 1; /* [0] */ - __IO uint32_t lextstbl : 1; /* [1] */ - __IO uint32_t lextbyps : 1; /* [2] */ - __IO uint32_t reserved1 : 5; /* [7:3] */ - __IO uint32_t rtcsel : 2; /* [9:8] */ - __IO uint32_t reserved2 : 5; /* [14:10] */ - __IO uint32_t rtcen : 1; /* [15] */ - __IO uint32_t bpdrst : 1; /* [16] */ - __IO uint32_t reserved3 : 15;/* [31:17] */ - } bpdc_bit; - }; - - /** - * @brief crm ctrlsts register, offset:0x24 - */ - union - { - __IO uint32_t ctrlsts; - struct - { - __IO uint32_t licken : 1; /* [0] */ - __IO uint32_t lickstbl : 1; /* [1] */ - __IO uint32_t reserved1 : 22;/* [23:2] */ - __IO uint32_t rstfc : 1; /* [24] */ - __IO uint32_t reserved2 : 1; /* [25] */ - __IO uint32_t nrstf : 1; /* [26] */ - __IO uint32_t porrstf : 1; /* [27] */ - __IO uint32_t swrstf : 1; /* [28] */ - __IO uint32_t wdtrstf : 1; /* [29] */ - __IO uint32_t wwdtrstf : 1; /* [30] */ - __IO uint32_t lprstf : 1; /* [31] */ - } ctrlsts_bit; - }; - - /** - * @brief crm ahbrst register, offset:0x28 - */ - union - { - __IO uint32_t ahbrst; -#if defined (AT32F407xx) - struct - { - __IO uint32_t reserved1 : 14;/* [13:0] */ - __IO uint32_t emacrst : 1; /* [14] */ - __IO uint32_t reserved2 : 17;/* [31:15] */ - } ahbrst_bit; -#endif - }; - - /** - * @brief crm reserved1 register, offset:0x2C - */ - __IO uint32_t reserved1; - - /** - * @brief crm misc1 register, offset:0x30 - */ - union - { - __IO uint32_t misc1; - struct - { - __IO uint32_t hickcal_key : 8; /* [7:0] */ - __IO uint32_t reserved1 : 8; /* [15:8] */ - __IO uint32_t clkout_sel : 1; /* [16] */ - __IO uint32_t reserved2 : 7; /* [23:17] */ - __IO uint32_t usbbufs : 1; /* [24] */ - __IO uint32_t hickdiv : 1; /* [25] */ - __IO uint32_t reserved3 : 2; /* [27:26] */ - __IO uint32_t clkoutdiv : 4; /* [31:28] */ - } misc1_bit; - }; - - /** - * @brief crm reserved2 register, offset:0x4C~0x34 - */ - __IO uint32_t reserved2[7]; - - /** - * @brief crm misc2 register, offset:0x50 - */ - union - { - __IO uint32_t misc2; - struct - { - __IO uint32_t reserved1 : 16;/* [15:0] */ - __IO uint32_t clk_to_tmr : 1; /* [16] */ - __IO uint32_t reserved2 : 15;/* [31:17] */ - } misc2_bit; - }; - - /** - * @brief crm misc3 register, offset:0x54 - */ - union - { - __IO uint32_t misc3; - struct - { - __IO uint32_t reserved1 : 4; /* [3:0] */ - __IO uint32_t auto_step_en : 2; /* [5:4] */ - __IO uint32_t reserved2 : 2; /* [7:6] */ - __IO uint32_t hick_to_usb : 1; /* [8] */ - __IO uint32_t hick_to_sclk : 1; /* [9] */ - __IO uint32_t reserved3 : 2; /* [11:10] */ - __IO uint32_t hextdiv : 2; /* [13:12] */ - __IO uint32_t reserved4 : 1; /* [14] */ - __IO uint32_t emac_pps_sel : 1; /* [15] */ - __IO uint32_t reserved5 : 16;/* [31:16] */ - } misc3_bit; - }; - - /** - * @brief crm reserved3 register, offset:0x58 - */ - __IO uint32_t reserved3; - - /** - * @brief crm intmap register, offset:0x5C - */ - union - { - __IO uint32_t intmap; - struct - { - __IO uint32_t usbintmap : 1; /* [0] */ - __IO uint32_t reserved1 : 31;/* [31:1] */ - } intmap_bit; - }; - -} crm_type; - -/** - * @} - */ - -#define CRM ((crm_type *) CRM_BASE) - -/** @defgroup CRM_exported_functions - * @{ - */ - -void crm_reset(void); -void crm_lext_bypass(confirm_state new_state); -void crm_hext_bypass(confirm_state new_state); -flag_status crm_flag_get(uint32_t flag); -error_status crm_hext_stable_wait(void); -void crm_hick_clock_trimming_set(uint8_t trim_value); -void crm_hick_clock_calibration_set(uint8_t cali_value); -void crm_periph_clock_enable(crm_periph_clock_type value, confirm_state new_state); -void crm_periph_reset(crm_periph_reset_type value, confirm_state new_state); -void crm_periph_sleep_mode_clock_enable(crm_periph_clock_sleepmd_type value, confirm_state new_state); -void crm_clock_source_enable(crm_clock_source_type source, confirm_state new_state); -void crm_flag_clear(uint32_t flag); -void crm_rtc_clock_select(crm_rtc_clock_type value); -void crm_rtc_clock_enable(confirm_state new_state); -void crm_ahb_div_set(crm_ahb_div_type value); -void crm_apb1_div_set(crm_apb1_div_type value); -void crm_apb2_div_set(crm_apb2_div_type value); -void crm_adc_clock_div_set(crm_adc_div_type div_value); -void crm_usb_clock_div_set(crm_usb_div_type div_value); -void crm_clock_failure_detection_enable(confirm_state new_state); -void crm_battery_powered_domain_reset(confirm_state new_state); -void crm_pll_config(crm_pll_clock_source_type clock_source, crm_pll_mult_type mult_value, crm_pll_output_range_type pll_range); -void crm_sysclk_switch(crm_sclk_type value); -crm_sclk_type crm_sysclk_switch_status_get(void); -void crm_clocks_freq_get(crm_clocks_freq_type *clocks_struct); -void crm_clock_out_set(crm_clkout_select_type clkout); -void crm_interrupt_enable(uint32_t crm_int, confirm_state new_state); -void crm_auto_step_mode_enable(confirm_state new_state); -void crm_usb_interrupt_remapping_set(crm_usb_int_map_type int_remap); -void crm_hick_divider_select(crm_hick_div_6_type value); -void crm_hick_sclk_frequency_select(crm_hick_sclk_frequency_type value); -void crm_usb_clock_source_select(crm_usb_clock_source_type value); -void crm_clkout_to_tmr10_enable(confirm_state new_state); -void crm_hext_clock_div_set(crm_hext_div_type value); -void crm_clkout_div_set(crm_clkout_div_type clkout_div); -#if defined (AT32F407xx) -void crm_emac_output_pulse_set(crm_emac_output_pulse_type width); -#endif - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_dac.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_dac.h deleted file mode 100644 index 6b80067..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_dac.h +++ /dev/null @@ -1,374 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_dac.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 dac header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_DAC_H -#define __AT32F403A_407_DAC_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup DAC - * @{ - */ - -#define DAC1_D1DMAUDRF ((uint32_t)(0x00002000)) -#define DAC2_D2DMAUDRF ((uint32_t)(0x20000000)) - -/** @defgroup DAC_exported_types - * @{ - */ - -/** - * @brief dac select type - */ -typedef enum -{ - DAC1_SELECT = 0x01, /*!< dac1 select */ - DAC2_SELECT = 0x02 /*!< dac2 select */ -} dac_select_type; - -/** - * @brief dac trigger type - */ -typedef enum -{ - DAC_TMR6_TRGOUT_EVENT = 0x00, /*!< dac trigger selection:timer6 trgout event */ - DAC_TMR8_TRGOUT_EVENT = 0x01, /*!< dac trigger selection:timer8 trgout event */ - DAC_TMR7_TRGOUT_EVENT = 0x02, /*!< dac trigger selection:timer7 trgout event */ - DAC_TMR5_TRGOUT_EVENT = 0x03, /*!< dac trigger selection:timer5 trgout event */ - DAC_TMR2_TRGOUT_EVENT = 0x04, /*!< dac trigger selection:timer2 trgout event */ - DAC_TMR4_TRGOUT_EVENT = 0x05, /*!< dac trigger selection:timer4 trgout event */ - DAC_EXTERNAL_INTERRUPT_LINE_9 = 0x06, /*!< dac trigger selection:external line9 */ - DAC_SOFTWARE_TRIGGER = 0x07 /*!< dac trigger selection:software trigger */ -} dac_trigger_type; - -/** - * @brief dac wave type - */ -typedef enum -{ - DAC_WAVE_GENERATE_NONE = 0x00, /*!< dac wave generation disabled */ - DAC_WAVE_GENERATE_NOISE = 0x01, /*!< dac noise wave generation enabled */ - DAC_WAVE_GENERATE_TRIANGLE = 0x02 /*!< dac triangle wave generation enabled */ -} dac_wave_type; - -/** - * @brief dac mask amplitude type - */ -typedef enum -{ - DAC_LSFR_BIT0_AMPLITUDE_1 = 0x00, /*!< unmask bit0/ triangle amplitude equal to 1 */ - DAC_LSFR_BIT10_AMPLITUDE_3 = 0x01, /*!< unmask bit[1:0]/ triangle amplitude equal to 3 */ - DAC_LSFR_BIT20_AMPLITUDE_7 = 0x02, /*!< unmask bit[2:0]/ triangle amplitude equal to 7 */ - DAC_LSFR_BIT30_AMPLITUDE_15 = 0x03, /*!< unmask bit[3:0]/ triangle amplitude equal to 15 */ - DAC_LSFR_BIT40_AMPLITUDE_31 = 0x04, /*!< unmask bit[4:0]/ triangle amplitude equal to 31 */ - DAC_LSFR_BIT50_AMPLITUDE_63 = 0x05, /*!< unmask bit[5:0]/ triangle amplitude equal to 63 */ - DAC_LSFR_BIT60_AMPLITUDE_127 = 0x06, /*!< unmask bit[6:0]/ triangle amplitude equal to 127 */ - DAC_LSFR_BIT70_AMPLITUDE_255 = 0x07, /*!< unmask bit[7:0]/ triangle amplitude equal to 255 */ - DAC_LSFR_BIT80_AMPLITUDE_511 = 0x08, /*!< unmask bit[8:0]/ triangle amplitude equal to 511 */ - DAC_LSFR_BIT90_AMPLITUDE_1023 = 0x09, /*!< unmask bit[9:0]/ triangle amplitude equal to 1023 */ - DAC_LSFR_BITA0_AMPLITUDE_2047 = 0x0A, /*!< unmask bit[10:0]/ triangle amplitude equal to 2047 */ - DAC_LSFR_BITB0_AMPLITUDE_4095 = 0x0B /*!< unmask bit[11:0]/ triangle amplitude equal to 4095 */ -} dac_mask_amplitude_type; - -/** - * @brief dac1 aligned data type - */ -typedef enum -{ - DAC1_12BIT_RIGHT = 0x40007408, /*!< dac1 12-bit data right-aligned */ - DAC1_12BIT_LEFT = 0x4000740C, /*!< dac1 12-bit data left-aligned */ - DAC1_8BIT_RIGHT = 0x40007410 /*!< dac1 8-bit data right-aligned */ -} dac1_aligned_data_type; - -/** - * @brief dac2 aligned data type - */ -typedef enum -{ - DAC2_12BIT_RIGHT = 0x40007414, /*!< dac2 12-bit data right-aligned */ - DAC2_12BIT_LEFT = 0x40007418, /*!< dac2 12-bit data left-aligned */ - DAC2_8BIT_RIGHT = 0x4000741C /*!< dac2 8-bit data right-aligned */ -} dac2_aligned_data_type; - -/** - * @brief dac dual data type - */ -typedef enum -{ - DAC_DUAL_12BIT_RIGHT = 0x40007420, /*!ept[ept_num]) & USB_TX_MASK; \ - if((new_sts & USB_TXDTS0) != 0) \ - epsts ^= USB_TXDTS0; \ - if((new_sts & USB_TXDTS1) != 0) \ - epsts ^= USB_TXDTS1; \ - USB->ept[ept_num] = epsts | USB_RXTC | USB_TXTC; \ -} - -/** - * @brief set usb endpoint rx status - * @param ept_num: endpoint number - * @param new_sts: the new rx status of this endpoint number - * @retval none - */ -#define USB_SET_RXSTS(ept_num, new_sts) { \ - register uint16_t epsts = (USB->ept[ept_num]) & USB_RX_MASK; \ - if((new_sts & USB_RXDTS0) != 0) \ - epsts ^= USB_RXDTS0; \ - if((new_sts & USB_RXDTS1) != 0) \ - epsts ^= USB_RXDTS1; \ - USB->ept[ept_num] = epsts | USB_RXTC | USB_TXTC; \ -} - -/** - * @brief get usb endpoint tx/rx length address - * @param eptn: endpoint number - * @retval the length address of tx/rx - */ -#define GET_TX_LEN_ADDR(eptn) (uint32_t *)((USB->buftbl + eptn * 8 + 2) * 2 + g_usb_packet_address) -#define GET_RX_LEN_ADDR(eptn) (uint32_t *)((USB->buftbl + eptn * 8 + 6) * 2 + g_usb_packet_address) - -/** - * @brief get usb endpoint tx/rx data length - * @param eptn: endpoint number - * @retval the length of tx/rx - */ -#define USB_GET_TX_LEN(eptn) ((uint16_t)(*GET_TX_LEN_ADDR(eptn)) & 0x3ff) -#define USB_GET_RX_LEN(eptn) ((uint16_t)(*GET_RX_LEN_ADDR(eptn)) & 0x3ff) - -/** - * @brief double buffer mode get endpoint buf0/buf1 data length - * @param eptn: endpoint number - * @retval the length of buf0/buf1 - */ -#define USB_DBUF0_GET_LEN(eptn) USB_GET_TX_LEN(eptn) -#define USB_DBUF1_GET_LEN(eptn) USB_GET_RX_LEN(eptn) - -/** - * @brief set usb length of rx buffer - * @param reg: usb rx length register - * @param len: rx max length - * @param blks: number of blocks - */ -#define BLK32(reg, len, blks) { \ - blks = (len) >> 5; \ - if(((len) & 0x1F) == 0) \ - blks --; \ - *reg = ((uint16_t)((blks) << 10) | 0x8000); \ -} - -#define BLK2(reg, len, blks) { \ - blks = (len) >> 1; \ - if(((len) & 0x1) == 0) \ - blks ++; \ - *reg = (uint16_t)((blks) << 10); \ -} - -#define USB_SET_RXLEN_REG(reg, len) { \ - uint16_t blks; \ - if(len > 62) \ - { \ - BLK32(reg, len, blks); \ - } \ - else \ - { \ - BLK2(reg, len, blks); \ - } \ -} - -/** - * @brief set endpoint tx/rx transfer length - * @param eptn: endpoint number - * @param len: transfer length - * @retval none - */ -#define USB_SET_TXLEN(eptn, len) (*(GET_TX_LEN_ADDR(eptn)) = (len)) -#define USB_SET_RXLEN(eptn, len) { \ - uint32_t *rx_reg = GET_RX_LEN_ADDR(eptn); \ - USB_SET_RXLEN_REG(rx_reg, (len)); \ -} - -/** - * @brief double buffer mode set endpoint rx buf0 length - * @param eptn: endpoint number - * @param len: transfer length - * @retval none - */ -#define USB_OUT_EPT_DOUBLE_BUF0(eptn, len) { \ - uint32_t *rx_reg = GET_TX_LEN_ADDR(eptn); \ - USB_SET_RXLEN_REG(rx_reg, (len)); \ -} - -/** - * @brief double buffer mode set endpoint buf0 length - * @param eptn: endpoint number - * @param len: transfer length - * @param dir: transfer direction(in/out) - * @retval none - */ -#define USB_SET_EPT_DOUBLE_BUF0_LEN(eptn, len, dir) { \ - if(dir == DATA_TRANS_OUT) \ - { \ - USB_OUT_EPT_DOUBLE_BUF0(eptn, len); \ - } \ - else \ - { \ - *(GET_TX_LEN_ADDR(eptn)) = (len); \ - } \ -} - -/** - * @brief double buffer mode set endpoint buf1 length - * @param eptn: endpoint number - * @param len: transfer length - * @param dir: transfer direction(in/out) - * @retval none - */ -#define USB_SET_EPT_DOUBLE_BUF1_LEN(eptn, len, dir) { \ - if(dir == DATA_TRANS_OUT) \ - { \ - USB_SET_RXLEN(eptn, len); \ - } \ - else \ - { \ - *(GET_RX_LEN_ADDR(eptn)) = (len); \ - } \ -} - -/** - * @brief set usb endpoint tx/rx fifo address - * @param eptn: endpoint number - * @param address: offset of the fifo address - * @retval none - */ -#define USB_SET_TX_ADDRESS(eptn, address) (*(uint32_t *)((USB->buftbl + eptn * 8) * 2 + g_usb_packet_address) = address) -#define USB_SET_RX_ADDRESS(eptn, address) (*(uint32_t *)((USB->buftbl + eptn * 8 + 4) * 2 + g_usb_packet_address) = address) - -/** - * @brief set double buffer mode usb endpoint buf0/buf1 fifo address - * @param eptn: endpoint number - * @param address: offset of the fifo address - * @retval none - */ -#define USB_SET_DOUBLE_BUFF0_ADDRESS(eptn, address) (USB_SET_TX_ADDRESS(eptn, address)) -#define USB_SET_DOUBLE_BUFF1_ADDRESS(eptn, address) (USB_SET_RX_ADDRESS(eptn, address)) - -/** - * @brief set usb tx/rx toggle - * @param eptn: endpoint number - * @retval none - */ -#define USB_TOGGLE_TXDTS(eptn) (USB->ept[eptn] = ((USB->ept[eptn] & USB_EPT_BIT_MASK) | USB_TXDTS | USB_RXTC | USB_TXTC)) -#define USB_TOGGLE_RXDTS(eptn) (USB->ept[eptn] = ((USB->ept[eptn] & USB_EPT_BIT_MASK) | USB_RXDTS | USB_RXTC | USB_TXTC)) - -/** - * @brief clear usb tx/rx toggle - * @param eptn: endpoint number - * @retval none - */ -#define USB_CLEAR_TXDTS(eptn) { \ - if(USB->ept_bit[eptn].txdts != 0) \ - USB_TOGGLE_TXDTS(eptn); \ -} -#define USB_CLEAR_RXDTS(eptn) { \ - if(USB->ept_bit[eptn].rxdts != 0) \ - USB_TOGGLE_RXDTS(eptn); \ -} - -/** - * @brief set usb endpoint type - */ - -/** - * @brief set usb transfer type - * @param eptn: endpoint number - * @param type: transfer type - * @retval none - */ -#define USB_SET_TRANS_TYPE(eptn, type) (USB->ept[eptn] = (USB->ept[eptn] & USB_EPT_BIT_MASK & (~USB_TRANS_TYPE)) | type) - -/** - * @brief set/clear usb extend function - * @param eptn: endpoint number - * @retval none - */ -#define USB_SET_EXF(eptn) (USB->ept[eptn] = USB_TXTC | USB_RXTC | ((USB->ept[eptn] | USB_EXF) & USB_EPT_BIT_MASK)) -#define USB_CLEAR_EXF(eptn) (USB->ept[eptn] = USB_TXTC | USB_RXTC | (USB->ept[eptn] & ((~USB_EXF) & USB_EPT_BIT_MASK))) - -/** - * @brief set usb device address - * @param eptn: endpoint number - * @param address: device address - * @retval none - */ -#define USB_SET_EPT_ADDRESS(eptn, address) (USB->ept[eptn] = ((USB->ept[eptn] & USB_EPT_BIT_MASK & (~USB_EPTADDR)) | address)) - -/** - * @brief free buffer used by application - * @param eptn: endpoint number - * @param inout: transfer direction - * @retval none - */ -#define USB_FREE_DB_USER_BUFFER(eptn, inout) { \ - if(inout == DATA_TRANS_IN) \ - { \ - USB_TOGGLE_RXDTS(eptn); \ - } \ - else \ - { \ - USB_TOGGLE_TXDTS(eptn); \ - } \ -} - -/** - * @brief clear tx/rx transfer completed flag - * @param eptn: endpoint number - * @retval none - */ -#define USB_CLEAR_TXTC(eptn) (USB->ept[eptn] &= 0xFF7F & USB_EPT_BIT_MASK) -#define USB_CLEAR_RXTC(eptn) (USB->ept[eptn] &= 0x7FFF & USB_EPT_BIT_MASK) - -/** - * @brief set/clear endpoint double buffer mode - * @param eptn: endpoint number - * @retval none - */ -#define USB_SET_EPT_DOUBLE_BUFFER(eptn) USB_SET_EXF(eptn) -#define USB_CLEAR_EPT_DOUBLE_BUFFER(eptn) USB_CLEAR_EXF(eptn) - -/** - * @} - */ - -/** @defgroup USB_exported_types - * @{ - */ - -/** - * @brief usb endpoint infomation structure definition - */ -typedef struct -{ - uint8_t eptn; /*!< endpoint register number (0~7) */ - uint8_t ept_address; /*!< endpoint address */ - uint8_t inout; /*!< endpoint dir DATA_TRANS_IN or DATA_TRANS_OUT */ - uint8_t trans_type; /*!< endpoint type: - EPT_CONTROL_TYPE, EPT_BULK_TYPE, EPT_INT_TYPE, EPT_ISO_TYPE*/ - uint16_t tx_addr; /*!< endpoint tx buffer offset address */ - uint16_t rx_addr; /*!< endpoint rx buffer offset address */ - uint16_t maxpacket; /*!< endpoint max packet*/ - uint8_t is_double_buffer; /*!< endpoint double buffer flag */ - uint8_t stall; /*!< endpoint is stall state */ - uint16_t status; /*!< endpoint status */ - - /* transmission buffer and count */ - uint16_t total_len; /*!< endpoint transmission total length */ - uint16_t trans_len; /*!< endpoint transmission length*/ - uint8_t *trans_buf; /*!< endpoint transmission buffer */ - - uint16_t last_len; /*!< last transfer length */ - uint16_t rem0_len; /*!< rem transfer length */ - uint16_t ept0_slen; /*!< endpoint 0 transfer sum length */ -}usb_ept_info; - -/** - * @brief type define usb register all - */ -typedef struct -{ - /** - * @brief usb endpoint register, offset:0x00 - */ - union - { - __IO uint32_t ept[8]; - struct - { - __IO uint32_t eptaddr : 4; /* [3:0] */ - __IO uint32_t txsts : 2; /* [5:4] */ - __IO uint32_t txdts : 1; /* [6] */ - __IO uint32_t txtc : 1; /* [7] */ - __IO uint32_t exf : 1; /* [8] */ - __IO uint32_t trans_type : 2; /* [10:9] */ - __IO uint32_t setuptc : 1; /* [11] */ - __IO uint32_t rxsts : 2; /* [13:12] */ - __IO uint32_t rxdts : 1; /* [14] */ - __IO uint32_t rxtc : 1; /* [15] */ - __IO uint32_t reserved1 : 16; /* [31:16] */ - } ept_bit[8]; - }; - - __IO uint32_t reserved1[8]; - - /** - * @brief usb control register, offset:0x40 - */ - union - { - __IO uint32_t ctrl; - struct - { - __IO uint32_t csrst : 1; /* [0] */ - __IO uint32_t disusb : 1; /* [1] */ - __IO uint32_t lpm : 1; /* [2] */ - __IO uint32_t ssp : 1; /* [3] */ - __IO uint32_t gresume : 1; /* [4] */ - __IO uint32_t reserved1 : 3; /* [7:5] */ - __IO uint32_t lsofien : 1; /* [8] */ - __IO uint32_t sofien : 1; /* [9] */ - __IO uint32_t rstien : 1; /* [10] */ - __IO uint32_t spien : 1; /* [11] */ - __IO uint32_t wkien : 1; /* [12] */ - __IO uint32_t beien : 1; /* [13] */ - __IO uint32_t ucforien : 1; /* [14] */ - __IO uint32_t tcien : 1; /* [15] */ - __IO uint32_t reserved2 : 16; /* [31:16] */ - } ctrl_bit; - }; - - /** - * @brief usb interrupt status register, offset:0x44 - */ - union - { - __IO uint32_t intsts; - struct - { - __IO uint32_t ept_num : 4; /* [3:0] */ - __IO uint32_t inout : 1; /* [4] */ - __IO uint32_t reserved1 : 3; /* [7:5] */ - __IO uint32_t lsof : 1; /* [8] */ - __IO uint32_t sof : 1; /* [9] */ - __IO uint32_t rst : 1; /* [10] */ - __IO uint32_t sp : 1; /* [11] */ - __IO uint32_t wk : 1; /* [12] */ - __IO uint32_t be : 1; /* [13] */ - __IO uint32_t ucfor : 1; /* [14] */ - __IO uint32_t tc : 1; /* [15] */ - __IO uint32_t reserved2 : 16; /* [31:16] */ - } intsts_bit; - }; - - /** - * @brief usb frame number register, offset:0x48 - */ - union - { - __IO uint32_t sofrnum; - struct - { - __IO uint32_t sofnum : 11; /* [10:0] */ - __IO uint32_t lsofnum : 2; /* [12:11] */ - __IO uint32_t clck : 1; /* [13] */ - __IO uint32_t dmsts : 1; /* [14] */ - __IO uint32_t dpsts : 1; /* [15] */ - __IO uint32_t reserved1 : 16; /* [31:16] */ - } sofrnum_bit; - }; - - /** - * @brief usb device address register, offset:0x4c - */ - union - { - __IO uint32_t devaddr; - struct - { - __IO uint32_t addr : 7; /* [6:0] */ - __IO uint32_t cen : 1; /* [7] */ - __IO uint32_t reserved1 : 24; /* [31:8] */ - } devaddr_bit; - }; - - /** - * @brief usb buffer address register, offset:0x50 - */ - union - { - __IO uint32_t buftbl; - struct - { - __IO uint32_t reserved1 : 3; /* [2:0] */ - __IO uint32_t btaddr : 13; /* [15:3] */ - __IO uint32_t reserved2 : 16; /* [31:16] */ - } buftbl_bit; - }; - __IO uint32_t reserved2[3]; - /** - * @brief usb cfg control register, offset:0x60 - */ - union - { - __IO uint32_t cfg; - struct - { - __IO uint32_t sofouten : 1; /* [0] */ - __IO uint32_t puo : 1; /* [1] */ - __IO uint32_t reserved1 : 30; /* [31:2] */ - } cfg_bit; - }; - -} usbd_type; - -/** - * @} - */ - -#define USB ((usbd_type *) USBFS_BASE) - -typedef usbd_type usb_reg_type; -extern uint32_t g_usb_packet_address; - -/** @defgroup USB_exported_functions - * @{ - */ - -void usb_dev_init(usbd_type *usbx); -void usb_connect(usbd_type *usbx); -void usb_disconnect(usbd_type *usbx); -void usb_usbbufs_enable(usbd_type *usbx, confirm_state state); -void usb_ept_open(usbd_type *usbx, usb_ept_info *ept_info); -void usb_ept_close(usbd_type *usbx, usb_ept_info *ept_info); -void usb_write_packet(uint8_t *pusr_buf, uint16_t offset_addr, uint16_t nbytes); -void usb_read_packet(uint8_t *pusr_buf, uint16_t offset_addr, uint16_t nbytes); -void usb_interrupt_enable(usbd_type *usbx, uint16_t interrupt, confirm_state new_state); -void usb_set_address(usbd_type *usbx, uint8_t address); -void usb_ept_stall(usbd_type *usbx, usb_ept_info *ept_info); -void usb_enter_suspend(usbd_type *usbx); -void usb_exit_suspend(usbd_type *usbx); -void usb_remote_wkup_set(usbd_type *usbx); -void usb_remote_wkup_clear(usbd_type *usbx); -uint16_t usb_buffer_malloc(uint16_t maxpacket); -void usb_buffer_free(void); -flag_status usb_flag_get(usbd_type *usbx, uint16_t flag); -void usb_flag_clear(usbd_type *usbx, uint16_t flag); - - -#ifdef __cplusplus -} -#endif - -#endif -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_wdt.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_wdt.h deleted file mode 100644 index f870840..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_wdt.h +++ /dev/null @@ -1,183 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_wdt.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 wdt header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_WDT_H -#define __AT32F403A_407_WDT_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup WDT - * @{ - */ - - -/** @defgroup WDT_flags_definition - * @brief wdt flag - * @{ - */ - -#define WDT_DIVF_UPDATE_FLAG ((uint16_t)0x0001) /*!< wdt division value update complete flag */ -#define WDT_RLDF_UPDATE_FLAG ((uint16_t)0x0002) /*!< wdt reload value update complete flag */ - -/** - * @} - */ - -/** @defgroup WDT_exported_types - * @{ - */ - -/** - * @brief wdt division value type - */ -typedef enum -{ - WDT_CLK_DIV_4 = 0x00, /*!< wdt clock divider value is 4 */ - WDT_CLK_DIV_8 = 0x01, /*!< wdt clock divider value is 8 */ - WDT_CLK_DIV_16 = 0x02, /*!< wdt clock divider value is 16 */ - WDT_CLK_DIV_32 = 0x03, /*!< wdt clock divider value is 32 */ - WDT_CLK_DIV_64 = 0x04, /*!< wdt clock divider value is 64 */ - WDT_CLK_DIV_128 = 0x05, /*!< wdt clock divider value is 128 */ - WDT_CLK_DIV_256 = 0x06 /*!< wdt clock divider value is 256 */ -} wdt_division_type; - -/** - * @brief wdt cmd value type - */ -typedef enum -{ - WDT_CMD_LOCK = 0x0000, /*!< disable write protection command */ - WDT_CMD_UNLOCK = 0x5555, /*!< enable write protection command */ - WDT_CMD_ENABLE = 0xCCCC, /*!< enable wdt command */ - WDT_CMD_RELOAD = 0xAAAA /*!< reload command */ -} wdt_cmd_value_type; - -/** - * @brief type define wdt register all - */ -typedef struct -{ - - /** - * @brief wdt cmd register, offset:0x00 - */ - union - { - __IO uint32_t cmd; - struct - { - __IO uint32_t cmd : 16;/* [15:0] */ - __IO uint32_t reserved1 : 16;/* [31:16] */ - } cmd_bit; - }; - - /** - * @brief wdt div register, offset:0x04 - */ - union - { - __IO uint32_t div; - struct - { - __IO uint32_t div : 3; /* [2:0] */ - __IO uint32_t reserved1 : 29;/* [31:3] */ - } div_bit; - }; - - /** - * @brief wdt rld register, offset:0x08 - */ - union - { - __IO uint32_t rld; - struct - { - __IO uint32_t rld : 12;/* [11:0] */ - __IO uint32_t reserved1 : 20;/* [31:12] */ - } rld_bit; - }; - - /** - * @brief wdt sts register, offset:0x0C - */ - union - { - __IO uint32_t sts; - struct - { - __IO uint32_t divf : 1; /* [0] */ - __IO uint32_t rldf : 1; /* [1] */ - __IO uint32_t reserved1 : 30;/* [31:2] */ - } sts_bit; - }; - -} wdt_type; - -/** - * @} - */ - -#define WDT ((wdt_type *) WDT_BASE) - -/** @defgroup WDT_exported_functions - * @{ - */ - -void wdt_enable(void); -void wdt_counter_reload(void); -void wdt_reload_value_set(uint16_t reload_value); -void wdt_divider_set(wdt_division_type division); -void wdt_register_write_enable( confirm_state new_state); -flag_status wdt_flag_get(uint16_t wdt_flag); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_wwdt.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_wwdt.h deleted file mode 100644 index 8c26c5a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_wwdt.h +++ /dev/null @@ -1,158 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_wwdt.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 wwdt header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_WWDT_H -#define __AT32F403A_407_WWDT_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup WWDT - * @{ - */ - -/** @defgroup WWDT_enable_bit_definition - * @brief wwdt enable bit - * @{ - */ - -#define WWDT_EN_BIT ((uint32_t)0x00000080) /*!< wwdt enable bit */ - -/** - * @} - */ - -/** @defgroup WWDT_exported_types - * @{ - */ - -/** - * @brief wwdt division type - */ -typedef enum -{ - WWDT_PCLK1_DIV_4096 = 0x00, /*!< wwdt counter clock = (pclk1/4096)/1) */ - WWDT_PCLK1_DIV_8192 = 0x01, /*!< wwdt counter clock = (pclk1/4096)/2) */ - WWDT_PCLK1_DIV_16384 = 0x02, /*!< wwdt counter clock = (pclk1/4096)/4) */ - WWDT_PCLK1_DIV_32768 = 0x03 /*!< wwdt counter clock = (pclk1/4096)/8) */ -} wwdt_division_type; - -/** - * @brief type define wwdt register all - */ -typedef struct -{ - - /** - * @brief wwdt ctrl register, offset:0x00 - */ - union - { - __IO uint32_t ctrl; - struct - { - __IO uint32_t cnt : 7; /* [6:0] */ - __IO uint32_t wwdten : 1; /* [7] */ - __IO uint32_t reserved1 : 24;/* [31:8] */ - } ctrl_bit; - }; - - /** - * @brief wwdt cfg register, offset:0x04 - */ - union - { - __IO uint32_t cfg; - struct - { - __IO uint32_t win : 7; /* [6:0] */ - __IO uint32_t div : 2; /* [8:7] */ - __IO uint32_t rldien : 1; /* [9] */ - __IO uint32_t reserved1 : 22;/* [31:10] */ - } cfg_bit; - }; - - /** - * @brief wwdt cfg register, offset:0x08 - */ - union - { - __IO uint32_t sts; - struct - { - __IO uint32_t rldf : 1; /* [0] */ - __IO uint32_t reserved1 : 31;/* [31:1] */ - } sts_bit; - }; - -} wwdt_type; - -/** - * @} - */ - -#define WWDT ((wwdt_type *) WWDT_BASE) - -/** @defgroup WWDT_exported_functions - * @{ - */ - -void wwdt_reset(void); -void wwdt_divider_set(wwdt_division_type division); -void wwdt_flag_clear(void); -void wwdt_enable(uint8_t wwdt_cnt); -void wwdt_interrupt_enable(void); -flag_status wwdt_flag_get(void); -void wwdt_counter_set(uint8_t wwdt_cnt); -void wwdt_window_counter_set(uint8_t window_cnt); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_xmc.h b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_xmc.h deleted file mode 100644 index 67d2645..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/inc/at32f403a_407_xmc.h +++ /dev/null @@ -1,568 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_xmc.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 xmc header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_XMC_H -#define __AT32F403A_407_XMC_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @addtogroup XMC - * @{ - */ - -/** @defgroup XMC_exported_types - * @{ - */ - -/** - * @brief xmc data address bus multiplexing type - */ -typedef enum -{ - XMC_DATA_ADDR_MUX_DISABLE = 0x00000000, /*!< xmc address/data multiplexing disable */ - XMC_DATA_ADDR_MUX_ENABLE = 0x00000002 /*!< xmc address/data multiplexing enable */ -} xmc_data_addr_mux_type; - -/** - * @brief xmc burst access mode type - */ -typedef enum -{ - XMC_BURST_MODE_DISABLE = 0x00000000, /*!< xmc burst mode disable */ - XMC_BURST_MODE_ENABLE = 0x00000100 /*!< xmc burst mode enable */ -} xmc_burst_access_mode_type; - -/** - * @brief xmc asynchronous wait type - */ -typedef enum -{ - XMC_ASYN_WAIT_DISABLE = 0x00000000, /*!< xmc wait signal during asynchronous transfers disbale */ - XMC_ASYN_WAIT_ENABLE = 0x00008000 /*!< xmc wait signal during asynchronous transfers enable */ -} xmc_asyn_wait_type; - -/** - * @brief xmc wrapped mode type - */ -typedef enum -{ - XMC_WRAPPED_MODE_DISABLE = 0x00000000, /*!< xmc direct wrapped burst is disbale */ - XMC_WRAPPED_MODE_ENABLE = 0x00000400 /*!< xmc direct wrapped burst is enable */ -} xmc_wrap_mode_type; - -/** - * @brief xmc write operation type - */ -typedef enum -{ - XMC_WRITE_OPERATION_DISABLE = 0x00000000, /*!< xmc write operations is disable */ - XMC_WRITE_OPERATION_ENABLE = 0x00001000 /*!< xmc write operations is enable */ -} xmc_write_operation_type; - -/** - * @brief xmc wait signal type - */ -typedef enum -{ - XMC_WAIT_SIGNAL_DISABLE = 0x00000000, /*!< xmc nwait signal is disable */ - XMC_WAIT_SIGNAL_ENABLE = 0x00002000 /*!< xmc nwait signal is enable */ -} xmc_wait_signal_type; - -/** - * @brief xmc write burst type - */ -typedef enum -{ - XMC_WRITE_BURST_SYN_DISABLE = 0x00000000, /*!< xmc write operations are always performed in asynchronous mode */ - XMC_WRITE_BURST_SYN_ENABLE = 0x00080000 /*!< xmc write operations are performed in synchronous mode */ -} xmc_write_burst_type; - -/** - * @brief xmc extended mode type - */ -typedef enum -{ - XMC_WRITE_TIMING_DISABLE = 0x00000000, /*!< xmc write timing disable */ - XMC_WRITE_TIMING_ENABLE = 0x00004000 /*!< xmc write timing enable */ -} xmc_extended_mode_type; - -/** - * @brief xmc nand wait type - */ -typedef enum -{ - XMC_WAIT_OPERATION_DISABLE = 0x00000000, /*!< xmc wait operation for the nand flash memory bank disable */ - XMC_WAIT_OPERATION_ENABLE = 0x00000002 /*!< xmc wait operation for the nand flash memory bank enable */ -} xmc_nand_wait_type; - -/** - * @brief xmc ecc enable type - */ -typedef enum -{ - XMC_ECC_OPERATION_DISABLE = 0x00000000, /*!< xmc ecc module disable */ - XMC_ECC_OPERATION_ENABLE = 0x00000040 /*!< xmc ecc module enable */ -} xmc_ecc_enable_type; - -/** - * @brief xmc nor/sram bank type - */ -typedef enum -{ - XMC_BANK1_NOR_SRAM1 = 0x00000000, /*!< xmc nor/sram subbank1 */ - XMC_BANK1_NOR_SRAM4 = 0x00000003 /*!< xmc nor/sram subbank4 */ -} xmc_nor_sram_subbank_type; - -/** - * @brief xmc class bank type - */ -typedef enum -{ - XMC_BANK2_NAND = 0x00000010, /*!< xmc nand flash bank2 */ -} xmc_class_bank_type; - -/** - * @brief xmc memory type - */ -typedef enum -{ - XMC_DEVICE_SRAM = 0x00000000, /*!< xmc device choice sram */ - XMC_DEVICE_PSRAM = 0x00000004, /*!< xmc device choice psram */ - XMC_DEVICE_NOR = 0x00000008 /*!< xmc device choice nor flash */ -} xmc_memory_type; - -/** - * @brief xmc data width type - */ -typedef enum -{ - XMC_BUSTYPE_8_BITS = 0x00000000, /*!< xmc databuss width 8bits */ - XMC_BUSTYPE_16_BITS = 0x00000010 /*!< xmc databuss width 16bits */ -} xmc_data_width_type; - -/** - * @brief xmc wait signal polarity type - */ -typedef enum -{ - XMC_WAIT_SIGNAL_LEVEL_LOW = 0x00000000, /*!< xmc nwait active low */ - XMC_WAIT_SIGNAL_LEVEL_HIGH = 0x00000200 /*!< xmc nwait active high */ -} xmc_wait_signal_polarity_type; - -/** - * @brief xmc wait timing type - */ -typedef enum -{ - XMC_WAIT_SIGNAL_SYN_BEFORE = 0x00000000, /*!< xmc nwait signal is active one data cycle before wait state */ - XMC_WAIT_SIGNAL_SYN_DURING = 0x00000800 /*!< xmc nwait signal is active during wait state */ -} xmc_wait_timing_type; - -/** - * @brief xmc access mode type - */ -typedef enum -{ - XMC_ACCESS_MODE_A = 0x00000000, /*!< xmc access mode A */ - XMC_ACCESS_MODE_B = 0x10000000, /*!< xmc access mode B */ - XMC_ACCESS_MODE_C = 0x20000000, /*!< xmc access mode C */ - XMC_ACCESS_MODE_D = 0x30000000 /*!< xmc access mode D */ -} xmc_access_mode_type; - -/** - * @brief xmc ecc page size type - */ -typedef enum -{ - XMC_ECC_PAGESIZE_256_BYTES = 0x00000000, /*!< xmc ecc page size 256 bytes */ - XMC_ECC_PAGESIZE_512_BYTES = 0x00020000, /*!< xmc ecc page size 512 bytes */ - XMC_ECC_PAGESIZE_1024_BYTES = 0x00040000, /*!< xmc ecc page size 1024 bytes */ - XMC_ECC_PAGESIZE_2048_BYTES = 0x00060000, /*!< xmc ecc page size 2048 bytes */ - XMC_ECC_PAGESIZE_4096_BYTES = 0x00080000, /*!< xmc ecc page size 4096 bytes */ - XMC_ECC_PAGESIZE_8192_BYTES = 0x000A0000 /*!< xmc ecc page size 8192 bytes */ -} xmc_ecc_pagesize_type; - -/** - * @brief xmc interrupt sources type - */ -typedef enum -{ - XMC_INT_RISING_EDGE = 0x00000008, /*!< xmc rising edge detection interrupt enable */ - XMC_INT_LEVEL = 0x00000010, /*!< xmc high-level edge detection interrupt enable */ - XMC_INT_FALLING_EDGE = 0x00000020 /*!< xmc falling edge detection interrupt enable */ -} xmc_interrupt_sources_type; - -/** - * @brief xmc interrupt flag type - */ -typedef enum -{ - XMC_RISINGEDGE_FLAG = 0x00000001, /*!< xmc interrupt rising edge detection flag */ - XMC_LEVEL_FLAG = 0x00000002, /*!< xmc interrupt high-level edge detection flag */ - XMC_FALLINGEDGE_FLAG = 0x00000004, /*!< xmc interrupt falling edge detection flag */ - XMC_FEMPT_FLAG = 0x00000040 /*!< xmc fifo empty flag */ -} xmc_interrupt_flag_type; - -/** - * @brief nor/sram banks timing parameters - */ -typedef struct -{ - xmc_nor_sram_subbank_type subbank; /*!< xmc nor/sram subbank */ - xmc_extended_mode_type write_timing_enable; /*!< xmc nor/sram write timing enable */ - uint32_t addr_setup_time; /*!< xmc nor/sram address setup time */ - uint32_t addr_hold_time; /*!< xmc nor/sram address hold time */ - uint32_t data_setup_time; /*!< xmc nor/sram data setup time */ - uint32_t bus_latency_time; /*!< xmc nor/sram bus latency time */ - uint32_t clk_psc; /*!< xmc nor/sram clock prescale */ - uint32_t data_latency_time; /*!< xmc nor/sram data latency time */ - xmc_access_mode_type mode; /*!< xmc nor/sram access mode */ -} xmc_norsram_timing_init_type; - -/** - * @brief xmc nor/sram init structure definition - */ -typedef struct -{ - xmc_nor_sram_subbank_type subbank; /*!< xmc nor/sram subbank */ - xmc_data_addr_mux_type data_addr_multiplex; /*!< xmc nor/sram address/data multiplexing enable */ - xmc_memory_type device; /*!< xmc nor/sram memory device */ - xmc_data_width_type bus_type; /*!< xmc nor/sram data bus width */ - xmc_burst_access_mode_type burst_mode_enable; /*!< xmc nor/sram burst mode enable */ - xmc_asyn_wait_type asynwait_enable; /*!< xmc nor/sram nwait in asynchronous transfer enable */ - xmc_wait_signal_polarity_type wait_signal_lv; /*!< xmc nor/sram nwait polarity */ - xmc_wrap_mode_type wrapped_mode_enable; /*!< xmc nor/sram wrapped enable */ - xmc_wait_timing_type wait_signal_config; /*!< xmc nor/sram nwait timing configuration */ - xmc_write_operation_type write_enable; /*!< xmc nor/sram write enable */ - xmc_wait_signal_type wait_signal_enable; /*!< xmc nor/sram nwait in synchronous transfer enable */ - xmc_extended_mode_type write_timing_enable; /*!< xmc nor/sram read-write timing different */ - xmc_write_burst_type write_burst_syn; /*!< xmc nor/sram memory write mode control */ -} xmc_norsram_init_type; - -/** - * @brief nand timing parameters xmc - */ - -typedef struct -{ - xmc_class_bank_type class_bank; /*!< xmc nand bank */ - uint32_t mem_setup_time; /*!< xmc nand memory setup time */ - uint32_t mem_waite_time; /*!< xmc nand memory wait time */ - uint32_t mem_hold_time; /*!< xmc nand memory hold time */ - uint32_t mem_hiz_time; /*!< xmc nand memory databus high resistance time */ -} xmc_nand_timinginit_type; - -/** - * @brief xmc nand init structure definition - */ - -typedef struct -{ - xmc_class_bank_type nand_bank; /*!< xmc nand bank */ - xmc_nand_wait_type wait_enable; /*!< xmc wait feature enable */ - xmc_data_width_type bus_type; /*!< xmc nand bus width */ - xmc_ecc_enable_type ecc_enable; /*!< xmc nand ecc enable */ - xmc_ecc_pagesize_type ecc_pagesize; /*!< xmc nand ecc page size */ - uint32_t delay_time_cycle; /*!< xmc nand cle to re delay */ - uint32_t delay_time_ar; /*!< xmc nand ale to re delay */ -} xmc_nand_init_type; - -typedef struct -{ - /** - * @brief xmc bank1 bk1ctrl register, offset:0x00+0x08*(x-1) x= 1 or 4 - */ - union - { - __IO uint32_t bk1ctrl; - struct - { - __IO uint32_t en : 1; /* [0] */ - __IO uint32_t admuxen : 1; /* [1] */ - __IO uint32_t dev : 2; /* [3:2] */ - __IO uint32_t extmdbw : 2; /* [5:4] */ - __IO uint32_t noren : 1; /* [6] */ - __IO uint32_t reserved1 : 1; /* [7] */ - __IO uint32_t syncben : 1; /* [8] */ - __IO uint32_t nwpol : 1; /* [9] */ - __IO uint32_t wrapen : 1; /* [10] */ - __IO uint32_t nwtcfg : 1; /* [11] */ - __IO uint32_t wen : 1; /* [12] */ - __IO uint32_t nwsen : 1; /* [13] */ - __IO uint32_t rwtd : 1; /* [14] */ - __IO uint32_t nwasen : 1; /* [15] */ - __IO uint32_t crpgs : 3; /* [18:16] */ - __IO uint32_t mwmc : 1; /* [19] */ - __IO uint32_t reserved2 : 12;/* [31:20] */ - } bk1ctrl_bit; - }; - - /** - * @brief xmc bank1 bk1tmg register, offset:0x04+0x08*(x-1) x= 1 or 4 - */ - union - { - __IO uint32_t bk1tmg; - struct - { - __IO uint32_t addrst : 4; /* [3:0] */ - __IO uint32_t addrht : 4; /* [7:4] */ - __IO uint32_t dtst : 8; /* [15:8] */ - __IO uint32_t buslat : 4; /* [19:16] */ - __IO uint32_t clkpsc : 4; /* [23:20] */ - __IO uint32_t dtlat : 4; /* [27:24] */ - __IO uint32_t asyncm : 2; /* [29:28] */ - __IO uint32_t reserved1 : 2; /* [31:30] */ - } bk1tmg_bit; - }; - -} xmc_bank1_ctrl_tmg_reg_type; - -typedef struct -{ - /** - * @brief xmc bank1 bk1tmgwr register, offset:0x104+0x08*(x-1) x= 1 or 4 - */ - union - { - __IO uint32_t bk1tmgwr; - struct - { - __IO uint32_t addrst : 4; /* [3:0] */ - __IO uint32_t addrht : 4; /* [7:4] */ - __IO uint32_t dtst : 8; /* [15:8] */ - __IO uint32_t buslat : 4; /* [19:16] */ - __IO uint32_t reserved1 : 8; /* [27:20] */ - __IO uint32_t asyncm : 2; /* [29:28] */ - __IO uint32_t reserved2 : 2; /* [31:30] */ - } bk1tmgwr_bit; - }; - - /** - * @brief xmc bank1 reserved register - */ - __IO uint32_t reserved1; - -} xmc_bank1_tmgwr_reg_type; - -/** - * @brief xmc bank1 registers - */ -typedef struct -{ - /** - * @brief xmc bank1 ctrl and tmg register, offset:0x00~0x1C - */ - xmc_bank1_ctrl_tmg_reg_type ctrl_tmg_group[4]; - - /** - * @brief xmc bank1 reserved register, offset:0x20~0x100 - */ - __IO uint32_t reserved1[57]; - - /** - * @brief xmc bank1 tmgwr register, offset:0x104~0x11C - */ - xmc_bank1_tmgwr_reg_type tmgwr_group[4]; - - /** - * @brief xmc bank1 reserved register, offset:0x120~0x21C - */ - __IO uint32_t reserved2[63]; - - /** - * @brief xmc bank1 ext register, offset:0x220~0x22C - */ - union - { - __IO uint32_t ext[4]; - struct - { - __IO uint32_t buslatw2w : 8; /* [7:0] */ - __IO uint32_t buslatr2r : 8; /* [15:8] */ - __IO uint32_t reserved1 : 16;/* [31:16] */ - } ext_bit[4]; - }; - -} xmc_bank1_type; - -/** - * @brief xmc bank2 registers - */ -typedef struct -{ - /** - * @brief xmc bk2ctrl register, offset:0x60 - */ - union - { - __IO uint32_t bk2ctrl; - struct - { - __IO uint32_t reserved1 : 1; /* [0] */ - __IO uint32_t nwen : 1; /* [1] */ - __IO uint32_t en : 1; /* [2] */ - __IO uint32_t dev : 1; /* [3] */ - __IO uint32_t extmdbw : 2; /* [5:4] */ - __IO uint32_t eccen : 1; /* [6] */ - __IO uint32_t reserved2 : 2; /* [8:7] */ - __IO uint32_t tcr : 4; /* [12:9] */ - __IO uint32_t tar : 4; /* [16:13] */ - __IO uint32_t eccpgs : 3; /* [19:17] */ - __IO uint32_t reserved3 : 12;/* [31:20] */ - } bk2ctrl_bit; - }; - - /** - * @brief xmc bk2is register, offset:0x64 - */ - union - { - __IO uint32_t bk2is; - struct - { - __IO uint32_t res : 1; /* [0] */ - __IO uint32_t hls : 1; /* [1] */ - __IO uint32_t fes : 1; /* [2] */ - __IO uint32_t reien : 1; /* [3] */ - __IO uint32_t hlien : 1; /* [4] */ - __IO uint32_t feien : 1; /* [5] */ - __IO uint32_t fifoe : 1; /* [6] */ - __IO uint32_t reserved1 : 25;/* [31:7] */ - } bk2is_bit; - }; - - /** - * @brief xmc bk2tmgmem register, offset:0x68 - */ - union - { - __IO uint32_t bk2tmgmem; - struct - { - __IO uint32_t cmst : 8; /* [7:0] */ - __IO uint32_t cmwt : 8; /* [15:8] */ - __IO uint32_t cmht : 8; /* [23:16] */ - __IO uint32_t cmdhizt : 8; /* [31:24] */ - } bk2tmgmem_bit; - }; - - /** - * @brief xmc bk2tmgatt register, offset:0x6C - */ - union - { - __IO uint32_t bk2tmgatt; - struct - { - __IO uint32_t amst : 8; /* [7:0] */ - __IO uint32_t amwt : 8; /* [15:8] */ - __IO uint32_t amht : 8; /* [23:16] */ - __IO uint32_t amdhizt : 8; /* [31:24] */ - } bk2tmgatt_bit; - }; - - /** - * @brief xmc reserved register, offset:0x70 - */ - __IO uint32_t reserved1; - - /** - * @brief xmc bk2ecc register, offset:0x74 - */ - union - { - __IO uint32_t bk2ecc; - struct - { - __IO uint32_t ecc : 32; /* [31:0] */ - } bk2ecc_bit; - }; - -} xmc_bank2_type; - -/** - * @} - */ - -#define XMC_BANK1 ((xmc_bank1_type *) XMC_BANK1_REG_BASE) -#define XMC_BANK2 ((xmc_bank2_type *) XMC_BANK2_REG_BASE) - -/** @defgroup XMC_exported_functions - * @{ - */ - -void xmc_nor_sram_reset(xmc_nor_sram_subbank_type xmc_subbank); -void xmc_nor_sram_init(xmc_norsram_init_type* xmc_norsram_init_struct); -void xmc_nor_sram_timing_config(xmc_norsram_timing_init_type* xmc_rw_timing_struct, - xmc_norsram_timing_init_type* xmc_w_timing_struct); -void xmc_norsram_default_para_init(xmc_norsram_init_type* xmc_nor_sram_init_struct); -void xmc_norsram_timing_default_para_init(xmc_norsram_timing_init_type* xmc_rw_timing_struct, - xmc_norsram_timing_init_type* xmc_w_timing_struct); -void xmc_nor_sram_enable(xmc_nor_sram_subbank_type xmc_subbank, confirm_state new_state); -void xmc_ext_timing_config(xmc_nor_sram_subbank_type xmc_sub_bank, uint16_t w2w_timing, uint16_t r2r_timing); -void xmc_nand_reset(xmc_class_bank_type xmc_bank); -void xmc_nand_init(xmc_nand_init_type* xmc_nand_init_struct); -void xmc_nand_timing_config(xmc_nand_timinginit_type* xmc_common_spacetiming_struct, - xmc_nand_timinginit_type* xmc_attribute_spacetiming_struct); -void xmc_nand_default_para_init(xmc_nand_init_type* xmc_nand_init_struct); -void xmc_nand_timing_default_para_init(xmc_nand_timinginit_type* xmc_common_spacetiming_struct, - xmc_nand_timinginit_type* xmc_attribute_spacetiming_struct); -void xmc_nand_enable(xmc_class_bank_type xmc_bank, confirm_state new_state); -void xmc_nand_ecc_enable(xmc_class_bank_type xmc_bank, confirm_state new_state); -uint32_t xmc_ecc_get(xmc_class_bank_type xmc_bank); -void xmc_interrupt_enable(xmc_class_bank_type xmc_bank, xmc_interrupt_sources_type xmc_int, confirm_state new_state); -flag_status xmc_flag_status_get(xmc_class_bank_type xmc_bank, xmc_interrupt_flag_type xmc_flag); -void xmc_flag_clear(xmc_class_bank_type xmc_bank, xmc_interrupt_flag_type xmc_flag); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_acc.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_acc.c deleted file mode 100644 index 770db6a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_acc.c +++ /dev/null @@ -1,218 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_acc.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the acc firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup ACC - * @brief ACC driver modules - * @{ - */ - -#ifdef ACC_MODULE_ENABLED - -/** @defgroup ACC_private_functions - * @{ - */ - -/** - * @brief enable or disable the acc calibration mode. - * @param acc_trim: specifies the acc calibration type. - * this parameter can be one of the following values: - * - ACC_CAL_HICKCAL - * - ACC_CAL_HICKTRIM - * @param new_state: specifies the acc calibration to be enabled or disabled.(TRUE or FALSE) - * @retval none - */ -void acc_calibration_mode_enable(uint16_t acc_trim, confirm_state new_state) -{ - if(acc_trim == ACC_CAL_HICKCAL) - { - ACC->ctrl1_bit.entrim = FALSE; - } - else - { - ACC->ctrl1_bit.entrim = TRUE; - } - ACC->ctrl1_bit.calon = new_state; -} - -/** - * @brief store calibration step data in acc's ctrl1 register. - * @param step_value: value to be stored in the acc's ctrl1 register - * @retval none - */ -void acc_step_set(uint8_t step_value) -{ - ACC->ctrl1_bit.step = step_value; -} - -/** - * @brief enable or disable the specified acc interrupts. - * @param acc_int: specifies the acc interrupt sources to be enabled or disabled. - * this parameter can be one of the following values: - * - ACC_CALRDYIEN_INT - * - ACC_EIEN_INT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void acc_interrupt_enable(uint16_t acc_int, confirm_state new_state) -{ - if(acc_int == ACC_CALRDYIEN_INT) - { - ACC->ctrl1_bit.calrdyien = new_state; - } - else - { - ACC->ctrl1_bit.eien = new_state; - } -} - -/** - * @brief return the current acc hicktrim value. - * @param none - * @retval 8-bit hicktrim value. - */ -uint8_t acc_hicktrim_get(void) -{ - return ((uint8_t)(ACC->ctrl2_bit.hicktrim)); -} - -/** - * @brief return the current acc hickcal value. - * @param none - * @retval 8-bit hicktrim value. - */ -uint8_t acc_hickcal_get(void) -{ - return ((uint8_t)(ACC->ctrl2_bit.hickcal)); -} - -/** - * @brief wtire the value to acc c1 register. - * @param acc_c1_value - * @retval none. - */ -void acc_write_c1(uint16_t acc_c1_value) -{ - ACC->c1 = acc_c1_value; -} - -/** - * @brief wtire the value to acc c2 register. - * @param acc_c2_value - * @retval none. - */ -void acc_write_c2(uint16_t acc_c2_value) -{ - ACC->c2 = acc_c2_value; -} - -/** - * @brief wtire the value to acc c3 register. - * @param acc_c3_value - * @retval none. - */ -void acc_write_c3(uint16_t acc_c3_value) -{ - ACC->c3 = acc_c3_value; -} - -/** - * @brief return the current acc c1 value. - * @param none - * @retval 16-bit c1 value. - */ -uint16_t acc_read_c1(void) -{ - return ((uint16_t)(ACC->c1)); -} - -/** - * @brief return the current acc c2 value. - * @param none - * @retval 16-bit c2 value. - */ -uint16_t acc_read_c2(void) -{ - return ((uint16_t)(ACC->c2)); -} - -/** - * @brief return the current acc c3 value. - * @param none - * @retval 16-bit c3 value. - */ -uint16_t acc_read_c3(void) -{ - return ((uint16_t)(ACC->c3)); -} - -/** - * @brief check whether the specified acc flag is set or not. - * @param acc_flag: specifies the flag to check. - * this parameter can be one of the following values: - * - ACC_RSLOST_FLAG - * - ACC_CALRDY_FLAG - * @retval flag_status (SET or RESET) - */ -flag_status acc_flag_get(uint16_t acc_flag) -{ - if(acc_flag == ACC_CALRDY_FLAG) - return (flag_status)(ACC->sts_bit.calrdy); - else - return (flag_status)(ACC->sts_bit.rslost); -} - -/** - * @brief clear the specified acc flag is set or not. - * @param acc_flag: specifies the flag to check. - * this parameter can be any combination of the following values: - * - ACC_RSLOST_FLAG - * - ACC_CALRDY_FLAG - * @retval none - */ -void acc_flag_clear(uint16_t acc_flag) -{ - ACC->sts = ~acc_flag; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_adc.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_adc.c deleted file mode 100644 index 5161242..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_adc.c +++ /dev/null @@ -1,949 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_adc.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the adc firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup ADC - * @brief ADC driver modules - * @{ - */ - -#ifdef ADC_MODULE_ENABLED - -/** @defgroup ADC_private_functions - * @{ - */ - -/** - * @brief deinitialize the adc peripheral registers to their default reset values. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @retval none - */ -void adc_reset(adc_type *adc_x) -{ - if(adc_x == ADC1) - { - crm_periph_reset(CRM_ADC1_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_ADC1_PERIPH_RESET, FALSE); - } - else if(adc_x == ADC2) - { - crm_periph_reset(CRM_ADC2_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_ADC2_PERIPH_RESET, FALSE); - } - else if(adc_x == ADC3) - { - crm_periph_reset(CRM_ADC3_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_ADC3_PERIPH_RESET, FALSE); - } -} - -/** - * @brief enable or disable the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param new_state: new state of a/d converter. - * this parameter can be: TRUE or FALSE. - * note:after adc ready,user set adcen bit will cause ordinary conversion - * @retval none - */ -void adc_enable(adc_type *adc_x, confirm_state new_state) -{ - adc_x->ctrl2_bit.adcen = new_state; -} - -/** - * @brief select combine mode of the specified adc peripheral. - * @param combine_mode: select the adc combine mode. - * this parameter can be one of the following values: - * - ADC_INDEPENDENT_MODE - * - ADC_ORDINARY_SMLT_PREEMPT_SMLT_MODE - * - ADC_ORDINARY_SMLT_PREEMPT_INTERLTRIG_MODE - * - ADC_ORDINARY_SHORTSHIFT_PREEMPT_SMLT_MODE - * - ADC_ORDINARY_LONGSHIFT_PREEMPT_SMLT_MODE - * - ADC_PREEMPT_SMLT_ONLY_MODE - * - ADC_ORDINARY_SMLT_ONLY_MODE - * - ADC_ORDINARY_SHORTSHIFT_ONLY_MODE - * - ADC_ORDINARY_LONGSHIFT_ONLY_MODE - * - ADC_PREEMPT_INTERLTRIG_ONLY_MODE - * note:these bits are reserved in adc2 and adc3 - * @retval none - */ -void adc_combine_mode_select(adc_combine_mode_type combine_mode) -{ - ADC1->ctrl1_bit.mssel = combine_mode; -} - -/** - * @brief adc base default para init. - * @param sequence_mode: set the state of adc sequence mode. - * this parameter can be:TRUE or FALSE - * @param repeat_mode: set the state of adc repeat conversion mode. - * this parameter can be:TRUE or FALSE - * @param data_align: set the state of adc data alignment. - * this parameter can be one of the following values: - * - ADC_RIGHT_ALIGNMENT - * - ADC_LEFT_ALIGNMENT - * @param ordinary_channel_length: configure the adc ordinary channel sequence length. - * this parameter can be: - * - (0x1~0xf) - * @retval none - */ -void adc_base_default_para_init(adc_base_config_type *adc_base_struct) -{ - adc_base_struct->sequence_mode = FALSE; - adc_base_struct->repeat_mode = FALSE; - adc_base_struct->data_align = ADC_RIGHT_ALIGNMENT; - adc_base_struct->ordinary_channel_length = 1; -} - -/** - * @brief initialize the adc peripheral according to the specified parameters. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param sequence_mode: set the state of adc sequence mode. - * this parameter can be:TRUE or FALSE - * @param repeat_mode: set the state of adc repeat conversion mode. - * this parameter can be:TRUE or FALSE - * @param data_align: set the state of adc data alignment. - * this parameter can be one of the following values: - * - ADC_RIGHT_ALIGNMENT - * - ADC_LEFT_ALIGNMENT - * @param ordinary_channel_length: configure the adc ordinary channel sequence length. - * this parameter can be: - * - (0x1~0xf) - * @retval none - */ -void adc_base_config(adc_type *adc_x, adc_base_config_type *adc_base_struct) -{ - adc_x->ctrl1_bit.sqen = adc_base_struct->sequence_mode; - adc_x->ctrl2_bit.rpen = adc_base_struct->repeat_mode; - adc_x->ctrl2_bit.dtalign = adc_base_struct->data_align; - adc_x->osq1_bit.oclen = adc_base_struct->ordinary_channel_length - 1; -} - -/** - * @brief enable or disable the adc dma transfer. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC3. - * note:this bit is reserved in adc2 - * @param new_state: new state of the adc dma transfer. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void adc_dma_mode_enable(adc_type *adc_x, confirm_state new_state) -{ - adc_x->ctrl2_bit.ocdmaen = new_state; -} - -/** - * @brief enable or disable the specified adc interrupts. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_int: specifies the adc interrupt sources to be enabled or disabled. - * this parameter can be one of the following values: - * - ADC_VMOR_INT - * - ADC_CCE_INT - * - ADC_PCCE_INT - * @param new_state: new state of the specified adc interrupts. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void adc_interrupt_enable(adc_type *adc_x, uint32_t adc_int, confirm_state new_state) -{ - if(new_state == TRUE) - { - adc_x->ctrl1 |= adc_int; - } - else if(new_state == FALSE) - { - adc_x->ctrl1 &= ~adc_int; - } -} - -/** - * @brief initialize calibration register of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @retval none - */ -void adc_calibration_init(adc_type *adc_x) -{ - adc_x->ctrl2_bit.adcalinit = TRUE; -} - -/** - * @brief get calibration register's initialize status of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @retval the new state of reset calibration register status(SET or RESET). - */ -flag_status adc_calibration_init_status_get(adc_type *adc_x) -{ - if(adc_x->ctrl2_bit.adcalinit) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief start calibration process of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @retval none - */ -void adc_calibration_start(adc_type *adc_x) -{ - adc_x->ctrl2_bit.adcal = TRUE; -} - -/** - * @brief get calibration status of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @retval the new state of calibration status(SET or RESET). - */ -flag_status adc_calibration_status_get(adc_type *adc_x) -{ - if(adc_x->ctrl2_bit.adcal) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief enable or disable the voltage monitoring on single/all ordinary or preempt channels of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_voltage_monitoring: choose the adc_voltage_monitoring config. - * this parameter can be one of the following values: - * - ADC_VMONITOR_SINGLE_ORDINARY - * - ADC_VMONITOR_SINGLE_PREEMPT - * - ADC_VMONITOR_SINGLE_ORDINARY_PREEMPT - * - ADC_VMONITOR_ALL_ORDINARY - * - ADC_VMONITOR_ALL_PREEMPT - * - ADC_VMONITOR_ALL_ORDINARY_PREEMPT - * - ADC_VMONITOR_NONE - * @retval none - */ -void adc_voltage_monitor_enable(adc_type *adc_x, adc_voltage_monitoring_type adc_voltage_monitoring) -{ - adc_x->ctrl1_bit.ocvmen = FALSE; - adc_x->ctrl1_bit.pcvmen = FALSE; - adc_x->ctrl1_bit.vmsgen = FALSE; - adc_x->ctrl1 |= adc_voltage_monitoring; -} - -/** - * @brief set voltage monitoring's high and low thresholds value of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_high_threshold: voltage monitoring's high thresholds value. - * this parameter can be: - * - (0x000~0xFFF) - * @param adc_low_threshold: voltage monitoring's low thresholds value. - * this parameter can be: - * - (0x000~0xFFF) - * @retval none - */ -void adc_voltage_monitor_threshold_value_set(adc_type *adc_x, uint16_t adc_high_threshold, uint16_t adc_low_threshold) -{ - adc_x->vmhb_bit.vmhb = adc_high_threshold; - adc_x->vmlb_bit.vmlb = adc_low_threshold; -} - -/** - * @brief select the voltage monitoring's channel of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_channel: select the channel. - * this parameter can be one of the following values: - * - ADC_CHANNEL_0 - ADC_CHANNEL_1 - ADC_CHANNEL_2 - ADC_CHANNEL_3 - * - ADC_CHANNEL_4 - ADC_CHANNEL_5 - ADC_CHANNEL_6 - ADC_CHANNEL_7 - * - ADC_CHANNEL_8 - ADC_CHANNEL_9 - ADC_CHANNEL_10 - ADC_CHANNEL_11 - * - ADC_CHANNEL_12 - ADC_CHANNEL_13 - ADC_CHANNEL_14 - ADC_CHANNEL_15 - * - ADC_CHANNEL_16 - ADC_CHANNEL_17 - * @retval none - */ -void adc_voltage_monitor_single_channel_select(adc_type *adc_x, adc_channel_select_type adc_channel) -{ - adc_x->ctrl1_bit.vmcsel = adc_channel; -} - -/** - * @brief set ordinary channel's corresponding rank in the sequencer and sample time of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_channel: select the channel. - * this parameter can be one of the following values: - * - ADC_CHANNEL_0 - ADC_CHANNEL_1 - ADC_CHANNEL_2 - ADC_CHANNEL_3 - * - ADC_CHANNEL_4 - ADC_CHANNEL_5 - ADC_CHANNEL_6 - ADC_CHANNEL_7 - * - ADC_CHANNEL_8 - ADC_CHANNEL_9 - ADC_CHANNEL_10 - ADC_CHANNEL_11 - * - ADC_CHANNEL_12 - ADC_CHANNEL_13 - ADC_CHANNEL_14 - ADC_CHANNEL_15 - * - ADC_CHANNEL_16 - ADC_CHANNEL_17 - * @param adc_sequence: set rank in the ordinary group sequencer. - * this parameter must be: - * - between 1 to 16 - * @param adc_sampletime: set the sampletime of adc channel. - * this parameter can be one of the following values: - * - ADC_SAMPLETIME_1_5 - * - ADC_SAMPLETIME_7_5 - * - ADC_SAMPLETIME_13_5 - * - ADC_SAMPLETIME_28_5 - * - ADC_SAMPLETIME_41_5 - * - ADC_SAMPLETIME_55_5 - * - ADC_SAMPLETIME_71_5 - * - ADC_SAMPLETIME_239_5 - * @retval none - */ -void adc_ordinary_channel_set(adc_type *adc_x, adc_channel_select_type adc_channel, uint8_t adc_sequence, adc_sampletime_select_type adc_sampletime) -{ - switch(adc_channel) - { - case ADC_CHANNEL_0: - adc_x->spt2_bit.cspt0 = adc_sampletime; - break; - case ADC_CHANNEL_1: - adc_x->spt2_bit.cspt1 = adc_sampletime; - break; - case ADC_CHANNEL_2: - adc_x->spt2_bit.cspt2 = adc_sampletime; - break; - case ADC_CHANNEL_3: - adc_x->spt2_bit.cspt3 = adc_sampletime; - break; - case ADC_CHANNEL_4: - adc_x->spt2_bit.cspt4 = adc_sampletime; - break; - case ADC_CHANNEL_5: - adc_x->spt2_bit.cspt5 = adc_sampletime; - break; - case ADC_CHANNEL_6: - adc_x->spt2_bit.cspt6 = adc_sampletime; - break; - case ADC_CHANNEL_7: - adc_x->spt2_bit.cspt7 = adc_sampletime; - break; - case ADC_CHANNEL_8: - adc_x->spt2_bit.cspt8 = adc_sampletime; - break; - case ADC_CHANNEL_9: - adc_x->spt2_bit.cspt9 = adc_sampletime; - break; - case ADC_CHANNEL_10: - adc_x->spt1_bit.cspt10 = adc_sampletime; - break; - case ADC_CHANNEL_11: - adc_x->spt1_bit.cspt11 = adc_sampletime; - break; - case ADC_CHANNEL_12: - adc_x->spt1_bit.cspt12 = adc_sampletime; - break; - case ADC_CHANNEL_13: - adc_x->spt1_bit.cspt13 = adc_sampletime; - break; - case ADC_CHANNEL_14: - adc_x->spt1_bit.cspt14 = adc_sampletime; - break; - case ADC_CHANNEL_15: - adc_x->spt1_bit.cspt15 = adc_sampletime; - break; - case ADC_CHANNEL_16: - adc_x->spt1_bit.cspt16 = adc_sampletime; - break; - case ADC_CHANNEL_17: - adc_x->spt1_bit.cspt17 = adc_sampletime; - break; - default: - break; - } - switch(adc_sequence) - { - case 1: - adc_x->osq3_bit.osn1 = adc_channel; - break; - case 2: - adc_x->osq3_bit.osn2 = adc_channel; - break; - case 3: - adc_x->osq3_bit.osn3 = adc_channel; - break; - case 4: - adc_x->osq3_bit.osn4 = adc_channel; - break; - case 5: - adc_x->osq3_bit.osn5 = adc_channel; - break; - case 6: - adc_x->osq3_bit.osn6 = adc_channel; - break; - case 7: - adc_x->osq2_bit.osn7 = adc_channel; - break; - case 8: - adc_x->osq2_bit.osn8 = adc_channel; - break; - case 9: - adc_x->osq2_bit.osn9 = adc_channel; - break; - case 10: - adc_x->osq2_bit.osn10 = adc_channel; - break; - case 11: - adc_x->osq2_bit.osn11 = adc_channel; - break; - case 12: - adc_x->osq2_bit.osn12 = adc_channel; - break; - case 13: - adc_x->osq1_bit.osn13 = adc_channel; - break; - case 14: - adc_x->osq1_bit.osn14 = adc_channel; - break; - case 15: - adc_x->osq1_bit.osn15 = adc_channel; - break; - case 16: - adc_x->osq1_bit.osn16 = adc_channel; - break; - default: - break; - } -} - -/** - * @brief set preempt channel lenghth of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_channel_lenght: set the adc preempt channel lenghth. - * this parameter can be: - * - (0x1~0x4) - * @retval none - */ -void adc_preempt_channel_length_set(adc_type *adc_x, uint8_t adc_channel_lenght) -{ - adc_x->psq_bit.pclen = adc_channel_lenght - 1; -} - -/** - * @brief configure preempt channel's corresponding rank in the sequencer and sample time of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_channel: select the channel. - * this parameter can be one of the following values: - * - ADC_CHANNEL_0 - ADC_CHANNEL_1 - ADC_CHANNEL_2 - ADC_CHANNEL_3 - * - ADC_CHANNEL_4 - ADC_CHANNEL_5 - ADC_CHANNEL_6 - ADC_CHANNEL_7 - * - ADC_CHANNEL_8 - ADC_CHANNEL_9 - ADC_CHANNEL_10 - ADC_CHANNEL_11 - * - ADC_CHANNEL_12 - ADC_CHANNEL_13 - ADC_CHANNEL_14 - ADC_CHANNEL_15 - * - ADC_CHANNEL_16 - ADC_CHANNEL_17 - * @param adc_sequence: set rank in the preempt group sequencer. - * this parameter must be: - * - between 1 to 4 - * @param adc_sampletime: config the sampletime of adc channel. - * this parameter can be one of the following values: - * - ADC_SAMPLETIME_1_5 - * - ADC_SAMPLETIME_7_5 - * - ADC_SAMPLETIME_13_5 - * - ADC_SAMPLETIME_28_5 - * - ADC_SAMPLETIME_41_5 - * - ADC_SAMPLETIME_55_5 - * - ADC_SAMPLETIME_71_5 - * - ADC_SAMPLETIME_239_5 - * @retval none - */ -void adc_preempt_channel_set(adc_type *adc_x, adc_channel_select_type adc_channel, uint8_t adc_sequence, adc_sampletime_select_type adc_sampletime) -{ - uint16_t sequence_index=0; - switch(adc_channel) - { - case ADC_CHANNEL_0: - adc_x->spt2_bit.cspt0 = adc_sampletime; - break; - case ADC_CHANNEL_1: - adc_x->spt2_bit.cspt1 = adc_sampletime; - break; - case ADC_CHANNEL_2: - adc_x->spt2_bit.cspt2 = adc_sampletime; - break; - case ADC_CHANNEL_3: - adc_x->spt2_bit.cspt3 = adc_sampletime; - break; - case ADC_CHANNEL_4: - adc_x->spt2_bit.cspt4 = adc_sampletime; - break; - case ADC_CHANNEL_5: - adc_x->spt2_bit.cspt5 = adc_sampletime; - break; - case ADC_CHANNEL_6: - adc_x->spt2_bit.cspt6 = adc_sampletime; - break; - case ADC_CHANNEL_7: - adc_x->spt2_bit.cspt7 = adc_sampletime; - break; - case ADC_CHANNEL_8: - adc_x->spt2_bit.cspt8 = adc_sampletime; - break; - case ADC_CHANNEL_9: - adc_x->spt2_bit.cspt9 = adc_sampletime; - break; - case ADC_CHANNEL_10: - adc_x->spt1_bit.cspt10 = adc_sampletime; - break; - case ADC_CHANNEL_11: - adc_x->spt1_bit.cspt11 = adc_sampletime; - break; - case ADC_CHANNEL_12: - adc_x->spt1_bit.cspt12 = adc_sampletime; - break; - case ADC_CHANNEL_13: - adc_x->spt1_bit.cspt13 = adc_sampletime; - break; - case ADC_CHANNEL_14: - adc_x->spt1_bit.cspt14 = adc_sampletime; - break; - case ADC_CHANNEL_15: - adc_x->spt1_bit.cspt15 = adc_sampletime; - break; - case ADC_CHANNEL_16: - adc_x->spt1_bit.cspt16 = adc_sampletime; - break; - case ADC_CHANNEL_17: - adc_x->spt1_bit.cspt17 = adc_sampletime; - break; - default: - break; - } - sequence_index = adc_sequence + 3 - adc_x->psq_bit.pclen; - switch(sequence_index) - { - case 1: - adc_x->psq_bit.psn1 = adc_channel; - break; - case 2: - adc_x->psq_bit.psn2 = adc_channel; - break; - case 3: - adc_x->psq_bit.psn3 = adc_channel; - break; - case 4: - adc_x->psq_bit.psn4 = adc_channel; - break; - default: - break; - } -} - -/** - * @brief enable or disable the ordinary channel's external trigger and - * set external trigger event of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_ordinary_trig: select the external trigger event. - * this parameter can be one of the following values: - * adc1 & adc2 - * - ADC12_ORDINARY_TRIG_TMR1CH1 - ADC12_ORDINARY_TRIG_TMR1CH2 - ADC12_ORDINARY_TRIG_TMR1CH3 - ADC12_ORDINARY_TRIG_TMR2CH2 - * - ADC12_ORDINARY_TRIG_TMR3TRGOUT - ADC12_ORDINARY_TRIG_TMR4CH4 - ADC12_ORDINARY_TRIG_EXINT11_TMR8TRGOUT - ADC12_ORDINARY_TRIG_SOFTWARE - * - ADC12_ORDINARY_TRIG_TMR1TRGOUT - ADC12_ORDINARY_TRIG_TMR8CH1 - ADC12_ORDINARY_TRIG_TMR8CH2 - * adc3 - * - ADC3_ORDINARY_TRIG_TMR3CH1 - ADC3_ORDINARY_TRIG_TMR2CH3 - ADC3_ORDINARY_TRIG_TMR1CH3 - ADC3_ORDINARY_TRIG_TMR8CH1 - * - ADC3_ORDINARY_TRIG_TMR8TRGOUT - ADC3_ORDINARY_TRIG_TMR5CH1 - ADC3_ORDINARY_TRIG_TMR5CH3 - ADC3_ORDINARY_TRIG_SOFTWARE - * - ADC3_ORDINARY_TRIG_TMR1TRGOUT - ADC3_ORDINARY_TRIG_TMR1CH1 - ADC3_ORDINARY_TRIG_TMR8CH3 - * @param new_state: new state of ordinary channel's external trigger. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void adc_ordinary_conversion_trigger_set(adc_type *adc_x, adc_ordinary_trig_select_type adc_ordinary_trig, confirm_state new_state) -{ - if(adc_ordinary_trig > 7) - { - adc_x->ctrl2_bit.octesel_h = 1; - adc_x->ctrl2_bit.octesel_l = adc_ordinary_trig & 0x7; - } - else - { - adc_x->ctrl2_bit.octesel_h = 0; - adc_x->ctrl2_bit.octesel_l = adc_ordinary_trig & 0x7; - } - adc_x->ctrl2_bit.octen = new_state; -} - -/** - * @brief enable or disable the preempt channel's external trigger and - * set external trigger event of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_preempt_trig: select the external trigger event. - * this parameter can be one of the following values: - * adc1 & adc2 - * - ADC12_PREEMPT_TRIG_TMR1TRGOUT - ADC12_PREEMPT_TRIG_TMR1CH4 - ADC12_PREEMPT_TRIG_TMR2TRGOUT - ADC12_PREEMPT_TRIG_TMR2CH1 - * - ADC12_PREEMPT_TRIG_TMR3CH4 - ADC12_PREEMPT_TRIG_TMR4TRGOUT - ADC12_PREEMPT_TRIG_EXINT15_TMR8CH4 - ADC12_PREEMPT_TRIG_SOFTWARE - * - ADC12_PREEMPT_TRIG_TMR1CH1 - ADC12_PREEMPT_TRIG_TMR8CH1 - ADC12_PREEMPT_TRIG_TMR8TRGOUT - * adc3 - * - ADC3_PREEMPT_TRIG_TMR1TRGOUT - ADC3_PREEMPT_TRIG_TMR1CH4 - ADC3_PREEMPT_TRIG_TMR4CH3 - ADC3_PREEMPT_TRIG_TMR8CH2 - * - ADC3_PREEMPT_TRIG_TMR8CH4 - ADC3_PREEMPT_TRIG_TMR5TRGOUT - ADC3_PREEMPT_TRIG_TMR5CH4 - ADC3_PREEMPT_TRIG_SOFTWARE - * - ADC3_PREEMPT_TRIG_TMR1CH1 - ADC3_PREEMPT_TRIG_TMR1CH2 - ADC3_PREEMPT_TRIG_TMR8TRGOUT - * @param new_state: new state of preempt channel's external trigger. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void adc_preempt_conversion_trigger_set(adc_type *adc_x, adc_preempt_trig_select_type adc_preempt_trig, confirm_state new_state) -{ - if(adc_preempt_trig > 7) - { - adc_x->ctrl2_bit.pctesel_h = 1; - adc_x->ctrl2_bit.pctesel_l = adc_preempt_trig & 0x7; - } - else - { - adc_x->ctrl2_bit.pctesel_h = 0; - adc_x->ctrl2_bit.pctesel_l = adc_preempt_trig & 0x7; - } - adc_x->ctrl2_bit.pcten = new_state; -} - - -/** - * @brief set preempt channel's conversion value offset of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_preempt_channel: select the preempt channel. - * this parameter can be one of the following values: - * - ADC_PREEMPT_CHANNEL_1 - * - ADC_PREEMPT_CHANNEL_2 - * - ADC_PREEMPT_CHANNEL_3 - * - ADC_PREEMPT_CHANNEL_4 - * @param adc_offset_value: set the adc preempt channel's conversion value offset. - * this parameter can be: - * - (0x000~0xFFF) - * @retval none - */ -void adc_preempt_offset_value_set(adc_type *adc_x, adc_preempt_channel_type adc_preempt_channel, uint16_t adc_offset_value) -{ - switch(adc_preempt_channel) - { - case ADC_PREEMPT_CHANNEL_1: - adc_x->pcdto1_bit.pcdto1 = adc_offset_value; - break; - case ADC_PREEMPT_CHANNEL_2: - adc_x->pcdto2_bit.pcdto2 = adc_offset_value; - break; - case ADC_PREEMPT_CHANNEL_3: - adc_x->pcdto3_bit.pcdto3 = adc_offset_value; - break; - case ADC_PREEMPT_CHANNEL_4: - adc_x->pcdto4_bit.pcdto4 = adc_offset_value; - break; - default: - break; - } -} - -/** - * @brief set partitioned mode channel count of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_channel_count: configure the adc partitioned mode channel count. - * this parameter can be: - * - (0x1~0x8) - * @retval none - */ -void adc_ordinary_part_count_set(adc_type *adc_x, uint8_t adc_channel_count) -{ - - adc_x->ctrl1_bit.ocpcnt = adc_channel_count - 1; -} - -/** - * @brief enable or disable the partitioned mode on ordinary channel of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param new_state: new state of ordinary channel's partitioned mode. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void adc_ordinary_part_mode_enable(adc_type *adc_x, confirm_state new_state) -{ - adc_x->ctrl1_bit.ocpen = new_state; -} - -/** - * @brief enable or disable the partitioned mode on preempt channel of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param new_state: new state of preempt channel's partitioned mode. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void adc_preempt_part_mode_enable(adc_type *adc_x, confirm_state new_state) -{ - adc_x->ctrl1_bit.pcpen = new_state; -} - -/** - * @brief enable or disable automatic preempt group conversion of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param new_state: new state of automatic preempt group conversion. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void adc_preempt_auto_mode_enable(adc_type *adc_x, confirm_state new_state) -{ - adc_x->ctrl1_bit.pcautoen = new_state; -} - -/** - * @brief enable or disable the temperature sensor and vintrv channel. - * @param new_state: new state of Internal temperature sensor and vintrv. - * this parameter can be: TRUE or FALSE. - * note:this bit is present only in adc1 - * @retval none - */ -void adc_tempersensor_vintrv_enable(confirm_state new_state) -{ - ADC1->ctrl2_bit.itsrven = new_state; -} - -/** - * @brief enable or disable ordinary software start conversion of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param new_state: new state of ordinary software start conversion. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void adc_ordinary_software_trigger_enable(adc_type *adc_x, confirm_state new_state) -{ - adc_x->ctrl2_bit.ocswtrg = new_state; -} - -/** - * @brief get ordinary software start conversion status of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @retval the new state of ordinary software start conversion status(SET or RESET). - */ -flag_status adc_ordinary_software_trigger_status_get(adc_type *adc_x) -{ - if(adc_x->ctrl2_bit.ocswtrg) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief enable or disable preempt software start conversion of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param new_state: new state of preempt software start conversion. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void adc_preempt_software_trigger_enable(adc_type *adc_x, confirm_state new_state) -{ - adc_x->ctrl2_bit.pcswtrg = new_state; -} - -/** - * @brief get preempt software start conversion status of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @retval the new state of preempt software start conversion status(SET or RESET). - */ -flag_status adc_preempt_software_trigger_status_get(adc_type *adc_x) -{ - if(adc_x->ctrl2_bit.pcswtrg) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief return the last conversion data for ordinary channel of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @retval the last conversion data for ordinary channel. - */ -uint16_t adc_ordinary_conversion_data_get(adc_type *adc_x) -{ - return (uint16_t)(adc_x->odt_bit.odt); -} - -/** - * @brief return the last conversion data for ordinary channel of combine adc(adc1 and adc2). - * @retval the last conversion data for ordinary channel. - */ -uint32_t adc_combine_ordinary_conversion_data_get(void) -{ - return (uint32_t)(ADC1->odt); -} - -/** - * @brief return the conversion data for selection preempt channel of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_preempt_channel: select the preempt channel. - * this parameter can be one of the following values: - * - ADC_PREEMPTED_CHANNEL_1 - * - ADC_PREEMPTED_CHANNEL_2 - * - ADC_PREEMPTED_CHANNEL_3 - * - ADC_PREEMPTED_CHANNEL_4 - * @retval the conversion data for selection preempt channel. - */ -uint16_t adc_preempt_conversion_data_get(adc_type *adc_x, adc_preempt_channel_type adc_preempt_channel) -{ - uint16_t preempt_conv_data_index = 0; - switch(adc_preempt_channel) - { - case ADC_PREEMPT_CHANNEL_1: - preempt_conv_data_index = (uint16_t)(adc_x->pdt1_bit.pdt1); - break; - case ADC_PREEMPT_CHANNEL_2: - preempt_conv_data_index = (uint16_t)(adc_x->pdt2_bit.pdt2); - break; - case ADC_PREEMPT_CHANNEL_3: - preempt_conv_data_index = (uint16_t)(adc_x->pdt3_bit.pdt3); - break; - case ADC_PREEMPT_CHANNEL_4: - preempt_conv_data_index = (uint16_t)(adc_x->pdt4_bit.pdt4); - break; - default: - break; - } - return preempt_conv_data_index; -} - -/** - * @brief get flag of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_flag: select the adc flag. - * this parameter can be one of the following values: - * - ADC_VMOR_FLAG - * - ADC_CCE_FLAG - * - ADC_PCCE_FLAG - * - ADC_PCCS_FLAG(no interrupt associated) - * - ADC_OCCS_FLAG(no interrupt associated) - * @retval the new state of adc flag status(SET or RESET). - */ -flag_status adc_flag_get(adc_type *adc_x, uint8_t adc_flag) -{ - flag_status status = RESET; - - if((adc_x->sts & adc_flag) == RESET) - { - status = RESET; - } - else - { - status = SET; - } - return status; -} - -/** - * @brief clear flag of the specified adc peripheral. - * @param adc_x: select the adc peripheral. - * this parameter can be one of the following values: - * ADC1, ADC2, ADC3. - * @param adc_flag: select the adc flag. - * this parameter can be any combination of the following values: - * - ADC_VMOR_FLAG - * - ADC_CCE_FLAG(also can clear by reading the adc_x->odt) - * - ADC_PCCE_FLAG - * - ADC_PCCS_FLAG - * - ADC_OCCS_FLAG - * @retval none - */ -void adc_flag_clear(adc_type *adc_x, uint32_t adc_flag) -{ - adc_x->sts = ~adc_flag; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_bpr.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_bpr.c deleted file mode 100644 index 08e1922..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_bpr.c +++ /dev/null @@ -1,206 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_bpr.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the bpr firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup BPR - * @brief BPR driver modules - * @{ - */ - -#ifdef BPR_MODULE_ENABLED - -/** @defgroup BPR_private_functions - * @{ - */ - -/** - * @brief bpr reset by crm reset register - * @param none - * @retval none - */ -void bpr_reset(void) -{ - crm_battery_powered_domain_reset(TRUE); - crm_battery_powered_domain_reset(FALSE); -} - -/** - * @brief bpr event flag get, for tamper event flag - * @param flag: specifies the flag to check. - * this parameter can be one of the following values: - * - BPR_TAMPER_INTERRUPT_FLAG: tamper interrupt flag - * - BPR_TAMPER_EVENT_FLAG: tamper event flag - * @retval state of tamper event flag - */ -flag_status bpr_flag_get(uint32_t flag) -{ - if(flag == BPR_TAMPER_INTERRUPT_FLAG) - { - return (flag_status)(BPR->ctrlsts_bit.tpif); - } - else - { - return (flag_status)(BPR->ctrlsts_bit.tpef); - } -} - -/** - * @brief clear bpr tamper flag - * @param flag: specifies the flag to clear. - * this parameter can be one of the following values: - * - BPR_TAMPER_INTERRUPT_FLAG: tamper interrupt flag - * - BPR_TAMPER_EVENT_FLAG: tamper event flag - * @retval none - */ -void bpr_flag_clear(uint32_t flag) -{ - if(flag == BPR_TAMPER_INTERRUPT_FLAG) - { - BPR->ctrlsts_bit.tpifclr = TRUE; - } - else - { - BPR->ctrlsts_bit.tpefclr = TRUE; - } -} - -/** - * @brief enable or disable bpr tamper interrupt - * @param new_state (TRUE or FALSE) - * @retval none - */ -void bpr_interrupt_enable(confirm_state new_state) -{ - BPR->ctrlsts_bit.tpien = new_state; -} - -/** - * @brief read bpr bpr data - * @param bpr_data - * this parameter can be one of the following values: - * - BPR_DATA1 - * - BPR_DATA2 - * ... - * - BPR_DATA41 - * - BPR_DATA42 - * @retval none - */ -uint16_t bpr_data_read(bpr_data_type bpr_data) -{ - return (*(__IO uint16_t *)(BPR_BASE + bpr_data)); -} - -/** - * @brief write bpr data - * @param bpr_data - * this parameter can be one of the following values: - * - BPR_DATA1 - * - BPR_DATA2 - * ... - * - BPR_DATA41 - * - BPR_DATA42 - * @param data_value (0x0000~0xFFFF) - * @retval none - */ -void bpr_data_write(bpr_data_type bpr_data, uint16_t data_value) -{ - (*(__IO uint32_t *)(BPR_BASE + bpr_data)) = data_value; -} - -/** - * @brief select bpr rtc output - * @param output_source - * this parameter can be one of the following values: - * - BPR_RTC_OUTPUT_NONE: output disable. - * - BPR_RTC_OUTPUT_CLOCK_CAL_BEFORE: output clock before calibration. - * - BPR_RTC_OUTPUT_ALARM: output alarm event with pluse mode. - * - BPR_RTC_OUTPUT_SECOND: output second event with pluse mode. - * - BPR_RTC_OUTPUT_CLOCK_CAL_AFTER: output clock after calibration. - * - BPR_RTC_OUTPUT_ALARM_TOGGLE: output alarm event with toggle mode. - * - BPR_RTC_OUTPUT_SECOND_TOGGLE: output second event with toggle mode. - * @retval none - */ -void bpr_rtc_output_select(bpr_rtc_output_type output_source) -{ - /* clear cco,asoe,asos,ccos,togen bits */ - BPR->rtccal &= (uint32_t)~0x0F80; - - /* set output_source value */ - BPR->rtccal |= output_source; -} - -/** - * @brief set rtc clock calibration value - * @param calibration_value (0x00~0x7f) - * @retval none - */ -void bpr_rtc_clock_calibration_value_set(uint8_t calibration_value) -{ - /* set rtc clock calibration value */ - BPR->rtccal_bit.calval= calibration_value; -} - -/** - * @brief enable or disable bpr tamper pin - * @param new_state (TRUE or FALSE) - * @retval none - */ -void bpr_tamper_pin_enable(confirm_state new_state) -{ - BPR->ctrl_bit.tpen = new_state; -} - -/** - * @brief set bpr tamper pin active level - * @param active_level - * this parameter can be one of the following values: - * - BPR_TAMPER_PIN_ACTIVE_HIGH: tamper pin input active level is high. - * - BPR_TAMPER_PIN_ACTIVE_LOW: tamper pin input active level is low. - * @retval none - */ -void bpr_tamper_pin_active_level_set(bpr_tamper_pin_active_level_type active_level) -{ - BPR->ctrl_bit.tpp = active_level; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_can.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_can.c deleted file mode 100644 index 12e4586..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_can.c +++ /dev/null @@ -1,1149 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_can.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the can firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup CAN - * @brief CAN driver modules - * @{ - */ - -#ifdef CAN_MODULE_ENABLED - -/** @defgroup CAN_private_functions - * @{ - */ - -/** - * @brief deinitialize the can peripheral registers to their default reset values. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @retval none. - */ -void can_reset(can_type* can_x) -{ - if(can_x == CAN1) - { - crm_periph_reset(CRM_CAN1_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_CAN1_PERIPH_RESET, FALSE); - } - else if(can_x == CAN2) - { - crm_periph_reset(CRM_CAN2_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_CAN2_PERIPH_RESET, FALSE); - } -} - -/** - * @brief fill each can_baudrate_struct member with its default value. - * @param can_baudrate_struct: pointer to a can_baudrate_type structure which will be initialized. - * @retval none. - */ -void can_baudrate_default_para_init(can_baudrate_type* can_baudrate_struct) -{ - /* reset can baudrate structure parameters values */ - - /* baud rate division */ - can_baudrate_struct->baudrate_div = 1; - - /* resynchronization adjust width */ - can_baudrate_struct->rsaw_size = CAN_RSAW_2TQ; - - /* bit time segment 1 */ - can_baudrate_struct->bts1_size = CAN_BTS1_4TQ; - - /* bit time segment 2 */ - can_baudrate_struct->bts2_size = CAN_BTS2_3TQ; -} - -/** - * @brief set the baudrate of the can peripheral - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param can_baudrate_struct: pointer to a can_baudrate_type structure which will be set. - * @note baudrate calculate method is: - * baudrate = fpclk/(baudrate_div *(3 + bts1_size + bts2_size)) - * @retval the result of baudrate set - * this parameter can be one of the following values: - * SUCCESS or ERROR - */ -error_status can_baudrate_set(can_type* can_x, can_baudrate_type* can_baudrate_struct) -{ - error_status status_index = ERROR; - uint32_t wait_ack_index = 0x00000000; - /* exit from doze mode */ - can_x->mctrl_bit.dzen = FALSE; - - /* request freeze mode */ - can_x->mctrl_bit.fzen = TRUE; - - /* wait the acknowledge */ - while((!can_x->msts_bit.fzc) && (wait_ack_index != FZC_TIMEOUT)) - { - wait_ack_index++; - } - - /* check acknowledge */ - if(can_x->msts_bit.fzc) - { - can_x->btmg_bit.brdiv = can_baudrate_struct->baudrate_div - 1; - can_x->btmg_bit.rsaw = can_baudrate_struct->rsaw_size; - can_x->btmg_bit.bts1 = can_baudrate_struct->bts1_size; - can_x->btmg_bit.bts2 = can_baudrate_struct->bts2_size; - - /* request leave freeze mode */ - can_x->mctrl_bit.fzen = FALSE; - - /* wait the acknowledge */ - wait_ack_index = 0; - while((can_x->msts_bit.fzc) && (wait_ack_index != FZC_TIMEOUT)) - { - wait_ack_index++; - } - - /* check acknowledged */ - if(can_x->msts_bit.fzc) - { - status_index = ERROR; - } - else - { - status_index = SUCCESS ; - } - } - else - { - status_index = ERROR; - } - - /* return the status of baudrate set */ - return status_index; -} - -/** - * @brief fill each can_init_struct member with its default value. - * @param can_base_struct: pointer to a can_base_type structure which will be initialized. - * @retval none. - */ -void can_default_para_init(can_base_type* can_base_struct) -{ - /* reset can init structure parameters values */ - - /* initialize the time triggered communication mode */ - can_base_struct->ttc_enable = FALSE; - - /* initialize the automatic exit bus-off management */ - can_base_struct->aebo_enable = FALSE; - - /* initialize the automatic exit doze mode */ - can_base_struct->aed_enable = FALSE; - - /* initialize the prohibit retransmission when sending fails */ - can_base_struct->prsf_enable = FALSE; - - /* initialize the message discarding rule select when overflow */ - can_base_struct->mdrsel_selection = CAN_DISCARDING_FIRST_RECEIVED; - - /* initialize the multiple message sending sequence rule */ - can_base_struct->mmssr_selection = CAN_SENDING_BY_ID; - - /* initialize the can_mode */ - can_base_struct->mode_selection = CAN_MODE_COMMUNICATE; -} - -/** - * @brief initialize the can peripheral according to the specified - * parameters in the can_init_struct. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param can_base_struct: pointer to a can_base_struct structure that contains the configuration information for the can peripheral. - * @retval the status of initialization - * this parameter can be one of the following values: - * SUCCESS or ERROR - */ -error_status can_base_init(can_type* can_x, can_base_type* can_base_struct) -{ - error_status init_status_index = ERROR; - uint32_t wait_ack_index = 0x00000000; - /* exit from doze mode */ - can_x->mctrl_bit.dzen = FALSE; - - /* request freeze mode */ - can_x->mctrl_bit.fzen = TRUE; - - /* wait the acknowledge */ - while((!can_x->msts_bit.fzc) && (wait_ack_index != FZC_TIMEOUT)) - { - wait_ack_index++; - } - - /* check acknowledge */ - if(can_x->msts_bit.fzc) - { - /* set the time triggered communication mode */ - can_x->mctrl_bit.ttcen = can_base_struct->ttc_enable; - - /* set the automatic exit bus-off management */ - can_x->mctrl_bit.aeboen = can_base_struct->aebo_enable; - - /* set the automatic automatic exit doze mode */ - can_x->mctrl_bit.aeden = can_base_struct->aed_enable; - - /* set the prohibit retransmission when sending fails */ - can_x->mctrl_bit.prsfen = can_base_struct->prsf_enable; - - /* set the message discarding rule select when overflow */ - can_x->mctrl_bit.mdrsel = can_base_struct->mdrsel_selection; - - /* set the multiple message sending sequence rule */ - can_x->mctrl_bit.mmssr = can_base_struct->mmssr_selection; - - /* set the test mode */ - can_x->btmg_bit.lben = can_base_struct->mode_selection & 0x01; - can_x->btmg_bit.loen = (can_base_struct->mode_selection >> 1) & 0x01; - - /* request leave freeze mode */ - can_x->mctrl_bit.fzen = FALSE; - - /* wait the acknowledge */ - wait_ack_index = 0; - while((can_x->msts_bit.fzc) && (wait_ack_index != FZC_TIMEOUT)) - { - wait_ack_index++; - } - - /* check acknowledged */ - if(can_x->msts_bit.fzc) - { - init_status_index = ERROR; - } - else - { - init_status_index = SUCCESS ; - } - } - else - { - init_status_index = ERROR; - } - - /* return the status of initialization */ - return init_status_index; -} - -/** - * @brief fill each can_filter_init_struct member with its default value. - * @param can_filter_init_struct: pointer to a can_filter_init_type structure which will be initialized. - * @retval none. - */ -void can_filter_default_para_init(can_filter_init_type* can_filter_init_struct) -{ - /* reset can filter init structure parameters values */ - - /* initialize the filter activate state */ - can_filter_init_struct->filter_activate_enable = FALSE; - - /* filter mode */ - can_filter_init_struct->filter_mode = CAN_FILTER_MODE_ID_MASK; - - /* filter relation fifo select */ - can_filter_init_struct->filter_fifo = CAN_FILTER_FIFO0; - - /* filter number select */ - can_filter_init_struct->filter_number = 0; - - /* initialize the filter bit width */ - can_filter_init_struct->filter_bit = CAN_FILTER_16BIT; - - /* initialize the filters filter data bit */ - can_filter_init_struct->filter_id_high = 0; - can_filter_init_struct->filter_id_low = 0; - can_filter_init_struct->filter_mask_high = 0; - can_filter_init_struct->filter_mask_low = 0; -} - -/** - * @brief initialize the can peripheral according to the specified - * parameters in the can_filter_init_struct. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param can_filter_init_struct: pointer to a can_filter_init_type structure that contains the configuration information. - * @retval none. - */ -void can_filter_init(can_type* can_x, can_filter_init_type* can_filter_init_struct) -{ - uint32_t filter_number_bit_pos = 0; - filter_number_bit_pos = ((uint32_t)1) << can_filter_init_struct->filter_number; - /* set the filter turn into configuration condition */ - can_x->fctrl_bit.fcs = TRUE; - - /* filter activate disable */ - can_x->facfg &= ~(uint32_t)filter_number_bit_pos; - - /* filter bit width */ - switch(can_filter_init_struct->filter_bit) - { - case CAN_FILTER_16BIT: - can_x->fbwcfg &= ~(uint32_t)filter_number_bit_pos; - /* first 16-bit identifier and first 16-bit mask or first 16-bit identifier and second 16-bit identifier */ - can_x->ffb[can_filter_init_struct->filter_number].ffdb1 = ((0x0000FFFF & (uint32_t)can_filter_init_struct->filter_mask_low) << 16); - can_x->ffb[can_filter_init_struct->filter_number].ffdb1 |= (0x0000FFFF & (uint32_t)can_filter_init_struct->filter_id_low); - - /* second 16-bit identifier and second 16-bit mask or third 16-bit identifier and fourth 16-bit identifier */ - can_x->ffb[can_filter_init_struct->filter_number].ffdb2 = ((0x0000FFFF & (uint32_t)can_filter_init_struct->filter_mask_high) << 16); - can_x->ffb[can_filter_init_struct->filter_number].ffdb2 |= (0x0000FFFF & (uint32_t)can_filter_init_struct->filter_id_high); - - break; - case CAN_FILTER_32BIT: - can_x->fbwcfg |= filter_number_bit_pos; - /* 32-bit identifier or first 32-bit identifier */ - can_x->ffb[can_filter_init_struct->filter_number].ffdb1 = ((0x0000FFFF & (uint32_t)can_filter_init_struct->filter_id_high) << 16); - can_x->ffb[can_filter_init_struct->filter_number].ffdb1 |= (0x0000FFFF & (uint32_t)can_filter_init_struct->filter_id_low); - - /* 32-bit mask or second 32-bit identifier */ - can_x->ffb[can_filter_init_struct->filter_number].ffdb2 = ((0x0000FFFF & (uint32_t)can_filter_init_struct->filter_mask_high) << 16); - can_x->ffb[can_filter_init_struct->filter_number].ffdb2 |= (0x0000FFFF & (uint32_t)can_filter_init_struct->filter_mask_low); - - break; - default: - break; - } - - /* filter mode */ - switch(can_filter_init_struct->filter_mode) - { - case CAN_FILTER_MODE_ID_MASK: - can_x->fmcfg &= ~(uint32_t)filter_number_bit_pos; - break; - case CAN_FILTER_MODE_ID_LIST: - can_x->fmcfg |= (uint32_t)filter_number_bit_pos; - break; - default: - break; - } - - /* filter relation fifo select */ - switch(can_filter_init_struct->filter_fifo) - { - case CAN_FILTER_FIFO0: - can_x->frf &= ~(uint32_t)filter_number_bit_pos; - break; - case CAN_FILTER_FIFO1: - can_x->frf |= (uint32_t)filter_number_bit_pos; - break; - default: - break; - } - - /* filter activate enable */ - switch(can_filter_init_struct->filter_activate_enable) - { - case TRUE: - can_x->facfg |= (uint32_t)filter_number_bit_pos; - break; - case FALSE: - can_x->facfg &= ~(uint32_t)filter_number_bit_pos; - break; - default: - break; - } - - /* set the filter turn into working condition */ - can_x->fctrl_bit.fcs = FALSE; -} - -/** - * @brief enable or disable the debug transmission prohibit of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param new_state: new state of debug transmission prohibit. - * this parameter can be: TRUE or FALSE. - * @retval none. - */ -void can_debug_transmission_prohibit(can_type* can_x, confirm_state new_state) -{ - can_x->mctrl_bit.ptd = new_state; -} - -/** - * @brief enable or disable time trigger operation communication mode of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1 or CAN2. - * @param new_state : new state of time trigger operation communication mode. - * this parameter can be: TRUE or FALSE. - * @note - * note1: - * when enabled, transmit mailbox time stamp(tmts[15:0]) value is sent in the last two data bytes of - * the 8-byte message: tmts[7:0] in data byte 6 and tmts[15:8] in data byte 7 - * @note - * note2: - * tmdtbl must be programmed as 8 in order time stamp (2 bytes) to be sent over the can bus. - * @retval none - */ -void can_ttc_mode_enable(can_type* can_x, confirm_state new_state) -{ - /* config the ttc mode new_state */ - can_x->mctrl_bit.ttcen = new_state; - - /* config tmtsten bits new_state */ - can_x->tx_mailbox[0].tmc_bit.tmtsten = new_state; - can_x->tx_mailbox[1].tmc_bit.tmtsten = new_state; - can_x->tx_mailbox[2].tmc_bit.tmtsten = new_state; -} - -/** - * @brief fill the transmission message and transmit of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param tx_message_struct: pointer to a structure which contains the message to be trans. - * @retval the number of the mailbox that is used for transmission: - * this parameter can be one of the following values: - * - CAN_TX_MAILBOX0 - * - CAN_TX_MAILBOX1 - * - CAN_TX_MAILBOX2 - * - CAN_TX_STATUS_NO_EMPTY - */ -uint8_t can_message_transmit(can_type* can_x, can_tx_message_type* tx_message_struct) -{ - uint8_t transmit_mailbox = CAN_TX_STATUS_NO_EMPTY; - - /* select one empty transmit mailbox */ - if(can_x->tsts_bit.tm0ef) - { - transmit_mailbox = CAN_TX_MAILBOX0; - } - else if(can_x->tsts_bit.tm1ef) - { - transmit_mailbox = CAN_TX_MAILBOX1; - } - else if(can_x->tsts_bit.tm2ef) - { - transmit_mailbox = CAN_TX_MAILBOX2; - } - else - { - transmit_mailbox = CAN_TX_STATUS_NO_EMPTY; - } - - if(transmit_mailbox != CAN_TX_STATUS_NO_EMPTY) - { - /* set up the id */ - can_x->tx_mailbox[transmit_mailbox].tmi &= 0x00000001; - can_x->tx_mailbox[transmit_mailbox].tmi_bit.tmidsel = tx_message_struct->id_type; - switch(tx_message_struct->id_type) - { - case CAN_ID_STANDARD: - can_x->tx_mailbox[transmit_mailbox].tmi_bit.tmsid = tx_message_struct->standard_id; - break; - case CAN_ID_EXTENDED: - can_x->tx_mailbox[transmit_mailbox].tmi |= (tx_message_struct->extended_id << 3); - break; - default: - break; - } - can_x->tx_mailbox[transmit_mailbox].tmi_bit.tmfrsel = tx_message_struct->frame_type; - /* set up the dlc */ - can_x->tx_mailbox[transmit_mailbox].tmc_bit.tmdtbl = (tx_message_struct->dlc & ((uint8_t)0x0F)); - - /* set up the data field */ - can_x->tx_mailbox[transmit_mailbox].tmdtl = (((uint32_t)tx_message_struct->data[3] << 24) | - ((uint32_t)tx_message_struct->data[2] << 16) | - ((uint32_t)tx_message_struct->data[1] << 8) | - ((uint32_t)tx_message_struct->data[0])); - can_x->tx_mailbox[transmit_mailbox].tmdth = (((uint32_t)tx_message_struct->data[7] << 24) | - ((uint32_t)tx_message_struct->data[6] << 16) | - ((uint32_t)tx_message_struct->data[5] << 8) | - ((uint32_t)tx_message_struct->data[4])); - - /* request transmission */ - can_x->tx_mailbox[transmit_mailbox].tmi_bit.tmsr = TRUE; - } - return transmit_mailbox; -} - -/** - * @brief check the transmission state of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1 or CAN2. - * @param transmit_mailbox: the number of the mailbox that is used for transmission. - * this parameter can be one of the following values: - * - CAN_TX_MAILBOX0 - * - CAN_TX_MAILBOX1 - * - CAN_TX_MAILBOX2 - * @retval can transmit status - * this parameter can be one of the following values: - * - CAN_TX_STATUS_SUCCESSFUL - * - CAN_TX_STATUS_FAILED - * - CAN_TX_STATUS_PENDING - */ -can_transmit_status_type can_transmit_status_get(can_type* can_x, can_tx_mailbox_num_type transmit_mailbox) -{ - can_transmit_status_type state_index = CAN_TX_STATUS_FAILED; - switch(transmit_mailbox) - { - case CAN_TX_MAILBOX0: - if(can_x->tsts_bit.tm0tcf != RESET) - { - if(can_x->tsts_bit.tm0tsf != RESET) - { - state_index = CAN_TX_STATUS_SUCCESSFUL; - } - else - { - state_index = CAN_TX_STATUS_FAILED; - } - } - else - { - state_index = CAN_TX_STATUS_PENDING; - } - break; - case CAN_TX_MAILBOX1: - if(can_x->tsts_bit.tm1tcf != RESET) - { - if(can_x->tsts_bit.tm1tsf != RESET) - { - state_index = CAN_TX_STATUS_SUCCESSFUL; - } - else - { - state_index = CAN_TX_STATUS_FAILED; - } - } - else - { - state_index = CAN_TX_STATUS_PENDING; - } - break; - case CAN_TX_MAILBOX2: - if(can_x->tsts_bit.tm2tcf != RESET) - { - if(can_x->tsts_bit.tm2tsf != RESET) - { - state_index = CAN_TX_STATUS_SUCCESSFUL; - } - else - { - state_index = CAN_TX_STATUS_FAILED; - } - } - else - { - state_index = CAN_TX_STATUS_PENDING; - } - break; - default: - state_index = CAN_TX_STATUS_FAILED; - break; - } - return state_index; -} - -/** - * @brief cancel a transmit request of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1 or CAN2. - * @param mailbox: mailbox number. - * this parameter can be one of the following values: - * - CAN_TX_MAILBOX0 - * - CAN_TX_MAILBOX1 - * - CAN_TX_MAILBOX2 - * @retval none. - */ -void can_transmit_cancel(can_type* can_x, can_tx_mailbox_num_type transmit_mailbox) -{ - switch (transmit_mailbox) - { - case CAN_TX_MAILBOX0: - can_x->tsts = CAN_TSTS_TM0CT_VAL; - break; - case CAN_TX_MAILBOX1: - can_x->tsts = CAN_TSTS_TM1CT_VAL; - break; - case CAN_TX_MAILBOX2: - can_x->tsts = CAN_TSTS_TM2CT_VAL; - - break; - default: - break; - } -} - -/** - * @brief receive message of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param fifo_number: receive fifo number. - * this parameter can be one of the following values: - * - CAN_RX_FIFO0 - * - CAN_RX_FIFO1 - * @param rx_message_struct: pointer to a structure which store the receive message. - * @retval none. - */ -void can_message_receive(can_type* can_x, can_rx_fifo_num_type fifo_number, can_rx_message_type* rx_message_struct) -{ - /* get the id type */ - rx_message_struct->id_type = (can_identifier_type)can_x->fifo_mailbox[fifo_number].rfi_bit.rfidi; - switch (rx_message_struct->id_type) - { - case CAN_ID_STANDARD: - rx_message_struct->standard_id = can_x->fifo_mailbox[fifo_number].rfi_bit.rfsid; - break; - case CAN_ID_EXTENDED: - rx_message_struct->extended_id = 0x1FFFFFFF & (can_x->fifo_mailbox[fifo_number].rfi >> 3); - break; - default: - break; - } - rx_message_struct->frame_type = (can_trans_frame_type)can_x->fifo_mailbox[fifo_number].rfi_bit.rffri; - /* get the dlc */ - rx_message_struct->dlc = can_x->fifo_mailbox[fifo_number].rfc_bit.rfdtl; - - /* get the filter match number */ - rx_message_struct->filter_index = can_x->fifo_mailbox[fifo_number].rfc_bit.rffmn; - - /* get the data field */ - rx_message_struct->data[0] = can_x->fifo_mailbox[fifo_number].rfdtl_bit.rfdt0; - rx_message_struct->data[1] = can_x->fifo_mailbox[fifo_number].rfdtl_bit.rfdt1; - rx_message_struct->data[2] = can_x->fifo_mailbox[fifo_number].rfdtl_bit.rfdt2; - rx_message_struct->data[3] = can_x->fifo_mailbox[fifo_number].rfdtl_bit.rfdt3; - rx_message_struct->data[4] = can_x->fifo_mailbox[fifo_number].rfdth_bit.rfdt4; - rx_message_struct->data[5] = can_x->fifo_mailbox[fifo_number].rfdth_bit.rfdt5; - rx_message_struct->data[6] = can_x->fifo_mailbox[fifo_number].rfdth_bit.rfdt6; - rx_message_struct->data[7] = can_x->fifo_mailbox[fifo_number].rfdth_bit.rfdt7; - - /* release the fifo */ - can_receive_fifo_release(can_x, fifo_number); -} - -/** - * @brief release the specified fifo of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param fifo_number: fifo to be release. - * this parameter can be one of the following values: - * - CAN_RX_FIFO0 - * - CAN_RX_FIFO1 - * @retval none. - */ -void can_receive_fifo_release(can_type* can_x, can_rx_fifo_num_type fifo_number) -{ - switch (fifo_number) - { - case CAN_RX_FIFO0: - can_x->rf0 = CAN_RF0_RF0R_VAL; - break; - case CAN_RX_FIFO1: - can_x->rf1 = CAN_RF1_RF1R_VAL; - break; - default: - break; - } -} - -/** - * @brief return the number of pending messages of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param fifo_number: receive fifo number. - * this parameter can be one of the following values: - * - CAN_RX_FIFO0 - * - CAN_RX_FIFO1 - * @retval the number of message pending in the receive fifo. - */ -uint8_t can_receive_message_pending_get(can_type* can_x, can_rx_fifo_num_type fifo_number) -{ - uint8_t message_pending = 0; - switch (fifo_number) - { - case CAN_RX_FIFO0: - message_pending = can_x->rf0_bit.rf0mn; - break; - case CAN_RX_FIFO1: - message_pending = can_x->rf1_bit.rf1mn; - break; - default: - break; - } - return message_pending; -} - -/** - * @brief set the operation mode of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param can_operating_mode: can operating mode. - * this parameter can be one of the following values: - * - CAN_OPERATINGMODE_FREEZE - * - CAN_OPERATINGMODE_DOZE - * - CAN_OPERATINGMODE_COMMUNICATE - * @retval status of operation mode set - * this parameter can be one of the following values: - * SUCCESS or ERROR - */ -error_status can_operating_mode_set(can_type* can_x, can_operating_mode_type can_operating_mode) -{ - error_status status = ERROR; - uint32_t time_out_index = FZC_TIMEOUT; - - if (can_operating_mode == CAN_OPERATINGMODE_FREEZE) - { - /* request enter freeze mode */ - can_x->mctrl_bit.dzen = FALSE; - can_x->mctrl_bit.fzen = TRUE; - - while(((can_x->msts_bit.dzc) || (!can_x->msts_bit.fzc)) && (time_out_index != 0)) - { - time_out_index--; - } - if((can_x->msts_bit.dzc) || (!can_x->msts_bit.fzc)) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - else if(can_operating_mode == CAN_OPERATINGMODE_DOZE) - { - /* request enter doze mode */ - can_x->mctrl_bit.dzen = TRUE; - can_x->mctrl_bit.fzen = FALSE; - - while(((!can_x->msts_bit.dzc) || (can_x->msts_bit.fzc)) && (time_out_index != 0)) - { - time_out_index--; - } - if((!can_x->msts_bit.dzc) || (can_x->msts_bit.fzc)) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - else if(can_operating_mode == CAN_OPERATINGMODE_COMMUNICATE) - { - /* request enter normal mode */ - can_x->mctrl_bit.dzen = FALSE; - can_x->mctrl_bit.fzen = FALSE; - - while(((can_x->msts_bit.dzc) || (can_x->msts_bit.fzc)) && (time_out_index != 0)) - { - time_out_index--; - } - if((can_x->msts_bit.dzc) || (can_x->msts_bit.fzc)) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - } - else - { - status = ERROR; - } - return status; -} - -/** - * @brief enter the low power mode of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @retval status of doze mode enter, the returned value can be: - * - CAN_ENTER_DOZE_SUCCESSFUL - * - CAN_ENTER_DOZE_FAILED - */ -can_enter_doze_status_type can_doze_mode_enter(can_type* can_x) -{ - can_enter_doze_status_type status = CAN_ENTER_DOZE_FAILED; - uint32_t time_out_index = FZC_TIMEOUT; - can_x->mctrl_bit.fzen = FALSE; - can_x->mctrl_bit.dzen = TRUE; - while(((!can_x->msts_bit.dzc) || (can_x->msts_bit.fzc)) && (time_out_index != 0)) - { - time_out_index--; - } - if((!can_x->msts_bit.dzc) || (can_x->msts_bit.fzc)) - { - status = CAN_ENTER_DOZE_FAILED; - } - else - { - status = CAN_ENTER_DOZE_SUCCESSFUL; - } - return status; -} - -/** - * @brief exit the doze mode of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @retval status of doze mode enter, the returned value can be: - * - CAN_QUIT_DOZE_SUCCESSFUL - * - CAN_QUIT_DOZE_FAILED - */ -can_quit_doze_status_type can_doze_mode_exit(can_type* can_x) -{ - can_quit_doze_status_type status = CAN_QUIT_DOZE_FAILED; - uint32_t time_out_index = DZC_TIMEOUT; - can_x->mctrl_bit.dzen = FALSE; - while((can_x->msts_bit.dzc) && (time_out_index != 0)) - { - time_out_index--; - } - if(!can_x->msts_bit.dzc) - { - status = CAN_QUIT_DOZE_SUCCESSFUL; - } - return status; -} - -/** - * @brief return the error type record (etr) of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @retval the value of the error code - * the return can be one of the follow values: - * - CAN_ERRORRECORD_NOERR - * - CAN_ERRORRECORD_STUFFERR, - * - CAN_ERRORRECORD_FORMERR, - * - CAN_ERRORRECORD_ACKERR, - * - CAN_ERRORRECORD_BITRECESSIVEERR, - * - CAN_ERRORRECORD_BITDOMINANTERR, - * - CAN_ERRORRECORD_CRCERR, - * - CAN_ERRORRECORD_SOFTWARESETERR - */ -can_error_record_type can_error_type_record_get(can_type* can_x) -{ - can_error_record_type error_code = CAN_ERRORRECORD_NOERR; - - error_code = (can_error_record_type)can_x->ests_bit.etr; - return error_code; -} - -/** - * @brief return the receive error counter (rec) of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @retval the value of receive error counter. - */ -uint8_t can_receive_error_counter_get(can_type* can_x) -{ - uint8_t counter = 0; - counter = can_x->ests_bit.rec; - return counter; -} - -/** - * @brief return the transmit error counter of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @retval the value of transmit error counter. - */ -uint8_t can_transmit_error_counter_get(can_type* can_x) -{ - uint8_t counter = 0; - counter = can_x->ests_bit.tec; - return counter; -} - -/** - * @brief enable or disable the interrupt of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param can_int: specifies the can interrupt sources to be enabled or disabled. - * this parameter can be one of the following values: - * - CAN_TCIEN_INT - * - CAN_RF0MIEN_INT - * - CAN_RF0FIEN_INT - * - CAN_RF0OIEN_INT - * - CAN_RF1MIEN_INT - * - CAN_RF1FIEN_INT - * - CAN_RF1OIEN_INT - * - CAN_EAIEN_INT - * - CAN_EPIEN_INT - * - CAN_BOIEN_INT - * - CAN_ETRIEN_INT - * - CAN_EOIEN_INT - * - CAN_QDZIEN_INT - * - CAN_EDZIEN_INT - * @param new_state: new state of the can interrupts. - * this parameter can be: TRUE or FALSE. - * @retval none. - */ -void can_interrupt_enable(can_type* can_x, uint32_t can_int, confirm_state new_state) -{ - if (new_state != FALSE) - { - can_x->inten |= can_int; - } - else - { - can_x->inten &= ~can_int; - } -} - -/** - * @brief get flag of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param can_flag: select the flag. - * this parameter can be one of the following flags: - * - CAN_EAF_FLAG - * - CAN_EPF_FLAG - * - CAN_BOF_FLAG - * - CAN_ETR_FLAG - * - CAN_EOIF_FLAG - * - CAN_TM0TCF_FLAG - * - CAN_TM1TCF_FLAG - * - CAN_TM2TCF_FLAG - * - CAN_RF0MN_FLAG - * - CAN_RF0FF_FLAG - * - CAN_RF0OF_FLAG - * - CAN_RF1MN_FLAG - * - CAN_RF1FF_FLAG - * - CAN_RF1OF_FLAG - * - CAN_QDZIF_FLAG - * - CAN_EDZC_FLAG - * - CAN_TMEF_FLAG - * note:the state of CAN_EDZC_FLAG need to check dzc and edzif bit - * note:the state of CAN_TMEF_FLAG need to check rqc0,rqc1 and rqc2 bit - * @retval status of can_flag, the returned value can be:SET or RESET. - */ -flag_status can_flag_get(can_type* can_x, uint32_t can_flag) -{ - flag_status bit_status = RESET; - switch(can_flag) - { - case CAN_EAF_FLAG: - bit_status = (flag_status)can_x->ests_bit.eaf; - break; - case CAN_EPF_FLAG: - bit_status = (flag_status)can_x->ests_bit.epf; - break; - case CAN_BOF_FLAG: - bit_status = (flag_status)can_x->ests_bit.bof; - break; - case CAN_ETR_FLAG: - if(can_x->ests_bit.etr != 0) - { - bit_status = SET; - } - else - { - bit_status = RESET; - } - break; - case CAN_EOIF_FLAG: - bit_status = (flag_status)can_x->msts_bit.eoif; - break; - case CAN_TM0TCF_FLAG: - bit_status = (flag_status)can_x->tsts_bit.tm0tcf; - break; - case CAN_TM1TCF_FLAG: - bit_status = (flag_status)can_x->tsts_bit.tm1tcf; - break; - case CAN_TM2TCF_FLAG: - bit_status = (flag_status)can_x->tsts_bit.tm2tcf; - break; - case CAN_RF0MN_FLAG: - if(can_x->rf0_bit.rf0mn != 0) - { - bit_status = SET; - } - else - { - bit_status = RESET; - } - break; - case CAN_RF0FF_FLAG: - bit_status = (flag_status)can_x->rf0_bit.rf0ff; - break; - case CAN_RF0OF_FLAG: - bit_status = (flag_status)can_x->rf0_bit.rf0of; - break; - case CAN_RF1MN_FLAG: - if(can_x->rf1_bit.rf1mn != 0) - { - bit_status = SET; - } - else - { - bit_status = RESET; - } - break; - case CAN_RF1FF_FLAG: - bit_status = (flag_status)can_x->rf1_bit.rf1ff; - break; - case CAN_RF1OF_FLAG: - bit_status = (flag_status)can_x->rf1_bit.rf1of; - break; - case CAN_QDZIF_FLAG: - bit_status = (flag_status)can_x->msts_bit.qdzif; - break; - case CAN_EDZC_FLAG: - if((can_x->msts_bit.dzc != RESET) ||(can_x->msts_bit.edzif != RESET)) - { - bit_status = SET; - } - else - { - bit_status = RESET; - } - break; - case CAN_TMEF_FLAG: - if((can_x->tsts_bit.tm0ef != RESET) || (can_x->tsts_bit.tm1ef != RESET) || (can_x->tsts_bit.tm2ef != RESET)) - { - bit_status = SET; - } - else - { - bit_status = RESET; - } - break; - default: - bit_status = RESET; - break; - } - return bit_status; -} - -/** - * @brief clear flag of the specified can peripheral. - * @param can_x: select the can peripheral. - * this parameter can be one of the following values: - * CAN1,CAN2. - * @param can_flag: select the flag. - * this parameter can be one of the following flags: - * - CAN_EAF_FLAG - * - CAN_EPF_FLAG - * - CAN_BOF_FLAG - * - CAN_ETR_FLAG - * - CAN_EOIF_FLAG - * - CAN_TM0TCF_FLAG - * - CAN_TM1TCF_FLAG - * - CAN_TM2TCF_FLAG - * - CAN_RF0FF_FLAG - * - CAN_RF0OF_FLAG - * - CAN_RF1FF_FLAG - * - CAN_RF1OF_FLAG - * - CAN_QDZIF_FLAG - * - CAN_EDZC_FLAG - * - CAN_TMEF_FLAG - * note:CAN_RF0MN_FLAG and CAN_RF1MN_FLAG can not clear by this function - * @retval none. - */ -void can_flag_clear(can_type* can_x, uint32_t can_flag) -{ - switch(can_flag) - { - case CAN_EAF_FLAG: - case CAN_EPF_FLAG: - case CAN_BOF_FLAG: - case CAN_EOIF_FLAG: - can_x->msts = CAN_MSTS_EOIF_VAL; - break; - case CAN_ETR_FLAG: - can_x->msts = CAN_MSTS_EOIF_VAL; - can_x->ests = 0; - break; - case CAN_TM0TCF_FLAG: - can_x->tsts = CAN_TSTS_TM0TCF_VAL; - break; - case CAN_TM1TCF_FLAG: - can_x->tsts = CAN_TSTS_TM1TCF_VAL; - break; - case CAN_TM2TCF_FLAG: - can_x->tsts = CAN_TSTS_TM2TCF_VAL; - break; - case CAN_RF0FF_FLAG: - can_x->rf0 = CAN_RF0_RF0FF_VAL; - break; - case CAN_RF0OF_FLAG: - can_x->rf0 = CAN_RF0_RF0OF_VAL; - break; - case CAN_RF1FF_FLAG: - can_x->rf1 = CAN_RF1_RF1FF_VAL; - break; - case CAN_RF1OF_FLAG: - can_x->rf1 = CAN_RF1_RF1OF_VAL; - break; - case CAN_QDZIF_FLAG: - can_x->msts = CAN_MSTS_QDZIF_VAL; - break; - case CAN_EDZC_FLAG: - can_x->msts = CAN_MSTS_EDZIF_VAL; - break; - case CAN_TMEF_FLAG: - can_x->tsts = CAN_TSTS_TM0TCF_VAL | CAN_TSTS_TM1TCF_VAL | CAN_TSTS_TM2TCF_VAL; - break; - default: - break; - } -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_crc.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_crc.c deleted file mode 100644 index aa81315..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_crc.c +++ /dev/null @@ -1,164 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_crc.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the crc firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup CRC - * @brief CRC driver modules - * @{ - */ - -#ifdef CRC_MODULE_ENABLED - -/** @defgroup CRC_private_functions - * @{ - */ - -/** - * @brief reset the crc data register. - * @param none - * @retval none - */ -void crc_data_reset(void) -{ - /* reset crc generator */ - CRC->ctrl_bit.rst = 0x1; -} - -/** - * @brief compute the 32-bit crc of a given data word(32-bit). - * @param data: data word(32-bit) to compute its crc - * @retval 32-bit crc - */ -uint32_t crc_one_word_calculate(uint32_t data) -{ - CRC->dt = data; - return (CRC->dt); -} - -/** - * @brief compute the 32-bit crc of a given buffer of data word(32-bit). - * @param pbuffer: pointer to the buffer containing the data to be computed - * @param length: length of the buffer to be computed - * @retval 32-bit crc - */ -uint32_t crc_block_calculate(uint32_t *pbuffer, uint32_t length) -{ - uint32_t index = 0; - - for(index = 0; index < length; index++) - { - CRC->dt = pbuffer[index]; - } - - return (CRC->dt); -} - -/** - * @brief return the current crc value. - * @param none - * @retval 32-bit crc - */ -uint32_t crc_data_get(void) -{ - return (CRC->dt); -} - -/** - * @brief store a 8-bit data in the common data register. - * @param cdt_value: 8-bit value to be stored in the common data register - * @retval none - */ -void crc_common_data_set(uint8_t cdt_value) -{ - CRC->cdt_bit.cdt = cdt_value; -} - -/** - * @brief return the 8-bit data stored in the common data register - * @param none - * @retval 8-bit value of the common data register - */ -uint8_t crc_common_date_get(void) -{ - return (CRC->cdt_bit.cdt); -} - -/** - * @brief set the 32-bit initial data of crc - * @param value: initial data - * @retval none - */ -void crc_init_data_set(uint32_t value) -{ - CRC->idt = value; -} - -/** - * @brief control the reversal of the bit order in the input data - * @param value - * this parameter can be one of the following values: - * - CRC_REVERSE_INPUT_NO_AFFECTE - * - CRC_REVERSE_INPUT_BY_BYTE - * - CRC_REVERSE_INPUT_BY_HALFWORD - * - CRC_REVERSE_INPUT_BY_WORD - * @retval none. - */ -void crc_reverse_input_data_set(crc_reverse_input_type value) -{ - CRC->ctrl_bit.revid = value; -} - -/** - * @brief control the reversal of the bit order in the output data - * @param value - * this parameter can be one of the following values: - * - CRC_REVERSE_OUTPUT_NO_AFFECTE - * - CRC_REVERSE_OUTPUT_DATA - * @retval none. - */ -void crc_reverse_output_data_set(crc_reverse_output_type value) -{ - CRC->ctrl_bit.revod = value; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_crm.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_crm.c deleted file mode 100644 index c3ea29c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_crm.c +++ /dev/null @@ -1,860 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_crm.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the crm firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup CRM - * @brief CRM driver modules - * @{ - */ - -#ifdef CRM_MODULE_ENABLED - -/** @defgroup CRM_private_functions - * @{ - */ - -/** - * @brief reset the crm register - * @param none - * @retval none - */ -void crm_reset(void) -{ - /* reset the crm clock configuration to the default reset state(for debug purpose) */ - /* set hicken bit */ - CRM->ctrl_bit.hicken = TRUE; - - /* wait hick stable */ - while(CRM->ctrl_bit.hickstbl != SET); - - /* hick used as system clock */ - CRM->cfg_bit.sclksel = CRM_SCLK_HICK; - - /* wait sclk switch status */ - while(CRM->cfg_bit.sclksts != CRM_SCLK_HICK); - - /* reset cfg register, include sclk switch, ahbdiv, apb1div, apb2div, adcdiv, - clkout pllrcs, pllhextdiv, pllmult, usbdiv and pllrange bits */ - CRM->cfg = 0; - - /* reset hexten, hextbyps, cfden and pllen bits */ - CRM->ctrl &= ~(0x010D0000U); - - /* reset clkout[3], usbbufs, hickdiv, clkoutdiv */ - CRM->misc1 = 0; - - /* disable all interrupts enable and clear pending bits */ - CRM->clkint = 0x009F0000; -} - -/** - * @brief enable or disable crm low speed external crystal bypass - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_lext_bypass(confirm_state new_state) -{ - CRM->bpdc_bit.lextbyps = new_state; -} - -/** - * @brief enable or disable crm high speed external crystal bypass - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_hext_bypass(confirm_state new_state) -{ - CRM->ctrl_bit.hextbyps = new_state; -} - -/** - * @brief get crm flag status - * @param flag - * this parameter can be one of the following values: - * - CRM_HICK_STABLE_FLAG - * - CRM_HEXT_STABLE_FLAG - * - CRM_PLL_STABLE_FLAG - * - CRM_LEXT_STABLE_FLAG - * - CRM_LICK_STABLE_FLAG - * - CRM_NRST_RESET_FLAG - * - CRM_POR_RESET_FLAG - * - CRM_SW_RESET_FLAG - * - CRM_WDT_RESET_FLAG - * - CRM_WWDT_RESET_FLAG - * - CRM_LOWPOWER_RESET_FLAG - * interrupt flag: - * - CRM_LICK_READY_INT_FLAG - * - CRM_LEXT_READY_INT_FLAG - * - CRM_HICK_READY_INT_FLAG - * - CRM_HEXT_READY_INT_FLAG - * - CRM_PLL_READY_INT_FLAG - * - CRM_CLOCK_FAILURE_INT_FLAG - * @retval flag_status (SET or RESET) - */ -flag_status crm_flag_get(uint32_t flag) -{ - flag_status status = RESET; - if((CRM_REG(flag) & CRM_REG_BIT(flag)) != CRM_REG_BIT(flag)) - { - status = RESET; - } - else - { - status = SET; - } - return status; -} - -/** - * @brief wait for hext stable - * @param none - * @retval error_status (ERROR or SUCCESS) - */ -error_status crm_hext_stable_wait(void) -{ - uint32_t stable_cnt = 0; - error_status status = ERROR; - - while((crm_flag_get(CRM_HEXT_STABLE_FLAG) != SET) && (stable_cnt < HEXT_STARTUP_TIMEOUT)) - { - stable_cnt ++; - } - - if(crm_flag_get(CRM_HEXT_STABLE_FLAG) != SET) - { - status = ERROR; - } - else - { - status = SUCCESS; - } - - return status; -} - -/** - * @brief set the hick trimming value - * @param trim_value (0x00~0x3F) - * @retval none - */ -void crm_hick_clock_trimming_set(uint8_t trim_value) -{ - CRM->ctrl_bit.hicktrim = trim_value; -} - -/** - * @brief set the crm calibration value - * @param cali_value (0x00~0xFF) - * @retval none - */ -void crm_hick_clock_calibration_set(uint8_t cali_value) -{ - /* enable write hick calibration */ - CRM->misc1_bit.hickcal_key = 0x5A; - - /* write hick calibration value */ - CRM->ctrl_bit.hickcal = cali_value; - - /* disable write hick calibration */ - CRM->misc1_bit.hickcal_key = 0x0; -} - -/** - * @brief enable or disable the peripheral clock - * @param value - * this parameter can be one of the following values: - * - CRM_DMA1_PERIPH_CLOCK - CRM_DMA2_PERIPH_CLOCK - CRM_CRC_PERIPH_CLOCK - CRM_XMC_PERIPH_CLOCK - * - CRM_SDIO1_PERIPH_CLOCK - CRM_SDIO2_PERIPH_CLOCK - CRM_EMAC_PERIPH_CLOCK - CRM_EMACTX_PERIPH_CLOCK - * - CRM_EMACRX_PERIPH_CLOCK - CRM_EMACPTP_PERIPH_CLOCK - CRM_IOMUX_PERIPH_CLOCK - CRM_GPIOA_PERIPH_CLOCK - * - CRM_GPIOB_PERIPH_CLOCK - CRM_GPIOC_PERIPH_CLOCK - CRM_GPIOD_PERIPH_CLOCK - CRM_GPIOE_PERIPH_CLOCK - * - CRM_ADC1_PERIPH_CLOCK - CRM_ADC2_PERIPH_CLOCK - CRM_TMR1_PERIPH_CLOCK - CRM_SPI1_PERIPH_CLOCK - * - CRM_TMR8_PERIPH_CLOCK - CRM_USART1_PERIPH_CLOCK - CRM_ADC3_PERIPH_CLOCK - CRM_TMR9_PERIPH_CLOCK - * - CRM_TMR10_PERIPH_CLOCK - CRM_TMR11_PERIPH_CLOCK - CRM_ACC_PERIPH_CLOCK - CRM_I2C3_PERIPH_CLOCK - * - CRM_USART6_PERIPH_CLOCK - CRM_UART7_PERIPH_CLOCK - CRM_UART8_PERIPH_CLOCK - CRM_TMR2_PERIPH_CLOCK - * - CRM_TMR3_PERIPH_CLOCK - CRM_TMR4_PERIPH_CLOCK - CRM_TMR5_PERIPH_CLOCK - CRM_TMR6_PERIPH_CLOCK - * - CRM_TMR7_PERIPH_CLOCK - CRM_TMR12_PERIPH_CLOCK - CRM_TMR13_PERIPH_CLOCK - CRM_TMR14_PERIPH_CLOCK - * - CRM_WWDT_PERIPH_CLOCK - CRM_SPI2_PERIPH_CLOCK - CRM_SPI3_PERIPH_CLOCK - CRM_SPI4_PERIPH_CLOCK - * - CRM_USART2_PERIPH_CLOCK - CRM_USART3_PERIPH_CLOCK - CRM_UART4_PERIPH_CLOCK - CRM_UART5_PERIPH_CLOCK - * - CRM_I2C1_PERIPH_CLOCK - CRM_I2C2_PERIPH_CLOCK - CRM_USB_PERIPH_CLOCK - CRM_CAN1_PERIPH_CLOCK - * - CRM_CAN2_PERIPH_CLOCK - CRM_BPR_PERIPH_CLOCK - CRM_PWC_PERIPH_CLOCK - CRM_DAC_PERIPH_CLOCK - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_periph_clock_enable(crm_periph_clock_type value, confirm_state new_state) -{ - /* enable periph clock */ - if(TRUE == new_state) - { - CRM_REG(value) |= CRM_REG_BIT(value); - } - /* disable periph clock */ - else - { - CRM_REG(value) &= ~(CRM_REG_BIT(value)); - } -} - -/** - * @brief enable or disable the peripheral reset - * @param value - * this parameter can be one of the following values: - * - CRM_EMAC_PERIPH_RESET - CRM_IOMUX_PERIPH_RESET - CRM_EXINT_PERIPH_RESET - CRM_GPIOA_PERIPH_RESET - * - CRM_GPIOB_PERIPH_RESET - CRM_GPIOC_PERIPH_RESET - CRM_GPIOD_PERIPH_RESET - CRM_GPIOE_PERIPH_RESET - * - CRM_ADC1_PERIPH_RESET - CRM_ADC2_PERIPH_RESET - CRM_TMR1_PERIPH_RESET - CRM_SPI1_PERIPH_RESET - * - CRM_TMR8_PERIPH_RESET - CRM_USART1_PERIPH_RESET - CRM_ADC3_PERIPH_RESET - CRM_TMR9_PERIPH_RESET - * - CRM_TMR10_PERIPH_RESET - CRM_TMR11_PERIPH_RESET - CRM_ACC_PERIPH_RESET - CRM_I2C3_PERIPH_RESET - * - CRM_USART6_PERIPH_RESET - CRM_UART7_PERIPH_RESET - CRM_UART8_PERIPH_RESET - CRM_TMR2_PERIPH_RESET - * - CRM_TMR3_PERIPH_RESET - CRM_TMR4_PERIPH_RESET - CRM_TMR5_PERIPH_RESET - CRM_TMR6_PERIPH_RESET - * - CRM_TMR7_PERIPH_RESET - CRM_TMR12_PERIPH_RESET - CRM_TMR13_PERIPH_RESET - CRM_TMR14_PERIPH_RESET - * - CRM_WWDT_PERIPH_RESET - CRM_SPI2_PERIPH_RESET - CRM_SPI3_PERIPH_RESET - CRM_SPI4_PERIPH_RESET - * - CRM_USART2_PERIPH_RESET - CRM_USART3_PERIPH_RESET - CRM_UART4_PERIPH_RESET - CRM_UART5_PERIPH_RESET - * - CRM_I2C1_PERIPH_RESET - CRM_I2C2_PERIPH_RESET - CRM_USB_PERIPH_RESET - CRM_CAN1_PERIPH_RESET - * - CRM_CAN2_PERIPH_RESET - CRM_BPR_PERIPH_RESET - CRM_PWC_PERIPH_RESET - CRM_DAC_PERIPH_RESET - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_periph_reset(crm_periph_reset_type value, confirm_state new_state) -{ - /* enable periph reset */ - if(new_state == TRUE) - { - CRM_REG(value) |= (CRM_REG_BIT(value)); - } - /* disable periph reset */ - else - { - CRM_REG(value) &= ~(CRM_REG_BIT(value)); - } -} - -/** - * @brief enable or disable the peripheral clock in sleep mode - * @param value - * this parameter can be one of the following values: - * - CRM_SRAM_PERIPH_CLOCK_SLEEP_MODE - * - CRM_FLASH_PERIPH_CLOCK_SLEEP_MODE - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_periph_sleep_mode_clock_enable(crm_periph_clock_sleepmd_type value, confirm_state new_state) -{ - /* enable periph clock in sleep mode */ - if(new_state == TRUE) - { - CRM_REG(value) |= (CRM_REG_BIT(value)); - } - /* disable perph clock in sleep mode */ - else - { - CRM_REG(value) &= ~(CRM_REG_BIT(value)); - } - -} - -/** - * @brief enable or disable the crm clock source - * @param source - * this parameter can be one of the following values: - * - CRM_CLOCK_SOURCE_HICK - * - CRM_CLOCK_SOURCE_HEXT - * - CRM_CLOCK_SOURCE_PLL - * - CRM_CLOCK_SOURCE_LEXT - * - CRM_CLOCK_SOURCE_LICK - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_clock_source_enable(crm_clock_source_type source, confirm_state new_state) -{ - switch(source) - { - case CRM_CLOCK_SOURCE_HICK: - CRM->ctrl_bit.hicken = new_state; - break; - case CRM_CLOCK_SOURCE_HEXT: - CRM->ctrl_bit.hexten = new_state; - break; - case CRM_CLOCK_SOURCE_PLL: - CRM->ctrl_bit.pllen = new_state; - break; - case CRM_CLOCK_SOURCE_LEXT: - CRM->bpdc_bit.lexten = new_state; - break; - case CRM_CLOCK_SOURCE_LICK: - CRM->ctrlsts_bit.licken = new_state; - break; - default: - break; - } -} - -/** - * @brief clear the crm reset flags - * @param flag - * this parameter can be one of the following values: - * reset flag: - * - CRM_NRST_RESET_FLAG - * - CRM_POR_RESET_FLAG - * - CRM_SW_RESET_FLAG - * - CRM_WDT_RESET_FLAG - * - CRM_WWDT_RESET_FLAG - * - CRM_LOWPOWER_RESET_FLAG - * - CRM_ALL_RESET_FLAG - * interrupt flag: - * - CRM_LICK_READY_INT_FLAG - * - CRM_LEXT_READY_INT_FLAG - * - CRM_HICK_READY_INT_FLAG - * - CRM_HEXT_READY_INT_FLAG - * - CRM_PLL_READY_INT_FLAG - * - CRM_CLOCK_FAILURE_INT_FLAG - * @retval none - */ -void crm_flag_clear(uint32_t flag) -{ - switch(flag) - { - case CRM_NRST_RESET_FLAG: - case CRM_POR_RESET_FLAG: - case CRM_SW_RESET_FLAG: - case CRM_WDT_RESET_FLAG: - case CRM_WWDT_RESET_FLAG: - case CRM_LOWPOWER_RESET_FLAG: - case CRM_ALL_RESET_FLAG: - CRM->ctrlsts_bit.rstfc = TRUE; - break; - case CRM_LICK_READY_INT_FLAG: - CRM->clkint_bit.lickstblfc = TRUE; - break; - case CRM_LEXT_READY_INT_FLAG: - CRM->clkint_bit.lextstblfc = TRUE; - break; - case CRM_HICK_READY_INT_FLAG: - CRM->clkint_bit.hickstblfc = TRUE; - break; - case CRM_HEXT_READY_INT_FLAG: - CRM->clkint_bit.hextstblfc = TRUE; - break; - case CRM_PLL_READY_INT_FLAG: - CRM->clkint_bit.pllstblfc = TRUE; - break; - case CRM_CLOCK_FAILURE_INT_FLAG: - CRM->clkint_bit.cfdfc = TRUE; - break; - default: - break; - } -} - -/** - * @brief select rtc clock - * @param value - * this parameter can be one of the following values: - * - CRM_RTC_CLOCK_LEXT - * - CRM_RTC_CLOCK_LICK - * - CRM_RTC_CLOCK_HEXT_DIV - * @retval none - */ -void crm_rtc_clock_select(crm_rtc_clock_type value) -{ - CRM->bpdc_bit.rtcsel = value; -} - -/** - * @brief enable or disable rtc - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_rtc_clock_enable(confirm_state new_state) -{ - CRM->bpdc_bit.rtcen = new_state; -} - -/** - * @brief set crm ahb division - * @param value - * this parameter can be one of the following values: - * - CRM_AHB_DIV_1 - * - CRM_AHB_DIV_2 - * - CRM_AHB_DIV_4 - * - CRM_AHB_DIV_8 - * - CRM_AHB_DIV_16 - * - CRM_AHB_DIV_64 - * - CRM_AHB_DIV_128 - * - CRM_AHB_DIV_256 - * - CRM_AHB_DIV_512 - * @retval none - */ -void crm_ahb_div_set(crm_ahb_div_type value) -{ - CRM->cfg_bit.ahbdiv = value; -} - -/** - * @brief set crm apb1 division - * @param value - * this parameter can be one of the following values: - * - CRM_APB1_DIV_1 - * - CRM_APB1_DIV_2 - * - CRM_APB1_DIV_4 - * - CRM_APB1_DIV_8 - * - CRM_APB1_DIV_16 - * @retval none - */ -void crm_apb1_div_set(crm_apb1_div_type value) -{ - CRM->cfg_bit.apb1div = value; -} - -/** - * @brief set crm apb2 division - * @param value - * this parameter can be one of the following values: - * - CRM_APB2_DIV_1 - * - CRM_APB2_DIV_2 - * - CRM_APB2_DIV_4 - * - CRM_APB2_DIV_8 - * - CRM_APB2_DIV_16 - * @retval none - */ -void crm_apb2_div_set(crm_apb2_div_type value) -{ - CRM->cfg_bit.apb2div = value; -} - -/** - * @brief set crm adc division - * @param value - * this parameter can be one of the following values: - * - CRM_ADC_DIV_2 - * - CRM_ADC_DIV_4 - * - CRM_ADC_DIV_6 - * - CRM_ADC_DIV_8 - * - CRM_ADC_DIV_12 - * - CRM_ADC_DIV_16 - * @retval none - */ -void crm_adc_clock_div_set(crm_adc_div_type div_value) -{ - CRM->cfg_bit.adcdiv_l = div_value & 0x03; - CRM->cfg_bit.adcdiv_h = (div_value >> 2) & 0x01; -} - -/** - * @brief set crm usb division - * @param value - * this parameter can be one of the following values: - * - CRM_USB_DIV_1_5 - * - CRM_USB_DIV_1 - * - CRM_USB_DIV_2_5 - * - CRM_USB_DIV_2 - * - CRM_USB_DIV_3_5 - * - CRM_USB_DIV_3 - * - CRM_USB_DIV_4 - * @retval none - */ -void crm_usb_clock_div_set(crm_usb_div_type div_value) -{ - CRM->cfg_bit.usbdiv_l = div_value & 0x03; - CRM->cfg_bit.usbdiv_h = (div_value >> 2) & 0x01; -} - -/** - * @brief enable or disable clock failure detection - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_clock_failure_detection_enable(confirm_state new_state) -{ - CRM->ctrl_bit.cfden = new_state; -} - -/** - * @brief battery powered domain software reset - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_battery_powered_domain_reset(confirm_state new_state) -{ - CRM->bpdc_bit.bpdrst = new_state; -} - -/** - * @brief config crm pll - * @param clock_source - * this parameter can be one of the following values: - * - CRM_PLL_SOURCE_HICK - * - CRM_PLL_SOURCE_HEXT - * - CRM_PLL_SOURCE_HEXT_DIV - * @param mult_value (CRM_PLL_MULT_2~64) - * @param pll_range - * this parameter can be one of the following values: - * - CRM_PLL_OUTPUT_RANGE_LE72MHZ - * - CRM_PLL_OUTPUT_RANGE_GT72MHZ - * @retval none - */ -void crm_pll_config(crm_pll_clock_source_type clock_source, crm_pll_mult_type mult_value, crm_pll_output_range_type pll_range) -{ - /* config pll clock source */ - if(clock_source == CRM_PLL_SOURCE_HICK) - { - CRM->cfg_bit.pllrcs = FALSE; - } - else - { - CRM->cfg_bit.pllrcs = TRUE; - if(CRM_PLL_SOURCE_HEXT == clock_source) - { - CRM->cfg_bit.pllhextdiv = FALSE; - } - else - { - CRM->cfg_bit.pllhextdiv = TRUE; - } - } - - /* config pll multiplication factor */ - CRM->cfg_bit.pllmult_l = (mult_value & 0x0F); - CRM->cfg_bit.pllmult_h = ((mult_value & 0x30) >> 4); - - /* config pll output range */ - CRM->cfg_bit.pllrange = pll_range; -} - -/** - * @brief select system clock source - * @param value - * this parameter can be one of the following values: - * - CRM_SCLK_HICK - * - CRM_SCLK_HEXT - * - CRM_SCLK_PLL - * @retval none - */ -void crm_sysclk_switch(crm_sclk_type value) -{ - CRM->cfg_bit.sclksel = value; -} - -/** - * @brief indicate which clock source is used as system clock - * @param none - * @retval crm_sclk - * this return can be one of the following values: - * - CRM_SCLK_HICK - * - CRM_SCLK_HEXT - * - CRM_SCLK_PLL - */ -crm_sclk_type crm_sysclk_switch_status_get(void) -{ - return (crm_sclk_type)CRM->cfg_bit.sclksts; -} - -/** - * @brief get crm clocks freqency - * @param clocks - * - pointer to the crm_clocks_freq structure - * @retval none - */ -void crm_clocks_freq_get(crm_clocks_freq_type *clocks_struct) -{ - uint32_t hext_prediv = 0, pll_mult = 0, pll_mult_h = 0, pll_clock_source = 0, temp = 0, div_value = 0; - crm_sclk_type sclk_source; - - static const uint8_t sclk_ahb_div_table[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - static const uint8_t ahb_apb1_div_table[8] = {0, 0, 0, 0, 1, 2, 3, 4}; - static const uint8_t ahb_apb2_div_table[8] = {0, 0, 0, 0, 1, 2, 3, 4}; - static const uint8_t adc_div_table[8] = {2, 4, 6, 8, 2, 12, 8, 16}; - - /* get sclk source */ - sclk_source = crm_sysclk_switch_status_get(); - - switch(sclk_source) - { - case CRM_SCLK_HICK: - if(((CRM->misc3_bit.hick_to_sclk) != RESET) && ((CRM->misc1_bit.hickdiv) != RESET)) - clocks_struct->sclk_freq = HICK_VALUE * 6; - else - clocks_struct->sclk_freq = HICK_VALUE; - break; - case CRM_SCLK_HEXT: - clocks_struct->sclk_freq = HEXT_VALUE; - break; - case CRM_SCLK_PLL: - pll_clock_source = CRM->cfg_bit.pllrcs; - /* get multiplication factor */ - pll_mult = CRM->cfg_bit.pllmult_l; - pll_mult_h = CRM->cfg_bit.pllmult_h; - - /* process high bits */ - if((pll_mult_h != 0U) || (pll_mult == 15U)) - { - pll_mult += ((16U * pll_mult_h) + 1U); - } - else - { - pll_mult += 2U; - } - - if (pll_clock_source == 0x00) - { - /* hick divided by 2 selected as pll clock entry */ - clocks_struct->sclk_freq = (HICK_VALUE >> 1) * pll_mult; - } - else - { - /* hext selected as pll clock entry */ - if (CRM->cfg_bit.pllhextdiv != RESET) - { - hext_prediv = CRM->misc3_bit.hextdiv; - /* hext clock divided by 2 */ - clocks_struct->sclk_freq = (HEXT_VALUE / (hext_prediv + 2)) * pll_mult; - } - else - { - clocks_struct->sclk_freq = HEXT_VALUE * pll_mult; - } - } - break; - default: - clocks_struct->sclk_freq = HICK_VALUE; - break; - } - - /* compute sclk, ahbclk, abp1clk apb2clk and adcclk frequencies */ - /* get ahb division */ - temp = CRM->cfg_bit.ahbdiv; - div_value = sclk_ahb_div_table[temp]; - /* ahbclk frequency */ - clocks_struct->ahb_freq = clocks_struct->sclk_freq >> div_value; - - /* get apb1 division */ - temp = CRM->cfg_bit.apb1div; - div_value = ahb_apb1_div_table[temp]; - /* apb1clk frequency */ - clocks_struct->apb1_freq = clocks_struct->ahb_freq >> div_value; - - /* get apb2 division */ - temp = CRM->cfg_bit.apb2div; - div_value = ahb_apb2_div_table[temp]; - /* apb2clk frequency */ - clocks_struct->apb2_freq = clocks_struct->ahb_freq >> div_value; - - /* get adc division */ - temp = CRM->cfg_bit.adcdiv_h; - temp = ((temp << 2) | (CRM->cfg_bit.adcdiv_l)); - div_value = adc_div_table[temp]; - /* adcclk clock frequency */ - clocks_struct->adc_freq = clocks_struct->apb2_freq / div_value; -} - -/** - * @brief set crm clkout - * @param clkout - * this parameter can be one of the following values: - * - CRM_CLKOUT_NOCLK - * - CRM_CLKOUT_LICK - * - CRM_CLKOUT_LEXT - * - CRM_CLKOUT_SCLK - * - CRM_CLKOUT_HICK - * - CRM_CLKOUT_HEXT - * - CRM_CLKOUT_PLL_DIV_2 - * - CRM_CLKOUT_PLL_DIV_4 - * - CRM_CLKOUT_USB - * - CRM_CLKOUT_ADC - * @retval none - */ -void crm_clock_out_set(crm_clkout_select_type clkout) -{ - CRM->cfg_bit.clkout_sel = clkout & 0x7; - CRM->misc1_bit.clkout_sel = (clkout >> 3) & 0x1; -} - -/** - * @brief config crm interrupt - * @param int - * this parameter can be any combination of the following values: - * - CRM_LICK_STABLE_INT - * - CRM_LEXT_STABLE_INT - * - CRM_HICK_STABLE_INT - * - CRM_HEXT_STABLE_INT - * - CRM_PLL_STABLE_INT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_interrupt_enable(uint32_t crm_int, confirm_state new_state) -{ - if(new_state == TRUE) - CRM->clkint |= crm_int; - else - CRM->clkint &= ~crm_int; -} - -/** - * @brief auto step clock switch enable - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_auto_step_mode_enable(confirm_state new_state) -{ - if(new_state == TRUE) - CRM->misc3_bit.auto_step_en = CRM_AUTO_STEP_MODE_ENABLE; - else - CRM->misc3_bit.auto_step_en = CRM_AUTO_STEP_MODE_DISABLE; -} - -/** - * @brief usbdev interrupt remapping control - * @param int_remap - * this parameter can be one of the following values: - * - CRM_USB_INT19_INT20 - * - CRM_USB_INT73_INT74 - * @retval none - */ -void crm_usb_interrupt_remapping_set(crm_usb_int_map_type int_remap) -{ - CRM->intmap_bit.usbintmap = int_remap; -} - -/** - * @brief config hick divider select - * @param value - * this parameter can be one of the following values: - * - CRM_HICK48_DIV6 - * - CRM_HICK48_NODIV - * @retval none - */ -void crm_hick_divider_select(crm_hick_div_6_type value) -{ - CRM->misc1_bit.hickdiv = value; -} - -/** - * @brief hick as system clock frequency select - * @param value - * this parameter can be one of the following values: - * - CRM_HICK_SCLK_8MHZ - * - CRM_HICK_SCLK_48MHZ - * @retval none - */ -void crm_hick_sclk_frequency_select(crm_hick_sclk_frequency_type value) -{ - crm_hick_divider_select(CRM_HICK48_NODIV); - CRM->misc3_bit.hick_to_sclk = value; -} - -/** - * @brief usb 48 mhz clock source select - * @param value - * this parameter can be one of the following values: - * - CRM_USB_CLOCK_SOURCE_PLL - * - CRM_USB_CLOCK_SOURCE_HICK - * @retval none - */ -void crm_usb_clock_source_select(crm_usb_clock_source_type value) -{ - if(value == CRM_USB_CLOCK_SOURCE_HICK) - { - crm_hick_sclk_frequency_select(CRM_HICK_SCLK_48MHZ); - } - CRM->misc3_bit.hick_to_usb = value; -} - -/** - * @brief enable or disable clkout direct to tmr10 channel 1 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void crm_clkout_to_tmr10_enable(confirm_state new_state) -{ - CRM->misc2_bit.clk_to_tmr = new_state; -} - -/** - * @brief set hext clock division - * @param value - * this parameter can be one of the following values: - * - CRM_HEXT_DIV_2 - * - CRM_HEXT_DIV_3 - * - CRM_HEXT_DIV_4 - * - CRM_HEXT_DIV_5 - * @retval none - */ -void crm_hext_clock_div_set(crm_hext_div_type value) -{ - CRM->misc3_bit.hextdiv = value; -} - -/** - * @brief set crm clkout division - * @param clkout_div - * this parameter can be one of the following values: - * - CRM_CLKOUT_DIV_1 - * - CRM_CLKOUT_DIV_2 - * - CRM_CLKOUT_DIV_4 - * - CRM_CLKOUT_DIV_8 - * - CRM_CLKOUT_DIV_16 - * - CRM_CLKOUT_DIV_64 - * - CRM_CLKOUT_DIV_128 - * - CRM_CLKOUT_DIV_256 - * - CRM_CLKOUT_DIV_512 - * @retval none - */ -void crm_clkout_div_set(crm_clkout_div_type clkout_div) -{ - CRM->misc1_bit.clkoutdiv = clkout_div; -} - -#if defined (AT32F407xx) -/** - * @brief set emac output pulse width - * @param width - * this parameter can be one of the following values: - * - CRM_EMAC_PULSE_125MS - * - CRM_EMAC_PULSE_1SCLK - * @retval none - */ -void crm_emac_output_pulse_set(crm_emac_output_pulse_type width) -{ - CRM->misc3_bit.emac_pps_sel = width; -} -#endif - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_dac.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_dac.c deleted file mode 100644 index b956361..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_dac.c +++ /dev/null @@ -1,380 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_dac.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the dac firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup DAC - * @brief DAC driver modules - * @{ - */ - -#ifdef DAC_MODULE_ENABLED - -/** @defgroup DAC_private_functions - * @{ - */ - -/** - * @brief dac reset - * @param none - * @retval none - */ -void dac_reset(void) -{ - crm_periph_reset(CRM_DAC_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_DAC_PERIPH_RESET, FALSE); -} - -/** - * @brief enable or disable dac - * @param dac_select - * this parameter can be one of the following values: - * - DAC1_SELECT - * - DAC2_SELECT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void dac_enable(dac_select_type dac_select, confirm_state new_state) -{ - switch(dac_select) - { - case DAC1_SELECT: - DAC->ctrl_bit.d1en = new_state; - break; - case DAC2_SELECT: - DAC->ctrl_bit.d2en = new_state; - break; - default: - break; - } -} - -/** - * @brief enable or disable dac output buffer - * @param dac_select - * this parameter can be one of the following values: - * - DAC1_SELECT - * - DAC2_SELECT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void dac_output_buffer_enable(dac_select_type dac_select, confirm_state new_state) -{ - new_state = (confirm_state)!new_state; - switch(dac_select) - { - case DAC1_SELECT: - DAC->ctrl_bit.d1obdis = new_state; - break; - case DAC2_SELECT: - DAC->ctrl_bit.d2obdis = new_state; - break; - default: - break; - } -} - -/** - * @brief enable or disable dac trigger - * @param dac_select - * this parameter can be one of the following values: - * - DAC1_SELECT - * - DAC2_SELECT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void dac_trigger_enable(dac_select_type dac_select, confirm_state new_state) -{ - switch(dac_select) - { - case DAC1_SELECT: - DAC->ctrl_bit.d1trgen = new_state; - break; - case DAC2_SELECT: - DAC->ctrl_bit.d2trgen = new_state; - break; - default: - break; - } -} - -/** - * @brief select dac trigger - * @param dac_select - * this parameter can be one of the following values: - * - DAC1_SELECT - * - DAC2_SELECT - * @param dac_trigger_source - * this parameter can be one of the following values: - * - DAC_TMR6_TRGOUT_EVENT - * - DAC_TMR8_TRGOUT_EVENT - * - DAC_TMR7_TRGOUT_EVENT - * - DAC_TMR5_TRGOUT_EVENT - * - DAC_TMR2_TRGOUT_EVENT - * - DAC_TMR4_TRGOUT_EVENT - * - DAC_EXTERNAL_INTERRUPT_LINE_9 - * - DAC_SOFTWARE_TRIGGER - * @retval none - */ -void dac_trigger_select(dac_select_type dac_select, dac_trigger_type dac_trigger_source) -{ - switch(dac_select) - { - case DAC1_SELECT: - DAC->ctrl_bit.d1trgsel = dac_trigger_source; - break; - case DAC2_SELECT: - DAC->ctrl_bit.d2trgsel = dac_trigger_source; - break; - default: - break; - } -} - -/** - * @brief generate dac software trigger - * @param dac_select - * this parameter can be one of the following values: - * - DAC1_SELECT - * - DAC2_SELECT - * @retval none - */ -void dac_software_trigger_generate(dac_select_type dac_select) -{ - switch(dac_select) - { - case DAC1_SELECT: - DAC->swtrg_bit.d1swtrg = TRUE; - break; - case DAC2_SELECT: - DAC->swtrg_bit.d2swtrg = TRUE; - break; - default: - break; - } -} - -/** - * @brief generate dac dual software trigger synchronously - * @param none - * @retval none - */ -void dac_dual_software_trigger_generate(void) -{ - DAC->swtrg |= 0x03; -} - -/** - * @brief generate dac wave - * @param dac_select - * this parameter can be one of the following values: - * - DAC1_SELECT - * - DAC2_SELECT - * @param dac_wave - * this parameter can be one of the following values: - * - DAC_WAVE_GENERATE_NONE - * - DAC_WAVE_GENERATE_NOISE - * - DAC_WAVE_GENERATE_TRIANGLE - * @retval none - */ -void dac_wave_generate(dac_select_type dac_select, dac_wave_type dac_wave) -{ - switch(dac_select) - { - case DAC1_SELECT: - DAC->ctrl_bit.d1nm = dac_wave; - break; - case DAC2_SELECT: - DAC->ctrl_bit.d2nm = dac_wave; - break; - default: - break; - } -} - -/** - * @brief select dac mask amplitude - * @param dac_select - * this parameter can be one of the following values: - * - DAC1_SELECT - * - DAC2_SELECT - * @param dac_mask_amplitude - * this parameter can be one of the following values: - * - DAC_LSFR_BIT0_AMPLITUDE_1 - * - DAC_LSFR_BIT10_AMPLITUDE_3 - * - DAC_LSFR_BIT20_AMPLITUDE_7 - * - DAC_LSFR_BIT30_AMPLITUDE_15 - * - DAC_LSFR_BIT40_AMPLITUDE_31 - * - DAC_LSFR_BIT50_AMPLITUDE_63 - * - DAC_LSFR_BIT60_AMPLITUDE_127 - * - DAC_LSFR_BIT70_AMPLITUDE_255 - * - DAC_LSFR_BIT80_AMPLITUDE_511 - * - DAC_LSFR_BIT90_AMPLITUDE_1023 - * - DAC_LSFR_BITA0_AMPLITUDE_2047 - * - DAC_LSFR_BITB0_AMPLITUDE_4095 - * @retval none - */ -void dac_mask_amplitude_select(dac_select_type dac_select, dac_mask_amplitude_type dac_mask_amplitude) -{ - switch(dac_select) - { - case DAC1_SELECT: - DAC->ctrl_bit.d1nbsel = dac_mask_amplitude; - break; - case DAC2_SELECT: - DAC->ctrl_bit.d2nbsel = dac_mask_amplitude; - break; - default: - break; - } -} - -/** - * @brief enable or disable dac dma - * @param dac_select - * this parameter can be one of the following values: - * - DAC1_SELECT - * - DAC2_SELECT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void dac_dma_enable(dac_select_type dac_select, confirm_state new_state) -{ - switch(dac_select) - { - case DAC1_SELECT: - DAC->ctrl_bit.d1dmaen = new_state; - break; - case DAC2_SELECT: - DAC->ctrl_bit.d2dmaen = new_state; - break; - default: - break; - } -} - -/** - * @brief get dac data output - * @param dac_select - * this parameter can be one of the following values: - * - DAC1_SELECT - * - DAC2_SELECT - * @retval dac channel data output - */ -uint16_t dac_data_output_get(dac_select_type dac_select) -{ - uint16_t data_output =0 ; - switch(dac_select) - { - case DAC1_SELECT: - data_output = DAC->d1odt_bit.d1odt; - break; - case DAC2_SELECT: - data_output = DAC->d2odt_bit.d2odt; - break; - default: - break; - } - return data_output; -} - -/** - * @brief set dac1 data - * @param dac1_aligned - * this parameter can be one of the following values: - * DAC1_12BIT_RIGHT - * DAC1_12BIT_LEFT - * DAC1_8BIT_RIGHT - * @param dac1_data :indecate from selected data holding register - * @retval none - */ -void dac_1_data_set(dac1_aligned_data_type dac1_aligned, uint16_t dac1_data) -{ - *(__IO uint32_t *) dac1_aligned = dac1_data; -} - -/** - * @brief set dac2 data - * @param dac2_aligned - * this parameter can be one of the following values: - * DAC2_12BIT_RIGHT - * DAC2_12BIT_LEFT - * DAC2_8BIT_RIGHT - * @param dac2_data :indecate from selected data holding register - * @retval none - */ -void dac_2_data_set(dac2_aligned_data_type dac2_aligned, uint16_t dac2_data) -{ - *(__IO uint32_t *) dac2_aligned = dac2_data; -} - -/** - * @brief set dac dual data - * @param dac_dual - * this parameter can be one of the following values: - * DAC_DUAL_12BIT_RIGHT - * DAC_DUAL_12BIT_LEFT - * DAC_DUAL_8BIT_RIGHT - * @param data1 :dac1 channel indecate from selected data holding register - * @param data2 :dac1 channel indecate from selected data holding register - * @retval none - */ -void dac_dual_data_set(dac_dual_data_type dac_dual, uint16_t data1, uint16_t data2) -{ - switch(dac_dual) - { - case DAC_DUAL_12BIT_RIGHT: - *(__IO uint32_t *) dac_dual = (uint32_t)(data1 | (data2 << 16)); - break; - case DAC_DUAL_12BIT_LEFT: - *(__IO uint32_t *) dac_dual = (uint32_t)(data1 | (data2 << 16)); - break; - case DAC_DUAL_8BIT_RIGHT: - *(__IO uint32_t *) dac_dual = (uint32_t)(data1 | (data2 << 8)); - break; - default: - break; - } -} - - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_debug.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_debug.c deleted file mode 100644 index 893cd60..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_debug.c +++ /dev/null @@ -1,97 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_debug.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the debug firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup DEBUG - * @brief DEBUG driver modules - * @{ - */ - -#ifdef DEBUG_MODULE_ENABLED - -/** @defgroup DEBUG_private_functions - * @{ - */ - -/** - * @brief get debug device id - * @param none - * @retval the debug device id - */ -uint32_t debug_device_id_get(void) -{ - return DEBUGMCU->pid; -} - -/** - * @brief set periph debug mode - * @param periph_debug_mode - * this parameter can be any combination of the following values: - * - DEBUG_SLEEP - DEBUG_DEEPSLEEP - * - DEBUG_STANDBY - DEBUG_WDT_PAUSE - * - DEBUG_WWDT_PAUSE - DEBUG_TMR1_PAUSE - * - DEBUG_TMR3_PAUSE - DEBUG_I2C1_SMBUS_TIMEOUT - * - DEBUG_I2C2_SMBUS_TIMEOUT - DEBUG_I2C3_SMBUS_TIMEOUT - * - DEBUG_TMR2_PAUSE - DEBUG_TMR4_PAUSE - * - DEBUG_CAN1_PAUSE - DEBUG_TMR8_PAUSE - * - DEBUG_TMR5_PAUSE - DEBUG_TMR6_PAUSE - * - DEBUG_TMR7_PAUSE - DEBUG_CAN2_PAUSE - * - DEBUG_TMR12_PAUSE - DEBUG_TMR13_PAUSE - * - DEBUG_TMR14_PAUSE - DEBUG_TMR9_PAUSE - * - DEBUG_TMR10_PAUSE - DEBUG_TMR11_PAUSE - * @param new_state (TRUE or FALSE) - * @retval none - */ -void debug_periph_mode_set(uint32_t periph_debug_mode, confirm_state new_state) -{ - if(new_state != FALSE) - { - DEBUGMCU->ctrl |= periph_debug_mode; - } - else - { - DEBUGMCU->ctrl &= ~periph_debug_mode; - } -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_dma.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_dma.c deleted file mode 100644 index 39e036d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_dma.c +++ /dev/null @@ -1,431 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_dma.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the dma firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup DMA - * @brief DMA driver modules - * @{ - */ - -#ifdef DMA_MODULE_ENABLED - -/** @defgroup DMA_private_functions - * @{ - */ - -/** - * @brief reset the dmax channely registers. - * @param dmax_channely: - * this parameter can be one of the following values: - * - DMA1_CHANNEL1 - * - DMA1_CHANNEL2 - * - DMA1_CHANNEL3 - * - DMA1_CHANNEL4 - * - DMA1_CHANNEL5 - * - DMA1_CHANNEL6 - * - DMA1_CHANNEL7 - * - DMA2_CHANNEL1 - * - DMA2_CHANNEL2 - * - DMA2_CHANNEL3 - * - DMA2_CHANNEL4 - * - DMA2_CHANNEL5 - * - DMA2_CHANNEL6 - * - DMA2_CHANNEL7 - * @retval none - */ -void dma_reset(dma_channel_type* dmax_channely) -{ - uint32_t temp = 0; - dmax_channely->ctrl_bit.chen = FALSE; - dmax_channely->ctrl = 0; - dmax_channely->dtcnt = 0; - dmax_channely->paddr = 0; - dmax_channely->maddr = 0; - - temp = (uint32_t)dmax_channely; - - if((temp & 0x4ff) < 0x408) - { - /* dma1 channel */ - DMA1->clr |= (uint32_t)(0x0f << ((((temp & 0xff) - 0x08) / 0x14) * 4)); - } - else if((temp & 0x4ff) < 0x488) - { - /* dma2 channel */ - DMA2->clr |= (uint32_t)(0x0f << ((((temp & 0xff) - 0x08) / 0x14) * 4)); - } -} - -/** - * @brief set the number of data to be transferred - * @param dmax_channely: - * this parameter can be one of the following values: - * - DMA1_CHANNEL1 - * - DMA1_CHANNEL2 - * - DMA1_CHANNEL3 - * - DMA1_CHANNEL4 - * - DMA1_CHANNEL5 - * - DMA1_CHANNEL6 - * - DMA1_CHANNEL7 - * - DMA2_CHANNEL1 - * - DMA2_CHANNEL2 - * - DMA2_CHANNEL3 - * - DMA2_CHANNEL4 - * - DMA2_CHANNEL5 - * - DMA2_CHANNEL6 - * - DMA2_CHANNEL7 - * @param data_number: the number of data to be transferred(0x0000~0xFFFF) - * transfer. - * @retval none. - */ -void dma_data_number_set(dma_channel_type* dmax_channely, uint16_t data_number) -{ - dmax_channely->dtcnt = data_number; -} - -/** - * @brief get number of data from dtcnt register - * @param dmax_channely: - * this parameter can be one of the following values: - * - DMA1_CHANNEL1 - * - DMA1_CHANNEL2 - * - DMA1_CHANNEL3 - * - DMA1_CHANNEL4 - * - DMA1_CHANNEL5 - * - DMA1_CHANNEL6 - * - DMA1_CHANNEL7 - * - DMA2_CHANNEL1 - * - DMA2_CHANNEL2 - * - DMA2_CHANNEL3 - * - DMA2_CHANNEL4 - * - DMA2_CHANNEL5 - * - DMA2_CHANNEL6 - * - DMA2_CHANNEL7 - * @retval the number of data. - */ -uint16_t dma_data_number_get(dma_channel_type* dmax_channely) -{ - return (uint16_t)dmax_channely->dtcnt; -} - -/** - * @brief enable or disable dma interrupt - * @param dmax_channely: - * this parameter can be one of the following values: - * - DMA1_CHANNEL1 - * - DMA1_CHANNEL2 - * - DMA1_CHANNEL3 - * - DMA1_CHANNEL4 - * - DMA1_CHANNEL5 - * - DMA1_CHANNEL6 - * - DMA1_CHANNEL7 - * - DMA2_CHANNEL1 - * - DMA2_CHANNEL2 - * - DMA2_CHANNEL3 - * - DMA2_CHANNEL4 - * - DMA2_CHANNEL5 - * - DMA2_CHANNEL6 - * - DMA2_CHANNEL7 - * @param dma_int: - * this parameter can be any combination of the following values: - * - DMA_FDT_INT - * - DMA_HDT_INT - * - DMA_DTERR_INT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void dma_interrupt_enable(dma_channel_type* dmax_channely, uint32_t dma_int, confirm_state new_state) -{ - if (new_state != FALSE) - { - dmax_channely->ctrl |= dma_int; - } - else - { - dmax_channely->ctrl &= ~dma_int; - } -} - -/** - * @brief enable or disable dma channely - * @param dmax_channely: - * this parameter can be one of the following values: - * - DMA1_CHANNEL1 - * - DMA1_CHANNEL2 - * - DMA1_CHANNEL3 - * - DMA1_CHANNEL4 - * - DMA1_CHANNEL5 - * - DMA1_CHANNEL6 - * - DMA1_CHANNEL7 - * - DMA2_CHANNEL1 - * - DMA2_CHANNEL2 - * - DMA2_CHANNEL3 - * - DMA2_CHANNEL4 - * - DMA2_CHANNEL5 - * - DMA2_CHANNEL6 - * - DMA2_CHANNEL7 - * @param new_state (TRUE or FALSE) - * @retval None - */ -void dma_channel_enable(dma_channel_type* dmax_channely, confirm_state new_state) -{ - dmax_channely->ctrl_bit.chen = new_state; -} - -/** - * @brief initialize the dma_x flexible function according to the specified parameters. - * @param dma_x: - * this parameter can be one of the following values: - * - DMA1 - * - DMA2 - * @param flex_channelx: - * this parameter can be one of the following values: - * - FLEX_CHANNEL1 - * - FLEX_CHANNEL2 - * - FLEX_CHANNEL3 - * - FLEX_CHANNEL4 - * - FLEX_CHANNEL5 - * - FLEX_CHANNEL6 - * - FLEX_CHANNEL7 - * @param flexible_request: every peripheral have specified hardware_id. - * this parameter can be one of the following values: - * - DMA_FLEXIBLE_ADC1 - DMA_FLEXIBLE_ADC3 - DMA_FLEXIBLE_DAC1 - DMA_FLEXIBLE_DAC2 - * - DMA_FLEXIBLE_SPI1_RX - DMA_FLEXIBLE_SPI1_TX - DMA_FLEXIBLE_SPI2_RX - DMA_FLEXIBLE_SPI2_TX - * - DMA_FLEXIBLE_SPI3_RX - DMA_FLEXIBLE_SPI3_TX - DMA_FLEXIBLE_SPI4_RX - DMA_FLEXIBLE_SPI4_TX - * - DMA_FLEXIBLE_I2S2EXT_RX - DMA_FLEXIBLE_I2S2EXT_TX - DMA_FLEXIBLE_I2S3EXT_RX - DMA_FLEXIBLE_I2S3EXT_TX - * - DMA_FLEXIBLE_UART1_RX - DMA_FLEXIBLE_UART1_TX - DMA_FLEXIBLE_UART2_RX - DMA_FLEXIBLE_UART2_TX - * - DMA_FLEXIBLE_UART3_RX - DMA_FLEXIBLE_UART3_TX - DMA_FLEXIBLE_UART4_RX - DMA_FLEXIBLE_UART4_TX - * - DMA_FLEXIBLE_UART5_RX - DMA_FLEXIBLE_UART5_TX - DMA_FLEXIBLE_UART6_RX - DMA_FLEXIBLE_UART6_TX - * - DMA_FLEXIBLE_UART7_RX - DMA_FLEXIBLE_UART7_TX - DMA_FLEXIBLE_UART8_RX - DMA_FLEXIBLE_UART8_TX - * - DMA_FLEXIBLE_I2C1_RX - DMA_FLEXIBLE_I2C1_TX - DMA_FLEXIBLE_I2C2_RX - DMA_FLEXIBLE_I2C2_TX - * - DMA_FLEXIBLE_I2C3_RX - DMA_FLEXIBLE_I2C3_TX - DMA_FLEXIBLE_SDIO1 - DMA_FLEXIBLE_SDIO2 - * - DMA_FLEXIBLE_TMR1_TRIG - DMA_FLEXIBLE_TMR1_HALL - DMA_FLEXIBLE_TMR1_OVERFLOW- DMA_FLEXIBLE_TMR1_CH1 - * - DMA_FLEXIBLE_TMR1_CH2 - DMA_FLEXIBLE_TMR1_CH3 - DMA_FLEXIBLE_TMR1_CH4 - DMA_FLEXIBLE_TMR2_TRIG - * - DMA_FLEXIBLE_TMR2_OVERFLOW- DMA_FLEXIBLE_TMR2_CH1 - DMA_FLEXIBLE_TMR2_CH2 - DMA_FLEXIBLE_TMR2_CH3 - * - DMA_FLEXIBLE_TMR2_CH4 - DMA_FLEXIBLE_TMR3_TRIG - DMA_FLEXIBLE_TMR3_OVERFLOW- DMA_FLEXIBLE_TMR3_CH1 - * - DMA_FLEXIBLE_TMR3_CH2 - DMA_FLEXIBLE_TMR3_CH3 - DMA_FLEXIBLE_TMR3_CH4 - DMA_FLEXIBLE_TMR4_TRIG - * - DMA_FLEXIBLE_TMR4_OVERFLOW- DMA_FLEXIBLE_TMR4_CH1 - DMA_FLEXIBLE_TMR4_CH2 - DMA_FLEXIBLE_TMR4_CH3 - * - DMA_FLEXIBLE_TMR4_CH4 - DMA_FLEXIBLE_TMR5_TRIG - DMA_FLEXIBLE_TMR5_OVERFLOW- DMA_FLEXIBLE_TMR5_CH1 - * - DMA_FLEXIBLE_TMR5_CH2 - DMA_FLEXIBLE_TMR5_CH3 - DMA_FLEXIBLE_TMR5_CH4 - DMA_FLEXIBLE_TMR6_OVERFLOW - * - DMA_FLEXIBLE_TMR7_OVERFLOW- DMA_FLEXIBLE_TMR8_TRIG - DMA_FLEXIBLE_TMR8_HALL - DMA_FLEXIBLE_TMR8_OVERFLOW - * - DMA_FLEXIBLE_TMR8_CH1 - DMA_FLEXIBLE_TMR8_CH2 - DMA_FLEXIBLE_TMR8_CH3 - DMA_FLEXIBLE_TMR8_CH4 - * @retval none - */ - -void dma_flexible_config(dma_type* dma_x, uint8_t flex_channelx, dma_flexible_request_type flexible_request) -{ - if(dma_x->src_sel1_bit.dma_flex_en == RESET) - { - dma_x->src_sel1_bit.dma_flex_en = TRUE; - } - - if(flex_channelx == FLEX_CHANNEL1) - { - dma_x->src_sel0_bit.ch1_src = flexible_request; - } - else if(flex_channelx == FLEX_CHANNEL2) - { - dma_x->src_sel0_bit.ch2_src = flexible_request; - } - else if(flex_channelx == FLEX_CHANNEL3) - { - dma_x->src_sel0_bit.ch3_src = flexible_request; - } - else if(flex_channelx == FLEX_CHANNEL4) - { - dma_x->src_sel0_bit.ch4_src = flexible_request; - } - else if(flex_channelx == FLEX_CHANNEL5) - { - dma_x->src_sel1_bit.ch5_src = flexible_request; - } - else if(flex_channelx == FLEX_CHANNEL6) - { - dma_x->src_sel1_bit.ch6_src = flexible_request; - } - else - { - if(flex_channelx == FLEX_CHANNEL7) - { - dma_x->src_sel1_bit.ch7_src = flexible_request; - } - } -} - -/** - * @brief get dma flag - * @param dmax_flag - * this parameter can be one of the following values: - * - DMA1_GL1_FLAG - DMA1_FDT1_FLAG - DMA1_HDT1_FLAG - DMA1_DTERR1_FLAG - * - DMA1_GL2_FLAG - DMA1_FDT2_FLAG - DMA1_HDT2_FLAG - DMA1_DTERR2_FLAG - * - DMA1_GL3_FLAG - DMA1_FDT3_FLAG - DMA1_HDT3_FLAG - DMA1_DTERR3_FLAG - * - DMA1_GL4_FLAG - DMA1_FDT4_FLAG - DMA1_HDT4_FLAG - DMA1_DTERR4_FLAG - * - DMA1_GL5_FLAG - DMA1_FDT5_FLAG - DMA1_HDT5_FLAG - DMA1_DTERR5_FLAG - * - DMA1_GL6_FLAG - DMA1_FDT6_FLAG - DMA1_HDT6_FLAG - DMA1_DTERR6_FLAG - * - DMA1_GL7_FLAG - DMA1_FDT7_FLAG - DMA1_HDT7_FLAG - DMA1_DTERR7_FLAG - * - DMA2_GL1_FLAG - DMA2_FDT1_FLAG - DMA2_HDT1_FLAG - DMA2_DTERR1_FLAG - * - DMA2_GL2_FLAG - DMA2_FDT2_FLAG - DMA2_HDT2_FLAG - DMA2_DTERR2_FLAG - * - DMA2_GL3_FLAG - DMA2_FDT3_FLAG - DMA2_HDT3_FLAG - DMA2_DTERR3_FLAG - * - DMA2_GL4_FLAG - DMA2_FDT4_FLAG - DMA2_HDT4_FLAG - DMA2_DTERR4_FLAG - * - DMA2_GL5_FLAG - DMA2_FDT5_FLAG - DMA2_HDT5_FLAG - DMA2_DTERR5_FLAG - * - DMA2_GL6_FLAG - DMA2_FDT6_FLAG - DMA2_HDT6_FLAG - DMA2_DTERR6_FLAG - * - DMA2_GL7_FLAG - DMA2_FDT7_FLAG - DMA2_HDT7_FLAG - DMA2_DTERR7_FLAG - * @retval state of dma flag - */ -flag_status dma_flag_get(uint32_t dmax_flag) -{ - flag_status status = RESET; - uint32_t temp = 0; - - if(dmax_flag > 0x10000000) - { - temp = DMA2->sts; - } - else - { - temp = DMA1->sts; - } - - if ((temp & dmax_flag) != (uint16_t)RESET) - { - status = SET; - } - else - { - status = RESET; - } - - return status; -} - -/** - * @brief clear dma flag - * @param dmax_flag - * this parameter can be one of the following values: - * - DMA1_GL1_FLAG - DMA1_FDT1_FLAG - DMA1_HDT1_FLAG - DMA1_DTERR1_FLAG - * - DMA1_GL2_FLAG - DMA1_FDT2_FLAG - DMA1_HDT2_FLAG - DMA1_DTERR2_FLAG - * - DMA1_GL3_FLAG - DMA1_FDT3_FLAG - DMA1_HDT3_FLAG - DMA1_DTERR3_FLAG - * - DMA1_GL4_FLAG - DMA1_FDT4_FLAG - DMA1_HDT4_FLAG - DMA1_DTERR4_FLAG - * - DMA1_GL5_FLAG - DMA1_FDT5_FLAG - DMA1_HDT5_FLAG - DMA1_DTERR5_FLAG - * - DMA1_GL6_FLAG - DMA1_FDT6_FLAG - DMA1_HDT6_FLAG - DMA1_DTERR6_FLAG - * - DMA1_GL7_FLAG - DMA1_FDT7_FLAG - DMA1_HDT7_FLAG - DMA1_DTERR7_FLAG - * - DMA2_GL1_FLAG - DMA2_FDT1_FLAG - DMA2_HDT1_FLAG - DMA2_DTERR1_FLAG - * - DMA2_GL2_FLAG - DMA2_FDT2_FLAG - DMA2_HDT2_FLAG - DMA2_DTERR2_FLAG - * - DMA2_GL3_FLAG - DMA2_FDT3_FLAG - DMA2_HDT3_FLAG - DMA2_DTERR3_FLAG - * - DMA2_GL4_FLAG - DMA2_FDT4_FLAG - DMA2_HDT4_FLAG - DMA2_DTERR4_FLAG - * - DMA2_GL5_FLAG - DMA2_FDT5_FLAG - DMA2_HDT5_FLAG - DMA2_DTERR5_FLAG - * - DMA2_GL6_FLAG - DMA2_FDT6_FLAG - DMA2_HDT6_FLAG - DMA2_DTERR6_FLAG - * - DMA2_GL7_FLAG - DMA2_FDT7_FLAG - DMA2_HDT7_FLAG - DMA2_DTERR7_FLAG - * @retval none - */ -void dma_flag_clear(uint32_t dmax_flag) -{ - if(dmax_flag > 0x10000000) - { - DMA2->clr = (uint32_t)(dmax_flag & 0x0FFFFFFF); - } - else - { - DMA1->clr = dmax_flag; - } -} - -/** - * @brief dma init config with its default value. - * @param dma_init_struct : pointer to a dma_init_type structure which will - * be initialized. - * @retval none - */ -void dma_default_para_init(dma_init_type* dma_init_struct) -{ - dma_init_struct->peripheral_base_addr = 0x0; - dma_init_struct->memory_base_addr = 0x0; - dma_init_struct->direction = DMA_DIR_PERIPHERAL_TO_MEMORY; - dma_init_struct->buffer_size = 0x0; - dma_init_struct->peripheral_inc_enable = FALSE; - dma_init_struct->memory_inc_enable = FALSE; - dma_init_struct->peripheral_data_width = DMA_PERIPHERAL_DATA_WIDTH_BYTE; - dma_init_struct->memory_data_width = DMA_MEMORY_DATA_WIDTH_BYTE; - dma_init_struct->loop_mode_enable = FALSE; - dma_init_struct->priority = DMA_PRIORITY_LOW; -} - -/** - * @brief dma init - * @param dmax_channely: - * this parameter can be one of the following values: - * - DMA1_CHANNEL1 - * - DMA1_CHANNEL2 - * - DMA1_CHANNEL3 - * - DMA1_CHANNEL4 - * - DMA1_CHANNEL5 - * - DMA1_CHANNEL6 - * - DMA1_CHANNEL7 - * - DMA2_CHANNEL1 - * - DMA2_CHANNEL2 - * - DMA2_CHANNEL3 - * - DMA2_CHANNEL4 - * - DMA2_CHANNEL5 - * - DMA2_CHANNEL6 - * - DMA2_CHANNEL7 - * @param dma_initstruct : pointer to a dma_init_type structure. - * @retval none - */ -void dma_init(dma_channel_type* dmax_channely, dma_init_type* dma_init_struct) -{ - /* clear ctrl register dtd bit and m2m bit */ - dmax_channely->ctrl &= 0xbfef; - dmax_channely->ctrl |= dma_init_struct->direction; - - dmax_channely->ctrl_bit.chpl = dma_init_struct->priority; - dmax_channely->ctrl_bit.mwidth = dma_init_struct->memory_data_width; - dmax_channely->ctrl_bit.pwidth = dma_init_struct->peripheral_data_width; - dmax_channely->ctrl_bit.mincm = dma_init_struct->memory_inc_enable; - dmax_channely->ctrl_bit.pincm = dma_init_struct->peripheral_inc_enable; - dmax_channely->ctrl_bit.lm = dma_init_struct->loop_mode_enable; - dmax_channely->dtcnt = dma_init_struct->buffer_size; - dmax_channely->paddr = dma_init_struct->peripheral_base_addr; - dmax_channely->maddr = dma_init_struct->memory_base_addr; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_emac.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_emac.c deleted file mode 100644 index a8b93ce..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_emac.c +++ /dev/null @@ -1,2304 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_emac.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the emac firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup EMAC - * @brief EMAC driver modules - * @{ - */ - -#ifdef EMAC_MODULE_ENABLED - -/** @defgroup EMAC_private_functions - * @{ - */ - -#if defined (EMAC_BASE) -/** - * @brief global pointers on tx and rx descriptor used to track transmit and receive descriptors - */ -emac_dma_desc_type *dma_tx_desc_to_set; -emac_dma_desc_type *dma_rx_desc_to_get; - -/* emac private function */ -static void emac_delay(uint32_t delay); - -/** - * @brief deinitialize the emac peripheral registers to their default reset values. - * @param none - * @retval none - */ -void emac_reset(void) -{ - crm_periph_reset(CRM_EMAC_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_EMAC_PERIPH_RESET, FALSE); -} - -/** - * @brief initialize emac control structure - * @param emac_control_config_type - * @retval none - */ -void emac_control_para_init(emac_control_config_type *control_para) -{ - control_para->auto_nego = EMAC_AUTO_NEGOTIATION_OFF; - control_para->auto_pad_crc_strip = FALSE; - control_para->back_off_limit = EMAC_BACKOFF_LIMIT_0; - control_para->carrier_sense_disable = FALSE; - control_para->deferral_check = FALSE; - control_para->duplex_mode = EMAC_HALF_DUPLEX; - control_para->fast_ethernet_speed = EMAC_SPEED_10MBPS; - control_para->interframe_gap = EMAC_INTERFRAME_GAP_96BIT; - control_para->ipv4_checksum_offload = FALSE; - control_para->jabber_disable = FALSE; - control_para->loopback_mode = FALSE; - control_para->receive_own_disable = FALSE; - control_para->retry_disable = FALSE; - control_para->watchdog_disable = FALSE; -} - -/** - * @brief according to hclk to set mdc clock frequency. - * @param none - * @retval none - */ -void emac_clock_range_set(void) -{ - uint8_t bits_value = 0; - crm_clocks_freq_type clocks_freq = {0}; - - /* clear clock range bits */ - EMAC->miiaddr_bit.cr = bits_value; - - crm_clocks_freq_get(&clocks_freq); - - if((clocks_freq.ahb_freq >= EMAC_HCLK_BORDER_20MHZ) && (clocks_freq.ahb_freq < EMAC_HCLK_BORDER_35MHZ)) - { - bits_value = EMAC_CLOCK_RANGE_20_TO_35; - } - else if((clocks_freq.ahb_freq >= EMAC_HCLK_BORDER_35MHZ) && (clocks_freq.ahb_freq < EMAC_HCLK_BORDER_60MHZ)) - { - bits_value = EMAC_CLOCK_RANGE_35_TO_60; - } - else if((clocks_freq.ahb_freq >= EMAC_HCLK_BORDER_60MHZ) && (clocks_freq.ahb_freq < EMAC_HCLK_BORDER_100MHZ)) - { - bits_value = EMAC_CLOCK_RANGE_60_TO_100; - } - else if((clocks_freq.ahb_freq >= EMAC_HCLK_BORDER_100MHZ) && (clocks_freq.ahb_freq < EMAC_HCLK_BORDER_150MHZ)) - { - bits_value = EMAC_CLOCK_RANGE_100_TO_150; - } - else if((clocks_freq.ahb_freq >= EMAC_HCLK_BORDER_150MHZ) && (clocks_freq.ahb_freq <= EMAC_HCLK_BORDER_240MHZ)) - { - bits_value = EMAC_CLOCK_RANGE_150_TO_240; - } - - EMAC->miiaddr_bit.cr = bits_value; -} - -/** - * @brief configure emac control setting. - * @param control_struct: control setting of mac control register. - * @retval none - */ -void emac_control_config(emac_control_config_type *control_struct) -{ - emac_deferral_check_set(control_struct->deferral_check); - emac_backoff_limit_set(control_struct->back_off_limit); - emac_auto_pad_crc_stripping_set(control_struct->auto_pad_crc_strip); - emac_retry_disable(control_struct->retry_disable); - emac_ipv4_checksum_offload_set(control_struct->ipv4_checksum_offload); - emac_loopback_mode_enable(control_struct->loopback_mode); - emac_receive_own_disable(control_struct->receive_own_disable); - emac_carrier_sense_disable(control_struct->carrier_sense_disable); - emac_interframe_gap_set(control_struct->interframe_gap); - emac_jabber_disable(control_struct->jabber_disable); - emac_watchdog_disable(control_struct->watchdog_disable); -} - -/** - * @brief reset emac dma - * @param none - * @retval none - */ -void emac_dma_software_reset_set(void) -{ - EMAC_DMA->bm_bit.swr = 1; -} - -/** - * @brief get emac dma reset status - * @param none - * @retval TRUE of FALSE - */ -flag_status emac_dma_software_reset_get(void) -{ - if(EMAC_DMA->bm_bit.swr) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief enable emac and dma reception/transmission - * @param none - * @retval none - */ -void emac_start(void) -{ - /* enable transmit state machine of the mac for transmission on the mii */ - emac_trasmitter_enable(TRUE); - - /* flush transmit fifo */ - emac_dma_operations_set(EMAC_DMA_OPS_FLUSH_TRANSMIT_FIFO, TRUE); - - /* enable receive state machine of the mac for reception from the mii */ - emac_receiver_enable(TRUE); - - /* start dma transmission */ - emac_dma_operations_set(EMAC_DMA_OPS_START_STOP_TRANSMIT, TRUE); - - /* start dma reception */ - emac_dma_operations_set(EMAC_DMA_OPS_START_STOP_RECEIVE, TRUE); -} - -/** - * @brief stop emac and dma reception/transmission - * @param none - * @retval none - */ -void emac_stop(void) -{ - /* stop dma transmission */ - emac_dma_operations_set(EMAC_DMA_OPS_START_STOP_TRANSMIT, FALSE); - - /* stop dma reception */ - emac_dma_operations_set(EMAC_DMA_OPS_START_STOP_RECEIVE, FALSE); - - /* stop receive state machine of the mac for reception from the mii */ - emac_receiver_enable(FALSE); - - /* flush transmit fifo */ - emac_dma_operations_set(EMAC_DMA_OPS_FLUSH_TRANSMIT_FIFO, TRUE); - - /* stop transmit state machine of the mac for transmission on the mii */ - emac_trasmitter_enable(FALSE); -} - -/** - * @brief write phy data. - * @param address: phy address. - * @param reg: register of phy. - * @param data: value that wants to write to phy. - * @retval SUCCESS or ERROR - */ -error_status emac_phy_register_write(uint8_t address, uint8_t reg, uint16_t data) -{ - uint32_t timeout = 0; - - EMAC->miidt_bit.md = data; - - EMAC->miiaddr_bit.pa = address; - EMAC->miiaddr_bit.mii = reg; - EMAC->miiaddr_bit.mw = 1; - EMAC->miiaddr_bit.mb = 1; - - do - { - timeout++; - } while((EMAC->miiaddr_bit.mb) && (timeout < PHY_TIMEOUT)); - - if(timeout == PHY_TIMEOUT) - { - return ERROR; - } - return SUCCESS; -} - -/** - * @brief read phy data - * @param address: phy address. - * @param reg: register of phy. - * @param data: value that is read from phy. - * @retval SUCCESS or ERROR - */ -error_status emac_phy_register_read(uint8_t address, uint8_t reg, uint16_t *data) -{ - uint32_t timeout = 0; - - EMAC->miiaddr_bit.pa = address; - EMAC->miiaddr_bit.mii = reg; - EMAC->miiaddr_bit.mw = 0; - EMAC->miiaddr_bit.mb = 1; - - do - { - timeout++; - *data = EMAC->miidt_bit.md; - } while((EMAC->miiaddr_bit.mb) && (timeout < PHY_TIMEOUT)); - - if(timeout == PHY_TIMEOUT) - { - return ERROR; - } - - *data = EMAC->miidt_bit.md; - return SUCCESS; -} - -/** - * @brief emac receiver enable. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_receiver_enable(confirm_state new_state) -{ - __IO uint32_t temp = 0; - - EMAC->ctrl_bit.re = new_state; - - temp = EMAC->ctrl; - emac_delay(1); - EMAC->ctrl = temp; -} - -/** - * @brief emac transmitter enable. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_trasmitter_enable(confirm_state new_state) -{ - __IO uint32_t temp = 0; - - EMAC->ctrl_bit.te = new_state; - - temp = EMAC->ctrl; - emac_delay(1); - EMAC->ctrl = temp; -} - -/** - * @brief emac defferal check enable, only avalible in half-duplex mode. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_deferral_check_set(confirm_state new_state) -{ - EMAC->ctrl_bit.dc = new_state; -} - -/** - * @brief emac back-off limit, only avalible in half-duplex mode. - * @param slot_time: waiting time of retransmission after collision - * this parameter can be one of the following values: - * - EMAC_BACKOFF_LIMIT_0 - * - EMAC_BACKOFF_LIMIT_1 - * - EMAC_BACKOFF_LIMIT_2 - * - EMAC_BACKOFF_LIMIT_3 - * @retval none - */ -void emac_backoff_limit_set(emac_bol_type slot_time) -{ - EMAC->ctrl_bit.bl = slot_time; -} - -/** - * @brief set mac automatic pad/CRC stripping. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_auto_pad_crc_stripping_set(confirm_state new_state) -{ - EMAC->ctrl_bit.acs = new_state; -} - -/** - * @brief transmittion retry disable. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_retry_disable(confirm_state new_state) -{ - EMAC->ctrl_bit.dr = new_state; -} - -/** - * @brief set ipv4 checksum offload. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ipv4_checksum_offload_set(confirm_state new_state) -{ - EMAC->ctrl_bit.ipc = new_state; -} - -/** - * @brief enable loopback mode. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_loopback_mode_enable(confirm_state new_state) -{ - EMAC->ctrl_bit.lm = new_state; -} - -/** - * @brief receive own disable. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_receive_own_disable(confirm_state new_state) -{ - EMAC->ctrl_bit.dro = new_state; -} - -/** - * @brief carrier sense disbale. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_carrier_sense_disable(confirm_state new_state) -{ - EMAC->ctrl_bit.dcs = new_state; -} - -/** - * @brief set minimum interframe gap between frames during transmission. - * @param number: interframe gap number. - * this parameter can be one of the following values: - * - EMAC_FRAME_GAP_96BIT - * - EMAC_FRAME_GAP_88BIT - * - EMAC_FRAME_GAP_80BIT - * - EMAC_FRAME_GAP_72BIT - * - EMAC_FRAME_GAP_64BIT - * - EMAC_FRAME_GAP_56BIT - * - EMAC_FRAME_GAP_48BIT - * - EMAC_FRAME_GAP_40BIT - * @retval none - */ -void emac_interframe_gap_set(emac_intergrame_gap_type number) -{ - EMAC->ctrl_bit.ifg = number; -} - -/** - * @brief jabber disable. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_jabber_disable(confirm_state new_state) -{ - EMAC->ctrl_bit.jd = new_state; -} - -/** - * @brief watchdog disable. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_watchdog_disable(confirm_state new_state) -{ - EMAC->ctrl_bit.wd = new_state; -} - -/** - * @brief set mac fast emac speed. - * @param speed: mac bandwidth - * this parameter can be one of the following values: - * - EMAC_SPEED_10MBPS - * - EMAC_SPEED_100MBPS - * @retval none - */ -void emac_fast_speed_set(emac_speed_type speed) -{ - EMAC->ctrl_bit.fes = speed; -} - -/** - * @brief set duplex mode. - * @param duplex_mode: communication mode - * this parameter can be one of the following values: - * - EMAC_HALF_DUPLEX - * - EMAC_FULL_DUPLEX - * @retval none - */ -void emac_duplex_mode_set(emac_duplex_type duplex_mode) -{ - EMAC->ctrl_bit.dm = duplex_mode; -} - -/** - * @brief set mac promiscuous mode. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_promiscuous_mode_set(confirm_state new_state) -{ - EMAC->frmf_bit.pr = new_state; -} - -/** - * @brief hash unicast. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_hash_unicast_set(confirm_state new_state) -{ - EMAC->frmf_bit.huc = new_state; -} - -/** - * @brief hash multicast. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_hash_multicast_set(confirm_state new_state) -{ - EMAC->frmf_bit.hmc = new_state; -} - -/** - * @brief destination address inverse filtering. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_dstaddr_inverse_filter_set(confirm_state new_state) -{ - EMAC->frmf_bit.daif = new_state; -} - -/** - * @brief pass all multicasting frames. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_pass_all_multicasting_set(confirm_state new_state) -{ - EMAC->frmf_bit.pmc = new_state; -} - -/** - * @brief broadcast frames disable. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_broadcast_frames_disable(confirm_state new_state) -{ - EMAC->frmf_bit.dbf = new_state; -} - -/** - * @brief set mac how to pass control frames. - * @param condition: set what control frame can pass filter. - * this parameter can be one of the following values: - * - EMAC_CONTROL_FRAME_PASSING_NO - * - EMAC_CONTROL_FRAME_PASSING_ALL - * - EMAC_CONTROL_FRAME_PASSING_MATCH - * @retval none - */ -void emac_pass_control_frames_set(emac_control_frames_filter_type condition) -{ - EMAC->frmf_bit.pcf = condition; -} - -/** - * @brief source address inverse filtering. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_srcaddr_inverse_filter_set(confirm_state new_state) -{ - EMAC->frmf_bit.saif = new_state; -} - -/** - * @brief source address filtering. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_srcaddr_filter_set(confirm_state new_state) -{ - EMAC->frmf_bit.saf = new_state; -} - -/** - * @brief mac uses hash or perfect filter. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_hash_perfect_filter_set(confirm_state new_state) -{ - EMAC->frmf_bit.hpf = new_state; -} - -/** - * @brief mac receives all frames. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_receive_all_set(confirm_state new_state) -{ - EMAC->frmf_bit.ra = new_state; -} - -/** - * @brief hash table high 32-bit. - * @param high32bits: the highest 32-bit of hash table. - * @retval none - */ -void emac_hash_table_high32bits_set(uint32_t high32bits) -{ - EMAC->hth_bit.hth = high32bits; -} - -/** - * @brief hash table low 32-bit. - * @param low32bits: the lowest 32-bit of hash table. - * @retval none - */ -void emac_hash_table_low32bits_set(uint32_t low32bits) -{ - EMAC->htl_bit.htl = low32bits; -} - -/** - * @brief mii busy status. - * @param none - * @retval SET or RESET - */ -flag_status emac_mii_busy_get(void) -{ - if(EMAC->miiaddr_bit.mb) { - return SET; - } - else { - return RESET; - } -} - -/** - * @brief tell phy that will be written. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_mii_write(confirm_state new_state) -{ - EMAC->miiaddr_bit.mw = new_state; -} - -/** - * @brief set flow control busy in full-duplex mode, back pressure activate in half-duplex mode. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_fcb_bpa_set(confirm_state new_state) -{ - EMAC->fctrl_bit.fcbbpa = new_state; -} - -/** - * @brief set transmit flow control. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_transmit_flow_control_enable(confirm_state new_state) -{ - EMAC->fctrl_bit.etf = new_state; -} - -/** - * @brief set receive flow control. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_receive_flow_control_enable(confirm_state new_state) -{ - EMAC->fctrl_bit.erf = new_state; -} - -/** - * @brief set unicast pause frame detect. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_unicast_pause_frame_detect(confirm_state new_state) -{ - EMAC->fctrl_bit.dup = new_state; -} - -/** - * @brief set pause low threshold. - * @param pasue_threshold: pause slot time. - * this parameter can be one of the following values: - * - EMAC_PAUSE_4_SLOT_TIME - * - EMAC_PAUSE_28_SLOT_TIME - * - EMAC_PAUSE_144_SLOT_TIME - * - EMAC_PAUSE_256_SLOT_TIME - * @retval none - */ -void emac_pause_low_threshold_set(emac_pause_slot_threshold_type pasue_threshold) -{ - EMAC->fctrl_bit.plt = pasue_threshold; -} - -/** - * @brief set zero-quanta pause disable. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_zero_quanta_pause_disable(confirm_state new_state) -{ - EMAC->fctrl_bit.dzqp = new_state; -} - -/** - * @brief set pause time. - * @param pause_time: time slots to pause transmit frame. - * @retval none - */ -void emac_pause_time_set(uint16_t pause_time) -{ - EMAC->fctrl_bit.pt = pause_time; -} - -/** - * @brief identify coming vlan frame field with setting value. - * @param identifier: it will be compared with coming frame. - * @retval none - */ -void emac_vlan_tag_identifier_set(uint16_t identifier) -{ - EMAC->vlt_bit.vti = identifier; -} - -/** - * @brief set 12-bit vlan identifier. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_vlan_tag_comparison_set(confirm_state new_state) -{ - EMAC->vlt_bit.etv = new_state; -} - -/** - * @brief set wakeup frame. - * @param value: it will be written to eight non transparent registers. - * @retval none - */ -void emac_wakeup_frame_set(uint32_t value) -{ - EMAC->rwff = value; -} - -/** - * @brief get wakeup frame. - * @param none - * @retval get value from eight non transparent registers. - */ -uint32_t emac_wakeup_frame_get(void) -{ - return (EMAC->rwff); -} - -/** - * @brief all frame will be droppped except wakeup frame or magic packet. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_power_down_set(confirm_state new_state) -{ - EMAC->pmtctrlsts_bit.pd = new_state; -} - -/** - * @brief magic packet enable - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_magic_packet_enable(confirm_state new_state) -{ - EMAC->pmtctrlsts_bit.emp = new_state; -} - -/** - * @brief wakeup frame enable - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_wakeup_frame_enable(confirm_state new_state) -{ - EMAC->pmtctrlsts_bit.erwf = new_state; -} - -/** - * @brief received magic packet - * @param none - * @retval the new state of usart_flag (SET or RESET). - */ -flag_status emac_received_magic_packet_get(void) -{ - if(EMAC->pmtctrlsts_bit.rmp) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief received wakeup frame. - * @param none - * @retval the new state of usart_flag (SET or RESET). - */ -flag_status emac_received_wakeup_frame_get(void) -{ - if(EMAC->pmtctrlsts_bit.rrwf) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief set unicast frame that passes DAF as wakeup frame. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_global_unicast_set(confirm_state new_state) -{ - EMAC->pmtctrlsts_bit.guc = new_state; -} - -/** - * @brief reset wakeup frame filter resgister - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_wakeup_frame_filter_reset(confirm_state new_state) -{ - EMAC->pmtctrlsts_bit.rwffpr = new_state; -} - -/** - * @brief read interrupt status - * @param flag: specifies the flag to check. - * this parameter can be one of the following values: - * - EMAC_PMT_FLAG - * - EMAC_MMC_FLAG - * - EMAC_MMCR_FLAG - * - EMAC_MMCT_FLAG - * - EMAC_TST_FLAG - * @retval the new state of usart_flag (SET or RESET). - */ -flag_status emac_interrupt_status_read(uint32_t flag) -{ - if(EMAC->ists & flag) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief set interrupt mask - * @param mask_type: mask the interrupt signal - * this parameter can be one of the following values: - * - EMAC_INTERRUPT_PMT_MASK - * - EMAC_INTERRUPT_TST_MASK - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_interrupt_mask_set(emac_interrupt_mask_type mask_type, confirm_state new_state) -{ - switch(mask_type) - { - case EMAC_INTERRUPT_PMT_MASK: - { - EMAC->imr_bit.pim = new_state; - break; - } - case EMAC_INTERRUPT_TST_MASK: - { - EMAC->imr_bit.tim = new_state; - break; - } - } -} - -/** - * @brief set local mac address - * @param address: local address for mac0 - * @retval none - */ -void emac_local_address_set(uint8_t *address) -{ - EMAC->a0h_bit.ma0h = (uint32_t)(address[5] << 8 | address[4]); - EMAC->a0l_bit.ma0l = (uint32_t)(address[3] << 24 | address[2] << 16 | address[1] << 8 | address[0]); -} - -/** - * @brief set mac filter address - * @param mac: select which mac you want to set - * this parameter can be one of the following values: - * - EMAC_ADDRESS_FILTER_1 - * - EMAC_ADDRESS_FILTER_2 - * - EMAC_ADDRESS_FILTER_3 - * @retval none - */ -void emac_address_filter_set(emac_address_type mac, emac_address_filter_type filter, emac_address_mask_type mask_bit, confirm_state new_state) -{ - switch(mac) - { - case EMAC_ADDRESS_FILTER_1: - { - EMAC->a1h_bit.sa = filter; - EMAC->a1h_bit.mbc = mask_bit; - EMAC->a1h_bit.ae = new_state; - break; - } - case EMAC_ADDRESS_FILTER_2: - { - EMAC->a2h_bit.sa = filter; - EMAC->a2h_bit.mbc = mask_bit; - EMAC->a2h_bit.ae = new_state; - break; - } - case EMAC_ADDRESS_FILTER_3: - { - EMAC->a3h_bit.sa = filter; - EMAC->a3h_bit.mbc = mask_bit; - EMAC->a3h_bit.ae = new_state; - break; - } - } -} - -/** - * @brief set transmit/receive descriptor list address - * @param transfer_type: it will be transmit or receive - * this parameter can be one of the following values: - * - EMAC_DMA_TRANSMIT - * - EMAC_DMA_RECEIVE - * @param dma_desc_tab: pointer on the first tx desc list - * @param buff: pointer on the first tx/rx buffer list - * @param buffer_count: number of the used Tx desc in the list - * @retval none - */ -void emac_dma_descriptor_list_address_set(emac_dma_tx_rx_type transfer_type, emac_dma_desc_type *dma_desc_tab, uint8_t *buff, uint32_t buffer_count) -{ - uint32_t i = 0; - emac_dma_desc_type *dma_descriptor; - - switch(transfer_type) - { - case EMAC_DMA_TRANSMIT: - { - dma_tx_desc_to_set = dma_desc_tab; - for(i = 0; i < buffer_count; i++) - { - dma_descriptor = dma_desc_tab + i; - - dma_descriptor->status = EMAC_DMATXDESC_TCH; - - dma_descriptor->buf1addr = (uint32_t)(&buff[i * EMAC_MAX_PACKET_LENGTH]); - - if(i < (buffer_count - 1)) - { - dma_descriptor->buf2nextdescaddr = (uint32_t)(dma_desc_tab + i + 1); - } - else - { - dma_descriptor->buf2nextdescaddr = (uint32_t) dma_desc_tab; - } - } - EMAC_DMA->tdladdr_bit.stl = (uint32_t) dma_desc_tab; - break; - } - case EMAC_DMA_RECEIVE: - { - dma_rx_desc_to_get = dma_desc_tab; - for(i = 0; i < buffer_count; i++) - { - dma_descriptor = dma_desc_tab + i; - - dma_descriptor->status = EMAC_DMARXDESC_OWN; - - dma_descriptor->controlsize = EMAC_DMARXDESC_RCH | (uint32_t)EMAC_MAX_PACKET_LENGTH; - - dma_descriptor->buf1addr = (uint32_t)(&buff[i * EMAC_MAX_PACKET_LENGTH]); - - if(i < (buffer_count - 1)) - { - dma_descriptor->buf2nextdescaddr = (uint32_t)(dma_desc_tab + i + 1); - } - else - { - dma_descriptor->buf2nextdescaddr = (uint32_t) dma_desc_tab; - } - } - EMAC_DMA->rdladdr_bit.srl = (uint32_t) dma_desc_tab; - break; - } - } -} - -/** - * @brief enable or disable the specified dma rx descriptor receive interrupt - * @param dma_rx_desc: pointer on a rx desc. - * @param new_state: new state of the specified dma rx descriptor interrupt. - * this parameter can be one of the following values: - * - TRUE - * - FALSE. - * @retval none - */ -void emac_dma_rx_desc_interrupt_config(emac_dma_desc_type *dma_rx_desc, confirm_state new_state) -{ - if (new_state != FALSE) - { - /* enable the dma rx desc receive interrupt */ - dma_rx_desc->controlsize &= (~(uint32_t)EMAC_DMARXDESC_DIC); - } - else - { - /* disable the dma rx desc receive interrupt */ - dma_rx_desc->controlsize |= EMAC_DMARXDESC_DIC; - } -} - -/** - * @brief get transmit/receive descriptor list address - * @param transfer_type: it will be transmit or receive - * this parameter can be one of the following values: - * - EMAC_DMA_TRANSMIT - * - EMAC_DMA_RECEIVE - * @retval transmit/receive descriptor list address - */ -uint32_t emac_dma_descriptor_list_address_get(emac_dma_tx_rx_type transfer_type) -{ - switch(transfer_type) - { - case EMAC_DMA_TRANSMIT: - { - return (EMAC_DMA->tdladdr_bit.stl); - } - case EMAC_DMA_RECEIVE: - { - return (EMAC_DMA->rdladdr_bit.srl); - } - } - return 0; -} - -/** - * @brief get the size of received the received packet. - * @param none - * @retval received packet size - */ -uint32_t emac_received_packet_size_get(void) -{ - uint32_t frame_length = 0; - if(((dma_rx_desc_to_get->status & EMAC_DMARXDESC_OWN) == (uint32_t)RESET) && - ((dma_rx_desc_to_get->status & EMAC_DMATXDESC_ES) == (uint32_t)RESET) && - ((dma_rx_desc_to_get->status & EMAC_DMARXDESC_LS) != (uint32_t)RESET) && - ((dma_rx_desc_to_get->status & EMAC_DMARXDESC_FS) != (uint32_t)RESET)) - { - frame_length = emac_dmarxdesc_frame_length_get(dma_rx_desc_to_get); - } - - return frame_length; -} - -/** - * @brief get the specified dma rx descsriptor frame length. - * @param dma_rx_desc: pointer on a dma rx descriptor - * @retval the rx descriptor received frame length. - */ -uint32_t emac_dmarxdesc_frame_length_get(emac_dma_desc_type *dma_rx_desc) -{ - return ((dma_rx_desc->status & EMAC_DMARXDESC_FL) >> EMAC_DMARXDESC_FRAME_LENGTHSHIFT); -} - -/** - * @brief init emac dma parameters - * @param emac_dma_config_type - * @retval none - */ -void emac_dma_para_init(emac_dma_config_type *control_para) -{ - control_para->aab_enable = FALSE; - control_para->da_enable = FALSE; - control_para->desc_skip_length = 0; - control_para->dt_disable = FALSE; - control_para->fb_enable = FALSE; - control_para->fef_enable = FALSE; - control_para->flush_rx_disable = FALSE; - control_para->fugf_enable = FALSE; - control_para->osf_enable = FALSE; - control_para->priority_ratio = EMAC_DMA_1_RX_1_TX; - control_para->rsf_enable = FALSE; - control_para->rx_dma_pal = EMAC_DMA_PBL_1; - control_para->rx_threshold = EMAC_DMA_RX_THRESHOLD_64_BYTES; - control_para->tsf_enable = FALSE; - control_para->tx_dma_pal = EMAC_DMA_PBL_1; - control_para->tx_threshold = EMAC_DMA_TX_THRESHOLD_64_BYTES; - control_para->usp_enable = FALSE; -} - -/** - * @brief configure emac dma - * @param emac_dma_config_type - * @retval none - */ -void emac_dma_config(emac_dma_config_type *control_para) -{ - EMAC_DMA->bm_bit.aab = control_para->aab_enable; - EMAC_DMA->bm_bit.dsl = control_para->desc_skip_length; - EMAC_DMA->bm_bit.rdp = control_para->rx_dma_pal; - EMAC_DMA->bm_bit.pbl = control_para->tx_dma_pal; - EMAC_DMA->bm_bit.fb = control_para->fb_enable; - EMAC_DMA->bm_bit.usp = control_para->usp_enable; - EMAC_DMA->bm_bit.da = control_para->da_enable; - EMAC_DMA->bm_bit.pr = control_para->priority_ratio; - - EMAC_DMA->opm_bit.dt = control_para->dt_disable; - EMAC_DMA->opm_bit.rsf = control_para->rsf_enable; - EMAC_DMA->opm_bit.dfrf = control_para->flush_rx_disable; - EMAC_DMA->opm_bit.tsf = control_para->tsf_enable; - EMAC_DMA->opm_bit.ttc = control_para->tx_threshold; - EMAC_DMA->opm_bit.fef = control_para->fef_enable; - EMAC_DMA->opm_bit.fugf = control_para->fugf_enable; - EMAC_DMA->opm_bit.rtc = control_para->rx_threshold; - EMAC_DMA->opm_bit.osf = control_para->osf_enable; -} - -/** - * @brief set rx tx priority - * @param ratio: rx tx priority ratio - * this parameter can be one of the following values: - * - EMAC_DMA_1_RX_1_TX - * - EMAC_DMA_2_RX_1_TX - * - EMAC_DMA_3_RX_1_TX - * - EMAC_DMA_4_RX_1_TX - * @param new_state: TRUE or FALSE - * @retval none - */ -void emac_dma_arbitation_set(emac_dma_rx_tx_ratio_type ratio, confirm_state new_state) -{ - EMAC_DMA->bm_bit.da = new_state; - - if(new_state) - { - EMAC_DMA->bm_bit.pr = ratio; - } -} - -/** - * @brief set descriptor skip mength - * @param length: descriptor skip length - * @retval none - */ -void emac_dma_descriptor_skip_length_set(uint8_t length) -{ - EMAC_DMA->bm_bit.dsl = length; -} - -/** - * @brief set programmable burst length - * @param tx_length: tx programmable burst length - * this parameter can be one of the following values: - * - EMAC_DMA_PBL_1 - * - EMAC_DMA_PBL_2 - * - EMAC_DMA_PBL_4 - * - EMAC_DMA_PBL_8 - * - EMAC_DMA_PBL_16 - * - EMAC_DMA_PBL_32 - * @param rx_length: rx programmable burst length - * this parameter can be one of the following values: - * - EMAC_DMA_PBL_1 - * - EMAC_DMA_PBL_2 - * - EMAC_DMA_PBL_4 - * - EMAC_DMA_PBL_8 - * - EMAC_DMA_PBL_16 - * - EMAC_DMA_PBL_32 - * @param new_state: TRUE or FALSE - * @retval none - */ -void emac_dma_separate_pbl_set(emac_dma_pbl_type tx_length, emac_dma_pbl_type rx_length, confirm_state new_state) -{ - EMAC_DMA->bm_bit.usp = new_state; - EMAC_DMA->bm_bit.pbl = tx_length; - - if(new_state) - { - EMAC_DMA->bm_bit.pbl = rx_length; - } -} - -/** - * @brief set 8 times programmable burst length - * @param new_state: TRUE or FALSE - * @retval none - */ -void emac_dma_eight_pbl_mode_set(confirm_state new_state) -{ - EMAC_DMA->bm_bit.pblx8 = new_state; -} - -/** - * @brief set address-aligned beats - * @param new_state: TRUE or FALSE - * @retval none - */ -void emac_dma_address_aligned_beats_set(confirm_state new_state) -{ - EMAC_DMA->bm_bit.aab = new_state; -} - -/** - * @brief set transmit/receive poll demand - * @param transfer_type: it will be transmit or receive - * this parameter can be one of the following values: - * - EMAC_DMA_TRANSMIT - * - EMAC_DMA_RECEIVE - * @param value: it can be any number - * @retval none - */ -void emac_dma_poll_demand_set(emac_dma_tx_rx_type transfer_type, uint32_t value) -{ - switch(transfer_type) - { - case EMAC_DMA_TRANSMIT: - { - EMAC_DMA->tpd_bit.tpd = value; - break; - } - case EMAC_DMA_RECEIVE: - { - EMAC_DMA->rpd_bit.rpd = value; - break; - } - } -} - -/** - * @brief get transmit poll demand - * @param transfer_type: it will be transmit or receive - * this parameter can be one of the following values: - * - EMAC_DMA_TRANSMIT - * - EMAC_DMA_RECEIVE - * @retval current transmit descriptor - */ -uint32_t emac_dma_poll_demand_get(emac_dma_tx_rx_type transfer_type) -{ - switch(transfer_type) - { - case EMAC_DMA_TRANSMIT: - { - return (EMAC_DMA->tpd_bit.tpd); - } - case EMAC_DMA_RECEIVE: - { - return (EMAC_DMA->rpd_bit.rpd); - } - } - return 0; -} - -/** - * @brief get receive dma process status - * @param none - * @retval every situation it describe in RM - * this parameter can be one of the following values: - * - EMAC_DMA_RX_RESET_STOP_COMMAND - * - EMAC_DMA_RX_FETCH_DESCRIPTOR - * - EMAC_DMA_RX_WAITING_PACKET - * - EMAC_DMA_RX_DESCRIPTOR_UNAVAILABLE - * - EMAC_DMA_RX_CLOSE_DESCRIPTOR - * - EMAC_DMA_RX_FIFO_TO_HOST - */ -emac_dma_receive_process_status_type emac_dma_receive_status_get(void) -{ - switch(EMAC_DMA->sts_bit.rs) - { - case EMAC_DMA_RX_RESET_STOP_COMMAND: - { - return EMAC_DMA_RX_RESET_STOP_COMMAND; - } - - case EMAC_DMA_RX_FETCH_DESCRIPTOR: - { - return EMAC_DMA_RX_FETCH_DESCRIPTOR; - } - - case EMAC_DMA_RX_WAITING_PACKET: - { - return EMAC_DMA_RX_WAITING_PACKET; - } - - case EMAC_DMA_RX_DESCRIPTOR_UNAVAILABLE: - { - return EMAC_DMA_RX_DESCRIPTOR_UNAVAILABLE; - } - - case EMAC_DMA_RX_CLOSE_DESCRIPTOR: - { - return EMAC_DMA_RX_CLOSE_DESCRIPTOR; - } - - case EMAC_DMA_RX_FIFO_TO_HOST: - { - return EMAC_DMA_RX_FIFO_TO_HOST; - } - } - - return EMAC_DMA_RX_RESET_STOP_COMMAND; -} - -/** - * @brief get transmit dma process status - * @param none - * @retval every situation it describe in RM - * this parameter can be one of the following values: - * - EMAC_DMA_TX_RESET_STOP_COMMAND - * - EMAC_DMA_TX_FETCH_DESCRIPTOR - * - EMAC_DMA_TX_WAITING_FOR_STATUS - * - EMAC_DMA_TX_HOST_TO_FIFO - * - EMAC_DMA_TX_DESCRIPTOR_UNAVAILABLE - * - EMAC_DMA_TX_CLOSE_DESCRIPTOR - */ -emac_dma_transmit_process_status_type emac_dma_transmit_status_get(void) -{ - switch(EMAC_DMA->sts_bit.ts) - { - case EMAC_DMA_TX_RESET_STOP_COMMAND: - { - return EMAC_DMA_TX_RESET_STOP_COMMAND; - } - - case EMAC_DMA_TX_FETCH_DESCRIPTOR: - { - return EMAC_DMA_TX_FETCH_DESCRIPTOR; - } - - case EMAC_DMA_TX_WAITING_FOR_STATUS: - { - return EMAC_DMA_TX_WAITING_FOR_STATUS; - } - - case EMAC_DMA_TX_HOST_TO_FIFO: - { - return EMAC_DMA_TX_HOST_TO_FIFO; - } - - case EMAC_DMA_TX_DESCRIPTOR_UNAVAILABLE: - { - return EMAC_DMA_TX_DESCRIPTOR_UNAVAILABLE; - } - - case EMAC_DMA_TX_CLOSE_DESCRIPTOR: - { - return EMAC_DMA_TX_CLOSE_DESCRIPTOR; - } - } - - return EMAC_DMA_TX_RESET_STOP_COMMAND; -} - -/** - * @brief set dma operations - * @param ops: operations of dma - * this parameter can be one of the following values: - * - EMAC_DMA_OPS_START_STOP_RECEIVE - * - EMAC_DMA_OPS_SECOND_FRAME - * - EMAC_DMA_OPS_FORWARD_UNDERSIZED - * - EMAC_DMA_OPS_FORWARD_ERROR - * - EMAC_DMA_OPS_START_STOP_TRANSMIT - * - EMAC_DMA_OPS_FLUSH_TRANSMIT_FIFO - * - EMAC_DMA_OPS_TRANSMIT_STORE_FORWARD - * - EMAC_DMA_OPS_RECEIVE_FLUSH_DISABLE - * - EMAC_DMA_OPS_RECEIVE_STORE_FORWARD - * - EMAC_DMA_OPS_DROP_ERROR_DISABLE - * @param new_state: TRUE or FALSE - * @retval none - */ -void emac_dma_operations_set(emac_dma_operations_type ops, confirm_state new_state) -{ - __IO uint32_t temp = 0; - switch(ops) - { - case EMAC_DMA_OPS_START_STOP_RECEIVE: - { - EMAC_DMA->opm_bit.ssr = new_state; - break; - } - - case EMAC_DMA_OPS_SECOND_FRAME: - { - EMAC_DMA->opm_bit.osf = new_state; - break; - } - - case EMAC_DMA_OPS_FORWARD_UNDERSIZED: - { - EMAC_DMA->opm_bit.fugf = new_state; - break; - } - - case EMAC_DMA_OPS_FORWARD_ERROR: - { - EMAC_DMA->opm_bit.fef = new_state; - break; - } - - case EMAC_DMA_OPS_START_STOP_TRANSMIT: - { - EMAC_DMA->opm_bit.sstc = new_state; - break; - } - - case EMAC_DMA_OPS_FLUSH_TRANSMIT_FIFO: - { - EMAC_DMA->opm_bit.ftf = new_state; - temp = EMAC_DMA->opm; - emac_delay(1); - EMAC_DMA->opm = temp; - break; - } - - case EMAC_DMA_OPS_TRANSMIT_STORE_FORWARD: - { - EMAC_DMA->opm_bit.tsf = new_state; - break; - } - - case EMAC_DMA_OPS_RECEIVE_FLUSH_DISABLE: - { - EMAC_DMA->opm_bit.dfrf = new_state; - break; - } - - case EMAC_DMA_OPS_RECEIVE_STORE_FORWARD: - { - EMAC_DMA->opm_bit.rsf = new_state; - break; - } - - case EMAC_DMA_OPS_DROP_ERROR_DISABLE: - { - EMAC_DMA->opm_bit.dt = new_state; - break; - } - } -} - -/** - * @brief set receive dma threshold - * @param value: receive threshold - * this parameter can be one of the following values: - * - EMAC_DMA_RX_THRESHOLD_64_BYTES - * - EMAC_DMA_RX_THRESHOLD_32_BYTES - * - EMAC_DMA_RX_THRESHOLD_96_BYTES - * - EMAC_DMA_RX_THRESHOLD_128_BYTES - * @retval none - */ -void emac_dma_receive_threshold_set(emac_dma_receive_threshold_type value) -{ - EMAC_DMA->opm_bit.rtc = value; -} - -/** - * @brief set transmit dma threshold - * @param value: transmit threshold - * this parameter can be one of the following values: - * - EMAC_DMA_TX_THRESHOLD_64_BYTES - * - EMAC_DMA_TX_THRESHOLD_128_BYTES - * - EMAC_DMA_TX_THRESHOLD_192_BYTES - * - EMAC_DMA_TX_THRESHOLD_256_BYTES - * - EMAC_DMA_TX_THRESHOLD_40_BYTES - * - EMAC_DMA_TX_THRESHOLD_32_BYTES - * - EMAC_DMA_TX_THRESHOLD_24_BYTES - * - EMAC_DMA_TX_THRESHOLD_16_BYTES - * @retval none - */ -void emac_dma_transmit_threshold_set(emac_dma_transmit_threshold_type value) -{ - EMAC_DMA->opm_bit.ttc = value; -} - -/** - * @brief enable dma interrupt - * @param it: interrupt type - * this parameter can be one of the following values: - * - EMAC_DMA_INTERRUPT_TX - * - EMAC_DMA_INTERRUPT_TX_STOP - * - EMAC_DMA_INTERRUPT_TX_UNAVAILABLE - * - EMAC_DMA_INTERRUPT_TX_JABBER - * - EMAC_DMA_INTERRUPT_RX_OVERFLOW - * - EMAC_DMA_INTERRUPT_TX_UNDERFLOW - * - EMAC_DMA_INTERRUPT_RX - * - EMAC_DMA_INTERRUPT_RX_UNAVAILABLE - * - EMAC_DMA_INTERRUPT_RX_STOP - * - EMAC_DMA_INTERRUPT_RX_TIMEOUT - * - EMAC_DMA_INTERRUPT_TX_EARLY - * - EMAC_DMA_INTERRUPT_FATAL_BUS_ERROR - * - EMAC_DMA_INTERRUPT_RX_EARLY - * - EMAC_DMA_INTERRUPT_ABNORMAL_SUMMARY - * - EMAC_DMA_INTERRUPT_NORMAL_SUMMARY - * @param new_state: TRUE or FALSE - * @retval none - */ -void emac_dma_interrupt_enable(emac_dma_interrupt_type it, confirm_state new_state) -{ - switch(it) - { - case EMAC_DMA_INTERRUPT_TX: - { - EMAC_DMA->ie_bit.tie = new_state; - break; - } - case EMAC_DMA_INTERRUPT_TX_STOP: - { - EMAC_DMA->ie_bit.tse = new_state; - break; - } - case EMAC_DMA_INTERRUPT_TX_UNAVAILABLE: - { - EMAC_DMA->ie_bit.tue = new_state; - break; - } - case EMAC_DMA_INTERRUPT_TX_JABBER: - { - EMAC_DMA->ie_bit.tje = new_state; - break; - } - case EMAC_DMA_INTERRUPT_RX_OVERFLOW: - { - EMAC_DMA->ie_bit.ove = new_state; - break; - } - case EMAC_DMA_INTERRUPT_TX_UNDERFLOW: - { - EMAC_DMA->ie_bit.une = new_state; - break; - } - case EMAC_DMA_INTERRUPT_RX: - { - EMAC_DMA->ie_bit.rie = new_state; - break; - } - case EMAC_DMA_INTERRUPT_RX_UNAVAILABLE: - { - EMAC_DMA->ie_bit.rbue = new_state; - break; - } - case EMAC_DMA_INTERRUPT_RX_STOP: - { - EMAC_DMA->ie_bit.rse = new_state; - break; - } - case EMAC_DMA_INTERRUPT_RX_TIMEOUT: - { - EMAC_DMA->ie_bit.rwte = new_state; - break; - } - case EMAC_DMA_INTERRUPT_TX_EARLY: - { - EMAC_DMA->ie_bit.eie = new_state; - break; - } - case EMAC_DMA_INTERRUPT_FATAL_BUS_ERROR: - { - EMAC_DMA->ie_bit.fbee = new_state; - break; - } - case EMAC_DMA_INTERRUPT_RX_EARLY: - { - EMAC_DMA->ie_bit.ere = new_state; - break; - } - case EMAC_DMA_INTERRUPT_ABNORMAL_SUMMARY: - { - EMAC_DMA->ie_bit.aie = new_state; - break; - } - case EMAC_DMA_INTERRUPT_NORMAL_SUMMARY: - { - EMAC_DMA->ie_bit.nie = new_state; - break; - } - } -} - -/** - * @brief get missed frames by the controller - * @param none - * @retval missed frames by the controller - */ -uint16_t emac_dma_controller_missing_frame_get(void) -{ - uint16_t number = EMAC_DMA->mfbocnt_bit.mfc; - return number; -} - -/** - * @brief get overflow bit for missed frame counter - * @param none - * @retval overflow bit for missed frame counter - */ -uint8_t emac_dma_missing_overflow_bit_get(void) -{ - uint8_t number = EMAC_DMA->mfbocnt_bit.obmfc; - return number; -} - -/** - * @brief get missed frames by the application - * @param none - * @retval missed frames by the application - */ -uint16_t emac_dma_application_missing_frame_get(void) -{ - uint16_t number = EMAC_DMA->mfbocnt_bit.ofc; - return number; -} - -/** - * @brief get overflow bit for FIFO overflow counter - * @param none - * @retval overflow bit for FIFO overflow counter - */ -uint8_t emac_dma_fifo_overflow_bit_get(void) -{ - uint8_t number = EMAC_DMA->mfbocnt_bit.obfoc; - return number; -} - -/** - * @brief get overflow bit for FIFO overflow counter - * @param transfer type: receive/transmit type - * this parameter can be one of the following values: - * - EMAC_DMA_TX_DESCRIPTOR - * - EMAC_DMA_RX_DESCRIPTOR - * - EMAC_DMA_TX_BUFFER - * - EMAC_DMA_RX_BUFFER - * @retval memory address - */ -uint32_t emac_dma_tansfer_address_get(emac_dma_transfer_address_type transfer_type) -{ - uint32_t address = 0; - - switch(transfer_type) - { - case EMAC_DMA_TX_DESCRIPTOR: - { - address = EMAC_DMA->ctd_bit.htdap; - break; - } - case EMAC_DMA_RX_DESCRIPTOR: - { - address = EMAC_DMA->crd_bit.hrdap; - break; - } - case EMAC_DMA_TX_BUFFER: - { - address = EMAC_DMA->ctbaddr_bit.htbap; - break; - } - case EMAC_DMA_RX_BUFFER: - { - address = EMAC_DMA->crbaddr_bit.hrbap; - break; - } - } - return address; -} - -/** - * @brief reset all counter - * @param none - * @retval none - */ -void emac_mmc_counter_reset(void) -{ - EMAC_MMC->ctrl_bit.rc = TRUE; -} - -/** - * @brief counter stop counting from zero when it reaches maximum - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_mmc_rollover_stop(confirm_state new_state) -{ - EMAC_MMC->ctrl_bit.scr = new_state; -} - -/** - * @brief enable reset on read - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_mmc_reset_on_read_enable(confirm_state new_state) -{ - EMAC_MMC->ctrl_bit.rr = new_state; -} - -/** - * @brief freeze mmc counter - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_mmc_counter_freeze(confirm_state new_state) -{ - EMAC_MMC->ctrl_bit.fmc = new_state; -} - -/** - * @brief interupt status of received frames - * @param flag: specifies the flag to check. - * this parameter can be one of the following values: - * - MMC_RX_CRC_ERROR - * - MMC_RX_ALIGN_ERROR - * - MMC_RX_GOOD_UNICAST - * @retval the new state of usart_flag (SET or RESET). - */ -flag_status emac_mmc_received_status_get(uint32_t flag) -{ - if(EMAC_MMC->ri & flag) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief interupt status of transmit frames - * @param transmit_type: transmit type. - * this parameter can be one of the following values: - * - MMC_TX_SINGLE_COL - * - MMC_TX_MULTIPLE_COL - * - MMC_TX_GOOD_FRAMES - * @retval the new state of usart_flag (SET or RESET). - */ -flag_status emac_mmc_transmit_status_get(uint32_t flag) -{ - if(EMAC_MMC->ti & flag) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief mask received mmc interrupt - * @param flag: specifies the flag to check. - * this parameter can be one of the following values: - * - MMC_RX_CRC_ERROR - * - MMC_RX_ALIGN_ERROR - * - MMC_RX_GOOD_UNICAST - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_mmc_received_interrupt_mask_set(uint32_t flag, confirm_state new_state) -{ - switch(flag) - { - case MMC_RX_CRC_ERROR: - { - EMAC_MMC->rim_bit.rcefcim = new_state; - break; - } - case MMC_RX_ALIGN_ERROR: - { - EMAC_MMC->rim_bit.raefacim = new_state; - break; - } - case MMC_RX_GOOD_UNICAST: - { - EMAC_MMC->rim_bit.rugfcim = new_state; - break; - } - } -} - -/** - * @brief mask transmit mmc interrupt - * @param transmit_type: transmit type. - * this parameter can be one of the following values: - * - MMC_TX_SINGLE_COL - * - MMC_TX_MULTIPLE_COL - * - MMC_TX_GOOD_FRAMES - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_mmc_transmit_interrupt_mask_set(uint32_t flag, confirm_state new_state) -{ - switch(flag) - { - case MMC_TX_SINGLE_COL: - { - EMAC_MMC->tim_bit.tscgfcim = new_state; - break; - } - case MMC_TX_MULTIPLE_COL: - { - EMAC_MMC->tim_bit.tmcgfcim = new_state; - break; - } - case MMC_TX_GOOD_FRAMES: - { - EMAC_MMC->tim_bit.tgfcim = new_state; - break; - } - } -} - -/** - * @brief get good frame numbers as single collision occurs. - * @param flag: specifies the flag to check. - * this parameter can be one of the following values: - * - MMC_TX_SINGLE_COL - * - MMC_TX_MULTIPLE_COL - * - MMC_TX_GOOD_FRAMES - * @retval good frames - */ -uint32_t emac_mmc_transmit_good_frames_get(uint32_t flag) -{ - uint32_t good_frames = MMC_TX_GOOD_FRAMES; - - switch(flag) - { - case MMC_TX_SINGLE_COL: - { - good_frames = EMAC_MMC->tfscc_bit.tgfscc; - break; - } - case MMC_TX_MULTIPLE_COL: - { - good_frames = EMAC_MMC->tfmscc_bit.tgfmscc; - break; - } - case MMC_TX_GOOD_FRAMES: - { - good_frames = EMAC_MMC->tfcnt_bit.tgfc; - break; - } - } - return good_frames; -} - -/** - * @brief get good frame numbers as single collision occurs. - * @param flag: specifies the flag to check. - * this parameter can be one of the following values: - * - MMC_RX_CRC_ERROR - * - MMC_RX_ALIGN_ERROR - * - MMC_RX_GOOD_UNICAST - * @retval good frames - */ -uint32_t emac_mmc_received_error_frames_get(uint32_t flag) -{ - uint32_t error_frames = MMC_RX_GOOD_UNICAST; - - switch(flag) - { - case MMC_RX_CRC_ERROR: - { - error_frames = EMAC_MMC->rfcecnt_bit.rfcec; - break; - } - case MMC_RX_ALIGN_ERROR: - { - error_frames = EMAC_MMC->rfaecnt_bit.rfaec; - break; - } - case MMC_RX_GOOD_UNICAST: - { - error_frames = EMAC_MMC->rgufcnt_bit.rgufc; - break; - } - } - return error_frames; -} - -/** - * @brief enable timestamp. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_timestamp_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.te = new_state; -} - -/** - * @brief enable timestamp fine update. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_timestamp_fine_update_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.tfcu = new_state; -} - -/** - * @brief initialize timestamp time system. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_timestamp_system_time_init(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.ti = new_state; -} - -/** - * @brief update timestamp time system. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_timestamp_system_time_update(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.tu = new_state; -} - -/** - * @brief enable timestamp interrupt trigger. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_interrupt_trigger_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.tite = new_state; -} - -/** - * @brief update timestamp addend register. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_addend_register_update(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.aru = new_state; -} - -/** - * @brief enable timestamp snapshot for all received frames. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_snapshot_received_frames_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.etaf = new_state; -} - -/** - * @brief enable digital rollover. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_subsecond_rollover_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.tdbrc = new_state; -} - -/** - * @brief enable packet snooping for version 2. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_psv2_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.eppv2f = new_state; -} - -/** - * @brief enable snapshot over emac. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_snapshot_emac_frames_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.eppef = new_state; -} - -/** - * @brief enable snapshot for ipv6 frames. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_snapshot_ipv6_frames_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.eppfsip6u = new_state; -} - -/** - * @brief enable snapshot for ipv4 frames. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_snapshot_ipv4_frames_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.eppfsip4u = new_state; -} - -/** - * @brief enable snapshot for event message. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_snapshot_event_message_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.etsfem = new_state; -} - -/** - * @brief enable snapshot for message relevant to master - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_snapshot_master_event_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.esfmrtm = new_state; -} - -/** - * @brief set clock node type - * @param node: select ptp packets for taking snapshot - * this parameter can be one of the following values: - * - EMAC_PTP_NORMAL_CLOCK - * - EMAC_PTP_BOUNDARY_CLOCK - * - EMAC_PTP_END_TO_END_CLOCK - * - EMAC_PTP_PEER_TO_PEER_CLOCK - * @retval none - */ -void emac_ptp_clock_node_set(emac_ptp_clock_node_type node) -{ - EMAC_PTP->tsctrl_bit.sppfts = node; -} - -/** - * @brief enable ptp frame filtering mac address - * @param new_state: TRUE or FALSE. - * @retval none - */ -void emac_ptp_mac_address_filter_enable(confirm_state new_state) -{ - EMAC_PTP->tsctrl_bit.emafpff = new_state; -} - -/** - * @brief set subsecond increment value - * @param value: add to subsecond value for every update - * @retval none - */ -void emac_ptp_subsecond_increment_set(uint8_t value) -{ - EMAC_PTP->ssinc_bit.ssiv = value; -} - -/** - * @brief get system time second - * @param none - * @retval system time second - */ -uint32_t emac_ptp_system_second_get(void) -{ - uint32_t second = EMAC_PTP->tsh_bit.ts; - return second; -} - -/** - * @brief get system time subsecond - * @param none - * @retval system time subsecond - */ -uint32_t emac_ptp_system_subsecond_get(void) -{ - uint32_t subsecond = EMAC_PTP->tsl_bit.tss; - return subsecond; -} - -/** - * @brief get system time sign - * @param none - * @retval TRUE or FALSE - */ -confirm_state emac_ptp_system_time_sign_get(void) -{ - if(EMAC_PTP->tsl_bit.ast) - { - return TRUE; - } - else - { - return FALSE; - } -} - -/** - * @brief set system time second - * @param second: system time second - * @retval none - */ -void emac_ptp_system_second_set(uint32_t second) -{ - EMAC_PTP->tshud_bit.ts = second; -} - -/** - * @brief set system time subsecond - * @param subsecond: system time subsecond - * @retval none - */ -void emac_ptp_system_subsecond_set(uint32_t subsecond) -{ - EMAC_PTP->tslud_bit.tss = subsecond; -} - -/** - * @brief set system time sign - * @param sign: TRUE or FALSE. - * @retval none - */ -void emac_ptp_system_time_sign_set(confirm_state sign) -{ - if(sign) - { - EMAC_PTP->tslud_bit.ast = 1; - } - else - { - EMAC_PTP->tslud_bit.ast = 0; - } -} - -/** - * @brief set time stamp addend - * @param value: to achieve time synchronization - * @retval none - */ -void emac_ptp_timestamp_addend_set(uint32_t value) -{ - EMAC_PTP->tsad_bit.tar = value; -} - -/** - * @brief set target time stamp high - * @param value: to set target time second - * @retval none - */ -void emac_ptp_target_second_set(uint32_t value) -{ - EMAC_PTP->tth_bit.ttsr = value; -} - -/** - * @brief set target time stamp low - * @param value: to set target time nanosecond - * @retval none - */ -void emac_ptp_target_nanosecond_set(uint32_t value) -{ - EMAC_PTP->ttl_bit.ttlr = value; -} - -/** - * @brief set target time stamp low - * @param status: type of status - * this parameter can be one of the following values: - * - EMAC_PTP_SECOND_OVERFLOW - * - EMAC_PTP_TARGET_TIME_REACH - * @retval TRUE or FALSE - */ -confirm_state emac_ptp_timestamp_status_get(emac_ptp_timestamp_status_type status) -{ - switch(status) - { - case EMAC_PTP_SECOND_OVERFLOW: - { - if(EMAC_PTP->tssr_bit.tso) - { - return TRUE; - } - else - { - return FALSE; - } - } - case EMAC_PTP_TARGET_TIME_REACH: - { - if(EMAC_PTP->tssr_bit.tttr) - { - return TRUE; - } - else - { - return FALSE; - } - } - } - return FALSE; -} - -/** - * @brief set pps frequency - * @param freq: pps frequency - * this parameter can be one of the following values: - * - EMAC_PTP_PPS_1HZ - * - EMAC_PTP_PPS_2HZ - * - EMAC_PTP_PPS_4HZ - * - EMAC_PTP_PPS_8HZ - * - EMAC_PTP_PPS_16HZ - * - EMAC_PTP_PPS_32HZ - * - EMAC_PTP_PPS_64HZ - * - EMAC_PTP_PPS_128HZ - * - EMAC_PTP_PPS_256HZ - * - EMAC_PTP_PPS_512HZ - * - EMAC_PTP_PPS_1024HZ - * - EMAC_PTP_PPS_2048HZ - * - EMAC_PTP_PPS_4096HZ - * - EMAC_PTP_PPS_8192HZ - * - EMAC_PTP_PPS_16384HZ - * - EMAC_PTP_PPS_32768HZ - * @retval none - */ -void emac_ptp_pps_frequency_set(emac_ptp_pps_control_type freq) -{ - EMAC_PTP->ppscr_bit.pofc = freq; -} - -/** - * @brief this is delay function base on system clock. - * @param delay: delay time - * @retval none - */ -static void emac_delay(uint32_t delay) -{ - __IO uint32_t delay_time = delay * (system_core_clock / 8 / 1000); - do - { - __NOP(); - } - while(delay_time --); -} - -/** - * @brief check whether the specified emac dma flag is set or not. - * @param dma_flag: specifies the emac dma flag to check. - * this parameter can be one of emac dma flag status: - * - EMAC_DMA_TI_FLAG - * - EMAC_DMA_TPS_FLAG - * - EMAC_DMA_TBU_FLAG - * - EMAC_DMA_TJT_FLAG - * - EMAC_DMA_OVF_FLAG - * - EMAC_DMA_UNF_FLAG - * - EMAC_DMA_RI_FLAG - * - EMAC_DMA_RBU_FLAG - * - EMAC_DMA_RPS_FLAG - * - EMAC_DMA_RWT_FLAG - * - EMAC_DMA_ETI_FLAG - * - EMAC_DMA_FBEI_FLAG - * - EMAC_DMA_ERI_FLAG - * - EMAC_DMA_AIS_FLAG - * - EMAC_DMA_NIS_FLAG - * @retval the new state of dma_flag (SET or RESET). - */ -flag_status emac_dma_flag_get(uint32_t dma_flag) -{ - flag_status status = RESET; - - if(EMAC_DMA->sts & dma_flag) - status = SET; - /* return the new state (SET or RESET) */ - return status; -} - -/** - * @brief clear the emac dma flag. - * @param dma_flag: specifies the emac dma flags to clear. - * this parameter can be any combination of the following values: - * - EMAC_DMA_TI_FLAG - * - EMAC_DMA_TPS_FLAG - * - EMAC_DMA_TBU_FLAG - * - EMAC_DMA_TJT_FLAG - * - EMAC_DMA_OVF_FLAG - * - EMAC_DMA_UNF_FLAG - * - EMAC_DMA_RI_FLAG - * - EMAC_DMA_RBU_FLAG - * - EMAC_DMA_RPS_FLAG - * - EMAC_DMA_RWT_FLAG - * - EMAC_DMA_ETI_FLAG - * - EMAC_DMA_FBEI_FLAG - * - EMAC_DMA_ERI_FLAG - * - EMAC_DMA_AIS_FLAG - * - EMAC_DMA_NIS_FLAG - * @retval none - */ -void emac_dma_flag_clear(uint32_t dma_flag) -{ - EMAC_DMA->sts = dma_flag; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -#endif - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_exint.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_exint.c deleted file mode 100644 index c6ef1c3..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_exint.c +++ /dev/null @@ -1,236 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_exint.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the exint firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup EXINT - * @brief EXINT driver modules - * @{ - */ - -#ifdef EXINT_MODULE_ENABLED - -/** @defgroup EXINT_private_functions - * @{ - */ - -/** - * @brief exint reset - * @param none - * @retval none - */ -void exint_reset(void) -{ - EXINT->inten = 0x00000000; - EXINT->polcfg1 = 0x00000000; - EXINT->polcfg2 = 0x00000000; - EXINT->evten = 0x00000000; - EXINT->intsts = 0x000FFFFF; -} - -/** - * @brief exint default para init - * @param exint_struct - * - to the structure of exint_init_type - * @retval none - */ -void exint_default_para_init(exint_init_type *exint_struct) -{ - exint_struct->line_enable = FALSE; - exint_struct->line_select = EXINT_LINE_NONE; - exint_struct->line_polarity = EXINT_TRIGGER_FALLING_EDGE; - exint_struct->line_mode = EXINT_LINE_EVENT; -} - -/** - * @brief exint init - * @param exint_struct - * - to the structure of exint_init_type - * @retval none - */ -void exint_init(exint_init_type *exint_struct) -{ - uint32_t line_index = 0; - line_index = exint_struct->line_select; - - EXINT->inten &= ~line_index; - EXINT->evten &= ~line_index; - - if(exint_struct->line_enable != FALSE) - { - if(exint_struct->line_mode == EXINT_LINE_INTERRUPUT) - { - EXINT->inten |= line_index; - } - else - { - EXINT->evten |= line_index; - } - - EXINT->polcfg1 &= ~line_index; - EXINT->polcfg2 &= ~line_index; - if(exint_struct->line_polarity == EXINT_TRIGGER_RISING_EDGE) - { - EXINT->polcfg1 |= line_index; - } - else if(exint_struct->line_polarity == EXINT_TRIGGER_FALLING_EDGE) - { - EXINT->polcfg2 |= line_index; - } - else - { - EXINT->polcfg1 |= line_index; - EXINT->polcfg2 |= line_index; - } - } -} - -/** - * @brief clear exint flag - * @param exint_line - * this parameter can be any combination of the following values: - * - EXINT_LINE_0 - * - EXINT_LINE_1 - * ... - * - EXINT_LINE_18 - * - EXINT_LINE_19 - * @retval none - */ -void exint_flag_clear(uint32_t exint_line) -{ - EXINT->intsts = exint_line; -} - -/** - * @brief get exint flag - * @param exint_line - * this parameter can be one of the following values: - * - EXINT_LINE_0 - * - EXINT_LINE_1 - * ... - * - EXINT_LINE_18 - * - EXINT_LINE_19 - * @retval the new state of exint flag(SET or RESET). - */ -flag_status exint_flag_get(uint32_t exint_line) -{ - flag_status status = RESET; - uint32_t exint_flag =0; - exint_flag = EXINT->intsts & exint_line; - if((exint_flag != (uint16_t)RESET)) - { - status = SET; - } - else - { - status = RESET; - } - return status; -} - -/** - * @brief generate exint software interrupt event - * @param exint_line - * this parameter can be one of the following values: - * - EXINT_LINE_0 - * - EXINT_LINE_1 - * ... - * - EXINT_LINE_18 - * - EXINT_LINE_19 - * @retval none - */ -void exint_software_interrupt_event_generate(uint32_t exint_line) -{ - EXINT->swtrg |= exint_line; -} - -/** - * @brief enable or disable exint interrupt - * @param exint_line - * this parameter can be any combination of the following values: - * - EXINT_LINE_0 - * - EXINT_LINE_1 - * ... - * - EXINT_LINE_18 - * - EXINT_LINE_19 - * @param new_state: new state of exint interrupt. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void exint_interrupt_enable(uint32_t exint_line, confirm_state new_state) -{ - if(new_state == TRUE) - { - EXINT->inten |= exint_line; - } - else - { - EXINT->inten &= ~exint_line; - } -} - -/** - * @brief enable or disable exint event - * @param exint_line - * this parameter can be any combination of the following values: - * - EXINT_LINE_0 - * - EXINT_LINE_1 - * ... - * - EXINT_LINE_18 - * - EXINT_LINE_19 - * @param new_state: new state of exint event. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void exint_event_enable(uint32_t exint_line, confirm_state new_state) -{ - if(new_state == TRUE) - { - EXINT->evten |= exint_line; - } - else - { - EXINT->evten &= ~exint_line; - } -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_flash.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_flash.c deleted file mode 100644 index 98e7cb9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_flash.c +++ /dev/null @@ -1,1284 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_flash.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the flash firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup FLASH - * @brief FLASH driver modules - * @{ - */ - -#ifdef FLASH_MODULE_ENABLED - -/** @defgroup FLASH_private_functions - * @{ - */ - -/** - * @brief check whether the specified flash flag is set or not. - * @param flash_flag: specifies the flash flag to check. - * this parameter can be one of flash flag status: - * - FLASH_OBF_FLAG - * - FLASH_ODF_FLAG - * - FLASH_PRGMERR_FLAG - * - FLASH_EPPERR_FLAG - * - FLASH_BANK1_OBF_FLAG - * - FLASH_BANK1_ODF_FLAG - * - FLASH_BANK1_PRGMERR_FLAG - * - FLASH_BANK1_EPPERR_FLAG - * - FLASH_BANK2_OBF_FLAG - * - FLASH_BANK2_ODF_FLAG - * - FLASH_BANK2_PRGMERR_FLAG - * - FLASH_BANK2_EPPERR_FLAG - * - FLASH_SPIM_OBF_FLAG - * - FLASH_SPIM_ODF_FLAG - * - FLASH_SPIM_PRGMERR_FLAG - * - FLASH_SPIM_EPPERR_FLAG - * - FLASH_USDERR_FLAG - * @retval the new state of flash_flag (SET or RESET). - */ -flag_status flash_flag_get(uint32_t flash_flag) -{ - flag_status status = RESET; - uint32_t flag_position; - flag_position = flash_flag & 0x70000000; - flash_flag &= 0x8FFFFFFF; - switch(flag_position) - { - case 0x00000000: - if(FLASH->sts & flash_flag) - status = SET; - break; - case 0x10000000: - if(FLASH->sts2 & flash_flag) - status = SET; - break; - case 0x20000000: - if(FLASH->sts3 & flash_flag) - status = SET; - break; - case 0x40000000: - if(FLASH->usd & flash_flag) - status = SET; - break; - default: - break; - } - /* return the new state of flash_flag (SET or RESET) */ - return status; -} - -/** - * @brief clear the flash flag. - * @param flash_flag: specifies the flash flags to clear. - * this parameter can be any combination of the following values: - * - FLASH_ODF_FLAG - * - FLASH_PRGMERR_FLAG - * - FLASH_EPPERR_FLAG - * - FLASH_BANK1_ODF_FLAG - * - FLASH_BANK1_PRGMERR_FLAG - * - FLASH_BANK1_EPPERR_FLAG - * - FLASH_BANK2_ODF_FLAG - * - FLASH_BANK2_PRGMERR_FLAG - * - FLASH_BANK2_EPPERR_FLAG - * - FLASH_SPIM_ODF_FLAG - * - FLASH_SPIM_PRGMERR_FLAG - * - FLASH_SPIM_EPPERR_FLAG - * @retval none - */ -void flash_flag_clear(uint32_t flash_flag) -{ - uint32_t flag_position; - flag_position = flash_flag & 0x70000000; - flash_flag &= 0x8FFFFFFF; - switch(flag_position) - { - case 0x00000000: - FLASH->sts = flash_flag; - break; - case 0x10000000: - FLASH->sts2 = flash_flag; - break; - case 0x20000000: - FLASH->sts3 = flash_flag; - break; - default: - break; - } -} - -/** - * @brief return the flash operation status. - * @param none - * @retval status: the returned value can be: FLASH_OPERATE_BUSY, - * FLASH_PROGRAM_ERROR, FLASH_EPP_ERROR or FLASH_OPERATE_DONE. - */ -flash_status_type flash_operation_status_get(void) -{ - flash_status_type flash_status = FLASH_OPERATE_DONE; - if(FLASH->sts_bit.obf != RESET) - { - flash_status = FLASH_OPERATE_BUSY; - } - else if(FLASH->sts_bit.prgmerr != RESET) - { - flash_status = FLASH_PROGRAM_ERROR; - } - else if(FLASH->sts_bit.epperr != RESET) - { - flash_status = FLASH_EPP_ERROR; - } - else - { - flash_status = FLASH_OPERATE_DONE; - } - /* return the flash status */ - return flash_status; -} - -/** - * @brief return the flash bank1 operation status. - * @param none - * @retval status: the returned value can be: FLASH_OPERATE_BUSY, - * FLASH_PROGRAM_ERROR, FLASH_EPP_ERROR or FLASH_OPERATE_DONE. - */ -flash_status_type flash_bank1_operation_status_get(void) -{ - flash_status_type flash_status = FLASH_OPERATE_DONE; - if(FLASH->sts_bit.obf != RESET) - { - flash_status = FLASH_OPERATE_BUSY; - } - else if(FLASH->sts_bit.prgmerr != RESET) - { - flash_status = FLASH_PROGRAM_ERROR; - } - else if(FLASH->sts_bit.epperr != RESET) - { - flash_status = FLASH_EPP_ERROR; - } - else - { - flash_status = FLASH_OPERATE_DONE; - } - /* return the flash status */ - return flash_status; -} - -/** - * @brief return the flash bank2 operation status. - * @param none - * @retval status: the returned value can be: FLASH_OPERATE_BUSY, - * FLASH_PROGRAM_ERROR, FLASH_EPP_ERROR or FLASH_OPERATE_DONE. - */ -flash_status_type flash_bank2_operation_status_get(void) -{ - flash_status_type flash_status = FLASH_OPERATE_DONE; - if(FLASH->sts2_bit.obf != RESET) - { - flash_status = FLASH_OPERATE_BUSY; - } - else if(FLASH->sts2_bit.prgmerr != RESET) - { - flash_status = FLASH_PROGRAM_ERROR; - } - else if(FLASH->sts2_bit.epperr != RESET) - { - flash_status = FLASH_EPP_ERROR; - } - else - { - flash_status = FLASH_OPERATE_DONE; - } - /* return the flash status */ - return flash_status; -} - -/** - * @brief return the flash spim operation status. - * @param none - * @retval status: the returned value can be: FLASH_OPERATE_BUSY, - * FLASH_PROGRAM_ERROR, FLASH_EPP_ERROR or FLASH_OPERATE_DONE. - */ -flash_status_type flash_spim_operation_status_get(void) -{ - flash_status_type flash_status = FLASH_OPERATE_DONE; - if(FLASH->sts3_bit.obf != RESET) - { - flash_status = FLASH_OPERATE_BUSY; - } - else if(FLASH->sts3_bit.prgmerr != RESET) - { - flash_status = FLASH_PROGRAM_ERROR; - } - else if(FLASH->sts3_bit.epperr != RESET) - { - flash_status = FLASH_EPP_ERROR; - } - else - { - flash_status = FLASH_OPERATE_DONE; - } - /* return the flash status */ - return flash_status; -} - -/** - * @brief wait for flash operation complete or timeout. - * @param time_out: flash operation timeout - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_operation_wait_for(uint32_t time_out) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* check for the flash status */ - status = flash_operation_status_get(); - - while((status == FLASH_OPERATE_BUSY) && (time_out != 0x00)) - { - status = flash_operation_status_get(); - time_out--; - } - if(time_out == 0x00) - { - status = FLASH_OPERATE_TIMEOUT; - } - /* return the status */ - return status; -} - -/** - * @brief wait for flash bank1 operation complete or timeout. - * @param time_out: flash operation timeout - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_bank1_operation_wait_for(uint32_t time_out) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* check for the flash status */ - status = flash_bank1_operation_status_get(); - - while((status == FLASH_OPERATE_BUSY) && (time_out != 0x00)) - { - status = flash_bank1_operation_status_get(); - time_out--; - } - if(time_out == 0x00) - { - status = FLASH_OPERATE_TIMEOUT; - } - /* return the operation status */ - return status; -} - -/** - * @brief wait for flash bank2 operation complete or timeout. - * @param time_out: flash operation timeout - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_bank2_operation_wait_for(uint32_t time_out) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* check for the flash status */ - status = flash_bank2_operation_status_get(); - - while((status == FLASH_OPERATE_BUSY) && (time_out != 0x00)) - { - status = flash_bank2_operation_status_get(); - time_out--; - } - if(time_out == 0x00) - { - status = FLASH_OPERATE_TIMEOUT; - } - /* return the operation status */ - return status; -} - -/** - * @brief wait for flash spim operation complete or timeout. - * @param time_out: flash operation timeout - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_spim_operation_wait_for(uint32_t time_out) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* check for the flash status */ - status = flash_spim_operation_status_get(); - - while((status == FLASH_OPERATE_BUSY) && (time_out != 0x00)) - { - status = flash_spim_operation_status_get(); - time_out--; - } - if(time_out == 0x00) - { - status = FLASH_OPERATE_TIMEOUT; - } - /* return the operation status */ - return status; -} - -/** - * @brief unlock the flash controller. - * @param none - * @retval none - */ -void flash_unlock(void) -{ - FLASH->unlock = FLASH_UNLOCK_KEY1; - FLASH->unlock = FLASH_UNLOCK_KEY2; - FLASH->unlock2 = FLASH_UNLOCK_KEY1; - FLASH->unlock2 = FLASH_UNLOCK_KEY2; -} - -/** - * @brief unlock the flash bank1 controller. - * @param none - * @retval none - */ -void flash_bank1_unlock(void) -{ - FLASH->unlock = FLASH_UNLOCK_KEY1; - FLASH->unlock = FLASH_UNLOCK_KEY2; -} - -/** - * @brief unlock the flash bank2 controller. - * @param none - * @retval none - */ -void flash_bank2_unlock(void) -{ - FLASH->unlock2 = FLASH_UNLOCK_KEY1; - FLASH->unlock2 = FLASH_UNLOCK_KEY2; -} - -/** - * @brief unlock the flash spim controller. - * @param none - * @retval none - */ -void flash_spim_unlock(void) -{ - FLASH->unlock3 = FLASH_UNLOCK_KEY1; - FLASH->unlock3 = FLASH_UNLOCK_KEY2; -} - -/** - * @brief lock the flash controller. - * @param none - * @retval none - */ -void flash_lock(void) -{ - FLASH->ctrl_bit.oplk = TRUE; - FLASH->ctrl2_bit.oplk = TRUE; -} - -/** - * @brief lock the flash bank1 controller. - * @param none - * @retval none - */ -void flash_bank1_lock(void) -{ - FLASH->ctrl_bit.oplk = TRUE; -} - -/** - * @brief lock the flash bank2 controller. - * @param none - * @retval none - */ -void flash_bank2_lock(void) -{ - FLASH->ctrl2_bit.oplk = TRUE; -} - -/** - * @brief lock the flash spim controller. - * @param none - * @retval none - */ -void flash_spim_lock(void) -{ - FLASH->ctrl3_bit.oplk = TRUE; -} - -/** - * @brief erase a specified flash sector. - * @param sector_address: the sector address to be erased. - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_sector_erase(uint32_t sector_address) -{ - flash_status_type status = FLASH_OPERATE_DONE; - if((sector_address >= FLASH_BANK1_START_ADDR) && (sector_address <= FLASH_BANK1_END_ADDR)) - { - /* wait for last operation to be completed */ - status = flash_bank1_operation_wait_for(ERASE_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* if the previous operation is completed, continue to erase the sector */ - FLASH->ctrl_bit.secers = TRUE; - FLASH->addr = sector_address; - FLASH->ctrl_bit.erstr = TRUE; - - /* wait for operation to be completed */ - status = flash_bank1_operation_wait_for(ERASE_TIMEOUT); - - /* disable the secers bit */ - FLASH->ctrl_bit.secers = FALSE; - } - } - else if((sector_address >= FLASH_BANK2_START_ADDR) && (sector_address <= FLASH_BANK2_END_ADDR)) - { - /* wait for last operation to be completed */ - status = flash_bank2_operation_wait_for(ERASE_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* if the previous operation is completed, continue to erase the sector */ - FLASH->ctrl2_bit.secers = TRUE; - FLASH->addr2 = sector_address; - FLASH->ctrl2_bit.erstr = TRUE; - - /* wait for operation to be completed */ - status = flash_bank2_operation_wait_for(ERASE_TIMEOUT); - - /* disable the secers bit */ - FLASH->ctrl2_bit.secers = FALSE; - } - } - /* spim : external flash */ - else if(sector_address >= FLASH_SPIM_START_ADDR) - { - /* wait for last operation to be completed */ - status = flash_spim_operation_wait_for(SPIM_ERASE_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* if the previous operation is completed, continue to erase the sector */ - FLASH->ctrl3_bit.secers = TRUE; - FLASH->addr3 = sector_address; - FLASH->ctrl3_bit.erstr = TRUE; - - /* wait for operation to be completed */ - status = flash_spim_operation_wait_for(SPIM_ERASE_TIMEOUT); - - /* disable the secers bit */ - FLASH->ctrl3_bit.secers = FALSE; - } - return status; - } - - /* return the erase status */ - return status; -} - -/** - * @brief erase flash all internal sectors. - * @param none - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_internal_all_erase(void) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* wait for last operation to be completed */ - status = flash_bank1_operation_wait_for(ERASE_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* if the previous operation is completed, continue to erase bank1 */ - FLASH->ctrl_bit.bankers = TRUE; - FLASH->ctrl_bit.erstr = TRUE; - - /* wait for operation to be completed */ - status = flash_bank1_operation_wait_for(ERASE_TIMEOUT); - - /* disable the bankers bit */ - FLASH->ctrl_bit.bankers = FALSE; - } - if(status == FLASH_OPERATE_DONE) - { - /* if the previous operation is completed, continue to erase bank2 */ - FLASH->ctrl2_bit.bankers = TRUE; - FLASH->ctrl2_bit.erstr = TRUE; - - /* wait for operation to be completed */ - status = flash_bank2_operation_wait_for(ERASE_TIMEOUT); - - /* disable the bankers bit */ - FLASH->ctrl2_bit.bankers = FALSE; - } - /* return the erase status */ - return status; -} - -/** - * @brief erase flash bank1 sectors. - * @param none - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_bank1_erase(void) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* wait for last operation to be completed */ - status = flash_bank1_operation_wait_for(ERASE_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* if the previous operation is completed, continue to erase bank1 */ - FLASH->ctrl_bit.bankers = TRUE; - FLASH->ctrl_bit.erstr = TRUE; - - /* wait for operation to be completed */ - status = flash_bank1_operation_wait_for(ERASE_TIMEOUT); - - /* disable the bankers bit */ - FLASH->ctrl_bit.bankers = FALSE; - } - /* return the erase status */ - return status; -} - -/** - * @brief erase flash bank2 sectors. - * @param none - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_bank2_erase(void) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* wait for last operation to be completed */ - status = flash_bank2_operation_wait_for(ERASE_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* if the previous operation is completed, continue to erase bank2 */ - FLASH->ctrl2_bit.bankers = TRUE; - FLASH->ctrl2_bit.erstr = TRUE; - - /* wait for operation to be completed */ - status = flash_bank2_operation_wait_for(ERASE_TIMEOUT); - - /* disable the bankers bit */ - FLASH->ctrl2_bit.bankers = FALSE; - } - /* return the erase status */ - return status; -} - -/** - * @brief erase flash spim sectors. - * @param none - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_spim_all_erase(void) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* wait for last operation to be completed */ - status = flash_spim_operation_wait_for(SPIM_ERASE_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* if the previous operation is completed, continue to erase spim */ - FLASH->ctrl3_bit.chpers = TRUE; - FLASH->ctrl3_bit.erstr = TRUE; - - /* wait for operation to be completed */ - status = flash_spim_operation_wait_for(SPIM_ERASE_TIMEOUT); - - /* disable the chpers bit */ - FLASH->ctrl3_bit.chpers = FALSE; - } - /* return the erase status */ - return status; -} - -/** - * @brief erase the flash user system data. - * @note this functions erases all user system data except the fap byte. - * @param none - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_user_system_data_erase(void) -{ - flash_status_type status = FLASH_OPERATE_DONE; - uint16_t fap_val = FAP_RELIEVE_KEY; - /* get the flash access protection status */ - if(flash_fap_status_get() != RESET) - { - fap_val = 0x0000; - } - - /* wait for last operation to be completed */ - status = flash_operation_wait_for(ERASE_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* unlock the user system data */ - FLASH->usd_unlock = FLASH_UNLOCK_KEY1; - FLASH->usd_unlock = FLASH_UNLOCK_KEY2; - while(FLASH->ctrl_bit.usdulks==RESET); - - /* erase the user system data */ - FLASH->ctrl_bit.usders = TRUE; - FLASH->ctrl_bit.erstr = TRUE; - - /* wait for operation to be completed */ - status = flash_operation_wait_for(ERASE_TIMEOUT); - - /* disable the usders bit */ - FLASH->ctrl_bit.usders = FALSE; - - if((status == FLASH_OPERATE_DONE) && (fap_val == FAP_RELIEVE_KEY)) - { - /* enable the user system data programming operation */ - FLASH->ctrl_bit.usdprgm = TRUE; - - /* restore the last flash access protection value */ - USD->fap = (uint16_t)fap_val; - - /* wait for operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - - /*disable the usdprgm bit */ - FLASH->ctrl_bit.usdprgm = FALSE; - } - } - /* return the erase status */ - return status; -} - -/** - * @brief program a word at a specified address. - * @param address: specifies the address to be programmed, word alignment is recommended. - * @param data: specifies the data to be programmed. - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_word_program(uint32_t address, uint32_t data) -{ - flash_status_type status = FLASH_OPERATE_DONE; - if((address >= FLASH_BANK1_START_ADDR) && (address <= FLASH_BANK1_END_ADDR)) - { - /* wait for last operation to be completed */ - status = flash_bank1_operation_wait_for(PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - FLASH->ctrl_bit.fprgm = TRUE; - *(__IO uint32_t*)address = data; - /* wait for operation to be completed */ - status = flash_bank1_operation_wait_for(PROGRAMMING_TIMEOUT); - - /* disable the fprgm bit */ - FLASH->ctrl_bit.fprgm = FALSE; - } - } - else if((address >= FLASH_BANK2_START_ADDR) && (address <= FLASH_BANK2_END_ADDR)) - { - /* wait for last operation to be completed */ - status = flash_bank2_operation_wait_for(PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - FLASH->ctrl2_bit.fprgm = TRUE; - *(__IO uint32_t*)address = data; - /* wait for operation to be completed */ - status = flash_bank2_operation_wait_for(PROGRAMMING_TIMEOUT); - - /* disable the fprgm bit */ - FLASH->ctrl2_bit.fprgm = FALSE; - } - } - /* spim : external flash */ - else if(address >= FLASH_SPIM_START_ADDR) - { - /* wait for last operation to be completed */ - status = flash_spim_operation_wait_for(SPIM_PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - FLASH->ctrl3_bit.fprgm = TRUE; - *(__IO uint32_t*)address = data; - /* wait for operation to be completed */ - status = flash_spim_operation_wait_for(SPIM_PROGRAMMING_TIMEOUT); - - /* disable the fprgm bit */ - FLASH->ctrl3_bit.fprgm = FALSE; - } - } - - /* return the program status */ - return status; -} - -/** - * @brief program a halfword at a specified address. - * @param address: specifies the address to be programmed, halfword alignment is recommended. - * @param data: specifies the data to be programmed. - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_halfword_program(uint32_t address, uint16_t data) -{ - flash_status_type status = FLASH_OPERATE_DONE; - if((address >= FLASH_BANK1_START_ADDR) && (address <= FLASH_BANK1_END_ADDR)) - { - /* wait for last operation to be completed */ - status = flash_bank1_operation_wait_for(PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - FLASH->ctrl_bit.fprgm = TRUE; - *(__IO uint16_t*)address = data; - /* wait for operation to be completed */ - status = flash_bank1_operation_wait_for(PROGRAMMING_TIMEOUT); - - /* disable the fprgm bit */ - FLASH->ctrl_bit.fprgm = FALSE; - } - } - else if((address >= FLASH_BANK2_START_ADDR) && (address <= FLASH_BANK2_END_ADDR)) - { - /* wait for last operation to be completed */ - status = flash_bank2_operation_wait_for(PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - FLASH->ctrl2_bit.fprgm = TRUE; - *(__IO uint16_t*)address = data; - /* wait for operation to be completed */ - status = flash_bank2_operation_wait_for(PROGRAMMING_TIMEOUT); - - /* disable the fprgm bit */ - FLASH->ctrl2_bit.fprgm = FALSE; - } - } - /* spim : external flash */ - else if(address >= FLASH_SPIM_START_ADDR) - { - /* wait for last operation to be completed */ - status = flash_spim_operation_wait_for(SPIM_PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - FLASH->ctrl3_bit.fprgm = TRUE; - *(__IO uint16_t*)address = data; - /* wait for operation to be completed */ - status = flash_spim_operation_wait_for(SPIM_PROGRAMMING_TIMEOUT); - - /* disable the fprgm bit */ - FLASH->ctrl3_bit.fprgm = FALSE; - } - } - - /* return the program status */ - return status; -} - -/** - * @brief program a byte at a specified address. - * @note this function cannot be used to program spim. - * @param address: specifies the address to be programmed. - * @param data: specifies the data to be programmed. - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_byte_program(uint32_t address, uint8_t data) -{ - flash_status_type status = FLASH_OPERATE_DONE; - if((address >= FLASH_BANK1_START_ADDR) && (address <= FLASH_BANK1_END_ADDR)) - { - /* wait for last operation to be completed */ - status = flash_bank1_operation_wait_for(PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - FLASH->ctrl_bit.fprgm = TRUE; - *(__IO uint8_t*)address = data; - /* wait for operation to be completed */ - status = flash_bank1_operation_wait_for(PROGRAMMING_TIMEOUT); - - /* disable the fprgm bit */ - FLASH->ctrl_bit.fprgm = FALSE; - } - } - else if((address >= FLASH_BANK2_START_ADDR) && (address <= FLASH_BANK2_END_ADDR)) - { - /* wait for last operation to be completed */ - status = flash_bank2_operation_wait_for(PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - FLASH->ctrl2_bit.fprgm = TRUE; - *(__IO uint8_t*)address = data; - /* wait for operation to be completed */ - status = flash_bank2_operation_wait_for(PROGRAMMING_TIMEOUT); - - /* disable the fprgm bit */ - FLASH->ctrl2_bit.fprgm = FALSE; - } - } - /* return the program status */ - return status; -} - -/** - * @brief program a halfword at a specified user system data address. - * @param address: specifies the address to be programmed. - * @param data: specifies the data to be programmed. - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_user_system_data_program(uint32_t address, uint8_t data) -{ - flash_status_type status = FLASH_OPERATE_DONE; - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - if(status == FLASH_OPERATE_DONE) - { - /* unlock the user system data */ - FLASH->usd_unlock = FLASH_UNLOCK_KEY1; - FLASH->usd_unlock = FLASH_UNLOCK_KEY2; - while(FLASH->ctrl_bit.usdulks==RESET); - - /* enable the user system data programming operation */ - FLASH->ctrl_bit.usdprgm = TRUE; - *(__IO uint16_t*)address = data; - - /* wait for operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - - /* disable the usdprgm bit */ - FLASH->ctrl_bit.usdprgm = FALSE; - } - /* return the user system data program status */ - return status; -} - -/** - * @brief config erase/program protection for the desired sectors. - * @param sector_bits: - * the pointer of the address of the sectors to be erase/program protected. - * general every bit is used to protect the 4KB bytes, and the last one bit - * is used to protect the rest. - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_epp_set(uint32_t *sector_bits) -{ - uint16_t epp_data[4] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF}; - flash_status_type status = FLASH_OPERATE_DONE; - sector_bits[0] = (uint32_t)(~sector_bits[0]); - epp_data[0] = (uint16_t)((sector_bits[0] >> 0) & 0xFF); - epp_data[1] = (uint16_t)((sector_bits[0] >> 8) & 0xFF); - epp_data[2] = (uint16_t)((sector_bits[0] >> 16) & 0xFF); - epp_data[3] = (uint16_t)((sector_bits[0] >> 24) & 0xFF); - /* wait for last operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* unlock the user system data */ - FLASH->usd_unlock = FLASH_UNLOCK_KEY1; - FLASH->usd_unlock = FLASH_UNLOCK_KEY2; - while(FLASH->ctrl_bit.usdulks==RESET); - - FLASH->ctrl_bit.usdprgm = TRUE; - USD->epp0 = epp_data[0]; - /* wait for operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - USD->epp1 = epp_data[1]; - /* wait for operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - } - if(status == FLASH_OPERATE_DONE) - { - USD->epp2 = epp_data[2]; - /* wait for operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - } - if(status == FLASH_OPERATE_DONE) - { - USD->epp3 = epp_data[3]; - /* wait for operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - } - /* disable the usdprgm bit */ - FLASH->ctrl_bit.usdprgm = FALSE; - } - /* return the erase/program protection operation status */ - return status; -} - -/** - * @brief return the flash erase/program protection status. - * @param sector_bits: pointer to get the epps register. - * @retval none - */ -void flash_epp_status_get(uint32_t *sector_bits) -{ - /* return the flash erase/program protection register value */ - sector_bits[0] = (uint32_t)(FLASH->epps); -} - -/** - * @brief enable or disable the flash access protection. - * @note if the user has already programmed the other user system data before calling - * this function, must re-program them since this function erase all user system data. - * @param new_state: new state of the flash access protection. - * this parameter can be: TRUE or FALSE. - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_fap_enable(confirm_state new_state) -{ - flash_status_type status = FLASH_OPERATE_DONE; - status = flash_operation_wait_for(ERASE_TIMEOUT); - if(status == FLASH_OPERATE_DONE) - { - /* unlock the user system data */ - FLASH->usd_unlock = FLASH_UNLOCK_KEY1; - FLASH->usd_unlock = FLASH_UNLOCK_KEY2; - while(FLASH->ctrl_bit.usdulks==RESET); - - FLASH->ctrl_bit.usders = TRUE; - FLASH->ctrl_bit.erstr = TRUE; - /* wait for operation to be completed */ - status = flash_operation_wait_for(ERASE_TIMEOUT); - - /* disable the usders bit */ - FLASH->ctrl_bit.usders = FALSE; - - if(status == FLASH_OPERATE_DONE) - { - if(new_state == FALSE) - { - /* enable the user system data programming operation */ - FLASH->ctrl_bit.usdprgm = TRUE; - USD->fap = FAP_RELIEVE_KEY; - - /* Wait for operation to be completed */ - status = flash_operation_wait_for(ERASE_TIMEOUT); - - /* disable the usdprgm bit */ - FLASH->ctrl_bit.usdprgm = FALSE; - } - } - } - /* return the flash access protection operation status */ - return status; -} - -/** - * @brief check the flash access protection status. - * @param none - * @retval flash access protection status(SET or RESET) - */ -flag_status flash_fap_status_get(void) -{ - return (flag_status)FLASH->usd_bit.fap; -} - -/** - * @brief program the flash system setting byte in usd: wdt_ato_en / depslp_rst / stdby_rst / btopt. - * @param usd_ssb: the system setting byte - * @note this parameter usd_ssb must contain a combination of all the following 4 types of data - * type 1: wdt_ato_en, select the wdt auto start - * this data can be one of the following values: - * - USD_WDT_ATO_DISABLE: disable wdt auto start - * - USD_WDT_ATO_ENABLE: enable wdt auto start - * type 2: depslp_rst, reset event when entering deepsleep mode. - * this data can be one of the following values: - * - USD_DEPSLP_NO_RST: no reset generated when entering in deepsleep - * - USD_DEPSLP_RST: reset generated when entering in deepsleep - * type 3: stdby_rst, reset event when entering standby mode. - * this data can be one of the following values: - * - USD_STDBY_NO_RST: no reset generated when entering in standby - * - USD_STDBY_RST: reset generated when entering in standby - * type 4: btopt, at startup,if boot pins are set in boot from user flash position,selected the device boot from bank1/bank2. - * this data can be one of the following values: - * - FLASH_BOOT_FROM_BANK1:boot from bank1 - * - FLASH_BOOT_FROM_BANK2:boot from bank 2 or bank 1 - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_ssb_set(uint8_t usd_ssb) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* wait for last operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - - if(status == FLASH_OPERATE_DONE) - { - /* unlock the user system data */ - FLASH->usd_unlock = FLASH_UNLOCK_KEY1; - FLASH->usd_unlock = FLASH_UNLOCK_KEY2; - while(FLASH->ctrl_bit.usdulks==RESET); - - /* enable the user system data programming operation */ - FLASH->ctrl_bit.usdprgm = TRUE; - - USD->ssb = usd_ssb; - /* wait for operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - - /* disable the usdprgm bit */ - FLASH->ctrl_bit.usdprgm = FALSE; - } - /* return the user system data program status */ - return status; -} - -/** - * @brief return the flash system setting byte status. - * @param none - * @retval values from flash_usd register: wdt_ato_en(bit0), depslp_rst(bit1), - * stdby_rst(bit2) and btopt(bit3). - */ -uint8_t flash_ssb_status_get(void) -{ - /* return the system setting byte status */ - return (uint8_t)(FLASH->usd >> 2); -} - -/** - * @brief enable or disable the specified flash interrupts. - * @param flash_int: specifies the flash interrupt sources to be enabled or disabled. - * this parameter can be any combination of the following values: - * - FLASH_ERR_INT - * - FLASH_ODF_INT - * - FLASH_BANK1_ERR_INT - * - FLASH_BANK1_ODF_INT - * - FLASH_BANK2_ERR_INT - * - FLASH_BANK2_ODF_INT - * - FLASH_SPIM_ERR_INT - * - FLASH_SPIM_ODF_INT - * @param new_state: new state of the specified flash interrupts. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void flash_interrupt_enable(uint32_t flash_int, confirm_state new_state) -{ - if(flash_int & FLASH_BANK1_ERR_INT) - FLASH->ctrl_bit.errie = new_state; - if(flash_int & FLASH_BANK1_ODF_INT) - FLASH->ctrl_bit.odfie = new_state; - if(flash_int & FLASH_BANK2_ERR_INT) - FLASH->ctrl2_bit.errie = new_state; - if(flash_int & FLASH_BANK2_ODF_INT) - FLASH->ctrl2_bit.odfie = new_state; - if(flash_int & FLASH_SPIM_ERR_INT) - FLASH->ctrl3_bit.errie = new_state; - if(flash_int & FLASH_SPIM_ODF_INT) - FLASH->ctrl3_bit.odfie = new_state; -} - -/** - * @brief select spim supports extended spi flash chip model. - * @param mode: the extended spi flash model - * @retval none - */ -void flash_spim_model_select(flash_spim_model_type mode) -{ - FLASH->select = mode; -} - -/** - * @brief set the range of encryption in spim flash. - * when the address is larger than this value, the writing data will be - * directly written to spim without encryption. - * @param decode_address: the end address of encrypted data in spim - * @retval none - */ -void flash_spim_encryption_range_set(uint32_t decode_address) -{ - FLASH->da = decode_address; -} - -/** - * @brief enable security library function. - * @param pwd: slib password - * start_sector: security library start sector - * data_start_sector: security library d-bus area start sector - * end_sector: security library end sector - * @retval status: the returned value can be: FLASH_PROGRAM_ERROR, - * FLASH_EPP_ERROR, FLASH_OPERATE_DONE or FLASH_OPERATE_TIMEOUT. - */ -flash_status_type flash_slib_enable(uint32_t pwd, uint16_t start_sector, uint16_t data_start_sector, uint16_t end_sector) -{ - uint32_t slib_range; - flash_status_type status = FLASH_OPERATE_DONE; - /* wait for last operation to be completed */ - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - - /*check range param limits*/ - if((start_sector>=data_start_sector) || ((data_start_sector > end_sector) && \ - (data_start_sector != 0x7FF)) || (start_sector > end_sector)) - return FLASH_PROGRAM_ERROR; - - if(status == FLASH_OPERATE_DONE) - { - /* unlock slib cfg register */ - FLASH->slib_unlock = SLIB_UNLOCK_KEY; - while(FLASH->slib_misc_sts_bit.slib_ulkf==RESET); - - slib_range = ((uint32_t)(data_start_sector << 11) & FLASH_SLIB_DATA_START_SECTOR) | \ - ((uint32_t)(end_sector << 22) & FLASH_SLIB_END_SECTOR) | \ - (start_sector & FLASH_SLIB_START_SECTOR); - /* configure slib, set pwd and range */ - FLASH->slib_set_pwd = pwd; - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - FLASH->slib_set_range = slib_range; - status = flash_operation_wait_for(PROGRAMMING_TIMEOUT); - } - return status; -} - -/** - * @brief disable slib when slib enabled. - * @param pwd: slib password - * @retval success or error - */ -error_status flash_slib_disable(uint32_t pwd) -{ - flash_status_type status = FLASH_OPERATE_DONE; - /* write password to disable slib */ - FLASH->slib_pwd_clr = pwd; - - status = flash_operation_wait_for(ERASE_TIMEOUT); - if(status == FLASH_OPERATE_DONE) - { - if(FLASH->slib_misc_sts_bit.slib_pwd_ok) - return SUCCESS; - else - return ERROR; - } - return ERROR; -} - -/** - * @brief get remaining count of slib(range: 256~0). - * @param none - * @retval uint32_t - */ -uint32_t flash_slib_remaining_count_get(void) -{ - return (uint32_t)FLASH->slib_misc_sts_bit.slib_rcnt; -} - -/** - * @brief get the slib state. - * @param none - * @retval SET or RESET - */ -flag_status flash_slib_state_get(void) -{ - if(FLASH->slib_sts0_bit.slib_enf) - return SET; - else - return RESET; -} - -/** - * @brief get the start sector of slib. - * @param none - * @retval uint16_t - */ -uint16_t flash_slib_start_sector_get(void) -{ - return (uint16_t)FLASH->slib_sts1_bit.slib_ss; -} - -/** - * @brief get the data start sector of slib. - * @param none - * @retval uint16_t - */ -uint16_t flash_slib_datstart_sector_get(void) -{ - return (uint16_t)FLASH->slib_sts1_bit.slib_dat_ss; -} - -/** - * @brief get the end sector of slib. - * @param none - * @retval uint16_t - */ -uint16_t flash_slib_end_sector_get(void) -{ - return (uint16_t)FLASH->slib_sts1_bit.slib_es; -} - -/** - * @brief flash crc calibration in main block. - * @param start_sector: crc calibration start sector number - * sector_cnt: crc calibration sector count - * @retval uint32: crc calibration result - */ -uint32_t flash_crc_calibrate(uint32_t start_sector, uint32_t sector_cnt) -{ - FLASH->crc_ctrl_bit.crc_ss = start_sector; - FLASH->crc_ctrl_bit.crc_sn = sector_cnt; - FLASH->crc_ctrl_bit.crc_strt = TRUE; - flash_operation_wait_for(OPERATION_TIMEOUT); - return FLASH->crc_chkr; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_gpio.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_gpio.c deleted file mode 100644 index fbff02d..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_gpio.c +++ /dev/null @@ -1,665 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_gpio.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the gpio firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup GPIO - * @brief GPIO driver modules - * @{ - */ - -#ifdef GPIO_MODULE_ENABLED - -/** @defgroup GPIO_private_functions - * @{ - */ - -/** - * @brief reset the gpio register - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @retval none - */ -void gpio_reset(gpio_type *gpio_x) -{ - if(gpio_x == GPIOA) - { - crm_periph_reset(CRM_GPIOA_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_GPIOA_PERIPH_RESET, FALSE); - } - else if(gpio_x == GPIOB) - { - crm_periph_reset(CRM_GPIOB_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_GPIOB_PERIPH_RESET, FALSE); - } - else if(gpio_x == GPIOC) - { - crm_periph_reset(CRM_GPIOC_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_GPIOC_PERIPH_RESET, FALSE); - } - else if(gpio_x == GPIOD) - { - crm_periph_reset(CRM_GPIOD_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_GPIOD_PERIPH_RESET, FALSE); - } - else if(gpio_x == GPIOE) - { - crm_periph_reset(CRM_GPIOE_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_GPIOE_PERIPH_RESET, FALSE); - } -} - -/** - * @brief reset the mux functions (remap, event control - and exint configuration) registers to their default values. - * @param none - * @retval none - */ -void gpio_iomux_reset(void) -{ - crm_periph_reset(CRM_IOMUX_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_IOMUX_PERIPH_RESET, FALSE); -} - -/** - * @brief initialize the gpio peripheral. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @param gpio_init_struct: pointer to gpio init structure. - * @retval none - */ -void gpio_init(gpio_type *gpio_x, gpio_init_type *gpio_init_struct) -{ - uint32_t temp; - uint16_t pinx_value, pin_index; - - pin_index = (uint16_t)gpio_init_struct->gpio_pins; - - /* pinx_value indecate pin grounp bit[3:0] from modey[1:0] confy[1:0] */ - - /* pin input analog config */ - if(gpio_init_struct->gpio_mode == GPIO_MODE_ANALOG) - { - pinx_value = 0x00; - } - /* pin input config */ - else if(gpio_init_struct->gpio_mode == GPIO_MODE_INPUT) - { - pinx_value = gpio_init_struct->gpio_pull & 0x0F; - - if(gpio_init_struct->gpio_pull == GPIO_PULL_UP) - { - gpio_x->scr = pin_index; - } - else if(gpio_init_struct->gpio_pull == GPIO_PULL_DOWN) - { - gpio_x->clr = pin_index; - } - } - else - { - pinx_value = (gpio_init_struct->gpio_mode & 0x08) | (gpio_init_struct->gpio_out_type & 0x04) | \ - (gpio_init_struct->gpio_drive_strength & 0x03); - } - - /* pin 0~7 config */ - if(((uint32_t)pin_index & ((uint32_t)0x00FF)) != 0x00) - { - for(temp = 0; temp < 0x08; temp++) - { - if((1 << temp) & pin_index) - { - gpio_x->cfglr &= (uint32_t)~(0x0F << (temp * 4)); - gpio_x->cfglr |= (uint32_t)(pinx_value << (temp * 4)); - } - } - } - - /* pin 8~15 config */ - if(pin_index > 0x00ff) - { - pin_index = pin_index >> 8; - - for(temp = 0; temp < 0x8; temp++) - { - if((1 << temp) & pin_index) - { - gpio_x->cfghr &= (uint32_t)~(0xf << (temp * 4)); - gpio_x->cfghr |= (uint32_t)(pinx_value << (temp * 4)); - } - } - } -} - -/** - * @brief fill each gpio_init_type member with its default value. - * @param gpio_init_struct : pointer to a gpio_init_type structure which will be initialized. - * @retval none - */ -void gpio_default_para_init(gpio_init_type *gpio_init_struct) -{ - /* reset gpio init structure parameters values */ - gpio_init_struct->gpio_pins = GPIO_PINS_ALL; - gpio_init_struct->gpio_mode = GPIO_MODE_INPUT; - gpio_init_struct->gpio_out_type = GPIO_OUTPUT_PUSH_PULL; - gpio_init_struct->gpio_pull = GPIO_PULL_NONE; - gpio_init_struct->gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; -} - -/** - * @brief read the specified input port pin. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @param pins: gpio pin number - * this parameter can be one of the following values: - * - GPIO_PINS_0 - * - GPIO_PINS_1 - * - GPIO_PINS_2 - * - GPIO_PINS_3 - * - GPIO_PINS_4 - * - GPIO_PINS_5 - * - GPIO_PINS_6 - * - GPIO_PINS_7 - * - GPIO_PINS_8 - * - GPIO_PINS_9 - * - GPIO_PINS_10 - * - GPIO_PINS_11 - * - GPIO_PINS_12 - * - GPIO_PINS_13 - * - GPIO_PINS_14 - * - GPIO_PINS_15 - * @retval flag_status (SET or RESET) - */ -flag_status gpio_input_data_bit_read(gpio_type *gpio_x, uint16_t pins) -{ - flag_status status = RESET; - - if(pins != (pins & gpio_x->idt)) - { - status = RESET; - } - else - { - status = SET; - } - - return status; -} - -/** - * @brief read the specified gpio input data port. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @retval gpio input data port value. - */ -uint16_t gpio_input_data_read(gpio_type *gpio_x) -{ - return ((uint16_t)(gpio_x->idt)); -} - -/** - * @brief read the specified output port pin. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @param pins: gpio pin number - * this parameter can be one of the following values: - * - GPIO_PINS_0 - * - GPIO_PINS_1 - * - GPIO_PINS_2 - * - GPIO_PINS_3 - * - GPIO_PINS_4 - * - GPIO_PINS_5 - * - GPIO_PINS_6 - * - GPIO_PINS_7 - * - GPIO_PINS_8 - * - GPIO_PINS_9 - * - GPIO_PINS_10 - * - GPIO_PINS_11 - * - GPIO_PINS_12 - * - GPIO_PINS_13 - * - GPIO_PINS_14 - * - GPIO_PINS_15 - * @retval flag_status (SET or RESET) - */ -flag_status gpio_output_data_bit_read(gpio_type *gpio_x, uint16_t pins) -{ - flag_status status = RESET; - - if((gpio_x->odt & pins) != RESET) - { - status = SET; - } - else - { - status = RESET; - } - - return status; -} - -/** - * @brief read the specified gpio ouput data port. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @retval gpio input data port value. - */ -uint16_t gpio_output_data_read(gpio_type *gpio_x) -{ - return ((uint16_t)(gpio_x->odt)); -} - -/** - * @brief set the selected data port bits. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @param pins: gpio pin number - * parameter can be any combination of gpio_pin_x, gpio_pin_x as following values: - * - GPIO_PINS_0 - * - GPIO_PINS_1 - * - GPIO_PINS_2 - * - GPIO_PINS_3 - * - GPIO_PINS_4 - * - GPIO_PINS_5 - * - GPIO_PINS_6 - * - GPIO_PINS_7 - * - GPIO_PINS_8 - * - GPIO_PINS_9 - * - GPIO_PINS_10 - * - GPIO_PINS_11 - * - GPIO_PINS_12 - * - GPIO_PINS_13 - * - GPIO_PINS_14 - * - GPIO_PINS_15 - * - GPIO_PINS_ALL - * @retval none - */ -void gpio_bits_set(gpio_type *gpio_x, uint16_t pins) -{ - gpio_x->scr = pins; -} - -/** - * @brief clear the selected data port bits. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @param pins: gpio pin number - * parameter can be any combination of gpio_pin_x, gpio_pin_x as following values: - * - GPIO_PINS_0 - * - GPIO_PINS_1 - * - GPIO_PINS_2 - * - GPIO_PINS_3 - * - GPIO_PINS_4 - * - GPIO_PINS_5 - * - GPIO_PINS_6 - * - GPIO_PINS_7 - * - GPIO_PINS_8 - * - GPIO_PINS_9 - * - GPIO_PINS_10 - * - GPIO_PINS_11 - * - GPIO_PINS_12 - * - GPIO_PINS_13 - * - GPIO_PINS_14 - * - GPIO_PINS_15 - * - GPIO_PINS_ALL - * @retval none - */ -void gpio_bits_reset(gpio_type *gpio_x, uint16_t pins) -{ - gpio_x->clr = pins; -} - -/** - * @brief set or clear the selected data port bit. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @param pins: gpio pin number - * parameter can be any combination of gpio_pin_x, gpio_pin_x as following values: - * - GPIO_PINS_0 - * - GPIO_PINS_1 - * - GPIO_PINS_2 - * - GPIO_PINS_3 - * - GPIO_PINS_4 - * - GPIO_PINS_5 - * - GPIO_PINS_6 - * - GPIO_PINS_7 - * - GPIO_PINS_8 - * - GPIO_PINS_9 - * - GPIO_PINS_10 - * - GPIO_PINS_11 - * - GPIO_PINS_12 - * - GPIO_PINS_13 - * - GPIO_PINS_14 - * - GPIO_PINS_15 - * - GPIO_PINS_ALL - * @param bit_state: specifies the value to be written to the selected bit (TRUE or FALSE). - * @retval none - */ -void gpio_bits_write(gpio_type *gpio_x, uint16_t pins, confirm_state bit_state) -{ - if(bit_state != FALSE) - { - gpio_x->scr = pins; - } - else - { - gpio_x->clr = pins; - } -} - -/** - * @brief write data to the specified gpio data port. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @param port_value: specifies the value to be written to the port output data register. - * @retval none - */ -void gpio_port_wirte(gpio_type *gpio_x, uint16_t port_value) -{ - gpio_x->odt = port_value; -} - -/** - * @brief write protect gpio pins configuration registers. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @param pins: gpio pin number - * this parameter can be any combination of the following: - * - GPIO_PINS_0 - * - GPIO_PINS_1 - * - GPIO_PINS_2 - * - GPIO_PINS_3 - * - GPIO_PINS_4 - * - GPIO_PINS_5 - * - GPIO_PINS_6 - * - GPIO_PINS_7 - * - GPIO_PINS_8 - * - GPIO_PINS_9 - * - GPIO_PINS_10 - * - GPIO_PINS_11 - * - GPIO_PINS_12 - * - GPIO_PINS_13 - * - GPIO_PINS_14 - * - GPIO_PINS_15 - * - GPIO_PINS_ALL - * @retval none - */ -void gpio_pin_wp_config(gpio_type *gpio_x, uint16_t pins) -{ - uint32_t temp = 0x00010000; - - temp |= pins; - /* set wpen bit */ - gpio_x->wpr = temp; - /* reset wpen bit */ - gpio_x->wpr = pins; - /* set wpen bit */ - gpio_x->wpr = temp; - /* read wpen bit*/ - temp = gpio_x->wpr; - /* read wpen bit*/ - temp = gpio_x->wpr; -} - -/** - * @brief enable or disable gpio pins huge driven. - * @param gpio_x: to select the gpio peripheral. - * this parameter can be one of the following values: - * GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. - * @param pins: gpio pin number - * parameter can be any combination of gpio_pin_x, gpio_pin_x as following values: - * - GPIO_PINS_0 - * - GPIO_PINS_1 - * - GPIO_PINS_2 - * - GPIO_PINS_3 - * - GPIO_PINS_4 - * - GPIO_PINS_5 - * - GPIO_PINS_6 - * - GPIO_PINS_7 - * - GPIO_PINS_8 - * - GPIO_PINS_9 - * - GPIO_PINS_10 - * - GPIO_PINS_11 - * - GPIO_PINS_12 - * - GPIO_PINS_13 - * - GPIO_PINS_14 - * - GPIO_PINS_15 - * - GPIO_PINS_ALL - * @param new_state: new state of the slew rate. - * this parameter can be: true or false. - * @retval none - */ -void gpio_pins_huge_driven_config(gpio_type *gpio_x, uint16_t pins, confirm_state new_state) -{ - if(new_state != FALSE) - { - gpio_x->hdrv |= pins; - } - else - { - gpio_x->hdrv &= ~pins; - } -} - -/** - * @brief select the gpio pin used as event output. - * @param gpio_port_source: select the gpio port to be used as source - * for event output. - * this parameter can be one of the following values: - * - GPIO_PORT_SOURCE_GPIOA - * - GPIO_PORT_SOURCE_GPIOB - * - GPIO_PORT_SOURCE_GPIOC - * - GPIO_PORT_SOURCE_GPIOD - * - GPIO_PORT_SOURCE_GPIOE - * @param gpio_pin_source: specifies the pin for the event output. - * this parameter can be one of the following values: - * - GPIO_PINS_SOURCE0 - * - GPIO_PINS_SOURCE1 - * - GPIO_PINS_SOURCE2 - * - GPIO_PINS_SOURCE3 - * - GPIO_PINS_SOURCE4 - * - GPIO_PINS_SOURCE5 - * - GPIO_PINS_SOURCE6 - * - GPIO_PINS_SOURCE7 - * - GPIO_PINS_SOURCE8 - * - GPIO_PINS_SOURCE9 - * - GPIO_PINS_SOURCE10 - * - GPIO_PINS_SOURCE11 - * - GPIO_PINS_SOURCE12 - * - GPIO_PINS_SOURCE13 - * - GPIO_PINS_SOURCE14 - * - GPIO_PINS_SOURCE15 - * @retval none - */ -void gpio_event_output_config(gpio_port_source_type gpio_port_source, gpio_pins_source_type gpio_pin_source) -{ - uint32_t tmpreg = 0x00; - - tmpreg = IOMUX->evtout; - - /* clear the port[6:4] and pin[3:0] bits */ - tmpreg &= 0x80; - tmpreg |= (uint32_t)gpio_port_source << 0x04; - tmpreg |= gpio_pin_source; - IOMUX->evtout = tmpreg; -} - -/** - * @brief enable or disable the event output. - * @param confirm_state: new state of the event output. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void gpio_event_output_enable(confirm_state new_state) -{ - IOMUX->evtout_bit.evoen = new_state; -} - -/** - * @brief iomux remap and debug i/o configuration. - * @param gpio_remap: select the pin to remap. - * this parameter can be one of the following values: - * - SPI1_MUX_01 - SPI1_MUX_10 - SPI1_MUX_11 - I2C1_MUX - * - USART1_MUX - USART2_MUX - USART3_MUX_01 - USART3_MUX_11 - * - TMR1_MUX_01 - TMR1_MUX_11 - TMR2_MUX_01 - TMR2_MUX_10 - * - TMR2_MUX_11 - TMR3_MUX_10 - TMR3_MUX_11 - TMR4_MUX - * - CAN_MUX_10 - CAN_MUX_11 - PD01_MUX - TMR5CH4_MUX - * - ADC1_EXTRGPRE_MUX - ADC1_EXTRGORD_MUX - ADC2_EXTRGPRE_MUX - ADC2_EXTRGORD_MUX - * - EMAC_MUX - CAN2_MUX - MII_RMII_SEL_MUX - SWJTAG_MUX_001 - * - SWJTAG_MUX_010 - SWJTAG_MUX_100 - SPI3_MUX - TMR2ITR1_MUX - * - PTP_PPS_MUX - TMR9_MUX - XMC_NADV_MUX - SPI4_MUX - * - I2C3_MUX - SDIO2_MUX01 - SDIO2_MUX10 - SDIO2_MUX11 - * - EXT_SPIM_EN_MUX - TMR9_GMUX - TMR1_GMUX_0001 - TMR1_GMUX_0011 - * - TMR2_GMUX_01 - TMR2_GMUX_10 - TMR2_GMUX_11 - TMR2ITR1_GMUX_10 - * - TMR2ITR1_GMUX_11 - TMR3_GMUX_0010 - TMR3_GMUX_0011 - TMR4_GMUX_0001 - * - TMR5CH4_GMUX - UART5_GMUX_0001 - I2C1_GMUX_0001 - I2C3_GMUX_0001 - * - SPI1_GMUX_0001 - SPI1_GMUX_0010 - SPI1_GMUX_0011 - SPI2_GMUX_0001 - * - SPI2_GMUX_0010 - SPI3_GMUX_0001 - SPI3_GMUX_0010 - SPI3_GMUX_0011 - * - SPI4_GMUX_0001 - SPI4_GMUX_0010 - SPI4_GMUX_0011 - CAN1_GMUX_0010 - * - CAN1_GMUX_0011 - CAN2_GMUX_0001 - SDIO2_GMUX_0001 - SDIO2_GMUX_0010 - * - SDIO2_GMUX_0011 - USART1_GMUX_0001 - USART2_GMUX_0001 - USART3_GMUX_0001 - * - USART3_GMUX_0011 - UART4_GMUX_0010 - EXT_SPIM_GMUX_1000 - EXT_SPIM_GMUX_1001 - * - ADC1_ETP_GMUX - ADC1_ETO_GMUX - ADC2_ETP_GMUX - ADC2_ETO_GMUX - * - SWJTAG_GMUX_001 - SWJTAG_GMUX_010 - SWJTAG_GMUX_100 - PD01_GMUX - * - XMC_GMUX_001 - XMC_GMUX_010 - XMC_NADV_GMUX - EMAC_GMUX_01 - * - MII_RMII_SEL_GMUX - PTP_PPS_GMUX - USART6_GMUX - UART7_GMUX - * - UART8_GMUX - * @param new_state: (TRUE or FALSE) - * @retval none - */ -void gpio_pin_remap_config(uint32_t gpio_remap, confirm_state new_state) -{ - uint32_t reg_addr, remap_mask; - uint8_t bit_offset, bit_num, bit_val; - - /* get register address, bit offset, bit number and remap value */ - reg_addr = IOMUX_BASE + (gpio_remap >> 24); - bit_offset = (gpio_remap >> 16) & 0xFF; - bit_num = (gpio_remap >> 8) & 0xFF; - bit_val = gpio_remap & 0xFF; - - /* get remap mask value */ - remap_mask = 0xFFFFFFFF << (32 - bit_num - bit_offset); - remap_mask = remap_mask >> (32 - bit_num - bit_offset); - remap_mask = remap_mask >> bit_offset; - remap_mask = remap_mask << bit_offset; - - /* clear remap value */ - *(uint32_t*)reg_addr &= ~remap_mask; - - if(new_state != FALSE) - { - /* set remap value */ - *(uint32_t*)reg_addr |= (uint32_t)(bit_val << bit_offset); - } -} - -/** - * @brief select the gpio pin used as exint line. - * @param gpio_port_source: select the gpio port to be used as source for exint. - * this parameter can be one of the following values: - * - GPIO_PORT_SOURCE_GPIOA - * - GPIO_PORT_SOURCE_GPIOB - * - GPIO_PORT_SOURCE_GPIOC - * - GPIO_PORT_SOURCE_GPIOD - * - GPIO_PORT_SOURCE_GPIOE - * - GPIO_PORT_SOURCE_GPIOF - * - GPIO_PORT_SOURCE_GPIOG - * @param gpio_pin_source: specifies the pin for the event output. - * this parameter can be one of the following values: - * - GPIO_PINS_SOURCE0 - * - GPIO_PINS_SOURCE1 - * - GPIO_PINS_SOURCE2 - * - GPIO_PINS_SOURCE3 - * - GPIO_PINS_SOURCE4 - * - GPIO_PINS_SOURCE5 - * - GPIO_PINS_SOURCE6 - * - GPIO_PINS_SOURCE7 - * - GPIO_PINS_SOURCE8 - * - GPIO_PINS_SOURCE9 - * - GPIO_PINS_SOURCE10 - * - GPIO_PINS_SOURCE11 - * - GPIO_PINS_SOURCE12 - * - GPIO_PINS_SOURCE13 - * - GPIO_PINS_SOURCE14 - * - GPIO_PINS_SOURCE15 - * @retval none - */ -void gpio_exint_line_config(gpio_port_source_type gpio_port_source, gpio_pins_source_type gpio_pin_source) -{ - uint32_t tmp = 0x00; - tmp = ((uint32_t)0x0F) << (0x04 * (gpio_pin_source & (uint8_t)0x03)); - - switch (gpio_pin_source >> 0x02) - { - case 0: - IOMUX->exintc1 &= ~tmp; - IOMUX->exintc1 |= (((uint32_t)gpio_port_source) << (0x04 * (gpio_pin_source & (uint8_t)0x03))); - break; - case 1: - IOMUX->exintc2 &= ~tmp; - IOMUX->exintc2 |= (((uint32_t)gpio_port_source) << (0x04 * (gpio_pin_source & (uint8_t)0x03))); - break; - case 2: - IOMUX->exintc3 &= ~tmp; - IOMUX->exintc3 |= (((uint32_t)gpio_port_source) << (0x04 * (gpio_pin_source & (uint8_t)0x03))); - break; - case 3: - IOMUX->exintc4 &= ~tmp; - IOMUX->exintc4 |= (((uint32_t)gpio_port_source) << (0x04 * (gpio_pin_source & (uint8_t)0x03))); - break; - default: - break; - } -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_i2c.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_i2c.c deleted file mode 100644 index 8a55b48..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_i2c.c +++ /dev/null @@ -1,641 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_i2c.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the i2c firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup I2C - * @brief I2C driver modules - * @{ - */ - -#ifdef I2C_MODULE_ENABLED - -/** @defgroup I2C_private_functions - * @{ - */ - -/** - * @brief reset the i2c register - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @retval none - */ -void i2c_reset(i2c_type *i2c_x) -{ - if(i2c_x == I2C1) - { - crm_periph_reset(CRM_I2C1_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_I2C1_PERIPH_RESET, FALSE); - } - else if(i2c_x == I2C2) - { - crm_periph_reset(CRM_I2C2_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_I2C2_PERIPH_RESET, FALSE); - } - else if(i2c_x == I2C3) - { - crm_periph_reset(CRM_I2C3_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_I2C3_PERIPH_RESET, FALSE); - } -} - -/** - * @brief software reset. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_software_reset(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl1_bit.reset = new_state; -} - -/** - * @brief init i2c speed and duty cycle. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param duty - * this parameter can be one of the following values: - * - I2C_FSMODE_DUTY_2_1: duty cycle 2:1 - * - I2C_FSMODE_DUTY_16_9: duty cycle 16:9 - * @param speed: i2c scl clock speed, such as 100000 - * @retval none - */ -void i2c_init(i2c_type *i2c_x, i2c_fsmode_duty_cycle_type duty, uint32_t speed) -{ - uint32_t apb_freq = 0; - uint16_t freq_mhz = 0, temp = 0; - - crm_clocks_freq_type clocks; - - /* disable i2c peripherals */ - i2c_x->ctrl1_bit.i2cen = FALSE; - - /* get system clock */ - crm_clocks_freq_get(&clocks); - - if((i2c_x == I2C1) || (i2c_x == I2C2)) - { - apb_freq = clocks.apb1_freq; - } - else if(i2c_x == I2C3) - { - apb_freq = clocks.apb2_freq; - } - - freq_mhz = (apb_freq / 1000000); - - /* set i2c input clock frequency */ - i2c_x->ctrl2_bit.clkfreq = freq_mhz; - - /* standard mode */ - if(speed <= 100000) - { - temp = (uint16_t)(apb_freq / (speed << 1)); - - if (temp < 0x04) - { - temp = 0x04; - } - - /* set scl clock */ - i2c_x->clkctrl_bit.speed = temp; - - /* disable fast mode */ - i2c_x->clkctrl_bit.speedmode = FALSE; - - /* set the maximum rise time */ - if((freq_mhz + 1) > 0x3F) - { - i2c_x->tmrise_bit.risetime = 0x3F; - } - else - { - i2c_x->tmrise_bit.risetime = (freq_mhz + 1); - } - } - /* fast mode */ - else - { - if (duty == I2C_FSMODE_DUTY_2_1) - { - temp = (uint16_t)(apb_freq / (speed * 3)); - - /* the ratio of high level to low level is 1:2 */ - i2c_x->clkctrl_bit.dutymode = I2C_FSMODE_DUTY_2_1; - } - else - { - temp = (uint16_t)(apb_freq / (speed * 25)); - - /* the ratio of high level to low level is 9:16 */ - i2c_x->clkctrl_bit.dutymode = I2C_FSMODE_DUTY_16_9; - } - - if (temp == 0) - { - temp = 0x0001; - } - - /* set scl clock*/ - i2c_x->clkctrl_bit.speed = temp; - - /* set the mode to fast mode */ - i2c_x->clkctrl_bit.speedmode = TRUE; - - /* set the maximum rise time */ - i2c_x->tmrise_bit.risetime = (uint16_t)(((freq_mhz * (uint16_t)300) / (uint16_t)1000) + (uint16_t)1); - } -} - -/** - * @brief config own address1. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param mode - * this parameter can be one of the following values: - * - I2C_ADDRESS_MODE_7BIT: 7bit address. - * - I2C_ADDRESS_MODE_10BIT: 10bit address. - * @param address: own address1, such as 0xb0. - * @retval none - */ -void i2c_own_address1_set(i2c_type *i2c_x, i2c_address_mode_type mode, uint16_t address) -{ - /* set address mode */ - i2c_x->oaddr1_bit.addr1mode = mode; - - /* set own address1 */ - i2c_x->oaddr1_bit.addr1 = address; -} - -/** - * @brief config own address2. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param address: specifies the 7bit i2c own address2, such as 0xa0. - * @retval none. - */ -void i2c_own_address2_set(i2c_type *i2c_x, uint8_t address) -{ - i2c_x->oaddr2_bit.addr2 = (address >> 1); -} - -/** - * @brief enable or disable own address2. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_own_address2_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->oaddr2_bit.addr2en = new_state; -} - -/** - * @brief enable or disable the smbus mode - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_smbus_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl1_bit.permode = new_state; -} - -/** - * @brief enable or disable i2c periph - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl1_bit.i2cen = new_state; -} - -/** - * @brief config fast mode duty cycle - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param duty - * this parameter can be one of the following values: - * - I2C_FSMODE_DUTY_2_1: duty cycle 2:1 - * - I2C_FSMODE_DUTY_16_9: duty cycle 16:9 - * @retval none - */ -void i2c_fast_mode_duty_set(i2c_type *i2c_x, i2c_fsmode_duty_cycle_type duty) -{ - i2c_x->clkctrl_bit.dutymode = duty; -} - -/** - * @brief enable or disable clock stretch. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_clock_stretch_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl1_bit.stretch = !new_state; -} - -/** - * @brief enable or disable acknowledge. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none. - */ -void i2c_ack_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl1_bit.acken = new_state; -} - -/** - * @brief master receiving mode acknowledge control. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param pos - * this parameter can be one of the following values: - * - I2C_MASTER_ACK_CURRENT: acken bit acts on the current byte - * - I2C_MASTER_ACK_NEXT: acken bit acts on the next byte - * @retval none - */ -void i2c_master_receive_ack_set(i2c_type *i2c_x, i2c_master_ack_type pos) -{ - i2c_x->ctrl1_bit.mackctrl = pos; -} - -/** - * @brief pec position set. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param pos - * this parameter can be one of the following values: - * - I2C_PEC_POSITION_CURRENT: the current byte is pec - * - I2C_PEC_POSITION_NEXT: the next byte is pec - * @retval none - */ -void i2c_pec_position_set(i2c_type *i2c_x, i2c_pec_position_type pos) -{ - i2c_x->ctrl1_bit.mackctrl = pos; -} - -/** - * @brief enable or disable general call. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_general_call_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl1_bit.gcaen = new_state; -} - -/** - * @brief enable or disable arp mode. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_arp_mode_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl1_bit.arpen = new_state; -} - -/** - * @brief config smbus host or device. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param level - * this parameter can be one of the following values: - * - I2C_SMBUS_MODE_DEVICE: smbus device. - * - I2C_SMBUS_MODE_HOST: smbus host. - * @retval none - */ -void i2c_smbus_mode_set(i2c_type *i2c_x, i2c_smbus_mode_set_type mode) -{ - i2c_x->ctrl1_bit.smbmode = mode; -} - -/** - * @brief drive the smbus alert pin high or low. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param level - * this parameter can be one of the following values: - * - I2C_SMBUS_ALERT_LOW: smbus alert pin set low. - * - I2C_SMBUS_ALERT_HIGH: smbus alert pin set high. - * @retval none - */ -void i2c_smbus_alert_set(i2c_type *i2c_x, i2c_smbus_alert_set_type level) -{ - i2c_x->ctrl1_bit.smbalert = level; -} - -/** - * @brief enable or disable pec transfer. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_pec_transmit_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl1_bit.pecten = new_state; -} - -/** - * @brief enable or disable pec calcultetion. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_pec_calculate_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl1_bit.pecen = new_state; -} - -/** - * @brief get pec value. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @retval uint8_t: pec value. - */ -uint8_t i2c_pec_value_get(i2c_type *i2c_x) -{ - return i2c_x->sts2_bit.pecval; -} - -/** - * @brief enable or disable if the next dma transfer will be the last one. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_dma_end_transfer_set(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl2_bit.dmaend = new_state; -} - -/** - * @brief enable or disable dma requests. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_dma_enable(i2c_type *i2c_x, confirm_state new_state) -{ - i2c_x->ctrl2_bit.dmaen = new_state; -} - -/** - * @brief enable or disable interrupt - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param source - * this parameter can be one of the following values: - * - I2C_DATA_INT: data interrupt. - * - I2C_EV_INT: event interrupt. - * - I2C_ERR_INT: error interrupt. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void i2c_interrupt_enable(i2c_type *i2c_x, uint16_t source, confirm_state new_state) -{ - if (new_state != FALSE) - { - i2c_x->ctrl2 |= source; - } - else - { - i2c_x->ctrl2 &= (uint16_t)~source; - } -} - -/** - * @brief generate start condition. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @retval none. - */ -void i2c_start_generate(i2c_type *i2c_x) -{ - i2c_x->ctrl1_bit.genstart = TRUE; -} - -/** - * @brief generate stop condition. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @retval none. - */ -void i2c_stop_generate(i2c_type *i2c_x) -{ - i2c_x->ctrl1_bit.genstop = TRUE; -} - -/** - * @brief transmit the slave address. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param address: specifies the slave address which will be transmitted - * @param direction - * this parameter can be one of the following values: - * - I2C_DIRECTION_TRANSMIT: transmit mode. - * - I2C_DIRECTION_RECEIVE: receive mode. - * @retval none. - */ -void i2c_7bit_address_send(i2c_type *i2c_x, uint8_t address, i2c_direction_type direction) -{ - if(direction == I2C_DIRECTION_TRANSMIT) - { - i2c_x->dt = address & 0xFE; - } - else - { - i2c_x->dt = address | 0x01; - } -} - -/** - * @brief send a byte through the i2c periph. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param data: byte to be transmitted. - * @retval none - */ -void i2c_data_send(i2c_type *i2c_x, uint8_t data) -{ - i2c_x->dt = data; -} - -/** - * @brief receive a byte through the i2c periph. - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @retval uint8_t: received byte - */ -uint8_t i2c_data_receive(i2c_type *i2c_x) -{ - return (uint8_t)i2c_x->dt; -} - -/** - * @brief get flag status - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param flag - * this parameter can be one of the following values: - * - I2C_STARTF_FLAG: start condition generation complete flag. - * - I2C_ADDR7F_FLAG: 0~7 bit address match flag. - * - I2C_TDC_FLAG: transmit data complete flag. - * - I2C_ADDRHF_FLAG: master 9~8 bit address header match flag. - * - I2C_STOPF_FLAG: stop condition generation complete flag. - * - I2C_RDBF_FLAG: receive data buffer full flag. - * - I2C_TDBE_FLAG: transmit data buffer empty flag. - * - I2C_BUSERR_FLAG: bus error flag. - * - I2C_ARLOST_FLAG: arbitration lost flag. - * - I2C_ACKFAIL_FLAG: acknowledge failure flag. - * - I2C_OUF_FLAG: overflow or underflow flag. - * - I2C_PECERR_FLAG: pec receive error flag. - * - I2C_TMOUT_FLAG: smbus timeout flag. - * - I2C_ALERTF_FLAG: smbus alert flag. - * - I2C_TRMODE_FLAG: transmission mode. - * - I2C_BUSYF_FLAG: bus busy flag transmission mode. - * - I2C_DIRF_FLAG: transmission direction flag. - * - I2C_GCADDRF_FLAG: general call address received flag. - * - I2C_DEVADDRF_FLAG: smbus device address received flag. - * - I2C_HOSTADDRF_FLAG: smbus host address received flag. - * - I2C_ADDR2_FLAG: own address 2 received flag. - * @retval flag_status (SET or RESET) - */ -flag_status i2c_flag_get(i2c_type *i2c_x, uint32_t flag) -{ - __IO uint32_t reg = 0, value = 0; - - reg = flag >> 28; - - flag &= (uint32_t)0x00FFFFFF; - - if(reg == 0) - { - value = i2c_x->sts1; - } - else - { - flag = (uint32_t)(flag >> 16); - - value = i2c_x->sts2; - } - - if((value & flag) != (uint32_t)RESET) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief clear flag status - * @param i2c_x: to select the i2c peripheral. - * this parameter can be one of the following values: - * I2C1, I2C2, I2C3. - * @param flag - * this parameter can be any combination of the following values: - * - I2C_BUSERR_FLAG: bus error flag. - * - I2C_ARLOST_FLAG: arbitration lost flag. - * - I2C_ACKFAIL_FLAG: acknowledge failure flag. - * - I2C_OUF_FLAG: overflow or underflow flag. - * - I2C_PECERR_FLAG: pec receive error flag. - * - I2C_TMOUT_FLAG: smbus timeout flag. - * - I2C_ALERTF_FLAG: smbus alert flag. - * @retval none - */ -void i2c_flag_clear(i2c_type *i2c_x, uint32_t flag) -{ - i2c_x->sts1 = (uint16_t)~(flag & (uint32_t)0x00FFFFFF); -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_misc.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_misc.c deleted file mode 100644 index 25b34c1..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_misc.c +++ /dev/null @@ -1,173 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_misc.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the misc firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* includes ------------------------------------------------------------------*/ -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup MISC - * @brief MISC driver modules - * @{ - */ - -#ifdef MISC_MODULE_ENABLED - -/** @defgroup MISC_private_functions - * @{ - */ - -#define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) - -/** - * @brief system reset - * @param none - * @retval none - */ -void nvic_system_reset(void) -{ - NVIC_SystemReset(); -} - -/** - * @brief enable nvic irq - * @param irqn (IRQn_Type number) - * @param preempt_priority: preemptive priority value (starting from 0) - * @param sub_priority: subpriority value (starting from 0) - * @retval none - */ -void nvic_irq_enable(IRQn_Type irqn, uint32_t preempt_priority, uint32_t sub_priority) -{ - uint32_t temp_priority = 0; - - /* encode priority */ - temp_priority = NVIC_EncodePriority(NVIC_GetPriorityGrouping(), preempt_priority, sub_priority); - /* set priority */ - NVIC_SetPriority(irqn, temp_priority); - /* enable irqn */ - NVIC_EnableIRQ(irqn); -} - -/** - * @brief disable nvic irq number - * @param irqn (IRQn_Type number) - * @retval none - */ -void nvic_irq_disable(IRQn_Type irqn) -{ - NVIC_DisableIRQ(irqn); -} - -/** - * @brief config nvic priority group - * @param priority_group - * this parameter can be one of the following values: - * - NVIC_PRIORITY_GROUP_0 - * - NVIC_PRIORITY_GROUP_1 - * - NVIC_PRIORITY_GROUP_2 - * - NVIC_PRIORITY_GROUP_3 - * - NVIC_PRIORITY_GROUP_4 - * @retval none - */ -void nvic_priority_group_config(nvic_priority_group_type priority_group) -{ - /* set the prigroup[10:8] bits according to nvic_prioritygroup value */ - NVIC_SetPriorityGrouping(priority_group); -} - -/** - * @brief set the vector table location and offset. - * @param base - * this parameter can be one of the following values: - * - NVIC_VECTTAB_RAM - * - NVIC_VECTTAB_FLASH - * @param offset (vector table base offset field. this value must be a multiple of 0x200) - * @retval none - */ -void nvic_vector_table_set(uint32_t base, uint32_t offset) -{ - SCB->VTOR = base | (offset & (uint32_t)0x1FFFFF80); -} - -/** - * @brief config nvic lowpower mode - * @param lp_mode - * this parameter can be one of the following values: - * - NVIC_LP_SEVONPEND - * - NVIC_LP_SLEEPDEEP - * - NVIC_LP_SLEEPONEXIT - * @param new_state (new state of lp condition. ENABLE or DISABLE) - * @retval none - */ -void nvic_lowpower_mode_config(nvic_lowpower_mode_type lp_mode, confirm_state new_state) -{ - if(new_state != FALSE) - { - SCB->SCR |= lp_mode; - } - else - { - SCB->SCR &= (uint32_t)(~(uint32_t)lp_mode); - } -} - -/** - * @brief config systick clock source - * @param source - * this parameter can be one of the following values: - * - SYSTICK_CLOCK_SOURCE_AHBCLK_DIV8 - * - SYSTICK_CLOCK_SOURCE_AHBCLK_NODIV - * @retval none - */ -void systick_clock_source_config(systick_clock_source_type source) -{ - if(source == SYSTICK_CLOCK_SOURCE_AHBCLK_NODIV) - { - SysTick->CTRL |= SYSTICK_CLOCK_SOURCE_AHBCLK_NODIV; - } - else - { - SysTick->CTRL &= ~(uint32_t)SYSTICK_CLOCK_SOURCE_AHBCLK_NODIV; - } -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ - - diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_pwc.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_pwc.c deleted file mode 100644 index fc945a9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_pwc.c +++ /dev/null @@ -1,246 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_pwc.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the pwc firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup PWC - * @brief PWC driver modules - * @{ - */ - -#ifdef PWC_MODULE_ENABLED - -/** @defgroup PWC_private_functions - * @{ - */ - -/** - * @brief deinitialize the pwc peripheral registers to their default reset values. - * @param none - * @retval none - */ -void pwc_reset(void) -{ - crm_periph_reset(CRM_PWC_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_PWC_PERIPH_RESET, FALSE); -} - -/** - * @brief enable or disable access to the battery powered domain. - * @param new_state: new state of battery powered domain access. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void pwc_battery_powered_domain_access(confirm_state new_state) -{ - PWC->ctrl_bit.bpwen = new_state; -} - -/** - * @brief select the voltage threshold detected by the power voltage detector. - * @param pvm_voltage: select pwc pvm voltage - * this parameter can be one of the following values: - * - PWC_PVM_VOLTAGE_2V3 - * - PWC_PVM_VOLTAGE_2V4 - * - PWC_PVM_VOLTAGE_2V5 - * - PWC_PVM_VOLTAGE_2V6 - * - PWC_PVM_VOLTAGE_2V7 - * - PWC_PVM_VOLTAGE_2V8 - * - PWC_PVM_VOLTAGE_2V9 - * @retval none - */ -void pwc_pvm_level_select(pwc_pvm_voltage_type pvm_voltage) -{ - PWC->ctrl_bit.pvmsel = pvm_voltage; -} - -/** - * @brief enable or disable pwc power voltage monitor (pvm) - * @param new_state: new state of pvm. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void pwc_power_voltage_monitor_enable(confirm_state new_state) -{ - PWC->ctrl_bit.pvmen = new_state; -} - -/** - * @brief enable or disable pwc standby wakeup pin - * @param pin_num: choose the wakeup pin. - * this parameter can be be any combination of the following values: - * - PWC_WAKEUP_PIN_1 - * @param new_state: new state of the standby wakeup pin. - * this parameter can be one of the following values: - * - TRUE - * - FALSE - * @retval none - */ -void pwc_wakeup_pin_enable(uint32_t pin_num, confirm_state new_state) -{ - if(new_state == TRUE) - { - PWC->ctrlsts |= pin_num; - } - else - { - PWC->ctrlsts &= ~pin_num; - } -} - -/** - * @brief clear flag of pwc - * @param pwc_flag: select the pwc flag. - * this parameter can be any combination of the following values: - * - PWC_WAKEUP_FLAG - * - PWC_STANDBY_FLAG - * - note:"PWC_PVM_OUTPUT_FLAG" cannot be choose!this bit is readonly bit,it means the voltage monitoring output state - * @retval none - */ -void pwc_flag_clear(uint32_t pwc_flag) -{ - if(pwc_flag & PWC_STANDBY_FLAG) - PWC->ctrl_bit.clsef = TRUE; - if(pwc_flag & PWC_WAKEUP_FLAG) - PWC->ctrl_bit.clswef = TRUE; -} - -/** - * @brief get flag of pwc - * @param pwc_flag: select the pwc flag. - * this parameter can be one of the following values: - * - PWC_WAKEUP_FLAG - * - PWC_STANDBY_FLAG - * - PWC_PVM_OUTPUT_FLAG - * @retval state of select flag(SET or RESET). - */ -flag_status pwc_flag_get(uint32_t pwc_flag) -{ - flag_status status = RESET; - if ((PWC->ctrlsts & pwc_flag) == RESET) - { - status = RESET; - } - else - { - status = SET; - } - return status; -} - -/** - * @brief enter pwc sleep mode - * @param sleep_mode_enter: choose the instruction to enter sleep mode. - * this parameter can be one of the following values: - * - PWC_SLEEP_ENTER_WFI - * - PWC_SLEEP_ENTER_WFE - * @retval none - */ -void pwc_sleep_mode_enter(pwc_sleep_enter_type pwc_sleep_enter) -{ - SCB->SCR &= (uint32_t)~0x4; - if(pwc_sleep_enter == PWC_SLEEP_ENTER_WFE) - { - __SEV(); - __WFE(); - __WFE(); - } - else if(pwc_sleep_enter == PWC_SLEEP_ENTER_WFI) - { - __WFI(); - } -} - -/** - * @brief enter pwc deep-sleep mode - * @param pwc_deep_sleep_enter: choose the instruction to enter deep sleep mode. - * this parameter can be one of the following values: - * - PWC_DEEP_SLEEP_ENTER_WFI - * - PWC_DEEP_SLEEP_ENTER_WFE - * @retval none - */ -void pwc_deep_sleep_mode_enter(pwc_deep_sleep_enter_type pwc_deep_sleep_enter) -{ - SCB->SCR |= 0x04; - if(pwc_deep_sleep_enter == PWC_DEEP_SLEEP_ENTER_WFE) - { - __SEV(); - __WFE(); - __WFE(); - } - else if(pwc_deep_sleep_enter == PWC_DEEP_SLEEP_ENTER_WFI) - { - __WFI(); - } - SCB->SCR &= (uint32_t)~0x4; -} - -/** - * @brief regulate low power consumption in the deep sleep mode - * @param pwc_regulator: set the regulator state. - * this parameter can be one of the following values: - * - PWC_REGULATOR_ON - * - PWC_REGULATOR_LOW_POWER - * @retval none - */ -void pwc_voltage_regulate_set(pwc_regulator_type pwc_regulator) -{ - PWC->ctrl_bit.vrsel = pwc_regulator; -} - -/** - * @brief enter pwc standby mode - * @param none - * @retval none - */ -void pwc_standby_mode_enter(void) -{ - PWC->ctrl_bit.clswef = TRUE; - PWC->ctrl_bit.lpsel = TRUE; - SCB->SCR |= 0x04; -#if defined (__CC_ARM) - __force_stores(); -#endif - __WFI(); -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_rtc.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_rtc.c deleted file mode 100644 index f6f453c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_rtc.c +++ /dev/null @@ -1,224 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_rtc.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the rtc firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup RTC - * @brief RTC driver modules - * @{ - */ - -#ifdef RTC_MODULE_ENABLED - -/** @defgroup RTC_private_functions - * @{ - */ - -/** - * @brief rtc counter set - * @param counter_value (0x0000_0000 ~ 0xFFFF_FFFF) - * @retval none - */ -void rtc_counter_set(uint32_t counter_value) -{ - /* enter rtc config mode */ - RTC->ctrll = 0x003F; - - /* set rtc counter */ - RTC->cnth_bit.cnt = (uint16_t)(counter_value >> 16); - RTC->cntl_bit.cnt = (uint16_t)(counter_value & 0x0000FFFF); - - /* exit rtc config mode */ - RTC->ctrll = 0x000F; -} - -/** - * @brief rtc counter get - * @param none - * @retval rtc counter - */ -uint32_t rtc_counter_get(void) -{ - uint32_t cnt = 0; - - cnt = RTC->cnth; - cnt = (cnt << 16) | RTC->cntl; - - return cnt; -} - -/** - * @brief rtc divider set - * @param div_value (0x0000_0000 ~ 0xFFFF_FFFF) - * @retval none - */ -void rtc_divider_set(uint32_t div_value) -{ - /* enter rtc config mode */ - RTC->ctrll = 0x003F; - - /* set rtc divider */ - RTC->divh_bit.div = (uint16_t)(div_value >> 16); - RTC->divl_bit.div = (uint16_t)(div_value & 0x0000FFFF); - - /* exit rtc config mode */ - RTC->ctrll = 0x000F; -} - -/** - * @brief rtc divider get - * @param none - * @retval rtc counter - */ -uint32_t rtc_divider_get(void) -{ - uint32_t div = 0; - - div = RTC->divcnth; - div = (div << 16) | RTC->divcntl; - - return div; -} - -/** - * @brief rtc alarm value set - * @param alarm_value (0x0000_0000 ~ 0xFFFF_FFFF) - * @retval none - */ -void rtc_alarm_set(uint32_t alarm_value) -{ - /* enter rtc config mode */ - RTC->ctrll = 0x003F; - - /* set rtc alarm value */ - RTC->tah_bit.ta = (uint16_t)(alarm_value >> 16); - RTC->tal_bit.ta = (uint16_t)(alarm_value & 0x0000FFFF); - - /* exit rtc config mode */ - RTC->ctrll = 0x000F; -} - -/** - * @brief rtc interrupt enable - * @param source - * this parameter can be any combination of the following values: - * - RTC_TS_INT: time second interrupt. - * - RTC_TA_INT: time alarm interrupt. - * - RTC_OVF_INT: overflow interrupt. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void rtc_interrupt_enable(uint16_t source, confirm_state new_state) -{ - if(new_state == FALSE) - { - RTC->ctrlh &= ~source; - } - else - { - RTC->ctrlh |= source; - } -} - -/** - * @brief rtc flag get - * @param flag - * this parameter can be one of the following values: - * - RTC_TS_FLAG: time second flag. - * - RTC_TA_FLAG: time alarm flag. - * - RTC_OVF_FLAG: overflow flag. - * - RTC_UPDF_FLAG: rtc update finish flag. - * - RTC_CFGF_FLAG: rtc configuration finish flag. - * @retval state of rtc flag - */ -flag_status rtc_flag_get(uint16_t flag) -{ - flag_status status = RESET; - - if ((RTC->ctrll & flag) != (uint16_t)RESET) - { - status = SET; - } - else - { - status = RESET; - } - - return status; -} - -/** - * @brief rtc flag clear - * @param interrupt_flag - * this parameter can be any combination of the following values: - * - RTC_TS_FLAG: time second flag. - * - RTC_TA_FLAG: time alarm flag. - * - RTC_OVF_FLAG: overflow flag. - * - RTC_CFGF_FLAG: rtc configuration finish flag. - * @retval none - */ -void rtc_flag_clear(uint16_t flag) -{ - RTC->ctrll = ~(flag | 0x10) | (RTC->ctrll_bit.cfgen << 4); -} - -/** - * @brief rtc wait configuration finish - * @param none - * @retval none - */ -void rtc_wait_config_finish(void) -{ - while (RTC->ctrll_bit.cfgf == 0); -} - -/** - * @brief rtc wait update finish - * @param none - * @retval none - */ -void rtc_wait_update_finish(void) -{ - while (RTC->ctrll_bit.updf == 0); -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_sdio.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_sdio.c deleted file mode 100644 index 8b66019..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_sdio.c +++ /dev/null @@ -1,586 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_sdio.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the sdio firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup SDIO - * @brief SDIO driver modules - * @{ - */ - -#ifdef SDIO_MODULE_ENABLED - -/** @defgroup SDIO_private_functions - * @{ - */ - -/** - * @brief reset the sdio register - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @retval none - */ -void sdio_reset(sdio_type *sdio_x) -{ - sdio_x->pwrctrl = 0x0; - sdio_x->clkctrl = 0x0; - sdio_x->argu = 0x0; - sdio_x->cmdctrl = 0x0; - sdio_x->dttmr = 0x0; - sdio_x->dtlen = 0x0; - sdio_x->dtctrl = 0x0; - sdio_x->inten = 0x0; - sdio_x->intclr = 0x004007FF; -} - -/** - * @brief set the power status of the controller - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param power_state - * this parameter can be one of the following values: - * - SDIO_POWER_OFF - * - SDIO_POWER_ON - * @retval none - */ -void sdio_power_set(sdio_type *sdio_x, sdio_power_state_type power_state) -{ - sdio_x->pwrctrl_bit.ps = power_state; -} - -/** - * @brief get power status. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @retval flag_status (SET or RESET) - */ -flag_status sdio_power_status_get(sdio_type *sdio_x) -{ - flag_status flag = RESET; - - if(sdio_x->pwrctrl_bit.ps == SDIO_POWER_ON) - { - flag = SET; - } - else if(sdio_x->pwrctrl_bit.ps == SDIO_POWER_OFF) - { - flag = RESET; - } - - return flag; -} - -/** - * @brief config sdio clock - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param clk_div: sdio clock divide factor(frequency = sdio_clk / [clk_psc + 2]). - * @param clk_edg - * this parameter can be one of the following values: - * - SDIO_CLOCK_EDGE_RISING - * - SDIO_CLOCK_EDGE_FALLING - * @retval none - */ -void sdio_clock_config(sdio_type *sdio_x, uint16_t clk_div, sdio_edge_phase_type clk_edg) -{ - /* config clock edge */ - sdio_x->clkctrl_bit.clkegs = clk_edg; - - /* config clock divide [7:0] */ - sdio_x->clkctrl_bit.clkdiv_l = (clk_div & 0xFF); - - /* config clock divide [9:8] */ - sdio_x->clkctrl_bit.clkdiv_h = ((clk_div & 0x300) >> 8); -} - -/** - * @brief config sdio bus width - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param width - * this parameter can be one of the following values: - * - SDIO_BUS_WIDTH_D1 - * - SDIO_BUS_WIDTH_D4 - * - SDIO_BUS_WIDTH_D8 - * @retval none - */ -void sdio_bus_width_config(sdio_type *sdio_x, sdio_bus_width_type width) -{ - sdio_x->clkctrl_bit.busws = width; -} - -/** - * @brief enable or disable clock divider bypss - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_clock_bypass(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->clkctrl_bit.bypsen = new_state; -} - -/** - * @brief enable or disable power saving mode, config sdio_ck clock output - * when the bus is idle. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_power_saving_mode_enable(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->clkctrl_bit.pwrsven = new_state; -} - -/** - * @brief enable or disable hardware flow control. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_flow_control_enable(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->clkctrl_bit.hfcen = new_state; -} - -/** - * @brief enable or disable sdio_ck output. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_clock_enable(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->clkctrl_bit.clkoen = new_state; -} - -/** - * @brief enable or disable dma. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_dma_enable(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->dtctrl_bit.dmaen = new_state; -} - -/** - * @brief config corresponding interrupt. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param int_opt - * this parameter can be one of the following values: - * - SDIO_CMDFAIL_INT - * - SDIO_DTFAIL_INT - * - SDIO_CMDTIMEOUT_INT - * - SDIO_DTTIMEOUT_INT - * - SDIO_TXERRU_INT - * - SDIO_RXERRO_INT - * - SDIO_CMDRSPCMPL_INT - * - SDIO_CMDCMPL_INT - * - SDIO_DTCMP_INT - * - SDIO_SBITERR_INT - * - SDIO_DTBLKCMPL_INT - * - SDIO_DOCMD_INT - * - SDIO_DOTX_INT - * - SDIO_DORX_INT - * - SDIO_TXBUFH_INT - * - SDIO_RXBUFH_INT - * - SDIO_TXBUFF_INT - * - SDIO_RXBUFF_INT - * - SDIO_TXBUFE_INT - * - SDIO_RXBUFE_INT - * - SDIO_TXBUF_INT - * - SDIO_RXBUF_INT - * - SDIO_SDIOIF_INT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_interrupt_enable(sdio_type *sdio_x, uint32_t int_opt, confirm_state new_state) -{ - /* enable interrupt */ - if(TRUE == new_state) - { - sdio_x->inten |= int_opt; - } - /* disable interrupt */ - else - { - sdio_x->inten &= ~(int_opt); - } -} - -/** - * @brief get sdio flag. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param flag - * this parameter can be one of the following values: - * - SDIO_CMDFAIL_FLAG - * - SDIO_DTFAIL_FLAG - * - SDIO_CMDTIMEOUT_FLAG - * - SDIO_DTTIMEOUT_FLAG - * - SDIO_TXERRU_FLAG - * - SDIO_RXERRO_FLAG - * - SDIO_CMDRSPCMPL_FLAG - * - SDIO_CMDCMPL_FLAG - * - SDIO_DTCMPL_FLAG - * - SDIO_SBITERR_FLAG - * - SDIO_DTBLKCMPL_FLAG - * - SDIO_DOCMD_FLAG - * - SDIO_DOTX_FLAG - * - SDIO_DORX_FLAG - * - SDIO_TXBUFH_FLAG - * - SDIO_RXBUFH_FLAG - * - SDIO_TXBUFF_FLAG - * - SDIO_RXBUFF_FLAG - * - SDIO_TXBUFE_FLAG - * - SDIO_RXBUFE_FLAG - * - SDIO_TXBUF_FLAG - * - SDIO_RXBUF_FLAG - * - SDIO_SDIOIF_FLAG - * @retval flag_status (SET or RESET) - */ -flag_status sdio_flag_get(sdio_type *sdio_x, uint32_t flag) -{ - flag_status status = RESET; - - if((sdio_x->sts & flag) == flag) - { - status = SET; - } - else - { - status = RESET; - } - - return status; -} - -/** - * @brief clear sdio flag. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param int_opt - * this parameter can be any combination of the following values: - * - SDIO_CMDFAIL_FLAG - * - SDIO_DTFAIL_FLAG - * - SDIO_CMDTIMEOUT_FLAG - * - SDIO_DTTIMEOUT_FLAG - * - SDIO_TXERRU_FLAG - * - SDIO_RXERRO_FLAG - * - SDIO_CMDRSPCMPL_FLAG - * - SDIO_CMDCMPL_FLAG - * - SDIO_DTCMPL_FLAG - * - SDIO_SBITERR_FLAG - * - SDIO_DTBLKCMPL_FLAG - * - SDIO_SDIOIF_FLAG - * @retval none - */ -void sdio_flag_clear(sdio_type *sdio_x, uint32_t flag) -{ - sdio_x->intclr = flag; -} - -/** - * @brief config sdio command. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param command_struct : pointer to a sdio_command_struct_type structure - * that contains the configuration information for the sdio command. - * @retval none - */ -void sdio_command_config(sdio_type *sdio_x, sdio_command_struct_type *command_struct) -{ - /* disable command path state machine */ - sdio_x->cmdctrl_bit.ccsmen = FALSE; - - /* config command argument */ - sdio_x->argu = command_struct->argument; - - /* config command register */ - sdio_x->cmdctrl_bit.cmdidx = command_struct->cmd_index; - sdio_x->cmdctrl_bit.rspwt = command_struct->rsp_type; - sdio_x->cmdctrl_bit.intwt = (command_struct->wait_type & 0x1); /* [1:0] -> [0] */ - sdio_x->cmdctrl_bit.pndwt = (command_struct->wait_type & 0x2)>>1; /* [1:0] -> [1] */ -} - -/** - * @brief enable or disable command path state machine(CPSM). - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_command_state_machine_enable(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->cmdctrl_bit.ccsmen = new_state; -} - -/** - * @brief get command index of last command for which response received. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval uint8_t: command index - */ -uint8_t sdio_command_response_get(sdio_type *sdio_x) -{ - return sdio_x->rspcmd_bit.rspcmd; -} - -/** - * @brief get response received from the card for the last command. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param reg_index - * this parameter can be one of the following values: - * - SDIO_RSP1_INDEX - * - SDIO_RSP2_INDEX - * - SDIO_RSP3_INDEX - * - SDIO_RSP4_INDEX - * @retval uint32_t: response register value - */ -uint32_t sdio_response_get(sdio_type *sdio_x, sdio_rsp_index_type reg_index) -{ - uint32_t response_value = 0; - - switch(reg_index) - { - case SDIO_RSP1_INDEX: - response_value = sdio_x->rsp1; - break; - case SDIO_RSP2_INDEX: - response_value = sdio_x->rsp2; - break; - case SDIO_RSP3_INDEX: - response_value = sdio_x->rsp3; - break; - case SDIO_RSP4_INDEX: - response_value = sdio_x->rsp4; - break; - default: break; - } - - return response_value; -} - -/** - * @brief config sdio data. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param data_struct : pointer to a sdio_data_struct_type structure - * that contains the configuration information for the sdio data. - * @retval none - */ -void sdio_data_config(sdio_type *sdio_x, sdio_data_struct_type *data_struct) -{ - /* disable data path state machine */ - sdio_x->dtctrl_bit.tfren = FALSE; - - /* config data block, transfer mode and transfer direction */ - sdio_x->dtctrl_bit.blksize = data_struct->block_size; - sdio_x->dtctrl_bit.tfrdir = data_struct->transfer_direction; - sdio_x->dtctrl_bit.tfrmode = data_struct->transfer_mode; - - /* config data length */ - sdio_x->dtlen_bit.dtlen = data_struct->data_length; - - /* config data transfer timeout */ - sdio_x->dttmr_bit.timeout = data_struct->timeout; -} - -/** - * @brief enable or disable data path state machine(DPSM). - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_data_state_machine_enable(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->dtctrl_bit.tfren = new_state; -} - -/** - * @brief get the number of remaining data bytes to be transferred. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @retval uint32_t: number of bytes - */ -uint32_t sdio_data_counter_get(sdio_type *sdio_x) -{ - return sdio_x->dtcnt; -} - -/** - * @brief read a word data from sdio fifo. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @retval uint32_t: data received - */ -uint32_t sdio_data_read(sdio_type *sdio_x) -{ - return sdio_x->buf; -} - -/** - * @brief get the number of words left to be written to or read from fifo.. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @retval uint32_t: number of words - */ -uint32_t sdio_buffer_counter_get(sdio_type *sdio_x) -{ - return sdio_x->bufcnt; -} - -/** - * @brief write one word data to fifo. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param data: data to be transferred. - * @retval none - */ -void sdio_data_write(sdio_type *sdio_x, uint32_t data) -{ - sdio_x->buf = data; -} - -/** - * @brief set the read wait mode. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param mode - * this parameter can be one of the following values: - * - SDIO_READ_WAIT_CONTROLLED_BY_D2 - * - SDIO_READ_WAIT_CONTROLLED_BY_CK - * @retval none - */ -void sdio_read_wait_mode_set(sdio_type *sdio_x, sdio_read_wait_mode_type mode) -{ - sdio_x->dtctrl_bit.rdwtmode = mode; -} - -/** - * @brief enable or disable to start sd i/o read wait operation. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_read_wait_start(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->dtctrl_bit.rdwtstart = new_state; -} - -/** - * @brief enable or disable to stop sd i/o read wait operation. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_read_wait_stop(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->dtctrl_bit.rdwtstop = new_state; -} - -/** - * @brief enable or disable the sd i/o function. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_io_function_enable(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->dtctrl_bit.ioen = new_state; -} - -/** - * @brief enable or disable sd i/o suspend command sending. - * @param sdio_x: to select the sdio peripheral. - * this parameter can be one of the following values: - * SDIO1, SDIO2. - * @param new_state (TRUE or FALSE) - * @retval none - */ -void sdio_io_suspend_command_set(sdio_type *sdio_x, confirm_state new_state) -{ - sdio_x->cmdctrl_bit.iosusp = new_state; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_spi.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_spi.c deleted file mode 100644 index 720aa92..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_spi.c +++ /dev/null @@ -1,618 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_spi.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the spi firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup SPI - * @brief SPI driver modules - * @{ - */ - -#ifdef SPI_MODULE_ENABLED - -/** @defgroup SPI_private_functions - * @{ - */ - -/** - * @brief spi reset by crm reset register - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @retval none - */ -void spi_i2s_reset(spi_type *spi_x) -{ - if(spi_x == SPI1) - { - crm_periph_reset(CRM_SPI1_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_SPI1_PERIPH_RESET, FALSE); - } - else if(spi_x == SPI2) - { - crm_periph_reset(CRM_SPI2_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_SPI2_PERIPH_RESET, FALSE); - } - else if(spi_x == SPI3) - { - crm_periph_reset(CRM_SPI3_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_SPI3_PERIPH_RESET, FALSE); - } - else if(spi_x == SPI4) - { - crm_periph_reset(CRM_SPI4_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_SPI4_PERIPH_RESET, FALSE); - } -} - -/** - * @brief spi init config with its default value. - * @param spi_init_struct : pointer to a spi_init_type structure which will - * be initialized. - * @retval none - */ -void spi_default_para_init(spi_init_type* spi_init_struct) -{ - spi_init_struct->transmission_mode = SPI_TRANSMIT_FULL_DUPLEX; - spi_init_struct->master_slave_mode = SPI_MODE_SLAVE; - spi_init_struct->mclk_freq_division = SPI_MCLK_DIV_2; - spi_init_struct->first_bit_transmission = SPI_FIRST_BIT_MSB; - spi_init_struct->frame_bit_num = SPI_FRAME_8BIT; - spi_init_struct->clock_polarity = SPI_CLOCK_POLARITY_LOW; - spi_init_struct->clock_phase = SPI_CLOCK_PHASE_1EDGE; - spi_init_struct->cs_mode_selection = SPI_CS_SOFTWARE_MODE; -} - -/** - * @brief spi init config with its setting value. - * @param spi_init_struct : pointer to a spi_init_type structure which will be initialized. - * @retval none - */ -void spi_init(spi_type* spi_x, spi_init_type* spi_init_struct) -{ - spi_x->i2sctrl_bit.i2smsel = FALSE; - if(spi_init_struct->transmission_mode == SPI_TRANSMIT_FULL_DUPLEX) - { - spi_x->ctrl1_bit.slben = FALSE; - spi_x->ctrl1_bit.slbtd = FALSE; - spi_x->ctrl1_bit.ora = FALSE; - } - else if(spi_init_struct->transmission_mode == SPI_TRANSMIT_SIMPLEX_RX) - { - spi_x->ctrl1_bit.slben = FALSE; - spi_x->ctrl1_bit.slbtd = FALSE; - spi_x->ctrl1_bit.ora = TRUE; - } - else if(spi_init_struct->transmission_mode == SPI_TRANSMIT_HALF_DUPLEX_RX) - { - spi_x->ctrl1_bit.slben = TRUE; - spi_x->ctrl1_bit.slbtd = FALSE; - spi_x->ctrl1_bit.ora = FALSE; - } - else if(spi_init_struct->transmission_mode == SPI_TRANSMIT_HALF_DUPLEX_TX) - { - spi_x->ctrl1_bit.slben = TRUE; - spi_x->ctrl1_bit.slbtd = TRUE; - spi_x->ctrl1_bit.ora = FALSE; - } - - spi_x->ctrl1_bit.swcsen = spi_init_struct->cs_mode_selection; - if((spi_init_struct->master_slave_mode == SPI_MODE_MASTER) && (spi_init_struct->cs_mode_selection == SPI_CS_SOFTWARE_MODE)) - { - spi_x->ctrl1_bit.swcsil = TRUE; - } - else - { - spi_x->ctrl1_bit.swcsil = FALSE; - } - spi_x->ctrl1_bit.msten = spi_init_struct->master_slave_mode; - if(spi_init_struct->mclk_freq_division > SPI_MCLK_DIV_256) - { - spi_x->ctrl2_bit.mdiv_h = 1; - spi_x->ctrl1_bit.mdiv_l = spi_init_struct->mclk_freq_division & 0x7; - } - else - { - spi_x->ctrl2_bit.mdiv_h = 0; - spi_x->ctrl1_bit.mdiv_l = spi_init_struct->mclk_freq_division; - } - spi_x->ctrl1_bit.ltf = spi_init_struct->first_bit_transmission; - spi_x->ctrl1_bit.fbn = spi_init_struct->frame_bit_num; - spi_x->ctrl1_bit.clkpol = spi_init_struct->clock_polarity; - spi_x->ctrl1_bit.clkpha = spi_init_struct->clock_phase; -} - -/** - * @brief spi next transmit crc for the spi peripheral. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @retval none - */ -void spi_crc_next_transmit(spi_type* spi_x) -{ - spi_x->ctrl1_bit.ntc = TRUE; -} - -/** - * @brief set the crc polynomial value for the spi peripheral. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param crc_poly: crc polynomial value. - * @retval none - */ -void spi_crc_polynomial_set(spi_type* spi_x, uint16_t crc_poly) -{ - spi_x->cpoly_bit.cpoly = crc_poly; -} - -/** - * @brief return the crc polynomial register value for the spi peripheral. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @retval the select crc polynomial register value - */ -uint16_t spi_crc_polynomial_get(spi_type* spi_x) -{ - return spi_x->cpoly_bit.cpoly; -} - -/** - * @brief enable or disable the hardware crc calculation for the spi peripheral. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param new_state: new state of crc calculation. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void spi_crc_enable(spi_type* spi_x, confirm_state new_state) -{ - spi_x->ctrl1_bit.ccen = new_state; -} - -/** - * @brief return the transmit or the receive crc value for the spi peripheral. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param crc_direction: select transmit or receive crc value to be read - * - SPI_CRC_RX - * - SPI_CRC_TX - * @retval the select crc register value - */ -uint16_t spi_crc_value_get(spi_type* spi_x, spi_crc_direction_type crc_direction) -{ - if(crc_direction == SPI_CRC_RX) - return spi_x->rcrc_bit.rcrc; - else - return spi_x->tcrc_bit.tcrc; -} - -/** - * @brief enable or disable the hardware cs output for the spi peripheral. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param new_state: new state of spi master cs output. - * this parameter can be: TRUE or FALSE. - * note:the bit only use in spi master mode - * @retval none - */ -void spi_hardware_cs_output_enable(spi_type* spi_x, confirm_state new_state) -{ - spi_x->ctrl2_bit.hwcsoe = new_state; -} - -/** - * @brief set the software cs internal level for the spi peripheral. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param level: set the state of spi cs level. - * this parameter can be one of the following values: - * - SPI_SWCS_INTERNAL_LEVEL_LOW - * - SPI_SWCS_INTERNAL_LEVEL_HIGHT - * note:the bit only use when swcsen bit is set. - * note:when use this bit,io operation on the cs pin are invalid. - * @retval none - */ -void spi_software_cs_internal_level_set(spi_type* spi_x, spi_software_cs_level_type level) -{ - spi_x->ctrl1_bit.swcsil = level; -} - -/** - * @brief set the data frame bit num for the spi peripheral. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param bit_num: set the data frame size - * - SPI_FRAME_8BIT - * - SPI_FRAME_16BIT - * @retval none - */ -void spi_frame_bit_num_set(spi_type* spi_x, spi_frame_bit_num_type bit_num) -{ - spi_x->ctrl1_bit.fbn = bit_num; -} - -/** - * @brief set the data transmission direction in single line bidirectiona half duplex mode of the spi peripheral. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param direction: data transfer direction - * this parameter can be one of the following values: - * - SPI_HALF_DUPLEX_DIRECTION_RX - * - SPI_HALF_DUPLEX_DIRECTION_TX - * @retval none - */ -void spi_half_duplex_direction_set(spi_type* spi_x, spi_half_duplex_direction_type direction) -{ - spi_x->ctrl1_bit.slbtd = direction; -} - -/** - * @brief enable or disable spi. - * @param spi_x: select the spi peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param new_state: new state of spi. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void spi_enable(spi_type* spi_x, confirm_state new_state) -{ - spi_x->ctrl1_bit.spien = new_state; -} - -/** - * @brief i2s init config with its default value. - * @param i2s_init_struct : pointer to a i2s_init_type structure which will - * be initialized. - * @retval none - */ -void i2s_default_para_init(i2s_init_type* i2s_init_struct) -{ - i2s_init_struct->operation_mode = I2S_MODE_SLAVE_TX; - i2s_init_struct->audio_protocol = I2S_AUDIO_PROTOCOL_PHILLIPS; - i2s_init_struct->audio_sampling_freq = I2S_AUDIO_FREQUENCY_DEFAULT; - i2s_init_struct->data_channel_format = I2S_DATA_16BIT_CHANNEL_16BIT; - i2s_init_struct->clock_polarity = I2S_CLOCK_POLARITY_LOW; - i2s_init_struct->mclk_output_enable = FALSE; -} - -/** - * @brief i2s init config with its setting value. - * @param i2s_init_struct : pointer to a i2s_init_type structure which will be initialized. - * @retval none - */ -void i2s_init(spi_type* spi_x, i2s_init_type* i2s_init_struct) -{ - crm_clocks_freq_type clocks_freq; - uint32_t i2s_sclk_index = 0; - uint32_t i2sdiv_index = 2, i2sodd_index = 0, frequency_index = 0; - - /* i2s audio frequency config */ - if(i2s_init_struct->audio_sampling_freq == I2S_AUDIO_FREQUENCY_DEFAULT) - { - i2sodd_index = 0; - i2sdiv_index = 2; - } - else - { - crm_clocks_freq_get(&clocks_freq); - i2s_sclk_index = clocks_freq.sclk_freq; - if((i2s_init_struct->audio_protocol == I2S_AUDIO_PROTOCOL_PCM_SHORT) || (i2s_init_struct->audio_protocol == I2S_AUDIO_PROTOCOL_PCM_LONG)) - { - if(i2s_init_struct->mclk_output_enable == TRUE) - { - frequency_index = (((i2s_sclk_index / 128) * 10) / i2s_init_struct->audio_sampling_freq) + 5; - } - else - { - if(i2s_init_struct->data_channel_format == I2S_DATA_16BIT_CHANNEL_16BIT) - frequency_index = (((i2s_sclk_index / 16) * 10) / i2s_init_struct->audio_sampling_freq) + 5; - else - frequency_index = (((i2s_sclk_index / 32) * 10) / i2s_init_struct->audio_sampling_freq) + 5; - } - } - else - { - if(i2s_init_struct->mclk_output_enable == TRUE) - { - frequency_index = (((i2s_sclk_index / 256) * 10) / i2s_init_struct->audio_sampling_freq) + 5; - } - else - { - if(i2s_init_struct->data_channel_format == I2S_DATA_16BIT_CHANNEL_16BIT) - frequency_index = (((i2s_sclk_index / 32) * 10) / i2s_init_struct->audio_sampling_freq) + 5; - else - frequency_index = (((i2s_sclk_index / 64) * 10) / i2s_init_struct->audio_sampling_freq) + 5; - } - } - } - frequency_index = frequency_index / 10; - i2sodd_index = frequency_index & (uint16_t)0x0001; - i2sdiv_index = (frequency_index - i2sodd_index) / 2; - if((i2sdiv_index < 2) || (i2sdiv_index > 0x03FF)) - { - i2sodd_index = 0; - i2sdiv_index = 2; - } - spi_x->i2sclk_bit.i2sodd = i2sodd_index; - if(i2sdiv_index > 0x00FF) - { - spi_x->i2sclk_bit.i2sdiv_h = (i2sdiv_index >> 8) & 0x0003; - spi_x->i2sclk_bit.i2sdiv_l = i2sdiv_index & 0x00FF; - } - else - { - spi_x->i2sclk_bit.i2sdiv_h = 0; - spi_x->i2sclk_bit.i2sdiv_l = i2sdiv_index; - } - - /* i2s audio_protocol set*/ - if(i2s_init_struct->audio_protocol == I2S_AUDIO_PROTOCOL_PCM_LONG) - { - spi_x->i2sctrl_bit.pcmfssel = 1; - spi_x->i2sctrl_bit.stdsel = 3; - } - else if(i2s_init_struct->audio_protocol == I2S_AUDIO_PROTOCOL_PCM_SHORT) - { - spi_x->i2sctrl_bit.pcmfssel = 0; - spi_x->i2sctrl_bit.stdsel = 3; - } - else if(i2s_init_struct->audio_protocol == I2S_AUDIO_PROTOCOL_LSB) - { - spi_x->i2sctrl_bit.pcmfssel = 0; - spi_x->i2sctrl_bit.stdsel = 2; - } - else if(i2s_init_struct->audio_protocol == I2S_AUDIO_PROTOCOL_MSB) - { - spi_x->i2sctrl_bit.pcmfssel = 0; - spi_x->i2sctrl_bit.stdsel = 1; - } - else if(i2s_init_struct->audio_protocol == I2S_AUDIO_PROTOCOL_PHILLIPS) - { - spi_x->i2sctrl_bit.pcmfssel = 0; - spi_x->i2sctrl_bit.stdsel = 0; - } - - /* i2s data_channel_format set*/ - if(i2s_init_struct->data_channel_format == I2S_DATA_16BIT_CHANNEL_16BIT) - { - spi_x->i2sctrl_bit.i2scbn = 0; - spi_x->i2sctrl_bit.i2sdbn = 0; - } - else if(i2s_init_struct->data_channel_format == I2S_DATA_16BIT_CHANNEL_32BIT) - { - spi_x->i2sctrl_bit.i2scbn = 1; - spi_x->i2sctrl_bit.i2sdbn = 0; - } - else if(i2s_init_struct->data_channel_format == I2S_DATA_24BIT_CHANNEL_32BIT) - { - spi_x->i2sctrl_bit.i2scbn = 1; - spi_x->i2sctrl_bit.i2sdbn = 1; - } - else if(i2s_init_struct->data_channel_format == I2S_DATA_32BIT_CHANNEL_32BIT) - { - spi_x->i2sctrl_bit.i2scbn = 1; - spi_x->i2sctrl_bit.i2sdbn = 2; - } - - spi_x->i2sctrl_bit.i2sclkpol = i2s_init_struct->clock_polarity; - spi_x->i2sclk_bit.i2smclkoe = i2s_init_struct->mclk_output_enable; - spi_x->i2sctrl_bit.opersel = i2s_init_struct->operation_mode; - spi_x->i2sctrl_bit.i2smsel = TRUE; -} - -/** - * @brief enable or disable i2s. - * @param spi_x: select the i2s peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param new_state: new state of i2s. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void i2s_enable(spi_type* spi_x, confirm_state new_state) -{ - spi_x->i2sctrl_bit.i2sen = new_state; -} - -/** - * @brief enable or disable the specified spi/i2s interrupts. - * @param spi_x: select the spi/i2s peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param spi_i2s_int: specifies the spi/i2s interrupt sources to be enabled or disabled. - * this parameter can be one of the following values: - * - SPI_I2S_ERROR_INT - * - SPI_I2S_RDBF_INT - * - SPI_I2S_TDBE_INT - * @param new_state: new state of the specified spi/i2s interrupts. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void spi_i2s_interrupt_enable(spi_type* spi_x, uint32_t spi_i2s_int, confirm_state new_state) -{ - if(new_state != FALSE) - { - spi_x->ctrl2 |= spi_i2s_int; - } - else - { - spi_x->ctrl2 &= ~spi_i2s_int; - } -} - -/** - * @brief enable or disable the spi/i2s dma transmitter mode. - * @param spi_x: select the spi/i2s peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param new_state: new state of the dma request. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void spi_i2s_dma_transmitter_enable(spi_type* spi_x, confirm_state new_state) -{ - spi_x->ctrl2_bit.dmaten = new_state; -} - -/** - * @brief enable or disable the spi/i2s dma receiver mode. - * @param spi_x: select the spi/i2s peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param new_state: new state of the dma request. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void spi_i2s_dma_receiver_enable(spi_type* spi_x, confirm_state new_state) -{ - spi_x->ctrl2_bit.dmaren = new_state; -} - -/** - * @brief spi/i2s data transmit - * @param spi_x: select the spi/i2s peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param tx_data: the data to be transmit. - * this parameter can be: - * - (0x0000~0xFFFF) - * @retval none - */ -void spi_i2s_data_transmit(spi_type* spi_x, uint16_t tx_data) -{ - spi_x->dt = tx_data; -} - -/** - * @brief spi/i2s data receive - * @param spi_x: select the spi/i2s peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @retval the received data value - */ -uint16_t spi_i2s_data_receive(spi_type* spi_x) -{ - return (uint16_t)spi_x->dt; -} - -/** - * @brief get flag of the specified spi/i2s peripheral. - * @param spi_x: select the spi/i2s peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param spi_i2s_flag: select the spi/i2s flag - * this parameter can be one of the following values: - * - SPI_I2S_RDBF_FLAG - * - SPI_I2S_TDBE_FLAG - * - I2S_ACS_FLAG (this flag only use in i2s mode) - * - I2S_TUERR_FLAG (this flag only use in i2s mode) - * - SPI_CCERR_FLAG (this flag only use in spi mode) - * - SPI_MMERR_FLAG (this flag only use in spi mode) - * - SPI_I2S_ROERR_FLAG - * - SPI_I2S_BF_FLAG - * @retval the new state of spi/i2s flag - */ -flag_status spi_i2s_flag_get(spi_type* spi_x, uint32_t spi_i2s_flag) -{ - flag_status status = RESET; - if ((spi_x->sts & spi_i2s_flag) == RESET) - { - status = RESET; - } - else - { - status = SET; - } - return status; -} - -/** - * @brief clear flag of the specified spi/i2s peripheral. - * @param spi_x: select the spi/i2s peripheral. - * this parameter can be one of the following values: - * SPI1, SPI2, SPI3 ,SPI4 - * @param spi_i2s_flag: select the spi/i2s flag - * this parameter can be one of the following values: - * - SPI_CCERR_FLAG - * - SPI_I2S_RDBF_FLAG - * - I2S_TUERR_FLAG - * - SPI_MMERR_FLAG - * - SPI_I2S_ROERR_FLAG - * @note - * SPI_I2S_TDBE_FLAG this flag is cleared when the tx buffer already contain data to be transmit. - * I2S_ACS_FLAG this flag cann't cleared by software,the flag indicate the channel side(not use in pcm standard mode). - * SPI_I2S_BF_FLAG this flag cann't cleared by software, it's set and cleared by hardware. - * @retval none - */ -void spi_i2s_flag_clear(spi_type* spi_x, uint32_t spi_i2s_flag) -{ - volatile uint32_t temp = 0; - temp = temp; - if(spi_i2s_flag == SPI_CCERR_FLAG) - spi_x->sts = ~SPI_CCERR_FLAG; - else if(spi_i2s_flag == SPI_I2S_RDBF_FLAG) - temp = REG32(&spi_x->dt); - else if(spi_i2s_flag == I2S_TUERR_FLAG) - temp = REG32(&spi_x->sts); - else if(spi_i2s_flag == SPI_MMERR_FLAG) - { - temp = REG32(&spi_x->sts); - spi_x->ctrl1 = spi_x->ctrl1; - } - else if(spi_i2s_flag == SPI_I2S_ROERR_FLAG) - { - temp = REG32(&spi_x->dt); - temp = REG32(&spi_x->sts); - } -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_tmr.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_tmr.c deleted file mode 100644 index e92df95..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_tmr.c +++ /dev/null @@ -1,1763 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_tmr.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the tmr firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup TMR - * @brief TMR driver modules - * @{ - */ - -#ifdef TMR_MODULE_ENABLED - -/** @defgroup TMR_private_functions - * @{ - */ - -/** - * @brief tmr reset by crm reset register - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @retval none - */ -void tmr_reset(tmr_type *tmr_x) -{ - if(tmr_x == TMR1) - { - crm_periph_reset(CRM_TMR1_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR1_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR2) - { - crm_periph_reset(CRM_TMR2_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR2_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR3) - { - crm_periph_reset(CRM_TMR3_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR3_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR4) - { - crm_periph_reset(CRM_TMR4_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR4_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR5) - { - crm_periph_reset(CRM_TMR5_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR5_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR6) - { - crm_periph_reset(CRM_TMR6_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR6_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR7) - { - crm_periph_reset(CRM_TMR7_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR7_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR8) - { - crm_periph_reset(CRM_TMR8_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR8_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR9) - { - crm_periph_reset(CRM_TMR9_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR9_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR10) - { - crm_periph_reset(CRM_TMR10_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR10_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR11) - { - crm_periph_reset(CRM_TMR11_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR11_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR12) - { - crm_periph_reset(CRM_TMR12_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR12_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR13) - { - crm_periph_reset(CRM_TMR13_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR13_PERIPH_RESET, FALSE); - } - else if(tmr_x == TMR14) - { - crm_periph_reset(CRM_TMR14_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_TMR14_PERIPH_RESET, FALSE); - } -} - -/** - * @brief enable or disable tmr counter - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_counter_enable(tmr_type *tmr_x, confirm_state new_state) -{ - /* tmr counter enable */ - tmr_x->ctrl1_bit.tmren = new_state; -} - -/** - * @brief init tmr output default para - * @param tmr_output_struct - * - to the structure of tmr_output_config_type - * @retval none - */ -void tmr_output_default_para_init(tmr_output_config_type *tmr_output_struct) -{ - tmr_output_struct->oc_mode = TMR_OUTPUT_CONTROL_OFF; - tmr_output_struct->oc_idle_state = FALSE; - tmr_output_struct->occ_idle_state = FALSE; - tmr_output_struct->oc_polarity = TMR_OUTPUT_ACTIVE_HIGH; - tmr_output_struct->occ_polarity = TMR_OUTPUT_ACTIVE_HIGH; - tmr_output_struct->oc_output_state = FALSE; - tmr_output_struct->occ_output_state = FALSE; -} - -/** - * @brief init tmr input default para - * @param tmr_input_struct - * - to the structure of tmr_input_config_type - * @retval none - */ -void tmr_input_default_para_init(tmr_input_config_type *tmr_input_struct) -{ - tmr_input_struct->input_channel_select = TMR_SELECT_CHANNEL_1; - tmr_input_struct->input_polarity_select = TMR_INPUT_RISING_EDGE; - tmr_input_struct->input_mapped_select = TMR_CC_CHANNEL_MAPPED_DIRECT; - tmr_input_struct->input_filter_value = 0x0; -} - -/** - * @brief init tmr brkdt default para - * @param tmr_brkdt_struct - * - to the structure of tmr_brkdt_config_type - * @retval none - */ -void tmr_brkdt_default_para_init(tmr_brkdt_config_type *tmr_brkdt_struct) -{ - tmr_brkdt_struct->deadtime = 0x0; - tmr_brkdt_struct->brk_polarity = TMR_BRK_INPUT_ACTIVE_LOW; - tmr_brkdt_struct->wp_level = TMR_WP_OFF; - tmr_brkdt_struct->auto_output_enable = FALSE ; - tmr_brkdt_struct->fcsoen_state = FALSE ; - tmr_brkdt_struct->fcsodis_state = FALSE ; - tmr_brkdt_struct->brk_enable = FALSE ; -} - -/** - * @brief init tmr base - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param tmr_pr (for 16 bit tmr 0x0000~0xFFFF, - * for 32 bit tmr 0x0000_0000~0xFFFF_FFFF) - * @param tmr_div (timer div value:0x0000~0xFFFF) - * @retval none - */ -void tmr_base_init(tmr_type* tmr_x, uint32_t tmr_pr, uint32_t tmr_div) -{ - /* set the pr value */ - tmr_x->pr = tmr_pr; - - /* set the div value */ - tmr_x->div = tmr_div; - - /* trigger the overflow event to immediately reload pr value and div value */ - tmr_x->swevt_bit.ovfswtr = TRUE; -} - -/** - * @brief set tmr clock source division - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_clock_div - * this parameter can be one of the following values: - * - TMR_CLOCK_DIV1 - * - TMR_CLOCK_DIV2 - * - TMR_CLOCK_DIV4 - * @retval none - */ -void tmr_clock_source_div_set(tmr_type *tmr_x, tmr_clock_division_type tmr_clock_div) -{ - /* set tmr clock source division */ - tmr_x->ctrl1_bit.clkdiv = tmr_clock_div; -} - -/** - * @brief set tmr counter count direction - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_cnt_dir - * this parameter can be one of the following values: - * - TMR_COUNT_UP - * - TMR_COUNT_DOWN - * - TMR_COUNT_TWO_WAY_1 - * - TMR_COUNT_TWO_WAY_2 - * - TMR_COUNT_TWO_WAY_3 - * @retval none - */ -void tmr_cnt_dir_set(tmr_type *tmr_x, tmr_count_mode_type tmr_cnt_dir) -{ - /* set the cnt direct */ - tmr_x->ctrl1_bit.cnt_dir = tmr_cnt_dir; -} - -/** - * @brief set the repetition counter register(rpr) value - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR8 - * @param tmr_rpr_value (0x00~0xFF) - * @retval none - */ -void tmr_repetition_counter_set(tmr_type *tmr_x, uint8_t tmr_rpr_value) -{ - /* set the repetition counter value */ - if((tmr_x == TMR1) || (tmr_x == TMR8)) - - { - tmr_x->rpr_bit.rpr = tmr_rpr_value; - } -} - -/** - * @brief set tmr counter value - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param tmr_cnt_value (for 16 bit tmr 0x0000~0xFFFF, - * for 32 bit tmr 0x0000_0000~0xFFFF_FFFF) - * @retval none - */ -void tmr_counter_value_set(tmr_type *tmr_x, uint32_t tmr_cnt_value) -{ - /* set the tmr counter value */ - tmr_x->cval = tmr_cnt_value; -} - -/** - * @brief get tmr counter value - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @retval tmr counter value - */ -uint32_t tmr_counter_value_get(tmr_type *tmr_x) -{ - return tmr_x->cval; -} - -/** - * @brief set tmr div value - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param tmr_div_value (for 16 bit tmr 0x0000~0xFFFF, - * for 32 bit tmr 0x0000_0000~0xFFFF_FFFF) - * @retval none - */ -void tmr_div_value_set(tmr_type *tmr_x, uint32_t tmr_div_value) -{ - /* set the tmr div value */ - tmr_x->div = tmr_div_value; -} - -/** - * @brief get tmr div value - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @retval tmr div value - */ -uint32_t tmr_div_value_get(tmr_type *tmr_x) -{ - return tmr_x->div; -} - -/** - * @brief config tmr output channel - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @param tmr_output_struct - * - to the structure of tmr_output_config_type - * @retval none - */ -void tmr_output_channel_config(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - tmr_output_config_type *tmr_output_struct) -{ - uint16_t channel_index = 0, channel_c_index = 0, channel = 0; - - /* get channel idle state bit position in ctrl2 register */ - channel_index = (uint16_t)(tmr_output_struct->oc_idle_state << (8 + tmr_channel)); - - /* get channel complementary idle state bit position in ctrl2 register */ - channel_c_index = (uint16_t)(tmr_output_struct->occ_idle_state << (9 + tmr_channel)); - - if((tmr_x == TMR1) || (tmr_x == TMR8)) - { - /* set output channel complementary idle state */ - tmr_x->ctrl2 &= ~channel_c_index; - tmr_x->ctrl2 |= channel_c_index; - } - - /* set output channel idle state */ - tmr_x->ctrl2 &= ~channel_index; - tmr_x->ctrl2 |= channel_index; - - /* set channel output mode */ - channel = tmr_channel; - - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cm1_output_bit.c1octrl = tmr_output_struct->oc_mode; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cm1_output_bit.c2octrl = tmr_output_struct->oc_mode; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cm2_output_bit.c3octrl = tmr_output_struct->oc_mode; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cm2_output_bit.c4octrl = tmr_output_struct->oc_mode; - break; - - default: - break; - } - - /* get channel polarity bit position in cctrl register */ - channel_index = (uint16_t)(tmr_output_struct->oc_polarity << ((tmr_channel * 2) + 1)); - - /* get channel complementary polarity bit position in cctrl register */ - channel_c_index = (uint16_t)(tmr_output_struct->occ_polarity << ((tmr_channel * 2) + 3)); - - if((tmr_x == TMR1) || (tmr_x == TMR8)) - { - /* set output channel complementary polarity */ - tmr_x->cctrl &= ~channel_c_index; - tmr_x->cctrl |= channel_c_index; - } - - /* set output channel polarity */ - tmr_x->cctrl &= ~channel_index; - tmr_x->cctrl |= channel_index; - - /* get channel enable bit position in cctrl register */ - channel_index = (uint16_t)(tmr_output_struct->oc_output_state << (tmr_channel * 2)); - - /* get channel complementary enable bit position in cctrl register */ - channel_c_index = (uint16_t)(tmr_output_struct->occ_output_state << ((tmr_channel * 2) + 2)); - - if((tmr_x == TMR1) || (tmr_x == TMR8)) - { - /* set output channel complementary enable bit */ - tmr_x->cctrl &= ~channel_c_index; - tmr_x->cctrl |= channel_c_index; - } - - /* set output channel enable bit */ - tmr_x->cctrl &= ~channel_index; - tmr_x->cctrl |= channel_index; -} - -/** - * @brief select tmr output channel mode - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @param oc_mode - * this parameter can be one of the following values: - * - TMR_OUTPUT_CONTROL_OFF - * - TMR_OUTPUT_CONTROL_HIGH - * - TMR_OUTPUT_CONTROL_LOW - * - TMR_OUTPUT_CONTROL_SWITCH - * - TMR_OUTPUT_CONTROL_FORCE_HIGH - * - TMR_OUTPUT_CONTROL_FORCE_LOW - * - TMR_OUTPUT_CONTROL_PWM_MODE_A - * - TMR_OUTPUT_CONTROL_PWM_MODE_B - * @retval none - */ -void tmr_output_channel_mode_select(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - tmr_output_control_mode_type oc_mode) -{ - uint16_t channel; - - channel = tmr_channel; - - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cm1_output_bit.c1octrl = oc_mode; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cm1_output_bit.c2octrl = oc_mode; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cm2_output_bit.c3octrl = oc_mode; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cm2_output_bit.c4octrl = oc_mode; - break; - - default: - break; - } -} -/** - * @brief set tmr period value - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param tmr_pr_value: timer period register value of counter - * (for 16 bit tmr 0x0000~0xFFFF, - * for 32 bit tmr 0x0000_0000~0xFFFF_FFFF) - * @retval none - */ -void tmr_period_value_set(tmr_type *tmr_x, uint32_t tmr_pr_value) -{ - /* set tmr period value */ - tmr_x->pr = tmr_pr_value; -} - -/** - * @brief get tmr period value - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @retval timer period register value of counter - * (for 16 bit tmr 0x0000~0xFFFF, for 32 bit tmr - * 0x0000_0000~0xFFFF_FFFF) - */ -uint32_t tmr_period_value_get(tmr_type *tmr_x) -{ - return tmr_x->pr; -} - -/** - * @brief set tmr channel value - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @param tmr_channel_value (for 16 bit tmr 0x0000~0xFFFF, - * for 32 bit tmr 0x0000_0000~0xFFFF_FFFF) - * @retval none - */ -void tmr_channel_value_set(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - uint32_t tmr_channel_value) -{ - uint16_t channel; - - channel = tmr_channel; - - /* set tmr channel value */ - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->c1dt = tmr_channel_value; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->c2dt = tmr_channel_value; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->c3dt = tmr_channel_value; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->c4dt = tmr_channel_value; - break; - - default: - break; - } -} - -/** - * @brief get tmr channel value - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @retval tmr channel value - */ -uint32_t tmr_channel_value_get(tmr_type *tmr_x, tmr_channel_select_type tmr_channel) -{ - uint32_t cc_value_get = 0; - uint16_t channel; - - channel = tmr_channel; - - /* get tmr channel value */ - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - cc_value_get = tmr_x->c1dt; - break; - - case TMR_SELECT_CHANNEL_2: - cc_value_get = tmr_x->c2dt; - break; - - case TMR_SELECT_CHANNEL_3: - cc_value_get = tmr_x->c3dt; - break; - - case TMR_SELECT_CHANNEL_4: - cc_value_get = tmr_x->c4dt; - break; - - default: - break; - } - - return cc_value_get; -} -/** - * @brief enable tmr period buffer - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_period_buffer_enable(tmr_type *tmr_x, confirm_state new_state) -{ - /* tmr period buffer set */ - tmr_x->ctrl1_bit.prben = new_state; -} - -/** - * @brief enable tmr output channel buffer - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_output_channel_buffer_enable(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - confirm_state new_state) -{ - uint16_t channel; - - channel = tmr_channel; - - /* get tmr channel value */ - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cm1_output_bit.c1oben = new_state; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cm1_output_bit.c2oben = new_state; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cm2_output_bit.c3oben = new_state; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cm2_output_bit.c4oben = new_state; - break; - - default: - break; - } -} - -/** - * @brief set tmr output channel immediately - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_output_channel_immediately_set(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - confirm_state new_state) -{ - uint16_t channel; - - channel = tmr_channel; - - /* get tmr channel value */ - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cm1_output_bit.c1oien = new_state; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cm1_output_bit.c2oien = new_state; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cm2_output_bit.c3oien = new_state; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cm2_output_bit.c4oien = new_state; - break; - - default: - break; - } -} - -/** - * @brief set tmr output channel switch - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_output_channel_switch_set(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - confirm_state new_state) -{ - uint16_t channel; - - channel = tmr_channel; - - /* get tmr channel value */ - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cm1_output_bit.c1osen = new_state; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cm1_output_bit.c2osen = new_state; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cm2_output_bit.c3osen = new_state; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cm2_output_bit.c4osen = new_state; - break; - - default: - break; - } -} - -/** - * @brief enable or disable tmr one cycle mode - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, TMR9, TMR12 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_one_cycle_mode_enable(tmr_type *tmr_x, confirm_state new_state) -{ - /* tmr one cycle mode enable */ - tmr_x->ctrl1_bit.ocmen = new_state; -} - -/** - * @brief enable or disable tmr 32 bit function(plus mode) - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR2, TMR5 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_32_bit_function_enable (tmr_type *tmr_x, confirm_state new_state) -{ - /* tmr 32 bit function(plus mode) enable,only for TMR2/TMR5 */ - if((tmr_x == TMR2) || (tmr_x == TMR5)) - { - tmr_x->ctrl1_bit.pmen = new_state; - } -} - -/** - * @brief select tmr the overflow event sources - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_overflow_request_source_set(tmr_type *tmr_x, confirm_state new_state) -{ - tmr_x->ctrl1_bit.ovfs = new_state; -} - -/** - * @brief enable or disable tmr overflow event generation - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_overflow_event_disable(tmr_type *tmr_x, confirm_state new_state) -{ - tmr_x->ctrl1_bit.ovfen = new_state; -} - -/** - * @brief init tmr input channel - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param input_struct - * - to the structure of tmr_input_config_type - * @param divider_factor - * this parameter can be one of the following values: - * - TMR_CHANNEL_INPUT_DIV_1 - * - TMR_CHANNEL_INPUT_DIV_2 - * - TMR_CHANNEL_INPUT_DIV_4 - * - TMR_CHANNEL_INPUT_DIV_8 - * @retval none - */ -void tmr_input_channel_init(tmr_type *tmr_x, tmr_input_config_type *input_struct, - tmr_channel_input_divider_type divider_factor) -{ - uint16_t channel = 0; - - /* get channel selected */ - channel = input_struct->input_channel_select; - - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cctrl_bit.c1p = (uint32_t)input_struct->input_polarity_select; - tmr_x->cctrl_bit.c1cp = (input_struct->input_polarity_select & 0x2) >> 1; - tmr_x->cm1_input_bit.c1c = input_struct->input_mapped_select; - tmr_x->cm1_input_bit.c1df = input_struct->input_filter_value; - tmr_x->cm1_input_bit.c1idiv = divider_factor; - tmr_x->cctrl_bit.c1en = TRUE; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cctrl_bit.c2p = (uint32_t)input_struct->input_polarity_select; - tmr_x->cctrl_bit.c2cp = (input_struct->input_polarity_select & 0x2) >> 1; - tmr_x->cm1_input_bit.c2c = input_struct->input_mapped_select; - tmr_x->cm1_input_bit.c2df = input_struct->input_filter_value; - tmr_x->cm1_input_bit.c2idiv = divider_factor; - tmr_x->cctrl_bit.c2en = TRUE; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cctrl_bit.c3p = (uint32_t)input_struct->input_polarity_select; - tmr_x->cctrl_bit.c3cp = (input_struct->input_polarity_select & 0x2) >> 1; - tmr_x->cm2_input_bit.c3c = input_struct->input_mapped_select; - tmr_x->cm2_input_bit.c3df = input_struct->input_filter_value; - tmr_x->cm2_input_bit.c3idiv = divider_factor; - tmr_x->cctrl_bit.c3en = TRUE; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cctrl_bit.c4p = (uint32_t)input_struct->input_polarity_select; - tmr_x->cm2_input_bit.c4c = input_struct->input_mapped_select; - tmr_x->cm2_input_bit.c4df = input_struct->input_filter_value; - tmr_x->cm2_input_bit.c4idiv = divider_factor; - tmr_x->cctrl_bit.c4en = TRUE; - break; - - default: - break; - } -} - -/** - * @brief tmr channel enable - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_1C - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_2C - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_3C - * - TMR_SELECT_CHANNEL_4 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_channel_enable(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, confirm_state new_state) -{ - uint16_t channel; - - channel = tmr_channel; - - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cctrl_bit.c1en = new_state; - break; - - case TMR_SELECT_CHANNEL_1C: - tmr_x->cctrl_bit.c1cen = new_state; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cctrl_bit.c2en = new_state; - break; - - case TMR_SELECT_CHANNEL_2C: - tmr_x->cctrl_bit.c2cen = new_state; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cctrl_bit.c3en = new_state; - break; - - case TMR_SELECT_CHANNEL_3C: - tmr_x->cctrl_bit.c3cen = new_state; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cctrl_bit.c4en = new_state; - break; - - default: - break; - } -} - -/** - * @brief set tmr input channel filter - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @param filter_value (0x0~0xf) - * @retval none - */ -void tmr_input_channel_filter_set(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - uint16_t filter_value) -{ - uint16_t channel; - - channel = tmr_channel; - - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cm1_input_bit.c1df = filter_value; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cm1_input_bit.c2df = filter_value; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cm2_input_bit.c3df = filter_value; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cm2_input_bit.c4df = filter_value; - break; - - default: - break; - } -} - -/** - * @brief config tmr pwm input - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param input_struct - * - to the structure of tmr_input_config_type - * @param divider_factor - * this parameter can be one of the following values: - * - TMR_CHANNEL_INPUT_DIV_1 - * - TMR_CHANNEL_INPUT_DIV_2 - * - TMR_CHANNEL_INPUT_DIV_4 - * - TMR_CHANNEL_INPUT_DIV_8 - * @retval none - */ -void tmr_pwm_input_config(tmr_type *tmr_x, tmr_input_config_type *input_struct, - tmr_channel_input_divider_type divider_factor) -{ - uint16_t channel = 0; - - /* get channel selected */ - channel = input_struct->input_channel_select; - - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - if(input_struct->input_polarity_select == TMR_INPUT_RISING_EDGE) - { - /* set channel polarity */ - tmr_x->cctrl_bit.c1p = TMR_INPUT_RISING_EDGE; - tmr_x->cctrl_bit.c2p = TMR_INPUT_FALLING_EDGE; - } - else if(input_struct->input_polarity_select == TMR_INPUT_FALLING_EDGE) - { - /* set channel polarity */ - tmr_x->cctrl_bit.c1p = TMR_INPUT_FALLING_EDGE; - tmr_x->cctrl_bit.c2p = TMR_INPUT_RISING_EDGE; - } - - if(input_struct->input_mapped_select == TMR_CC_CHANNEL_MAPPED_DIRECT) - { - /* ic1 is mapped on ti1 */ - tmr_x->cm1_input_bit.c1c = TMR_CC_CHANNEL_MAPPED_DIRECT; - - /* ic1 is mapped on ti2 */ - tmr_x->cm1_input_bit.c2c = TMR_CC_CHANNEL_MAPPED_INDIRECT; - } - else if(input_struct->input_mapped_select == TMR_CC_CHANNEL_MAPPED_INDIRECT) - { - /* ic1 is mapped on ti1 */ - tmr_x->cm1_input_bit.c1c = TMR_CC_CHANNEL_MAPPED_INDIRECT; - - /* ic1 is mapped on ti2 */ - tmr_x->cm1_input_bit.c2c = TMR_CC_CHANNEL_MAPPED_DIRECT; - } - - /* set input ch1 and ch2 filter value*/ - tmr_x->cm1_input_bit.c1df = input_struct->input_filter_value; - tmr_x->cm1_input_bit.c2df = input_struct->input_filter_value; - - /*set input ch1 and ch2 divider value*/ - tmr_x->cm1_input_bit.c1idiv = divider_factor; - tmr_x->cm1_input_bit.c2idiv = divider_factor; - - tmr_x->cctrl_bit.c1en = TRUE; - tmr_x->cctrl_bit.c2en = TRUE; - break; - - case TMR_SELECT_CHANNEL_2: - if(input_struct->input_polarity_select == TMR_INPUT_RISING_EDGE) - { - /* set channel polarity */ - tmr_x->cctrl_bit.c2p = TMR_INPUT_RISING_EDGE; - tmr_x->cctrl_bit.c1p = TMR_INPUT_FALLING_EDGE; - } - else if(input_struct->input_polarity_select == TMR_INPUT_FALLING_EDGE) - { - /* set channel polarity */ - tmr_x->cctrl_bit.c2p = TMR_INPUT_FALLING_EDGE; - tmr_x->cctrl_bit.c1p = TMR_INPUT_RISING_EDGE; - } - - if(input_struct->input_mapped_select == TMR_CC_CHANNEL_MAPPED_DIRECT) - { - /* set mapped direct */ - tmr_x->cm1_input_bit.c2c = TMR_CC_CHANNEL_MAPPED_DIRECT; - tmr_x->cm1_input_bit.c1c = TMR_CC_CHANNEL_MAPPED_INDIRECT; - } - else if(input_struct->input_mapped_select == TMR_CC_CHANNEL_MAPPED_INDIRECT) - { - /* set mapped direct */ - tmr_x->cm1_input_bit.c2c = TMR_CC_CHANNEL_MAPPED_INDIRECT; - tmr_x->cm1_input_bit.c1c = TMR_CC_CHANNEL_MAPPED_DIRECT; - } - - /* set input ch1 and ch2 filter value*/ - tmr_x->cm1_input_bit.c1df = input_struct->input_filter_value; - tmr_x->cm1_input_bit.c2df = input_struct->input_filter_value; - - /*set input ch1 and ch2 divider value*/ - tmr_x->cm1_input_bit.c1idiv = divider_factor; - tmr_x->cm1_input_bit.c2idiv = divider_factor; - - tmr_x->cctrl_bit.c1en = TRUE; - tmr_x->cctrl_bit.c2en = TRUE; - break; - - default: - break; - } -} - -/** - * @brief select tmr channel1 input - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8 - * @param ti1_connect - * this parameter can be one of the following values: - * - TMR_CHANEL1_CONNECTED_C1IRAW - * - TMR_CHANEL1_2_3_CONNECTED_C1IRAW_XOR - * @retval none - */ -void tmr_channel1_input_select(tmr_type *tmr_x, tmr_channel1_input_connected_type ti1_connect) -{ - tmr_x->ctrl2_bit.c1insel = ti1_connect; -} - -/** - * @brief set tmr input channel divider - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @param divider_factor - * this parameter can be one of the following values: - * - TMR_CHANNEL_INPUT_DIV_1 - * - TMR_CHANNEL_INPUT_DIV_2 - * - TMR_CHANNEL_INPUT_DIV_4 - * - TMR_CHANNEL_INPUT_DIV_8 - * @retval none - */ -void tmr_input_channel_divider_set(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - tmr_channel_input_divider_type divider_factor) -{ - uint16_t channel; - - channel = tmr_channel; - - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cm1_input_bit.c1idiv = divider_factor; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cm1_input_bit.c2idiv = divider_factor; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cm2_input_bit.c3idiv = divider_factor; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cm2_input_bit.c4idiv = divider_factor; - break; - - default: - break; - } -} - -/** - * @brief select tmr primary mode - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8 - * @param primary_mode - * this parameter can be one of the following values: - * - TMR_PRIMARY_SEL_RESET - * - TMR_PRIMARY_SEL_ENABLE - * - TMR_PRIMARY_SEL_OVERFLOW - * - TMR_PRIMARY_SEL_COMPARE - * - TMR_PRIMARY_SEL_C1ORAW - * - TMR_PRIMARY_SEL_C2ORAW - * - TMR_PRIMARY_SEL_C3ORAW - * - TMR_PRIMARY_SEL_C4ORAW - * @retval none - */ -void tmr_primary_mode_select(tmr_type *tmr_x, tmr_primary_select_type primary_mode) -{ - tmr_x->ctrl2_bit.ptos = primary_mode; -} - -/** - * @brief select tmr subordinate mode - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR12 - * @param sub_mode - * this parameter can be one of the following values: - * - TMR_SUB_MODE_DIABLE - * - TMR_SUB_ENCODER_MODE_A - * - TMR_SUB_ENCODER_MODE_B - * - TMR_SUB_ENCODER_MODE_C - * - TMR_SUB_RESET_MODE - * - TMR_SUB_HANG_MODE - * - TMR_SUB_TRIGGER_MODE - * - TMR_SUB_EXTERNAL_CLOCK_MODE_A - * @retval none - */ -void tmr_sub_mode_select(tmr_type *tmr_x, tmr_sub_mode_select_type sub_mode) -{ - tmr_x->stctrl_bit.smsel = sub_mode; -} - -/** - * @brief select tmr channel dma - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR12 - * @param cc_dma_select - * this parameter can be one of the following values: - * - TMR_DMA_REQUEST_BY_CHANNEL - * - TMR_DMA_REQUEST_BY_OVERFLOW - * @retval none - */ -void tmr_channel_dma_select(tmr_type *tmr_x, tmr_dma_request_source_type cc_dma_select) -{ - tmr_x->ctrl2_bit.drs = cc_dma_select; -} - -/** - * @brief select tmr hall - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR8 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_hall_select(tmr_type *tmr_x, confirm_state new_state) -{ - tmr_x->ctrl2_bit.ccfs = new_state; -} - -/** - * @brief enable tmr channel buffer - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR8 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_channel_buffer_enable(tmr_type *tmr_x, confirm_state new_state) -{ - tmr_x->ctrl2_bit.cbctrl = new_state; -} - -/** - * @brief select tmr sub-trigger - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR12 - * @param trigger_select - * this parameter can be one of the following values: - * - TMR_SUB_INPUT_SEL_IS0 - * - TMR_SUB_INPUT_SEL_IS1 - * - TMR_SUB_INPUT_SEL_IS2 - * - TMR_SUB_INPUT_SEL_IS3 - * - TMR_SUB_INPUT_SEL_C1INC - * - TMR_SUB_INPUT_SEL_C1DF1 - * - TMR_SUB_INPUT_SEL_C2DF2 - * - TMR_SUB_INPUT_SEL_EXTIN - * @retval none - */ -void tmr_trigger_input_select(tmr_type *tmr_x, sub_tmr_input_sel_type trigger_select) -{ - tmr_x->stctrl_bit.stis = trigger_select; -} - -/** - * @brief set tmr subordinate synchronization mode - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR12 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_sub_sync_mode_set(tmr_type *tmr_x, confirm_state new_state) -{ - tmr_x->stctrl_bit.sts = new_state; -} - -/** - * @brief enable or disable tmr dma request - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param dma_request - * this parameter can be one of the following values: - * - TMR_OVERFLOW_DMA_REQUEST - * - TMR_C1_DMA_REQUEST - * - TMR_C2_DMA_REQUEST - * - TMR_C3_DMA_REQUEST - * - TMR_C4_DMA_REQUEST - * - TMR_HALL_DMA_REQUEST - * - TMR_TRIGGER_DMA_REQUEST - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_dma_request_enable(tmr_type *tmr_x, tmr_dma_request_type dma_request, confirm_state new_state) -{ - if(new_state == TRUE) - { - tmr_x->iden |= dma_request; - } - else if(new_state == FALSE) - { - tmr_x->iden &= ~dma_request; - } -} - -/** - * @brief enable or disable tmr interrupt - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param tmr_interrupt - * this parameter can be one of the following values: - * - TMR_OVF_INT - * - TMR_C1_INT - * - TMR_C2_INT - * - TMR_C3_INT - * - TMR_C4_INT - * - TMR_HALL_INT - * - TMR_TRIGGER_INT - * - TMR_BRK_INT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_interrupt_enable(tmr_type *tmr_x, uint32_t tmr_interrupt, confirm_state new_state) -{ - if(new_state == TRUE) - { - tmr_x->iden |= tmr_interrupt; - } - else if(new_state == FALSE) - { - tmr_x->iden &= ~tmr_interrupt; - } -} - -/** - * @brief get tmr flag - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param tmr_flag - * this parameter can be one of the following values: - * - TMR_OVF_FLAG - * - TMR_C1_FLAG - * - TMR_C2_FLAG - * - TMR_C3_FLAG - * - TMR_C4_FLAG - * - TMR_HALL_FLAG - * - TMR_TRIGGER_FLAG - * - TMR_BRK_FLAG - * - TMR_C1_RECAPTURE_FLAG - * - TMR_C2_RECAPTURE_FLAG - * - TMR_C3_RECAPTURE_FLAG - * - TMR_C4_RECAPTURE_FLAG - * @retval state of tmr flag - */ -flag_status tmr_flag_get(tmr_type *tmr_x, uint32_t tmr_flag) -{ - flag_status status = RESET; - - if((tmr_x->ists & tmr_flag) != RESET) - { - status = SET; - } - else - { - status = RESET; - } - - return status; -} - -/** - * @brief clear tmr flag - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param tmr_flag - * this parameter can be any combination of the following values: - * - TMR_OVF_FLAG - * - TMR_C1_FLAG - * - TMR_C2_FLAG - * - TMR_C3_FLAG - * - TMR_C4_FLAG - * - TMR_HALL_FLAG - * - TMR_TRIGGER_FLAG - * - TMR_BRK_FLAG - * - TMR_C1_RECAPTURE_FLAG - * - TMR_C2_RECAPTURE_FLAG - * - TMR_C3_RECAPTURE_FLAG - * - TMR_C4_RECAPTURE_FLAG - * @retval none - */ -void tmr_flag_clear(tmr_type *tmr_x, uint32_t tmr_flag) -{ - tmr_x->ists = ~tmr_flag; -} - -/** - * @brief generate tmr event - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR6, TMR7, TMR8, - * TMR9, TMR10, TMR11, TMR12, TMR13, TMR14 - * @param tmr_event - * this parameter can be one of the following values: - * - TMR_OVERFLOW_SWTRIG - * - TMR_C1_SWTRIG - * - TMR_C2_SWTRIG - * - TMR_C3_SWTRIG - * - TMR_C4_SWTRIG - * - TMR_HALL_SWTRIG - * - TMR_TRIGGER_SWTRIG - * - TMR_BRK_SWTRIG - * @retval none - */ -void tmr_event_sw_trigger(tmr_type *tmr_x, tmr_event_trigger_type tmr_event) -{ - tmr_x->swevt |= tmr_event; -} - -/** - * @brief tmr output enable(oen),this function is important for advtm output enable - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR8 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void tmr_output_enable(tmr_type *tmr_x, confirm_state new_state) -{ - tmr_x->brk_bit.oen = new_state; -} - -/** - * @brief set tmr select internal clock - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR12 - * @retval none - */ -void tmr_internal_clock_set(tmr_type *tmr_x) -{ - tmr_x->stctrl_bit.smsel = TMR_SUB_MODE_DIABLE; -} - -/** - * @brief set tmr output channel polarity - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * - TMR_SELECT_CHANNEL_1C - * - TMR_SELECT_CHANNEL_2C - * - TMR_SELECT_CHANNEL_3C - * @param oc_polarity - * this parameter can be one of the following values: - * - TMR_POLARITY_ACTIVE_HIGH - * - TMR_POLARITY_ACTIVE_LOW - * @retval none - */ -void tmr_output_channel_polarity_set(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - tmr_polarity_active_type oc_polarity) -{ - uint16_t channel; - - channel = tmr_channel; - - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cctrl_bit.c1p = (uint32_t)oc_polarity; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cctrl_bit.c2p = (uint32_t)oc_polarity; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cctrl_bit.c3p = (uint32_t)oc_polarity; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cctrl_bit.c4p = (uint32_t)oc_polarity; - break; - - case TMR_SELECT_CHANNEL_1C: - tmr_x->cctrl_bit.c1cp = (uint32_t)oc_polarity; - break; - - case TMR_SELECT_CHANNEL_2C: - tmr_x->cctrl_bit.c2cp = (uint32_t)oc_polarity; - break; - - case TMR_SELECT_CHANNEL_3C: - tmr_x->cctrl_bit.c3cp = (uint32_t)oc_polarity; - break; - - default: - break; - } -} - -/** - * @brief config tmr external clock - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8 - * @param es_divide - * this parameter can be one of the following values: - * - TMR_ES_FREQUENCY_DIV_1 - * - TMR_ES_FREQUENCY_DIV_2 - * - TMR_ES_FREQUENCY_DIV_4 - * - TMR_ES_FREQUENCY_DIV_8 - * @param es_polarity - * this parameter can be one of the following values: - * - TMR_ES_POLARITY_NON_INVERTED - * - TMR_ES_POLARITY_INVERTED - * @param es_filter (0x0~0xf) - * @retval none - */ -void tmr_external_clock_config(tmr_type *tmr_x, tmr_external_signal_divider_type es_divide, - tmr_external_signal_polarity_type es_polarity, uint16_t es_filter) -{ - tmr_x->stctrl_bit.esdiv = es_divide; - tmr_x->stctrl_bit.esp = es_polarity; - tmr_x->stctrl_bit.esf = es_filter; -} - -/** - * @brief config tmr external clock mode1 - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR12 - * @param es_divide - * this parameter can be one of the following values: - * - TMR_ES_FREQUENCY_DIV_1 - * - TMR_ES_FREQUENCY_DIV_2 - * - TMR_ES_FREQUENCY_DIV_4 - * - TMR_ES_FREQUENCY_DIV_8 - * @param es_polarity - * this parameter can be one of the following values: - * - TMR_ES_POLARITY_NON_INVERTED - * - TMR_ES_POLARITY_INVERTED - * @param es_filter (0x0~0xf) - * @retval none - */ -void tmr_external_clock_mode1_config(tmr_type *tmr_x, tmr_external_signal_divider_type es_divide, - tmr_external_signal_polarity_type es_polarity, uint16_t es_filter) -{ - tmr_external_clock_config(tmr_x, es_divide, es_polarity, es_filter); - tmr_x->stctrl_bit.smsel = TMR_SUB_EXTERNAL_CLOCK_MODE_A; - tmr_x->stctrl_bit.stis = TMR_SUB_INPUT_SEL_EXTIN; -} - -/** - * @brief config tmr external clock mode2 - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8 - * @param es_divide - * this parameter can be one of the following values: - * - TMR_ES_FREQUENCY_DIV_1 - * - TMR_ES_FREQUENCY_DIV_2 - * - TMR_ES_FREQUENCY_DIV_4 - * - TMR_ES_FREQUENCY_DIV_8 - * @param es_polarity - * this parameter can be one of the following values: - * - TMR_ES_POLARITY_NON_INVERTED - * - TMR_ES_POLARITY_INVERTED - * @param es_filter (0x0~0xf) - * @retval none - */ -void tmr_external_clock_mode2_config(tmr_type *tmr_x, tmr_external_signal_divider_type es_divide, - tmr_external_signal_polarity_type es_polarity, uint16_t es_filter) -{ - tmr_external_clock_config(tmr_x, es_divide, es_polarity, es_filter); - tmr_x->stctrl_bit.ecmben = TRUE; -} - -/** - * @brief config tmr encoder mode - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8 - * @param encoder_mode - * this parameter can be one of the following values: - * - TMR_ENCODER_MODE_A - * - TMR_ENCODER_MODE_B - * - TMR_ENCODER_MODE_C - * @param ic1_polarity - * this parameter can be one of the following values: - * - TMR_INPUT_RISING_EDGE - * - TMR_INPUT_FALLING_EDGE - * - TMR_INPUT_BOTH_EDGE - * @param ic2_polarity - * this parameter can be one of the following values: - * - TMR_INPUT_RISING_EDGE - * - TMR_INPUT_FALLING_EDGE - * - TMR_INPUT_BOTH_EDGE - * @retval none - */ -void tmr_encoder_mode_config(tmr_type *tmr_x, tmr_encoder_mode_type encoder_mode, tmr_input_polarity_type - ic1_polarity, tmr_input_polarity_type ic2_polarity) -{ - tmr_x->stctrl_bit.smsel = encoder_mode; - - /* set ic1 polarity */ - tmr_x->cctrl_bit.c1p = (ic1_polarity & 0x1); - tmr_x->cctrl_bit.c1cp = (ic1_polarity >> 1); - /* set ic1 as input channel */ - tmr_x->cm1_input_bit.c1c = TMR_CC_CHANNEL_MAPPED_DIRECT; - - /* set ic2 polarity */ - tmr_x->cctrl_bit.c2p = (ic2_polarity & 0x1); - tmr_x->cctrl_bit.c2cp = (ic2_polarity >> 1); - /* set ic2 as input channel */ - tmr_x->cm1_input_bit.c2c = TMR_CC_CHANNEL_MAPPED_DIRECT; -} - -/** - * @brief set tmr force output - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8, TMR9, TMR10, - * TMR11, TMR12, TMR13, TMR14 - * @param tmr_channel - * this parameter can be one of the following values: - * - TMR_SELECT_CHANNEL_1 - * - TMR_SELECT_CHANNEL_2 - * - TMR_SELECT_CHANNEL_3 - * - TMR_SELECT_CHANNEL_4 - * @param force_output - * this parameter can be one of the following values: - * - TMR_FORCE_OUTPUT_HIGH - * - TMR_FORCE_OUTPUT_LOW - * @retval none - */ -void tmr_force_output_set(tmr_type *tmr_x, tmr_channel_select_type tmr_channel, - tmr_force_output_type force_output) -{ - uint16_t channel; - - channel = tmr_channel; - - switch(channel) - { - case TMR_SELECT_CHANNEL_1: - tmr_x->cm1_output_bit.c1octrl = force_output; - break; - - case TMR_SELECT_CHANNEL_2: - tmr_x->cm1_output_bit.c2octrl = force_output; - break; - - case TMR_SELECT_CHANNEL_3: - tmr_x->cm2_output_bit.c3octrl = force_output; - break; - - case TMR_SELECT_CHANNEL_4: - tmr_x->cm2_output_bit.c4octrl = force_output; - break; - - default: - break; - } -} - -/** - * @brief config tmr dma control - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR2, TMR3, TMR4, TMR5, TMR8 - * @param dma_length - * this parameter can be one of the following values: - * - TMR_DMA_TRANSFER_1BYTE - * - TMR_DMA_TRANSFER_2BYTES - * - TMR_DMA_TRANSFER_3BYTES - * ... - * - TMR_DMA_TRANSFER_17BYTES - * - TMR_DMA_TRANSFER_18BYTES - * @param dma_base_address - * this parameter can be one of the following values: - * - TMR_CTRL1_ADDRESS - * - TMR_CTRL2_ADDRESS - * - TMR_STCTRL_ADDRESS - * - TMR_IDEN_ADDRESS - * - TMR_ISTS_ADDRESS - * - TMR_SWEVT_ADDRESS - * - TMR_CM1_ADDRESS - * - TMR_CM2_ADDRESS - * - TMR_CCTRL_ADDRESS - * - TMR_CVAL_ADDRESS - * - TMR_DIV_ADDRESS - * - TMR_PR_ADDRESS - * - TMR_RPR_ADDRESS - * - TMR_C1DT_ADDRESS - * - TMR_C2DT_ADDRESS - * - TMR_C3DT_ADDRESS - * - TMR_C4DT_ADDRESS - * - TMR_BRK_ADDRESS - * - TMR_DMACTRL_ADDRESS - * @retval none - */ -void tmr_dma_control_config(tmr_type *tmr_x, tmr_dma_transfer_length_type dma_length, - tmr_dma_address_type dma_base_address) -{ - tmr_x->dmactrl_bit.dtb = dma_length; - tmr_x->dmactrl_bit.addr = dma_base_address; -} - -/** - * @brief config tmr break mode and dead-time - * @param tmr_x: select the tmr peripheral. - * this parameter can be one of the following values: - * TMR1, TMR8 - * @param brkdt_struct - * - to the structure of tmr_brkdt_config_type - * @retval none - */ -void tmr_brkdt_config(tmr_type *tmr_x, tmr_brkdt_config_type *brkdt_struct) -{ - tmr_x->brk_bit.brken = brkdt_struct->brk_enable; - tmr_x->brk_bit.dtc = brkdt_struct->deadtime; - tmr_x->brk_bit.fcsodis = brkdt_struct->fcsodis_state; - tmr_x->brk_bit.fcsoen = brkdt_struct->fcsoen_state; - tmr_x->brk_bit.brkv = brkdt_struct->brk_polarity; - tmr_x->brk_bit.aoen = brkdt_struct->auto_output_enable; - tmr_x->brk_bit.wpc = brkdt_struct->wp_level; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_usart.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_usart.c deleted file mode 100644 index 2fde5c6..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_usart.c +++ /dev/null @@ -1,624 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_usart.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the usart firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* includes ------------------------------------------------------------------*/ -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup USART - * @brief USART driver modules - * @{ - */ - -#ifdef USART_MODULE_ENABLED - -/** @defgroup USART_private_functions - * @{ - */ - -/** - * @brief deinitialize the usart peripheral registers to their default reset values. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7,or UART8. - * @retval none - */ -void usart_reset(usart_type* usart_x) -{ - if(usart_x == USART1) - { - crm_periph_reset(CRM_USART1_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_USART1_PERIPH_RESET, FALSE); - } - else if(usart_x == USART2) - { - crm_periph_reset(CRM_USART2_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_USART2_PERIPH_RESET, FALSE); - } - else if(usart_x == USART3) - { - crm_periph_reset(CRM_USART3_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_USART3_PERIPH_RESET, FALSE); - } - else if(usart_x == UART4) - { - crm_periph_reset(CRM_UART4_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_UART4_PERIPH_RESET, FALSE); - } - else if(usart_x == UART5) - { - crm_periph_reset(CRM_UART5_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_UART5_PERIPH_RESET, FALSE); - } - else if(usart_x == USART6) - { - crm_periph_reset(CRM_USART6_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_USART6_PERIPH_RESET, FALSE); - } - else if(usart_x == UART7) - { - crm_periph_reset(CRM_UART7_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_UART7_PERIPH_RESET, FALSE); - } - else if(usart_x == UART8) - { - crm_periph_reset(CRM_UART8_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_UART8_PERIPH_RESET, FALSE); - } -} - -/** - * @brief initialize the usart peripheral according to the specified parameters. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4 ,UART5, USART6, UART7 or UART8. - * @param baud_rate: configure the usart communication baud rate. - * @param data_bit: data bits transmitted or received in a frame - * this parameter can be one of the following values: - * - USART_DATA_8BITS - * - USART_DATA_9BITS. - * @param stop_bit: stop bits transmitted - * this parameter can be one of the following values: - * - USART_STOP_1_BIT - * - USART_STOP_0_5_BIT. - * - USART_STOP_2_BIT - * - USART_STOP_1_5_BIT. - * @retval none - */ -void usart_init(usart_type* usart_x, uint32_t baud_rate, usart_data_bit_num_type data_bit, usart_stop_bit_num_type stop_bit) -{ - crm_clocks_freq_type clocks_freq; - uint32_t apb_clock, temp_val; - crm_clocks_freq_get(&clocks_freq); - if((usart_x == USART1) || (usart_x == USART6) || (usart_x == UART7) || (usart_x == UART8)) - { - apb_clock = clocks_freq.apb2_freq; - } - else - { - apb_clock = clocks_freq.apb1_freq; - } - temp_val = (apb_clock * 10 / baud_rate); - if((temp_val % 10) < 5) - { - temp_val = (temp_val / 10); - } - else - { - temp_val = (temp_val / 10) + 1; - } - usart_x->baudr_bit.div = temp_val; - usart_x->ctrl1_bit.dbn = data_bit; - usart_x->ctrl2_bit.stopbn = stop_bit; -} - -/** - * @brief usart parity selection config. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4 ,UART5, USART6, UART7 or UART8. - * @param parity: select the none, odd or even parity. - * this parameter can be one of the following values: - * - USART_PARITY_NONE - * - USART_PARITY_EVEN. - * - USART_PARITY_ODD - * @retval none - */ -void usart_parity_selection_config(usart_type* usart_x, usart_parity_selection_type parity) -{ - if(parity == USART_PARITY_NONE) - { - usart_x->ctrl1_bit.psel = FALSE; - usart_x->ctrl1_bit.pen = FALSE; - } - else if(parity == USART_PARITY_EVEN) - { - usart_x->ctrl1_bit.psel = FALSE; - usart_x->ctrl1_bit.pen = TRUE; - } - else if(parity == USART_PARITY_ODD) - { - usart_x->ctrl1_bit.psel = TRUE; - usart_x->ctrl1_bit.pen = TRUE; - } -} - -/** - * @brief enable or disable the specified usart peripheral. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param new_state: new state of the usart peripheral. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl1_bit.uen = new_state; -} - -/** - * @brief usart transmitter enable. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4 ,UART5, USART6, UART7 or UART8. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void usart_transmitter_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl1_bit.ten = new_state; -} - -/** - * @brief usart receiver enable. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4 ,UART5, USART6, UART7 or UART8. - * @param new_state: TRUE or FALSE. - * @retval none - */ -void usart_receiver_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl1_bit.ren = new_state; -} - -/** - * @brief usart clock config. - * @note clock config are not available for UART4, UART5, UART7 and UART8. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3 or USART6. - * @param clk_pol: polarity of the clock output on the ck pin. - * this parameter can be one of the following values: - * - USART_CLOCK_POLARITY_LOW - * - USART_CLOCK_POLARITY_HIGH - * @param clk_pha: phase of the clock output on the ck pin. - * this parameter can be one of the following values: - * - USART_CLOCK_PHASE_1EDGE - * - USART_CLOCK_PHASE_2EDGE - * @param clk_lb: whether the clock pulse of the last data bit transmitted (MSB) is outputted on the ck pin. - * this parameter can be one of the following values: - * - USART_CLOCK_LAST_BIT_NONE - * - USART_CLOCK_LAST_BIT_OUTPUT - * @retval none - */ -void usart_clock_config(usart_type* usart_x, usart_clock_polarity_type clk_pol, usart_clock_phase_type clk_pha, usart_lbcp_type clk_lb) -{ - usart_x->ctrl2_bit.clkpol = clk_pol; - usart_x->ctrl2_bit.clkpha = clk_pha; - usart_x->ctrl2_bit.lbcp = clk_lb; -} - -/** - * @brief usart enable the ck pin. - * @note clock enable are not available for UART4, UART5, UART7 and UART8. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3 or USART6. - * @param new_state: TRUE or FALSE - * @retval none - */ -void usart_clock_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl2_bit.clken = new_state; -} - -/** - * @brief enable or disable the specified usart interrupts. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param usart_int: specifies the USART interrupt sources to be enabled or disabled. - * this parameter can be one of the following values: - * - USART_IDLE_INT: idle interrupt - * - USART_RDBF_INT: rdbf interrupt - * - USART_TDC_INT: tdc interrupt - * - USART_TDBE_INT: tdbe interrupt - * - USART_PERR_INT: perr interrupt - * - USART_BF_INT: break frame interrupt - * - USART_ERR_INT: err interrupt - * - USART_CTSCF_INT: ctscf interrupt - * @param new_state: new state of the specified usart interrupts. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_interrupt_enable(usart_type* usart_x, uint32_t usart_int, confirm_state new_state) -{ - if(new_state == TRUE) - PERIPH_REG((uint32_t)usart_x, usart_int) |= PERIPH_REG_BIT(usart_int); - else - PERIPH_REG((uint32_t)usart_x, usart_int) &= ~PERIPH_REG_BIT(usart_int); -} - -/** - * @brief enable or disable the usart's dma transmitter interface. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param new_state: new state of the dma request sources. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_dma_transmitter_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl3_bit.dmaten = new_state; -} - -/** - * @brief enable or disable the usart's dma receiver interface. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param new_state: new state of the dma request sources. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_dma_receiver_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl3_bit.dmaren = new_state; -} - -/** - * @brief set the wakeup id of the usart. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param usart_id: the matching id(0x0~0xF). - * @retval none - */ -void usart_wakeup_id_set(usart_type* usart_x, uint8_t usart_id) -{ - usart_x->ctrl2_bit.id = usart_id; -} - -/** - * @brief select the usart wakeup method in multi-processor communication. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param wakeup_mode: determines the way to wake up usart method. - * this parameter can be one of the following values: - * - USART_WAKEUP_BY_IDLE_FRAME - * - USART_WAKEUP_BY_MATCHING_ID - * @retval none - */ -void usart_wakeup_mode_set(usart_type* usart_x, usart_wakeup_mode_type wakeup_mode) -{ - usart_x->ctrl1_bit.wum = wakeup_mode; -} - -/** - * @brief config the usart in mute mode in multi-processor communication. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param new_state: new state of the usart mute mode. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_receiver_mute_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl1_bit.rm = new_state; -} - -/** - * @brief set the usart break frame bit num. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param break_bit: specifies the break bit num. - * this parameter can be one of the following values: - * - USART_BREAK_10BITS - * - USART_BREAK_11BITS - * @retval none - */ -void usart_break_bit_num_set(usart_type* usart_x, usart_break_bit_num_type break_bit) -{ - usart_x->ctrl2_bit.bfbn = break_bit; -} - -/** - * @brief enable or disable the usart lin mode. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param new_state: new state of the usart lin mode. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_lin_mode_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl2_bit.linen = new_state; -} - -/** - * @brief transmit single data through the usart peripheral. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param data: the data to transmit. - * @retval none - */ -void usart_data_transmit(usart_type* usart_x, uint16_t data) -{ - usart_x->dt = (data & 0x01FF); -} - -/** - * @brief return the most recent received data by the usart peripheral. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @retval the received data. - */ -uint16_t usart_data_receive(usart_type* usart_x) -{ - return (uint16_t)(usart_x->dt); -} - -/** - * @brief transmit break characters. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @retval none - */ -void usart_break_send(usart_type* usart_x) -{ - usart_x->ctrl1_bit.sbf = TRUE; -} - -/** - * @brief config the specified usart smartcard guard time. - * @note The guard time bits are not available for UART4, UART5, UART7 or UART8. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3 or USART6. - * @param guard_time_val: specifies the guard time (0x00~0xFF). - * @retval none - */ -void usart_smartcard_guard_time_set(usart_type* usart_x, uint8_t guard_time_val) -{ - usart_x->gdiv_bit.scgt = guard_time_val; -} - -/** - * @brief config the irda/smartcard division. - * @note the division are not available for UART4, UART5, UART7 or UART8. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3 or USART6. - * @param div_val: specifies the division. - * @retval none - */ -void usart_irda_smartcard_division_set(usart_type* usart_x, uint8_t div_val) -{ - usart_x->gdiv_bit.isdiv = div_val; -} - -/** - * @brief enable or disable the usart smart card mode. - * @note the smart card mode are not available for UART4, UART5, UART7 or UART8. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3 or USART6. - * @param new_state: new state of the smart card mode. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_smartcard_mode_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl3_bit.scmen = new_state; -} - -/** - * @brief enable or disable nack transmission in smartcard mode. - * @note the smart card nack are not available for UART4, UART5, UART7 or UART8. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3 or USART6. - * @param new_state: new state of the nack transmission. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_smartcard_nack_set(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl3_bit.scnacken = new_state; -} - -/** - * @brief enable or disable the usart single line bidirectional half-duplex communication. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param new_state: new state of the single line half-duplex select. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_single_line_halfduplex_select(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl3_bit.slben = new_state; -} - -/** - * @brief enable or disable the usart's irda interface. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param new_state: new state of the irda mode. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_irda_mode_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl3_bit.irdaen = new_state; -} - -/** - * @brief configure the usart's irda low power. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param new_state: new state of the irda mode. - * this parameter can be: TRUE or FALSE. - * @retval none - */ -void usart_irda_low_power_enable(usart_type* usart_x, confirm_state new_state) -{ - usart_x->ctrl3_bit.irdalp = new_state; -} - -/** - * @brief configure the usart's hardware flow control. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3 - * @param flow_state: specifies the hardware flow control. - * this parameter can be one of the following values: - * - USART_HARDWARE_FLOW_NONE - * - USART_HARDWARE_FLOW_RTS, - * - USART_HARDWARE_FLOW_CTS, - * - USART_HARDWARE_FLOW_RTS_CTS - * @retval none - */ -void usart_hardware_flow_control_set(usart_type* usart_x,usart_hardware_flow_control_type flow_state) -{ - if(flow_state == USART_HARDWARE_FLOW_NONE) - { - usart_x->ctrl3_bit.rtsen = FALSE; - usart_x->ctrl3_bit.ctsen = FALSE; - } - else if(flow_state == USART_HARDWARE_FLOW_RTS) - { - usart_x->ctrl3_bit.rtsen = TRUE; - usart_x->ctrl3_bit.ctsen = FALSE; - } - else if(flow_state == USART_HARDWARE_FLOW_CTS) - { - usart_x->ctrl3_bit.rtsen = FALSE; - usart_x->ctrl3_bit.ctsen = TRUE; - } - else if(flow_state == USART_HARDWARE_FLOW_RTS_CTS) - { - usart_x->ctrl3_bit.rtsen = TRUE; - usart_x->ctrl3_bit.ctsen = TRUE; - } -} - -/** - * @brief check whether the specified usart flag is set or not. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param flag: specifies the flag to check. - * this parameter can be one of the following values: - * - USART_CTSCF_FLAG: cts change flag (not available for UART4,UART5,USART6,UART7 and UART8) - * - USART_BFF_FLAG: break frame flag - * - USART_TDBE_FLAG: transmit data buffer empty flag - * - USART_TDC_FLAG: transmit data complete flag - * - USART_RDBF_FLAG: receive data buffer full flag - * - USART_IDLEF_FLAG: idle flag - * - USART_ROERR_FLAG: receiver overflow error flag - * - USART_NERR_FLAG: noise error flag - * - USART_FERR_FLAG: framing error flag - * - USART_PERR_FLAG: parity error flag - * @retval the new state of usart_flag (SET or RESET). - */ -flag_status usart_flag_get(usart_type* usart_x, uint32_t flag) -{ - if(usart_x->sts & flag) - { - return SET; - } - else - { - return RESET; - } -} - -/** - * @brief clear the usart's pending flags. - * @param usart_x: select the usart or the uart peripheral. - * this parameter can be one of the following values: - * USART1, USART2, USART3, UART4, UART5, USART6, UART7 or UART8. - * @param flag: specifies the flag to clear. - * this parameter can be any combination of the following values: - * - USART_CTSCF_FLAG: (not available for UART4,UART5,USART6,UART7 and UART8). - * - USART_BFF_FLAG: - * - USART_TDC_FLAG: - * - USART_RDBF_FLAG: - * @note - * - USART_PERR_FLAG, USART_FERR_FLAG, USART_NERR_FLAG, USART_ROERR_FLAG and USART_IDLEF_FLAG are cleared by software - * sequence: a read operation to usart sts register (usart_flag_get()) - * followed by a read operation to usart dt register (usart_data_receive()). - * - USART_RDBF_FLAG can be also cleared by a read to the usart dt register(usart_data_receive()). - * - USART_TDC_FLAG can be also cleared by software sequence: a read operation to usart sts register (usart_flag_get()) - * followed by a write operation to usart dt register (usart_data_transmit()). - * - USART_TDBE_FLAG is cleared only by a write to the usart dt register(usart_data_transmit()). - * @retval none - */ -void usart_flag_clear(usart_type* usart_x, uint32_t flag) -{ - usart_x->sts = ~flag; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_usb.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_usb.c deleted file mode 100644 index a177da5..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_usb.c +++ /dev/null @@ -1,561 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_usb.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains the functions for the usb firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup USB - * @brief USB driver modules - * @{ - */ - -#include "at32f403a_407_conf.h" - - -#ifdef USB_MODULE_ENABLED - -/** @defgroup USB_private_functions - * @{ - */ - -/** - * @brief usb packet buffer start address - */ -#define USB_ENDP_DESC_TABLE_OFFSET 0x40 -uint32_t g_usb_packet_address = USB_PACKET_BUFFER_ADDRESS; -static uint16_t g_usb_offset_addr = USB_ENDP_DESC_TABLE_OFFSET; - -/** - * @brief initialize usb peripheral controller register - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @retval none - */ -void usb_dev_init(usbd_type *usbx) -{ - /* clear usb core reset */ - usbx->ctrl_bit.csrst = 0; - - /* clear usb interrupt status */ - usbx->intsts = 0; - - /* set usb packet buffer descirption table address */ - usbx->buftbl = USB_BUFFER_TABLE_ADDRESS; - - /* enable usb core and set device address to 0 */ - usbx->devaddr = 0x80; - - usb_interrupt_enable(usbx, USB_SOF_INT | USB_RST_INT | USB_SP_INT | USB_WK_INT | USB_TC_INT, TRUE); -} - -/** - * @brief connect usb device - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @retval none - */ -void usb_connect(usbd_type *usbx) -{ - /* enable usb phy */ - usbx->ctrl_bit.disusb = 0; - - /* Dp 1.5k pull-up enable */ - usbx->cfg_bit.puo = 0; -} - -/** - * @brief disconnect usb device - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @retval none - */ -void usb_disconnect(usbd_type *usbx) -{ - /* disable usb phy */ - usbx->ctrl_bit.disusb = TRUE; - - /* D+ 1.5k pull-up disable */ - usbx->cfg_bit.puo = TRUE; -} - - -/** - * @brief mapping usb packet buffer area - * two mapping intervals are available for packet buffer area, - * and are select by the usbbufs in the crm misc1 register. - * when usbbufs is 0,sram size is 512 bytes, packet buffer start - * address is 0x40006000.when usbbufs is 1, sram size is fixed to - * 768~1280 bytes, and the packet buffer start address is fixed to - * 0x40007800,packet buffer size decided by whether can1 and can2 are - * enabled;when both can1 and can2 are disabled, usb packet buffer can be set to the - * maximum of 1280 bytes; when either can1 or can2 is enabled, usb packet buffer can be set to the - * maximum of 1024 bytes; when both CAN1 and CAN2 are enabled, usb packet buffer can be set to the - * maximum of 768 bytes. - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @retval none - */ -void usb_usbbufs_enable(usbd_type *usbx, confirm_state state) -{ - if(state == TRUE) - { - /* enable usbbufs */ - g_usb_packet_address = USB_PACKET_BUFFER_ADDRESS_EX; - CRM->misc1_bit.usbbufs = TRUE; - } - else - { - /* disable usbbufs */ - g_usb_packet_address = USB_PACKET_BUFFER_ADDRESS; - CRM->misc1_bit.usbbufs = FALSE; - } -} - -/** - * @brief open usb endpoint - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @param ept_info: endpoint information structure - * @retval none - */ -void usb_ept_open(usbd_type *usbx, usb_ept_info *ept_info) -{ - uint16_t type = 0; - - /* set endpoint address */ - USB_SET_EPT_ADDRESS(ept_info->eptn, ept_info->ept_address); - - /* select endpoint transfer type */ - if(ept_info->trans_type == EPT_CONTROL_TYPE) - { - type = USB_EPT_CONTROL; - } - else if(ept_info->trans_type == EPT_BULK_TYPE) - { - type = USB_EPT_BULK; - } - else if(ept_info->trans_type == EPT_INT_TYPE) - { - type = USB_EPT_INT; - } - else if(ept_info->trans_type == EPT_ISO_TYPE) - { - type = USB_EPT_ISO; - ept_info->is_double_buffer = TRUE; - } - - /* configure endpoint transfer type (control, bulk, interrupt, isochronous) */ - USB_SET_TRANS_TYPE(ept_info->eptn, type); - - /* endpoint is in transfer */ - if(ept_info->inout == DATA_TRANS_IN) - { - if(ept_info->is_double_buffer == 0) - { - /* set in endpoint tx offset address */ - USB_SET_TX_ADDRESS(ept_info->eptn, ept_info->tx_addr); - - /* clear in endpoint data toggle */ - USB_CLEAR_TXDTS(ept_info->eptn); - - /* set endpoint transmission status: nak */ - USB_SET_TXSTS(ept_info->eptn, USB_TX_NAK); - } - else - { - /* set double buffer endpoint*/ - USB_SET_EPT_DOUBLE_BUFFER(ept_info->eptn); - - /* set in endpoint offset address0 and address1 */ - USB_SET_DOUBLE_BUFF0_ADDRESS(ept_info->eptn, ept_info->tx_addr); - USB_SET_DOUBLE_BUFF1_ADDRESS(ept_info->eptn, ept_info->rx_addr); - - /* clear in and out data toggle */ - USB_CLEAR_TXDTS(ept_info->eptn); - USB_CLEAR_RXDTS(ept_info->eptn); - - /* toggle rx data toggle flag */ - USB_TOGGLE_RXDTS(ept_info->eptn); - - /* set endpoint reception status: disable */ - USB_SET_RXSTS(ept_info->eptn, USB_RX_DISABLE); - - /* set endpoint transmision status: nak */ - USB_SET_TXSTS(ept_info->eptn, USB_TX_NAK); - } - } - else - { - if(ept_info->is_double_buffer == 0) - { - /* set out endpoint rx offset address */ - USB_SET_RX_ADDRESS(ept_info->eptn, ept_info->rx_addr); - - /* clear out endpoint data toggle */ - USB_CLEAR_RXDTS(ept_info->eptn); - - /* set out endpoint max reception buffer size */ - USB_SET_RXLEN(ept_info->eptn, ept_info->maxpacket); - - /* set endpoint reception status: valid */ - USB_SET_RXSTS(ept_info->eptn, USB_RX_VALID); - } - else - { - /* set double buffer endpoint */ - USB_SET_EPT_DOUBLE_BUFFER(ept_info->eptn); - - /* set out endpoint offset address0 and address1 */ - USB_SET_DOUBLE_BUFF0_ADDRESS(ept_info->eptn, ept_info->tx_addr); - USB_SET_DOUBLE_BUFF1_ADDRESS(ept_info->eptn, ept_info->rx_addr); - - /* set out endpoint max reception buffer size */ - USB_SET_EPT_DOUBLE_BUF0_LEN(ept_info->eptn, ept_info->maxpacket, DATA_TRANS_OUT); - USB_SET_EPT_DOUBLE_BUF1_LEN(ept_info->eptn, ept_info->maxpacket, DATA_TRANS_OUT); - - /* clear in and out data toggle */ - USB_CLEAR_TXDTS(ept_info->eptn); - USB_CLEAR_RXDTS(ept_info->eptn); - - /* toggle tx data toggle flag */ - USB_TOGGLE_TXDTS(ept_info->eptn); - - /* set endpoint reception status: valid */ - USB_SET_RXSTS(ept_info->eptn, USB_RX_VALID); - - /* set endpoint transmision status: disable */ - USB_SET_TXSTS(ept_info->eptn, USB_TX_DISABLE); - } - } -} - - -/** - * @brief close usb endpoint - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @param ept_info: endpoint information structure - * @retval none - */ -void usb_ept_close(usbd_type *usbx, usb_ept_info *ept_info) -{ - if(ept_info->is_double_buffer == 0) - { - if(ept_info->inout == DATA_TRANS_IN) - { - /*clear tx data toggle */ - USB_CLEAR_TXDTS(ept_info->eptn); - - /* set tx status: disable */ - USB_SET_TXSTS(ept_info->eptn, USB_TX_DISABLE); - } - else - { - /*clear rx data toggle */ - USB_CLEAR_RXDTS(ept_info->eptn); - - /* set rx status: disable */ - USB_SET_RXSTS(ept_info->eptn, USB_RX_DISABLE); - - } - } - else - { - /* double buffer */ - - /*clear rx and tx data toggle */ - USB_CLEAR_TXDTS(ept_info->eptn); - USB_CLEAR_RXDTS(ept_info->eptn); - - if(ept_info->inout == DATA_TRANS_IN) - { - /* toggle tx */ - USB_TOGGLE_TXDTS(ept_info->eptn); - - /* set tx and rx status: disable */ - USB_SET_TXSTS(ept_info->eptn, USB_TX_DISABLE); - USB_SET_RXSTS(ept_info->eptn, USB_RX_DISABLE); - } - else - { - /* toggle rx */ - USB_TOGGLE_RXDTS(ept_info->eptn); - - /* set tx and rx status: disable */ - USB_SET_TXSTS(ept_info->eptn, USB_TX_DISABLE); - USB_SET_RXSTS(ept_info->eptn, USB_RX_DISABLE); - } - } -} - -/** - * @brief write data from user memory to usb buffer - * @param pusr_buf: point to user buffer - * @param offset_addr: endpoint tx offset address - * @param nbytes: number of bytes data write to usb buffer - * @retval none - */ -void usb_write_packet(uint8_t *pusr_buf, uint16_t offset_addr, uint16_t nbytes) -{ - /* endpoint tx buffer address */ - __IO uint16_t *d_addr = (__IO uint16_t *)(offset_addr * 2 + g_usb_packet_address); - - uint32_t nhbytes = (nbytes + 1) >> 1; - uint32_t n_index; - uint16_t *pbuf = (uint16_t *)pusr_buf; - for(n_index = 0; n_index < nhbytes; n_index ++) - { -#if defined (__ICCARM__) && (__VER__ < 7000000) - *d_addr++ = *(__packed uint16_t *)pbuf; -#else - *d_addr++ = __UNALIGNED_UINT16_READ(pbuf); -#endif - d_addr ++; - pbuf ++; - } -} - -/** - * @brief read data from usb buffer to user buffer - * @param pusr_buf: point to user buffer - * @param offset_addr: endpoint rx offset address - * @param nbytes: number of bytes data write to usb buffer - * @retval none - */ -void usb_read_packet(uint8_t *pusr_buf, uint16_t offset_addr, uint16_t nbytes) -{ - __IO uint16_t *s_addr = (__IO uint16_t *)(offset_addr * 2 + g_usb_packet_address); - uint32_t nhbytes = (nbytes + 1) >> 1; - uint32_t n_index; - uint16_t *pbuf = (uint16_t *)pusr_buf; - for(n_index = 0; n_index < nhbytes; n_index ++) - { -#if defined (__ICCARM__) && (__VER__ < 7000000) - *(__packed uint16_t *)pbuf = *(__IO uint16_t *)s_addr ++; -#else - __UNALIGNED_UINT16_WRITE(pbuf, *(__IO uint16_t *)s_addr ++); -#endif - s_addr ++; - pbuf ++; - } -} - - -/** - * @brief usb interrupt enable - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @param interrupt: - * this parameter can be any combination of the following values: - * - USB_LSOF_INT - * - USB_SOF_INT - * - USB_RST_INT - * - USB_SP_INT - * - USB_WK_INT - * - USB_BE_INT - * - USB_UCFOR_INT - * - USB_TC_INT - * @param new_state (TRUE or FALSE) - * @retval none - */ -void usb_interrupt_enable(usbd_type *usbx, uint16_t interrupt, confirm_state new_state) -{ - if(new_state == TRUE) - { - usbx->ctrl |= interrupt; - } - else - { - usbx->ctrl &= ~interrupt; - } -} - -/** - * @brief set the host assignment address - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @param address: host assignment address - * @retval none - */ -void usb_set_address(usbd_type *usbx, uint8_t address) -{ - usbx->devaddr_bit.addr = address; - usbx->devaddr_bit.cen = TRUE; -} - -/** - * @brief set endpoint tx or rx status to stall - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @param ept_info: endpoint information structure - * @retval none - */ -void usb_ept_stall(usbd_type *usbx, usb_ept_info *ept_info) -{ - if(ept_info->inout == DATA_TRANS_IN) - { - USB_SET_TXSTS(ept_info->eptn, USB_TX_STALL) - } - else - { - USB_SET_RXSTS(ept_info->eptn, USB_RX_STALL) - } -} - -/** - * @brief usb device enter suspend mode - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @retval none - */ -void usb_enter_suspend(usbd_type *usbx) -{ - usbx->ctrl_bit.ssp = TRUE; - usbx->ctrl_bit.lpm = TRUE; -} - -/** - * @brief usb device exit suspend mode - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @retval none - */ -void usb_exit_suspend(usbd_type *usbx) -{ - usbx->ctrl_bit.ssp = FALSE; - usbx->ctrl_bit.lpm = FALSE; -} - -/** - * @brief usb remote wakeup set - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @retval none - */ -void usb_remote_wkup_set(usbd_type *usbx) -{ - usbx->ctrl_bit.gresume = TRUE; -} - -/** - * @brief usb remote wakeup clear - * @param usbx: to select the usb peripheral. - * parameter as following values: USB - * @retval none - */ -void usb_remote_wkup_clear(usbd_type *usbx) -{ - usbx->ctrl_bit.gresume = FALSE; -} - -/** - * @brief usb auto malloc endpoint buffer - * @param mapacket: endpoint support max packet size - * @retval none - */ -uint16_t usb_buffer_malloc(uint16_t maxpacket) -{ - uint16_t offset = g_usb_offset_addr; - g_usb_offset_addr += maxpacket; - return offset; -} - -/** - * @brief free usb endpoint buffer - * @param none - * @retval none - */ -void usb_buffer_free(void) -{ - g_usb_offset_addr = USB_ENDP_DESC_TABLE_OFFSET; -} - -/** - * @brief get flag of usb. - * @param usbx: select the usb peripheral - * @param flag: select the usb flag - * this parameter can be one of the following values: - * - USB_INOUT_FLAG - * - USB_LSOF_FLAG - * - USB_SOF_FLAG - * - USB_RST_FLAG - * - USB_SP_FLAG - * - USB_WK_FLAG - * - USB_BE_FLAG - * - USB_UCFOR_FLAG - * - USB_TC_FLAG - * @retval none - */ -flag_status usb_flag_get(usbd_type *usbx, uint16_t flag) -{ - flag_status status = RESET; - - if((usbx->intsts & flag) == RESET) - { - status = RESET; - } - else - { - status = SET; - } - return status; -} - -/** - * @brief clear flag of usb. - * @param usbx: select the usb peripheral - * @param flag: select the usb flag - * this parameter can be one of the following values: - * - USB_INOUT_FLAG - * - USB_LSOF_FLAG - * - USB_SOF_FLAG - * - USB_RST_FLAG - * - USB_SP_FLAG - * - USB_WK_FLAG - * - USB_BE_FLAG - * - USB_UCFOR_FLAG - * - USB_TC_FLAG - * @retval none - */ -void usb_flag_clear(usbd_type *usbx, uint16_t flag) -{ - usbx->intsts = ~flag; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_wdt.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_wdt.c deleted file mode 100644 index 782123f..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_wdt.c +++ /dev/null @@ -1,145 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_wdt.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the wdt firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup WDT - * @brief WDT driver modules - * @{ - */ - -#ifdef WDT_MODULE_ENABLED - -/** @defgroup WDT_private_functions - * @{ - */ - -/** - * @brief wdt enable ,the reload value will be sent to the counter - * @param none - * @retval none - */ -void wdt_enable(void) -{ - WDT->cmd = WDT_CMD_ENABLE; -} - -/** - * @brief reload wdt counter - * @param none - * @retval none - */ -void wdt_counter_reload(void) -{ - WDT->cmd = WDT_CMD_RELOAD; -} - -/** - * @brief set wdt counter reload value - * @param reload_value (0x0000~0x0FFF) - * @retval none - */ -void wdt_reload_value_set(uint16_t reload_value) -{ - WDT->rld = reload_value; -} - -/** - * @brief set wdt division divider - * @param division - * this parameter can be one of the following values: - * - WDT_CLK_DIV_4 - * - WDT_CLK_DIV_8 - * - WDT_CLK_DIV_16 - * - WDT_CLK_DIV_32 - * - WDT_CLK_DIV_64 - * - WDT_CLK_DIV_128 - * - WDT_CLK_DIV_256 - * @retval none - */ -void wdt_divider_set(wdt_division_type division) -{ - WDT->div_bit.div = division; -} - -/** - * @brief enable or disable wdt cmd register write - * @param new_state (TRUE or FALSE) - * @retval none - */ -void wdt_register_write_enable( confirm_state new_state) -{ - if(new_state == FALSE) - { - WDT->cmd = WDT_CMD_LOCK; - } - else - { - WDT->cmd = WDT_CMD_UNLOCK; - } -} - -/** - * @brief get wdt flag - * @param wdt_flag - * this parameter can be one of the following values: - * - WDT_DIVF_UPDATE_FLAG: division value update complete flag. - * - WDT_RLDF_UPDATE_FLAG: reload value update complete flag. - * @retval state of wdt flag - */ -flag_status wdt_flag_get(uint16_t wdt_flag) -{ - flag_status status = RESET; - - if ((WDT->sts & wdt_flag) != (uint16_t)RESET) - { - status = SET; - } - else - { - status = RESET; - } - - return status; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_wwdt.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_wwdt.c deleted file mode 100644 index 8b54385..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_wwdt.c +++ /dev/null @@ -1,141 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_wwdt.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the wwdt firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup WWDT - * @brief WWDT driver modules - * @{ - */ - -#ifdef WWDT_MODULE_ENABLED - -/** @defgroup WWDT_private_functions - * @{ - */ - -/** - * @brief wwdt reset by crm reset register - * @retval none - */ -void wwdt_reset(void) -{ - crm_periph_reset(CRM_WWDT_PERIPH_RESET, TRUE); - crm_periph_reset(CRM_WWDT_PERIPH_RESET, FALSE); -} - -/** - * @brief wwdt division set - * @param division - * this parameter can be one of the following values: - * - WWDT_PCLK1_DIV_4096 (wwdt counter clock = (pclk1/4096)/1) - * - WWDT_PCLK1_DIV_8192 (wwdt counter clock = (pclk1/4096)/2) - * - WWDT_PCLK1_DIV_16384 (wwdt counter clock = (pclk1/4096)/4) - * - WWDT_PCLK1_DIV_32768 (wwdt counter clock = (pclk1/4096)/8) - * @retval none - */ -void wwdt_divider_set(wwdt_division_type division) -{ - WWDT->cfg_bit.div = division; -} - -/** - * @brief wwdt reload counter interrupt flag clear - * @param none - * @retval none - */ -void wwdt_flag_clear(void) -{ - WWDT->sts = 0; -} - -/** - * @brief wwdt enable and the counter value load - * @param wwdt_cnt (0x40~0x7f) - * @retval none - */ -void wwdt_enable(uint8_t wwdt_cnt) -{ - WWDT->ctrl = wwdt_cnt | WWDT_EN_BIT; -} - -/** - * @brief wwdt reload counter interrupt enable - * @param none - * @retval none - */ -void wwdt_interrupt_enable(void) -{ - WWDT->cfg_bit.rldien = TRUE; -} - -/** - * @brief wwdt reload counter interrupt flag get - * @param none - * @retval state of reload counter interrupt flag - */ -flag_status wwdt_flag_get(void) -{ - return (flag_status)WWDT->sts_bit.rldf; -} - -/** - * @brief wwdt counter value set - * @param wwdt_cnt (0x40~0x7f) - * @retval none - */ -void wwdt_counter_set(uint8_t wwdt_cnt) -{ - WWDT->ctrl_bit.cnt = wwdt_cnt; -} - -/** - * @brief wwdt window counter value set - * @param window_cnt (0x40~0x7f) - * @retval none - */ -void wwdt_window_counter_set(uint8_t window_cnt) -{ - WWDT->cfg_bit.win = window_cnt; -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_xmc.c b/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_xmc.c deleted file mode 100644 index 6b215e9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/AT32F403A/drivers/src/at32f403a_407_xmc.c +++ /dev/null @@ -1,508 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_xmc.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief contains all the functions for the xmc firmware library - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -#include "at32f403a_407_conf.h" - -/** @addtogroup AT32F403A_407_periph_driver - * @{ - */ - -/** @defgroup XMC - * @brief XMC driver modules - * @{ - */ - -#ifdef XMC_MODULE_ENABLED - -/** @defgroup XMC_private_functions - * @{ - */ - -/** - * @brief xmc nor or sram registers reset - * @param xmc_subbank - * this parameter can be one of the following values: - * - XMC_BANK1_NOR_SRAM1 - * - XMC_BANK1_NOR_SRAM4 - * @retval none - */ -void xmc_nor_sram_reset(xmc_nor_sram_subbank_type xmc_subbank) -{ - /* XMC_BANK1_NORSRAM1 */ - if(xmc_subbank == XMC_BANK1_NOR_SRAM1) - { - XMC_BANK1->ctrl_tmg_group[xmc_subbank].bk1ctrl = 0x000030DB; - } - /* XMC_BANK1_NORSRAM2, XMC_BANK1_NORSRAM3 or XMC_BANK1_NORSRAM4 */ - else - { - XMC_BANK1->ctrl_tmg_group[xmc_subbank].bk1ctrl = 0x000030D2; - } - XMC_BANK1->ctrl_tmg_group[xmc_subbank].bk1tmg = 0x0FFFFFFF; - XMC_BANK1->tmgwr_group[xmc_subbank].bk1tmgwr = 0x0FFFFFFF; -} - -/** - * @brief initialize the xmc nor/sram banks according to the specified - * parameters in the xmc_norsraminitstruct. - * @param xmc_norsram_init_struct : pointer to a xmc_norsram_init_type - * structure that contains the configuration information for - * the xmc nor/sram specified banks. - * @retval none - */ -void xmc_nor_sram_init(xmc_norsram_init_type* xmc_norsram_init_struct) -{ - /* bank1 nor/sram control register configuration */ - XMC_BANK1->ctrl_tmg_group[xmc_norsram_init_struct->subbank].bk1ctrl = - (uint32_t)xmc_norsram_init_struct->data_addr_multiplex | - xmc_norsram_init_struct->device | - xmc_norsram_init_struct->bus_type | - xmc_norsram_init_struct->burst_mode_enable | - xmc_norsram_init_struct->asynwait_enable | - xmc_norsram_init_struct->wait_signal_lv | - xmc_norsram_init_struct->wrapped_mode_enable | - xmc_norsram_init_struct->wait_signal_config | - xmc_norsram_init_struct->write_enable | - xmc_norsram_init_struct->wait_signal_enable | - xmc_norsram_init_struct->write_timing_enable | - xmc_norsram_init_struct->write_burst_syn; - - /* if nor flash device */ - if(xmc_norsram_init_struct->device == XMC_DEVICE_NOR) - { - XMC_BANK1->ctrl_tmg_group[xmc_norsram_init_struct->subbank].bk1ctrl_bit.noren = 0x1; - } -} - -/** - * @brief initialize the xmc nor/sram banks according to the specified - * parameters in the xmc_rw_timing_struct and xmc_w_timing_struct. - * @param xmc_rw_timing_struct : pointer to a xmc_norsram_timing_init_type - * structure that contains the configuration information for - * the xmc nor/sram specified banks. - * @param xmc_w_timing_struct : pointer to a xmc_norsram_timing_init_type - * structure that contains the configuration information for - * the xmc nor/sram specified banks. - * @retval none - */ -void xmc_nor_sram_timing_config(xmc_norsram_timing_init_type* xmc_rw_timing_struct, - xmc_norsram_timing_init_type* xmc_w_timing_struct) -{ - /* bank1 nor/sram timing register configuration */ - XMC_BANK1->ctrl_tmg_group[xmc_rw_timing_struct->subbank].bk1tmg = - (uint32_t)xmc_rw_timing_struct->addr_setup_time | - (xmc_rw_timing_struct->addr_hold_time << 4) | - (xmc_rw_timing_struct->data_setup_time << 8) | - (xmc_rw_timing_struct->bus_latency_time <<16) | - (xmc_rw_timing_struct->clk_psc << 20) | - (xmc_rw_timing_struct->data_latency_time << 24) | - xmc_rw_timing_struct->mode; - - /* bank1 nor/sram timing register for write configuration, if extended mode is used */ - if(xmc_rw_timing_struct->write_timing_enable == XMC_WRITE_TIMING_ENABLE) - { - XMC_BANK1->tmgwr_group[xmc_w_timing_struct->subbank].bk1tmgwr = - (uint32_t)xmc_w_timing_struct->addr_setup_time | - (xmc_w_timing_struct->addr_hold_time << 4) | - (xmc_w_timing_struct->data_setup_time << 8) | - (xmc_w_timing_struct->bus_latency_time << 16) | - (xmc_w_timing_struct->clk_psc << 20) | - (xmc_w_timing_struct->data_latency_time << 24) | - xmc_w_timing_struct->mode; - } - else - { - XMC_BANK1->tmgwr_group[xmc_w_timing_struct->subbank].bk1tmgwr = 0x0FFFFFFF; - } -} - -/** - * @brief fill each xmc_nor_sram_init_struct member with its default value. - * @param xmc_nor_sram_init_struct: pointer to a xmc_norsram_init_type - * structure which will be initialized. - * @retval none - */ -void xmc_norsram_default_para_init(xmc_norsram_init_type* xmc_nor_sram_init_struct) -{ - /* reset nor/sram init structure parameters values */ - xmc_nor_sram_init_struct->subbank = XMC_BANK1_NOR_SRAM1; - xmc_nor_sram_init_struct->data_addr_multiplex = XMC_DATA_ADDR_MUX_ENABLE; - xmc_nor_sram_init_struct->device = XMC_DEVICE_SRAM; - xmc_nor_sram_init_struct->bus_type = XMC_BUSTYPE_8_BITS; - xmc_nor_sram_init_struct->burst_mode_enable = XMC_BURST_MODE_DISABLE; - xmc_nor_sram_init_struct->asynwait_enable = XMC_ASYN_WAIT_DISABLE; - xmc_nor_sram_init_struct->wait_signal_lv = XMC_WAIT_SIGNAL_LEVEL_LOW; - xmc_nor_sram_init_struct->wrapped_mode_enable = XMC_WRAPPED_MODE_DISABLE; - xmc_nor_sram_init_struct->wait_signal_config = XMC_WAIT_SIGNAL_SYN_BEFORE; - xmc_nor_sram_init_struct->write_enable = XMC_WRITE_OPERATION_ENABLE; - xmc_nor_sram_init_struct->wait_signal_enable = XMC_WAIT_SIGNAL_ENABLE; - xmc_nor_sram_init_struct->write_timing_enable = XMC_WRITE_TIMING_DISABLE; - xmc_nor_sram_init_struct->write_burst_syn = XMC_WRITE_BURST_SYN_DISABLE; -} - -/** - * @brief fill each xmc_rw_timing_struct and xmc_w_timing_struct member with its default value. - * @param xmc_rw_timing_struct: pointer to a xmc_norsram_timing_init_type - * structure which will be initialized. - * @param xmc_w_timing_struct: pointer to a xmc_norsram_timing_init_type - * structure which will be initialized. - * @retval none - */ -void xmc_norsram_timing_default_para_init(xmc_norsram_timing_init_type* xmc_rw_timing_struct, - xmc_norsram_timing_init_type* xmc_w_timing_struct) -{ - xmc_rw_timing_struct->subbank = XMC_BANK1_NOR_SRAM1; - xmc_rw_timing_struct->write_timing_enable = XMC_WRITE_TIMING_DISABLE; - xmc_rw_timing_struct->addr_setup_time = 0xF; - xmc_rw_timing_struct->addr_hold_time = 0xF; - xmc_rw_timing_struct->data_setup_time = 0xFF; - xmc_rw_timing_struct->bus_latency_time = 0xF; - xmc_rw_timing_struct->clk_psc = 0xF; - xmc_rw_timing_struct->data_latency_time = 0xF; - xmc_rw_timing_struct->mode = XMC_ACCESS_MODE_A; - xmc_w_timing_struct->subbank = XMC_BANK1_NOR_SRAM1; - xmc_w_timing_struct->write_timing_enable = XMC_WRITE_TIMING_DISABLE; - xmc_w_timing_struct->addr_setup_time = 0xF; - xmc_w_timing_struct->addr_hold_time = 0xF; - xmc_w_timing_struct->data_setup_time = 0xFF; - xmc_w_timing_struct->bus_latency_time = 0xF; - xmc_w_timing_struct->clk_psc = 0xF; - xmc_w_timing_struct->data_latency_time = 0xF; - xmc_w_timing_struct->mode = XMC_ACCESS_MODE_A; -} - -/** - * @brief enable or disable the specified nor/sram memory bank. - * @param xmc_subbank - * this parameter can be one of the following values: - * - XMC_BANK1_NOR_SRAM1 - * - XMC_BANK1_NOR_SRAM4 - * @param new_state (TRUE or FALSE) - * @retval none - */ -void xmc_nor_sram_enable(xmc_nor_sram_subbank_type xmc_subbank, confirm_state new_state) -{ - XMC_BANK1->ctrl_tmg_group[xmc_subbank].bk1ctrl_bit.en = new_state; -} - -/** - * @brief config the bus turnaround phase. - * @param xmc_sub_bank - * this parameter can be one of the following values: - * - XMC_BANK1_NOR_SRAM1 - * - XMC_BANK1_NOR_SRAM4 - * @param w2w_timing :write timing - * @param r2r_timing :read timing - * @retval none - */ -void xmc_ext_timing_config(xmc_nor_sram_subbank_type xmc_sub_bank, uint16_t w2w_timing, uint16_t r2r_timing) -{ - XMC_BANK1->ext_bit[xmc_sub_bank].buslatr2r = r2r_timing<<8; - XMC_BANK1->ext_bit[xmc_sub_bank].buslatw2w = w2w_timing; -} - -/** - * @brief xmc nand flash registers reset - * @param xmc_bank - * this parameter can be one of the following values: - * - XMC_BANK2_NAND - * @retval none - */ -void xmc_nand_reset(xmc_class_bank_type xmc_bank) -{ - /* set the XMC_BANK2_NAND registers to their reset values */ - if(xmc_bank == XMC_BANK2_NAND) - { - XMC_BANK2->bk2ctrl = 0x00000018; - XMC_BANK2->bk2is = 0x00000040; - XMC_BANK2->bk2tmgatt = 0xFCFCFCFC; - XMC_BANK2->bk2tmgmem = 0xFCFCFCFC; - } -} - -/** - * @brief initialize the xmc nand banks according to the specified - * parameters in the xmc_nandinitstruct. - * @param xmc_nand_init_struct : pointer to a xmc_nand_init_type - * structure that contains the configuration information for the xmc - * nand specified banks. - * @retval none - */ -void xmc_nand_init(xmc_nand_init_type* xmc_nand_init_struct) -{ - uint32_t tempctrl = 0x0; - - /* Set the tempctrl value according to xmc_nand_init_struct parameters */ - tempctrl = (uint32_t)xmc_nand_init_struct->wait_enable | - xmc_nand_init_struct->bus_type | - xmc_nand_init_struct->ecc_enable | - xmc_nand_init_struct->ecc_pagesize | - (xmc_nand_init_struct->delay_time_cycle << 9) | - (xmc_nand_init_struct->delay_time_ar << 13) | - 0x00000008; - - /* xmc_bank2_nand registers configuration */ - if(xmc_nand_init_struct->nand_bank == XMC_BANK2_NAND) - { - XMC_BANK2->bk2ctrl = tempctrl; - } -} - -/** - * @brief initialize the xmc nand banks according to the specified - * parameters in the xmc_nandinitstruct. - * @param xmc_regular_spacetiming_struct : pointer to a xmc_nand_timinginit_type - * structure that contains the configuration information for the xmc - * nand specified banks. - * @param xmc_special_spacetiming_struct : pointer to a xmc_nand_timinginit_type - * structure that contains the configuration information for the xmc - * nand specified banks. - * @retval none - */ -void xmc_nand_timing_config(xmc_nand_timinginit_type* xmc_regular_spacetiming_struct, - xmc_nand_timinginit_type* xmc_special_spacetiming_struct) -{ - uint32_t tempmem = 0x0, tempatt = 0x0; - - /* set the tempmem value according to xmc_nand_init_struct parameters */ - tempmem = (uint32_t)xmc_regular_spacetiming_struct->mem_setup_time | - (xmc_regular_spacetiming_struct->mem_waite_time << 8) | - (xmc_regular_spacetiming_struct->mem_hold_time << 16) | - (xmc_regular_spacetiming_struct->mem_hiz_time << 24); - - /* set the tempatt value according to xmc_nand_init_struct parameters */ - tempatt = (uint32_t)xmc_special_spacetiming_struct->mem_setup_time | - (xmc_special_spacetiming_struct->mem_waite_time << 8) | - (xmc_special_spacetiming_struct->mem_hold_time << 16) | - (xmc_special_spacetiming_struct->mem_hiz_time << 24); - /* xmc_bank2_nand registers configuration */ - if(xmc_regular_spacetiming_struct->class_bank == XMC_BANK2_NAND) - { - XMC_BANK2->bk2tmgatt = tempatt; - XMC_BANK2->bk2tmgmem = tempmem; - } -} - -/** - * @brief fill each xmc_nand_init_struct member with its default value. - * @param xmc_nand_init_struct: pointer to a xmc_nand_init_type - * structure which will be initialized. - * @retval none - */ -void xmc_nand_default_para_init(xmc_nand_init_type* xmc_nand_init_struct) -{ - /* reset nand init structure parameters values */ - xmc_nand_init_struct->nand_bank = XMC_BANK2_NAND; - xmc_nand_init_struct->wait_enable = XMC_WAIT_OPERATION_DISABLE; - xmc_nand_init_struct->bus_type = XMC_BUSTYPE_8_BITS; - xmc_nand_init_struct->ecc_enable = XMC_ECC_OPERATION_DISABLE; - xmc_nand_init_struct->ecc_pagesize = XMC_ECC_PAGESIZE_256_BYTES; - xmc_nand_init_struct->delay_time_cycle = 0x0; - xmc_nand_init_struct->delay_time_ar = 0x0; -} - -/** - * @brief fill each xmc_common_spacetiming_struct and xmc_attribute_spacetiming_struct member with its default value. - * @param xmc_common_spacetiming_struct: pointer to a xmc_nand_timinginit_type - * structure which will be initialized. - * @param xmc_special_spacetiming_struct: pointer to a xmc_nand_timinginit_type - * structure which will be initialized. - * @retval none - */ -void xmc_nand_timing_default_para_init(xmc_nand_timinginit_type* xmc_regular_spacetiming_struct, - xmc_nand_timinginit_type* xmc_special_spacetiming_struct) -{ - xmc_regular_spacetiming_struct->class_bank = XMC_BANK2_NAND; - xmc_regular_spacetiming_struct->mem_hold_time = 0xFC; - xmc_regular_spacetiming_struct->mem_waite_time = 0xFC; - xmc_regular_spacetiming_struct->mem_setup_time = 0xFC; - xmc_regular_spacetiming_struct->mem_hiz_time = 0xFC; - xmc_special_spacetiming_struct->class_bank = XMC_BANK2_NAND; - xmc_special_spacetiming_struct->mem_hold_time = 0xFC; - xmc_special_spacetiming_struct->mem_waite_time = 0xFC; - xmc_special_spacetiming_struct->mem_setup_time = 0xFC; - xmc_special_spacetiming_struct->mem_hiz_time = 0xFC; -} - -/** - * @brief enable or disable the specified nand memory bank. - * @param xmc_bank: specifies the xmc bank to be used - * this parameter can be one of the following values: - * - XMC_BANK2_NAND - * @param new_state (TRUE or FALSE) - * @retval none - */ -void xmc_nand_enable(xmc_class_bank_type xmc_bank, confirm_state new_state) -{ - /* enable or disable the nand bank2 by setting the en bit in the bk2ctrl register */ - if(xmc_bank == XMC_BANK2_NAND) - { - XMC_BANK2->bk2ctrl_bit.en = new_state; - } -} - -/** - * @brief enable or disable the xmc nand ecc feature. - * @param xmc_bank: specifies the xmc bank to be used - * this parameter can be one of the following values: - * - XMC_BANK2_NAND - * @param new_state (TRUE or FALSE) - * @retval none - */ -void xmc_nand_ecc_enable(xmc_class_bank_type xmc_bank, confirm_state new_state) -{ - /* enable the selected nand bank2 ecc function by setting the eccen bit in the bk2ctrl register */ - if(xmc_bank == XMC_BANK2_NAND) - { - XMC_BANK2->bk2ctrl_bit.eccen = new_state; - } -} - -/** - * @brief return the error correction code register value. - * @param xmc_bank: specifies the xmc bank to be used - * this parameter can be one of the following values: - * - XMC_BANK2_NAND - * @retval the error correction code (ecc) value. - */ -uint32_t xmc_ecc_get(xmc_class_bank_type xmc_bank) -{ - uint32_t eccvaule = 0x0; - - /* get the bk2ecc register value */ - if(xmc_bank == XMC_BANK2_NAND) - { - eccvaule = XMC_BANK2->bk2ecc; - } - - /* return the error correction code value */ - return eccvaule; -} - -/** - * @brief enable or disable the specified xmc interrupts. - * @param xmc_bank: specifies the xmc bank to be used - * this parameter can be one of the following values: - * - XMC_BANK2_NAND - * @param xmc_int: specifies the xmc interrupt sources to be enabled or disabled. - * this parameter can be any combination of the following values: - * - XMC_INT_RISING_EDGE - * - XMC_INT_LEVEL - * - XMC_INT_FALLING_EDGE - * @param new_state (TRUE or FALSE) - * @retval none - */ -void xmc_interrupt_enable(xmc_class_bank_type xmc_bank, xmc_interrupt_sources_type xmc_int, confirm_state new_state) -{ - if(new_state != FALSE) - { - /* enable the selected xmc_bank2 interrupts */ - if(xmc_bank == XMC_BANK2_NAND) - { - XMC_BANK2->bk2is |= xmc_int; - } - } - else - { - /* disable the selected xmc_bank2 interrupts */ - if(xmc_bank == XMC_BANK2_NAND) - { - XMC_BANK2->bk2is &= ~xmc_int; - } - } -} - -/** - * @brief check whether the specified xmc flag is set or not. - * @param xmc_bank: specifies the xmc bank to be used - * this parameter can be one of the following values: - * - XMC_BANK2_NAND - * @param xmc_flag: specifies the flag to check. - * this parameter can be any combination of the following values: - * - XMC_RISINGEDGE_FLAG - * - XMC_LEVEL_FLAG - * - XMC_FALLINGEDGE_FLAG - * - XMC_FEMPT_FLAG - * @retval none - */ -flag_status xmc_flag_status_get(xmc_class_bank_type xmc_bank, xmc_interrupt_flag_type xmc_flag) -{ - flag_status status = RESET; - uint32_t temp = 0; - - if(xmc_bank == XMC_BANK2_NAND) - { - temp = XMC_BANK2->bk2is; - } - /* get the flag status */ - if((temp & xmc_flag) == RESET) - { - status = RESET; - } - else - { - status = SET; - } - /* return the flag status */ - return status; -} - -/** - * @brief clear the xmc's pending flags. - * @param xmc_bank: specifies the xmc bank to be used - * this parameter can be one of the following values: - * - XMC_BANK2_NAND - * @param xmc_flag: specifies the flag to check. - * this parameter can be any combination of the following values: - * - XMC_RISINGEDGE_FLAG - * - XMC_LEVEL_FLAG - * - XMC_FALLINGEDGE_FLAG - * - XMC_FEMPT_FLAG - * @retval none - */ -void xmc_flag_clear(xmc_class_bank_type xmc_bank, xmc_interrupt_flag_type xmc_flag) -{ - __IO uint32_t int_state; - if(xmc_bank == XMC_BANK2_NAND) - { - int_state = XMC_BANK2->bk2is & 0x38; /* keep interrupt state */ - XMC_BANK2->bk2is = (~(xmc_flag | 0x38) | int_state); - } -} - -/** - * @} - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/Epaper/bmp.h b/Example/EpaperModuleTest_AT32F403A/Epaper/bmp.h deleted file mode 100644 index bd22f80..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Epaper/bmp.h +++ /dev/null @@ -1,638 +0,0 @@ -#ifndef __BMP_H -#define __BMP_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -////////////////array///////////////////////////////////////////////////////////////////////////////////// -const unsigned char gImage_1[4000] = { /* 0X01,0X01,0XFA,0X00,0X7A,0X00, */ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x0E,0x07,0x07, -0x07,0xDF,0xFE,0xFE,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x3C,0x1E,0xFE, -0xFE,0xFE,0x00,0x00,0x00,0x0C,0x0E,0x0F,0x07,0x07,0x87,0xFF,0xFE,0xFC,0x00,0x00, -0x18,0x1F,0x1F,0x0F,0x00,0x00,0x18,0x1F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0xF0, -0xF0,0xF0,0x70,0x30,0x30,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x60,0x70,0x70,0x30,0x30, -0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xF0, -0xE0,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x70,0x30,0x70,0xF0,0xF0,0xE0,0x80,0x00,0x00, -0xF0,0xF0,0xF0,0xF0,0x70,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, -0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00, -0x80,0xE0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0xC0,0xE0,0xF0, -0x70,0x30,0x70,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00, -0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0x3E,0x1F,0x0F,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0x80,0x02,0x03,0x03,0x07,0xCF,0xFF,0xFC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0x00,0xE0,0xF8,0xFC,0xBC,0x0C,0x0C,0x8C,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0xC1,0xFF,0xFF,0x7F,0x00,0x1C,0xFF,0xFF, -0xFF,0x0C,0x0C,0x0C,0x0C,0x8F,0x8F,0x0F,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x0F,0xFF,0xFF, -0xFE,0xFF,0x1F,0x01,0x7F,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x80,0x00,0x00, -0x00,0xE3,0xFF,0xFF,0x3E,0x00,0x1C,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x80,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xCD,0x0C,0x0C,0x0C,0x0D,0x8F, -0x8F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x06,0x07,0x07, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x03, -0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x06,0x00,0x00,0x00,0xFF,0xFF,0x07,0x07, -0x06,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07, -0x03,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x07, -0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00, -0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x03, -0x07,0x07,0x06,0x07,0x03,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x07,0x07,0x06,0x06, -0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00, -0xF8,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x7F,0x03, -0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFF,0xFF,0x7F,0xFF,0xFE,0xE0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0, -0xC0,0xC0,0xC0,0x80,0x00,0x00,0xC0,0xC0,0xC0,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFE, -0xFF,0x0F,0x07,0x07,0x07,0x07,0x07,0x0F,0x1F,0x1E,0x0C,0x00,0x00,0x00,0xC0,0xC0, -0xFE,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0x00,0x00,0xC3,0xC3,0xC3,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80, -0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0xC0,0xFE,0xFF,0x7F,0x03,0x03,0x7F,0xFF, -0xFE,0xC0,0x00,0x00,0xF8,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF, -0x8F,0x83,0x81,0x81,0x81,0x81,0x87,0xBF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00, -0xC0,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x07,0x3F,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00, -0x00,0x00,0xF8,0xFE,0xFF,0x3F,0x07,0x03,0x01,0x01,0x01,0x03,0x03,0x03,0x01,0x00, -0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3E,0x3C,0x78,0x78,0x78, -0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01, -0x01,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x1F,0x07,0x03,0x01, -0x01,0x01,0x03,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0x1F,0x07,0x03,0x01,0x01,0x01,0x03, -0x07,0xFF,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF, -0xFF,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF8,0xFE,0xFF,0xFF, -0x07,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xC3,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x83,0x03,0x03,0x00,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0x0F,0x0E,0x0E,0x0E, -0x0E,0x0E,0x0E,0x0F,0x3F,0xFF,0xFF,0xF0,0x80,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF0, -0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x7E, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x80,0xC0,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x7F,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0xFE,0xFF,0xFF,0x3F,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x07,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x00,0x00, -0x00,0x0E,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, -0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F, -0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x0F,0x06, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x04,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E, -0x0E,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x07,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00, -0x00,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0xC0, -0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0, -0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x80,0x00,0x00, -0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x80, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0E,0x0F, -0x07,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0xC1,0xFF,0xFF,0x7F, -0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x1C,0x7C,0xFC,0xF0,0xC0,0xF0,0xFC,0x7C,0x1C,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0xFF, -0xFF,0xFF,0x61,0x61,0xE1,0xE1,0xC1,0x80,0x00,0x00,0xFC,0xFF,0xFF,0x07,0x01,0x01, -0x03,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x7F,0xFC,0xF0,0xC0,0x00,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0xF0,0xF8,0xFE,0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xE0,0xF0,0xF8,0xFE,0xDF,0xCF,0xC3,0xC1,0xC0,0x00,0xC0,0xE0,0xF8,0xFC,0xFE, -0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x7F, -0x1F,0x0F,0x3F,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF8, -0xFC,0xFE,0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0xE0,0xE0,0xE0,0xC0,0x80,0xC0,0xE0,0xFF, -0xFF,0x3F,0x00,0x00,0x1F,0x7F,0xFF,0xF0,0xC0,0xC0,0xE0,0xFF,0xFF,0x3F,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0, -0xC0,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0, -0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x03,0x0F,0x7F,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03, -0x07,0x1F,0x3F,0xFC,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01, -0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; -const unsigned char gImage_2[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_3[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x1F,0x1F,0x0F,0x0F,0x9F,0xFF,0xFF,0xFE,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x78,0x7C,0x7E,0x3E,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x04,0x0E,0x1E,0x1F,0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x73,0x7F,0x3F,0x1F,0x0F,0x00,0x00,0x31,0x7B,0x7F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x07,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x30,0xF0,0xF0,0xF0,0x78,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0xF8,0x78,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xC0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF0,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0x70,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFE,0xFF,0xBF,0x9F,0x87,0x83,0x80,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0xC0,0xC0,0xC0,0xC7,0x87,0x87,0xCF,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x80,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x40,0xF8,0xFC,0xFC,0xFE,0xFE,0x9E,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9D,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE1,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x1C,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9C,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF0,0xF8,0xFC,0x7C,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x18,0x3C,0x3E,0x3E,0x1E,0x1E,0x3E,0xFE,0xFE,0xFC,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x9E,0x9E,0x9E,0x9E,0x1E,0x1E,0x00,0x00,0xE0,0xF8,0xFC,0xFE,0xFE,0x7E,0x1E,0x3E,0xFE,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xE0,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xC0,0xE0,0xF8,0xFC,0xFE,0xFE,0x3E,0x1E,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xFC,0xFF,0x7F,0x3F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x87,0x87,0x87,0x87,0x07,0x07,0x8F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x7F,0xFF,0xFF,0xFF,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0F,0x0F,0x0F,0x0F,0x0F,0x01,0x01,0x07,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x01,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x01,0x03,0x0F,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_4[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00, -0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE, -0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00, -0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80, -0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0, -0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30, -0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80, -0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF, -0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, -0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF, -0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF, -0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0, -0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F, -0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC, -0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF, -0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F, -0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80, -0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F, -0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F, -0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F, -0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F, -0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F, -0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00, -0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00, -0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F, -0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E, -0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_5[1600]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00, -0x00,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0, -0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF0, -0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFE, -0xE0,0x00,0x00,0x80,0xFC,0xFF,0xFF,0xFF,0x3F,0x01,0x00,0xC0,0xF0,0xF8,0xF8,0xFC, -0x7C,0x3C,0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x80,0xF0,0xFE, -0xFF,0xFF,0x3F,0x07,0x3F,0xFF,0xFF,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0xF8,0xF8,0xFC,0x7C,0x3C,0x3C,0x7C,0x7C,0x7C,0x78,0x38,0x78,0x7C,0xFF,0xFF, -0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F, -0xFF,0xFF,0xFF,0xFF,0xF1,0xE1,0xC0,0xC0,0xC1,0x81,0x83,0x03,0x03,0x01,0x00,0x78, -0x78,0xFC,0xFF,0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0xFC,0xFC,0xFC,0xFC, -0xFC,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,0xC0,0xF0, -0xF8,0xF8,0xFC,0xFC,0x7C,0x3C,0x3C,0x7C,0x78,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xF8,0xFC,0x7C,0x3C, -0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFE,0xF0,0xFF, -0xFF,0xFF,0x1F,0x01,0x00,0x07,0x7F,0xFF,0xFF,0xFE,0xE0,0xFF,0xFF,0xFF,0xFF,0x07, -0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x9E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F, -0x1F,0x1F,0x00,0xE0,0xFC,0xFF,0xFF,0xFF,0x3F,0x3D,0x3C,0x3C,0x3C,0x3F,0x3F,0xFF, -0xFF,0xFF,0xFC,0xE0,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC1,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x81,0x01,0x03,0x03,0x07,0x07,0x0F, -0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC3,0x00,0x00,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x07, -0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x1F, -0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0E,0x18,0x1F,0x1F,0x1F,0x1F,0x07,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x18,0x03,0x07, -0x0F,0x0F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0E,0x00,0x00,0x03,0x0F, -0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x18,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x0F, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0F,0x07,0x01,0x00, -0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1C,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00, -0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x1F,0x1F,0x1E, -0x1E,0x1E,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.c b/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.c deleted file mode 100644 index 3565bd2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.c +++ /dev/null @@ -1,938 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "epaper.h" -#include "epdfont.h" - -#include "delay.h" - -// epaper module -// res pin -> pa8 -// busy pin -> pa9 -// d/c pin -> pb14 -// cs pin -> pb12 -// sck pin -> pb13 -// mosi pin -> pb15 - -EPD_PAINT EPD_Paint; - -static uint8_t _hibernating = 1; - -static const unsigned char lut_partial[] = -{ - 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x40, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, -}; - -void epd_delay(uint16_t ms) -{ - delay_ms(ms); -} - -void epd_res_set() -{ - gpio_bits_set(GPIOA, GPIO_PINS_8); -} - -void epd_res_reset() -{ - gpio_bits_reset(GPIOA, GPIO_PINS_8); -} - -void epd_dc_set() -{ - gpio_bits_set(GPIOB, GPIO_PINS_14); -} - -void epd_dc_reset() -{ - gpio_bits_reset(GPIOB, GPIO_PINS_14); -} - -void epd_cs_set() -{ - gpio_bits_set(GPIOB, GPIO_PINS_12); -} - -void epd_cs_reset() -{ - gpio_bits_reset(GPIOB, GPIO_PINS_12); -} - -uint8_t epd_is_busy() -{ - return gpio_input_data_bit_read(GPIOA, GPIO_PINS_9) == RESET ? 0 : 1; -} - -void epd_io_init(void) -{ - gpio_init_type gpio_init_struct; - - /* enable gpioa gpiob clock */ - crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE); - crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE); - - /* set default parameter */ - gpio_default_para_init(&gpio_init_struct); - - /* configure the epaper module res pin */ - gpio_bits_reset(GPIOA, GPIO_PINS_8); - gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; - gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; - gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; - gpio_init_struct.gpio_pins = GPIO_PINS_8; - gpio_init_struct.gpio_pull = GPIO_PULL_NONE; - gpio_init(GPIOA, &gpio_init_struct); - - /* configure the epaper module busy pin */ - gpio_init_struct.gpio_mode = GPIO_MODE_INPUT; - gpio_init_struct.gpio_pull = GPIO_PULL_UP; - gpio_init_struct.gpio_pins = GPIO_PINS_9; - gpio_init(GPIOA, &gpio_init_struct); - - /* configure the epaper module d/c pin */ - gpio_bits_set(GPIOB, GPIO_PINS_14); - gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; - gpio_init_struct.gpio_pull = GPIO_PULL_NONE; - gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; - gpio_init_struct.gpio_pins = GPIO_PINS_14; - gpio_init(GPIOB, &gpio_init_struct); - - /* configure the epaper module spi2 sck pin */ - gpio_init_struct.gpio_pull = GPIO_PULL_NONE; - gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; - gpio_init_struct.gpio_mode = GPIO_MODE_MUX; - gpio_init_struct.gpio_pins = GPIO_PINS_13; - gpio_init(GPIOB, &gpio_init_struct); - - /* configure the epaper module spi2 mosi pin */ - // gpio_init_struct.gpio_pull = GPIO_PULL_NONE; - // gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; - gpio_init_struct.gpio_mode = GPIO_MODE_MUX; - gpio_init_struct.gpio_pins = GPIO_PINS_15; - gpio_init(GPIOB, &gpio_init_struct); - - /* configure the epaper module cs pin */ - gpio_bits_set(GPIOB, GPIO_PINS_12); - gpio_init_struct.gpio_pull = GPIO_PULL_NONE; - gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; - gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; - gpio_init_struct.gpio_pins = GPIO_PINS_12; - gpio_init(GPIOB, &gpio_init_struct); - - /* configure spi2 */ - spi_init_type spi_init_struct; - crm_periph_clock_enable(CRM_SPI2_PERIPH_CLOCK, TRUE); - spi_default_para_init(&spi_init_struct); - spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_TX; - spi_init_struct.master_slave_mode = SPI_MODE_MASTER; - spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_64; - spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB; - spi_init_struct.frame_bit_num = SPI_FRAME_8BIT; - spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_HIGH; - spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE; - spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE; - spi_init(SPI2, &spi_init_struct); - spi_enable(SPI2, TRUE); -} - -void epd_write_reg(uint8_t reg) -{ - epd_dc_reset(); - epd_cs_reset(); - - spi_i2s_data_transmit(SPI2, reg); - while (spi_i2s_flag_get(SPI2, SPI_I2S_BF_FLAG) != RESET) - ; - - epd_cs_set(); - epd_dc_set(); -} - -void epd_write_data(uint8_t data) -{ - epd_cs_reset(); - - spi_i2s_data_transmit(SPI2, data); - while (spi_i2s_flag_get(SPI2, SPI_I2S_BF_FLAG) != RESET) - ; - - epd_cs_set(); -} - -void _epd_write_data(uint8_t data) -{ - while (spi_i2s_flag_get(SPI2, SPI_I2S_TDBE_FLAG) == RESET) - ; - spi_i2s_data_transmit(SPI2, data); -} - -void _epd_write_data_over() -{ - while (spi_i2s_flag_get(SPI2, SPI_I2S_BF_FLAG) != RESET) - ; -} - -uint8_t epd_wait_busy() -{ - uint32_t timeout = 0; - while (epd_is_busy()) - { - timeout++; - if (timeout > 40000) - { - return 1; - } - epd_delay(1); - } - return 0; -} - -void epd_reset(void) -{ - epd_res_reset(); - epd_delay(50); - epd_res_set(); - epd_delay(50); - _hibernating = 0; -} - -uint8_t epd_init(void) -{ - if (_hibernating) - epd_reset(); - - if (epd_wait_busy()) - return 1; - - epd_write_reg(0x12); // SWRESET - - epd_delay(10); - - if (epd_wait_busy()) - return 1; - - #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) - epd_write_reg(0x01); // Driver output control - #if defined(EPD_29) || defined(EPD_213) - epd_write_data(0x27); - epd_write_data(0x01); - epd_write_data(0x01); - #else - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x01); - #endif - - epd_write_reg(0x11); // data entry mode - epd_write_data(0x01); - - #ifdef EPD_154 - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x18); - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x00); - epd_write_data(0x00); - #else - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x0F); // 0x0F-->(15+1)*8=128 - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0x27); // 0x127-->(295+1)=296 - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_data(0x00); - #endif - - epd_write_reg(0x3C); // BorderWavefrom - epd_write_data(0x05); - - #if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x21); // Display update control - epd_write_data(0x00); - epd_write_data(0x80); - #endif - - #elif defined(EPD_42) - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x40); - epd_write_data(0x00); - epd_write_reg(0x01); // Set MUX as 300 - epd_write_data(0x2B); - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x01); - epd_write_reg(0x11); // data entry mode - epd_write_data(0x03); // X-mode - epd_address_set(0,0,EPD_W-1,EPD_H-1); - #endif - - epd_write_reg(0x18); // Read built-in temperature sensor - epd_write_data(0x80); - - epd_setpos(0,0); - - if (epd_power_on()) - return 1; - - return 0; -} - -uint8_t epd_init_partial(void) -{ - if (epd_init()) - return 1; - - #if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x32); - epd_cs_reset(); - for (int j = 0; j < sizeof(lut_partial); j++) - { - _epd_write_data(lut_partial[j]); - } - _epd_write_data_over(); - epd_cs_set(); - #elif defined(EPD_42) - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x80); - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - - return 0; -} - -void epd_enter_deepsleepmode(uint8_t mode) -{ - epd_power_off(); - epd_write_reg(0x10); - epd_write_data(mode); - _hibernating = 1; -} - -uint8_t epd_power_on(void) -{ - #if defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xe0); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xf8); - #endif - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -uint8_t epd_power_off(void) -{ - epd_write_reg(0x22); // Display Update Control - epd_write_data(0x83); - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -void epd_init_internalTempSensor(void) -{ - epd_write_reg(0x18); - epd_write_data(0x80); - - epd_write_reg(0x1A); - epd_write_data(0x7F); -// epd_write_data(0xF0); -} - -void epd_update(void) -{ - - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF4); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); - #endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_update_partial(void) -{ - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFC); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFF); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xCC); - #endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) -{ - epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION - epd_write_data((x_start>>3) & 0xFF); - epd_write_data((x_end>>3) & 0xFF); - - epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION - epd_write_data(y_start & 0xFF); - epd_write_data((y_start >> 8) & 0xFF); - epd_write_data(y_end & 0xFF); - epd_write_data((y_end >> 8) & 0xFF); -} - -void epd_setpos(uint16_t x, uint16_t y) -{ - uint8_t _x; - uint16_t _y; - - _x = x / 8; - - #ifdef EPD_154 - _y = 199 - y; - #elif defined(EPD_29) || defined(EPD_213) - _y = 295 - y; - #elif defined(EPD_42) - _y = y; - #endif - - epd_write_reg(0x4E); // set RAM x address count to 0; - epd_write_data(_x); - epd_write_reg(0x4F); // set RAM y address count to 0x127; - epd_write_data(_y & 0xff); - epd_write_data(_y >> 8 & 0x01); -} - -void epd_writedata(uint8_t *Image1, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(Image1[j]); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_writedata2(uint8_t data, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(data); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_display(uint8_t *Image1, uint8_t *Image2) -{ - uint32_t Width, Height, i, j; - uint32_t k = 0; - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x24); - epd_writedata(Image1, Width * Height); - - epd_setpos(0, 0); - - epd_write_reg(0x26); - k = 0; - epd_cs_reset(); - for (j = 0; j < Height; j++) - { - for (i = 0; i < Width; i++) - { - _epd_write_data(~Image2[k]); - k++; - } - } - _epd_write_data_over(); - epd_cs_set(); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - - epd_update(); -} - -void epd_displayBW(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update(); -} - -void epd_displayBW_partial(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update_partial(); - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); -} - -void epd_displayRED(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - epd_update(); -} - -void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color) -{ - EPD_Paint.Image = 0x00; - EPD_Paint.Image = image; - - EPD_Paint.WidthMemory = Width; - EPD_Paint.HeightMemory = Height; - EPD_Paint.Color = Color; - EPD_Paint.WidthByte = (Width % 8 == 0) ? (Width / 8) : (Width / 8 + 1); - EPD_Paint.HeightByte = Height; - EPD_Paint.Rotate = Rotate; - if (Rotate == EPD_ROTATE_0 || Rotate == EPD_ROTATE_180) - { - - EPD_Paint.Width = Height; - EPD_Paint.Height = Width; - } - else - { - EPD_Paint.Width = Width; - EPD_Paint.Height = Height; - } -} - -void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - uint16_t X, Y; - uint32_t Addr; - uint8_t Rdata; - switch (EPD_Paint.Rotate) - { - case 0: - - X = EPD_Paint.WidthMemory - Ypoint - 1; - Y = Xpoint; - break; - case 90: - X = EPD_Paint.WidthMemory - Xpoint - 1; - Y = EPD_Paint.HeightMemory - Ypoint - 1; - break; - case 180: - X = Ypoint; - Y = EPD_Paint.HeightMemory - Xpoint - 1; - break; - case 270: - X = Xpoint; - Y = Ypoint; - break; - default: - return; - } - Addr = X / 8 + Y * EPD_Paint.WidthByte; - Rdata = EPD_Paint.Image[Addr]; - if (Color == EPD_COLOR_BLACK) - { - EPD_Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8)); - } - else - EPD_Paint.Image[Addr] = Rdata | (0x80 >> (X % 8)); -} - -void epd_paint_clear(uint16_t color) -{ - uint16_t X, Y; - uint32_t Addr; - - for (Y = 0; Y < EPD_Paint.HeightByte; Y++) - { - for (X = 0; X < EPD_Paint.WidthByte; X++) - { // 8 pixel = 1 byte - Addr = X + Y * EPD_Paint.WidthByte; - EPD_Paint.Image[Addr] = color; - } - } -} - -void epd_paint_selectimage(uint8_t *image) -{ - EPD_Paint.Image = image; -} - -void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - epd_paint_setpixel(Xpoint - 1, Ypoint - 1, Color); -} - -void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color) -{ - uint16_t Xpoint, Ypoint; - int32_t dx, dy; - int32_t XAddway, YAddway; - int32_t Esp; - char Dotted_Len; - Xpoint = Xstart; - Ypoint = Ystart; - dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend; - dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend; - - XAddway = Xstart < Xend ? 1 : -1; - YAddway = Ystart < Yend ? 1 : -1; - - Esp = dx + dy; - Dotted_Len = 0; - - for (;;) - { - Dotted_Len++; - epd_paint_drawPoint(Xpoint, Ypoint, Color); - if (2 * Esp >= dy) - { - if (Xpoint == Xend) - break; - Esp += dy; - Xpoint += XAddway; - } - if (2 * Esp <= dx) - { - if (Ypoint == Yend) - break; - Esp += dx; - Ypoint += YAddway; - } - } -} - -void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode) -{ - uint16_t i; - if (mode) - { - for (i = Ystart; i < Yend; i++) - { - epd_paint_drawLine(Xstart, i, Xend, i, Color); - } - } - else - { - epd_paint_drawLine(Xstart, Ystart, Xend, Ystart, Color); - epd_paint_drawLine(Xstart, Ystart, Xstart, Yend, Color); - epd_paint_drawLine(Xend, Yend, Xend, Ystart, Color); - epd_paint_drawLine(Xend, Yend, Xstart, Yend, Color); - } -} - -void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode) -{ - uint16_t Esp, sCountY; - uint16_t XCurrent, YCurrent; - XCurrent = 0; - YCurrent = Radius; - Esp = 3 - (Radius << 1); - if (mode) - { - while (XCurrent <= YCurrent) - { // Realistic circles - for (sCountY = XCurrent; sCountY <= YCurrent; sCountY++) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + sCountY, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + sCountY, Color); // 2 - epd_paint_drawPoint(X_Center - sCountY, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - sCountY, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - sCountY, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - sCountY, Color); // 6 - epd_paint_drawPoint(X_Center + sCountY, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + sCountY, Y_Center + XCurrent, Color); - } - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } - else - { // Draw a hollow circle - while (XCurrent <= YCurrent) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + YCurrent, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + YCurrent, Color); // 2 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - YCurrent, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - YCurrent, Color); // 6 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center + XCurrent, Color); // 0 - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } -} - -void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color) -{ - uint16_t i, m, temp, size2, chr1; - uint16_t x0, y0; - x += 1, y += 1, x0 = x, y0 = y; - if (x - size1 > EPD_H) - return; - if (size1 == 8) - size2 = 6; - else - size2 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * (size1 / 2); - chr1 = chr - ' '; - for (i = 0; i < size2; i++) - { - if (size1 == 8) - { - temp = asc2_0806[chr1][i]; - } // 0806 - else if (size1 == 12) - { - temp = asc2_1206[chr1][i]; - } // 1206 - else if (size1 == 16) - { - temp = asc2_1608[chr1][i]; - } // 1608 - else if (size1 == 24) - { - temp = asc2_2412[chr1][i]; - } // 2412 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((size1 != 8) && ((x - x0) == size1 / 2)) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color) -{ - while (*chr != '\0') - { - epd_paint_showChar(x, y, *chr, size1, color); - chr++; - if (size1 == 8) - { - x += 6; - if(x > EPD_H-6) - break; - } - else - { - x += size1 / 2; - if(x > EPD_H-size1 / 2) - break; - } - } -} - -// m^n -static uint32_t _Pow(uint16_t m, uint16_t n) -{ - uint32_t result = 1; - while (n--) - { - result *= m; - } - return result; -} - -void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color) -{ - uint8_t t, temp, m = 0; - if (size1 == 8) - m = 2; - for (t = 0; t < len; t++) - { - temp = (num / _Pow(10, len - t - 1)) % 10; - if (temp == 0) - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, '0', size1, color); - } - else - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, temp + '0', size1, color); - } - } -} - -void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color) -{ - uint16_t m, temp; - uint16_t x0, y0; - uint16_t i, size3 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * size1; - x += 1, y += 1, x0 = x, y0 = y; - for (i = 0; i < size3; i++) - { - if (size1 == 16) - { - temp = Hzk1[num][i]; - } // 16*16 - else if (size1 == 24) - { - temp = Hzk2[num][i]; - } // 24*24 - else if (size1 == 32) - { - temp = Hzk3[num][i]; - } // 32*32 - else if (size1 == 64) - { - temp = Hzk4[num][i]; - } // 64*64 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == size1) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color) -{ - uint16_t j = 0; - uint16_t i, n = 0, temp = 0, m = 0; - uint16_t x0 = 0, y0 = 0; - x += 1, y += 1, x0 = x, y0 = y; - sizey = sizey / 8 + ((sizey % 8) ? 1 : 0); - for (n = 0; n < sizey; n++) - { - for (i = 0; i < sizex; i++) - { - temp = BMP[j]; - j++; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, !Color); - else - epd_paint_drawPoint(x, y, Color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == sizex) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } - } -} diff --git a/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.h b/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.h deleted file mode 100644 index 4e87135..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef __EPAPER_H -#define __EPAPER_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "at32f403a_407.h" - -//#define EPD_42 -//#define EPD_29 -//#define EPD_213 -//#define EPD_154 - -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) -#error EPD Type Undefine -#endif - -#ifdef EPD_29 -#define EPD_W 128 -#define EPD_H 296 -#endif - -#ifdef EPD_213 -#define EPD_W 122 -#define EPD_H 250 -#endif - -#ifdef EPD_154 -#define EPD_W 200 -#define EPD_H 200 -#endif - -#ifdef EPD_42 -#define EPD_W 400 -#define EPD_H 300 -#endif - -#define EPD_OK 0 -#define EPD_ERROR 1 - -#define EPD_ROTATE_0 0 -#define EPD_ROTATE_90 90 -#define EPD_ROTATE_180 180 -#define EPD_ROTATE_270 270 - -#define EPD_COLOR_WHITE 0xFF -#define EPD_COLOR_BLACK 0x00 -#define EPD_COLOR_RED EPD_COLOR_BLACK - -#define EPD_FONT_SIZE8x6 (8) -#define EPD_FONT_SIZE12x6 (12) -#define EPD_FONT_SIZE16x8 (16) -#define EPD_FONT_SIZE24x12 (24) - -#define EPD_DEEPSLEEP_MODE1 (0x01) -#define EPD_DEEPSLEEP_MODE2 (0x03) - -#define EPD_W_BUFF_SIZE ((EPD_W % 8 == 0) ? (EPD_W / 8) : (EPD_W / 8 + 1)) - typedef struct - { - uint8_t *Image; - uint16_t Width; - uint16_t Height; - uint16_t WidthMemory; - uint16_t HeightMemory; - uint16_t Color; - uint16_t Rotate; - uint16_t WidthByte; - uint16_t HeightByte; - } EPD_PAINT; - extern EPD_PAINT EPD_Paint; - - void epd_io_init(void); - uint8_t epd_init(void); - uint8_t epd_init_partial(void); - void epd_enter_deepsleepmode(uint8_t mode); - uint8_t epd_power_on(void); - uint8_t epd_power_off(void); - void epd_init_internalTempSensor(void); - void epd_update(void); - void epd_update_partial(void); - void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); - void epd_setpos(uint16_t x, uint16_t y); - void epd_display(uint8_t *Image1, uint8_t *Image2); - void epd_displayBW(uint8_t *Image); - void epd_displayBW_partial(uint8_t *Image); - void epd_displayRED(uint8_t *Image); - - void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color); - void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_selectimage(uint8_t *image); - void epd_paint_clear(uint16_t color); - void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color); - void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode); - void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode); - void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color); - void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color); - void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color); - void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color); - void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/Epaper/epdfont.h b/Example/EpaperModuleTest_AT32F403A/Epaper/epdfont.h deleted file mode 100644 index 3d4913b..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Epaper/epdfont.h +++ /dev/null @@ -1,429 +0,0 @@ -#ifndef __EPDFONT_H -#define __EPDFONT_H - -#ifdef __cplusplus -extern "C" { -#endif - -const unsigned char asc2_0806[][6] = -{ -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// sp -{0x00, 0x00, 0x00, 0x2f, 0x00, 0x00},// ! -{0x00, 0x00, 0x07, 0x00, 0x07, 0x00},// " -{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14},// # -{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12},// $ -{0x00, 0x62, 0x64, 0x08, 0x13, 0x23},// % -{0x00, 0x36, 0x49, 0x55, 0x22, 0x50},// & -{0x00, 0x00, 0x05, 0x03, 0x00, 0x00},// ' -{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00},// ( -{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00},// ) -{0x00, 0x14, 0x08, 0x3E, 0x08, 0x14},// * -{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08},// + -{0x00, 0x00, 0x00, 0xA0, 0x60, 0x00},// , -{0x00, 0x08, 0x08, 0x08, 0x08, 0x08},// - -{0x00, 0x00, 0x60, 0x60, 0x00, 0x00},// . -{0x00, 0x20, 0x10, 0x08, 0x04, 0x02},// / -{0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E},// 0 -{0x00, 0x00, 0x42, 0x7F, 0x40, 0x00},// 1 -{0x00, 0x42, 0x61, 0x51, 0x49, 0x46},// 2 -{0x00, 0x21, 0x41, 0x45, 0x4B, 0x31},// 3 -{0x00, 0x18, 0x14, 0x12, 0x7F, 0x10},// 4 -{0x00, 0x27, 0x45, 0x45, 0x45, 0x39},// 5 -{0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30},// 6 -{0x00, 0x01, 0x71, 0x09, 0x05, 0x03},// 7 -{0x00, 0x36, 0x49, 0x49, 0x49, 0x36},// 8 -{0x00, 0x06, 0x49, 0x49, 0x29, 0x1E},// 9 -{0x00, 0x00, 0x36, 0x36, 0x00, 0x00},// : -{0x00, 0x00, 0x56, 0x36, 0x00, 0x00},// ; -{0x00, 0x08, 0x14, 0x22, 0x41, 0x00},// < -{0x00, 0x14, 0x14, 0x14, 0x14, 0x14},// = -{0x00, 0x00, 0x41, 0x22, 0x14, 0x08},// > -{0x00, 0x02, 0x01, 0x51, 0x09, 0x06},// ? -{0x00, 0x32, 0x49, 0x59, 0x51, 0x3E},// @ -{0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C},// A -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x36},// B -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x22},// C -{0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C},// D -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x41},// E -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x01},// F -{0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A},// G -{0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F},// H -{0x00, 0x00, 0x41, 0x7F, 0x41, 0x00},// I -{0x00, 0x20, 0x40, 0x41, 0x3F, 0x01},// J -{0x00, 0x7F, 0x08, 0x14, 0x22, 0x41},// K -{0x00, 0x7F, 0x40, 0x40, 0x40, 0x40},// L -{0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F},// M -{0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F},// N -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E},// O -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x06},// P -{0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E},// Q -{0x00, 0x7F, 0x09, 0x19, 0x29, 0x46},// R -{0x00, 0x46, 0x49, 0x49, 0x49, 0x31},// S -{0x00, 0x01, 0x01, 0x7F, 0x01, 0x01},// T -{0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F},// U -{0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F},// V -{0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F},// W -{0x00, 0x63, 0x14, 0x08, 0x14, 0x63},// X -{0x00, 0x07, 0x08, 0x70, 0x08, 0x07},// Y -{0x00, 0x61, 0x51, 0x49, 0x45, 0x43},// Z -{0x00, 0x00, 0x7F, 0x41, 0x41, 0x00},// [ -{0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55},// 55 -{0x00, 0x00, 0x41, 0x41, 0x7F, 0x00},// ] -{0x00, 0x04, 0x02, 0x01, 0x02, 0x04},// ^ -{0x00, 0x40, 0x40, 0x40, 0x40, 0x40},// _ -{0x00, 0x00, 0x01, 0x02, 0x04, 0x00},// ' -{0x00, 0x20, 0x54, 0x54, 0x54, 0x78},// a -{0x00, 0x7F, 0x48, 0x44, 0x44, 0x38},// b -{0x00, 0x38, 0x44, 0x44, 0x44, 0x20},// c -{0x00, 0x38, 0x44, 0x44, 0x48, 0x7F},// d -{0x00, 0x38, 0x54, 0x54, 0x54, 0x18},// e -{0x00, 0x08, 0x7E, 0x09, 0x01, 0x02},// f -{0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C},// g -{0x00, 0x7F, 0x08, 0x04, 0x04, 0x78},// h -{0x00, 0x00, 0x44, 0x7D, 0x40, 0x00},// i -{0x00, 0x40, 0x80, 0x84, 0x7D, 0x00},// j -{0x00, 0x7F, 0x10, 0x28, 0x44, 0x00},// k -{0x00, 0x00, 0x41, 0x7F, 0x40, 0x00},// l -{0x00, 0x7C, 0x04, 0x18, 0x04, 0x78},// m -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x78},// n -{0x00, 0x38, 0x44, 0x44, 0x44, 0x38},// o -{0x00, 0xFC, 0x24, 0x24, 0x24, 0x18},// p -{0x00, 0x18, 0x24, 0x24, 0x18, 0xFC},// q -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x08},// r -{0x00, 0x48, 0x54, 0x54, 0x54, 0x20},// s -{0x00, 0x04, 0x3F, 0x44, 0x40, 0x20},// t -{0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C},// u -{0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C},// v -{0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C},// w -{0x00, 0x44, 0x28, 0x10, 0x28, 0x44},// x -{0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C},// y -{0x00, 0x44, 0x64, 0x54, 0x4C, 0x44},// z -{0x14, 0x14, 0x14, 0x14, 0x14, 0x14},// horiz lines -}; -//12*12 ASCII -const unsigned char asc2_1206[95][12]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x0C,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x90,0xD0,0xBC,0xD0,0xBC,0x90,0x00,0x03,0x00,0x03,0x00,0x00},/*"#",3*/ -{0x18,0x24,0xFE,0x44,0x8C,0x00,0x03,0x02,0x07,0x02,0x01,0x00},/*"$",4*/ -{0x18,0x24,0xD8,0xB0,0x4C,0x80,0x00,0x03,0x00,0x01,0x02,0x01},/*"%",5*/ -{0xC0,0x38,0xE4,0x38,0xE0,0x00,0x01,0x02,0x02,0x01,0x02,0x02},/*"&",6*/ -{0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xF8,0x04,0x02,0x00,0x00,0x00,0x01,0x02,0x04},/*"(",8*/ -{0x00,0x02,0x04,0xF8,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0x00},/*")",9*/ -{0x90,0x60,0xF8,0x60,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"*",10*/ -{0x20,0x20,0xFC,0x20,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x00,0x00,0x00,0x00},/*",",12*/ -{0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x80,0x60,0x1C,0x02,0x00,0x04,0x03,0x00,0x00,0x00,0x00},/*"/",15*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"0",16*/ -{0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"1",17*/ -{0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00},/*"2",18*/ -{0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"3",19*/ -{0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00},/*"4",20*/ -{0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"5",21*/ -{0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"6",22*/ -{0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00},/*"7",23*/ -{0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"8",24*/ -{0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"9",25*/ -{0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00},/*";",27*/ -{0x00,0x20,0x50,0x88,0x04,0x02,0x00,0x00,0x00,0x00,0x01,0x02},/*"<",28*/ -{0x90,0x90,0x90,0x90,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x02,0x04,0x88,0x50,0x20,0x00,0x02,0x01,0x00,0x00,0x00},/*">",30*/ -{0x18,0x04,0xC4,0x24,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"?",31*/ -{0xF8,0x04,0xE4,0x94,0xF8,0x00,0x01,0x02,0x02,0x02,0x02,0x00},/*"@",32*/ -{0x00,0xE0,0x9C,0xF0,0x80,0x00,0x02,0x03,0x00,0x00,0x03,0x02},/*"A",33*/ -{0x04,0xFC,0x24,0x24,0xD8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"B",34*/ -{0xF8,0x04,0x04,0x04,0x0C,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"C",35*/ -{0x04,0xFC,0x04,0x04,0xF8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"D",36*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"E",37*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"F",38*/ -{0xF0,0x08,0x04,0x44,0xCC,0x40,0x00,0x01,0x02,0x02,0x01,0x00},/*"G",39*/ -{0x04,0xFC,0x20,0x20,0xFC,0x04,0x02,0x03,0x00,0x00,0x03,0x02},/*"H",40*/ -{0x04,0x04,0xFC,0x04,0x04,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"I",41*/ -{0x00,0x04,0x04,0xFC,0x04,0x04,0x06,0x04,0x04,0x03,0x00,0x00},/*"J",42*/ -{0x04,0xFC,0x24,0xD0,0x0C,0x04,0x02,0x03,0x02,0x00,0x03,0x02},/*"K",43*/ -{0x04,0xFC,0x04,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x02,0x03},/*"L",44*/ -{0xFC,0x3C,0xC0,0x3C,0xFC,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"M",45*/ -{0x04,0xFC,0x30,0xC4,0xFC,0x04,0x02,0x03,0x02,0x00,0x03,0x00},/*"N",46*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"O",47*/ -{0x04,0xFC,0x24,0x24,0x18,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"P",48*/ -{0xF8,0x84,0x84,0x04,0xF8,0x00,0x01,0x02,0x02,0x07,0x05,0x00},/*"Q",49*/ -{0x04,0xFC,0x24,0x64,0x98,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"R",50*/ -{0x18,0x24,0x24,0x44,0x8C,0x00,0x03,0x02,0x02,0x02,0x01,0x00},/*"S",51*/ -{0x0C,0x04,0xFC,0x04,0x0C,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"T",52*/ -{0x04,0xFC,0x00,0x00,0xFC,0x04,0x00,0x01,0x02,0x02,0x01,0x00},/*"U",53*/ -{0x04,0x7C,0x80,0xE0,0x1C,0x04,0x00,0x00,0x03,0x00,0x00,0x00},/*"V",54*/ -{0x1C,0xE0,0x3C,0xE0,0x1C,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"W",55*/ -{0x04,0x9C,0x60,0x9C,0x04,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"X",56*/ -{0x04,0x1C,0xE0,0x1C,0x04,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"Y",57*/ -{0x0C,0x84,0x64,0x1C,0x04,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"Z",58*/ -{0x00,0x00,0xFE,0x02,0x02,0x00,0x00,0x00,0x07,0x04,0x04,0x00},/*"[",59*/ -{0x00,0x0E,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00},/*"\",60*/ -{0x00,0x02,0x02,0xFE,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00},/*"]",61*/ -{0x00,0x04,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08},/*"_",63*/ -{0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x40,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"a",65*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"b",66*/ -{0x00,0xC0,0x20,0x20,0x60,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"c",67*/ -{0x00,0xC0,0x20,0x24,0xFC,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"d",68*/ -{0x00,0xC0,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"e",69*/ -{0x00,0x20,0xF8,0x24,0x24,0x04,0x00,0x02,0x03,0x02,0x02,0x00},/*"f",70*/ -{0x00,0x40,0xA0,0xA0,0x60,0x20,0x00,0x07,0x0A,0x0A,0x0A,0x04},/*"g",71*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"h",72*/ -{0x00,0x20,0xE4,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x20,0xE4,0x00,0x00,0x08,0x08,0x08,0x07,0x00,0x00},/*"j",74*/ -{0x04,0xFC,0x80,0xE0,0x20,0x20,0x02,0x03,0x02,0x00,0x03,0x02},/*"k",75*/ -{0x04,0x04,0xFC,0x00,0x00,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"l",76*/ -{0xE0,0x20,0xE0,0x20,0xC0,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"m",77*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"n",78*/ -{0x00,0xC0,0x20,0x20,0xC0,0x00,0x00,0x01,0x02,0x02,0x01,0x00},/*"o",79*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x08,0x0F,0x0A,0x02,0x01,0x00},/*"p",80*/ -{0x00,0xC0,0x20,0x20,0xE0,0x00,0x00,0x01,0x02,0x0A,0x0F,0x08},/*"q",81*/ -{0x20,0xE0,0x40,0x20,0x20,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x60,0xA0,0xA0,0x20,0x00,0x00,0x02,0x02,0x02,0x03,0x00},/*"s",83*/ -{0x00,0x20,0xF8,0x20,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x00},/*"t",84*/ -{0x20,0xE0,0x00,0x20,0xE0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"u",85*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x00,0x00,0x03,0x01,0x00,0x00},/*"v",86*/ -{0x60,0x80,0xE0,0x80,0x60,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"w",87*/ -{0x20,0x60,0x80,0x60,0x20,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"x",88*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x08,0x08,0x07,0x01,0x00,0x00},/*"y",89*/ -{0x00,0x20,0xA0,0x60,0x20,0x00,0x00,0x02,0x03,0x02,0x02,0x00},/*"z",90*/ -{0x00,0x00,0x20,0xDE,0x02,0x00,0x00,0x00,0x00,0x07,0x04,0x00},/*"{",91*/ -{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00},/*"|",92*/ -{0x00,0x02,0xDE,0x20,0x00,0x00,0x00,0x04,0x07,0x00,0x00,0x00},/*"}",93*/ -{0x02,0x01,0x02,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//16*16 ASCII -const unsigned char asc2_1608[][16]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00},/*"#",3*/ -{0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00},/*"$",4*/ -{0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00},/*"%",5*/ -{0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10},/*"&",6*/ -{0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},/*")",9*/ -{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},/*"*",10*/ -{0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/*"/",15*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",16*/ -{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"1",17*/ -{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",18*/ -{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},/*"3",19*/ -{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},/*"4",20*/ -{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},/*"5",21*/ -{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"6",22*/ -{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",24*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},/*"9",25*/ -{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},/*"<",28*/ -{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"=",29*/ -{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},/*">",30*/ -{0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00},/*"?",31*/ -{0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00},/*"@",32*/ -{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",33*/ -{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},/*"B",34*/ -{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",35*/ -{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},/*"D",36*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},/*"E",37*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},/*"F",38*/ -{0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},/*"G",39*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},/*"H",40*/ -{0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},/*"J",42*/ -{0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},/*"K",43*/ -{0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},/*"L",44*/ -{0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00},/*"M",45*/ -{0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},/*"N",46*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},/*"O",47*/ -{0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},/*"P",48*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},/*"Q",49*/ -{0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},/*"R",50*/ -{0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},/*"S",51*/ -{0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"T",52*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"U",53*/ -{0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},/*"V",54*/ -{0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},/*"W",55*/ -{0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},/*"X",56*/ -{0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"Y",57*/ -{0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},/*"\",60*/ -{0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},/*"a",65*/ -{0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20},/*"d",68*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},/*"e",69*/ -{0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},/*"g",71*/ -{0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"h",72*/ -{0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},/*"j",74*/ -{0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00},/*"k",75*/ -{0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"l",76*/ -{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},/*"m",77*/ -{0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"n",78*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"o",79*/ -{0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80},/*"q",81*/ -{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},/*"r",82*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},/*"s",83*/ -{0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00},/*"t",84*/ -{0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},/*"u",85*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00},/*"v",86*/ -{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},/*"w",87*/ -{0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00},/*"x",88*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00},/*"y",89*/ -{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40},/*"{",91*/ -{0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//24*24 ASICII -const unsigned char asc2_2412[][36]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x00,0x80,0x60,0x30,0x1C,0x8C,0x60,0x30,0x1C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x86,0xE6,0x9F,0x86,0x86,0x86,0x86,0xE6,0x9F,0x86,0x00,0x00,0x01,0x1F,0x01,0x01,0x01,0x01,0x01,0x1F,0x01,0x01,0x00},/*"#",3*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0xF8,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x03,0x07,0x0C,0x18,0xFF,0x70,0xE1,0x81,0x00,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x7F,0x10,0x0F,0x07,0x00,0x00},/*"$",4*/ -{0x80,0x60,0x20,0x60,0x80,0x00,0x00,0x00,0xE0,0x20,0x00,0x00,0x0F,0x30,0x20,0x30,0x9F,0x70,0xDC,0x37,0x10,0x30,0xC0,0x00,0x00,0x00,0x10,0x0E,0x03,0x00,0x07,0x18,0x10,0x18,0x07,0x00},/*"%",5*/ -{0x00,0x00,0xC0,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x1F,0x38,0xE8,0x87,0x03,0xC4,0x3C,0x04,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x0B,0x07,0x0D,0x10,0x10,0x08,0x00},/*"&",6*/ -{0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x30,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x04,0x08,0x30,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x66,0x66,0x3C,0x18,0xFF,0x18,0x3C,0x66,0x66,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"*",10*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x0C,0x00,0x00,0x00,0x00,0x00,0x80,0x70,0x1C,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x38,0x0E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"/",15*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0E,0x07,0x01,0x00},/*"0",16*/ -{0x00,0x00,0x80,0x80,0x80,0xC0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"1",17*/ -{0x00,0x80,0x40,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x03,0x03,0x00,0x80,0x40,0x20,0x38,0x1F,0x07,0x00,0x00,0x00,0x1C,0x1A,0x19,0x18,0x18,0x18,0x18,0x18,0x1F,0x00,0x00},/*"2",18*/ -{0x00,0x80,0xC0,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00},/*"3",19*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x00,0x00,0x00,0x00,0xC0,0xB0,0x88,0x86,0x81,0x80,0xFF,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00},/*"4",20*/ -{0x00,0x00,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x3F,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x00,0x07,0x0B,0x10,0x10,0x10,0x10,0x1C,0x0F,0x03,0x00,0x00},/*"5",21*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0xFC,0xFF,0x21,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x01,0x07,0x0C,0x18,0x10,0x10,0x10,0x08,0x0F,0x03,0x00},/*"6",22*/ -{0x00,0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0x60,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x87,0xEF,0x2C,0x18,0x18,0x30,0x30,0x68,0xCF,0x83,0x00,0x00,0x07,0x0F,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"8",24*/ -{0x00,0x00,0xC0,0xC0,0x20,0x20,0x20,0x20,0xC0,0x80,0x00,0x00,0x00,0x1F,0x3F,0x60,0x40,0x40,0x40,0x20,0x10,0xFF,0xFE,0x00,0x00,0x00,0x0C,0x1C,0x10,0x10,0x10,0x08,0x0F,0x03,0x00,0x00},/*"9",25*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x00,0x00,0x00,0x10,0x28,0x44,0x82,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"<",28*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x00,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x44,0x28,0x10,0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00},/*">",30*/ -{0x00,0xC0,0x20,0x20,0x10,0x10,0x10,0x10,0x30,0xE0,0xC0,0x00,0x00,0x03,0x03,0x00,0x00,0xF0,0x10,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00},/*"?",31*/ -{0x00,0x00,0x00,0xC0,0x40,0x60,0x20,0x20,0x20,0x40,0xC0,0x00,0x00,0xFC,0xFF,0x01,0xF0,0x0E,0x03,0xC1,0xFE,0x03,0x80,0x7F,0x00,0x01,0x07,0x0E,0x08,0x11,0x11,0x10,0x11,0x09,0x04,0x02},/*"@",32*/ -{0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7C,0x43,0x40,0x47,0x7F,0xF8,0x80,0x00,0x00,0x10,0x18,0x1F,0x10,0x00,0x00,0x00,0x00,0x13,0x1F,0x1C,0x10},/*"A",33*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"B",34*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0x20,0x60,0xE0,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x08,0x04,0x03,0x00},/*"C",35*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x40,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x18,0x08,0x0E,0x07,0x01,0x00},/*"D",36*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"E",37*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x01,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"F",38*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x40,0xE0,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x40,0x40,0xC0,0xC1,0x40,0x40,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x0F,0x0F,0x00,0x00},/*"G",39*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0x20,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0xFF,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10},/*"H",40*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x60,0xE0,0x80,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"J",42*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x20,0xA0,0x60,0x20,0x20,0x00,0x00,0xFF,0xFF,0x30,0x18,0x7C,0xE3,0xC0,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x01,0x13,0x1F,0x1C,0x18,0x10},/*"K",43*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"L",44*/ -{0x20,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0x20,0x00,0xFF,0x01,0x3F,0xFE,0xC0,0xE0,0x1E,0x01,0xFF,0xFF,0x00,0x10,0x1F,0x10,0x00,0x03,0x1F,0x03,0x00,0x10,0x1F,0x1F,0x10},/*"M",45*/ -{0x20,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0x00,0x03,0x07,0x1C,0x78,0xE0,0x80,0x00,0xFF,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x00},/*"N",46*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0C,0x07,0x01,0x00},/*"O",47*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x20,0x20,0x20,0x20,0x20,0x30,0x1F,0x0F,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"P",48*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x11,0x11,0x13,0x3C,0x7C,0x67,0x21,0x00},/*"Q",49*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x30,0xF0,0xD0,0x08,0x0F,0x07,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x03,0x0F,0x1C,0x10,0x10},/*"R",50*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x40,0x40,0xE0,0x00,0x00,0x07,0x0F,0x0C,0x18,0x18,0x30,0x30,0x60,0xE0,0x81,0x00,0x00,0x1F,0x0C,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"S",51*/ -{0x80,0x60,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x60,0x80,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00},/*"T",52*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x10,0x10,0x08,0x07,0x00},/*"U",53*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x07,0x7F,0xF8,0x80,0x00,0x80,0x7C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x1C,0x07,0x00,0x00,0x00,0x00},/*"V",54*/ -{0x20,0xE0,0xE0,0x20,0x00,0xE0,0xE0,0x20,0x00,0x20,0xE0,0x20,0x00,0x07,0xFF,0xF8,0xE0,0x1F,0xFF,0xFC,0xE0,0x1F,0x00,0x00,0x00,0x00,0x03,0x1F,0x03,0x00,0x01,0x1F,0x03,0x00,0x00,0x00},/*"W",55*/ -{0x00,0x20,0x60,0xE0,0xA0,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x03,0x8F,0x7C,0xF8,0xC6,0x01,0x00,0x00,0x00,0x00,0x10,0x18,0x1E,0x13,0x00,0x01,0x17,0x1F,0x18,0x10,0x00},/*"X",56*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x01,0x07,0x3E,0xF8,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00},/*"Y",57*/ -{0x00,0x80,0x60,0x20,0x20,0x20,0x20,0xA0,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x3E,0x0F,0x03,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x00,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1C,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x70,0x80,0x00},/*"\",60*/ -{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x00,0x10,0x08,0x0C,0x04,0x0C,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x00,0x00,0x04,0x04,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0xD8,0x44,0x64,0x24,0x24,0xFC,0xF8,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x10,0x08,0x1F,0x1F,0x10,0x18},/*"a",65*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x18,0x08,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x1F,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x03,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x18,0x04,0x04,0x04,0x3C,0x38,0x00,0x00,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x08,0x06,0x00,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"d",68*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x48,0x44,0x44,0x44,0x4C,0x78,0x70,0x00,0x00,0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x08,0x04,0x00},/*"e",69*/ -{0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0xE0,0xC0,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF8,0x8C,0x04,0x04,0x8C,0xF8,0x74,0x04,0x0C,0x00,0x70,0x76,0xCF,0x8D,0x8D,0x8D,0x89,0xC8,0x78,0x70,0x00},/*"g",71*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x08,0x04,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"h",72*/ -{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"j",74*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0xC0,0xF4,0x1C,0x04,0x04,0x00,0x00,0x00,0x10,0x1F,0x1F,0x11,0x00,0x03,0x1F,0x1C,0x10,0x10,0x00},/*"k",75*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"l",76*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x00,0x10,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10},/*"m",77*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x08,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"n",78*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0x18,0x0C,0x04,0x04,0x0C,0x18,0xF0,0xE0,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x0C,0x0F,0x03,0x00},/*"o",79*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x80,0xFF,0xFF,0x88,0x90,0x10,0x10,0x1C,0x0F,0x03,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xF8,0xFC,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x90,0x88,0xFF,0xFF,0x80,0x00},/*"q",81*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x10,0x08,0x04,0x04,0x0C,0x0C,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x78,0xCC,0xC4,0x84,0x84,0x84,0x0C,0x1C,0x00,0x00,0x00,0x1E,0x18,0x10,0x10,0x10,0x11,0x19,0x0F,0x06,0x00},/*"s",83*/ -{0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x10,0x10,0x10,0x0C,0x00,0x00},/*"t",84*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"u",85*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0x00,0xC4,0x3C,0x0C,0x04,0x00,0x00,0x00,0x00,0x01,0x0F,0x1E,0x0E,0x01,0x00,0x00,0x00},/*"v",86*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x3C,0xFC,0xC4,0x00,0xE4,0x7C,0xFC,0x84,0x80,0x7C,0x04,0x00,0x00,0x07,0x1F,0x07,0x00,0x00,0x07,0x1F,0x07,0x00,0x00},/*"w",87*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x1C,0x7C,0xE4,0xC0,0x34,0x1C,0x04,0x04,0x00,0x00,0x10,0x10,0x1C,0x16,0x01,0x13,0x1F,0x1C,0x18,0x10,0x00},/*"x",88*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0xC4,0x3C,0x04,0x04,0x00,0x00,0x00,0xC0,0x80,0xC1,0x37,0x0E,0x01,0x00,0x00,0x00,0x00},/*"y",89*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x04,0x04,0xC4,0xF4,0x7C,0x1C,0x04,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x11,0x10,0x10,0x18,0x0E,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x60,0x40,0x00,0x00},/*"{",91*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x00,0x04,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x18,0x06,0x02,0x02,0x04,0x08,0x10,0x20,0x20,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -const unsigned char Hzk1[][32]={ -{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"��",0*/ -{0x40,0x40,0x40,0x5F,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x5F,0x40,0x40,0x40,0x00,0x00,0x40,0x20,0x0F,0x09,0x49,0x89,0x79,0x09,0x09,0x09,0x0F,0x20,0x40,0x00,0x00},/*"��",1*/ -{0x00,0xFE,0x02,0x42,0x4A,0xCA,0x4A,0x4A,0xCA,0x4A,0x4A,0x42,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x50,0x4C,0x43,0x40,0x40,0x4F,0x50,0x50,0x5C,0x40,0xFF,0x00,0x00},/*"԰",2*/ -{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"��",3*/ -{0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",4*/ -{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"��",5*/ -{0x00,0x10,0x10,0x10,0x10,0xD0,0x30,0xFF,0x30,0xD0,0x12,0x1C,0x10,0x10,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"��",6*/ -{0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00},/*"��",7*/ -{0x00,0xFE,0x22,0x5A,0x86,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,0xFF,0x04,0x08,0x07,0x00,0xFF,0x40,0x20,0x03,0x0C,0x14,0x22,0x41,0x40,0x00},/*"��",8*/ -{0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,0x00,0x01,0x00,0x20,0x70,0x28,0x26,0x21,0x20,0x20,0x24,0x38,0x60,0x00,0x01,0x01,0x00},/*"��",9*/ -{0x00,0x10,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x12,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00},/*"˾",10*/ -}; -const unsigned char Hzk2[][72]={ -{0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFC,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; -const unsigned char Hzk3[][128]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - - -}; - -const unsigned char Hzk4[][512]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF0,0xF0,0x70,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_clock.h b/Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_clock.h deleted file mode 100644 index 5f44bc4..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_clock.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_clock.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief header file of clock program - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_CLOCK_H -#define __AT32F403A_407_CLOCK_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/* exported functions ------------------------------------------------------- */ -void system_clock_config(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __AT32F403A_407_CLOCK_H */ - diff --git a/Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_conf.h b/Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_conf.h deleted file mode 100644 index b270d4a..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_conf.h +++ /dev/null @@ -1,179 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_conf.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief at32f403a_407 config header file - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_CONF_H -#define __AT32F403A_407_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/** @addtogroup AT32F403A_periph_template - * @{ - */ - -/** @addtogroup 403A_Library_configuration Library_configuration - * @{ - */ - -/** - * @brief in the following line adjust the value of high speed exernal crystal (hext) - * used in your application - * - * tip: to avoid modifying this file each time you need to use different hext, you - * can define the hext value in your toolchain compiler preprocessor. - * - */ -#if !defined HEXT_VALUE -#define HEXT_VALUE ((uint32_t)8000000) /*!< value of the high speed exernal crystal in hz */ -#endif - -/** - * @brief in the following line adjust the high speed exernal crystal (hext) startup - * timeout value - */ -#define HEXT_STARTUP_TIMEOUT ((uint16_t)0x3000) /*!< time out for hext start up */ -#define HICK_VALUE ((uint32_t)8000000) /*!< value of the high speed internal clock in hz */ - -/* module define -------------------------------------------------------------*/ -#define CRM_MODULE_ENABLED -#define TMR_MODULE_ENABLED -#define RTC_MODULE_ENABLED -#define BPR_MODULE_ENABLED -#define GPIO_MODULE_ENABLED -#define I2C_MODULE_ENABLED -#define USART_MODULE_ENABLED -#define PWC_MODULE_ENABLED -#define CAN_MODULE_ENABLED -#define ADC_MODULE_ENABLED -#define DAC_MODULE_ENABLED -#define SPI_MODULE_ENABLED -#define DMA_MODULE_ENABLED -#define DEBUG_MODULE_ENABLED -#define FLASH_MODULE_ENABLED -#define CRC_MODULE_ENABLED -#define WWDT_MODULE_ENABLED -#define WDT_MODULE_ENABLED -#define EXINT_MODULE_ENABLED -#define SDIO_MODULE_ENABLED -#define XMC_MODULE_ENABLED -#define USB_MODULE_ENABLED -#define ACC_MODULE_ENABLED -#define MISC_MODULE_ENABLED -#define EMAC_MODULE_ENABLED - -/* includes ------------------------------------------------------------------*/ -#ifdef CRM_MODULE_ENABLED -#include "at32f403a_407_crm.h" -#endif -#ifdef TMR_MODULE_ENABLED -#include "at32f403a_407_tmr.h" -#endif -#ifdef RTC_MODULE_ENABLED -#include "at32f403a_407_rtc.h" -#endif -#ifdef BPR_MODULE_ENABLED -#include "at32f403a_407_bpr.h" -#endif -#ifdef GPIO_MODULE_ENABLED -#include "at32f403a_407_gpio.h" -#endif -#ifdef I2C_MODULE_ENABLED -#include "at32f403a_407_i2c.h" -#endif -#ifdef USART_MODULE_ENABLED -#include "at32f403a_407_usart.h" -#endif -#ifdef PWC_MODULE_ENABLED -#include "at32f403a_407_pwc.h" -#endif -#ifdef CAN_MODULE_ENABLED -#include "at32f403a_407_can.h" -#endif -#ifdef ADC_MODULE_ENABLED -#include "at32f403a_407_adc.h" -#endif -#ifdef DAC_MODULE_ENABLED -#include "at32f403a_407_dac.h" -#endif -#ifdef SPI_MODULE_ENABLED -#include "at32f403a_407_spi.h" -#endif -#ifdef DMA_MODULE_ENABLED -#include "at32f403a_407_dma.h" -#endif -#ifdef DEBUG_MODULE_ENABLED -#include "at32f403a_407_debug.h" -#endif -#ifdef FLASH_MODULE_ENABLED -#include "at32f403a_407_flash.h" -#endif -#ifdef CRC_MODULE_ENABLED -#include "at32f403a_407_crc.h" -#endif -#ifdef WWDT_MODULE_ENABLED -#include "at32f403a_407_wwdt.h" -#endif -#ifdef WDT_MODULE_ENABLED -#include "at32f403a_407_wdt.h" -#endif -#ifdef EXINT_MODULE_ENABLED -#include "at32f403a_407_exint.h" -#endif -#ifdef SDIO_MODULE_ENABLED -#include "at32f403a_407_sdio.h" -#endif -#ifdef XMC_MODULE_ENABLED -#include "at32f403a_407_xmc.h" -#endif -#ifdef ACC_MODULE_ENABLED -#include "at32f403a_407_acc.h" -#endif -#ifdef MISC_MODULE_ENABLED -#include "at32f403a_407_misc.h" -#endif -#ifdef USB_MODULE_ENABLED -#include "at32f403a_407_usb.h" -#endif -#ifdef EMAC_MODULE_ENABLED -#include "at32f403a_407_emac.h" -#endif - -/** - * @} - */ - - /** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_int.h b/Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_int.h deleted file mode 100644 index 6319493..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Inc/at32f403a_407_int.h +++ /dev/null @@ -1,58 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_int.h - * @version v2.0.9 - * @date 2022-04-25 - * @brief header file of main interrupt service routines. - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AT32F403A_407_INT_H -#define __AT32F403A_407_INT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* includes ------------------------------------------------------------------*/ -#include "at32f403a_407.h" - -/* 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 - diff --git a/Example/EpaperModuleTest_AT32F403A/Inc/board.h b/Example/EpaperModuleTest_AT32F403A/Inc/board.h deleted file mode 100644 index 6bba131..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Inc/board.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef __BOARD_H -#define __BOARD_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "at32f403a_407.h" - -#define DELAY 100 -#define FAST 1 -#define SLOW 4 - - void led_init(void); - void led_toggle(void); - void led_set(confirm_state bit_state); - - void button_init(void); - flag_status button_getstate(void); - - void button_exint_init(void); - void button_isr(void); - - extern uint8_t g_speed; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/Inc/delay.h b/Example/EpaperModuleTest_AT32F403A/Inc/delay.h deleted file mode 100644 index 571af13..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Inc/delay.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef __DELAY_H -#define __DELAY_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "at32f403a_407.h" - -void delay_init(void); -void delay_us(uint32_t nus); -void delay_ms(uint16_t nms); -void delay_sec(uint16_t sec); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvoptx b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvoptx deleted file mode 100644 index 15ed88c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvoptx +++ /dev/null @@ -1,657 +0,0 @@ - - - - 1.0 - -
    ### uVision Project, (C) Keil Software
    - - - *.c - *.s*; *.src; *.a* - *.obj; *.o - *.lib - *.txt; *.h; *.inc; *.md - *.plm - *.cpp - 0 - - - - 0 - 0 - - - - Target 1 - 0x4 - ARM-ADS - - 12000000 - - 1 - 1 - 0 - 1 - 0 - - - 1 - 65535 - 0 - 0 - 0 - - - 79 - 66 - 8 - .\Listings\ - - - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - - - 1 - 0 - 1 - - 255 - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 4 - - - - - - - - - - - Segger\JL2CM3.dll - - - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - JL2CM3 - -U59423694 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0AT32F403A_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:-AT32F403ACGU7$Flash\AT32F403A_1024.FLM) - - - 0 - UL2CM3 - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0AT32F403A_1024 -FS08000000 -FL0100000 -FP0($$Device:-AT32F403ACGU7$Flash\AT32F403A_1024.FLM)) - - - - - - 0 - 1 - SPI2 - - - 1 - 1 - GPIOA - - - 2 - 1 - epd_temp,0x0A - - - 3 - 1 - data1 - - - 4 - 1 - data2 - - - 5 - 1 - SPI2 - - - 6 - 1 - data - - - - 0 - - - 0 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - 0 - 0 - 0 - - - - - - - - - - - - - App - 0 - 0 - 0 - 0 - - 1 - 1 - 1 - 0 - 0 - 0 - ..\Src\at32f403a_407_clock.c - at32f403a_407_clock.c - 0 - 0 - - - 1 - 2 - 1 - 0 - 0 - 0 - ..\Src\at32f403a_407_int.c - at32f403a_407_int.c - 0 - 0 - - - 1 - 3 - 1 - 0 - 0 - 0 - ..\Src\main.c - main.c - 0 - 0 - - - 1 - 4 - 1 - 0 - 0 - 0 - ..\Src\delay.c - delay.c - 0 - 0 - - - 1 - 5 - 1 - 0 - 0 - 0 - ..\Src\board.c - board.c - 0 - 0 - - - 1 - 6 - 1 - 0 - 0 - 0 - ..\Epaper\epaper.c - epaper.c - 0 - 0 - - - - - PeriphDriver - 0 - 0 - 0 - 0 - - 2 - 7 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_acc.c - at32f403a_407_acc.c - 0 - 0 - - - 2 - 8 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_adc.c - at32f403a_407_adc.c - 0 - 0 - - - 2 - 9 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_bpr.c - at32f403a_407_bpr.c - 0 - 0 - - - 2 - 10 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_can.c - at32f403a_407_can.c - 0 - 0 - - - 2 - 11 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_crc.c - at32f403a_407_crc.c - 0 - 0 - - - 2 - 12 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_crm.c - at32f403a_407_crm.c - 0 - 0 - - - 2 - 13 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_dac.c - at32f403a_407_dac.c - 0 - 0 - - - 2 - 14 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_debug.c - at32f403a_407_debug.c - 0 - 0 - - - 2 - 15 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_dma.c - at32f403a_407_dma.c - 0 - 0 - - - 2 - 16 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_emac.c - at32f403a_407_emac.c - 0 - 0 - - - 2 - 17 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_exint.c - at32f403a_407_exint.c - 0 - 0 - - - 2 - 18 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_flash.c - at32f403a_407_flash.c - 0 - 0 - - - 2 - 19 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_gpio.c - at32f403a_407_gpio.c - 0 - 0 - - - 2 - 20 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_i2c.c - at32f403a_407_i2c.c - 0 - 0 - - - 2 - 21 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_misc.c - at32f403a_407_misc.c - 0 - 0 - - - 2 - 22 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_pwc.c - at32f403a_407_pwc.c - 0 - 0 - - - 2 - 23 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_rtc.c - at32f403a_407_rtc.c - 0 - 0 - - - 2 - 24 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_sdio.c - at32f403a_407_sdio.c - 0 - 0 - - - 2 - 25 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_spi.c - at32f403a_407_spi.c - 0 - 0 - - - 2 - 26 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_tmr.c - at32f403a_407_tmr.c - 0 - 0 - - - 2 - 27 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_usart.c - at32f403a_407_usart.c - 0 - 0 - - - 2 - 28 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_usb.c - at32f403a_407_usb.c - 0 - 0 - - - 2 - 29 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_wdt.c - at32f403a_407_wdt.c - 0 - 0 - - - 2 - 30 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_wwdt.c - at32f403a_407_wwdt.c - 0 - 0 - - - 2 - 31 - 1 - 0 - 0 - 0 - ..\AT32F403A\drivers\src\at32f403a_407_xmc.c - at32f403a_407_xmc.c - 0 - 0 - - - - - Startup - 0 - 0 - 0 - 0 - - 3 - 32 - 2 - 0 - 0 - 0 - ..\AT32F403A\cmsis\cm4\device_support\startup\mdk\startup_at32f403a_407.s - startup_at32f403a_407.s - 0 - 0 - - - - - CMSIS - 0 - 0 - 0 - 0 - - 4 - 33 - 1 - 0 - 0 - 0 - ..\AT32F403A\cmsis\cm4\device_support\system_at32f403a_407.c - system_at32f403a_407.c - 0 - 0 - - - -
    diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvprojx b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvprojx deleted file mode 100644 index 0608784..0000000 --- a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvprojx +++ /dev/null @@ -1,578 +0,0 @@ - - - - 2.1 - -
    ### uVision Project, (C) Keil Software
    - - - - Target 1 - 0x4 - ARM-ADS - 6210000::V6.21::ARMCLANG - 1 - - - -AT32F403ACGU7 - ArteryTek - ArteryTek.AT32F403A_407_DFP.2.0.9 - IRAM(0x20000000,0x38000) IROM(0x08000000,0x100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE - - - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0AT32F403A_1024 -FS08000000 -FL0100000 -FP0($$Device:-AT32F403ACGU7$Flash\AT32F403A_1024.FLM)) - 0 - $$Device:-AT32F403ACGU7$Device\Include\at32f403a_407.h - - - - - - - - - - $$Device:-AT32F403ACGU7$SVD\AT32F403Axx_v2.svd - 0 - 0 - - - - - - - 0 - 0 - 0 - 0 - 1 - - .\Objects\ - EpaperModuleTest_AT32F403A - 1 - 0 - 1 - 1 - 1 - .\Listings\ - 1 - 0 - 0 - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - 0 - - - - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - SARMCM3.DLL - -REMAP -MPU - DCM.DLL - -pCM4 - SARMCM3.DLL - -MPU - TCM.DLL - -pCM4 - - - - 1 - 0 - 0 - 0 - 16 - - - - - 1 - 0 - 0 - 1 - 1 - -1 - - 1 - BIN\UL2CM3.DLL - - - - - - 0 - - - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - "Cortex-M4" - - 0 - 0 - 0 - 1 - 1 - 0 - 0 - 2 - 0 - 0 - 0 - 0 - 0 - 8 - 0 - 0 - 0 - 0 - 3 - 3 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x38000 - - - 1 - 0x8000000 - 0x100000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8000000 - 0x100000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x38000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 2 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 3 - 0 - 0 - 1 - 1 - 0 - 3 - 3 - 1 - 1 - 0 - 0 - 0 - - - AT32F403ACGU7,USE_STDPERIPH_DRIVER - - ..\AT32F403A\cmsis\cm4\core_support;..\AT32F403A\cmsis\cm4\device_support;..\AT32F403A\drivers\inc;..\Inc;..\Epaper - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 4 - - - - - - - - - 1 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - - - - - - - - - - - - App - - - at32f403a_407_clock.c - 1 - ..\Src\at32f403a_407_clock.c - - - at32f403a_407_int.c - 1 - ..\Src\at32f403a_407_int.c - - - main.c - 1 - ..\Src\main.c - - - delay.c - 1 - ..\Src\delay.c - - - board.c - 1 - ..\Src\board.c - - - epaper.c - 1 - ..\Epaper\epaper.c - - - - - PeriphDriver - - - at32f403a_407_acc.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_acc.c - - - at32f403a_407_adc.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_adc.c - - - at32f403a_407_bpr.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_bpr.c - - - at32f403a_407_can.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_can.c - - - at32f403a_407_crc.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_crc.c - - - at32f403a_407_crm.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_crm.c - - - at32f403a_407_dac.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_dac.c - - - at32f403a_407_debug.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_debug.c - - - at32f403a_407_dma.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_dma.c - - - at32f403a_407_emac.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_emac.c - - - at32f403a_407_exint.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_exint.c - - - at32f403a_407_flash.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_flash.c - - - at32f403a_407_gpio.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_gpio.c - - - at32f403a_407_i2c.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_i2c.c - - - at32f403a_407_misc.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_misc.c - - - at32f403a_407_pwc.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_pwc.c - - - at32f403a_407_rtc.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_rtc.c - - - at32f403a_407_sdio.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_sdio.c - - - at32f403a_407_spi.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_spi.c - - - at32f403a_407_tmr.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_tmr.c - - - at32f403a_407_usart.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_usart.c - - - at32f403a_407_usb.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_usb.c - - - at32f403a_407_wdt.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_wdt.c - - - at32f403a_407_wwdt.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_wwdt.c - - - at32f403a_407_xmc.c - 1 - ..\AT32F403A\drivers\src\at32f403a_407_xmc.c - - - - - Startup - - - startup_at32f403a_407.s - 2 - ..\AT32F403A\cmsis\cm4\device_support\startup\mdk\startup_at32f403a_407.s - - - - - CMSIS - - - system_at32f403a_407.c - 1 - ..\AT32F403A\cmsis\cm4\device_support\system_at32f403a_407.c - - - - - - - - - - - - - -
    diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EventRecorderStub.scvd b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EventRecorderStub.scvd deleted file mode 100644 index 2956b29..0000000 --- a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EventRecorderStub.scvd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/JLinkSettings.ini b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/JLinkSettings.ini deleted file mode 100644 index 5bf646c..0000000 --- a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/JLinkSettings.ini +++ /dev/null @@ -1,40 +0,0 @@ -[BREAKPOINTS] -ForceImpTypeAny = 0 -ShowInfoWin = 1 -EnableFlashBP = 2 -BPDuringExecution = 0 -[CFI] -CFISize = 0x00 -CFIAddr = 0x00 -[CPU] -MonModeVTableAddr = 0xFFFFFFFF -MonModeDebug = 0 -MaxNumAPs = 0 -LowPowerHandlingMode = 0 -OverrideMemMap = 0 -AllowSimulation = 1 -ScriptFile="" -[FLASH] -EraseType = 0x00 -CacheExcludeSize = 0x00 -CacheExcludeAddr = 0x00 -MinNumBytesFlashDL = 0 -SkipProgOnCRCMatch = 1 -VerifyDownload = 1 -AllowCaching = 1 -EnableFlashDL = 2 -Override = 1 -Device="Cortex-M4" -[GENERAL] -WorkRAMSize = 0x00 -WorkRAMAddr = 0x00 -RAMUsageLimit = 0x00 -[SWO] -SWOLogFile="" -[MEM] -RdOverrideOrMask = 0x00 -RdOverrideAndMask = 0xFFFFFFFF -RdOverrideAddr = 0xFFFFFFFF -WrOverrideOrMask = 0x00 -WrOverrideAndMask = 0xFFFFFFFF -WrOverrideAddr = 0xFFFFFFFF diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.axf b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.axf deleted file mode 100644 index bf4bbe712b0c9a6a6f651860e7b2c0d4a3940d98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175428 zcmeFa34ByV_CH#6>vs1|`qJsn0u2Om69R-qY!($2p|cP`Q9w~qK?4E?*9fSnjA@i5 zAR?}VJ320-;}TKEWn>Z*6&-XyamH~Od&Y%rW^BTeCWPdDPu;HD-2vt||NmP)@4e4l zNL797ELC;Rsk(KS?yem@zLIm!)SxvHk-8hITCe|F705+o=41XB;f1 z#aZmac8qK${*g5gHcV@9H)P~qIdvuq+$L)Dxk4JxQFZWE?otHOZ z_pscj_j3KkGX6P>of6N9@vLCO;cn$IE?A7mzuplX!^Sga;m?0sal?Ym3pTcVd9J6p zA+$NPv7$k*HmhpJFh+l@7b|AHSs(vtB@GKU9tKxQLuljJ1}`{f_G7Wy2(xO&6s*@` z`k{gi{`LM1EY|-}pt8OBKs%4kZ)35shs5jc%}wp%9TuB-C}V77OvYF?rftX3|Mao0 zajrAnXHmP;5hoO**6GZmShUWt|FT}sU++1~{lcvkb1KDb^9(}xO$9rWjMcS$KR^0O4he-jEe=g zKC`!!buH1pv`(6^pItGevR|cD*|(~_`L6cxtGqR*uVOCHuDZs_b7Gsze*5EarWa;^+kY z4Zxp;znU@h53P^sRQXWly)@Fj#RjjgbL(G3=M={Lys(Nzx%KNZ{_U9VEXw*mIp>zH z+MWz%bXz;!TF~g$wp*35Cw+`4S*2Ut&1}oum~YKEXY~HBi7WF9o69YELYB>8%^2R3 zqHX^-9$6oZyArb2jFO(u?B%X~-`H~20_N7f&@7B&8MhAa;B(H**QOf_;N$go*MG8$ z4`zj~dtBpguJ~k^@CPcZ5jlnJS@moK{Mg>!o>{HMxi=Hhb_0AoF#d9-i_NJ#uhNQn z*pkX%y|uo*`TMpFJFW197<1##gFgd*-WMxh+}W6s`d1k9@VhE&#`xFka^x1Q>kqd# zzw&z+bZpHSENm7Z7qou!`?ei@m5(qL|RmtYQskR%ge|ti#(_(V11=>InziYyNn!sVW#Y zswV6&V40WKRbkv!y94mWZC zOL3D~m3PJUD(wLtyWz0F2%|^b#9PE;Pae_hYv7Ce^|#k+R%26;#td!i<5y#b@Yo}V zOJR$~Cg%TS7n`W;QV7aVhqe0p4W&&wr*UOgvse}@ip8|D-OO*mpNyr_JgjJcbOvbF zv1wK3mhEnIXp<8MweRafUG#7EwI13TtCAkgb_p{JI{PF0( z{gDtT3=}qf-veP)&d8X)@6sBDtQZT2cfTuf1Tmnj$E!*?dyj2cYlttTSJCxhs~xltMn*YVq*E&DrVh@d8g)|7US8xf6LZP z%t7j{rr%lh-L?%oBk+nm$CNLsN6c4XEzp-&dN3m1f_GaZXDXCcn%!0WqB-Smms(6(1-gzmgQLesE3iu5rC4RH;F>nq;LEQb(%xsD6G*G6|b~(2{Pm z#x#AGV>kR_#5^Rg1FQ+BErcr#~YdnNyDH&(f6s+}5E#3sUtZ z;w<=P&3ak`T$Qv6u-M!qRwBMK;x-*{PX)<58hnp7KD`X+Bso4-)kJYGYp&M(RJG4NpOKaYG`aon>3H9lE z7Heo9VzoD4dqm;4B%XbQTcH~8%?^Q&UC(1z#A{w1cd&FcKZC^{Si~VS`G}%j6lWz( z_R595>4Q#x?`gN!xonK`Z->-8{_7!%2{q0|&NvsgXF_W~N9&;Y0%~y#Yv7|;>=M~# zH-}n~*5*{F%?sO0Dhtux^G} zUXaGu-O-)vNMu0*JEYijNB5;^GTf1AZBsTm&{k4805W47nTj--9S&y{oTPn7qCcTD zzRw-LE#RYm_e}8Rr|~t|eDK|yj>Kz_7y${F(+4e0<{3w3tt0bLqBncu%GW#LrKGR# zbYvDgGPRHipq*`w40anSGS@pYS35GZAR{32h9mQOn#_f5v?hd`?#>Q34ajM49@?tr z(pX1FIdlY};{iv_FoCOCh<42VGD z?`eEXjxgB4zAj%}uNC7;LdW$(VSDrHma2TpSGH&`p)IVR%35kYid>Ji>n7M4J3taBY;2Yoqq&l9p>KX&mQZ zbr$}{CKqF?(QlNvAHJ^OvNaZ)f|Y>7PG#*nokvd(u{6lGRStRc#Zd_MT$vZl{}+@bcV z{`Ju8`!;Sg(k_^G_nVEEx?TUVBT!!m&?hZD%_k7MSGZvIDTgOghv2PvbUN8 z!m%|GzNW0{w#(6$a7VQ@O2EcQegi?TIV#p*a){qkN;_ZiHLdy1nq%h&Gl zv0*DB>k3*{?5iptR?YT&E~3Hjr)I`HuB?_jn~Pdp`^U7n4&;}M-7Zh=BW!@t(6`c4 zGhz2d8GP_Ndp%j^UT#kKEVlfz-5n z&zg*f&fnps=)D{J#tF;o{|f)Q?uCc7V1u^jb2l5rFwcG$;h}Hi<5!=Pzi1u&=n?m@ z-tZhEA!4%P!Ik>z%&6-j{;2ktS%IsClh`9Ktb4dD5_=-zdYJV;xRv$7or(K%qC6xX zUbJp`H`l}NNAD@q$)}aZ<48~TJi>?Zp%1OQr)+TLUq1U}m%BXsk*C(>#I?xUz1#~g zWf~9mir%t3yW5Br_rgc3_RT0CQH>sI&jf!p711=`hr4^l>jt*Cn<`q|2fLLI4ZpRQ zWf=|KD*MAnQw%=%ZTKh?e)-*JN8qE)bKxT&d~`zIH@#oG_=JCKJ8k)`%b(iAd>7k3 zIwA1QKVQB0glI~AKKbZ`-)&tFAI+`&tL>u`vK(x}N2fst_gxGhsS=m{J|ofZE6c}M z{u$9neMi4<%-Ey3y2dr@$x4hsKN%y?_w^~wDIXGkd`E`#j9hca++LqwnX};VtKY^; zA`^B`&g@j_uKf7GgEwE8?~YzjQNM1{=)l)q;{5b^uhy^oYF)p|UX`E3S){!=ugw_v zuWjy=>(|vExUcq~f6++iGP)lWPF(k@bK1R$>s=PRD{;MBgw^fa#I+@heU)-;$zs2- zxl37Wfg^W)OG)J&ka^FMX-t#3+>x2;$Xo~+3o_3;GS8;TjB{iv(5uKy>Mg@QxVa^< zzqR-oMnnCEw&ow?&Wvcgu*+`RW}mN)9%oOd?XD@~oa3}VJFWc;r+wX#JAz$V6n&oH z$c#^u`PshKg>7~wu6kMQd&tl@PjY02q{)2Y$ZS27I?g+e8fT3&&Kpw3DX$$89`!kQ zGH|`+^x!GzrMnpCpchT@x*OLj@;XvR0QNHXIel2=NG(g;!(g#56Ec5FleyWEnd``0 zgRxFPD-DTz0W9`Tn#^U6%*Bq(d589{qqFWaj?7bOGNT>Nk+@gF3W@h_hj(QPuiDEE zeCuf6TaK3Q32RV{U*+hL*Zw%5L9ET!ie%C0{` zhJ1gDBQq>b=Fg7IXSmKx#`uy$>KcwBoLg+;e2+MGX^m^Pm&u-ksvWa%5AqLdRU7uN`?OufYm06~?=MHYR_?o`k zDPr1*0n4DfSlnC9T70oyyEXZgfLgNmdN%b=hq|I_1zN64qyE96eq8l2sGHNMXF1d} ztIm|Ywl&wUzw_qIIx)bz_13q>-CWX-$Fh9EtwHQkwdnzO=WTDR2m0s;bX&_2_cC0%PsU40e&d&UIvK0y0imHl)Yz1WLx+79;gu~tHTOzS=2HD!b z{`Pu3@jRog`J7gIn$g}o410F_3WKkvYXi30zUR$ZA*jD-*Xn7{TiRsWPk*Wx?Prtd z83AK;^(^+|p|<8HTicrF9BykaJ>1^>Nqc+qGSm%));a?_9;3ZDjPuWCT+ci>cf$T< z^Vt3E&7qbsbYIfaj=LdkhsqC*yaIbo&so+*g)K$5^ukk>`R&aU4~Hw;ntyqO=J4jW z(x$plTl31+_U0|PkJa9MhLnxsZseG!GI1pw>_vL@)^R{X3jGotIea!yj|4h+cp}iu z1p4`KWz%)IuA0T%t1Ayq4{thXO?0gu(=^@s;NX0}z8Zb1dcVnH;w7;<(;8FQztV2u zbJ?q(aJ6(xOap1z*U4N-;x*Dwx zLaU>jteOv-uCrWde^&T|gICwst)eGPtY&@13#1FJ{<6J!4W3%n$-7={&A(2x?S?H% zq;*bhg9mlkTA$gwy}5t8wV=AZt@+^LIQGrM1`V;sU3+=8HM(Yc&8)fB+1Jgy;p$n8 z-85%@wKXghvKClFkBtOE3Tb2(<-~!x^PzM<@2rc=HD=L z&UGNM(#b=IR1OObEiE5&{wdbz1=FvoA$4rzNb8&%t~sOkOp6ZME1h%DycAC%=($V? zS8XS~w@>SJ2li|Fz>)^NSe))^(f1E;V7;C!e<E|@D{CO3SGy~=4 z(E7dYqbBU;0k+4~HaBPo!t+>3*P5}I6}TqF<1DR(?+s^+k6Zrw4QO!^nVPKXfP7ouv#g7Rul z|6cne^XeMJfylga)DZ1`&^|^<>WoE1`R;eKwW`cyE0?2&T0zZ>eWl=Desl6kVPt(< z^RgD)%_(ea{v7wj5YIRt9p0*0rx)^~w&rmy43V7OqDhW-4|N4Pa)_6-VBgr*y!eog z^f8&P#53cz=4TFRNFyz6&2=qW37+8sJ#vWFRy-wqlVSwV?sTj+z481`Z*027)z&-@ zoZhW#e`j42aSi?=dS!%HG*ljBqZ^yP>D@279Z&TNtBa~P?z^M(-F>BVbNH0}tbU>r zS6;nX|6qftylnTD5LRC1-j2O`pt0!;&JObfX0)(+x!~JJmwTdx*KFL!2Wx}ZAKtr{ zA7%&C6E{~?VYU9$#(g3%X(}v^xZ+i`irNR)gzokj8T5S3jxin2VRbx*)#Y>8z5nuO z+UK^$!Paih!m)78-%v*}lsHbL+=G8Cw-*0casS%>*=)v4Bc~TTdEEI$6B%;};>j;6 zMOs>v4^CsGk;@FE^aj$}Duyx+#;Qz-_fH-pUOs@Ic{8t@#{0t!pY;tjXRmS$BpaPld+Reh8}hSrA98bn@b0^o@+3T zPs(t!A>%HZG?FdM4rDK6wNiFuX=!N@t3{G8Yf4#dMn(o_BTL7PyM@)FgSF653vE`o zbQDJosjdyv4K<@s|mnaD82Cgt)*o0w&y)sE-#H4{S`7P5p;_ z_>P9lz66hwCBtI?P)fb_;}4C=)RL(jwl%R%ju*OC(;+EHG`()3h1ftB{O0{n4sN(Pxz5@qEc5 z8#5Qr1UvPUB-&_13}<=9e4$1ZDc;bE)`pU zI1-D5!!Q`nf}@ENql9yg%^wZkJ|gwhO3DEu9ZpS%I%yw~s-VuQf^JES`VGS$g^m1{ z<;PpVemotb!?H$M7V;Xz1&tt7Qe0FB9U-HxZY=VkWmy3lOQR(vJXqL96=ULoPN(Ot zg*H9vud5?_WCd(I+%Pr|2c5A|l)!$r{`{iCLOS28{;^C z=!k@|382Wq3DttVucM2GB%~%X5MuMS}0UJY`OLk)Xo?zeNUb$XW zHx7>?wMO*Pw7$bFBVJcW!zXLdcpF0yH->{B80{KyK*&ov>__}N4Zp;_ESy%87&C|3 zlj2gos3*<`ar7ODHL8&F!ci8cAv974682A2G)5wkT2w<{V@c2;{k+d`u#-HoQ~#_G zaGb?aXN`h=NnIRkkkpSwAUH~zm-_O(2bS#v^Cr$tzw?6v7inQo`$2+Gu#LLAjiSP#0cyIM+jyFt0R%> zpkaju3NbKb8N)Z*>6!r#*H5L)z9^Q!gV=uG}M6wqx zwpz#K7PT;^Jisp(3dt%Hsz#w}aZypxC<|Sckc~>juM`E{2W$mMA`+>K+t^PgfOrJ8 z1rRUFAsB-JgUliip
    j9qpA{rBHjMW&Gau)l4>$eK08mE>o3O(WPaAn;28YgDmz z0^C92k;)G)I;8c`n^7nd1WxED2(0`g>41^;C++!ZchDZs+IGoI0_c9B#o$0jRS~R? z*o+i+B^Z_Zq(*|0#numdM5uxi?h6@MaZtj)NF*y{BAhV4sRDn@8a&81*s{y0h%8!F zBUdOY6TL7rP_93uexV%zv@-@|?Udk(9bT0B60b2x_7hmeG(EdZOl=Q~WaQ{XT(N?U!eYMx1aP!3F+k!SJ2S#HJA# zwI?g+_j^5^{Io_!R*oMoIsT_45)By%leM)c$Ie8SJV)t9C>lxX;O%WTz&R_67CGl= zv`b~PXO9TB2S?1FU1nFLGDYkvKOOBdJ(|a^NlTA67O5dcO`6cLfa6ey7#(i=G*Xjq zceF|_T?sn*%c^RO048iB$Im@JSUTvF8xllpV>H2!tX)MY`c+VX1a&xV;jr}xL2!5h zo$&L!bq&%{Ks=2O3!X#c)Eqoa#(O*`02rfmzaq1*594R9k)-LuS6yl&vk9`h3Za)6p)o`OK8L zI3+F8VO}yiE<0~e31@rLkZglWi=89Ao+b7XPA$J3m$5)}2O^;pqoOf}$cO^=!5b*1 zhwKEms$~OPfN&KC9|lh=J}l!C8`}g{cEpbn2>1gTx;(i>qEQmV5m{Is9#b2Sprv2| zHOO)b^8Hpc3MGm7X_xax28SJA%Feb=t*WSOi)69*;J=JjbX;K5E%k(@FA{M|@oeh} z8Whh79<&yrSf(K^Bu%OCF}bRuG&yVO#mZ_=c=RQ0 zZDBMo5^IZ@;tR>t-i{$+*H@6`*hjWuPr_sB2?TOREWDynj-6x^dJwd+tp*kp+rH=y zW}=$QVR9H=RiU|D6~s-kO^8W8SY82^A% zy+7D9hw&~2L4Sv~xMyVCS;w3elTNxg*4n+oq>YWVmq~wqK^K|zm>+%BQKNMzb zzO0y8T--{#%q&h}?5K01wX_|uQkkz3}iFS`_OV*<=M&i$&%d}q7U+O^&7}zn#rTC(; zpb3}CjY7g-W=EgOh7x{{w71u-b~Y1A3l>G&r*Sfo^y%t4Y*3PPl%xf5HqvqaKK7`H zJ+xrUrp1dFoB1gBB(Dd$W+moeBhhg{k@UNb5U$`#*%H`1t+ZLyWoiesQP45QbaO=O zCVYx)gefD4XZ55@*R(??jvp4bE{-e&kB7EyGD&CB^B4ZmI7~Vfrs-^-QqowM-4^!h z)Kp_+<0(fqg?eb%w0|LPGUA{GD1Zs(Y=`1@FNsw0GjSviY^+oY7-MEax%@ixtaY8DN|K|U-z<(|9Ukm)#0{<_!Ktvw0lZ{avjg9}S9loti z9uSMzr8c<(YL#H5(w5RrqAC(ku(#piV(O8~8n=&BGL@sTcqM@bE>tda6s2_m==LzfT)lxr3jT+_C3krycgKCIF9R;k*sY+UWE!BHOW3n@EmHJ0jRDb1sDN*loABV~3tH0AjX9QHUg! zBubGaU8?>c8HoRwhX)>#hYT16@L~rY+=F03-AEjxMimtJSO__eg2b*-NHl5$!Vati zh;dXwPi&|i;T0iFIsu~7ZjlU8&&3>bsk9+xL|Tt;$S z8L1=4Opd^t9085ZOhS7=oooa69JOG|I*#}Jt~7TAmgCXc;G74_x&{y?*@L+Bk*jal z5z^N=E@|3a2nCZq&O3%~3L-LXhnRsTs_)_`a8Wb_olZ#D6(MA+m#~`?Q4)4PhEBV+ zV@5RDo1%;2Q@NxQqWM@Z0fSrl%#-RUBh{1{w%3v&3{QHKUQ2NYd8d;d@IKooS@v}B ztLYF(hJH3wxa`13=q9F=YdDnWN^TVLjuWXzMKH{~jFX)auryVH$K_b)O)%+EyP~Tr z!9jk2rEPWsu(OgS$^4FHPfY(Fj_T5pQMd~=}zc+jHc`v)2$;#1`5s4?oK!4q|0}lAYl)u0SS8^Lk%e@NR6le8ytst zQp+WZYPs~%v{TC^ipk|tQj+u2o4#BgXL9|!l`~}##J8WO`YqeBkn~7SM+;&0*e=L* zmKKEOF>TaQG_i&X=e+BpGqs-XA)J*H-H{%0r_4ha&BOorylkKR&Ez`ODRp7=spT@u zsfBX9a!6}IAa!W8yd}=-|G}A=T-Z6e3fhk9Vy~gW<2dSAVNOxlE!{Jz=MP$ND759u zBZHc15YBRzC45AyUqND-l+LsgVJ$&nNB20Ml}nnfh^%p}g)Kje+UxCfQ2MG*%J_)f zH+2yo)s?zal3WMuihilfczYf-YJt>H%TA54oMepUrtY2c zl6$9=prUrWbd0f}9b>7nL_VMx3R0na+IozWqKXuIJ;vEko&}TsvFi&u_|!T^)KIJz zV%nxGDn$v`du=cGQlVO$GM(jVwYOrVMTH`yPqJrrMc>p2E}_+dhSQG}B~Qo6$dOtH zxR@QG15-jsQch6q(SDBF8>HG(9XK&{l7x;iTzmN&oT6C<=a7!9&M9eVdRPxT1|ym9 zr1aTza-tt{YMqi|H`&^7uiT(Ac53>1d0Nte_V{o;VxM`*y(7HX9G^k1A{&mR*hmsb zIo*U=!j64qbEQeO_V(*Pn~F}1L*sFGHEMb!H?H6|Xs#r;zZsGV+uuxkzIh$Zm|$jd z_H;^}J-+1Z$x2Qanmzs`v{&eWJ$th4wIfHZ9l6Ps;#k)T}TImAHMPIL_$`2Kiq+T@6E^D5qqquuaYm^xw3t-YI3|%8qs{;oOzFbZ4oR zrGx1@jz->gIgWEW^2(7rF@aGY^A3X(7wEP77~Q4m=1H44Ml#0jNxY0-xtCx^eDSy-%-WzB+ub{2Yj=E$0o)|5Ao#Kk-shL z{WSI^VzJH?E!vYAr-3GQFV@O@=!mjKKKhakn!+eD!ZdG4FYY$d=dU2^=q>X>aVkH( z8>aX-VXS8={-v@XG)$-eATe8??ISgQ-2O|nlkPj>rx(#u+ao*vUyW5is6CqR$`2OG zWQQr)SO<_-_=2l=owiIY)t9&yyUTFh>DU>p_&S$_t?aR<(QN<1j>n)CE4hU4j@h5Z z_{co?l)r7CI(|8}jUl6a^Li&{tiX%1WxiaBk)>jZzSsqCS_z%S_~C}Na*X+__;RgI zEYp{|mbe#t;6bG$))n7d0G^IIRKE<+f9fz6MGFU*(OJqS`>bdK(KlKvWt?@ekA)95 z9#1Dk*x!|0hq%|fGvkNj&~_e!W`S4PwhHA6-|_7LGP_vvq{Rb%$Rw%b8)?hpRs2qE zg;=iFxt6(?dX^ZAGY~aaf^SnMGlm_<=87lo{hxWDjtxJK9u-Sla+pDVPOJlI@nYK^ za}V*N_~(QF0`O1nu%4FS8!~AADc_;UR^TsXjYzWt`Mkn+OgoIQAg64;5apxh7Z_4) zy4yIeu8E3o82ZdcIXkKezsYHhZ7fFm6+RLQk0bv(2#rQ%e5#7|ho^XnMjrNC-! zS8`Ke=hSoH)xdO)NsaHAluNE#N*2{e^@-#Z{ZWh|6%&7ITZB9Ixd?Sip6Ek5;8gzc z9ehswojdUNOu<|7?YXP;{{TEUh5ls+I!H(Lx8wP@RIT={X)QF1BM?^%1OW2L9CfM9D>=H`On>Ma=j|2fZErlFCndQ~gA^~@jo`>|`h}cZoo5=ISziYo^9CXy5I({AY=@?h3<2OJje$uJVmA2h= zX@g?)Z3?b2acXpM6|k0qXLP_bJK)(JaCHZKWe0q92YhV@T+;#1O~EvVD(v^G&_5No zHMn+r9XK^^$^LcVT?5%7luL6KmgX#2>|W(MJLlF-wttA;2zoWi=G?N_y~MRtUnc6b zRb1{Hh+cv(emDlbCWmc$|AP-Ve@cFQ2YhS6r))-YPj$dgr{Eaqi@9xc3-ZMOEa>ZG zKNc)DmUx!Bm$~Zn`AIkgUNT?#L?cQ5dn z;GL3l+Y;y;o5SA!RO$H!G>Wm(oZA+IR*A96agkgMwA9!bQJg&QQXk?ebmGSoJZXoS z_`(T_OQfi!*s7om$09qEsTM_c3jTP=CBSZpCIEaR5xMkfs-N}>TIV$`dMoy0s<^== za3|LOK;CAe%^iUT+e3h&vqlX<5~Svx+ZR_~*A znkZ{8rP@wcBh^?YS>$FahJD1HH3iAf_;YRN{*|r`JU|}}zYgK%YTztDZkSJ?k?VoG z6xhg(z`Y8*%gw+V1>WQSz@rLm;<*93Zo8Qjyw8JyrxoP`UL1Hqfe(2};1vZn^MQfa z75IpU0&gksF&`E{m+bERfe#OCQeX=o5%>sT1-0`D4+lO0kVE*Cj}2^7;E#NK;0u5U ziES&N82Ad{DFWMgRp2{-mkE5v=LdEH$YFoZ>sSVrvMCa9KPuralVy{;Jk*NxpO#YA zQ_3!UzY8QKkBj*lz@PO8B#$5_^r5=HN?)Pn`~?*{?q=ocNCWXi7t4{B~LuRx(+YKD>5SD`f;_vZ~#=pl^<@=j6c zVU1_!g%x^4<2iYi3O%anxp@;6dQ9WNybBb1T;pByE>-9W&5b=&PCc&a^=BcaBMo5X zw)_2S3=7LN`y-Lxmcx2p%cCL5Vf{waSl&W~Uc~p--NNgd);aGZh1P2#n73V_-)g*j z-nR<9q4E5@pA>pi(|Y8^6nabJ1u(#?Sa$SA&42+KwZI`oeHR8`82nZueq&2YtZA-1e6^4*_Xmx8@=6uj zqH!bdY=u72ct+ku3Vn*-E6kgv&>uDK&AVQqt@xS0q?fm8qEjAyI$iecGcxfqg+3<} z->cAeimJyH`hueB*9!efxE)TkEN zqNsm|QMUv1CUToJ>i1e+RFQuqqwZ4ZCo*c2LOaN)hZWjMM%CdOIjmh|)J_WR*0?LL zvqF0`?oJx~ADZULD^Rq5l2Q9A^e-~%i3?y)GHNg)_7jtJcZ&K@0@pwLWju2w=2{_lX|5>hiOtj zpiryEyCofUM00hAGw#EOUhs{DemFxHfyWiETd=^h0PBd{2jBgGZ~PN^>l8Udz!`5V zlqukhcNOvqIOAi5OniTK-e(GR5^%;>3i$+_@ppx?1e~!)A-_Pp?^h@w5bw@9mMyf5 zyd#R1Bj5~Y<;oSBndicTBkBA+0rTV6oo&=v!2EbhXQM6x@s76{Y!noTcf3Jhqpkw+ zK3Jh{0C33lu6Ayhn0I^%feg!E>fyL!u89xp3k@5vWzXgW$v^05=hNlyqW9dLH-3`Dv`06AyTJ{ zydM<#avG#FkeM{de<<248svV3X44>B6}o~3sbeXUaa2u%q_0nuXbuh1F~F7h=GMGi zMZ1cI)m@>hX;?)HT|>j_r_i+m%SK3{>jajKQxvM9xD6|GJ;kkK)VTu7#u!DLN3nU1 zLh~s$FHqpJGsWgYg>IqPbli5Ukjuu$c=D>> zF7n}w+eKip;#~}9+zGIY$hfM3GnRc|;SD}--#*7AO%&D>B5tcfcc(2It7+NzQqk^7TQ=^cW#cE z4Bi)=wY=vQ?E|v2GpRo$JHMi6o5{}W75a$myg{Ll$jM#_Tsv%rOevm3^bS@@G<+$%hRymlqmMC141qDIEka=xO@aD5{BitEg-iWQgbfdYU-M9$D@J;46o8KqnIv%G$a8LxGv z^v=+w+lS)bl%AzehT<$eFii0Vp!hU^bBWwjD$Y((3~rWJp_udVMa9Wsch)s`-Xulq zqT{4AO`)KU)!P|%S6$1@yHe4*=~yD1b+EgRC1S3kr*Ux{)D6avTHoyn7UR5blp8&2^$qHx`(OydbYfJ*>03-NmOp z4Iv)RvcQr{C;S1p90j9bg{aZ_pg~iepM02l`8D(A%tJbC>daX;&bfTnW%F*Rskv_M z{HgQiPoF#ghMK9@%)CmKFPlDp=#bg?rHJX54GWzzXdWxS?wXqGuAO!5{L`$`xz|_( z=Uk0nq?mo(Tx;|-GiJ@4iC>&JdC-u-*5vE1yZST>FW5|wfu zZL0h^3j5b6rcRuT-?F%T{ye+#1p5ar?BBPTS}}e8^sDDwd)3s$FH}rTrB0qTZ~kS; zQJr0J)(NHOo-J=#MsVxyM+{s$chg6rZ^DZcN zR8fVz?^!Wx#tm1TeciPVg=*y;(229Ioq65`PCeDhJE7;@Ja6)x%dc_>R4H$XR?M26 zHWI2t;2=majcGbEx&x*2BE*WxW+SD$Joh1|gYN!m&q;{mmpt`d@1s^$d@DkE%Ft}w;;b0`QMSRL>@X#~R^q2blRBRleF1aD5Ty8ie0$)(6K4Q2 zaZxJgI&qV%yg#+_AL3P6`5sk@FOX_tCsM~mn*=S=Omx9o%*7z2ni!2#h#9mxC+36L zDsGdchmkgp6t5z?=K}EwvdAyQkI0^SkqdgP6lviihVsF-X`TN5fPKQz?T7{wpiA>zs45AvjfSW z@gPmS&5dG_&od67LKJb9sU!84fR)Y^qL?%9DFC^+ju!X|aeRwrZ*G<K%6NJFp8VMQRGrGz&eG>$N+CCR89tPnyJ7~%9xFcHkxyn`GG=} zWR6c18bjvTuFzOA$JYvt<6SV@Gk!(AnaB-vb|UxwsHo?nv%3J^B{Cidz+2~WbFU(w zPn|ue&;``l!wOwUoo!cW3ciQLbRj-u5M0E$Zh95En7STN=o0FB7lo!$*PS6x<3Yqw z#zb8Bh?(3(XJ>M6H^n;}o$Uc|9g(k+oxOsa4tWmuv!tpkZ6`fKyw`I-R9(-##Y)vY zsOk^!Hjx)dRr9&&kZ(*=b(5`%F5JXzJQu2N<6gY8V~;fgRi^^Du;Ud=q^d>SbjWw4 zsakBSqAM+NCl5l^o!ncdRN*;_cMQNpBI7v{SXqj$ef_=PL9BxpJXGYw^ngNvl3d&bvd=o+9V1 zROnY+GtB!HdYUHQ!wNk^6VHjsXF1(@$vB19i9ukX^6m z=Ie^QjvLI}pwMd+?3)yNo#y_h3a!V_Yb3k=TiGb<^gPu1XbUn3v8#uD4ZuG`1ix1i zMds1m6vA|xknalcX(!~txkLSh5DDUw{;r|&lIj4MSiT??xlRbQbxa}d}d<$|7kzZ8g7p1bdq3jmy$6PPIPD25Q{SpJ8 zwv4#nq+0*?ssnE(RniHAPkWr0K2Rz@kSa~=^zI;)A4oGum2fn;Un1@=q{@@PBzyUV zl%dPLyGZ7XE2yv1?sf|eB(p=cutRd=C26~b9kPWK?r(|vkm5chx$D8bj&vWIOSb=v@vz?R;Vg^WbFaDn(7$*0~y3 ziiD*|SM47C2x%ze#jsB|dJu9Bp1QdzIE8+v9ug*2S0(YnPvjTpfpbU>TT-4CD#o+pu9jUW}7 z+%WJ9VBSH{oQ2>Lc=YAH1fUxM+{5zL0rV!IbIrRBfUXIIiwo~J05m6ro9kWUFd@6 zAtXOzB8V=G;Kv^p2>XwLVLYPu*pZ?5_TpP|KK|r#T%*kjgMYke~yYfe7`|)6BQ48=vO^X zg~Rv~JpbjlY2FL~3I-n0@Ht-v7HPUSUxC{-!`nxJJ2cZ9Qed%$)#E)#>+Cc1N9V7D zVzM~WKB(;@gBM0D8dbe?EHI$wN&^ak-g(i_D-q_>K8 zqzgp=x8`mWJ&@Ll{`8)c7>1OKGmvUx98w|9MXHNwNL^w!Qn#3k)FW;~YKRp`GsJ^P zGsRO#y<$C5Q*1`sNqmjeC;o*L&+B@?{~{M@K=ehLErue^5o3|&ic68^iK~%z7B?g9 zB9$$A~6bSFEI{j zvA6_jZ*c|EK4KoyzM>XsiMShSKk*pS{^Dh%1H`*X2Z}!-Jwg18bdYF8dZKXS5r0U2 zWBp*!4do$X0Meo245Y)vSfnS3^N^k_W+FXB+<`KCn;`IJR@|N__)2p966(W{{58e9V^s4idndN9H;O@aB>Eh5~r=$lRd7d)#ks zQ~+-tnePM8Lwy}@9+^KX3f??2_b7ljk4&7(?RN0yk$FG?ym@4{D1bMQOoooi?%>TM z)1?63JTfx@a0{8~c=O2g0mvcX%_B2g0lax+b_VEAY<(};0lax+S^#AP@aB=( zA3(N4Zyt4`lJ5--v&91je-|Vs^U*h5(_KLJ5qc;_2DTwHJXzGPWYJi%tf!P+EQ@qW z9v90v4{9Ph)KNZtb0U*OrgPsf$XY@i!(X44;oi)rAC2t3X$^D0Gof=A36MOn+& z=G>wvPjbd{Y8B}zZtSa> zdciKVTg2icE4HCRzt_{{Jv67+xyds;_*Vj>JrZ6D%WY!51+01-M9}s|MHT zzSiG?zm(;i!U4FH{TaCM0AvnR;VTq8_$%^*ltYC|6bh&?9fbiX;Fr;m#z@5&QAiid zrND*1MB!{no{iMcK^`Xx>8%vHxqy>L9gX#EHP*KiV0G}cKyK7oWB>m(Yh zbuM5DDLYRT9z^*P{6X2nr0fPLla9MVy3}^i0=vAP7;chfmfwi+Te1-s8D@Hq08ZqO z$>KvO^?CwIH-m>l#x+wEUWCeDqppY^T;U@ltY|(8jk0N+PjPOP$}G}Q)8k>#-j_w` z4%#|=>_GVjd4m6Bs;%wu4=`+#McQ8W$iwz$uY~lDEX!A~*z;-hDJ9o^#e8B$Zz}wb z$VNGw`XUJ0SmSyW|3bxcGgqQ`7)6{VjHgicLqfZRU5rhO&fd_G^8TnY*|kW!;;#Fn z$myWBPMyaGMjyuL@j(G{dVFv)a(aAlHgbA=FcbM=G8o9Jak<;S?S3mplL3iZz_+Th9Y{bf%+x^z)U=g)GyvZYKZrd3dJ#)i$4K# zu@9-1sKv#O@DCul&PdgrY%!CIZnAbT)rzr5HE|hIA#OzK^yq9Z?gD1w38Y-Sic}Nt zAr;~aq`KIF)Flofbqnu63}5s>YKRk&W{6UxnPM_huebuKDQ-d9N!*3hC)Og(V(z~q z&^>g`aB&EFYcwM)7V?Z%RES0LF8U(weGRNHnW(t~S19iSbQb^*a=LxDn44P^c`3&^ z_%nr;;V1meFBPhz8+LzHXgSy1<_`+3pj&ji6}pq|kHr*PiQBp6L51$(n$K)iXcgD| zrglQ2b9Zws+cXqf&9z+9r_eoI>ulyKbT8L}W;ccI<61Y<(N!>h0p{L0llNEY~ z%yEfA&yqQ2DD)heV~#?=e28V8Ki#Le3kc|RGaPN4&2 zoK*@PB;(w#P%|0lVTIykoV5xaBI7)(PzxF7MTHKNan>o+O2&Cpp(A9R-z(Hc#(7_% zb~4Tug&3Y!n4c?zrx%^fuN1;hLHo?VDTI4mS>{fK@Kc0-^Ir6s$uT7gh73zf7rp;o7e0Xiz z9H3AZK0;s)QOJ*v5SXVb6wr7NGptay#(SD$6v~kwD99+!fIquw^lYk|<~>JI^KnP% zT!0xw4oP?S(30jTzzx8pIV=tCcFa+Tci)rdD8jq%NptkVyYESJ6yx3Zq&a%y-S?z9 z`rzXQNptkY#|x6?D8ZZXNptkWoA60<^v9d)rmdIyI=TU_!$T&|aG@6X_yh4>^oO*@Eka6Bn zXe=4$_X>?8KOwmTbZc{YxPfGA& z*liEM8$_lThIDa>X6{$yX=Jw+g)Sw#G3^5GZtH^HWDRgyO zP+cQ~igj8CGs)+OZ(*0DhqI_b|3^p+7WfRqH$1+tf#yLA9xcv9hDVD#P~+K$WH zyqkqFT-=~#@J;}?;4^sG5^LUts@;V!^c?^ek?)X({)J|)Qsi0eZxYxkfK6EZ4lhQoMJfndbqP5&1dU%u3CCO_5iTKYy>#-Q>>?6j^C3gHuK zS!NG~@Ch})*-s&SLM>pPt`I(yD{8sZ`s(8Ocqq70#5qXDf6rUKItH^(+MsHE*dusG{g?^w$S19yjTBAS7M&;@$ zE%r|>nDHlSqDi9{GnzE-y-ILDdhigy0V2Eb0c>3y(9EY586U}FNw>u{otrN!8a|Tc zGT%@LAIWl?8x_JwvOMM=6v9Wc4D$w?ytqtO)J}qVhXU**a<&|@PnaVW z*^jrmlS2*&`W?rN+-&d$MKM$bg?Fst?FLm70EQB|w^Y?#m=`N@4^lN#p`HRxx>lhA zffZ<>LY9Cxmnu|`qxJ`g5_E5X@IIz^PeAvc z2B3HB#BkZYLBf1RkwetI-zhX$AiSJ4dI)vseMK8e9r~j}!-VcP|Dw=ILeDk7SLkG+ z2hD#fbc%e3KI7aRv_Db|ME6DtZ?mF?(Y-c+>xq1p>|UubGlnHRTu$A?_fXoiz9OxA zqp5rNo@bj@N!`O&;o4{nb#ItLW2t*#g~n0$#w&ED-9380OiU6XbZ?UIUZ|+&p?jAC z_;W#?CA&9Sm~#~Q0{mvUd6PmH;*&h)VuhyQlRW0V3SERx@+2*LF*$y%qFsW|?wBtt zG!-AKN;-F%aA%tDDB7hI22O}yMq#j7(W>yN8}l=TrVEj0exuL~fz!l~3SEv*b(s4U znrR!LDHkKWN(_Smt`goOih2zUpkreYz~cdNlQh7!A~}#6ffwAeK$mOG^#V5`x+*l6 z=IQ{2=+j%~aE1O4>fQsqilS{F-`zR8Ip-wVY(lb!KnT4<2qkn8u|X&zHbf$z5Sj`C zqI9HKK(V1>1H^{CH!Lq=!-k#LE-E%`h`sW=@7aC!oIreEzxVyV>-zuCl{_=|GwqpY zW@l$-cAlNV7CAuBDQuBL1kKa}8IGRKaM5lYLSlW;f3XLLf3s>G7PDD6ffATkje*I}a+2QL?E8)lMPdZbq@gmb(!Lg4_=TabMbj+$p z88jAeWa!eyva~wmQFsFuKK2o8qSxI7_%PvkzCvC1eZZ&EunFe#FB4X?QbvJT;W4W= zGwb!pTIaQ%c^SoGl*g=kpTW=F32q%eGU)Q3WBGU?WGgd#P8Y}5(BCF}fl&?q8(3>V ztzuol{g9FBTqhZP$PBdQpzu|#Vn#Adrmeq4Vi_i*m4xLOCi7_UlN4m>*g+;iNu8NV zN=K_-2lH?(Yf5Kgl!}=kvuXgNb;aIIpvM1J$gDbw(T|9tA5kOv5n*&z zmwGj;#xwdUQS?)4L_bAGFENLGNL8I;>YjlmKJ+e~_*5o7J4$@EB>s}o&(0_d_eqp> zCZn%6>+>CcUD@?ILH%*Sx^33$Bn?&o>&Cyy)UB^e46?YKS-c*V_lm2D{DrjZl5FyY?T5?u=Gz6`(_b8t@dr5Mt9xOAu_qyu=I&tol!cPL+EIR_RygXcyeGeaZhVu5q7|) zr^6b~&ETJz_8X;QvB|93%|cJM>Nmg>fUeld7Asbt2Mcu7PPTN_UIjjnSxgVAmc@7Z ze#TY9ca1ioLuYLPxfR+|r}AB+sd(22fND_Fu=3O$pa>bO>3GfND1gQUGw>48RDkvb zr{E=`vjO;qjGBp;h_d(+(Lvy-K4#Vj@QiPpVq3l7G0nr(bTZZ1pxD$H z2M1>&g0L!exemLBVd_Ot>_X@uo~8IyhkeB`;bL!Mm*)Pgxy}mYoOKz<4LuQSQ@pM@ zEpZ)-Jq=HQ=4si#BU)F;V$Q}&CZasXumzYYnsaiR0PC=Mg+@+m0rT~w@8Sg?om6#W1S4zB;6ryPJ93p0iBC?##^NE}h3OjQ1ec#LNe?&y#o$8QGV>Uqt>Im_91D+gc-@07Q1vVrv5t9S zxz4QGN=9GL9C|9cNv!W}*wiud#E_j?^)-Ws~a}AUk77Gg*5m#tCB2a#X97XKM8s0NGlkr;3B}fOml&T8vvUUp3lg^tGB^W z*_>J2n7>t$-x!F%GV1Cw1~bA#`MV{;LyVB$3KvrwX7~`!WQG|A@y9a$Yx##Ff|lns z9e=jOe@(|PoQ_1rh{@sPZitliD9A1_%oF1|=J@O-@O}rDInl_z27YE@PKssU4*#Fz zPmX850Y7syPe=q4kriN=!?XG!??>o8uCNN;?eOAqHQq*(#f+6$4v(2#AbO5*8t7ek zQn?N;e+y9v{(|=q%&H|v1NO&a%RZQ>qJvq3Ej-2Hr}hJ43%F+n#s|@iff=|A_{a=A z8hBJ1J2%#+=-9o)zjc_EZ)BCA2Jy}yFg(>5PO=?HbBJyB$xgwEn>p?2WTj)qja){e z5i0i-gcyJ(dmh}=;9dlG1>BWzuY-Fr z+=t;_0{3OOm%{xN?kc#u;a&#U@5`O`(QbRV3l~mx_lJ8r+@s+xf;$E7Vz^7;E`fUm z+@)~ugnI_u&2Z0z`##*W;Qk1AIozE6DBo1K3EcDGc87aD+#zr;fLjgsLb&tcUIh1I zxGUk_0{3FLo8Vpo_YJt0!u<;FWpEWPqRZhH!@UA-8Qd%3?hp5>g;R~}$Iu{Iv9P_i zyTif98yfBuxOhXuJp(S@&~UGUi#Igfd*I>?4fi>?ctgYe5H8-(aDRb|H#FS5{q-9f zZgaSJL&NO_7jI~|hr-1HPj@_AyrJPPfQvUY+>7Dj4Gs5ZxOhXu-2@kJXt-~}#Ty## z*KqNMh8sITzoFrlz{MLHZfCf7L&L3vyKrG&cQjla@N{Rw#Ty##IdJiYhPw{#61We* zT?%&#T)d&-ehe3HXt=+_#Ty!KodYRvU$-?}yrJRl3m0!_xJSUn0Z(@_T)d&-E{2OY zG~6rT;tdV=F1UC@!+i!W-q3L0hl@8f+#lfL4GlMW5asRbHiC;cG~BLmuYfxcF5b{^ zN5ka-&)ndGIRcj>IE!#4TmpB=!lB^>7JI;S9{|U2w}6`Nc2LXx1ys3t2XjCSF6bC; zYt4ZTw+E={4g$5@QJ_jD~sK?LGpU<310X>%If(x?h6k zN&44J_jh2!&F+tK-Fl$5+ZxnyyMty)yltl2AJ}k@0*$%VptgGosN*gHjpBW2x+{SV zcO9td-T`X4kAf=qc~IMZ8#Idji|OtFHr!u9O*cM(vFm~=w*_d-?FwqU2Y@;v$#teX z4A^k1K}~lys0>`OQKoyL4!c^1-N7*TAE3(J0vdDQ1-0ETK^^xu&@4AuNxjtrO}K49 zlWtGYY_}3L#~lHh>rMjAb7zBk?lRDP_j1qz_a@Lf?gr38_gT;)_bpK0-2s|%e+8}U zCI{l4>ed6T=e7Z@@Ad>OaVtR^xFbMI-ASMg-Pxdx+-0DR-OE9nxHo||bvJ-EbDsrm z?!E=u!rcMd()|^*m75%dJC<7yw2j*aw5{6{w4GZC+TI-jTINmy?cmM^Eq9lJc62WX z?d0AB+S%Oz+Qoeqw8DK0w5z)Vw43`YXm>X`7!Lz(Jb$H?hl~0YY$BZ9sF}eL-{G zA)v10eW>MD0UPdVpwTrj!g4Rv-0MN35(_MMgXTV)$vwex-`3o(Gr7lGu5}3Wtq&UI zP~UPZH1_~<-NQgF_c+j~XxzOBG~r$gnso04&32y#&2irZ&2_&7b=}>d zd4@;RlleTc_UMt&LFZV(Xxba}!HDb)78MM|`~R4A(B5ECBY+A9ueIjYYC>k zLBCuO?G5@p1kv80-%k+j4f>UWXm8LzR1kJ^^8FElXm8LzUJ!P3>i81{(cYjxT@ZG2 z>iV+;VK=APKV490Z}2P1E%pYBmP;t?4HlgTkds9423@TiE&oyproBObjUd_^^luPE zdxQRMf@p8hzfTbD4f>A?qP;=?X+g9%=x-53dxQR)f@p8h|40z+4f@X6*d=M+$ldJGtrBqP;pHr#jf_7jl$nPQO3v30Y6;6ADem@DLy+OZH(AQMzFhR68=#LOY zdxQRQf@p8hpCpL(2K^a=Xm2pBe%c%K=Smpu4f;z2(cYkct{~bQ^e+)adxQQ}g0Q)j z@~;y_dxQS%g0Q(&>^~rg_6E}p71|qoDHqy~h4u!E9+SARH(2xxz&8wry+JfamhxYh zVA>n>-xWlAgZ{^YXm8N}N)YW0`acMwy+QvEL9{pM+lPe>jPpy5?+Wr@ILuE8qP@X% zL($%#-$=shz;IYvskArfx00|T7!LEx1^KXQ<#!j9g7GE4ub{fv!SgEx6=PSxKU@&) z4f<7r>SGJTuNFjmgZ@c^Xm8M;DTww4(+a1(L4TfvHG)AWf2kna8}!c=M08^*M0KG>C-u24@vQ8nHK6v|i$Fgs^u2tYYvME$m~;e^`Par?8I;qP@Yic(ga@ zKQCdlH<%XhY3lhE38TG1{|!O3H|TE@M0a;gFnGwa_V3C984gFB@1!|lFu#CYtONZw9Qu)3F)81gZjxe`WugXv3%_6GfnC5-k4(>JWZ-e6Ir zKH3}XPECou!J>7N5Jn@4ZUi`r!R5Lh?PC5t5=?u8X?2D622)(oPI9R#g(fijX0co7 zrROZeqd$2A$X4WG?wkEIoGdFJyNJg7@WKjV-NNu|Q)bmwN8!o1V=*3}^&YudbpsiP z)w>20h7lv^y`}-eG9uj12vzl-mk3olLjCga<3wgv2kcvv{D9zI@H8mJP5B`1WR!k| z!mZiE;5QpO%w#re(I}hVxnvvpBO&9jh^7uV8_O51%&Mmu$S=^jDwlktGA;9^$rEpdVMvm*H${i z-i-f!z1b4~`wfhLjl}<6$EW1sG0MS=pKUgOUJ_)RPa#F~A0$P#86>#}pQW0ui4I)EX`29rM^Qdxlt<0xw3no#JgQFv1+tWAald1f7tQ7|+%EL~(2J&9D&huF z65Ocz&}`mbqI_u9i=qUTZpbKKnaz(x6kVgQGE^5t>BlHPnavkSl%J$Q&;^gxvK-GS zNvrvKL^+9jRY|J_3TnOs_~HO}0*;x(?g~&JEynQhBW7mRG-l8NuR0FZwe6s{zKj;~ zRWq}SyHqU;*#Gv?VL0xEUr^0eOni^k{7fIOKyYX49&4S>pHb@K->kZcQJ%7z-+?G+ zGs;tXGp+fXz`EK`SwSb0Z=c~%Hk06`Q*)?}@M;)=d7_&k&o>zXFNm5$FJO)zSu_b@ zKu+mU;~`#&gR|$3LtWb&eB}<3i>*6{}bHb<#QhLTR&A^QlO#1;|z# zAa7fi#2;G9u=14M%w&;mStNg0!O+DvGj$~Z$PGG1(Fnj|)%-GKsdZGW0wu}^-ps0U zMroy*Z<115si&f*f$mY&gBhi_YW@YHyfae!UtyH|6&R`BISPa5v1a~3@Q+1A>@Oy- zh5sV>WAEqF4$_VE4mI;%$7uNv`bU`g-@w0}{(qSH_(HbvEB(1vK2OW#q6fxaH1lV{ zUrPVmX8zUim(%~Lng0y@gXsU>%>N1gD*7!epGV2((0`MePaElL>0fK+KbM6!(dfV1 z^bUdG`LrHVh>FCPS_Or%`Bu?(gmSQnEyTLe*8*VOrRXOCun=sv0%+YO z{{xgUjal}#^7ldWUP1q{mNxc#2mRx%{ENYVmj1?8{{8TOO8+3sI1qa}G2>URf11C6 zmt*W(g&8rfi(zp2YlWpj>rQ}f0A}1)N8&?AY5+hCQ#xa$rjEhoal?5C@#1FIGjy`7 zcj27KR1<79zeQ%MQ94zQVSS1y=QGN)w%XNZ?>7~bt*seO%{mhgX1f8SWnf#ToK$r&X6 ze({{);@>}+Gfw;mw``){7v9s@e4;MT8UiN6lAMG`Pi=BP12VCszdqd$afjb^9 zcJ{sbaIv%RT?`jH``*oPv9s?z1{XW~-ap}DXW#n@E_U`kHOAo1zE>YEcJ{rFaIv%R z9Sj#c``)o|v9s@;0v9{`-ZHq@+4t7M#m>I>09@?sdoRMp&c62v+=UCLdcVWP&c0W0 z9Oa$rwStSCeXkE(?Cg7o!^O_NHwi9w_Px{LVrSo51s6N}-tBO)v+q3#7d!jj+ic$I8ffAaC_VM3L5vi zfF>l9i@k#Y4R1JTl=D&EB+ZQPbB?!NGk?*{+#xn@{UboG zo(NH_#*0M2AEj_=orIZMn`O9|%j{ZxBF zJiedmEQrVVQ#}On_nI#3Xg@23U|;_>~|p@MjPKXsHK9^X$@3F7hn)bWCN zd_Of&5RdPtrU>Hk{nROfczi!KM-Y$ir%o3X9N#ZI)j@r6d>`t#()7=iP#oX)&jsKI zJDfYUI@Xw}OC^}c_fuC1T1RzUBj_5c<3>R|zMr~X5RdPt?i0l0`>96+@%Vn~2|+x* zpL$LZkME~m5ya#BsW%1j_~|4}y4nKlQty;P`&w8Mt#h zIKB^c+;947eAqj1eBaLkxQ@X%zK`Cq!A#{zFpux23I*}_eyUgykME~S1@ZWPs;Quj zIE0;QCFn66!cMgpvQ=J4ojzid~Zi0AxKh;|hkMF1U6U5{Dse=Xa_~|C_y~FpBg79IKE$a4W=m$j_*S`ubTc83B~b!e>%V>2IHOuK}r5d_VQ1ARgaOJtv6A_tVM=j_((4#Ei|s@qH-g z8`FPT;(iO|ybiz<4-Ss+Lpi(5)VmVQT^LnzMuL=5RdPteh|dt`>Edq z@%VnqoDgO?`=*o90@7sTWHsab+}d_T27kc(Z&)ERrr1hOtD_mVlGEyFj;-XhI$B`2KCO=# ztvLa~@%_S>3lEO(LvO<^zr7?J0ljqsXv$z5--q6gu~NMxxQcq)PtdW{+rff(d_Of< z&}i!IFhOIex1$9eN4<>_bUgJoPS9BDZL*+o)Z58|s;ReA1&ycP<_nrYy)6|qk$O8v z&?M^ZB0-a>x61|b_trBG9nj~|7&XxAoY$Qe()f*O%OkLkor^*KX{P(S`a^YklH1PA3R9?D2N|CNc}2^A3R9y z7Q_!8r0hvSAC2>a2a(R=!3PftkH9i<93MP@0(zT%w#4lN1>^(FU@$&-00r!8rs_-Z zepEmcLH($J)`Iq@0;Chi`N4x!xr80a+fY|Q2T>jS2s)VRI6zQ;s$-y_;DZN+c$eLX z%~TZ3 z4<4km3O;yH_$%X{%$WnIzf!Wo`htLGZh8%g9mA;F3^^Z3g2d2eDDBStup;yzeAz9UJd=L3lQar(zf)ICjLZ<%O3NbR93es80qT zJSe;b3;OX}%|;OYR?{z#xcK0KUkq?BgYm%wh<=BeY9_(_;6bXrAb#*5)kP3Lc#!HN zh#x#iiynUPz!{2QJ64S6W31xf`MBx;ti9GVhYo^MpC7@{zmmfdEs@iJD^rR9sAiOj zKaHBy!tk;7H+)c2td{VTm0wTZuHHmE?y4O%fnYd0cp^T$}psvWc7&%uA}4b`@j&ZZeVC4V~Fn|nliOQIR=zh^10n`M8}eM;A+Lk@ev zX5Rjd7KQX*ZMJNpU4|PiTF`%+*|I{rnpb{Lt`Vm-ceCnUa^EAj9R+?K0Z^9_`@q(+ z6YB;EWq%8}7TLFfohkbc;5f5M%ifN9{T}=>@;}OI^8EG}QW9MuF zem^GuM71r5Iw`rj=&+Nv6C8HZp@PFsIzsTx%FxA)1w&WqGplVLuW_&&Ntk)wXdYE7_T{t`!{0x>0Z_>$8F(Ye!x^ zuYu8q`8GhleWS~WY@Kg-8GSGKzA)XNVCZHoMY{CmM|NhqlDrTz9qZ8o3|)_gNM}a% zAUm@j_yj&Q=TP)r5-E5(Di6cd7^Y=XQsPFu%x?B z(lx13f3h>vy(U=d{~j2+{!NjtcT|6}b-J+6eI_`pe;nIDIy|g@fnceB2^ekIj?HS+ zgX~OsdJ7hL4gy2V(;VsYBYDWqlxL{mP@buRLwWGZW)NTGSptTZ2j*(qsz|S7XUcP} zV3FrhFtj{vOsj3(NFK5?<=HGal;<8Hxf9VEic&1<_`5}g2 z_1l-=oDCR8r+Bdu{{(6_t4!?c#f~&N&gqU_fDk>F9E}2+M1qr@DR_zCQ1HHjL&5Ql zj3B-UemEFf@Da#&+unjRJX7!)f<>eA!O$8Vg_dX(2}X9NU}p&q1zRsT6znd+5UjI< zE16TJ*cda}>J>~SqOq(lx#67+Z#iY&*^DmD5=MM2Zy-LSixz6Me}pP z(3-!>wDjD9j7(KuDVVC}V0t|mdW6U9S*IW)GsR}X(m1bxp&JKt>b3_)vXiaTg|fdR zIF$W&!J+I>dthkUuf`g@nq{nsu0V!lic~IGD$x@RT?uS6H04)RqNEJb8Vzp> z`0#s>l_af}q?q^DQ>SH=%8<-b&k`(2F9f3#8xb2AO$TR|%8<-b?*aB06G`=?@Ch)C zE<4db3w7W6k$vk1vtkl*d7ORa22=N~)xb}tao4BmzfoVoU7w}@CLK@rDNK*!eRUzY zXof`XLbk3(*e*%IVY{>w9JWhW!O|{$!Dz#L?>B=PFd3PO87-KK;SCeD2ztl^kmQg^ z60$QTnISloWToIx5>!5jFOuM!N`WK~!UDLOnbB4Z$rNd`U}-B{@IhN`2rEHGW{U5D zz04+x)#u>Z7elD8o5qi z2O{5EMtz273jTm#(f%ed^!0fVGDuIm$j%fDFXsg~6zogEp7Qyh2R3O;FXw~!; zMs}t=jRcG8+eo_pHPVrtnXW%@PS^lOmv)#Vp9N%AHKg8$m=#WaeBg#%en`3vdLvd} zra2T@dr?OtJF}_>2@b0|L2y{rX@aGybHQlCe21ZvG1 zlzD7g&Nc|qeWe;rlD^TBohc{2i51{b&f$VXIgb-8a^eGEft=%!@8Z30v<%Ob_Z-2} zS1tiV_mv4yVERT&cBWu!1&4xd6dVfntY8SHZ?yUikV&}FwnM8$H`>t|H`>$oywO74 z#)tSfs}7|0PBeo-4IHhxDG)F{w_@Z>0V5m=7~xRB2#e;(XoLUQRODOBRTd@4cqZ2c zisl$WYi=4cs26p;C|x+(M)-dsn0`2%j(itHJuk{9LmqvHfjsGDhAtemwj-`tHHJz& zHBh1pu2$mw8r_fVOeNM89Lm~TaHzzC1d9@ff}xeT0J8qHclTqsE+7+!LAh?3U-@d>3-+4bDd$TR--e!-}<2Y>1WngkVHT4rk`1jE}wxJ zXzv7S@9aQ(yTH}j!z&gU7cbeFLjEo|6tYoC7#<3V@2dszMSJ+vTA)3=tkG7Kw>v$( zXLzRe4i_xiI~EMBy^CvTkL*mrCI}7%J4Jh&>wft{Yb;)Uh>W+=XFd| z|E($!|$*X3?F36)3ziKjZ zMT-V7R?1stfP0Jp<~xd5G-J(roC?hM7X@Do{3hdX4Z`{6y)HA1{|oTj3=eS4f%zSD zzGnYB;~)D5fBMPjUEX?+W-n>G>XaINM7OT=ky6Cp$2{tP+C%gOf*uk~SXrpPl0HCX zTKun6Ch9&~+KTz3-^_Y&lvKV6+bQ8P7D+2=^WXaS9yfP zt31NtRUTm(e#mHp|Jb*vbH;QIES+!0jYeaRI(%T{Pp>}h`rGO17qPm{u*?~YGB=21FUuO4sz*>Eb+zr%=RK%%NpK%KM@@2 zB%U3HhdL<`Or5avm4Kl;ANDM3>3j^1I$t{gh=$I0c+~mI!K*nuRf1Dvcp46dmNDvl zlfdc2%HX4X8CMe7nU$F#IIPS{!C_@q3zo{P2SZoJuC+1@jwggt*&w^V~cYQTK%62ZXDqL(i>2@v&+PNRFZs*dVoks!d zb`Eef!s&KyUPCpg)PFw0)wq?ksI{G$f20_KJrzScLAz_Wp#qQhN zBFw6t%xo?*)0Lj9d$rMX9%JLRu3qN{9$mRhGyJ-u{dG}YbupEJUyBg>b&&&gkzH?K z+Ci3{HDkRPn$UIGzYFxS9-`9Ndeah2h=;=i#f*j1nQGg~Y58JY`^O@XT5EM4JX&4P z!K2mnEj(IXIZZ=#89i@hfu~CiPS?`)(lrSEx(0zixX^=TFy|zsJHx7IiL5@Se$UWJ zD~1B^%)qOFf6Bnm1OJ}JK~D(M_V^QFT9Iezym}Nj!#M`Z7ve#{=E=ZkTkSA#_ZSbH zlYtij=MkS{bz}Hy;D*G@b^NYP>0cK3+ot^;sa^h-;6HYSW%Kn3s@J-}qnfpT8{w4* zt>4#?sqUT+!lM=KG!GTMKRjB|6XDT{UILHqm*ISUE=n+~imAI>t%@}W)w;Vi(A|^3 zT6ZCiwFq?=;x@oqcLDBW4%dwnh7LujUKqPocb^`!fc0$scAb0Bcst@0pd$s?XjQC4 zl+IMd#z26FfO}`)4}lL%<38qLy1+2@OD)3!HwFcE03O8Hj|a^+8~BI}{3GzO#G7<@ zSKTy$zcZVlyN$5dtVGjnOu=+V{|FOIwm{QI;EB5WP{w0dKOJ1%6i36urfAw39z9lc zL>9X9p9GI?la=u3Hn|<1piOkCJme930i}KnzAn{l6PEfcI8mt!rPOW+)}k1n+Y z9$o55@aV$U!lR3S2OeGOPw)h#M%`^8yW18kfqtexqJWuZa8)11LOb%R=5HbXSzSac z(d8Dj4a%)&9;Qn@8d#UQ93EXNKXIu`eIA~Sx~^p%UPN6>+l6(t;L#f9H!!2RJ|K0S zieOzPKYyv~+5;Y4>T-B=VVmL6#s312E|p)1+@r4ZS&5fWatDNk7gwyd+UkgG+{uW@ zqEYQamMpcs0eoHVc6fBT{K|$dw>dl+wS9xNco}6L1HNwAQ{mCI?F&y-+nrL|Tfx<} zeFh#~+Y8~*wcQSnF3j%`7C#IgUFwPO>`~j9tnDkhWj$S4b7XCG)zN~MZKTUR3t45> z^+jM^s#zYE+7cdJYCm`~>gqWt@m17yCHT6or@^D^S_My3*H(;2^?m}bF7sJR9-fR+cQUt6Q0img>r#J$N0<5zJW;9fEW~4TcJCS%)&L$| z*hF}AVb{T<3)>2hF6>))G74+OOg=?nExUz<^@B$jmIF^zSYIjZJaBa@ZiGiyaRxlP z)VJZ$rKYfQr%T-j9$o5icrr>I&D=gisVl(ORlErvUFvjrqEb(jQn!JtOD*XUmii<( zy3}sq=)$Vt(Zyc|k1myV{DV@XaaRv9pIccn?lz^Be-?}(hQ&rBuZ%?;f^^9{5Rvtj zv8ZFuu-v2I(dEvAN0++_o{ZYAVl8%{wmZPrwcP@buI=6MM76y`YCFDHSldSMXdT<| z=-MuVM;Epp9$oD>;nAgj4^L34(WMI}ufLnT-5+!k3jf)v$m<>MD*qhZ?gs(uUF8t3 z0j@q-$JMj=&A^k=xR;(s2XTAsM%Yw_{TAHpTkM0EuyWhI-ui%LaKP`;h zw6t$n_#yD-f(DYaxU9L8l7* zJ+4F83dSAGZ~GcOJ_XjDAi!O<$br9OIaJ4AUHr#}sXA?w`}D;OaNqq6V*os@a^X1w zo*FCV3t5R{RmBVh>Pj3N2>mdy)@+FD9S~L`#1+6==n%UHhMEmcUysGW zx_2KJ;G2N;)e(k&2Yfy&8iv!BxUSsjApSAHy5a%W9dH$U*gSN=cMb|W;97X}5Yiu> zXb9OTJuwGdeHpxj-1HD~8a#Rkse5qPB?rKxyX0(mbeFsso{a0^Gv*dt5Ag)N(e==X zXb!}=0}1r?@ButpoPz!t;`9wuHQgUvEzS&hv^ccit;P8O9({#m4G6{Q4v!Y+FnHt& zDff*yP6FTxxrFVwTveQeP~DEpgLb?bShr({cL85QJ%_ls5+~o&xR1JEv#~C~eW0z1 z`v&40S;t24dkjQ;-EQXv?Q%A-Zs!o+0j%3?MG*cAux_^yH$i^-+6wU)V7;SqZV>-d zVBJrGaNW+M6Da>GmEE*zaH!bE@My(;JSao4XE7e{{WpTE6?-B)TCpAB(TcqcDYass zg-5sZZ}4cv`a?vqdfdB%xdrX~QkZct?tMmd1;puy1iGD%gGY;V5j;`16xjZmn zApc*MJ!zdR|LWH0)zrf`Wy99Xbx0jykYr=^kV z2XGRYW}nz-IC0Y^$5cH{XC|=WoC6v&Lhk;ia}BX`7ieAQAE2!ytcB@p0XCfXKt1Oh z(75vlsFD~RO~;*%%$>HNmXS3Qt%c8qI7a}&xQH_uE{uyfr^AJD5$6)PFfQWU3>U^l zoK0|HT*P@3E{uyfJK@5(h?6x#8y9g(;lj9xQvnyoMVvu!VO+#H9xjZFIJ4lwxQKHe zTo@N|u7eBXBF;l_VO+#{87_>AIG@8k5AJTbFfQU0ouZA4IPKuVxQMeqTo@N|hQoz% z5$7bhFfQVp0T;$aoU7o%xQKHPTo@N|o`nnJBF;9rFfQW!2p7ghoSd1IcdF9_E{uyf z-QmKxh;s;B7#DG>;lj9xGY>9|i#Qj-g>ez*Mz}C8;`{?HjEgw0!^LMqoUh=*xQJt) zs*Q^{C2(O}#OVwd#zmX~aA91;83h-{MVuLMVO+#n1{cOfoV9RaT*SE-E{uyf&%&i~ zkyw8yIx80R0sCmvc^?6W^D!vCp{4r^Ow>3#Gd*O@&f(7YnwdO}QA1{xQy&o5 zD4EVsP<)>&=yhXFXMzq}pu;X;>%0x>I$wk4g~Dd-=in<}NS*?9 zoc5r$vp;CeIT{q7fLwv=bH)NlVJ}R~0qf+%8KBb=mxE4E+z2`&@ej~b5-)(xOuP#^ zC-FJx+{AC7^AlNf@Qw3CA*hik1vL{bL9Ik*P?hKn8cQ4uYA1$*I*E~>S&0dt@x%Ug0@Ml0&SbP1+-maBWU}?o1kTh zPe3~)c7m2CegW;6h|R}4dWj;?&WV?xeC!s^W+Tx6&ND`$ zJ)CEa#6EDIGZMq#JZ~h9h4X@umRl8nm(2S#b~&H{Lq!7xgb6H_>yd7%W;D2=yD5RKA!s|C?0jd!ge8l~}W z5=5gk-W`Hyl*YSH5RKA!4-2AE8gG*z8l~|z3!+gPZ;K!rrSV=9M58p`TY_km#@i-{ zMrpiH1koss_obk~C{6C;4(bb|G*HKtX5KCdg;AQkp8-B(FpSbb9cxU_S{P~zua+BL zToB$Cw>(!6jna69g78kaYale^&l7zx2P2Mzs zZy5}uG*HI|)0-{9G)m(w5QKM-OmB%G8l~~h7DS^o-U>k*aWLAuNYG9=oq}kT z#`{4Kjna6(3ZhXOZ?~X#shrs9VgI918ZRM;Mrk}(&^9Wkj-U^yoVtQOq;g6H(I}1A zOc0IIcx?pHD2-Pxh(>9=u7Wn(9%lqRn)KwAdGC=Hae z%k=t7Fpbi9Lj=(%jd!>p8l~|@2%=FMZ?qs9rSYl-(I|~~f*=~D@umr)Q5x?wK{QI^ z%@_0sm9s<;jna6_1<@#tccCB}rSUEkgahKa-daHx3`%%62%=FM?>0d+O5@!lh(>9= z4T5Nt#@i@}MrpjK1mQ8E(0g7`0!C@PR|L^0jrWEi8l~~x6GWpl-gZGWO5^PiM58p` zw}NPt#`{?ijna6#1<@#t=PU|48;#O9W+XlRtJsJq}4&A zG--9Tg8h)RI$FbiNLn2lO8Anqcpj7@g$^Rlm^P_ zYUMQ&<-jOSUNeAh42Dq}D5r0;4o}9Ai)61O!HDa&f%aP%ugZy$!eWZjppAN|Sddz!V0 zjOA^RU>c?IHVUFq8t*AVG)m(=FNj8IyjKK`q2AsQbR6~eo*){f@wN-1Q5tWDAR49d zb_$|V8t+FzG)m+BA!q{i7Q^gIPq8LaZ`p!ql*TI%M58obu^<|yNoy)JN|Qf{Y8q)_ zzK)5B*|&h1);S#{ZWOLUk@2jeZKX!Mr-9I_^O2X8=fi-(m-OYo$X@^IwL!RAsp?;h31a=Z}DSVcuv}gg?OW1E#Rh;mnx72BX1L zD-^luf{pB1C}9>$INU6H!iHTL#Ki~PnZpp25WAQa7wUXKo{gp3hZ^`O3(C2VgET!I!FY_@(N+KM+alA1g?CSqN#0%=xA2ycPf*2(W^b zw=Y010<0kA4F@=wfGbGZ10Y8cIQUX^_9*zv>F;l5amGs~o)3&MNF0N0Jg(Fn16qbYGYKw#JE?`@myXosB>%kNwD?pk~!dGD`CH z9f~8i+Do=K0dNUnDWQ@7Ffypt@yno=g7XmE6`nfx!m}SdM&T&NE;oxNXm>DpzRsYN z&LB1%j5!E0_q9)e6MpA;gU<3QCK;MChu*9`OzXXajBh6#Mp&1n^4Ayt))97rIy4lZ zH9T5?no*9l3l5MdlO&2^e1>dd25tPu%zKf0j`0iVa)_99Ci)pJ`D+owss^Cm%w%XK z`2c_zBr?|K88*A8GX+s#!Fe8?toQ|zzzJ;~$1fL-E1YYD_rl7>NfFWL;&e*BW8<^GSdtB}f_0y+{`~6K^tnwXMFa5nj(o>|($gTg4k^CM-4* z*{s|;TQ#c@;2Vi%47eezY*ZA!T)Ynh?yyzw8Y%L^6b}R`tPK!oJYyEy>MULZGXS){ zus5qO=f@F4^~oVWhxzA81IuY#M&4!c9L<7H9TUdv%#2P{heEHq=5;Gt9&~)>KP1cXc= zs)s;fxH~8o#sXf|VIS(SZyBbHHZPgysQN2O4)IiXv`}SZcq~%&L4DO0G^Kih)>Q*Ri`6lp z_0(k0`f3hniCPZYKwSY^s%{2ts2&1sq@Dw9tlkD~qP_ras(u4)rn1k)N|>q-+CsGj zZK-;Jwo(H@TdQM0+o;K)ZPgsmc4|3jdvyh9nYtOYgL(+GTs;TcQN0b?Nqqs@S^Wmu zMP;wRN|>q-+Euj$?WTHxc2@&Id#GbTd#cHxz0@4g-fB7MKI#h4KI&%BeWeXJ3n7OS8VEe$d?5d2F>hpq6R^s-(3K$7vT}Lv>>e$qi?^dTH(e(6~AZG@-_UCe?J% zY_$k9M_mA#tF8uh)t#Vul75@19s@SiOQ13JKB%p}26faQpji^{HFVhX8LtF1rrLtq zswb$U27pHK@FMxqz=j$RYN}H}u?pP+*T#A9!W8@>I9V}At_QQ~PB3EKv-%^-Nw`R0 z;|vV@0OJFU5V63ry=nf27w+){&EW+9W?5N>{SNQk>7XviP6zGMVeGh> z6OSJ^YWgWtr%stR!#JSl$bsV~o-k@=#mN1J4d(y;gZ3M8@W_4>Pa0WPHge)g$DeS@ z*l|XU%*IZeICI>z=^YSQGay~c@l&Ry%P^+Tnm%LPiKE8M=-jCq;*1&9rMz3&@sx7< zjIk3>ngMgK7_MptPhfBj)~MsBorsvwfzBP30g9ovhHZ_;NTW7lA>2(avFpbB*{P+r za?0$w&S2ZWnqGC=f@(X*QCp2NJGZ0l#+%xC9qru7wmHbMpf_YP6{=M`kx70s-qKcs z?D`Y!&dB88N;_F*w{%outKE38-L!+xewDVN-ba#@gT=+wc3uZqW47}K+NpB8HNuN3 zZPUr_;Hc;3mq9W#H7Y%Z&1xD>)W*bUp{R{VYVCt|8CkQ9M^2wHX4;HXrj9&uEI)!0 zqCHw;I@L{04!59$OHH$0y?QFExD>wzr41UWwPvyMi@~g?wRNM-j`x$6>0frdztLA} zO8Z~+$m!FLuf5ak*_UeRaigYBod`B!Mx7E}t!58ol;d@ui`mc>HKsb7wv$9-4Xjob zi`2kMp{v!vGWgMys<6z-E>rg}D9cvQ82BcUR-w*e8|NS|qsz5OmY-#t9l{X1G>PmB zn;`Hb1f~|-4tnqv3o7jrM}2B6I%~0AZ?Ro+2K(N*=-1%>Vys?Fcm`mZqy98j+x5|x z>N?-qec&EeX@fR!2I(}v&96pJRA-uHc0I6Dj!ybB`mUqS0@F}G&);CTb<~CC24qnN z?|0fQgUf8okb@>wOEfcBYwSze=GS9N&NZ||3UC^g<3Im@R)5EM*&#A zwaxD&ffMn!f{&`+h+06qZ<|rlbe^BpNSfwjbuc5#w9IGY`9ED$NmLZRJe|SUb=k=_ zyCIV=6~`Bx?N&*Q5dG~|9qpFo=?0Y;8xbRwJORyFsUDnHX+z&ztZKX7AiGI>R_V@p zWp<^bUb4#U;z40O~DLEtCA z2)tYeY5;#FqNvYNrx7$({ku+LUo=Mnxsx0;Er3KM+<*w9gH)FOQGz)|l6@J6+I zGT|#o+u2cfsjYS+^ruefR}JBIL_aHa*xStP#nLg-t+EN9$4s|Yx?{W!enFS{%y|7= z_D=PlDwF<`?gTq(Bv12yCO_)9x$FcnUV~@Gz>luYbo`6J&*->$Ob};+n-EY3)o5CV z@L{0<(g!vpuqZjuPIj=J4t9J1sH5(ggLZV(i!rMeq`ngft?+z|jhl#y#4Gu!*&-Or zF3dv{qp_MSwOcurcE3fqr?VXyiZVuV!D~ zF|7h5cjSX3y?(ZGI&3XuB7yZyAYc;YB$Dnmv^N~eFgu4+Yz{D zV|eETP2Vq@@dH#BG4hx57vT~~s*8EMa?}^l6u4J~k%wVk7&CrB^ZuJI|No=;$@r-g zr~JDKijE^Q6wFJcDY{?)Q^mV*yBS|ibq%bx3Pq>-p1l=qrIH=iIN8+}URVpX?O{Dx zZAVDmq)MQdw6>kjcC!=hc)4BB&W;bV>kLAU?5MxYuV%a94l~9cgl^p&-FrlPyBoYc z;5`n5+#z-yHM1J=lbD|Tg4u5~w(V;4I?Pha(2X(5mD{N$m}_80Qt1q|%e4osd;)~e zt>hf)ee{W@xC3EYvRAq`d!)noH!0n7MmIoR*5mHqDEY8$9ufuw6Rnq6&n*Z;Pqni- zW~;=a8ZoqvuwlB_aIXUvF6A?;yj;-%r)77XV24fpWT*R9JWrY3&V${GxEfnmEl-+Gx&Lf%F%fEPZyf*C0h|8ynWsf z+&nEgC5XAx$Q z>WNt8AiJeH6{E`IxTDo|)HArF)j!y-+tGIPeCOUdyt1>^OEJ+aGMqsjeTxiLvJ*N- z5xUe5voUq?(Y0dnMs~Ljwm$$esQlFoDPzFtc6FMcNb{Fw@UMwt{}IcGox581hJE#o zbUT#%|MgL2+-bpMb?whRnRm&W_r)MxIDkYq!H(D)ORljCI&`qT4tD;UsL>hYd06q$ zkKPTE<#xk?cKvjpVDNSZZ_#&xCAL?-#x7ioD_W22xLokzqhK0~+e2KvVN~K0>~i0A zi*0|g9Y-wRnSe&jskZ$#?DZGn;Rd7pw?=hvb+UjrSiqksARo6H>D7_wD{#%Gl1n+6 z#H6T$t-{$@6yZih@R)LZm}SPOi5FYYEpb;WfD_)89t-YDPs&{>mJ$DT#=j|u|4tZx zeGvb>Fn&cAZ%o^2?Lz;_WJ>N|oG8_pL8WI|dpuv)h$YFnl#_n$-Lu!|m6zjdTcg?Q z2{~A!;i^mwYg$$z)~Xb`PhB*@-b*t5^oq=;a7E@#J8xptfJ}@`@WKsRwjSFjd=88P z-mN8|93P%lzak(jIS9`ni|jU)dIIk7j>eP|7~xzrc~(+Q*ts826B|EC|QU_> zy?kDo`oXG(TWL3O)CYKS#Y5#hl)v2qxstw5>AQ@+9rRr?ZxJ6?zoP#l`0>=d6J??S z&JXUMKSWiP-nI~Tx4O0UHr`WHdj#P8YFw?ZC15NAZmT7$g$#JKmH^$wUPM4~axwb) znouhu)`x!?@)bh%luKv!Q!S<3!w$JD2KD}cn<~4*xwzRD<28S13HRf;qgH~^u*-3F zv6`hPir?ab;g+vCP^Si>>WR8w|FyRRTA9HX>4GtDUh*__&Ux zevYliV+o&>&q7cuNBxQn_nUx41-*uAs3nMpm5JqcS$fU2UAdjt$?kd(CL>&s?WjWr za5c7TIl6Vo8}F#kFpKDlH5DW-L57Ul5;sG5TOv{=o(ntJU9o12B$%$?k^a5eT)ox9 zj&6~AY)*_8+YK@rIOFE=G%vmfW>+Ii^_*R~kX5`NWrF*>9nSKoKYoZ>y-M~ivx7&V z*C7%j-#lAC0==0TSr_~f3U0u@o6$r%U?&1<9n=2M0cr-GV3iBqs%hvI%Eiq$T)vAM zayfQ~9Xub`Q{!~x4R$F8g}q1X%Mee?kkNkzu{*9uK&>)7jDQkK9TfQwyvh*^KG0j+ zBF2GJ$4nhJ?LS&P{-56|aSI*58|JvFW2>j=?TgG+W8AmKX=#Fowa~A(J8Dd}5WLsz zGknIw{j)~YaO-0)cCcg(_SkVJjG2WD^@2t$V=(Qs=YmF8&Y2en&v?-!s8?-FtY*{_ z^~qYf&(_L)u~zPD;3hGh?1uZZ!sDiXxTh%m8jE^Ur+IX-qpn_nar;B8c&OD2svY&Q z0eHm%+;(tZ_#6uf3ag_RFIYtQjZwDPRvnf)>YN2zxfTxYL3WctcIiN{v7~^Nb41&1 zR0G;gunGe{k}nMSXW%{xerbO&2fuBX9&9%mC`rGakH_1KObGDRe2|qU^}zyYWG`>V$rZg-ShTh_re&W(F#$u3NA{C0DE0u_B**2;&^8aovJSjD69wc9i0_ zAjP@`tFhv;%Z8G4^vf3D;WvCPkK%IGJQ-#<$jPqUqe(ZWgE<}rn_TI2Exad<)atwi zc-caIXW#~V|9sS}Glm~^8J1LFDLHr$-iB#KQZDNF9Er~(@-T7r|=GMuVIcjh<7c{Y&kMe#)sVoqU z3As2VK94p^V6a7!Pca#SNN7unghjH-NWcHg)UP@j8js>-lN4E}w9^_i^fCAPT^y&=6a+6+ec z)#aFApt*0E7jNXK2Nx_-PxDeuRt6otW<%s*!$9jx;qI8kTBs=Pni~B7RGC|C+$W+e zgN6yOG&BsgTO$Uqr6h07?2@#euWktHvSwadJ2kFUw0{jj(-rvp`v0q{){rJnX}I-3TTONpM3 zB)TGKmhe79iC)ZfB0LFyHa9&G?0FLmvc&rCXV~gZ zs#hb0#MLdh2JNf6#&v2fEUy4HfN{!ZxESjKWx=^{?5>o{ssnchvVgH5j1*bBKSSpRqd z+x-}1N;hDqtXjuVx6dh4FUQK@Rx;gNh`|Kc17gH6fI&`yMa1wtKA0Ip~53SYHcI`b5IdF<^ zO3WuzH_^o$!c!79bahYE?Hy8zrhmX>`K0= zaWUVr`U3uhqpq>>EK{Uz!tMkr#YZJbTIYJ*xDc~_&FbKJ^6oji*qmrt_Jh4!xf-p! z=-<^w?*r=EK!htP>jXO+@5}@}^?itjZHw!`2h%R##-@53Oc(FQklEgL@nrmlUSY~s zH)GYP=F{t~P)1fV-o&=c?JO+8?POQbio>?QJ?6Xb_-@YkdnDSZ6TO26g4tWyW!|=T zVaw6Z?@wy06Hxd2pT88jMY#Zq*Q){^?&f;SbgB1Tm$va>4fUZ`Oa9^K3A zUTPulfci1Mb<{=bEDO3&2XrK?ib*d*i~P8EpZR;&5)@VAS~{QiMs`fzu4h8<4mfhXx+fN=Ft`W7Yb;B*FB(sB0TGs;YHy^y4HB^Wp@iN4AvS$ z1ByX+gS;76kFGa+S*Uo9AsN@oU#PwII_m2(tROCcyD`F04|SY%D4As}3L3YvW)HRt zt1~aebkp|2RiJD3J8ISoMhDoQzoTaVwmtVMeUH&VkB|xO-TigP`d6(egO9W#D>>v} zw&GtX@)jG-_o}Ysue$m4a+CUXujY%!J<)H_V{2`>e|^E!sMn^95mmaTT_@f*Y_PCX ztd2Uxzs?#L^|z=?#zj2^uX0R4-~1evYlc^c`N{`+CN>RliT1!V7n}6+TAMVpH`RW9 zW(*I}MZ$S?bel_eCA?4avDWfuT98$`D}7c|%eCvGwsE1B(f6;*{RHLqz~}_Me~Q9; zU`B|<=W*S{ojqi=v+H=JwMW&>ng43k7{USJiz~kB?OddKqTOocq8nq15hjB=SFkIm49IHR}w7_kEc~F^pZ`Nw?=vMRH z9%Q4FB=8c4J7K~bn>hXYa@JN(LC(h=2x#Z5u*YKp#iI|Lz)>4z(ZwG2yY}InHjZOx zxEJfa$~Am}Q6UGsUx~RWd&IqHootvW!7WY?IoWzVQtEE->s*f;^qzCE+PTgys1(z1 zPSJQv4JY6M%9xGwI{h0$2h(o{TN)75$Mr`Av3+iIs?!rFTJTgiW7jLGS2N4htFy|~ ztVTq>j+)NS&6hRH?Zo$kFwf_lI4Swy`A}xFFCr_vJAIuek;9 z8mPNwt>!l7n@;=|v_DUx+yG&U@y@w}lPF+d-d}>XR9Z`&SCraw{u7X zKJEmsK%{zy+WK%y;-8o%;>w z7ZbkVt@G2ftY)U2gIA-GFRF|#_2+535F7FEb{(4GO0>4pNOvmbZcsB;4|(+ewf8pQ zkzD1OXwAqomW^@7#u&#Kub2q0acrS({fx#7#u`a8BU^vdYH6hLFy&TvYt*)+Zn|4D z8ZQ{HuOWs_SjX2P#7h{%vTW8%c(@MX;Q~t_OSoAATtW;X373a(2}^i#x!`44mT=*| z@AsWkb?Q`UW=w3dyP10W^f}+}`Oa@uoxfsLdI%BAb0u_Tmx}4XwJIIw{6kcgeuB>1 zt4d$M=+ARHej5wnU)u3TH1y|m{8wr8e**kZTa_@ffXC76%_|-BL?H)fU-PmmmX`!p zEG)x7O?u;n&htA@y6pJpI4SV?7ylAQqc(5r_*FbNckIM0_O~~CIv&2T2R?QzA=55g zMkCym#UPJd*!d9JC%7NEkhzW7Fy=Zkoa7af@K%IMeBu3gbwGtcXMikP?)b{){T=Uw z&aXfx=)Vr>7yTmN7DNJ#{Vf-wDt&9yl+TBv;^FJn*;_j5{OJq1BpPMU*>xm^Egi-1 z+>Xyk@%%Lglb+l0>sZW!mi~7ro^xvHX`^rFD>q(|o`ctox1no7w~DuJzA`)|W%IZx zo7c$lL2g)1FCRSjwO_OTN-uW}S7LG3mJ{2Fm0nBrQnP|xO)xGw=WOPpQ*+eOHoOEo zCZAK&({>eNN`+al54G4yiBbq0!S z4|tMA$8K)-%UIU%k2y+qTIWN_%u^`12(9B{Xul1!b$g-xz%plqUx}euEC+T~OK0^7 znWHuny43LrZZPCB#*T|8KfJT!w_k@**e`Ib_ut{A{}<4o@+lXqRDO}GR62Smu=eyh zr(=6X>0gO>FK)iS1|iIKejD@D7vd(iZKuq(UbOS2(vfkFn{E2P1kSP#o>|Zo!@I?+Wj)A4R?kn2o<*sD+(Z7eu7BQkP`l|9EkPG9WYoU6iX``OXocb7 z4_aY*cU*EDC5bG%n5zj-;~sz!RxX=C{>vR``;PADo_HrGOVn>dU&JSbX}sj2Ut;Gl zx#M}*(E0iuSHFyXAnf7IbnSi|@NflhUaP1y7`?(h@;?T4S(HX4mE`j%;%$8xqj}wS z)Nc$l4X{%+5xy*r@NPtiyFnb`JI)f}GouP`cwKy|yA4f%qd{D=E7{zM!n`23JF{}3 zS2F8!5Muvzj=f#5wARo?G;5{Wy7p1-+GVW^Ja(bu7uYg$6BD=JJ~7d8%Wa*XSzYP8 zXUBF-)UNE<{s7i>;NJIr%(iToJtBYlr#p8186Ly#{UQ)nP#+@-Yh_iHDCbEISV7~WE+Oiv1d69Qbo^}s#q%66M5BT)l>-0PR*8)ECBN+H z-=EI0dYH=OWu@MpV4Qz@Lht8Ro&-58uhz?VqX=*h%iOIlJJfMvFv^D8@;ioD-+Cu@ zT=Wh$hMm*zsO`Au^$0HSoUY;8aZye2&#B3Mh#%%{K#qqkJqouy=sivUF}Q63&H~ZP zWqT`7WTQ{kE!YMP8-1Mnf>Q=w6Wsce+|@jUMJ`w8K47SmKAE=#1>wP;%f@4M$VMMK z#u+s|m6$J=EUI{eT@PRbLma$)h_?L^yYU;G%Z}+y%jZ-ZpcZ zp$R4232#Y*_?L^~+%8Rkc?@yJ_ct2Ezg%gqL*)7z91NyM0mgSIk$phQbus?INbgd( ztr@oq;|#r>hH)lSBdO3xk7jSJktsu>=v`tM&#KWfW+&#HqyBqf)a(0EZfIBRsYr1P9^Ws=T;+p(Q2YUoJPNuK)%aNRLry1~L|_`VhaE6R_yOM(-G$vLPTB^>J%4 z0oE1RNss5OsSOCoH_a|B31OI*h;i{q!iNljN+mhXGj+%OwPM;*)Y?F zLZNp(T)I#^Mhh};xU-tDsetsl;L2pYkjylt* z-*AbN=rO9aAwbGSm8Ng7jL8~i`0TxyJ&k2dHc-pBQ#I1FjM*ABYU$~F!JM{{o0h5d zQaIR1k2Q>phfXuZasq)KYo!tx(&~GN-bW(>0&=mysG1g%+7UG6pt}T-*~};|#6!@o zpKQDO^mPEJIzsFNK=BBHuv}LE6rcq-HaGhB!NJ;JhW7{@(e$YUX#C4XY3^bsupJK7 zfF2W{&LPWqi7=;cUO>A_nBue&GVyX^W6^BQNZYpRf*mDij!g@d2gOGBn(X?-v>|`! z*_%>!ed29vN3iR@`z|=mpvo2KXr9%Im+Br zt7h4_OgDs(T&xZ@?5MLXD?7`y+mwg%TOphsFEfRa?F@RmnnCwzhHn(O9kha%oMyNe z&U>=}Mj8g=xDY*(Gj zvj*`m7h~rhX#(?bu%BKNPVGlPF3U(xRywvN`sB>WZD37hmYQ@qz_dOxQO6~4)JK08 z9E`xfT#S|hvXQh^6Q(G{tcL8k!1FBJ5|}nbP4CP#oP7&Qm!4%zmL~{uv6e$4y{qB2 zPRv;uxg(h>O|H_*)@T`d3-R-qyOx>%*Pel9ETMANNUsE~269n5ecEy%s?V@LT0my% zu+h=qEzFHHGw^bqH76`1wZS@iH^Qa!mfNPu%%p&k-t}->GqMjtvC^}Q*~NNRjnE+1 z--AYOvu4~ZXQY~i!>WKFJ!ZdV07KU)f!@m_0zX0{?Q^K81kOc;iGWo8B30 z_?#=)SsA%+n_ADx$bH=B#CYGiGTOvAMa!0!uG>$W@vMol8qdneUE*Zs-3)bx-VJbS zBSSq(pm!`HARw328E9ZMqi`s8dX_QWFj=FzgmJbX-a!rGUoKl!t_Jil96K-iZ-c{K z?{RqVmEi0L;eAYlpM&?L1XERxdLDwK9{SV;J--Eyy6_(Q0eIAf;K$&767E7g+Dx#Q z{4@Y6(JOoF@^xpuNITj1NbZz_LlbJr5F;Innx!gqW1BPt$m*BPq$LOg<;vE-Q zQG73aO3=R#Zd)*if4Qt;0_R)>ofdi(J3&Rx(6fx`;s){T4UbH`Scy;t>FtKg zj{0Il-5%sJhn=odCG_%JDgnWbjis56jT_d_iIGgaoUFSNU|OSa;qMYSB$VFu5}c=Z zqXbiR7+Cjt;#%RFr^ignsGGow;fR6ucfp~y(PQJzwu-sRTwqP2-vxJRun}DL@egjl z=Caql@Um^Y6S>W;y|;pgm6$U0+4Xk>8{1AFL0}#3Yzo-+J_$z!^gjjH5uDt1`m+dp z4erw58J&V4K zRv^^CxB_img}KG>@1%g~;>EU(wnp!$1Q+Su375`yAmzFO|EPiVRA%0lN#;8Ry5QJ) zneX)X!J&ZhFV_}5JzL}!T-sM1qNiN*^w@G~blL#h-_U@Y!F3B<#yt#J`%KF&#`Q*rMnc;qY*bf4QiEY}W(oha($(=5j~y>TU8seVYR5E&+I(XxiTcrv<>!%i)j( z^lpVy0z=FnlT8y5fg!bRhTfYZ0s?Z`v=X3&CaNu|h-s2Kv>g00uTnY?YJU!KO z`qKag_e@sGw&k1~i5$46sy91g041%Eacs=iW4seGcjmx4r->GPor&qVYn zLA0;!+DIFP<+2ft0@8@?FqFuK+kjA0lQ$yrk)~qv1bJDFcOm=@I2dvT@w{Bx{eZUx z3(VTI>~7AYeaV{FBn&+kmT{?DhVFG0bVbhHqAkVR6H{h7A7hPJ>^QZ z4p8tMEoq~tTr4=bY-Z35r~Z>GyK7*f(WWgP{xl6U^u7h1C;~oH%4MS>;H28HU9U`W z#>Z?0a$g6xEjYqE_6(f1qz5m+Gzc6BKf;M+SM9U}Um2yDryapPuRG0vX2X$BL-=!W zf@gqgpzZ63l7=DZtGXBns^fite!qlYEB--*w*`05qiIOJ_%xC1^r?B9bShwqQ){)N zEaOC_Y8>Oc5e{+egXcuY^e{U5Q~(Zyfu8nB66&r@FT9L=r_Sfh^`-=xPx-N-rjRkXi3m` zm7hpU%cySOgT^1gp>kXfQ}J3olXtUpa=JR3qyFT5}|o zkN8fsA*J$>5_gHh;wrqR2JeCQfCk?L?=2eiO{DCykQOPc0*mx0ge<1_hy+tjk#ZD5 zwmk?>1r}{&$eSw|>8F&#kN7U2Rk#>)rCQ75k%CmO^PY&5%Bv?q;ztxSdL2uGb$lX_ z%l0~!meIlf`PLdO2^z2QHCkFmRs9Y$eh&_{;8K{n3yvDDhCe8#rz*!&k;J@}Kvkq5 zg%Ab3yaZGI$BjU1j->LjCnBZtkrH=_!s05t6B?xV8VSzPdxK&hg!hmJ{ajc9n(|00 znaPQyc9HviiuNTKsY(p?1dY8jd8T}g+?d$zkBs>=j7b(yq0;!7C z4YcM+Dj%)~E07KQ$)LFK`|!T1 zL3$cT%6=QiIa_j#V@ayb#@ZGwTgH9C+RL=i?kCiC+D)Tj``03aQyuoBV1B;{%zZ2p zNG0n%;Lr?C70Y`gQmR>%k8kvjBtcsQ*A2}|jI0O&1rlk`@Rnx}&IXz+dT@XZ0}n*RtqRh!DySZ%7dP$l(2 z0rh-YgMQY&E#fMWi&3Fi7~3C8FjZBb1X>f4%GxhRq*U^E?nE~am+^)flTx`((sd$r zs2AS62K^*l3AE}?DIlpwq~@t$zXorEr@B)4c>_q~M03S*mw=oI(kn=Cp5D4*eLEPD z%Ff5Ki;Sot0;$MWfL6m(S$S7PN@eB4AYF;ip=8{yVp8foo}@?NP&Mh{G<*bS=usCs ztu8+~Z#A@xcu0DmXjuFJyeBpIMR;G);MTfQeGv6f3A$A3p%Mh?eNBRQ(9`s$o;R_` z%E%VT^-U2-)!6Sx3R2npgNT&M<}PH*quJSPNyxR-n}emH*7%ul{ni>uxBBk<{65kT3R3?%1K_M-E2;L_(Nbj=}oTK;Wiv2RYuWQgx6Bc6ylt*7ijzI3f zDeD=LaxGHjRl=3Z#UDhZR2qL6ky2^g4P|^>$Y?&6l-24iE#nE}`mHsR^m2*pj(zZ^ zG)S)~!FhUjDs~ATzBB^EQf)DgAyqEaPSud29!*(F!L1S3Jh>PZ8UkZ`g9KAu;C(== zu2kOMACVGy%j1|>+8jbe4@U0|aBPe8IrM~Cmv_PA%eFTGV}+>!Jt3dK*@6+g3*MVF zNZB7~klqjBpuL+uU;e$DyHzY_Hhl0V5aP$ zSoTmXdnlGoRqQz4W3lY9SoT;fdu;1?k1(xj^ARRc4L#xu1Rz}?X_%=*0yD9|f-kTO zTvv!d;z5gavA{wsun-HR5<-D{ zB=RE^(6P}Y6nLLv-w*FY8uYEBoF?Z8nKccmynRi?HA61y!&DtrepG^~_VOv9KP#kE zyCC{&X%f#pqj9_7&;aR8NHEdKCb?v#o^mB_hL)>K6cp&)D8a)$@NR*_a>Cci!3HXw z=p?MP_Nue=c>nN*F~}7gnJ5!5%XK;akraAwmtZ0qVZq;}LXxF+%C$i6F}UnGJP^!$ zTH!hbRYoSM9|M@~sDYHL8~^C2>8VW7jVHZW1*37&o7yfkD z{W82qG>Ct>*f}x4Zg2^X3wPJHS_^=g*;neXk91MCpyr(2sp!YpE z+~}^Mui6uBA6U6mWx;|r)r7BrLmAThGR%WA2IaDB2LY)DNfF}#n=~!*SvDp?Q`>v` zafE48#M6lGTyEN*qH- zE*noT(t9&pNAORR_fT?Ct_#FY++cfOx(hpV4+1)tz?=Z|U;^`2K#wIb5+nX>q}2OE zIFvpW7U2-2rUx`g6_08#OO`gFKefgnXstldMvvfDvd>0()TTqRO^0He4#hU5YOu{? zJg3C6M`GC{v23bsQTB4prX%oJFv!QZ!+T7Feg-hpe+-9Obu=IIuATL|KG=wQYnjVD56d?E*yf11{*|P)=#RBrAqynj2i(^=f1s3BNQY|AE zScnA{Vu4i3DZuGbWGDq5(I5rhslnfZ_g)Qdot$&Djx(y7VTE@i_~~r5?TBlZTr>cc zoHlS$HKV8a2++TuO(OcqG>Kf9h^#)P z(Rh@jcRw7IUPWIstLS7FZI#RBLN_37L5uY6my#~h)6^!~D6O~^0-9B`^9V9Z<`4Y` zB>dWI=xY|v+S&t)5_eB(dKcI}4~JotAHZW*h2VAYhBSB(UO|JP%Vo``>~F#0Erqfd z3)eBq_G^%`QyLUO{JF9k?;UZxcf|4D5yzVtJb5N;)_4!a@g9ofmD`f0H`UbQyqbw+ zXJXlz*yfq7(|e5hr1^Y|nWK>%^97i(?}0t0MbM! z?oG@~8p0HyowC500t9K3R=re0Vu3@kz@bPhvNW2RyYfxD5=W<;On9A6z@zns;9{+NY&4z89*8{-{kJ7ay z%SI9-LsvWsZ$*Rnm&f5!k%yxVS0 zHG4X$E`W?ZN=Zpm+D8Q0~;*1O>Ilkcy|u-o!ug0_>kSomx{w_0Pm?wt9z z()T@VH{E_I+AG|(aF*{bgxhcr!aeNZKY}f-Pr`i(?ptt{pZHI~eHrc>4*qipe;$tf zq*?wav4Qn(;JyR5-NSzkxbMOJ7|!y46X9>ck)Je+{~-3HeirWYaNmG)@t*|zCAhCS z__v`xJ^}XuxKF`Ze&Qd8`v}}89lWKV_s{3R|BN}%^ZcOm7~BJJkHS3x_X)Ts;l2WA z(|oRc)U^V)33m_Ny>R!#Sv@}8;*^~TqbnuvsTkth* zp8vqD-aNK}2Osb#hHu01OWpI(&0`kG%YzhlI`<#)@|*)YKErGkH+6GwH=RAQfxO)H zd>!UVtsJ-5ehQ8s{N((p#c$=4hwrtVM7!3x&sl!bKIN3d<#-my*DN}*T(WaNoaN&e zL$1cb|NIb051hsC!ZQY+X)OE+$Xx2cSiRZFqx3DE&nzEuo?G}ok!u0!C9Rn^|eNQy}I7M zxofz&)TtO|+uo?u>PKgq^~y%M-BRRD`niTl;8v?gM@#L}YHj`Q zqhp(;wFVF_wODPn!|1U8qm!ez-!xp9w1?>Hw>x;Yez39LsvTcPs_?A?lEc!2AGDzb`XZcg~IS+I6Ho1EG#b0jD=yae|TbcEGQP{#)87w>{v0N z8!1eNvm+C?hX=<;Zg-%u1&1~>F(I1!@=!f8GdDgOjE~F~g8AZfAs8Mnj1+=dxDomX zXW&R2*^j@2{2S%pj2!-Qw{lK@~;XoX;W79<*0m>(PMMKr^rc3)UL)u;yL zc5_w!!lha}SgDoouC9yMYA>xypxvykNuXQ;qPp2813YCwVCht&6_l4Nz&ER{YV$<3 zk_#HEtAOz@Y!;sf-*GyLtyNyVyH#Bc#Ba9(6aex+C^eRH#?OmiDYIBssjXRV(PR81 zA-J}&+6HZ-MOg%(v%b*|sn_6Ef|6=jiTEYdMD;}mtlrHEpq`kuicFx@%fYHi=5mxH z2t_!PxMijtyhf^qWLr6gnWfYwVI#}1krs9vVL6gqE=Ph4+BnNr3`m=&eG-2R_cH_Y z%~sp`lBimJZDW&2`34dL{G3wB29|7~Yy%Y=s4{>Y%o$%)x7V5iw;DC^0S}SB(JD3D zma~r-Q1%)>*J}gHQI^PR`LZyI=%6Tpjy*OYYFQj(vq!JO32$2vm629S;TrHQ@1r1-&ON}Pu zYMhkRS4!fc>Z4A`za*}*R>}bZFAuNPEUm#?UM;m&;Fp_a{BN%DzlF|{ob<_RYsG++ zJ`k)7)%Caz03{`Fd`3%{y6CeN)33s3p{qyD%s+T6afOE9X?Y_6-abX|RWH|Td{I%R zewH*mEocT<&c>%QmTu%lWeg0WHp=@I8c=UgJ?fCsHNN4^k(osck0q-fi7Z!mTC6r8 zrm;|oV41>ak*Y^&^e6add8$VoN)!JmO#GuP1yd;lT`5Zn*cAY2djttchuLhG*+;=s z8P*AQ#w~P&##aUC9H_wb5drwn_}A$LjXJB+a?m;{p4Q@JNwXkU8{(l_!4LQatDOFe zX7)_z)5E)~ruCA5JVWZKKt{PqNTB#AJC(0makobU3*yg=z_7s$_jj!WIWga5p+j+Rr zsFd2(fH#2?rPYmU0M-V(OZ}8i*s5=!*$6^z8FC8<85D~`lq0R8iI$fU3oNle<4;KT zJ4CH!`DpUvKd7Jh^v|>WM3i{`;p58q^yJ(^I5SolpE(%nlMK;g3*%G8H2T2I`1Ei# zdS5nrBpW@NjUG#*het?9TbwLp@XpSRXJElQl-4kZ=cZx?H>~JOb3@18Ol+<< z8=a+jBqNK)^I6e}af4~ibFg_&Haa7TFgiQyvJ=>!RtyaTnb-{5z?)$ju(@m_a@kho zGR!!9cr>GmqO>zK1Dl~3*bKdr%^5lbpP_}>pQQ%qjBG;DX4C>;Gh@tXRU^Yw847^S zP_S>NkS?g1!x=Shbl5{iJ%zjqIj=j&w6Itho|>H;FNXW)CMLqsxtWQvg&;wg9iJpJ zEO_{X!xQ_Bz!_;pm7AO%9SdhChUdpby?~R$v&AvI9KnuBzHE(-&xiRW*q;Q4l3;Ey z3HN!@gPwRU?51XOcyTeDm_96Q9{S+;frBpo;PC8Nm>U~CpgCu_1)Gntv*E$v!sy}Q z!dS?>RRy!*?DYPkhb)ZP@)|+V6wmD8k=YP;im}4f@I*K+pAKgV)5YnL>4|XW;P}ME z_{^+m@MtVND)!JU!3^}w2*v>pP8W(>5htdn4mh;^g|S0(V^brG;po`@;kgM{E~X9L zo+*;cg}wQKEog(;_-9n@o=qYm=KI;KtfWU2FoWo|8dg>+^w83n;&B~5n&;v{8v*Teabu;#2j@n8 zHCV%w>Uyxor%{Y=G~_K`9@NXN8W1P(?7tq=o26iRX+2nPmjii0YOOA{D*^sNv@dcw zc^kmM2_nu*On52eI|n?*u>xK7YEW%9Yt^7xSz3nIt}IpIN%Sj`rhLG63pmk2R$&ZE z7*lC)Kmm=w|JoY=n|1z!r_#nxlZcd^3d;Of6?hR1n)nl_O^AO2)$%P`j5jFpBOH-F6sx`(w^>P?JO;N2oOh*38_<0HCSV*B<}d?uHeBC8Qcb)orPbxI zvVn2dO$?7VtL1jBz8+Cc49tym9uO;ez<^_m;$cH`qmeLD)U1`FYyyifhiZ>}FIQ_P zGH4hWj%1@!!h2yP5+N~`a$Isw0xZ@Iv<*|Pf-A39G4M;&rV>z?DE}r#r2|uptroLl z4TC1ak-}=-Su3G4XojuT(ur!!oWdGrR_^6y_0=4Tu2H|J#$bDlR!-DMjC8ZK+<1lC zA@RLAQLf66C~0}Ul@HFcI+mKX_9@{?qD({J*m;PauBB-L^uwFfB+7}x}RMk}8#i*RrT_L(vTWho^HWe8|0;bXmb9QwW0b5;dDYG9c zNo|)RCOL^xLrR>m!1zJET`!~SCtDKbvb8v4QCmMQW$f@K@G2nn7LVNP>u95xhe3ZY z0vUJ}V9Z%%CY2}IBScBnB4DAm)FkO$Sphj3sVEL1MxmSuVSG!t*nvu9Pim#q@FFKMYVxbrg{k&&;zKkGv> zW%mlgeX`WLn_d6-y1^YpXTM)=Il?koU8^@wO_tV6$Ez4BHcb0A zS`N=#3q%K=ogXP-cueF+t4kZlC+ldG^`>HGs_T{6c@1OWt;pd#VU>4n3C+x7(1->W zhbJ*?q~StwL<9RLhG!3IP)3)?C}T;zij;893Fn<~pA+ua@aW`lE*#P3V8mRMk#qEl?I8ktl|fL`^ZSXyV3KAy*@}e&cxA&&Hwi|yFprpQ2apdBOib^?3z-$` z^AY_CgbYcH%@>tlp@Jz{8JKWs`EbnA@CI%yKnVGhpUq>YQ?<7E1vH8Y>C(hke%;A}Ff9&@C!JPEi?KWuVAbTmjq)o5w47Tw(K}t+2xwr8H&9`ae00(c&a*YMX2K zU}zeUQ~=Yybg)uok!?e&M&RgiUHZbQ`Ed+M6~?D!)Z;*5dTu7{4YIJgOl&?A+n0&$ zSM0FOot`UJ;-U|7;a*m4x&a_hD*;qg@QY=ga6Vt<^!Tj(-uK!7|hXgNqkVJJ1?K(#&7 ztkwAxd!Sk0Xy9Q>na0-3cv82tzy^c~P!;n%Vt~(gF=Tnvq)apAId+L}CH3WHzPhe9^j#~% zMB#PbHj?l5I!~BszX<*epE@}ae|{n`J#BG*B2dAB*}9HwFC@Y*+n$-uzHPU8_N94!owPbr!V;S`>( z9B^*N0Y;|}8&;X=8=r!1B@3*PIS8y>aG+sKLQNk~#AsoB9y5o8$sj4>vc!sJt! zz7(cEg&9a;22+?lDa=p`vp0pwWf+~d8k41(zfRK9cIVQD=LWcpbX8a8%A>J>IxkRP zEB6Mq`m+45VbK%A{9nUTCWiUHR_>E9|JTa>66XI}c|gMaUn>tvnEz|#Jrdr-h*vOK z!v83~A))bqt-M#l{72kshJ#0aBCbVLAp*rE`|rN+6p7=Wt)qwC1zG@iMi8SVy?87 zm?^C#W=3m?nb2BdS+tf|7Of@bcWa3`4Jjk6(vr78s=Q<)AZjQ}EMMNDziGY7%4FkOb=Hx#w z|9$e`FaHDbKPdlub(#$7l1?X>kFk9cwLu)iKXyYXbD<}Y1fO>=K?J@jTt}o^vQqo@aP(8!~)DN}9s4Mr!5~#w;W3-_XE6jcf z1)VpZNU-b%B(VtXwE+wnGW{e*rIm|H6syHZ#bW7jy;M0N0AG-~O92z&SO_dAE=`tz ztfQ6?r)xo9!`pH~s!vU_p0#Xmc$^W5)&0h^w4BmlVm=N@DT)m6eG$Gt3Q3iVm6{wG z5T&woc|cjE@(Z7&LP9XyM2e7!6d@B0LM9q9cTmk86wO@Tta_zlsx~ezSENL27$ofC zje4%0cJ=R3{d+`zl&zvUhS0#ZA)!tS$w2i8LIZMWgbdBJ6OocOD)|wGqTMti0BTo_y?gp)JW#f1?lvUH~b|^`RSj2!CFJq$_uSyfl z`U9&D$>)tE!M=%c$`G@&(I}QMZ`zEB=l`t|lV^xp3s~^R5GiqG+*n;TDMiTPlxbyQ zk)g9#LK4Yo=<53M_KM0XF6QCF3e|Ie>r=)u@U4@0mePOW1-!`#11?rmPta_ZoBD8|H8HZ+ zf0~q5tlf>2YsSJP#mmwp4LU1+90XTZxgDgEqU9#c5wnCzdZ6RgbuJjeVmvXyA?va& zMQd+mdLyGzR~1RmBYlFRBUlqGpf0Pyb|7?8(PABCx1j0M93c}~auJ&f#l48A)KwU9 z^d>3p(u=su_!%}(+%cd1<|#{Gxax(=Q=aZFV9Id=nsqBzp;S6qB zX^`TEj%e>t93QQS_6{Y{S(@X$Lou%`14u=eoHB^H6H^9BbhLLUM#H@9tcym&6TH!w zdIB45ib-Ijy+a9Xw09_h#p;h#0-1B!R>XUUVkPe0p&08<86>b7iou(aJjvz^>ylFj zv2JF6mKvZlvPqWaq*5+RbW&KXNlIsuEJ8}L$|{f)*4aB0+w1HdijmIVp%|Iy1QXNbBLMU&LM%#NS@m{#JtJQ!NX^0 zNpublyW2U$Xt#4nU^DW==^SEKw{u8fGZZ+TL(J-Q4l&Z{9Ae}wwz%2KDP4xHyV5;q ze2&p|q;8+&a~Lt5or}&}Nn-7}D+w&mUttspB(^H*5iLoqJ;sIWTa_|3jpbY-ALAln z2bGpQ$d!X!sC@}pwGb7|&KgJc(#6@T=HY0YXd`|Sn*gz?m4y_68dn6y zkqNV=DWYnUBXCbrm1b8&-J7Ih3_lSu#`2S}XBcLGl622B%m*duo^d(Px}0ZT&a*G? z*_Ze1%X{|aJ^QdVH(^iSvoG)2m-p;5tt-mDyk}pZXJ4OZANCt3;_vh9>+|gE^X%*M z?CbOF>+|xj&$F-Jv#;N?uivw;-?OjZv#;N?uivw;-?OjZv#;N?Z@{x}z_V|_vv0t& zZ@{x}z_ZWvhEe$qc=io=_6>OU4SMzsdiD)^_6>UWnckZ5o8>duPJdtw`=|HhCl4Np zDo28NpcoTz3jz%*Y3#koASUcx$HKO&F)&9MM7x2b?#aR)KP_aBsp&CH7O9zRkmw&> z#dxX}aCojbjkPypGrDVg6vvY7n;6R?jZH-q_O%!r&0#CVRME6`gWH3p@KeP-8a1u& zAEJR;-wdoPsoB7Y&{35ko2@abKf+OW;tIavaxnIJz(LtZ0tdyX0@=PBjRO;saoF=m#9@}r zp2l?kh&Y+!Ie$c)IZKSkY{`u9`6J@wNVfAw#9@Z){1I{7J*&%vp6w&zwwe^=ii`Lt zH$pP6=TGpt^IRfwN`zV`YwhxiStcQ;29PKx+;NwFg}eJ@yL+Is>Mk|JDHC$gs+EW~ zSnCF9BN&Nz~Ja5!LX$?Sl)WOG)A3fp-_7_rqE8m-kT&I8n)L2`6}Ba_%0a%sd| zWMU0WO)ZlxZd;Pwj#*4kEFudsu!JKn^Eka`5riO2td(o{_K_ z8qXIe=budtEpw+oDxq1n!a8SzNK>M^MQy>YY;o&K@JhW~t0>j1Rf+S`U8_QDT*aa| zY+Z^G(d4de&T=k-%;plqK-~PXdQB&KEi>~t;?+!Z%<|8vRJ-M%%2+3v1SK{RGDjFQ zqX3zOM}jojq6a&eQ%j<*|1zqdGKmzuy;s9`F_0U9lYo69RDQL$54MTHiM~kbY1OWd<~~Y$a)~2e|{Ky1Xki0 zy`?t?tF_}RhDlGP2oz<2k@{-A85HVrh?1zl-xMKa3ji!JgU%26{ zO+)6LKj!rx)G@EJmoi=iETD}3a!Vt3z@6V($=#CYw^m|LrS8rA2eq}58ysbqqt1x@ zjJHv8Dn?I*)vbMapL#}5o~3@B{?SGH=g*t{DbAba!+fQ>S~?Z3nN332+LFB|s@lLn zQP~U<5y1JaX8VEy9Q83w3}W}5oIWeNvD)@PSu)gcwC_gilrl4NoI@-C)Hx~%S)Fl2 z94b`tc5SVSu>_HnZCa2$&h0u5MowmwzmPF2TNWJFaZqb4C@k_$nZvhGWOvhDLT&JE zlV&w)n>hP-p;2cRE~>W>EC$2eDpU}8#;E+2X6fXNaE3GWlfhab2PgBR9+Dq*40~|^ zlzC$V+;UWH#W}zz>zYk^j1i7pwE{fPw~e!T1%XXw80f8FJW~gkc#^pYE9^MkQf;_iNhK--KK1T zn#E8b-sfXs@=amGR}wR_f~awpQxZEn0%?ujII!g}Cie z#)g#fS>BE(?US4HjCH1ood)Ikrn5l#2uw(Rpf|VkRa#Ns9PGjIi zfK$fb#CUWC5dSxWQvuFu4$d++x!DdDY@jt# z-&k)iLKn`vsNGY|1)IIWsa^@=R=d*7>F0{L^^xDrLnjZeKKaKEIfPFI`zB|esV$MS z_~OtKKK@pD_J=7k$5ImEfUyxr$rK-FwXD;W zpS?4d&!2Q}Ps2ASdP`e0=W@#gAYPvM;Rka9w~LC81&_|dkBg)j3k z?h)y^_=t4SaJId33jX<%?u+J(cT8%Tn#F0a^C#WQY4vEG(Q*7w_oVytQ!VFDvBZSh z`BN)k(#t>yNUym@0*6(W3I6mCR`R2~S(t2eTgYm|ec!W}iMgMylKjj%3ZFuu#Zm@v4OFnMmdwBMWYMM3NJuj5j_*YXdppCbL1${(##u4lcwPWK=6T zixTbPA`w$U5m5%?&h#x3>@z!;kCmMDBOuXK*t#3N*J5NjsdCC}jRuhz4YaEG?mZy- zdQR0dSUOy%{p=UcaT$~j@d43w_YEj(&8A_^2PV*G1N}CDV}?1wB7@uE(#dFzCX>SD zvlvp|#5&qIu0&OM2J}TZEmYZmup{eAFW_Dw|(Hrf!<*s9kvle)`^9Lx{gCou#pdgDTSwG}#jPnO5B=h4R z`~eEl4t?ElAAx7vzaI~yv!D9!<`5rqc#bZex99L^(uOUlCkaHLo+A)}@gY9X*nvRj zbev^$3rakum~Wbu>)3LqyQa({8cUE(h2|9Jz`M37+^OES;JFAquq}w-U4Xypz@&fE zfl0r2d(2PzTOFA64>>UDA9G;RAL>ZTKjy%s-+w`p{-6Vs{yhh#{vS9n>A{Yq`~?pD zJdisb_$t63-5K*=3-}Wb+zt4V7sd1&0Ke6NdjUV$71IX*PrNvWZw7qb?ihY0;2Rux z6z~<@F?}3xw*xbMFLz*;-@FF{)dh!ZdoZN|`M)6e?oTQnyy?NO^Wa|s`~dV_0DoK1 z5xg1xeGdFZ%%{(pGzUwH8U>%kqS!V*pWFYw@B^x#)| z@SF$NJosJ@e#Cv3km-dz>p(Fqx=vuks7T{F(vmwugV}(eFD8%=m17#Q1!E(rtgV75#eCA7#;fea|%f zt6usZ2i%SP+ld^aJwE;OhRzHm{fC}B)BBi{o=e!U&Bgrg2F(7SHvr1t=+Q?2-;DSv zl9eCS|87VBeHrmDToB8bp>GlJ#n88Xi}JDkeO7u;K>h~ULo>7NeY1^a)3wAKz1;_kwQo^KxWNKVYbn`12lI z@ZhEgKkUIzc<|>v_$d#*{6a5&4=#9c(}N%O;3quz^B(+^2VahqC(`f11rKg|@WTeS z<>$A@CqSQa^7oGoZ1ev+fD51_TO|K~?jn|iUaXHk+~v{pfcd;}HAGl{*k8NPAFuTI zS-9P6Y>-XWT`p)M+E1yN*X`TmZ|2^&RZ&rctI?=u|V+3YzR{r5b3 z{uJ;p<9>G3)ZecGzQCzJ-}U$}evZE1*!u3%e;#yHp3ZBGzUu(nYuEPg{^aX``K-f> z@PAgi^oN&i-xmCTN=K^<0>aO^BnVz_?zfi%z8vtc04AMqmw}50&U^G}z`ySBF9H5* zz_g$88-RD1^b&p$@I}Uc!lwb_nKO#--+J)>4)_->9qr*WfM4doe*rjWVd(od-~k8T zffp7RzS@Ix9(=%q@9^Lg9{gqx{?{J-ArJn72Y=gxFTONs?@K)R6&^h2!FPG^FM06W zJotA!_&<8^*8%Ub`HB4hK482PMCEnq&n4j-Jb1)|k9zP)5B^mTejng};>7o15B{tN ze;M$w!~ZQ0{xRS&hkhwu&|P>pV7%jK`jFlm0Z&^P^=q#O-wt@zp&tRf2$%|XgMS5Z z%g_m*^x!vo@NanVZ+q~^Jorfu{-y{2tp{IvS<;>tdGMeIPkZo+2mdnA{O0yy?Mj^x#K5_}_W(M?Cnm9{g1ge#(O{xH4(~ z3q5$yg9{$K;=%WN@S8pOHvw-r{o4ls{|4aQyuYJ={5ar`170!krvPKjMPc-Je-8K^ zfcbpL`~6dZ|CNOy|C|>D!M}FkZovNr@DoPg9>91<@9Z-0?SS71n2$}2zX14u1$>)< zYk>bRz-Wd-UkChMz|tRs|6T)w9P9@C77u%i9oz6|gX?F0R0z~c^m0`Q~*9|L^If$su5=fI}`FFNq+0l&(D ze+_U6@SP^U#{hraq5lrxKL9NG2Ydbi@MRcp9y0uY40s%{eV+SEz*Pr+3h+O3;EtaU zg5LxTw50DvfPWY8Jq8{CoVzgAw-4~711|!u0q!>Z>wtd+@bw0M1K{5Ue9XYV2Kf1% zLFcG}PXk^AEai{%{BMBQ0OK|&_IwubYXRS4;6DTW?*T6x_-lY)a#7Iv7@nb}z5@P( zi-XR70|&^6|Mr|1z7p_F&kZ^sH1a)we;4qZ@E%I}J%EQV3p%ef@&^GgUXJt|xCnUT zc|qsAk*@&$4B#UMJ_-1xR|K7StQCE~0(by0$8o9uF~GSigU&|{`~kq9c|p)wF#LZ6 z_{CQRo!>Cw;=VSOAfWHg)3M2nrz&lrjZ{3yomV;jt9`*S-`Jy;1b{xU|U|BfHwfY&G7#Vz?WScbbi#pzXAA<0pl@L z^gRLiF9F|d;12_S(LajyeG+gE@ViX<{s{2oi-XR#;r|Q39|zoJ;O_(eOTbqDC3w;L zE?{fl3jpuf9jE6ez!w3Q{s`&21@Q9$|Bcai0Pwb72s+mddU4X9uj7c1cpYTfw2Rff}+4k*04lttX zV)+st0Ssmtzq<@0HbuZIfN>iJy(2hgU@9T~wSXT4{jDfK(u3|w4?a@6Du)Pkw*dy- z?VdiO@nH)DaT*@OLlWLAVFm>YwsucHaRA#rdxGS$C%aH5iPgnWW^tJ;W5Ze=vqaA< z#v(ha-nmeE6Jm8rMwA;ylb0U!|1ht5laZj;A@-N+}#a zb)H7@8<{CAj(%;eq_A9{nnL1Z*C`wi8crb_C(}3__?hD4r@zz4MlFTI_qtO!IrTdO zyOhG6tfZ5DG7E{XRYSO^=jd>;FTcOPw{Q4pd977z;lCfNNl(C>d-8jypx|%W!pR8VQH%~tgt%@1;^N;_RvWyN)jdl%06Udwn>ADzQ$JAd ziF)Mg$eo3bG@Vg?@GNvcPyP7E&Mc3QFP$;|T;Eyf181T8b^&Z*J z9gplZ*yb8KY;By&4HVMLmT^3|w8718AmC&@ezHr1NU71Fl;1{LD;w=f{p7ma4o%N5 z{qHK)Y&l&4SHhQ8&qJQ)R_;_*Aothh27cuG%3CHHyQ&`kzu=h>A0 z&!9~Hps!2tw90bWJUU9;vJ8OWif-}=*LliOQo@kfFUNf4dgGJ>-ct+qZPZpP!)=_@ zgv~_NR(E&t;ADu;HJ#}19_yaz9__xpdtdi#_nxuI?)m*QwZ3jF!XC{H5}3u`BA@GCxOpO%>z)N>7MNLJ#>d9S@PD}bUbwm0vDx{-?t5p8w~yRD zs^A`g2Pe9xi{q1H-G%9y@$RvG!$aM33*C5*nHn7~j82U2>n@BP8tR_G#I0yC_!AU*Bc&6@;1pO#gatbQ*Gh|GwkKE&kiso`M~4Da@ zF-f9IY;~nHx_SIW8Y%ru3a#reeZ}QQIg%nP5}1YqvC<;g!B$;Qo5Btw zrDGKzZNRf3_Pb@0xN|FuuvTBM;`FFfSu~uyRBhJEStK5Zm%=xiRhC%_kK_0%X=Igo z4{IB>w5Dbihnle_I>i}kn@=giV^po4!fv#1E}fLGOR}9ztl45hugD^NM%hF(zaS!l zZ+}Ecry(Z!>4+%lw8#^-CPIQ}8`ai|O{t<Vb30Em1ws?=l*g}Z>$>e|s}A%1Te8^i79AUVQZPHk{7a%6*r<$Jq@1v%^? zftww370Dsbg@xV>oG+RWGenCE2}!J5cdT@em`G@I35is=ghX;&f}9p$)8rE5?0_u7 z;8s@c@d(kLd*9rM;F}u}d~+j0f9Ts4k<8A1Yx3CSaH5n2K79M!jBBMF>yaA>@!=FF zs}-BVB&-#lgqiUXA(06SIJakS(qjEwvJ;sebWtd{(Yc3TSY>+XMT##v2*cs)vqxnl zae82e#m&qosuwp7>oE;sXP81~(iA<5hzg&r#anSR#d45+hiAUDu zXZzClM13p{PvU%aSCXewh5HJ(hjJR2qf!VX2UEP$^ZUu0EMQ?S77m05hq3X9P$FGG zZP-xSesG6{R2uH*_=}ly_ zo{;Y-kIoLUNhc!Fyonfc?J;M$xk_fildxHM5{3yT(V^f>{r$6tOLtf28cFp)hd7Ln zr|T#CNs$OAl;rikN}C+UF@6cls0`Q%7b_>6Ia~{qiP|4x+cxgwe5#N!IgZouri+_T zzNOED2-<*oK*Ts2PNXe^0O7EGvd*J=@!S=zRoCiGKBD3tC%5iutK6)g?9MCQC2ThE z%n}nE&E@(Uo|&SjPmX5c!Ao&19I9&K<=4;J8x3ySHzu1qs3eH*O^s5SkKzJjkgw6K zm-*=GXDV)ntx8D}qNpS8TjS;_XeWj_HrE)_gS{;AMV6V02yeX03fHJl?FMKQhtq1mUzz#2Q&SVmRLlIW5SS z)AiOG8l%NVbzcx{rl^se4bjG8BQdzleTp^AxFnjE5#oEgq(4N6ukwlquo0eEX3w8M zH*okhjw;4i1vk*hTKWku`2^URKk#KvkmwHza&N$Z4zsMgdtV7hYk}kF?gsU^Z!$vq<}hg zch?;Q)pBmR)Z6>2V7R$9LDWq*;RJ4+8IAxxE4X?b!wxG5bEqd|Cm~;xtF15Bfy9U9 z$bV{WslM7mXtP;ehF7VTkQbO_Lv3%pV(;F*9FXP4#w$iJ>sH;oX|lg(xzW?2>}svm zenrpG33#|WwT|ld;3n&pjn!(g+G>ZrDHrCc~3*ReZ$x;$ZaVqqkRUtKo@(qbL}< zkqLZ|{^-8i`cce8qA-u*8J=D_JlV7QH29bA2~Vy)Es2$LjREGAH#cb<1~zW0Zt|wH zh8`U=o9Ad_Lc>obR9dQ?tDMQewWpgO=n>3xFS2o*M@e;|u`r=6tZzun_G)j_Q}?jw z#erl02~Sre)Pp5C2)vH7_T|Hcz6_Tfq;Qzc^>JKs;N!UDAcez{gEVd}h2xR~pHG(@ zq_9|W;NxV;K?*5L4t%UGIqI?4$$`%(OAdS_mmK&wE;;aVvg9Cz#F7Ia$0Y|o zPL~{{u}djVt}gKTWXXY# zpxfr!6!=^A;x`WG_73zO21|BlUa2;4r$t9wH+^%q)s?QUo5s;+;*N841}{G?g!lpA zV)gEL)kfIgyC)poKXWwS)7!K6=%}pRI6A&wUfrlvVFB(fcs#)eFJ7@b4Cm&@XUC_f z!uhcR{Vsg-a=2@tZ|`oyhz$iCub7_91%<;13?tAZ$qh?OOU>#D3oSQGYgG&IE?~oa z0*k_ROy8+A9(#`CnZiK0aRyk$v4+Qa`0b|n>vbG3*TWY;^f^GU7(#%RUBQsvzqyvH zvvUfIuKoqqt_Hz{)Woi2X+b~J<_kiz^VRC3hxqLtQBkU0|4_f55w9p9?fBZ{W zoBI$$dRe}^0CFv|y>6^+54y0Xk1D?a$MWFXSFXo2Wq}a((7t|q@F3RS*~{v?2ME-O r=z8*<+XJYJE?d6$0b^xI{0{iK96?KaBWP~CyB^;jJVF6;S-$@tL);pc diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.hex b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.hex deleted file mode 100644 index ce22728..0000000 --- a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.hex +++ /dev/null @@ -1,1252 +0,0 @@ -:020000040800F2 -:100000002041002059020008510500084905000858 -:100010004D05000809050008C105000800000000A2 -:10002000000000000000000000000000590500086A -:100030000D05000800000000550500085D050008DA -:1000400073020008730200087302000873020008BC -:10005000730200087302000811050008730200080B -:10006000730200087302000873020008730200089C -:10007000730200087302000873020008730200088C -:10008000730200087302000873020008730200087C -:10009000730200087302000873020008730200086C -:1000A000730200087302000873020008730200085C -:1000B000730200087302000873020008730200084C -:1000C000730200087302000873020008730200083C -:1000D000730200087302000873020008730200082C -:1000E000730200087302000873020008730200081C -:1000F000730200087302000873020008730200080C -:1001000073020008730200087302000873020008FB -:1001100073020008730200087302000873020008EB -:1001200073020008730200087302000873020008DB -:1001300073020008730200087302000873020008CB -:1001400000000000000000000000000000000000AF -:1001500073020008730200087302000873020008AB -:10016000730200087302000873020008730200089B -:10017000730200087302000873020008730200088B -:100180007302000800F002F800F057F814A696E891 -:10019000000CB244B344DA4501D100F04EF8BAE89D -:1001A0000F000FA696E83000A5EB040504EB060748 -:1001B000AAEB0704A7F101074FEA15154FEA34141B -:1001C000A4F10104AC4201D300F037F813F0010FA1 -:1001D00018BFFB1A43F0010300F001F8DBE71847F2 -:1001E000004C0000204C0000103A24BF78C878C1B1 -:1001F000FAD8520724BF30C830C144BF04680C602D -:1002000070470000704700000023002400250026EE -:10021000103A28BF78C1FBD8520728BF30C148BF69 -:100220000B607047642900F07F80002070471FB585 -:1002300002F004F91FBD10B510BD00F02AF91146F7 -:10024000FFF7F5FF01F074FE00F048F903B4FFF783 -:10025000F2FF03BC00F050F9094880470948004705 -:10026000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE766 -:10027000FEE7FEE704480549054A064B70470000C3 -:100280006105000885010008203B00202041002076 -:10029000203D0020203D00200FB41CB5074B06AACE -:1002A0007B4469460090059800F0DBF80020694621 -:1002B00000F0EAF81CBC5DF814FB0000E50100004A -:1002C0002DE9F0410E460446002020622046E168F8 -:1002D000884730B3252805D0D4E901219047206A0A -:1002E000401CF2E7E168204600278847050018D047 -:1002F000A5F14100192802D820354FF40067324695 -:10030000294620462760FFF78DFF40B1012804D021 -:10031000F61D26F007060836D8E7361DD6E728462C -:10032000DAE7206ABDE8F0812DE9F04106460024B5 -:1003300010687529314616A510D0AFF3008000284B -:1003400002DA404213A507E031688A0701D512A5F9 -:1003500002E0490704D511A5012401E0AFF30080B4 -:1003600000210A2206F1240709E0B0FBF2FCB0FBF1 -:10037000F2F302FB1C00303078541846491C002868 -:10038000F3D123462A463046BDE8F04100F00BB8D1 -:10039000000000002D0000002B00000020000000E5 -:1003A0007047704770472DE9F0470D4699469246D1 -:1003B000044600F124080168880604D5E06921F0AC -:1003C0001001216000E00120A84201DD471B00E090 -:1003D0000027A1697A1902EB0900081AA0612078A8 -:1003E000C00602D42046AFF30080002608E0D4E91E -:1003F00001211AF806009047206A401C761C2062F2 -:100400004E45F4DB2078C0060AD52046AFF30080C5 -:1004100006E0D4E9012130209047206A401C206288 -:10042000381EA7F10107F4DC07E0D4E9012118F830 -:1004300005009047206A401C2062281EA5F1010596 -:10044000F3DC2046AFF300802078000602D50220BE -:10045000BDE8F0870120FBE701694A1C02610878CA -:10046000704700B58FB0CDE90131002105910549F4 -:100470007944CDE9031011466846FFF721FF0FB01C -:1004800000BD0000E5FFFFFF0A6802F8010B0A60EB -:100490007047754600F02CF8AE4605006946534695 -:1004A00020F00700854618B020B5FFF7E3FEBDE851 -:1004B00020404FF000064FF000074FF000084FF0CB -:1004C000000BAC46ACE8C009ACE8C009ACE8C00918 -:1004D000ACE8C00921F007018D46704710B504460D -:1004E000AFF300802046BDE81040FFF7AFBE00002C -:1004F000004870470800002001491820ABBEFEE705 -:100500002600020070470000FEE700007047000070 -:1005100080B5052000F0D2F9012001F0DDFB40F6A6 -:100520000000C4F20100012101F0D2FC002818BF34 -:1005300080BD40F20000C2F20000017804220429CC -:1005400008BF0122027080BDFEE70000FEE7000048 -:1005500070470000704700007047000070470000BF -:100560004EF6885CCEF2000CDCF8002041F200016F -:1005700042F47002C4F20201CCF800200A6842F092 -:1005800001020A600A689207FCD54A6822F0030259 -:100590004A6000BF4A6812F00C0FFBD100224A608B -:1005A0000B684FF6FF70CFF6F260184008604FF40A -:1005B0001F000A6388604FF000604CF8800C7047A1 -:1005C000FEE7000070B584B04FF4C0100121012592 -:1005D00000F0DCF800200021002601F0CBFB01AC8C -:1005E000204601F073FB40F20110ADF80C002046EC -:1005F0008DF80460029501F075FB032001F0E0FD29 -:1006000006200021002201F0A1FD04B070BD000011 -:10061000B0B582B00220C0F218000121012500F01F -:10062000B5F86C46204601F09BFB41F60000C0F295 -:100630000010CDE9005040F60000C4F20100214650 -:1006400001F0E6FB02B0B0BD41F20401C4F20201C8 -:100650000A6800F00F0022F0F00242EA0010086081 -:100660007047000041F20401C4F202010A6800F080 -:10067000070022F4E06242EA0020086070470000B0 -:1006800041F20401C4F202010A6800F0070022F4FA -:10069000605242EAC02008607047000041F25401F5 -:1006A000C4F202010A68012822F0300208BF303289 -:1006B0000A607047042888BF7047DFE800F0030C29 -:1006C00019262F0041F20000C4F20200026861F313 -:1006D00000020260704741F20000C4F202000268AA -:1006E00001F0010122F4803242EA014101607047C9 -:1006F00041F20000C4F20200026801F0010122F0A0 -:10070000807242EA01610160704741F20000C4F268 -:100710000200026A61F300020262704741F20000C7 -:10072000C4F20200426A61F30002426270470000B4 -:1007300041F20002010CC4F20202895800F01F00CD -:1007400021FA00F000F001007047000041F254016E -:10075000C4F202010A6800F0030022F4405242EAA7 -:10076000003008607047000041F200010020C4F230 -:10077000020100BF0A68920304D4B0F5405F00F1A3 -:100780000100F7D30868C0F34040704741F200020F -:1007900000F01F034FF0010CC4F2020201290CFA11 -:1007A00003F14FEA1040835814BF23EA01011943B3 -:1007B0008150704780B541F2040EC4F2020EDEF89B -:1007C00000C060B14CF48033CEF80030DEF800C0D9 -:1007D000012814BF4CF400302CF4003001E02CF45C -:1007E0008030CEF80000DEF8000061F39540CEF8CE -:1007F0000000DEF80000090961F35E70CEF8000029 -:10080000DEF8000020F0004040EAC270CEF80000A0 -:1008100080BD000041F20000C4F20200016841F016 -:100820000101016001688907FCD5416821F00301DD -:10083000416000BF416811F00C0FFBD10021416005 -:1008400002684FF6FF73CFF6F2631A40026001634D -:100850004FF41F018160704741F20401C4F20201AC -:100860000A6860F301020A607047000041F2040068 -:10087000C4F202000068C0F38100704780B5042014 -:1008800001F0D0FD40F20400C2F2000000684DF615 -:100890008361C4F21B31A0FB0101880C40F284018A -:1008A000C2F20001086008684FF47A71484340F2D0 -:1008B0008001C2F20001086080BD0000002808BF6E -:1008C000704780B54EF2100140F2800ECEF200016A -:1008D000C2F2000E4FF0320C002300BF82B2332A66 -:1008E00006D3DEF80020323802FB0CF24A6004E046 -:1008F000DEF800005043486000208B600A6842F038 -:1009000001020A600A6802F00112012AFAD00A689C -:1009100022F001020A6002048B60DFD1BDE8804052 -:10092000704700002DE9F04381B040F60044C4F266 -:1009300001048946074620464FF4804198461646F2 -:1009400001F00AFA20464FF4805101F005FAA4F5AF -:1009500054452846442101F055FC00BF284680211B -:1009600001F052FC0028F9D120464FF4805101F0EB -:10097000F5F920464FF4804101F0F0F920464FF49C -:10098000805101F0E9F9C7F3C701284601F03AFCAC -:100990002846802101F038FC0028F9D120464FF488 -:1009A000805101F0DBF920464FF4805101F0D4F979 -:1009B000C6F3C701284601F025FC00BF2846802168 -:1009C00001F022FC0028F9D120464FF4805101F0BB -:1009D000C5F920464FF4804101F0BEF920464FF49E -:1009E000805101F0B9F92846452101F00BFC00BF08 -:1009F0002846802101F008FC0028F9D120464FF458 -:100A0000805101F0ABF920464FF4804101F0A6F986 -:100A100020464FF4805101F09FF95FFA89F1284692 -:100A200001F0F0FB2846802101F0EEFB0028F9D10F -:100A300020464FF4805101F091F920464FF4805147 -:100A40004FEA192601F088F92846314601F0DAFB11 -:100A50002846802101F0D8FB0028F9D120464FF428 -:100A6000805101F07BF920464FF4805101F074F978 -:100A70005FFA88F1284601F0C5FB00BF28468021B7 -:100A800001F0C2FB0028F9D120464FF4805101F05B -:100A900065F920464FF480514FEA182601F05CF9C1 -:100AA0002846314601F0AEFB2846802101F0ACFB20 -:100AB0000028F9D120464FF4805101B0BDE8F04341 -:100AC00001F04CB92DE9F04381B0814640F6004871 -:100AD00000200021C4F2010800F08AFF40464FF4D4 -:100AE000804101F039F940464FF4805101F034F96A -:100AF000A8F554463046262101F084FB304680217B -:100B000001F082FB0028F9D140464FF4805101F0FA -:100B100025F940464FF4804101F020F940464FF45A -:100B2000805101F019F9002443F6982519F8047052 -:100B30003046022101F068FB0028F9D030463946E2 -:100B400001F060FB0134AC42F0D100BF304680219F -:100B500001F05AFB0028F9D140464FF4805101F0D2 -:100B6000FDF80020002100F043FF40464FF4804193 -:100B700001F0F2F840464FF4805101F0EDF83046B4 -:100B8000242101F03FFB00BF3046802101F03CFBF7 -:100B90000028F9D140464FF4805101F0DFF840467B -:100BA0004FF4804101F0DAF840464FF4805101F0F3 -:100BB000D3F8002443F6982519F804703046022132 -:100BC00001F022FB0028F9D03046394601F01AFB2B -:100BD0000134AC42F0D100BF3046802101F014FB5B -:100BE0000028F9D140464FF4805101F0B7F801B028 -:100BF000BDE8F04300F086BF2DE9F04381B08146A7 -:100C000040F6004800200021C4F2010800F0F0FE88 -:100C100040464FF4804101F09FF840464FF4805128 -:100C200001F09AF8A8F554463046242101F0EAFA7A -:100C30003046802101F0E8FA0028F9D140464FF40F -:100C4000805101F08BF840464FF4804101F086F866 -:100C500040464FF4805101F07FF8002443F6982578 -:100C600019F804703046022101F0CEFA0028F9D0BC -:100C70003046394601F0C6FA0134AC42F0D100BF2B -:100C80003046802101F0C0FA0028F9D140464FF4E7 -:100C9000805101F063F800F0A7FF0020002100F070 -:100CA000A7FE40464FF4804101F056F840464FF40D -:100CB000805101F051F83046262101F0A3FA00BF1F -:100CC0003046802101F0A0FA0028F9D140464FF4C7 -:100CD000805101F043F840464FF4804101F03EF866 -:100CE00040464FF4805101F037F8002443F6982530 -:100CF00019F804703046022101F086FA0028F9D074 -:100D00003046394601F07EFA0134AC42F0D100BFE2 -:100D10003046802101F078FA0028F9D140464FF49E -:100D2000805101B0BDE8F04301F018B870B540F64D -:100D300000440546C4F2010400F072FD20464FF461 -:100D4000804101F009F820464FF4805101F004F889 -:100D5000A4F554463046102101F054FA3046802163 -:100D600001F052FA0028F9D120464FF4805100F0EA -:100D7000F5FF20464FF4804100F0F0FF20464FF48D -:100D8000805100F0E9FF3046294601F03BFA00BFF0 -:100D90003046802101F038FA0028F9D120464FF47E -:100DA000805100F0DBFF40F27C00C2F20000002125 -:100DB000017070BDF0B581B040F27C06C2F2000651 -:100DC000307840F60044C4F2010498B9A4F5806577 -:100DD00028464FF4807100F0BFFF3220FFF76EFD10 -:100DE00028464FF4807100F0B9FF3220FFF766FD0E -:100DF00001203070A4F5806630464FF4007101F098 -:100E000067F870B149F64145013D00F09581012038 -:100E1000FFF754FD30464FF4007101F059F80028F7 -:100E2000F2D120464FF4804100F096FF20464FF467 -:100E3000805100F091FFA4F554452846122101F09D -:100E4000E1F900BF2846802101F0DEF90028F9D140 -:100E500020464FF4805100F081FF20464FF480413E -:100E600000F07CFF0A20FFF729FD30464FF40071A7 -:100E700001F02EF878B149F6414700BF013F00F07C -:100E80005B810120FFF71AFD30464FF4007101F03D -:100E90001FF80028F2D120464FF4804100F05CFF9B -:100EA00020464FF4805100F057FF2846212101F0E1 -:100EB000A9F900BF2846802101F0A6F90028F9D140 -:100EC00020464FF4805100F049FF20464FF4804106 -:100ED00000F044FF20464FF4805100F03DFF2846CB -:100EE000402101F08FF900BF2846802101F08CF9E4 -:100EF0000028F9D120464FF4805100F02FFF204602 -:100F00004FF4805100F028FF2846002101F07AF9C3 -:100F10002846802101F078F90028F9D120464FF4C5 -:100F2000805100F01BFF20464FF4804100F014FF79 -:100F300020464FF4805100F00FFF2846012101F0B8 -:100F400061F900BF2846802101F05EF90028F9D13F -:100F500020464FF4805100F001FF20464FF48041BD -:100F600000F0FCFE20464FF4805100F0F5FE2846CC -:100F70002B2101F047F900BF2846802101F044F9F8 -:100F80000028F9D120464FF4805100F0E7FE2046BA -:100F90004FF4805100F0E0FE2846012101F032F9C3 -:100FA0002846802101F030F90028F9D120464FF47D -:100FB000805100F0D3FE20464FF4805100F0CCFE6B -:100FC0002846002101F01EF92846802101F01CF975 -:100FD0000028F9D120464FF4805100F0BFFE204692 -:100FE0004FF4804100F0B8FE20464FF4805100F0ED -:100FF000B3FE28463C2101F005F900BF28468021B8 -:1010000001F002F90028F9D120464FF4805100F098 -:10101000A5FE20464FF4804100F0A0FE20464FF48C -:10102000805100F099FE2846012101F0EBF800BF45 -:101030002846802101F0E8F80028F9D120464FF435 -:10104000805100F08BFE20464FF4804100F084FE7A -:1010500020464FF4805100F07FFE2846112101F018 -:10106000D1F800BF2846802101F0CEF80028F9D140 -:1010700020464FF4805100F071FE20464FF480412D -:1010800000F06CFE20464FF4805100F065FE2846CB -:10109000032101F0B7F800BF2846802101F0B4F821 -:1010A0000028F9D120464FF4805100F057FE00206F -:1010B000002140F28F1240F22B13FFF733FC204641 -:1010C0004FF4804100F048FE20464FF4805100F07C -:1010D00043FE2846182101F095F800BF28468021DC -:1010E00001F092F80028F9D120464FF4805100F029 -:1010F00035FE20464FF4804100F030FE20464FF48C -:10110000805100F029FE2846802101F07BF800BFC5 -:101110002846802101F078F80028F9D120464FF4C4 -:10112000805100F01BFE0020002100F061FC01B0A6 -:10113000BDE8F04000F0E8BB012001B0F0BD0000C8 -:10114000B0B5FFF737FE00281CBF0120B0BD40F648 -:101150000044C4F2010420464FF4804100F0FCFD3D -:1011600020464FF4805100F0F7FDA4F55445284681 -:101170003C2101F047F800BF2846802101F044F8E7 -:101180000028F9D120464FF4805100F0E7FD2046B9 -:101190004FF4804100F0E2FD20464FF4805100F012 -:1011A000DBFD2846802101F02DF800BF2846802174 -:1011B00001F02AF80028F9D120464FF4805100F0C0 -:1011C000CDFD20464FF4804100F0C6FD20464FF48F -:1011D000805100F0C1FD2846212101F013F800BF25 -:1011E0002846802101F010F80028F9D120464FF45C -:1011F000805100F0B3FD20464FF4804100F0AEFD79 -:1012000020464FF4805100F0A7FD2846002100F051 -:10121000F9FF00BF2846802100F0F6FF0028F9D131 -:1012200020464FF4805100F099FD20464FF4805144 -:1012300000F092FD2846002100F0E4FF28468021BE -:1012400000F0E2FF0028F9D120464FF4805100F071 -:1012500085FD0020B0BD00002DE9F04184B00224DE -:10126000C0F2180420460121FFF790FA601C01210A -:10127000FFF78CFA02AD284600F072FD40F60044FC -:10128000C4F20104A4F5806630464FF480714FF437 -:10129000807700F061FD40F20040C0F21010CDE90F -:1012A00002703046294600F0B3FD1820ADF80D005D -:1012B0004FF4007002903046294600F0A9FD204608 -:1012C0004FF480414FF4804600F048FD4FF0100885 -:1012D0004FF48067204629468DF80E80ADF80C70DB -:1012E000029600F095FD4FF400500826029020462B -:1012F0002946ADF80C708DF80E6000F089FD4FF4B2 -:1013000000400290204629468DF80E6000F080FDD6 -:1013100020464FF480514FF4805600F01FFD2046C8 -:1013200029468DF80E80ADF80C70029600F070FD25 -:101330000E20C0F21C000121FFF728FA6D46284656 -:1013400000F04EFF40F20310C0F20500009040F2A2 -:101350000010C0F20110A4F5544401902046294623 -:1013600000F058FF2046012100F042FF04B0BDE824 -:10137000F081000040F2680CC2F2000CBCF81210C0 -:10138000002908BF704780B54FF0000E06E000BF8F -:10139000BCF812100EF1010E8E4513D2BCF81030BD -:1013A000002BF5D04FF0FF31DCF800209BB20EFB94 -:1013B00003220A445070BCF810308A1C01319A4252 -:1013C000F2D3E5E7BDE880407047000010B540F279 -:1013D000680EDDF808C0C2F2000ECEF80000C808A2 -:1013E000AEF80810AEF80A20AEF80CC04FF0010CB1 -:1013F0004C0718BF0CEBD100AEF81000AEF80E3061 -:10140000B3FA83F0B43BB3FA83F340095B091843A2 -:101410000846AEF812201CBF10460A46AEF804007B -:10142000AEF8062010BD000040F26801C2F20001D3 -:10143000086070472DE9F04F8BB00130069080B204 -:101440000590C01AB0F5967F00F3EF80082B02D10B -:1014500006276FB9E9E0D8085F074FF0010618BF0B -:1014600006EBD3005F08784387B2002F00F0DD80E1 -:10147000A2F1200085B25808039042F2564005EBD5 -:101480004502C0F6000000EB4200049042F6F22054 -:1014900040F26806C0F60000DDF818E001314FF6B2 -:1014A0007F7B00240192C2F20006802200EB05102F -:1014B00002950090CDE9077312E000BF05991FFA6D -:1014C0008EF0401A03998842069808BF864609990B -:1014D00008BF083107980A9C0134844200F0A580B7 -:1014E000082B0A9402D1049818E000BF182B0AD0E8 -:1014F000102B12D00C2B40F09880019842F27E63A2 -:10150000C0F6000306E0029843F2E20300EBC000DD -:10151000C0F6000303EB800000E00098204490F840 -:101520000090AEF101084FF0000C099124E07089A1 -:10153000A0EB0E00348A80B21FFA8AF3604334684D -:1015400000EBD303E018E35C0AF007050FFA8BF712 -:1015500022FA05F447FA05F51C4303EA0507149B34 -:10156000002B08BF274607704FEA59090131BCF12B -:10157000070F0CF1010C4FD2F0895FEAC974A1F199 -:10158000010A0BD1B32815DC20B35A28ECD13089DD -:101590007389A0EB0E0A581ACCE700BFB32811DC00 -:1015A000E8B15A28E0D130897489A0EB0E0A601A9C -:1015B0001DE000BFB428BAD0B0F5877F5046C246C0 -:1015C000B8D0D1E7B4280FD0B0F5877F5046C246D7 -:1015D0000DD0C9E73089A0EB010A4046AAE730895F -:1015E000A0EB010A404602E07089A0EB0E00378AAA -:1015F00080B21FFA8AF47843376800EBD4043819B4 -:101600003C5D0AF007030FFA8BF522FA03F745FA5F -:1016100003F327431C40A2E7089B0EF1010E082BA1 -:101620007FF44CAF0798099955E70BB0BDE8F08FF0 -:101630002DE9F04F89B0DE085F0705924FF00102F7 -:1016400018BF02EBD306002E009600F0BB800130DD -:10165000DDF84C904E1C81B240F2680703910025E2 -:10166000C2F200074FF0800C0024314604900AE0DB -:101670000599019C029D0C4431460135009BAAB29C -:101680009A4280F09F80059A002AF6D000230295A6 -:10169000019413E00130039A81B2891A059A069CDD -:1016A0009142049908BF0846089E08BF0836079B68 -:1016B0000134013399B291423146D9D2CDE9064382 -:1016C000129BA2B213F80280A0F1010B4FF0000AA6 -:1016D000089623E07A89121A3C8A92B21FFA8EF396 -:1016E00062433C6802EBD302A518A35C4FF67F74FB -:1016F0000EF0070624B22CFA06F244FA06F61A4354 -:101700003340B9F1000F08BF1A462A704FEA580853 -:101710000131BAF1070F0AF1010ABBD2FD895FEA74 -:10172000C872A1F1010E0BD1B32D15DC25B35A2DD2 -:10173000ECD13A897B89A2EB000E5A1ACCE700BFA4 -:10174000B32D11DCEDB15A2DE0D13A897B89A2EBA2 -:10175000000E5A1A1CE000BFB42DBBD0B5F5877F30 -:101760007246DE46B8D0D1E7B42D0FD0B5F5877FED -:101770007246DE460CD0C9E73A89A2EB010E5A4602 -:10178000AAE73A89A2EB010E5A4601E07A89121AB9 -:101790003D8A92B21FFA8EF36A434C46D7F8009006 -:1017A00002EBD3024FF67F7609EB020519F802200F -:1017B000A1460EF0070436B22CFA04F32641134377 -:1017C00032409EE709B0BDE8F08F00002DE9F047F8 -:1017D00082B01C461378FBB1DDF828804FEA540A2A -:1017E0000D460646CAF59679571C06E05644B0B237 -:1017F000814511DB17F8013B73B1B0B2DAB229466B -:101800002346CDF80080FFF715FE082CEED10636F2 -:10181000B0B2B0F5937FEDD902B0BDE8F08700001B -:10182000B0B540F60044C4F2010420464FF48041B4 -:1018300000F092FA20464FF4805100F08DFAA4F5A2 -:1018400054452846222100F0DDFC00BF28468021B7 -:1018500000F0DAFC0028F9D120464FF4805100F066 -:101860007DFA20464FF4804100F078FA20464FF48C -:10187000805100F071FA2846832100F0C3FC00BFBC -:101880002846802100F0C0FC0028F9D120464FF402 -:10189000805100F063FA20464FF4804100F05CFA7A -:1018A00020464FF4805100F057FA2846202100F0DE -:1018B000A9FC00BF2846802100F0A6FC0028F9D131 -:1018C00020464FF4805100F049FA20464FF4804101 -:1018D00000F044FAA4F5806420464FF4007100F053 -:1018E000F7FA70B149F641450120013D08BFB0BD8E -:1018F000FEF7E4FF20464FF4007100F0E9FA0028FB -:10190000F2D10020B0BD0000B0B540F60044C4F2F2 -:10191000010420464FF4804100F01EFA20464FF4A7 -:10192000805100F019FAA4F554452846222100F010 -:1019300069FC00BF2846802100F066FC0028F9D130 -:1019400020464FF4805100F009FA20464FF48041C0 -:1019500000F004FA20464FF4805100F0FDF92846CB -:10196000E02100F04FFC00BF2846802100F04CFC35 -:101970000028F9D120464FF4805100F0EFF92046BD -:101980004FF4804100F0E8F920464FF4805100F018 -:10199000E3F92846202100F035FC00BF28468021CD -:1019A00000F032FC0028F9D120464FF4805100F0BD -:1019B000D5F920464FF4804100F0D0F9A4F58064B9 -:1019C00020464FF4007100F083FA70B149F64145AA -:1019D0000120013D08BFB0BDFEF770FF20464FF467 -:1019E000007100F075FA0028F2D10020B0BD0000AF -:1019F000F0B581B040F60044C4F201040E4607463B -:101A000020464FF4804100F0A7F920464FF4805162 -:101A100000F0A2F9A4F5544528464E2100F0F2FB4F -:101A20002846802100F0F0FB0028F9D120464FF431 -:101A3000805100F093F920464FF4804100F08EF978 -:101A400020464FF4805100F087F9C7F3C7012846BC -:101A500000F0D8FB2846802100F0D6FB0028F9D101 -:101A600020464FF4805100F079F920464FF4804130 -:101A700000F072F920464FF4805100F06DF92846CD -:101A80004F2100F0BFFB00BF2846802100F0BCFBC7 -:101A90000028F9D120464FF4805100F05FF920462C -:101AA0004FF4804100F05AF920464FF4805100F085 -:101AB00053F9F1B2284600F0A5FB00BF284680216B -:101AC00000F0A2FB0028F9D120464FF4805100F02D -:101AD00045F920464FF4805100F03EF9C6F300214D -:101AE000284600F08FFB00BF2846802100F08CFBC9 -:101AF0000028F9D120464FF4805101B0BDE8F040F4 -:101B000000F02CB9B0B540F60044C4F20104204600 -:101B10004FF4804100F020F920464FF4805100F04E -:101B20001BF9A4F554452846222100F06BFB00BFA9 -:101B30002846802100F068FB0028F9D120464FF4A8 -:101B4000805100F00BF920464FF4804100F006F977 -:101B500020464FF4805100F0FFF82846F72100F0AE -:101B600051FB00BF2846802100F04EFB0028F9D130 -:101B700020464FF4805100F0F1F820464FF48041A8 -:101B800000F0EAF820464FF4805100F0E5F82846CE -:101B9000202100F037FB00BF2846802100F034FBF5 -:101BA0000028F9D120464FF4805100F0D7F82046A4 -:101BB0004FF4804100F0D2F8A4F5806420464FF441 -:101BC000007100F085F970B149F64145013D08BF4B -:101BD000B0BD0120FEF772FE20464FF4007100F008 -:101BE00077F90028F2D1B0BDB0B540F60044C4F298 -:101BF000010420464FF4804100F0AEF820464FF437 -:101C0000805100F0A9F8A4F554452846222100F09F -:101C1000F9FA00BF2846802100F0F6FA0028F9D131 -:101C200020464FF4805100F099F820464FF480414F -:101C300000F094F820464FF4805100F08DF82846CB -:101C4000FF2100F0DFFA00BF2846802100F0DCFA17 -:101C50000028F9D120464FF4805100F07FF820464B -:101C60004FF4804100F078F820464FF4805100F0A6 -:101C700073F82846202100F0C5FA00BF28468021CD -:101C800000F0C2FA0028F9D120464FF4805100F04C -:101C900065F820464FF4804100F060F8A4F58064B8 -:101CA00020464FF4007100F013F970B149F6414538 -:101CB000013D08BFB0BD0120FEF700FE20464FF4F5 -:101CC000007100F005F90028F2D1B0BD002141609B -:101CD000012101810170704740F21441C4F20101F9 -:101CE0000860704740F20841C4F20101426851F8AF -:101CF000083C934341F8083C51F8043C934341F8B5 -:101D0000043C437A002B08BF704703786FEA020C4B -:101D10002BB151F8043C134341F8043C04E051F862 -:101D2000083C134341F8083C0B6803EA0C030B60C2 -:101D30004B6803EA0C034B60007A012807D018B9FE -:101D400008681043086070470868104308604868D6 -:101D5000104348607047000041617047016170475F -:101D600040F200424FF6FF71C0F20012C0E90012CB -:101D7000704700008B08032B88BF704780B50C228A -:101D800002EA810E4FF00F0C02EB83010CFA0EF207 -:101D9000DFE803F0022F11200821C4F201010B68D3 -:101DA00000FA0EF023EA02020A600A681043086093 -:101DB000BDE8804070470821C4F201018B6800FA39 -:101DC0000EF023EA02028A608A6810438860BDE848 -:101DD000804070470821C4F20101CB6800FA0EF080 -:101DE00023EA0202CA60CA681043C860BDE88040A6 -:101DF00070470821C4F201014B6800FA0EF023EA93 -:101E000002024A604A6810434860BDE8804070475B -:101E1000B0B58B790A88032B0BD07BB94979282977 -:101E200001F00F0E18D0182908BF0261110616D153 -:101E30002EE04FF0000E110611D129E003F0080C3E -:101E40000B79C97903F00403634401F0030103EB48 -:101E5000010E110603D11BE04261110618D00023C8 -:101E60004FF00F0C002104E00131082903F10403B5 -:101E70000ED022FA01F4E407F6D004680CFA03F558 -:101E8000AC43046004680EFA03F52C430460EBE7EE -:101E9000B2F5807F38BFB0BD120A00234FF00F0C9F -:101EA000002104E00131082903F104030ED022FAD5 -:101EB00001F4E407F6D044680CFA03F5AC4344603F -:101EC00044680EFA03F52C434460EBE7B0BD000014 -:101ED00080680840401AB0FA80F04009704700005E -:101EE00010B582B00420C0F218000121FEF74EFCAC -:101EF0006C462046FFF734FF40F20040C0F210105D -:101F000001904FF40050009041F20000C4F2010033 -:101F10002146FFF77DFF02B010BD000041F20C002A -:101F2000C4F20100016881F40051016070470000B3 -:101F300088B000F0E5F9FEF7A1FCFEF769FBFEF7BB -:101F400041FBFFF7CDFFFFF787F9FEF733FF40F2C4 -:101F50008808C2F20008FF2440464FF4C8714FF4CD -:101F600096724FF487730094FFF730FA4046FFF7FC -:101F70005BFAFF20FFF7FEF943F63E67C0F6000765 -:101F80004B205921FA227A23CDE90074FFF750FB48 -:101F90004046FEF797FD0120FEF7C8FE41F288306B -:101FA000FEF78CFCFFF7CCF84046FFF73DFAFF2028 -:101FB000FFF7E0F9002447A20A200021182300942B -:101FC000FFF704FC49A20A20322110230094FFF7F6 -:101FD000FDFB4DA20A201D2110230094FFF7F6FB04 -:101FE00050A20A20642110230094FFF7EFFB46F271 -:101FF0006F40C0F26500069046F66140C4F620507E -:10200000059047F26120C6F67410049043F63E60D6 -:10201000C5F2200003AD03900A2047212A46182369 -:102020000094FFF7D3FB4046FEF7E6FD4FF47A70CD -:10203000FEF744FC41A600277B37284631463A4646 -:10204000FEF72AF90A2047212A4618230094FFF7B1 -:10205000BDFB4046FEF7D0FD6420FEF72FFCB7F530 -:10206000577FE9D946F26C40C0F22E00069045F247 -:102070002070C7F26F20059046F66540C6F66C707A -:10208000049043F63E60C4F620000390002703AAA4 -:102090000A20472118230097FFF798FB40F2880099 -:1020A000C2F20000FEF7A8FD4FF47A70FEF706FCBE -:1020B000FFF728FD0120FEF739FE40F20004C2F2CE -:1020C00000046425FFF72AFF20786843FEF7F6FB3B -:1020D000F8E700BF342E3220496E636820457061F6 -:1020E000706572204D6F64756C6500007769746867 -:1020F00020343030207820333030207265736F6C9C -:102100007574696F6E00000044657369676E65647D -:102110002042792057654163742053747564696F58 -:1021200000000000415433324634303341434755B8 -:1021300037204578616D706C650000003E3E204E92 -:10214000756D3D256420202020200000B0B54EF69E -:102150000C5ECEF2000EDEF800304FF0FF35C3F318 -:10216000022383F00704042C28BF0424033B05FA50 -:1021700004F438BF0023A143994005FA03F39A43BE -:1021800000F00F03043B4EF2001C7344CEF2000C2F -:1021900011430C33B0F1FF3F4FEA011100EB0C0289 -:1021A000C8BF02F540730028197048BFB0BD00F0E9 -:1021B0001F01012202FA01F140094CF82010B0BDC4 -:1021C0004EF60C51CEF200010A684FF6FF031A409A -:1021D00060F30A2242F0806040F0FD7008607047B2 -:1021E0000021C0F8031001600121C1717047000097 -:1021F000026801F0010122F0400242EA811101600F -:1022000070470000C16070478068084018BF012017 -:1022100070470000C26922F40062C2610A78032A92 -:1022200027D8DFE802F00206121A026822F4004200 -:102230000EE0026822F400420260026822F480424A -:102240000260026842F4806212E0026842F40042D6 -:102250000260026822F4804206E0026842F4004212 -:102260000260026842F480420260026822F48062E6 -:102270000260CA79036802F0010223F4007343EAA2 -:10228000422202604A78012A06D1CA79012A03D182 -:10229000026842F4807202E0026822F480720260F6 -:1022A0004A78036862F3820303608A784368072AE6 -:1022B00023F4807388BF03F5807343608A780368D2 -:1022C00062F3C5030360CA78036802F0010223F0D9 -:1022D000800343EAC21202600A79036802F0010235 -:1022E00023F4006343EAC22202604A79036862F37E -:1022F000410303608979026861F30002026070475C -:1023000080B5FEF787FA01200121FEF7D3F900BF5F -:10231000FEF72AFA0028FBD002203B210122FEF71B -:1023200049FA0020FEF712FA02200121FEF7C2F955 -:102330001920FEF7FDF90128FAD10020FEF784F9F3 -:102340000420FEF79DF90420FEF78CF90120FEF72A -:10235000A5F90220FEF780FAFEF788FA0228FBD1E1 -:102360000020FEF79BF9BDE8804000F001B80000B6 -:10237000B0B541F2040441F20025C4F20204C0F2F7 -:102380007A05FEF773FA02280BD0A0BB206D8005FA -:1023900031D5E06A800144BF46F60045C0F2DC2535 -:1023A00029E0D4F800C021682268C1F38341C2F358 -:1023B00041721301581C0F29034618BF0223002A3B -:1023C00018BF03465FEACC3003EB010006D440F6A9 -:1023D0000011C0F23D0100FB01F50CE0216889030A -:1023E00001D4454307E0216DC1F301310231B5FB52 -:1023F000F1F101FB00F540F20400C2F200000560BB -:10240000216804A2C1F30311515C026822FA01F1B0 -:102410000160B0BD000000000000000001020304E4 -:10242000060708094EF21001CEF200010A680428DE -:1024300022F0040208BF04320A607047F1EE100A6D -:102440004FF6FF71C0F2C03120EA010040F0407049 -:10245000E1EE100A70470000000000000000002FAD -:10246000000000000700070000147F147F14002400 -:102470002A7F2A120062640813230036495522502D -:1024800000000503000000001C2241000000412262 -:102490001C000014083E08140008083E080800004C -:1024A00000A0600000080808080800006060000044 -:1024B000002010080402003E5149453E0000427FC2 -:1024C0004000004261514946002141454B3100180E -:1024D00014127F10002745454539003C4A494930D0 -:1024E000000171090503003649494936000649498A -:1024F000291E000036360000000056360000000895 -:102500001422410000141414141400004122140871 -:1025100000020151090600324959513E007C121156 -:10252000127C007F49494936003E41414122007FEB -:102530004141221C007F49494941007F09090901A5 -:10254000003E4149497A007F0808087F0000417F2A -:102550004100002040413F01007F08142241007FDC -:1025600040404040007F020C027F007F0408107F43 -:10257000003E4141413E007F09090906003E4151AC -:10258000215E007F09192946004649494931000169 -:10259000017F0101003F4040403F001F2040201FBD -:1025A000003F4038403F0063140814630007087080 -:1025B000080700615149454300007F414100005533 -:1025C0002A552A55000041417F00000402010204FF -:1025D00000404040404000000102040000205454EC -:1025E0005478007F4844443800384444442000383C -:1025F0004444487F00385454541800087E090102AE -:102600000018A4A4A47C007F080404780000447D82 -:102610004000004080847D00007F102844000000BE -:10262000417F4000007C04180478007C0804047892 -:1026300000384444443800FC24242418001824247E -:1026400018FC007C0804040800485454542000047A -:102650003F444020003C4040207C001C2040201C87 -:10266000003C4030403C004428102844001CA0A0FE -:10267000A07C004464544C4414141414141400003A -:10268000000000000000000000000000FC0000004E -:10269000000002000000000C020C0200000000001C -:1026A000000090D0BCD0BC900003000300001824B0 -:1026B000FE448C000302070201001824D8B04C80AD -:1026C000000300010201C038E438E0000102020109 -:1026D00002020806000000000000000000000000E8 -:1026E00000F80402000000010204000204F80000E7 -:1026F0000004020100009060F860900000000100FA -:1027000000002020FC20200000000100000000004C -:10271000000000000806000000002020202020000B -:1027200000000000000000000000000000020000A7 -:1027300000000080601C0200040300000000F80498 -:102740000404F8000102020201000008FC0000007D -:10275000000203020000188444241800030202024D -:10276000020008042424D80001020202010040B043 -:1027700088FC80000000000302003C242424C400E4 -:10278000010202020100F824242CC000010202020E -:1027900001000C04E41C0400000003000000D82425 -:1027A0002424D80001020202010038444444F80005 -:1027B00000030202010000001000000000000200FF -:1027C00000000000200000000000060000000020C3 -:1027D0005088040200000000010290909090900048 -:1027E00000000000000000020488502000020100E8 -:1027F00000001804C4241800000002000000F804BF -:10280000E494F80001020202020000E09CF0800063 -:1028100002030000030204FC2424D8000203020285 -:102820000100F80404040C0001020202010004FC8F -:102830000404F80002030202010004FC24740C00EA -:1028400002030202030004FC24740C0002030200D1 -:102850000000F0080444CC4000010202010004FC26 -:102860002020FC040203000003020404FC04040012 -:10287000020203020200000404FC04040604040330 -:10288000000004FC24D00C0402030200030204FC38 -:1028900004000000020302020203FC3CC03CFC00F6 -:1028A00003000300030004FC30C4FC040203020024 -:1028B0000300F8040404F80001020202010004FC11 -:1028C00024241800020302000000F8848404F800A5 -:1028D00001020207050004FC2464980002030200C0 -:1028E0000302182424448C000302020201000C0499 -:1028F000FC040C0000020302000004FC0000FC04C5 -:10290000000102020100047C80E01C0400000300BE -:1029100000001CE03CE01C00000300030000049CDD -:10292000609C0400020300030200041CE01C04007D -:102930000002030200000C84641C04000203020273 -:1029400003000000FE020200000007040400000E65 -:1029500030C00000000000010200000202FE000082 -:10296000000404070000000402040000000000004E -:102970000000000000000000080808080808000027 -:10298000020000000000000000000040A0A0C00005 -:1029900000010202030204FC2020C0000003020226 -:1029A000010000C02020600000010202020000C0FF -:1029B0002024FC0000010202030200C0A0A0C0000D -:1029C0000001020202000020F82424040002030295 -:1029D00002000040A0A0602000070A0A0A0404FCCC -:1029E0002020C0000203020003020020E4000000D7 -:1029F000000203020000000020E4000008080807AD -:102A0000000004FC80E02020020302000302040412 -:102A1000FC000000020203020200E020E020C000EF -:102A200003000300030020E02020C0000203020096 -:102A3000030200C02020C00000010202010020E0CB -:102A40002020C000080F0A02010000C02020E00082 -:102A50000001020A0F0820E04020200002030200CB -:102A600000000060A0A0200000020202030000207D -:102A7000F820000000000102020020E00020E00039 -:102A800000010202030220E0208060200000030118 -:102A900000006080E0806000000300030000206010 -:102AA0008060200002030003020020E020806020FC -:102AB0000808070100000020A060200000020302B7 -:102AC0000200000020DE02000000000704000000F9 -:102AD00000FF00000000000F00000002DE200000E8 -:102AE00000040700000002010204040200000000CC -:102AF00000000000000000000000000000000000D6 -:102B00000000000000F8000000000000003330006A -:102B1000000000100C06100C060000000000000071 -:102B2000000040C07840C0784000043F04043F04E7 -:102B30000400007088FC08300000001820FF211EEF -:102B40000000F008F000E018000000211C031E2126 -:102B50001E0000F00888700000001E2123241927A1 -:102B6000211010160E000000000000000000000000 -:102B70000000000000E01804020000000007182018 -:102B8000400000020418E000000000402018070088 -:102B90000000404080F0804040000202010F01022E -:102BA0000200000000F0000000000101011F01010F -:102BB0000100000000000000000080B07000000074 -:102BC0000000000000000000000000010101010100 -:102BD0000101000000000000000000303000000093 -:102BE000000000000000806018040060180601006A -:102BF000000000E010080810E000000F1020201076 -:102C00000F00001010F8000000000020203F2020DE -:102C10000000007008080888700000302824222175 -:102C2000300000300888884830000018202020112B -:102C30000E000000C02010F8000000070424243F0C -:102C4000240000F8088888080800001921202011B5 -:102C50000E0000E0108888180000000F11202011DD -:102C60000E0000380808C83808000000003F0000C7 -:102C700000000070880808887000001C22212122B2 -:102C80001C0000E010080810E000000031222211B2 -:102C90000F00000000C0C000000000000030300045 -:102CA00000000000008000000000000080600000C4 -:102CB00000000000804020100800000102040810FD -:102CC000200040404040404040000404040404040C -:102CD00004000008102040800000002010080402BA -:102CE0000100007048080808F000000000303601BC -:102CF0000000C030C828E810E0000718272423147B -:102D00000B000000C038E0000000203C2302022736 -:102D1000382008F8888888700000203F2020201183 -:102D20000E00C030080808083800071820202010BE -:102D3000080008F808080810E000203F20202010B4 -:102D40000F0008F88888E8081000203F2020232082 -:102D5000180008F88888E8081000203F20000300C9 -:102D60000000C03008080838000007182020221E84 -:102D7000020008F808000008F808203F210101219E -:102D80003F20000808F8080800000020203F20200D -:102D9000000000000808F8080800C08080807F005C -:102DA000000008F888C028180800203F20012638B5 -:102DB000200008F8080000000000203F202020200C -:102DC000300008F8F800F8F80800203F003F003F06 -:102DD000200008F830C00008F808203F200007183D -:102DE0003F00E01008080810E0000F10202020101D -:102DF0000F0008F808080808F000203F2101010131 -:102E00000000E01008080810E0000F1824243850D3 -:102E10004F0008F8888888887000203F2000030C45 -:102E2000302000708808080838000038202121224E -:102E30001C00180808F8080818000000203F2000AF -:102E4000000008F808000008F808001F20202020D3 -:102E50001F000878880000C83808000007380E01F5 -:102E60000000F80800F80008F800033C0700073CE1 -:102E70000300081868808068180820302C03032C91 -:102E800030200838C800C83808000000203F200063 -:102E9000000010080808C838080020382621202023 -:102EA0001800000000FE020202000000007F404007 -:102EB0004000000C30C00000000000000001063897 -:102EC000C00000020202FE000000004040407F00FF -:102ED00000000000040202020400000000000000E4 -:102EE00000000000000000000000808080808080E2 -:102EF00080800002020400000000000000000000CA -:102F0000000000008080808000000019242222221E -:102F10003F2008F8008080000000003F11202011B1 -:102F20000E000000008080800000000E1120202094 -:102F30001100000000808088F800000E1120201091 -:102F40003F200000808080800000001F222222227B -:102F50001300008080F0888888180020203F2020FF -:102F600000000000808080808000006B9494949327 -:102F7000600008F8008080800000203F21000020D1 -:102F80003F2000809898000000000020203F202073 -:102F90000000000000809898000000C08080807FC2 -:102FA000000008F8000080808000203F24022D30BF -:102FB0002000000808F8000000000020203F20202A -:102FC00000008080808080808000203F20003F20A3 -:102FD000003F8080008080800000203F2100002092 -:102FE0003F200000808080800000001F20202020E3 -:102FF0001F00808000808000000080FFA120201141 -:103000000E000000008080808000000E112020A0B3 -:10301000FF80808080008080800020203F21200071 -:10302000010000008080808080000033242424245C -:103030001900008080E0808000000000001F202038 -:1030400000008080000000808000001F20202010F1 -:103050003F20808080000080808000010E300806C4 -:10306000010080800080008080800F300C030C30D5 -:103070000F0000808000808080000020312E0E3103 -:103080002000808080000080808080818E70180603 -:10309000010000808080808080000021302C22216F -:1030A000300000000000807C020200000000003FB1 -:1030B000404000000000FF00000000000000FF0092 -:1030C00000000002027C800000000040403F000041 -:1030D00000000006010102020404000000000000DC -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:103100000000000000000000000000F0F0F00000EF -:1031100000000000000000017F010000000000002E -:103120000000001C1C1C0000000000008060301C1F -:103130008C60301C0C00000000000000000000004B -:10314000000000000000000000000000000000007F -:1031500000E00000000000E000000086E69F868698 -:103160008686E69F860000011F01010101011F0103 -:103170000100000080C06020F820E0C000000000D6 -:1031800003070C18FF70E18100000000070F10100A -:103190007F100F0700008060206080000000E020AA -:1031A00000000F3020309F70DC371030C00000006E -:1031B000100E03000718101807000000C02020E0C0 -:1031C000C0000000000080E01F38E88703C43C0412 -:1031D0000000070F1810100B070D101008000080DA -:1031E0008C4C3800000000000000000000000000CF -:1031F00000000000000000000000000000000000CF -:10320000000000000000000080E030080400000022 -:10321000000000FEFF0100000000000000000000B0 -:10322000030F1820400000040830E0800000000078 -:1032300000000000000001FFFE0000000000004050 -:1032400020180F0300000000000000000000000034 -:10325000C00000000000004266663C18FF183C6693 -:1032600066420000000000000300000000000000B3 -:10327000000000008000000000000010101010107E -:10328000FF101010101000000000000003000000EC -:10329000000000000000000000000000000000002E -:1032A0000000000000000000000000808C4C38008E -:1032B000000000000000000000000000000000000E -:1032C000000000101010101010101010100000005E -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F000000000001C1C1C0000000000000000007A -:10330000000000000000E0380C00000000008070A9 -:103310001C03000000000060380E010000000000E7 -:103320000000000080C060202060C080000000FE1F -:10333000FF010000000001FFFE000001070E181051 -:1033400010180E0701000000808080C0E00000001F -:1033500000000000000000FFFF000000000000006F -:103360001010101F1F10101000000080402020209F -:103370002060C080000000030300804020381F0749 -:103380000000001C1A1918181818181F00000080D7 -:10339000C020202060C08000000000030300101047 -:1033A000182FE780000000070F10101010180F07EB -:1033B0000000000000000000C0E0F000000000C0BD -:1033C000B088868180FFFF80800000000000001030 -:1033D000101F1F1010000000E060606060606060FF -:1033E000000000003F1008080818F0E00000000787 -:1033F0000B101010101C0F030000000080C04020B4 -:103400002020E0C0000000FCFF211008080818F090 -:10341000E0000001070C18101010080F0300000056 -:10342000C0E06060606060E06000000003000000D9 -:10343000E0180700000000000000001F1F0000004F -:1034400000000080C0602020202060C08000008735 -:10345000EF2C1818303068CF830000070F081010C9 -:103460001010180F07000000C0C020202020C080CE -:103470000000001F3F604040402010FFFE000000A1 -:103480000C1C101010080F030000000000000000CA -:1034900000000000000000000000000E0E0E000002 -:1034A000000000000000001C1C1C000000000000C8 -:1034B0000000000000000000000000000000000C00 -:1034C0000C00000000000000000000583800000060 -:1034D00000000000000000000080402010000000FC -:1034E00010284482010000000000000000000000DD -:1034F00001020408100000000000000000000000AD -:103500000000008484848484848484848400000093 -:1035100000000000000000000000000010204080BB -:1035200000000000000000000000000001824428AC -:10353000100000001008040201000000000000C09C -:1035400020201010101030E0C0000003030000F035 -:1035500010080C070300000000001C1C1C000000E9 -:103560000000000000C0406020202040C00000FC9F -:10357000FF01F00E03C1FE03807F0001070E08115A -:103580001110110904020000000080E0E0000000BA -:1035900000000000807C4340477FF8800000101846 -:1035A0001F1000000000131F1C1020E0E02020204E -:1035B0002060C080000000FFFF10101010182FE7DF -:1035C0008000101F1F1010101010180F07000000AF -:1035D00080C0402020202060E00000FCFF010000AF -:1035E0000000000001000001070E18101010080470 -:1035F000030020E0E02020202040C080000000FFE9 -:10360000FF000000000001FFFE00101F1F1010103F -:1036100018080E07010020E0E02020202020206074 -:10362000800000FFFF101010107C00000000101F31 -:103630001F10101010101018060020E0E0202020AD -:1036400020206060800000FFFF101010107C000040 -:103650000100101F1F10000000000000000000000B -:1036600080C06020202040E0000000FCFF0100003E -:103670004040C0C140400001070E181010100F0F4D -:10368000000020E0E0200000000020E0E02000FF3B -:10369000FF101010101010FFFF00101F1F1000006F -:1036A0000000101F1F100000202020E0E02020203C -:1036B00000000000000000FFFF000000000000000C -:1036C0001010101F1F10101000000000000020201C -:1036D00020E0E020202000000000000000FFFF00AC -:1036E00000000060E0808080C07F3F00000020E09C -:1036F000E020000020A06020200000FFFF30187CA8 -:10370000E3C000000000101F1F10000001131F1C69 -:10371000181020E0E020000000000000000000FF82 -:10372000FF000000000000000000101F1F1010101C -:1037300010101018060020E0E0E000000000E0E0BB -:10374000E02000FF013FFEC0E01E01FFFF00101F50 -:103750001000031F0300101F1F1020E0E0C0000036 -:1037600000000020E02000FF0003071C78E080003C -:10377000FF00101F100000000000030F1F000000DA -:1037800080C060202060C080000000FEFF010000BB -:10379000000000FFFE000001070E181010180C07B3 -:1037A000010020E0E0202020202060C0800000FFF9 -:1037B000FF2020202020301F0F00101F1F100000AE -:1037C000000000000000000080C060202060C08079 -:1037D000000000FEFF010000000000FFFE000001ED -:1037E000070E1111133C7C67210020E0E02020200F -:1037F000202060C0800000FFFF101030F0D0080FC4 -:103800000700101F1F10000000030F1C1010008085 -:10381000C060202020204040E00000070F0C181856 -:10382000303060E08100001F0C0810101010180FDD -:1038300007008060202020E0E02020206080010040 -:10384000000000FFFF000000000100000000101F4A -:103850001F100000000020E0E02000000000002019 -:10386000E02000FFFF00000000000000FF00000754 -:103870000F1810101010100807002060E0E0200062 -:10388000000020E060200000077FF88000807C03BB -:10389000000000000000071F1C070000000020E0DF -:1038A000E02000E0E0200020E0200007FFF8E01F1B -:1038B000FFFCE01F00000000031F0300011F0300C6 -:1038C0000000002060E0A0000020E0602000000078 -:1038D00000038F7CF8C6010000000010181E1300C2 -:1038E00001171F1810002060E0E02000000020E019 -:1038F0006020000001073EF8E0180700000000000B -:103900000010101F1F1010000000008060202020F9 -:1039100020A0E0E0200000000000C0F03E0F030007 -:10392000000000101C1F17101010101806000000D7 -:10393000000000FC0404040404000000000000FF78 -:1039400000000000000000000000007F40404040F8 -:103950004000000010E00000000000000000000037 -:103960000000031C60800000000000000000000058 -:1039700000030C70800000000404040404FC000038 -:10398000000000000000000000FF00000000000038 -:1039900040404040407F0000000000000010080C44 -:1039A000040C0810000000000000000000000000EF -:1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000080808080808080808080E7 -:1039E00080800000000404080800000000000000BF -:1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A10000000000098D844642424FCF80000000F43 -:103A20001F18101010081F1F10180020E0F00000D1 -:103A30000000000000000000FFFF180804040CF85C -:103A4000F00000001F0F18101010180F03000000E6 -:103A50000000000000000000000000E0F81804046E -:103A6000043C3800000000030F0C10101010080672 -:103A700000000000000000000020E0F0000000E076 -:103A8000F81C04040408FFFF000000030F181010C6 -:103A900010081F0F080000000000000000000000D8 -:103AA00000000000E0F8484444444C7870000000F6 -:103AB000030F0C181010100804000000000080C054 -:103AC000602020E0C00000040404FFFF040404049C -:103AD0000000000010101F1F101010000000000058 -:103AE00000000000000000000000000070F88C04DE -:103AF000048CF874040C007076CF8D8D8D89C87895 -:103B000070000020E0F00000000000000000000055 -:103B1000FFFF08040404FCF8000000101F1F100041 -:103B200000101F1F10000000000000606000000077 -:103B300000000000040404FCFC0000000000000081 -:103B40001010101F1F1010100000000000000000D7 -:103B500000606000000000000000040404FCFC00A1 -:103B600000000000C0C08080C07F3F000000002037 -:103B7000E0F000000000000000000000FFFF80C037 -:103B8000F41C0404000000101F1F1100031F1C1070 -:103B900010000000202020E0F000000000000000E5 -:103BA000000000FFFF000000000000001010101FC8 -:103BB0001F101010000000000000000000000000B6 -:103BC000000004FCFC0804FCFC0804FCFC00101FC2 -:103BD0001F10001F1F10001F1F100000000000001A -:103BE0000000000000000004FCFC08080404FCF8CD -:103BF000000000101F1F100000101F1F1000000009 -:103C00000000000000000000000000E0F0180C04BC -:103C1000040C18F0E00000030F0C101010100C0F33 -:103C2000030000000000000000000000000000048D -:103C3000FCFC080404040CF8F0000080FFFF8890EE -:103C400010101C0F03000000000000000000000026 -:103C5000000000E0F81C04040408F8FC0000000365 -:103C60000F1810109088FFFF800000000000000077 -:103C7000000000000000040404FCFC100804040C14 -:103C80000C001010101F1F1010100000000000008A -:103C90000000000000000000000000003078CCC4EC -:103CA0008484840C1C0000001E1810101011190FC1 -:103CB00006000000000000C000000000000000043A -:103CC0000404FFFF040404000000000000000F1FB4 -:103CD0001010100C000000000000000000000000A8 -:103CE00000000004FCFE00000004FCFE00000000D8 -:103CF0000F1F181010081F0F080000000000000020 -:103D000000000000000000040C3CFCC40000C43CA7 -:103D10000C0400000000010F1E0E01000000000056 -:103D200000000000000000000000043CFCC400E4AF -:103D30007CFC84807C040000071F070000071F072D -:103D4000000000000000000000000000000000046F -:103D5000041C7CE4C0341C0404000010101C160178 -:103D6000131F1C18100000000000000000000000DD -:103D7000000000040C3CFCC400C43C04040000002F -:103D8000C080C1370E0100000000000000000000EC -:103D900000000000000000001C0404C4F47C1C04AB -:103DA00000000000101C1F17111010180E0000005A -:103DB0000000000000F80C040000000000000010EB -:103DC00028EF00000000000000000000003F6040FD -:103DD0000000000000000000FF00000000000000E4 -:103DE00000000000FF0000000000000000000000D4 -:103DF000FF00000000000000040CF80000000000BC -:103E0000000000000000EF2810000000000000008B -:103E100040603F000000000000000018060202049D -:103E20000810202030080000000000000000000002 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:10434000000000000000000000000000000000006D -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D00000000000000000000000000000000000DD -:1043E00000000000000080808080808000000000CD -:1043F00000C0E0E0E0E0C0C00000000000000000FD -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:1044200000000000000000007EFEFEFEFEFEFE001A -:10443000000080FEFEFEFEFEFEFEFC00000000FC12 -:10444000FEFEFEFEFE3E0000000000000000808038 -:10445000808080800000000000000000000000005C -:1044600080F8FEFEFEFEFEFEFEFEF0800000000074 -:10447000000000000000000000808080808080003C -:104480000000000000F8F8F8F8F8F8F80000000064 -:10449000000000000000000000000000E0F0F8FC58 -:1044A000FCFEFE7E7E3E3E7E7EFEFCFC7830000002 -:1044B0000000F8F8F8F8F8F8F80000000000000034 -:1044C00000000000000000000000000000000000EC -:1044D000000000000000000000008080808080005C -:1044E000FFFFFFFFFFFFFF000000030F1F1F1F1F45 -:1044F0000F0F00000000000000000080808080801E -:1045000080800000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:104520000000003FFFFFFFFFFFFC00C0FFFFFFFF99 -:104530007FFFFFFFFFFF8000FEFFFFFFFFFF0F0079 -:104540000000F0F8FEFEFFFF7F1F0F0F1FFFFFFFB1 -:10455000FEFCF8C000000000C0FCFFFFFFFF7F076B -:104560001FFFFFFFFFFFF88000000000C0F0FCFE0F -:10457000FFFFFF7F1F1F1F1F3F3F3F0E041F1FFF37 -:10458000FFFFFFFFFFFF1F1F1F1F000000000000B5 -:104590000000000000001F7FFFFFFFFFFFFCF8F896 -:1045A000F0F0E0E0C1C08000001F1F1FFFFFFFFF11 -:1045B000FFFFFF1F1F1F0F000000FFFFFFFFFFFF98 -:1045C00000000000FFFFFFFFFFFFFF000000C0F83A -:1045D000FCFEFFFFFF7F1F1F1F3FFFFFFFFFFFFFCF -:1045E000FF00000000FFFFFFFFFFFFFF000000C013 -:1045F000F8FCFEFFFFFF3F1F1F1F3FFFFFFFFEFCFA -:10460000F8E00000000000000000000000000000D2 -:1046100000000000000000000000000000000FFF8C -:10462000FFFFFFFFFCFFFFFFFF1F0001FFFFFFFF7A -:10463000FFFEFFFFFFFFFF070000001EFFFFFFFF61 -:10464000FFFFDF1F1F1F1F1F1F9F9F1F1F1F000038 -:10465000E0FEFFFFFFFFFFFFFCFCFCFDFFFFFFFF95 -:10466000FFFFFCC00000FFFFFFFFFFFFFF80000017 -:10467000000000800000000000FFFFFFFFFFFFFFC1 -:10468000000000000000000000000000000000002A -:1046900080C0C0800101030303070FFFFFFFFFFF7E -:1046A000FFFF70000000FFFFFFFFFFFFFF000000A3 -:1046B00000000000FFFFFFFFFFFF00000080FFFF82 -:1046C000FFFFFFFFFF000000FFFFFFFFFFFFFF8076 -:1046D00000000000FFFFFFFFFFFFFF00000000FFE2 -:1046E000FFFFFFFFFFFF000000FFFFFFFFFFFFFFD7 -:1046F0008000000000FFFFFFFFFFFFFF0000000041 -:1047000000000000000000000000000000000000A9 -:10471000000000000000000000073F3F3F3F3F3F18 -:104720003F3F0F000000003F3F3F3F3F3F3F3F3FC5 -:1047300001000000000001070F1F1F3F3F3F3E3EEA -:104740003E3E3F3F1F1F0E00303E3F3F3F3F3F1F5B -:1047500001000000000000033F3F3F3F3F3F3C009F -:104760000003070F1F3F3F3F3F3E3E3F3F3F1F1E9F -:10477000080000030F1F3F3F3F3F3F3E3F3F1C18D5 -:10478000000000000000000000070F1F1F3F3F3F18 -:104790003F3E3E3F3F3F3F1F1F0F0703000000000B -:1047A000070F1F3F3F3F3F3E3F3F3F1C00000F1F93 -:1047B0003F3F3F3F3F3E3F1F1F3F3F3F3F3F3F0089 -:1047C000000000070F1F3F3F3F3F3F3E3F1F1F3F7F -:1047D0003F3F3F3F3F000000003F3F3F3F3F3F3FE5 -:1047E0000000000003070F1F3F3F3F3F3E3E3F3F9B -:1047F0003F1F1F0F0300000000000000000000002A -:1048000000000000000000000000000000000000A8 -:104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:104840000000000000000000000000000000000068 -:104850000000000000000000000000000000000058 -:104860000000000000000000000000000000000048 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 -:1048C00000000000000000000000000000000000E8 -:1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 -:104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:104950000000000000000000000000000000000057 -:104960000000000000000000000000000000000047 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000000000000000000000000017 -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000000000000D7 -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A50000000000000000000000000000000000056 -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B60000000000000000000000000000000000045 -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B90000000000000000000000000000000000015 -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 -:104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000000000000000D5 -:104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 -:104C50000000000000000000000000000000000054 -:104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000000000034 -:104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000000D4 -:104CE00000000000000000000000000000000000C4 -:104CF00000000000000000000000000000000000B4 -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50000000000000000000000000000000000053 -:104D60000000000000000000000000000000000043 -:104D70000000000000000000000000000000000033 -:104D80000000000000000000000000000000000023 -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000000000000000000000E3 -:104DD00000000000000000000000000000000000D3 -:104DE000004E00080000002008000000E801000854 -:104DF000084E0008080000201841000008020008C2 -:084E00000100000000127A001D -:040000050800018569 -:00000001FF diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/template.axf b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/template.axf deleted file mode 100644 index 615e44e439755f88f9dec441f04d0e1d3d36752f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158196 zcmd>n34B~tz5ls$XC{-aNwYOg(=1JaG!#tIbb|s-CP_0i%Q!PB1?!upN!mo(BqV7m zKA*4bsDP-5yW+|stBQ&WMFj;x1Vshef}m7z2~cP$h5o<4v)p^`ojau6IN z^dgRb;CK$l<2X(;SxCuIzb^y+Bn~R?!S5?LPDpe7B@H|s{o56;e4~EfOg-4NZ!eo( zu{Z1TOLnoGvs%w?z4|#L<4=8OAm3*X+72Q$H?hA6u1wlfV7?7ub%f z_FH!4uRO5l%AKfd2jI|aL`ti^ed}vaAI^LXHtl@vX`*M-=kG;5Q4$ccXKdB%4mPxM z_ZXWM39X-n^Qvistt>A_iR~;z`L-8UGFJQYefb?Lfiu~RNCz;vDBbqLnS{AN3y@Gd z8_JA?R%Q@iRj9vbcO|=E{hg*SvSWFOx5EYhU{fsLxAMS&=U*fJGj1}fdv@QJ&!%_p zW!2!HZrwM8e;UqA-puwO&Z=ISaSLPR zkdxiPrtjZNG$s3pJA-rk*+qMUkiae}1&loI16}{V@>_hYl(CSpGXJIk@ zqdEilEA~Zi4tB8Z{#x^Xqsku%jrpehRX+T}ci=(CuQDT%q4h6h%rs7XuZS_!OTeM0A`!gbuE!ETYMtwuz#P<#crohX~;2q>K3weRsBYyk%E;emu%`B~Cg(nsa z^}WD+Ggp_bFQ3ZerTms$l!~Wvc&T(l7D_XwLMIk{fGC5j%Qj?81x}3dlDYbn4enjvexv5=E6Y}@v(LA%``DCGg<7M7@%n99|3YqqZe#sT zyl+hnl+Ua>u;&j4j9TA)-+OUo@}=KV`CgQb`_T8MjKgZ%>mdg^7v$bQ13L4elPR6y z%ufHa`QftlIa3)f+~>nSiBopu-&B8d>FW0l)$HD}sHC%h{j8~CSu$VTv8VtLqc(7V zO*>JrMg8kDrgAx+EizwZi?V>vM7i&UPlq#bo|73sY2bzbnlMo!t_?3dKGDA(+EC{r zt3MR*{*bTr2kHUTAF_FW$kO^lhU^bP^asR`)*qDbsSk*F!APaWkWWfcbm-%V%m?=& zE{8HAH@x!PH1#j^m7$*9A3UuiOw!3OIf%)XEqQ1tR^`XRsvD*nYqK7mjmT)MIVIdP zJyml`-{sFW`Y!oSaHmyudKabxMkY#mG!ZmfXtgYY*6V&WA~0mR`=q4 z1S=Sx2N=Hu^2{8!IW&I)-YX_pER=qO@!- zoz0nBw*JHqW_>qnd)>`tl?6k-@SMuB^}#7v4ZJTrYc)|6pBQQ+>cZ8bMLK8J2X(HJ zsjLqgbs6_(otOh^UpTZn2h`b9LC)<9`z>y0fmB!qyLw(aaGJ56RiAm9ahkun`81>Y zr>Bw4$d&UxmQkLUS7Yw;KmW1(MK>Bp7T)JOvg$tb$QAc5oT^;?g`rP{D>}c9i21_M zg&Fhn*gpU6n(%Buj+!c6{V=d4olgS$u!b!Fq+%+6^_<~Ph4VUV`fA$e4BNa}faFaf zHi1QC0{cDJmCH)XXKU-0ekeEJOYD2$Qw%ceek#^BApX9TA6{Jm$C z0%rE*PxYQrdsOcI;l6BO1Jj{E$r-_Ee{ga55BN2MZO;V#kACNyH?rz{^wEn}&RzNb z8v{chXL*O;y7H!QV0~cdV&>l$d}%SxBjuq5fB)TqBa0uMQ=rqgS@dn|+bsGvNk4sy z4{iUcq3o3(llg@FOF28Ih|izB;H#e7et3IU`_G=s$h`SE zf1dB5o@sxkF-7G&+kMaZ0nNzs{T4ice(gCkvj_Y}X6C-o%U3;z-)90i&v+TItgL+* z`!I{i%6cZ46?rBr^PYC2eM382;D5L{XluY*RsHKQ-|Gwk&@tS=PkRY&qu$fG4&}NJK1ywGXCr#M6@}3 zrGIsHIQ)#S+E_gsWA)f7PRI5I@-ff&^s5F&+XH)kv!Creu&3fxR{P3*#=K*zeaP7F zeU;(gEKpGCR#42w?=$<2+I{yE=Is4`{Cg??_x$|^&Of`KC_ncq$-4YiU+pWL?xOu{ z+Q3|c{L2pKW5f}cw|^B{FMjo`_8&dR@`CsM=s6>=82|e6+V3x(I;vyk7R)rNR^C|G z!A`~5`qCR0bSyv)@l7r0I0C;*r;g}248Mz}=J71aR#oxevs)|pZ}ZmNoAVZ$_tzRL z%l)lv>Ko-p+&rgaeYg}nMN`F`X64GYHx_VB#*!P#3nMqaGCjRMoDT|fDi5@|{4BR4 z8^7e`49;biW_9H64PAm+!BEw{%xTKH!v8czu+5M7DF3p84`Pyd96KwAh5WUl`;jH9 zGl!d}{RYpbeHl{%Qf)!TR`pD;9DCxQ`B~H_#Gm0a{lSb7ra#|<9Kfpb@y~6TPu`9) z&a2i38G8g}$-oRcfo`Lky$2(JuNp-Y!%A_a1RZ8R%g#PN+XQuBreTH-3l#?Dgk~BA zMn1#@ogl_Aqfs=32casWYIY$EMj;_f2NFxR0w{_c9l%(wDiZMwRbVVno!YYVZ4eR9 zJe*OD3jC;=8OqLPtdLIWq^Opep>iOL`AIHgCD}lc35?CkX5yrjV2sTM11nSb2Do&N zprF%og44;|Y(_s7xsV(wS%&tg6sKqb1#3dHSF1vHc5ZeKM9<6PX4Wj_Kl20lA@3hX zCyX6VKR!r1f}fyTwfP*epb&~tEwo@AozlsX0>;?FLe%4^LYTtX(S5%l$< zKpYJU&RAoiLG~>wWJJeU6P+-&_-Jq*lXq<1@;oziLQbSa_-2U{EPzXG;3`SC%mxYe zDrjBq1QO^N8?>r~0LR(@!N}MOCy24*Y``k`>Ug_oo4OJ%JHd${V+p*{1`Bfu*lYte zA-H60aU!@7fWtOe3IVWnE}YhYc%*o069vZFZRpy(lk-kOEmsMUDt3@C#TT&)WY~#X z5h_-TB4eF&Vun`aG@)@$K#O(R04jDD15csULnn+yOL&BeCS~lsqDW00o5dwjT*T>= zP7(sfSnn(zO=~covXe@Atgmh2l6;v9L3pw%Fm{SOh0*U5r$n$$oHF))MM*mUOBEL8 zQ86itK`N{l1%c@k1%hvAf_kB~pPxd}0G*JUK{{bf=3Aoa&legYX|ss`lj(?sEfoE0dHi$Zw`*)^dGj7=`)J$UP} z+@sr$W2G?o^qB_bTE@1okSB07Gek_%r*)xAgZP$&3%pD9B|Q zEW^m~WtbsC>4<4W1TA>#t@UI-Zr z@w*;}UKii%)+J+yFXK#K##z3Mvwa!o_%hD*Wt`{BINuk#z!&<6FZ5Ag=wrUng}%^5 zzR<-bK(D-W1dT`B6JcC zLssZ`jfZ3t{8Gp|1?N;=hlZ<1nd+v>t*-J~Stgr_{~E|0!nvx8;+urcO3rPNdjZOr zXjpPLL(V*{jH#+cPjzn1u*;-pJ<69#dcr4A#(2qS%pv^u&^@lid2``^pA$IOf1Y{1 zs6W|5^jMS)VdUoeiGCg0umELMk9_cdne&TyuEIIdVJSFtE6!UAx1SR_H{-nE`GE`k zA2C0wVxDMjLth|zRre^am1<>qzRB2p*{+1A@O$hbeM93fUd^5{_hj4>)Qo8Ds5*?Dl)fm&A7`a3n|hb~}8p;*5Cj)9^(9 z2+EY7LO93&`19wt9kXur;PB?;w#Dn3V_kHF!|PgxN7fyE^t$1Z{>@tl2G>nY4h)Y> z9zDduqg%#CM+QeGkEsG-6%~g!4~|zYKDvHM)z-0rzRAI=rB$^XwhnI|s9L_HenC}Y zbaXR_$G3#TRqtyWShQsE!24nEXD?=K3ez3G5u6y_G%`3))j!lX&iuZ>#L(#YB=h?N z(8w_B+B`b4sfzvqZD{L=lRCo!C^j1+`0cVSC<@fFNg$hk3?CR2imUZ1a)UvThhgz0Kg|3atP`IMk1__aXt+8R2 znJ3vW%gVJf-Qa9W!rtA znzx+#w2f}t-nV6J^WcP58S3Ke>Kl%l90UfvbX`~L>Z8zw**89f6f+xZ zJ3DhDvGWQ`hLo@Z{*Y zfPJVqIyf>AUn5E%E{>lukr?hjRTTfX_@t9s6XKi|N7rT1+!bw$iIT54mI#Ye zv$(ypIo=@({^D>*s5elb7v<O8&7DGIIe`{AKywMy zHYP1yp%c zDp)9>4sXivIZB|EH;<-pkX-L6UfU(RMSXF+HPR!i(m*VW9lmU&`h%@8zR0ToqT*gu zU#e;11sMm6Nx%|^fF%T4>HsaJaBXyTmSqm0tn_jRP+EVC1K6Zu@K|0G$+&`=bdlY} z$H}s4;^V1WvIZwmY&Tk6;&vv=R$sWo0!TOgLIPB8_$4cD4oiRD$wY%DyPBgij_=Yy zGLC=69CcWdlzsMYB86{dzrF`WlqB-kqO?pz$-P*Eq(q%eoG~`Y3Nj4ii#{`oOtz?z z<(FeJYh3LspmM_!mY+-IZ;SFWmVW@FpK%R}y^{W9!e1)^#1J9CbrJxMW2k&R$`h9O z8>wUo{|=Ru=)_6(n-O$jr0`sg^at%bkY#rM#>5%L&mQN#QC;CW5M|$<8G?W zf)Gf!y3d7-U;9cXp@SgA_3e;xFF|@Z1WdPtjNkZ53ZI;56vf)&Z3&jmiujMgq8m5& zZAwl|_Dyb`UjL{l3bH%Jmy=7#_XJvW==IQKD=#ke1a}4oYSb}rm^AC zxBFabYLKxn;<^pn6^x=)(MV6StEUyCWp}ifH-`=C=}mB0zDCy7yOw2#G(dBAb7#*g zmTj^qc_+DLbYL(!$$R<%>bhp(HKx?l8jGxHOU4tiw(eDl4m#=SUe$)?^2U={vE~Gt z+$Ux8hLOTI8R)5I;eI7t7@LgtV&)X>?d+r=;8l@`o@iTlvNhHm>1Nq}DQ|S^*DtLhA<6EZZs_+5NgUD}W!a@#xwYpcNUW6-$F^dcC~9BqGwy`E+cK2A zNOwFL@9B+&+v+XjkoFX?!SaI!Y((XyGMjP{yqyAUvdy$97qjd@3gr@(9ZUf(W!V`i zz-3lbYbGsc*_kPn4X9F9Din3fPKBaUIjK<8DmN91YRyQ6qF#B*St1M;VDLGN+M`nZ~m| zv+f_6p$gt@#!wBB;C(erfDoOsM*9t4jbG9sz*s@I&sP%=0P1h7APS100EkX9F*!as zvT1UN67&+$zbeg?2xnUS50AA!A_Ds;f~+MXO>4Vr*d2s)aF^ik8U+JUK9F*=Nk5 zqGgN$zYa`V&1=l2qScxPygV>zHHtBdidGvKa5>Dd%_`<)+b*;K@U~%vylh*B1_9nS zZ6+_OZ8+3P3S@#!}b%#+|_ZXEOF5>{(Lh9Y1uuVj85x};Qx;p^2kq9pW*j7^i@7KJL z$IG@3N(cR#7jk*o)%L zNbLv;+Y6=u*fvtK0fp@aLjY_m(W4%i<*%IRALo&RUlA!+XR^8%W(y6@NP#@7AfNdc~3IMi`C{h5h zZKOy6!1fVE3IMi`()6$k%aFCz2)9}K?SX9cuyTL(>0^Ti zmu-{g@Um@D887QSjO6Qnqq5$^sI2>q+hZG8%mq69#wlzQ3k8L3V}StJM$Qxf+sb?Z zCI(Nlq9rdiqhoVV{DE?R<>_N0{_rc}FDDoASK+T78W`VZn_0=rx*rK|8#$NbZ5zvZ z**0+wFWVND@v`nmlBfHT%DNw^toxD5j!eY?wuMDpgCqVpg>7SjpsAkgq0$-%n)vYI5-V<7{6|K7L=w z@zoUJ_t+V}no{$3mB{Nx2CLA9-(ThVYRW+|f!`H!{wppJF3vNi{bt?WRsQOU!OfU? ztJe0Ha{%4iljDRryLxcj=%7V``GuxJ%mi^Q9e<|EUpcsK5>s|wGjS^Fb|8<{U3eH& zjSV*>w`|>>#Qa?_(yXYlp93vWMfKK+zVS&XaIOG061zoNE`W=4ps%cYa?7}b*;h&+ z2dl4yKu*RY0yXKfjKb>vz7ZYbn^`?JQ16g#^Q)+nT!Jj&{c=|E5}iZ zF#?J+5k4QtXLaWt?ynx)j(fURRzak4fYoXJr2=5(6@QTcSe@3Nrb}LNI6{|%_j6(D zTxh?lfYqIIgw$?zcctCx?n=9rm6UcXEv3``%_Ed{Zn@OnD6}6@2<^2}yOq(Db}OYR z?RHL6>g~ZHt^Qi2pF2wGUnKN@6Z+3vAobh%P#Itk$d(1Ri=_MQAvv7|S1eE#aAs*i zld#~hB3AdSBmLCLaBD^jPUMc1MC6}CbjuxNA|cc}V6(Y6XFujyqQM#1vpAizXO~oO z-_oBP=^NPQ5Ls+lV+CL^k3!wajrnO~zf(zW^#pDsJ36Wl-FZ9KOU8z`BnKTC$jGwv zSaFT5B=Nr;DSM9yBHoc?3|#>aUbc{XaCvf*=0UV#iU+Y(DSp#JDN6(dmnGxjZ^f+c ziK9eoxMjifjSiT|#Ud~0dPPEB~U7$HvgKN`~aygh{q|wQ7c`F9s z$x$b~EVUUCk7Ceu%b2C$E*T}33@g}zXm&Av>Q*3HRnSkRpr@!<>I8~VS>^=7{96`F^ZCFh%wHzVe{D7{*p@8AYVkW! z>Z@6Z-^XYBYU=U(`Li(; z`D!wiTJ0Xh-G;Hntb4+bC7Y4S!4X{B^x?(^^B39U8G5FGL5N(ZKPQ0IRH7%8I1}As zsgKoN7eEHxb_l}acS8)Pe zt2e&BoQEwrNU5llkSS*{g(j;zI|GB`>65Q((B&Ce7dstSU0e)56UMv`LhgbPYSh=2 zvI|n+;fcu!@tm?8GJkAj-%di&gdWC@^;S{Q>WvxPHbl^yd&3NMEm>rmOShQj9@2DxU(m`nqlL7 z5mUIvq!VW-TsRhXp@IrU`=*>+A%znAsGP_w9qHDGWFu^e^x*!#ODt^==Z5lot1cwH zN5w+6xR9ofbX!YL@>`s(F3y0CY;z%l3dwgBI;)wf;oP;%QaEe_YjDZTRyb_Na^rFo z4t&d8e7OoI_u)CMnW3 zYq+H@TtLHNo1?RaK^^I~G($(aO${j|-yrOinyqk%IJd?b8qTdSPs6$OlfrUjQy9F2ONVn6A6q4_Cb=I<2!@2D#Q8?@ecDa0(Lh-%7PLZ=UoLgj>!nH(W zE|GH-DteN;XOt^cYqJ|Q7bxsU!(Ozp!SUg-p=AH&QSAE`!`y4kc-$}xzfvlayd!yv z-EYY9IU>l#Oi$KCBI%JmD+M+ydnMARBQ5_(q^Tn;+*cl3|XI6>JQ#eSqGONTD zYB)QyN@S6abl0O;A+^jZ`AQT@&#V$ROW~ZERbopmte#mVa<-0iyQfScQAu}m;0-yc znN5WR>@kZBi&9fQb;|sO2%Rh=MI1p zh0`*tWSgZ>dS;cl*&5C*vP|K$%qrRDD3q32C8}JZw9G0|bAfVXR$Ajxo7bKU8uwv~ z-zR2^%o>k1cd7Kqr_afFXIop8Z){~jpPIdj$7=M^!a?T;okOF@#| z_?a#ctS@ka8ex5*3k2(nTp(Cq>;l315*G;8&vJoaeW?os>u0+_u)fR%g7tG;AXs1S z1TBK~b6p@pYeu)f*_g7x!UAXs1H0>S$EE)c9g%msq=hdV({u>J@a z2-erSK(Ky+3k2)yTp(C~qzeS=7rH>O{wNm+)*tNx!TR^OK(M~v30e&68(bh*-{=Ct z`b91ftZ#CGVEtkj2-Yugfnfbo7YNobbAe#}au*2JAL9fqf%V6_K(Ky=3k2(rbAe#} z@h%XoKSAa*Y)aok4?>E0=?`*@%T2TJt{OW(iGAtGjtG_>v_z)Bc%VwpW*Ruz8d<|P z=<_)+^vI;CZ^-`dna0)7cf)*JpWKumYsLcr$ z{&?TWCbjST*_p<7q2_mo2{m#c;2Z886>}oAsyPryn<`y9;GLX7WNjyc`wlz4$wUt? z#0rd^Fz+)*2=kgdTF7@vG_M#q6abAY61M`N9Yxw!0ECiA+6sV2ZDh_?kR@OeDO*7r z8o?$~wgNRS2Hy-GH43yCce!b6J=LLaXhU*fc$*BG=L(G9!2C;UrTNj82ABN`0tsRW zYgP~#BZe>w0$aooWil!ktzovB9GAxQRP?&k<(Yv>o&mC(kZ;w1~oDe6rthd3{H* zaS@dNQ!1z2)wGN_;CFMWK2A*ql-^suUJx4Vd+)3Mp*?7pk#@H_$&IxHZ(dw zAp$ixKsgoIj^TjhtImO?#R-m))w-k1I5%L{eSI1B93!jI9nqR{x`B$_VFZ|%+&xKljFl%6ew8ALH&IeQ7FHfvX&+&j{_WnW^mAkGsY&AAnbzZ-#DOgIqu&I{n-3~ zd7DO)L1l;FptX+!cR>Xg7D(k?-`kgA=lbM0HeJX*%q@YUTo>5 zmKDQVfXuS&(4i$(Wb4pk%N8A4q^!|_g_b>5l$rUK0UP_3k!V-T4>l0NuN-Crb1m%} zJ2pB=SJ;I1MyEwejW3h?!lnsX_F*%W@E6{m6~FU%dUE4bq+^20Q_+G?#-m=%8{A>eoSYIA}lzm2nWBl(#j`wv4wMo9`oQ z(5XuJ&N3ZR%(t5AkRra3P=^!}%`zQQAokulWX~koi*zb`AEn*kd>`d;TAk0g&nOrm)sDzM2BUFjbAz_$U%6w(cbrQQTTPVZB7z-RfbNu>?EL@$2kDjqz_a0(temt#ORw$FC>s|U99HE4;qk^qew0E6jxAKsXy z1ml5Swd2z2=6GrsFYuTc(x~jrZ#5;J-tEVe`nDuHVb~rjrG1_njU6~v)$k-Q?c3F@ zE*2ZfH9k9(urE|(QmpXDFNweYh~+h(NTC{$$e_K0y z5y{l4L1gCCAUttuWsx^EfJ&PhNM=n9B9o>Dv2&&s8J&LsQ1XZ&V*n2x zO!n(nCyp)jBBKOm5|L(iKE?pYbjyAe)#{7%DC(mze$9K@cFRgOBWCb^Ck8H8C!3lcx@zp^OYUo&k}w z>wJ%kFwFjySF9RmP>$NLVe7^TB@Tl*T@L6Me)dJI)k;1*pu!inG&<~+kAH5BzjDhk z-up%3#F=QjwRNoS;WduO6NIUFJOPrDSm;5rvW)OBl>%e06wmGF;^l_o*+;Uvd)Io1 z$0JepDv}*Ec#ubao=!yB_Vdaw! z7Y|*WQ7az0Xjvd0x;UavJao~4-&*}C4YHA*zSs{$y?N6qh!Z1dKjn;;U3e6p#{k9q zj`Y<;@!P%7SCgb~)bi_Qu{VJ8=fq8F7Qi@rv30 zx9+{m|36+a3rFxjf5=SI8>5lf`3s$s1EX8%F$Nv3Kz^HaEm&Xox2iR9yymXMEPPs7*clbOity&R zwUGqfAL7~+xD^|dEKLM#Thr5xchliLVp!+pS~icKJ~n##;JCh!|5d|?nS~GF<#h3r z;|W?8cdV`B{w;1f(483E*uX0l4?-jFhT%pvbz{om9_#QypMfVv@Sb_R)ZH`g?DtOh zkKzG;_10-#z}u+b?txc@x=*3c)m>ovtCMQ1saGrccq4s&HJ-xaFAk&i7JrUS)nJ1& z0@d%eOL$OmjaD+N!&=E#eTr5xs=Kuk#-lHonB}noW>lUo5G>jpjmP9WRWC4%%kVO{ zhhS_Z9{C0+72ouBCOtWT( zVg5Xo1JleO0(rS%K4!7RqhR?xvG~lFQduy;c$Qdv<|jgy7Geqc!D5N*UkW&#?r}-6Oby{S8J&SD3W)<-c*jg5#sa?Fok~hC1+^%HTR&-eB z3oBZ!^ZJUeuJ&fBr>UaFI$u`NY!R(6FUrO{K`n8nLBS1dWGq zAM>lZaBw2lDTr7_XHPR4N;Xcj1cxfZ&7F}JQTZGQlCRpA4IMPj3YziX=K3q?9mO}{ z2Y2-gejBXhFE+m3j}W1^8rSX1-%(}$HMih{A)^wG#j88Lx^ZTe*2(Dq$llXanKxAXL8IG1q)q z62c^<8vSX6B+fN2%Mzfxn@^ta*?Z_#^aY%_F>k)I&T|ynq^0;VE7~t*Eez7hpLR z{$5!Tj!?Ry!Za^Pp5444dG_*xZ*lY4C+l{(Cr~c7Md(E60poXkSYeaNr+j& z#lT}EW+fLR3$2zI3Ft6?QJ7*4a6g8aPA&$%CNWViMivs57ztR*qOB(-WFve$WPCNl ztb1%0!X=IYF-DC_{X8rRB+hT%S|s!$VW}X7hZbegwQ+M;bPHS;n}3ybOKdt+^L?Nz zs)$Eb_n9`#ONxcSvowjQ$vIhO&2FQjoo7l4t{p)XRBt*51)jJGb3xGjy%h42))P?2 zyCCGkV1<0dUWV`7iuOo*4~*vVJGUZ|Xil^sGeId2;<@J6N>Y4_o-`{P7TM%dz+NE^ zbtC5egjZP(HdmPcl(G)D{eX_x4_WBf;m+nr7rh}JZG|BcorC~kkx9*(Z&aGs&Jw0z z%Ankh-ugALUs+kv+O|dvc4p0;yp%XO+9nLSr;!Hp@UR;wYMtPU_s6TDIbM<;K4(!Z1D_HJ*<2*o)>GJ7#Fr!MB9)zWqa~%UyGgYjn=2yc|CS z-W4xZ7*jJ!xC>hc`|+|3n|VI>qE&VlSJ9O|n_uvuys_x`AU;eqX%iAKzIB5Iz_*aZ z`T%E2Y#9@+0I-9xWfI`*9#k`lv}EdTk^_ix`yCGH{eq(Q2}?nt=qC~0ShL3t`7zU2R;FUq)Raj&KdrN7sZtQP=(<51uEgjc?}9 z=G|woe-IHR+2{)+ng;&Ck#&&3Ki|QQy=b0svtSDk4fdaU5GJ<#AM=bCbF{{AG&edG z)=IpBXWjVVCM@l3-inu@P_5I130rnWjd6jauj=8%<#T>hs}9LC*z#Z37?)bzPstAZ! zbzfz(#rH|)&`nZOCEcQ6V$J4ft1BdpV$9LkrIQp9H5_~20 zi}1(^&zZ(pP}Wl1Uf{3T5Z`fShN7hiHShA}8}Gw_n8!{AN0K(+(|+qo{vxu11B#FraA9Q-NI847^A~7fBti>HsIo~tZ z&R9!owISa)Ie#sGLO^_}hUMpkVdg3HxnurKZh4R8UEJpT@zviA`0DmI&;w4m(Pyj- zV%`X!M)1iRW+-eGIShYIc0UQdd;5v|M)O!oH(>=q1U=rJR|SXR58tiEeC8W8v>S)$ zw@K`T-8!~z%fPAl!ZJU1-T0q)({mksTe5Fr3;*Ks;*EXpXa7I$`_q@dJH^3#eCC(z z=o=Zp_oDen!TE>4ySpM5kO2H^;P&Tb6+MCZhr#ioS@D%wi;KYg8{yWsW)%}b`Pag= zug)qQ!TFcN@%>p#6ao0>!_{YKEet{Vhs5d98y}-pVhFYZhYvl9f0kAu2*|%I-a5FE ze<)WW2)GglkC|4xuQ~Hm`Z+M)d+;`&7SJc+=~LxjL~cIe4xjNUd<5LCX_D&s{byWjM2$MI5`_9{13fcUB|tfVt8*R3w<9R zx`%xKEk6cT?)%~K)9_+-J}EL3$xq;?VIW2rUop4?!3zKL%W`Ymi6g7l{tDT%6{;Seg!AbQ6#i~ z(|;t+F9E@Kh$v!?wxRqO;qW&GV$Zo)`dr7q3HmnAb@?F{x(>%?Ja2izb3Wrae~^Eb zPY$4BL3nCde7ey7xFO5GBcHKcbT)~?o;H;VtAN=DrnQsSJUNE2d{cSxo#69z z=$j)raxxe@9(nO@BbU2#c!a)5I?y-SN83%YoZmOVjQoFPW8F}4R9XJr&hlS7jjHh%=f7)8%p^h={ggE{l{78|xn|yh$ zX$%Ng3hyc8C6@PO$QC2ZiX4&R&OM+##lD(;ii!yC?dp1(Lj1cDh(;Q~`>gq%j{5TJ}OC#!A`iOaF;TR@kWRIh6y>pJ42R0H4C&m@gxe7K}CtHzFqAM4o*| z__P)NjNzEXS9(tPC9Ud+pz}zyiuAMI4!+j%<(uf=czw{@eU*BC04oSMo+3}8cV8I{ z(o2!}Ql?mtq$NkXab+md+sKo05%R|^jQw7?@J(FLzXSZY*^kQt9G#dA(dGQ_0^EQ0 z^G^H&9O|k_QSTxbjtriT7why*%5Pb`DkHJ;jpxaCfFCaivd|}S`~-eH{vMxki$9Oz z5KANUWZJ~(!;}3(+*?~GlA9@%+S^SE^QlNlBj{HMA!Id3_i#WObWuJqkC$cIJn-G$`4zxs@i3g6M49Cf*>NIJ=J z&Koz^9>>_H3Cv&9BlBb%fM*eqgz&dZvizdsv4S8R{qBs>waA+rag^r5&p-4Tx0)h% z(%Y=8QAZJ7N#2v*99hZOEy8o}*8bfJzhRvtv_tytI?H$B9hZE>Rz&w{zT15QV}E&f z`>q~-J08a_^4$-7#+Rk<-DGWH1%w|-c;l?}Zs<8>K)x)Dcb9_E$1e8xq_4D0#^lW#nNojkpd7Uc3f zFxo3>x|6NVCkbUl7xJY};^@cI*JA5N!f!2qa-v?WbmMRByVBRYkryf`hRN4|@);k@ zC0FxxA~9vBC1XW&I|VD@geU*%^tf1Du5~XilXq#$fw)xiAL@GOJK*}L6!Xy!;ONBd zjuS5T84Wx=&=bUnU4`_E=wrA6hsoQ|J^9{V+S1Yh+8~Qtr2gwT`^%)-u@(&!< zC-K~Y+GJoTB6x-V=ti9uFYg#%?8UC8TJ*U2*vWdr**;@1xMAz$#NcaVo6XevnrysaL36u0xJsQehckI^?hQD;)QndzZ2u- zC-BiUj=kikFH;6l@xpINDfD*oki27v`-I9tv|m~{=$+c1Zoti^TXC!}5dCRhaPuHO z&ojDd6JFC|DC}pg{`5|blQH<_@bh@*R_R z$2KJ=#s&umSpG4{6af>v+4wF|?(VvyS6&uVpRvvY+rJpHUy=)kDzue?*T_*xgp%*q_=j-VuH{ zd1GHcUfRa;pT$E?0qXfx97IteKv+tt!uN+$$JZ@=!y|9^sVQ#nhMvc<0`G$L`vdfX zuH!HB8N~sr95V`@WQw8)I~v|^?V|z0pj+c!esR1BjXs(1c6ZV~%-w0v{WsvG6F%)T z&NgT}zGL&Sp=fI1Ci?S;mv@|BUV=~d;@C}o`4q04gRZ^ShN4&@z4Gqx%b(#Bx}0k* z7V&agFlBeTp=hGgGx@3cYqPb9d=G~BYr{R;`I4&f= zV6<)yraoh1D5A@SW8MvZp*1$D_LTHXQ!w?hBtsE>Px$5CkasCoXe6%3s}3pe9vRf1 z;W8BZPL*6VGucJ> z7lTtUml^n@`5wxL_6Q+khek(_S9!cv7>XS80=!$4^aq2mL|m&TP{gI{o3kyAR$j$` zkK7e7%xM-hf`x(7U{T=k!oZTkKxbiKO<`cLFkqU&Li{%e*ol52sax3DkfskQ*#Qp(c=7638yWSsjNRfiogJmb2GzcC(js)srsbCw)e6 zq0blOe)tAFV6y+9ALwEL`hUj#UaL#;@_0`cXqn;&o9YmH6a440X}+)5$$}b!Q(v;q}XfbEw~&l$YV|T>vS)j zY5KX-UvJznr|-y2dQ1>zK8bL|>tW}bm*$8_By*`pmEk}SLKi9W8|Ggo3dwl1buD~v zvj4xf(-U_{DYuD~QbyeweW=9mGw+~Uz}_EERPtJ#H6u7XV9o-*mnW6U;A~Ed+69sv zGAbcR2jJUt+W%66LDK!Xa6n-|wBG`p8Nua#JPB@IHBRVXb9V_WxvP~^6hp*yaFxs{ zBDMz5&R+c@GSZKzb~JeU7?aPrK$Ihs^IdvYI8*z45hVX+Jlnb`Q0Q?rI2#YN8G-zw zfJwDQdPS~Yi8IR4$5YItJ2A)MIy0Y#583w?^f#w{^yCaQ+>QPgD1m)22CY^-D`3o0 z{p~H+Nslxk6t3odoOhKXatjXXFFphHoPMj@fgS`xJ)aUmZw3+6!BSpV8p%R5Qpjkf zat0sYvM8A4d4N-!!2}?g!Qwyw2*PI47#m!OvnunygGUAmc^)vc0ptP$nO?M&HmzZ1 z2GP7$+YY`J@vffTIC#KAC-p9qwc+14oxe3*6!7$f4;uG?aI|XAYu<7_^gIk2^j_!* z%%YB^x)Jp*o>|ax1jBp)g z{Sp)bA21N@d|VLi5dL@CLF`?D1Zo9(1cS0|kPo9YQ4@MZz1})K^qd0pJP?q>HTC1= z+>y{|#n)S>kM{9H->pceTuaq|$bYoo9eQq1dX)bzfOk#y*42l$ha-xyaU6pqG6eu9$hNW0N);L(ld9X+5+v7ka+p)^pBV z+=jG!6?(4lald8oRI`wpF6AF>G`I5oTNg{T+Y_;b4WSfE2oy2DTF*n~B$3zN>iDI7 zkkEM%>6}$W^9RImpv3$z4S&n|6w%~YU;&!-1ZM@z5|Q-&1NEm3gRo_v77-67)5YduW13YZz25w<@7VjUBCT*mtzY2R*(< zOO$WQUfLxCd-KxStK8#d?=o0@(CZ?KAGKcqwBl4PU6Fq;eEoWB{1kt*iz6^o__v4; zR&tI-GpiaL3&jXVp>w#HALsHmoy#v1aa{of4Q-j`W}Km|DJl?Md=39_Jv7O1u9(d9?Bjd9R>vza{eMju7NM|5nMP+m4X;H(Q=) z`#0-9x>turdz5lnrYoM_tW3Jg1)2A~l``p031t48Ai z9!GD%5)HZ)^vj&JB86IZ{(d`!{fy%>io6?P$RR@j+VP8Cdr}{FmN;hVv@?SbrOF zMtJ?N76lV9dexrwM?izo5MupR;Y{bnODh<`4EA39%l~MfWfcyC#dsP2P?D*_;UUZg zBHR6B$7OVOD-PXyx?@Q&P1`mUzr{h8wn-F;QlsiX@f;313IFoHM*J&4YbAu0}jajISgD!~b9)ie?+hl67DBdn(Tc-9~J2@LcjuyG4zfgHXkFACq# z*_Uy^HzE93e*|;cAV3Z|*jA2SLO#CC;=~DoUCh)5XdwC#*ci^NKdN;~%n;Dkrev+u zN2gcffZ;{>;eX`ydK?BzP&0|fv^+)i6CleyWR3t?F$V}EM@oN^3at?dD?koE5JQUn zLW+a#QqZ~lMJ9X_hpVQVzlh1@O*~kds*iv!DThio&r2QwUGk`p>U|bPcBndBZ8s!D zQKMLY1amoCfE=wOKn}kists>7-6=3w^dqYdI3cL3!34-*Gx@{rgU6%f?t=t#$q}Fw zIn*X3?`R=~(uDQr)KdqzTaOG>`XRJSC3RGHo0CkXlUmR%QODQ64!&LB^YLT->HJNA zLcRk}?RYSomU!@t0G8563FwM(UH9Qa4pq_mlRmb}bfS24;J*W--tVs8zXLm%Erc5r z`mB1I%rI+wexr6xTNqz#Q;2UafiK_bT^$1${(J-o#$#74sEg9}=N_HeywRN|} zBH=1#&hz=r6HLF+0z6RRu6QJ#T+udfov2y_6OGR+NY})vRkaPhomHs2O@vB)QBa&B zc~ASpbY2t3~u6z>&0 zOTqIk1xexIMBuqnP^@a>OlW3iTxEecSN-;O%@2YQj6d@6FB{`S#+;Kp@nah#IUCxE z7u0|7@lOJ4uKuHf=%(33;CV<;Xs-T~f~4>$S3e>sG*>^WASpb`)sG7b&DB#1lER~0 z{bxa;x%x>3N#Rkh{)?bcpJEoRv>1N-s|&#;ED}!V9?@Cgm|cQCAtW?G!rv4mML8z| z&$EI;Z|A>TAkJmAGgoP~^FIZZ`VzGW6Kd^$xe!vwA{i~Z;SIzEBc78iTFg9egQNf} zX3jO$2c79dgQBv~d!7@l*Vs)Dl^0ml{9Dt)d`S6-3+^Sx;((lwS@irX)?5yG;X)VO zk^`P=P5#|3`j~Pu(w&I3T3pwqVBD4eqe-8J1zb}&QkKir)7 z4629%8bJQ(g*}K|$qc#EF3yByFO4zJd12GbRm_n4f}7K_ms06&FYH0&+V;L=b7D-3 z#@gDtqOv0Tv#+z8S8Jke=I+w2g%-{z%>CpE5;-9WNm z^~Q7I_1i_Nm05y^ol6Kb9Iz$C+7gMLmgczZ$uwcw;kP2z#(J7=qs3Tomd!~@@geib z8X=ha+S#61huN_0JWfTQm`^5JIx*qqPNld#KLum+w&TyvU@mS*{V3<pYTL; z4O$Ws<~!IS`coQjG!|JE>*YO zZEJeEsV{SG8q&V%fwOpJ2TtLH%&*&g^r`k%99$;lhHrS_JZ0*fkoheqUr#sQLL_4t zQm^pDrj=`RL-N&}7hjl8#uKZXJ0q*a^#WZneLEH9mg(k$z-uk8miCTz49QX=h3j=5 zI4_Y7PRP8$;%kkpN!BM5G2v2brW-wQUNRk=kojGUueV#&TS=v{=X;)5FS#ymNdCUf z8^?-5TcXQ~D~kIcc%waKyZ9meW{bPKr<(?bL`ST(ty|31Dd>Ncj=)j?DYtN)U9aY6C#f1RGjTT`kaX!?yNMTM5GiPGSG>1n(*r3!+k-)d4Y03{;f)fi%U zu5F->_B(I9w+5#GNdLXYP4>svSi-5B{lOFME!)8k(GP08T|M0qOs14<>U$4)qrGK2 z`62vaja!7Al1<(25l^hQXa_eWKc?}j22rvpejZPQ_m=LG0Qpa7{3?i*d}_}>r@?#6 zcS(T!r!;;Qx=KDZ>0i>|E%}hKi_?VLwY(`;R`^u)Z=Pr_0Bb#tNw9|u$bZ%rpei8c zQ)K+z6KjdLr+i$vQvihj(`Hxom%^#~|MJA@!Xe^$ji{?Rwgw}o$cVLcQ6dHuC0qIS z$f~8ZHvNJZtL0m@ZbF{z(j|lQMUAsF9&L+>tL1~LTudroN@es`XiEjxUX2TrqC-;0 zSKnVwW%O2OONF{uG_Kxm8&!4C`YodR?e}8!R;fz{=W8}+YjZffCeqW%6X!v7HjvH( z9-N*kb-Ca>Gr$+GsC^@ctg)Unp5?)5X$1aU8{g8N5|bWXp-M*Nd0vc`WIZAsa-s49 zo6`;*(O};CcsPC}h09Z!EfJbNX7jj1!&?)N#0yinJT=)8q3L3qM-P^R)rtq<$36Hw zwdqo!?-Mp3R$F6j;Rt5CTF>^bUL!@sC%sucwYp@3`%;_xkk#_g|FjpQr&5PpsQir0 z89`b;gnIJG|7|{HB}9Q;Q`JYOZi_(6W+Pl{<(g9*bN^z zN`&x${I(~jr%tD2XuXc}cF+LO+Sby$s%?#!tMg_0>phTeu_>$&dZW$P-V+PUs9Qwy zneU{aJO$cp5cfTshnAbL!YM8%AnvAAl&3t64+4M4xmu~xZEJBe2}=!JB3;?t?16KO zOyPvgAKQGmE=`0xxI~(P|0D(DDbMDDv|DYS){_#6ShKxawKEmvDNo~rz@OS&Evw~v zK26_$=7M{QQXG(TyG`HGjO7XYR^A;c7)uuT9szblERiFsaTBmJg4NjW-Y)JYii}6o zQgAuqt}G-?DLTw#afhZg67T707w)0;u_wIImMwe&!7WMQhwvv;xUE~RG}V8~8+|b0 ziXX!Nn#$eNDI7@G-%op^4=P;pL-^lPxRFCnYUvfX0;s8!|42(=X@Q(`trtFq6R}QgnCb0Kw0Aa(n?d}d?YwjpmKbVD`PRr(A<%JwOG4-B zcuy~~5jT|_{*iP9=~d`5pyFdr3AEUud_f++&>Njryv7gV7dyGJ64=sd-x&J1C)N@T z{!dyIojuL1$ygizQ8#fv<%#9|;-XmXSh>t1#C2sd+#8GG2E5hWpYg#oXsbGUTRYiN(J#4pZ_hukDC8B7)f*`6HyH2vB;XP=J;yMd%sIXIRvOS_=BLs{Q%5U#Z9x_PwG)C>on*;=|*^Y(&mAv zzgQd?XO$>wlE1nUUZQLsh}vaw#82)HD_NAF{+5FA5~guM+Orl9_6o>55R{Al?t*(s zvN#~;pB6ouNC~3${FfVHNdnjN9NCG9Rm&NZgU$W@yw#{KFQi~BK6Gvh0~Z&hy=d`3 z(%{4d7eerH>Vq$*U@T$a`$h)ZD#^zeOjg1@U2-Buf%wf- z9A~vQka@8}<`o)WPa+nMt`_;Uk=BB*^gv3f@~*TkRbz(Ot94GyYZJIHE!?@}V};CnZ9W9N5=nvan-okMJ8eG5yWi%D_TUB}Zl&=wM9Jc} z9ylpePBAPabzVq)z{!cVJhhLGy58?Su?LZC^F#I@ZEn;AX-Ksg^}GkYkeVOB|F9s5 zMks?J(o`ZN_D4K$$}Xxh*dOO4h$G^YKWdsj<$-gtKgmgWwalZP(l1zPJXVv%UXD&`PtcNDGs85>TVmvK z8nb@sg-j#Z!41K8X}p^wBhm5EO>GWnpklET2f$nATd6?DKf%&smt7(g3&l} zohDr9;DfyTY_7JE_VB2@x}r+npNdK&QR9Tj2RI*H!mL7ssb3YWzxTvyf+68Sp*hmt zgYQD(^0GN$?~CBio;{R?Kog^C>?H&$9(GCCfNS3V(XF!j{BrJ*v?NlE%%t40mKuj3 zD0)njf}M-by3p0#<7o)e)x{+QDxPpjaF|fV2hu;MB}rEoQsWQ=MNc`UG>ZN}mH3Mr zBgLv+>b8#{m-9i~(@rKaC{rl!aw85VO+A?PjFU->yws_lbt80XFyo&bAHiM17Ff#at6|cD@I7|@He;_SM zy1IBp|CyO8ig{hN=s(Mikz(D^Z}Y+KbDT_e^q=cS988*u{_~wocJyE1M(EOD#>Y5b zMSp#2^k0~cKnjx4f3Y{29sM6qN8pt6NlC`n?Yc$>#Nsh^pHHP=B&VEXT*mQO+QHIz zckC2<$l#k-KjVefRLdTd$_^iWPUG!r?hb3B$*|9RqSMKC2!QY}YTQv=a@)dbs{JKT zY&zKve#ric#@#hM(z119{DVAcQ`fuP3n?Ybr(G!Eg-3L52>zPJ+dOf`NO<$9awk{YN`sv7UZv;~Cr8_o@vR#YXN-w(qHD{m zJ+V@RlyHrMrmOD*qvMtgYWZu^;58|BTyZNLGEmujGQ0480gj5{?iijwh*yzyzp>$w zSlcSPI_8s4YPkDSaY`ZC4ULvejTg#(YcsZLLTSkTT`DS_OpO&Xe{VC!+wdT&+G|7Z z`GW_JOO-j}A&%!go$jyUezm&Fq}ltQJh2wPtfmJyta`-e<_$F&-g-1C$h!MW%bu9#3fE$}VPu_P^8@BpChwaW#U zY)ffBv>I|K0%AHR40*=pvy%)3+p}(jWxjMWmt^rk)IV$vSEc@$f>E`Svm}9U#+6_* z?sLe8`Y5cQcViTzvr-ODn6leuTPr#Vf13D32RNldBt?)z#2%Yg?bac;>~(;pH8L}D z|8i5J)GiRR&!(m~i16M@8T=I|JdGI10y(eR^wK%hKVQ?Kp0(k`;NOvD*(UbaHPBMW znL5;yU%g7=Y@4#h&N=7kP)~kN4E^WXl<}C@B1088-wBp(aD*$lQ?fwLM>Ga&feV5@ z>Viv2d`VG-E0-jhAnHP!#np2!O2Jrl1K(9y^zs*M1Hx5vGxo`g@Zy^uu1-N&j4;B3 z4dSlRcxX?u6vqdW6qL6(iw)wg*Ld*MN~~4vE+A*$kc#q_XY)becQme+b|sIx=66#t z-r_7SNV`en>FQF_D1UuF1>-Hv;)1jvYCIj5ZPZI|PQiFfv$!Db#~Kfw_rv8Lk95A} zFBRo2&*p=`TQx4)jx0J3tlQ~E{J-|T1w4|XYP*vx7hzQdFZhc(ivbth4VlSglAw!Z zb73Q!-H>E2Xt0^gOm@ee$qaMZ&4P~~Hw7=qMG%mSToe%zQNd485k&n#QMv1<;9UVl zK|c8YMFqe2oT}=suI{2Fs>QwdV>gww1U}Y)~RNbNFKy#~?KB$*` z$1if!A?Np$SY9yHE7Mf1?+3^@FTX*rT{vXd^{RmKyQP9&dPTQ;4M#n33-<$4;*`lb z6ZA~bb&sB-R|akB89y=v6*P$~Q1la>-!FFA;rWhx4M7D(A`2AVuk(kU+YWy0{D5D^ z>f{Zua2VIn$q0=PbFRUS{ll$@Aa((BOZc+a7CVbu8nGIJFH=9QN@F|Dngp^`MIns- zm!@rGYpzhj*TWK}TtOP7)8*$CDV2=*6v5CVx|S2l@j?nU%!wg-gu3dZ6$llLc$L7! zuQUz4>FsHGC&&+Zf9;o5QtW1h&fjYJ&?u>?L@IBW3h{iNnuaggH1hmiRazxWfeK;t z51O{#TzMSpq4I@PB28a)W1AGQ|5%Mw$zqT;7<^pQHG+!y3{pRMq8h1^!60og_-9R5 zw>>g2*lQP3ThjPwqwIOqBc7~A(hNf1Qw}vu=gvgAh`IN{ZZVwU)8^?)3{8=YK6J+T z)xgR#UL9+OV2Zi`2ax{`5LVHxGDGciT24$v#MkjD&zi~a{}U{(q}!_j>UU}R`%CY3 zm6MO34-#ssk^cpU60tX;#)IjiSm{NDdof6;<=0&5%?-t$+`A`NNb%Rb?OuM1y?6Cd zo_$9yti(_joPmC2O)zw^Pt6GKtY}HWh+K?Cmy%CaW3fTGCd;(tRR(*P25Q2FSeR3g z2FZ7qRi)LksHua=PY38)yT0dWxl;)*{kfttr@Ap$5iDI5poNzqh-gTm>FSD<>UJD8 zF!R{}9rO}{utGN|*HmIuH=>ll#d}U5`JFX&F`hrhOk3F&udn}G( zR|BpR^}y?^vZ|Rgw87#H0lH|R1(vLfn?xGpeW@C$x;=2Ip8*=gn^I!PNfGnwRXC0z==z4v>lwzKDtg4GNjcD` zd!%nxVmN9LJ+)wCD1nXJf;5cui5^9T{dOe+o1l@rm}B{l&g&bbXTI(#IljEzS&31h zu!a&8_Io}JxR-=ejuEFc&3t^nBBh!YO%2T46{th?qYy7syt^`|mLa7GmVOwhg|?b- zgVa5hIkhY)MX>baKrM1QfWy>JDluwV5lUd=KA(n-J@%SzY;7Z73Ffsz_g7<8v*lF= zdk+R_LUdB*s6RYZg;T?rs|mJ#8l*>i3z#liKdZv2VawG7TR#ud!|#4dKhm}97u85L ztZBMn?$IDkJ!_mj6DZL9vI?h$F;^38{W?ewy{xO+j4ooosYa?{P16N)zYEedIH-)# z5bF1pDK$(vdSK{}L0V|jYIof!1=Gi>(;S1)`25~BCch*7YkQYZq*IyXitX`CIdus3 zn_gbV_oCV&cIlAiG7UkVIia__B}9SakkG+e0<=QkDNAkWia=*=eP-^^5l3kH$N*k9 zTRPG+V$*CsDDW z(n-Tyr6BgEi-s~c1@o4UwxJYH^Jzw@giazZ{(?%La8i|JPal{ zokDacO6lz>r41Uh-FRj!we7@2Pj(ouW|b5Tr;$p+ zT%luhBTq&;q*O^H;Iii!^ip6>QGP8bJW&qss!tPyW4LTA#majOJ+VRaI*f7F^CEbdsFA9~>FdcwNl(Y7rEdke3j2iN$91A>*x(A| zPXusb+~9Hnny!82Zc7?IxDSPv;mvqiydO^;XuscMaT=2ScOTwp<8iJ0pqw3T?XU+2Mlhhnmmdy7 zt~Ne}d8Y<^HDb7%;-7P6Y@LeG)dN2?L)62>d*dT(yxi7K#Z_hW+s0;{cu~PIE+Fkn zfLD{(;TovhR@xe(8m%>e6GrLUHBLBy69FftaUubnC^#J&r!9cf2~MZRiTXKV@>Z9| zY4>v?#5r8!#QdBnao(76>s z?`iY_kdD+zK3CIV1*C4B~f56^TfFI?41m zp9~=N>m<|RJl+E7D4k?_oX-@H?rLBb+JirhXqV(5NaPix06Lih&*P(p2G+Z$5~CsP zUt_oOXstDjQ`Suki^K@d6gM#<5~DaZ+{8AK*okw&O^kA4xD}n>O>F1H2ok&8#26<= zk$AY9*ujaNNPN4S*hz_SJUXzO*hPtOGP0Ptj^(Ceeh|rYVX_(q2G$R5z^7)qkM5(}iw%9t@zBK1 zO-$fIx?((Cvg65Qfe$9jS^gKd7`W+h0xNDm+#H9{y01u-zHqaAxysFn;h38UO`O)r zNkk)^=tILJLjz%(%F`MS@$pd%FkrVDMjRo0s0*nn@v6Se8TRH3Bj<*JNDr$G@qwmu z)oS+cqk;R%g0*o_c%i2 z)rFLE3<+E=augqnoDd!7h~OqyL{56IE7Eh3LK`Ac6_KmWmPMg_$Gbw#=L(TC4q=pC z#0Odp#(TQ))g?40RN^qKt4uhuuvZ3+$)Vm>(Ik988m)#Dw72)HaV+t%5KVOVqIvs9 z@fZmW#~yLm;PSGy=|X4}l}er46WZ7Z;lkM5!)o*gV){uj}sJ$Pxz#>E#VL4}_2SK$eG2 zpHDZS^K%o^S>QAwiLPiE=^a?l{fVl=$6C%ST`^Te7gI&9(!@sYFqB`7>jEB%4Gj$1 zm=~lLaxmKv@$CjtSxO1{A`*qW6(RgTivJ?cB2wH!e5XgD)Iphuu4lT{lPO#~QyVOO zgEB>A->sMhrXo(^zNuw_$0`)f$wK3~Z|PZTTcLv8##!*HpL9cIOEFbAvh-~;TSaS5 zHnMg*WpjE>Wm}!f;biL$Z>EZtoJ?ftJCrG^f<@(~4a4DXhq#k+IYFV4&%<3SLSd(! ze%!DD(Z9WhDHP7ri+(~UQmw8hYUCF0UUBw0XH{SUk;z-B`{;D8!&Dee<=VR6ldD2g zku4_|wbcXOT)}PS$wiIzAmvhL2LfNEdeI5&mhd4@uF55Jb5RK&rd&=JtYQm>Tw6c& zxJ$wjt)=FL^PUQRCZ#(z<+T3r`DjNs2L;mlMJ4=&H&^8nI=QHXe{Aqx zi38iKN9*xq>M?JoU{iV~vh+A*s?{@)$#Ecs^(W-Dr22V+T;B8KPu^@5T1s ztzyMoYgDr*8+a&J>%1g$&KX9P`-{j|hfmyoPx<~T^4043uov+-^C=@=g$tf1AJy+^ z4vS7VuIx>>8iQb8@3Ie5^F6q562PN2fG;Mv1`@j&f1IYI81Qr+Tvm zx0g2?wbyB$Y%~N77^rx&(X7(xjn1gNQU>b2t|va&NP|>)MptZD>bh=~KBVQTTpu?N z)#nV(!z1Hr9*=bBg}bnk&*d1GFR(r+m-lqMsF6ku9o2JqPQ;5jM`!gMPMD@s{$IP( z-Fi1}qPOJJIcF|~6ZsJcI4AExke(^|IO4GqIHxeDCy3Ld^qk6^-XKn|;+)1Dn$+~! z>QkK4_u&2mPCAz@PdSAay~>#Y3Y`Dx86I?|e-0ynbuH>yCY}Tj46Wf5l8~YmA@Q8k zYG{>Yd-cGmKZBNvDIhk29X7FGj$fRj{X#?9#0PFIsN=$IolNEXl&aJYaJz^*gcVm+ zwMN=OJ)Ed(tE%Nw2h_JSwQ6Ch_fuitK~!4uC7vw%YehuN$zU3anCphIUa%@P2I>(+ z9m40}sxqnm?G z13I~t->#>9gz*sE*9~wk@-!>6sl95kNp~Ny*VLn%qE$b$>(Nb@->-gz+5q z0p_zPJPB$z%6U9BH3c|saO4Xtd<3b@-Pt@STJvA7ZQl`4O^T9RwqH@R}=Zb4*pxS{i=8dAs=X zI=)FuQ%UI5ScJ2~wrQaOZ|R1fk4dX3xgG#71h1!y2wsP_8g|Pac0~^&$ zq_>1H2X>J*14Q!(+>$9y4?9VJDp^mb_vTx zgbepU#05SC83ytR|v$p5)KJ zHfq=Be5#PnZ?(tc#gtl|B+9p3li)io;z~`6h@h9WJf&&TF51)`!yBlHWe(Tw^Nsx2 zmQPCKOcp0Ho%nxm#QpdnMfj05flPkFMa+L-94JORUS;^OYkxl!g7VMC5j;~4P{YsC zMCf=y)q`S%SCcTsnqK6QDm)XQteb)melYm2MqVczK*GYRC|L#Rl&0>X)nVBN!m19$ zawkDOm8cP2x?BfDrGQCVPiyL4vsxGWm|STv&uHT5QDNCEin0#gnZ#?8bqVB&i@=A8 z7p=we__a^NCljx^2Sj z1;ndXTRKtDVLsW!cV^W*9TiP-pvg><)@l>GPtsL z+C>>JAzrn*w2Km6in^@sAF0xM?V^O2HSt7VWy3LH_;TV^GaM6!Ki#w%8|qb2C(K^a zG_VN+?g{o0{;MyK4GGMQ*0^y;?=&Y5XRF#>ESyaBZwcP@_*OEclt*VpI6v@kNDNxB6`vH1+5OZM_Z}b z|JTE>s-N9{mxo`??NN67-5!25w@2CSKk)FYxjo8m|DlIp&FxWk`#m0hHMe8z0ss7{ zNlhUj(UPFG|B<@w*dxHS391i{j8l6bw*C=E3y?i=WX^%G1-uE@pEdAI)2&N(=Y`5NZ@sr|7faYcqhxQz?9NimI1CT=(8q{2;*0Ru9Stj$ z5v`+`E7;GbIk#98%gjNKA?4LF#m0NJSSLNO*|tNOjMea3+aBu1dgsXUsTDg92~E)} zJ3Fn0*U4m&s&PU)QS1F3Wy_}yfeqS88N18bn3Q2<$c0ocfo6~Hv|n%A8)SN=tW<(> zrTm!oTDyMTQS=we$ca0R)!;3m{|hGqy{InMLJ?gDkBMV7nHR81FcgX6XJ)$Z-*p?d~J325{ zr)kswAV;Duq@leX4`i^=P*esfvG(>hq@BWPR2!s4BVEz1SVyF*y^QV0Swgj8Q%<9V zJEPH92X1XT+B#ah+S|jiFg-gsqXD|{@Bm#!ci)+Avf;%KyOLmMe#9lz>C>~^9HQFn z+K;=bR0PyUdiZQtARVAP`W#p4I6?TnXL+!{KfxYzd;ml2_Vcx5Spez$3p7bk6MRyW zJ7uWV5SMVd`<-^s`yblrQb#P?!;oL*$b(zuaz|cgqg?4^kX=#h%vU)w=@`8Mu6Be0 zt@9a2=s2c&<9tr|Qu@X0?AN+dSrX5=@Of7p)K1sAVy85WqLQ(m)_1cI0FQvU6cebkW&tHYZ-Q&P^*O|6?ZZj^nkk^J``!8IiOQB{~or? z2D}-9B0-t6Jk)@K_73#-o3(q`6?m(MHAeWDQ}^il!GRvmWOPfcCeq}{tM`=OK!}e! z(5bCCrtvX6gu%<)q|R!5Tmf?CUloAwF+2X0f>0n&&HrxL1g{2_p z7cKnJsu3ihGr1`*PzqYjO?i=0&}BHq4d;~o!Lj``#OgLc5 zvN}O{ZIC|Zy_tEZABTVTv#b+dZdv>i*c7(+ok$g!(!!K8PqM5vP}3w;rBNVJtYWTQ zNT7`T7=?4Jb4+eeC$LkMcwN)pLhozp84lzOYd>IF%NvCW&X6vgV5j)S zOICXbvq~phR!OSmWenm)l}vilQwHJC$4_y~z~nUV{tG|GZF&k)NX3(y?&N8fwN}@i zOijegnUbB47vdNKO6MNH1-bEb%Q{mhJMy=%yz@hrbtL3V@F&VRk%@1C)9?x=+Z2sB zb%te)dT5TGLs`!~XNp3(dV)(O+_V2jgw;lzg^G8La zDssGB%3*Abjm&6kIoS=JB~D?a*YBD2jd?nsvsTahtdDi`f7(uC-OPoHI3 z@2Hf8i?WPWuQ=PXwrae5CZqQd;nMTZ@hXew$0N30EkV2YTpum$p^5&s^b-bc>$ry{ z+`s00%i63J%+u+$-YM8uT;OHPCuSm(#(pbTde7wYeqD^;QiWAjK5FOmVGW{szH`wvLPW;pb7Wih&gZ(L)lw z^{#7O5^s4n2#4#sgfoBrdCPh=3d0s@&lIiQ4q|K1UT0YcNXCX@d`qgIW0y`87WcW{ zwTREZ`e~w>mw(Zv4W_b#@k!|P*cH4ZZ*X~Q;)SGNpQyp+FS#{XH#p$YbTHQ-bEBxi zGeGM4$Cp0s;sTNJLzU^br}(GAdN~eGZ*cKGz+cxe$#2&%$=}uJ@=2c5Fv;)HFv;)L zFv)+WVUjcsc=NYvnB+%jnDX~(nB>D6Ci!L!lYBzM zB+qD=_jT$ETZ5k&1-_QV4(eHPXP=`7N>j_OFP8FgOEV53KBAe$W!v zA3-AdsRsWt;9tt~oA@^Z|5n3y0zawYp8`Lv;XeaEtKsK?|3|}np+dVfOqZa)Yxq!L z6+g)SJAu`Y>to>KfK_`DKWWIz21e|3`Y-X%1y=o)@TGzuqJY~3|6V2W65s~l&jaH) zr0|VG&PAm1-C^K+fq$>n@AtqZ8UM)MF5qu!c=tv(K9YPt;JoZ_gx>_L`mZW4${HfG zRNl8iu6|UWF#~_tz_%LsF$3@4q_m0t)Mw!B2EN+B4;r|E94CKNzKDTsU={zVekTB{ zcu)9rU=`m9UkI$?IpMDYtN2a$N5Co`6Mh6(#b3hD0jqdRc}FF_+VfaZwYq* ztN2Q|2Ux{Z!kd6q{3N^`SpBHJpEK}-2HsR_!$E?%aIFNrTPy8tN2a&wgK-W<2B*afmQrwd%$B_ z|NjE8`jNgz4E(Z}DXFmcb_1t@cWL@g0#@;w>|F$`;xFN^8TlVG@T>Ro+UqlL!N8v} z@cjmE+S{wI)xdEBf84-#82D)eFI(!>zs|t_Vc_cx{7VBbr3;$;QG2X1@cRsW6L7xK z3Q-Vk!vAj7a0Bpn3GWU$euVEMYyl%K5&vNgll)h}`0Yt?o!aXUz|DxaMgG=;vB_P5ClI-VMB$#*a&k=3xD&0KY<$ zUny}V`*%Q2_9@Iz`F;beepFwo-}@kcmy|yjAiqhow>vpj{wRMf{APn62F5jYPr8g% zD$iZ8r|NSI`1pV5c;+|x{JRmt*MhI~nfA(%{~h*}|1JQ2QQm)%{hJN^kb$2w@M~V> z&EIa|4F)b7_yPmpY~Y6s{G5Sbv#(*_z#9x)Ht+=ozS+PJ8TdJgm4D6t`x*>z_t*MI zRAS}t5#R$LSN*S`4T!1#nD{h9egW_l&Swh4)Ls-X2m|8RU|nVKsXwdxW8$0r)3j$| zv;W*e`nCRL+6y|L=>A*zD@d-7-yb!~|F;_0EMMcRQ9RB62OIcZ2A(wVc?SNPfq!n` z7bRBpJMcB!5d0r%&sycLB{%)s{u1l2WxtlZ-zd*}fj@?L5`_n-zoiZNslc~GPE&?K z@^c}71ag{1CHduA{(Tz%_OD}K%dX}B5Z(q%*HZcsK2gXyzP$=lU{7xw+ ze2am9Xy9KM_$dQ7;?aSw@3jU#)WE9@JY-bHtYv3;!_y-35je&O=_?38qsF(j> z1FtghsDUR9e2RfDG4QPh{-J>%G4Nju{Gx&P33FyMR-`G(My2@jlD&a8hB!%R_+E8eR>&4Vdo#=z4N2@Xf#&_A`Dj@ZG>1 zFDc$i46$_}@P`b11@L{6Px`I{eiWGaRG!-;R^|IC@UI}J`vsCeF0tb8aiC@W4sylc zANUVSKlq0N|3%CH4&c9OcpdO_TK;zf|33|{vhxRz!S23=K!C8`CwJv ztAWeF{Zf82@V9_zJV^Dq1NeF1R*CNc4&(U~O%ss(5#T-z{{{G14ZjGS1;#(j-~TO^ zbpi0ZC2j@A9O<5iO1ujAAk2>{{iDELz%5dq22KMXA@M1|Uj*JN@j1Y+$Md0Ki9ZEg z23Gp62mUZH-H%cE?*_gY_+W`21ilY=QsPH}`!HXr@;?W>0hsOwDgW-xmK6s+U*cB* zKM#yyCCirszY6n@mrMLk;G2Q3m3RR7ILsGve}%qr;1hsjQoarN%fQP1cHr*;w@CR( zz|RBUCh~8FaSQPIQoaw$zZ&=^4Q~R*$rEaT{#W5f&jwcWSA9c#`7|;#6RiH3Z1m zYEHIbp;3lb9a+sKK&z!?Y;2^E7#oY1+9DIt*0wlrgw4xDS`s8CX|OQe67*=if<`P` zucS|i(k;Ff0O=OrGK6%C|G|E`#lI*Z-J(C(Pq!G09?~r%+R6nW`AGz|L?PW0ux`Pr z87;wZD zdM4c>SITG$VVpExR^lS8rAfCqi&?~>T=+t!oy{l4#*zi>ytd>T#akn3&IWNN&;rT#|M=yhAj#;2iQk?Yl-%1*~U zF1v31Q_e-Io)eY>EO&bmYW<60(=9@xEw@!k9EqpVGoYflwSM1f^m=PgtCH(CAlc~_ zUd$X+bry*F>r0|#4tXVFQqWT9X}BgGnZ`-ukn43z7N3%>-z}1zZZVgQ%aq`i=VBmL zX(9VGT#?@~jj}rAdR8R{R&nnYeXkLOx}g*@@=WYWGX|7@Pc(qPcDCOuZBEQL*7+G-d#i9Q$yZcLmqV;CEc>Ks5uWVh7Wzd8>d@K61Z*#qCV#HmrU3F zHC_yG>Qoxet>9BrN7$&7DMy_=ZDz_%pPF*hr>4BGy8dvD@`c-K%)IHHRGF;BO7DQ9~c=uy65O#0XqQK ztZiODGSuDE*F3y_XrQ@ob$4g;hRw|whOFzwm$tD5M>D>M-q}ohlXf=ub*~=S9>Jgl z9TXFnDSI+!#|vAwBSn1UvS^Q_PfWScJ+k{IlR$jA#y%**bD11ogY_W0P$K=BoKo!4 z)^c{-&P`@^8p27u<7_0ctGy~tOcio`!r9PfqmPUC`8>#;$lGD4(g=2(POP{;8CCWt zawzd7i@7XQaU$-<_P?ib46wa9f`k^JjxZd z<3qgvo+@rt+#kv@wXZpTOe{HeYaPigttn5USW;&CUZba_iGwoKE? z#apuW4G-()MB2ttBMo15@$r!6Lk5c@joWuX0x?bX9a($tRbNlnWU{Be9yg19hBf8lOLIno=jC-yjF;e=qqG{-S{MnryQgVsh;NL zji@yiZTY7`n?|4ocYciK%;=(viw_M=OFMGdW@QV;Q+76$%@t_mi0c<$mQ%$nw(G62Ro}e)=V?1Ka7jg+2WSZ%vt+efnCZYK+ zscWDaxtoirYDRN-Gm z;9q3nUt*yzurQWa=!+{xjHMO8YEm#@jfH>lg4+0lZjaS57A}~Nni=a4nq`9fn3)p- zA2O39=n*reI}ex%1Uz1LlF=KS-BKtq=+QE#yAPHLipR=ygvQq%D*ICON6Oj~5^;#d zBIq~RNYei#PNZv(AVmV-{Zx2(SK-l}d{~EekVpA440?7jau$^OrTHe0Nl@v*8I8u}O&-s=$ZdR(T(-AQP+0IJ=gWl@wnnj&xiT8EXbp3$ zz->6SYjg8ze1*bHTbs_3H{^aVzCyx+I_s(R3N$80)iC!@=Oc#?Y&4T^RwP=dwFH0i zwap`OQ%yS8|c~uXdaHOVI4n|uhC}SpFEUju8 zTZ?}X%!*^=2fFvfswooZ$|dwB5Y~^s50mqnJU&HcTOKvZ}^YY{I zWOQZQjNBD3X8BxfpNJo4!CQoJCeiX7`qy_xiTZ|Pt&tUB?BfbfeU*;q6U9}B;j)k_ z?8p_ixkqeedpem4z0{onk)@|c1e*3F2O2<>x2p^PEn?=ogs}+^LnwyGDkpHbWwIPv znQIxV)jr8o9zhy$pc;`nRe+1wAC5ahE7!MD8GP;ztsL+y6L24V@*art%&N@tKIJue zYHehC64fR{1L9z8c(iZK9>wfw3KL=wsSq`UQD$+h8_~3|b2PQheQM1sb$k1V#v(1P zEnQ>1{BW7nWy)w-SAmRiJ%b|yBd)j?J2!6}plznrcGIicBORfYz0M=!o})GdVay!U z=FIYQKE1;O*sU6V%w;F+aSWo1sTz%wC`^P3T8^+ca!B-%NT1~fBn@Ruy&xNYEz zGD5T%S>{M&5zV1R6PdsfWSn0CTyPOYR=b`EG9K-mPZ4Cs4gQiv5Vs9{5k!ap6%FZivl{N-2=WpV8|7W2`DRMzQQEI$>UQG!by=i70VYZ@_Y@1q93be&2 zH8-Oanr1ptis-&sX4)8Jfk!EJL0wU*BQ>Ay(!5b>h8M|)DbY4Hqf~Y=O3l%w(zK(hSSVf3>^a^R3y4y*L+An@OR)>;ic-;z`MdgY zh80XV7Qd z8D=Y1Iqg#`S}}1kUd_#T#f>wah$S-kV;1%Ky4E7>-+ zVijnMk!o&6Dm2Y>;uO(+QHno-u)xEV@IgIsYCI8}zpFfF+7)IgP&utrBT_MMF;vaT zP{nOCjaVi42v+7|Pu`elp%1I16Y2?AUEz7WNMXjEVYVU`eBY` zQ&06zu#4{KA7Y6QEiLddmUKcrF)JCK$AhdHcZOMtS#JB(h*^TT7_;VN%o2?=je(ZT z;2USr?u`q5m?eBrPsAEeb(q!>%v%gsb240U+e{-`34XwBA$_uO zfe*0Q1@#20L@YUf=dfnj5oRe?skW&Rs))82spe#)qNbTfpklgjP{m(FWx?<&u7^UW9l%l4YMwDW@FG>~htT`x2VV0tl zYMUBSifD`DsW~~GqNbTflw!I+N^w8<_rIPLFJv?6$!($cM3Zf?*6?wbN?5rvk2}kB zJcILpGH1t=NxP8B5r`A{@~WO3zAQhraxmI5kw?-5k~a1aZI9X`Lw0XChNN7%lrNVm ze${;k`vAO}A1&{i&#Tjg8~**SFk692wN9-_MZCpOH8(>Qwas*574s3S%pDe{vI~Aa z6}zCWU=<&qzuOkiup`V;tWs@LBUBM>F;dORNJULEjX=e8M5$s4gPn5T_Ur{Y!%3=m zG0VfM_KEm$7CLMtS6tEOlo7I;3_0Tp_KzIW5c6;WA5M%TPi!lWbz=Zl z*g2ZoHs);gY)4x=?B4#Nu}Dj6OV?O$YI{178XK5QWXhH9`N@qti=|ZdCH3O}hojSA zFQCn8k55}C=2OTIcElVQp#~Q$@T>~z(TlNvj>P`JcJzh+M7EeNjwQ0uu_T8vj<>k! z91G4)qgML$4ci05>j%Tu@FpB|$%Cm!UXUEm!r zl@m{u4Mk;rltw?|eRnr;O#dZY^jn5Mbxio1`&!nMN{J?G(T<6C?HerX%rDcC_$eKS z1FB<^wEoDl9t2nYl&l{K>X>9pp0KQc!nx|FWXB*u9kc9j(0QR^xw7L8UhA0+)}aCV z^58YP*{!j&8>}1OWLeZC2g4BgnfyM5KiL*Ig8YUC>oW)OA^%5}>0}_yjCJD!4b}lJ j&1ts}Ax-5W@jc)@d7evDva^w-+x_}PqjjlEb9DSKKlqRf diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/template.hex b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/template.hex deleted file mode 100644 index f73ff03..0000000 --- a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/template.hex +++ /dev/null @@ -1,208 +0,0 @@ -:020000040800F2 -:100000007006002025020008F5020008ED02000835 -:10001000F1020008DF020008710300080000000080 -:10002000000000000000000000000000F9020008CD -:10003000E302000800000000F7020008FB020008CD -:100040003F0200083F0200083F0200083F0200088C -:100050003F0200083F020008E50200083F020008D6 -:100060003F0200083F0200083F0200083F0200086C -:100070003F0200083F0200083F0200083F0200085C -:100080003F0200083F0200083F0200083F0200084C -:100090003F0200083F0200083F0200083F0200083C -:1000A0003F0200083F0200083F0200083F0200082C -:1000B0003F0200083F0200083F0200083F0200081C -:1000C0003F0200083F0200083F0200083F0200080C -:1000D0003F0200083F0200083F0200083F020008FC -:1000E0003F0200083F0200083F0200083F020008EC -:1000F0003F0200083F0200083F0200083F020008DC -:100100003F0200083F0200083F0200083F020008CB -:100110003F0200083F0200083F0200083F020008BB -:100120003F0200083F0200083F0200083F020008AB -:100130003F0200083F0200083F0200083F0200089B -:1001400000000000000000000000000000000000AF -:100150003F0200083F0200083F0200083F0200087B -:100160003F0200083F0200083F0200083F0200086B -:100170003F0200083F0200083F0200083F0200085B -:100180003F02000800F002F800F03CF80AA090E8F6 -:10019000000C82448344AAF10107DA4501D100F042 -:1001A00031F8AFF2090EBAE80F0013F0010F18BFD3 -:1001B000FB1A43F001031847DC0A0000FC0A0000A8 -:1001C000103A24BF78C878C1FAD8520724BF30C883 -:1001D00030C144BF04680C60704700000023002455 -:1001E00000250026103A28BF78C1FBD8520728BF47 -:1001F00030C148BF0B6070471FB500F03DFD1FBD0B -:1002000010B510BD00F031F81146FFF7F5FF00F012 -:10021000D9FB00F04FF803B4FFF7F2FF03BC00F086 -:1002200057F800000948804709480047FEE7FEE705 -:10023000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE796 -:1002400004480549054A064B70470000FD020008B6 -:100250008501000870000020700600207002002058 -:1002600070020020704770477047754600F02CF808 -:10027000AE4605006946534620F00700854618B093 -:1002800020B5FFF7DDFFBDE820404FF000064FF03E -:1002900000074FF000084FF0000B21F00701AC46BB -:1002A000ACE8C009ACE8C009ACE8C009ACE8C009DA -:1002B0008D46704710B50446AFF300802046BDE878 -:1002C0001040FFF7A8BF0000004870471000002052 -:1002D00001491820ABBEFEE726000200704700BFB0 -:1002E000FEE7704710B500F087F810BD00BFFEE7CD -:1002F00000BFFEE7704770477047704719480068B5 -:1003000040F47000174908601748006820F00100A9 -:10031000401C1549086000BF13480068C0F3400046 -:100320000028F9D01048406820F003000E494860CA -:1003300000BF0D484068C0F381000028F9D10A4988 -:1003400048600846006809490840074908600020DD -:1003500008634FF41F008860C803024980390860B1 -:100360007047000088ED00E000100240FFFFF2FE41 -:1003700000BFFEE70EB501214FF4C01000F0F4F805 -:100380000021084600F044FA684600F0DBF901203D -:100390008DF8090000208DF80000012001908DF8F3 -:1003A0000800684600F0DCF9032000F089FB002219 -:1003B0001146062000F020FB0EBD00001CB50121F7 -:1003C0000B4800F0D1F8684600F016FA01208DF8CD -:1003D000070000208DF804008DF806000120009031 -:1003E00018208DF805006946024800F063FA1CBD2C -:1003F000020018000008014010B5052000F068F95F -:10040000012000F0A7F90121074800F0A7FA50B930 -:1004100006480078042803D101200449087002E04E -:1004200004200249087010BD0008014008000020A7 -:100430000349496860F30711014A516070470000A1 -:10044000001002400349496860F30A21014A5160E3 -:1004500070470000001002400349496860F3CD2155 -:10046000014A51607047000000100240012807D186 -:100470000749496D21F030013031054A516505E0E9 -:100480000349496D21F03001014A51657047000070 -:1004900000100240052827D2DFE800F0030A1118F7 -:1004A0001F00134A126861F30002114B1A601CE02E -:1004B0000F4A126861F310420D4B1A6015E00C4AA6 -:1004C000126861F318620A4B1A600EE0084A126A59 -:1004D00061F30002064B1A6207E0054A526A61F3B3 -:1004E0000002034B5A6200E000BF00BF70470000EB -:1004F0000010024010B501460020094B03EB1142E9 -:10050000126801F01F040123A3401A4001F01F04E8 -:100510000123A3409A4200D000E0012010BD00005A -:10052000001002400349496D60F30D31014A5165E5 -:10053000704700000010024030B50024002500E0A4 -:10054000641C1120FFF7D6FF012802D0B4F5405FEC -:10055000F6D31120FFF7CEFF012801D0002500E0DF -:100560000125284630BD000010B501290DD10E4BE4 -:1005700003EB1042126800F01F040123A3401A434A -:10058000094C04EB10431A600CE0074B03EB1042DC -:10059000126800F01F040123A3409A43024C04EBAD -:1005A00010431A6010BD00000010024010B530B9B1 -:1005B000184B5B6823F48033164C636017E0154BCF -:1005C0005B6823F4803303F58033124C63600128A9 -:1005D00005D123465B6823F40033636007E00D4BCD -:1005E0005B6823F4003303F500330A4C6360094B66 -:1005F0005B6861F39543074C63600C09054B5B68CE -:1006000064F35E73034C636023465B6862F3DF73DD -:10061000636010BD001002401448006820F0010023 -:10062000401C1249086000BF10480068C0F3400039 -:100630000028F9D00D48406820F003000B494860BD -:1006400000BF0A484068C0F381000028F9D107497B -:1006500048600846006806490840044908600020D0 -:1006600008634FF41F0088607047000000100240CC -:10067000FFFFF2FE0349496860F30101014A51603E -:10068000704700000010024002484068C0F381003B -:10069000704700000010024010B5042000F0D8FAA6 -:1006A000074800680749B0FBF1F0074908600846B1 -:1006B00000684FF47A7148430449086010BD000097 -:1006C0000C00002040420F00000000200400002029 -:1006D000002131E032280ADD194A126832235A43D8 -:1006E0004FF0E0235A61A0F1320290B206E0144AC2 -:1006F000126842434FF0E0235A61002000224FF07D -:10070000E0239A611A46126942F001021A6100BFA1 -:100710004FF0E022116901F001021AB101F48032B8 -:10072000002AF5D04FF0E022126922F001024FF0CA -:10073000E0231A6100229A610028CBD170470000A3 -:10074000040000200021417241600121017201700A -:100750007047000001490860704700001404014020 -:10076000014600204868234A12688243214B1A60E0 -:100770001A1D126882431B1D1A604A7A0AB30A784E -:100780002AB91A1F126802431B1F1A6006E0194A91 -:10079000121D12680243174B1B1D1A60154A0832BE -:1007A00012688243134B08331A601A1D1268824381 -:1007B0001B1D1A600A7A2AB91A1F126802431B1FEE -:1007C0001A6016E00A7A012A07D10A4A0C32126826 -:1007D0000243084B0C331A600BE0064A08321268D9 -:1007E0000243044B08331A601A1D126802431B1D92 -:1007F0001A607047000401404FF6FF71016000214C -:1008000081710171042141710121C17170470000A2 -:1008100010B500228B071C0F0F2303FA04F28B1074 -:1008200033B1012B13D0022B20D0032B3CD12CE071 -:100830001F4B9B6893431E4CA36023469B688C0709 -:10084000240F00FA04F42343194CA3602DE0184B45 -:10085000DB689343164CE3602346DB688C07240F68 -:1008600000FA04F42343124CE3601EE0104B1B69B2 -:1008700093430F4C236123461B698C07240F00FA16 -:1008800004F423430A4C23610FE0094B5B69934353 -:10089000074C636123465B698C07240F00FA04F45C -:1008A0002343034C636100E000BF00BF10BD0000A4 -:1008B00000000140F0B50A461588ABB29579032DCA -:1008C00001D100241AE0957965B9557905F00F0436 -:1008D0005579182D01D1036110E05579282D0DD1DE -:1008E00043610BE0957905F00805167906F00406DA -:1008F0003543D67906F0030645EA0604DDB2A5B114 -:10090000002110E001258D401D405DB105688F007C -:100910000F26BE40B543056005688E0004FA06F652 -:1009200035430560491C0829ECD3FF2B15DD1B124C -:10093000002110E001258D401D405DB145688F000C -:100940000F26BE40B543456045688E0004FA06F6A2 -:1009500035434560491C0829ECD3F0BD0246002010 -:1009600093680B408B4200D000E0012070470000EC -:100970001CB501210C48FFF7F7FD6846FFF73CFF67 -:1009800001208DF8070000208DF8040010208DF85C -:1009900006004002009004208DF8050069460348D7 -:1009A000FFF788FF1CBD0000040018000010014084 -:1009B0000348C06880F400500149C86070470000D7 -:1009C0000010014000F090F8FFF766FEFFF7F6FC1C -:1009D000FFF7D0FCFFF7CCFFFFF7CAFF08E0FFF7F7 -:1009E000E7FF04490978642211FB02F0FFF770FE6B -:1009F000F5E70000080000202DE9F0470B461446FB -:100A00004FF0000C00BF2C4A1268C2F302211D46B1 -:100A100026460A46C2F10709B9F1040F02D94FF080 -:100A2000040901E0C2F10709C84602F10409B9F15D -:100A3000070F02D24FF0000901E0A2F103094F466F -:100A40004FF0010909FA08F9A9F1010909EA0509B4 -:100A500009FA07F94FF0010A0AFA07FAAAF1010A9E -:100A60000AEA060A49EA0A09CC4601466246002912 -:100A700004DB15072E0E114D6E5407E015072F0EDF -:100A80000D4D0C3501F00F06361FAF5500BF014666 -:100A900000290DDB00BF00BF01F01F050122AA40A5 -:100AA0004D09AD0005F1E025C5F8002100BF00BFEC -:100AB00000BFBDE8F08700000CED00E000E400E0BE -:100AC00000BF00F00702064B19684FF6FF031940FC -:100AD000044B0B4343EA0221014B196000BF7047EE -:100AE0000CED00E00000FA0510B5FFF795FD0121BF -:100AF0000846FFF7CFFC00BFFFF71EFD0028FBD024 -:100B000001223B210220FFF751FD0020FFF70AFDE3 -:100B100001210220FFF7BEFC00BF1920FFF7EAFC0D -:100B20000128FAD10020FFF783FC0420FFF794FC92 -:100B30000420FFF787FC0120FFF798FC0220FFF755 -:100B400099FD00BFFFF7A0FD0228FBD10020FFF7B1 -:100B50008DFC00F001F810BD2DE9F04700260024BF -:100B600000250027A046A146FFF78EFD8246BAF178 -:100B7000000F06D0BAF1010F15D0BAF1020F46D11D -:100B800015E02D48406DC0F3402040B12A48006B6D -:100B9000C0F3406018B129482949086002E029489B -:100BA0002749086037E027482549086033E0224894 -:100BB0004068C0F3004720484068C0F383441E48A3 -:100BC0004068C0F341750DB90F2C03D12801401CBA -:100BD000044400E0A41C27B91B486043184908607E -:100BE00014E015484068C0F3404058B11248406DC9 -:100BF000C0F30136B01C1349B1FBF0F0604310495B -:100C0000086003E00F4860430D49086003E00D48A9 -:100C10000B49086000BF00BF07484068C0F30318D5 -:100C20000A4810F808900648006820FA09F00449BC -:100C30000860BDE8F087000000100240006CDC0294 -:100C40000C00002000127A0000093D00820C000810 -:100C5000042808D14FF0E021096941F004014FF068 -:100C6000E022116107E04FF0E021096921F0040161 -:100C70004FF0E022116170474FF04070E1EE100A32 -:100C80007047000000000000000001020304060796 -:100C900008090000B40C000800000020100000004B -:100CA000C0010008C40C000810000020600600000D -:100CB000DC0100080000000000000000010000004E -:040CC00000127A00A4 -:040000050800018569 -:00000001FF diff --git a/Example/EpaperModuleTest_AT32F403A/Src/at32f403a_407_clock.c b/Example/EpaperModuleTest_AT32F403A/Src/at32f403a_407_clock.c deleted file mode 100644 index d9c9dc2..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Src/at32f403a_407_clock.c +++ /dev/null @@ -1,116 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_clock.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief system clock config program - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* includes ------------------------------------------------------------------*/ -#include "at32f403a_407_clock.h" - -/** @addtogroup AT32F403A_periph_template - * @{ - */ - -/** @addtogroup 403A_System_clock_configuration System_clock_configuration - * @{ - */ - -/** - * @brief system clock config program - * @note the system clock is configured as follow: - * - system clock = hext / 2 * pll_mult - * - system clock source = pll (hext) - * - hext = 8000000 - * - sclk = 240000000 - * - ahbdiv = 1 - * - ahbclk = 240000000 - * - apb2div = 2 - * - apb2clk = 120000000 - * - apb1div = 2 - * - apb1clk = 120000000 - * - pll_mult = 60 - * - pll_range = GT72MHZ (greater than 72 mhz) - * @param none - * @retval none - */ -void system_clock_config(void) -{ - /* reset crm */ - crm_reset(); - - crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE); - - /* wait till hext is ready */ - while(crm_hext_stable_wait() == ERROR) - { - } - - /* config pll clock resource */ - crm_pll_config(CRM_PLL_SOURCE_HEXT_DIV, CRM_PLL_MULT_60, CRM_PLL_OUTPUT_RANGE_GT72MHZ); - - /* config hext division */ - crm_hext_clock_div_set(CRM_HEXT_DIV_2); - - /* enable pll */ - crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE); - - /* wait till pll is ready */ - while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET) - { - } - - /* config ahbclk */ - crm_ahb_div_set(CRM_AHB_DIV_1); - - /* config apb2clk */ - crm_apb2_div_set(CRM_APB2_DIV_2); - - /* config apb1clk */ - crm_apb1_div_set(CRM_APB1_DIV_2); - - /* enable auto step mode */ - crm_auto_step_mode_enable(TRUE); - - /* select pll as system clock source */ - crm_sysclk_switch(CRM_SCLK_PLL); - - /* wait till pll is used as system clock source */ - while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL) - { - } - - /* disable auto step mode */ - crm_auto_step_mode_enable(FALSE); - - /* update system_core_clock global variable */ - system_core_clock_update(); -} - -/** - * @} - */ - -/** - * @} - */ - diff --git a/Example/EpaperModuleTest_AT32F403A/Src/at32f403a_407_int.c b/Example/EpaperModuleTest_AT32F403A/Src/at32f403a_407_int.c deleted file mode 100644 index fd8e440..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Src/at32f403a_407_int.c +++ /dev/null @@ -1,141 +0,0 @@ -/** - ************************************************************************** - * @file at32f403a_407_int.c - * @version v2.0.9 - * @date 2022-04-25 - * @brief main interrupt service routines. - ************************************************************************** - * Copyright notice & Disclaimer - * - * The software Board Support Package (BSP) that is made available to - * download from Artery official website is the copyrighted work of Artery. - * Artery authorizes customers to use, copy, and distribute the BSP - * software and its related documentation for the purpose of design and - * development in conjunction with Artery microcontrollers. Use of the - * software is governed by this copyright notice and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, - * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, - * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR - * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, - * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - * - ************************************************************************** - */ - -/* includes ------------------------------------------------------------------*/ -#include "at32f403a_407_int.h" - -/** @addtogroup AT32F403A_periph_template - * @{ - */ - -/** @addtogroup 403A_LED_toggle - * @{ - */ - -/** - * @brief this function handles nmi exception. - * @param none - * @retval none - */ -void NMI_Handler(void) -{ -} - -/** - * @brief this function handles hard fault exception. - * @param none - * @retval none - */ -void HardFault_Handler(void) -{ - /* go to infinite loop when hard fault exception occurs */ - while(1) - { - } -} - -/** - * @brief this function handles memory manage exception. - * @param none - * @retval none - */ -void MemManage_Handler(void) -{ - /* go to infinite loop when memory manage exception occurs */ - while(1) - { - } -} - -/** - * @brief this function handles bus fault exception. - * @param none - * @retval none - */ -void BusFault_Handler(void) -{ - /* go to infinite loop when bus fault exception occurs */ - while(1) - { - } -} - -/** - * @brief this function handles usage fault exception. - * @param none - * @retval none - */ -void UsageFault_Handler(void) -{ - /* go to infinite loop when usage fault exception occurs */ - while(1) - { - } -} - -/** - * @brief this function handles svcall exception. - * @param none - * @retval none - */ -void SVC_Handler(void) -{ -} - -/** - * @brief this function handles debug monitor exception. - * @param none - * @retval none - */ -void DebugMon_Handler(void) -{ -} - -/** - * @brief this function handles pendsv_handler exception. - * @param none - * @retval none - */ -void PendSV_Handler(void) -{ -} - -/** - * @brief this function handles systick handler. - * @param none - * @retval none - */ -void SysTick_Handler(void) -{ -} - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_AT32F403A/Src/board.c b/Example/EpaperModuleTest_AT32F403A/Src/board.c deleted file mode 100644 index 03744d9..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Src/board.c +++ /dev/null @@ -1,127 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "board.h" -#include "delay.h" - -uint8_t g_speed = FAST; - -void led_init(void) -{ - gpio_init_type gpio_init_struct; - - /* enable the led clock */ - crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE); - - /* set default parameter */ - gpio_default_para_init(&gpio_init_struct); - - /* configure the led gpio */ - gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; - gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; - gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; - gpio_init_struct.gpio_pins = GPIO_PINS_13; - gpio_init_struct.gpio_pull = GPIO_PULL_NONE; - gpio_init(GPIOC, &gpio_init_struct); -} - -void led_toggle(void) -{ - GPIOC->odt ^= GPIO_PINS_13; -} - -void led_set(confirm_state bit_state) -{ - gpio_bits_write(GPIOC, GPIO_PINS_13, bit_state); -} - -/** - * @brief configure button gpio - * @param button: specifies the button to be configured. - * @retval none - */ -void button_init(void) -{ - gpio_init_type gpio_init_struct; - - /* enable the button clock */ - crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE); - - /* set default parameter */ - gpio_default_para_init(&gpio_init_struct); - - /* configure button pin as input with pull-up/pull-down */ - gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; - gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; - gpio_init_struct.gpio_mode = GPIO_MODE_INPUT; - gpio_init_struct.gpio_pins = GPIO_PINS_0; - gpio_init_struct.gpio_pull = GPIO_PULL_UP; - gpio_init(GPIOA, &gpio_init_struct); -} - -flag_status button_getstate(void) -{ - return gpio_input_data_bit_read(GPIOA, GPIO_PINS_0); -} - -/** - * @brief configure button exint - * @param none - * @retval none - */ -void button_exint_init(void) -{ - exint_init_type exint_init_struct; - - crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE); - gpio_exint_line_config(GPIO_PORT_SOURCE_GPIOA, GPIO_PINS_SOURCE0); - - exint_default_para_init(&exint_init_struct); - exint_init_struct.line_enable = TRUE; - exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT; - exint_init_struct.line_select = EXINT_LINE_0; - exint_init_struct.line_polarity = EXINT_TRIGGER_FALLING_EDGE; - exint_init(&exint_init_struct); - - nvic_priority_group_config(NVIC_PRIORITY_GROUP_4); - nvic_irq_enable(EXINT0_IRQn, 0, 0); -} - -/** - * @brief button handler function - * @param none - * @retval none - */ -void button_isr(void) -{ - /* delay 5ms */ - delay_ms(5); - - /* clear interrupt pending bit */ - exint_flag_clear(EXINT_LINE_0); - - /* check input pin state */ - if (RESET == gpio_input_data_bit_read(GPIOA, GPIO_PINS_0)) - { - if (g_speed == SLOW) - g_speed = FAST; - else - g_speed = SLOW; - } -} - -/** - * @brief exint0 interrupt handler - * @param none - * @retval none - */ -void EXINT0_IRQHandler(void) -{ - button_isr(); -} diff --git a/Example/EpaperModuleTest_AT32F403A/Src/delay.c b/Example/EpaperModuleTest_AT32F403A/Src/delay.c deleted file mode 100644 index 0de8923..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Src/delay.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "delay.h" - -/* delay macros */ -#define STEP_DELAY_MS 50 - -/* delay variable */ -static __IO uint32_t fac_us; -static __IO uint32_t fac_ms; - -/** - * @brief initialize delay function - * @param none - * @retval none - */ -void delay_init(void) -{ - /* configure systick */ - systick_clock_source_config(SYSTICK_CLOCK_SOURCE_AHBCLK_NODIV); - fac_us = system_core_clock / (1000000U); - fac_ms = fac_us * (1000U); -} - -/** - * @brief inserts a delay time. - * @param nus: specifies the delay time length, in microsecond. - * @retval none - */ -void delay_us(uint32_t nus) -{ - uint32_t temp = 0; - SysTick->LOAD = (uint32_t)(nus * fac_us); - SysTick->VAL = 0x00; - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ; - do - { - temp = SysTick->CTRL; - }while((temp & 0x01) && !(temp & (1 << 16))); - - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; - SysTick->VAL = 0x00; -} - -/** - * @brief inserts a delay time. - * @param nms: specifies the delay time length, in milliseconds. - * @retval none - */ -void delay_ms(uint16_t nms) -{ - uint32_t temp = 0; - while(nms) - { - if(nms > STEP_DELAY_MS) - { - SysTick->LOAD = (uint32_t)(STEP_DELAY_MS * fac_ms); - nms -= STEP_DELAY_MS; - } - else - { - SysTick->LOAD = (uint32_t)(nms * fac_ms); - nms = 0; - } - SysTick->VAL = 0x00; - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; - do - { - temp = SysTick->CTRL; - }while((temp & 0x01) && !(temp & (1 << 16))); - - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; - SysTick->VAL = 0x00; - } -} - -/** - * @brief inserts a delay time. - * @param sec: specifies the delay time, in seconds. - * @retval none - */ -void delay_sec(uint16_t sec) -{ - uint16_t index; - for(index = 0; index < sec; index++) - { - delay_ms(500); - delay_ms(500); - } -} diff --git a/Example/EpaperModuleTest_AT32F403A/Src/main.c b/Example/EpaperModuleTest_AT32F403A/Src/main.c deleted file mode 100644 index aa44f27..0000000 --- a/Example/EpaperModuleTest_AT32F403A/Src/main.c +++ /dev/null @@ -1,208 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "at32f403a_407_clock.h" - -#include "delay.h" - -#include "board.h" - -#include "epaper.h" -#include "bmp.h" - -#include -#include - -// define for White Black Red Epaper Module -//#define EPD_BWR - -uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; -#ifdef EPD_BWR -uint8_t image_red[EPD_W_BUFF_SIZE * EPD_H]; -#endif - -/** - * @brief main function. - * @param none - * @retval none - */ -int main(void) -{ - uint8_t text[20]; - - system_clock_config(); - - delay_init(); - - button_init(); - button_exint_init(); - led_init(); - - epd_io_init(); - - epd_init(); - -#ifdef EPD_BWR - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - #else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #endif - - epd_display(image_bw, image_red); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay_ms(8000); - - epd_init(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); - -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"AT32F403ACGU7 Example",EPD_FONT_SIZE16x8,EPD_COLOR_RED); -#else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_RED, 1); -#endif - - epd_display(image_bw, image_red); - -#else - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - #else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - - #ifdef EPD_154 - epd_paint_clear(EPD_COLOR_WHITE); - epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); - #else - epd_paint_clear(EPD_COLOR_WHITE); - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #endif - #endif - - epd_displayBW(image_bw); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay_ms(5000); - - epd_init_partial(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_154 - epd_paint_showString(10, 0, (uint8_t *)&"1.54 Inch", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 23, (uint8_t *)&"Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 48, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showString(10, 60, (uint8_t *)&"with 200 x 200 resolution", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showPicture((EPD_H - 200) / 2,130,200,64,gImage_5,EPD_COLOR_WHITE); -#endif -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"AT32F403ACGU7 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); -#else - epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); -#endif - - sprintf((char *)&text, ">> Partial Mode"); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay_ms(1000); - - for (uint32_t i = 123; i < 8 * 123; i += 123) - { - sprintf((char *)&text, ">> Num=%d ", i); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay_ms(100); - } - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_displayBW_partial(image_bw); - - delay_ms(1000); - - epd_update(); -#endif - - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - while (1) - { - led_toggle(); - delay_ms(g_speed * DELAY); - } -} - -/** - * @} - */ - -/** - * @} - */ diff --git a/Example/EpaperModuleTest_Arduino_ESP32/EpaperModuleTest_Arduino_ESP32.ino b/Example/EpaperModuleTest_Arduino_ESP32/EpaperModuleTest_Arduino_ESP32.ino index 19f5a87..97bacbe 100644 --- a/Example/EpaperModuleTest_Arduino_ESP32/EpaperModuleTest_Arduino_ESP32.ino +++ b/Example/EpaperModuleTest_Arduino_ESP32/EpaperModuleTest_Arduino_ESP32.ino @@ -7,22 +7,29 @@ #include #include -// ESP32 CS(SS)=5,SCL(SCK)=18,SDA(MOSI)=23,BUSY=15,RES(RST)=2,DC=0 +// ESP32 CS(SS)=5,SCL(SCK)=18,SDA(MOSI)=23,BUSY=4,RES(RST)=17,DC=16 +#define CS_PIN (5) +#define BUSY_PIN (4) +#define RES_PIN (17) +#define DC_PIN (16) // 1.54'' EPD Module -//GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // GDEH0154D67 200x200, SSD1681 +//GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEH0154D67 200x200, SSD1681 // 2.13'' EPD Module -GxEPD2_BW display(GxEPD2_213_BN(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // DEPG0213BN 122x250, SSD1680 -//GxEPD2_3C display(GxEPD2_213_Z98c(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // GDEY0213Z98 122x250, SSD1680 +//GxEPD2_BW display(GxEPD2_213_BN(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // DEPG0213BN 122x250, SSD1680 +//GxEPD2_3C display(GxEPD2_213_Z98c(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEY0213Z98 122x250, SSD1680 // 2.9'' EPD Module -//GxEPD2_BW display(GxEPD2_290_BS(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // DEPG0290BS 128x296, SSD1680 -//GxEPD2_3C display(GxEPD2_290_C90c(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // GDEM029C90 128x296, SSD1680 +//GxEPD2_BW display(GxEPD2_290_BS(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // DEPG0290BS 128x296, SSD1680 +//GxEPD2_3C display(GxEPD2_290_C90c(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEM029C90 128x296, SSD1680 + +// 3.7'' EPD Module +GxEPD2_BW display(GxEPD2_370_GDEY037T03(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEY037T03 240x416, UC8253 // 4.2'' EPD Module -//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // 400x300, SSD1683 -//GxEPD2_3C display(GxEPD2_420c_GDEY042Z98(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // 400x300, SSD1683 +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // 400x300, SSD1683 +//GxEPD2_3C display(GxEPD2_420c_GDEY042Z98(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // 400x300, SSD1683 void setup() { diff --git a/Example/EpaperModuleTest_Arduino_ESP32C3/EpaperModuleTest_Arduino_ESP32C3.ino b/Example/EpaperModuleTest_Arduino_ESP32C3/EpaperModuleTest_Arduino_ESP32C3.ino index c4e6ade..5bf6d6d 100644 --- a/Example/EpaperModuleTest_Arduino_ESP32C3/EpaperModuleTest_Arduino_ESP32C3.ino +++ b/Example/EpaperModuleTest_Arduino_ESP32C3/EpaperModuleTest_Arduino_ESP32C3.ino @@ -8,21 +8,28 @@ #include // ESP32-C3 CS(SS)=7,SCL(SCK)=4,SDA(MOSI)=6,BUSY=3,RES(RST)=2,DC=1 +#define CS_PIN (SS) +#define BUSY_PIN (3) +#define RES_PIN (2) +#define DC_PIN (1) // 1.54'' EPD Module -//GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // GDEH0154D67 200x200, SSD1681 +//GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEH0154D67 200x200, SSD1681 // 2.13'' EPD Module -GxEPD2_BW display(GxEPD2_213_BN(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // DEPG0213BN 122x250, SSD1680 -//GxEPD2_3C display(GxEPD2_213_Z98c(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // GDEY0213Z98 122x250, SSD1680 +GxEPD2_BW display(GxEPD2_213_BN(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // DEPG0213BN 122x250, SSD1680 +//GxEPD2_3C display(GxEPD2_213_Z98c(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEY0213Z98 122x250, SSD1680 // 2.9'' EPD Module -//GxEPD2_BW display(GxEPD2_290_BS(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // DEPG0290BS 128x296, SSD1680 -//GxEPD2_3C display(GxEPD2_290_C90c(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // GDEM029C90 128x296, SSD1680 +//GxEPD2_BW display(GxEPD2_290_BS(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // DEPG0290BS 128x296, SSD1680 +//GxEPD2_3C display(GxEPD2_290_C90c(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEM029C90 128x296, SSD1680 + +// 3.7'' EPD Module +//GxEPD2_BW display(GxEPD2_370_GDEY037T03(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEY037T03 240x416, UC8253 // 4.2'' EPD Module -//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // 400x300, SSD1683 -//GxEPD2_3C display(GxEPD2_420c_GDEY042Z98(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // 400x300, SSD1683 +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // 400x300, SSD1683 +//GxEPD2_3C display(GxEPD2_420c_GDEY042Z98(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // 400x300, SSD1683 void setup() { diff --git a/Example/EpaperModuleTest_Arduino_ESP8266/EpaperModuleTest_Arduino_ESP8266.ino b/Example/EpaperModuleTest_Arduino_ESP8266/EpaperModuleTest_Arduino_ESP8266.ino index 088f606..151dda9 100644 --- a/Example/EpaperModuleTest_Arduino_ESP8266/EpaperModuleTest_Arduino_ESP8266.ino +++ b/Example/EpaperModuleTest_Arduino_ESP8266/EpaperModuleTest_Arduino_ESP8266.ino @@ -8,21 +8,28 @@ #include // ESP8266 CS(SS)=15,SCL(SCK)=14,SDA(MOSI)=13,BUSY=16,RES(RST)=5,DC=4 +#define CS_PIN (15) +#define BUSY_PIN (16) +#define RES_PIN (5) +#define DC_PIN (4) // 1.54'' EPD Module -//GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // GDEH0154D67 200x200, SSD1681 +//GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEH0154D67 200x200, SSD1681 // 2.13'' EPD Module -GxEPD2_BW display(GxEPD2_213_BN(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // DEPG0213BN 122x250, SSD1680 -//GxEPD2_3C display(GxEPD2_213_Z98c(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // GDEY0213Z98 122x250, SSD1680 +GxEPD2_BW display(GxEPD2_213_BN(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // DEPG0213BN 122x250, SSD1680 +//GxEPD2_3C display(GxEPD2_213_Z98c(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEY0213Z98 122x250, SSD1680 // 2.9'' EPD Module -//GxEPD2_BW display(GxEPD2_290_BS(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // DEPG0290BS 128x296, SSD1680 -//GxEPD2_3C display(GxEPD2_290_C90c(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // GDEM029C90 128x296, SSD1680 +//GxEPD2_BW display(GxEPD2_290_BS(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // DEPG0290BS 128x296, SSD1680 +//GxEPD2_3C display(GxEPD2_290_C90c(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEM029C90 128x296, SSD1680 + +// 3.7'' EPD Module +//GxEPD2_BW display(GxEPD2_370_GDEY037T03(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // GDEY037T03 240x416, UC8253 // 4.2'' EPD Module -//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // 400x300, SSD1683 -//GxEPD2_3C display(GxEPD2_420c_GDEY042Z98(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // 400x300, SSD1683 +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // 400x300, SSD1683 +//GxEPD2_3C display(GxEPD2_420c_GDEY042Z98(/*CS=5*/ CS_PIN, /*DC=*/ DC_PIN, /*RES=*/ RES_PIN, /*BUSY=*/ BUSY_PIN)); // 400x300, SSD1683 void setup() { diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armcc.h b/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armcc.h deleted file mode 100644 index a955d47..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armcc.h +++ /dev/null @@ -1,888 +0,0 @@ -/**************************************************************************//** - * @file cmsis_armcc.h - * @brief CMSIS compiler ARMCC (Arm Compiler 5) header file - * @version V5.3.2 - * @date 27. May 2021 - ******************************************************************************/ -/* - * Copyright (c) 2009-2021 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#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 - -/* CMSIS compiler control architecture macros */ -#if ((defined (__TARGET_ARCH_6_M ) && (__TARGET_ARCH_6_M == 1)) || \ - (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M == 1)) ) - #define __ARM_ARCH_6M__ 1 -#endif - -#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M == 1)) - #define __ARM_ARCH_7M__ 1 -#endif - -#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1)) - #define __ARM_ARCH_7EM__ 1 -#endif - - /* __ARM_ARCH_8M_BASE__ not applicable */ - /* __ARM_ARCH_8M_MAIN__ not applicable */ - /* __ARM_ARCH_8_1M_MAIN__ not applicable */ - -/* CMSIS compiler control DSP macros */ -#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - #define __ARM_FEATURE_DSP 1 -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE static __forceinline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __declspec(noreturn) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed)) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT __packed struct -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION __packed union -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x))) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr))) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr))) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __memory_changed() -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START -#define __PROGRAM_START __main -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) -#endif - -/* ########################## 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() __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() __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() __dmb(0xF) - - -/** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV __rev - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \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 (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#ifndef __NO_EMBEDDED_ASM -__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_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] op1 Value to rotate - \param [in] op2 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 ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - #define __RBIT __rbit -#else -__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) -{ - uint32_t result; - uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ - - result = value; /* r will be reversed bits of v; first get LSB of v */ - for (value >>= 1U; value != 0U; 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 ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -/** - \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) - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - -/** - \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 - */ -__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ########################### 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 special-purpose register PRIMASK. - Can only be executed in Privileged modes. - */ -/* intrinsic void __enable_irq(); */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting special-purpose register PRIMASK. - Can only be executed in Privileged modes. - */ -/* 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; - __ISB(); -} - - -/** - \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 ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. - Can only be executed in Privileged modes. - */ -#define __enable_fault_irq __enable_fiq - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. - 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)1U); -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - - -/** - \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 ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__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 ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - register uint32_t __regfpscr __ASM("fpscr"); - __regfpscr = (fpscr); -#else - (void)fpscr; -#endif -} - - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -#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)) - -#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) - -#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) - -#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCC_H */ diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armclang.h b/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armclang.h deleted file mode 100644 index 6911417..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armclang.h +++ /dev/null @@ -1,1503 +0,0 @@ -/**************************************************************************//** - * @file cmsis_armclang.h - * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V5.4.3 - * @date 27. May 2021 - ******************************************************************************/ -/* - * Copyright (c) 2009-2021 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ - -#ifndef __CMSIS_ARMCLANG_H -#define __CMSIS_ARMCLANG_H - -#pragma clang system_header /* treat file as system include file */ - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __ASM volatile("":::"memory") -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START -#define __PROGRAM_START __main -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -#ifndef __STACK_SEAL -#define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base -#endif - -#ifndef __TZ_STACK_SEAL_SIZE -#define __TZ_STACK_SEAL_SIZE 8U -#endif - -#ifndef __TZ_STACK_SEAL_VALUE -#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL -#endif - - -__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { - *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; -} -#endif - - -/* ########################## 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_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_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 unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV(value) __builtin_bswap32(value) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV16(value) __ROR(__REV(value), 16) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - 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 - */ -#define __RBIT __builtin_arm_rbit - -/** - \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 - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - -/** - \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 - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - -/** - \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 - - -/** - \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 - - -/** - \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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - -/** - \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 - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - -/** - \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) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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 - */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ########################### 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 special-purpose register PRIMASK. - Can only be executed in Privileged modes. - */ -#ifndef __ARM_COMPAT_H -__STATIC_FORCEINLINE void __enable_irq(void) -{ - __ASM volatile ("cpsie i" : : : "memory"); -} -#endif - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting special-purpose register PRIMASK. - Can only be executed in Privileged modes. - */ -#ifndef __ARM_COMPAT_H -__STATIC_FORCEINLINE void __disable_irq(void) -{ - __ASM volatile ("cpsid i" : : : "memory"); -} -#endif - - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); - __ISB(); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) -{ - __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); - __ISB(); -} -#endif - - -/** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __enable_fault_irq(void) -{ - __ASM volatile ("cpsie f" : : : "memory"); -} - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)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 - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) -#endif - - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -#define __SADD8 __builtin_arm_sadd8 -#define __QADD8 __builtin_arm_qadd8 -#define __SHADD8 __builtin_arm_shadd8 -#define __UADD8 __builtin_arm_uadd8 -#define __UQADD8 __builtin_arm_uqadd8 -#define __UHADD8 __builtin_arm_uhadd8 -#define __SSUB8 __builtin_arm_ssub8 -#define __QSUB8 __builtin_arm_qsub8 -#define __SHSUB8 __builtin_arm_shsub8 -#define __USUB8 __builtin_arm_usub8 -#define __UQSUB8 __builtin_arm_uqsub8 -#define __UHSUB8 __builtin_arm_uhsub8 -#define __SADD16 __builtin_arm_sadd16 -#define __QADD16 __builtin_arm_qadd16 -#define __SHADD16 __builtin_arm_shadd16 -#define __UADD16 __builtin_arm_uadd16 -#define __UQADD16 __builtin_arm_uqadd16 -#define __UHADD16 __builtin_arm_uhadd16 -#define __SSUB16 __builtin_arm_ssub16 -#define __QSUB16 __builtin_arm_qsub16 -#define __SHSUB16 __builtin_arm_shsub16 -#define __USUB16 __builtin_arm_usub16 -#define __UQSUB16 __builtin_arm_uqsub16 -#define __UHSUB16 __builtin_arm_uhsub16 -#define __SASX __builtin_arm_sasx -#define __QASX __builtin_arm_qasx -#define __SHASX __builtin_arm_shasx -#define __UASX __builtin_arm_uasx -#define __UQASX __builtin_arm_uqasx -#define __UHASX __builtin_arm_uhasx -#define __SSAX __builtin_arm_ssax -#define __QSAX __builtin_arm_qsax -#define __SHSAX __builtin_arm_shsax -#define __USAX __builtin_arm_usax -#define __UQSAX __builtin_arm_uqsax -#define __UHSAX __builtin_arm_uhsax -#define __USAD8 __builtin_arm_usad8 -#define __USADA8 __builtin_arm_usada8 -#define __SSAT16 __builtin_arm_ssat16 -#define __USAT16 __builtin_arm_usat16 -#define __UXTB16 __builtin_arm_uxtb16 -#define __UXTAB16 __builtin_arm_uxtab16 -#define __SXTB16 __builtin_arm_sxtb16 -#define __SXTAB16 __builtin_arm_sxtab16 -#define __SMUAD __builtin_arm_smuad -#define __SMUADX __builtin_arm_smuadx -#define __SMLAD __builtin_arm_smlad -#define __SMLADX __builtin_arm_smladx -#define __SMLALD __builtin_arm_smlald -#define __SMLALDX __builtin_arm_smlaldx -#define __SMUSD __builtin_arm_smusd -#define __SMUSDX __builtin_arm_smusdx -#define __SMLSD __builtin_arm_smlsd -#define __SMLSDX __builtin_arm_smlsdx -#define __SMLSLD __builtin_arm_smlsld -#define __SMLSLDX __builtin_arm_smlsldx -#define __SEL __builtin_arm_sel -#define __QADD __builtin_arm_qadd -#define __QSUB __builtin_arm_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 __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) - -#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) - -__STATIC_FORCEINLINE int32_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 == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCLANG_H */ diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armclang_ltm.h b/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armclang_ltm.h deleted file mode 100644 index 1e255d5..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_armclang_ltm.h +++ /dev/null @@ -1,1928 +0,0 @@ -/**************************************************************************//** - * @file cmsis_armclang_ltm.h - * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V1.5.3 - * @date 27. May 2021 - ******************************************************************************/ -/* - * Copyright (c) 2018-2021 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ - -#ifndef __CMSIS_ARMCLANG_H -#define __CMSIS_ARMCLANG_H - -#pragma clang system_header /* treat file as system include file */ - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __ASM volatile("":::"memory") -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START -#define __PROGRAM_START __main -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -#ifndef __STACK_SEAL -#define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base -#endif - -#ifndef __TZ_STACK_SEAL_SIZE -#define __TZ_STACK_SEAL_SIZE 8U -#endif - -#ifndef __TZ_STACK_SEAL_VALUE -#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL -#endif - - -__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { - *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; -} -#endif - - -/* ########################## 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 unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV(value) __builtin_bswap32(value) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV16(value) __ROR(__REV(value), 16) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - 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 - */ -#define __RBIT __builtin_arm_rbit - -/** - \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 - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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 - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - -/** - \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 - - -/** - \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 - - -/** - \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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \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 - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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 - */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ########################### 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 special-purpose register PRIMASK. - Can only be executed in Privileged modes. - */ -#ifndef __ARM_COMPAT_H -__STATIC_FORCEINLINE void __enable_irq(void) -{ - __ASM volatile ("cpsie i" : : : "memory"); -} -#endif - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting special-purpose register PRIMASK. - Can only be executed in Privileged modes. - */ -#ifndef __ARM_COMPAT_H -__STATIC_FORCEINLINE void __disable_irq(void) -{ - __ASM volatile ("cpsid i" : : : "memory"); -} -#endif - - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); - __ISB(); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) -{ - __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); - __ISB(); -} -#endif - - -/** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __enable_fault_irq(void) -{ - __ASM volatile ("cpsie f" : : : "memory"); -} - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)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 - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) -#endif - - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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; \ - }) - -__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) - -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) - -#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) - -#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) - -__STATIC_FORCEINLINE int32_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 == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCLANG_H */ diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_compiler.h b/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_compiler.h deleted file mode 100644 index adbf296..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_compiler.h +++ /dev/null @@ -1,283 +0,0 @@ -/**************************************************************************//** - * @file cmsis_compiler.h - * @brief CMSIS compiler generic header file - * @version V5.1.0 - * @date 09. October 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __CMSIS_COMPILER_H -#define __CMSIS_COMPILER_H - -#include - -/* - * Arm Compiler 4/5 - */ -#if defined ( __CC_ARM ) - #include "cmsis_armcc.h" - - -/* - * Arm Compiler 6.6 LTM (armclang) - */ -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100) - #include "cmsis_armclang_ltm.h" - - /* - * Arm Compiler above 6.10.1 (armclang) - */ -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) - #include "cmsis_armclang.h" - - -/* - * GNU Compiler - */ -#elif defined ( __GNUC__ ) - #include "cmsis_gcc.h" - - -/* - * IAR Compiler - */ -#elif defined ( __ICCARM__ ) - #include - - -/* - * TI Arm Compiler - */ -#elif defined ( __TI_ARM__ ) - #include - - #ifndef __ASM - #define __ASM __asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - #define __NO_RETURN __attribute__((noreturn)) - #endif - #ifndef __USED - #define __USED __attribute__((used)) - #endif - #ifndef __WEAK - #define __WEAK __attribute__((weak)) - #endif - #ifndef __PACKED - #define __PACKED __attribute__((packed)) - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed)) - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed)) - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) - #endif - #ifndef __RESTRICT - #define __RESTRICT __restrict - #endif - #ifndef __COMPILER_BARRIER - #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. - #define __COMPILER_BARRIER() (void)0 - #endif - - -/* - * 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. - */ - - #ifndef __ASM - #define __ASM __asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - #define __NO_RETURN __attribute__((noreturn)) - #endif - #ifndef __USED - #define __USED __attribute__((used)) - #endif - #ifndef __WEAK - #define __WEAK __attribute__((weak)) - #endif - #ifndef __PACKED - #define __PACKED __packed__ - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __packed__ - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION union __packed__ - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - struct __packed__ T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #define __ALIGNED(x) __align(x) - #endif - #ifndef __RESTRICT - #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. - #define __RESTRICT - #endif - #ifndef __COMPILER_BARRIER - #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. - #define __COMPILER_BARRIER() (void)0 - #endif - - -/* - * COSMIC Compiler - */ -#elif defined ( __CSMC__ ) - #include - - #ifndef __ASM - #define __ASM _asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - // NO RETURN is automatically detected hence no warning here - #define __NO_RETURN - #endif - #ifndef __USED - #warning No compiler specific solution for __USED. __USED is ignored. - #define __USED - #endif - #ifndef __WEAK - #define __WEAK __weak - #endif - #ifndef __PACKED - #define __PACKED @packed - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT @packed struct - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION @packed union - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - @packed struct T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. - #define __ALIGNED(x) - #endif - #ifndef __RESTRICT - #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. - #define __RESTRICT - #endif - #ifndef __COMPILER_BARRIER - #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. - #define __COMPILER_BARRIER() (void)0 - #endif - - -#else - #error Unknown compiler. -#endif - - -#endif /* __CMSIS_COMPILER_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_gcc.h b/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_gcc.h deleted file mode 100644 index 67bda4e..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_gcc.h +++ /dev/null @@ -1,2211 +0,0 @@ -/**************************************************************************//** - * @file cmsis_gcc.h - * @brief CMSIS compiler GCC header file - * @version V5.4.1 - * @date 27. May 2021 - ******************************************************************************/ -/* - * Copyright (c) 2009-2021 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __CMSIS_GCC_H -#define __CMSIS_GCC_H - -/* ignore some GCC warnings */ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wsign-conversion" -#pragma GCC diagnostic ignored "-Wconversion" -#pragma GCC diagnostic ignored "-Wunused-parameter" - -/* Fallback for __has_builtin */ -#ifndef __has_builtin - #define __has_builtin(x) (0) -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif -#ifndef __COMPILER_BARRIER - #define __COMPILER_BARRIER() __ASM volatile("":::"memory") -#endif - -/* ######################### Startup and Lowlevel Init ######################## */ - -#ifndef __PROGRAM_START - -/** - \brief Initializes data and bss sections - \details This default implementations initialized all data and additional bss - sections relying on .copy.table and .zero.table specified properly - in the used linker script. - - */ -__STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) -{ - extern void _start(void) __NO_RETURN; - - typedef struct { - uint32_t const* src; - uint32_t* dest; - uint32_t wlen; - } __copy_table_t; - - typedef struct { - uint32_t* dest; - uint32_t wlen; - } __zero_table_t; - - extern const __copy_table_t __copy_table_start__; - extern const __copy_table_t __copy_table_end__; - extern const __zero_table_t __zero_table_start__; - extern const __zero_table_t __zero_table_end__; - - for (__copy_table_t const* pTable = &__copy_table_start__; pTable < &__copy_table_end__; ++pTable) { - for(uint32_t i=0u; iwlen; ++i) { - pTable->dest[i] = pTable->src[i]; - } - } - - for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) { - for(uint32_t i=0u; iwlen; ++i) { - pTable->dest[i] = 0u; - } - } - - _start(); -} - -#define __PROGRAM_START __cmsis_start -#endif - -#ifndef __INITIAL_SP -#define __INITIAL_SP __StackTop -#endif - -#ifndef __STACK_LIMIT -#define __STACK_LIMIT __StackLimit -#endif - -#ifndef __VECTOR_TABLE -#define __VECTOR_TABLE __Vectors -#endif - -#ifndef __VECTOR_TABLE_ATTRIBUTE -#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -#ifndef __STACK_SEAL -#define __STACK_SEAL __StackSeal -#endif - -#ifndef __TZ_STACK_SEAL_SIZE -#define __TZ_STACK_SEAL_SIZE 8U -#endif - -#ifndef __TZ_STACK_SEAL_VALUE -#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL -#endif - - -__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { - *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; -} -#endif - - -/* ########################## 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_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_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() __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. - */ -#define __WFI() __ASM volatile ("wfi":::"memory") - - -/** - \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() __ASM volatile ("wfe":::"memory") - - -/** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV() __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. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE void __DMB(void) -{ - __ASM volatile ("dmb 0xF":::"memory"); -} - - -/** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) -{ -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) - return __builtin_bswap32(value); -#else - uint32_t result; - - __ASM ("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 within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) -{ - uint32_t result; - - __ASM ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return result; -} - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) -{ -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - return (int16_t)__builtin_bswap16(value); -#else - int16_t result; - - __ASM ("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] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - 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 - */ -__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) -{ - uint32_t result; - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - __ASM ("rbit %0, %1" : "=r" (result) : "r" (value) ); -#else - uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ - - result = value; /* r will be reversed bits of v; first get LSB of v */ - for (value >>= 1U; value != 0U; 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 - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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. - */ -__STATIC_FORCEINLINE void __CLREX(void) -{ - __ASM volatile ("clrex" ::: "memory"); -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (1..32) - \return Saturated value - */ -#define __SSAT(ARG1, ARG2) \ -__extension__ \ -({ \ - int32_t __RES, __ARG1 = (ARG1); \ - __ASM volatile ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __RES; \ - }) - - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (0..31) - \return Saturated value - */ -#define __USAT(ARG1, ARG2) \ -__extension__ \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM volatile ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __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 - */ -__STATIC_FORCEINLINE 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) - */ -__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); -#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" (ptr) : "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) - */ -__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); -#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" (ptr) : "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) - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \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 - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \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) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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) - */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - 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 - */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); -} - - -/** - \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) - */ -__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint8_t) result); -} - - -/** - \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) - */ -__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint16_t) result); -} - - -/** - \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) - */ -__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return(result); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); - return(result); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); - return(result); -} - - -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); - return(result); -} - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ########################### 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 special-purpose register PRIMASK. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __enable_irq(void) -{ - __ASM volatile ("cpsie i" : : : "memory"); -} - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting special-purpose register PRIMASK. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); - __ISB(); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) -{ - __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); - __ISB(); -} -#endif - - -/** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - 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 - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __enable_fault_irq(void) -{ - __ASM volatile ("cpsie f" : : : "memory"); -} - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "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 - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE 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 - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \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 - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_get_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - return __builtin_arm_get_fpscr(); -#else - uint32_t result; - - __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); - return(result); -#endif -#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_FORCEINLINE void __set_FPSCR(uint32_t fpscr) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_set_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - __builtin_arm_set_fpscr(fpscr); -#else - __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); -#endif -#else - (void)fpscr; -#endif -} - - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#define __SSAT16(ARG1, ARG2) \ -__extension__ \ -({ \ - int32_t __RES, __ARG1 = (ARG1); \ - __ASM volatile ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __RES; \ - }) - -#define __USAT16(ARG1, ARG2) \ -__extension__ \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM volatile ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __RES; \ - }) - -__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) -{ - uint32_t result; - if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) { - __ASM volatile ("sxtb16 %0, %1, ROR %2" : "=r" (result) : "r" (op1), "i" (rotate) ); - } else { - result = __SXTB16(__ROR(op1, rotate)) ; - } - return result; -} - -__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SXTAB16_RORn(uint32_t op1, uint32_t op2, uint32_t rotate) -{ - uint32_t result; - if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) { - __ASM volatile ("sxtab16 %0, %1, %2, ROR %3" : "=r" (result) : "r" (op1) , "r" (op2) , "i" (rotate)); - } else { - result = __SXTAB16(op1, __ROR(op2, rotate)); - } - return result; -} - - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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); -} - -__STATIC_FORCEINLINE 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) \ -__extension__ \ -({ \ - 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) \ -__extension__ \ -({ \ - 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; \ - }) - - -__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) -{ - int32_t result; - - __ASM ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#endif /* (__ARM_FEATURE_DSP == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#pragma GCC diagnostic pop - -#endif /* __CMSIS_GCC_H */ diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_version.h b/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_version.h deleted file mode 100644 index 8b4765f..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/cmsis_version.h +++ /dev/null @@ -1,39 +0,0 @@ -/**************************************************************************//** - * @file cmsis_version.h - * @brief CMSIS Core(M) Version definitions - * @version V5.0.5 - * @date 02. February 2022 - ******************************************************************************/ -/* - * Copyright (c) 2009-2022 ARM Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CMSIS_VERSION_H -#define __CMSIS_VERSION_H - -/* CMSIS Version definitions */ -#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ -#define __CM_CMSIS_VERSION_SUB ( 6U) /*!< [15:0] CMSIS Core(M) sub version */ -#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ - __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ -#endif diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/core_cm3.c b/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/core_cm3.c deleted file mode 100644 index fcff0d1..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/core_cm3.c +++ /dev/null @@ -1,784 +0,0 @@ -/**************************************************************************//** - * @file core_cm3.c - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Source File - * @version V1.30 - * @date 30. October 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#include - -/* define compiler specific symbols */ -#if defined ( __CC_ARM ) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - -#elif defined ( __ICCARM__ ) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ - -#elif defined ( __GNUC__ ) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - -#elif defined ( __TASKING__ ) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - -#endif - - -/* ################### Compiler specific Intrinsics ########################### */ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -__ASM uint32_t __get_PSP(void) -{ - mrs r0, psp - bx lr -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -__ASM void __set_PSP(uint32_t topOfProcStack) -{ - msr psp, r0 - bx lr -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -__ASM uint32_t __get_MSP(void) -{ - mrs r0, msp - bx lr -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -__ASM void __set_MSP(uint32_t mainStackPointer) -{ - msr msp, r0 - bx lr -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -__ASM uint32_t __REV16(uint16_t value) -{ - rev16 r0, r0 - bx lr -} - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -__ASM int32_t __REVSH(int16_t value) -{ - revsh r0, r0 - bx lr -} - - -#if (__ARMCC_VERSION < 400000) - -/** - * @brief Remove the exclusive lock created by ldrex - * - * Removes the exclusive lock which is created by ldrex. - */ -__ASM void __CLREX(void) -{ - clrex -} - -/** - * @brief Return the Base Priority value - * - * @return BasePriority - * - * Return the content of the base priority register - */ -__ASM uint32_t __get_BASEPRI(void) -{ - mrs r0, basepri - bx lr -} - -/** - * @brief Set the Base Priority value - * - * @param basePri BasePriority - * - * Set the base priority register - */ -__ASM void __set_BASEPRI(uint32_t basePri) -{ - msr basepri, r0 - bx lr -} - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -__ASM uint32_t __get_PRIMASK(void) -{ - mrs r0, primask - bx lr -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -__ASM void __set_PRIMASK(uint32_t priMask) -{ - msr primask, r0 - bx lr -} - -/** - * @brief Return the Fault Mask value - * - * @return FaultMask - * - * Return the content of the fault mask register - */ -__ASM uint32_t __get_FAULTMASK(void) -{ - mrs r0, faultmask - bx lr -} - -/** - * @brief Set the Fault Mask value - * - * @param faultMask faultMask value - * - * Set the fault mask register - */ -__ASM void __set_FAULTMASK(uint32_t faultMask) -{ - msr faultmask, r0 - bx lr -} - -/** - * @brief Return the Control Register value - * - * @return Control value - * - * Return the content of the control register - */ -__ASM uint32_t __get_CONTROL(void) -{ - mrs r0, control - bx lr -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -__ASM void __set_CONTROL(uint32_t control) -{ - msr control, r0 - bx lr -} - -#endif /* __ARMCC_VERSION */ - - - -#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ -#pragma diag_suppress=Pe940 - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -uint32_t __get_PSP(void) -{ - __ASM("mrs r0, psp"); - __ASM("bx lr"); -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -void __set_PSP(uint32_t topOfProcStack) -{ - __ASM("msr psp, r0"); - __ASM("bx lr"); -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -uint32_t __get_MSP(void) -{ - __ASM("mrs r0, msp"); - __ASM("bx lr"); -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -void __set_MSP(uint32_t topOfMainStack) -{ - __ASM("msr msp, r0"); - __ASM("bx lr"); -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -uint32_t __REV16(uint16_t value) -{ - __ASM("rev16 r0, r0"); - __ASM("bx lr"); -} - -/** - * @brief Reverse bit order of value - * - * @param value value to reverse - * @return reversed value - * - * Reverse bit order of value - */ -uint32_t __RBIT(uint32_t value) -{ - __ASM("rbit r0, r0"); - __ASM("bx lr"); -} - -/** - * @brief LDR Exclusive (8 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 8 bit values) - */ -uint8_t __LDREXB(uint8_t *addr) -{ - __ASM("ldrexb r0, [r0]"); - __ASM("bx lr"); -} - -/** - * @brief LDR Exclusive (16 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 16 bit values - */ -uint16_t __LDREXH(uint16_t *addr) -{ - __ASM("ldrexh r0, [r0]"); - __ASM("bx lr"); -} - -/** - * @brief LDR Exclusive (32 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 32 bit values - */ -uint32_t __LDREXW(uint32_t *addr) -{ - __ASM("ldrex r0, [r0]"); - __ASM("bx lr"); -} - -/** - * @brief STR Exclusive (8 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 8 bit values - */ -uint32_t __STREXB(uint8_t value, uint8_t *addr) -{ - __ASM("strexb r0, r0, [r1]"); - __ASM("bx lr"); -} - -/** - * @brief STR Exclusive (16 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 16 bit values - */ -uint32_t __STREXH(uint16_t value, uint16_t *addr) -{ - __ASM("strexh r0, r0, [r1]"); - __ASM("bx lr"); -} - -/** - * @brief STR Exclusive (32 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 32 bit values - */ -uint32_t __STREXW(uint32_t value, uint32_t *addr) -{ - __ASM("strex r0, r0, [r1]"); - __ASM("bx lr"); -} - -#pragma diag_default=Pe940 - - -#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -uint32_t __get_PSP(void) __attribute__( ( naked ) ); -uint32_t __get_PSP(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, psp\n\t" - "MOV r0, %0 \n\t" - "BX lr \n\t" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) ); -void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0\n\t" - "BX lr \n\t" : : "r" (topOfProcStack) ); -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -uint32_t __get_MSP(void) __attribute__( ( naked ) ); -uint32_t __get_MSP(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, msp\n\t" - "MOV r0, %0 \n\t" - "BX lr \n\t" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) ); -void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0\n\t" - "BX lr \n\t" : : "r" (topOfMainStack) ); -} - -/** - * @brief Return the Base Priority value - * - * @return BasePriority - * - * Return the content of the base priority register - */ -uint32_t __get_BASEPRI(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Base Priority value - * - * @param basePri BasePriority - * - * Set the base priority register - */ -void __set_BASEPRI(uint32_t value) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (value) ); -} - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -uint32_t __get_PRIMASK(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) ); -} - -/** - * @brief Return the Fault Mask value - * - * @return FaultMask - * - * Return the content of the fault mask register - */ -uint32_t __get_FAULTMASK(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Fault Mask value - * - * @param faultMask faultMask value - * - * Set the fault mask register - */ -void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) ); -} - -/** - * @brief Return the Control Register value -* -* @return Control value - * - * Return the content of the control register - */ -uint32_t __get_CONTROL(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) ); -} - - -/** - * @brief Reverse byte order in integer value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in integer value - */ -uint32_t __REV(uint32_t value) -{ - uint32_t result=0; - - __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -uint32_t __REV16(uint16_t value) -{ - uint32_t result=0; - - __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -int32_t __REVSH(int16_t value) -{ - uint32_t result=0; - - __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse bit order of value - * - * @param value value to reverse - * @return reversed value - * - * Reverse bit order of value - */ -uint32_t __RBIT(uint32_t value) -{ - uint32_t result=0; - - __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief LDR Exclusive (8 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 8 bit value - */ -uint8_t __LDREXB(uint8_t *addr) -{ - uint8_t result=0; - - __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - -/** - * @brief LDR Exclusive (16 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 16 bit values - */ -uint16_t __LDREXH(uint16_t *addr) -{ - uint16_t result=0; - - __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - -/** - * @brief LDR Exclusive (32 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 32 bit values - */ -uint32_t __LDREXW(uint32_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - -/** - * @brief STR Exclusive (8 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 8 bit values - */ -uint32_t __STREXB(uint8_t value, uint8_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); - return(result); -} - -/** - * @brief STR Exclusive (16 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 16 bit values - */ -uint32_t __STREXH(uint16_t value, uint16_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); - return(result); -} - -/** - * @brief STR Exclusive (32 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 32 bit values - */ -uint32_t __STREXW(uint32_t value, uint32_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("strex %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); - return(result); -} - - -#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/ -/* TASKING carm specific functions */ - -/* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all instrinsics, - * Including the CMSIS ones. - */ - -#endif diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/core_cm3.h b/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/core_cm3.h deleted file mode 100644 index 74fb87e..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/CMSIS/core_cm3.h +++ /dev/null @@ -1,1943 +0,0 @@ -/**************************************************************************//** - * @file core_cm3.h - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V5.1.2 - * @date 04. June 2021 - ******************************************************************************/ -/* - * Copyright (c) 2009-2021 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #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 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM3 definitions */ -#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM3_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \ - __CM3_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (3U) /*!< Cortex-M Core */ - -/** __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_FP - #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 ( __TI_ARM__ ) - #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 "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#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 __VTOR_PRESENT - #define __VTOR_PRESENT 1U - #warning "__VTOR_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_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:1; /*!< bit: 9 Reserved */ - uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ - uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit */ - uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ - 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_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ -#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ -#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 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 RESERVED1[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 defined (__CM3_REV) && (__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 */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR 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 */ -#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) -#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 */ -#endif - -/*@} 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[32U]; - 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 (0xFFFFFFFFUL /*<< 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 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 -{ - __IM 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 Register */ - __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 (0x1UL << 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 (0x1UL << 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ -#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ - -#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ -#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 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 (0x1UL << 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 (0x1UL << 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ -#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ - -#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ -#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< 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_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__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; - -#define MPU_TYPE_RALIASES 4U - -/* 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. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(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. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(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 Core 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 defined (__MPU_PRESENT) && (__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. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ - - -/** - \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 << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority 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 Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - __COMPILER_BARRIER(); - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __COMPILER_BARRIER(); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \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)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (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 Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; - /* ARM Application Note 321 states that the M3 does not require the architectural barrier */ -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __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 */ - - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv7.h" - -#endif - - -/* ########################## 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) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__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 ((int32_t)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 --git a/Example/EpaperModuleTest_CH32F103/CH32F103/Debug/debug.c b/Example/EpaperModuleTest_CH32F103/CH32F103/Debug/debug.c deleted file mode 100644 index d900ed4..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/Debug/debug.c +++ /dev/null @@ -1,181 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : debug.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for UART - * Printf , Delay functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "debug.h" - -/* Support Printf Function Definition */ -//struct __FILE -//{ -// int handle; -//}; - -//FILE __stdout; - - -static u8 p_us=0; -static u16 p_ms=0; - -/********************************************************************* - * @fn Delay_Init - * - * @brief Initializes Delay Funcation. - * - * @return none - */ -void Delay_Init(void) -{ - SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); - p_us=SystemCoreClock/8000000; - p_ms=(u16)p_us*1000; -} - -/********************************************************************* - * @fn Delay_Us - * - * @brief Microsecond Delay Time. - * - * @param n - Microsecond number. - * - * @return None - */ -void Delay_Us(u32 n) -{ - u32 i; - - SysTick->LOAD=n*p_us; - SysTick->VAL=0x00; - SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; - - do - { - i=SysTick->CTRL; - }while((i&0x01)&&!(i&(1<<16))); - - SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; - SysTick->VAL =0X00; -} - -/********************************************************************* - * @fn Delay_Ms - * - * @brief Millisecond Delay Time. - * - * @param n - Millisecond number. - * - * @return None - */ -void Delay_Ms(u16 n) -{ - u32 i; - - SysTick->LOAD=(u32)n*p_ms; - SysTick->VAL =0x00; - SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; - - do - { - i=SysTick->CTRL; - }while((i&0x01)&&!(i&(1<<16))); - - SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; - SysTick->VAL =0X00; -} - - -/********************************************************************* - * @fn fputc - * - * @brief Support Printf Function - * - * @param data - UART send Data. - * - * @return data - UART send Data. - */ -int fputc(int data, FILE *f) -{ -#if (DEBUG == DEBUG_UART1) - while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); - USART_SendData(USART1, (u8) data); -#elif (DEBUG == DEBUG_UART2) - while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); - USART_SendData(USART2, (u8) data); -#elif (DEBUG == DEBUG_UART3) - while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET); - USART_SendData(USART3, (u8) data); -#endif - - return data; -} - -/********************************************************************* - * @fn USART_Printf_Init - * - * @brief Initializes the USARTx peripheral. - * - * @param baudrate - USART communication baud rate. - * - * @return None - */ -void USART_Printf_Init(u32 baudrate) -{ - GPIO_InitTypeDef GPIO_InitStructure; - USART_InitTypeDef USART_InitStructure; - -#if (DEBUG == DEBUG_UART1) - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(GPIOA, &GPIO_InitStructure); - -#elif (DEBUG == DEBUG_UART2) - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(GPIOA, &GPIO_InitStructure); - -#elif (DEBUG == DEBUG_UART3) - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(GPIOB, &GPIO_InitStructure); - -#endif - - USART_InitStructure.USART_BaudRate = baudrate; - USART_InitStructure.USART_WordLength = USART_WordLength_8b; - USART_InitStructure.USART_StopBits = USART_StopBits_1; - USART_InitStructure.USART_Parity = USART_Parity_No; - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; - USART_InitStructure.USART_Mode = USART_Mode_Tx; - -#if (DEBUG == DEBUG_UART1) - USART_Init(USART1, &USART_InitStructure); - USART_Cmd(USART1, ENABLE); - -#elif (DEBUG == DEBUG_UART2) - USART_Init(USART2, &USART_InitStructure); - USART_Cmd(USART2, ENABLE); - -#elif (DEBUG == DEBUG_UART3) - USART_Init(USART3, &USART_InitStructure); - USART_Cmd(USART3, ENABLE); - -#endif -} - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/Debug/debug.h b/Example/EpaperModuleTest_CH32F103/CH32F103/Debug/debug.h deleted file mode 100644 index cbddd51..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/Debug/debug.h +++ /dev/null @@ -1,64 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : debug.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for UART - * Printf , Delay and Bit-Banding functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __DEBUG_H -#define __DEBUG_H - -#include "ch32f10x.h" -#include "stdio.h" - -/* GPIO Bit-Banding Macro Definition */ -#define BITBAND(adr, number) ((adr & 0xF0000000)+0x2000000+((adr &0xFFFFF)<<5)+(number<<2)) -#define MEM_ADR(adr) *((volatile unsigned long *)(adr)) -#define BIT_ADR(adr, number) MEM_ADR(BITBAND(adr, number)) - -/* GPIO Output Address Mapping */ -#define GPIOA_ODR_Adr (GPIOA_BASE+12) //0x4001080C -#define GPIOB_ODR_Adr (GPIOB_BASE+12) //0x40010C0C -#define GPIOC_ODR_Adr (GPIOC_BASE+12) //0x4001100C -#define GPIOD_ODR_Adr (GPIOD_BASE+12) //0x4001140C - -/* GPIO Input Address Mapping */ -#define GPIOA_IDR_Adr (GPIOA_BASE+8) //0x40010808 -#define GPIOB_IDR_Adr (GPIOB_BASE+8) //0x40010C08 -#define GPIOC_IDR_Adr (GPIOC_BASE+8) //0x40011008 -#define GPIOD_IDR_Adr (GPIOD_BASE+8) //0x40011408 - -/* GPIO Output */ -#define PAout(n) BIT_ADR(GPIOA_ODR_Adr,n) -#define PBout(n) BIT_ADR(GPIOB_ODR_Adr,n) -#define PCout(n) BIT_ADR(GPIOC_ODR_Adr,n) -#define PDout(n) BIT_ADR(GPIOD_ODR_Adr,n) - -/* GPIO Input */ -#define PAin(n) BIT_ADR(GPIOA_IDR_Adr,n) -#define PBin(n) BIT_ADR(GPIOB_IDR_Adr,n) -#define PCin(n) BIT_ADR(GPIOC_IDR_Adr,n) -#define PDin(n) BIT_ADR(GPIOD_IDR_Adr,n) - -/* UART Printf Definition */ -#define DEBUG_UART1 1 -#define DEBUG_UART2 2 -#define DEBUG_UART3 3 - -/* DEBUG UATR Definition */ -#define DEBUG DEBUG_UART1 -//#define DEBUG DEBUG_UART2 -//#define DEBUG DEBUG_UART3 - -void Delay_Init(void); -void Delay_Us(u32 n); -void Delay_Ms(u16 n); -void USART_Printf_Init(u32 baudrate); - -#endif /* __DEBUG_H */ - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/Startup/startup_ch32f10x.s b/Example/EpaperModuleTest_CH32F103/CH32F103/Startup/startup_ch32f10x.s deleted file mode 100644 index 012da70..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/Startup/startup_ch32f10x.s +++ /dev/null @@ -1,299 +0,0 @@ -;/********************************** (C) COPYRIGHT ******************************* -;* File Name : startup_ch32f10x.s -;* Author : WCH -;* Version : V1.0.0 -;* Date : 2019/10/15 -;* Description : CH32F10x vector table for MDK-ARM toolchain. -;* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. -;* SPDX-License-Identifier: Apache-2.0 -;*******************************************************************************/ - -;/******************************************************************************* -; Amount of memory (in bytes) allocated for Stack -; Tailor this value to your application needs -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; -;*******************************************************************************/ -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN=3 -Stack_Mem SPACE Stack_Size -__initial_sp - -;/******************************************************************************* -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; -;*******************************************************************************/ -Heap_Size EQU 0x00000400 - - AREA HEAP, NOINIT, READWRITE, ALIGN=3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - PRESERVE8 - THUMB - -;/******************************************************************************* -; Vector Table Mapped to Address 0 at Reset -;*******************************************************************************/ - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - -;/******************************************************************************* -; External Interrupts -;*******************************************************************************/ - DCD WWDG_IRQHandler ; Window Watchdog - DCD PVD_IRQHandler ; PVD through EXTI Line detect - DCD TAMPER_IRQHandler ; TAMPER - DCD RTC_IRQHandler ; RTC - DCD FLASH_IRQHandler ; FLASH - DCD RCC_IRQHandler ; RCC - DCD EXTI0_IRQHandler ; EXTI Line 0 - DCD EXTI1_IRQHandler ; EXTI Line 1 - DCD EXTI2_IRQHandler ; EXTI Line 2 - DCD EXTI3_IRQHandler ; EXTI Line 3 - DCD EXTI4_IRQHandler ; EXTI Line 4 - DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 - DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 - DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 - DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 - DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 - DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 - DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 - DCD ADC1_2_IRQHandler ; ADC1_2 - DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX - DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; CAN1 RX1 - DCD CAN1_SCE_IRQHandler ; CAN1 SCE - DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 - DCD TIM1_BRK_IRQHandler ; TIM1 Break - DCD TIM1_UP_IRQHandler ; TIM1 Update - DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation - DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare - DCD TIM2_IRQHandler ; TIM2 - DCD TIM3_IRQHandler ; TIM3 - DCD TIM4_IRQHandler ; TIM4 - DCD I2C1_EV_IRQHandler ; I2C1 Event - DCD I2C1_ER_IRQHandler ; I2C1 Error - DCD I2C2_EV_IRQHandler ; I2C2 Event - DCD I2C2_ER_IRQHandler ; I2C2 Error - DCD SPI1_IRQHandler ; SPI1 - DCD SPI2_IRQHandler ; SPI2 - DCD USART1_IRQHandler ; USART1 - DCD USART2_IRQHandler ; USART2 - DCD USART3_IRQHandler ; USART3 - DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 - DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line - DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend - DCD USBHD_IRQHandler ; USB host and device -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY -;/******************************************************************************* -; Reset handler -;*******************************************************************************/ -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT __main - IMPORT SystemInit - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -;/******************************************************************************* -; Dummy Exception Handlers (infinite loops which can be modified) -;*******************************************************************************/ -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP -HardFault_Handler\ - PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP -MemManage_Handler\ - PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP -BusFault_Handler\ - PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP -UsageFault_Handler\ - PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP -DebugMon_Handler\ - PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP -PendSV_Handler PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP -SysTick_Handler PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC - - EXPORT WWDG_IRQHandler [WEAK] - EXPORT PVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FLASH_IRQHandler [WEAK] - EXPORT RCC_IRQHandler [WEAK] - EXPORT EXTI0_IRQHandler [WEAK] - EXPORT EXTI1_IRQHandler [WEAK] - EXPORT EXTI2_IRQHandler [WEAK] - EXPORT EXTI3_IRQHandler [WEAK] - EXPORT EXTI4_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_IRQHandler [WEAK] - EXPORT DMA1_Channel4_IRQHandler [WEAK] - EXPORT DMA1_Channel5_IRQHandler [WEAK] - EXPORT DMA1_Channel6_IRQHandler [WEAK] - EXPORT DMA1_Channel7_IRQHandler [WEAK] - EXPORT ADC1_2_IRQHandler [WEAK] - EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] - EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] - EXPORT CAN1_RX1_IRQHandler [WEAK] - EXPORT CAN1_SCE_IRQHandler [WEAK] - EXPORT EXTI9_5_IRQHandler [WEAK] - EXPORT TIM1_BRK_IRQHandler [WEAK] - EXPORT TIM1_UP_IRQHandler [WEAK] - EXPORT TIM1_TRG_COM_IRQHandler [WEAK] - EXPORT TIM1_CC_IRQHandler [WEAK] - EXPORT TIM2_IRQHandler [WEAK] - EXPORT TIM3_IRQHandler [WEAK] - EXPORT TIM4_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT I2C2_EV_IRQHandler [WEAK] - EXPORT I2C2_ER_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT SPI2_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT USART3_IRQHandler [WEAK] - EXPORT EXTI15_10_IRQHandler [WEAK] - EXPORT RTCAlarm_IRQHandler [WEAK] - EXPORT USBWakeUp_IRQHandler [WEAK] - EXPORT USBHD_IRQHandler [WEAK] - -WWDG_IRQHandler -PVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FLASH_IRQHandler -RCC_IRQHandler -EXTI0_IRQHandler -EXTI1_IRQHandler -EXTI2_IRQHandler -EXTI3_IRQHandler -EXTI4_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_IRQHandler -DMA1_Channel4_IRQHandler -DMA1_Channel5_IRQHandler -DMA1_Channel6_IRQHandler -DMA1_Channel7_IRQHandler -ADC1_2_IRQHandler -USB_HP_CAN1_TX_IRQHandler -USB_LP_CAN1_RX0_IRQHandler -CAN1_RX1_IRQHandler -CAN1_SCE_IRQHandler -EXTI9_5_IRQHandler -TIM1_BRK_IRQHandler -TIM1_UP_IRQHandler -TIM1_TRG_COM_IRQHandler -TIM1_CC_IRQHandler -TIM2_IRQHandler -TIM3_IRQHandler -TIM4_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -I2C2_EV_IRQHandler -I2C2_ER_IRQHandler -SPI1_IRQHandler -SPI2_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -USART3_IRQHandler -EXTI15_10_IRQHandler -RTCAlarm_IRQHandler -USBWakeUp_IRQHandler -USBHD_IRQHandler - - B . - - ENDP - - ALIGN - -;/******************************************************************************* -; User Stack and Heap initialization -;*******************************************************************************/ - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap - - LDR R0, = Heap_Mem - LDR R1, =(Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - - ALIGN - - ENDIF - - END - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x.h deleted file mode 100644 index 2da6fcd..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x.h +++ /dev/null @@ -1,5687 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : CMSIS Cortex-M3 Device Peripheral Access Layer Header File. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_H -#define __CH32F10x_H - -#ifdef __cplusplus - extern "C" { -#endif - -#define __MPU_PRESENT 0 /* Other CH32 devices does not provide an MPU */ -#define __NVIC_PRIO_BITS 4 /* CH32 uses 4 Bits for the Priority Levels */ -#define __Vendor_SysTickConfig 0 /* Set to 1 if different SysTick Config is used */ - -#define HSE_VALUE ((uint32_t)8000000) /* Value of the External oscillator in Hz */ - -/* In the following line adjust the External High Speed oscillator (HSE) Startup Timeout value */ -#define HSE_STARTUP_TIMEOUT ((uint16_t)0x500) /* Time out for HSE start up */ - -#define HSI_VALUE ((uint32_t)8000000) /* Value of the Internal oscillator in Hz*/ - -/* Interrupt Number Definition, according to the selected device */ -typedef enum IRQn -{ -/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ - NonMaskableInt_IRQn = -14, /* 2 Non Maskable 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 */ - -/****** CH32 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 */ - RTCAlarm_IRQn = 41, /* RTC Alarm through EXTI Line Interrupt */ - USBWakeUp_IRQn = 42, /* USB Device WakeUp from suspend through EXTI Line Interrupt */ - USBHD_IRQn = 43 /* USB Host and Device global Interrupt */ - -} IRQn_Type; - -#include -#include "core_cm3.h" -#include "system_ch32f10x.h" - -/* Standard Peripheral Library old types (maintained for legacy purpose) */ - -typedef __I uint32_t vuc32; /* Read Only */ -typedef __I uint16_t vuc16; /* Read Only */ -typedef __I uint8_t vuc8; /* Read Only */ - -typedef const uint32_t uc32; /* Read Only */ -typedef const uint16_t uc16; /* Read Only */ -typedef const uint8_t uc8; /* Read Only */ - -typedef __I int32_t vsc32; /* Read Only */ -typedef __I int16_t vsc16; /* Read Only */ -typedef __I int8_t vsc8; /* Read Only */ - -typedef const int32_t sc32; /* Read Only */ -typedef const int16_t sc16; /* Read Only */ -typedef const int8_t sc8; /* Read Only */ - -typedef __IO uint32_t vu32; -typedef __IO uint16_t vu16; -typedef __IO uint8_t vu8; - -typedef uint32_t u32; -typedef uint16_t u16; -typedef uint8_t u8; - -typedef __IO int32_t vs32; -typedef __IO int16_t vs16; -typedef __IO int8_t vs8; - -typedef int32_t s32; -typedef int16_t s16; -typedef int8_t s8; - -typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; - -typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; - -typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; - -/* Standard Peripheral Library old definitions (maintained for legacy purpose) */ -#define HSI_Value HSI_VALUE -#define HSE_Value HSE_VALUE -#define HSEStartUp_TimeOut HSE_STARTUP_TIMEOUT - -/* Analog to Digital Converter */ -typedef struct -{ - __IO uint32_t STATR; - __IO uint32_t CTLR1; - __IO uint32_t CTLR2; - __IO uint32_t SAMPTR1; - __IO uint32_t SAMPTR2; - __IO uint32_t IOFR1; - __IO uint32_t IOFR2; - __IO uint32_t IOFR3; - __IO uint32_t IOFR4; - __IO uint32_t WDHTR; - __IO uint32_t WDLTR; - __IO uint32_t RSQR1; - __IO uint32_t RSQR2; - __IO uint32_t RSQR3; - __IO uint32_t ISQR; - __IO uint32_t IDATAR1; - __IO uint32_t IDATAR2; - __IO uint32_t IDATAR3; - __IO uint32_t IDATAR4; - __IO uint32_t RDATAR; -} ADC_TypeDef; - -/* Backup Registers */ -typedef struct -{ - uint32_t RESERVED0; - __IO uint16_t DATAR1; - uint16_t RESERVED1; - __IO uint16_t DATAR2; - uint16_t RESERVED2; - __IO uint16_t DATAR3; - uint16_t RESERVED3; - __IO uint16_t DATAR4; - uint16_t RESERVED4; - __IO uint16_t DATAR5; - uint16_t RESERVED5; - __IO uint16_t DATAR6; - uint16_t RESERVED6; - __IO uint16_t DATAR7; - uint16_t RESERVED7; - __IO uint16_t DATAR8; - uint16_t RESERVED8; - __IO uint16_t DATAR9; - uint16_t RESERVED9; - __IO uint16_t DATAR10; - uint16_t RESERVED10; - __IO uint16_t OCTLR; - uint16_t RESERVED11; - __IO uint16_t TPCTLR; - uint16_t RESERVED12; - __IO uint16_t TPCSR; - uint16_t RESERVED13[5]; - __IO uint16_t DATAR11; - uint16_t RESERVED14; - __IO uint16_t DATAR12; - uint16_t RESERVED15; - __IO uint16_t DATAR13; - uint16_t RESERVED16; - __IO uint16_t DATAR14; - uint16_t RESERVED17; - __IO uint16_t DATAR15; - uint16_t RESERVED18; - __IO uint16_t DATAR16; - uint16_t RESERVED19; - __IO uint16_t DATAR17; - uint16_t RESERVED20; - __IO uint16_t DATAR18; - uint16_t RESERVED21; - __IO uint16_t DATAR19; - uint16_t RESERVED22; - __IO uint16_t DATAR20; - uint16_t RESERVED23; - __IO uint16_t DATAR21; - uint16_t RESERVED24; - __IO uint16_t DATAR22; - uint16_t RESERVED25; - __IO uint16_t DATAR23; - uint16_t RESERVED26; - __IO uint16_t DATAR24; - uint16_t RESERVED27; - __IO uint16_t DATAR25; - uint16_t RESERVED28; - __IO uint16_t DATAR26; - uint16_t RESERVED29; - __IO uint16_t DATAR27; - uint16_t RESERVED30; - __IO uint16_t DATAR28; - uint16_t RESERVED31; - __IO uint16_t DATAR29; - uint16_t RESERVED32; - __IO uint16_t DATAR30; - uint16_t RESERVED33; - __IO uint16_t DATAR31; - uint16_t RESERVED34; - __IO uint16_t DATAR32; - uint16_t RESERVED35; - __IO uint16_t DATAR33; - uint16_t RESERVED36; - __IO uint16_t DATAR34; - uint16_t RESERVED37; - __IO uint16_t DATAR35; - uint16_t RESERVED38; - __IO uint16_t DATAR36; - uint16_t RESERVED39; - __IO uint16_t DATAR37; - uint16_t RESERVED40; - __IO uint16_t DATAR38; - uint16_t RESERVED41; - __IO uint16_t DATAR39; - uint16_t RESERVED42; - __IO uint16_t DATAR40; - uint16_t RESERVED43; - __IO uint16_t DATAR41; - uint16_t RESERVED44; - __IO uint16_t DATAR42; - uint16_t RESERVED45; -} BKP_TypeDef; - -/* Controller Area Network TxMailBox */ -typedef struct -{ - __IO uint32_t TXMIR; - __IO uint32_t TXMDTR; - __IO uint32_t TXMDLR; - __IO uint32_t TXMDHR; -} CAN_TxMailBox_TypeDef; - -/* Controller Area Network FIFOMailBox */ -typedef struct -{ - __IO uint32_t RXMIR; - __IO uint32_t RXMDTR; - __IO uint32_t RXMDLR; - __IO uint32_t RXMDHR; -} CAN_FIFOMailBox_TypeDef; - -/* Controller Area Network FilterRegister */ -typedef struct -{ - __IO uint32_t FR1; - __IO uint32_t FR2; -} CAN_FilterRegister_TypeDef; - -/* Controller Area Network */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t STATR; - __IO uint32_t TSTATR; - __IO uint32_t RFIFO0; - __IO uint32_t RFIFO1; - __IO uint32_t INTENR; - __IO uint32_t ERRSR; - __IO uint32_t BTIMR; - uint32_t RESERVED0[88]; - CAN_TxMailBox_TypeDef sTxMailBox[3]; - CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; - uint32_t RESERVED1[12]; - __IO uint32_t FCTLR; - __IO uint32_t FMCFGR; - uint32_t RESERVED2; - __IO uint32_t FSCFGR; - uint32_t RESERVED3; - __IO uint32_t FAFIFOR; - uint32_t RESERVED4; - __IO uint32_t FWR; - uint32_t RESERVED5[8]; - CAN_FilterRegister_TypeDef sFilterRegister[14]; -} CAN_TypeDef; - -/* CRC Calculation Unit */ -typedef struct -{ - __IO uint32_t DATAR; - __IO uint8_t IDATAR; - uint8_t RESERVED0; - uint16_t RESERVED1; - __IO uint32_t CTLR; -} CRC_TypeDef; - -/* Digital to Analog Converter */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t SWTR; - __IO uint32_t R12BDHR1; - __IO uint32_t L12BDHR1; - __IO uint32_t R8BDHR1; - __IO uint32_t R12BDHR2; - __IO uint32_t L12BDHR2; - __IO uint32_t R8BDHR2; - __IO uint32_t RD12BDHR; - __IO uint32_t LD12BDHR; - __IO uint32_t RD8BDHR; - __IO uint32_t DOR1; - __IO uint32_t DOR2; -} DAC_TypeDef; - -/* Debug MCU */ -typedef struct -{ - __IO uint32_t IDCODE; - __IO uint32_t CFGR; -}DBGMCU_TypeDef; - -/* DMA Controller */ -typedef struct -{ - __IO uint32_t CFGR; - __IO uint32_t CNTR; - __IO uint32_t PADDR; - __IO uint32_t MADDR; -} DMA_Channel_TypeDef; - -typedef struct -{ - __IO uint32_t INTFR; - __IO uint32_t INTFCR; -} DMA_TypeDef; - -/* External Interrupt/Event Controller */ -typedef struct -{ - __IO uint32_t INTENR; - __IO uint32_t EVENR; - __IO uint32_t RTENR; - __IO uint32_t FTENR; - __IO uint32_t SWIEVR; - __IO uint32_t INTFR; -} EXTI_TypeDef; - -/* FLASH Registers */ -typedef struct -{ - __IO uint32_t ACTLR; - __IO uint32_t KEYR; - __IO uint32_t OBKEYR; - __IO uint32_t STATR; - __IO uint32_t CTLR; - __IO uint32_t ADDR; - __IO uint32_t RESERVED; - __IO uint32_t OBR; - __IO uint32_t WPR; - __IO uint32_t MODEKEYR; -} FLASH_TypeDef; - - -/* Option Bytes Registers */ -typedef struct -{ - __IO uint16_t RDPR; - __IO uint16_t USER; - __IO uint16_t Data0; - __IO uint16_t Data1; - __IO uint16_t WRPR0; - __IO uint16_t WRPR1; - __IO uint16_t WRPR2; - __IO uint16_t WRPR3; -} OB_TypeDef; - -/* General Purpose I/O */ -typedef struct -{ - __IO uint32_t CFGLR; - __IO uint32_t CFGHR; - __IO uint32_t INDR; - __IO uint32_t OUTDR; - __IO uint32_t BSHR; - __IO uint32_t BCR; - __IO uint32_t LCKR; -} GPIO_TypeDef; - -/* Alternate Function I/O */ -typedef struct -{ - __IO uint32_t ECR; - __IO uint32_t PCFR1; - __IO uint32_t EXTICR[4]; - uint32_t RESERVED0; - __IO uint32_t PCFR2; -} AFIO_TypeDef; - -/* Inter Integrated Circuit Interface */ -typedef struct -{ - __IO uint16_t CTLR1; - uint16_t RESERVED0; - __IO uint16_t CTLR2; - uint16_t RESERVED1; - __IO uint16_t OADDR1; - uint16_t RESERVED2; - __IO uint16_t OADDR2; - uint16_t RESERVED3; - __IO uint16_t DATAR; - uint16_t RESERVED4; - __IO uint16_t STAR1; - uint16_t RESERVED5; - __IO uint16_t STAR2; - uint16_t RESERVED6; - __IO uint16_t CKCFGR; - uint16_t RESERVED7; - __IO uint16_t RTR; - uint16_t RESERVED8; -} I2C_TypeDef; - -/* Independent WatchDog */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t PSCR; - __IO uint32_t RLDR; - __IO uint32_t STATR; -} IWDG_TypeDef; - -/* Power Control */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t CSR; -} PWR_TypeDef; - -/* Reset and Clock Control */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t CFGR0; - __IO uint32_t INTR; - __IO uint32_t APB2PRSTR; - __IO uint32_t APB1PRSTR; - __IO uint32_t AHBPCENR; - __IO uint32_t APB2PCENR; - __IO uint32_t APB1PCENR; - __IO uint32_t BDCTLR; - __IO uint32_t RSTSCKR; -} RCC_TypeDef; - -/* Real-Time Clock */ -typedef struct -{ - __IO uint16_t CTLRH; - uint16_t RESERVED0; - __IO uint16_t CTLRL; - uint16_t RESERVED1; - __IO uint16_t PSCRH; - uint16_t RESERVED2; - __IO uint16_t PSCRL; - uint16_t RESERVED3; - __IO uint16_t DIVH; - uint16_t RESERVED4; - __IO uint16_t DIVL; - uint16_t RESERVED5; - __IO uint16_t CNTH; - uint16_t RESERVED6; - __IO uint16_t CNTL; - uint16_t RESERVED7; - __IO uint16_t ALRMH; - uint16_t RESERVED8; - __IO uint16_t ALRML; - uint16_t RESERVED9; -} RTC_TypeDef; - -/* Serial Peripheral Interface */ -typedef struct -{ - __IO uint16_t CTLR1; - uint16_t RESERVED0; - __IO uint16_t CTLR2; - uint16_t RESERVED1; - __IO uint16_t STATR; - uint16_t RESERVED2; - __IO uint16_t DATAR; - uint16_t RESERVED3; - __IO uint16_t CRCR; - uint16_t RESERVED4; - __IO uint16_t RCRCR; - uint16_t RESERVED5; - __IO uint16_t TCRCR; - uint16_t RESERVED6; - __IO uint16_t I2SCFGR; - uint16_t RESERVED7; - __IO uint16_t I2SPR; - uint16_t RESERVED8; -} SPI_TypeDef; - -/* TIM */ -typedef struct -{ - __IO uint16_t CTLR1; - uint16_t RESERVED0; - __IO uint16_t CTLR2; - uint16_t RESERVED1; - __IO uint16_t SMCFGR; - uint16_t RESERVED2; - __IO uint16_t DMAINTENR; - uint16_t RESERVED3; - __IO uint16_t INTFR; - uint16_t RESERVED4; - __IO uint16_t SWEVGR; - uint16_t RESERVED5; - __IO uint16_t CHCTLR1; - uint16_t RESERVED6; - __IO uint16_t CHCTLR2; - uint16_t RESERVED7; - __IO uint16_t CCER; - uint16_t RESERVED8; - __IO uint16_t CNT; - uint16_t RESERVED9; - __IO uint16_t PSC; - uint16_t RESERVED10; - __IO uint16_t ATRLR; - uint16_t RESERVED11; - __IO uint16_t RPTCR; - uint16_t RESERVED12; - __IO uint16_t CH1CVR; - uint16_t RESERVED13; - __IO uint16_t CH2CVR; - uint16_t RESERVED14; - __IO uint16_t CH3CVR; - uint16_t RESERVED15; - __IO uint16_t CH4CVR; - uint16_t RESERVED16; - __IO uint16_t BDTR; - uint16_t RESERVED17; - __IO uint16_t DMACFGR; - uint16_t RESERVED18; - __IO uint16_t DMAADR; - uint16_t RESERVED19; -} TIM_TypeDef; - -/* Universal Synchronous Asynchronous Receiver Transmitter */ -typedef struct -{ - __IO uint16_t STATR; - uint16_t RESERVED0; - __IO uint16_t DATAR; - uint16_t RESERVED1; - __IO uint16_t BRR; - uint16_t RESERVED2; - __IO uint16_t CTLR1; - uint16_t RESERVED3; - __IO uint16_t CTLR2; - uint16_t RESERVED4; - __IO uint16_t CTLR3; - uint16_t RESERVED5; - __IO uint16_t GPR; - uint16_t RESERVED6; -} USART_TypeDef; - -/* Window WatchDog */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t CFGR; - __IO uint32_t STATR; -} WWDG_TypeDef; - -/* Enhanced Registers */ -typedef struct -{ - __IO uint32_t EXTEN_CTR; -} EXTEN_TypeDef; - - -/* Peripheral memory map */ -#define FLASH_BASE ((uint32_t)0x08000000) /* FLASH base address in the alias region */ -#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 */ - - -#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 TIM5_BASE (APB1PERIPH_BASE + 0x0C00) -#define TIM6_BASE (APB1PERIPH_BASE + 0x1000) -#define TIM7_BASE (APB1PERIPH_BASE + 0x1400) -#define TIM12_BASE (APB1PERIPH_BASE + 0x1800) -#define TIM13_BASE (APB1PERIPH_BASE + 0x1C00) -#define TIM14_BASE (APB1PERIPH_BASE + 0x2000) -#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 SPI3_BASE (APB1PERIPH_BASE + 0x3C00) -#define USART2_BASE (APB1PERIPH_BASE + 0x4400) -#define USART3_BASE (APB1PERIPH_BASE + 0x4800) -#define UART4_BASE (APB1PERIPH_BASE + 0x4C00) -#define UART5_BASE (APB1PERIPH_BASE + 0x5000) -#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) -#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) -#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) -#define CAN2_BASE (APB1PERIPH_BASE + 0x6800) -#define BKP_BASE (APB1PERIPH_BASE + 0x6C00) -#define PWR_BASE (APB1PERIPH_BASE + 0x7000) -#define DAC_BASE (APB1PERIPH_BASE + 0x7400) - -#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 GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) -#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) -#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 TIM8_BASE (APB2PERIPH_BASE + 0x3400) -#define USART1_BASE (APB2PERIPH_BASE + 0x3800) -#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00) -#define TIM15_BASE (APB2PERIPH_BASE + 0x4000) -#define TIM16_BASE (APB2PERIPH_BASE + 0x4400) -#define TIM17_BASE (APB2PERIPH_BASE + 0x4800) -#define TIM9_BASE (APB2PERIPH_BASE + 0x4C00) -#define TIM10_BASE (APB2PERIPH_BASE + 0x5000) -#define TIM11_BASE (APB2PERIPH_BASE + 0x5400) - -#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 DMA2_BASE (AHBPERIPH_BASE + 0x0400) -#define DMA2_Channel1_BASE (AHBPERIPH_BASE + 0x0408) -#define DMA2_Channel2_BASE (AHBPERIPH_BASE + 0x041C) -#define DMA2_Channel3_BASE (AHBPERIPH_BASE + 0x0430) -#define DMA2_Channel4_BASE (AHBPERIPH_BASE + 0x0444) -#define DMA2_Channel5_BASE (AHBPERIPH_BASE + 0x0458) -#define RCC_BASE (AHBPERIPH_BASE + 0x1000) -#define CRC_BASE (AHBPERIPH_BASE + 0x3000) - -#define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000) /* Flash registers base address */ -#define OB_BASE ((uint32_t)0x1FFFF800) /* Flash Option Bytes base address */ - -#define EXTEN_BASE ((uint32_t)0x40023800) - -#define DBGMCU_BASE ((uint32_t)0xE0042000) /* Debug MCU registers base address */ - -/* Peripheral declaration */ -#define TIM2 ((TIM_TypeDef *) TIM2_BASE) -#define TIM3 ((TIM_TypeDef *) TIM3_BASE) -#define TIM4 ((TIM_TypeDef *) TIM4_BASE) -#define TIM5 ((TIM_TypeDef *) TIM5_BASE) -#define TIM6 ((TIM_TypeDef *) TIM6_BASE) -#define TIM7 ((TIM_TypeDef *) TIM7_BASE) -#define TIM12 ((TIM_TypeDef *) TIM12_BASE) -#define TIM13 ((TIM_TypeDef *) TIM13_BASE) -#define TIM14 ((TIM_TypeDef *) TIM14_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 SPI3 ((SPI_TypeDef *) SPI3_BASE) -#define USART2 ((USART_TypeDef *) USART2_BASE) -#define USART3 ((USART_TypeDef *) USART3_BASE) -#define UART4 ((USART_TypeDef *) UART4_BASE) -#define UART5 ((USART_TypeDef *) UART5_BASE) -#define I2C1 ((I2C_TypeDef *) I2C1_BASE) -#define I2C2 ((I2C_TypeDef *) I2C2_BASE) -#define CAN1 ((CAN_TypeDef *) CAN1_BASE) -#define CAN2 ((CAN_TypeDef *) CAN2_BASE) -#define BKP ((BKP_TypeDef *) BKP_BASE) -#define PWR ((PWR_TypeDef *) PWR_BASE) -#define DAC ((DAC_TypeDef *) DAC_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 GPIOF ((GPIO_TypeDef *) GPIOF_BASE) -#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE) -#define ADC1 ((ADC_TypeDef *) ADC1_BASE) -#define ADC2 ((ADC_TypeDef *) ADC2_BASE) -#define TIM1 ((TIM_TypeDef *) TIM1_BASE) -#define SPI1 ((SPI_TypeDef *) SPI1_BASE) -#define TIM8 ((TIM_TypeDef *) TIM8_BASE) -#define USART1 ((USART_TypeDef *) USART1_BASE) -#define ADC3 ((ADC_TypeDef *) ADC3_BASE) -#define TIM15 ((TIM_TypeDef *) TIM15_BASE) -#define TIM16 ((TIM_TypeDef *) TIM16_BASE) -#define TIM17 ((TIM_TypeDef *) TIM17_BASE) -#define TIM9 ((TIM_TypeDef *) TIM9_BASE) -#define TIM10 ((TIM_TypeDef *) TIM10_BASE) -#define TIM11 ((TIM_TypeDef *) TIM11_BASE) -#define DMA1 ((DMA_TypeDef *) DMA1_BASE) -#define DMA2 ((DMA_TypeDef *) DMA2_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 DMA2_Channel1 ((DMA_Channel_TypeDef *) DMA2_Channel1_BASE) -#define DMA2_Channel2 ((DMA_Channel_TypeDef *) DMA2_Channel2_BASE) -#define DMA2_Channel3 ((DMA_Channel_TypeDef *) DMA2_Channel3_BASE) -#define DMA2_Channel4 ((DMA_Channel_TypeDef *) DMA2_Channel4_BASE) -#define DMA2_Channel5 ((DMA_Channel_TypeDef *) DMA2_Channel5_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 EXTEN ((EXTEN_TypeDef *) EXTEN_BASE) -#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) - - -/******************************************************************************/ -/* Peripheral Registers Bits Definition */ -/******************************************************************************/ - -/******************************************************************************/ -/* Analog to Digital Converter */ -/******************************************************************************/ - -/******************** Bit definition for ADC_STATR register ********************/ -#define ADC_AWD ((uint8_t)0x01) /* Analog watchdog flag */ -#define ADC_EOC ((uint8_t)0x02) /* End of conversion */ -#define ADC_JEOC ((uint8_t)0x04) /* Injected channel end of conversion */ -#define ADC_JSTRT ((uint8_t)0x08) /* Injected channel Start flag */ -#define ADC_STRT ((uint8_t)0x10) /* Regular channel Start flag */ - -/******************* Bit definition for ADC_CTLR1 register ********************/ -#define ADC_AWDCH ((uint32_t)0x0000001F) /* AWDCH[4:0] bits (Analog watchdog channel select bits) */ -#define ADC_AWDCH_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_AWDCH_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_AWDCH_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_AWDCH_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_AWDCH_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_EOCIE ((uint32_t)0x00000020) /* Interrupt enable for EOC */ -#define ADC_AWDIE ((uint32_t)0x00000040) /* Analog Watchdog interrupt enable */ -#define ADC_JEOCIE ((uint32_t)0x00000080) /* Interrupt enable for injected channels */ -#define ADC_SCAN ((uint32_t)0x00000100) /* Scan mode */ -#define ADC_AWDSGL ((uint32_t)0x00000200) /* Enable the watchdog on a single channel in scan mode */ -#define ADC_JAUTO ((uint32_t)0x00000400) /* Automatic injected group conversion */ -#define ADC_DISCEN ((uint32_t)0x00000800) /* Discontinuous mode on regular channels */ -#define ADC_JDISCEN ((uint32_t)0x00001000) /* Discontinuous mode on injected channels */ - -#define ADC_DISCNUM ((uint32_t)0x0000E000) /* DISCNUM[2:0] bits (Discontinuous mode channel count) */ -#define ADC_DISCNUM_0 ((uint32_t)0x00002000) /* Bit 0 */ -#define ADC_DISCNUM_1 ((uint32_t)0x00004000) /* Bit 1 */ -#define ADC_DISCNUM_2 ((uint32_t)0x00008000) /* Bit 2 */ - -#define ADC_DUALMOD ((uint32_t)0x000F0000) /* DUALMOD[3:0] bits (Dual mode selection) */ -#define ADC_DUALMOD_0 ((uint32_t)0x00010000) /* Bit 0 */ -#define ADC_DUALMOD_1 ((uint32_t)0x00020000) /* Bit 1 */ -#define ADC_DUALMOD_2 ((uint32_t)0x00040000) /* Bit 2 */ -#define ADC_DUALMOD_3 ((uint32_t)0x00080000) /* Bit 3 */ - -#define ADC_JAWDEN ((uint32_t)0x00400000) /* Analog watchdog enable on injected channels */ -#define ADC_AWDEN ((uint32_t)0x00800000) /* Analog watchdog enable on regular channels */ - -/******************* Bit definition for ADC_CTLR2 register ********************/ -#define ADC_ADON ((uint32_t)0x00000001) /* A/D Converter ON / OFF */ -#define ADC_CONT ((uint32_t)0x00000002) /* Continuous Conversion */ -#define ADC_CAL ((uint32_t)0x00000004) /* A/D Calibration */ -#define ADC_RSTCAL ((uint32_t)0x00000008) /* Reset Calibration */ -#define ADC_DMA ((uint32_t)0x00000100) /* Direct Memory access mode */ -#define ADC_ALIGN ((uint32_t)0x00000800) /* Data Alignment */ - -#define ADC_JEXTSEL ((uint32_t)0x00007000) /* JEXTSEL[2:0] bits (External event select for injected group) */ -#define ADC_JEXTSEL_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define ADC_JEXTSEL_1 ((uint32_t)0x00002000) /* Bit 1 */ -#define ADC_JEXTSEL_2 ((uint32_t)0x00004000) /* Bit 2 */ - -#define ADC_JEXTTRIG ((uint32_t)0x00008000) /* External Trigger Conversion mode for injected channels */ - -#define ADC_EXTSEL ((uint32_t)0x000E0000) /* EXTSEL[2:0] bits (External Event Select for regular group) */ -#define ADC_EXTSEL_0 ((uint32_t)0x00020000) /* Bit 0 */ -#define ADC_EXTSEL_1 ((uint32_t)0x00040000) /* Bit 1 */ -#define ADC_EXTSEL_2 ((uint32_t)0x00080000) /* Bit 2 */ - -#define ADC_EXTTRIG ((uint32_t)0x00100000) /* External Trigger Conversion mode for regular channels */ -#define ADC_JSWSTART ((uint32_t)0x00200000) /* Start Conversion of injected channels */ -#define ADC_SWSTART ((uint32_t)0x00400000) /* Start Conversion of regular channels */ -#define ADC_TSVREFE ((uint32_t)0x00800000) /* Temperature Sensor and VREFINT Enable */ - -/****************** Bit definition for ADC_SAMPTR1 register *******************/ -#define ADC_SMP10 ((uint32_t)0x00000007) /* SMP10[2:0] bits (Channel 10 Sample time selection) */ -#define ADC_SMP10_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SMP10_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SMP10_2 ((uint32_t)0x00000004) /* Bit 2 */ - -#define ADC_SMP11 ((uint32_t)0x00000038) /* SMP11[2:0] bits (Channel 11 Sample time selection) */ -#define ADC_SMP11_0 ((uint32_t)0x00000008) /* Bit 0 */ -#define ADC_SMP11_1 ((uint32_t)0x00000010) /* Bit 1 */ -#define ADC_SMP11_2 ((uint32_t)0x00000020) /* Bit 2 */ - -#define ADC_SMP12 ((uint32_t)0x000001C0) /* SMP12[2:0] bits (Channel 12 Sample time selection) */ -#define ADC_SMP12_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define ADC_SMP12_1 ((uint32_t)0x00000080) /* Bit 1 */ -#define ADC_SMP12_2 ((uint32_t)0x00000100) /* Bit 2 */ - -#define ADC_SMP13 ((uint32_t)0x00000E00) /* SMP13[2:0] bits (Channel 13 Sample time selection) */ -#define ADC_SMP13_0 ((uint32_t)0x00000200) /* Bit 0 */ -#define ADC_SMP13_1 ((uint32_t)0x00000400) /* Bit 1 */ -#define ADC_SMP13_2 ((uint32_t)0x00000800) /* Bit 2 */ - -#define ADC_SMP14 ((uint32_t)0x00007000) /* SMP14[2:0] bits (Channel 14 Sample time selection) */ -#define ADC_SMP14_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define ADC_SMP14_1 ((uint32_t)0x00002000) /* Bit 1 */ -#define ADC_SMP14_2 ((uint32_t)0x00004000) /* Bit 2 */ - -#define ADC_SMP15 ((uint32_t)0x00038000) /* SMP15[2:0] bits (Channel 15 Sample time selection) */ -#define ADC_SMP15_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SMP15_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SMP15_2 ((uint32_t)0x00020000) /* Bit 2 */ - -#define ADC_SMP16 ((uint32_t)0x001C0000) /* SMP16[2:0] bits (Channel 16 Sample time selection) */ -#define ADC_SMP16_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define ADC_SMP16_1 ((uint32_t)0x00080000) /* Bit 1 */ -#define ADC_SMP16_2 ((uint32_t)0x00100000) /* Bit 2 */ - -#define ADC_SMP17 ((uint32_t)0x00E00000) /* SMP17[2:0] bits (Channel 17 Sample time selection) */ -#define ADC_SMP17_0 ((uint32_t)0x00200000) /* Bit 0 */ -#define ADC_SMP17_1 ((uint32_t)0x00400000) /* Bit 1 */ -#define ADC_SMP17_2 ((uint32_t)0x00800000) /* Bit 2 */ - -/****************** Bit definition for ADC_SAMPTR2 register *******************/ -#define ADC_SMP0 ((uint32_t)0x00000007) /* SMP0[2:0] bits (Channel 0 Sample time selection) */ -#define ADC_SMP0_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SMP0_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SMP0_2 ((uint32_t)0x00000004) /* Bit 2 */ - -#define ADC_SMP1 ((uint32_t)0x00000038) /* SMP1[2:0] bits (Channel 1 Sample time selection) */ -#define ADC_SMP1_0 ((uint32_t)0x00000008) /* Bit 0 */ -#define ADC_SMP1_1 ((uint32_t)0x00000010) /* Bit 1 */ -#define ADC_SMP1_2 ((uint32_t)0x00000020) /* Bit 2 */ - -#define ADC_SMP2 ((uint32_t)0x000001C0) /* SMP2[2:0] bits (Channel 2 Sample time selection) */ -#define ADC_SMP2_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define ADC_SMP2_1 ((uint32_t)0x00000080) /* Bit 1 */ -#define ADC_SMP2_2 ((uint32_t)0x00000100) /* Bit 2 */ - -#define ADC_SMP3 ((uint32_t)0x00000E00) /* SMP3[2:0] bits (Channel 3 Sample time selection) */ -#define ADC_SMP3_0 ((uint32_t)0x00000200) /* Bit 0 */ -#define ADC_SMP3_1 ((uint32_t)0x00000400) /* Bit 1 */ -#define ADC_SMP3_2 ((uint32_t)0x00000800) /* Bit 2 */ - -#define ADC_SMP4 ((uint32_t)0x00007000) /* SMP4[2:0] bits (Channel 4 Sample time selection) */ -#define ADC_SMP4_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define ADC_SMP4_1 ((uint32_t)0x00002000) /* Bit 1 */ -#define ADC_SMP4_2 ((uint32_t)0x00004000) /* Bit 2 */ - -#define ADC_SMP5 ((uint32_t)0x00038000) /* SMP5[2:0] bits (Channel 5 Sample time selection) */ -#define ADC_SMP5_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SMP5_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SMP5_2 ((uint32_t)0x00020000) /* Bit 2 */ - -#define ADC_SMP6 ((uint32_t)0x001C0000) /* SMP6[2:0] bits (Channel 6 Sample time selection) */ -#define ADC_SMP6_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define ADC_SMP6_1 ((uint32_t)0x00080000) /* Bit 1 */ -#define ADC_SMP6_2 ((uint32_t)0x00100000) /* Bit 2 */ - -#define ADC_SMP7 ((uint32_t)0x00E00000) /* SMP7[2:0] bits (Channel 7 Sample time selection) */ -#define ADC_SMP7_0 ((uint32_t)0x00200000) /* Bit 0 */ -#define ADC_SMP7_1 ((uint32_t)0x00400000) /* Bit 1 */ -#define ADC_SMP7_2 ((uint32_t)0x00800000) /* Bit 2 */ - -#define ADC_SMP8 ((uint32_t)0x07000000) /* SMP8[2:0] bits (Channel 8 Sample time selection) */ -#define ADC_SMP8_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define ADC_SMP8_1 ((uint32_t)0x02000000) /* Bit 1 */ -#define ADC_SMP8_2 ((uint32_t)0x04000000) /* Bit 2 */ - -#define ADC_SMP9 ((uint32_t)0x38000000) /* SMP9[2:0] bits (Channel 9 Sample time selection) */ -#define ADC_SMP9_0 ((uint32_t)0x08000000) /* Bit 0 */ -#define ADC_SMP9_1 ((uint32_t)0x10000000) /* Bit 1 */ -#define ADC_SMP9_2 ((uint32_t)0x20000000) /* Bit 2 */ - -/****************** Bit definition for ADC_IOFR1 register *******************/ -#define ADC_JOFFSET1 ((uint16_t)0x0FFF) /* Data offset for injected channel 1 */ - -/****************** Bit definition for ADC_IOFR2 register *******************/ -#define ADC_JOFFSET2 ((uint16_t)0x0FFF) /* Data offset for injected channel 2 */ - -/****************** Bit definition for ADC_IOFR3 register *******************/ -#define ADC_JOFFSET3 ((uint16_t)0x0FFF) /* Data offset for injected channel 3 */ - -/****************** Bit definition for ADC_IOFR4 register *******************/ -#define ADC_JOFFSET4 ((uint16_t)0x0FFF) /* Data offset for injected channel 4 */ - -/******************* Bit definition for ADC_WDHTR register ********************/ -#define ADC_HT ((uint16_t)0x0FFF) /* Analog watchdog high threshold */ - -/******************* Bit definition for ADC_WDLTR register ********************/ -#define ADC_LT ((uint16_t)0x0FFF) /* Analog watchdog low threshold */ - -/******************* Bit definition for ADC_RSQR1 register *******************/ -#define ADC_SQ13 ((uint32_t)0x0000001F) /* SQ13[4:0] bits (13th conversion in regular sequence) */ -#define ADC_SQ13_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SQ13_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SQ13_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_SQ13_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_SQ13_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_SQ14 ((uint32_t)0x000003E0) /* SQ14[4:0] bits (14th conversion in regular sequence) */ -#define ADC_SQ14_0 ((uint32_t)0x00000020) /* Bit 0 */ -#define ADC_SQ14_1 ((uint32_t)0x00000040) /* Bit 1 */ -#define ADC_SQ14_2 ((uint32_t)0x00000080) /* Bit 2 */ -#define ADC_SQ14_3 ((uint32_t)0x00000100) /* Bit 3 */ -#define ADC_SQ14_4 ((uint32_t)0x00000200) /* Bit 4 */ - -#define ADC_SQ15 ((uint32_t)0x00007C00) /* SQ15[4:0] bits (15th conversion in regular sequence) */ -#define ADC_SQ15_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define ADC_SQ15_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define ADC_SQ15_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define ADC_SQ15_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define ADC_SQ15_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define ADC_SQ16 ((uint32_t)0x000F8000) /* SQ16[4:0] bits (16th conversion in regular sequence) */ -#define ADC_SQ16_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SQ16_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SQ16_2 ((uint32_t)0x00020000) /* Bit 2 */ -#define ADC_SQ16_3 ((uint32_t)0x00040000) /* Bit 3 */ -#define ADC_SQ16_4 ((uint32_t)0x00080000) /* Bit 4 */ - -#define ADC_L ((uint32_t)0x00F00000) /* L[3:0] bits (Regular channel sequence length) */ -#define ADC_L_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define ADC_L_1 ((uint32_t)0x00200000) /* Bit 1 */ -#define ADC_L_2 ((uint32_t)0x00400000) /* Bit 2 */ -#define ADC_L_3 ((uint32_t)0x00800000) /* Bit 3 */ - -/******************* Bit definition for ADC_RSQR2 register *******************/ -#define ADC_SQ7 ((uint32_t)0x0000001F) /* SQ7[4:0] bits (7th conversion in regular sequence) */ -#define ADC_SQ7_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SQ7_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SQ7_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_SQ7_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_SQ7_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_SQ8 ((uint32_t)0x000003E0) /* SQ8[4:0] bits (8th conversion in regular sequence) */ -#define ADC_SQ8_0 ((uint32_t)0x00000020) /* Bit 0 */ -#define ADC_SQ8_1 ((uint32_t)0x00000040) /* Bit 1 */ -#define ADC_SQ8_2 ((uint32_t)0x00000080) /* Bit 2 */ -#define ADC_SQ8_3 ((uint32_t)0x00000100) /* Bit 3 */ -#define ADC_SQ8_4 ((uint32_t)0x00000200) /* Bit 4 */ - -#define ADC_SQ9 ((uint32_t)0x00007C00) /* SQ9[4:0] bits (9th conversion in regular sequence) */ -#define ADC_SQ9_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define ADC_SQ9_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define ADC_SQ9_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define ADC_SQ9_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define ADC_SQ9_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define ADC_SQ10 ((uint32_t)0x000F8000) /* SQ10[4:0] bits (10th conversion in regular sequence) */ -#define ADC_SQ10_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SQ10_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SQ10_2 ((uint32_t)0x00020000) /* Bit 2 */ -#define ADC_SQ10_3 ((uint32_t)0x00040000) /* Bit 3 */ -#define ADC_SQ10_4 ((uint32_t)0x00080000) /* Bit 4 */ - -#define ADC_SQ11 ((uint32_t)0x01F00000) /* SQ11[4:0] bits (11th conversion in regular sequence) */ -#define ADC_SQ11_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define ADC_SQ11_1 ((uint32_t)0x00200000) /* Bit 1 */ -#define ADC_SQ11_2 ((uint32_t)0x00400000) /* Bit 2 */ -#define ADC_SQ11_3 ((uint32_t)0x00800000) /* Bit 3 */ -#define ADC_SQ11_4 ((uint32_t)0x01000000) /* Bit 4 */ - -#define ADC_SQ12 ((uint32_t)0x3E000000) /* SQ12[4:0] bits (12th conversion in regular sequence) */ -#define ADC_SQ12_0 ((uint32_t)0x02000000) /* Bit 0 */ -#define ADC_SQ12_1 ((uint32_t)0x04000000) /* Bit 1 */ -#define ADC_SQ12_2 ((uint32_t)0x08000000) /* Bit 2 */ -#define ADC_SQ12_3 ((uint32_t)0x10000000) /* Bit 3 */ -#define ADC_SQ12_4 ((uint32_t)0x20000000) /* Bit 4 */ - -/******************* Bit definition for ADC_RSQR3 register *******************/ -#define ADC_SQ1 ((uint32_t)0x0000001F) /* SQ1[4:0] bits (1st conversion in regular sequence) */ -#define ADC_SQ1_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SQ1_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SQ1_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_SQ1_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_SQ1_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_SQ2 ((uint32_t)0x000003E0) /* SQ2[4:0] bits (2nd conversion in regular sequence) */ -#define ADC_SQ2_0 ((uint32_t)0x00000020) /* Bit 0 */ -#define ADC_SQ2_1 ((uint32_t)0x00000040) /* Bit 1 */ -#define ADC_SQ2_2 ((uint32_t)0x00000080) /* Bit 2 */ -#define ADC_SQ2_3 ((uint32_t)0x00000100) /* Bit 3 */ -#define ADC_SQ2_4 ((uint32_t)0x00000200) /* Bit 4 */ - -#define ADC_SQ3 ((uint32_t)0x00007C00) /* SQ3[4:0] bits (3rd conversion in regular sequence) */ -#define ADC_SQ3_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define ADC_SQ3_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define ADC_SQ3_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define ADC_SQ3_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define ADC_SQ3_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define ADC_SQ4 ((uint32_t)0x000F8000) /* SQ4[4:0] bits (4th conversion in regular sequence) */ -#define ADC_SQ4_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SQ4_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SQ4_2 ((uint32_t)0x00020000) /* Bit 2 */ -#define ADC_SQ4_3 ((uint32_t)0x00040000) /* Bit 3 */ -#define ADC_SQ4_4 ((uint32_t)0x00080000) /* Bit 4 */ - -#define ADC_SQ5 ((uint32_t)0x01F00000) /* SQ5[4:0] bits (5th conversion in regular sequence) */ -#define ADC_SQ5_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define ADC_SQ5_1 ((uint32_t)0x00200000) /* Bit 1 */ -#define ADC_SQ5_2 ((uint32_t)0x00400000) /* Bit 2 */ -#define ADC_SQ5_3 ((uint32_t)0x00800000) /* Bit 3 */ -#define ADC_SQ5_4 ((uint32_t)0x01000000) /* Bit 4 */ - -#define ADC_SQ6 ((uint32_t)0x3E000000) /* SQ6[4:0] bits (6th conversion in regular sequence) */ -#define ADC_SQ6_0 ((uint32_t)0x02000000) /* Bit 0 */ -#define ADC_SQ6_1 ((uint32_t)0x04000000) /* Bit 1 */ -#define ADC_SQ6_2 ((uint32_t)0x08000000) /* Bit 2 */ -#define ADC_SQ6_3 ((uint32_t)0x10000000) /* Bit 3 */ -#define ADC_SQ6_4 ((uint32_t)0x20000000) /* Bit 4 */ - -/******************* Bit definition for ADC_ISQR register *******************/ -#define ADC_JSQ1 ((uint32_t)0x0000001F) /* JSQ1[4:0] bits (1st conversion in injected sequence) */ -#define ADC_JSQ1_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_JSQ1_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_JSQ1_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_JSQ1_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_JSQ1_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_JSQ2 ((uint32_t)0x000003E0) /* JSQ2[4:0] bits (2nd conversion in injected sequence) */ -#define ADC_JSQ2_0 ((uint32_t)0x00000020) /* Bit 0 */ -#define ADC_JSQ2_1 ((uint32_t)0x00000040) /* Bit 1 */ -#define ADC_JSQ2_2 ((uint32_t)0x00000080) /* Bit 2 */ -#define ADC_JSQ2_3 ((uint32_t)0x00000100) /* Bit 3 */ -#define ADC_JSQ2_4 ((uint32_t)0x00000200) /* Bit 4 */ - -#define ADC_JSQ3 ((uint32_t)0x00007C00) /* JSQ3[4:0] bits (3rd conversion in injected sequence) */ -#define ADC_JSQ3_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define ADC_JSQ3_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define ADC_JSQ3_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define ADC_JSQ3_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define ADC_JSQ3_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define ADC_JSQ4 ((uint32_t)0x000F8000) /* JSQ4[4:0] bits (4th conversion in injected sequence) */ -#define ADC_JSQ4_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_JSQ4_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_JSQ4_2 ((uint32_t)0x00020000) /* Bit 2 */ -#define ADC_JSQ4_3 ((uint32_t)0x00040000) /* Bit 3 */ -#define ADC_JSQ4_4 ((uint32_t)0x00080000) /* Bit 4 */ - -#define ADC_JL ((uint32_t)0x00300000) /* JL[1:0] bits (Injected Sequence length) */ -#define ADC_JL_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define ADC_JL_1 ((uint32_t)0x00200000) /* Bit 1 */ - -/******************* Bit definition for ADC_IDATAR1 register *******************/ -#define ADC_IDATAR1_JDATA ((uint16_t)0xFFFF) /* Injected data */ - -/******************* Bit definition for ADC_IDATAR2 register *******************/ -#define ADC_IDATAR2_JDATA ((uint16_t)0xFFFF) /* Injected data */ - -/******************* Bit definition for ADC_IDATAR3 register *******************/ -#define ADC_IDATAR3_JDATA ((uint16_t)0xFFFF) /* Injected data */ - -/******************* Bit definition for ADC_IDATAR4 register *******************/ -#define ADC_IDATAR4_JDATA ((uint16_t)0xFFFF) /* Injected data */ - -/******************** Bit definition for ADC_RDATAR register ********************/ -#define ADC_RDATAR_DATA ((uint32_t)0x0000FFFF) /* Regular data */ -#define ADC_RDATAR_ADC2DATA ((uint32_t)0xFFFF0000) /* ADC2 data */ - -/******************************************************************************/ -/* Backup registers */ -/******************************************************************************/ - -/******************* Bit definition for BKP_DATAR1 register ********************/ -#define BKP_DATAR1_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR2 register ********************/ -#define BKP_DATAR2_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR3 register ********************/ -#define BKP_DATAR3_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR4 register ********************/ -#define BKP_DATAR4_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR5 register ********************/ -#define BKP_DATAR5_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR6 register ********************/ -#define BKP_DATAR6_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR7 register ********************/ -#define BKP_DATAR7_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR8 register ********************/ -#define BKP_DATAR8_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR9 register ********************/ -#define BKP_DATAR9_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR10 register *******************/ -#define BKP_DATAR10_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR11 register *******************/ -#define BKP_DATAR11_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR12 register *******************/ -#define BKP_DATAR12_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR13 register *******************/ -#define BKP_DATAR13_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR14 register *******************/ -#define BKP_DATAR14_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR15 register *******************/ -#define BKP_DATAR15_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR16 register *******************/ -#define BKP_DATAR16_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR17 register *******************/ -#define BKP_DATAR17_D ((uint16_t)0xFFFF) /* Backup data */ - -/****************** Bit definition for BKP_DATAR18 register ********************/ -#define BKP_DATAR18_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR19 register *******************/ -#define BKP_DATAR19_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR20 register *******************/ -#define BKP_DATAR20_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR21 register *******************/ -#define BKP_DATAR21_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR22 register *******************/ -#define BKP_DATAR22_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR23 register *******************/ -#define BKP_DATAR23_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR24 register *******************/ -#define BKP_DATAR24_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR25 register *******************/ -#define BKP_DATAR25_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR26 register *******************/ -#define BKP_DATAR26_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR27 register *******************/ -#define BKP_DATAR27_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR28 register *******************/ -#define BKP_DATAR28_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR29 register *******************/ -#define BKP_DATAR29_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR30 register *******************/ -#define BKP_DATAR30_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR31 register *******************/ -#define BKP_DATAR31_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR32 register *******************/ -#define BKP_DATAR32_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR33 register *******************/ -#define BKP_DATAR33_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR34 register *******************/ -#define BKP_DATAR34_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR35 register *******************/ -#define BKP_DATAR35_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR36 register *******************/ -#define BKP_DATAR36_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR37 register *******************/ -#define BKP_DATAR37_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR38 register *******************/ -#define BKP_DATAR38_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR39 register *******************/ -#define BKP_DATAR39_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR40 register *******************/ -#define BKP_DATAR40_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR41 register *******************/ -#define BKP_DATAR41_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR42 register *******************/ -#define BKP_DATAR42_D ((uint16_t)0xFFFF) /* Backup data */ - -/****************** Bit definition for BKP_OCTLR register *******************/ -#define BKP_CAL ((uint16_t)0x007F) /* Calibration value */ -#define BKP_CCO ((uint16_t)0x0080) /* Calibration Clock Output */ -#define BKP_ASOE ((uint16_t)0x0100) /* Alarm or Second Output Enable */ -#define BKP_ASOS ((uint16_t)0x0200) /* Alarm or Second Output Selection */ - -/******************** Bit definition for BKP_TPCTLR register ********************/ -#define BKP_TPE ((uint8_t)0x01) /* TAMPER pin enable */ -#define BKP_TPAL ((uint8_t)0x02) /* TAMPER pin active level */ - -/******************* Bit definition for BKP_TPCSR register ********************/ -#define BKP_CTE ((uint16_t)0x0001) /* Clear Tamper event */ -#define BKP_CTI ((uint16_t)0x0002) /* Clear Tamper Interrupt */ -#define BKP_TPIE ((uint16_t)0x0004) /* TAMPER Pin interrupt enable */ -#define BKP_TEF ((uint16_t)0x0100) /* Tamper Event Flag */ -#define BKP_TIF ((uint16_t)0x0200) /* Tamper Interrupt Flag */ - -/******************************************************************************/ -/* Controller Area Network */ -/******************************************************************************/ - -/******************* Bit definition for CAN_CTLR register ********************/ -#define CAN_CTLR_INRQ ((uint16_t)0x0001) /* Initialization Request */ -#define CAN_CTLR_SLEEP ((uint16_t)0x0002) /* Sleep Mode Request */ -#define CAN_CTLR_TXFP ((uint16_t)0x0004) /* Transmit FIFO Priority */ -#define CAN_CTLR_RFLM ((uint16_t)0x0008) /* Receive FIFO Locked Mode */ -#define CAN_CTLR_NART ((uint16_t)0x0010) /* No Automatic Retransmission */ -#define CAN_CTLR_AWUM ((uint16_t)0x0020) /* Automatic Wakeup Mode */ -#define CAN_CTLR_ABOM ((uint16_t)0x0040) /* Automatic Bus-Off Management */ -#define CAN_CTLR_TTCM ((uint16_t)0x0080) /* Time Triggered Communication Mode */ -#define CAN_CTLR_RESET ((uint16_t)0x8000) /* CAN software master reset */ - -/******************* Bit definition for CAN_STATR register ********************/ -#define CAN_STATR_INAK ((uint16_t)0x0001) /* Initialization Acknowledge */ -#define CAN_STATR_SLAK ((uint16_t)0x0002) /* Sleep Acknowledge */ -#define CAN_STATR_ERRI ((uint16_t)0x0004) /* Error Interrupt */ -#define CAN_STATR_WKUI ((uint16_t)0x0008) /* Wakeup Interrupt */ -#define CAN_STATR_SLAKI ((uint16_t)0x0010) /* Sleep Acknowledge Interrupt */ -#define CAN_STATR_TXM ((uint16_t)0x0100) /* Transmit Mode */ -#define CAN_STATR_RXM ((uint16_t)0x0200) /* Receive Mode */ -#define CAN_STATR_SAMP ((uint16_t)0x0400) /* Last Sample Point */ -#define CAN_STATR_RX ((uint16_t)0x0800) /* CAN Rx Signal */ - -/******************* Bit definition for CAN_TSTATR register ********************/ -#define CAN_TSTATR_RQCP0 ((uint32_t)0x00000001) /* Request Completed Mailbox0 */ -#define CAN_TSTATR_TXOK0 ((uint32_t)0x00000002) /* Transmission OK of Mailbox0 */ -#define CAN_TSTATR_ALST0 ((uint32_t)0x00000004) /* Arbitration Lost for Mailbox0 */ -#define CAN_TSTATR_TERR0 ((uint32_t)0x00000008) /* Transmission Error of Mailbox0 */ -#define CAN_TSTATR_ABRQ0 ((uint32_t)0x00000080) /* Abort Request for Mailbox0 */ -#define CAN_TSTATR_RQCP1 ((uint32_t)0x00000100) /* Request Completed Mailbox1 */ -#define CAN_TSTATR_TXOK1 ((uint32_t)0x00000200) /* Transmission OK of Mailbox1 */ -#define CAN_TSTATR_ALST1 ((uint32_t)0x00000400) /* Arbitration Lost for Mailbox1 */ -#define CAN_TSTATR_TERR1 ((uint32_t)0x00000800) /* Transmission Error of Mailbox1 */ -#define CAN_TSTATR_ABRQ1 ((uint32_t)0x00008000) /* Abort Request for Mailbox 1 */ -#define CAN_TSTATR_RQCP2 ((uint32_t)0x00010000) /* Request Completed Mailbox2 */ -#define CAN_TSTATR_TXOK2 ((uint32_t)0x00020000) /* Transmission OK of Mailbox 2 */ -#define CAN_TSTATR_ALST2 ((uint32_t)0x00040000) /* Arbitration Lost for mailbox 2 */ -#define CAN_TSTATR_TERR2 ((uint32_t)0x00080000) /* Transmission Error of Mailbox 2 */ -#define CAN_TSTATR_ABRQ2 ((uint32_t)0x00800000) /* Abort Request for Mailbox 2 */ -#define CAN_TSTATR_CODE ((uint32_t)0x03000000) /* Mailbox Code */ - -#define CAN_TSTATR_TME ((uint32_t)0x1C000000) /* TME[2:0] bits */ -#define CAN_TSTATR_TME0 ((uint32_t)0x04000000) /* Transmit Mailbox 0 Empty */ -#define CAN_TSTATR_TME1 ((uint32_t)0x08000000) /* Transmit Mailbox 1 Empty */ -#define CAN_TSTATR_TME2 ((uint32_t)0x10000000) /* Transmit Mailbox 2 Empty */ - -#define CAN_TSTATR_LOW ((uint32_t)0xE0000000) /* LOW[2:0] bits */ -#define CAN_TSTATR_LOW0 ((uint32_t)0x20000000) /* Lowest Priority Flag for Mailbox 0 */ -#define CAN_TSTATR_LOW1 ((uint32_t)0x40000000) /* Lowest Priority Flag for Mailbox 1 */ -#define CAN_TSTATR_LOW2 ((uint32_t)0x80000000) /* Lowest Priority Flag for Mailbox 2 */ - -/******************* Bit definition for CAN_RFIFO0 register *******************/ -#define CAN_RFIFO0_FMP0 ((uint8_t)0x03) /* FIFO 0 Message Pending */ -#define CAN_RFIFO0_FULL0 ((uint8_t)0x08) /* FIFO 0 Full */ -#define CAN_RFIFO0_FOVR0 ((uint8_t)0x10) /* FIFO 0 Overrun */ -#define CAN_RFIFO0_RFOM0 ((uint8_t)0x20) /* Release FIFO 0 Output Mailbox */ - -/******************* Bit definition for CAN_RFIFO1 register *******************/ -#define CAN_RFIFO1_FMP1 ((uint8_t)0x03) /* FIFO 1 Message Pending */ -#define CAN_RFIFO1_FULL1 ((uint8_t)0x08) /* FIFO 1 Full */ -#define CAN_RFIFO1_FOVR1 ((uint8_t)0x10) /* FIFO 1 Overrun */ -#define CAN_RFIFO1_RFOM1 ((uint8_t)0x20) /* Release FIFO 1 Output Mailbox */ - -/******************** Bit definition for CAN_INTENR register *******************/ -#define CAN_INTENR_TMEIE ((uint32_t)0x00000001) /* Transmit Mailbox Empty Interrupt Enable */ -#define CAN_INTENR_FMPIE0 ((uint32_t)0x00000002) /* FIFO Message Pending Interrupt Enable */ -#define CAN_INTENR_FFIE0 ((uint32_t)0x00000004) /* FIFO Full Interrupt Enable */ -#define CAN_INTENR_FOVIE0 ((uint32_t)0x00000008) /* FIFO Overrun Interrupt Enable */ -#define CAN_INTENR_FMPIE1 ((uint32_t)0x00000010) /* FIFO Message Pending Interrupt Enable */ -#define CAN_INTENR_FFIE1 ((uint32_t)0x00000020) /* FIFO Full Interrupt Enable */ -#define CAN_INTENR_FOVIE1 ((uint32_t)0x00000040) /* FIFO Overrun Interrupt Enable */ -#define CAN_INTENR_EWGIE ((uint32_t)0x00000100) /* Error Warning Interrupt Enable */ -#define CAN_INTENR_EPVIE ((uint32_t)0x00000200) /* Error Passive Interrupt Enable */ -#define CAN_INTENR_BOFIE ((uint32_t)0x00000400) /* Bus-Off Interrupt Enable */ -#define CAN_INTENR_LECIE ((uint32_t)0x00000800) /* Last Error Code Interrupt Enable */ -#define CAN_INTENR_ERRIE ((uint32_t)0x00008000) /* Error Interrupt Enable */ -#define CAN_INTENR_WKUIE ((uint32_t)0x00010000) /* Wakeup Interrupt Enable */ -#define CAN_INTENR_SLKIE ((uint32_t)0x00020000) /* Sleep Interrupt Enable */ - -/******************** Bit definition for CAN_ERRSR register *******************/ -#define CAN_ERRSR_EWGF ((uint32_t)0x00000001) /* Error Warning Flag */ -#define CAN_ERRSR_EPVF ((uint32_t)0x00000002) /* Error Passive Flag */ -#define CAN_ERRSR_BOFF ((uint32_t)0x00000004) /* Bus-Off Flag */ - -#define CAN_ERRSR_LEC ((uint32_t)0x00000070) /* LEC[2:0] bits (Last Error Code) */ -#define CAN_ERRSR_LEC_0 ((uint32_t)0x00000010) /* Bit 0 */ -#define CAN_ERRSR_LEC_1 ((uint32_t)0x00000020) /* Bit 1 */ -#define CAN_ERRSR_LEC_2 ((uint32_t)0x00000040) /* Bit 2 */ - -#define CAN_ERRSR_TEC ((uint32_t)0x00FF0000) /* Least significant byte of the 9-bit Transmit Error Counter */ -#define CAN_ERRSR_REC ((uint32_t)0xFF000000) /* Receive Error Counter */ - -/******************* Bit definition for CAN_BTIMR register ********************/ -#define CAN_BTIMR_BRP ((uint32_t)0x000003FF) /* Baud Rate Prescaler */ -#define CAN_BTIMR_TS1 ((uint32_t)0x000F0000) /* Time Segment 1 */ -#define CAN_BTIMR_TS2 ((uint32_t)0x00700000) /* Time Segment 2 */ -#define CAN_BTIMR_SJW ((uint32_t)0x03000000) /* Resynchronization Jump Width */ -#define CAN_BTIMR_LBKM ((uint32_t)0x40000000) /* Loop Back Mode (Debug) */ -#define CAN_BTIMR_SILM ((uint32_t)0x80000000) /* Silent Mode */ - -/****************** Bit definition for CAN_TXMI0R register ********************/ -#define CAN_TXMI0R_TXRQ ((uint32_t)0x00000001) /* Transmit Mailbox Request */ -#define CAN_TXMI0R_RTR ((uint32_t)0x00000002) /* Remote Transmission Request */ -#define CAN_TXMI0R_IDE ((uint32_t)0x00000004) /* Identifier Extension */ -#define CAN_TXMI0R_EXID ((uint32_t)0x001FFFF8) /* Extended Identifier */ -#define CAN_TXMI0R_STID ((uint32_t)0xFFE00000) /* Standard Identifier or Extended Identifier */ - -/****************** Bit definition for CAN_TXMDT0R register *******************/ -#define CAN_TXMDT0R_DLC ((uint32_t)0x0000000F) /* Data Length Code */ -#define CAN_TXMDT0R_TGT ((uint32_t)0x00000100) /* Transmit Global Time */ -#define CAN_TXMDT0R_TIME ((uint32_t)0xFFFF0000) /* Message Time Stamp */ - -/****************** Bit definition for CAN_TXMDL0R register *******************/ -#define CAN_TXMDL0R_DATA0 ((uint32_t)0x000000FF) /* Data byte 0 */ -#define CAN_TXMDL0R_DATA1 ((uint32_t)0x0000FF00) /* Data byte 1 */ -#define CAN_TXMDL0R_DATA2 ((uint32_t)0x00FF0000) /* Data byte 2 */ -#define CAN_TXMDL0R_DATA3 ((uint32_t)0xFF000000) /* Data byte 3 */ - -/****************** Bit definition for CAN_TXMDH0R register *******************/ -#define CAN_TXMDH0R_DATA4 ((uint32_t)0x000000FF) /* Data byte 4 */ -#define CAN_TXMDH0R_DATA5 ((uint32_t)0x0000FF00) /* Data byte 5 */ -#define CAN_TXMDH0R_DATA6 ((uint32_t)0x00FF0000) /* Data byte 6 */ -#define CAN_TXMDH0R_DATA7 ((uint32_t)0xFF000000) /* Data byte 7 */ - -/******************* Bit definition for CAN_TXMI1R register *******************/ -#define CAN_TXMI1R_TXRQ ((uint32_t)0x00000001) /* Transmit Mailbox Request */ -#define CAN_TXMI1R_RTR ((uint32_t)0x00000002) /* Remote Transmission Request */ -#define CAN_TXMI1R_IDE ((uint32_t)0x00000004) /* Identifier Extension */ -#define CAN_TXMI1R_EXID ((uint32_t)0x001FFFF8) /* Extended Identifier */ -#define CAN_TXMI1R_STID ((uint32_t)0xFFE00000) /* Standard Identifier or Extended Identifier */ - -/******************* Bit definition for CAN_TXMDT1R register ******************/ -#define CAN_TXMDT1R_DLC ((uint32_t)0x0000000F) /* Data Length Code */ -#define CAN_TXMDT1R_TGT ((uint32_t)0x00000100) /* Transmit Global Time */ -#define CAN_TXMDT1R_TIME ((uint32_t)0xFFFF0000) /* Message Time Stamp */ - -/******************* Bit definition for CAN_TXMDL1R register ******************/ -#define CAN_TXMDL1R_DATA0 ((uint32_t)0x000000FF) /* Data byte 0 */ -#define CAN_TXMDL1R_DATA1 ((uint32_t)0x0000FF00) /* Data byte 1 */ -#define CAN_TXMDL1R_DATA2 ((uint32_t)0x00FF0000) /* Data byte 2 */ -#define CAN_TXMDL1R_DATA3 ((uint32_t)0xFF000000) /* Data byte 3 */ - -/******************* Bit definition for CAN_TXMDH1R register ******************/ -#define CAN_TXMDH1R_DATA4 ((uint32_t)0x000000FF) /* Data byte 4 */ -#define CAN_TXMDH1R_DATA5 ((uint32_t)0x0000FF00) /* Data byte 5 */ -#define CAN_TXMDH1R_DATA6 ((uint32_t)0x00FF0000) /* Data byte 6 */ -#define CAN_TXMDH1R_DATA7 ((uint32_t)0xFF000000) /* Data byte 7 */ - -/******************* Bit definition for CAN_TXMI2R register *******************/ -#define CAN_TXMI2R_TXRQ ((uint32_t)0x00000001) /* Transmit Mailbox Request */ -#define CAN_TXMI2R_RTR ((uint32_t)0x00000002) /* Remote Transmission Request */ -#define CAN_TXMI2R_IDE ((uint32_t)0x00000004) /* Identifier Extension */ -#define CAN_TXMI2R_EXID ((uint32_t)0x001FFFF8) /* Extended identifier */ -#define CAN_TXMI2R_STID ((uint32_t)0xFFE00000) /* Standard Identifier or Extended Identifier */ - -/******************* Bit definition for CAN_TXMDT2R register ******************/ -#define CAN_TXMDT2R_DLC ((uint32_t)0x0000000F) /* Data Length Code */ -#define CAN_TXMDT2R_TGT ((uint32_t)0x00000100) /* Transmit Global Time */ -#define CAN_TXMDT2R_TIME ((uint32_t)0xFFFF0000) /* Message Time Stamp */ - -/******************* Bit definition for CAN_TXMDL2R register ******************/ -#define CAN_TXMDL2R_DATA0 ((uint32_t)0x000000FF) /* Data byte 0 */ -#define CAN_TXMDL2R_DATA1 ((uint32_t)0x0000FF00) /* Data byte 1 */ -#define CAN_TXMDL2R_DATA2 ((uint32_t)0x00FF0000) /* Data byte 2 */ -#define CAN_TXMDL2R_DATA3 ((uint32_t)0xFF000000) /* Data byte 3 */ - -/******************* Bit definition for CAN_TXMDH2R register ******************/ -#define CAN_TXMDH2R_DATA4 ((uint32_t)0x000000FF) /* Data byte 4 */ -#define CAN_TXMDH2R_DATA5 ((uint32_t)0x0000FF00) /* Data byte 5 */ -#define CAN_TXMDH2R_DATA6 ((uint32_t)0x00FF0000) /* Data byte 6 */ -#define CAN_TXMDH2R_DATA7 ((uint32_t)0xFF000000) /* Data byte 7 */ - -/******************* Bit definition for CAN_RXMI0R register *******************/ -#define CAN_RXMI0R_RTR ((uint32_t)0x00000002) /* Remote Transmission Request */ -#define CAN_RXMI0R_IDE ((uint32_t)0x00000004) /* Identifier Extension */ -#define CAN_RXMI0R_EXID ((uint32_t)0x001FFFF8) /* Extended Identifier */ -#define CAN_RXMI0R_STID ((uint32_t)0xFFE00000) /* Standard Identifier or Extended Identifier */ - -/******************* Bit definition for CAN_RXMDT0R register ******************/ -#define CAN_RXMDT0R_DLC ((uint32_t)0x0000000F) /* Data Length Code */ -#define CAN_RXMDT0R_FMI ((uint32_t)0x0000FF00) /* Filter Match Index */ -#define CAN_RXMDT0R_TIME ((uint32_t)0xFFFF0000) /* Message Time Stamp */ - -/******************* Bit definition for CAN_RXMDL0R register ******************/ -#define CAN_RXMDL0R_DATA0 ((uint32_t)0x000000FF) /* Data byte 0 */ -#define CAN_RXMDL0R_DATA1 ((uint32_t)0x0000FF00) /* Data byte 1 */ -#define CAN_RXMDL0R_DATA2 ((uint32_t)0x00FF0000) /* Data byte 2 */ -#define CAN_RXMDL0R_DATA3 ((uint32_t)0xFF000000) /* Data byte 3 */ - -/******************* Bit definition for CAN_RXMDH0R register ******************/ -#define CAN_RXMDH0R_DATA4 ((uint32_t)0x000000FF) /* Data byte 4 */ -#define CAN_RXMDH0R_DATA5 ((uint32_t)0x0000FF00) /* Data byte 5 */ -#define CAN_RXMDH0R_DATA6 ((uint32_t)0x00FF0000) /* Data byte 6 */ -#define CAN_RXMDH0R_DATA7 ((uint32_t)0xFF000000) /* Data byte 7 */ - -/******************* Bit definition for CAN_RXMI1R register *******************/ -#define CAN_RXMI1R_RTR ((uint32_t)0x00000002) /* Remote Transmission Request */ -#define CAN_RXMI1R_IDE ((uint32_t)0x00000004) /* Identifier Extension */ -#define CAN_RXMI1R_EXID ((uint32_t)0x001FFFF8) /* Extended identifier */ -#define CAN_RXMI1R_STID ((uint32_t)0xFFE00000) /* Standard Identifier or Extended Identifier */ - -/******************* Bit definition for CAN_RXMDT1R register ******************/ -#define CAN_RXMDT1R_DLC ((uint32_t)0x0000000F) /* Data Length Code */ -#define CAN_RXMDT1R_FMI ((uint32_t)0x0000FF00) /* Filter Match Index */ -#define CAN_RXMDT1R_TIME ((uint32_t)0xFFFF0000) /* Message Time Stamp */ - -/******************* Bit definition for CAN_RXMDL1R register ******************/ -#define CAN_RXMDL1R_DATA0 ((uint32_t)0x000000FF) /* Data byte 0 */ -#define CAN_RXMDL1R_DATA1 ((uint32_t)0x0000FF00) /* Data byte 1 */ -#define CAN_RXMDL1R_DATA2 ((uint32_t)0x00FF0000) /* Data byte 2 */ -#define CAN_RXMDL1R_DATA3 ((uint32_t)0xFF000000) /* Data byte 3 */ - -/******************* Bit definition for CAN_RXMDH1R register ******************/ -#define CAN_RXMDH1R_DATA4 ((uint32_t)0x000000FF) /* Data byte 4 */ -#define CAN_RXMDH1R_DATA5 ((uint32_t)0x0000FF00) /* Data byte 5 */ -#define CAN_RXMDH1R_DATA6 ((uint32_t)0x00FF0000) /* Data byte 6 */ -#define CAN_RXMDH1R_DATA7 ((uint32_t)0xFF000000) /* Data byte 7 */ - -/******************* Bit definition for CAN_FCTLR register ********************/ -#define CAN_FCTLR_FINIT ((uint8_t)0x01) /* Filter Init Mode */ - -/******************* Bit definition for CAN_FMCFGR register *******************/ -#define CAN_FMCFGR_FBM ((uint16_t)0x3FFF) /* Filter Mode */ -#define CAN_FMCFGR_FBM0 ((uint16_t)0x0001) /* Filter Init Mode bit 0 */ -#define CAN_FMCFGR_FBM1 ((uint16_t)0x0002) /* Filter Init Mode bit 1 */ -#define CAN_FMCFGR_FBM2 ((uint16_t)0x0004) /* Filter Init Mode bit 2 */ -#define CAN_FMCFGR_FBM3 ((uint16_t)0x0008) /* Filter Init Mode bit 3 */ -#define CAN_FMCFGR_FBM4 ((uint16_t)0x0010) /* Filter Init Mode bit 4 */ -#define CAN_FMCFGR_FBM5 ((uint16_t)0x0020) /* Filter Init Mode bit 5 */ -#define CAN_FMCFGR_FBM6 ((uint16_t)0x0040) /* Filter Init Mode bit 6 */ -#define CAN_FMCFGR_FBM7 ((uint16_t)0x0080) /* Filter Init Mode bit 7 */ -#define CAN_FMCFGR_FBM8 ((uint16_t)0x0100) /* Filter Init Mode bit 8 */ -#define CAN_FMCFGR_FBM9 ((uint16_t)0x0200) /* Filter Init Mode bit 9 */ -#define CAN_FMCFGR_FBM10 ((uint16_t)0x0400) /* Filter Init Mode bit 10 */ -#define CAN_FMCFGR_FBM11 ((uint16_t)0x0800) /* Filter Init Mode bit 11 */ -#define CAN_FMCFGR_FBM12 ((uint16_t)0x1000) /* Filter Init Mode bit 12 */ -#define CAN_FMCFGR_FBM13 ((uint16_t)0x2000) /* Filter Init Mode bit 13 */ - -/******************* Bit definition for CAN_FSCFGR register *******************/ -#define CAN_FSCFGR_FSC ((uint16_t)0x3FFF) /* Filter Scale Configuration */ -#define CAN_FSCFGR_FSC0 ((uint16_t)0x0001) /* Filter Scale Configuration bit 0 */ -#define CAN_FSCFGR_FSC1 ((uint16_t)0x0002) /* Filter Scale Configuration bit 1 */ -#define CAN_FSCFGR_FSC2 ((uint16_t)0x0004) /* Filter Scale Configuration bit 2 */ -#define CAN_FSCFGR_FSC3 ((uint16_t)0x0008) /* Filter Scale Configuration bit 3 */ -#define CAN_FSCFGR_FSC4 ((uint16_t)0x0010) /* Filter Scale Configuration bit 4 */ -#define CAN_FSCFGR_FSC5 ((uint16_t)0x0020) /* Filter Scale Configuration bit 5 */ -#define CAN_FSCFGR_FSC6 ((uint16_t)0x0040) /* Filter Scale Configuration bit 6 */ -#define CAN_FSCFGR_FSC7 ((uint16_t)0x0080) /* Filter Scale Configuration bit 7 */ -#define CAN_FSCFGR_FSC8 ((uint16_t)0x0100) /* Filter Scale Configuration bit 8 */ -#define CAN_FSCFGR_FSC9 ((uint16_t)0x0200) /* Filter Scale Configuration bit 9 */ -#define CAN_FSCFGR_FSC10 ((uint16_t)0x0400) /* Filter Scale Configuration bit 10 */ -#define CAN_FSCFGR_FSC11 ((uint16_t)0x0800) /* Filter Scale Configuration bit 11 */ -#define CAN_FSCFGR_FSC12 ((uint16_t)0x1000) /* Filter Scale Configuration bit 12 */ -#define CAN_FSCFGR_FSC13 ((uint16_t)0x2000) /* Filter Scale Configuration bit 13 */ - -/****************** Bit definition for CAN_FAFIFOR register *******************/ -#define CAN_FAFIFOR_FFA ((uint16_t)0x3FFF) /* Filter FIFO Assignment */ -#define CAN_FAFIFOR_FFA0 ((uint16_t)0x0001) /* Filter FIFO Assignment for Filter 0 */ -#define CAN_FAFIFOR_FFA1 ((uint16_t)0x0002) /* Filter FIFO Assignment for Filter 1 */ -#define CAN_FAFIFOR_FFA2 ((uint16_t)0x0004) /* Filter FIFO Assignment for Filter 2 */ -#define CAN_FAFIFOR_FFA3 ((uint16_t)0x0008) /* Filter FIFO Assignment for Filter 3 */ -#define CAN_FAFIFOR_FFA4 ((uint16_t)0x0010) /* Filter FIFO Assignment for Filter 4 */ -#define CAN_FAFIFOR_FFA5 ((uint16_t)0x0020) /* Filter FIFO Assignment for Filter 5 */ -#define CAN_FAFIFOR_FFA6 ((uint16_t)0x0040) /* Filter FIFO Assignment for Filter 6 */ -#define CAN_FAFIFOR_FFA7 ((uint16_t)0x0080) /* Filter FIFO Assignment for Filter 7 */ -#define CAN_FAFIFOR_FFA8 ((uint16_t)0x0100) /* Filter FIFO Assignment for Filter 8 */ -#define CAN_FAFIFOR_FFA9 ((uint16_t)0x0200) /* Filter FIFO Assignment for Filter 9 */ -#define CAN_FAFIFOR_FFA10 ((uint16_t)0x0400) /* Filter FIFO Assignment for Filter 10 */ -#define CAN_FAFIFOR_FFA11 ((uint16_t)0x0800) /* Filter FIFO Assignment for Filter 11 */ -#define CAN_FAFIFOR_FFA12 ((uint16_t)0x1000) /* Filter FIFO Assignment for Filter 12 */ -#define CAN_FAFIFOR_FFA13 ((uint16_t)0x2000) /* Filter FIFO Assignment for Filter 13 */ - -/******************* Bit definition for CAN_FWR register *******************/ -#define CAN_FWR_FACT ((uint16_t)0x3FFF) /* Filter Active */ -#define CAN_FWR_FACT0 ((uint16_t)0x0001) /* Filter 0 Active */ -#define CAN_FWR_FACT1 ((uint16_t)0x0002) /* Filter 1 Active */ -#define CAN_FWR_FACT2 ((uint16_t)0x0004) /* Filter 2 Active */ -#define CAN_FWR_FACT3 ((uint16_t)0x0008) /* Filter 3 Active */ -#define CAN_FWR_FACT4 ((uint16_t)0x0010) /* Filter 4 Active */ -#define CAN_FWR_FACT5 ((uint16_t)0x0020) /* Filter 5 Active */ -#define CAN_FWR_FACT6 ((uint16_t)0x0040) /* Filter 6 Active */ -#define CAN_FWR_FACT7 ((uint16_t)0x0080) /* Filter 7 Active */ -#define CAN_FWR_FACT8 ((uint16_t)0x0100) /* Filter 8 Active */ -#define CAN_FWR_FACT9 ((uint16_t)0x0200) /* Filter 9 Active */ -#define CAN_FWR_FACT10 ((uint16_t)0x0400) /* Filter 10 Active */ -#define CAN_FWR_FACT11 ((uint16_t)0x0800) /* Filter 11 Active */ -#define CAN_FWR_FACT12 ((uint16_t)0x1000) /* Filter 12 Active */ -#define CAN_FWR_FACT13 ((uint16_t)0x2000) /* Filter 13 Active */ - -/******************* Bit definition for CAN_F0R1 register *******************/ -#define CAN_F0R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F0R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F0R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F0R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F0R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F0R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F0R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F0R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F0R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F0R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F0R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F0R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F0R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F0R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F0R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F0R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F0R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F0R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F0R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F0R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F0R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F0R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F0R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F0R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F0R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F0R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F0R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F0R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F0R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F0R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F0R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F0R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F1R1 register *******************/ -#define CAN_F1R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F1R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F1R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F1R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F1R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F1R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F1R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F1R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F1R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F1R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F1R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F1R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F1R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F1R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F1R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F1R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F1R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F1R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F1R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F1R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F1R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F1R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F1R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F1R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F1R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F1R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F1R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F1R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F1R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F1R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F1R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F1R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F2R1 register *******************/ -#define CAN_F2R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F2R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F2R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F2R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F2R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F2R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F2R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F2R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F2R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F2R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F2R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F2R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F2R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F2R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F2R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F2R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F2R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F2R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F2R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F2R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F2R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F2R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F2R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F2R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F2R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F2R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F2R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F2R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F2R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F2R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F2R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F2R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F3R1 register *******************/ -#define CAN_F3R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F3R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F3R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F3R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F3R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F3R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F3R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F3R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F3R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F3R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F3R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F3R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F3R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F3R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F3R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F3R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F3R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F3R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F3R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F3R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F3R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F3R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F3R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F3R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F3R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F3R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F3R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F3R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F3R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F3R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F3R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F3R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F4R1 register *******************/ -#define CAN_F4R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F4R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F4R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F4R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F4R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F4R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F4R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F4R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F4R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F4R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F4R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F4R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F4R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F4R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F4R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F4R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F4R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F4R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F4R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F4R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F4R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F4R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F4R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F4R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F4R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F4R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F4R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F4R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F4R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F4R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F4R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F4R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F5R1 register *******************/ -#define CAN_F5R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F5R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F5R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F5R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F5R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F5R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F5R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F5R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F5R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F5R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F5R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F5R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F5R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F5R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F5R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F5R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F5R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F5R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F5R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F5R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F5R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F5R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F5R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F5R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F5R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F5R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F5R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F5R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F5R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F5R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F5R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F5R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F6R1 register *******************/ -#define CAN_F6R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F6R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F6R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F6R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F6R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F6R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F6R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F6R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F6R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F6R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F6R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F6R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F6R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F6R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F6R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F6R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F6R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F6R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F6R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F6R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F6R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F6R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F6R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F6R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F6R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F6R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F6R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F6R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F6R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F6R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F6R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F6R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F7R1 register *******************/ -#define CAN_F7R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F7R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F7R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F7R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F7R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F7R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F7R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F7R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F7R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F7R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F7R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F7R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F7R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F7R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F7R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F7R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F7R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F7R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F7R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F7R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F7R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F7R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F7R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F7R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F7R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F7R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F7R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F7R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F7R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F7R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F7R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F7R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F8R1 register *******************/ -#define CAN_F8R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F8R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F8R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F8R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F8R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F8R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F8R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F8R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F8R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F8R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F8R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F8R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F8R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F8R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F8R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F8R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F8R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F8R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F8R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F8R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F8R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F8R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F8R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F8R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F8R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F8R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F8R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F8R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F8R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F8R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F8R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F8R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F9R1 register *******************/ -#define CAN_F9R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F9R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F9R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F9R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F9R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F9R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F9R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F9R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F9R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F9R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F9R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F9R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F9R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F9R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F9R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F9R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F9R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F9R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F9R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F9R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F9R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F9R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F9R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F9R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F9R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F9R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F9R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F9R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F9R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F9R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F9R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F9R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F10R1 register ******************/ -#define CAN_F10R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F10R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F10R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F10R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F10R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F10R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F10R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F10R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F10R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F10R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F10R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F10R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F10R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F10R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F10R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F10R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F10R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F10R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F10R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F10R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F10R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F10R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F10R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F10R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F10R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F10R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F10R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F10R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F10R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F10R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F10R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F10R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F11R1 register ******************/ -#define CAN_F11R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F11R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F11R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F11R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F11R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F11R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F11R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F11R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F11R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F11R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F11R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F11R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F11R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F11R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F11R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F11R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F11R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F11R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F11R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F11R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F11R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F11R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F11R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F11R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F11R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F11R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F11R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F11R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F11R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F11R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F11R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F11R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F12R1 register ******************/ -#define CAN_F12R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F12R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F12R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F12R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F12R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F12R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F12R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F12R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F12R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F12R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F12R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F12R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F12R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F12R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F12R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F12R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F12R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F12R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F12R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F12R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F12R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F12R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F12R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F12R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F12R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F12R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F12R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F12R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F12R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F12R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F12R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F12R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F13R1 register ******************/ -#define CAN_F13R1_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F13R1_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F13R1_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F13R1_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F13R1_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F13R1_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F13R1_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F13R1_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F13R1_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F13R1_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F13R1_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F13R1_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F13R1_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F13R1_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F13R1_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F13R1_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F13R1_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F13R1_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F13R1_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F13R1_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F13R1_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F13R1_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F13R1_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F13R1_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F13R1_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F13R1_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F13R1_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F13R1_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F13R1_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F13R1_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F13R1_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F13R1_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F0R2 register *******************/ -#define CAN_F0R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F0R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F0R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F0R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F0R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F0R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F0R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F0R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F0R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F0R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F0R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F0R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F0R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F0R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F0R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F0R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F0R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F0R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F0R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F0R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F0R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F0R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F0R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F0R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F0R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F0R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F0R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F0R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F0R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F0R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F0R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F0R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F1R2 register *******************/ -#define CAN_F1R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F1R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F1R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F1R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F1R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F1R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F1R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F1R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F1R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F1R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F1R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F1R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F1R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F1R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F1R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F1R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F1R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F1R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F1R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F1R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F1R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F1R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F1R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F1R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F1R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F1R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F1R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F1R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F1R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F1R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F1R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F1R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F2R2 register *******************/ -#define CAN_F2R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F2R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F2R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F2R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F2R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F2R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F2R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F2R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F2R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F2R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F2R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F2R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F2R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F2R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F2R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F2R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F2R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F2R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F2R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F2R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F2R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F2R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F2R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F2R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F2R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F2R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F2R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F2R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F2R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F2R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F2R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F2R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F3R2 register *******************/ -#define CAN_F3R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F3R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F3R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F3R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F3R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F3R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F3R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F3R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F3R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F3R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F3R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F3R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F3R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F3R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F3R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F3R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F3R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F3R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F3R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F3R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F3R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F3R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F3R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F3R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F3R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F3R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F3R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F3R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F3R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F3R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F3R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F3R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F4R2 register *******************/ -#define CAN_F4R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F4R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F4R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F4R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F4R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F4R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F4R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F4R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F4R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F4R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F4R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F4R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F4R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F4R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F4R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F4R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F4R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F4R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F4R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F4R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F4R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F4R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F4R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F4R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F4R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F4R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F4R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F4R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F4R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F4R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F4R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F4R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F5R2 register *******************/ -#define CAN_F5R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F5R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F5R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F5R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F5R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F5R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F5R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F5R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F5R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F5R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F5R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F5R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F5R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F5R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F5R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F5R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F5R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F5R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F5R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F5R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F5R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F5R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F5R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F5R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F5R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F5R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F5R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F5R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F5R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F5R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F5R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F5R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F6R2 register *******************/ -#define CAN_F6R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F6R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F6R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F6R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F6R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F6R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F6R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F6R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F6R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F6R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F6R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F6R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F6R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F6R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F6R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F6R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F6R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F6R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F6R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F6R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F6R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F6R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F6R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F6R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F6R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F6R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F6R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F6R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F6R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F6R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F6R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F6R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F7R2 register *******************/ -#define CAN_F7R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F7R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F7R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F7R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F7R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F7R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F7R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F7R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F7R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F7R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F7R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F7R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F7R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F7R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F7R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F7R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F7R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F7R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F7R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F7R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F7R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F7R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F7R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F7R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F7R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F7R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F7R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F7R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F7R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F7R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F7R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F7R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F8R2 register *******************/ -#define CAN_F8R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F8R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F8R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F8R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F8R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F8R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F8R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F8R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F8R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F8R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F8R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F8R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F8R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F8R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F8R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F8R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F8R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F8R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F8R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F8R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F8R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F8R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F8R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F8R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F8R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F8R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F8R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F8R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F8R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F8R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F8R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F8R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F9R2 register *******************/ -#define CAN_F9R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F9R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F9R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F9R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F9R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F9R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F9R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F9R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F9R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F9R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F9R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F9R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F9R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F9R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F9R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F9R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F9R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F9R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F9R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F9R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F9R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F9R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F9R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F9R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F9R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F9R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F9R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F9R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F9R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F9R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F9R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F9R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F10R2 register ******************/ -#define CAN_F10R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F10R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F10R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F10R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F10R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F10R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F10R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F10R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F10R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F10R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F10R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F10R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F10R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F10R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F10R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F10R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F10R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F10R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F10R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F10R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F10R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F10R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F10R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F10R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F10R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F10R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F10R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F10R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F10R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F10R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F10R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F10R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F11R2 register ******************/ -#define CAN_F11R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F11R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F11R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F11R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F11R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F11R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F11R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F11R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F11R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F11R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F11R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F11R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F11R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F11R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F11R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F11R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F11R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F11R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F11R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F11R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F11R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F11R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F11R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F11R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F11R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F11R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F11R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F11R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F11R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F11R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F11R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F11R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F12R2 register ******************/ -#define CAN_F12R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F12R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F12R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F12R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F12R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F12R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F12R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F12R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F12R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F12R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F12R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F12R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F12R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F12R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F12R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F12R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F12R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F12R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F12R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F12R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F12R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F12R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F12R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F12R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F12R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F12R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F12R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F12R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F12R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F12R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F12R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F12R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************* Bit definition for CAN_F13R2 register ******************/ -#define CAN_F13R2_FB0 ((uint32_t)0x00000001) /* Filter bit 0 */ -#define CAN_F13R2_FB1 ((uint32_t)0x00000002) /* Filter bit 1 */ -#define CAN_F13R2_FB2 ((uint32_t)0x00000004) /* Filter bit 2 */ -#define CAN_F13R2_FB3 ((uint32_t)0x00000008) /* Filter bit 3 */ -#define CAN_F13R2_FB4 ((uint32_t)0x00000010) /* Filter bit 4 */ -#define CAN_F13R2_FB5 ((uint32_t)0x00000020) /* Filter bit 5 */ -#define CAN_F13R2_FB6 ((uint32_t)0x00000040) /* Filter bit 6 */ -#define CAN_F13R2_FB7 ((uint32_t)0x00000080) /* Filter bit 7 */ -#define CAN_F13R2_FB8 ((uint32_t)0x00000100) /* Filter bit 8 */ -#define CAN_F13R2_FB9 ((uint32_t)0x00000200) /* Filter bit 9 */ -#define CAN_F13R2_FB10 ((uint32_t)0x00000400) /* Filter bit 10 */ -#define CAN_F13R2_FB11 ((uint32_t)0x00000800) /* Filter bit 11 */ -#define CAN_F13R2_FB12 ((uint32_t)0x00001000) /* Filter bit 12 */ -#define CAN_F13R2_FB13 ((uint32_t)0x00002000) /* Filter bit 13 */ -#define CAN_F13R2_FB14 ((uint32_t)0x00004000) /* Filter bit 14 */ -#define CAN_F13R2_FB15 ((uint32_t)0x00008000) /* Filter bit 15 */ -#define CAN_F13R2_FB16 ((uint32_t)0x00010000) /* Filter bit 16 */ -#define CAN_F13R2_FB17 ((uint32_t)0x00020000) /* Filter bit 17 */ -#define CAN_F13R2_FB18 ((uint32_t)0x00040000) /* Filter bit 18 */ -#define CAN_F13R2_FB19 ((uint32_t)0x00080000) /* Filter bit 19 */ -#define CAN_F13R2_FB20 ((uint32_t)0x00100000) /* Filter bit 20 */ -#define CAN_F13R2_FB21 ((uint32_t)0x00200000) /* Filter bit 21 */ -#define CAN_F13R2_FB22 ((uint32_t)0x00400000) /* Filter bit 22 */ -#define CAN_F13R2_FB23 ((uint32_t)0x00800000) /* Filter bit 23 */ -#define CAN_F13R2_FB24 ((uint32_t)0x01000000) /* Filter bit 24 */ -#define CAN_F13R2_FB25 ((uint32_t)0x02000000) /* Filter bit 25 */ -#define CAN_F13R2_FB26 ((uint32_t)0x04000000) /* Filter bit 26 */ -#define CAN_F13R2_FB27 ((uint32_t)0x08000000) /* Filter bit 27 */ -#define CAN_F13R2_FB28 ((uint32_t)0x10000000) /* Filter bit 28 */ -#define CAN_F13R2_FB29 ((uint32_t)0x20000000) /* Filter bit 29 */ -#define CAN_F13R2_FB30 ((uint32_t)0x40000000) /* Filter bit 30 */ -#define CAN_F13R2_FB31 ((uint32_t)0x80000000) /* Filter bit 31 */ - -/******************************************************************************/ -/* CRC Calculation Unit */ -/******************************************************************************/ - -/******************* Bit definition for CRC_DATAR register *********************/ -#define CRC_DATAR_DR ((uint32_t)0xFFFFFFFF) /* Data register bits */ - - -/******************* Bit definition for CRC_IDATAR register ********************/ -#define CRC_IDR_IDATAR ((uint8_t)0xFF) /* General-purpose 8-bit data register bits */ - - -/******************** Bit definition for CRC_CTLR register ********************/ -#define CRC_CTLR_RESET ((uint8_t)0x01) /* RESET bit */ - -/******************************************************************************/ -/* Digital to Analog Converter */ -/******************************************************************************/ - -/******************** Bit definition for DAC_CTLR register ********************/ -#define DAC_EN1 ((uint32_t)0x00000001) /* DAC channel1 enable */ -#define DAC_BOFF1 ((uint32_t)0x00000002) /* DAC channel1 output buffer disable */ -#define DAC_TEN1 ((uint32_t)0x00000004) /* DAC channel1 Trigger enable */ - -#define DAC_TSEL1 ((uint32_t)0x00000038) /* TSEL1[2:0] (DAC channel1 Trigger selection) */ -#define DAC_TSEL1_0 ((uint32_t)0x00000008) /* Bit 0 */ -#define DAC_TSEL1_1 ((uint32_t)0x00000010) /* Bit 1 */ -#define DAC_TSEL1_2 ((uint32_t)0x00000020) /* Bit 2 */ - -#define DAC_WAVE1 ((uint32_t)0x000000C0) /* WAVE1[1:0] (DAC channel1 noise/triangle wave generation enable) */ -#define DAC_WAVE1_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define DAC_WAVE1_1 ((uint32_t)0x00000080) /* Bit 1 */ - -#define DAC_MAMP1 ((uint32_t)0x00000F00) /* MAMP1[3:0] (DAC channel1 Mask/Amplitude selector) */ -#define DAC_MAMP1_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define DAC_MAMP1_1 ((uint32_t)0x00000200) /* Bit 1 */ -#define DAC_MAMP1_2 ((uint32_t)0x00000400) /* Bit 2 */ -#define DAC_MAMP1_3 ((uint32_t)0x00000800) /* Bit 3 */ - -#define DAC_DMAEN1 ((uint32_t)0x00001000) /* DAC channel1 DMA enable */ -#define DAC_EN2 ((uint32_t)0x00010000) /* DAC channel2 enable */ -#define DAC_BOFF2 ((uint32_t)0x00020000) /* DAC channel2 output buffer disable */ -#define DAC_TEN2 ((uint32_t)0x00040000) /* DAC channel2 Trigger enable */ - -#define DAC_TSEL2 ((uint32_t)0x00380000) /* TSEL2[2:0] (DAC channel2 Trigger selection) */ -#define DAC_TSEL2_0 ((uint32_t)0x00080000) /* Bit 0 */ -#define DAC_TSEL2_1 ((uint32_t)0x00100000) /* Bit 1 */ -#define DAC_TSEL2_2 ((uint32_t)0x00200000) /* Bit 2 */ - -#define DAC_WAVE2 ((uint32_t)0x00C00000) /* WAVE2[1:0] (DAC channel2 noise/triangle wave generation enable) */ -#define DAC_WAVE2_0 ((uint32_t)0x00400000) /* Bit 0 */ -#define DAC_WAVE2_1 ((uint32_t)0x00800000) /* Bit 1 */ - -#define DAC_MAMP2 ((uint32_t)0x0F000000) /* MAMP2[3:0] (DAC channel2 Mask/Amplitude selector) */ -#define DAC_MAMP2_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define DAC_MAMP2_1 ((uint32_t)0x02000000) /* Bit 1 */ -#define DAC_MAMP2_2 ((uint32_t)0x04000000) /* Bit 2 */ -#define DAC_MAMP2_3 ((uint32_t)0x08000000) /* Bit 3 */ - -#define DAC_DMAEN2 ((uint32_t)0x10000000) /* DAC channel2 DMA enabled */ - -/***************** Bit definition for DAC_SWTR register ******************/ -#define DAC_SWTRIG1 ((uint8_t)0x01) /* DAC channel1 software trigger */ -#define DAC_SWTRIG2 ((uint8_t)0x02) /* DAC channel2 software trigger */ - -/***************** Bit definition for DAC_R12BDHR1 register ******************/ -#define DAC_DHR12R1 ((uint16_t)0x0FFF) /* DAC channel1 12-bit Right aligned data */ - -/***************** Bit definition for DAC_L12BDHR1 register ******************/ -#define DAC_DHR12L1 ((uint16_t)0xFFF0) /* DAC channel1 12-bit Left aligned data */ - -/****************** Bit definition for DAC_R8BDHR1 register ******************/ -#define DAC_DHR8R1 ((uint8_t)0xFF) /* DAC channel1 8-bit Right aligned data */ - -/***************** Bit definition for DAC_R12BDHR2 register ******************/ -#define DAC_DHR12R2 ((uint16_t)0x0FFF) /* DAC channel2 12-bit Right aligned data */ - -/***************** Bit definition for DAC_L12BDHR2 register ******************/ -#define DAC_DHR12L2 ((uint16_t)0xFFF0) /* DAC channel2 12-bit Left aligned data */ - -/****************** Bit definition for DAC_R8BDHR2 register ******************/ -#define DAC_DHR8R2 ((uint8_t)0xFF) /* DAC channel2 8-bit Right aligned data */ - -/***************** Bit definition for DAC_RD12BDHR register ******************/ -#define DAC_RD12BDHR_DACC1DHR ((uint32_t)0x00000FFF) /* DAC channel1 12-bit Right aligned data */ -#define DAC_RD12BDHR_DACC2DHR ((uint32_t)0x0FFF0000) /* DAC channel2 12-bit Right aligned data */ - -/***************** Bit definition for DAC_LD12BDHR register ******************/ -#define DAC_LD12BDHR_DACC1DHR ((uint32_t)0x0000FFF0) /* DAC channel1 12-bit Left aligned data */ -#define DAC_LD12BDHR_DACC2DHR ((uint32_t)0xFFF00000) /* DAC channel2 12-bit Left aligned data */ - -/****************** Bit definition for DAC_RD8BDHR register ******************/ -#define DAC_RD8BDHR_DACC1DHR ((uint16_t)0x00FF) /* DAC channel1 8-bit Right aligned data */ -#define DAC_RD8BDHR_DACC2DHR ((uint16_t)0xFF00) /* DAC channel2 8-bit Right aligned data */ - -/******************* Bit definition for DAC_DOR1 register *******************/ -#define DAC_DACC1DOR ((uint16_t)0x0FFF) /* DAC channel1 data output */ - -/******************* Bit definition for DAC_DOR2 register *******************/ -#define DAC_DACC2DOR ((uint16_t)0x0FFF) /* DAC channel2 data output */ - -/******************************************************************************/ -/* DMA Controller */ -/******************************************************************************/ - -/******************* Bit definition for DMA_INTFR register ********************/ -#define DMA_GIF1 ((uint32_t)0x00000001) /* Channel 1 Global interrupt flag */ -#define DMA_TCIF1 ((uint32_t)0x00000002) /* Channel 1 Transfer Complete flag */ -#define DMA_HTIF1 ((uint32_t)0x00000004) /* Channel 1 Half Transfer flag */ -#define DMA_TEIF1 ((uint32_t)0x00000008) /* Channel 1 Transfer Error flag */ -#define DMA_GIF2 ((uint32_t)0x00000010) /* Channel 2 Global interrupt flag */ -#define DMA_TCIF2 ((uint32_t)0x00000020) /* Channel 2 Transfer Complete flag */ -#define DMA_HTIF2 ((uint32_t)0x00000040) /* Channel 2 Half Transfer flag */ -#define DMA_TEIF2 ((uint32_t)0x00000080) /* Channel 2 Transfer Error flag */ -#define DMA_GIF3 ((uint32_t)0x00000100) /* Channel 3 Global interrupt flag */ -#define DMA_TCIF3 ((uint32_t)0x00000200) /* Channel 3 Transfer Complete flag */ -#define DMA_HTIF3 ((uint32_t)0x00000400) /* Channel 3 Half Transfer flag */ -#define DMA_TEIF3 ((uint32_t)0x00000800) /* Channel 3 Transfer Error flag */ -#define DMA_GIF4 ((uint32_t)0x00001000) /* Channel 4 Global interrupt flag */ -#define DMA_TCIF4 ((uint32_t)0x00002000) /* Channel 4 Transfer Complete flag */ -#define DMA_HTIF4 ((uint32_t)0x00004000) /* Channel 4 Half Transfer flag */ -#define DMA_TEIF4 ((uint32_t)0x00008000) /* Channel 4 Transfer Error flag */ -#define DMA_GIF5 ((uint32_t)0x00010000) /* Channel 5 Global interrupt flag */ -#define DMA_TCIF5 ((uint32_t)0x00020000) /* Channel 5 Transfer Complete flag */ -#define DMA_HTIF5 ((uint32_t)0x00040000) /* Channel 5 Half Transfer flag */ -#define DMA_TEIF5 ((uint32_t)0x00080000) /* Channel 5 Transfer Error flag */ -#define DMA_GIF6 ((uint32_t)0x00100000) /* Channel 6 Global interrupt flag */ -#define DMA_TCIF6 ((uint32_t)0x00200000) /* Channel 6 Transfer Complete flag */ -#define DMA_HTIF6 ((uint32_t)0x00400000) /* Channel 6 Half Transfer flag */ -#define DMA_TEIF6 ((uint32_t)0x00800000) /* Channel 6 Transfer Error flag */ -#define DMA_GIF7 ((uint32_t)0x01000000) /* Channel 7 Global interrupt flag */ -#define DMA_TCIF7 ((uint32_t)0x02000000) /* Channel 7 Transfer Complete flag */ -#define DMA_HTIF7 ((uint32_t)0x04000000) /* Channel 7 Half Transfer flag */ -#define DMA_TEIF7 ((uint32_t)0x08000000) /* Channel 7 Transfer Error flag */ - -/******************* Bit definition for DMA_INTFCR register *******************/ -#define DMA_CGIF1 ((uint32_t)0x00000001) /* Channel 1 Global interrupt clear */ -#define DMA_CTCIF1 ((uint32_t)0x00000002) /* Channel 1 Transfer Complete clear */ -#define DMA_CHTIF1 ((uint32_t)0x00000004) /* Channel 1 Half Transfer clear */ -#define DMA_CTEIF1 ((uint32_t)0x00000008) /* Channel 1 Transfer Error clear */ -#define DMA_CGIF2 ((uint32_t)0x00000010) /* Channel 2 Global interrupt clear */ -#define DMA_CTCIF2 ((uint32_t)0x00000020) /* Channel 2 Transfer Complete clear */ -#define DMA_CHTIF2 ((uint32_t)0x00000040) /* Channel 2 Half Transfer clear */ -#define DMA_CTEIF2 ((uint32_t)0x00000080) /* Channel 2 Transfer Error clear */ -#define DMA_CGIF3 ((uint32_t)0x00000100) /* Channel 3 Global interrupt clear */ -#define DMA_CTCIF3 ((uint32_t)0x00000200) /* Channel 3 Transfer Complete clear */ -#define DMA_CHTIF3 ((uint32_t)0x00000400) /* Channel 3 Half Transfer clear */ -#define DMA_CTEIF3 ((uint32_t)0x00000800) /* Channel 3 Transfer Error clear */ -#define DMA_CGIF4 ((uint32_t)0x00001000) /* Channel 4 Global interrupt clear */ -#define DMA_CTCIF4 ((uint32_t)0x00002000) /* Channel 4 Transfer Complete clear */ -#define DMA_CHTIF4 ((uint32_t)0x00004000) /* Channel 4 Half Transfer clear */ -#define DMA_CTEIF4 ((uint32_t)0x00008000) /* Channel 4 Transfer Error clear */ -#define DMA_CGIF5 ((uint32_t)0x00010000) /* Channel 5 Global interrupt clear */ -#define DMA_CTCIF5 ((uint32_t)0x00020000) /* Channel 5 Transfer Complete clear */ -#define DMA_CHTIF5 ((uint32_t)0x00040000) /* Channel 5 Half Transfer clear */ -#define DMA_CTEIF5 ((uint32_t)0x00080000) /* Channel 5 Transfer Error clear */ -#define DMA_CGIF6 ((uint32_t)0x00100000) /* Channel 6 Global interrupt clear */ -#define DMA_CTCIF6 ((uint32_t)0x00200000) /* Channel 6 Transfer Complete clear */ -#define DMA_CHTIF6 ((uint32_t)0x00400000) /* Channel 6 Half Transfer clear */ -#define DMA_CTEIF6 ((uint32_t)0x00800000) /* Channel 6 Transfer Error clear */ -#define DMA_CGIF7 ((uint32_t)0x01000000) /* Channel 7 Global interrupt clear */ -#define DMA_CTCIF7 ((uint32_t)0x02000000) /* Channel 7 Transfer Complete clear */ -#define DMA_CHTIF7 ((uint32_t)0x04000000) /* Channel 7 Half Transfer clear */ -#define DMA_CTEIF7 ((uint32_t)0x08000000) /* Channel 7 Transfer Error clear */ - -/******************* Bit definition for DMA_CFGR1 register *******************/ -#define DMA_CFGR1_EN ((uint16_t)0x0001) /* Channel enable*/ -#define DMA_CFGR1_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFGR1_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFGR1_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFGR1_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFGR1_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFGR1_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFGR1_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFGR1_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFGR1_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFGR1_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFGR1_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFGR1_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFGR1_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFGR1_PL ((uint16_t)0x3000) /* PL[1:0] bits(Channel Priority level) */ -#define DMA_CFGR1_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFGR1_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFGR1_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/******************* Bit definition for DMA_CFGR2 register *******************/ -#define DMA_CFGR2_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFGR2_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFGR2_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFGR2_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFGR2_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFGR2_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFGR2_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFGR2_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFGR2_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFGR2_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFGR2_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFGR2_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFGR2_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFGR2_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFGR2_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFGR2_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFGR2_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFGR2_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/******************* Bit definition for DMA_CFGR3 register *******************/ -#define DMA_CFGR3_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFGR3_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFGR3_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFGR3_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFGR3_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFGR3_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFGR3_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFGR3_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFGR3_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFGR3_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFGR3_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFGR3_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFGR3_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFGR3_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFGR3_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFGR3_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFGR3_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFGR3_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/******************* Bit definition for DMA_CFG4 register *******************/ -#define DMA_CFG4_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFG4_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFG4_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFG4_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFG4_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFG4_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFG4_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFG4_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFG4_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFG4_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFG4_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFG4_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFG4_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFG4_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFG4_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFG4_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFG4_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFG4_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/****************** Bit definition for DMA_CFG5 register *******************/ -#define DMA_CFG5_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFG5_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFG5_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFG5_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFG5_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFG5_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFG5_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFG5_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFG5_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFG5_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFG5_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFG5_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFG5_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFG5_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFG5_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFG5_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFG5_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFG5_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode enable */ - -/******************* Bit definition for DMA_CFG6 register *******************/ -#define DMA_CFG6_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFG6_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFG6_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFG6_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFG6_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFG6_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFG6_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFG6_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFG6_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFG6_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFG6_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFG6_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFG6_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFG6_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFG6_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFG6_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFG6_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFG6_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/******************* Bit definition for DMA_CFG7 register *******************/ -#define DMA_CFG7_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFG7_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFG7_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFG7_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFG7_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFG7_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFG7_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFG7_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFG7_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFG7_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFG7_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFG7_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFG7_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFG7_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFG7_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFG7_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFG7_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFG7_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode enable */ - -/****************** Bit definition for DMA_CNTR1 register ******************/ -#define DMA_CNTR1_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR2 register ******************/ -#define DMA_CNTR2_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR3 register ******************/ -#define DMA_CNTR3_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR4 register ******************/ -#define DMA_CNTR4_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR5 register ******************/ -#define DMA_CNTR5_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR6 register ******************/ -#define DMA_CNTR6_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR7 register ******************/ -#define DMA_CNTR7_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_PADDR1 register *******************/ -#define DMA_PADDR1_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR2 register *******************/ -#define DMA_PADDR2_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR3 register *******************/ -#define DMA_PADDR3_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - - -/****************** Bit definition for DMA_PADDR4 register *******************/ -#define DMA_PADDR4_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR5 register *******************/ -#define DMA_PADDR5_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR6 register *******************/ -#define DMA_PADDR6_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - - -/****************** Bit definition for DMA_PADDR7 register *******************/ -#define DMA_PADDR7_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_MADDR1 register *******************/ -#define DMA_MADDR1_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR2 register *******************/ -#define DMA_MADDR2_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR3 register *******************/ -#define DMA_MADDR3_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - - -/****************** Bit definition for DMA_MADDR4 register *******************/ -#define DMA_MADDR4_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR5 register *******************/ -#define DMA_MADDR5_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR6 register *******************/ -#define DMA_MADDR6_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR7 register *******************/ -#define DMA_MADDR7_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/******************************************************************************/ -/* Debug MCU */ -/******************************************************************************/ - -/**************** Bit definition for DBGMCU_IDCODE register *****************/ -#define DBGMCU_IDCODE_DEV_ID ((uint32_t)0x00000FFF) /* Device Identifier */ - -#define DBGMCU_IDCODE_REV_ID ((uint32_t)0xFFFF0000) /* REV_ID[15:0] bits (Revision Identifier) */ -#define DBGMCU_IDCODE_REV_ID_0 ((uint32_t)0x00010000) /* Bit 0 */ -#define DBGMCU_IDCODE_REV_ID_1 ((uint32_t)0x00020000) /* Bit 1 */ -#define DBGMCU_IDCODE_REV_ID_2 ((uint32_t)0x00040000) /* Bit 2 */ -#define DBGMCU_IDCODE_REV_ID_3 ((uint32_t)0x00080000) /* Bit 3 */ -#define DBGMCU_IDCODE_REV_ID_4 ((uint32_t)0x00100000) /* Bit 4 */ -#define DBGMCU_IDCODE_REV_ID_5 ((uint32_t)0x00200000) /* Bit 5 */ -#define DBGMCU_IDCODE_REV_ID_6 ((uint32_t)0x00400000) /* Bit 6 */ -#define DBGMCU_IDCODE_REV_ID_7 ((uint32_t)0x00800000) /* Bit 7 */ -#define DBGMCU_IDCODE_REV_ID_8 ((uint32_t)0x01000000) /* Bit 8 */ -#define DBGMCU_IDCODE_REV_ID_9 ((uint32_t)0x02000000) /* Bit 9 */ -#define DBGMCU_IDCODE_REV_ID_10 ((uint32_t)0x04000000) /* Bit 10 */ -#define DBGMCU_IDCODE_REV_ID_11 ((uint32_t)0x08000000) /* Bit 11 */ -#define DBGMCU_IDCODE_REV_ID_12 ((uint32_t)0x10000000) /* Bit 12 */ -#define DBGMCU_IDCODE_REV_ID_13 ((uint32_t)0x20000000) /* Bit 13 */ -#define DBGMCU_IDCODE_REV_ID_14 ((uint32_t)0x40000000) /* Bit 14 */ -#define DBGMCU_IDCODE_REV_ID_15 ((uint32_t)0x80000000) /* Bit 15 */ - -/****************** Bit definition for DBGMCU_CFGR register *******************/ -#define DBGMCU_DBG_SLEEP ((uint32_t)0x00000001) /* Debug Sleep Mode */ -#define DBGMCU_DBG_STOP ((uint32_t)0x00000002) /* Debug Stop Mode */ -#define DBGMCU_DBG_STANDBY ((uint32_t)0x00000004) /* Debug Standby mode */ -#define DBGMCU_TRACE_IOEN ((uint32_t)0x00000020) /* Trace Pin Assignment Control */ - -#define DBGMCU_TRACE_MODE ((uint32_t)0x000000C0) /* TRACE_MODE[1:0] bits (Trace Pin Assignment Control) */ -#define DBGMCU_TRACE_MODE_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define DBGMCU_TRACE_MODE_1 ((uint32_t)0x00000080) /* Bit 1 */ - -#define DBGMCU_DBG_IWDG_STOP ((uint32_t)0x00000100) /* Debug Independent Watchdog stopped when Core is halted */ -#define DBGMCU_DBG_WWDG_STOP ((uint32_t)0x00000200) /* Debug Window Watchdog stopped when Core is halted */ -#define DBGMCU_DBG_TIM1_STOP ((uint32_t)0x00000400) /* TIM1 counter stopped when core is halted */ -#define DBGMCU_DBG_TIM2_STOP ((uint32_t)0x00000800) /* TIM2 counter stopped when core is halted */ -#define DBGMCU_DBG_TIM3_STOP ((uint32_t)0x00001000) /* TIM3 counter stopped when core is halted */ -#define DBGMCU_DBG_TIM4_STOP ((uint32_t)0x00002000) /* TIM4 counter stopped when core is halted */ -#define DBGMCU_DBG_CAN1_STOP ((uint32_t)0x00004000) /* Debug CAN1 stopped when Core is halted */ -#define DBGMCU_DBG_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00008000) /* SMBUS timeout mode stopped when Core is halted */ -#define DBGMCU_DBG_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00010000) /* SMBUS timeout mode stopped when Core is halted */ -#define DBGMCU_DBG_TIM8_STOP ((uint32_t)0x00020000) /* TIM8 counter stopped when core is halted */ -#define DBGMCU_DBG_TIM5_STOP ((uint32_t)0x00040000) /* TIM5 counter stopped when core is halted */ -#define DBGMCU_DBG_TIM6_STOP ((uint32_t)0x00080000) /* TIM6 counter stopped when core is halted */ -#define DBGMCU_DBG_TIM7_STOP ((uint32_t)0x00100000) /* TIM7 counter stopped when core is halted */ -#define DBGMCU_DBG_CAN2_STOP ((uint32_t)0x00200000) /* Debug CAN2 stopped when Core is halted */ -#define DBGMCU_DBG_TIM15_STOP ((uint32_t)0x00400000) /* Debug TIM15 stopped when Core is halted */ -#define DBGMCU_DBG_TIM16_STOP ((uint32_t)0x00800000) /* Debug TIM16 stopped when Core is halted */ -#define DBGMCU_DBG_TIM17_STOP ((uint32_t)0x01000000) /* Debug TIM17 stopped when Core is halted */ -#define DBGMCU_DBG_TIM12_STOP ((uint32_t)0x02000000) /* Debug TIM12 stopped when Core is halted */ -#define DBGMCU_DBG_TIM13_STOP ((uint32_t)0x04000000) /* Debug TIM13 stopped when Core is halted */ -#define DBGMCU_DBG_TIM14_STOP ((uint32_t)0x08000000) /* Debug TIM14 stopped when Core is halted */ -#define DBGMCU_DBG_TIM9_STOP ((uint32_t)0x10000000) /* Debug TIM9 stopped when Core is halted */ -#define DBGMCU_DBG_TIM10_STOP ((uint32_t)0x20000000) /* Debug TIM10 stopped when Core is halted */ -#define DBGMCU_DBG_TIM11_STOP ((uint32_t)0x40000000) /* Debug TIM11 stopped when Core is halted */ - -/******************************************************************************/ -/* External Interrupt/Event Controller */ -/******************************************************************************/ - -/******************* Bit definition for EXTI_INTENR register *******************/ -#define EXTI_INTENR_MR0 ((uint32_t)0x00000001) /* Interrupt Mask on line 0 */ -#define EXTI_INTENR_MR1 ((uint32_t)0x00000002) /* Interrupt Mask on line 1 */ -#define EXTI_INTENR_MR2 ((uint32_t)0x00000004) /* Interrupt Mask on line 2 */ -#define EXTI_INTENR_MR3 ((uint32_t)0x00000008) /* Interrupt Mask on line 3 */ -#define EXTI_INTENR_MR4 ((uint32_t)0x00000010) /* Interrupt Mask on line 4 */ -#define EXTI_INTENR_MR5 ((uint32_t)0x00000020) /* Interrupt Mask on line 5 */ -#define EXTI_INTENR_MR6 ((uint32_t)0x00000040) /* Interrupt Mask on line 6 */ -#define EXTI_INTENR_MR7 ((uint32_t)0x00000080) /* Interrupt Mask on line 7 */ -#define EXTI_INTENR_MR8 ((uint32_t)0x00000100) /* Interrupt Mask on line 8 */ -#define EXTI_INTENR_MR9 ((uint32_t)0x00000200) /* Interrupt Mask on line 9 */ -#define EXTI_INTENR_MR10 ((uint32_t)0x00000400) /* Interrupt Mask on line 10 */ -#define EXTI_INTENR_MR11 ((uint32_t)0x00000800) /* Interrupt Mask on line 11 */ -#define EXTI_INTENR_MR12 ((uint32_t)0x00001000) /* Interrupt Mask on line 12 */ -#define EXTI_INTENR_MR13 ((uint32_t)0x00002000) /* Interrupt Mask on line 13 */ -#define EXTI_INTENR_MR14 ((uint32_t)0x00004000) /* Interrupt Mask on line 14 */ -#define EXTI_INTENR_MR15 ((uint32_t)0x00008000) /* Interrupt Mask on line 15 */ -#define EXTI_INTENR_MR16 ((uint32_t)0x00010000) /* Interrupt Mask on line 16 */ -#define EXTI_INTENR_MR17 ((uint32_t)0x00020000) /* Interrupt Mask on line 17 */ -#define EXTI_INTENR_MR18 ((uint32_t)0x00040000) /* Interrupt Mask on line 18 */ -#define EXTI_INTENR_MR19 ((uint32_t)0x00080000) /* Interrupt Mask on line 19 */ - -/******************* Bit definition for EXTI_EVENR register *******************/ -#define EXTI_EVENR_MR0 ((uint32_t)0x00000001) /* Event Mask on line 0 */ -#define EXTI_EVENR_MR1 ((uint32_t)0x00000002) /* Event Mask on line 1 */ -#define EXTI_EVENR_MR2 ((uint32_t)0x00000004) /* Event Mask on line 2 */ -#define EXTI_EVENR_MR3 ((uint32_t)0x00000008) /* Event Mask on line 3 */ -#define EXTI_EVENR_MR4 ((uint32_t)0x00000010) /* Event Mask on line 4 */ -#define EXTI_EVENR_MR5 ((uint32_t)0x00000020) /* Event Mask on line 5 */ -#define EXTI_EVENR_MR6 ((uint32_t)0x00000040) /* Event Mask on line 6 */ -#define EXTI_EVENR_MR7 ((uint32_t)0x00000080) /* Event Mask on line 7 */ -#define EXTI_EVENR_MR8 ((uint32_t)0x00000100) /* Event Mask on line 8 */ -#define EXTI_EVENR_MR9 ((uint32_t)0x00000200) /* Event Mask on line 9 */ -#define EXTI_EVENR_MR10 ((uint32_t)0x00000400) /* Event Mask on line 10 */ -#define EXTI_EVENR_MR11 ((uint32_t)0x00000800) /* Event Mask on line 11 */ -#define EXTI_EVENR_MR12 ((uint32_t)0x00001000) /* Event Mask on line 12 */ -#define EXTI_EVENR_MR13 ((uint32_t)0x00002000) /* Event Mask on line 13 */ -#define EXTI_EVENR_MR14 ((uint32_t)0x00004000) /* Event Mask on line 14 */ -#define EXTI_EVENR_MR15 ((uint32_t)0x00008000) /* Event Mask on line 15 */ -#define EXTI_EVENR_MR16 ((uint32_t)0x00010000) /* Event Mask on line 16 */ -#define EXTI_EVENR_MR17 ((uint32_t)0x00020000) /* Event Mask on line 17 */ -#define EXTI_EVENR_MR18 ((uint32_t)0x00040000) /* Event Mask on line 18 */ -#define EXTI_EVENR_MR19 ((uint32_t)0x00080000) /* Event Mask on line 19 */ - -/****************** Bit definition for EXTI_RTENR register *******************/ -#define EXTI_RTENR_TR0 ((uint32_t)0x00000001) /* Rising trigger event configuration bit of line 0 */ -#define EXTI_RTENR_TR1 ((uint32_t)0x00000002) /* Rising trigger event configuration bit of line 1 */ -#define EXTI_RTENR_TR2 ((uint32_t)0x00000004) /* Rising trigger event configuration bit of line 2 */ -#define EXTI_RTENR_TR3 ((uint32_t)0x00000008) /* Rising trigger event configuration bit of line 3 */ -#define EXTI_RTENR_TR4 ((uint32_t)0x00000010) /* Rising trigger event configuration bit of line 4 */ -#define EXTI_RTENR_TR5 ((uint32_t)0x00000020) /* Rising trigger event configuration bit of line 5 */ -#define EXTI_RTENR_TR6 ((uint32_t)0x00000040) /* Rising trigger event configuration bit of line 6 */ -#define EXTI_RTENR_TR7 ((uint32_t)0x00000080) /* Rising trigger event configuration bit of line 7 */ -#define EXTI_RTENR_TR8 ((uint32_t)0x00000100) /* Rising trigger event configuration bit of line 8 */ -#define EXTI_RTENR_TR9 ((uint32_t)0x00000200) /* Rising trigger event configuration bit of line 9 */ -#define EXTI_RTENR_TR10 ((uint32_t)0x00000400) /* Rising trigger event configuration bit of line 10 */ -#define EXTI_RTENR_TR11 ((uint32_t)0x00000800) /* Rising trigger event configuration bit of line 11 */ -#define EXTI_RTENR_TR12 ((uint32_t)0x00001000) /* Rising trigger event configuration bit of line 12 */ -#define EXTI_RTENR_TR13 ((uint32_t)0x00002000) /* Rising trigger event configuration bit of line 13 */ -#define EXTI_RTENR_TR14 ((uint32_t)0x00004000) /* Rising trigger event configuration bit of line 14 */ -#define EXTI_RTENR_TR15 ((uint32_t)0x00008000) /* Rising trigger event configuration bit of line 15 */ -#define EXTI_RTENR_TR16 ((uint32_t)0x00010000) /* Rising trigger event configuration bit of line 16 */ -#define EXTI_RTENR_TR17 ((uint32_t)0x00020000) /* Rising trigger event configuration bit of line 17 */ -#define EXTI_RTENR_TR18 ((uint32_t)0x00040000) /* Rising trigger event configuration bit of line 18 */ -#define EXTI_RTENR_TR19 ((uint32_t)0x00080000) /* Rising trigger event configuration bit of line 19 */ - -/****************** Bit definition for EXTI_FTENR register *******************/ -#define EXTI_FTENR_TR0 ((uint32_t)0x00000001) /* Falling trigger event configuration bit of line 0 */ -#define EXTI_FTENR_TR1 ((uint32_t)0x00000002) /* Falling trigger event configuration bit of line 1 */ -#define EXTI_FTENR_TR2 ((uint32_t)0x00000004) /* Falling trigger event configuration bit of line 2 */ -#define EXTI_FTENR_TR3 ((uint32_t)0x00000008) /* Falling trigger event configuration bit of line 3 */ -#define EXTI_FTENR_TR4 ((uint32_t)0x00000010) /* Falling trigger event configuration bit of line 4 */ -#define EXTI_FTENR_TR5 ((uint32_t)0x00000020) /* Falling trigger event configuration bit of line 5 */ -#define EXTI_FTENR_TR6 ((uint32_t)0x00000040) /* Falling trigger event configuration bit of line 6 */ -#define EXTI_FTENR_TR7 ((uint32_t)0x00000080) /* Falling trigger event configuration bit of line 7 */ -#define EXTI_FTENR_TR8 ((uint32_t)0x00000100) /* Falling trigger event configuration bit of line 8 */ -#define EXTI_FTENR_TR9 ((uint32_t)0x00000200) /* Falling trigger event configuration bit of line 9 */ -#define EXTI_FTENR_TR10 ((uint32_t)0x00000400) /* Falling trigger event configuration bit of line 10 */ -#define EXTI_FTENR_TR11 ((uint32_t)0x00000800) /* Falling trigger event configuration bit of line 11 */ -#define EXTI_FTENR_TR12 ((uint32_t)0x00001000) /* Falling trigger event configuration bit of line 12 */ -#define EXTI_FTENR_TR13 ((uint32_t)0x00002000) /* Falling trigger event configuration bit of line 13 */ -#define EXTI_FTENR_TR14 ((uint32_t)0x00004000) /* Falling trigger event configuration bit of line 14 */ -#define EXTI_FTENR_TR15 ((uint32_t)0x00008000) /* Falling trigger event configuration bit of line 15 */ -#define EXTI_FTENR_TR16 ((uint32_t)0x00010000) /* Falling trigger event configuration bit of line 16 */ -#define EXTI_FTENR_TR17 ((uint32_t)0x00020000) /* Falling trigger event configuration bit of line 17 */ -#define EXTI_FTENR_TR18 ((uint32_t)0x00040000) /* Falling trigger event configuration bit of line 18 */ -#define EXTI_FTENR_TR19 ((uint32_t)0x00080000) /* Falling trigger event configuration bit of line 19 */ - -/****************** Bit definition for EXTI_SWIEVR register ******************/ -#define EXTI_SWIEVR_SWIEVR0 ((uint32_t)0x00000001) /* Software Interrupt on line 0 */ -#define EXTI_SWIEVR_SWIEVR1 ((uint32_t)0x00000002) /* Software Interrupt on line 1 */ -#define EXTI_SWIEVR_SWIEVR2 ((uint32_t)0x00000004) /* Software Interrupt on line 2 */ -#define EXTI_SWIEVR_SWIEVR3 ((uint32_t)0x00000008) /* Software Interrupt on line 3 */ -#define EXTI_SWIEVR_SWIEVR4 ((uint32_t)0x00000010) /* Software Interrupt on line 4 */ -#define EXTI_SWIEVR_SWIEVR5 ((uint32_t)0x00000020) /* Software Interrupt on line 5 */ -#define EXTI_SWIEVR_SWIEVR6 ((uint32_t)0x00000040) /* Software Interrupt on line 6 */ -#define EXTI_SWIEVR_SWIEVR7 ((uint32_t)0x00000080) /* Software Interrupt on line 7 */ -#define EXTI_SWIEVR_SWIEVR8 ((uint32_t)0x00000100) /* Software Interrupt on line 8 */ -#define EXTI_SWIEVR_SWIEVR9 ((uint32_t)0x00000200) /* Software Interrupt on line 9 */ -#define EXTI_SWIEVR_SWIEVR10 ((uint32_t)0x00000400) /* Software Interrupt on line 10 */ -#define EXTI_SWIEVR_SWIEVR11 ((uint32_t)0x00000800) /* Software Interrupt on line 11 */ -#define EXTI_SWIEVR_SWIEVR12 ((uint32_t)0x00001000) /* Software Interrupt on line 12 */ -#define EXTI_SWIEVR_SWIEVR13 ((uint32_t)0x00002000) /* Software Interrupt on line 13 */ -#define EXTI_SWIEVR_SWIEVR14 ((uint32_t)0x00004000) /* Software Interrupt on line 14 */ -#define EXTI_SWIEVR_SWIEVR15 ((uint32_t)0x00008000) /* Software Interrupt on line 15 */ -#define EXTI_SWIEVR_SWIEVR16 ((uint32_t)0x00010000) /* Software Interrupt on line 16 */ -#define EXTI_SWIEVR_SWIEVR17 ((uint32_t)0x00020000) /* Software Interrupt on line 17 */ -#define EXTI_SWIEVR_SWIEVR18 ((uint32_t)0x00040000) /* Software Interrupt on line 18 */ -#define EXTI_SWIEVR_SWIEVR19 ((uint32_t)0x00080000) /* Software Interrupt on line 19 */ - -/******************* Bit definition for EXTI_INTFR register ********************/ -#define EXTI_INTF_INTF0 ((uint32_t)0x00000001) /* Pending bit for line 0 */ -#define EXTI_INTF_INTF1 ((uint32_t)0x00000002) /* Pending bit for line 1 */ -#define EXTI_INTF_INTF2 ((uint32_t)0x00000004) /* Pending bit for line 2 */ -#define EXTI_INTF_INTF3 ((uint32_t)0x00000008) /* Pending bit for line 3 */ -#define EXTI_INTF_INTF4 ((uint32_t)0x00000010) /* Pending bit for line 4 */ -#define EXTI_INTF_INTF5 ((uint32_t)0x00000020) /* Pending bit for line 5 */ -#define EXTI_INTF_INTF6 ((uint32_t)0x00000040) /* Pending bit for line 6 */ -#define EXTI_INTF_INTF7 ((uint32_t)0x00000080) /* Pending bit for line 7 */ -#define EXTI_INTF_INTF8 ((uint32_t)0x00000100) /* Pending bit for line 8 */ -#define EXTI_INTF_INTF9 ((uint32_t)0x00000200) /* Pending bit for line 9 */ -#define EXTI_INTF_INTF10 ((uint32_t)0x00000400) /* Pending bit for line 10 */ -#define EXTI_INTF_INTF11 ((uint32_t)0x00000800) /* Pending bit for line 11 */ -#define EXTI_INTF_INTF12 ((uint32_t)0x00001000) /* Pending bit for line 12 */ -#define EXTI_INTF_INTF13 ((uint32_t)0x00002000) /* Pending bit for line 13 */ -#define EXTI_INTF_INTF14 ((uint32_t)0x00004000) /* Pending bit for line 14 */ -#define EXTI_INTF_INTF15 ((uint32_t)0x00008000) /* Pending bit for line 15 */ -#define EXTI_INTF_INTF16 ((uint32_t)0x00010000) /* Pending bit for line 16 */ -#define EXTI_INTF_INTF17 ((uint32_t)0x00020000) /* Pending bit for line 17 */ -#define EXTI_INTF_INTF18 ((uint32_t)0x00040000) /* Pending bit for line 18 */ -#define EXTI_INTF_INTF19 ((uint32_t)0x00080000) /* Pending bit for line 19 */ - -/******************************************************************************/ -/* FLASH and Option Bytes Registers */ -/******************************************************************************/ - - -/******************* Bit definition for FLASH_ACTLR register ******************/ -#define FLASH_ACTLR_LATENCY ((uint8_t)0x03) /* LATENCY[2:0] bits (Latency) */ -#define FLASH_ACTLR_LATENCY_0 ((uint8_t)0x00) /* Bit 0 */ -#define FLASH_ACTLR_LATENCY_1 ((uint8_t)0x01) /* Bit 0 */ -#define FLASH_ACTLR_LATENCY_2 ((uint8_t)0x02) /* Bit 1 */ - -#define FLASH_ACTLR_HLFCYA ((uint8_t)0x08) /* Flash Half Cycle Access Enable */ -#define FLASH_ACTLR_PRFTBE ((uint8_t)0x10) /* Prefetch Buffer Enable */ -#define FLASH_ACTLR_PRFTBS ((uint8_t)0x20) /* Prefetch Buffer Status */ - -/****************** Bit definition for FLASH_KEYR register ******************/ -#define FLASH_KEYR_FKEYR ((uint32_t)0xFFFFFFFF) /* FPEC Key */ - -/***************** Bit definition for FLASH_OBKEYR register ****************/ -#define FLASH_OBKEYR_OBKEYR ((uint32_t)0xFFFFFFFF) /* Option Byte Key */ - -/****************** Bit definition for FLASH_STATR register *******************/ -#define FLASH_STATR_BSY ((uint8_t)0x01) /* Busy */ -#define FLASH_STATR_PGERR ((uint8_t)0x04) /* Programming Error */ -#define FLASH_STATR_WRPRTERR ((uint8_t)0x10) /* Write Protection Error */ -#define FLASH_STATR_EOP ((uint8_t)0x20) /* End of operation */ - -/******************* Bit definition for FLASH_CTLR register *******************/ -#define FLASH_CTLR_PG ((uint16_t)0x0001) /* Programming */ -#define FLASH_CTLR_PER ((uint16_t)0x0002) /* Page Erase */ -#define FLASH_CTLR_MER ((uint16_t)0x0004) /* Mass Erase */ -#define FLASH_CTLR_OPTPG ((uint16_t)0x0010) /* Option Byte Programming */ -#define FLASH_CTLR_OPTER ((uint16_t)0x0020) /* Option Byte Erase */ -#define FLASH_CTLR_STRT ((uint16_t)0x0040) /* Start */ -#define FLASH_CTLR_LOCK ((uint16_t)0x0080) /* Lock */ -#define FLASH_CTLR_OPTWRE ((uint16_t)0x0200) /* Option Bytes Write Enable */ -#define FLASH_CTLR_ERRIE ((uint16_t)0x0400) /* Error Interrupt Enable */ -#define FLASH_CTLR_EOPIE ((uint16_t)0x1000) /* End of operation interrupt enable */ -#define FLASH_CTLR_PAGE_PG ((uint16_t)0x00010000) /* Page Programming 128Byte */ -#define FLASH_CTLR_PAGE_ER ((uint16_t)0x00020000) /* Page Erase 128Byte */ -#define FLASH_CTLR_BUF_LOAD ((uint16_t)0x00040000) /* Buffer Load */ -#define FLASH_CTLR_BUF_RST ((uint16_t)0x00080000) /* Buffer Reset */ - -/******************* Bit definition for FLASH_ADDR register *******************/ -#define FLASH_ADDR_FAR ((uint32_t)0xFFFFFFFF) /* Flash Address */ - -/****************** Bit definition for FLASH_OBR register *******************/ -#define FLASH_OBR_OPTERR ((uint16_t)0x0001) /* Option Byte Error */ -#define FLASH_OBR_RDPRT ((uint16_t)0x0002) /* Read protection */ - -#define FLASH_OBR_USER ((uint16_t)0x03FC) /* User Option Bytes */ -#define FLASH_OBR_WDG_SW ((uint16_t)0x0004) /* WDG_SW */ -#define FLASH_OBR_nRST_STOP ((uint16_t)0x0008) /* nRST_STOP */ -#define FLASH_OBR_nRST_STDBY ((uint16_t)0x0010) /* nRST_STDBY */ -#define FLASH_OBR_BFB2 ((uint16_t)0x0020) /* BFB2 */ - -/****************** Bit definition for FLASH_WPR register ******************/ -#define FLASH_WPR_WRP ((uint32_t)0xFFFFFFFF) /* Write Protect */ - - -/****************** Bit definition for FLASH_RDPR register *******************/ -#define FLASH_RDPR_RDPR ((uint32_t)0x000000FF) /* Read protection option byte */ -#define FLASH_RDPR_nRDPR ((uint32_t)0x0000FF00) /* Read protection complemented option byte */ - -/****************** Bit definition for FLASH_USER register ******************/ -#define FLASH_USER_USER ((uint32_t)0x00FF0000) /* User option byte */ -#define FLASH_USER_nUSER ((uint32_t)0xFF000000) /* User complemented option byte */ - -/****************** Bit definition for FLASH_Data0 register *****************/ -#define FLASH_Data0_Data0 ((uint32_t)0x000000FF) /* User data storage option byte */ -#define FLASH_Data0_nData0 ((uint32_t)0x0000FF00) /* User data storage complemented option byte */ - -/****************** Bit definition for FLASH_Data1 register *****************/ -#define FLASH_Data1_Data1 ((uint32_t)0x00FF0000) /* User data storage option byte */ -#define FLASH_Data1_nData1 ((uint32_t)0xFF000000) /* User data storage complemented option byte */ - -/****************** Bit definition for FLASH_WRPR0 register ******************/ -#define FLASH_WRPR0_WRPR0 ((uint32_t)0x000000FF) /* Flash memory write protection option bytes */ -#define FLASH_WRPR0_nWRPR0 ((uint32_t)0x0000FF00) /* Flash memory write protection complemented option bytes */ - -/****************** Bit definition for FLASH_WRPR1 register ******************/ -#define FLASH_WRPR1_WRPR1 ((uint32_t)0x00FF0000) /* Flash memory write protection option bytes */ -#define FLASH_WRPR1_nWRPR1 ((uint32_t)0xFF000000) /* Flash memory write protection complemented option bytes */ - -/****************** Bit definition for FLASH_WRPR2 register ******************/ -#define FLASH_WRPR2_WRPR2 ((uint32_t)0x000000FF) /* Flash memory write protection option bytes */ -#define FLASH_WRPR2_nWRPR2 ((uint32_t)0x0000FF00) /* Flash memory write protection complemented option bytes */ - -/****************** Bit definition for FLASH_WRPR3 register ******************/ -#define FLASH_WRPR3_WRPR3 ((uint32_t)0x00FF0000) /* Flash memory write protection option bytes */ -#define FLASH_WRPR3_nWRPR3 ((uint32_t)0xFF000000) /* Flash memory write protection complemented option bytes */ - -/******************************************************************************/ -/* General Purpose and Alternate Function I/O */ -/******************************************************************************/ - -/******************* Bit definition for GPIO_CFGLR register *******************/ -#define GPIO_CFGLR_MODE ((uint32_t)0x33333333) /* Port x mode bits */ - -#define GPIO_CFGLR_MODE0 ((uint32_t)0x00000003) /* MODE0[1:0] bits (Port x mode bits, pin 0) */ -#define GPIO_CFGLR_MODE0_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define GPIO_CFGLR_MODE0_1 ((uint32_t)0x00000002) /* Bit 1 */ - -#define GPIO_CFGLR_MODE1 ((uint32_t)0x00000030) /* MODE1[1:0] bits (Port x mode bits, pin 1) */ -#define GPIO_CFGLR_MODE1_0 ((uint32_t)0x00000010) /* Bit 0 */ -#define GPIO_CFGLR_MODE1_1 ((uint32_t)0x00000020) /* Bit 1 */ - -#define GPIO_CFGLR_MODE2 ((uint32_t)0x00000300) /* MODE2[1:0] bits (Port x mode bits, pin 2) */ -#define GPIO_CFGLR_MODE2_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define GPIO_CFGLR_MODE2_1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define GPIO_CFGLR_MODE3 ((uint32_t)0x00003000) /* MODE3[1:0] bits (Port x mode bits, pin 3) */ -#define GPIO_CFGLR_MODE3_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define GPIO_CFGLR_MODE3_1 ((uint32_t)0x00002000) /* Bit 1 */ - -#define GPIO_CFGLR_MODE4 ((uint32_t)0x00030000) /* MODE4[1:0] bits (Port x mode bits, pin 4) */ -#define GPIO_CFGLR_MODE4_0 ((uint32_t)0x00010000) /* Bit 0 */ -#define GPIO_CFGLR_MODE4_1 ((uint32_t)0x00020000) /* Bit 1 */ - -#define GPIO_CFGLR_MODE5 ((uint32_t)0x00300000) /* MODE5[1:0] bits (Port x mode bits, pin 5) */ -#define GPIO_CFGLR_MODE5_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define GPIO_CFGLR_MODE5_1 ((uint32_t)0x00200000) /* Bit 1 */ - -#define GPIO_CFGLR_MODE6 ((uint32_t)0x03000000) /* MODE6[1:0] bits (Port x mode bits, pin 6) */ -#define GPIO_CFGLR_MODE6_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define GPIO_CFGLR_MODE6_1 ((uint32_t)0x02000000) /* Bit 1 */ - -#define GPIO_CFGLR_MODE7 ((uint32_t)0x30000000) /* MODE7[1:0] bits (Port x mode bits, pin 7) */ -#define GPIO_CFGLR_MODE7_0 ((uint32_t)0x10000000) /* Bit 0 */ -#define GPIO_CFGLR_MODE7_1 ((uint32_t)0x20000000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF ((uint32_t)0xCCCCCCCC) /* Port x configuration bits */ - -#define GPIO_CFGLR_CNF0 ((uint32_t)0x0000000C) /* CNF0[1:0] bits (Port x configuration bits, pin 0) */ -#define GPIO_CFGLR_CNF0_0 ((uint32_t)0x00000004) /* Bit 0 */ -#define GPIO_CFGLR_CNF0_1 ((uint32_t)0x00000008) /* Bit 1 */ - -#define GPIO_CFGLR_CNF1 ((uint32_t)0x000000C0) /* CNF1[1:0] bits (Port x configuration bits, pin 1) */ -#define GPIO_CFGLR_CNF1_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define GPIO_CFGLR_CNF1_1 ((uint32_t)0x00000080) /* Bit 1 */ - -#define GPIO_CFGLR_CNF2 ((uint32_t)0x00000C00) /* CNF2[1:0] bits (Port x configuration bits, pin 2) */ -#define GPIO_CFGLR_CNF2_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define GPIO_CFGLR_CNF2_1 ((uint32_t)0x00000800) /* Bit 1 */ - -#define GPIO_CFGLR_CNF3 ((uint32_t)0x0000C000) /* CNF3[1:0] bits (Port x configuration bits, pin 3) */ -#define GPIO_CFGLR_CNF3_0 ((uint32_t)0x00004000) /* Bit 0 */ -#define GPIO_CFGLR_CNF3_1 ((uint32_t)0x00008000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF4 ((uint32_t)0x000C0000) /* CNF4[1:0] bits (Port x configuration bits, pin 4) */ -#define GPIO_CFGLR_CNF4_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define GPIO_CFGLR_CNF4_1 ((uint32_t)0x00080000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF5 ((uint32_t)0x00C00000) /* CNF5[1:0] bits (Port x configuration bits, pin 5) */ -#define GPIO_CFGLR_CNF5_0 ((uint32_t)0x00400000) /* Bit 0 */ -#define GPIO_CFGLR_CNF5_1 ((uint32_t)0x00800000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF6 ((uint32_t)0x0C000000) /* CNF6[1:0] bits (Port x configuration bits, pin 6) */ -#define GPIO_CFGLR_CNF6_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define GPIO_CFGLR_CNF6_1 ((uint32_t)0x08000000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF7 ((uint32_t)0xC0000000) /* CNF7[1:0] bits (Port x configuration bits, pin 7) */ -#define GPIO_CFGLR_CNF7_0 ((uint32_t)0x40000000) /* Bit 0 */ -#define GPIO_CFGLR_CNF7_1 ((uint32_t)0x80000000) /* Bit 1 */ - -/******************* Bit definition for GPIO_CFGHR register *******************/ -#define GPIO_CFGHR_MODE ((uint32_t)0x33333333) /* Port x mode bits */ - -#define GPIO_CFGHR_MODE8 ((uint32_t)0x00000003) /* MODE8[1:0] bits (Port x mode bits, pin 8) */ -#define GPIO_CFGHR_MODE8_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define GPIO_CFGHR_MODE8_1 ((uint32_t)0x00000002) /* Bit 1 */ - -#define GPIO_CFGHR_MODE9 ((uint32_t)0x00000030) /* MODE9[1:0] bits (Port x mode bits, pin 9) */ -#define GPIO_CFGHR_MODE9_0 ((uint32_t)0x00000010) /* Bit 0 */ -#define GPIO_CFGHR_MODE9_1 ((uint32_t)0x00000020) /* Bit 1 */ - -#define GPIO_CFGHR_MODE10 ((uint32_t)0x00000300) /* MODE10[1:0] bits (Port x mode bits, pin 10) */ -#define GPIO_CFGHR_MODE10_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define GPIO_CFGHR_MODE10_1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define GPIO_CFGHR_MODE11 ((uint32_t)0x00003000) /* MODE11[1:0] bits (Port x mode bits, pin 11) */ -#define GPIO_CFGHR_MODE11_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define GPIO_CFGHR_MODE11_1 ((uint32_t)0x00002000) /* Bit 1 */ - -#define GPIO_CFGHR_MODE12 ((uint32_t)0x00030000) /* MODE12[1:0] bits (Port x mode bits, pin 12) */ -#define GPIO_CFGHR_MODE12_0 ((uint32_t)0x00010000) /* Bit 0 */ -#define GPIO_CFGHR_MODE12_1 ((uint32_t)0x00020000) /* Bit 1 */ - -#define GPIO_CFGHR_MODE13 ((uint32_t)0x00300000) /* MODE13[1:0] bits (Port x mode bits, pin 13) */ -#define GPIO_CFGHR_MODE13_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define GPIO_CFGHR_MODE13_1 ((uint32_t)0x00200000) /* Bit 1 */ - -#define GPIO_CFGHR_MODE14 ((uint32_t)0x03000000) /* MODE14[1:0] bits (Port x mode bits, pin 14) */ -#define GPIO_CFGHR_MODE14_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define GPIO_CFGHR_MODE14_1 ((uint32_t)0x02000000) /* Bit 1 */ - -#define GPIO_CFGHR_MODE15 ((uint32_t)0x30000000) /* MODE15[1:0] bits (Port x mode bits, pin 15) */ -#define GPIO_CFGHR_MODE15_0 ((uint32_t)0x10000000) /* Bit 0 */ -#define GPIO_CFGHR_MODE15_1 ((uint32_t)0x20000000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF ((uint32_t)0xCCCCCCCC) /* Port x configuration bits */ - -#define GPIO_CFGHR_CNF8 ((uint32_t)0x0000000C) /* CNF8[1:0] bits (Port x configuration bits, pin 8) */ -#define GPIO_CFGHR_CNF8_0 ((uint32_t)0x00000004) /* Bit 0 */ -#define GPIO_CFGHR_CNF8_1 ((uint32_t)0x00000008) /* Bit 1 */ - -#define GPIO_CFGHR_CNF9 ((uint32_t)0x000000C0) /* CNF9[1:0] bits (Port x configuration bits, pin 9) */ -#define GPIO_CFGHR_CNF9_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define GPIO_CFGHR_CNF9_1 ((uint32_t)0x00000080) /* Bit 1 */ - -#define GPIO_CFGHR_CNF10 ((uint32_t)0x00000C00) /* CNF10[1:0] bits (Port x configuration bits, pin 10) */ -#define GPIO_CFGHR_CNF10_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define GPIO_CFGHR_CNF10_1 ((uint32_t)0x00000800) /* Bit 1 */ - -#define GPIO_CFGHR_CNF11 ((uint32_t)0x0000C000) /* CNF11[1:0] bits (Port x configuration bits, pin 11) */ -#define GPIO_CFGHR_CNF11_0 ((uint32_t)0x00004000) /* Bit 0 */ -#define GPIO_CFGHR_CNF11_1 ((uint32_t)0x00008000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF12 ((uint32_t)0x000C0000) /* CNF12[1:0] bits (Port x configuration bits, pin 12) */ -#define GPIO_CFGHR_CNF12_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define GPIO_CFGHR_CNF12_1 ((uint32_t)0x00080000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF13 ((uint32_t)0x00C00000) /* CNF13[1:0] bits (Port x configuration bits, pin 13) */ -#define GPIO_CFGHR_CNF13_0 ((uint32_t)0x00400000) /* Bit 0 */ -#define GPIO_CFGHR_CNF13_1 ((uint32_t)0x00800000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF14 ((uint32_t)0x0C000000) /* CNF14[1:0] bits (Port x configuration bits, pin 14) */ -#define GPIO_CFGHR_CNF14_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define GPIO_CFGHR_CNF14_1 ((uint32_t)0x08000000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF15 ((uint32_t)0xC0000000) /* CNF15[1:0] bits (Port x configuration bits, pin 15) */ -#define GPIO_CFGHR_CNF15_0 ((uint32_t)0x40000000) /* Bit 0 */ -#define GPIO_CFGHR_CNF15_1 ((uint32_t)0x80000000) /* Bit 1 */ - -/******************* Bit definition for GPIO_INDR register *******************/ -#define GPIO_INDR_IDR0 ((uint16_t)0x0001) /* Port input data, bit 0 */ -#define GPIO_INDR_IDR1 ((uint16_t)0x0002) /* Port input data, bit 1 */ -#define GPIO_INDR_IDR2 ((uint16_t)0x0004) /* Port input data, bit 2 */ -#define GPIO_INDR_IDR3 ((uint16_t)0x0008) /* Port input data, bit 3 */ -#define GPIO_INDR_IDR4 ((uint16_t)0x0010) /* Port input data, bit 4 */ -#define GPIO_INDR_IDR5 ((uint16_t)0x0020) /* Port input data, bit 5 */ -#define GPIO_INDR_IDR6 ((uint16_t)0x0040) /* Port input data, bit 6 */ -#define GPIO_INDR_IDR7 ((uint16_t)0x0080) /* Port input data, bit 7 */ -#define GPIO_INDR_IDR8 ((uint16_t)0x0100) /* Port input data, bit 8 */ -#define GPIO_INDR_IDR9 ((uint16_t)0x0200) /* Port input data, bit 9 */ -#define GPIO_INDR_IDR10 ((uint16_t)0x0400) /* Port input data, bit 10 */ -#define GPIO_INDR_IDR11 ((uint16_t)0x0800) /* Port input data, bit 11 */ -#define GPIO_INDR_IDR12 ((uint16_t)0x1000) /* Port input data, bit 12 */ -#define GPIO_INDR_IDR13 ((uint16_t)0x2000) /* Port input data, bit 13 */ -#define GPIO_INDR_IDR14 ((uint16_t)0x4000) /* Port input data, bit 14 */ -#define GPIO_INDR_IDR15 ((uint16_t)0x8000) /* Port input data, bit 15 */ - -/******************* Bit definition for GPIO_OUTDR register *******************/ -#define GPIO_OUTDR_ODR0 ((uint16_t)0x0001) /* Port output data, bit 0 */ -#define GPIO_OUTDR_ODR1 ((uint16_t)0x0002) /* Port output data, bit 1 */ -#define GPIO_OUTDR_ODR2 ((uint16_t)0x0004) /* Port output data, bit 2 */ -#define GPIO_OUTDR_ODR3 ((uint16_t)0x0008) /* Port output data, bit 3 */ -#define GPIO_OUTDR_ODR4 ((uint16_t)0x0010) /* Port output data, bit 4 */ -#define GPIO_OUTDR_ODR5 ((uint16_t)0x0020) /* Port output data, bit 5 */ -#define GPIO_OUTDR_ODR6 ((uint16_t)0x0040) /* Port output data, bit 6 */ -#define GPIO_OUTDR_ODR7 ((uint16_t)0x0080) /* Port output data, bit 7 */ -#define GPIO_OUTDR_ODR8 ((uint16_t)0x0100) /* Port output data, bit 8 */ -#define GPIO_OUTDR_ODR9 ((uint16_t)0x0200) /* Port output data, bit 9 */ -#define GPIO_OUTDR_ODR10 ((uint16_t)0x0400) /* Port output data, bit 10 */ -#define GPIO_OUTDR_ODR11 ((uint16_t)0x0800) /* Port output data, bit 11 */ -#define GPIO_OUTDR_ODR12 ((uint16_t)0x1000) /* Port output data, bit 12 */ -#define GPIO_OUTDR_ODR13 ((uint16_t)0x2000) /* Port output data, bit 13 */ -#define GPIO_OUTDR_ODR14 ((uint16_t)0x4000) /* Port output data, bit 14 */ -#define GPIO_OUTDR_ODR15 ((uint16_t)0x8000) /* Port output data, bit 15 */ - -/****************** Bit definition for GPIO_BSHR register *******************/ -#define GPIO_BSHR_BS0 ((uint32_t)0x00000001) /* Port x Set bit 0 */ -#define GPIO_BSHR_BS1 ((uint32_t)0x00000002) /* Port x Set bit 1 */ -#define GPIO_BSHR_BS2 ((uint32_t)0x00000004) /* Port x Set bit 2 */ -#define GPIO_BSHR_BS3 ((uint32_t)0x00000008) /* Port x Set bit 3 */ -#define GPIO_BSHR_BS4 ((uint32_t)0x00000010) /* Port x Set bit 4 */ -#define GPIO_BSHR_BS5 ((uint32_t)0x00000020) /* Port x Set bit 5 */ -#define GPIO_BSHR_BS6 ((uint32_t)0x00000040) /* Port x Set bit 6 */ -#define GPIO_BSHR_BS7 ((uint32_t)0x00000080) /* Port x Set bit 7 */ -#define GPIO_BSHR_BS8 ((uint32_t)0x00000100) /* Port x Set bit 8 */ -#define GPIO_BSHR_BS9 ((uint32_t)0x00000200) /* Port x Set bit 9 */ -#define GPIO_BSHR_BS10 ((uint32_t)0x00000400) /* Port x Set bit 10 */ -#define GPIO_BSHR_BS11 ((uint32_t)0x00000800) /* Port x Set bit 11 */ -#define GPIO_BSHR_BS12 ((uint32_t)0x00001000) /* Port x Set bit 12 */ -#define GPIO_BSHR_BS13 ((uint32_t)0x00002000) /* Port x Set bit 13 */ -#define GPIO_BSHR_BS14 ((uint32_t)0x00004000) /* Port x Set bit 14 */ -#define GPIO_BSHR_BS15 ((uint32_t)0x00008000) /* Port x Set bit 15 */ - -#define GPIO_BSHR_BR0 ((uint32_t)0x00010000) /* Port x Reset bit 0 */ -#define GPIO_BSHR_BR1 ((uint32_t)0x00020000) /* Port x Reset bit 1 */ -#define GPIO_BSHR_BR2 ((uint32_t)0x00040000) /* Port x Reset bit 2 */ -#define GPIO_BSHR_BR3 ((uint32_t)0x00080000) /* Port x Reset bit 3 */ -#define GPIO_BSHR_BR4 ((uint32_t)0x00100000) /* Port x Reset bit 4 */ -#define GPIO_BSHR_BR5 ((uint32_t)0x00200000) /* Port x Reset bit 5 */ -#define GPIO_BSHR_BR6 ((uint32_t)0x00400000) /* Port x Reset bit 6 */ -#define GPIO_BSHR_BR7 ((uint32_t)0x00800000) /* Port x Reset bit 7 */ -#define GPIO_BSHR_BR8 ((uint32_t)0x01000000) /* Port x Reset bit 8 */ -#define GPIO_BSHR_BR9 ((uint32_t)0x02000000) /* Port x Reset bit 9 */ -#define GPIO_BSHR_BR10 ((uint32_t)0x04000000) /* Port x Reset bit 10 */ -#define GPIO_BSHR_BR11 ((uint32_t)0x08000000) /* Port x Reset bit 11 */ -#define GPIO_BSHR_BR12 ((uint32_t)0x10000000) /* Port x Reset bit 12 */ -#define GPIO_BSHR_BR13 ((uint32_t)0x20000000) /* Port x Reset bit 13 */ -#define GPIO_BSHR_BR14 ((uint32_t)0x40000000) /* Port x Reset bit 14 */ -#define GPIO_BSHR_BR15 ((uint32_t)0x80000000) /* Port x Reset bit 15 */ - -/******************* Bit definition for GPIO_BCR register *******************/ -#define GPIO_BCR_BR0 ((uint16_t)0x0001) /* Port x Reset bit 0 */ -#define GPIO_BCR_BR1 ((uint16_t)0x0002) /* Port x Reset bit 1 */ -#define GPIO_BCR_BR2 ((uint16_t)0x0004) /* Port x Reset bit 2 */ -#define GPIO_BCR_BR3 ((uint16_t)0x0008) /* Port x Reset bit 3 */ -#define GPIO_BCR_BR4 ((uint16_t)0x0010) /* Port x Reset bit 4 */ -#define GPIO_BCR_BR5 ((uint16_t)0x0020) /* Port x Reset bit 5 */ -#define GPIO_BCR_BR6 ((uint16_t)0x0040) /* Port x Reset bit 6 */ -#define GPIO_BCR_BR7 ((uint16_t)0x0080) /* Port x Reset bit 7 */ -#define GPIO_BCR_BR8 ((uint16_t)0x0100) /* Port x Reset bit 8 */ -#define GPIO_BCR_BR9 ((uint16_t)0x0200) /* Port x Reset bit 9 */ -#define GPIO_BCR_BR10 ((uint16_t)0x0400) /* Port x Reset bit 10 */ -#define GPIO_BCR_BR11 ((uint16_t)0x0800) /* Port x Reset bit 11 */ -#define GPIO_BCR_BR12 ((uint16_t)0x1000) /* Port x Reset bit 12 */ -#define GPIO_BCR_BR13 ((uint16_t)0x2000) /* Port x Reset bit 13 */ -#define GPIO_BCR_BR14 ((uint16_t)0x4000) /* Port x Reset bit 14 */ -#define GPIO_BCR_BR15 ((uint16_t)0x8000) /* Port x Reset bit 15 */ - -/****************** Bit definition for GPIO_LCKR register *******************/ -#define GPIO_LCK0 ((uint32_t)0x00000001) /* Port x Lock bit 0 */ -#define GPIO_LCK1 ((uint32_t)0x00000002) /* Port x Lock bit 1 */ -#define GPIO_LCK2 ((uint32_t)0x00000004) /* Port x Lock bit 2 */ -#define GPIO_LCK3 ((uint32_t)0x00000008) /* Port x Lock bit 3 */ -#define GPIO_LCK4 ((uint32_t)0x00000010) /* Port x Lock bit 4 */ -#define GPIO_LCK5 ((uint32_t)0x00000020) /* Port x Lock bit 5 */ -#define GPIO_LCK6 ((uint32_t)0x00000040) /* Port x Lock bit 6 */ -#define GPIO_LCK7 ((uint32_t)0x00000080) /* Port x Lock bit 7 */ -#define GPIO_LCK8 ((uint32_t)0x00000100) /* Port x Lock bit 8 */ -#define GPIO_LCK9 ((uint32_t)0x00000200) /* Port x Lock bit 9 */ -#define GPIO_LCK10 ((uint32_t)0x00000400) /* Port x Lock bit 10 */ -#define GPIO_LCK11 ((uint32_t)0x00000800) /* Port x Lock bit 11 */ -#define GPIO_LCK12 ((uint32_t)0x00001000) /* Port x Lock bit 12 */ -#define GPIO_LCK13 ((uint32_t)0x00002000) /* Port x Lock bit 13 */ -#define GPIO_LCK14 ((uint32_t)0x00004000) /* Port x Lock bit 14 */ -#define GPIO_LCK15 ((uint32_t)0x00008000) /* Port x Lock bit 15 */ -#define GPIO_LCKK ((uint32_t)0x00010000) /* Lock key */ - - -/****************** Bit definition for AFIO_ECR register *******************/ -#define AFIO_ECR_PIN ((uint8_t)0x0F) /* PIN[3:0] bits (Pin selection) */ -#define AFIO_ECR_PIN_0 ((uint8_t)0x01) /* Bit 0 */ -#define AFIO_ECR_PIN_1 ((uint8_t)0x02) /* Bit 1 */ -#define AFIO_ECR_PIN_2 ((uint8_t)0x04) /* Bit 2 */ -#define AFIO_ECR_PIN_3 ((uint8_t)0x08) /* Bit 3 */ - -#define AFIO_ECR_PIN_PX0 ((uint8_t)0x00) /* Pin 0 selected */ -#define AFIO_ECR_PIN_PX1 ((uint8_t)0x01) /* Pin 1 selected */ -#define AFIO_ECR_PIN_PX2 ((uint8_t)0x02) /* Pin 2 selected */ -#define AFIO_ECR_PIN_PX3 ((uint8_t)0x03) /* Pin 3 selected */ -#define AFIO_ECR_PIN_PX4 ((uint8_t)0x04) /* Pin 4 selected */ -#define AFIO_ECR_PIN_PX5 ((uint8_t)0x05) /* Pin 5 selected */ -#define AFIO_ECR_PIN_PX6 ((uint8_t)0x06) /* Pin 6 selected */ -#define AFIO_ECR_PIN_PX7 ((uint8_t)0x07) /* Pin 7 selected */ -#define AFIO_ECR_PIN_PX8 ((uint8_t)0x08) /* Pin 8 selected */ -#define AFIO_ECR_PIN_PX9 ((uint8_t)0x09) /* Pin 9 selected */ -#define AFIO_ECR_PIN_PX10 ((uint8_t)0x0A) /* Pin 10 selected */ -#define AFIO_ECR_PIN_PX11 ((uint8_t)0x0B) /* Pin 11 selected */ -#define AFIO_ECR_PIN_PX12 ((uint8_t)0x0C) /* Pin 12 selected */ -#define AFIO_ECR_PIN_PX13 ((uint8_t)0x0D) /* Pin 13 selected */ -#define AFIO_ECR_PIN_PX14 ((uint8_t)0x0E) /* Pin 14 selected */ -#define AFIO_ECR_PIN_PX15 ((uint8_t)0x0F) /* Pin 15 selected */ - -#define AFIO_ECR_PORT ((uint8_t)0x70) /* PORT[2:0] bits (Port selection) */ -#define AFIO_ECR_PORT_0 ((uint8_t)0x10) /* Bit 0 */ -#define AFIO_ECR_PORT_1 ((uint8_t)0x20) /* Bit 1 */ -#define AFIO_ECR_PORT_2 ((uint8_t)0x40) /* Bit 2 */ - -#define AFIO_ECR_PORT_PA ((uint8_t)0x00) /* Port A selected */ -#define AFIO_ECR_PORT_PB ((uint8_t)0x10) /* Port B selected */ -#define AFIO_ECR_PORT_PC ((uint8_t)0x20) /* Port C selected */ -#define AFIO_ECR_PORT_PD ((uint8_t)0x30) /* Port D selected */ -#define AFIO_ECR_PORT_PE ((uint8_t)0x40) /* Port E selected */ - -#define AFIO_ECR_EVOE ((uint8_t)0x80) /* Event Output Enable */ - -/****************** Bit definition for AFIO_PCFR1register *******************/ -#define AFIO_PCFR1_SPI1_REMAP ((uint32_t)0x00000001) /* SPI1 remapping */ -#define AFIO_PCFR1_I2C1_REMAP ((uint32_t)0x00000002) /* I2C1 remapping */ -#define AFIO_PCFR1_USART1_REMAP ((uint32_t)0x00000004) /* USART1 remapping */ -#define AFIO_PCFR1_USART2_REMAP ((uint32_t)0x00000008) /* USART2 remapping */ - -#define AFIO_PCFR1_USART3_REMAP ((uint32_t)0x00000030) /* USART3_REMAP[1:0] bits (USART3 remapping) */ -#define AFIO_PCFR1_USART3_REMAP_0 ((uint32_t)0x00000010) /* Bit 0 */ -#define AFIO_PCFR1_USART3_REMAP_1 ((uint32_t)0x00000020) /* Bit 1 */ - -#define AFIO_PCFR1_USART3_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */ -#define AFIO_PCFR1_USART3_REMAP_PARTIALREMAP ((uint32_t)0x00000010) /* Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */ -#define AFIO_PCFR1_USART3_REMAP_FULLREMAP ((uint32_t)0x00000030) /* Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */ - -#define AFIO_PCFR1_TIM1_REMAP ((uint32_t)0x000000C0) /* TIM1_REMAP[1:0] bits (TIM1 remapping) */ -#define AFIO_PCFR1_TIM1_REMAP_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define AFIO_PCFR1_TIM1_REMAP_1 ((uint32_t)0x00000080) /* Bit 1 */ - -#define AFIO_PCFR1_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_PCFR1_TIM1_REMAP_PARTIALREMAP ((uint32_t)0x00000040) /* Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */ -#define AFIO_PCFR1_TIM1_REMAP_FULLREMAP ((uint32_t)0x000000C0) /* Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */ - -#define AFIO_PCFR1_TIM2_REMAP ((uint32_t)0x00000300) /* TIM2_REMAP[1:0] bits (TIM2 remapping) */ -#define AFIO_PCFR1_TIM2_REMAP_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define AFIO_PCFR1_TIM2_REMAP_1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define AFIO_PCFR1_TIM2_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */ -#define AFIO_PCFR1_TIM2_REMAP_PARTIALREMAP1 ((uint32_t)0x00000100) /* Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */ -#define AFIO_PCFR1_TIM2_REMAP_PARTIALREMAP2 ((uint32_t)0x00000200) /* Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */ -#define AFIO_PCFR1_TIM2_REMAP_FULLREMAP ((uint32_t)0x00000300) /* Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */ - -#define AFIO_PCFR1_TIM3_REMAP ((uint32_t)0x00000C00) /* TIM3_REMAP[1:0] bits (TIM3 remapping) */ -#define AFIO_PCFR1_TIM3_REMAP_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define AFIO_PCFR1_TIM3_REMAP_1 ((uint32_t)0x00000800) /* Bit 1 */ - -#define AFIO_PCFR1_TIM3_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */ -#define AFIO_PCFR1_TIM3_REMAP_PARTIALREMAP ((uint32_t)0x00000800) /* Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */ -#define AFIO_PCFR1_TIM3_REMAP_FULLREMAP ((uint32_t)0x00000C00) /* Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */ - -#define AFIO_PCFR1_TIM4_REMAP ((uint32_t)0x00001000) /* TIM4_REMAP bit (TIM4 remapping) */ - -#define AFIO_PCFR1_CAN_REMAP ((uint32_t)0x00006000) /* CAN_REMAP[1:0] bits (CAN Alternate function remapping) */ -#define AFIO_PCFR1_CAN_REMAP_0 ((uint32_t)0x00002000) /* Bit 0 */ -#define AFIO_PCFR1_CAN_REMAP_1 ((uint32_t)0x00004000) /* Bit 1 */ - -#define AFIO_PCFR1_CAN_REMAP_REMAP1 ((uint32_t)0x00000000) /* CANRX mapped to PA11, CANTX mapped to PA12 */ -#define AFIO_PCFR1_CAN_REMAP_REMAP2 ((uint32_t)0x00004000) /* CANRX mapped to PB8, CANTX mapped to PB9 */ -#define AFIO_PCFR1_CAN_REMAP_REMAP3 ((uint32_t)0x00006000) /* CANRX mapped to PD0, CANTX mapped to PD1 */ - -#define AFIO_PCFR1_PD01_REMAP ((uint32_t)0x00008000) /* Port D0/Port D1 mapping on OSC_IN/OSC_OUT */ -#define AFIO_PCFR1_TIM5CH4_IREMAP ((uint32_t)0x00010000) /* TIM5 Channel4 Internal Remap */ -#define AFIO_PCFR1_ADC1_ETRGINJ_REMAP ((uint32_t)0x00020000) /* ADC 1 External Trigger Injected Conversion remapping */ -#define AFIO_PCFR1_ADC1_ETRGREG_REMAP ((uint32_t)0x00040000) /* ADC 1 External Trigger Regular Conversion remapping */ -#define AFIO_PCFR1_ADC2_ETRGINJ_REMAP ((uint32_t)0x00080000) /* ADC 2 External Trigger Injected Conversion remapping */ -#define AFIO_PCFR1_ADC2_ETRGREG_REMAP ((uint32_t)0x00100000) /* ADC 2 External Trigger Regular Conversion remapping */ - -#define AFIO_PCFR1_SWJ_CFG ((uint32_t)0x07000000) /* SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */ -#define AFIO_PCFR1_SWJ_CFG_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define AFIO_PCFR1_SWJ_CFG_1 ((uint32_t)0x02000000) /* Bit 1 */ -#define AFIO_PCFR1_SWJ_CFG_2 ((uint32_t)0x04000000) /* Bit 2 */ - -#define AFIO_PCFR1_SWJ_CFG_RESET ((uint32_t)0x00000000) /* Full SWJ (JTAG-DP + SW-DP) : Reset State */ -#define AFIO_PCFR1_SWJ_CFG_NOJNTRST ((uint32_t)0x01000000) /* Full SWJ (JTAG-DP + SW-DP) but without JNTRST */ -#define AFIO_PCFR1_SWJ_CFG_JTAGDISABLE ((uint32_t)0x02000000) /* JTAG-DP Disabled and SW-DP Enabled */ -#define AFIO_PCFR1_SWJ_CFG_DISABLE ((uint32_t)0x04000000) /* JTAG-DP Disabled and SW-DP Disabled */ - -/***************** Bit definition for AFIO_EXTICR1 register *****************/ -#define AFIO_EXTICR1_EXTI0 ((uint16_t)0x000F) /* EXTI 0 configuration */ -#define AFIO_EXTICR1_EXTI1 ((uint16_t)0x00F0) /* EXTI 1 configuration */ -#define AFIO_EXTICR1_EXTI2 ((uint16_t)0x0F00) /* EXTI 2 configuration */ -#define AFIO_EXTICR1_EXTI3 ((uint16_t)0xF000) /* EXTI 3 configuration */ - -#define AFIO_EXTICR1_EXTI0_PA ((uint16_t)0x0000) /* PA[0] pin */ -#define AFIO_EXTICR1_EXTI0_PB ((uint16_t)0x0001) /* PB[0] pin */ -#define AFIO_EXTICR1_EXTI0_PC ((uint16_t)0x0002) /* PC[0] pin */ -#define AFIO_EXTICR1_EXTI0_PD ((uint16_t)0x0003) /* PD[0] pin */ -#define AFIO_EXTICR1_EXTI0_PE ((uint16_t)0x0004) /* PE[0] pin */ -#define AFIO_EXTICR1_EXTI0_PF ((uint16_t)0x0005) /* PF[0] pin */ -#define AFIO_EXTICR1_EXTI0_PG ((uint16_t)0x0006) /* PG[0] pin */ - -#define AFIO_EXTICR1_EXTI1_PA ((uint16_t)0x0000) /* PA[1] pin */ -#define AFIO_EXTICR1_EXTI1_PB ((uint16_t)0x0010) /* PB[1] pin */ -#define AFIO_EXTICR1_EXTI1_PC ((uint16_t)0x0020) /* PC[1] pin */ -#define AFIO_EXTICR1_EXTI1_PD ((uint16_t)0x0030) /* PD[1] pin */ -#define AFIO_EXTICR1_EXTI1_PE ((uint16_t)0x0040) /* PE[1] pin */ -#define AFIO_EXTICR1_EXTI1_PF ((uint16_t)0x0050) /* PF[1] pin */ -#define AFIO_EXTICR1_EXTI1_PG ((uint16_t)0x0060) /* PG[1] pin */ - -#define AFIO_EXTICR1_EXTI2_PA ((uint16_t)0x0000) /* PA[2] pin */ -#define AFIO_EXTICR1_EXTI2_PB ((uint16_t)0x0100) /* PB[2] pin */ -#define AFIO_EXTICR1_EXTI2_PC ((uint16_t)0x0200) /* PC[2] pin */ -#define AFIO_EXTICR1_EXTI2_PD ((uint16_t)0x0300) /* PD[2] pin */ -#define AFIO_EXTICR1_EXTI2_PE ((uint16_t)0x0400) /* PE[2] pin */ -#define AFIO_EXTICR1_EXTI2_PF ((uint16_t)0x0500) /* PF[2] pin */ -#define AFIO_EXTICR1_EXTI2_PG ((uint16_t)0x0600) /* PG[2] pin */ - -#define AFIO_EXTICR1_EXTI3_PA ((uint16_t)0x0000) /* PA[3] pin */ -#define AFIO_EXTICR1_EXTI3_PB ((uint16_t)0x1000) /* PB[3] pin */ -#define AFIO_EXTICR1_EXTI3_PC ((uint16_t)0x2000) /* PC[3] pin */ -#define AFIO_EXTICR1_EXTI3_PD ((uint16_t)0x3000) /* PD[3] pin */ -#define AFIO_EXTICR1_EXTI3_PE ((uint16_t)0x4000) /* PE[3] pin */ -#define AFIO_EXTICR1_EXTI3_PF ((uint16_t)0x5000) /* PF[3] pin */ -#define AFIO_EXTICR1_EXTI3_PG ((uint16_t)0x6000) /* PG[3] pin */ - -/***************** Bit definition for AFIO_EXTICR2 register *****************/ -#define AFIO_EXTICR2_EXTI4 ((uint16_t)0x000F) /* EXTI 4 configuration */ -#define AFIO_EXTICR2_EXTI5 ((uint16_t)0x00F0) /* EXTI 5 configuration */ -#define AFIO_EXTICR2_EXTI6 ((uint16_t)0x0F00) /* EXTI 6 configuration */ -#define AFIO_EXTICR2_EXTI7 ((uint16_t)0xF000) /* EXTI 7 configuration */ - -#define AFIO_EXTICR2_EXTI4_PA ((uint16_t)0x0000) /* PA[4] pin */ -#define AFIO_EXTICR2_EXTI4_PB ((uint16_t)0x0001) /* PB[4] pin */ -#define AFIO_EXTICR2_EXTI4_PC ((uint16_t)0x0002) /* PC[4] pin */ -#define AFIO_EXTICR2_EXTI4_PD ((uint16_t)0x0003) /* PD[4] pin */ -#define AFIO_EXTICR2_EXTI4_PE ((uint16_t)0x0004) /* PE[4] pin */ -#define AFIO_EXTICR2_EXTI4_PF ((uint16_t)0x0005) /* PF[4] pin */ -#define AFIO_EXTICR2_EXTI4_PG ((uint16_t)0x0006) /* PG[4] pin */ - -#define AFIO_EXTICR2_EXTI5_PA ((uint16_t)0x0000) /* PA[5] pin */ -#define AFIO_EXTICR2_EXTI5_PB ((uint16_t)0x0010) /* PB[5] pin */ -#define AFIO_EXTICR2_EXTI5_PC ((uint16_t)0x0020) /* PC[5] pin */ -#define AFIO_EXTICR2_EXTI5_PD ((uint16_t)0x0030) /* PD[5] pin */ -#define AFIO_EXTICR2_EXTI5_PE ((uint16_t)0x0040) /* PE[5] pin */ -#define AFIO_EXTICR2_EXTI5_PF ((uint16_t)0x0050) /* PF[5] pin */ -#define AFIO_EXTICR2_EXTI5_PG ((uint16_t)0x0060) /* PG[5] pin */ - -#define AFIO_EXTICR2_EXTI6_PA ((uint16_t)0x0000) /* PA[6] pin */ -#define AFIO_EXTICR2_EXTI6_PB ((uint16_t)0x0100) /* PB[6] pin */ -#define AFIO_EXTICR2_EXTI6_PC ((uint16_t)0x0200) /* PC[6] pin */ -#define AFIO_EXTICR2_EXTI6_PD ((uint16_t)0x0300) /* PD[6] pin */ -#define AFIO_EXTICR2_EXTI6_PE ((uint16_t)0x0400) /* PE[6] pin */ -#define AFIO_EXTICR2_EXTI6_PF ((uint16_t)0x0500) /* PF[6] pin */ -#define AFIO_EXTICR2_EXTI6_PG ((uint16_t)0x0600) /* PG[6] pin */ - -#define AFIO_EXTICR2_EXTI7_PA ((uint16_t)0x0000) /* PA[7] pin */ -#define AFIO_EXTICR2_EXTI7_PB ((uint16_t)0x1000) /* PB[7] pin */ -#define AFIO_EXTICR2_EXTI7_PC ((uint16_t)0x2000) /* PC[7] pin */ -#define AFIO_EXTICR2_EXTI7_PD ((uint16_t)0x3000) /* PD[7] pin */ -#define AFIO_EXTICR2_EXTI7_PE ((uint16_t)0x4000) /* PE[7] pin */ -#define AFIO_EXTICR2_EXTI7_PF ((uint16_t)0x5000) /* PF[7] pin */ -#define AFIO_EXTICR2_EXTI7_PG ((uint16_t)0x6000) /* PG[7] pin */ - -/***************** Bit definition for AFIO_EXTICR3 register *****************/ -#define AFIO_EXTICR3_EXTI8 ((uint16_t)0x000F) /* EXTI 8 configuration */ -#define AFIO_EXTICR3_EXTI9 ((uint16_t)0x00F0) /* EXTI 9 configuration */ -#define AFIO_EXTICR3_EXTI10 ((uint16_t)0x0F00) /* EXTI 10 configuration */ -#define AFIO_EXTICR3_EXTI11 ((uint16_t)0xF000) /* EXTI 11 configuration */ - -#define AFIO_EXTICR3_EXTI8_PA ((uint16_t)0x0000) /* PA[8] pin */ -#define AFIO_EXTICR3_EXTI8_PB ((uint16_t)0x0001) /* PB[8] pin */ -#define AFIO_EXTICR3_EXTI8_PC ((uint16_t)0x0002) /* PC[8] pin */ -#define AFIO_EXTICR3_EXTI8_PD ((uint16_t)0x0003) /* PD[8] pin */ -#define AFIO_EXTICR3_EXTI8_PE ((uint16_t)0x0004) /* PE[8] pin */ -#define AFIO_EXTICR3_EXTI8_PF ((uint16_t)0x0005) /* PF[8] pin */ -#define AFIO_EXTICR3_EXTI8_PG ((uint16_t)0x0006) /* PG[8] pin */ - -#define AFIO_EXTICR3_EXTI9_PA ((uint16_t)0x0000) /* PA[9] pin */ -#define AFIO_EXTICR3_EXTI9_PB ((uint16_t)0x0010) /* PB[9] pin */ -#define AFIO_EXTICR3_EXTI9_PC ((uint16_t)0x0020) /* PC[9] pin */ -#define AFIO_EXTICR3_EXTI9_PD ((uint16_t)0x0030) /* PD[9] pin */ -#define AFIO_EXTICR3_EXTI9_PE ((uint16_t)0x0040) /* PE[9] pin */ -#define AFIO_EXTICR3_EXTI9_PF ((uint16_t)0x0050) /* PF[9] pin */ -#define AFIO_EXTICR3_EXTI9_PG ((uint16_t)0x0060) /* PG[9] pin */ - -#define AFIO_EXTICR3_EXTI10_PA ((uint16_t)0x0000) /* PA[10] pin */ -#define AFIO_EXTICR3_EXTI10_PB ((uint16_t)0x0100) /* PB[10] pin */ -#define AFIO_EXTICR3_EXTI10_PC ((uint16_t)0x0200) /* PC[10] pin */ -#define AFIO_EXTICR3_EXTI10_PD ((uint16_t)0x0300) /* PD[10] pin */ -#define AFIO_EXTICR3_EXTI10_PE ((uint16_t)0x0400) /* PE[10] pin */ -#define AFIO_EXTICR3_EXTI10_PF ((uint16_t)0x0500) /* PF[10] pin */ -#define AFIO_EXTICR3_EXTI10_PG ((uint16_t)0x0600) /* PG[10] pin */ - -#define AFIO_EXTICR3_EXTI11_PA ((uint16_t)0x0000) /* PA[11] pin */ -#define AFIO_EXTICR3_EXTI11_PB ((uint16_t)0x1000) /* PB[11] pin */ -#define AFIO_EXTICR3_EXTI11_PC ((uint16_t)0x2000) /* PC[11] pin */ -#define AFIO_EXTICR3_EXTI11_PD ((uint16_t)0x3000) /* PD[11] pin */ -#define AFIO_EXTICR3_EXTI11_PE ((uint16_t)0x4000) /* PE[11] pin */ -#define AFIO_EXTICR3_EXTI11_PF ((uint16_t)0x5000) /* PF[11] pin */ -#define AFIO_EXTICR3_EXTI11_PG ((uint16_t)0x6000) /* PG[11] pin */ - -/***************** Bit definition for AFIO_EXTICR4 register *****************/ -#define AFIO_EXTICR4_EXTI12 ((uint16_t)0x000F) /* EXTI 12 configuration */ -#define AFIO_EXTICR4_EXTI13 ((uint16_t)0x00F0) /* EXTI 13 configuration */ -#define AFIO_EXTICR4_EXTI14 ((uint16_t)0x0F00) /* EXTI 14 configuration */ -#define AFIO_EXTICR4_EXTI15 ((uint16_t)0xF000) /* EXTI 15 configuration */ - -#define AFIO_EXTICR4_EXTI12_PA ((uint16_t)0x0000) /* PA[12] pin */ -#define AFIO_EXTICR4_EXTI12_PB ((uint16_t)0x0001) /* PB[12] pin */ -#define AFIO_EXTICR4_EXTI12_PC ((uint16_t)0x0002) /* PC[12] pin */ -#define AFIO_EXTICR4_EXTI12_PD ((uint16_t)0x0003) /* PD[12] pin */ -#define AFIO_EXTICR4_EXTI12_PE ((uint16_t)0x0004) /* PE[12] pin */ -#define AFIO_EXTICR4_EXTI12_PF ((uint16_t)0x0005) /* PF[12] pin */ -#define AFIO_EXTICR4_EXTI12_PG ((uint16_t)0x0006) /* PG[12] pin */ - -#define AFIO_EXTICR4_EXTI13_PA ((uint16_t)0x0000) /* PA[13] pin */ -#define AFIO_EXTICR4_EXTI13_PB ((uint16_t)0x0010) /* PB[13] pin */ -#define AFIO_EXTICR4_EXTI13_PC ((uint16_t)0x0020) /* PC[13] pin */ -#define AFIO_EXTICR4_EXTI13_PD ((uint16_t)0x0030) /* PD[13] pin */ -#define AFIO_EXTICR4_EXTI13_PE ((uint16_t)0x0040) /* PE[13] pin */ -#define AFIO_EXTICR4_EXTI13_PF ((uint16_t)0x0050) /* PF[13] pin */ -#define AFIO_EXTICR4_EXTI13_PG ((uint16_t)0x0060) /* PG[13] pin */ - -#define AFIO_EXTICR4_EXTI14_PA ((uint16_t)0x0000) /* PA[14] pin */ -#define AFIO_EXTICR4_EXTI14_PB ((uint16_t)0x0100) /* PB[14] pin */ -#define AFIO_EXTICR4_EXTI14_PC ((uint16_t)0x0200) /* PC[14] pin */ -#define AFIO_EXTICR4_EXTI14_PD ((uint16_t)0x0300) /* PD[14] pin */ -#define AFIO_EXTICR4_EXTI14_PE ((uint16_t)0x0400) /* PE[14] pin */ -#define AFIO_EXTICR4_EXTI14_PF ((uint16_t)0x0500) /* PF[14] pin */ -#define AFIO_EXTICR4_EXTI14_PG ((uint16_t)0x0600) /* PG[14] pin */ - -#define AFIO_EXTICR4_EXTI15_PA ((uint16_t)0x0000) /* PA[15] pin */ -#define AFIO_EXTICR4_EXTI15_PB ((uint16_t)0x1000) /* PB[15] pin */ -#define AFIO_EXTICR4_EXTI15_PC ((uint16_t)0x2000) /* PC[15] pin */ -#define AFIO_EXTICR4_EXTI15_PD ((uint16_t)0x3000) /* PD[15] pin */ -#define AFIO_EXTICR4_EXTI15_PE ((uint16_t)0x4000) /* PE[15] pin */ -#define AFIO_EXTICR4_EXTI15_PF ((uint16_t)0x5000) /* PF[15] pin */ -#define AFIO_EXTICR4_EXTI15_PG ((uint16_t)0x6000) /* PG[15] pin */ - -/******************************************************************************/ -/* Independent WATCHDOG */ -/******************************************************************************/ - -/******************* Bit definition for IWDG_CTLR register ********************/ -#define IWDG_KEY ((uint16_t)0xFFFF) /* Key value (write only, read 0000h) */ - -/******************* Bit definition for IWDG_PSCR register ********************/ -#define IWDG_PR ((uint8_t)0x07) /* PR[2:0] (Prescaler divider) */ -#define IWDG_PR_0 ((uint8_t)0x01) /* Bit 0 */ -#define IWDG_PR_1 ((uint8_t)0x02) /* Bit 1 */ -#define IWDG_PR_2 ((uint8_t)0x04) /* Bit 2 */ - -/******************* Bit definition for IWDG_RLDR register *******************/ -#define IWDG_RL ((uint16_t)0x0FFF) /* Watchdog counter reload value */ - -/******************* Bit definition for IWDG_STATR register ********************/ -#define IWDG_PVU ((uint8_t)0x01) /* Watchdog prescaler value update */ -#define IWDG_RVU ((uint8_t)0x02) /* Watchdog counter reload value update */ - -/******************************************************************************/ -/* Inter-integrated Circuit Interface */ -/******************************************************************************/ - -/******************* Bit definition for I2C_CTLR1 register ********************/ -#define I2C_CTLR1_PE ((uint16_t)0x0001) /* Peripheral Enable */ -#define I2C_CTLR1_SMBUS ((uint16_t)0x0002) /* SMBus Mode */ -#define I2C_CTLR1_SMBTYPE ((uint16_t)0x0008) /* SMBus Type */ -#define I2C_CTLR1_ENARP ((uint16_t)0x0010) /* ARP Enable */ -#define I2C_CTLR1_ENPEC ((uint16_t)0x0020) /* PEC Enable */ -#define I2C_CTLR1_ENGC ((uint16_t)0x0040) /* General Call Enable */ -#define I2C_CTLR1_NOSTRETCH ((uint16_t)0x0080) /* Clock Stretching Disable (Slave mode) */ -#define I2C_CTLR1_START ((uint16_t)0x0100) /* Start Generation */ -#define I2C_CTLR1_STOP ((uint16_t)0x0200) /* Stop Generation */ -#define I2C_CTLR1_ACK ((uint16_t)0x0400) /* Acknowledge Enable */ -#define I2C_CTLR1_POS ((uint16_t)0x0800) /* Acknowledge/PEC Position (for data reception) */ -#define I2C_CTLR1_PEC ((uint16_t)0x1000) /* Packet Error Checking */ -#define I2C_CTLR1_ALERT ((uint16_t)0x2000) /* SMBus Alert */ -#define I2C_CTLR1_SWRST ((uint16_t)0x8000) /* Software Reset */ - -/******************* Bit definition for I2C_CTLR2 register ********************/ -#define I2C_CTLR2_FREQ ((uint16_t)0x003F) /* FREQ[5:0] bits (Peripheral Clock Frequency) */ -#define I2C_CTLR2_FREQ_0 ((uint16_t)0x0001) /* Bit 0 */ -#define I2C_CTLR2_FREQ_1 ((uint16_t)0x0002) /* Bit 1 */ -#define I2C_CTLR2_FREQ_2 ((uint16_t)0x0004) /* Bit 2 */ -#define I2C_CTLR2_FREQ_3 ((uint16_t)0x0008) /* Bit 3 */ -#define I2C_CTLR2_FREQ_4 ((uint16_t)0x0010) /* Bit 4 */ -#define I2C_CTLR2_FREQ_5 ((uint16_t)0x0020) /* Bit 5 */ - -#define I2C_CTLR2_ITERREN ((uint16_t)0x0100) /* Error Interrupt Enable */ -#define I2C_CTLR2_ITEVTEN ((uint16_t)0x0200) /* Event Interrupt Enable */ -#define I2C_CTLR2_ITBUFEN ((uint16_t)0x0400) /* Buffer Interrupt Enable */ -#define I2C_CTLR2_DMAEN ((uint16_t)0x0800) /* DMA Requests Enable */ -#define I2C_CTLR2_LAST ((uint16_t)0x1000) /* DMA Last Transfer */ - -/******************* Bit definition for I2C_OADDR1 register *******************/ -#define I2C_OADDR1_ADD1_7 ((uint16_t)0x00FE) /* Interface Address */ -#define I2C_OADDR1_ADD8_9 ((uint16_t)0x0300) /* Interface Address */ - -#define I2C_OADDR1_ADD0 ((uint16_t)0x0001) /* Bit 0 */ -#define I2C_OADDR1_ADD1 ((uint16_t)0x0002) /* Bit 1 */ -#define I2C_OADDR1_ADD2 ((uint16_t)0x0004) /* Bit 2 */ -#define I2C_OADDR1_ADD3 ((uint16_t)0x0008) /* Bit 3 */ -#define I2C_OADDR1_ADD4 ((uint16_t)0x0010) /* Bit 4 */ -#define I2C_OADDR1_ADD5 ((uint16_t)0x0020) /* Bit 5 */ -#define I2C_OADDR1_ADD6 ((uint16_t)0x0040) /* Bit 6 */ -#define I2C_OADDR1_ADD7 ((uint16_t)0x0080) /* Bit 7 */ -#define I2C_OADDR1_ADD8 ((uint16_t)0x0100) /* Bit 8 */ -#define I2C_OADDR1_ADD9 ((uint16_t)0x0200) /* Bit 9 */ - -#define I2C_OADDR1_ADDMODE ((uint16_t)0x8000) /* Addressing Mode (Slave mode) */ - -/******************* Bit definition for I2C_OADDR2 register *******************/ -#define I2C_OADDR2_ENDUAL ((uint8_t)0x01) /* Dual addressing mode enable */ -#define I2C_OADDR2_ADD2 ((uint8_t)0xFE) /* Interface address */ - -/******************** Bit definition for I2C_DATAR register ********************/ -#define I2C_DR_DATAR ((uint8_t)0xFF) /* 8-bit Data Register */ - -/******************* Bit definition for I2C_STAR1 register ********************/ -#define I2C_STAR1_SB ((uint16_t)0x0001) /* Start Bit (Master mode) */ -#define I2C_STAR1_ADDR ((uint16_t)0x0002) /* Address sent (master mode)/matched (slave mode) */ -#define I2C_STAR1_BTF ((uint16_t)0x0004) /* Byte Transfer Finished */ -#define I2C_STAR1_ADD10 ((uint16_t)0x0008) /* 10-bit header sent (Master mode) */ -#define I2C_STAR1_STOPF ((uint16_t)0x0010) /* Stop detection (Slave mode) */ -#define I2C_STAR1_RXNE ((uint16_t)0x0040) /* Data Register not Empty (receivers) */ -#define I2C_STAR1_TXE ((uint16_t)0x0080) /* Data Register Empty (transmitters) */ -#define I2C_STAR1_BERR ((uint16_t)0x0100) /* Bus Error */ -#define I2C_STAR1_ARLO ((uint16_t)0x0200) /* Arbitration Lost (master mode) */ -#define I2C_STAR1_AF ((uint16_t)0x0400) /* Acknowledge Failure */ -#define I2C_STAR1_OVR ((uint16_t)0x0800) /* Overrun/Underrun */ -#define I2C_STAR1_PECERR ((uint16_t)0x1000) /* PEC Error in reception */ -#define I2C_STAR1_TIMEOUT ((uint16_t)0x4000) /* Timeout or Tlow Error */ -#define I2C_STAR1_SMBALERT ((uint16_t)0x8000) /* SMBus Alert */ - -/******************* Bit definition for I2C_STAR2 register ********************/ -#define I2C_STAR2_MSL ((uint16_t)0x0001) /* Master/Slave */ -#define I2C_STAR2_BUSY ((uint16_t)0x0002) /* Bus Busy */ -#define I2C_STAR2_TRA ((uint16_t)0x0004) /* Transmitter/Receiver */ -#define I2C_STAR2_GENCALL ((uint16_t)0x0010) /* General Call Address (Slave mode) */ -#define I2C_STAR2_SMBDEFAULT ((uint16_t)0x0020) /* SMBus Device Default Address (Slave mode) */ -#define I2C_STAR2_SMBHOST ((uint16_t)0x0040) /* SMBus Host Header (Slave mode) */ -#define I2C_STAR2_DUALF ((uint16_t)0x0080) /* Dual Flag (Slave mode) */ -#define I2C_STAR2_PEC ((uint16_t)0xFF00) /* Packet Error Checking Register */ - -/******************* Bit definition for I2C_CKCFGR register ********************/ -#define I2C_CKCFGR_CCR ((uint16_t)0x0FFF) /* Clock Control Register in Fast/Standard mode (Master mode) */ -#define I2C_CKCFGR_DUTY ((uint16_t)0x4000) /* Fast Mode Duty Cycle */ -#define I2C_CKCFGR_FS ((uint16_t)0x8000) /* I2C Master Mode Selection */ - -/****************** Bit definition for I2C_RTR register *******************/ -#define I2C_RTR_TRISE ((uint8_t)0x3F) /* Maximum Rise Time in Fast/Standard mode (Master mode) */ - -/******************************************************************************/ -/* Nested Vectored Interrupt Controller */ -/******************************************************************************/ - -/****************** Bit definition for NVIC_ISER register *******************/ -#define NVIC_ISER_SETENA ((uint32_t)0xFFFFFFFF) /* Interrupt set enable bits */ -#define NVIC_ISER_SETENA_0 ((uint32_t)0x00000001) /* bit 0 */ -#define NVIC_ISER_SETENA_1 ((uint32_t)0x00000002) /* bit 1 */ -#define NVIC_ISER_SETENA_2 ((uint32_t)0x00000004) /* bit 2 */ -#define NVIC_ISER_SETENA_3 ((uint32_t)0x00000008) /* bit 3 */ -#define NVIC_ISER_SETENA_4 ((uint32_t)0x00000010) /* bit 4 */ -#define NVIC_ISER_SETENA_5 ((uint32_t)0x00000020) /* bit 5 */ -#define NVIC_ISER_SETENA_6 ((uint32_t)0x00000040) /* bit 6 */ -#define NVIC_ISER_SETENA_7 ((uint32_t)0x00000080) /* bit 7 */ -#define NVIC_ISER_SETENA_8 ((uint32_t)0x00000100) /* bit 8 */ -#define NVIC_ISER_SETENA_9 ((uint32_t)0x00000200) /* bit 9 */ -#define NVIC_ISER_SETENA_10 ((uint32_t)0x00000400) /* bit 10 */ -#define NVIC_ISER_SETENA_11 ((uint32_t)0x00000800) /* bit 11 */ -#define NVIC_ISER_SETENA_12 ((uint32_t)0x00001000) /* bit 12 */ -#define NVIC_ISER_SETENA_13 ((uint32_t)0x00002000) /* bit 13 */ -#define NVIC_ISER_SETENA_14 ((uint32_t)0x00004000) /* bit 14 */ -#define NVIC_ISER_SETENA_15 ((uint32_t)0x00008000) /* bit 15 */ -#define NVIC_ISER_SETENA_16 ((uint32_t)0x00010000) /* bit 16 */ -#define NVIC_ISER_SETENA_17 ((uint32_t)0x00020000) /* bit 17 */ -#define NVIC_ISER_SETENA_18 ((uint32_t)0x00040000) /* bit 18 */ -#define NVIC_ISER_SETENA_19 ((uint32_t)0x00080000) /* bit 19 */ -#define NVIC_ISER_SETENA_20 ((uint32_t)0x00100000) /* bit 20 */ -#define NVIC_ISER_SETENA_21 ((uint32_t)0x00200000) /* bit 21 */ -#define NVIC_ISER_SETENA_22 ((uint32_t)0x00400000) /* bit 22 */ -#define NVIC_ISER_SETENA_23 ((uint32_t)0x00800000) /* bit 23 */ -#define NVIC_ISER_SETENA_24 ((uint32_t)0x01000000) /* bit 24 */ -#define NVIC_ISER_SETENA_25 ((uint32_t)0x02000000) /* bit 25 */ -#define NVIC_ISER_SETENA_26 ((uint32_t)0x04000000) /* bit 26 */ -#define NVIC_ISER_SETENA_27 ((uint32_t)0x08000000) /* bit 27 */ -#define NVIC_ISER_SETENA_28 ((uint32_t)0x10000000) /* bit 28 */ -#define NVIC_ISER_SETENA_29 ((uint32_t)0x20000000) /* bit 29 */ -#define NVIC_ISER_SETENA_30 ((uint32_t)0x40000000) /* bit 30 */ -#define NVIC_ISER_SETENA_31 ((uint32_t)0x80000000) /* bit 31 */ - -/****************** Bit definition for NVIC_ICER register *******************/ -#define NVIC_ICER_CLRENA ((uint32_t)0xFFFFFFFF) /* Interrupt clear-enable bits */ -#define NVIC_ICER_CLRENA_0 ((uint32_t)0x00000001) /* bit 0 */ -#define NVIC_ICER_CLRENA_1 ((uint32_t)0x00000002) /* bit 1 */ -#define NVIC_ICER_CLRENA_2 ((uint32_t)0x00000004) /* bit 2 */ -#define NVIC_ICER_CLRENA_3 ((uint32_t)0x00000008) /* bit 3 */ -#define NVIC_ICER_CLRENA_4 ((uint32_t)0x00000010) /* bit 4 */ -#define NVIC_ICER_CLRENA_5 ((uint32_t)0x00000020) /* bit 5 */ -#define NVIC_ICER_CLRENA_6 ((uint32_t)0x00000040) /* bit 6 */ -#define NVIC_ICER_CLRENA_7 ((uint32_t)0x00000080) /* bit 7 */ -#define NVIC_ICER_CLRENA_8 ((uint32_t)0x00000100) /* bit 8 */ -#define NVIC_ICER_CLRENA_9 ((uint32_t)0x00000200) /* bit 9 */ -#define NVIC_ICER_CLRENA_10 ((uint32_t)0x00000400) /* bit 10 */ -#define NVIC_ICER_CLRENA_11 ((uint32_t)0x00000800) /* bit 11 */ -#define NVIC_ICER_CLRENA_12 ((uint32_t)0x00001000) /* bit 12 */ -#define NVIC_ICER_CLRENA_13 ((uint32_t)0x00002000) /* bit 13 */ -#define NVIC_ICER_CLRENA_14 ((uint32_t)0x00004000) /* bit 14 */ -#define NVIC_ICER_CLRENA_15 ((uint32_t)0x00008000) /* bit 15 */ -#define NVIC_ICER_CLRENA_16 ((uint32_t)0x00010000) /* bit 16 */ -#define NVIC_ICER_CLRENA_17 ((uint32_t)0x00020000) /* bit 17 */ -#define NVIC_ICER_CLRENA_18 ((uint32_t)0x00040000) /* bit 18 */ -#define NVIC_ICER_CLRENA_19 ((uint32_t)0x00080000) /* bit 19 */ -#define NVIC_ICER_CLRENA_20 ((uint32_t)0x00100000) /* bit 20 */ -#define NVIC_ICER_CLRENA_21 ((uint32_t)0x00200000) /* bit 21 */ -#define NVIC_ICER_CLRENA_22 ((uint32_t)0x00400000) /* bit 22 */ -#define NVIC_ICER_CLRENA_23 ((uint32_t)0x00800000) /* bit 23 */ -#define NVIC_ICER_CLRENA_24 ((uint32_t)0x01000000) /* bit 24 */ -#define NVIC_ICER_CLRENA_25 ((uint32_t)0x02000000) /* bit 25 */ -#define NVIC_ICER_CLRENA_26 ((uint32_t)0x04000000) /* bit 26 */ -#define NVIC_ICER_CLRENA_27 ((uint32_t)0x08000000) /* bit 27 */ -#define NVIC_ICER_CLRENA_28 ((uint32_t)0x10000000) /* bit 28 */ -#define NVIC_ICER_CLRENA_29 ((uint32_t)0x20000000) /* bit 29 */ -#define NVIC_ICER_CLRENA_30 ((uint32_t)0x40000000) /* bit 30 */ -#define NVIC_ICER_CLRENA_31 ((uint32_t)0x80000000) /* bit 31 */ - -/****************** Bit definition for NVIC_ISPR register *******************/ -#define NVIC_ISPR_SETPEND ((uint32_t)0xFFFFFFFF) /* Interrupt set-pending bits */ -#define NVIC_ISPR_SETPEND_0 ((uint32_t)0x00000001) /* bit 0 */ -#define NVIC_ISPR_SETPEND_1 ((uint32_t)0x00000002) /* bit 1 */ -#define NVIC_ISPR_SETPEND_2 ((uint32_t)0x00000004) /* bit 2 */ -#define NVIC_ISPR_SETPEND_3 ((uint32_t)0x00000008) /* bit 3 */ -#define NVIC_ISPR_SETPEND_4 ((uint32_t)0x00000010) /* bit 4 */ -#define NVIC_ISPR_SETPEND_5 ((uint32_t)0x00000020) /* bit 5 */ -#define NVIC_ISPR_SETPEND_6 ((uint32_t)0x00000040) /* bit 6 */ -#define NVIC_ISPR_SETPEND_7 ((uint32_t)0x00000080) /* bit 7 */ -#define NVIC_ISPR_SETPEND_8 ((uint32_t)0x00000100) /* bit 8 */ -#define NVIC_ISPR_SETPEND_9 ((uint32_t)0x00000200) /* bit 9 */ -#define NVIC_ISPR_SETPEND_10 ((uint32_t)0x00000400) /* bit 10 */ -#define NVIC_ISPR_SETPEND_11 ((uint32_t)0x00000800) /* bit 11 */ -#define NVIC_ISPR_SETPEND_12 ((uint32_t)0x00001000) /* bit 12 */ -#define NVIC_ISPR_SETPEND_13 ((uint32_t)0x00002000) /* bit 13 */ -#define NVIC_ISPR_SETPEND_14 ((uint32_t)0x00004000) /* bit 14 */ -#define NVIC_ISPR_SETPEND_15 ((uint32_t)0x00008000) /* bit 15 */ -#define NVIC_ISPR_SETPEND_16 ((uint32_t)0x00010000) /* bit 16 */ -#define NVIC_ISPR_SETPEND_17 ((uint32_t)0x00020000) /* bit 17 */ -#define NVIC_ISPR_SETPEND_18 ((uint32_t)0x00040000) /* bit 18 */ -#define NVIC_ISPR_SETPEND_19 ((uint32_t)0x00080000) /* bit 19 */ -#define NVIC_ISPR_SETPEND_20 ((uint32_t)0x00100000) /* bit 20 */ -#define NVIC_ISPR_SETPEND_21 ((uint32_t)0x00200000) /* bit 21 */ -#define NVIC_ISPR_SETPEND_22 ((uint32_t)0x00400000) /* bit 22 */ -#define NVIC_ISPR_SETPEND_23 ((uint32_t)0x00800000) /* bit 23 */ -#define NVIC_ISPR_SETPEND_24 ((uint32_t)0x01000000) /* bit 24 */ -#define NVIC_ISPR_SETPEND_25 ((uint32_t)0x02000000) /* bit 25 */ -#define NVIC_ISPR_SETPEND_26 ((uint32_t)0x04000000) /* bit 26 */ -#define NVIC_ISPR_SETPEND_27 ((uint32_t)0x08000000) /* bit 27 */ -#define NVIC_ISPR_SETPEND_28 ((uint32_t)0x10000000) /* bit 28 */ -#define NVIC_ISPR_SETPEND_29 ((uint32_t)0x20000000) /* bit 29 */ -#define NVIC_ISPR_SETPEND_30 ((uint32_t)0x40000000) /* bit 30 */ -#define NVIC_ISPR_SETPEND_31 ((uint32_t)0x80000000) /* bit 31 */ - -/****************** Bit definition for NVIC_ICPR register *******************/ -#define NVIC_ICPR_CLRPEND ((uint32_t)0xFFFFFFFF) /* Interrupt clear-pending bits */ -#define NVIC_ICPR_CLRPEND_0 ((uint32_t)0x00000001) /* bit 0 */ -#define NVIC_ICPR_CLRPEND_1 ((uint32_t)0x00000002) /* bit 1 */ -#define NVIC_ICPR_CLRPEND_2 ((uint32_t)0x00000004) /* bit 2 */ -#define NVIC_ICPR_CLRPEND_3 ((uint32_t)0x00000008) /* bit 3 */ -#define NVIC_ICPR_CLRPEND_4 ((uint32_t)0x00000010) /* bit 4 */ -#define NVIC_ICPR_CLRPEND_5 ((uint32_t)0x00000020) /* bit 5 */ -#define NVIC_ICPR_CLRPEND_6 ((uint32_t)0x00000040) /* bit 6 */ -#define NVIC_ICPR_CLRPEND_7 ((uint32_t)0x00000080) /* bit 7 */ -#define NVIC_ICPR_CLRPEND_8 ((uint32_t)0x00000100) /* bit 8 */ -#define NVIC_ICPR_CLRPEND_9 ((uint32_t)0x00000200) /* bit 9 */ -#define NVIC_ICPR_CLRPEND_10 ((uint32_t)0x00000400) /* bit 10 */ -#define NVIC_ICPR_CLRPEND_11 ((uint32_t)0x00000800) /* bit 11 */ -#define NVIC_ICPR_CLRPEND_12 ((uint32_t)0x00001000) /* bit 12 */ -#define NVIC_ICPR_CLRPEND_13 ((uint32_t)0x00002000) /* bit 13 */ -#define NVIC_ICPR_CLRPEND_14 ((uint32_t)0x00004000) /* bit 14 */ -#define NVIC_ICPR_CLRPEND_15 ((uint32_t)0x00008000) /* bit 15 */ -#define NVIC_ICPR_CLRPEND_16 ((uint32_t)0x00010000) /* bit 16 */ -#define NVIC_ICPR_CLRPEND_17 ((uint32_t)0x00020000) /* bit 17 */ -#define NVIC_ICPR_CLRPEND_18 ((uint32_t)0x00040000) /* bit 18 */ -#define NVIC_ICPR_CLRPEND_19 ((uint32_t)0x00080000) /* bit 19 */ -#define NVIC_ICPR_CLRPEND_20 ((uint32_t)0x00100000) /* bit 20 */ -#define NVIC_ICPR_CLRPEND_21 ((uint32_t)0x00200000) /* bit 21 */ -#define NVIC_ICPR_CLRPEND_22 ((uint32_t)0x00400000) /* bit 22 */ -#define NVIC_ICPR_CLRPEND_23 ((uint32_t)0x00800000) /* bit 23 */ -#define NVIC_ICPR_CLRPEND_24 ((uint32_t)0x01000000) /* bit 24 */ -#define NVIC_ICPR_CLRPEND_25 ((uint32_t)0x02000000) /* bit 25 */ -#define NVIC_ICPR_CLRPEND_26 ((uint32_t)0x04000000) /* bit 26 */ -#define NVIC_ICPR_CLRPEND_27 ((uint32_t)0x08000000) /* bit 27 */ -#define NVIC_ICPR_CLRPEND_28 ((uint32_t)0x10000000) /* bit 28 */ -#define NVIC_ICPR_CLRPEND_29 ((uint32_t)0x20000000) /* bit 29 */ -#define NVIC_ICPR_CLRPEND_30 ((uint32_t)0x40000000) /* bit 30 */ -#define NVIC_ICPR_CLRPEND_31 ((uint32_t)0x80000000) /* bit 31 */ - -/****************** Bit definition for NVIC_IABR register *******************/ -#define NVIC_IABR_ACTIVE ((uint32_t)0xFFFFFFFF) /* Interrupt active flags */ -#define NVIC_IABR_ACTIVE_0 ((uint32_t)0x00000001) /* bit 0 */ -#define NVIC_IABR_ACTIVE_1 ((uint32_t)0x00000002) /* bit 1 */ -#define NVIC_IABR_ACTIVE_2 ((uint32_t)0x00000004) /* bit 2 */ -#define NVIC_IABR_ACTIVE_3 ((uint32_t)0x00000008) /* bit 3 */ -#define NVIC_IABR_ACTIVE_4 ((uint32_t)0x00000010) /* bit 4 */ -#define NVIC_IABR_ACTIVE_5 ((uint32_t)0x00000020) /* bit 5 */ -#define NVIC_IABR_ACTIVE_6 ((uint32_t)0x00000040) /* bit 6 */ -#define NVIC_IABR_ACTIVE_7 ((uint32_t)0x00000080) /* bit 7 */ -#define NVIC_IABR_ACTIVE_8 ((uint32_t)0x00000100) /* bit 8 */ -#define NVIC_IABR_ACTIVE_9 ((uint32_t)0x00000200) /* bit 9 */ -#define NVIC_IABR_ACTIVE_10 ((uint32_t)0x00000400) /* bit 10 */ -#define NVIC_IABR_ACTIVE_11 ((uint32_t)0x00000800) /* bit 11 */ -#define NVIC_IABR_ACTIVE_12 ((uint32_t)0x00001000) /* bit 12 */ -#define NVIC_IABR_ACTIVE_13 ((uint32_t)0x00002000) /* bit 13 */ -#define NVIC_IABR_ACTIVE_14 ((uint32_t)0x00004000) /* bit 14 */ -#define NVIC_IABR_ACTIVE_15 ((uint32_t)0x00008000) /* bit 15 */ -#define NVIC_IABR_ACTIVE_16 ((uint32_t)0x00010000) /* bit 16 */ -#define NVIC_IABR_ACTIVE_17 ((uint32_t)0x00020000) /* bit 17 */ -#define NVIC_IABR_ACTIVE_18 ((uint32_t)0x00040000) /* bit 18 */ -#define NVIC_IABR_ACTIVE_19 ((uint32_t)0x00080000) /* bit 19 */ -#define NVIC_IABR_ACTIVE_20 ((uint32_t)0x00100000) /* bit 20 */ -#define NVIC_IABR_ACTIVE_21 ((uint32_t)0x00200000) /* bit 21 */ -#define NVIC_IABR_ACTIVE_22 ((uint32_t)0x00400000) /* bit 22 */ -#define NVIC_IABR_ACTIVE_23 ((uint32_t)0x00800000) /* bit 23 */ -#define NVIC_IABR_ACTIVE_24 ((uint32_t)0x01000000) /* bit 24 */ -#define NVIC_IABR_ACTIVE_25 ((uint32_t)0x02000000) /* bit 25 */ -#define NVIC_IABR_ACTIVE_26 ((uint32_t)0x04000000) /* bit 26 */ -#define NVIC_IABR_ACTIVE_27 ((uint32_t)0x08000000) /* bit 27 */ -#define NVIC_IABR_ACTIVE_28 ((uint32_t)0x10000000) /* bit 28 */ -#define NVIC_IABR_ACTIVE_29 ((uint32_t)0x20000000) /* bit 29 */ -#define NVIC_IABR_ACTIVE_30 ((uint32_t)0x40000000) /* bit 30 */ -#define NVIC_IABR_ACTIVE_31 ((uint32_t)0x80000000) /* bit 31 */ - -/****************** 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 ((uint8_t)0x02) /* Sleep on exit bit */ -#define SCB_SCR_SLEEPDEEP ((uint8_t)0x04) /* Sleep deep bit */ -#define SCB_SCR_SEVONPEND ((uint8_t)0x10) /* Wake up from WFE */ - -/******************** Bit definition for SCB_CCR register *******************/ -#define SCB_CCR_NONBASETHRDENA ((uint16_t)0x0001) /* Thread mode can be entered from any level in Handler mode by controlled return value */ -#define SCB_CCR_USERSETMPEND ((uint16_t)0x0002) /* Enables user code to write the Software Trigger Interrupt register to trigger (pend) a Main exception */ -#define SCB_CCR_UNALIGN_TRP ((uint16_t)0x0008) /* Trap for unaligned access */ -#define SCB_CCR_DIV_0_TRP ((uint16_t)0x0010) /* Trap on Divide by 0 */ -#define SCB_CCR_BFHFNMIGN ((uint16_t)0x0100) /* Handlers running at priority -1 and -2 */ -#define SCB_CCR_STKALIGN ((uint16_t)0x0200) /* 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 ((uint32_t)0x000000FF) /* Priority of system handler 4,8, and 12. Mem Manage, reserved and Debug Monitor */ -#define SCB_SHPR_PRI_N1 ((uint32_t)0x0000FF00) /* Priority of system handler 5,9, and 13. Bus Fault, reserved and reserved */ -#define SCB_SHPR_PRI_N2 ((uint32_t)0x00FF0000) /* Priority of system handler 6,10, and 14. Usage Fault, reserved and PendSV */ -#define SCB_SHPR_PRI_N3 ((uint32_t)0xFF000000) /* 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 *******************/ -#define SCB_CFSR_IACCVIOL ((uint32_t)0x00000001) /* Instruction access violation */ -#define SCB_CFSR_DACCVIOL ((uint32_t)0x00000002) /* Data access violation */ -#define SCB_CFSR_MUNSTKERR ((uint32_t)0x00000008) /* Unstacking error */ -#define SCB_CFSR_MSTKERR ((uint32_t)0x00000010) /* Stacking error */ -#define SCB_CFSR_MMARVALID ((uint32_t)0x00000080) /* Memory Manage Address Register address valid flag */ - -#define SCB_CFSR_IBUSERR ((uint32_t)0x00000100) /* Instruction bus error flag */ -#define SCB_CFSR_PRECISERR ((uint32_t)0x00000200) /* Precise data bus error */ -#define SCB_CFSR_IMPRECISERR ((uint32_t)0x00000400) /* Imprecise data bus error */ -#define SCB_CFSR_UNSTKERR ((uint32_t)0x00000800) /* Unstacking error */ -#define SCB_CFSR_STKERR ((uint32_t)0x00001000) /* Stacking error */ -#define SCB_CFSR_BFARVALID ((uint32_t)0x00008000) /* Bus Fault Address Register address valid flag */ - -#define SCB_CFSR_UNDEFINSTR ((uint32_t)0x00010000) /* The processor attempt to execute an undefined instruction */ -#define SCB_CFSR_INVSTATE ((uint32_t)0x00020000) /* Invalid combination of EPSR and instruction */ -#define SCB_CFSR_INVPC ((uint32_t)0x00040000) /* Attempt to load EXC_RETURN into pc illegally */ -#define SCB_CFSR_NOCP ((uint32_t)0x00080000) /* Attempt to use a coprocessor instruction */ -#define SCB_CFSR_UNALIGNED ((uint32_t)0x01000000) /* Fault occurs when there is an attempt to make an unaligned memory access */ -#define SCB_CFSR_DIVBYZERO ((uint32_t)0x02000000) /* 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 ((uint8_t)0x01) /* Halt request flag */ -#define SCB_DFSR_BKPT ((uint8_t)0x02) /* BKPT flag */ -#define SCB_DFSR_DWTTRAP ((uint8_t)0x04) /* Data Watchpoint and Trace (DWT) flag */ -#define SCB_DFSR_VCATCH ((uint8_t)0x08) /* Vector catch flag */ -#define SCB_DFSR_EXTERNAL ((uint8_t)0x10) /* External debug request flag */ - -/******************* Bit definition for SCB_MMFAR register ******************/ -#define SCB_MMFAR_ADDRESS ((uint32_t)0xFFFFFFFF) /* Mem Manage fault address field */ - -/******************* Bit definition for SCB_BFAR register *******************/ -#define SCB_BFAR_ADDRESS ((uint32_t)0xFFFFFFFF) /* Bus fault address field */ - -/******************* Bit definition for SCB_afsr register *******************/ -#define SCB_AFSR_IMPDEF ((uint32_t)0xFFFFFFFF) /* Implementation defined */ - -/******************************************************************************/ -/* Power Control */ -/******************************************************************************/ - -/******************** Bit definition for PWR_CTLR register ********************/ -#define PWR_CTLR_LPDS ((uint16_t)0x0001) /* Low-Power Deepsleep */ -#define PWR_CTLR_PDDS ((uint16_t)0x0002) /* Power Down Deepsleep */ -#define PWR_CTLR_CWUF ((uint16_t)0x0004) /* Clear Wakeup Flag */ -#define PWR_CTLR_CSBF ((uint16_t)0x0008) /* Clear Standby Flag */ -#define PWR_CTLR_PVDE ((uint16_t)0x0010) /* Power Voltage Detector Enable */ - -#define PWR_CTLR_PLS ((uint16_t)0x00E0) /* PLS[2:0] bits (PVD Level Selection) */ -#define PWR_CTLR_PLS_0 ((uint16_t)0x0020) /* Bit 0 */ -#define PWR_CTLR_PLS_1 ((uint16_t)0x0040) /* Bit 1 */ -#define PWR_CTLR_PLS_2 ((uint16_t)0x0080) /* Bit 2 */ - -#define PWR_CTLR_PLS_2V2 ((uint16_t)0x0000) /* PVD level 2.2V */ -#define PWR_CTLR_PLS_2V3 ((uint16_t)0x0020) /* PVD level 2.3V */ -#define PWR_CTLR_PLS_2V4 ((uint16_t)0x0040) /* PVD level 2.4V */ -#define PWR_CTLR_PLS_2V5 ((uint16_t)0x0060) /* PVD level 2.5V */ -#define PWR_CTLR_PLS_2V6 ((uint16_t)0x0080) /* PVD level 2.6V */ -#define PWR_CTLR_PLS_2V7 ((uint16_t)0x00A0) /* PVD level 2.7V */ -#define PWR_CTLR_PLS_2V8 ((uint16_t)0x00C0) /* PVD level 2.8V */ -#define PWR_CTLR_PLS_2V9 ((uint16_t)0x00E0) /* PVD level 2.9V */ - -#define PWR_CTLR_DBP ((uint16_t)0x0100) /* Disable Backup Domain write protection */ - - -/******************* Bit definition for PWR_CSR register ********************/ -#define PWR_CSR_WUF ((uint16_t)0x0001) /* Wakeup Flag */ -#define PWR_CSR_SBF ((uint16_t)0x0002) /* Standby Flag */ -#define PWR_CSR_PVDO ((uint16_t)0x0004) /* PVD Output */ -#define PWR_CSR_EWUP ((uint16_t)0x0100) /* Enable WKUP pin */ - - - -/******************************************************************************/ -/* Reset and Clock Control */ -/******************************************************************************/ - -/******************** Bit definition for RCC_CTLR register ********************/ -#define RCC_HSION ((uint32_t)0x00000001) /* Internal High Speed clock enable */ -#define RCC_HSIRDY ((uint32_t)0x00000002) /* Internal High Speed clock ready flag */ -#define RCC_HSITRIM ((uint32_t)0x000000F8) /* Internal High Speed clock trimming */ -#define RCC_HSICAL ((uint32_t)0x0000FF00) /* Internal High Speed clock Calibration */ -#define RCC_HSEON ((uint32_t)0x00010000) /* External High Speed clock enable */ -#define RCC_HSERDY ((uint32_t)0x00020000) /* External High Speed clock ready flag */ -#define RCC_HSEBYP ((uint32_t)0x00040000) /* External High Speed clock Bypass */ -#define RCC_CSSON ((uint32_t)0x00080000) /* Clock Security System enable */ -#define RCC_PLLON ((uint32_t)0x01000000) /* PLL enable */ -#define RCC_PLLRDY ((uint32_t)0x02000000) /* PLL clock ready flag */ - - -/******************* Bit definition for RCC_CFGR0 register *******************/ -#define RCC_SW ((uint32_t)0x00000003) /* SW[1:0] bits (System clock Switch) */ -#define RCC_SW_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define RCC_SW_1 ((uint32_t)0x00000002) /* Bit 1 */ - -#define RCC_SW_HSI ((uint32_t)0x00000000) /* HSI selected as system clock */ -#define RCC_SW_HSE ((uint32_t)0x00000001) /* HSE selected as system clock */ -#define RCC_SW_PLL ((uint32_t)0x00000002) /* PLL selected as system clock */ - -#define RCC_SWS ((uint32_t)0x0000000C) /* SWS[1:0] bits (System Clock Switch Status) */ -#define RCC_SWS_0 ((uint32_t)0x00000004) /* Bit 0 */ -#define RCC_SWS_1 ((uint32_t)0x00000008) /* Bit 1 */ - -#define RCC_SWS_HSI ((uint32_t)0x00000000) /* HSI oscillator used as system clock */ -#define RCC_SWS_HSE ((uint32_t)0x00000004) /* HSE oscillator used as system clock */ -#define RCC_SWS_PLL ((uint32_t)0x00000008) /* PLL used as system clock */ - -#define RCC_HPRE ((uint32_t)0x000000F0) /* HPRE[3:0] bits (AHB prescaler) */ -#define RCC_HPRE_0 ((uint32_t)0x00000010) /* Bit 0 */ -#define RCC_HPRE_1 ((uint32_t)0x00000020) /* Bit 1 */ -#define RCC_HPRE_2 ((uint32_t)0x00000040) /* Bit 2 */ -#define RCC_HPRE_3 ((uint32_t)0x00000080) /* Bit 3 */ - -#define RCC_HPRE_DIV1 ((uint32_t)0x00000000) /* SYSCLK not divided */ -#define RCC_HPRE_DIV2 ((uint32_t)0x00000080) /* SYSCLK divided by 2 */ -#define RCC_HPRE_DIV4 ((uint32_t)0x00000090) /* SYSCLK divided by 4 */ -#define RCC_HPRE_DIV8 ((uint32_t)0x000000A0) /* SYSCLK divided by 8 */ -#define RCC_HPRE_DIV16 ((uint32_t)0x000000B0) /* SYSCLK divided by 16 */ -#define RCC_HPRE_DIV64 ((uint32_t)0x000000C0) /* SYSCLK divided by 64 */ -#define RCC_HPRE_DIV128 ((uint32_t)0x000000D0) /* SYSCLK divided by 128 */ -#define RCC_HPRE_DIV256 ((uint32_t)0x000000E0) /* SYSCLK divided by 256 */ -#define RCC_HPRE_DIV512 ((uint32_t)0x000000F0) /* SYSCLK divided by 512 */ - -#define RCC_PPRE1 ((uint32_t)0x00000700) /* PRE1[2:0] bits (APB1 prescaler) */ -#define RCC_PPRE1_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define RCC_PPRE1_1 ((uint32_t)0x00000200) /* Bit 1 */ -#define RCC_PPRE1_2 ((uint32_t)0x00000400) /* Bit 2 */ - -#define RCC_PPRE1_DIV1 ((uint32_t)0x00000000) /* HCLK not divided */ -#define RCC_PPRE1_DIV2 ((uint32_t)0x00000400) /* HCLK divided by 2 */ -#define RCC_PPRE1_DIV4 ((uint32_t)0x00000500) /* HCLK divided by 4 */ -#define RCC_PPRE1_DIV8 ((uint32_t)0x00000600) /* HCLK divided by 8 */ -#define RCC_PPRE1_DIV16 ((uint32_t)0x00000700) /* HCLK divided by 16 */ - -#define RCC_PPRE2 ((uint32_t)0x00003800) /* PRE2[2:0] bits (APB2 prescaler) */ -#define RCC_PPRE2_0 ((uint32_t)0x00000800) /* Bit 0 */ -#define RCC_PPRE2_1 ((uint32_t)0x00001000) /* Bit 1 */ -#define RCC_PPRE2_2 ((uint32_t)0x00002000) /* Bit 2 */ - -#define RCC_PPRE2_DIV1 ((uint32_t)0x00000000) /* HCLK not divided */ -#define RCC_PPRE2_DIV2 ((uint32_t)0x00002000) /* HCLK divided by 2 */ -#define RCC_PPRE2_DIV4 ((uint32_t)0x00002800) /* HCLK divided by 4 */ -#define RCC_PPRE2_DIV8 ((uint32_t)0x00003000) /* HCLK divided by 8 */ -#define RCC_PPRE2_DIV16 ((uint32_t)0x00003800) /* HCLK divided by 16 */ - -#define RCC_ADCPRE ((uint32_t)0x0000C000) /* ADCPRE[1:0] bits (ADC prescaler) */ -#define RCC_ADCPRE_0 ((uint32_t)0x00004000) /* Bit 0 */ -#define RCC_ADCPRE_1 ((uint32_t)0x00008000) /* Bit 1 */ - -#define RCC_ADCPRE_DIV2 ((uint32_t)0x00000000) /* PCLK2 divided by 2 */ -#define RCC_ADCPRE_DIV4 ((uint32_t)0x00004000) /* PCLK2 divided by 4 */ -#define RCC_ADCPRE_DIV6 ((uint32_t)0x00008000) /* PCLK2 divided by 6 */ -#define RCC_ADCPRE_DIV8 ((uint32_t)0x0000C000) /* PCLK2 divided by 8 */ - -#define RCC_PLLSRC ((uint32_t)0x00010000) /* PLL entry clock source */ - -#define RCC_PLLXTPRE ((uint32_t)0x00020000) /* HSE divider for PLL entry */ - -#define RCC_PLLMULL ((uint32_t)0x003C0000) /* PLLMUL[3:0] bits (PLL multiplication factor) */ -#define RCC_PLLMULL_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define RCC_PLLMULL_1 ((uint32_t)0x00080000) /* Bit 1 */ -#define RCC_PLLMULL_2 ((uint32_t)0x00100000) /* Bit 2 */ -#define RCC_PLLMULL_3 ((uint32_t)0x00200000) /* Bit 3 */ - -#define RCC_PLLSRC_HSI_Div2 ((uint32_t)0x00000000) /* HSI clock divided by 2 selected as PLL entry clock source */ -#define RCC_PLLSRC_HSE ((uint32_t)0x00010000) /* HSE clock selected as PLL entry clock source */ - -#define RCC_PLLXTPRE_HSE ((uint32_t)0x00000000) /* HSE clock not divided for PLL entry */ -#define RCC_PLLXTPRE_HSE_Div2 ((uint32_t)0x00020000) /* HSE clock divided by 2 for PLL entry */ - -#define RCC_PLLMULL2 ((uint32_t)0x00000000) /* PLL input clock*2 */ -#define RCC_PLLMULL3 ((uint32_t)0x00040000) /* PLL input clock*3 */ -#define RCC_PLLMULL4 ((uint32_t)0x00080000) /* PLL input clock*4 */ -#define RCC_PLLMULL5 ((uint32_t)0x000C0000) /* PLL input clock*5 */ -#define RCC_PLLMULL6 ((uint32_t)0x00100000) /* PLL input clock*6 */ -#define RCC_PLLMULL7 ((uint32_t)0x00140000) /* PLL input clock*7 */ -#define RCC_PLLMULL8 ((uint32_t)0x00180000) /* PLL input clock*8 */ -#define RCC_PLLMULL9 ((uint32_t)0x001C0000) /* PLL input clock*9 */ -#define RCC_PLLMULL10 ((uint32_t)0x00200000) /* PLL input clock10 */ -#define RCC_PLLMULL11 ((uint32_t)0x00240000) /* PLL input clock*11 */ -#define RCC_PLLMULL12 ((uint32_t)0x00280000) /* PLL input clock*12 */ -#define RCC_PLLMULL13 ((uint32_t)0x002C0000) /* PLL input clock*13 */ -#define RCC_PLLMULL14 ((uint32_t)0x00300000) /* PLL input clock*14 */ -#define RCC_PLLMULL15 ((uint32_t)0x00340000) /* PLL input clock*15 */ -#define RCC_PLLMULL16 ((uint32_t)0x00380000) /* PLL input clock*16 */ -#define RCC_USBPRE ((uint32_t)0x00400000) /* USB Device prescaler */ - -#define RCC_CFGR0_MCO ((uint32_t)0x07000000) /* MCO[2:0] bits (Microcontroller Clock Output) */ -#define RCC_MCO_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define RCC_MCO_1 ((uint32_t)0x02000000) /* Bit 1 */ -#define RCC_MCO_2 ((uint32_t)0x04000000) /* Bit 2 */ - -#define RCC_MCO_NOCLOCK ((uint32_t)0x00000000) /* No clock */ -#define RCC_CFGR0_MCO_SYSCLK ((uint32_t)0x04000000) /* System clock selected as MCO source */ -#define RCC_CFGR0_MCO_HSI ((uint32_t)0x05000000) /* HSI clock selected as MCO source */ -#define RCC_CFGR0_MCO_HSE ((uint32_t)0x06000000) /* HSE clock selected as MCO source */ -#define RCC_CFGR0_MCO_PLL ((uint32_t)0x07000000) /* PLL clock divided by 2 selected as MCO source */ - -/******************* Bit definition for RCC_INTR register ********************/ -#define RCC_LSIRDYF ((uint32_t)0x00000001) /* LSI Ready Interrupt flag */ -#define RCC_LSERDYF ((uint32_t)0x00000002) /* LSE Ready Interrupt flag */ -#define RCC_HSIRDYF ((uint32_t)0x00000004) /* HSI Ready Interrupt flag */ -#define RCC_HSERDYF ((uint32_t)0x00000008) /* HSE Ready Interrupt flag */ -#define RCC_PLLRDYF ((uint32_t)0x00000010) /* PLL Ready Interrupt flag */ -#define RCC_CSSF ((uint32_t)0x00000080) /* Clock Security System Interrupt flag */ -#define RCC_LSIRDYIE ((uint32_t)0x00000100) /* LSI Ready Interrupt Enable */ -#define RCC_LSERDYIE ((uint32_t)0x00000200) /* LSE Ready Interrupt Enable */ -#define RCC_HSIRDYIE ((uint32_t)0x00000400) /* HSI Ready Interrupt Enable */ -#define RCC_HSERDYIE ((uint32_t)0x00000800) /* HSE Ready Interrupt Enable */ -#define RCC_PLLRDYIE ((uint32_t)0x00001000) /* PLL Ready Interrupt Enable */ -#define RCC_LSIRDYC ((uint32_t)0x00010000) /* LSI Ready Interrupt Clear */ -#define RCC_LSERDYC ((uint32_t)0x00020000) /* LSE Ready Interrupt Clear */ -#define RCC_HSIRDYC ((uint32_t)0x00040000) /* HSI Ready Interrupt Clear */ -#define RCC_HSERDYC ((uint32_t)0x00080000) /* HSE Ready Interrupt Clear */ -#define RCC_PLLRDYC ((uint32_t)0x00100000) /* PLL Ready Interrupt Clear */ -#define RCC_CSSC ((uint32_t)0x00800000) /* Clock Security System Interrupt Clear */ - - -/***************** Bit definition for RCC_APB2PRSTR register *****************/ -#define RCC_AFIORST ((uint32_t)0x00000001) /* Alternate Function I/O reset */ -#define RCC_IOPARST ((uint32_t)0x00000004) /* I/O port A reset */ -#define RCC_IOPBRST ((uint32_t)0x00000008) /* I/O port B reset */ -#define RCC_IOPCRST ((uint32_t)0x00000010) /* I/O port C reset */ -#define RCC_IOPDRST ((uint32_t)0x00000020) /* I/O port D reset */ -#define RCC_ADC1RST ((uint32_t)0x00000200) /* ADC 1 interface reset */ - - -#define RCC_ADC2RST ((uint32_t)0x00000400) /* ADC 2 interface reset */ - - -#define RCC_TIM1RST ((uint32_t)0x00000800) /* TIM1 Timer reset */ -#define RCC_SPI1RST ((uint32_t)0x00001000) /* SPI 1 reset */ -#define RCC_USART1RST ((uint32_t)0x00004000) /* USART1 reset */ - -#define RCC_IOPERST ((uint32_t)0x00000040) /* I/O port E reset */ - -/***************** Bit definition for RCC_APB1PRSTR register *****************/ -#define RCC_TIM2RST ((uint32_t)0x00000001) /* Timer 2 reset */ -#define RCC_TIM3RST ((uint32_t)0x00000002) /* Timer 3 reset */ -#define RCC_WWDGRST ((uint32_t)0x00000800) /* Window Watchdog reset */ -#define RCC_USART2RST ((uint32_t)0x00020000) /* USART 2 reset */ -#define RCC_I2C1RST ((uint32_t)0x00200000) /* I2C 1 reset */ - -#define RCC_CAN1RST ((uint32_t)0x02000000) /* CAN1 reset */ - - -#define RCC_BKPRST ((uint32_t)0x08000000) /* Backup interface reset */ -#define RCC_PWRRST ((uint32_t)0x10000000) /* Power interface reset */ - - -#define RCC_TIM4RST ((uint32_t)0x00000004) /* Timer 4 reset */ -#define RCC_SPI2RST ((uint32_t)0x00004000) /* SPI 2 reset */ -#define RCC_USART3RST ((uint32_t)0x00040000) /* USART 3 reset */ -#define RCC_I2C2RST ((uint32_t)0x00400000) /* I2C 2 reset */ - -#define RCC_USBRST ((uint32_t)0x00800000) /* USB Device reset */ - -/****************** Bit definition for RCC_AHBPCENR register ******************/ -#define RCC_DMA1EN ((uint16_t)0x0001) /* DMA1 clock enable */ -#define RCC_SRAMEN ((uint16_t)0x0004) /* SRAM interface clock enable */ -#define RCC_FLITFEN ((uint16_t)0x0010) /* FLITF clock enable */ -#define RCC_CRCEN ((uint16_t)0x0040) /* CRC clock enable */ -#define RCC_USBHD ((uint16_t)0x1000) - -/****************** Bit definition for RCC_APB2PCENR register *****************/ -#define RCC_AFIOEN ((uint32_t)0x00000001) /* Alternate Function I/O clock enable */ -#define RCC_IOPAEN ((uint32_t)0x00000004) /* I/O port A clock enable */ -#define RCC_IOPBEN ((uint32_t)0x00000008) /* I/O port B clock enable */ -#define RCC_IOPCEN ((uint32_t)0x00000010) /* I/O port C clock enable */ -#define RCC_IOPDEN ((uint32_t)0x00000020) /* I/O port D clock enable */ -#define RCC_ADC1EN ((uint32_t)0x00000200) /* ADC 1 interface clock enable */ - -#define RCC_ADC2EN ((uint32_t)0x00000400) /* ADC 2 interface clock enable */ - - -#define RCC_TIM1EN ((uint32_t)0x00000800) /* TIM1 Timer clock enable */ -#define RCC_SPI1EN ((uint32_t)0x00001000) /* SPI 1 clock enable */ -#define RCC_USART1EN ((uint32_t)0x00004000) /* USART1 clock enable */ - -/***************** Bit definition for RCC_APB1PCENR register ******************/ -#define RCC_TIM2EN ((uint32_t)0x00000001) /* Timer 2 clock enabled*/ -#define RCC_TIM3EN ((uint32_t)0x00000002) /* Timer 3 clock enable */ -#define RCC_WWDGEN ((uint32_t)0x00000800) /* Window Watchdog clock enable */ -#define RCC_USART2EN ((uint32_t)0x00020000) /* USART 2 clock enable */ -#define RCC_I2C1EN ((uint32_t)0x00200000) /* I2C 1 clock enable */ - -#define RCC_BKPEN ((uint32_t)0x08000000) /* Backup interface clock enable */ -#define RCC_PWREN ((uint32_t)0x10000000) /* Power interface clock enable */ - - -#define RCC_USBEN ((uint32_t)0x00800000) /* USB Device clock enable */ - -/******************* Bit definition for RCC_BDCTLR register *******************/ -#define RCC_LSEON ((uint32_t)0x00000001) /* External Low Speed oscillator enable */ -#define RCC_LSERDY ((uint32_t)0x00000002) /* External Low Speed oscillator Ready */ -#define RCC_LSEBYP ((uint32_t)0x00000004) /* External Low Speed oscillator Bypass */ - -#define RCC_RTCSEL ((uint32_t)0x00000300) /* RTCSEL[1:0] bits (RTC clock source selection) */ -#define RCC_RTCSEL_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define RCC_RTCSEL_1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define RCC_RTCSEL_NOCLOCK ((uint32_t)0x00000000) /* No clock */ -#define RCC_RTCSEL_LSE ((uint32_t)0x00000100) /* LSE oscillator clock used as RTC clock */ -#define RCC_RTCSEL_LSI ((uint32_t)0x00000200) /* LSI oscillator clock used as RTC clock */ -#define RCC_RTCSEL_HSE ((uint32_t)0x00000300) /* HSE oscillator clock divided by 128 used as RTC clock */ - -#define RCC_RTCEN ((uint32_t)0x00008000) /* RTC clock enable */ -#define RCC_BDRST ((uint32_t)0x00010000) /* Backup domain software reset */ - -/******************* Bit definition for RCC_RSTSCKR register ********************/ -#define RCC_LSION ((uint32_t)0x00000001) /* Internal Low Speed oscillator enable */ -#define RCC_LSIRDY ((uint32_t)0x00000002) /* Internal Low Speed oscillator Ready */ -#define RCC_RMVF ((uint32_t)0x01000000) /* Remove reset flag */ -#define RCC_PINRSTF ((uint32_t)0x04000000) /* PIN reset flag */ -#define RCC_PORRSTF ((uint32_t)0x08000000) /* POR/PDR reset flag */ -#define RCC_SFTRSTF ((uint32_t)0x10000000) /* Software Reset flag */ -#define RCC_IWDGRSTF ((uint32_t)0x20000000) /* Independent Watchdog reset flag */ -#define RCC_WWDGRSTF ((uint32_t)0x40000000) /* Window watchdog reset flag */ -#define RCC_LPWRRSTF ((uint32_t)0x80000000) /* Low-Power reset flag */ - -/******************************************************************************/ -/* Real-Time Clock */ -/******************************************************************************/ - -/******************* Bit definition for RTC_CTLRH register ********************/ -#define RTC_CTLRH_SECIE ((uint8_t)0x01) /* Second Interrupt Enable */ -#define RTC_CTLRH_ALRIE ((uint8_t)0x02) /* Alarm Interrupt Enable */ -#define RTC_CTLRH_OWIE ((uint8_t)0x04) /* OverfloW Interrupt Enable */ - -/******************* Bit definition for RTC_CTLRL register ********************/ -#define RTC_CTLRL_SECF ((uint8_t)0x01) /* Second Flag */ -#define RTC_CTLRL_ALRF ((uint8_t)0x02) /* Alarm Flag */ -#define RTC_CTLRL_OWF ((uint8_t)0x04) /* OverfloW Flag */ -#define RTC_CTLRL_RSF ((uint8_t)0x08) /* Registers Synchronized Flag */ -#define RTC_CTLRL_CNF ((uint8_t)0x10) /* Configuration Flag */ -#define RTC_CTLRL_RTOFF ((uint8_t)0x20) /* RTC operation OFF */ - -/******************* Bit definition for RTC_PSCH register *******************/ -#define RTC_PSCH_PRL ((uint16_t)0x000F) /* RTC Prescaler Reload Value High */ - -/******************* Bit definition for RTC_PRLL register *******************/ -#define RTC_PSCL_PRL ((uint16_t)0xFFFF) /* RTC Prescaler Reload Value Low */ - -/******************* Bit definition for RTC_DIVH register *******************/ -#define RTC_DIVH_RTC_DIV ((uint16_t)0x000F) /* RTC Clock Divider High */ - -/******************* Bit definition for RTC_DIVL register *******************/ -#define RTC_DIVL_RTC_DIV ((uint16_t)0xFFFF) /* RTC Clock Divider Low */ - -/******************* Bit definition for RTC_CNTH register *******************/ -#define RTC_CNTH_RTC_CNT ((uint16_t)0xFFFF) /* RTC Counter High */ - -/******************* Bit definition for RTC_CNTL register *******************/ -#define RTC_CNTL_RTC_CNT ((uint16_t)0xFFFF) /* RTC Counter Low */ - -/******************* Bit definition for RTC_ALRMH register *******************/ -#define RTC_ALRMH_RTC_ALRM ((uint16_t)0xFFFF) /* RTC Alarm High */ - -/******************* Bit definition for RTC_ALRML register *******************/ -#define RTC_ALRML_RTC_ALRM ((uint16_t)0xFFFF) /* RTC Alarm Low */ - -/******************************************************************************/ -/* Serial Peripheral Interface */ -/******************************************************************************/ - -/******************* Bit definition for SPI_CTLR1 register ********************/ -#define SPI_CTLR1_CPHA ((uint16_t)0x0001) /* Clock Phase */ -#define SPI_CTLR1_CPOL ((uint16_t)0x0002) /* Clock Polarity */ -#define SPI_CTLR1_MSTR ((uint16_t)0x0004) /* Master Selection */ - -#define SPI_CTLR1_BR ((uint16_t)0x0038) /* BR[2:0] bits (Baud Rate Control) */ -#define SPI_CTLR1_BR_0 ((uint16_t)0x0008) /* Bit 0 */ -#define SPI_CTLR1_BR_1 ((uint16_t)0x0010) /* Bit 1 */ -#define SPI_CTLR1_BR_2 ((uint16_t)0x0020) /* Bit 2 */ - -#define SPI_CTLR1_SPE ((uint16_t)0x0040) /* SPI Enable */ -#define SPI_CTLR1_LSBFIRST ((uint16_t)0x0080) /* Frame Format */ -#define SPI_CTLR1_SSI ((uint16_t)0x0100) /* Internal slave select */ -#define SPI_CTLR1_SSM ((uint16_t)0x0200) /* Software slave management */ -#define SPI_CTLR1_RXONLY ((uint16_t)0x0400) /* Receive only */ -#define SPI_CTLR1_DFF ((uint16_t)0x0800) /* Data Frame Format */ -#define SPI_CTLR1_CRCNEXT ((uint16_t)0x1000) /* Transmit CRC next */ -#define SPI_CTLR1_CRCEN ((uint16_t)0x2000) /* Hardware CRC calculation enable */ -#define SPI_CTLR1_BIDIOE ((uint16_t)0x4000) /* Output enable in bidirectional mode */ -#define SPI_CTLR1_BIDIMODE ((uint16_t)0x8000) /* Bidirectional data mode enable */ - -/******************* Bit definition for SPI_CTLR2 register ********************/ -#define SPI_CTLR2_RXDMAEN ((uint8_t)0x01) /* Rx Buffer DMA Enable */ -#define SPI_CTLR2_TXDMAEN ((uint8_t)0x02) /* Tx Buffer DMA Enable */ -#define SPI_CTLR2_SSOE ((uint8_t)0x04) /* SS Output Enable */ -#define SPI_CTLR2_ERRIE ((uint8_t)0x20) /* Error Interrupt Enable */ -#define SPI_CTLR2_RXNEIE ((uint8_t)0x40) /* RX buffer Not Empty Interrupt Enable */ -#define SPI_CTLR2_TXEIE ((uint8_t)0x80) /* Tx buffer Empty Interrupt Enable */ - -/******************** Bit definition for SPI_STATR register ********************/ -#define SPI_STATR_RXNE ((uint8_t)0x01) /* Receive buffer Not Empty */ -#define SPI_STATR_TXE ((uint8_t)0x02) /* Transmit buffer Empty */ -#define SPI_STATR_CHSIDE ((uint8_t)0x04) /* Channel side */ -#define SPI_STATR_UDR ((uint8_t)0x08) /* Underrun flag */ -#define SPI_STATR_CRCERR ((uint8_t)0x10) /* CRC Error flag */ -#define SPI_STATR_MODF ((uint8_t)0x20) /* Mode fault */ -#define SPI_STATR_OVR ((uint8_t)0x40) /* Overrun flag */ -#define SPI_STATR_BSY ((uint8_t)0x80) /* Busy flag */ - -/******************** Bit definition for SPI_DATAR register ********************/ -#define SPI_DATAR_DR ((uint16_t)0xFFFF) /* Data Register */ - -/******************* Bit definition for SPI_CRCR register ******************/ -#define SPI_CRCR_CRCPOLY ((uint16_t)0xFFFF) /* CRC polynomial register */ - -/****************** Bit definition for SPI_RCRCR register ******************/ -#define SPI_RCRCR_RXCRC ((uint16_t)0xFFFF) /* Rx CRC Register */ - -/****************** Bit definition for SPI_TCRCR register ******************/ -#define SPI_TCRCR_TXCRC ((uint16_t)0xFFFF) /* Tx CRC Register */ - -/****************** Bit definition for SPI_I2SCFGR register *****************/ -#define SPI_I2SCFGR_CHLEN ((uint16_t)0x0001) /* Channel length (number of bits per audio channel) */ - -#define SPI_I2SCFGR_DATLEN ((uint16_t)0x0006) /* DATLEN[1:0] bits (Data length to be transferred) */ -#define SPI_I2SCFGR_DATLEN_0 ((uint16_t)0x0002) /* Bit 0 */ -#define SPI_I2SCFGR_DATLEN_1 ((uint16_t)0x0004) /* Bit 1 */ - -#define SPI_I2SCFGR_CKPOL ((uint16_t)0x0008) /* steady state clock polarity */ - -#define SPI_I2SCFGR_I2SSTD ((uint16_t)0x0030) /* I2SSTD[1:0] bits (I2S standard selection) */ -#define SPI_I2SCFGR_I2SSTD_0 ((uint16_t)0x0010) /* Bit 0 */ -#define SPI_I2SCFGR_I2SSTD_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define SPI_I2SCFGR_PCMSYNC ((uint16_t)0x0080) /* PCM frame synchronization */ - -#define SPI_I2SCFGR_I2SCFG ((uint16_t)0x0300) /* I2SCFG[1:0] bits (I2S configuration mode) */ -#define SPI_I2SCFGR_I2SCFG_0 ((uint16_t)0x0100) /* Bit 0 */ -#define SPI_I2SCFGR_I2SCFG_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define SPI_I2SCFGR_I2SE ((uint16_t)0x0400) /* I2S Enable */ -#define SPI_I2SCFGR_I2SMOD ((uint16_t)0x0800) /* I2S mode selection */ - -/****************** Bit definition for SPI_I2SPR register *******************/ -#define SPI_I2SPR_I2SDIV ((uint16_t)0x00FF) /* I2S Linear prescaler */ -#define SPI_I2SPR_ODD ((uint16_t)0x0100) /* Odd factor for the prescaler */ -#define SPI_I2SPR_MCKOE ((uint16_t)0x0200) /* Master Clock Output Enable */ - -/******************************************************************************/ -/* 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 */ - -/******************************************************************************/ -/* TIM */ -/******************************************************************************/ - -/******************* Bit definition for TIM_CTLR1 register ********************/ -#define TIM_CEN ((uint16_t)0x0001) /* Counter enable */ -#define TIM_UDIS ((uint16_t)0x0002) /* Update disable */ -#define TIM_URS ((uint16_t)0x0004) /* Update request source */ -#define TIM_OPM ((uint16_t)0x0008) /* One pulse mode */ -#define TIM_DIR ((uint16_t)0x0010) /* Direction */ - -#define TIM_CMS ((uint16_t)0x0060) /* CMS[1:0] bits (Center-aligned mode selection) */ -#define TIM_CMS_0 ((uint16_t)0x0020) /* Bit 0 */ -#define TIM_CMS_1 ((uint16_t)0x0040) /* Bit 1 */ - -#define TIM_ARPE ((uint16_t)0x0080) /* Auto-reload preload enable */ - -#define TIM_CTLR1_CKD ((uint16_t)0x0300) /* CKD[1:0] bits (clock division) */ -#define TIM_CKD_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_CKD_1 ((uint16_t)0x0200) /* Bit 1 */ - -/******************* Bit definition for TIM_CTLR2 register ********************/ -#define TIM_CCPC ((uint16_t)0x0001) /* Capture/Compare Preloaded Control */ -#define TIM_CCUS ((uint16_t)0x0004) /* Capture/Compare Control Update Selection */ -#define TIM_CCDS ((uint16_t)0x0008) /* Capture/Compare DMA Selection */ - -#define TIM_MMS ((uint16_t)0x0070) /* MMS[2:0] bits (Master Mode Selection) */ -#define TIM_MMS_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_MMS_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_MMS_2 ((uint16_t)0x0040) /* Bit 2 */ - -#define TIM_TI1S ((uint16_t)0x0080) /* TI1 Selection */ -#define TIM_OIS1 ((uint16_t)0x0100) /* Output Idle state 1 (OC1 output) */ -#define TIM_OIS1N ((uint16_t)0x0200) /* Output Idle state 1 (OC1N output) */ -#define TIM_OIS2 ((uint16_t)0x0400) /* Output Idle state 2 (OC2 output) */ -#define TIM_OIS2N ((uint16_t)0x0800) /* Output Idle state 2 (OC2N output) */ -#define TIM_OIS3 ((uint16_t)0x1000) /* Output Idle state 3 (OC3 output) */ -#define TIM_OIS3N ((uint16_t)0x2000) /* Output Idle state 3 (OC3N output) */ -#define TIM_OIS4 ((uint16_t)0x4000) /* Output Idle state 4 (OC4 output) */ - -/******************* Bit definition for TIM_SMCFGR register *******************/ -#define TIM_SMS ((uint16_t)0x0007) /* SMS[2:0] bits (Slave mode selection) */ -#define TIM_SMS_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_SMS_1 ((uint16_t)0x0002) /* Bit 1 */ -#define TIM_SMS_2 ((uint16_t)0x0004) /* Bit 2 */ - -#define TIM_TS ((uint16_t)0x0070) /* TS[2:0] bits (Trigger selection) */ -#define TIM_TS_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_TS_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_TS_2 ((uint16_t)0x0040) /* Bit 2 */ - -#define TIM_MSM ((uint16_t)0x0080) /* Master/slave mode */ - -#define TIM_ETF ((uint16_t)0x0F00) /* ETF[3:0] bits (External trigger filter) */ -#define TIM_ETF_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_ETF_1 ((uint16_t)0x0200) /* Bit 1 */ -#define TIM_ETF_2 ((uint16_t)0x0400) /* Bit 2 */ -#define TIM_ETF_3 ((uint16_t)0x0800) /* Bit 3 */ - -#define TIM_ETPS ((uint16_t)0x3000) /* ETPS[1:0] bits (External trigger prescaler) */ -#define TIM_ETPS_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_ETPS_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define TIM_ECE ((uint16_t)0x4000) /* External clock enable */ -#define TIM_ETP ((uint16_t)0x8000) /* External trigger polarity */ - -/******************* Bit definition for TIM_DMAINTENR register *******************/ -#define TIM_UIE ((uint16_t)0x0001) /* Update interrupt enable */ -#define TIM_CC1IE ((uint16_t)0x0002) /* Capture/Compare 1 interrupt enable */ -#define TIM_CC2IE ((uint16_t)0x0004) /* Capture/Compare 2 interrupt enable */ -#define TIM_CC3IE ((uint16_t)0x0008) /* Capture/Compare 3 interrupt enable */ -#define TIM_CC4IE ((uint16_t)0x0010) /* Capture/Compare 4 interrupt enable */ -#define TIM_COMIE ((uint16_t)0x0020) /* COM interrupt enable */ -#define TIM_TIE ((uint16_t)0x0040) /* Trigger interrupt enable */ -#define TIM_BIE ((uint16_t)0x0080) /* Break interrupt enable */ -#define TIM_UDE ((uint16_t)0x0100) /* Update DMA request enable */ -#define TIM_CC1DE ((uint16_t)0x0200) /* Capture/Compare 1 DMA request enable */ -#define TIM_CC2DE ((uint16_t)0x0400) /* Capture/Compare 2 DMA request enable */ -#define TIM_CC3DE ((uint16_t)0x0800) /* Capture/Compare 3 DMA request enable */ -#define TIM_CC4DE ((uint16_t)0x1000) /* Capture/Compare 4 DMA request enable */ -#define TIM_COMDE ((uint16_t)0x2000) /* COM DMA request enable */ -#define TIM_TDE ((uint16_t)0x4000) /* Trigger DMA request enable */ - -/******************** Bit definition for TIM_INTFR register ********************/ -#define TIM_UIF ((uint16_t)0x0001) /* Update interrupt Flag */ -#define TIM_CC1IF ((uint16_t)0x0002) /* Capture/Compare 1 interrupt Flag */ -#define TIM_CC2IF ((uint16_t)0x0004) /* Capture/Compare 2 interrupt Flag */ -#define TIM_CC3IF ((uint16_t)0x0008) /* Capture/Compare 3 interrupt Flag */ -#define TIM_CC4IF ((uint16_t)0x0010) /* Capture/Compare 4 interrupt Flag */ -#define TIM_COMIF ((uint16_t)0x0020) /* COM interrupt Flag */ -#define TIM_TIF ((uint16_t)0x0040) /* Trigger interrupt Flag */ -#define TIM_BIF ((uint16_t)0x0080) /* Break interrupt Flag */ -#define TIM_CC1OF ((uint16_t)0x0200) /* Capture/Compare 1 Overcapture Flag */ -#define TIM_CC2OF ((uint16_t)0x0400) /* Capture/Compare 2 Overcapture Flag */ -#define TIM_CC3OF ((uint16_t)0x0800) /* Capture/Compare 3 Overcapture Flag */ -#define TIM_CC4OF ((uint16_t)0x1000) /* Capture/Compare 4 Overcapture Flag */ - -/******************* Bit definition for TIM_SWEVGR register ********************/ -#define TIM_UG ((uint8_t)0x01) /* Update Generation */ -#define TIM_CC1G ((uint8_t)0x02) /* Capture/Compare 1 Generation */ -#define TIM_CC2G ((uint8_t)0x04) /* Capture/Compare 2 Generation */ -#define TIM_CC3G ((uint8_t)0x08) /* Capture/Compare 3 Generation */ -#define TIM_CC4G ((uint8_t)0x10) /* Capture/Compare 4 Generation */ -#define TIM_COMG ((uint8_t)0x20) /* Capture/Compare Control Update Generation */ -#define TIM_TG ((uint8_t)0x40) /* Trigger Generation */ -#define TIM_BG ((uint8_t)0x80) /* Break Generation */ - -/****************** Bit definition for TIM_CHCTLR1 register *******************/ -#define TIM_CC1S ((uint16_t)0x0003) /* CC1S[1:0] bits (Capture/Compare 1 Selection) */ -#define TIM_CC1S_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_CC1S_1 ((uint16_t)0x0002) /* Bit 1 */ - -#define TIM_OC1FE ((uint16_t)0x0004) /* Output Compare 1 Fast enable */ -#define TIM_OC1PE ((uint16_t)0x0008) /* Output Compare 1 Preload enable */ - -#define TIM_OC1M ((uint16_t)0x0070) /* OC1M[2:0] bits (Output Compare 1 Mode) */ -#define TIM_OC1M_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_OC1M_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_OC1M_2 ((uint16_t)0x0040) /* Bit 2 */ - -#define TIM_OC1CE ((uint16_t)0x0080) /* Output Compare 1Clear Enable */ - -#define TIM_CC2S ((uint16_t)0x0300) /* CC2S[1:0] bits (Capture/Compare 2 Selection) */ -#define TIM_CC2S_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_CC2S_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define TIM_OC2FE ((uint16_t)0x0400) /* Output Compare 2 Fast enable */ -#define TIM_OC2PE ((uint16_t)0x0800) /* Output Compare 2 Preload enable */ - -#define TIM_OC2M ((uint16_t)0x7000) /* OC2M[2:0] bits (Output Compare 2 Mode) */ -#define TIM_OC2M_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_OC2M_1 ((uint16_t)0x2000) /* Bit 1 */ -#define TIM_OC2M_2 ((uint16_t)0x4000) /* Bit 2 */ - -#define TIM_OC2CE ((uint16_t)0x8000) /* Output Compare 2 Clear Enable */ - - -#define TIM_IC1PSC ((uint16_t)0x000C) /* IC1PSC[1:0] bits (Input Capture 1 Prescaler) */ -#define TIM_IC1PSC_0 ((uint16_t)0x0004) /* Bit 0 */ -#define TIM_IC1PSC_1 ((uint16_t)0x0008) /* Bit 1 */ - -#define TIM_IC1F ((uint16_t)0x00F0) /* IC1F[3:0] bits (Input Capture 1 Filter) */ -#define TIM_IC1F_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_IC1F_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_IC1F_2 ((uint16_t)0x0040) /* Bit 2 */ -#define TIM_IC1F_3 ((uint16_t)0x0080) /* Bit 3 */ - -#define TIM_IC2PSC ((uint16_t)0x0C00) /* IC2PSC[1:0] bits (Input Capture 2 Prescaler) */ -#define TIM_IC2PSC_0 ((uint16_t)0x0400) /* Bit 0 */ -#define TIM_IC2PSC_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define TIM_IC2F ((uint16_t)0xF000) /* IC2F[3:0] bits (Input Capture 2 Filter) */ -#define TIM_IC2F_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_IC2F_1 ((uint16_t)0x2000) /* Bit 1 */ -#define TIM_IC2F_2 ((uint16_t)0x4000) /* Bit 2 */ -#define TIM_IC2F_3 ((uint16_t)0x8000) /* Bit 3 */ - -/****************** Bit definition for TIM_CHCTLR2 register *******************/ -#define TIM_CC3S ((uint16_t)0x0003) /* CC3S[1:0] bits (Capture/Compare 3 Selection) */ -#define TIM_CC3S_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_CC3S_1 ((uint16_t)0x0002) /* Bit 1 */ - -#define TIM_OC3FE ((uint16_t)0x0004) /* Output Compare 3 Fast enable */ -#define TIM_OC3PE ((uint16_t)0x0008) /* Output Compare 3 Preload enable */ - -#define TIM_OC3M ((uint16_t)0x0070) /* OC3M[2:0] bits (Output Compare 3 Mode) */ -#define TIM_OC3M_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_OC3M_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_OC3M_2 ((uint16_t)0x0040) /* Bit 2 */ - -#define TIM_OC3CE ((uint16_t)0x0080) /* Output Compare 3 Clear Enable */ - -#define TIM_CC4S ((uint16_t)0x0300) /* CC4S[1:0] bits (Capture/Compare 4 Selection) */ -#define TIM_CC4S_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_CC4S_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define TIM_OC4FE ((uint16_t)0x0400) /* Output Compare 4 Fast enable */ -#define TIM_OC4PE ((uint16_t)0x0800) /* Output Compare 4 Preload enable */ - -#define TIM_OC4M ((uint16_t)0x7000) /* OC4M[2:0] bits (Output Compare 4 Mode) */ -#define TIM_OC4M_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_OC4M_1 ((uint16_t)0x2000) /* Bit 1 */ -#define TIM_OC4M_2 ((uint16_t)0x4000) /* Bit 2 */ - -#define TIM_OC4CE ((uint16_t)0x8000) /* Output Compare 4 Clear Enable */ - - -#define TIM_IC3PSC ((uint16_t)0x000C) /* IC3PSC[1:0] bits (Input Capture 3 Prescaler) */ -#define TIM_IC3PSC_0 ((uint16_t)0x0004) /* Bit 0 */ -#define TIM_IC3PSC_1 ((uint16_t)0x0008) /* Bit 1 */ - -#define TIM_IC3F ((uint16_t)0x00F0) /* IC3F[3:0] bits (Input Capture 3 Filter) */ -#define TIM_IC3F_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_IC3F_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_IC3F_2 ((uint16_t)0x0040) /* Bit 2 */ -#define TIM_IC3F_3 ((uint16_t)0x0080) /* Bit 3 */ - -#define TIM_IC4PSC ((uint16_t)0x0C00) /* IC4PSC[1:0] bits (Input Capture 4 Prescaler) */ -#define TIM_IC4PSC_0 ((uint16_t)0x0400) /* Bit 0 */ -#define TIM_IC4PSC_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define TIM_IC4F ((uint16_t)0xF000) /* IC4F[3:0] bits (Input Capture 4 Filter) */ -#define TIM_IC4F_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_IC4F_1 ((uint16_t)0x2000) /* Bit 1 */ -#define TIM_IC4F_2 ((uint16_t)0x4000) /* Bit 2 */ -#define TIM_IC4F_3 ((uint16_t)0x8000) /* Bit 3 */ - -/******************* Bit definition for TIM_CCER register *******************/ -#define TIM_CC1E ((uint16_t)0x0001) /* Capture/Compare 1 output enable */ -#define TIM_CC1P ((uint16_t)0x0002) /* Capture/Compare 1 output Polarity */ -#define TIM_CC1NE ((uint16_t)0x0004) /* Capture/Compare 1 Complementary output enable */ -#define TIM_CC1NP ((uint16_t)0x0008) /* Capture/Compare 1 Complementary output Polarity */ -#define TIM_CC2E ((uint16_t)0x0010) /* Capture/Compare 2 output enable */ -#define TIM_CC2P ((uint16_t)0x0020) /* Capture/Compare 2 output Polarity */ -#define TIM_CC2NE ((uint16_t)0x0040) /* Capture/Compare 2 Complementary output enable */ -#define TIM_CC2NP ((uint16_t)0x0080) /* Capture/Compare 2 Complementary output Polarity */ -#define TIM_CC3E ((uint16_t)0x0100) /* Capture/Compare 3 output enable */ -#define TIM_CC3P ((uint16_t)0x0200) /* Capture/Compare 3 output Polarity */ -#define TIM_CC3NE ((uint16_t)0x0400) /* Capture/Compare 3 Complementary output enable */ -#define TIM_CC3NP ((uint16_t)0x0800) /* Capture/Compare 3 Complementary output Polarity */ -#define TIM_CC4E ((uint16_t)0x1000) /* Capture/Compare 4 output enable */ -#define TIM_CC4P ((uint16_t)0x2000) /* Capture/Compare 4 output Polarity */ -#define TIM_CC4NP ((uint16_t)0x8000) /* Capture/Compare 4 Complementary output Polarity */ - -/******************* Bit definition for TIM_CNT register ********************/ -#define TIM_CNT ((uint16_t)0xFFFF) /* Counter Value */ - -/******************* Bit definition for TIM_PSC register ********************/ -#define TIM_PSC ((uint16_t)0xFFFF) /* Prescaler Value */ - -/******************* Bit definition for TIM_ATRLR register ********************/ -#define TIM_ARR ((uint16_t)0xFFFF) /* actual auto-reload Value */ - -/******************* Bit definition for TIM_RPTCR register ********************/ -#define TIM_REP ((uint8_t)0xFF) /* Repetition Counter Value */ - -/******************* Bit definition for TIM_CH1CVR register *******************/ -#define TIM_CCR1 ((uint16_t)0xFFFF) /* Capture/Compare 1 Value */ - -/******************* Bit definition for TIM_CH2CVR register *******************/ -#define TIM_CCR2 ((uint16_t)0xFFFF) /* Capture/Compare 2 Value */ - -/******************* Bit definition for TIM_CH3CVR register *******************/ -#define TIM_CCR3 ((uint16_t)0xFFFF) /* Capture/Compare 3 Value */ - -/******************* Bit definition for TIM_CH4CVR register *******************/ -#define TIM_CCR4 ((uint16_t)0xFFFF) /* Capture/Compare 4 Value */ - -/******************* Bit definition for TIM_BDTR register *******************/ -#define TIM_DTG ((uint16_t)0x00FF) /* DTG[0:7] bits (Dead-Time Generator set-up) */ -#define TIM_DTG_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_DTG_1 ((uint16_t)0x0002) /* Bit 1 */ -#define TIM_DTG_2 ((uint16_t)0x0004) /* Bit 2 */ -#define TIM_DTG_3 ((uint16_t)0x0008) /* Bit 3 */ -#define TIM_DTG_4 ((uint16_t)0x0010) /* Bit 4 */ -#define TIM_DTG_5 ((uint16_t)0x0020) /* Bit 5 */ -#define TIM_DTG_6 ((uint16_t)0x0040) /* Bit 6 */ -#define TIM_DTG_7 ((uint16_t)0x0080) /* Bit 7 */ - -#define TIM_LOCK ((uint16_t)0x0300) /* LOCK[1:0] bits (Lock Configuration) */ -#define TIM_LOCK_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_LOCK_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define TIM_OSSI ((uint16_t)0x0400) /* Off-State Selection for Idle mode */ -#define TIM_OSSR ((uint16_t)0x0800) /* Off-State Selection for Run mode */ -#define TIM_BKE ((uint16_t)0x1000) /* Break enable */ -#define TIM_BKP ((uint16_t)0x2000) /* Break Polarity */ -#define TIM_AOE ((uint16_t)0x4000) /* Automatic Output enable */ -#define TIM_MOE ((uint16_t)0x8000) /* Main Output enable */ - -/******************* Bit definition for TIM_DMACFGR register ********************/ -#define TIM_DBA ((uint16_t)0x001F) /* DBA[4:0] bits (DMA Base Address) */ -#define TIM_DBA_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_DBA_1 ((uint16_t)0x0002) /* Bit 1 */ -#define TIM_DBA_2 ((uint16_t)0x0004) /* Bit 2 */ -#define TIM_DBA_3 ((uint16_t)0x0008) /* Bit 3 */ -#define TIM_DBA_4 ((uint16_t)0x0010) /* Bit 4 */ - -#define TIM_DBL ((uint16_t)0x1F00) /* DBL[4:0] bits (DMA Burst Length) */ -#define TIM_DBL_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_DBL_1 ((uint16_t)0x0200) /* Bit 1 */ -#define TIM_DBL_2 ((uint16_t)0x0400) /* Bit 2 */ -#define TIM_DBL_3 ((uint16_t)0x0800) /* Bit 3 */ -#define TIM_DBL_4 ((uint16_t)0x1000) /* Bit 4 */ - -/******************* Bit definition for TIM_DMAADR register *******************/ -#define TIM_DMAR_DMAB ((uint16_t)0xFFFF) /* DMA register for burst accesses */ - -/******************************************************************************/ -/* Universal Synchronous Asynchronous Receiver Transmitter */ -/******************************************************************************/ - -/******************* Bit definition for USART_STATR register *******************/ -#define USART_STATR_PE ((uint16_t)0x0001) /* Parity Error */ -#define USART_STATR_FE ((uint16_t)0x0002) /* Framing Error */ -#define USART_STATR_NE ((uint16_t)0x0004) /* Noise Error Flag */ -#define USART_STATR_ORE ((uint16_t)0x0008) /* OverRun Error */ -#define USART_STATR_IDLE ((uint16_t)0x0010) /* IDLE line detected */ -#define USART_STATR_RXNE ((uint16_t)0x0020) /* Read Data Register Not Empty */ -#define USART_STATR_TC ((uint16_t)0x0040) /* Transmission Complete */ -#define USART_STATR_TXE ((uint16_t)0x0080) /* Transmit Data Register Empty */ -#define USART_STATR_LBD ((uint16_t)0x0100) /* LIN Break Detection Flag */ -#define USART_STATR_CTS ((uint16_t)0x0200) /* CTS Flag */ - -/******************* Bit definition for USART_DATAR register *******************/ -#define USART_DATAR_DR ((uint16_t)0x01FF) /* Data value */ - -/****************** Bit definition for USART_BRR register *******************/ -#define USART_BRR_DIV_Fraction ((uint16_t)0x000F) /* Fraction of USARTDIV */ -#define USART_BRR_DIV_Mantissa ((uint16_t)0xFFF0) /* Mantissa of USARTDIV */ - -/****************** Bit definition for USART_CTLR1 register *******************/ -#define USART_CTLR1_SBK ((uint16_t)0x0001) /* Send Break */ -#define USART_CTLR1_RWU ((uint16_t)0x0002) /* Receiver wakeup */ -#define USART_CTLR1_RE ((uint16_t)0x0004) /* Receiver Enable */ -#define USART_CTLR1_TE ((uint16_t)0x0008) /* Transmitter Enable */ -#define USART_CTLR1_IDLEIE ((uint16_t)0x0010) /* IDLE Interrupt Enable */ -#define USART_CTLR1_RXNEIE ((uint16_t)0x0020) /* RXNE Interrupt Enable */ -#define USART_CTLR1_TCIE ((uint16_t)0x0040) /* Transmission Complete Interrupt Enable */ -#define USART_CTLR1_TXEIE ((uint16_t)0x0080) /* PE Interrupt Enable */ -#define USART_CTLR1_PEIE ((uint16_t)0x0100) /* PE Interrupt Enable */ -#define USART_CTLR1_PS ((uint16_t)0x0200) /* Parity Selection */ -#define USART_CTLR1_PCE ((uint16_t)0x0400) /* Parity Control Enable */ -#define USART_CTLR1_WAKE ((uint16_t)0x0800) /* Wakeup method */ -#define USART_CTLR1_M ((uint16_t)0x1000) /* Word length */ -#define USART_CTLR1_UE ((uint16_t)0x2000) /* USART Enable */ -#define USART_CTLR1_OVER8 ((uint16_t)0x8000) /* USART Oversmapling 8-bits */ - -/****************** Bit definition for USART_CTLR2 register *******************/ -#define USART_CTLR2_ADD ((uint16_t)0x000F) /* Address of the USART node */ -#define USART_CTLR2_LBDL ((uint16_t)0x0020) /* LIN Break Detection Length */ -#define USART_CTLR2_LBDIE ((uint16_t)0x0040) /* LIN Break Detection Interrupt Enable */ -#define USART_CTLR2_LBCL ((uint16_t)0x0100) /* Last Bit Clock pulse */ -#define USART_CTLR2_CPHA ((uint16_t)0x0200) /* Clock Phase */ -#define USART_CTLR2_CPOL ((uint16_t)0x0400) /* Clock Polarity */ -#define USART_CTLR2_CLKEN ((uint16_t)0x0800) /* Clock Enable */ - -#define USART_CTLR2_STOP ((uint16_t)0x3000) /* STOP[1:0] bits (STOP bits) */ -#define USART_CTLR2_STOP_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USART_CTLR2_STOP_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USART_CTLR2_LINEN ((uint16_t)0x4000) /* LIN mode enable */ - -/****************** Bit definition for USART_CTLR3 register *******************/ -#define USART_CTLR3_EIE ((uint16_t)0x0001) /* Error Interrupt Enable */ -#define USART_CTLR3_IREN ((uint16_t)0x0002) /* IrDA mode Enable */ -#define USART_CTLR3_IRLP ((uint16_t)0x0004) /* IrDA Low-Power */ -#define USART_CTLR3_HDSEL ((uint16_t)0x0008) /* Half-Duplex Selection */ -#define USART_CTLR3_NACK ((uint16_t)0x0010) /* Smartcard NACK enable */ -#define USART_CTLR3_SCEN ((uint16_t)0x0020) /* Smartcard mode enable */ -#define USART_CTLR3_DMAR ((uint16_t)0x0040) /* DMA Enable Receiver */ -#define USART_CTLR3_DMAT ((uint16_t)0x0080) /* DMA Enable Transmitter */ -#define USART_CTLR3_RTSE ((uint16_t)0x0100) /* RTS Enable */ -#define USART_CTLR3_CTSE ((uint16_t)0x0200) /* CTS Enable */ -#define USART_CTLR3_CTSIE ((uint16_t)0x0400) /* CTS Interrupt Enable */ -#define USART_CTLR3_ONEBIT ((uint16_t)0x0800) /* One Bit method */ - -/****************** Bit definition for USART_GPR register ******************/ -#define USART_GPR_PSC ((uint16_t)0x00FF) /* PSC[7:0] bits (Prescaler value) */ -#define USART_GPR_PSC_0 ((uint16_t)0x0001) /* Bit 0 */ -#define USART_GPR_PSC_1 ((uint16_t)0x0002) /* Bit 1 */ -#define USART_GPR_PSC_2 ((uint16_t)0x0004) /* Bit 2 */ -#define USART_GPR_PSC_3 ((uint16_t)0x0008) /* Bit 3 */ -#define USART_GPR_PSC_4 ((uint16_t)0x0010) /* Bit 4 */ -#define USART_GPR_PSC_5 ((uint16_t)0x0020) /* Bit 5 */ -#define USART_GPR_PSC_6 ((uint16_t)0x0040) /* Bit 6 */ -#define USART_GPR_PSC_7 ((uint16_t)0x0080) /* Bit 7 */ - -#define USART_GPR_GT ((uint16_t)0xFF00) /* Guard time value */ - -/******************************************************************************/ -/* USB Device FS */ -/******************************************************************************/ - -/******************* Bit definition for USB_EP0R register *******************/ -#define USB_EP0R_EA ((uint16_t)0x000F) /* Endpoint Address */ - -#define USB_EP0R_STAT_TX ((uint16_t)0x0030) /* STAT_TX[1:0] bits (Status bits, for transmission transfers) */ -#define USB_EP0R_STAT_TX_0 ((uint16_t)0x0010) /* Bit 0 */ -#define USB_EP0R_STAT_TX_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define USB_EP0R_DTOG_TX ((uint16_t)0x0040) /* Data Toggle, for transmission transfers */ -#define USB_EP0R_CTR_TX ((uint16_t)0x0080) /* Correct Transfer for transmission */ -#define USB_EP0R_EP_KIND ((uint16_t)0x0100) /* Endpoint Kind */ - -#define USB_EP0R_EP_TYPE ((uint16_t)0x0600) /* EP_TYPE[1:0] bits (Endpoint type) */ -#define USB_EP0R_EP_TYPE_0 ((uint16_t)0x0200) /* Bit 0 */ -#define USB_EP0R_EP_TYPE_1 ((uint16_t)0x0400) /* Bit 1 */ - -#define USB_EP0R_SETUP ((uint16_t)0x0800) /* Setup transaction completed */ - -#define USB_EP0R_STAT_RX ((uint16_t)0x3000) /* STAT_RX[1:0] bits (Status bits, for reception transfers) */ -#define USB_EP0R_STAT_RX_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USB_EP0R_STAT_RX_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USB_EP0R_DTOG_RX ((uint16_t)0x4000) /* Data Toggle, for reception transfers */ -#define USB_EP0R_CTR_RX ((uint16_t)0x8000) /* Correct Transfer for reception */ - -/******************* Bit definition for USB_EP1R register *******************/ -#define USB_EP1R_EA ((uint16_t)0x000F) /* Endpoint Address */ - -#define USB_EP1R_STAT_TX ((uint16_t)0x0030) /* STAT_TX[1:0] bits (Status bits, for transmission transfers) */ -#define USB_EP1R_STAT_TX_0 ((uint16_t)0x0010) /* Bit 0 */ -#define USB_EP1R_STAT_TX_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define USB_EP1R_DTOG_TX ((uint16_t)0x0040) /* Data Toggle, for transmission transfers */ -#define USB_EP1R_CTR_TX ((uint16_t)0x0080) /* Correct Transfer for transmission */ -#define USB_EP1R_EP_KIND ((uint16_t)0x0100) /* Endpoint Kind */ - -#define USB_EP1R_EP_TYPE ((uint16_t)0x0600) /* EP_TYPE[1:0] bits (Endpoint type) */ -#define USB_EP1R_EP_TYPE_0 ((uint16_t)0x0200) /* Bit 0 */ -#define USB_EP1R_EP_TYPE_1 ((uint16_t)0x0400) /* Bit 1 */ - -#define USB_EP1R_SETUP ((uint16_t)0x0800) /* Setup transaction completed */ - -#define USB_EP1R_STAT_RX ((uint16_t)0x3000) /* STAT_RX[1:0] bits (Status bits, for reception transfers) */ -#define USB_EP1R_STAT_RX_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USB_EP1R_STAT_RX_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USB_EP1R_DTOG_RX ((uint16_t)0x4000) /* Data Toggle, for reception transfers */ -#define USB_EP1R_CTR_RX ((uint16_t)0x8000) /* Correct Transfer for reception */ - -/******************* Bit definition for USB_EP2R register *******************/ -#define USB_EP2R_EA ((uint16_t)0x000F) /* Endpoint Address */ - -#define USB_EP2R_STAT_TX ((uint16_t)0x0030) /* STAT_TX[1:0] bits (Status bits, for transmission transfers) */ -#define USB_EP2R_STAT_TX_0 ((uint16_t)0x0010) /* Bit 0 */ -#define USB_EP2R_STAT_TX_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define USB_EP2R_DTOG_TX ((uint16_t)0x0040) /* Data Toggle, for transmission transfers */ -#define USB_EP2R_CTR_TX ((uint16_t)0x0080) /* Correct Transfer for transmission */ -#define USB_EP2R_EP_KIND ((uint16_t)0x0100) /* Endpoint Kind */ - -#define USB_EP2R_EP_TYPE ((uint16_t)0x0600) /* EP_TYPE[1:0] bits (Endpoint type) */ -#define USB_EP2R_EP_TYPE_0 ((uint16_t)0x0200) /* Bit 0 */ -#define USB_EP2R_EP_TYPE_1 ((uint16_t)0x0400) /* Bit 1 */ - -#define USB_EP2R_SETUP ((uint16_t)0x0800) /* Setup transaction completed */ - -#define USB_EP2R_STAT_RX ((uint16_t)0x3000) /* STAT_RX[1:0] bits (Status bits, for reception transfers) */ -#define USB_EP2R_STAT_RX_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USB_EP2R_STAT_RX_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USB_EP2R_DTOG_RX ((uint16_t)0x4000) /* Data Toggle, for reception transfers */ -#define USB_EP2R_CTR_RX ((uint16_t)0x8000) /* Correct Transfer for reception */ - -/******************* Bit definition for USB_EP3R register *******************/ -#define USB_EP3R_EA ((uint16_t)0x000F) /* Endpoint Address */ - -#define USB_EP3R_STAT_TX ((uint16_t)0x0030) /* STAT_TX[1:0] bits (Status bits, for transmission transfers) */ -#define USB_EP3R_STAT_TX_0 ((uint16_t)0x0010) /* Bit 0 */ -#define USB_EP3R_STAT_TX_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define USB_EP3R_DTOG_TX ((uint16_t)0x0040) /* Data Toggle, for transmission transfers */ -#define USB_EP3R_CTR_TX ((uint16_t)0x0080) /* Correct Transfer for transmission */ -#define USB_EP3R_EP_KIND ((uint16_t)0x0100) /* Endpoint Kind */ - -#define USB_EP3R_EP_TYPE ((uint16_t)0x0600) /* EP_TYPE[1:0] bits (Endpoint type) */ -#define USB_EP3R_EP_TYPE_0 ((uint16_t)0x0200) /* Bit 0 */ -#define USB_EP3R_EP_TYPE_1 ((uint16_t)0x0400) /* Bit 1 */ - -#define USB_EP3R_SETUP ((uint16_t)0x0800) /* Setup transaction completed */ - -#define USB_EP3R_STAT_RX ((uint16_t)0x3000) /* STAT_RX[1:0] bits (Status bits, for reception transfers) */ -#define USB_EP3R_STAT_RX_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USB_EP3R_STAT_RX_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USB_EP3R_DTOG_RX ((uint16_t)0x4000) /* Data Toggle, for reception transfers */ -#define USB_EP3R_CTR_RX ((uint16_t)0x8000) /* Correct Transfer for reception */ - -/******************* Bit definition for USB_EP4R register *******************/ -#define USB_EP4R_EA ((uint16_t)0x000F) /* Endpoint Address */ - -#define USB_EP4R_STAT_TX ((uint16_t)0x0030) /* STAT_TX[1:0] bits (Status bits, for transmission transfers) */ -#define USB_EP4R_STAT_TX_0 ((uint16_t)0x0010) /* Bit 0 */ -#define USB_EP4R_STAT_TX_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define USB_EP4R_DTOG_TX ((uint16_t)0x0040) /* Data Toggle, for transmission transfers */ -#define USB_EP4R_CTR_TX ((uint16_t)0x0080) /* Correct Transfer for transmission */ -#define USB_EP4R_EP_KIND ((uint16_t)0x0100) /* Endpoint Kind */ - -#define USB_EP4R_EP_TYPE ((uint16_t)0x0600) /* EP_TYPE[1:0] bits (Endpoint type) */ -#define USB_EP4R_EP_TYPE_0 ((uint16_t)0x0200) /* Bit 0 */ -#define USB_EP4R_EP_TYPE_1 ((uint16_t)0x0400) /* Bit 1 */ - -#define USB_EP4R_SETUP ((uint16_t)0x0800) /* Setup transaction completed */ - -#define USB_EP4R_STAT_RX ((uint16_t)0x3000) /* STAT_RX[1:0] bits (Status bits, for reception transfers) */ -#define USB_EP4R_STAT_RX_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USB_EP4R_STAT_RX_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USB_EP4R_DTOG_RX ((uint16_t)0x4000) /* Data Toggle, for reception transfers */ -#define USB_EP4R_CTR_RX ((uint16_t)0x8000) /* Correct Transfer for reception */ - -/******************* Bit definition for USB_EP5R register *******************/ -#define USB_EP5R_EA ((uint16_t)0x000F) /* Endpoint Address */ - -#define USB_EP5R_STAT_TX ((uint16_t)0x0030) /* STAT_TX[1:0] bits (Status bits, for transmission transfers) */ -#define USB_EP5R_STAT_TX_0 ((uint16_t)0x0010) /* Bit 0 */ -#define USB_EP5R_STAT_TX_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define USB_EP5R_DTOG_TX ((uint16_t)0x0040) /* Data Toggle, for transmission transfers */ -#define USB_EP5R_CTR_TX ((uint16_t)0x0080) /* Correct Transfer for transmission */ -#define USB_EP5R_EP_KIND ((uint16_t)0x0100) /* Endpoint Kind */ - -#define USB_EP5R_EP_TYPE ((uint16_t)0x0600) /* EP_TYPE[1:0] bits (Endpoint type) */ -#define USB_EP5R_EP_TYPE_0 ((uint16_t)0x0200) /* Bit 0 */ -#define USB_EP5R_EP_TYPE_1 ((uint16_t)0x0400) /* Bit 1 */ - -#define USB_EP5R_SETUP ((uint16_t)0x0800) /* Setup transaction completed */ - -#define USB_EP5R_STAT_RX ((uint16_t)0x3000) /* STAT_RX[1:0] bits (Status bits, for reception transfers) */ -#define USB_EP5R_STAT_RX_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USB_EP5R_STAT_RX_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USB_EP5R_DTOG_RX ((uint16_t)0x4000) /* Data Toggle, for reception transfers */ -#define USB_EP5R_CTR_RX ((uint16_t)0x8000) /* Correct Transfer for reception */ - -/******************* Bit definition for USB_EP6R register *******************/ -#define USB_EP6R_EA ((uint16_t)0x000F) /* Endpoint Address */ - -#define USB_EP6R_STAT_TX ((uint16_t)0x0030) /* STAT_TX[1:0] bits (Status bits, for transmission transfers) */ -#define USB_EP6R_STAT_TX_0 ((uint16_t)0x0010) /* Bit 0 */ -#define USB_EP6R_STAT_TX_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define USB_EP6R_DTOG_TX ((uint16_t)0x0040) /* Data Toggle, for transmission transfers */ -#define USB_EP6R_CTR_TX ((uint16_t)0x0080) /* Correct Transfer for transmission */ -#define USB_EP6R_EP_KIND ((uint16_t)0x0100) /* Endpoint Kind */ - -#define USB_EP6R_EP_TYPE ((uint16_t)0x0600) /* EP_TYPE[1:0] bits (Endpoint type) */ -#define USB_EP6R_EP_TYPE_0 ((uint16_t)0x0200) /* Bit 0 */ -#define USB_EP6R_EP_TYPE_1 ((uint16_t)0x0400) /* Bit 1 */ - -#define USB_EP6R_SETUP ((uint16_t)0x0800) /* Setup transaction completed */ - -#define USB_EP6R_STAT_RX ((uint16_t)0x3000) /* STAT_RX[1:0] bits (Status bits, for reception transfers) */ -#define USB_EP6R_STAT_RX_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USB_EP6R_STAT_RX_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USB_EP6R_DTOG_RX ((uint16_t)0x4000) /* Data Toggle, for reception transfers */ -#define USB_EP6R_CTR_RX ((uint16_t)0x8000) /* Correct Transfer for reception */ - -/******************* Bit definition for USB_EP7R register *******************/ -#define USB_EP7R_EA ((uint16_t)0x000F) /* Endpoint Address */ - -#define USB_EP7R_STAT_TX ((uint16_t)0x0030) /* STAT_TX[1:0] bits (Status bits, for transmission transfers) */ -#define USB_EP7R_STAT_TX_0 ((uint16_t)0x0010) /* Bit 0 */ -#define USB_EP7R_STAT_TX_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define USB_EP7R_DTOG_TX ((uint16_t)0x0040) /* Data Toggle, for transmission transfers */ -#define USB_EP7R_CTR_TX ((uint16_t)0x0080) /* Correct Transfer for transmission */ -#define USB_EP7R_EP_KIND ((uint16_t)0x0100) /* Endpoint Kind */ - -#define USB_EP7R_EP_TYPE ((uint16_t)0x0600) /* EP_TYPE[1:0] bits (Endpoint type) */ -#define USB_EP7R_EP_TYPE_0 ((uint16_t)0x0200) /* Bit 0 */ -#define USB_EP7R_EP_TYPE_1 ((uint16_t)0x0400) /* Bit 1 */ - -#define USB_EP7R_SETUP ((uint16_t)0x0800) /* Setup transaction completed */ - -#define USB_EP7R_STAT_RX ((uint16_t)0x3000) /* STAT_RX[1:0] bits (Status bits, for reception transfers) */ -#define USB_EP7R_STAT_RX_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USB_EP7R_STAT_RX_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USB_EP7R_DTOG_RX ((uint16_t)0x4000) /* Data Toggle, for reception transfers */ -#define USB_EP7R_CTR_RX ((uint16_t)0x8000) /* Correct Transfer for reception */ - -/******************* Bit definition for USB_CNTR register *******************/ -#define USB_CNTR_FRES ((uint16_t)0x0001) /* Force USB Reset */ -#define USB_CNTR_PDWN ((uint16_t)0x0002) /* Power down */ -#define USB_CNTR_LP_MODE ((uint16_t)0x0004) /* Low-power mode */ -#define USB_CNTR_FSUSP ((uint16_t)0x0008) /* Force suspend */ -#define USB_CNTR_RESUME ((uint16_t)0x0010) /* Resume request */ -#define USB_CNTR_ESOFM ((uint16_t)0x0100) /* Expected Start Of Frame Interrupt Mask */ -#define USB_CNTR_SOFM ((uint16_t)0x0200) /* Start Of Frame Interrupt Mask */ -#define USB_CNTR_RESETM ((uint16_t)0x0400) /* RESET Interrupt Mask */ -#define USB_CNTR_SUSPM ((uint16_t)0x0800) /* Suspend mode Interrupt Mask */ -#define USB_CNTR_WKUPM ((uint16_t)0x1000) /* Wakeup Interrupt Mask */ -#define USB_CNTR_ERRM ((uint16_t)0x2000) /* Error Interrupt Mask */ -#define USB_CNTR_PMAOVRM ((uint16_t)0x4000) /* Packet Memory Area Over / Underrun Interrupt Mask */ -#define USB_CNTR_CTRM ((uint16_t)0x8000) /* Correct Transfer Interrupt Mask */ - -/******************* Bit definition for USB_ISTR register *******************/ -#define USB_ISTR_EP_ID ((uint16_t)0x000F) /* Endpoint Identifier */ -#define USB_ISTR_DIR ((uint16_t)0x0010) /* Direction of transaction */ -#define USB_ISTR_ESOF ((uint16_t)0x0100) /* Expected Start Of Frame */ -#define USB_ISTR_SOF ((uint16_t)0x0200) /* Start Of Frame */ -#define USB_ISTR_RESET ((uint16_t)0x0400) /* USB RESET request */ -#define USB_ISTR_SUSP ((uint16_t)0x0800) /* Suspend mode request */ -#define USB_ISTR_WKUP ((uint16_t)0x1000) /* Wake up */ -#define USB_ISTR_ERR ((uint16_t)0x2000) /* Error */ -#define USB_ISTR_PMAOVR ((uint16_t)0x4000) /* Packet Memory Area Over / Underrun */ -#define USB_ISTR_CTR ((uint16_t)0x8000) /* Correct Transfer */ - -/******************* Bit definition for USB_FNR register ********************/ -#define USB_FNR_FN ((uint16_t)0x07FF) /* Frame Number */ -#define USB_FNR_LSOF ((uint16_t)0x1800) /* Lost SOF */ -#define USB_FNR_LCK ((uint16_t)0x2000) /* Locked */ -#define USB_FNR_RXDM ((uint16_t)0x4000) /* Receive Data - Line Status */ -#define USB_FNR_RXDP ((uint16_t)0x8000) /* Receive Data + Line Status */ - -/****************** Bit definition for USB_DADDR register *******************/ -#define USB_DADDR_ADD ((uint8_t)0x7F) /* ADD[6:0] bits (Device Address) */ -#define USB_DADDR_ADD0 ((uint8_t)0x01) /* Bit 0 */ -#define USB_DADDR_ADD1 ((uint8_t)0x02) /* Bit 1 */ -#define USB_DADDR_ADD2 ((uint8_t)0x04) /* Bit 2 */ -#define USB_DADDR_ADD3 ((uint8_t)0x08) /* Bit 3 */ -#define USB_DADDR_ADD4 ((uint8_t)0x10) /* Bit 4 */ -#define USB_DADDR_ADD5 ((uint8_t)0x20) /* Bit 5 */ -#define USB_DADDR_ADD6 ((uint8_t)0x40) /* Bit 6 */ - -#define USB_DADDR_EF ((uint8_t)0x80) /* Enable Function */ - -/****************** Bit definition for USB_BTABLE register ******************/ -#define USB_BTABLE_BTABLE ((uint16_t)0xFFF8) /* Buffer Table */ - -/***************** Bit definition for USB_ADDR0_TX register *****************/ -#define USB_ADDR0_TX_ADDR0_TX ((uint16_t)0xFFFE) /* Transmission Buffer Address 0 */ - -/***************** Bit definition for USB_ADDR1_TX register *****************/ -#define USB_ADDR1_TX_ADDR1_TX ((uint16_t)0xFFFE) /* Transmission Buffer Address 1 */ - -/***************** Bit definition for USB_ADDR2_TX register *****************/ -#define USB_ADDR2_TX_ADDR2_TX ((uint16_t)0xFFFE) /* Transmission Buffer Address 2 */ - -/***************** Bit definition for USB_ADDR3_TX register *****************/ -#define USB_ADDR3_TX_ADDR3_TX ((uint16_t)0xFFFE) /* Transmission Buffer Address 3 */ - -/***************** Bit definition for USB_ADDR4_TX register *****************/ -#define USB_ADDR4_TX_ADDR4_TX ((uint16_t)0xFFFE) /* Transmission Buffer Address 4 */ - -/***************** Bit definition for USB_ADDR5_TX register *****************/ -#define USB_ADDR5_TX_ADDR5_TX ((uint16_t)0xFFFE) /* Transmission Buffer Address 5 */ - -/***************** Bit definition for USB_ADDR6_TX register *****************/ -#define USB_ADDR6_TX_ADDR6_TX ((uint16_t)0xFFFE) /* Transmission Buffer Address 6 */ - -/***************** Bit definition for USB_ADDR7_TX register *****************/ -#define USB_ADDR7_TX_ADDR7_TX ((uint16_t)0xFFFE) /* Transmission Buffer Address 7 */ - - -/***************** Bit definition for USB_COUNT0_TX register ****************/ -#define USB_COUNT0_TX_COUNT0_TX ((uint16_t)0x03FF) /* Transmission Byte Count 0 */ - -/***************** Bit definition for USB_COUNT1_TX register ****************/ -#define USB_COUNT1_TX_COUNT1_TX ((uint16_t)0x03FF) /* Transmission Byte Count 1 */ - -/***************** Bit definition for USB_COUNT2_TX register ****************/ -#define USB_COUNT2_TX_COUNT2_TX ((uint16_t)0x03FF) /* Transmission Byte Count 2 */ - -/***************** Bit definition for USB_COUNT3_TX register ****************/ -#define USB_COUNT3_TX_COUNT3_TX ((uint16_t)0x03FF) /* Transmission Byte Count 3 */ - -/***************** Bit definition for USB_COUNT4_TX register ****************/ -#define USB_COUNT4_TX_COUNT4_TX ((uint16_t)0x03FF) /* Transmission Byte Count 4 */ - -/***************** Bit definition for USB_COUNT5_TX register ****************/ -#define USB_COUNT5_TX_COUNT5_TX ((uint16_t)0x03FF) /* Transmission Byte Count 5 */ - -/***************** Bit definition for USB_COUNT6_TX register ****************/ -#define USB_COUNT6_TX_COUNT6_TX ((uint16_t)0x03FF) /* Transmission Byte Count 6 */ - -/***************** Bit definition for USB_COUNT7_TX register ****************/ -#define USB_COUNT7_TX_COUNT7_TX ((uint16_t)0x03FF) /* Transmission Byte Count 7 */ - - -/**************** Bit definition for USB_COUNT0_TX_0 register ***************/ -#define USB_COUNT0_TX_0_COUNT0_TX_0 ((uint32_t)0x000003FF) /* Transmission Byte Count 0 (low) */ - -/**************** Bit definition for USB_COUNT0_TX_1 register ***************/ -#define USB_COUNT0_TX_1_COUNT0_TX_1 ((uint32_t)0x03FF0000) /* Transmission Byte Count 0 (high) */ - -/**************** Bit definition for USB_COUNT1_TX_0 register ***************/ -#define USB_COUNT1_TX_0_COUNT1_TX_0 ((uint32_t)0x000003FF) /* Transmission Byte Count 1 (low) */ - -/**************** Bit definition for USB_COUNT1_TX_1 register ***************/ -#define USB_COUNT1_TX_1_COUNT1_TX_1 ((uint32_t)0x03FF0000) /* Transmission Byte Count 1 (high) */ - -/**************** Bit definition for USB_COUNT2_TX_0 register ***************/ -#define USB_COUNT2_TX_0_COUNT2_TX_0 ((uint32_t)0x000003FF) /* Transmission Byte Count 2 (low) */ - -/**************** Bit definition for USB_COUNT2_TX_1 register ***************/ -#define USB_COUNT2_TX_1_COUNT2_TX_1 ((uint32_t)0x03FF0000) /* Transmission Byte Count 2 (high) */ - -/**************** Bit definition for USB_COUNT3_TX_0 register ***************/ -#define USB_COUNT3_TX_0_COUNT3_TX_0 ((uint16_t)0x000003FF) /* Transmission Byte Count 3 (low) */ - -/**************** Bit definition for USB_COUNT3_TX_1 register ***************/ -#define USB_COUNT3_TX_1_COUNT3_TX_1 ((uint16_t)0x03FF0000) /* Transmission Byte Count 3 (high) */ - -/**************** Bit definition for USB_COUNT4_TX_0 register ***************/ -#define USB_COUNT4_TX_0_COUNT4_TX_0 ((uint32_t)0x000003FF) /* Transmission Byte Count 4 (low) */ - -/**************** Bit definition for USB_COUNT4_TX_1 register ***************/ -#define USB_COUNT4_TX_1_COUNT4_TX_1 ((uint32_t)0x03FF0000) /* Transmission Byte Count 4 (high) */ - -/**************** Bit definition for USB_COUNT5_TX_0 register ***************/ -#define USB_COUNT5_TX_0_COUNT5_TX_0 ((uint32_t)0x000003FF) /* Transmission Byte Count 5 (low) */ - -/**************** Bit definition for USB_COUNT5_TX_1 register ***************/ -#define USB_COUNT5_TX_1_COUNT5_TX_1 ((uint32_t)0x03FF0000) /* Transmission Byte Count 5 (high) */ - -/**************** Bit definition for USB_COUNT6_TX_0 register ***************/ -#define USB_COUNT6_TX_0_COUNT6_TX_0 ((uint32_t)0x000003FF) /* Transmission Byte Count 6 (low) */ - -/**************** Bit definition for USB_COUNT6_TX_1 register ***************/ -#define USB_COUNT6_TX_1_COUNT6_TX_1 ((uint32_t)0x03FF0000) /* Transmission Byte Count 6 (high) */ - -/**************** Bit definition for USB_COUNT7_TX_0 register ***************/ -#define USB_COUNT7_TX_0_COUNT7_TX_0 ((uint32_t)0x000003FF) /* Transmission Byte Count 7 (low) */ - -/**************** Bit definition for USB_COUNT7_TX_1 register ***************/ -#define USB_COUNT7_TX_1_COUNT7_TX_1 ((uint32_t)0x03FF0000) /* Transmission Byte Count 7 (high) */ - - -/***************** Bit definition for USB_ADDR0_RX register *****************/ -#define USB_ADDR0_RX_ADDR0_RX ((uint16_t)0xFFFE) /* Reception Buffer Address 0 */ - -/***************** Bit definition for USB_ADDR1_RX register *****************/ -#define USB_ADDR1_RX_ADDR1_RX ((uint16_t)0xFFFE) /* Reception Buffer Address 1 */ - -/***************** Bit definition for USB_ADDR2_RX register *****************/ -#define USB_ADDR2_RX_ADDR2_RX ((uint16_t)0xFFFE) /* Reception Buffer Address 2 */ - -/***************** Bit definition for USB_ADDR3_RX register *****************/ -#define USB_ADDR3_RX_ADDR3_RX ((uint16_t)0xFFFE) /* Reception Buffer Address 3 */ - -/***************** Bit definition for USB_ADDR4_RX register *****************/ -#define USB_ADDR4_RX_ADDR4_RX ((uint16_t)0xFFFE) /* Reception Buffer Address 4 */ - -/***************** Bit definition for USB_ADDR5_RX register *****************/ -#define USB_ADDR5_RX_ADDR5_RX ((uint16_t)0xFFFE) /* Reception Buffer Address 5 */ - -/***************** Bit definition for USB_ADDR6_RX register *****************/ -#define USB_ADDR6_RX_ADDR6_RX ((uint16_t)0xFFFE) /* Reception Buffer Address 6 */ - -/***************** Bit definition for USB_ADDR7_RX register *****************/ -#define USB_ADDR7_RX_ADDR7_RX ((uint16_t)0xFFFE) /* Reception Buffer Address 7 */ - - -/***************** Bit definition for USB_COUNT0_RX register ****************/ -#define USB_COUNT0_RX_COUNT0_RX ((uint16_t)0x03FF) /* Reception Byte Count */ - -#define USB_COUNT0_RX_NUM_BLOCK ((uint16_t)0x7C00) /* NUM_BLOCK[4:0] bits (Number of blocks) */ -#define USB_COUNT0_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /* Bit 0 */ -#define USB_COUNT0_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /* Bit 1 */ -#define USB_COUNT0_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /* Bit 2 */ -#define USB_COUNT0_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /* Bit 3 */ -#define USB_COUNT0_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /* Bit 4 */ - -#define USB_COUNT0_RX_BLSIZE ((uint16_t)0x8000) /* BLock SIZE */ - -/***************** Bit definition for USB_COUNT1_RX register ****************/ -#define USB_COUNT1_RX_COUNT1_RX ((uint16_t)0x03FF) /* Reception Byte Count */ - -#define USB_COUNT1_RX_NUM_BLOCK ((uint16_t)0x7C00) /* NUM_BLOCK[4:0] bits (Number of blocks) */ -#define USB_COUNT1_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /* Bit 0 */ -#define USB_COUNT1_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /* Bit 1 */ -#define USB_COUNT1_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /* Bit 2 */ -#define USB_COUNT1_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /* Bit 3 */ -#define USB_COUNT1_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /* Bit 4 */ - -#define USB_COUNT1_RX_BLSIZE ((uint16_t)0x8000) /* BLock SIZE */ - -/***************** Bit definition for USB_COUNT2_RX register ****************/ -#define USB_COUNT2_RX_COUNT2_RX ((uint16_t)0x03FF) /* Reception Byte Count */ - -#define USB_COUNT2_RX_NUM_BLOCK ((uint16_t)0x7C00) /* NUM_BLOCK[4:0] bits (Number of blocks) */ -#define USB_COUNT2_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /* Bit 0 */ -#define USB_COUNT2_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /* Bit 1 */ -#define USB_COUNT2_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /* Bit 2 */ -#define USB_COUNT2_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /* Bit 3 */ -#define USB_COUNT2_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /* Bit 4 */ - -#define USB_COUNT2_RX_BLSIZE ((uint16_t)0x8000) /* BLock SIZE */ - -/***************** Bit definition for USB_COUNT3_RX register ****************/ -#define USB_COUNT3_RX_COUNT3_RX ((uint16_t)0x03FF) /* Reception Byte Count */ - -#define USB_COUNT3_RX_NUM_BLOCK ((uint16_t)0x7C00) /* NUM_BLOCK[4:0] bits (Number of blocks) */ -#define USB_COUNT3_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /* Bit 0 */ -#define USB_COUNT3_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /* Bit 1 */ -#define USB_COUNT3_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /* Bit 2 */ -#define USB_COUNT3_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /* Bit 3 */ -#define USB_COUNT3_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /* Bit 4 */ - -#define USB_COUNT3_RX_BLSIZE ((uint16_t)0x8000) /* BLock SIZE */ - -/***************** Bit definition for USB_COUNT4_RX register ****************/ -#define USB_COUNT4_RX_COUNT4_RX ((uint16_t)0x03FF) /* Reception Byte Count */ - -#define USB_COUNT4_RX_NUM_BLOCK ((uint16_t)0x7C00) /* NUM_BLOCK[4:0] bits (Number of blocks) */ -#define USB_COUNT4_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /* Bit 0 */ -#define USB_COUNT4_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /* Bit 1 */ -#define USB_COUNT4_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /* Bit 2 */ -#define USB_COUNT4_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /* Bit 3 */ -#define USB_COUNT4_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /* Bit 4 */ - -#define USB_COUNT4_RX_BLSIZE ((uint16_t)0x8000) /* BLock SIZE */ - -/***************** Bit definition for USB_COUNT5_RX register ****************/ -#define USB_COUNT5_RX_COUNT5_RX ((uint16_t)0x03FF) /* Reception Byte Count */ - -#define USB_COUNT5_RX_NUM_BLOCK ((uint16_t)0x7C00) /* NUM_BLOCK[4:0] bits (Number of blocks) */ -#define USB_COUNT5_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /* Bit 0 */ -#define USB_COUNT5_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /* Bit 1 */ -#define USB_COUNT5_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /* Bit 2 */ -#define USB_COUNT5_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /* Bit 3 */ -#define USB_COUNT5_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /* Bit 4 */ - -#define USB_COUNT5_RX_BLSIZE ((uint16_t)0x8000) /* BLock SIZE */ - -/***************** Bit definition for USB_COUNT6_RX register ****************/ -#define USB_COUNT6_RX_COUNT6_RX ((uint16_t)0x03FF) /* Reception Byte Count */ - -#define USB_COUNT6_RX_NUM_BLOCK ((uint16_t)0x7C00) /* NUM_BLOCK[4:0] bits (Number of blocks) */ -#define USB_COUNT6_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /* Bit 0 */ -#define USB_COUNT6_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /* Bit 1 */ -#define USB_COUNT6_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /* Bit 2 */ -#define USB_COUNT6_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /* Bit 3 */ -#define USB_COUNT6_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /* Bit 4 */ - -#define USB_COUNT6_RX_BLSIZE ((uint16_t)0x8000) /* BLock SIZE */ - -/***************** Bit definition for USB_COUNT7_RX register ****************/ -#define USB_COUNT7_RX_COUNT7_RX ((uint16_t)0x03FF) /* Reception Byte Count */ - -#define USB_COUNT7_RX_NUM_BLOCK ((uint16_t)0x7C00) /* NUM_BLOCK[4:0] bits (Number of blocks) */ -#define USB_COUNT7_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /* Bit 0 */ -#define USB_COUNT7_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /* Bit 1 */ -#define USB_COUNT7_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /* Bit 2 */ -#define USB_COUNT7_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /* Bit 3 */ -#define USB_COUNT7_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /* Bit 4 */ - -#define USB_COUNT7_RX_BLSIZE ((uint16_t)0x8000) /* BLock SIZE */ - - -/**************** Bit definition for USB_COUNT0_RX_0 register ***************/ -#define USB_COUNT0_RX_0_COUNT0_RX_0 ((uint32_t)0x000003FF) /* Reception Byte Count (low) */ - -#define USB_COUNT0_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /* NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ -#define USB_COUNT0_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define USB_COUNT0_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define USB_COUNT0_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define USB_COUNT0_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define USB_COUNT0_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define USB_COUNT0_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /* BLock SIZE (low) */ - -/**************** Bit definition for USB_COUNT0_RX_1 register ***************/ -#define USB_COUNT0_RX_1_COUNT0_RX_1 ((uint32_t)0x03FF0000) /* Reception Byte Count (high) */ - -#define USB_COUNT0_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /* NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ -#define USB_COUNT0_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /* Bit 1 */ -#define USB_COUNT0_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /* Bit 1 */ -#define USB_COUNT0_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /* Bit 2 */ -#define USB_COUNT0_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /* Bit 3 */ -#define USB_COUNT0_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /* Bit 4 */ - -#define USB_COUNT0_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /* BLock SIZE (high) */ - -/**************** Bit definition for USB_COUNT1_RX_0 register ***************/ -#define USB_COUNT1_RX_0_COUNT1_RX_0 ((uint32_t)0x000003FF) /* Reception Byte Count (low) */ - -#define USB_COUNT1_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /* NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ -#define USB_COUNT1_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define USB_COUNT1_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define USB_COUNT1_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define USB_COUNT1_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define USB_COUNT1_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define USB_COUNT1_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /* BLock SIZE (low) */ - -/**************** Bit definition for USB_COUNT1_RX_1 register ***************/ -#define USB_COUNT1_RX_1_COUNT1_RX_1 ((uint32_t)0x03FF0000) /* Reception Byte Count (high) */ - -#define USB_COUNT1_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /* NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ -#define USB_COUNT1_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define USB_COUNT1_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /* Bit 1 */ -#define USB_COUNT1_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /* Bit 2 */ -#define USB_COUNT1_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /* Bit 3 */ -#define USB_COUNT1_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /* Bit 4 */ - -#define USB_COUNT1_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /* BLock SIZE (high) */ - -/**************** Bit definition for USB_COUNT2_RX_0 register ***************/ -#define USB_COUNT2_RX_0_COUNT2_RX_0 ((uint32_t)0x000003FF) /* Reception Byte Count (low) */ - -#define USB_COUNT2_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /* NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ -#define USB_COUNT2_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define USB_COUNT2_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define USB_COUNT2_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define USB_COUNT2_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define USB_COUNT2_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define USB_COUNT2_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /* BLock SIZE (low) */ - -/**************** Bit definition for USB_COUNT2_RX_1 register ***************/ -#define USB_COUNT2_RX_1_COUNT2_RX_1 ((uint32_t)0x03FF0000) /* Reception Byte Count (high) */ - -#define USB_COUNT2_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /* NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ -#define USB_COUNT2_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define USB_COUNT2_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /* Bit 1 */ -#define USB_COUNT2_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /* Bit 2 */ -#define USB_COUNT2_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /* Bit 3 */ -#define USB_COUNT2_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /* Bit 4 */ - -#define USB_COUNT2_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /* BLock SIZE (high) */ - -/**************** Bit definition for USB_COUNT3_RX_0 register ***************/ -#define USB_COUNT3_RX_0_COUNT3_RX_0 ((uint32_t)0x000003FF) /* Reception Byte Count (low) */ - -#define USB_COUNT3_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /* NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ -#define USB_COUNT3_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define USB_COUNT3_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define USB_COUNT3_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define USB_COUNT3_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define USB_COUNT3_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define USB_COUNT3_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /* BLock SIZE (low) */ - -/**************** Bit definition for USB_COUNT3_RX_1 register ***************/ -#define USB_COUNT3_RX_1_COUNT3_RX_1 ((uint32_t)0x03FF0000) /* Reception Byte Count (high) */ - -#define USB_COUNT3_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /* NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ -#define USB_COUNT3_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define USB_COUNT3_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /* Bit 1 */ -#define USB_COUNT3_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /* Bit 2 */ -#define USB_COUNT3_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /* Bit 3 */ -#define USB_COUNT3_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /* Bit 4 */ - -#define USB_COUNT3_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /* BLock SIZE (high) */ - -/**************** Bit definition for USB_COUNT4_RX_0 register ***************/ -#define USB_COUNT4_RX_0_COUNT4_RX_0 ((uint32_t)0x000003FF) /* Reception Byte Count (low) */ - -#define USB_COUNT4_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /* NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ -#define USB_COUNT4_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define USB_COUNT4_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define USB_COUNT4_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define USB_COUNT4_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define USB_COUNT4_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define USB_COUNT4_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /* BLock SIZE (low) */ - -/**************** Bit definition for USB_COUNT4_RX_1 register ***************/ -#define USB_COUNT4_RX_1_COUNT4_RX_1 ((uint32_t)0x03FF0000) /* Reception Byte Count (high) */ - -#define USB_COUNT4_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /* NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ -#define USB_COUNT4_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define USB_COUNT4_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /* Bit 1 */ -#define USB_COUNT4_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /* Bit 2 */ -#define USB_COUNT4_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /* Bit 3 */ -#define USB_COUNT4_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /* Bit 4 */ - -#define USB_COUNT4_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /* BLock SIZE (high) */ - -/**************** Bit definition for USB_COUNT5_RX_0 register ***************/ -#define USB_COUNT5_RX_0_COUNT5_RX_0 ((uint32_t)0x000003FF) /* Reception Byte Count (low) */ - -#define USB_COUNT5_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /* NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ -#define USB_COUNT5_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define USB_COUNT5_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define USB_COUNT5_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define USB_COUNT5_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define USB_COUNT5_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define USB_COUNT5_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /* BLock SIZE (low) */ - -/**************** Bit definition for USB_COUNT5_RX_1 register ***************/ -#define USB_COUNT5_RX_1_COUNT5_RX_1 ((uint32_t)0x03FF0000) /* Reception Byte Count (high) */ - -#define USB_COUNT5_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /* NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ -#define USB_COUNT5_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define USB_COUNT5_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /* Bit 1 */ -#define USB_COUNT5_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /* Bit 2 */ -#define USB_COUNT5_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /* Bit 3 */ -#define USB_COUNT5_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /* Bit 4 */ - -#define USB_COUNT5_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /* BLock SIZE (high) */ - -/*************** Bit definition for USB_COUNT6_RX_0 register ***************/ -#define USB_COUNT6_RX_0_COUNT6_RX_0 ((uint32_t)0x000003FF) /* Reception Byte Count (low) */ - -#define USB_COUNT6_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /* NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ -#define USB_COUNT6_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define USB_COUNT6_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define USB_COUNT6_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define USB_COUNT6_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define USB_COUNT6_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define USB_COUNT6_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /* BLock SIZE (low) */ - -/**************** Bit definition for USB_COUNT6_RX_1 register ***************/ -#define USB_COUNT6_RX_1_COUNT6_RX_1 ((uint32_t)0x03FF0000) /* Reception Byte Count (high) */ - -#define USB_COUNT6_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /* NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ -#define USB_COUNT6_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define USB_COUNT6_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /* Bit 1 */ -#define USB_COUNT6_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /* Bit 2 */ -#define USB_COUNT6_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /* Bit 3 */ -#define USB_COUNT6_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /* Bit 4 */ - -#define USB_COUNT6_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /* BLock SIZE (high) */ - -/*************** Bit definition for USB_COUNT7_RX_0 register ****************/ -#define USB_COUNT7_RX_0_COUNT7_RX_0 ((uint32_t)0x000003FF) /* Reception Byte Count (low) */ - -#define USB_COUNT7_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /* NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ -#define USB_COUNT7_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define USB_COUNT7_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define USB_COUNT7_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define USB_COUNT7_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define USB_COUNT7_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define USB_COUNT7_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /* BLock SIZE (low) */ - -/*************** Bit definition for USB_COUNT7_RX_1 register ****************/ -#define USB_COUNT7_RX_1_COUNT7_RX_1 ((uint32_t)0x03FF0000) /* Reception Byte Count (high) */ - -#define USB_COUNT7_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /* NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ -#define USB_COUNT7_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define USB_COUNT7_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /* Bit 1 */ -#define USB_COUNT7_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /* Bit 2 */ -#define USB_COUNT7_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /* Bit 3 */ -#define USB_COUNT7_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /* Bit 4 */ - -#define USB_COUNT7_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /* BLock SIZE (high) */ - -/******************************************************************************/ -/* Window WATCHDOG */ -/******************************************************************************/ - -/******************* Bit definition for WWDG_CTLR register ********************/ -#define WWDG_CTLR_T ((uint8_t)0x7F) /* T[6:0] bits (7-Bit counter (MSB to LSB)) */ -#define WWDG_CTLR_T0 ((uint8_t)0x01) /* Bit 0 */ -#define WWDG_CTLR_T1 ((uint8_t)0x02) /* Bit 1 */ -#define WWDG_CTLR_T2 ((uint8_t)0x04) /* Bit 2 */ -#define WWDG_CTLR_T3 ((uint8_t)0x08) /* Bit 3 */ -#define WWDG_CTLR_T4 ((uint8_t)0x10) /* Bit 4 */ -#define WWDG_CTLR_T5 ((uint8_t)0x20) /* Bit 5 */ -#define WWDG_CTLR_T6 ((uint8_t)0x40) /* Bit 6 */ - -#define WWDG_CTLR_WDGA ((uint8_t)0x80) /* Activation bit */ - -/******************* Bit definition for WWDG_CFGR register *******************/ -#define WWDG_CFGR_W ((uint16_t)0x007F) /* W[6:0] bits (7-bit window value) */ -#define WWDG_CFGR_W0 ((uint16_t)0x0001) /* Bit 0 */ -#define WWDG_CFGR_W1 ((uint16_t)0x0002) /* Bit 1 */ -#define WWDG_CFGR_W2 ((uint16_t)0x0004) /* Bit 2 */ -#define WWDG_CFGR_W3 ((uint16_t)0x0008) /* Bit 3 */ -#define WWDG_CFGR_W4 ((uint16_t)0x0010) /* Bit 4 */ -#define WWDG_CFGR_W5 ((uint16_t)0x0020) /* Bit 5 */ -#define WWDG_CFGR_W6 ((uint16_t)0x0040) /* Bit 6 */ - -#define WWDG_CFGR_WDGTB ((uint16_t)0x0180) /* WDGTB[1:0] bits (Timer Base) */ -#define WWDG_CFGR_WDGTB0 ((uint16_t)0x0080) /* Bit 0 */ -#define WWDG_CFGR_WDGTB1 ((uint16_t)0x0100) /* Bit 1 */ - -#define WWDG_CFGR_EWI ((uint16_t)0x0200) /* Early Wakeup Interrupt */ - -/******************* Bit definition for WWDG_STATR register ********************/ -#define WWDG_STATR_EWIF ((uint8_t)0x01) /* Early Wakeup Interrupt Flag */ - -/******************************************************************************/ -/* ENHANCED FUNNCTION */ -/******************************************************************************/ - -/**************************** Enhanced register *****************************/ -#define EXTEN_USBD_LS ((uint32_t)0x00000001) /* Bit 0 */ -#define EXTEN_USBD_PU_EN ((uint32_t)0x00000002) /* Bit 1 */ -#define EXTEN_USBHD_IO_EN ((uint32_t)0x00000004) /* Bit 2 */ -#define EXTEN_USB_5V_SEL ((uint32_t)0x00000008) /* Bit 3 */ -#define EXTEN_PLL_HSI_PRE ((uint32_t)0x00000010) /* Bit 4 */ -#define EXTEN_LOCKUP_EN ((uint32_t)0x00000040) /* Bit 5 */ -#define EXTEN_LOCKUP_RSTF ((uint32_t)0x00000080) /* Bit 7 */ - -#define EXTEN_ULLDO_TRIM ((uint32_t)0x00000300) /* ULLDO_TRIM[1:0] bits */ -#define EXTEN_ULLDO_TRIM0 ((uint32_t)0x00000100) /* Bit 0 */ -#define EXTEN_ULLDO_TRIM1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define EXTEN_IDO_TRIM ((uint32_t)0x00000400) /* Bit 10 */ -#define EXTEN_WRITE_EN ((uint32_t)0x00004000) /* Bit 14 */ -#define EXTEN_SHORT_WAKE ((uint32_t)0x00008000) /* Bit 15 */ - -#define EXTEN_FLASH_CLK_TRIM ((uint32_t)0x00070000) /* FLASH_CLK_TRIM[2:0] bits */ -#define EXTEN_FLASH_CLK_TRIM0 ((uint32_t)0x00010000) /* Bit 0 */ -#define EXTEN_FLASH_CLK_TRIM1 ((uint32_t)0x00020000) /* Bit 1 */ -#define EXTEN_FLASH_CLK_TRIM2 ((uint32_t)0x00040000) /* Bit 2 */ - - - -#include "ch32f10x_conf.h" - - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_H */ - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_adc.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_adc.h deleted file mode 100644 index 62785f8..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_adc.h +++ /dev/null @@ -1,196 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_adc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * ADC firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_ADC_H -#define __CH32F10x_ADC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - - -/* ADC Init structure definition */ -typedef struct -{ - uint32_t ADC_Mode; /* Configures the ADC to operate in independent or - dual mode. - This parameter can be a value of @ref ADC_mode */ - - FunctionalState ADC_ScanConvMode; /* Specifies whether the conversion is performed in - Scan (multichannels) or Single (one channel) mode. - This parameter can be set to ENABLE or DISABLE */ - - FunctionalState ADC_ContinuousConvMode; /* Specifies whether the conversion is performed in - Continuous or Single mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ADC_ExternalTrigConv; /* Defines the external trigger used to start the analog - to digital conversion of regular channels. This parameter - can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */ - - uint32_t ADC_DataAlign; /* Specifies whether the ADC data alignment is left or right. - This parameter can be a value of @ref ADC_data_align */ - - uint8_t ADC_NbrOfChannel; /* Specifies the number of ADC channels that will be converted - using the sequencer for regular channel group. - This parameter must range from 1 to 16. */ -}ADC_InitTypeDef; - -/* ADC_mode */ -#define ADC_Mode_Independent ((uint32_t)0x00000000) -#define ADC_Mode_RegInjecSimult ((uint32_t)0x00010000) -#define ADC_Mode_RegSimult_AlterTrig ((uint32_t)0x00020000) -#define ADC_Mode_InjecSimult_FastInterl ((uint32_t)0x00030000) -#define ADC_Mode_InjecSimult_SlowInterl ((uint32_t)0x00040000) -#define ADC_Mode_InjecSimult ((uint32_t)0x00050000) -#define ADC_Mode_RegSimult ((uint32_t)0x00060000) -#define ADC_Mode_FastInterl ((uint32_t)0x00070000) -#define ADC_Mode_SlowInterl ((uint32_t)0x00080000) -#define ADC_Mode_AlterTrig ((uint32_t)0x00090000) - -/* ADC_external_trigger_sources_for_regular_channels_conversion */ -#define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000) -#define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x00020000) -#define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x00060000) -#define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x00080000) -#define ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x000A0000) -#define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO ((uint32_t)0x000C0000) - -#define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x00040000) -#define ADC_ExternalTrigConv_None ((uint32_t)0x000E0000) - -/* ADC_data_align */ -#define ADC_DataAlign_Right ((uint32_t)0x00000000) -#define ADC_DataAlign_Left ((uint32_t)0x00000800) - -/* ADC_channels */ -#define ADC_Channel_0 ((uint8_t)0x00) -#define ADC_Channel_1 ((uint8_t)0x01) -#define ADC_Channel_2 ((uint8_t)0x02) -#define ADC_Channel_3 ((uint8_t)0x03) -#define ADC_Channel_4 ((uint8_t)0x04) -#define ADC_Channel_5 ((uint8_t)0x05) -#define ADC_Channel_6 ((uint8_t)0x06) -#define ADC_Channel_7 ((uint8_t)0x07) -#define ADC_Channel_8 ((uint8_t)0x08) -#define ADC_Channel_9 ((uint8_t)0x09) -#define ADC_Channel_10 ((uint8_t)0x0A) -#define ADC_Channel_11 ((uint8_t)0x0B) -#define ADC_Channel_12 ((uint8_t)0x0C) -#define ADC_Channel_13 ((uint8_t)0x0D) -#define ADC_Channel_14 ((uint8_t)0x0E) -#define ADC_Channel_15 ((uint8_t)0x0F) -#define ADC_Channel_16 ((uint8_t)0x10) -#define ADC_Channel_17 ((uint8_t)0x11) - -#define ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16) -#define ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17) - -/* ADC_sampling_time */ -#define ADC_SampleTime_1Cycles5 ((uint8_t)0x00) -#define ADC_SampleTime_7Cycles5 ((uint8_t)0x01) -#define ADC_SampleTime_13Cycles5 ((uint8_t)0x02) -#define ADC_SampleTime_28Cycles5 ((uint8_t)0x03) -#define ADC_SampleTime_41Cycles5 ((uint8_t)0x04) -#define ADC_SampleTime_55Cycles5 ((uint8_t)0x05) -#define ADC_SampleTime_71Cycles5 ((uint8_t)0x06) -#define ADC_SampleTime_239Cycles5 ((uint8_t)0x07) - -/* ADC_external_trigger_sources_for_injected_channels_conversion */ -#define ADC_ExternalTrigInjecConv_T2_TRGO ((uint32_t)0x00002000) -#define ADC_ExternalTrigInjecConv_T2_CC1 ((uint32_t)0x00003000) -#define ADC_ExternalTrigInjecConv_T3_CC4 ((uint32_t)0x00004000) -#define ADC_ExternalTrigInjecConv_T4_TRGO ((uint32_t)0x00005000) -#define ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4 ((uint32_t)0x00006000) - -#define ADC_ExternalTrigInjecConv_T1_TRGO ((uint32_t)0x00000000) -#define ADC_ExternalTrigInjecConv_T1_CC4 ((uint32_t)0x00001000) -#define ADC_ExternalTrigInjecConv_None ((uint32_t)0x00007000) - -/* ADC_injected_channel_selection */ -#define ADC_InjectedChannel_1 ((uint8_t)0x14) -#define ADC_InjectedChannel_2 ((uint8_t)0x18) -#define ADC_InjectedChannel_3 ((uint8_t)0x1C) -#define ADC_InjectedChannel_4 ((uint8_t)0x20) - -/* ADC_analog_watchdog_selection */ -#define ADC_AnalogWatchdog_SingleRegEnable ((uint32_t)0x00800200) -#define ADC_AnalogWatchdog_SingleInjecEnable ((uint32_t)0x00400200) -#define ADC_AnalogWatchdog_SingleRegOrInjecEnable ((uint32_t)0x00C00200) -#define ADC_AnalogWatchdog_AllRegEnable ((uint32_t)0x00800000) -#define ADC_AnalogWatchdog_AllInjecEnable ((uint32_t)0x00400000) -#define ADC_AnalogWatchdog_AllRegAllInjecEnable ((uint32_t)0x00C00000) -#define ADC_AnalogWatchdog_None ((uint32_t)0x00000000) - -/* ADC_interrupts_definition */ -#define ADC_IT_EOC ((uint16_t)0x0220) -#define ADC_IT_AWD ((uint16_t)0x0140) -#define ADC_IT_JEOC ((uint16_t)0x0480) - -/* ADC_flags_definition */ -#define ADC_FLAG_AWD ((uint8_t)0x01) -#define ADC_FLAG_EOC ((uint8_t)0x02) -#define ADC_FLAG_JEOC ((uint8_t)0x04) -#define ADC_FLAG_JSTRT ((uint8_t)0x08) -#define ADC_FLAG_STRT ((uint8_t)0x10) - - -void ADC_DeInit(ADC_TypeDef* ADCx); -void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); -void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct); -void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState); -void ADC_ResetCalibration(ADC_TypeDef* ADCx); -FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx); -void ADC_StartCalibration(ADC_TypeDef* ADCx); -FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx); -void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx); -void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number); -void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); -void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); -uint32_t ADC_GetDualModeConversionValue(void); -void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv); -void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); -FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx); -void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); -void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length); -void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset); -uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel); -void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog); -void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold); -void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel); -void ADC_TempSensorVrefintCmd(FunctionalState NewState); -FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); -void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); -ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT); -void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT); -s32 TempSensor_Volt_To_Temper(s32 Value); -int16_t Get_CalibrationValue(ADC_TypeDef* ADCx); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32F10x_ADC_H */ - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_bkp.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_bkp.h deleted file mode 100644 index a6107db..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_bkp.h +++ /dev/null @@ -1,97 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_bkp.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * BKP firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_BKP_H -#define __CH32F10x_BKP_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* Tamper_Pin_active_level */ -#define BKP_TamperPinLevel_High ((uint16_t)0x0000) -#define BKP_TamperPinLevel_Low ((uint16_t)0x0001) - -/* RTC_output_source_to_output_on_the_Tamper_pin */ -#define BKP_RTCOutputSource_None ((uint16_t)0x0000) -#define BKP_RTCOutputSource_CalibClock ((uint16_t)0x0080) -#define BKP_RTCOutputSource_Alarm ((uint16_t)0x0100) -#define BKP_RTCOutputSource_Second ((uint16_t)0x0300) - -/* Data_Backup_Register */ -#define BKP_DR1 ((uint16_t)0x0004) -#define BKP_DR2 ((uint16_t)0x0008) -#define BKP_DR3 ((uint16_t)0x000C) -#define BKP_DR4 ((uint16_t)0x0010) -#define BKP_DR5 ((uint16_t)0x0014) -#define BKP_DR6 ((uint16_t)0x0018) -#define BKP_DR7 ((uint16_t)0x001C) -#define BKP_DR8 ((uint16_t)0x0020) -#define BKP_DR9 ((uint16_t)0x0024) -#define BKP_DR10 ((uint16_t)0x0028) -#define BKP_DR11 ((uint16_t)0x0040) -#define BKP_DR12 ((uint16_t)0x0044) -#define BKP_DR13 ((uint16_t)0x0048) -#define BKP_DR14 ((uint16_t)0x004C) -#define BKP_DR15 ((uint16_t)0x0050) -#define BKP_DR16 ((uint16_t)0x0054) -#define BKP_DR17 ((uint16_t)0x0058) -#define BKP_DR18 ((uint16_t)0x005C) -#define BKP_DR19 ((uint16_t)0x0060) -#define BKP_DR20 ((uint16_t)0x0064) -#define BKP_DR21 ((uint16_t)0x0068) -#define BKP_DR22 ((uint16_t)0x006C) -#define BKP_DR23 ((uint16_t)0x0070) -#define BKP_DR24 ((uint16_t)0x0074) -#define BKP_DR25 ((uint16_t)0x0078) -#define BKP_DR26 ((uint16_t)0x007C) -#define BKP_DR27 ((uint16_t)0x0080) -#define BKP_DR28 ((uint16_t)0x0084) -#define BKP_DR29 ((uint16_t)0x0088) -#define BKP_DR30 ((uint16_t)0x008C) -#define BKP_DR31 ((uint16_t)0x0090) -#define BKP_DR32 ((uint16_t)0x0094) -#define BKP_DR33 ((uint16_t)0x0098) -#define BKP_DR34 ((uint16_t)0x009C) -#define BKP_DR35 ((uint16_t)0x00A0) -#define BKP_DR36 ((uint16_t)0x00A4) -#define BKP_DR37 ((uint16_t)0x00A8) -#define BKP_DR38 ((uint16_t)0x00AC) -#define BKP_DR39 ((uint16_t)0x00B0) -#define BKP_DR40 ((uint16_t)0x00B4) -#define BKP_DR41 ((uint16_t)0x00B8) -#define BKP_DR42 ((uint16_t)0x00BC) - - -void BKP_DeInit(void); -void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel); -void BKP_TamperPinCmd(FunctionalState NewState); -void BKP_ITConfig(FunctionalState NewState); -void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource); -void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue); -void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data); -uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR); -FlagStatus BKP_GetFlagStatus(void); -void BKP_ClearFlag(void); -ITStatus BKP_GetITStatus(void); -void BKP_ClearITPendingBit(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_BKP_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_can.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_can.h deleted file mode 100644 index cf7aa37..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_can.h +++ /dev/null @@ -1,366 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_can.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * CAN firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_CAN_H -#define __CH32F10x_CAN_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* CAN init structure definition */ -typedef struct -{ - uint16_t CAN_Prescaler; /* Specifies the length of a time quantum. - It ranges from 1 to 1024. */ - - uint8_t CAN_Mode; /* Specifies the CAN operating mode. - This parameter can be a value of - @ref CAN_operating_mode */ - - uint8_t CAN_SJW; /* Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of - @ref CAN_synchronisation_jump_width */ - - uint8_t CAN_BS1; /* Specifies the number of time quanta in Bit - Segment 1. This parameter can be a value of - @ref CAN_time_quantum_in_bit_segment_1 */ - - uint8_t CAN_BS2; /* Specifies the number of time quanta in Bit - Segment 2. - This parameter can be a value of - @ref CAN_time_quantum_in_bit_segment_2 */ - - FunctionalState CAN_TTCM; /* Enable or disable the time triggered - communication mode. This parameter can be set - either to ENABLE or DISABLE. */ - - FunctionalState CAN_ABOM; /* Enable or disable the automatic bus-off - management. This parameter can be set either - to ENABLE or DISABLE. */ - - FunctionalState CAN_AWUM; /* Enable or disable the automatic wake-up mode. - This parameter can be set either to ENABLE or - DISABLE. */ - - FunctionalState CAN_NART; /* Enable or disable the no-automatic - retransmission mode. This parameter can be - set either to ENABLE or DISABLE. */ - - FunctionalState CAN_RFLM; /* Enable or disable the Receive FIFO Locked mode. - This parameter can be set either to ENABLE - or DISABLE. */ - - FunctionalState CAN_TXFP; /* Enable or disable the transmit FIFO priority. - This parameter can be set either to ENABLE - or DISABLE. */ -} CAN_InitTypeDef; - -/* CAN filter init structure definition */ -typedef struct -{ - uint16_t CAN_FilterIdHigh; /* Specifies the filter identification number (MSBs for a 32-bit - configuration, first one for a 16-bit configuration). - This parameter can be a value between 0x0000 and 0xFFFF */ - - uint16_t CAN_FilterIdLow; /* Specifies the filter identification number (LSBs for a 32-bit - configuration, second one for a 16-bit configuration). - This parameter can be a value between 0x0000 and 0xFFFF */ - - uint16_t CAN_FilterMaskIdHigh; /* Specifies the filter mask number or identification number, - according to the mode (MSBs for a 32-bit configuration, - first one for a 16-bit configuration). - This parameter can be a value between 0x0000 and 0xFFFF */ - - uint16_t CAN_FilterMaskIdLow; /* Specifies the filter mask number or identification number, - according to the mode (LSBs for a 32-bit configuration, - second one for a 16-bit configuration). - This parameter can be a value between 0x0000 and 0xFFFF */ - - uint16_t CAN_FilterFIFOAssignment; /* Specifies the FIFO (0 or 1) which will be assigned to the filter. - This parameter can be a value of @ref CAN_filter_FIFO */ - - uint8_t CAN_FilterNumber; /* Specifies the filter which will be initialized. It ranges from 0 to 13. */ - - uint8_t CAN_FilterMode; /* Specifies the filter mode to be initialized. - This parameter can be a value of @ref CAN_filter_mode */ - - uint8_t CAN_FilterScale; /* Specifies the filter scale. - This parameter can be a value of @ref CAN_filter_scale */ - - FunctionalState CAN_FilterActivation; /* Enable or disable the filter. - This parameter can be set either to ENABLE or DISABLE. */ -} CAN_FilterInitTypeDef; - -/* CAN Tx message structure definition */ -typedef struct -{ - uint32_t StdId; /* Specifies the standard identifier. - This parameter can be a value between 0 to 0x7FF. */ - - uint32_t ExtId; /* Specifies the extended identifier. - This parameter can be a value between 0 to 0x1FFFFFFF. */ - - uint8_t IDE; /* Specifies the type of identifier for the message that - will be transmitted. This parameter can be a value - of @ref CAN_identifier_type */ - - uint8_t RTR; /* Specifies the type of frame for the message that will - be transmitted. This parameter can be a value of - @ref CAN_remote_transmission_request */ - - uint8_t DLC; /* Specifies the length of the frame that will be - transmitted. This parameter can be a value between - 0 to 8 */ - - uint8_t Data[8]; /* Contains the data to be transmitted. It ranges from 0 - to 0xFF. */ -} CanTxMsg; - -/* CAN Rx message structure definition */ -typedef struct -{ - uint32_t StdId; /* Specifies the standard identifier. - This parameter can be a value between 0 to 0x7FF. */ - - uint32_t ExtId; /* Specifies the extended identifier. - This parameter can be a value between 0 to 0x1FFFFFFF. */ - - uint8_t IDE; /* Specifies the type of identifier for the message that - will be received. This parameter can be a value of - @ref CAN_identifier_type */ - - uint8_t RTR; /* Specifies the type of frame for the received message. - This parameter can be a value of - @ref CAN_remote_transmission_request */ - - uint8_t DLC; /* Specifies the length of the frame that will be received. - This parameter can be a value between 0 to 8 */ - - uint8_t Data[8]; /* Contains the data to be received. It ranges from 0 to - 0xFF. */ - - uint8_t FMI; /* Specifies the index of the filter the message stored in - the mailbox passes through. This parameter can be a - value between 0 to 0xFF */ -} CanRxMsg; - -/* CAN_sleep_constants */ -#define CAN_InitStatus_Failed ((uint8_t)0x00) /* CAN initialization failed */ -#define CAN_InitStatus_Success ((uint8_t)0x01) /* CAN initialization OK */ - -/* CAN_Mode */ -#define CAN_Mode_Normal ((uint8_t)0x00) /* normal mode */ -#define CAN_Mode_LoopBack ((uint8_t)0x01) /* loopback mode */ -#define CAN_Mode_Silent ((uint8_t)0x02) /* silent mode */ -#define CAN_Mode_Silent_LoopBack ((uint8_t)0x03) /* loopback combined with silent mode */ - -/* CAN_Operating_Mode */ -#define CAN_OperatingMode_Initialization ((uint8_t)0x00) /* Initialization mode */ -#define CAN_OperatingMode_Normal ((uint8_t)0x01) /* Normal mode */ -#define CAN_OperatingMode_Sleep ((uint8_t)0x02) /* sleep mode */ - -/* CAN_Mode_Status */ -#define CAN_ModeStatus_Failed ((uint8_t)0x00) /* CAN entering the specific mode failed */ -#define CAN_ModeStatus_Success ((uint8_t)!CAN_ModeStatus_Failed) /* CAN entering the specific mode Succeed */ - -/* CAN_synchronisation_jump_width */ -#define CAN_SJW_1tq ((uint8_t)0x00) /* 1 time quantum */ -#define CAN_SJW_2tq ((uint8_t)0x01) /* 2 time quantum */ -#define CAN_SJW_3tq ((uint8_t)0x02) /* 3 time quantum */ -#define CAN_SJW_4tq ((uint8_t)0x03) /* 4 time quantum */ - -/* CAN_time_quantum_in_bit_segment_1 */ -#define CAN_BS1_1tq ((uint8_t)0x00) /* 1 time quantum */ -#define CAN_BS1_2tq ((uint8_t)0x01) /* 2 time quantum */ -#define CAN_BS1_3tq ((uint8_t)0x02) /* 3 time quantum */ -#define CAN_BS1_4tq ((uint8_t)0x03) /* 4 time quantum */ -#define CAN_BS1_5tq ((uint8_t)0x04) /* 5 time quantum */ -#define CAN_BS1_6tq ((uint8_t)0x05) /* 6 time quantum */ -#define CAN_BS1_7tq ((uint8_t)0x06) /* 7 time quantum */ -#define CAN_BS1_8tq ((uint8_t)0x07) /* 8 time quantum */ -#define CAN_BS1_9tq ((uint8_t)0x08) /* 9 time quantum */ -#define CAN_BS1_10tq ((uint8_t)0x09) /* 10 time quantum */ -#define CAN_BS1_11tq ((uint8_t)0x0A) /* 11 time quantum */ -#define CAN_BS1_12tq ((uint8_t)0x0B) /* 12 time quantum */ -#define CAN_BS1_13tq ((uint8_t)0x0C) /* 13 time quantum */ -#define CAN_BS1_14tq ((uint8_t)0x0D) /* 14 time quantum */ -#define CAN_BS1_15tq ((uint8_t)0x0E) /* 15 time quantum */ -#define CAN_BS1_16tq ((uint8_t)0x0F) /* 16 time quantum */ - -/* CAN_time_quantum_in_bit_segment_2 */ -#define CAN_BS2_1tq ((uint8_t)0x00) /* 1 time quantum */ -#define CAN_BS2_2tq ((uint8_t)0x01) /* 2 time quantum */ -#define CAN_BS2_3tq ((uint8_t)0x02) /* 3 time quantum */ -#define CAN_BS2_4tq ((uint8_t)0x03) /* 4 time quantum */ -#define CAN_BS2_5tq ((uint8_t)0x04) /* 5 time quantum */ -#define CAN_BS2_6tq ((uint8_t)0x05) /* 6 time quantum */ -#define CAN_BS2_7tq ((uint8_t)0x06) /* 7 time quantum */ -#define CAN_BS2_8tq ((uint8_t)0x07) /* 8 time quantum */ - -/* CAN_filter_mode */ -#define CAN_FilterMode_IdMask ((uint8_t)0x00) /* identifier/mask mode */ -#define CAN_FilterMode_IdList ((uint8_t)0x01) /* identifier list mode */ - -/* CAN_filter_scale */ -#define CAN_FilterScale_16bit ((uint8_t)0x00) /* Two 16-bit filters */ -#define CAN_FilterScale_32bit ((uint8_t)0x01) /* One 32-bit filter */ - -/* CAN_filter_FIFO */ -#define CAN_Filter_FIFO0 ((uint8_t)0x00) /* Filter FIFO 0 assignment for filter x */ -#define CAN_Filter_FIFO1 ((uint8_t)0x01) /* Filter FIFO 1 assignment for filter x */ - -/* CAN_identifier_type */ -#define CAN_Id_Standard ((uint32_t)0x00000000) /* Standard Id */ -#define CAN_Id_Extended ((uint32_t)0x00000004) /* Extended Id */ - -/* CAN_remote_transmission_request */ -#define CAN_RTR_Data ((uint32_t)0x00000000) /* Data frame */ -#define CAN_RTR_Remote ((uint32_t)0x00000002) /* Remote frame */ - -/* CAN_transmit_constants */ -#define CAN_TxStatus_Failed ((uint8_t)0x00)/* CAN transmission failed */ -#define CAN_TxStatus_Ok ((uint8_t)0x01) /* CAN transmission succeeded */ -#define CAN_TxStatus_Pending ((uint8_t)0x02) /* CAN transmission pending */ -#define CAN_TxStatus_NoMailBox ((uint8_t)0x04) /* CAN cell did not provide an empty mailbox */ - -/* CAN_receive_FIFO_number_constants */ -#define CAN_FIFO0 ((uint8_t)0x00) /* CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01) /* CAN FIFO 1 used to receive */ - -/* CAN_sleep_constants */ -#define CAN_Sleep_Failed ((uint8_t)0x00) /* CAN did not enter the sleep mode */ -#define CAN_Sleep_Ok ((uint8_t)0x01) /* CAN entered the sleep mode */ - -/* CAN_wake_up_constants */ -#define CAN_WakeUp_Failed ((uint8_t)0x00) /* CAN did not leave the sleep mode */ -#define CAN_WakeUp_Ok ((uint8_t)0x01) /* CAN leaved the sleep mode */ - -/* CAN_Error_Code_constants */ -#define CAN_ErrorCode_NoErr ((uint8_t)0x00) /* No Error */ -#define CAN_ErrorCode_StuffErr ((uint8_t)0x10) /* Stuff Error */ -#define CAN_ErrorCode_FormErr ((uint8_t)0x20) /* Form Error */ -#define CAN_ErrorCode_ACKErr ((uint8_t)0x30) /* Acknowledgment Error */ -#define CAN_ErrorCode_BitRecessiveErr ((uint8_t)0x40) /* Bit Recessive Error */ -#define CAN_ErrorCode_BitDominantErr ((uint8_t)0x50) /* Bit Dominant Error */ -#define CAN_ErrorCode_CRCErr ((uint8_t)0x60) /* CRC Error */ -#define CAN_ErrorCode_SoftwareSetErr ((uint8_t)0x70) /* Software Set Error */ - - -/* CAN_flags */ -/* Transmit Flags */ -#define CAN_FLAG_RQCP0 ((uint32_t)0x38000001) /* Request MailBox0 Flag */ -#define CAN_FLAG_RQCP1 ((uint32_t)0x38000100) /* Request MailBox1 Flag */ -#define CAN_FLAG_RQCP2 ((uint32_t)0x38010000) /* Request MailBox2 Flag */ - -/* Receive Flags */ -#define CAN_FLAG_FMP0 ((uint32_t)0x12000003) /* FIFO 0 Message Pending Flag */ -#define CAN_FLAG_FF0 ((uint32_t)0x32000008) /* FIFO 0 Full Flag */ -#define CAN_FLAG_FOV0 ((uint32_t)0x32000010) /* FIFO 0 Overrun Flag */ -#define CAN_FLAG_FMP1 ((uint32_t)0x14000003) /* FIFO 1 Message Pending Flag */ -#define CAN_FLAG_FF1 ((uint32_t)0x34000008) /* FIFO 1 Full Flag */ -#define CAN_FLAG_FOV1 ((uint32_t)0x34000010) /* FIFO 1 Overrun Flag */ - -/* Operating Mode Flags */ -#define CAN_FLAG_WKU ((uint32_t)0x31000008) /* Wake up Flag */ -#define CAN_FLAG_SLAK ((uint32_t)0x31000012) /* Sleep acknowledge Flag */ - -/* Error Flags */ -#define CAN_FLAG_EWG ((uint32_t)0x10F00001) /* Error Warning Flag */ -#define CAN_FLAG_EPV ((uint32_t)0x10F00002) /* Error Passive Flag */ -#define CAN_FLAG_BOF ((uint32_t)0x10F00004) /* Bus-Off Flag */ -#define CAN_FLAG_LEC ((uint32_t)0x30F00070) /* Last error code Flag */ - - -/* CAN_interrupts */ -#define CAN_IT_TME ((uint32_t)0x00000001) /* Transmit mailbox empty Interrupt*/ - -/* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)0x00000002) /* FIFO 0 message pending Interrupt*/ -#define CAN_IT_FF0 ((uint32_t)0x00000004) /* FIFO 0 full Interrupt*/ -#define CAN_IT_FOV0 ((uint32_t)0x00000008) /* FIFO 0 overrun Interrupt*/ -#define CAN_IT_FMP1 ((uint32_t)0x00000010) /* FIFO 1 message pending Interrupt*/ -#define CAN_IT_FF1 ((uint32_t)0x00000020) /* FIFO 1 full Interrupt*/ -#define CAN_IT_FOV1 ((uint32_t)0x00000040) /* FIFO 1 overrun Interrupt*/ - -/* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)0x00010000) /* Wake-up Interrupt*/ -#define CAN_IT_SLK ((uint32_t)0x00020000) /* Sleep acknowledge Interrupt*/ - -/* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)0x00000100) /* Error warning Interrupt*/ -#define CAN_IT_EPV ((uint32_t)0x00000200) /* Error passive Interrupt*/ -#define CAN_IT_BOF ((uint32_t)0x00000400) /* Bus-off Interrupt*/ -#define CAN_IT_LEC ((uint32_t)0x00000800) /* Last error code Interrupt*/ -#define CAN_IT_ERR ((uint32_t)0x00008000) /* Error Interrupt*/ - -/* Flags named as Interrupts : kept only for FW compatibility */ -#define CAN_IT_RQCP0 CAN_IT_TME -#define CAN_IT_RQCP1 CAN_IT_TME -#define CAN_IT_RQCP2 CAN_IT_TME - -/* CAN_Legacy */ -#define CANINITFAILED CAN_InitStatus_Failed -#define CANINITOK CAN_InitStatus_Success -#define CAN_FilterFIFO0 CAN_Filter_FIFO0 -#define CAN_FilterFIFO1 CAN_Filter_FIFO1 -#define CAN_ID_STD CAN_Id_Standard -#define CAN_ID_EXT CAN_Id_Extended -#define CAN_RTR_DATA CAN_RTR_Data -#define CAN_RTR_REMOTE CAN_RTR_Remote -#define CANTXFAILE CAN_TxStatus_Failed -#define CANTXOK CAN_TxStatus_Ok -#define CANTXPENDING CAN_TxStatus_Pending -#define CAN_NO_MB CAN_TxStatus_NoMailBox -#define CANSLEEPFAILED CAN_Sleep_Failed -#define CANSLEEPOK CAN_Sleep_Ok -#define CANWAKEUPFAILED CAN_WakeUp_Failed -#define CANWAKEUPOK CAN_WakeUp_Ok - - -void CAN_DeInit(CAN_TypeDef* CANx); -uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct); -void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct); -void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct); -void CAN_SlaveStartBank(uint8_t CAN_BankNumber); -void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState); -void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState); -uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage); -uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox); -void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox); -void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage); -void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber); -uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber); -uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode); -uint8_t CAN_Sleep(CAN_TypeDef* CANx); -uint8_t CAN_WakeUp(CAN_TypeDef* CANx); -uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx); -uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx); -uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx); -void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState); -FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG); -void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG); -ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT); -void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_CAN_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_crc.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_crc.h deleted file mode 100644 index 5bfa88f..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_crc.h +++ /dev/null @@ -1,37 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_crc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * CRC firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_CRC_H -#define __CH32F10x_CRC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - - -void CRC_ResetDR(void); -uint32_t CRC_CalcCRC(uint32_t Data); -uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength); -uint32_t CRC_GetCRC(void); -void CRC_SetIDRegister(uint8_t IDValue); -uint8_t CRC_GetIDRegister(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_CRC_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dac.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dac.h deleted file mode 100644 index 99013c4..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dac.h +++ /dev/null @@ -1,122 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_dac.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * DAC firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_DAC_H -#define __CH32F10x_DAC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* DAC Init structure definition */ -typedef struct -{ - uint32_t DAC_Trigger; /* Specifies the external trigger for the selected DAC channel. - This parameter can be a value of @ref DAC_trigger_selection */ - - uint32_t DAC_WaveGeneration; /* Specifies whether DAC channel noise waves or triangle waves - are generated, or whether no wave is generated. - This parameter can be a value of @ref DAC_wave_generation */ - - uint32_t DAC_LFSRUnmask_TriangleAmplitude; /* Specifies the LFSR mask for noise wave generation or - the maximum amplitude triangle generation for the DAC channel. - This parameter can be a value of @ref DAC_lfsrunmask_triangleamplitude */ - - uint32_t DAC_OutputBuffer; /* Specifies whether the DAC channel output buffer is enabled or disabled. - This parameter can be a value of @ref DAC_output_buffer */ -}DAC_InitTypeDef; - - -/* DAC_trigger_selection */ -#define DAC_Trigger_None ((uint32_t)0x00000000) /* Conversion is automatic once the DAC1_DHRxxxx register - has been loaded, and not by external trigger */ -#define DAC_Trigger_T6_TRGO ((uint32_t)0x00000004) /* TIM6 TRGO selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_T8_TRGO ((uint32_t)0x0000000C) /* TIM8 TRGO selected as external conversion trigger for DAC channel - only in High-density devices*/ -#define DAC_Trigger_T3_TRGO ((uint32_t)0x0000000C) /* TIM8 TRGO selected as external conversion trigger for DAC channel - only in Connectivity line, Medium-density and Low-density Value Line devices */ -#define DAC_Trigger_T7_TRGO ((uint32_t)0x00000014) /* TIM7 TRGO selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_T5_TRGO ((uint32_t)0x0000001C) /* TIM5 TRGO selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_T15_TRGO ((uint32_t)0x0000001C) /* TIM15 TRGO selected as external conversion trigger for DAC channel - only in Medium-density and Low-density Value Line devices*/ -#define DAC_Trigger_T2_TRGO ((uint32_t)0x00000024) /* TIM2 TRGO selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_T4_TRGO ((uint32_t)0x0000002C) /* TIM4 TRGO selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_Ext_IT9 ((uint32_t)0x00000034) /* EXTI Line9 event selected as external conversion trigger for DAC channel */ -#define DAC_Trigger_Software ((uint32_t)0x0000003C) /* Conversion started by software trigger for DAC channel */ - -/* DAC_wave_generation */ -#define DAC_WaveGeneration_None ((uint32_t)0x00000000) -#define DAC_WaveGeneration_Noise ((uint32_t)0x00000040) -#define DAC_WaveGeneration_Triangle ((uint32_t)0x00000080) - - -/* DAC_lfsrunmask_triangleamplitude */ -#define DAC_LFSRUnmask_Bit0 ((uint32_t)0x00000000) /* Unmask DAC channel LFSR bit0 for noise wave generation */ -#define DAC_LFSRUnmask_Bits1_0 ((uint32_t)0x00000100) /* Unmask DAC channel LFSR bit[1:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits2_0 ((uint32_t)0x00000200) /* Unmask DAC channel LFSR bit[2:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits3_0 ((uint32_t)0x00000300) /* Unmask DAC channel LFSR bit[3:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits4_0 ((uint32_t)0x00000400) /* Unmask DAC channel LFSR bit[4:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits5_0 ((uint32_t)0x00000500) /* Unmask DAC channel LFSR bit[5:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits6_0 ((uint32_t)0x00000600) /* Unmask DAC channel LFSR bit[6:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits7_0 ((uint32_t)0x00000700) /* Unmask DAC channel LFSR bit[7:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits8_0 ((uint32_t)0x00000800) /* Unmask DAC channel LFSR bit[8:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits9_0 ((uint32_t)0x00000900) /* Unmask DAC channel LFSR bit[9:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits10_0 ((uint32_t)0x00000A00) /* Unmask DAC channel LFSR bit[10:0] for noise wave generation */ -#define DAC_LFSRUnmask_Bits11_0 ((uint32_t)0x00000B00) /* Unmask DAC channel LFSR bit[11:0] for noise wave generation */ -#define DAC_TriangleAmplitude_1 ((uint32_t)0x00000000) /* Select max triangle amplitude of 1 */ -#define DAC_TriangleAmplitude_3 ((uint32_t)0x00000100) /* Select max triangle amplitude of 3 */ -#define DAC_TriangleAmplitude_7 ((uint32_t)0x00000200) /* Select max triangle amplitude of 7 */ -#define DAC_TriangleAmplitude_15 ((uint32_t)0x00000300) /* Select max triangle amplitude of 15 */ -#define DAC_TriangleAmplitude_31 ((uint32_t)0x00000400) /* Select max triangle amplitude of 31 */ -#define DAC_TriangleAmplitude_63 ((uint32_t)0x00000500) /* Select max triangle amplitude of 63 */ -#define DAC_TriangleAmplitude_127 ((uint32_t)0x00000600) /* Select max triangle amplitude of 127 */ -#define DAC_TriangleAmplitude_255 ((uint32_t)0x00000700) /* Select max triangle amplitude of 255 */ -#define DAC_TriangleAmplitude_511 ((uint32_t)0x00000800) /* Select max triangle amplitude of 511 */ -#define DAC_TriangleAmplitude_1023 ((uint32_t)0x00000900) /* Select max triangle amplitude of 1023 */ -#define DAC_TriangleAmplitude_2047 ((uint32_t)0x00000A00) /* Select max triangle amplitude of 2047 */ -#define DAC_TriangleAmplitude_4095 ((uint32_t)0x00000B00) /* Select max triangle amplitude of 4095 */ - -/* DAC_output_buffer */ -#define DAC_OutputBuffer_Enable ((uint32_t)0x00000000) -#define DAC_OutputBuffer_Disable ((uint32_t)0x00000002) - -/* DAC_Channel_selection */ -#define DAC_Channel_1 ((uint32_t)0x00000000) -#define DAC_Channel_2 ((uint32_t)0x00000010) - -/* DAC_data_alignment */ -#define DAC_Align_12b_R ((uint32_t)0x00000000) -#define DAC_Align_12b_L ((uint32_t)0x00000004) -#define DAC_Align_8b_R ((uint32_t)0x00000008) - -/* DAC_wave_generation */ -#define DAC_Wave_Noise ((uint32_t)0x00000040) -#define DAC_Wave_Triangle ((uint32_t)0x00000080) - - -void DAC_DeInit(void); -void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct); -void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct); -void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState); -void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState); -void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState); -void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState); -void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data); -void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data); -uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32F10x_DAC_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dbgmcu.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dbgmcu.h deleted file mode 100644 index 42fb91d..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dbgmcu.h +++ /dev/null @@ -1,64 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_dbgmcu.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * DBGMCU firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_DBGMCU_H -#define __CH32F10x_DBGMCU_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - - -#define DBGMCU_SLEEP ((uint32_t)0x00000001) -#define DBGMCU_STOP ((uint32_t)0x00000002) -#define DBGMCU_STANDBY ((uint32_t)0x00000004) -#define DBGMCU_IWDG_STOP ((uint32_t)0x00000100) -#define DBGMCU_WWDG_STOP ((uint32_t)0x00000200) -#define DBGMCU_TIM1_STOP ((uint32_t)0x00000400) -#define DBGMCU_TIM2_STOP ((uint32_t)0x00000800) -#define DBGMCU_TIM3_STOP ((uint32_t)0x00001000) -#define DBGMCU_TIM4_STOP ((uint32_t)0x00002000) -#define DBGMCU_CAN1_STOP ((uint32_t)0x00004000) -#define DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00008000) -#define DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00010000) -#define DBGMCU_TIM8_STOP ((uint32_t)0x00020000) -#define DBGMCU_TIM5_STOP ((uint32_t)0x00040000) -#define DBGMCU_TIM6_STOP ((uint32_t)0x00080000) -#define DBGMCU_TIM7_STOP ((uint32_t)0x00100000) -#define DBGMCU_CAN2_STOP ((uint32_t)0x00200000) -#define DBGMCU_TIM15_STOP ((uint32_t)0x00400000) -#define DBGMCU_TIM16_STOP ((uint32_t)0x00800000) -#define DBGMCU_TIM17_STOP ((uint32_t)0x01000000) -#define DBGMCU_TIM12_STOP ((uint32_t)0x02000000) -#define DBGMCU_TIM13_STOP ((uint32_t)0x04000000) -#define DBGMCU_TIM14_STOP ((uint32_t)0x08000000) -#define DBGMCU_TIM9_STOP ((uint32_t)0x10000000) -#define DBGMCU_TIM10_STOP ((uint32_t)0x20000000) -#define DBGMCU_TIM11_STOP ((uint32_t)0x40000000) - - -uint32_t DBGMCU_GetREVID(void); -uint32_t DBGMCU_GetDEVID(void); -void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_DBGMCU_H */ - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dma.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dma.h deleted file mode 100644 index e44504d..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_dma.h +++ /dev/null @@ -1,218 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_dma.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * DMA firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_DMA_H -#define __CH32F10x_DMA_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* DMA Init structure definition */ -typedef struct -{ - uint32_t DMA_PeripheralBaseAddr; /* Specifies the peripheral base address for DMAy Channelx. */ - - uint32_t DMA_MemoryBaseAddr; /* Specifies the memory base address for DMAy Channelx. */ - - uint32_t DMA_DIR; /* Specifies if the peripheral is the source or destination. - This parameter can be a value of @ref DMA_data_transfer_direction */ - - uint32_t DMA_BufferSize; /* Specifies the buffer size, in data unit, of the specified Channel. - The data unit is equal to the configuration set in DMA_PeripheralDataSize - or DMA_MemoryDataSize members depending in the transfer direction. */ - - uint32_t DMA_PeripheralInc; /* Specifies whether the Peripheral address register is incremented or not. - This parameter can be a value of @ref DMA_peripheral_incremented_mode */ - - uint32_t DMA_MemoryInc; /* Specifies whether the memory address register is incremented or not. - This parameter can be a value of @ref DMA_memory_incremented_mode */ - - uint32_t DMA_PeripheralDataSize; /* Specifies the Peripheral data width. - This parameter can be a value of @ref DMA_peripheral_data_size */ - - uint32_t DMA_MemoryDataSize; /* Specifies the Memory data width. - This parameter can be a value of @ref DMA_memory_data_size */ - - uint32_t DMA_Mode; /* Specifies the operation mode of the DMAy Channelx. - This parameter can be a value of @ref DMA_circular_normal_mode. - @note: The circular buffer mode cannot be used if the memory-to-memory - data transfer is configured on the selected Channel */ - - uint32_t DMA_Priority; /* Specifies the software priority for the DMAy Channelx. - This parameter can be a value of @ref DMA_priority_level */ - - uint32_t DMA_M2M; /* Specifies if the DMAy Channelx will be used in memory-to-memory transfer. - This parameter can be a value of @ref DMA_memory_to_memory */ -}DMA_InitTypeDef; - -/* DMA_data_transfer_direction */ -#define DMA_DIR_PeripheralDST ((uint32_t)0x00000010) -#define DMA_DIR_PeripheralSRC ((uint32_t)0x00000000) - -/* DMA_peripheral_incremented_mode */ -#define DMA_PeripheralInc_Enable ((uint32_t)0x00000040) -#define DMA_PeripheralInc_Disable ((uint32_t)0x00000000) - -/* DMA_memory_incremented_mode */ -#define DMA_MemoryInc_Enable ((uint32_t)0x00000080) -#define DMA_MemoryInc_Disable ((uint32_t)0x00000000) - -/* DMA_peripheral_data_size */ -#define DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000) -#define DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000100) -#define DMA_PeripheralDataSize_Word ((uint32_t)0x00000200) - -/* DMA_memory_data_size */ -#define DMA_MemoryDataSize_Byte ((uint32_t)0x00000000) -#define DMA_MemoryDataSize_HalfWord ((uint32_t)0x00000400) -#define DMA_MemoryDataSize_Word ((uint32_t)0x00000800) - -/* DMA_circular_normal_mode */ -#define DMA_Mode_Circular ((uint32_t)0x00000020) -#define DMA_Mode_Normal ((uint32_t)0x00000000) - -/* DMA_priority_level */ -#define DMA_Priority_VeryHigh ((uint32_t)0x00003000) -#define DMA_Priority_High ((uint32_t)0x00002000) -#define DMA_Priority_Medium ((uint32_t)0x00001000) -#define DMA_Priority_Low ((uint32_t)0x00000000) - -/* DMA_memory_to_memory */ -#define DMA_M2M_Enable ((uint32_t)0x00004000) -#define DMA_M2M_Disable ((uint32_t)0x00000000) - -/* DMA_interrupts_definition */ -#define DMA_IT_TC ((uint32_t)0x00000002) -#define DMA_IT_HT ((uint32_t)0x00000004) -#define DMA_IT_TE ((uint32_t)0x00000008) - -#define DMA1_IT_GL1 ((uint32_t)0x00000001) -#define DMA1_IT_TC1 ((uint32_t)0x00000002) -#define DMA1_IT_HT1 ((uint32_t)0x00000004) -#define DMA1_IT_TE1 ((uint32_t)0x00000008) -#define DMA1_IT_GL2 ((uint32_t)0x00000010) -#define DMA1_IT_TC2 ((uint32_t)0x00000020) -#define DMA1_IT_HT2 ((uint32_t)0x00000040) -#define DMA1_IT_TE2 ((uint32_t)0x00000080) -#define DMA1_IT_GL3 ((uint32_t)0x00000100) -#define DMA1_IT_TC3 ((uint32_t)0x00000200) -#define DMA1_IT_HT3 ((uint32_t)0x00000400) -#define DMA1_IT_TE3 ((uint32_t)0x00000800) -#define DMA1_IT_GL4 ((uint32_t)0x00001000) -#define DMA1_IT_TC4 ((uint32_t)0x00002000) -#define DMA1_IT_HT4 ((uint32_t)0x00004000) -#define DMA1_IT_TE4 ((uint32_t)0x00008000) -#define DMA1_IT_GL5 ((uint32_t)0x00010000) -#define DMA1_IT_TC5 ((uint32_t)0x00020000) -#define DMA1_IT_HT5 ((uint32_t)0x00040000) -#define DMA1_IT_TE5 ((uint32_t)0x00080000) -#define DMA1_IT_GL6 ((uint32_t)0x00100000) -#define DMA1_IT_TC6 ((uint32_t)0x00200000) -#define DMA1_IT_HT6 ((uint32_t)0x00400000) -#define DMA1_IT_TE6 ((uint32_t)0x00800000) -#define DMA1_IT_GL7 ((uint32_t)0x01000000) -#define DMA1_IT_TC7 ((uint32_t)0x02000000) -#define DMA1_IT_HT7 ((uint32_t)0x04000000) -#define DMA1_IT_TE7 ((uint32_t)0x08000000) - -#define DMA2_IT_GL1 ((uint32_t)0x10000001) -#define DMA2_IT_TC1 ((uint32_t)0x10000002) -#define DMA2_IT_HT1 ((uint32_t)0x10000004) -#define DMA2_IT_TE1 ((uint32_t)0x10000008) -#define DMA2_IT_GL2 ((uint32_t)0x10000010) -#define DMA2_IT_TC2 ((uint32_t)0x10000020) -#define DMA2_IT_HT2 ((uint32_t)0x10000040) -#define DMA2_IT_TE2 ((uint32_t)0x10000080) -#define DMA2_IT_GL3 ((uint32_t)0x10000100) -#define DMA2_IT_TC3 ((uint32_t)0x10000200) -#define DMA2_IT_HT3 ((uint32_t)0x10000400) -#define DMA2_IT_TE3 ((uint32_t)0x10000800) -#define DMA2_IT_GL4 ((uint32_t)0x10001000) -#define DMA2_IT_TC4 ((uint32_t)0x10002000) -#define DMA2_IT_HT4 ((uint32_t)0x10004000) -#define DMA2_IT_TE4 ((uint32_t)0x10008000) -#define DMA2_IT_GL5 ((uint32_t)0x10010000) -#define DMA2_IT_TC5 ((uint32_t)0x10020000) -#define DMA2_IT_HT5 ((uint32_t)0x10040000) -#define DMA2_IT_TE5 ((uint32_t)0x10080000) - -/* DMA_flags_definition */ -#define DMA1_FLAG_GL1 ((uint32_t)0x00000001) -#define DMA1_FLAG_TC1 ((uint32_t)0x00000002) -#define DMA1_FLAG_HT1 ((uint32_t)0x00000004) -#define DMA1_FLAG_TE1 ((uint32_t)0x00000008) -#define DMA1_FLAG_GL2 ((uint32_t)0x00000010) -#define DMA1_FLAG_TC2 ((uint32_t)0x00000020) -#define DMA1_FLAG_HT2 ((uint32_t)0x00000040) -#define DMA1_FLAG_TE2 ((uint32_t)0x00000080) -#define DMA1_FLAG_GL3 ((uint32_t)0x00000100) -#define DMA1_FLAG_TC3 ((uint32_t)0x00000200) -#define DMA1_FLAG_HT3 ((uint32_t)0x00000400) -#define DMA1_FLAG_TE3 ((uint32_t)0x00000800) -#define DMA1_FLAG_GL4 ((uint32_t)0x00001000) -#define DMA1_FLAG_TC4 ((uint32_t)0x00002000) -#define DMA1_FLAG_HT4 ((uint32_t)0x00004000) -#define DMA1_FLAG_TE4 ((uint32_t)0x00008000) -#define DMA1_FLAG_GL5 ((uint32_t)0x00010000) -#define DMA1_FLAG_TC5 ((uint32_t)0x00020000) -#define DMA1_FLAG_HT5 ((uint32_t)0x00040000) -#define DMA1_FLAG_TE5 ((uint32_t)0x00080000) -#define DMA1_FLAG_GL6 ((uint32_t)0x00100000) -#define DMA1_FLAG_TC6 ((uint32_t)0x00200000) -#define DMA1_FLAG_HT6 ((uint32_t)0x00400000) -#define DMA1_FLAG_TE6 ((uint32_t)0x00800000) -#define DMA1_FLAG_GL7 ((uint32_t)0x01000000) -#define DMA1_FLAG_TC7 ((uint32_t)0x02000000) -#define DMA1_FLAG_HT7 ((uint32_t)0x04000000) -#define DMA1_FLAG_TE7 ((uint32_t)0x08000000) - -#define DMA2_FLAG_GL1 ((uint32_t)0x10000001) -#define DMA2_FLAG_TC1 ((uint32_t)0x10000002) -#define DMA2_FLAG_HT1 ((uint32_t)0x10000004) -#define DMA2_FLAG_TE1 ((uint32_t)0x10000008) -#define DMA2_FLAG_GL2 ((uint32_t)0x10000010) -#define DMA2_FLAG_TC2 ((uint32_t)0x10000020) -#define DMA2_FLAG_HT2 ((uint32_t)0x10000040) -#define DMA2_FLAG_TE2 ((uint32_t)0x10000080) -#define DMA2_FLAG_GL3 ((uint32_t)0x10000100) -#define DMA2_FLAG_TC3 ((uint32_t)0x10000200) -#define DMA2_FLAG_HT3 ((uint32_t)0x10000400) -#define DMA2_FLAG_TE3 ((uint32_t)0x10000800) -#define DMA2_FLAG_GL4 ((uint32_t)0x10001000) -#define DMA2_FLAG_TC4 ((uint32_t)0x10002000) -#define DMA2_FLAG_HT4 ((uint32_t)0x10004000) -#define DMA2_FLAG_TE4 ((uint32_t)0x10008000) -#define DMA2_FLAG_GL5 ((uint32_t)0x10010000) -#define DMA2_FLAG_TC5 ((uint32_t)0x10020000) -#define DMA2_FLAG_HT5 ((uint32_t)0x10040000) -#define DMA2_FLAG_TE5 ((uint32_t)0x10080000) - - -void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx); -void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct); -void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct); -void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState); -void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState); -void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); -uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx); -FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG); -void DMA_ClearFlag(uint32_t DMAy_FLAG); -ITStatus DMA_GetITStatus(uint32_t DMAy_IT); -void DMA_ClearITPendingBit(uint32_t DMAy_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32F10x_DMA_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_exti.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_exti.h deleted file mode 100644 index 607fd29..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_exti.h +++ /dev/null @@ -1,90 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_exti.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * EXTI firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_EXTI_H -#define __CH32F10x_EXTI_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* EXTI mode enumeration */ -typedef enum -{ - EXTI_Mode_Interrupt = 0x00, - EXTI_Mode_Event = 0x04 -}EXTIMode_TypeDef; - -/* EXTI Trigger enumeration */ -typedef enum -{ - EXTI_Trigger_Rising = 0x08, - EXTI_Trigger_Falling = 0x0C, - EXTI_Trigger_Rising_Falling = 0x10 -}EXTITrigger_TypeDef; - -/* EXTI Init Structure definition */ -typedef struct -{ - uint32_t EXTI_Line; /* Specifies the EXTI lines to be enabled or disabled. - This parameter can be any combination of @ref EXTI_Lines */ - - EXTIMode_TypeDef EXTI_Mode; /* Specifies the mode for the EXTI lines. - This parameter can be a value of @ref EXTIMode_TypeDef */ - - EXTITrigger_TypeDef EXTI_Trigger; /* Specifies the trigger signal active edge for the EXTI lines. - This parameter can be a value of @ref EXTIMode_TypeDef */ - - FunctionalState EXTI_LineCmd; /* Specifies the new state of the selected EXTI lines. - This parameter can be set either to ENABLE or DISABLE */ -}EXTI_InitTypeDef; - - -/* EXTI_Lines */ -#define EXTI_Line0 ((uint32_t)0x00001) /* External interrupt line 0 */ -#define EXTI_Line1 ((uint32_t)0x00002) /* External interrupt line 1 */ -#define EXTI_Line2 ((uint32_t)0x00004) /* External interrupt line 2 */ -#define EXTI_Line3 ((uint32_t)0x00008) /* External interrupt line 3 */ -#define EXTI_Line4 ((uint32_t)0x00010) /* External interrupt line 4 */ -#define EXTI_Line5 ((uint32_t)0x00020) /* External interrupt line 5 */ -#define EXTI_Line6 ((uint32_t)0x00040) /* External interrupt line 6 */ -#define EXTI_Line7 ((uint32_t)0x00080) /* External interrupt line 7 */ -#define EXTI_Line8 ((uint32_t)0x00100) /* External interrupt line 8 */ -#define EXTI_Line9 ((uint32_t)0x00200) /* External interrupt line 9 */ -#define EXTI_Line10 ((uint32_t)0x00400) /* External interrupt line 10 */ -#define EXTI_Line11 ((uint32_t)0x00800) /* External interrupt line 11 */ -#define EXTI_Line12 ((uint32_t)0x01000) /* External interrupt line 12 */ -#define EXTI_Line13 ((uint32_t)0x02000) /* External interrupt line 13 */ -#define EXTI_Line14 ((uint32_t)0x04000) /* External interrupt line 14 */ -#define EXTI_Line15 ((uint32_t)0x08000) /* External interrupt line 15 */ -#define EXTI_Line16 ((uint32_t)0x10000) /* External interrupt line 16 Connected to the PVD Output */ -#define EXTI_Line17 ((uint32_t)0x20000) /* External interrupt line 17 Connected to the RTC Alarm event */ -#define EXTI_Line18 ((uint32_t)0x40000) /* External interrupt line 18 Connected to the USB Device/USB OTG FS - Wakeup from suspend event */ -#define EXTI_Line19 ((uint32_t)0x80000) /* External interrupt line 19 Connected to the USBHD Wakeup event */ - - -void EXTI_DeInit(void); -void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); -void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct); -void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); -FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line); -void EXTI_ClearFlag(uint32_t EXTI_Line); -ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); -void EXTI_ClearITPendingBit(uint32_t EXTI_Line); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_EXTI_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_flash.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_flash.h deleted file mode 100644 index 889c113..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_flash.h +++ /dev/null @@ -1,159 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_flash.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the FLASH - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_FLASH_H -#define __CH32F10x_FLASH_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* FLASH Status */ -typedef enum -{ - FLASH_BUSY = 1, - FLASH_ERROR_PG, - FLASH_ERROR_WRP, - FLASH_COMPLETE, - FLASH_TIMEOUT -}FLASH_Status; - - -/* Flash_Latency */ -#define FLASH_Latency_0 ((uint32_t)0x00000000) /* FLASH Zero Latency cycle */ -#define FLASH_Latency_1 ((uint32_t)0x00000001) /* FLASH One Latency cycle */ -#define FLASH_Latency_2 ((uint32_t)0x00000002) /* FLASH Two Latency cycles */ - -/* Half_Cycle_Enable_Disable */ -#define FLASH_HalfCycleAccess_Enable ((uint32_t)0x00000008) /* FLASH Half Cycle Enable */ -#define FLASH_HalfCycleAccess_Disable ((uint32_t)0x00000000) /* FLASH Half Cycle Disable */ - -/* Prefetch_Buffer_Enable_Disable */ -#define FLASH_PrefetchBuffer_Enable ((uint32_t)0x00000010) /* FLASH Prefetch Buffer Enable */ -#define FLASH_PrefetchBuffer_Disable ((uint32_t)0x00000000) /* FLASH Prefetch Buffer Disable */ - -/* Values to be used with CH32F10x Low and Medium density devices */ -#define FLASH_WRProt_Pages0to3 ((uint32_t)0x00000001) /* CH32 Low and Medium density devices: Write protection of page 0 to 3 */ -#define FLASH_WRProt_Pages4to7 ((uint32_t)0x00000002) /* CH32 Low and Medium density devices: Write protection of page 4 to 7 */ -#define FLASH_WRProt_Pages8to11 ((uint32_t)0x00000004) /* CH32 Low and Medium density devices: Write protection of page 8 to 11 */ -#define FLASH_WRProt_Pages12to15 ((uint32_t)0x00000008) /* CH32 Low and Medium density devices: Write protection of page 12 to 15 */ -#define FLASH_WRProt_Pages16to19 ((uint32_t)0x00000010) /* CH32 Low and Medium density devices: Write protection of page 16 to 19 */ -#define FLASH_WRProt_Pages20to23 ((uint32_t)0x00000020) /* CH32 Low and Medium density devices: Write protection of page 20 to 23 */ -#define FLASH_WRProt_Pages24to27 ((uint32_t)0x00000040) /* CH32 Low and Medium density devices: Write protection of page 24 to 27 */ -#define FLASH_WRProt_Pages28to31 ((uint32_t)0x00000080) /* CH32 Low and Medium density devices: Write protection of page 28 to 31 */ - -/* Values to be used with CH32F10x Medium-density devices */ -#define FLASH_WRProt_Pages32to35 ((uint32_t)0x00000100) /* CH32 Medium-density devices: Write protection of page 32 to 35 */ -#define FLASH_WRProt_Pages36to39 ((uint32_t)0x00000200) /* CH32 Medium-density devices: Write protection of page 36 to 39 */ -#define FLASH_WRProt_Pages40to43 ((uint32_t)0x00000400) /* CH32 Medium-density devices: Write protection of page 40 to 43 */ -#define FLASH_WRProt_Pages44to47 ((uint32_t)0x00000800) /* CH32 Medium-density devices: Write protection of page 44 to 47 */ -#define FLASH_WRProt_Pages48to51 ((uint32_t)0x00001000) /* CH32 Medium-density devices: Write protection of page 48 to 51 */ -#define FLASH_WRProt_Pages52to55 ((uint32_t)0x00002000) /* CH32 Medium-density devices: Write protection of page 52 to 55 */ -#define FLASH_WRProt_Pages56to59 ((uint32_t)0x00004000) /* CH32 Medium-density devices: Write protection of page 56 to 59 */ -#define FLASH_WRProt_Pages60to63 ((uint32_t)0x00008000) /* CH32 Medium-density devices: Write protection of page 60 to 63 */ -#define FLASH_WRProt_Pages64to67 ((uint32_t)0x00010000) /* CH32 Medium-density devices: Write protection of page 64 to 67 */ -#define FLASH_WRProt_Pages68to71 ((uint32_t)0x00020000) /* CH32 Medium-density devices: Write protection of page 68 to 71 */ -#define FLASH_WRProt_Pages72to75 ((uint32_t)0x00040000) /* CH32 Medium-density devices: Write protection of page 72 to 75 */ -#define FLASH_WRProt_Pages76to79 ((uint32_t)0x00080000) /* CH32 Medium-density devices: Write protection of page 76 to 79 */ -#define FLASH_WRProt_Pages80to83 ((uint32_t)0x00100000) /* CH32 Medium-density devices: Write protection of page 80 to 83 */ -#define FLASH_WRProt_Pages84to87 ((uint32_t)0x00200000) /* CH32 Medium-density devices: Write protection of page 84 to 87 */ -#define FLASH_WRProt_Pages88to91 ((uint32_t)0x00400000) /* CH32 Medium-density devices: Write protection of page 88 to 91 */ -#define FLASH_WRProt_Pages92to95 ((uint32_t)0x00800000) /* CH32 Medium-density devices: Write protection of page 92 to 95 */ -#define FLASH_WRProt_Pages96to99 ((uint32_t)0x01000000) /* CH32 Medium-density devices: Write protection of page 96 to 99 */ -#define FLASH_WRProt_Pages100to103 ((uint32_t)0x02000000) /* CH32 Medium-density devices: Write protection of page 100 to 103 */ -#define FLASH_WRProt_Pages104to107 ((uint32_t)0x04000000) /* CH32 Medium-density devices: Write protection of page 104 to 107 */ -#define FLASH_WRProt_Pages108to111 ((uint32_t)0x08000000) /* CH32 Medium-density devices: Write protection of page 108 to 111 */ -#define FLASH_WRProt_Pages112to115 ((uint32_t)0x10000000) /* CH32 Medium-density devices: Write protection of page 112 to 115 */ -#define FLASH_WRProt_Pages116to119 ((uint32_t)0x20000000) /* CH32 Medium-density devices: Write protection of page 115 to 119 */ -#define FLASH_WRProt_Pages120to123 ((uint32_t)0x40000000) /* CH32 Medium-density devices: Write protection of page 120 to 123 */ -#define FLASH_WRProt_Pages124to127 ((uint32_t)0x80000000) /* CH32 Medium-density devices: Write protection of page 124 to 127 */ - -#define FLASH_WRProt_Pages62to255 ((uint32_t)0x80000000) /* CH32 Medium-density devices: Write protection of page 62 to 255 */ - -#define FLASH_WRProt_AllPages ((uint32_t)0xFFFFFFFF) /* Write protection of all Pages */ - -/* Option_Bytes_IWatchdog */ -#define OB_IWDG_SW ((uint16_t)0x0001) /* Software IWDG selected */ -#define OB_IWDG_HW ((uint16_t)0x0000) /* Hardware IWDG selected */ - -/* Option_Bytes_nRST_STOP */ -#define OB_STOP_NoRST ((uint16_t)0x0002) /* No reset generated when entering in STOP */ -#define OB_STOP_RST ((uint16_t)0x0000) /* Reset generated when entering in STOP */ - -/* Option_Bytes_nRST_STDBY */ -#define OB_STDBY_NoRST ((uint16_t)0x0004) /* No reset generated when entering in STANDBY */ -#define OB_STDBY_RST ((uint16_t)0x0000) /* Reset generated when entering in STANDBY */ - -/* FLASH_Interrupts */ -#define FLASH_IT_ERROR ((uint32_t)0x00000400) /* FPEC error interrupt source */ -#define FLASH_IT_EOP ((uint32_t)0x00001000) /* End of FLASH Operation Interrupt source */ -#define FLASH_IT_BANK1_ERROR FLASH_IT_ERROR /* FPEC BANK1 error interrupt source */ -#define FLASH_IT_BANK1_EOP FLASH_IT_EOP /* End of FLASH BANK1 Operation Interrupt source */ - -/* FLASH_Flags */ -#define FLASH_FLAG_BSY ((uint32_t)0x00000001) /* FLASH Busy flag */ -#define FLASH_FLAG_EOP ((uint32_t)0x00000020) /* FLASH End of Operation flag */ -#define FLASH_FLAG_PGERR ((uint32_t)0x00000004) /* FLASH Program error flag */ -#define FLASH_FLAG_WRPRTERR ((uint32_t)0x00000010) /* FLASH Write protected error flag */ -#define FLASH_FLAG_OPTERR ((uint32_t)0x00000001) /* FLASH Option Byte error flag */ - -#define FLASH_FLAG_BANK1_BSY FLASH_FLAG_BSY /* FLASH BANK1 Busy flag*/ -#define FLASH_FLAG_BANK1_EOP FLASH_FLAG_EOP /* FLASH BANK1 End of Operation flag */ -#define FLASH_FLAG_BANK1_PGERR FLASH_FLAG_PGERR /* FLASH BANK1 Program error flag */ -#define FLASH_FLAG_BANK1_WRPRTERR FLASH_FLAG_WRPRTERR /* FLASH BANK1 Write protected error flag */ - - -/*Functions used for all CH32F10x devices*/ -void FLASH_SetLatency(uint32_t FLASH_Latency); -void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess); -void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer); -void FLASH_Unlock(void); -void FLASH_Lock(void); -FLASH_Status FLASH_ErasePage(uint32_t Page_Address); -FLASH_Status FLASH_EraseAllPages(void); -FLASH_Status FLASH_EraseOptionBytes(void); -FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); -FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data); -FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data); -FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages); -FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState); -FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY); -uint32_t FLASH_GetUserOptionByte(void); -uint32_t FLASH_GetWriteProtectionOptionByte(void); -FlagStatus FLASH_GetReadOutProtectionStatus(void); -FlagStatus FLASH_GetPrefetchBufferStatus(void); -void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState); -FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG); -void FLASH_ClearFlag(uint32_t FLASH_FLAG); -FLASH_Status FLASH_GetStatus(void); -FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout); -void FLASH_Unlock_Fast(void); -void FLASH_Lock_Fast(void); -void FLASH_BufReset(void); -void FLASH_BufLoad(uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3); -void FLASH_ErasePage_Fast(uint32_t Page_Address); -void FLASH_ProgramPage_Fast(uint32_t Page_Address); - -/* New function used for all CH32F10x devices */ -void FLASH_UnlockBank1(void); -void FLASH_LockBank1(void); -FLASH_Status FLASH_EraseAllBank1Pages(void); -FLASH_Status FLASH_GetBank1Status(void); -FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout); - -#ifdef __cplusplus -} -#endif - - -#endif /* __CH32F10x_FLASH_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_gpio.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_gpio.h deleted file mode 100644 index 1d2c997..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_gpio.h +++ /dev/null @@ -1,167 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_gpio.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * GPIO firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_GPIO_H -#define __CH32F10x_GPIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* Output Maximum frequency selection */ -typedef enum -{ - GPIO_Speed_10MHz = 1, - GPIO_Speed_2MHz, - GPIO_Speed_50MHz -}GPIOSpeed_TypeDef; - -/* Configuration Mode enumeration */ -typedef enum -{ GPIO_Mode_AIN = 0x0, - GPIO_Mode_IN_FLOATING = 0x04, - GPIO_Mode_IPD = 0x28, - GPIO_Mode_IPU = 0x48, - GPIO_Mode_Out_OD = 0x14, - GPIO_Mode_Out_PP = 0x10, - GPIO_Mode_AF_OD = 0x1C, - GPIO_Mode_AF_PP = 0x18 -}GPIOMode_TypeDef; - -/* GPIO Init structure definition */ -typedef struct -{ - uint16_t GPIO_Pin; /* Specifies the GPIO pins to be configured. - This parameter can be any value of @ref GPIO_pins_define */ - - GPIOSpeed_TypeDef GPIO_Speed; /* Specifies the speed for the selected pins. - This parameter can be a value of @ref GPIOSpeed_TypeDef */ - - GPIOMode_TypeDef GPIO_Mode; /* Specifies the operating mode for the selected pins. - This parameter can be a value of @ref GPIOMode_TypeDef */ -}GPIO_InitTypeDef; - -/* Bit_SET and Bit_RESET enumeration */ -typedef enum -{ - Bit_RESET = 0, - Bit_SET -}BitAction; - -/* 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 */ - -/* GPIO_Remap_define */ -#define GPIO_Remap_SPI1 ((uint32_t)0x00000001) /* SPI1 Alternate Function mapping */ -#define GPIO_Remap_I2C1 ((uint32_t)0x00000002) /* I2C1 Alternate Function mapping */ -#define GPIO_Remap_USART1 ((uint32_t)0x00000004) /* USART1 Alternate Function mapping */ -#define GPIO_Remap_USART2 ((uint32_t)0x00000008) /* USART2 Alternate Function mapping */ -#define GPIO_PartialRemap_USART3 ((uint32_t)0x00140010) /* USART3 Partial Alternate Function mapping */ -#define GPIO_FullRemap_USART3 ((uint32_t)0x00140030) /* USART3 Full Alternate Function mapping */ -#define GPIO_PartialRemap_TIM1 ((uint32_t)0x00160040) /* TIM1 Partial Alternate Function mapping */ -#define GPIO_FullRemap_TIM1 ((uint32_t)0x001600C0) /* TIM1 Full Alternate Function mapping */ -#define GPIO_PartialRemap1_TIM2 ((uint32_t)0x00180100) /* TIM2 Partial1 Alternate Function mapping */ -#define GPIO_PartialRemap2_TIM2 ((uint32_t)0x00180200) /* TIM2 Partial2 Alternate Function mapping */ -#define GPIO_FullRemap_TIM2 ((uint32_t)0x00180300) /* TIM2 Full Alternate Function mapping */ -#define GPIO_PartialRemap_TIM3 ((uint32_t)0x001A0800) /* TIM3 Partial Alternate Function mapping */ -#define GPIO_FullRemap_TIM3 ((uint32_t)0x001A0C00) /* TIM3 Full Alternate Function mapping */ -#define GPIO_Remap_TIM4 ((uint32_t)0x00001000) /* TIM4 Alternate Function mapping */ -#define GPIO_Remap1_CAN1 ((uint32_t)0x001D4000) /* CAN1 Alternate Function mapping */ -#define GPIO_Remap2_CAN1 ((uint32_t)0x001D6000) /* CAN1 Alternate Function mapping */ -#define GPIO_Remap_PD01 ((uint32_t)0x00008000) /* PD01 Alternate Function mapping */ -#define GPIO_Remap_ADC1_ETRGINJ ((uint32_t)0x00200002) /* ADC1 External Trigger Injected Conversion remapping */ -#define GPIO_Remap_ADC1_ETRGREG ((uint32_t)0x00200004) /* ADC1 External Trigger Regular Conversion remapping */ -#define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /* Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */ -#define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /* JTAG-DP Disabled and SW-DP Enabled */ -#define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /* Full SWJ Disabled (JTAG-DP + SW-DP) */ -#define GPIO_Remap_TIM2ITR1_PTP_SOF ((uint32_t)0x00202000) /* Ethernet PTP output or USB OTG SOF (Start of Frame) connected - to TIM2 Internal Trigger 1 for calibration - (only for Connectivity line devices) */ -#define GPIO_Remap_TIM1_DMA ((uint32_t)0x80000010) /* TIM1 DMA requests mapping (only for Value line devices) */ -#define GPIO_Remap_TIM67_DAC_DMA ((uint32_t)0x80000800) /* TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices) */ -#define GPIO_Remap_MISC ((uint32_t)0x80002000) /* Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping, - only for High density Value line devices) */ - -/* GPIO_Port_Sources */ -#define GPIO_PortSourceGPIOA ((uint8_t)0x00) -#define GPIO_PortSourceGPIOB ((uint8_t)0x01) -#define GPIO_PortSourceGPIOC ((uint8_t)0x02) -#define GPIO_PortSourceGPIOD ((uint8_t)0x03) -#define GPIO_PortSourceGPIOE ((uint8_t)0x04) -#define GPIO_PortSourceGPIOF ((uint8_t)0x05) -#define GPIO_PortSourceGPIOG ((uint8_t)0x06) - -/* GPIO_Pin_sources */ -#define GPIO_PinSource0 ((uint8_t)0x00) -#define GPIO_PinSource1 ((uint8_t)0x01) -#define GPIO_PinSource2 ((uint8_t)0x02) -#define GPIO_PinSource3 ((uint8_t)0x03) -#define GPIO_PinSource4 ((uint8_t)0x04) -#define GPIO_PinSource5 ((uint8_t)0x05) -#define GPIO_PinSource6 ((uint8_t)0x06) -#define GPIO_PinSource7 ((uint8_t)0x07) -#define GPIO_PinSource8 ((uint8_t)0x08) -#define GPIO_PinSource9 ((uint8_t)0x09) -#define GPIO_PinSource10 ((uint8_t)0x0A) -#define GPIO_PinSource11 ((uint8_t)0x0B) -#define GPIO_PinSource12 ((uint8_t)0x0C) -#define GPIO_PinSource13 ((uint8_t)0x0D) -#define GPIO_PinSource14 ((uint8_t)0x0E) -#define GPIO_PinSource15 ((uint8_t)0x0F) - - -void GPIO_DeInit(GPIO_TypeDef* GPIOx); -void GPIO_AFIODeInit(void); -void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); -void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); -uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); -uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); -uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); -uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); -void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); -void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); -void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); -void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); -void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); -void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); -void GPIO_EventOutputCmd(FunctionalState NewState); -void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); -void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_GPIO_H */ - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_i2c.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_i2c.h deleted file mode 100644 index 568ff7a..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_i2c.h +++ /dev/null @@ -1,210 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_i2c.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * I2C firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_I2C_H -#define __CH32F10x_I2C_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* I2C Init structure definition */ -typedef struct -{ - uint32_t I2C_ClockSpeed; /* Specifies the clock frequency. - This parameter must be set to a value lower than 400kHz */ - - uint16_t I2C_Mode; /* Specifies the I2C mode. - This parameter can be a value of @ref I2C_mode */ - - uint16_t I2C_DutyCycle; /* Specifies the I2C fast mode duty cycle. - This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */ - - uint16_t I2C_OwnAddress1; /* Specifies the first device own address. - This parameter can be a 7-bit or 10-bit address. */ - - uint16_t I2C_Ack; /* Enables or disables the acknowledgement. - This parameter can be a value of @ref I2C_acknowledgement */ - - uint16_t I2C_AcknowledgedAddress; /* Specifies if 7-bit or 10-bit address is acknowledged. - This parameter can be a value of @ref I2C_acknowledged_address */ -}I2C_InitTypeDef; - -/* I2C_mode */ -#define I2C_Mode_I2C ((uint16_t)0x0000) -#define I2C_Mode_SMBusDevice ((uint16_t)0x0002) -#define I2C_Mode_SMBusHost ((uint16_t)0x000A) - -/* I2C_duty_cycle_in_fast_mode */ -#define I2C_DutyCycle_16_9 ((uint16_t)0x4000) /* I2C fast mode Tlow/Thigh = 16/9 */ -#define I2C_DutyCycle_2 ((uint16_t)0xBFFF) /* I2C fast mode Tlow/Thigh = 2 */ - -/* I2C_acknowledgement */ -#define I2C_Ack_Enable ((uint16_t)0x0400) -#define I2C_Ack_Disable ((uint16_t)0x0000) - -/* I2C_transfer_direction */ -#define I2C_Direction_Transmitter ((uint8_t)0x00) -#define I2C_Direction_Receiver ((uint8_t)0x01) - -/* I2C_acknowledged_address */ -#define I2C_AcknowledgedAddress_7bit ((uint16_t)0x4000) -#define I2C_AcknowledgedAddress_10bit ((uint16_t)0xC000) - -/* I2C_registers */ -#define I2C_Register_CTLR1 ((uint8_t)0x00) -#define I2C_Register_CTLR2 ((uint8_t)0x04) -#define I2C_Register_OADDR1 ((uint8_t)0x08) -#define I2C_Register_OADDR2 ((uint8_t)0x0C) -#define I2C_Register_DATAR ((uint8_t)0x10) -#define I2C_Register_STAR1 ((uint8_t)0x14) -#define I2C_Register_STAR2 ((uint8_t)0x18) -#define I2C_Register_CKCFGR ((uint8_t)0x1C) -#define I2C_Register_RTR ((uint8_t)0x20) - -/* I2C_SMBus_alert_pin_level */ -#define I2C_SMBusAlert_Low ((uint16_t)0x2000) -#define I2C_SMBusAlert_High ((uint16_t)0xDFFF) - -/* I2C_PEC_position */ -#define I2C_PECPosition_Next ((uint16_t)0x0800) -#define I2C_PECPosition_Current ((uint16_t)0xF7FF) - -/* I2C_NACK_position */ -#define I2C_NACKPosition_Next ((uint16_t)0x0800) -#define I2C_NACKPosition_Current ((uint16_t)0xF7FF) - -/* I2C_interrupts_definition */ -#define I2C_IT_BUF ((uint16_t)0x0400) -#define I2C_IT_EVT ((uint16_t)0x0200) -#define I2C_IT_ERR ((uint16_t)0x0100) - -/* I2C_interrupts_definition */ -#define I2C_IT_SMBALERT ((uint32_t)0x01008000) -#define I2C_IT_TIMEOUT ((uint32_t)0x01004000) -#define I2C_IT_PECERR ((uint32_t)0x01001000) -#define I2C_IT_OVR ((uint32_t)0x01000800) -#define I2C_IT_AF ((uint32_t)0x01000400) -#define I2C_IT_ARLO ((uint32_t)0x01000200) -#define I2C_IT_BERR ((uint32_t)0x01000100) -#define I2C_IT_TXE ((uint32_t)0x06000080) -#define I2C_IT_RXNE ((uint32_t)0x06000040) -#define I2C_IT_STOPF ((uint32_t)0x02000010) -#define I2C_IT_ADD10 ((uint32_t)0x02000008) -#define I2C_IT_BTF ((uint32_t)0x02000004) -#define I2C_IT_ADDR ((uint32_t)0x02000002) -#define I2C_IT_SB ((uint32_t)0x02000001) - -/* SR2 register flags */ -#define I2C_FLAG_DUALF ((uint32_t)0x00800000) -#define I2C_FLAG_SMBHOST ((uint32_t)0x00400000) -#define I2C_FLAG_SMBDEFAULT ((uint32_t)0x00200000) -#define I2C_FLAG_GENCALL ((uint32_t)0x00100000) -#define I2C_FLAG_TRA ((uint32_t)0x00040000) -#define I2C_FLAG_BUSY ((uint32_t)0x00020000) -#define I2C_FLAG_MSL ((uint32_t)0x00010000) - -/* SR1 register flags */ -#define I2C_FLAG_SMBALERT ((uint32_t)0x10008000) -#define I2C_FLAG_TIMEOUT ((uint32_t)0x10004000) -#define I2C_FLAG_PECERR ((uint32_t)0x10001000) -#define I2C_FLAG_OVR ((uint32_t)0x10000800) -#define I2C_FLAG_AF ((uint32_t)0x10000400) -#define I2C_FLAG_ARLO ((uint32_t)0x10000200) -#define I2C_FLAG_BERR ((uint32_t)0x10000100) -#define I2C_FLAG_TXE ((uint32_t)0x10000080) -#define I2C_FLAG_RXNE ((uint32_t)0x10000040) -#define I2C_FLAG_STOPF ((uint32_t)0x10000010) -#define I2C_FLAG_ADD10 ((uint32_t)0x10000008) -#define I2C_FLAG_BTF ((uint32_t)0x10000004) -#define I2C_FLAG_ADDR ((uint32_t)0x10000002) -#define I2C_FLAG_SB ((uint32_t)0x10000001) - - -/****************I2C Master Events (Events grouped in order of communication)********************/ - -#define I2C_EVENT_MASTER_MODE_SELECT ((uint32_t)0x00030001) /* BUSY, MSL and SB flag */ -#define I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ((uint32_t)0x00070082) /* BUSY, MSL, ADDR, TXE and TRA flags */ -#define I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ((uint32_t)0x00030002) /* BUSY, MSL and ADDR flags */ -#define I2C_EVENT_MASTER_MODE_ADDRESS10 ((uint32_t)0x00030008) /* BUSY, MSL and ADD10 flags */ -#define I2C_EVENT_MASTER_BYTE_RECEIVED ((uint32_t)0x00030040) /* BUSY, MSL and RXNE flags */ -#define I2C_EVENT_MASTER_BYTE_TRANSMITTING ((uint32_t)0x00070080) /* TRA, BUSY, MSL, TXE flags */ -#define I2C_EVENT_MASTER_BYTE_TRANSMITTED ((uint32_t)0x00070084) /* TRA, BUSY, MSL, TXE and BTF flags */ - - -/******************I2C Slave Events (Events grouped in order of communication)******************/ - -#define I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED ((uint32_t)0x00020002) /* BUSY and ADDR flags */ -#define I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED ((uint32_t)0x00060082) /* TRA, BUSY, TXE and ADDR flags */ -#define I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED ((uint32_t)0x00820000) /* DUALF and BUSY flags */ -#define I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((uint32_t)0x00860080) /* DUALF, TRA, BUSY and TXE flags */ -#define I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED ((uint32_t)0x00120000) /* GENCALL and BUSY flags */ -#define I2C_EVENT_SLAVE_BYTE_RECEIVED ((uint32_t)0x00020040) /* BUSY and RXNE flags */ -#define I2C_EVENT_SLAVE_STOP_DETECTED ((uint32_t)0x00000010) /* STOPF flag */ -#define I2C_EVENT_SLAVE_BYTE_TRANSMITTED ((uint32_t)0x00060084) /* TRA, BUSY, TXE and BTF flags */ -#define I2C_EVENT_SLAVE_BYTE_TRANSMITTING ((uint32_t)0x00060080) /* TRA, BUSY and TXE flags */ -#define I2C_EVENT_SLAVE_ACK_FAILURE ((uint32_t)0x00000400) /* AF flag */ - - -void I2C_DeInit(I2C_TypeDef* I2Cx); -void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct); -void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct); -void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address); -void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState); -void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data); -uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx); -void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction); -uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register); -void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition); -void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert); -void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition); -void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState); -uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx); -void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); -void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle); - -/**************************************************************************************** -* I2C State Monitoring Functions -****************************************************************************************/ - -ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT); -uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx); -FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); - -void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); -ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT); -void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32F10x_I2C_H */ - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_iwdg.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_iwdg.h deleted file mode 100644 index 3ee199b..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_iwdg.h +++ /dev/null @@ -1,56 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_iwdg.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * IWDG firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_IWDG_H -#define __CH32F10x_IWDG_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* IWDG_WriteAccess */ -#define IWDG_WriteAccess_Enable ((uint16_t)0x5555) -#define IWDG_WriteAccess_Disable ((uint16_t)0x0000) - -/* IWDG_prescaler */ -#define IWDG_Prescaler_4 ((uint8_t)0x00) -#define IWDG_Prescaler_8 ((uint8_t)0x01) -#define IWDG_Prescaler_16 ((uint8_t)0x02) -#define IWDG_Prescaler_32 ((uint8_t)0x03) -#define IWDG_Prescaler_64 ((uint8_t)0x04) -#define IWDG_Prescaler_128 ((uint8_t)0x05) -#define IWDG_Prescaler_256 ((uint8_t)0x06) - -/* IWDG_Flag */ -#define IWDG_FLAG_PVU ((uint16_t)0x0001) -#define IWDG_FLAG_RVU ((uint16_t)0x0002) - - -void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess); -void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); -void IWDG_SetReload(uint16_t Reload); -void IWDG_ReloadCounter(void); -void IWDG_Enable(void); -FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_IWDG_H */ - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_misc.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_misc.h deleted file mode 100644 index 302d410..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_misc.h +++ /dev/null @@ -1,80 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_misc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * miscellaneous firmware library functions (add-on to CMSIS functions). - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10X_MISC_H -#define __CH32F10X_MISC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* NVIC Init Structure definition */ -typedef struct -{ - uint8_t NVIC_IRQChannel; /* Specifies the IRQ channel to be enabled or disabled. - This parameter can be a value of @ref IRQn_Type - (For the complete CH32 Devices IRQ Channels list, please - refer to ch32f10x.h file) */ - - uint8_t NVIC_IRQChannelPreemptionPriority; /* Specifies the pre-emption priority for the IRQ channel - specified in NVIC_IRQChannel. This parameter can be a value - between 0 and 15 as described in the table @ref NVIC_Priority_Table */ - - uint8_t NVIC_IRQChannelSubPriority; /* Specifies the subpriority level for the IRQ channel specified - in NVIC_IRQChannel. This parameter can be a value - between 0 and 15 as described in the table @ref NVIC_Priority_Table */ - - FunctionalState NVIC_IRQChannelCmd; /* Specifies whether the IRQ channel defined in NVIC_IRQChannel - will be enabled or disabled. - This parameter can be set either to ENABLE or DISABLE */ -} NVIC_InitTypeDef; - - -/* Vector_Table_Base */ -#define NVIC_VectTab_RAM ((uint32_t)0x20000000) -#define NVIC_VectTab_FLASH ((uint32_t)0x08000000) - -/* System_Low_Power */ -#define NVIC_LP_SEVONPEND ((uint8_t)0x10) -#define NVIC_LP_SLEEPDEEP ((uint8_t)0x04) -#define NVIC_LP_SLEEPONEXIT ((uint8_t)0x02) - - -/* Preemption_Priority_Group */ -#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /* 0 bits for pre-emption priority - 4 bits for subpriority */ -#define NVIC_PriorityGroup_1 ((uint32_t)0x600) /* 1 bits for pre-emption priority - 3 bits for subpriority */ -#define NVIC_PriorityGroup_2 ((uint32_t)0x500) /* 2 bits for pre-emption priority - 2 bits for subpriority */ -#define NVIC_PriorityGroup_3 ((uint32_t)0x400) /* 3 bits for pre-emption priority - 1 bits for subpriority */ -#define NVIC_PriorityGroup_4 ((uint32_t)0x300) /* 4 bits for pre-emption priority - 0 bits for subpriority */ - -/* SysTick_clock_source */ -#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB) -#define SysTick_CLKSource_HCLK ((uint32_t)0x00000004) - - -void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); -void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); -void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset); -void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState); -void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_MISC_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_pwr.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_pwr.h deleted file mode 100644 index de9a3a1..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_pwr.h +++ /dev/null @@ -1,59 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_pwr.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the PWR - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_PWR_H -#define __CH32F10x_PWR_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* PVD_detection_level */ -#define PWR_PVDLevel_2V2 ((uint32_t)0x00000000) -#define PWR_PVDLevel_2V3 ((uint32_t)0x00000020) -#define PWR_PVDLevel_2V4 ((uint32_t)0x00000040) -#define PWR_PVDLevel_2V5 ((uint32_t)0x00000060) -#define PWR_PVDLevel_2V6 ((uint32_t)0x00000080) -#define PWR_PVDLevel_2V7 ((uint32_t)0x000000A0) -#define PWR_PVDLevel_2V8 ((uint32_t)0x000000C0) -#define PWR_PVDLevel_2V9 ((uint32_t)0x000000E0) - -/* Regulator_state_is_STOP_mode */ -#define PWR_Regulator_ON ((uint32_t)0x00000000) -#define PWR_Regulator_LowPower ((uint32_t)0x00000001) - -/* STOP_mode_entry */ -#define PWR_STOPEntry_WFI ((uint8_t)0x01) -#define PWR_STOPEntry_WFE ((uint8_t)0x02) - -/* PWR_Flag */ -#define PWR_FLAG_WU ((uint32_t)0x00000001) -#define PWR_FLAG_SB ((uint32_t)0x00000002) -#define PWR_FLAG_PVDO ((uint32_t)0x00000004) - - -void PWR_DeInit(void); -void PWR_BackupAccessCmd(FunctionalState NewState); -void PWR_PVDCmd(FunctionalState NewState); -void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); -void PWR_WakeUpPinCmd(FunctionalState NewState); -void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); -void PWR_EnterSTANDBYMode(void); -FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); -void PWR_ClearFlag(uint32_t PWR_FLAG); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_PWR_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_rcc.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_rcc.h deleted file mode 100644 index 23a5278..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_rcc.h +++ /dev/null @@ -1,230 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_rcc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the RCC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_RCC_H -#define __CH32F10x_RCC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* RCC_Exported_Types */ -typedef struct -{ - uint32_t SYSCLK_Frequency; /* returns SYSCLK clock frequency expressed in Hz */ - uint32_t HCLK_Frequency; /* returns HCLK clock frequency expressed in Hz */ - uint32_t PCLK1_Frequency; /* returns PCLK1 clock frequency expressed in Hz */ - uint32_t PCLK2_Frequency; /* returns PCLK2 clock frequency expressed in Hz */ - uint32_t ADCCLK_Frequency; /* returns ADCCLK clock frequency expressed in Hz */ -}RCC_ClocksTypeDef; - -/* HSE_configuration */ -#define RCC_HSE_OFF ((uint32_t)0x00000000) -#define RCC_HSE_ON ((uint32_t)0x00010000) -#define RCC_HSE_Bypass ((uint32_t)0x00040000) - -/* PLL_entry_clock_source */ -#define RCC_PLLSource_HSI_Div2 ((uint32_t)0x00000000) -#define RCC_PLLSource_HSE_Div1 ((uint32_t)0x00010000) -#define RCC_PLLSource_HSE_Div2 ((uint32_t)0x00030000) - -/* PLL_multiplication_factor */ -#define RCC_PLLMul_2 ((uint32_t)0x00000000) -#define RCC_PLLMul_3 ((uint32_t)0x00040000) -#define RCC_PLLMul_4 ((uint32_t)0x00080000) -#define RCC_PLLMul_5 ((uint32_t)0x000C0000) -#define RCC_PLLMul_6 ((uint32_t)0x00100000) -#define RCC_PLLMul_7 ((uint32_t)0x00140000) -#define RCC_PLLMul_8 ((uint32_t)0x00180000) -#define RCC_PLLMul_9 ((uint32_t)0x001C0000) -#define RCC_PLLMul_10 ((uint32_t)0x00200000) -#define RCC_PLLMul_11 ((uint32_t)0x00240000) -#define RCC_PLLMul_12 ((uint32_t)0x00280000) -#define RCC_PLLMul_13 ((uint32_t)0x002C0000) -#define RCC_PLLMul_14 ((uint32_t)0x00300000) -#define RCC_PLLMul_15 ((uint32_t)0x00340000) -#define RCC_PLLMul_16 ((uint32_t)0x00380000) - -/* System_clock_source */ -#define RCC_SYSCLKSource_HSI ((uint32_t)0x00000000) -#define RCC_SYSCLKSource_HSE ((uint32_t)0x00000001) -#define RCC_SYSCLKSource_PLLCLK ((uint32_t)0x00000002) - -/* AHB_clock_source */ -#define RCC_SYSCLK_Div1 ((uint32_t)0x00000000) -#define RCC_SYSCLK_Div2 ((uint32_t)0x00000080) -#define RCC_SYSCLK_Div4 ((uint32_t)0x00000090) -#define RCC_SYSCLK_Div8 ((uint32_t)0x000000A0) -#define RCC_SYSCLK_Div16 ((uint32_t)0x000000B0) -#define RCC_SYSCLK_Div64 ((uint32_t)0x000000C0) -#define RCC_SYSCLK_Div128 ((uint32_t)0x000000D0) -#define RCC_SYSCLK_Div256 ((uint32_t)0x000000E0) -#define RCC_SYSCLK_Div512 ((uint32_t)0x000000F0) - -/* APB1_APB2_clock_source */ -#define RCC_HCLK_Div1 ((uint32_t)0x00000000) -#define RCC_HCLK_Div2 ((uint32_t)0x00000400) -#define RCC_HCLK_Div4 ((uint32_t)0x00000500) -#define RCC_HCLK_Div8 ((uint32_t)0x00000600) -#define RCC_HCLK_Div16 ((uint32_t)0x00000700) - -/* RCC_Interrupt_source */ -#define RCC_IT_LSIRDY ((uint8_t)0x01) -#define RCC_IT_LSERDY ((uint8_t)0x02) -#define RCC_IT_HSIRDY ((uint8_t)0x04) -#define RCC_IT_HSERDY ((uint8_t)0x08) -#define RCC_IT_PLLRDY ((uint8_t)0x10) -#define RCC_IT_CSS ((uint8_t)0x80) - -/* USB_Device_clock_source */ -#define RCC_USBCLKSource_PLLCLK_1Div5 ((uint8_t)0x00) -#define RCC_USBCLKSource_PLLCLK_Div1 ((uint8_t)0x01) - -/* ADC_clock_source */ -#define RCC_PCLK2_Div2 ((uint32_t)0x00000000) -#define RCC_PCLK2_Div4 ((uint32_t)0x00004000) -#define RCC_PCLK2_Div6 ((uint32_t)0x00008000) -#define RCC_PCLK2_Div8 ((uint32_t)0x0000C000) - -/* LSE_configuration */ -#define RCC_LSE_OFF ((uint8_t)0x00) -#define RCC_LSE_ON ((uint8_t)0x01) -#define RCC_LSE_Bypass ((uint8_t)0x04) - -/* RTC_clock_source */ -#define RCC_RTCCLKSource_LSE ((uint32_t)0x00000100) -#define RCC_RTCCLKSource_LSI ((uint32_t)0x00000200) -#define RCC_RTCCLKSource_HSE_Div128 ((uint32_t)0x00000300) - -/* AHB_peripheral */ -#define RCC_AHBPeriph_DMA1 ((uint32_t)0x00000001) -#define RCC_AHBPeriph_DMA2 ((uint32_t)0x00000002) -#define RCC_AHBPeriph_SRAM ((uint32_t)0x00000004) -#define RCC_AHBPeriph_FLITF ((uint32_t)0x00000010) -#define RCC_AHBPeriph_CRC ((uint32_t)0x00000040) -#define RCC_AHBPeriph_FSMC ((uint32_t)0x00000100) -#define RCC_AHBPeriph_SDIO ((uint32_t)0x00000400) -#define RCC_AHBPeriph_USBHD ((uint32_t)0x00001000) - -/* APB2_peripheral */ -#define RCC_APB2Periph_AFIO ((uint32_t)0x00000001) -#define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004) -#define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008) -#define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010) -#define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020) -#define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040) -#define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080) -#define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100) -#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000200) -#define RCC_APB2Periph_ADC2 ((uint32_t)0x00000400) -#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000800) -#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000) -#define RCC_APB2Periph_TIM8 ((uint32_t)0x00002000) -#define RCC_APB2Periph_USART1 ((uint32_t)0x00004000) -#define RCC_APB2Periph_ADC3 ((uint32_t)0x00008000) -#define RCC_APB2Periph_TIM15 ((uint32_t)0x00010000) -#define RCC_APB2Periph_TIM16 ((uint32_t)0x00020000) -#define RCC_APB2Periph_TIM17 ((uint32_t)0x00040000) -#define RCC_APB2Periph_TIM9 ((uint32_t)0x00080000) -#define RCC_APB2Periph_TIM10 ((uint32_t)0x00100000) -#define RCC_APB2Periph_TIM11 ((uint32_t)0x00200000) - -/* APB1_peripheral */ -#define RCC_APB1Periph_TIM2 ((uint32_t)0x00000001) -#define RCC_APB1Periph_TIM3 ((uint32_t)0x00000002) -#define RCC_APB1Periph_TIM4 ((uint32_t)0x00000004) -#define RCC_APB1Periph_TIM5 ((uint32_t)0x00000008) -#define RCC_APB1Periph_TIM6 ((uint32_t)0x00000010) -#define RCC_APB1Periph_TIM7 ((uint32_t)0x00000020) -#define RCC_APB1Periph_TIM12 ((uint32_t)0x00000040) -#define RCC_APB1Periph_TIM13 ((uint32_t)0x00000080) -#define RCC_APB1Periph_TIM14 ((uint32_t)0x00000100) -#define RCC_APB1Periph_WWDG ((uint32_t)0x00000800) -#define RCC_APB1Periph_SPI2 ((uint32_t)0x00004000) -#define RCC_APB1Periph_SPI3 ((uint32_t)0x00008000) -#define RCC_APB1Periph_USART2 ((uint32_t)0x00020000) -#define RCC_APB1Periph_USART3 ((uint32_t)0x00040000) -#define RCC_APB1Periph_UART4 ((uint32_t)0x00080000) -#define RCC_APB1Periph_UART5 ((uint32_t)0x00100000) -#define RCC_APB1Periph_I2C1 ((uint32_t)0x00200000) -#define RCC_APB1Periph_I2C2 ((uint32_t)0x00400000) -#define RCC_APB1Periph_USB ((uint32_t)0x00800000) -#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000) -#define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000) -#define RCC_APB1Periph_BKP ((uint32_t)0x08000000) -#define RCC_APB1Periph_PWR ((uint32_t)0x10000000) -#define RCC_APB1Periph_DAC ((uint32_t)0x20000000) -#define RCC_APB1Periph_CEC ((uint32_t)0x40000000) - -/* Clock_source_to_output_on_MCO_pin */ -#define RCC_MCO_NoClock ((uint8_t)0x00) -#define RCC_MCO_SYSCLK ((uint8_t)0x04) -#define RCC_MCO_HSI ((uint8_t)0x05) -#define RCC_MCO_HSE ((uint8_t)0x06) -#define RCC_MCO_PLLCLK_Div2 ((uint8_t)0x07) - -/* RCC_Flag */ -#define RCC_FLAG_HSIRDY ((uint8_t)0x21) -#define RCC_FLAG_HSERDY ((uint8_t)0x31) -#define RCC_FLAG_PLLRDY ((uint8_t)0x39) -#define RCC_FLAG_LSERDY ((uint8_t)0x41) -#define RCC_FLAG_LSIRDY ((uint8_t)0x61) -#define RCC_FLAG_PINRST ((uint8_t)0x7A) -#define RCC_FLAG_PORRST ((uint8_t)0x7B) -#define RCC_FLAG_SFTRST ((uint8_t)0x7C) -#define RCC_FLAG_IWDGRST ((uint8_t)0x7D) -#define RCC_FLAG_WWDGRST ((uint8_t)0x7E) -#define RCC_FLAG_LPWRRST ((uint8_t)0x7F) - - -void RCC_DeInit(void); -void RCC_HSEConfig(uint32_t RCC_HSE); -ErrorStatus RCC_WaitForHSEStartUp(void); -void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue); -void RCC_HSICmd(FunctionalState NewState); -void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul); -void RCC_PLLCmd(FunctionalState NewState); -void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource); -uint8_t RCC_GetSYSCLKSource(void); -void RCC_HCLKConfig(uint32_t RCC_SYSCLK); -void RCC_PCLK1Config(uint32_t RCC_HCLK); -void RCC_PCLK2Config(uint32_t RCC_HCLK); -void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState); -void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource); -void RCC_ADCCLKConfig(uint32_t RCC_PCLK2); -void RCC_LSEConfig(uint8_t RCC_LSE); -void RCC_LSICmd(FunctionalState NewState); -void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource); -void RCC_RTCCLKCmd(FunctionalState NewState); -void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks); -void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); -void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); -void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); -void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_BackupResetCmd(FunctionalState NewState); -void RCC_ClockSecuritySystemCmd(FunctionalState NewState); -void RCC_MCOConfig(uint8_t RCC_MCO); -FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG); -void RCC_ClearFlag(void); -ITStatus RCC_GetITStatus(uint8_t RCC_IT); -void RCC_ClearITPendingBit(uint8_t RCC_IT); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_RCC_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_rtc.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_rtc.h deleted file mode 100644 index baace3a..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_rtc.h +++ /dev/null @@ -1,54 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_rtc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the RTC - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_RTC_H -#define __CH32F10x_RTC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - - -/* RTC_interrupts_define */ -#define RTC_IT_OW ((uint16_t)0x0004) /* Overflow interrupt */ -#define RTC_IT_ALR ((uint16_t)0x0002) /* Alarm interrupt */ -#define RTC_IT_SEC ((uint16_t)0x0001) /* Second interrupt */ - -/* RTC_interrupts_flags */ -#define RTC_FLAG_RTOFF ((uint16_t)0x0020) /* RTC Operation OFF flag */ -#define RTC_FLAG_RSF ((uint16_t)0x0008) /* Registers Synchronized flag */ -#define RTC_FLAG_OW ((uint16_t)0x0004) /* Overflow flag */ -#define RTC_FLAG_ALR ((uint16_t)0x0002) /* Alarm flag */ -#define RTC_FLAG_SEC ((uint16_t)0x0001) /* Second flag */ - - -void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState); -void RTC_EnterConfigMode(void); -void RTC_ExitConfigMode(void); -uint32_t RTC_GetCounter(void); -void RTC_SetCounter(uint32_t CounterValue); -void RTC_SetPrescaler(uint32_t PrescalerValue); -void RTC_SetAlarm(uint32_t AlarmValue); -uint32_t RTC_GetDivider(void); -void RTC_WaitForLastTask(void); -void RTC_WaitForSynchro(void); -FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG); -void RTC_ClearFlag(uint16_t RTC_FLAG); -ITStatus RTC_GetITStatus(uint16_t RTC_IT); -void RTC_ClearITPendingBit(uint16_t RTC_IT); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_RTC_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_spi.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_spi.h deleted file mode 100644 index 0018b08..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_spi.h +++ /dev/null @@ -1,229 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_spi.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * SPI firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_SPI_H -#define __CH32F10x_SPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* SPI Init structure definition */ -typedef struct -{ - uint16_t SPI_Direction; /* Specifies the SPI unidirectional or bidirectional data mode. - This parameter can be a value of @ref SPI_data_direction */ - - uint16_t SPI_Mode; /* Specifies the SPI operating mode. - This parameter can be a value of @ref SPI_mode */ - - uint16_t SPI_DataSize; /* Specifies the SPI data size. - This parameter can be a value of @ref SPI_data_size */ - - uint16_t SPI_CPOL; /* Specifies the serial clock steady state. - This parameter can be a value of @ref SPI_Clock_Polarity */ - - uint16_t SPI_CPHA; /* Specifies the clock active edge for the bit capture. - This parameter can be a value of @ref SPI_Clock_Phase */ - - uint16_t SPI_NSS; /* Specifies whether the NSS signal is managed by - hardware (NSS pin) or by software using the SSI bit. - This parameter can be a value of @ref SPI_Slave_Select_management */ - - uint16_t SPI_BaudRatePrescaler; /* Specifies the Baud Rate prescaler value which will be - used to configure the transmit and receive SCK clock. - This parameter can be a value of @ref SPI_BaudRate_Prescaler. - @note The communication clock is derived from the master - clock. The slave clock does not need to be set. */ - - uint16_t SPI_FirstBit; /* Specifies whether data transfers start from MSB or LSB bit. - This parameter can be a value of @ref SPI_MSB_LSB_transmission */ - - uint16_t SPI_CRCPolynomial; /* Specifies the polynomial used for the CRC calculation. */ -}SPI_InitTypeDef; - -/* I2S Init structure definition */ -typedef struct -{ - - uint16_t I2S_Mode; /* Specifies the I2S operating mode. - This parameter can be a value of @ref I2S_Mode */ - - uint16_t I2S_Standard; /* Specifies the standard used for the I2S communication. - This parameter can be a value of @ref I2S_Standard */ - - uint16_t I2S_DataFormat; /* Specifies the data format for the I2S communication. - This parameter can be a value of @ref I2S_Data_Format */ - - uint16_t I2S_MCLKOutput; /* Specifies whether the I2S MCLK output is enabled or not. - This parameter can be a value of @ref I2S_MCLK_Output */ - - uint32_t I2S_AudioFreq; /* Specifies the frequency selected for the I2S communication. - This parameter can be a value of @ref I2S_Audio_Frequency */ - - uint16_t I2S_CPOL; /* Specifies the idle state of the I2S clock. - This parameter can be a value of @ref I2S_Clock_Polarity */ -}I2S_InitTypeDef; - -/* SPI_data_direction */ -#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000) -#define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400) -#define SPI_Direction_1Line_Rx ((uint16_t)0x8000) -#define SPI_Direction_1Line_Tx ((uint16_t)0xC000) - -/* SPI_mode */ -#define SPI_Mode_Master ((uint16_t)0x0104) -#define SPI_Mode_Slave ((uint16_t)0x0000) - -/* SPI_data_size */ -#define SPI_DataSize_16b ((uint16_t)0x0800) -#define SPI_DataSize_8b ((uint16_t)0x0000) - -/* SPI_Clock_Polarity */ -#define SPI_CPOL_Low ((uint16_t)0x0000) -#define SPI_CPOL_High ((uint16_t)0x0002) - -/* SPI_Clock_Phase */ -#define SPI_CPHA_1Edge ((uint16_t)0x0000) -#define SPI_CPHA_2Edge ((uint16_t)0x0001) - -/* SPI_Slave_Select_management */ -#define SPI_NSS_Soft ((uint16_t)0x0200) -#define SPI_NSS_Hard ((uint16_t)0x0000) - -/* SPI_BaudRate_Prescaler */ -#define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000) -#define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008) -#define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010) -#define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018) -#define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020) -#define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028) -#define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030) -#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038) - -/* SPI_MSB_LSB_transmission */ -#define SPI_FirstBit_MSB ((uint16_t)0x0000) -#define SPI_FirstBit_LSB ((uint16_t)0x0080) - -/* I2S_Mode */ -#define I2S_Mode_SlaveTx ((uint16_t)0x0000) -#define I2S_Mode_SlaveRx ((uint16_t)0x0100) -#define I2S_Mode_MasterTx ((uint16_t)0x0200) -#define I2S_Mode_MasterRx ((uint16_t)0x0300) - -/* I2S_Standard */ -#define I2S_Standard_Phillips ((uint16_t)0x0000) -#define I2S_Standard_MSB ((uint16_t)0x0010) -#define I2S_Standard_LSB ((uint16_t)0x0020) -#define I2S_Standard_PCMShort ((uint16_t)0x0030) -#define I2S_Standard_PCMLong ((uint16_t)0x00B0) - -/* I2S_Data_Format */ -#define I2S_DataFormat_16b ((uint16_t)0x0000) -#define I2S_DataFormat_16bextended ((uint16_t)0x0001) -#define I2S_DataFormat_24b ((uint16_t)0x0003) -#define I2S_DataFormat_32b ((uint16_t)0x0005) - -/* I2S_MCLK_Output */ -#define I2S_MCLKOutput_Enable ((uint16_t)0x0200) -#define I2S_MCLKOutput_Disable ((uint16_t)0x0000) - -/* I2S_Audio_Frequency */ -#define I2S_AudioFreq_192k ((uint32_t)192000) -#define I2S_AudioFreq_96k ((uint32_t)96000) -#define I2S_AudioFreq_48k ((uint32_t)48000) -#define I2S_AudioFreq_44k ((uint32_t)44100) -#define I2S_AudioFreq_32k ((uint32_t)32000) -#define I2S_AudioFreq_22k ((uint32_t)22050) -#define I2S_AudioFreq_16k ((uint32_t)16000) -#define I2S_AudioFreq_11k ((uint32_t)11025) -#define I2S_AudioFreq_8k ((uint32_t)8000) -#define I2S_AudioFreq_Default ((uint32_t)2) - -/* I2S_Clock_Polarity */ -#define I2S_CPOL_Low ((uint16_t)0x0000) -#define I2S_CPOL_High ((uint16_t)0x0008) - -/* SPI_I2S_DMA_transfer_requests */ -#define SPI_I2S_DMAReq_Tx ((uint16_t)0x0002) -#define SPI_I2S_DMAReq_Rx ((uint16_t)0x0001) - -/* SPI_NSS_internal_software_management */ -#define SPI_NSSInternalSoft_Set ((uint16_t)0x0100) -#define SPI_NSSInternalSoft_Reset ((uint16_t)0xFEFF) - -/* SPI_CRC_Transmit_Receive */ -#define SPI_CRC_Tx ((uint8_t)0x00) -#define SPI_CRC_Rx ((uint8_t)0x01) - -/* SPI_direction_transmit_receive */ -#define SPI_Direction_Rx ((uint16_t)0xBFFF) -#define SPI_Direction_Tx ((uint16_t)0x4000) - -/* SPI_I2S_interrupts_definition */ -#define SPI_I2S_IT_TXE ((uint8_t)0x71) -#define SPI_I2S_IT_RXNE ((uint8_t)0x60) -#define SPI_I2S_IT_ERR ((uint8_t)0x50) -#define SPI_I2S_IT_OVR ((uint8_t)0x56) -#define SPI_IT_MODF ((uint8_t)0x55) -#define SPI_IT_CRCERR ((uint8_t)0x54) -#define I2S_IT_UDR ((uint8_t)0x53) - -/* SPI_I2S_flags_definition */ -#define SPI_I2S_FLAG_RXNE ((uint16_t)0x0001) -#define SPI_I2S_FLAG_TXE ((uint16_t)0x0002) -#define I2S_FLAG_CHSIDE ((uint16_t)0x0004) -#define I2S_FLAG_UDR ((uint16_t)0x0008) -#define SPI_FLAG_CRCERR ((uint16_t)0x0010) -#define SPI_FLAG_MODF ((uint16_t)0x0020) -#define SPI_I2S_FLAG_OVR ((uint16_t)0x0040) -#define SPI_I2S_FLAG_BSY ((uint16_t)0x0080) - - -void SPI_I2S_DeInit(SPI_TypeDef* SPIx); -void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct); -void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct); -void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct); -void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct); -void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState); -void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState); -void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); -void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState); -void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data); -uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx); -void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft); -void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState); -void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize); -void SPI_TransmitCRC(SPI_TypeDef* SPIx); -void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState); -uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC); -uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx); -void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction); -FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); -void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); -ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); -void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32F10x_SPI_H */ - - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_tim.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_tim.h deleted file mode 100644 index a3af286..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_tim.h +++ /dev/null @@ -1,515 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_tim.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * TIM firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_TIM_H -#define __CH32F10x_TIM_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -/* TIM Time Base Init structure definition */ -typedef struct -{ - uint16_t TIM_Prescaler; /* Specifies the prescaler value used to divide the TIM clock. - This parameter can be a number between 0x0000 and 0xFFFF */ - - uint16_t TIM_CounterMode; /* Specifies the counter mode. - This parameter can be a value of @ref TIM_Counter_Mode */ - - uint16_t TIM_Period; /* Specifies the period value to be loaded into the active - Auto-Reload Register at the next update event. - This parameter must be a number between 0x0000 and 0xFFFF. */ - - uint16_t TIM_ClockDivision; /* Specifies the clock division. - This parameter can be a value of @ref TIM_Clock_Division_CKD */ - - uint8_t TIM_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 0x00 and 0xFF. - @note This parameter is valid only for TIM1 and TIM8. */ -} TIM_TimeBaseInitTypeDef; - -/* TIM Output Compare Init structure definition */ -typedef struct -{ - uint16_t TIM_OCMode; /* Specifies the TIM mode. - This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ - - uint16_t TIM_OutputState; /* Specifies the TIM Output Compare state. - This parameter can be a value of @ref TIM_Output_Compare_state */ - - uint16_t TIM_OutputNState; /* Specifies the TIM complementary Output Compare state. - This parameter can be a value of @ref TIM_Output_Compare_N_state - @note This parameter is valid only for TIM1 and TIM8. */ - - uint16_t TIM_Pulse; /* Specifies the pulse value to be loaded into the Capture Compare Register. - This parameter can be a number between 0x0000 and 0xFFFF */ - - uint16_t TIM_OCPolarity; /* Specifies the output polarity. - This parameter can be a value of @ref TIM_Output_Compare_Polarity */ - - uint16_t TIM_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. */ - - uint16_t TIM_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. */ - - uint16_t TIM_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_OCInitTypeDef; - -/* TIM Input Capture Init structure definition */ -typedef struct -{ - uint16_t TIM_Channel; /* Specifies the TIM channel. - This parameter can be a value of @ref TIM_Channel */ - - uint16_t TIM_ICPolarity; /* Specifies the active edge of the input signal. - This parameter can be a value of @ref TIM_Input_Capture_Polarity */ - - uint16_t TIM_ICSelection; /* Specifies the input. - This parameter can be a value of @ref TIM_Input_Capture_Selection */ - - uint16_t TIM_ICPrescaler; /* Specifies the Input Capture Prescaler. - This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ - - uint16_t TIM_ICFilter; /* Specifies the input capture filter. - This parameter can be a number between 0x0 and 0xF */ -} TIM_ICInitTypeDef; - -/* BDTR structure definition */ -typedef struct -{ - uint16_t TIM_OSSRState; /* Specifies the Off-State selection used in Run mode. - This parameter can be a value of @ref OSSR_Off_State_Selection_for_Run_mode_state */ - - uint16_t TIM_OSSIState; /* Specifies the Off-State used in Idle state. - This parameter can be a value of @ref OSSI_Off_State_Selection_for_Idle_mode_state */ - - uint16_t TIM_LOCKLevel; /* Specifies the LOCK level parameters. - This parameter can be a value of @ref Lock_level */ - - uint16_t TIM_DeadTime; /* Specifies the delay time between the switching-off and the - switching-on of the outputs. - This parameter can be a number between 0x00 and 0xFF */ - - uint16_t TIM_Break; /* Specifies whether the TIM Break input is enabled or not. - This parameter can be a value of @ref Break_Input_enable_disable */ - - uint16_t TIM_BreakPolarity; /* Specifies the TIM Break Input pin polarity. - This parameter can be a value of @ref Break_Polarity */ - - uint16_t TIM_AutomaticOutput; /* Specifies whether the TIM Automatic Output feature is enabled or not. - This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ -} TIM_BDTRInitTypeDef; - -/* TIM_Output_Compare_and_PWM_modes */ -#define TIM_OCMode_Timing ((uint16_t)0x0000) -#define TIM_OCMode_Active ((uint16_t)0x0010) -#define TIM_OCMode_Inactive ((uint16_t)0x0020) -#define TIM_OCMode_Toggle ((uint16_t)0x0030) -#define TIM_OCMode_PWM1 ((uint16_t)0x0060) -#define TIM_OCMode_PWM2 ((uint16_t)0x0070) - -/* TIM_One_Pulse_Mode */ -#define TIM_OPMode_Single ((uint16_t)0x0008) -#define TIM_OPMode_Repetitive ((uint16_t)0x0000) - -/* TIM_Channel */ -#define TIM_Channel_1 ((uint16_t)0x0000) -#define TIM_Channel_2 ((uint16_t)0x0004) -#define TIM_Channel_3 ((uint16_t)0x0008) -#define TIM_Channel_4 ((uint16_t)0x000C) - -/* TIM_Clock_Division_CKD */ -#define TIM_CKD_DIV1 ((uint16_t)0x0000) -#define TIM_CKD_DIV2 ((uint16_t)0x0100) -#define TIM_CKD_DIV4 ((uint16_t)0x0200) - -/* TIM_Counter_Mode */ -#define TIM_CounterMode_Up ((uint16_t)0x0000) -#define TIM_CounterMode_Down ((uint16_t)0x0010) -#define TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020) -#define TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040) -#define TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060) - -/* TIM_Output_Compare_Polarity */ -#define TIM_OCPolarity_High ((uint16_t)0x0000) -#define TIM_OCPolarity_Low ((uint16_t)0x0002) - -/* TIM_Output_Compare_N_Polarity */ -#define TIM_OCNPolarity_High ((uint16_t)0x0000) -#define TIM_OCNPolarity_Low ((uint16_t)0x0008) - -/* TIM_Output_Compare_state */ -#define TIM_OutputState_Disable ((uint16_t)0x0000) -#define TIM_OutputState_Enable ((uint16_t)0x0001) - -/* TIM_Output_Compare_N_state */ -#define TIM_OutputNState_Disable ((uint16_t)0x0000) -#define TIM_OutputNState_Enable ((uint16_t)0x0004) - -/* TIM_Capture_Compare_state */ -#define TIM_CCx_Enable ((uint16_t)0x0001) -#define TIM_CCx_Disable ((uint16_t)0x0000) - -/* TIM_Capture_Compare_N_state */ -#define TIM_CCxN_Enable ((uint16_t)0x0004) -#define TIM_CCxN_Disable ((uint16_t)0x0000) - -/* Break_Input_enable_disable */ -#define TIM_Break_Enable ((uint16_t)0x1000) -#define TIM_Break_Disable ((uint16_t)0x0000) - -/* Break_Polarity */ -#define TIM_BreakPolarity_Low ((uint16_t)0x0000) -#define TIM_BreakPolarity_High ((uint16_t)0x2000) - -/* TIM_AOE_Bit_Set_Reset */ -#define TIM_AutomaticOutput_Enable ((uint16_t)0x4000) -#define TIM_AutomaticOutput_Disable ((uint16_t)0x0000) - -/* Lock_level */ -#define TIM_LOCKLevel_OFF ((uint16_t)0x0000) -#define TIM_LOCKLevel_1 ((uint16_t)0x0100) -#define TIM_LOCKLevel_2 ((uint16_t)0x0200) -#define TIM_LOCKLevel_3 ((uint16_t)0x0300) - -/* OSSI_Off_State_Selection_for_Idle_mode_state */ -#define TIM_OSSIState_Enable ((uint16_t)0x0400) -#define TIM_OSSIState_Disable ((uint16_t)0x0000) - -/* OSSR_Off_State_Selection_for_Run_mode_state */ -#define TIM_OSSRState_Enable ((uint16_t)0x0800) -#define TIM_OSSRState_Disable ((uint16_t)0x0000) - -/* TIM_Output_Compare_Idle_State */ -#define TIM_OCIdleState_Set ((uint16_t)0x0100) -#define TIM_OCIdleState_Reset ((uint16_t)0x0000) - -/* TIM_Output_Compare_N_Idle_State */ -#define TIM_OCNIdleState_Set ((uint16_t)0x0200) -#define TIM_OCNIdleState_Reset ((uint16_t)0x0000) - -/* TIM_Input_Capture_Polarity */ -#define TIM_ICPolarity_Rising ((uint16_t)0x0000) -#define TIM_ICPolarity_Falling ((uint16_t)0x0002) -#define TIM_ICPolarity_BothEdge ((uint16_t)0x000A) - -/* TIM_Input_Capture_Selection */ -#define TIM_ICSelection_DirectTI ((uint16_t)0x0001) /* TIM Input 1, 2, 3 or 4 is selected to be - connected to IC1, IC2, IC3 or IC4, respectively */ -#define TIM_ICSelection_IndirectTI ((uint16_t)0x0002) /* TIM Input 1, 2, 3 or 4 is selected to be - connected to IC2, IC1, IC4 or IC3, respectively. */ -#define TIM_ICSelection_TRC ((uint16_t)0x0003) /* TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */ - -/* TIM_Input_Capture_Prescaler */ -#define TIM_ICPSC_DIV1 ((uint16_t)0x0000) /* Capture performed each time an edge is detected on the capture input. */ -#define TIM_ICPSC_DIV2 ((uint16_t)0x0004) /* Capture performed once every 2 events. */ -#define TIM_ICPSC_DIV4 ((uint16_t)0x0008) /* Capture performed once every 4 events. */ -#define TIM_ICPSC_DIV8 ((uint16_t)0x000C) /* Capture performed once every 8 events. */ - -/* TIM_interrupt_sources */ -#define TIM_IT_Update ((uint16_t)0x0001) -#define TIM_IT_CC1 ((uint16_t)0x0002) -#define TIM_IT_CC2 ((uint16_t)0x0004) -#define TIM_IT_CC3 ((uint16_t)0x0008) -#define TIM_IT_CC4 ((uint16_t)0x0010) -#define TIM_IT_COM ((uint16_t)0x0020) -#define TIM_IT_Trigger ((uint16_t)0x0040) -#define TIM_IT_Break ((uint16_t)0x0080) - -/* TIM_DMA_Base_address */ -#define TIM_DMABase_CR1 ((uint16_t)0x0000) -#define TIM_DMABase_CR2 ((uint16_t)0x0001) -#define TIM_DMABase_SMCR ((uint16_t)0x0002) -#define TIM_DMABase_DIER ((uint16_t)0x0003) -#define TIM_DMABase_SR ((uint16_t)0x0004) -#define TIM_DMABase_EGR ((uint16_t)0x0005) -#define TIM_DMABase_CCMR1 ((uint16_t)0x0006) -#define TIM_DMABase_CCMR2 ((uint16_t)0x0007) -#define TIM_DMABase_CCER ((uint16_t)0x0008) -#define TIM_DMABase_CNT ((uint16_t)0x0009) -#define TIM_DMABase_PSC ((uint16_t)0x000A) -#define TIM_DMABase_ARR ((uint16_t)0x000B) -#define TIM_DMABase_RCR ((uint16_t)0x000C) -#define TIM_DMABase_CCR1 ((uint16_t)0x000D) -#define TIM_DMABase_CCR2 ((uint16_t)0x000E) -#define TIM_DMABase_CCR3 ((uint16_t)0x000F) -#define TIM_DMABase_CCR4 ((uint16_t)0x0010) -#define TIM_DMABase_BDTR ((uint16_t)0x0011) -#define TIM_DMABase_DCR ((uint16_t)0x0012) - -/* TIM_DMA_Burst_Length */ -#define TIM_DMABurstLength_1Transfer ((uint16_t)0x0000) -#define TIM_DMABurstLength_2Transfers ((uint16_t)0x0100) -#define TIM_DMABurstLength_3Transfers ((uint16_t)0x0200) -#define TIM_DMABurstLength_4Transfers ((uint16_t)0x0300) -#define TIM_DMABurstLength_5Transfers ((uint16_t)0x0400) -#define TIM_DMABurstLength_6Transfers ((uint16_t)0x0500) -#define TIM_DMABurstLength_7Transfers ((uint16_t)0x0600) -#define TIM_DMABurstLength_8Transfers ((uint16_t)0x0700) -#define TIM_DMABurstLength_9Transfers ((uint16_t)0x0800) -#define TIM_DMABurstLength_10Transfers ((uint16_t)0x0900) -#define TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00) -#define TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00) -#define TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00) -#define TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00) -#define TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00) -#define TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00) -#define TIM_DMABurstLength_17Transfers ((uint16_t)0x1000) -#define TIM_DMABurstLength_18Transfers ((uint16_t)0x1100) - -/* TIM_DMA_sources */ -#define TIM_DMA_Update ((uint16_t)0x0100) -#define TIM_DMA_CC1 ((uint16_t)0x0200) -#define TIM_DMA_CC2 ((uint16_t)0x0400) -#define TIM_DMA_CC3 ((uint16_t)0x0800) -#define TIM_DMA_CC4 ((uint16_t)0x1000) -#define TIM_DMA_COM ((uint16_t)0x2000) -#define TIM_DMA_Trigger ((uint16_t)0x4000) - -/* TIM_External_Trigger_Prescaler */ -#define TIM_ExtTRGPSC_OFF ((uint16_t)0x0000) -#define TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000) -#define TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000) -#define TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000) - -/* TIM_Internal_Trigger_Selection */ -#define TIM_TS_ITR0 ((uint16_t)0x0000) -#define TIM_TS_ITR1 ((uint16_t)0x0010) -#define TIM_TS_ITR2 ((uint16_t)0x0020) -#define TIM_TS_ITR3 ((uint16_t)0x0030) -#define TIM_TS_TI1F_ED ((uint16_t)0x0040) -#define TIM_TS_TI1FP1 ((uint16_t)0x0050) -#define TIM_TS_TI2FP2 ((uint16_t)0x0060) -#define TIM_TS_ETRF ((uint16_t)0x0070) - -/* TIM_TIx_External_Clock_Source */ -#define TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050) -#define TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060) -#define TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040) - -/* TIM_External_Trigger_Polarity */ -#define TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000) -#define TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000) - -/* TIM_Prescaler_Reload_Mode */ -#define TIM_PSCReloadMode_Update ((uint16_t)0x0000) -#define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001) - -/* TIM_Forced_Action */ -#define TIM_ForcedAction_Active ((uint16_t)0x0050) -#define TIM_ForcedAction_InActive ((uint16_t)0x0040) - -/* TIM_Encoder_Mode */ -#define TIM_EncoderMode_TI1 ((uint16_t)0x0001) -#define TIM_EncoderMode_TI2 ((uint16_t)0x0002) -#define TIM_EncoderMode_TI12 ((uint16_t)0x0003) - -/* TIM_Event_Source */ -#define TIM_EventSource_Update ((uint16_t)0x0001) -#define TIM_EventSource_CC1 ((uint16_t)0x0002) -#define TIM_EventSource_CC2 ((uint16_t)0x0004) -#define TIM_EventSource_CC3 ((uint16_t)0x0008) -#define TIM_EventSource_CC4 ((uint16_t)0x0010) -#define TIM_EventSource_COM ((uint16_t)0x0020) -#define TIM_EventSource_Trigger ((uint16_t)0x0040) -#define TIM_EventSource_Break ((uint16_t)0x0080) - -/* TIM_Update_Source */ -#define TIM_UpdateSource_Global ((uint16_t)0x0000) /* Source of update is the counter overflow/underflow - or the setting of UG bit, or an update generation - through the slave mode controller. */ -#define TIM_UpdateSource_Regular ((uint16_t)0x0001) /* Source of update is counter overflow/underflow. */ - -/* TIM_Output_Compare_Preload_State */ -#define TIM_OCPreload_Enable ((uint16_t)0x0008) -#define TIM_OCPreload_Disable ((uint16_t)0x0000) - -/* TIM_Output_Compare_Fast_State */ -#define TIM_OCFast_Enable ((uint16_t)0x0004) -#define TIM_OCFast_Disable ((uint16_t)0x0000) - -/* TIM_Output_Compare_Clear_State */ -#define TIM_OCClear_Enable ((uint16_t)0x0080) -#define TIM_OCClear_Disable ((uint16_t)0x0000) - -/* TIM_Trigger_Output_Source */ -#define TIM_TRGOSource_Reset ((uint16_t)0x0000) -#define TIM_TRGOSource_Enable ((uint16_t)0x0010) -#define TIM_TRGOSource_Update ((uint16_t)0x0020) -#define TIM_TRGOSource_OC1 ((uint16_t)0x0030) -#define TIM_TRGOSource_OC1Ref ((uint16_t)0x0040) -#define TIM_TRGOSource_OC2Ref ((uint16_t)0x0050) -#define TIM_TRGOSource_OC3Ref ((uint16_t)0x0060) -#define TIM_TRGOSource_OC4Ref ((uint16_t)0x0070) - -/* TIM_Slave_Mode */ -#define TIM_SlaveMode_Reset ((uint16_t)0x0004) -#define TIM_SlaveMode_Gated ((uint16_t)0x0005) -#define TIM_SlaveMode_Trigger ((uint16_t)0x0006) -#define TIM_SlaveMode_External1 ((uint16_t)0x0007) - -/* TIM_Master_Slave_Mode */ -#define TIM_MasterSlaveMode_Enable ((uint16_t)0x0080) -#define TIM_MasterSlaveMode_Disable ((uint16_t)0x0000) - -/* TIM_Flags */ -#define TIM_FLAG_Update ((uint16_t)0x0001) -#define TIM_FLAG_CC1 ((uint16_t)0x0002) -#define TIM_FLAG_CC2 ((uint16_t)0x0004) -#define TIM_FLAG_CC3 ((uint16_t)0x0008) -#define TIM_FLAG_CC4 ((uint16_t)0x0010) -#define TIM_FLAG_COM ((uint16_t)0x0020) -#define TIM_FLAG_Trigger ((uint16_t)0x0040) -#define TIM_FLAG_Break ((uint16_t)0x0080) -#define TIM_FLAG_CC1OF ((uint16_t)0x0200) -#define TIM_FLAG_CC2OF ((uint16_t)0x0400) -#define TIM_FLAG_CC3OF ((uint16_t)0x0800) -#define TIM_FLAG_CC4OF ((uint16_t)0x1000) - -/* TIM_Legacy */ -#define TIM_DMABurstLength_1Byte TIM_DMABurstLength_1Transfer -#define TIM_DMABurstLength_2Bytes TIM_DMABurstLength_2Transfers -#define TIM_DMABurstLength_3Bytes TIM_DMABurstLength_3Transfers -#define TIM_DMABurstLength_4Bytes TIM_DMABurstLength_4Transfers -#define TIM_DMABurstLength_5Bytes TIM_DMABurstLength_5Transfers -#define TIM_DMABurstLength_6Bytes TIM_DMABurstLength_6Transfers -#define TIM_DMABurstLength_7Bytes TIM_DMABurstLength_7Transfers -#define TIM_DMABurstLength_8Bytes TIM_DMABurstLength_8Transfers -#define TIM_DMABurstLength_9Bytes TIM_DMABurstLength_9Transfers -#define TIM_DMABurstLength_10Bytes TIM_DMABurstLength_10Transfers -#define TIM_DMABurstLength_11Bytes TIM_DMABurstLength_11Transfers -#define TIM_DMABurstLength_12Bytes TIM_DMABurstLength_12Transfers -#define TIM_DMABurstLength_13Bytes TIM_DMABurstLength_13Transfers -#define TIM_DMABurstLength_14Bytes TIM_DMABurstLength_14Transfers -#define TIM_DMABurstLength_15Bytes TIM_DMABurstLength_15Transfers -#define TIM_DMABurstLength_16Bytes TIM_DMABurstLength_16Transfers -#define TIM_DMABurstLength_17Bytes TIM_DMABurstLength_17Transfers -#define TIM_DMABurstLength_18Bytes TIM_DMABurstLength_18Transfers - - -void TIM_DeInit(TIM_TypeDef* TIMx); -void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); -void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); -void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); -void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct); -void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); -void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct); -void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct); -void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct); -void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); -void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource); -void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength); -void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState); -void TIM_InternalClockConfig(TIM_TypeDef* TIMx); -void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); -void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, - uint16_t TIM_ICPolarity, uint16_t ICFilter); -void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); -void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, - uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter); -void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); -void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode); -void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode); -void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); -void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, - uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity); -void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); -void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); -void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); -void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); -void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); -void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); -void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); -void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); -void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); -void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); -void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); -void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); -void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); -void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); -void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); -void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); -void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); -void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); -void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); -void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); -void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx); -void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN); -void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode); -void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource); -void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState); -void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode); -void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource); -void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); -void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode); -void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter); -void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload); -void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1); -void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2); -void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3); -void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4); -void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); -void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD); -uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx); -uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx); -uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx); -uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx); -uint16_t TIM_GetCounter(TIM_TypeDef* TIMx); -uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx); -FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); -void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); -ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT); -void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32F10x_TIM_H */ - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usart.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usart.h deleted file mode 100644 index 73acf0c..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usart.h +++ /dev/null @@ -1,195 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_usart.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USART firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_USART_H -#define __CH32F10x_USART_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - - -/* USART Init Structure definition */ -typedef struct -{ - uint32_t USART_BaudRate; /* This member configures the USART communication baud rate. - The baud rate is computed using the following formula: - - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate))) - - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */ - - uint16_t USART_WordLength; /* Specifies the number of data bits transmitted or received in a frame. - This parameter can be a value of @ref USART_Word_Length */ - - uint16_t USART_StopBits; /* Specifies the number of stop bits transmitted. - This parameter can be a value of @ref USART_Stop_Bits */ - - uint16_t USART_Parity; /* Specifies the parity mode. - This parameter can be a value of @ref USART_Parity - @note When parity is enabled, the computed parity is inserted - at the MSB position of the transmitted data (9th bit when - the word length is set to 9 data bits; 8th bit when the - word length is set to 8 data bits). */ - - uint16_t USART_Mode; /* Specifies wether the Receive or Transmit mode is enabled or disabled. - This parameter can be a value of @ref USART_Mode */ - - uint16_t USART_HardwareFlowControl; /* Specifies wether the hardware flow control mode is enabled - or disabled. - This parameter can be a value of @ref USART_Hardware_Flow_Control */ -} USART_InitTypeDef; - -/* USART Clock Init Structure definition */ -typedef struct -{ - - uint16_t USART_Clock; /* Specifies whether the USART clock is enabled or disabled. - This parameter can be a value of @ref USART_Clock */ - - uint16_t USART_CPOL; /* Specifies the steady state value of the serial clock. - This parameter can be a value of @ref USART_Clock_Polarity */ - - uint16_t USART_CPHA; /* Specifies the clock transition on which the bit capture is made. - This parameter can be a value of @ref USART_Clock_Phase */ - - uint16_t USART_LastBit; /* Specifies whether the clock pulse corresponding to the last transmitted - data bit (MSB) has to be output on the SCLK pin in synchronous mode. - This parameter can be a value of @ref USART_Last_Bit */ -} USART_ClockInitTypeDef; - -/* USART_Word_Length */ -#define USART_WordLength_8b ((uint16_t)0x0000) -#define USART_WordLength_9b ((uint16_t)0x1000) - -/* USART_Stop_Bits */ -#define USART_StopBits_1 ((uint16_t)0x0000) -#define USART_StopBits_0_5 ((uint16_t)0x1000) -#define USART_StopBits_2 ((uint16_t)0x2000) -#define USART_StopBits_1_5 ((uint16_t)0x3000) - -/* USART_Parity */ -#define USART_Parity_No ((uint16_t)0x0000) -#define USART_Parity_Even ((uint16_t)0x0400) -#define USART_Parity_Odd ((uint16_t)0x0600) - -/* USART_Mode */ -#define USART_Mode_Rx ((uint16_t)0x0004) -#define USART_Mode_Tx ((uint16_t)0x0008) - -/* USART_Hardware_Flow_Control */ -#define USART_HardwareFlowControl_None ((uint16_t)0x0000) -#define USART_HardwareFlowControl_RTS ((uint16_t)0x0100) -#define USART_HardwareFlowControl_CTS ((uint16_t)0x0200) -#define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300) - -/* USART_Clock */ -#define USART_Clock_Disable ((uint16_t)0x0000) -#define USART_Clock_Enable ((uint16_t)0x0800) - -/* USART_Clock_Polarity */ -#define USART_CPOL_Low ((uint16_t)0x0000) -#define USART_CPOL_High ((uint16_t)0x0400) - -/* USART_Clock_Phase */ -#define USART_CPHA_1Edge ((uint16_t)0x0000) -#define USART_CPHA_2Edge ((uint16_t)0x0200) - -/* USART_Last_Bit */ -#define USART_LastBit_Disable ((uint16_t)0x0000) -#define USART_LastBit_Enable ((uint16_t)0x0100) - -/* USART_Interrupt_definition */ -#define USART_IT_PE ((uint16_t)0x0028) -#define USART_IT_TXE ((uint16_t)0x0727) -#define USART_IT_TC ((uint16_t)0x0626) -#define USART_IT_RXNE ((uint16_t)0x0525) -#define USART_IT_ORE_RX ((uint16_t)0x0325) -#define USART_IT_IDLE ((uint16_t)0x0424) -#define USART_IT_LBD ((uint16_t)0x0846) -#define USART_IT_CTS ((uint16_t)0x096A) -#define USART_IT_ERR ((uint16_t)0x0060) -#define USART_IT_ORE_ER ((uint16_t)0x0360) -#define USART_IT_NE ((uint16_t)0x0260) -#define USART_IT_FE ((uint16_t)0x0160) - -#define USART_IT_ORE USART_IT_ORE_ER - -/* USART_DMA_Requests */ -#define USART_DMAReq_Tx ((uint16_t)0x0080) -#define USART_DMAReq_Rx ((uint16_t)0x0040) - -/* USART_WakeUp_methods */ -#define USART_WakeUp_IdleLine ((uint16_t)0x0000) -#define USART_WakeUp_AddressMark ((uint16_t)0x0800) - -/* USART_LIN_Break_Detection_Length */ -#define USART_LINBreakDetectLength_10b ((uint16_t)0x0000) -#define USART_LINBreakDetectLength_11b ((uint16_t)0x0020) - -/* USART_IrDA_Low_Power */ -#define USART_IrDAMode_LowPower ((uint16_t)0x0004) -#define USART_IrDAMode_Normal ((uint16_t)0x0000) - -/* USART_Flags */ -#define USART_FLAG_CTS ((uint16_t)0x0200) -#define USART_FLAG_LBD ((uint16_t)0x0100) -#define USART_FLAG_TXE ((uint16_t)0x0080) -#define USART_FLAG_TC ((uint16_t)0x0040) -#define USART_FLAG_RXNE ((uint16_t)0x0020) -#define USART_FLAG_IDLE ((uint16_t)0x0010) -#define USART_FLAG_ORE ((uint16_t)0x0008) -#define USART_FLAG_NE ((uint16_t)0x0004) -#define USART_FLAG_FE ((uint16_t)0x0002) -#define USART_FLAG_PE ((uint16_t)0x0001) - - -void USART_DeInit(USART_TypeDef* USARTx); -void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); -void USART_StructInit(USART_InitTypeDef* USART_InitStruct); -void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct); -void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct); -void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState); -void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); -void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address); -void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp); -void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength); -void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); -uint16_t USART_ReceiveData(USART_TypeDef* USARTx); -void USART_SendBreak(USART_TypeDef* USARTx); -void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime); -void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler); -void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState); -void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode); -void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState); -FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); -void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); -ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); -void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_USART_H */ - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usb.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usb.h deleted file mode 100644 index 17b55fd..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usb.h +++ /dev/null @@ -1,657 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_usb.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the USB - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_USB_H -#define __CH32F10x_USB_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef NULL -#define NULL 0 -#endif - -#ifndef VOID -#define VOID void -#endif -#ifndef CONST -#define CONST const -#endif -#ifndef BOOL -typedef unsigned char BOOL; -#endif -#ifndef BOOLEAN -typedef unsigned char BOOLEAN; -#endif -#ifndef CHAR -typedef char CHAR; -#endif -#ifndef INT8 -typedef char INT8; -#endif -#ifndef INT16 -typedef short INT16; -#endif -#ifndef INT32 -typedef long INT32; -#endif -#ifndef UINT8 -typedef unsigned char UINT8; -#endif -#ifndef UINT16 -typedef unsigned short UINT16; -#endif -#ifndef UINT32 -typedef unsigned long UINT32; -#endif -#ifndef UINT8V -typedef unsigned char volatile UINT8V; -#endif -#ifndef UINT16V -typedef unsigned short volatile UINT16V; -#endif -#ifndef UINT32V -typedef unsigned long volatile UINT32V; -#endif - -#ifndef PVOID -typedef void *PVOID; -#endif -#ifndef PCHAR -typedef char *PCHAR; -#endif -#ifndef PCHAR -typedef const char *PCCHAR; -#endif -#ifndef PINT8 -typedef char *PINT8; -#endif -#ifndef PINT16 -typedef short *PINT16; -#endif -#ifndef PINT32 -typedef long *PINT32; -#endif -#ifndef PUINT8 -typedef unsigned char *PUINT8; -#endif -#ifndef PUINT16 -typedef unsigned short *PUINT16; -#endif -#ifndef PUINT32 -typedef unsigned long *PUINT32; -#endif -#ifndef PUINT8V -typedef volatile unsigned char *PUINT8V; -#endif -#ifndef PUINT16V -typedef volatile unsigned short *PUINT16V; -#endif -#ifndef PUINT32V -typedef volatile unsigned long *PUINT32V; -#endif - -/******************************************************************************/ -/* Peripheral memory map */ -/******************************************************************************/ -/* USB */ -#define R32_USB_CONTROL (*((PUINT32V)(0x40023400))) // USB control & interrupt enable & device address -#define R8_USB_CTRL (*((PUINT8V)(0x40023400))) // USB base control -#define RB_UC_HOST_MODE 0x80 // enable USB host mode: 0=device mode, 1=host mode -#define RB_UC_LOW_SPEED 0x40 // enable USB low speed: 0=12Mbps, 1=1.5Mbps -#define RB_UC_DEV_PU_EN 0x20 // USB device enable and internal pullup resistance enable -#define RB_UC_SYS_CTRL1 0x20 // USB system control high bit -#define RB_UC_SYS_CTRL0 0x10 // USB system control low bit -#define MASK_UC_SYS_CTRL 0x30 // bit mask of USB system control -// bUC_HOST_MODE & bUC_SYS_CTRL1 & bUC_SYS_CTRL0: USB system control -// 0 00: disable USB device and disable internal pullup resistance -// 0 01: enable USB device and disable internal pullup resistance, need external pullup resistance -// 0 1x: enable USB device and enable internal pullup resistance -// 1 00: enable USB host and normal status -// 1 01: enable USB host and force UDP/UDM output SE0 state -// 1 10: enable USB host and force UDP/UDM output J state -// 1 11: enable USB host and force UDP/UDM output resume or K state -#define RB_UC_INT_BUSY 0x08 // enable automatic responding busy for device mode or automatic pause for host mode during interrupt flag UIF_TRANSFER valid -#define RB_UC_RESET_SIE 0x04 // force reset USB SIE, need software clear -#define RB_UC_CLR_ALL 0x02 // force clear FIFO and count of USB -#define RB_UC_DMA_EN 0x01 // DMA enable and DMA interrupt enable for USB - -#define R8_UDEV_CTRL (*((PUINT8V)(0x40023401))) // USB device physical prot control -#define RB_UD_PD_DIS 0x80 // disable USB UDP/UDM pulldown resistance: 0=enable pulldown, 1=disable -#define RB_UD_DP_PIN 0x20 // ReadOnly: indicate current UDP pin level -#define RB_UD_DM_PIN 0x10 // ReadOnly: indicate current UDM pin level -#define RB_UD_LOW_SPEED 0x04 // enable USB physical port low speed: 0=full speed, 1=low speed -#define RB_UD_GP_BIT 0x02 // general purpose bit -#define RB_UD_PORT_EN 0x01 // enable USB physical port I/O: 0=disable, 1=enable - -#define R8_UHOST_CTRL R8_UDEV_CTRL // USB host physical prot control -#define RB_UH_PD_DIS 0x80 // disable USB UDP/UDM pulldown resistance: 0=enable pulldown, 1=disable -#define RB_UH_DP_PIN 0x20 // ReadOnly: indicate current UDP pin level -#define RB_UH_DM_PIN 0x10 // ReadOnly: indicate current UDM pin level -#define RB_UH_LOW_SPEED 0x04 // enable USB port low speed: 0=full speed, 1=low speed -#define RB_UH_BUS_RESET 0x02 // control USB bus reset: 0=normal, 1=force bus reset -#define RB_UH_PORT_EN 0x01 // enable USB port: 0=disable, 1=enable port, automatic disabled if USB device detached - -#define R8_USB_INT_EN (*((PUINT8V)(0x40023402))) // USB interrupt enable -#define RB_UIE_DEV_SOF 0x80 // enable interrupt for SOF received for USB device mode -#define RB_UIE_DEV_NAK 0x40 // enable interrupt for NAK responded for USB device mode -#define RB_UIE_FIFO_OV 0x10 // enable interrupt for FIFO overflow -#define RB_UIE_HST_SOF 0x08 // enable interrupt for host SOF timer action for USB host mode -#define RB_UIE_SUSPEND 0x04 // enable interrupt for USB suspend or resume event -#define RB_UIE_TRANSFER 0x02 // enable interrupt for USB transfer completion -#define RB_UIE_DETECT 0x01 // enable interrupt for USB device detected event for USB host mode -#define RB_UIE_BUS_RST 0x01 // enable interrupt for USB bus reset event for USB device mode - -#define R8_USB_DEV_AD (*((PUINT8V)(0x40023403))) // USB device address -#define RB_UDA_GP_BIT 0x80 // general purpose bit -#define MASK_USB_ADDR 0x7F // bit mask for USB device address - -#define R32_USB_STATUS (*((PUINT32V)(0x40023404))) // USB miscellaneous status & interrupt flag & interrupt status -#define R8_USB_MIS_ST (*((PUINT8V)(0x40023405))) // USB miscellaneous status -#define RB_UMS_SOF_PRES 0x80 // RO, indicate host SOF timer presage status -#define RB_UMS_SOF_ACT 0x40 // RO, indicate host SOF timer action status for USB host -#define RB_UMS_SIE_FREE 0x20 // RO, indicate USB SIE free status -#define RB_UMS_R_FIFO_RDY 0x10 // RO, indicate USB receiving FIFO ready status (not empty) -#define RB_UMS_BUS_RESET 0x08 // RO, indicate USB bus reset status -#define RB_UMS_SUSPEND 0x04 // RO, indicate USB suspend status -#define RB_UMS_DM_LEVEL 0x02 // RO, indicate UDM level saved at device attached to USB host -#define RB_UMS_DEV_ATTACH 0x01 // RO, indicate device attached status on USB host - -#define R8_USB_INT_FG (*((PUINT8V)(0x40023406))) // USB interrupt flag -#define RB_U_IS_NAK 0x80 // RO, indicate current USB transfer is NAK received -#define RB_U_TOG_OK 0x40 // RO, indicate current USB transfer toggle is OK -#define RB_U_SIE_FREE 0x20 // RO, indicate USB SIE free status -#define RB_UIF_FIFO_OV 0x10 // FIFO overflow interrupt flag for USB, direct bit address clear or write 1 to clear -#define RB_UIF_HST_SOF 0x08 // host SOF timer interrupt flag for USB host, direct bit address clear or write 1 to clear -#define RB_UIF_SUSPEND 0x04 // USB suspend or resume event interrupt flag, direct bit address clear or write 1 to clear -#define RB_UIF_TRANSFER 0x02 // USB transfer completion interrupt flag, direct bit address clear or write 1 to clear -#define RB_UIF_DETECT 0x01 // device detected event interrupt flag for USB host mode, direct bit address clear or write 1 to clear -#define RB_UIF_BUS_RST 0x01 // bus reset event interrupt flag for USB device mode, direct bit address clear or write 1 to clear - -#define R8_USB_INT_ST (*((PUINT8V)(0x40023407))) // USB interrupt status -#define RB_UIS_IS_NAK 0x80 // RO, indicate current USB transfer is NAK received for USB device mode -#define RB_UIS_TOG_OK 0x40 // RO, indicate current USB transfer toggle is OK -#define RB_UIS_TOKEN1 0x20 // RO, current token PID code bit 1 received for USB device mode -#define RB_UIS_TOKEN0 0x10 // RO, current token PID code bit 0 received for USB device mode -#define MASK_UIS_TOKEN 0x30 // RO, bit mask of current token PID code received for USB device mode -#define UIS_TOKEN_OUT 0x00 -#define UIS_TOKEN_SOF 0x10 -#define UIS_TOKEN_IN 0x20 -#define UIS_TOKEN_SETUP 0x30 -// bUIS_TOKEN1 & bUIS_TOKEN0: current token PID code received for USB device mode -// 00: OUT token PID received -// 01: SOF token PID received -// 10: IN token PID received -// 11: SETUP token PID received -#define MASK_UIS_ENDP 0x0F // RO, bit mask of current transfer endpoint number for USB device mode -#define MASK_UIS_H_RES 0x0F // RO, bit mask of current transfer handshake response for USB host mode: 0000=no response, time out from device, others=handshake response PID received - -#define R8_USB_RX_LEN (*((PUINT8V)(0x40023408))) // USB receiving length -#define R32_USB_BUF_MODE (*((PUINT32V)(0x4002340c))) // USB endpoint buffer mode -#define R8_UEP4_1_MOD (*((PUINT8V)(0x4002340c))) // endpoint 4/1 mode -#define RB_UEP1_RX_EN 0x80 // enable USB endpoint 1 receiving (OUT) -#define RB_UEP1_TX_EN 0x40 // enable USB endpoint 1 transmittal (IN) -#define RB_UEP1_BUF_MOD 0x10 // buffer mode of USB endpoint 1 -// bUEPn_RX_EN & bUEPn_TX_EN & bUEPn_BUF_MOD: USB endpoint 1/2/3 buffer mode, buffer start address is UEPn_DMA -// 0 0 x: disable endpoint and disable buffer -// 1 0 0: 64 bytes buffer for receiving (OUT endpoint) -// 1 0 1: dual 64 bytes buffer by toggle bit bUEP_R_TOG selection for receiving (OUT endpoint), total=128bytes -// 0 1 0: 64 bytes buffer for transmittal (IN endpoint) -// 0 1 1: dual 64 bytes buffer by toggle bit bUEP_T_TOG selection for transmittal (IN endpoint), total=128bytes -// 1 1 0: 64 bytes buffer for receiving (OUT endpoint) + 64 bytes buffer for transmittal (IN endpoint), total=128bytes -// 1 1 1: dual 64 bytes buffer by bUEP_R_TOG selection for receiving (OUT endpoint) + dual 64 bytes buffer by bUEP_T_TOG selection for transmittal (IN endpoint), total=256bytes -#define RB_UEP4_RX_EN 0x08 // enable USB endpoint 4 receiving (OUT) -#define RB_UEP4_TX_EN 0x04 // enable USB endpoint 4 transmittal (IN) -// bUEP4_RX_EN & bUEP4_TX_EN: USB endpoint 4 buffer mode, buffer start address is UEP0_DMA -// 0 0: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) -// 1 0: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) + 64 bytes buffer for endpoint 4 receiving (OUT endpoint), total=128bytes -// 0 1: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) + 64 bytes buffer for endpoint 4 transmittal (IN endpoint), total=128bytes -// 1 1: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) -// + 64 bytes buffer for endpoint 4 receiving (OUT endpoint) + 64 bytes buffer for endpoint 4 transmittal (IN endpoint), total=192bytes - -#define R8_UEP2_3_MOD (*((PUINT8V)(0x4002340d))) // endpoint 2/3 mode -#define RB_UEP3_RX_EN 0x80 // enable USB endpoint 3 receiving (OUT) -#define RB_UEP3_TX_EN 0x40 // enable USB endpoint 3 transmittal (IN) -#define RB_UEP3_BUF_MOD 0x10 // buffer mode of USB endpoint 3 -#define RB_UEP2_RX_EN 0x08 // enable USB endpoint 2 receiving (OUT) -#define RB_UEP2_TX_EN 0x04 // enable USB endpoint 2 transmittal (IN) -#define RB_UEP2_BUF_MOD 0x01 // buffer mode of USB endpoint 2 - -#define R8_UH_EP_MOD R8_UEP2_3_MOD //host endpoint mode -#define RB_UH_EP_TX_EN 0x40 // enable USB host OUT endpoint transmittal -#define RB_UH_EP_TBUF_MOD 0x10 // buffer mode of USB host OUT endpoint -// bUH_EP_TX_EN & bUH_EP_TBUF_MOD: USB host OUT endpoint buffer mode, buffer start address is UH_TX_DMA -// 0 x: disable endpoint and disable buffer -// 1 0: 64 bytes buffer for transmittal (OUT endpoint) -// 1 1: dual 64 bytes buffer by toggle bit bUH_T_TOG selection for transmittal (OUT endpoint), total=128bytes -#define RB_UH_EP_RX_EN 0x08 // enable USB host IN endpoint receiving -#define RB_UH_EP_RBUF_MOD 0x01 // buffer mode of USB host IN endpoint -// bUH_EP_RX_EN & bUH_EP_RBUF_MOD: USB host IN endpoint buffer mode, buffer start address is UH_RX_DMA -// 0 x: disable endpoint and disable buffer -// 1 0: 64 bytes buffer for receiving (IN endpoint) -// 1 1: dual 64 bytes buffer by toggle bit bUH_R_TOG selection for receiving (IN endpoint), total=128bytes - -#define R16_UEP0_DMA (*((PUINT16V)(0x40023410))) // endpoint 0 DMA buffer address -#define R16_UEP1_DMA (*((PUINT16V)(0x40023414))) // endpoint 1 DMA buffer address -#define R16_UEP2_DMA (*((PUINT16V)(0x40023418))) // endpoint 2 DMA buffer address -#define R16_UH_RX_DMA R16_UEP2_DMA // host rx endpoint buffer high address -#define R16_UEP3_DMA (*((PUINT16V)(0x4002341c))) // endpoint 3 DMA buffer address -#define R16_UH_TX_DMA R16_UEP3_DMA // host tx endpoint buffer high address -#define R32_USB_EP0_CTRL (*((PUINT32V)(0x40023420))) // endpoint 0 control & transmittal length -#define R8_UEP0_T_LEN (*((PUINT8V)(0x40023420))) // endpoint 0 transmittal length -#define R8_UEP0_CTRL (*((PUINT8V)(0x40023422))) // endpoint 0 control -#define R32_USB_EP1_CTRL (*((PUINT32V)(0x40023424))) // endpoint 1 control & transmittal length -#define R8_UEP1_T_LEN (*((PUINT8V)(0x40023424))) // endpoint 1 transmittal length -#define R8_UEP1_CTRL (*((PUINT8V)(0x40023426))) // endpoint 1 control -#define RB_UEP_R_TOG 0x80 // expected data toggle flag of USB endpoint X receiving (OUT): 0=DATA0, 1=DATA1 -#define RB_UEP_T_TOG 0x40 // prepared data toggle flag of USB endpoint X transmittal (IN): 0=DATA0, 1=DATA1 -#define RB_UEP_AUTO_TOG 0x10 // enable automatic toggle after successful transfer completion on endpoint 1/2/3: 0=manual toggle, 1=automatic toggle -#define RB_UEP_R_RES1 0x08 // handshake response type high bit for USB endpoint X receiving (OUT) -#define RB_UEP_R_RES0 0x04 // handshake response type low bit for USB endpoint X receiving (OUT) -#define MASK_UEP_R_RES 0x0C // bit mask of handshake response type for USB endpoint X receiving (OUT) -#define UEP_R_RES_ACK 0x00 -#define UEP_R_RES_TOUT 0x04 -#define UEP_R_RES_NAK 0x08 -#define UEP_R_RES_STALL 0x0C -// RB_UEP_R_RES1 & RB_UEP_R_RES0: handshake response type for USB endpoint X receiving (OUT) -// 00: ACK (ready) -// 01: no response, time out to host, for non-zero endpoint isochronous transactions -// 10: NAK (busy) -// 11: STALL (error) -#define RB_UEP_T_RES1 0x02 // handshake response type high bit for USB endpoint X transmittal (IN) -#define RB_UEP_T_RES0 0x01 // handshake response type low bit for USB endpoint X transmittal (IN) -#define MASK_UEP_T_RES 0x03 // bit mask of handshake response type for USB endpoint X transmittal (IN) -#define UEP_T_RES_ACK 0x00 -#define UEP_T_RES_TOUT 0x01 -#define UEP_T_RES_NAK 0x02 -#define UEP_T_RES_STALL 0x03 -// bUEP_T_RES1 & bUEP_T_RES0: handshake response type for USB endpoint X transmittal (IN) -// 00: DATA0 or DATA1 then expecting ACK (ready) -// 01: DATA0 or DATA1 then expecting no response, time out from host, for non-zero endpoint isochronous transactions -// 10: NAK (busy) -// 11: STALL (error) - -#define R8_UH_SETUP R8_UEP1_CTRL // host aux setup -#define RB_UH_PRE_PID_EN 0x80 // USB host PRE PID enable for low speed device via hub -#define RB_UH_SOF_EN 0x40 // USB host automatic SOF enable - -#define R32_USB_EP2_CTRL (*((PUINT32V)(0x40023428))) // endpoint 2 control & transmittal length -#define R8_UEP2_T_LEN (*((PUINT8V)(0x40023428))) // endpoint 2 transmittal length -#define R8_UEP2_CTRL (*((PUINT8V)(0x4002342a))) // endpoint 2 control - -#define R8_UH_EP_PID R8_UEP2_T_LEN // host endpoint and PID -#define MASK_UH_TOKEN 0xF0 // bit mask of token PID for USB host transfer -#define MASK_UH_ENDP 0x0F // bit mask of endpoint number for USB host transfer - -#define R8_UH_RX_CTRL R8_UEP2_CTRL // host receiver endpoint control -#define RB_UH_R_TOG 0x80 // expected data toggle flag of host receiving (IN): 0=DATA0, 1=DATA1 -#define RB_UH_R_AUTO_TOG 0x10 // enable automatic toggle after successful transfer completion: 0=manual toggle, 1=automatic toggle -#define RB_UH_R_RES 0x04 // prepared handshake response type for host receiving (IN): 0=ACK (ready), 1=no response, time out to device, for isochronous transactions - -#define R32_USB_EP3_CTRL (*((PUINT32V)(0x4002342c))) // endpoint 3 control & transmittal length -#define R8_UEP3_T_LEN (*((PUINT8V)(0x4002342c))) // endpoint 3 transmittal length -#define R8_UEP3_CTRL (*((PUINT8V)(0x4002342e))) // endpoint 3 control -#define R8_UH_TX_LEN R8_UEP3_T_LEN // host transmittal endpoint transmittal length - -#define R8_UH_TX_CTRL R8_UEP3_CTRL // host transmittal endpoint control -#define RB_UH_T_TOG 0x40 // prepared data toggle flag of host transmittal (SETUP/OUT): 0=DATA0, 1=DATA1 -#define RB_UH_T_AUTO_TOG 0x10 // enable automatic toggle after successful transfer completion: 0=manual toggle, 1=automatic toggle -#define RB_UH_T_RES 0x01 // expected handshake response type for host transmittal (SETUP/OUT): 0=ACK (ready), 1=no response, time out from device, for isochronous transactions - -#define R32_USB_EP4_CTRL (*((PUINT32V)(0x40023430))) // endpoint 4 control & transmittal length -#define R8_UEP4_T_LEN (*((PUINT8V)(0x40023430))) // endpoint 4 transmittal length -#define R8_UEP4_CTRL (*((PUINT8V)(0x40023432))) // endpoint 4 control - - -#ifdef __cplusplus -} -#endif - -#endif //__CH32F10x_USB_H - - -#ifndef __USB_TYPE__ -#define __USB_TYPE__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* USB constant and structure define */ - -/* USB PID */ -#ifndef USB_PID_SETUP -#define USB_PID_NULL 0x00 /* reserved PID */ -#define USB_PID_SOF 0x05 -#define USB_PID_SETUP 0x0D -#define USB_PID_IN 0x09 -#define USB_PID_OUT 0x01 -#define USB_PID_ACK 0x02 -#define USB_PID_NAK 0x0A -#define USB_PID_STALL 0x0E -#define USB_PID_DATA0 0x03 -#define USB_PID_DATA1 0x0B -#define USB_PID_PRE 0x0C -#endif - -/* USB standard device request code */ -#ifndef USB_GET_DESCRIPTOR -#define USB_GET_STATUS 0x00 -#define USB_CLEAR_FEATURE 0x01 -#define USB_SET_FEATURE 0x03 -#define USB_SET_ADDRESS 0x05 -#define USB_GET_DESCRIPTOR 0x06 -#define USB_SET_DESCRIPTOR 0x07 -#define USB_GET_CONFIGURATION 0x08 -#define USB_SET_CONFIGURATION 0x09 -#define USB_GET_INTERFACE 0x0A -#define USB_SET_INTERFACE 0x0B -#define USB_SYNCH_FRAME 0x0C -#endif - -/* USB hub class request code */ -#ifndef HUB_GET_DESCRIPTOR -#define HUB_GET_STATUS 0x00 -#define HUB_CLEAR_FEATURE 0x01 -#define HUB_GET_STATE 0x02 -#define HUB_SET_FEATURE 0x03 -#define HUB_GET_DESCRIPTOR 0x06 -#define HUB_SET_DESCRIPTOR 0x07 -#endif - -/* USB HID class request code */ -#ifndef HID_GET_REPORT -#define HID_GET_REPORT 0x01 -#define HID_GET_IDLE 0x02 -#define HID_GET_PROTOCOL 0x03 -#define HID_SET_REPORT 0x09 -#define HID_SET_IDLE 0x0A -#define HID_SET_PROTOCOL 0x0B -#endif - -/* Bit define for USB request type */ -#ifndef USB_REQ_TYP_MASK -#define USB_REQ_TYP_IN 0x80 /* control IN, device to host */ -#define USB_REQ_TYP_OUT 0x00 /* control OUT, host to device */ -#define USB_REQ_TYP_READ 0x80 /* control read, device to host */ -#define USB_REQ_TYP_WRITE 0x00 /* control write, host to device */ -#define USB_REQ_TYP_MASK 0x60 /* bit mask of request type */ -#define USB_REQ_TYP_STANDARD 0x00 -#define USB_REQ_TYP_CLASS 0x20 -#define USB_REQ_TYP_VENDOR 0x40 -#define USB_REQ_TYP_RESERVED 0x60 -#define USB_REQ_RECIP_MASK 0x1F /* bit mask of request recipient */ -#define USB_REQ_RECIP_DEVICE 0x00 -#define USB_REQ_RECIP_INTERF 0x01 -#define USB_REQ_RECIP_ENDP 0x02 -#define USB_REQ_RECIP_OTHER 0x03 -#endif - -/* USB request type for hub class request */ -#ifndef HUB_GET_HUB_DESCRIPTOR -#define HUB_CLEAR_HUB_FEATURE 0x20 -#define HUB_CLEAR_PORT_FEATURE 0x23 -#define HUB_GET_BUS_STATE 0xA3 -#define HUB_GET_HUB_DESCRIPTOR 0xA0 -#define HUB_GET_HUB_STATUS 0xA0 -#define HUB_GET_PORT_STATUS 0xA3 -#define HUB_SET_HUB_DESCRIPTOR 0x20 -#define HUB_SET_HUB_FEATURE 0x20 -#define HUB_SET_PORT_FEATURE 0x23 -#endif - -/* Hub class feature selectors */ -#ifndef HUB_PORT_RESET -#define HUB_C_HUB_LOCAL_POWER 0 -#define HUB_C_HUB_OVER_CURRENT 1 -#define HUB_PORT_CONNECTION 0 -#define HUB_PORT_ENABLE 1 -#define HUB_PORT_SUSPEND 2 -#define HUB_PORT_OVER_CURRENT 3 -#define HUB_PORT_RESET 4 -#define HUB_PORT_POWER 8 -#define HUB_PORT_LOW_SPEED 9 -#define HUB_C_PORT_CONNECTION 16 -#define HUB_C_PORT_ENABLE 17 -#define HUB_C_PORT_SUSPEND 18 -#define HUB_C_PORT_OVER_CURRENT 19 -#define HUB_C_PORT_RESET 20 -#endif - -/* USB descriptor type */ -#ifndef USB_DESCR_TYP_DEVICE -#define USB_DESCR_TYP_DEVICE 0x01 -#define USB_DESCR_TYP_CONFIG 0x02 -#define USB_DESCR_TYP_STRING 0x03 -#define USB_DESCR_TYP_INTERF 0x04 -#define USB_DESCR_TYP_ENDP 0x05 -#define USB_DESCR_TYP_QUALIF 0x06 -#define USB_DESCR_TYP_SPEED 0x07 -#define USB_DESCR_TYP_OTG 0x09 -#define USB_DESCR_TYP_HID 0x21 -#define USB_DESCR_TYP_REPORT 0x22 -#define USB_DESCR_TYP_PHYSIC 0x23 -#define USB_DESCR_TYP_CS_INTF 0x24 -#define USB_DESCR_TYP_CS_ENDP 0x25 -#define USB_DESCR_TYP_HUB 0x29 -#endif - -/* USB device class */ -#ifndef USB_DEV_CLASS_HUB -#define USB_DEV_CLASS_RESERVED 0x00 -#define USB_DEV_CLASS_AUDIO 0x01 -#define USB_DEV_CLASS_COMMUNIC 0x02 -#define USB_DEV_CLASS_HID 0x03 -#define USB_DEV_CLASS_MONITOR 0x04 -#define USB_DEV_CLASS_PHYSIC_IF 0x05 -#define USB_DEV_CLASS_POWER 0x06 -#define USB_DEV_CLASS_PRINTER 0x07 -#define USB_DEV_CLASS_STORAGE 0x08 -#define USB_DEV_CLASS_HUB 0x09 -#define USB_DEV_CLASS_VEN_SPEC 0xFF -#endif - -/* USB endpoint type and attributes */ -#ifndef USB_ENDP_TYPE_MASK -#define USB_ENDP_DIR_MASK 0x80 -#define USB_ENDP_ADDR_MASK 0x0F -#define USB_ENDP_TYPE_MASK 0x03 -#define USB_ENDP_TYPE_CTRL 0x00 -#define USB_ENDP_TYPE_ISOCH 0x01 -#define USB_ENDP_TYPE_BULK 0x02 -#define USB_ENDP_TYPE_INTER 0x03 -#endif - -#ifndef USB_DEVICE_ADDR -#define USB_DEVICE_ADDR 0x02 -#endif -#ifndef DEFAULT_ENDP0_SIZE -#define DEFAULT_ENDP0_SIZE 8 /* default maximum packet size for endpoint 0 */ -#endif -#ifndef MAX_PACKET_SIZE -#define MAX_PACKET_SIZE 64 /* maximum packet size */ -#endif -#ifndef USB_BO_CBW_SIZE -#define USB_BO_CBW_SIZE 0x1F -#define USB_BO_CSW_SIZE 0x0D -#endif -#ifndef USB_BO_CBW_SIG0 -#define USB_BO_CBW_SIG0 0x55 -#define USB_BO_CBW_SIG1 0x53 -#define USB_BO_CBW_SIG2 0x42 -#define USB_BO_CBW_SIG3 0x43 -#define USB_BO_CSW_SIG0 0x55 -#define USB_BO_CSW_SIG1 0x53 -#define USB_BO_CSW_SIG2 0x42 -#define USB_BO_CSW_SIG3 0x53 -#endif - -#ifndef __PACKED -#define __PACKED __packed -#endif - -typedef struct _USB_SETUP_REQ { - UINT8 bRequestType; - UINT8 bRequest; - UINT16 wValue; - UINT16 wIndex; - UINT16 wLength; -} __attribute__((packed)) USB_SETUP_REQ, *PUSB_SETUP_REQ; - - -typedef struct _USB_DEVICE_DESCR { - UINT8 bLength; - UINT8 bDescriptorType; - UINT16 bcdUSB; - UINT8 bDeviceClass; - UINT8 bDeviceSubClass; - UINT8 bDeviceProtocol; - UINT8 bMaxPacketSize0; - UINT16 idVendor; - UINT16 idProduct; - UINT16 bcdDevice; - UINT8 iManufacturer; - UINT8 iProduct; - UINT8 iSerialNumber; - UINT8 bNumConfigurations; -}__attribute__((packed)) USB_DEV_DESCR, *PUSB_DEV_DESCR; - - -typedef struct _USB_CONFIG_DESCR { - UINT8 bLength; - UINT8 bDescriptorType; - UINT16 wTotalLength; - UINT8 bNumInterfaces; - UINT8 bConfigurationValue; - UINT8 iConfiguration; - UINT8 bmAttributes; - UINT8 MaxPower; -}__attribute__((packed)) USB_CFG_DESCR, *PUSB_CFG_DESCR; - - -typedef struct _USB_INTERF_DESCR { - UINT8 bLength; - UINT8 bDescriptorType; - UINT8 bInterfaceNumber; - UINT8 bAlternateSetting; - UINT8 bNumEndpoints; - UINT8 bInterfaceClass; - UINT8 bInterfaceSubClass; - UINT8 bInterfaceProtocol; - UINT8 iInterface; -}__attribute__((packed)) USB_ITF_DESCR, *PUSB_ITF_DESCR; - - -typedef struct _USB_ENDPOINT_DESCR { - UINT8 bLength; - UINT8 bDescriptorType; - UINT8 bEndpointAddress; - UINT8 bmAttributes; - UINT16 wMaxPacketSize; - UINT8 bInterval; -}__attribute__((packed)) USB_ENDP_DESCR, *PUSB_ENDP_DESCR; - - -typedef struct _USB_CONFIG_DESCR_LONG { - USB_CFG_DESCR cfg_descr; - USB_ITF_DESCR itf_descr; - USB_ENDP_DESCR endp_descr[1]; -}__attribute__((packed)) USB_CFG_DESCR_LONG, *PUSB_CFG_DESCR_LONG; - - -typedef struct _USB_HUB_DESCR { - UINT8 bDescLength; - UINT8 bDescriptorType; - UINT8 bNbrPorts; - UINT8 wHubCharacteristicsL; - UINT8 wHubCharacteristicsH; - UINT8 bPwrOn2PwrGood; - UINT8 bHubContrCurrent; - UINT8 DeviceRemovable; - UINT8 PortPwrCtrlMask; -}__attribute__((packed)) USB_HUB_DESCR, *PUSB_HUB_DESCR; - - -typedef struct _USB_HID_DESCR { - UINT8 bLength; - UINT8 bDescriptorType; - UINT16 bcdHID; - UINT8 bCountryCode; - UINT8 bNumDescriptors; - UINT8 bDescriptorTypeX; - UINT8 wDescriptorLengthL; - UINT8 wDescriptorLengthH; -}__attribute__((packed)) USB_HID_DESCR, *PUSB_HID_DESCR; - - -typedef struct _UDISK_BOC_CBW {/* command of BulkOnly USB-FlashDisk */ - UINT32 mCBW_Sig; - UINT32 mCBW_Tag; - UINT32 mCBW_DataLen; /* uppest byte of data length, always is 0 */ - UINT8 mCBW_Flag; /* transfer direction and etc. */ - UINT8 mCBW_LUN; - UINT8 mCBW_CB_Len; /* length of command block */ - UINT8 mCBW_CB_Buf[16]; /* command block buffer */ -}__attribute__((packed)) UDISK_BOC_CBW, *PXUDISK_BOC_CBW; - - -typedef struct _UDISK_BOC_CSW {/* status of BulkOnly USB-FlashDisk */ - UINT32 mCBW_Sig; - UINT32 mCBW_Tag; - UINT32 mCSW_Residue; /* return: remainder bytes */ /* uppest byte of remainder length, always is 0 */ - UINT8 mCSW_Status; /* return: result status */ -}__attribute__((packed)) UDISK_BOC_CSW, *PXUDISK_BOC_CSW; - - -extern PUINT8 pEP0_RAM_Addr; //ep0(64)+ep4_out(64)+ep4_in(64) -extern PUINT8 pEP1_RAM_Addr; //ep1_out(64)+ep1_in(64) -extern PUINT8 pEP2_RAM_Addr; //ep2_out(64)+ep2_in(64) -extern PUINT8 pEP3_RAM_Addr; //ep3_out(64)+ep3_in(64) - -#define pSetupReqPak ((PUSB_SETUP_REQ)pEP0_RAM_Addr) -#define pEP0_DataBuf (pEP0_RAM_Addr) -#define pEP1_OUT_DataBuf (pEP1_RAM_Addr) -#define pEP1_IN_DataBuf (pEP1_RAM_Addr+64) -#define pEP2_OUT_DataBuf (pEP2_RAM_Addr) -#define pEP2_IN_DataBuf (pEP2_RAM_Addr+64) -#define pEP3_OUT_DataBuf (pEP3_RAM_Addr) -#define pEP3_IN_DataBuf (pEP3_RAM_Addr+64) -#define pEP4_OUT_DataBuf (pEP0_RAM_Addr+64) -#define pEP4_IN_DataBuf (pEP0_RAM_Addr+128) - - - -void USB_DeviceInit( void ); -void USB_DevTransProcess( void ); - -void DevEP1_OUT_Deal( UINT8 l ); -void DevEP2_OUT_Deal( UINT8 l ); -void DevEP3_OUT_Deal( UINT8 l ); -void DevEP4_OUT_Deal( UINT8 l ); - -void DevEP1_IN_Deal( UINT8 l ); -void DevEP2_IN_Deal( UINT8 l ); -void DevEP3_IN_Deal( UINT8 l ); -void DevEP4_IN_Deal( UINT8 l ); - -#define EP1_GetINSta() (R8_UEP1_CTRL&UEP_T_RES_NAK) -#define EP2_GetINSta() (R8_UEP2_CTRL&UEP_T_RES_NAK) -#define EP3_GetINSta() (R8_UEP3_CTRL&UEP_T_RES_NAK) -#define EP4_GetINSta() (R8_UEP4_CTRL&UEP_T_RES_NAK) -#ifdef __cplusplus -} -#endif - -#endif // __USB_TYPE__ - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usb_host.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usb_host.h deleted file mode 100644 index b119103..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_usb_host.h +++ /dev/null @@ -1,98 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_usb_host.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the USB firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_USBHOST_H__ -#define __CH32F10x_USBHOST_H__ - -#include "ch32f10x_usb.h" - -#ifdef __cplusplus - extern "C" { -#endif - -#define ERR_SUCCESS 0x00 -#define ERR_USB_CONNECT 0x15 -#define ERR_USB_DISCON 0x16 -#define ERR_USB_BUF_OVER 0x17 -#define ERR_USB_DISK_ERR 0x1F -#define ERR_USB_TRANSFER 0x20 -#define ERR_USB_UNSUPPORT 0xFB -#define ERR_USB_UNKNOWN 0xFE -#define ERR_AOA_PROTOCOL 0x41 - -#define ROOT_DEV_DISCONNECT 0 -#define ROOT_DEV_CONNECTED 1 -#define ROOT_DEV_FAILED 2 -#define ROOT_DEV_SUCCESS 3 -#define DEV_TYPE_KEYBOARD ( USB_DEV_CLASS_HID | 0x20 ) -#define DEV_TYPE_MOUSE ( USB_DEV_CLASS_HID | 0x30 ) -#define DEF_AOA_DEVICE 0xF0 -#define DEV_TYPE_UNKNOW 0xFF - -#define HUB_MAX_PORTS 4 -#define WAIT_USB_TOUT_200US 3000 - -typedef struct -{ - UINT8 DeviceStatus; - UINT8 DeviceAddress; - UINT8 DeviceSpeed; - UINT8 DeviceType; - UINT16 DeviceVID; - UINT16 DevicePID; - UINT8 GpVar[4]; - UINT8 GpHUBPortNum; -} _RootHubDev; - - -extern _RootHubDev ThisUsbDev; -extern UINT8 UsbDevEndp0Size; -extern UINT8 FoundNewDev; - -extern PUINT8 pHOST_RX_RAM_Addr; -extern PUINT8 pHOST_TX_RAM_Addr; -#define pSetupReq ((PUSB_SETUP_REQ)pHOST_TX_RAM_Addr) - -extern const UINT8 SetupGetDevDescr[]; -extern const UINT8 SetupGetCfgDescr[]; -extern const UINT8 SetupSetUsbAddr[]; -extern const UINT8 SetupSetUsbConfig[]; -extern const UINT8 SetupSetUsbInterface[]; -extern const UINT8 SetupClrEndpStall[]; - - -void DisableRootHubPort(void) ; -UINT8 AnalyzeRootHub( void ) ; -void SetHostUsbAddr( UINT8 addr ); -void SetUsbSpeed( UINT8 FullSpeed ); -void ResetRootHubPort(void); -UINT8 EnableRootHubPort(void); -void SelectHubPort( UINT8 HubPortIndex ); -UINT8 WaitUSB_Interrupt( void ); -UINT8 USBHostTransact( UINT8 endp_pid, UINT8 tog, UINT32 timeout ); -UINT8 HostCtrlTransfer( PUINT8 DataBuf, PUINT8 RetLen ); -void CopySetupReqPkg( const UINT8 *pReqPkt ); -UINT8 CtrlGetDeviceDescr( PUINT8 DataBuf ); -UINT8 CtrlGetConfigDescr( PUINT8 DataBuf ); -UINT8 CtrlSetUsbAddress( UINT8 addr ); -UINT8 CtrlSetUsbConfig( UINT8 cfg ); -UINT8 CtrlClearEndpStall( UINT8 endp ) ; -UINT8 CtrlSetUsbIntercace( UINT8 cfg ); - -void USB_HostInit( void ); -UINT8 InitRootDevice( PUINT8 DataBuf ); -UINT8 HubGetPortStatus( UINT8 HubPortIndex ); // ѯHUB˿״̬,TxBuffer -UINT8 HubSetPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ); // HUB˿ -UINT8 HubClearPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ); // HUB˿ -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_USBHOST_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_wwdg.h b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_wwdg.h deleted file mode 100644 index 4866962..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/inc/ch32f10x_wwdg.h +++ /dev/null @@ -1,42 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_wwdg.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the WWDG - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_WWDG_H -#define __CH32F10x_WWDG_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - - -/* WWDG_Prescaler */ -#define WWDG_Prescaler_1 ((uint32_t)0x00000000) -#define WWDG_Prescaler_2 ((uint32_t)0x00000080) -#define WWDG_Prescaler_4 ((uint32_t)0x00000100) -#define WWDG_Prescaler_8 ((uint32_t)0x00000180) - - -void WWDG_DeInit(void); -void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); -void WWDG_SetWindowValue(uint8_t WindowValue); -void WWDG_EnableIT(void); -void WWDG_SetCounter(uint8_t Counter); -void WWDG_Enable(uint8_t Counter); -FlagStatus WWDG_GetFlagStatus(void); -void WWDG_ClearFlag(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32F10x_WWDG_H */ - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_adc.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_adc.c deleted file mode 100644 index e30de88..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_adc.c +++ /dev/null @@ -1,1148 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_adc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the ADC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_adc.h" -#include "ch32f10x_rcc.h" - -/* ADC DISCNUM mask */ -#define CTLR1_DISCNUM_Reset ((uint32_t)0xFFFF1FFF) - -/* ADC DISCEN mask */ -#define CTLR1_DISCEN_Set ((uint32_t)0x00000800) -#define CTLR1_DISCEN_Reset ((uint32_t)0xFFFFF7FF) - -/* ADC JAUTO mask */ -#define CTLR1_JAUTO_Set ((uint32_t)0x00000400) -#define CTLR1_JAUTO_Reset ((uint32_t)0xFFFFFBFF) - -/* ADC JDISCEN mask */ -#define CTLR1_JDISCEN_Set ((uint32_t)0x00001000) -#define CTLR1_JDISCEN_Reset ((uint32_t)0xFFFFEFFF) - -/* ADC AWDCH mask */ -#define CTLR1_AWDCH_Reset ((uint32_t)0xFFFFFFE0) - -/* ADC Analog watchdog enable mode mask */ -#define CTLR1_AWDMode_Reset ((uint32_t)0xFF3FFDFF) - -/* CTLR1 register Mask */ -#define CTLR1_CLEAR_Mask ((uint32_t)0xFFF0FEFF) - -/* ADC ADON mask */ -#define CTLR2_ADON_Set ((uint32_t)0x00000001) -#define CTLR2_ADON_Reset ((uint32_t)0xFFFFFFFE) - -/* ADC DMA mask */ -#define CTLR2_DMA_Set ((uint32_t)0x00000100) -#define CTLR2_DMA_Reset ((uint32_t)0xFFFFFEFF) - -/* ADC RSTCAL mask */ -#define CTLR2_RSTCAL_Set ((uint32_t)0x00000008) - -/* ADC CAL mask */ -#define CTLR2_CAL_Set ((uint32_t)0x00000004) - -/* ADC SWSTART mask */ -#define CTLR2_SWSTART_Set ((uint32_t)0x00400000) - -/* ADC EXTTRIG mask */ -#define CTLR2_EXTTRIG_Set ((uint32_t)0x00100000) -#define CTLR2_EXTTRIG_Reset ((uint32_t)0xFFEFFFFF) - -/* ADC Software start mask */ -#define CTLR2_EXTTRIG_SWSTART_Set ((uint32_t)0x00500000) -#define CTLR2_EXTTRIG_SWSTART_Reset ((uint32_t)0xFFAFFFFF) - -/* ADC JEXTSEL mask */ -#define CTLR2_JEXTSEL_Reset ((uint32_t)0xFFFF8FFF) - -/* ADC JEXTTRIG mask */ -#define CTLR2_JEXTTRIG_Set ((uint32_t)0x00008000) -#define CTLR2_JEXTTRIG_Reset ((uint32_t)0xFFFF7FFF) - -/* ADC JSWSTART mask */ -#define CTLR2_JSWSTART_Set ((uint32_t)0x00200000) - -/* ADC injected software start mask */ -#define CTLR2_JEXTTRIG_JSWSTART_Set ((uint32_t)0x00208000) -#define CTLR2_JEXTTRIG_JSWSTART_Reset ((uint32_t)0xFFDF7FFF) - -/* ADC TSPD mask */ -#define CTLR2_TSVREFE_Set ((uint32_t)0x00800000) -#define CTLR2_TSVREFE_Reset ((uint32_t)0xFF7FFFFF) - -/* CTLR2 register Mask */ -#define CTLR2_CLEAR_Mask ((uint32_t)0xFFF1F7FD) - -/* ADC SQx mask */ -#define RSQR3_SQ_Set ((uint32_t)0x0000001F) -#define RSQR2_SQ_Set ((uint32_t)0x0000001F) -#define RSQR1_SQ_Set ((uint32_t)0x0000001F) - -/* RSQR1 register Mask */ -#define RSQR1_CLEAR_Mask ((uint32_t)0xFF0FFFFF) - -/* ADC JSQx mask */ -#define ISQR_JSQ_Set ((uint32_t)0x0000001F) - -/* ADC JL mask */ -#define ISQR_JL_Set ((uint32_t)0x00300000) -#define ISQR_JL_Reset ((uint32_t)0xFFCFFFFF) - -/* ADC SMPx mask */ -#define SAMPTR1_SMP_Set ((uint32_t)0x00000007) -#define SAMPTR2_SMP_Set ((uint32_t)0x00000007) - -/* ADC IDATARx registers offset */ -#define IDATAR_Offset ((uint8_t)0x28) - -/* ADC1 RDATAR register base address */ -#define RDATAR_ADDRESS ((uint32_t)0x4001244C) - -/********************************************************************* - * @fn ADC_DeInit - * - * @brief Deinitializes the ADCx peripheral registers to their default - * reset values. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return none - */ -void ADC_DeInit( ADC_TypeDef *ADCx ) -{ - if( ADCx == ADC1 ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_ADC1, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_ADC1, DISABLE ); - } -} - -/********************************************************************* - * @fn ADC_Init - * - * @brief Initializes the ADCx peripheral according to the specified - * parameters in the ADC_InitStruct. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_InitStruct - pointer to an ADC_InitTypeDef structure that - * contains the configuration information for the specified ADC - * peripheral. - * - * @return none - */ -void ADC_Init( ADC_TypeDef *ADCx, ADC_InitTypeDef *ADC_InitStruct ) -{ - uint32_t tmpreg1 = 0; - uint8_t tmpreg2 = 0; - - tmpreg1 = ADCx->CTLR1; - tmpreg1 &= CTLR1_CLEAR_Mask; - tmpreg1 |= ( uint32_t )( ADC_InitStruct->ADC_Mode | ( ( uint32_t )ADC_InitStruct->ADC_ScanConvMode << 8 ) ); - ADCx->CTLR1 = tmpreg1; - - tmpreg1 = ADCx->CTLR2; - tmpreg1 &= CTLR2_CLEAR_Mask; - tmpreg1 |= ( uint32_t )( ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv | - ( ( uint32_t )ADC_InitStruct->ADC_ContinuousConvMode << 1 ) ); - ADCx->CTLR2 = tmpreg1; - - tmpreg1 = ADCx->RSQR1; - tmpreg1 &= RSQR1_CLEAR_Mask; - tmpreg2 |= ( uint8_t )( ADC_InitStruct->ADC_NbrOfChannel - ( uint8_t )1 ); - tmpreg1 |= ( uint32_t )tmpreg2 << 20; - ADCx->RSQR1 = tmpreg1; -} - -/********************************************************************* - * @fn ADC_StructInit - * - * @brief Fills each ADC_InitStruct member with its default value. - * - * @param ADC_InitStruct - pointer to an ADC_InitTypeDef structure that - * contains the configuration information for the specified ADC - * peripheral. - * - * @return none - */ -void ADC_StructInit( ADC_InitTypeDef *ADC_InitStruct ) -{ - ADC_InitStruct->ADC_Mode = ADC_Mode_Independent; - ADC_InitStruct->ADC_ScanConvMode = DISABLE; - ADC_InitStruct->ADC_ContinuousConvMode = DISABLE; - ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; - ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right; - ADC_InitStruct->ADC_NbrOfChannel = 1; -} - -/********************************************************************* - * @fn ADC_Cmd - * - * @brief Enables or disables the specified ADC peripheral. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void ADC_Cmd( ADC_TypeDef *ADCx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADCx->CTLR2 |= CTLR2_ADON_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_ADON_Reset; - } -} - -/********************************************************************* - * @fn ADC_DMACmd - * - * @brief Enables or disables the specified ADC DMA request. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void ADC_DMACmd( ADC_TypeDef *ADCx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADCx->CTLR2 |= CTLR2_DMA_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_DMA_Reset; - } -} - -/********************************************************************* - * @fn ADC_ITConfig - * - * @brief Enables or disables the specified ADC interrupts. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_IT - specifies the ADC interrupt sources to be enabled or disabled. - * ADC_IT_EOC - End of conversion interrupt mask. - * ADC_IT_AWD - Analog watchdog interrupt mask. - * ADC_IT_JEOC - End of injected conversion interrupt mask. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void ADC_ITConfig( ADC_TypeDef *ADCx, uint16_t ADC_IT, FunctionalState NewState ) -{ - uint8_t itmask = 0; - - itmask = ( uint8_t )ADC_IT; - - if( NewState != DISABLE ) - { - ADCx->CTLR1 |= itmask; - } - else - { - ADCx->CTLR1 &= ( ~( uint32_t )itmask ); - } -} - -/********************************************************************* - * @fn ADC_ResetCalibration - * - * @brief Resets the selected ADC calibration registers. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return none - */ -void ADC_ResetCalibration( ADC_TypeDef *ADCx ) -{ - ADCx->CTLR2 |= CTLR2_RSTCAL_Set; -} - -/********************************************************************* - * @fn ADC_GetResetCalibrationStatus - * - * @brief Gets the selected ADC reset calibration registers status. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus ADC_GetResetCalibrationStatus( ADC_TypeDef *ADCx ) -{ - FlagStatus bitstatus = RESET; - - if( ( ADCx->CTLR2 & CTLR2_RSTCAL_Set ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_StartCalibration - * - * @brief Starts the selected ADC calibration process. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return None - */ -void ADC_StartCalibration( ADC_TypeDef *ADCx ) -{ - ADCx->CTLR2 |= CTLR2_CAL_Set; -} - -/********************************************************************* - * @fn ADC_GetCalibrationStatus - * - * @brief Gets the selected ADC calibration status. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus ADC_GetCalibrationStatus( ADC_TypeDef *ADCx ) -{ - FlagStatus bitstatus = RESET; - - if( ( ADCx->CTLR2 & CTLR2_CAL_Set ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_SoftwareStartConvCmd - * - * @brief Enables or disables the selected ADC software start conversion. - * - * @param ADCx - where x can be 1 or 2 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void ADC_SoftwareStartConvCmd( ADC_TypeDef *ADCx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADCx->CTLR2 |= CTLR2_EXTTRIG_SWSTART_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_EXTTRIG_SWSTART_Reset; - } -} - -/********************************************************************* - * @fn ADC_GetSoftwareStartConvStatus - * - * @brief Gets the selected ADC Software start conversion Status. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return FlagStatus - SET or RESET. - */ -FlagStatus ADC_GetSoftwareStartConvStatus( ADC_TypeDef *ADCx ) -{ - FlagStatus bitstatus = RESET; - - if( ( ADCx->CTLR2 & CTLR2_SWSTART_Set ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_DiscModeChannelCountConfig - * - * @brief Configures the discontinuous mode for the selected ADC regular - * group channel. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * Number - specifies the discontinuous mode regular channel - * count value(1-8). - * - * @return None - */ -void ADC_DiscModeChannelCountConfig( ADC_TypeDef *ADCx, uint8_t Number ) -{ - uint32_t tmpreg1 = 0; - uint32_t tmpreg2 = 0; - - tmpreg1 = ADCx->CTLR1; - tmpreg1 &= CTLR1_DISCNUM_Reset; - tmpreg2 = Number - 1; - tmpreg1 |= tmpreg2 << 13; - ADCx->CTLR1 = tmpreg1; -} - -/********************************************************************* - * @fn ADC_DiscModeCmd - * - * @brief Enables or disables the discontinuous mode on regular group - * channel for the specified ADC. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_DiscModeCmd( ADC_TypeDef *ADCx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADCx->CTLR1 |= CTLR1_DISCEN_Set; - } - else - { - ADCx->CTLR1 &= CTLR1_DISCEN_Reset; - } -} - -/********************************************************************* - * @fn ADC_RegularChannelConfig - * - * @brief Configures for the selected ADC regular channel its corresponding - * rank in the sequencer and its sample time. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_Channel - the ADC channel to configure. - * ADC_Channel_0 - ADC Channel0 selected. - * ADC_Channel_1 - ADC Channel1 selected. - * ADC_Channel_2 - ADC Channel2 selected. - * ADC_Channel_3 - ADC Channel3 selected. - * ADC_Channel_4 - ADC Channel4 selected. - * ADC_Channel_5 - ADC Channel5 selected. - * ADC_Channel_6 - ADC Channel6 selected. - * ADC_Channel_7 - ADC Channel7 selected. - * ADC_Channel_8 - ADC Channel8 selected. - * ADC_Channel_9 - ADC Channel9 selected. - * ADC_Channel_10 - ADC Channel10 selected. - * ADC_Channel_11 - ADC Channel11 selected. - * ADC_Channel_12 - ADC Channel12 selected. - * ADC_Channel_13 - ADC Channel13 selected. - * ADC_Channel_14 - ADC Channel14 selected. - * ADC_Channel_15 - ADC Channel15 selected. - * ADC_Channel_16 - ADC Channel16 selected. - * ADC_Channel_17 - ADC Channel17 selected. - * Rank - The rank in the regular group sequencer. - * This parameter must be between 1 to 16. - * ADC_SampleTime - The sample time value to be set for the selected channel. - * ADC_SampleTime_1Cycles5 - Sample time equal to 1.5 cycles. - * ADC_SampleTime_7Cycles5 - Sample time equal to 7.5 cycles. - * ADC_SampleTime_13Cycles5 - Sample time equal to 13.5 cycles. - * ADC_SampleTime_28Cycles5 - Sample time equal to 28.5 cycles. - * ADC_SampleTime_41Cycles5 - Sample time equal to 41.5 cycles. - * ADC_SampleTime_55Cycles5 - Sample time equal to 55.5 cycles. - * ADC_SampleTime_71Cycles5 - Sample time equal to 71.5 cycles. - * ADC_SampleTime_239Cycles5 - Sample time equal to 239.5 cycles. - * - * @return None - */ -void ADC_RegularChannelConfig( ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime ) -{ - uint32_t tmpreg1 = 0, tmpreg2 = 0; - - if( ADC_Channel > ADC_Channel_9 ) - { - tmpreg1 = ADCx->SAMPTR1; - tmpreg2 = SAMPTR1_SMP_Set << ( 3 * ( ADC_Channel - 10 ) ); - tmpreg1 &= ~tmpreg2; - tmpreg2 = ( uint32_t )ADC_SampleTime << ( 3 * ( ADC_Channel - 10 ) ); - tmpreg1 |= tmpreg2; - ADCx->SAMPTR1 = tmpreg1; - } - else - { - tmpreg1 = ADCx->SAMPTR2; - tmpreg2 = SAMPTR2_SMP_Set << ( 3 * ADC_Channel ); - tmpreg1 &= ~tmpreg2; - tmpreg2 = ( uint32_t )ADC_SampleTime << ( 3 * ADC_Channel ); - tmpreg1 |= tmpreg2; - ADCx->SAMPTR2 = tmpreg1; - } - - if( Rank < 7 ) - { - tmpreg1 = ADCx->RSQR3; - tmpreg2 = RSQR3_SQ_Set << ( 5 * ( Rank - 1 ) ); - tmpreg1 &= ~tmpreg2; - tmpreg2 = ( uint32_t )ADC_Channel << ( 5 * ( Rank - 1 ) ); - tmpreg1 |= tmpreg2; - ADCx->RSQR3 = tmpreg1; - } - else if( Rank < 13 ) - { - tmpreg1 = ADCx->RSQR2; - tmpreg2 = RSQR2_SQ_Set << ( 5 * ( Rank - 7 ) ); - tmpreg1 &= ~tmpreg2; - tmpreg2 = ( uint32_t )ADC_Channel << ( 5 * ( Rank - 7 ) ); - tmpreg1 |= tmpreg2; - ADCx->RSQR2 = tmpreg1; - } - else - { - tmpreg1 = ADCx->RSQR1; - tmpreg2 = RSQR1_SQ_Set << ( 5 * ( Rank - 13 ) ); - tmpreg1 &= ~tmpreg2; - tmpreg2 = ( uint32_t )ADC_Channel << ( 5 * ( Rank - 13 ) ); - tmpreg1 |= tmpreg2; - ADCx->RSQR1 = tmpreg1; - } -} - -/********************************************************************* - * @fn ADC_ExternalTrigConvCmd - * - * @brief Enables or disables the ADCx conversion through external trigger. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_ExternalTrigConvCmd( ADC_TypeDef *ADCx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADCx->CTLR2 |= CTLR2_EXTTRIG_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_EXTTRIG_Reset; - } -} - -/********************************************************************* - * @fn ADC_GetConversionValue - * - * @brief Returns the last ADCx conversion result data for regular channel. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return ADCx->RDATAR - The Data conversion value. - */ -uint16_t ADC_GetConversionValue( ADC_TypeDef *ADCx ) -{ - return ( uint16_t ) ADCx->RDATAR; -} - -/********************************************************************* - * @fn ADC_GetDualModeConversionValue - * - * @brief Returns the last ADC1 and ADC2 conversion result data in dual mode. - * - * @return RDATAR_ADDRESS - The Data conversion value. - */ -uint32_t ADC_GetDualModeConversionValue( void ) -{ - return ( *( __IO uint32_t * ) RDATAR_ADDRESS ); -} - -/********************************************************************* - * @fn ADC_AutoInjectedConvCmd - * - * @brief Enables or disables the selected ADC automatic injected group - * conversion after regular one. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_AutoInjectedConvCmd( ADC_TypeDef *ADCx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADCx->CTLR1 |= CTLR1_JAUTO_Set; - } - else - { - ADCx->CTLR1 &= CTLR1_JAUTO_Reset; - } -} - -/********************************************************************* - * @fn ADC_InjectedDiscModeCmd - * - * @brief Enables or disables the discontinuous mode for injected group - * channel for the specified ADC. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_InjectedDiscModeCmd( ADC_TypeDef *ADCx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADCx->CTLR1 |= CTLR1_JDISCEN_Set; - } - else - { - ADCx->CTLR1 &= CTLR1_JDISCEN_Reset; - } -} - -/********************************************************************* - * @fn ADC_ExternalTrigInjectedConvConfig - * - * @brief Configures the ADCx external trigger for injected channels conversion. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_ExternalTrigInjecConv - specifies the ADC trigger to start - * injected conversion. - * ADC_ExternalTrigInjecConv_T1_TRGO - Timer1 TRGO event selected. - * ADC_ExternalTrigInjecConv_T1_CC4 - Timer1 capture compare4 selected. - * ADC_ExternalTrigInjecConv_T2_TRGO - Timer2 TRGO event selected. - * ADC_ExternalTrigInjecConv_T2_CC1 - Timer2 capture compare1 selected. - * ADC_ExternalTrigInjecConv_T3_CC4 - Timer3 capture compare4 selected. - * ADC_ExternalTrigInjecConv_T4_TRGO - Timer4 TRGO event selected. - * ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4 - External interrupt - * line 15 event selected. - * ADC_ExternalTrigInjecConv_None: Injected conversion started - * by software and not by external trigger. - * - * @return None - */ -void ADC_ExternalTrigInjectedConvConfig( ADC_TypeDef *ADCx, uint32_t ADC_ExternalTrigInjecConv ) -{ - uint32_t tmpreg = 0; - - tmpreg = ADCx->CTLR2; - tmpreg &= CTLR2_JEXTSEL_Reset; - tmpreg |= ADC_ExternalTrigInjecConv; - ADCx->CTLR2 = tmpreg; -} - -/********************************************************************* - * @fn ADC_ExternalTrigInjectedConvCmd - * - * @brief Enables or disables the ADCx injected channels conversion through - * external trigger. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_ExternalTrigInjectedConvCmd( ADC_TypeDef *ADCx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADCx->CTLR2 |= CTLR2_JEXTTRIG_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_JEXTTRIG_Reset; - } -} - -/********************************************************************* - * @fn ADC_SoftwareStartInjectedConvCmd - * - * @brief Enables or disables the selected ADC start of the injected - * channels conversion. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_SoftwareStartInjectedConvCmd( ADC_TypeDef *ADCx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADCx->CTLR2 |= CTLR2_JEXTTRIG_JSWSTART_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_JEXTTRIG_JSWSTART_Reset; - } -} - -/********************************************************************* - * @fn ADC_GetSoftwareStartInjectedConvCmdStatus - * - * @brief Gets the selected ADC Software start injected conversion Status. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus( ADC_TypeDef *ADCx ) -{ - FlagStatus bitstatus = RESET; - - if( ( ADCx->CTLR2 & CTLR2_JSWSTART_Set ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_InjectedChannelConfig - * - * @brief Configures for the selected ADC injected channel its corresponding - * rank in the sequencer and its sample time. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_Channel - the ADC channel to configure. - * ADC_Channel_0 - ADC Channel0 selected. - * ADC_Channel_1 - ADC Channel1 selected. - * ADC_Channel_2 - ADC Channel2 selected. - * ADC_Channel_3 - ADC Channel3 selected. - * ADC_Channel_4 - ADC Channel4 selected. - * ADC_Channel_5 - ADC Channel5 selected. - * ADC_Channel_6 - ADC Channel6 selected. - * ADC_Channel_7 - ADC Channel7 selected. - * ADC_Channel_8 - ADC Channel8 selected. - * ADC_Channel_9 - ADC Channel9 selected. - * ADC_Channel_10 - ADC Channel10 selected. - * ADC_Channel_11 - ADC Channel11 selected. - * ADC_Channel_12 - ADC Channel12 selected. - * ADC_Channel_13 - ADC Channel13 selected. - * ADC_Channel_14 - ADC Channel14 selected. - * ADC_Channel_15 - ADC Channel15 selected. - * ADC_Channel_16 - ADC Channel16 selected. - * ADC_Channel_17 - ADC Channel17 selected. - * Rank - The rank in the regular group sequencer. - * This parameter must be between 1 to 4. - * ADC_SampleTime - The sample time value to be set for the selected channel. - * ADC_SampleTime_1Cycles5 - Sample time equal to 1.5 cycles. - * ADC_SampleTime_7Cycles5 - Sample time equal to 7.5 cycles. - * ADC_SampleTime_13Cycles5 - Sample time equal to 13.5 cycles. - * ADC_SampleTime_28Cycles5 - Sample time equal to 28.5 cycles. - * ADC_SampleTime_41Cycles5 - Sample time equal to 41.5 cycles. - * ADC_SampleTime_55Cycles5 - Sample time equal to 55.5 cycles. - * ADC_SampleTime_71Cycles5 - Sample time equal to 71.5 cycles. - * ADC_SampleTime_239Cycles5 - Sample time equal to 239.5 cycles. - * - * @return None - */ -void ADC_InjectedChannelConfig( ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime ) -{ - uint32_t tmpreg1 = 0, tmpreg2 = 0, tmpreg3 = 0; - - if( ADC_Channel > ADC_Channel_9 ) - { - tmpreg1 = ADCx->SAMPTR1; - tmpreg2 = SAMPTR1_SMP_Set << ( 3 * ( ADC_Channel - 10 ) ); - tmpreg1 &= ~tmpreg2; - tmpreg2 = ( uint32_t )ADC_SampleTime << ( 3 * ( ADC_Channel - 10 ) ); - tmpreg1 |= tmpreg2; - ADCx->SAMPTR1 = tmpreg1; - } - else - { - tmpreg1 = ADCx->SAMPTR2; - tmpreg2 = SAMPTR2_SMP_Set << ( 3 * ADC_Channel ); - tmpreg1 &= ~tmpreg2; - tmpreg2 = ( uint32_t )ADC_SampleTime << ( 3 * ADC_Channel ); - tmpreg1 |= tmpreg2; - ADCx->SAMPTR2 = tmpreg1; - } - - tmpreg1 = ADCx->ISQR; - tmpreg3 = ( tmpreg1 & ISQR_JL_Set ) >> 20; - tmpreg2 = ISQR_JSQ_Set << ( 5 * ( uint8_t )( ( Rank + 3 ) - ( tmpreg3 + 1 ) ) ); - tmpreg1 &= ~tmpreg2; - tmpreg2 = ( uint32_t )ADC_Channel << ( 5 * ( uint8_t )( ( Rank + 3 ) - ( tmpreg3 + 1 ) ) ); - tmpreg1 |= tmpreg2; - ADCx->ISQR = tmpreg1; -} - -/********************************************************************* - * @fn ADC_InjectedSequencerLengthConfig - * - * @brief Configures the sequencer length for injected channels. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * Length - The sequencer length. - * This parameter must be a number between 1 to 4. - * - * @return None - */ -void ADC_InjectedSequencerLengthConfig( ADC_TypeDef *ADCx, uint8_t Length ) -{ - uint32_t tmpreg1 = 0; - uint32_t tmpreg2 = 0; - - tmpreg1 = ADCx->ISQR; - tmpreg1 &= ISQR_JL_Reset; - tmpreg2 = Length - 1; - tmpreg1 |= tmpreg2 << 20; - ADCx->ISQR = tmpreg1; -} - -/********************************************************************* - * @fn ADC_SetInjectedOffset - * - * @brief Set the injected channels conversion value offset. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_InjectedChannel: the ADC injected channel to set its offset. - * ADC_InjectedChannel_1 - Injected Channel1 selected. - * ADC_InjectedChannel_2 - Injected Channel2 selected. - * ADC_InjectedChannel_3 - Injected Channel3 selected. - * ADC_InjectedChannel_4 - Injected Channel4 selected. - * Offset - the offset value for the selected ADC injected channel. - * This parameter must be a 12bit value. - * - * @return None - */ -void ADC_SetInjectedOffset( ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset ) -{ - __IO uint32_t tmp = 0; - - tmp = ( uint32_t )ADCx; - tmp += ADC_InjectedChannel; - - *( __IO uint32_t * ) tmp = ( uint32_t )Offset; -} - -/********************************************************************* - * @fn ADC_GetInjectedConversionValue - * - * @brief Returns the ADC injected channel conversion result. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_InjectedChannel - the ADC injected channel to set its offset. - * ADC_InjectedChannel_1 - Injected Channel1 selected. - * ADC_InjectedChannel_2 - Injected Channel2 selected. - * ADC_InjectedChannel_3 - Injected Channel3 selected. - * ADC_InjectedChannel_4 - Injected Channel4 selected. - * - * @return tmp - The Data conversion value. - */ -uint16_t ADC_GetInjectedConversionValue( ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel ) -{ - __IO uint32_t tmp = 0; - - tmp = ( uint32_t )ADCx; - tmp += ADC_InjectedChannel + IDATAR_Offset; - - return ( uint16_t )( *( __IO uint32_t * ) tmp ); -} - -/********************************************************************* - * @fn ADC_AnalogWatchdogCmd - * - * @brief Enables or disables the analog watchdog on single/all regular - * or injected channels. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_AnalogWatchdog - the ADC analog watchdog configuration. - * ADC_AnalogWatchdog_SingleRegEnable - Analog watchdog on a - * single regular channel. - * ADC_AnalogWatchdog_SingleInjecEnable - Analog watchdog on a - * single injected channel. - * ADC_AnalogWatchdog_SingleRegOrInjecEnable - Analog watchdog - * on a single regular or injected channel. - * ADC_AnalogWatchdog_AllRegEnable - Analog watchdog on all - * regular channel. - * ADC_AnalogWatchdog_AllInjecEnable - Analog watchdog on all - * injected channel. - * ADC_AnalogWatchdog_AllRegAllInjecEnable - Analog watchdog on - * all regular and injected channels. - * ADC_AnalogWatchdog_None - No channel guarded by the analog - * watchdog. - * - * @return none - */ -void ADC_AnalogWatchdogCmd( ADC_TypeDef *ADCx, uint32_t ADC_AnalogWatchdog ) -{ - uint32_t tmpreg = 0; - - tmpreg = ADCx->CTLR1; - tmpreg &= CTLR1_AWDMode_Reset; - tmpreg |= ADC_AnalogWatchdog; - ADCx->CTLR1 = tmpreg; -} - -/********************************************************************* - * @fn ADC_AnalogWatchdogThresholdsConfig - * - * @brief Configures the high and low thresholds of the analog watchdog. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * HighThreshold - the ADC analog watchdog High threshold value. - * This parameter must be a 12bit value. - * LowThreshold - the ADC analog watchdog Low threshold value. - * This parameter must be a 12bit value. - * - * @return none - */ -void ADC_AnalogWatchdogThresholdsConfig( ADC_TypeDef *ADCx, uint16_t HighThreshold, - uint16_t LowThreshold ) -{ - ADCx->WDHTR = HighThreshold; - ADCx->WDLTR = LowThreshold; -} - -/********************************************************************* - * @fn ADC_AnalogWatchdogSingleChannelConfig - * - * @brief Configures the analog watchdog guarded single channel. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_Channel - the ADC channel to configure. - * ADC_Channel_0 - ADC Channel0 selected. - * ADC_Channel_1 - ADC Channel1 selected. - * ADC_Channel_2 - ADC Channel2 selected. - * ADC_Channel_3 - ADC Channel3 selected. - * ADC_Channel_4 - ADC Channel4 selected. - * ADC_Channel_5 - ADC Channel5 selected. - * ADC_Channel_6 - ADC Channel6 selected. - * ADC_Channel_7 - ADC Channel7 selected. - * ADC_Channel_8 - ADC Channel8 selected. - * ADC_Channel_9 - ADC Channel9 selected. - * ADC_Channel_10 - ADC Channel10 selected. - * ADC_Channel_11 - ADC Channel11 selected. - * ADC_Channel_12 - ADC Channel12 selected. - * ADC_Channel_13 - ADC Channel13 selected. - * ADC_Channel_14 - ADC Channel14 selected. - * ADC_Channel_15 - ADC Channel15 selected. - * ADC_Channel_16 - ADC Channel16 selected. - * ADC_Channel_17 - ADC Channel17 selected. - * - * @return None - */ -void ADC_AnalogWatchdogSingleChannelConfig( ADC_TypeDef *ADCx, uint8_t ADC_Channel ) -{ - uint32_t tmpreg = 0; - - tmpreg = ADCx->CTLR1; - tmpreg &= CTLR1_AWDCH_Reset; - tmpreg |= ADC_Channel; - ADCx->CTLR1 = tmpreg; -} - -/********************************************************************* - * @fn ADC_TempSensorVrefintCmd - * - * @brief Enables or disables the temperature sensor and Vrefint channel. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void ADC_TempSensorVrefintCmd( FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - ADC1->CTLR2 |= CTLR2_TSVREFE_Set; - } - else - { - ADC1->CTLR2 &= CTLR2_TSVREFE_Reset; - } -} - -/********************************************************************* - * @fn ADC_GetFlagStatus - * - * @brief Checks whether the specified ADC flag is set or not. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_FLAG - specifies the flag to check. - * ADC_FLAG_AWD - Analog watchdog flag. - * ADC_FLAG_EOC - End of conversion flag. - * ADC_FLAG_JEOC - End of injected group conversion flag. - * ADC_FLAG_JSTRT - Start of injected group conversion flag. - * ADC_FLAG_STRT - Start of regular group conversion flag. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus ADC_GetFlagStatus( ADC_TypeDef *ADCx, uint8_t ADC_FLAG ) -{ - FlagStatus bitstatus = RESET; - - if( ( ADCx->STATR & ADC_FLAG ) != ( uint8_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_ClearFlag - * - * @brief Clears the ADCx's pending flags. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_FLAG - specifies the flag to clear. - * ADC_FLAG_AWD - Analog watchdog flag. - * ADC_FLAG_EOC - End of conversion flag. - * ADC_FLAG_JEOC - End of injected group conversion flag. - * ADC_FLAG_JSTRT - Start of injected group conversion flag. - * ADC_FLAG_STRT - Start of regular group conversion flag. - * - * @return none - */ -void ADC_ClearFlag( ADC_TypeDef *ADCx, uint8_t ADC_FLAG ) -{ - ADCx->STATR = ~( uint32_t )ADC_FLAG; -} - -/********************************************************************* - * @fn ADC_GetITStatus - * - * @brief Checks whether the specified ADC interrupt has occurred or not. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_IT - specifies the ADC interrupt source to check. - * ADC_IT_EOC - End of conversion interrupt mask. - * ADC_IT_AWD - Analog watchdog interrupt mask. - * ADC_IT_JEOC - End of injected conversion interrupt mask. - * - * @return ITStatus: SET or RESET. - */ -ITStatus ADC_GetITStatus( ADC_TypeDef *ADCx, uint16_t ADC_IT ) -{ - ITStatus bitstatus = RESET; - uint32_t itmask = 0, enablestatus = 0; - - itmask = ADC_IT >> 8; - enablestatus = ( ADCx->CTLR1 & ( uint8_t )ADC_IT ) ; - - if( ( ( ADCx->STATR & itmask ) != ( uint32_t )RESET ) && enablestatus ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_ClearITPendingBit - * - * @brief Clears the ADCx's interrupt pending bits. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_IT - specifies the ADC interrupt pending bit to clear. - * ADC_IT_EOC - End of conversion interrupt mask. - * ADC_IT_AWD - Analog watchdog interrupt mask. - * ADC_IT_JEOC - End of injected conversion interrupt mask. - * - * @return none - */ -void ADC_ClearITPendingBit( ADC_TypeDef *ADCx, uint16_t ADC_IT ) -{ - uint8_t itmask = 0; - - itmask = ( uint8_t )( ADC_IT >> 8 ); - ADCx->STATR = ~( uint32_t )itmask; -} - -/********************************************************************* - * @fn TempSensor_Volt_To_Temper - * - * @brief Internal Temperature Sensor Voltage to temperature. - * - * @param Value - Voltage Value(mv). - * - * @return Temper - Temperature Value. - */ -s32 TempSensor_Volt_To_Temper( s32 Value ) -{ - s32 Temper, Refer_Volt, Refer_Temper; - s32 k = 43; - - Refer_Volt = ( s32 )( ( *( u32 * )0x1FFFF898 ) & 0x0000FFFF ); - Refer_Temper = ( s32 )( ( ( *( u32 * )0x1FFFF898 ) >> 16 ) & 0x0000FFFF ); - - Temper = Refer_Temper + ( ( Value - Refer_Volt ) * 10 + ( k >> 1 ) ) / k; - - return Temper; -} - -/********************************************************************* - * @fn Get_CalibrationValue - * - * @brief Get ADCx Calibration Value. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return CalibrationValue - */ -int16_t Get_CalibrationValue( ADC_TypeDef *ADCx ) -{ - __IO uint8_t i, j; - uint16_t buf[10]; - __IO uint16_t t; - - for( i = 0; i < 10; i++ ){ - ADC_ResetCalibration( ADCx ); - while( ADC_GetResetCalibrationStatus( ADCx ) ); - ADC_StartCalibration( ADCx ); - while( ADC_GetCalibrationStatus( ADCx ) ); - buf[i] = ADCx->RDATAR; - } - - for( i = 0; i < 10; i++ ){ - for( j = 0; j < 10; j++ ){ - if( buf[j] > buf[j + 1] ) - { - t = buf[j]; - buf[j] = buf[j + 1]; - buf[j] = t; - } - } - } - - t = 0; - for( i = 0; i < 6; i++ ){ - t += buf[i + 2]; - } - - t = ( t / 6 ) + ( ( t % 6 ) / 3 ); - - return ( int16_t )( 2048 - ( int16_t )t ); -} - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_bkp.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_bkp.c deleted file mode 100644 index f62d946..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_bkp.c +++ /dev/null @@ -1,242 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_bkp.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the BKP firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_bkp.h" -#include "ch32f10x_rcc.h" - -/* BKP registers bit address in the alias region */ -#define BKP_OFFSET (BKP_BASE - PERIPH_BASE) - -/* TPCTLR Register */ - -/* Alias word address of TPAL bit */ -#define TPCTLR_OFFSET (BKP_OFFSET + 0x30) -#define TPAL_BitNumber 0x01 -#define TPCTLR_TPAL_BB (PERIPH_BB_BASE + (TPCTLR_OFFSET * 32) + (TPAL_BitNumber * 4)) - -/* Alias word address of TPE bit */ -#define TPE_BitNumber 0x00 -#define TPCTLR_TPE_BB (PERIPH_BB_BASE + (TPCTLR_OFFSET * 32) + (TPE_BitNumber * 4)) - -/* TPCSR Register */ - -/* Alias word address of TPIE bit */ -#define TPCSR_OFFSET (BKP_OFFSET + 0x34) -#define TPIE_BitNumber 0x02 -#define TPCSR_TPIE_BB (PERIPH_BB_BASE + (TPCSR_OFFSET * 32) + (TPIE_BitNumber * 4)) - -/* Alias word address of TIF bit */ -#define TIF_BitNumber 0x09 -#define TPCSR_TIF_BB (PERIPH_BB_BASE + (TPCSR_OFFSET * 32) + (TIF_BitNumber * 4)) - -/* Alias word address of TEF bit */ -#define TEF_BitNumber 0x08 -#define TPCSR_TEF_BB (PERIPH_BB_BASE + (TPCSR_OFFSET * 32) + (TEF_BitNumber * 4)) - -/* BKP registers bit mask */ - -/* OCTLR register bit mask */ -#define OCTLR_CAL_MASK ((uint16_t)0xFF80) -#define OCTLR_MASK ((uint16_t)0xFC7F) - -/********************************************************************* - * @fn BKP_DeInit - * - * @brief Deinitializes the BKP peripheral registers to their default reset values. - * - * @return none - */ -void BKP_DeInit( void ) -{ - RCC_BackupResetCmd( ENABLE ); - RCC_BackupResetCmd( DISABLE ); -} - -/********************************************************************* - * @fn BKP_TamperPinLevelConfig - * - * @brief Configures the Tamper Pin active level. - * - * @param BKP_TamperPinLevel: specifies the Tamper Pin active level. - * BKP_TamperPinLevel_High - Tamper pin active on high level. - * BKP_TamperPinLevel_Low - Tamper pin active on low level. - * - * @return none - */ -void BKP_TamperPinLevelConfig( uint16_t BKP_TamperPinLevel ) -{ - *( __IO uint32_t * ) TPCTLR_TPAL_BB = BKP_TamperPinLevel; -} - -/********************************************************************* - * @fn BKP_TamperPinCmd - * - * @brief Enables or disables the Tamper Pin activation. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void BKP_TamperPinCmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) TPCTLR_TPE_BB = ( uint32_t )NewState; -} - -/********************************************************************* - * @fn BKP_ITConfig - * - * @brief Enables or disables the Tamper Pin Interrupt. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void BKP_ITConfig( FunctionalState NewState ) -{ - *( __IO uint32_t * ) TPCSR_TPIE_BB = ( uint32_t )NewState; -} - -/********************************************************************* - * @fn BKP_RTCOutputConfig - * - * @brief Select the RTC output source to output on the Tamper pin. - * - * @param BKP_RTCOutputSource - specifies the RTC output source. - * BKP_RTCOutputSource_None - no RTC output on the Tamper pin. - * BKP_RTCOutputSource_CalibClock - output the RTC clock with - * frequency divided by 64 on the Tamper pin. - * BKP_RTCOutputSource_Alarm - output the RTC Alarm pulse signal - * on the Tamper pin. - * BKP_RTCOutputSource_Second - output the RTC Second pulse - * signal on the Tamper pin. - * - * @return none - */ -void BKP_RTCOutputConfig( uint16_t BKP_RTCOutputSource ) -{ - uint16_t tmpreg = 0; - - tmpreg = BKP->OCTLR; - tmpreg &= OCTLR_MASK; - tmpreg |= BKP_RTCOutputSource; - BKP->OCTLR = tmpreg; -} - -/********************************************************************* - * @fn BKP_SetRTCCalibrationValue - * - * @brief Sets RTC Clock Calibration value. - * - * @param CalibrationValue - specifies the RTC Clock Calibration value. - * This parameter must be a number between 0 and 0x1F. - * - * @return none - */ -void BKP_SetRTCCalibrationValue( uint8_t CalibrationValue ) -{ - uint16_t tmpreg = 0; - - tmpreg = BKP->OCTLR; - tmpreg &= OCTLR_CAL_MASK; - tmpreg |= CalibrationValue; - BKP->OCTLR = tmpreg; -} - -/********************************************************************* - * @fn BKP_WriteBackupRegister - * - * @brief Writes user data to the specified Data Backup Register. - * - * @param BKP_DR - specifies the Data Backup Register. - * Data - data to write. - * - * @return none - */ -void BKP_WriteBackupRegister( uint16_t BKP_DR, uint16_t Data ) -{ - __IO uint32_t tmp = 0; - - tmp = ( uint32_t )BKP_BASE; - tmp += BKP_DR; - *( __IO uint32_t * ) tmp = Data; -} - -/********************************************************************* - * @fn BKP_ReadBackupRegister - * - * @brief Reads data from the specified Data Backup Register. - * - * @param BKP_DR - specifies the Data Backup Register. - * This parameter can be BKP_DRx where x=[1, 42]. - * - * @return none - */ -uint16_t BKP_ReadBackupRegister( uint16_t BKP_DR ) -{ - __IO uint32_t tmp = 0; - - tmp = ( uint32_t )BKP_BASE; - tmp += BKP_DR; - - return ( *( __IO uint16_t * ) tmp ); -} - -/********************************************************************* - * @fn BKP_GetFlagStatus - * - * @brief Checks whether the Tamper Pin Event flag is set or not. - * - * @return FlagStatus - SET or RESET. - */ -FlagStatus BKP_GetFlagStatus( void ) -{ - return ( FlagStatus )( *( __IO uint32_t * ) TPCSR_TEF_BB ); -} - -/********************************************************************* - * @fn BKP_ClearFlag - * - * @brief Clears Tamper Pin Event pending flag. - * - * @return none - */ -void BKP_ClearFlag( void ) -{ - BKP->TPCSR |= BKP_CTE; -} - -/********************************************************************* - * @fn BKP_GetITStatus - * - * @brief Checks whether the Tamper Pin Interrupt has occurred or not. - * - * @return ITStatus - SET or RESET. - */ -ITStatus BKP_GetITStatus( void ) -{ - return ( ITStatus )( *( __IO uint32_t * ) TPCSR_TIF_BB ); -} - -/********************************************************************* - * @fn BKP_ClearITPendingBit - * - * @brief Clears Tamper Pin Interrupt pending bit. - * - * @return none - */ -void BKP_ClearITPendingBit( void ) -{ - BKP->TPCSR |= BKP_CTI; -} - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_can.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_can.c deleted file mode 100644 index 86123ce..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_can.c +++ /dev/null @@ -1,1208 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_can.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the CAN firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_can.h" -#include "ch32f10x_rcc.h" - -/* CAN CTLR Register bits */ -#define CTLR_DBF ((uint32_t)0x00010000) - -/* CAN Mailbox Transmit Request */ -#define TMIDxR_TXRQ ((uint32_t)0x00000001) - -/* CAN FCTLR Register bits */ -#define FCTLR_FINIT ((uint32_t)0x00000001) - -/* Time out for INAK bit */ -#define INAK_TIMEOUT ((uint32_t)0x0000FFFF) -/* Time out for SLAK bit */ -#define SLAK_TIMEOUT ((uint32_t)0x0000FFFF) - - -/* Flags in TSTATR register */ -#define CAN_FLAGS_TSTATR ((uint32_t)0x08000000) -/* Flags in RFIFO1 register */ -#define CAN_FLAGS_RFIFO1 ((uint32_t)0x04000000) -/* Flags in RFIFO0 register */ -#define CAN_FLAGS_RFIFO0 ((uint32_t)0x02000000) -/* Flags in STATR register */ -#define CAN_FLAGS_STATR ((uint32_t)0x01000000) -/* Flags in ERRSR register */ -#define CAN_FLAGS_ERRSR ((uint32_t)0x00F00000) - -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02) - - -#define CAN_MODE_MASK ((uint32_t) 0x00000003) - -static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit); - -/********************************************************************* - * @fn CAN_DeInit - * - * @brief Deinitializes the CAN peripheral registers to their default - * reset values. - * - * @param CANx: where x can be 1 to select the CAN peripheral. - * - * @return none - */ -void CAN_DeInit(CAN_TypeDef* CANx) -{ - if (CANx == CAN1) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, DISABLE); - } -} - -/********************************************************************* - * @fn CAN_Init - * - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_InitStruct. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * CAN_InitStruct - pointer to a CAN_InitTypeDef structure that - * contains the configuration information for the CAN peripheral. - * - * @return InitStatus - CAN_InitStatus_Failed. - * CAN_InitStatus_Success. - */ -uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct) -{ - uint8_t InitStatus = CAN_InitStatus_Failed; - uint32_t wait_ack = 0x00000000; - - CANx->CTLR &= (~(uint32_t)CAN_CTLR_SLEEP); - CANx->CTLR |= CAN_CTLR_INRQ ; - - while (((CANx->STATR & CAN_STATR_INAK) != CAN_STATR_INAK) && (wait_ack != INAK_TIMEOUT)) - { - wait_ack++; - } - - if ((CANx->STATR & CAN_STATR_INAK) != CAN_STATR_INAK) - { - InitStatus = CAN_InitStatus_Failed; - } - else - { - if (CAN_InitStruct->CAN_TTCM == ENABLE) - { - CANx->CTLR |= CAN_CTLR_TTCM; - } - else - { - CANx->CTLR &= ~(uint32_t)CAN_CTLR_TTCM; - } - - if (CAN_InitStruct->CAN_ABOM == ENABLE) - { - CANx->CTLR |= CAN_CTLR_ABOM; - } - else - { - CANx->CTLR &= ~(uint32_t)CAN_CTLR_ABOM; - } - - if (CAN_InitStruct->CAN_AWUM == ENABLE) - { - CANx->CTLR |= CAN_CTLR_AWUM; - } - else - { - CANx->CTLR &= ~(uint32_t)CAN_CTLR_AWUM; - } - - if (CAN_InitStruct->CAN_NART == ENABLE) - { - CANx->CTLR |= CAN_CTLR_NART; - } - else - { - CANx->CTLR &= ~(uint32_t)CAN_CTLR_NART; - } - - if (CAN_InitStruct->CAN_RFLM == ENABLE) - { - CANx->CTLR |= CAN_CTLR_RFLM; - } - else - { - CANx->CTLR &= ~(uint32_t)CAN_CTLR_RFLM; - } - - if (CAN_InitStruct->CAN_TXFP == ENABLE) - { - CANx->CTLR |= CAN_CTLR_TXFP; - } - else - { - CANx->CTLR &= ~(uint32_t)CAN_CTLR_TXFP; - } - - CANx->BTIMR = (uint32_t)((uint32_t)CAN_InitStruct->CAN_Mode << 30) | \ - ((uint32_t)CAN_InitStruct->CAN_SJW << 24) | \ - ((uint32_t)CAN_InitStruct->CAN_BS1 << 16) | \ - ((uint32_t)CAN_InitStruct->CAN_BS2 << 20) | \ - ((uint32_t)CAN_InitStruct->CAN_Prescaler - 1); - CANx->CTLR &= ~(uint32_t)CAN_CTLR_INRQ; - wait_ack = 0; - - while (((CANx->STATR & CAN_STATR_INAK) == CAN_STATR_INAK) && (wait_ack != INAK_TIMEOUT)) - { - wait_ack++; - } - - if ((CANx->STATR & CAN_STATR_INAK) == CAN_STATR_INAK) - { - InitStatus = CAN_InitStatus_Failed; - } - else - { - InitStatus = CAN_InitStatus_Success ; - } - } - - return InitStatus; -} - -/********************************************************************* - * @fn CAN_FilterInit - * - * @brief Initializes the CAN peripheral according to the specified - * parameters in the CAN_FilterInitStruct. - * - * @param CAN_FilterInitStruct - pointer to a CAN_FilterInitTypeDef - * structure that contains the configuration information. - * - * @return none - */ -void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct) -{ - uint32_t filter_number_bit_pos = 0; - - filter_number_bit_pos = ((uint32_t)1) << CAN_FilterInitStruct->CAN_FilterNumber; - CAN1->FCTLR |= FCTLR_FINIT; - CAN1->FWR &= ~(uint32_t)filter_number_bit_pos; - - if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_16bit) - { - CAN1->FSCFGR &= ~(uint32_t)filter_number_bit_pos; - - CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 = - ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow) << 16) | - (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow); - - CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 = - ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) | - (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh); - } - - if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_32bit) - { - CAN1->FSCFGR |= filter_number_bit_pos; - - CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 = - ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh) << 16) | - (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow); - - CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 = - ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) | - (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow); - } - - if (CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdMask) - { - CAN1->FMCFGR &= ~(uint32_t)filter_number_bit_pos; - } - else - { - CAN1->FMCFGR |= (uint32_t)filter_number_bit_pos; - } - - if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO0) - { - CAN1->FAFIFOR &= ~(uint32_t)filter_number_bit_pos; - } - - if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO1) - { - CAN1->FAFIFOR |= (uint32_t)filter_number_bit_pos; - } - - if (CAN_FilterInitStruct->CAN_FilterActivation == ENABLE) - { - CAN1->FWR |= filter_number_bit_pos; - } - - CAN1->FCTLR &= ~FCTLR_FINIT; -} - -/********************************************************************* - * @fn CAN_StructInit - * - * @brief Fills each CAN_InitStruct member with its default value. - * - * @param CAN_InitStruct - pointer to a CAN_InitTypeDef structure which - * will be initialized. - * - * @return none - */ -void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct) -{ - CAN_InitStruct->CAN_TTCM = DISABLE; - CAN_InitStruct->CAN_ABOM = DISABLE; - CAN_InitStruct->CAN_AWUM = DISABLE; - CAN_InitStruct->CAN_NART = DISABLE; - CAN_InitStruct->CAN_RFLM = DISABLE; - CAN_InitStruct->CAN_TXFP = DISABLE; - CAN_InitStruct->CAN_Mode = CAN_Mode_Normal; - CAN_InitStruct->CAN_SJW = CAN_SJW_1tq; - CAN_InitStruct->CAN_BS1 = CAN_BS1_4tq; - CAN_InitStruct->CAN_BS2 = CAN_BS2_3tq; - CAN_InitStruct->CAN_Prescaler = 1; -} - -/********************************************************************* - * @fn CAN_SlaveStartBank - * - * @brief This function applies only to CH32 Connectivity line devices. - * - * @param CAN_BankNumber - Select the start slave bank filter from 1..27. - * - * @return none - */ -void CAN_SlaveStartBank(uint8_t CAN_BankNumber) -{ - CAN1->FCTLR |= FCTLR_FINIT; - CAN1->FCTLR &= (uint32_t)0xFFFFC0F1 ; - CAN1->FCTLR |= (uint32_t)(CAN_BankNumber)<<8; - CAN1->FCTLR &= ~FCTLR_FINIT; -} - -/********************************************************************* - * @fn CAN_DBGFreeze - * - * @brief Enables or disables the DBG Freeze for CAN. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState) -{ - if (NewState != DISABLE) - { - CANx->CTLR |= CTLR_DBF; - } - else - { - CANx->CTLR &= ~CTLR_DBF; - } -} - -/********************************************************************* - * @fn CAN_TTComModeCmd - * - * @brief Enables or disabes the CAN Time TriggerOperation communication mode. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState) -{ - if (NewState != DISABLE) - { - CANx->CTLR |= CAN_CTLR_TTCM; - - CANx->sTxMailBox[0].TXMDTR |= ((uint32_t)CAN_TXMDT0R_TGT); - CANx->sTxMailBox[1].TXMDTR |= ((uint32_t)CAN_TXMDT1R_TGT); - CANx->sTxMailBox[2].TXMDTR |= ((uint32_t)CAN_TXMDT2R_TGT); - } - else - { - CANx->CTLR &= (uint32_t)(~(uint32_t)CAN_CTLR_TTCM); - - CANx->sTxMailBox[0].TXMDTR &= ((uint32_t)~CAN_TXMDT0R_TGT); - CANx->sTxMailBox[1].TXMDTR &= ((uint32_t)~CAN_TXMDT1R_TGT); - CANx->sTxMailBox[2].TXMDTR &= ((uint32_t)~CAN_TXMDT2R_TGT); - } -} - -/********************************************************************* - * @fn CAN_Transmit - * - * @brief Initiates the transmission of a message. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * TxMessage - pointer to a structure which contains CAN Id, CAN - * DLC and CAN data. - * - * @return transmit_mailbox - The number of the mailbox that is used for - * transmission or CAN_TxStatus_NoMailBox if there is no empty mailbox. - */ -uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage) -{ - uint8_t transmit_mailbox = 0; - - if ((CANx->TSTATR&CAN_TSTATR_TME0) == CAN_TSTATR_TME0) - { - transmit_mailbox = 0; - } - else if ((CANx->TSTATR&CAN_TSTATR_TME1) == CAN_TSTATR_TME1) - { - transmit_mailbox = 1; - } - else if ((CANx->TSTATR&CAN_TSTATR_TME2) == CAN_TSTATR_TME2) - { - transmit_mailbox = 2; - } - else - { - transmit_mailbox = CAN_TxStatus_NoMailBox; - } - - if (transmit_mailbox != CAN_TxStatus_NoMailBox) - { - CANx->sTxMailBox[transmit_mailbox].TXMIR &= TMIDxR_TXRQ; - if (TxMessage->IDE == CAN_Id_Standard) - { - CANx->sTxMailBox[transmit_mailbox].TXMIR |= ((TxMessage->StdId << 21) | \ - TxMessage->RTR); - } - else - { - CANx->sTxMailBox[transmit_mailbox].TXMIR |= ((TxMessage->ExtId << 3) | \ - TxMessage->IDE | \ - TxMessage->RTR); - } - - TxMessage->DLC &= (uint8_t)0x0000000F; - CANx->sTxMailBox[transmit_mailbox].TXMDTR &= (uint32_t)0xFFFFFFF0; - CANx->sTxMailBox[transmit_mailbox].TXMDTR |= TxMessage->DLC; - - CANx->sTxMailBox[transmit_mailbox].TXMDLR = (((uint32_t)TxMessage->Data[3] << 24) | - ((uint32_t)TxMessage->Data[2] << 16) | - ((uint32_t)TxMessage->Data[1] << 8) | - ((uint32_t)TxMessage->Data[0])); - CANx->sTxMailBox[transmit_mailbox].TXMDHR = (((uint32_t)TxMessage->Data[7] << 24) | - ((uint32_t)TxMessage->Data[6] << 16) | - ((uint32_t)TxMessage->Data[5] << 8) | - ((uint32_t)TxMessage->Data[4])); - CANx->sTxMailBox[transmit_mailbox].TXMIR |= TMIDxR_TXRQ; - } - - return transmit_mailbox; -} - -/********************************************************************* - * @fn CAN_TransmitStatus - * - * @brief Checks the transmission of a message. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * TransmitMailbox - the number of the mailbox that is used for - * transmission. - * - * @return state - - * CAN_TxStatus_Ok. - * CAN_TxStatus_Failed. - */ -uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox) -{ - uint32_t state = 0; - - switch (TransmitMailbox) - { - case (CAN_TXMAILBOX_0): - state = CANx->TSTATR & (CAN_TSTATR_RQCP0 | CAN_TSTATR_TXOK0 | CAN_TSTATR_TME0); - break; - - case (CAN_TXMAILBOX_1): - state = CANx->TSTATR & (CAN_TSTATR_RQCP1 | CAN_TSTATR_TXOK1 | CAN_TSTATR_TME1); - break; - - case (CAN_TXMAILBOX_2): - state = CANx->TSTATR & (CAN_TSTATR_RQCP2 | CAN_TSTATR_TXOK2 | CAN_TSTATR_TME2); - break; - - default: - state = CAN_TxStatus_Failed; - break; - } - - switch (state) - { - case (0x0): - state = CAN_TxStatus_Pending; - break; - - case (CAN_TSTATR_RQCP0 | CAN_TSTATR_TME0): - state = CAN_TxStatus_Failed; - break; - - case (CAN_TSTATR_RQCP1 | CAN_TSTATR_TME1): - state = CAN_TxStatus_Failed; - break; - - case (CAN_TSTATR_RQCP2 | CAN_TSTATR_TME2): - state = CAN_TxStatus_Failed; - break; - - case (CAN_TSTATR_RQCP0 | CAN_TSTATR_TXOK0 | CAN_TSTATR_TME0): - state = CAN_TxStatus_Ok; - break; - - case (CAN_TSTATR_RQCP1 | CAN_TSTATR_TXOK1 | CAN_TSTATR_TME1): - state = CAN_TxStatus_Ok; - break; - - case (CAN_TSTATR_RQCP2 | CAN_TSTATR_TXOK2 | CAN_TSTATR_TME2): - state = CAN_TxStatus_Ok; - break; - - default: - state = CAN_TxStatus_Failed; - break; - } - - return (uint8_t) state; -} - -/********************************************************************* - * @fn CAN_CancelTransmit - * - * @brief Cancels a transmit request. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * Mailbox - Mailbox number. - * CAN_TXMAILBOX_0. - * CAN_TXMAILBOX_1. - * CAN_TXMAILBOX_2. - * - * @return none - */ -void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox) -{ - switch (Mailbox) - { - case (CAN_TXMAILBOX_0): - CANx->TSTATR |= CAN_TSTATR_ABRQ0; - break; - - case (CAN_TXMAILBOX_1): - CANx->TSTATR |= CAN_TSTATR_ABRQ1; - break; - - case (CAN_TXMAILBOX_2): - CANx->TSTATR |= CAN_TSTATR_ABRQ2; - break; - - default: - break; - } -} - -/********************************************************************* - * @fn CAN_Receive - * - * @brief Receives a message. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * FIFONumber - Receive FIFO number. - * CAN_FIFO0. - * CAN_FIFO1. - * RxMessage - pointer to a structure receive message which contains - * CAN Id, CAN DLC, CAN datas and FMI number. - * - * @return none - */ -void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage) -{ - RxMessage->IDE = (uint8_t)0x04 & CANx->sFIFOMailBox[FIFONumber].RXMIR; - - if (RxMessage->IDE == CAN_Id_Standard) - { - RxMessage->StdId = (uint32_t)0x000007FF & (CANx->sFIFOMailBox[FIFONumber].RXMIR >> 21); - } - else - { - RxMessage->ExtId = (uint32_t)0x1FFFFFFF & (CANx->sFIFOMailBox[FIFONumber].RXMIR >> 3); - } - - RxMessage->RTR = (uint8_t)0x02 & CANx->sFIFOMailBox[FIFONumber].RXMIR; - RxMessage->DLC = (uint8_t)0x0F & CANx->sFIFOMailBox[FIFONumber].RXMDTR; - RxMessage->FMI = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RXMDTR >> 8); - RxMessage->Data[0] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RXMDLR; - RxMessage->Data[1] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RXMDLR >> 8); - RxMessage->Data[2] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RXMDLR >> 16); - RxMessage->Data[3] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RXMDLR >> 24); - RxMessage->Data[4] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RXMDHR; - RxMessage->Data[5] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RXMDHR >> 8); - RxMessage->Data[6] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RXMDHR >> 16); - RxMessage->Data[7] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RXMDHR >> 24); - - if (FIFONumber == CAN_FIFO0) - { - CANx->RFIFO0 |= CAN_RFIFO0_RFOM0; - } - else - { - CANx->RFIFO1 |= CAN_RFIFO1_RFOM1; - } -} - -/********************************************************************* - * @fn CAN_FIFORelease - * - * @brief Releases the specified FIFO. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * FIFONumber - Receive FIFO number. - * CAN_FIFO0. - * CAN_FIFO1. - * - * @return none - */ -void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber) -{ - if (FIFONumber == CAN_FIFO0) - { - CANx->RFIFO0 |= CAN_RFIFO0_RFOM0; - } - else - { - CANx->RFIFO1 |= CAN_RFIFO1_RFOM1; - } -} - -/********************************************************************* - * @fn CAN_MessagePending - * - * @brief Returns the number of pending messages. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * FIFONumber - Receive FIFO number. - * CAN_FIFO0. - * CAN_FIFO1. - * - * @return message_pending: which is the number of pending message. - */ -uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber) -{ - uint8_t message_pending=0; - - if (FIFONumber == CAN_FIFO0) - { - message_pending = (uint8_t)(CANx->RFIFO0&(uint32_t)0x03); - } - else if (FIFONumber == CAN_FIFO1) - { - message_pending = (uint8_t)(CANx->RFIFO1&(uint32_t)0x03); - } - else - { - message_pending = 0; - } - - return message_pending; -} - -/********************************************************************* - * @fn CAN_OperatingModeRequest - * - * @brief Select the CAN Operation mode. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * CAN_OperatingMode - CAN Operating Mode. - * CAN_OperatingMode_Initialization. - * CAN_OperatingMode_Normal. - * CAN_OperatingMode_Sleep. - * - * @return status - - * CAN_ModeStatus_Failed - CAN failed entering the specific mode. - * CAN_ModeStatus_Success - CAN Succeed entering the specific mode. - */ -uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode) -{ - uint8_t status = CAN_ModeStatus_Failed; - uint32_t timeout = INAK_TIMEOUT; - - if (CAN_OperatingMode == CAN_OperatingMode_Initialization) - { - CANx->CTLR = (uint32_t)((CANx->CTLR & (uint32_t)(~(uint32_t)CAN_CTLR_SLEEP)) | CAN_CTLR_INRQ); - - while (((CANx->STATR & CAN_MODE_MASK) != CAN_STATR_INAK) && (timeout != 0)) - { - timeout--; - } - if ((CANx->STATR & CAN_MODE_MASK) != CAN_STATR_INAK) - { - status = CAN_ModeStatus_Failed; - } - else - { - status = CAN_ModeStatus_Success; - } - } - else if (CAN_OperatingMode == CAN_OperatingMode_Normal) - { - CANx->CTLR &= (uint32_t)(~(CAN_CTLR_SLEEP|CAN_CTLR_INRQ)); - - while (((CANx->STATR & CAN_MODE_MASK) != 0) && (timeout!=0)) - { - timeout--; - } - if ((CANx->STATR & CAN_MODE_MASK) != 0) - { - status = CAN_ModeStatus_Failed; - } - else - { - status = CAN_ModeStatus_Success; - } - } - else if (CAN_OperatingMode == CAN_OperatingMode_Sleep) - { - CANx->CTLR = (uint32_t)((CANx->CTLR & (uint32_t)(~(uint32_t)CAN_CTLR_INRQ)) | CAN_CTLR_SLEEP); - - while (((CANx->STATR & CAN_MODE_MASK) != CAN_STATR_SLAK) && (timeout!=0)) - { - timeout--; - } - if ((CANx->STATR & CAN_MODE_MASK) != CAN_STATR_SLAK) - { - status = CAN_ModeStatus_Failed; - } - else - { - status = CAN_ModeStatus_Success; - } - } - else - { - status = CAN_ModeStatus_Failed; - } - - return (uint8_t) status; -} - -/********************************************************************* - * @fn CAN_Sleep - * - * @brief Enters the low power mode. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * - * @return sleepstatus - - * CAN_Sleep_Ok. - * CAN_Sleep_Failed. - */ -uint8_t CAN_Sleep(CAN_TypeDef* CANx) -{ - uint8_t sleepstatus = CAN_Sleep_Failed; - - CANx->CTLR = (((CANx->CTLR) & (uint32_t)(~(uint32_t)CAN_CTLR_INRQ)) | CAN_CTLR_SLEEP); - - if ((CANx->STATR & (CAN_STATR_SLAK|CAN_STATR_INAK)) == CAN_STATR_SLAK) - { - sleepstatus = CAN_Sleep_Ok; - } - - return (uint8_t)sleepstatus; -} - -/********************************************************************* - * @fn CAN_WakeUp - * - * @brief Wakes the CAN up. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * - * @return wakeupstatus - - * CAN_WakeUp_Ok. - * CAN_WakeUp_Failed. - */ -uint8_t CAN_WakeUp(CAN_TypeDef* CANx) -{ - uint32_t wait_slak = SLAK_TIMEOUT; - uint8_t wakeupstatus = CAN_WakeUp_Failed; - - CANx->CTLR &= ~(uint32_t)CAN_CTLR_SLEEP; - - while(((CANx->STATR & CAN_STATR_SLAK) == CAN_STATR_SLAK)&&(wait_slak!=0x00)) - { - wait_slak--; - } - if((CANx->STATR & CAN_STATR_SLAK) != CAN_STATR_SLAK) - { - wakeupstatus = CAN_WakeUp_Ok; - } - - return (uint8_t)wakeupstatus; -} - -/********************************************************************* - * @fn CAN_GetLastErrorCode - * - * @brief Returns the CANx's last error code (LEC). - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * - * @return errorcode - specifies the Error code. - * CAN_ErrorCode_NoErr - No Error. - * CAN_ErrorCode_StuffErr - Stuff Error. - * CAN_ErrorCode_FormErr - Form Error. - * CAN_ErrorCode_ACKErr - Acknowledgment Error. - * CAN_ErrorCode_BitRecessiveErr - Bit Recessive Error. - * CAN_ErrorCode_BitDominantErr - Bit Dominant Error. - * CAN_ErrorCode_CRCErr - CRC Error. - * CAN_ErrorCode_SoftwareSetErr - Software Set Error. - */ -uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx) -{ - uint8_t errorcode=0; - - errorcode = (((uint8_t)CANx->ERRSR) & (uint8_t)CAN_ERRSR_LEC); - - return errorcode; -} - -/********************************************************************* - * @fn CAN_GetReceiveErrorCounter - * - * @brief Returns the CANx Receive Error Counter (REC). - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * - * @return counter - CAN Receive Error Counter. - */ -uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx) -{ - uint8_t counter=0; - - counter = (uint8_t)((CANx->ERRSR & CAN_ERRSR_REC)>> 24); - - return counter; -} - -/********************************************************************* - * @fn CAN_GetLSBTransmitErrorCounter - * - * @brief Returns the LSB of the 9-bit CANx Transmit Error Counter(TEC). - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * - * @return counter - LSB of the 9-bit CAN Transmit Error Counter. - */ -uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx) -{ - uint8_t counter=0; - - counter = (uint8_t)((CANx->ERRSR & CAN_ERRSR_TEC)>> 16); - - return counter; -} - -/********************************************************************* - * @fn CAN_ITConfig - * - * @brief Enables or disables the specified CANx interrupts. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * CAN_IT - specifies the CAN interrupt sources to be enabled or disabled. - * CAN_IT_TME. - * CAN_IT_FMP0. - * CAN_IT_FF0. - * CAN_IT_FOV0. - * CAN_IT_FMP1. - * CAN_IT_FF1. - * CAN_IT_FOV1. - * CAN_IT_EWG. - * CAN_IT_EPV. - * CAN_IT_LEC. - * CAN_IT_ERR. - * CAN_IT_WKU. - * CAN_IT_SLK. - * NewState - ENABLE or DISABLE. - * - * @return counter - LSB of the 9-bit CAN Transmit Error Counter. - */ -void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState) -{ - if (NewState != DISABLE) - { - CANx->INTENR |= CAN_IT; - } - else - { - CANx->INTENR &= ~CAN_IT; - } -} - -/********************************************************************* - * @fn CAN_GetFlagStatus - * - * @brief Checks whether the specified CAN flag is set or not. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * CAN_FLAG - specifies the flag to check. - * CAN_FLAG_EWG. - * CAN_FLAG_EPV. - * CAN_FLAG_BOF. - * CAN_FLAG_RQCP0. - * CAN_FLAG_RQCP1. - * CAN_FLAG_RQCP2. - * CAN_FLAG_FMP1. - * CAN_FLAG_FF1. - * CAN_FLAG_FOV1. - * CAN_FLAG_FMP0. - * CAN_FLAG_FF0. - * CAN_FLAG_FOV0. - * CAN_FLAG_WKU. - * CAN_FLAG_SLAK. - * CAN_FLAG_LEC. - * NewState - ENABLE or DISABLE. - * - * @return FlagStatus - SET or RESET. - */ -FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG) -{ - FlagStatus bitstatus = RESET; - - if((CAN_FLAG & CAN_FLAGS_ERRSR) != (uint32_t)RESET) - { - if ((CANx->ERRSR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - else if((CAN_FLAG & CAN_FLAGS_STATR) != (uint32_t)RESET) - { - if ((CANx->STATR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - else if((CAN_FLAG & CAN_FLAGS_TSTATR) != (uint32_t)RESET) - { - if ((CANx->TSTATR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - else if((CAN_FLAG & CAN_FLAGS_RFIFO0) != (uint32_t)RESET) - { - if ((CANx->RFIFO0 & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - else - { - if ((uint32_t)(CANx->RFIFO1 & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - - return bitstatus; -} - -/********************************************************************* - * @fn CAN_ClearFlag - * - * @brief Clears the CAN's pending flags. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * CAN_FLAG - specifies the flag to clear. - * CAN_FLAG_RQCP0. - * CAN_FLAG_RQCP1. - * CAN_FLAG_RQCP2. - * CAN_FLAG_FF1. - * CAN_FLAG_FOV1. - * CAN_FLAG_FF0. - * CAN_FLAG_FOV0. - * CAN_FLAG_WKU. - * CAN_FLAG_SLAK. - * CAN_FLAG_LEC. - * - * @return none - */ -void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG) -{ - uint32_t flagtmp=0; - - if (CAN_FLAG == CAN_FLAG_LEC) - { - CANx->ERRSR = (uint32_t)RESET; - } - else - { - flagtmp = CAN_FLAG & 0x000FFFFF; - - if ((CAN_FLAG & CAN_FLAGS_RFIFO0)!=(uint32_t)RESET) - { - CANx->RFIFO0 = (uint32_t)(flagtmp); - } - else if ((CAN_FLAG & CAN_FLAGS_RFIFO1)!=(uint32_t)RESET) - { - CANx->RFIFO1 = (uint32_t)(flagtmp); - } - else if ((CAN_FLAG & CAN_FLAGS_TSTATR)!=(uint32_t)RESET) - { - CANx->TSTATR = (uint32_t)(flagtmp); - } - else - { - CANx->STATR = (uint32_t)(flagtmp); - } - } -} -/********************************************************************* - * @fn CAN_GetITStatus - * - * @brief Checks whether the specified CANx interrupt has occurred or not. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * CAN_IT - specifies the CAN interrupt source to check. - * CAN_IT_TME. - * CAN_IT_FMP0. - * CAN_IT_FF0. - * CAN_IT_FOV0. - * CAN_IT_FMP1. - * CAN_IT_FF1. - * CAN_IT_FOV1. - * CAN_IT_WKU. - * CAN_IT_SLK. - * CAN_IT_EWG. - * CAN_IT_EPV. - * CAN_IT_BOF. - * CAN_IT_LEC. - * CAN_IT_ERR. - * - * @return ITStatus - SET or RESET. - */ -ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT) -{ - ITStatus itstatus = RESET; - - if((CANx->INTENR & CAN_IT) != RESET) - { - switch (CAN_IT) - { - case CAN_IT_TME: - itstatus = CheckITStatus(CANx->TSTATR, CAN_TSTATR_RQCP0|CAN_TSTATR_RQCP1|CAN_TSTATR_RQCP2); - break; - - case CAN_IT_FMP0: - itstatus = CheckITStatus(CANx->RFIFO0, CAN_RFIFO0_FMP0); - break; - - case CAN_IT_FF0: - itstatus = CheckITStatus(CANx->RFIFO0, CAN_RFIFO0_FULL0); - break; - - case CAN_IT_FOV0: - itstatus = CheckITStatus(CANx->RFIFO0, CAN_RFIFO0_FOVR0); - break; - - case CAN_IT_FMP1: - itstatus = CheckITStatus(CANx->RFIFO1, CAN_RFIFO1_FMP1); - break; - - case CAN_IT_FF1: - itstatus = CheckITStatus(CANx->RFIFO1, CAN_RFIFO1_FULL1); - break; - - case CAN_IT_FOV1: - itstatus = CheckITStatus(CANx->RFIFO1, CAN_RFIFO1_FOVR1); - break; - - case CAN_IT_WKU: - itstatus = CheckITStatus(CANx->STATR, CAN_STATR_WKUI); - break; - - case CAN_IT_SLK: - itstatus = CheckITStatus(CANx->STATR, CAN_STATR_SLAKI); - break; - - case CAN_IT_EWG: - itstatus = CheckITStatus(CANx->ERRSR, CAN_ERRSR_EWGF); - break; - - case CAN_IT_EPV: - itstatus = CheckITStatus(CANx->ERRSR, CAN_ERRSR_EPVF); - break; - - case CAN_IT_BOF: - itstatus = CheckITStatus(CANx->ERRSR, CAN_ERRSR_BOFF); - break; - - case CAN_IT_LEC: - itstatus = CheckITStatus(CANx->ERRSR, CAN_ERRSR_LEC); - break; - - case CAN_IT_ERR: - itstatus = CheckITStatus(CANx->STATR, CAN_STATR_ERRI); - break; - - default : - itstatus = RESET; - break; - } - } - else - { - itstatus = RESET; - } - - return itstatus; -} - -/********************************************************************* - * @fn CAN_ClearITPendingBit - * - * @brief Clears the CANx's interrupt pending bits. - * - * @param CANx - where x can be 1 to select the CAN peripheral. - * CAN_IT - specifies the interrupt pending bit to clear. - * CAN_IT_TME. - * CAN_IT_FF0. - * CAN_IT_FOV0. - * CAN_IT_FF1. - * CAN_IT_FOV1. - * CAN_IT_WKU. - * CAN_IT_SLK. - * CAN_IT_EWG. - * CAN_IT_EPV. - * CAN_IT_BOF. - * CAN_IT_LEC. - * CAN_IT_ERR. - * - * @return none - */ -void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT) -{ - switch (CAN_IT) - { - case CAN_IT_TME: - CANx->TSTATR = CAN_TSTATR_RQCP0|CAN_TSTATR_RQCP1|CAN_TSTATR_RQCP2; - break; - - case CAN_IT_FF0: - CANx->RFIFO0 = CAN_RFIFO0_FULL0; - break; - - case CAN_IT_FOV0: - CANx->RFIFO0 = CAN_RFIFO0_FOVR0; - break; - - case CAN_IT_FF1: - CANx->RFIFO1 = CAN_RFIFO1_FULL1; - break; - - case CAN_IT_FOV1: - CANx->RFIFO1 = CAN_RFIFO1_FOVR1; - break; - - case CAN_IT_WKU: - CANx->STATR = CAN_STATR_WKUI; - break; - - case CAN_IT_SLK: - CANx->STATR = CAN_STATR_SLAKI; - break; - - case CAN_IT_EWG: - CANx->STATR = CAN_STATR_ERRI; - break; - - case CAN_IT_EPV: - CANx->STATR = CAN_STATR_ERRI; - break; - - case CAN_IT_BOF: - CANx->STATR = CAN_STATR_ERRI; - break; - - case CAN_IT_LEC: - CANx->ERRSR = RESET; - CANx->STATR = CAN_STATR_ERRI; - break; - - case CAN_IT_ERR: - CANx->ERRSR = RESET; - CANx->STATR = CAN_STATR_ERRI; - break; - - default : - break; - } -} - -/********************************************************************* - * @fn CheckITStatus - * - * @brief Checks whether the CAN interrupt has occurred or not. - * - * @param CAN_Reg - specifies the CAN interrupt register to check - * It_Bit - specifies the interrupt source bit to check. - * - * @return ITStatus - SET or RESET. - */ -static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit) -{ - ITStatus pendingbitstatus = RESET; - - if ((CAN_Reg & It_Bit) != (uint32_t)RESET) - { - pendingbitstatus = SET; - } - else - { - pendingbitstatus = RESET; - } - - return pendingbitstatus; -} - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_crc.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_crc.c deleted file mode 100644 index f507d6e..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_crc.c +++ /dev/null @@ -1,107 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_crc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the CRC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_crc.h" - - -/********************************************************************* - * @fn CRC_ResetDR - * - * @brief Resets the CRC Data register (DR). - * - * @return none - */ -void CRC_ResetDR( void ) -{ - CRC->CTLR = CRC_CTLR_RESET; -} - -/********************************************************************* - * @fn CRC_CalcCRC - * - * @brief Computes the 32-bit CRC of a given data word(32-bit). - * - * @param Data - data word(32-bit) to compute its CRC. - * - * @return 32-bit CRC. - */ -uint32_t CRC_CalcCRC( uint32_t Data ) -{ - CRC->DATAR = Data; - - return ( CRC->DATAR ); -} - -/********************************************************************* - * @fn CRC_CalcBlockCRC - * - * @brief Computes the 32-bit CRC of a given buffer of data word(32-bit). - * - * @param pBuffer - pointer to the buffer containing the data to be computed. - * BufferLength - length of the buffer to be computed. - * - * @return 32-bit CRC. - */ -uint32_t CRC_CalcBlockCRC( uint32_t pBuffer[], uint32_t BufferLength ) -{ - uint32_t index = 0; - - for( index = 0; index < BufferLength; index++ ) - { - CRC->DATAR = pBuffer[index]; - } - - return ( CRC->DATAR ); -} - -/********************************************************************* - * @fn CRC_GetCRC - * - * @brief Returns the current CRC value. - * - * @return 32-bit CRC. - */ -uint32_t CRC_GetCRC( void ) -{ - return ( CRC->IDATAR ); -} - -/********************************************************************* - * @fn CRC_SetIDRegister - * - * @brief Stores a 8-bit data in the Independent Data(ID) register. - * - * @param IDValue - 8-bit value to be stored in the ID register. - * - * @return none - */ -void CRC_SetIDRegister( uint8_t IDValue ) -{ - CRC->IDATAR = IDValue; -} - -/********************************************************************* - * @fn CRC_GetIDRegister - * - * @brief Returns the 8-bit data stored in the Independent Data(ID) register. - * - * @return 8-bit value of the ID register. - */ -uint8_t CRC_GetIDRegister( void ) -{ - return ( CRC->IDATAR ); -} - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dac.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dac.c deleted file mode 100644 index 21c8b82..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dac.c +++ /dev/null @@ -1,253 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_dac.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the DAC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ****************************************************************************************/ -#include "ch32f10x_dac.h" -#include "ch32f10x_rcc.h" - -/* CTLR register Mask */ -#define CTLR_CLEAR_MASK ((uint32_t)0x00000FFE) - -/* DAC Dual Channels SWTR masks */ -#define DUAL_SWTR_SET ((uint32_t)0x00000003) -#define DUAL_SWTR_RESET ((uint32_t)0xFFFFFFFC) - -/* DHR registers offsets */ -#define DHR12R1_OFFSET ((uint32_t)0x00000008) -#define DHR12R2_OFFSET ((uint32_t)0x00000014) -#define DHR12RD_OFFSET ((uint32_t)0x00000020) - -/* DOR register offset */ -#define DOR_OFFSET ((uint32_t)0x0000002C) - - -/********************************************************************* - * @fn DAC_DeInit - * - * @brief Deinitializes the DAC peripheral registers to their default reset values. - * - * @return none - */ -void DAC_DeInit( void ) -{ - RCC_APB1PeriphResetCmd( RCC_APB1Periph_DAC, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_DAC, DISABLE ); -} - -/********************************************************************* - * @fn DAC_Init - * - * @brief Initializes the DAC peripheral according to the specified parameters in - * the DAC_InitStruct. - * - * @param DAC_Channel - the selected DAC channel. - * DAC_Channel_1 - DAC Channel1 selected - * DAC_Channel_2 - DAC Channel2 selected - * DAC_InitStruct - pointer to a DAC_InitTypeDef structure. - * - * @return none - */ -void DAC_Init( uint32_t DAC_Channel, DAC_InitTypeDef *DAC_InitStruct ) -{ - uint32_t tmpreg1 = 0, tmpreg2 = 0; - - tmpreg1 = DAC->CTLR; - tmpreg1 &= ~( CTLR_CLEAR_MASK << DAC_Channel ); - tmpreg2 = ( DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration | - DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer ); - tmpreg1 |= tmpreg2 << DAC_Channel; - DAC->CTLR = tmpreg1; -} - -/********************************************************************* - * @fn DAC_StructInit - * - * @brief Fills each DAC_InitStruct member with its default value. - * - * @param DAC_InitStruct - pointer to a DAC_InitTypeDef structure which will be initialized. - * - * @return none - */ -void DAC_StructInit( DAC_InitTypeDef *DAC_InitStruct ) -{ - DAC_InitStruct->DAC_Trigger = DAC_Trigger_None; - DAC_InitStruct->DAC_WaveGeneration = DAC_WaveGeneration_None; - DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; - DAC_InitStruct->DAC_OutputBuffer = DAC_OutputBuffer_Enable; -} - -/********************************************************************* - * @fn DAC_Cmd - * - * @brief Enables or disables the specified DAC channel. - * - * @param DAC_Channel - the selected DAC channel. - * DAC_Channel_1 - DAC Channel1 selected - * DAC_Channel_2 - DAC Channel2 selected - * NewState - new state of the DAC channel(ENABLE or DISABLE). - * - * @return none - */ -void DAC_Cmd( uint32_t DAC_Channel, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - DAC->CTLR |= ( DAC_EN1 << DAC_Channel ); - } - else - { - DAC->CTLR &= ~( DAC_EN1 << DAC_Channel ); - } -} - -/********************************************************************* - * @fn DAC_DMACmd - * - * @brief Enables or disables the specified DAC channel DMA request. - * - * @param DAC_Channel - the selected DAC channel. - * DAC_Channel_1 - DAC Channel1 selected - * DAC_Channel_2 - DAC Channel2 selected - * NewState - new state of the DAC channel(ENABLE or DISABLE). - * - * @return none - */ -void DAC_DMACmd( uint32_t DAC_Channel, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - DAC->CTLR |= ( DAC_DMAEN1 << DAC_Channel ); - } - else - { - DAC->CTLR &= ~( DAC_DMAEN1 << DAC_Channel ); - } -} - -/********************************************************************* - * @fn DAC_SoftwareTriggerCmd - * - * @brief Enables or disables the selected DAC channel software trigger. - * - * @param DAC_Channel - the selected DAC channel. - * DAC_Channel_1 - DAC Channel1 selected - * DAC_Channel_2 - DAC Channel2 selected - * NewState - new state of the DAC channel(ENABLE or DISABLE). - * - * @return none - */ -void DAC_SoftwareTriggerCmd( uint32_t DAC_Channel, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - DAC->SWTR |= ( uint32_t )DAC_SWTRIG1 << ( DAC_Channel >> 4 ); - } - else - { - DAC->SWTR &= ~( ( uint32_t )DAC_SWTRIG1 << ( DAC_Channel >> 4 ) ); - } -} - - -/********************************************************************* - * @fn DAC_WaveGenerationCmd - * - * @brief Enables or disables the selected DAC channel wave generation. - * - * @param DAC_Channel - the selected DAC channel. - * DAC_Channel_1 - DAC Channel1 selected - * DAC_Channel_2 - DAC Channel2 selected - * DAC_Wave - Specifies the wave type to enable or disable. - * DAC_Wave_Noise - noise wave generation - * DAC_Wave_Triangle - triangle wave generation - * NewState - new state of the DAC channel(ENABLE or DISABLE). - * - * @return none - */ -void DAC_WaveGenerationCmd( uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - DAC->CTLR |= DAC_Wave << DAC_Channel; - } - else - { - DAC->CTLR &= ~( DAC_Wave << DAC_Channel ); - } -} - -/********************************************************************* - * @fn DAC_SetChannel1Data - * - * @brief Set the specified data holding register value for DAC channel1. - * - * @param DAC_Align - Specifies the data alignment for DAC channel1. - * DAC_Align_8b_R - 8bit right data alignment selected - * DAC_Align_12b_L - 12bit left data alignment selected - * DAC_Align_12b_R - 12bit right data alignment selected - * Data - Data to be loaded in the selected data holding register. - * - * @return none - */ -void DAC_SetChannel1Data( uint32_t DAC_Align, uint16_t Data ) -{ - __IO uint32_t tmp = 0; - - tmp = ( uint32_t )DAC_BASE; - tmp += DHR12R1_OFFSET + DAC_Align; - - *( __IO uint32_t * ) tmp = Data; -} - -/********************************************************************* - * @fn DAC_SetChannel2Data - * - * @brief Set the specified data holding register value for DAC channel2. - * - * @param DAC_Align - Specifies the data alignment for DAC channel1. - * DAC_Align_8b_R - 8bit right data alignment selected - * DAC_Align_12b_L - 12bit left data alignment selected - * DAC_Align_12b_R - 12bit right data alignment selected - * Data - Data to be loaded in the selected data holding register. - * - * @return none - */ -void DAC_SetChannel2Data( uint32_t DAC_Align, uint16_t Data ) -{ - __IO uint32_t tmp = 0; - - tmp = ( uint32_t )DAC_BASE; - tmp += DHR12R2_OFFSET + DAC_Align; - - *( __IO uint32_t * )tmp = Data; -} - -/********************************************************************* - * @fn DAC_GetDataOutputValue - * - * @brief Returns the last data output value of the selected DAC channel. - * - * @param DAC_Channel - the selected DAC channel. - * DAC_Channel_1 - DAC Channel1 selected - * DAC_Channel_2 - DAC Channel2 selected - * - * @return none - */ -uint16_t DAC_GetDataOutputValue( uint32_t DAC_Channel ) -{ - __IO uint32_t tmp = 0; - - tmp = ( uint32_t ) DAC_BASE ; - tmp += DOR_OFFSET + ( ( uint32_t )DAC_Channel >> 2 ); - - return ( uint16_t )( *( __IO uint32_t * ) tmp ); -} - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dbgmcu.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dbgmcu.c deleted file mode 100644 index 21a9f09..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dbgmcu.c +++ /dev/null @@ -1,92 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_dbgmcu.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the DBGMCU firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ****************************************************************************************/ -#include "ch32f10x_dbgmcu.h" - -#define IDCODE_DEVID_MASK ((uint32_t)0x00000FFF) - -/********************************************************************* - * @fn DBGMCU_GetREVID - * - * @brief Returns the device identifier. - * - * @return Revision identifier. - */ -uint32_t DBGMCU_GetREVID( void ) -{ - return( DBGMCU->IDCODE >> 16 ); -} - -/********************************************************************* - * @fn DBGMCU_GetDEVID - * - * @brief Returns the device identifier. - * - * @return Device identifier. - */ -uint32_t DBGMCU_GetDEVID( void ) -{ - return( DBGMCU->IDCODE & IDCODE_DEVID_MASK ); -} - -/********************************************************************* - * @fn DBGMCU_Config - * - * @brief Configures the specified peripheral and low power mode behavior - * when the MCU under Debug mode. - * - * @param DBGMCU_Periph - specifies the peripheral and low power mode. - * DBGMCU_SLEEP - Keep debugger connection during SLEEP mode - * DBGMCU_STOP - Keep debugger connection during STOP mode - * DBGMCU_STANDBY - Keep debugger connection during STANDBY mode - * DBGMCU_IWDG_STOP - Debug IWDG stopped when Core is halted - * DBGMCU_WWDG_STOP - Debug WWDG stopped when Core is halted - * DBGMCU_TIM1_STOP - TIM1 counter stopped when Core is halted - * DBGMCU_TIM2_STOP - TIM2 counter stopped when Core is halted - * DBGMCU_TIM3_STOP - TIM3 counter stopped when Core is halted - * DBGMCU_TIM4_STOP - TIM4 counter stopped when Core is halted - * DBGMCU_CAN1_STOP -Debug CAN2 stopped when Core is halted - * DBGMCU_I2C1_SMBUS_TIMEOUT - I2C1 SMBUS timeout mode stopped when Core is halted - * DBGMCU_I2C2_SMBUS_TIMEOUT - I2C2 SMBUS timeout mode stopped when Core is halted - * DBGMCU_TIM5_STOP - TIM5 counter stopped when Core is halted - * DBGMCU_TIM6_STOP - TIM6 counter stopped when Core is halted - * DBGMCU_TIM7_STOP - TIM7 counter stopped when Core is halted - * DBGMCU_TIM8_STOP - TIM8 counter stopped when Core is halted - * DBGMCU_CAN2_STOP - Debug CAN2 stopped when Core is halted - * DBGMCU_TIM15_STOP - TIM15 counter stopped when Core is halted - * DBGMCU_TIM16_STOP - TIM16 counter stopped when Core is halted - * DBGMCU_TIM17_STOP - TIM17 counter stopped when Core is halted - * DBGMCU_TIM9_STOP - TIM9 counter stopped when Core is halted - * DBGMCU_TIM10_STOP - TIM10 counter stopped when Core is halted - * DBGMCU_TIM11_STOP - TIM11 counter stopped when Core is halted - * DBGMCU_TIM12_STOP - TIM12 counter stopped when Core is halted - * DBGMCU_TIM13_STOP - TIM13 counter stopped when Core is halted - * DBGMCU_TIM14_STOP - TIM14 counter stopped when Core is halted - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void DBGMCU_Config( uint32_t DBGMCU_Periph, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - DBGMCU->CFGR |= DBGMCU_Periph; - } - else - { - DBGMCU->CFGR &= ~DBGMCU_Periph; - } -} - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dma.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dma.c deleted file mode 100644 index 671ec56..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_dma.c +++ /dev/null @@ -1,555 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_dma.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the DMA firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "ch32f10x_dma.h" -#include "ch32f10x_rcc.h" - -/* DMA1 Channelx interrupt pending bit masks */ -#define DMA1_Channel1_IT_Mask ((uint32_t)(DMA_GIF1 | DMA_TCIF1 | DMA_HTIF1 | DMA_TEIF1)) -#define DMA1_Channel2_IT_Mask ((uint32_t)(DMA_GIF2 | DMA_TCIF2 | DMA_HTIF2 | DMA_TEIF2)) -#define DMA1_Channel3_IT_Mask ((uint32_t)(DMA_GIF3 | DMA_TCIF3 | DMA_HTIF3 | DMA_TEIF3)) -#define DMA1_Channel4_IT_Mask ((uint32_t)(DMA_GIF4 | DMA_TCIF4 | DMA_HTIF4 | DMA_TEIF4)) -#define DMA1_Channel5_IT_Mask ((uint32_t)(DMA_GIF5 | DMA_TCIF5 | DMA_HTIF5 | DMA_TEIF5)) -#define DMA1_Channel6_IT_Mask ((uint32_t)(DMA_GIF6 | DMA_TCIF6 | DMA_HTIF6 | DMA_TEIF6)) -#define DMA1_Channel7_IT_Mask ((uint32_t)(DMA_GIF7 | DMA_TCIF7 | DMA_HTIF7 | DMA_TEIF7)) - -/* DMA2 Channelx interrupt pending bit masks */ -#define DMA2_Channel1_IT_Mask ((uint32_t)(DMA_GIF1 | DMA_TCIF1 | DMA_HTIF1 | DMA_TEIF1)) -#define DMA2_Channel2_IT_Mask ((uint32_t)(DMA_GIF2 | DMA_TCIF2 | DMA_HTIF2 | DMA_TEIF2)) -#define DMA2_Channel3_IT_Mask ((uint32_t)(DMA_GIF3 | DMA_TCIF3 | DMA_HTIF3 | DMA_TEIF3)) -#define DMA2_Channel4_IT_Mask ((uint32_t)(DMA_GIF4 | DMA_TCIF4 | DMA_HTIF4 | DMA_TEIF4)) -#define DMA2_Channel5_IT_Mask ((uint32_t)(DMA_GIF5 | DMA_TCIF5 | DMA_HTIF5 | DMA_TEIF5)) - -/* DMA2 FLAG mask */ -#define FLAG_Mask ((uint32_t)0x10000000) - -/* DMA registers Masks */ -#define CFGR_CLEAR_Mask ((uint32_t)0xFFFF800F) - - -/********************************************************************* - * @fn DMA_DeInit - * - * @brief Deinitializes the DMAy Channelx registers to their default - * reset values. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * - * @return none - */ -void DMA_DeInit( DMA_Channel_TypeDef *DMAy_Channelx ) -{ - DMAy_Channelx->CFGR &= ( uint16_t )( ~DMA_CFGR1_EN ); - DMAy_Channelx->CFGR = 0; - DMAy_Channelx->CNTR = 0; - DMAy_Channelx->PADDR = 0; - DMAy_Channelx->MADDR = 0; - if( DMAy_Channelx == DMA1_Channel1 ) - { - DMA1->INTFCR |= DMA1_Channel1_IT_Mask; - } - else if( DMAy_Channelx == DMA1_Channel2 ) - { - DMA1->INTFCR |= DMA1_Channel2_IT_Mask; - } - else if( DMAy_Channelx == DMA1_Channel3 ) - { - DMA1->INTFCR |= DMA1_Channel3_IT_Mask; - } - else if( DMAy_Channelx == DMA1_Channel4 ) - { - DMA1->INTFCR |= DMA1_Channel4_IT_Mask; - } - else if( DMAy_Channelx == DMA1_Channel5 ) - { - DMA1->INTFCR |= DMA1_Channel5_IT_Mask; - } - else if( DMAy_Channelx == DMA1_Channel6 ) - { - DMA1->INTFCR |= DMA1_Channel6_IT_Mask; - } - else if( DMAy_Channelx == DMA1_Channel7 ) - { - DMA1->INTFCR |= DMA1_Channel7_IT_Mask; - } - else if( DMAy_Channelx == DMA2_Channel1 ) - { - DMA2->INTFCR |= DMA2_Channel1_IT_Mask; - } - else if( DMAy_Channelx == DMA2_Channel2 ) - { - DMA2->INTFCR |= DMA2_Channel2_IT_Mask; - } - else if( DMAy_Channelx == DMA2_Channel3 ) - { - DMA2->INTFCR |= DMA2_Channel3_IT_Mask; - } - else if( DMAy_Channelx == DMA2_Channel4 ) - { - DMA2->INTFCR |= DMA2_Channel4_IT_Mask; - } - else - { - if( DMAy_Channelx == DMA2_Channel5 ) - { - DMA2->INTFCR |= DMA2_Channel5_IT_Mask; - } - } -} - - -/********************************************************************* - * @fn DMA_Init - * - * @brief Initializes the DMAy Channelx according to the specified - * parameters in the DMA_InitStruct. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * DMA_InitStruct - pointer to a DMA_InitTypeDef structure that contains - * contains the configuration information for the specified DMA Channel. - * - * @return none - */ -void DMA_Init( DMA_Channel_TypeDef *DMAy_Channelx, DMA_InitTypeDef *DMA_InitStruct ) -{ - uint32_t tmpreg = 0; - - tmpreg = DMAy_Channelx->CFGR; - tmpreg &= CFGR_CLEAR_Mask; - tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode | - DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc | - DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize | - DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M; - - DMAy_Channelx->CFGR = tmpreg; - DMAy_Channelx->CNTR = DMA_InitStruct->DMA_BufferSize; - DMAy_Channelx->PADDR = DMA_InitStruct->DMA_PeripheralBaseAddr; - DMAy_Channelx->MADDR = DMA_InitStruct->DMA_MemoryBaseAddr; -} - -/********************************************************************* - * @fn DMA_StructInit - * - * @brief Fills each DMA_InitStruct member with its default value. - * - * @param DMA_InitStruct - pointer to a DMA_InitTypeDef structure which will - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the be initialized. - * - * @return none - */ -void DMA_StructInit( DMA_InitTypeDef *DMA_InitStruct ) -{ - DMA_InitStruct->DMA_PeripheralBaseAddr = 0; - DMA_InitStruct->DMA_MemoryBaseAddr = 0; - DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralSRC; - DMA_InitStruct->DMA_BufferSize = 0; - DMA_InitStruct->DMA_PeripheralInc = DMA_PeripheralInc_Disable; - DMA_InitStruct->DMA_MemoryInc = DMA_MemoryInc_Disable; - DMA_InitStruct->DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; - DMA_InitStruct->DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; - DMA_InitStruct->DMA_Mode = DMA_Mode_Normal; - DMA_InitStruct->DMA_Priority = DMA_Priority_Low; - DMA_InitStruct->DMA_M2M = DMA_M2M_Disable; -} - - -/********************************************************************* - * @fn DMA_Cmd - * - * @brief Enables or disables the specified DMAy Channelx. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * NewState - new state of the DMAy Channelx(ENABLE or DISABLE). - * - * @return none - */ -void DMA_Cmd( DMA_Channel_TypeDef *DMAy_Channelx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - DMAy_Channelx->CFGR |= DMA_CFGR1_EN; - } - else - { - DMAy_Channelx->CFGR &= ( uint16_t )( ~DMA_CFGR1_EN ); - } -} - -/********************************************************************* - * @fn DMA_ITConfig - * - * @brief Enables or disables the specified DMAy Channelx interrupts. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * DMA_IT - specifies the DMA interrupts sources to be enabled - * or disabled. - * DMA_IT_TC - Transfer complete interrupt mask - * DMA_IT_HT - Half transfer interrupt mask - * DMA_IT_TE - Transfer error interrupt mask - * NewState - new state of the DMAy Channelx(ENABLE or DISABLE). - * - * @return none - */ -void DMA_ITConfig( DMA_Channel_TypeDef *DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - DMAy_Channelx->CFGR |= DMA_IT; - } - else - { - DMAy_Channelx->CFGR &= ~DMA_IT; - } -} - -/********************************************************************* - * @fn DMA_SetCurrDataCounter - * - * @brief Sets the number of data units in the current DMAy Channelx transfer. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * DataNumber - The number of data units in the current DMAy Channelx - * transfer. - * - * @return none - */ -void DMA_SetCurrDataCounter( DMA_Channel_TypeDef *DMAy_Channelx, uint16_t DataNumber ) -{ - DMAy_Channelx->CNTR = DataNumber; -} - -/********************************************************************* - * @fn DMA_GetCurrDataCounter - * - * @brief Returns the number of remaining data units in the current - * DMAy Channelx transfer. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * - * @return DataNumber - The number of remaining data units in the current - * DMAy Channelx transfer. - */ -uint16_t DMA_GetCurrDataCounter( DMA_Channel_TypeDef *DMAy_Channelx ) -{ - return ( ( uint16_t )( DMAy_Channelx->CNTR ) ); -} - - -/********************************************************************* - * @fn DMA_GetFlagStatus - * - * @brief Checks whether the specified DMAy Channelx flag is set or not. - * - * @param DMAy_FLAG - specifies the flag to check. - * DMA1_FLAG_GL1 - DMA1 Channel1 global flag. - * DMA1_FLAG_TC1 - DMA1 Channel1 transfer complete flag. - * DMA1_FLAG_HT1 - DMA1 Channel1 half transfer flag. - * DMA1_FLAG_TE1 - DMA1 Channel1 transfer error flag. - * DMA1_FLAG_GL2 - DMA1 Channel2 global flag. - * DMA1_FLAG_TC2 - DMA1 Channel2 transfer complete flag. - * DMA1_FLAG_HT2 - DMA1 Channel2 half transfer flag. - * DMA1_FLAG_TE2 - DMA1 Channel2 transfer error flag. - * DMA1_FLAG_GL3 - DMA1 Channel3 global flag. - * DMA1_FLAG_TC3 - DMA1 Channel3 transfer complete flag. - * DMA1_FLAG_HT3 - DMA1 Channel3 half transfer flag. - * DMA1_FLAG_TE3 - DMA1 Channel3 transfer error flag. - * DMA1_FLAG_GL4 - DMA1 Channel4 global flag. - * DMA1_FLAG_TC4 - DMA1 Channel4 transfer complete flag. - * DMA1_FLAG_HT4 - DMA1 Channel4 half transfer flag. - * DMA1_FLAG_TE4 - DMA1 Channel4 transfer error flag. - * DMA1_FLAG_GL5 - DMA1 Channel5 global flag. - * DMA1_FLAG_TC5 - DMA1 Channel5 transfer complete flag. - * DMA1_FLAG_HT5 - DMA1 Channel5 half transfer flag. - * DMA1_FLAG_TE5 - DMA1 Channel5 transfer error flag. - * DMA1_FLAG_GL6 - DMA1 Channel6 global flag. - * DMA1_FLAG_TC6 - DMA1 Channel6 transfer complete flag. - * DMA1_FLAG_HT6 - DMA1 Channel6 half transfer flag. - * DMA1_FLAG_TE6 - DMA1 Channel6 transfer error flag. - * DMA1_FLAG_GL7 - DMA1 Channel7 global flag. - * DMA1_FLAG_TC7 - DMA1 Channel7 transfer complete flag. - * DMA1_FLAG_HT7 - DMA1 Channel7 half transfer flag. - * DMA1_FLAG_TE7 - DMA1 Channel7 transfer error flag. - * DMA2_FLAG_GL1 - DMA2 Channel1 global flag. - * DMA2_FLAG_TC1 - DMA2 Channel1 transfer complete flag. - * DMA2_FLAG_HT1 - DMA2 Channel1 half transfer flag. - * DMA2_FLAG_TE1 - DMA2 Channel1 transfer error flag. - * DMA2_FLAG_GL2 - DMA2 Channel2 global flag. - * DMA2_FLAG_TC2 - DMA2 Channel2 transfer complete flag. - * DMA2_FLAG_HT2 - DMA2 Channel2 half transfer flag. - * DMA2_FLAG_TE2 - DMA2 Channel2 transfer error flag. - * DMA2_FLAG_GL3 - DMA2 Channel3 global flag. - * DMA2_FLAG_TC3 - DMA2 Channel3 transfer complete flag. - * DMA2_FLAG_HT3 - DMA2 Channel3 half transfer flag. - * DMA2_FLAG_TE3 - DMA2 Channel3 transfer error flag. - * DMA2_FLAG_GL4 - DMA2 Channel4 global flag. - * DMA2_FLAG_TC4 - DMA2 Channel4 transfer complete flag. - * DMA2_FLAG_HT4 - DMA2 Channel4 half transfer flag. - * DMA2_FLAG_TE4 - DMA2 Channel4 transfer error flag. - * DMA2_FLAG_GL5 - DMA2 Channel5 global flag. - * DMA2_FLAG_TC5 - DMA2 Channel5 transfer complete flag. - * DMA2_FLAG_HT5 - DMA2 Channel5 half transfer flag. - * DMA2_FLAG_TE5 - DMA2 Channel5 transfer error flag. - * - * @return The new state of DMAy_FLAG (SET or RESET). - */ -FlagStatus DMA_GetFlagStatus( uint32_t DMAy_FLAG ) -{ - FlagStatus bitstatus = RESET; - uint32_t tmpreg = 0; - - if( ( DMAy_FLAG & FLAG_Mask ) != ( uint32_t )RESET ) - { - tmpreg = DMA2->INTFR ; - } - else - { - tmpreg = DMA1->INTFR ; - } - - if( ( tmpreg & DMAy_FLAG ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - - -/********************************************************************* - * @fn DMA_ClearFlag - * - * @brief Clears the DMAy Channelx's pending flags. - * - * @param DMAy_FLAG - specifies the flag to check. - * DMA1_FLAG_GL1 - DMA1 Channel1 global flag. - * DMA1_FLAG_TC1 - DMA1 Channel1 transfer complete flag. - * DMA1_FLAG_HT1 - DMA1 Channel1 half transfer flag. - * DMA1_FLAG_TE1 - DMA1 Channel1 transfer error flag. - * DMA1_FLAG_GL2 - DMA1 Channel2 global flag. - * DMA1_FLAG_TC2 - DMA1 Channel2 transfer complete flag. - * DMA1_FLAG_HT2 - DMA1 Channel2 half transfer flag. - * DMA1_FLAG_TE2 - DMA1 Channel2 transfer error flag. - * DMA1_FLAG_GL3 - DMA1 Channel3 global flag. - * DMA1_FLAG_TC3 - DMA1 Channel3 transfer complete flag. - * DMA1_FLAG_HT3 - DMA1 Channel3 half transfer flag. - * DMA1_FLAG_TE3 - DMA1 Channel3 transfer error flag. - * DMA1_FLAG_GL4 - DMA1 Channel4 global flag. - * DMA1_FLAG_TC4 - DMA1 Channel4 transfer complete flag. - * DMA1_FLAG_HT4 - DMA1 Channel4 half transfer flag. - * DMA1_FLAG_TE4 - DMA1 Channel4 transfer error flag. - * DMA1_FLAG_GL5 - DMA1 Channel5 global flag. - * DMA1_FLAG_TC5 - DMA1 Channel5 transfer complete flag. - * DMA1_FLAG_HT5 - DMA1 Channel5 half transfer flag. - * DMA1_FLAG_TE5 - DMA1 Channel5 transfer error flag. - * DMA1_FLAG_GL6 - DMA1 Channel6 global flag. - * DMA1_FLAG_TC6 - DMA1 Channel6 transfer complete flag. - * DMA1_FLAG_HT6 - DMA1 Channel6 half transfer flag. - * DMA1_FLAG_TE6 - DMA1 Channel6 transfer error flag. - * DMA1_FLAG_GL7 - DMA1 Channel7 global flag. - * DMA1_FLAG_TC7 - DMA1 Channel7 transfer complete flag. - * DMA1_FLAG_HT7 - DMA1 Channel7 half transfer flag. - * DMA1_FLAG_TE7 - DMA1 Channel7 transfer error flag. - * DMA2_FLAG_GL1 - DMA2 Channel1 global flag. - * DMA2_FLAG_TC1 - DMA2 Channel1 transfer complete flag. - * DMA2_FLAG_HT1 - DMA2 Channel1 half transfer flag. - * DMA2_FLAG_TE1 - DMA2 Channel1 transfer error flag. - * DMA2_FLAG_GL2 - DMA2 Channel2 global flag. - * DMA2_FLAG_TC2 - DMA2 Channel2 transfer complete flag. - * DMA2_FLAG_HT2 - DMA2 Channel2 half transfer flag. - * DMA2_FLAG_TE2 - DMA2 Channel2 transfer error flag. - * DMA2_FLAG_GL3 - DMA2 Channel3 global flag. - * DMA2_FLAG_TC3 - DMA2 Channel3 transfer complete flag. - * DMA2_FLAG_HT3 - DMA2 Channel3 half transfer flag. - * DMA2_FLAG_TE3 - DMA2 Channel3 transfer error flag. - * DMA2_FLAG_GL4 - DMA2 Channel4 global flag. - * DMA2_FLAG_TC4 - DMA2 Channel4 transfer complete flag. - * DMA2_FLAG_HT4 - DMA2 Channel4 half transfer flag. - * DMA2_FLAG_TE4 - DMA2 Channel4 transfer error flag. - * DMA2_FLAG_GL5 - DMA2 Channel5 global flag. - * DMA2_FLAG_TC5 - DMA2 Channel5 transfer complete flag. - * DMA2_FLAG_HT5 - DMA2 Channel5 half transfer flag. - * DMA2_FLAG_TE5 - DMA2 Channel5 transfer error flag. - * - * @return none - */ -void DMA_ClearFlag( uint32_t DMAy_FLAG ) -{ - if( ( DMAy_FLAG & FLAG_Mask ) != ( uint32_t )RESET ) - { - DMA2->INTFCR = DMAy_FLAG; - } - else - { - DMA1->INTFCR = DMAy_FLAG; - } -} - -/********************************************************************* - * @fn DMA_GetITStatus - * - * @brief Checks whether the specified DMAy Channelx interrupt has - * occurred or not. - * - * @param DMAy_IT - specifies the DMAy interrupt source to check. - * DMA1_IT_GL1 - DMA1 Channel1 global flag. - * DMA1_IT_TC1 - DMA1 Channel1 transfer complete flag. - * DMA1_IT_HT1 - DMA1 Channel1 half transfer flag. - * DMA1_IT_TE1 - DMA1 Channel1 transfer error flag. - * DMA1_IT_GL2 - DMA1 Channel2 global flag. - * DMA1_IT_TC2 - DMA1 Channel2 transfer complete flag. - * DMA1_IT_HT2 - DMA1 Channel2 half transfer flag. - * DMA1_IT_TE2 - DMA1 Channel2 transfer error flag. - * DMA1_IT_GL3 - DMA1 Channel3 global flag. - * DMA1_IT_TC3 - DMA1 Channel3 transfer complete flag. - * DMA1_IT_HT3 - DMA1 Channel3 half transfer flag. - * DMA1_IT_TE3 - DMA1 Channel3 transfer error flag. - * DMA1_IT_GL4 - DMA1 Channel4 global flag. - * DMA1_IT_TC4 - DMA1 Channel4 transfer complete flag. - * DMA1_IT_HT4 - DMA1 Channel4 half transfer flag. - * DMA1_IT_TE4 - DMA1 Channel4 transfer error flag. - * DMA1_IT_GL5 - DMA1 Channel5 global flag. - * DMA1_IT_TC5 - DMA1 Channel5 transfer complete flag. - * DMA1_IT_HT5 - DMA1 Channel5 half transfer flag. - * DMA1_IT_TE5 - DMA1 Channel5 transfer error flag. - * DMA1_IT_GL6 - DMA1 Channel6 global flag. - * DMA1_IT_TC6 - DMA1 Channel6 transfer complete flag. - * DMA1_IT_HT6 - DMA1 Channel6 half transfer flag. - * DMA1_IT_TE6 - DMA1 Channel6 transfer error flag. - * DMA1_IT_GL7 - DMA1 Channel7 global flag. - * DMA1_IT_TC7 - DMA1 Channel7 transfer complete flag. - * DMA1_IT_HT7 - DMA1 Channel7 half transfer flag. - * DMA1_IT_TE7 - DMA1 Channel7 transfer error flag. - * DMA2_IT_GL1 - DMA2 Channel1 global flag. - * DMA2_IT_TC1 - DMA2 Channel1 transfer complete flag. - * DMA2_IT_HT1 - DMA2 Channel1 half transfer flag. - * DMA2_IT_TE1 - DMA2 Channel1 transfer error flag. - * DMA2_IT_GL2 - DMA2 Channel2 global flag. - * DMA2_IT_TC2 - DMA2 Channel2 transfer complete flag. - * DMA2_IT_HT2 - DMA2 Channel2 half transfer flag. - * DMA2_IT_TE2 - DMA2 Channel2 transfer error flag. - * DMA2_IT_GL3 - DMA2 Channel3 global flag. - * DMA2_IT_TC3 - DMA2 Channel3 transfer complete flag. - * DMA2_IT_HT3 - DMA2 Channel3 half transfer flag. - * DMA2_IT_TE3 - DMA2 Channel3 transfer error flag. - * DMA2_IT_GL4 - DMA2 Channel4 global flag. - * DMA2_IT_TC4 - DMA2 Channel4 transfer complete flag. - * DMA2_IT_HT4 - DMA2 Channel4 half transfer flag. - * DMA2_IT_TE4 - DMA2 Channel4 transfer error flag. - * DMA2_IT_GL5 - DMA2 Channel5 global flag. - * DMA2_IT_TC5 - DMA2 Channel5 transfer complete flag. - * DMA2_IT_HT5 - DMA2 Channel5 half transfer flag. - * DMA2_IT_TE5 - DMA2 Channel5 transfer error flag. - * - * @return The new state of DMAy_IT (SET or RESET). - */ -ITStatus DMA_GetITStatus( uint32_t DMAy_IT ) -{ - ITStatus bitstatus = RESET; - uint32_t tmpreg = 0; - - if( ( DMAy_IT & FLAG_Mask ) != ( uint32_t )RESET ) - { - tmpreg = DMA2->INTFR; - } - else - { - tmpreg = DMA1->INTFR; - } - - if( ( tmpreg & DMAy_IT ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - - -/********************************************************************* - * @fn DMA_ClearITPendingBit - * - * @brief Clears the DMAy Channelx's interrupt pending bits. - * - * @param DMAy_IT - specifies the DMAy interrupt source to check. - * DMA1_IT_GL1 - DMA1 Channel1 global flag. - * DMA1_IT_TC1 - DMA1 Channel1 transfer complete flag. - * DMA1_IT_HT1 - DMA1 Channel1 half transfer flag. - * DMA1_IT_TE1 - DMA1 Channel1 transfer error flag. - * DMA1_IT_GL2 - DMA1 Channel2 global flag. - * DMA1_IT_TC2 - DMA1 Channel2 transfer complete flag. - * DMA1_IT_HT2 - DMA1 Channel2 half transfer flag. - * DMA1_IT_TE2 - DMA1 Channel2 transfer error flag. - * DMA1_IT_GL3 - DMA1 Channel3 global flag. - * DMA1_IT_TC3 - DMA1 Channel3 transfer complete flag. - * DMA1_IT_HT3 - DMA1 Channel3 half transfer flag. - * DMA1_IT_TE3 - DMA1 Channel3 transfer error flag. - * DMA1_IT_GL4 - DMA1 Channel4 global flag. - * DMA1_IT_TC4 - DMA1 Channel4 transfer complete flag. - * DMA1_IT_HT4 - DMA1 Channel4 half transfer flag. - * DMA1_IT_TE4 - DMA1 Channel4 transfer error flag. - * DMA1_IT_GL5 - DMA1 Channel5 global flag. - * DMA1_IT_TC5 - DMA1 Channel5 transfer complete flag. - * DMA1_IT_HT5 - DMA1 Channel5 half transfer flag. - * DMA1_IT_TE5 - DMA1 Channel5 transfer error flag. - * DMA1_IT_GL6 - DMA1 Channel6 global flag. - * DMA1_IT_TC6 - DMA1 Channel6 transfer complete flag. - * DMA1_IT_HT6 - DMA1 Channel6 half transfer flag. - * DMA1_IT_TE6 - DMA1 Channel6 transfer error flag. - * DMA1_IT_GL7 - DMA1 Channel7 global flag. - * DMA1_IT_TC7 - DMA1 Channel7 transfer complete flag. - * DMA1_IT_HT7 - DMA1 Channel7 half transfer flag. - * DMA1_IT_TE7 - DMA1 Channel7 transfer error flag. - * DMA2_IT_GL1 - DMA2 Channel1 global flag. - * DMA2_IT_TC1 - DMA2 Channel1 transfer complete flag. - * DMA2_IT_HT1 - DMA2 Channel1 half transfer flag. - * DMA2_IT_TE1 - DMA2 Channel1 transfer error flag. - * DMA2_IT_GL2 - DMA2 Channel2 global flag. - * DMA2_IT_TC2 - DMA2 Channel2 transfer complete flag. - * DMA2_IT_HT2 - DMA2 Channel2 half transfer flag. - * DMA2_IT_TE2 - DMA2 Channel2 transfer error flag. - * DMA2_IT_GL3 - DMA2 Channel3 global flag. - * DMA2_IT_TC3 - DMA2 Channel3 transfer complete flag. - * DMA2_IT_HT3 - DMA2 Channel3 half transfer flag. - * DMA2_IT_TE3 - DMA2 Channel3 transfer error flag. - * DMA2_IT_GL4 - DMA2 Channel4 global flag. - * DMA2_IT_TC4 - DMA2 Channel4 transfer complete flag. - * DMA2_IT_HT4 - DMA2 Channel4 half transfer flag. - * DMA2_IT_TE4 - DMA2 Channel4 transfer error flag. - * DMA2_IT_GL5 - DMA2 Channel5 global flag. - * DMA2_IT_TC5 - DMA2 Channel5 transfer complete flag. - * DMA2_IT_HT5 - DMA2 Channel5 half transfer flag. - * DMA2_IT_TE5 - DMA2 Channel5 transfer error flag. - * - * @return none - */ -void DMA_ClearITPendingBit( uint32_t DMAy_IT ) -{ - if( ( DMAy_IT & FLAG_Mask ) != ( uint32_t )RESET ) - { - DMA2->INTFCR = DMAy_IT; - } - else - { - DMA1->INTFCR = DMAy_IT; - } -} - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_exti.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_exti.c deleted file mode 100644 index aa28325..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_exti.c +++ /dev/null @@ -1,182 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_exti.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the EXTI firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ***************************************************************************************/ -#include "ch32f10x_exti.h" - -/* No interrupt selected */ -#define EXTI_LINENONE ((uint32_t)0x00000) - - -/********************************************************************* - * @fn EXTI_DeInit - * - * @brief Deinitializes the EXTI peripheral registers to their default - * reset values. - * - * @return none. - */ -void EXTI_DeInit( void ) -{ - EXTI->INTENR = 0x00000000; - EXTI->EVENR = 0x00000000; - EXTI->RTENR = 0x00000000; - EXTI->FTENR = 0x00000000; - EXTI->INTFR = 0x000FFFFF; -} - -/********************************************************************* - * @fn EXTI_Init - * - * @brief Initializes the EXTI peripheral according to the specified - * parameters in the EXTI_InitStruct. - * - * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure - * - * @return none. - */ -void EXTI_Init( EXTI_InitTypeDef *EXTI_InitStruct ) -{ - uint32_t tmp = 0; - - tmp = ( uint32_t )EXTI_BASE; - if( EXTI_InitStruct->EXTI_LineCmd != DISABLE ) - { - EXTI->INTENR &= ~EXTI_InitStruct->EXTI_Line; - EXTI->EVENR &= ~EXTI_InitStruct->EXTI_Line; - tmp += EXTI_InitStruct->EXTI_Mode; - *( __IO uint32_t * ) tmp |= EXTI_InitStruct->EXTI_Line; - EXTI->RTENR &= ~EXTI_InitStruct->EXTI_Line; - EXTI->FTENR &= ~EXTI_InitStruct->EXTI_Line; - if( EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling ) - { - EXTI->RTENR |= EXTI_InitStruct->EXTI_Line; - EXTI->FTENR |= EXTI_InitStruct->EXTI_Line; - } - else - { - tmp = ( uint32_t )EXTI_BASE; - tmp += EXTI_InitStruct->EXTI_Trigger; - *( __IO uint32_t * ) tmp |= EXTI_InitStruct->EXTI_Line; - } - } - else - { - tmp += EXTI_InitStruct->EXTI_Mode; - *( __IO uint32_t * ) tmp &= ~EXTI_InitStruct->EXTI_Line; - } -} - -/********************************************************************* - * @fn EXTI_StructInit - * - * @brief Fills each EXTI_InitStruct member with its reset value. - * - * @param EXTI_InitStruct - pointer to a EXTI_InitTypeDef structure - * - * @return none. - */ -void EXTI_StructInit( EXTI_InitTypeDef *EXTI_InitStruct ) -{ - EXTI_InitStruct->EXTI_Line = EXTI_LINENONE; - EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt; - EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling; - EXTI_InitStruct->EXTI_LineCmd = DISABLE; -} - -/********************************************************************* - * @fn EXTI_GenerateSWInterrupt - * - * @brief Generates a Software interrupt. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return none. - */ -void EXTI_GenerateSWInterrupt( uint32_t EXTI_Line ) -{ - EXTI->SWIEVR |= EXTI_Line; -} - -/********************************************************************* - * @fn EXTI_GetFlagStatus - * - * @brief Checks whether the specified EXTI line flag is set or not. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return The new state of EXTI_Line (SET or RESET). - */ -FlagStatus EXTI_GetFlagStatus( uint32_t EXTI_Line ) -{ - FlagStatus bitstatus = RESET; - if( ( EXTI->INTFR & EXTI_Line ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn EXTI_ClearFlag - * - * @brief Clears the EXTI's line pending flags. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return None - */ -void EXTI_ClearFlag( uint32_t EXTI_Line ) -{ - EXTI->INTFR = EXTI_Line; -} - -/********************************************************************* - * @fn EXTI_GetITStatus - * - * @brief Checks whether the specified EXTI line is asserted or not. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return The new state of EXTI_Line (SET or RESET). - */ -ITStatus EXTI_GetITStatus( uint32_t EXTI_Line ) -{ - ITStatus bitstatus = RESET; - uint32_t enablestatus = 0; - - enablestatus = EXTI->INTENR & EXTI_Line; - if( ( ( EXTI->INTFR & EXTI_Line ) != ( uint32_t )RESET ) && ( enablestatus != ( uint32_t )RESET ) ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn EXTI_ClearITPendingBit - * - * @brief Clears the EXTI's line pending bits. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return none - */ -void EXTI_ClearITPendingBit( uint32_t EXTI_Line ) -{ - EXTI->INTFR = EXTI_Line; -} - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_flash.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_flash.c deleted file mode 100644 index 1dde74a..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_flash.c +++ /dev/null @@ -1,979 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_flash.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the FLASH firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ***************************************************************************************/ -#include "ch32f10x_flash.h" - -/* Flash Access Control Register bits */ -#define ACR_LATENCY_Mask ((uint32_t)0x00000038) -#define ACR_HLFCYA_Mask ((uint32_t)0xFFFFFFF7) -#define ACR_PRFTBE_Mask ((uint32_t)0xFFFFFFEF) - -/* Flash Access Control Register bits */ -#define ACR_PRFTBS_Mask ((uint32_t)0x00000020) - -/* Flash Control Register bits */ -#define CR_PG_Set ((uint32_t)0x00000001) -#define CR_PG_Reset ((uint32_t)0x00001FFE) -#define CR_PER_Set ((uint32_t)0x00000002) -#define CR_PER_Reset ((uint32_t)0x00001FFD) -#define CR_MER_Set ((uint32_t)0x00000004) -#define CR_MER_Reset ((uint32_t)0x00001FFB) -#define CR_OPTPG_Set ((uint32_t)0x00000010) -#define CR_OPTPG_Reset ((uint32_t)0x00001FEF) -#define CR_OPTER_Set ((uint32_t)0x00000020) -#define CR_OPTER_Reset ((uint32_t)0x00001FDF) -#define CR_STRT_Set ((uint32_t)0x00000040) -#define CR_LOCK_Set ((uint32_t)0x00000080) -#define CR_PAGE_PG ((uint32_t)0x00010000) -#define CR_PAGE_ER ((uint32_t)0x00020000) -#define CR_BUF_LOAD ((uint32_t)0x00040000) -#define CR_BUF_RST ((uint32_t)0x00080000) - -/* FLASH Status Register bits */ -#define SR_BSY ((uint32_t)0x00000001) -#define SR_PGERR ((uint32_t)0x00000004) -#define SR_WRPRTERR ((uint32_t)0x00000010) -#define SR_EOP ((uint32_t)0x00000020) - -/* FLASH Mask */ -#define RDPRT_Mask ((uint32_t)0x00000002) -#define WRP0_Mask ((uint32_t)0x000000FF) -#define WRP1_Mask ((uint32_t)0x0000FF00) -#define WRP2_Mask ((uint32_t)0x00FF0000) -#define WRP3_Mask ((uint32_t)0xFF000000) -#define OB_USER_BFB2 ((uint16_t)0x0008) - -/* FLASH Keys */ -#define RDP_Key ((uint16_t)0x00A5) -#define FLASH_KEY1 ((uint32_t)0x45670123) -#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) - -/* FLASH BANK address */ -#define FLASH_BANK1_END_ADDRESS ((uint32_t)0x807FFFF) - -/* Delay definition */ -#define EraseTimeout ((uint32_t)0x000B0000) -#define ProgramTimeout ((uint32_t)0x00002000) - -/* Flash Program Vaild Address */ -#define ValidAddrStart (FLASH_BASE) -#define ValidAddrEnd (FLASH_BASE + 0x10000) - - -/******************************************************************************** - * @fn FLASH_SetLatency - * - * @brief Sets the code latency value. - * - * @param FLASH_Latency - specifies the FLASH Latency value. - * FLASH_Latency_0 - FLASH Zero Latency cycle - * FLASH_Latency_1 - FLASH One Latency cycle - * FLASH_Latency_2 - FLASH Two Latency cycles - * - * @return None - */ -void FLASH_SetLatency( uint32_t FLASH_Latency ) -{ - uint32_t tmpreg = 0; - - tmpreg = FLASH->ACTLR; - tmpreg &= ACR_LATENCY_Mask; - tmpreg |= FLASH_Latency; - FLASH->ACTLR = tmpreg; -} - - -/******************************************************************************** - * @fn FLASH_HalfCycleAccessCmd - * - * @brief Enables or disables the Half cycle flash access. - * - * @param FLASH_HalfCycleAccess - specifies the FLASH Half cycle Access mode. - * FLASH_HalfCycleAccess_Enable - FLASH Half Cycle Enable - * FLASH_HalfCycleAccess_Disable - FLASH Half Cycle Disable - * - * @return None - */ -void FLASH_HalfCycleAccessCmd( uint32_t FLASH_HalfCycleAccess ) -{ - FLASH->ACTLR &= ACR_HLFCYA_Mask; - FLASH->ACTLR |= FLASH_HalfCycleAccess; -} - -/******************************************************************************** - * @fn FLASH_PrefetchBufferCmd - * - * @brief Enables or disables the Prefetch Buffer. - * - * @param FLASH_PrefetchBuffer - specifies the Prefetch buffer status. - * FLASH_PrefetchBuffer_Enable - FLASH Prefetch Buffer Enable - * FLASH_PrefetchBuffer_Disable - FLASH Prefetch Buffer Disable - * - * @return None - */ -void FLASH_PrefetchBufferCmd( uint32_t FLASH_PrefetchBuffer ) -{ - FLASH->ACTLR &= ACR_PRFTBE_Mask; - FLASH->ACTLR |= FLASH_PrefetchBuffer; -} - - -/******************************************************************************** - * @fn FLASH_Unlock - * - * @brief Unlocks the FLASH Program Erase Controller. - * - * @return None - */ -void FLASH_Unlock( void ) -{ - /* Authorize the FPEC of Bank1 Access */ - FLASH->KEYR = FLASH_KEY1; - FLASH->KEYR = FLASH_KEY2; -} - - -/******************************************************************************** - * @fn FLASH_UnlockBank1 - * - * @brief Unlocks the FLASH Bank1 Program Erase Controller. - * equivalent to FLASH_Unlock function. - * - * @return None - */ -void FLASH_UnlockBank1( void ) -{ - FLASH->KEYR = FLASH_KEY1; - FLASH->KEYR = FLASH_KEY2; -} - -/******************************************************************************** - * @fn FLASH_Lock - * - * @brief Locks the FLASH Program Erase Controller. - * - * @return None - */ -void FLASH_Lock( void ) -{ - FLASH->CTLR |= CR_LOCK_Set; -} - -/******************************************************************************** - * @fn FLASH_LockBank1 - * - * @brief Locks the FLASH Bank1 Program Erase Controller. - * - * @return None - */ -void FLASH_LockBank1( void ) -{ - FLASH->CTLR |= CR_LOCK_Set; -} - - -/******************************************************************************** - * @fn FLASH_ErasePage - * - * @brief Erases a specified FLASH page. - * - * @param Page_Address - The page address to be erased. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ErasePage( uint32_t Page_Address ) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_WaitForLastOperation( EraseTimeout ); - - if( status == FLASH_COMPLETE ) - { - FLASH->CTLR |= CR_PER_Set; - FLASH->ADDR = Page_Address; - FLASH->CTLR |= CR_STRT_Set; - - status = FLASH_WaitForLastOperation( EraseTimeout ); - - FLASH->CTLR &= CR_PER_Reset; - } - - *( __IO uint32_t * )0x40022034 = *( __IO uint32_t * )( Page_Address ^ 0x00000100 ); - - return status; -} - - -/******************************************************************************** - * @fn FLASH_EraseAllPages - * - * @brief Erases all FLASH pages. - * - * @return FLASH Status - The returned value can be:FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_EraseAllPages( void ) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_WaitForLastOperation( EraseTimeout ); - if( status == FLASH_COMPLETE ) - { - FLASH->CTLR |= CR_MER_Set; - FLASH->CTLR |= CR_STRT_Set; - - status = FLASH_WaitForLastOperation( EraseTimeout ); - - FLASH->CTLR &= CR_MER_Reset; - } - - return status; -} - -/******************************************************************************** - * @fn FLASH_EraseAllBank1Pages - * - * @brief Erases all Bank1 FLASH pages. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_EraseAllBank1Pages( void ) -{ - FLASH_Status status = FLASH_COMPLETE; - status = FLASH_WaitForLastBank1Operation( EraseTimeout ); - - if( status == FLASH_COMPLETE ) - { - FLASH->CTLR |= CR_MER_Set; - FLASH->CTLR |= CR_STRT_Set; - - status = FLASH_WaitForLastBank1Operation( EraseTimeout ); - - FLASH->CTLR &= CR_MER_Reset; - } - return status; -} - -/******************************************************************************** - * @fn FLASH_EraseOptionBytes - * - * @brief Erases the FLASH option bytes. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_EraseOptionBytes( void ) -{ - uint16_t rdptmp = RDP_Key; - - FLASH_Status status = FLASH_COMPLETE; - if( FLASH_GetReadOutProtectionStatus() != RESET ) - { - rdptmp = 0x00; - } - status = FLASH_WaitForLastOperation( EraseTimeout ); - if( status == FLASH_COMPLETE ) - { - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - - FLASH->CTLR |= CR_OPTER_Set; - FLASH->CTLR |= CR_STRT_Set; - status = FLASH_WaitForLastOperation( EraseTimeout ); - - if( status == FLASH_COMPLETE ) - { - FLASH->CTLR &= CR_OPTER_Reset; - FLASH->CTLR |= CR_OPTPG_Set; - OB->RDPR = ( uint16_t )rdptmp; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - - if( status != FLASH_TIMEOUT ) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - else - { - if( status != FLASH_TIMEOUT ) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - } - return status; -} - -/********************************************************************* - * @fn FLASH_ProgramWord - * - * @brief Programs a word at a specified address. - * - * @param Address - specifies the address to be programmed. - * Data - specifies the data to be programmed. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ProgramWord( uint32_t Address, uint32_t Data ) -{ - FLASH_Status status = FLASH_COMPLETE; - __IO uint32_t tmp = 0; - - status = FLASH_WaitForLastOperation( ProgramTimeout ); - - if( status == FLASH_COMPLETE ) - { - FLASH->CTLR |= CR_PG_Set; - - *( __IO uint16_t * )Address = ( uint16_t )Data; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - - if( status == FLASH_COMPLETE ) - { - tmp = Address + 2; - *( __IO uint16_t * ) tmp = Data >> 16; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - FLASH->CTLR &= CR_PG_Reset; - } - else - { - FLASH->CTLR &= CR_PG_Reset; - } - } - - *( __IO uint32_t * )0x40022034 = *( __IO uint32_t * )( Address ^ 0x00000100 ); - - return status; -} - -/********************************************************************* - * @fn FLASH_ProgramHalfWord - * - * @brief Programs a half word at a specified address. - * - * @param Address - specifies the address to be programmed. - * Data - specifies the data to be programmed. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ProgramHalfWord( uint32_t Address, uint16_t Data ) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_WaitForLastOperation( ProgramTimeout ); - if( status == FLASH_COMPLETE ) - { - FLASH->CTLR |= CR_PG_Set; - *( __IO uint16_t * )Address = Data; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - FLASH->CTLR &= CR_PG_Reset; - } - - //*( __IO uint32_t * )0x40022034 = *( __IO uint32_t * )( Address ^ 0x00000100 ); - - return status; -} - -/********************************************************************* - * @fn FLASH_ProgramOptionByteData - * - * @brief Programs a half word at a specified Option Byte Data address. - * - * @param Address - specifies the address to be programmed. - * Data - specifies the data to be programmed. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ProgramOptionByteData( uint32_t Address, uint8_t Data ) -{ - FLASH_Status status = FLASH_COMPLETE; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - if( status == FLASH_COMPLETE ) - { - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - FLASH->CTLR |= CR_OPTPG_Set; - *( __IO uint16_t * )Address = Data; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - if( status != FLASH_TIMEOUT ) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - - *( __IO uint32_t * )0x40022034 = *( __IO uint32_t * )( Address ^ 0x00000100 ); - - return status; -} - -/********************************************************************* - * @fn FLASH_EnableWriteProtection - * - * @brief Write protects the desired sectors - * - * @param FLASH_Sectors - specifies the address of the pages to be write protected. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_EnableWriteProtection( uint32_t FLASH_Pages ) -{ - uint16_t WRP0_Data = 0xFFFF, WRP1_Data = 0xFFFF, WRP2_Data = 0xFFFF, WRP3_Data = 0xFFFF; - - FLASH_Status status = FLASH_COMPLETE; - - FLASH_Pages = ( uint32_t )( ~FLASH_Pages ); - WRP0_Data = ( uint16_t )( FLASH_Pages & WRP0_Mask ); - WRP1_Data = ( uint16_t )( ( FLASH_Pages & WRP1_Mask ) >> 8 ); - WRP2_Data = ( uint16_t )( ( FLASH_Pages & WRP2_Mask ) >> 16 ); - WRP3_Data = ( uint16_t )( ( FLASH_Pages & WRP3_Mask ) >> 24 ); - - status = FLASH_WaitForLastOperation( ProgramTimeout ); - - if( status == FLASH_COMPLETE ) - { - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - FLASH->CTLR |= CR_OPTPG_Set; - if( WRP0_Data != 0xFF ) - { - OB->WRPR0 = WRP0_Data; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - } - if( ( status == FLASH_COMPLETE ) && ( WRP1_Data != 0xFF ) ) - { - OB->WRPR1 = WRP1_Data; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - } - if( ( status == FLASH_COMPLETE ) && ( WRP2_Data != 0xFF ) ) - { - OB->WRPR2 = WRP2_Data; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - } - - if( ( status == FLASH_COMPLETE ) && ( WRP3_Data != 0xFF ) ) - { - OB->WRPR3 = WRP3_Data; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - } - - if( status != FLASH_TIMEOUT ) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - return status; -} - -/********************************************************************* - * @fn FLASH_ReadOutProtection - * - * @brief Enables or disables the read out protection. - * - * @param Newstate - new state of the ReadOut Protection(ENABLE or DISABLE). - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ReadOutProtection( FunctionalState NewState ) -{ - FLASH_Status status = FLASH_COMPLETE; - status = FLASH_WaitForLastOperation( EraseTimeout ); - if( status == FLASH_COMPLETE ) - { - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - FLASH->CTLR |= CR_OPTER_Set; - FLASH->CTLR |= CR_STRT_Set; - status = FLASH_WaitForLastOperation( EraseTimeout ); - if( status == FLASH_COMPLETE ) - { - FLASH->CTLR &= CR_OPTER_Reset; - FLASH->CTLR |= CR_OPTPG_Set; - if( NewState != DISABLE ) - { - OB->RDPR = 0x00; - } - else - { - OB->RDPR = RDP_Key; - } - status = FLASH_WaitForLastOperation( EraseTimeout ); - - if( status != FLASH_TIMEOUT ) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - else - { - if( status != FLASH_TIMEOUT ) - { - FLASH->CTLR &= CR_OPTER_Reset; - } - } - } - return status; -} - -/********************************************************************* - * @fn FLASH_UserOptionByteConfig - * - * @brief Programs the FLASH User Option Byte - IWDG_SW / RST_STOP / RST_STDBY. - * - * @param OB_IWDG - Selects the IWDG mode - * OB_IWDG_SW - Software IWDG selected - * OB_IWDG_HW - Hardware IWDG selected - * OB_STOP - Reset event when entering STOP mode. - * OB_STOP_NoRST - No reset generated when entering in STOP - * OB_STOP_RST - Reset generated when entering in STOP - * OB_STDBY - Reset event when entering Standby mode. - * OB_STDBY_NoRST - No reset generated when entering in STANDBY - * OB_STDBY_RST - Reset generated when entering in STANDBY - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_UserOptionByteConfig( uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY ) -{ - FLASH_Status status = FLASH_COMPLETE; - - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - status = FLASH_WaitForLastOperation( ProgramTimeout ); - - if( status == FLASH_COMPLETE ) - { - FLASH->CTLR |= CR_OPTPG_Set; - - OB->USER = OB_IWDG | ( uint16_t )( OB_STOP | ( uint16_t )( OB_STDBY | ( ( uint16_t )0xF8 ) ) ); - - status = FLASH_WaitForLastOperation( ProgramTimeout ); - if( status != FLASH_TIMEOUT ) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - return status; -} - -/********************************************************************* - * @fn FLASH_GetUserOptionByte - * - * @brief Returns the FLASH User Option Bytes values. - * - * @return The FLASH User Option Bytes values:IWDG_SW(Bit0), RST_STOP(Bit1) - * and RST_STDBY(Bit2). - */ -uint32_t FLASH_GetUserOptionByte( void ) -{ - return ( uint32_t )( FLASH->OBR >> 2 ); -} - - -/********************************************************************* - * @fn FLASH_GetWriteProtectionOptionByte - * - * @brief Returns the FLASH Write Protection Option Bytes Register value. - * - * @return The FLASH Write Protection Option Bytes Register value. - */ -uint32_t FLASH_GetWriteProtectionOptionByte( void ) -{ - return ( uint32_t )( FLASH->WPR ); -} - - -/********************************************************************* - * @fn FLASH_GetReadOutProtectionStatus - * - * @brief Checks whether the FLASH Read Out Protection Status is set or not. - * - * @return FLASH ReadOut Protection Status(SET or RESET) - */ -FlagStatus FLASH_GetReadOutProtectionStatus( void ) -{ - FlagStatus readoutstatus = RESET; - if( ( FLASH->OBR & RDPRT_Mask ) != ( uint32_t )RESET ) - { - readoutstatus = SET; - } - else - { - readoutstatus = RESET; - } - return readoutstatus; -} - -/********************************************************************* - * @fn FLASH_GetPrefetchBufferStatus - * - * @brief Checks whether the FLASH Prefetch Buffer status is set or not. - * - * @return FLASH ReadOut Protection Status(SET or RESET) - */ -FlagStatus FLASH_GetPrefetchBufferStatus( void ) -{ - FlagStatus bitstatus = RESET; - - if( ( FLASH->ACTLR & ACR_PRFTBS_Mask ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn FLASH_ITConfig - * - * @brief Enables or disables the specified FLASH interrupts. - * - * @param FLASH_IT - specifies the FLASH interrupt sources to be enabled or disabled. - * FLASH_IT_ERROR - FLASH Error Interrupt - * FLASH_IT_EOP - FLASH end of operation Interrupt - * NewState - new state of the specified Flash interrupts(ENABLE or DISABLE). - * - * @return FLASH Prefetch Buffer Status (SET or RESET). - */ -void FLASH_ITConfig( uint32_t FLASH_IT, FunctionalState NewState ) -{ - - if( NewState != DISABLE ) - { - FLASH->CTLR |= FLASH_IT; - } - else - { - FLASH->CTLR &= ~( uint32_t )FLASH_IT; - } - -} - - -/********************************************************************* - * @fn FLASH_GetFlagStatus - * - * @brief Checks whether the specified FLASH flag is set or not. - * - * @param FLASH_FLAG - specifies the FLASH flag to check. - * FLASH_FLAG_BSY - FLASH Busy flag - * FLASH_FLAG_PGERR - FLASH Program error flag - * FLASH_FLAG_WRPRTERR - FLASH Write protected error flag - * FLASH_FLAG_EOP - FLASH End of Operation flag - * FLASH_FLAG_OPTERR - FLASH Option Byte error flag - * - * @return The new state of FLASH_FLAG (SET or RESET). - */ -FlagStatus FLASH_GetFlagStatus( uint32_t FLASH_FLAG ) -{ - FlagStatus bitstatus = RESET; - - if( FLASH_FLAG == FLASH_FLAG_OPTERR ) - { - if( ( FLASH->OBR & FLASH_FLAG_OPTERR ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - else - { - if( ( FLASH->STATR & FLASH_FLAG ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - return bitstatus; -} - -/********************************************************************* - * @fn FLASH_ClearFlag - * - * @brief Clears the FLASH's pending flags. - * - * @param FLASH_FLAG - specifies the FLASH flags to clear. - * FLASH_FLAG_PGERR - FLASH Program error flag - * FLASH_FLAG_WRPRTERR - FLASH Write protected error flag - * FLASH_FLAG_EOP - FLASH End of Operation flag - * - * @return none - */ -void FLASH_ClearFlag( uint32_t FLASH_FLAG ) -{ - - FLASH->STATR = FLASH_FLAG; - -} - -/********************************************************************* - * @fn FLASH_GetStatus - * - * @brief Returns the FLASH Status. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP or FLASH_COMPLETE. - */ -FLASH_Status FLASH_GetStatus( void ) -{ - FLASH_Status flashstatus = FLASH_COMPLETE; - - if( ( FLASH->STATR & FLASH_FLAG_BSY ) == FLASH_FLAG_BSY ) - { - flashstatus = FLASH_BUSY; - } - else - { - if( ( FLASH->STATR & FLASH_FLAG_PGERR ) != 0 ) - { - flashstatus = FLASH_ERROR_PG; - } - else - { - if( ( FLASH->STATR & FLASH_FLAG_WRPRTERR ) != 0 ) - { - flashstatus = FLASH_ERROR_WRP; - } - else - { - flashstatus = FLASH_COMPLETE; - } - } - } - return flashstatus; -} - -/********************************************************************* - * @fn FLASH_GetBank1Status - * - * @brief Returns the FLASH Bank1 Status. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP or FLASH_COMPLETE. - */ -FLASH_Status FLASH_GetBank1Status( void ) -{ - FLASH_Status flashstatus = FLASH_COMPLETE; - - if( ( FLASH->STATR & FLASH_FLAG_BANK1_BSY ) == FLASH_FLAG_BSY ) - { - flashstatus = FLASH_BUSY; - } - else - { - if( ( FLASH->STATR & FLASH_FLAG_BANK1_PGERR ) != 0 ) - { - flashstatus = FLASH_ERROR_PG; - } - else - { - if( ( FLASH->STATR & FLASH_FLAG_BANK1_WRPRTERR ) != 0 ) - { - flashstatus = FLASH_ERROR_WRP; - } - else - { - flashstatus = FLASH_COMPLETE; - } - } - } - return flashstatus; -} - - -/********************************************************************* - * @fn FLASH_WaitForLastOperation - * - * @brief Waits for a Flash operation to complete or a TIMEOUT to occur. - * - * @param Timeout - FLASH programming Timeout - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP or FLASH_COMPLETE. - */ -FLASH_Status FLASH_WaitForLastOperation( uint32_t Timeout ) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_GetBank1Status(); - while( ( status == FLASH_BUSY ) && ( Timeout != 0x00 ) ) - { - status = FLASH_GetBank1Status(); - Timeout--; - } - if( Timeout == 0x00 ) - { - status = FLASH_TIMEOUT; - } - return status; -} - - -/********************************************************************* - * @fn FLASH_WaitForLastBank1Operation - * - * @brief Waits for a Flash operation on Bank1 to complete or a TIMEOUT to occur. - * - * @param Timeout - FLASH programming Timeout - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP or FLASH_COMPLETE. - */ -FLASH_Status FLASH_WaitForLastBank1Operation( uint32_t Timeout ) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_GetBank1Status(); - while( ( status == FLASH_FLAG_BANK1_BSY ) && ( Timeout != 0x00 ) ) - { - status = FLASH_GetBank1Status(); - Timeout--; - } - if( Timeout == 0x00 ) - { - status = FLASH_TIMEOUT; - } - return status; -} - -/********************************************************************* - * @fn FLASH_Unlock_Fast - * - * @brief Unlocks the Fast Program Erase Mode. - * - * @return none - */ -void FLASH_Unlock_Fast( void ) -{ - /* Authorize the FPEC of Bank1 Access */ - FLASH->KEYR = FLASH_KEY1; - FLASH->KEYR = FLASH_KEY2; - - /* Fast program mode unlock */ - FLASH->MODEKEYR = FLASH_KEY1; - FLASH->MODEKEYR = FLASH_KEY2; -} - -/********************************************************************* - * @fn FLASH_Lock_Fast - * - * @brief Locks the Fast Program Erase Mode. - * - * @return none - */ -void FLASH_Lock_Fast( void ) -{ - FLASH->CTLR |= CR_LOCK_Set; -} - -/********************************************************************* - * @fn FLASH_Unlock_Fast - * - * @brief Unlocks the Fast Program Erase Mode. - * - * @return none - */ -void FLASH_BufReset( void ) -{ - FLASH->CTLR |= CR_PAGE_PG; - FLASH->CTLR |= CR_BUF_RST; - while( FLASH->STATR & SR_BSY ); - FLASH->CTLR &= ~CR_PAGE_PG; -} - -/********************************************************************* - * @fn FLASH_BufLoad - * - * @brief Flash Buffer load(128 bit). - * - * @param Address - specifies the address to be programmed. - * Data0 - specifies the data0 to be programmed. - * Data1 - specifies the data1 to be programmed. - * Data2 - specifies the data2 to be programmed. - * Data3 - specifies the data3 to be programmed. - * - * @return none - */ -void FLASH_BufLoad( uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3 ) -{ - if( ( Address >= ValidAddrStart ) && ( Address < ValidAddrEnd ) ) - { - FLASH->CTLR |= CR_PAGE_PG; - *( __IO uint32_t * )( Address + 0x00 ) = Data0; - *( __IO uint32_t * )( Address + 0x04 ) = Data1; - *( __IO uint32_t * )( Address + 0x08 ) = Data2; - *( __IO uint32_t * )( Address + 0x0C ) = Data3; - FLASH->CTLR |= CR_BUF_LOAD; - while( FLASH->STATR & SR_BSY ); - FLASH->CTLR &= ~CR_PAGE_PG; - - *( __IO uint32_t * )0x40022034 = *( __IO uint32_t * )( Address ^ 0x00000100 ); - } -} - -/********************************************************************* - * @fn FLASH_ErasePage_Fast - * - * @brief Erases a specified FLASH page (1page = 256Byte). - * - * @param Page_Address - The page address to be erased. - * - * @return none - */ -void FLASH_ErasePage_Fast( uint32_t Page_Address ) -{ - if( ( Page_Address >= ValidAddrStart ) && ( Page_Address < ValidAddrEnd ) ) - { - FLASH->CTLR |= CR_PAGE_ER; - FLASH->ADDR = Page_Address; - FLASH->CTLR |= CR_STRT_Set; - while( FLASH->STATR & SR_BSY ); - FLASH->CTLR &= ~CR_PAGE_ER; - - *( __IO uint32_t * )0x40022034 = *( __IO uint32_t * )( Page_Address ^ 0x00000100 ); - } -} - -/********************************************************************* - * @fn FLASH_ProgramPage_Fast - * - * @brief Program a specified FLASH page (1page = 256Byte). - * - * @param Page_Address - The page address to be programed. - * - * @return none - */ -void FLASH_ProgramPage_Fast( uint32_t Page_Address ) -{ - if( ( Page_Address >= ValidAddrStart ) && ( Page_Address < ValidAddrEnd ) ) - { - FLASH->CTLR |= CR_PAGE_PG; - FLASH->ADDR = Page_Address; - FLASH->CTLR |= CR_STRT_Set; - while( FLASH->STATR & SR_BSY ); - FLASH->CTLR &= ~CR_PAGE_PG; - - *( __IO uint32_t * )0x40022034 = *( __IO uint32_t * )( Page_Address ^ 0x00000100 ); - } -} diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_gpio.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_gpio.c deleted file mode 100644 index d7e4cab..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_gpio.c +++ /dev/null @@ -1,534 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_gpio.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the GPIO firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_gpio.h" -#include "ch32f10x_rcc.h" - - -/* RCC registers bit address in the alias region */ -#define AFIO_OFFSET (AFIO_BASE - PERIPH_BASE) - -/* ECR Register */ -/* Alias word address of EVOE bit */ -#define ECR_OFFSET (AFIO_OFFSET + 0x00) -#define EVOE_BitNumber ((uint8_t)0x07) -#define ECR_EVOE_BB (PERIPH_BB_BASE + (ECR_OFFSET * 32) + (EVOE_BitNumber * 4)) - - -/* PCFR1 Register */ -/* Alias word address of MII_RMII_SEL bit */ -#define PCFR1_OFFSET (AFIO_OFFSET + 0x04) -#define MII_RMII_SEL_BitNumber ((u8)0x17) -#define PCFR1_MII_RMII_SEL_BB (PERIPH_BB_BASE + (PCFR1_OFFSET * 32) + (MII_RMII_SEL_BitNumber * 4)) - -#define ECR_PORTPINCONFIG_MASK ((uint16_t)0xFF80) -#define LSB_MASK ((uint16_t)0xFFFF) -#define DBGAFR_POSITION_MASK ((uint32_t)0x000F0000) -#define DBGAFR_SWJCFG_MASK ((uint32_t)0xF0FFFFFF) -#define DBGAFR_LOCATION_MASK ((uint32_t)0x00200000) -#define DBGAFR_NUMBITS_MASK ((uint32_t)0x00100000) - - -/********************************************************************* - * @fn GPIO_DeInit - * - * @brief Deinitializes the GPIOx peripheral registers to their default - * reset values. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * - * @return none - */ -void GPIO_DeInit( GPIO_TypeDef *GPIOx ) -{ - if( GPIOx == GPIOA ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOA, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOA, DISABLE ); - } - else if( GPIOx == GPIOB ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOB, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOB, DISABLE ); - } - else if( GPIOx == GPIOC ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOC, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOC, DISABLE ); - } - else if( GPIOx == GPIOD ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOD, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOD, DISABLE ); - } - else if( GPIOx == GPIOE ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOE, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOE, DISABLE ); - } - else if( GPIOx == GPIOF ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOF, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOF, DISABLE ); - } - else - { - if( GPIOx == GPIOG ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOG, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOG, DISABLE ); - } - } -} - -/********************************************************************* - * @fn GPIO_AFIODeInit - * - * @brief Deinitializes the Alternate Functions (remap, event control - * and EXTI configuration) registers to their default reset values. - * - * @return none - */ -void GPIO_AFIODeInit( void ) -{ - RCC_APB2PeriphResetCmd( RCC_APB2Periph_AFIO, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_AFIO, DISABLE ); -} - -/********************************************************************* - * @fn GPIO_Init - * - * @brief GPIOx - where x can be (A..G) to select the GPIO peripheral. - * - * @param GPIO_InitStruct - pointer to a GPIO_InitTypeDef structure that - * contains the configuration information for the specified GPIO peripheral. - * - * @return none - */ -void GPIO_Init( GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct ) -{ - uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00; - uint32_t tmpreg = 0x00, pinmask = 0x00; - - currentmode = ( ( uint32_t )GPIO_InitStruct->GPIO_Mode ) & ( ( uint32_t )0x0F ); - - if( ( ( ( uint32_t )GPIO_InitStruct->GPIO_Mode ) & ( ( uint32_t )0x10 ) ) != 0x00 ) - { - currentmode |= ( uint32_t )GPIO_InitStruct->GPIO_Speed; - } - - if( ( ( uint32_t )GPIO_InitStruct->GPIO_Pin & ( ( uint32_t )0x00FF ) ) != 0x00 ) - { - tmpreg = GPIOx->CFGLR; - - for( pinpos = 0x00; pinpos < 0x08; pinpos++ ) - { - pos = ( ( uint32_t )0x01 ) << pinpos; - currentpin = ( GPIO_InitStruct->GPIO_Pin ) & pos; - - if( currentpin == pos ) - { - pos = pinpos << 2; - pinmask = ( ( uint32_t )0x0F ) << pos; - tmpreg &= ~pinmask; - tmpreg |= ( currentmode << pos ); - - if( GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD ) - { - GPIOx->BCR = ( ( ( uint32_t )0x01 ) << pinpos ); - } - else - { - if( GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU ) - { - GPIOx->BSHR = ( ( ( uint32_t )0x01 ) << pinpos ); - } - } - } - } - GPIOx->CFGLR = tmpreg; - } - - if( GPIO_InitStruct->GPIO_Pin > 0x00FF ) - { - tmpreg = GPIOx->CFGHR; - - for( pinpos = 0x00; pinpos < 0x08; pinpos++ ) - { - pos = ( ( ( uint32_t )0x01 ) << ( pinpos + 0x08 ) ); - currentpin = ( ( GPIO_InitStruct->GPIO_Pin ) & pos ); - - if( currentpin == pos ) - { - pos = pinpos << 2; - pinmask = ( ( uint32_t )0x0F ) << pos; - tmpreg &= ~pinmask; - tmpreg |= ( currentmode << pos ); - - if( GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD ) - { - GPIOx->BCR = ( ( ( uint32_t )0x01 ) << ( pinpos + 0x08 ) ); - } - - if( GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU ) - { - GPIOx->BSHR = ( ( ( uint32_t )0x01 ) << ( pinpos + 0x08 ) ); - } - } - } - GPIOx->CFGHR = tmpreg; - } -} - -/********************************************************************* - * @fn GPIO_StructInit - * - * @brief Fills each GPIO_InitStruct member with its default - * - * @param GPIO_InitStruct - pointer to a GPIO_InitTypeDef structure - * which will be initialized. - * - * @return none - */ -void GPIO_StructInit( GPIO_InitTypeDef *GPIO_InitStruct ) -{ - GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All; - GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING; -} - -/********************************************************************* - * @fn GPIO_ReadInputDataBit - * - * @brief GPIOx - where x can be (A..G) 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). - * - * @return The input port pin value. - */ -uint8_t GPIO_ReadInputDataBit( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin ) -{ - uint8_t bitstatus = 0x00; - - if( ( GPIOx->INDR & GPIO_Pin ) != ( uint32_t )Bit_RESET ) - { - bitstatus = ( uint8_t )Bit_SET; - } - else - { - bitstatus = ( uint8_t )Bit_RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn GPIO_ReadInputData - * - * @brief Reads the specified GPIO input data port. - * - * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. - * - * @return The input port pin value. - */ -uint16_t GPIO_ReadInputData( GPIO_TypeDef *GPIOx ) -{ - return ( ( uint16_t )GPIOx->INDR ); -} - -/********************************************************************* - * @fn GPIO_ReadOutputDataBit - * - * @brief Reads the specified output data port bit. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * GPIO_Pin - specifies the port bit to read. - * This parameter can be GPIO_Pin_x where x can be (0..15). - * - * @return none - */ -uint8_t GPIO_ReadOutputDataBit( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin ) -{ - uint8_t bitstatus = 0x00; - - if( ( GPIOx->OUTDR & GPIO_Pin ) != ( uint32_t )Bit_RESET ) - { - bitstatus = ( uint8_t )Bit_SET; - } - else - { - bitstatus = ( uint8_t )Bit_RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn GPIO_ReadOutputData - * - * @brief Reads the specified GPIO output data port. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * - * @return GPIO output port pin value. - */ -uint16_t GPIO_ReadOutputData( GPIO_TypeDef *GPIOx ) -{ - return ( ( uint16_t )GPIOx->OUTDR ); -} - -/********************************************************************* - * @fn GPIO_SetBits - * - * @brief Sets the selected data port bits. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * GPIO_Pin - specifies the port bits to be written. - * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). - * - * @return none - */ -void GPIO_SetBits( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin ) -{ - GPIOx->BSHR = GPIO_Pin; -} - -/********************************************************************* - * @fn GPIO_ResetBits - * - * @brief Clears the selected data port bits. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * GPIO_Pin - specifies the port bits to be written. - * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). - * - * @return none - */ -void GPIO_ResetBits( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin ) -{ - GPIOx->BCR = GPIO_Pin; -} - -/********************************************************************* - * @fn GPIO_WriteBit - * - * @brief Sets or clears the selected data port bit. - * - * @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). - * BitVal - specifies the value to be written to the selected bit. - * Bit_SetL - to clear the port pin. - * Bit_SetH - to set the port pin. - * - * @return none - */ -void GPIO_WriteBit( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, BitAction BitVal ) -{ - if( BitVal != Bit_RESET ) - { - GPIOx->BSHR = GPIO_Pin; - } - else - { - GPIOx->BCR = GPIO_Pin; - } -} - -/********************************************************************* - * @fn GPIO_Write - * - * @brief Writes data to the specified GPIO data port. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * PortVal - specifies the value to be written to the port output data register. - * - * @return none - */ -void GPIO_Write( GPIO_TypeDef *GPIOx, uint16_t PortVal ) -{ - GPIOx->OUTDR = PortVal; -} - -/********************************************************************* - * @fn GPIO_PinLockConfig - * - * @brief Locks GPIO Pins configuration registers. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * GPIO_Pin - specifies the port bit to be written. - * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). - * - * @return none - */ -void GPIO_PinLockConfig( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin ) -{ - uint32_t tmp = 0x00010000; - - tmp |= GPIO_Pin; - GPIOx->LCKR = tmp; - GPIOx->LCKR = GPIO_Pin; - GPIOx->LCKR = tmp; - tmp = GPIOx->LCKR; - tmp = GPIOx->LCKR; -} - -/********************************************************************* - * @fn GPIO_EventOutputConfig - * - * @brief Selects the GPIO pin used as Event output. - * - * @param GPIO_PortSource - selects the GPIO port to be used as source - * for Event output. - * This parameter can be GPIO_PortSourceGPIOx where x can be (A..E). - * GPIO_PinSource - specifies the pin for the Event output. - * This parameter can be GPIO_PinSourcex where x can be (0..15). - * - * @return none - */ -void GPIO_EventOutputConfig( uint8_t GPIO_PortSource, uint8_t GPIO_PinSource ) -{ - uint32_t tmpreg = 0x00; - - tmpreg = AFIO->ECR; - tmpreg &= ECR_PORTPINCONFIG_MASK; - tmpreg |= ( uint32_t )GPIO_PortSource << 0x04; - tmpreg |= GPIO_PinSource; - AFIO->ECR = tmpreg; -} - -/********************************************************************* - * @fn GPIO_EventOutputCmd - * - * @brief Enables or disables the Event Output. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void GPIO_EventOutputCmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) ECR_EVOE_BB = ( uint32_t )NewState; -} - -/********************************************************************* - * @fn GPIO_PinRemapConfig - * - * @brief Changes the mapping of the specified pin. - * - * @param GPIO_Remap - selects the pin to remap. - * GPIO_Remap_SPI1 - SPI1 Alternate Function mapping - * GPIO_Remap_I2C1 - I2C1 Alternate Function mapping - * GPIO_Remap_USART1 - USART1 Alternate Function mapping - * GPIO_Remap_USART2 - USART2 Alternate Function mapping - * GPIO_PartialRemap_USART3 - USART3 Partial Alternate Function mapping - * GPIO_FullRemap_USART3 - USART3 Full Alternate Function mapping - * GPIO_PartialRemap_TIM1 - TIM1 Partial Alternate Function mapping - * GPIO_FullRemap_TIM1 - TIM1 Full Alternate Function mapping - * GPIO_PartialRemap1_TIM2 - TIM2 Partial1 Alternate Function mapping - * GPIO_PartialRemap2_TIM2 - TIM2 Partial2 Alternate Function mapping - * GPIO_FullRemap_TIM2 - TIM2 Full Alternate Function mapping - * GPIO_PartialRemap_TIM3 - TIM3 Partial Alternate Function mapping - * GPIO_FullRemap_TIM3 - TIM3 Full Alternate Function mapping - * GPIO_Remap_TIM4 - TIM4 Alternate Function mapping - * GPIO_Remap1_CAN1 - CAN1 Alternate Function mapping - * GPIO_Remap2_CAN1 - CAN1 Alternate Function mapping - * GPIO_Remap_PD01 - PD01 Alternate Function mapping - * GPIO_Remap_ADC1_ETRGINJ - ADC1 External Trigger Injected Conversion remapping - * GPIO_Remap_ADC1_ETRGREG - ADC1 External Trigger Regular Conversion remapping - * GPIO_Remap_SWJ_NoJTRST - Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST - * GPIO_Remap_SWJ_JTAGDisable - JTAG-DP Disabled and SW-DP Enabled - * GPIO_Remap_SWJ_Disable - Full SWJ Disabled (JTAG-DP + SW-DP) - * GPIO_Remap_TIM2ITR1_PTP_SOF - Ethernet PTP output or USB OTG SOF (Start of Frame) connected - * connected to TIM2 Internal Trigger 1 for calibration (only for Connectivity line devices).If the - * is enabled the TIM2 ITR1 is connected to Ethernet PTP output. When Reset TIM2 ITR1 is connected - * to USB OTG SOF output. - * GPIO_Remap_TIM1_DMA: TIM1 DMA requests mapping (only for Value line devices) - * GPIO_Remap_TIM67_DAC_DMA: TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices) - * GPIO_Remap_MISC: Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping, - * only for High density Value line devices) - * NewState: ENABLE or DISABLE. - * - * @return none - */ -void GPIO_PinRemapConfig( uint32_t GPIO_Remap, FunctionalState NewState ) -{ - uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00; - - if( ( GPIO_Remap & 0x80000000 ) == 0x80000000 ) - { - tmpreg = AFIO->PCFR2; - } - else - { - tmpreg = AFIO->PCFR1; - } - - tmpmask = ( GPIO_Remap & DBGAFR_POSITION_MASK ) >> 0x10; - tmp = GPIO_Remap & LSB_MASK; - - if( ( GPIO_Remap & ( DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK ) ) == ( DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK ) ) - { - tmpreg &= DBGAFR_SWJCFG_MASK; - AFIO->PCFR1 &= DBGAFR_SWJCFG_MASK; - } - else if( ( GPIO_Remap & DBGAFR_NUMBITS_MASK ) == DBGAFR_NUMBITS_MASK ) - { - tmp1 = ( ( uint32_t )0x03 ) << tmpmask; - tmpreg &= ~tmp1; - tmpreg |= ~DBGAFR_SWJCFG_MASK; - } - else - { - tmpreg &= ~( tmp << ( ( GPIO_Remap >> 0x15 ) * 0x10 ) ); - tmpreg |= ~DBGAFR_SWJCFG_MASK; - } - - if( NewState != DISABLE ) - { - tmpreg |= ( tmp << ( ( GPIO_Remap >> 0x15 ) * 0x10 ) ); - } - - if( ( GPIO_Remap & 0x80000000 ) == 0x80000000 ) - { - AFIO->PCFR2 = tmpreg; - } - else - { - AFIO->PCFR1 = tmpreg; - } -} - -/********************************************************************* - * @fn GPIO_EXTILineConfig - * - * @brief Selects the GPIO pin used as EXTI Line. - * - * @param GPIO_PortSource - selects the GPIO port to be used as source for EXTI lines. - * This parameter can be GPIO_PortSourceGPIOx where x can be (A..G). - * GPIO_PinSource - specifies the EXTI line to be configured. - * This parameter can be GPIO_PinSourcex where x can be (0..15). - * - * @return none - */ -void GPIO_EXTILineConfig( uint8_t GPIO_PortSource, uint8_t GPIO_PinSource ) -{ - uint32_t tmp = 0x00; - - tmp = ( ( uint32_t )0x0F ) << ( 0x04 * ( GPIO_PinSource & ( uint8_t )0x03 ) ); - AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp; - AFIO->EXTICR[GPIO_PinSource >> 0x02] |= ( ( ( uint32_t )GPIO_PortSource ) << ( 0x04 * ( GPIO_PinSource & ( uint8_t )0x03 ) ) ); -} - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_i2c.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_i2c.c deleted file mode 100644 index a51f39d..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_i2c.c +++ /dev/null @@ -1,985 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_i2c.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the I2C firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_i2c.h" -#include "ch32f10x_rcc.h" - - -/* I2C SPE mask */ -#define CTLR1_PE_Set ((uint16_t)0x0001) -#define CTLR1_PE_Reset ((uint16_t)0xFFFE) - -/* I2C START mask */ -#define CTLR1_START_Set ((uint16_t)0x0100) -#define CTLR1_START_Reset ((uint16_t)0xFEFF) - -/* I2C STOP mask */ -#define CTLR1_STOP_Set ((uint16_t)0x0200) -#define CTLR1_STOP_Reset ((uint16_t)0xFDFF) - -/* I2C ACK mask */ -#define CTLR1_ACK_Set ((uint16_t)0x0400) -#define CTLR1_ACK_Reset ((uint16_t)0xFBFF) - -/* I2C ENGC mask */ -#define CTLR1_ENGC_Set ((uint16_t)0x0040) -#define CTLR1_ENGC_Reset ((uint16_t)0xFFBF) - -/* I2C SWRST mask */ -#define CTLR1_SWRST_Set ((uint16_t)0x8000) -#define CTLR1_SWRST_Reset ((uint16_t)0x7FFF) - -/* I2C PEC mask */ -#define CTLR1_PEC_Set ((uint16_t)0x1000) -#define CTLR1_PEC_Reset ((uint16_t)0xEFFF) - -/* I2C ENPEC mask */ -#define CTLR1_ENPEC_Set ((uint16_t)0x0020) -#define CTLR1_ENPEC_Reset ((uint16_t)0xFFDF) - -/* I2C ENARP mask */ -#define CTLR1_ENARP_Set ((uint16_t)0x0010) -#define CTLR1_ENARP_Reset ((uint16_t)0xFFEF) - -/* I2C NOSTRETCH mask */ -#define CTLR1_NOSTRETCH_Set ((uint16_t)0x0080) -#define CTLR1_NOSTRETCH_Reset ((uint16_t)0xFF7F) - -/* I2C registers Masks */ -#define CTLR1_CLEAR_Mask ((uint16_t)0xFBF5) - -/* I2C DMAEN mask */ -#define CTLR2_DMAEN_Set ((uint16_t)0x0800) -#define CTLR2_DMAEN_Reset ((uint16_t)0xF7FF) - -/* I2C LAST mask */ -#define CTLR2_LAST_Set ((uint16_t)0x1000) -#define CTLR2_LAST_Reset ((uint16_t)0xEFFF) - -/* I2C FREQ mask */ -#define CTLR2_FREQ_Reset ((uint16_t)0xFFC0) - -/* I2C ADD0 mask */ -#define OADDR1_ADD0_Set ((uint16_t)0x0001) -#define OADDR1_ADD0_Reset ((uint16_t)0xFFFE) - -/* I2C ENDUAL mask */ -#define OADDR2_ENDUAL_Set ((uint16_t)0x0001) -#define OADDR2_ENDUAL_Reset ((uint16_t)0xFFFE) - -/* I2C ADD2 mask */ -#define OADDR2_ADD2_Reset ((uint16_t)0xFF01) - -/* I2C F/S mask */ -#define CKCFGR_FS_Set ((uint16_t)0x8000) - -/* I2C CCR mask */ -#define CKCFGR_CCR_Set ((uint16_t)0x0FFF) - -/* I2C FLAG mask */ -#define FLAG_Mask ((uint32_t)0x00FFFFFF) - -/* I2C Interrupt Enable mask */ -#define ITEN_Mask ((uint32_t)0x07000000) - - -/********************************************************************* - * @fn I2C_DeInit - * - * @brief Deinitializes the I2Cx peripheral registers to their default - * reset values. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * - * @return none - */ -void I2C_DeInit( I2C_TypeDef *I2Cx ) -{ - if( I2Cx == I2C1 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_I2C1, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_I2C1, DISABLE ); - } - else - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_I2C2, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_I2C2, DISABLE ); - } -} - -/********************************************************************* - * @fn I2C_Init - * - * @brief Initializes the I2Cx peripheral according to the specified - * parameters in the I2C_InitStruct. - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_InitStruct - pointer to a I2C_InitTypeDef structure that - * contains the configuration information for the specified I2C peripheral. - * - * @return none - */ -void I2C_Init( I2C_TypeDef *I2Cx, I2C_InitTypeDef *I2C_InitStruct ) -{ - uint16_t tmpreg = 0, freqrange = 0; - uint16_t result = 0x04; - uint32_t pclk1 = 8000000; - - RCC_ClocksTypeDef rcc_clocks; - - tmpreg = I2Cx->CTLR2; - tmpreg &= CTLR2_FREQ_Reset; - RCC_GetClocksFreq( &rcc_clocks ); - pclk1 = rcc_clocks.PCLK1_Frequency; - freqrange = ( uint16_t )( pclk1 / 1000000 ); - tmpreg |= freqrange; - I2Cx->CTLR2 = tmpreg; - - I2Cx->CTLR1 &= CTLR1_PE_Reset; - tmpreg = 0; - - if( I2C_InitStruct->I2C_ClockSpeed <= 100000 ) - { - result = ( uint16_t )( pclk1 / ( I2C_InitStruct->I2C_ClockSpeed << 1 ) ); - - if( result < 0x04 ) - { - result = 0x04; - } - - tmpreg |= result; - I2Cx->RTR = freqrange + 1; - } - else - { - if( I2C_InitStruct->I2C_DutyCycle == I2C_DutyCycle_2 ) - { - result = ( uint16_t )( pclk1 / ( I2C_InitStruct->I2C_ClockSpeed * 3 ) ); - } - else - { - result = ( uint16_t )( pclk1 / ( I2C_InitStruct->I2C_ClockSpeed * 25 ) ); - result |= I2C_DutyCycle_16_9; - } - - if( ( result & CKCFGR_CCR_Set ) == 0 ) - { - result |= ( uint16_t )0x0001; - } - - tmpreg |= ( uint16_t )( result | CKCFGR_FS_Set ); - I2Cx->RTR = ( uint16_t )( ( ( freqrange * ( uint16_t )300 ) / ( uint16_t )1000 ) + ( uint16_t )1 ); - } - - I2Cx->CKCFGR = tmpreg; - I2Cx->CTLR1 |= CTLR1_PE_Set; - - - tmpreg = I2Cx->CTLR1; - tmpreg &= CTLR1_CLEAR_Mask; - tmpreg |= ( uint16_t )( ( uint32_t )I2C_InitStruct->I2C_Mode | I2C_InitStruct->I2C_Ack ); - I2Cx->CTLR1 = tmpreg; - - I2Cx->OADDR1 = ( I2C_InitStruct->I2C_AcknowledgedAddress | I2C_InitStruct->I2C_OwnAddress1 ); -} - -/********************************************************************* - * @fn I2C_StructInit - * - * @brief Fills each I2C_InitStruct member with its default value. - * - * @param I2C_InitStruct - pointer to an I2C_InitTypeDef structure which - * will be initialized. - * - * @return none - */ -void I2C_StructInit( I2C_InitTypeDef *I2C_InitStruct ) -{ - I2C_InitStruct->I2C_ClockSpeed = 5000; - I2C_InitStruct->I2C_Mode = I2C_Mode_I2C; - I2C_InitStruct->I2C_DutyCycle = I2C_DutyCycle_2; - I2C_InitStruct->I2C_OwnAddress1 = 0; - I2C_InitStruct->I2C_Ack = I2C_Ack_Disable; - I2C_InitStruct->I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; -} - -/********************************************************************* - * @fn I2C_Cmd - * - * @brief Enables or disables the specified I2C peripheral. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_Cmd( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_PE_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_PE_Reset; - } -} - -/********************************************************************* - * @fn I2C_DMACmd - * - * @brief Enables or disables the specified I2C DMA requests. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_DMACmd( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR2 |= CTLR2_DMAEN_Set; - } - else - { - I2Cx->CTLR2 &= CTLR2_DMAEN_Reset; - } -} - -/********************************************************************* - * @fn I2C_DMALastTransferCmd - * - * @brief Specifies if the next DMA transfer will be the last one. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_DMALastTransferCmd( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR2 |= CTLR2_LAST_Set; - } - else - { - I2Cx->CTLR2 &= CTLR2_LAST_Reset; - } -} - -/********************************************************************* - * @fn I2C_GenerateSTART - * - * @brief Generates I2Cx communication START condition. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_GenerateSTART( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_START_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_START_Reset; - } -} - -/********************************************************************* - * @fn I2C_GenerateSTOP - * - * @brief Generates I2Cx communication STOP condition. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_GenerateSTOP( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_STOP_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_STOP_Reset; - } -} - -/********************************************************************* - * @fn I2C_AcknowledgeConfig - * - * @brief Enables or disables the specified I2C acknowledge feature. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_AcknowledgeConfig( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_ACK_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_ACK_Reset; - } -} - -/********************************************************************* - * @fn I2C_OwnAddress2Config - * - * @brief Configures the specified I2C own address2. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * Address - specifies the 7bit I2C own address2. - * - * @return none - */ -void I2C_OwnAddress2Config( I2C_TypeDef *I2Cx, uint8_t Address ) -{ - uint16_t tmpreg = 0; - - tmpreg = I2Cx->OADDR2; - tmpreg &= OADDR2_ADD2_Reset; - tmpreg |= ( uint16_t )( ( uint16_t )Address & ( uint16_t )0x00FE ); - I2Cx->OADDR2 = tmpreg; -} - -/********************************************************************* - * @fn I2C_DualAddressCmd - * - * @brief Enables or disables the specified I2C dual addressing mode. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_DualAddressCmd( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->OADDR2 |= OADDR2_ENDUAL_Set; - } - else - { - I2Cx->OADDR2 &= OADDR2_ENDUAL_Reset; - } -} - -/********************************************************************* - * @fn I2C_GeneralCallCmd - * - * @brief Enables or disables the specified I2C general call feature. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_GeneralCallCmd( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_ENGC_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_ENGC_Reset; - } -} - -/********************************************************************* - * @fn I2C_ITConfig - * - * @brief Enables or disables the specified I2C interrupts. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_IT - specifies the I2C interrupts sources to be enabled or disabled. - * I2C_IT_BUF - Buffer interrupt mask. - * I2C_IT_EVT - Event interrupt mask. - * I2C_IT_ERR - Error interrupt mask. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_ITConfig( I2C_TypeDef *I2Cx, uint16_t I2C_IT, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR2 |= I2C_IT; - } - else - { - I2Cx->CTLR2 &= ( uint16_t )~I2C_IT; - } -} - -/********************************************************************* - * @fn I2C_SendData - * - * @brief Sends a data byte through the I2Cx peripheral. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * Data - Byte to be transmitted. - * - * @return none - */ -void I2C_SendData( I2C_TypeDef *I2Cx, uint8_t Data ) -{ - I2Cx->DATAR = Data; -} - -/********************************************************************* - * @fn I2C_ReceiveData - * - * @brief Returns the most recent received data by the I2Cx peripheral. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * - * @return The value of the received data. - */ -uint8_t I2C_ReceiveData( I2C_TypeDef *I2Cx ) -{ - return ( uint8_t )I2Cx->DATAR; -} - -/********************************************************************* - * @fn I2C_Send7bitAddress - * - * @brief Transmits the address byte to select the slave device. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * Address - specifies the slave address which will be transmitted. - * I2C_Direction - specifies whether the I2C device will be a - * Transmitter or a Receiver. - * I2C_Direction_Transmitter - Transmitter mode. - * I2C_Direction_Receiver - Receiver mode. - * - * @return none - */ -void I2C_Send7bitAddress( I2C_TypeDef *I2Cx, uint8_t Address, uint8_t I2C_Direction ) -{ - if( I2C_Direction != I2C_Direction_Transmitter ) - { - Address |= OADDR1_ADD0_Set; - } - else - { - Address &= OADDR1_ADD0_Reset; - } - - I2Cx->DATAR = Address; -} - -/********************************************************************* - * @fn I2C_ReadRegister - * - * @brief Reads the specified I2C register and returns its value. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_Register - specifies the register to read. - * I2C_Register_CTLR1. - * I2C_Register_CTLR2. - * I2C_Register_OADDR1. - * I2C_Register_OADDR2. - * I2C_Register_DATAR. - * I2C_Register_STAR1. - * I2C_Register_STAR2. - * I2C_Register_CKCFGR. - * I2C_Register_RTR. - * - * @return none - */ -uint16_t I2C_ReadRegister( I2C_TypeDef *I2Cx, uint8_t I2C_Register ) -{ - __IO uint32_t tmp = 0; - - tmp = ( uint32_t ) I2Cx; - tmp += I2C_Register; - - return ( *( __IO uint16_t * ) tmp ); -} - -/********************************************************************* - * @fn I2C_SoftwareResetCmd - * - * @brief Enables or disables the specified I2C software reset. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_SoftwareResetCmd( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_SWRST_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_SWRST_Reset; - } -} - -/********************************************************************* - * @fn I2C_NACKPositionConfig - * - * @brief Selects the specified I2C NACK position in master receiver mode. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_NACKPosition - specifies the NACK position. - * I2C_NACKPosition_Next - indicates that the next byte will be - * the last received byte. - * I2C_NACKPosition_Current - indicates that current byte is the - * last received byte. - * - * @return none - */ -void I2C_NACKPositionConfig( I2C_TypeDef *I2Cx, uint16_t I2C_NACKPosition ) -{ - if( I2C_NACKPosition == I2C_NACKPosition_Next ) - { - I2Cx->CTLR1 |= I2C_NACKPosition_Next; - } - else - { - I2Cx->CTLR1 &= I2C_NACKPosition_Current; - } -} - -/********************************************************************* - * @fn I2C_SMBusAlertConfig - * - * @brief Drives the SMBusAlert pin high or low for the specified I2C. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_SMBusAlert - specifies SMBAlert pin level. - * I2C_SMBusAlert_Low - SMBAlert pin driven low. - * I2C_SMBusAlert_High - SMBAlert pin driven high. - * - * @return none - */ -void I2C_SMBusAlertConfig( I2C_TypeDef *I2Cx, uint16_t I2C_SMBusAlert ) -{ - if( I2C_SMBusAlert == I2C_SMBusAlert_Low ) - { - I2Cx->CTLR1 |= I2C_SMBusAlert_Low; - } - else - { - I2Cx->CTLR1 &= I2C_SMBusAlert_High; - } -} - -/********************************************************************* - * @fn I2C_TransmitPEC - * - * @brief Enables or disables the specified I2C PEC transfer. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_TransmitPEC( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_PEC_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_PEC_Reset; - } -} - -/********************************************************************* - * @fn I2C_PECPositionConfig - * - * @brief Selects the specified I2C PEC position. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_PECPosition - specifies the PEC position. - * I2C_PECPosition_Next - indicates that the next byte is PEC. - * I2C_PECPosition_Current - indicates that current byte is PEC. - * - * @return none - */ -void I2C_PECPositionConfig( I2C_TypeDef *I2Cx, uint16_t I2C_PECPosition ) -{ - if( I2C_PECPosition == I2C_PECPosition_Next ) - { - I2Cx->CTLR1 |= I2C_PECPosition_Next; - } - else - { - I2Cx->CTLR1 &= I2C_PECPosition_Current; - } -} - -/********************************************************************* - * @fn I2C_CalculatePEC - * - * @brief Enables or disables the PEC value calculation of the transferred bytes. - * - * @param I2Cx- where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_CalculatePEC( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_ENPEC_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_ENPEC_Reset; - } -} - -/********************************************************************* - * @fn I2C_GetPEC - * - * @brief Returns the PEC value for the specified I2C. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * - * @return The PEC value. - */ -uint8_t I2C_GetPEC( I2C_TypeDef *I2Cx ) -{ - return ( ( I2Cx->STAR2 ) >> 8 ); -} - -/********************************************************************* - * @fn I2C_ARPCmd - * - * @brief Enables or disables the specified I2C ARP. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return The PEC value. - */ -void I2C_ARPCmd( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_ENARP_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_ENARP_Reset; - } -} - -/********************************************************************* - * @fn I2C_StretchClockCmd - * - * @brief Enables or disables the specified I2C Clock stretching. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_StretchClockCmd( I2C_TypeDef *I2Cx, FunctionalState NewState ) -{ - if( NewState == DISABLE ) - { - I2Cx->CTLR1 |= CTLR1_NOSTRETCH_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_NOSTRETCH_Reset; - } -} - -/********************************************************************* - * @fn I2C_FastModeDutyCycleConfig - * - * @brief Selects the specified I2C fast mode duty cycle. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_DutyCycle - specifies the fast mode duty cycle. - * I2C_DutyCycle_2 - I2C fast mode Tlow/Thigh = 2. - * I2C_DutyCycle_16_9 - I2C fast mode Tlow/Thigh = 16/9. - * - * @return none - */ -void I2C_FastModeDutyCycleConfig( I2C_TypeDef *I2Cx, uint16_t I2C_DutyCycle ) -{ - if( I2C_DutyCycle != I2C_DutyCycle_16_9 ) - { - I2Cx->CKCFGR &= I2C_DutyCycle_2; - } - else - { - I2Cx->CKCFGR |= I2C_DutyCycle_16_9; - } -} - - -/********************************************************************* - * @fn I2C_CheckEvent - * - * @brief Checks whether the last I2Cx Event is equal to the one passed - * as parameter. - * - * @param I2Cx- where x can be 1 or 2 to select the I2C peripheral. - * I2C_EVENT: specifies the event to be checked. - * I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_BYTE_RECEIVED - EV2. - * (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF) - EV2. - * (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL) - EV2. - * I2C_EVENT_SLAVE_BYTE_TRANSMITTED - EV3. - * (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF) - EV3. - * (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL) - EV3. - * I2C_EVENT_SLAVE_ACK_FAILURE - EV3_2. - * I2C_EVENT_SLAVE_STOP_DETECTED - EV4. - * I2C_EVENT_MASTER_MODE_SELECT - EV5. - * I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED - EV6. - * I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED - EV6. - * I2C_EVENT_MASTER_BYTE_RECEIVED - EV7. - * I2C_EVENT_MASTER_BYTE_TRANSMITTING - EV8. - * I2C_EVENT_MASTER_BYTE_TRANSMITTED - EV8_2. - * I2C_EVENT_MASTER_MODE_ADDRESS10 - EV9. - * - * @return ErrorStatus - SUCCESS or ERROR. - */ -ErrorStatus I2C_CheckEvent( I2C_TypeDef *I2Cx, uint32_t I2C_EVENT ) -{ - uint32_t lastevent = 0; - uint32_t flag1 = 0, flag2 = 0; - ErrorStatus status = ERROR; - - flag1 = I2Cx->STAR1; - flag2 = I2Cx->STAR2; - flag2 = flag2 << 16; - - lastevent = ( flag1 | flag2 ) & FLAG_Mask; - - if( ( lastevent & I2C_EVENT ) == I2C_EVENT ) - { - status = SUCCESS; - } - else - { - status = ERROR; - } - - return status; -} - - -/********************************************************************* - * @fn I2C_GetLastEvent - * - * @brief Returns the last I2Cx Event. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * - * @return none - */ -uint32_t I2C_GetLastEvent( I2C_TypeDef *I2Cx ) -{ - uint32_t lastevent = 0; - uint32_t flag1 = 0, flag2 = 0; - - flag1 = I2Cx->STAR1; - flag2 = I2Cx->STAR2; - flag2 = flag2 << 16; - lastevent = ( flag1 | flag2 ) & FLAG_Mask; - - return lastevent; -} - - -/********************************************************************* - * @fn I2C_GetFlagStatus - * - * @brief Checks whether the last I2Cx Event is equal to the one passed - * as parameter. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_FLAG - specifies the flag to check. - * I2C_FLAG_DUALF - Dual flag (Slave mode). - * I2C_FLAG_SMBHOST - SMBus host header (Slave mode). - * I2C_FLAG_SMBDEFAULT - SMBus default header (Slave mode). - * I2C_FLAG_GENCALL - General call header flag (Slave mode). - * I2C_FLAG_TRA - Transmitter/Receiver flag. - * I2C_FLAG_BUSY - Bus busy flag. - * I2C_FLAG_MSL - Master/Slave flag. - * I2C_FLAG_SMBALERT - SMBus Alert flag. - * I2C_FLAG_TIMEOUT - Timeout or Tlow error flag. - * I2C_FLAG_PECERR - PEC error in reception flag. - * I2C_FLAG_OVR - Overrun/Underrun flag (Slave mode). - * I2C_FLAG_AF - Acknowledge failure flag. - * I2C_FLAG_ARLO - Arbitration lost flag (Master mode). - * I2C_FLAG_BERR - Bus error flag. - * I2C_FLAG_TXE - Data register empty flag (Transmitter). - * I2C_FLAG_RXNE- Data register not empty (Receiver) flag. - * I2C_FLAG_STOPF - Stop detection flag (Slave mode). - * I2C_FLAG_ADD10 - 10-bit header sent flag (Master mode). - * I2C_FLAG_BTF - Byte transfer finished flag. - * I2C_FLAG_ADDR - Address sent flag (Master mode) "ADSL" - * Address matched flag (Slave mode)"ENDA". - * I2C_FLAG_SB - Start bit flag (Master mode). - * - * @return FlagStatus - SET or RESET. - */ -FlagStatus I2C_GetFlagStatus( I2C_TypeDef *I2Cx, uint32_t I2C_FLAG ) -{ - FlagStatus bitstatus = RESET; - __IO uint32_t i2creg = 0, i2cxbase = 0; - - i2cxbase = ( uint32_t )I2Cx; - i2creg = I2C_FLAG >> 28; - I2C_FLAG &= FLAG_Mask; - - if( i2creg != 0 ) - { - i2cxbase += 0x14; - } - else - { - I2C_FLAG = ( uint32_t )( I2C_FLAG >> 16 ); - i2cxbase += 0x18; - } - - if( ( ( *( __IO uint32_t * )i2cxbase ) & I2C_FLAG ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn I2C_ClearFlag - * - * @brief Clears the I2Cx's pending flags. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_FLAG - specifies the flag to clear. - * I2C_FLAG_SMBALERT - SMBus Alert flag. - * I2C_FLAG_TIMEOUT - Timeout or Tlow error flag. - * I2C_FLAG_PECERR - PEC error in reception flag. - * I2C_FLAG_OVR - Overrun/Underrun flag (Slave mode). - * I2C_FLAG_AF - Acknowledge failure flag. - * I2C_FLAG_ARLO - Arbitration lost flag (Master mode). - * I2C_FLAG_BERR - Bus error flag. - * - * @return none - */ -void I2C_ClearFlag( I2C_TypeDef *I2Cx, uint32_t I2C_FLAG ) -{ - uint32_t flagpos = 0; - - flagpos = I2C_FLAG & FLAG_Mask; - I2Cx->STAR1 = ( uint16_t )~flagpos; -} - -/********************************************************************* - * @fn I2C_GetITStatus - * - * @brief Checks whether the specified I2C interrupt has occurred or not. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * II2C_IT - specifies the interrupt source to check. - * I2C_IT_SMBALERT - SMBus Alert flag. - * I2C_IT_TIMEOUT - Timeout or Tlow error flag. - * I2C_IT_PECERR - PEC error in reception flag. - * I2C_IT_OVR - Overrun/Underrun flag (Slave mode). - * I2C_IT_AF - Acknowledge failure flag. - * I2C_IT_ARLO - Arbitration lost flag (Master mode). - * I2C_IT_BERR - Bus error flag. - * I2C_IT_TXE - Data register empty flag (Transmitter). - * I2C_IT_RXNE - Data register not empty (Receiver) flag. - * I2C_IT_STOPF - Stop detection flag (Slave mode). - * I2C_IT_ADD10 - 10-bit header sent flag (Master mode). - * I2C_IT_BTF - Byte transfer finished flag. - * I2C_IT_ADDR - Address sent flag (Master mode) "ADSL" Address matched - * flag (Slave mode)"ENDAD". - * I2C_IT_SB - Start bit flag (Master mode). - * - * @return none - */ -ITStatus I2C_GetITStatus( I2C_TypeDef *I2Cx, uint32_t I2C_IT ) -{ - ITStatus bitstatus = RESET; - uint32_t enablestatus = 0; - - enablestatus = ( uint32_t )( ( ( I2C_IT & ITEN_Mask ) >> 16 ) & ( I2Cx->CTLR2 ) ) ; - I2C_IT &= FLAG_Mask; - - if( ( ( I2Cx->STAR1 & I2C_IT ) != ( uint32_t )RESET ) && enablestatus ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn I2C_ClearITPendingBit - * - * @brief Clears the I2Cx interrupt pending bits. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_IT - specifies the interrupt pending bit to clear. - * I2C_IT_SMBALERT - SMBus Alert interrupt. - * I2C_IT_TIMEOUT - Timeout or Tlow error interrupt. - * I2C_IT_PECERR - PEC error in reception interrupt. - * I2C_IT_OVR - Overrun/Underrun interrupt (Slave mode). - * I2C_IT_AF - Acknowledge failure interrupt. - * I2C_IT_ARLO - Arbitration lost interrupt (Master mode). - * I2C_IT_BERR - Bus error interrupt. - * - * @return none - */ -void I2C_ClearITPendingBit( I2C_TypeDef *I2Cx, uint32_t I2C_IT ) -{ - uint32_t flagpos = 0; - - flagpos = I2C_IT & FLAG_Mask; - I2Cx->STAR1 = ( uint16_t )~flagpos; -} - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_iwdg.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_iwdg.c deleted file mode 100644 index a0934fe..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_iwdg.c +++ /dev/null @@ -1,125 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_iwdg.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the IWDG firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_iwdg.h" - -/* CTLR register bit mask */ -#define CTLR_KEY_Reload ((uint16_t)0xAAAA) -#define CTLR_KEY_Enable ((uint16_t)0xCCCC) - -/********************************************************************* - * @fn IWDG_WriteAccessCmd - * - * @brief Enables or disables write access to IWDG_PSCR and IWDG_RLDR registers. - * - * @param WDG_WriteAccess - new state of write access to IWDG_PSCR and - * IWDG_RLDR registers. - * IWDG_WriteAccess_Enable - Enable write access to IWDG_PSCR and - * IWDG_RLDR registers. - * IWDG_WriteAccess_Disable - Disable write access to IWDG_PSCR - * and IWDG_RLDR registers. - * - * @return none - */ -void IWDG_WriteAccessCmd( uint16_t IWDG_WriteAccess ) -{ - IWDG->CTLR = IWDG_WriteAccess; -} - -/********************************************************************* - * @fn IWDG_SetPrescaler - * - * @brief Sets IWDG Prescaler value. - * - * @param IWDG_Prescaler - specifies the IWDG Prescaler value. - * IWDG_Prescaler_4 - IWDG prescaler set to 4. - * IWDG_Prescaler_8 - IWDG prescaler set to 8. - * IWDG_Prescaler_16 - IWDG prescaler set to 16. - * IWDG_Prescaler_32 - IWDG prescaler set to 32. - * IWDG_Prescaler_64 - IWDG prescaler set to 64. - * IWDG_Prescaler_128 - IWDG prescaler set to 128. - * IWDG_Prescaler_256 - IWDG prescaler set to 256. - * - * @return none - */ -void IWDG_SetPrescaler( uint8_t IWDG_Prescaler ) -{ - IWDG->PSCR = IWDG_Prescaler; -} - -/********************************************************************* - * @fn IWDG_SetReload - * - * @brief Sets IWDG Reload value. - * - * @param Reload - specifies the IWDG Reload value. - * This parameter must be a number between 0 and 0x0FFF. - * - * @return none - */ -void IWDG_SetReload( uint16_t Reload ) -{ - IWDG->RLDR = Reload; -} - -/********************************************************************* - * @fn IWDG_ReloadCounter - * - * @brief Reloads IWDG counter with value defined in the reload register. - * - * @return none - */ -void IWDG_ReloadCounter( void ) -{ - IWDG->CTLR = CTLR_KEY_Reload; -} - -/********************************************************************* - * @fn IWDG_Enable - * - * @brief Enables IWDG (write access to IWDG_PSCR and IWDG_RLDR registers disabled). - * - * @return none - */ -void IWDG_Enable( void ) -{ - IWDG->CTLR = CTLR_KEY_Enable; -} - -/********************************************************************* - * @fn IWDG_GetFlagStatus - * - * @brief Checks whether the specified IWDG flag is set or not. - * - * @param IWDG_FLAG - specifies the flag to check. - * IWDG_FLAG_PVU - Prescaler Value Update on going. - * IWDG_FLAG_RVU - Reload Value Update on going. - * - * @return none - */ -FlagStatus IWDG_GetFlagStatus( uint16_t IWDG_FLAG ) -{ - FlagStatus bitstatus = RESET; - - if( ( IWDG->STATR & IWDG_FLAG ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_misc.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_misc.c deleted file mode 100644 index 9e68468..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_misc.c +++ /dev/null @@ -1,148 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_misc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the miscellaneous firmware functions (add-on - * to CMSIS functions). - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *********************************************************************************/ -#include "ch32f10x_misc.h" - -#define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) - - -/********************************************************************* - * @fn NVIC_PriorityGroupConfig - * - * @brief Configures the priority grouping - pre-emption priority and subpriority. - * - * @param NVIC_PriorityGroup - specifies the priority grouping bits length. - * NVIC_PriorityGroup_0 - 0 bits for pre-emption priority - * 4 bits for subpriority - * NVIC_PriorityGroup_1 - 1 bits for pre-emption priority - * 3 bits for subpriority - * NVIC_PriorityGroup_2 - 2 bits for pre-emption priority - * 2 bits for subpriority - * NVIC_PriorityGroup_3 - 3 bits for pre-emption priority - * 1 bits for subpriority - * NVIC_PriorityGroup_4 - 4 bits for pre-emption priority - * 0 bits for subpriority - * - * @return none - */ -void NVIC_PriorityGroupConfig( uint32_t NVIC_PriorityGroup ) -{ - SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup; -} - -/********************************************************************* - * @fn NVIC_Init - * - * @brief Initializes the NVIC peripheral according to the specified parameters in - * the NVIC_InitStruct. - * - * @param NVIC_InitStruct - pointer to a NVIC_InitTypeDef structure that contains the - * configuration information for the specified NVIC peripheral. - * - * @return none - */ -void NVIC_Init( NVIC_InitTypeDef *NVIC_InitStruct ) -{ - uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F; - - if( NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE ) - { - /* Compute the Corresponding IRQ Priority */ - tmppriority = ( 0x700 - ( ( SCB->AIRCR ) & ( uint32_t )0x700 ) ) >> 0x08; - tmppre = ( 0x4 - tmppriority ); - tmpsub = tmpsub >> tmppriority; - - tmppriority = ( uint32_t )NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre; - tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub; - tmppriority = tmppriority << 0x04; - - NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority; - - /* Enable the Selected IRQ Channels */ - NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = - ( uint32_t )0x01 << ( NVIC_InitStruct->NVIC_IRQChannel & ( uint8_t )0x1F ); - } - else - { - /* Disable the Selected IRQ Channels */ - NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = - ( uint32_t )0x01 << ( NVIC_InitStruct->NVIC_IRQChannel & ( uint8_t )0x1F ); - } -} - -/********************************************************************* - * @fn NVIC_SetVectorTable - * - * @brief Sets the vector table location and Offset. - * - * @param NVIC_VectTab - specifies if the vector table is in RAM or FLASH memory.The - * value can be NVIC_VectTab_RAM or NVIC_VectTab_FLASH. - * Offset - Vector Table base offset field. This value must be a multiple of 0x200. - * - * @return none - */ -void NVIC_SetVectorTable( uint32_t NVIC_VectTab, uint32_t Offset ) -{ - SCB->VTOR = NVIC_VectTab | ( Offset & ( uint32_t )0x1FFFFF80 ); -} - -/********************************************************************* - * @fn NVIC_SystemLPConfig - * - * @brief Selects the condition for the system to enter low power mode. - * - * @param LowPowerMode - Specifies the new mode for the system to enter low power mode. - * NVIC_LP_SEVONPEND - * NVIC_LP_SLEEPDEEP - * NVIC_LP_SLEEPONEXIT - * NewState - new state of LP condition. This parameter can be: ENABLE or DISABLE. - * - * @return none - */ -void NVIC_SystemLPConfig( uint8_t LowPowerMode, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - SCB->SCR |= LowPowerMode; - } - else - { - SCB->SCR &= ( uint32_t )( ~( uint32_t )LowPowerMode ); - } -} - - -/********************************************************************* - * @fn SysTick_CLKSourceConfig - * - * @brief Configures the SysTick clock source. - * - * @param SysTick_CLKSource: Specifies the new mode for the system to enter low power mode. - * ysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source. - * SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source. - * - * @return none - */ -void SysTick_CLKSourceConfig( uint32_t SysTick_CLKSource ) -{ - if( SysTick_CLKSource == SysTick_CLKSource_HCLK ) - { - SysTick->CTRL |= SysTick_CLKSource_HCLK; - } - else - { - SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; - } -} - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_pwr.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_pwr.c deleted file mode 100644 index 80eee67..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_pwr.c +++ /dev/null @@ -1,218 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_pwr.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the PWR firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ -#include "ch32f10x_pwr.h" -#include "ch32f10x_rcc.h" - -/* PWR registers bit address in the alias region */ -#define PWR_OFFSET (PWR_BASE - PERIPH_BASE) - -/* CTLR Register */ -/* Alias word address of DBP bit */ -#define CTLR_OFFSET (PWR_OFFSET + 0x00) -#define DBP_BitNumber 0x08 -#define CTLR_DBP_BB (PERIPH_BB_BASE + (CTLR_OFFSET * 32) + (DBP_BitNumber * 4)) - -/* Alias word address of PVDE bit */ -#define PVDE_BitNumber 0x04 -#define CTLR_PVDE_BB (PERIPH_BB_BASE + (CTLR_OFFSET * 32) + (PVDE_BitNumber * 4)) - -/* CSR Register */ -/* Alias word address of EWUP bit */ -#define CSR_OFFSET (PWR_OFFSET + 0x04) -#define EWUP_BitNumber 0x08 -#define CSR_EWUP_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (EWUP_BitNumber * 4)) - -/* PWR registers bit mask */ -/* CTLR register bit mask */ -#define CTLR_DS_MASK ((uint32_t)0xFFFFFFFC) -#define CTLR_PLS_MASK ((uint32_t)0xFFFFFF1F) - -/********************************************************************* - * @fn PWR_DeInit - * - * @brief Deinitializes the PWR peripheral registers to their default - * reset values. - * - * @return none - */ -void PWR_DeInit( void ) -{ - RCC_APB1PeriphResetCmd( RCC_APB1Periph_PWR, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_PWR, DISABLE ); -} - - -/********************************************************************* - * @fn PWR_BackupAccessCmd - * - * @brief Enables or disables access to the RTC and backup registers. - * - * @param NewState - new state of the access to the RTC and backup registers, - * This parameter can be: ENABLE or DISABLE. - * - * @return none - */ -void PWR_BackupAccessCmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) CTLR_DBP_BB = ( uint32_t )NewState; -} - - -/********************************************************************* - * @fn PWR_PVDCmd - * - * @brief Enables or disables the Power Voltage Detector(PVD). - * - * @param NewState - new state of the PVD(ENABLE or DISABLE). - * - * @return none - */ -void PWR_PVDCmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) CTLR_PVDE_BB = ( uint32_t )NewState; -} - - -/********************************************************************* - * @fn PWR_PVDLevelConfig - * - * @brief Configures the voltage threshold detected by the Power Voltage - * Detector(PVD). - * - * @param PWR_PVDLevel - specifies the PVD detection level - * PWR_PVDLevel_2V2 - PVD detection level set to 2.2V - * PWR_PVDLevel_2V3 - PVD detection level set to 2.3V - * PWR_PVDLevel_2V4 - PVD detection level set to 2.4V - * PWR_PVDLevel_2V5 - PVD detection level set to 2.5V - * PWR_PVDLevel_2V6 - PVD detection level set to 2.6V - * PWR_PVDLevel_2V7 - PVD detection level set to 2.7V - * PWR_PVDLevel_2V8 - PVD detection level set to 2.8V - * PWR_PVDLevel_2V9 - PVD detection level set to 2.9V - * - * @return none - */ -void PWR_PVDLevelConfig( uint32_t PWR_PVDLevel ) -{ - uint32_t tmpreg = 0; - tmpreg = PWR->CTLR; - tmpreg &= CTLR_PLS_MASK; - tmpreg |= PWR_PVDLevel; - PWR->CTLR = tmpreg; -} - - -/********************************************************************* - * @fn PWR_WakeUpPinCmd - * - * @brief Enables or disables the WakeUp Pin functionality. - * - * @param NewState - new state of the WakeUp Pin functionality - * (ENABLE or DISABLE). - * - * @return none - */ -void PWR_WakeUpPinCmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) CSR_EWUP_BB = ( uint32_t )NewState; -} - - -/********************************************************************* - * @fn PWR_EnterSTOPMode - * - * @brief Enters STOP mode. - * - * @param PWR_Regulator - specifies the regulator state in STOP mode. - * PWR_Regulator_ON - STOP mode with regulator ON - * PWR_Regulator_LowPower - STOP mode with regulator in low power mode - * PWR_STOPEntry - specifies if STOP mode in entered with WFI or WFE instruction. - * PWR_STOPEntry_WFI - enter STOP mode with WFI instruction - * PWR_STOPEntry_WFE - enter STOP mode with WFE instruction - * - * @return none - */ -void PWR_EnterSTOPMode( uint32_t PWR_Regulator, uint8_t PWR_STOPEntry ) -{ - uint32_t tmpreg = 0; - tmpreg = PWR->CTLR; - tmpreg &= CTLR_DS_MASK; - tmpreg |= PWR_Regulator; - PWR->CTLR = tmpreg; - SCB->SCR |= SCB_SCR_SLEEPDEEP; - - if( PWR_STOPEntry == PWR_STOPEntry_WFI ) - { - __WFI(); - } - else - { - __WFE(); - } - - SCB->SCR &= ( uint32_t )~( ( uint32_t )SCB_SCR_SLEEPDEEP ); -} - -/********************************************************************* - * @fn PWR_EnterSTANDBYMode - * - * @brief Enters STANDBY mode. - * - * @return none - */ -void PWR_EnterSTANDBYMode( void ) -{ - PWR->CTLR |= PWR_CTLR_CWUF; - PWR->CTLR |= PWR_CTLR_PDDS; - SCB->SCR |= SCB_SCR_SLEEPDEEP; -#if defined ( __CC_ARM ) - __force_stores(); -#endif - __WFI(); -} - - -/******************************************************************************** -* Function Name : PWR_GetFlagStatus -* Description : Checks whether the specified PWR flag is set or not. -* Input : PWR_FLAG: specifies the flag to check. -* PWR_FLAG_WU: Wake Up flag -* PWR_FLAG_SB: StandBy flag -* PWR_FLAG_PVDO: PVD Output -* Return : The new state of PWR_FLAG (SET or RESET). -*********************************************************************************/ -FlagStatus PWR_GetFlagStatus( uint32_t PWR_FLAG ) -{ - FlagStatus bitstatus = RESET; - - if( ( PWR->CSR & PWR_FLAG ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - - -/******************************************************************************** -* Function Name : PWR_ClearFlag -* Description : Clears the PWR's pending flags. -* Input : PWR_FLAG: specifies the flag to clear. -* PWR_FLAG_WU: Wake Up flag -* PWR_FLAG_SB: StandBy flag -* Return : None -*********************************************************************************/ -void PWR_ClearFlag( uint32_t PWR_FLAG ) -{ - PWR->CTLR |= PWR_FLAG << 2; -} - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_rcc.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_rcc.c deleted file mode 100644 index 59b8814..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_rcc.c +++ /dev/null @@ -1,931 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_rcc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the RCC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_rcc.h" - -/* RCC registers bit address in the alias region */ -#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) - -/* CTLR Register */ - -/* Alias word address of HSION bit */ -#define CTLR_OFFSET (RCC_OFFSET + 0x00) -#define HSION_BitNumber 0x00 -#define CTLR_HSION_BB (PERIPH_BB_BASE + (CTLR_OFFSET * 32) + (HSION_BitNumber * 4)) - -/* Alias word address of PLLON bit */ -#define PLLON_BitNumber 0x18 -#define CTLR_PLLON_BB (PERIPH_BB_BASE + (CTLR_OFFSET * 32) + (PLLON_BitNumber * 4)) - -/* Alias word address of CSSON bit */ -#define CSSON_BitNumber 0x13 -#define CTLR_CSSON_BB (PERIPH_BB_BASE + (CTLR_OFFSET * 32) + (CSSON_BitNumber * 4)) - -/* CFGR0 Register */ - -/* Alias word address of USBPRE bit */ -#define CFGR0_OFFSET (RCC_OFFSET + 0x04) -#define USBPRE_BitNumber 0x16 -#define CFGR0_USBPRE_BB (PERIPH_BB_BASE + (CFGR0_OFFSET * 32) + (USBPRE_BitNumber * 4)) - -/* BDCTLR Register */ - -/* Alias word address of RTCEN bit */ -#define BDCTLR_OFFSET (RCC_OFFSET + 0x20) -#define RTCEN_BitNumber 0x0F -#define BDCTLR_RTCEN_BB (PERIPH_BB_BASE + (BDCTLR_OFFSET * 32) + (RTCEN_BitNumber * 4)) - -/* Alias word address of BDRST bit */ -#define BDRST_BitNumber 0x10 -#define BDCTLR_BDRST_BB (PERIPH_BB_BASE + (BDCTLR_OFFSET * 32) + (BDRST_BitNumber * 4)) - -/* RSTSCKR Register */ - -/* Alias word address of LSION bit */ -#define RSTSCKR_OFFSET (RCC_OFFSET + 0x24) -#define LSION_BitNumber 0x00 -#define RSTSCKR_LSION_BB (PERIPH_BB_BASE + (RSTSCKR_OFFSET * 32) + (LSION_BitNumber * 4)) - -/* RCC registers bit mask */ - -/* CTLR register bit mask */ -#define CTLR_HSEBYP_Reset ((uint32_t)0xFFFBFFFF) -#define CTLR_HSEBYP_Set ((uint32_t)0x00040000) -#define CTLR_HSEON_Reset ((uint32_t)0xFFFEFFFF) -#define CTLR_HSEON_Set ((uint32_t)0x00010000) -#define CTLR_HSITRIM_Mask ((uint32_t)0xFFFFFF07) - -#define CFGR0_PLL_Mask ((uint32_t)0xFFC0FFFF) -#define CFGR0_PLLMull_Mask ((uint32_t)0x003C0000) -#define CFGR0_PLLSRC_Mask ((uint32_t)0x00010000) -#define CFGR0_PLLXTPRE_Mask ((uint32_t)0x00020000) -#define CFGR0_SWS_Mask ((uint32_t)0x0000000C) -#define CFGR0_SW_Mask ((uint32_t)0xFFFFFFFC) -#define CFGR0_HPRE_Reset_Mask ((uint32_t)0xFFFFFF0F) -#define CFGR0_HPRE_Set_Mask ((uint32_t)0x000000F0) -#define CFGR0_PPRE1_Reset_Mask ((uint32_t)0xFFFFF8FF) -#define CFGR0_PPRE1_Set_Mask ((uint32_t)0x00000700) -#define CFGR0_PPRE2_Reset_Mask ((uint32_t)0xFFFFC7FF) -#define CFGR0_PPRE2_Set_Mask ((uint32_t)0x00003800) -#define CFGR0_ADCPRE_Reset_Mask ((uint32_t)0xFFFF3FFF) -#define CFGR0_ADCPRE_Set_Mask ((uint32_t)0x0000C000) - -/* RSTSCKR register bit mask */ -#define RSTSCKR_RMVF_Set ((uint32_t)0x01000000) - -/* RCC Flag Mask */ -#define FLAG_Mask ((uint8_t)0x1F) - -/* INTR register byte 2 (Bits[15:8]) base address */ -#define INTR_BYTE2_ADDRESS ((uint32_t)0x40021009) - -/* INTR register byte 3 (Bits[23:16]) base address */ -#define INTR_BYTE3_ADDRESS ((uint32_t)0x4002100A) - -/* CFGR0 register byte 4 (Bits[31:24]) base address */ -#define CFGR0_BYTE4_ADDRESS ((uint32_t)0x40021007) - -/* BDCTLR register base address */ -#define BDCTLR_ADDRESS (PERIPH_BASE + BDCTLR_OFFSET) - - -static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; -static __I uint8_t ADCPrescTable[4] = {2, 4, 6, 8}; - -/********************************************************************* - * @fn RCC_DeInit - * - * @brief Resets the RCC clock configuration to the default reset state. - * - * @return none - */ -void RCC_DeInit( void ) -{ - RCC->CTLR |= ( uint32_t )0x00000001; - RCC->CFGR0 &= ( uint32_t )0xF8FF0000; - RCC->CTLR &= ( uint32_t )0xFEF6FFFF; - RCC->CTLR &= ( uint32_t )0xFFFBFFFF; - RCC->CFGR0 &= ( uint32_t )0xFF80FFFF; - RCC->INTR = 0x009F0000; -} - -/********************************************************************* - * @fn RCC_HSEConfig - * - * @brief Configures the External High Speed oscillator (HSE). - * - * @param RCC_HSE - - * RCC_HSE_OFF - HSE oscillator OFF. - * RCC_HSE_ON - HSE oscillator ON. - * RCC_HSE_Bypass - HSE oscillator bypassed with external clock. - * - * @return none - */ -void RCC_HSEConfig( uint32_t RCC_HSE ) -{ - RCC->CTLR &= CTLR_HSEON_Reset; - RCC->CTLR &= CTLR_HSEBYP_Reset; - - switch( RCC_HSE ) - { - case RCC_HSE_ON: - RCC->CTLR |= CTLR_HSEON_Set; - break; - - case RCC_HSE_Bypass: - RCC->CTLR |= CTLR_HSEBYP_Set | CTLR_HSEON_Set; - break; - - default: - break; - } -} - -/********************************************************************* - * @fn RCC_WaitForHSEStartUp - * - * @brief Waits for HSE start-up. - * - * @return SUCCESS - HSE oscillator is stable and ready to use. - * ERROR - HSE oscillator not yet ready. - */ -ErrorStatus RCC_WaitForHSEStartUp( void ) -{ - __IO uint32_t StartUpCounter = 0; - - ErrorStatus status = ERROR; - FlagStatus HSEStatus = RESET; - - do - { - HSEStatus = RCC_GetFlagStatus( RCC_FLAG_HSERDY ); - StartUpCounter++; - } - while( ( StartUpCounter != HSE_STARTUP_TIMEOUT ) && ( HSEStatus == RESET ) ); - - if( RCC_GetFlagStatus( RCC_FLAG_HSERDY ) != RESET ) - { - status = SUCCESS; - } - else - { - status = ERROR; - } - - return ( status ); -} - -/********************************************************************* - * @fn RCC_AdjustHSICalibrationValue - * - * @brief Adjusts the Internal High Speed oscillator (HSI) calibration value. - * - * @param HSICalibrationValue - specifies the calibration trimming value. - * This parameter must be a number between 0 and 0x1F. - * - * @return none - */ -void RCC_AdjustHSICalibrationValue( uint8_t HSICalibrationValue ) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CTLR; - tmpreg &= CTLR_HSITRIM_Mask; - tmpreg |= ( uint32_t )HSICalibrationValue << 3; - RCC->CTLR = tmpreg; -} - -/********************************************************************* - * @fn RCC_HSICmd - * - * @brief Enables or disables the Internal High Speed oscillator (HSI). - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_HSICmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) CTLR_HSION_BB = ( uint32_t )NewState; -} - -/********************************************************************* - * @fn RCC_PLLConfig - * - * @brief Configures the PLL clock source and multiplication factor. - * - * @param RCC_PLLSource - specifies the PLL entry clock source. - * RCC_PLLSource_HSI_Div2 - HSI oscillator clock divided by 2 - * selected as PLL clock entry. - * RCC_PLLSource_HSE_Div1 - HSE oscillator clock selected as PLL - * clock entry. - * RCC_PLLSource_HSE_Div2 - HSE oscillator clock divided by 2 - * selected as PLL clock entry. - * RCC_PLLMul - specifies the PLL multiplication factor. - * This parameter can be RCC_PLLMul_x where x:[2,16]. - * - * @return none - */ -void RCC_PLLConfig( uint32_t RCC_PLLSource, uint32_t RCC_PLLMul ) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_PLL_Mask; - tmpreg |= RCC_PLLSource | RCC_PLLMul; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_PLLCmd - * - * @brief Enables or disables the PLL. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_PLLCmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) CTLR_PLLON_BB = ( uint32_t )NewState; -} - -/********************************************************************* - * @fn RCC_SYSCLKConfig - * - * @brief Configures the system clock (SYSCLK). - * - * @param RCC_SYSCLKSource - specifies the clock source used as system clock. - * RCC_SYSCLKSource_HSI - HSI selected as system clock. - * RCC_SYSCLKSource_HSE - HSE selected as system clock. - * RCC_SYSCLKSource_PLLCLK - PLL selected as system clock. - * - * @return none - */ -void RCC_SYSCLKConfig( uint32_t RCC_SYSCLKSource ) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_SW_Mask; - tmpreg |= RCC_SYSCLKSource; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_GetSYSCLKSource - * - * @brief Returns the clock source used as system clock. - * - * @return 0x00 - HSI used as system clock. - * 0x04 - HSE used as system clock. - * 0x08 - PLL used as system clock. - */ -uint8_t RCC_GetSYSCLKSource( void ) -{ - return ( ( uint8_t )( RCC->CFGR0 & CFGR0_SWS_Mask ) ); -} - -/********************************************************************* - * @fn RCC_HCLKConfig - * - * @brief Configures the AHB clock (HCLK). - * - * @param RCC_SYSCLK - defines the AHB clock divider. This clock is derived from - * the system clock (SYSCLK). - * RCC_SYSCLK_Div1 - AHB clock = SYSCLK. - * RCC_SYSCLK_Div2 - AHB clock = SYSCLK/2. - * RCC_SYSCLK_Div4 - AHB clock = SYSCLK/4. - * RCC_SYSCLK_Div8 - AHB clock = SYSCLK/8. - * RCC_SYSCLK_Div16 - AHB clock = SYSCLK/16. - * RCC_SYSCLK_Div64 - AHB clock = SYSCLK/64. - * RCC_SYSCLK_Div128 - AHB clock = SYSCLK/128. - * RCC_SYSCLK_Div256 - AHB clock = SYSCLK/256. - * RCC_SYSCLK_Div512 - AHB clock = SYSCLK/512. - * - * @return none - */ -void RCC_HCLKConfig( uint32_t RCC_SYSCLK ) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_HPRE_Reset_Mask; - tmpreg |= RCC_SYSCLK; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_PCLK1Config - * - * @brief Configures the Low Speed APB clock (PCLK1). - * - * @param RCC_HCLK - defines the APB1 clock divider. This clock is derived from - * the AHB clock (HCLK). - * RCC_HCLK_Div1 - APB1 clock = HCLK. - * RCC_HCLK_Div2 - APB1 clock = HCLK/2. - * RCC_HCLK_Div4 - APB1 clock = HCLK/4. - * RCC_HCLK_Div8 - APB1 clock = HCLK/8. - * RCC_HCLK_Div16 - APB1 clock = HCLK/16. - * - * @return none - */ -void RCC_PCLK1Config( uint32_t RCC_HCLK ) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_PPRE1_Reset_Mask; - tmpreg |= RCC_HCLK; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_PCLK2Config - * - * @brief Configures the High Speed APB clock (PCLK2). - * - * @param RCC_HCLK - defines the APB2 clock divider. This clock is derived from - * the AHB clock (HCLK). - * RCC_HCLK_Div1 - APB1 clock = HCLK. - * RCC_HCLK_Div2 - APB1 clock = HCLK/2. - * RCC_HCLK_Div4 - APB1 clock = HCLK/4. - * RCC_HCLK_Div8 - APB1 clock = HCLK/8. - * RCC_HCLK_Div16 - APB1 clock = HCLK/16. - * - * @return none - */ -void RCC_PCLK2Config( uint32_t RCC_HCLK ) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_PPRE2_Reset_Mask; - tmpreg |= RCC_HCLK << 3; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_ITConfig - * - * @brief Enables or disables the specified RCC interrupts. - * - * @param RCC_IT - specifies the RCC interrupt sources to be enabled or disabled. - * RCC_IT_LSIRDY - LSI ready interrupt. - * RCC_IT_LSERDY - LSE ready interrupt. - * RCC_IT_HSIRDY - HSI ready interrupt. - * RCC_IT_HSERDY - HSE ready interrupt. - * RCC_IT_PLLRDY - PLL ready interrupt. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_ITConfig( uint8_t RCC_IT, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - *( __IO uint8_t * ) INTR_BYTE2_ADDRESS |= RCC_IT; - } - else - { - *( __IO uint8_t * ) INTR_BYTE2_ADDRESS &= ( uint8_t )~RCC_IT; - } -} - -/********************************************************************* - * @fn RCC_USBCLKConfig - * - * @brief Configures the USB clock (USBCLK). - * - * @param RCC_USBCLKSource: specifies the USB clock source. This clock is - * derived from the PLL output. - * RCC_USBCLKSource_PLLCLK_1Div5: PLL clock divided by 1,5 selected as USB - * clock source. - * RCC_USBCLKSource_PLLCLK_Div1: PLL clock selected as USB clock source. - * - * @return none - */ -void RCC_USBCLKConfig( uint32_t RCC_USBCLKSource ) -{ - *( __IO uint32_t * ) CFGR0_USBPRE_BB = RCC_USBCLKSource; -} - -/********************************************************************* - * @fn RCC_ADCCLKConfig - * - * @brief Configures the ADC clock (ADCCLK). - * - * @param RCC_PCLK2 - defines the ADC clock divider. This clock is derived from - * the APB2 clock (PCLK2). - * RCC_PCLK2_Div2 - ADC clock = PCLK2/2. - * RCC_PCLK2_Div4 - ADC clock = PCLK2/4. - * RCC_PCLK2_Div6 - ADC clock = PCLK2/6. - * RCC_PCLK2_Div8 - ADC clock = PCLK2/8. - * - * @return none - */ -void RCC_ADCCLKConfig( uint32_t RCC_PCLK2 ) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_ADCPRE_Reset_Mask; - tmpreg |= RCC_PCLK2; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_LSEConfig - * - * @brief Configures the External Low Speed oscillator (LSE). - * - * @param RCC_LSE - specifies the new state of the LSE. - * RCC_LSE_OFF - LSE oscillator OFF. - * RCC_LSE_ON - LSE oscillator ON. - * RCC_LSE_Bypass - LSE oscillator bypassed with external clock. - * - * @return none - */ -void RCC_LSEConfig( uint8_t RCC_LSE ) -{ - *( __IO uint8_t * ) BDCTLR_ADDRESS = RCC_LSE_OFF; - *( __IO uint8_t * ) BDCTLR_ADDRESS = RCC_LSE_OFF; - - switch( RCC_LSE ) - { - case RCC_LSE_ON: - *( __IO uint8_t * ) BDCTLR_ADDRESS = RCC_LSE_ON; - break; - - case RCC_LSE_Bypass: - *( __IO uint8_t * ) BDCTLR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON; - break; - - default: - break; - } -} - -/********************************************************************* - * @fn RCC_LSICmd - * - * @brief Enables or disables the Internal Low Speed oscillator (LSI). - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_LSICmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) RSTSCKR_LSION_BB = ( uint32_t )NewState; -} - -/********************************************************************* - * @fn RCC_RTCCLKConfig - * - * @brief Once the RTC clock is selected it can't be changed unless the Backup domain is reset. - * - * @param RCC_RTCCLKSource - specifies the RTC clock source. - * RCC_RTCCLKSource_LSE - LSE selected as RTC clock. - * RCC_RTCCLKSource_LSI - LSI selected as RTC clock. - * RCC_RTCCLKSource_HSE_Div128 - HSE clock divided by 128 selected as RTC clock. - * - * @return none - */ -void RCC_RTCCLKConfig( uint32_t RCC_RTCCLKSource ) -{ - RCC->BDCTLR |= RCC_RTCCLKSource; -} - -/********************************************************************* - * @fn RCC_RTCCLKCmd - * - * @brief This function must be used only after the RTC clock was selected - * using the RCC_RTCCLKConfig function. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_RTCCLKCmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) BDCTLR_RTCEN_BB = ( uint32_t )NewState; -} - -/********************************************************************* - * @fn RCC_GetClocksFreq - * - * @brief The result of this function could be not correct when using - * fractional value for HSE crystal. - * - * @param RCC_Clocks - pointer to a RCC_ClocksTypeDef structure which will hold - * the clocks frequencies. - * - * @return none - */ -void RCC_GetClocksFreq( RCC_ClocksTypeDef *RCC_Clocks ) -{ - uint32_t tmp = 0, pllmull = 0, pllsource = 0, presc = 0; - - tmp = RCC->CFGR0 & CFGR0_SWS_Mask; - - switch( tmp ) - { - case 0x00: - RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; - break; - - case 0x04: - RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; - break; - - case 0x08: - pllmull = RCC->CFGR0 & CFGR0_PLLMull_Mask; - pllsource = RCC->CFGR0 & CFGR0_PLLSRC_Mask; - pllmull = ( pllmull >> 18 ) + 2; - - if( pllsource == 0x00 ) - { - if( EXTEN->EXTEN_CTR & EXTEN_PLL_HSI_PRE ) - { - RCC_Clocks->SYSCLK_Frequency = ( HSI_VALUE ) * pllmull; - } - else - { - RCC_Clocks->SYSCLK_Frequency = ( HSI_VALUE >> 1 ) * pllmull; - } - } - else - { - if( ( RCC->CFGR0 & CFGR0_PLLXTPRE_Mask ) != ( uint32_t )RESET ) - { - RCC_Clocks->SYSCLK_Frequency = ( HSE_VALUE >> 1 ) * pllmull; - } - else - { - RCC_Clocks->SYSCLK_Frequency = HSE_VALUE * pllmull; - } - } - break; - - default: - RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; - break; - } - - tmp = RCC->CFGR0 & CFGR0_HPRE_Set_Mask; - tmp = tmp >> 4; - presc = APBAHBPrescTable[tmp]; - RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc; - tmp = RCC->CFGR0 & CFGR0_PPRE1_Set_Mask; - tmp = tmp >> 8; - presc = APBAHBPrescTable[tmp]; - RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc; - tmp = RCC->CFGR0 & CFGR0_PPRE2_Set_Mask; - tmp = tmp >> 11; - presc = APBAHBPrescTable[tmp]; - RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc; - tmp = RCC->CFGR0 & CFGR0_ADCPRE_Set_Mask; - tmp = tmp >> 14; - presc = ADCPrescTable[tmp]; - RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc; -} - -/********************************************************************* - * @fn RCC_AHBPeriphClockCmd - * - * @brief Enables or disables the AHB peripheral clock. - * - * @param RCC_AHBPeriph - specifies the AHB peripheral to gates its clock. - * RCC_AHBPeriph_DMA1. - * RCC_AHBPeriph_DMA2. - * RCC_AHBPeriph_SRAM. - * NewState: ENABLE or DISABLE. - * - * @return none - */ -void RCC_AHBPeriphClockCmd( uint32_t RCC_AHBPeriph, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - RCC->AHBPCENR |= RCC_AHBPeriph; - } - else - { - RCC->AHBPCENR &= ~RCC_AHBPeriph; - } -} - -/********************************************************************* - * @fn RCC_APB2PeriphClockCmd - * - * @brief Enables or disables the High Speed APB (APB2) peripheral clock. - * - * @param RCC_APB2Periph - specifies the APB2 peripheral to gates its clock. - * RCC_APB2Periph_AFIO. - * RCC_APB2Periph_GPIOA. - * RCC_APB2Periph_GPIOB. - * RCC_APB2Periph_GPIOC. - * RCC_APB2Periph_GPIOD. - * RCC_APB2Periph_GPIOE - * RCC_APB2Periph_ADC1. - * RCC_APB2Periph_ADC2 - * RCC_APB2Periph_TIM1. - * RCC_APB2Periph_SPI1. - * RCC_APB2Periph_TIM8 - * RCC_APB2Periph_USART1. - * NewState - ENABLE or DISABLE - * - * @return none - */ -void RCC_APB2PeriphClockCmd( uint32_t RCC_APB2Periph, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - RCC->APB2PCENR |= RCC_APB2Periph; - } - else - { - RCC->APB2PCENR &= ~RCC_APB2Periph; - } -} - -/********************************************************************* - * @fn RCC_APB1PeriphClockCmd - * - * @brief Enables or disables the Low Speed APB (APB1) peripheral clock. - * - * @param RCC_APB1Periph - specifies the APB1 peripheral to gates its clock. - * RCC_APB1Periph_TIM2. - * RCC_APB1Periph_TIM3. - * RCC_APB1Periph_TIM4. - * RCC_APB1Periph_WWDG. - * RCC_APB1Periph_SPI2. - * RCC_APB1Periph_USART2. - * RCC_APB1Periph_I2C1. - * RCC_APB1Periph_I2C2. - * RCC_APB1Periph_USB. - * RCC_APB1Periph_CAN1. - * RCC_APB1Periph_BKP. - * RCC_APB1Periph_PWR. - * RCC_APB1Periph_DAC. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_APB1PeriphClockCmd( uint32_t RCC_APB1Periph, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - RCC->APB1PCENR |= RCC_APB1Periph; - } - else - { - RCC->APB1PCENR &= ~RCC_APB1Periph; - } -} - -/********************************************************************* - * @fn RCC_APB2PeriphResetCmd - * - * @brief Forces or releases High Speed APB (APB2) peripheral reset. - * - * @param RCC_APB2Periph - specifies the APB2 peripheral to reset. - * RCC_APB2Periph_AFIO. - * RCC_APB2Periph_GPIOA. - * RCC_APB2Periph_GPIOB. - * RCC_APB2Periph_GPIOC. - * RCC_APB2Periph_GPIOD. - * RCC_APB2Periph_GPIOE - * RCC_APB2Periph_ADC1. - * RCC_APB2Periph_TIM1. - * RCC_APB2Periph_SPI1. - * RCC_APB2Periph_USART1. - * NewState - ENABLE or DISABLE - * - * @return none - */ -void RCC_APB2PeriphResetCmd( uint32_t RCC_APB2Periph, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - RCC->APB2PRSTR |= RCC_APB2Periph; - } - else - { - RCC->APB2PRSTR &= ~RCC_APB2Periph; - } -} - -/********************************************************************* - * @fn RCC_APB1PeriphResetCmd - * - * @brief Forces or releases Low Speed APB (APB1) peripheral reset. - * - * @param RCC_APB1Periph - specifies the APB1 peripheral to reset. - * RCC_APB1Periph_TIM2. - * RCC_APB1Periph_TIM3. - * RCC_APB1Periph_TIM4. - * RCC_APB1Periph_WWDG. - * RCC_APB1Periph_SPI2. - * RCC_APB1Periph_USART2. - * RCC_APB1Periph_USART3. - * RCC_APB1Periph_I2C1. - * RCC_APB1Periph_I2C2. - * RCC_APB1Periph_USB. - * RCC_APB1Periph_CAN1. - * RCC_APB1Periph_BKP. - * RCC_APB1Periph_PWR. - * RCC_APB1Periph_DAC. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_APB1PeriphResetCmd( uint32_t RCC_APB1Periph, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - RCC->APB1PRSTR |= RCC_APB1Periph; - } - else - { - RCC->APB1PRSTR &= ~RCC_APB1Periph; - } -} - -/********************************************************************* - * @fn RCC_BackupResetCmd - * - * @brief Forces or releases the Backup domain reset. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_BackupResetCmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) BDCTLR_BDRST_BB = ( uint32_t )NewState; -} - -/********************************************************************* - * @fn RCC_ClockSecuritySystemCmd - * - * @brief Enables or disables the Clock Security System. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_ClockSecuritySystemCmd( FunctionalState NewState ) -{ - *( __IO uint32_t * ) CTLR_CSSON_BB = ( uint32_t )NewState; -} - -/********************************************************************* - * @fn RCC_MCOConfig - * - * @brief Selects the clock source to output on MCO pin. - * - * @param RCC_MCO - specifies the clock source to output. - * RCC_MCO_NoClock - No clock selected. - * RCC_MCO_SYSCLK - System clock selected. - * RCC_MCO_HSI - HSI oscillator clock selected. - * RCC_MCO_HSE - HSE oscillator clock selected. - * RCC_MCO_PLLCLK_Div2 - PLL clock divided by 2 selected. - * - * @return none - */ -void RCC_MCOConfig( uint8_t RCC_MCO ) -{ - *( __IO uint8_t * ) CFGR0_BYTE4_ADDRESS = RCC_MCO; -} - -/********************************************************************* - * @fn RCC_GetFlagStatus - * - * @brief Checks whether the specified RCC flag is set or not. - * - * @param RCC_FLAG - specifies the flag to check. - * RCC_FLAG_HSIRDY - HSI oscillator clock ready. - * RCC_FLAG_HSERDY - HSE oscillator clock ready. - * RCC_FLAG_PLLRDY - PLL clock ready. - * RCC_FLAG_LSERDY - LSE oscillator clock ready. - * RCC_FLAG_LSIRDY - LSI oscillator clock ready. - * RCC_FLAG_PINRST - Pin reset. - * RCC_FLAG_PORRST - POR/PDR reset. - * RCC_FLAG_SFTRST - Software reset. - * RCC_FLAG_IWDGRST - Independent Watchdog reset. - * RCC_FLAG_WWDGRST - Window Watchdog reset. - * RCC_FLAG_LPWRRST - Low Power reset. - * - * @return FlagStatus - SET or RESET. - */ -FlagStatus RCC_GetFlagStatus( uint8_t RCC_FLAG ) -{ - uint32_t tmp = 0; - uint32_t statusreg = 0; - - FlagStatus bitstatus = RESET; - tmp = RCC_FLAG >> 5; - - if( tmp == 1 ) - { - statusreg = RCC->CTLR; - } - else if( tmp == 2 ) - { - statusreg = RCC->BDCTLR; - } - else - { - statusreg = RCC->RSTSCKR; - } - - tmp = RCC_FLAG & FLAG_Mask; - - if( ( statusreg & ( ( uint32_t )1 << tmp ) ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn RCC_ClearFlag - * - * @brief Clears the RCC reset flags. - * - * @return none - */ -void RCC_ClearFlag( void ) -{ - RCC->RSTSCKR |= RSTSCKR_RMVF_Set; -} - -/********************************************************************* - * @fn RCC_GetITStatus - * - * @brief Checks whether the specified RCC interrupt has occurred or not. - * - * @param RCC_IT - specifies the RCC interrupt source to check. - * RCC_IT_LSIRDY - LSI ready interrupt. - * RCC_IT_LSERDY - LSE ready interrupt. - * RCC_IT_HSIRDY - HSI ready interrupt. - * RCC_IT_HSERDY - HSE ready interrupt. - * RCC_IT_PLLRDY - PLL ready interrupt. - * RCC_IT_CSS - Clock Security System interrupt. - * - * @return ITStatus - SET or RESET. - */ -ITStatus RCC_GetITStatus( uint8_t RCC_IT ) -{ - ITStatus bitstatus = RESET; - - if( ( RCC->INTR & RCC_IT ) != ( uint32_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn RCC_ClearITPendingBit - * - * @brief Clears the RCC's interrupt pending bits. - * - * @param RCC_IT - specifies the interrupt pending bit to clear. - * RCC_IT_LSIRDY - LSI ready interrupt. - * RCC_IT_LSERDY - LSE ready interrupt. - * RCC_IT_HSIRDY - HSI ready interrupt. - * RCC_IT_HSERDY - HSE ready interrupt. - * RCC_IT_PLLRDY - PLL ready interrupt. - * RCC_IT_CSS - Clock Security System interrupt. - * - * @return none - */ -void RCC_ClearITPendingBit( uint8_t RCC_IT ) -{ - *( __IO uint8_t * ) INTR_BYTE3_ADDRESS = RCC_IT; -} - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_rtc.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_rtc.c deleted file mode 100644 index ba4da86..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_rtc.c +++ /dev/null @@ -1,285 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_rtc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the RTC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ - -#include "ch32f10x_rtc.h" - -/* RTC_Private_Defines */ -#define RTC_LSB_MASK ((uint32_t)0x0000FFFF) /* RTC LSB Mask */ -#define PRLH_MSB_MASK ((uint32_t)0x000F0000) /* RTC Prescaler MSB Mask */ - - -/********************************************************************* - * @fn RTC_ITConfig - * - * @brief Enables or disables the specified RTC interrupts. - * - * @param RTC_IT - specifies the RTC interrupts sources to be enabled or disabled. - * RTC_IT_OW - Overflow interrupt - * RTC_IT_ALR - Alarm interrupt - * RTC_IT_SEC - Second interrupt - * - * @return NewState - new state of the specified RTC interrupts(ENABLE or DISABLE). - */ -void RTC_ITConfig( uint16_t RTC_IT, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - RTC->CTLRH |= RTC_IT; - } - else - { - RTC->CTLRH &= ( uint16_t )~RTC_IT; - } -} - -/********************************************************************* - * @fn RTC_EnterConfigMode - * - * @brief Enters the RTC configuration mode. - * - * @return none - */ -void RTC_EnterConfigMode( void ) -{ - RTC->CTLRL |= RTC_CTLRL_CNF; -} - - -/********************************************************************* - * @fn RTC_ExitConfigMode - * - * @brief Exits from the RTC configuration mode. - * - * @return none - */ -void RTC_ExitConfigMode( void ) -{ - RTC->CTLRL &= ( uint16_t )~( ( uint16_t )RTC_CTLRL_CNF ); -} - - -/********************************************************************* - * @fn RTC_GetCounter - * - * @brief Gets the RTC counter value - * - * @return RTC counter value - */ -uint32_t RTC_GetCounter( void ) -{ - uint16_t high1 = 0, high2 = 0, low = 0; - - high1 = RTC->CNTH; - low = RTC->CNTL; - high2 = RTC->CNTH; - - if( high1 != high2 ) - { - return ( ( ( uint32_t ) high2 << 16 ) | RTC->CNTL ); - } - else - { - return ( ( ( uint32_t ) high1 << 16 ) | low ); - } -} - - -/********************************************************************* - * @fn RTC_SetCounter - * - * @brief Sets the RTC counter value. - * - * @param CounterValue - RTC counter new value. - * - * @return RTC counter value - */ -void RTC_SetCounter( uint32_t CounterValue ) -{ - RTC_EnterConfigMode(); - RTC->CNTH = CounterValue >> 16; - RTC->CNTL = ( CounterValue & RTC_LSB_MASK ); - RTC_ExitConfigMode(); -} - - -/********************************************************************* - * @fn RTC_SetPrescaler - * - * @brief Sets the RTC prescaler value - * - * @param PrescalerValue - RTC prescaler new value - * - * @return none - */ -void RTC_SetPrescaler( uint32_t PrescalerValue ) -{ - RTC_EnterConfigMode(); - RTC->PSCRH = ( PrescalerValue & PRLH_MSB_MASK ) >> 16; - RTC->PSCRL = ( PrescalerValue & RTC_LSB_MASK ); - RTC_ExitConfigMode(); -} - - -/********************************************************************* - * @fn RTC_SetAlarm - * - * @brief Sets the RTC alarm value - * - * @param AlarmValue - RTC alarm new value - * - * @return none - */ -void RTC_SetAlarm( uint32_t AlarmValue ) -{ - RTC_EnterConfigMode(); - RTC->ALRMH = AlarmValue >> 16; - RTC->ALRML = ( AlarmValue & RTC_LSB_MASK ); - RTC_ExitConfigMode(); -} - - -/********************************************************************* - * @fn RTC_GetDivider - * - * @brief Gets the RTC divider value - * - * @return RTC Divider value - */ -uint32_t RTC_GetDivider( void ) -{ - uint32_t tmp = 0x00; - tmp = ( ( uint32_t )RTC->DIVH & ( uint32_t )0x000F ) << 16; - tmp |= RTC->DIVL; - return tmp; -} - -/********************************************************************* - * @fn RTC_WaitForLastTask - * - * @brief Waits until last write operation on RTC registers has finished - * - * @return none - */ -void RTC_WaitForLastTask( void ) -{ - while( ( RTC->CTLRL & RTC_FLAG_RTOFF ) == ( uint16_t )RESET ) - { - } -} - - -/********************************************************************* - * @fn RTC_WaitForSynchro - * - * @brief Waits until the RTC registers are synchronized with RTC APB clock - * - * @return none - */ -void RTC_WaitForSynchro( void ) -{ - RTC->CTLRL &= ( uint16_t )~RTC_FLAG_RSF; - while( ( RTC->CTLRL & RTC_FLAG_RSF ) == ( uint16_t )RESET ) - { - } -} - - -/********************************************************************* - * @fn RTC_GetFlagStatus - * - * @brief Checks whether the specified RTC flag is set or not - * - * @param RTC_FLAG- specifies the flag to check - * RTC_FLAG_RTOFF - RTC Operation OFF flag - * RTC_FLAG_RSF - Registers Synchronized flag - * RTC_FLAG_OW - Overflow flag - * RTC_FLAG_ALR - Alarm flag - * RTC_FLAG_SEC - Second flag - * - * @return The new state of RTC_FLAG (SET or RESET) - */ -FlagStatus RTC_GetFlagStatus( uint16_t RTC_FLAG ) -{ - FlagStatus bitstatus = RESET; - if( ( RTC->CTLRL & RTC_FLAG ) != ( uint16_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn RTC_ClearFlag - * - * @brief Clears the RTC's pending flags - * - * @param RTC_FLAG - specifies the flag to clear - * RTC_FLAG_RSF - Registers Synchronized flag - * RTC_FLAG_OW - Overflow flag - * RTC_FLAG_ALR - Alarm flag - * RTC_FLAG_SEC - Second flag - * - * @return none - */ -void RTC_ClearFlag( uint16_t RTC_FLAG ) -{ - RTC->CTLRL &= ( uint16_t )~RTC_FLAG; -} - - -/********************************************************************* - * @fn RTC_GetITStatus - * - * @brief Checks whether the specified RTC interrupt has occurred or not - * - * @param RTC_IT - specifies the RTC interrupts sources to check - * RTC_FLAG_OW - Overflow interrupt - * RTC_FLAG_ALR - Alarm interrupt - * RTC_FLAG_SEC - Second interrupt - * - * @return The new state of the RTC_IT (SET or RESET) - */ -ITStatus RTC_GetITStatus( uint16_t RTC_IT ) -{ - ITStatus bitstatus = RESET; - - bitstatus = ( ITStatus )( RTC->CTLRL & RTC_IT ); - if( ( ( RTC->CTLRH & RTC_IT ) != ( uint16_t )RESET ) && ( bitstatus != ( uint16_t )RESET ) ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn RTC_ClearITPendingBit - * - * @brief Clears the RTC's interrupt pending bits - * - * @param RTC_IT - specifies the interrupt pending bit to clear - * RTC_FLAG_OW - Overflow interrupt - * RTC_FLAG_ALR - Alarm interrupt - * RTC_FLAG_SEC - Second interrupt - * - * @return none - */ -void RTC_ClearITPendingBit( uint16_t RTC_IT ) -{ - RTC->CTLRL &= ( uint16_t )~RTC_IT; -} - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_spi.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_spi.c deleted file mode 100644 index 078697f..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_spi.c +++ /dev/null @@ -1,654 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_spi.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the SPI firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *********************************************************************************/ -#include "ch32f10x_spi.h" -#include "ch32f10x_rcc.h" - -/* SPI SPE mask */ -#define CTLR1_SPE_Set ((uint16_t)0x0040) -#define CTLR1_SPE_Reset ((uint16_t)0xFFBF) - -/* I2S I2SE mask */ -#define I2SCFGR_I2SE_Set ((uint16_t)0x0400) -#define I2SCFGR_I2SE_Reset ((uint16_t)0xFBFF) - -/* SPI CRCNext mask */ -#define CTLR1_CRCNext_Set ((uint16_t)0x1000) - -/* SPI CRCEN mask */ -#define CTLR1_CRCEN_Set ((uint16_t)0x2000) -#define CTLR1_CRCEN_Reset ((uint16_t)0xDFFF) - -/* SPI SSOE mask */ -#define CTLR2_SSOE_Set ((uint16_t)0x0004) -#define CTLR2_SSOE_Reset ((uint16_t)0xFFFB) - -/* SPI registers Masks */ -#define CTLR1_CLEAR_Mask ((uint16_t)0x3040) -#define I2SCFGR_CLEAR_Mask ((uint16_t)0xF040) - -/* SPI or I2S mode selection masks */ -#define SPI_Mode_Select ((uint16_t)0xF7FF) -#define I2S_Mode_Select ((uint16_t)0x0800) - -/* I2S clock source selection masks */ -#define I2S2_CLOCK_SRC ((uint32_t)(0x00020000)) -#define I2S3_CLOCK_SRC ((uint32_t)(0x00040000)) -#define I2S_MUL_MASK ((uint32_t)(0x0000F000)) -#define I2S_DIV_MASK ((uint32_t)(0x000000F0)) - -/********************************************************************* - * @fn SPI_I2S_DeInit - * - * @brief Deinitializes the SPIx peripheral registers to their default - * reset values (Affects also the I2Ss). - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * - * @return none - */ -void SPI_I2S_DeInit( SPI_TypeDef *SPIx ) -{ - if( SPIx == SPI1 ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_SPI1, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_SPI1, DISABLE ); - } - else if( SPIx == SPI2 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_SPI2, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_SPI2, DISABLE ); - } - else - { - if( SPIx == SPI3 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_SPI3, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_SPI3, DISABLE ); - } - } -} - -/********************************************************************* - * @fn SPI_Init - * - * @brief Initializes the SPIx peripheral according to the specified - * parameters in the SPI_InitStruct. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_InitStruct - pointer to a SPI_InitTypeDef structure that - * contains the configuration information for the specified SPI peripheral. - * - * @return none - */ -void SPI_Init( SPI_TypeDef *SPIx, SPI_InitTypeDef *SPI_InitStruct ) -{ - uint16_t tmpreg = 0; - - tmpreg = SPIx->CTLR1; - tmpreg &= CTLR1_CLEAR_Mask; - tmpreg |= ( uint16_t )( ( uint32_t )SPI_InitStruct->SPI_Direction | SPI_InitStruct->SPI_Mode | - SPI_InitStruct->SPI_DataSize | SPI_InitStruct->SPI_CPOL | - SPI_InitStruct->SPI_CPHA | SPI_InitStruct->SPI_NSS | - SPI_InitStruct->SPI_BaudRatePrescaler | SPI_InitStruct->SPI_FirstBit ); - - SPIx->CTLR1 = tmpreg; - SPIx->I2SCFGR &= SPI_Mode_Select; - SPIx->CRCR = SPI_InitStruct->SPI_CRCPolynomial; -} - -/********************************************************************* - * @fn I2S_Init - * - * @brief Initializes the SPIx peripheral according to the specified - * parameters in the I2S_InitStruct. - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * (configured in I2S mode). - * I2S_InitStruct - pointer to an I2S_InitTypeDef structure that - * contains the configuration information for the specified SPI peripheral - * configured in I2S mode. - * @return none - */ -void I2S_Init( SPI_TypeDef *SPIx, I2S_InitTypeDef *I2S_InitStruct ) -{ - uint16_t tmpreg = 0, i2sdiv = 2, i2sodd = 0, packetlength = 1; - uint32_t tmp = 0; - RCC_ClocksTypeDef RCC_Clocks; - uint32_t sourceclock = 0; - - SPIx->I2SCFGR &= I2SCFGR_CLEAR_Mask; - SPIx->I2SPR = 0x0002; - tmpreg = SPIx->I2SCFGR; - - if( I2S_InitStruct->I2S_AudioFreq == I2S_AudioFreq_Default ) - { - i2sodd = ( uint16_t )0; - i2sdiv = ( uint16_t )2; - } - else - { - if( I2S_InitStruct->I2S_DataFormat == I2S_DataFormat_16b ) - { - packetlength = 1; - } - else - { - packetlength = 2; - } - - if( ( ( uint32_t )SPIx ) == SPI2_BASE ) - { - tmp = I2S2_CLOCK_SRC; - } - else - { - tmp = I2S3_CLOCK_SRC; - } - - RCC_GetClocksFreq( &RCC_Clocks ); - - sourceclock = RCC_Clocks.SYSCLK_Frequency; - - if( I2S_InitStruct->I2S_MCLKOutput == I2S_MCLKOutput_Enable ) - { - tmp = ( uint16_t )( ( ( ( ( sourceclock / 256 ) * 10 ) / I2S_InitStruct->I2S_AudioFreq ) ) + 5 ); - } - else - { - tmp = ( uint16_t )( ( ( ( ( sourceclock / ( 32 * packetlength ) ) * 10 ) / I2S_InitStruct->I2S_AudioFreq ) ) + 5 ); - } - - tmp = tmp / 10; - i2sodd = ( uint16_t )( tmp & ( uint16_t )0x0001 ); - i2sdiv = ( uint16_t )( ( tmp - i2sodd ) / 2 ); - i2sodd = ( uint16_t )( i2sodd << 8 ); - } - - if( ( i2sdiv < 2 ) || ( i2sdiv > 0xFF ) ) - { - i2sdiv = 2; - i2sodd = 0; - } - - SPIx->I2SPR = ( uint16_t )( i2sdiv | ( uint16_t )( i2sodd | ( uint16_t )I2S_InitStruct->I2S_MCLKOutput ) ); - tmpreg |= ( uint16_t )( I2S_Mode_Select | ( uint16_t )( I2S_InitStruct->I2S_Mode | \ - ( uint16_t )( I2S_InitStruct->I2S_Standard | ( uint16_t )( I2S_InitStruct->I2S_DataFormat | \ - ( uint16_t )I2S_InitStruct->I2S_CPOL ) ) ) ); - SPIx->I2SCFGR = tmpreg; -} - -/********************************************************************* - * @fn SPI_StructInit - * - * @brief Fills each SPI_InitStruct member with its default value. - * - * @param SPI_InitStruct - pointer to a SPI_InitTypeDef structure which - * will be initialized. - * - * @return none - */ -void SPI_StructInit( SPI_InitTypeDef *SPI_InitStruct ) -{ - SPI_InitStruct->SPI_Direction = SPI_Direction_2Lines_FullDuplex; - SPI_InitStruct->SPI_Mode = SPI_Mode_Slave; - SPI_InitStruct->SPI_DataSize = SPI_DataSize_8b; - SPI_InitStruct->SPI_CPOL = SPI_CPOL_Low; - SPI_InitStruct->SPI_CPHA = SPI_CPHA_1Edge; - SPI_InitStruct->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; - SPI_InitStruct->SPI_FirstBit = SPI_FirstBit_MSB; - SPI_InitStruct->SPI_CRCPolynomial = 7; -} - -/********************************************************************* - * @fn I2S_StructInit - * - * @brief Fills each I2S_InitStruct member with its default value. - * - * @param I2S_InitStruct - pointer to a I2S_InitTypeDef structure which - * will be initialized. - * - * @return none - */ -void I2S_StructInit( I2S_InitTypeDef *I2S_InitStruct ) -{ - I2S_InitStruct->I2S_Mode = I2S_Mode_SlaveTx; - I2S_InitStruct->I2S_Standard = I2S_Standard_Phillips; - I2S_InitStruct->I2S_DataFormat = I2S_DataFormat_16b; - I2S_InitStruct->I2S_MCLKOutput = I2S_MCLKOutput_Disable; - I2S_InitStruct->I2S_AudioFreq = I2S_AudioFreq_Default; - I2S_InitStruct->I2S_CPOL = I2S_CPOL_Low; -} - -/********************************************************************* - * @fn SPI_Cmd - * - * @brief Enables or disables the specified SPI peripheral. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void SPI_Cmd( SPI_TypeDef *SPIx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - SPIx->CTLR1 |= CTLR1_SPE_Set; - } - else - { - SPIx->CTLR1 &= CTLR1_SPE_Reset; - } -} - -/********************************************************************* - * @fn I2S_Cmd - * - * @brief Enables or disables the specified SPI peripheral (in I2S mode). - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2S_Cmd( SPI_TypeDef *SPIx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - SPIx->I2SCFGR |= I2SCFGR_I2SE_Set; - } - else - { - SPIx->I2SCFGR &= I2SCFGR_I2SE_Reset; - } -} - -/********************************************************************* - * @fn SPI_I2S_ITConfig - * - * @brief Enables or disables the specified SPI/I2S interrupts. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_IT - specifies the SPI/I2S interrupt source to be - * enabled or disabled. - * SPI_I2S_IT_TXE - Tx buffer empty interrupt mask. - * SPI_I2S_IT_RXNE - Rx buffer not empty interrupt mask. - * SPI_I2S_IT_ERR - Error interrupt mask. - * NewState: ENABLE or DISABLE. - * @return none - */ -void SPI_I2S_ITConfig( SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState ) -{ - uint16_t itpos = 0, itmask = 0 ; - - itpos = SPI_I2S_IT >> 4; - itmask = ( uint16_t )1 << ( uint16_t )itpos; - - if( NewState != DISABLE ) - { - SPIx->CTLR2 |= itmask; - } - else - { - SPIx->CTLR2 &= ( uint16_t )~itmask; - } -} - -/********************************************************************* - * @fn SPI_I2S_DMACmd - * - * @brief Enables or disables the SPIx/I2Sx DMA interface. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_DMAReq - specifies the SPI/I2S DMA transfer request to - * be enabled or disabled. - * SPI_I2S_DMAReq_Tx - Tx buffer DMA transfer request. - * SPI_I2S_DMAReq_Rx - Rx buffer DMA transfer request. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void SPI_I2S_DMACmd( SPI_TypeDef *SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - SPIx->CTLR2 |= SPI_I2S_DMAReq; - } - else - { - SPIx->CTLR2 &= ( uint16_t )~SPI_I2S_DMAReq; - } -} - -/********************************************************************* - * @fn SPI_I2S_SendData - * - * @brief Transmits a Data through the SPIx/I2Sx peripheral. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * Data - Data to be transmitted. - * - * @return none - */ -void SPI_I2S_SendData( SPI_TypeDef *SPIx, uint16_t Data ) -{ - SPIx->DATAR = Data; -} - -/********************************************************************* - * @fn SPI_I2S_ReceiveData - * - * @brief Returns the most recent received data by the SPIx/I2Sx peripheral. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * Data - Data to be transmitted. - * - * @return SPIx->DATAR - The value of the received data. - */ -uint16_t SPI_I2S_ReceiveData( SPI_TypeDef *SPIx ) -{ - return SPIx->DATAR; -} - -/********************************************************************* - * @fn SPI_NSSInternalSoftwareConfig - * - * @brief Configures internally by software the NSS pin for the selected SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_NSSInternalSoft - - * SPI_NSSInternalSoft_Set - Set NSS pin internally. - * SPI_NSSInternalSoft_Reset - Reset NSS pin internally. - * - * @return none - */ -void SPI_NSSInternalSoftwareConfig( SPI_TypeDef *SPIx, uint16_t SPI_NSSInternalSoft ) -{ - if( SPI_NSSInternalSoft != SPI_NSSInternalSoft_Reset ) - { - SPIx->CTLR1 |= SPI_NSSInternalSoft_Set; - } - else - { - SPIx->CTLR1 &= SPI_NSSInternalSoft_Reset; - } -} - -/********************************************************************* - * @fn SPI_SSOutputCmd - * - * @brief Enables or disables the SS output for the selected SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * NewState - new state of the SPIx SS output. - * - * @return none - */ -void SPI_SSOutputCmd( SPI_TypeDef *SPIx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - SPIx->CTLR2 |= CTLR2_SSOE_Set; - } - else - { - SPIx->CTLR2 &= CTLR2_SSOE_Reset; - } -} - -/********************************************************************* - * @fn SPI_DataSizeConfig - * - * @brief Configures the data size for the selected SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_DataSize - specifies the SPI data size. - * SPI_DataSize_16b - Set data frame format to 16bit. - * SPI_DataSize_8b - Set data frame format to 8bit. - * - * @return none - */ -void SPI_DataSizeConfig( SPI_TypeDef *SPIx, uint16_t SPI_DataSize ) -{ - SPIx->CTLR1 &= ( uint16_t )~SPI_DataSize_16b; - SPIx->CTLR1 |= SPI_DataSize; -} - -/********************************************************************* - * @fn SPI_TransmitCRC - * - * @brief Transmit the SPIx CRC value. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * - * @return none - */ -void SPI_TransmitCRC( SPI_TypeDef *SPIx ) -{ - SPIx->CTLR1 |= CTLR1_CRCNext_Set; -} - -/********************************************************************* - * @fn SPI_CalculateCRC - * - * @brief Enables or disables the CRC value calculation of the transferred bytes. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * NewState - new state of the SPIx CRC value calculation. - * - * @return none - */ -void SPI_CalculateCRC( SPI_TypeDef *SPIx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - SPIx->CTLR1 |= CTLR1_CRCEN_Set; - } - else - { - SPIx->CTLR1 &= CTLR1_CRCEN_Reset; - } -} - -/********************************************************************* - * @fn SPI_GetCRC - * - * @brief Returns the transmit or the receive CRC register value for the specified SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_CRC - specifies the CRC register to be read. - * SPI_CRC_Tx - Selects Tx CRC register. - * SPI_CRC_Rx - Selects Rx CRC register. - * - * @return crcreg: The selected CRC register value. - */ -uint16_t SPI_GetCRC( SPI_TypeDef *SPIx, uint8_t SPI_CRC ) -{ - uint16_t crcreg = 0; - - if( SPI_CRC != SPI_CRC_Rx ) - { - crcreg = SPIx->TCRCR; - } - else - { - crcreg = SPIx->RCRCR; - } - - return crcreg; -} - -/********************************************************************* - * @fn SPI_GetCRCPolynomial - * - * @brief Returns the CRC Polynomial register value for the specified SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * - * @return SPIx->CRCR - The CRC Polynomial register value. - */ -uint16_t SPI_GetCRCPolynomial( SPI_TypeDef *SPIx ) -{ - return SPIx->CRCR; -} - -/********************************************************************* - * @fn SPI_BiDirectionalLineConfig - * - * @brief Selects the data transfer direction in bi-directional mode - * for the specified SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_Direction - specifies the data transfer direction in - * bi-directional mode. - * SPI_Direction_Tx - Selects Tx transmission direction. - * SPI_Direction_Rx - Selects Rx receive direction. - * - * @return none - */ -void SPI_BiDirectionalLineConfig( SPI_TypeDef *SPIx, uint16_t SPI_Direction ) -{ - if( SPI_Direction == SPI_Direction_Tx ) - { - SPIx->CTLR1 |= SPI_Direction_Tx; - } - else - { - SPIx->CTLR1 &= SPI_Direction_Rx; - } -} - -/********************************************************************* - * @fn SPI_I2S_GetFlagStatus - * - * @brief Checks whether the specified SPI/I2S flag is set or not. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_FLAG - specifies the SPI/I2S flag to check. - * SPI_I2S_FLAG_TXE - Transmit buffer empty flag. - * SPI_I2S_FLAG_RXNE - Receive buffer not empty flag. - * SPI_I2S_FLAG_BSY - Busy flag. - * SPI_I2S_FLAG_OVR - Overrun flag. - * SPI_FLAG_MODF - Mode Fault flag. - * SPI_FLAG_CRCERR - CRC Error flag. - * I2S_FLAG_UDR - Underrun Error flag. - * I2S_FLAG_CHSIDE - Channel Side flag. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus SPI_I2S_GetFlagStatus( SPI_TypeDef *SPIx, uint16_t SPI_I2S_FLAG ) -{ - FlagStatus bitstatus = RESET; - - if( ( SPIx->STATR & SPI_I2S_FLAG ) != ( uint16_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn SPI_I2S_ClearFlag - * - * @brief Clears the SPIx CRC Error (CRCERR) flag. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_FLAG - specifies the SPI flag to clear. - * SPI_FLAG_CRCERR - CRC Error flag. - * - * @return FlagStatus: SET or RESET. - */ -void SPI_I2S_ClearFlag( SPI_TypeDef *SPIx, uint16_t SPI_I2S_FLAG ) -{ - SPIx->STATR = ( uint16_t )~SPI_I2S_FLAG; -} - -/********************************************************************* - * @fn SPI_I2S_GetITStatus - * - * @brief Checks whether the specified SPI/I2S interrupt has occurred or not. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_IT - specifies the SPI/I2S interrupt source to check.. - * SPI_I2S_IT_TXE - Transmit buffer empty interrupt. - * SPI_I2S_IT_RXNE - Receive buffer not empty interrupt. - * SPI_I2S_IT_OVR - Overrun interrupt. - * SPI_IT_MODF - Mode Fault interrupt. - * SPI_IT_CRCERR - CRC Error interrupt. - * I2S_IT_UDR - Underrun Error interrupt. - * - * @return FlagStatus: SET or RESET. - */ -ITStatus SPI_I2S_GetITStatus( SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT ) -{ - ITStatus bitstatus = RESET; - uint16_t itpos = 0, itmask = 0, enablestatus = 0; - - itpos = 0x01 << ( SPI_I2S_IT & 0x0F ); - itmask = SPI_I2S_IT >> 4; - itmask = 0x01 << itmask; - enablestatus = ( SPIx->CTLR2 & itmask ) ; - - if( ( ( SPIx->STATR & itpos ) != ( uint16_t )RESET ) && enablestatus ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn SPI_I2S_ClearITPendingBit - * - * @brief Clears the SPIx CRC Error (CRCERR) interrupt pending bit. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * SPI_I2S_IT - specifies the SPI interrupt pending bit to clear. - * SPI_IT_CRCERR - CRC Error interrupt. - * - * @return none - */ -void SPI_I2S_ClearITPendingBit( SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT ) -{ - uint16_t itpos = 0; - - itpos = 0x01 << ( SPI_I2S_IT & 0x0F ); - SPIx->STATR = ( uint16_t )~itpos; -} - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_tim.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_tim.c deleted file mode 100644 index 6d60ea8..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_tim.c +++ /dev/null @@ -1,2362 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_tim.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the TIM firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_tim.h" -#include "ch32f10x_rcc.h" - -/* TIM registers bit mask */ -#define SMCFGR_ETR_Mask ((uint16_t)0x00FF) -#define CHCTLR_Offset ((uint16_t)0x0018) -#define CCER_CCE_Set ((uint16_t)0x0001) -#define CCER_CCNE_Set ((uint16_t)0x0004) - -static void TI1_Config( TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter ); -static void TI2_Config( TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter ); -static void TI3_Config( TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter ); -static void TI4_Config( TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter ); - - -/********************************************************************* - * @fn TIM_DeInit - * - * @brief Deinitializes the TIMx peripheral registers to their default - * reset values. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * - * @return none - */ -void TIM_DeInit( TIM_TypeDef *TIMx ) -{ - if( TIMx == TIM1 ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_TIM1, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_TIM1, DISABLE ); - } - else if( TIMx == TIM2 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_TIM2, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_TIM2, DISABLE ); - } - else if( TIMx == TIM3 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_TIM3, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_TIM3, DISABLE ); - } - else if( TIMx == TIM4 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_TIM4, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_TIM4, DISABLE ); - } -} - -/********************************************************************* - * @fn TIM_TimeBaseInit - * - * @brief Initializes the TIMx Time Base Unit peripheral according to - * the specified parameters in the TIM_TimeBaseInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_TimeBaseInitStruct - pointer to a TIM_TimeBaseInitTypeDef - * structure. - * - * @return none - */ -void TIM_TimeBaseInit( TIM_TypeDef *TIMx, TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct ) -{ - uint16_t tmpcr1 = 0; - - tmpcr1 = TIMx->CTLR1; - - if( ( TIMx == TIM1 ) || ( TIMx == TIM2 ) || ( TIMx == TIM3 ) || ( TIMx == TIM4 ) ) - { - tmpcr1 &= ( uint16_t )( ~( ( uint16_t )( TIM_DIR | TIM_CMS ) ) ); - tmpcr1 |= ( uint32_t )TIM_TimeBaseInitStruct->TIM_CounterMode; - } - - tmpcr1 &= ( uint16_t )( ~( ( uint16_t )TIM_CTLR1_CKD ) ); - tmpcr1 |= ( uint32_t )TIM_TimeBaseInitStruct->TIM_ClockDivision; - - TIMx->CTLR1 = tmpcr1; - TIMx->ATRLR = TIM_TimeBaseInitStruct->TIM_Period ; - TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler; - - if( TIMx == TIM1 ) - { - TIMx->RPTCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter; - } - - TIMx->SWEVGR = TIM_PSCReloadMode_Immediate; -} - -/********************************************************************* - * @fn TIM_OC1Init - * - * @brief Initializes the TIMx Channel1 according to the specified - * parameters in the TIM_OCInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OC1Init( TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct ) -{ - uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; - - TIMx->CCER &= ( uint16_t )( ~( uint16_t )TIM_CC1E ); - tmpccer = TIMx->CCER; - tmpcr2 = TIMx->CTLR2; - tmpccmrx = TIMx->CHCTLR1; - tmpccmrx &= ( uint16_t )( ~( ( uint16_t )TIM_OC1M ) ); - tmpccmrx &= ( uint16_t )( ~( ( uint16_t )TIM_CC1S ) ); - tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC1P ) ); - tmpccer |= TIM_OCInitStruct->TIM_OCPolarity; - tmpccer |= TIM_OCInitStruct->TIM_OutputState; - - if( TIMx == TIM1 ) - { - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC1NP ) ); - tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity; - - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC1NE ) ); - tmpccer |= TIM_OCInitStruct->TIM_OutputNState; - - tmpcr2 &= ( uint16_t )( ~( ( uint16_t )TIM_OIS1 ) ); - tmpcr2 &= ( uint16_t )( ~( ( uint16_t )TIM_OIS1N ) ); - - tmpcr2 |= TIM_OCInitStruct->TIM_OCIdleState; - tmpcr2 |= TIM_OCInitStruct->TIM_OCNIdleState; - } - - TIMx->CTLR2 = tmpcr2; - TIMx->CHCTLR1 = tmpccmrx; - TIMx->CH1CVR = TIM_OCInitStruct->TIM_Pulse; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC2Init - * - * @brief Initializes the TIMx Channel2 according to the specified - * parameters in the TIM_OCInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OC2Init( TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct ) -{ - uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; - - TIMx->CCER &= ( uint16_t )( ~( ( uint16_t )TIM_CC2E ) ); - tmpccer = TIMx->CCER; - tmpcr2 = TIMx->CTLR2; - tmpccmrx = TIMx->CHCTLR1; - tmpccmrx &= ( uint16_t )( ~( ( uint16_t )TIM_OC2M ) ); - tmpccmrx &= ( uint16_t )( ~( ( uint16_t )TIM_CC2S ) ); - tmpccmrx |= ( uint16_t )( TIM_OCInitStruct->TIM_OCMode << 8 ); - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC2P ) ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OCPolarity << 4 ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OutputState << 4 ); - - if( TIMx == TIM1 ) - { - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC2NP ) ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OCNPolarity << 4 ); - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC2NE ) ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OutputNState << 4 ); - - tmpcr2 &= ( uint16_t )( ~( ( uint16_t )TIM_OIS2 ) ); - tmpcr2 &= ( uint16_t )( ~( ( uint16_t )TIM_OIS2N ) ); - tmpcr2 |= ( uint16_t )( TIM_OCInitStruct->TIM_OCIdleState << 2 ); - tmpcr2 |= ( uint16_t )( TIM_OCInitStruct->TIM_OCNIdleState << 2 ); - } - - TIMx->CTLR2 = tmpcr2; - TIMx->CHCTLR1 = tmpccmrx; - TIMx->CH2CVR = TIM_OCInitStruct->TIM_Pulse; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC3Init - * - * @brief Initializes the TIMx Channel3 according to the specified - * parameters in the TIM_OCInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OC3Init( TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct ) -{ - uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; - - TIMx->CCER &= ( uint16_t )( ~( ( uint16_t )TIM_CC3E ) ); - tmpccer = TIMx->CCER; - tmpcr2 = TIMx->CTLR2; - tmpccmrx = TIMx->CHCTLR2; - tmpccmrx &= ( uint16_t )( ~( ( uint16_t )TIM_OC3M ) ); - tmpccmrx &= ( uint16_t )( ~( ( uint16_t )TIM_CC3S ) ); - tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC3P ) ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OCPolarity << 8 ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OutputState << 8 ); - - if( TIMx == TIM1 ) - { - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC3NP ) ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OCNPolarity << 8 ); - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC3NE ) ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OutputNState << 8 ); - tmpcr2 &= ( uint16_t )( ~( ( uint16_t )TIM_OIS3 ) ); - tmpcr2 &= ( uint16_t )( ~( ( uint16_t )TIM_OIS3N ) ); - tmpcr2 |= ( uint16_t )( TIM_OCInitStruct->TIM_OCIdleState << 4 ); - tmpcr2 |= ( uint16_t )( TIM_OCInitStruct->TIM_OCNIdleState << 4 ); - } - - TIMx->CTLR2 = tmpcr2; - TIMx->CHCTLR2 = tmpccmrx; - TIMx->CH3CVR = TIM_OCInitStruct->TIM_Pulse; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC4Init - * - * @brief Initializes the TIMx Channel4 according to the specified - * parameters in the TIM_OCInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OC4Init( TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct ) -{ - uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; - - TIMx->CCER &= ( uint16_t )( ~( ( uint16_t )TIM_CC4E ) ); - tmpccer = TIMx->CCER; - tmpcr2 = TIMx->CTLR2; - tmpccmrx = TIMx->CHCTLR2; - tmpccmrx &= ( uint16_t )( ~( ( uint16_t )TIM_OC4M ) ); - tmpccmrx &= ( uint16_t )( ~( ( uint16_t )TIM_CC4S ) ); - tmpccmrx |= ( uint16_t )( TIM_OCInitStruct->TIM_OCMode << 8 ); - tmpccer &= ( uint16_t )( ~( ( uint16_t )TIM_CC4P ) ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OCPolarity << 12 ); - tmpccer |= ( uint16_t )( TIM_OCInitStruct->TIM_OutputState << 12 ); - - if( TIMx == TIM1 ) - { - tmpcr2 &= ( uint16_t )( ~( ( uint16_t )TIM_OIS4 ) ); - tmpcr2 |= ( uint16_t )( TIM_OCInitStruct->TIM_OCIdleState << 6 ); - } - - TIMx->CTLR2 = tmpcr2; - TIMx->CHCTLR2 = tmpccmrx; - TIMx->CH4CVR = TIM_OCInitStruct->TIM_Pulse; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_ICInit - * - * @brief IInitializes the TIM peripheral according to the specified - * parameters in the TIM_ICInitStruct. - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ICInitStruct - pointer to a TIM_ICInitTypeDef structure. - * - * @return none - */ -void TIM_ICInit( TIM_TypeDef *TIMx, TIM_ICInitTypeDef *TIM_ICInitStruct ) -{ - if( TIM_ICInitStruct->TIM_Channel == TIM_Channel_1 ) - { - TI1_Config( TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter ); - TIM_SetIC1Prescaler( TIMx, TIM_ICInitStruct->TIM_ICPrescaler ); - } - else if( TIM_ICInitStruct->TIM_Channel == TIM_Channel_2 ) - { - TI2_Config( TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter ); - TIM_SetIC2Prescaler( TIMx, TIM_ICInitStruct->TIM_ICPrescaler ); - } - else if( TIM_ICInitStruct->TIM_Channel == TIM_Channel_3 ) - { - TI3_Config( TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter ); - TIM_SetIC3Prescaler( TIMx, TIM_ICInitStruct->TIM_ICPrescaler ); - } - else - { - TI4_Config( TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter ); - TIM_SetIC4Prescaler( TIMx, TIM_ICInitStruct->TIM_ICPrescaler ); - } -} - -/********************************************************************* - * @fn TIM_PWMIConfig - * - * @brief Configures the TIM peripheral according to the specified - * parameters in the TIM_ICInitStruct to measure an external - * PWM signal. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ICInitStruct - pointer to a TIM_ICInitTypeDef structure. - * - * @return none - */ -void TIM_PWMIConfig( TIM_TypeDef *TIMx, TIM_ICInitTypeDef *TIM_ICInitStruct ) -{ - uint16_t icoppositepolarity = TIM_ICPolarity_Rising; - uint16_t icoppositeselection = TIM_ICSelection_DirectTI; - - if( TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising ) - { - icoppositepolarity = TIM_ICPolarity_Falling; - } - else - { - icoppositepolarity = TIM_ICPolarity_Rising; - } - - if( TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI ) - { - icoppositeselection = TIM_ICSelection_IndirectTI; - } - else - { - icoppositeselection = TIM_ICSelection_DirectTI; - } - - if( TIM_ICInitStruct->TIM_Channel == TIM_Channel_1 ) - { - TI1_Config( TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter ); - TIM_SetIC1Prescaler( TIMx, TIM_ICInitStruct->TIM_ICPrescaler ); - TI2_Config( TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter ); - TIM_SetIC2Prescaler( TIMx, TIM_ICInitStruct->TIM_ICPrescaler ); - } - else - { - TI2_Config( TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter ); - TIM_SetIC2Prescaler( TIMx, TIM_ICInitStruct->TIM_ICPrescaler ); - TI1_Config( TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter ); - TIM_SetIC1Prescaler( TIMx, TIM_ICInitStruct->TIM_ICPrescaler ); - } -} - -/********************************************************************* - * @fn TIM_BDTRConfig - * - * @brief Configures the: Break feature, dead time, Lock level, the OSSI, - * the OSSR State and the AOE(automatic output enable). - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_BDTRInitStruct - pointer to a TIM_BDTRInitTypeDef structure. - * - * @return none - */ -void TIM_BDTRConfig( TIM_TypeDef *TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct ) -{ - TIMx->BDTR = ( uint32_t )TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState | - TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime | - TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity | - TIM_BDTRInitStruct->TIM_AutomaticOutput; -} - -/********************************************************************* - * @fn TIM_TimeBaseStructInit - * - * @brief Fills each TIM_TimeBaseInitStruct member with its default value. - * - * @param TIM_TimeBaseInitStruct - pointer to a TIM_TimeBaseInitTypeDef structure. - * - * @return none - */ -void TIM_TimeBaseStructInit( TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct ) -{ - TIM_TimeBaseInitStruct->TIM_Period = 0xFFFF; - TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000; - TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1; - TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up; - TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000; -} - -/********************************************************************* - * @fn TIM_OCStructInit - * - * @brief Fills each TIM_OCInitStruct member with its default value. - * - * @param TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OCStructInit( TIM_OCInitTypeDef *TIM_OCInitStruct ) -{ - TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing; - TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable; - TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable; - TIM_OCInitStruct->TIM_Pulse = 0x0000; - TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High; - TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High; - TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset; - TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset; -} - -/********************************************************************* - * @fn TIM_ICStructInit - * - * @brief Fills each TIM_ICInitStruct member with its default value. - * - * @param TIM_ICInitStruct - pointer to a TIM_ICInitTypeDef structure. - * - * @return none - */ -void TIM_ICStructInit( TIM_ICInitTypeDef *TIM_ICInitStruct ) -{ - TIM_ICInitStruct->TIM_Channel = TIM_Channel_1; - TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising; - TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI; - TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1; - TIM_ICInitStruct->TIM_ICFilter = 0x00; -} - -/********************************************************************* - * @fn TIM_BDTRStructInit - * - * @brief Fills each TIM_BDTRInitStruct member with its default value. - * - * @param TIM_BDTRInitStruct - pointer to a TIM_BDTRInitTypeDef structure. - * - * @return none - */ -void TIM_BDTRStructInit( TIM_BDTRInitTypeDef *TIM_BDTRInitStruct ) -{ - TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable; - TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable; - TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF; - TIM_BDTRInitStruct->TIM_DeadTime = 0x00; - TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable; - TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low; - TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; -} - -/********************************************************************* - * @fn TIM_Cmd - * - * @brief Enables or disables the specified TIM peripheral. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_Cmd( TIM_TypeDef *TIMx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->CTLR1 |= TIM_CEN; - } - else - { - TIMx->CTLR1 &= ( uint16_t )( ~( ( uint16_t )TIM_CEN ) ); - } -} - -/********************************************************************* - * @fn TIM_CtrlPWMOutputs - * - * @brief Enables or disables the TIM peripheral Main Outputs. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_CtrlPWMOutputs( TIM_TypeDef *TIMx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->BDTR |= TIM_MOE; - } - else - { - TIMx->BDTR &= ( uint16_t )( ~( ( uint16_t )TIM_MOE ) ); - } -} - -/********************************************************************* - * @fn TIM_ITConfig - * - * @brief Enables or disables the specified TIM interrupts. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_IT - specifies the TIM interrupts sources to be enabled or disabled. - * TIM_IT_Update - TIM update Interrupt source. - * TIM_IT_CC1 - TIM Capture Compare 1 Interrupt source. - * TIM_IT_CC2 - TIM Capture Compare 2 Interrupt source - * TIM_IT_CC3 - TIM Capture Compare 3 Interrupt source. - * TIM_IT_CC4 - TIM Capture Compare 4 Interrupt source. - * TIM_IT_COM - TIM Commutation Interrupt source. - * TIM_IT_Trigger - TIM Trigger Interrupt source. - * TIM_IT_Break - TIM Break Interrupt source. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_ITConfig( TIM_TypeDef *TIMx, uint16_t TIM_IT, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->DMAINTENR |= TIM_IT; - } - else - { - TIMx->DMAINTENR &= ( uint16_t )~TIM_IT; - } -} - -/********************************************************************* - * @fn TIM_GenerateEvent - * - * @brief Configures the TIMx event to be generate by software. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_IT - specifies the TIM interrupts sources to be enabled or disabled. - * TIM_IT_Update - TIM update Interrupt source. - * TIM_IT_CC1 - TIM Capture Compare 1 Interrupt source. - * TIM_IT_CC2 - TIM Capture Compare 2 Interrupt source - * TIM_IT_CC3 - TIM Capture Compare 3 Interrupt source. - * TIM_IT_CC4 - TIM Capture Compare 4 Interrupt source. - * TIM_IT_COM - TIM Commutation Interrupt source. - * TIM_IT_Trigger - TIM Trigger Interrupt source. - * TIM_IT_Break - TIM Break Interrupt source. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_GenerateEvent( TIM_TypeDef *TIMx, uint16_t TIM_EventSource ) -{ - TIMx->SWEVGR = TIM_EventSource; -} - -/********************************************************************* - * @fn TIM_DMAConfig - * - * @brief Configures the TIMx's DMA interface. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_DMABase: DMA Base address. - * TIM_DMABase_CR. - * TIM_DMABase_CR2. - * TIM_DMABase_SMCR. - * TIM_DMABase_DIER. - * TIM1_DMABase_SR. - * TIM_DMABase_EGR. - * TIM_DMABase_CCMR1. - * TIM_DMABase_CCMR2. - * TIM_DMABase_CCER. - * TIM_DMABase_CNT. - * TIM_DMABase_PSC. - * TIM_DMABase_CCR1. - * TIM_DMABase_CCR2. - * TIM_DMABase_CCR3. - * TIM_DMABase_CCR4. - * TIM_DMABase_BDTR. - * TIM_DMABase_DCR. - * TIM_DMABurstLength - DMA Burst length. - * TIM_DMABurstLength_1Transfer. - * TIM_DMABurstLength_18Transfers. - * - * @return none - */ -void TIM_DMAConfig( TIM_TypeDef *TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength ) -{ - TIMx->DMACFGR = TIM_DMABase | TIM_DMABurstLength; -} - -/********************************************************************* - * @fn TIM_DMACmd - * - * @brief Enables or disables the TIMx's DMA Requests. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_DMASource - specifies the DMA Request sources. - * TIM_DMA_Update - TIM update Interrupt source. - * TIM_DMA_CC1 - TIM Capture Compare 1 DMA source. - * TIM_DMA_CC2 - TIM Capture Compare 2 DMA source. - * TIM_DMA_CC3 - TIM Capture Compare 3 DMA source. - * TIM_DMA_CC4 - TIM Capture Compare 4 DMA source. - * TIM_DMA_COM - TIM Commutation DMA source. - * TIM_DMA_Trigger - TIM Trigger DMA source. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_DMACmd( TIM_TypeDef *TIMx, uint16_t TIM_DMASource, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->DMAINTENR |= TIM_DMASource; - } - else - { - TIMx->DMAINTENR &= ( uint16_t )~TIM_DMASource; - } -} - -/********************************************************************* - * @fn TIM_InternalClockConfig - * - * @brief Configures the TIMx internal Clock. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * - * @return none - */ -void TIM_InternalClockConfig( TIM_TypeDef *TIMx ) -{ - TIMx->SMCFGR &= ( uint16_t )( ~( ( uint16_t )TIM_SMS ) ); -} - -/********************************************************************* - * @fn TIM_ITRxExternalClockConfig - * - * @brief Configures the TIMx Internal Trigger as External Clock. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_InputTriggerSource: Trigger source. - * TIM_TS_ITR0 - Internal Trigger 0. - * TIM_TS_ITR1 - Internal Trigger 1. - * TIM_TS_ITR2 - Internal Trigger 2. - * TIM_TS_ITR3 - Internal Trigger 3. - * - * @return none - */ -void TIM_ITRxExternalClockConfig( TIM_TypeDef *TIMx, uint16_t TIM_InputTriggerSource ) -{ - TIM_SelectInputTrigger( TIMx, TIM_InputTriggerSource ); - TIMx->SMCFGR |= TIM_SlaveMode_External1; -} - -/********************************************************************* - * @fn TIM_TIxExternalClockConfig - * - * @brief Configures the TIMx Trigger as External Clock. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_TIxExternalCLKSource - Trigger source. - * TIM_TIxExternalCLK1Source_TI1ED - TI1 Edge Detector. - * TIM_TIxExternalCLK1Source_TI1 - Filtered Timer Input 1. - * TIM_TIxExternalCLK1Source_TI2 - Filtered Timer Input 2. - * TIM_ICPolarity - specifies the TIx Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_DMA_COM - TIM Commutation DMA source. - * TIM_DMA_Trigger - TIM Trigger DMA source. - * ICFilter - specifies the filter value. - * This parameter must be a value between 0x0 and 0xF. - * - * @return none - */ -void TIM_TIxExternalClockConfig( TIM_TypeDef *TIMx, uint16_t TIM_TIxExternalCLKSource, - uint16_t TIM_ICPolarity, uint16_t ICFilter ) -{ - if( TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2 ) - { - TI2_Config( TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter ); - } - else - { - TI1_Config( TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter ); - } - - TIM_SelectInputTrigger( TIMx, TIM_TIxExternalCLKSource ); - TIMx->SMCFGR |= TIM_SlaveMode_External1; -} - -/********************************************************************* - * @fn TIM_ETRClockMode1Config - * - * @brief Configures the External clock Mode1. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ExtTRGPrescaler - The external Trigger Prescaler. - * TIM_ExtTRGPSC_OFF - ETRP Prescaler OFF. - * TIM_ExtTRGPSC_DIV2 - ETRP frequency divided by 2. - * TIM_ExtTRGPSC_DIV4 - ETRP frequency divided by 4. - * TIM_ExtTRGPSC_DIV8 - ETRP frequency divided by 8. - * TIM_ExtTRGPolarity - The external Trigger Polarity. - * TIM_ExtTRGPolarity_Inverted - active low or falling edge active. - * TIM_ExtTRGPolarity_NonInverted - active high or rising edge active. - * ExtTRGFilter - External Trigger Filter. - * This parameter must be a value between 0x0 and 0xF. - * - * @return none - */ -void TIM_ETRClockMode1Config( TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter ) -{ - uint16_t tmpsmcr = 0; - - TIM_ETRConfig( TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter ); - tmpsmcr = TIMx->SMCFGR; - tmpsmcr &= ( uint16_t )( ~( ( uint16_t )TIM_SMS ) ); - tmpsmcr |= TIM_SlaveMode_External1; - tmpsmcr &= ( uint16_t )( ~( ( uint16_t )TIM_TS ) ); - tmpsmcr |= TIM_TS_ETRF; - TIMx->SMCFGR = tmpsmcr; -} - -/********************************************************************* - * @fn TIM_ETRClockMode2Config - * - * @brief Configures the External clock Mode2. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ExtTRGPrescaler - The external Trigger Prescaler. - * TIM_ExtTRGPSC_OFF - ETRP Prescaler OFF. - * TIM_ExtTRGPSC_DIV2 - ETRP frequency divided by 2. - * TIM_ExtTRGPSC_DIV4 - ETRP frequency divided by 4. - * TIM_ExtTRGPSC_DIV8 - ETRP frequency divided by 8. - * TIM_ExtTRGPolarity - The external Trigger Polarity. - * TIM_ExtTRGPolarity_Inverted - active low or falling edge active. - * TIM_ExtTRGPolarity_NonInverted - active high or rising edge active. - * ExtTRGFilter - External Trigger Filter. - * This parameter must be a value between 0x0 and 0xF. - * - * @return none - */ -void TIM_ETRClockMode2Config( TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, - uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter ) -{ - TIM_ETRConfig( TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter ); - TIMx->SMCFGR |= TIM_ECE; -} - -/********************************************************************* - * @fn TIM_ETRConfig - * - * @brief Configures the TIMx External Trigger (ETR). - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ExtTRGPrescaler - The external Trigger Prescaler. - * TIM_ExtTRGPSC_OFF - ETRP Prescaler OFF. - * TIM_ExtTRGPSC_DIV2 - ETRP frequency divided by 2. - * TIM_ExtTRGPSC_DIV4 - ETRP frequency divided by 4. - * TIM_ExtTRGPSC_DIV8 - ETRP frequency divided by 8. - * TIM_ExtTRGPolarity - The external Trigger Polarity. - * TIM_ExtTRGPolarity_Inverted - active low or falling edge active. - * TIM_ExtTRGPolarity_NonInverted - active high or rising edge active. - * ExtTRGFilter - External Trigger Filter. - * This parameter must be a value between 0x0 and 0xF. - * - * @return none - */ -void TIM_ETRConfig( TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter ) -{ - uint16_t tmpsmcr = 0; - - tmpsmcr = TIMx->SMCFGR; - tmpsmcr &= SMCFGR_ETR_Mask; - tmpsmcr |= ( uint16_t )( TIM_ExtTRGPrescaler | ( uint16_t )( TIM_ExtTRGPolarity | ( uint16_t )( ExtTRGFilter << ( uint16_t )8 ) ) ); - TIMx->SMCFGR = tmpsmcr; -} - -/********************************************************************* - * @fn TIM_PrescalerConfig - * - * @brief Configures the TIMx Prescaler. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * Prescaler - specifies the Prescaler Register value. - * TIM_PSCReloadMode - specifies the TIM Prescaler Reload mode. - * TIM_PSCReloadMode - specifies the TIM Prescaler Reload mode. - * TIM_PSCReloadMode_Update - The Prescaler is loaded at the update event. - * TIM_PSCReloadMode_Immediate - The Prescaler is loaded immediately. - * - * @return none - */ -void TIM_PrescalerConfig( TIM_TypeDef *TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode ) -{ - TIMx->PSC = Prescaler; - TIMx->SWEVGR = TIM_PSCReloadMode; -} - -/********************************************************************* - * @fn TIM_CounterModeConfig - * - * @brief Specifies the TIMx Counter Mode to be used. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_CounterMode - specifies the Counter Mode to be used. - * TIM_CounterMode_Up - TIM Up Counting Mode. - * TIM_CounterMode_Down - TIM Down Counting Mode. - * TIM_CounterMode_CenterAligned1 - TIM Center Aligned Mode1. - * TIM_CounterMode_CenterAligned2 - TIM Center Aligned Mode2. - * TIM_CounterMode_CenterAligned3 - TIM Center Aligned Mode3. - * - * @return none - */ -void TIM_CounterModeConfig( TIM_TypeDef *TIMx, uint16_t TIM_CounterMode ) -{ - uint16_t tmpcr1 = 0; - - tmpcr1 = TIMx->CTLR1; - tmpcr1 &= ( uint16_t )( ~( ( uint16_t )( TIM_DIR | TIM_CMS ) ) ); - tmpcr1 |= TIM_CounterMode; - TIMx->CTLR1 = tmpcr1; -} - -/********************************************************************* - * @fn TIM_SelectInputTrigger - * - * @brief Selects the Input Trigger source. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_InputTriggerSource - The Input Trigger source. - * TIM_TS_ITR0 - Internal Trigger 0. - * TIM_TS_ITR1 - Internal Trigger 1. - * TIM_TS_ITR2 - Internal Trigger 2. - * TIM_TS_ITR3 - Internal Trigger 3. - * TIM_TS_TI1F_ED - TI1 Edge Detector. - * TIM_TS_TI1FP1 - Filtered Timer Input 1. - * TIM_TS_TI2FP2 - Filtered Timer Input 2. - * TIM_TS_ETRF - External Trigger input. - * - * @return none - */ -void TIM_SelectInputTrigger( TIM_TypeDef *TIMx, uint16_t TIM_InputTriggerSource ) -{ - uint16_t tmpsmcr = 0; - - tmpsmcr = TIMx->SMCFGR; - tmpsmcr &= ( uint16_t )( ~( ( uint16_t )TIM_TS ) ); - tmpsmcr |= TIM_InputTriggerSource; - TIMx->SMCFGR = tmpsmcr; -} - -/********************************************************************* - * @fn TIM_EncoderInterfaceConfig - * - * @brief Configures the TIMx Encoder Interface. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_EncoderMode - specifies the TIMx Encoder Mode. - * TIM_EncoderMode_TI1 - Counter counts on TI1FP1 edge depending - * on TI2FP2 level. - * TIM_EncoderMode_TI2 - Counter counts on TI2FP2 edge depending - * on TI1FP1 level. - * TIM_EncoderMode_TI12 - Counter counts on both TI1FP1 and - * TI2FP2 edges depending. - * TIM_IC1Polarity - specifies the IC1 Polarity. - * TIM_ICPolarity_Falling - IC Falling edge. - * TTIM_ICPolarity_Rising - IC Rising edge. - * TIM_IC2Polarity - specifies the IC2 Polarity. - * TIM_ICPolarity_Falling - IC Falling edge. - * TIM_ICPolarity_Rising - IC Rising edge. - * - * @return none - */ -void TIM_EncoderInterfaceConfig( TIM_TypeDef *TIMx, uint16_t TIM_EncoderMode, - uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity ) -{ - uint16_t tmpsmcr = 0; - uint16_t tmpccmr1 = 0; - uint16_t tmpccer = 0; - - tmpsmcr = TIMx->SMCFGR; - tmpccmr1 = TIMx->CHCTLR1; - tmpccer = TIMx->CCER; - tmpsmcr &= ( uint16_t )( ~( ( uint16_t )TIM_SMS ) ); - tmpsmcr |= TIM_EncoderMode; - tmpccmr1 &= ( uint16_t )( ( ( uint16_t )~( ( uint16_t )TIM_CC1S ) ) & ( uint16_t )( ~( ( uint16_t )TIM_CC2S ) ) ); - tmpccmr1 |= TIM_CC1S_0 | TIM_CC2S_0; - tmpccer &= ( uint16_t )( ( ( uint16_t )~( ( uint16_t )TIM_CC1P ) ) & ( ( uint16_t )~( ( uint16_t )TIM_CC2P ) ) ); - tmpccer |= ( uint16_t )( TIM_IC1Polarity | ( uint16_t )( TIM_IC2Polarity << ( uint16_t )4 ) ); - TIMx->SMCFGR = tmpsmcr; - TIMx->CHCTLR1 = tmpccmr1; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_ForcedOC1Config - * - * @brief Forces the TIMx output 1 waveform to active or inactive level. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ForcedAction - specifies the forced Action to be set to the - * output waveform. - * TIM_ForcedAction_Active - Force active level on OC1REF. - * TIM_ForcedAction_InActive - Force inactive level on OC1REF. - * - * @return none - */ -void TIM_ForcedOC1Config( TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction ) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= ( uint16_t )~( ( uint16_t )TIM_OC1M ); - tmpccmr1 |= TIM_ForcedAction; - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_ForcedOC2Config - * - * @brief Forces the TIMx output 2 waveform to active or inactive level. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ForcedAction - specifies the forced Action to be set to the - * output waveform. - * TIM_ForcedAction_Active - Force active level on OC2REF. - * TIM_ForcedAction_InActive - Force inactive level on OC2REF. - * - * @return none - */ -void TIM_ForcedOC2Config( TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction ) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= ( uint16_t )~( ( uint16_t )TIM_OC2M ); - tmpccmr1 |= ( uint16_t )( TIM_ForcedAction << 8 ); - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_ForcedOC3Config - * - * @brief Forces the TIMx output 3 waveform to active or inactive level. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ForcedAction - specifies the forced Action to be set to the - * output waveform. - * TIM_ForcedAction_Active - Force active level on OC3REF. - * TIM_ForcedAction_InActive - Force inactive level on OC3REF. - * - * @return none - */ -void TIM_ForcedOC3Config( TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction ) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= ( uint16_t )~( ( uint16_t )TIM_OC3M ); - tmpccmr2 |= TIM_ForcedAction; - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_ForcedOC4Config - * - * @brief Forces the TIMx output 4 waveform to active or inactive level. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ForcedAction - specifies the forced Action to be set to the - * output waveform. - * TIM_ForcedAction_Active - Force active level on OC4REF. - * TIM_ForcedAction_InActive - Force inactive level on OC4REF. - * - * @return none - */ -void TIM_ForcedOC4Config( TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction ) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= ( uint16_t )~( ( uint16_t )TIM_OC4M ); - tmpccmr2 |= ( uint16_t )( TIM_ForcedAction << 8 ); - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_ARRPreloadConfig - * - * @brief Enables or disables TIMx peripheral Preload register on ARR. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_ARRPreloadConfig( TIM_TypeDef *TIMx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->CTLR1 |= TIM_ARPE; - } - else - { - TIMx->CTLR1 &= ( uint16_t )~( ( uint16_t )TIM_ARPE ); - } -} - -/********************************************************************* - * @fn TIM_SelectCOM - * - * @brief Selects the TIM peripheral Commutation event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_SelectCOM( TIM_TypeDef *TIMx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->CTLR2 |= TIM_CCUS; - } - else - { - TIMx->CTLR2 &= ( uint16_t )~( ( uint16_t )TIM_CCUS ); - } -} - -/********************************************************************* - * @fn TIM_SelectCCDMA - * - * @brief Selects the TIMx peripheral Capture Compare DMA source. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_SelectCCDMA( TIM_TypeDef *TIMx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->CTLR2 |= TIM_CCDS; - } - else - { - TIMx->CTLR2 &= ( uint16_t )~( ( uint16_t )TIM_CCDS ); - } -} - -/********************************************************************* - * @fn TIM_CCPreloadControl - * - * @brief DSets or Resets the TIM peripheral Capture Compare Preload Control bit. - * reset values (Affects also the I2Ss). - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_CCPreloadControl( TIM_TypeDef *TIMx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->CTLR2 |= TIM_CCPC; - } - else - { - TIMx->CTLR2 &= ( uint16_t )~( ( uint16_t )TIM_CCPC ); - } -} - -/********************************************************************* - * @fn TIM_OC1PreloadConfig - * - * @brief Enables or disables the TIMx peripheral Preload register on CCR1. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPreload - new state of the TIMx peripheral Preload register. - * TIM_OCPreload_Enable. - * TIM_OCPreload_Disable. - * - * @return none - */ -void TIM_OC1PreloadConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCPreload ) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= ( uint16_t )~( ( uint16_t )TIM_OC1PE ); - tmpccmr1 |= TIM_OCPreload; - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_OC2PreloadConfig - * - * @brief Enables or disables the TIMx peripheral Preload register on CCR2. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPreload - new state of the TIMx peripheral Preload register. - * TIM_OCPreload_Enable. - * TIM_OCPreload_Disable. - * - * @return none - */ -void TIM_OC2PreloadConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCPreload ) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= ( uint16_t )~( ( uint16_t )TIM_OC2PE ); - tmpccmr1 |= ( uint16_t )( TIM_OCPreload << 8 ); - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_OC3PreloadConfig - * - * @brief Enables or disables the TIMx peripheral Preload register on CCR3. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPreload - new state of the TIMx peripheral Preload register. - * TIM_OCPreload_Enable. - * TIM_OCPreload_Disable. - * - * @return none - */ -void TIM_OC3PreloadConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCPreload ) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= ( uint16_t )~( ( uint16_t )TIM_OC3PE ); - tmpccmr2 |= TIM_OCPreload; - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_OC4PreloadConfig - * - * @brief Enables or disables the TIMx peripheral Preload register on CCR4. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPreload - new state of the TIMx peripheral Preload register. - * TIM_OCPreload_Enable. - * TIM_OCPreload_Disable. - * - * @return none - */ -void TIM_OC4PreloadConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCPreload ) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= ( uint16_t )~( ( uint16_t )TIM_OC4PE ); - tmpccmr2 |= ( uint16_t )( TIM_OCPreload << 8 ); - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_OC1FastConfig - * - * @brief Configures the TIMx Output Compare 1 Fast feature. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCFast - new state of the Output Compare Fast Enable Bit. - * TIM_OCFast_Enable - TIM output compare fast enable. - * TIM_OCFast_Disable - TIM output compare fast disable. - * - * @return none - */ -void TIM_OC1FastConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCFast ) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= ( uint16_t )~( ( uint16_t )TIM_OC1FE ); - tmpccmr1 |= TIM_OCFast; - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_OC2FastConfig - * - * @brief Configures the TIMx Output Compare 2 Fast feature. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCFast - new state of the Output Compare Fast Enable Bit. - * TIM_OCFast_Enable - TIM output compare fast enable. - * TIM_OCFast_Disable - TIM output compare fast disable. - * - * @return none - */ -void TIM_OC2FastConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCFast ) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= ( uint16_t )~( ( uint16_t )TIM_OC2FE ); - tmpccmr1 |= ( uint16_t )( TIM_OCFast << 8 ); - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_OC3FastConfig - * - * @brief Configures the TIMx Output Compare 3 Fast feature. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCFast - new state of the Output Compare Fast Enable Bit. - * TIM_OCFast_Enable - TIM output compare fast enable. - * TIM_OCFast_Disable - TIM output compare fast disable. - * - * @return none - */ -void TIM_OC3FastConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCFast ) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= ( uint16_t )~( ( uint16_t )TIM_OC3FE ); - tmpccmr2 |= TIM_OCFast; - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_OC4FastConfig - * - * @brief Configures the TIMx Output Compare 4 Fast feature. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCFast - new state of the Output Compare Fast Enable Bit. - * TIM_OCFast_Enable - TIM output compare fast enable. - * TIM_OCFast_Disable - TIM output compare fast disable. - * - * @return none - */ -void TIM_OC4FastConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCFast ) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= ( uint16_t )~( ( uint16_t )TIM_OC4FE ); - tmpccmr2 |= ( uint16_t )( TIM_OCFast << 8 ); - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_ClearOC1Ref - * - * @brief Clears or safeguards the OCREF1 signal on an external event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCClear - new state of the Output Compare Clear Enable Bit. - * TIM_OCClear_Enable - TIM Output clear enable. - * TIM_OCClear_Disable - TIM Output clear disable. - * - * @return none - */ -void TIM_ClearOC1Ref( TIM_TypeDef *TIMx, uint16_t TIM_OCClear ) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= ( uint16_t )~( ( uint16_t )TIM_OC1CE ); - tmpccmr1 |= TIM_OCClear; - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_ClearOC2Ref - * - * @brief Clears or safeguards the OCREF2 signal on an external event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCClear - new state of the Output Compare Clear Enable Bit. - * TIM_OCClear_Enable - TIM Output clear enable. - * TIM_OCClear_Disable - TIM Output clear disable. - * - * @return none - */ -void TIM_ClearOC2Ref( TIM_TypeDef *TIMx, uint16_t TIM_OCClear ) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= ( uint16_t )~( ( uint16_t )TIM_OC2CE ); - tmpccmr1 |= ( uint16_t )( TIM_OCClear << 8 ); - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_ClearOC3Ref - * - * @brief Clears or safeguards the OCREF3 signal on an external event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCClear - new state of the Output Compare Clear Enable Bit. - * TIM_OCClear_Enable - TIM Output clear enable. - * TIM_OCClear_Disable - TIM Output clear disable. - * - * @return none - */ -void TIM_ClearOC3Ref( TIM_TypeDef *TIMx, uint16_t TIM_OCClear ) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= ( uint16_t )~( ( uint16_t )TIM_OC3CE ); - tmpccmr2 |= TIM_OCClear; - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_ClearOC4Ref - * - * @brief Clears or safeguards the OCREF4 signal on an external event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCClear - new state of the Output Compare Clear Enable Bit. - * TIM_OCClear_Enable - TIM Output clear enable. - * TIM_OCClear_Disable - TIM Output clear disable. - * - * @return none - */ -void TIM_ClearOC4Ref( TIM_TypeDef *TIMx, uint16_t TIM_OCClear ) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= ( uint16_t )~( ( uint16_t )TIM_OC4CE ); - tmpccmr2 |= ( uint16_t )( TIM_OCClear << 8 ); - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_OC1PolarityConfig - * - * @brief Configures the TIMx channel 1 polarity. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPolarity - specifies the OC1 Polarity. - * TIM_OCPolarity_High - Output Compare active high. - * TIM_OCPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC1PolarityConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity ) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= ( uint16_t )~( ( uint16_t )TIM_CC1P ); - tmpccer |= TIM_OCPolarity; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC1NPolarityConfig - * - * @brief Configures the TIMx channel 1 polarity. - * - * @param TIMx - where x can be 1 to select the TIM peripheral. - * TIM_OCNPolarity - specifies the OC1N Polarity. - * TIM_OCNPolarity_High - Output Compare active high. - * TIM_OCNPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC1NPolarityConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity ) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= ( uint16_t )~( ( uint16_t )TIM_CC1NP ); - tmpccer |= TIM_OCNPolarity; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC2PolarityConfig - * - * @brief Configures the TIMx channel 2 polarity. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPolarity - specifies the OC2 Polarity. - * TIM_OCPolarity_High - Output Compare active high. - * TIM_OCPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC2PolarityConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity ) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= ( uint16_t )~( ( uint16_t )TIM_CC2P ); - tmpccer |= ( uint16_t )( TIM_OCPolarity << 4 ); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC2NPolarityConfig - * - * @brief Configures the TIMx channel 2 polarity. - * - * @param TIMx - where x can be 1 to select the TIM peripheral. - * TIM_OCNPolarity - specifies the OC1N Polarity. - * TIM_OCNPolarity_High - Output Compare active high. - * TIM_OCNPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC2NPolarityConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity ) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= ( uint16_t )~( ( uint16_t )TIM_CC2NP ); - tmpccer |= ( uint16_t )( TIM_OCNPolarity << 4 ); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC3PolarityConfig - * - * @brief Configures the TIMx Channel 3 polarity. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_OCPolarit - specifies the OC3 Polarity. - * TIM_OCPolarity_High - Output Compare active high. - * TIM_OCPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC3PolarityConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity ) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= ( uint16_t )~( ( uint16_t )TIM_CC3P ); - tmpccer |= ( uint16_t )( TIM_OCPolarity << 8 ); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC3NPolarityConfig - * - * @brief Configures the TIMx Channel 3N polarity. - * - * @param TIMx - where x can be 1 to select the TIM peripheral. - * TIM_OCNPolarity - specifies the OC2N Polarity. - * TIM_OCNPolarity_High - Output Compare active high. - * TIM_OCNPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC3NPolarityConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity ) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= ( uint16_t )~( ( uint16_t )TIM_CC3NP ); - tmpccer |= ( uint16_t )( TIM_OCNPolarity << 8 ); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC4PolarityConfig - * - * @brief Configures the TIMx Channel 4 polarity. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_OCPolarit - specifies the OC3 Polarity. - * TIM_OCPolarity_High - Output Compare active high. - * TIM_OCPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC4PolarityConfig( TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity ) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= ( uint16_t )~( ( uint16_t )TIM_CC4P ); - tmpccer |= ( uint16_t )( TIM_OCPolarity << 12 ); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_CCxCmd - * - * @brief Enables or disables the TIM Capture Compare Channel x. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_Channel - specifies the TIM Channel. - * TIM_Channel_1 - TIM Channel 1. - * TIM_Channel_2 - TIM Channel 2. - * TIM_Channel_3 - TIM Channel 3. - * TIM_Channel_4 - TIM Channel 4. - * TIM_CCx - specifies the TIM Channel CCxE bit new state. - * TIM_CCx_Enable. - * TIM_CCx_Disable. - * - * @return none - */ -void TIM_CCxCmd( TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx ) -{ - uint16_t tmp = 0; - - tmp = CCER_CCE_Set << TIM_Channel; - TIMx->CCER &= ( uint16_t )~ tmp; - TIMx->CCER |= ( uint16_t )( TIM_CCx << TIM_Channel ); -} - -/********************************************************************* - * @fn TIM_CCxNCmd - * - * @brief Enables or disables the TIM Capture Compare Channel xN. - * - * @param TIMx - where x can be 1 select the TIM peripheral. - * TIM_Channel - specifies the TIM Channel. - * TIM_Channel_1 - TIM Channel 1. - * TIM_Channel_2 - TIM Channel 2. - * TIM_Channel_3 - TIM Channel 3. - * TIM_CCxN - specifies the TIM Channel CCxNE bit new state. - * TIM_CCxN_Enable. - * TIM_CCxN_Disable. - * - * @return none - */ -void TIM_CCxNCmd( TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN ) -{ - uint16_t tmp = 0; - - tmp = CCER_CCNE_Set << TIM_Channel; - TIMx->CCER &= ( uint16_t ) ~tmp; - TIMx->CCER |= ( uint16_t )( TIM_CCxN << TIM_Channel ); -} - -/********************************************************************* - * @fn TIM_SelectOCxM - * - * @brief Selects the TIM Output Compare Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_Channel - specifies the TIM Channel. - * TIM_Channel_1 - TIM Channel 1. - * TIM_Channel_2 - TIM Channel 2. - * TIM_Channel_3 - TIM Channel 3. - * TIM_Channel_4 - TIM Channel 4. - * TIM_OCMode - specifies the TIM Output Compare Mode. - * TIM_OCMode_Timing. - * TIM_OCMode_Active. - * TIM_OCMode_Toggle. - * TIM_OCMode_PWM1. - * TIM_OCMode_PWM2. - * TIM_ForcedAction_Active. - * TIM_ForcedAction_InActive. - * - * @return none - */ -void TIM_SelectOCxM( TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode ) -{ - uint32_t tmp = 0; - uint16_t tmp1 = 0; - - tmp = ( uint32_t ) TIMx; - tmp += CHCTLR_Offset; - tmp1 = CCER_CCE_Set << ( uint16_t )TIM_Channel; - TIMx->CCER &= ( uint16_t ) ~tmp1; - - if( ( TIM_Channel == TIM_Channel_1 ) || ( TIM_Channel == TIM_Channel_3 ) ) - { - tmp += ( TIM_Channel >> 1 ); - *( __IO uint32_t * ) tmp &= ( uint32_t )~( ( uint32_t )TIM_OC1M ); - *( __IO uint32_t * ) tmp |= TIM_OCMode; - } - else - { - tmp += ( uint16_t )( TIM_Channel - ( uint16_t )4 ) >> ( uint16_t )1; - *( __IO uint32_t * ) tmp &= ( uint32_t )~( ( uint32_t )TIM_OC2M ); - *( __IO uint32_t * ) tmp |= ( uint16_t )( TIM_OCMode << 8 ); - } -} - -/********************************************************************* - * @fn TIM_UpdateDisableConfig - * - * @brief Enables or Disables the TIMx Update event. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_UpdateDisableConfig( TIM_TypeDef *TIMx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->CTLR1 |= TIM_UDIS; - } - else - { - TIMx->CTLR1 &= ( uint16_t )~( ( uint16_t )TIM_UDIS ); - } -} - -/********************************************************************* - * @fn TIM_UpdateRequestConfig - * - * @brief Configures the TIMx Update Request Interrupt source. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_UpdateSource - specifies the Update source. - * TIM_UpdateSource_Regular. - * TIM_UpdateSource_Global. - * - * @return none - */ -void TIM_UpdateRequestConfig( TIM_TypeDef *TIMx, uint16_t TIM_UpdateSource ) -{ - if( TIM_UpdateSource != TIM_UpdateSource_Global ) - { - TIMx->CTLR1 |= TIM_URS; - } - else - { - TIMx->CTLR1 &= ( uint16_t )~( ( uint16_t )TIM_URS ); - } -} - -/********************************************************************* - * @fn TIM_SelectHallSensor - * - * @brief Enables or disables the TIMx's Hall sensor interface. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_SelectHallSensor( TIM_TypeDef *TIMx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - TIMx->CTLR2 |= TIM_TI1S; - } - else - { - TIMx->CTLR2 &= ( uint16_t )~( ( uint16_t )TIM_TI1S ); - } -} - -/********************************************************************* - * @fn TIM_SelectOnePulseMode - * - * @brief Selects the TIMx's One Pulse Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_OPMode - specifies the OPM Mode to be used. - * TIM_OPMode_Single. - * TIM_OPMode_Repetitive. - * - * @return none - */ -void TIM_SelectOnePulseMode( TIM_TypeDef *TIMx, uint16_t TIM_OPMode ) -{ - TIMx->CTLR1 &= ( uint16_t )~( ( uint16_t )TIM_OPM ); - TIMx->CTLR1 |= TIM_OPMode; -} - -/********************************************************************* - * @fn TIM_SelectOutputTrigger - * - * @brief Selects the TIMx Trigger Output Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_TRGOSource - specifies the Trigger Output source. - * TIM_TRGOSource_Reset - The UG bit in the TIM_EGR register is - * used as the trigger output (TRGO). - * TIM_TRGOSource_Enable - The Counter Enable CEN is used as the - * trigger output (TRGO). - * TIM_TRGOSource_Update - The update event is selected as the - * trigger output (TRGO). - * TIM_TRGOSource_OC1 - The trigger output sends a positive pulse - * when the CC1IF flag is to be set, as soon as a capture or compare match occurs (TRGO). - * TIM_TRGOSource_OC1Ref - OC1REF signal is used as the trigger output (TRGO). - * TIM_TRGOSource_OC2Ref - OC2REF signal is used as the trigger output (TRGO). - * TIM_TRGOSource_OC3Ref - OC3REF signal is used as the trigger output (TRGO). - * TIM_TRGOSource_OC4Ref - OC4REF signal is used as the trigger output (TRGO). - * - * @return none - */ -void TIM_SelectOutputTrigger( TIM_TypeDef *TIMx, uint16_t TIM_TRGOSource ) -{ - TIMx->CTLR2 &= ( uint16_t )~( ( uint16_t )TIM_MMS ); - TIMx->CTLR2 |= TIM_TRGOSource; -} - -/********************************************************************* - * @fn TIM_SelectSlaveMode - * - * @brief Selects the TIMx Slave Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_SlaveMode - specifies the Timer Slave Mode. - * TIM_SlaveMode_Reset - Rising edge of the selected trigger - * signal (TRGI) re-initializes. - * TIM_SlaveMode_Gated - The counter clock is enabled when the - * trigger signal (TRGI) is high. - * TIM_SlaveMode_Trigger - The counter starts at a rising edge - * of the trigger TRGI. - * TIM_SlaveMode_External1 - Rising edges of the selected trigger - * (TRGI) clock the counter. - * - * @return none - */ -void TIM_SelectSlaveMode( TIM_TypeDef *TIMx, uint16_t TIM_SlaveMode ) -{ - TIMx->SMCFGR &= ( uint16_t )~( ( uint16_t )TIM_SMS ); - TIMx->SMCFGR |= TIM_SlaveMode; -} - -/********************************************************************* - * @fn TIM_SelectMasterSlaveMode - * - * @brief Sets or Resets the TIMx Master/Slave Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_MasterSlaveMode - specifies the Timer Master Slave Mode. - * TIM_MasterSlaveMode_Enable - synchronization between the current - * timer and its slaves (through TRGO). - * TIM_MasterSlaveMode_Disable - No action. - * - * @return none - */ -void TIM_SelectMasterSlaveMode( TIM_TypeDef *TIMx, uint16_t TIM_MasterSlaveMode ) -{ - TIMx->SMCFGR &= ( uint16_t )~( ( uint16_t )TIM_MSM ); - TIMx->SMCFGR |= TIM_MasterSlaveMode; -} - -/********************************************************************* - * @fn TIM_SetCounter - * - * @brief Sets the TIMx Counter Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Counter - specifies the Counter register new value. - * - * @return none - */ -void TIM_SetCounter( TIM_TypeDef *TIMx, uint16_t Counter ) -{ - TIMx->CNT = Counter; -} - -/********************************************************************* - * @fn TIM_SetAutoreload - * - * @brief Sets the TIMx Autoreload Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Autoreload - specifies the Autoreload register new value. - * - * @return none - */ -void TIM_SetAutoreload( TIM_TypeDef *TIMx, uint16_t Autoreload ) -{ - TIMx->ATRLR = Autoreload; -} - -/********************************************************************* - * @fn TIM_SetCompare1 - * - * @brief Sets the TIMx Capture Compare1 Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Compare1 - specifies the Capture Compare1 register new value. - * - * @return none - */ -void TIM_SetCompare1( TIM_TypeDef *TIMx, uint16_t Compare1 ) -{ - TIMx->CH1CVR = Compare1; -} - -/********************************************************************* - * @fn TIM_SetCompare2 - * - * @brief Sets the TIMx Capture Compare2 Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Compare1 - specifies the Capture Compare1 register new value. - * - * @return none - */ -void TIM_SetCompare2( TIM_TypeDef *TIMx, uint16_t Compare2 ) -{ - TIMx->CH2CVR = Compare2; -} - -/********************************************************************* - * @fn TIM_SetCompare3 - * - * @brief Sets the TIMx Capture Compare3 Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Compare1 - specifies the Capture Compare1 register new value. - * - * @return none - */ -void TIM_SetCompare3( TIM_TypeDef *TIMx, uint16_t Compare3 ) -{ - TIMx->CH3CVR = Compare3; -} - -/********************************************************************* - * @fn TIM_SetCompare4 - * - * @brief Sets the TIMx Capture Compare4 Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Compare1 - specifies the Capture Compare1 register new value. - * - * @return none - */ -void TIM_SetCompare4( TIM_TypeDef *TIMx, uint16_t Compare4 ) -{ - TIMx->CH4CVR = Compare4; -} - -/********************************************************************* - * @fn TIM_SetIC1Prescaler - * - * @brief Sets the TIMx Input Capture 1 prescaler. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_ICPSC - specifies the Input Capture1 prescaler new value. - * TIM_ICPSC_DIV1 - no prescaler. - * TIM_ICPSC_DIV2 - capture is done once every 2 events. - * TIM_ICPSC_DIV4 - capture is done once every 4 events. - * TIM_ICPSC_DIV8 - capture is done once every 8 events. - * - * @return none - */ -void TIM_SetIC1Prescaler( TIM_TypeDef *TIMx, uint16_t TIM_ICPSC ) -{ - TIMx->CHCTLR1 &= ( uint16_t )~( ( uint16_t )TIM_IC1PSC ); - TIMx->CHCTLR1 |= TIM_ICPSC; -} - -/********************************************************************* - * @fn TIM_SetIC2Prescaler - * - * @brief Sets the TIMx Input Capture 2 prescaler. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_ICPSC - specifies the Input Capture1 prescaler new value. - * TIM_ICPSC_DIV1 - no prescaler. - * TIM_ICPSC_DIV2 - capture is done once every 2 events. - * TIM_ICPSC_DIV4 - capture is done once every 4 events. - * TIM_ICPSC_DIV8 - capture is done once every 8 events. - * - * @return none - */ -void TIM_SetIC2Prescaler( TIM_TypeDef *TIMx, uint16_t TIM_ICPSC ) -{ - TIMx->CHCTLR1 &= ( uint16_t )~( ( uint16_t )TIM_IC2PSC ); - TIMx->CHCTLR1 |= ( uint16_t )( TIM_ICPSC << 8 ); -} - -/********************************************************************* - * @fn TIM_SetIC3Prescaler - * - * @brief Sets the TIMx Input Capture 3 prescaler. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_ICPSC - specifies the Input Capture1 prescaler new value. - * TIM_ICPSC_DIV1 - no prescaler. - * TIM_ICPSC_DIV2 - capture is done once every 2 events. - * TIM_ICPSC_DIV4 - capture is done once every 4 events. - * TIM_ICPSC_DIV8 - capture is done once every 8 events. - * - * @return none - */ -void TIM_SetIC3Prescaler( TIM_TypeDef *TIMx, uint16_t TIM_ICPSC ) -{ - TIMx->CHCTLR2 &= ( uint16_t )~( ( uint16_t )TIM_IC3PSC ); - TIMx->CHCTLR2 |= TIM_ICPSC; -} - -/********************************************************************* - * @fn TIM_SetIC4Prescaler - * - * @brief Sets the TIMx Input Capture 4 prescaler. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_ICPSC - specifies the Input Capture1 prescaler new value. - * TIM_ICPSC_DIV1 - no prescaler. - * TIM_ICPSC_DIV2 - capture is done once every 2 events. - * TIM_ICPSC_DIV4 - capture is done once every 4 events. - * TIM_ICPSC_DIV8 - capture is done once every 8 events. - * - * @return none - */ -void TIM_SetIC4Prescaler( TIM_TypeDef *TIMx, uint16_t TIM_ICPSC ) -{ - TIMx->CHCTLR2 &= ( uint16_t )~( ( uint16_t )TIM_IC4PSC ); - TIMx->CHCTLR2 |= ( uint16_t )( TIM_ICPSC << 8 ); -} - -/********************************************************************* - * @fn TIM_SetClockDivision - * - * @brief Sets the TIMx Clock Division value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_CKD - specifies the clock division value. - * TIM_CKD_DIV1 - TDTS = Tck_tim. - * TIM_CKD_DIV2 - TDTS = 2*Tck_tim. - * TIM_CKD_DIV4 - TDTS = 4*Tck_tim. - * - * @return none - */ -void TIM_SetClockDivision( TIM_TypeDef *TIMx, uint16_t TIM_CKD ) -{ - TIMx->CTLR1 &= ( uint16_t )~( ( uint16_t )TIM_CTLR1_CKD ); - TIMx->CTLR1 |= TIM_CKD; -} - -/********************************************************************* - * @fn TIM_GetCapture1 - * - * @brief Gets the TIMx Input Capture 1 value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CH1CVR - Capture Compare 1 Register value. - */ -uint16_t TIM_GetCapture1( TIM_TypeDef *TIMx ) -{ - return TIMx->CH1CVR; -} - -/********************************************************************* - * @fn TIM_GetCapture2 - * - * @brief Gets the TIMx Input Capture 2 value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CH2CVR - Capture Compare 2 Register value. - */ -uint16_t TIM_GetCapture2( TIM_TypeDef *TIMx ) -{ - return TIMx->CH2CVR; -} - -/********************************************************************* - * @fn TIM_GetCapture2 - * - * @brief Gets the TIMx Input Capture 2 value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CH2CVR - Capture Compare 2 Register value. - */ -uint16_t TIM_GetCapture3( TIM_TypeDef *TIMx ) -{ - return TIMx->CH3CVR; -} - -/********************************************************************* - * @fn TIM_GetCapture4 - * - * @brief Gets the TIMx Input Capture 4 value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CH4CVR - Capture Compare 4 Register value. - */ -uint16_t TIM_GetCapture4( TIM_TypeDef *TIMx ) -{ - return TIMx->CH4CVR; -} - -/********************************************************************* - * @fn TIM_GetCounter - * - * @brief Gets the TIMx Counter value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CNT - Counter Register value. - */ -uint16_t TIM_GetCounter( TIM_TypeDef *TIMx ) -{ - return TIMx->CNT; -} - -/********************************************************************* - * @fn TIM_GetPrescaler - * - * @brief Gets the TIMx Prescaler value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->PSC - Prescaler Register value. - */ -uint16_t TIM_GetPrescaler( TIM_TypeDef *TIMx ) -{ - return TIMx->PSC; -} - -/********************************************************************* - * @fn TIM_GetFlagStatus - * - * @brief Checks whether the specified TIM flag is set or not. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_FLAG - specifies the flag to check. - * TIM_FLAG_Update - TIM update Flag. - * TIM_FLAG_CC1 - TIM Capture Compare 1 Flag. - * TIM_FLAG_CC2 - TIM Capture Compare 2 Flag. - * TIM_FLAG_CC3 - TIM Capture Compare 3 Flag. - * TIM_FLAG_CC4 - TIM Capture Compare 4 Flag. - * TIM_FLAG_COM - TIM Commutation Flag. - * TIM_FLAG_Trigger - TIM Trigger Flag. - * TIM_FLAG_Break - TIM Break Flag. - * TIM_FLAG_CC1OF - TIM Capture Compare 1 overcapture Flag. - * TIM_FLAG_CC2OF - TIM Capture Compare 2 overcapture Flag. - * TIM_FLAG_CC3OF - TIM Capture Compare 3 overcapture Flag. - * TIM_FLAG_CC4OF - TIM Capture Compare 4 overcapture Flag. - * - * @return SET or RESET. - */ -FlagStatus TIM_GetFlagStatus( TIM_TypeDef *TIMx, uint16_t TIM_FLAG ) -{ - ITStatus bitstatus = RESET; - - if( ( TIMx->INTFR & TIM_FLAG ) != ( uint16_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn TIM_ClearFlag - * - * @brief Clears the TIMx's pending flags. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_FLAG - specifies the flag to check. - * TIM_FLAG_Update - TIM update Flag. - * TIM_FLAG_CC1 - TIM Capture Compare 1 Flag. - * TIM_FLAG_CC2 - TIM Capture Compare 2 Flag. - * TIM_FLAG_CC3 - TIM Capture Compare 3 Flag. - * TIM_FLAG_CC4 - TIM Capture Compare 4 Flag. - * TIM_FLAG_COM - TIM Commutation Flag. - * TIM_FLAG_Trigger - TIM Trigger Flag. - * TIM_FLAG_Break - TIM Break Flag. - * TIM_FLAG_CC1OF - TIM Capture Compare 1 overcapture Flag. - * TIM_FLAG_CC2OF - TIM Capture Compare 2 overcapture Flag. - * TIM_FLAG_CC3OF - TIM Capture Compare 3 overcapture Flag. - * TIM_FLAG_CC4OF - TIM Capture Compare 4 overcapture Flag. - * - * @return none - */ -void TIM_ClearFlag( TIM_TypeDef *TIMx, uint16_t TIM_FLAG ) -{ - TIMx->INTFR = ( uint16_t )~TIM_FLAG; -} - -/********************************************************************* - * @fn TIM_GetITStatus - * - * @brief Checks whether the TIM interrupt has occurred or not. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_IT - specifies the TIM interrupt source to check. - * TIM_IT_Update - TIM update Interrupt source. - * TIM_IT_CC1 - TIM Capture Compare 1 Interrupt source. - * TIM_IT_CC2 - TIM Capture Compare 2 Interrupt source. - * TIM_IT_CC3 - TIM Capture Compare 3 Interrupt source. - * TIM_IT_CC4 - TIM Capture Compare 4 Interrupt source. - * TIM_IT_COM - TIM Commutation Interrupt source. - * TIM_IT_Trigger - TIM Trigger Interrupt source. - * TIM_IT_Break - TIM Break Interrupt source. - * - * @return none - */ -ITStatus TIM_GetITStatus( TIM_TypeDef *TIMx, uint16_t TIM_IT ) -{ - ITStatus bitstatus = RESET; - uint16_t itstatus = 0x0, itenable = 0x0; - - itstatus = TIMx->INTFR & TIM_IT; - - itenable = TIMx->DMAINTENR & TIM_IT; - if( ( itstatus != ( uint16_t )RESET ) && ( itenable != ( uint16_t )RESET ) ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn TIM_ClearITPendingBit - * - * @brief Clears the TIMx's interrupt pending bits. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_IT - specifies the TIM interrupt source to check. - * TIM_IT_Update - TIM update Interrupt source. - * TIM_IT_CC1 - TIM Capture Compare 1 Interrupt source. - * TIM_IT_CC2 - TIM Capture Compare 2 Interrupt source. - * TIM_IT_CC3 - TIM Capture Compare 3 Interrupt source. - * TIM_IT_CC4 - TIM Capture Compare 4 Interrupt source. - * TIM_IT_COM - TIM Commutation Interrupt source. - * TIM_IT_Trigger - TIM Trigger Interrupt source. - * TIM_IT_Break - TIM Break Interrupt source. - * - * @return none - */ -void TIM_ClearITPendingBit( TIM_TypeDef *TIMx, uint16_t TIM_IT ) -{ - TIMx->INTFR = ( uint16_t )~TIM_IT; -} - -/********************************************************************* - * @fn TI1_Config - * - * @brief Configure the TI1 as Input. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * IM_ICPolarity - The Input Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_ICSelection - specifies the input to be used. - * TIM_ICSelection_DirectTI - TIM Input 1 is selected to be - * connected to IC1. - * TIM_ICSelection_IndirectTI - TIM Input 1 is selected to be - * connected to IC2. - * TIM_ICSelection_TRC - TIM Input 1 is selected to be connected - * to TRC. - * TIM_ICFilter - Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * - * @return none - */ -static void TI1_Config( TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter ) -{ - uint16_t tmpccmr1 = 0, tmpccer = 0; - - TIMx->CCER &= ( uint16_t )~( ( uint16_t )TIM_CC1E ); - tmpccmr1 = TIMx->CHCTLR1; - tmpccer = TIMx->CCER; - tmpccmr1 &= ( uint16_t )( ( ( uint16_t )~( ( uint16_t )TIM_CC1S ) ) & ( ( uint16_t )~( ( uint16_t )TIM_IC1F ) ) ); - - TIMx->CHCTLR1 |= ( uint16_t )( TIM_ICSelection ); - tmpccmr1 |= ( uint16_t )( TIM_ICSelection | ( uint16_t )( TIM_ICFilter << ( uint16_t )4 ) ); - - if( ( TIMx == TIM1 ) || ( TIMx == TIM2 ) || ( TIMx == TIM3 ) || ( TIMx == TIM4 ) ) - { - tmpccer &= ( uint16_t )~( ( uint16_t )( TIM_CC1P ) ); - tmpccer |= ( uint16_t )( TIM_ICPolarity | ( uint16_t )TIM_CC1E ); - } - else - { - tmpccer &= ( uint16_t )~( ( uint16_t )( TIM_CC1P | TIM_CC1NP ) ); - tmpccer |= ( uint16_t )( TIM_ICPolarity | ( uint16_t )TIM_CC1E ); - } - - TIMx->CHCTLR1 = tmpccmr1; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TI2_Config - * - * @brief Configure the TI2 as Input. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * IM_ICPolarity - The Input Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_ICSelection - specifies the input to be used. - * TIM_ICSelection_DirectTI - TIM Input 2 is selected to be - * connected to IC1. - * TIM_ICSelection_IndirectTI - TIM Input 2 is selected to be - * connected to IC2. - * TIM_ICSelection_TRC - TIM Input 2 is selected to be connected - * to TRC. - * TIM_ICFilter - Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * - * @return none - */ -static void TI2_Config( TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter ) -{ - uint16_t tmpccmr1 = 0, tmpccer = 0, tmp = 0; - - TIMx->CCER &= ( uint16_t )~( ( uint16_t )TIM_CC2E ); - tmpccmr1 = TIMx->CHCTLR1; - tmpccer = TIMx->CCER; - tmp = ( uint16_t )( TIM_ICPolarity << 4 ); - tmpccmr1 &= ( uint16_t )( ( ( uint16_t )~( ( uint16_t )TIM_CC2S ) ) & ( ( uint16_t )~( ( uint16_t )TIM_IC2F ) ) ); - - TIMx->CHCTLR1 |= ( uint16_t )( TIM_ICSelection << 8 ); - tmpccmr1 |= ( uint16_t )( TIM_ICFilter << 12 ); - - if( ( TIMx == TIM1 ) || ( TIMx == TIM2 ) || ( TIMx == TIM3 ) || ( TIMx == TIM4 ) ) - { - tmpccer &= ( uint16_t )~( ( uint16_t )( TIM_CC2P ) ); - tmpccer |= ( uint16_t )( tmp | ( uint16_t )TIM_CC2E ); - } - else - { - tmpccer &= ( uint16_t )~( ( uint16_t )( TIM_CC2P | TIM_CC2NP ) ); - tmpccer |= ( uint16_t )( TIM_ICPolarity | ( uint16_t )TIM_CC2E ); - } - - TIMx->CHCTLR1 = tmpccmr1 ; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TI3_Config - * - * @brief Configure the TI3 as Input. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * IM_ICPolarity - The Input Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_ICSelection - specifies the input to be used. - * TIM_ICSelection_DirectTI - TIM Input 3 is selected to be - * connected to IC1. - * TIM_ICSelection_IndirectTI - TIM Input 3 is selected to be - * connected to IC2. - * TIM_ICSelection_TRC - TIM Input 3 is selected to be connected - * to TRC. - * TIM_ICFilter - Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * - * @return none - */ -static void TI3_Config( TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter ) -{ - uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; - - TIMx->CCER &= ( uint16_t )~( ( uint16_t )TIM_CC3E ); - tmpccmr2 = TIMx->CHCTLR2; - tmpccer = TIMx->CCER; - tmp = ( uint16_t )( TIM_ICPolarity << 8 ); - tmpccmr2 &= ( uint16_t )( ( ( uint16_t )~( ( uint16_t )TIM_CC3S ) ) & ( ( uint16_t )~( ( uint16_t )TIM_IC3F ) ) ); - - TIMx->CHCTLR2 |= ( uint16_t )( TIM_ICSelection ); - tmpccmr2 |= ( uint16_t )( TIM_ICSelection | ( uint16_t )( TIM_ICFilter << ( uint16_t )4 ) ); - - if( ( TIMx == TIM1 ) || ( TIMx == TIM2 ) || ( TIMx == TIM3 ) || ( TIMx == TIM4 ) ) - { - tmpccer &= ( uint16_t )~( ( uint16_t )( TIM_CC3P ) ); - tmpccer |= ( uint16_t )( tmp | ( uint16_t )TIM_CC3E ); - } - else - { - tmpccer &= ( uint16_t )~( ( uint16_t )( TIM_CC3P | TIM_CC3NP ) ); - tmpccer |= ( uint16_t )( TIM_ICPolarity | ( uint16_t )TIM_CC3E ); - } - - TIMx->CHCTLR2 = tmpccmr2; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TI4_Config - * - * @brief Configure the TI4 as Input. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * IM_ICPolarity - The Input Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_ICSelection - specifies the input to be used. - * TIM_ICSelection_DirectTI - TIM Input 4 is selected to be - * connected to IC1. - * TIM_ICSelection_IndirectTI - TIM Input 4 is selected to be - * connected to IC2. - * TIM_ICSelection_TRC - TIM Input 4 is selected to be connected - * to TRC. - * TIM_ICFilter - Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * - * @return none - */ -static void TI4_Config( TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter ) -{ - uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; - - TIMx->CCER &= ( uint16_t )~( ( uint16_t )TIM_CC4E ); - tmpccmr2 = TIMx->CHCTLR2; - tmpccer = TIMx->CCER; - tmp = ( uint16_t )( TIM_ICPolarity << 12 ); - tmpccmr2 &= ( uint16_t )( ( uint16_t )( ~( uint16_t )TIM_CC4S ) & ( ( uint16_t )~( ( uint16_t )TIM_IC4F ) ) ); - - TIMx->CHCTLR2 |= ( uint16_t )( TIM_ICSelection << 8 ); - tmpccmr2 |= ( uint16_t )( TIM_ICFilter << 12 ); - - if( ( TIMx == TIM1 ) || ( TIMx == TIM2 ) || ( TIMx == TIM3 ) || ( TIMx == TIM4 ) ) - { - tmpccer &= ( uint16_t )~( ( uint16_t )( TIM_CC4P ) ); - tmpccer |= ( uint16_t )( tmp | ( uint16_t )TIM_CC4E ); - } - else - { - tmpccer &= ( uint16_t )~( ( uint16_t )( TIM_CC3P | TIM_CC4NP ) ); - tmpccer |= ( uint16_t )( TIM_ICPolarity | ( uint16_t )TIM_CC4E ); - } - - TIMx->CHCTLR2 = tmpccmr2; - TIMx->CCER = tmpccer; -} - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usart.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usart.c deleted file mode 100644 index 9ad8f07..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usart.c +++ /dev/null @@ -1,825 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_usart.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the USART firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_usart.h" -#include "ch32f10x_rcc.h" - -/* USART_Private_Defines */ -#define CTLR1_UE_Set ((uint16_t)0x2000) /* USART Enable Mask */ -#define CTLR1_UE_Reset ((uint16_t)0xDFFF) /* USART Disable Mask */ - -#define CTLR1_WAKE_Mask ((uint16_t)0xF7FF) /* USART WakeUp Method Mask */ - -#define CTLR1_RWU_Set ((uint16_t)0x0002) /* USART mute mode Enable Mask */ -#define CTLR1_RWU_Reset ((uint16_t)0xFFFD) /* USART mute mode Enable Mask */ -#define CTLR1_SBK_Set ((uint16_t)0x0001) /* USART Break Character send Mask */ -#define CTLR1_CLEAR_Mask ((uint16_t)0xE9F3) /* USART CR1 Mask */ -#define CTLR2_Address_Mask ((uint16_t)0xFFF0) /* USART address Mask */ - -#define CTLR2_LINEN_Set ((uint16_t)0x4000) /* USART LIN Enable Mask */ -#define CTLR2_LINEN_Reset ((uint16_t)0xBFFF) /* USART LIN Disable Mask */ - -#define CTLR2_LBDL_Mask ((uint16_t)0xFFDF) /* USART LIN Break detection Mask */ -#define CTLR2_STOP_CLEAR_Mask ((uint16_t)0xCFFF) /* USART CR2 STOP Bits Mask */ -#define CTLR2_CLOCK_CLEAR_Mask ((uint16_t)0xF0FF) /* USART CR2 Clock Mask */ - -#define CTLR3_SCEN_Set ((uint16_t)0x0020) /* USART SC Enable Mask */ -#define CTLR3_SCEN_Reset ((uint16_t)0xFFDF) /* USART SC Disable Mask */ - -#define CTLR3_NACK_Set ((uint16_t)0x0010) /* USART SC NACK Enable Mask */ -#define CTLR3_NACK_Reset ((uint16_t)0xFFEF) /* USART SC NACK Disable Mask */ - -#define CTLR3_HDSEL_Set ((uint16_t)0x0008) /* USART Half-Duplex Enable Mask */ -#define CTLR3_HDSEL_Reset ((uint16_t)0xFFF7) /* USART Half-Duplex Disable Mask */ - -#define CTLR3_IRLP_Mask ((uint16_t)0xFFFB) /* USART IrDA LowPower mode Mask */ -#define CTLR3_CLEAR_Mask ((uint16_t)0xFCFF) /* USART CR3 Mask */ - -#define CTLR3_IREN_Set ((uint16_t)0x0002) /* USART IrDA Enable Mask */ -#define CTLR3_IREN_Reset ((uint16_t)0xFFFD) /* USART IrDA Disable Mask */ -#define GPR_LSB_Mask ((uint16_t)0x00FF) /* Guard Time Register LSB Mask */ -#define GPR_MSB_Mask ((uint16_t)0xFF00) /* Guard Time Register MSB Mask */ -#define IT_Mask ((uint16_t)0x001F) /* USART Interrupt Mask */ - -/* USART OverSampling-8 Mask */ -#define CTLR1_OVER8_Set ((uint16_t)0x8000) /* USART OVER8 mode Enable Mask */ -#define CTLR1_OVER8_Reset ((uint16_t)0x7FFF) /* USART OVER8 mode Disable Mask */ - -/* USART One Bit Sampling Mask */ -#define CTLR3_ONEBITE_Set ((uint16_t)0x0800) /* USART ONEBITE mode Enable Mask */ -#define CTLR3_ONEBITE_Reset ((uint16_t)0xF7FF) /* USART ONEBITE mode Disable Mask */ - - -/********************************************************************* - * @fn USART_DeInit - * - * @brief Deinitializes the USARTx peripheral registers to their default - * reset values. - * - * @param USARTx - where x can be 1, 2 or 3 to select the UART peripheral. - * - * @return none - */ -void USART_DeInit( USART_TypeDef *USARTx ) -{ - if( USARTx == USART1 ) - { - RCC_APB2PeriphResetCmd( RCC_APB2Periph_USART1, ENABLE ); - RCC_APB2PeriphResetCmd( RCC_APB2Periph_USART1, DISABLE ); - } - else if( USARTx == USART2 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_USART2, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_USART2, DISABLE ); - } - else if( USARTx == USART3 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_USART3, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_USART3, DISABLE ); - } - else if( USARTx == UART4 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_UART4, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_UART4, DISABLE ); - } - else - { - if( USARTx == UART5 ) - { - RCC_APB1PeriphResetCmd( RCC_APB1Periph_UART5, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_UART5, DISABLE ); - } - } -} - -/********************************************************************* - * @fn USART_Init - * - * @brief Initializes the USARTx peripheral according to the specified - * parameters in the USART_InitStruct. - * - * @param USARTx - where x can be 1, 2 or 3 to select the UART peripheral. - * USART_InitStruct - pointer to a USART_InitTypeDef structure - * that contains the configuration information for the specified - * USART peripheral. - * - * @return none - */ -void USART_Init( USART_TypeDef *USARTx, USART_InitTypeDef *USART_InitStruct ) -{ - uint32_t tmpreg = 0x00, apbclock = 0x00; - uint32_t integerdivider = 0x00; - uint32_t fractionaldivider = 0x00; - uint32_t usartxbase = 0; - RCC_ClocksTypeDef RCC_ClocksStatus; - - if( USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None ) - { - } - - usartxbase = ( uint32_t )USARTx; - tmpreg = USARTx->CTLR2; - tmpreg &= CTLR2_STOP_CLEAR_Mask; - tmpreg |= ( uint32_t )USART_InitStruct->USART_StopBits; - - USARTx->CTLR2 = ( uint16_t )tmpreg; - tmpreg = USARTx->CTLR1; - tmpreg &= CTLR1_CLEAR_Mask; - tmpreg |= ( uint32_t )USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity | - USART_InitStruct->USART_Mode; - USARTx->CTLR1 = ( uint16_t )tmpreg; - - tmpreg = USARTx->CTLR3; - tmpreg &= CTLR3_CLEAR_Mask; - tmpreg |= USART_InitStruct->USART_HardwareFlowControl; - USARTx->CTLR3 = ( uint16_t )tmpreg; - - RCC_GetClocksFreq( &RCC_ClocksStatus ); - - if( usartxbase == USART1_BASE ) - { - apbclock = RCC_ClocksStatus.PCLK2_Frequency; - } - else - { - apbclock = RCC_ClocksStatus.PCLK1_Frequency; - } - - if( ( USARTx->CTLR1 & CTLR1_OVER8_Set ) != 0 ) - { - integerdivider = ( ( 25 * apbclock ) / ( 2 * ( USART_InitStruct->USART_BaudRate ) ) ); - } - else - { - integerdivider = ( ( 25 * apbclock ) / ( 4 * ( USART_InitStruct->USART_BaudRate ) ) ); - } - tmpreg = ( integerdivider / 100 ) << 4; - - fractionaldivider = integerdivider - ( 100 * ( tmpreg >> 4 ) ); - - if( ( USARTx->CTLR1 & CTLR1_OVER8_Set ) != 0 ) - { - tmpreg |= ( ( ( ( fractionaldivider * 8 ) + 50 ) / 100 ) ) & ( ( uint8_t )0x07 ); - } - else - { - tmpreg |= ( ( ( ( fractionaldivider * 16 ) + 50 ) / 100 ) ) & ( ( uint8_t )0x0F ); - } - - USARTx->BRR = ( uint16_t )tmpreg; -} - -/********************************************************************* - * @fn USART_StructInit - * - * @brief Fills each USART_InitStruct member with its default value. - * - * @param USART_InitStruct: pointer to a USART_InitTypeDef structure - * which will be initialized. - * - * @return none - */ -void USART_StructInit( USART_InitTypeDef *USART_InitStruct ) -{ - USART_InitStruct->USART_BaudRate = 9600; - USART_InitStruct->USART_WordLength = USART_WordLength_8b; - USART_InitStruct->USART_StopBits = USART_StopBits_1; - USART_InitStruct->USART_Parity = USART_Parity_No ; - USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx; - USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None; -} - -/********************************************************************* - * @fn USART_ClockInit - * - * @brief Initializes the USARTx peripheral Clock according to the - * specified parameters in the USART_ClockInitStruct . - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_ClockInitStruct - pointer to a USART_ClockInitTypeDef - * structure that contains the configuration information for the specified - * USART peripheral. - * - * @return none - */ -void USART_ClockInit( USART_TypeDef *USARTx, USART_ClockInitTypeDef *USART_ClockInitStruct ) -{ - uint32_t tmpreg = 0x00; - - tmpreg = USARTx->CTLR2; - tmpreg &= CTLR2_CLOCK_CLEAR_Mask; - tmpreg |= ( uint32_t )USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | - USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit; - USARTx->CTLR2 = ( uint16_t )tmpreg; -} - -/********************************************************************* - * @fn USART_ClockStructInit - * - * @brief Fills each USART_ClockStructInit member with its default value. - * - * @param USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef - * structure which will be initialized. - * - * @return none - */ -void USART_ClockStructInit( USART_ClockInitTypeDef *USART_ClockInitStruct ) -{ - USART_ClockInitStruct->USART_Clock = USART_Clock_Disable; - USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low; - USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge; - USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable; -} - -/********************************************************************* - * @fn USART_Cmd - * - * @brief Enables or disables the specified USART peripheral. - * reset values (Affects also the I2Ss). - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState: ENABLE or DISABLE. - * - * @return none - */ -void USART_Cmd( USART_TypeDef *USARTx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR1 |= CTLR1_UE_Set; - } - else - { - USARTx->CTLR1 &= CTLR1_UE_Reset; - } -} - -/********************************************************************* - * @fn USART_ITConfig - * - * @brief Enables or disables the specified USART interrupts. - * reset values (Affects also the I2Ss). - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_IT - specifies the USART interrupt sources to be enabled or disabled. - * USART_IT_CTS - CTS change interrupt. - * USART_IT_LBD - LIN Break detection interrupt. - * USART_IT_TXE - Transmit Data Register empty interrupt. - * USART_IT_TC - Transmission complete interrupt. - * USART_IT_RXNE - Receive Data register not empty interrupt. - * USART_IT_IDLE - Idle line detection interrupt. - * USART_IT_PE - Parity Error interrupt. - * USART_IT_ERR - Error interrupt. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_ITConfig( USART_TypeDef *USARTx, uint16_t USART_IT, FunctionalState NewState ) -{ - uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00; - uint32_t usartxbase = 0x00; - - if( USART_IT == USART_IT_CTS ) - { - } - - usartxbase = ( uint32_t )USARTx; - usartreg = ( ( ( uint8_t )USART_IT ) >> 0x05 ); - itpos = USART_IT & IT_Mask; - itmask = ( ( ( uint32_t )0x01 ) << itpos ); - - if( usartreg == 0x01 ) - { - usartxbase += 0x0C; - } - else if( usartreg == 0x02 ) - { - usartxbase += 0x10; - } - else - { - usartxbase += 0x14; - } - - if( NewState != DISABLE ) - { - *( __IO uint32_t * )usartxbase |= itmask; - } - else - { - *( __IO uint32_t * )usartxbase &= ~itmask; - } -} - -/********************************************************************* - * @fn USART_DMACmd - * - * @brief Enables or disables the USART DMA interface. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_DMAReq - specifies the DMA request. - * USART_DMAReq_Tx - USART DMA transmit request. - * USART_DMAReq_Rx - USART DMA receive request. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_DMACmd( USART_TypeDef *USARTx, uint16_t USART_DMAReq, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR3 |= USART_DMAReq; - } - else - { - USARTx->CTLR3 &= ( uint16_t )~USART_DMAReq; - } -} - -/********************************************************************* - * @fn USART_SetAddress - * - * @brief Sets the address of the USART node. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_Address - Indicates the address of the USART node. - * - * @return none - */ -void USART_SetAddress( USART_TypeDef *USARTx, uint8_t USART_Address ) -{ - USARTx->CTLR2 &= CTLR2_Address_Mask; - USARTx->CTLR2 |= USART_Address; -} - -/********************************************************************* - * @fn USART_WakeUpConfig - * - * @brief Selects the USART WakeUp method. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_WakeUp - specifies the USART wakeup method. - * USART_WakeUp_IdleLine - WakeUp by an idle line detection. - * USART_WakeUp_AddressMark - WakeUp by an address mark. - * - * @return none - */ -void USART_WakeUpConfig( USART_TypeDef *USARTx, uint16_t USART_WakeUp ) -{ - USARTx->CTLR1 &= CTLR1_WAKE_Mask; - USARTx->CTLR1 |= USART_WakeUp; -} - -/********************************************************************* - * @fn USART_ReceiverWakeUpCmd - * - * @brief Determines if the USART is in mute mode or not. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_ReceiverWakeUpCmd( USART_TypeDef *USARTx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR1 |= CTLR1_RWU_Set; - } - else - { - USARTx->CTLR1 &= CTLR1_RWU_Reset; - } -} - -/********************************************************************* - * @fn USART_LINBreakDetectLengthConfig - * - * @brief Sets the USART LIN Break detection length. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_LINBreakDetectLength - specifies the LIN break detection length. - * USART_LINBreakDetectLength_10b - 10-bit break detection. - * USART_LINBreakDetectLength_11b - 11-bit break detection. - * - * @return none - */ -void USART_LINBreakDetectLengthConfig( USART_TypeDef *USARTx, uint16_t USART_LINBreakDetectLength ) -{ - USARTx->CTLR2 &= CTLR2_LBDL_Mask; - USARTx->CTLR2 |= USART_LINBreakDetectLength; -} - -/********************************************************************* - * @fn USART_LINCmd - * - * @brief Enables or disables the USART LIN mode. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_LINCmd( USART_TypeDef *USARTx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR2 |= CTLR2_LINEN_Set; - } - else - { - USARTx->CTLR2 &= CTLR2_LINEN_Reset; - } -} - -/********************************************************************* - * @fn USART_SendData - * - * @brief Transmits single data through the USARTx peripheral. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * Data - the data to transmit. - * - * @return none - */ -void USART_SendData( USART_TypeDef *USARTx, uint16_t Data ) -{ - USARTx->DATAR = ( Data & ( uint16_t )0x01FF ); -} - -/********************************************************************* - * @fn USART_ReceiveData - * - * @brief Returns the most recent received data by the USARTx peripheral. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * - * @return The received data. - */ -uint16_t USART_ReceiveData( USART_TypeDef *USARTx ) -{ - return ( uint16_t )( USARTx->DATAR & ( uint16_t )0x01FF ); -} - -/********************************************************************* - * @fn USART_SendBreak - * - * @brief Transmits break characters. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * - * @return none - */ -void USART_SendBreak( USART_TypeDef *USARTx ) -{ - USARTx->CTLR1 |= CTLR1_SBK_Set; -} - -/********************************************************************* - * @fn USART_SetGuardTime - * - * @brief Sets the specified USART guard time. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_GuardTime - specifies the guard time. - * - * @return none - */ -void USART_SetGuardTime( USART_TypeDef *USARTx, uint8_t USART_GuardTime ) -{ - USARTx->GPR &= GPR_LSB_Mask; - USARTx->GPR |= ( uint16_t )( ( uint16_t )USART_GuardTime << 0x08 ); -} - -/********************************************************************* - * @fn USART_SetPrescaler - * - * @brief Sets the system clock prescaler. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_Prescaler - specifies the prescaler clock. - * - * @return none - */ -void USART_SetPrescaler( USART_TypeDef *USARTx, uint8_t USART_Prescaler ) -{ - USARTx->GPR &= GPR_MSB_Mask; - USARTx->GPR |= USART_Prescaler; -} - -/********************************************************************* - * @fn USART_SmartCardCmd - * - * @brief Enables or disables the USART Smart Card mode. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_SmartCardCmd( USART_TypeDef *USARTx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR3 |= CTLR3_SCEN_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_SCEN_Reset; - } -} - -/********************************************************************* - * @fn USART_SmartCardNACKCmd - * - * @brief Enables or disables NACK transmission. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_SmartCardNACKCmd( USART_TypeDef *USARTx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR3 |= CTLR3_NACK_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_NACK_Reset; - } -} - -/********************************************************************* - * @fn USART_HalfDuplexCmd - * - * @brief Enables or disables the USART Half Duplex communication. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_HalfDuplexCmd( USART_TypeDef *USARTx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR3 |= CTLR3_HDSEL_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_HDSEL_Reset; - } -} - -/********************************************************************* - * @fn USART_OverSampling8Cmd - * - * @brief Enables or disables the USART's 8x oversampling mode. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_OverSampling8Cmd( USART_TypeDef *USARTx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR1 |= CTLR1_OVER8_Set; - } - else - { - USARTx->CTLR1 &= CTLR1_OVER8_Reset; - } -} - -/********************************************************************* - * @fn USART_OneBitMethodCmd - * - * @brief Enables or disables the USART's one bit sampling method. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_OneBitMethodCmd( USART_TypeDef *USARTx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR3 |= CTLR3_ONEBITE_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_ONEBITE_Reset; - } -} - -/********************************************************************* - * @fn USART_IrDAConfig - * - * @brief Configures the USART's IrDA interface. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_IrDAMode - specifies the IrDA mode. - * USART_IrDAMode_LowPower. - * USART_IrDAMode_Normal. - * - * @return none - */ -void USART_IrDAConfig( USART_TypeDef *USARTx, uint16_t USART_IrDAMode ) -{ - USARTx->CTLR3 &= CTLR3_IRLP_Mask; - USARTx->CTLR3 |= USART_IrDAMode; -} - -/********************************************************************* - * @fn USART_IrDACmd - * - * @brief Enables or disables the USART's IrDA interface. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_IrDACmd( USART_TypeDef *USARTx, FunctionalState NewState ) -{ - if( NewState != DISABLE ) - { - USARTx->CTLR3 |= CTLR3_IREN_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_IREN_Reset; - } -} - -/********************************************************************* - * @fn USART_GetFlagStatus - * - * @brief Checks whether the specified USART flag is set or not. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_FLAG - specifies the flag to check. - * USART_FLAG_CTS - CTS Change flag. - * USART_FLAG_LBD - LIN Break detection flag. - * USART_FLAG_TXE - Transmit data register empty flag. - * USART_FLAG_TC - Transmission Complete flag. - * USART_FLAG_RXNE - Receive data register not empty flag. - * USART_FLAG_IDLE - Idle Line detection flag. - * USART_FLAG_ORE - OverRun Error flag. - * USART_FLAG_NE - Noise Error flag. - * USART_FLAG_FE - Framing Error flag. - * USART_FLAG_PE - Parity Error flag. - * - * @return bitstatus: SET or RESET - */ -FlagStatus USART_GetFlagStatus( USART_TypeDef *USARTx, uint16_t USART_FLAG ) -{ - FlagStatus bitstatus = RESET; - - if( USART_FLAG == USART_FLAG_CTS ) - { - } - - if( ( USARTx->STATR & USART_FLAG ) != ( uint16_t )RESET ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn USART_ClearFlag - * - * @brief Clears the USARTx's pending flags. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_FLAG - specifies the flag to clear. - * USART_FLAG_CTS - CTS Change flag. - * USART_FLAG_LBD - LIN Break detection flag. - * USART_FLAG_TC - Transmission Complete flag. - * USART_FLAG_RXNE - Receive data register not empty flag. - * - * @return none - */ -void USART_ClearFlag( USART_TypeDef *USARTx, uint16_t USART_FLAG ) -{ - if( ( USART_FLAG & USART_FLAG_CTS ) == USART_FLAG_CTS ) - { - } - - USARTx->STATR = ( uint16_t )~USART_FLAG; -} - -/********************************************************************* - * @fn USART_GetITStatus - * - * @brief Checks whether the specified USART interrupt has occurred or not. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_IT - specifies the USART interrupt source to check. - * USART_IT_CTS - CTS change interrupt. - * USART_IT_LBD - LIN Break detection interrupt. - * USART_IT_TXE - Tansmit Data Register empty interrupt. - * USART_IT_TC - Transmission complete interrupt. - * USART_IT_RXNE - Receive Data register not empty interrupt. - * USART_IT_IDLE - Idle line detection interrupt. - * USART_IT_ORE_RX - OverRun Error interrupt if the RXNEIE bit is set. - * USART_IT_ORE_ER - OverRun Error interrupt if the EIE bit is set. - * USART_IT_NE - Noise Error interrupt. - * USART_IT_FE - Framing Error interrupt. - * USART_IT_PE - Parity Error interrupt. - * - * @return bitstatus: SET or RESET. - */ -ITStatus USART_GetITStatus( USART_TypeDef *USARTx, uint16_t USART_IT ) -{ - uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00; - ITStatus bitstatus = RESET; - - if( USART_IT == USART_IT_CTS ) - { - } - - usartreg = ( ( ( uint8_t )USART_IT ) >> 0x05 ); - itmask = USART_IT & IT_Mask; - itmask = ( uint32_t )0x01 << itmask; - - if( usartreg == 0x01 ) - { - itmask &= USARTx->CTLR1; - } - else if( usartreg == 0x02 ) - { - itmask &= USARTx->CTLR2; - } - else - { - itmask &= USARTx->CTLR3; - } - - bitpos = USART_IT >> 0x08; - bitpos = ( uint32_t )0x01 << bitpos; - bitpos &= USARTx->STATR; - - if( ( itmask != ( uint16_t )RESET ) && ( bitpos != ( uint16_t )RESET ) ) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn USART_ClearITPendingBit - * - * @brief Clears the USARTx's interrupt pending bits. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_IT - specifies the interrupt pending bit to clear. - * USART_IT_CTS - CTS change interrupt. - * USART_IT_LBD - LIN Break detection interrupt. - * USART_IT_TC - Transmission complete interrupt. - * USART_IT_RXNE - Receive Data register not empty interrupt. - * - * @return none - */ -void USART_ClearITPendingBit( USART_TypeDef *USARTx, uint16_t USART_IT ) -{ - uint16_t bitpos = 0x00, itmask = 0x00; - - if( USART_IT == USART_IT_CTS ) - { - - } - - bitpos = USART_IT >> 0x08; - itmask = ( ( uint16_t )0x01 << ( uint16_t )bitpos ); - USARTx->STATR = ( uint16_t )~itmask; -} - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usb.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usb.c deleted file mode 100644 index dd4316d..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usb.c +++ /dev/null @@ -1,114 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_usb.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the USB firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_usb.h" -#include "ch32f10x_rcc.h" -#include "debug.h" -/******************************** USB DEVICE **********************************/ - -/* Endpoint address */ -PUINT8 pEP0_RAM_Addr; -PUINT8 pEP1_RAM_Addr; -PUINT8 pEP2_RAM_Addr; -PUINT8 pEP3_RAM_Addr; - -/********************************************************************* - * @fn USB_DeviceInit - * - * @brief Initializes USB device. - * - * @return none - */ -void USB_DeviceInit( void ) -{ - R8_USB_CTRL = 0x00; - - R8_UEP4_1_MOD = RB_UEP4_RX_EN | RB_UEP4_TX_EN | RB_UEP1_RX_EN | RB_UEP1_TX_EN; - R8_UEP2_3_MOD = RB_UEP2_RX_EN | RB_UEP2_TX_EN | RB_UEP3_RX_EN | RB_UEP3_TX_EN; - - R16_UEP0_DMA = ( UINT16 )( UINT32 )pEP0_RAM_Addr; - R16_UEP1_DMA = ( UINT16 )( UINT32 )pEP1_RAM_Addr; - R16_UEP2_DMA = ( UINT16 )( UINT32 )pEP2_RAM_Addr; - R16_UEP3_DMA = ( UINT16 )( UINT32 )pEP3_RAM_Addr; - - R8_UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP1_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP2_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP3_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP4_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - - R8_USB_INT_FG = 0xFF; - R8_USB_INT_EN = RB_UIE_SUSPEND | RB_UIE_BUS_RST | RB_UIE_TRANSFER; - - R8_USB_DEV_AD = 0x00; - R8_USB_CTRL = RB_UC_DEV_PU_EN | RB_UC_INT_BUSY | RB_UC_DMA_EN; - R8_UDEV_CTRL = RB_UD_PD_DIS | RB_UD_PORT_EN; -} - -/********************************************************************* - * @fn DevEP1_IN_Deal - * - * @brief Device endpoint1 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP1_IN_Deal( UINT8 l ) -{ - R8_UEP1_T_LEN = l; - R8_UEP1_CTRL = ( R8_UEP1_CTRL & ~MASK_UEP_T_RES ) | UEP_T_RES_ACK; -} - -/********************************************************************* - * @fn DevEP2_IN_Deal - * - * @brief Device endpoint2 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP2_IN_Deal( UINT8 l ) -{ - R8_UEP2_T_LEN = l; - R8_UEP2_CTRL = ( R8_UEP2_CTRL & ~MASK_UEP_T_RES ) | UEP_T_RES_ACK; -} - -/********************************************************************* - * @fn DevEP3_IN_Deal - * - * @brief Device endpoint3 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP3_IN_Deal( UINT8 l ) -{ - R8_UEP3_T_LEN = l; - R8_UEP3_CTRL = ( R8_UEP3_CTRL & ~MASK_UEP_T_RES ) | UEP_T_RES_ACK; -} - -/********************************************************************* - * @fn DevEP4_IN_Deal - * - * @brief Device endpoint4 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP4_IN_Deal( UINT8 l ) -{ - R8_UEP4_T_LEN = l; - R8_UEP4_CTRL = ( R8_UEP4_CTRL & ~MASK_UEP_T_RES ) | UEP_T_RES_ACK; -} - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usb_host.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usb_host.c deleted file mode 100644 index ef75feb..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_usb_host.c +++ /dev/null @@ -1,879 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_usb_host.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the USB firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_usb_host.h" -#include "debug.h" - - -/******************************** HOST DEVICE **********************************/ -UINT8 UsbDevEndp0Size; -UINT8 FoundNewDev; -_RootHubDev ThisUsbDev; - -PUINT8 pHOST_RX_RAM_Addr; -PUINT8 pHOST_TX_RAM_Addr; -extern UINT8 Com_Buffer[128]; - -__align( 4 ) const UINT8 SetupGetDevDescr[] = { USB_REQ_TYP_IN, USB_GET_DESCRIPTOR, 0x00, USB_DESCR_TYP_DEVICE, 0x00, 0x00, sizeof( USB_DEV_DESCR ), 0x00 }; - -__align( 4 ) const UINT8 SetupGetCfgDescr[] = { USB_REQ_TYP_IN, USB_GET_DESCRIPTOR, 0x00, USB_DESCR_TYP_CONFIG, 0x00, 0x00, 0x04, 0x00 }; - -__align( 4 ) const UINT8 SetupSetUsbAddr[] = { USB_REQ_TYP_OUT, USB_SET_ADDRESS, USB_DEVICE_ADDR, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -__align( 4 ) const UINT8 SetupSetUsbConfig[] = { USB_REQ_TYP_OUT, USB_SET_CONFIGURATION, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -__align( 4 ) const UINT8 SetupSetUsbInterface[] = { USB_REQ_RECIP_INTERF, USB_SET_INTERFACE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -__align( 4 ) const UINT8 SetupClrEndpStall[] = { USB_REQ_TYP_OUT | USB_REQ_RECIP_ENDP, USB_CLEAR_FEATURE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - -/********************************************************************* - * @fn DisableRootHubPort( ) - * - * @brief Disable root hub - * - * @return none - */ -void DisableRootHubPort( void ) -{ -#ifdef FOR_ROOT_UDISK_ONLY - CH103DiskStatus = DISK_DISCONNECT; - -#endif - -#ifndef DISK_BASE_BUF_LEN - ThisUsbDev.DeviceStatus = ROOT_DEV_DISCONNECT; - ThisUsbDev.DeviceAddress = 0x00; - -#endif -} - -/********************************************************************* - * @fn AnalyzeRootHub - * - * @brief Analyze root hub state. - * - * @return Error - */ -UINT8 AnalyzeRootHub( void ) -{ - UINT8 s; - - s = ERR_SUCCESS; - - if( R8_USB_MIS_ST & RB_UMS_DEV_ATTACH ) - { - -#ifdef DISK_BASE_BUF_LEN - if( CH103DiskStatus == DISK_DISCONNECT - -#else - if( ThisUsbDev.DeviceStatus == ROOT_DEV_DISCONNECT - -#endif - || ( R8_UHOST_CTRL & RB_UH_PORT_EN ) == 0x00 ) - { - DisableRootHubPort( ); - -#ifdef DISK_BASE_BUF_LEN - CH103DiskStatus = DISK_CONNECT; - -#else - ThisUsbDev.DeviceSpeed = R8_USB_MIS_ST & RB_UMS_DM_LEVEL ? 0 : 1; - ThisUsbDev.DeviceStatus = ROOT_DEV_CONNECTED; - -#endif - s = ERR_USB_CONNECT; - } - } - -#ifdef DISK_BASE_BUF_LEN - else if( CH103DiskStatus >= DISK_CONNECT ) - { - -#else - else if( ThisUsbDev.DeviceStatus >= ROOT_DEV_CONNECTED ) - { - -#endif - DisableRootHubPort( ); - if( s == ERR_SUCCESS ) - { - s = ERR_USB_DISCON; - } - } - - return( s ); -} - -/********************************************************************* - * @fn SetHostUsbAddr - * - * @brief Set USB host address - * - * @param addr - host address - * - * @return none - */ -void SetHostUsbAddr( UINT8 addr ) -{ - R8_USB_DEV_AD = ( R8_USB_DEV_AD & RB_UDA_GP_BIT ) | ( addr & MASK_USB_ADDR ); -} - -#ifndef FOR_ROOT_UDISK_ONLY -/********************************************************************* - * @fn SetUsbSpeed - * - * @brief Set USB speed. - * - * @param FullSpeed - USB speed. - * - * @return none - */ -void SetUsbSpeed( UINT8 FullSpeed ) -{ - if( FullSpeed ) - { - R8_USB_CTRL &= ~ RB_UC_LOW_SPEED; - R8_UH_SETUP &= ~ RB_UH_PRE_PID_EN; - } - else - { - R8_USB_CTRL |= RB_UC_LOW_SPEED; - } -} -#endif - -/********************************************************************* - * @fn ResetRootHubPort( ) - * - * @brief Reset root hub - * - * @return none - */ -void ResetRootHubPort( void ) -{ - UsbDevEndp0Size = DEFAULT_ENDP0_SIZE; - SetHostUsbAddr( 0x00 ); - R8_UHOST_CTRL &= ~RB_UH_PORT_EN; - SetUsbSpeed( 1 ); - R8_UHOST_CTRL = ( R8_UHOST_CTRL & ~RB_UH_LOW_SPEED ) | RB_UH_BUS_RESET; - Delay_Ms( 15 ); - R8_UHOST_CTRL = R8_UHOST_CTRL & ~ RB_UH_BUS_RESET; - Delay_Us( 250 ); - R8_USB_INT_FG = RB_UIF_DETECT; -} - -/********************************************************************* - * @fn EnableRootHubPort( ) - * - * @brief Enable root hub. - * - * @return ERROR - */ -UINT8 EnableRootHubPort( void ) -{ -#ifdef DISK_BASE_BUF_LEN - if( CH103DiskStatus < DISK_CONNECT ) - { - CH103DiskStatus = DISK_CONNECT; - } - -#else - if( ThisUsbDev.DeviceStatus < ROOT_DEV_CONNECTED ) - { - ThisUsbDev.DeviceStatus = ROOT_DEV_CONNECTED; - } - -#endif - if( R8_USB_MIS_ST & RB_UMS_DEV_ATTACH ) - { -#ifndef DISK_BASE_BUF_LEN - if( ( R8_UHOST_CTRL & RB_UH_PORT_EN ) == 0x00 ) - { - ThisUsbDev.DeviceSpeed = ( R8_USB_MIS_ST & RB_UMS_DM_LEVEL ) ? 0 : 1; - if( ThisUsbDev.DeviceSpeed == 0 ) - { - R8_UHOST_CTRL |= RB_UH_LOW_SPEED; - } - } - -#endif - R8_UHOST_CTRL |= RB_UH_PORT_EN; - return( ERR_SUCCESS ); - } - - return( ERR_USB_DISCON ); -} - -/********************************************************************* - * @fn WaitUSB_Interrupt - * - * @brief Wait USB Interrput. - * - * @return ERROR - */ -UINT8 WaitUSB_Interrupt( void ) -{ - UINT16 i; - - for( i = WAIT_USB_TOUT_200US; i != 0 && ( R8_USB_INT_FG & RB_UIF_TRANSFER ) == 0; i -- ) {;} - return( ( R8_USB_INT_FG & RB_UIF_TRANSFER ) ? ERR_SUCCESS : ERR_USB_UNKNOWN ); -} - -/********************************************************************* - * @fn USBHostTransact - * - * @brief USB host transport transaction - * @param endp_pid: endpoint and PID - * tog: Synchronization flag - * timeout: timeout times - * - * @return EEROR: - * ERR_USB_UNKNOWN - * ERR_USB_DISCON - * ERR_USB_CONNECT - * ERR_SUCCESS - */ -UINT8 USBHostTransact( UINT8 endp_pid, UINT8 tog, UINT32 timeout ) -{ - UINT8 TransRetry; - UINT8 s, r; - UINT16 i; - - R8_UH_RX_CTRL = R8_UH_TX_CTRL = tog; - TransRetry = 0; - - do - { - R8_UH_EP_PID = endp_pid; - R8_USB_INT_FG = RB_UIF_TRANSFER; - for( i = WAIT_USB_TOUT_200US; i != 0 && ( R8_USB_INT_FG & RB_UIF_TRANSFER ) == 0; i -- ); - R8_UH_EP_PID = 0x00; - if( ( R8_USB_INT_FG & RB_UIF_TRANSFER ) == 0 ) - { - return( ERR_USB_UNKNOWN ); - } - - if( R8_USB_INT_FG & RB_UIF_DETECT ) - { - R8_USB_INT_FG = RB_UIF_DETECT; - s = AnalyzeRootHub( ); - - if( s == ERR_USB_CONNECT ) - { - FoundNewDev = 1; - } - -#ifdef DISK_BASE_BUF_LEN - - if( CH103DiskStatus == DISK_DISCONNECT ) - { - return( ERR_USB_DISCON ); - } - if( CH103DiskStatus == DISK_CONNECT ) - { - return( ERR_USB_CONNECT ); - } - -#else - if( ThisUsbDev.DeviceStatus == ROOT_DEV_DISCONNECT ) - { - return( ERR_USB_DISCON ); - } - if( ThisUsbDev.DeviceStatus == ROOT_DEV_CONNECTED ) - { - return( ERR_USB_CONNECT ); - } - -#endif - Delay_Us( 200 ); - } - - if( R8_USB_INT_FG & RB_UIF_TRANSFER ) - { - if( R8_USB_INT_ST & RB_UIS_TOG_OK ) - { - return( ERR_SUCCESS ); - } - r = R8_USB_INT_ST & MASK_UIS_H_RES; - if( r == USB_PID_STALL ) - { - return( r | ERR_USB_TRANSFER ); - } - - if( r == USB_PID_NAK ) - { - if( timeout == 0 ) - { - return( r | ERR_USB_TRANSFER ); - } - if( timeout < 0xFFFF ) - { - timeout --; - } - -- TransRetry; - } - else switch( endp_pid >> 4 ) - { - case USB_PID_SETUP: - - case USB_PID_OUT: - if( r ) - { - return( r | ERR_USB_TRANSFER ); - } - break; - - case USB_PID_IN: - if( r == USB_PID_DATA0 && r == USB_PID_DATA1 ) - { - } - else if( r ) - { - return( r | ERR_USB_TRANSFER ); - } - break; - - default: - return( ERR_USB_UNKNOWN ); - } - } - else - { - R8_USB_INT_FG = 0xFF; - } - Delay_Us( 15 ); - } - while( ++ TransRetry < 3 ); - - return( ERR_USB_TRANSFER ); -} - -/********************************************************************* - * @fn HostCtrlTransfer - * - * @brief Host control transport. - * - * @param DataBuf : Receive or send data buffer. - * RetLen : Data length. - * - * @return ERR_USB_BUF_OVER IN - * ERR_SUCCESS - */ -UINT8 HostCtrlTransfer( PUINT8 DataBuf, PUINT8 RetLen ) -{ - UINT16 RemLen = 0; - UINT8 s, RxLen, RxCnt, TxCnt; - PUINT8 pBuf; - PUINT8 pLen; - - pBuf = DataBuf; - pLen = RetLen; - Delay_Us( 200 ); - if( pLen ) - { - *pLen = 0; - } - - R8_UH_TX_LEN = sizeof( USB_SETUP_REQ ); - s = USBHostTransact( USB_PID_SETUP << 4 | 0x00, 0x00, 200000 / 20 ); - if( s != ERR_SUCCESS ) - { - return( s ); - } - R8_UH_RX_CTRL = R8_UH_TX_CTRL = RB_UH_R_TOG | RB_UH_R_AUTO_TOG | RB_UH_T_TOG | RB_UH_T_AUTO_TOG; - R8_UH_TX_LEN = 0x01; - RemLen = pSetupReq -> wLength; - - if( RemLen && pBuf ) - { - if( pSetupReq -> bRequestType & USB_REQ_TYP_IN ) - { - while( RemLen ) - { - Delay_Us( 200 ); - s = USBHostTransact( USB_PID_IN << 4 | 0x00, R8_UH_RX_CTRL, 200000 / 20 ); - if( s != ERR_SUCCESS ) - { - return( s ); - } - RxLen = R8_USB_RX_LEN < RemLen ? R8_USB_RX_LEN : RemLen; - RemLen -= RxLen; - if( pLen ) - { - *pLen += RxLen; - } - - for( RxCnt = 0; RxCnt != RxLen; RxCnt ++ ) - { - *pBuf = pHOST_RX_RAM_Addr[ RxCnt ]; - pBuf ++; - } - - if( R8_USB_RX_LEN == 0 || ( R8_USB_RX_LEN & ( UsbDevEndp0Size - 1 ) ) ) - { - break; - } - } - R8_UH_TX_LEN = 0x00; - } - else - { - while( RemLen ) - { - Delay_Us( 200 ); - R8_UH_TX_LEN = RemLen >= UsbDevEndp0Size ? UsbDevEndp0Size : RemLen; - - for( TxCnt = 0; TxCnt != R8_UH_TX_LEN; TxCnt ++ ) - { - pHOST_TX_RAM_Addr[ TxCnt ] = *pBuf; - pBuf ++; - } - - s = USBHostTransact( USB_PID_OUT << 4 | 0x00, R8_UH_TX_CTRL, 200000 / 20 ); - if( s != ERR_SUCCESS ) - { - return( s ); - } - RemLen -= R8_UH_TX_LEN; - if( pLen ) - { - *pLen += R8_UH_TX_LEN; - } - } - } - } - - Delay_Us( 200 ); - s = USBHostTransact( ( R8_UH_TX_LEN ? USB_PID_IN << 4 | 0x00 : USB_PID_OUT << 4 | 0x00 ), RB_UH_R_TOG | RB_UH_T_TOG, 200000 / 20 ); - if( s != ERR_SUCCESS ) - { - return( s ); - } - if( R8_UH_TX_LEN == 0 ) - { - return( ERR_SUCCESS ); - } - if( R8_USB_RX_LEN == 0 ) - { - return( ERR_SUCCESS ); - } - - return( ERR_USB_BUF_OVER ); -} - -/********************************************************************* - * @fn CopySetupReqPkg - * - * @brief Copy setup request package. - * - * @param pReqPkt: setup request package address. - * - * @return none - */ -void CopySetupReqPkg( const UINT8 *pReqPkt ) -{ - UINT8 i; - - for( i = 0; i != sizeof( USB_SETUP_REQ ); i ++ ){ - ( ( PUINT8 )pSetupReq )[ i ] = *pReqPkt; - pReqPkt++; - } -} - -/********************************************************************* - * @fn CtrlGetDeviceDescr - * - * @brief Get device descrptor. - * - * @param DataBuf: Data buffer. - * - * @return ERR_USB_BUF_OVER - * ERR_SUCCESS - */ -UINT8 CtrlGetDeviceDescr( PUINT8 DataBuf ) -{ - UINT8 s; - UINT8 len; - - UsbDevEndp0Size = DEFAULT_ENDP0_SIZE; - CopySetupReqPkg( SetupGetDevDescr ); - s = HostCtrlTransfer( DataBuf, &len ); - - if( s != ERR_SUCCESS ) - { - return( s ); - } - UsbDevEndp0Size = ( ( PUSB_DEV_DESCR )DataBuf ) -> bMaxPacketSize0; - if( len < ( ( PUSB_SETUP_REQ )SetupGetDevDescr )->wLength ) - { - return( ERR_USB_BUF_OVER ); - } - - return( ERR_SUCCESS ); -} - -/********************************************************************* - * @fn CtrlGetConfigDescr - * - * @brief Get configration descrptor. - * - * @param DataBuf: Data buffer. - * - * @return ERR_USB_BUF_OVER - * ERR_SUCCESS - */ -UINT8 CtrlGetConfigDescr( PUINT8 DataBuf ) -{ - UINT8 s; - UINT8 len; - - CopySetupReqPkg( SetupGetCfgDescr ); - s = HostCtrlTransfer( DataBuf, &len ); - if( s != ERR_SUCCESS ) - { - return( s ); - } - if( len < ( ( PUSB_SETUP_REQ )SetupGetCfgDescr ) -> wLength ) - { - return( ERR_USB_BUF_OVER ); - } - - len = ( ( PUSB_CFG_DESCR )DataBuf ) -> wTotalLength; - CopySetupReqPkg( SetupGetCfgDescr ); - pSetupReq ->wLength = len; - s = HostCtrlTransfer( DataBuf, &len ); - if( s != ERR_SUCCESS ) - { - return( s ); - } - - return( ERR_SUCCESS ); -} - -/********************************************************************* - * @fn CtrlSetUsbAddress - * - * @brief Set USB device address. - * - * @param addr: Device address. - * - * @return ERR_SUCCESS - */ -UINT8 CtrlSetUsbAddress( UINT8 addr ) -{ - UINT8 s; - - CopySetupReqPkg( SetupSetUsbAddr ); - pSetupReq -> wValue = addr; - s = HostCtrlTransfer( NULL, NULL ); - if( s != ERR_SUCCESS ) - { - return( s ); - } - SetHostUsbAddr( addr ); - Delay_Ms( 10 ); - - return( ERR_SUCCESS ); -} - -/********************************************************************* - * @fn CtrlSetUsbConfig - * - * @brief Set usb configration. - * - * @param cfg: Configration Value. - * - * @return ERR_SUCCESS - */ -UINT8 CtrlSetUsbConfig( UINT8 cfg ) -{ - CopySetupReqPkg( SetupSetUsbConfig ); - pSetupReq -> wValue = cfg; - return( HostCtrlTransfer( NULL, NULL ) ); -} - -/********************************************************************* - * @fn CtrlClearEndpStall - * - * @brief Clear endpoint STALL. - * - * @param endp: Endpoint address. - * - * @return ERR_SUCCESS - */ -UINT8 CtrlClearEndpStall( UINT8 endp ) -{ - CopySetupReqPkg( SetupClrEndpStall ); - pSetupReq -> wIndex = endp; - return( HostCtrlTransfer( NULL, NULL ) ); -} - -/********************************************************************* - * @fn CtrlSetUsbIntercace - * - * @brief Set USB Interface configration. - * - * @param cfg: Configration value. - * - * @return ERR_SUCCESS - */ -UINT8 CtrlSetUsbIntercace( UINT8 cfg ) -{ - CopySetupReqPkg( SetupSetUsbInterface ); - pSetupReq -> wValue = cfg; - return( HostCtrlTransfer( NULL, NULL ) ); -} - -/********************************************************************* - * @fn USB_HostInit - * - * @brief Initializes USB host mode. - * - * @return ERR_SUCCESS - */ -void USB_HostInit( void ) -{ - R8_USB_CTRL = RB_UC_HOST_MODE; - R8_UHOST_CTRL = 0; - R8_USB_DEV_AD = 0x00; - R8_UH_EP_MOD = RB_UH_EP_TX_EN | RB_UH_EP_RX_EN; - R16_UH_RX_DMA = ( UINT16 )( UINT32 )pHOST_RX_RAM_Addr; - R16_UH_TX_DMA = ( UINT16 )( UINT32 )pHOST_TX_RAM_Addr; - - R8_UH_RX_CTRL = 0x00; - R8_UH_TX_CTRL = 0x00; - R8_USB_CTRL = RB_UC_HOST_MODE | RB_UC_INT_BUSY | RB_UC_DMA_EN; - R8_UH_SETUP = RB_UH_SOF_EN; - R8_USB_INT_FG = 0xFF; - DisableRootHubPort( ); - R8_USB_INT_EN = RB_UIE_TRANSFER | RB_UIE_DETECT; - - FoundNewDev = 0; -} - -/********************************************************************* - * @fn InitRootDevice - * - * @brief Initializes USB root hub. - * - * @param DataBuf: Data buffer. - * - * @return ERROR - */ -UINT8 InitRootDevice( PUINT8 DataBuf ) -{ - UINT8 i, s; - UINT8 cfg, dv_cls, if_cls; - - ResetRootHubPort( ); - - for( i = 0, s = 0; i < 100; i ++ ) - { - Delay_Ms( 1 ); - if( EnableRootHubPort( ) == ERR_SUCCESS ) - { - i = 0; - s ++; - if( s > 100 ) - { - break; - } - } - } - - if( i ) - { - DisableRootHubPort( ); - return( ERR_USB_DISCON ); - } - - SetUsbSpeed( ThisUsbDev.DeviceSpeed ); - - s = CtrlGetDeviceDescr( DataBuf ); - - if( s == ERR_SUCCESS ) - { - - ThisUsbDev.DeviceVID = ( ( PUSB_DEV_DESCR )DataBuf )->idVendor; - ThisUsbDev.DevicePID = ( ( PUSB_DEV_DESCR )DataBuf )->idProduct; - dv_cls = ( ( PUSB_DEV_DESCR )DataBuf ) -> bDeviceClass; - - s = CtrlSetUsbAddress( ( ( PUSB_SETUP_REQ )SetupSetUsbAddr )->wValue ); - - if( s == ERR_SUCCESS ) - { - ThisUsbDev.DeviceAddress = ( ( PUSB_SETUP_REQ )SetupSetUsbAddr )->wValue; - - s = CtrlGetConfigDescr( DataBuf ); - - if( s == ERR_SUCCESS ) - { - cfg = ( ( PUSB_CFG_DESCR )DataBuf )->bConfigurationValue; - if_cls = ( ( PUSB_CFG_DESCR_LONG )DataBuf )->itf_descr.bInterfaceClass; - - if( ( dv_cls == 0x00 ) && ( if_cls == USB_DEV_CLASS_STORAGE ) ) - { - -#ifdef FOR_ROOT_UDISK_ONLY - CH103DiskStatus = DISK_USB_ADDR; - return( ERR_SUCCESS ); - } - else - { - return( ERR_USB_UNSUPPORT ); - } - -#else - s = CtrlSetUsbConfig( cfg ); - - if( s == ERR_SUCCESS ) - { - ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; - ThisUsbDev.DeviceType = USB_DEV_CLASS_STORAGE; - SetUsbSpeed( 1 ); - return( ERR_SUCCESS ); - } - } - else if( ( dv_cls == 0x00 ) && ( if_cls == USB_DEV_CLASS_PRINTER ) && ( ( PUSB_CFG_DESCR_LONG )DataBuf )->itf_descr.bInterfaceSubClass == 0x01 ) - { - s = CtrlSetUsbConfig( cfg ); - if( s == ERR_SUCCESS ) - { - ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; - ThisUsbDev.DeviceType = USB_DEV_CLASS_PRINTER; - SetUsbSpeed( 1 ); - return( ERR_SUCCESS ); - } - } - else if( ( dv_cls == 0x00 ) && ( if_cls == USB_DEV_CLASS_HID ) && ( ( PUSB_CFG_DESCR_LONG )DataBuf )->itf_descr.bInterfaceSubClass <= 0x01 ) - { - if_cls = ( ( PUSB_CFG_DESCR_LONG )DataBuf ) -> itf_descr.bInterfaceProtocol; - s = CtrlSetUsbConfig( cfg ); - if( s == ERR_SUCCESS ) - { - ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; - if( if_cls == 1 ) - { - ThisUsbDev.DeviceType = DEV_TYPE_KEYBOARD; - SetUsbSpeed( 1 ); - return( ERR_SUCCESS ); - } - else if( if_cls == 2 ) - { - ThisUsbDev.DeviceType = DEV_TYPE_MOUSE; - SetUsbSpeed( 1 ); - return( ERR_SUCCESS ); - } - s = ERR_USB_UNSUPPORT; - } - } - else - { - s = CtrlSetUsbConfig( cfg ); - if( s == ERR_SUCCESS ) - { - ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; - ThisUsbDev.DeviceType = DEV_TYPE_UNKNOW; - SetUsbSpeed( 1 ); - return( ERR_SUCCESS ); - } - } - -#endif - } - } - } - -#ifdef FOR_ROOT_UDISK_ONLY - CH103DiskStatus = DISK_CONNECT; - -#else - ThisUsbDev.DeviceStatus = ROOT_DEV_FAILED; - -#endif - - SetUsbSpeed( 1 ); - - return( s ); -} -/********************************************************************* - * @fn HubGetPortStatus - * - * @brief ѯHUB˿״̬,Com_Buffer - * - * @param UINT8 HubPortIndex - * - * @return ERR_SUCCESS ɹ - * ERR_USB_BUF_OVER ȴ - */ -UINT8 HubGetPortStatus( UINT8 HubPortIndex ) -{ - UINT8 s; - UINT8 len; - - pSetupReq -> bRequestType = HUB_GET_PORT_STATUS; - pSetupReq -> bRequest = HUB_GET_STATUS; - pSetupReq -> wValue = 0x0000; - pSetupReq -> wIndex = 0x0000 | HubPortIndex; - pSetupReq -> wLength = 0x0004; - s = HostCtrlTransfer( Com_Buffer, &len ); // ִпƴ - if( s != ERR_SUCCESS ) - { - return( s ); - } - if( len < 4 ) - { - return( ERR_USB_BUF_OVER ); // ȴ - } - return( ERR_SUCCESS ); -} - -/********************************************************************* - * @fn HubSetPortFeature - * - * @brief HUB˿ - * - * @param UINT8 HubPortIndex - * UINT8 FeatureSelt - * - * @return ERR_SUCCESS ɹ - */ -UINT8 HubSetPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ) -{ - pSetupReq -> bRequestType = HUB_SET_PORT_FEATURE; - pSetupReq -> bRequest = HUB_SET_FEATURE; - pSetupReq -> wValue = 0x0000 | FeatureSelt; - pSetupReq -> wIndex = 0x0000 | HubPortIndex; - pSetupReq -> wLength = 0x0000; - return( HostCtrlTransfer( NULL, NULL ) ); // ִпƴ -} - -/********************************************************************* - * @fn HubClearPortFeature - * - * @brief HUB˿ - * - * @param UINT8 HubPortIndex - * UINT8 FeatureSelt - * - * @return ERR_SUCCESS ɹ - */ -UINT8 HubClearPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ) -{ - pSetupReq -> bRequestType = HUB_CLEAR_PORT_FEATURE; - pSetupReq -> bRequest = HUB_CLEAR_FEATURE; - pSetupReq -> wValue = 0x0000 | FeatureSelt; - pSetupReq -> wIndex = 0x0000 | HubPortIndex; - pSetupReq -> wLength = 0x0000; - return( HostCtrlTransfer( NULL, NULL ) ); // ִпƴ -} - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_wwdg.c b/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_wwdg.c deleted file mode 100644 index 3a8058d..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/StdPeriphDriver/src/ch32f10x_wwdg.c +++ /dev/null @@ -1,150 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_wwdg.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file provides all the WWDG firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - **********************************************************************************/ -#include "ch32f10x_wwdg.h" -#include "ch32f10x_rcc.h" - - -/* WWDG registers bit address in the alias region */ -#define WWDG_OFFSET (WWDG_BASE - PERIPH_BASE) - -/* Alias word address of EWI bit */ -#define CFGR_OFFSET (WWDG_OFFSET + 0x04) -#define EWI_BitNumber 0x09 -#define CFGR_EWI_BB (PERIPH_BB_BASE + (CFGR_OFFSET * 32) + (EWI_BitNumber * 4)) - -/* CTLR register bit mask */ -#define CTLR_WDGA_Set ((uint32_t)0x00000080) - -/* CFGR register bit mask */ -#define CFGR_WDGTB_Mask ((uint32_t)0xFFFFFE7F) -#define CFGR_W_Mask ((uint32_t)0xFFFFFF80) -#define BIT_Mask ((uint8_t)0x7F) - - -/********************************************************************* - * @fn WWDG_DeInit - * - * @brief Deinitializes the WWDG peripheral registers to their default reset values - * - * @return none - */ -void WWDG_DeInit( void ) -{ - RCC_APB1PeriphResetCmd( RCC_APB1Periph_WWDG, ENABLE ); - RCC_APB1PeriphResetCmd( RCC_APB1Periph_WWDG, DISABLE ); -} - -/********************************************************************* - * @fn WWDG_SetPrescaler - * - * @brief Sets the WWDG Prescaler - * - * @param WWDG_Prescaler - specifies the WWDG Prescaler - * WWDG_Prescaler_1 - WWDG counter clock = (PCLK1/4096)/1 - * WWDG_Prescaler_2 - WWDG counter clock = (PCLK1/4096)/2 - * WWDG_Prescaler_4 - WWDG counter clock = (PCLK1/4096)/4 - * WWDG_Prescaler_8 - WWDG counter clock = (PCLK1/4096)/8 - * - * @return none - */ -void WWDG_SetPrescaler( uint32_t WWDG_Prescaler ) -{ - uint32_t tmpreg = 0; - tmpreg = WWDG->CFGR & CFGR_WDGTB_Mask; - tmpreg |= WWDG_Prescaler; - WWDG->CFGR = tmpreg; -} - -/********************************************************************* - * @fn WWDG_SetWindowValue - * - * @brief Sets the WWDG window value - * - * @param WindowValue - specifies the window value to be compared to the - * downcounter,which must be lower than 0x80 - * - * @return none - */ -void WWDG_SetWindowValue( uint8_t WindowValue ) -{ - __IO uint32_t tmpreg = 0; - - tmpreg = WWDG->CFGR & CFGR_W_Mask; - - tmpreg |= WindowValue & ( uint32_t ) BIT_Mask; - - WWDG->CFGR = tmpreg; -} - -/********************************************************************* - * @fn WWDG_EnableIT - * - * @brief Enables the WWDG Early Wakeup interrupt(EWI) - * - * @return none - */ -void WWDG_EnableIT( void ) -{ - *( __IO uint32_t * ) CFGR_EWI_BB = ( uint32_t )ENABLE; -} - -/********************************************************************* - * @fn WWDG_SetCounter - * - * @brief Sets the WWDG counter value - * - * @param Counter - specifies the watchdog counter value,which must be a - * number between 0x40 and 0x7F - * - * @return none - */ -void WWDG_SetCounter( uint8_t Counter ) -{ - WWDG->CTLR = Counter & BIT_Mask; -} - - -/********************************************************************* - * @fn WWDG_Enable - * - * @brief Enables WWDG and load the counter value - * - * @param Counter - specifies the watchdog counter value,which must be a - * number between 0x40 and 0x7F - * @return none - */ -void WWDG_Enable( uint8_t Counter ) -{ - WWDG->CTLR = CTLR_WDGA_Set | Counter; -} - -/********************************************************************* - * @fn WWDG_GetFlagStatus - * - * @brief Checks whether the Early Wakeup interrupt flag is set or not - * - * @return The new state of the Early Wakeup interrupt flag (SET or RESET) - */ -FlagStatus WWDG_GetFlagStatus( void ) -{ - return ( FlagStatus )( WWDG->STATR ); -} - -/********************************************************************* - * @fn WWDG_ClearFlag - * - * @brief Clears Early Wakeup interrupt flag - * - * @return none - */ -void WWDG_ClearFlag( void ) -{ - WWDG->STATR = ( uint32_t )RESET; -} diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/hw_config.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/hw_config.c deleted file mode 100644 index b922e73..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/hw_config.c +++ /dev/null @@ -1,154 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : hw_config.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : USB configuration file. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" -#include "usb_prop.h" -#include "usb_desc.h" -#include "usb_istr.h" -#include "hw_config.h" -#include "usb_pwr.h" -#include "string.h" -#include "stdarg.h" -#include "stdio.h" - -/********************************************************************* - * @fn USBWakeUp_IRQHandler - * - * @brief This function handles USB wake up exception. - * - * @return none - */ -void USBWakeUp_IRQHandler(void) -{ - EXTI_ClearITPendingBit(EXTI_Line18); -} - -/********************************************************************* - * @fn USBWakeUp_IRQHandler - * - * @brief This function handles USB exception. - * - * @return none - */ -void USB_LP_CAN1_RX0_IRQHandler(void) -{ - USB_Istr(); -} - -/********************************************************************* - * @fn Set_USBConfig - * - * @brief Set_USBConfig. - * - * @return none - */ -void Set_USBConfig( ) -{ - - RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE); -} - -/********************************************************************* - * @fn Enter_LowPowerMode - * - * @brief Enter low power mode. - * - * @return none - */ -void Enter_LowPowerMode(void) -{ - printf("usb enter low power mode\r\n"); - bDeviceState=SUSPENDED; -} - -/********************************************************************* - * @fn Leave_LowPowerMode - * - * @brief Leave low power mode. - * - * @return none - */ -void Leave_LowPowerMode(void) -{ - DEVICE_INFO *pInfo=&Device_Info; - printf("leave low power mode\r\n"); - if (pInfo->Current_Configuration!=0)bDeviceState=CONFIGURED; - else bDeviceState = ATTACHED; -} - -/********************************************************************* - * @fn USB_Interrupts_Config - * - * @brief Configrate USB interrupt. - * - * @return none - */ -void USB_Interrupts_Config(void) -{ - NVIC_InitTypeDef NVIC_InitStructure; - EXTI_InitTypeDef EXTI_InitStructure; - - EXTI_ClearITPendingBit(EXTI_Line18); - EXTI_InitStructure.EXTI_Line = EXTI_Line18; - EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; - EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; - EXTI_InitStructure.EXTI_LineCmd = ENABLE; - EXTI_Init(&EXTI_InitStructure); - - NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_Init(&NVIC_InitStructure); - - NVIC_InitStructure.NVIC_IRQChannel = USBWakeUp_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; - NVIC_Init(&NVIC_InitStructure); -} - -/********************************************************************* - * @fn USB_Port_Set - * - * @brief Set USB IO port. - * - * @param NewState - DISABLE or ENABLE. - * Pin_In_IPU - Enables or Disables intenal pull-up resistance. - * - * @return none - */ -void USB_Port_Set(FunctionalState NewState, FunctionalState Pin_In_IPU) -{ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); - - if(NewState) { - _SetCNTR(_GetCNTR()&(~(1<<1))); - GPIOA->CFGHR&=0XFFF00FFF; - GPIOA->OUTDR&=~(3<<11); //PA11/12=0 - GPIOA->CFGHR|=0X00088000; // IPD - } - else - { - _SetCNTR(_GetCNTR()|(1<<1)); - GPIOA->CFGHR&=0XFFF00FFF; - GPIOA->OUTDR&=~(3<<11); //PA11/12=0 - GPIOA->CFGHR|=0X00033000; // LOW - } - - if(Pin_In_IPU) (EXTEN->EXTEN_CTR) |= EXTEN_USBD_PU_EN; - else (EXTEN->EXTEN_CTR) &= ~EXTEN_USBD_PU_EN; -} - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/hw_config.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/hw_config.h deleted file mode 100644 index 2b5ff0a..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/hw_config.h +++ /dev/null @@ -1,36 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : hw_config.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Configuration file for USB. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __HW_CONFIG_H -#define __HW_CONFIG_H - -#include "usb_type.h" - -#ifdef DEBUG -#define printf_usb(X...) printf(X) -#else -#define printf_usb(X...) -#endif - - -void Set_USBConfig(void); -void Enter_LowPowerMode(void); -void Leave_LowPowerMode(void); -void USB_Interrupts_Config(void); -void USB_Port_Set(FunctionalState NewState, FunctionalState Pin_In_IPU); - -#endif /* __HW_CONFIG_H */ - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_conf.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_conf.h deleted file mode 100644 index a9c8141..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_conf.h +++ /dev/null @@ -1,75 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_conf.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB configration firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_CONF_H -#define __USB_CONF_H - - -#define EP_NUM (4) - -/* Buffer Description Table */ -/* buffer table base address */ -/* buffer table base address */ -#define BTABLE_ADDRESS (0x00) - -/* EP0 */ -/* rx/tx buffer base address */ -#define ENDP0_RXADDR (0x40) -#define ENDP0_TXADDR (0x80) - -/* EP1 */ -/* tx buffer base address */ -#define ENDP1_TXADDR (0xC0) -#define ENDP2_TXADDR (0x100) -#define ENDP2_RXADDR (0x110) -#define ENDP3_RXADDR (0x111) - -/* ISTR events */ -/* IMR_MSK */ -/* mask defining which events has to be handled */ -/* by the device application software */ -#define IMR_MSK (CNTR_CTRM | CNTR_WKUPM | CNTR_SUSPM | CNTR_ERRM | CNTR_SOFM \ - | CNTR_ESOFM | CNTR_RESETM ) - -/*#define CTR_CALLBACK*/ -/*#define DOVR_CALLBACK*/ -/*#define ERR_CALLBACK*/ -/*#define WKUP_CALLBACK*/ -/*#define SUSP_CALLBACK*/ -/*#define RESET_CALLBACK*/ -#define SOF_CALLBACK -/*#define ESOF_CALLBACK*/ - - -/* CTR service routines */ -/* associated to defined endpoints */ -#define EP1_IN_Callback NOP_Process -/*#define EP2_IN_Callback NOP_Process*/ -#define EP3_IN_Callback NOP_Process -#define EP4_IN_Callback NOP_Process -#define EP5_IN_Callback NOP_Process -#define EP6_IN_Callback NOP_Process -#define EP7_IN_Callback NOP_Process - -#define EP1_OUT_Callback NOP_Process -/*#define EP2_OUT_Callback NOP_Process*/ -#define EP3_OUT_Callback NOP_Process -#define EP4_OUT_Callback NOP_Process -#define EP5_OUT_Callback NOP_Process -#define EP6_OUT_Callback NOP_Process -#define EP7_OUT_Callback NOP_Process - -#endif /* __USB_CONF_H */ - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_desc.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_desc.c deleted file mode 100644 index d137b19..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_desc.c +++ /dev/null @@ -1,71 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_desc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Descriptors for Virtual Com Port Demo. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" -#include "usb_desc.h" - -/* USB Device Descriptors */ -const uint8_t USBD_DeviceDescriptor[] = { - 0x12, 0x01, 0x10, 0x01,0xFF, 0x80, 0x55, 0x08, - 0x48, 0x43, 0x37, 0x55, - 0x00, 0x01, 0x01, 0x02, 0x03, 0x01, -}; - -/* USB Configration Descriptors */ -const uint8_t USBD_ConfigDescriptor[] = { - 0x09, 0x02, 0x4A, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32, - 0x09, 0x04, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x55, 0x00, - 0x07, 0x05, 0x84, 0x02, 0x40, 0x00, 0x00, - 0x07, 0x05, 0x04, 0x02, 0x40, 0x00, 0x00, - 0x07, 0x05, 0x83, 0x02, 0x40, 0x00, 0x00, - 0x07, 0x05, 0x03, 0x02, 0x40, 0x00, 0x00, - 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, - 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00, - 0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, - 0x07, 0x05, 0x01, 0x02, 0x40, 0x00, 0x00, -}; - -/* USB String Descriptors */ -const uint8_t USBD_StringLangID[USBD_SIZE_STRING_LANGID] = { - USBD_SIZE_STRING_LANGID, - USB_STRING_DESCRIPTOR_TYPE, - 0x09, - 0x04 -}; - -/* USB Device String Vendor */ -const uint8_t USBD_StringVendor[USBD_SIZE_STRING_VENDOR] = { - USBD_SIZE_STRING_VENDOR, - USB_STRING_DESCRIPTOR_TYPE, - 'W', 0, 'C', 0, 'H', 0, 'I', 0, 'C', 0, 'r', 0, 'o', 0, 'e', 0, - 'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0, - 'c', 0, 's', 0 -}; - -/* USB Device String Product */ -const uint8_t USBD_StringProduct[USBD_SIZE_STRING_PRODUCT] = { - USBD_SIZE_STRING_PRODUCT, - USB_STRING_DESCRIPTOR_TYPE, - 'W', 0, 'C', 0, 'H', 0, '3', 0, '2', 0, ' ', 0, 'V', 0, 'i', 0, - 'r', 0, 't', 0, 'u', 0, 'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0, - 'M', 0, ' ', 0, 'P', 0, 'o', 0, 'r', 0, 't', 0, ' ', 0, ' ', 0 -}; - -/* USB Device String Serial */ -uint8_t USBD_StringSerial[USBD_SIZE_STRING_SERIAL] = { - USBD_SIZE_STRING_SERIAL, - USB_STRING_DESCRIPTOR_TYPE, - 'W', 0, 'C', 0, 'H', 0, '3', 0, '2', 0 -}; - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_desc.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_desc.h deleted file mode 100644 index 9547e1c..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_desc.h +++ /dev/null @@ -1,52 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_desc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB description firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_DESC_H -#define __USB_DESC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - - -#define USB_DEVICE_DESCRIPTOR_TYPE 0x01 -#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 -#define USB_STRING_DESCRIPTOR_TYPE 0x03 -#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04 -#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 - -#define USBD_DATA_SIZE 64 -#define USBD_INT_SIZE 8 - -#define USBD_SIZE_DEVICE_DESC 18 -#define USBD_SIZE_CONFIG_DESC 74 -#define USBD_SIZE_STRING_LANGID 4 -#define USBD_SIZE_STRING_VENDOR 38 -#define USBD_SIZE_STRING_PRODUCT 50 -#define USBD_SIZE_STRING_SERIAL 26 - -#define STANDARD_ENDPOINT_DESC_SIZE 0x09 - - -extern const uint8_t USBD_DeviceDescriptor[USBD_SIZE_DEVICE_DESC]; -extern const uint8_t USBD_ConfigDescriptor[USBD_SIZE_CONFIG_DESC]; - -extern const uint8_t USBD_StringLangID [USBD_SIZE_STRING_LANGID]; -extern const uint8_t USBD_StringVendor [USBD_SIZE_STRING_VENDOR]; -extern const uint8_t USBD_StringProduct[USBD_SIZE_STRING_PRODUCT]; -extern uint8_t USBD_StringSerial [USBD_SIZE_STRING_SERIAL]; - -#ifdef __cplusplus -} -#endif - -#endif /* __USB_DESC_H */ diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_endp.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_endp.c deleted file mode 100644 index 79ebd94..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_endp.c +++ /dev/null @@ -1,85 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_endp.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Endpoint routines - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" -#include "usb_desc.h" -#include "usb_mem.h" -#include "hw_config.h" -#include "usb_istr.h" -#include "usb_pwr.h" - -/* Interval between sending IN packets in frame number (1 frame = 1ms) */ -#define IN_FRAME_INTERVAL 5 - -/* Private variables */ -uint8_t USB_Rx_Buffer[USBD_DATA_SIZE]; -u16 USB_Rx_Cnt=0; - -/********************************************************************* - * @fn EP2_IN_Callback - * - * @brief Endpoint 2 IN. - * - * @return none - */ -void EP2_IN_Callback (void) -{ - UserToPMABufferCopy(USB_Rx_Buffer, ENDP2_TXADDR, USB_Rx_Cnt); - SetEPTxCount(ENDP2, USB_Rx_Cnt); - SetEPTxValid(ENDP2); -} - -/********************************************************************* - * @fn EP2_OUT_Callback - * - * @brief Endpoint 2 IN. - * - * @return none - */ -void EP2_OUT_Callback(void) -{ - uint8_t i; - - USB_Rx_Cnt = USB_SIL_Read(EP2_OUT, USB_Rx_Buffer); - - for(i=0;i3)&&((_GetCNTR()&CNTR_FSUSP)==0)) - { - - wCNTR = _GetCNTR(); - - for (i=0;i<8;i++) EP[i] = _GetENDPOINT(i); - - wCNTR|=CNTR_FRES; - _SetCNTR(wCNTR); - - wCNTR&=~CNTR_FRES; - _SetCNTR(wCNTR); - - while((_GetISTR()&ISTR_RESET) == 0); - - _SetISTR((uint16_t)CLR_RESET); - - for (i=0;i<8;i++) - _SetENDPOINT(i, EP[i]); - - esof_counter = 0; - } - } - else - { - esof_counter = 0; - } - - Resume(RESUME_ESOF); - -#ifdef ESOF_CALLBACK - ESOF_Callback(); -#endif - } -#endif -} /* USB_Istr */ - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_istr.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_istr.h deleted file mode 100644 index 52470ab..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_istr.h +++ /dev/null @@ -1,75 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_istr.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file includes the peripherals header files in the - * user application. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_ISTR_H -#define __USB_ISTR_H - -#include "usb_conf.h" - - -void USB_Istr(void); -void EP1_IN_Callback(void); -void EP2_IN_Callback(void); -void EP3_IN_Callback(void); -void EP4_IN_Callback(void); -void EP5_IN_Callback(void); -void EP6_IN_Callback(void); -void EP7_IN_Callback(void); - -void EP1_OUT_Callback(void); -void EP2_OUT_Callback(void); -void EP3_OUT_Callback(void); -void EP4_OUT_Callback(void); -void EP5_OUT_Callback(void); -void EP6_OUT_Callback(void); -void EP7_OUT_Callback(void); - -#ifdef CTR_CALLBACK -void CTR_Callback(void); -#endif - -#ifdef DOVR_CALLBACK -void DOVR_Callback(void); -#endif - -#ifdef ERR_CALLBACK -void ERR_Callback(void); -#endif - -#ifdef WKUP_CALLBACK -void WKUP_Callback(void); -#endif - -#ifdef SUSP_CALLBACK -void SUSP_Callback(void); -#endif - -#ifdef RESET_CALLBACK -void RESET_Callback(void); -#endif - -#ifdef SOF_CALLBACK -void SOF_Callback(void); -#endif - -#ifdef ESOF_CALLBACK -void ESOF_Callback(void); -#endif - - -#endif /*__USB_ISTR_H*/ - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_prop.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_prop.c deleted file mode 100644 index a4694dd..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_prop.c +++ /dev/null @@ -1,338 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_prop.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : All processing related to Virtual Com Port Demo - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" -#include "usb_conf.h" -#include "usb_prop.h" -#include "usb_desc.h" -#include "usb_pwr.h" -#include "hw_config.h" - -uint8_t Request = 0; - -DEVICE Device_Table = -{ - EP_NUM, - 1 -}; - -DEVICE_PROP Device_Property = -{ - USBD_init, - USBD_Reset, - USBD_Status_In, - USBD_Status_Out, - USBD_Data_Setup, - USBD_NoData_Setup, - USBD_Get_Interface_Setting, - USBD_GetDeviceDescriptor, - USBD_GetConfigDescriptor, - USBD_GetStringDescriptor, - 0, - 0x08 -}; - -USER_STANDARD_REQUESTS User_Standard_Requests = -{ - USBD_GetConfiguration, - USBD_SetConfiguration, - USBD_GetInterface, - USBD_SetInterface, - USBD_GetStatus, - USBD_ClearFeature, - USBD_SetEndPointFeature, - USBD_SetDeviceFeature, - USBD_SetDeviceAddress -}; - -ONE_DESCRIPTOR Device_Descriptor = -{ - (uint8_t*)USBD_DeviceDescriptor, - USBD_SIZE_DEVICE_DESC -}; - -ONE_DESCRIPTOR Config_Descriptor = -{ - (uint8_t*)USBD_ConfigDescriptor, - USBD_SIZE_CONFIG_DESC -}; - -ONE_DESCRIPTOR String_Descriptor[4] = -{ - {(uint8_t*)USBD_StringLangID, USBD_SIZE_STRING_LANGID}, - {(uint8_t*)USBD_StringVendor, USBD_SIZE_STRING_VENDOR}, - {(uint8_t*)USBD_StringProduct,USBD_SIZE_STRING_PRODUCT}, - {(uint8_t*)USBD_StringSerial, USBD_SIZE_STRING_SERIAL} -}; - - -/********************************************************************* - * @fn USBD_SetConfiguration. - * - * @brief Update the device state to configured. - * - * @return none - */ -void USBD_SetConfiguration(void) -{ - DEVICE_INFO *pInfo = &Device_Info; - - if (pInfo->Current_Configuration != 0) - { - bDeviceState = CONFIGURED; - } -} - -/********************************************************************* - * @fn USBD_SetDeviceAddress. - * - * @brief Update the device state to addressed. - * - * @return none - */ -void USBD_SetDeviceAddress (void) -{ - bDeviceState = ADDRESSED; -} - -/********************************************************************* - * @fn USBD_Status_In. - * - * @brief USBD Status In Routine. - * - * @return none - */ -void USBD_Status_In(void) -{ - -} - -/********************************************************************* - * @fn USBD_Status_Out - * - * @brief USBD Status OUT Routine. - * - * @return none - */ -void USBD_Status_Out(void) -{ - -} - -/********************************************************************* - * @fn USB_init. - * - * @brief init routine. - * - * @return none - */ -void USBD_init(void) -{ - uint8_t i; - - pInformation->Current_Configuration = 0; - PowerOn(); - for (i=0;i<8;i++) _SetENDPOINT(i,_GetENDPOINT(i) & 0x7F7F & EPREG_MASK);//all clear - _SetISTR((uint16_t)0x00FF);//all clear - USB_SIL_Init(); - bDeviceState = UNCONNECTED; -} - -/********************************************************************* - * @fn USBD_Reset - * - * @brief Virtual_Com_Port Mouse reset routine - * - * @return none - */ -void USBD_Reset(void) -{ - pInformation->Current_Configuration = 0; - pInformation->Current_Feature = USBD_ConfigDescriptor[7]; - pInformation->Current_Interface = 0; - - SetBTABLE(BTABLE_ADDRESS); - - SetEPType(ENDP0, EP_CONTROL); - SetEPTxStatus(ENDP0, EP_TX_STALL); - SetEPRxAddr(ENDP0, ENDP0_RXADDR); - SetEPTxAddr(ENDP0, ENDP0_TXADDR); - Clear_Status_Out(ENDP0); - SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); - SetEPRxValid(ENDP0); - _ClearDTOG_RX(ENDP0); - _ClearDTOG_TX(ENDP0); - - SetEPType(ENDP1, EP_BULK); - SetEPTxAddr(ENDP1, ENDP1_TXADDR); - SetEPTxStatus(ENDP1, EP_TX_NAK); - SetEPRxStatus(ENDP1, EP_RX_DIS); - _ClearDTOG_RX(ENDP1); - _ClearDTOG_TX(ENDP1); - - SetEPType(ENDP2, EP_BULK); - SetEPTxAddr(ENDP2, ENDP2_TXADDR); - SetEPRxAddr(ENDP2, ENDP2_RXADDR); - SetEPRxCount(ENDP2, USBD_DATA_SIZE); - SetEPRxStatus(ENDP2, EP_RX_VALID); - SetEPTxStatus(ENDP2, EP_TX_NAK); - _ClearDTOG_RX(ENDP2); - _ClearDTOG_TX(ENDP2); - - SetEPType(ENDP3, EP_INTERRUPT); - SetEPRxAddr(ENDP3, ENDP3_RXADDR); - SetEPRxCount(ENDP3, USBD_DATA_SIZE); - SetEPRxStatus(ENDP3, EP_RX_VALID); - SetEPTxStatus(ENDP3, EP_TX_DIS); - _ClearDTOG_RX(ENDP3); - _ClearDTOG_TX(ENDP3); - - SetDeviceAddress(0); - - bDeviceState = ATTACHED; -} - -/********************************************************************* - * @fn USBD_GetDeviceDescriptor. - * - * @brief Gets the device descriptor. - * - * @param Length. - * - * @return The address of the device descriptor. - */ -uint8_t *USBD_GetDeviceDescriptor(uint16_t Length) -{ - return Standard_GetDescriptorData(Length, &Device_Descriptor); -} - -/********************************************************************* - * @fn USBD_GetConfigDescriptor. - * - * @brief get the configuration descriptor. - * - * @param Length. - * - * @return The address of the device descriptor. - */ -uint8_t *USBD_GetConfigDescriptor(uint16_t Length) -{ - return Standard_GetDescriptorData(Length, &Config_Descriptor); -} - -/********************************************************************* - * @fn USBD_GetStringDescriptor - * - * @brief Gets the string descriptors according to the needed index - * - * @param Length. - * - * @return The address of the device descriptor. - */ -uint8_t *USBD_GetStringDescriptor(uint16_t Length) -{ - uint8_t wValue0 = pInformation->USBwValue0; - - if (wValue0 > 4) - { - return NULL; - } - else - { - return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]); - } -} - -/********************************************************************* - * @fn USBD_Get_Interface_Setting. - * - * @brief test the interface and the alternate setting according to the - * supported one. - * - * @param Interface - interface number. - * AlternateSetting - Alternate Setting number. - * - * @return The address of the device descriptor. - */ -RESULT USBD_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting) -{ - if (AlternateSetting > 0) - { - return USB_UNSUPPORT; - } - else if (Interface > 1) - { - return USB_UNSUPPORT; - } - - return USB_SUCCESS; -} - -/********************************************************************* - * @fn USBD_Data_Setup - * - * @brief handle the data class specific requests - * - * @param Request Nb. - * - * @return USB_UNSUPPORT or USB_SUCCESS. - */ -RESULT USBD_Data_Setup(uint8_t RequestNo) -{ - - return USB_SUCCESS; -} - -/********************************************************************* - * @fn USBD_NoData_Setup. - * - * @brief handle the no data class specific requests. - * - * @param Request Nb. - * - * @return USB_UNSUPPORT or USB_SUCCESS. - */ -RESULT USBD_NoData_Setup(uint8_t RequestNo) -{ - return USB_SUCCESS; -} - -/********************************************************************* - * @fn Virtual_Com_Port_GetLineCoding. - * - * @brief send the linecoding structure to the PC host. - * - * @param Length. - * - * @return Linecoding structure base address. - */ -uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length) -{ - return 0; -} - -/********************************************************************* - * @fn Virtual_Com_Port_SetLineCoding. - * - * @brief Set the linecoding structure fields. - * - * @param Length. - * - * @return Linecoding structure base address. - */ -uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length) -{ - return 0; -} - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_prop.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_prop.h deleted file mode 100644 index 3f87f2e..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_prop.h +++ /dev/null @@ -1,67 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_prop.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : All processing related to Virtual COM Port Demo (Endpoint 0) - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __usb_prop_H -#define __usb_prop_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -#define USBD_GetConfiguration NOP_Process -//#define USBD_SetConfiguration NOP_Process -#define USBD_GetInterface NOP_Process -#define USBD_SetInterface NOP_Process -#define USBD_GetStatus NOP_Process -#define USBD_ClearFeature NOP_Process -#define USBD_SetEndPointFeature NOP_Process -#define USBD_SetDeviceFeature NOP_Process -//#define USBD_SetDeviceAddress NOP_Process - -#define SEND_ENCAPSULATED_COMMAND 0x00 -#define GET_ENCAPSULATED_RESPONSE 0x01 -#define SET_COMM_FEATURE 0x02 -#define GET_COMM_FEATURE 0x03 -#define CLEAR_COMM_FEATURE 0x04 -#define SET_LINE_CODING 0x20 -#define GET_LINE_CODING 0x21 -#define SET_CONTROL_LINE_STATE 0x22 -#define SEND_BREAK 0x23 - - -void USBD_init(void); -void USBD_Reset(void); -void USBD_SetConfiguration(void); -void USBD_SetDeviceAddress (void); -void USBD_Status_In (void); -void USBD_Status_Out (void); -RESULT USBD_Data_Setup(uint8_t); -RESULT USBD_NoData_Setup(uint8_t); -RESULT USBD_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting); -uint8_t *USBD_GetDeviceDescriptor(uint16_t ); -uint8_t *USBD_GetConfigDescriptor(uint16_t); -uint8_t *USBD_GetStringDescriptor(uint16_t); - -uint8_t *USBD_GetLineCoding(uint16_t Length); -uint8_t *USBD_SetLineCoding(uint16_t Length); - -#ifdef __cplusplus -} -#endif - -#endif /* __usb_prop_H */ - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_pwr.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_pwr.c deleted file mode 100644 index 8a2a6c1..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_pwr.c +++ /dev/null @@ -1,214 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_pwr.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Connection/disconnection & power management - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" -#include "usb_conf.h" -#include "usb_pwr.h" -#include "hw_config.h" - -__IO uint32_t bDeviceState = UNCONNECTED; -__IO bool fSuspendEnabled = TRUE; -__IO uint32_t EP[8]; - -struct -{ - __IO RESUME_STATE eState; - __IO uint8_t bESOFcnt; -} -ResumeS; - -__IO uint32_t remotewakeupon=0; - -/********************************************************************* - * @fn PowerOn - * - * @brief Enable power on. - * - * @return USB_SUCCESS. - */ -RESULT PowerOn(void) -{ - uint16_t wRegVal; - - wRegVal = CNTR_FRES; - _SetCNTR(wRegVal); - wInterrupt_Mask = 0; - _SetCNTR(wInterrupt_Mask); - _SetISTR(0); - wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM; - _SetCNTR(wInterrupt_Mask); - - return USB_SUCCESS; -} - -/********************************************************************* - * @fn PowerOff - * - * @brief handles switch-off conditions - * - * @return USB_SUCCESS. - */ -RESULT PowerOff() -{ - _SetCNTR(CNTR_FRES); - _SetISTR(0); - _SetCNTR(CNTR_FRES + CNTR_PDWN); - - return USB_SUCCESS; -} - -/********************************************************************* - * @fn Suspend - * - * @brief sets suspend mode operating conditions - * - * @return USB_SUCCESS. - */ -void Suspend(void) -{ - uint32_t i =0; - uint16_t wCNTR; - __IO uint32_t savePWR_CR=0; - - wCNTR = _GetCNTR(); - for (i=0;i<8;i++) EP[i] = _GetENDPOINT(i); - - wCNTR|=CNTR_RESETM; - _SetCNTR(wCNTR); - - wCNTR|=CNTR_FRES; - _SetCNTR(wCNTR); - - wCNTR&=~CNTR_FRES; - _SetCNTR(wCNTR); - - while((_GetISTR()&ISTR_RESET) == 0); - - _SetISTR((uint16_t)CLR_RESET); - - for (i=0;i<8;i++) - _SetENDPOINT(i, EP[i]); - - wCNTR |= CNTR_FSUSP; - _SetCNTR(wCNTR); - - wCNTR = _GetCNTR(); - wCNTR |= CNTR_LPMODE; - _SetCNTR(wCNTR); - - Enter_LowPowerMode(); -} - -/********************************************************************* - * @fn Resume_Init - * - * @brief Handles wake-up restoring normal operations - * - * @return USB_SUCCESS. - */ -void Resume_Init(void) -{ - uint16_t wCNTR; - - wCNTR = _GetCNTR(); - wCNTR &= (~CNTR_LPMODE); - _SetCNTR(wCNTR); - Leave_LowPowerMode(); - _SetCNTR(IMR_MSK); -} - -/********************************************************************* - * @fn Resume - * - * @brief This is the state machine handling resume operations and - * timing sequence. The control is based on the Resume structure - * variables and on the ESOF interrupt calling this subroutine - * without changing machine state. - * - * @param a state machine value (RESUME_STATE) - * RESUME_ESOF doesn't change ResumeS.eState allowing - * decrementing of the ESOF counter in different states. - * - * @return none - */ -void Resume(RESUME_STATE eResumeSetVal) -{ - uint16_t wCNTR; - - if (eResumeSetVal != RESUME_ESOF) - { - ResumeS.eState = eResumeSetVal; - } - - switch (ResumeS.eState) - { - case RESUME_EXTERNAL: - if (remotewakeupon ==0) - { - Resume_Init(); - ResumeS.eState = RESUME_OFF; - } - else - { - ResumeS.eState = RESUME_ON; - } - break; - - case RESUME_INTERNAL: - Resume_Init(); - ResumeS.eState = RESUME_START; - remotewakeupon = 1; - break; - - case RESUME_LATER: - ResumeS.bESOFcnt = 2; - ResumeS.eState = RESUME_WAIT; - break; - - case RESUME_WAIT: - ResumeS.bESOFcnt--; - if (ResumeS.bESOFcnt == 0) - ResumeS.eState = RESUME_START; - break; - - case RESUME_START: - wCNTR = _GetCNTR(); - wCNTR |= CNTR_RESUME; - _SetCNTR(wCNTR); - ResumeS.eState = RESUME_ON; - ResumeS.bESOFcnt = 10; - break; - - case RESUME_ON: - ResumeS.bESOFcnt--; - if (ResumeS.bESOFcnt == 0) - { - wCNTR = _GetCNTR(); - wCNTR &= (~CNTR_RESUME); - _SetCNTR(wCNTR); - ResumeS.eState = RESUME_OFF; - remotewakeupon = 0; - } - break; - - case RESUME_OFF: - - case RESUME_ESOF: - - default: - ResumeS.eState = RESUME_OFF; - break; - } -} - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_pwr.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_pwr.h deleted file mode 100644 index dde22d0..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/CONFIG/usb_pwr.h +++ /dev/null @@ -1,60 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_pwr.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Connection/disconnection & power management header - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_PWR_H -#define __USB_PWR_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" -typedef enum _RESUME_STATE -{ - RESUME_EXTERNAL, - RESUME_INTERNAL, - RESUME_LATER, - RESUME_WAIT, - RESUME_START, - RESUME_ON, - RESUME_OFF, - RESUME_ESOF -} RESUME_STATE; - -typedef enum _DEVICE_STATE -{ - UNCONNECTED, - ATTACHED, - POWERED, - SUSPENDED, - ADDRESSED, - CONFIGURED -} DEVICE_STATE; - - -void Suspend(void); -void Resume_Init(void); -void Resume(RESUME_STATE eResumeSetVal); -RESULT PowerOn(void); -RESULT PowerOff(void); - -extern __IO uint32_t bDeviceState; /* USB device status */ -extern __IO bool fSuspendEnabled; /* true when suspend is possible */ - -#ifdef __cplusplus -} -#endif - -#endif /*__USB_PWR_H*/ - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_core.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_core.h deleted file mode 100644 index 6675d12..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_core.h +++ /dev/null @@ -1,189 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_core.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB cor firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_CORE_H -#define __USB_CORE_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - - -typedef enum _CONTROL_STATE -{ - WAIT_SETUP, /* 0 */ - SETTING_UP, /* 1 */ - IN_DATA, /* 2 */ - OUT_DATA, /* 3 */ - LAST_IN_DATA, /* 4 */ - LAST_OUT_DATA, /* 5 */ - WAIT_STATUS_IN, /* 7 */ - WAIT_STATUS_OUT, /* 8 */ - STALLED, /* 9 */ - PAUSE /* 10 */ -} CONTROL_STATE; /* The state machine states of a control pipe */ - -typedef struct OneDescriptor -{ - uint8_t *Descriptor; - uint16_t Descriptor_Size; -} -ONE_DESCRIPTOR, *PONE_DESCRIPTOR; - -typedef enum _RESULT -{ - USB_SUCCESS = 0, /* Process successfully */ - USB_ERROR, - USB_UNSUPPORT, - USB_NOT_READY /* The process has not been finished, endpoint will be - NAK to further request */ -} RESULT; - - -/* Definitions for endpoint level */ -typedef struct _ENDPOINT_INFO -{ - uint16_t Usb_wLength; - uint16_t Usb_wOffset; - uint16_t PacketSize; - uint8_t *(*CopyData)(uint16_t Length); -}ENDPOINT_INFO; - -/* Definitions for device level */ -typedef struct _DEVICE -{ - uint8_t Total_Endpoint; /* Number of endpoints that are used */ - uint8_t Total_Configuration;/* Number of configuration available */ -} -DEVICE; - -typedef union -{ - uint16_t w; - struct BW - { - uint8_t bb1; - uint8_t bb0; - } - bw; -} uint16_t_uint8_t; - -typedef struct _DEVICE_INFO -{ - uint8_t USBbmRequestType; /* bmRequestType */ - uint8_t USBbRequest; /* bRequest */ - uint16_t_uint8_t USBwValues; /* wValue */ - uint16_t_uint8_t USBwIndexs; /* wIndex */ - uint16_t_uint8_t USBwLengths; /* wLength */ - - uint8_t ControlState; /* of type CONTROL_STATE */ - uint8_t Current_Feature; - uint8_t Current_Configuration; /* Selected configuration */ - uint8_t Current_Interface; /* Selected interface of current configuration */ - uint8_t Current_AlternateSetting;/* Selected Alternate Setting of current - interface*/ - - ENDPOINT_INFO Ctrl_Info; -}DEVICE_INFO; - -typedef struct _DEVICE_PROP -{ - void (*Init)(void); /* Initialize the device */ - void (*Reset)(void); /* Reset routine of this device */ - void (*Process_Status_IN)(void); - void (*Process_Status_OUT)(void); - - RESULT (*Class_Data_Setup)(uint8_t RequestNo); - - RESULT (*Class_NoData_Setup)(uint8_t RequestNo); - - RESULT (*Class_Get_Interface_Setting)(uint8_t Interface, uint8_t AlternateSetting); - - uint8_t* (*GetDeviceDescriptor)(uint16_t Length); - uint8_t* (*GetConfigDescriptor)(uint16_t Length); - uint8_t* (*GetStringDescriptor)(uint16_t Length); - - void* RxEP_buffer; - - uint8_t MaxPacketSize; - -}DEVICE_PROP; - -typedef struct _USER_STANDARD_REQUESTS -{ - void (*User_GetConfiguration)(void); /* Get Configuration */ - void (*User_SetConfiguration)(void); /* Set Configuration */ - void (*User_GetInterface)(void); /* Get Interface */ - void (*User_SetInterface)(void); /* Set Interface */ - void (*User_GetStatus)(void); /* Get Status */ - void (*User_ClearFeature)(void); /* Clear Feature */ - void (*User_SetEndPointFeature)(void); /* Set Endpoint Feature */ - void (*User_SetDeviceFeature)(void); /* Set Device Feature */ - void (*User_SetDeviceAddress)(void); /* Set Device Address */ -} -USER_STANDARD_REQUESTS; - - -#define Type_Recipient (pInformation->USBbmRequestType & (REQUEST_TYPE | RECIPIENT)) - -#define Usb_rLength Usb_wLength -#define Usb_rOffset Usb_wOffset - -#define USBwValue USBwValues.w -#define USBwValue0 USBwValues.bw.bb0 -#define USBwValue1 USBwValues.bw.bb1 -#define USBwIndex USBwIndexs.w -#define USBwIndex0 USBwIndexs.bw.bb0 -#define USBwIndex1 USBwIndexs.bw.bb1 -#define USBwLength USBwLengths.w -#define USBwLength0 USBwLengths.bw.bb0 -#define USBwLength1 USBwLengths.bw.bb1 - - -uint8_t Setup0_Process(void); -uint8_t Post0_Process(void); -uint8_t Out0_Process(void); -uint8_t In0_Process(void); - -RESULT Standard_SetEndPointFeature(void); -RESULT Standard_SetDeviceFeature(void); - -uint8_t *Standard_GetConfiguration(uint16_t Length); -RESULT Standard_SetConfiguration(void); -uint8_t *Standard_GetInterface(uint16_t Length); -RESULT Standard_SetInterface(void); -uint8_t *Standard_GetDescriptorData(uint16_t Length, PONE_DESCRIPTOR pDesc); - -uint8_t *Standard_GetStatus(uint16_t Length); -RESULT Standard_ClearFeature(void); -void SetDeviceAddress(uint8_t); -void NOP_Process(void); - -extern DEVICE_PROP Device_Property; -extern USER_STANDARD_REQUESTS User_Standard_Requests; -extern DEVICE Device_Table; -extern DEVICE_INFO Device_Info; - -/* cells saving status during interrupt servicing */ -extern __IO uint16_t SaveRState; -extern __IO uint16_t SaveTState; - -#ifdef __cplusplus -} -#endif - -#endif /* __USB_CORE_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_def.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_def.h deleted file mode 100644 index ddede87..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_def.h +++ /dev/null @@ -1,80 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_def.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB definition firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_DEF_H -#define __USB_DEF_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -typedef enum _RECIPIENT_TYPE -{ - DEVICE_RECIPIENT, - INTERFACE_RECIPIENT, - ENDPOINT_RECIPIENT, - OTHER_RECIPIENT -} RECIPIENT_TYPE; - -typedef enum _STANDARD_REQUESTS -{ - GET_STATUS = 0, - CLEAR_FEATURE, - RESERVED1, - SET_FEATURE, - RESERVED2, - SET_ADDRESS, - GET_DESCRIPTOR, - SET_DESCRIPTOR, - GET_CONFIGURATION, - SET_CONFIGURATION, - GET_INTERFACE, - SET_INTERFACE, - TOTAL_sREQUEST, - SYNCH_FRAME = 12 -} STANDARD_REQUESTS; - -/* Definition of "USBwValue" */ -typedef enum _DESCRIPTOR_TYPE -{ - DEVICE_DESCRIPTOR = 1, - CONFIG_DESCRIPTOR, - STRING_DESCRIPTOR, - INTERFACE_DESCRIPTOR, - ENDPOINT_DESCRIPTOR -} DESCRIPTOR_TYPE; - -/* Feature selector of a SET_FEATURE or CLEAR_FEATURE */ -typedef enum _FEATURE_SELECTOR -{ - ENDPOINT_STALL, - DEVICE_REMOTE_WAKEUP -} FEATURE_SELECTOR; - -/* Definition of "USBbmRequestType" */ -#define REQUEST_TYPE 0x60 -#define STANDARD_REQUEST 0x00 -#define CLASS_REQUEST 0x20 -#define VENDOR_REQUEST 0x40 -#define RECIPIENT 0x1F - -#ifdef __cplusplus -} -#endif - -#endif /* __USB_DEF_H */ - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_init.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_init.h deleted file mode 100644 index b1c4c17..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_init.h +++ /dev/null @@ -1,40 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_init.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB Initialization firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_INIT_H -#define __USB_INIT_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - - -void USB_Init(void); -extern uint8_t EPindex; -extern DEVICE_INFO* pInformation; -extern DEVICE_PROP* pProperty; -extern USER_STANDARD_REQUESTS *pUser_Standard_Requests; -extern uint16_t SaveState ; -extern uint16_t wInterrupt_Mask; - -#ifdef __cplusplus -} - -#endif - - -#endif /* __USB_INIT_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_int.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_int.h deleted file mode 100644 index 700ffa1..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_int.h +++ /dev/null @@ -1,23 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_int.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB Endpoint firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_INT_H -#define __USB_INT_H - -void CTR_LP(void); -void CTR_HP(void); - -#endif /* __USB_INT_H */ - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_lib.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_lib.h deleted file mode 100644 index 1463206..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_lib.h +++ /dev/null @@ -1,28 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_lib.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Library configuration file for USB. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_LIB_H -#define __USB_LIB_H - -#include "hw_config.h" -#include "usb_type.h" -#include "usb_regs.h" -#include "usb_def.h" -#include "usb_core.h" -#include "usb_init.h" -#include "usb_sil.h" -#include "usb_mem.h" -#include "usb_int.h" -#include "ch32f10x_usb.h" - -#endif /* __USB_LIB_H */ - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_mem.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_mem.h deleted file mode 100644 index 11a9ee5..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_mem.h +++ /dev/null @@ -1,34 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_mem.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB Initialization firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_MEM_H -#define __USB_MEM_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes); -void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes); - - -#ifdef __cplusplus -} -#endif - -#endif /*__USB_MEM_H*/ - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_regs.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_regs.h deleted file mode 100644 index 6e36d40..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_regs.h +++ /dev/null @@ -1,641 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_regs.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB cell registers firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_REGS_H -#define __USB_REGS_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -typedef enum _EP_DBUF_DIR -{ - EP_DBUF_ERR, - EP_DBUF_OUT, - EP_DBUF_IN -}EP_DBUF_DIR; - -/* endpoint buffer number */ -enum EP_BUF_NUM -{ - EP_NOBUF, - EP_BUF0, - EP_BUF1 -}; - -#define RegBase (0x40005C00L) -#define PMAAddr (0x40006000L) - -/******************************************************************************/ -/* General registers */ -/******************************************************************************/ - -/* Control register */ -#define CNTLR ((__IO unsigned *)(RegBase + 0x40)) -/* Interrupt status register */ -#define ISTR ((__IO unsigned *)(RegBase + 0x44)) -/* Frame number register */ -#define FNR ((__IO unsigned *)(RegBase + 0x48)) -/* Device address register */ -#define DADDR ((__IO unsigned *)(RegBase + 0x4C)) -/* Buffer Table address register */ -#define BTABLE ((__IO unsigned *)(RegBase + 0x50)) -/******************************************************************************/ -/* Endpoint registers */ -/******************************************************************************/ -#define EP0REG ((__IO unsigned *)(RegBase)) /* endpoint 0 register address */ - -/* Endpoint Addresses (w/direction) */ -#define EP0_OUT ((uint8_t)0x00) -#define EP0_IN ((uint8_t)0x80) -#define EP1_OUT ((uint8_t)0x01) -#define EP1_IN ((uint8_t)0x81) -#define EP2_OUT ((uint8_t)0x02) -#define EP2_IN ((uint8_t)0x82) -#define EP3_OUT ((uint8_t)0x03) -#define EP3_IN ((uint8_t)0x83) -#define EP4_OUT ((uint8_t)0x04) -#define EP4_IN ((uint8_t)0x84) -#define EP5_OUT ((uint8_t)0x05) -#define EP5_IN ((uint8_t)0x85) -#define EP6_OUT ((uint8_t)0x06) -#define EP6_IN ((uint8_t)0x86) -#define EP7_OUT ((uint8_t)0x07) -#define EP7_IN ((uint8_t)0x87) - -/* endpoints enumeration */ -#define ENDP0 ((uint8_t)0) -#define ENDP1 ((uint8_t)1) -#define ENDP2 ((uint8_t)2) -#define ENDP3 ((uint8_t)3) -#define ENDP4 ((uint8_t)4) -#define ENDP5 ((uint8_t)5) -#define ENDP6 ((uint8_t)6) -#define ENDP7 ((uint8_t)7) - -/******************************************************************************/ -/* ISTR interrupt events */ -/******************************************************************************/ -#define ISTR_CTR (0x8000) /* Correct TRansfer (clear-only bit) */ -#define ISTR_DOVR (0x4000) /* DMA OVeR/underrun (clear-only bit) */ -#define ISTR_ERR (0x2000) /* ERRor (clear-only bit) */ -#define ISTR_WKUP (0x1000) /* WaKe UP (clear-only bit) */ -#define ISTR_SUSP (0x0800) /* SUSPend (clear-only bit) */ -#define ISTR_RESET (0x0400) /* RESET (clear-only bit) */ -#define ISTR_SOF (0x0200) /* Start Of Frame (clear-only bit) */ -#define ISTR_ESOF (0x0100) /* Expected Start Of Frame (clear-only bit) */ - - -#define ISTR_DIR (0x0010) /* DIRection of transaction (read-only bit) */ -#define ISTR_EP_ID (0x000F) /* EndPoint IDentifier (read-only bit) */ - -#define CLR_CTR (~ISTR_CTR) /* clear Correct TRansfer bit */ -#define CLR_DOVR (~ISTR_DOVR) /* clear DMA OVeR/underrun bit*/ -#define CLR_ERR (~ISTR_ERR) /* clear ERRor bit */ -#define CLR_WKUP (~ISTR_WKUP) /* clear WaKe UP bit */ -#define CLR_SUSP (~ISTR_SUSP) /* clear SUSPend bit */ -#define CLR_RESET (~ISTR_RESET) /* clear RESET bit */ -#define CLR_SOF (~ISTR_SOF) /* clear Start Of Frame bit */ -#define CLR_ESOF (~ISTR_ESOF) /* clear Expected Start Of Frame bit */ - -/******************************************************************************/ -/* CNTR control register bits definitions */ -/******************************************************************************/ -#define CNTR_CTRM (0x8000) /* Correct TRansfer Mask */ -#define CNTR_DOVRM (0x4000) /* DMA OVeR/underrun Mask */ -#define CNTR_ERRM (0x2000) /* ERRor Mask */ -#define CNTR_WKUPM (0x1000) /* WaKe UP Mask */ -#define CNTR_SUSPM (0x0800) /* SUSPend Mask */ -#define CNTR_RESETM (0x0400) /* RESET Mask */ -#define CNTR_SOFM (0x0200) /* Start Of Frame Mask */ -#define CNTR_ESOFM (0x0100) /* Expected Start Of Frame Mask */ - - -#define CNTR_RESUME (0x0010) /* RESUME request */ -#define CNTR_FSUSP (0x0008) /* Force SUSPend */ -#define CNTR_LPMODE (0x0004) /* Low-power MODE */ -#define CNTR_PDWN (0x0002) /* Power DoWN */ -#define CNTR_FRES (0x0001) /* Force USB RESet */ - -/******************************************************************************/ -/* FNR Frame Number Register bit definitions */ -/******************************************************************************/ -#define FNR_RXDP (0x8000) /* status of D+ data line */ -#define FNR_RXDM (0x4000) /* status of D- data line */ -#define FNR_LCK (0x2000) /* LoCKed */ -#define FNR_LSOF (0x1800) /* Lost SOF */ -#define FNR_FN (0x07FF) /* Frame Number */ -/******************************************************************************/ -/* DADDR Device ADDRess bit definitions */ -/******************************************************************************/ -#define DADDR_EF (0x80) -#define DADDR_ADD (0x7F) -/******************************************************************************/ -/* Endpoint register */ -/******************************************************************************/ -/* bit positions */ -#define EP_CTR_RX (0x8000) /* EndPoint Correct TRansfer RX */ -#define EP_DTOG_RX (0x4000) /* EndPoint Data TOGGLE RX */ -#define EPRX_STAT (0x3000) /* EndPoint RX STATus bit field */ -#define EP_SETUP (0x0800) /* EndPoint SETUP */ -#define EP_T_FIELD (0x0600) /* EndPoint TYPE */ -#define EP_KIND (0x0100) /* EndPoint KIND */ -#define EP_CTR_TX (0x0080) /* EndPoint Correct TRansfer TX */ -#define EP_DTOG_TX (0x0040) /* EndPoint Data TOGGLE TX */ -#define EPTX_STAT (0x0030) /* EndPoint TX STATus bit field */ -#define EPADDR_FIELD (0x000F) /* EndPoint ADDRess FIELD */ - -/* EndPoint REGister MASK (no toggle fields) */ -#define EPREG_MASK (EP_CTR_RX|EP_SETUP|EP_T_FIELD|EP_KIND|EP_CTR_TX|EPADDR_FIELD) - -/* EP_TYPE[1:0] EndPoint TYPE */ -#define EP_TYPE_MASK (0x0600) /* EndPoint TYPE Mask */ -#define EP_BULK (0x0000) /* EndPoint BULK */ -#define EP_CONTROL (0x0200) /* EndPoint CONTROL */ -#define EP_ISOCHRONOUS (0x0400) /* EndPoint ISOCHRONOUS */ -#define EP_INTERRUPT (0x0600) /* EndPoint INTERRUPT */ -#define EP_T_MASK (~EP_T_FIELD & EPREG_MASK) - - -/* EP_KIND EndPoint KIND */ -#define EPKIND_MASK (~EP_KIND & EPREG_MASK) - -/* STAT_TX[1:0] STATus for TX transfer */ -#define EP_TX_DIS (0x0000) /* EndPoint TX DISabled */ -#define EP_TX_STALL (0x0010) /* EndPoint TX STALLed */ -#define EP_TX_NAK (0x0020) /* EndPoint TX NAKed */ -#define EP_TX_VALID (0x0030) /* EndPoint TX VALID */ -#define EPTX_DTOG1 (0x0010) /* EndPoint TX Data TOGgle bit1 */ -#define EPTX_DTOG2 (0x0020) /* EndPoint TX Data TOGgle bit2 */ -#define EPTX_DTOGMASK (EPTX_STAT|EPREG_MASK) - -/* STAT_RX[1:0] STATus for RX transfer */ -#define EP_RX_DIS (0x0000) /* EndPoint RX DISabled */ -#define EP_RX_STALL (0x1000) /* EndPoint RX STALLed */ -#define EP_RX_NAK (0x2000) /* EndPoint RX NAKed */ -#define EP_RX_VALID (0x3000) /* EndPoint RX VALID */ -#define EPRX_DTOG1 (0x1000) /* EndPoint RX Data TOGgle bit1 */ -#define EPRX_DTOG2 (0x2000) /* EndPoint RX Data TOGgle bit1 */ -#define EPRX_DTOGMASK (EPRX_STAT|EPREG_MASK) - -/* SetCNTR */ -#define _SetCNTR(wRegValue) (*CNTLR = (uint16_t)wRegValue) - -/* SetISTR */ -#define _SetISTR(wRegValue) (*ISTR = (uint16_t)wRegValue) - -/* SetDADDR */ -#define _SetDADDR(wRegValue) (*DADDR = (uint16_t)wRegValue) - -/* SetBTABLE */ -#define _SetBTABLE(wRegValue)(*BTABLE = (uint16_t)(wRegValue & 0xFFF8)) - -/* GetCNTR */ -#define _GetCNTR() ((uint16_t) *CNTLR) - -/* GetISTR */ -#define _GetISTR() ((uint16_t) *ISTR) - -/* GetFNR */ -#define _GetFNR() ((uint16_t) *FNR) - -/* GetDADDR */ -#define _GetDADDR() ((uint16_t) *DADDR) - -/* GetBTABLE */ -#define _GetBTABLE() ((uint16_t) *BTABLE) - -/* SetENDPOINT */ -#define _SetENDPOINT(bEpNum,wRegValue) (*(EP0REG + bEpNum)= \ - (uint16_t)wRegValue) - -/* GetENDPOINT */ -#define _GetENDPOINT(bEpNum) ((uint16_t)(*(EP0REG + bEpNum))) - -#define _SetEPType(bEpNum,wType) (_SetENDPOINT(bEpNum,\ - ((_GetENDPOINT(bEpNum) & EP_T_MASK) | wType ))) - -#define _GetEPType(bEpNum) (_GetENDPOINT(bEpNum) & EP_T_FIELD) - -/******************************************************************************* -* Macro Name : SetEPTxStatus -* Description : sets the status for tx transfer (bits STAT_TX[1:0]). -* Input : bEpNum: Endpoint Number. -* wState: new state -* Return : None. -*******************************************************************************/ -#define _SetEPTxStatus(bEpNum,wState) {\ - register uint16_t _wRegVal; \ - _wRegVal = _GetENDPOINT(bEpNum) & EPTX_DTOGMASK;\ - /* toggle first bit ? */ \ - if((EPTX_DTOG1 & wState)!= 0) \ - _wRegVal ^= EPTX_DTOG1; \ - /* toggle second bit ? */ \ - if((EPTX_DTOG2 & wState)!= 0) \ - _wRegVal ^= EPTX_DTOG2; \ - _SetENDPOINT(bEpNum, (_wRegVal | EP_CTR_RX|EP_CTR_TX)); \ - } /* _SetEPTxStatus */ - -/******************************************************************************* -* Macro Name : SetEPRxStatus -* Description : sets the status for rx transfer (bits STAT_TX[1:0]) -* Input : bEpNum: Endpoint Number. -* wState: new state. -* Return : None. -*******************************************************************************/ -#define _SetEPRxStatus(bEpNum,wState) {\ - register uint16_t _wRegVal; \ - \ - _wRegVal = _GetENDPOINT(bEpNum) & EPRX_DTOGMASK;\ - /* toggle first bit ? */ \ - if((EPRX_DTOG1 & wState)!= 0) \ - _wRegVal ^= EPRX_DTOG1; \ - /* toggle second bit ? */ \ - if((EPRX_DTOG2 & wState)!= 0) \ - _wRegVal ^= EPRX_DTOG2; \ - _SetENDPOINT(bEpNum, (_wRegVal | EP_CTR_RX|EP_CTR_TX)); \ - } /* _SetEPRxStatus */ - -/******************************************************************************* -* Macro Name : SetEPRxTxStatus -* Description : sets the status for rx & tx (bits STAT_TX[1:0] & STAT_RX[1:0]) -* Input : bEpNum: Endpoint Number. -* wStaterx: new state. -* wStatetx: new state. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPRxTxStatus(bEpNum,wStaterx,wStatetx) {\ - register uint32_t _wRegVal; \ - \ - _wRegVal = _GetENDPOINT(bEpNum) & (EPRX_DTOGMASK |EPTX_STAT) ;\ - /* toggle first bit ? */ \ - if((EPRX_DTOG1 & wStaterx)!= 0) \ - _wRegVal ^= EPRX_DTOG1; \ - /* toggle second bit ? */ \ - if((EPRX_DTOG2 & wStaterx)!= 0) \ - _wRegVal ^= EPRX_DTOG2; \ - /* toggle first bit ? */ \ - if((EPTX_DTOG1 & wStatetx)!= 0) \ - _wRegVal ^= EPTX_DTOG1; \ - /* toggle second bit ? */ \ - if((EPTX_DTOG2 & wStatetx)!= 0) \ - _wRegVal ^= EPTX_DTOG2; \ - _SetENDPOINT(bEpNum, _wRegVal | EP_CTR_RX|EP_CTR_TX); \ - } /* _SetEPRxTxStatus */ - -/******************************************************************************* -* Macro Name : GetEPTxStatus / GetEPRxStatus -* Description : gets the status for tx/rx transfer (bits STAT_TX[1:0] -* /STAT_RX[1:0]) -* Input : bEpNum: Endpoint Number. -* Return : status . -*******************************************************************************/ -#define _GetEPTxStatus(bEpNum) ((uint16_t)_GetENDPOINT(bEpNum) & EPTX_STAT) - -#define _GetEPRxStatus(bEpNum) ((uint16_t)_GetENDPOINT(bEpNum) & EPRX_STAT) - -/******************************************************************************* -* Macro Name : SetEPTxValid / SetEPRxValid -* Description : sets directly the VALID tx/rx-status into the enpoint register -* Input : bEpNum: Endpoint Number. -* Return : None. -*******************************************************************************/ -#define _SetEPTxValid(bEpNum) (_SetEPTxStatus(bEpNum, EP_TX_VALID)) - -#define _SetEPRxValid(bEpNum) (_SetEPRxStatus(bEpNum, EP_RX_VALID)) - -/******************************************************************************* -* Macro Name : GetTxStallStatus / GetRxStallStatus. -* Description : checks stall condition in an endpoint. -* Input : bEpNum: Endpoint Number. -* Return : TRUE = endpoint in stall condition. -*******************************************************************************/ -#define _GetTxStallStatus(bEpNum) (_GetEPTxStatus(bEpNum) \ - == EP_TX_STALL) -#define _GetRxStallStatus(bEpNum) (_GetEPRxStatus(bEpNum) \ - == EP_RX_STALL) - -/******************************************************************************* -* Macro Name : SetEP_KIND / ClearEP_KIND. -* Description : set & clear EP_KIND bit. -* Input : bEpNum: Endpoint Number. -* Return : None. -*******************************************************************************/ -#define _SetEP_KIND(bEpNum) (_SetENDPOINT(bEpNum, \ - (EP_CTR_RX|EP_CTR_TX|((_GetENDPOINT(bEpNum) | EP_KIND) & EPREG_MASK)))) -#define _ClearEP_KIND(bEpNum) (_SetENDPOINT(bEpNum, \ - (EP_CTR_RX|EP_CTR_TX|(_GetENDPOINT(bEpNum) & EPKIND_MASK)))) - -/******************************************************************************* -* Macro Name : Set_Status_Out / Clear_Status_Out. -* Description : Sets/clears directly STATUS_OUT bit in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Return : None. -*******************************************************************************/ -#define _Set_Status_Out(bEpNum) _SetEP_KIND(bEpNum) -#define _Clear_Status_Out(bEpNum) _ClearEP_KIND(bEpNum) - -/******************************************************************************* -* Macro Name : SetEPDoubleBuff / ClearEPDoubleBuff. -* Description : Sets/clears directly EP_KIND bit in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Return : None. -*******************************************************************************/ -#define _SetEPDoubleBuff(bEpNum) _SetEP_KIND(bEpNum) -#define _ClearEPDoubleBuff(bEpNum) _ClearEP_KIND(bEpNum) - -/******************************************************************************* -* Macro Name : ClearEP_CTR_RX / ClearEP_CTR_TX. -* Description : Clears bit CTR_RX / CTR_TX in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Return : None. -*******************************************************************************/ -#define _ClearEP_CTR_RX(bEpNum) (_SetENDPOINT(bEpNum,\ - _GetENDPOINT(bEpNum) & 0x7FFF & EPREG_MASK)) -#define _ClearEP_CTR_TX(bEpNum) (_SetENDPOINT(bEpNum,\ - _GetENDPOINT(bEpNum) & 0xFF7F & EPREG_MASK)) - -/******************************************************************************* -* Macro Name : ToggleDTOG_RX / ToggleDTOG_TX . -* Description : Toggles DTOG_RX / DTOG_TX bit in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Return : None. -*******************************************************************************/ -#define _ToggleDTOG_RX(bEpNum) (_SetENDPOINT(bEpNum, \ - EP_CTR_RX|EP_CTR_TX|EP_DTOG_RX | (_GetENDPOINT(bEpNum) & EPREG_MASK))) -#define _ToggleDTOG_TX(bEpNum) (_SetENDPOINT(bEpNum, \ - EP_CTR_RX|EP_CTR_TX|EP_DTOG_TX | (_GetENDPOINT(bEpNum) & EPREG_MASK))) - -/******************************************************************************* -* Macro Name : ClearDTOG_RX / ClearDTOG_TX. -* Description : Clears DTOG_RX / DTOG_TX bit in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Return : None. -*******************************************************************************/ -#define _ClearDTOG_RX(bEpNum) if((_GetENDPOINT(bEpNum) & EP_DTOG_RX) != 0)\ - _ToggleDTOG_RX(bEpNum) -#define _ClearDTOG_TX(bEpNum) if((_GetENDPOINT(bEpNum) & EP_DTOG_TX) != 0)\ - _ToggleDTOG_TX(bEpNum) -/******************************************************************************* -* Macro Name : SetEPAddress. -* Description : Sets address in an endpoint register. -* Input : bEpNum: Endpoint Number. -* bAddr: Address. -* Return : None. -*******************************************************************************/ -#define _SetEPAddress(bEpNum,bAddr) _SetENDPOINT(bEpNum,\ - EP_CTR_RX|EP_CTR_TX|(_GetENDPOINT(bEpNum) & EPREG_MASK) | bAddr) - -/******************************************************************************* -* Macro Name : GetEPAddress. -* Description : Gets address in an endpoint register. -* Input : bEpNum: Endpoint Number. -* Return : None. -*******************************************************************************/ -#define _GetEPAddress(bEpNum) ((uint8_t)(_GetENDPOINT(bEpNum) & EPADDR_FIELD)) - -#define _pEPTxAddr(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8 )*2 + PMAAddr)) -#define _pEPTxCount(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8+2)*2 + PMAAddr)) -#define _pEPRxAddr(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8+4)*2 + PMAAddr)) -#define _pEPRxCount(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8+6)*2 + PMAAddr)) - -/******************************************************************************* -* Macro Name : SetEPTxAddr / SetEPRxAddr. -* Description : sets address of the tx/rx buffer. -* Input : bEpNum: Endpoint Number. -* wAddr: address to be set (must be word aligned). -* Return : None. -*******************************************************************************/ -#define _SetEPTxAddr(bEpNum,wAddr) (*_pEPTxAddr(bEpNum) = ((wAddr >> 1) << 1)) -#define _SetEPRxAddr(bEpNum,wAddr) (*_pEPRxAddr(bEpNum) = ((wAddr >> 1) << 1)) - -/******************************************************************************* -* Macro Name : GetEPTxAddr / GetEPRxAddr. -* Description : Gets address of the tx/rx buffer. -* Input : bEpNum: Endpoint Number. -* Return : address of the buffer. -*******************************************************************************/ -#define _GetEPTxAddr(bEpNum) ((uint16_t)*_pEPTxAddr(bEpNum)) -#define _GetEPRxAddr(bEpNum) ((uint16_t)*_pEPRxAddr(bEpNum)) - -/******************************************************************************* -* Macro Name : SetEPCountRxReg. -* Description : Sets counter of rx buffer with no. of blocks. -* Input : pdwReg: pointer to counter. -* wCount: Counter. -* Return : None. -*******************************************************************************/ -#define _BlocksOf32(dwReg,wCount,wNBlocks) {\ - wNBlocks = wCount >> 5;\ - if((wCount & 0x1f) == 0)\ - wNBlocks--;\ - *pdwReg = (uint32_t)((wNBlocks << 10) | 0x8000);\ - }/* _BlocksOf32 */ - -#define _BlocksOf2(dwReg,wCount,wNBlocks) {\ - wNBlocks = wCount >> 1;\ - if((wCount & 0x1) != 0)\ - wNBlocks++;\ - *pdwReg = (uint32_t)(wNBlocks << 10);\ - }/* _BlocksOf2 */ - -#define _SetEPCountRxReg(dwReg,wCount) {\ - uint16_t wNBlocks;\ - if(wCount > 62){_BlocksOf32(dwReg,wCount,wNBlocks);}\ - else {_BlocksOf2(dwReg,wCount,wNBlocks);}\ - }/* _SetEPCountRxReg */ - - - -#define _SetEPRxDblBuf0Count(bEpNum,wCount) {\ - uint32_t *pdwReg = _pEPTxCount(bEpNum); \ - _SetEPCountRxReg(pdwReg, wCount);\ - } - -/******************************************************************************* -* Macro Name : SetEPTxCount / SetEPRxCount. -* Description : sets counter for the tx/rx buffer. -* Input : bEpNum: endpoint number. -* wCount: Counter value. -* Return : None. -*******************************************************************************/ -#define _SetEPTxCount(bEpNum,wCount) (*_pEPTxCount(bEpNum) = wCount) -#define _SetEPRxCount(bEpNum,wCount) {\ - uint32_t *pdwReg = _pEPRxCount(bEpNum); \ - _SetEPCountRxReg(pdwReg, wCount);\ - } - -/******************************************************************************* -* Macro Name : GetEPTxCount / GetEPRxCount. -* Description : gets counter of the tx buffer. -* Input : bEpNum: endpoint number. -* Return : Counter value. -*******************************************************************************/ -#define _GetEPTxCount(bEpNum)((uint16_t)(*_pEPTxCount(bEpNum)) & 0x3ff) -#define _GetEPRxCount(bEpNum)((uint16_t)(*_pEPRxCount(bEpNum)) & 0x3ff) - -/******************************************************************************* -* Macro Name : SetEPDblBuf0Addr / SetEPDblBuf1Addr. -* Description : Sets buffer 0/1 address in a double buffer endpoint. -* Input : bEpNum: endpoint number. -* : wBuf0Addr: buffer 0 address. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPDblBuf0Addr(bEpNum,wBuf0Addr) {_SetEPTxAddr(bEpNum, wBuf0Addr);} -#define _SetEPDblBuf1Addr(bEpNum,wBuf1Addr) {_SetEPRxAddr(bEpNum, wBuf1Addr);} - -/******************************************************************************* -* Macro Name : SetEPDblBuffAddr. -* Description : Sets addresses in a double buffer endpoint. -* Input : bEpNum: endpoint number. -* : wBuf0Addr: buffer 0 address. -* : wBuf1Addr = buffer 1 address. -* Return : None. -*******************************************************************************/ -#define _SetEPDblBuffAddr(bEpNum,wBuf0Addr,wBuf1Addr) { \ - _SetEPDblBuf0Addr(bEpNum, wBuf0Addr);\ - _SetEPDblBuf1Addr(bEpNum, wBuf1Addr);\ - } /* _SetEPDblBuffAddr */ - -/******************************************************************************* -* Macro Name : GetEPDblBuf0Addr / GetEPDblBuf1Addr. -* Description : Gets buffer 0/1 address of a double buffer endpoint. -* Input : bEpNum: endpoint number. -* Return : None. -*******************************************************************************/ -#define _GetEPDblBuf0Addr(bEpNum) (_GetEPTxAddr(bEpNum)) -#define _GetEPDblBuf1Addr(bEpNum) (_GetEPRxAddr(bEpNum)) - -/******************************************************************************* -* Macro Name : SetEPDblBuffCount / SetEPDblBuf0Count / SetEPDblBuf1Count. -* Description : Gets buffer 0/1 address of a double buffer endpoint. -* Input : bEpNum: endpoint number. -* : bDir: endpoint dir EP_DBUF_OUT = OUT -* EP_DBUF_IN = IN -* : wCount: Counter value -* Return : None. -*******************************************************************************/ -#define _SetEPDblBuf0Count(bEpNum, bDir, wCount) { \ - if(bDir == EP_DBUF_OUT)\ - /* OUT endpoint */ \ - {_SetEPRxDblBuf0Count(bEpNum,wCount);} \ - else if(bDir == EP_DBUF_IN)\ - /* IN endpoint */ \ - *_pEPTxCount(bEpNum) = (uint32_t)wCount; \ - } /* SetEPDblBuf0Count*/ - -#define _SetEPDblBuf1Count(bEpNum, bDir, wCount) { \ - if(bDir == EP_DBUF_OUT)\ - /* OUT endpoint */ \ - {_SetEPRxCount(bEpNum,wCount);}\ - else if(bDir == EP_DBUF_IN)\ - /* IN endpoint */\ - *_pEPRxCount(bEpNum) = (uint32_t)wCount; \ - } /* SetEPDblBuf1Count */ - -#define _SetEPDblBuffCount(bEpNum, bDir, wCount) {\ - _SetEPDblBuf0Count(bEpNum, bDir, wCount); \ - _SetEPDblBuf1Count(bEpNum, bDir, wCount); \ - } /* _SetEPDblBuffCount */ - -/******************************************************************************* -* Macro Name : GetEPDblBuf0Count / GetEPDblBuf1Count. -* Description : Gets buffer 0/1 rx/tx counter for double buffering. -* Input : bEpNum: endpoint number. -* Return : None. -*******************************************************************************/ -#define _GetEPDblBuf0Count(bEpNum) (_GetEPTxCount(bEpNum)) -#define _GetEPDblBuf1Count(bEpNum) (_GetEPRxCount(bEpNum)) - - -extern __IO uint16_t wIstr; /* ISTR register last read value */ - - -void SetCNTR(uint16_t /*wRegValue*/); -void SetISTR(uint16_t /*wRegValue*/); -void SetDADDR(uint16_t /*wRegValue*/); -void SetBTABLE(uint16_t /*wRegValue*/); -void SetBTABLE(uint16_t /*wRegValue*/); -uint16_t GetCNTR(void); -uint16_t GetISTR(void); -uint16_t GetFNR(void); -uint16_t GetDADDR(void); -uint16_t GetBTABLE(void); -void SetENDPOINT(uint8_t /*bEpNum*/, uint16_t /*wRegValue*/); -uint16_t GetENDPOINT(uint8_t /*bEpNum*/); -void SetEPType(uint8_t /*bEpNum*/, uint16_t /*wType*/); -uint16_t GetEPType(uint8_t /*bEpNum*/); -void SetEPTxStatus(uint8_t /*bEpNum*/, uint16_t /*wState*/); -void SetEPRxStatus(uint8_t /*bEpNum*/, uint16_t /*wState*/); -void SetDouBleBuffEPStall(uint8_t /*bEpNum*/, uint8_t bDir); -uint16_t GetEPTxStatus(uint8_t /*bEpNum*/); -uint16_t GetEPRxStatus(uint8_t /*bEpNum*/); -void SetEPTxValid(uint8_t /*bEpNum*/); -void SetEPRxValid(uint8_t /*bEpNum*/); -uint16_t GetTxStallStatus(uint8_t /*bEpNum*/); -uint16_t GetRxStallStatus(uint8_t /*bEpNum*/); -void SetEP_KIND(uint8_t /*bEpNum*/); -void ClearEP_KIND(uint8_t /*bEpNum*/); -void Set_Status_Out(uint8_t /*bEpNum*/); -void Clear_Status_Out(uint8_t /*bEpNum*/); -void SetEPDoubleBuff(uint8_t /*bEpNum*/); -void ClearEPDoubleBuff(uint8_t /*bEpNum*/); -void ClearEP_CTR_RX(uint8_t /*bEpNum*/); -void ClearEP_CTR_TX(uint8_t /*bEpNum*/); -void ToggleDTOG_RX(uint8_t /*bEpNum*/); -void ToggleDTOG_TX(uint8_t /*bEpNum*/); -void ClearDTOG_RX(uint8_t /*bEpNum*/); -void ClearDTOG_TX(uint8_t /*bEpNum*/); -void SetEPAddress(uint8_t /*bEpNum*/, uint8_t /*bAddr*/); -uint8_t GetEPAddress(uint8_t /*bEpNum*/); -void SetEPTxAddr(uint8_t /*bEpNum*/, uint16_t /*wAddr*/); -void SetEPRxAddr(uint8_t /*bEpNum*/, uint16_t /*wAddr*/); -uint16_t GetEPTxAddr(uint8_t /*bEpNum*/); -uint16_t GetEPRxAddr(uint8_t /*bEpNum*/); -void SetEPCountRxReg(uint32_t * /*pdwReg*/, uint16_t /*wCount*/); -void SetEPTxCount(uint8_t /*bEpNum*/, uint16_t /*wCount*/); -void SetEPRxCount(uint8_t /*bEpNum*/, uint16_t /*wCount*/); -uint16_t GetEPTxCount(uint8_t /*bEpNum*/); -uint16_t GetEPRxCount(uint8_t /*bEpNum*/); -void SetEPDblBuf0Addr(uint8_t /*bEpNum*/, uint16_t /*wBuf0Addr*/); -void SetEPDblBuf1Addr(uint8_t /*bEpNum*/, uint16_t /*wBuf1Addr*/); -void SetEPDblBuffAddr(uint8_t /*bEpNum*/, uint16_t /*wBuf0Addr*/, uint16_t /*wBuf1Addr*/); -uint16_t GetEPDblBuf0Addr(uint8_t /*bEpNum*/); -uint16_t GetEPDblBuf1Addr(uint8_t /*bEpNum*/); -void SetEPDblBuffCount(uint8_t /*bEpNum*/, uint8_t /*bDir*/, uint16_t /*wCount*/); -void SetEPDblBuf0Count(uint8_t /*bEpNum*/, uint8_t /*bDir*/, uint16_t /*wCount*/); -void SetEPDblBuf1Count(uint8_t /*bEpNum*/, uint8_t /*bDir*/, uint16_t /*wCount*/); -uint16_t GetEPDblBuf0Count(uint8_t /*bEpNum*/); -uint16_t GetEPDblBuf1Count(uint8_t /*bEpNum*/); -EP_DBUF_DIR GetEPDblBufDir(uint8_t /*bEpNum*/); -void FreeUserBuffer(uint8_t bEpNum/*bEpNum*/, uint8_t bDir); -uint16_t ToWord(uint8_t, uint8_t); -uint16_t ByteSwap(uint16_t); - -#ifdef __cplusplus -} - -#endif - -#endif /* __USB_REGS_H */ - - - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_sil.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_sil.h deleted file mode 100644 index b98a674..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_sil.h +++ /dev/null @@ -1,34 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_sil.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB Simplified Interface Layer firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_SIL_H -#define __USB_SIL_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32f10x.h" - -uint32_t USB_SIL_Init(void); -uint32_t USB_SIL_Write(uint8_t bEpAddr, uint8_t* pBufferPointer, uint32_t wBufferSize); -uint32_t USB_SIL_Read(uint8_t bEpAddr, uint8_t* pBufferPointer); - -#ifdef __cplusplus -} - -#endif - -#endif /* __USB_SIL_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_type.h b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_type.h deleted file mode 100644 index 58c0040..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/inc/usb_type.h +++ /dev/null @@ -1,31 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_type.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains all the functions prototypes for the - * USB types firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#ifndef __USB_TYPE_H -#define __USB_TYPE_H -#include "debug.h" -#include "usb_conf.h" - -#ifndef NULL -#define NULL ((void *)0) -#endif - -typedef enum -{ - FALSE = 0, TRUE = !FALSE -} -bool; - -#endif /* __USB_TYPE_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_core.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_core.c deleted file mode 100644 index c81b4ca..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_core.c +++ /dev/null @@ -1,949 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_core.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Standard protocol processing (USB v2.0) - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" - -/* Global define */ -#define ValBit(VAR,Place) (VAR & (1 << Place)) -#define SetBit(VAR,Place) (VAR |= (1 << Place)) -#define ClrBit(VAR,Place) (VAR &= ((1 << Place) ^ 255)) -#define Send0LengthData() { _SetEPTxCount(ENDP0, 0); \ - vSetEPTxStatus(EP_TX_VALID); \ - } - -#define vSetEPRxStatus(st) (SaveRState = st) -#define vSetEPTxStatus(st) (SaveTState = st) - -#define USB_StatusIn() Send0LengthData() -#define USB_StatusOut() vSetEPRxStatus(EP_RX_VALID) - -#define StatusInfo0 StatusInfo.bw.bb1 -#define StatusInfo1 StatusInfo.bw.bb0 - -uint16_t_uint8_t StatusInfo; - -bool Data_Mul_MaxPacketSize = FALSE; - -static void DataStageOut(void); -static void DataStageIn(void); -static void NoData_Setup0(void); -static void Data_Setup0(void); - -/********************************************************************* - * @fn Standard_GetConfiguration. - * - * @brief Return the current configuration variable address. - * - * @param Length - How many bytes are needed. - * - * @return Return 1 - if the request is invalid when "Length" is 0. - * Return "Buffer" if the "Length" is not 0. - */ -uint8_t *Standard_GetConfiguration(uint16_t Length) -{ - if (Length == 0) - { - pInformation->Ctrl_Info.Usb_wLength = sizeof(pInformation->Current_Configuration); - return 0; - } - pUser_Standard_Requests->User_GetConfiguration(); - - return (uint8_t *)&pInformation->Current_Configuration; -} - -/********************************************************************* - * @fn Standard_SetConfiguration. - * - * @brief This routine is called to set the configuration value - * Then each class should configure device itself. - * - * @return Return USB_SUCCESS - if the request is performed. - * Return USB_UNSUPPORT - if the request is invalid. - */ -RESULT Standard_SetConfiguration(void) -{ - if ((pInformation->USBwValue0 <= - Device_Table.Total_Configuration) && (pInformation->USBwValue1 == 0) - && (pInformation->USBwIndex == 0)) - { - pInformation->Current_Configuration = pInformation->USBwValue0; - pUser_Standard_Requests->User_SetConfiguration(); - return USB_SUCCESS; - } - else - { - return USB_UNSUPPORT; - } -} - -/********************************************************************* - * @fn Standard_GetInterface. - * - * @brief Return the Alternate Setting of the current interface. - * - * @param Length - How many bytes are needed. - * - * @return Return 1 - if the request is invalid when "Length" is 0. - * Return "Buffer" if the "Length" is not 0. - */ -uint8_t *Standard_GetInterface(uint16_t Length) -{ - if (Length == 0) - { - pInformation->Ctrl_Info.Usb_wLength = sizeof(pInformation->Current_AlternateSetting); - return 0; - } - pUser_Standard_Requests->User_GetInterface(); - - return (uint8_t *)&pInformation->Current_AlternateSetting; -} - -/********************************************************************* - * @fn Standard_SetInterface. - * - * @brief This routine is called to set the interface. - * hen each class should configure the interface them self. - * - * @return Return USB_SUCCESS - if the request is performed. - * Return USB_UNSUPPORT - if the request is invalid. - */ -RESULT Standard_SetInterface(void) -{ - RESULT Re; - Re = (*pProperty->Class_Get_Interface_Setting)(pInformation->USBwIndex0, pInformation->USBwValue0); - - if (pInformation->Current_Configuration != 0) - { - if ((Re != USB_SUCCESS) || (pInformation->USBwIndex1 != 0) - || (pInformation->USBwValue1 != 0)) - { - return USB_UNSUPPORT; - } - else if (Re == USB_SUCCESS) - { - pUser_Standard_Requests->User_SetInterface(); - pInformation->Current_Interface = pInformation->USBwIndex0; - pInformation->Current_AlternateSetting = pInformation->USBwValue0; - return USB_SUCCESS; - } - } - - return USB_UNSUPPORT; -} - -/********************************************************************* - * @fn Standard_GetStatus. - * - * @brief Copy the device request data to "StatusInfo buffer". - * - * @param Length - How many bytes are needed. - * - * @return Return 0 - if the request is at end of data block, - * or is invalid when "Length" is 0. - */ -uint8_t *Standard_GetStatus(uint16_t Length) -{ - if (Length == 0) - { - pInformation->Ctrl_Info.Usb_wLength = 2; - return 0; - } - StatusInfo.w = 0; - - if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - { - uint8_t Feature = pInformation->Current_Feature; - - if (ValBit(Feature, 5)) - { - SetBit(StatusInfo0, 1); - } - else - { - ClrBit(StatusInfo0, 1); - } - if (ValBit(Feature, 6)) - { - SetBit(StatusInfo0, 0); - } - else - { - ClrBit(StatusInfo0, 0); - } - } - else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) - { - return (uint8_t *)&StatusInfo; - } - else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) - { - uint8_t Related_Endpoint; - uint8_t wIndex0 = pInformation->USBwIndex0; - - Related_Endpoint = (wIndex0 & 0x0f); - if (ValBit(wIndex0, 7)) - { - if (_GetTxStallStatus(Related_Endpoint)) - { - SetBit(StatusInfo0, 0); - } - } - else - { - if (_GetRxStallStatus(Related_Endpoint)) - { - SetBit(StatusInfo0, 0); - } - } - - } - else - { - return NULL; - } - pUser_Standard_Requests->User_GetStatus(); - - return (uint8_t *)&StatusInfo; -} - -/********************************************************************* - * @fn Standard_ClearFeature. - * - * @brief Clear or disable a specific feature. - * - * @return Return USB_SUCCESS - if the request is performed. - * Return USB_UNSUPPORT - if the request is invalid. - */ -RESULT Standard_ClearFeature(void) -{ - uint32_t Type_Rec = Type_Recipient; - uint32_t Status; - - if (Type_Rec == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - { - ClrBit(pInformation->Current_Feature, 5); - return USB_SUCCESS; - } - else if (Type_Rec == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) - { - DEVICE* pDev; - uint32_t Related_Endpoint; - uint32_t wIndex0; - uint32_t rEP; - - if ((pInformation->USBwValue != ENDPOINT_STALL) - || (pInformation->USBwIndex1 != 0)) - { - return USB_UNSUPPORT; - } - - pDev = &Device_Table; - wIndex0 = pInformation->USBwIndex0; - rEP = wIndex0 & ~0x80; - Related_Endpoint = ENDP0 + rEP; - - if (ValBit(pInformation->USBwIndex0, 7)) - { - Status = _GetEPTxStatus(Related_Endpoint); - } - else - { - Status = _GetEPRxStatus(Related_Endpoint); - } - - if ((rEP >= pDev->Total_Endpoint) || (Status == 0) - || (pInformation->Current_Configuration == 0)) - { - return USB_UNSUPPORT; - } - - if (wIndex0 & 0x80) - { - if (_GetTxStallStatus(Related_Endpoint )) - { - ClearDTOG_TX(Related_Endpoint); - SetEPTxStatus(Related_Endpoint, EP_TX_VALID); - } - } - else - { - if (_GetRxStallStatus(Related_Endpoint)) - { - if (Related_Endpoint == ENDP0) - { - SetEPRxCount(Related_Endpoint, Device_Property.MaxPacketSize); - _SetEPRxStatus(Related_Endpoint, EP_RX_VALID); - } - else - { - ClearDTOG_RX(Related_Endpoint); - _SetEPRxStatus(Related_Endpoint, EP_RX_VALID); - } - } - } - pUser_Standard_Requests->User_ClearFeature(); - return USB_SUCCESS; - } - - return USB_UNSUPPORT; -} - -/********************************************************************* - * @fn Standard_SetEndPointFeature - * - * @brief Set or enable a specific feature of EndPoint - * - * @return Return USB_SUCCESS - if the request is performed. - * Return USB_UNSUPPORT - if the request is invalid. - */ -RESULT Standard_SetEndPointFeature(void) -{ - uint32_t wIndex0; - uint32_t Related_Endpoint; - uint32_t rEP; - uint32_t Status; - - wIndex0 = pInformation->USBwIndex0; - rEP = wIndex0 & ~0x80; - Related_Endpoint = ENDP0 + rEP; - - if (ValBit(pInformation->USBwIndex0, 7)) - { - Status = _GetEPTxStatus(Related_Endpoint); - } - else - { - Status = _GetEPRxStatus(Related_Endpoint); - } - - if (Related_Endpoint >= Device_Table.Total_Endpoint - || pInformation->USBwValue != 0 || Status == 0 - || pInformation->Current_Configuration == 0) - { - return USB_UNSUPPORT; - } - else - { - if (wIndex0 & 0x80) - { - _SetEPTxStatus(Related_Endpoint, EP_TX_STALL); - } - else - { - _SetEPRxStatus(Related_Endpoint, EP_RX_STALL); - } - } - pUser_Standard_Requests->User_SetEndPointFeature(); - - return USB_SUCCESS; -} - -/********************************************************************* - * @fn Standard_SetDeviceFeature. - * - * @brief Set or enable a specific feature of Device. - * - * @return Return USB_SUCCESS - if the request is performed. - * Return USB_UNSUPPORT - if the request is invalid. - */ -RESULT Standard_SetDeviceFeature(void) -{ - SetBit(pInformation->Current_Feature, 5); - pUser_Standard_Requests->User_SetDeviceFeature(); - - return USB_SUCCESS; -} - -/********************************************************************* - * @fn Standard_GetDescriptorData. - * - * @brief Standard_GetDescriptorData is used for descriptors transfer. - * This routine is used for the descriptors resident in Flash - * or RAM - * pDesc can be in either Flash or RAM - * The purpose of this routine is to have a versatile way to - * response descriptors request. It allows user to generate - * certain descriptors with software or read descriptors from - * external storage part by part. - * @param Length - How many bytes are needed. - * pDesc - A pointer points to descriptor struct. - * The structure gives the initial address of the descriptor and - * its original size. - * - * @return Address of a part of the descriptor pointed by the Usb_ - * wOffset The buffer pointed by this address contains at least - * Length bytes. - */ -uint8_t *Standard_GetDescriptorData(uint16_t Length, ONE_DESCRIPTOR *pDesc) -{ - uint32_t wOffset; - - wOffset = pInformation->Ctrl_Info.Usb_wOffset; - - if (Length == 0) - { - pInformation->Ctrl_Info.Usb_wLength = pDesc->Descriptor_Size - wOffset; - return 0; - } - - return pDesc->Descriptor + wOffset; -} - -/********************************************************************* - * @fn DataStageOut. - * - * @brief Data stage of a Control Write Transfer. - * - * @return none - */ -void DataStageOut(void) -{ - ENDPOINT_INFO *pEPinfo = &pInformation->Ctrl_Info; - uint32_t save_rLength; - - save_rLength = pEPinfo->Usb_rLength; - - if (pEPinfo->CopyData && save_rLength) - { - uint8_t *Buffer; - uint32_t Length; - - Length = pEPinfo->PacketSize; - - if (Length > save_rLength) - { - Length = save_rLength; - } - - Buffer = (*pEPinfo->CopyData)(Length); - pEPinfo->Usb_rLength -= Length; - pEPinfo->Usb_rOffset += Length; - PMAToUserBufferCopy(Buffer, GetEPRxAddr(ENDP0), Length); - } - - if (pEPinfo->Usb_rLength != 0) - { - vSetEPRxStatus(EP_RX_VALID); - SetEPTxCount(ENDP0, 0); - vSetEPTxStatus(EP_TX_VALID); - } - - if (pEPinfo->Usb_rLength >= pEPinfo->PacketSize) - { - pInformation->ControlState = OUT_DATA; - } - else - { - if (pEPinfo->Usb_rLength > 0) - { - pInformation->ControlState = LAST_OUT_DATA; - } - else if (pEPinfo->Usb_rLength == 0) - { - pInformation->ControlState = WAIT_STATUS_IN; - USB_StatusIn(); - } - } -} - -/********************************************************************* - * @fn DataStageIn. - * - * @brief Data stage of a Control Read Transfer. - * - * @return none - */ -void DataStageIn(void) -{ - ENDPOINT_INFO *pEPinfo = &pInformation->Ctrl_Info; - uint32_t save_wLength = pEPinfo->Usb_wLength; - uint32_t ControlState = pInformation->ControlState; - - uint8_t *DataBuffer; - uint32_t Length; - - if ((save_wLength == 0) && (ControlState == LAST_IN_DATA)) - { - if(Data_Mul_MaxPacketSize == TRUE) - { - Send0LengthData(); - ControlState = LAST_IN_DATA; - Data_Mul_MaxPacketSize = FALSE; - } - else - { - ControlState = WAIT_STATUS_OUT; - vSetEPTxStatus(EP_TX_STALL); - - } - - goto Expect_Status_Out; - } - - Length = pEPinfo->PacketSize; - ControlState = (save_wLength <= Length) ? LAST_IN_DATA : IN_DATA; - - if (Length > save_wLength) - { - Length = save_wLength; - } - - DataBuffer = (*pEPinfo->CopyData)(Length); - - UserToPMABufferCopy(DataBuffer, GetEPTxAddr(ENDP0), Length); - - SetEPTxCount(ENDP0, Length); - - pEPinfo->Usb_wLength -= Length; - pEPinfo->Usb_wOffset += Length; - vSetEPTxStatus(EP_TX_VALID); - - USB_StatusOut(); - -Expect_Status_Out: - pInformation->ControlState = ControlState; -} - -/********************************************************************* - * @fn NoData_Setup0. - * - * @brief Proceed the processing of setup request without data stage. - * - * @return none - */ -void NoData_Setup0(void) -{ - RESULT Result = USB_UNSUPPORT; - uint32_t RequestNo = pInformation->USBbRequest; - uint32_t ControlState; - - if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - { - if (RequestNo == SET_CONFIGURATION) - { - Result = Standard_SetConfiguration(); - } - else if (RequestNo == SET_ADDRESS) - { - if ((pInformation->USBwValue0 > 127) || (pInformation->USBwValue1 != 0) - || (pInformation->USBwIndex != 0) - || (pInformation->Current_Configuration != 0)) - { - ControlState = STALLED; - goto exit_NoData_Setup0; - } - else - { - Result = USB_SUCCESS; - } - } - else if (RequestNo == SET_FEATURE) - { - if ((pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP) \ - && (pInformation->USBwIndex == 0)) - { - Result = Standard_SetDeviceFeature(); - } - else - { - Result = USB_UNSUPPORT; - } - } - else if (RequestNo == CLEAR_FEATURE) - { - if (pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP - && pInformation->USBwIndex == 0 - && ValBit(pInformation->Current_Feature, 5)) - { - Result = Standard_ClearFeature(); - } - else - { - Result = USB_UNSUPPORT; - } - } - - } - else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) - { - if (RequestNo == SET_INTERFACE) - { - Result = Standard_SetInterface(); - } - } - - else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) - { - if (RequestNo == CLEAR_FEATURE) - { - Result = Standard_ClearFeature(); - } - else if (RequestNo == SET_FEATURE) - { - Result = Standard_SetEndPointFeature(); - } - } - else - { - Result = USB_UNSUPPORT; - } - - if (Result != USB_SUCCESS) - { - Result = (*pProperty->Class_NoData_Setup)(RequestNo); - if (Result == USB_NOT_READY) - { - ControlState = PAUSE; - goto exit_NoData_Setup0; - } - } - - if (Result != USB_SUCCESS) - { - ControlState = STALLED; - goto exit_NoData_Setup0; - } - - ControlState = WAIT_STATUS_IN; - - USB_StatusIn(); - -exit_NoData_Setup0: - pInformation->ControlState = ControlState; - return; -} - -/********************************************************************* - * @fn Data_Setup0. - * - * @brief Proceed the processing of setup request without data stage. - * - * @return none - */ -void Data_Setup0(void) -{ - uint8_t *(*CopyRoutine)(uint16_t); - RESULT Result; - uint32_t Request_No = pInformation->USBbRequest; - uint32_t Related_Endpoint, Reserved; - uint32_t wOffset, Status; - - CopyRoutine = NULL; - wOffset = 0; - - if (Request_No == GET_DESCRIPTOR) - { - if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - { - uint8_t wValue1 = pInformation->USBwValue1; - if (wValue1 == DEVICE_DESCRIPTOR) - { - CopyRoutine = pProperty->GetDeviceDescriptor; - } - else if (wValue1 == CONFIG_DESCRIPTOR) - { - CopyRoutine = pProperty->GetConfigDescriptor; - } - else if (wValue1 == STRING_DESCRIPTOR) - { - CopyRoutine = pProperty->GetStringDescriptor; - } - } - } - else if ((Request_No == GET_STATUS) && (pInformation->USBwValue == 0) - && (pInformation->USBwLength == 0x0002) - && (pInformation->USBwIndex1 == 0)) - { - - if ((Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - && (pInformation->USBwIndex == 0)) - { - CopyRoutine = Standard_GetStatus; - } - else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) - { - if (((*pProperty->Class_Get_Interface_Setting)(pInformation->USBwIndex0, 0) == USB_SUCCESS) - && (pInformation->Current_Configuration != 0)) - { - CopyRoutine = Standard_GetStatus; - } - } - else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) - { - Related_Endpoint = (pInformation->USBwIndex0 & 0x0f); - Reserved = pInformation->USBwIndex0 & 0x70; - - if (ValBit(pInformation->USBwIndex0, 7)) - { - Status = _GetEPTxStatus(Related_Endpoint); - } - else - { - Status = _GetEPRxStatus(Related_Endpoint); - } - - if ((Related_Endpoint < Device_Table.Total_Endpoint) && (Reserved == 0) - && (Status != 0)) - { - CopyRoutine = Standard_GetStatus; - } - } - - } - else if (Request_No == GET_CONFIGURATION) - { - if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - { - CopyRoutine = Standard_GetConfiguration; - } - } - else if (Request_No == GET_INTERFACE) - { - if ((Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) - && (pInformation->Current_Configuration != 0) && (pInformation->USBwValue == 0) - && (pInformation->USBwIndex1 == 0) && (pInformation->USBwLength == 0x0001) - && ((*pProperty->Class_Get_Interface_Setting)(pInformation->USBwIndex0, 0) == USB_SUCCESS)) - { - CopyRoutine = Standard_GetInterface; - } - - } - - if (CopyRoutine) - { - pInformation->Ctrl_Info.Usb_wOffset = wOffset; - pInformation->Ctrl_Info.CopyData = CopyRoutine; - (*CopyRoutine)(0); - Result = USB_SUCCESS; - } - else - { - Result = (*pProperty->Class_Data_Setup)(pInformation->USBbRequest); - - if (Result == USB_NOT_READY) - { - pInformation->ControlState = PAUSE; - return; - } - } - - if (pInformation->Ctrl_Info.Usb_wLength == 0xFFFF) - { - pInformation->ControlState = PAUSE; - return; - } - - if ((Result == USB_UNSUPPORT) || (pInformation->Ctrl_Info.Usb_wLength == 0)) - { - pInformation->ControlState = STALLED; - return; - } - - if (ValBit(pInformation->USBbmRequestType, 7)) - { - __IO uint32_t wLength = pInformation->USBwLength; - if (pInformation->Ctrl_Info.Usb_wLength > wLength) - { - pInformation->Ctrl_Info.Usb_wLength = wLength; - } - else if (pInformation->Ctrl_Info.Usb_wLength < pInformation->USBwLength) - { - if (pInformation->Ctrl_Info.Usb_wLength < pProperty->MaxPacketSize) - { - Data_Mul_MaxPacketSize = FALSE; - } - else if ((pInformation->Ctrl_Info.Usb_wLength % pProperty->MaxPacketSize) == 0) - { - Data_Mul_MaxPacketSize = TRUE; - } - } - - pInformation->Ctrl_Info.PacketSize = pProperty->MaxPacketSize; - DataStageIn(); - } - else - { - pInformation->ControlState = OUT_DATA; - vSetEPRxStatus(EP_RX_VALID); - } - - return; -} - -/********************************************************************* - * @fn Setup0_Process - * - * @brief Get the device request data and dispatch to individual process. - * - * @return Post0_Process. - */ -uint8_t Setup0_Process(void) -{ - union - { - uint8_t* b; - uint16_t* w; - } pBuf; - uint16_t offset = 1; - - pBuf.b = PMAAddr + (uint8_t *)(_GetEPRxAddr(ENDP0) * 2); /* *2 for 32 bits addr */ - - if (pInformation->ControlState != PAUSE) - { - pInformation->USBbmRequestType = *pBuf.b++; /* bmRequestType */ - pInformation->USBbRequest = *pBuf.b++; /* bRequest */ - pBuf.w += offset; /* word not accessed because of 32 bits addressing */ - pInformation->USBwValue = ByteSwap(*pBuf.w++); /* wValue */ - pBuf.w += offset; /* word not accessed because of 32 bits addressing */ - pInformation->USBwIndex = ByteSwap(*pBuf.w++); /* wIndex */ - pBuf.w += offset; /* word not accessed because of 32 bits addressing */ - pInformation->USBwLength = *pBuf.w; /* wLength */ - } - pInformation->ControlState = SETTING_UP; - - if (pInformation->USBwLength == 0) - { - NoData_Setup0(); - } - else - { - Data_Setup0(); - } - return Post0_Process(); -} - -/********************************************************************* - * @fn In0_Process - * - * @brief Process the IN token on all default endpoint. - * - * @return Post0_Process. - */ -uint8_t In0_Process(void) -{ - uint32_t ControlState = pInformation->ControlState; - - if ((ControlState == IN_DATA) || (ControlState == LAST_IN_DATA)) - { - DataStageIn(); - ControlState = pInformation->ControlState; - } - else if (ControlState == WAIT_STATUS_IN) - { - if ((pInformation->USBbRequest == SET_ADDRESS) && - (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))) - { - SetDeviceAddress(pInformation->USBwValue0); - pUser_Standard_Requests->User_SetDeviceAddress(); - } - (*pProperty->Process_Status_IN)(); - ControlState = STALLED; - } - else - { - ControlState = STALLED; - } - - pInformation->ControlState = ControlState; - - return Post0_Process(); -} - -/********************************************************************* - * @fn Out0_Process - * - * @brief Process the OUT token on all default endpoint. - * - * @return Post0_Process. - */ -uint8_t Out0_Process(void) -{ - uint32_t ControlState = pInformation->ControlState; - - if ((ControlState == IN_DATA) || (ControlState == LAST_IN_DATA)) - { - ControlState = STALLED; - } - else if ((ControlState == OUT_DATA) || (ControlState == LAST_OUT_DATA)) - { - DataStageOut(); - ControlState = pInformation->ControlState; - } - else if (ControlState == WAIT_STATUS_OUT) - { - (*pProperty->Process_Status_OUT)(); - ControlState = STALLED; - } - else - { - ControlState = STALLED; - } - - pInformation->ControlState = ControlState; - - return Post0_Process(); -} - -/********************************************************************* - * @fn Post0_Process - * - * @brief Stall the Endpoint 0 in case of error. - * - * @return 0 - if the control State is in PAUSE - * 1 - if not. - */ -uint8_t Post0_Process(void) -{ - SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); - - if (pInformation->ControlState == STALLED) - { - vSetEPRxStatus(EP_RX_STALL); - vSetEPTxStatus(EP_TX_STALL); - } - - return (pInformation->ControlState == PAUSE); -} - -/********************************************************************* - * @fn SetDeviceAddress.. - * - * @brief Set the device and all the used Endpoints addresses. - * - * @param Val: device address. - * - * @return none - */ -void SetDeviceAddress(uint8_t Val) -{ - uint32_t i; - uint32_t nEP = Device_Table.Total_Endpoint; - - for (i = 0; i < nEP; i++) - { - _SetEPAddress((uint8_t)i, (uint8_t)i); - } - - _SetDADDR(Val | DADDR_EF); -} - -/********************************************************************* - * @fn NOP_Process - * - * @brief No operation function. - * - * @return none - */ -void NOP_Process(void) -{ -} - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_init.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_init.c deleted file mode 100644 index 5a2279c..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_init.c +++ /dev/null @@ -1,39 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_init.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Initialization routines & global variables - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" - -uint8_t EPindex; -DEVICE_INFO *pInformation; -DEVICE_PROP *pProperty; -uint16_t SaveState ; -uint16_t wInterrupt_Mask; -DEVICE_INFO Device_Info; -USER_STANDARD_REQUESTS *pUser_Standard_Requests; - -/********************************************************************* - * @fn USB_Init - * - * @brief USB system initialization - * - * @return none - */ -void USB_Init(void) -{ - pInformation = &Device_Info; - pInformation->ControlState = 2; - pProperty = &Device_Property; - pUser_Standard_Requests = &User_Standard_Requests; - pProperty->Init(); -} - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_int.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_int.c deleted file mode 100644 index 8bcda99..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_int.c +++ /dev/null @@ -1,129 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_int.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Endpoint CTR (Low and High) interrupt's service routines - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" - -/* Private variables */ -__IO uint16_t SaveRState; -__IO uint16_t SaveTState; - -/* Extern variables */ -extern void (*pEpInt_IN[7])(void); /* Handles IN interrupts */ -extern void (*pEpInt_OUT[7])(void); /* Handles OUT interrupts */ - -/********************************************************************* - * @fn CTR_LP. - * - * @brief Low priority Endpoint Correct Transfer interrupt's service routine. - * - * @return none - */ -void CTR_LP(void) -{ - __IO uint16_t wEPVal = 0; - - while (((wIstr = _GetISTR()) & ISTR_CTR) != 0) - { - EPindex = (uint8_t)(wIstr & ISTR_EP_ID); - - if (EPindex == 0) - { - SaveRState = _GetENDPOINT(ENDP0); - SaveTState = SaveRState & EPTX_STAT; - SaveRState &= EPRX_STAT; - - _SetEPRxTxStatus(ENDP0,EP_RX_NAK,EP_TX_NAK); - - if ((wIstr & ISTR_DIR) == 0) - { - _ClearEP_CTR_TX(ENDP0); - In0_Process(); - - _SetEPRxTxStatus(ENDP0,SaveRState,SaveTState); - - return; - } - else - { - wEPVal = _GetENDPOINT(ENDP0); - - if ((wEPVal &EP_SETUP) != 0) - { - _ClearEP_CTR_RX(ENDP0); - Setup0_Process(); - _SetEPRxTxStatus(ENDP0,SaveRState,SaveTState); - - return; - } - else if ((wEPVal & EP_CTR_RX) != 0) - { - _ClearEP_CTR_RX(ENDP0); - Out0_Process(); - _SetEPRxTxStatus(ENDP0,SaveRState,SaveTState); - - return; - } - } - } - else - { - wEPVal = _GetENDPOINT(EPindex); - if ((wEPVal & EP_CTR_RX) != 0) - { - _ClearEP_CTR_RX(EPindex); - (*pEpInt_OUT[EPindex-1])(); - } - - if ((wEPVal & EP_CTR_TX) != 0) - { - _ClearEP_CTR_TX(EPindex); - (*pEpInt_IN[EPindex-1])(); - } - } - } -} - -/********************************************************************* - * @fn CTR_HP. - * - * @brief High Priority Endpoint Correct Transfer interrupt's service routine. - * - * @return none - */ -void CTR_HP(void) -{ - uint32_t wEPVal = 0; - - while (((wIstr = _GetISTR()) & ISTR_CTR) != 0) - { - _SetISTR((uint16_t)CLR_CTR); - EPindex = (uint8_t)(wIstr & ISTR_EP_ID); - wEPVal = _GetENDPOINT(EPindex); - - if ((wEPVal & EP_CTR_RX) != 0) - { - _ClearEP_CTR_RX(EPindex); - (*pEpInt_OUT[EPindex-1])(); - } - else if ((wEPVal & EP_CTR_TX) != 0) - { - _ClearEP_CTR_TX(EPindex); - (*pEpInt_IN[EPindex-1])(); - } - } -} - - - - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_mem.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_mem.c deleted file mode 100644 index 119ddec..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_mem.c +++ /dev/null @@ -1,70 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_mem.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Utility functions for memory transfers to/from PMA - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" - - -/********************************************************************* - * @fn UserToPMABufferCopy - * - * @brief Copy a buffer from user memory area to packet memory area (PMA) - * - * @param pbUsrBuf - pointer to user memory area. - * wPMABufAddr - address into PMA. - * wNBytes - no. of bytes to be copied. - * - * @return none - */ -void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes) -{ - uint32_t n = (wNBytes + 1) >> 1; - uint32_t i, temp1, temp2; - uint16_t *pdwVal; - pdwVal = (uint16_t *)(wPMABufAddr * 2 + PMAAddr); - - for (i = n; i != 0; i--){ - temp1 = (uint16_t) * pbUsrBuf; - pbUsrBuf++; - temp2 = temp1 | (uint16_t) * pbUsrBuf << 8; - *pdwVal++ = temp2; - pdwVal++; - pbUsrBuf++; - } -} - -/********************************************************************* - * @fn PMAToUserBufferCopy - * - * @brief Copy a buffer from user memory area to packet memory area (PMA) - * - * @param pbUsrBuf - pointer to user memory area. - * wPMABufAddr - address into PMA. - * wNBytes - no. of bytes to be copied. - * - * @return none - */ -void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes) -{ - uint32_t n = (wNBytes + 1) >> 1; - uint32_t i; - uint32_t *pdwVal; - - pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr); - - for (i = n; i != 0; i--){ - *(uint16_t*)pbUsrBuf++ = *pdwVal++; - pbUsrBuf++; - } -} - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_regs.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_regs.c deleted file mode 100644 index cb2c62c..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_regs.c +++ /dev/null @@ -1,875 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_regs.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Interface functions to USB cell registers - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" - -/********************************************************************* - * @fn SetCNTR. - * - * @brief Set the CNTR register value. - * - * @param wRegValue - new register value. - * - * @return none - */ -void SetCNTR(uint16_t wRegValue) -{ - _SetCNTR(wRegValue); -} - -/********************************************************************* - * @fn GetCNTR. - * - * @brief returns the CNTR register value. - * - * @return CNTR register Value. - */ -uint16_t GetCNTR(void) -{ - return(_GetCNTR()); -} - -/********************************************************************* - * @fn SetISTR. - * - * @brief Set the CNTR register value. - * - * @param wRegValue - new register value. - * - * @return none - */ -void SetISTR(uint16_t wRegValue) -{ - _SetISTR(wRegValue); -} - -/********************************************************************* - * @fn GetISTR - * - * @brief Returns the ISTR register value. - * - * @return ISTR register Value - */ -uint16_t GetISTR(void) -{ - return(_GetISTR()); -} - -/********************************************************************* - * @fn GetFNR - * - * @brief Returns the FNR register value. - * - * @return FNR register Value - */ -uint16_t GetFNR(void) -{ - return(_GetFNR()); -} - -/********************************************************************* - * @fn SetDADDR - * - * @brief Set the DADDR register value. - * - * @param wRegValue - new register value. - * - * @return none - */ -void SetDADDR(uint16_t wRegValue) -{ - _SetDADDR(wRegValue); -} - -/********************************************************************* - * @fn GetDADDR - * - * @brief Returns the DADDR register value. - * - * @return DADDR register Value - */ -uint16_t GetDADDR(void) -{ - return(_GetDADDR()); -} - -/********************************************************************* - * @fn SetBTABLE - * - * @brief Set the CNTR register value. - * - * @param wRegValue - new register value. - * - * @return none - */ -void SetBTABLE(uint16_t wRegValue) -{ - _SetBTABLE(wRegValue); -} - -/********************************************************************* - * @fn GetBTABLE. - * - * @brief Returns the BTABLE register value. - * - * @return BTABLE address. - */ -uint16_t GetBTABLE(void) -{ - return(_GetBTABLE()); -} - -/********************************************************************* - * @fn SetENDPOINT - * - * @brief Set the Endpoint register value. - * - * @param bEpNum - Endpoint Number. - * wRegValue. - * - * @return none - */ -void SetENDPOINT(uint8_t bEpNum, uint16_t wRegValue) -{ - _SetENDPOINT(bEpNum, wRegValue); -} - -/********************************************************************* - * @fn GetENDPOINT - * - * @brief Return the Endpoint register value. - * - * @param bEpNum - Endpoint Number. - * - * @return Endpoint register value. - */ -uint16_t GetENDPOINT(uint8_t bEpNum) -{ - return(_GetENDPOINT(bEpNum)); -} - -/********************************************************************* - * @fn SetEPType - * - * @brief Set the Endpoint register value. - * - * @param bEpNum - Endpoint Number. - * wType - type definition. - * - * @return none - */ -void SetEPType(uint8_t bEpNum, uint16_t wType) -{ - _SetEPType(bEpNum, wType); -} - -/********************************************************************* - * @fn GetEPType - * - * @brief Returns the endpoint type. - * - * @param bEpNum - Endpoint Number. - * - * @return Endpoint Type - */ -uint16_t GetEPType(uint8_t bEpNum) -{ - return(_GetEPType(bEpNum)); -} - -/********************************************************************* - * @fn SetEPTxStatus - * - * @brief Set the status of Tx endpoint. - * - * @param bEpNum - Endpoint Number. - * wState - new state. - * - * @return none - */ -void SetEPTxStatus(uint8_t bEpNum, uint16_t wState) -{ - _SetEPTxStatus(bEpNum, wState); -} - -/********************************************************************* - * @fn SetEPRxStatus - * - * @brief Set the status of Tx endpoint. - * - * @param bEpNum - Endpoint Number. - * wState - new state. - * - * @return none - */ -void SetEPRxStatus(uint8_t bEpNum, uint16_t wState) -{ - _SetEPRxStatus(bEpNum, wState); -} - -/********************************************************************* - * @fn SetDouBleBuffEPStall - * - * @brief sets the status for Double Buffer Endpoint to STALL - * - * @param bEpNum - Endpoint Number. - * bDir - Endpoint direction. - * - * @return none - */ -void SetDouBleBuffEPStall(uint8_t bEpNum, uint8_t bDir) -{ - uint16_t Endpoint_DTOG_Status; - - Endpoint_DTOG_Status = GetENDPOINT(bEpNum); - - if (bDir == EP_DBUF_OUT) - { - _SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPRX_DTOG1); - } - else if (bDir == EP_DBUF_IN) - { - _SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPTX_DTOG1); - } -} - -/********************************************************************* - * @fn GetEPTxStatus - * - * @brief Returns the endpoint Tx status. - * - * @param bEpNum - Endpoint Number. - * - * @return Endpoint TX Status - */ -uint16_t GetEPTxStatus(uint8_t bEpNum) -{ - return(_GetEPTxStatus(bEpNum)); -} - -/********************************************************************* - * @fn GetEPRxStatus - * - * @brief Returns the endpoint Tx status. - * - * @param bEpNum - Endpoint Number. - * - * @return Endpoint RX Status - */ -uint16_t GetEPRxStatus(uint8_t bEpNum) -{ - return(_GetEPRxStatus(bEpNum)); -} - -/********************************************************************* - * @fn SetEPTxValid - * - * @brief Valid the endpoint Tx Status. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void SetEPTxValid(uint8_t bEpNum) -{ - _SetEPTxStatus(bEpNum, EP_TX_VALID); -} - -/********************************************************************* - * @fn SetEPRxValid - * - * @brief Valid the endpoint Rx Status. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void SetEPRxValid(uint8_t bEpNum) -{ - _SetEPRxStatus(bEpNum, EP_RX_VALID); -} - -/********************************************************************* - * @fn SetEP_KIND - * - * @brief Clear the EP_KIND bit. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void SetEP_KIND(uint8_t bEpNum) -{ - _SetEP_KIND(bEpNum); -} - -/********************************************************************* - * @fn ClearEP_KIND - * - * @brief set the EP_KIND bit. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void ClearEP_KIND(uint8_t bEpNum) -{ - _ClearEP_KIND(bEpNum); -} - -/********************************************************************* - * @fn Clear_Status_Out - * - * @brief Clear the Status Out of the related Endpoint - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void Clear_Status_Out(uint8_t bEpNum) -{ - _ClearEP_KIND(bEpNum); -} - -/********************************************************************* - * @fn Set_Status_Out - * - * @brief Set the Status Out of the related Endpoint - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void Set_Status_Out(uint8_t bEpNum) -{ - _SetEP_KIND(bEpNum); -} - -/********************************************************************* - * @fn SetEPDoubleBuff - * - * @brief Enable the double buffer feature for the endpoint. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void SetEPDoubleBuff(uint8_t bEpNum) -{ - _SetEP_KIND(bEpNum); -} - -/********************************************************************* - * @fn ClearEPDoubleBuff - * - * @brief Disable the double buffer feature for the endpoint. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void ClearEPDoubleBuff(uint8_t bEpNum) -{ - _ClearEP_KIND(bEpNum); -} - -/********************************************************************* - * @fn GetTxStallStatus - * - * @brief Returns the Stall status of the Tx endpoint. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -uint16_t GetTxStallStatus(uint8_t bEpNum) -{ - return(_GetTxStallStatus(bEpNum)); -} - -/********************************************************************* - * @fn GetRxStallStatus - * - * @brief Returns the Stall status of the Rx endpoint. - * - * @param bEpNum - Endpoint Number. - * - * @return Rx Stall status. - */ -uint16_t GetRxStallStatus(uint8_t bEpNum) -{ - return(_GetRxStallStatus(bEpNum)); -} - -/********************************************************************* - * @fn ClearEP_CTR_RX - * - * @brief Clear the CTR_RX bit. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void ClearEP_CTR_RX(uint8_t bEpNum) -{ - _ClearEP_CTR_RX(bEpNum); -} - -/********************************************************************* - * @fn ClearEP_CTR_TX - * - * @brief Clear the CTR_TX bit. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void ClearEP_CTR_TX(uint8_t bEpNum) -{ - _ClearEP_CTR_TX(bEpNum); -} - -/********************************************************************* - * @fn ToggleDTOG_RX - * - * @brief Toggle the DTOG_RX bit. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void ToggleDTOG_RX(uint8_t bEpNum) -{ - _ToggleDTOG_RX(bEpNum); -} - -/********************************************************************* - * @fn ToggleDTOG_TX - * - * @brief Toggle the DTOG_TX bit. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void ToggleDTOG_TX(uint8_t bEpNum) -{ - _ToggleDTOG_TX(bEpNum); -} - -/********************************************************************* - * @fn ClearDTOG_RX. - * - * @brief Clear the DTOG_RX bit. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void ClearDTOG_RX(uint8_t bEpNum) -{ - _ClearDTOG_RX(bEpNum); -} - -/********************************************************************* - * @fn ClearDTOG_TX. - * - * @brief Clear the DTOG_TX bit. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -void ClearDTOG_TX(uint8_t bEpNum) -{ - _ClearDTOG_TX(bEpNum); -} - -/********************************************************************* - * @fn SetEPAddress - * - * @brief Set the endpoint address. - * - * @param bEpNum - Endpoint Number. - * bAddr - New endpoint address. - * - * @return none - */ -void SetEPAddress(uint8_t bEpNum, uint8_t bAddr) -{ - _SetEPAddress(bEpNum, bAddr); -} - -/********************************************************************* - * @fn GetEPAddress - * - * @brief Clear the DTOG_TX bit. - * - * @param bEpNum - Endpoint Number. - * - * @return Endpoint address. - */ -uint8_t GetEPAddress(uint8_t bEpNum) -{ - return(_GetEPAddress(bEpNum)); -} - -/********************************************************************* - * @fn SetEPTxAddr - * - * @brief Set the endpoint Tx buffer address. - * - * @param bEpNum - Endpoint Number. - * bAddr - New endpoint address. - * - * @return none - */ -void SetEPTxAddr(uint8_t bEpNum, uint16_t wAddr) -{ - _SetEPTxAddr(bEpNum, wAddr); -} - -/********************************************************************* - * @fn SetEPRxAddr - * - * @brief Set the endpoint Rx buffer address. - * - * @param bEpNum - Endpoint Number. - * bAddr - New endpoint address. - * - * @return none - */ -void SetEPRxAddr(uint8_t bEpNum, uint16_t wAddr) -{ - _SetEPRxAddr(bEpNum, wAddr); -} - -/********************************************************************* - * @fn GetEPTxAddr - * - * @brief Returns the endpoint Tx buffer address. - * - * @param bEpNum - Endpoint Number. - * - * @return Rx buffer address. - */ -uint16_t GetEPTxAddr(uint8_t bEpNum) -{ - return(_GetEPTxAddr(bEpNum)); -} - -/********************************************************************* - * @fn GetEPRxAddr. - * - * @brief Returns the endpoint Rx buffer address. - * - * @param bEpNum - Endpoint Number. - * - * @return Rx buffer address. - */ -uint16_t GetEPRxAddr(uint8_t bEpNum) -{ - return(_GetEPRxAddr(bEpNum)); -} - -/********************************************************************* - * @fn SetEPTxCount. - * - * @brief Set the Tx count. - * - * @param bEpNum - Endpoint Number. - * wCount - new count value. - * - * @return none - */ -void SetEPTxCount(uint8_t bEpNum, uint16_t wCount) -{ - _SetEPTxCount(bEpNum, wCount); -} - -/********************************************************************* - * @fn SetEPCountRxReg. - * - * @brief Set the Count Rx Register value. - * - * @param *pdwReg - Endpoint Number. - * wCount - new count value. - * - * @return none - */ -void SetEPCountRxReg(uint32_t *pdwReg, uint16_t wCount) -{ - _SetEPCountRxReg(dwReg, wCount); -} - -/********************************************************************* - * @fn SetEPTxCount. - * - * @brief Set the Tx count. - * - * @param bEpNum - Endpoint Number. - * wCount - new count value. - * - * @return none - */ -void SetEPRxCount(uint8_t bEpNum, uint16_t wCount) -{ - _SetEPRxCount(bEpNum, wCount); -} - -/********************************************************************* - * @fn GetEPTxCount - * - * @brief Get the Tx count. - * - * @param bEpNum - Endpoint Number. - * - * @return Tx count value. - */ -uint16_t GetEPTxCount(uint8_t bEpNum) -{ - return(_GetEPTxCount(bEpNum)); -} -/********************************************************************* - * @fn GetEPRxCount - * - * @brief Get the Rx count. - * - * @param bEpNum - Endpoint Number. - * - * @return Rx count value. - */ -uint16_t GetEPRxCount(uint8_t bEpNum) -{ - return(_GetEPRxCount(bEpNum)); -} - -/********************************************************************* - * @fn SetEPDblBuffAddr - * - * @brief Set the addresses of the buffer 0 and 1. - * - * @param bEpNum - Endpoint Number. - * wBuf0Addr - new address of buffer 0. - * wBuf1Addr - new address of buffer 1. - * - * @return none - */ -void SetEPDblBuffAddr(uint8_t bEpNum, uint16_t wBuf0Addr, uint16_t wBuf1Addr) -{ - _SetEPDblBuffAddr(bEpNum, wBuf0Addr, wBuf1Addr); -} - -/********************************************************************* - * @fn SetEPDblBuf0Addr - * - * @brief Set the Buffer 1 address. - * - * @param bEpNum - Endpoint Number. - * wBuf0Addr - new address. - * - * @return none - */ -void SetEPDblBuf0Addr(uint8_t bEpNum, uint16_t wBuf0Addr) -{ - _SetEPDblBuf0Addr(bEpNum, wBuf0Addr); -} - -/********************************************************************* - * @fn SetEPDblBuf1Addr - * - * @brief Set the Buffer 1 address. - * - * @param bEpNum - Endpoint Number. - * wBuf1Addr - new address. - * - * @return none - */ -void SetEPDblBuf1Addr(uint8_t bEpNum, uint16_t wBuf1Addr) -{ - _SetEPDblBuf1Addr(bEpNum, wBuf1Addr); -} - -/********************************************************************* - * @fn GetEPDblBuf0Addr - * - * @brief Returns the address of the Buffer 0. - * - * @param bEpNum - Endpoint Number. - * - * @return none - */ -uint16_t GetEPDblBuf0Addr(uint8_t bEpNum) -{ - return(_GetEPDblBuf0Addr(bEpNum)); -} - -/********************************************************************* - * @fn GetEPDblBuf1Addr - * - * @brief Returns the address of the Buffer 1. - * - * @param bEpNum - Endpoint Number. - * - * @return Address of the Buffer 1. - */ -uint16_t GetEPDblBuf1Addr(uint8_t bEpNum) -{ - return(_GetEPDblBuf1Addr(bEpNum)); -} - -/********************************************************************* - * @fn SetEPDblBuffCount - * - * @brief Set the number of bytes for a double Buffer endpoint. - * - * @param bEpNum,bDir, wCount - * - * @return none - */ -void SetEPDblBuffCount(uint8_t bEpNum, uint8_t bDir, uint16_t wCount) -{ - _SetEPDblBuffCount(bEpNum, bDir, wCount); -} - -/********************************************************************* - * @fn SetEPDblBuf0Count - * - * @brief Set the number of bytes for a double Buffer endpoint. - * - * @param bEpNum,bDir, wCount - * - * @return none - */ -void SetEPDblBuf0Count(uint8_t bEpNum, uint8_t bDir, uint16_t wCount) -{ - _SetEPDblBuf0Count(bEpNum, bDir, wCount); -} - -/********************************************************************* - * @fn SetEPDblBuf1Count - * - * @brief Set the number of bytes for a double Buffer endpoint. - * - * @param bEpNum,bDir, wCount - * - * @return none - */ -void SetEPDblBuf1Count(uint8_t bEpNum, uint8_t bDir, uint16_t wCount) -{ - _SetEPDblBuf1Count(bEpNum, bDir, wCount); -} - -/********************************************************************* - * @fn GetEPDblBuf0Count - * - * @brief Returns the number of byte received in the buffer 0 of a double - * Buffer endpoint. - * - * @param bEpNum - Endpoint Number. - * - * @return Endpoint Buffer 0 count - */ -uint16_t GetEPDblBuf0Count(uint8_t bEpNum) -{ - return(_GetEPDblBuf0Count(bEpNum)); -} - -/********************************************************************* - * @fn GetEPDblBuf1Count - * - * @brief Returns the number of byte received in the buffer 1 of a double - * Buffer endpoint. - * - * @param bEpNum - Endpoint Number. - * - * @return Endpoint Buffer 1 count - */ -uint16_t GetEPDblBuf1Count(uint8_t bEpNum) -{ - return(_GetEPDblBuf1Count(bEpNum)); -} - -/********************************************************************* - * @fn GetEPDblBufDir - * - * @brief gets direction of the double buffered endpoint - * - * @param bEpNum - Endpoint Number. - * - * @return EP_DBUF_OUT, EP_DBUF_IN, - * EP_DBUF_ERR if the endpoint counter not yet programmed. - */ -EP_DBUF_DIR GetEPDblBufDir(uint8_t bEpNum) -{ - if ((uint16_t)(*_pEPRxCount(bEpNum) & 0xFC00) != 0) - return(EP_DBUF_OUT); - else if (((uint16_t)(*_pEPTxCount(bEpNum)) & 0x03FF) != 0) - return(EP_DBUF_IN); - else - return(EP_DBUF_ERR); -} - -/********************************************************************* - * @fn FreeUserBuffer - * - * @brief free buffer used from the application realizing it to the line - * toggles bit SW_BUF in the double buffered endpoint register - * - * @param bEpNum, bDir - * - * @return none - */ -void FreeUserBuffer(uint8_t bEpNum, uint8_t bDir) -{ - if (bDir == EP_DBUF_OUT) - { - _ToggleDTOG_TX(bEpNum); - } - else if (bDir == EP_DBUF_IN) - { - _ToggleDTOG_RX(bEpNum); - } -} - -/********************************************************************* - * @fn ToWord - * - * @brief merge two byte in a word. - * - * @param bh - byte high, bl - bytes low. - * - * @return resulted word - */ -uint16_t ToWord(uint8_t bh, uint8_t bl) -{ - uint16_t wRet; - wRet = (uint16_t)bl | ((uint16_t)bh << 8); - - return(wRet); -} - -/********************************************************************* - * @fn ByteSwap - * - * @brief Swap two byte in a word. - * - * @param wSwW - word to Swap - * - * @return resulted word - */ -uint16_t ByteSwap(uint16_t wSwW) -{ - uint8_t bTemp; - uint16_t wRet; - bTemp = (uint8_t)(wSwW & 0xff); - wRet = (wSwW >> 8) | ((uint16_t)bTemp << 8); - - return(wRet); -} diff --git a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_sil.c b/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_sil.c deleted file mode 100644 index a268dec..0000000 --- a/Example/EpaperModuleTest_CH32F103/CH32F103/USBLIB/USB-Driver/src/usb_sil.c +++ /dev/null @@ -1,74 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : usb_sil.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Simplified Interface Layer for Global Initialization and - * Endpoint Rea/Write operations. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 -*******************************************************************************/ -#include "usb_lib.h" - - -/********************************************************************* - * @fn USB_SIL_Init - * - * @brief Initialize the USB Device IP and the Endpoint 0. - * - * @return Status. - */ -uint32_t USB_SIL_Init(void) -{ - _SetISTR(0); - wInterrupt_Mask = IMR_MSK; - _SetCNTR(wInterrupt_Mask); - - return 0; -} - -/********************************************************************* - * @fn USB_SIL_Write - * - * @brief Write a buffer of data to a selected endpoint. - * - * @param bEpAddr - The address of the non control endpoint. - * pBufferPointer - The pointer to the buffer of data to be written - * to the endpoint. - * - * @return Status. - */ -uint32_t USB_SIL_Write(uint8_t bEpAddr, uint8_t* pBufferPointer, uint32_t wBufferSize) -{ - UserToPMABufferCopy(pBufferPointer, GetEPTxAddr(bEpAddr & 0x7F), wBufferSize); - SetEPTxCount((bEpAddr & 0x7F), wBufferSize); - - return 0; -} - -/********************************************************************* - * @fn USB_SIL_Read - * - * @brief Write a buffer of data to a selected endpoint. - * - * @param bEpAddr - The address of the non control endpoint. - * pBufferPointer - The pointer to the buffer of data to be written - * to the endpoint. - * - * @return Number of received data (in Bytes). - */ -uint32_t USB_SIL_Read(uint8_t bEpAddr, uint8_t* pBufferPointer) -{ - uint32_t DataLength = 0; - - DataLength = GetEPRxCount(bEpAddr & 0x7F); - PMAToUserBufferCopy(pBufferPointer, GetEPRxAddr(bEpAddr & 0x7F), DataLength); - - return DataLength; -} - - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/Epaper/epaper.c b/Example/EpaperModuleTest_CH32F103/Epaper/epaper.c deleted file mode 100644 index abb4ef7..0000000 --- a/Example/EpaperModuleTest_CH32F103/Epaper/epaper.c +++ /dev/null @@ -1,922 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "epaper.h" -#include "epdfont.h" - -#include "systick.h" - -// epaper module -// res pin -> pa8 -// busy pin -> pa15 -// d/c pin -> pb14 -// cs pin -> pb12 -// sck pin -> pb13 -// mosi pin -> pb15 - -EPD_PAINT EPD_Paint; - -static uint8_t _hibernating = 1; - -static const unsigned char lut_partial[] = -{ - 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x40, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, -}; - -void epd_delay(uint16_t ms) -{ - delay(ms); -} - -void epd_res_set() -{ - GPIO_SetBits(GPIOA, GPIO_Pin_8); -} - -void epd_res_reset() -{ - GPIO_ResetBits(GPIOA, GPIO_Pin_8); -} - -void epd_dc_set() -{ - GPIO_SetBits(GPIOB, GPIO_Pin_14); -} - -void epd_dc_reset() -{ - GPIO_ResetBits(GPIOB, GPIO_Pin_14); -} - -void epd_cs_set() -{ - GPIO_SetBits(GPIOB, GPIO_Pin_12); -} - -void epd_cs_reset() -{ - GPIO_ResetBits(GPIOB, GPIO_Pin_12); -} - -uint8_t epd_is_busy() -{ - return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == Bit_RESET ? 0 : 1; -} - -void epd_io_init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure = {0}; - SPI_InitTypeDef spiConfig = {0}; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); - - /* configure the epaper module res pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - /* configure the epaper module busy pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - /* configure the epaper module d/c pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - /* configure the epaper module spi2 sck mosi pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - /* configure the epaper module cs pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - /* configure spi2 */ - RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); - - spiConfig.SPI_DataSize = SPI_DataSize_8b; - spiConfig.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; - spiConfig.SPI_Direction = SPI_Direction_1Line_Tx; - spiConfig.SPI_FirstBit = SPI_FirstBit_MSB; - spiConfig.SPI_Mode = SPI_Mode_Master; - spiConfig.SPI_CPOL = SPI_CPOL_High; - spiConfig.SPI_CPHA = SPI_CPHA_2Edge; - spiConfig.SPI_NSS = SPI_NSS_Soft; - SPI_Init(SPI2, &spiConfig); - SPI_Cmd(SPI2, ENABLE); -} - -void epd_write_reg(uint8_t reg) -{ - epd_dc_reset(); - epd_cs_reset(); - - SPI_I2S_SendData(SPI2, reg); - while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) != RESET) - ; - - epd_cs_set(); - epd_dc_set(); -} - -void epd_write_data(uint8_t data) -{ - epd_cs_reset(); - - SPI_I2S_SendData(SPI2, data); - while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) != RESET) - ; - - epd_cs_set(); -} - -void _epd_write_data(uint8_t data) -{ - - while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) - ; - SPI_I2S_SendData(SPI2, data); -} - -void _epd_write_data_over() -{ - while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) != RESET) - ; -} - -uint8_t epd_wait_busy() -{ - uint32_t timeout = 0; - while (epd_is_busy()) - { - timeout++; - if (timeout > 40000) - { - return 1; - } - epd_delay(1); - } - return 0; -} - -void epd_reset(void) -{ - epd_res_reset(); - epd_delay(50); - epd_res_set(); - epd_delay(50); - _hibernating = 0; -} - -uint8_t epd_init(void) -{ - if (_hibernating) - epd_reset(); - - if (epd_wait_busy()) - return 1; - - epd_write_reg(0x12); // SWRESET - - epd_delay(10); - - if (epd_wait_busy()) - return 1; - - #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) - epd_write_reg(0x01); // Driver output control -#if defined(EPD_29) || defined(EPD_213) - epd_write_data(0x27); - epd_write_data(0x01); - epd_write_data(0x01); -#else - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x01); - #endif - - epd_write_reg(0x11); // data entry mode - epd_write_data(0x01); - -#ifdef EPD_154 - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x18); - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x00); - epd_write_data(0x00); - #else - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x0F); // 0x0F-->(15+1)*8=128 - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0x27); // 0x127-->(295+1)=296 - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_data(0x00); -#endif - - epd_write_reg(0x3C); // BorderWavefrom - epd_write_data(0x05); - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x21); // Display update control - epd_write_data(0x00); - epd_write_data(0x80); - #endif - - #elif defined(EPD_42) - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x40); - epd_write_data(0x00); - epd_write_reg(0x01); // Set MUX as 300 - epd_write_data(0x2B); - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x01); - epd_write_reg(0x11); // data entry mode - epd_write_data(0x03); // X-mode - epd_address_set(0,0,EPD_W-1,EPD_H-1); -#endif - - epd_write_reg(0x18); // Read built-in temperature sensor - epd_write_data(0x80); - - epd_setpos(0,0); - - if (epd_power_on()) - return 1; - - return 0; -} - -uint8_t epd_init_partial(void) -{ - if (epd_init()) - return 1; - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x32); - epd_cs_reset(); - for (int j = 0; j < sizeof(lut_partial); j++) - { - _epd_write_data(lut_partial[j]); - } - _epd_write_data_over(); - epd_cs_set(); - #elif defined(EPD_42) - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x80); - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application -#endif - - return 0; -} - -void epd_enter_deepsleepmode(uint8_t mode) -{ - epd_power_off(); - epd_write_reg(0x10); - epd_write_data(mode); - _hibernating = 1; -} - -uint8_t epd_power_on(void) -{ - #if defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xe0); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xf8); - #endif - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -uint8_t epd_power_off(void) -{ - epd_write_reg(0x22); // Display Update Control - epd_write_data(0x83); - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -void epd_init_internalTempSensor(void) -{ - epd_write_reg(0x18); - epd_write_data(0x80); - - epd_write_reg(0x1A); - epd_write_data(0x7F); -// epd_write_data(0xF0); -} - -void epd_update(void) - { - - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF4); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_update_partial(void) -{ - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFC); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFF); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xCC); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) -{ - epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION - epd_write_data((x_start>>3) & 0xFF); - epd_write_data((x_end>>3) & 0xFF); - - epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION - epd_write_data(y_start & 0xFF); - epd_write_data((y_start >> 8) & 0xFF); - epd_write_data(y_end & 0xFF); - epd_write_data((y_end >> 8) & 0xFF); -} - -void epd_setpos(uint16_t x, uint16_t y) -{ - uint8_t _x; - uint16_t _y; - - _x = x / 8; - -#ifdef EPD_154 - _y = 199 - y; - #elif defined(EPD_29) || defined(EPD_213) - _y = 295 - y; - #elif defined(EPD_42) - _y = y; -#endif - - epd_write_reg(0x4E); // set RAM x address count to 0; - epd_write_data(_x); - epd_write_reg(0x4F); // set RAM y address count to 0x127; - epd_write_data(_y & 0xff); - epd_write_data(_y >> 8 & 0x01); -} - -void epd_writedata(uint8_t *Image1, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(Image1[j]); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_writedata2(uint8_t data, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(data); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_display(uint8_t *Image1, uint8_t *Image2) -{ - uint32_t Width, Height, i, j; - uint32_t k = 0; - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x24); - epd_writedata(Image1, Width * Height); - - epd_setpos(0, 0); - - epd_write_reg(0x26); - k = 0; - epd_cs_reset(); - for (j = 0; j < Height; j++) - { - for (i = 0; i < Width; i++) - { - _epd_write_data(~Image2[k]); - k++; - } - } - _epd_write_data_over(); - epd_cs_set(); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - - epd_update(); -} - -void epd_displayBW(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update(); -} - -void epd_displayBW_partial(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update_partial(); - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); -} - -void epd_displayRED(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - epd_update(); -} - -void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color) -{ - EPD_Paint.Image = 0x00; - EPD_Paint.Image = image; - - EPD_Paint.WidthMemory = Width; - EPD_Paint.HeightMemory = Height; - EPD_Paint.Color = Color; - EPD_Paint.WidthByte = (Width % 8 == 0) ? (Width / 8) : (Width / 8 + 1); - EPD_Paint.HeightByte = Height; - EPD_Paint.Rotate = Rotate; - if (Rotate == EPD_ROTATE_0 || Rotate == EPD_ROTATE_180) - { - - EPD_Paint.Width = Height; - EPD_Paint.Height = Width; - } - else - { - EPD_Paint.Width = Width; - EPD_Paint.Height = Height; - } -} - -void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - uint16_t X, Y; - uint32_t Addr; - uint8_t Rdata; - switch (EPD_Paint.Rotate) - { - case 0: - - X = EPD_Paint.WidthMemory - Ypoint - 1; - Y = Xpoint; - break; - case 90: - X = EPD_Paint.WidthMemory - Xpoint - 1; - Y = EPD_Paint.HeightMemory - Ypoint - 1; - break; - case 180: - X = Ypoint; - Y = EPD_Paint.HeightMemory - Xpoint - 1; - break; - case 270: - X = Xpoint; - Y = Ypoint; - break; - default: - return; - } - Addr = X / 8 + Y * EPD_Paint.WidthByte; - Rdata = EPD_Paint.Image[Addr]; - if (Color == EPD_COLOR_BLACK) - { - EPD_Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8)); - } - else - EPD_Paint.Image[Addr] = Rdata | (0x80 >> (X % 8)); -} - -void epd_paint_clear(uint16_t color) -{ - uint16_t X, Y; - uint32_t Addr; - - for (Y = 0; Y < EPD_Paint.HeightByte; Y++) - { - for (X = 0; X < EPD_Paint.WidthByte; X++) - { // 8 pixel = 1 byte - Addr = X + Y * EPD_Paint.WidthByte; - EPD_Paint.Image[Addr] = color; - } - } -} - -void epd_paint_selectimage(uint8_t *image) -{ - EPD_Paint.Image = image; -} - -void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - epd_paint_setpixel(Xpoint - 1, Ypoint - 1, Color); -} - -void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color) -{ - uint16_t Xpoint, Ypoint; - int32_t dx, dy; - int32_t XAddway, YAddway; - int32_t Esp; - char Dotted_Len; - Xpoint = Xstart; - Ypoint = Ystart; - dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend; - dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend; - - XAddway = Xstart < Xend ? 1 : -1; - YAddway = Ystart < Yend ? 1 : -1; - - Esp = dx + dy; - Dotted_Len = 0; - - for (;;) - { - Dotted_Len++; - epd_paint_drawPoint(Xpoint, Ypoint, Color); - if (2 * Esp >= dy) - { - if (Xpoint == Xend) - break; - Esp += dy; - Xpoint += XAddway; - } - if (2 * Esp <= dx) - { - if (Ypoint == Yend) - break; - Esp += dx; - Ypoint += YAddway; - } - } -} - -void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode) -{ - uint16_t i; - if (mode) - { - for (i = Ystart; i < Yend; i++) - { - epd_paint_drawLine(Xstart, i, Xend, i, Color); - } - } - else - { - epd_paint_drawLine(Xstart, Ystart, Xend, Ystart, Color); - epd_paint_drawLine(Xstart, Ystart, Xstart, Yend, Color); - epd_paint_drawLine(Xend, Yend, Xend, Ystart, Color); - epd_paint_drawLine(Xend, Yend, Xstart, Yend, Color); - } -} - -void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode) -{ - uint16_t Esp, sCountY; - uint16_t XCurrent, YCurrent; - XCurrent = 0; - YCurrent = Radius; - Esp = 3 - (Radius << 1); - if (mode) - { - while (XCurrent <= YCurrent) - { // Realistic circles - for (sCountY = XCurrent; sCountY <= YCurrent; sCountY++) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + sCountY, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + sCountY, Color); // 2 - epd_paint_drawPoint(X_Center - sCountY, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - sCountY, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - sCountY, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - sCountY, Color); // 6 - epd_paint_drawPoint(X_Center + sCountY, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + sCountY, Y_Center + XCurrent, Color); - } - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } - else - { // Draw a hollow circle - while (XCurrent <= YCurrent) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + YCurrent, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + YCurrent, Color); // 2 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - YCurrent, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - YCurrent, Color); // 6 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center + XCurrent, Color); // 0 - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } -} - -void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color) -{ - uint16_t i, m, temp, size2, chr1; - uint16_t x0, y0; - x += 1, y += 1, x0 = x, y0 = y; - if (x - size1 > EPD_H) - return; - if (size1 == 8) - size2 = 6; - else - size2 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * (size1 / 2); - chr1 = chr - ' '; - for (i = 0; i < size2; i++) - { - if (size1 == 8) - { - temp = asc2_0806[chr1][i]; - } // 0806 - else if (size1 == 12) - { - temp = asc2_1206[chr1][i]; - } // 1206 - else if (size1 == 16) - { - temp = asc2_1608[chr1][i]; - } // 1608 - else if (size1 == 24) - { - temp = asc2_2412[chr1][i]; - } // 2412 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((size1 != 8) && ((x - x0) == size1 / 2)) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color) -{ - while (*chr != '\0') - { - epd_paint_showChar(x, y, *chr, size1, color); - chr++; - if (size1 == 8) - { - x += 6; - if(x > EPD_H-6) - break; - } - else - { - x += size1 / 2; - if(x > EPD_H-size1 / 2) - break; - } - } -} - -// m^n -static uint32_t _Pow(uint16_t m, uint16_t n) -{ - uint32_t result = 1; - while (n--) - { - result *= m; - } - return result; -} - -void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color) -{ - uint8_t t, temp, m = 0; - if (size1 == 8) - m = 2; - for (t = 0; t < len; t++) - { - temp = (num / _Pow(10, len - t - 1)) % 10; - if (temp == 0) - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, '0', size1, color); - } - else - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, temp + '0', size1, color); - } - } -} - -void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color) -{ - uint16_t m, temp; - uint16_t x0, y0; - uint16_t i, size3 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * size1; - x += 1, y += 1, x0 = x, y0 = y; - for (i = 0; i < size3; i++) - { - if (size1 == 16) - { - temp = Hzk1[num][i]; - } // 16*16 - else if (size1 == 24) - { - temp = Hzk2[num][i]; - } // 24*24 - else if (size1 == 32) - { - temp = Hzk3[num][i]; - } // 32*32 - else if (size1 == 64) - { - temp = Hzk4[num][i]; - } // 64*64 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == size1) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color) -{ - uint16_t j = 0; - uint16_t i, n = 0, temp = 0, m = 0; - uint16_t x0 = 0, y0 = 0; - x += 1, y += 1, x0 = x, y0 = y; - sizey = sizey / 8 + ((sizey % 8) ? 1 : 0); - for (n = 0; n < sizey; n++) - { - for (i = 0; i < sizex; i++) - { - temp = BMP[j]; - j++; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, !Color); - else - epd_paint_drawPoint(x, y, Color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == sizex) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } - } -} diff --git a/Example/EpaperModuleTest_CH32F103/Epaper/epaper.h b/Example/EpaperModuleTest_CH32F103/Epaper/epaper.h deleted file mode 100644 index a1395a1..0000000 --- a/Example/EpaperModuleTest_CH32F103/Epaper/epaper.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef __EPAPER_H -#define __EPAPER_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "ch32f10x.h" - -//#define EPD_42 -//#define EPD_29 -//#define EPD_213 -//#define EPD_154 - -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) -#error EPD Type Undefine -#endif - -#ifdef EPD_29 -#define EPD_W 128 -#define EPD_H 296 -#endif - -#ifdef EPD_213 -#define EPD_W 122 -#define EPD_H 250 -#endif - -#ifdef EPD_154 -#define EPD_W 200 -#define EPD_H 200 -#endif - -#ifdef EPD_42 -#define EPD_W 400 -#define EPD_H 300 -#endif - -#define EPD_OK 0 -#define EPD_ERROR 1 - -#define EPD_ROTATE_0 0 -#define EPD_ROTATE_90 90 -#define EPD_ROTATE_180 180 -#define EPD_ROTATE_270 270 - -#define EPD_COLOR_WHITE 0xFF -#define EPD_COLOR_BLACK 0x00 -#define EPD_COLOR_RED EPD_COLOR_BLACK - -#define EPD_FONT_SIZE8x6 (8) -#define EPD_FONT_SIZE12x6 (12) -#define EPD_FONT_SIZE16x8 (16) -#define EPD_FONT_SIZE24x12 (24) - -#define EPD_DEEPSLEEP_MODE1 (0x01) -#define EPD_DEEPSLEEP_MODE2 (0x03) - -#define EPD_W_BUFF_SIZE ((EPD_W % 8 == 0) ? (EPD_W / 8) : (EPD_W / 8 + 1)) - typedef struct - { - uint8_t *Image; - uint16_t Width; - uint16_t Height; - uint16_t WidthMemory; - uint16_t HeightMemory; - uint16_t Color; - uint16_t Rotate; - uint16_t WidthByte; - uint16_t HeightByte; - } EPD_PAINT; - extern EPD_PAINT EPD_Paint; - - void epd_io_init(void); - uint8_t epd_init(void); - uint8_t epd_init_partial(void); - void epd_enter_deepsleepmode(uint8_t mode); - uint8_t epd_power_on(void); - uint8_t epd_power_off(void); - void epd_init_internalTempSensor(void); - void epd_update(void); - void epd_update_partial(void); - void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); - void epd_setpos(uint16_t x, uint16_t y); - void epd_display(uint8_t *Image1, uint8_t *Image2); - void epd_displayBW(uint8_t *Image); - void epd_displayBW_partial(uint8_t *Image); - void epd_displayRED(uint8_t *Image); - - void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color); - void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_selectimage(uint8_t *image); - void epd_paint_clear(uint16_t color); - void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color); - void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode); - void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode); - void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color); - void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color); - void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color); - void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color); - void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_CH32F103/Epaper/epdfont.h b/Example/EpaperModuleTest_CH32F103/Epaper/epdfont.h deleted file mode 100644 index 3d4913b..0000000 --- a/Example/EpaperModuleTest_CH32F103/Epaper/epdfont.h +++ /dev/null @@ -1,429 +0,0 @@ -#ifndef __EPDFONT_H -#define __EPDFONT_H - -#ifdef __cplusplus -extern "C" { -#endif - -const unsigned char asc2_0806[][6] = -{ -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// sp -{0x00, 0x00, 0x00, 0x2f, 0x00, 0x00},// ! -{0x00, 0x00, 0x07, 0x00, 0x07, 0x00},// " -{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14},// # -{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12},// $ -{0x00, 0x62, 0x64, 0x08, 0x13, 0x23},// % -{0x00, 0x36, 0x49, 0x55, 0x22, 0x50},// & -{0x00, 0x00, 0x05, 0x03, 0x00, 0x00},// ' -{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00},// ( -{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00},// ) -{0x00, 0x14, 0x08, 0x3E, 0x08, 0x14},// * -{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08},// + -{0x00, 0x00, 0x00, 0xA0, 0x60, 0x00},// , -{0x00, 0x08, 0x08, 0x08, 0x08, 0x08},// - -{0x00, 0x00, 0x60, 0x60, 0x00, 0x00},// . -{0x00, 0x20, 0x10, 0x08, 0x04, 0x02},// / -{0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E},// 0 -{0x00, 0x00, 0x42, 0x7F, 0x40, 0x00},// 1 -{0x00, 0x42, 0x61, 0x51, 0x49, 0x46},// 2 -{0x00, 0x21, 0x41, 0x45, 0x4B, 0x31},// 3 -{0x00, 0x18, 0x14, 0x12, 0x7F, 0x10},// 4 -{0x00, 0x27, 0x45, 0x45, 0x45, 0x39},// 5 -{0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30},// 6 -{0x00, 0x01, 0x71, 0x09, 0x05, 0x03},// 7 -{0x00, 0x36, 0x49, 0x49, 0x49, 0x36},// 8 -{0x00, 0x06, 0x49, 0x49, 0x29, 0x1E},// 9 -{0x00, 0x00, 0x36, 0x36, 0x00, 0x00},// : -{0x00, 0x00, 0x56, 0x36, 0x00, 0x00},// ; -{0x00, 0x08, 0x14, 0x22, 0x41, 0x00},// < -{0x00, 0x14, 0x14, 0x14, 0x14, 0x14},// = -{0x00, 0x00, 0x41, 0x22, 0x14, 0x08},// > -{0x00, 0x02, 0x01, 0x51, 0x09, 0x06},// ? -{0x00, 0x32, 0x49, 0x59, 0x51, 0x3E},// @ -{0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C},// A -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x36},// B -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x22},// C -{0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C},// D -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x41},// E -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x01},// F -{0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A},// G -{0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F},// H -{0x00, 0x00, 0x41, 0x7F, 0x41, 0x00},// I -{0x00, 0x20, 0x40, 0x41, 0x3F, 0x01},// J -{0x00, 0x7F, 0x08, 0x14, 0x22, 0x41},// K -{0x00, 0x7F, 0x40, 0x40, 0x40, 0x40},// L -{0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F},// M -{0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F},// N -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E},// O -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x06},// P -{0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E},// Q -{0x00, 0x7F, 0x09, 0x19, 0x29, 0x46},// R -{0x00, 0x46, 0x49, 0x49, 0x49, 0x31},// S -{0x00, 0x01, 0x01, 0x7F, 0x01, 0x01},// T -{0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F},// U -{0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F},// V -{0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F},// W -{0x00, 0x63, 0x14, 0x08, 0x14, 0x63},// X -{0x00, 0x07, 0x08, 0x70, 0x08, 0x07},// Y -{0x00, 0x61, 0x51, 0x49, 0x45, 0x43},// Z -{0x00, 0x00, 0x7F, 0x41, 0x41, 0x00},// [ -{0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55},// 55 -{0x00, 0x00, 0x41, 0x41, 0x7F, 0x00},// ] -{0x00, 0x04, 0x02, 0x01, 0x02, 0x04},// ^ -{0x00, 0x40, 0x40, 0x40, 0x40, 0x40},// _ -{0x00, 0x00, 0x01, 0x02, 0x04, 0x00},// ' -{0x00, 0x20, 0x54, 0x54, 0x54, 0x78},// a -{0x00, 0x7F, 0x48, 0x44, 0x44, 0x38},// b -{0x00, 0x38, 0x44, 0x44, 0x44, 0x20},// c -{0x00, 0x38, 0x44, 0x44, 0x48, 0x7F},// d -{0x00, 0x38, 0x54, 0x54, 0x54, 0x18},// e -{0x00, 0x08, 0x7E, 0x09, 0x01, 0x02},// f -{0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C},// g -{0x00, 0x7F, 0x08, 0x04, 0x04, 0x78},// h -{0x00, 0x00, 0x44, 0x7D, 0x40, 0x00},// i -{0x00, 0x40, 0x80, 0x84, 0x7D, 0x00},// j -{0x00, 0x7F, 0x10, 0x28, 0x44, 0x00},// k -{0x00, 0x00, 0x41, 0x7F, 0x40, 0x00},// l -{0x00, 0x7C, 0x04, 0x18, 0x04, 0x78},// m -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x78},// n -{0x00, 0x38, 0x44, 0x44, 0x44, 0x38},// o -{0x00, 0xFC, 0x24, 0x24, 0x24, 0x18},// p -{0x00, 0x18, 0x24, 0x24, 0x18, 0xFC},// q -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x08},// r -{0x00, 0x48, 0x54, 0x54, 0x54, 0x20},// s -{0x00, 0x04, 0x3F, 0x44, 0x40, 0x20},// t -{0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C},// u -{0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C},// v -{0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C},// w -{0x00, 0x44, 0x28, 0x10, 0x28, 0x44},// x -{0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C},// y -{0x00, 0x44, 0x64, 0x54, 0x4C, 0x44},// z -{0x14, 0x14, 0x14, 0x14, 0x14, 0x14},// horiz lines -}; -//12*12 ASCII -const unsigned char asc2_1206[95][12]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x0C,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x90,0xD0,0xBC,0xD0,0xBC,0x90,0x00,0x03,0x00,0x03,0x00,0x00},/*"#",3*/ -{0x18,0x24,0xFE,0x44,0x8C,0x00,0x03,0x02,0x07,0x02,0x01,0x00},/*"$",4*/ -{0x18,0x24,0xD8,0xB0,0x4C,0x80,0x00,0x03,0x00,0x01,0x02,0x01},/*"%",5*/ -{0xC0,0x38,0xE4,0x38,0xE0,0x00,0x01,0x02,0x02,0x01,0x02,0x02},/*"&",6*/ -{0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xF8,0x04,0x02,0x00,0x00,0x00,0x01,0x02,0x04},/*"(",8*/ -{0x00,0x02,0x04,0xF8,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0x00},/*")",9*/ -{0x90,0x60,0xF8,0x60,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"*",10*/ -{0x20,0x20,0xFC,0x20,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x00,0x00,0x00,0x00},/*",",12*/ -{0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x80,0x60,0x1C,0x02,0x00,0x04,0x03,0x00,0x00,0x00,0x00},/*"/",15*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"0",16*/ -{0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"1",17*/ -{0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00},/*"2",18*/ -{0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"3",19*/ -{0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00},/*"4",20*/ -{0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"5",21*/ -{0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"6",22*/ -{0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00},/*"7",23*/ -{0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"8",24*/ -{0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"9",25*/ -{0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00},/*";",27*/ -{0x00,0x20,0x50,0x88,0x04,0x02,0x00,0x00,0x00,0x00,0x01,0x02},/*"<",28*/ -{0x90,0x90,0x90,0x90,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x02,0x04,0x88,0x50,0x20,0x00,0x02,0x01,0x00,0x00,0x00},/*">",30*/ -{0x18,0x04,0xC4,0x24,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"?",31*/ -{0xF8,0x04,0xE4,0x94,0xF8,0x00,0x01,0x02,0x02,0x02,0x02,0x00},/*"@",32*/ -{0x00,0xE0,0x9C,0xF0,0x80,0x00,0x02,0x03,0x00,0x00,0x03,0x02},/*"A",33*/ -{0x04,0xFC,0x24,0x24,0xD8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"B",34*/ -{0xF8,0x04,0x04,0x04,0x0C,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"C",35*/ -{0x04,0xFC,0x04,0x04,0xF8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"D",36*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"E",37*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"F",38*/ -{0xF0,0x08,0x04,0x44,0xCC,0x40,0x00,0x01,0x02,0x02,0x01,0x00},/*"G",39*/ -{0x04,0xFC,0x20,0x20,0xFC,0x04,0x02,0x03,0x00,0x00,0x03,0x02},/*"H",40*/ -{0x04,0x04,0xFC,0x04,0x04,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"I",41*/ -{0x00,0x04,0x04,0xFC,0x04,0x04,0x06,0x04,0x04,0x03,0x00,0x00},/*"J",42*/ -{0x04,0xFC,0x24,0xD0,0x0C,0x04,0x02,0x03,0x02,0x00,0x03,0x02},/*"K",43*/ -{0x04,0xFC,0x04,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x02,0x03},/*"L",44*/ -{0xFC,0x3C,0xC0,0x3C,0xFC,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"M",45*/ -{0x04,0xFC,0x30,0xC4,0xFC,0x04,0x02,0x03,0x02,0x00,0x03,0x00},/*"N",46*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"O",47*/ -{0x04,0xFC,0x24,0x24,0x18,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"P",48*/ -{0xF8,0x84,0x84,0x04,0xF8,0x00,0x01,0x02,0x02,0x07,0x05,0x00},/*"Q",49*/ -{0x04,0xFC,0x24,0x64,0x98,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"R",50*/ -{0x18,0x24,0x24,0x44,0x8C,0x00,0x03,0x02,0x02,0x02,0x01,0x00},/*"S",51*/ -{0x0C,0x04,0xFC,0x04,0x0C,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"T",52*/ -{0x04,0xFC,0x00,0x00,0xFC,0x04,0x00,0x01,0x02,0x02,0x01,0x00},/*"U",53*/ -{0x04,0x7C,0x80,0xE0,0x1C,0x04,0x00,0x00,0x03,0x00,0x00,0x00},/*"V",54*/ -{0x1C,0xE0,0x3C,0xE0,0x1C,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"W",55*/ -{0x04,0x9C,0x60,0x9C,0x04,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"X",56*/ -{0x04,0x1C,0xE0,0x1C,0x04,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"Y",57*/ -{0x0C,0x84,0x64,0x1C,0x04,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"Z",58*/ -{0x00,0x00,0xFE,0x02,0x02,0x00,0x00,0x00,0x07,0x04,0x04,0x00},/*"[",59*/ -{0x00,0x0E,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00},/*"\",60*/ -{0x00,0x02,0x02,0xFE,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00},/*"]",61*/ -{0x00,0x04,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08},/*"_",63*/ -{0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x40,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"a",65*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"b",66*/ -{0x00,0xC0,0x20,0x20,0x60,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"c",67*/ -{0x00,0xC0,0x20,0x24,0xFC,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"d",68*/ -{0x00,0xC0,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"e",69*/ -{0x00,0x20,0xF8,0x24,0x24,0x04,0x00,0x02,0x03,0x02,0x02,0x00},/*"f",70*/ -{0x00,0x40,0xA0,0xA0,0x60,0x20,0x00,0x07,0x0A,0x0A,0x0A,0x04},/*"g",71*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"h",72*/ -{0x00,0x20,0xE4,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x20,0xE4,0x00,0x00,0x08,0x08,0x08,0x07,0x00,0x00},/*"j",74*/ -{0x04,0xFC,0x80,0xE0,0x20,0x20,0x02,0x03,0x02,0x00,0x03,0x02},/*"k",75*/ -{0x04,0x04,0xFC,0x00,0x00,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"l",76*/ -{0xE0,0x20,0xE0,0x20,0xC0,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"m",77*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"n",78*/ -{0x00,0xC0,0x20,0x20,0xC0,0x00,0x00,0x01,0x02,0x02,0x01,0x00},/*"o",79*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x08,0x0F,0x0A,0x02,0x01,0x00},/*"p",80*/ -{0x00,0xC0,0x20,0x20,0xE0,0x00,0x00,0x01,0x02,0x0A,0x0F,0x08},/*"q",81*/ -{0x20,0xE0,0x40,0x20,0x20,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x60,0xA0,0xA0,0x20,0x00,0x00,0x02,0x02,0x02,0x03,0x00},/*"s",83*/ -{0x00,0x20,0xF8,0x20,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x00},/*"t",84*/ -{0x20,0xE0,0x00,0x20,0xE0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"u",85*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x00,0x00,0x03,0x01,0x00,0x00},/*"v",86*/ -{0x60,0x80,0xE0,0x80,0x60,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"w",87*/ -{0x20,0x60,0x80,0x60,0x20,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"x",88*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x08,0x08,0x07,0x01,0x00,0x00},/*"y",89*/ -{0x00,0x20,0xA0,0x60,0x20,0x00,0x00,0x02,0x03,0x02,0x02,0x00},/*"z",90*/ -{0x00,0x00,0x20,0xDE,0x02,0x00,0x00,0x00,0x00,0x07,0x04,0x00},/*"{",91*/ -{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00},/*"|",92*/ -{0x00,0x02,0xDE,0x20,0x00,0x00,0x00,0x04,0x07,0x00,0x00,0x00},/*"}",93*/ -{0x02,0x01,0x02,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//16*16 ASCII -const unsigned char asc2_1608[][16]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00},/*"#",3*/ -{0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00},/*"$",4*/ -{0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00},/*"%",5*/ -{0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10},/*"&",6*/ -{0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},/*")",9*/ -{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},/*"*",10*/ -{0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/*"/",15*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",16*/ -{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"1",17*/ -{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",18*/ -{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},/*"3",19*/ -{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},/*"4",20*/ -{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},/*"5",21*/ -{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"6",22*/ -{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",24*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},/*"9",25*/ -{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},/*"<",28*/ -{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"=",29*/ -{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},/*">",30*/ -{0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00},/*"?",31*/ -{0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00},/*"@",32*/ -{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",33*/ -{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},/*"B",34*/ -{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",35*/ -{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},/*"D",36*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},/*"E",37*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},/*"F",38*/ -{0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},/*"G",39*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},/*"H",40*/ -{0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},/*"J",42*/ -{0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},/*"K",43*/ -{0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},/*"L",44*/ -{0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00},/*"M",45*/ -{0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},/*"N",46*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},/*"O",47*/ -{0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},/*"P",48*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},/*"Q",49*/ -{0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},/*"R",50*/ -{0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},/*"S",51*/ -{0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"T",52*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"U",53*/ -{0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},/*"V",54*/ -{0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},/*"W",55*/ -{0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},/*"X",56*/ -{0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"Y",57*/ -{0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},/*"\",60*/ -{0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},/*"a",65*/ -{0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20},/*"d",68*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},/*"e",69*/ -{0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},/*"g",71*/ -{0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"h",72*/ -{0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},/*"j",74*/ -{0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00},/*"k",75*/ -{0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"l",76*/ -{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},/*"m",77*/ -{0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"n",78*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"o",79*/ -{0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80},/*"q",81*/ -{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},/*"r",82*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},/*"s",83*/ -{0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00},/*"t",84*/ -{0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},/*"u",85*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00},/*"v",86*/ -{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},/*"w",87*/ -{0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00},/*"x",88*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00},/*"y",89*/ -{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40},/*"{",91*/ -{0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//24*24 ASICII -const unsigned char asc2_2412[][36]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x00,0x80,0x60,0x30,0x1C,0x8C,0x60,0x30,0x1C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x86,0xE6,0x9F,0x86,0x86,0x86,0x86,0xE6,0x9F,0x86,0x00,0x00,0x01,0x1F,0x01,0x01,0x01,0x01,0x01,0x1F,0x01,0x01,0x00},/*"#",3*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0xF8,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x03,0x07,0x0C,0x18,0xFF,0x70,0xE1,0x81,0x00,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x7F,0x10,0x0F,0x07,0x00,0x00},/*"$",4*/ -{0x80,0x60,0x20,0x60,0x80,0x00,0x00,0x00,0xE0,0x20,0x00,0x00,0x0F,0x30,0x20,0x30,0x9F,0x70,0xDC,0x37,0x10,0x30,0xC0,0x00,0x00,0x00,0x10,0x0E,0x03,0x00,0x07,0x18,0x10,0x18,0x07,0x00},/*"%",5*/ -{0x00,0x00,0xC0,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x1F,0x38,0xE8,0x87,0x03,0xC4,0x3C,0x04,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x0B,0x07,0x0D,0x10,0x10,0x08,0x00},/*"&",6*/ -{0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x30,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x04,0x08,0x30,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x66,0x66,0x3C,0x18,0xFF,0x18,0x3C,0x66,0x66,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"*",10*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x0C,0x00,0x00,0x00,0x00,0x00,0x80,0x70,0x1C,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x38,0x0E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"/",15*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0E,0x07,0x01,0x00},/*"0",16*/ -{0x00,0x00,0x80,0x80,0x80,0xC0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"1",17*/ -{0x00,0x80,0x40,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x03,0x03,0x00,0x80,0x40,0x20,0x38,0x1F,0x07,0x00,0x00,0x00,0x1C,0x1A,0x19,0x18,0x18,0x18,0x18,0x18,0x1F,0x00,0x00},/*"2",18*/ -{0x00,0x80,0xC0,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00},/*"3",19*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x00,0x00,0x00,0x00,0xC0,0xB0,0x88,0x86,0x81,0x80,0xFF,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00},/*"4",20*/ -{0x00,0x00,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x3F,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x00,0x07,0x0B,0x10,0x10,0x10,0x10,0x1C,0x0F,0x03,0x00,0x00},/*"5",21*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0xFC,0xFF,0x21,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x01,0x07,0x0C,0x18,0x10,0x10,0x10,0x08,0x0F,0x03,0x00},/*"6",22*/ -{0x00,0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0x60,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x87,0xEF,0x2C,0x18,0x18,0x30,0x30,0x68,0xCF,0x83,0x00,0x00,0x07,0x0F,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"8",24*/ -{0x00,0x00,0xC0,0xC0,0x20,0x20,0x20,0x20,0xC0,0x80,0x00,0x00,0x00,0x1F,0x3F,0x60,0x40,0x40,0x40,0x20,0x10,0xFF,0xFE,0x00,0x00,0x00,0x0C,0x1C,0x10,0x10,0x10,0x08,0x0F,0x03,0x00,0x00},/*"9",25*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x00,0x00,0x00,0x10,0x28,0x44,0x82,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"<",28*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x00,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x44,0x28,0x10,0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00},/*">",30*/ -{0x00,0xC0,0x20,0x20,0x10,0x10,0x10,0x10,0x30,0xE0,0xC0,0x00,0x00,0x03,0x03,0x00,0x00,0xF0,0x10,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00},/*"?",31*/ -{0x00,0x00,0x00,0xC0,0x40,0x60,0x20,0x20,0x20,0x40,0xC0,0x00,0x00,0xFC,0xFF,0x01,0xF0,0x0E,0x03,0xC1,0xFE,0x03,0x80,0x7F,0x00,0x01,0x07,0x0E,0x08,0x11,0x11,0x10,0x11,0x09,0x04,0x02},/*"@",32*/ -{0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7C,0x43,0x40,0x47,0x7F,0xF8,0x80,0x00,0x00,0x10,0x18,0x1F,0x10,0x00,0x00,0x00,0x00,0x13,0x1F,0x1C,0x10},/*"A",33*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"B",34*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0x20,0x60,0xE0,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x08,0x04,0x03,0x00},/*"C",35*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x40,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x18,0x08,0x0E,0x07,0x01,0x00},/*"D",36*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"E",37*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x01,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"F",38*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x40,0xE0,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x40,0x40,0xC0,0xC1,0x40,0x40,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x0F,0x0F,0x00,0x00},/*"G",39*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0x20,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0xFF,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10},/*"H",40*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x60,0xE0,0x80,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"J",42*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x20,0xA0,0x60,0x20,0x20,0x00,0x00,0xFF,0xFF,0x30,0x18,0x7C,0xE3,0xC0,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x01,0x13,0x1F,0x1C,0x18,0x10},/*"K",43*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"L",44*/ -{0x20,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0x20,0x00,0xFF,0x01,0x3F,0xFE,0xC0,0xE0,0x1E,0x01,0xFF,0xFF,0x00,0x10,0x1F,0x10,0x00,0x03,0x1F,0x03,0x00,0x10,0x1F,0x1F,0x10},/*"M",45*/ -{0x20,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0x00,0x03,0x07,0x1C,0x78,0xE0,0x80,0x00,0xFF,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x00},/*"N",46*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0C,0x07,0x01,0x00},/*"O",47*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x20,0x20,0x20,0x20,0x20,0x30,0x1F,0x0F,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"P",48*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x11,0x11,0x13,0x3C,0x7C,0x67,0x21,0x00},/*"Q",49*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x30,0xF0,0xD0,0x08,0x0F,0x07,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x03,0x0F,0x1C,0x10,0x10},/*"R",50*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x40,0x40,0xE0,0x00,0x00,0x07,0x0F,0x0C,0x18,0x18,0x30,0x30,0x60,0xE0,0x81,0x00,0x00,0x1F,0x0C,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"S",51*/ -{0x80,0x60,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x60,0x80,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00},/*"T",52*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x10,0x10,0x08,0x07,0x00},/*"U",53*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x07,0x7F,0xF8,0x80,0x00,0x80,0x7C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x1C,0x07,0x00,0x00,0x00,0x00},/*"V",54*/ -{0x20,0xE0,0xE0,0x20,0x00,0xE0,0xE0,0x20,0x00,0x20,0xE0,0x20,0x00,0x07,0xFF,0xF8,0xE0,0x1F,0xFF,0xFC,0xE0,0x1F,0x00,0x00,0x00,0x00,0x03,0x1F,0x03,0x00,0x01,0x1F,0x03,0x00,0x00,0x00},/*"W",55*/ -{0x00,0x20,0x60,0xE0,0xA0,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x03,0x8F,0x7C,0xF8,0xC6,0x01,0x00,0x00,0x00,0x00,0x10,0x18,0x1E,0x13,0x00,0x01,0x17,0x1F,0x18,0x10,0x00},/*"X",56*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x01,0x07,0x3E,0xF8,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00},/*"Y",57*/ -{0x00,0x80,0x60,0x20,0x20,0x20,0x20,0xA0,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x3E,0x0F,0x03,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x00,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1C,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x70,0x80,0x00},/*"\",60*/ -{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x00,0x10,0x08,0x0C,0x04,0x0C,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x00,0x00,0x04,0x04,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0xD8,0x44,0x64,0x24,0x24,0xFC,0xF8,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x10,0x08,0x1F,0x1F,0x10,0x18},/*"a",65*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x18,0x08,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x1F,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x03,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x18,0x04,0x04,0x04,0x3C,0x38,0x00,0x00,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x08,0x06,0x00,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"d",68*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x48,0x44,0x44,0x44,0x4C,0x78,0x70,0x00,0x00,0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x08,0x04,0x00},/*"e",69*/ -{0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0xE0,0xC0,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF8,0x8C,0x04,0x04,0x8C,0xF8,0x74,0x04,0x0C,0x00,0x70,0x76,0xCF,0x8D,0x8D,0x8D,0x89,0xC8,0x78,0x70,0x00},/*"g",71*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x08,0x04,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"h",72*/ -{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"j",74*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0xC0,0xF4,0x1C,0x04,0x04,0x00,0x00,0x00,0x10,0x1F,0x1F,0x11,0x00,0x03,0x1F,0x1C,0x10,0x10,0x00},/*"k",75*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"l",76*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x00,0x10,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10},/*"m",77*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x08,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"n",78*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0x18,0x0C,0x04,0x04,0x0C,0x18,0xF0,0xE0,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x0C,0x0F,0x03,0x00},/*"o",79*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x80,0xFF,0xFF,0x88,0x90,0x10,0x10,0x1C,0x0F,0x03,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xF8,0xFC,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x90,0x88,0xFF,0xFF,0x80,0x00},/*"q",81*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x10,0x08,0x04,0x04,0x0C,0x0C,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x78,0xCC,0xC4,0x84,0x84,0x84,0x0C,0x1C,0x00,0x00,0x00,0x1E,0x18,0x10,0x10,0x10,0x11,0x19,0x0F,0x06,0x00},/*"s",83*/ -{0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x10,0x10,0x10,0x0C,0x00,0x00},/*"t",84*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"u",85*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0x00,0xC4,0x3C,0x0C,0x04,0x00,0x00,0x00,0x00,0x01,0x0F,0x1E,0x0E,0x01,0x00,0x00,0x00},/*"v",86*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x3C,0xFC,0xC4,0x00,0xE4,0x7C,0xFC,0x84,0x80,0x7C,0x04,0x00,0x00,0x07,0x1F,0x07,0x00,0x00,0x07,0x1F,0x07,0x00,0x00},/*"w",87*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x1C,0x7C,0xE4,0xC0,0x34,0x1C,0x04,0x04,0x00,0x00,0x10,0x10,0x1C,0x16,0x01,0x13,0x1F,0x1C,0x18,0x10,0x00},/*"x",88*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0xC4,0x3C,0x04,0x04,0x00,0x00,0x00,0xC0,0x80,0xC1,0x37,0x0E,0x01,0x00,0x00,0x00,0x00},/*"y",89*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x04,0x04,0xC4,0xF4,0x7C,0x1C,0x04,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x11,0x10,0x10,0x18,0x0E,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x60,0x40,0x00,0x00},/*"{",91*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x00,0x04,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x18,0x06,0x02,0x02,0x04,0x08,0x10,0x20,0x20,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -const unsigned char Hzk1[][32]={ -{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"��",0*/ -{0x40,0x40,0x40,0x5F,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x5F,0x40,0x40,0x40,0x00,0x00,0x40,0x20,0x0F,0x09,0x49,0x89,0x79,0x09,0x09,0x09,0x0F,0x20,0x40,0x00,0x00},/*"��",1*/ -{0x00,0xFE,0x02,0x42,0x4A,0xCA,0x4A,0x4A,0xCA,0x4A,0x4A,0x42,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x50,0x4C,0x43,0x40,0x40,0x4F,0x50,0x50,0x5C,0x40,0xFF,0x00,0x00},/*"԰",2*/ -{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"��",3*/ -{0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",4*/ -{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"��",5*/ -{0x00,0x10,0x10,0x10,0x10,0xD0,0x30,0xFF,0x30,0xD0,0x12,0x1C,0x10,0x10,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"��",6*/ -{0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00},/*"��",7*/ -{0x00,0xFE,0x22,0x5A,0x86,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,0xFF,0x04,0x08,0x07,0x00,0xFF,0x40,0x20,0x03,0x0C,0x14,0x22,0x41,0x40,0x00},/*"��",8*/ -{0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,0x00,0x01,0x00,0x20,0x70,0x28,0x26,0x21,0x20,0x20,0x24,0x38,0x60,0x00,0x01,0x01,0x00},/*"��",9*/ -{0x00,0x10,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x12,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00},/*"˾",10*/ -}; -const unsigned char Hzk2[][72]={ -{0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFC,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; -const unsigned char Hzk3[][128]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - - -}; - -const unsigned char Hzk4[][512]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF0,0xF0,0x70,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_CH32F103/Inc/board.h b/Example/EpaperModuleTest_CH32F103/Inc/board.h deleted file mode 100644 index d07c0cf..0000000 --- a/Example/EpaperModuleTest_CH32F103/Inc/board.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __BOARD_H -#define __BOARD_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "ch32f10x.h" - - void board_button_init(void); - uint8_t board_button_getstate(void); - void board_led_init(void); - void board_led_toggle(void); - void board_led_set(uint8_t set); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_CH32F103/Inc/ch32f10x_conf.h b/Example/EpaperModuleTest_CH32F103/Inc/ch32f10x_conf.h deleted file mode 100644 index 29ba762..0000000 --- a/Example/EpaperModuleTest_CH32F103/Inc/ch32f10x_conf.h +++ /dev/null @@ -1,40 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_conf.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Library configuration file. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_CONF_H -#define __CH32F10x_CONF_H - -#include "ch32f10x_adc.h" -#include "ch32f10x_bkp.h" -#include "ch32f10x_can.h" -#include "ch32f10x_crc.h" -#include "ch32f10x_dac.h" -#include "ch32f10x_dbgmcu.h" -#include "ch32f10x_dma.h" -#include "ch32f10x_exti.h" -#include "ch32f10x_flash.h" -#include "ch32f10x_gpio.h" -#include "ch32f10x_i2c.h" -#include "ch32f10x_iwdg.h" -#include "ch32f10x_pwr.h" -#include "ch32f10x_rcc.h" -#include "ch32f10x_rtc.h" -#include "ch32f10x_spi.h" -#include "ch32f10x_tim.h" -#include "ch32f10x_usart.h" -#include "ch32f10x_wwdg.h" -#include "ch32f10x_misc.h" - - -#endif /* __CH32F10x_CONF_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/Inc/ch32f10x_it.h b/Example/EpaperModuleTest_CH32F103/Inc/ch32f10x_it.h deleted file mode 100644 index b9fdab8..0000000 --- a/Example/EpaperModuleTest_CH32F103/Inc/ch32f10x_it.h +++ /dev/null @@ -1,38 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_it.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : This file contains the headers of the interrupt handlers. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32F10x_IT_H -#define __CH32F10x_IT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32f10x.h" - -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 /* __CH32F10x_IT_H */ - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/Inc/system_ch32f10x.h b/Example/EpaperModuleTest_CH32F103/Inc/system_ch32f10x.h deleted file mode 100644 index 05811fb..0000000 --- a/Example/EpaperModuleTest_CH32F103/Inc/system_ch32f10x.h +++ /dev/null @@ -1,30 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : system_ch32f10x.h - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : CMSIS Cortex-M3 Device Peripheral Access Layer System Header File. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __SYSTEM_CH32F10x_H -#define __SYSTEM_CH32F10x_H - -#ifdef __cplusplus -extern "C" { -#endif - -extern unsigned int SystemCoreClock; /* System Clock Frequency (Core Clock) */ - -/* CH32F10x_System_Exported_Functions */ -extern void SystemInit( void ); -extern void SystemCoreClockUpdate( void ); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32F10x_SYSTEM_H */ - - - diff --git a/Example/EpaperModuleTest_CH32F103/Inc/systick.h b/Example/EpaperModuleTest_CH32F103/Inc/systick.h deleted file mode 100644 index 8a09598..0000000 --- a/Example/EpaperModuleTest_CH32F103/Inc/systick.h +++ /dev/null @@ -1,38 +0,0 @@ - -#ifndef __SYS_TICK_H -#define __SYS_TICK_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include - -#define SysTick_Freq (1000U) // Hz -#define SysTick_Tick (1000U / SysTick_Freq) - - /* configure systick */ - void systick_config(void); - /* delay a time in milliseconds */ - void delay(uint32_t count); - /* delay a time in milliseconds with low power */ - void delay_lp(uint32_t count); - /* delay decrement */ - void delay_decrement(void); - /* get system tick */ - uint32_t systick_get_tick(void); - /* suspend system tick */ - void systick_DisableIRQ(void); - /* resume system tick */ - void systick_EnableIRQ(void); - - void systick_Disable(void); - void systick_Enable(void); - void systick_deinit(void); - -#ifdef __cplusplus -} -#endif - -#endif /* SYS_TICK_H */ diff --git a/Example/EpaperModuleTest_CH32F103/MDK-ARM/DebugConfig/Target_1_CH32F103C8_1.0.0.dbgconf b/Example/EpaperModuleTest_CH32F103/MDK-ARM/DebugConfig/Target_1_CH32F103C8_1.0.0.dbgconf deleted file mode 100644 index 90dabd8..0000000 --- a/Example/EpaperModuleTest_CH32F103/MDK-ARM/DebugConfig/Target_1_CH32F103C8_1.0.0.dbgconf +++ /dev/null @@ -1,97 +0,0 @@ -// <<< Use Configuration Wizard in Context Menu >>> -// Debug MCU Configuration -// DBG_SLEEP -// Debug Sleep Mode -// 0: (FCLK=On, HCLK=Off) FCLK is clocked by the system clock as previously configured by the software while HCLK is disabled -// 1: (FCLK=On, HCLK=On) HCLK is fed by the same clock that is provided to FCLK -// DBG_STOP -// Debug Stop Mode -// 0: (FCLK=Off, HCLK=Off) Clock controller disables all clocks -// 1: (FCLK=On, HCLK=On) FCLK and HCLK are provided by the internal RC oscillator which remains active -// DBG_STANDBY -// Debug Standby Mode -// 0: (FCLK=Off, HCLK=Off) The whole digital part is unpowered. -// 1: (FCLK=On, HCLK=On) Digital part is powered and FCLK and HCLK are provided by the internal RC oscillator which remains active -// DBG_IWDG_STOP -// Debug independent watchdog stopped when core is halted -// 0: The watchdog counter clock continues even if the core is halted -// 1: The watchdog counter clock is stopped when the core is halted -// DBG_WWDG_STOP -// Debug window watchdog stopped when core is halted -// 0: The window watchdog counter clock continues even if the core is halted -// 1: The window watchdog counter clock is stopped when the core is halted -// DBG_TIM1_STOP -// Timer 1 counter stopped when core is halted -// 0: The clock of the involved Timer Counter is fed even if the core is halted -// 1: The clock of the involved Timer counter is stopped when the core is halted -// DBG_TIM2_STOP -// Timer 2 counter stopped when core is halted -// 0: The clock of the involved Timer Counter is fed even if the core is halted -// 1: The clock of the involved Timer counter is stopped when the core is halted -// DBG_TIM3_STOP -// Timer 3 counter stopped when core is halted -// 0: The clock of the involved Timer Counter is fed even if the core is halted -// 1: The clock of the involved Timer counter is stopped when the core is halted -// DBG_TIM4_STOP -// Timer 4 counter stopped when core is halted -// 0: The clock of the involved Timer Counter is fed even if the core is halted -// 1: The clock of the involved Timer counter is stopped when the core is halted -// DBG_CAN1_STOP -// Debug CAN1 stopped when Core is halted -// 0: Same behavior as in normal mode -// 1: CAN1 receive registers are frozen -// DBG_I2C1_SMBUS_TIMEOUT -// I2C1 SMBUS timeout mode stopped when Core is halted -// 0: Same behavior as in normal mode -// 1: The SMBUS timeout is frozen -// DBG_I2C2_SMBUS_TIMEOUT -// I2C2 SMBUS timeout mode stopped when Core is halted -// 0: Same behavior as in normal mode -// 1: The SMBUS timeout is frozen -// DBG_TIM8_STOP -// Timer 8 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// DBG_TIM5_STOP -// Timer 5 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// DBG_TIM6_STOP -// Timer 6 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// DBG_TIM7_STOP -// Timer 7 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// DBG_CAN2_STOP -// Debug CAN2 stopped when Core is halted -// 0: Same behavior as in normal mode -// 1: CAN2 receive registers are frozen -// DBG_TIM12_STOP -// Timer 12 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// DBG_TIM13_STOP -// Timer 13 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// DBG_TIM14_STOP -// Timer 14 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// DBG_TIM9_STOP -// Timer 9 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// DBG_TIM10_STOP -// Timer 10 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// DBG_TIM11_STOP -// Timer 11 counter stopped when core is halted -// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. -// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). -// -DbgMCU_CR = 0x00000007; -// <<< end of configuration section >>> \ No newline at end of file diff --git a/Example/EpaperModuleTest_CH32F103/MDK-ARM/EpaperModuleTest_CH32F103.uvoptx b/Example/EpaperModuleTest_CH32F103/MDK-ARM/EpaperModuleTest_CH32F103.uvoptx deleted file mode 100644 index 85f3921..0000000 --- a/Example/EpaperModuleTest_CH32F103/MDK-ARM/EpaperModuleTest_CH32F103.uvoptx +++ /dev/null @@ -1,584 +0,0 @@ - - - - 1.0 - -
    ### uVision Project, (C) Keil Software
    - - - *.c - *.s*; *.src; *.a* - *.obj; *.o - *.lib - *.txt; *.h; *.inc; *.md - *.plm - *.cpp - 0 - - - - 0 - 0 - - - - Target 1 - 0x4 - ARM-ADS - - 12000000 - - 1 - 1 - 0 - 1 - 0 - - - 1 - 65535 - 0 - 0 - 0 - - - 79 - 66 - 8 - .\Listings\ - - - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - - - 1 - 0 - 1 - - 255 - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 4 - - - - - - - - - - - Segger\JL2CM3.dll - - - - 0 - JL2CM3 - -U59423694 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0CH32F1xx.FLM -FS08000000 -FL010000 -FP0($$Device:CH32F103C8$Flash\CH32F1xx.FLM) - - - 0 - UL2CM3 - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0CH32F1xx -FS08000000 -FL010000 -FP0($$Device:CH32F103C8$Flash\CH32F1xx.FLM)) - - - - - 0 - - - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - 0 - 0 - 0 - - - - - - - - - - 1 - 1 - 0 - 2 - 10000000 - - - - - - App - 0 - 0 - 0 - 0 - - 1 - 1 - 1 - 0 - 0 - 0 - ..\Src\ch32f10x_it.c - ch32f10x_it.c - 0 - 0 - - - 1 - 2 - 1 - 0 - 0 - 0 - ..\Src\main.c - main.c - 0 - 0 - - - 1 - 3 - 1 - 0 - 0 - 0 - ..\Src\system_ch32f10x.c - system_ch32f10x.c - 0 - 0 - - - 1 - 4 - 1 - 0 - 0 - 0 - ..\Src\board.c - board.c - 0 - 0 - - - 1 - 5 - 1 - 0 - 0 - 0 - ..\Src\systick.c - systick.c - 0 - 0 - - - - - Debug - 0 - 0 - 0 - 0 - - 2 - 6 - 1 - 0 - 0 - 0 - ..\CH32F103\Debug\debug.c - debug.c - 0 - 0 - - - - - StdPeriphDriver - 0 - 0 - 0 - 0 - - 3 - 7 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_adc.c - ch32f10x_adc.c - 0 - 0 - - - 3 - 8 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_bkp.c - ch32f10x_bkp.c - 0 - 0 - - - 3 - 9 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_can.c - ch32f10x_can.c - 0 - 0 - - - 3 - 10 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_crc.c - ch32f10x_crc.c - 0 - 0 - - - 3 - 11 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_dac.c - ch32f10x_dac.c - 0 - 0 - - - 3 - 12 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_dbgmcu.c - ch32f10x_dbgmcu.c - 0 - 0 - - - 3 - 13 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_dma.c - ch32f10x_dma.c - 0 - 0 - - - 3 - 14 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_exti.c - ch32f10x_exti.c - 0 - 0 - - - 3 - 15 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_flash.c - ch32f10x_flash.c - 0 - 0 - - - 3 - 16 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_gpio.c - ch32f10x_gpio.c - 0 - 0 - - - 3 - 17 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_i2c.c - ch32f10x_i2c.c - 0 - 0 - - - 3 - 18 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_iwdg.c - ch32f10x_iwdg.c - 0 - 0 - - - 3 - 19 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_misc.c - ch32f10x_misc.c - 0 - 0 - - - 3 - 20 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_pwr.c - ch32f10x_pwr.c - 0 - 0 - - - 3 - 21 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_rcc.c - ch32f10x_rcc.c - 0 - 0 - - - 3 - 22 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_rtc.c - ch32f10x_rtc.c - 0 - 0 - - - 3 - 23 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_spi.c - ch32f10x_spi.c - 0 - 0 - - - 3 - 24 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_tim.c - ch32f10x_tim.c - 0 - 0 - - - 3 - 25 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_usart.c - ch32f10x_usart.c - 0 - 0 - - - 3 - 26 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_usb.c - ch32f10x_usb.c - 0 - 0 - - - 3 - 27 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_usb_host.c - ch32f10x_usb_host.c - 0 - 0 - - - 3 - 28 - 1 - 0 - 0 - 0 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_wwdg.c - ch32f10x_wwdg.c - 0 - 0 - - - - - Startup - 0 - 0 - 0 - 0 - - 4 - 29 - 2 - 0 - 0 - 0 - ..\CH32F103\Startup\startup_ch32f10x.s - startup_ch32f10x.s - 0 - 0 - - - - - Epaper - 0 - 0 - 0 - 0 - - 5 - 30 - 1 - 0 - 0 - 0 - ..\Epaper\epaper.c - epaper.c - 0 - 0 - - - -
    diff --git a/Example/EpaperModuleTest_CH32F103/MDK-ARM/EpaperModuleTest_CH32F103.uvprojx b/Example/EpaperModuleTest_CH32F103/MDK-ARM/EpaperModuleTest_CH32F103.uvprojx deleted file mode 100644 index 4590193..0000000 --- a/Example/EpaperModuleTest_CH32F103/MDK-ARM/EpaperModuleTest_CH32F103.uvprojx +++ /dev/null @@ -1,628 +0,0 @@ - - - - 2.1 - -
    ### uVision Project, (C) Keil Software
    - - - - Target 1 - 0x4 - ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC - 0 - - - CH32F103C8 - WCH - Keil.WCH32F1xx_DFP.1.0.1 - http://www.wch.cn/ - IRAM(0x20000000,0x5000) IROM(0x08000000,0x10000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE - - - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0CH32F1xx -FS08000000 -FL010000 -FP0($$Device:CH32F103C8$Flash\CH32F1xx.FLM)) - 0 - $$Device:CH32F103C8$Device\Include\ch32f10x.h - - - - - - - - - - $$Device:CH32F103C8$SVD\CH32F103xx.svd - 0 - 0 - - - - - - - 0 - 0 - 0 - 0 - 1 - - .\Objects\ - EpaperModuleTest - 1 - 0 - 0 - 1 - 1 - .\Listings\ - 1 - 0 - 0 - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - 0 - - - - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - SARMCM3.DLL - -REMAP - DCM.DLL - -pCM3 - SARMCM3.DLL - - TCM.DLL - -pCM3 - - - - 1 - 0 - 0 - 0 - 16 - - - - - 1 - 0 - 0 - 1 - 1 - -1 - - 1 - BIN\UL2CM3.DLL - - - - - - 0 - - - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - "Cortex-M3" - - 0 - 0 - 0 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 8 - 1 - 0 - 0 - 0 - 3 - 3 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 1 - 0x8000000 - 0x10000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8000000 - 0x10000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 4 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 2 - 0 - 0 - 1 - 0 - 0 - 3 - 4 - 1 - 1 - 0 - 0 - 0 - - - - - ..\CH32F103\CMSIS;..\CH32F103\StdPeriphDriver\inc;..\CH32F103\Debug;..\Inc;..\Epaper - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 4 - - - - - - - - - 1 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - - - - - - - - - - - - App - - - ch32f10x_it.c - 1 - ..\Src\ch32f10x_it.c - - - main.c - 1 - ..\Src\main.c - - - system_ch32f10x.c - 1 - ..\Src\system_ch32f10x.c - - - board.c - 1 - ..\Src\board.c - - - systick.c - 1 - ..\Src\systick.c - - - - - Debug - - - debug.c - 1 - ..\CH32F103\Debug\debug.c - - - - - StdPeriphDriver - - - ch32f10x_adc.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_adc.c - - - ch32f10x_bkp.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_bkp.c - - - ch32f10x_can.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_can.c - - - ch32f10x_crc.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_crc.c - - - ch32f10x_dac.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_dac.c - - - ch32f10x_dbgmcu.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_dbgmcu.c - - - ch32f10x_dma.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_dma.c - - - ch32f10x_exti.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_exti.c - - - ch32f10x_flash.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_flash.c - - - ch32f10x_gpio.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_gpio.c - - - ch32f10x_i2c.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_i2c.c - - - ch32f10x_iwdg.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_iwdg.c - - - ch32f10x_misc.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_misc.c - - - ch32f10x_pwr.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_pwr.c - - - ch32f10x_rcc.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_rcc.c - - - ch32f10x_rtc.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_rtc.c - - - ch32f10x_spi.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_spi.c - - - ch32f10x_tim.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_tim.c - - - ch32f10x_usart.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_usart.c - - - ch32f10x_usb.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_usb.c - - - ch32f10x_usb_host.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_usb_host.c - - - 2 - 0 - 0 - 0 - 0 - 0 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - - - - ch32f10x_wwdg.c - 1 - ..\CH32F103\StdPeriphDriver\src\ch32f10x_wwdg.c - - - - - Startup - - - startup_ch32f10x.s - 2 - ..\CH32F103\Startup\startup_ch32f10x.s - - - - - Epaper - - - epaper.c - 1 - ..\Epaper\epaper.c - - - - - - - - - - - - - - - - - EpaperModuleTest_CH32F103 - 1 - - - - -
    diff --git a/Example/EpaperModuleTest_CH32F103/MDK-ARM/JLinkSettings.ini b/Example/EpaperModuleTest_CH32F103/MDK-ARM/JLinkSettings.ini deleted file mode 100644 index 6e0cdc6..0000000 --- a/Example/EpaperModuleTest_CH32F103/MDK-ARM/JLinkSettings.ini +++ /dev/null @@ -1,40 +0,0 @@ -[BREAKPOINTS] -ForceImpTypeAny = 0 -ShowInfoWin = 1 -EnableFlashBP = 2 -BPDuringExecution = 0 -[CFI] -CFISize = 0x00 -CFIAddr = 0x00 -[CPU] -MonModeVTableAddr = 0xFFFFFFFF -MonModeDebug = 0 -MaxNumAPs = 0 -LowPowerHandlingMode = 0 -OverrideMemMap = 0 -AllowSimulation = 1 -ScriptFile="" -[FLASH] -EraseType = 0x00 -CacheExcludeSize = 0x00 -CacheExcludeAddr = 0x00 -MinNumBytesFlashDL = 0 -SkipProgOnCRCMatch = 1 -VerifyDownload = 1 -AllowCaching = 1 -EnableFlashDL = 2 -Override = 1 -Device="Cortex-M3" -[GENERAL] -WorkRAMSize = 0x00 -WorkRAMAddr = 0x00 -RAMUsageLimit = 0x00 -[SWO] -SWOLogFile="" -[MEM] -RdOverrideOrMask = 0x00 -RdOverrideAndMask = 0xFFFFFFFF -RdOverrideAddr = 0xFFFFFFFF -WrOverrideOrMask = 0x00 -WrOverrideAndMask = 0xFFFFFFFF -WrOverrideAddr = 0xFFFFFFFF diff --git a/Example/EpaperModuleTest_CH32F103/MDK-ARM/Objects/EpaperModuleTest.axf b/Example/EpaperModuleTest_CH32F103/MDK-ARM/Objects/EpaperModuleTest.axf deleted file mode 100644 index 2620563152aa5b99d28ba5bf372cc771c89ee996..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325072 zcmeEv4_sW;mH)l(%?yt}fngvCiId^+$4Fv~gha)dhJk?zlaMe1(ImwJ0U}fg2qdCS z%_K%8*0#~wZM3#VH|ZVzBbyr*5wOiY@mH4M?w{|;KYt+~kYcvR$`F+p5@4a~t zwCe7DKE+QTyf^opd+xdCoO|w{ci(;Y?X0K@a?Y7~D6D`H^fqH!;X4i%#;GXGxs2(+ z7ce(VV?(o;p2(T@w+hqlzvE>_l~+B%m^k0 z9l<%l*oono9&|re_+WC72br$t^8CbT&ZzS4cgmd4s`w3^=D@X}e5UWNx4H86i-nK5 zsuI?^qR}@0FjsGRErIP{g^%)m`{)YaHKvIA8a9XNo zIF?pD%oXpDqb+Sf8FjvQp8p@q(vMWXacxTKXv&HFHxd%m(UjvW0#ElBoUII1;#8u+ zCKh!yb$Ye4UU}Bhm@*Js4aKs|b3=f=ZzW$4O;@xR4gW*+{xE zHtJ0IBa2elv6?M7($0r?fJJu&jtJeETk#YACJTR)g)e+CH?+FVGn}I4tX78{XYwKK z%-kWRadlf-p8AHz<6U!mz0&rQzpSyUE#Y+M8=3juOL9jY$M*nszVTfCX_x$`|6dwI zZ7Qg5T9UrzwCs)bhsWN2n>Q6cwz_Rin{vF{Q$4IWGLA<|9LH`hQ-{{HeOq-sr$!Uj zoYwXml!Lm4MV)Il1)excax%|VsEPP5MmX_vj4j{;%24UBpYv!AT_e&ip1r1(cJ1n3 zRrsJXP&J?&FRe`)_{BhO;KqSPf!sjK-rPVH&Kq$)g>!B|iR}JL?s2wx_ce((@ZE)v zb+1Z!kmby;;PJw|O4nx7}9u&Jm^UW_9WF zJcr#hH`hgI=gHmu;cw5`-Uk4Ks)oO66fy1*TO4ZpmtbU1Q3$M0S~ z{ybubRW4$O74iG{JG;2DVDw1JW9+7r(k41=F}(SoGDGeME88+xyHQ#hm1b!rp|nD6 zX{#T9M@{$4yAY-IbHCE)p3?e?us(m@37adh`R^^8GqO4ComT07kR(K#3CU-yPWO|< zDflIcbB;%H2%mHOBxJ2Vp3QeP#!g%kbB3yiS)+zrMH#Z#NG$f=New>97VO%K@;lBh zMET)LrA2=288FL_vBC!(L3YEnhh_w;-iuwX`ClL4ft=lU?p^oZJ8tg3dtl*Sci@YA zlLGF*fn5h~sD3Y2s`>BP%L8}rZbKXM-IH@F_muG?>VD|7|IWRM4t8vi^JC1tpp8Et zVl29s9U6OkxFz?{*q`1`~HtZb5su(sjlbMV}qdj(=Z!OV9uzD z)DlW#T0r0BJXH7?EL6<>ZpeDwA)ZtICkKn2s5@DGoORzf;%2J;)e#TN!Zm|A?wL^; zJMrWPOuui$!PqVLjkwr-BO1;Wrs)Y)_l+d6_Mi^gcgJ`R{dUA$hhRI6`zepd-_iIk z_&G|Sr9I$W<9<-R$FW-3&xSXRxF5Y_By)_h5ZdWwD6_N&G{igZQGNjZhgXj{g33K8 z$>Fy~(DE9z-_w|un2?yt3LL*-Z%6gW2+KrUF`R~Okf6+YD3hr6q$gW@oGlzZ(!C0? zI*;FeUD4AEl7}`0lW*O(s>R#s)%#h&yGLdmDgdwHud_2A4)WYpAr?&t zWRCC>{Q_lF9oEWD9MSt17tA>VT-vH(N5aB_)S<57vlYGnz}tm9aY4!p+OYwy94qDQ z7}r|7e>$49zr`CKaeO6dALa1Np_T$|sJ*~7w5`Br2QCKhm()K=?FZgh83+3*|= zfBXHT%Em^of&P!<4ngleg?_W7 zPa*$Lta6AlJ~Yk?s)rq152{0tz2=4=9C}p#{@_vY2Ca%V(p{d^w!3WnS&}mo{;E{+ zwvd;Lev9Dh1Eoh|C!nWH@G&8 z>BuQK#zS1!x-r&)PDN-#S-d1K`W7miU~o;{X^Yvx!5u4jl;se&e1#A@Q|99x0dtT899vC$k{Jp%v! zXawQ+Mze5D9Ha2?=sH|g5&OnyHNqc^k|eK;k|e)}#J?EDKzNAjRDVgI?gwKhz8TYg zh%w1yMWFe^XzWB@EMYCnFSsOj;!hv6cyC?wK1OJ<4`L^>W1vSm9pkjKULRg{-63{* zW)8obeG{X>QJ#|mKYL`%Js%#~SjfpcmsP9zUma2W?ZINyrnAN>h4-Od4Iy@)#O96> zJ$$3`cOwT603VSl!bp)hmURYV(F(JDacm-`=(n`pDc3Ti|Wqk5FW{7N#~Za3mm*?l9PFu#Y|?#IWts1H9Fa~(n(c0CjIiu_-; ziO{4}g$Jjj52H=dT~YR9KIU-DZ1Z~~htFJ}dBdKv_g)Bj_Z|-4 zFi`g2FBHO_4||w?*6SnH*}4CPo?#DLH4f(!u_}I~`xqja@huh}zXmYRs;mG0NAKeq^0EH}v z@oK*pc6vYL^#;Fs_?}}9_IJTwj5zikdiR!{UwBblG-IeSfy$a4dyX|}m4V3N-9df% zzQb%E)7L~@`iZ03BF|9DqS-_4MRSL;7L^}i`}0E>w=jMz!r2+=BU=&O+ zd|Qpb^Ajxu(8 zA=BLXOe>zxw0jp)eU3rz-G?yNOWbofLRP9dPoM1cZujog9wJ#6zx8a3m+wD#IA`vK6%HXEzkRZF z&p*rdQypRZoVN~?J@u@pagg>`N8PtQca(h87o3UO;Rq(&ksMtbEX5dweJgfiKCGfG zP8f0=yNK;Mys)1w96myRdT`#s!zYfSUAdh4n01fHx@*Ff2JA-r_s3WfTCTqtr+Zoo z-88O*m}v3MHgfQtpE~dS(;4YiWz@dbj!+M@e1zK9wIfl~p=Bdayu)SOo@_YPh$|X-3fMU!Zjp$i`||DwS$^m}e}yaB;=Q*FV+`heA$DRl zObX}4HQ*KzZ~?MpufnV zUnA&aC(ap{X-bVW-4D(Px{xYooaL+0Li7Q{qa+RW0UwOYG2v;T#h7ueBk0d50Id^! z%KJmVKTP4TkLp2^lg7FOhj72u7(4N;5#Zlv!yDhPKK}c{*oighV{RRbo%s8)#sjev zJ4Rb^y>j$2T(^&2j%)Aec8nypBeZq2AJ@x3|5IpDIv&e^AP-}Jo=8rACA%ed;<*pD zqim0T5YuBP%0K9?8MCR(mxF#@4rR9*N(RXKO|Bu z_<-eSr@zG(23rJe#su1%Pga2T|BbbPTiw`~ z&Uvitjc30g=wk2Nd0u_;0?>V9jQIJX#Z!l0`w|MtE%z3BXN^?rRxQL&E9yE?Y@wRderTzPA6`=wi3TlBIkb-Q+mVk=kb z;ijIx_NETXua)3++d4mYdW%knh_7tz=;+cf?&|4iSqwiuO6X0JO++`J^pHezgpn07Wk_L{*o;a z5r>d)Fp6Vv@RLe=^+|CcSwx0TjuVS<0jxB++43<^kr9LZhKHlk#|I;ffkNN}G36^EN@3s;8XU25D2ZcFB`5(mB7n3};_zWdnqVSS z$!1&tQt~66+SjDln;D->{M2W zUmV#oo~Z&VSpl~LDFH-SlI_FeRyZOdN`UZYS$P{AB^_9%C8!i3Z2Vbq0j;!W9Oa= zKI|g8YMGR8CLNS}rp6S0VWNu_g*INelI`%Mdv>s$BJIl3($ZYE6Bn<*l(Lz#faY^Rc<>|{F~ntLbcOG{UZv@V1%%=rSsa~1?y z5V@%`8Fd))E-htq3p@g|YPu@rQg%k-0Yv$ zgT1?;90n>S3-54bA$EtLAwI=yJU>4_i)G<5F7O(w1W%ngO3M8@TjBTXJD3;pdl4@5 zuVCc`#Lj!*z=0jCyrr(HT$mg-w;$sIQ0SThiy2Y-h8`VybRWaxSgc9PKUsbwQgmfUS!ZDbnawm;=(_p1|P%Q)Eg^H6g#Ef+}lIIn1L1uQ1J#pZ|hE<3BVo9-)LF zS^*P2Vc1;CV~cH?AB3Z#p$P+JcV2z|k89~~lw z2pt1q9lniVmg5P?Cew~MUb#ie4^GkBajT>tTUBwOd|yDA@**8m4A~sxq_4z-rY}W= zRc3|3cUW_jKjo(c9C%pQVeq8HOrgXm1p-_SvLezBrGQ2e`I6>DqNw9523L%WVkiEE zPY@r_Ot3l0nML$SHL_=qEQI@TvkQ6+T1qq#)ZAkpbn4+en8Y=Z;8}j7~Q9 zMps193JHI6+}?OQWJVYz?iC~=vy?q8ASXE~#YxhLB|tltS~!Rx`5SUkP9o%R&^?QT zs-yi7O&Z!XN@*Pa0|y2vCD@YP5Ek}lgSy@*@Sq*k^C7mNVS^?;@H#w53WWN5;6S6! z5|WaVU}fS%BI93wg)$QIBLM)&0NEVlk*Kaq8YCbR01AuhQKTg^s0_h4AILK(WZ(u~ zOG|=nNzN$YlhQOj>eqEMtHuKdbYe=j(nk;!iIJB6r7qwffy_(=o5n~q(rDOUZzQy| zzodc4pux;AkqbEi{Fks|f-rFmvAAKusr;9Yt1v&cjIv$;bLv6u0v$^W>FQ2#;h#d{ z@DKLWKbkfN{o^6cz_><)S$Zr7y~(gP%%W7Ga=fZfA_lqv`f~E}=bVw_cF#%`d~BC! zmJ}u-OZP)gM^=;~{dyLPgZcfD;fUW4gYh&JG{p?l1?$VQ?dx(QhbR}@fk-+mOd$y= zk4R&dgEeNkL}b*hY3?X& z9`+;p*EF|)^K^8paTqm+@)OBL`dlCS1FUPKi(Zn$c}|IrY6y-bfMI_FF&K$Nb^;B4 zg9TX{@#pi4K~Cw3oaEE-zUMgUsAo-*|7_Z>SW?KIMW1_$lic`TK z(IX&Y>I#elS77mXR$C;}mZj;1i&S+{p{^A_Daj3fBn~Cli|6O)uqO^Qu%aH&XbNKk zqm6|JxQYi+e`G_;5J~o;##Wi!+yV=8iUahbp%A3vLTCi$wfULyuUy&5? zsetu#N)d?+j7Zo`CP4BCu-QnSn?c|(44B1qDk0!Se1x&fZn@=_Z#0rA1U>98O&Hm~ zpQz&WOkxH>28BQ`66huQ%2_B5at}K_sOS*ZgES=w5(wDfPat5kd_+9JNbF8oKc#?D zp93*LObH-_z8{#3KGd5_J|OIENg>9GJVP7)FrwM0}rEF*6-5 zj%L&05aCa986Fmmgh+y6xRuoFMI%K=q_NO@BTkGUKKzJ^D7s$v>K)hNz!jcKO*f}2 zA|iv0=m(>N2x6KpB`enb`&|@HNOQY)y3^1Jpx0}R029^Gj27yJcXYpao?E!RJ5@!k zc8i{35FPFys6ZdhE`IHL^@$bGIw38~?M_aZ;ifh+a${Aop!jo_NVHHhOm;FB*Bz6F zqK|TDh0#cy2albU0Q#(n(|UsvU$$k-imX`HiY;5pB!XH(^N7fRn~s>cN`#%pq_zEi zm@a~Yjg2kI)IqC2t>|d6EYnE0R|?T6nl2-r%1dt?i~uxjBlPD9sjzfbsu+;KV+W%K zJ$_=QheEFGY+Qgtw}nIUQB?wqv#G=P&YhD*M>f$6S|kiKV1M?}2=L?@0LVAwF&Guj zI(TT{x?Px#jzlC{=7w;zQ67XYp(ZtJIEr9GGV$@sGK&oQk(+R#@mP*U#Nm=4(ge|< zWE5>gVlquscpd_%?<6n|VID)V>)%?Gl~q{S_VhI*vqqUop$ADZUDzzIgV#yG;l^4++N z1w=Ct22W^3Iu?=HI(BBB<{h%3-@!?eU@slcAcKDB$p6*UhbcoI^ z5{-g49g!UY|EirM5#*GWO&PL`Y_D67M#04JpO~mO!a1aWnRb?Csy9YOUX&J%5B`O( zLU0v>Zo$Vd%EItd@@L5>OCx_aXpmcke3?|-L7dFI+*vM*rf~ud7c@jG59u8KC?M!g zjr8E-Xu}P8=&2axMYQ5q=7nYNpc(Bhl>Gc$Ca0tju9) zB5I5tFxepD>pMpNjT7FT<;!4vc6OF~QeHe^<%rdeSuG}Yx;PFNt> z)d2XsI52a8LxxS&2%^!c7@lCTZ97yiRS@e?Q@RNhJjN}oFb+Y2$4&!}#>4@`+o(Qf z5Dsr0NaApa8;p;cnC*X|yd^(>oJN^xupUYa?u_xQ>~bWRSS$~ zJTsfIo12r|q9b0=Xu^ds)DU^4$@?3V4Qkm4W-!aE`n!PwBS9tY zFKQ1}Gcbw8$flGk-sKV$Ke|V5bU1Dt>BAII_x7j1`qi)QeUf-i(hF)igznOrO_#>R zM5Doq2+X2`#Ag34W2c}R95maX$$3Qvk3)YX1e0|5G*v+eq)!sb$oG`I1Rk0-4n<5d8V-#}DJiPpEut_E z46Mwcy$Z^PMuFc5lLVrcJ`cyf}a1H_$u+3KIKrvEZATN?9+s{($1bvRt_7h;Ra zh#1XCNO`j{l+|_;d`D!MMRtqhrMqsv;kw-fMAb7!cF0*wE|Gifd1b{JbmRL9!s6jU48lVPna9c8P1muL zH`5{Rh++=(Y%#yCrr^PnAKg1{kX#YmvB@bZj-|H+^K*1Pzqk<-ddS}+(%$Ux2=yU# z35iq^R|0K^IN*2U7#suIKw;zqF8s9T>hYBDl189^|uu$cmHy2FGhEIo2fJ}CWU zoXbVn1Z6^Enb&00hvZM`Pa!2*aj$2;5TzZKVZxr0ULl{Ed`w9xylXP$)bP~lr>30> zJ7IC#R0P2J<9K_y_-%L=iPP9aVqv^|bOrPj`rC;=W|(H`a&sl|i)CUj3cVQMaqL%- z8NmBH=!EyrLZ^{{xVu(6OtxH69j*ioucyjGakxa=NO&{Ol#u7Jv(W}BIUrRr_cJp@ z4D(rX^2%ftshsIt)lSzkoTq8&+{4}I*<2G*=wRXqiU*;Ygt5dp5I{o7A<2%UB*`Yi zq)4$N@TP(Z5^<^t(B!?5Rh+jwjw0gp`HVF3IG~!UC1WBzgMt*uEMThUMdVBon8Dbr zWJHk&jLlAFGLS_$OuNz){9H4B3C1m_NeT*j2~UA}$&7w{Gr&1Cs~9DaErTd26SoXK ze~t+xC(lSu0qfi}A!gor;wRsUAF}@G6ku#V{V3peh6q3{^n?_#AOjggEtKFw3R2)q ziDPV02J|>91EMgt7&E@?Y>HWyBIyeyKq;1(c*cq{ILWs(gApBG;-mm$=PX9b34I<6vA=KTK9KF@l68v_FoP;u5knjTh& zK-siXfUzx3@pCEtP(^QZ8nQChZUm9)i!z8uA7(W1?=S(GbEip9aa)NY)yFOo0FQ1{ z12XpI5-3So0iZ_$-dQA9uL&^LcaEsR+b$3m-Tpa-2>^CQI;XalvHlfC0ET8;K8p{P}!7 zxojU_pO0IfPr;6N;n6LX1(h$s-<<>>m<(fcB|H59%E1o5fk&Zs_^wIx58L?Bu;&)+ zA4LNZv1kf#2lg{T8kUe+n$d5=zX`qv0GDQb`D=)_=*N-X54bGj>OBf#h|e+*><7MX z5}xvV6t1xl_|lB41s~zpz#jr0{g=h}%}I1R;wZg0k!kZ0M0(1vDk+0K@yoL0GWy9k zXbQ2;Z-t=QvBz<(dL8IC65UV!?Uw->7EqpT;8h7;IO_Y z9fU0x1E$uLWT}L$d&bd?*{(u4nX-|r12&jsy$vvxn<@L>Oo9&rCS6EYlKoAZMVmHCZhOuq~^SG@tAP@2)BY^Taj6!V@OVa64QQ;G-lgl@^VAhq7UJfk2FL# zIsX>qK|X5W*VuKAOcAGpmSk9lIO>~hZNPd{XOjlYI}Dpyx{=+`95H6n+>3HtF_F*b zC)2$45j3O|)${%trabX_ZpJ-~xR!}|SnWd#{6>~}Je^r5??pO{nXGnE159ydd%GWL zy8)MFY~Pc3t#)0)^{xTuUdIjUS7bY5*8NN)|FVoL_qeWgUgx-89UuymkDki3R|TJK zAIaxo)R|&IH<8aG;HXTp5Pv|#_nyk9EaP$|n3QovS+dZFY_)NE4-UJjVrF!Dcw zR|2;CteH<3z8pq;S;iFklxBRf8re{XW9ok++A@r4$ydrUuG-`JnlqU3r6=O?_afe? z14ew6h$mZ%P`m*+|^@|tRw{LCk*w)fo-`m&HzO`?08w+%Gc6V)U-P*TY2O+i_=S<`DHCj&poH*5?DDhtT6vV zOjB@|@v?t&TT>6FJ)OO6T|Ir64|O6(hH-C4*VapQx`0;Owsj(Pf`u@X#W6B{9F8*z zBdWNek9lrnyjUk_$+-l6oAL7nxU`7CgN!d1;JM2P{5!@k(8Jrzv=1|my$A@DiGRj; ziG*e9-!Sf%uuOi8@lwI9p`*2_*UEpD4QEMFX+v7FgltGlqSZ1B8&Al!){eBKTW7~w zGFIEMmZV{s*A`Pym|}e#C0PP@Q5u+zP7Zc zuA!`HTT2aUDRX}wErOEA3_P~WXsK%5dTC!9bFUFG4kM z(!^>8R&2^)a7Z$6mDrAiBo20TT@mQo+Sk+7VJ1sqVJTN=YkObamEEo7ty`Gq4~!S8 z3*S*qrh$&G=F7|^ro@48b(M)zjGO}D%2E?&%3lQ^hWsYlW#%ZDPRRB)&dbObUYYmF zePSAT!-j9+R&D`?zjtb(nhUowK672y*0oK&mo;tfXbo-cYY^C;nQL1+yLzr%+qAXm z($-Ei^%CDVvus;$uxVR|0dJeRz83^G%=VeJ7X_L+IwbvgP8YGR>Y@7h1cdp{!<& zjLwqq`mhA&NU*MERYRb9t;EfhIMe>85ok#2rLbX_c@#Fx;hPyMf<6_7CuAF7jbx}3 zSY*ZK7@!fGJF_+%GL*@qu#s0j^hXP4#GEc6BW}Kg3`x!qDla*wVToa*0`jWT4otmC z0Tz%cFK)W5b$z!)EF?sw;gM&uFx8X>YOa{)cZ_dP(?x6A=P7c8w{L4+TEslX4&FE` zT{MJ!o{&H@={(DV$i&+}7(29IAj_!l$7GU2Tb-Z2|t zqCVu{ofHPiPaS;gtUjR)G$BQplXqwJ2}OV*a*vZ=KD$ro01Oi4J9*FSFj0$yye}h6 zgdz>!<_UvFQ1k7cKA{1mC)S^L@_sNP;ejF6olbrwFeEoHV7=4HuYzdAnpEdIJYgaf zY514Z!=Mq={Oa_Kr;~YRMNLh04NGR3wd(_cirQM1%vrdir>Co@wy&vgTQ5xGly6|VG4RRlu zxaOjY^1}EC#mvp3ifC038_69kZh2sDcTJ|jmmNs<7P5kZPYu+$_-l?0HL2;3II zGLyg~3C@uOnHIr0Cc!L8AZmw_mt_$cwLr<6D+$h%9K066c_s&+B!JJ847x=C2bWsp zN`mtxLB2(BzDY1&5-cf{6ewZCl)xA~7W%5m`6K~K-6XJVx!6}1j#I!DObW}GMMP0+ zuvn%(|0}y7-d)&C$TJikwIdV;s%SP$g=PzgTyGu`Z$SY<1ZK_ zMoBitNh~98mLy;+OxF@8v3z!mL1I|9Ely%t_lpLJVcm{6iDlib28m(a?l_5M-5!I) zux?+R#Io*ogT%0If1Jd!?o|efVci{Z63e<*8zjQIYF;GX7T|43;bm&xZf+0>`>J_+ zY($2E)x7IWB4J@QZ@@-mm{`rb!5{)}*jUZG(MDt#S`VZZ?U8 zoz=WsY($2k)x5tkiG-!qy!|#J!_;ctZ6=YhwVHRkjmR*zn)h9kNLX9VJ76O+%&q3# zWfBQ{t9b`)M25lDyziSthQ;rW6D_kW{sWW9u=u?;BFp0Un?#1i57~$;iyttEZ{-ci=oALsnr8T>2Y{0=zR*f|5RaV99v znV?CWgP~ycDZH^}^A_;Ff1c*EdVhu>R3{Pfl^hZ(*xu3C+EdedX*;&&?1@YEja2?^ zq&}e^a*C0Lsk3c70+nqLx=#`VMMT`uR}zG>AP6Inb#)c%40B}qFxaAwfTFT|Wf%LyglFV~S8Y;Z1?#}k~regHx>$TZ}d9Fn4 zAyvIATXIc~bA@EzLgbL@3(9T_n|$O&9KPV%KyZ~12W>=r%m81cX%93BAgPU$+!!Z; zCrXliASop=3^upKY2b*GWowp_Q4RUE8SBlc}}ZgwfY;Et>iVhOO0*h z^%XZCL@xi3x6DSwe6<(HD@4tbqB3}@;RBklY61)oDYiwU0?6nhDQ~7pZon8B333C( zIH+9GOLE;;H37~?yr7rS1-|lXQ;-JkJpu-rt@Db%EAZo-M%;-M(gY1w!pBpyhbw9d~4$Xng+}nm{SIEmLH_^ zmmtV+J_K1;7c`PG0R#*P1y5Teu1yltUYvpvZi9ADVwjlEDquRBz_x{VsjX` zFK&wX;8@xz3oHz7Uf;!GBdGhgj?g{#Zrruj++--p~^ zDe#gnn5{OPA-KwHv>hm(xHD9*uQP!ZUskiJAO% zKU`vSf-l!s{z5k82HU)z;No-i*piv#*wV-XaGb=NH6Nj_F3 z=E>Ls%Wv&-OqlBY=sBjEFnmCAD2#KkdX6GrpmIro#xP`pWpN6t>o^w_MHWSIoWkln zmV;ucMX@4IVRauXL9xuD@W&~vnU69wdS(Yv9*?)CJuo%3wlv{=Q`T~u4^3Um z;bTQo?kU}r(i?-PDZO-+Sw*MvQ1c6eDe(^6rBtn1a%uuiL=>GGfl+LEU`k%_ z4jO-o1s%OsHHUwkCW?UdeVTfHX?J_qG$@3EuVOtP7IkDCRCuPir>yO6ZEeA$?X{Ix z;Sr@BS0qr19d(W*Q|0}rOln#16~^Z(884~^6KX3OFubAXpCTuL2x0QEs=Bl;v~Cqk zcGx4ryLpW}SKvhaR~ z!zZM~@;yuVg`-VU9P1G^SlUzVTp;g`8elGm5i4iJQE9v8t67gJOm~{1Zk$Z zy$_#ZqVE@Zf(lz&;Nzuyud;t!a)CCarz~nW{dQM;;b-namuf#&ea0j9A|o`>Z~?# z7G?3jtIoPalC8bBVe__LNGBI6G&MAU2y2~;g$wNbKdR1sTrju-%idZMeW_4|W?d=F z&cDgw{EnRhYhjx#5&=M8hx2akYM>k?o2iJNcQ_B7Le$WORfuGs;(bo%LtF@bMH3wG zqr|T7Ywv9BqArc5hS>QBoz9;~5iJv(|A^E1Jw+%cm+y)q_?6Rnza81oEx)-XB5!s% ze<~w|4yFp8cUh|;m5a{aY>cQra-%4=)(3##4?z#fYH%T$mqmVIi*vf3hC*teP!W3o@ zem$vQo>({k7uPxeAJt8Ih2sI73tvayE6mP3?P$K3@8b3r`x?&5*7i%=Y-1V`Em!!N zt)k|WL=&+|K51`bM2B01F0mZOfKz2gWmnQtQaMs|8+`0IkI^24E5hXsVY)ZQ8Y9NB zK_`w56xLMjW6KsS5}gKpFTD$}1Lr9XWV+``roPHOzh)e-oW8|9zr}KArj7_qGE;Xc zp0^nP0>i5|M3ctUZzvwTxDU+j0+Ywo?U-Stx~NYv5m1?2%9!hZhTc!3V;JWr_5*P* z@Rx6p=iJy=3ftzQ3W%!@_XTu35%+;l@V?Lg>fKNIX1r2`GQb}7)*Cz2>thom3%0$V z(~AiRdTrw?jGr_2tcHf|O${Ab*}%f_py$Vo2Ym}8isox*=%ua+6QW-cZ!{P%Ca(x~ zum%61G&F4K?&@vm17#0htiWp0h6W($l^^Of8yY${3m(k#8z3;fB*`)L#Cekn34$Rk z6b*~3r<7yu?B$dT-ipF1U9{X1qM?=zZ0+fhU@nlLXliZR+-|1YB~w{Ak#;gta3G{8 z$9gnxQ~7RSZEdKwz8Rl>ZD{UXIt@Bbyy?g)v7ghze^4AbG}3PE+1}b>J;7v-)0{aM zS~Ca^?#Q{w2B|p#8>HlHvOzp&oejeF7yqU>vNto&5te<0jKBlYaIJi{#ym?o{~Z>d z?ok~%AuMGvo}e;E;_NBKnhl2EQU${eJkBr_XSj#+55VvZ$H!yHXXS(fp@vXh1D>nW z;1tg2aJl1|+t8YpQx_-V31&)6o0}<>|24CH;1F8gW7D!fuH_dMz8?z*o_0ENwuWm$ z_QJ`|sSVdw;KdwMChnV38}wAQFF8dfUsvL$3{>MWW_6XA4riXH75=Zt=byAaUiDg+ zXSsu8Wlcz|02o(bD)n}k$cN9i&yRc3Ra$5Ckd;6@>NrcKC57rQPfdY#BY?;QTz%b2 zBAzcbQW8bom2gTXXj-;Y5=Ff|!4xY%^WEQ|B&zzrsYx(Zeh(#4)u*i_rL-~vPlB;x zNj+*LIWMltGE7NO5{G(?=J7lDTUZzs3Nz39l)|Onrb)T3amJHixlyV^%^Oa@Y&orP zTMi)NHM&7#&HlQJLh`vH^PEty*2J;!Yspys7znQql{3#R;%P%jJd0lLpp_LD)zK0t z3ggLgNIcsk0F$`%5Ql|{kw8B`= zV}%QSYu5%#4WebfGAmr{E47GLsQZ&3E!sw3n3lMtL2y5qAV@k?V!F@>R;m9YC{;#$ zfjl4aVf8-*5(}5{8UT>%fNWI%J4qVVww@V}*qag82Md)-HEBsHh8^VMeV(s5@i7NJ*1nnI z$fg%K{P>~QFFIV=;+>D>4tNaR)GfTl9nsau3{R%Uvtj4z8r;8K;i9Uye}+`=cdiNg z-ROeDabF!hU6jtJK5kH^#tEU|Lm=Ga#bR=UaL}v1aVlXEUa$e-6CgBAADO3qBUR=N zkxbK~dT9yZI8QxfL@ta+q9UD6kv?CQ^eQYT%=T508{UHTf)8Y?e=rhFtV)}Z=;3T% zI8+V}L^&h?R5Ajd69CLczzYJvLRtb|6af5&fT#eVF#)d#09q07ngAd<0dHpe0wKKh zAb?>37-^0Rz(_M903*$KHvBK_!Ye280V4DCxcE0+>ca12)K74cz{Y@hqAQ&w5Dr<8 zhUaDRIMnH?ii)rm>xPlmTTrGiSY1_afwa&_nvho4;B~Mtq^BIPxT~~wjREBQg6r1> z>O$4)3`BwYjI28FFRS$12MCVo`nUe0@I33h{7j$^)5;m*P zFjs$I5bm~dgeJZuHSak01x3S2o)&QdFl*Bu0HPhIm;smimcisbTTOtD&0un)%U4$u zTD6L*ws7BhK4Yn{@ZWj95LO44p=Cm*gc+WvK05Q1B0^32AxRV`ht@)cPaT*gdCia80TuBB@It)~RF#I-(p)^s3Oyz&2_XWs41o{_v(=v($!%+MQCn9e zt9f^4`^qaWl6{|=_oRU8HiofilmvMy8xQF5v{E*l_b2kP1a;xR%y#?A<9!5RP}f6%2G(oMzL6G?V~{T1i#7P|P3EsBs`9P4%c&aI^p|bhvISGUo?l}_!WBod z_)n5&H8hAmySBA2+|%AguU)U|>Dt!ajy(~K$<_&YhWXA*anIDT&3Mfl?~~h-)pd5u z;TgN&hB^F&Ra3DSHlIA7%2xdS9R7+WSH)KG264@WBuy#q%EgPs?1DGv@Dq0K zHafx9Mto`xH_zoaq?nqQxA#t+#n4>-ofNwQc)u8CfdIzb@JHtH{#<^@%7d(HOKnTY zRvbKy|JWi7VE=}m4n-{Zu&+fGDNqI`7Ej#uhuK$UJ%@rP-?%9#H;)!hj z(;22`!fP(V!U}pYVe=R%{&pErFMoR(5~IrL{6A*cJl0J8=W4_RE-SvT^Ot7in(e}s zcxho*XQtGrOu_6rxwm1pyzp#RI1S2 zc1rQH3x1TtkEPBLtyODtE4MpzBjT|16$pUSy&6j;dB0MzA z<*!;5&erZ>0^}4kcN>ix9u55_m){H3jco<6*Tj}~G?BuzNGHbY*l(cME+rxHPsgPB z@mfrS_rkPDF%4!zS71)%QQTF_8PDQT&M!_fq;I&iwXcEHz~fD!uC0(v^~a&VZEnfb zy|uH!-1TG{*x%?L}goIlR_t$YR?3O*ut6)_6`xl{G;#1qPC zpmY|dR@*SyZ|s<)K5sn3j^Qx?4*0gMT#e_Pn>)Lw!8GAAXf{HcOBz0WbHJk-Y=ikK4Zlb5^-f~!_3`|?YMq`n0DKP-yZ?q zfXDYV8NfH@Zfcjo8wqVLtGTIM--P}LgG!=mM%1QG8Ll9*e$4BN2gEm3>Km>!0RDMA zq@#n@PZ<6=9m|Hwg|=&4q@Zm6S>bm~E}PoE9vY@|laQW2wHw87HFR&sN;$GlBZZsW zutf3_6hj$7R5qCZrPzECE7m^!-QJeY3?nqK;2B(*v4YXCQp?J==VT=}Mz8<2%j z63R_=%WW>b!EJMC+Q*N|aT=EgZO2I4MZN+ZN}>wC(_S95Sf>VK+NQ0ScA&K}X*${y#;$1^$shTbpwy;I>ZO!^p)~%xrYN2D~_)oZdF3 ztubl4%oeOoK-bnxWA2hCRX#d-VN_N7R+!l&C%2kl=64BUH}gw^!m{fVBHjYOPoT}r zHv`^ethN%xwv!OXiYtNWAVdoqD;mjf6aZQ)0)hZGY$$EPwr&PSxoN|~O&jf)rIete z7u^D-&;iw#clGsQZ7TMeW1fGPWoa98PsjG3%8}|pffKVHqx>pty=kIoyU?z00Z~DL zg9sE+;D-ogBY?v(z5STBfIW<}AG()Zr|@CB|Ms?a(EA3oAdqpBas%{kmpIYQbxJ!> z?*{iEi%dr!plxz*#`z@K;rj~zz1j0p7GhHj57-ykVo!>0Id8 zgvx~B0NtSdt+Z49^tKaiHS9%yAI5s6k{1>JsNGJzt$p3?{jD7sDH&uhlBw+N)3;&Y zc6t?+3Z{UO+*1m81@o@>S_)%SN%vko2ybY>2$ZG?`1;fh4Mqg7qs`fIL~%}I`_N|u=rae)=&9N7 zcn(V5MD2&}@`&PR8tX{qPfFb=bxeVdCh7@G$7x>YslQl(^A+e=a=n5ryTm*Oc2CA` zTrI7w-Mt;Sh?`n&(hfuU_V|6S2USEK(|kNkpW48e6f}H_!<>{}iDB_IihR=w`$5Nh zP*JhX1oZXShKX-p)d0n3eNQ10KTga=;?9xRWeH17@3xUXRgwgqo`9WJ?pF9O6g02zJ^0Yan=7 zZ+;!WN61ing*gr($pd7LLGCmR1#?7kPUHTAJ`c1S=K$H_cl^6h*+jhp)#dTp^wyC+ zlT?KBMbhy#ekF7?Q4Vw|T{i4F0w<&z17y`9-HOL;#jK*yv z+bG_;ryVo!d<^g7(9=sdy{@F(RJjpv-5D!4#H(z|O;zyvY3}p%3ARSE4L%?mI?5AK z>?TS__rEz82p;yx`W?m3G;XguaOb}rXC3MKJN^#3X%mG3jd4tK9qE&M*Wo-Mb^IN4 zG*NY*6&-QEru_}hH>Hk0gN`Pu?X#jI8e#4GIEyjc0$+U)I+~~*pA{WxeZnZtJyOT- zLPry|@3W#KLqD5@^C_w0Ug&6|4q7_i9lux7rr|oE?xx=6qK3laLTpgC^=yWnuHE?< z>Pz&JB0@(5x_EvZeQsefbKfk`_b#;1Ma!08b;Ch{zP*spl~-Mc6%G#x%*f{q3}~Jd zm<=Tc20QTmr@$OAG0T|yj{>9nL9-EC`j~r#xNA`gPE{{s+Qx>q_RXz5Tbuf5F^stB zcdCV$7ws1NLeN$q%-xG`O*++wJ>vPnuqdm8c%tCo6Ti!bWd_^2@kK)M8(*E+`>EG) z;j=$Yy`AFYgy(E&x`h27ZP|f4QVlaZS|;A&Rm5W5hDz*EM%$uMlpCkAZf(dy5<+~b zmOh^*KeJ`h6B;-Enu0Am4aueH9`WhNplMwpsn`)-#RM|km7TYSOGVnql{ zKWmElAulV2uz0AiDaPl#Og4nW!yipCSKyivgcM)B#phncC&bJMLXuI$sGucYKj}H} z$J?twev9ufe-$5nq!{0v*Sr|yt$an{_d8SMm+xqicKj0co2aA_hF1!Z&Tk3Viw1Bf<13kck7|Hnop0KU;RDk3-W3 z&~JyGOYXx9#Hvf$nbxAL&KAba*s95<+D3?Vtyk2_O@ZbC+-#VOJ^WerFZx*dEb=k3*TX9BG0a6bvy5A@ zlkK$-6Fagdi>>A4Z7*}bj5?iysQSLnZrVmnEce*d)V;Y`e)5tY7{3Z$o6tkHUfSBz z(!RaD1wDqKdzK=$^fZZm=bAbu#0^rMXdC-CH}x9tfxQpp#`so=RCf3zn%Epgxv5e3 z`lo7xr^h}y2k_Z>`V>8zDO=zlI8taEQrf$7sy5gpucVR#AzI-7Si;zD0~G1vZEzRR zAEOPf2bnlNRhu$B>`XR3jI$qhF8Mo!zo58GJIC8#ljy)i>;8+BPTh z@%pUkVXqruD{{6d*$WTK{>X*BMEh&T(Y&zD37wcuoYeaMNt&wo)3m+Q!%pN=Z{Tdi zI_r{0Xns++m1uX(xGXYEyt1w}zzJ>cZ&8bvBf@HPX{7-j{!e4O>9JSVqYBf0iL(t` z*p&QO;XiP?s2>pDg%F>)7B52ymorHl$#xToWVf@IA|`hI+kukDXV`|%!G5pee9f@o z^_C5bpHZ)0Zx7pAjk~aLwsW!w?TH~ny?E2xGuwOswa2p=rm;46nBpkvI(fecX+9ar+;0~#HUp0rsOm~X)^~SwbZ+awPT@3E+61V#YgJ27(^p??k-rv^ zIwBb>jN9bn-+Onq_fCh60uRFJ?#Ee=UGYi|D?HC7-Z?klE*Gz{8&90LNsBj*(8$qF zNfXGV8=Zql9G}W&(_}Bfzk$7O!`V0&Hv4;p|C8bp&+Np+m3WDtn&xGR^yUnoJ zr@9}TCiWVDt;mTAPs0t_%L?D6BpN=})PlX?@ht|r6M*TA2dWxA%a=cAEpfRFo*t|ql}kivcylwb^#&HZ|Cl47_N}y-S`2{d<01QuQaz~gkmIuWD5(5H z%0kTb*SEB8-gfCU*!#eXiMW28;d!w76AHiDn2bZ8y|r(Puqxvw5k1Fl-`unfud&jm zI_OHLR!O)ooEVu{igoKe`(*hgaJ?Fw&o zZb9qN%(&+nW|EY{WbG|9j}GJ(0Qv6A&tYtftsOuF50hbV;L+A+z&;02fuF%yg$-6{ zdG~5pIepBcVJ+TaFyrX)I@QU|@T>a}rq`Cq$8JMd9=0`16Ye{vm#=K>ZlFoyE~w^I zaT})tfsc6zy`3tCK00YTjMFw>XYMC6J@(Rh4o%8&oUdSy;?P_Ct{_GV1_~<`S=Wz% zc%1@2L*Q3d`Mx=wb*{%Mm@POr=y35r;`3E5@x2zjywKd!+KFz6ag$`+(0J1Q&-5ze zO6YnK&V!^cZVDGleHk|++;~opS9Q11(gf;!PY1kVo7hH4z&z{<-m1L33R_u&O%+al zma~;t!U=*u6!>+(VMVLP&-O|@q9(P6)5~UsnM~`zIZigaLE*Dp<_=TMa;q(FQWV2j zSd;#1)DJ%rd;uq)7wtO8lL1r zpK;O``xnf!=_{8kn-mW~+mBeX+z(4kQLm?q9q>Yl_At)+T-+WGC_F1smiy*yeSKY9 zY4bQ*MS^V{#JVk$`Z?I-lF9ERi7GIiZSg4V@G8y&utmvUg{K%kVc0^tg-P_NpS3rR zDcX|hXRC3TU3gVJo>l#Ee}5rGvYbQH&O_JB3z+ldm_nPnf)ag4r)l zFQ0i6PkC;HEp8z@+^OK><@RkC>$=Xv!v~Y59@f~1)hIoE>$?Lq;-VEU$6*`grv8nU zwH4+<6^ZI2cd_kPX&*aGFB^4Fsz!34>7@Qt=iQT@)*OR9oGPXs#6Y9!)OKZ>>{r== zd4|*syb?Y?KG*OIh3ig|A5#tg#!QMGaEo{sg9skx>NSeo3?PGT>}&1sW1bOsN!te7 zxP1MvvPq6tj3FA0-oFc8vz}6j^)nu((akxbe+aZVZ0)q^Pt(Mn-It1;N9YSOKUqyK zLi%tMizVDopNd_|+`m2*i>2Hz3v4$H*Sp1jF%6sX-JIWsh;OmsdQ;uoo14TowD(Pe zk?t*Mm#C|{Wg*(8w>j^pHo6XT6V?i6JeZawPZ$m|45LmO=T0x3AI9YLKjDm$&cpbE zm21-CZEjM$VAhFguk&4)vZLv_f-|A>pYSCwOxs~%do4z_<^ptX(!43Pp5p#(dX+P+ zkfMIIn{>uJ&P6W!ntpCZGb~@F<2cS~?bo!{`v#m3lfL*+bERvF_ZzrLm1(Fw{oAku z@N4p2wn+N+a@Q$ud~lPdKx#eh%lZJ?ue)$olFsjNzQ}dz3ozUyq7BjIG41uHMFphR zK0|Mx>(qCGxJg7G*OSMzZ_B8xX+h2lq&M2K443@{DQ-r$7#h<&jEc`cWB9|EYX&~u zXnZ)4(JN%ew%-iF(AMU9+;~~IR`ZkWNNR-JhzGvYZG4It0NskxxRa~ca-6#|oar+WzBdFM9x@NgDGJ*Nh9A~m?wlkfgPMe9zP{M&=zAMYQ zFav=!gFeHVG}GzKa3;)jrp$CEs8_o(Tyqhh=*q=4Sx_Y|%T#v)nyX%g2sI(YnW0`u zOcK;2*Bo_chAY#c_o`j4(?tYDd(}={lOQCRQgULBtg|6ZmMa^f9tmplnNFwL@0x?WmI{PRzCmbkeh~EVDO8Ql}C=0np`xEC) zn_z<@w#cTuRhL&}@MSXoEEpZoX~J?UEX36vr#n?uO5>!0axTDm7MVnK6*)B`cd9!` zDuXJ?H5;-Ur!&Dd6EXeS&LlO(H3ypR5QL;uq9~^XvN!(D!AYzWp{gj2B3XV}RDKCm ze(AFOoNA&-po18tfNO$lF|Kpf2G^PR#kZCObP28+`3#Y86+H2aZzN?X3d(JVs4t(` zcC<$?m|;6>S#B;@09i+0B~Q+F;@zf2B|I+KnN*?0lmAlsQnL5{MRW6E*p z)5-C$v=g?sg`H+Qoq6C&<*ZWWLb;(DKy4BXZ*aSoWa25htTIkl9wM$5Wk%&Igj3Zo zWjmc&D8aeFZ2^wFW3DT6Cj3F&k)fu~LEJo3=E$d$xnIhREn^{bX6FBA?mfWdDz5Zz zjYgxjaah}c*I{jsaaeHLnURphuGi~{(x6F9w*p>vdu5P8wvez8HugG@bIuu&bIv&@ zlXK2F=ZxY1zNf;iQ&sm03;aFb=oxiS*RM{Us`u2Xy0>rNMhoLtK!8fVXu|w$`S<33 zz^I{U1;n4Yj-bT=GY~hHRp1|de66=^KH$bM)DO2?b#nv_jYqoR8ZrKd_@!I+@3Ac= zmY1=u<4s$*ZE0Csu3bz$M7hkH`ODTX-rE!Xy2`dCD<0=$GXj7U{Ywl##)KqasOsAL z-(_o$H`PRYxYZ`(4@1U)kul^r+Fv(*^<`^g6Vt|t(gs|1W@UYCMvhrVySyK4pya@{d6SR4P_9V6#16TuO zso(b(78%y435AB`F_K@ycu(g#vZp-+uV>Th>VxZqNyUP`u zw-O%!EI0leE(eb+Tf4le9Soh!cE2GJ%D(&%R?(MbjCSsIHyjvvq*wtQyGE=4ei_`v^T$C~wN8RL#O zB18XgL;uYtbL#kZNk@!3yy>(ou`!?PYjg8WGNxn48UL2i)*pXjzcZ%kD_{9a^C!Oib^Lto>tFj?^Mhl)%m9S_eWdR@v8~KGhM=u= z%;zP07U8=i7p-MZU{syr*bv{u=uT?j;#0VaH<|Dgy(Z^u{A>Kcp1dOGXUuUUFFZ@m zfAB<5sdHsbb3l083{0F8aWbIgD_AJZ5u0q6KPkKXCLI29QNY+39X{Unc^?zBdb!y! z;{d_7_4nv2Zv=w2-s3{@NpuwbMoPlD0GwL*TJs-p48r3TvsT@QQEndd@%EKB)<7Gt z$Yg^fI9kV_i}8PpImaS-b;T82hW#NAk4&!R&Id^qzH*O(12UcsK_8e=QTzAbFeNCE zjL)o(m9gcMD@qbxmC*Q!NQlxsYPpB>Z#(?|_l$G%p?oyrBbu*N#kkq;^rFf~h;iR6 zBYX+oNWw55i_<0&;auLEn*YeL#1U!pCm=Y+!>sQgXS=*R1f;o}TWW5M&H7>D`r~Ye zw^u+rFDx~xWe$J*?en$;7)NeB7?vx_*&4Gg_yyzFEb%e`80Re{?l%5A$DR40a~O9) zCjI!v!8gM=<2?s3B~M@`ZQ)T;m}0(&{KByF`Q>BLLAB4%>!Z!>K3x0eeesVNhpK&k z;2k~0r{N_IzTEPe@n6T^JZsd#y16h%sD@X*((;++;pOF=lk7JCjN{<1;%wMwxW(K^T3S(3;Xh&h zV%GC>oR@EZgxq33FAgIVo$u_x({IbR8yi_^$Lt|?0Py$Bt@cBOXvHU2d8stJO5B?~ z_YudSXqscdkH2CJ&MOk#$2Hcvo&8KZ$EkLhNt(xeto`A~Oc8>cvK^d%mGfKCf?;y` z-=S@O{1R>7#bjRD_O}sQA9KI?2~V`m?MX|^KeharYb4)x`6^!gJto~J?Kys)2Ku~g zURs(LW12VPKogVo%UDoXZ28QWcnW{{733)T^KzVNXSM8KRzwEG0j4AXJPZ0 zcKn~r`Ebi@KE8%8b+I2B#pp7$`LRp%{(ZA!Yaah~G>x|=+zDLn&CnW;bHD6*X&%3b z!Q-1-X7y|S6dB14W)Hor{_q2g@aJ(#^fjJv<2r*U=e>rrp1qw@(R0pTVxVU4^ZzE&*SB2 z+{MD?gLW`iyloA`F58)RhTUI{4Su^Qe6QH#;H4hNbr071Yio_^{BiZF_iLrVsY+mnzZ>Zxi)$1m<&0a;b-Mw=sHFK-=J~FX7y#T#m|?))?KjG zT>oc}1x3xg*1V7D%G5I2s8p3tlSe#ne^RwgI@sy{T zpZ>LZ>448Nq!HwdXgr{>rTN)kFE2ZZ&*2SKzN3a1pDjLqC+DLZNB5Z-Fp@*q^QPui z=zyFwTfSw!oH=j#a?AYXTUO_DbM6lThFtZx*ye|OVEb#Zy$a9raz5g{68y3!_7}>T zeaTP%X8Zi0494NhawnFze!-?>A+M=#cryjq5L> zjq6vio>DoxEUt(X@pz6GOw5^Mg=O=TAJ%|ZHyA(hrb-JJC>)c;zdX;$mHA9A-{R?4 z-MqZ%Ba9O-`gZdtzJui&Z)KxJ1S_t|;X?jx{*7SfbDZyJ zUQQeW!nb_rIUgD6{N;1TJAPZfApd`IJg+z4QK$Kvp~q%wxE`bV`y5ivW3w;V3_Yui zGrKQ9s&UJgy9CQch`qudhRohUw%;ZN$W>Ow+JzwVS2*Ev)t|4w0b-HYt zoIk!%Qwa#TrV**bW4NTwhh5OPge`PaLh>6-HIMl=Y?jW6qQ{&F{4@dtZe@DIW=zCz z;!qfd8~+Xxl04_84hplZ`Csw4{P_RGFQZ_r{NKXA{d2~`SdrHxIpNG+a{Lt3n}FX* z`0c|lLxg|RI{qOHzS_cwY8F4(t}Vs>^LLWp$8y5qA8TTkN=>%N-7mIr-0^%;jzK>o z7p7pJi&s8B{#*E;*Im%~XXGzTW3t?oe!BUWSTsN1%u6zC%>A$EH8ZCd0&FR{&E+q9 z?pPh=IROz9rVXypNlg3=Z6s&uTnjRHKAtxG85!5JOdB&kVn5OYV&4eH%H*{xm#K{p zIl;m)xBEGlOQID?Z6=FtCh|kP2CX+{T(O)r_^EYt3NJ|>F*$+9!-@VM(q+7RVz;%h zAU4h3k=KQm<^-pq`RoixrUrig1Z&URSbO{&=s`*In7`c?KiGjZ^E_5L&{Ba^5_b|_Y%tsyo;`MLyafx~UV?4-D7ye(2 z-=;A$T```TGTc`ePfP-x#oev}XBFTq2TsBh^A5`FqI9+^ZN-x%_#HcDSNv~&TJf+1 zzj%$l`ybxIt!d0?D;}1})1Tpg|D*al1uvst|LjWnk)ICyHjVLqv1q)!RO5pw_1$AB z2Mg`-!IU!5`k&?StZB>|d@!ZHPeeW~r6YVWr5r2&Ltk5{&0eC;6ZjL}{=k*5hbQLZ z_F22&>2>&pfR$+ZN|GZLWl0JpUXY z89jVG{NXTR{P|#lOO2KdEnx7?#Q~j9n>KWqe@;sc8- z7;`>w z0HW26oik&OC;o@lqwH*l+aq|w@%d17jXon`-Ef>~8h!gT9}hRrTlsjTeH{<-^LzZi z4Ss_u_6z*UmxGs9$DgzHOEk=vqZl#6u?8RhS4zurARUS7{=M|z$bYCYH4>>Y{iu2r zb8iZ~pdxtiKNImRiV0%D$P;D0N&UAYO~CzRg7>4;Wjq!B?|{ET|L5cH#rTbO0K_8y zIhT`tTxP64icTM;?%yl!{$6&qE{9@tp$h|5emL57{6d$X;b9;16#x4lQ@Tb`s&bnt z9VtrHe9&z(2GRB>_{a))-pa?d?CW^&KTH@1jFP;e?bB#GwG=R`4OJ! zIr0^}(u&_G7|pa%eIljn;sx}Db=A;h<`+jBy=DdfL*0{j&$P=HSeK6z&GXOk@!#z0 ze6+h?H4 z`Zize9v&DTZOoe1U+-;g+qkc9Ow)IYm%9c!yWz&hZJ@tfygb_5BMqCn0*z@}ndQ>= zTK~^_r))f_b>%6mjA>d$z1-fx*V{W#@I75HY2zs0;#()u6& z(b~33>wmV|m;SYN$||k@7W~!v{nqwXRxx@y-J3q!T^|^2Z_Maz;M+i8ZX;a%(mtuN zc$Kz|JKEaX(B?mSLcU`~Gd+EMePBLsm|30EdmDqepTCCsCJVH@fktP|NZUeF9LyC8 zB-0q$>H)N(fofgTvvxR$Uo=SfKyT-0#-ZNT`Z${ZM5?3Fxz0L^=5DxQhC_oKfiD|w zpns@$C~b108K$p1?b?n3^jyll@3T-TRSa%J7BVwdTHsqhMLw>>mA6M zYUAYlmk`R@>YEH~6@&GU4q#HHQP|hl1?YPQDjU{5j4P-gI8*tdl3@K|z~r4`wEk%7 z$Y^7r)|K(7&B*evBnGnt;*Uew)?d$7Z>Osh=tg^EcxLbDlyn5AnCP4sLK$ZC*5}Zx<42Y7JlVPJgCoEMw11d8{bG8sl>8PjCFsRymg$NHOA_4#GpZ}Op(x|}4EG&=apmB`b>?Ce=FeR_S`Ta* z|1OM`LpDNI0n`Dvn3Zay-F7{g(1C@8YZ;RbhZQ~e9>@t*B=f6~-mAGBLf3bBkkCCeMxNCvJc-#Y|J+D)o#R{?n(OuZ0MvBTlV1_iH+Gt zzR5YUA5?c48>Z*8+tTQWj^@J)&7zFyt+PKPS zos(bbi;d>@Y*kyDbw*qF-oys2Ge7L=8Lib-L+#kQ{>WOfrGHC9u|eC=1T<6Yo?aT( zvR$1xkPYiqU0qw8b;mJwD1FCclh&Vq6Af@@<*qeHRMwNs!F@ee0JBv6dx#c$R|_H) zn7lEj>BkO4K!=I6FxhKO{zpLOEOI5_%JLJ-_18!H2g8NAFbRuo+>-p%1S+Okmg~k2 zKo+4+&kf>BLo;k!+k|f0e3xgDS+giMV8+vKkIt@h9tFFiVxUYa9@Erg;My#t_hR={ zaJ1QtKJ_{-gRwjKA%>k4r}s3rE8|{@w{aPs8sHfG49xZ=cjLQI3_Jqc?bXJo$nf@u ze1-MNqVMVj-BD@1+Z@8fqx6k+hKH}!w=-^Bo zCHkW}C#1xNkTrfyd^pfkZ6UWHS4`NKDdXDY$w>YOlN3#VkOMk)36E8JK&a1uFv0ZRY{c#x;cO0k8S_4v#)>HuP^dPc4c3_ zx4X!IVI9A+uh2Ua+pr?>o8x3NTr$sBqzMCM^I*_|&w-Imn*zTw(%r}Hyxoo@?r>TB z>R^9=W0e2#s7bjs1qbf!9J_xub~KswO*QDf(-q_8^6Tu-$na==q<^S;c&M)*aa8Qe z>_21$JD>a@L#R{-&jCvp7jJEDv@0gLYT4 zEHP2k z8Dp9^95=4%&qBE&=;Es^diA@lB0Jf9r1+&Y!awAD?Q)Wv(0I>$^_GtHb`) zF-<3t3ST&tFARFZ)jN&#ikHVUoh}u_R~~8V9I1^qh8iOaH*B5IK4VPNqwbYKo~3G^ zF~FV|5W4iZA%14+pi@mxxL1-o0-?@RhQOCHqn(b`Q0Hm)N>WE4)OpqrGfkZ-sPmkA zC8;A2>bzixHB6n!sPm$GC8;A2>TEK$pJULEUwX$5ZCbn})sQm!`Y;rr_aD1)G-3z1 zSHczw2z3rJL@;6pyH}DrZp02TL@;89x>u4qZp02ZL@;7UxL1-oZp4lSOoW9K-787s0-?^ys*QH3 z+D_3r5iGR=|Mm$?%y? zcc!!4!7O`Bt~6^{RfgT;;+ow!AtX`8OniKrHS6AAM!-qA(sH}5GVGob z*Yy4}nVp&|t*~48dwNk5s|t={dIv}BbeI6cXJm`BmUVTwe3q_@sOTS>YR0$&rq9k6 zmzplB!}PgD-I#8#BUR=~_d)G7_X5ikODYT}w-K0J&-%#1PLCxBl zH5`}s)<=8o_6C;kFDcJE9a(_=2ZQ=l6tg~vH^%Wpr9{4s#0pw@B(fphkkMg8KbkG| z)=~cnA!>-a8jhleIG3e1m$WA{WxlSRz)4Nme7dN|x8?c%yx3%JcqUVpwHelg&F6GI zystJJJ4#vHVfFcJX{p_!HY~p+b-OtN_351h{Zq{`4i7zEPK#ojaXlD()z|9ko7RUV z*;-_{zLqJ=nN&4l^9^5*Z^yJX>Z4{zDbt&ovYbs-6E@%W^=1s2emkpNd)~>G=Ilnb zVfnqHZVd?pnx&f{hTbBU&1|kz^VB4Vn zVDF%AfUCxKB|yG`$OIbLA*hdUnCcuDpo+aFKeRKe?^s6Un~05|jhzDvu8UzSjPG5_ znS48`A+)qxV8!({Y>6?ydpVPDDK&(a_6)4J&pYSaJPOmCcP%K_Qqylqt-rVk404h|3XV>9J!bM76SFV5T6 z^y!FTe>>m}>cR}pzQ_rJI%JcRk z3$TA|P~U~FvrkEnD=GK(VdF$$y8D8>X-|satS64Kvc+OR-gFE$!5JH{e@bD%b->zZ zWSp8U_2!E$pBUE$VEpu=y6e9+&hDR)Ee(ys#MuEf*f}~AE2qhbE6b|GafwWSzjZQC z@Sc;a=ttI_HIe$EUDP};sEIuaF8-7$UeVx0Hh6woE#F*W6SXc3YRwobidrk0lM~n% zbu@#I1KWVaqI^B}5nr$_*joP;rwLf&T5{|d$DrOs1 zcG2XWMa_P6=|l8W;_wUS3 z*#?ze)O?_*X%80cF0!J@DQxn=T*YjY$}Va?T+|#I?luQY6|G6AJ`&Z*Hsq|KjmHYU ze`w~2c?YJV5ed%6<4W09ygfAYq^iMlF6NX~MN1NoPi5+rHRi3Ny=RJgGqB(9>&Ge( zPrM{TBp{#7*37o4Eu+;Jr0z7Xe?7fjGp6>=G#gnthy7xvFgBZ1h0&LbdVRyV-qftr z6S&yFk`!eP7S&+xwW1Es#o+Xx*=xhx>uFKeUQiDP-;!EA>~!yJywif?aIwh4p0_h) zvB{(+Y`$C6!$DiUdzx6}_Vm4^Bx|pz1#9mYb$Vvi>!Y2;shkheqO8539t>{U!hMoB z-ZkBx?B?Efv*`7#DOUq_wkY^%oj7(k(o)$ilM-(W^_HM?fqBORQH^)V_+f+^u2qm> zV*Nu(39*B1ta;z%+LoIAPVw&g=m6f&pD|RI>wx5}6gR`yl@Z<{uI;5p;Oz~Og@Ng{ z;TZ^Iah3;?HKBy1lx9QqA!_qZSoN&KATk1`t z{#~9J81BR;oqFYg15Bmv&X!7jbFkswi@(o<*snLbXN->GjZH83{n^rtnTI@xvmyOm zIKMR7Yfk@5mU=i_?7I_ct*fJ>k4ANC(|c!$gOaQs%axWJc9miGiKr${at)gE@*Kb? zv!$7y?=!x?KG?vOj}5*N%`1BR=5S_7Fny@6Jhfiyb8iL66$6JQMPk%mu;45P z)nM)jU#DIhSu}UUwdc&AD}%=4*dud=Ih(pJ%pUD))@BX6GnQO0j)@C$BU#jespEVN zq-bY~k{llwL;<=q`uPv&vFXtpBz8)qw!yu{!Yv=hou*46? zx%Vv2j|+0PiaIcLp|8Psn!8}JpMw`ACEgh7Ju@C!HDr;(I@disXxDHC;ahH3Shsu4?rwM82~T9dmMJW?TU3VGH^Q1DqkZ12yfc$2EHztHhS|4^nrIGtVHdp} zjKgG6#HwoxWu+L0OKDNwFhc5Lff2moBV^9y(ld)T>zLb zu)JAOS3c_-*ly=rb(`nQORPsGV1LV^e(&sXz~#-Lt#YL$wpDdl-lnMAJ<=cg&8f0& zuC&Cmst(KB7j@AnCZP)wSqpc_m6ljm)nR$3qV7m{t&^96xirl9+c{fYVp|)4@m-7B zO#5|vNFfXDZfTh{Yu8#IK|xj6+@q+6fOjSt7<(oqC4Lt5U~liD7A~i*_v0-JNw!QD z`((K|f| zk$z?{M4C%vtbS;w%=u*xhK>*fam0G|!EMuz%#=mdj}b(sB@Or|&cv}L<&l{a1Viqi z5&PgwoR}$#s-GeVvl{EWM`z&FY-wcT41r{Wtaiy~Mz7my?RNOiF}7!5I+!c>aolbX zX*;-*oSQFqR?Pbz47M>J*#RXy0-tEknx zps#zOJ-Xt;ymwkuVlk)*llw_M9>PpTgt z<-;)tmjHno*W;WKG;v5|;paH!U3=k1w)=88cW5bMo3WWx2G%#D456XJ11q>9O!tKg z&=Dm-SzjU}XyT~If^wl%7Sf|jk+Qz98D$6!9jmQ$nEAj?92b{Zv+nBOVvJx{>cQLz zx{_Ix8OkTd1y$DEXH`ztmCVY^+;&P_5L$y9r%QQ1-eBs&(F8uNitAxJd)73)qk%KZ z0BeW`_pozT9y8sdowLgTZRb3}`Vdj=`RG5t1PIIo(VrNBs~1KVl+d^-7M#7P6tT@j z(QlejhS1O@ft4t5TRRvymzDr!eTj^qiOVAk$^{esSCk@UeaS`tRe=>`r6BsRj!UfB zIQnIbT=f4%S1O|a+PI*~nv4GHb)_QuZ-@&*YZ$(prQAh-TN?ehlmXU|jsDy6SP}iV zmjT+&T^5t`c5*8jw{qN_l-Qbfk8z)r1=74)2cpfKO58@S|smR^e@<8 zqvEvhb7g>Q!R~lpbX7M zuu{a8c%f{dv(J698{g|A-ze7Tk!z~)F>>`OnCHs~*NFd!O}QmB^kQPBhW8bDA_g~# z;S}qjaxYa;(x5$)9k->8p}kkKmhkaRC}A6<3a?gTOKUMOhbCXo*y0VO?B{0Wgy|dQ zOm$<0A++>X#)_Q0F*_peVcsr9s@w5q(9F9T8+_N_w8B;Ty)vS@5oZK#yq~c!+B;WMb^;b78zSSJ%u;=&6~kI z`rNV#s%|f|h32--SgO^7PXTRH22?lWY@mtlG8UYe@>%Qc%Yf=8oDDRwW5$BHG|7BI zh;msg{25}P^K^uGIEVz%K)7d@C0BM4s z%ryJ=eL}8xkVneJdkblr_wVaK%5M6sc+@FoR|e%Gz*o zgj?aForBAnr8VRXp`}BzR`|h(B1s)u&Md7ZX9z7Fp0$G8sd4d=w|csQ zJC|#~RtIb@-CkU~^(Q|G?6Cn{$GlvvyJl{oiCc>H;{H(loiTu-$Cu-2N4eLRE#mE? zr09v|_;=-YU3(iRIDM3$!ChSEDGm zmQntqbC`_1meX_gZ}AiCOX4;_@!nBISAe|C5eLC>cYxOb<*#tqQO?14;gR8P4 ztlp;D)beVXBD{@ls`W0I^Yi(0`$yMsZTJ_krhCi&MMuG;e+>(}0ej|c7#S;G!S%r2 z+Q{4m_-fa6gGTA0e-TT(L2)C%;#JqOdJ*rK8?<}=+&POr51*~wsL5-j}hn!{*ez2v1(RFv^KVfRVyFl2#ql2f zysZU(aEy%zJUfK&X>XjA#$CQg0&X?o&dG2iit7>X+Rt)Ajn3xH|KSqvxw0na0`Au@ zskm+9RXaOZrF*xn_t&`0??{Guef97@lje2L7>l|*) zT-25Cg}}Y-nm^kzuK6FwtM7;C!qs^GyCIfuG~_$S8|&d7Z!0t!ouh-@ywKR*-mZ1k zwn?}h>qOjKvo7hPrnwsS6j$2p$uCHS} zT!1!?V&TG#aBu6V6tAK97#7c6v?wXYYbZXx3Ad)hJ!o-jXJl;b%J}zy{Ebn?TOa&; zNdCs^flX2q#P$|n3zvxgY(E0I8=4zoucfL8i@Fw9aqm zESlRlf8lTWj`X61^U;X~a}%>{dCl@Vqjh)7S$jWG-qsjZepX(kJE?-9N0t97uYy)^ zk#XD-lt8urG1a=~FI@Xq4ZHkidtt-XfMzX^ICJmcpId_?_^j~2!rw-W5q9l>nKp0T z^&-f~`U?k5>uj|5uCs1_aMul}jtpf6=a+^Wn6u$xOohsR{z{|So*I!B7?Kwt@>^=u zOzmK>Ec8Hqc1%p};2mr?C&O z1lrg`NuN6e_?-v(;?A@S@P8gaGp*qtXmd={pUf*g_&opIUpLaZE;sf4vx3r`A>Zb) zS(Bk=&H2^b85=bE*O@JxbLaf3XD%)P zS!@@F_O>YL+nl*|Wu^9{lHB!wJ6oxLQBS8NNKD+3g}=quJ7~X5n%q97hZZhcf6n}b zrQADNRz7~0Mva-BJBLsjd}g-o5<=;G!k2QOxm^_$Pbu>aAiIT3W>%Rm3EDlRGIPd! z0ni>H#Yl_Ci)mob5K02tjOkt>lf<<7=BT|xCQUi~YAttvaJA3iH=ght&A7`L;vYTp z79o)4EnLv(V61M~=)(>9dp6o&{@irYZ|Mo;?tuxa8uR$tTx;dW7t#kNBD)eg|GDEn(Uv1$pqOZ2$ z*U^BO>j-XPvSYIziLN;ttus1j@m%-$xJ8X#G2V= z{()F+@tg(gAnY0=>&=@#f8GYTk&Kp7y81_jW(GvU<4=mp42TH*XGM+Rmh|f_Tog}? zHj!7b3uEMKKi)wEzTqmliRk)fcOF~oVl8t&OOfGE#nFu6XVo` zZ%F~TRSZt(NI~unw-pd4E2a-`w3wHuWH+=%%k5&e>UdyBfjc)^XWqiTMc72Ouh!wV zF>=t&7unF3^3D&pWBCJDW z9UX0}(zo3stX+2jTTbc19x>Lgd~0uSlfC$!5vDt8`?*&H_00XnoQ>wY(3KJ9w@L0R zSmpAwUx8%TA10v#o0wlX0ZO;T@_m2@#auGo%{p|5a9D`?7hsuQFlRp3qXy20M)S#t zb!e70CqLEv>%-R=!P_H*$Jf*qJ9qm%B^2vOU+SH+rJP~MNNKSH@{B$1;&(3rJ2t}N z?1z00+d4rojvI~wi%qF%Z!+6EF(iWBra|Ob<)jcPj++c2@pp1a49|22O_t!H*(rv= zcPI|`;7pmMRa?v~aH=cjcl-GxGYjx6*l7|Z=){bk$U3vlnZAA5#|PbTN2^Bmvou!> zNP#hE&z8o_ApyPut|#3#)1`9?s&J|>#IQYA+B1g2j(JL!it`F87#+{ZLUF$KyclDT z$+%Qgn~hsk+v@i8HiAli(6w)P z2w$5bO%x1fjYMCoW4eB~!JG}rnRUO>6+TVadI zl(xPfQ10|*LAh@o`$0gt&6=mAv$XZYfSMfp)$aWIQ9!wUVqweq^{)Z7T4Kxj)fQ0g zZ865BOgh;fVu@NE&a;jXOGN5$u1yHBWc)jvZxcf-5kM5@psgBWi2@UxZ<9hSk$~SW zCOut^n0eQyi0OD-$O`>$8QP^BFNwfR*#Dl;h*WH!vgVo1eo|D(PZQ_Ie`+updUCRj z|EUI(Q6;z@bdx-XG zv^W$}XfM$|jp8k(+`!9sR^yiZNUD72FPoj%d0JdO#B$aUe88rMSZ>Hy6>K2HaszJO zZ5Rx(>~Nd!;Ts``Wfxx-iR)QySIxRC2lQ+B^4_GJ!8dBlk<*iME~5DQM6r+Wn@q~N zg5vr?DMyUQ<+66-mR3@Z?>AM>Nu17RA--)C64+^Irb?q7g1AX;JHsJfvy2b)3;Mnm z@evsBpujohjKKe`xQuknE@=LL6qjTdPCnrpipyxs+y{Fo^m-YZmzr>A5>7F5m^Uw>5gjsz{27g~k~x5%&q|%s zx<=+MnzzAvJWNPd7>tV92Ckp5dGQ#)3p86B?c_B!vE$|>=|au+4fNNu8z_m~4K$3r zma{9nx?gLwuQr%t%}_7WYz=SaXY87kvY}=%Q>M8$R)PWM#sUNJ8-Yi}fXF@H|sTtpkyH))FKdjDX~G_nmwWYd_&fp~_t zL9$s)!*(V?*|Qs)$F#gvm9cIUTwKE*Uyihyroq@0y`gfdET>-7Q0>`hb>+zk7zxZ|x)_?~%i^qass( z&m5i`7Blzvit$;qdUBb<%+S4K8Z$H_r=3IlWay0JcB`>(Ov?;St-D#VUzShp(;0^1 z{t1suj?#glH^dLf;Yq;wd2wKj_jja8)K80pGIY{Yah$Fk9Mf1m<76&w6J8R--JL`6 z{4{=$J|siOju<~k9~#rR)otX6@q_STF+4JBRKsTQWV8>DVcZR0!`5e7J|c#@dn4Go zO!#PlaYI2|lq47IShKDw6D0WM@wa*ih$NOS?Ob~40 zEyfFAP7+Mc;AIYBI(R^Sa)=~HF%yWKQXrWFnF;&??^6o|JL&jXXCkef79z>v)FdLO z7YM!;8s9>$#$_@ufjJ{UhDQ^GUtD}56hLTL0l(h};68zW|~kWIh3~dI3aZ$Q%M-dI3a($h-ky zpa7y#WO@TI=z-4p(ZxQzA{@ks5TkR~pR)mO!Iay^!V;&^8UdJFGk}@x&S(IZZC-&g zh-xwF2CCSK(yE;F5ER#*E}l1MzHwKKyOHxXcsAFZ29X-POlE1gyq7#PZ6J3L!1oO$ z0B1$!%V0V0Hajui-pK7R+o#xf^4Cl%bd*&v@%ppWon$a!-JBTsuf#fyr$gDv-8Xbv zD>a^jagGJ>e+z8J99CWAdVwg9fd5l~?TyUp-`3t^?c(4o$a2nv`14!^eC{|~fx*3YP@y(!bu8r|7}e)Sb;@~@w0;rrj6d904!2UNk2Gq$R$rgO>EP8z6m*`h)Xo!0 z8s?bVS@%l~Pnz7o4ymMu39erSH3s`@(GH2Gtse^o9KppP=FBDkbdChOqzy8d+lE?< z`Rvyj%(ZPX%DyOrxpO5J%V2VVca}sqLJl}af_IV#+F;g zEn_AcU2Yk-ikWD9xn6|av&mrQg z35FY8{rCt1K8J&kQq9B_Pzx6|?1wV(0g7MDTbKNbJQ0mg&(3h+E?LTC1cu<3SdI@? zkJfR+6y%&h#Z^_PmUzXlR>DzDZJPbCtxAVQhwwE@IN_aPWT`;9 zLZ=@ZhYxP|kK`8^mQy4tvxa%YhRM@QHDqBVFyP<=_uA_#}aj z;I-D3!$0_WUarmb?Wu8m;~?xr_y_=W8H>rZN+mRQ^O|IgMe=m`1uj(-NSscQb1+40EyYcW90js*qv4+K0 z$Kmaz3J-Z90I=7_@z}D8Gwr@Uj>oAL94`fcy*I}3^jQ^W+I^E;RevX#cHbIjPMK9$ zoM^`SZ9`VsttA*_~AeO>egr&?UgEMbqDH1Pr>8xM=75wgUE4 zG|fXv49#`|_Ev$$$L$5|s{)OWI|vxeyu?R4;dgA2V-qh+${81TA{WF=${7!LZei}K zaFEvsq076p@LWIzXEVdDv^S-SGyd(?V$K9qk;cQ_*^^+tCq1z_WDn^{FpU!sEwd|o z3K-=76f{2WC19`sq@ZzeZ-T2;bY-F$#C^nITLow{&AtLw4Yy4-`?v5td}mOv&%xw7 zz+m0$%~`Nu?)++=o8ki%@53l(zn#0*gB0(@%JFh)epUK^ zh~mA}IerrTKUDEv@fu0^xqS zo#!*n{5*+k4{l~)JPRS{)WHi95d){R;EtGs-7_*2?$;xmYEY+hX7acV4{`$-T++{5 z+VEAW3FZtkJZ?)FqY;=h$?&)>WsELh&LYF(wv;hifH|8CkBw8tgguyZ$nfYmWlX4p zIhTyQmzzR%YYXZ;q4Hg8_kBBGsC?(zeeW)4!PXT{aRbY{4jhMsCb`;p{f^qKTFtZs2c86>^L17;j zj=tZBg1J++n_0#O!d;RUz+^Ivn}qnvQS+8lItk6L1#R6!J3Nz@+A$kXF!$Q+C8%_^ z@Qy9s+I_OU%zEyp=>6h(J`=b5iT8j|`CN<>TU>nL*@HsmvvIpm#}AR>smQdCW}gX5 z4~r$9<4vJ2fyjFb;i+egkbsx~9&L)7*W z^{lGR$odeqeWX3d+ISDm9vW2EE-;+Z3S}|YSEB2zQU9Fg}?G<}T z)vi{|*Y=9N%$+XAiu>JQg>c(n%$8TU%LT!`Za}!LFNjyo4i}8s=>}A|^#%DFcDTT> z%?%j4=|%DDW_t_5Y;yys*!O~a!|rea+O2Lt2Af}?n~i6(@0=CAvBmd?HkYE_VRnvJ zc-uEY_{Pu{QnY$f#zVL*O&PxHzOF0scx@{wOv>b4`)#ERu5?ec75%%OIG%57=QRu4 z6^y^SMNx9W!uA2>-k#AEJF!DRF`)BTvF{jA4BV7rzjg{J253S_4|fp?qt>t9F~JSb z zdhP;udjdt69=wH%8{Vb8wa*<#U8TVIQCKlj7 z?H!=FOf;YiI0ugx2#Z{XF!6qZ5ctmcsX2d5l%6Ea>d2?K<$G$$o-;o=q%sP-3tdi8 zT&l3Uz~NNIr3%ZH^XTL0p5xb`rS913%Yi`P^;Hw$-BpKH^nnz7YJ5D`9Qu_CQL|Kw$`X0!sTPNea+41(fzpG7z9^1xn6E$jK&l>^f7P_R6Fu5Z7BG>5|D! zAa1Zk(jSvfLELDGq%-0s{kTPl+8W7{gz-0LZ*O%(>MI$^3b%PC@m3gaM{oB`;;%5w z33qrV@mLt{H1G6GI{I{ny}H{n@v=rECL!G8h%f$@9PGnro5Jn)!jGQF~C;Bn7n zdS$b~la|Sx!f{#PDUam(WwXH31(bHoWr1f3DD9cc0?!su+BKI2o-3fVZ!QbG;Go!} zcAp4d^hnw_p9@|ppxBa}j1z{)vf@^r$@WUJ;?|zYwFSxG%{HFN^$LoC+14|;UO_N0+gm1M#b(7F9Fgr6 zf(%x6^h~Z-CM)jbnM|)3Vz9HbXEOdU!ocj}nM|)3^I&$fOiH+VOlxVGjXqs!(k%8=h7`xxPU= z48Z9HlbikC2^Kk)FHqIvoOxZY}5-?@s ze0sr5C>!Uq0;X)7&kdNealRm6%EtNPfGHd2%L1lsoUaU+vT?p9V9Lh%x_~Jg=Nkj2 zY@BZ?n2BZMe0#u@jq_arQ#Q``3R7HZ=H41 z7`+!jwSf%8Vf)dVg=lBj=o(p6qG+qAsWfOL$W^TlDh@X^>EVqJ`os)igZZGeIqg+ zed8q?-!CGg4#~)yz8?^h1H-dy60>gF6ZkZFU<5{PibBTZK@l0bY5PN)2S;S&rtJ^O zLxmje>+c(GYxE8Jxo?+I-plMTh0GWja2{HQ^YU=T;CrVuBYE$LkQwb89@LC1Ax9TX zJKb?z4BRr)j=7hIQ=3)1`36bl!!s0_mC3Z)BKR+jfO zLbi9-)a-znqnaK~2&Hn|WR#plcXLD8s{*o~dg)I*T^(?vF=r@| z@mk@!@HyboM%U;_rq>h9iMfEQ*V3N26JFOVF6oE4!VhC}L%`KmkCp=7fR;btZVb4A zuIX-TXage1?>7Ztt>16!Ef}QtTLr`}v%d`qY_>nzNMr1_kQ}X#W(LO`8QmU&#kU@6 zi;S^5La=vszdNhtNpph|kavb;tsawoeg1m#dmPzQM~8X_vXR@y@@3ddU71&ApSm)u<=`nLW;jnCT#S^9Bl$;-=0d?=t8K#-)9}$-@cS^eJ&)c!u9zO ztP0l`La;JiUku60aDBy*J#}=bDqLSxWL3Dnrpc;sebb`@Y`!vF-%8l>aD6*r%ft1Z zge?!(zj}6>^|w4+-%r@`aQz@*%foe(Psy!ZW)Jo_AIigZbI0~~EG1mG2+68&-7*BL z!gZ?9)&usEH>%|KNU9uR_6L3m&YRtDigAz2xO zhd6SnOZ=gV>>G5a+kz#YYYWz(!xV}AU-=S$q(_&=NgtESSQUh)hhSw8o)MCjL3p+!m%4DDqsXct zJXevGL3n{jm%eacn6TwRcu~TZ2jRsDTONd$dDbnO<(csEge?!kD-yOm2(L`o@*uoM z*gkm=rmugfzixN@_B0bubzf(Y!S24Pqm8~UcPwV#U%+u94>GQgAa^vN--Wm#qMSYj z#bfsyBg!dLP&}x*DWaSv1;sN#H%F9H!&7n&=$43bI(SMB*Kds|r+}yA#LsOJ<;LDq za!&sCh;knuaFjV9yCb69#rTdgCxz~eD1ULg!^{bxyJ9RJeRDGC?ih=PpQm>)u=m7R zH2yrb1MGf-)lBgCFYvIQ+2DB~g7U%hU_{04n}hO)A}aD8UNLwcj;P3aPz;_&A}Sv| zk498Jcpi(WeDFLTQTgC`BBJua^JGNjgXgJ;DhZyaV=Nwh6FkqvSTy`Lc%F^1X#8#P zykIcgx3O;+si!Zxc+5u6i!qfCpO<1R?tzJ)mt!pIfeoNnVl3)`ji6U!EFVIz#aKRu zUXQVS5WNv&`6zlb#`0nGR*dE2=t{6m6=Q*mV;^n<*x8+s4o4iiupd!Lx;8@{zNpV)9|Lm16QS zv$bOK0ke%_^3k%bV)CJ~onlJjWP1(8BW;3Y2Mt9-Z6jny4Mk&Z!($f%wc#?=zAh(y zaQFmCxEIjH}S@A?Ezj7?+_vLd=DM!ekS(XNb8-P?+pu_6ji< z3<{HN%-$j9;z41ukJ%^0Tu6i%L_inz4KWuLAqE+M?H6J`Fhb63W%gHGP6rbo2PiHh zgbk4c6_-)MM#({n%Sgd@CeV+A6_?Qh?vY!fxKs?fNA3{CrE1VUa)&A|l|$Y*0e6_< zQa$J%?HwL+9m%v1_sAWgxI_zU# z$0{z?!?;K8IK{ueeAL>mIoi6c_1X-6MBm$W4g!uxtH@WZTkdWa?B3dXE=Mu;Wa3dXE=W{Abo3MEUN-*-k zU97l_6pTD@mnbfy1tSmKrHV_%kck2AGR388$ix75x#CheWMY83LUE}cGBLni8FCd_ z?<&P5dYE|&dsizi(ZkGJaMvg<(ZkGJaDP!;tVfacu2o#DhfOQ6cb(#5J#1P5cfI0b zJ&b$Q_Xfp9dIVYTM#V*XSodh}rjV=1dN(UB(!;t(d$$>`V<}nh_7ID#A&~jQtanF< zCE^OktaoRKCE5zctan$4#nK8TS?}%;i=3>?`g#)dYE|&d(S8?(ZgrG zXBC&|VdgFDJ*T)>k0R?mueewbn^s`&1;xdB6j|>@#l?CU_o(knii`9Jvfj&zi}bMW z(cUW|SCREzRa~Tpb&vMmFx-TtWW6^-EV3rE*JQo7LM#ziKxVzSLoCr&FlN1XLM)b6 zD9L*7hFGkuV3PIT3$a*O;~EF#uOSxeYFs1seuzb~TGxnu5Mq(4)-__Ad`8YO85JtB z-lmGn=>TbAZ!^VZgs@p}bH!zpVC2Ex7K+PAVYA+ripyxh$b-GD6qkzOvfkE;OVyBx z0ejmhE|tS&y=@hj>LC*Y_O=VTimbQ2;u1Z~yoJ3T6qo4Xv)+!1OY|`F7WQ^hT&zct z^>$WVtcOi2u(yliVm*qix2xh}J&b$QcQ?gFdIVW-cg00|SodgekC3a#dV4A^(!;t( zd;1t};!?8Sz9AM_li6#s-hLsLh$|qo-u@w$Xe$`A-T@&NODmLQy#qrmR#q^{dIyDA zEUa;j19EVP#kv~Th%E`RNLK3_u|q;EQq{Uf?9dRa$a;q35rYfF!L7nPE=f?htGN^DK62&%v;zyS#hx*MbQQy-Q7wHjXy)zUS>0#ZYy)#3uBI}){xJVD{9_^iLxK)>u_09{i$ePSvll9II zu|!+}ne{FRu|!+JnDs6Uu~=H6BaNkck0%H-ub8*1J)0i5_O&!ro1aOZ4zr z?`Fj%dYE|&d$%Yq)}zRJw<<2y!=@G3yG?Pi9!1u>U2(A<#y#qLhvFhVf~&$yA>DdVcny>`wTZ}DOvCS5R0tI>@`{Mfe=f?6_8o)!4ONd6^vQ$p%9Cu z6-u(+!yy(cE0|=xM?x$X*0{z2c{IdgU5#tR9t*KZR_hwE$3rYq)w)LPi4d#EdQU1Y zrvs#gy{8nH5yED@rxlk`f{_P%&nPY%M&2JF3{ zxKs|8^cS5cr>%FVENDu2C?Y(cf z$xF$4AB0$BO=hpjdYgP!&QBR@iMRqX>unlhiME0<>unZdv9v--*4sS9Vr2!BthYso z#ljlbI3QbwSgfmYjo4Np7RhQ|Ber#jMXFlYh;0*M6w6M3G;xa2Ynyhzd zh$Z3*$gFo*h$Y$z#;kXEh{e(hC0Xx?5Q~)+OtRjQAr=d3T;qTo6=Jcj#x-I`hgc-5 zb&c3DAr`4>T_bjEh*f00;}nH@rztMgLna37ogQ)(S?>(RC3={73wviOF44nh zy|WaT=waq9?47N+SdSv>oujx|51UqC?_9;jdK6jjJjKO&826~}`HGA52(sPc{ihjowkE;Zb0OUZhdg;-=wX0OS5mxov)u7J#XSAuOvh_LmTgWVNmlyEeokRjq5pt_!h>tarWQ zaymd-*t)o%oSP$bK^?g8bksd+Tdr)za9@ahDdnn{8vfjgri}bMW(cWW* zYhT)jGagr5WKZU=$$L*IF40#=CcY;Xm*^`TGv8B+i}e*uQs2{xi}e*wa^EwGi}f|` zaa^8NT&%BgkKA*Li}bbbk$YZok-pYFaxW;ZA_2ar!JHzH85UpCU`7&~0$6k3V`eifzN5iJ8J`T_)nKBGna{BJo(5xOigfr_4aUmYgaeE3YcN)(NQfV3FjmI6 zNUb;dM>z{-GfqdOOpp>c)nKHIb&(b~Q(#3>++2f^GS)>}+{%JW`|!rrii_;YtTtJ3 z8^t9;3(2gwt>O}$g=1FSPI0l!f=O1~UU9L?!bw)#L2^X2m@LQZ`7WdI$DvZmD`)V*%MkWg^?x(SPxI}}oGDTKAM1!$1#zks3y zOtRt$ii=eiPO{>Oii<@y?r~gBQe3RDagW@|ii;$+?vXo1agoB-J#wcit|BX*roo&d zkQo+F*I-5xn-$N{U`7*0A}pS%!Hg(2E1spnj4F&oSUg*UsVpulo}ZqIFVbM5jG51{c(Dd!Ws0nLi3Ve3 zY|4SfOEnlPQ)I=mn`w#ez%w z@W-`^i|om)Hd*mH#U(-u$*g$2;u4*OV^+LDak0#TNmjg3ak0w6Nmjf`ak0q8J&w!G ziihUKNA5PoRb<86HJDQbGQ;8>8q7#yv*Mi^%xJ<$gvGlw zm=VQh#k)0_QH7BRi}z?SmBnSndo`HqB9jFc@6%u^jLVAmYcN$tCJQV+pumc(_@D+8 zWz2kr#fLPQDC4u@!x~JKG4mM~AJJf}Opz5I)nKfQO*ydmmQF+go=R+*ACUe^4#1}#=QCUEy z#1}&>(O58M#Fs)WR#+%Wh%bj&tgm2_4_^tfSY6{92jtZdi?ubb5qmAfB4w>>#9j}v zNLT9`u{T1jA{D-=xSS4<7WUp!Tt*0+2;Wv*MhV6q?7gG7j1)EvzN@&57K}XDdrxtx z7%mC^RdJ~rGBsfDeZ{46xD@z-;!-_iV!+-epObT6W>!=rz)cmG=wW6q>}{sFL=T_- zHdkDthncsqw}s+jJ&NSFrQ%{eY+`}EtrQpQQKY`D6&LGa+@rqRC@#_?NPOEWF4Dug zM|<0aTt(X3UU88g);-$W$#CsU$$C47SY%CRugQA5gjgc3fXsTkhFGGlV9a{Eg;*@D zP?Gg_53yKT!6fVL5n{2h#x)Meo*@?NYFs0>SBOQjTGxo}9b%EH)-_`Lgjhw^+gEWp z9Uv|2?Weem5H{=Wuegj7j6B#oKyeum8xEL=Q7>Ved%A#d;K3?WC1F!EsUV#TFmxU6@H;!-taV!+;|ic95iS?@B%rFzK3fW6B@t|IGQ zp}0g3GjCzU*8yB0YkvcfH~wJ*<1QcSFckWW5^|7wKW$qrF=UH(@DR@755DtjX*(S?{(GOT-nB zS?~4`OSBb?S?`Vzi=`DxvfiB`7Aq^5WWBpWEEd+d#sRrI#A02IYsBseu}D_y8nJsr zEK=3FM(n;2tH^ryD=w!4q=mf)6qgagX1xa$mr;U|2YU}GE+d7_dJiiuqXi=m_8w7O zDu&B?k18%zLna37J*K!+4wv;FS6r%xObpn2BIGKv-jj+;^f2=l_MTE)qKD6VPb)6b z!^~UQdq#1w9!1uBR&lW&Hm$(kbBc@gD6-!3ii`Cy?ormKdBX1Iw<$$GDcSY%CRugQ9Egjgc3fXsSthFGGlV9a`Ng;*@DP?GiD z4zXBS!6fUw6JoKj#x)MeyCD|qYFs1sUWi4qTGxpEHN+xSt!u>I53!1@_krSaIzU?3 z+vM|dUdpK2o)N-ky-gLDQG$^Ndz&dPBZbX+n=3A(1tSmkwoqIuhRb?eDlSz+CI;+n zrMOfMm-V(*T&jmm4A|Qywu(#iF!L7nwo_c9htGQ3D=yK)%v;#oL2$i}f(>QQut@7wHjXy0#ZYz1>2tBJ1t0xJVD{9_{UA zxK)>u_4W?2$ePSvllArqu|!+}nf3M!u|!+JnDzDxu~=H6BSVh)5L~%JCAT8`2s<@00HtQXxxQr5v zJlH#2aTzIW);mIR87&xjuy>^5QZZcCJ4$h>8Zt3p?`XxPa=5H_jN(!~WMaVHu_0HH z^^Q|qqKBEcuy?%T5h-ero*=>TbA?{dXugs@rf3dLoVVC2Exm5R$qVYA*|Gaf6UE$rQ-xLA)O>)oulSPz?4VDA>i#d;K3?^eaddKmYp?`?{U^a!%v?TU-^u^-Hpj1)HOJ*~Km7K}XDdq#1o7%uBQtGHARnHaG5oZ?bB zT-JMDaj70MF<|e7kgLdgFDfq4!^~UQdr5JL9zN^6thhuEGjCz<6~)DR6j|?8#l?Eq zv;uptDK6Hd$a=3UF4n`iM}6N=T%<>k_1;umq=$8n_TCD)imdmx;vzk)d$jkS;ifDl z>-{yvB5N{xP1buq#1e4@WY+s2#1d@$QTs)kGq*xN~QsT?lr?X0*|51AOSw@b)X zWW8M#m*`>UE$r>4xI_=1^>$ZWqKBEcu(yZeVm*qix2NJ_J#1Qmy}c9{>rrIAy%iVh zVces>`zS8bBglIDDlXE)x<`Baggt|IH5rnp28GjCzz$*xSP$bK^*vW{ksd+TJ5O3yOtRvWii=eiPO{=tii<@y?r~h6 zR$Q#HagW?Hii;$+?vZ;|agoB-J#x<}?*GyD<^fh$N233QEaPM{GugLEW=KLNCX*rb z0+{zQze)G)Zn&|x+}jO0<9jylwqXdp_r!I#qS*obP&bvf`UDsCfk33@yGDgNjQyE503r zicc^Sp~amss5phQ;;tA}yn>MkExr?jsatGTd^ZMDztCiX7I(*B>KL09-;2T2Gc;MC z#rGpHCo6ssgNbL%e1;bH#9-nXmlZ#Z!NfCWK0}LpV^Dg=XT^_VPmGyj#oUu$-(oH3o%eSVe4c8iNOVxZ~uA z6YbHgHd*nMh)WzzBxc1^BQEhXahMgSN1SvsVU!hTM4a?8ag-HLi#X|IqaNC2X2eM! z8}*Qz6>-AFtR8Z+BTjgj)kAJh#N}kgxiP4D1l$ZQ&Wl0CC7cyck3q#J7>Us088N6h zg|p(BF{pS2BN19WD+W`y*sM4|22;P#WPujXj=|J1HY+ZO!PGM}S)j#*5tx$|&xygr zGiE+Ri|58*;u)6}7sX)W88e@u#l#?Dk{Fbp;gka{E{#Fy8J`u;i$Uobqaylx zSquu#1X*!;3<}S%irC_c2+YZf=f|M%46BGOu43>&4}V-3aiTq%)g~)m6mf~8iNvgU zal|ElCJwXW>WGtWCXBM;B@rjROdMs!H4!JBY}7-$TpDrG$3{KmE{izfVpb2i%Og&B znAJn>iipd}idV*<<`Hl+w750~6_;>UyebA2pI{_Hi&w{>;uOw`*TkUW6^uk^@!A+n z-D0!ibupOwg(eHMxGn}$$JnfReGI0ap~(U*-VlK~S@FggOgv-eGqiY93?`m&S@Gr= zOgv-eGqiY13`)=Vtaxh-O3!f0ffjFzLFpNv6>pD0=^3LU`udI-6rKsP;`$gAo?#WS z#SIadlNIlbLE#xz5nH_ftHpA$+SJh1P_8zW`yG1d zqBmakjILEZQdWIW|-m{drss*ES2I`()X zQ4~+2Db@<1lL@Mf=qi_nTD44qqvUi-P;49FV$4f3Oc%q-HSnrcPAD~lDL)Q`JPO1t zPq@Uy1OTYPTuZ>uI7RuB>Yrgtp$Dr#+{1iNxKNFISZE2jF(>U|5tWvkYHAyshQWH! zP%PHK2PHk45iL&n+LXt^!5@t8JmOmq+&#aI+4x>IWM?vEo zoH`m~)}R}mIvQhEpqrdJ8Ur~4`nuVwBlnd?8$@n#>L?6mF<@?W>L?86Fko(T>L?6m zFko)C>d4(I*@loioH{8(ITe~&@6<^d%Ba9>aO$KCjeMU|M>0kmWbSwBNXBS`%tOQ! zb7%S{!{kr(hYgfJ*Ee%Zxs&}7r;<7YX|`|iDya}n_eZ@-Dn#@BF|U#e(S(28sie(9 zGvlA|Drpe74$S?eS4o4wcK|)*Rnj1E9zah!m6Vx?u>{OBUL^&>U;^k_uaW{`Gy(LS zS4n{|oB(>>sg%w}if&+D@G7Mcg*QMidX-X$;v1lsyhrRvL}alH0vX5;7Vg^qN;mLPjHmUiT_V$Y_Mn zn+9qb3cpO(+%C3*=3w`&0D(l%oItqTza2o32vP{w`<(&Q)vQ3c;O`2crczn96SN_k))DdAtHd=mvFLI2nygn3AoPI*sw58MD|CB><>d3pebL+ zZDf%GtFyH#I>S%~=)?eOYi_HB|Kc7ont?mnakW`ddP;y~M(L>mlo_Sd11K{}X9Q4I zl%5tanNd13fHI?WRsdy2>6`${j?%f3lK$ge?7V~%E`*as=$bPEE;~xklvL8IiPEzY zPWEb|^z4Akh|&cSBKzYgT^K{6Gmg@811K*_mpHC2D@vCJNM@9t7eJX&x-5V)qjY%y zWku>I@W|Xc9pzJ8UP*T!=9Hkc}oNysW>FR*Xj?zmcmGo+&bWOs^ zUQLu<7H}C+dU=G%{y0jnh#}D#N9o!C%8Sx#ELWcuq}O^PGe)oTOlF9#^Gs%hUhkQ# z0KLH@nelm}XEMX{CeLI>=PjPe4$fNzB)!J5d7H$9-#9ey@K|AM#9QOm6Z_W=uZpnXH)H z?2*ive8e-EF}cMvnKAj8XR>4RaREu6aZElTG2u3j$)`M)9g|NBDCyF~Oup`s z%$R(`Gnp~D!!wyN`Icw0WAbeQNuO~{?v$8t8^`239?Oo&cLkJmX<~A>#AKHyCg1m1 zMofMX60$Rn$vqJxdg7Se>zTZm{McecvSRWRPh`gAe$Qma4RQ~^n!aZFB^m~b1%(wfuH zGJwBuib((~Jg--<>A+XOjDQth&?}@@PavgHg%|Y->9q|=ZdBnVy+U&3frfx8y{uPA zt_#o*u)-^Ph2*R~4FM~>s#lQb)bWlWGls2t1#w#)t~6X>n_fZOUWaQASJy}~ zuUctsZthg(o4L}lD?+ zI!-eX@M!`ctm8EO06$saLsZJ_UN+HB(Lgk)JJ}%LWi(@@k|S^^u<~_+Kd2XYCQ6Bk-Dm3eVajKUebF zOknMiKl_`_M|72{rFOW7wOnm0>vuEb{bdUTsivucn1>e%QY=m|mGBRf@Hv7Mi;@8c z;sxk)1t}IIL(*mFMS>KIkRd6pFBW97+d!7m^b$cP+YBTrMK2Yk++QFF?u8MZCrG)m zKoT4ar+_Y(sOBXIMnG3cRB;mqBB19>RPhtWAfPKHsyGV656}xFs(1?L z4WO$en!1YS44@ZEH1!ot7eFtPXzDDQDS%!q(bQWs#Q|Mo(B|O>noyUoBMk#<-#-QRM-Xg7y!PGyfBDQ!{45r>e6%o8T22}nMT(MQuB?OMe78qIEN?E^@3Eq!*l2cK`QRyDRiSC760%Ix=E0! zgX{#lS&*rR?EJY!kg1F8^tn}#sgLaJxxQt=PZp3Q=Lti$9B}qL8H1XK%;n}lYkg0?0?0HR)sfX&ITcK0`*$MWZLZ?2o zv+R9^PW@=7+6M}q`qIv~Jqn#O=|0qO&6{TC?bUF_ojm@ialEF0-?6rXW*q*%>%Xkg22W z?3*pf)JJya%@JhIteY!Q%}Zv+&6B9&CZ27lOH}a_&$KfnsyK>g*_jemJjFBYEQzMB zva@TxL{necnRT{AQ)k&(wLqe&x9p5M?^`Xc4V7Wl2732GYXj^Yi%0Us4Sqhk4i3hb zX_&jN!5|*BFIPe9*WiKZ6)I@G8ax`kG6ILSwiJ)F*QA-kGa45}RA;%RtI=MgF%+H7 zSd~(hXs~o%@M5M8Z$7eIZNdMIulC^8UHpS?*D%`ANU-@QlfInkN>@Wyx!PC}hQ_n3 zS42qX(B`u3oCk~Nd9IA05#>%eToxP+cWuNqyGv)LDH`iFjF9^~hqCJSnHQM-(A~8W z(`*&;5T5kCE`-_?2o+x!LLHr5X@{iu^#V&*$mir>a{+tg~Tgb2YVyxg-s3-j=|r zUCiZZfNu}s#_pDCYe$2aHXsuWKnnQ}+iDUGE%`w1r{#K!A;d zp@x@Kyl$9Q9!yDpQQ4ssv=0SnV@qSL?3qG#GeaXf%T<`S%%rA!j5)MN75^tDVf}_b zGV6u!uuvkf@EZ|J z4GTEX_^kl0rG{;EIa9cJcspXLVFhN5-wEJ4YB<>|88sj#-i=slSiphCd%rcbv($l4 z8p0c$()%Uq_z#-hCrN!zkDHK>6V&ZMB0JEc^+^f~1Ea~{4;QZ~-xlhsXdO==P*n+7WkBOoQdm>MtZ&mLEPRX><0npMB&enYuXLxS zu%ZNS%V$YA-Ik*cIJnsfswiQ1+jCMlRl@GK=Seu(@RJUx#OVo|DnU9Rd`1ckBKs)0SWUMtunfsg`dgR3N&YCsAgdv(Gl8ju3WUMpCcJ&XcK zUMI;!1ET=4>k?LKU=%?12EmHd!3rRGqa>vUtN^k%C9KeZ6+re@$HGg=aO$oxP*kkAT?%MY**rmUt1u0KFOq|i#+xBvnDa6+dUl~zGu zH>a$k2Q7m@Kcdj79<&Yu{b)ibdDSe&z&@6;sUBuE2KsS@PV_L#G0;yYw9KwX4Yb`; zDVykF)Ij=ag_e34HIRNbp+$~mHIRKSWu+dh2GY+fw9tdqK>Edy&fA>4EI>WO;O68N zNlIlQGVu>LC$A=~P}QKcIoT#yHNDX0WV3w_f^|T6nt@C0^tNnwYRa8! zq>~#b$B=E!L%5STC5CKlc?eU-sWD`I?;$)3Iz5K0ZyZD$j2SUxZRa4`SezC^c0cMM zN+vU7$Zi=OL|J534B13#AxPz*`0N<6xz0k6!2y~RLoOXz3OotaTtP{jgA0M0Cn#Zb zTws7YT~Na6xUc|qhMwh0*jNz>5j>86ctCV<#MyDi z=WsEDt&TW5(3rzmyCmZ5NMjD8ZB4}4p++2~vP&b*jy2*an_U)hHr^tR658bvXCp4+ zD5qT!aW>{c&ZM;~BhE%$$eGNxHsV~|g`i1pSH+;_5fgn^$Dra8j=yVSQ1J;z;I%QR zIE7>Ix)@Zv!clmA2)az?2aOtHPP`%F(lMig$lVxm>5x%B-1qR{Av;D#8K z9x)0ccxMa>m#~HiZj3?U6IKzyyJAo{g;hlG?idtaVHFX)kHI3OLKlQ~OJUOB{UKsU z>k-U=4}^#vr$;dPJs2W(gdV}X_fUw~u{nfN-lh<-qjCskyN5%>hM7Ys(QOV98(|Ki z9QR0w*x<4VxDM3a5+XLPECNmg|a3797$MpzhQ z2$&}$Mwl4G2biZKM%Wl52bgCK(^@<{d-Z(IF?LKow?Qj(LGyXX*fGTn2F?qPv15uE zjGPx8W5*OR6gn?C#*QgsD0W_Uj18QKq2PJNF*b4{hN9A;r`jLa%#Bu{Fog8y-@O%|W!oLyEOIir#dPz1hhR4mH9^ z+x4A>7Pvy+4EYIO@WfZs_#QL7v+bRz+#TIAfxEbOW5Sw<3Cv!*W5U{p35>z_V!|4S z35>uGVxsd1J29BSvFwqI&;_;qP%=Ur)OW9Bgg$uY|0Bs*Uj?JuCmHK1W(Gk!A4|qg z3}yxc^ND2a#9(F!F#9EACk8WU!zq6k`nuYAgq;}7`~sM%l5rD*p$33XOdw(DMu1LA zAYp1ey*Vv`gsqzZIyr%av6}%pC4q#sF`B0bP=~w2%#3UZhR}={5b;iV?lghKL#H%1 zQy}rcDa*|khy!3%tEX=T#G$tCYZ zCe(U0dS3Y{YTH~J&L5-m+Kk$H9xxWYTGY(W2ykrxJaCQ9s~#|W%xg1hXtppL&UG0z z4&;IBGwOvNP!hK3^oESec_uU_xk=Ql&q}JiRlX(U@we?W(#BxOs9^D1Ra`ST@3L>x zD=7Bn9rqo21yW0?g-aahwLYho5~o0#sE3BYdiRQY@Dn4s{o&BC z-hFDl%>HP2Snq+bUS-6u@z!NA8-`#P)X9SioP?Zd8ryzI!)54@!Kn338ZKjo>_qrx z4G(`rHwYNk{}HW9d&jTgb+PWb4_nI*V~bYn*If-mn@W|2##Xy6v=#k;9@Q%9mHe=t zFqQCW(jxv068vkA{OoBSxSbxX`(z4Q+d7bbAM>dcv{tpCc~0W#6tt6%L3~aEx_&kV z2l_X#+C~lgoXXmby=QTI{JhHA4Zde_Yy5)B+Ks+v@!0i6m9>uZEN-A*QdxW3t!MFA z_GOi|^T)GzO#5oe25;&0EZTRg$|g3Wz3MiVO>9OR>g_6<*o^kEuc>TeGurCCuCj^E z2I1J=P}#(0gOPnRWrH^s$2NOQWu?tvRztgQtE{vcOk`kps;sn`**5J`S!pwv>(K5y zDl2U^h}d^kR@w|!MQHcElnvhA9NX-Dl@&I_L~~g2CIiZKG!F(^OXY6;RB%C#$URE3lYzPf=OnS70&co~p9K zufSr?ovyONufSr?ouRVAufSr?otd)1o5y3D%~ILKW|VVht88L3%DHn?HnADy+_@^7 z*o<=SJe5ssMmhI%l}&6$Irq$z4c@{Y+w3frl{PaucfQI>o0*(@w#rJInVh>oWu?tb z&RwXo(q<;-o};qTW+vw@O4;Cz^s&trtE{jY=iDVKD{RI&cd5z>n{m!PPi2M8IOi@? zSz$BIxyw~n*o<@T%8-ShsDn&t&)|E5Va~lE1?_2k2U5;mm4fbEz9mi4y-*>=-kG!R z#VL7M)=qb|$_mdyX2Ps{iOLGk0*hI9jmiqo0*hJqQk4~+1s1dJWhyH?3oK^c%T-o* z7Ff)>SElSQvTU|iWfPlG*1bw)6Pr=iy;@}xn^D%iMr9M5QP#ayWfPlG*1b+;6Pr=i zy*_2(jmPd9i49+{Fc|m-9hO!zdG|&gmS!`F_a+^db~BmxW*wG>GpY9$9hR0ex%XBb zmZmew_jU!&JhHk&hlS}l{jS$xVLHyg8+2HhjuY^mIxI}b8F-@(3)685zDtLN={N`9 z8^Z7ljF5wCu_Q^%E-^?aAG=2$I?l##5#=j1nZSeTA;@(vvqrsJIarVb0!aZcX-UHX9&c&!$nhUc}PU%d5!DRwW$;kzgB zj+i~R$eohsLQHfYx0?t^7C*nvzX~ep`ROx4FVK4bXrVx9jUa2w>iuVxaRhTvb{;e zZLKJ&&5EebW)WA=C9ZL^BWh>@QDT}CKYXcKE=Ss{*yvHzb7D>#;zQ-{97fUSJ_Rs@8 zOC%=uJmxl-r4kbx9uBZ&0an5nh`AqWvdWp5SRQl3;Vp*3awaTRL>#;pE#XXPoF8!T zlbZ=;f@5Vs!Algo;x0KlE+hzEzJ|X>2>)AC73Vc!zlgW7T_m`}s`BXGtZb_VmtGX3 z<7z?au3sZ4-Sd|UN_YHag3|qdxuA5nUm+-Y%Gmsp#Fc_d>`F;xt)S$|6%#;L2};`D zgwHjC3f?Bc@yOG7od@BhcY9NJgIzU(W#Re|g2=GeHwXpAO@zQBdrb|H4>`WL95cbK zRF1h4Zo3m31ztUF3lI##I7oT%xIKUxyTs}Z3?_g(0tVwa4Ln?4)&~^+I9bvbEiW4a zs(eIyvhLBsac2N^9g#5P-Hid$n7&}pIQOmqYACmM2oo6J-W@_xYm*i336PHA(vl`8 z+#4{kY$hskR=6*~;0}!7N5?pjcz<<&z`@$DEH4~!4>=Hiv$JBO&1OlnAZ!X4__Z^! zvEop8IDp`%@r12RC~OXxq42`khSsD*a`Phr2ii9^w={IOiZscYeoKrFgN=ghnu6ld zfWv7eJ!O77=COcEHZT0{yC;b$9u7Bpz$4s6=}z;0*QY|Lsk=+qjJ@=9NVSNa1Uu+C zV#@H|*RFD@Vx!s2Wm?r={a*Xuswxq*$**{8R4}QwrfKSV`6wch3yg%!4x=eq_ABnBA9leJ5ty#7!geI z^JWU$bt8f)yS$accKHZllV#pcVY`Ziu*o(%Q`jZckT!{DmqKekG%4sEg;t!%ndn`G zR=fymmqzC^W= z-kZ|3c5!sRB(;(LNTCy7lG;e`Q|QE(q&CtYD|F&ZQXA<{6k7VysEzb~g_gcFY9l@6 z?`1Np)=FO*wUM5x(9)MiZKO|BXyHp%8|jl2TKJOHMtWLG*9l*;+DMv9OJSh|1}gkvf}fefNjwpZ34T@zC*edeCivMYETf57O7L@1 zSOycpl;G#4u#6?6GFo|F3d>M3DkFS)3X4c$l@UH8g+(B-$_SsC!Z`{4EQQv52+;&> z&sS*0i8u*>K3ky`FXAKsdVxYKZp29d^g@MJ{D_kP=yMc0btKJQpwCt4)RQ!KfnKE0 zsViyj0=-zFQ(w~D1$s$J=Op;03Z3}Uq#S7bJcUktX;Kc*%M?2CrAawJFIQ;kOP}CZ zD75q?XG&=Me1(?2$Ge zwl872(n&k`PB`$7_s+oeLd zj46UC&0nd|GNy>8Jik_Bn+!xfL>tbo>U((u%!Hs#-};i*q) zIz#KXXn5*WoAhth@YJg`p`rEL6g(&G->%__S4}2@*6+~p#H%jxuh;Ozt0osg>l-v& zdex`?J2hN-m6Is6zEQ)aSAFuoOT(pCjp`UPcWb!tYLNc#(Qx5aRvlZvSHW`@fcrFD zc$HPh)*ocN2rB?=@pD&zhf+3Y1=ys}LJ!JFW(9ayp_AYu9#??P3Z29j(YOLUqR=w5 z2&NTai$crDBAQl!M-^HImQfq6{g^__xH4)Z{kTGluwu25enO!|RI%DfKdI0;E5K74 zu6Ywe3tE3#!xeY(3h<1EEB?e;0j)o);fh0f1$a)w6_4VqfYzVa@YJPt1$aTjQ=ig= zhSp!y@YJbx1$arrQ?Js5hSpzJ@SGLk6%9|kYH|^@{;Gy2UUe(LRt-iW zSN#gGUBjhUIgLW=uW7jSs$T(K*Kp}oqdLaS8yYUW8ms_2G+cO^<9iNz;9l`Z|aqX+cW)qCNMYzcqc(~^8dRjER>*hWYYic6ixz*aLoSirEn5f z1Y`1lKZRvb5lgxMgA|q_MKGoQJt-^$%BYN1{xF4QI2n}@-kZWAm{?_mKT2T{N~|)% z`%*Y3>wm1!nhznGpzTi-T5%%h{QU~8coC-ov_0h?%-LBVq}3Y5jhykPDzxH9oCMJJ zi3*)M(&qb<6gu@J&0c7GnnI_pwAub-g-(4*a~Ik^C8cw6{izC__|haDXnVRsC%$x< zeuhFPzBDNZ+CEL8r7wM+pQ+H&mz*o1?O6&fed)9OY=xG-G-_j<%u#6J%OJI{&a;FzGStr?X#H1-;V1nm-LiPza2MUkfKe@BYY|PY(XZm;eLc|fgnX( z1i!#`t|Q^bLeNvj1a@zJL2!{EWjuI27YkCxg8u=*C4v-j5a_wgk#HwF=qX}=)HHf7 z7o_mN84u;46@pBYvNP!U5*1zwG+pITxN#gbb&m+Ri+n}}2$BmWD*P1adXYpEM>$!lJEz6x}`OrnXioUWHkRCp`Ub*)3;)@aZ*O}kFlt0XGC z73g}kM6)N=H4+ux3UpoPPLsl(pE8O<(w zhp}lq=~QaBH`P15j+6oXL64Uzbc#x$-Dc#Wm@YRrw{<2~ahs7%o<=n)U2qaC zHi`LxV$%Cz3Bz4a0`{AW%>o{tw(R#7k4QLaIoMik@o;-viPV;Q1k3;9L=W%kfcv-_ zTRU3p{by`va3B29%|lN_Wa`0Szw$Jp4W%-?j1^s&{q`Qbq3anzgC#P<$s7+p8`P*A zS)u0r&E+mcC;;)0@cDp;%rUgw(cLLLgDkud3E&qLSltzY%>jQ=!$o2sMZi9Qzog+w zDu)UXDuBPL;Nt!bY8?It=&cH^sbVzWrqG%uM)B4z70{S>8rqvHl~iw>Kw$5;0~+JpKitDHh?56f z2lgFeD=;G}tS{*%!Cs+15vZ*w@ zI#AVV?Fu*(K^?3zJE&rfpH&4HHmEWusABD(RR!01s4_RGVoaJ< zffLHSpn_G)Pgx(qI123G^nkZIX*>=A`7;9ET1w+lf8^&AUu=O8Ej1L2!%H3Z#(1v_ zq8OiNd$uW$#n@cn*|zR>n9csVg1BJ}%!L7*jZ!8#CqUa8%EKW^C@}y()r5mvj>XN$21u*q3@d#}p>g&+}}SB{;yBd9tx3(-ItZ zD?Ho{)25{aE=k8{gYJA!m)eKJ!#Z8!nt-tc1<=Zf?X*u+dMDdRyTF6(9YwpIcn&p1 zr>*i_w^@FYSx$Nqe4&S71!_F<-PH<1*~!#5SP1n`coHkwDdFx1|DeI^ ziN#1fAbJy_4U}`*Iw2ZkH<%`=(e?d0N5Fjv@T_sQwX?}?)9hxzWTg$B>1j9%5SSz>md z?=Tv|BNDS4e1|olVYf)kosKxotHUx+L!mC)EmLkfGM;mod*Kh& zdCfxb)K{BEwct#6-BPfPOd;M>zrj$ma%#-3H9IV$>11~`Z(6AFNb3i`aM%UrErN=b ziqe~1T;3+8v$Zv0{F<`UGO0#>E!j;_Wkfo5FeAQ2<~;`7?Dh(yrO_SlTg1-o7(r+3 zu?RR;?Fys*Ll4=M6t{$(?X?gLUTq1x+sBYiTX8e^D<~gZB4b>bNk4InJ}``*Dc{F% zt&FH($g29_$fgFAJ~Zs_L`P+f4SSqM6dW_E4bi#RlO3Xuj`I5{9#V%#N%B+=*<>5p zl2YV!57|^3L6rGU^APNC)E+5&&x|;=Q)+Kk#M#^(_4^An{p^Udc{JiE<<5yX{i;nP zHaIr|2dh0(cAgi3HTp$>CT#Nbh^!rC*N#X_O66xnc*ZgC81kzmflEr~%j6pa1O zbEKkQ9pq~8!!pmPHa67qfKqIXNgdi+5l~8xnAL$=8Bn=4z90s(TU-@`ij8Z{FfNQi z#m4-qql;otvoYImHIeYU2WrB@9|ngZUlKr?m2qhWY)yzMX2#VOu**UWET|X;KqN00 zq+%KF`U*iRQ=EIhQjm%fdDK@C32Q~AoF1;)eaSTzI-*Onpxv2VXR$W;eIdDy)nSJ? z-gP0R7}{=Ou8+9X(l}IX?}ms=>}>Wjz}*;e$s%L6Gr-+!Ij{&W$knEvKP0VU-_-jp zF`cfb)`quPkZcGIr>Jf7_5{^+uy$W>d9-`BsvANq89!cvp%L8~Vrej1vu_MBdpzS8 z8|&@6LM#bb=bXDk%pT9U)@rP7_k>sy)HPPOdqd0~&-m7?Zuf;)dY6fdi2EZhiNso~ z-2)MqI0EwHp_(-^tZm%bqr?G`Om*XYZ0j+{NaGqGAoI9mq+yLp$UNy7IIGs$ z;ocl(wK7T}`4o{(`zoAwFSg2`+w=`TE%0=ojxWiBKWO@ygq1TL-;rn7X9b(?*}WlO zAhxwqfp|`;nClLpBg^Si*a)X64 zgbt-oAqq6h(BGVJIn`2i8Ew%Cu<1mN7|}FTr_3m45Jmc{ecF&djX3+)oh5aIw0i<- zK2c-|)vk8ho=qHBLTim6RDU72rcDqxB^MC{?>VeVUUXPp|J$S-^(q6im%k`^fB&ZBbJF$}X8Ah`z)@D)^!X~Q)T=L1~2&L;@7Mh1j# zSZSfg3P4 zXTt^Vh?S%1DdmS+_wIvhG>>F7pC05+@xrLb4igsQe=RQW}t(JiWTMHGk(rp&f z&dXy<7`}H9RPHKPnv)}BK+NrA>jNm+HDgOKL}+V6h{=sJVkSB_hS-7j#dn1;7)2Sa z>HO{()J|KQ?(Ydf{ixTB`aTOvhvHDsT`=VPiD^_9dGb3j4-o^~$mFsHHe?*S$ufBk zeb^|}He7C5Il`c?&4hH8+F|98l*!_#^&^Jrz*R_6KA^V{RcXOraTFAHh;2Pe6uzxG z#mxL6Lp??quiK(ERt#HvoUm52KnjdCL+rU9K*Z9e=V9=2!=l>&2iNMK4-oiaYKdSP zc_BbLMo0o@$IFgr#eS?pK{u}i1au<^?B&&f=oldY>||>Il-=P-a67=Z04TP{Ezrub zJpjsG{w`wE2CW-!5YkyG4uiY$>`eEoF5V>YmPJ}qgzqERMF^Zd99BgKz=vf0#+G(l ztX0RjwGRj@ws)D<;6vORV|y)TTFb&dCJcPgW}3rKYI{?Dh`M93X)qH!^@p(V@ypbU zox|)4G`-a@6;F>KcY~IPFa~A>P@BKG$3qwgGXtox9IFnQ821sgBE+R)-wr~vW5_0A z2T{n(i6MIm!$A}@^8%=nz5t$fTBiq0D_lh{K^l;{)6w)90a$UD6>WzmiJuuU!hO7a zoE0$TBRbk!?Fwj{GTWQ^0oLU1tG5i~60p?S0RwwUxF=Ysj(HBa1u^H=18xn|98e1b zsV3}`yUhF{lrS>Dj_l5`gXGs8cX%L3r(g1=h@K!Hw24nBMfPkCp zL@uOYSQa4ol4ZeAFf0!kc*n9pC=6B-g14=eVN~v2&B2f^2nhe8W(IILs{)`1Csf?M zKEZ%4447{Bnra4cmRuA7cpTyGC^QUBl8XZd+!SYCGRo?J@b7RoO^`({34liTj${Ln zJuV}FUdUZ_dU9ZK0=$wCP!jI8Di=FDWW+OeHDN#jS3Uy%iNlYn>xk+iswsYLz65n zE^%ClTU`LxD`2W71;+*rP1K|)*%+an#kR_k?ZP{JQ|#RlY3wgXWHzVwC}5(fNvij1 zs8rPKjqjJJO%*n8n%w$;#9(p=Elq;mWWi3jgSob%>=)=x!iNK_qe(VpMzJ|y+KPv} zBxW@;19l@lg)^^E#GEZgN)cvrsiOX3g{@P}*nQ!$MI zI=Ufs@X+H5m{p$<6*{`xyINWsl85Q&ws;J`=Us(X_=yL2bP@lN&ErHSv%TbKxYN2? z?8e`-unU+|#?h}j8tw`!HCEx3;BA%6wzmqpa(J`2ohsP1Zxe8PM_JxC8f@O*`XQWj zsQNP@)`P|;Z&PVE{GPjrD0Aq)(-fD}QZ)E3D(&c$I|q{m-l5W_QnI(A`MjG-VQ$KP z=~l@1Y-uvdU|Rw`zwgTB%rfUd_fR?fK8}qRH)>i1_L}PSyFJCjt;;QAru;{SIlL)R z!OW0-u3V~M=Eiz?AulZ`5^veT&?er7Mxovb^9iaSab*}5^@X|C9wce9o;hMQ^2W#=Xv z&T_@Fx=DhwZFyZBS(OH;#B20Y7^ zOVgO?Hs6)Yv76IJ3#hy+F*|vEAs427(}X+67AIZPj5^mACq0wP7gKRtC7J5v@ugJS z?9N+QhnnZf&a5} zeL0ucDdm_)uHf?ew48$GN>kp^mX=f0tflgDQa`jy74&KEHv=yJRW*{AMccF4=MhxV%m&N3Y(_<@ISfdG!uc4qi?4Bd@Nf@~*U$yt;u( z8`Dzq>YdzoO^0mT_-!MX*Cyr0Z+CHdT~coRb~l&T%X0SHeN^6UH+_5virdfoxn_+h zLyJGaWwoLVt^FXE)rm5+^g~=$AD5ApH<_}Iwz!Ne{4kYu#U*6j%~aADmyl&2<-XEY zmu|9u%oWQt28jm8|F{Q48Up~0@FW2p#hR96*F<}gr)+t;tD?icXKZ=0NYMK9tSe3x zB!fNYfkZ*F+VdWeD}mYey=VcMiuri&WhyTgYsE^y7hYa*#fgR{DZT0esiBGPZLC0T zVnP$$+iiJbLKEGu+j3z-ybTCE^oA>z3Uc)C@PJT|)7G0F5GLfz^|l4133poNbEAW_rA!zUpk6*VC-;(pp&Vt zSa!i7aiRxA2OJV7c|cf#Lt>f-ge5p8P9>mNtdrBqJpMD?6-yOi2$-2>ctEHK0A{9{ z1auVZl4)fEYL+cerj?1NIksF(D|`zIG(XoBrwURu&GSH_AVt&Z9uPLIT$_L6(<^+%(TD*QbUuO&S3@W6BC+9JlB>dCNyEV*p>?ua%NiMilu@a zhD$vl6yz{G&jZ4Q9EQs+AWg_oxRT0C#kzDpn#^=T07xw%&@eNt3K5|vAefmhvWS?E z_$DeSzStF~T~I8o_CV4B#nL4n5QgAbTH^sRA32yVW1v2@gvm^o2SB2xiH9pfL@H`R zVy#7lB{(x(<%(q&91>T1Ky<(%ag7IrB{(Fm^?;gDtjCQu=*5 zrkxvYvAb^K%Q0GRa^-1#43(R?yf*2bBH|a95z>x{pw4S-gmdP5?hOkJ7Lm%u&)Z^g z-ieD}qT(iZ#NYyvG<(^W%9+Ls>?^KZsLt!_tFBz=&S`P0D;LUhPTc0oh4!$%V^ZAi z%I(t$PJasZ*Ic=MD#4XgsK4&Y?Xw}SoI-sEl?QkH+hVhNzUhh+`?2pM2hBcLt_RJ>u3QhA{ah}tG1i!qic|g(x5Z73 zt%>%=rBhwG)ZTdXL{~1gH!eNNl}qi7Pp7$Zp*<(KQ%!jryaNR8B@n;v%#(V~Khj;C zRdabh*?1W@%#EOA_hx)CFM^VkZ8kTjM-W^z62WTrH)ljtsi`%=XiA?MVZp5hcIuf+ z31>xES8~Wm(|djlW&B$7*%8&+C@zb}ZWVsftBc>i3c^cw;AJ)TP#YAk~f;hk?{KXO1nW|?(V0DaDgxO34ToOa_m;!I;2a~Lcs1Xe^h4U4LOCwAiA#p;uEMmHa zpE%oJ9zh+$o6GhoN45lK_O$_5i!T`xV}yed(Eh53f*B)HDdY|uO-A-=0MsP*h zoH75k5vJV9XB=>yz><4Oj0e`mSnJ`*tuZDa-w<*59cS z*)0*+T56XH@=|?!z|~dL*frVyj)*GxyW8DNpc5kN1=cD?%lozs5jL#J-*xVr!3*}IcOV2j-g7& zlufsJ3~ruMC|dHid#bs!3inINOmCw9^$6=aGTBR-*OI)EV98+3G})1YaegE+=dhsdMQ&0}pgxrH3%nrFt0hAMR4=0$^jzey93JUEw&|$qc#EJdqc2 zGZRdXlS6J+3W{-Z$j$L!UdYY$SWd{z^Hg5Qoe^P~A$MkiC4)5~cUB6@!J3de+k@F5 zw=jTmvfMcdCbi>`J2wS|b{ukxJ(w4AOFWhna?6N7 zuJVw=n6S9eGxS?+vLzD}7kLU5mykJecCm*>9NsMD*L!&Yb}c(RQ4&y)>#%msO+|o2{2bJCG*ddn14=VdQu|<4NoDA$f#q>b<^;NL&o1P{U6P?
    7AY?BNLrkndx^u zO=c!KwKLQ2dzuVQbZTj)KlC)2n&{NlOz-nF8Jp=^b_1w6GQeM z7=C7(yC>;kMKX3jMbxSZYS}blYnk84#nd;$*CKCmU*>aWU$aCl?u%+=_chnoB42Y~ z=5uCWXNX$d7uCw{Yrd~Vk-~kM&mwNYglxlwq89f>wQOH@1@|^w;mEG5+z81|8 z?#q16?CT0qi~FKl*?nD2waj`^w(EsFbcMAA*Nf{MTLTw7X>Gv|tP#fovo|;vUyVd8 zeo)z)9b0Ev{GhV8Ikw)i_(5gYJ9dy|@q@~4bnIZu;s=$z$FV~!iyu_>0b)6Sfg#+d znC3b6kf7VU+p6%R({dv=#5|I*DT|hecYJ5s!aG#-Q|-WrC24ir@_i*e_GJ_W`8D&&M^D4nY?cH z=Q4TS?9XTNy4hdIS-m}@a2|C~G+q38lv%i+f>t=sFlh@7u zMkcSDeMcs*oBb`p=a_w$M=67n+0zutW`9@E`DWjpMQ51(y-Z#=`}>)^ZuSo{dEM-L zGI`zXdj+3k_K!VEixHVUU5(i6`vskE_9;Jg`(A3>(HUl+n#t>CKQWWn&3;lQubX{Z zCa;_Q6v5}1eTGMAT_>}r3p<;Arl6f6;{}+P)LB_{hS_Il^19jQWb(S%=VtP{+2>{Q zy4lYVe2&@Ydz7|FWcGBA#AaV0=zOy;%%U^QeoiK@oBiBOUN`%qOkOwp;!IvQ`%=N@ zn0>iNX}3vcPq&+F_VWduZ}yd0bcWe4$mDgiugc_gvtO9W>t??wlh@6@TJSk$zs#cp zag)!-VCFNY4tqrEkD0GXYB>iulLoao>0FstORLBG`L((AtV@Fa_|cQAa_d>w1oe1- ze|2s>>!P3@@AI$8t!G^o)Z_jBbxA$rFwG>q@4rD*;e%jun>2_&X>n6h%ezg~LYLtm z91h={S1ZvG$7Jf=l3P#ohc4rKx8~LpZbO%Gz1wo@3AdrkxZdr#^@Q7acxadPNj-L( z7#fcZt8DaD=x~i^oB5nM+wM+kdAHfi1wmBtY`Z6~R^m3a1&j@Jyf?R=7#rCT1_<@; z%dIEehV^*1-Je@exDD&^YD)<<^sK!+K`6y_{Q5xDBiEY12@m~C(7)k@svXWLu3^+bQcYw7d$xU;S1WNF zha=3ky}9+I+pwOQZ6D><6K=z5Jlpo=))Q{SdOX`c&aEfhhV^*1?N90*aJHTJPwoT^ zxr%3-`7GS#XWO)-mUo*lV=&uJ&a0KU&Cj+|a_foyg4uRzZav|)V75)qttZ?T%(fZ1 z^@Q7k*)}t&cfi>;$5)~AW<1->XW=#s5O5vD|GcD@cU$&sJ3X&f;x-OP=4Xg2NTa#N)xDD&^ zY`ZkKo^Tu1ZP(=0O5EmW+qJp%M1R3- zyDqn$a9c3j*5%d{ZVP7H^||$g+k)A4V^Z&cv+WjNh0eh9Y%`xTXWMN_E$_DM*>-zg zt;B5{jxgKq$gL;chV{&BTc2A`xDBiEY}=4qPq+>1@oc*@x1Mkt*5lcBS5ohQv+Z6{ zg=ZVNO&Y|{w)>M>-ff~*Fxwu;tChIT&$b71>xuq?+4fLwJ>j-swr$F-C)^gywuf`; z3AY8a?UAJ30cYD|z6xD<;n`+BXU?`Kl3Lzv*|Y7*yjqFdI2>WNJ(XKex((}@+4gj9 zJ>fR2#4+Fd#7TbAb%IW!_-C?;kAeZBV0Plt6)=*rIj{&?NmRo~xIo?+PL0E1F zZp!HqfIVTk@&LexVYzbq|3^VN*ulP@$n-!D0DQtk%g}Pw{?3=ZU2h=SXn#mp8##o` zH05W;%G8K8lSj}}Q$xgB$|Gp36GOxr%Ohy7lS0JW%OPa4X(3`w<`8;p;^YvqR&xkF zH*so+G!5+%Z_OMCPqlzL(W1+C2tu;vl=cdV^mFn@rVV;Fow5*~UQ z;ePpqV+vp1HUDSuYo^WZRXESoRBf#&OA6#&;LZ-Y&Tjb0JQYRfE%4~DrfR7pi$yOk z^lWv|aQN|L`)a=6k{M)T^yWE?cDA-w;nzIj$A|4*mk~>DJ(pR$Yqh&GLjiK#qL@s7 zoEjGbT(LldC05zi)~1eXSGi=LI|>yrZ|+^1pw`(TYdm>g!dj1qtnuh_W=q)$Knet1 zS1>rDTqpZ#nB{ytOa)90_M)k(dhd&c!vf7h?j z=Zn>9L%FSpzjp|)uB4w}A2bkNJyu^|==0TT6@Kk;aDBgO74X6E&DZ#wYOz}BZfPkU zQLXkHJGRj08`WxOL#3;^_R!;hcEV5k9pCSVKkRoxq0cw@Yx8Zu^g97Y@h#Wbp~wFO z`e?2c8#-T9ZUaH z=<~xWJUZS44Og3*i;xiteScI1XO|k=D}_Ekvme1|lYlv_+E!}s_s=!8hZXwtf(-eG zzNo7mG8n#^3}1mG@T)`rYvA!ijxm3r{2!oXa6Of{(S-<;#{hbQ>8Ig{el@j23Vr^> z-GGd}z&HQFy}&oMHT6U4533to4`2T$cL87fE`Cv4TUR%vc3|D$!v@t488YZF`u)5A zMnl3_u!TW`3Vo*Z!7p$y@Xg>sgX-YBsq`I=2EMDW{YCvR1`nzI#h}Ts6j2F|hPrZ2 zsX45^e(;d``hi30h7A10pg}c*YX-r1PVED2S6iDQR6_Gj_g@Pu&hRC=F;DZrr?ly8 zU&9QWOgqPa%VTE?&-DdtfY8wMe5o^nv3>DS-QH)C#heYS+0P2Tj*UM*DA8PSc2Mqg zIFKV2k=`xN4`KX)pBB4f_J=56;>vZeEOq6d(kaVb1rEg^m{+(mHcaS%^If6hot3W8 z87AL37aCi#U1YFd7y zI0AlUj{2YqP=Ku)P2dh6tO1jh(~e8EL29yjXY5#rfO{Md4F#!L32Nf+r=F>UxPq1m zCR3G1`+%ZNrIr>sy2pG$JiMp+R7yju4PEdnctxrt!t&{;9O{OV@*))eTQeo9z%YHc z^%+qd25)=^3m5usw*ngTEh~WS2NwFgZAEC8^WwXGMu1f{O?GpM(BUJr>S5I)E?V$k zq0c`20)okZ^D%w{Ui064g5N;M&^JDvWA!P0aVV}qTJzxRsr0pP)_#8?eeWB$-=9R^ z`z~BqVjrjUg)Y#s+`kJQTI9)-r&9e)hTPqEZC}>C(Dy3%XxHBY?MpiQ6bgL{zxzp{ zu=q2D!skF5GhuXf^q8?DPbhq!rHNxERVR(vOKtNq}= zzJ+N=77E|hSVRinBWBIN1067^+xSTY7+at9zYB#g2Edqcy<;ZAEE+Rm(pdPPfaG|_iqb@&jyVmhNXqShyVH(7D7~niua7ChKM+x zh&|&9g*DK?tssq@G^(}=hm?a0k6Edv7Nj?wGMPCA9D;WR`_Q!=Mi%Yg`FVX1OL%t49R5F#4*P~ zVnL{2R2??Y_{33EX8iS^ryEtV%<3}AJJmEW{ft6k3jjC6e_l&7n4``#D%=HSM~@#l zaddU;n9p?2Rw*LfL5BhXPLE3l|zCJ?oraPYP~07yg09?u36t zV}+OCyM|$nov>jT)iv^HUN&)Ifllt4Rs8GNy+XEmS2Pqdz3b4?FDqmY->~RA~$Chv< zuGSPbd7-wj)eChLr;ODXz5-3sB3eEAj{w;y{MFJzVK+$F8(5_a<9XP~aihm_tbQN9 z?^~!p&r_X{x+}vY$VAhj%RJOH=IF`Cwt@GOi1-op_Qe&2!XEg9 zME4{ZWy{FPV|yde^!VBHeUFWkC#9GPw>^N__S(iA2R}uGmJ2mA+|HGr8wRr>ZO@Eg z`vrak?QNx~B~V%Zf#LD*5c5x;!e7G&nD|cq63CEJoQ&lVs7}Um*d#a^%MS@;EQhU7 zR1UMo$ymNHkg@)vvK)ZfsExl0vX%i7sy!t%g@F2TLT%(zw!CF{JVjS<;Mpywm&71v3x}! zWBHmu#_|UP8Oyf>GM3l=Mcn^kfsEz94rHv~8OT_^?2x$r%0R~Qb%BiaZwh2A-x|nR zz9W#a{2PB6xBuNh#`4BM#`?no8Ow(UGL|0|$XI?%AY=L1K*sVv1TvQYXCPzwDS?dT zvjQ2*&kkfPUmVC-zABKhd`%!@`7gf^kN;PJjOAbWtGN72fsEyifsE}B3uG++|GpU4 zZw+KD|7{>+{n3GpzBiDu{lb?#kL6zoWGw$uAY=J}K*sX=K*sW|fsExl0vXG{^JU*3miG%}EI%fY zv3zVGWBK2FHLgGKYhK3kv4M>Feu9wUtA6kw{Pit-)qJ4;{cK^^emuUke<=Se2sS^% zHKjrs3wK9FHQ;qo=|Ye0UT^DD}@o3Qy5<@-UN&iM)D z7eTgvsNXItz`rQ(hkvcTkpDaw;IKlW-;}T5HL=eW{t9HY$FjerYh;CQfNcM;evOcS z4f2jazoS5Y6Xa!3sV}rY7UYGT-?6`GAlrP8^64PMU%#)x|9l2&EHE;CiTzz9S|L{X!n_moVRg_J)FN_m9~AZ$Y;EMH`=RKETcIUMNQy-Hh>hBFO#V|1mG4d?v{D z5B1+DCf^~QU59-Zv^>kyr0GTPk?OqzbL;AvfU4&{0Yc* z|A+El!Gdk~dnkVgWV^pZ`NtsJ{T#|eK;F*#JCr*>?$7%~K9JP%~MAH(vcAlv;H%Bw-P`z@5O19>#>uTb6q z@{~Y+66D2!{2Iu&1@c~y?fwkwe*yLdc0YzP?jP1ce3|vz>>s|=zi`OKaP*Dk-$A~y zaL75Jb|3gZTn`7rSMU#%_bvPg%B_s^zZPWshws4w{a;y;OU zjBkiFr>`s@DtJ7vZU3;jzYfPC_7C;# z2l8&1kC2AQKZ8K-3-b-PvFNW~gZx>LZTYC6{+Igh+W(P||2jCJ!}4zm`TIhy6Y{?Z zd8m+oBjl=(#|in*LOxZQ%?Ee%YFM4s-~RgJIcp_yo>YYS3vF+@_&K+UQj*{}Hg#5pRJVD6Qg}g|}mk9YrA>SwDXNCN>ko$Z)9^Y4l{9_?E2>B=> zj|CZSx1jX}vdM0{KahSFqd; z@_)ebJ+7x%e>BK50{K5cUI4Nk-)SJjIV>kH0Qo$Saec=67lXV!kZ%O}{6M}71^Eq-t^Siho)70QEq@Zo=YZVB{5c?h4Dzp7UI}s=9N*jiF9Ufb z$hQAGK>oiVuVVfIkiQ4}o1<8M9^|PYqeD^uw?Li&vel;#IDR(BkhZA&uUQ6>x|+z;g0f&9-PFA3zsK)w{@UvhsfAioyKM}hn!INtzihQ`+mas$ZsvixU|zYN!h zYFVBGatY-3Sw0u!Hn_fH<6#xZaE`{!ziUB02jmIN-vjbr!ubQ(R#Sh^g8X%mN3;AM z$R~h2kYzOdr69v;N8lfCae+#m`o`L(PZ-I>G zCk}-Ph4K$TKI|V0hxEb(NBL(UulXsQAA|G6C=UjC@j#fLaGnR{UxB>mUkZo(7P>;Y z8RR4WwQ$HV&(^KkNkMLjTbN zCXN|7mTsc$-wR@4z<{HUs!SYp)KQ~;S66#X&A{WUJ-q`);n(E*k%V$T5j1b0x!w{3~<=@u>f9o{aMe8KmRMFWQ0ihPeaQ1eC4fNGU)OoVaSdlTU% ztK_Sm0p@mf{x`T&u4e$ZR^>b2u-oFWy4seSfpte6MR9Y~QKRv8B%^>UGex!pLyT|s z1D{tK;GxCv-oc&$=03p*Rk*QrLiIRsZPZVtceJ@%vuR=v+>?IPQIn!*A31uI=v`Jo z-iAcg;lW5`1<}LNzn^e0JvjW+_b_TC$GWqiR4E#R!w;f|i3eq+Q5OI7J&YcCP(3*O zAbL3Z*yBb`J{VVw4r&}kKgW$cs7@^Y>3bM+d~eUebm93=-^VdyM^5_P!E_Q-`1HLT zJE3R%!F0lW&j5dqF@MGznWKA?gYV-ToL#{rzCD`1fJ8?(R3B9O=&3!Zuyy#SH&M?Y zN6Y+}JG(vq>H9dYXVO6pgLzoNvu<5KC?ihzJ@ zk8%UanzEoR!# z9yc>3y#G#~GUHNyWQ-+#2-8UB!AA3}UigiBBv5{7o`00z`ezNp68Fqr_+|JEVf;Nm z2^f6|&r#9?kMc|VaHag7AEY#2gEu0pqwLKd`U<|qNBvASen>PFgeU&!9y2vi6d^uj z@X6KyphK|9{u#jP?|P0NGjZI=UVQX(z<{5R8ryU9&yVXFHE}$CK%f2`Tt4xH0dS-N z?+_VK96uHxzw8fx_#PDeE5Jbo9*2m!ljw2MpC32oI2ahkwg4v3Gf_V`{{VmoVFQiS zzs5+DLeYGN<12WcwHgXgaS}Z}#s4I#82IOtdM6(}DSIF_>IiFxz~hP4>R5PgvTDW) zBhD~IeOAF?Sp^MQ1&vt+Eg1zhy857Uv*w%8J>$V1aC+ppNt$m)_xzz}QqOpEq$T|3 z%sAlZ$4rRA<(LU0M~^nmB_+pA9-C1DePxs!({ntOj2b<0)NvEWjseeMJZiCq?{~rf zGTIq4p=a#)V<(S+;@_EPiZBc?-X@J2*$dCljvYS|Qs?*yCnR5vg9qD_FaI=VB0PZ& zYkA}3p0T4FdLh!`Y{i&K{rh(fYpa$j4S%Tb-`T&Z|Ka@``&asRHurD%AFZ{u-L3UC z-L17X{g3z`tu;0MEAUMPzNx@BrRL^l_}>xzyDQC=;e-4CSEcLl;^9q390KC7*8Uxp z&W2)h|8hrXsef~0!(sj51qtO2cyUet|JUC2^hSD_E3doToiuT`t#)^k;WQ_%TsUyx%!!Y|kq^Lu55SolocO&e z*FU=*+-pm_vfWa5SG{^=SG`xi=Xz!P)!Ff@?qkG@I`2L{K787{q45f=Vu`@DXTI&s zFK;AZ9GM!b6yD|@`b)g;Ctx*_DFwB$q`~>Q3{@_mWe`1k<=)BcrA$p!ie6*as(7-* zQ^$eWMQc1ywa4?+aXio0c$QjPonMR$^MuiGvGtZpPJgHb;i-O32MhmJwQnX*ry3DR z8ZPTYdVx}OA(*=`-y=k1QUaN~cr|}!-#Fe8L<(qMEPnvei?w!37Z`~ao{))EJX(njrN5?wt*~uZIT*7+H zT+d+E3ydS{1?{v$br^Z1wjufLZNC22%kCE?x#VFXn%ZaGay{NiI=>HO3vOGBZq~!)Q)W1{8eK<+XD*q zY$ulQ>iMAutESkIHQ12{J3s8>+qo0KvP%Bt1ak*7hxivD7}iD4!8){X)sDTQ%a-8v zw}j;yyjpoXQq?)U45gDe3EwZufd6Y@sFG}7m((e_et~$kTA*C$eMCAD54Ux^I z8?mZE|H(BCL6z=1BhVa3zj1|oM8=!j$gj95#Hl^1%$E&l34y23BrS3Wr)i9*S{Mah zDBH8*{+RAg*mje90dOsByT#K;Z7UZ8EPAFDWz6BkXNkrLv)LTcB*__K+14tuB6Ziv4Q0ri^8QD1(v7;=#xz0is6>0xT)qf6gUx(gh`+ zRZ9UxXH69eqlSnZ!wRD%07~l%04gutf0M+Wf0L$Me?^y$zar^wzfO&uevKqtev>2| zev=xx`$SaEzQ_qdb4Q=3ppctS$;io9Nkdx7!6ydIy;oUs?q!a-_WbrBn~TM6NXiHd zDn1WOvDiF3MR9ppipAt%@p$mlqR2dL`srXgbqTK!ehvkvc>MUO6S{HQi^-I%f{FZC zR0|#e1dzc*4sj@CJO~xuhoX^AC?FPmdfd;aXO!r<5qy3L*M_H}-y?q-_%n>gCk+%e zC_6#eh{n#=_HKiVxUtvx*?@et#{Ta1&l?xM?>%W?n&3@l*NxwFM(y40=I7Soe2NHE z*Nx3hTDur7kidL%?#$oXi?@M$AeKcyA3C0QiL22S@sRU~x&0iIRhqVreGrkvZ}@gP z@VyYJySY2Y-)Q1o+Tk+5Bs&Zb_V?RO5Qo9?00Bj?EVy~nM&6r*i-WEH3;e-f2>X0V z@WdZ2J@>*57r3!c2Z!Xa>H)@=gWqC`zJkxWqjN?V!}}OR)>&%$LAabw(PQR)Z1CTO zzi_;8V>yFEIoh~!XRbRBA6Z9F`k%NH&%QzY&^{zj-=m}c)5)xlwOvTA&m=tPU)i@? zUUv4WeH*UDKV0+p*uE^l_SlMMw-!SFx-q?3Osf&_TlzEN(w1xcE_XcW;>UBoN&spx-)h@w;&$M z15xxy1^p+G#XH#C-EM6(5u+A7_xI8XhT#F0JmH?+`txg*Vn@H3jNC?1+J>b$I^u?B zXT%H-vS{D_K7J8E4vUQ;1-ZjhJ9Kj1#bIO9-|DBSVB`h}hy#$XVxaL6?>y_S>}_N7 zB}phL#l~h2XqL}f9G#r^&SSLr9ooqZO*Lw<2{xzoL?O3oARb3{n(5w4S- zoVmNRpFKbAH@CL8ns|ifW-@g9sP8SIip^&>f^zZ|FqZlBb&n!jiwM^TuuABVKONhH zxqlnFDWVz9#|?Ba`TQ5IE^?UDLnPG$H|sTIm;v3+a9AdE=hSzR@D@r)$2W1*0ACGo zl1+qgX~N>>YQ^JXG_z!nQC0@@ytmoF?mA@vdtUt(0CFkx1h`pA4Qd0_OeWgpn&-I_ zNWQK+RZm=02DgchXM*tVXjq2Xc%t)P-oGdS&571P6$xO+nQDw17>|obgL|Tgkk6Jt zt1~r^x|<2(-94vMf;o9^4HtlHCH4fKc~OmG1I1h@8g?TBA(miFFWpq?3e7s43AI?0 zE6bHRrt~LS`CzC5iCM79*>J-l)5ou-hG!;ewl6!36+UNj-7F zDA84T!Q5~KI?TREbon5+a;Jin?3(Z-D9&U ztFFifM~!d;;f8GDK)-iIo4>?ufS=yFt{(VVuQP$a)oGUs{5kbqzy)0nU!jD=b=}~o z!M_^(B)zr3&nlQ#ehODmJ@B($X99n>+b)9#F7cF8-$jC7C?OsE#8HEPHTX$3Yk{9t zFu_leM5+gV*6S?bA9b5$aN#BPbE>;Y>S%RI;s8q`UIrUxWY#>s?JvIOwwE;*m0FcdkvjM7LdIA)jt$N^R zz0L&w{kB`GX+TbW7YTl$gmmx|M-Bef;3wIv1%6h+1V4+BSv~agZfAmjx9yf{B_OZH zi^RWFL%IQAEVTt#Z2_2Y)-nOS25f-z3V8tA>Y0G3-b9qT6Q3+VonBFnCa?S0^aRRhM?<|;-Oq={PSwONIM|akZuMTOKk;KTLC7V zwTu9-p-%=_6!q#^0N(9P7GSTlTdIcw@@l+D3n0~yZUGoeZ2?wW04AKZEC8>eTL8Al zLG>&E?{+2&u;1P()q+4?jTdPFq#DvK0Ar~wz-kM?gtL|f;5Bp$K>LhT&j7GqXTtwp zyHl$B0Xg+uB>aUE($P;GHTYM9pJcNZ_E`mU34pc$svh`Rud{)_)h-qIbLzWD@CzlR zgP%BR@UI3x$!0C^vkEcrW8 z*26wkVAxmp0clUW9HYUB$50l8uXos5*6S?bZ+5$#QlUSmzKcY^P(nKTiK9mUYV?zA z)95wh?gP&xx7Wi2O6a0K1*XqGP z>US0c;Iwv2^#VX{l^1CNlpfM;0OzT#z-lYNrL&eDh^oY#0NP!-iiQBa&SD0dyF0B? z-Tlw0?_#Y0SHgWZU{KEkQueQ4+oG@Y8X(_Co!~DY24fqUR}cNX+u7jXE!VC8yc#bO z|56R<27s~DbAZ)z04AKZrU1MKEI_z$=8I)eRM325dnOE#Lt}fUb@o4t?@W|@Q#{f1 zQRB;RB(#am*!VVD2OnyC3Y{Nc95$LC!a^A3<~BnRqZ>Hble9YXC(++brnB2D#l}FQ z&tGW_1GKF* z;`=6LEUWQ8&e!E>_N(*J`H2tZjgP_irynXt(YEh{M8^{!;``gTL{61`0Fuu4y`E)x z)R^ca%C?XfX)3xqx2%8sC1TRbuqmU#cluw;YHTL?p2zrtpFXhesL|0!oa+_xB27jA zdh)>f(SN=XajCK|K+*ZE&O>YZUCAcPXg^a`+p>aRK(Zh3{Y?*W0Fv|j_}<}5G8UiU zi-*?Ve<=L6=l$cqA6kD_Z1NcY E1MDzehX4Qo diff --git a/Example/EpaperModuleTest_CH32F103/MDK-ARM/Objects/template.axf b/Example/EpaperModuleTest_CH32F103/MDK-ARM/Objects/template.axf deleted file mode 100644 index 36a04cd039a501b46ecb2d2473201b598a72eda0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325660 zcmeEv4}4U`wg1e$`!9bW%O+sJWpndK4Tu;5YE(-8Y_en_kTnSi6q|%3nAkwlBxtnM zEQlH?ZPD6SYHdZI?XUK=K1$V}w%W$`cu(7>HTdV%w)VMgZBenWYek76vcK<{nS1vp z#Mb)yKA)yPC%Jd$oH=u5&Y3fR?#$e|164I4&N(xk#tIohZ!qTB{+5H?flJeva|ttm zFJxYp!3Oi0k;0khA2sH=6W3jI0p9Im9+QvxdrSu%!U%pCbYE~VPd?zObiFj<9cJ;0 z5mwEX|I*7m|NJJ4k`7$e(d91SP8~h{?_J1AI(+63kFgPcZa8rAneOE*@9m@B2Qovc zAxCI-C~+d5Fhbr(iylY|@enhNJYJ9z%N^C;`bvfKSslOOGaa}WR?ZCE{RY?Gc(LeF zSB-m>D;8@ni*x<9SKMs>a_^FFRlNOd;>5wkD-q`LT*f@7j&?6k3x@}*gSGKkZgn%u z+tcjnKn&)=@4veF@Q^7!`=YY{TQTEE?Q1utPajP`QSh4Et&gT3UmAS6zwmr*xEhxh z3pKNtt9gsxbKc9(I-1f46AJ=At88zKGneZPk6Rmczm+j~e%U`)WPs02g3lvCa5*8l zup?E?Pxn`!&yF~oul9QuzWi)uQ~Xg4TDrA8wSobUM(|^xm$xlRVaK_A z*mG{)u-3GqJtJR#&FAy4ykn!*{_C=erkZy5SsV_<7mC zG=#>z8u)^9v?@{KombJ3$K+E=z~$Gd&Cam|r=JX-2Fc58(`yt4hvy6ZVT z=3aSb`!7%q`brjauG|nje3bIZeAl5S;=cs`l#ehrj}L0YM1^K#PWavto8DzrD`SZ)Lap9_F{-Uh(D;t^HPg z@$)>F-7+Vf+FlX&YN<`B?Rjxs{8q#@{Fb+uo7eGZGx>9mZ=WG>$6vuOZ!eEWKf&?4 zn~yz@(74V;Xj~J&kG;8rYx72rq(91TIVE*sKo{{%-^&VnAE<86TH!@$WmcP|m5R~| zw`Z()>`i@!Z|-F%tsj?ZP2NehuLA~ ze@$C@@W4C>K#Kpcn;=z^9JchgG+asy0BV-`&I}<#YemfJcgV3Famr)vz zz3JgQVCN`(mT|vxrS}2-UdIY;KZ|b|@ji0JNY+X8HE5@cP-YqTdl2rpSNkU9kFOYU zgtU86lJP%`pygGxU-K|eiaTXGD|GyVy%95_BP!mY!mT?+nj_1dqPbU6wep><6S9M!Knq3W|k9 zaRd?x{CTe?YIh&}GWrB|mMeBvVcPJ9P}-OFEpPR2@f-cD@U0`$4ioA!K@KpYFw&~>TyrSi6ch;!ot}{fXi4Ocev*lP9N@ypRXDH2i_>+Df7}_@EjZD z+OcxZj&V<`|Bpvg_qX~ZBaTm}?xPfbGTd6|8SW@_4R0$9sMNRk*Tqu5R2xrC;Xg{f zg%xT)FRM5&SBqWjbUc4J3Jwo>5c>txqkLNm!#0lrS92Uq}A*@mt7OKJSG|*l*=Ap8&(R)Du`!R>0 z_nt<-Nz$j2{ioD8L>V6(O{W{)^o;=~=N$mZ^^IPvU&e|gm(F{=35sla1iMVmZy%}-;PXcy}y7b5IQOn>({JfJ? zFT7=FNxtuWfW;pgErxEdO|ba)g|833S4Ualx+6YNr=4W+Ujw@A2nXaic@FN!M#=w* zxc_!^2K*z!|I%nB{C^y!`u(%f4BY>7v&ggy=TMHnu<7C-I7|p;4>pySx2Y@wWR!HwXiC*mtlnNlh_MS z50bpPM#Y0uj zVb8HNwy+Yok(ZA?`pU@X!hy2D?nBW-EME5z(k_pNe)+095(u3UN)J^(oF2;$U4qej zS%}K^JBe2RJ%{eEIQ}eR?nqPEuO})(i$l2~Xkp`vo(0o}o7_|f*s0~pt&LxJroT^s=kBr8~Ys3`{_}} zT1%Pdgx!Ff9h3s+pUm)Md+VG>y*ULGUq;T=zLi9 z*|CiM>}>ByO1GJZ5%;;n-u)#auT*26KDEVvwSU0#Amw%8AD(UX^ZoZ6%AIprl|$r@ z-!U1o`F}h@Hp)=XF}_C4-2AYtvnJf6;O+;8-hABo&OH9Jg#~)-u0NhL zqq<_(A!-3DN2vEWcZ6ENWg{`vkh4Y(zsU?5=dgIrL*57S5VC0G1n$`*2JYvMP+Lz= z%-s*Lg37mzHdn0G|E&u2{>=G8;>4%M5+`1LmlYmA()}p)5Q!5vjpc^iHKeDz--(JA z=8NypXi4^+1Jtj{u@oqxh`kl`9znlH(GLjv#EFhE8E2b{gE87FN2n~f5HVMwy?$r- zSBJ>|(@`VTP5nK_mV*cJeAART@zMzJ@38m<@6;auRZ-%^=SMMuK!17SWW#~PiNmAo zaer*I5%(XAw&DK$(W}sNUj^TTqn)^a7xX8QyU&g#&bmK;H1E3HE!ET(q@0q_RRYpZ zU5Rp-eJWujPV~IX3N}~6wj9@iK39x?|K(H@!c#=}rgs}D)X8!w+=G07_tg6E`t)tob+BcUgild7O-Q3;QW31|G z-PYM=G_>{hN!lf#eJ+C;`!kuRB%gVT7cN?Cj3Z{OvaPq{%B^j!M#Z&;T@sPUj=pxI z_<|y%-&j;!Y#@VOo!k04y0#*4*)pTLt+TVsxV)>Uvvnb!A*NT?9>4Arteu|6$^r-9 zhz`tn26H$CP0ej*WC*+cr+1ifpxJF0&GbajUFOV9oVe>@dJER$WO(iCYAWLla5F? zE*wBCJ~D;`uD^cSvg@xuH8$3d={3gQgLqLlJ0^~ME9Nx=i z2qr?59L5D81$QGxK){KYzzgoqJ8?sq$?(M3*x0)=d~C?dVN|3e?=mnUFt%HCXei3L zuIp}@b|TS@(DB3)0y>(+D_@jYC9yW|dk_%)q|S{J5>6P536yd{%-t|1;FiIamgeM4 zXGQph%aP$s7f|U^m>oz7Ai~m|0G1_Th=eEw!k=xWtvE_Lu*`7l6lTT-y&rSWITR5w zbEK!#Mlt~_2ulUQ_$=gP2*y^zA9_C2z=s<6Py-)o;6n}k|E_@{au`?8PxNm?8I+aN zhwGCfCuBH1K*QZTG0HoIr5WK$`nO-dOpJt>V|pOxbD#Sh05Ov99VpGgNN3R}@k@g{ z;RNN)o|}7IT5LAQ|PwJMNHaOvt#~<}mbxlY>2hW*Aqia9gh4n}f=+h(Zxm zWbrdG47^R&NKq!2?#2MyF6KDMhMSCyDeAhp?YvW2b0PhprL> zvXQaGKxu~C8jL)4R1PanJZ2_FgD@)w4Sn41&k>CpqztLqHj`XN&mf1XK+~yVfg%z# z@QdG48N(Vhi8;;@8X^9boXU&%kvF%^FQ)OZ2~MCmCh*|WWy&@xH-;Jtbju-+1zEYY zkt?RBv0;J+X!*-k6cffkMqpI>7UvH=|G#SBd=lJ^KbAFsKUOe*V7`xSYV~C1vkSv( z@*<2m#hBNhR}RYZJWK{>d6s#y@czXz554Phpb5L-$T8LgFEhLzhsKs&7OukTOvOMM zZq1j4LoBzvYULu9o#h+wvU94csxD?rSA@ewjDI2pDO?y1hc9HVaCjbCybCV`AGVh6 zo-9f?iyWn%GT1?dY}xB4QT1w02^?4yaS*wFJC6&y5PSo_hazSo)=;vq_T){ zK7dDwQba0cIYyb01AhtpEm@wd7UuSJd)y4-Rs|Vlg|RjB@rQKFk+?(SnuAe-PzrgO z(a_M)&jzY1D@#~OWhM4>;$A(#N`TL1p6gS%#j?&69gDov9Gqy87^6!VgsB9^# zEF^aR0|yRlXO*oDHI+i;(7D}>2|%NJIy9z&_6L1~~y+ zH<_hqlV4*FKd z@FN8U3x47(3K{7+AzXuL98O)uU znhGrwAIdWRjh87Qk$*%0fIJ{?jUt-LQDNi z8e|zX*ttdIBA)>MOK8z8RGdI4#v{12|1xkF>Zg`b)(c=xchoMBTUFQ^QT(F-wn1t*b<-X!jcvlvyVT)!TWh{0}vf!zFp+2`bXy|bnZKDJvd zTV}?cZImIOj_eo(mKoV74pvqcjYrGMpfH|+f~Jr--7v?LBj%Y1fQufaRBVoBq2Me` z5oJ=kXj8U>HD$X*V9e|Bcw^9!*D$4mtq{aRA-*-_Gq*{+hY_h(DemHhNt8SNv`-&b||`0a(1o(eZrxE74?8d zQy3elHWn7(Dj7okkqs?FAnA)5TWw-<3oO(r9Oy+uAxOoI(D2MI$ji$sHIP*SvQlNg zA}YeC12$$*jA(RlM8aND0is8N%|Z0MOakLjU^X+Tgn$>}QN})g+ikafzKK*J=%Ih9 z!s!0}M3tmx5;Fuc2n2c&!6+@z&O>pKdD!VeMNViBxhaL0K){MWfq>2O5#a!%iMwR| zlo^!r97qUaih%6r8Vm)<2o*)^h`~s~Yyx9~pWsNKAd&o`k0>GN#-|r~(Bi;{zi2e0 zC>`d6`b`L2%viK=`XWR6fr#$-Y`18k$WP(9MGHjxL+rOp1E7&HK$f5zocPtW?NI_~ z%uLS3(QG;#!vB}tuvBA_V;FAv{eCo3Dh_yU+o~jJHzW8@MfSBK(E&n1tw;o87(r3?(BZ?BCjxe?{pot z+ADgBA#}JypaOj?r{tBJ^}|acwL2r*>rHb{^HLib-CI*4DE{0n8Y}WBm7Pi?Wyhu- z(MLHvMX_j-2Tz=m0Q#))+ir#=zGCy{rP+z>rJFZbNCdTnri)6Cms~>JCBjZ)(%OFC zOBTVw#>N(9a<5gOR&cCDmT9!xFEi03nl2SiH2tIy9X`oVjl>1t`xmgS+cCJ0{!nz00rPuCwirK4qs{di`~@Xknah|Ueu zwct%Ix;_sVP~)wZPD%0e_8i3CK%s1JJ@q+SH8KgnmtjLfCmugn#)Q(VOd zMjIdYpg~c5^bFKQvo4oWfw?o%sV+CgcA&1OTXi|w1SXK1jDu71Qb)pT=83{7NXniN zUJw#bYFf~^xEX9z5E-#10|8|3(e2d4z`1k$Zu%8`h|Iv{PK?BI5@Rt^o6s_crirL2 zc7RBU4FW#5edOOc`MlYIOvca1$@Wf2i@Wj0o!O3AEhcrka0g_r(6q*v$!5~)&pCtg z44W4YGZ%2uZ;D0`jZVez1cPmx)BRLIET^Y;6DW9$Sy-VQf&`BNg-2uJfZ}ab@6!u| zw;ZB49O41veMV;cU#M&?D8SMZ1|QHKN(<(U@vQ7}B$q@Y8`FX5BXNK^qEIIc1W-9f zvLWSC(JJd1>7+v2+??bV8}Wk%`$ND6Lk*EuhJ3z}>Cinkf*H)pn*MG`>er)$%Tqbl<5emNR;WmK@3om z;qVC!qBnA&|DIebA}{KH^6;)*yVCve2go*N%+64CaEQX;z(|z4gkY|qvJD9&%@_?< z9pWwx+LJTU#vJKO#||@gcxk$@Af6GRN7r%AK@=}b251J_A8R-?B6CSWg?}IlPJ`bpgg@-vRcMkAqv@E#5 zTNv6ArKZB`9WF`~4f{mZQzJX1EGC!8ymr03^c;HdeHnhSc#uHmA%jfgRNjW0*r{8| zi6^3j13g=!%+S-ZuvCWb9S=yZD4y8lloZDi1BGYj8b(1$6DIVKzE8xx)#nr9BiE&r zrP8DjXgh?1-3d1|1R^->*b^=xf65Y;&@y}gE!%rJ(F{xsOwcTgbcuxN(-NYKCEA=E zXh1sI)CzyjL^cGAvDRb(lj26O+p^o3G-x6+IuSuIt-nu#H_c&O5Vl6TCOV2g5$AFd z)~$_;EYq5ZdXMxe{%NE{E1vc2H=?w|(ofja;%j6x6Wyeg!n!6>P7Y5Ve{$N%u(TU@ zGQ15(XXybnmf&_AXB#dB48PHkkA~Teu)9}?mX4xuO?SB59vo#Po#t?f_J{EHFrLfK zN4i=r$aKuD%nZ*0vjUcuwk%CY4Cf54d(QG?I?wdX;6Cm}&*2)6LIa*eP&f$9D2$~f zfgmDE4ykq|MM*OeCPlg(fj9C^kcg+708Ngoq>{Y7NfZ&!IGd3~J_kh8J!zPz&Ll5+ zvI?2*@gs1i@JwTDRvLmR3yhtS#-t~kaG2JlDegID_#%u8&Xg47^%I^vbJH081g3#= zcvcCtpCi2}B@?#NoXIJFi!&L~ z;ZPv*Fm}O0#JnWq(u|8UbWdq|c$U=7h2zl@c~KI%T+x*zQ8K!LR4*QnB-ABI)bd$` zxHO575gA)L9>v&4l8EI{$+9Gv%xW1_Rysa_GE3;PBwA*dkmX6FjR}rrs2Cq0m;fD2 zq7@S$E9XLKi(rprPgN3NER@8q%UGXrIiy@JQ6^YT%*=SU13sEnjbTP1sMc3D$qqhlLTZ) zvjhmgX$g{-skR6&5^5z6CDTS8#x^^}&z1B;6}{c5^2%6;@*>t%(u<`9Gnn{ynt)7s zi%CymTZtjn$1dRkk8V=}QuZe#P@29JK#v6cvnXG^CV+#aE)X?%+oeLISAT@z0h?Vj zgHv0}SpQPxfub3gO#?V^}BRZq2QG93H2~ z<#A)gm*PqFq`A{Q7y=__!co6LBjOLrqY`m7@Sr~agYp4DH-)IA@p!Az8Qxei7$h_Tbk&y*#tuhJPJ=4*)LD{M2U=Y|)P) zei`73%l)zapj$)1B-1_6hf8|8J-22);d2TbK==KUWg!1n+qStzfR z_tydMg&*a&OTTe^TF)WOr+86Xk0{uTdkAG;GD%#@$6ka{nVb2z53rdp;&lKp$zjUf z?PQ*>+j#{u`?b}XpEBduAl%L`3O$ltP&n~xLb$1yVZa{f(F`ZpYqNKP(U)8Gf#9qO z@T>`N_5^s&1lT_T4orZJ32>ebCc7BMRs_3^4NZXWm|%l@C&1e$z?}*voe}>69Dz%I zRX=caqQo0%%=0$9FvMM+8{Id#ZgvhjcI$g!3FVnR+SOFqsl18DF4#5Mx#H14b;}G} zhcH|Hi%^)M;$@*k`nAt(o~V`CbUVc>IQSlXba0 zpL4*EY)+-K(w@&4bbiVBv^JReTmU@j;9Jn^9(X6wmsT!_AAjOUKmLhTzarDbdBI38 zS-(g&s(bqo)(XG9oiM{NRl-}dTw&x z>>70LcI?qVE$g>g=UxXLrC*VG?Jn1i&YK)J>w`pL@)PvsL_Vg@ z;?rdxQIXkuI-iQnPiUdk%xfyrggm5|1*jWlT_*Svzz*=IG9`E!V7slD=|o^d5rj{g zPI=~4wMd2h)pUboBjS!XEolZTVx-$J;uJr!Of!b#U;3-_QevbUv3 z+e3M=mo?E+`?4Kjl&%LeNOBU%;SFB0ab;UaXXDiuEWTi4dEF|yg29ay9a}dpT)44g zYfI<0*0znkeXSi^`xdsdVAq!JuB~lb`z|p+h~wuzoCYcnn~ z3O8-*=xjAEzOZPX(a_b^3F4kD!JzTcC9R7uyrA_8XnAQ|V++s#IJiq4FxS%F+=J;n zXK#B~Pao#_oJf&jyxG~c^-67z8c4 zkiai9ez5=-7ZZ37ro}uCW#aR ztTqdREzSL^?5@fcWv37*jgRM|E_g8@Rdpd11|O_mTpU_dw0L8EUu&eTr=z>QvZv$f zwjQbp8(Z2J7jIrv)Ze(Rx4Gx9S{p)_Y!rtp%2Og2ZH)BbtVWy-DY56tGa2RijT`H` zHuqiA+|#zvj-^8#8?DT*s$6*sR~z( z<1Q)3q0X*rf?Zqtdb&DIl5`f4`3i6C=xeyPyREWqGxPnH@gjZxo4Uy~*xA+caWjgU z<6xw=#>8nVrC_AG+{BsruYnCC|0ddHrYM+>OZIloE65gJp8J>E#9y;*{9m$$tS>UQ z?i>s|@A8D}F5AlZ%++06S2g#3ym?b+TX<_Kt}0*D7;JCey0xuS#Z4QBR6Nqh zAr-G_|n@P}Qwdg3Od~eXvSKnQ>6&YzeQ4NN~0U z8|s!f25VPI+#HEB^?xRTDyM$(E4|DmzfwnFX1EygR4GfyQDB{9Xb@Ozh2|IaR4a=-mqn`CZBXae&mc_-)SK{DJvu22fu+JA3=tUPY zU#){T1HBY2Y@e@5pi7uuBKC@8 z?sV|>nKQf@0)0@RDdK|;-T^eNP4)R67ijQ!%E7P7ipYpxa`4VG;3w*X4!(u_AbH%u zx6bMl(m)atggJS4cApRg7$WyM`6tfk6EXmUNCi&bb4G-yMMU1086iRuhi~&mKqIL6 z)xJI<0dh~QKkDTDU__Y*hFEWL@@s*id;FTNPYwp|D3)MJzlrPA97sQp}`tpjJ zDk861Eq$O4ZQI&HhZr|^QWTW%Z=8H5KR@%E={&2hs=lg0u%{m)?rgr& zB^XJPSo*C~B&rM>k|dUf*D4ZKit8+rVoSpt6p1RwjY$$q#~)K9swA6|B$kplNfNLX zs%uS>ST?&^ktpr9CrK>rUZqHsb~}?KmUg!)5~bblB#EWn9z~+G+m|GZcma}+Pz+p2<__m(PUeIw*ZBe>G?akA`<%5^LN>Zl!EpAn@l31VLgA) zMx<1%=kHNO;0+z?`Fm|dO38ZuXH6oZWj%kNjYz3k&%f0q5_;D2Z?h38MeF(hU=j&U z>-qa_L`v0q{_Q4_(6yd_hmA-nThIThNhGwb=O3^UDRt}lcbh~)-+KN%HX@~PJ^$+_ zk<$1#l0-`^jepZ5QX2o3jmXmYeI}98_(2H@3#?I8h_9vQW}5AMr3LH zdnS?6_#-wVOXEL4_gt|ulI&%!ar2#;KL1O8Z=hk_s&Jj`ix>fwX1C}N5VerhReJirqK5S_BHN!xeZn~C6eA5&X4`lKBHJKz zpOg(05phRfNf63{AdEm(H&m@w>c|RUutgmK1!V^+FuGTOUw<+nM}n6pdj)VT&p^kf z|1RL0Jsodj2YM|{GT#*$sPMYJGso9E9izWMuT2-scP&B>>iXR|l51L$D{}Tl1P<$g zknFZ_ctw8H5eTgchL(%$pp8h58DNVv?SUo%B=t#>y-5;Sq9oY|l5)z1Vsl%P28JkU z_Jihf6@G_9|5rn1(4EX6Drt!qmDHjCm*Kl_I-f?ejVmnXTLXe2Rgl&k$dT#%L6qDt zbJJyuXO^5CgVCVdJ{UrErDqB)-)S|hR)6ENmAnV$QfC`^ecH>1kji)Sm)M9{p#Jh? zg{WIpTmef}HsA@=jDukzCAMHx02y2?^P6RoD;OgqL9RfIgDNGxBsT&z3wjw` z7^ti@GqQmEicJxVRF>PMdc(_~fmFXk1rApRYb&cv<(VZe>P=Rh#$-46R4E{4s zn}2_SH;|;mXnl237Z|oy)=6fbz^WvGrU7#X=9EE_<-0TZuaS{>0Wz|>A*7-*0R$C< zf~UAv!AE@j6~y`3Ss2#asv8Sbt+nbNOfgvz(J&+dJTzP$u3D>jiyCVtn}sJK%#0*c z+U4VKBBi&^E)0~LwTGThR#vSy^A@PBNJ4l%Nj}D;+YH7VNU9<^IF@?K1`EZ_AGkcC zyhdOZiY3Xq0FP2)Hpf!KfBX1OU7!ELVh(1Hh zcLgr5i`1zQj{sCissM^5vvdKdkNbRy8Pg)^+Lf2;TuOp$s1qGt~lwOkUmFoAk zd`*NaRVAA~TdPt_g{~N&+fc)DYYdwj5CnZoc{s9_~4aEhL!iD^S44tVbCM-vBoWy%MiSuMd(V<)ztIOS~`6;x8h*H!qUetv2hfS;7-+tVV`UYGb5b6@O9_qi_{}atjNuRnaFk zu*&dS6?;8$K zDD|<$|MQBgT5+=bNtLQ*YAAeCrD6o3s?DTIMW`7*sa6}3;ghO0T&zZB?^$g@VfF}< zX_iGWE1cBam$Ug^hd%!gB@t13{wGady&6`&x9V1vo1ON1s!xpsD11`=)n8tD7Gj{k`z|waS13ETNF!^6jt}K3=~T&in1hy zHSglA7XGNV#chXvJv!TgrIc%(0=6g~zrTA*_G^v#?H>>Dm z7HTfSTFu)He*PrHzUNZ=xKfO_AcN==O?41}#~86#XhpwnE`JWupT5*V!=tLzjX|^X z!%Bk0ShNq%xZLDv3zyE~@9TJOP5Y+=G)xcT4GF^ocMSlQ9jCYCkKsbD$K?GlhY-z?eAu|{c zDWDH^^o(1XpDy{<1tVRZ*KY0F($Q>f6Y$C=ecWpOZx~;q&Hs@D&p5^P;{?I;6);$Z z+1iSo2WFz0z|vzvsH+9ZT;avh>PM_@z^|XD$9A4u|4&-)y z;Ng!@<1+WJoUep+;dMirZXgeHy#M_rJuNL$z{ZyJWBVZ4*zdHgK>hl9Xt0qqwXJPy z%eAJuSfF}RyaP`uH7ggL9>F65icb%~D7G>UwMZo$#NIk!@ zyQ6Cg6vE4U@xB8JA@d%MXNhOZ`tG*2RxE9=s=f|Oly+RPKxuZ=1(Hmc&!aM`rNNgO zpQB~Is4FJaRy1OGL+hU+C4mU9ZVc7bmN$e~FK1~EdqAX;r4^1ttYK-@HU#QhV=aiX zCg36wmgcqL%0q(8KORL?>N#3u#LD(ZI6qsPf1kq<5V^$mKC`Mbi4kIA2948Gt|bZc zy$FQT#Q55Lob$z6=5HK43mb_V=`ltu0uvy-G}GMChtK@dw{LwRjb9=RuM!pCR`=z8 zt&MHsYrG3v{(5^U|Cja)iB^jmF79cey_s^`LZ0twcJW)>Ios9N-P+jN*4cb5-fS%p z4gZ#2yo$F+a|T2hTK&e}wmy3A_2RoUXTF6*fI>f@ISVD97K`*hH0OCHE=l>4<}4Q2 zmL$`+H0MPo&Y~>2Q+F;+p}ckUHg4M1i`>c02hEL*Aj1A7wHbk3Jfu7OMf_{9ldTP* zR|-jJB9;8?;+J*jjoe0o?XArgi2&HecQ~B;Bu!6SGZbPcAua{JGF>1GL^e9*9y@mN zV-DvRxvP;fDw7`yi!~MACzlwe`yak))n6Cp(4GUb}(Q4msS>4ugWxH+sA%f*@JhKJ!1SHXTY-&Ji zUyZ&nobM7_R}?&5CRA}PZTpm)3A~Dr9p_UDk5ok}8zb}_i~T^1pNC^L@CqYJaLA(oToBM(xK1wK@(TU5ZZ)ACE0UvfIJYCql^$@BgSZzJV-?=PVHW!R$)mp;CZy}vT2 zXNA9gx$nn&a9+GCZf<@24b$J|zE?$kN(hh6Ay?rm#z#lWx6TLt_9Oq+`LhcWHVtSwOE? ze46nK=A75qcy)7QCw3vQNYd;3A>*OI{HW#$G&c59*M!N-Pm8w?6pV=`f*ow$ceTdG z&D~wSjeVf(!AlU>`PtYA1ihX^on~X>mQ8{O^Zfz{Oa)1DOcQb5tRn}ZFgA5Y#NAiU zvCs7rlnUNp!j4+B+!CU(kPU3>>5*U_kf3O8Yu?mh#@ZocSvV1QB2sW5q$tRZIF@)a z+YPR&57%#O>FQ}~Y}vAS3Ur(foc7U=7b50=S99dj2)eE3>b6#EwUIf_bmm@WJ?%TV zBX_M0(sP40NXy+|gLv+08-ybw{#|qAY+}A6Eaw^-fW^y5y<7)lzQvrsgiWHmbVqI& z+fLMKCv&8nF=@6?x9Y#B3x?}>l3_T>a2MzAg5hh9_s5XW$_)p@jp2qytbx){6~^dr zd6S9T&>l~2Lz0NQ&6t?tHe+gkHMPC#5K`W2ld?Z4!_TnKW&396v?u66D}q>-I8UeTfBH{OkAZe0h`<9}f7Oa2)`FTS zil*;ypOy%kma8d>rr+TCaOXUBCbID45p1m!jzU(^iyn+QooXTkI~v-5&~Nbg${hR;*u)f$FyA{A!=>Nuk@>p8nT&$1LDL<2e%y_jZQ6}?34o|y zb%Sbu{pz)0xdzC5Cp7E}am@d08g?oMBWuEy%y*ku83>DY<4YX03u0{pZC4^cR)ND} z9gYA@xYB|Pd9iwJdb9NVQYf$3PgP%yynYSA+3;HYu+$i$9bOc#Fi>szvG>OE7X?0jM~~ z1)$=L2tdUd%YpqxTzEZ1F7`2BkBfi7rO*FL=EiX*5?mh?tFO{Xf|0NVd9b#X3`3o+ zsj7-tp$12MCa9`S(5I;Bpt+j3v^f^iI~+V&h>99!kspb zkR*_*=O5>RkZ3r`(xNT^W^LL9K(yl&GU(F(pqRXEs|k>?1x)t30u6QH<;$sR3-g^D zP}_Qi{mu=9v6HU?EfW$YOnk2X$jsA<2sP^ubw@ z*V#!upd!8tUZ~f>n)2`}nm0#Tp~pleAw-b23=ra;9Q|<>-L{VwwRLHlp8t)UKxNfh z+4t%BPY9@CeFPgkDI-tjU@;vli?ZRoFNL3U>+}ER3~!(^*{88UWl(He79~pnbv*=l zzEn35tZaF+-m+qO( zUr3vy*e{=qz2H7^c9kvt=h^&aD_>Px#oNAhmr-uYaqO6Q>6cyl`fPr}&fP{Q*xHCs zPvO=%d{4S5d1XiMR*{@SjezS*#iR&((-=T$X;_;J==hXSNI1;suQ@bz%h!XHq_E@Xt)2 zL&HYY=ul*hXt`ubOe{)v>CL(PKc~;3mZu)ZAEY%oNh(EXX+Ldggcc6(Bszp38UdP!0z4lxZ6942T%#YV&8oU>(MT{vh8yd$9 z@as5*%im2G{EBnFl(g}AmtGQ}T*{I zmP%s-`XCG}Y1*I#K^wM6e-)ASV{TV065mp7th-hL{G(W?BS)JfRNFHZ%ZAG32e=ks zgHGx9HGaY|p=|2=dT6N5O+s3O>QKdSJ!J2|&Nk9c6Zu=(v8C}F3vk*SK~y%F1E$ad z5h`{>2zUly>Gr}mh4n|r@%G%D)ak z$0=MMbbKNm?>Gz@N@E&-XX5sqI*ekbi8E*`xDH)aHUV^{F#Zm zuIbncHJjvQR^!zC79s3v{IZ6OrBbJa^Qh;Ol>=+BU|_2YK82j zH);F{yZ!dIb<+C*Vs{!hDc3>n4v7=p+!m<^>fK--q>-s;19YtIRk-daJ$zl`58L(7 zLK8-en>10^t2k0T~AEll)PHjEW(ZI)XEybRt z(ib&;n_W-6ZGGJx{cW8XDJilSNmcgt>C4b>hrNCJ6d`OaS|eanndRhH%3MhPq&B?- z)`=alVngV=QoHyl#?;m?_1jTgankRs7UouDJc!KVM;0wy=b^+?BIUx?$j`>;`!^!P2Q$JUPCZm~Jt46h`8i2b)1 z8`7x#vlaqFM?!Q1u}-N}Ot!2|UuSAm!0WslF&-uFMm%JRUz|%yzvTQ=+aBrYaXOm3 z5_|PZ@6h<|Qjb*AvHOaf!8noHdLl}J%FQRDw}Ic#h|vcP0$(6aHe#$HM&u3ILO(Iw zr*OYPx}l@s@tFt~##SU4jER!pMkOI}=KoZdk?Ij0X`h9aq0*Z*{+fKX0jI#?RH4?k zw(j0e+{9p?o3zzr1j+IL)c~cVbJC}9d6OOj_%uN~bg}F~jel3ZYSDoMZPhy^CdF+K z`C}7aFNr+EdFabpIVNf9z-TQl{vg-4)&qe7`2!+kBd|>r@{kpRz^QISs3Y_#hDa*v z$sX;Aa~Y#*L#X?qs7)^e!6Qb?ar{0HL}<6r#R`P4#>M}cJC&B8ix{pcY(w-(i50k> zAYHt~?}f-F>J^AC-78aD#w^HJjLV+}8DHVMAft(*&!2RC1&9mb5pIghN=AG=u6`+N zAw)A#4J2zB5Ig@)WTj879K!X2l+_Keg!g`D3qsiQ@kAMb6j7? z)hT7%4H->T^zTK+Av}}*7}xz$#vaIMqHg`3NTM$+Dq-Gb0^N79g)UyQ2-7tY zfo?4&boF%~$BfPvvyk%G zm%|KBAGK;`-mlCU@lYe&Brz_$)

    *mWwu$|0Bzn~mLqzh^zuM?>kuxKBdQrQgO&bGl3Fnf7#6 ziqk_(lC0DT+WiP21dW(ioez-Q-?hHzqpM_YC3vB>^jjJ~$(6o>TUr@6LusyQoFQII zh}CV^)XRe~=ECMSD|NAl{+{iNK4Loy_Vp0y>mi-@D0R^TD>f&n(7hA&wGaxD3KT~l z$wyn}{T%AF7eO2Qwsg~JHe#(~Lv#107WqjwTKaemyf&cMY`e0pr?unij#l&-g6^jj zu(_vMoQu@lIWFulg^9MYe^Ya>diUX7AlE04@}jcCCws(!0NO20!qz`f8$316hB$!F z5z{A%i}1!ZwZPwWq|-5Zbhg}NZLmpRLnQ}7w7@qkV(cabig?L3xEJX6(FQkxOt=r! zrc4bzlaA@L(cgfcOaDpZFK8}P&&f8}B)Vt3cAp|J*#dvhRF~NCXPXmve`ABGp)dN3 zHW`~2XXwy=iQjXfFVX&*VX^UQO2IVRgx2?Msj89>()LabJ&{e(C+_!=o*vftdTCao z-8IAfq?lx7y-b1Q+T7i!#mf+2wYjv0O0MjK=x%D94?~}I{|T=BI3uR?hiLnpF6sxw zx#i+Btl|X#VR9yEE9q`Lk?eLpLjmKv{_B8}?(bNK&q05`!4qNzR^ zh)IHCywHMaRjRsDksG@^JGX4>#7VX^RN4Tjw`*HZiyH8p0)vehSoOBZaA~7>vSz9; zp}C&-*OyFN0fO#3xzp#yb5KkM_s3{64(N76oCc;@v2Z#C$#7A z{pn;&NAFZP9P1t!-F>+B;>?=TLmJO_iT5ncmpaA!!)jHDo3sV6vX0Zqq#0d|K)4U2 zvng_Z);~aBx8vG}twp8(tnu$@F0n2rCa%PbtK1~1AyrWzM#y^?Gq%ly8?B>ZH%Wy- zXCG+XJ4JLx`uZxa5z-l^9=@q`hF9#Q#!P}iQ$tE)-!b8&#=fdF_JN+qrii`^BwR5x_goI{A)ar@uZ%^TTfH7N$$sbiM?L0HQ}V1gFw9xH5Y*l zZt#QjF;hgxFJKaz6t`{;>i%w;7P7W6FeqFG_L&+~hWm^Ok9$736>TW3$8BiY*3*NX zfpY5~4R8Jd*o_K{6EDmWP{&r}68W0AwQm$vdf%0kTbZ)~Mc%TIy# zef^k->&F#66Iws4@$1!O9J=gl$OwiOY+TqI!3F8FnbQIX9zqXkpy<3^Pfp zp|XxvnnwrnDgXuExffva*VYaofJaC%a1-`gTJ7r8($77pz|Y{?4*k%!-4(7%I+(q2 z74~hLVS}U?)X7b-tM9;1uj!GEeHDJ`Z2OePJ$FnkU99hJq)Fp0i00HW(lLO*!Sq6I zr;g^&AZg>cZ1Z*I846S5{D|k!q#VbUg_9Y>f8eV_jG3szD9x^`fcQOmw!wp~1fc` zB7{HRFYySP&>l`Lovq8n&OKZUa-g$48lUAdPgQA=$IEb&Vkwk`edjl#ezYUPO}O}M z=hnLcv$p%_4mXU;HV-qkbkQwOk@4Iv=qRFM~(jXkp<&jJJT;(gt@HhJZ?WRn78 zpFcHB?1v^Msn=6Q4+o)#hj8tM9+nMiJUc~}`=)JueO+7Wz$Ds5f;aEQn`b8V3((0G z6W_@ZRbVRX0`H!AeurzAY+|>@)0IsqT}ZPqiC+KnX2A+iuOHNAPOY<~_B-%aKdw7+ zp_Tum@y#x5@PZ6pdO70IaL(3p^Xs7n|YR2$3wx<{uU!z_Z7Cp&?Hg)Rh;dQL??1e54lOFEU@Nr%H zQDY5V7h&XB(HVIjn7v;}tbTqtW|a zs+F;|$EMv(5xsR^Dc-H8uOobF1(^a>18!om9s6d1-A_Yp6T6ssZxPs%e8P$o4;nY& z>kqrb#9;{;lfw42;WVNz2=sFq(#GOQU_v`&9)Q@`(KiJ~w6~%Cp)M&}h&JdA&ikn? zZonLbwUZeO(30eSWgk;s=7%r|{XJYylFV^@oy9d_lQuUgo=_rBHdiyX%K2_g&CxVm z);!4kM|`CQ({q@>UWL)CxzU`PG%rf2CwWerS~Am4DC$2qlFXQ|S?jXz-REX-Tov;1 zsa}_9Pxl^N_mI5!U}&{#lJ^+6N#*cS>j*dH>+=EFHQDa#%C;|Yo%Uu2H)*n^)Kk8! z51{?J8`qNgDC;*lU*J0ZMHg-oEijAP{#`p-i=i>m)T-08d4R;)uH+85PJj1@n?z-n z+*7_Sqq3%rH-|}Xv}Ktt`-@QA3~o>o(|n80w&IR~oogCCOQt>w#^_Zsb(}4OH@vlF zBOb6UT$}l6U_@2^cH)7L#H!D10-#4NTBc}cIA76ZuHz_O?#gt| zm#45U`aq^DOVRuF zF4tKifP(${7Ti;jNie18#2iWIAT!yn9C*|8Pt10m>B`i&rT4#BA9Oq|7~=R^(ucDM zsmw+?=K)C7w~J)B?joGVh2G`9>%TZ1I>;62;FwoRM|b&g=lZ8e(X*gnKxYaq>Cgt( zx92!@q)PHSsZgBraGgh>?kaYAh}?b{ud?wg@2-$H`V{(Khy86&xowGRQ`;EMXyR?6}Z-@4ffld+(Uui|M`h4u;?J zyi?A+Gjq;ju>YU`>a)6c?|kQ-cjkHLJ#)%E2jld&t*u|jAJn;plMA|G8lc;BthMEH zlRH+xnQ=2^S|@)U1-}!`sINHJ((->_ZEgKKD7Z2{`!POabgVpig%uGGEx%d5pz+gC*b@Fe84ROIY&M-SvD*jtI1zRS2;N*BX`KgVOfMUHXDD#d4f&MS{EW|#MvgI(N)PI8!xE*xKG5_7;~ zAI&E3+6J4a!=~|dg_g&E2kBZ4KpXhCLd&D_=fUPrBr(Z#d=1Bpz2o2RHGc0{SMFXz zF8nOuvGr_gZT_O0Umr0Rc+)lX^GNm+Q>Yb7BUvN0PW}oa1Jf8G`;u9mtk|-nbQZvJ zlfUZP{fL_J24^sY;cIUFswl>d*>_BWu(`LfX_tRrWgKIwV%4)uD{Nye z{ZZDIbImwy3EN_h;Y-6`l?`1B7Yt^bW7f!j_Bwz!&4TZ5H3jxFZE&PaJLcTMpWRLy z?qP*?E;a4^BXajDD=>d@&SO)&5*v`!nt98uvjniqTKpTxib!Z&OVUOD+M51v=0kqY zcs1qe-&j>~UYM2WPZZv~Hb_ z6x}Qvc*I8EM~e;IEQsrcX_Ri6Ngv(LZ;YL;k85WKW9OefuAKvnoz*_B9o~!wTJ~8$kap}XdE$=inue|cgEz7R- z75uF7l~q=0d9Z0E1|00~BW>-(wle#qL0jvY@6q)w!E>~h{Lt+1R_zjR7#`tqHv&O3 zZpRoGD#Cs29;03V8NbLSpUD2a+4tZ@Tgm=14;+*_SJpHKgtt?`L^%mN)2%CG!(dkZ zvgG=NtQ4EE3&o89#>VLImu;W-w?L~`xJCHNwynQLUwMNFwDlf09G^f((Ql+6>`!9% zbd{FhU>(afuh}-;CvotX?JIA%fHqz+Nx2m}wsc`B{%^(3D^noz=!z@2jQU+Ju}yB} zA`M9tzH*s>MLqYZ(Fgp&+Q0s)DM5i`cxHL-|9@gd?*4Nh83j|20i}D?au4a>cKH9V z8RzE9+GxZ_G(V||akIYZN0pBeJ$|zc_%Y+x zY|`Df*X&#KsOVoa?#vfp!?+7F>0fRfd^3zQeit26@SXY5JI& z>UQ|`LxkX_YzN2iS~D9Avv2ZOXq#WlL)&*VnOC;`4TRQTxZnKdAKK>fq_y>LTffI` zBoEzx2_OC%lkOAtI59rMMC0NGcSXcBZ^4cwChJPrpsv{Z>A&M);N@44z2?u$ex;q& zvVK_+84wE{v&YxEl3l>8(y|aUpDm!wu5HllXJC#CpKs!qB3N^@$Fnay=!EjY~y!!FyIGl}l6#skF7EKPGa6hhhxHee( zVN>tF{BY*{1q&O$SiNiYA9jxq^S8J6hdm1x{Sf|O=WgLf>&^cm+Qvo1jdg$4WtOlT zF2ys;xyy#oTK8ugF4(YvUBL|(EM8=a%}47l{@Df#aN|t#ne4}HAmcOz|5wJO^(|_Y zVaYFeVah%IDefX;SD8nho8{bF>(}rGQw*g%Zi!8jJ=Qiu+Wf~{o7{IyhMdjtJ5(@q zJtKez`Q5%*{Ug}o_l{ueZrEz6uhjA#o*bQRJoLvl4-vcc^h1qH&TTCaJHc=HU`)Qq zq=s;vv<${;&(BQmz+0@#Tb};8`RIVpFr*RWjA*=|u(jpcpD!;fiO=D%InT-<#^;KU z|B&<1jidW61sKU8?0Itw4zD1aGCM5ax=_wkwyxB=aQW7?_}(1rLx3Sy{W-Szr4QI% z1-4h?QC-eQoS?xkdt!h6y5v9pZ2SBI1;$||ITR!3+WveW`3(g4h*E_~S1wkoCpYFy|6QFb|KA@%U%_pTwKfl4&S0MOAsJCPwCIW@6c!Z2cm(efZ@6 zpl`hL{d?I&bjp0>!u7||!gXbAPpO>UEUt(H?|6?7Ow5^mg^%VZFXD$+HyS^GkF6_1 z5c_2DZ_CY1vSmJtn{V;-OK4rzj5mLbapGlv7@*gAGV*I&Otp4!-$)i!-)LF(AF#Q` z=}@$YV8uB%ZpgpEzY)xQkK-LJ%ZWokcu<<2^Ocd#U%qF&Dx*SXcn||yS*)U|*4zm0mD+@Of!-+#-7;gMKNJ#RYi#jMQWmv>bUK77v_%+;0lmFenUtZo@ zk-Z(vrpf$ub!dyhF%`f6f$6h~%sHO9MG$dC_-VN?0c%ve|NP{y@5?+><-T>jocVZ`$D2HPQ3WXd^ko z=30=r|I4)DkEXbuW!jkaG5eA3%=$(!RwgH1^^w~6kdq@EbGsJ9N0JAkt%+I)7E46T z?RfjKe$%94Q`F!$kobj58m0NeT;M)2#b=4Pfbfb{d-RNr2?E z=64OS-FTa8KQ{;ZP-3np{PS$_B7UTZ=V43sOFpWd!^{rqBOlieuQ!K3cYRztynq|I z;@XdE=MeVmQ!W3>;b9K`sN-`8$N5t&-~G6Dc-1cKAfmla-_wXV=J@|hqew&+SyJEaGWlc^0f;T3C z&f!YcfO86PjsvISjXC=r}M$|UW7=xZyr*-O-U0)N8W@3`{y@n#Wz;q5MXx!$~e1TQ3mKKvMe z8gMqjL!@-}F?ca`W*2pQ&pwAz(_k^;_(*Qw(cDyX#m%BF3*?6?Vk~%Sm~nx(^0EDo z{h1{F;k)(l8xH;#@wXWSKY)cEeq4%={6O-f74RGQQczyV;v?Tj)RFjy7xKCR{>J-N z`8j{4;ddc^gLq~K%}4)KKft$HaB^{854%`5y~JkUg%Mu zEHxzpO%2~I6oe6IN_nZc|LMd#M4GE!ODGwvyS{7CXj zXf4Chnr)YF832%g-pJ42;eX?;A6!cPP5ee3FcVGrK!f4~-`H^b9Nx-LJO1y%ZxA(X z+|Ugj zDIH^75@?r@F~jEk&oX%D`$-qW5#&_+9DbXdd@SNGxynEC^;<$I2hDu+L%@n0{$L3B z5u0#xXe;x+jj!9;&++1aObD#a7Zx`+`Pe72oP5LwMl^AA(cGjWnf+uteC5F6{pa|~ zjSN3`KQ#Us{G!YBmc>!;O{waa`6wAz*B%2A@0aB(12Sw6f8uYK+xU(HPMWWDA*RhJ zjPb>cXC3eSPuS1f@hL6&Lisz;`)dYZOY%c8+VC61H9rq+G8N`*n%qosWkY<9uU|3m z@qh8dMi2yiVR1CNv{2Zx4lc{rZ{jx|3w8~*_`+$Q@w>3~EmMD4zA`o|Y;iy$TVb4X z=ux|kudkT*)A;&^{Twg;hy7toe6?ySJs7UBC;wl3#*hu$W&g|&j^UmEF(0X5XHPKZ zeBl5@8J?XpV~#ie$7rt1Sm`{1Hyoc2RoCdF91X{rrqQ=g@%0GvzKyR(+0XGJKflKR z+u%1yNk7J){5be%E&LfJP8#ONQH+@3ko@#NQmV2hRfSo;(2=O_UrP^;{D&G-Bas@@ zkE=&9_ol%MDuNgPGX?LWtroFhw{@xT8urE3?Z zDk+)Lv7%JX2i-Pf5N$8ZS60CLHokK4!O!vHfA|Liqa<%=yLOw&9Or**!0^RvGwG=R z`6s;7b7W_z7)%3m@myiu*ND9ZDnp<{PRL z8vQ>09>8yuE{L)nzW#@Kuc9Vw^AJ-`75op&{n~vAjuOIHn=9?Z-;3}YZD(AY4&$q9 z=l_qN;X6hx%Pljh<&!OwT0T8#65U6io12$uH1Jr@fzgqAV@4ZB(0|rF)<4dVT0XJN zq~=fZ(VuhLIyyU>nm@(&Guk>=Z*OY;4BwB=Y{T2n@@@b4_~>|BM^p3X`PcYpy}RDu zXlL;kf)CbgZ(9=|EgyW;F|EA~zfH|61Rr*;(cXsNrsgm5!`{)M(ecKd8H4ryw)Tw& z2AZ1xw)nVbsJj<#Y}^j|?~0Gd`}^98zXWP(UYVark86WJ=%2Rn)V5Wpt=821CG~Mf zCqM7#M8TJJ!PJeXp?(b3imot zC?4rT)I(v{Y7)ZKz-iU|ncn))ct>Mae*;e;Xj^sFjc|2E$JEBs)!H}iY;SLexzBn+ zp6#HSzJY-OFrPQfobH+ZjbYqJTtfqE2(-L`#^=mR+d@+uiWLeZ(-_+71GJ)nYCSWv zb~prIG)V7IfA@ICq5d@oFc!^!ORBTcz216D=5M%RhC_oKft3t5G&s^fk~TTT4AaUX zlySbtjMSGc*3&nXZLp8Sxr%{m_0h3LSs!|hy{{OwcWAVCW+^++E&{ZX?P}C|bKQUd z?CakLOr{r5fDV4$P$QTW>43DichJ%|0w!yzpO(I9s2P2={-Kw6P;5+DB~<e{--9%mTEhdR z>CZHcW$c+LkF7u^*VM*xmfNS$vQ0Kba#ja==;asiNXFiQ>EnFFV$Kw1B&g*Tm9vH^ z3C`t;@!k>KFD~tKhZ#Xh0v(Os@$Brexl)pVgECFpbm``IZ8Yb8dplFSo!B)p8B5TM z(Ja#y4VEOjE;FiMb3;+a4H)hp_#DRJ#p}(-C@h@6ZnQnHY5bcoRu0(+Sq)Gp++tR$ zjrZE^L02a>EZhG6VgKvTCsv?;m2b38_TF=;c zzZ%kxsoefZRacsKCA98G)m8BtS!Y)5=?hhmFbMROZR2X=bxwYzFP4elvQ=$q)){Tx zdlMV9&V0A0Z@gAl4Rv7Q`A^o0E&X#EiVfO^y3kCmcV=l=%VKlNP&TYrcXe%X)*Z*# zq4XV(OzJzlLbBcC{cxxxDQ;BdHME=V!XNh3Oh75I$j?e9O)e$85l$y6{|9P0AXNY8UymHviFlImFRBk>zUp? zKx4JRI+ss@9T&2k^(MIg-qN)>oTM3+ySn^AyI->`7NOmxmL>Vo%dcB{WY#eDeUJhR zhrJtS>PVyo`!y|}3XXTRHEmNeIMTK%OELxUtv6SxHVbNI>fm!!>C05X1kQYlo}%^deXp%!>a5k;e!~tV z4zev6osKeS-aof7+_q}hEPOK5Xbg2z8z{#B5V%8tOdfK1u2bggP%6Vr^4r4b*wjeUj7>2z54D zW{_hrh+mEZJG5!>kyJy<7#P4%fZl(ZjiV7ez}2KJH~yI)NvzroFN8#2OBu>(rE^Jb&T8bQGr~;$oM`yEu`mS|PI8|ljSGZ2r>HhMq-qC6J2fg03+)?sQ8>hK*uK<)t9O^kE{VN{Z-2#lh?;baU5=p+Z9F&r_9yS=b`IK4YYc#=NFBQV>jGI-5;XQy&cqf zb{Tn=a;-jyNFAvU_W4@RB_*-nd$!bidm6oCvrubrcxG@MHsTbfgUT?we^9e~yqD)5dh4^W`H-=n3fl*i z5oHa;X3)w(fsL{5@%qT9*yqq3oEAC5>97=aVf4_T=6L_?LD`TwsSnE)I>RQ>94W|P zFVpkzAh!`X{33oyo<1sDEGBHy=9p%x!?k0Ix?*>>v)sundu*;WYgko=-Q(k$y*MBw zQN~PsLawyJuB{BaCq*^u-d{$*$+^;UyRI_qo*LKm{xX@JmMg8WTljlMQ4?Dg?8WpC zkJ;(a1;b}%i?fz>b+~-Cu8XJ`9GPy$xD%$&$rhKIE~>-yc}3mXm}L~#+3uk2^Yi6m z+-)FjmXNTEjG%=J3k&1@_4+7xHpKT1rqPRXrCHZiW!Sx>sL4jVd+URU@sM&R#;;i=!Vedj5W87Y!loWNjk}fh>R2x=rmb%@8$-jXS_ zrnTLqJ}lpsR<7Y}Z(;rR5@6yMoE@}sXJCZ!&^?0vT+;@p$X(fDX(32L#(h;Crtb;r zVly~>e00{BSY{5oH&-Zj*C>YD*bVE#?0rGa+B!Atm-pAl`|a`umhUeq&pRDifc*!9 z`cxFNK8QEQ@k6CVzKz5RT6rY0A>EMCVMITgE%nw>{|O;#h`Ji~qDMHFr8YNdPiD$| zT|0r3ny~qFQI99pc>-N*GB-SvDa+anYr^Jpx*pD}&BcmRHtw+ce73aIZc!VSUy{1L z9D(}G?xDfyW*>*U9xtawvCX(148H1X^$g4yz$V#RWVpVTDa)BuHDU7&Uyr9_+8gz8 zGo+O1%}iO&rm6{>Z~J<)Mohn*Rc?FU$(H8qMzvx2y`pXnJLdiMVINnF`#dr_9mD-{N z@J8GO$eBO`TLtxdX4P~9+*)j10^}QrOrU{ngZjh$!@2=(HMT1O@(n~L(7+BseLV4| zduWI%_M80B!K}Vx8If-yHi9;G4lKAXhOIEZcPVG`?WBg#(r$qj*VnKm#{BN(OunVm z5L((Zu;M~1Y>8=buW}~eQfde-?GsqR2B<#RI}@82lNCA9_RW{)ThInzegB{~{jbgT z#<^`dAX}Wbt*XQHK|$T&(UCzcrkrigy@T_`dE2@^j2{}*HX-M1bJ`u2EzO%&wPE>) zpso|d*=GD4SyG<29$A3>ql5Y`h@E}vc}z)p-hN~O_KyqdyU=y^De3Vg<=#GQoFq)| zK#(`>K@lAF#6DKGSPaNX$6yhhu>t$176x1gtbIntY1vY5zF6{!acuy`&nT+9{#)bh z{+Zd*&^Sz-6F|e=-cG2XeMa{nM-rm`RIB>?5 zT}6u>?BHdYdf5g;tEhKHQE%`=w%5+~uFTZ)?V z1>?X^n(U-bx8|#6Ta9d^_U%RO58bSU;~lw**+!LJGE^afHaC8|ZA}jAeYuL+29;gZe4walcNXj_vZBdpZ1TZe z#cY$xE^0np)EpV@H9Jcctx2dp64l8z3c~@ z)?QHy*4{7b^v$W)$GeL|IUl4&S$jb}7~Hg#>m+f!XQn;a&9&`j(dSuHt_JLEQSdXm zvF~oArLtQlCEgb59fHzD=8OlT8fVD(WrP~8Rghs~{X zNQ{a!KwWOl7nhn3>cjZ$x;Bom^b8dT-0#Sidef+XwlQ>lBhrBdJQ zY`Amr_jwTO^+xZk@o}8k^n%}?EzOvD$b&ce~vgP$?CCOX}Mun8FrtDYT_W*usJTz0emuBn(6sIlLza=4P5!y;E8Bn(c?#N z-?T^>a2gz7I2@M4633j}=wwzpP=6lwO4bfv{jIUXnGwP05a(i)XT#y^dq7FcWi1a)#!k~0?6g0)k99h`%;wwQ}fi$2d;@-<-R49`O%XNYlsW?bMcq1HK4ID~C- z&##uw?_PIZQH^~$H!1P;Fu559Q7u?I-`9a9emTyav$!BG$k{6Dz|=*)2IFb|qNRQg zUYwM8W2pDcWN6ipjTE+Xy`#f+8_qy{HZ7B?W-EtY<*LHw^Fh7Q`grfyOp{MLd5rCa zOrf=E&-N8ogUT@bQdkp9B3u`4Pg-+(`f{$c)NoK8mR}9)_O8?0>#jTDf$Y~Zg{5|j z$}syzSaWQAz?+pbGnv9tvqfc?eY>cM=CBra(c8&5d?#00Vpvs&<@buZ1EWKIp=nOB zKV^$cY-c$Wy%4x{$+ zGQu_!WE4MY(jR9Atz4;X42{g}aPx}E<*Iyfg)D&un7>BXm)3{Mk5yG`3{%Py8_Mk|_(!qW12V zz~O=Vk_A5*TqJclW%fu)f|}T)F+-^8!QNg)t^P#=y^HPM6*tU#r$r?egPJh8pVZ?n z%ydMUdv(FOf3`F*3=0RDmInt$+wld8;YN48INvN^jybpl2+X)1=Zv6$rQxEng@NHFG58K_hj_Dl@oLL4~L)^KCowM_p=@#vrQwC@|=L z714iVTo78r@ZBQiF8bTk=)biLu!d~(-=4>c=)a>3(01;&m>jp0TgkXB$301jt!dX7 z_enVp?cmV($oLP6O@@4X;{IG|(6pT~X?2XzgF)Tl?vdWWH0Sk0+2S(W$^eW%64V~U zE_Y#^OYKLqrDe8Neb|0Hs6D)3QO`y{uKik)HmBYbxk78%ev5!<+l)w98-||>>UMAV zt3|yFe`=Q^T=YJjEiH3e)rak8gW4lY8*?vIe24ML|ntXU5Zq< zH{}ZPZ5a z)%iNEv6n6}0ynFqs+xcO{wwkZRu zn{hVK#C91APE7f(_4Z{zbra48n%FU8!CabTz9GcCw^Ie<8-lG}L#}rmd;f@tIg7?k z0COX>TN&ZaAb|#P6B$7pd*m#*ub-T*^u78+&%Eh?_IUKof8ByYF zWCYIcpIE?k{1}wA&4_S|e?Tcx)kNEFn9&<`@shS1=PaR#-w?C+6$~m)**acLg&+TZJXGbxO{TTx@B_k=w3QtDp&5 z3v8je({q-3XZWuSFwvY*!A#ItVF_)Wm9xXEW1VK)h@D*pP0(6k3(cLIvot*H8sie` zymDlMro0_AbV1Gv??hCbtz$C1up09X!s1QKHLx$!IWW|>>W>%9U%1|Pelc(1M)Oz0 zO@!no(Q;FyRqba;^1`%z{p)R<(5tn5Gxz{jVehWx8nD#~n-klMYqx#>`++?+fa{o- ztM%5*Ei`dU(SF#h&09CHFFCwwr{P58<4d2dz4cFSMJq7`D=v$po#^BV~bDdG%D=> zNpnM)`Af%^ELgl`!O~w%U$S_k4Hhi=32tyzR)np$sW!d5TBZo6u}!u9Me}~NaQ@)< z+O7@%0k-Mhvj5OgFzG+ThTVXD3pR|56`$aGU~g?~{vten^d~{1^w58ZO}s&I-@xKi z*RuK$XUq-SyKw%zB`F+z+|+!yccOdUr3-#B-&utN<^yc?i^i=C4r0^xBOFBcmfU9! z3x*rlA6jejfbel#Ot#cv2w^-kTt33Zd%n@xxQX%NB_5i;)O>&~oNrJgXwD(08-!nM zX<&5S9r<|s*|R^1YXz|E!>xKou)Y}S!?`%#VV}3Pzz_DZ5rOA~5Wek=gVMOm_gKKK zDcrdkZcK4~!d>?nPN?y@J+lS|;1ch-vJU0~?$%<+GC~nTIa) z%)w(f{c{|8a8;gvuEX+;hCJK4u|DqgwnC%PJwDva3y$q=?%GywpNiYEPQjh|Sk&D! z2w~QnzwW{fH<-UJ?o796@zV8|EdC{i?jIUB$k2y-H}>`S4%OP4mib5AQVy0zYE8}G zb#L+U_eN$74K+3Y8(;Vkh@Ujj+r}tXomf#Ks+#4|ylty~)7LQ`EJFy6bSzwk-xDO!D6Wyvf&JU z+p4R}GapWG9-y1J_ukw#?=+SR%>#qHXlWR?YDG!s>gdHqxXIqqpKY*c-p|^?LL517 z#vKX@?)v8b(Sf#Azsu(z+}d30@5i0DaYJh~ew+CV7m)MO8Mm9iu*7e}(>Cs%0U4|Pq+}J#Bz8WKowJ|U>Hm0EdU(8<=VTeCq zYb$JYz4amrGZR$ZP;%UUeB%f)_obf|AoUdC;~M4~WX8ND>-}=xlKBG*7ypuHrk5;U zh)yh;pO|IK>y+0Sue)2%+WU&~_Qt64gYqi9Nfit|s{Chp6|{njjpLS}1gibFsn)x2 z@wz{4*v)XZ7dBiCXtwDQXYK*~BWrLB-x(fS{L6?j!mb-IGZy@0{RlF${@6h?x*Hw+ z>-{7@xIYP~&J1M+=YI_~G;hPDmJvAaNG9)iV?2mfT-pOED?1B2+m{_Be zce34}Al!olTp&#C-gNrl`erc^w1!-=n*nS?uEY8 zBSSrX5ixBFo!Q6}X*8`lmA63tg(r|VBOBO4g7~E;=q=Y4VHRoc5@=%&C4KG`;8z|P zh&$6E!2fvw&9sGopv|V{-&+REbiK3va|`SX6-Hy;;*EVUblj`k?&+nl*| zWu=a!lHC1&J6maRNnf`lNKD+Z#lOU39<*O3O>Q64Ba4^(Y~I3zrQADNR=$RpMva-B zJBLsjd}g-o5<=;G!oxYx+^!0Wr<8dT$ZjE%nN{XtLA!@kX3m%g0qqe|jI?;XmU2 zf5F0q3pT(FWweyi)!!;KGawQkzf)9ZKt$-@D{2h4reA;Yl6YdYi)@=T$L!Ez98rrr z?4iP&3)+YDF~BX~(o6y|xowLKhzD`u2-f^`?s5KZ8CU3>5~n6SEd}6KG1%3af?OSL zDIuqk$Pu}h3i(byETTG%zhy0mj$*0*#2gwfLS9raNl;xmN`B&HwSdjTXAll@aDsCHEDqa`Urafn>KoOhN}X zGrw>GlrD+oxqt`7Tr%CwcIZ&yupt^;gw6D#c?-EcYT&qNG@p!Ehh=GV5LC^-0X)tK z-X1AD9#>ba-0ky9DArNF)H`QOIm3>X(qaYV8N1)bXD|UfF2dsMhjk9yI#Do=8}D+=UoGJ`4Y|oSSjG?e&o{~+)`2`h>j%Q>;ae?-{7-Nsg-rj{8>#6ZDwK_z{ z?XY<^Wb-G3V|{$|9@pTX#~S=A@(1ppjayaQ>h>@zk57>%3I?-AqOZ*{ zJ-^yu-iB^#T5t?fM(Nkd;W=Hk#TzYIcRnB2hh2bQxTR6S6DR+TnC~a=4j&f0^Wz_~ zd}^P^{%BvGKnH*DJTSkkEUXeDwVJg`sw)`-*SBv4lv})Qe44sRBed-~XS z0?IAcJSCl_t?vfZ8nIs;&aZz8D7Q{5Y&pOFIiS`|Y&pN$1FEAv#<(eyPIiP?qE@H# ztTV(Ckvg4gT_Ki?f2Z?pN{A%_h~gZy)k7>%pv(C-HN+AL_>?i}>6*mM*`Fe&<8dJ? z^uJ_imvX!$0yAO%YeFMZv3$y!XEytOQ6WD~oFD(L!DQ&k$uj;wG?0ei4JHKr<8I7 zFVC*Vt@)8uc?K|>o!EI=Tr0$K))0KaW`a&AF!9ifyX#^Z9?cH-7n zQjX`GD(56l=dut_9fbsT8k(un=zt(@lH1O3h}S9O1O0-&|B(0?jCWGtoN`9s|598= zI%XF%|KEyBvI{4la1F&}G-mFDy&sVqQrq#Mv+Md&w*e2jww^0gTW$+bx1SKeBUFo_ zMMIgHU>4BpXJ}q>!j(xl#msKrf`mqN$Q<%VG{Q<|2Yw+dbB+XT5q%wtfJm7h9T$iR`i@5-71HtNmy31z_-rf$#UC233;0go-C*( z!PA#*GjzJJ7SD-qm&21`6wit8=v*&YZqn zrZ6*f@0i96&B$rz&^{SD>JZELsRQ+R_vGMQ~Pv=p}2p-fjvjP?;RjJx7%*!oP%N5*h(e*{~X2_GXcZY+q4lH`IN zYc^P(9_taaAFT-{kK;UnoeN#eLyE@-#cmUB?el=-3BK6w69h|mi}3=OlLeC_c$r<8 zPVSJO5+cc7Oc#+;3na56)5QmQpH?7PNyqy-Q)uP%5J`5YrV=@$K=5>EJdIq9%No1{ z=F9*Y9ZwKG!1$~JsSVT3432eYuNmNi z(qA<2Z}QjJf<+B?@W~$)m7Ub@`*JtwigIqW{@s_mX;zdo(*DDjyG&M;bHmi_%U$a7 z<+3U2@#QX8`EuF#^!jqQIrHVRwdwQaZUg4aW%JVS%iUVbm7DF!fG>AT4p)u|4F9M5 za=*xM046Pf83hoJAaV#D6Pst z4?%J5>Cy%B78-ZOxEncNgGY1CVGyao%VZ|P7r$gDz)i-qdVQM@F;}{Fz{}R}Y zIjp+K^#V~I0sp%II~tj-e|txtjq^r9c9xL#bngEYWMiza-ObFPaXT~S1t9k$8+dNz z^udv}?8d=Ykj*(0;*W9_@crX#1qS!JL513!wXj)VE7)%M2B3(^Nb5!XTJ`Sf`ec4s z$EZF(s#DIJr1j%~XZ+#*a=4{ReXLRAwfg!HPA9KEqM!?Or4AlQ(lE!=&bt5A@YFRL zSRs|vFv0cHpvLfEEm|SbwDn`LfMd8A#2mTgpU#nBm9#+ybIVYRF`xZBgSoaXM%kBS zFn6rPVm#ZrVFrsFZc=h6?q^U-=dx6!d)0nMp1G*)pl+hm$6uy8`nIz-_)7ZW4`;;fwv)dc`A0_!!r* zEm?|-z3U5pHXm12p<3bl+~HB@d%fH? z)3>K4@x(#ciSQ4S(k{qnCUHw*$0K&YeBW3sK1;5viZk1&=g3W|;>>pAd2*{)ab`X8 z0=cOboL!E*NN$ZP&iMBdxsIw1W1Ynzd|AM%9(NcIUlFjX%N%Q1e035|FI9NR3ju(= zHi`R|Rh((}^-0`Mt>Abm0PMXniHFasIMeQ%$eSAWs?^f z!pC`gWHJ|I_R zZ>q7kNh^+ORhcvW-Lw_Q5GpX7(`IisYvnpkzGA;>ZW6CyoZF(6=eP<^C6i#XZ`q0m zN4UEe#7RduV{fZgZnC?p44U3+XxtRC2`Tt_iY92t7w|Lk{Fup1njQ@ zjgQ+4I8X%|A9oNin0bkhcEa!2D*Gm0mXtFt?nEw#nUpgg?%c}URpB775ki-DY2~qi z3eIMRU1@Jx6=(e0t<@X}s3MJryR#?3d{25}bI2ajlVBPrAX;Wu_7pJ4|0!sE+)Kb< z1CWBo#k~oxS<#g#W)SxggY6Zd%{2Q8ST)=>)$HHObNJ4n-aZGD?*N1Ku0LHlGh z_loCuIhJ@h`Kn{QUO|!?f;xdkM$|jN%TFuIPyqvTt@x<0qw-pH2%N;zPY3Aq2-1gvR z2F9}xf=->hAQ3TeYAf!HIovxdL*c$XvZw}i24^Ps+wdYcg25&IytNHKm6~AAB*Xo- zlrb8CIg1SU+fv5p0_JQo+;2-6qXn3A$Z+2{WlY$EIhPFgj#I{jI+*jw$hq7UvP)Y~ z=L?nZT8Ho31w!RJ*Wr72VJnudaEc39-X+Hlq+8FTwToKqDP38-28>_K0=l@BOIFyC zm1_X`l`No3xb>oHcnKThr%ts?$*^lF<9l|Q*=o^}Y`#KU!3q{FUT#R*%ah*b6|J&P z&4PXb3yW6@$8bmug7Xn^RjWN1kC)ItzjlSKtI4nzDdWfEnpS%R7B8V4zh;GtAU_6YN!%RW~c8g&2J%^bz2<%qDco;E< znI$Q(+XUlrl^kXkq`+<$jE50(m|2bjyF)O}og8KsqrmQzB_}AX!@|+`3sEq4$#OHx z_&~T@(gK)FhH;Y+j~+FroYF~XRxN1jUfSW2ywr|ac!K$(U0#ApXAAGx;;r2$%ge0i zeu~~Np64@hho5*42$j#pIIzWy4?KHNsC+i=@agy=Qaluy_R*{}Vd-J9#ACcE)L|Bx zpdJy5MFVM{a|VJrHxp4gvn@8C5H+ZBwzxI zxZz#edwcN27%HRePUF7b6rQ!4+Txv6;naR1m5T(s%ecSdGO+;vY3~5VWugIHAa{`A zW_1tYyQztH1C$Ze!6B9Lj$I{ph~iT3*a>onDlYYoogjCZ;?ihkC&(Qk+*+7wsa#@< z(2)XV8L>m=7{m09=2XX&1#+w)y`wnAm8%L6JMFH+q4ToF*|aFOE1^eRtfEy*out}d7ouQ)rd38<_s*+N|#P+6~J8+Dzh zatuywqP^=2ChwJO$!-X!tXHxryD^}$ElND!?5Q;K$t}6z)hz{+^$MW{>ehhDd4Xl114|>X71mx!+&zFnm4;4(tE0>KP4ye>Cmy8|>sKhIu zj2`opyYR?+C8?C-`FO#kUip0WL_j58`F! z9?5$oS?Y}f%6cS8>dgYmHYd^hwu8!3)H@!@dSo)xy9Jc<$Rw!u3Ml81$xrV)s60J= z;E|k1Hal(dH{6k|4UbLncPW>a~p>rOzhn~l6Yh~Mre-$iaj!36WX(YVvmg1g!XojyVBEoWbR8M z9_{0i#3R!&+S#{&B9E-sg!U_-$Rq1Dp#ue43pWzN{m`8)_uUfnrHn&D#97kF;UVJk zh(?YI5jU|la;zXT++LY3JV6SF@`Wc$VQuXW*S1qybe6+3r+6e8SAk@md};x?u~3#| znS5FSxzW%Nw>+m8P}V0o=YB>3xe-y8WV3RXgK|ih-16jXkL3F%Tb^?YDBCyLtejgw z*}lnU<-7vQ^$j720XV;aa*iVe0bS^zG_SU=VXj-b$RpXlVQ#_B#RZh>8zv5*OA08{ zH%=TtmljZ_Z=5)QE-Ro+-#Fa?UE!c4L$~wN03ug!?VBViK-U&f+BeBSfUXlLITj%Yo7l1IO?lcYlb%4_V2PwlCO3h&(Gp32OgaT| zlO>YQh@14|Rv~I@Cz~XUzd3q)nT| zmuJ$^r#tM`J(h_#YcygK!o7~j_e%1?A3c-pm866FJd^E}WP|%Xlk1g91`l{9*DI3? z985MYNX-DCwKe2(J`S(l?(JUM--wZ^k9Y$m!!RpuvaIZZt=&;_mqupAO+6EJ%b1ac(q^8CdS%^VuePvEJc2|_R@~AN`Cds@ z+{!cAUP)Hm+B3PfAQ`;b#xuEIK`}7fdM4K^2nJ?*%VezBthj?Cvb{o(!OD)F$@R)) z#hpBp=@ml^c6Rnm#veu)m|Z-R=@nxh%x;!R36~UicSNpNHYe`knY33jC(zQKo=JNp zQv%Fho=JNplN8L}o=JUn`EXy$#EaP?9q#9dv{z;lqow^lll02WVK4`HCh3*QDqs%u zOwuc#3J>y3+$-Y_wK~Ky(K0qjgoipJ>6LMqRu1z_+$-ZSnZrF3_sTd-<_OP3y|NCI zInpyxudF*{juB=p>@t=n!DBs=^b1jpA7;Vh3Mgwy_85;Zptxto67%2*1r&A7Fp>yQ zETE`w29ovR$qvdjW>VoP9?ADja^a~3l;`Udd; zo#mj69h(r(_DHsGh&R|dr+{*OL%;z#w}3KzW5fYEuYfW>G2{T9UqG3@aS8ys&_OBU z(&9xP$@PuX1a>YiptNr?PXJv~KxyA(q5!(IfYQFn#07L&0i}-1%ms9Xfs$QDUU4r@ zUul7~UuI^*##IhUdSxaykZT1Q?CZu?d^;Lz@zu_6do+m`=7YOF;5sX~n*y$@g1a@~ zrc`iu2sbYN;a&vZyWp^o_3+M+#44&YrAgY+yMI|;(=29jM}%ybA1V;s4mFEBS|D8| z$P)!Jr387pKvpk7o-2^4CCG~fg1a_k-F>A%rj;PC7s#3=$Xf-1D_8R^y&EuPnY@9C-n6h!cDqzaS`PzUf8|Ui-rfi&V3YfBSzO`Vcl#TNp z0aG^4cLz+_IR8QANMCA>&q--_ZPZ=h>59#&>j76>(>az$ zUSRuSDX#m6#n~%vx%7R+7WwPnf~#>Km$Ke^+@@JHKVeJVO#z)p<}#!wtzCa1X;I8| z@>8a`-`%Okm74B6ZAu5@Qq!B4KEW>w_11^*)ansDiQHUg;w%{FUM`s0P=7zaKE#Vr z3Wx_bUMZmZ+<}y#qpuds_`s06aI~<)!@aK+%m}_261OGG`PU1kdyc;V)!UJ!`Wpe$ zGn%v|EA=-Ere5z&7zviQ3TC{YPe@jsx9iJy1;TZ3bq-^m|FL6 ztiRdC*gSxehpL(#jI9Kz8;8c%?j6ftIm6kub%@sIj?T=Z9Mx??w0o#l&!ZgMZ9}vU z3GygMc)Jko?ipV@i%Jx2AENA5vS7!u)r|HIAt>5daRC24cl5M{Sg6rB=uw-9BwQq=8f?H;1+R*KS9=IuQ~l-){D zA&Kr8qP?U3VM=bF#O$Jx+&d)e!!Eg7&|D8Et?v_oai~a#gxohGvhn>QGU||w zyy^P^AvrWU$0jlBragd9lLtm%Wo|rGp`)|QSoZof#nJ`WCFO$j{&dB{g)AzAaE3zZLY9@y`7Em!L;d+L0wMk}T<3-;H~bl^oGC!h3sG+VQ`9Bh z^Fy>YG&6&`qY@eT^W&4auVIm4P~zm$a?CfKk#%-z>UY8p+v^(gzLfgfX5p> z<71g#cbNlo0avf3J#h!TZctp(4|9bd#^%O=tF0An3U~ur{(!qF;D&l;x}~8Fh#AJ=7K%V|RvN|J*@$ zRLhg*1|=Zx3dveMCI<%m_2l;CV2^>hY~goq;>`;oP9W9lVI|}{z$?`N5zAHf84V(tiS2Oag2lb z`$WRVrx1k{f1ga)=)@dt0%zZzO4#T^sKDQ69Xr@DLAX8_l2zgQdkA=R8Llse zWM#O%;>f-_I#d;|uPU-CTwl{q zx>v%MhwI)6TOO|aBy4%O?k_A3Cvh=Q6@&+bU{w$v7=o2Scu+`I2H~NOoNyC=m?8&; z-Ql)i6VGi6wn2w066?S6P5eAAe;c1TLCcY{NPY=PWAUq=kD}(UNkgN>Ca~wJ0hWlJaRt4dCimVL63q3mV zhWny~Ef2zr6Sh1EFG<+)AiUhOZlhVA39m@l@*uo2VatQ?s)Q{M!fS;ckaI8tgCm1= zyW+QpnRuxCdV>u24on|!4D`5tF?)Ui`-$AixFLev-he&}abrX|eF}>E?l(o0Q>LJ} zQ+0DhIZXjj?F_d1wdN{RXR< z;PDUeu%6lAc_4!F!Si55#qOJ(@`oZS@*Z9>cpi?Z$azoQ3? zJRVW`;CUjV^1<_DMCF6$sfa2Go~L6h9(@x$&%{_X{5E)=jj?F_ZScHcFxVb`*S7R(6La)VGK89Y8v3wA{5o7r% zdNaoIVf0pv<>Tn>7%K^+cM>kv!9>!#2^R@rL+QPQiiiX-o$c`F{#@dF*E(U7HWvT-`PWoW?36gLvv}=et zpESl5%x)p(ywVuALc52U^Gjpg4DAtOE({bVik@c=qT&#ypE3kLH;$l5)S^;;1;$l6Fd(`(v#YK7q zS??yrMS58GXz%8btH^q{C@#{&x<`Ar8?JMLtanF^&876UE$ls~ zxLA)O>picySPz?4VDAOR#d;K3??uJMdKmYp?@Nk{^a!%v%ZiKiu*@2wC^#1)WP@9hvvv=xk5@0}2fr4>rD-n$_dD=U~} zz4t;a7S_1N0r^vi#kv~Th`k?Tk*wA=VjqN9q^fm|*e0KrV@yVcimbP(;&M7bTG-o6 zaTy_O*4tch86_Bbu(yTcGE&&Ax257TS}^ipZ!5*6Vz{igwc=7WWMaVHHi}E-a9M9# z#ie@4#DKl+Larj~ZLhdQ4>NCJZwJLCdibojqv8@h%)EuYofH@AQDnWH6&LGa(+ceE zqPSR(BJ1s{xL6P49`)T#agiQD*4tfiksj7P+S?=KDze_5ii`BH?$O>phMO`$*4sD4 zB5N{xP1f5l#1e4@WY*h1#1d@5K5Q|i`t`R#d#457h;fl-Y0BK?G2*qWDuvza&#buOWtZ|J4a%qUgx*FGrT^3@ItkyMRmxoxSs&$Rn z6(LrU^{!N0P6tQ}dsitgBZSR*S1T@~1S1dju2Eb@3Y+z=Ra{03Mjq__L2;=VF6&*V zxKs_97_fJ};!-(W*1JJ*sU9*hVDH9|tH^pcDK62&%v;#IS#gOTKI`40xI_;#Z(;9N z#l?CQS?@N*#d_GZ0(-YBF4m*SdUq%;*2B0*eeYCUq(_kT?owQ&hjowk?hd(%tap#% zB0a2ow0EE3rcRLc?hmoZn#^94^&SYZL|g%x^&SkdL|eg_^&SebSX!YZ>pdJ|v9f|m z)_WwxVquMI9FRvtEY{VyM(nW=i)6K~5qmtuB2}$x#GVMTimdmf;&M7bTG)F^aTy_O z)_YoU86_Bbu=kAOGE&&A_pIVFS}^ip?>WV#Vz{jLyy8+dWMaVH3yMqSa9Qs~#ie@4 z#DKk*Larj~y{x!I4>NCJ?-j)*dibpOs^Sto%)EuY*Ay4)QDnW>6&LGa(+cdpp}1I& zBI~`WxL6P49`$`oagiQD)_YrVksj7P+IuJDDze_Yii`BH?$O@+hFfETtoK2PMb>2Y znyk0UXXN;lv6hG{AhX`4A(m(>7_;7HAr?z3lw`flLo8NSFv)sbgjg)Bag77AWr)SP z8rO(z6=IRB)-_^VhghVlb&c3IAy$#~wpCnC2S^Kh+bJ$1gw1-}D=wo1BM$WVs)kGq*xN;MsT?lr?W(v`51AOSw_C_nWWC)Lm*`>U zE$r=~xI_=1_4ZU;qKBEcu(y}uVm*qix3}VAJ#1Qmy?qoH>rrIAeH9n$Vces>`zbEc zBglIDD=yN*x<`8lgj_||J5X_v9@ahDJH&9)Cdhh+hFD}xX0OS5hlN-ou7J#Xhlg0A ztzgW0M}$}`tx%HnjtsF_S-~Xh9Tj4+u*NkG$k8Dd>uOvhc1(yxvRc=O9UEeis@64P z$Awr$);nHtIUOJ^?46*vj1V^Kov65s5{x|9J4taFDQwm|S#cRH7mKbrX1I=tzMS#6;v#!8 ze@)(dLUD<{LNf6^sklU6;h6cJQe3RBV3PWtR$Q#FaFY9;QCzIAagXEjtm0yQjeF#t zQ(UC4b&uThii`BM?vZ;zaTN*hMGfW@fy}V@k_I!9*cAA(1~Zy44q@>X4Q52KN$^z- zW>jG$!s2ThOl5It@O2HQy2w<4#WysV3gZ&tn;J}&k;wv!Zz-@M6~3*(L>V)iVeuUe zCd&9^_^t*MWz2kr#rHHAD^sMyKWQ*l#wHwCd|!jHGDSlCK!dR|#zktq$!Fy#n9Vqy zkupI_+*E^+GS)>}+)RNLNpW)xM#@+hX>ltHPW0uCtrZv9lUZ%D;x>v)gcg!naa+YD zIt$0FxSir+nFW)qxV_?Hm4%b6xP#(ik&SyCmmL)sYi!&jx0B)`iLHC&c2-=Zuyv2z zE{dzjio0qsrwC+*#oaWRk;G=j-8Goegpmk~duT8tip`39YA~Y;BM}z&(qJl!%Zhtz zFx5pS3oP!V!BiNR75CL(s*Fq)Slmy66x~~@lXxM$`}`^^JY9o1MIbXQo}s~vBsMFa zslkjUj6_&GOM@9vY*sv5gBevAiLiK%22)vFRyV)mVet|T#>x~~@lp-O%Gi_xi}{DTE2`trwhii_;YtTtKk zdc`F|3(2f_gW?jMg=1E{QE{=%f=O1qNpZ2t!bw)VS#hz*#yyV9EsBdZHtvzTRdJET z);)5!DK1jjx<~GI#Z_d*J2aS61Tw?oof^zYVzc618q8?INQA|^HJA~_X2p9nm{En1 z2#fb>FqOq+#Xo8=)kP)?EZ(QVR2Y{P@7G|ej7%0-d_aK}S@A&)Cd!!k42utGFj2;5 z#fLSRC}ZX`EIy*aSeYU#KB~c38Jluo@i7g?$`o1gaSg`G7#FGa6B>+^39{mo8jO^& zF4E#t3arSAPirtz#=1z0&l#|NytDG2FVBZqWKHI@$%!w7Sfa9kOo=asSfa6D%!n_A zSgf#6k`P}Gu~=WhBp<#KVzIi$H4ezDAr@VQ&k? z#d;LUZ%f6+df3DQds`_k)}u&$TPrTs!?;I%w^3ZAN09ioRa~Tpb&vM83%QE4x4q&b zJ*<1Qx0B&ICdhg_hgf7yX0OS5yM$OGu7J#XyM|bztzgW0yMuOvhwpWNnvRc=O?Hyu~s@64P`-E6U*4tNcIUOJ^?Cqzxj1V^K z?XS3u5{x|9J3w(6DQwm|P;nV87zx^5v9f|m);lZ2VquMI9FVg^EY{VyM(msr zi)6K~5j!`;B2}$x#Lf$`imZ3O;&M7bTG+claTy_O*1J$~86_Bbuy>K-GE&&Acd_C! zS}^ip?-IqOVz{h#sp3*KWMaVHWr|DXa9Qti#ie@4#DKjkLarj~U8%T44>NCJ?<&P5 zdibn&wc-*z%)EuYYZMpjQDnVq6&LGa(+ceUL24eAr`4>T_bj1h*f00 z`xTed0n)H@k1H^-BnSdSv> zJ*&7_51UqC?>WWAdK6jjdBw$g826~}3yO>M2(sRbii`BH?$O>$Ay<+0URGSBhjowk zUNhX339{bnAr@Ja*=w@i8zGj6DwTcOoDPr{_BQ#v9G5bxc4UOG zS#MLtWt3p#!QN(y%Sd6f-sXzSXu-&Xy)6`%is7=}mWoT&kck0%TPZG;!)3j#6_@HE z69e|P3Au`_x2@t5J8_KHjNF!L7nc2HcbN0Ie*R9viwO)Idslj34M zimbP@;$l6Fd(?Lq#YK7qS#MXxMS58GXm7WWtH^r0D=yN*x<`9^8E*9nvfkby7Fm7_;7fAr?z3lw`gALo8NSFv)rcgjg)Bag76VV2H)K8rO&& z6k?IA)-_@WhghVlb&c2|Ay$#~4pm%E2S^Khhbb;2gw1+~D=wo1BMUE$p43 zxI_=1^-fe=qKBEcuy>N;Vm*qice3JQJ#1Qmy;Bqy>rrIAQxzBMVces>rztMdBglHE zD=yN*x<`9wgj_||J5zCy9@ahDJI8QSC&+r|hFD}xX0OS5=Y?1zu7J#X=Z9FLtzgW0 z7lc?Wtx%HnE)20)S-~XhT@+%mu*NkG$i*QR>uOvhc1eguvRc=OT^eGMs@64PmxWkG z*1KGBIUOJ^>|LR_j1V^KU8%T?5{x|9yGn5xDQwoeT5%aI7)ocfSP$bK^}Stjksd+TyF+o29@ahDyEEh}vff>ai}bMW z(cZm=TVsN(_s0;6tjX*(S?|6OOT-nBS?~T3OSBb?S?_@mi=`DxvfhIs7Aq^5WW9$% zEEd+d#sPUa#A02IYs4N2u}D_y8nH)1EK=3FM(nW=tH^qfD=w!4q=mgF6qgagX1ymB zmr;U|2YXK`E+d7_dQU4ZqXi=m_MTB(Du&B?&nhleLna37J*T)-4wv=Bu-iwM$^f2=l_Fht4qKD6VFDow5!^~UQdqr`v9!1uBRdKN%Hm$(kYl@5YD6-z` zii`Cy?or=26c_0cWW6^P7wKW$qrJC6t|IHbt++@J>mKdBXSit-WW7IySY%CRugQAv zhgc%6fXsRygjk}jV9a`(d_j&*8Q)@Qg_5kdX^6$j3MN@^vk;4gHLh_$HV?5_SK}J7 zEkZ1k)w)J(%MgoHwXPA{D#R+X-qwoC=>TbAZyUvBgs@p}Tg7FRVC2Exc8beLVYA-$ zipyxh$b-Ed6qkzOvfhr0OVyBx0ed?sE|tS&y`2@8>LC*Y_I3%mimbP*;u1Z~yoJ5p z6qo4Xv)=BCOY|`F7WVc~T&zct_4ZU;tcOi2u(y}uVm*qix3}VAJ&b$QcOS(?dIVW- zU&TdwSodgezmTiQdiyIb(!;t(dj}bA%?YyJ!66n|li6#s-XS5Dh$|qo-k~9uXe$`A z-eDmYODmLQy~9H+R#q^{dPjsHqq^fm|*fAki zk@b#MTuui_3wy^YE+d4^ddDj+qXZ)l_D)b-MhcttPE=e*3q~I7ous%_443szR$Quv zObpmNMRBPdF6*7DxKt0B7_fI*$W>&$(-oKKVdgFDouRly51;kUR9vEmnYXZamf~VP zimZ3G;$l5)T7kWD6c_7JWW9407wci%qrT@UF47~&dgm)H(!;t(dl!UUMb^7eagiR@ zJ=(j(aJU0Q^_Md)Ra|6G=C8?nmnkmMS4bwl%N3XCD;zW56^e`X6--j!m5Ph?6;5*B zRf>!CHSTd-u2x*EuW^suHHwS$weFF-R&kNO);)56P+Ua~yagNZUe8Q!JAL>V)mVexJa#>y1w@E#4u%GiVhi}z|UR;EaZ zf7D>CjB$}#->1PynII+Jufa$e>mn^apumcx_@D+OWvq*|_=p83`tru3ii_;YtTtKk zF~uc93(2hbxZ)C>g=1EHLUFOof=O0^X2q8^m{En1 z2#c?1FqOq+#aA_$>LQZ`7GKj~DvZmDuWK+>MkWg^zM;U1toWt|6J^YNhQ+rum?-13 z;@cWblri%e7T?ietW1#=-_>BOj7>SP_?`x1Ws0o$Ck@8R7#IH^ZEqf6b#)~AUq~|J z%w%SgNhZl;k_m}q#!T`Ey|83n-kWsa?uL%N<=$@4dA{EbLaRMt8@h4HWHO+rAP9&e zsH}oJZiqYXin{{hzHfktii(Pg@~Z08+3M8yi~RBH8N;o6KIfb|Rdwo|?|RYKpU0r^ zOpq1##h~yEtB5U5`-XY9mdRl`S#f#{3eT{L*y0QZ_xEte$q^^oqgidT;wcfAIGRYz zil;_g;%DM8E6$8K>1M(xE6$2I>1E<5E1ni{(#b|Ww9D*>lRh@;AvY)Dgo{}{JxP;m-p#WQ12@d`#Fw0Kqw zrf#uWabXOmexb<%EuI~Nsbg$bToi+;XK1oOi;E*LCo7&4gNbL%e1;a!jlsk-E-RiF zgNbL%e1;a6#Gv$y&x%W9Ps8lo?#WS z#q%RDCo8UsLE#xz5nH^F!Tmk_aZ$vH_Gng{tax$6C5|Q%v*INYm-v}D%!-#roOCl` zlocLGVU#0eL(ddOWFal*r_9&%SjTuxTJItDe5 zfSaMkwK1r;gtOu`F{t#?D zZ80c4!zl+^ygde`XM9$?BL<~sjEd;%J7Z9ICdi6+#h~yEtB5V$9f3Jn@tznIo?#WS z#fQF8EEOvab)9vkN<(SDA%{%unb=oTUFrMD;NzS453r4dH8+$h&BQV|oH-!25K-)G zDOF01<;Kp47+eL!v)^c_D^?oYgff&81{3id5%uj&O*&HztvpXmXI3+qabGk@xv@oU zrUtX^OP;9=j)%<(A@y=Vsclh4ekGui(8ks%AHPP_=(vGYe1=O z4M%D_QLS~Y9U9X_+2{?=sQp2VLQ6XWN^1)O6sR`?O0xn?AfR>zR5H84R1lg#y-id@ zYn|$5oH+o!Lr`N|+8IqPAa)Uf@su(&tAKfz7>K77v5E72gFrkbObtyXXlA!(6iZs_ zgMdmbX%Ygo^EJ1S3p~PiNbi2{Xr~o zf1i0K>CX%gwfa1uWPhCOfZ7*OvPYkcr+pKX3Tai5@nlrT9#15S;z=~cS|M~YLFLh% zrREVylRybO4U%xkAoqP0x`!EE-^6y0BSJL67Vxl zQU0X*3v4O$U=@gaSm+5Cs&NmCEde*?q&=KRrKN_d>iUL}upZPEi&gMJNsnekOH#f% z<#BNE2jg2#e9QjZXM3zj`Lum*9@}5V`V809x26Jb0J=IsgO;7mNb8FTHO6SS#;~m! zLtN^R>V^#D>Tg2$RYo*tEN!?zt|g?in8je2T|>;s&MXGkzjdaa#w-R`wrj0AHVk;p zrAUum>K6qtLgI&zPUo-!J5aOxzC$?(w3y-uBkG5H;s`)xsW3)jdKj_qvjL`;}hnzZ+G1?&WC^5y{nZD65`BQz9f%512 zW^O5WvOnfjQfDB|_AOo|6{6|>xK~MqXudz;RZ=0E@J~9Gv{`6o{8L^f4FcDJxu5nb zX%P4hpl7^F8U)S*=vk+dG7~YDfO*cVq(B%<06p(jQXq^bfL`z_DG-JeKrcF#(%DGS z4a`ekr4*v@2Iyt4QVLOg1N4elDTOG&0eaP`l*~vo-++0|tCT=y!U6QUS1Ezaj00$^ zS1Ezalmlp+Q%TNBqY+wiyH`mb#!6+oSh3WN*(y8+bDT#~&}4tOtMip`~>geV8RA3z<= zZ3#p4+E&9-288HbTu>wK9ZC>vaowF@G=Z=Pr}(fwB^9jz2@-%qX21K$%fGD}b`1^t6D(SA)G8i*DMIQ>?l1`Qc15SO3z9-*{g}tvjZ+8N*6_l z?2n^#aSVyhI7-hApu8wu>bRP$C|wpHnNhktfHI?WMF3?+>B<1giqi7~CNoM`1yE*` zt`4BgD7`R%vZM4ONlE{4lwO>0!i5~Amj+yRlwKyOq*oKAYZ6ZOYNGUtfXj%|DJ#kPz;F-LbeAr?`vSRWPPh`gAqn^o($&H@LjLA)&$%@I%9?6W!$2^l6lUqEK z8Iw;}e8ywhG5M^3k}ge5J|{8RrHRQGJeCoYFNTEdjAQbp zh!H(;OupioyqJ95VnefHa;qmYV{)5kGGlVPXEI~*4bNo7{K zw>^^`lkW&f`ix_8m&AnII40loSawXlFQBAL6O+3oCc88-`Ju-$V)CPqkezW%?ui)D z6UXEyp2>^J&nz}9D<(hpL}pCx^Gs$;PWu)gz74Bn#^iL*WX0r(9?6W!lRT3dlQTS% z8Iz}YCOali6_E59$K*_j3Ab@fp60Ran4B%3q)QW%b0j9aG%-2XV;M0yFC=7V9Fy}S zM)brnxxh1dF}cuSZJlrisjZB!(lJ9anbnRN zn#o+`m|>aBrNng9H8jBBJL-7s>0K$8d#*Z6du~V`ca!Ia=5e=r zZde|72XU>&F0I*ix!ZHqaBV!(e)oE=CXaj2bG3QgBc21{}m288xJ@%^RBs3H8#!@wH5Yz>%tm2yjCV}~-|%$1IJ zBeb(!C-HK}dofwp)=+=A+ALo7c;CXErMhBcrMcZ*Xz?=)97`81K8V>?$P!w+bQ9i( zDXUC&Xqm2be5BCQ`xIYv$>U>7qt%*6H-PDMdw~C8h@XV`=o}oJ5BR4c-r3w*mDM_U z9`L;aug=23?SOwK@R|%9Ll^MR1zwwhW84D1FT~-As4U$vXaS%0ZBF@Q$m$~Ct@T~y z3XHn3y~}QwfLWi}@@k+O^^u<=c{Ngv`pBOy_+Kd2XYCQ6EAXnp3eVajKTq=7OknMiKl|H_hjlhr zn%m$W)>5Ulq~Fbq_m?daq?)D%V;){CNU=D?jZg zp8~p4qMDZ=7y&(BqKca^5CL5!QN>RfgMhA#sNyM{H-KI!(bQEmX8^rO zqN%TFx&V5yL{n$cOab%~iKgD7DGulwgEo%Z--Nn61~pHaXT`3FLB&sCC7e!I#-QRQ z0C6^56@!Y8FiHWuItCRF@fK-q45t1;6|u!@Vled%s)*pa7)*U*C(^Ysn0m&}qw8WY zXBu5ENX<897Tq97#W_5QZWN^A9iBrs2~u$nPobLysrZLy(0W0p4zd&I7D1*Svh(Lw zL8dOU)8{rprarQ>=T1YGXgTW4S&r_CLCr&E_S_wVii3Fe+!KR}e|Yw6h(X0YJbUhq zLB%^fd+v+D)H!zc+#iFfZ|v-OAO=&{*xB=745ps3v*)20%$Yq83sUoqnLUpPQgIH? zo<{|#c!y`tMnNj>;n}lEkcxkJ_G}hp>L5FN9us8hAv=4v2r_k%ojs2WGWC(2Jx>|3 zX}`1Q=@`^JWMKZ$HUXH=kGj{g85`#Ij=T$*!zA>}sH9;!Q;o0-LAQkWM?AacG<|{Lg zb}6*tFP=>ADzxG=o>A{9wBk3OR_`mc;ya#OyA?Y1pPgVID0J#WJIg*)=+uvPs(qx; zsW0t(+oRAqlkQ^;*Su+F-X|KaxRa;fry8#Kljq=G4Obk>6Y(<*S3JtI@pBDNU23P~ zJ`GQOYUky&@6h>#Xbx4SPPLPBx`wA-wKH^v!QpI06P~hY%ATDk3sUo?nVF{uQgI{C z%2NfYc#vo0OhGEns1lbF`}_#JLkdT zd7i5yXmqIq4wnT-!(AJ3jqcK!X^O^rEhFUqjuEW7edYybKXi9p#57ukJcK8GuMeSC z1wzGd2%+|l&a^|)`$mDKtGg;=?>)G4*66HYgWR7-pDP)X6*ru88OnvE{m@Ug>$ zc?cu8CFH>9$@5Y$2LZb^!rD6|#;NMI5bLNL(O5|>VlGKTo3|%$Y8P`k8sIxZxW22Y z($ZdM?`g0jqLap??wyh@l@nu{OX<+`Jq+WGB$cK*8xDN6%uEfM9QQHUUSFz!NqvZV z1u(qs53o`L#Ike{T~v55pt{P*$ZML4(9}Z#MAth_hn}g8{`dLP@?zV`Xm;tlKI|8_h8Wu_f7Jf5gsbK*J8owRD)zq+! zE@uiC5AQ@QHLSp_@p}PWLk%Z;C8Gw!#QPCT4GTEX_>=F9=xA=oCk^3^PU-y;HT(z7 z?vC}VG*yChKzKn4CrXeG2%jZkc_?9YKy+b( zCQ29`5I#GFr4mL5gcnO#9Hg)gh@O+6QVG@p;d4`1D8V`)yd;E+ZB6kaQ{+DYmkChM zC%9W!E=j2?#u)tJmSIK03RMkCS69y$tV+_&Vyh&nYe4(h)d{P%OS{<%1*>He^Q8Jk zl2kP?o7#&LR@1;7uU{%yC5_;F#=x?dNmA2*55m_ZtfB!Qg6cO&On1JC8=m& z53R3C*i-|1Y`s>nNdh4S&<58?GSz?-Kz3ciCK`|e$X+K{nLUgGNM0|=L<6G$vNt5G z)W9f!>`j6dse=_j@@7d&4OjtW*C(vdfE7UYHpjwC$#Sd-SY(s+TO3+s1-V|1qpsmRL5>`**LEZ-~9!ObL4M_Yz zKd8`}9+3HgemJ2O7MCAjA4yqF4_tqMepI2Aws8RhdQ(ED8I@K+U^l0%q6aO5KtHC? zsUEZr0{wVGCwbK@#=t(2vZ)?sH3s@gg--M^%Q4VTC$!A2Mh&#xGbx+sVbnnSS%sE* z7&VZ7KA}a9Wi^m}A!Vf=tOn9ADzwmp)j;~?kj~qjyedFF!{FxRHAzZkAu{m~Hz%(r ztWedUv^m)(ST()S=487hbq#29@eb=5afK3HVc(}`59A~f&2v1L8p#2cbP#2c zIWc4tsf8ewgW{*hkj-@#f(#DO+!%7{$Wq`*pymlm+8kU6)Oy?} zs0D%&X2$>n>P$fiyJKVlb+)14*%k<^_J)kGS|lhrMsu=kv7p2lp+gL;a|9*E2oy%v zxq=d7O#(BwzU!G;w}VDa=Ru5HIJC+TNi_hOE~_njX}jH9D&!xpyCvc!RupC@d`)b zjUnhVogXx6h&l15h)c(e3L+hQxMaYj9&)!vTryr#54qbS zE{Q@?54qbTE{Q@?54k%cPDY_o54k%dPDY_o54pP{E{Q^;AA)zsp!A4Q5W#z5P`HFO zL~uh43ZJlw2;Lim!YQmGg7?Ls@CvJl;DZbnAr-nHv|9?31|JF$J6exm27EX~>^MDw z$?uU6u_N>d=DkNl#E#7&l=3!)h#i$fDBEoc5gTR>p+vViL~MjPgmTT5i!!f;3{CAj2K~H3?yKliWp&Gj3Hp2ju>HL3?E>g zi5OvHj2vK|H%v?M(CpRo1;^Mi`P>Gr&;`vG9b?B7GZ;88ImV7DW-xMIc8ncU#8BwG z;ut%oh@sed)iE}3B8GzJHOJVShAbYcu9~^3gk@oI)>zd#SeIw*2 zc)=52P2+pa@XogPqH=e1%LMM?-j4}uA|^0GK4VCEOVOqYzC7!1_`bYcPtOV>YrHp^HdoNXFjxXc*G@OwTlqYL5X*%V!&) zqu2zm+$wi8SHZ8iwbpgS*XS|vz#mS=MIqme@88JgabhkG`L1$ZsWYzzCYE!O8r3;{ z;3PROsZo<%gG{$1tA>jnpLTKJ=-Q>3b!<3Ab;ym&GwZaqXWI>XTaj6_18mq_*OFPC zlwFxwy{W4uyDk}LRalqaCX?A0U2Ryc^SUW1Dlf>Wp&F9H^rDO!`!nOk8TIyOL{jsT zjLNwtB$HewYGy|;T;>9AuhDtcgl4OBc}5M*gl6M(Wk!wtneeKNdZ7umUX7kte}URI z*M{@Q=)5+gcAf`}Mc0X%*%<+@4S)x()p^weW{-JYMh(ptX2W?yMveV>;Kq!4p$C+N zZ92UvqjH`JjY-yvnzdO;mAA^bhCKeZeMZ_C3K@3S>l-y(#thks@XZqay*m+R_V?6%NW^aFZatEgAB^mXHw8w)q>_ZiDy&LPCf?lISJ_c`4k-N-@s}cHS7y2 zYd7|u#qIHnDr-0Rp2e;4ODbzO`kuvO*Oyh+I?l7Wfqq40?QOT7#beo5Ro2cQ&*Cxd z>nR(&rPs4)->oW}*o^k7+f+8O8EvSyt88L3+Q+`3vWd-TtG7dC6PpdevAwCXiOq&0 z`&P;ZZ!C^&_O{AOo58GxcHdE1X)~C}!0u96X*08JdRJwo&0wxWyYH#2wAm11-&a{_ zGguX&-49YWczbhfvkz5P*bEaPwEL0D3Y%f>19p$f3Y+0AYQTQ1vchJV9)bNtWrfYa zWXOK1vchJ(k@!4hVa0`%i#hjHl@)#k7IW@Ql@)#k z7IW?_l@)#k7IW_GlnvfI9@}h=$|g3WoO`;;CN`s-J6B~Bn^Df4r?QF7DCf>s*~Dg) zbI(xO#AcLp&rI3iE$p$)&Qe)vGm~={s;sn`$+>5%thAZQxrSQ(0j%&biA~R@jVl?h2I^HshSTQe}nB zIOnboS@?-M$dvXBzBd@=+zV3Bp2l||<=hKX(4EV-q)ECLDWuptbJo2iC5LD2bT3s| z;aSK`m~}5xS>ah=G3%~TS>ah=G3#Egvcj{#V%EJvWrb&f#jJa!$_mc{i&^*Tl>J4P z&DN@HVl&FR*Qjh_Gs?Q_R5r00W!-C4HnACH-Ro2~u^DCE>s2g6 z@C6Hlfp5}bX*H8~Z`NUHHj{YQ>#($&$-KAdur!=Wy|?PHw4BMkx9PAnok_lTC~)SH z)tx#lOvmZ>E*%!8aZ{!=imoI7=D2fa&VPA zHDFFQJgAW3+yHX7_>>MOrlWNHv<@exqkQ~~ z4kxCgg#4@yC#Iu}{G1LarlXYnybdR(qn!Mr0%sm_y`;m^bS5Xiti#fDCMUn5!_ssn zC%>x0(sU*#zox^|bS5XiuEWxFCMR!G;LIbh?K&(>$2s{89TukJoV-Jah3Pmazp2B* zbexlS>aZ{!=j69^SeTA;^6u}^51hbjwfHnVul@Yut&dExdod2*J%M+`?6F1elsp$= zqWjnt+Knz3Vq*Km72532g_xT@GleDb^XvSpP}9Co>UNCkVs(Q)r<<~pEW<8mejjds zsNmbTV67H5hSY^B&k7Lwxsli)Kw(3t#Z>3vN^5wV!|Z@-Y^y8Tn>5_kijvx#i0Wt* zaRpuC8h3g`jYuF$OmhRMtsP#|)!11aDThFp=jR0^ydurrrejqzNn?IQxp$gb$Rvw1 z0;n!|<(HZE3j(I2y)0BR*FDb+8EFNcif08(T}z`>o9E!dfGUsn*I8I^zBISkQPq{E zQsZxgQiE&oNbnp1xj45rFmZFP#B9WS3556i6z?}dZ1^i#N?jG+y=8u zVq(L?0k$H*n(+l_a;%#gf3vPHt9^IRj?NY&|7scqfT2Q*{*9c1Y z{N;ku9e;(ObiZFIDBbN>2}+(aHoqiswV)EaQc_tfD0y50{s_0t$beENP3Dm%9V1bXZ%m?$N?= zPXKiumN4Yq4FOZ1zF^Qe_uc@iE48!>6Bys#7eZ2NlNIg{koHm1k|rlS5HPT8CMt1O zcrd`=4vgSO$2gF9fAvtn!P>7ZFC1}?IuL%dvuvZyW=XRkYz!FqwKK7?;!xNWK=9Le z!d4~}HV4cIcwuZ^OVS~^`LTcl?Hd}K>bhD)n&eEsB}PZWMnQH>LGgIN;k1&TGQS=3 zL_j5*7k>BM)5H`Hg&RHK5$>XNr+L5YGa=N_)hTSoUV1j9n#4|m9rOY*C3x>^XQ{bt zquI=5TGe0we%q+#Vg<_J-SdsGf?3=14HdzQHMb_H+XC3TFTk7dhfBe>6t=5D4C7{C zdkR;xA7U6Y!W$`U*M=Cz#IPfU?Gh2e6gY3Duw5x4n0BE%Q`jyT5lr#(Rtnp7BZ4Wr zyq&^!`3PZ?W!_0)yNZOc$u_%E*d^4EHi_q5h1Ps%QqX$}tvHc0(fbOmcoEdb9sh2H zR@}(*;sb?N{KzxpLxoNqiE5)JA1QR|NmLu@Jqn$=64gffV}(wAiE1PLNlI7S#nJha z)JFPKg-(1)Y9qZ@p%Y({+DLz<(1|ZeZKOX}Xz5F%Hq!ePTKdwcjr6pCkjbo4Eq!U! zMtZtJOJ5qbkv>tOg)docq)$?4;Y(H<=@}_qBYeqfBYm<$3tzI@NY7*%HU*U;+&!O@ z;AbUhPJ%xzg@qCrsPKmges&5c@kB5t_&F(@gcHG-;7?Cs8BN4ef}fkhGMEUa1V1l@ zWh@z$(aQ5vScZ~O8R0WhSVR)5jPQaK7JyNjX5TQ0T;$CglLVQlX_UeS$wV0XhG{Y zXt?4|PWLxzxZ+Qo6VUoi8m>5$6aLK_u6Pt@1+>0i!&8^qlz)qcr#_|W46Wa);i*$? z(!Wi^Q?Js5hSqOa@SL=NhlVF!HJJ!nzf;2#ue!v4mxd=^HMs~{zgxqlSAFWgN5iF8 zIf+8+8#G*c)hGXZHC%etsE#pnpN0#s2I>EP4HsTz)v@&l6g+1Ecu>QIS6Ovz{Sn5C zumZpqKX(OqG-Y#EfQQ{j68ZN!c zX%t$2L&K$4{R*%{!=+b^>KHR`YPj%fumbGVaN$)}9b11(!E;uCw>4aNl~u>q-(|cG ze)9@`Q?GfHJ=4!;0)s<<_YyQG|G%HYLJ3MoCjIYD;UusK$L#+>3MXMjFed*GQ&xD0J#do9$0l=+u`qccJZ5QaUHspQ_M_FHO>cwr47I;!Bt5XDM{zOOtY- z?b8%m`qJn5*$ORv$+;5Ro}qxk< z5cHHWf!&*55Ij$iG9J91O9Uxn!T*5ZQbCG12=rXxNVt<7^b|2bY8pLP3R3vrjE8d2 z`GQQ7vNPx^i3%?TnqKHoxN#gbb&m+Ri+n}}2$G8=D*P1ada*$*W#^z6x}`LZXSYoUT_&RCp`Ub*)3;)@aZ*O}kFlYa}YX73jK7qS=$` zT8Rp81-jngP@>)JXcODMAU1#EL`M@wUC zV;kI{8uP&bA0)oHST0pYH5NOyLj%-ea1|{b4|y7Hm+ow@uXA?{1!Kft`nC!uOVdsf5hX>WjaNr&~7vGXiS$H8(TXPtGLa`Mo*&}+DvLoJ%Z)`Nuoz}w!?i~^)2m9_Wm=r zGq?}_=;ooPA~N-0uwQwW(7NUlyo?oHnEm!1yrJtkL4zeS!^s>EJ|EO5A6};B{mtbr zL?{69knqKThs-ge)ZW!0JcBH}5DDOy6jN40ovGk@w zCkqVdVjfxAsnBALA-#?B-wtTZJ9TZ1<#MVwP9U)NI{}Sx?jP>q7{tkgtpocWv1OPM z<(9_Aj`p_3!Kvt;>d>PQI)|ON1A@> zxca7%O^~!k*tOEOX99MwM_74e2fPUywh6YaC@s*cG;IJb(jHW% z3c3$QGF_0#G;wY|QIKMa7>?RJnMqtiTN_*HR$|C|X|O^3V46H7;NfoPTps;&YQT4u zN96M8t(gH|9)rM-BT9QWTw8;mv0~+!>yfN)i9fx@c zn$HPvJ5ubVQQWS8GZECmDyIiktnss|;KBw~<_1-){j;jzIuBLm1yzhmvnp^xnIBZJ zYWXSaBN#`49h?#HRws?eAt1jX;H{-J9`#3lA@Ri~2+`)cVsTV+yS*{q>w+l8=h>cZ z$YU`!7kRd|s|{wef36^I7z1;00B56=NzMt-*1FOtND@j6z)v;d;Lh`KGZ;@-!G!M; zk9L$Ai+E4F+y|l=O#WHwVc1FM;3n9Yc|6AyCeoLCHp>zm;43^?-;`+y4!iR`+y&F7 zsTo|7j?V_&Do;1Jje>`DI>j{sV+jhN)e+lapQ!Xswvl#$2iw|{>&4ByK<+SFbuN)2dCM%^`@ zY-p_S8qqjPBzPK^VXq{%0Tmco*V5@)<%J*T*i{~>Khzz!1lxzJJ?WpE78*dp*-Js=-bQ*A5x&{(xyoRBpr&e;`8Kp@(aSE-yV8Lw4)pAbL3D zp%}8e76(xpd_+K_5{#zDqY|?_8`m1?wNYYr*Y7aWY?H+7cHd$2s)o%Hv-^C9(GVV! znBCwztPTykMPl{@lEdgV<&R6uo;-3Gx#>xdHPqW_W)ZV&JZlh`&{|m0v9BYvpu*sM z-VqQ}HhbA_%;Re>IHYm3JFvBg(PZ0zQn6SWnRyxtb=hv2Qp4f#oWtA;f2htI7J{d~ zS~aQ(XTlCk!8S65cvJl*LygL*F}v36w2Y>c-POEhq58wEAN;~$7nrvRDwfMiZ+3Bc zhnS9*mW1(Z$}Y>K8u_(kH$mmm>Da-H_!gND7;v-OD~y&#cYJ6OJGWy5ow3Iv;8?XQ zjQWo~WK&Yy5_a~9g<$Y%OW56BhHTo3o55c}`OFd-KY zrrHRi%y*iHV27jjNZEUK#HpQ9dvhYr=I*H9U!dtvk2sr0BaTw;+=$b!+SFr%^CEDl z+B0S6`4L#9Uj%5tCeMh->LGURh_s|sz91rpWLyZtHqRom1HweJwK<2h&@*bFn2daO zKxu86V~IrprFqR9LYxy&xnXc_3}&}@UJPpPFel@d#Gn=l<~-ce7*s>S*l)Qb75!=; zSA!o`ct*9cp;iWzVq;9|(AN0@rSynd9jMg-m22Y*VlcbK3u92RakUx7MKP$@m|t~t zaSUoUX8T=AB>e7yn(*+4!C}ak1(0TCTv`EJ6Jm;)adidkiVy<}Duw|N$twk^Scbd4 zN|4GF=iaXtq+&!K^)*DoT2U^ghpTp9a;=39>(nf0cP7_ctQCG=NUmcw*ddPhhLBPW zZMQHtMqFxX94fYVQ^X~9HhUT1ZjQKQkulpD;BK)TSOgd3N<+`FNvqg5^?qwir|YS; z;q4YA8$!b=YTLXcL3JIh-S4tI+C5v+O3( zED2cWoclt|9?!Ves;qAJhgcHSRaUnLLd+h|_|~j$4~AHJmx+srhaxVC#A>VE!x5J_ z0`nVL_>qW9JW*}+doI5oPo)b+S^QASGiu9?9>)cyDbFa z>o*2hT8s8j%^DfjHg4>3;($n|x^X_X^@L-jag7gf>1j+z}my4QGbjqLJ(g<7py){SW1{f)uXM^p&R$DZ z>y!zceMI3;BkGiin`u9yLwop5O_k!XnNF1XWlWVrZ-XsPA`a{d7p*(x1`B5h9ZH`< z6lj*Azd7M@s-|;Oarld&N^1n+DCZCbKOU!0 z2105cQE*)#ZOTL|Lh}iN^X3U;f}X5;CP84Y+Jr)z!XHNKSwxjPn$;1~?g^-cM3E&_ zyV_}cHgRAHtu=yB{l(mxHbLB!JdYrF&tX;aqC?~9B?Od9b#Rj#2aP>lYKFFyfTot_ z&h(9n{K7{fig58KX@Np+IhDhXVWhnP$vtp@pHJnOHe3U7KES1G6+xIaG9YxrY75n8 zK$tTwu#nd`>W)&zg%*O_M6|g?8RH^?Fk`5YNf?({s9J?gzF0#L<_i@v6X|k-AjnjR zjd=w@CR=E2ak9ADcBpG*Vq>j^YP6Oh^l`Uv4MCU$RLH2l&TFN0Xj8zogkcIu+j1G; zdV*kXCybxkHxL6;TQb4SzL|AWV#Q6LTZw5YYv<*0?qg)$W*JzpwNN1|-EJZ6ygasq z;d>`RrOslxF*!m8#N1AHR{$luW^4(D2yNXRVshh*n2F8}A-2DL@x37oMo~sS1)F*AS2 zP)`uX>$Yf(6~oq^B&@|OkOE`P5PRWA5V3UWc_h5tu;@0x!L|Aq0|b7US|XT6UJ8)* z(UQQ~@v0+Qupg^X(9LTB0o@1!dwD$|+D8ijJJ}ilC3iRy+zzlU0E%sK3$$`<4}emq zzl+$kLF>kwgmjdPBjK(*JJbEDi#G|pZIPA~;rj^QB?QhMj;x>q;6t*0V@ta&)}mwF z+DC*H+d55a@F8xEu}>^!TFb&dBMf}dYMR4OYJ1ZTM%}U4G?)pVdN3?}{4(`o$4L7E zO>Z?!#WN$w-Js;S4S#i~Ol#(l(`2yv;{w}a5>F=P|5gD7O? z#*jUQ;UEf{`2kc;UjR=#tuq3q1+JnuLmH5})6w*T04%%9inc?O#LtWv;XYnI&I*{) zVeM@#b_KLeneENO0Bdmf)msK~30UgvfPuXv+!HKR$2V3}`yUgALbrS`+Z_l5`gXK4U+Y7mCsvH*fB@K!Hw24in|K)}s)A{SCH ztOyW%$+BQ57*+-hykl7)6b7pa!Q0kKFe>-1=3qz{1cZN4GXprB3j?4CCsf?MKEZ%4 z3YaeUnra4cmRuYFcpTyGC^QUBl1l;x+!SYCGRma^;osqGnjni@76A3`9mxhDdt5;P zy^y=&^yI+e1b8(epd{RFRVsG0%ZO)e9brHLS2_&-iNlYn>xt?lsxysoLz65HdWZXX>#ks5`)Phv@{8JqXj$Q4(95zvR|M(2{#2;dxLDsjAC=Zv=$F_Nz7_y z2JrO3|+q)oj z@X+H5m{p$>723PnI-6SRl85Q&ws;J`7hQ!G_=yL2bP@lN&ErHSv%TVIxYN2)?84u( zunU+|#?h}k8tw{fuCKr=!CT9jZEqEH`OrpjJ5{i2-zMO;_L97BG}yeqeK4GKsQ5D> z)`P|;?@(zM{GPjrD0Aq)%M_Q=QZ)FxRNCGlcMc{Cyho)C&B@-1=JReUg}EvFrCT9C zu%*c)gKY`){GltCGs~O<-9zQ@`#3gQ+^A_4_{3DF-|Z&h8GdK2`@}j#9+%|6vKW!knrP!4ifKu&rE>>>h#SD8A6}P6=8-~`IVM`O$&FQ?8 zUAa`}ywlp<7Wx%ssxipQL zZVO$x9J@Jvw1~<(6SI@o7jt3SH%+*6Y;n>x&8Ty2andundG&2FQ!j((aOhBx3suD#KY&1xx`kF0}4|#^uC5lyWHO0n$Bd2%c-fko0e11Ty4tRThnrinzdBknU+$}TtlVxX(CMd2oJr}Ez zauXESad~x8Zi3=^F0V<-O`5oY%WGvhJN-se-rg$9+2=P=d8aI8pWi~IUCs6w#*WQ+ z^;Yh?N-0OL-p1wCN;!Jc}-Go{B|Fg*UEDC+k;fzWjB3%2#VX!hqz{yC_{@s z%w^T046XeLm(_?ewDhA~RvVX*l{cEQ_SU$JEWC-zI^zrnMtGWl_F`32vTLF}$uqV*-Br_bQbai`8N!;0rIWx#C1alayZffYi`L_cm6bIx(S% z?(McbF`9kyJU5N`tl554J%rGgy&J3Sy25$X+mDF-lOv7Vila+ zju$jg5ub{9KLDhbfZ&YU9U?+cKyYGxXc3u3%0=KFLx7HG z>rXr&w-x4z+Pw@^rX;PV#`T1c$^74+u+eOq@zUu~;Lgm3jPUrYn{z!VoYs&GLXy5dh3gvk7P~ z)+E!)1k@Z`o=htfO>=Fzm{#}}6li{)D^3-pXqxYVL_vzCGdv({$kBAB1?05i%(Rfo zi^W=LLUS;Bwku9FG?{6U2c(83Go8Z<)Fvi0k$A2xPfTdSaEUD!CgjYt)D=qwISiM1 zKq$yzxZDH6gdBz|Eg((EQMj7Qn~OE+d^DNqf&h?OLZD%0x-dk9o`7Ixy4WIOKH{6G zp!gD3oOVI6bg2iD4k(r`^MEh}$I==Pi22CDbOi&osU=Kix-tL~HBCHR6(Ukm6B27J zA}qm~=^9royWo&m=K;|Hhs3oW5SHMOxXuH@5*!mZ5&*|f>5c{y&rP=2K1u2K>6mtI zw#Dwci7&@!S?|iz`WPy=aCvpoJ4M2+wm7Lxad4Y0PJ5>X>ULM2)TjO89b8@`dp8;5 zPFpN%n|yJXElzqj@o~2+m-S6>+{5LyqIdTF23ss@v*+)%#ciUT{rZ3@cjsT(FMOu< zVJc06pG!AVX`QiL!{PV8gm!rLB@1~Ri@7Xj_% z(`{eCEpapxMXe;u>R>IjK19A8}jUP~Vbh zZ(KUvl}qi7M^AL+QhVdllU%vf-uQHeD;L^xf;-iex57I>;9dgp>&`r>=l&zz#aS_z z=aY?>al^a_N_KC?7xN=1N!ey|b4CQgMI#ZcW`DCFqM9385{#zwnGqJ;T41N1xs-5L zgmor|j5NI$#!$wuMV}o}E%oxUjq&@Uh$<%M%8mEWWlFyhfZyY}l%e_(_z>Rd)-+|z z*uI`g6BD!HY+5GZR(MxwPjBy-7zW2?cI7U%9& zF_n0W_O+`c$i2eI_lMh+3nBjjqFOJY25LyWZ?n%o*=^6^a(hd*8)n}jd++?-%?{a|;kPeHMeu*+_Z zz?SAVsUR=acLZEbC5>H^?eC1JW`B3Pn+bG6fDo)4x@R$A;QYaJp~j`_eL13esWi2PO#l4vCi0Id@y@|gq1qoP3cxQ6Lk+n80391 z!64Kz)*qBu66+@H9*Q`4e`&pYf2r-)#NDF|j(~e^k|Pd$oi=p3F=k}MfwS;nbd#V& zxN*AQEGW5qF-!epf|7d}v(#@9l-S9DT4=Jz1*LD{pAeM3k$+N9`gZ>5fEpp9f?ucf z5+L=J#*V?IN@KFUrR4XDCvbmN={!t^7u|yPYJ#QiAv3&|f{BMH{I`0rp|gF2(lKSz zZ61T0rxc2oyzQQ9?5M!~QZmz<=-&}xorfoTN%LBgHxn!wteGY|Q&0}p%#*i0SZ?f0 z-p6I;$gTiFSCoV+I5)qWU{X8I&F`h4(2jHSZV!?xWXGJEKkyj3LQ=fu?qRAbGvq$; zL|({!nqYFAJoEOZpcp5w;GcUiFXZ-lEGOiq{gatmIL@4qJ2ApCL++#mO9pE~Zbk~q z!J3de#e>-)H#2~8LT*-qN$oh~PD??d9f#Z;59Wp3=^o1ox%o_0XNKGYPvnK%nF%Jx z$su=E3W{-Z$er!MypUVuv7C@w?5VtvJ2%2IL+-o;O9pE~Zb=Ht!J3d;=E3ZcTM2lGPi0*~c{+{H}QWQN?Op2!Qi%MwhElS6Jz3W{-Z$X(&V zypX%nV>uyrm8bGTZf%5RhTJs?mJHT}+`1H$gEb*{od>f+?uG!$3Aq~+Olrp=cT)-q z?KtGtdoVBLZt+-7$lcCVZDz>b>506MyDP!uI636*PC+qF4!I2;%nP}DJ(d%4_jxKW ztRaklPqQIU%y_NNXSR5(-TZ;$02uO3JUEw-)fUBnV7iPQ>eIv%!#v0JT&^yE(x)tFZB>SRxKK0A7AE~j@CMObXs7b z6Ao{U$H2#e;nQGO64MN?Rlw6j?iXk5S#fja=_(IpJpg#MN6_9PQjEFRdL~7TwXg9A zSzEMYjJ?i7N|YE|U+WpPb=(e{`Z~|}C)j!9Z0YMgVk{ju#D>1XQ()*AVLRVUNK+e3 zBsoQf(N%@@4rob?gRepbf8OE|c}a)Wz10!;&VyJH*7dd!5q4o+?D?CV<**A`YzzKPPt> z{gw=VNZ3YTw>Y-SviLz|pLA@sW$}Z`KI7OL%i;%>ecrLPmc!Cf^mWbeV@ zXSTU}k{(thWA{@;t*W4wO%t}3`JG%$eY1Qm@)q}HK4c3&6yS`_2lm-(F8*QKHs_eHg``?}oMq8Y+{ zna`PhT_tL9UsNl*uXR+*tQRG_UdTgNSX*$txZbfDto(QYb}c(RQ4{%4zVnLP}vQR9co$pptAQnc9>=HgUUWkEaxvUg!>fJ zJm(%2bX!+z1%7l|Zp4O}M=~~M(em()?@Zg2$=mp_^Vw_#H)ry8BgH&#bsx**?Y4?} z-bilAt=r; zlh@7uVkWPf{iRG^H~TAs&oTS!9;IndW>4omn|+(0^Uc0Ji_S3n8=1Ur_8pnLZuU1b zdEM+gGkM+YZwo%h?C*M%GANlnO`&Y|_XVAA_T5=@hS@*J?VsJgm)dr8hS{fQ^19hi%;a^mpOne#W}lJC z>t;Vi@Hu9m4U**%t{q-|UOC=nS);lgaC5KR1)t&3;}cubX{ICa;@)nc#EG zzS5(#+a$B6+f6q6DnaL)eRUR{VfG6$dEM+6X7ak(FUsU~vtOLa>t?@H@Hu9`!lQ$6 zlh4Os<};@bdqnDwnXgJ}IR`kC2DLcpT%A`-tH=BKwYl}IOM?FR(UWU(>si+X^>}~3 zF1Ma_QBaTf`Pb&wv#tv2@qYjMq@Hn@W)j}_-z2K=K`^;Z8pNNpSfAALZWFc8W%vh& z!?)zsN_50AnR>V8))W1q%edZcx%GtG&}Cfj_S|~HZRj$tcSmkL;Wi!~+U2gK9=lBp zjYo!6Hux%ZxW=>1e9oM0_a(Kw+wA3nAgXw_-Je%0aU0qK#s)e*kXuiTjcf=5gnAF= z))Q{SdOX`6%B?5dhV^*1J)B!lxDD&^YeSybWKMsAY^@w079Qp>wd)Cy+X z<9W3bxB1!jL~cFNUohLA%&jNf7Rq)m^Ju};0&8;WghShksy_Q=~xDD&^Ye z+!oBXUAgsy+k)BlZf-r{wqUlspVZs$Z2Qnxp_4N_+sx<8*|sOC<=vJ&+dj^#mAH+= z5oX&bx%H&mu%4N1pXSyRZo_Ik+xF(x6K=zLJlj6YttZ@u^?0`JOX}@+ww?G>cLIi7 z#k0+P7H;#iZAMbdyG@uem~AKL)k@svXWJ>c^+bQcY&$i#o^V?*+h*q06K)G;+pOGr z!fnB9o1N6#?`)gvtI&Bfo^9r{a2o~)xDMifep1W3Eqk_|kyk5m8;2wGwjj5jbQ{() zv+c~>dctj3jc40gx%GtGupZC0g}L>F+pr$bwna(3{m!;?MHQZHj}37vu$N=J>j-swyjF)?RU0a=&R7F zSe|X>bLMQjIH~2`mOa}p$*YyPjl&UU+oienq}#BbnQfQl))Q{SYCPN4q)m^Ju}fR2$FuGE+j-swr$U?C)^gywl{L?3AY8a?aid#erMZzKgD03rJwSw zbn@&nx4+ZF0Plyzb{?5>dOm1(SZ)o-<@g}L2VuE26qn;;03U|s)*xJtx7B|XmfL}w za(V<{Pgt%z0Pt~GuH63rX;2P!u&*aFJ8%#FZ7ZTP+4k0s5 z`2pa3e5V6Mc2-@qU5V7`h2$^g~h**<3gdUqXIYg}0974}c zoEjnxBRa)fGY7*{EuhX!NhRhXY?j2NiC|7aYqJBaakTv%YpWN`A7JJh2A`0Ghn_~e zUq0cO!k2d~{2Bb3X=7Uj&NDSsTFT0j0(lp>vqP?<3w|oZNl=%3jD62ZUcO?KH?Xucxne) zBY?k1G)YN=f zr7~dr_(H#LRVp2I<<7?HLyrI12|pQd{D6ZG9&kdT-?#Z|^KHNkH~~iS9oN_)$NvQS zXe<}&IvOjLLwqgxmNW?Z`w7(iyGo^tzt5_Q8ch9JM*Z(qDlP48Bk;cg<0nl#n*OKI z@8AkNI^F;cR~j0NkP!;~e_R1)H`lk73;lj(KZ4PEff-(DZEhRzKdP#S7y9*q4Ecw? zsHq+{6uz1YUx6d=t3&=c`1oN*nLkkeSST4pyT8@U`#a7uD4@HN&b0*9;v#q;}Y_A;anS@BSMN z31h()h72k6o7NA%z`?*bLx&8hf$yf%cQ_jOuD1FYwZ9lTtoj#2rovK0B{&-D$~mQK zcx~;_VYRh`ht&)l{EHz&s)kk#f$^N$58AG@G(xC^=9}ri7FL|)OLSwN=7BG0)6;zo zGi);LT>mYPoh>}i7q9_BL(li6&Irc##Y1#^pGg*THn3(tEBHD#{=%R{bHUj`xzk~P zjyR9>ZgPGI;}86_#1*qYMEO!zu6t#fEB}H{S?MZpC*plrcgZ*M(%9=!T;Syi0`RP($?6ldRo7Un0I$#HbX#_qRYZv<6=)MOX`TM%V z;8*6T52^qK*t*dK?(o4HFiAP>xKtaYCYyK0kB11j-|^5;keZdCCjKGnnL3CoXqjLt zRe8K0DB956)FemugfEDP_e{TX^N31aC;SRtkt&I>d^ReFx?!Ze42A#JNQo*iO#f~D zMi)oI8{fggh5p;EfW~~=3Sj%eg?{f?5!&Uv_n$q1{>Fw?-{5h~#iZc8M-~5oj88?=IAzn1)hw>L= zO#>A#n)0dqMNe<#$f><26qd7m+?1ZaZs_Ca!tK#Ft85T zP%~4HzN<^Wt4un!drINAP(bXMo<7s-dHl`P$xySqa21P_$KY0N+>|lLbxeX!xQi@GF%q_f6@Ucr>9u zCiD-jg~EIlEgmyw3W5Jj;8)uVg>eapnwGl9_Klf%^mwCzX?Ai)q3{sUk3n6pEz&JL z6AfsFHN0FX9F#QM+dUo{?U^v2{^I)IN$F-P`_V0EC$E*^iIZD#lP}^sn0mgbq{GUSM zs{znGv9Egygnakp-tq816DEx_1O0ny?wBJAh2a6+GqJ~ng3+h*$U@IXyFMfRaJxZmXn4K9$xq|v`1uhZB=#Q??D>*``=X+{)hQc zUHDh?p{DQ~^P#pd7Ctm~G*mh;WDCCsiRJ*bTKGr!uYY0qghJsM`1%cy%c|#VQ@s2yC;roz-fkm-y>+_BncHKjH7bngTj9l3hSdrnypbx zsI7-^Mt!zHrE*7erMbFXNi{l{IvWV~MvX!?(&@W|bxt)AX)&vjapND3EfjtkHe&UG z%m?B_ht&9TG%p- zlA7#on$itcg1?`_fBg&V{!l2?f(F|`Y8wU1Y{!(INstCl7%^qi)XBw36OZaS8tK9h z;lKWc?f>QR5gl;Cql5{$zNgRl@&^Qc@4t=ZuuX!>0b<6|GR-)`AtlJF?Nj?EPwhjW zLxWJ)=Dl^(P2P#%=81weA@ZG*3WYg59_rggfU(Q!8D=7HhSp6)!hk3C9aVAMcc7$y zVdu$aI^)uG6!bI}{w)-YQ@?tunaS8j11?#WRx^APICnP{3VWdl({%3%y?s4ne^)uW zyRU*D;HyHxSZUl4@X*%_g%|&#P-yOKt(1Ro1Cg#u2|!_PEIde%9;mJ}Sf5dMM2 z?ty0eknF+Ex0_Lvhhg>&L>u*MbfS6C1KzD@m&JKHP{4}&xTaxaz?V7WzA78!fo1k%yX zxO!Hq3LCvpUD)b{8j4d|>ncYcSNI#~(+E?##{p%-@V>=`!fueTJ1|Qp2K2}=6UU9` zVErL{-@mZ_98YyX?khnz0QIDgF5%FW{?W`q* z!XDPCs~3jZG-m4fz6dlu&RObvte@JOVkX|EE%WWQc29tx213(?ni=l+<(?Y}(;;oo zj9~H#KZ3T_=BOo5TmFIN@$Vq>Prt%n!UvdkPW~FmkW-wD(2;eEMFVQSpSAV#_}fu8OxswWGrv{o4EbMzTssoKP!+i-!2w1d^G_6gTMZTZ>tYi3WCj#aE+x<0{MK-hbZG#W*O%%l<`P$MIfJ!d?3Sm=kg`;Ye3$? z`3+@U&TT$J`5};Ja(+PhWsvP3>i4b{;9r#Y!N1mC$o~l#0QNiseg%8cFTwx)1;}U* zBljzO3uOC;^{a&ZYmj#a`W*rCTOhB1O8uez@gOhe{EGd}0NLhSl+OSe{sw##{^v_j zW08^ROYHArAzu&jRh)0I{-Yq<{DktWAlrO|@@|lA{z3Uq`%}}d{qG9-ry$#Wi~O%Z zejMyO0BYcP${^c(h2{STWSgH*o&d6qHslpd4lB7U=$kmqGq6$nX!zu(rBC?C3!Te5sJ17xGtep!|pR|5eBng}hS88-@HQU$L#3_#H0f-wF9#AwMGI&xKs`Cvp4Z zguGbD_knEpJLC_Le;>@>ogmK)(9k2;?~+uMOly zAlpCe{{bO?EaX9O&~E>buYhd#i`f6~K>jW7A5oqT^5j6C3$ooGV)=5A?H{(cS;+mq zYD>*{hX}b_$a6rR`2#R97##Ea0#km_E@%e(TMRND9}Hx9nW%q_kT-z*P2Nvp{ii^- z`%jeL0om@yQ2rcbyZ=J@FJQs8`z@5e3$oo`q5MxE+x-;ELqHz-=VtvzxgF$R2lBsx zJm4>U`7t2d{TA}af^7F!D9;4h?x#>*3i3<5ze4#Mkaq_1!ytF?{s_xo0om@iQ2qpD zyT3yDum8&Lr%)aUvfV$S{7aDM^L_~BGRU_F@>r1VehSO~17y2@Livv%f0y?=D9;9Y zXds^l@?n9z24uUxLLS%qK8Odi-kSCPsp`T(UxTAnEME`2{loZs24sj8$^uyaz9`=# zWQ-?!Jc<0@{k3h)#Owa#e*u0@u%8(TvOPY+_C|wjk7rOm3gq8FJa)jiaDDCt*&fee z`5!>O0QL(wZLxfR{r~@6eiGGDe*k@K{vIdF z_a{#i{Bj{*3i584kLX79&ut+0hxvxvNR+pL{AG}B`CCE#ul0X--^qXD$BXhJA+Hqj zWkSA1$oC3)laQYk@*6_lBji5~4)9RFuM7F_h5Sx8^P$Qwc473lw>DX0AK_5S?|Z1t1UN@<%{^8szg? zehTFOgyU;mPqF^nAkPZqufWNiMIhVpeG_CjhveiRg1j7L+kXwnD+9R^ByklzA%4%fdCS;f@nR#E{{ZA)fNcF$ z3-Z-){A0)SYmjdN`Jb6T0_3*>`F9|HAFgNoBbWaHfxH~# z{|e+wK|Vc@uLpT)Am0h{8|420c{0oY4D!n$!?v01^}j)W3*>Puj{^BOaJ)a5Mv7l8aR$XmJm0+8Q@>m@5#z8QHqzPI{p1o;k-t^HmAc~c90UO9AxXS?}L0Y$hN4<;zezXQ4N7lng% z!Fg7cr-D50Utxa1c@mWW8|2$t3J3ib`bT*N$OGC62aSYgP@V!g+GDoCNmE%48TrNE({zu2yP4=PxrsUonr&X6$TAD z;)wE;u}2&+_L!RLqpAiUU+L)^G#0cyb<2H=PLEm zojDadXkR}q0DZdqKqb0`r*qP<>VlL>W93F4`#s&%GbmPoZe8--TCrykeS-UO>Vj-a?X;)rp0dyP@Rm6;-2f+5CtuYu3Yb?{JJcr#qjAamo} zWFWy7<@qIl9(uL>0cppcNAJcoxfpij7_~N}BJ-KJnfpo%r&me!(EPuv3 zbEBJWgYV-zc3nX)-|x#`K%%2Ngbyfv^i&^E*gE`+o2ciwaWX&V&Th|t@jfQ>^d8VK zn1>ZS>t5^wGUDXprW{BRIQ)wbaLU*N8lS;?24&pr?h53M?WQ2UiM_6&7~G8ux6a46 z=N^!urt}@yFf9JX4b?mOfHI50VM_x~Dd1xO=2QB-g8$wP;CXfJu#Nho+PmZZT_s_OmaYWnA&^ff!M*}U)&DI9bo2Bc`)VF z$w$C_^Z2jdTK5*<9T>$!3-n97g+YC=L{S(tP98HEH)-AUuNfeJ=e~lisd$_%`NllV z)-wn>c)ZR$Pv=BP{1B;F29M^2W&ETbm+`|>M$(>xG9|pr#^!qX`6e#l=k|GbletXoTb3V}>l#qm6V>6n=rvIu082^ReT5j{NzAp0QIV;Rm$)&%rHI zP8bAxet28NpyH(Q_%z-?_`^3|;9mi@_jp7g>h{vpg+HIrJppv1C=fR238rVHx$ihIMRW~8!Mpz6?^Hy9R4R!#lS!B?VEaJZ}vc{)Dcz>gGb;hmGSVb zX2pybMx0@a+N^@%Sp{`j1@&14O&JAMy857Uqvo4&J(Iv5aH3*DujZR^J;(O+_DnLz zJi>3zjDvoD)Z{2!j+#7X+&I%*QZixc_>2hli*3-v6CjBkbF529$`+t{C)Qn zcpw*6)%vMD%L6+a2iE;dOLcWu zOKnwGOLf)2!~UhEs%l^vzA3{uW%#DKv9S^Ucl5xna$|Ya(1Cv}cOF_iw84nOKpfdJ zu)W+-S8N}juUuuU}lng92{$}_4mn&Zp{9e}m@GIb(^Zg-`(=je&>h?ecgeLr=gDDmbA265cjzDW~~bhVG` z8P|6VsOm=vhOCT&d_QSQZ>06i%28Iy_1ROZ5v}TzDh)%1M?xZ^-TF{f35v`qOdb@jP zRw65}lQ`3%^G|X5&)ilBab-UM7bHH&9QXhn_y8O@a^%1TiQjwWvR!4n*IrxNmF-B0 zU9Vm_RqxgBxn7n1O3bW@t1#9qYqf?M9$42l*5()^C&Mgpn zN^hn5?_9xAXj(1n==4MRK3DJXH?(O=GeSG-Jq^>I93LW{A*{#TnJUcT4CTtYMC;cl76ak@V?F1&mvj2D(sMYNVd%=1CEj8cqdlN7oZQvY`{DF(3ab{d zBdM?>4R&$ahc_#G3Crs9UrjJ}P*Vt=0D@v&!YNpX7Vg^G%bz?M9)ADSpA8S@!1ydO z1LjlJ`7e(Q)5FtUoILXq(UqI%x=nc1CUO2pTg*wANb$(}GzyW`NfbH1K*#9pf~5M6 zG!tkH6kbBYYK`(vFw!y0GlF_Vg@pr8&b&B7l|n%w1TDmP5_&^lWcu}qS*Z%U6PDE! zUI1JR%W8>poNWg#23W$0mX}bwlNco`JbE#rCb>$l{K`#Yh)EgYDIgSLn>3fK|^YvDjG_-RqdmL2-p z#Te){Tsb%=6s+Lk!^gJk=(OjP89`Zvs}|)z1cX38$LI@j3H)FIL7;#j0t|(XoUA7p zl(~5D0_*PvJ#T@}ui%)7Gw-*zm@OA`^sz@KvP?=&5Kh2sZ*6x>AyaeD{ON!^EwkI% z{+W5cSWF+8xXDi^^Gox$yQ7`XcJmYCa5Y0Xp-Z#TpqYo^8YdVnuI$wtYyD>F9LPxx z(1-SP`Wp9=3*sTy4c(AvSmI9(K?!(0UzUJQPRfpsX~ zzNP>0Ze4KOK?L6-uP;UO3LbJ4`1 z*;s7#lQb}LmWYP}Y{xNB_s|>9&GlPrHeQf~qEa*)M*y?GlF~aqJ37;7`hw12a3xN34Gb1PV@X}?A(ns_}deG$d)_U^nq~F}y-fH5Blk3UQ>7)Gg3aV&4 zu@ECsOjB{@-5r(y&3V;Z0E~T^NASxzHENjPbsm8a0Z(Tegs7JEc$>Vv7>I}QR=BC0p;^dd$7M)wc1t2?+ zdIZlRt46VcVj+|ec0B?kmT*kZs8{L^%?(b4+QG0acjlZ*E&#WFS4+ARQx$9MD%h1W z3!&F1F@AY6qB`jHnwtu{`*s(A9ap?O396)i@u zKW|HKLRID#thPEGmYp(SS#9`N>K?0AiMt~!95uidfGe`majwt5E3XTRR~}XH(@Tog z13$Mq4fyv4veJ*Db}K+2)?Lajici8~B|V5)6Ff-Ml@$z~3`GGq~g zy8{AO<>(i-{*Htse7zr6A5p8*Sb{yfQ!Y!8Pu+!@0Z#{a*Z^?U1|Y!zKsMRXPX)BW z0Ed*T9{NSIQ^DWaFV*^AUWFHle_sp927p;=3lMJsSU8zXfGDBd{zbgU>X`tq-Dzxq zy+10I4alwXB8@PGT8yIh&CADsI1kq1ftn#3_;u8FO@HlSK&q4 z0bdKrW`J30D-dr5SU8!CfGD911}Ls^^$Y;FIt~8qu3akp=Tvu*@RvGBMn7@X;ExAC z$tDx_xqx>2=ZNDKL_dW`PBj&Xw`EK9P(WUV7m9zWg*yxYvD6kI!2)oQZxO=6fA0Uz z=YhQq24DpIr2yU!pn4WSG&{`zU~hL&s+oYi3NO+E_*zJ|0L)TbfOreQ!pSrU5G51` zfcE65o&n%ir@_D7>68lpIn`Yx{G|?((N7#T_~XG(vdM&fE}%I8v|Ud1z|XBt1^(S} zsl5N3>Mj!eQU}T4CypBY@!%)fWCA}I(7}&QrYZ=2YIQ2`+s$%;KcBh_1;3|*JHQW) z8vF_1hitNep9*N;r~Tim2YzmK8t`}b#-$qe=Tvu*;Fmf`20wAs;ExAC$tDx{xqt?K z+FG%C;OADS0l(etli%t9uMVjLy==uA$W#Kgsr{GM#&)GB{AO$zSQ1Nmc@Kj~GiY zueOqkmGq?Ina8J$)4n8%QINrVF~2x&8mF(YIq@M*wm6cqWe)}`=US%5D|_b11nrS1 z&#_CSPsfgYl037AVXo!XV2%s8#uj$tTiXL1*DF5G7i*LsioFCuzVI?oy?glXifZ1+ z;r=f^G>p&JhVgB~_>2f?KXe`XeoGX%PuIMUYsnAopGltw_!8eYC}9{T{h#;$ObGMQ z{}Uhb%_aEGf5I&MBkT49r09C`LwtYxrc4ESKL#nxxBJR4{`H+G-f_o>GBc7Mb89|_g_ zNIq;?Y6PVX<85!l`1^Ze4^vcu_cQ$-cy96abir5ne7Ir!5Pb3@ulE@U=o9|uufN|g p-t|-BdX)SlzOoFZ--6Fv(V6(jygwls{@;K8XT$ijWWrJM{U5Dd((?cS diff --git a/Example/EpaperModuleTest_CH32F103/Src/board.c b/Example/EpaperModuleTest_CH32F103/Src/board.c deleted file mode 100644 index c4a7bfc..0000000 --- a/Example/EpaperModuleTest_CH32F103/Src/board.c +++ /dev/null @@ -1,52 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "board.h" - -void board_button_init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure = {0}; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); -} - -uint8_t board_button_getstate(void) -{ - return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0); -} - -void board_led_init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure = {0}; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); -} - -void board_led_toggle(void) -{ - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_2) == Bit_SET ? GPIO_ResetBits(GPIOB, GPIO_Pin_2) : GPIO_SetBits(GPIOB, GPIO_Pin_2); -} - -void board_led_set(uint8_t set) -{ - if (set) - GPIO_SetBits(GPIOB, GPIO_Pin_2); - else - GPIO_ResetBits(GPIOB, GPIO_Pin_2); -} diff --git a/Example/EpaperModuleTest_CH32F103/Src/ch32f10x_it.c b/Example/EpaperModuleTest_CH32F103/Src/ch32f10x_it.c deleted file mode 100644 index a3c1755..0000000 --- a/Example/EpaperModuleTest_CH32F103/Src/ch32f10x_it.c +++ /dev/null @@ -1,128 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32f10x_it.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : Main Interrupt Service Routines. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32f10x_it.h" - -/********************************************************************* - * @fn NMI_Handler - * - * @brief This function handles NMI exception. - * - * @return none - */ -void NMI_Handler( void ) -{ -} - -/********************************************************************* - * @fn HardFault_Handler - * - * @brief This function handles Hard Fault exception. - * - * @return none - */ -void HardFault_Handler( void ) -{ - while( 1 ) - { - } -} - -/********************************************************************* - * @fn MemManage_Handler - * - * @brief This function handles Memory Manage exception. - * - * @return none - */ -void MemManage_Handler( void ) -{ - while( 1 ) - { - } -} - -/********************************************************************* - * @fn BusFault_Handler - * - * @brief This function handles Bus Fault exception. - * - * @return none - */ -void BusFault_Handler( void ) -{ - while( 1 ) - { - } -} - -/********************************************************************* - * @fn UsageFault_Handler - * - * @brief This function handles Usage Fault exception. - * - * @return none - */ -void UsageFault_Handler( void ) -{ - while( 1 ) - { - } -} - -/********************************************************************* - * @fn SVC_Handler - * - * @brief This function handles SVCall exception. - * - * @return none - */ -void SVC_Handler( void ) -{ -} - -/********************************************************************* - * @fn DebugMon_Handler - * - * @brief This function handles Debug Monitor exception. - * - * @return none - */ -void DebugMon_Handler( void ) -{ -} - -/********************************************************************* - * @fn PendSV_Handler - * - * @brief This function handles PendSVC exception. - * - * @return none - */ -void PendSV_Handler( void ) -{ -} - -#include "systick.h" -/********************************************************************* - * @fn SysTick_Handler - * - * @brief This function handles SysTick Handler. - * - * @return none - */ -void SysTick_Handler( void ) -{ - delay_decrement(); -} - - - - - diff --git a/Example/EpaperModuleTest_CH32F103/Src/main.c b/Example/EpaperModuleTest_CH32F103/Src/main.c deleted file mode 100644 index 09c9fdf..0000000 --- a/Example/EpaperModuleTest_CH32F103/Src/main.c +++ /dev/null @@ -1,229 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "debug.h" -#include "board.h" -#include "systick.h" - -#include "epaper.h" -#include "bmp.h" - -// define for White Black Red Epaper Module -//#define EPD_BWR - -uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; -#ifdef EPD_BWR -uint8_t image_red[EPD_W_BUFF_SIZE * EPD_H]; -#endif - -/********************************************************************* - * @fn main - * - * @brief Main program. - * - * @return none - */ -int main(void) -{ - uint8_t text[20]; - - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); - - SystemCoreClockUpdate(); - - systick_config(); - - USART_Printf_Init(115200); - - board_button_init(); - board_led_init(); - - printf("\r\nWeAct Studio Core Board\r\n"); - printf("weactstudio.taobao.com\r\n"); - printf("weactstudio.aliexpress.com\r\n"); - printf("wwww.weact-tc.cn\r\n\r\n"); - printf("SystemClk:%d\r\n", SystemCoreClock); - printf("Epaper Module Test\r\n"); - - epd_io_init(); - - epd_init(); - -#ifdef EPD_BWR - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - #else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #endif - - epd_display(image_bw, image_red); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(8000); - - epd_init(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); - -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"CH32F103C8T6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_RED); -#else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_RED, 1); -#endif - - epd_display(image_bw, image_red); - -#else - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); -#else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - - #ifdef EPD_154 - epd_paint_clear(EPD_COLOR_WHITE); - epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); - #else - epd_paint_clear(EPD_COLOR_WHITE); - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); -#endif - #endif - - epd_displayBW(image_bw); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(5000); - - epd_init_partial(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_154 - epd_paint_showString(10, 0, (uint8_t *)&"1.54 Inch", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 23, (uint8_t *)&"Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 48, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showString(10, 60, (uint8_t *)&"with 200 x 200 resolution", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showPicture((EPD_H - 200) / 2,130,200,64,gImage_5,EPD_COLOR_WHITE); -#endif -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"CH32F103C8T6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); -#else - epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); -#endif - - sprintf((char *)&text, ">> Partial Mode"); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(1000); - - for (uint32_t i = 123; i < 8 * 123; i += 123) - { - sprintf((char *)&text, ">> Num=%d ", i); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(100); - } - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_displayBW_partial(image_bw); - - delay(1000); - - epd_update(); -#endif - - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - uint32_t tick, toggle_tick; - tick = 0; - toggle_tick = 250; - while (1) - { - tick++; - if (tick % toggle_tick == 0) - { - board_led_toggle(); - } - if (board_button_getstate()) - { - while (board_button_getstate()) - { - Delay_Ms(50); - } - if (toggle_tick == 250) - { - toggle_tick = 100; - } - else - { - toggle_tick = 250; - } - } - delay(1); - } -} diff --git a/Example/EpaperModuleTest_CH32F103/Src/system_ch32f10x.c b/Example/EpaperModuleTest_CH32F103/Src/system_ch32f10x.c deleted file mode 100644 index 217f244..0000000 --- a/Example/EpaperModuleTest_CH32F103/Src/system_ch32f10x.c +++ /dev/null @@ -1,571 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : system_ch32f10x.c - * Author : WCH - * Version : V1.0.0 - * Date : 2019/10/15 - * Description : CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *********************************************************************************/ -#include "ch32f10x.h" - -/* -* Uncomment the line corresponding to the desired System clock (SYSCLK) frequency (after -* reset the HSI is used as SYSCLK source). -* If none of the define below is enabled, the HSI is used as System clock source. -*/ -/* #define SYSCLK_FREQ_HSE HSE_VALUE */ -/* #define SYSCLK_FREQ_24MHz 24000000 */ -/* #define SYSCLK_FREQ_48MHz 48000000 */ -/* #define SYSCLK_FREQ_56MHz 56000000 */ -#define SYSCLK_FREQ_72MHz 72000000 - - -/* Uncomment the following line if you need to relocate your vector Table in Internal SRAM */ -/* #define VECT_TAB_SRAM */ - -/* Vector Table base offset field This value must be a multiple of 0x200 */ -#define VECT_TAB_OFFSET 0x0 - - -/* Clock Definitions */ -#ifdef SYSCLK_FREQ_HSE -uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /* System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_24MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /* System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_48MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /* System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_56MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /* System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_72MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /* System Clock Frequency (Core Clock) */ -#else /* HSI Selected as System Clock source */ -uint32_t SystemCoreClock = HSI_VALUE; /* System Clock Frequency (Core Clock) */ -#endif - -__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - - -/* ch32f10x_system_private_function_proto_types */ -static void SetSysClock( void ); - -#ifdef SYSCLK_FREQ_HSE -static void SetSysClockToHSE( void ); -#elif defined SYSCLK_FREQ_24MHz -static void SetSysClockTo24( void ); -#elif defined SYSCLK_FREQ_48MHz -static void SetSysClockTo48( void ); -#elif defined SYSCLK_FREQ_56MHz -static void SetSysClockTo56( void ); -#elif defined SYSCLK_FREQ_72MHz -static void SetSysClockTo72( void ); -#endif - -#ifdef DATA_IN_ExtSRAM -static void SystemInit_ExtMemCtl( void ); -#endif /* DATA_IN_ExtSRAM */ - - -/********************************************************************* - * @fn SystemInit - * - * @brief Setup the microcontroller system Initialize the Embedded Flash Interface, - * the PLL and update the SystemCoreClock variable. - * - * @return none - */ -void SystemInit( void ) -{ - RCC->CTLR |= ( uint32_t )0x00000001; - RCC->CFGR0 &= ( uint32_t )0xF8FF0000; - RCC->CTLR &= ( uint32_t )0xFEF6FFFF; - RCC->CTLR &= ( uint32_t )0xFFFBFFFF; - RCC->CFGR0 &= ( uint32_t )0xFF80FFFF; - RCC->INTR = 0x009F0000; - SetSysClock(); - -#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 -} - - -/********************************************************************* - * @fn SystemCoreClockUpdate - * - * @brief Update SystemCoreClock variable according to Clock Register Values. - * - * @return none - */ -void SystemCoreClockUpdate( void ) -{ - uint32_t tmp = 0, pllmull = 0, pllsource = 0; - - tmp = RCC->CFGR0 & RCC_SWS; - - switch( tmp ) - { - case 0x00: - SystemCoreClock = HSI_VALUE; - break; - case 0x04: - SystemCoreClock = HSE_VALUE; - break; - case 0x08: - pllmull = RCC->CFGR0 & RCC_PLLMULL; - pllsource = RCC->CFGR0 & RCC_PLLSRC; - pllmull = ( pllmull >> 18 ) + 2; - if( pllsource == 0x00 ) - { - SystemCoreClock = ( HSI_VALUE >> 1 ) * pllmull; - } - else - { - if( ( RCC->CFGR0 & RCC_PLLXTPRE ) != ( uint32_t )RESET ) - { - SystemCoreClock = ( HSE_VALUE >> 1 ) * pllmull; - } - else - { - SystemCoreClock = HSE_VALUE * pllmull; - } - } - break; - default: - SystemCoreClock = HSI_VALUE; - break; - } - - tmp = AHBPrescTable[( ( RCC->CFGR0 & RCC_HPRE ) >> 4 )]; - SystemCoreClock >>= tmp; -} - - -/********************************************************************* - * @fn SetSysClock - * - * @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClock( void ) -{ -#ifdef SYSCLK_FREQ_HSE - SetSysClockToHSE(); -#elif defined SYSCLK_FREQ_24MHz - SetSysClockTo24(); -#elif defined SYSCLK_FREQ_48MHz - SetSysClockTo48(); -#elif defined SYSCLK_FREQ_56MHz - SetSysClockTo56(); -#elif defined SYSCLK_FREQ_72MHz - SetSysClockTo72(); -#endif - - /* If none of the define above is enabled, the HSI is used as System clock - * source (default after reset) - */ -} - - -#ifdef DATA_IN_ExtSRAM - -/********************************************************************* - * @fn SystemInit_ExtMemCtl - * - * @brief Setup the external memory controller. - * - * @return none - */ -void SystemInit_ExtMemCtl( void ) -{ - RCC->AHBENR = 0x00000114; - RCC->APB2ENR = 0x000001E0; - - GPIOD->CRL = 0x44BB44BB; - GPIOD->CRH = 0xBBBBBBBB; - - GPIOE->CRL = 0xB44444BB; - GPIOE->CRH = 0xBBBBBBBB; - - GPIOF->CRL = 0x44BBBBBB; - GPIOF->CRH = 0xBBBB4444; - - GPIOG->CRL = 0x44BBBBBB; - GPIOG->CRH = 0x44444B44; - - FSMC_Bank1->BTCR[4] = 0x00001011; - FSMC_Bank1->BTCR[5] = 0x00000200; -} -#endif /* DATA_IN_ExtSRAM */ - - -#ifdef SYSCLK_FREQ_HSE - -/********************************************************************* - * @fn SetSysClockToHSE - * - * @brief Sets HSE as System clock source and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockToHSE( void ) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - - RCC->CTLR |= ( ( uint32_t )RCC_HSEON ); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } - while( ( HSEStatus == 0 ) && ( StartUpCounter != HSE_STARTUP_TIMEOUT ) ); - - if( ( RCC->CTLR & RCC_HSERDY ) != RESET ) - { - HSEStatus = ( uint32_t )0x01; - } - else - { - HSEStatus = ( uint32_t )0x00; - } - - if( HSEStatus == ( uint32_t )0x01 ) - { - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - /* Flash 0 wait state */ - FLASH->ACTLR &= ( uint32_t )( ( uint32_t )~FLASH_ACTLR_LATENCY ); - FLASH->ACTLR |= ( uint32_t )FLASH_ACTLR_LATENCY_0; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE1_DIV1; - - /* Select HSE as system clock source */ - RCC->CFGR0 &= ( uint32_t )( ( uint32_t )~( RCC_SW ) ); - RCC->CFGR0 |= ( uint32_t )RCC_SW_HSE; - - /* Wait till HSE is used as system clock source */ - while( ( RCC->CFGR0 & ( uint32_t )RCC_SWS ) != ( uint32_t )0x04 ) - { - } - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - } -} - -#elif defined SYSCLK_FREQ_24MHz - -/********************************************************************* - * @fn SetSysClockTo24 - * - * @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockTo24( void ) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - RCC->CTLR |= ( ( uint32_t )RCC_HSEON ); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } - while( ( HSEStatus == 0 ) && ( StartUpCounter != HSE_STARTUP_TIMEOUT ) ); - - if( ( RCC->CTLR & RCC_HSERDY ) != RESET ) - { - HSEStatus = ( uint32_t )0x01; - } - else - { - HSEStatus = ( uint32_t )0x00; - } - if( HSEStatus == ( uint32_t )0x01 ) - { - /* Enable Prefetch Buffer */ - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - - /* Flash 0 wait state */ - FLASH->ACTLR &= ( uint32_t )( ( uint32_t )~FLASH_ACTLR_LATENCY ); - FLASH->ACTLR |= ( uint32_t )FLASH_ACTLR_LATENCY_0; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE1_DIV1; - - RCC->CFGR0 &= ( uint32_t )( ( uint32_t )~( RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL ) ); - RCC->CFGR0 |= ( uint32_t )( RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE | RCC_PLLMULL3 ); - /* Enable PLL */ - RCC->CTLR |= RCC_PLLON; - - /* Wait till PLL is ready */ - while( ( RCC->CTLR & RCC_PLLRDY ) == 0 ) - { - } - /* Select PLL as system clock source */ - RCC->CFGR0 &= ( uint32_t )( ( uint32_t )~( RCC_SW ) ); - RCC->CFGR0 |= ( uint32_t )RCC_SW_PLL; - /* Wait till PLL is used as system clock source */ - while( ( RCC->CFGR0 & ( uint32_t )RCC_SWS ) != ( uint32_t )0x08 ) - { - } - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - } -} - - -#elif defined SYSCLK_FREQ_48MHz - -/********************************************************************* - * @fn SetSysClockTo48 - * - * @brief Sets System clock frequency to 48MHz and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockTo48( void ) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - - RCC->CTLR |= ( ( uint32_t )RCC_HSEON ); - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } - while( ( HSEStatus == 0 ) && ( StartUpCounter != HSE_STARTUP_TIMEOUT ) ); - - if( ( RCC->CTLR & RCC_HSERDY ) != RESET ) - { - HSEStatus = ( uint32_t )0x01; - } - else - { - HSEStatus = ( uint32_t )0x00; - } - - if( HSEStatus == ( uint32_t )0x01 ) - { - /* Enable Prefetch Buffer */ - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACTLR &= ( uint32_t )( ( uint32_t )~FLASH_ACTLR_LATENCY ); - FLASH->ACTLR |= ( uint32_t )FLASH_ACTLR_LATENCY_1; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE1_DIV2; - - /* PLL configuration: PLLCLK = HSE * 6 = 48 MHz */ - RCC->CFGR0 &= ( uint32_t )( ( uint32_t )~( RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL ) ); - RCC->CFGR0 |= ( uint32_t )( RCC_PLLSRC_HSE | RCC_PLLMULL6 ); - - /* Enable PLL */ - RCC->CTLR |= RCC_PLLON; - /* Wait till PLL is ready */ - while( ( RCC->CTLR & RCC_PLLRDY ) == 0 ) - { - } - /* Select PLL as system clock source */ - RCC->CFGR0 &= ( uint32_t )( ( uint32_t )~( RCC_SW ) ); - RCC->CFGR0 |= ( uint32_t )RCC_SW_PLL; - /* Wait till PLL is used as system clock source */ - while( ( RCC->CFGR0 & ( uint32_t )RCC_SWS ) != ( uint32_t )0x08 ) - { - } - } - else - { - /* - * If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - } -} - -#elif defined SYSCLK_FREQ_56MHz - -/********************************************************************* - * @fn SetSysClockTo56 - * - * @brief Sets System clock frequency to 56MHz and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockTo56( void ) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - RCC->CTLR |= ( ( uint32_t )RCC_HSEON ); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } - while( ( HSEStatus == 0 ) && ( StartUpCounter != HSE_STARTUP_TIMEOUT ) ); - - if( ( RCC->CTLR & RCC_HSERDY ) != RESET ) - { - HSEStatus = ( uint32_t )0x01; - } - else - { - HSEStatus = ( uint32_t )0x00; - } - - if( HSEStatus == ( uint32_t )0x01 ) - { - /* Enable Prefetch Buffer */ - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - - /* Flash 2 wait state */ - FLASH->ACTLR &= ( uint32_t )( ( uint32_t )~FLASH_ACTLR_LATENCY ); - FLASH->ACTLR |= ( uint32_t )FLASH_ACTLR_LATENCY_2; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE1_DIV2; - - /* PLL configuration: PLLCLK = HSE * 7 = 56 MHz */ - RCC->CFGR0 &= ( uint32_t )( ( uint32_t )~( RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL ) ); - RCC->CFGR0 |= ( uint32_t )( RCC_PLLSRC_HSE | RCC_PLLMULL7 ); - /* Enable PLL */ - RCC->CTLR |= RCC_PLLON; - /* Wait till PLL is ready */ - while( ( RCC->CTLR & RCC_PLLRDY ) == 0 ) - { - } - - /* Select PLL as system clock source */ - RCC->CFGR0 &= ( uint32_t )( ( uint32_t )~( RCC_SW ) ); - RCC->CFGR0 |= ( uint32_t )RCC_SW_PLL; - /* Wait till PLL is used as system clock source */ - while( ( RCC->CFGR0 & ( uint32_t )RCC_SWS ) != ( uint32_t )0x08 ) - { - } - } - else - { - /* - * If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - } -} - -#elif defined SYSCLK_FREQ_72MHz - -/********************************************************************* - * @fn SetSysClockTo72 - * - * @brief Sets System clock frequency to 72MHz and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockTo72( void ) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - RCC->CTLR |= ( ( uint32_t )RCC_HSEON ); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } - while( ( HSEStatus == 0 ) && ( StartUpCounter != HSE_STARTUP_TIMEOUT ) ); - - if( ( RCC->CTLR & RCC_HSERDY ) != RESET ) - { - HSEStatus = ( uint32_t )0x01; - } - else - { - HSEStatus = ( uint32_t )0x00; - } - - if( HSEStatus == ( uint32_t )0x01 ) - { - /* Enable Prefetch Buffer */ - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - - /* Flash 2 wait state */ - FLASH->ACTLR &= ( uint32_t )( ( uint32_t )~FLASH_ACTLR_LATENCY ); - FLASH->ACTLR |= ( uint32_t )FLASH_ACTLR_LATENCY_2; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= ( uint32_t )RCC_PPRE1_DIV2; - - /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ - RCC->CFGR0 &= ( uint32_t )( ( uint32_t )~( RCC_PLLSRC | RCC_PLLXTPRE | - RCC_PLLMULL ) ); - RCC->CFGR0 |= ( uint32_t )( RCC_PLLSRC_HSE | RCC_PLLMULL9 ); - /* Enable PLL */ - RCC->CTLR |= RCC_PLLON; - /* Wait till PLL is ready */ - while( ( RCC->CTLR & RCC_PLLRDY ) == 0 ) - { - } - /* Select PLL as system clock source */ - RCC->CFGR0 &= ( uint32_t )( ( uint32_t )~( RCC_SW ) ); - RCC->CFGR0 |= ( uint32_t )RCC_SW_PLL; - /* Wait till PLL is used as system clock source */ - while( ( RCC->CFGR0 & ( uint32_t )RCC_SWS ) != ( uint32_t )0x08 ) - { - } - } - else - { - /* - * If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - while(1); - } -} -#endif - - - - diff --git a/Example/EpaperModuleTest_CH32F103/Src/systick.c b/Example/EpaperModuleTest_CH32F103/Src/systick.c deleted file mode 100644 index de8e1d6..0000000 --- a/Example/EpaperModuleTest_CH32F103/Src/systick.c +++ /dev/null @@ -1,121 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "systick.h" -#include "ch32f10x.h" -#include "ch32f10x_pwr.h" - -volatile uint32_t _tick = 0; - -/*! - \brief configure systick - \param[in] none - \param[out] none - \retval none -*/ -void systick_config(void) -{ - /* setup systick timer for (SysTick_Freq) Hz interrupts */ - if (SysTick_Config(SystemCoreClock / SysTick_Freq)) - { - /* capture error */ - while (1) - { - } - } - /* configure the systick handler priority */ - NVIC_SetPriority(SysTick_IRQn, 0x05U); -} - -/*! - \brief delay a time in milliseconds - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay(uint32_t count) -{ - uint32_t utick; - utick = count + systick_get_tick(); - - while (systick_get_tick() < utick) - { - } -} - -/*! - \brief delay a time in milliseconds with low power - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay_lp(uint32_t count) -{ - uint32_t utick; - utick = count + systick_get_tick(); - - while (systick_get_tick() < utick) - { - PWR_EnterSTANDBYMode(); - } -} - -/*! - \brief delay decrement - \param[in] none - \param[out] none - \retval none -*/ -void delay_decrement(void) -{ - _tick++; -} - -/*! - \brief get systick tick - \param[in] none - \param[out] none - \retval none -*/ - -uint32_t systick_get_tick(void) -{ - return _tick; -} - -void systick_DisableIRQ(void) -{ - /* Disable SysTick Interrupt */ - SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; -} - -void systick_EnableIRQ(void) -{ - /* Enable SysTick Interrupt */ - SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; -} - -void systick_Disable(void) -{ - /* Disable SysTick */ - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; -} - -void systick_Enable(void) -{ - /* Enable SysTick */ - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; -} - -void systick_deinit(void) -{ - SysTick->CTRL = 0; - SysTick->LOAD = 0; - SysTick->VAL = 0; -} diff --git a/Example/EpaperModuleTest_CH32V103/.template b/Example/EpaperModuleTest_CH32V103/.template deleted file mode 100644 index ddfadb9..0000000 --- a/Example/EpaperModuleTest_CH32V103/.template +++ /dev/null @@ -1,14 +0,0 @@ -Toolchain= -Series= -Description= -Address=0x08000000 -Target Path=obj\EpaperModuleTest_CH32V103.hex -Erase All=true -Program=true -Verify=true -Reset=true - -Vendor=WCH -MCU=CH32V103C8T6 -Mcu Type=CH32V10x -Link=WCH-Link diff --git a/Example/EpaperModuleTest_CH32V103/Core/core_riscv.c b/Example/EpaperModuleTest_CH32V103/Core/core_riscv.c deleted file mode 100644 index 95801a2..0000000 --- a/Example/EpaperModuleTest_CH32V103/Core/core_riscv.c +++ /dev/null @@ -1,552 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : core_riscv.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : RISC-V Core Peripheral Access Layer Source File - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include - -/* define compiler specific symbols */ -#if defined(__CC_ARM) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - -#elif defined(__ICCARM__) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ - -#elif defined(__GNUC__) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - -#elif defined(__TASKING__) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - -#endif - -/********************************************************************* - * @fn __get_FFLAGS - * - * @brief Return the Floating-Point Accrued Exceptions - * - * @return fflags value - */ -uint32_t __get_FFLAGS(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""fflags": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_FFLAGS - * - * @brief Set the Floating-Point Accrued Exceptions - * - * @param value - set FFLAGS value - * - * @return none - */ -void __set_FFLAGS(uint32_t value) -{ - __ASM volatile("csrw fflags, %0":: "r"(value)); -} - -/********************************************************************* - * @fn __get_FRM - * - * @brief Return the Floating-Point Dynamic Rounding Mode - * - * @return frm value - */ -uint32_t __get_FRM(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""frm": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_FRM - * - * @brief Set the Floating-Point Dynamic Rounding Mode - * - * @param value - set frm value - * - * @return none - */ -void __set_FRM(uint32_t value) -{ - __ASM volatile("csrw frm, %0" :: "r"(value)); -} - -/********************************************************************* - * @fn __get_FCSR - * - * @brief Return the Floating-Point Control and Status Register - * - * @return fcsr value - */ -uint32_t __get_FCSR(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "fcsr" : "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_FCSR - * - * @brief Set the Floating-Point Dynamic Rounding Mode - * - * @param value - set fcsr value - * - * @return none - */ -void __set_FCSR(uint32_t value) -{ - __ASM volatile("csrw fcsr, %0" : : "r"(value)); -} - -/********************************************************************* - * @fn __get_MSTATUS - * - * @brief Return the Machine Status Register - * - * @return mstatus value - */ -uint32_t __get_MSTATUS(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "mstatus": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MSTATUS - * - * @brief Set the Machine Status Register - * - * @param value - set mstatus value - * - * @return none - */ -void __set_MSTATUS(uint32_t value) -{ - __ASM volatile("csrw mstatus, %0" : : "r"(value)); -} - -/********************************************************************* - * @fn __get_MISA - * - * @brief Return the Machine ISA Register - * - * @return misa value - */ -uint32_t __get_MISA(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""misa" : "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MISA - * - * @brief Set the Machine ISA Register - * - * @param value - set misa value - * - * @return none - */ -void __set_MISA(uint32_t value) -{ - __ASM volatile("csrw misa, %0" : : "r"(value)); -} - -/********************************************************************* - * @fn __get_MIE - * - * @brief Return the Machine Interrupt Enable Register - * - * @return mie value - */ -uint32_t __get_MIE(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "mie": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MISA - * - * @brief Set the Machine ISA Register - * - * @param value - set mie value - * - * @return none - */ -void __set_MIE(uint32_t value) -{ - __ASM volatile("csrw mie, %0": : "r"(value)); -} - -/********************************************************************* - * @fn __get_MTVEC - * - * @brief Return the Machine Trap-Vector Base-Address Register - * - * @return mtvec value - */ -uint32_t __get_MTVEC(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "mtvec": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MTVEC - * - * @brief Set the Machine Trap-Vector Base-Address Register - * - * @param value - set mtvec value - * - * @return none - */ -void __set_MTVEC(uint32_t value) -{ - __ASM volatile("csrw mtvec, %0":: "r"(value)); -} - -/********************************************************************* - * @fn __get_MTVEC - * - * @brief Return the Machine Seratch Register - * - * @return mscratch value - */ -uint32_t __get_MSCRATCH(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "mscratch" : "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MTVEC - * - * @brief Set the Machine Seratch Register - * - * @param value - set mscratch value - * - * @return none - */ -void __set_MSCRATCH(uint32_t value) -{ - __ASM volatile("csrw mscratch, %0" : : "r"(value)); -} - -/********************************************************************* - * @fn __get_MEPC - * - * @brief Return the Machine Exception Program Register - * - * @return mepc value - */ -uint32_t __get_MEPC(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "mepc" : "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MEPC - * - * @brief Set the Machine Exception Program Register - * - * @return mepc value - */ -void __set_MEPC(uint32_t value) -{ - __ASM volatile("csrw mepc, %0" : : "r"(value)); -} - -/********************************************************************* - * @fn __get_MCAUSE - * - * @brief Return the Machine Cause Register - * - * @return mcause value - */ -uint32_t __get_MCAUSE(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "mcause": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MEPC - * - * @brief Set the Machine Cause Register - * - * @return mcause value - */ -void __set_MCAUSE(uint32_t value) -{ - __ASM volatile("csrw mcause, %0":: "r"(value)); -} - -/********************************************************************* - * @fn __get_MTVAL - * - * @brief Return the Machine Trap Value Register - * - * @return mtval value - */ -uint32_t __get_MTVAL(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "mtval" : "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MTVAL - * - * @brief Set the Machine Trap Value Register - * - * @return mtval value - */ -void __set_MTVAL(uint32_t value) -{ - __ASM volatile("csrw mtval, %0":: "r"(value)); -} - -/********************************************************************* - * @fn __get_MIP - * - * @brief Return the Machine Interrupt Pending Register - * - * @return mip value - */ -uint32_t __get_MIP(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "mip": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MIP - * - * @brief Set the Machine Interrupt Pending Register - * - * @return mip value - */ -void __set_MIP(uint32_t value) -{ - __ASM volatile("csrw mip, %0":: "r"(value)); -} - -/********************************************************************* - * @fn __get_MCYCLE - * - * @brief Return Lower 32 bits of Cycle counter - * - * @return mcycle value - */ -uint32_t __get_MCYCLE(void) -{ - uint32_t result; - - __ASM volatile("csrr %0," "mcycle": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MCYCLE - * - * @brief Set Lower 32 bits of Cycle counter - * - * @return mcycle value - */ -void __set_MCYCLE(uint32_t value) -{ - __ASM volatile("csrw mcycle, %0" : : "r"(value)); -} - -/********************************************************************* - * @fn __get_MCYCLEH - * - * @brief Return Upper 32 bits of Cycle counter - * - * @return mcycleh value - */ -uint32_t __get_MCYCLEH(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""mcycleh" : "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MCYCLEH - * - * @brief Set Upper 32 bits of Cycle counter - * - * @return mcycleh value - */ -void __set_MCYCLEH(uint32_t value) -{ - __ASM volatile("csrw mcycleh, %0":: "r"(value)); -} - -/********************************************************************* - * @fn __get_MINSTRET - * - * @brief Return Lower 32 bits of Instructions-retired counter - * - * @return mcause value - */ -uint32_t __get_MINSTRET(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""minstret": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MINSTRET - * - * @brief Set Lower 32 bits of Instructions-retired counter - * - * @return minstret value - */ -void __set_MINSTRET(uint32_t value) -{ - __ASM volatile("csrw minstret, %0":: "r"(value)); -} - -/********************************************************************* - * @fn __get_MINSTRETH - * - * @brief Return Upper 32 bits of Instructions-retired counter - * - * @return minstreth value - */ -uint32_t __get_MINSTRETH(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""minstreth": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __set_MINSTRETH - * - * @brief Set Upper 32 bits of Instructions-retired counter - * - * @return minstreth value - */ -void __set_MINSTRETH(uint32_t value) -{ - __ASM volatile("csrw minstreth, %0":: "r"(value)); -} - -/********************************************************************* - * @fn __get_MVENDORID - * - * @brief Return Vendor ID Register - * - * @return mvendorid value - */ -uint32_t __get_MVENDORID(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""mvendorid": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __get_MARCHID - * - * @brief Return Machine Architecture ID Register - * - * @return marchid value - */ -uint32_t __get_MARCHID(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""marchid": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __get_MIMPID - * - * @brief Return Machine Implementation ID Register - * - * @return mimpid value - */ -uint32_t __get_MIMPID(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""mimpid": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __get_MHARTID - * - * @brief Return Hart ID Register - * - * @return mhartid value - */ -uint32_t __get_MHARTID(void) -{ - uint32_t result; - - __ASM volatile("csrr %0,""mhartid": "=r"(result)); - return (result); -} - -/********************************************************************* - * @fn __get_SP - * - * @brief Return SP Register - * - * @return SP value - */ -uint32_t __get_SP(void) -{ - uint32_t result; - - asm volatile("mv %0,""sp": "=r"(result):); - return (result); -} diff --git a/Example/EpaperModuleTest_CH32V103/Core/core_riscv.h b/Example/EpaperModuleTest_CH32V103/Core/core_riscv.h deleted file mode 100644 index b4483f7..0000000 --- a/Example/EpaperModuleTest_CH32V103/Core/core_riscv.h +++ /dev/null @@ -1,397 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : core_riscv.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : RISC-V Core Peripheral Access Layer Header File - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CORE_RISCV_H__ -#define __CORE_RISCV_H__ - -/* IO definitions */ -#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 */ - -/* Standard Peripheral Library old types (maintained for legacy purpose) */ -typedef __I uint32_t vuc32; /* Read Only */ -typedef __I uint16_t vuc16; /* Read Only */ -typedef __I uint8_t vuc8; /* Read Only */ - -typedef const uint32_t uc32; /* Read Only */ -typedef const uint16_t uc16; /* Read Only */ -typedef const uint8_t uc8; /* Read Only */ - -typedef __I int32_t vsc32; /* Read Only */ -typedef __I int16_t vsc16; /* Read Only */ -typedef __I int8_t vsc8; /* Read Only */ - -typedef const int32_t sc32; /* Read Only */ -typedef const int16_t sc16; /* Read Only */ -typedef const int8_t sc8; /* Read Only */ - -typedef __IO uint32_t vu32; -typedef __IO uint16_t vu16; -typedef __IO uint8_t vu8; - -typedef uint32_t u32; -typedef uint16_t u16; -typedef uint8_t u8; - -typedef __IO int32_t vs32; -typedef __IO int16_t vs16; -typedef __IO int8_t vs8; - -typedef int32_t s32; -typedef int16_t s16; -typedef int8_t s8; - -typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; - -typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; - -typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; - -#define RV_STATIC_INLINE static inline - -/* memory mapped structure for Program Fast Interrupt Controller (PFIC) */ -typedef struct{ - __I uint32_t ISR[8]; - __I uint32_t IPR[8]; - __IO uint32_t ITHRESDR; - __IO uint32_t FIBADDRR; - __IO uint32_t CFGR; - __I uint32_t GISR; - uint8_t RESERVED0[0x10]; - __IO uint32_t FIOFADDRR[4]; - uint8_t RESERVED1[0x90]; - __O uint32_t IENR[8]; - uint8_t RESERVED2[0x60]; - __O uint32_t IRER[8]; - uint8_t RESERVED3[0x60]; - __O uint32_t IPSR[8]; - uint8_t RESERVED4[0x60]; - __O uint32_t IPRR[8]; - uint8_t RESERVED5[0x60]; - __IO uint32_t IACTR[8]; - uint8_t RESERVED6[0xE0]; - __IO uint8_t IPRIOR[256]; - uint8_t RESERVED7[0x810]; - __IO uint32_t SCTLR; -}PFIC_Type; - -/* memory mapped structure for SysTick */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint8_t CNTL0; - __IO uint8_t CNTL1; - __IO uint8_t CNTL2; - __IO uint8_t CNTL3; - __IO uint8_t CNTH0; - __IO uint8_t CNTH1; - __IO uint8_t CNTH2; - __IO uint8_t CNTH3; - __IO uint8_t CMPLR0; - __IO uint8_t CMPLR1; - __IO uint8_t CMPLR2; - __IO uint8_t CMPLR3; - __IO uint8_t CMPHR0; - __IO uint8_t CMPHR1; - __IO uint8_t CMPHR2; - __IO uint8_t CMPHR3; -}SysTick_Type; - - -#define PFIC ((PFIC_Type *) 0xE000E000 ) -#define NVIC PFIC -#define NVIC_KEY1 ((uint32_t)0xFA050000) -#define NVIC_KEY2 ((uint32_t)0xBCAF0000) -#define NVIC_KEY3 ((uint32_t)0xBEEF0000) - -#define SysTick ((SysTick_Type *) 0xE000F000) - - -/********************************************************************* - * @fn __NOP - * - * @brief nop - * - * @return none - */ -RV_STATIC_INLINE void __NOP() -{ - __asm volatile ("nop"); -} - -/********************************************************************* - * @fn NVIC_EnableIRQ - * - * @brief Enable Interrupt - * - * @param IRQn: Interrupt Numbers - * - * @return none - */ -RV_STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn){ - NVIC->IENR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); -} - -/********************************************************************* - * @fn NVIC_DisableIRQ - * - * @brief Disable Interrupt - * - * @param IRQn: Interrupt Numbers - * - * @return none - */ -RV_STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) -{ - uint32_t t; - - t = NVIC->ITHRESDR; - NVIC->ITHRESDR = 0x10; - NVIC->IRER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); - NVIC->ITHRESDR = t; -} - -/********************************************************************* - * @fn NVIC_GetStatusIRQ - * - * @brief Get Interrupt Enable State - * - * @param IRQn: Interrupt Numbers - * - * @return 1 - Interrupt Enable - * 0 - Interrupt Disable - */ -RV_STATIC_INLINE uint32_t NVIC_GetStatusIRQ(IRQn_Type IRQn) -{ - return((uint32_t) ((NVIC->ISR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); -} - -/********************************************************************* - * @fn NVIC_GetPendingIRQ - * - * @brief Get Interrupt Pending State - * - * @param IRQn: Interrupt Numbers - * - * @return 1 - Interrupt Pending Enable - * 0 - Interrupt Pending Disable - */ -RV_STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - return((uint32_t) ((NVIC->IPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); -} - -/********************************************************************* - * @fn NVIC_SetPendingIRQ - * - * @brief Set Interrupt Pending - * - * @param IRQn: Interrupt Numbers - * - * @return None - */ -RV_STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - NVIC->IPSR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); -} - -/********************************************************************* - * @fn NVIC_ClearPendingIRQ - * - * @brief Clear Interrupt Pending - * - * @param IRQn: Interrupt Numbers - * - * @return None - */ -RV_STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - NVIC->IPRR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); -} - -/********************************************************************* - * @fn NVIC_GetActive - * - * @brief Get Interrupt Active State - * - * @param IRQn: Interrupt Numbers - * - * @return 1 - Interrupt Active - * 0 - Interrupt No Active - */ -RV_STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) -{ - return((uint32_t)((NVIC->IACTR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); -} - -/********************************************************************* - * @fn NVIC_SetPriority - * - * @brief Set Interrupt Priority - * - * @param IRQn - Interrupt Numbers - * priority - - * bit7 - pre-emption priority - * bit6~bit4 - subpriority - * @return None - */ -RV_STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint8_t priority) -{ - NVIC->IPRIOR[(uint32_t)(IRQn)] = priority; -} - -/********************************************************************* - * @fn __WFI - * - * @brief Wait for Interrupt - * - * @return None - */ -__attribute__( ( always_inline ) ) RV_STATIC_INLINE void __WFI(void) -{ - NVIC->SCTLR &= ~(1<<3); // wfi - asm volatile ("wfi"); -} - -/********************************************************************* - * @fn __WFE - * - * @brief Wait for Events - * - * @return None - */ -__attribute__( ( always_inline ) ) RV_STATIC_INLINE void __WFE(void) -{ - NVIC->SCTLR |= (1<<3)|(1<<5); // (wfi->wfe)+(__sev) - asm volatile ("wfi"); - NVIC->SCTLR |= (1<<3); - asm volatile ("wfi"); -} - -/********************************************************************* - * @fn NVIC_SetFastIRQ - * - * @brief Set VTF Interrupt - * - * @param add - VTF interrupt service function base address. - * IRQn -Interrupt Numbers - * num - VTF Interrupt Numbers - * @return None - */ -RV_STATIC_INLINE void NVIC_SetFastIRQ(uint32_t addr, IRQn_Type IRQn, uint8_t num) -{ - if(num > 3) return ; - NVIC->FIBADDRR = addr; - NVIC->FIOFADDRR[num] = ((uint32_t)IRQn<<24)|(addr&0xfffff); -} - -/********************************************************************* - * @fn NVIC_SystemReset - * - * @brief Initiate a system reset request - * - * @return None - */ -RV_STATIC_INLINE void NVIC_SystemReset(void) -{ - NVIC->CFGR = NVIC_KEY3|(1<<7); -} - -/********************************************************************* - * @fn NVIC_HaltPushCfg - * - * @brief Enable Hardware Stack - * - * @param NewState - DISABLE or ENABLE - - * @return None - */ -RV_STATIC_INLINE void NVIC_HaltPushCfg(FunctionalState NewState) -{ - if (NewState != DISABLE) - { - NVIC->CFGR = NVIC_KEY1; - } - else{ - NVIC->CFGR = NVIC_KEY1|(1<<0); - } -} - -/********************************************************************* - * @fn NVIC_INTNestCfg - * - * @brief Enable Interrupt Nesting - * - * @param NewState - DISABLE or ENABLE - - * @return None - */ -RV_STATIC_INLINE void NVIC_INTNestCfg(FunctionalState NewState) -{ - if (NewState != DISABLE) - { - NVIC->CFGR = NVIC_KEY1; - } - else - { - NVIC->CFGR = NVIC_KEY1|(1<<1); - } -} - -/* Core_Exported_Functions */ -extern uint32_t __get_FFLAGS(void); -extern void __set_FFLAGS(uint32_t value); -extern uint32_t __get_FRM(void); -extern void __set_FRM(uint32_t value); -extern uint32_t __get_FCSR(void); -extern void __set_FCSR(uint32_t value); -extern uint32_t __get_MSTATUS(void); -extern void __set_MSTATUS(uint32_t value); -extern uint32_t __get_MISA(void); -extern void __set_MISA(uint32_t value); -extern uint32_t __get_MIE(void); -extern void __set_MIE(uint32_t value); -extern uint32_t __get_MTVEC(void); -extern void __set_MTVEC(uint32_t value); -extern uint32_t __get_MSCRATCH(void); -extern void __set_MSCRATCH(uint32_t value); -extern uint32_t __get_MEPC(void); -extern void __set_MEPC(uint32_t value); -extern uint32_t __get_MCAUSE(void); -extern void __set_MCAUSE(uint32_t value); -extern uint32_t __get_MTVAL(void); -extern void __set_MTVAL(uint32_t value); -extern uint32_t __get_MIP(void); -extern void __set_MIP(uint32_t value); -extern uint32_t __get_MCYCLE(void); -extern void __set_MCYCLE(uint32_t value); -extern uint32_t __get_MCYCLEH(void); -extern void __set_MCYCLEH(uint32_t value); -extern uint32_t __get_MINSTRET(void); -extern void __set_MINSTRET(uint32_t value); -extern uint32_t __get_MINSTRETH(void); -extern void __set_MINSTRETH(uint32_t value); -extern uint32_t __get_MVENDORID(void); -extern uint32_t __get_MARCHID(void); -extern uint32_t __get_MIMPID(void); -extern uint32_t __get_MHARTID(void); -extern uint32_t __get_SP(void); - - -#endif/* __CORE_RISCV_H__ */ - - - - - diff --git a/Example/EpaperModuleTest_CH32V103/Debug/debug.c b/Example/EpaperModuleTest_CH32V103/Debug/debug.c deleted file mode 100644 index 1a3c797..0000000 --- a/Example/EpaperModuleTest_CH32V103/Debug/debug.c +++ /dev/null @@ -1,196 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : debug.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for UART - * Printf , Delay functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "debug.h" - -static uint8_t p_us = 0; -static uint16_t p_ms = 0; - -/********************************************************************* - * @fn Delay_Init - * - * @brief Initializes Delay Funcation. - * - * @return none - */ -void Delay_Init(void) -{ - p_us = SystemCoreClock / 8000000; - p_ms = (uint16_t)p_us * 1000; -} - -/********************************************************************* - * @fn Delay_Us - * - * @brief Microsecond Delay Time. - * - * @param n - Microsecond number. - * - * @return None - */ -void Delay_Us(uint32_t n) -{ - uint32_t i; - - SysTick->CTLR = 0; - i = (uint32_t)n * p_us; - - SysTick->CNTL0 = 0; - SysTick->CNTL1 = 0; - SysTick->CNTL2 = 0; - SysTick->CNTL3 = 0; - SysTick->CTLR = 1; - - while((*(__IO uint32_t *)0xE000F004) <= i) - ; -} - -/********************************************************************* - * @fn Delay_Ms - * - * @brief Millisecond Delay Time. - * - * @param n - Millisecond number. - * - * @return None - */ -void Delay_Ms(uint32_t n) -{ - uint32_t i; - - SysTick->CTLR = 0; - i = (uint32_t)n * p_ms; - - SysTick->CNTL0 = 0; - SysTick->CNTL1 = 0; - SysTick->CNTL2 = 0; - SysTick->CNTL3 = 0; - SysTick->CTLR = 1; - - while((*(__IO uint32_t *)0xE000F004) <= i) ; -} - -/********************************************************************* - * @fn USART_Printf_Init - * - * @brief Initializes the USARTx peripheral. - * - * @param baudrate - USART communication baud rate. - * - * @return None - */ -void USART_Printf_Init(uint32_t baudrate) -{ - GPIO_InitTypeDef GPIO_InitStructure; - USART_InitTypeDef USART_InitStructure; - -#if(DEBUG == DEBUG_UART1) - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(GPIOA, &GPIO_InitStructure); - -#elif(DEBUG == DEBUG_UART2) - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(GPIOA, &GPIO_InitStructure); - -#elif(DEBUG == DEBUG_UART3) - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(GPIOB, &GPIO_InitStructure); - -#endif - - USART_InitStructure.USART_BaudRate = baudrate; - USART_InitStructure.USART_WordLength = USART_WordLength_8b; - USART_InitStructure.USART_StopBits = USART_StopBits_1; - USART_InitStructure.USART_Parity = USART_Parity_No; - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; - USART_InitStructure.USART_Mode = USART_Mode_Tx; - -#if(DEBUG == DEBUG_UART1) - USART_Init(USART1, &USART_InitStructure); - USART_Cmd(USART1, ENABLE); - -#elif(DEBUG == DEBUG_UART2) - USART_Init(USART2, &USART_InitStructure); - USART_Cmd(USART2, ENABLE); - -#elif(DEBUG == DEBUG_UART3) - USART_Init(USART3, &USART_InitStructure); - USART_Cmd(USART3, ENABLE); - -#endif -} - -/********************************************************************* - * @fn _write - * - * @brief Support Printf Function - * - * @param *buf - UART send Data. - * size - Data length. - * - * @return size - Data length - */ -__attribute__((used)) -int _write(int fd, char *buf, int size) -{ - int i; - - for(i = 0; i < size; i++){ -#if(DEBUG == DEBUG_UART1) - while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); - USART_SendData(USART1, *buf++); -#elif(DEBUG == DEBUG_UART2) - while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); - USART_SendData(USART2, *buf++); -#elif(DEBUG == DEBUG_UART3) - while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET); - USART_SendData(USART3, *buf++); -#endif - } - - return size; -} - -/********************************************************************* - * @fn _sbrk - * - * @brief Change the spatial position of data segment. - * - * @return size: Data length - */ -void *_sbrk(ptrdiff_t incr) -{ - extern char _end[]; - extern char _heap_end[]; - static char *curbrk = _end; - - if ((curbrk + incr < _end) || (curbrk + incr > _heap_end)) - return NULL - 1; - - curbrk += incr; - return curbrk - incr; -} - - - diff --git a/Example/EpaperModuleTest_CH32V103/Debug/debug.h b/Example/EpaperModuleTest_CH32V103/Debug/debug.h deleted file mode 100644 index 0b1118b..0000000 --- a/Example/EpaperModuleTest_CH32V103/Debug/debug.h +++ /dev/null @@ -1,32 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : debug.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for UART - * Printf , Delay functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __DEBUG_H -#define __DEBUG_H - -#include "stdio.h" -#include "ch32v10x.h" - -/* UART Printf Definition */ -#define DEBUG_UART1 1 -#define DEBUG_UART2 2 -#define DEBUG_UART3 3 - -/* DEBUG UATR Definition */ -#define DEBUG DEBUG_UART1 -//#define DEBUG DEBUG_UART2 -//#define DEBUG DEBUG_UART3 - -void Delay_Init(void); -void Delay_Us(uint32_t n); -void Delay_Ms(uint32_t n); -void USART_Printf_Init(uint32_t baudrate); - -#endif /* __DEBUG_H */ diff --git a/Example/EpaperModuleTest_CH32V103/EpaperModuleTest_CH32V103.wvproj b/Example/EpaperModuleTest_CH32V103/EpaperModuleTest_CH32V103.wvproj deleted file mode 100644 index 57bed95..0000000 --- a/Example/EpaperModuleTest_CH32V103/EpaperModuleTest_CH32V103.wvproj +++ /dev/null @@ -1,2 +0,0 @@ -p2FLASH AT>FLASH .vector : { *(.vector); . = ALIGN(64); } >FLASH AT>FLASH .text : { . = ALIGN(4); *(.text) *(.text.*) *(.rodata) *(.rodata*) *(.glue_7) *(.glue_7t) *(.gnu.linkonce.t.*) . = ALIGN(4); } >FLASH AT>FLASH .fini : { KEEP(*(SORT_NONE(.fini))) . = ALIGN(4); } >FLASH AT>FLASH PROVIDE( _etext = . ); PROVIDE( _eitcm = . ); .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH AT>FLASH .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH AT>FLASH .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } >FLASH AT>FLASH .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } >FLASH AT>FLASH .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } >FLASH AT>FLASH .dalign : { . = ALIGN(4); PROVIDE(_data_vma = .); } >RAM AT>FLASH .dlalign : { . = ALIGN(4); PROVIDE(_data_lma = .); } >FLASH AT>FLASH .data : { *(.gnu.linkonce.r.*) *(.data .data.*) *(.gnu.linkonce.d.*) . = ALIGN(8); PROVIDE( __global_pointer$ = . + 0x800 ); *(.sdata .sdata.*) *(.sdata2.*) *(.gnu.linkonce.s.*) . = ALIGN(8); *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) . = ALIGN(4); PROVIDE( _edata = .); } >RAM AT>FLASH .bss : { . = ALIGN(4); PROVIDE( _sbss = .); *(.sbss*) *(.gnu.linkonce.sb.*) *(.bss*) *(.gnu.linkonce.b.*) *(COMMON*) . = ALIGN(4); PROVIDE( _ebss = .); } >RAM AT>FLASH PROVIDE( _end = _ebss); PROVIDE( end = . ); .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size : { PROVIDE( _heap_end = . ); . = ALIGN(4); PROVIDE(_susrstack = . ); . = . + __stack_size; PROVIDE( _eusrstack = .); } >RAM } \ No newline at end of file diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x.h deleted file mode 100644 index 0764ea2..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x.h +++ /dev/null @@ -1,3215 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : CH32V10x Device Peripheral Access Layer Header File. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_H -#define __CH32V10x_H - -#ifdef __cplusplus -extern "C" { -#endif - -#define __MPU_PRESENT 0 /* Other CH32 devices does not provide an MPU */ -#define __Vendor_SysTickConfig 0 /* Set to 1 if different SysTick Config is used */ - -#define HSE_VALUE ((uint32_t)8000000) /* Value of the External oscillator in Hz */ - -/* In the following line adjust the External High Speed oscillator (HSE) Startup Timeout value */ -#define HSE_STARTUP_TIMEOUT ((uint16_t)0x500) /* Time out for HSE start up */ - -#define HSI_VALUE ((uint32_t)8000000) /* Value of the Internal oscillator in Hz */ - -/* Interrupt Number Definition, according to the selected device */ -typedef enum IRQn -{ - /****** RISC-V Processor Exceptions Numbers *******************************************************/ - NonMaskableInt_IRQn = 2, /* 2 Non Maskable Interrupt */ - EXC_IRQn = 3, /* 4 Exception Interrupt */ - SysTicK_IRQn = 12, /* 12 System timer Interrupt */ - Software_IRQn = 14, /* 14 software Interrupt */ - - /****** RISC-V specific Interrupt Numbers *********************************************************/ - WWDG_IRQn = 16, /* Window WatchDog Interrupt */ - PVD_IRQn = 17, /* PVD through EXTI Line detection Interrupt */ - TAMPER_IRQn = 18, /* Tamper Interrupt */ - RTC_IRQn = 19, /* RTC global Interrupt */ - FLASH_IRQn = 20, /* FLASH global Interrupt */ - RCC_IRQn = 21, /* RCC global Interrupt */ - EXTI0_IRQn = 22, /* EXTI Line0 Interrupt */ - EXTI1_IRQn = 23, /* EXTI Line1 Interrupt */ - EXTI2_IRQn = 24, /* EXTI Line2 Interrupt */ - EXTI3_IRQn = 25, /* EXTI Line3 Interrupt */ - EXTI4_IRQn = 26, /* EXTI Line4 Interrupt */ - DMA1_Channel1_IRQn = 27, /* DMA1 Channel 1 global Interrupt */ - DMA1_Channel2_IRQn = 28, /* DMA1 Channel 2 global Interrupt */ - DMA1_Channel3_IRQn = 29, /* DMA1 Channel 3 global Interrupt */ - DMA1_Channel4_IRQn = 30, /* DMA1 Channel 4 global Interrupt */ - DMA1_Channel5_IRQn = 31, /* DMA1 Channel 5 global Interrupt */ - DMA1_Channel6_IRQn = 32, /* DMA1 Channel 6 global Interrupt */ - DMA1_Channel7_IRQn = 33, /* DMA1 Channel 7 global Interrupt */ - ADC_IRQn = 34, /* ADC1 global Interrupt */ - EXTI9_5_IRQn = 39, /* External Line[9:5] Interrupts */ - TIM1_BRK_IRQn = 40, /* TIM1 Break Interrupt */ - TIM1_UP_IRQn = 41, /* TIM1 Update Interrupt */ - TIM1_TRG_COM_IRQn = 42, /* TIM1 Trigger and Commutation Interrupt */ - TIM1_CC_IRQn = 43, /* TIM1 Capture Compare Interrupt */ - TIM2_IRQn = 44, /* TIM2 global Interrupt */ - TIM3_IRQn = 45, /* TIM3 global Interrupt */ - TIM4_IRQn = 46, /* TIM4 global Interrupt */ - I2C1_EV_IRQn = 47, /* I2C1 Event Interrupt */ - I2C1_ER_IRQn = 48, /* I2C1 Error Interrupt */ - I2C2_EV_IRQn = 49, /* I2C2 Event Interrupt */ - I2C2_ER_IRQn = 50, /* I2C2 Error Interrupt */ - SPI1_IRQn = 51, /* SPI1 global Interrupt */ - SPI2_IRQn = 52, /* SPI2 global Interrupt */ - USART1_IRQn = 53, /* USART1 global Interrupt */ - USART2_IRQn = 54, /* USART2 global Interrupt */ - USART3_IRQn = 55, /* USART3 global Interrupt */ - EXTI15_10_IRQn = 56, /* External Line[15:10] Interrupts */ - RTCAlarm_IRQn = 57, /* RTC Alarm through EXTI Line Interrupt */ - USBWakeUp_IRQn = 58, /* USB WakeUp from suspend through EXTI Line Interrupt */ - USBHD_IRQn = 59, /* USBHD Interrupt */ - -} IRQn_Type; - -#define HardFault_IRQn EXC_IRQn -#define ADC1_2_IRQn ADC_IRQn - -#include -#include "core_riscv.h" -#include "system_ch32v10x.h" - -/* Standard Peripheral Library old definitions (maintained for legacy purpose) */ -#define HSI_Value HSI_VALUE -#define HSE_Value HSE_VALUE -#define HSEStartUp_TimeOut HSE_STARTUP_TIMEOUT - -/* Analog to Digital Converter */ -typedef struct -{ - __IO uint32_t STATR; - __IO uint32_t CTLR1; - __IO uint32_t CTLR2; - __IO uint32_t SAMPTR1; - __IO uint32_t SAMPTR2; - __IO uint32_t IOFR1; - __IO uint32_t IOFR2; - __IO uint32_t IOFR3; - __IO uint32_t IOFR4; - __IO uint32_t WDHTR; - __IO uint32_t WDLTR; - __IO uint32_t RSQR1; - __IO uint32_t RSQR2; - __IO uint32_t RSQR3; - __IO uint32_t ISQR; - __IO uint32_t IDATAR1; - __IO uint32_t IDATAR2; - __IO uint32_t IDATAR3; - __IO uint32_t IDATAR4; - __IO uint32_t RDATAR; -} ADC_TypeDef; - -/* Backup Registers */ -typedef struct -{ - uint32_t RESERVED0; - __IO uint16_t DATAR1; - uint16_t RESERVED1; - __IO uint16_t DATAR2; - uint16_t RESERVED2; - __IO uint16_t DATAR3; - uint16_t RESERVED3; - __IO uint16_t DATAR4; - uint16_t RESERVED4; - __IO uint16_t DATAR5; - uint16_t RESERVED5; - __IO uint16_t DATAR6; - uint16_t RESERVED6; - __IO uint16_t DATAR7; - uint16_t RESERVED7; - __IO uint16_t DATAR8; - uint16_t RESERVED8; - __IO uint16_t DATAR9; - uint16_t RESERVED9; - __IO uint16_t DATAR10; - uint16_t RESERVED10; - __IO uint16_t OCTLR; - uint16_t RESERVED11; - __IO uint16_t TPCTLR; - uint16_t RESERVED12; - __IO uint16_t TPCSR; - uint16_t RESERVED13[5]; - __IO uint16_t DATAR11; - uint16_t RESERVED14; - __IO uint16_t DATAR12; - uint16_t RESERVED15; - __IO uint16_t DATAR13; - uint16_t RESERVED16; - __IO uint16_t DATAR14; - uint16_t RESERVED17; - __IO uint16_t DATAR15; - uint16_t RESERVED18; - __IO uint16_t DATAR16; - uint16_t RESERVED19; - __IO uint16_t DATAR17; - uint16_t RESERVED20; - __IO uint16_t DATAR18; - uint16_t RESERVED21; - __IO uint16_t DATAR19; - uint16_t RESERVED22; - __IO uint16_t DATAR20; - uint16_t RESERVED23; - __IO uint16_t DATAR21; - uint16_t RESERVED24; - __IO uint16_t DATAR22; - uint16_t RESERVED25; - __IO uint16_t DATAR23; - uint16_t RESERVED26; - __IO uint16_t DATAR24; - uint16_t RESERVED27; - __IO uint16_t DATAR25; - uint16_t RESERVED28; - __IO uint16_t DATAR26; - uint16_t RESERVED29; - __IO uint16_t DATAR27; - uint16_t RESERVED30; - __IO uint16_t DATAR28; - uint16_t RESERVED31; - __IO uint16_t DATAR29; - uint16_t RESERVED32; - __IO uint16_t DATAR30; - uint16_t RESERVED33; - __IO uint16_t DATAR31; - uint16_t RESERVED34; - __IO uint16_t DATAR32; - uint16_t RESERVED35; - __IO uint16_t DATAR33; - uint16_t RESERVED36; - __IO uint16_t DATAR34; - uint16_t RESERVED37; - __IO uint16_t DATAR35; - uint16_t RESERVED38; - __IO uint16_t DATAR36; - uint16_t RESERVED39; - __IO uint16_t DATAR37; - uint16_t RESERVED40; - __IO uint16_t DATAR38; - uint16_t RESERVED41; - __IO uint16_t DATAR39; - uint16_t RESERVED42; - __IO uint16_t DATAR40; - uint16_t RESERVED43; - __IO uint16_t DATAR41; - uint16_t RESERVED44; - __IO uint16_t DATAR42; - uint16_t RESERVED45; -} BKP_TypeDef; - -/* CRC Calculation Unit */ -typedef struct -{ - __IO uint32_t DATAR; - __IO uint8_t IDATAR; - uint8_t RESERVED0; - uint16_t RESERVED1; - __IO uint32_t CTLR; -} CRC_TypeDef; - -/* Digital to Analog Converter */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t SWTR; - __IO uint32_t R12BDHR1; - __IO uint32_t L12BDHR1; - __IO uint32_t R8BDHR1; - __IO uint32_t R12BDHR2; - __IO uint32_t L12BDHR2; - __IO uint32_t R8BDHR2; - __IO uint32_t RD12BDHR; - __IO uint32_t LD12BDHR; - __IO uint32_t RD8BDHR; - __IO uint32_t DOR1; - __IO uint32_t DOR2; -} DAC_TypeDef; - -/* Debug MCU */ -typedef struct -{ - __IO uint32_t CFGR0; - __IO uint32_t CFGR1; -} DBGMCU_TypeDef; - -/* DMA Controller */ -typedef struct -{ - __IO uint32_t CFGR; - __IO uint32_t CNTR; - __IO uint32_t PADDR; - __IO uint32_t MADDR; -} DMA_Channel_TypeDef; - -typedef struct -{ - __IO uint32_t INTFR; - __IO uint32_t INTFCR; -} DMA_TypeDef; - -/* External Interrupt/Event Controller */ -typedef struct -{ - __IO uint32_t INTENR; - __IO uint32_t EVENR; - __IO uint32_t RTENR; - __IO uint32_t FTENR; - __IO uint32_t SWIEVR; - __IO uint32_t INTFR; -} EXTI_TypeDef; - -/* FLASH Registers */ -typedef struct -{ - __IO uint32_t ACTLR; - __IO uint32_t KEYR; - __IO uint32_t OBKEYR; - __IO uint32_t STATR; - __IO uint32_t CTLR; - __IO uint32_t ADDR; - __IO uint32_t RESERVED; - __IO uint32_t OBR; - __IO uint32_t WPR; - __IO uint32_t MODEKEYR; -} FLASH_TypeDef; - -/* Option Bytes Registers */ -typedef struct -{ - __IO uint16_t RDPR; - __IO uint16_t USER; - __IO uint16_t Data0; - __IO uint16_t Data1; - __IO uint16_t WRPR0; - __IO uint16_t WRPR1; - __IO uint16_t WRPR2; - __IO uint16_t WRPR3; -} OB_TypeDef; - -/* General Purpose I/O */ -typedef struct -{ - __IO uint32_t CFGLR; - __IO uint32_t CFGHR; - __IO uint32_t INDR; - __IO uint32_t OUTDR; - __IO uint32_t BSHR; - __IO uint32_t BCR; - __IO uint32_t LCKR; -} GPIO_TypeDef; - -/* Alternate Function I/O */ -typedef struct -{ - __IO uint32_t ECR; - __IO uint32_t PCFR1; - __IO uint32_t EXTICR[4]; - uint32_t RESERVED0; - __IO uint32_t PCFR2; -} AFIO_TypeDef; - -/* Inter Integrated Circuit Interface */ -typedef struct -{ - __IO uint16_t CTLR1; - uint16_t RESERVED0; - __IO uint16_t CTLR2; - uint16_t RESERVED1; - __IO uint16_t OADDR1; - uint16_t RESERVED2; - __IO uint16_t OADDR2; - uint16_t RESERVED3; - __IO uint16_t DATAR; - uint16_t RESERVED4; - __IO uint16_t STAR1; - uint16_t RESERVED5; - __IO uint16_t STAR2; - uint16_t RESERVED6; - __IO uint16_t CKCFGR; - uint16_t RESERVED7; - __IO uint16_t RTR; - uint16_t RESERVED8; -} I2C_TypeDef; - -/* Independent WatchDog */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t PSCR; - __IO uint32_t RLDR; - __IO uint32_t STATR; -} IWDG_TypeDef; - -/* Power Control */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t CSR; -} PWR_TypeDef; - -/* Reset and Clock Control */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t CFGR0; - __IO uint32_t INTR; - __IO uint32_t APB2PRSTR; - __IO uint32_t APB1PRSTR; - __IO uint32_t AHBPCENR; - __IO uint32_t APB2PCENR; - __IO uint32_t APB1PCENR; - __IO uint32_t BDCTLR; - __IO uint32_t RSTSCKR; -} RCC_TypeDef; - -/* Real-Time Clock */ -typedef struct -{ - __IO uint16_t CTLRH; - uint16_t RESERVED0; - __IO uint16_t CTLRL; - uint16_t RESERVED1; - __IO uint16_t PSCRH; - uint16_t RESERVED2; - __IO uint16_t PSCRL; - uint16_t RESERVED3; - __IO uint16_t DIVH; - uint16_t RESERVED4; - __IO uint16_t DIVL; - uint16_t RESERVED5; - __IO uint16_t CNTH; - uint16_t RESERVED6; - __IO uint16_t CNTL; - uint16_t RESERVED7; - __IO uint16_t ALRMH; - uint16_t RESERVED8; - __IO uint16_t ALRML; - uint16_t RESERVED9; -} RTC_TypeDef; - -/* Serial Peripheral Interface */ -typedef struct -{ - __IO uint16_t CTLR1; - uint16_t RESERVED0; - __IO uint16_t CTLR2; - uint16_t RESERVED1; - __IO uint16_t STATR; - uint16_t RESERVED2; - __IO uint16_t DATAR; - uint16_t RESERVED3; - __IO uint16_t CRCR; - uint16_t RESERVED4; - __IO uint16_t RCRCR; - uint16_t RESERVED5; - __IO uint16_t TCRCR; - uint16_t RESERVED6; - __IO uint16_t I2SCFGR; - uint16_t RESERVED7; - __IO uint16_t I2SPR; - uint16_t RESERVED8; -} SPI_TypeDef; - -/* TIM */ -typedef struct -{ - __IO uint16_t CTLR1; - uint16_t RESERVED0; - __IO uint16_t CTLR2; - uint16_t RESERVED1; - __IO uint16_t SMCFGR; - uint16_t RESERVED2; - __IO uint16_t DMAINTENR; - uint16_t RESERVED3; - __IO uint16_t INTFR; - uint16_t RESERVED4; - __IO uint16_t SWEVGR; - uint16_t RESERVED5; - __IO uint16_t CHCTLR1; - uint16_t RESERVED6; - __IO uint16_t CHCTLR2; - uint16_t RESERVED7; - __IO uint16_t CCER; - uint16_t RESERVED8; - __IO uint16_t CNT; - uint16_t RESERVED9; - __IO uint16_t PSC; - uint16_t RESERVED10; - __IO uint16_t ATRLR; - uint16_t RESERVED11; - __IO uint16_t RPTCR; - uint16_t RESERVED12; - __IO uint16_t CH1CVR; - uint16_t RESERVED13; - __IO uint16_t CH2CVR; - uint16_t RESERVED14; - __IO uint16_t CH3CVR; - uint16_t RESERVED15; - __IO uint16_t CH4CVR; - uint16_t RESERVED16; - __IO uint16_t BDTR; - uint16_t RESERVED17; - __IO uint16_t DMACFGR; - uint16_t RESERVED18; - __IO uint16_t DMAADR; - uint16_t RESERVED19; -} TIM_TypeDef; - -/* Universal Synchronous Asynchronous Receiver Transmitter */ -typedef struct -{ - __IO uint16_t STATR; - uint16_t RESERVED0; - __IO uint16_t DATAR; - uint16_t RESERVED1; - __IO uint16_t BRR; - uint16_t RESERVED2; - __IO uint16_t CTLR1; - uint16_t RESERVED3; - __IO uint16_t CTLR2; - uint16_t RESERVED4; - __IO uint16_t CTLR3; - uint16_t RESERVED5; - __IO uint16_t GPR; - uint16_t RESERVED6; -} USART_TypeDef; - -/* Window WatchDog */ -typedef struct -{ - __IO uint32_t CTLR; - __IO uint32_t CFGR; - __IO uint32_t STATR; -} WWDG_TypeDef; - -/* Enhanced Registers */ -typedef struct -{ - __IO uint32_t EXTEN_CTR; -} EXTEN_TypeDef; - -/* Peripheral memory map */ -#define FLASH_BASE ((uint32_t)0x08000000) /* FLASH base address in the alias region */ -#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 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 TIM5_BASE (APB1PERIPH_BASE + 0x0C00) -#define TIM6_BASE (APB1PERIPH_BASE + 0x1000) -#define TIM7_BASE (APB1PERIPH_BASE + 0x1400) -#define TIM12_BASE (APB1PERIPH_BASE + 0x1800) -#define TIM13_BASE (APB1PERIPH_BASE + 0x1C00) -#define TIM14_BASE (APB1PERIPH_BASE + 0x2000) -#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 SPI3_BASE (APB1PERIPH_BASE + 0x3C00) -#define USART2_BASE (APB1PERIPH_BASE + 0x4400) -#define USART3_BASE (APB1PERIPH_BASE + 0x4800) -#define UART4_BASE (APB1PERIPH_BASE + 0x4C00) -#define UART5_BASE (APB1PERIPH_BASE + 0x5000) -#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) -#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) -#define BKP_BASE (APB1PERIPH_BASE + 0x6C00) -#define PWR_BASE (APB1PERIPH_BASE + 0x7000) -#define DAC_BASE (APB1PERIPH_BASE + 0x7400) - -#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 GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) -#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) -#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 TIM8_BASE (APB2PERIPH_BASE + 0x3400) -#define USART1_BASE (APB2PERIPH_BASE + 0x3800) -#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00) -#define TIM15_BASE (APB2PERIPH_BASE + 0x4000) -#define TIM16_BASE (APB2PERIPH_BASE + 0x4400) -#define TIM17_BASE (APB2PERIPH_BASE + 0x4800) -#define TIM9_BASE (APB2PERIPH_BASE + 0x4C00) -#define TIM10_BASE (APB2PERIPH_BASE + 0x5000) -#define TIM11_BASE (APB2PERIPH_BASE + 0x5400) - -#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 DMA2_BASE (AHBPERIPH_BASE + 0x0400) -#define DMA2_Channel1_BASE (AHBPERIPH_BASE + 0x0408) -#define DMA2_Channel2_BASE (AHBPERIPH_BASE + 0x041C) -#define DMA2_Channel3_BASE (AHBPERIPH_BASE + 0x0430) -#define DMA2_Channel4_BASE (AHBPERIPH_BASE + 0x0444) -#define DMA2_Channel5_BASE (AHBPERIPH_BASE + 0x0458) -#define RCC_BASE (AHBPERIPH_BASE + 0x1000) -#define CRC_BASE (AHBPERIPH_BASE + 0x3000) - -#define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000) /* Flash registers base address */ -#define OB_BASE ((uint32_t)0x1FFFF800) /* Flash Option Bytes base address */ -#define DBGMCU_BASE ((uint32_t)0xE000D000) -#define EXTEN_BASE ((uint32_t)0x40023800) - -/* Peripheral declaration */ -#define TIM2 ((TIM_TypeDef *)TIM2_BASE) -#define TIM3 ((TIM_TypeDef *)TIM3_BASE) -#define TIM4 ((TIM_TypeDef *)TIM4_BASE) -#define TIM5 ((TIM_TypeDef *)TIM5_BASE) -#define TIM6 ((TIM_TypeDef *)TIM6_BASE) -#define TIM7 ((TIM_TypeDef *)TIM7_BASE) -#define TIM12 ((TIM_TypeDef *)TIM12_BASE) -#define TIM13 ((TIM_TypeDef *)TIM13_BASE) -#define TIM14 ((TIM_TypeDef *)TIM14_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 SPI3 ((SPI_TypeDef *)SPI3_BASE) -#define USART2 ((USART_TypeDef *)USART2_BASE) -#define USART3 ((USART_TypeDef *)USART3_BASE) -#define UART4 ((USART_TypeDef *)UART4_BASE) -#define UART5 ((USART_TypeDef *)UART5_BASE) -#define I2C1 ((I2C_TypeDef *)I2C1_BASE) -#define I2C2 ((I2C_TypeDef *)I2C2_BASE) -#define BKP ((BKP_TypeDef *)BKP_BASE) -#define PWR ((PWR_TypeDef *)PWR_BASE) -#define DAC ((DAC_TypeDef *)DAC_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 GPIOF ((GPIO_TypeDef *)GPIOF_BASE) -#define GPIOG ((GPIO_TypeDef *)GPIOG_BASE) -#define ADC1 ((ADC_TypeDef *)ADC1_BASE) -#define ADC2 ((ADC_TypeDef *)ADC2_BASE) -#define TIM1 ((TIM_TypeDef *)TIM1_BASE) -#define SPI1 ((SPI_TypeDef *)SPI1_BASE) -#define TIM8 ((TIM_TypeDef *)TIM8_BASE) -#define USART1 ((USART_TypeDef *)USART1_BASE) -#define ADC3 ((ADC_TypeDef *)ADC3_BASE) -#define TIM15 ((TIM_TypeDef *)TIM15_BASE) -#define TIM16 ((TIM_TypeDef *)TIM16_BASE) -#define TIM17 ((TIM_TypeDef *)TIM17_BASE) -#define TIM9 ((TIM_TypeDef *)TIM9_BASE) -#define TIM10 ((TIM_TypeDef *)TIM10_BASE) -#define TIM11 ((TIM_TypeDef *)TIM11_BASE) -#define DMA1 ((DMA_TypeDef *)DMA1_BASE) -#define DMA2 ((DMA_TypeDef *)DMA2_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 DMA2_Channel1 ((DMA_Channel_TypeDef *)DMA2_Channel1_BASE) -#define DMA2_Channel2 ((DMA_Channel_TypeDef *)DMA2_Channel2_BASE) -#define DMA2_Channel3 ((DMA_Channel_TypeDef *)DMA2_Channel3_BASE) -#define DMA2_Channel4 ((DMA_Channel_TypeDef *)DMA2_Channel4_BASE) -#define DMA2_Channel5 ((DMA_Channel_TypeDef *)DMA2_Channel5_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) -#define EXTEN ((EXTEN_TypeDef *)EXTEN_BASE) - -/******************************************************************************/ -/* Peripheral Registers Bits Definition */ -/******************************************************************************/ - -/******************************************************************************/ -/* Analog to Digital Converter */ -/******************************************************************************/ - -/******************** Bit definition for ADC_STATR register ********************/ -#define ADC_AWD ((uint8_t)0x01) /* Analog watchdog flag */ -#define ADC_EOC ((uint8_t)0x02) /* End of conversion */ -#define ADC_JEOC ((uint8_t)0x04) /* Injected channel end of conversion */ -#define ADC_JSTRT ((uint8_t)0x08) /* Injected channel Start flag */ -#define ADC_STRT ((uint8_t)0x10) /* Regular channel Start flag */ - -/******************* Bit definition for ADC_CTLR1 register ********************/ -#define ADC_AWDCH ((uint32_t)0x0000001F) /* AWDCH[4:0] bits (Analog watchdog channel select bits) */ -#define ADC_AWDCH_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_AWDCH_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_AWDCH_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_AWDCH_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_AWDCH_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_EOCIE ((uint32_t)0x00000020) /* Interrupt enable for EOC */ -#define ADC_AWDIE ((uint32_t)0x00000040) /* Analog Watchdog interrupt enable */ -#define ADC_JEOCIE ((uint32_t)0x00000080) /* Interrupt enable for injected channels */ -#define ADC_SCAN ((uint32_t)0x00000100) /* Scan mode */ -#define ADC_AWDSGL ((uint32_t)0x00000200) /* Enable the watchdog on a single channel in scan mode */ -#define ADC_JAUTO ((uint32_t)0x00000400) /* Automatic injected group conversion */ -#define ADC_DISCEN ((uint32_t)0x00000800) /* Discontinuous mode on regular channels */ -#define ADC_JDISCEN ((uint32_t)0x00001000) /* Discontinuous mode on injected channels */ - -#define ADC_DISCNUM ((uint32_t)0x0000E000) /* DISCNUM[2:0] bits (Discontinuous mode channel count) */ -#define ADC_DISCNUM_0 ((uint32_t)0x00002000) /* Bit 0 */ -#define ADC_DISCNUM_1 ((uint32_t)0x00004000) /* Bit 1 */ -#define ADC_DISCNUM_2 ((uint32_t)0x00008000) /* Bit 2 */ - -#define ADC_DUALMOD ((uint32_t)0x000F0000) /* DUALMOD[3:0] bits (Dual mode selection) */ -#define ADC_DUALMOD_0 ((uint32_t)0x00010000) /* Bit 0 */ -#define ADC_DUALMOD_1 ((uint32_t)0x00020000) /* Bit 1 */ -#define ADC_DUALMOD_2 ((uint32_t)0x00040000) /* Bit 2 */ -#define ADC_DUALMOD_3 ((uint32_t)0x00080000) /* Bit 3 */ - -#define ADC_JAWDEN ((uint32_t)0x00400000) /* Analog watchdog enable on injected channels */ -#define ADC_AWDEN ((uint32_t)0x00800000) /* Analog watchdog enable on regular channels */ - -/******************* Bit definition for ADC_CTLR2 register ********************/ -#define ADC_ADON ((uint32_t)0x00000001) /* A/D Converter ON / OFF */ -#define ADC_CONT ((uint32_t)0x00000002) /* Continuous Conversion */ -#define ADC_CAL ((uint32_t)0x00000004) /* A/D Calibration */ -#define ADC_RSTCAL ((uint32_t)0x00000008) /* Reset Calibration */ -#define ADC_DMA ((uint32_t)0x00000100) /* Direct Memory access mode */ -#define ADC_ALIGN ((uint32_t)0x00000800) /* Data Alignment */ - -#define ADC_JEXTSEL ((uint32_t)0x00007000) /* JEXTSEL[2:0] bits (External event select for injected group) */ -#define ADC_JEXTSEL_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define ADC_JEXTSEL_1 ((uint32_t)0x00002000) /* Bit 1 */ -#define ADC_JEXTSEL_2 ((uint32_t)0x00004000) /* Bit 2 */ - -#define ADC_JEXTTRIG ((uint32_t)0x00008000) /* External Trigger Conversion mode for injected channels */ - -#define ADC_EXTSEL ((uint32_t)0x000E0000) /* EXTSEL[2:0] bits (External Event Select for regular group) */ -#define ADC_EXTSEL_0 ((uint32_t)0x00020000) /* Bit 0 */ -#define ADC_EXTSEL_1 ((uint32_t)0x00040000) /* Bit 1 */ -#define ADC_EXTSEL_2 ((uint32_t)0x00080000) /* Bit 2 */ - -#define ADC_EXTTRIG ((uint32_t)0x00100000) /* External Trigger Conversion mode for regular channels */ -#define ADC_JSWSTART ((uint32_t)0x00200000) /* Start Conversion of injected channels */ -#define ADC_SWSTART ((uint32_t)0x00400000) /* Start Conversion of regular channels */ -#define ADC_TSVREFE ((uint32_t)0x00800000) /* Temperature Sensor and VREFINT Enable */ - -/****************** Bit definition for ADC_SAMPTR1 register *******************/ -#define ADC_SMP10 ((uint32_t)0x00000007) /* SMP10[2:0] bits (Channel 10 Sample time selection) */ -#define ADC_SMP10_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SMP10_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SMP10_2 ((uint32_t)0x00000004) /* Bit 2 */ - -#define ADC_SMP11 ((uint32_t)0x00000038) /* SMP11[2:0] bits (Channel 11 Sample time selection) */ -#define ADC_SMP11_0 ((uint32_t)0x00000008) /* Bit 0 */ -#define ADC_SMP11_1 ((uint32_t)0x00000010) /* Bit 1 */ -#define ADC_SMP11_2 ((uint32_t)0x00000020) /* Bit 2 */ - -#define ADC_SMP12 ((uint32_t)0x000001C0) /* SMP12[2:0] bits (Channel 12 Sample time selection) */ -#define ADC_SMP12_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define ADC_SMP12_1 ((uint32_t)0x00000080) /* Bit 1 */ -#define ADC_SMP12_2 ((uint32_t)0x00000100) /* Bit 2 */ - -#define ADC_SMP13 ((uint32_t)0x00000E00) /* SMP13[2:0] bits (Channel 13 Sample time selection) */ -#define ADC_SMP13_0 ((uint32_t)0x00000200) /* Bit 0 */ -#define ADC_SMP13_1 ((uint32_t)0x00000400) /* Bit 1 */ -#define ADC_SMP13_2 ((uint32_t)0x00000800) /* Bit 2 */ - -#define ADC_SMP14 ((uint32_t)0x00007000) /* SMP14[2:0] bits (Channel 14 Sample time selection) */ -#define ADC_SMP14_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define ADC_SMP14_1 ((uint32_t)0x00002000) /* Bit 1 */ -#define ADC_SMP14_2 ((uint32_t)0x00004000) /* Bit 2 */ - -#define ADC_SMP15 ((uint32_t)0x00038000) /* SMP15[2:0] bits (Channel 15 Sample time selection) */ -#define ADC_SMP15_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SMP15_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SMP15_2 ((uint32_t)0x00020000) /* Bit 2 */ - -#define ADC_SMP16 ((uint32_t)0x001C0000) /* SMP16[2:0] bits (Channel 16 Sample time selection) */ -#define ADC_SMP16_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define ADC_SMP16_1 ((uint32_t)0x00080000) /* Bit 1 */ -#define ADC_SMP16_2 ((uint32_t)0x00100000) /* Bit 2 */ - -#define ADC_SMP17 ((uint32_t)0x00E00000) /* SMP17[2:0] bits (Channel 17 Sample time selection) */ -#define ADC_SMP17_0 ((uint32_t)0x00200000) /* Bit 0 */ -#define ADC_SMP17_1 ((uint32_t)0x00400000) /* Bit 1 */ -#define ADC_SMP17_2 ((uint32_t)0x00800000) /* Bit 2 */ - -/****************** Bit definition for ADC_SAMPTR2 register *******************/ -#define ADC_SMP0 ((uint32_t)0x00000007) /* SMP0[2:0] bits (Channel 0 Sample time selection) */ -#define ADC_SMP0_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SMP0_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SMP0_2 ((uint32_t)0x00000004) /* Bit 2 */ - -#define ADC_SMP1 ((uint32_t)0x00000038) /* SMP1[2:0] bits (Channel 1 Sample time selection) */ -#define ADC_SMP1_0 ((uint32_t)0x00000008) /* Bit 0 */ -#define ADC_SMP1_1 ((uint32_t)0x00000010) /* Bit 1 */ -#define ADC_SMP1_2 ((uint32_t)0x00000020) /* Bit 2 */ - -#define ADC_SMP2 ((uint32_t)0x000001C0) /* SMP2[2:0] bits (Channel 2 Sample time selection) */ -#define ADC_SMP2_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define ADC_SMP2_1 ((uint32_t)0x00000080) /* Bit 1 */ -#define ADC_SMP2_2 ((uint32_t)0x00000100) /* Bit 2 */ - -#define ADC_SMP3 ((uint32_t)0x00000E00) /* SMP3[2:0] bits (Channel 3 Sample time selection) */ -#define ADC_SMP3_0 ((uint32_t)0x00000200) /* Bit 0 */ -#define ADC_SMP3_1 ((uint32_t)0x00000400) /* Bit 1 */ -#define ADC_SMP3_2 ((uint32_t)0x00000800) /* Bit 2 */ - -#define ADC_SMP4 ((uint32_t)0x00007000) /* SMP4[2:0] bits (Channel 4 Sample time selection) */ -#define ADC_SMP4_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define ADC_SMP4_1 ((uint32_t)0x00002000) /* Bit 1 */ -#define ADC_SMP4_2 ((uint32_t)0x00004000) /* Bit 2 */ - -#define ADC_SMP5 ((uint32_t)0x00038000) /* SMP5[2:0] bits (Channel 5 Sample time selection) */ -#define ADC_SMP5_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SMP5_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SMP5_2 ((uint32_t)0x00020000) /* Bit 2 */ - -#define ADC_SMP6 ((uint32_t)0x001C0000) /* SMP6[2:0] bits (Channel 6 Sample time selection) */ -#define ADC_SMP6_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define ADC_SMP6_1 ((uint32_t)0x00080000) /* Bit 1 */ -#define ADC_SMP6_2 ((uint32_t)0x00100000) /* Bit 2 */ - -#define ADC_SMP7 ((uint32_t)0x00E00000) /* SMP7[2:0] bits (Channel 7 Sample time selection) */ -#define ADC_SMP7_0 ((uint32_t)0x00200000) /* Bit 0 */ -#define ADC_SMP7_1 ((uint32_t)0x00400000) /* Bit 1 */ -#define ADC_SMP7_2 ((uint32_t)0x00800000) /* Bit 2 */ - -#define ADC_SMP8 ((uint32_t)0x07000000) /* SMP8[2:0] bits (Channel 8 Sample time selection) */ -#define ADC_SMP8_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define ADC_SMP8_1 ((uint32_t)0x02000000) /* Bit 1 */ -#define ADC_SMP8_2 ((uint32_t)0x04000000) /* Bit 2 */ - -#define ADC_SMP9 ((uint32_t)0x38000000) /* SMP9[2:0] bits (Channel 9 Sample time selection) */ -#define ADC_SMP9_0 ((uint32_t)0x08000000) /* Bit 0 */ -#define ADC_SMP9_1 ((uint32_t)0x10000000) /* Bit 1 */ -#define ADC_SMP9_2 ((uint32_t)0x20000000) /* Bit 2 */ - -/****************** Bit definition for ADC_IOFR1 register *******************/ -#define ADC_JOFFSET1 ((uint16_t)0x0FFF) /* Data offset for injected channel 1 */ - -/****************** Bit definition for ADC_IOFR2 register *******************/ -#define ADC_JOFFSET2 ((uint16_t)0x0FFF) /* Data offset for injected channel 2 */ - -/****************** Bit definition for ADC_IOFR3 register *******************/ -#define ADC_JOFFSET3 ((uint16_t)0x0FFF) /* Data offset for injected channel 3 */ - -/****************** Bit definition for ADC_IOFR4 register *******************/ -#define ADC_JOFFSET4 ((uint16_t)0x0FFF) /* Data offset for injected channel 4 */ - -/******************* Bit definition for ADC_WDHTR register ********************/ -#define ADC_HT ((uint16_t)0x0FFF) /* Analog watchdog high threshold */ - -/******************* Bit definition for ADC_WDLTR register ********************/ -#define ADC_LT ((uint16_t)0x0FFF) /* Analog watchdog low threshold */ - -/******************* Bit definition for ADC_RSQR1 register *******************/ -#define ADC_SQ13 ((uint32_t)0x0000001F) /* SQ13[4:0] bits (13th conversion in regular sequence) */ -#define ADC_SQ13_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SQ13_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SQ13_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_SQ13_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_SQ13_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_SQ14 ((uint32_t)0x000003E0) /* SQ14[4:0] bits (14th conversion in regular sequence) */ -#define ADC_SQ14_0 ((uint32_t)0x00000020) /* Bit 0 */ -#define ADC_SQ14_1 ((uint32_t)0x00000040) /* Bit 1 */ -#define ADC_SQ14_2 ((uint32_t)0x00000080) /* Bit 2 */ -#define ADC_SQ14_3 ((uint32_t)0x00000100) /* Bit 3 */ -#define ADC_SQ14_4 ((uint32_t)0x00000200) /* Bit 4 */ - -#define ADC_SQ15 ((uint32_t)0x00007C00) /* SQ15[4:0] bits (15th conversion in regular sequence) */ -#define ADC_SQ15_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define ADC_SQ15_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define ADC_SQ15_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define ADC_SQ15_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define ADC_SQ15_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define ADC_SQ16 ((uint32_t)0x000F8000) /* SQ16[4:0] bits (16th conversion in regular sequence) */ -#define ADC_SQ16_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SQ16_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SQ16_2 ((uint32_t)0x00020000) /* Bit 2 */ -#define ADC_SQ16_3 ((uint32_t)0x00040000) /* Bit 3 */ -#define ADC_SQ16_4 ((uint32_t)0x00080000) /* Bit 4 */ - -#define ADC_L ((uint32_t)0x00F00000) /* L[3:0] bits (Regular channel sequence length) */ -#define ADC_L_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define ADC_L_1 ((uint32_t)0x00200000) /* Bit 1 */ -#define ADC_L_2 ((uint32_t)0x00400000) /* Bit 2 */ -#define ADC_L_3 ((uint32_t)0x00800000) /* Bit 3 */ - -/******************* Bit definition for ADC_RSQR2 register *******************/ -#define ADC_SQ7 ((uint32_t)0x0000001F) /* SQ7[4:0] bits (7th conversion in regular sequence) */ -#define ADC_SQ7_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SQ7_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SQ7_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_SQ7_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_SQ7_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_SQ8 ((uint32_t)0x000003E0) /* SQ8[4:0] bits (8th conversion in regular sequence) */ -#define ADC_SQ8_0 ((uint32_t)0x00000020) /* Bit 0 */ -#define ADC_SQ8_1 ((uint32_t)0x00000040) /* Bit 1 */ -#define ADC_SQ8_2 ((uint32_t)0x00000080) /* Bit 2 */ -#define ADC_SQ8_3 ((uint32_t)0x00000100) /* Bit 3 */ -#define ADC_SQ8_4 ((uint32_t)0x00000200) /* Bit 4 */ - -#define ADC_SQ9 ((uint32_t)0x00007C00) /* SQ9[4:0] bits (9th conversion in regular sequence) */ -#define ADC_SQ9_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define ADC_SQ9_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define ADC_SQ9_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define ADC_SQ9_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define ADC_SQ9_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define ADC_SQ10 ((uint32_t)0x000F8000) /* SQ10[4:0] bits (10th conversion in regular sequence) */ -#define ADC_SQ10_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SQ10_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SQ10_2 ((uint32_t)0x00020000) /* Bit 2 */ -#define ADC_SQ10_3 ((uint32_t)0x00040000) /* Bit 3 */ -#define ADC_SQ10_4 ((uint32_t)0x00080000) /* Bit 4 */ - -#define ADC_SQ11 ((uint32_t)0x01F00000) /* SQ11[4:0] bits (11th conversion in regular sequence) */ -#define ADC_SQ11_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define ADC_SQ11_1 ((uint32_t)0x00200000) /* Bit 1 */ -#define ADC_SQ11_2 ((uint32_t)0x00400000) /* Bit 2 */ -#define ADC_SQ11_3 ((uint32_t)0x00800000) /* Bit 3 */ -#define ADC_SQ11_4 ((uint32_t)0x01000000) /* Bit 4 */ - -#define ADC_SQ12 ((uint32_t)0x3E000000) /* SQ12[4:0] bits (12th conversion in regular sequence) */ -#define ADC_SQ12_0 ((uint32_t)0x02000000) /* Bit 0 */ -#define ADC_SQ12_1 ((uint32_t)0x04000000) /* Bit 1 */ -#define ADC_SQ12_2 ((uint32_t)0x08000000) /* Bit 2 */ -#define ADC_SQ12_3 ((uint32_t)0x10000000) /* Bit 3 */ -#define ADC_SQ12_4 ((uint32_t)0x20000000) /* Bit 4 */ - -/******************* Bit definition for ADC_RSQR3 register *******************/ -#define ADC_SQ1 ((uint32_t)0x0000001F) /* SQ1[4:0] bits (1st conversion in regular sequence) */ -#define ADC_SQ1_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_SQ1_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_SQ1_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_SQ1_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_SQ1_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_SQ2 ((uint32_t)0x000003E0) /* SQ2[4:0] bits (2nd conversion in regular sequence) */ -#define ADC_SQ2_0 ((uint32_t)0x00000020) /* Bit 0 */ -#define ADC_SQ2_1 ((uint32_t)0x00000040) /* Bit 1 */ -#define ADC_SQ2_2 ((uint32_t)0x00000080) /* Bit 2 */ -#define ADC_SQ2_3 ((uint32_t)0x00000100) /* Bit 3 */ -#define ADC_SQ2_4 ((uint32_t)0x00000200) /* Bit 4 */ - -#define ADC_SQ3 ((uint32_t)0x00007C00) /* SQ3[4:0] bits (3rd conversion in regular sequence) */ -#define ADC_SQ3_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define ADC_SQ3_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define ADC_SQ3_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define ADC_SQ3_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define ADC_SQ3_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define ADC_SQ4 ((uint32_t)0x000F8000) /* SQ4[4:0] bits (4th conversion in regular sequence) */ -#define ADC_SQ4_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_SQ4_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_SQ4_2 ((uint32_t)0x00020000) /* Bit 2 */ -#define ADC_SQ4_3 ((uint32_t)0x00040000) /* Bit 3 */ -#define ADC_SQ4_4 ((uint32_t)0x00080000) /* Bit 4 */ - -#define ADC_SQ5 ((uint32_t)0x01F00000) /* SQ5[4:0] bits (5th conversion in regular sequence) */ -#define ADC_SQ5_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define ADC_SQ5_1 ((uint32_t)0x00200000) /* Bit 1 */ -#define ADC_SQ5_2 ((uint32_t)0x00400000) /* Bit 2 */ -#define ADC_SQ5_3 ((uint32_t)0x00800000) /* Bit 3 */ -#define ADC_SQ5_4 ((uint32_t)0x01000000) /* Bit 4 */ - -#define ADC_SQ6 ((uint32_t)0x3E000000) /* SQ6[4:0] bits (6th conversion in regular sequence) */ -#define ADC_SQ6_0 ((uint32_t)0x02000000) /* Bit 0 */ -#define ADC_SQ6_1 ((uint32_t)0x04000000) /* Bit 1 */ -#define ADC_SQ6_2 ((uint32_t)0x08000000) /* Bit 2 */ -#define ADC_SQ6_3 ((uint32_t)0x10000000) /* Bit 3 */ -#define ADC_SQ6_4 ((uint32_t)0x20000000) /* Bit 4 */ - -/******************* Bit definition for ADC_ISQR register *******************/ -#define ADC_JSQ1 ((uint32_t)0x0000001F) /* JSQ1[4:0] bits (1st conversion in injected sequence) */ -#define ADC_JSQ1_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define ADC_JSQ1_1 ((uint32_t)0x00000002) /* Bit 1 */ -#define ADC_JSQ1_2 ((uint32_t)0x00000004) /* Bit 2 */ -#define ADC_JSQ1_3 ((uint32_t)0x00000008) /* Bit 3 */ -#define ADC_JSQ1_4 ((uint32_t)0x00000010) /* Bit 4 */ - -#define ADC_JSQ2 ((uint32_t)0x000003E0) /* JSQ2[4:0] bits (2nd conversion in injected sequence) */ -#define ADC_JSQ2_0 ((uint32_t)0x00000020) /* Bit 0 */ -#define ADC_JSQ2_1 ((uint32_t)0x00000040) /* Bit 1 */ -#define ADC_JSQ2_2 ((uint32_t)0x00000080) /* Bit 2 */ -#define ADC_JSQ2_3 ((uint32_t)0x00000100) /* Bit 3 */ -#define ADC_JSQ2_4 ((uint32_t)0x00000200) /* Bit 4 */ - -#define ADC_JSQ3 ((uint32_t)0x00007C00) /* JSQ3[4:0] bits (3rd conversion in injected sequence) */ -#define ADC_JSQ3_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define ADC_JSQ3_1 ((uint32_t)0x00000800) /* Bit 1 */ -#define ADC_JSQ3_2 ((uint32_t)0x00001000) /* Bit 2 */ -#define ADC_JSQ3_3 ((uint32_t)0x00002000) /* Bit 3 */ -#define ADC_JSQ3_4 ((uint32_t)0x00004000) /* Bit 4 */ - -#define ADC_JSQ4 ((uint32_t)0x000F8000) /* JSQ4[4:0] bits (4th conversion in injected sequence) */ -#define ADC_JSQ4_0 ((uint32_t)0x00008000) /* Bit 0 */ -#define ADC_JSQ4_1 ((uint32_t)0x00010000) /* Bit 1 */ -#define ADC_JSQ4_2 ((uint32_t)0x00020000) /* Bit 2 */ -#define ADC_JSQ4_3 ((uint32_t)0x00040000) /* Bit 3 */ -#define ADC_JSQ4_4 ((uint32_t)0x00080000) /* Bit 4 */ - -#define ADC_JL ((uint32_t)0x00300000) /* JL[1:0] bits (Injected Sequence length) */ -#define ADC_JL_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define ADC_JL_1 ((uint32_t)0x00200000) /* Bit 1 */ - -/******************* Bit definition for ADC_IDATAR1 register *******************/ -#define ADC_IDATAR1_JDATA ((uint16_t)0xFFFF) /* Injected data */ - -/******************* Bit definition for ADC_IDATAR2 register *******************/ -#define ADC_IDATAR2_JDATA ((uint16_t)0xFFFF) /* Injected data */ - -/******************* Bit definition for ADC_IDATAR3 register *******************/ -#define ADC_IDATAR3_JDATA ((uint16_t)0xFFFF) /* Injected data */ - -/******************* Bit definition for ADC_IDATAR4 register *******************/ -#define ADC_IDATAR4_JDATA ((uint16_t)0xFFFF) /* Injected data */ - -/******************** Bit definition for ADC_RDATAR register ********************/ -#define ADC_RDATAR_DATA ((uint32_t)0x0000FFFF) /* Regular data */ -#define ADC_RDATAR_ADC2DATA ((uint32_t)0xFFFF0000) /* ADC2 data */ - -/******************************************************************************/ -/* Backup registers */ -/******************************************************************************/ - -/******************* Bit definition for BKP_DATAR1 register ********************/ -#define BKP_DATAR1_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR2 register ********************/ -#define BKP_DATAR2_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR3 register ********************/ -#define BKP_DATAR3_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR4 register ********************/ -#define BKP_DATAR4_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR5 register ********************/ -#define BKP_DATAR5_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR6 register ********************/ -#define BKP_DATAR6_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR7 register ********************/ -#define BKP_DATAR7_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR8 register ********************/ -#define BKP_DATAR8_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR9 register ********************/ -#define BKP_DATAR9_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR10 register *******************/ -#define BKP_DATAR10_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR11 register *******************/ -#define BKP_DATAR11_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR12 register *******************/ -#define BKP_DATAR12_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR13 register *******************/ -#define BKP_DATAR13_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR14 register *******************/ -#define BKP_DATAR14_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR15 register *******************/ -#define BKP_DATAR15_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR16 register *******************/ -#define BKP_DATAR16_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR17 register *******************/ -#define BKP_DATAR17_D ((uint16_t)0xFFFF) /* Backup data */ - -/****************** Bit definition for BKP_DATAR18 register ********************/ -#define BKP_DATAR18_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR19 register *******************/ -#define BKP_DATAR19_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR20 register *******************/ -#define BKP_DATAR20_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR21 register *******************/ -#define BKP_DATAR21_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR22 register *******************/ -#define BKP_DATAR22_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR23 register *******************/ -#define BKP_DATAR23_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR24 register *******************/ -#define BKP_DATAR24_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR25 register *******************/ -#define BKP_DATAR25_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR26 register *******************/ -#define BKP_DATAR26_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR27 register *******************/ -#define BKP_DATAR27_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR28 register *******************/ -#define BKP_DATAR28_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR29 register *******************/ -#define BKP_DATAR29_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR30 register *******************/ -#define BKP_DATAR30_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR31 register *******************/ -#define BKP_DATAR31_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR32 register *******************/ -#define BKP_DATAR32_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR33 register *******************/ -#define BKP_DATAR33_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR34 register *******************/ -#define BKP_DATAR34_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR35 register *******************/ -#define BKP_DATAR35_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR36 register *******************/ -#define BKP_DATAR36_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR37 register *******************/ -#define BKP_DATAR37_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR38 register *******************/ -#define BKP_DATAR38_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR39 register *******************/ -#define BKP_DATAR39_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR40 register *******************/ -#define BKP_DATAR40_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR41 register *******************/ -#define BKP_DATAR41_D ((uint16_t)0xFFFF) /* Backup data */ - -/******************* Bit definition for BKP_DATAR42 register *******************/ -#define BKP_DATAR42_D ((uint16_t)0xFFFF) /* Backup data */ - -/****************** Bit definition for BKP_OCTLR register *******************/ -#define BKP_CAL ((uint16_t)0x007F) /* Calibration value */ -#define BKP_CCO ((uint16_t)0x0080) /* Calibration Clock Output */ -#define BKP_ASOE ((uint16_t)0x0100) /* Alarm or Second Output Enable */ -#define BKP_ASOS ((uint16_t)0x0200) /* Alarm or Second Output Selection */ - -/******************** Bit definition for BKP_TPCTLR register ********************/ -#define BKP_TPE ((uint8_t)0x01) /* TAMPER pin enable */ -#define BKP_TPAL ((uint8_t)0x02) /* TAMPER pin active level */ - -/******************* Bit definition for BKP_TPCSR register ********************/ -#define BKP_CTE ((uint16_t)0x0001) /* Clear Tamper event */ -#define BKP_CTI ((uint16_t)0x0002) /* Clear Tamper Interrupt */ -#define BKP_TPIE ((uint16_t)0x0004) /* TAMPER Pin interrupt enable */ -#define BKP_TEF ((uint16_t)0x0100) /* Tamper Event Flag */ -#define BKP_TIF ((uint16_t)0x0200) /* Tamper Interrupt Flag */ - -/******************************************************************************/ -/* CRC Calculation Unit */ -/******************************************************************************/ - -/******************* Bit definition for CRC_DATAR register *********************/ -#define CRC_DATAR_DR ((uint32_t)0xFFFFFFFF) /* Data register bits */ - -/******************* Bit definition for CRC_IDATAR register ********************/ -#define CRC_IDR_IDATAR ((uint8_t)0xFF) /* General-purpose 8-bit data register bits */ - -/******************** Bit definition for CRC_CTLR register ********************/ -#define CRC_CTLR_RESET ((uint8_t)0x01) /* RESET bit */ - -/******************************************************************************/ -/* Digital to Analog Converter */ -/******************************************************************************/ - -/******************** Bit definition for DAC_CTLR register ********************/ -#define DAC_EN1 ((uint32_t)0x00000001) /* DAC channel1 enable */ -#define DAC_BOFF1 ((uint32_t)0x00000002) /* DAC channel1 output buffer disable */ -#define DAC_TEN1 ((uint32_t)0x00000004) /* DAC channel1 Trigger enable */ - -#define DAC_TSEL1 ((uint32_t)0x00000038) /* TSEL1[2:0] (DAC channel1 Trigger selection) */ -#define DAC_TSEL1_0 ((uint32_t)0x00000008) /* Bit 0 */ -#define DAC_TSEL1_1 ((uint32_t)0x00000010) /* Bit 1 */ -#define DAC_TSEL1_2 ((uint32_t)0x00000020) /* Bit 2 */ - -#define DAC_WAVE1 ((uint32_t)0x000000C0) /* WAVE1[1:0] (DAC channel1 noise/triangle wave generation enable) */ -#define DAC_WAVE1_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define DAC_WAVE1_1 ((uint32_t)0x00000080) /* Bit 1 */ - -#define DAC_MAMP1 ((uint32_t)0x00000F00) /* MAMP1[3:0] (DAC channel1 Mask/Amplitude selector) */ -#define DAC_MAMP1_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define DAC_MAMP1_1 ((uint32_t)0x00000200) /* Bit 1 */ -#define DAC_MAMP1_2 ((uint32_t)0x00000400) /* Bit 2 */ -#define DAC_MAMP1_3 ((uint32_t)0x00000800) /* Bit 3 */ - -#define DAC_DMAEN1 ((uint32_t)0x00001000) /* DAC channel1 DMA enable */ -#define DAC_EN2 ((uint32_t)0x00010000) /* DAC channel2 enable */ -#define DAC_BOFF2 ((uint32_t)0x00020000) /* DAC channel2 output buffer disable */ -#define DAC_TEN2 ((uint32_t)0x00040000) /* DAC channel2 Trigger enable */ - -#define DAC_TSEL2 ((uint32_t)0x00380000) /* TSEL2[2:0] (DAC channel2 Trigger selection) */ -#define DAC_TSEL2_0 ((uint32_t)0x00080000) /* Bit 0 */ -#define DAC_TSEL2_1 ((uint32_t)0x00100000) /* Bit 1 */ -#define DAC_TSEL2_2 ((uint32_t)0x00200000) /* Bit 2 */ - -#define DAC_WAVE2 ((uint32_t)0x00C00000) /* WAVE2[1:0] (DAC channel2 noise/triangle wave generation enable) */ -#define DAC_WAVE2_0 ((uint32_t)0x00400000) /* Bit 0 */ -#define DAC_WAVE2_1 ((uint32_t)0x00800000) /* Bit 1 */ - -#define DAC_MAMP2 ((uint32_t)0x0F000000) /* MAMP2[3:0] (DAC channel2 Mask/Amplitude selector) */ -#define DAC_MAMP2_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define DAC_MAMP2_1 ((uint32_t)0x02000000) /* Bit 1 */ -#define DAC_MAMP2_2 ((uint32_t)0x04000000) /* Bit 2 */ -#define DAC_MAMP2_3 ((uint32_t)0x08000000) /* Bit 3 */ - -#define DAC_DMAEN2 ((uint32_t)0x10000000) /* DAC channel2 DMA enabled */ - -/***************** Bit definition for DAC_SWTR register ******************/ -#define DAC_SWTRIG1 ((uint8_t)0x01) /* DAC channel1 software trigger */ -#define DAC_SWTRIG2 ((uint8_t)0x02) /* DAC channel2 software trigger */ - -/***************** Bit definition for DAC_R12BDHR1 register ******************/ -#define DAC_DHR12R1 ((uint16_t)0x0FFF) /* DAC channel1 12-bit Right aligned data */ - -/***************** Bit definition for DAC_L12BDHR1 register ******************/ -#define DAC_DHR12L1 ((uint16_t)0xFFF0) /* DAC channel1 12-bit Left aligned data */ - -/****************** Bit definition for DAC_R8BDHR1 register ******************/ -#define DAC_DHR8R1 ((uint8_t)0xFF) /* DAC channel1 8-bit Right aligned data */ - -/***************** Bit definition for DAC_R12BDHR2 register ******************/ -#define DAC_DHR12R2 ((uint16_t)0x0FFF) /* DAC channel2 12-bit Right aligned data */ - -/***************** Bit definition for DAC_L12BDHR2 register ******************/ -#define DAC_DHR12L2 ((uint16_t)0xFFF0) /* DAC channel2 12-bit Left aligned data */ - -/****************** Bit definition for DAC_R8BDHR2 register ******************/ -#define DAC_DHR8R2 ((uint8_t)0xFF) /* DAC channel2 8-bit Right aligned data */ - -/***************** Bit definition for DAC_RD12BDHR register ******************/ -#define DAC_RD12BDHR_DACC1DHR ((uint32_t)0x00000FFF) /* DAC channel1 12-bit Right aligned data */ -#define DAC_RD12BDHR_DACC2DHR ((uint32_t)0x0FFF0000) /* DAC channel2 12-bit Right aligned data */ - -/***************** Bit definition for DAC_LD12BDHR register ******************/ -#define DAC_LD12BDHR_DACC1DHR ((uint32_t)0x0000FFF0) /* DAC channel1 12-bit Left aligned data */ -#define DAC_LD12BDHR_DACC2DHR ((uint32_t)0xFFF00000) /* DAC channel2 12-bit Left aligned data */ - -/****************** Bit definition for DAC_RD8BDHR register ******************/ -#define DAC_RD8BDHR_DACC1DHR ((uint16_t)0x00FF) /* DAC channel1 8-bit Right aligned data */ -#define DAC_RD8BDHR_DACC2DHR ((uint16_t)0xFF00) /* DAC channel2 8-bit Right aligned data */ - -/******************* Bit definition for DAC_DOR1 register *******************/ -#define DAC_DACC1DOR ((uint16_t)0x0FFF) /* DAC channel1 data output */ - -/******************* Bit definition for DAC_DOR2 register *******************/ -#define DAC_DACC2DOR ((uint16_t)0x0FFF) /* DAC channel2 data output */ - -/******************************************************************************/ -/* DMA Controller */ -/******************************************************************************/ - -/******************* Bit definition for DMA_INTFR register ********************/ -#define DMA_GIF1 ((uint32_t)0x00000001) /* Channel 1 Global interrupt flag */ -#define DMA_TCIF1 ((uint32_t)0x00000002) /* Channel 1 Transfer Complete flag */ -#define DMA_HTIF1 ((uint32_t)0x00000004) /* Channel 1 Half Transfer flag */ -#define DMA_TEIF1 ((uint32_t)0x00000008) /* Channel 1 Transfer Error flag */ -#define DMA_GIF2 ((uint32_t)0x00000010) /* Channel 2 Global interrupt flag */ -#define DMA_TCIF2 ((uint32_t)0x00000020) /* Channel 2 Transfer Complete flag */ -#define DMA_HTIF2 ((uint32_t)0x00000040) /* Channel 2 Half Transfer flag */ -#define DMA_TEIF2 ((uint32_t)0x00000080) /* Channel 2 Transfer Error flag */ -#define DMA_GIF3 ((uint32_t)0x00000100) /* Channel 3 Global interrupt flag */ -#define DMA_TCIF3 ((uint32_t)0x00000200) /* Channel 3 Transfer Complete flag */ -#define DMA_HTIF3 ((uint32_t)0x00000400) /* Channel 3 Half Transfer flag */ -#define DMA_TEIF3 ((uint32_t)0x00000800) /* Channel 3 Transfer Error flag */ -#define DMA_GIF4 ((uint32_t)0x00001000) /* Channel 4 Global interrupt flag */ -#define DMA_TCIF4 ((uint32_t)0x00002000) /* Channel 4 Transfer Complete flag */ -#define DMA_HTIF4 ((uint32_t)0x00004000) /* Channel 4 Half Transfer flag */ -#define DMA_TEIF4 ((uint32_t)0x00008000) /* Channel 4 Transfer Error flag */ -#define DMA_GIF5 ((uint32_t)0x00010000) /* Channel 5 Global interrupt flag */ -#define DMA_TCIF5 ((uint32_t)0x00020000) /* Channel 5 Transfer Complete flag */ -#define DMA_HTIF5 ((uint32_t)0x00040000) /* Channel 5 Half Transfer flag */ -#define DMA_TEIF5 ((uint32_t)0x00080000) /* Channel 5 Transfer Error flag */ -#define DMA_GIF6 ((uint32_t)0x00100000) /* Channel 6 Global interrupt flag */ -#define DMA_TCIF6 ((uint32_t)0x00200000) /* Channel 6 Transfer Complete flag */ -#define DMA_HTIF6 ((uint32_t)0x00400000) /* Channel 6 Half Transfer flag */ -#define DMA_TEIF6 ((uint32_t)0x00800000) /* Channel 6 Transfer Error flag */ -#define DMA_GIF7 ((uint32_t)0x01000000) /* Channel 7 Global interrupt flag */ -#define DMA_TCIF7 ((uint32_t)0x02000000) /* Channel 7 Transfer Complete flag */ -#define DMA_HTIF7 ((uint32_t)0x04000000) /* Channel 7 Half Transfer flag */ -#define DMA_TEIF7 ((uint32_t)0x08000000) /* Channel 7 Transfer Error flag */ - -/******************* Bit definition for DMA_INTFCR register *******************/ -#define DMA_CGIF1 ((uint32_t)0x00000001) /* Channel 1 Global interrupt clear */ -#define DMA_CTCIF1 ((uint32_t)0x00000002) /* Channel 1 Transfer Complete clear */ -#define DMA_CHTIF1 ((uint32_t)0x00000004) /* Channel 1 Half Transfer clear */ -#define DMA_CTEIF1 ((uint32_t)0x00000008) /* Channel 1 Transfer Error clear */ -#define DMA_CGIF2 ((uint32_t)0x00000010) /* Channel 2 Global interrupt clear */ -#define DMA_CTCIF2 ((uint32_t)0x00000020) /* Channel 2 Transfer Complete clear */ -#define DMA_CHTIF2 ((uint32_t)0x00000040) /* Channel 2 Half Transfer clear */ -#define DMA_CTEIF2 ((uint32_t)0x00000080) /* Channel 2 Transfer Error clear */ -#define DMA_CGIF3 ((uint32_t)0x00000100) /* Channel 3 Global interrupt clear */ -#define DMA_CTCIF3 ((uint32_t)0x00000200) /* Channel 3 Transfer Complete clear */ -#define DMA_CHTIF3 ((uint32_t)0x00000400) /* Channel 3 Half Transfer clear */ -#define DMA_CTEIF3 ((uint32_t)0x00000800) /* Channel 3 Transfer Error clear */ -#define DMA_CGIF4 ((uint32_t)0x00001000) /* Channel 4 Global interrupt clear */ -#define DMA_CTCIF4 ((uint32_t)0x00002000) /* Channel 4 Transfer Complete clear */ -#define DMA_CHTIF4 ((uint32_t)0x00004000) /* Channel 4 Half Transfer clear */ -#define DMA_CTEIF4 ((uint32_t)0x00008000) /* Channel 4 Transfer Error clear */ -#define DMA_CGIF5 ((uint32_t)0x00010000) /* Channel 5 Global interrupt clear */ -#define DMA_CTCIF5 ((uint32_t)0x00020000) /* Channel 5 Transfer Complete clear */ -#define DMA_CHTIF5 ((uint32_t)0x00040000) /* Channel 5 Half Transfer clear */ -#define DMA_CTEIF5 ((uint32_t)0x00080000) /* Channel 5 Transfer Error clear */ -#define DMA_CGIF6 ((uint32_t)0x00100000) /* Channel 6 Global interrupt clear */ -#define DMA_CTCIF6 ((uint32_t)0x00200000) /* Channel 6 Transfer Complete clear */ -#define DMA_CHTIF6 ((uint32_t)0x00400000) /* Channel 6 Half Transfer clear */ -#define DMA_CTEIF6 ((uint32_t)0x00800000) /* Channel 6 Transfer Error clear */ -#define DMA_CGIF7 ((uint32_t)0x01000000) /* Channel 7 Global interrupt clear */ -#define DMA_CTCIF7 ((uint32_t)0x02000000) /* Channel 7 Transfer Complete clear */ -#define DMA_CHTIF7 ((uint32_t)0x04000000) /* Channel 7 Half Transfer clear */ -#define DMA_CTEIF7 ((uint32_t)0x08000000) /* Channel 7 Transfer Error clear */ - -/******************* Bit definition for DMA_CFGR1 register *******************/ -#define DMA_CFGR1_EN ((uint16_t)0x0001) /* Channel enable*/ -#define DMA_CFGR1_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFGR1_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFGR1_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFGR1_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFGR1_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFGR1_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFGR1_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFGR1_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFGR1_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFGR1_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFGR1_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFGR1_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFGR1_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFGR1_PL ((uint16_t)0x3000) /* PL[1:0] bits(Channel Priority level) */ -#define DMA_CFGR1_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFGR1_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFGR1_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/******************* Bit definition for DMA_CFGR2 register *******************/ -#define DMA_CFGR2_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFGR2_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFGR2_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFGR2_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFGR2_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFGR2_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFGR2_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFGR2_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFGR2_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFGR2_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFGR2_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFGR2_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFGR2_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFGR2_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFGR2_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFGR2_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFGR2_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFGR2_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/******************* Bit definition for DMA_CFGR3 register *******************/ -#define DMA_CFGR3_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFGR3_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFGR3_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFGR3_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFGR3_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFGR3_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFGR3_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFGR3_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFGR3_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFGR3_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFGR3_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFGR3_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFGR3_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFGR3_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFGR3_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFGR3_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFGR3_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFGR3_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/******************* Bit definition for DMA_CFG4 register *******************/ -#define DMA_CFG4_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFG4_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFG4_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFG4_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFG4_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFG4_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFG4_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFG4_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFG4_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFG4_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFG4_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFG4_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFG4_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFG4_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFG4_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFG4_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFG4_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFG4_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/****************** Bit definition for DMA_CFG5 register *******************/ -#define DMA_CFG5_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFG5_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFG5_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFG5_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFG5_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFG5_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFG5_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFG5_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFG5_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFG5_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFG5_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFG5_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFG5_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFG5_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFG5_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFG5_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFG5_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFG5_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode enable */ - -/******************* Bit definition for DMA_CFG6 register *******************/ -#define DMA_CFG6_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFG6_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFG6_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFG6_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFG6_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFG6_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFG6_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFG6_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFG6_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFG6_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFG6_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFG6_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFG6_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFG6_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFG6_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFG6_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFG6_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFG6_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ - -/******************* Bit definition for DMA_CFG7 register *******************/ -#define DMA_CFG7_EN ((uint16_t)0x0001) /* Channel enable */ -#define DMA_CFG7_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ -#define DMA_CFG7_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ -#define DMA_CFG7_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ -#define DMA_CFG7_DIR ((uint16_t)0x0010) /* Data transfer direction */ -#define DMA_CFG7_CIRC ((uint16_t)0x0020) /* Circular mode */ -#define DMA_CFG7_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ -#define DMA_CFG7_MINC ((uint16_t)0x0080) /* Memory increment mode */ - -#define DMA_CFG7_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CFG7_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ -#define DMA_CFG7_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define DMA_CFG7_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ -#define DMA_CFG7_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ -#define DMA_CFG7_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define DMA_CFG7_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ -#define DMA_CFG7_PL_0 ((uint16_t)0x1000) /* Bit 0 */ -#define DMA_CFG7_PL_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define DMA_CFG7_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode enable */ - -/****************** Bit definition for DMA_CNTR1 register ******************/ -#define DMA_CNTR1_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR2 register ******************/ -#define DMA_CNTR2_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR3 register ******************/ -#define DMA_CNTR3_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR4 register ******************/ -#define DMA_CNTR4_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR5 register ******************/ -#define DMA_CNTR5_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR6 register ******************/ -#define DMA_CNTR6_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_CNTR7 register ******************/ -#define DMA_CNTR7_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ - -/****************** Bit definition for DMA_PADDR1 register *******************/ -#define DMA_PADDR1_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR2 register *******************/ -#define DMA_PADDR2_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR3 register *******************/ -#define DMA_PADDR3_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR4 register *******************/ -#define DMA_PADDR4_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR5 register *******************/ -#define DMA_PADDR5_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR6 register *******************/ -#define DMA_PADDR6_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_PADDR7 register *******************/ -#define DMA_PADDR7_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ - -/****************** Bit definition for DMA_MADDR1 register *******************/ -#define DMA_MADDR1_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR2 register *******************/ -#define DMA_MADDR2_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR3 register *******************/ -#define DMA_MADDR3_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR4 register *******************/ -#define DMA_MADDR4_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR5 register *******************/ -#define DMA_MADDR5_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR6 register *******************/ -#define DMA_MADDR6_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/****************** Bit definition for DMA_MADDR7 register *******************/ -#define DMA_MADDR7_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ - -/******************************************************************************/ -/* External Interrupt/Event Controller */ -/******************************************************************************/ - -/******************* Bit definition for EXTI_INTENR register *******************/ -#define EXTI_INTENR_MR0 ((uint32_t)0x00000001) /* Interrupt Mask on line 0 */ -#define EXTI_INTENR_MR1 ((uint32_t)0x00000002) /* Interrupt Mask on line 1 */ -#define EXTI_INTENR_MR2 ((uint32_t)0x00000004) /* Interrupt Mask on line 2 */ -#define EXTI_INTENR_MR3 ((uint32_t)0x00000008) /* Interrupt Mask on line 3 */ -#define EXTI_INTENR_MR4 ((uint32_t)0x00000010) /* Interrupt Mask on line 4 */ -#define EXTI_INTENR_MR5 ((uint32_t)0x00000020) /* Interrupt Mask on line 5 */ -#define EXTI_INTENR_MR6 ((uint32_t)0x00000040) /* Interrupt Mask on line 6 */ -#define EXTI_INTENR_MR7 ((uint32_t)0x00000080) /* Interrupt Mask on line 7 */ -#define EXTI_INTENR_MR8 ((uint32_t)0x00000100) /* Interrupt Mask on line 8 */ -#define EXTI_INTENR_MR9 ((uint32_t)0x00000200) /* Interrupt Mask on line 9 */ -#define EXTI_INTENR_MR10 ((uint32_t)0x00000400) /* Interrupt Mask on line 10 */ -#define EXTI_INTENR_MR11 ((uint32_t)0x00000800) /* Interrupt Mask on line 11 */ -#define EXTI_INTENR_MR12 ((uint32_t)0x00001000) /* Interrupt Mask on line 12 */ -#define EXTI_INTENR_MR13 ((uint32_t)0x00002000) /* Interrupt Mask on line 13 */ -#define EXTI_INTENR_MR14 ((uint32_t)0x00004000) /* Interrupt Mask on line 14 */ -#define EXTI_INTENR_MR15 ((uint32_t)0x00008000) /* Interrupt Mask on line 15 */ -#define EXTI_INTENR_MR16 ((uint32_t)0x00010000) /* Interrupt Mask on line 16 */ -#define EXTI_INTENR_MR17 ((uint32_t)0x00020000) /* Interrupt Mask on line 17 */ -#define EXTI_INTENR_MR18 ((uint32_t)0x00040000) /* Interrupt Mask on line 18 */ -#define EXTI_INTENR_MR19 ((uint32_t)0x00080000) /* Interrupt Mask on line 19 */ - -/******************* Bit definition for EXTI_EVENR register *******************/ -#define EXTI_EVENR_MR0 ((uint32_t)0x00000001) /* Event Mask on line 0 */ -#define EXTI_EVENR_MR1 ((uint32_t)0x00000002) /* Event Mask on line 1 */ -#define EXTI_EVENR_MR2 ((uint32_t)0x00000004) /* Event Mask on line 2 */ -#define EXTI_EVENR_MR3 ((uint32_t)0x00000008) /* Event Mask on line 3 */ -#define EXTI_EVENR_MR4 ((uint32_t)0x00000010) /* Event Mask on line 4 */ -#define EXTI_EVENR_MR5 ((uint32_t)0x00000020) /* Event Mask on line 5 */ -#define EXTI_EVENR_MR6 ((uint32_t)0x00000040) /* Event Mask on line 6 */ -#define EXTI_EVENR_MR7 ((uint32_t)0x00000080) /* Event Mask on line 7 */ -#define EXTI_EVENR_MR8 ((uint32_t)0x00000100) /* Event Mask on line 8 */ -#define EXTI_EVENR_MR9 ((uint32_t)0x00000200) /* Event Mask on line 9 */ -#define EXTI_EVENR_MR10 ((uint32_t)0x00000400) /* Event Mask on line 10 */ -#define EXTI_EVENR_MR11 ((uint32_t)0x00000800) /* Event Mask on line 11 */ -#define EXTI_EVENR_MR12 ((uint32_t)0x00001000) /* Event Mask on line 12 */ -#define EXTI_EVENR_MR13 ((uint32_t)0x00002000) /* Event Mask on line 13 */ -#define EXTI_EVENR_MR14 ((uint32_t)0x00004000) /* Event Mask on line 14 */ -#define EXTI_EVENR_MR15 ((uint32_t)0x00008000) /* Event Mask on line 15 */ -#define EXTI_EVENR_MR16 ((uint32_t)0x00010000) /* Event Mask on line 16 */ -#define EXTI_EVENR_MR17 ((uint32_t)0x00020000) /* Event Mask on line 17 */ -#define EXTI_EVENR_MR18 ((uint32_t)0x00040000) /* Event Mask on line 18 */ -#define EXTI_EVENR_MR19 ((uint32_t)0x00080000) /* Event Mask on line 19 */ - -/****************** Bit definition for EXTI_RTENR register *******************/ -#define EXTI_RTENR_TR0 ((uint32_t)0x00000001) /* Rising trigger event configuration bit of line 0 */ -#define EXTI_RTENR_TR1 ((uint32_t)0x00000002) /* Rising trigger event configuration bit of line 1 */ -#define EXTI_RTENR_TR2 ((uint32_t)0x00000004) /* Rising trigger event configuration bit of line 2 */ -#define EXTI_RTENR_TR3 ((uint32_t)0x00000008) /* Rising trigger event configuration bit of line 3 */ -#define EXTI_RTENR_TR4 ((uint32_t)0x00000010) /* Rising trigger event configuration bit of line 4 */ -#define EXTI_RTENR_TR5 ((uint32_t)0x00000020) /* Rising trigger event configuration bit of line 5 */ -#define EXTI_RTENR_TR6 ((uint32_t)0x00000040) /* Rising trigger event configuration bit of line 6 */ -#define EXTI_RTENR_TR7 ((uint32_t)0x00000080) /* Rising trigger event configuration bit of line 7 */ -#define EXTI_RTENR_TR8 ((uint32_t)0x00000100) /* Rising trigger event configuration bit of line 8 */ -#define EXTI_RTENR_TR9 ((uint32_t)0x00000200) /* Rising trigger event configuration bit of line 9 */ -#define EXTI_RTENR_TR10 ((uint32_t)0x00000400) /* Rising trigger event configuration bit of line 10 */ -#define EXTI_RTENR_TR11 ((uint32_t)0x00000800) /* Rising trigger event configuration bit of line 11 */ -#define EXTI_RTENR_TR12 ((uint32_t)0x00001000) /* Rising trigger event configuration bit of line 12 */ -#define EXTI_RTENR_TR13 ((uint32_t)0x00002000) /* Rising trigger event configuration bit of line 13 */ -#define EXTI_RTENR_TR14 ((uint32_t)0x00004000) /* Rising trigger event configuration bit of line 14 */ -#define EXTI_RTENR_TR15 ((uint32_t)0x00008000) /* Rising trigger event configuration bit of line 15 */ -#define EXTI_RTENR_TR16 ((uint32_t)0x00010000) /* Rising trigger event configuration bit of line 16 */ -#define EXTI_RTENR_TR17 ((uint32_t)0x00020000) /* Rising trigger event configuration bit of line 17 */ -#define EXTI_RTENR_TR18 ((uint32_t)0x00040000) /* Rising trigger event configuration bit of line 18 */ -#define EXTI_RTENR_TR19 ((uint32_t)0x00080000) /* Rising trigger event configuration bit of line 19 */ - -/****************** Bit definition for EXTI_FTENR register *******************/ -#define EXTI_FTENR_TR0 ((uint32_t)0x00000001) /* Falling trigger event configuration bit of line 0 */ -#define EXTI_FTENR_TR1 ((uint32_t)0x00000002) /* Falling trigger event configuration bit of line 1 */ -#define EXTI_FTENR_TR2 ((uint32_t)0x00000004) /* Falling trigger event configuration bit of line 2 */ -#define EXTI_FTENR_TR3 ((uint32_t)0x00000008) /* Falling trigger event configuration bit of line 3 */ -#define EXTI_FTENR_TR4 ((uint32_t)0x00000010) /* Falling trigger event configuration bit of line 4 */ -#define EXTI_FTENR_TR5 ((uint32_t)0x00000020) /* Falling trigger event configuration bit of line 5 */ -#define EXTI_FTENR_TR6 ((uint32_t)0x00000040) /* Falling trigger event configuration bit of line 6 */ -#define EXTI_FTENR_TR7 ((uint32_t)0x00000080) /* Falling trigger event configuration bit of line 7 */ -#define EXTI_FTENR_TR8 ((uint32_t)0x00000100) /* Falling trigger event configuration bit of line 8 */ -#define EXTI_FTENR_TR9 ((uint32_t)0x00000200) /* Falling trigger event configuration bit of line 9 */ -#define EXTI_FTENR_TR10 ((uint32_t)0x00000400) /* Falling trigger event configuration bit of line 10 */ -#define EXTI_FTENR_TR11 ((uint32_t)0x00000800) /* Falling trigger event configuration bit of line 11 */ -#define EXTI_FTENR_TR12 ((uint32_t)0x00001000) /* Falling trigger event configuration bit of line 12 */ -#define EXTI_FTENR_TR13 ((uint32_t)0x00002000) /* Falling trigger event configuration bit of line 13 */ -#define EXTI_FTENR_TR14 ((uint32_t)0x00004000) /* Falling trigger event configuration bit of line 14 */ -#define EXTI_FTENR_TR15 ((uint32_t)0x00008000) /* Falling trigger event configuration bit of line 15 */ -#define EXTI_FTENR_TR16 ((uint32_t)0x00010000) /* Falling trigger event configuration bit of line 16 */ -#define EXTI_FTENR_TR17 ((uint32_t)0x00020000) /* Falling trigger event configuration bit of line 17 */ -#define EXTI_FTENR_TR18 ((uint32_t)0x00040000) /* Falling trigger event configuration bit of line 18 */ -#define EXTI_FTENR_TR19 ((uint32_t)0x00080000) /* Falling trigger event configuration bit of line 19 */ - -/****************** Bit definition for EXTI_SWIEVR register ******************/ -#define EXTI_SWIEVR_SWIEVR0 ((uint32_t)0x00000001) /* Software Interrupt on line 0 */ -#define EXTI_SWIEVR_SWIEVR1 ((uint32_t)0x00000002) /* Software Interrupt on line 1 */ -#define EXTI_SWIEVR_SWIEVR2 ((uint32_t)0x00000004) /* Software Interrupt on line 2 */ -#define EXTI_SWIEVR_SWIEVR3 ((uint32_t)0x00000008) /* Software Interrupt on line 3 */ -#define EXTI_SWIEVR_SWIEVR4 ((uint32_t)0x00000010) /* Software Interrupt on line 4 */ -#define EXTI_SWIEVR_SWIEVR5 ((uint32_t)0x00000020) /* Software Interrupt on line 5 */ -#define EXTI_SWIEVR_SWIEVR6 ((uint32_t)0x00000040) /* Software Interrupt on line 6 */ -#define EXTI_SWIEVR_SWIEVR7 ((uint32_t)0x00000080) /* Software Interrupt on line 7 */ -#define EXTI_SWIEVR_SWIEVR8 ((uint32_t)0x00000100) /* Software Interrupt on line 8 */ -#define EXTI_SWIEVR_SWIEVR9 ((uint32_t)0x00000200) /* Software Interrupt on line 9 */ -#define EXTI_SWIEVR_SWIEVR10 ((uint32_t)0x00000400) /* Software Interrupt on line 10 */ -#define EXTI_SWIEVR_SWIEVR11 ((uint32_t)0x00000800) /* Software Interrupt on line 11 */ -#define EXTI_SWIEVR_SWIEVR12 ((uint32_t)0x00001000) /* Software Interrupt on line 12 */ -#define EXTI_SWIEVR_SWIEVR13 ((uint32_t)0x00002000) /* Software Interrupt on line 13 */ -#define EXTI_SWIEVR_SWIEVR14 ((uint32_t)0x00004000) /* Software Interrupt on line 14 */ -#define EXTI_SWIEVR_SWIEVR15 ((uint32_t)0x00008000) /* Software Interrupt on line 15 */ -#define EXTI_SWIEVR_SWIEVR16 ((uint32_t)0x00010000) /* Software Interrupt on line 16 */ -#define EXTI_SWIEVR_SWIEVR17 ((uint32_t)0x00020000) /* Software Interrupt on line 17 */ -#define EXTI_SWIEVR_SWIEVR18 ((uint32_t)0x00040000) /* Software Interrupt on line 18 */ -#define EXTI_SWIEVR_SWIEVR19 ((uint32_t)0x00080000) /* Software Interrupt on line 19 */ - -/******************* Bit definition for EXTI_INTFR register ********************/ -#define EXTI_INTF_INTF0 ((uint32_t)0x00000001) /* Pending bit for line 0 */ -#define EXTI_INTF_INTF1 ((uint32_t)0x00000002) /* Pending bit for line 1 */ -#define EXTI_INTF_INTF2 ((uint32_t)0x00000004) /* Pending bit for line 2 */ -#define EXTI_INTF_INTF3 ((uint32_t)0x00000008) /* Pending bit for line 3 */ -#define EXTI_INTF_INTF4 ((uint32_t)0x00000010) /* Pending bit for line 4 */ -#define EXTI_INTF_INTF5 ((uint32_t)0x00000020) /* Pending bit for line 5 */ -#define EXTI_INTF_INTF6 ((uint32_t)0x00000040) /* Pending bit for line 6 */ -#define EXTI_INTF_INTF7 ((uint32_t)0x00000080) /* Pending bit for line 7 */ -#define EXTI_INTF_INTF8 ((uint32_t)0x00000100) /* Pending bit for line 8 */ -#define EXTI_INTF_INTF9 ((uint32_t)0x00000200) /* Pending bit for line 9 */ -#define EXTI_INTF_INTF10 ((uint32_t)0x00000400) /* Pending bit for line 10 */ -#define EXTI_INTF_INTF11 ((uint32_t)0x00000800) /* Pending bit for line 11 */ -#define EXTI_INTF_INTF12 ((uint32_t)0x00001000) /* Pending bit for line 12 */ -#define EXTI_INTF_INTF13 ((uint32_t)0x00002000) /* Pending bit for line 13 */ -#define EXTI_INTF_INTF14 ((uint32_t)0x00004000) /* Pending bit for line 14 */ -#define EXTI_INTF_INTF15 ((uint32_t)0x00008000) /* Pending bit for line 15 */ -#define EXTI_INTF_INTF16 ((uint32_t)0x00010000) /* Pending bit for line 16 */ -#define EXTI_INTF_INTF17 ((uint32_t)0x00020000) /* Pending bit for line 17 */ -#define EXTI_INTF_INTF18 ((uint32_t)0x00040000) /* Pending bit for line 18 */ -#define EXTI_INTF_INTF19 ((uint32_t)0x00080000) /* Pending bit for line 19 */ - -/******************************************************************************/ -/* FLASH and Option Bytes Registers */ -/******************************************************************************/ - -/******************* Bit definition for FLASH_ACTLR register ******************/ -#define FLASH_ACTLR_LATENCY ((uint8_t)0x03) /* LATENCY[2:0] bits (Latency) */ -#define FLASH_ACTLR_LATENCY_0 ((uint8_t)0x00) /* Bit 0 */ -#define FLASH_ACTLR_LATENCY_1 ((uint8_t)0x01) /* Bit 0 */ -#define FLASH_ACTLR_LATENCY_2 ((uint8_t)0x02) /* Bit 1 */ - -#define FLASH_ACTLR_HLFCYA ((uint8_t)0x08) /* Flash Half Cycle Access Enable */ -#define FLASH_ACTLR_PRFTBE ((uint8_t)0x10) /* Prefetch Buffer Enable */ -#define FLASH_ACTLR_PRFTBS ((uint8_t)0x20) /* Prefetch Buffer Status */ - -/****************** Bit definition for FLASH_KEYR register ******************/ -#define FLASH_KEYR_FKEYR ((uint32_t)0xFFFFFFFF) /* FPEC Key */ - -/***************** Bit definition for FLASH_OBKEYR register ****************/ -#define FLASH_OBKEYR_OBKEYR ((uint32_t)0xFFFFFFFF) /* Option Byte Key */ - -/****************** Bit definition for FLASH_STATR register *******************/ -#define FLASH_STATR_BSY ((uint8_t)0x01) /* Busy */ -#define FLASH_STATR_PGERR ((uint8_t)0x04) /* Programming Error */ -#define FLASH_STATR_WRPRTERR ((uint8_t)0x10) /* Write Protection Error */ -#define FLASH_STATR_EOP ((uint8_t)0x20) /* End of operation */ - -/******************* Bit definition for FLASH_CTLR register *******************/ -#define FLASH_CTLR_PG ((uint16_t)0x0001) /* Programming */ -#define FLASH_CTLR_PER ((uint16_t)0x0002) /* Page Erase */ -#define FLASH_CTLR_MER ((uint16_t)0x0004) /* Mass Erase */ -#define FLASH_CTLR_OPTPG ((uint16_t)0x0010) /* Option Byte Programming */ -#define FLASH_CTLR_OPTER ((uint16_t)0x0020) /* Option Byte Erase */ -#define FLASH_CTLR_STRT ((uint16_t)0x0040) /* Start */ -#define FLASH_CTLR_LOCK ((uint16_t)0x0080) /* Lock */ -#define FLASH_CTLR_OPTWRE ((uint16_t)0x0200) /* Option Bytes Write Enable */ -#define FLASH_CTLR_ERRIE ((uint16_t)0x0400) /* Error Interrupt Enable */ -#define FLASH_CTLR_EOPIE ((uint16_t)0x1000) /* End of operation interrupt enable */ -#define FLASH_CTLR_PAGE_PG ((uint16_t)0x00010000) /* Page Programming 128Byte */ -#define FLASH_CTLR_PAGE_ER ((uint16_t)0x00020000) /* Page Erase 128Byte */ -#define FLASH_CTLR_BUF_LOAD ((uint16_t)0x00040000) /* Buffer Load */ -#define FLASH_CTLR_BUF_RST ((uint16_t)0x00080000) /* Buffer Reset */ - -/******************* Bit definition for FLASH_ADDR register *******************/ -#define FLASH_ADDR_FAR ((uint32_t)0xFFFFFFFF) /* Flash Address */ - -/****************** Bit definition for FLASH_OBR register *******************/ -#define FLASH_OBR_OPTERR ((uint16_t)0x0001) /* Option Byte Error */ -#define FLASH_OBR_RDPRT ((uint16_t)0x0002) /* Read protection */ - -#define FLASH_OBR_USER ((uint16_t)0x03FC) /* User Option Bytes */ -#define FLASH_OBR_WDG_SW ((uint16_t)0x0004) /* WDG_SW */ -#define FLASH_OBR_nRST_STOP ((uint16_t)0x0008) /* nRST_STOP */ -#define FLASH_OBR_nRST_STDBY ((uint16_t)0x0010) /* nRST_STDBY */ -#define FLASH_OBR_BFB2 ((uint16_t)0x0020) /* BFB2 */ - -/****************** Bit definition for FLASH_WPR register ******************/ -#define FLASH_WPR_WRP ((uint32_t)0xFFFFFFFF) /* Write Protect */ - -/****************** Bit definition for FLASH_RDPR register *******************/ -#define FLASH_RDPR_RDPR ((uint32_t)0x000000FF) /* Read protection option byte */ -#define FLASH_RDPR_nRDPR ((uint32_t)0x0000FF00) /* Read protection complemented option byte */ - -/****************** Bit definition for FLASH_USER register ******************/ -#define FLASH_USER_USER ((uint32_t)0x00FF0000) /* User option byte */ -#define FLASH_USER_nUSER ((uint32_t)0xFF000000) /* User complemented option byte */ - -/****************** Bit definition for FLASH_Data0 register *****************/ -#define FLASH_Data0_Data0 ((uint32_t)0x000000FF) /* User data storage option byte */ -#define FLASH_Data0_nData0 ((uint32_t)0x0000FF00) /* User data storage complemented option byte */ - -/****************** Bit definition for FLASH_Data1 register *****************/ -#define FLASH_Data1_Data1 ((uint32_t)0x00FF0000) /* User data storage option byte */ -#define FLASH_Data1_nData1 ((uint32_t)0xFF000000) /* User data storage complemented option byte */ - -/****************** Bit definition for FLASH_WRPR0 register ******************/ -#define FLASH_WRPR0_WRPR0 ((uint32_t)0x000000FF) /* Flash memory write protection option bytes */ -#define FLASH_WRPR0_nWRPR0 ((uint32_t)0x0000FF00) /* Flash memory write protection complemented option bytes */ - -/****************** Bit definition for FLASH_WRPR1 register ******************/ -#define FLASH_WRPR1_WRPR1 ((uint32_t)0x00FF0000) /* Flash memory write protection option bytes */ -#define FLASH_WRPR1_nWRPR1 ((uint32_t)0xFF000000) /* Flash memory write protection complemented option bytes */ - -/****************** Bit definition for FLASH_WRPR2 register ******************/ -#define FLASH_WRPR2_WRPR2 ((uint32_t)0x000000FF) /* Flash memory write protection option bytes */ -#define FLASH_WRPR2_nWRPR2 ((uint32_t)0x0000FF00) /* Flash memory write protection complemented option bytes */ - -/****************** Bit definition for FLASH_WRPR3 register ******************/ -#define FLASH_WRPR3_WRPR3 ((uint32_t)0x00FF0000) /* Flash memory write protection option bytes */ -#define FLASH_WRPR3_nWRPR3 ((uint32_t)0xFF000000) /* Flash memory write protection complemented option bytes */ - -/******************************************************************************/ -/* General Purpose and Alternate Function I/O */ -/******************************************************************************/ - -/******************* Bit definition for GPIO_CFGLR register *******************/ -#define GPIO_CFGLR_MODE ((uint32_t)0x33333333) /* Port x mode bits */ - -#define GPIO_CFGLR_MODE0 ((uint32_t)0x00000003) /* MODE0[1:0] bits (Port x mode bits, pin 0) */ -#define GPIO_CFGLR_MODE0_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define GPIO_CFGLR_MODE0_1 ((uint32_t)0x00000002) /* Bit 1 */ - -#define GPIO_CFGLR_MODE1 ((uint32_t)0x00000030) /* MODE1[1:0] bits (Port x mode bits, pin 1) */ -#define GPIO_CFGLR_MODE1_0 ((uint32_t)0x00000010) /* Bit 0 */ -#define GPIO_CFGLR_MODE1_1 ((uint32_t)0x00000020) /* Bit 1 */ - -#define GPIO_CFGLR_MODE2 ((uint32_t)0x00000300) /* MODE2[1:0] bits (Port x mode bits, pin 2) */ -#define GPIO_CFGLR_MODE2_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define GPIO_CFGLR_MODE2_1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define GPIO_CFGLR_MODE3 ((uint32_t)0x00003000) /* MODE3[1:0] bits (Port x mode bits, pin 3) */ -#define GPIO_CFGLR_MODE3_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define GPIO_CFGLR_MODE3_1 ((uint32_t)0x00002000) /* Bit 1 */ - -#define GPIO_CFGLR_MODE4 ((uint32_t)0x00030000) /* MODE4[1:0] bits (Port x mode bits, pin 4) */ -#define GPIO_CFGLR_MODE4_0 ((uint32_t)0x00010000) /* Bit 0 */ -#define GPIO_CFGLR_MODE4_1 ((uint32_t)0x00020000) /* Bit 1 */ - -#define GPIO_CFGLR_MODE5 ((uint32_t)0x00300000) /* MODE5[1:0] bits (Port x mode bits, pin 5) */ -#define GPIO_CFGLR_MODE5_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define GPIO_CFGLR_MODE5_1 ((uint32_t)0x00200000) /* Bit 1 */ - -#define GPIO_CFGLR_MODE6 ((uint32_t)0x03000000) /* MODE6[1:0] bits (Port x mode bits, pin 6) */ -#define GPIO_CFGLR_MODE6_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define GPIO_CFGLR_MODE6_1 ((uint32_t)0x02000000) /* Bit 1 */ - -#define GPIO_CFGLR_MODE7 ((uint32_t)0x30000000) /* MODE7[1:0] bits (Port x mode bits, pin 7) */ -#define GPIO_CFGLR_MODE7_0 ((uint32_t)0x10000000) /* Bit 0 */ -#define GPIO_CFGLR_MODE7_1 ((uint32_t)0x20000000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF ((uint32_t)0xCCCCCCCC) /* Port x configuration bits */ - -#define GPIO_CFGLR_CNF0 ((uint32_t)0x0000000C) /* CNF0[1:0] bits (Port x configuration bits, pin 0) */ -#define GPIO_CFGLR_CNF0_0 ((uint32_t)0x00000004) /* Bit 0 */ -#define GPIO_CFGLR_CNF0_1 ((uint32_t)0x00000008) /* Bit 1 */ - -#define GPIO_CFGLR_CNF1 ((uint32_t)0x000000C0) /* CNF1[1:0] bits (Port x configuration bits, pin 1) */ -#define GPIO_CFGLR_CNF1_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define GPIO_CFGLR_CNF1_1 ((uint32_t)0x00000080) /* Bit 1 */ - -#define GPIO_CFGLR_CNF2 ((uint32_t)0x00000C00) /* CNF2[1:0] bits (Port x configuration bits, pin 2) */ -#define GPIO_CFGLR_CNF2_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define GPIO_CFGLR_CNF2_1 ((uint32_t)0x00000800) /* Bit 1 */ - -#define GPIO_CFGLR_CNF3 ((uint32_t)0x0000C000) /* CNF3[1:0] bits (Port x configuration bits, pin 3) */ -#define GPIO_CFGLR_CNF3_0 ((uint32_t)0x00004000) /* Bit 0 */ -#define GPIO_CFGLR_CNF3_1 ((uint32_t)0x00008000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF4 ((uint32_t)0x000C0000) /* CNF4[1:0] bits (Port x configuration bits, pin 4) */ -#define GPIO_CFGLR_CNF4_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define GPIO_CFGLR_CNF4_1 ((uint32_t)0x00080000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF5 ((uint32_t)0x00C00000) /* CNF5[1:0] bits (Port x configuration bits, pin 5) */ -#define GPIO_CFGLR_CNF5_0 ((uint32_t)0x00400000) /* Bit 0 */ -#define GPIO_CFGLR_CNF5_1 ((uint32_t)0x00800000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF6 ((uint32_t)0x0C000000) /* CNF6[1:0] bits (Port x configuration bits, pin 6) */ -#define GPIO_CFGLR_CNF6_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define GPIO_CFGLR_CNF6_1 ((uint32_t)0x08000000) /* Bit 1 */ - -#define GPIO_CFGLR_CNF7 ((uint32_t)0xC0000000) /* CNF7[1:0] bits (Port x configuration bits, pin 7) */ -#define GPIO_CFGLR_CNF7_0 ((uint32_t)0x40000000) /* Bit 0 */ -#define GPIO_CFGLR_CNF7_1 ((uint32_t)0x80000000) /* Bit 1 */ - -/******************* Bit definition for GPIO_CFGHR register *******************/ -#define GPIO_CFGHR_MODE ((uint32_t)0x33333333) /* Port x mode bits */ - -#define GPIO_CFGHR_MODE8 ((uint32_t)0x00000003) /* MODE8[1:0] bits (Port x mode bits, pin 8) */ -#define GPIO_CFGHR_MODE8_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define GPIO_CFGHR_MODE8_1 ((uint32_t)0x00000002) /* Bit 1 */ - -#define GPIO_CFGHR_MODE9 ((uint32_t)0x00000030) /* MODE9[1:0] bits (Port x mode bits, pin 9) */ -#define GPIO_CFGHR_MODE9_0 ((uint32_t)0x00000010) /* Bit 0 */ -#define GPIO_CFGHR_MODE9_1 ((uint32_t)0x00000020) /* Bit 1 */ - -#define GPIO_CFGHR_MODE10 ((uint32_t)0x00000300) /* MODE10[1:0] bits (Port x mode bits, pin 10) */ -#define GPIO_CFGHR_MODE10_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define GPIO_CFGHR_MODE10_1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define GPIO_CFGHR_MODE11 ((uint32_t)0x00003000) /* MODE11[1:0] bits (Port x mode bits, pin 11) */ -#define GPIO_CFGHR_MODE11_0 ((uint32_t)0x00001000) /* Bit 0 */ -#define GPIO_CFGHR_MODE11_1 ((uint32_t)0x00002000) /* Bit 1 */ - -#define GPIO_CFGHR_MODE12 ((uint32_t)0x00030000) /* MODE12[1:0] bits (Port x mode bits, pin 12) */ -#define GPIO_CFGHR_MODE12_0 ((uint32_t)0x00010000) /* Bit 0 */ -#define GPIO_CFGHR_MODE12_1 ((uint32_t)0x00020000) /* Bit 1 */ - -#define GPIO_CFGHR_MODE13 ((uint32_t)0x00300000) /* MODE13[1:0] bits (Port x mode bits, pin 13) */ -#define GPIO_CFGHR_MODE13_0 ((uint32_t)0x00100000) /* Bit 0 */ -#define GPIO_CFGHR_MODE13_1 ((uint32_t)0x00200000) /* Bit 1 */ - -#define GPIO_CFGHR_MODE14 ((uint32_t)0x03000000) /* MODE14[1:0] bits (Port x mode bits, pin 14) */ -#define GPIO_CFGHR_MODE14_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define GPIO_CFGHR_MODE14_1 ((uint32_t)0x02000000) /* Bit 1 */ - -#define GPIO_CFGHR_MODE15 ((uint32_t)0x30000000) /* MODE15[1:0] bits (Port x mode bits, pin 15) */ -#define GPIO_CFGHR_MODE15_0 ((uint32_t)0x10000000) /* Bit 0 */ -#define GPIO_CFGHR_MODE15_1 ((uint32_t)0x20000000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF ((uint32_t)0xCCCCCCCC) /* Port x configuration bits */ - -#define GPIO_CFGHR_CNF8 ((uint32_t)0x0000000C) /* CNF8[1:0] bits (Port x configuration bits, pin 8) */ -#define GPIO_CFGHR_CNF8_0 ((uint32_t)0x00000004) /* Bit 0 */ -#define GPIO_CFGHR_CNF8_1 ((uint32_t)0x00000008) /* Bit 1 */ - -#define GPIO_CFGHR_CNF9 ((uint32_t)0x000000C0) /* CNF9[1:0] bits (Port x configuration bits, pin 9) */ -#define GPIO_CFGHR_CNF9_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define GPIO_CFGHR_CNF9_1 ((uint32_t)0x00000080) /* Bit 1 */ - -#define GPIO_CFGHR_CNF10 ((uint32_t)0x00000C00) /* CNF10[1:0] bits (Port x configuration bits, pin 10) */ -#define GPIO_CFGHR_CNF10_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define GPIO_CFGHR_CNF10_1 ((uint32_t)0x00000800) /* Bit 1 */ - -#define GPIO_CFGHR_CNF11 ((uint32_t)0x0000C000) /* CNF11[1:0] bits (Port x configuration bits, pin 11) */ -#define GPIO_CFGHR_CNF11_0 ((uint32_t)0x00004000) /* Bit 0 */ -#define GPIO_CFGHR_CNF11_1 ((uint32_t)0x00008000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF12 ((uint32_t)0x000C0000) /* CNF12[1:0] bits (Port x configuration bits, pin 12) */ -#define GPIO_CFGHR_CNF12_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define GPIO_CFGHR_CNF12_1 ((uint32_t)0x00080000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF13 ((uint32_t)0x00C00000) /* CNF13[1:0] bits (Port x configuration bits, pin 13) */ -#define GPIO_CFGHR_CNF13_0 ((uint32_t)0x00400000) /* Bit 0 */ -#define GPIO_CFGHR_CNF13_1 ((uint32_t)0x00800000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF14 ((uint32_t)0x0C000000) /* CNF14[1:0] bits (Port x configuration bits, pin 14) */ -#define GPIO_CFGHR_CNF14_0 ((uint32_t)0x04000000) /* Bit 0 */ -#define GPIO_CFGHR_CNF14_1 ((uint32_t)0x08000000) /* Bit 1 */ - -#define GPIO_CFGHR_CNF15 ((uint32_t)0xC0000000) /* CNF15[1:0] bits (Port x configuration bits, pin 15) */ -#define GPIO_CFGHR_CNF15_0 ((uint32_t)0x40000000) /* Bit 0 */ -#define GPIO_CFGHR_CNF15_1 ((uint32_t)0x80000000) /* Bit 1 */ - -/******************* Bit definition for GPIO_INDR register *******************/ -#define GPIO_INDR_IDR0 ((uint16_t)0x0001) /* Port input data, bit 0 */ -#define GPIO_INDR_IDR1 ((uint16_t)0x0002) /* Port input data, bit 1 */ -#define GPIO_INDR_IDR2 ((uint16_t)0x0004) /* Port input data, bit 2 */ -#define GPIO_INDR_IDR3 ((uint16_t)0x0008) /* Port input data, bit 3 */ -#define GPIO_INDR_IDR4 ((uint16_t)0x0010) /* Port input data, bit 4 */ -#define GPIO_INDR_IDR5 ((uint16_t)0x0020) /* Port input data, bit 5 */ -#define GPIO_INDR_IDR6 ((uint16_t)0x0040) /* Port input data, bit 6 */ -#define GPIO_INDR_IDR7 ((uint16_t)0x0080) /* Port input data, bit 7 */ -#define GPIO_INDR_IDR8 ((uint16_t)0x0100) /* Port input data, bit 8 */ -#define GPIO_INDR_IDR9 ((uint16_t)0x0200) /* Port input data, bit 9 */ -#define GPIO_INDR_IDR10 ((uint16_t)0x0400) /* Port input data, bit 10 */ -#define GPIO_INDR_IDR11 ((uint16_t)0x0800) /* Port input data, bit 11 */ -#define GPIO_INDR_IDR12 ((uint16_t)0x1000) /* Port input data, bit 12 */ -#define GPIO_INDR_IDR13 ((uint16_t)0x2000) /* Port input data, bit 13 */ -#define GPIO_INDR_IDR14 ((uint16_t)0x4000) /* Port input data, bit 14 */ -#define GPIO_INDR_IDR15 ((uint16_t)0x8000) /* Port input data, bit 15 */ - -/******************* Bit definition for GPIO_OUTDR register *******************/ -#define GPIO_OUTDR_ODR0 ((uint16_t)0x0001) /* Port output data, bit 0 */ -#define GPIO_OUTDR_ODR1 ((uint16_t)0x0002) /* Port output data, bit 1 */ -#define GPIO_OUTDR_ODR2 ((uint16_t)0x0004) /* Port output data, bit 2 */ -#define GPIO_OUTDR_ODR3 ((uint16_t)0x0008) /* Port output data, bit 3 */ -#define GPIO_OUTDR_ODR4 ((uint16_t)0x0010) /* Port output data, bit 4 */ -#define GPIO_OUTDR_ODR5 ((uint16_t)0x0020) /* Port output data, bit 5 */ -#define GPIO_OUTDR_ODR6 ((uint16_t)0x0040) /* Port output data, bit 6 */ -#define GPIO_OUTDR_ODR7 ((uint16_t)0x0080) /* Port output data, bit 7 */ -#define GPIO_OUTDR_ODR8 ((uint16_t)0x0100) /* Port output data, bit 8 */ -#define GPIO_OUTDR_ODR9 ((uint16_t)0x0200) /* Port output data, bit 9 */ -#define GPIO_OUTDR_ODR10 ((uint16_t)0x0400) /* Port output data, bit 10 */ -#define GPIO_OUTDR_ODR11 ((uint16_t)0x0800) /* Port output data, bit 11 */ -#define GPIO_OUTDR_ODR12 ((uint16_t)0x1000) /* Port output data, bit 12 */ -#define GPIO_OUTDR_ODR13 ((uint16_t)0x2000) /* Port output data, bit 13 */ -#define GPIO_OUTDR_ODR14 ((uint16_t)0x4000) /* Port output data, bit 14 */ -#define GPIO_OUTDR_ODR15 ((uint16_t)0x8000) /* Port output data, bit 15 */ - -/****************** Bit definition for GPIO_BSHR register *******************/ -#define GPIO_BSHR_BS0 ((uint32_t)0x00000001) /* Port x Set bit 0 */ -#define GPIO_BSHR_BS1 ((uint32_t)0x00000002) /* Port x Set bit 1 */ -#define GPIO_BSHR_BS2 ((uint32_t)0x00000004) /* Port x Set bit 2 */ -#define GPIO_BSHR_BS3 ((uint32_t)0x00000008) /* Port x Set bit 3 */ -#define GPIO_BSHR_BS4 ((uint32_t)0x00000010) /* Port x Set bit 4 */ -#define GPIO_BSHR_BS5 ((uint32_t)0x00000020) /* Port x Set bit 5 */ -#define GPIO_BSHR_BS6 ((uint32_t)0x00000040) /* Port x Set bit 6 */ -#define GPIO_BSHR_BS7 ((uint32_t)0x00000080) /* Port x Set bit 7 */ -#define GPIO_BSHR_BS8 ((uint32_t)0x00000100) /* Port x Set bit 8 */ -#define GPIO_BSHR_BS9 ((uint32_t)0x00000200) /* Port x Set bit 9 */ -#define GPIO_BSHR_BS10 ((uint32_t)0x00000400) /* Port x Set bit 10 */ -#define GPIO_BSHR_BS11 ((uint32_t)0x00000800) /* Port x Set bit 11 */ -#define GPIO_BSHR_BS12 ((uint32_t)0x00001000) /* Port x Set bit 12 */ -#define GPIO_BSHR_BS13 ((uint32_t)0x00002000) /* Port x Set bit 13 */ -#define GPIO_BSHR_BS14 ((uint32_t)0x00004000) /* Port x Set bit 14 */ -#define GPIO_BSHR_BS15 ((uint32_t)0x00008000) /* Port x Set bit 15 */ - -#define GPIO_BSHR_BR0 ((uint32_t)0x00010000) /* Port x Reset bit 0 */ -#define GPIO_BSHR_BR1 ((uint32_t)0x00020000) /* Port x Reset bit 1 */ -#define GPIO_BSHR_BR2 ((uint32_t)0x00040000) /* Port x Reset bit 2 */ -#define GPIO_BSHR_BR3 ((uint32_t)0x00080000) /* Port x Reset bit 3 */ -#define GPIO_BSHR_BR4 ((uint32_t)0x00100000) /* Port x Reset bit 4 */ -#define GPIO_BSHR_BR5 ((uint32_t)0x00200000) /* Port x Reset bit 5 */ -#define GPIO_BSHR_BR6 ((uint32_t)0x00400000) /* Port x Reset bit 6 */ -#define GPIO_BSHR_BR7 ((uint32_t)0x00800000) /* Port x Reset bit 7 */ -#define GPIO_BSHR_BR8 ((uint32_t)0x01000000) /* Port x Reset bit 8 */ -#define GPIO_BSHR_BR9 ((uint32_t)0x02000000) /* Port x Reset bit 9 */ -#define GPIO_BSHR_BR10 ((uint32_t)0x04000000) /* Port x Reset bit 10 */ -#define GPIO_BSHR_BR11 ((uint32_t)0x08000000) /* Port x Reset bit 11 */ -#define GPIO_BSHR_BR12 ((uint32_t)0x10000000) /* Port x Reset bit 12 */ -#define GPIO_BSHR_BR13 ((uint32_t)0x20000000) /* Port x Reset bit 13 */ -#define GPIO_BSHR_BR14 ((uint32_t)0x40000000) /* Port x Reset bit 14 */ -#define GPIO_BSHR_BR15 ((uint32_t)0x80000000) /* Port x Reset bit 15 */ - -/******************* Bit definition for GPIO_BCR register *******************/ -#define GPIO_BCR_BR0 ((uint16_t)0x0001) /* Port x Reset bit 0 */ -#define GPIO_BCR_BR1 ((uint16_t)0x0002) /* Port x Reset bit 1 */ -#define GPIO_BCR_BR2 ((uint16_t)0x0004) /* Port x Reset bit 2 */ -#define GPIO_BCR_BR3 ((uint16_t)0x0008) /* Port x Reset bit 3 */ -#define GPIO_BCR_BR4 ((uint16_t)0x0010) /* Port x Reset bit 4 */ -#define GPIO_BCR_BR5 ((uint16_t)0x0020) /* Port x Reset bit 5 */ -#define GPIO_BCR_BR6 ((uint16_t)0x0040) /* Port x Reset bit 6 */ -#define GPIO_BCR_BR7 ((uint16_t)0x0080) /* Port x Reset bit 7 */ -#define GPIO_BCR_BR8 ((uint16_t)0x0100) /* Port x Reset bit 8 */ -#define GPIO_BCR_BR9 ((uint16_t)0x0200) /* Port x Reset bit 9 */ -#define GPIO_BCR_BR10 ((uint16_t)0x0400) /* Port x Reset bit 10 */ -#define GPIO_BCR_BR11 ((uint16_t)0x0800) /* Port x Reset bit 11 */ -#define GPIO_BCR_BR12 ((uint16_t)0x1000) /* Port x Reset bit 12 */ -#define GPIO_BCR_BR13 ((uint16_t)0x2000) /* Port x Reset bit 13 */ -#define GPIO_BCR_BR14 ((uint16_t)0x4000) /* Port x Reset bit 14 */ -#define GPIO_BCR_BR15 ((uint16_t)0x8000) /* Port x Reset bit 15 */ - -/****************** Bit definition for GPIO_LCKR register *******************/ -#define GPIO_LCK0 ((uint32_t)0x00000001) /* Port x Lock bit 0 */ -#define GPIO_LCK1 ((uint32_t)0x00000002) /* Port x Lock bit 1 */ -#define GPIO_LCK2 ((uint32_t)0x00000004) /* Port x Lock bit 2 */ -#define GPIO_LCK3 ((uint32_t)0x00000008) /* Port x Lock bit 3 */ -#define GPIO_LCK4 ((uint32_t)0x00000010) /* Port x Lock bit 4 */ -#define GPIO_LCK5 ((uint32_t)0x00000020) /* Port x Lock bit 5 */ -#define GPIO_LCK6 ((uint32_t)0x00000040) /* Port x Lock bit 6 */ -#define GPIO_LCK7 ((uint32_t)0x00000080) /* Port x Lock bit 7 */ -#define GPIO_LCK8 ((uint32_t)0x00000100) /* Port x Lock bit 8 */ -#define GPIO_LCK9 ((uint32_t)0x00000200) /* Port x Lock bit 9 */ -#define GPIO_LCK10 ((uint32_t)0x00000400) /* Port x Lock bit 10 */ -#define GPIO_LCK11 ((uint32_t)0x00000800) /* Port x Lock bit 11 */ -#define GPIO_LCK12 ((uint32_t)0x00001000) /* Port x Lock bit 12 */ -#define GPIO_LCK13 ((uint32_t)0x00002000) /* Port x Lock bit 13 */ -#define GPIO_LCK14 ((uint32_t)0x00004000) /* Port x Lock bit 14 */ -#define GPIO_LCK15 ((uint32_t)0x00008000) /* Port x Lock bit 15 */ -#define GPIO_LCKK ((uint32_t)0x00010000) /* Lock key */ - -/****************** Bit definition for AFIO_ECR register *******************/ -#define AFIO_ECR_PIN ((uint8_t)0x0F) /* PIN[3:0] bits (Pin selection) */ -#define AFIO_ECR_PIN_0 ((uint8_t)0x01) /* Bit 0 */ -#define AFIO_ECR_PIN_1 ((uint8_t)0x02) /* Bit 1 */ -#define AFIO_ECR_PIN_2 ((uint8_t)0x04) /* Bit 2 */ -#define AFIO_ECR_PIN_3 ((uint8_t)0x08) /* Bit 3 */ - -#define AFIO_ECR_PIN_PX0 ((uint8_t)0x00) /* Pin 0 selected */ -#define AFIO_ECR_PIN_PX1 ((uint8_t)0x01) /* Pin 1 selected */ -#define AFIO_ECR_PIN_PX2 ((uint8_t)0x02) /* Pin 2 selected */ -#define AFIO_ECR_PIN_PX3 ((uint8_t)0x03) /* Pin 3 selected */ -#define AFIO_ECR_PIN_PX4 ((uint8_t)0x04) /* Pin 4 selected */ -#define AFIO_ECR_PIN_PX5 ((uint8_t)0x05) /* Pin 5 selected */ -#define AFIO_ECR_PIN_PX6 ((uint8_t)0x06) /* Pin 6 selected */ -#define AFIO_ECR_PIN_PX7 ((uint8_t)0x07) /* Pin 7 selected */ -#define AFIO_ECR_PIN_PX8 ((uint8_t)0x08) /* Pin 8 selected */ -#define AFIO_ECR_PIN_PX9 ((uint8_t)0x09) /* Pin 9 selected */ -#define AFIO_ECR_PIN_PX10 ((uint8_t)0x0A) /* Pin 10 selected */ -#define AFIO_ECR_PIN_PX11 ((uint8_t)0x0B) /* Pin 11 selected */ -#define AFIO_ECR_PIN_PX12 ((uint8_t)0x0C) /* Pin 12 selected */ -#define AFIO_ECR_PIN_PX13 ((uint8_t)0x0D) /* Pin 13 selected */ -#define AFIO_ECR_PIN_PX14 ((uint8_t)0x0E) /* Pin 14 selected */ -#define AFIO_ECR_PIN_PX15 ((uint8_t)0x0F) /* Pin 15 selected */ - -#define AFIO_ECR_PORT ((uint8_t)0x70) /* PORT[2:0] bits (Port selection) */ -#define AFIO_ECR_PORT_0 ((uint8_t)0x10) /* Bit 0 */ -#define AFIO_ECR_PORT_1 ((uint8_t)0x20) /* Bit 1 */ -#define AFIO_ECR_PORT_2 ((uint8_t)0x40) /* Bit 2 */ - -#define AFIO_ECR_PORT_PA ((uint8_t)0x00) /* Port A selected */ -#define AFIO_ECR_PORT_PB ((uint8_t)0x10) /* Port B selected */ -#define AFIO_ECR_PORT_PC ((uint8_t)0x20) /* Port C selected */ -#define AFIO_ECR_PORT_PD ((uint8_t)0x30) /* Port D selected */ -#define AFIO_ECR_PORT_PE ((uint8_t)0x40) /* Port E selected */ - -#define AFIO_ECR_EVOE ((uint8_t)0x80) /* Event Output Enable */ - -/****************** Bit definition for AFIO_PCFR1register *******************/ -#define AFIO_PCFR1_SPI1_REMAP ((uint32_t)0x00000001) /* SPI1 remapping */ -#define AFIO_PCFR1_I2C1_REMAP ((uint32_t)0x00000002) /* I2C1 remapping */ -#define AFIO_PCFR1_USART1_REMAP ((uint32_t)0x00000004) /* USART1 remapping */ -#define AFIO_PCFR1_USART2_REMAP ((uint32_t)0x00000008) /* USART2 remapping */ - -#define AFIO_PCFR1_USART3_REMAP ((uint32_t)0x00000030) /* USART3_REMAP[1:0] bits (USART3 remapping) */ -#define AFIO_PCFR1_USART3_REMAP_0 ((uint32_t)0x00000010) /* Bit 0 */ -#define AFIO_PCFR1_USART3_REMAP_1 ((uint32_t)0x00000020) /* Bit 1 */ - -#define AFIO_PCFR1_USART3_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */ -#define AFIO_PCFR1_USART3_REMAP_PARTIALREMAP ((uint32_t)0x00000010) /* Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */ -#define AFIO_PCFR1_USART3_REMAP_FULLREMAP ((uint32_t)0x00000030) /* Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */ - -#define AFIO_PCFR1_TIM1_REMAP ((uint32_t)0x000000C0) /* TIM1_REMAP[1:0] bits (TIM1 remapping) */ -#define AFIO_PCFR1_TIM1_REMAP_0 ((uint32_t)0x00000040) /* Bit 0 */ -#define AFIO_PCFR1_TIM1_REMAP_1 ((uint32_t)0x00000080) /* Bit 1 */ - -#define AFIO_PCFR1_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_PCFR1_TIM1_REMAP_PARTIALREMAP ((uint32_t)0x00000040) /* Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */ -#define AFIO_PCFR1_TIM1_REMAP_FULLREMAP ((uint32_t)0x000000C0) /* Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */ - -#define AFIO_PCFR1_TIM2_REMAP ((uint32_t)0x00000300) /* TIM2_REMAP[1:0] bits (TIM2 remapping) */ -#define AFIO_PCFR1_TIM2_REMAP_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define AFIO_PCFR1_TIM2_REMAP_1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define AFIO_PCFR1_TIM2_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */ -#define AFIO_PCFR1_TIM2_REMAP_PARTIALREMAP1 ((uint32_t)0x00000100) /* Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */ -#define AFIO_PCFR1_TIM2_REMAP_PARTIALREMAP2 ((uint32_t)0x00000200) /* Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */ -#define AFIO_PCFR1_TIM2_REMAP_FULLREMAP ((uint32_t)0x00000300) /* Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */ - -#define AFIO_PCFR1_TIM3_REMAP ((uint32_t)0x00000C00) /* TIM3_REMAP[1:0] bits (TIM3 remapping) */ -#define AFIO_PCFR1_TIM3_REMAP_0 ((uint32_t)0x00000400) /* Bit 0 */ -#define AFIO_PCFR1_TIM3_REMAP_1 ((uint32_t)0x00000800) /* Bit 1 */ - -#define AFIO_PCFR1_TIM3_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */ -#define AFIO_PCFR1_TIM3_REMAP_PARTIALREMAP ((uint32_t)0x00000800) /* Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */ -#define AFIO_PCFR1_TIM3_REMAP_FULLREMAP ((uint32_t)0x00000C00) /* Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */ - -#define AFIO_PCFR1_TIM4_REMAP ((uint32_t)0x00001000) /* TIM4_REMAP bit (TIM4 remapping) */ - -#define AFIO_PCFR1_CAN_REMAP ((uint32_t)0x00006000) /* CAN_REMAP[1:0] bits (CAN Alternate function remapping) */ -#define AFIO_PCFR1_CAN_REMAP_0 ((uint32_t)0x00002000) /* Bit 0 */ -#define AFIO_PCFR1_CAN_REMAP_1 ((uint32_t)0x00004000) /* Bit 1 */ - -#define AFIO_PCFR1_CAN_REMAP_REMAP1 ((uint32_t)0x00000000) /* CANRX mapped to PA11, CANTX mapped to PA12 */ -#define AFIO_PCFR1_CAN_REMAP_REMAP2 ((uint32_t)0x00004000) /* CANRX mapped to PB8, CANTX mapped to PB9 */ -#define AFIO_PCFR1_CAN_REMAP_REMAP3 ((uint32_t)0x00006000) /* CANRX mapped to PD0, CANTX mapped to PD1 */ - -#define AFIO_PCFR1_PD01_REMAP ((uint32_t)0x00008000) /* Port D0/Port D1 mapping on OSC_IN/OSC_OUT */ -#define AFIO_PCFR1_TIM5CH4_IREMAP ((uint32_t)0x00010000) /* TIM5 Channel4 Internal Remap */ -#define AFIO_PCFR1_ADC1_ETRGINJ_REMAP ((uint32_t)0x00020000) /* ADC 1 External Trigger Injected Conversion remapping */ -#define AFIO_PCFR1_ADC1_ETRGREG_REMAP ((uint32_t)0x00040000) /* ADC 1 External Trigger Regular Conversion remapping */ -#define AFIO_PCFR1_ADC2_ETRGINJ_REMAP ((uint32_t)0x00080000) /* ADC 2 External Trigger Injected Conversion remapping */ -#define AFIO_PCFR1_ADC2_ETRGREG_REMAP ((uint32_t)0x00100000) /* ADC 2 External Trigger Regular Conversion remapping */ - -#define AFIO_PCFR1_SWJ_CFG ((uint32_t)0x07000000) /* SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */ -#define AFIO_PCFR1_SWJ_CFG_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define AFIO_PCFR1_SWJ_CFG_1 ((uint32_t)0x02000000) /* Bit 1 */ -#define AFIO_PCFR1_SWJ_CFG_2 ((uint32_t)0x04000000) /* Bit 2 */ - -#define AFIO_PCFR1_SWJ_CFG_RESET ((uint32_t)0x00000000) /* Full SWJ (JTAG-DP + SW-DP) : Reset State */ -#define AFIO_PCFR1_SWJ_CFG_NOJNTRST ((uint32_t)0x01000000) /* Full SWJ (JTAG-DP + SW-DP) but without JNTRST */ -#define AFIO_PCFR1_SWJ_CFG_JTAGDISABLE ((uint32_t)0x02000000) /* JTAG-DP Disabled and SW-DP Enabled */ -#define AFIO_PCFR1_SWJ_CFG_DISABLE ((uint32_t)0x04000000) /* JTAG-DP Disabled and SW-DP Disabled */ - -/***************** Bit definition for AFIO_EXTICR1 register *****************/ -#define AFIO_EXTICR1_EXTI0 ((uint16_t)0x000F) /* EXTI 0 configuration */ -#define AFIO_EXTICR1_EXTI1 ((uint16_t)0x00F0) /* EXTI 1 configuration */ -#define AFIO_EXTICR1_EXTI2 ((uint16_t)0x0F00) /* EXTI 2 configuration */ -#define AFIO_EXTICR1_EXTI3 ((uint16_t)0xF000) /* EXTI 3 configuration */ - -#define AFIO_EXTICR1_EXTI0_PA ((uint16_t)0x0000) /* PA[0] pin */ -#define AFIO_EXTICR1_EXTI0_PB ((uint16_t)0x0001) /* PB[0] pin */ -#define AFIO_EXTICR1_EXTI0_PC ((uint16_t)0x0002) /* PC[0] pin */ -#define AFIO_EXTICR1_EXTI0_PD ((uint16_t)0x0003) /* PD[0] pin */ -#define AFIO_EXTICR1_EXTI0_PE ((uint16_t)0x0004) /* PE[0] pin */ -#define AFIO_EXTICR1_EXTI0_PF ((uint16_t)0x0005) /* PF[0] pin */ -#define AFIO_EXTICR1_EXTI0_PG ((uint16_t)0x0006) /* PG[0] pin */ - -#define AFIO_EXTICR1_EXTI1_PA ((uint16_t)0x0000) /* PA[1] pin */ -#define AFIO_EXTICR1_EXTI1_PB ((uint16_t)0x0010) /* PB[1] pin */ -#define AFIO_EXTICR1_EXTI1_PC ((uint16_t)0x0020) /* PC[1] pin */ -#define AFIO_EXTICR1_EXTI1_PD ((uint16_t)0x0030) /* PD[1] pin */ -#define AFIO_EXTICR1_EXTI1_PE ((uint16_t)0x0040) /* PE[1] pin */ -#define AFIO_EXTICR1_EXTI1_PF ((uint16_t)0x0050) /* PF[1] pin */ -#define AFIO_EXTICR1_EXTI1_PG ((uint16_t)0x0060) /* PG[1] pin */ - -#define AFIO_EXTICR1_EXTI2_PA ((uint16_t)0x0000) /* PA[2] pin */ -#define AFIO_EXTICR1_EXTI2_PB ((uint16_t)0x0100) /* PB[2] pin */ -#define AFIO_EXTICR1_EXTI2_PC ((uint16_t)0x0200) /* PC[2] pin */ -#define AFIO_EXTICR1_EXTI2_PD ((uint16_t)0x0300) /* PD[2] pin */ -#define AFIO_EXTICR1_EXTI2_PE ((uint16_t)0x0400) /* PE[2] pin */ -#define AFIO_EXTICR1_EXTI2_PF ((uint16_t)0x0500) /* PF[2] pin */ -#define AFIO_EXTICR1_EXTI2_PG ((uint16_t)0x0600) /* PG[2] pin */ - -#define AFIO_EXTICR1_EXTI3_PA ((uint16_t)0x0000) /* PA[3] pin */ -#define AFIO_EXTICR1_EXTI3_PB ((uint16_t)0x1000) /* PB[3] pin */ -#define AFIO_EXTICR1_EXTI3_PC ((uint16_t)0x2000) /* PC[3] pin */ -#define AFIO_EXTICR1_EXTI3_PD ((uint16_t)0x3000) /* PD[3] pin */ -#define AFIO_EXTICR1_EXTI3_PE ((uint16_t)0x4000) /* PE[3] pin */ -#define AFIO_EXTICR1_EXTI3_PF ((uint16_t)0x5000) /* PF[3] pin */ -#define AFIO_EXTICR1_EXTI3_PG ((uint16_t)0x6000) /* PG[3] pin */ - -/***************** Bit definition for AFIO_EXTICR2 register *****************/ -#define AFIO_EXTICR2_EXTI4 ((uint16_t)0x000F) /* EXTI 4 configuration */ -#define AFIO_EXTICR2_EXTI5 ((uint16_t)0x00F0) /* EXTI 5 configuration */ -#define AFIO_EXTICR2_EXTI6 ((uint16_t)0x0F00) /* EXTI 6 configuration */ -#define AFIO_EXTICR2_EXTI7 ((uint16_t)0xF000) /* EXTI 7 configuration */ - -#define AFIO_EXTICR2_EXTI4_PA ((uint16_t)0x0000) /* PA[4] pin */ -#define AFIO_EXTICR2_EXTI4_PB ((uint16_t)0x0001) /* PB[4] pin */ -#define AFIO_EXTICR2_EXTI4_PC ((uint16_t)0x0002) /* PC[4] pin */ -#define AFIO_EXTICR2_EXTI4_PD ((uint16_t)0x0003) /* PD[4] pin */ -#define AFIO_EXTICR2_EXTI4_PE ((uint16_t)0x0004) /* PE[4] pin */ -#define AFIO_EXTICR2_EXTI4_PF ((uint16_t)0x0005) /* PF[4] pin */ -#define AFIO_EXTICR2_EXTI4_PG ((uint16_t)0x0006) /* PG[4] pin */ - -#define AFIO_EXTICR2_EXTI5_PA ((uint16_t)0x0000) /* PA[5] pin */ -#define AFIO_EXTICR2_EXTI5_PB ((uint16_t)0x0010) /* PB[5] pin */ -#define AFIO_EXTICR2_EXTI5_PC ((uint16_t)0x0020) /* PC[5] pin */ -#define AFIO_EXTICR2_EXTI5_PD ((uint16_t)0x0030) /* PD[5] pin */ -#define AFIO_EXTICR2_EXTI5_PE ((uint16_t)0x0040) /* PE[5] pin */ -#define AFIO_EXTICR2_EXTI5_PF ((uint16_t)0x0050) /* PF[5] pin */ -#define AFIO_EXTICR2_EXTI5_PG ((uint16_t)0x0060) /* PG[5] pin */ - -#define AFIO_EXTICR2_EXTI6_PA ((uint16_t)0x0000) /* PA[6] pin */ -#define AFIO_EXTICR2_EXTI6_PB ((uint16_t)0x0100) /* PB[6] pin */ -#define AFIO_EXTICR2_EXTI6_PC ((uint16_t)0x0200) /* PC[6] pin */ -#define AFIO_EXTICR2_EXTI6_PD ((uint16_t)0x0300) /* PD[6] pin */ -#define AFIO_EXTICR2_EXTI6_PE ((uint16_t)0x0400) /* PE[6] pin */ -#define AFIO_EXTICR2_EXTI6_PF ((uint16_t)0x0500) /* PF[6] pin */ -#define AFIO_EXTICR2_EXTI6_PG ((uint16_t)0x0600) /* PG[6] pin */ - -#define AFIO_EXTICR2_EXTI7_PA ((uint16_t)0x0000) /* PA[7] pin */ -#define AFIO_EXTICR2_EXTI7_PB ((uint16_t)0x1000) /* PB[7] pin */ -#define AFIO_EXTICR2_EXTI7_PC ((uint16_t)0x2000) /* PC[7] pin */ -#define AFIO_EXTICR2_EXTI7_PD ((uint16_t)0x3000) /* PD[7] pin */ -#define AFIO_EXTICR2_EXTI7_PE ((uint16_t)0x4000) /* PE[7] pin */ -#define AFIO_EXTICR2_EXTI7_PF ((uint16_t)0x5000) /* PF[7] pin */ -#define AFIO_EXTICR2_EXTI7_PG ((uint16_t)0x6000) /* PG[7] pin */ - -/***************** Bit definition for AFIO_EXTICR3 register *****************/ -#define AFIO_EXTICR3_EXTI8 ((uint16_t)0x000F) /* EXTI 8 configuration */ -#define AFIO_EXTICR3_EXTI9 ((uint16_t)0x00F0) /* EXTI 9 configuration */ -#define AFIO_EXTICR3_EXTI10 ((uint16_t)0x0F00) /* EXTI 10 configuration */ -#define AFIO_EXTICR3_EXTI11 ((uint16_t)0xF000) /* EXTI 11 configuration */ - -#define AFIO_EXTICR3_EXTI8_PA ((uint16_t)0x0000) /* PA[8] pin */ -#define AFIO_EXTICR3_EXTI8_PB ((uint16_t)0x0001) /* PB[8] pin */ -#define AFIO_EXTICR3_EXTI8_PC ((uint16_t)0x0002) /* PC[8] pin */ -#define AFIO_EXTICR3_EXTI8_PD ((uint16_t)0x0003) /* PD[8] pin */ -#define AFIO_EXTICR3_EXTI8_PE ((uint16_t)0x0004) /* PE[8] pin */ -#define AFIO_EXTICR3_EXTI8_PF ((uint16_t)0x0005) /* PF[8] pin */ -#define AFIO_EXTICR3_EXTI8_PG ((uint16_t)0x0006) /* PG[8] pin */ - -#define AFIO_EXTICR3_EXTI9_PA ((uint16_t)0x0000) /* PA[9] pin */ -#define AFIO_EXTICR3_EXTI9_PB ((uint16_t)0x0010) /* PB[9] pin */ -#define AFIO_EXTICR3_EXTI9_PC ((uint16_t)0x0020) /* PC[9] pin */ -#define AFIO_EXTICR3_EXTI9_PD ((uint16_t)0x0030) /* PD[9] pin */ -#define AFIO_EXTICR3_EXTI9_PE ((uint16_t)0x0040) /* PE[9] pin */ -#define AFIO_EXTICR3_EXTI9_PF ((uint16_t)0x0050) /* PF[9] pin */ -#define AFIO_EXTICR3_EXTI9_PG ((uint16_t)0x0060) /* PG[9] pin */ - -#define AFIO_EXTICR3_EXTI10_PA ((uint16_t)0x0000) /* PA[10] pin */ -#define AFIO_EXTICR3_EXTI10_PB ((uint16_t)0x0100) /* PB[10] pin */ -#define AFIO_EXTICR3_EXTI10_PC ((uint16_t)0x0200) /* PC[10] pin */ -#define AFIO_EXTICR3_EXTI10_PD ((uint16_t)0x0300) /* PD[10] pin */ -#define AFIO_EXTICR3_EXTI10_PE ((uint16_t)0x0400) /* PE[10] pin */ -#define AFIO_EXTICR3_EXTI10_PF ((uint16_t)0x0500) /* PF[10] pin */ -#define AFIO_EXTICR3_EXTI10_PG ((uint16_t)0x0600) /* PG[10] pin */ - -#define AFIO_EXTICR3_EXTI11_PA ((uint16_t)0x0000) /* PA[11] pin */ -#define AFIO_EXTICR3_EXTI11_PB ((uint16_t)0x1000) /* PB[11] pin */ -#define AFIO_EXTICR3_EXTI11_PC ((uint16_t)0x2000) /* PC[11] pin */ -#define AFIO_EXTICR3_EXTI11_PD ((uint16_t)0x3000) /* PD[11] pin */ -#define AFIO_EXTICR3_EXTI11_PE ((uint16_t)0x4000) /* PE[11] pin */ -#define AFIO_EXTICR3_EXTI11_PF ((uint16_t)0x5000) /* PF[11] pin */ -#define AFIO_EXTICR3_EXTI11_PG ((uint16_t)0x6000) /* PG[11] pin */ - -/***************** Bit definition for AFIO_EXTICR4 register *****************/ -#define AFIO_EXTICR4_EXTI12 ((uint16_t)0x000F) /* EXTI 12 configuration */ -#define AFIO_EXTICR4_EXTI13 ((uint16_t)0x00F0) /* EXTI 13 configuration */ -#define AFIO_EXTICR4_EXTI14 ((uint16_t)0x0F00) /* EXTI 14 configuration */ -#define AFIO_EXTICR4_EXTI15 ((uint16_t)0xF000) /* EXTI 15 configuration */ - -#define AFIO_EXTICR4_EXTI12_PA ((uint16_t)0x0000) /* PA[12] pin */ -#define AFIO_EXTICR4_EXTI12_PB ((uint16_t)0x0001) /* PB[12] pin */ -#define AFIO_EXTICR4_EXTI12_PC ((uint16_t)0x0002) /* PC[12] pin */ -#define AFIO_EXTICR4_EXTI12_PD ((uint16_t)0x0003) /* PD[12] pin */ -#define AFIO_EXTICR4_EXTI12_PE ((uint16_t)0x0004) /* PE[12] pin */ -#define AFIO_EXTICR4_EXTI12_PF ((uint16_t)0x0005) /* PF[12] pin */ -#define AFIO_EXTICR4_EXTI12_PG ((uint16_t)0x0006) /* PG[12] pin */ - -#define AFIO_EXTICR4_EXTI13_PA ((uint16_t)0x0000) /* PA[13] pin */ -#define AFIO_EXTICR4_EXTI13_PB ((uint16_t)0x0010) /* PB[13] pin */ -#define AFIO_EXTICR4_EXTI13_PC ((uint16_t)0x0020) /* PC[13] pin */ -#define AFIO_EXTICR4_EXTI13_PD ((uint16_t)0x0030) /* PD[13] pin */ -#define AFIO_EXTICR4_EXTI13_PE ((uint16_t)0x0040) /* PE[13] pin */ -#define AFIO_EXTICR4_EXTI13_PF ((uint16_t)0x0050) /* PF[13] pin */ -#define AFIO_EXTICR4_EXTI13_PG ((uint16_t)0x0060) /* PG[13] pin */ - -#define AFIO_EXTICR4_EXTI14_PA ((uint16_t)0x0000) /* PA[14] pin */ -#define AFIO_EXTICR4_EXTI14_PB ((uint16_t)0x0100) /* PB[14] pin */ -#define AFIO_EXTICR4_EXTI14_PC ((uint16_t)0x0200) /* PC[14] pin */ -#define AFIO_EXTICR4_EXTI14_PD ((uint16_t)0x0300) /* PD[14] pin */ -#define AFIO_EXTICR4_EXTI14_PE ((uint16_t)0x0400) /* PE[14] pin */ -#define AFIO_EXTICR4_EXTI14_PF ((uint16_t)0x0500) /* PF[14] pin */ -#define AFIO_EXTICR4_EXTI14_PG ((uint16_t)0x0600) /* PG[14] pin */ - -#define AFIO_EXTICR4_EXTI15_PA ((uint16_t)0x0000) /* PA[15] pin */ -#define AFIO_EXTICR4_EXTI15_PB ((uint16_t)0x1000) /* PB[15] pin */ -#define AFIO_EXTICR4_EXTI15_PC ((uint16_t)0x2000) /* PC[15] pin */ -#define AFIO_EXTICR4_EXTI15_PD ((uint16_t)0x3000) /* PD[15] pin */ -#define AFIO_EXTICR4_EXTI15_PE ((uint16_t)0x4000) /* PE[15] pin */ -#define AFIO_EXTICR4_EXTI15_PF ((uint16_t)0x5000) /* PF[15] pin */ -#define AFIO_EXTICR4_EXTI15_PG ((uint16_t)0x6000) /* PG[15] pin */ - -/******************************************************************************/ -/* Independent WATCHDOG */ -/******************************************************************************/ - -/******************* Bit definition for IWDG_CTLR register ********************/ -#define IWDG_KEY ((uint16_t)0xFFFF) /* Key value (write only, read 0000h) */ - -/******************* Bit definition for IWDG_PSCR register ********************/ -#define IWDG_PR ((uint8_t)0x07) /* PR[2:0] (Prescaler divider) */ -#define IWDG_PR_0 ((uint8_t)0x01) /* Bit 0 */ -#define IWDG_PR_1 ((uint8_t)0x02) /* Bit 1 */ -#define IWDG_PR_2 ((uint8_t)0x04) /* Bit 2 */ - -/******************* Bit definition for IWDG_RLDR register *******************/ -#define IWDG_RL ((uint16_t)0x0FFF) /* Watchdog counter reload value */ - -/******************* Bit definition for IWDG_STATR register ********************/ -#define IWDG_PVU ((uint8_t)0x01) /* Watchdog prescaler value update */ -#define IWDG_RVU ((uint8_t)0x02) /* Watchdog counter reload value update */ - -/******************************************************************************/ -/* Inter-integrated Circuit Interface */ -/******************************************************************************/ - -/******************* Bit definition for I2C_CTLR1 register ********************/ -#define I2C_CTLR1_PE ((uint16_t)0x0001) /* Peripheral Enable */ -#define I2C_CTLR1_SMBUS ((uint16_t)0x0002) /* SMBus Mode */ -#define I2C_CTLR1_SMBTYPE ((uint16_t)0x0008) /* SMBus Type */ -#define I2C_CTLR1_ENARP ((uint16_t)0x0010) /* ARP Enable */ -#define I2C_CTLR1_ENPEC ((uint16_t)0x0020) /* PEC Enable */ -#define I2C_CTLR1_ENGC ((uint16_t)0x0040) /* General Call Enable */ -#define I2C_CTLR1_NOSTRETCH ((uint16_t)0x0080) /* Clock Stretching Disable (Slave mode) */ -#define I2C_CTLR1_START ((uint16_t)0x0100) /* Start Generation */ -#define I2C_CTLR1_STOP ((uint16_t)0x0200) /* Stop Generation */ -#define I2C_CTLR1_ACK ((uint16_t)0x0400) /* Acknowledge Enable */ -#define I2C_CTLR1_POS ((uint16_t)0x0800) /* Acknowledge/PEC Position (for data reception) */ -#define I2C_CTLR1_PEC ((uint16_t)0x1000) /* Packet Error Checking */ -#define I2C_CTLR1_ALERT ((uint16_t)0x2000) /* SMBus Alert */ -#define I2C_CTLR1_SWRST ((uint16_t)0x8000) /* Software Reset */ - -/******************* Bit definition for I2C_CTLR2 register ********************/ -#define I2C_CTLR2_FREQ ((uint16_t)0x003F) /* FREQ[5:0] bits (Peripheral Clock Frequency) */ -#define I2C_CTLR2_FREQ_0 ((uint16_t)0x0001) /* Bit 0 */ -#define I2C_CTLR2_FREQ_1 ((uint16_t)0x0002) /* Bit 1 */ -#define I2C_CTLR2_FREQ_2 ((uint16_t)0x0004) /* Bit 2 */ -#define I2C_CTLR2_FREQ_3 ((uint16_t)0x0008) /* Bit 3 */ -#define I2C_CTLR2_FREQ_4 ((uint16_t)0x0010) /* Bit 4 */ -#define I2C_CTLR2_FREQ_5 ((uint16_t)0x0020) /* Bit 5 */ - -#define I2C_CTLR2_ITERREN ((uint16_t)0x0100) /* Error Interrupt Enable */ -#define I2C_CTLR2_ITEVTEN ((uint16_t)0x0200) /* Event Interrupt Enable */ -#define I2C_CTLR2_ITBUFEN ((uint16_t)0x0400) /* Buffer Interrupt Enable */ -#define I2C_CTLR2_DMAEN ((uint16_t)0x0800) /* DMA Requests Enable */ -#define I2C_CTLR2_LAST ((uint16_t)0x1000) /* DMA Last Transfer */ - -/******************* Bit definition for I2C_OADDR1 register *******************/ -#define I2C_OADDR1_ADD1_7 ((uint16_t)0x00FE) /* Interface Address */ -#define I2C_OADDR1_ADD8_9 ((uint16_t)0x0300) /* Interface Address */ - -#define I2C_OADDR1_ADD0 ((uint16_t)0x0001) /* Bit 0 */ -#define I2C_OADDR1_ADD1 ((uint16_t)0x0002) /* Bit 1 */ -#define I2C_OADDR1_ADD2 ((uint16_t)0x0004) /* Bit 2 */ -#define I2C_OADDR1_ADD3 ((uint16_t)0x0008) /* Bit 3 */ -#define I2C_OADDR1_ADD4 ((uint16_t)0x0010) /* Bit 4 */ -#define I2C_OADDR1_ADD5 ((uint16_t)0x0020) /* Bit 5 */ -#define I2C_OADDR1_ADD6 ((uint16_t)0x0040) /* Bit 6 */ -#define I2C_OADDR1_ADD7 ((uint16_t)0x0080) /* Bit 7 */ -#define I2C_OADDR1_ADD8 ((uint16_t)0x0100) /* Bit 8 */ -#define I2C_OADDR1_ADD9 ((uint16_t)0x0200) /* Bit 9 */ - -#define I2C_OADDR1_ADDMODE ((uint16_t)0x8000) /* Addressing Mode (Slave mode) */ - -/******************* Bit definition for I2C_OADDR2 register *******************/ -#define I2C_OADDR2_ENDUAL ((uint8_t)0x01) /* Dual addressing mode enable */ -#define I2C_OADDR2_ADD2 ((uint8_t)0xFE) /* Interface address */ - -/******************** Bit definition for I2C_DATAR register ********************/ -#define I2C_DR_DATAR ((uint8_t)0xFF) /* 8-bit Data Register */ - -/******************* Bit definition for I2C_STAR1 register ********************/ -#define I2C_STAR1_SB ((uint16_t)0x0001) /* Start Bit (Master mode) */ -#define I2C_STAR1_ADDR ((uint16_t)0x0002) /* Address sent (master mode)/matched (slave mode) */ -#define I2C_STAR1_BTF ((uint16_t)0x0004) /* Byte Transfer Finished */ -#define I2C_STAR1_ADD10 ((uint16_t)0x0008) /* 10-bit header sent (Master mode) */ -#define I2C_STAR1_STOPF ((uint16_t)0x0010) /* Stop detection (Slave mode) */ -#define I2C_STAR1_RXNE ((uint16_t)0x0040) /* Data Register not Empty (receivers) */ -#define I2C_STAR1_TXE ((uint16_t)0x0080) /* Data Register Empty (transmitters) */ -#define I2C_STAR1_BERR ((uint16_t)0x0100) /* Bus Error */ -#define I2C_STAR1_ARLO ((uint16_t)0x0200) /* Arbitration Lost (master mode) */ -#define I2C_STAR1_AF ((uint16_t)0x0400) /* Acknowledge Failure */ -#define I2C_STAR1_OVR ((uint16_t)0x0800) /* Overrun/Underrun */ -#define I2C_STAR1_PECERR ((uint16_t)0x1000) /* PEC Error in reception */ -#define I2C_STAR1_TIMEOUT ((uint16_t)0x4000) /* Timeout or Tlow Error */ -#define I2C_STAR1_SMBALERT ((uint16_t)0x8000) /* SMBus Alert */ - -/******************* Bit definition for I2C_STAR2 register ********************/ -#define I2C_STAR2_MSL ((uint16_t)0x0001) /* Master/Slave */ -#define I2C_STAR2_BUSY ((uint16_t)0x0002) /* Bus Busy */ -#define I2C_STAR2_TRA ((uint16_t)0x0004) /* Transmitter/Receiver */ -#define I2C_STAR2_GENCALL ((uint16_t)0x0010) /* General Call Address (Slave mode) */ -#define I2C_STAR2_SMBDEFAULT ((uint16_t)0x0020) /* SMBus Device Default Address (Slave mode) */ -#define I2C_STAR2_SMBHOST ((uint16_t)0x0040) /* SMBus Host Header (Slave mode) */ -#define I2C_STAR2_DUALF ((uint16_t)0x0080) /* Dual Flag (Slave mode) */ -#define I2C_STAR2_PEC ((uint16_t)0xFF00) /* Packet Error Checking Register */ - -/******************* Bit definition for I2C_CKCFGR register ********************/ -#define I2C_CKCFGR_CCR ((uint16_t)0x0FFF) /* Clock Control Register in Fast/Standard mode (Master mode) */ -#define I2C_CKCFGR_DUTY ((uint16_t)0x4000) /* Fast Mode Duty Cycle */ -#define I2C_CKCFGR_FS ((uint16_t)0x8000) /* I2C Master Mode Selection */ - -/****************** Bit definition for I2C_RTR register *******************/ -#define I2C_RTR_TRISE ((uint8_t)0x3F) /* Maximum Rise Time in Fast/Standard mode (Master mode) */ - -/******************************************************************************/ -/* Power Control */ -/******************************************************************************/ - -/******************** Bit definition for PWR_CTLR register ********************/ -#define PWR_CTLR_LPDS ((uint16_t)0x0001) /* Low-Power Deepsleep */ -#define PWR_CTLR_PDDS ((uint16_t)0x0002) /* Power Down Deepsleep */ -#define PWR_CTLR_CWUF ((uint16_t)0x0004) /* Clear Wakeup Flag */ -#define PWR_CTLR_CSBF ((uint16_t)0x0008) /* Clear Standby Flag */ -#define PWR_CTLR_PVDE ((uint16_t)0x0010) /* Power Voltage Detector Enable */ - -#define PWR_CTLR_PLS ((uint16_t)0x00E0) /* PLS[2:0] bits (PVD Level Selection) */ -#define PWR_CTLR_PLS_0 ((uint16_t)0x0020) /* Bit 0 */ -#define PWR_CTLR_PLS_1 ((uint16_t)0x0040) /* Bit 1 */ -#define PWR_CTLR_PLS_2 ((uint16_t)0x0080) /* Bit 2 */ - -#define PWR_CTLR_PLS_2V2 ((uint16_t)0x0000) /* PVD level 2.2V */ -#define PWR_CTLR_PLS_2V3 ((uint16_t)0x0020) /* PVD level 2.3V */ -#define PWR_CTLR_PLS_2V4 ((uint16_t)0x0040) /* PVD level 2.4V */ -#define PWR_CTLR_PLS_2V5 ((uint16_t)0x0060) /* PVD level 2.5V */ -#define PWR_CTLR_PLS_2V6 ((uint16_t)0x0080) /* PVD level 2.6V */ -#define PWR_CTLR_PLS_2V7 ((uint16_t)0x00A0) /* PVD level 2.7V */ -#define PWR_CTLR_PLS_2V8 ((uint16_t)0x00C0) /* PVD level 2.8V */ -#define PWR_CTLR_PLS_2V9 ((uint16_t)0x00E0) /* PVD level 2.9V */ - -#define PWR_CTLR_DBP ((uint16_t)0x0100) /* Disable Backup Domain write protection */ - -/******************* Bit definition for PWR_CSR register ********************/ -#define PWR_CSR_WUF ((uint16_t)0x0001) /* Wakeup Flag */ -#define PWR_CSR_SBF ((uint16_t)0x0002) /* Standby Flag */ -#define PWR_CSR_PVDO ((uint16_t)0x0004) /* PVD Output */ -#define PWR_CSR_EWUP ((uint16_t)0x0100) /* Enable WKUP pin */ - -/******************************************************************************/ -/* Reset and Clock Control */ -/******************************************************************************/ - -/******************** Bit definition for RCC_CTLR register ********************/ -#define RCC_HSION ((uint32_t)0x00000001) /* Internal High Speed clock enable */ -#define RCC_HSIRDY ((uint32_t)0x00000002) /* Internal High Speed clock ready flag */ -#define RCC_HSITRIM ((uint32_t)0x000000F8) /* Internal High Speed clock trimming */ -#define RCC_HSICAL ((uint32_t)0x0000FF00) /* Internal High Speed clock Calibration */ -#define RCC_HSEON ((uint32_t)0x00010000) /* External High Speed clock enable */ -#define RCC_HSERDY ((uint32_t)0x00020000) /* External High Speed clock ready flag */ -#define RCC_HSEBYP ((uint32_t)0x00040000) /* External High Speed clock Bypass */ -#define RCC_CSSON ((uint32_t)0x00080000) /* Clock Security System enable */ -#define RCC_PLLON ((uint32_t)0x01000000) /* PLL enable */ -#define RCC_PLLRDY ((uint32_t)0x02000000) /* PLL clock ready flag */ - -/******************* Bit definition for RCC_CFGR0 register *******************/ -#define RCC_SW ((uint32_t)0x00000003) /* SW[1:0] bits (System clock Switch) */ -#define RCC_SW_0 ((uint32_t)0x00000001) /* Bit 0 */ -#define RCC_SW_1 ((uint32_t)0x00000002) /* Bit 1 */ - -#define RCC_SW_HSI ((uint32_t)0x00000000) /* HSI selected as system clock */ -#define RCC_SW_HSE ((uint32_t)0x00000001) /* HSE selected as system clock */ -#define RCC_SW_PLL ((uint32_t)0x00000002) /* PLL selected as system clock */ - -#define RCC_SWS ((uint32_t)0x0000000C) /* SWS[1:0] bits (System Clock Switch Status) */ -#define RCC_SWS_0 ((uint32_t)0x00000004) /* Bit 0 */ -#define RCC_SWS_1 ((uint32_t)0x00000008) /* Bit 1 */ - -#define RCC_SWS_HSI ((uint32_t)0x00000000) /* HSI oscillator used as system clock */ -#define RCC_SWS_HSE ((uint32_t)0x00000004) /* HSE oscillator used as system clock */ -#define RCC_SWS_PLL ((uint32_t)0x00000008) /* PLL used as system clock */ - -#define RCC_HPRE ((uint32_t)0x000000F0) /* HPRE[3:0] bits (AHB prescaler) */ -#define RCC_HPRE_0 ((uint32_t)0x00000010) /* Bit 0 */ -#define RCC_HPRE_1 ((uint32_t)0x00000020) /* Bit 1 */ -#define RCC_HPRE_2 ((uint32_t)0x00000040) /* Bit 2 */ -#define RCC_HPRE_3 ((uint32_t)0x00000080) /* Bit 3 */ - -#define RCC_HPRE_DIV1 ((uint32_t)0x00000000) /* SYSCLK not divided */ -#define RCC_HPRE_DIV2 ((uint32_t)0x00000080) /* SYSCLK divided by 2 */ -#define RCC_HPRE_DIV4 ((uint32_t)0x00000090) /* SYSCLK divided by 4 */ -#define RCC_HPRE_DIV8 ((uint32_t)0x000000A0) /* SYSCLK divided by 8 */ -#define RCC_HPRE_DIV16 ((uint32_t)0x000000B0) /* SYSCLK divided by 16 */ -#define RCC_HPRE_DIV64 ((uint32_t)0x000000C0) /* SYSCLK divided by 64 */ -#define RCC_HPRE_DIV128 ((uint32_t)0x000000D0) /* SYSCLK divided by 128 */ -#define RCC_HPRE_DIV256 ((uint32_t)0x000000E0) /* SYSCLK divided by 256 */ -#define RCC_HPRE_DIV512 ((uint32_t)0x000000F0) /* SYSCLK divided by 512 */ - -#define RCC_PPRE1 ((uint32_t)0x00000700) /* PRE1[2:0] bits (APB1 prescaler) */ -#define RCC_PPRE1_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define RCC_PPRE1_1 ((uint32_t)0x00000200) /* Bit 1 */ -#define RCC_PPRE1_2 ((uint32_t)0x00000400) /* Bit 2 */ - -#define RCC_PPRE1_DIV1 ((uint32_t)0x00000000) /* HCLK not divided */ -#define RCC_PPRE1_DIV2 ((uint32_t)0x00000400) /* HCLK divided by 2 */ -#define RCC_PPRE1_DIV4 ((uint32_t)0x00000500) /* HCLK divided by 4 */ -#define RCC_PPRE1_DIV8 ((uint32_t)0x00000600) /* HCLK divided by 8 */ -#define RCC_PPRE1_DIV16 ((uint32_t)0x00000700) /* HCLK divided by 16 */ - -#define RCC_PPRE2 ((uint32_t)0x00003800) /* PRE2[2:0] bits (APB2 prescaler) */ -#define RCC_PPRE2_0 ((uint32_t)0x00000800) /* Bit 0 */ -#define RCC_PPRE2_1 ((uint32_t)0x00001000) /* Bit 1 */ -#define RCC_PPRE2_2 ((uint32_t)0x00002000) /* Bit 2 */ - -#define RCC_PPRE2_DIV1 ((uint32_t)0x00000000) /* HCLK not divided */ -#define RCC_PPRE2_DIV2 ((uint32_t)0x00002000) /* HCLK divided by 2 */ -#define RCC_PPRE2_DIV4 ((uint32_t)0x00002800) /* HCLK divided by 4 */ -#define RCC_PPRE2_DIV8 ((uint32_t)0x00003000) /* HCLK divided by 8 */ -#define RCC_PPRE2_DIV16 ((uint32_t)0x00003800) /* HCLK divided by 16 */ - -#define RCC_ADCPRE ((uint32_t)0x0000C000) /* ADCPRE[1:0] bits (ADC prescaler) */ -#define RCC_ADCPRE_0 ((uint32_t)0x00004000) /* Bit 0 */ -#define RCC_ADCPRE_1 ((uint32_t)0x00008000) /* Bit 1 */ - -#define RCC_ADCPRE_DIV2 ((uint32_t)0x00000000) /* PCLK2 divided by 2 */ -#define RCC_ADCPRE_DIV4 ((uint32_t)0x00004000) /* PCLK2 divided by 4 */ -#define RCC_ADCPRE_DIV6 ((uint32_t)0x00008000) /* PCLK2 divided by 6 */ -#define RCC_ADCPRE_DIV8 ((uint32_t)0x0000C000) /* PCLK2 divided by 8 */ - -#define RCC_PLLSRC ((uint32_t)0x00010000) /* PLL entry clock source */ - -#define RCC_PLLXTPRE ((uint32_t)0x00020000) /* HSE divider for PLL entry */ - -#define RCC_PLLMULL ((uint32_t)0x003C0000) /* PLLMUL[3:0] bits (PLL multiplication factor) */ -#define RCC_PLLMULL_0 ((uint32_t)0x00040000) /* Bit 0 */ -#define RCC_PLLMULL_1 ((uint32_t)0x00080000) /* Bit 1 */ -#define RCC_PLLMULL_2 ((uint32_t)0x00100000) /* Bit 2 */ -#define RCC_PLLMULL_3 ((uint32_t)0x00200000) /* Bit 3 */ - -#define RCC_PLLSRC_HSI_Div2 ((uint32_t)0x00000000) /* HSI clock divided by 2 selected as PLL entry clock source */ -#define RCC_PLLSRC_HSE ((uint32_t)0x00010000) /* HSE clock selected as PLL entry clock source */ - -#define RCC_PLLXTPRE_HSE ((uint32_t)0x00000000) /* HSE clock not divided for PLL entry */ -#define RCC_PLLXTPRE_HSE_Div2 ((uint32_t)0x00020000) /* HSE clock divided by 2 for PLL entry */ - -#define RCC_PLLMULL2 ((uint32_t)0x00000000) /* PLL input clock*2 */ -#define RCC_PLLMULL3 ((uint32_t)0x00040000) /* PLL input clock*3 */ -#define RCC_PLLMULL4 ((uint32_t)0x00080000) /* PLL input clock*4 */ -#define RCC_PLLMULL5 ((uint32_t)0x000C0000) /* PLL input clock*5 */ -#define RCC_PLLMULL6 ((uint32_t)0x00100000) /* PLL input clock*6 */ -#define RCC_PLLMULL7 ((uint32_t)0x00140000) /* PLL input clock*7 */ -#define RCC_PLLMULL8 ((uint32_t)0x00180000) /* PLL input clock*8 */ -#define RCC_PLLMULL9 ((uint32_t)0x001C0000) /* PLL input clock*9 */ -#define RCC_PLLMULL10 ((uint32_t)0x00200000) /* PLL input clock10 */ -#define RCC_PLLMULL11 ((uint32_t)0x00240000) /* PLL input clock*11 */ -#define RCC_PLLMULL12 ((uint32_t)0x00280000) /* PLL input clock*12 */ -#define RCC_PLLMULL13 ((uint32_t)0x002C0000) /* PLL input clock*13 */ -#define RCC_PLLMULL14 ((uint32_t)0x00300000) /* PLL input clock*14 */ -#define RCC_PLLMULL15 ((uint32_t)0x00340000) /* PLL input clock*15 */ -#define RCC_PLLMULL16 ((uint32_t)0x00380000) /* PLL input clock*16 */ -#define RCC_USBPRE ((uint32_t)0x00400000) /* USB Device prescaler */ - -#define RCC_CFGR0_MCO ((uint32_t)0x07000000) /* MCO[2:0] bits (Microcontroller Clock Output) */ -#define RCC_MCO_0 ((uint32_t)0x01000000) /* Bit 0 */ -#define RCC_MCO_1 ((uint32_t)0x02000000) /* Bit 1 */ -#define RCC_MCO_2 ((uint32_t)0x04000000) /* Bit 2 */ - -#define RCC_MCO_NOCLOCK ((uint32_t)0x00000000) /* No clock */ -#define RCC_CFGR0_MCO_SYSCLK ((uint32_t)0x04000000) /* System clock selected as MCO source */ -#define RCC_CFGR0_MCO_HSI ((uint32_t)0x05000000) /* HSI clock selected as MCO source */ -#define RCC_CFGR0_MCO_HSE ((uint32_t)0x06000000) /* HSE clock selected as MCO source */ -#define RCC_CFGR0_MCO_PLL ((uint32_t)0x07000000) /* PLL clock divided by 2 selected as MCO source */ - -/******************* Bit definition for RCC_INTR register ********************/ -#define RCC_LSIRDYF ((uint32_t)0x00000001) /* LSI Ready Interrupt flag */ -#define RCC_LSERDYF ((uint32_t)0x00000002) /* LSE Ready Interrupt flag */ -#define RCC_HSIRDYF ((uint32_t)0x00000004) /* HSI Ready Interrupt flag */ -#define RCC_HSERDYF ((uint32_t)0x00000008) /* HSE Ready Interrupt flag */ -#define RCC_PLLRDYF ((uint32_t)0x00000010) /* PLL Ready Interrupt flag */ -#define RCC_CSSF ((uint32_t)0x00000080) /* Clock Security System Interrupt flag */ -#define RCC_LSIRDYIE ((uint32_t)0x00000100) /* LSI Ready Interrupt Enable */ -#define RCC_LSERDYIE ((uint32_t)0x00000200) /* LSE Ready Interrupt Enable */ -#define RCC_HSIRDYIE ((uint32_t)0x00000400) /* HSI Ready Interrupt Enable */ -#define RCC_HSERDYIE ((uint32_t)0x00000800) /* HSE Ready Interrupt Enable */ -#define RCC_PLLRDYIE ((uint32_t)0x00001000) /* PLL Ready Interrupt Enable */ -#define RCC_LSIRDYC ((uint32_t)0x00010000) /* LSI Ready Interrupt Clear */ -#define RCC_LSERDYC ((uint32_t)0x00020000) /* LSE Ready Interrupt Clear */ -#define RCC_HSIRDYC ((uint32_t)0x00040000) /* HSI Ready Interrupt Clear */ -#define RCC_HSERDYC ((uint32_t)0x00080000) /* HSE Ready Interrupt Clear */ -#define RCC_PLLRDYC ((uint32_t)0x00100000) /* PLL Ready Interrupt Clear */ -#define RCC_CSSC ((uint32_t)0x00800000) /* Clock Security System Interrupt Clear */ - -/***************** Bit definition for RCC_APB2PRSTR register *****************/ -#define RCC_AFIORST ((uint32_t)0x00000001) /* Alternate Function I/O reset */ -#define RCC_IOPARST ((uint32_t)0x00000004) /* I/O port A reset */ -#define RCC_IOPBRST ((uint32_t)0x00000008) /* I/O port B reset */ -#define RCC_IOPCRST ((uint32_t)0x00000010) /* I/O port C reset */ -#define RCC_IOPDRST ((uint32_t)0x00000020) /* I/O port D reset */ -#define RCC_ADC1RST ((uint32_t)0x00000200) /* ADC 1 interface reset */ - -#define RCC_ADC2RST ((uint32_t)0x00000400) /* ADC 2 interface reset */ - -#define RCC_TIM1RST ((uint32_t)0x00000800) /* TIM1 Timer reset */ -#define RCC_SPI1RST ((uint32_t)0x00001000) /* SPI 1 reset */ -#define RCC_USART1RST ((uint32_t)0x00004000) /* USART1 reset */ - -#define RCC_IOPERST ((uint32_t)0x00000040) /* I/O port E reset */ - -/***************** Bit definition for RCC_APB1PRSTR register *****************/ -#define RCC_TIM2RST ((uint32_t)0x00000001) /* Timer 2 reset */ -#define RCC_TIM3RST ((uint32_t)0x00000002) /* Timer 3 reset */ -#define RCC_WWDGRST ((uint32_t)0x00000800) /* Window Watchdog reset */ -#define RCC_USART2RST ((uint32_t)0x00020000) /* USART 2 reset */ -#define RCC_I2C1RST ((uint32_t)0x00200000) /* I2C 1 reset */ - -#define RCC_CAN1RST ((uint32_t)0x02000000) /* CAN1 reset */ - -#define RCC_BKPRST ((uint32_t)0x08000000) /* Backup interface reset */ -#define RCC_PWRRST ((uint32_t)0x10000000) /* Power interface reset */ - -#define RCC_TIM4RST ((uint32_t)0x00000004) /* Timer 4 reset */ -#define RCC_SPI2RST ((uint32_t)0x00004000) /* SPI 2 reset */ -#define RCC_USART3RST ((uint32_t)0x00040000) /* USART 3 reset */ -#define RCC_I2C2RST ((uint32_t)0x00400000) /* I2C 2 reset */ - -#define RCC_USBRST ((uint32_t)0x00800000) /* USB Device reset */ - -/****************** Bit definition for RCC_AHBPCENR register ******************/ -#define RCC_DMA1EN ((uint16_t)0x0001) /* DMA1 clock enable */ -#define RCC_SRAMEN ((uint16_t)0x0004) /* SRAM interface clock enable */ -#define RCC_FLITFEN ((uint16_t)0x0010) /* FLITF clock enable */ -#define RCC_CRCEN ((uint16_t)0x0040) /* CRC clock enable */ -#define RCC_USBHD ((uint16_t)0x1000) - -/****************** Bit definition for RCC_APB2PCENR register *****************/ -#define RCC_AFIOEN ((uint32_t)0x00000001) /* Alternate Function I/O clock enable */ -#define RCC_IOPAEN ((uint32_t)0x00000004) /* I/O port A clock enable */ -#define RCC_IOPBEN ((uint32_t)0x00000008) /* I/O port B clock enable */ -#define RCC_IOPCEN ((uint32_t)0x00000010) /* I/O port C clock enable */ -#define RCC_IOPDEN ((uint32_t)0x00000020) /* I/O port D clock enable */ -#define RCC_ADC1EN ((uint32_t)0x00000200) /* ADC 1 interface clock enable */ - -#define RCC_ADC2EN ((uint32_t)0x00000400) /* ADC 2 interface clock enable */ - -#define RCC_TIM1EN ((uint32_t)0x00000800) /* TIM1 Timer clock enable */ -#define RCC_SPI1EN ((uint32_t)0x00001000) /* SPI 1 clock enable */ -#define RCC_USART1EN ((uint32_t)0x00004000) /* USART1 clock enable */ - -/***************** Bit definition for RCC_APB1PCENR register ******************/ -#define RCC_TIM2EN ((uint32_t)0x00000001) /* Timer 2 clock enabled*/ -#define RCC_TIM3EN ((uint32_t)0x00000002) /* Timer 3 clock enable */ -#define RCC_WWDGEN ((uint32_t)0x00000800) /* Window Watchdog clock enable */ -#define RCC_USART2EN ((uint32_t)0x00020000) /* USART 2 clock enable */ -#define RCC_I2C1EN ((uint32_t)0x00200000) /* I2C 1 clock enable */ - -#define RCC_BKPEN ((uint32_t)0x08000000) /* Backup interface clock enable */ -#define RCC_PWREN ((uint32_t)0x10000000) /* Power interface clock enable */ - -#define RCC_USBEN ((uint32_t)0x00800000) /* USB Device clock enable */ - -/******************* Bit definition for RCC_BDCTLR register *******************/ -#define RCC_LSEON ((uint32_t)0x00000001) /* External Low Speed oscillator enable */ -#define RCC_LSERDY ((uint32_t)0x00000002) /* External Low Speed oscillator Ready */ -#define RCC_LSEBYP ((uint32_t)0x00000004) /* External Low Speed oscillator Bypass */ - -#define RCC_RTCSEL ((uint32_t)0x00000300) /* RTCSEL[1:0] bits (RTC clock source selection) */ -#define RCC_RTCSEL_0 ((uint32_t)0x00000100) /* Bit 0 */ -#define RCC_RTCSEL_1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define RCC_RTCSEL_NOCLOCK ((uint32_t)0x00000000) /* No clock */ -#define RCC_RTCSEL_LSE ((uint32_t)0x00000100) /* LSE oscillator clock used as RTC clock */ -#define RCC_RTCSEL_LSI ((uint32_t)0x00000200) /* LSI oscillator clock used as RTC clock */ -#define RCC_RTCSEL_HSE ((uint32_t)0x00000300) /* HSE oscillator clock divided by 128 used as RTC clock */ - -#define RCC_RTCEN ((uint32_t)0x00008000) /* RTC clock enable */ -#define RCC_BDRST ((uint32_t)0x00010000) /* Backup domain software reset */ - -/******************* Bit definition for RCC_RSTSCKR register ********************/ -#define RCC_LSION ((uint32_t)0x00000001) /* Internal Low Speed oscillator enable */ -#define RCC_LSIRDY ((uint32_t)0x00000002) /* Internal Low Speed oscillator Ready */ -#define RCC_RMVF ((uint32_t)0x01000000) /* Remove reset flag */ -#define RCC_PINRSTF ((uint32_t)0x04000000) /* PIN reset flag */ -#define RCC_PORRSTF ((uint32_t)0x08000000) /* POR/PDR reset flag */ -#define RCC_SFTRSTF ((uint32_t)0x10000000) /* Software Reset flag */ -#define RCC_IWDGRSTF ((uint32_t)0x20000000) /* Independent Watchdog reset flag */ -#define RCC_WWDGRSTF ((uint32_t)0x40000000) /* Window watchdog reset flag */ -#define RCC_LPWRRSTF ((uint32_t)0x80000000) /* Low-Power reset flag */ - -/******************************************************************************/ -/* Real-Time Clock */ -/******************************************************************************/ - -/******************* Bit definition for RTC_CTLRH register ********************/ -#define RTC_CTLRH_SECIE ((uint8_t)0x01) /* Second Interrupt Enable */ -#define RTC_CTLRH_ALRIE ((uint8_t)0x02) /* Alarm Interrupt Enable */ -#define RTC_CTLRH_OWIE ((uint8_t)0x04) /* OverfloW Interrupt Enable */ - -/******************* Bit definition for RTC_CTLRL register ********************/ -#define RTC_CTLRL_SECF ((uint8_t)0x01) /* Second Flag */ -#define RTC_CTLRL_ALRF ((uint8_t)0x02) /* Alarm Flag */ -#define RTC_CTLRL_OWF ((uint8_t)0x04) /* OverfloW Flag */ -#define RTC_CTLRL_RSF ((uint8_t)0x08) /* Registers Synchronized Flag */ -#define RTC_CTLRL_CNF ((uint8_t)0x10) /* Configuration Flag */ -#define RTC_CTLRL_RTOFF ((uint8_t)0x20) /* RTC operation OFF */ - -/******************* Bit definition for RTC_PSCH register *******************/ -#define RTC_PSCH_PRL ((uint16_t)0x000F) /* RTC Prescaler Reload Value High */ - -/******************* Bit definition for RTC_PRLL register *******************/ -#define RTC_PSCL_PRL ((uint16_t)0xFFFF) /* RTC Prescaler Reload Value Low */ - -/******************* Bit definition for RTC_DIVH register *******************/ -#define RTC_DIVH_RTC_DIV ((uint16_t)0x000F) /* RTC Clock Divider High */ - -/******************* Bit definition for RTC_DIVL register *******************/ -#define RTC_DIVL_RTC_DIV ((uint16_t)0xFFFF) /* RTC Clock Divider Low */ - -/******************* Bit definition for RTC_CNTH register *******************/ -#define RTC_CNTH_RTC_CNT ((uint16_t)0xFFFF) /* RTC Counter High */ - -/******************* Bit definition for RTC_CNTL register *******************/ -#define RTC_CNTL_RTC_CNT ((uint16_t)0xFFFF) /* RTC Counter Low */ - -/******************* Bit definition for RTC_ALRMH register *******************/ -#define RTC_ALRMH_RTC_ALRM ((uint16_t)0xFFFF) /* RTC Alarm High */ - -/******************* Bit definition for RTC_ALRML register *******************/ -#define RTC_ALRML_RTC_ALRM ((uint16_t)0xFFFF) /* RTC Alarm Low */ - -/******************************************************************************/ -/* Serial Peripheral Interface */ -/******************************************************************************/ - -/******************* Bit definition for SPI_CTLR1 register ********************/ -#define SPI_CTLR1_CPHA ((uint16_t)0x0001) /* Clock Phase */ -#define SPI_CTLR1_CPOL ((uint16_t)0x0002) /* Clock Polarity */ -#define SPI_CTLR1_MSTR ((uint16_t)0x0004) /* Master Selection */ - -#define SPI_CTLR1_BR ((uint16_t)0x0038) /* BR[2:0] bits (Baud Rate Control) */ -#define SPI_CTLR1_BR_0 ((uint16_t)0x0008) /* Bit 0 */ -#define SPI_CTLR1_BR_1 ((uint16_t)0x0010) /* Bit 1 */ -#define SPI_CTLR1_BR_2 ((uint16_t)0x0020) /* Bit 2 */ - -#define SPI_CTLR1_SPE ((uint16_t)0x0040) /* SPI Enable */ -#define SPI_CTLR1_LSBFIRST ((uint16_t)0x0080) /* Frame Format */ -#define SPI_CTLR1_SSI ((uint16_t)0x0100) /* Internal slave select */ -#define SPI_CTLR1_SSM ((uint16_t)0x0200) /* Software slave management */ -#define SPI_CTLR1_RXONLY ((uint16_t)0x0400) /* Receive only */ -#define SPI_CTLR1_DFF ((uint16_t)0x0800) /* Data Frame Format */ -#define SPI_CTLR1_CRCNEXT ((uint16_t)0x1000) /* Transmit CRC next */ -#define SPI_CTLR1_CRCEN ((uint16_t)0x2000) /* Hardware CRC calculation enable */ -#define SPI_CTLR1_BIDIOE ((uint16_t)0x4000) /* Output enable in bidirectional mode */ -#define SPI_CTLR1_BIDIMODE ((uint16_t)0x8000) /* Bidirectional data mode enable */ - -/******************* Bit definition for SPI_CTLR2 register ********************/ -#define SPI_CTLR2_RXDMAEN ((uint8_t)0x01) /* Rx Buffer DMA Enable */ -#define SPI_CTLR2_TXDMAEN ((uint8_t)0x02) /* Tx Buffer DMA Enable */ -#define SPI_CTLR2_SSOE ((uint8_t)0x04) /* SS Output Enable */ -#define SPI_CTLR2_ERRIE ((uint8_t)0x20) /* Error Interrupt Enable */ -#define SPI_CTLR2_RXNEIE ((uint8_t)0x40) /* RX buffer Not Empty Interrupt Enable */ -#define SPI_CTLR2_TXEIE ((uint8_t)0x80) /* Tx buffer Empty Interrupt Enable */ - -/******************** Bit definition for SPI_STATR register ********************/ -#define SPI_STATR_RXNE ((uint8_t)0x01) /* Receive buffer Not Empty */ -#define SPI_STATR_TXE ((uint8_t)0x02) /* Transmit buffer Empty */ -#define SPI_STATR_CHSIDE ((uint8_t)0x04) /* Channel side */ -#define SPI_STATR_UDR ((uint8_t)0x08) /* Underrun flag */ -#define SPI_STATR_CRCERR ((uint8_t)0x10) /* CRC Error flag */ -#define SPI_STATR_MODF ((uint8_t)0x20) /* Mode fault */ -#define SPI_STATR_OVR ((uint8_t)0x40) /* Overrun flag */ -#define SPI_STATR_BSY ((uint8_t)0x80) /* Busy flag */ - -/******************** Bit definition for SPI_DATAR register ********************/ -#define SPI_DATAR_DR ((uint16_t)0xFFFF) /* Data Register */ - -/******************* Bit definition for SPI_CRCR register ******************/ -#define SPI_CRCR_CRCPOLY ((uint16_t)0xFFFF) /* CRC polynomial register */ - -/****************** Bit definition for SPI_RCRCR register ******************/ -#define SPI_RCRCR_RXCRC ((uint16_t)0xFFFF) /* Rx CRC Register */ - -/****************** Bit definition for SPI_TCRCR register ******************/ -#define SPI_TCRCR_TXCRC ((uint16_t)0xFFFF) /* Tx CRC Register */ - -/****************** Bit definition for SPI_I2SCFGR register *****************/ -#define SPI_I2SCFGR_CHLEN ((uint16_t)0x0001) /* Channel length (number of bits per audio channel) */ - -#define SPI_I2SCFGR_DATLEN ((uint16_t)0x0006) /* DATLEN[1:0] bits (Data length to be transferred) */ -#define SPI_I2SCFGR_DATLEN_0 ((uint16_t)0x0002) /* Bit 0 */ -#define SPI_I2SCFGR_DATLEN_1 ((uint16_t)0x0004) /* Bit 1 */ - -#define SPI_I2SCFGR_CKPOL ((uint16_t)0x0008) /* steady state clock polarity */ - -#define SPI_I2SCFGR_I2SSTD ((uint16_t)0x0030) /* I2SSTD[1:0] bits (I2S standard selection) */ -#define SPI_I2SCFGR_I2SSTD_0 ((uint16_t)0x0010) /* Bit 0 */ -#define SPI_I2SCFGR_I2SSTD_1 ((uint16_t)0x0020) /* Bit 1 */ - -#define SPI_I2SCFGR_PCMSYNC ((uint16_t)0x0080) /* PCM frame synchronization */ - -#define SPI_I2SCFGR_I2SCFG ((uint16_t)0x0300) /* I2SCFG[1:0] bits (I2S configuration mode) */ -#define SPI_I2SCFGR_I2SCFG_0 ((uint16_t)0x0100) /* Bit 0 */ -#define SPI_I2SCFGR_I2SCFG_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define SPI_I2SCFGR_I2SE ((uint16_t)0x0400) /* I2S Enable */ -#define SPI_I2SCFGR_I2SMOD ((uint16_t)0x0800) /* I2S mode selection */ - -/****************** Bit definition for SPI_I2SPR register *******************/ -#define SPI_I2SPR_I2SDIV ((uint16_t)0x00FF) /* I2S Linear prescaler */ -#define SPI_I2SPR_ODD ((uint16_t)0x0100) /* Odd factor for the prescaler */ -#define SPI_I2SPR_MCKOE ((uint16_t)0x0200) /* Master Clock Output Enable */ - -/******************************************************************************/ -/* TIM */ -/******************************************************************************/ - -/******************* Bit definition for TIM_CTLR1 register ********************/ -#define TIM_CEN ((uint16_t)0x0001) /* Counter enable */ -#define TIM_UDIS ((uint16_t)0x0002) /* Update disable */ -#define TIM_URS ((uint16_t)0x0004) /* Update request source */ -#define TIM_OPM ((uint16_t)0x0008) /* One pulse mode */ -#define TIM_DIR ((uint16_t)0x0010) /* Direction */ - -#define TIM_CMS ((uint16_t)0x0060) /* CMS[1:0] bits (Center-aligned mode selection) */ -#define TIM_CMS_0 ((uint16_t)0x0020) /* Bit 0 */ -#define TIM_CMS_1 ((uint16_t)0x0040) /* Bit 1 */ - -#define TIM_ARPE ((uint16_t)0x0080) /* Auto-reload preload enable */ - -#define TIM_CTLR1_CKD ((uint16_t)0x0300) /* CKD[1:0] bits (clock division) */ -#define TIM_CKD_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_CKD_1 ((uint16_t)0x0200) /* Bit 1 */ - -/******************* Bit definition for TIM_CTLR2 register ********************/ -#define TIM_CCPC ((uint16_t)0x0001) /* Capture/Compare Preloaded Control */ -#define TIM_CCUS ((uint16_t)0x0004) /* Capture/Compare Control Update Selection */ -#define TIM_CCDS ((uint16_t)0x0008) /* Capture/Compare DMA Selection */ - -#define TIM_MMS ((uint16_t)0x0070) /* MMS[2:0] bits (Master Mode Selection) */ -#define TIM_MMS_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_MMS_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_MMS_2 ((uint16_t)0x0040) /* Bit 2 */ - -#define TIM_TI1S ((uint16_t)0x0080) /* TI1 Selection */ -#define TIM_OIS1 ((uint16_t)0x0100) /* Output Idle state 1 (OC1 output) */ -#define TIM_OIS1N ((uint16_t)0x0200) /* Output Idle state 1 (OC1N output) */ -#define TIM_OIS2 ((uint16_t)0x0400) /* Output Idle state 2 (OC2 output) */ -#define TIM_OIS2N ((uint16_t)0x0800) /* Output Idle state 2 (OC2N output) */ -#define TIM_OIS3 ((uint16_t)0x1000) /* Output Idle state 3 (OC3 output) */ -#define TIM_OIS3N ((uint16_t)0x2000) /* Output Idle state 3 (OC3N output) */ -#define TIM_OIS4 ((uint16_t)0x4000) /* Output Idle state 4 (OC4 output) */ - -/******************* Bit definition for TIM_SMCFGR register *******************/ -#define TIM_SMS ((uint16_t)0x0007) /* SMS[2:0] bits (Slave mode selection) */ -#define TIM_SMS_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_SMS_1 ((uint16_t)0x0002) /* Bit 1 */ -#define TIM_SMS_2 ((uint16_t)0x0004) /* Bit 2 */ - -#define TIM_TS ((uint16_t)0x0070) /* TS[2:0] bits (Trigger selection) */ -#define TIM_TS_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_TS_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_TS_2 ((uint16_t)0x0040) /* Bit 2 */ - -#define TIM_MSM ((uint16_t)0x0080) /* Master/slave mode */ - -#define TIM_ETF ((uint16_t)0x0F00) /* ETF[3:0] bits (External trigger filter) */ -#define TIM_ETF_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_ETF_1 ((uint16_t)0x0200) /* Bit 1 */ -#define TIM_ETF_2 ((uint16_t)0x0400) /* Bit 2 */ -#define TIM_ETF_3 ((uint16_t)0x0800) /* Bit 3 */ - -#define TIM_ETPS ((uint16_t)0x3000) /* ETPS[1:0] bits (External trigger prescaler) */ -#define TIM_ETPS_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_ETPS_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define TIM_ECE ((uint16_t)0x4000) /* External clock enable */ -#define TIM_ETP ((uint16_t)0x8000) /* External trigger polarity */ - -/******************* Bit definition for TIM_DMAINTENR register *******************/ -#define TIM_UIE ((uint16_t)0x0001) /* Update interrupt enable */ -#define TIM_CC1IE ((uint16_t)0x0002) /* Capture/Compare 1 interrupt enable */ -#define TIM_CC2IE ((uint16_t)0x0004) /* Capture/Compare 2 interrupt enable */ -#define TIM_CC3IE ((uint16_t)0x0008) /* Capture/Compare 3 interrupt enable */ -#define TIM_CC4IE ((uint16_t)0x0010) /* Capture/Compare 4 interrupt enable */ -#define TIM_COMIE ((uint16_t)0x0020) /* COM interrupt enable */ -#define TIM_TIE ((uint16_t)0x0040) /* Trigger interrupt enable */ -#define TIM_BIE ((uint16_t)0x0080) /* Break interrupt enable */ -#define TIM_UDE ((uint16_t)0x0100) /* Update DMA request enable */ -#define TIM_CC1DE ((uint16_t)0x0200) /* Capture/Compare 1 DMA request enable */ -#define TIM_CC2DE ((uint16_t)0x0400) /* Capture/Compare 2 DMA request enable */ -#define TIM_CC3DE ((uint16_t)0x0800) /* Capture/Compare 3 DMA request enable */ -#define TIM_CC4DE ((uint16_t)0x1000) /* Capture/Compare 4 DMA request enable */ -#define TIM_COMDE ((uint16_t)0x2000) /* COM DMA request enable */ -#define TIM_TDE ((uint16_t)0x4000) /* Trigger DMA request enable */ - -/******************** Bit definition for TIM_INTFR register ********************/ -#define TIM_UIF ((uint16_t)0x0001) /* Update interrupt Flag */ -#define TIM_CC1IF ((uint16_t)0x0002) /* Capture/Compare 1 interrupt Flag */ -#define TIM_CC2IF ((uint16_t)0x0004) /* Capture/Compare 2 interrupt Flag */ -#define TIM_CC3IF ((uint16_t)0x0008) /* Capture/Compare 3 interrupt Flag */ -#define TIM_CC4IF ((uint16_t)0x0010) /* Capture/Compare 4 interrupt Flag */ -#define TIM_COMIF ((uint16_t)0x0020) /* COM interrupt Flag */ -#define TIM_TIF ((uint16_t)0x0040) /* Trigger interrupt Flag */ -#define TIM_BIF ((uint16_t)0x0080) /* Break interrupt Flag */ -#define TIM_CC1OF ((uint16_t)0x0200) /* Capture/Compare 1 Overcapture Flag */ -#define TIM_CC2OF ((uint16_t)0x0400) /* Capture/Compare 2 Overcapture Flag */ -#define TIM_CC3OF ((uint16_t)0x0800) /* Capture/Compare 3 Overcapture Flag */ -#define TIM_CC4OF ((uint16_t)0x1000) /* Capture/Compare 4 Overcapture Flag */ - -/******************* Bit definition for TIM_SWEVGR register ********************/ -#define TIM_UG ((uint8_t)0x01) /* Update Generation */ -#define TIM_CC1G ((uint8_t)0x02) /* Capture/Compare 1 Generation */ -#define TIM_CC2G ((uint8_t)0x04) /* Capture/Compare 2 Generation */ -#define TIM_CC3G ((uint8_t)0x08) /* Capture/Compare 3 Generation */ -#define TIM_CC4G ((uint8_t)0x10) /* Capture/Compare 4 Generation */ -#define TIM_COMG ((uint8_t)0x20) /* Capture/Compare Control Update Generation */ -#define TIM_TG ((uint8_t)0x40) /* Trigger Generation */ -#define TIM_BG ((uint8_t)0x80) /* Break Generation */ - -/****************** Bit definition for TIM_CHCTLR1 register *******************/ -#define TIM_CC1S ((uint16_t)0x0003) /* CC1S[1:0] bits (Capture/Compare 1 Selection) */ -#define TIM_CC1S_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_CC1S_1 ((uint16_t)0x0002) /* Bit 1 */ - -#define TIM_OC1FE ((uint16_t)0x0004) /* Output Compare 1 Fast enable */ -#define TIM_OC1PE ((uint16_t)0x0008) /* Output Compare 1 Preload enable */ - -#define TIM_OC1M ((uint16_t)0x0070) /* OC1M[2:0] bits (Output Compare 1 Mode) */ -#define TIM_OC1M_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_OC1M_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_OC1M_2 ((uint16_t)0x0040) /* Bit 2 */ - -#define TIM_OC1CE ((uint16_t)0x0080) /* Output Compare 1Clear Enable */ - -#define TIM_CC2S ((uint16_t)0x0300) /* CC2S[1:0] bits (Capture/Compare 2 Selection) */ -#define TIM_CC2S_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_CC2S_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define TIM_OC2FE ((uint16_t)0x0400) /* Output Compare 2 Fast enable */ -#define TIM_OC2PE ((uint16_t)0x0800) /* Output Compare 2 Preload enable */ - -#define TIM_OC2M ((uint16_t)0x7000) /* OC2M[2:0] bits (Output Compare 2 Mode) */ -#define TIM_OC2M_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_OC2M_1 ((uint16_t)0x2000) /* Bit 1 */ -#define TIM_OC2M_2 ((uint16_t)0x4000) /* Bit 2 */ - -#define TIM_OC2CE ((uint16_t)0x8000) /* Output Compare 2 Clear Enable */ - -#define TIM_IC1PSC ((uint16_t)0x000C) /* IC1PSC[1:0] bits (Input Capture 1 Prescaler) */ -#define TIM_IC1PSC_0 ((uint16_t)0x0004) /* Bit 0 */ -#define TIM_IC1PSC_1 ((uint16_t)0x0008) /* Bit 1 */ - -#define TIM_IC1F ((uint16_t)0x00F0) /* IC1F[3:0] bits (Input Capture 1 Filter) */ -#define TIM_IC1F_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_IC1F_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_IC1F_2 ((uint16_t)0x0040) /* Bit 2 */ -#define TIM_IC1F_3 ((uint16_t)0x0080) /* Bit 3 */ - -#define TIM_IC2PSC ((uint16_t)0x0C00) /* IC2PSC[1:0] bits (Input Capture 2 Prescaler) */ -#define TIM_IC2PSC_0 ((uint16_t)0x0400) /* Bit 0 */ -#define TIM_IC2PSC_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define TIM_IC2F ((uint16_t)0xF000) /* IC2F[3:0] bits (Input Capture 2 Filter) */ -#define TIM_IC2F_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_IC2F_1 ((uint16_t)0x2000) /* Bit 1 */ -#define TIM_IC2F_2 ((uint16_t)0x4000) /* Bit 2 */ -#define TIM_IC2F_3 ((uint16_t)0x8000) /* Bit 3 */ - -/****************** Bit definition for TIM_CHCTLR2 register *******************/ -#define TIM_CC3S ((uint16_t)0x0003) /* CC3S[1:0] bits (Capture/Compare 3 Selection) */ -#define TIM_CC3S_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_CC3S_1 ((uint16_t)0x0002) /* Bit 1 */ - -#define TIM_OC3FE ((uint16_t)0x0004) /* Output Compare 3 Fast enable */ -#define TIM_OC3PE ((uint16_t)0x0008) /* Output Compare 3 Preload enable */ - -#define TIM_OC3M ((uint16_t)0x0070) /* OC3M[2:0] bits (Output Compare 3 Mode) */ -#define TIM_OC3M_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_OC3M_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_OC3M_2 ((uint16_t)0x0040) /* Bit 2 */ - -#define TIM_OC3CE ((uint16_t)0x0080) /* Output Compare 3 Clear Enable */ - -#define TIM_CC4S ((uint16_t)0x0300) /* CC4S[1:0] bits (Capture/Compare 4 Selection) */ -#define TIM_CC4S_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_CC4S_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define TIM_OC4FE ((uint16_t)0x0400) /* Output Compare 4 Fast enable */ -#define TIM_OC4PE ((uint16_t)0x0800) /* Output Compare 4 Preload enable */ - -#define TIM_OC4M ((uint16_t)0x7000) /* OC4M[2:0] bits (Output Compare 4 Mode) */ -#define TIM_OC4M_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_OC4M_1 ((uint16_t)0x2000) /* Bit 1 */ -#define TIM_OC4M_2 ((uint16_t)0x4000) /* Bit 2 */ - -#define TIM_OC4CE ((uint16_t)0x8000) /* Output Compare 4 Clear Enable */ - -#define TIM_IC3PSC ((uint16_t)0x000C) /* IC3PSC[1:0] bits (Input Capture 3 Prescaler) */ -#define TIM_IC3PSC_0 ((uint16_t)0x0004) /* Bit 0 */ -#define TIM_IC3PSC_1 ((uint16_t)0x0008) /* Bit 1 */ - -#define TIM_IC3F ((uint16_t)0x00F0) /* IC3F[3:0] bits (Input Capture 3 Filter) */ -#define TIM_IC3F_0 ((uint16_t)0x0010) /* Bit 0 */ -#define TIM_IC3F_1 ((uint16_t)0x0020) /* Bit 1 */ -#define TIM_IC3F_2 ((uint16_t)0x0040) /* Bit 2 */ -#define TIM_IC3F_3 ((uint16_t)0x0080) /* Bit 3 */ - -#define TIM_IC4PSC ((uint16_t)0x0C00) /* IC4PSC[1:0] bits (Input Capture 4 Prescaler) */ -#define TIM_IC4PSC_0 ((uint16_t)0x0400) /* Bit 0 */ -#define TIM_IC4PSC_1 ((uint16_t)0x0800) /* Bit 1 */ - -#define TIM_IC4F ((uint16_t)0xF000) /* IC4F[3:0] bits (Input Capture 4 Filter) */ -#define TIM_IC4F_0 ((uint16_t)0x1000) /* Bit 0 */ -#define TIM_IC4F_1 ((uint16_t)0x2000) /* Bit 1 */ -#define TIM_IC4F_2 ((uint16_t)0x4000) /* Bit 2 */ -#define TIM_IC4F_3 ((uint16_t)0x8000) /* Bit 3 */ - -/******************* Bit definition for TIM_CCER register *******************/ -#define TIM_CC1E ((uint16_t)0x0001) /* Capture/Compare 1 output enable */ -#define TIM_CC1P ((uint16_t)0x0002) /* Capture/Compare 1 output Polarity */ -#define TIM_CC1NE ((uint16_t)0x0004) /* Capture/Compare 1 Complementary output enable */ -#define TIM_CC1NP ((uint16_t)0x0008) /* Capture/Compare 1 Complementary output Polarity */ -#define TIM_CC2E ((uint16_t)0x0010) /* Capture/Compare 2 output enable */ -#define TIM_CC2P ((uint16_t)0x0020) /* Capture/Compare 2 output Polarity */ -#define TIM_CC2NE ((uint16_t)0x0040) /* Capture/Compare 2 Complementary output enable */ -#define TIM_CC2NP ((uint16_t)0x0080) /* Capture/Compare 2 Complementary output Polarity */ -#define TIM_CC3E ((uint16_t)0x0100) /* Capture/Compare 3 output enable */ -#define TIM_CC3P ((uint16_t)0x0200) /* Capture/Compare 3 output Polarity */ -#define TIM_CC3NE ((uint16_t)0x0400) /* Capture/Compare 3 Complementary output enable */ -#define TIM_CC3NP ((uint16_t)0x0800) /* Capture/Compare 3 Complementary output Polarity */ -#define TIM_CC4E ((uint16_t)0x1000) /* Capture/Compare 4 output enable */ -#define TIM_CC4P ((uint16_t)0x2000) /* Capture/Compare 4 output Polarity */ -#define TIM_CC4NP ((uint16_t)0x8000) /* Capture/Compare 4 Complementary output Polarity */ - -/******************* Bit definition for TIM_CNT register ********************/ -#define TIM_CNT ((uint16_t)0xFFFF) /* Counter Value */ - -/******************* Bit definition for TIM_PSC register ********************/ -#define TIM_PSC ((uint16_t)0xFFFF) /* Prescaler Value */ - -/******************* Bit definition for TIM_ATRLR register ********************/ -#define TIM_ARR ((uint16_t)0xFFFF) /* actual auto-reload Value */ - -/******************* Bit definition for TIM_RPTCR register ********************/ -#define TIM_REP ((uint8_t)0xFF) /* Repetition Counter Value */ - -/******************* Bit definition for TIM_CH1CVR register *******************/ -#define TIM_CCR1 ((uint16_t)0xFFFF) /* Capture/Compare 1 Value */ - -/******************* Bit definition for TIM_CH2CVR register *******************/ -#define TIM_CCR2 ((uint16_t)0xFFFF) /* Capture/Compare 2 Value */ - -/******************* Bit definition for TIM_CH3CVR register *******************/ -#define TIM_CCR3 ((uint16_t)0xFFFF) /* Capture/Compare 3 Value */ - -/******************* Bit definition for TIM_CH4CVR register *******************/ -#define TIM_CCR4 ((uint16_t)0xFFFF) /* Capture/Compare 4 Value */ - -/******************* Bit definition for TIM_BDTR register *******************/ -#define TIM_DTG ((uint16_t)0x00FF) /* DTG[0:7] bits (Dead-Time Generator set-up) */ -#define TIM_DTG_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_DTG_1 ((uint16_t)0x0002) /* Bit 1 */ -#define TIM_DTG_2 ((uint16_t)0x0004) /* Bit 2 */ -#define TIM_DTG_3 ((uint16_t)0x0008) /* Bit 3 */ -#define TIM_DTG_4 ((uint16_t)0x0010) /* Bit 4 */ -#define TIM_DTG_5 ((uint16_t)0x0020) /* Bit 5 */ -#define TIM_DTG_6 ((uint16_t)0x0040) /* Bit 6 */ -#define TIM_DTG_7 ((uint16_t)0x0080) /* Bit 7 */ - -#define TIM_LOCK ((uint16_t)0x0300) /* LOCK[1:0] bits (Lock Configuration) */ -#define TIM_LOCK_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_LOCK_1 ((uint16_t)0x0200) /* Bit 1 */ - -#define TIM_OSSI ((uint16_t)0x0400) /* Off-State Selection for Idle mode */ -#define TIM_OSSR ((uint16_t)0x0800) /* Off-State Selection for Run mode */ -#define TIM_BKE ((uint16_t)0x1000) /* Break enable */ -#define TIM_BKP ((uint16_t)0x2000) /* Break Polarity */ -#define TIM_AOE ((uint16_t)0x4000) /* Automatic Output enable */ -#define TIM_MOE ((uint16_t)0x8000) /* Main Output enable */ - -/******************* Bit definition for TIM_DMACFGR register ********************/ -#define TIM_DBA ((uint16_t)0x001F) /* DBA[4:0] bits (DMA Base Address) */ -#define TIM_DBA_0 ((uint16_t)0x0001) /* Bit 0 */ -#define TIM_DBA_1 ((uint16_t)0x0002) /* Bit 1 */ -#define TIM_DBA_2 ((uint16_t)0x0004) /* Bit 2 */ -#define TIM_DBA_3 ((uint16_t)0x0008) /* Bit 3 */ -#define TIM_DBA_4 ((uint16_t)0x0010) /* Bit 4 */ - -#define TIM_DBL ((uint16_t)0x1F00) /* DBL[4:0] bits (DMA Burst Length) */ -#define TIM_DBL_0 ((uint16_t)0x0100) /* Bit 0 */ -#define TIM_DBL_1 ((uint16_t)0x0200) /* Bit 1 */ -#define TIM_DBL_2 ((uint16_t)0x0400) /* Bit 2 */ -#define TIM_DBL_3 ((uint16_t)0x0800) /* Bit 3 */ -#define TIM_DBL_4 ((uint16_t)0x1000) /* Bit 4 */ - -/******************* Bit definition for TIM_DMAADR register *******************/ -#define TIM_DMAR_DMAB ((uint16_t)0xFFFF) /* DMA register for burst accesses */ - -/******************************************************************************/ -/* Universal Synchronous Asynchronous Receiver Transmitter */ -/******************************************************************************/ - -/******************* Bit definition for USART_STATR register *******************/ -#define USART_STATR_PE ((uint16_t)0x0001) /* Parity Error */ -#define USART_STATR_FE ((uint16_t)0x0002) /* Framing Error */ -#define USART_STATR_NE ((uint16_t)0x0004) /* Noise Error Flag */ -#define USART_STATR_ORE ((uint16_t)0x0008) /* OverRun Error */ -#define USART_STATR_IDLE ((uint16_t)0x0010) /* IDLE line detected */ -#define USART_STATR_RXNE ((uint16_t)0x0020) /* Read Data Register Not Empty */ -#define USART_STATR_TC ((uint16_t)0x0040) /* Transmission Complete */ -#define USART_STATR_TXE ((uint16_t)0x0080) /* Transmit Data Register Empty */ -#define USART_STATR_LBD ((uint16_t)0x0100) /* LIN Break Detection Flag */ -#define USART_STATR_CTS ((uint16_t)0x0200) /* CTS Flag */ - -/******************* Bit definition for USART_DATAR register *******************/ -#define USART_DATAR_DR ((uint16_t)0x01FF) /* Data value */ - -/****************** Bit definition for USART_BRR register *******************/ -#define USART_BRR_DIV_Fraction ((uint16_t)0x000F) /* Fraction of USARTDIV */ -#define USART_BRR_DIV_Mantissa ((uint16_t)0xFFF0) /* Mantissa of USARTDIV */ - -/****************** Bit definition for USART_CTLR1 register *******************/ -#define USART_CTLR1_SBK ((uint16_t)0x0001) /* Send Break */ -#define USART_CTLR1_RWU ((uint16_t)0x0002) /* Receiver wakeup */ -#define USART_CTLR1_RE ((uint16_t)0x0004) /* Receiver Enable */ -#define USART_CTLR1_TE ((uint16_t)0x0008) /* Transmitter Enable */ -#define USART_CTLR1_IDLEIE ((uint16_t)0x0010) /* IDLE Interrupt Enable */ -#define USART_CTLR1_RXNEIE ((uint16_t)0x0020) /* RXNE Interrupt Enable */ -#define USART_CTLR1_TCIE ((uint16_t)0x0040) /* Transmission Complete Interrupt Enable */ -#define USART_CTLR1_TXEIE ((uint16_t)0x0080) /* PE Interrupt Enable */ -#define USART_CTLR1_PEIE ((uint16_t)0x0100) /* PE Interrupt Enable */ -#define USART_CTLR1_PS ((uint16_t)0x0200) /* Parity Selection */ -#define USART_CTLR1_PCE ((uint16_t)0x0400) /* Parity Control Enable */ -#define USART_CTLR1_WAKE ((uint16_t)0x0800) /* Wakeup method */ -#define USART_CTLR1_M ((uint16_t)0x1000) /* Word length */ -#define USART_CTLR1_UE ((uint16_t)0x2000) /* USART Enable */ -#define USART_CTLR1_OVER8 ((uint16_t)0x8000) /* USART Oversmapling 8-bits */ - -/****************** Bit definition for USART_CTLR2 register *******************/ -#define USART_CTLR2_ADD ((uint16_t)0x000F) /* Address of the USART node */ -#define USART_CTLR2_LBDL ((uint16_t)0x0020) /* LIN Break Detection Length */ -#define USART_CTLR2_LBDIE ((uint16_t)0x0040) /* LIN Break Detection Interrupt Enable */ -#define USART_CTLR2_LBCL ((uint16_t)0x0100) /* Last Bit Clock pulse */ -#define USART_CTLR2_CPHA ((uint16_t)0x0200) /* Clock Phase */ -#define USART_CTLR2_CPOL ((uint16_t)0x0400) /* Clock Polarity */ -#define USART_CTLR2_CLKEN ((uint16_t)0x0800) /* Clock Enable */ - -#define USART_CTLR2_STOP ((uint16_t)0x3000) /* STOP[1:0] bits (STOP bits) */ -#define USART_CTLR2_STOP_0 ((uint16_t)0x1000) /* Bit 0 */ -#define USART_CTLR2_STOP_1 ((uint16_t)0x2000) /* Bit 1 */ - -#define USART_CTLR2_LINEN ((uint16_t)0x4000) /* LIN mode enable */ - -/****************** Bit definition for USART_CTLR3 register *******************/ -#define USART_CTLR3_EIE ((uint16_t)0x0001) /* Error Interrupt Enable */ -#define USART_CTLR3_IREN ((uint16_t)0x0002) /* IrDA mode Enable */ -#define USART_CTLR3_IRLP ((uint16_t)0x0004) /* IrDA Low-Power */ -#define USART_CTLR3_HDSEL ((uint16_t)0x0008) /* Half-Duplex Selection */ -#define USART_CTLR3_NACK ((uint16_t)0x0010) /* Smartcard NACK enable */ -#define USART_CTLR3_SCEN ((uint16_t)0x0020) /* Smartcard mode enable */ -#define USART_CTLR3_DMAR ((uint16_t)0x0040) /* DMA Enable Receiver */ -#define USART_CTLR3_DMAT ((uint16_t)0x0080) /* DMA Enable Transmitter */ -#define USART_CTLR3_RTSE ((uint16_t)0x0100) /* RTS Enable */ -#define USART_CTLR3_CTSE ((uint16_t)0x0200) /* CTS Enable */ -#define USART_CTLR3_CTSIE ((uint16_t)0x0400) /* CTS Interrupt Enable */ -#define USART_CTLR3_ONEBIT ((uint16_t)0x0800) /* One Bit method */ - -/****************** Bit definition for USART_GPR register ******************/ -#define USART_GPR_PSC ((uint16_t)0x00FF) /* PSC[7:0] bits (Prescaler value) */ -#define USART_GPR_PSC_0 ((uint16_t)0x0001) /* Bit 0 */ -#define USART_GPR_PSC_1 ((uint16_t)0x0002) /* Bit 1 */ -#define USART_GPR_PSC_2 ((uint16_t)0x0004) /* Bit 2 */ -#define USART_GPR_PSC_3 ((uint16_t)0x0008) /* Bit 3 */ -#define USART_GPR_PSC_4 ((uint16_t)0x0010) /* Bit 4 */ -#define USART_GPR_PSC_5 ((uint16_t)0x0020) /* Bit 5 */ -#define USART_GPR_PSC_6 ((uint16_t)0x0040) /* Bit 6 */ -#define USART_GPR_PSC_7 ((uint16_t)0x0080) /* Bit 7 */ - -#define USART_GPR_GT ((uint16_t)0xFF00) /* Guard time value */ - -/******************************************************************************/ -/* Window WATCHDOG */ -/******************************************************************************/ - -/******************* Bit definition for WWDG_CTLR register ********************/ -#define WWDG_CTLR_T ((uint8_t)0x7F) /* T[6:0] bits (7-Bit counter (MSB to LSB)) */ -#define WWDG_CTLR_T0 ((uint8_t)0x01) /* Bit 0 */ -#define WWDG_CTLR_T1 ((uint8_t)0x02) /* Bit 1 */ -#define WWDG_CTLR_T2 ((uint8_t)0x04) /* Bit 2 */ -#define WWDG_CTLR_T3 ((uint8_t)0x08) /* Bit 3 */ -#define WWDG_CTLR_T4 ((uint8_t)0x10) /* Bit 4 */ -#define WWDG_CTLR_T5 ((uint8_t)0x20) /* Bit 5 */ -#define WWDG_CTLR_T6 ((uint8_t)0x40) /* Bit 6 */ - -#define WWDG_CTLR_WDGA ((uint8_t)0x80) /* Activation bit */ - -/******************* Bit definition for WWDG_CFGR register *******************/ -#define WWDG_CFGR_W ((uint16_t)0x007F) /* W[6:0] bits (7-bit window value) */ -#define WWDG_CFGR_W0 ((uint16_t)0x0001) /* Bit 0 */ -#define WWDG_CFGR_W1 ((uint16_t)0x0002) /* Bit 1 */ -#define WWDG_CFGR_W2 ((uint16_t)0x0004) /* Bit 2 */ -#define WWDG_CFGR_W3 ((uint16_t)0x0008) /* Bit 3 */ -#define WWDG_CFGR_W4 ((uint16_t)0x0010) /* Bit 4 */ -#define WWDG_CFGR_W5 ((uint16_t)0x0020) /* Bit 5 */ -#define WWDG_CFGR_W6 ((uint16_t)0x0040) /* Bit 6 */ - -#define WWDG_CFGR_WDGTB ((uint16_t)0x0180) /* WDGTB[1:0] bits (Timer Base) */ -#define WWDG_CFGR_WDGTB0 ((uint16_t)0x0080) /* Bit 0 */ -#define WWDG_CFGR_WDGTB1 ((uint16_t)0x0100) /* Bit 1 */ - -#define WWDG_CFGR_EWI ((uint16_t)0x0200) /* Early Wakeup Interrupt */ - -/******************* Bit definition for WWDG_STATR register ********************/ -#define WWDG_STATR_EWIF ((uint8_t)0x01) /* Early Wakeup Interrupt Flag */ - -/******************************************************************************/ -/* ENHANCED FUNNCTION */ -/******************************************************************************/ - -/**************************** Enhanced register *****************************/ -#define EXTEN_USBD_LS ((uint32_t)0x00000001) /* Bit 0 */ -#define EXTEN_USBD_PU_EN ((uint32_t)0x00000002) /* Bit 1 */ -#define EXTEN_USBHD_IO_EN ((uint32_t)0x00000004) /* Bit 2 */ -#define EXTEN_USB_5V_SEL ((uint32_t)0x00000008) /* Bit 3 */ -#define EXTEN_PLL_HSI_PRE ((uint32_t)0x00000010) /* Bit 4 */ -#define EXTEN_LOCKUP_EN ((uint32_t)0x00000040) /* Bit 5 */ -#define EXTEN_LOCKUP_RSTF ((uint32_t)0x00000080) /* Bit 7 */ - -#define EXTEN_ULLDO_TRIM ((uint32_t)0x00000300) /* ULLDO_TRIM[1:0] bits */ -#define EXTEN_ULLDO_TRIM0 ((uint32_t)0x00000100) /* Bit 0 */ -#define EXTEN_ULLDO_TRIM1 ((uint32_t)0x00000200) /* Bit 1 */ - -#define EXTEN_IDO_TRIM ((uint32_t)0x00000400) /* Bit 10 */ -#define EXTEN_WRITE_EN ((uint32_t)0x00004000) /* Bit 14 */ -#define EXTEN_SHORT_WAKE ((uint32_t)0x00008000) /* Bit 15 */ - -#define EXTEN_FLASH_CLK_TRIM ((uint32_t)0x00070000) /* FLASH_CLK_TRIM[2:0] bits */ -#define EXTEN_FLASH_CLK_TRIM0 ((uint32_t)0x00010000) /* Bit 0 */ -#define EXTEN_FLASH_CLK_TRIM1 ((uint32_t)0x00020000) /* Bit 1 */ -#define EXTEN_FLASH_CLK_TRIM2 ((uint32_t)0x00040000) /* Bit 2 */ - -#include "ch32v10x_conf.h" - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_adc.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_adc.h deleted file mode 100644 index 06f5e53..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_adc.h +++ /dev/null @@ -1,188 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_adc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * ADC firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_ADC_H -#define __CH32V10x_ADC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* ADC Init structure definition */ -typedef struct -{ - uint32_t ADC_Mode; /* Configures the ADC to operate in independent or - dual mode. - This parameter can be a value of @ref ADC_mode */ - - FunctionalState ADC_ScanConvMode; /* Specifies whether the conversion is performed in - Scan (multichannels) or Single (one channel) mode. - This parameter can be set to ENABLE or DISABLE */ - - FunctionalState ADC_ContinuousConvMode; /* Specifies whether the conversion is performed in - Continuous or Single mode. - This parameter can be set to ENABLE or DISABLE. */ - - uint32_t ADC_ExternalTrigConv; /* Defines the external trigger used to start the analog - to digital conversion of regular channels. This parameter - can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */ - - uint32_t ADC_DataAlign; /* Specifies whether the ADC data alignment is left or right. - This parameter can be a value of @ref ADC_data_align */ - - uint8_t ADC_NbrOfChannel; /* Specifies the number of ADC channels that will be converted - using the sequencer for regular channel group. - This parameter must range from 1 to 16. */ -} ADC_InitTypeDef; - -/* ADC_mode */ -#define ADC_Mode_Independent ((uint32_t)0x00000000) -#define ADC_Mode_RegInjecSimult ((uint32_t)0x00010000) -#define ADC_Mode_RegSimult_AlterTrig ((uint32_t)0x00020000) -#define ADC_Mode_InjecSimult_FastInterl ((uint32_t)0x00030000) -#define ADC_Mode_InjecSimult_SlowInterl ((uint32_t)0x00040000) -#define ADC_Mode_InjecSimult ((uint32_t)0x00050000) -#define ADC_Mode_RegSimult ((uint32_t)0x00060000) -#define ADC_Mode_FastInterl ((uint32_t)0x00070000) -#define ADC_Mode_SlowInterl ((uint32_t)0x00080000) -#define ADC_Mode_AlterTrig ((uint32_t)0x00090000) - -/* ADC_external_trigger_sources_for_regular_channels_conversion */ -#define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000) -#define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x00020000) -#define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x00060000) -#define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x00080000) -#define ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x000A0000) -#define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO ((uint32_t)0x000C0000) - -#define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x00040000) -#define ADC_ExternalTrigConv_None ((uint32_t)0x000E0000) - -/* ADC_data_align */ -#define ADC_DataAlign_Right ((uint32_t)0x00000000) -#define ADC_DataAlign_Left ((uint32_t)0x00000800) - -/* ADC_channels */ -#define ADC_Channel_0 ((uint8_t)0x00) -#define ADC_Channel_1 ((uint8_t)0x01) -#define ADC_Channel_2 ((uint8_t)0x02) -#define ADC_Channel_3 ((uint8_t)0x03) -#define ADC_Channel_4 ((uint8_t)0x04) -#define ADC_Channel_5 ((uint8_t)0x05) -#define ADC_Channel_6 ((uint8_t)0x06) -#define ADC_Channel_7 ((uint8_t)0x07) -#define ADC_Channel_8 ((uint8_t)0x08) -#define ADC_Channel_9 ((uint8_t)0x09) -#define ADC_Channel_10 ((uint8_t)0x0A) -#define ADC_Channel_11 ((uint8_t)0x0B) -#define ADC_Channel_12 ((uint8_t)0x0C) -#define ADC_Channel_13 ((uint8_t)0x0D) -#define ADC_Channel_14 ((uint8_t)0x0E) -#define ADC_Channel_15 ((uint8_t)0x0F) -#define ADC_Channel_16 ((uint8_t)0x10) -#define ADC_Channel_17 ((uint8_t)0x11) - -#define ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16) -#define ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17) - -/* ADC_sampling_time */ -#define ADC_SampleTime_1Cycles5 ((uint8_t)0x00) -#define ADC_SampleTime_7Cycles5 ((uint8_t)0x01) -#define ADC_SampleTime_13Cycles5 ((uint8_t)0x02) -#define ADC_SampleTime_28Cycles5 ((uint8_t)0x03) -#define ADC_SampleTime_41Cycles5 ((uint8_t)0x04) -#define ADC_SampleTime_55Cycles5 ((uint8_t)0x05) -#define ADC_SampleTime_71Cycles5 ((uint8_t)0x06) -#define ADC_SampleTime_239Cycles5 ((uint8_t)0x07) - -/* ADC_external_trigger_sources_for_injected_channels_conversion */ -#define ADC_ExternalTrigInjecConv_T2_TRGO ((uint32_t)0x00002000) -#define ADC_ExternalTrigInjecConv_T2_CC1 ((uint32_t)0x00003000) -#define ADC_ExternalTrigInjecConv_T3_CC4 ((uint32_t)0x00004000) -#define ADC_ExternalTrigInjecConv_T4_TRGO ((uint32_t)0x00005000) -#define ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4 ((uint32_t)0x00006000) - -#define ADC_ExternalTrigInjecConv_T1_TRGO ((uint32_t)0x00000000) -#define ADC_ExternalTrigInjecConv_T1_CC4 ((uint32_t)0x00001000) -#define ADC_ExternalTrigInjecConv_None ((uint32_t)0x00007000) - -/* ADC_injected_channel_selection */ -#define ADC_InjectedChannel_1 ((uint8_t)0x14) -#define ADC_InjectedChannel_2 ((uint8_t)0x18) -#define ADC_InjectedChannel_3 ((uint8_t)0x1C) -#define ADC_InjectedChannel_4 ((uint8_t)0x20) - -/* ADC_analog_watchdog_selection */ -#define ADC_AnalogWatchdog_SingleRegEnable ((uint32_t)0x00800200) -#define ADC_AnalogWatchdog_SingleInjecEnable ((uint32_t)0x00400200) -#define ADC_AnalogWatchdog_SingleRegOrInjecEnable ((uint32_t)0x00C00200) -#define ADC_AnalogWatchdog_AllRegEnable ((uint32_t)0x00800000) -#define ADC_AnalogWatchdog_AllInjecEnable ((uint32_t)0x00400000) -#define ADC_AnalogWatchdog_AllRegAllInjecEnable ((uint32_t)0x00C00000) -#define ADC_AnalogWatchdog_None ((uint32_t)0x00000000) - -/* ADC_interrupts_definition */ -#define ADC_IT_EOC ((uint16_t)0x0220) -#define ADC_IT_AWD ((uint16_t)0x0140) -#define ADC_IT_JEOC ((uint16_t)0x0480) - -/* ADC_flags_definition */ -#define ADC_FLAG_AWD ((uint8_t)0x01) -#define ADC_FLAG_EOC ((uint8_t)0x02) -#define ADC_FLAG_JEOC ((uint8_t)0x04) -#define ADC_FLAG_JSTRT ((uint8_t)0x08) -#define ADC_FLAG_STRT ((uint8_t)0x10) - -void ADC_DeInit(ADC_TypeDef *ADCx); -void ADC_Init(ADC_TypeDef *ADCx, ADC_InitTypeDef *ADC_InitStruct); -void ADC_StructInit(ADC_InitTypeDef *ADC_InitStruct); -void ADC_Cmd(ADC_TypeDef *ADCx, FunctionalState NewState); -void ADC_DMACmd(ADC_TypeDef *ADCx, FunctionalState NewState); -void ADC_ITConfig(ADC_TypeDef *ADCx, uint16_t ADC_IT, FunctionalState NewState); -void ADC_ResetCalibration(ADC_TypeDef *ADCx); -FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef *ADCx); -void ADC_StartCalibration(ADC_TypeDef *ADCx); -FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef *ADCx); -void ADC_SoftwareStartConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState); -FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef *ADCx); -void ADC_DiscModeChannelCountConfig(ADC_TypeDef *ADCx, uint8_t Number); -void ADC_DiscModeCmd(ADC_TypeDef *ADCx, FunctionalState NewState); -void ADC_RegularChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); -void ADC_ExternalTrigConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState); -uint16_t ADC_GetConversionValue(ADC_TypeDef *ADCx); -uint32_t ADC_GetDualModeConversionValue(void); -void ADC_AutoInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState); -void ADC_InjectedDiscModeCmd(ADC_TypeDef *ADCx, FunctionalState NewState); -void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef *ADCx, uint32_t ADC_ExternalTrigInjecConv); -void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState); -void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState); -FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef *ADCx); -void ADC_InjectedChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); -void ADC_InjectedSequencerLengthConfig(ADC_TypeDef *ADCx, uint8_t Length); -void ADC_SetInjectedOffset(ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset); -uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel); -void ADC_AnalogWatchdogCmd(ADC_TypeDef *ADCx, uint32_t ADC_AnalogWatchdog); -void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef *ADCx, uint16_t HighThreshold, uint16_t LowThreshold); -void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel); -void ADC_TempSensorVrefintCmd(FunctionalState NewState); -FlagStatus ADC_GetFlagStatus(ADC_TypeDef *ADCx, uint8_t ADC_FLAG); -void ADC_ClearFlag(ADC_TypeDef *ADCx, uint8_t ADC_FLAG); -ITStatus ADC_GetITStatus(ADC_TypeDef *ADCx, uint16_t ADC_IT); -void ADC_ClearITPendingBit(ADC_TypeDef *ADCx, uint16_t ADC_IT); -s32 TempSensor_Volt_To_Temper(s32 Value); -int16_t Get_CalibrationValue(ADC_TypeDef *ADCx); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32V10x_ADC_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_bkp.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_bkp.h deleted file mode 100644 index 5bd076f..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_bkp.h +++ /dev/null @@ -1,91 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_bkp.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * BKP firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_BKP_H -#define __CH32V10x_BKP_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* Tamper_Pin_active_level */ -#define BKP_TamperPinLevel_High ((uint16_t)0x0000) -#define BKP_TamperPinLevel_Low ((uint16_t)0x0001) - -/* RTC_output_source_to_output_on_the_Tamper_pin */ -#define BKP_RTCOutputSource_None ((uint16_t)0x0000) -#define BKP_RTCOutputSource_CalibClock ((uint16_t)0x0080) -#define BKP_RTCOutputSource_Alarm ((uint16_t)0x0100) -#define BKP_RTCOutputSource_Second ((uint16_t)0x0300) - -/* Data_Backup_Register */ -#define BKP_DR1 ((uint16_t)0x0004) -#define BKP_DR2 ((uint16_t)0x0008) -#define BKP_DR3 ((uint16_t)0x000C) -#define BKP_DR4 ((uint16_t)0x0010) -#define BKP_DR5 ((uint16_t)0x0014) -#define BKP_DR6 ((uint16_t)0x0018) -#define BKP_DR7 ((uint16_t)0x001C) -#define BKP_DR8 ((uint16_t)0x0020) -#define BKP_DR9 ((uint16_t)0x0024) -#define BKP_DR10 ((uint16_t)0x0028) -#define BKP_DR11 ((uint16_t)0x0040) -#define BKP_DR12 ((uint16_t)0x0044) -#define BKP_DR13 ((uint16_t)0x0048) -#define BKP_DR14 ((uint16_t)0x004C) -#define BKP_DR15 ((uint16_t)0x0050) -#define BKP_DR16 ((uint16_t)0x0054) -#define BKP_DR17 ((uint16_t)0x0058) -#define BKP_DR18 ((uint16_t)0x005C) -#define BKP_DR19 ((uint16_t)0x0060) -#define BKP_DR20 ((uint16_t)0x0064) -#define BKP_DR21 ((uint16_t)0x0068) -#define BKP_DR22 ((uint16_t)0x006C) -#define BKP_DR23 ((uint16_t)0x0070) -#define BKP_DR24 ((uint16_t)0x0074) -#define BKP_DR25 ((uint16_t)0x0078) -#define BKP_DR26 ((uint16_t)0x007C) -#define BKP_DR27 ((uint16_t)0x0080) -#define BKP_DR28 ((uint16_t)0x0084) -#define BKP_DR29 ((uint16_t)0x0088) -#define BKP_DR30 ((uint16_t)0x008C) -#define BKP_DR31 ((uint16_t)0x0090) -#define BKP_DR32 ((uint16_t)0x0094) -#define BKP_DR33 ((uint16_t)0x0098) -#define BKP_DR34 ((uint16_t)0x009C) -#define BKP_DR35 ((uint16_t)0x00A0) -#define BKP_DR36 ((uint16_t)0x00A4) -#define BKP_DR37 ((uint16_t)0x00A8) -#define BKP_DR38 ((uint16_t)0x00AC) -#define BKP_DR39 ((uint16_t)0x00B0) -#define BKP_DR40 ((uint16_t)0x00B4) -#define BKP_DR41 ((uint16_t)0x00B8) -#define BKP_DR42 ((uint16_t)0x00BC) - -void BKP_DeInit(void); -void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel); -void BKP_TamperPinCmd(FunctionalState NewState); -void BKP_ITConfig(FunctionalState NewState); -void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource); -void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue); -void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data); -uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR); -FlagStatus BKP_GetFlagStatus(void); -void BKP_ClearFlag(void); -ITStatus BKP_GetITStatus(void); -void BKP_ClearITPendingBit(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_BKP_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_crc.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_crc.h deleted file mode 100644 index f117b23..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_crc.h +++ /dev/null @@ -1,31 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_crc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * CRC firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_CRC_H -#define __CH32V10x_CRC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -void CRC_ResetDR(void); -uint32_t CRC_CalcCRC(uint32_t Data); -uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength); -uint32_t CRC_GetCRC(void); -void CRC_SetIDRegister(uint8_t IDValue); -uint8_t CRC_GetIDRegister(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_CRC_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_dbgmcu.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_dbgmcu.h deleted file mode 100644 index 56f105f..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_dbgmcu.h +++ /dev/null @@ -1,41 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_dbgmcu.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * DBGMCU firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_DBGMCU_H -#define __CH32V10x_DBGMCU_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* CFGR0 Register */ -#define DBGMCU_IWDG_STOP ((uint32_t)0x00000001) -#define DBGMCU_WWDG_STOP ((uint32_t)0x00000002) -#define DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00000004) -#define DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00000008) -#define DBGMCU_TIM1_STOP ((uint32_t)0x00000010) -#define DBGMCU_TIM2_STOP ((uint32_t)0x00000020) -#define DBGMCU_TIM3_STOP ((uint32_t)0x00000040) -#define DBGMCU_TIM4_STOP ((uint32_t)0x00000080) - -/* CFGR1 Register */ -#define DBGMCU_SLEEP ((uint32_t)0x00000001) -#define DBGMCU_STOP ((uint32_t)0x00000002) -#define DBGMCU_STANDBY ((uint32_t)0x00000004) - -void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_DBGMCU_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_dma.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_dma.h deleted file mode 100644 index ad6b5ee..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_dma.h +++ /dev/null @@ -1,216 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_dma.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * DMA firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_DMA_H -#define __CH32V10x_DMA_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* DMA Init structure definition */ -typedef struct -{ - uint32_t DMA_PeripheralBaseAddr; /* Specifies the peripheral base address for DMAy Channelx. */ - - uint32_t DMA_MemoryBaseAddr; /* Specifies the memory base address for DMAy Channelx. */ - - uint32_t DMA_DIR; /* Specifies if the peripheral is the source or destination. - This parameter can be a value of @ref DMA_data_transfer_direction */ - - uint32_t DMA_BufferSize; /* Specifies the buffer size, in data unit, of the specified Channel. - The data unit is equal to the configuration set in DMA_PeripheralDataSize - or DMA_MemoryDataSize members depending in the transfer direction. */ - - uint32_t DMA_PeripheralInc; /* Specifies whether the Peripheral address register is incremented or not. - This parameter can be a value of @ref DMA_peripheral_incremented_mode */ - - uint32_t DMA_MemoryInc; /* Specifies whether the memory address register is incremented or not. - This parameter can be a value of @ref DMA_memory_incremented_mode */ - - uint32_t DMA_PeripheralDataSize; /* Specifies the Peripheral data width. - This parameter can be a value of @ref DMA_peripheral_data_size */ - - uint32_t DMA_MemoryDataSize; /* Specifies the Memory data width. - This parameter can be a value of @ref DMA_memory_data_size */ - - uint32_t DMA_Mode; /* Specifies the operation mode of the DMAy Channelx. - This parameter can be a value of @ref DMA_circular_normal_mode. - @note: The circular buffer mode cannot be used if the memory-to-memory - data transfer is configured on the selected Channel */ - - uint32_t DMA_Priority; /* Specifies the software priority for the DMAy Channelx. - This parameter can be a value of @ref DMA_priority_level */ - - uint32_t DMA_M2M; /* Specifies if the DMAy Channelx will be used in memory-to-memory transfer. - This parameter can be a value of @ref DMA_memory_to_memory */ -} DMA_InitTypeDef; - -/* DMA_data_transfer_direction */ -#define DMA_DIR_PeripheralDST ((uint32_t)0x00000010) -#define DMA_DIR_PeripheralSRC ((uint32_t)0x00000000) - -/* DMA_peripheral_incremented_mode */ -#define DMA_PeripheralInc_Enable ((uint32_t)0x00000040) -#define DMA_PeripheralInc_Disable ((uint32_t)0x00000000) - -/* DMA_memory_incremented_mode */ -#define DMA_MemoryInc_Enable ((uint32_t)0x00000080) -#define DMA_MemoryInc_Disable ((uint32_t)0x00000000) - -/* DMA_peripheral_data_size */ -#define DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000) -#define DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000100) -#define DMA_PeripheralDataSize_Word ((uint32_t)0x00000200) - -/* DMA_memory_data_size */ -#define DMA_MemoryDataSize_Byte ((uint32_t)0x00000000) -#define DMA_MemoryDataSize_HalfWord ((uint32_t)0x00000400) -#define DMA_MemoryDataSize_Word ((uint32_t)0x00000800) - -/* DMA_circular_normal_mode */ -#define DMA_Mode_Circular ((uint32_t)0x00000020) -#define DMA_Mode_Normal ((uint32_t)0x00000000) - -/* DMA_priority_level */ -#define DMA_Priority_VeryHigh ((uint32_t)0x00003000) -#define DMA_Priority_High ((uint32_t)0x00002000) -#define DMA_Priority_Medium ((uint32_t)0x00001000) -#define DMA_Priority_Low ((uint32_t)0x00000000) - -/* DMA_memory_to_memory */ -#define DMA_M2M_Enable ((uint32_t)0x00004000) -#define DMA_M2M_Disable ((uint32_t)0x00000000) - -/* DMA_interrupts_definition */ -#define DMA_IT_TC ((uint32_t)0x00000002) -#define DMA_IT_HT ((uint32_t)0x00000004) -#define DMA_IT_TE ((uint32_t)0x00000008) - -#define DMA1_IT_GL1 ((uint32_t)0x00000001) -#define DMA1_IT_TC1 ((uint32_t)0x00000002) -#define DMA1_IT_HT1 ((uint32_t)0x00000004) -#define DMA1_IT_TE1 ((uint32_t)0x00000008) -#define DMA1_IT_GL2 ((uint32_t)0x00000010) -#define DMA1_IT_TC2 ((uint32_t)0x00000020) -#define DMA1_IT_HT2 ((uint32_t)0x00000040) -#define DMA1_IT_TE2 ((uint32_t)0x00000080) -#define DMA1_IT_GL3 ((uint32_t)0x00000100) -#define DMA1_IT_TC3 ((uint32_t)0x00000200) -#define DMA1_IT_HT3 ((uint32_t)0x00000400) -#define DMA1_IT_TE3 ((uint32_t)0x00000800) -#define DMA1_IT_GL4 ((uint32_t)0x00001000) -#define DMA1_IT_TC4 ((uint32_t)0x00002000) -#define DMA1_IT_HT4 ((uint32_t)0x00004000) -#define DMA1_IT_TE4 ((uint32_t)0x00008000) -#define DMA1_IT_GL5 ((uint32_t)0x00010000) -#define DMA1_IT_TC5 ((uint32_t)0x00020000) -#define DMA1_IT_HT5 ((uint32_t)0x00040000) -#define DMA1_IT_TE5 ((uint32_t)0x00080000) -#define DMA1_IT_GL6 ((uint32_t)0x00100000) -#define DMA1_IT_TC6 ((uint32_t)0x00200000) -#define DMA1_IT_HT6 ((uint32_t)0x00400000) -#define DMA1_IT_TE6 ((uint32_t)0x00800000) -#define DMA1_IT_GL7 ((uint32_t)0x01000000) -#define DMA1_IT_TC7 ((uint32_t)0x02000000) -#define DMA1_IT_HT7 ((uint32_t)0x04000000) -#define DMA1_IT_TE7 ((uint32_t)0x08000000) - -#define DMA2_IT_GL1 ((uint32_t)0x10000001) -#define DMA2_IT_TC1 ((uint32_t)0x10000002) -#define DMA2_IT_HT1 ((uint32_t)0x10000004) -#define DMA2_IT_TE1 ((uint32_t)0x10000008) -#define DMA2_IT_GL2 ((uint32_t)0x10000010) -#define DMA2_IT_TC2 ((uint32_t)0x10000020) -#define DMA2_IT_HT2 ((uint32_t)0x10000040) -#define DMA2_IT_TE2 ((uint32_t)0x10000080) -#define DMA2_IT_GL3 ((uint32_t)0x10000100) -#define DMA2_IT_TC3 ((uint32_t)0x10000200) -#define DMA2_IT_HT3 ((uint32_t)0x10000400) -#define DMA2_IT_TE3 ((uint32_t)0x10000800) -#define DMA2_IT_GL4 ((uint32_t)0x10001000) -#define DMA2_IT_TC4 ((uint32_t)0x10002000) -#define DMA2_IT_HT4 ((uint32_t)0x10004000) -#define DMA2_IT_TE4 ((uint32_t)0x10008000) -#define DMA2_IT_GL5 ((uint32_t)0x10010000) -#define DMA2_IT_TC5 ((uint32_t)0x10020000) -#define DMA2_IT_HT5 ((uint32_t)0x10040000) -#define DMA2_IT_TE5 ((uint32_t)0x10080000) - -/* DMA_flags_definition */ -#define DMA1_FLAG_GL1 ((uint32_t)0x00000001) -#define DMA1_FLAG_TC1 ((uint32_t)0x00000002) -#define DMA1_FLAG_HT1 ((uint32_t)0x00000004) -#define DMA1_FLAG_TE1 ((uint32_t)0x00000008) -#define DMA1_FLAG_GL2 ((uint32_t)0x00000010) -#define DMA1_FLAG_TC2 ((uint32_t)0x00000020) -#define DMA1_FLAG_HT2 ((uint32_t)0x00000040) -#define DMA1_FLAG_TE2 ((uint32_t)0x00000080) -#define DMA1_FLAG_GL3 ((uint32_t)0x00000100) -#define DMA1_FLAG_TC3 ((uint32_t)0x00000200) -#define DMA1_FLAG_HT3 ((uint32_t)0x00000400) -#define DMA1_FLAG_TE3 ((uint32_t)0x00000800) -#define DMA1_FLAG_GL4 ((uint32_t)0x00001000) -#define DMA1_FLAG_TC4 ((uint32_t)0x00002000) -#define DMA1_FLAG_HT4 ((uint32_t)0x00004000) -#define DMA1_FLAG_TE4 ((uint32_t)0x00008000) -#define DMA1_FLAG_GL5 ((uint32_t)0x00010000) -#define DMA1_FLAG_TC5 ((uint32_t)0x00020000) -#define DMA1_FLAG_HT5 ((uint32_t)0x00040000) -#define DMA1_FLAG_TE5 ((uint32_t)0x00080000) -#define DMA1_FLAG_GL6 ((uint32_t)0x00100000) -#define DMA1_FLAG_TC6 ((uint32_t)0x00200000) -#define DMA1_FLAG_HT6 ((uint32_t)0x00400000) -#define DMA1_FLAG_TE6 ((uint32_t)0x00800000) -#define DMA1_FLAG_GL7 ((uint32_t)0x01000000) -#define DMA1_FLAG_TC7 ((uint32_t)0x02000000) -#define DMA1_FLAG_HT7 ((uint32_t)0x04000000) -#define DMA1_FLAG_TE7 ((uint32_t)0x08000000) - -#define DMA2_FLAG_GL1 ((uint32_t)0x10000001) -#define DMA2_FLAG_TC1 ((uint32_t)0x10000002) -#define DMA2_FLAG_HT1 ((uint32_t)0x10000004) -#define DMA2_FLAG_TE1 ((uint32_t)0x10000008) -#define DMA2_FLAG_GL2 ((uint32_t)0x10000010) -#define DMA2_FLAG_TC2 ((uint32_t)0x10000020) -#define DMA2_FLAG_HT2 ((uint32_t)0x10000040) -#define DMA2_FLAG_TE2 ((uint32_t)0x10000080) -#define DMA2_FLAG_GL3 ((uint32_t)0x10000100) -#define DMA2_FLAG_TC3 ((uint32_t)0x10000200) -#define DMA2_FLAG_HT3 ((uint32_t)0x10000400) -#define DMA2_FLAG_TE3 ((uint32_t)0x10000800) -#define DMA2_FLAG_GL4 ((uint32_t)0x10001000) -#define DMA2_FLAG_TC4 ((uint32_t)0x10002000) -#define DMA2_FLAG_HT4 ((uint32_t)0x10004000) -#define DMA2_FLAG_TE4 ((uint32_t)0x10008000) -#define DMA2_FLAG_GL5 ((uint32_t)0x10010000) -#define DMA2_FLAG_TC5 ((uint32_t)0x10020000) -#define DMA2_FLAG_HT5 ((uint32_t)0x10040000) -#define DMA2_FLAG_TE5 ((uint32_t)0x10080000) - -void DMA_DeInit(DMA_Channel_TypeDef *DMAy_Channelx); -void DMA_Init(DMA_Channel_TypeDef *DMAy_Channelx, DMA_InitTypeDef *DMA_InitStruct); -void DMA_StructInit(DMA_InitTypeDef *DMA_InitStruct); -void DMA_Cmd(DMA_Channel_TypeDef *DMAy_Channelx, FunctionalState NewState); -void DMA_ITConfig(DMA_Channel_TypeDef *DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState); -void DMA_SetCurrDataCounter(DMA_Channel_TypeDef *DMAy_Channelx, uint16_t DataNumber); -uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef *DMAy_Channelx); -FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG); -void DMA_ClearFlag(uint32_t DMAy_FLAG); -ITStatus DMA_GetITStatus(uint32_t DMAy_IT); -void DMA_ClearITPendingBit(uint32_t DMAy_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32V10x_DMA_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_exti.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_exti.h deleted file mode 100644 index bf6de44..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_exti.h +++ /dev/null @@ -1,86 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_exti.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * EXTI firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_EXTI_H -#define __CH32V10x_EXTI_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* EXTI mode enumeration */ -typedef enum -{ - EXTI_Mode_Interrupt = 0x00, - EXTI_Mode_Event = 0x04 -} EXTIMode_TypeDef; - -/* EXTI Trigger enumeration */ -typedef enum -{ - EXTI_Trigger_Rising = 0x08, - EXTI_Trigger_Falling = 0x0C, - EXTI_Trigger_Rising_Falling = 0x10 -} EXTITrigger_TypeDef; - -/* EXTI Init Structure definition */ -typedef struct -{ - uint32_t EXTI_Line; /* Specifies the EXTI lines to be enabled or disabled. - This parameter can be any combination of @ref EXTI_Lines */ - - EXTIMode_TypeDef EXTI_Mode; /* Specifies the mode for the EXTI lines. - This parameter can be a value of @ref EXTIMode_TypeDef */ - - EXTITrigger_TypeDef EXTI_Trigger; /* Specifies the trigger signal active edge for the EXTI lines. - This parameter can be a value of @ref EXTIMode_TypeDef */ - - FunctionalState EXTI_LineCmd; /* Specifies the new state of the selected EXTI lines. - This parameter can be set either to ENABLE or DISABLE */ -} EXTI_InitTypeDef; - -/* EXTI_Lines */ -#define EXTI_Line0 ((uint32_t)0x00001) /* External interrupt line 0 */ -#define EXTI_Line1 ((uint32_t)0x00002) /* External interrupt line 1 */ -#define EXTI_Line2 ((uint32_t)0x00004) /* External interrupt line 2 */ -#define EXTI_Line3 ((uint32_t)0x00008) /* External interrupt line 3 */ -#define EXTI_Line4 ((uint32_t)0x00010) /* External interrupt line 4 */ -#define EXTI_Line5 ((uint32_t)0x00020) /* External interrupt line 5 */ -#define EXTI_Line6 ((uint32_t)0x00040) /* External interrupt line 6 */ -#define EXTI_Line7 ((uint32_t)0x00080) /* External interrupt line 7 */ -#define EXTI_Line8 ((uint32_t)0x00100) /* External interrupt line 8 */ -#define EXTI_Line9 ((uint32_t)0x00200) /* External interrupt line 9 */ -#define EXTI_Line10 ((uint32_t)0x00400) /* External interrupt line 10 */ -#define EXTI_Line11 ((uint32_t)0x00800) /* External interrupt line 11 */ -#define EXTI_Line12 ((uint32_t)0x01000) /* External interrupt line 12 */ -#define EXTI_Line13 ((uint32_t)0x02000) /* External interrupt line 13 */ -#define EXTI_Line14 ((uint32_t)0x04000) /* External interrupt line 14 */ -#define EXTI_Line15 ((uint32_t)0x08000) /* External interrupt line 15 */ -#define EXTI_Line16 ((uint32_t)0x10000) /* External interrupt line 16 Connected to the PVD Output */ -#define EXTI_Line17 ((uint32_t)0x20000) /* External interrupt line 17 Connected to the RTC Alarm event */ -#define EXTI_Line18 ((uint32_t)0x40000) -#define EXTI_Line19 ((uint32_t)0x80000) /* External interrupt line 19 Connected to the USBHD Wakeup event */ - -void EXTI_DeInit(void); -void EXTI_Init(EXTI_InitTypeDef *EXTI_InitStruct); -void EXTI_StructInit(EXTI_InitTypeDef *EXTI_InitStruct); -void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); -FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line); -void EXTI_ClearFlag(uint32_t EXTI_Line); -ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); -void EXTI_ClearITPendingBit(uint32_t EXTI_Line); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_EXTI_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_flash.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_flash.h deleted file mode 100644 index a07e498..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_flash.h +++ /dev/null @@ -1,155 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_flash.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the FLASH - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_FLASH_H -#define __CH32V10x_FLASH_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* FLASH Status */ -typedef enum -{ - FLASH_BUSY = 1, - FLASH_ERROR_PG, - FLASH_ERROR_WRP, - FLASH_COMPLETE, - FLASH_TIMEOUT -} FLASH_Status; - -/* Flash_Latency */ -#define FLASH_Latency_0 ((uint32_t)0x00000000) /* FLASH Zero Latency cycle */ -#define FLASH_Latency_1 ((uint32_t)0x00000001) /* FLASH One Latency cycle */ -#define FLASH_Latency_2 ((uint32_t)0x00000002) /* FLASH Two Latency cycles */ - -/* Half_Cycle_Enable_Disable */ -#define FLASH_HalfCycleAccess_Enable ((uint32_t)0x00000008) /* FLASH Half Cycle Enable */ -#define FLASH_HalfCycleAccess_Disable ((uint32_t)0x00000000) /* FLASH Half Cycle Disable */ - -/* Prefetch_Buffer_Enable_Disable */ -#define FLASH_PrefetchBuffer_Enable ((uint32_t)0x00000010) /* FLASH Prefetch Buffer Enable */ -#define FLASH_PrefetchBuffer_Disable ((uint32_t)0x00000000) /* FLASH Prefetch Buffer Disable */ - -/* Values to be used with CH32V10x Low and Medium density devices */ -#define FLASH_WRProt_Pages0to3 ((uint32_t)0x00000001) /* CH32 Low and Medium density devices: Write protection of page 0 to 3 */ -#define FLASH_WRProt_Pages4to7 ((uint32_t)0x00000002) /* CH32 Low and Medium density devices: Write protection of page 4 to 7 */ -#define FLASH_WRProt_Pages8to11 ((uint32_t)0x00000004) /* CH32 Low and Medium density devices: Write protection of page 8 to 11 */ -#define FLASH_WRProt_Pages12to15 ((uint32_t)0x00000008) /* CH32 Low and Medium density devices: Write protection of page 12 to 15 */ -#define FLASH_WRProt_Pages16to19 ((uint32_t)0x00000010) /* CH32 Low and Medium density devices: Write protection of page 16 to 19 */ -#define FLASH_WRProt_Pages20to23 ((uint32_t)0x00000020) /* CH32 Low and Medium density devices: Write protection of page 20 to 23 */ -#define FLASH_WRProt_Pages24to27 ((uint32_t)0x00000040) /* CH32 Low and Medium density devices: Write protection of page 24 to 27 */ -#define FLASH_WRProt_Pages28to31 ((uint32_t)0x00000080) /* CH32 Low and Medium density devices: Write protection of page 28 to 31 */ - -/* Values to be used with CH32V10x Medium-density devices */ -#define FLASH_WRProt_Pages32to35 ((uint32_t)0x00000100) /* CH32 Medium-density devices: Write protection of page 32 to 35 */ -#define FLASH_WRProt_Pages36to39 ((uint32_t)0x00000200) /* CH32 Medium-density devices: Write protection of page 36 to 39 */ -#define FLASH_WRProt_Pages40to43 ((uint32_t)0x00000400) /* CH32 Medium-density devices: Write protection of page 40 to 43 */ -#define FLASH_WRProt_Pages44to47 ((uint32_t)0x00000800) /* CH32 Medium-density devices: Write protection of page 44 to 47 */ -#define FLASH_WRProt_Pages48to51 ((uint32_t)0x00001000) /* CH32 Medium-density devices: Write protection of page 48 to 51 */ -#define FLASH_WRProt_Pages52to55 ((uint32_t)0x00002000) /* CH32 Medium-density devices: Write protection of page 52 to 55 */ -#define FLASH_WRProt_Pages56to59 ((uint32_t)0x00004000) /* CH32 Medium-density devices: Write protection of page 56 to 59 */ -#define FLASH_WRProt_Pages60to63 ((uint32_t)0x00008000) /* CH32 Medium-density devices: Write protection of page 60 to 63 */ -#define FLASH_WRProt_Pages64to67 ((uint32_t)0x00010000) /* CH32 Medium-density devices: Write protection of page 64 to 67 */ -#define FLASH_WRProt_Pages68to71 ((uint32_t)0x00020000) /* CH32 Medium-density devices: Write protection of page 68 to 71 */ -#define FLASH_WRProt_Pages72to75 ((uint32_t)0x00040000) /* CH32 Medium-density devices: Write protection of page 72 to 75 */ -#define FLASH_WRProt_Pages76to79 ((uint32_t)0x00080000) /* CH32 Medium-density devices: Write protection of page 76 to 79 */ -#define FLASH_WRProt_Pages80to83 ((uint32_t)0x00100000) /* CH32 Medium-density devices: Write protection of page 80 to 83 */ -#define FLASH_WRProt_Pages84to87 ((uint32_t)0x00200000) /* CH32 Medium-density devices: Write protection of page 84 to 87 */ -#define FLASH_WRProt_Pages88to91 ((uint32_t)0x00400000) /* CH32 Medium-density devices: Write protection of page 88 to 91 */ -#define FLASH_WRProt_Pages92to95 ((uint32_t)0x00800000) /* CH32 Medium-density devices: Write protection of page 92 to 95 */ -#define FLASH_WRProt_Pages96to99 ((uint32_t)0x01000000) /* CH32 Medium-density devices: Write protection of page 96 to 99 */ -#define FLASH_WRProt_Pages100to103 ((uint32_t)0x02000000) /* CH32 Medium-density devices: Write protection of page 100 to 103 */ -#define FLASH_WRProt_Pages104to107 ((uint32_t)0x04000000) /* CH32 Medium-density devices: Write protection of page 104 to 107 */ -#define FLASH_WRProt_Pages108to111 ((uint32_t)0x08000000) /* CH32 Medium-density devices: Write protection of page 108 to 111 */ -#define FLASH_WRProt_Pages112to115 ((uint32_t)0x10000000) /* CH32 Medium-density devices: Write protection of page 112 to 115 */ -#define FLASH_WRProt_Pages116to119 ((uint32_t)0x20000000) /* CH32 Medium-density devices: Write protection of page 115 to 119 */ -#define FLASH_WRProt_Pages120to123 ((uint32_t)0x40000000) /* CH32 Medium-density devices: Write protection of page 120 to 123 */ -#define FLASH_WRProt_Pages124to127 ((uint32_t)0x80000000) /* CH32 Medium-density devices: Write protection of page 124 to 127 */ - -#define FLASH_WRProt_Pages62to255 ((uint32_t)0x80000000) /* CH32 Medium-density devices: Write protection of page 62 to 255 */ - -#define FLASH_WRProt_AllPages ((uint32_t)0xFFFFFFFF) /* Write protection of all Pages */ - -/* Option_Bytes_IWatchdog */ -#define OB_IWDG_SW ((uint16_t)0x0001) /* Software IWDG selected */ -#define OB_IWDG_HW ((uint16_t)0x0000) /* Hardware IWDG selected */ - -/* Option_Bytes_nRST_STOP */ -#define OB_STOP_NoRST ((uint16_t)0x0002) /* No reset generated when entering in STOP */ -#define OB_STOP_RST ((uint16_t)0x0000) /* Reset generated when entering in STOP */ - -/* Option_Bytes_nRST_STDBY */ -#define OB_STDBY_NoRST ((uint16_t)0x0004) /* No reset generated when entering in STANDBY */ -#define OB_STDBY_RST ((uint16_t)0x0000) /* Reset generated when entering in STANDBY */ - -/* FLASH_Interrupts */ -#define FLASH_IT_ERROR ((uint32_t)0x00000400) /* FPEC error interrupt source */ -#define FLASH_IT_EOP ((uint32_t)0x00001000) /* End of FLASH Operation Interrupt source */ -#define FLASH_IT_BANK1_ERROR FLASH_IT_ERROR /* FPEC BANK1 error interrupt source */ -#define FLASH_IT_BANK1_EOP FLASH_IT_EOP /* End of FLASH BANK1 Operation Interrupt source */ - -/* FLASH_Flags */ -#define FLASH_FLAG_BSY ((uint32_t)0x00000001) /* FLASH Busy flag */ -#define FLASH_FLAG_EOP ((uint32_t)0x00000020) /* FLASH End of Operation flag */ -#define FLASH_FLAG_PGERR ((uint32_t)0x00000004) /* FLASH Program error flag */ -#define FLASH_FLAG_WRPRTERR ((uint32_t)0x00000010) /* FLASH Write protected error flag */ -#define FLASH_FLAG_OPTERR ((uint32_t)0x00000001) /* FLASH Option Byte error flag */ - -#define FLASH_FLAG_BANK1_BSY FLASH_FLAG_BSY /* FLASH BANK1 Busy flag*/ -#define FLASH_FLAG_BANK1_EOP FLASH_FLAG_EOP /* FLASH BANK1 End of Operation flag */ -#define FLASH_FLAG_BANK1_PGERR FLASH_FLAG_PGERR /* FLASH BANK1 Program error flag */ -#define FLASH_FLAG_BANK1_WRPRTERR FLASH_FLAG_WRPRTERR /* FLASH BANK1 Write protected error flag */ - -/*Functions used for all CH32V10x devices*/ -void FLASH_SetLatency(uint32_t FLASH_Latency); -void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess); -void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer); -void FLASH_Unlock(void); -void FLASH_Lock(void); -FLASH_Status FLASH_ErasePage(uint32_t Page_Address); -FLASH_Status FLASH_EraseAllPages(void); -FLASH_Status FLASH_EraseOptionBytes(void); -FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); -FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data); -FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data); -FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages); -FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState); -FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY); -uint32_t FLASH_GetUserOptionByte(void); -uint32_t FLASH_GetWriteProtectionOptionByte(void); -FlagStatus FLASH_GetReadOutProtectionStatus(void); -FlagStatus FLASH_GetPrefetchBufferStatus(void); -void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState); -FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG); -void FLASH_ClearFlag(uint32_t FLASH_FLAG); -FLASH_Status FLASH_GetStatus(void); -FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout); -void FLASH_Unlock_Fast(void); -void FLASH_Lock_Fast(void); -void FLASH_BufReset(void); -void FLASH_BufLoad(uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3); -void FLASH_ErasePage_Fast(uint32_t Page_Address); -void FLASH_ProgramPage_Fast(uint32_t Page_Address); - -/* New function used for all CH32V10x devices */ -void FLASH_UnlockBank1(void); -void FLASH_LockBank1(void); -FLASH_Status FLASH_EraseAllBank1Pages(void); -FLASH_Status FLASH_GetBank1Status(void); -FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_FLASH_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_gpio.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_gpio.h deleted file mode 100644 index 8246f37..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_gpio.h +++ /dev/null @@ -1,160 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_gpio.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * GPIO firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_GPIO_H -#define __CH32V10x_GPIO_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* Output Maximum frequency selection */ -typedef enum -{ - GPIO_Speed_10MHz = 1, - GPIO_Speed_2MHz, - GPIO_Speed_50MHz -} GPIOSpeed_TypeDef; - -/* Configuration Mode enumeration */ -typedef enum -{ - GPIO_Mode_AIN = 0x0, - GPIO_Mode_IN_FLOATING = 0x04, - GPIO_Mode_IPD = 0x28, - GPIO_Mode_IPU = 0x48, - GPIO_Mode_Out_OD = 0x14, - GPIO_Mode_Out_PP = 0x10, - GPIO_Mode_AF_OD = 0x1C, - GPIO_Mode_AF_PP = 0x18 -} GPIOMode_TypeDef; - -/* GPIO Init structure definition */ -typedef struct -{ - uint16_t GPIO_Pin; /* Specifies the GPIO pins to be configured. - This parameter can be any value of @ref GPIO_pins_define */ - - GPIOSpeed_TypeDef GPIO_Speed; /* Specifies the speed for the selected pins. - This parameter can be a value of @ref GPIOSpeed_TypeDef */ - - GPIOMode_TypeDef GPIO_Mode; /* Specifies the operating mode for the selected pins. - This parameter can be a value of @ref GPIOMode_TypeDef */ -} GPIO_InitTypeDef; - -/* Bit_SET and Bit_RESET enumeration */ -typedef enum -{ - Bit_RESET = 0, - Bit_SET -} BitAction; - -/* 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 */ - -/* GPIO_Remap_define */ -#define GPIO_Remap_SPI1 ((uint32_t)0x00000001) /* SPI1 Alternate Function mapping */ -#define GPIO_Remap_I2C1 ((uint32_t)0x00000002) /* I2C1 Alternate Function mapping */ -#define GPIO_Remap_USART1 ((uint32_t)0x00000004) /* USART1 Alternate Function mapping */ -#define GPIO_Remap_USART2 ((uint32_t)0x00000008) /* USART2 Alternate Function mapping */ -#define GPIO_PartialRemap_USART3 ((uint32_t)0x00140010) /* USART3 Partial Alternate Function mapping */ -#define GPIO_FullRemap_USART3 ((uint32_t)0x00140030) /* USART3 Full Alternate Function mapping */ -#define GPIO_PartialRemap_TIM1 ((uint32_t)0x00160040) /* TIM1 Partial Alternate Function mapping */ -#define GPIO_FullRemap_TIM1 ((uint32_t)0x001600C0) /* TIM1 Full Alternate Function mapping */ -#define GPIO_PartialRemap1_TIM2 ((uint32_t)0x00180100) /* TIM2 Partial1 Alternate Function mapping */ -#define GPIO_PartialRemap2_TIM2 ((uint32_t)0x00180200) /* TIM2 Partial2 Alternate Function mapping */ -#define GPIO_FullRemap_TIM2 ((uint32_t)0x00180300) /* TIM2 Full Alternate Function mapping */ -#define GPIO_PartialRemap_TIM3 ((uint32_t)0x001A0800) /* TIM3 Partial Alternate Function mapping */ -#define GPIO_FullRemap_TIM3 ((uint32_t)0x001A0C00) /* TIM3 Full Alternate Function mapping */ -#define GPIO_Remap_TIM4 ((uint32_t)0x00001000) /* TIM4 Alternate Function mapping */ -#define GPIO_Remap1_CAN1 ((uint32_t)0x001D4000) /* CAN1 Alternate Function mapping */ -#define GPIO_Remap2_CAN1 ((uint32_t)0x001D6000) /* CAN1 Alternate Function mapping */ -#define GPIO_Remap_PD01 ((uint32_t)0x00008000) /* PD01 Alternate Function mapping */ -#define GPIO_Remap_ADC1_ETRGINJ ((uint32_t)0x00200002) /* ADC1 External Trigger Injected Conversion remapping */ -#define GPIO_Remap_ADC1_ETRGREG ((uint32_t)0x00200004) /* ADC1 External Trigger Regular Conversion remapping */ -#define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /* Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */ -#define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /* JTAG-DP Disabled and SW-DP Enabled */ -#define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /* Full SWJ Disabled (JTAG-DP + SW-DP) */ -#define GPIO_Remap_TIM2ITR1_PTP_SOF ((uint32_t)0x00202000) /* Ethernet PTP output or USB OTG SOF (Start of Frame) connected \ - to TIM2 Internal Trigger 1 for calibration \ - (only for Connectivity line devices) */ -#define GPIO_Remap_TIM1_DMA ((uint32_t)0x80000010) /* TIM1 DMA requests mapping (only for Value line devices) */ -#define GPIO_Remap_TIM67_DAC_DMA ((uint32_t)0x80000800) /* TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices) */ -#define GPIO_Remap_MISC ((uint32_t)0x80002000) /* Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping, \ - only for High density Value line devices) */ - -/* GPIO_Port_Sources */ -#define GPIO_PortSourceGPIOA ((uint8_t)0x00) -#define GPIO_PortSourceGPIOB ((uint8_t)0x01) -#define GPIO_PortSourceGPIOC ((uint8_t)0x02) -#define GPIO_PortSourceGPIOD ((uint8_t)0x03) -#define GPIO_PortSourceGPIOE ((uint8_t)0x04) -#define GPIO_PortSourceGPIOF ((uint8_t)0x05) -#define GPIO_PortSourceGPIOG ((uint8_t)0x06) - -/* GPIO_Pin_sources */ -#define GPIO_PinSource0 ((uint8_t)0x00) -#define GPIO_PinSource1 ((uint8_t)0x01) -#define GPIO_PinSource2 ((uint8_t)0x02) -#define GPIO_PinSource3 ((uint8_t)0x03) -#define GPIO_PinSource4 ((uint8_t)0x04) -#define GPIO_PinSource5 ((uint8_t)0x05) -#define GPIO_PinSource6 ((uint8_t)0x06) -#define GPIO_PinSource7 ((uint8_t)0x07) -#define GPIO_PinSource8 ((uint8_t)0x08) -#define GPIO_PinSource9 ((uint8_t)0x09) -#define GPIO_PinSource10 ((uint8_t)0x0A) -#define GPIO_PinSource11 ((uint8_t)0x0B) -#define GPIO_PinSource12 ((uint8_t)0x0C) -#define GPIO_PinSource13 ((uint8_t)0x0D) -#define GPIO_PinSource14 ((uint8_t)0x0E) -#define GPIO_PinSource15 ((uint8_t)0x0F) - -void GPIO_DeInit(GPIO_TypeDef *GPIOx); -void GPIO_AFIODeInit(void); -void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct); -void GPIO_StructInit(GPIO_InitTypeDef *GPIO_InitStruct); -uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); -uint16_t GPIO_ReadInputData(GPIO_TypeDef *GPIOx); -uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); -uint16_t GPIO_ReadOutputData(GPIO_TypeDef *GPIOx); -void GPIO_SetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); -void GPIO_ResetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); -void GPIO_WriteBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, BitAction BitVal); -void GPIO_Write(GPIO_TypeDef *GPIOx, uint16_t PortVal); -void GPIO_PinLockConfig(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); -void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); -void GPIO_EventOutputCmd(FunctionalState NewState); -void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); -void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_GPIO_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_i2c.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_i2c.h deleted file mode 100644 index 60d589f..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_i2c.h +++ /dev/null @@ -1,199 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_i2c.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * I2C firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_I2C_H -#define __CH32V10x_I2C_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* I2C Init structure definition */ -typedef struct -{ - uint32_t I2C_ClockSpeed; /* Specifies the clock frequency. - This parameter must be set to a value lower than 400kHz */ - - uint16_t I2C_Mode; /* Specifies the I2C mode. - This parameter can be a value of @ref I2C_mode */ - - uint16_t I2C_DutyCycle; /* Specifies the I2C fast mode duty cycle. - This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */ - - uint16_t I2C_OwnAddress1; /* Specifies the first device own address. - This parameter can be a 7-bit or 10-bit address. */ - - uint16_t I2C_Ack; /* Enables or disables the acknowledgement. - This parameter can be a value of @ref I2C_acknowledgement */ - - uint16_t I2C_AcknowledgedAddress; /* Specifies if 7-bit or 10-bit address is acknowledged. - This parameter can be a value of @ref I2C_acknowledged_address */ -} I2C_InitTypeDef; - -/* I2C_mode */ -#define I2C_Mode_I2C ((uint16_t)0x0000) -#define I2C_Mode_SMBusDevice ((uint16_t)0x0002) -#define I2C_Mode_SMBusHost ((uint16_t)0x000A) - -/* I2C_duty_cycle_in_fast_mode */ -#define I2C_DutyCycle_16_9 ((uint16_t)0x4000) /* I2C fast mode Tlow/Thigh = 16/9 */ -#define I2C_DutyCycle_2 ((uint16_t)0xBFFF) /* I2C fast mode Tlow/Thigh = 2 */ - -/* I2C_acknowledgement */ -#define I2C_Ack_Enable ((uint16_t)0x0400) -#define I2C_Ack_Disable ((uint16_t)0x0000) - -/* I2C_transfer_direction */ -#define I2C_Direction_Transmitter ((uint8_t)0x00) -#define I2C_Direction_Receiver ((uint8_t)0x01) - -/* I2C_acknowledged_address */ -#define I2C_AcknowledgedAddress_7bit ((uint16_t)0x4000) -#define I2C_AcknowledgedAddress_10bit ((uint16_t)0xC000) - -/* I2C_registers */ -#define I2C_Register_CTLR1 ((uint8_t)0x00) -#define I2C_Register_CTLR2 ((uint8_t)0x04) -#define I2C_Register_OADDR1 ((uint8_t)0x08) -#define I2C_Register_OADDR2 ((uint8_t)0x0C) -#define I2C_Register_DATAR ((uint8_t)0x10) -#define I2C_Register_STAR1 ((uint8_t)0x14) -#define I2C_Register_STAR2 ((uint8_t)0x18) -#define I2C_Register_CKCFGR ((uint8_t)0x1C) -#define I2C_Register_RTR ((uint8_t)0x20) - -/* I2C_SMBus_alert_pin_level */ -#define I2C_SMBusAlert_Low ((uint16_t)0x2000) -#define I2C_SMBusAlert_High ((uint16_t)0xDFFF) - -/* I2C_PEC_position */ -#define I2C_PECPosition_Next ((uint16_t)0x0800) -#define I2C_PECPosition_Current ((uint16_t)0xF7FF) - -/* I2C_NACK_position */ -#define I2C_NACKPosition_Next ((uint16_t)0x0800) -#define I2C_NACKPosition_Current ((uint16_t)0xF7FF) - -/* I2C_interrupts_definition */ -#define I2C_IT_BUF ((uint16_t)0x0400) -#define I2C_IT_EVT ((uint16_t)0x0200) -#define I2C_IT_ERR ((uint16_t)0x0100) - -/* I2C_interrupts_definition */ -#define I2C_IT_SMBALERT ((uint32_t)0x01008000) -#define I2C_IT_TIMEOUT ((uint32_t)0x01004000) -#define I2C_IT_PECERR ((uint32_t)0x01001000) -#define I2C_IT_OVR ((uint32_t)0x01000800) -#define I2C_IT_AF ((uint32_t)0x01000400) -#define I2C_IT_ARLO ((uint32_t)0x01000200) -#define I2C_IT_BERR ((uint32_t)0x01000100) -#define I2C_IT_TXE ((uint32_t)0x06000080) -#define I2C_IT_RXNE ((uint32_t)0x06000040) -#define I2C_IT_STOPF ((uint32_t)0x02000010) -#define I2C_IT_ADD10 ((uint32_t)0x02000008) -#define I2C_IT_BTF ((uint32_t)0x02000004) -#define I2C_IT_ADDR ((uint32_t)0x02000002) -#define I2C_IT_SB ((uint32_t)0x02000001) - -/* SR2 register flags */ -#define I2C_FLAG_DUALF ((uint32_t)0x00800000) -#define I2C_FLAG_SMBHOST ((uint32_t)0x00400000) -#define I2C_FLAG_SMBDEFAULT ((uint32_t)0x00200000) -#define I2C_FLAG_GENCALL ((uint32_t)0x00100000) -#define I2C_FLAG_TRA ((uint32_t)0x00040000) -#define I2C_FLAG_BUSY ((uint32_t)0x00020000) -#define I2C_FLAG_MSL ((uint32_t)0x00010000) - -/* SR1 register flags */ -#define I2C_FLAG_SMBALERT ((uint32_t)0x10008000) -#define I2C_FLAG_TIMEOUT ((uint32_t)0x10004000) -#define I2C_FLAG_PECERR ((uint32_t)0x10001000) -#define I2C_FLAG_OVR ((uint32_t)0x10000800) -#define I2C_FLAG_AF ((uint32_t)0x10000400) -#define I2C_FLAG_ARLO ((uint32_t)0x10000200) -#define I2C_FLAG_BERR ((uint32_t)0x10000100) -#define I2C_FLAG_TXE ((uint32_t)0x10000080) -#define I2C_FLAG_RXNE ((uint32_t)0x10000040) -#define I2C_FLAG_STOPF ((uint32_t)0x10000010) -#define I2C_FLAG_ADD10 ((uint32_t)0x10000008) -#define I2C_FLAG_BTF ((uint32_t)0x10000004) -#define I2C_FLAG_ADDR ((uint32_t)0x10000002) -#define I2C_FLAG_SB ((uint32_t)0x10000001) - -/****************I2C Master Events (Events grouped in order of communication)********************/ - -#define I2C_EVENT_MASTER_MODE_SELECT ((uint32_t)0x00030001) /* BUSY, MSL and SB flag */ -#define I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ((uint32_t)0x00070082) /* BUSY, MSL, ADDR, TXE and TRA flags */ -#define I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ((uint32_t)0x00030002) /* BUSY, MSL and ADDR flags */ -#define I2C_EVENT_MASTER_MODE_ADDRESS10 ((uint32_t)0x00030008) /* BUSY, MSL and ADD10 flags */ -#define I2C_EVENT_MASTER_BYTE_RECEIVED ((uint32_t)0x00030040) /* BUSY, MSL and RXNE flags */ -#define I2C_EVENT_MASTER_BYTE_TRANSMITTING ((uint32_t)0x00070080) /* TRA, BUSY, MSL, TXE flags */ -#define I2C_EVENT_MASTER_BYTE_TRANSMITTED ((uint32_t)0x00070084) /* TRA, BUSY, MSL, TXE and BTF flags */ - -/******************I2C Slave Events (Events grouped in order of communication)******************/ - -#define I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED ((uint32_t)0x00020002) /* BUSY and ADDR flags */ -#define I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED ((uint32_t)0x00060082) /* TRA, BUSY, TXE and ADDR flags */ -#define I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED ((uint32_t)0x00820000) /* DUALF and BUSY flags */ -#define I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((uint32_t)0x00860080) /* DUALF, TRA, BUSY and TXE flags */ -#define I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED ((uint32_t)0x00120000) /* GENCALL and BUSY flags */ -#define I2C_EVENT_SLAVE_BYTE_RECEIVED ((uint32_t)0x00020040) /* BUSY and RXNE flags */ -#define I2C_EVENT_SLAVE_STOP_DETECTED ((uint32_t)0x00000010) /* STOPF flag */ -#define I2C_EVENT_SLAVE_BYTE_TRANSMITTED ((uint32_t)0x00060084) /* TRA, BUSY, TXE and BTF flags */ -#define I2C_EVENT_SLAVE_BYTE_TRANSMITTING ((uint32_t)0x00060080) /* TRA, BUSY and TXE flags */ -#define I2C_EVENT_SLAVE_ACK_FAILURE ((uint32_t)0x00000400) /* AF flag */ - -void I2C_DeInit(I2C_TypeDef *I2Cx); -void I2C_Init(I2C_TypeDef *I2Cx, I2C_InitTypeDef *I2C_InitStruct); -void I2C_StructInit(I2C_InitTypeDef *I2C_InitStruct); -void I2C_Cmd(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_DMACmd(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_DMALastTransferCmd(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_GenerateSTART(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_GenerateSTOP(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_AcknowledgeConfig(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_OwnAddress2Config(I2C_TypeDef *I2Cx, uint8_t Address); -void I2C_DualAddressCmd(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_GeneralCallCmd(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_ITConfig(I2C_TypeDef *I2Cx, uint16_t I2C_IT, FunctionalState NewState); -void I2C_SendData(I2C_TypeDef *I2Cx, uint8_t Data); -uint8_t I2C_ReceiveData(I2C_TypeDef *I2Cx); -void I2C_Send7bitAddress(I2C_TypeDef *I2Cx, uint8_t Address, uint8_t I2C_Direction); -uint16_t I2C_ReadRegister(I2C_TypeDef *I2Cx, uint8_t I2C_Register); -void I2C_SoftwareResetCmd(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_NACKPositionConfig(I2C_TypeDef *I2Cx, uint16_t I2C_NACKPosition); -void I2C_SMBusAlertConfig(I2C_TypeDef *I2Cx, uint16_t I2C_SMBusAlert); -void I2C_TransmitPEC(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_PECPositionConfig(I2C_TypeDef *I2Cx, uint16_t I2C_PECPosition); -void I2C_CalculatePEC(I2C_TypeDef *I2Cx, FunctionalState NewState); -uint8_t I2C_GetPEC(I2C_TypeDef *I2Cx); -void I2C_ARPCmd(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_StretchClockCmd(I2C_TypeDef *I2Cx, FunctionalState NewState); -void I2C_FastModeDutyCycleConfig(I2C_TypeDef *I2Cx, uint16_t I2C_DutyCycle); - -/**************************************************************************************** - * I2C State Monitoring Functions - ****************************************************************************************/ - -ErrorStatus I2C_CheckEvent(I2C_TypeDef *I2Cx, uint32_t I2C_EVENT); -uint32_t I2C_GetLastEvent(I2C_TypeDef *I2Cx); -FlagStatus I2C_GetFlagStatus(I2C_TypeDef *I2Cx, uint32_t I2C_FLAG); - -void I2C_ClearFlag(I2C_TypeDef *I2Cx, uint32_t I2C_FLAG); -ITStatus I2C_GetITStatus(I2C_TypeDef *I2Cx, uint32_t I2C_IT); -void I2C_ClearITPendingBit(I2C_TypeDef *I2Cx, uint32_t I2C_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32V10x_I2C_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_iwdg.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_iwdg.h deleted file mode 100644 index 0bfbc8b..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_iwdg.h +++ /dev/null @@ -1,48 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_iwdg.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * IWDG firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_IWDG_H -#define __CH32V10x_IWDG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* IWDG_WriteAccess */ -#define IWDG_WriteAccess_Enable ((uint16_t)0x5555) -#define IWDG_WriteAccess_Disable ((uint16_t)0x0000) - -/* IWDG_prescaler */ -#define IWDG_Prescaler_4 ((uint8_t)0x00) -#define IWDG_Prescaler_8 ((uint8_t)0x01) -#define IWDG_Prescaler_16 ((uint8_t)0x02) -#define IWDG_Prescaler_32 ((uint8_t)0x03) -#define IWDG_Prescaler_64 ((uint8_t)0x04) -#define IWDG_Prescaler_128 ((uint8_t)0x05) -#define IWDG_Prescaler_256 ((uint8_t)0x06) - -/* IWDG_Flag */ -#define IWDG_FLAG_PVU ((uint16_t)0x0001) -#define IWDG_FLAG_RVU ((uint16_t)0x0002) - -void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess); -void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); -void IWDG_SetReload(uint16_t Reload); -void IWDG_ReloadCounter(void); -void IWDG_Enable(void); -FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_IWDG_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_misc.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_misc.h deleted file mode 100644 index dc90bc9..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_misc.h +++ /dev/null @@ -1,46 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_misc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * miscellaneous firmware library functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10X_MISC_H -#define __CH32V10X_MISC_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "ch32v10x.h" - -/* NVIC Init Structure definition */ -typedef struct -{ - uint8_t NVIC_IRQChannel; - uint8_t NVIC_IRQChannelPreemptionPriority; - uint8_t NVIC_IRQChannelSubPriority; - FunctionalState NVIC_IRQChannelCmd; -} NVIC_InitTypeDef; - - -/* Preemption_Priority_Group */ -#define NVIC_PriorityGroup_0 ((uint32_t)0x00) -#define NVIC_PriorityGroup_1 ((uint32_t)0x01) -#define NVIC_PriorityGroup_2 ((uint32_t)0x02) -#define NVIC_PriorityGroup_3 ((uint32_t)0x03) -#define NVIC_PriorityGroup_4 ((uint32_t)0x04) - - -void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); -void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_MISC_H */ - diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_pwr.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_pwr.h deleted file mode 100644 index e553958..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_pwr.h +++ /dev/null @@ -1,57 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_pwr.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the PWR - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_PWR_H -#define __CH32V10x_PWR_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* PVD_detection_level */ -#define PWR_PVDLevel_2V2 ((uint32_t)0x00000000) -#define PWR_PVDLevel_2V3 ((uint32_t)0x00000020) -#define PWR_PVDLevel_2V4 ((uint32_t)0x00000040) -#define PWR_PVDLevel_2V5 ((uint32_t)0x00000060) -#define PWR_PVDLevel_2V6 ((uint32_t)0x00000080) -#define PWR_PVDLevel_2V7 ((uint32_t)0x000000A0) -#define PWR_PVDLevel_2V8 ((uint32_t)0x000000C0) -#define PWR_PVDLevel_2V9 ((uint32_t)0x000000E0) - -/* Regulator_state_is_STOP_mode */ -#define PWR_Regulator_ON ((uint32_t)0x00000000) -#define PWR_Regulator_LowPower ((uint32_t)0x00000001) - -/* STOP_mode_entry */ -#define PWR_STOPEntry_WFI ((uint8_t)0x01) -#define PWR_STOPEntry_WFE ((uint8_t)0x02) - -/* PWR_Flag */ -#define PWR_FLAG_WU ((uint32_t)0x00000001) -#define PWR_FLAG_SB ((uint32_t)0x00000002) -#define PWR_FLAG_PVDO ((uint32_t)0x00000004) - -void PWR_DeInit(void); -void PWR_BackupAccessCmd(FunctionalState NewState); -void PWR_PVDCmd(FunctionalState NewState); -void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); -void PWR_WakeUpPinCmd(FunctionalState NewState); -void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); -void PWR_EnterSTANDBYMode(void); -FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); -void PWR_ClearFlag(uint32_t PWR_FLAG); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_PWR_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_rcc.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_rcc.h deleted file mode 100644 index 981a48c..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_rcc.h +++ /dev/null @@ -1,228 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_rcc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the RCC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_RCC_H -#define __CH32V10x_RCC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* RCC_Exported_Types */ -typedef struct -{ - uint32_t SYSCLK_Frequency; /* returns SYSCLK clock frequency expressed in Hz */ - uint32_t HCLK_Frequency; /* returns HCLK clock frequency expressed in Hz */ - uint32_t PCLK1_Frequency; /* returns PCLK1 clock frequency expressed in Hz */ - uint32_t PCLK2_Frequency; /* returns PCLK2 clock frequency expressed in Hz */ - uint32_t ADCCLK_Frequency; /* returns ADCCLK clock frequency expressed in Hz */ -} RCC_ClocksTypeDef; - -/* HSE_configuration */ -#define RCC_HSE_OFF ((uint32_t)0x00000000) -#define RCC_HSE_ON ((uint32_t)0x00010000) -#define RCC_HSE_Bypass ((uint32_t)0x00040000) - -/* PLL_entry_clock_source */ -#define RCC_PLLSource_HSI_Div2 ((uint32_t)0x00000000) -#define RCC_PLLSource_HSE_Div1 ((uint32_t)0x00010000) -#define RCC_PLLSource_HSE_Div2 ((uint32_t)0x00030000) - -/* PLL_multiplication_factor */ -#define RCC_PLLMul_2 ((uint32_t)0x00000000) -#define RCC_PLLMul_3 ((uint32_t)0x00040000) -#define RCC_PLLMul_4 ((uint32_t)0x00080000) -#define RCC_PLLMul_5 ((uint32_t)0x000C0000) -#define RCC_PLLMul_6 ((uint32_t)0x00100000) -#define RCC_PLLMul_7 ((uint32_t)0x00140000) -#define RCC_PLLMul_8 ((uint32_t)0x00180000) -#define RCC_PLLMul_9 ((uint32_t)0x001C0000) -#define RCC_PLLMul_10 ((uint32_t)0x00200000) -#define RCC_PLLMul_11 ((uint32_t)0x00240000) -#define RCC_PLLMul_12 ((uint32_t)0x00280000) -#define RCC_PLLMul_13 ((uint32_t)0x002C0000) -#define RCC_PLLMul_14 ((uint32_t)0x00300000) -#define RCC_PLLMul_15 ((uint32_t)0x00340000) -#define RCC_PLLMul_16 ((uint32_t)0x00380000) - -/* System_clock_source */ -#define RCC_SYSCLKSource_HSI ((uint32_t)0x00000000) -#define RCC_SYSCLKSource_HSE ((uint32_t)0x00000001) -#define RCC_SYSCLKSource_PLLCLK ((uint32_t)0x00000002) - -/* AHB_clock_source */ -#define RCC_SYSCLK_Div1 ((uint32_t)0x00000000) -#define RCC_SYSCLK_Div2 ((uint32_t)0x00000080) -#define RCC_SYSCLK_Div4 ((uint32_t)0x00000090) -#define RCC_SYSCLK_Div8 ((uint32_t)0x000000A0) -#define RCC_SYSCLK_Div16 ((uint32_t)0x000000B0) -#define RCC_SYSCLK_Div64 ((uint32_t)0x000000C0) -#define RCC_SYSCLK_Div128 ((uint32_t)0x000000D0) -#define RCC_SYSCLK_Div256 ((uint32_t)0x000000E0) -#define RCC_SYSCLK_Div512 ((uint32_t)0x000000F0) - -/* APB1_APB2_clock_source */ -#define RCC_HCLK_Div1 ((uint32_t)0x00000000) -#define RCC_HCLK_Div2 ((uint32_t)0x00000400) -#define RCC_HCLK_Div4 ((uint32_t)0x00000500) -#define RCC_HCLK_Div8 ((uint32_t)0x00000600) -#define RCC_HCLK_Div16 ((uint32_t)0x00000700) - -/* RCC_Interrupt_source */ -#define RCC_IT_LSIRDY ((uint8_t)0x01) -#define RCC_IT_LSERDY ((uint8_t)0x02) -#define RCC_IT_HSIRDY ((uint8_t)0x04) -#define RCC_IT_HSERDY ((uint8_t)0x08) -#define RCC_IT_PLLRDY ((uint8_t)0x10) -#define RCC_IT_CSS ((uint8_t)0x80) - -/* USB_Device_clock_source */ -#define RCC_USBCLKSource_PLLCLK_1Div5 ((uint8_t)0x00) -#define RCC_USBCLKSource_PLLCLK_Div1 ((uint8_t)0x01) - -/* ADC_clock_source */ -#define RCC_PCLK2_Div2 ((uint32_t)0x00000000) -#define RCC_PCLK2_Div4 ((uint32_t)0x00004000) -#define RCC_PCLK2_Div6 ((uint32_t)0x00008000) -#define RCC_PCLK2_Div8 ((uint32_t)0x0000C000) - -/* LSE_configuration */ -#define RCC_LSE_OFF ((uint8_t)0x00) -#define RCC_LSE_ON ((uint8_t)0x01) -#define RCC_LSE_Bypass ((uint8_t)0x04) - -/* RTC_clock_source */ -#define RCC_RTCCLKSource_LSE ((uint32_t)0x00000100) -#define RCC_RTCCLKSource_LSI ((uint32_t)0x00000200) -#define RCC_RTCCLKSource_HSE_Div128 ((uint32_t)0x00000300) - -/* AHB_peripheral */ -#define RCC_AHBPeriph_DMA1 ((uint32_t)0x00000001) -#define RCC_AHBPeriph_DMA2 ((uint32_t)0x00000002) -#define RCC_AHBPeriph_SRAM ((uint32_t)0x00000004) -#define RCC_AHBPeriph_FLITF ((uint32_t)0x00000010) -#define RCC_AHBPeriph_CRC ((uint32_t)0x00000040) -#define RCC_AHBPeriph_FSMC ((uint32_t)0x00000100) -#define RCC_AHBPeriph_SDIO ((uint32_t)0x00000400) -#define RCC_AHBPeriph_USBHD ((uint32_t)0x00001000) - -/* APB2_peripheral */ -#define RCC_APB2Periph_AFIO ((uint32_t)0x00000001) -#define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004) -#define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008) -#define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010) -#define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020) -#define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040) -#define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080) -#define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100) -#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000200) -#define RCC_APB2Periph_ADC2 ((uint32_t)0x00000400) -#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000800) -#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000) -#define RCC_APB2Periph_TIM8 ((uint32_t)0x00002000) -#define RCC_APB2Periph_USART1 ((uint32_t)0x00004000) -#define RCC_APB2Periph_ADC3 ((uint32_t)0x00008000) -#define RCC_APB2Periph_TIM15 ((uint32_t)0x00010000) -#define RCC_APB2Periph_TIM16 ((uint32_t)0x00020000) -#define RCC_APB2Periph_TIM17 ((uint32_t)0x00040000) -#define RCC_APB2Periph_TIM9 ((uint32_t)0x00080000) -#define RCC_APB2Periph_TIM10 ((uint32_t)0x00100000) -#define RCC_APB2Periph_TIM11 ((uint32_t)0x00200000) - -/* APB1_peripheral */ -#define RCC_APB1Periph_TIM2 ((uint32_t)0x00000001) -#define RCC_APB1Periph_TIM3 ((uint32_t)0x00000002) -#define RCC_APB1Periph_TIM4 ((uint32_t)0x00000004) -#define RCC_APB1Periph_TIM5 ((uint32_t)0x00000008) -#define RCC_APB1Periph_TIM6 ((uint32_t)0x00000010) -#define RCC_APB1Periph_TIM7 ((uint32_t)0x00000020) -#define RCC_APB1Periph_TIM12 ((uint32_t)0x00000040) -#define RCC_APB1Periph_TIM13 ((uint32_t)0x00000080) -#define RCC_APB1Periph_TIM14 ((uint32_t)0x00000100) -#define RCC_APB1Periph_WWDG ((uint32_t)0x00000800) -#define RCC_APB1Periph_SPI2 ((uint32_t)0x00004000) -#define RCC_APB1Periph_SPI3 ((uint32_t)0x00008000) -#define RCC_APB1Periph_USART2 ((uint32_t)0x00020000) -#define RCC_APB1Periph_USART3 ((uint32_t)0x00040000) -#define RCC_APB1Periph_UART4 ((uint32_t)0x00080000) -#define RCC_APB1Periph_UART5 ((uint32_t)0x00100000) -#define RCC_APB1Periph_I2C1 ((uint32_t)0x00200000) -#define RCC_APB1Periph_I2C2 ((uint32_t)0x00400000) -#define RCC_APB1Periph_USB ((uint32_t)0x00800000) -#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000) -#define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000) -#define RCC_APB1Periph_BKP ((uint32_t)0x08000000) -#define RCC_APB1Periph_PWR ((uint32_t)0x10000000) -#define RCC_APB1Periph_DAC ((uint32_t)0x20000000) -#define RCC_APB1Periph_CEC ((uint32_t)0x40000000) - -/* Clock_source_to_output_on_MCO_pin */ -#define RCC_MCO_NoClock ((uint8_t)0x00) -#define RCC_MCO_SYSCLK ((uint8_t)0x04) -#define RCC_MCO_HSI ((uint8_t)0x05) -#define RCC_MCO_HSE ((uint8_t)0x06) -#define RCC_MCO_PLLCLK_Div2 ((uint8_t)0x07) - -/* RCC_Flag */ -#define RCC_FLAG_HSIRDY ((uint8_t)0x21) -#define RCC_FLAG_HSERDY ((uint8_t)0x31) -#define RCC_FLAG_PLLRDY ((uint8_t)0x39) -#define RCC_FLAG_LSERDY ((uint8_t)0x41) -#define RCC_FLAG_LSIRDY ((uint8_t)0x61) -#define RCC_FLAG_PINRST ((uint8_t)0x7A) -#define RCC_FLAG_PORRST ((uint8_t)0x7B) -#define RCC_FLAG_SFTRST ((uint8_t)0x7C) -#define RCC_FLAG_IWDGRST ((uint8_t)0x7D) -#define RCC_FLAG_WWDGRST ((uint8_t)0x7E) -#define RCC_FLAG_LPWRRST ((uint8_t)0x7F) - -/* SysTick_clock_source */ -#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB) -#define SysTick_CLKSource_HCLK ((uint32_t)0x00000004) - -void RCC_DeInit(void); -void RCC_HSEConfig(uint32_t RCC_HSE); -ErrorStatus RCC_WaitForHSEStartUp(void); -void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue); -void RCC_HSICmd(FunctionalState NewState); -void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul); -void RCC_PLLCmd(FunctionalState NewState); -void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource); -uint8_t RCC_GetSYSCLKSource(void); -void RCC_HCLKConfig(uint32_t RCC_SYSCLK); -void RCC_PCLK1Config(uint32_t RCC_HCLK); -void RCC_PCLK2Config(uint32_t RCC_HCLK); -void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState); -void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource); -void RCC_ADCCLKConfig(uint32_t RCC_PCLK2); -void RCC_LSEConfig(uint8_t RCC_LSE); -void RCC_LSICmd(FunctionalState NewState); -void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource); -void RCC_RTCCLKCmd(FunctionalState NewState); -void RCC_GetClocksFreq(RCC_ClocksTypeDef *RCC_Clocks); -void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); -void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); -void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); -void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); -void RCC_BackupResetCmd(FunctionalState NewState); -void RCC_ClockSecuritySystemCmd(FunctionalState NewState); -void RCC_MCOConfig(uint8_t RCC_MCO); -FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG); -void RCC_ClearFlag(void); -ITStatus RCC_GetITStatus(uint8_t RCC_IT); -void RCC_ClearITPendingBit(uint8_t RCC_IT); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_RCC_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_rtc.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_rtc.h deleted file mode 100644 index e0ff771..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_rtc.h +++ /dev/null @@ -1,51 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_rtc.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the RTC - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_RTC_H -#define __CH32V10x_RTC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* RTC_interrupts_define */ -#define RTC_IT_OW ((uint16_t)0x0004) /* Overflow interrupt */ -#define RTC_IT_ALR ((uint16_t)0x0002) /* Alarm interrupt */ -#define RTC_IT_SEC ((uint16_t)0x0001) /* Second interrupt */ - -/* RTC_interrupts_flags */ -#define RTC_FLAG_RTOFF ((uint16_t)0x0020) /* RTC Operation OFF flag */ -#define RTC_FLAG_RSF ((uint16_t)0x0008) /* Registers Synchronized flag */ -#define RTC_FLAG_OW ((uint16_t)0x0004) /* Overflow flag */ -#define RTC_FLAG_ALR ((uint16_t)0x0002) /* Alarm flag */ -#define RTC_FLAG_SEC ((uint16_t)0x0001) /* Second flag */ - -void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState); -void RTC_EnterConfigMode(void); -void RTC_ExitConfigMode(void); -uint32_t RTC_GetCounter(void); -void RTC_SetCounter(uint32_t CounterValue); -void RTC_SetPrescaler(uint32_t PrescalerValue); -void RTC_SetAlarm(uint32_t AlarmValue); -uint32_t RTC_GetDivider(void); -void RTC_WaitForLastTask(void); -void RTC_WaitForSynchro(void); -FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG); -void RTC_ClearFlag(uint16_t RTC_FLAG); -ITStatus RTC_GetITStatus(uint16_t RTC_IT); -void RTC_ClearITPendingBit(uint16_t RTC_IT); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_RTC_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_spi.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_spi.h deleted file mode 100644 index 03a7e15..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_spi.h +++ /dev/null @@ -1,218 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_spi.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * SPI firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_SPI_H -#define __CH32V10x_SPI_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* SPI Init structure definition */ -typedef struct -{ - uint16_t SPI_Direction; /* Specifies the SPI unidirectional or bidirectional data mode. - This parameter can be a value of @ref SPI_data_direction */ - - uint16_t SPI_Mode; /* Specifies the SPI operating mode. - This parameter can be a value of @ref SPI_mode */ - - uint16_t SPI_DataSize; /* Specifies the SPI data size. - This parameter can be a value of @ref SPI_data_size */ - - uint16_t SPI_CPOL; /* Specifies the serial clock steady state. - This parameter can be a value of @ref SPI_Clock_Polarity */ - - uint16_t SPI_CPHA; /* Specifies the clock active edge for the bit capture. - This parameter can be a value of @ref SPI_Clock_Phase */ - - uint16_t SPI_NSS; /* Specifies whether the NSS signal is managed by - hardware (NSS pin) or by software using the SSI bit. - This parameter can be a value of @ref SPI_Slave_Select_management */ - - uint16_t SPI_BaudRatePrescaler; /* Specifies the Baud Rate prescaler value which will be - used to configure the transmit and receive SCK clock. - This parameter can be a value of @ref SPI_BaudRate_Prescaler. - @note The communication clock is derived from the master - clock. The slave clock does not need to be set. */ - - uint16_t SPI_FirstBit; /* Specifies whether data transfers start from MSB or LSB bit. - This parameter can be a value of @ref SPI_MSB_LSB_transmission */ - - uint16_t SPI_CRCPolynomial; /* Specifies the polynomial used for the CRC calculation. */ -} SPI_InitTypeDef; - -/* I2S Init structure definition */ -typedef struct -{ - uint16_t I2S_Mode; /* Specifies the I2S operating mode. - This parameter can be a value of @ref I2S_Mode */ - - uint16_t I2S_Standard; /* Specifies the standard used for the I2S communication. - This parameter can be a value of @ref I2S_Standard */ - - uint16_t I2S_DataFormat; /* Specifies the data format for the I2S communication. - This parameter can be a value of @ref I2S_Data_Format */ - - uint16_t I2S_MCLKOutput; /* Specifies whether the I2S MCLK output is enabled or not. - This parameter can be a value of @ref I2S_MCLK_Output */ - - uint32_t I2S_AudioFreq; /* Specifies the frequency selected for the I2S communication. - This parameter can be a value of @ref I2S_Audio_Frequency */ - - uint16_t I2S_CPOL; /* Specifies the idle state of the I2S clock. - This parameter can be a value of @ref I2S_Clock_Polarity */ -} I2S_InitTypeDef; - -/* SPI_data_direction */ -#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000) -#define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400) -#define SPI_Direction_1Line_Rx ((uint16_t)0x8000) -#define SPI_Direction_1Line_Tx ((uint16_t)0xC000) - -/* SPI_mode */ -#define SPI_Mode_Master ((uint16_t)0x0104) -#define SPI_Mode_Slave ((uint16_t)0x0000) - -/* SPI_data_size */ -#define SPI_DataSize_16b ((uint16_t)0x0800) -#define SPI_DataSize_8b ((uint16_t)0x0000) - -/* SPI_Clock_Polarity */ -#define SPI_CPOL_Low ((uint16_t)0x0000) -#define SPI_CPOL_High ((uint16_t)0x0002) - -/* SPI_Clock_Phase */ -#define SPI_CPHA_1Edge ((uint16_t)0x0000) -#define SPI_CPHA_2Edge ((uint16_t)0x0001) - -/* SPI_Slave_Select_management */ -#define SPI_NSS_Soft ((uint16_t)0x0200) -#define SPI_NSS_Hard ((uint16_t)0x0000) - -/* SPI_BaudRate_Prescaler */ -#define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000) -#define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008) -#define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010) -#define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018) -#define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020) -#define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028) -#define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030) -#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038) - -/* SPI_MSB_LSB_transmission */ -#define SPI_FirstBit_MSB ((uint16_t)0x0000) -#define SPI_FirstBit_LSB ((uint16_t)0x0080) - -/* I2S_Mode */ -#define I2S_Mode_SlaveTx ((uint16_t)0x0000) -#define I2S_Mode_SlaveRx ((uint16_t)0x0100) -#define I2S_Mode_MasterTx ((uint16_t)0x0200) -#define I2S_Mode_MasterRx ((uint16_t)0x0300) - -/* I2S_Standard */ -#define I2S_Standard_Phillips ((uint16_t)0x0000) -#define I2S_Standard_MSB ((uint16_t)0x0010) -#define I2S_Standard_LSB ((uint16_t)0x0020) -#define I2S_Standard_PCMShort ((uint16_t)0x0030) -#define I2S_Standard_PCMLong ((uint16_t)0x00B0) - -/* I2S_Data_Format */ -#define I2S_DataFormat_16b ((uint16_t)0x0000) -#define I2S_DataFormat_16bextended ((uint16_t)0x0001) -#define I2S_DataFormat_24b ((uint16_t)0x0003) -#define I2S_DataFormat_32b ((uint16_t)0x0005) - -/* I2S_MCLK_Output */ -#define I2S_MCLKOutput_Enable ((uint16_t)0x0200) -#define I2S_MCLKOutput_Disable ((uint16_t)0x0000) - -/* I2S_Audio_Frequency */ -#define I2S_AudioFreq_192k ((uint32_t)192000) -#define I2S_AudioFreq_96k ((uint32_t)96000) -#define I2S_AudioFreq_48k ((uint32_t)48000) -#define I2S_AudioFreq_44k ((uint32_t)44100) -#define I2S_AudioFreq_32k ((uint32_t)32000) -#define I2S_AudioFreq_22k ((uint32_t)22050) -#define I2S_AudioFreq_16k ((uint32_t)16000) -#define I2S_AudioFreq_11k ((uint32_t)11025) -#define I2S_AudioFreq_8k ((uint32_t)8000) -#define I2S_AudioFreq_Default ((uint32_t)2) - -/* I2S_Clock_Polarity */ -#define I2S_CPOL_Low ((uint16_t)0x0000) -#define I2S_CPOL_High ((uint16_t)0x0008) - -/* SPI_I2S_DMA_transfer_requests */ -#define SPI_I2S_DMAReq_Tx ((uint16_t)0x0002) -#define SPI_I2S_DMAReq_Rx ((uint16_t)0x0001) - -/* SPI_NSS_internal_software_management */ -#define SPI_NSSInternalSoft_Set ((uint16_t)0x0100) -#define SPI_NSSInternalSoft_Reset ((uint16_t)0xFEFF) - -/* SPI_CRC_Transmit_Receive */ -#define SPI_CRC_Tx ((uint8_t)0x00) -#define SPI_CRC_Rx ((uint8_t)0x01) - -/* SPI_direction_transmit_receive */ -#define SPI_Direction_Rx ((uint16_t)0xBFFF) -#define SPI_Direction_Tx ((uint16_t)0x4000) - -/* SPI_I2S_interrupts_definition */ -#define SPI_I2S_IT_TXE ((uint8_t)0x71) -#define SPI_I2S_IT_RXNE ((uint8_t)0x60) -#define SPI_I2S_IT_ERR ((uint8_t)0x50) -#define SPI_I2S_IT_OVR ((uint8_t)0x56) -#define SPI_IT_MODF ((uint8_t)0x55) -#define SPI_IT_CRCERR ((uint8_t)0x54) -#define I2S_IT_UDR ((uint8_t)0x53) - -/* SPI_I2S_flags_definition */ -#define SPI_I2S_FLAG_RXNE ((uint16_t)0x0001) -#define SPI_I2S_FLAG_TXE ((uint16_t)0x0002) -#define I2S_FLAG_CHSIDE ((uint16_t)0x0004) -#define I2S_FLAG_UDR ((uint16_t)0x0008) -#define SPI_FLAG_CRCERR ((uint16_t)0x0010) -#define SPI_FLAG_MODF ((uint16_t)0x0020) -#define SPI_I2S_FLAG_OVR ((uint16_t)0x0040) -#define SPI_I2S_FLAG_BSY ((uint16_t)0x0080) - -void SPI_I2S_DeInit(SPI_TypeDef *SPIx); -void SPI_Init(SPI_TypeDef *SPIx, SPI_InitTypeDef *SPI_InitStruct); -void I2S_Init(SPI_TypeDef *SPIx, I2S_InitTypeDef *I2S_InitStruct); -void SPI_StructInit(SPI_InitTypeDef *SPI_InitStruct); -void I2S_StructInit(I2S_InitTypeDef *I2S_InitStruct); -void SPI_Cmd(SPI_TypeDef *SPIx, FunctionalState NewState); -void I2S_Cmd(SPI_TypeDef *SPIx, FunctionalState NewState); -void SPI_I2S_ITConfig(SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); -void SPI_I2S_DMACmd(SPI_TypeDef *SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState); -void SPI_I2S_SendData(SPI_TypeDef *SPIx, uint16_t Data); -uint16_t SPI_I2S_ReceiveData(SPI_TypeDef *SPIx); -void SPI_NSSInternalSoftwareConfig(SPI_TypeDef *SPIx, uint16_t SPI_NSSInternalSoft); -void SPI_SSOutputCmd(SPI_TypeDef *SPIx, FunctionalState NewState); -void SPI_DataSizeConfig(SPI_TypeDef *SPIx, uint16_t SPI_DataSize); -void SPI_TransmitCRC(SPI_TypeDef *SPIx); -void SPI_CalculateCRC(SPI_TypeDef *SPIx, FunctionalState NewState); -uint16_t SPI_GetCRC(SPI_TypeDef *SPIx, uint8_t SPI_CRC); -uint16_t SPI_GetCRCPolynomial(SPI_TypeDef *SPIx); -void SPI_BiDirectionalLineConfig(SPI_TypeDef *SPIx, uint16_t SPI_Direction); -FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef *SPIx, uint16_t SPI_I2S_FLAG); -void SPI_I2S_ClearFlag(SPI_TypeDef *SPIx, uint16_t SPI_I2S_FLAG); -ITStatus SPI_I2S_GetITStatus(SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT); -void SPI_I2S_ClearITPendingBit(SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32V10x_SPI_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_tim.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_tim.h deleted file mode 100644 index 6b73414..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_tim.h +++ /dev/null @@ -1,506 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_tim.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * TIM firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_TIM_H -#define __CH32V10x_TIM_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* TIM Time Base Init structure definition */ -typedef struct -{ - uint16_t TIM_Prescaler; /* Specifies the prescaler value used to divide the TIM clock. - This parameter can be a number between 0x0000 and 0xFFFF */ - - uint16_t TIM_CounterMode; /* Specifies the counter mode. - This parameter can be a value of @ref TIM_Counter_Mode */ - - uint16_t TIM_Period; /* Specifies the period value to be loaded into the active - Auto-Reload Register at the next update event. - This parameter must be a number between 0x0000 and 0xFFFF. */ - - uint16_t TIM_ClockDivision; /* Specifies the clock division. - This parameter can be a value of @ref TIM_Clock_Division_CKD */ - - uint8_t TIM_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 0x00 and 0xFF. - @note This parameter is valid only for TIM1 and TIM8. */ -} TIM_TimeBaseInitTypeDef; - -/* TIM Output Compare Init structure definition */ -typedef struct -{ - uint16_t TIM_OCMode; /* Specifies the TIM mode. - This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ - - uint16_t TIM_OutputState; /* Specifies the TIM Output Compare state. - This parameter can be a value of @ref TIM_Output_Compare_state */ - - uint16_t TIM_OutputNState; /* Specifies the TIM complementary Output Compare state. - This parameter can be a value of @ref TIM_Output_Compare_N_state - @note This parameter is valid only for TIM1 and TIM8. */ - - uint16_t TIM_Pulse; /* Specifies the pulse value to be loaded into the Capture Compare Register. - This parameter can be a number between 0x0000 and 0xFFFF */ - - uint16_t TIM_OCPolarity; /* Specifies the output polarity. - This parameter can be a value of @ref TIM_Output_Compare_Polarity */ - - uint16_t TIM_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. */ - - uint16_t TIM_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. */ - - uint16_t TIM_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_OCInitTypeDef; - -/* TIM Input Capture Init structure definition */ -typedef struct -{ - uint16_t TIM_Channel; /* Specifies the TIM channel. - This parameter can be a value of @ref TIM_Channel */ - - uint16_t TIM_ICPolarity; /* Specifies the active edge of the input signal. - This parameter can be a value of @ref TIM_Input_Capture_Polarity */ - - uint16_t TIM_ICSelection; /* Specifies the input. - This parameter can be a value of @ref TIM_Input_Capture_Selection */ - - uint16_t TIM_ICPrescaler; /* Specifies the Input Capture Prescaler. - This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ - - uint16_t TIM_ICFilter; /* Specifies the input capture filter. - This parameter can be a number between 0x0 and 0xF */ -} TIM_ICInitTypeDef; - -/* BDTR structure definition */ -typedef struct -{ - uint16_t TIM_OSSRState; /* Specifies the Off-State selection used in Run mode. - This parameter can be a value of @ref OSSR_Off_State_Selection_for_Run_mode_state */ - - uint16_t TIM_OSSIState; /* Specifies the Off-State used in Idle state. - This parameter can be a value of @ref OSSI_Off_State_Selection_for_Idle_mode_state */ - - uint16_t TIM_LOCKLevel; /* Specifies the LOCK level parameters. - This parameter can be a value of @ref Lock_level */ - - uint16_t TIM_DeadTime; /* Specifies the delay time between the switching-off and the - switching-on of the outputs. - This parameter can be a number between 0x00 and 0xFF */ - - uint16_t TIM_Break; /* Specifies whether the TIM Break input is enabled or not. - This parameter can be a value of @ref Break_Input_enable_disable */ - - uint16_t TIM_BreakPolarity; /* Specifies the TIM Break Input pin polarity. - This parameter can be a value of @ref Break_Polarity */ - - uint16_t TIM_AutomaticOutput; /* Specifies whether the TIM Automatic Output feature is enabled or not. - This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ -} TIM_BDTRInitTypeDef; - -/* TIM_Output_Compare_and_PWM_modes */ -#define TIM_OCMode_Timing ((uint16_t)0x0000) -#define TIM_OCMode_Active ((uint16_t)0x0010) -#define TIM_OCMode_Inactive ((uint16_t)0x0020) -#define TIM_OCMode_Toggle ((uint16_t)0x0030) -#define TIM_OCMode_PWM1 ((uint16_t)0x0060) -#define TIM_OCMode_PWM2 ((uint16_t)0x0070) - -/* TIM_One_Pulse_Mode */ -#define TIM_OPMode_Single ((uint16_t)0x0008) -#define TIM_OPMode_Repetitive ((uint16_t)0x0000) - -/* TIM_Channel */ -#define TIM_Channel_1 ((uint16_t)0x0000) -#define TIM_Channel_2 ((uint16_t)0x0004) -#define TIM_Channel_3 ((uint16_t)0x0008) -#define TIM_Channel_4 ((uint16_t)0x000C) - -/* TIM_Clock_Division_CKD */ -#define TIM_CKD_DIV1 ((uint16_t)0x0000) -#define TIM_CKD_DIV2 ((uint16_t)0x0100) -#define TIM_CKD_DIV4 ((uint16_t)0x0200) - -/* TIM_Counter_Mode */ -#define TIM_CounterMode_Up ((uint16_t)0x0000) -#define TIM_CounterMode_Down ((uint16_t)0x0010) -#define TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020) -#define TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040) -#define TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060) - -/* TIM_Output_Compare_Polarity */ -#define TIM_OCPolarity_High ((uint16_t)0x0000) -#define TIM_OCPolarity_Low ((uint16_t)0x0002) - -/* TIM_Output_Compare_N_Polarity */ -#define TIM_OCNPolarity_High ((uint16_t)0x0000) -#define TIM_OCNPolarity_Low ((uint16_t)0x0008) - -/* TIM_Output_Compare_state */ -#define TIM_OutputState_Disable ((uint16_t)0x0000) -#define TIM_OutputState_Enable ((uint16_t)0x0001) - -/* TIM_Output_Compare_N_state */ -#define TIM_OutputNState_Disable ((uint16_t)0x0000) -#define TIM_OutputNState_Enable ((uint16_t)0x0004) - -/* TIM_Capture_Compare_state */ -#define TIM_CCx_Enable ((uint16_t)0x0001) -#define TIM_CCx_Disable ((uint16_t)0x0000) - -/* TIM_Capture_Compare_N_state */ -#define TIM_CCxN_Enable ((uint16_t)0x0004) -#define TIM_CCxN_Disable ((uint16_t)0x0000) - -/* Break_Input_enable_disable */ -#define TIM_Break_Enable ((uint16_t)0x1000) -#define TIM_Break_Disable ((uint16_t)0x0000) - -/* Break_Polarity */ -#define TIM_BreakPolarity_Low ((uint16_t)0x0000) -#define TIM_BreakPolarity_High ((uint16_t)0x2000) - -/* TIM_AOE_Bit_Set_Reset */ -#define TIM_AutomaticOutput_Enable ((uint16_t)0x4000) -#define TIM_AutomaticOutput_Disable ((uint16_t)0x0000) - -/* Lock_level */ -#define TIM_LOCKLevel_OFF ((uint16_t)0x0000) -#define TIM_LOCKLevel_1 ((uint16_t)0x0100) -#define TIM_LOCKLevel_2 ((uint16_t)0x0200) -#define TIM_LOCKLevel_3 ((uint16_t)0x0300) - -/* OSSI_Off_State_Selection_for_Idle_mode_state */ -#define TIM_OSSIState_Enable ((uint16_t)0x0400) -#define TIM_OSSIState_Disable ((uint16_t)0x0000) - -/* OSSR_Off_State_Selection_for_Run_mode_state */ -#define TIM_OSSRState_Enable ((uint16_t)0x0800) -#define TIM_OSSRState_Disable ((uint16_t)0x0000) - -/* TIM_Output_Compare_Idle_State */ -#define TIM_OCIdleState_Set ((uint16_t)0x0100) -#define TIM_OCIdleState_Reset ((uint16_t)0x0000) - -/* TIM_Output_Compare_N_Idle_State */ -#define TIM_OCNIdleState_Set ((uint16_t)0x0200) -#define TIM_OCNIdleState_Reset ((uint16_t)0x0000) - -/* TIM_Input_Capture_Polarity */ -#define TIM_ICPolarity_Rising ((uint16_t)0x0000) -#define TIM_ICPolarity_Falling ((uint16_t)0x0002) -#define TIM_ICPolarity_BothEdge ((uint16_t)0x000A) - -/* TIM_Input_Capture_Selection */ -#define TIM_ICSelection_DirectTI ((uint16_t)0x0001) /* TIM Input 1, 2, 3 or 4 is selected to be \ - connected to IC1, IC2, IC3 or IC4, respectively */ -#define TIM_ICSelection_IndirectTI ((uint16_t)0x0002) /* TIM Input 1, 2, 3 or 4 is selected to be \ - connected to IC2, IC1, IC4 or IC3, respectively. */ -#define TIM_ICSelection_TRC ((uint16_t)0x0003) /* TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */ - -/* TIM_Input_Capture_Prescaler */ -#define TIM_ICPSC_DIV1 ((uint16_t)0x0000) /* Capture performed each time an edge is detected on the capture input. */ -#define TIM_ICPSC_DIV2 ((uint16_t)0x0004) /* Capture performed once every 2 events. */ -#define TIM_ICPSC_DIV4 ((uint16_t)0x0008) /* Capture performed once every 4 events. */ -#define TIM_ICPSC_DIV8 ((uint16_t)0x000C) /* Capture performed once every 8 events. */ - -/* TIM_interrupt_sources */ -#define TIM_IT_Update ((uint16_t)0x0001) -#define TIM_IT_CC1 ((uint16_t)0x0002) -#define TIM_IT_CC2 ((uint16_t)0x0004) -#define TIM_IT_CC3 ((uint16_t)0x0008) -#define TIM_IT_CC4 ((uint16_t)0x0010) -#define TIM_IT_COM ((uint16_t)0x0020) -#define TIM_IT_Trigger ((uint16_t)0x0040) -#define TIM_IT_Break ((uint16_t)0x0080) - -/* TIM_DMA_Base_address */ -#define TIM_DMABase_CR1 ((uint16_t)0x0000) -#define TIM_DMABase_CR2 ((uint16_t)0x0001) -#define TIM_DMABase_SMCR ((uint16_t)0x0002) -#define TIM_DMABase_DIER ((uint16_t)0x0003) -#define TIM_DMABase_SR ((uint16_t)0x0004) -#define TIM_DMABase_EGR ((uint16_t)0x0005) -#define TIM_DMABase_CCMR1 ((uint16_t)0x0006) -#define TIM_DMABase_CCMR2 ((uint16_t)0x0007) -#define TIM_DMABase_CCER ((uint16_t)0x0008) -#define TIM_DMABase_CNT ((uint16_t)0x0009) -#define TIM_DMABase_PSC ((uint16_t)0x000A) -#define TIM_DMABase_ARR ((uint16_t)0x000B) -#define TIM_DMABase_RCR ((uint16_t)0x000C) -#define TIM_DMABase_CCR1 ((uint16_t)0x000D) -#define TIM_DMABase_CCR2 ((uint16_t)0x000E) -#define TIM_DMABase_CCR3 ((uint16_t)0x000F) -#define TIM_DMABase_CCR4 ((uint16_t)0x0010) -#define TIM_DMABase_BDTR ((uint16_t)0x0011) -#define TIM_DMABase_DCR ((uint16_t)0x0012) - -/* TIM_DMA_Burst_Length */ -#define TIM_DMABurstLength_1Transfer ((uint16_t)0x0000) -#define TIM_DMABurstLength_2Transfers ((uint16_t)0x0100) -#define TIM_DMABurstLength_3Transfers ((uint16_t)0x0200) -#define TIM_DMABurstLength_4Transfers ((uint16_t)0x0300) -#define TIM_DMABurstLength_5Transfers ((uint16_t)0x0400) -#define TIM_DMABurstLength_6Transfers ((uint16_t)0x0500) -#define TIM_DMABurstLength_7Transfers ((uint16_t)0x0600) -#define TIM_DMABurstLength_8Transfers ((uint16_t)0x0700) -#define TIM_DMABurstLength_9Transfers ((uint16_t)0x0800) -#define TIM_DMABurstLength_10Transfers ((uint16_t)0x0900) -#define TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00) -#define TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00) -#define TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00) -#define TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00) -#define TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00) -#define TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00) -#define TIM_DMABurstLength_17Transfers ((uint16_t)0x1000) -#define TIM_DMABurstLength_18Transfers ((uint16_t)0x1100) - -/* TIM_DMA_sources */ -#define TIM_DMA_Update ((uint16_t)0x0100) -#define TIM_DMA_CC1 ((uint16_t)0x0200) -#define TIM_DMA_CC2 ((uint16_t)0x0400) -#define TIM_DMA_CC3 ((uint16_t)0x0800) -#define TIM_DMA_CC4 ((uint16_t)0x1000) -#define TIM_DMA_COM ((uint16_t)0x2000) -#define TIM_DMA_Trigger ((uint16_t)0x4000) - -/* TIM_External_Trigger_Prescaler */ -#define TIM_ExtTRGPSC_OFF ((uint16_t)0x0000) -#define TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000) -#define TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000) -#define TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000) - -/* TIM_Internal_Trigger_Selection */ -#define TIM_TS_ITR0 ((uint16_t)0x0000) -#define TIM_TS_ITR1 ((uint16_t)0x0010) -#define TIM_TS_ITR2 ((uint16_t)0x0020) -#define TIM_TS_ITR3 ((uint16_t)0x0030) -#define TIM_TS_TI1F_ED ((uint16_t)0x0040) -#define TIM_TS_TI1FP1 ((uint16_t)0x0050) -#define TIM_TS_TI2FP2 ((uint16_t)0x0060) -#define TIM_TS_ETRF ((uint16_t)0x0070) - -/* TIM_TIx_External_Clock_Source */ -#define TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050) -#define TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060) -#define TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040) - -/* TIM_External_Trigger_Polarity */ -#define TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000) -#define TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000) - -/* TIM_Prescaler_Reload_Mode */ -#define TIM_PSCReloadMode_Update ((uint16_t)0x0000) -#define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001) - -/* TIM_Forced_Action */ -#define TIM_ForcedAction_Active ((uint16_t)0x0050) -#define TIM_ForcedAction_InActive ((uint16_t)0x0040) - -/* TIM_Encoder_Mode */ -#define TIM_EncoderMode_TI1 ((uint16_t)0x0001) -#define TIM_EncoderMode_TI2 ((uint16_t)0x0002) -#define TIM_EncoderMode_TI12 ((uint16_t)0x0003) - -/* TIM_Event_Source */ -#define TIM_EventSource_Update ((uint16_t)0x0001) -#define TIM_EventSource_CC1 ((uint16_t)0x0002) -#define TIM_EventSource_CC2 ((uint16_t)0x0004) -#define TIM_EventSource_CC3 ((uint16_t)0x0008) -#define TIM_EventSource_CC4 ((uint16_t)0x0010) -#define TIM_EventSource_COM ((uint16_t)0x0020) -#define TIM_EventSource_Trigger ((uint16_t)0x0040) -#define TIM_EventSource_Break ((uint16_t)0x0080) - -/* TIM_Update_Source */ -#define TIM_UpdateSource_Global ((uint16_t)0x0000) /* Source of update is the counter overflow/underflow \ - or the setting of UG bit, or an update generation \ - through the slave mode controller. */ -#define TIM_UpdateSource_Regular ((uint16_t)0x0001) /* Source of update is counter overflow/underflow. */ - -/* TIM_Output_Compare_Preload_State */ -#define TIM_OCPreload_Enable ((uint16_t)0x0008) -#define TIM_OCPreload_Disable ((uint16_t)0x0000) - -/* TIM_Output_Compare_Fast_State */ -#define TIM_OCFast_Enable ((uint16_t)0x0004) -#define TIM_OCFast_Disable ((uint16_t)0x0000) - -/* TIM_Output_Compare_Clear_State */ -#define TIM_OCClear_Enable ((uint16_t)0x0080) -#define TIM_OCClear_Disable ((uint16_t)0x0000) - -/* TIM_Trigger_Output_Source */ -#define TIM_TRGOSource_Reset ((uint16_t)0x0000) -#define TIM_TRGOSource_Enable ((uint16_t)0x0010) -#define TIM_TRGOSource_Update ((uint16_t)0x0020) -#define TIM_TRGOSource_OC1 ((uint16_t)0x0030) -#define TIM_TRGOSource_OC1Ref ((uint16_t)0x0040) -#define TIM_TRGOSource_OC2Ref ((uint16_t)0x0050) -#define TIM_TRGOSource_OC3Ref ((uint16_t)0x0060) -#define TIM_TRGOSource_OC4Ref ((uint16_t)0x0070) - -/* TIM_Slave_Mode */ -#define TIM_SlaveMode_Reset ((uint16_t)0x0004) -#define TIM_SlaveMode_Gated ((uint16_t)0x0005) -#define TIM_SlaveMode_Trigger ((uint16_t)0x0006) -#define TIM_SlaveMode_External1 ((uint16_t)0x0007) - -/* TIM_Master_Slave_Mode */ -#define TIM_MasterSlaveMode_Enable ((uint16_t)0x0080) -#define TIM_MasterSlaveMode_Disable ((uint16_t)0x0000) - -/* TIM_Flags */ -#define TIM_FLAG_Update ((uint16_t)0x0001) -#define TIM_FLAG_CC1 ((uint16_t)0x0002) -#define TIM_FLAG_CC2 ((uint16_t)0x0004) -#define TIM_FLAG_CC3 ((uint16_t)0x0008) -#define TIM_FLAG_CC4 ((uint16_t)0x0010) -#define TIM_FLAG_COM ((uint16_t)0x0020) -#define TIM_FLAG_Trigger ((uint16_t)0x0040) -#define TIM_FLAG_Break ((uint16_t)0x0080) -#define TIM_FLAG_CC1OF ((uint16_t)0x0200) -#define TIM_FLAG_CC2OF ((uint16_t)0x0400) -#define TIM_FLAG_CC3OF ((uint16_t)0x0800) -#define TIM_FLAG_CC4OF ((uint16_t)0x1000) - -/* TIM_Legacy */ -#define TIM_DMABurstLength_1Byte TIM_DMABurstLength_1Transfer -#define TIM_DMABurstLength_2Bytes TIM_DMABurstLength_2Transfers -#define TIM_DMABurstLength_3Bytes TIM_DMABurstLength_3Transfers -#define TIM_DMABurstLength_4Bytes TIM_DMABurstLength_4Transfers -#define TIM_DMABurstLength_5Bytes TIM_DMABurstLength_5Transfers -#define TIM_DMABurstLength_6Bytes TIM_DMABurstLength_6Transfers -#define TIM_DMABurstLength_7Bytes TIM_DMABurstLength_7Transfers -#define TIM_DMABurstLength_8Bytes TIM_DMABurstLength_8Transfers -#define TIM_DMABurstLength_9Bytes TIM_DMABurstLength_9Transfers -#define TIM_DMABurstLength_10Bytes TIM_DMABurstLength_10Transfers -#define TIM_DMABurstLength_11Bytes TIM_DMABurstLength_11Transfers -#define TIM_DMABurstLength_12Bytes TIM_DMABurstLength_12Transfers -#define TIM_DMABurstLength_13Bytes TIM_DMABurstLength_13Transfers -#define TIM_DMABurstLength_14Bytes TIM_DMABurstLength_14Transfers -#define TIM_DMABurstLength_15Bytes TIM_DMABurstLength_15Transfers -#define TIM_DMABurstLength_16Bytes TIM_DMABurstLength_16Transfers -#define TIM_DMABurstLength_17Bytes TIM_DMABurstLength_17Transfers -#define TIM_DMABurstLength_18Bytes TIM_DMABurstLength_18Transfers - -void TIM_DeInit(TIM_TypeDef *TIMx); -void TIM_TimeBaseInit(TIM_TypeDef *TIMx, TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct); -void TIM_OC1Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct); -void TIM_OC2Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct); -void TIM_OC3Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct); -void TIM_OC4Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct); -void TIM_ICInit(TIM_TypeDef *TIMx, TIM_ICInitTypeDef *TIM_ICInitStruct); -void TIM_PWMIConfig(TIM_TypeDef *TIMx, TIM_ICInitTypeDef *TIM_ICInitStruct); -void TIM_BDTRConfig(TIM_TypeDef *TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct); -void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct); -void TIM_OCStructInit(TIM_OCInitTypeDef *TIM_OCInitStruct); -void TIM_ICStructInit(TIM_ICInitTypeDef *TIM_ICInitStruct); -void TIM_BDTRStructInit(TIM_BDTRInitTypeDef *TIM_BDTRInitStruct); -void TIM_Cmd(TIM_TypeDef *TIMx, FunctionalState NewState); -void TIM_CtrlPWMOutputs(TIM_TypeDef *TIMx, FunctionalState NewState); -void TIM_ITConfig(TIM_TypeDef *TIMx, uint16_t TIM_IT, FunctionalState NewState); -void TIM_GenerateEvent(TIM_TypeDef *TIMx, uint16_t TIM_EventSource); -void TIM_DMAConfig(TIM_TypeDef *TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength); -void TIM_DMACmd(TIM_TypeDef *TIMx, uint16_t TIM_DMASource, FunctionalState NewState); -void TIM_InternalClockConfig(TIM_TypeDef *TIMx); -void TIM_ITRxExternalClockConfig(TIM_TypeDef *TIMx, uint16_t TIM_InputTriggerSource); -void TIM_TIxExternalClockConfig(TIM_TypeDef *TIMx, uint16_t TIM_TIxExternalCLKSource, - uint16_t TIM_ICPolarity, uint16_t ICFilter); -void TIM_ETRClockMode1Config(TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); -void TIM_ETRClockMode2Config(TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, - uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter); -void TIM_ETRConfig(TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter); -void TIM_PrescalerConfig(TIM_TypeDef *TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode); -void TIM_CounterModeConfig(TIM_TypeDef *TIMx, uint16_t TIM_CounterMode); -void TIM_SelectInputTrigger(TIM_TypeDef *TIMx, uint16_t TIM_InputTriggerSource); -void TIM_EncoderInterfaceConfig(TIM_TypeDef *TIMx, uint16_t TIM_EncoderMode, - uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity); -void TIM_ForcedOC1Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC2Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC3Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction); -void TIM_ForcedOC4Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction); -void TIM_ARRPreloadConfig(TIM_TypeDef *TIMx, FunctionalState NewState); -void TIM_SelectCOM(TIM_TypeDef *TIMx, FunctionalState NewState); -void TIM_SelectCCDMA(TIM_TypeDef *TIMx, FunctionalState NewState); -void TIM_CCPreloadControl(TIM_TypeDef *TIMx, FunctionalState NewState); -void TIM_OC1PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload); -void TIM_OC2PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload); -void TIM_OC3PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload); -void TIM_OC4PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload); -void TIM_OC1FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast); -void TIM_OC2FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast); -void TIM_OC3FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast); -void TIM_OC4FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast); -void TIM_ClearOC1Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear); -void TIM_ClearOC2Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear); -void TIM_ClearOC3Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear); -void TIM_ClearOC4Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear); -void TIM_OC1PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity); -void TIM_OC1NPolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity); -void TIM_OC2PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity); -void TIM_OC2NPolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity); -void TIM_OC3PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity); -void TIM_OC3NPolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity); -void TIM_OC4PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity); -void TIM_CCxCmd(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx); -void TIM_CCxNCmd(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN); -void TIM_SelectOCxM(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode); -void TIM_UpdateDisableConfig(TIM_TypeDef *TIMx, FunctionalState NewState); -void TIM_UpdateRequestConfig(TIM_TypeDef *TIMx, uint16_t TIM_UpdateSource); -void TIM_SelectHallSensor(TIM_TypeDef *TIMx, FunctionalState NewState); -void TIM_SelectOnePulseMode(TIM_TypeDef *TIMx, uint16_t TIM_OPMode); -void TIM_SelectOutputTrigger(TIM_TypeDef *TIMx, uint16_t TIM_TRGOSource); -void TIM_SelectSlaveMode(TIM_TypeDef *TIMx, uint16_t TIM_SlaveMode); -void TIM_SelectMasterSlaveMode(TIM_TypeDef *TIMx, uint16_t TIM_MasterSlaveMode); -void TIM_SetCounter(TIM_TypeDef *TIMx, uint16_t Counter); -void TIM_SetAutoreload(TIM_TypeDef *TIMx, uint16_t Autoreload); -void TIM_SetCompare1(TIM_TypeDef *TIMx, uint16_t Compare1); -void TIM_SetCompare2(TIM_TypeDef *TIMx, uint16_t Compare2); -void TIM_SetCompare3(TIM_TypeDef *TIMx, uint16_t Compare3); -void TIM_SetCompare4(TIM_TypeDef *TIMx, uint16_t Compare4); -void TIM_SetIC1Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC2Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC3Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC); -void TIM_SetIC4Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC); -void TIM_SetClockDivision(TIM_TypeDef *TIMx, uint16_t TIM_CKD); -uint16_t TIM_GetCapture1(TIM_TypeDef *TIMx); -uint16_t TIM_GetCapture2(TIM_TypeDef *TIMx); -uint16_t TIM_GetCapture3(TIM_TypeDef *TIMx); -uint16_t TIM_GetCapture4(TIM_TypeDef *TIMx); -uint16_t TIM_GetCounter(TIM_TypeDef *TIMx); -uint16_t TIM_GetPrescaler(TIM_TypeDef *TIMx); -FlagStatus TIM_GetFlagStatus(TIM_TypeDef *TIMx, uint16_t TIM_FLAG); -void TIM_ClearFlag(TIM_TypeDef *TIMx, uint16_t TIM_FLAG); -ITStatus TIM_GetITStatus(TIM_TypeDef *TIMx, uint16_t TIM_IT); -void TIM_ClearITPendingBit(TIM_TypeDef *TIMx, uint16_t TIM_IT); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32V10x_TIM_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usart.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usart.h deleted file mode 100644 index 0e2c885..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usart.h +++ /dev/null @@ -1,185 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_usart.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the - * USART firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_USART_H -#define __CH32V10x_USART_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* USART Init Structure definition */ -typedef struct -{ - uint32_t USART_BaudRate; /* This member configures the USART communication baud rate. - The baud rate is computed using the following formula: - - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate))) - - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */ - - uint16_t USART_WordLength; /* Specifies the number of data bits transmitted or received in a frame. - This parameter can be a value of @ref USART_Word_Length */ - - uint16_t USART_StopBits; /* Specifies the number of stop bits transmitted. - This parameter can be a value of @ref USART_Stop_Bits */ - - uint16_t USART_Parity; /* Specifies the parity mode. - This parameter can be a value of @ref USART_Parity - @note When parity is enabled, the computed parity is inserted - at the MSB position of the transmitted data (9th bit when - the word length is set to 9 data bits; 8th bit when the - word length is set to 8 data bits). */ - - uint16_t USART_Mode; /* Specifies wether the Receive or Transmit mode is enabled or disabled. - This parameter can be a value of @ref USART_Mode */ - - uint16_t USART_HardwareFlowControl; /* Specifies wether the hardware flow control mode is enabled - or disabled. - This parameter can be a value of @ref USART_Hardware_Flow_Control */ -} USART_InitTypeDef; - -/* USART Clock Init Structure definition */ -typedef struct -{ - uint16_t USART_Clock; /* Specifies whether the USART clock is enabled or disabled. - This parameter can be a value of @ref USART_Clock */ - - uint16_t USART_CPOL; /* Specifies the steady state value of the serial clock. - This parameter can be a value of @ref USART_Clock_Polarity */ - - uint16_t USART_CPHA; /* Specifies the clock transition on which the bit capture is made. - This parameter can be a value of @ref USART_Clock_Phase */ - - uint16_t USART_LastBit; /* Specifies whether the clock pulse corresponding to the last transmitted - data bit (MSB) has to be output on the SCLK pin in synchronous mode. - This parameter can be a value of @ref USART_Last_Bit */ -} USART_ClockInitTypeDef; - -/* USART_Word_Length */ -#define USART_WordLength_8b ((uint16_t)0x0000) -#define USART_WordLength_9b ((uint16_t)0x1000) - -/* USART_Stop_Bits */ -#define USART_StopBits_1 ((uint16_t)0x0000) -#define USART_StopBits_0_5 ((uint16_t)0x1000) -#define USART_StopBits_2 ((uint16_t)0x2000) -#define USART_StopBits_1_5 ((uint16_t)0x3000) - -/* USART_Parity */ -#define USART_Parity_No ((uint16_t)0x0000) -#define USART_Parity_Even ((uint16_t)0x0400) -#define USART_Parity_Odd ((uint16_t)0x0600) - -/* USART_Mode */ -#define USART_Mode_Rx ((uint16_t)0x0004) -#define USART_Mode_Tx ((uint16_t)0x0008) - -/* USART_Hardware_Flow_Control */ -#define USART_HardwareFlowControl_None ((uint16_t)0x0000) -#define USART_HardwareFlowControl_RTS ((uint16_t)0x0100) -#define USART_HardwareFlowControl_CTS ((uint16_t)0x0200) -#define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300) - -/* USART_Clock */ -#define USART_Clock_Disable ((uint16_t)0x0000) -#define USART_Clock_Enable ((uint16_t)0x0800) - -/* USART_Clock_Polarity */ -#define USART_CPOL_Low ((uint16_t)0x0000) -#define USART_CPOL_High ((uint16_t)0x0400) - -/* USART_Clock_Phase */ -#define USART_CPHA_1Edge ((uint16_t)0x0000) -#define USART_CPHA_2Edge ((uint16_t)0x0200) - -/* USART_Last_Bit */ -#define USART_LastBit_Disable ((uint16_t)0x0000) -#define USART_LastBit_Enable ((uint16_t)0x0100) - -/* USART_Interrupt_definition */ -#define USART_IT_PE ((uint16_t)0x0028) -#define USART_IT_TXE ((uint16_t)0x0727) -#define USART_IT_TC ((uint16_t)0x0626) -#define USART_IT_RXNE ((uint16_t)0x0525) -#define USART_IT_ORE_RX ((uint16_t)0x0325) -#define USART_IT_IDLE ((uint16_t)0x0424) -#define USART_IT_LBD ((uint16_t)0x0846) -#define USART_IT_CTS ((uint16_t)0x096A) -#define USART_IT_ERR ((uint16_t)0x0060) -#define USART_IT_ORE_ER ((uint16_t)0x0360) -#define USART_IT_NE ((uint16_t)0x0260) -#define USART_IT_FE ((uint16_t)0x0160) - -#define USART_IT_ORE USART_IT_ORE_ER - -/* USART_DMA_Requests */ -#define USART_DMAReq_Tx ((uint16_t)0x0080) -#define USART_DMAReq_Rx ((uint16_t)0x0040) - -/* USART_WakeUp_methods */ -#define USART_WakeUp_IdleLine ((uint16_t)0x0000) -#define USART_WakeUp_AddressMark ((uint16_t)0x0800) - -/* USART_LIN_Break_Detection_Length */ -#define USART_LINBreakDetectLength_10b ((uint16_t)0x0000) -#define USART_LINBreakDetectLength_11b ((uint16_t)0x0020) - -/* USART_IrDA_Low_Power */ -#define USART_IrDAMode_LowPower ((uint16_t)0x0004) -#define USART_IrDAMode_Normal ((uint16_t)0x0000) - -/* USART_Flags */ -#define USART_FLAG_CTS ((uint16_t)0x0200) -#define USART_FLAG_LBD ((uint16_t)0x0100) -#define USART_FLAG_TXE ((uint16_t)0x0080) -#define USART_FLAG_TC ((uint16_t)0x0040) -#define USART_FLAG_RXNE ((uint16_t)0x0020) -#define USART_FLAG_IDLE ((uint16_t)0x0010) -#define USART_FLAG_ORE ((uint16_t)0x0008) -#define USART_FLAG_NE ((uint16_t)0x0004) -#define USART_FLAG_FE ((uint16_t)0x0002) -#define USART_FLAG_PE ((uint16_t)0x0001) - -void USART_DeInit(USART_TypeDef *USARTx); -void USART_Init(USART_TypeDef *USARTx, USART_InitTypeDef *USART_InitStruct); -void USART_StructInit(USART_InitTypeDef *USART_InitStruct); -void USART_ClockInit(USART_TypeDef *USARTx, USART_ClockInitTypeDef *USART_ClockInitStruct); -void USART_ClockStructInit(USART_ClockInitTypeDef *USART_ClockInitStruct); -void USART_Cmd(USART_TypeDef *USARTx, FunctionalState NewState); -void USART_ITConfig(USART_TypeDef *USARTx, uint16_t USART_IT, FunctionalState NewState); -void USART_DMACmd(USART_TypeDef *USARTx, uint16_t USART_DMAReq, FunctionalState NewState); -void USART_SetAddress(USART_TypeDef *USARTx, uint8_t USART_Address); -void USART_WakeUpConfig(USART_TypeDef *USARTx, uint16_t USART_WakeUp); -void USART_ReceiverWakeUpCmd(USART_TypeDef *USARTx, FunctionalState NewState); -void USART_LINBreakDetectLengthConfig(USART_TypeDef *USARTx, uint16_t USART_LINBreakDetectLength); -void USART_LINCmd(USART_TypeDef *USARTx, FunctionalState NewState); -void USART_SendData(USART_TypeDef *USARTx, uint16_t Data); -uint16_t USART_ReceiveData(USART_TypeDef *USARTx); -void USART_SendBreak(USART_TypeDef *USARTx); -void USART_SetGuardTime(USART_TypeDef *USARTx, uint8_t USART_GuardTime); -void USART_SetPrescaler(USART_TypeDef *USARTx, uint8_t USART_Prescaler); -void USART_SmartCardCmd(USART_TypeDef *USARTx, FunctionalState NewState); -void USART_SmartCardNACKCmd(USART_TypeDef *USARTx, FunctionalState NewState); -void USART_HalfDuplexCmd(USART_TypeDef *USARTx, FunctionalState NewState); -void USART_OverSampling8Cmd(USART_TypeDef *USARTx, FunctionalState NewState); -void USART_OneBitMethodCmd(USART_TypeDef *USARTx, FunctionalState NewState); -void USART_IrDAConfig(USART_TypeDef *USARTx, uint16_t USART_IrDAMode); -void USART_IrDACmd(USART_TypeDef *USARTx, FunctionalState NewState); -FlagStatus USART_GetFlagStatus(USART_TypeDef *USARTx, uint16_t USART_FLAG); -void USART_ClearFlag(USART_TypeDef *USARTx, uint16_t USART_FLAG); -ITStatus USART_GetITStatus(USART_TypeDef *USARTx, uint16_t USART_IT); -void USART_ClearITPendingBit(USART_TypeDef *USARTx, uint16_t USART_IT); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_USART_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usb.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usb.h deleted file mode 100644 index 4df5c69..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usb.h +++ /dev/null @@ -1,700 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_usb.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the USB - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_USB_H -#define __CH32V10x_USB_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef NULL - #define NULL 0 -#endif - -#ifndef VOID - #define VOID void -#endif -#ifndef CONST - #define CONST const -#endif -#ifndef BOOL -typedef unsigned char BOOL; -#endif -#ifndef BOOLEAN -typedef unsigned char BOOLEAN; -#endif -#ifndef CHAR -typedef char CHAR; -#endif -#ifndef INT8 -typedef char INT8; -#endif -#ifndef INT16 -typedef short INT16; -#endif -#ifndef INT32 -typedef long INT32; -#endif -#ifndef UINT8 -typedef unsigned char UINT8; -#endif -#ifndef UINT16 -typedef unsigned short UINT16; -#endif -#ifndef UINT32 -typedef unsigned long UINT32; -#endif -#ifndef UINT8V -typedef unsigned char volatile UINT8V; -#endif -#ifndef UINT16V -typedef unsigned short volatile UINT16V; -#endif -#ifndef UINT32V -typedef unsigned long volatile UINT32V; -#endif - -#ifndef PVOID -typedef void *PVOID; -#endif -#ifndef PCHAR -typedef char *PCHAR; -#endif -#ifndef PCHAR -typedef const char *PCCHAR; -#endif -#ifndef PINT8 -typedef char *PINT8; -#endif -#ifndef PINT16 -typedef short *PINT16; -#endif -#ifndef PINT32 -typedef long *PINT32; -#endif -#ifndef PUINT8 -typedef unsigned char *PUINT8; -#endif -#ifndef PUINT16 -typedef unsigned short *PUINT16; -#endif -#ifndef PUINT32 -typedef unsigned long *PUINT32; -#endif -#ifndef PUINT8V -typedef volatile unsigned char *PUINT8V; -#endif -#ifndef PUINT16V -typedef volatile unsigned short *PUINT16V; -#endif -#ifndef PUINT32V -typedef volatile unsigned long *PUINT32V; -#endif - -/******************************************************************************/ -/* Peripheral memory map */ -/******************************************************************************/ -/* USB */ -#define R32_USB_CONTROL (*((PUINT32V)(0x40023400))) // USB control & interrupt enable & device address -#define R8_USB_CTRL (*((PUINT8V)(0x40023400))) // USB base control -#define RB_UC_HOST_MODE 0x80 // enable USB host mode: 0=device mode, 1=host mode -#define RB_UC_LOW_SPEED 0x40 // enable USB low speed: 0=12Mbps, 1=1.5Mbps -#define RB_UC_DEV_PU_EN 0x20 // USB device enable and internal pullup resistance enable -#define RB_UC_SYS_CTRL1 0x20 // USB system control high bit -#define RB_UC_SYS_CTRL0 0x10 // USB system control low bit -#define MASK_UC_SYS_CTRL 0x30 // bit mask of USB system control -// bUC_HOST_MODE & bUC_SYS_CTRL1 & bUC_SYS_CTRL0: USB system control -// 0 00: disable USB device and disable internal pullup resistance -// 0 01: enable USB device and disable internal pullup resistance, need external pullup resistance -// 0 1x: enable USB device and enable internal pullup resistance -// 1 00: enable USB host and normal status -// 1 01: enable USB host and force UDP/UDM output SE0 state -// 1 10: enable USB host and force UDP/UDM output J state -// 1 11: enable USB host and force UDP/UDM output resume or K state -#define RB_UC_INT_BUSY 0x08 // enable automatic responding busy for device mode or automatic pause for host mode during interrupt flag UIF_TRANSFER valid -#define RB_UC_RESET_SIE 0x04 // force reset USB SIE, need software clear -#define RB_UC_CLR_ALL 0x02 // force clear FIFO and count of USB -#define RB_UC_DMA_EN 0x01 // DMA enable and DMA interrupt enable for USB - -#define R8_UDEV_CTRL (*((PUINT8V)(0x40023401))) // USB device physical prot control -#define RB_UD_PD_DIS 0x80 // disable USB UDP/UDM pulldown resistance: 0=enable pulldown, 1=disable -#define RB_UD_DP_PIN 0x20 // ReadOnly: indicate current UDP pin level -#define RB_UD_DM_PIN 0x10 // ReadOnly: indicate current UDM pin level -#define RB_UD_LOW_SPEED 0x04 // enable USB physical port low speed: 0=full speed, 1=low speed -#define RB_UD_GP_BIT 0x02 // general purpose bit -#define RB_UD_PORT_EN 0x01 // enable USB physical port I/O: 0=disable, 1=enable - -#define R8_UHOST_CTRL R8_UDEV_CTRL // USB host physical prot control -#define RB_UH_PD_DIS 0x80 // disable USB UDP/UDM pulldown resistance: 0=enable pulldown, 1=disable -#define RB_UH_DP_PIN 0x20 // ReadOnly: indicate current UDP pin level -#define RB_UH_DM_PIN 0x10 // ReadOnly: indicate current UDM pin level -#define RB_UH_LOW_SPEED 0x04 // enable USB port low speed: 0=full speed, 1=low speed -#define RB_UH_BUS_RESET 0x02 // control USB bus reset: 0=normal, 1=force bus reset -#define RB_UH_PORT_EN 0x01 // enable USB port: 0=disable, 1=enable port, automatic disabled if USB device detached - -#define R8_USB_INT_EN (*((PUINT8V)(0x40023402))) // USB interrupt enable -#define RB_UIE_DEV_SOF 0x80 // enable interrupt for SOF received for USB device mode -#define RB_UIE_DEV_NAK 0x40 // enable interrupt for NAK responded for USB device mode -#define RB_UIE_FIFO_OV 0x10 // enable interrupt for FIFO overflow -#define RB_UIE_HST_SOF 0x08 // enable interrupt for host SOF timer action for USB host mode -#define RB_UIE_SUSPEND 0x04 // enable interrupt for USB suspend or resume event -#define RB_UIE_TRANSFER 0x02 // enable interrupt for USB transfer completion -#define RB_UIE_DETECT 0x01 // enable interrupt for USB device detected event for USB host mode -#define RB_UIE_BUS_RST 0x01 // enable interrupt for USB bus reset event for USB device mode - -#define R8_USB_DEV_AD (*((PUINT8V)(0x40023403))) // USB device address -#define RB_UDA_GP_BIT 0x80 // general purpose bit -#define MASK_USB_ADDR 0x7F // bit mask for USB device address - -#define R32_USB_STATUS (*((PUINT32V)(0x40023404))) // USB miscellaneous status & interrupt flag & interrupt status -#define R8_USB_MIS_ST (*((PUINT8V)(0x40023405))) // USB miscellaneous status -#define RB_UMS_SOF_PRES 0x80 // RO, indicate host SOF timer presage status -#define RB_UMS_SOF_ACT 0x40 // RO, indicate host SOF timer action status for USB host -#define RB_UMS_SIE_FREE 0x20 // RO, indicate USB SIE free status -#define RB_UMS_R_FIFO_RDY 0x10 // RO, indicate USB receiving FIFO ready status (not empty) -#define RB_UMS_BUS_RESET 0x08 // RO, indicate USB bus reset status -#define RB_UMS_SUSPEND 0x04 // RO, indicate USB suspend status -#define RB_UMS_DM_LEVEL 0x02 // RO, indicate UDM level saved at device attached to USB host -#define RB_UMS_DEV_ATTACH 0x01 // RO, indicate device attached status on USB host - -#define R8_USB_INT_FG (*((PUINT8V)(0x40023406))) // USB interrupt flag -#define RB_U_IS_NAK 0x80 // RO, indicate current USB transfer is NAK received -#define RB_U_TOG_OK 0x40 // RO, indicate current USB transfer toggle is OK -#define RB_U_SIE_FREE 0x20 // RO, indicate USB SIE free status -#define RB_UIF_FIFO_OV 0x10 // FIFO overflow interrupt flag for USB, direct bit address clear or write 1 to clear -#define RB_UIF_HST_SOF 0x08 // host SOF timer interrupt flag for USB host, direct bit address clear or write 1 to clear -#define RB_UIF_SUSPEND 0x04 // USB suspend or resume event interrupt flag, direct bit address clear or write 1 to clear -#define RB_UIF_TRANSFER 0x02 // USB transfer completion interrupt flag, direct bit address clear or write 1 to clear -#define RB_UIF_DETECT 0x01 // device detected event interrupt flag for USB host mode, direct bit address clear or write 1 to clear -#define RB_UIF_BUS_RST 0x01 // bus reset event interrupt flag for USB device mode, direct bit address clear or write 1 to clear - -#define R8_USB_INT_ST (*((PUINT8V)(0x40023407))) // USB interrupt status -#define RB_UIS_IS_NAK 0x80 // RO, indicate current USB transfer is NAK received for USB device mode -#define RB_UIS_TOG_OK 0x40 // RO, indicate current USB transfer toggle is OK -#define RB_UIS_TOKEN1 0x20 // RO, current token PID code bit 1 received for USB device mode -#define RB_UIS_TOKEN0 0x10 // RO, current token PID code bit 0 received for USB device mode -#define MASK_UIS_TOKEN 0x30 // RO, bit mask of current token PID code received for USB device mode -#define UIS_TOKEN_OUT 0x00 -#define UIS_TOKEN_SOF 0x10 -#define UIS_TOKEN_IN 0x20 -#define UIS_TOKEN_SETUP 0x30 -// bUIS_TOKEN1 & bUIS_TOKEN0: current token PID code received for USB device mode -// 00: OUT token PID received -// 01: SOF token PID received -// 10: IN token PID received -// 11: SETUP token PID received -#define MASK_UIS_ENDP 0x0F // RO, bit mask of current transfer endpoint number for USB device mode -#define MASK_UIS_H_RES 0x0F // RO, bit mask of current transfer handshake response for USB host mode: 0000=no response, time out from device, others=handshake response PID received - -#define R8_USB_RX_LEN (*((PUINT8V)(0x40023408))) // USB receiving length -#define R32_USB_BUF_MODE (*((PUINT32V)(0x4002340c))) // USB endpoint buffer mode -#define R8_UEP4_1_MOD (*((PUINT8V)(0x4002340c))) // endpoint 4/1 mode -#define RB_UEP1_RX_EN 0x80 // enable USB endpoint 1 receiving (OUT) -#define RB_UEP1_TX_EN 0x40 // enable USB endpoint 1 transmittal (IN) -#define RB_UEP1_BUF_MOD 0x10 // buffer mode of USB endpoint 1 -// bUEPn_RX_EN & bUEPn_TX_EN & bUEPn_BUF_MOD: USB endpoint 1/2/3 buffer mode, buffer start address is UEPn_DMA -// 0 0 x: disable endpoint and disable buffer -// 1 0 0: 64 bytes buffer for receiving (OUT endpoint) -// 1 0 1: dual 64 bytes buffer by toggle bit bUEP_R_TOG selection for receiving (OUT endpoint), total=128bytes -// 0 1 0: 64 bytes buffer for transmittal (IN endpoint) -// 0 1 1: dual 64 bytes buffer by toggle bit bUEP_T_TOG selection for transmittal (IN endpoint), total=128bytes -// 1 1 0: 64 bytes buffer for receiving (OUT endpoint) + 64 bytes buffer for transmittal (IN endpoint), total=128bytes -// 1 1 1: dual 64 bytes buffer by bUEP_R_TOG selection for receiving (OUT endpoint) + dual 64 bytes buffer by bUEP_T_TOG selection for transmittal (IN endpoint), total=256bytes -#define RB_UEP4_RX_EN 0x08 // enable USB endpoint 4 receiving (OUT) -#define RB_UEP4_TX_EN 0x04 // enable USB endpoint 4 transmittal (IN) -// bUEP4_RX_EN & bUEP4_TX_EN: USB endpoint 4 buffer mode, buffer start address is UEP0_DMA -// 0 0: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) -// 1 0: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) + 64 bytes buffer for endpoint 4 receiving (OUT endpoint), total=128bytes -// 0 1: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) + 64 bytes buffer for endpoint 4 transmittal (IN endpoint), total=128bytes -// 1 1: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) -// + 64 bytes buffer for endpoint 4 receiving (OUT endpoint) + 64 bytes buffer for endpoint 4 transmittal (IN endpoint), total=192bytes - -#define R8_UEP2_3_MOD (*((PUINT8V)(0x4002340d))) // endpoint 2/3 mode -#define RB_UEP3_RX_EN 0x80 // enable USB endpoint 3 receiving (OUT) -#define RB_UEP3_TX_EN 0x40 // enable USB endpoint 3 transmittal (IN) -#define RB_UEP3_BUF_MOD 0x10 // buffer mode of USB endpoint 3 -#define RB_UEP2_RX_EN 0x08 // enable USB endpoint 2 receiving (OUT) -#define RB_UEP2_TX_EN 0x04 // enable USB endpoint 2 transmittal (IN) -#define RB_UEP2_BUF_MOD 0x01 // buffer mode of USB endpoint 2 - -#define R8_UH_EP_MOD R8_UEP2_3_MOD //host endpoint mode -#define RB_UH_EP_TX_EN 0x40 // enable USB host OUT endpoint transmittal -#define RB_UH_EP_TBUF_MOD 0x10 // buffer mode of USB host OUT endpoint -// bUH_EP_TX_EN & bUH_EP_TBUF_MOD: USB host OUT endpoint buffer mode, buffer start address is UH_TX_DMA -// 0 x: disable endpoint and disable buffer -// 1 0: 64 bytes buffer for transmittal (OUT endpoint) -// 1 1: dual 64 bytes buffer by toggle bit bUH_T_TOG selection for transmittal (OUT endpoint), total=128bytes -#define RB_UH_EP_RX_EN 0x08 // enable USB host IN endpoint receiving -#define RB_UH_EP_RBUF_MOD 0x01 // buffer mode of USB host IN endpoint -// bUH_EP_RX_EN & bUH_EP_RBUF_MOD: USB host IN endpoint buffer mode, buffer start address is UH_RX_DMA -// 0 x: disable endpoint and disable buffer -// 1 0: 64 bytes buffer for receiving (IN endpoint) -// 1 1: dual 64 bytes buffer by toggle bit bUH_R_TOG selection for receiving (IN endpoint), total=128bytes - -#define R8_UEP5_6_MOD (*((PUINT8V)(0x4002340e))) // endpoint 5/6 mode -#define RB_UEP6_RX_EN 0x80 // enable USB endpoint 6 receiving (OUT) -#define RB_UEP6_TX_EN 0x40 // enable USB endpoint 6 transmittal (IN) -#define RB_UEP6_BUF_MOD 0x10 // buffer mode of USB endpoint 6 -#define RB_UEP5_RX_EN 0x08 // enable USB endpoint 5 receiving (OUT) -#define RB_UEP5_TX_EN 0x04 // enable USB endpoint 5 transmittal (IN) -#define RB_UEP5_BUF_MOD 0x01 // buffer mode of USB endpoint 5 - -#define R8_UEP7_MOD (*((PUINT8V)(0x4002340f))) // endpoint 7 mode -#define RB_UEP7_RX_EN 0x08 // enable USB endpoint 7 receiving (OUT) -#define RB_UEP7_TX_EN 0x04 // enable USB endpoint 7 transmittal (IN) -#define RB_UEP7_BUF_MOD 0x01 // buffer mode of USB endpoint 7 - -#define R16_UEP0_DMA (*((PUINT16V)(0x40023410))) // endpoint 0 DMA buffer address -#define R16_UEP1_DMA (*((PUINT16V)(0x40023414))) // endpoint 1 DMA buffer address -#define R16_UEP2_DMA (*((PUINT16V)(0x40023418))) // endpoint 2 DMA buffer address -#define R16_UH_RX_DMA R16_UEP2_DMA // host rx endpoint buffer high address -#define R16_UEP3_DMA (*((PUINT16V)(0x4002341c))) // endpoint 3 DMA buffer address - -#define R16_UEP4_DMA (*((PUINT16V)(0x40023420))) // endpoint 4 DMA buffer address -#define R16_UEP5_DMA (*((PUINT16V)(0x40023424))) // endpoint 5 DMA buffer address -#define R16_UEP6_DMA (*((PUINT16V)(0x40023428))) // endpoint 6 DMA buffer address -#define R16_UEP7_DMA (*((PUINT16V)(0x4002342c))) // endpoint 7 DMA buffer address - -#define R16_UH_TX_DMA R16_UEP3_DMA // host tx endpoint buffer high address -#define R32_USB_EP0_CTRL (*((PUINT32V)(0x40023430))) // endpoint 0 control & transmittal length -#define R8_UEP0_T_LEN (*((PUINT8V)(0x40023430))) // endpoint 0 transmittal length -#define R8_UEP0_CTRL (*((PUINT8V)(0x40023432))) // endpoint 0 control -#define R32_USB_EP1_CTRL (*((PUINT32V)(0x40023434))) // endpoint 1 control & transmittal length -#define R8_UEP1_T_LEN (*((PUINT8V)(0x40023434))) // endpoint 1 transmittal length -#define R8_UEP1_CTRL (*((PUINT8V)(0x40023436))) // endpoint 1 control -#define RB_UEP_R_TOG 0x80 // expected data toggle flag of USB endpoint X receiving (OUT): 0=DATA0, 1=DATA1 -#define RB_UEP_T_TOG 0x40 // prepared data toggle flag of USB endpoint X transmittal (IN): 0=DATA0, 1=DATA1 -#define RB_UEP_AUTO_TOG 0x10 // enable automatic toggle after successful transfer completion on endpoint 1/2/3: 0=manual toggle, 1=automatic toggle -#define RB_UEP_R_RES1 0x08 // handshake response type high bit for USB endpoint X receiving (OUT) -#define RB_UEP_R_RES0 0x04 // handshake response type low bit for USB endpoint X receiving (OUT) -#define MASK_UEP_R_RES 0x0C // bit mask of handshake response type for USB endpoint X receiving (OUT) -#define UEP_R_RES_ACK 0x00 -#define UEP_R_RES_TOUT 0x04 -#define UEP_R_RES_NAK 0x08 -#define UEP_R_RES_STALL 0x0C -// RB_UEP_R_RES1 & RB_UEP_R_RES0: handshake response type for USB endpoint X receiving (OUT) -// 00: ACK (ready) -// 01: no response, time out to host, for non-zero endpoint isochronous transactions -// 10: NAK (busy) -// 11: STALL (error) -#define RB_UEP_T_RES1 0x02 // handshake response type high bit for USB endpoint X transmittal (IN) -#define RB_UEP_T_RES0 0x01 // handshake response type low bit for USB endpoint X transmittal (IN) -#define MASK_UEP_T_RES 0x03 // bit mask of handshake response type for USB endpoint X transmittal (IN) -#define UEP_T_RES_ACK 0x00 -#define UEP_T_RES_TOUT 0x01 -#define UEP_T_RES_NAK 0x02 -#define UEP_T_RES_STALL 0x03 -// bUEP_T_RES1 & bUEP_T_RES0: handshake response type for USB endpoint X transmittal (IN) -// 00: DATA0 or DATA1 then expecting ACK (ready) -// 01: DATA0 or DATA1 then expecting no response, time out from host, for non-zero endpoint isochronous transactions -// 10: NAK (busy) -// 11: STALL (error) - -#define R8_UH_SETUP R8_UEP1_CTRL // host aux setup -#define RB_UH_PRE_PID_EN 0x80 // USB host PRE PID enable for low speed device via hub -#define RB_UH_SOF_EN 0x40 // USB host automatic SOF enable - -#define R32_USB_EP2_CTRL (*((PUINT32V)(0x40023438))) // endpoint 2 control & transmittal length -#define R8_UEP2_T_LEN (*((PUINT8V)(0x40023438))) // endpoint 2 transmittal length -#define R8_UEP2_CTRL (*((PUINT8V)(0x4002343a))) // endpoint 2 control - -#define R8_UH_EP_PID R8_UEP2_T_LEN // host endpoint and PID -#define MASK_UH_TOKEN 0xF0 // bit mask of token PID for USB host transfer -#define MASK_UH_ENDP 0x0F // bit mask of endpoint number for USB host transfer - -#define R8_UH_RX_CTRL R8_UEP2_CTRL // host receiver endpoint control -#define RB_UH_R_TOG 0x80 // expected data toggle flag of host receiving (IN): 0=DATA0, 1=DATA1 -#define RB_UH_R_AUTO_TOG 0x10 // enable automatic toggle after successful transfer completion: 0=manual toggle, 1=automatic toggle -#define RB_UH_R_RES 0x04 // prepared handshake response type for host receiving (IN): 0=ACK (ready), 1=no response, time out to device, for isochronous transactions - -#define R32_USB_EP3_CTRL (*((PUINT32V)(0x4002343c))) // endpoint 3 control & transmittal length -#define R8_UEP3_T_LEN (*((PUINT16V)(0x4002343c))) // endpoint 3 transmittal length -#define R8_UEP3_CTRL (*((PUINT8V)(0x4002343e))) // endpoint 3 control -#define R8_UH_TX_LEN (*((PUINT16V)(0x4002343c))) //R8_UEP3_T_LEN // host transmittal endpoint transmittal length - -#define R8_UH_TX_CTRL R8_UEP3_CTRL // host transmittal endpoint control -#define RB_UH_T_TOG 0x40 // prepared data toggle flag of host transmittal (SETUP/OUT): 0=DATA0, 1=DATA1 -#define RB_UH_T_AUTO_TOG 0x10 // enable automatic toggle after successful transfer completion: 0=manual toggle, 1=automatic toggle -#define RB_UH_T_RES 0x01 // expected handshake response type for host transmittal (SETUP/OUT): 0=ACK (ready), 1=no response, time out from device, for isochronous transactions - -#define R32_USB_EP4_CTRL (*((PUINT32V)(0x40023440))) // endpoint 4 control & transmittal length -#define R8_UEP4_T_LEN (*((PUINT8V)(0x40023440))) // endpoint 4 transmittal length -#define R8_UEP4_CTRL (*((PUINT8V)(0x40023442))) // endpoint 4 control - -#define R32_USB_EP5_CTRL (*((PUINT32V)(0x40023444))) // endpoint 5 control & transmittal length -#define R8_UEP5_T_LEN (*((PUINT8V)(0x40023444))) // endpoint 5 transmittal length -#define R8_UEP5_CTRL (*((PUINT8V)(0x40023446))) // endpoint 5 control - -#define R32_USB_EP6_CTRL (*((PUINT32V)(0x40023448))) // endpoint 6 control & transmittal length -#define R8_UEP6_T_LEN (*((PUINT8V)(0x40023448))) // endpoint 6 transmittal length -#define R8_UEP6_CTRL (*((PUINT8V)(0x4002344a))) // endpoint 6 control - -#define R32_USB_EP7_CTRL (*((PUINT32V)(0x4002344c))) // endpoint 7 control & transmittal length -#define R8_UEP7_T_LEN (*((PUINT8V)(0x4002344c))) // endpoint 7 transmittal length -#define R8_UEP7_CTRL (*((PUINT8V)(0x4002344e))) // endpoint 7 control - -#ifdef __cplusplus -} -#endif - -#endif //__CH32V10x_USB_H - -#ifndef __USB_TYPE__ -#define __USB_TYPE__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* USB constant and structure define */ - -/* USB PID */ -#ifndef USB_PID_SETUP - #define USB_PID_NULL 0x00 /* reserved PID */ - #define USB_PID_SOF 0x05 - #define USB_PID_SETUP 0x0D - #define USB_PID_IN 0x09 - #define USB_PID_OUT 0x01 - #define USB_PID_ACK 0x02 - #define USB_PID_NAK 0x0A - #define USB_PID_STALL 0x0E - #define USB_PID_DATA0 0x03 - #define USB_PID_DATA1 0x0B - #define USB_PID_PRE 0x0C -#endif - -/* USB standard device request code */ -#ifndef USB_GET_DESCRIPTOR - #define USB_GET_STATUS 0x00 - #define USB_CLEAR_FEATURE 0x01 - #define USB_SET_FEATURE 0x03 - #define USB_SET_ADDRESS 0x05 - #define USB_GET_DESCRIPTOR 0x06 - #define USB_SET_DESCRIPTOR 0x07 - #define USB_GET_CONFIGURATION 0x08 - #define USB_SET_CONFIGURATION 0x09 - #define USB_GET_INTERFACE 0x0A - #define USB_SET_INTERFACE 0x0B - #define USB_SYNCH_FRAME 0x0C -#endif - -/* USB hub class request code */ -#ifndef HUB_GET_DESCRIPTOR - #define HUB_GET_STATUS 0x00 - #define HUB_CLEAR_FEATURE 0x01 - #define HUB_GET_STATE 0x02 - #define HUB_SET_FEATURE 0x03 - #define HUB_GET_DESCRIPTOR 0x06 - #define HUB_SET_DESCRIPTOR 0x07 -#endif - -/* USB HID class request code */ -#ifndef HID_GET_REPORT - #define HID_GET_REPORT 0x01 - #define HID_GET_IDLE 0x02 - #define HID_GET_PROTOCOL 0x03 - #define HID_SET_REPORT 0x09 - #define HID_SET_IDLE 0x0A - #define HID_SET_PROTOCOL 0x0B -#endif - -/* Bit define for USB request type */ -#ifndef USB_REQ_TYP_MASK - #define USB_REQ_TYP_IN 0x80 /* control IN, device to host */ - #define USB_REQ_TYP_OUT 0x00 /* control OUT, host to device */ - #define USB_REQ_TYP_READ 0x80 /* control read, device to host */ - #define USB_REQ_TYP_WRITE 0x00 /* control write, host to device */ - #define USB_REQ_TYP_MASK 0x60 /* bit mask of request type */ - #define USB_REQ_TYP_STANDARD 0x00 - #define USB_REQ_TYP_CLASS 0x20 - #define USB_REQ_TYP_VENDOR 0x40 - #define USB_REQ_TYP_RESERVED 0x60 - #define USB_REQ_RECIP_MASK 0x1F /* bit mask of request recipient */ - #define USB_REQ_RECIP_DEVICE 0x00 - #define USB_REQ_RECIP_INTERF 0x01 - #define USB_REQ_RECIP_ENDP 0x02 - #define USB_REQ_RECIP_OTHER 0x03 -#endif - -/* USB request type for hub class request */ -#ifndef HUB_GET_HUB_DESCRIPTOR - #define HUB_CLEAR_HUB_FEATURE 0x20 - #define HUB_CLEAR_PORT_FEATURE 0x23 - #define HUB_GET_BUS_STATE 0xA3 - #define HUB_GET_HUB_DESCRIPTOR 0xA0 - #define HUB_GET_HUB_STATUS 0xA0 - #define HUB_GET_PORT_STATUS 0xA3 - #define HUB_SET_HUB_DESCRIPTOR 0x20 - #define HUB_SET_HUB_FEATURE 0x20 - #define HUB_SET_PORT_FEATURE 0x23 -#endif - -/* Hub class feature selectors */ -#ifndef HUB_PORT_RESET - #define HUB_C_HUB_LOCAL_POWER 0 - #define HUB_C_HUB_OVER_CURRENT 1 - #define HUB_PORT_CONNECTION 0 - #define HUB_PORT_ENABLE 1 - #define HUB_PORT_SUSPEND 2 - #define HUB_PORT_OVER_CURRENT 3 - #define HUB_PORT_RESET 4 - #define HUB_PORT_POWER 8 - #define HUB_PORT_LOW_SPEED 9 - #define HUB_C_PORT_CONNECTION 16 - #define HUB_C_PORT_ENABLE 17 - #define HUB_C_PORT_SUSPEND 18 - #define HUB_C_PORT_OVER_CURRENT 19 - #define HUB_C_PORT_RESET 20 -#endif - -/* USB descriptor type */ -#ifndef USB_DESCR_TYP_DEVICE - #define USB_DESCR_TYP_DEVICE 0x01 - #define USB_DESCR_TYP_CONFIG 0x02 - #define USB_DESCR_TYP_STRING 0x03 - #define USB_DESCR_TYP_INTERF 0x04 - #define USB_DESCR_TYP_ENDP 0x05 - #define USB_DESCR_TYP_QUALIF 0x06 - #define USB_DESCR_TYP_SPEED 0x07 - #define USB_DESCR_TYP_OTG 0x09 - #define USB_DESCR_TYP_HID 0x21 - #define USB_DESCR_TYP_REPORT 0x22 - #define USB_DESCR_TYP_PHYSIC 0x23 - #define USB_DESCR_TYP_CS_INTF 0x24 - #define USB_DESCR_TYP_CS_ENDP 0x25 - #define USB_DESCR_TYP_HUB 0x29 -#endif - -/* USB device class */ -#ifndef USB_DEV_CLASS_HUB - #define USB_DEV_CLASS_RESERVED 0x00 - #define USB_DEV_CLASS_AUDIO 0x01 - #define USB_DEV_CLASS_COMMUNIC 0x02 - #define USB_DEV_CLASS_HID 0x03 - #define USB_DEV_CLASS_MONITOR 0x04 - #define USB_DEV_CLASS_PHYSIC_IF 0x05 - #define USB_DEV_CLASS_POWER 0x06 - #define USB_DEV_CLASS_PRINTER 0x07 - #define USB_DEV_CLASS_STORAGE 0x08 - #define USB_DEV_CLASS_HUB 0x09 - #define USB_DEV_CLASS_VEN_SPEC 0xFF -#endif - -/* USB endpoint type and attributes */ -#ifndef USB_ENDP_TYPE_MASK - #define USB_ENDP_DIR_MASK 0x80 - #define USB_ENDP_ADDR_MASK 0x0F - #define USB_ENDP_TYPE_MASK 0x03 - #define USB_ENDP_TYPE_CTRL 0x00 - #define USB_ENDP_TYPE_ISOCH 0x01 - #define USB_ENDP_TYPE_BULK 0x02 - #define USB_ENDP_TYPE_INTER 0x03 -#endif - -#ifndef USB_DEVICE_ADDR - #define USB_DEVICE_ADDR 0x02 -#endif -#ifndef DEFAULT_ENDP0_SIZE - #define DEFAULT_ENDP0_SIZE 8 /* default maximum packet size for endpoint 0 */ -#endif -#ifndef MAX_PACKET_SIZE - #define MAX_PACKET_SIZE 64 /* maximum packet size */ -#endif -#ifndef USB_BO_CBW_SIZE - #define USB_BO_CBW_SIZE 0x1F - #define USB_BO_CSW_SIZE 0x0D -#endif -#ifndef USB_BO_CBW_SIG0 - #define USB_BO_CBW_SIG0 0x55 - #define USB_BO_CBW_SIG1 0x53 - #define USB_BO_CBW_SIG2 0x42 - #define USB_BO_CBW_SIG3 0x43 - #define USB_BO_CSW_SIG0 0x55 - #define USB_BO_CSW_SIG1 0x53 - #define USB_BO_CSW_SIG2 0x42 - #define USB_BO_CSW_SIG3 0x53 -#endif - -#ifndef __PACKED - #define __PACKED __attribute__((packed)) -#endif - -typedef struct __PACKED _USB_SETUP_REQ -{ - UINT8 bRequestType; - UINT8 bRequest; - UINT16 wValue; - UINT16 wIndex; - UINT16 wLength; -} USB_SETUP_REQ, *PUSB_SETUP_REQ; - -typedef struct __PACKED _USB_DEVICE_DESCR -{ - UINT8 bLength; - UINT8 bDescriptorType; - UINT16 bcdUSB; - UINT8 bDeviceClass; - UINT8 bDeviceSubClass; - UINT8 bDeviceProtocol; - UINT8 bMaxPacketSize0; - UINT16 idVendor; - UINT16 idProduct; - UINT16 bcdDevice; - UINT8 iManufacturer; - UINT8 iProduct; - UINT8 iSerialNumber; - UINT8 bNumConfigurations; -} USB_DEV_DESCR, *PUSB_DEV_DESCR; - -typedef struct __PACKED _USB_CONFIG_DESCR -{ - UINT8 bLength; - UINT8 bDescriptorType; - UINT16 wTotalLength; - UINT8 bNumInterfaces; - UINT8 bConfigurationValue; - UINT8 iConfiguration; - UINT8 bmAttributes; - UINT8 MaxPower; -} USB_CFG_DESCR, *PUSB_CFG_DESCR; - -typedef struct __PACKED _USB_INTERF_DESCR -{ - UINT8 bLength; - UINT8 bDescriptorType; - UINT8 bInterfaceNumber; - UINT8 bAlternateSetting; - UINT8 bNumEndpoints; - UINT8 bInterfaceClass; - UINT8 bInterfaceSubClass; - UINT8 bInterfaceProtocol; - UINT8 iInterface; -} USB_ITF_DESCR, *PUSB_ITF_DESCR; - -typedef struct __PACKED _USB_ENDPOINT_DESCR -{ - UINT8 bLength; - UINT8 bDescriptorType; - UINT8 bEndpointAddress; - UINT8 bmAttributes; - UINT16 wMaxPacketSize; - UINT8 bInterval; -} USB_ENDP_DESCR, *PUSB_ENDP_DESCR; - -typedef struct __PACKED _USB_CONFIG_DESCR_LONG -{ - USB_CFG_DESCR cfg_descr; - USB_ITF_DESCR itf_descr; - USB_ENDP_DESCR endp_descr[1]; -} USB_CFG_DESCR_LONG, *PUSB_CFG_DESCR_LONG; - -typedef struct __PACKED _USB_HUB_DESCR -{ - UINT8 bDescLength; - UINT8 bDescriptorType; - UINT8 bNbrPorts; - UINT8 wHubCharacteristicsL; - UINT8 wHubCharacteristicsH; - UINT8 bPwrOn2PwrGood; - UINT8 bHubContrCurrent; - UINT8 DeviceRemovable; - UINT8 PortPwrCtrlMask; -} USB_HUB_DESCR, *PUSB_HUB_DESCR; - -typedef struct __PACKED _USB_HID_DESCR -{ - UINT8 bLength; - UINT8 bDescriptorType; - UINT16 bcdHID; - UINT8 bCountryCode; - UINT8 bNumDescriptors; - UINT8 bDescriptorTypeX; - UINT8 wDescriptorLengthL; - UINT8 wDescriptorLengthH; -} USB_HID_DESCR, *PUSB_HID_DESCR; - -typedef struct __PACKED _UDISK_BOC_CBW -{ /* command of BulkOnly USB-FlashDisk */ - UINT32 mCBW_Sig; - UINT32 mCBW_Tag; - UINT32 mCBW_DataLen; /* uppest byte of data length, always is 0 */ - UINT8 mCBW_Flag; /* transfer direction and etc. */ - UINT8 mCBW_LUN; - UINT8 mCBW_CB_Len; /* length of command block */ - UINT8 mCBW_CB_Buf[16]; /* command block buffer */ -} UDISK_BOC_CBW, *PXUDISK_BOC_CBW; - -typedef struct __PACKED _UDISK_BOC_CSW -{ /* status of BulkOnly USB-FlashDisk */ - UINT32 mCBW_Sig; - UINT32 mCBW_Tag; - UINT32 mCSW_Residue; /* return: remainder bytes */ /* uppest byte of remainder length, always is 0 */ - UINT8 mCSW_Status; /* return: result status */ -} UDISK_BOC_CSW, *PXUDISK_BOC_CSW; - -extern PUINT8 pEP0_RAM_Addr; //ep0(64) -extern PUINT8 pEP1_RAM_Addr; //ep1_out(64)+ep1_in(64) -extern PUINT8 pEP2_RAM_Addr; //ep2_out(64)+ep2_in(64) -extern PUINT8 pEP3_RAM_Addr; //ep3_out(64)+ep3_in(64) -extern PUINT8 pEP4_RAM_Addr; //ep4_out(64)+ep4_in(64) -extern PUINT8 pEP5_RAM_Addr; //ep5_out(64)+ep5_in(64) -extern PUINT8 pEP6_RAM_Addr; //ep6_out(64)+ep6_in(64) -extern PUINT8 pEP7_RAM_Addr; //ep7_out(64)+ep7_in(64) - -#define pSetupReqPak ((PUSB_SETUP_REQ)pEP0_RAM_Addr) -#define pEP0_DataBuf (pEP0_RAM_Addr) -#define pEP1_OUT_DataBuf (pEP1_RAM_Addr) -#define pEP1_IN_DataBuf (pEP1_RAM_Addr + 64) -#define pEP2_OUT_DataBuf (pEP2_RAM_Addr) -#define pEP2_IN_DataBuf (pEP2_RAM_Addr + 64) -#define pEP3_OUT_DataBuf (pEP3_RAM_Addr) -#define pEP3_IN_DataBuf (pEP3_RAM_Addr + 64) -#define pEP4_OUT_DataBuf (pEP4_RAM_Addr) -#define pEP4_IN_DataBuf (pEP4_RAM_Addr + 64) -#define pEP5_OUT_DataBuf (pEP5_RAM_Addr) -#define pEP5_IN_DataBuf (pEP5_RAM_Addr + 64) -#define pEP6_OUT_DataBuf (pEP6_RAM_Addr) -#define pEP6_IN_DataBuf (pEP6_RAM_Addr + 64) -#define pEP7_OUT_DataBuf (pEP7_RAM_Addr) -#define pEP7_IN_DataBuf (pEP7_RAM_Addr + 64) - -void USB_DeviceInit(void); -void USB_DevTransProcess(void); - -void DevEP1_OUT_Deal(UINT8 l); -void DevEP2_OUT_Deal(UINT8 l); -void DevEP3_OUT_Deal(UINT8 l); -void DevEP4_OUT_Deal(UINT8 l); -void DevEP5_OUT_Deal(UINT8 l); -void DevEP6_OUT_Deal(UINT8 l); -void DevEP7_OUT_Deal(UINT8 l); - -void DevEP1_IN_Deal(UINT8 l); -void DevEP2_IN_Deal(UINT8 l); -void DevEP3_IN_Deal(UINT8 l); -void DevEP4_IN_Deal(UINT8 l); -void DevEP5_IN_Deal(UINT8 l); -void DevEP6_IN_Deal(UINT8 l); -void DevEP7_IN_Deal(UINT8 l); - -#define EP1_GetINSta() (R8_UEP1_CTRL & UEP_T_RES_NAK) -#define EP2_GetINSta() (R8_UEP2_CTRL & UEP_T_RES_NAK) -#define EP3_GetINSta() (R8_UEP3_CTRL & UEP_T_RES_NAK) -#define EP4_GetINSta() (R8_UEP4_CTRL & UEP_T_RES_NAK) -#define EP5_GetINSta() (R8_UEP5_CTRL & UEP_T_RES_NAK) -#define EP6_GetINSta() (R8_UEP6_CTRL & UEP_T_RES_NAK) -#define EP7_GetINSta() (R8_UEP7_CTRL & UEP_T_RES_NAK) - -#ifdef __cplusplus -} -#endif - -#endif // __USB_TYPE__ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usb_host.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usb_host.h deleted file mode 100644 index 79e9b50..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_usb_host.h +++ /dev/null @@ -1,96 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_usb_host.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the USB - * Host firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_USBHOST_H -#define __CH32V10x_USBHOST_H - -#include "ch32v10x_usb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define ERR_SUCCESS 0x00 -#define ERR_USB_CONNECT 0x15 -#define ERR_USB_DISCON 0x16 -#define ERR_USB_BUF_OVER 0x17 -#define ERR_USB_DISK_ERR 0x1F -#define ERR_USB_TRANSFER 0x20 -#define ERR_USB_UNSUPPORT 0xFB -#define ERR_USB_UNKNOWN 0xFE -#define ERR_AOA_PROTOCOL 0x41 - -#define ROOT_DEV_DISCONNECT 0 -#define ROOT_DEV_CONNECTED 1 -#define ROOT_DEV_FAILED 2 -#define ROOT_DEV_SUCCESS 3 -#define DEV_TYPE_KEYBOARD (USB_DEV_CLASS_HID | 0x20) -#define DEV_TYPE_MOUSE (USB_DEV_CLASS_HID | 0x30) -#define DEF_AOA_DEVICE 0xF0 -#define DEV_TYPE_UNKNOW 0xFF - -#define HUB_MAX_PORTS 4 -#define WAIT_USB_TOUT_200US 3000 - -typedef struct -{ - UINT8 DeviceStatus; - UINT8 DeviceAddress; - UINT8 DeviceSpeed; - UINT8 DeviceType; - UINT16 DeviceVID; - UINT16 DevicePID; - UINT8 GpVar[4]; - UINT8 GpHUBPortNum; -} _RootHubDev; - -extern _RootHubDev ThisUsbDev; -extern UINT8 UsbDevEndp0Size; -extern UINT8 FoundNewDev; - -extern PUINT8 pHOST_RX_RAM_Addr; -extern PUINT8 pHOST_TX_RAM_Addr; -#define pSetupReq ((PUSB_SETUP_REQ)pHOST_TX_RAM_Addr) - -extern const UINT8 SetupGetDevDescr[]; -extern const UINT8 SetupGetCfgDescr[]; -extern const UINT8 SetupSetUsbAddr[]; -extern const UINT8 SetupSetUsbConfig[]; -extern const UINT8 SetupSetUsbInterface[]; -extern const UINT8 SetupClrEndpStall[]; - -void DisableRootHubPort(void); -UINT8 AnalyzeRootHub(void); -void SetHostUsbAddr(UINT8 addr); -void SetUsbSpeed(UINT8 FullSpeed); -void ResetRootHubPort(void); -UINT8 EnableRootHubPort(void); -void SelectHubPort(UINT8 HubPortIndex); -UINT8 WaitUSB_Interrupt(void); -UINT8 USBHostTransact(UINT8 endp_pid, UINT8 tog, UINT32 timeout); -UINT8 HostCtrlTransfer(PUINT8 DataBuf, PUINT8 RetLen); -void CopySetupReqPkg(const UINT8 *pReqPkt); -UINT8 CtrlGetDeviceDescr(PUINT8 DataBuf); -UINT8 CtrlGetConfigDescr(PUINT8 DataBuf); -UINT8 CtrlSetUsbAddress(UINT8 addr); -UINT8 CtrlSetUsbConfig(UINT8 cfg); -UINT8 CtrlClearEndpStall(UINT8 endp); -UINT8 CtrlSetUsbIntercace(UINT8 cfg); - -void USB_HostInit(void); -UINT8 InitRootDevice(PUINT8 DataBuf); -UINT8 HubGetPortStatus(UINT8 HubPortIndex); // ѯHUB˿״̬,TxBuffer -UINT8 HubSetPortFeature(UINT8 HubPortIndex, UINT8 FeatureSelt); // HUB˿ -UINT8 HubClearPortFeature(UINT8 HubPortIndex, UINT8 FeatureSelt); // HUB˿ -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_USBHOST_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_wwdg.h b/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_wwdg.h deleted file mode 100644 index a6e2695..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/inc/ch32v10x_wwdg.h +++ /dev/null @@ -1,39 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_wwdg.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains all the functions prototypes for the WWDG - * firmware library. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_WWDG_H -#define __CH32V10x_WWDG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ch32v10x.h" - -/* WWDG_Prescaler */ -#define WWDG_Prescaler_1 ((uint32_t)0x00000000) -#define WWDG_Prescaler_2 ((uint32_t)0x00000080) -#define WWDG_Prescaler_4 ((uint32_t)0x00000100) -#define WWDG_Prescaler_8 ((uint32_t)0x00000180) - -void WWDG_DeInit(void); -void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); -void WWDG_SetWindowValue(uint8_t WindowValue); -void WWDG_EnableIT(void); -void WWDG_SetCounter(uint8_t Counter); -void WWDG_Enable(uint8_t Counter); -FlagStatus WWDG_GetFlagStatus(void); -void WWDG_ClearFlag(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __CH32V10x_WWDG_H */ diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_adc.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_adc.c deleted file mode 100644 index b5d2998..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_adc.c +++ /dev/null @@ -1,1145 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_adc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the ADC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_adc.h" -#include "ch32v10x_rcc.h" - -/* ADC DISCNUM mask */ -#define CTLR1_DISCNUM_Reset ((uint32_t)0xFFFF1FFF) - -/* ADC DISCEN mask */ -#define CTLR1_DISCEN_Set ((uint32_t)0x00000800) -#define CTLR1_DISCEN_Reset ((uint32_t)0xFFFFF7FF) - -/* ADC JAUTO mask */ -#define CTLR1_JAUTO_Set ((uint32_t)0x00000400) -#define CTLR1_JAUTO_Reset ((uint32_t)0xFFFFFBFF) - -/* ADC JDISCEN mask */ -#define CTLR1_JDISCEN_Set ((uint32_t)0x00001000) -#define CTLR1_JDISCEN_Reset ((uint32_t)0xFFFFEFFF) - -/* ADC AWDCH mask */ -#define CTLR1_AWDCH_Reset ((uint32_t)0xFFFFFFE0) - -/* ADC Analog watchdog enable mode mask */ -#define CTLR1_AWDMode_Reset ((uint32_t)0xFF3FFDFF) - -/* CTLR1 register Mask */ -#define CTLR1_CLEAR_Mask ((uint32_t)0xFFF0FEFF) - -/* ADC ADON mask */ -#define CTLR2_ADON_Set ((uint32_t)0x00000001) -#define CTLR2_ADON_Reset ((uint32_t)0xFFFFFFFE) - -/* ADC DMA mask */ -#define CTLR2_DMA_Set ((uint32_t)0x00000100) -#define CTLR2_DMA_Reset ((uint32_t)0xFFFFFEFF) - -/* ADC RSTCAL mask */ -#define CTLR2_RSTCAL_Set ((uint32_t)0x00000008) - -/* ADC CAL mask */ -#define CTLR2_CAL_Set ((uint32_t)0x00000004) - -/* ADC SWSTART mask */ -#define CTLR2_SWSTART_Set ((uint32_t)0x00400000) - -/* ADC EXTTRIG mask */ -#define CTLR2_EXTTRIG_Set ((uint32_t)0x00100000) -#define CTLR2_EXTTRIG_Reset ((uint32_t)0xFFEFFFFF) - -/* ADC Software start mask */ -#define CTLR2_EXTTRIG_SWSTART_Set ((uint32_t)0x00500000) -#define CTLR2_EXTTRIG_SWSTART_Reset ((uint32_t)0xFFAFFFFF) - -/* ADC JEXTSEL mask */ -#define CTLR2_JEXTSEL_Reset ((uint32_t)0xFFFF8FFF) - -/* ADC JEXTTRIG mask */ -#define CTLR2_JEXTTRIG_Set ((uint32_t)0x00008000) -#define CTLR2_JEXTTRIG_Reset ((uint32_t)0xFFFF7FFF) - -/* ADC JSWSTART mask */ -#define CTLR2_JSWSTART_Set ((uint32_t)0x00200000) - -/* ADC injected software start mask */ -#define CTLR2_JEXTTRIG_JSWSTART_Set ((uint32_t)0x00208000) -#define CTLR2_JEXTTRIG_JSWSTART_Reset ((uint32_t)0xFFDF7FFF) - -/* ADC TSPD mask */ -#define CTLR2_TSVREFE_Set ((uint32_t)0x00800000) -#define CTLR2_TSVREFE_Reset ((uint32_t)0xFF7FFFFF) - -/* CTLR2 register Mask */ -#define CTLR2_CLEAR_Mask ((uint32_t)0xFFF1F7FD) - -/* ADC SQx mask */ -#define RSQR3_SQ_Set ((uint32_t)0x0000001F) -#define RSQR2_SQ_Set ((uint32_t)0x0000001F) -#define RSQR1_SQ_Set ((uint32_t)0x0000001F) - -/* RSQR1 register Mask */ -#define RSQR1_CLEAR_Mask ((uint32_t)0xFF0FFFFF) - -/* ADC JSQx mask */ -#define ISQR_JSQ_Set ((uint32_t)0x0000001F) - -/* ADC JL mask */ -#define ISQR_JL_Set ((uint32_t)0x00300000) -#define ISQR_JL_Reset ((uint32_t)0xFFCFFFFF) - -/* ADC SMPx mask */ -#define SAMPTR1_SMP_Set ((uint32_t)0x00000007) -#define SAMPTR2_SMP_Set ((uint32_t)0x00000007) - -/* ADC IDATARx registers offset */ -#define IDATAR_Offset ((uint8_t)0x28) - -/* ADC1 RDATAR register base address */ -#define RDATAR_ADDRESS ((uint32_t)0x4001244C) - -/********************************************************************* - * @fn ADC_DeInit - * - * @brief Deinitializes the ADCx peripheral registers to their default - * reset values. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return none - */ -void ADC_DeInit(ADC_TypeDef *ADCx) -{ - if(ADCx == ADC1) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, DISABLE); - } -} - -/********************************************************************* - * @fn ADC_Init - * - * @brief Initializes the ADCx peripheral according to the specified - * parameters in the ADC_InitStruct. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_InitStruct - pointer to an ADC_InitTypeDef structure that - * contains the configuration information for the specified ADC - * peripheral. - * - * @return none - */ -void ADC_Init(ADC_TypeDef *ADCx, ADC_InitTypeDef *ADC_InitStruct) -{ - uint32_t tmpreg1 = 0; - uint8_t tmpreg2 = 0; - - tmpreg1 = ADCx->CTLR1; - tmpreg1 &= CTLR1_CLEAR_Mask; - tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_Mode | ((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8)); - ADCx->CTLR1 = tmpreg1; - - tmpreg1 = ADCx->CTLR2; - tmpreg1 &= CTLR2_CLEAR_Mask; - tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv | - ((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1)); - ADCx->CTLR2 = tmpreg1; - - tmpreg1 = ADCx->RSQR1; - tmpreg1 &= RSQR1_CLEAR_Mask; - tmpreg2 |= (uint8_t)(ADC_InitStruct->ADC_NbrOfChannel - (uint8_t)1); - tmpreg1 |= (uint32_t)tmpreg2 << 20; - ADCx->RSQR1 = tmpreg1; -} - -/********************************************************************* - * @fn ADC_StructInit - * - * @brief Fills each ADC_InitStruct member with its default value. - * - * @param ADC_InitStruct - pointer to an ADC_InitTypeDef structure that - * contains the configuration information for the specified ADC - * peripheral. - * - * @return none - */ -void ADC_StructInit(ADC_InitTypeDef *ADC_InitStruct) -{ - ADC_InitStruct->ADC_Mode = ADC_Mode_Independent; - ADC_InitStruct->ADC_ScanConvMode = DISABLE; - ADC_InitStruct->ADC_ContinuousConvMode = DISABLE; - ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; - ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right; - ADC_InitStruct->ADC_NbrOfChannel = 1; -} - -/********************************************************************* - * @fn ADC_Cmd - * - * @brief Enables or disables the specified ADC peripheral. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void ADC_Cmd(ADC_TypeDef *ADCx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADCx->CTLR2 |= CTLR2_ADON_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_ADON_Reset; - } -} - -/********************************************************************* - * @fn ADC_DMACmd - * - * @brief Enables or disables the specified ADC DMA request. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void ADC_DMACmd(ADC_TypeDef *ADCx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADCx->CTLR2 |= CTLR2_DMA_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_DMA_Reset; - } -} - -/********************************************************************* - * @fn ADC_ITConfig - * - * @brief Enables or disables the specified ADC interrupts. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_IT - specifies the ADC interrupt sources to be enabled or disabled. - * ADC_IT_EOC - End of conversion interrupt mask. - * ADC_IT_AWD - Analog watchdog interrupt mask. - * ADC_IT_JEOC - End of injected conversion interrupt mask. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void ADC_ITConfig(ADC_TypeDef *ADCx, uint16_t ADC_IT, FunctionalState NewState) -{ - uint8_t itmask = 0; - - itmask = (uint8_t)ADC_IT; - - if(NewState != DISABLE) - { - ADCx->CTLR1 |= itmask; - } - else - { - ADCx->CTLR1 &= (~(uint32_t)itmask); - } -} - -/********************************************************************* - * @fn ADC_ResetCalibration - * - * @brief Resets the selected ADC calibration registers. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return none - */ -void ADC_ResetCalibration(ADC_TypeDef *ADCx) -{ - ADCx->CTLR2 |= CTLR2_RSTCAL_Set; -} - -/********************************************************************* - * @fn ADC_GetResetCalibrationStatus - * - * @brief Gets the selected ADC reset calibration registers status. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef *ADCx) -{ - FlagStatus bitstatus = RESET; - - if((ADCx->CTLR2 & CTLR2_RSTCAL_Set) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_StartCalibration - * - * @brief Starts the selected ADC calibration process. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return None - */ -void ADC_StartCalibration(ADC_TypeDef *ADCx) -{ - ADCx->CTLR2 |= CTLR2_CAL_Set; -} - -/********************************************************************* - * @fn ADC_GetCalibrationStatus - * - * @brief Gets the selected ADC calibration status. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef *ADCx) -{ - FlagStatus bitstatus = RESET; - - if((ADCx->CTLR2 & CTLR2_CAL_Set) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_SoftwareStartConvCmd - * - * @brief Enables or disables the selected ADC software start conversion. - * - * @param ADCx - where x can be 1 or 2 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_SoftwareStartConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADCx->CTLR2 |= CTLR2_EXTTRIG_SWSTART_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_EXTTRIG_SWSTART_Reset; - } -} - -/********************************************************************* - * @fn ADC_GetSoftwareStartConvStatus - * - * @brief Gets the selected ADC Software start conversion Status. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return FlagStatus - SET or RESET. - */ -FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef *ADCx) -{ - FlagStatus bitstatus = RESET; - - if((ADCx->CTLR2 & CTLR2_SWSTART_Set) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_DiscModeChannelCountConfig - * - * @brief Configures the discontinuous mode for the selected ADC regular - * group channel. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * Number - specifies the discontinuous mode regular channel - * count value(1-8). - * - * @return None - */ -void ADC_DiscModeChannelCountConfig(ADC_TypeDef *ADCx, uint8_t Number) -{ - uint32_t tmpreg1 = 0; - uint32_t tmpreg2 = 0; - - tmpreg1 = ADCx->CTLR1; - tmpreg1 &= CTLR1_DISCNUM_Reset; - tmpreg2 = Number - 1; - tmpreg1 |= tmpreg2 << 13; - ADCx->CTLR1 = tmpreg1; -} - -/********************************************************************* - * @fn ADC_DiscModeCmd - * - * @brief Enables or disables the discontinuous mode on regular group - * channel for the specified ADC. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_DiscModeCmd(ADC_TypeDef *ADCx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADCx->CTLR1 |= CTLR1_DISCEN_Set; - } - else - { - ADCx->CTLR1 &= CTLR1_DISCEN_Reset; - } -} - -/********************************************************************* - * @fn ADC_RegularChannelConfig - * - * @brief Configures for the selected ADC regular channel its corresponding - * rank in the sequencer and its sample time. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_Channel - the ADC channel to configure. - * ADC_Channel_0 - ADC Channel0 selected. - * ADC_Channel_1 - ADC Channel1 selected. - * ADC_Channel_2 - ADC Channel2 selected. - * ADC_Channel_3 - ADC Channel3 selected. - * ADC_Channel_4 - ADC Channel4 selected. - * ADC_Channel_5 - ADC Channel5 selected. - * ADC_Channel_6 - ADC Channel6 selected. - * ADC_Channel_7 - ADC Channel7 selected. - * ADC_Channel_8 - ADC Channel8 selected. - * ADC_Channel_9 - ADC Channel9 selected. - * ADC_Channel_10 - ADC Channel10 selected. - * ADC_Channel_11 - ADC Channel11 selected. - * ADC_Channel_12 - ADC Channel12 selected. - * ADC_Channel_13 - ADC Channel13 selected. - * ADC_Channel_14 - ADC Channel14 selected. - * ADC_Channel_15 - ADC Channel15 selected. - * ADC_Channel_16 - ADC Channel16 selected. - * ADC_Channel_17 - ADC Channel17 selected. - * Rank - The rank in the regular group sequencer. - * This parameter must be between 1 to 16. - * ADC_SampleTime - The sample time value to be set for the selected channel. - * ADC_SampleTime_1Cycles5 - Sample time equal to 1.5 cycles. - * ADC_SampleTime_7Cycles5 - Sample time equal to 7.5 cycles. - * ADC_SampleTime_13Cycles5 - Sample time equal to 13.5 cycles. - * ADC_SampleTime_28Cycles5 - Sample time equal to 28.5 cycles. - * ADC_SampleTime_41Cycles5 - Sample time equal to 41.5 cycles. - * ADC_SampleTime_55Cycles5 - Sample time equal to 55.5 cycles. - * ADC_SampleTime_71Cycles5 - Sample time equal to 71.5 cycles. - * ADC_SampleTime_239Cycles5 - Sample time equal to 239.5 cycles. - * - * @return None - */ -void ADC_RegularChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) -{ - uint32_t tmpreg1 = 0, tmpreg2 = 0; - - if(ADC_Channel > ADC_Channel_9) - { - tmpreg1 = ADCx->SAMPTR1; - tmpreg2 = SAMPTR1_SMP_Set << (3 * (ADC_Channel - 10)); - tmpreg1 &= ~tmpreg2; - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10)); - tmpreg1 |= tmpreg2; - ADCx->SAMPTR1 = tmpreg1; - } - else - { - tmpreg1 = ADCx->SAMPTR2; - tmpreg2 = SAMPTR2_SMP_Set << (3 * ADC_Channel); - tmpreg1 &= ~tmpreg2; - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); - tmpreg1 |= tmpreg2; - ADCx->SAMPTR2 = tmpreg1; - } - - if(Rank < 7) - { - tmpreg1 = ADCx->RSQR3; - tmpreg2 = RSQR3_SQ_Set << (5 * (Rank - 1)); - tmpreg1 &= ~tmpreg2; - tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1)); - tmpreg1 |= tmpreg2; - ADCx->RSQR3 = tmpreg1; - } - else if(Rank < 13) - { - tmpreg1 = ADCx->RSQR2; - tmpreg2 = RSQR2_SQ_Set << (5 * (Rank - 7)); - tmpreg1 &= ~tmpreg2; - tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 7)); - tmpreg1 |= tmpreg2; - ADCx->RSQR2 = tmpreg1; - } - else - { - tmpreg1 = ADCx->RSQR1; - tmpreg2 = RSQR1_SQ_Set << (5 * (Rank - 13)); - tmpreg1 &= ~tmpreg2; - tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 13)); - tmpreg1 |= tmpreg2; - ADCx->RSQR1 = tmpreg1; - } -} - -/********************************************************************* - * @fn ADC_ExternalTrigConvCmd - * - * @brief Enables or disables the ADCx conversion through external trigger. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_ExternalTrigConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADCx->CTLR2 |= CTLR2_EXTTRIG_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_EXTTRIG_Reset; - } -} - -/********************************************************************* - * @fn ADC_GetConversionValue - * - * @brief Returns the last ADCx conversion result data for regular channel. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return ADCx->RDATAR - The Data conversion value. - */ -uint16_t ADC_GetConversionValue(ADC_TypeDef *ADCx) -{ - return (uint16_t)ADCx->RDATAR; -} - -/********************************************************************* - * @fn ADC_GetDualModeConversionValue - * - * @brief Returns the last ADC1 and ADC2 conversion result data in dual mode. - * - * @return RDATAR_ADDRESS - The Data conversion value. - */ -uint32_t ADC_GetDualModeConversionValue(void) -{ - return (*(__IO uint32_t *)RDATAR_ADDRESS); -} - -/********************************************************************* - * @fn ADC_AutoInjectedConvCmd - * - * @brief Enables or disables the selected ADC automatic injected group - * conversion after regular one. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_AutoInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADCx->CTLR1 |= CTLR1_JAUTO_Set; - } - else - { - ADCx->CTLR1 &= CTLR1_JAUTO_Reset; - } -} - -/********************************************************************* - * @fn ADC_InjectedDiscModeCmd - * - * @brief Enables or disables the discontinuous mode for injected group - * channel for the specified ADC. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_InjectedDiscModeCmd(ADC_TypeDef *ADCx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADCx->CTLR1 |= CTLR1_JDISCEN_Set; - } - else - { - ADCx->CTLR1 &= CTLR1_JDISCEN_Reset; - } -} - -/********************************************************************* - * @fn ADC_ExternalTrigInjectedConvConfig - * - * @brief Configures the ADCx external trigger for injected channels conversion. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_ExternalTrigInjecConv - specifies the ADC trigger to start - * injected conversion. - * ADC_ExternalTrigInjecConv_T1_TRGO - Timer1 TRGO event selected. - * ADC_ExternalTrigInjecConv_T1_CC4 - Timer1 capture compare4 selected. - * ADC_ExternalTrigInjecConv_T2_TRGO - Timer2 TRGO event selected. - * ADC_ExternalTrigInjecConv_T2_CC1 - Timer2 capture compare1 selected. - * ADC_ExternalTrigInjecConv_T3_CC4 - Timer3 capture compare4 selected. - * ADC_ExternalTrigInjecConv_T4_TRGO - Timer4 TRGO event selected. - * ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4 - External interrupt - * line 15 event selected. - * ADC_ExternalTrigInjecConv_None: Injected conversion started - * by software and not by external trigger. - * - * @return None - */ -void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef *ADCx, uint32_t ADC_ExternalTrigInjecConv) -{ - uint32_t tmpreg = 0; - - tmpreg = ADCx->CTLR2; - tmpreg &= CTLR2_JEXTSEL_Reset; - tmpreg |= ADC_ExternalTrigInjecConv; - ADCx->CTLR2 = tmpreg; -} - -/********************************************************************* - * @fn ADC_ExternalTrigInjectedConvCmd - * - * @brief Enables or disables the ADCx injected channels conversion through - * external trigger. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADCx->CTLR2 |= CTLR2_JEXTTRIG_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_JEXTTRIG_Reset; - } -} - -/********************************************************************* - * @fn ADC_SoftwareStartInjectedConvCmd - * - * @brief Enables or disables the selected ADC start of the injected - * channels conversion. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * NewState - ENABLE or DISABLE. - * - * @return None - */ -void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADCx->CTLR2 |= CTLR2_JEXTTRIG_JSWSTART_Set; - } - else - { - ADCx->CTLR2 &= CTLR2_JEXTTRIG_JSWSTART_Reset; - } -} - -/********************************************************************* - * @fn ADC_GetSoftwareStartInjectedConvCmdStatus - * - * @brief Gets the selected ADC Software start injected conversion Status. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef *ADCx) -{ - FlagStatus bitstatus = RESET; - - if((ADCx->CTLR2 & CTLR2_JSWSTART_Set) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_InjectedChannelConfig - * - * @brief Configures for the selected ADC injected channel its corresponding - * rank in the sequencer and its sample time. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_Channel - the ADC channel to configure. - * ADC_Channel_0 - ADC Channel0 selected. - * ADC_Channel_1 - ADC Channel1 selected. - * ADC_Channel_2 - ADC Channel2 selected. - * ADC_Channel_3 - ADC Channel3 selected. - * ADC_Channel_4 - ADC Channel4 selected. - * ADC_Channel_5 - ADC Channel5 selected. - * ADC_Channel_6 - ADC Channel6 selected. - * ADC_Channel_7 - ADC Channel7 selected. - * ADC_Channel_8 - ADC Channel8 selected. - * ADC_Channel_9 - ADC Channel9 selected. - * ADC_Channel_10 - ADC Channel10 selected. - * ADC_Channel_11 - ADC Channel11 selected. - * ADC_Channel_12 - ADC Channel12 selected. - * ADC_Channel_13 - ADC Channel13 selected. - * ADC_Channel_14 - ADC Channel14 selected. - * ADC_Channel_15 - ADC Channel15 selected. - * ADC_Channel_16 - ADC Channel16 selected. - * ADC_Channel_17 - ADC Channel17 selected. - * Rank - The rank in the regular group sequencer. - * This parameter must be between 1 to 4. - * ADC_SampleTime - The sample time value to be set for the selected channel. - * ADC_SampleTime_1Cycles5 - Sample time equal to 1.5 cycles. - * ADC_SampleTime_7Cycles5 - Sample time equal to 7.5 cycles. - * ADC_SampleTime_13Cycles5 - Sample time equal to 13.5 cycles. - * ADC_SampleTime_28Cycles5 - Sample time equal to 28.5 cycles. - * ADC_SampleTime_41Cycles5 - Sample time equal to 41.5 cycles. - * ADC_SampleTime_55Cycles5 - Sample time equal to 55.5 cycles. - * ADC_SampleTime_71Cycles5 - Sample time equal to 71.5 cycles. - * ADC_SampleTime_239Cycles5 - Sample time equal to 239.5 cycles. - * - * @return None - */ -void ADC_InjectedChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) -{ - uint32_t tmpreg1 = 0, tmpreg2 = 0, tmpreg3 = 0; - - if(ADC_Channel > ADC_Channel_9) - { - tmpreg1 = ADCx->SAMPTR1; - tmpreg2 = SAMPTR1_SMP_Set << (3 * (ADC_Channel - 10)); - tmpreg1 &= ~tmpreg2; - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10)); - tmpreg1 |= tmpreg2; - ADCx->SAMPTR1 = tmpreg1; - } - else - { - tmpreg1 = ADCx->SAMPTR2; - tmpreg2 = SAMPTR2_SMP_Set << (3 * ADC_Channel); - tmpreg1 &= ~tmpreg2; - tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); - tmpreg1 |= tmpreg2; - ADCx->SAMPTR2 = tmpreg1; - } - - tmpreg1 = ADCx->ISQR; - tmpreg3 = (tmpreg1 & ISQR_JL_Set) >> 20; - tmpreg2 = ISQR_JSQ_Set << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1))); - tmpreg1 &= ~tmpreg2; - tmpreg2 = (uint32_t)ADC_Channel << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1))); - tmpreg1 |= tmpreg2; - ADCx->ISQR = tmpreg1; -} - -/********************************************************************* - * @fn ADC_InjectedSequencerLengthConfig - * - * @brief Configures the sequencer length for injected channels. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * Length - The sequencer length. - * This parameter must be a number between 1 to 4. - * - * @return None - */ -void ADC_InjectedSequencerLengthConfig(ADC_TypeDef *ADCx, uint8_t Length) -{ - uint32_t tmpreg1 = 0; - uint32_t tmpreg2 = 0; - - tmpreg1 = ADCx->ISQR; - tmpreg1 &= ISQR_JL_Reset; - tmpreg2 = Length - 1; - tmpreg1 |= tmpreg2 << 20; - ADCx->ISQR = tmpreg1; -} - -/********************************************************************* - * @fn ADC_SetInjectedOffset - * - * @brief Set the injected channels conversion value offset. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_InjectedChannel: the ADC injected channel to set its offset. - * ADC_InjectedChannel_1 - Injected Channel1 selected. - * ADC_InjectedChannel_2 - Injected Channel2 selected. - * ADC_InjectedChannel_3 - Injected Channel3 selected. - * ADC_InjectedChannel_4 - Injected Channel4 selected. - * Offset - the offset value for the selected ADC injected channel. - * This parameter must be a 12bit value. - * - * @return None - */ -void ADC_SetInjectedOffset(ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset) -{ - __IO uint32_t tmp = 0; - - tmp = (uint32_t)ADCx; - tmp += ADC_InjectedChannel; - - *(__IO uint32_t *)tmp = (uint32_t)Offset; -} - -/********************************************************************* - * @fn ADC_GetInjectedConversionValue - * - * @brief Returns the ADC injected channel conversion result. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_InjectedChannel - the ADC injected channel to set its offset. - * ADC_InjectedChannel_1 - Injected Channel1 selected. - * ADC_InjectedChannel_2 - Injected Channel2 selected. - * ADC_InjectedChannel_3 - Injected Channel3 selected. - * ADC_InjectedChannel_4 - Injected Channel4 selected. - * - * @return tmp - The Data conversion value. - */ -uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel) -{ - __IO uint32_t tmp = 0; - - tmp = (uint32_t)ADCx; - tmp += ADC_InjectedChannel + IDATAR_Offset; - - return (uint16_t)(*(__IO uint32_t *)tmp); -} - -/********************************************************************* - * @fn ADC_AnalogWatchdogCmd - * - * @brief Enables or disables the analog watchdog on single/all regular - * or injected channels. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_AnalogWatchdog - the ADC analog watchdog configuration. - * ADC_AnalogWatchdog_SingleRegEnable - Analog watchdog on a - * single regular channel. - * ADC_AnalogWatchdog_SingleInjecEnable - Analog watchdog on a - * single injected channel. - * ADC_AnalogWatchdog_SingleRegOrInjecEnable - Analog watchdog - * on a single regular or injected channel. - * ADC_AnalogWatchdog_AllRegEnable - Analog watchdog on all - * regular channel. - * ADC_AnalogWatchdog_AllInjecEnable - Analog watchdog on all - * injected channel. - * ADC_AnalogWatchdog_AllRegAllInjecEnable - Analog watchdog on - * all regular and injected channels. - * ADC_AnalogWatchdog_None - No channel guarded by the analog - * watchdog. - * - * @return none - */ -void ADC_AnalogWatchdogCmd(ADC_TypeDef *ADCx, uint32_t ADC_AnalogWatchdog) -{ - uint32_t tmpreg = 0; - - tmpreg = ADCx->CTLR1; - tmpreg &= CTLR1_AWDMode_Reset; - tmpreg |= ADC_AnalogWatchdog; - ADCx->CTLR1 = tmpreg; -} - -/********************************************************************* - * @fn ADC_AnalogWatchdogThresholdsConfig - * - * @brief Configures the high and low thresholds of the analog watchdog. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * HighThreshold - the ADC analog watchdog High threshold value. - * This parameter must be a 12bit value. - * LowThreshold - the ADC analog watchdog Low threshold value. - * This parameter must be a 12bit value. - * - * @return none - */ -void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef *ADCx, uint16_t HighThreshold, - uint16_t LowThreshold) -{ - ADCx->WDHTR = HighThreshold; - ADCx->WDLTR = LowThreshold; -} - -/********************************************************************* - * @fn ADC_AnalogWatchdogSingleChannelConfig - * - * @brief Configures the analog watchdog guarded single channel. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_Channel - the ADC channel to configure. - * ADC_Channel_0 - ADC Channel0 selected. - * ADC_Channel_1 - ADC Channel1 selected. - * ADC_Channel_2 - ADC Channel2 selected. - * ADC_Channel_3 - ADC Channel3 selected. - * ADC_Channel_4 - ADC Channel4 selected. - * ADC_Channel_5 - ADC Channel5 selected. - * ADC_Channel_6 - ADC Channel6 selected. - * ADC_Channel_7 - ADC Channel7 selected. - * ADC_Channel_8 - ADC Channel8 selected. - * ADC_Channel_9 - ADC Channel9 selected. - * ADC_Channel_10 - ADC Channel10 selected. - * ADC_Channel_11 - ADC Channel11 selected. - * ADC_Channel_12 - ADC Channel12 selected. - * ADC_Channel_13 - ADC Channel13 selected. - * ADC_Channel_14 - ADC Channel14 selected. - * ADC_Channel_15 - ADC Channel15 selected. - * ADC_Channel_16 - ADC Channel16 selected. - * ADC_Channel_17 - ADC Channel17 selected. - * - * @return None - */ -void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel) -{ - uint32_t tmpreg = 0; - - tmpreg = ADCx->CTLR1; - tmpreg &= CTLR1_AWDCH_Reset; - tmpreg |= ADC_Channel; - ADCx->CTLR1 = tmpreg; -} - -/********************************************************************* - * @fn ADC_TempSensorVrefintCmd - * - * @brief Enables or disables the temperature sensor and Vrefint channel. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void ADC_TempSensorVrefintCmd(FunctionalState NewState) -{ - if(NewState != DISABLE) - { - ADC1->CTLR2 |= CTLR2_TSVREFE_Set; - } - else - { - ADC1->CTLR2 &= CTLR2_TSVREFE_Reset; - } -} - -/********************************************************************* - * @fn ADC_GetFlagStatus - * - * @brief Checks whether the specified ADC flag is set or not. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_FLAG - specifies the flag to check. - * ADC_FLAG_AWD - Analog watchdog flag. - * ADC_FLAG_EOC - End of conversion flag. - * ADC_FLAG_JEOC - End of injected group conversion flag. - * ADC_FLAG_JSTRT - Start of injected group conversion flag. - * ADC_FLAG_STRT - Start of regular group conversion flag. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus ADC_GetFlagStatus(ADC_TypeDef *ADCx, uint8_t ADC_FLAG) -{ - FlagStatus bitstatus = RESET; - - if((ADCx->STATR & ADC_FLAG) != (uint8_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_ClearFlag - * - * @brief Clears the ADCx's pending flags. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_FLAG - specifies the flag to clear. - * ADC_FLAG_AWD - Analog watchdog flag. - * ADC_FLAG_EOC - End of conversion flag. - * ADC_FLAG_JEOC - End of injected group conversion flag. - * ADC_FLAG_JSTRT - Start of injected group conversion flag. - * ADC_FLAG_STRT - Start of regular group conversion flag. - * - * @return none - */ -void ADC_ClearFlag(ADC_TypeDef *ADCx, uint8_t ADC_FLAG) -{ - ADCx->STATR = ~(uint32_t)ADC_FLAG; -} - -/********************************************************************* - * @fn ADC_GetITStatus - * - * @brief Checks whether the specified ADC interrupt has occurred or not. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_IT - specifies the ADC interrupt source to check. - * ADC_IT_EOC - End of conversion interrupt mask. - * ADC_IT_AWD - Analog watchdog interrupt mask. - * ADC_IT_JEOC - End of injected conversion interrupt mask. - * - * @return ITStatus: SET or RESET. - */ -ITStatus ADC_GetITStatus(ADC_TypeDef *ADCx, uint16_t ADC_IT) -{ - ITStatus bitstatus = RESET; - uint32_t itmask = 0, enablestatus = 0; - - itmask = ADC_IT >> 8; - enablestatus = (ADCx->CTLR1 & (uint8_t)ADC_IT); - - if(((ADCx->STATR & itmask) != (uint32_t)RESET) && enablestatus) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn ADC_ClearITPendingBit - * - * @brief Clears the ADCx's interrupt pending bits. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * ADC_IT - specifies the ADC interrupt pending bit to clear. - * ADC_IT_EOC - End of conversion interrupt mask. - * ADC_IT_AWD - Analog watchdog interrupt mask. - * ADC_IT_JEOC - End of injected conversion interrupt mask. - * - * @return none - */ -void ADC_ClearITPendingBit(ADC_TypeDef *ADCx, uint16_t ADC_IT) -{ - uint8_t itmask = 0; - - itmask = (uint8_t)(ADC_IT >> 8); - ADCx->STATR = ~(uint32_t)itmask; -} - -/********************************************************************* - * @fn TempSensor_Volt_To_Temper - * - * @brief Internal Temperature Sensor Voltage to temperature. - * - * @param Value - Voltage Value(mv). - * - * @return Temper - Temperature Value. - */ -s32 TempSensor_Volt_To_Temper(s32 Value) -{ - s32 Temper, Refer_Volt, Refer_Temper; - s32 k = 43; - - Refer_Volt = (s32)((*(u32 *)0x1FFFF898) & 0x0000FFFF); - Refer_Temper = (s32)(((*(u32 *)0x1FFFF898) >> 16) & 0x0000FFFF); - - Temper = Refer_Temper + ((Value - Refer_Volt) * 10 + (k >> 1)) / k; - - return Temper; -} - -/********************************************************************* - * @fn Get_CalibrationValue - * - * @brief Get ADCx Calibration Value. - * - * @param ADCx - where x can be 1 to select the ADC peripheral. - * - * @return CalibrationValue - */ -int16_t Get_CalibrationValue(ADC_TypeDef *ADCx) -{ - __IO uint8_t i, j; - uint16_t buf[10]; - __IO uint16_t t; - - for(i = 0; i < 10; i++){ - ADC_ResetCalibration(ADCx); - while(ADC_GetResetCalibrationStatus(ADCx)); - ADC_StartCalibration(ADCx); - while(ADC_GetCalibrationStatus(ADCx)); - buf[i] = ADCx->RDATAR; - } - - for(i = 0; i < 10; i++){ - for(j = 0; j < 10; j++){ - if(buf[j] > buf[j + 1]){ - t = buf[j]; - buf[j] = buf[j + 1]; - buf[j] = t; - } - } - } - - t = 0; - for(i = 0; i < 6; i++){ - t += buf[i + 2]; - } - - t = (t / 6) + ((t % 6) / 3); - - return (int16_t)(2048 - (int16_t)t); -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_bkp.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_bkp.c deleted file mode 100644 index e438308..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_bkp.c +++ /dev/null @@ -1,248 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_bkp.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the BKP firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_bkp.h" -#include "ch32v10x_rcc.h" - -/* BKP registers bit mask */ - -/* OCTLR register bit mask */ -#define OCTLR_CAL_MASK ((uint16_t)0xFF80) -#define OCTLR_MASK ((uint16_t)0xFC7F) - -/********************************************************************* - * @fn BKP_DeInit - * - * @brief Deinitializes the BKP peripheral registers to their default reset values. - * - * @return none - */ -void BKP_DeInit(void) -{ - RCC_BackupResetCmd(ENABLE); - RCC_BackupResetCmd(DISABLE); -} - -/********************************************************************* - * @fn BKP_TamperPinLevelConfig - * - * @brief Configures the Tamper Pin active level. - * - * @param BKP_TamperPinLevel: specifies the Tamper Pin active level. - * BKP_TamperPinLevel_High - Tamper pin active on high level. - * BKP_TamperPinLevel_Low - Tamper pin active on low level. - * - * @return none - */ -void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel) -{ - if(BKP_TamperPinLevel) - { - BKP->TPCTLR |= (1 << 1); - } - else - { - BKP->TPCTLR &= ~(1 << 1); - } -} - -/********************************************************************* - * @fn BKP_TamperPinCmd - * - * @brief Enables or disables the Tamper Pin activation. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void BKP_TamperPinCmd(FunctionalState NewState) -{ - if(NewState) - { - BKP->TPCTLR |= (1 << 0); - } - else - { - BKP->TPCTLR &= ~(1 << 0); - } -} - -/********************************************************************* - * @fn BKP_ITConfig - * - * @brief Enables or disables the Tamper Pin Interrupt. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void BKP_ITConfig(FunctionalState NewState) -{ - if(NewState) - { - BKP->TPCSR |= (1 << 2); - } - else - { - BKP->TPCSR &= ~(1 << 2); - } -} - -/********************************************************************* - * @fn BKP_RTCOutputConfig - * - * @brief Select the RTC output source to output on the Tamper pin. - * - * @param BKP_RTCOutputSource - specifies the RTC output source. - * BKP_RTCOutputSource_None - no RTC output on the Tamper pin. - * BKP_RTCOutputSource_CalibClock - output the RTC clock with - * frequency divided by 64 on the Tamper pin. - * BKP_RTCOutputSource_Alarm - output the RTC Alarm pulse signal - * on the Tamper pin. - * BKP_RTCOutputSource_Second - output the RTC Second pulse - * signal on the Tamper pin. - * - * @return none - */ -void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource) -{ - uint16_t tmpreg = 0; - - tmpreg = BKP->OCTLR; - tmpreg &= OCTLR_MASK; - tmpreg |= BKP_RTCOutputSource; - BKP->OCTLR = tmpreg; -} - -/********************************************************************* - * @fn BKP_SetRTCCalibrationValue - * - * @brief Sets RTC Clock Calibration value. - * - * @param CalibrationValue - specifies the RTC Clock Calibration value. - * This parameter must be a number between 0 and 0x1F. - * - * @return none - */ -void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue) -{ - uint16_t tmpreg = 0; - - tmpreg = BKP->OCTLR; - tmpreg &= OCTLR_CAL_MASK; - tmpreg |= CalibrationValue; - BKP->OCTLR = tmpreg; -} - -/********************************************************************* - * @fn BKP_WriteBackupRegister - * - * @brief Writes user data to the specified Data Backup Register. - * - * @param BKP_DR - specifies the Data Backup Register. - * Data - data to write. - * - * @return none - */ -void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) -{ - __IO uint32_t tmp = 0; - - tmp = (uint32_t)BKP_BASE; - tmp += BKP_DR; - *(__IO uint32_t *)tmp = Data; -} - -/********************************************************************* - * @fn BKP_ReadBackupRegister - * - * @brief Reads data from the specified Data Backup Register. - * - * @param BKP_DR - specifies the Data Backup Register. - * This parameter can be BKP_DRx where x=[1, 42]. - * - * @return none - */ -uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR) -{ - __IO uint32_t tmp = 0; - - tmp = (uint32_t)BKP_BASE; - tmp += BKP_DR; - - return (*(__IO uint16_t *)tmp); -} - -/********************************************************************* - * @fn BKP_GetFlagStatus - * - * @brief Checks whether the Tamper Pin Event flag is set or not. - * - * @return FlagStatus - SET or RESET. - */ -FlagStatus BKP_GetFlagStatus(void) -{ - if(BKP->TPCSR & (1 << 8)) - { - return SET; - } - else - { - return RESET; - } -} - -/********************************************************************* - * @fn BKP_ClearFlag - * - * @brief Clears Tamper Pin Event pending flag. - * - * @return none - */ -void BKP_ClearFlag(void) -{ - BKP->TPCSR |= BKP_CTE; -} - -/********************************************************************* - * @fn BKP_GetITStatus - * - * @brief Checks whether the Tamper Pin Interrupt has occurred or not. - * - * @return ITStatus - SET or RESET. - */ -ITStatus BKP_GetITStatus(void) -{ - if(BKP->TPCSR & (1 << 9)) - { - return SET; - } - else - { - return RESET; - } -} - -/********************************************************************* - * @fn BKP_ClearITPendingBit - * - * @brief Clears Tamper Pin Interrupt pending bit. - * - * @return none - */ -void BKP_ClearITPendingBit(void) -{ - BKP->TPCSR |= BKP_CTI; -} - - - - - - diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_crc.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_crc.c deleted file mode 100644 index 25cb750..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_crc.c +++ /dev/null @@ -1,103 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_crc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the CRC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_crc.h" - -/********************************************************************* - * @fn CRC_ResetDR - * - * @brief Resets the CRC Data register (DR). - * - * @return none - */ -void CRC_ResetDR(void) -{ - CRC->CTLR = CRC_CTLR_RESET; -} - -/********************************************************************* - * @fn CRC_CalcCRC - * - * @brief Computes the 32-bit CRC of a given data word(32-bit). - * - * @param Data - data word(32-bit) to compute its CRC. - * - * @return 32-bit CRC. - */ -uint32_t CRC_CalcCRC(uint32_t Data) -{ - CRC->DATAR = Data; - - return (CRC->DATAR); -} - -/********************************************************************* - * @fn CRC_CalcBlockCRC - * - * @brief Computes the 32-bit CRC of a given buffer of data word(32-bit). - * - * @param pBuffer - pointer to the buffer containing the data to be computed. - * BufferLength - length of the buffer to be computed. - * - * @return 32-bit CRC. - */ -uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength) -{ - uint32_t index = 0; - - for(index = 0; index < BufferLength; index++) - { - CRC->DATAR = pBuffer[index]; - } - - return (CRC->DATAR); -} - -/********************************************************************* - * @fn CRC_GetCRC - * - * @brief Returns the current CRC value. - * - * @return 32-bit CRC. - */ -uint32_t CRC_GetCRC(void) -{ - return (CRC->IDATAR); -} - -/********************************************************************* - * @fn CRC_SetIDRegister - * - * @brief Stores a 8-bit data in the Independent Data(ID) register. - * - * @param IDValue - 8-bit value to be stored in the ID register. - * - * @return none - */ -void CRC_SetIDRegister(uint8_t IDValue) -{ - CRC->IDATAR = IDValue; -} - -/********************************************************************* - * @fn CRC_GetIDRegister - * - * @brief Returns the 8-bit data stored in the Independent Data(ID) register. - * - * @return 8-bit value of the ID register. - */ -uint8_t CRC_GetIDRegister(void) -{ - return (CRC->IDATAR); -} - - - - - diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_dbgmcu.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_dbgmcu.c deleted file mode 100644 index fa39e48..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_dbgmcu.c +++ /dev/null @@ -1,64 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_dbgmcu.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the DBGMCU firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ****************************************************************************************/ -#include "ch32v10x_dbgmcu.h" - -/********************************************************************* - * @fn DBGMCU_Config - * - * @brief Configures the specified peripheral and low power mode behavior - * when the MCU under Debug mode. - * - * @param DBGMCU_Periph - specifies the peripheral and low power mode. - * DBGMCU_IWDG_STOP - Debug IWDG stopped when Core is halted - * DBGMCU_WWDG_STOP - Debug WWDG stopped when Core is halted - * DBGMCU_I2C1_SMBUS_TIMEOUT - I2C1 SMBUS timeout mode stopped when Core is halted - * DBGMCU_I2C2_SMBUS_TIMEOUT - I2C2 SMBUS timeout mode stopped when Core is halted - * DBGMCU_TIM1_STOP - TIM1 counter stopped when Core is halted - * DBGMCU_TIM2_STOP - TIM2 counter stopped when Core is halted - * DBGMCU_TIM3_STOP - TIM3 counter stopped when Core is halted - * DBGMCU_TIM4_STOP - TIM4 counter stopped when Core is halted - * DBGMCU_SLEEP - Keep debugger connection during SLEEP mode - * DBGMCU_STOP - Keep debugger connection during STOP mode - * DBGMCU_STANDBY - Keep debugger connection during STANDBY mode - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState) -{ - if((DBGMCU_Periph == DBGMCU_SLEEP) || (DBGMCU_Periph == DBGMCU_STOP) || (DBGMCU_Periph == DBGMCU_STANDBY)) - { - if(NewState != DISABLE) - { - DBGMCU->CFGR1 |= DBGMCU_Periph; - } - else - { - DBGMCU->CFGR1 &= ~DBGMCU_Periph; - } - } - else - { - if(NewState != DISABLE) - { - DBGMCU->CFGR0 |= DBGMCU_Periph; - } - else - { - DBGMCU->CFGR0 &= ~DBGMCU_Periph; - } - } - - - - - - -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_dma.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_dma.c deleted file mode 100644 index ca4e2ab..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_dma.c +++ /dev/null @@ -1,550 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_dma.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the DMA firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_dma.h" -#include "ch32v10x_rcc.h" - -/* DMA1 Channelx interrupt pending bit masks */ -#define DMA1_Channel1_IT_Mask ((uint32_t)(DMA_GIF1 | DMA_TCIF1 | DMA_HTIF1 | DMA_TEIF1)) -#define DMA1_Channel2_IT_Mask ((uint32_t)(DMA_GIF2 | DMA_TCIF2 | DMA_HTIF2 | DMA_TEIF2)) -#define DMA1_Channel3_IT_Mask ((uint32_t)(DMA_GIF3 | DMA_TCIF3 | DMA_HTIF3 | DMA_TEIF3)) -#define DMA1_Channel4_IT_Mask ((uint32_t)(DMA_GIF4 | DMA_TCIF4 | DMA_HTIF4 | DMA_TEIF4)) -#define DMA1_Channel5_IT_Mask ((uint32_t)(DMA_GIF5 | DMA_TCIF5 | DMA_HTIF5 | DMA_TEIF5)) -#define DMA1_Channel6_IT_Mask ((uint32_t)(DMA_GIF6 | DMA_TCIF6 | DMA_HTIF6 | DMA_TEIF6)) -#define DMA1_Channel7_IT_Mask ((uint32_t)(DMA_GIF7 | DMA_TCIF7 | DMA_HTIF7 | DMA_TEIF7)) - -/* DMA2 Channelx interrupt pending bit masks */ -#define DMA2_Channel1_IT_Mask ((uint32_t)(DMA_GIF1 | DMA_TCIF1 | DMA_HTIF1 | DMA_TEIF1)) -#define DMA2_Channel2_IT_Mask ((uint32_t)(DMA_GIF2 | DMA_TCIF2 | DMA_HTIF2 | DMA_TEIF2)) -#define DMA2_Channel3_IT_Mask ((uint32_t)(DMA_GIF3 | DMA_TCIF3 | DMA_HTIF3 | DMA_TEIF3)) -#define DMA2_Channel4_IT_Mask ((uint32_t)(DMA_GIF4 | DMA_TCIF4 | DMA_HTIF4 | DMA_TEIF4)) -#define DMA2_Channel5_IT_Mask ((uint32_t)(DMA_GIF5 | DMA_TCIF5 | DMA_HTIF5 | DMA_TEIF5)) - -/* DMA2 FLAG mask */ -#define FLAG_Mask ((uint32_t)0x10000000) - -/* DMA registers Masks */ -#define CFGR_CLEAR_Mask ((uint32_t)0xFFFF800F) - -/********************************************************************* - * @fn DMA_DeInit - * - * @brief Deinitializes the DMAy Channelx registers to their default - * reset values. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * - * @return none - */ -void DMA_DeInit(DMA_Channel_TypeDef *DMAy_Channelx) -{ - DMAy_Channelx->CFGR &= (uint16_t)(~DMA_CFGR1_EN); - DMAy_Channelx->CFGR = 0; - DMAy_Channelx->CNTR = 0; - DMAy_Channelx->PADDR = 0; - DMAy_Channelx->MADDR = 0; - if(DMAy_Channelx == DMA1_Channel1) - { - DMA1->INTFCR |= DMA1_Channel1_IT_Mask; - } - else if(DMAy_Channelx == DMA1_Channel2) - { - DMA1->INTFCR |= DMA1_Channel2_IT_Mask; - } - else if(DMAy_Channelx == DMA1_Channel3) - { - DMA1->INTFCR |= DMA1_Channel3_IT_Mask; - } - else if(DMAy_Channelx == DMA1_Channel4) - { - DMA1->INTFCR |= DMA1_Channel4_IT_Mask; - } - else if(DMAy_Channelx == DMA1_Channel5) - { - DMA1->INTFCR |= DMA1_Channel5_IT_Mask; - } - else if(DMAy_Channelx == DMA1_Channel6) - { - DMA1->INTFCR |= DMA1_Channel6_IT_Mask; - } - else if(DMAy_Channelx == DMA1_Channel7) - { - DMA1->INTFCR |= DMA1_Channel7_IT_Mask; - } - else if(DMAy_Channelx == DMA2_Channel1) - { - DMA2->INTFCR |= DMA2_Channel1_IT_Mask; - } - else if(DMAy_Channelx == DMA2_Channel2) - { - DMA2->INTFCR |= DMA2_Channel2_IT_Mask; - } - else if(DMAy_Channelx == DMA2_Channel3) - { - DMA2->INTFCR |= DMA2_Channel3_IT_Mask; - } - else if(DMAy_Channelx == DMA2_Channel4) - { - DMA2->INTFCR |= DMA2_Channel4_IT_Mask; - } - else - { - if(DMAy_Channelx == DMA2_Channel5) - { - DMA2->INTFCR |= DMA2_Channel5_IT_Mask; - } - } -} - -/********************************************************************* - * @fn DMA_Init - * - * @brief Initializes the DMAy Channelx according to the specified - * parameters in the DMA_InitStruct. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * DMA_InitStruct - pointer to a DMA_InitTypeDef structure that contains - * contains the configuration information for the specified DMA Channel. - * - * @return none - */ -void DMA_Init(DMA_Channel_TypeDef *DMAy_Channelx, DMA_InitTypeDef *DMA_InitStruct) -{ - uint32_t tmpreg = 0; - - tmpreg = DMAy_Channelx->CFGR; - tmpreg &= CFGR_CLEAR_Mask; - tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode | - DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc | - DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize | - DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M; - - DMAy_Channelx->CFGR = tmpreg; - DMAy_Channelx->CNTR = DMA_InitStruct->DMA_BufferSize; - DMAy_Channelx->PADDR = DMA_InitStruct->DMA_PeripheralBaseAddr; - DMAy_Channelx->MADDR = DMA_InitStruct->DMA_MemoryBaseAddr; -} - -/********************************************************************* - * @fn DMA_StructInit - * - * @brief Fills each DMA_InitStruct member with its default value. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * DMA_InitStruct - pointer to a DMA_InitTypeDef structure that contains - * contains the configuration information for the specified DMA Channel. - * - * @return none - */ -void DMA_StructInit(DMA_InitTypeDef *DMA_InitStruct) -{ - DMA_InitStruct->DMA_PeripheralBaseAddr = 0; - DMA_InitStruct->DMA_MemoryBaseAddr = 0; - DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralSRC; - DMA_InitStruct->DMA_BufferSize = 0; - DMA_InitStruct->DMA_PeripheralInc = DMA_PeripheralInc_Disable; - DMA_InitStruct->DMA_MemoryInc = DMA_MemoryInc_Disable; - DMA_InitStruct->DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; - DMA_InitStruct->DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; - DMA_InitStruct->DMA_Mode = DMA_Mode_Normal; - DMA_InitStruct->DMA_Priority = DMA_Priority_Low; - DMA_InitStruct->DMA_M2M = DMA_M2M_Disable; -} - -/********************************************************************* - * @fn DMA_Cmd - * - * @brief Enables or disables the specified DMAy Channelx. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * NewState - new state of the DMAy Channelx(ENABLE or DISABLE). - * - * @return none - */ -void DMA_Cmd(DMA_Channel_TypeDef *DMAy_Channelx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - DMAy_Channelx->CFGR |= DMA_CFGR1_EN; - } - else - { - DMAy_Channelx->CFGR &= (uint16_t)(~DMA_CFGR1_EN); - } -} - -/********************************************************************* - * @fn DMA_ITConfig - * - * @brief Enables or disables the specified DMAy Channelx interrupts. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * DMA_IT - specifies the DMA interrupts sources to be enabled - * or disabled. - * DMA_IT_TC - Transfer complete interrupt mask - * DMA_IT_HT - Half transfer interrupt mask - * DMA_IT_TE - Transfer error interrupt mask - * NewState - new state of the DMAy Channelx(ENABLE or DISABLE). - * - * @return none - */ -void DMA_ITConfig(DMA_Channel_TypeDef *DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - DMAy_Channelx->CFGR |= DMA_IT; - } - else - { - DMAy_Channelx->CFGR &= ~DMA_IT; - } -} - -/********************************************************************* - * @fn DMA_SetCurrDataCounter - * - * @brief Sets the number of data units in the current DMAy Channelx transfer. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * DataNumber - The number of data units in the current DMAy Channelx - * transfer. - * - * @return none - */ -void DMA_SetCurrDataCounter(DMA_Channel_TypeDef *DMAy_Channelx, uint16_t DataNumber) -{ - DMAy_Channelx->CNTR = DataNumber; -} - -/********************************************************************* - * @fn DMA_GetCurrDataCounter - * - * @brief Returns the number of remaining data units in the current - * DMAy Channelx transfer. - * - * @param DMAy_Channelx - here y can be 1 or 2 to select the DMA and x can be - * 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. - * - * @return DataNumber - The number of remaining data units in the current - * DMAy Channelx transfer. - */ -uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef *DMAy_Channelx) -{ - return ((uint16_t)(DMAy_Channelx->CNTR)); -} - -/********************************************************************* - * @fn DMA_GetFlagStatus - * - * @brief Checks whether the specified DMAy Channelx flag is set or not. - * - * @param DMAy_FLAG - specifies the flag to check. - * DMA1_FLAG_GL1 - DMA1 Channel1 global flag. - * DMA1_FLAG_TC1 - DMA1 Channel1 transfer complete flag. - * DMA1_FLAG_HT1 - DMA1 Channel1 half transfer flag. - * DMA1_FLAG_TE1 - DMA1 Channel1 transfer error flag. - * DMA1_FLAG_GL2 - DMA1 Channel2 global flag. - * DMA1_FLAG_TC2 - DMA1 Channel2 transfer complete flag. - * DMA1_FLAG_HT2 - DMA1 Channel2 half transfer flag. - * DMA1_FLAG_TE2 - DMA1 Channel2 transfer error flag. - * DMA1_FLAG_GL3 - DMA1 Channel3 global flag. - * DMA1_FLAG_TC3 - DMA1 Channel3 transfer complete flag. - * DMA1_FLAG_HT3 - DMA1 Channel3 half transfer flag. - * DMA1_FLAG_TE3 - DMA1 Channel3 transfer error flag. - * DMA1_FLAG_GL4 - DMA1 Channel4 global flag. - * DMA1_FLAG_TC4 - DMA1 Channel4 transfer complete flag. - * DMA1_FLAG_HT4 - DMA1 Channel4 half transfer flag. - * DMA1_FLAG_TE4 - DMA1 Channel4 transfer error flag. - * DMA1_FLAG_GL5 - DMA1 Channel5 global flag. - * DMA1_FLAG_TC5 - DMA1 Channel5 transfer complete flag. - * DMA1_FLAG_HT5 - DMA1 Channel5 half transfer flag. - * DMA1_FLAG_TE5 - DMA1 Channel5 transfer error flag. - * DMA1_FLAG_GL6 - DMA1 Channel6 global flag. - * DMA1_FLAG_TC6 - DMA1 Channel6 transfer complete flag. - * DMA1_FLAG_HT6 - DMA1 Channel6 half transfer flag. - * DMA1_FLAG_TE6 - DMA1 Channel6 transfer error flag. - * DMA1_FLAG_GL7 - DMA1 Channel7 global flag. - * DMA1_FLAG_TC7 - DMA1 Channel7 transfer complete flag. - * DMA1_FLAG_HT7 - DMA1 Channel7 half transfer flag. - * DMA1_FLAG_TE7 - DMA1 Channel7 transfer error flag. - * DMA2_FLAG_GL1 - DMA2 Channel1 global flag. - * DMA2_FLAG_TC1 - DMA2 Channel1 transfer complete flag. - * DMA2_FLAG_HT1 - DMA2 Channel1 half transfer flag. - * DMA2_FLAG_TE1 - DMA2 Channel1 transfer error flag. - * DMA2_FLAG_GL2 - DMA2 Channel2 global flag. - * DMA2_FLAG_TC2 - DMA2 Channel2 transfer complete flag. - * DMA2_FLAG_HT2 - DMA2 Channel2 half transfer flag. - * DMA2_FLAG_TE2 - DMA2 Channel2 transfer error flag. - * DMA2_FLAG_GL3 - DMA2 Channel3 global flag. - * DMA2_FLAG_TC3 - DMA2 Channel3 transfer complete flag. - * DMA2_FLAG_HT3 - DMA2 Channel3 half transfer flag. - * DMA2_FLAG_TE3 - DMA2 Channel3 transfer error flag. - * DMA2_FLAG_GL4 - DMA2 Channel4 global flag. - * DMA2_FLAG_TC4 - DMA2 Channel4 transfer complete flag. - * DMA2_FLAG_HT4 - DMA2 Channel4 half transfer flag. - * DMA2_FLAG_TE4 - DMA2 Channel4 transfer error flag. - * DMA2_FLAG_GL5 - DMA2 Channel5 global flag. - * DMA2_FLAG_TC5 - DMA2 Channel5 transfer complete flag. - * DMA2_FLAG_HT5 - DMA2 Channel5 half transfer flag. - * DMA2_FLAG_TE5 - DMA2 Channel5 transfer error flag. - * - * @return The new state of DMAy_FLAG (SET or RESET). - */ -FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG) -{ - FlagStatus bitstatus = RESET; - uint32_t tmpreg = 0; - - if((DMAy_FLAG & FLAG_Mask) != (uint32_t)RESET) - { - tmpreg = DMA2->INTFR; - } - else - { - tmpreg = DMA1->INTFR; - } - - if((tmpreg & DMAy_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn DMA_ClearFlag - * - * @brief Clears the DMAy Channelx's pending flags. - * - * @param DMAy_FLAG - specifies the flag to check. - * DMA1_FLAG_GL1 - DMA1 Channel1 global flag. - * DMA1_FLAG_TC1 - DMA1 Channel1 transfer complete flag. - * DMA1_FLAG_HT1 - DMA1 Channel1 half transfer flag. - * DMA1_FLAG_TE1 - DMA1 Channel1 transfer error flag. - * DMA1_FLAG_GL2 - DMA1 Channel2 global flag. - * DMA1_FLAG_TC2 - DMA1 Channel2 transfer complete flag. - * DMA1_FLAG_HT2 - DMA1 Channel2 half transfer flag. - * DMA1_FLAG_TE2 - DMA1 Channel2 transfer error flag. - * DMA1_FLAG_GL3 - DMA1 Channel3 global flag. - * DMA1_FLAG_TC3 - DMA1 Channel3 transfer complete flag. - * DMA1_FLAG_HT3 - DMA1 Channel3 half transfer flag. - * DMA1_FLAG_TE3 - DMA1 Channel3 transfer error flag. - * DMA1_FLAG_GL4 - DMA1 Channel4 global flag. - * DMA1_FLAG_TC4 - DMA1 Channel4 transfer complete flag. - * DMA1_FLAG_HT4 - DMA1 Channel4 half transfer flag. - * DMA1_FLAG_TE4 - DMA1 Channel4 transfer error flag. - * DMA1_FLAG_GL5 - DMA1 Channel5 global flag. - * DMA1_FLAG_TC5 - DMA1 Channel5 transfer complete flag. - * DMA1_FLAG_HT5 - DMA1 Channel5 half transfer flag. - * DMA1_FLAG_TE5 - DMA1 Channel5 transfer error flag. - * DMA1_FLAG_GL6 - DMA1 Channel6 global flag. - * DMA1_FLAG_TC6 - DMA1 Channel6 transfer complete flag. - * DMA1_FLAG_HT6 - DMA1 Channel6 half transfer flag. - * DMA1_FLAG_TE6 - DMA1 Channel6 transfer error flag. - * DMA1_FLAG_GL7 - DMA1 Channel7 global flag. - * DMA1_FLAG_TC7 - DMA1 Channel7 transfer complete flag. - * DMA1_FLAG_HT7 - DMA1 Channel7 half transfer flag. - * DMA1_FLAG_TE7 - DMA1 Channel7 transfer error flag. - * DMA2_FLAG_GL1 - DMA2 Channel1 global flag. - * DMA2_FLAG_TC1 - DMA2 Channel1 transfer complete flag. - * DMA2_FLAG_HT1 - DMA2 Channel1 half transfer flag. - * DMA2_FLAG_TE1 - DMA2 Channel1 transfer error flag. - * DMA2_FLAG_GL2 - DMA2 Channel2 global flag. - * DMA2_FLAG_TC2 - DMA2 Channel2 transfer complete flag. - * DMA2_FLAG_HT2 - DMA2 Channel2 half transfer flag. - * DMA2_FLAG_TE2 - DMA2 Channel2 transfer error flag. - * DMA2_FLAG_GL3 - DMA2 Channel3 global flag. - * DMA2_FLAG_TC3 - DMA2 Channel3 transfer complete flag. - * DMA2_FLAG_HT3 - DMA2 Channel3 half transfer flag. - * DMA2_FLAG_TE3 - DMA2 Channel3 transfer error flag. - * DMA2_FLAG_GL4 - DMA2 Channel4 global flag. - * DMA2_FLAG_TC4 - DMA2 Channel4 transfer complete flag. - * DMA2_FLAG_HT4 - DMA2 Channel4 half transfer flag. - * DMA2_FLAG_TE4 - DMA2 Channel4 transfer error flag. - * DMA2_FLAG_GL5 - DMA2 Channel5 global flag. - * DMA2_FLAG_TC5 - DMA2 Channel5 transfer complete flag. - * DMA2_FLAG_HT5 - DMA2 Channel5 half transfer flag. - * DMA2_FLAG_TE5 - DMA2 Channel5 transfer error flag. - * - * @return none - */ -void DMA_ClearFlag(uint32_t DMAy_FLAG) -{ - if((DMAy_FLAG & FLAG_Mask) != (uint32_t)RESET) - { - DMA2->INTFCR = DMAy_FLAG; - } - else - { - DMA1->INTFCR = DMAy_FLAG; - } -} - -/********************************************************************* - * @fn DMA_GetITStatus - * - * @brief Checks whether the specified DMAy Channelx interrupt has - * occurred or not. - * - * @param DMAy_IT - specifies the DMAy interrupt source to check. - * DMA1_IT_GL1 - DMA1 Channel1 global flag. - * DMA1_IT_TC1 - DMA1 Channel1 transfer complete flag. - * DMA1_IT_HT1 - DMA1 Channel1 half transfer flag. - * DMA1_IT_TE1 - DMA1 Channel1 transfer error flag. - * DMA1_IT_GL2 - DMA1 Channel2 global flag. - * DMA1_IT_TC2 - DMA1 Channel2 transfer complete flag. - * DMA1_IT_HT2 - DMA1 Channel2 half transfer flag. - * DMA1_IT_TE2 - DMA1 Channel2 transfer error flag. - * DMA1_IT_GL3 - DMA1 Channel3 global flag. - * DMA1_IT_TC3 - DMA1 Channel3 transfer complete flag. - * DMA1_IT_HT3 - DMA1 Channel3 half transfer flag. - * DMA1_IT_TE3 - DMA1 Channel3 transfer error flag. - * DMA1_IT_GL4 - DMA1 Channel4 global flag. - * DMA1_IT_TC4 - DMA1 Channel4 transfer complete flag. - * DMA1_IT_HT4 - DMA1 Channel4 half transfer flag. - * DMA1_IT_TE4 - DMA1 Channel4 transfer error flag. - * DMA1_IT_GL5 - DMA1 Channel5 global flag. - * DMA1_IT_TC5 - DMA1 Channel5 transfer complete flag. - * DMA1_IT_HT5 - DMA1 Channel5 half transfer flag. - * DMA1_IT_TE5 - DMA1 Channel5 transfer error flag. - * DMA1_IT_GL6 - DMA1 Channel6 global flag. - * DMA1_IT_TC6 - DMA1 Channel6 transfer complete flag. - * DMA1_IT_HT6 - DMA1 Channel6 half transfer flag. - * DMA1_IT_TE6 - DMA1 Channel6 transfer error flag. - * DMA1_IT_GL7 - DMA1 Channel7 global flag. - * DMA1_IT_TC7 - DMA1 Channel7 transfer complete flag. - * DMA1_IT_HT7 - DMA1 Channel7 half transfer flag. - * DMA1_IT_TE7 - DMA1 Channel7 transfer error flag. - * DMA2_IT_GL1 - DMA2 Channel1 global flag. - * DMA2_IT_TC1 - DMA2 Channel1 transfer complete flag. - * DMA2_IT_HT1 - DMA2 Channel1 half transfer flag. - * DMA2_IT_TE1 - DMA2 Channel1 transfer error flag. - * DMA2_IT_GL2 - DMA2 Channel2 global flag. - * DMA2_IT_TC2 - DMA2 Channel2 transfer complete flag. - * DMA2_IT_HT2 - DMA2 Channel2 half transfer flag. - * DMA2_IT_TE2 - DMA2 Channel2 transfer error flag. - * DMA2_IT_GL3 - DMA2 Channel3 global flag. - * DMA2_IT_TC3 - DMA2 Channel3 transfer complete flag. - * DMA2_IT_HT3 - DMA2 Channel3 half transfer flag. - * DMA2_IT_TE3 - DMA2 Channel3 transfer error flag. - * DMA2_IT_GL4 - DMA2 Channel4 global flag. - * DMA2_IT_TC4 - DMA2 Channel4 transfer complete flag. - * DMA2_IT_HT4 - DMA2 Channel4 half transfer flag. - * DMA2_IT_TE4 - DMA2 Channel4 transfer error flag. - * DMA2_IT_GL5 - DMA2 Channel5 global flag. - * DMA2_IT_TC5 - DMA2 Channel5 transfer complete flag. - * DMA2_IT_HT5 - DMA2 Channel5 half transfer flag. - * DMA2_IT_TE5 - DMA2 Channel5 transfer error flag. - * - * @return The new state of DMAy_IT (SET or RESET). - */ -ITStatus DMA_GetITStatus(uint32_t DMAy_IT) -{ - ITStatus bitstatus = RESET; - uint32_t tmpreg = 0; - - if((DMAy_IT & FLAG_Mask) != (uint32_t)RESET) - { - tmpreg = DMA2->INTFR; - } - else - { - tmpreg = DMA1->INTFR; - } - - if((tmpreg & DMAy_IT) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn DMA_ClearITPendingBit - * - * @brief Clears the DMAy Channelx's interrupt pending bits. - * - * @param DMAy_IT - specifies the DMAy interrupt source to check. - * DMA1_IT_GL1 - DMA1 Channel1 global flag. - * DMA1_IT_TC1 - DMA1 Channel1 transfer complete flag. - * DMA1_IT_HT1 - DMA1 Channel1 half transfer flag. - * DMA1_IT_TE1 - DMA1 Channel1 transfer error flag. - * DMA1_IT_GL2 - DMA1 Channel2 global flag. - * DMA1_IT_TC2 - DMA1 Channel2 transfer complete flag. - * DMA1_IT_HT2 - DMA1 Channel2 half transfer flag. - * DMA1_IT_TE2 - DMA1 Channel2 transfer error flag. - * DMA1_IT_GL3 - DMA1 Channel3 global flag. - * DMA1_IT_TC3 - DMA1 Channel3 transfer complete flag. - * DMA1_IT_HT3 - DMA1 Channel3 half transfer flag. - * DMA1_IT_TE3 - DMA1 Channel3 transfer error flag. - * DMA1_IT_GL4 - DMA1 Channel4 global flag. - * DMA1_IT_TC4 - DMA1 Channel4 transfer complete flag. - * DMA1_IT_HT4 - DMA1 Channel4 half transfer flag. - * DMA1_IT_TE4 - DMA1 Channel4 transfer error flag. - * DMA1_IT_GL5 - DMA1 Channel5 global flag. - * DMA1_IT_TC5 - DMA1 Channel5 transfer complete flag. - * DMA1_IT_HT5 - DMA1 Channel5 half transfer flag. - * DMA1_IT_TE5 - DMA1 Channel5 transfer error flag. - * DMA1_IT_GL6 - DMA1 Channel6 global flag. - * DMA1_IT_TC6 - DMA1 Channel6 transfer complete flag. - * DMA1_IT_HT6 - DMA1 Channel6 half transfer flag. - * DMA1_IT_TE6 - DMA1 Channel6 transfer error flag. - * DMA1_IT_GL7 - DMA1 Channel7 global flag. - * DMA1_IT_TC7 - DMA1 Channel7 transfer complete flag. - * DMA1_IT_HT7 - DMA1 Channel7 half transfer flag. - * DMA1_IT_TE7 - DMA1 Channel7 transfer error flag. - * DMA2_IT_GL1 - DMA2 Channel1 global flag. - * DMA2_IT_TC1 - DMA2 Channel1 transfer complete flag. - * DMA2_IT_HT1 - DMA2 Channel1 half transfer flag. - * DMA2_IT_TE1 - DMA2 Channel1 transfer error flag. - * DMA2_IT_GL2 - DMA2 Channel2 global flag. - * DMA2_IT_TC2 - DMA2 Channel2 transfer complete flag. - * DMA2_IT_HT2 - DMA2 Channel2 half transfer flag. - * DMA2_IT_TE2 - DMA2 Channel2 transfer error flag. - * DMA2_IT_GL3 - DMA2 Channel3 global flag. - * DMA2_IT_TC3 - DMA2 Channel3 transfer complete flag. - * DMA2_IT_HT3 - DMA2 Channel3 half transfer flag. - * DMA2_IT_TE3 - DMA2 Channel3 transfer error flag. - * DMA2_IT_GL4 - DMA2 Channel4 global flag. - * DMA2_IT_TC4 - DMA2 Channel4 transfer complete flag. - * DMA2_IT_HT4 - DMA2 Channel4 half transfer flag. - * DMA2_IT_TE4 - DMA2 Channel4 transfer error flag. - * DMA2_IT_GL5 - DMA2 Channel5 global flag. - * DMA2_IT_TC5 - DMA2 Channel5 transfer complete flag. - * DMA2_IT_HT5 - DMA2 Channel5 half transfer flag. - * DMA2_IT_TE5 - DMA2 Channel5 transfer error flag. - * - * @return none - */ -void DMA_ClearITPendingBit(uint32_t DMAy_IT) -{ - if((DMAy_IT & FLAG_Mask) != (uint32_t)RESET) - { - DMA2->INTFCR = DMAy_IT; - } - else - { - DMA1->INTFCR = DMAy_IT; - } -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_exti.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_exti.c deleted file mode 100644 index b58bff5..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_exti.c +++ /dev/null @@ -1,180 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_exti.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the EXTI firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ***************************************************************************************/ -#include "ch32v10x_exti.h" - -/* No interrupt selected */ -#define EXTI_LINENONE ((uint32_t)0x00000) - -/********************************************************************* - * @fn EXTI_DeInit - * - * @brief Deinitializes the EXTI peripheral registers to their default - * reset values. - * - * @return none. - */ -void EXTI_DeInit(void) -{ - EXTI->INTENR = 0x00000000; - EXTI->EVENR = 0x00000000; - EXTI->RTENR = 0x00000000; - EXTI->FTENR = 0x00000000; - EXTI->INTFR = 0x000FFFFF; -} - -/********************************************************************* - * @fn EXTI_Init - * - * @brief Initializes the EXTI peripheral according to the specified - * parameters in the EXTI_InitStruct. - * - * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure - * - * @return none. - */ -void EXTI_Init(EXTI_InitTypeDef *EXTI_InitStruct) -{ - uint32_t tmp = 0; - - tmp = (uint32_t)EXTI_BASE; - if(EXTI_InitStruct->EXTI_LineCmd != DISABLE) - { - EXTI->INTENR &= ~EXTI_InitStruct->EXTI_Line; - EXTI->EVENR &= ~EXTI_InitStruct->EXTI_Line; - tmp += EXTI_InitStruct->EXTI_Mode; - *(__IO uint32_t *)tmp |= EXTI_InitStruct->EXTI_Line; - EXTI->RTENR &= ~EXTI_InitStruct->EXTI_Line; - EXTI->FTENR &= ~EXTI_InitStruct->EXTI_Line; - if(EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling) - { - EXTI->RTENR |= EXTI_InitStruct->EXTI_Line; - EXTI->FTENR |= EXTI_InitStruct->EXTI_Line; - } - else - { - tmp = (uint32_t)EXTI_BASE; - tmp += EXTI_InitStruct->EXTI_Trigger; - *(__IO uint32_t *)tmp |= EXTI_InitStruct->EXTI_Line; - } - } - else - { - tmp += EXTI_InitStruct->EXTI_Mode; - *(__IO uint32_t *)tmp &= ~EXTI_InitStruct->EXTI_Line; - } -} - -/********************************************************************* - * @fn EXTI_StructInit - * - * @brief Fills each EXTI_InitStruct member with its reset value. - * - * @param EXTI_InitStruct - pointer to a EXTI_InitTypeDef structure - * - * @return none. - */ -void EXTI_StructInit(EXTI_InitTypeDef *EXTI_InitStruct) -{ - EXTI_InitStruct->EXTI_Line = EXTI_LINENONE; - EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt; - EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling; - EXTI_InitStruct->EXTI_LineCmd = DISABLE; -} - -/********************************************************************* - * @fn EXTI_GenerateSWInterrupt - * - * @brief Generates a Software interrupt. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return none. - */ -void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line) -{ - EXTI->SWIEVR |= EXTI_Line; -} - -/********************************************************************* - * @fn EXTI_GetFlagStatus - * - * @brief Checks whether the specified EXTI line flag is set or not. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return The new state of EXTI_Line (SET or RESET). - */ -FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line) -{ - FlagStatus bitstatus = RESET; - if((EXTI->INTFR & EXTI_Line) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn EXTI_ClearFlag - * - * @brief Clears the EXTI's line pending flags. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return None - */ -void EXTI_ClearFlag(uint32_t EXTI_Line) -{ - EXTI->INTFR = EXTI_Line; -} - -/********************************************************************* - * @fn EXTI_GetITStatus - * - * @brief Checks whether the specified EXTI line is asserted or not. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return The new state of EXTI_Line (SET or RESET). - */ -ITStatus EXTI_GetITStatus(uint32_t EXTI_Line) -{ - ITStatus bitstatus = RESET; - uint32_t enablestatus = 0; - - enablestatus = EXTI->INTENR & EXTI_Line; - if(((EXTI->INTFR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn EXTI_ClearITPendingBit - * - * @brief Clears the EXTI's line pending bits. - * - * @param EXTI_Line - specifies the EXTI lines to be enabled or disabled. - * - * @return none - */ -void EXTI_ClearITPendingBit(uint32_t EXTI_Line) -{ - EXTI->INTFR = EXTI_Line; -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_flash.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_flash.c deleted file mode 100644 index 922fa31..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_flash.c +++ /dev/null @@ -1,968 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_flash.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the FLASH firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ***************************************************************************************/ -#include "ch32v10x_flash.h" - -/* Flash Access Control Register bits */ -#define ACR_LATENCY_Mask ((uint32_t)0x00000038) -#define ACR_HLFCYA_Mask ((uint32_t)0xFFFFFFF7) -#define ACR_PRFTBE_Mask ((uint32_t)0xFFFFFFEF) - -/* Flash Access Control Register bits */ -#define ACR_PRFTBS_Mask ((uint32_t)0x00000020) - -/* Flash Control Register bits */ -#define CR_PG_Set ((uint32_t)0x00000001) -#define CR_PG_Reset ((uint32_t)0x00001FFE) -#define CR_PER_Set ((uint32_t)0x00000002) -#define CR_PER_Reset ((uint32_t)0x00001FFD) -#define CR_MER_Set ((uint32_t)0x00000004) -#define CR_MER_Reset ((uint32_t)0x00001FFB) -#define CR_OPTPG_Set ((uint32_t)0x00000010) -#define CR_OPTPG_Reset ((uint32_t)0x00001FEF) -#define CR_OPTER_Set ((uint32_t)0x00000020) -#define CR_OPTER_Reset ((uint32_t)0x00001FDF) -#define CR_STRT_Set ((uint32_t)0x00000040) -#define CR_LOCK_Set ((uint32_t)0x00000080) -#define CR_PAGE_PG ((uint32_t)0x00010000) -#define CR_PAGE_ER ((uint32_t)0x00020000) -#define CR_BUF_LOAD ((uint32_t)0x00040000) -#define CR_BUF_RST ((uint32_t)0x00080000) - -/* FLASH Status Register bits */ -#define SR_BSY ((uint32_t)0x00000001) -#define SR_PGERR ((uint32_t)0x00000004) -#define SR_WRPRTERR ((uint32_t)0x00000010) -#define SR_EOP ((uint32_t)0x00000020) - -/* FLASH Mask */ -#define RDPRT_Mask ((uint32_t)0x00000002) -#define WRP0_Mask ((uint32_t)0x000000FF) -#define WRP1_Mask ((uint32_t)0x0000FF00) -#define WRP2_Mask ((uint32_t)0x00FF0000) -#define WRP3_Mask ((uint32_t)0xFF000000) -#define OB_USER_BFB2 ((uint16_t)0x0008) - -/* FLASH Keys */ -#define RDP_Key ((uint16_t)0x00A5) -#define FLASH_KEY1 ((uint32_t)0x45670123) -#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) - -/* FLASH BANK address */ -#define FLASH_BANK1_END_ADDRESS ((uint32_t)0x807FFFF) - -/* Delay definition */ -#define EraseTimeout ((uint32_t)0x000B0000) -#define ProgramTimeout ((uint32_t)0x00002000) - -/* Flash Program Vaild Address */ -#define ValidAddrStart (FLASH_BASE) -#define ValidAddrEnd (FLASH_BASE + 0x10000) - -/******************************************************************************** - * @fn FLASH_SetLatency - * - * @brief Sets the code latency value. - * - * @param FLASH_Latency - specifies the FLASH Latency value. - * FLASH_Latency_0 - FLASH Zero Latency cycle - * FLASH_Latency_1 - FLASH One Latency cycle - * FLASH_Latency_2 - FLASH Two Latency cycles - * - * @return None - */ -void FLASH_SetLatency(uint32_t FLASH_Latency) -{ - uint32_t tmpreg = 0; - - tmpreg = FLASH->ACTLR; - tmpreg &= ACR_LATENCY_Mask; - tmpreg |= FLASH_Latency; - FLASH->ACTLR = tmpreg; -} - -/******************************************************************************** - * @fn FLASH_HalfCycleAccessCmd - * - * @brief Enables or disables the Half cycle flash access. - * - * @param FLASH_HalfCycleAccess - specifies the FLASH Half cycle Access mode. - * FLASH_HalfCycleAccess_Enable - FLASH Half Cycle Enable - * FLASH_HalfCycleAccess_Disable - FLASH Half Cycle Disable - * - * @return None - */ -void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess) -{ - FLASH->ACTLR &= ACR_HLFCYA_Mask; - FLASH->ACTLR |= FLASH_HalfCycleAccess; -} - -/******************************************************************************** - * @fn FLASH_PrefetchBufferCmd - * - * @brief Enables or disables the Prefetch Buffer. - * - * @param FLASH_PrefetchBuffer - specifies the Prefetch buffer status. - * FLASH_PrefetchBuffer_Enable - FLASH Prefetch Buffer Enable - * FLASH_PrefetchBuffer_Disable - FLASH Prefetch Buffer Disable - * - * @return None - */ -void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer) -{ - FLASH->ACTLR &= ACR_PRFTBE_Mask; - FLASH->ACTLR |= FLASH_PrefetchBuffer; -} - -/******************************************************************************** - * @fn FLASH_Unlock - * - * @brief Unlocks the FLASH Program Erase Controller. - * - * @return None - */ -void FLASH_Unlock(void) -{ - /* Authorize the FPEC of Bank1 Access */ - FLASH->KEYR = FLASH_KEY1; - FLASH->KEYR = FLASH_KEY2; -} - -/******************************************************************************** - * @fn FLASH_UnlockBank1 - * - * @brief Unlocks the FLASH Bank1 Program Erase Controller. - * equivalent to FLASH_Unlock function. - * - * @return None - */ -void FLASH_UnlockBank1(void) -{ - FLASH->KEYR = FLASH_KEY1; - FLASH->KEYR = FLASH_KEY2; -} - -/******************************************************************************** - * @fn FLASH_Lock - * - * @brief Locks the FLASH Program Erase Controller. - * - * @return None - */ -void FLASH_Lock(void) -{ - FLASH->CTLR |= CR_LOCK_Set; -} - -/******************************************************************************** - * @fn FLASH_LockBank1 - * - * @brief Locks the FLASH Bank1 Program Erase Controller. - * - * @return None - */ -void FLASH_LockBank1(void) -{ - FLASH->CTLR |= CR_LOCK_Set; -} - -/******************************************************************************** - * @fn FLASH_ErasePage - * - * @brief Erases a specified FLASH page. - * - * @param Page_Address - The page address to be erased. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ErasePage(uint32_t Page_Address) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_WaitForLastOperation(EraseTimeout); - - if(status == FLASH_COMPLETE) - { - FLASH->CTLR |= CR_PER_Set; - FLASH->ADDR = Page_Address; - FLASH->CTLR |= CR_STRT_Set; - - status = FLASH_WaitForLastOperation(EraseTimeout); - - FLASH->CTLR &= CR_PER_Reset; - } - - *(__IO uint32_t *)0x40022034 = *(__IO uint32_t *)((Page_Address & 0xFFFFFFFC) ^ 0x00001000); - - return status; -} - -/******************************************************************************** - * @fn FLASH_EraseAllPages - * - * @brief Erases all FLASH pages. - * - * @return FLASH Status - The returned value can be:FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_EraseAllPages(void) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_WaitForLastOperation(EraseTimeout); - if(status == FLASH_COMPLETE) - { - FLASH->CTLR |= CR_MER_Set; - FLASH->CTLR |= CR_STRT_Set; - - status = FLASH_WaitForLastOperation(EraseTimeout); - - FLASH->CTLR &= CR_MER_Reset; - } - - return status; -} - -/******************************************************************************** - * @fn FLASH_EraseAllBank1Pages - * - * @brief Erases all Bank1 FLASH pages. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_EraseAllBank1Pages(void) -{ - FLASH_Status status = FLASH_COMPLETE; - status = FLASH_WaitForLastBank1Operation(EraseTimeout); - - if(status == FLASH_COMPLETE) - { - FLASH->CTLR |= CR_MER_Set; - FLASH->CTLR |= CR_STRT_Set; - - status = FLASH_WaitForLastBank1Operation(EraseTimeout); - - FLASH->CTLR &= CR_MER_Reset; - } - return status; -} - -/******************************************************************************** - * @fn FLASH_EraseOptionBytes - * - * @brief Erases the FLASH option bytes. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_EraseOptionBytes(void) -{ - uint16_t rdptmp = RDP_Key; - - FLASH_Status status = FLASH_COMPLETE; - if(FLASH_GetReadOutProtectionStatus() != RESET) - { - rdptmp = 0x00; - } - status = FLASH_WaitForLastOperation(EraseTimeout); - if(status == FLASH_COMPLETE) - { - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - - FLASH->CTLR |= CR_OPTER_Set; - FLASH->CTLR |= CR_STRT_Set; - status = FLASH_WaitForLastOperation(EraseTimeout); - - if(status == FLASH_COMPLETE) - { - FLASH->CTLR &= CR_OPTER_Reset; - FLASH->CTLR |= CR_OPTPG_Set; - OB->RDPR = (uint16_t)rdptmp; - status = FLASH_WaitForLastOperation(ProgramTimeout); - - if(status != FLASH_TIMEOUT) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - else - { - if(status != FLASH_TIMEOUT) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - } - return status; -} - -/********************************************************************* - * @fn FLASH_ProgramWord - * - * @brief Programs a word at a specified address. - * - * @param Address - specifies the address to be programmed. - * Data - specifies the data to be programmed. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - __IO uint32_t tmp = 0; - - status = FLASH_WaitForLastOperation(ProgramTimeout); - - if(status == FLASH_COMPLETE) - { - FLASH->CTLR |= CR_PG_Set; - - *(__IO uint16_t *)Address = (uint16_t)Data; - status = FLASH_WaitForLastOperation(ProgramTimeout); - - if(status == FLASH_COMPLETE) - { - tmp = Address + 2; - *(__IO uint16_t *)tmp = Data >> 16; - status = FLASH_WaitForLastOperation(ProgramTimeout); - FLASH->CTLR &= CR_PG_Reset; - } - else - { - FLASH->CTLR &= CR_PG_Reset; - } - } - - *(__IO uint32_t *)0x40022034 = *(__IO uint32_t *)((Address & 0xFFFFFFFC) ^ 0x00001000); - - return status; -} - -/********************************************************************* - * @fn FLASH_ProgramHalfWord - * - * @brief Programs a half word at a specified address. - * - * @param Address - specifies the address to be programmed. - * Data - specifies the data to be programmed. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_WaitForLastOperation(ProgramTimeout); - if(status == FLASH_COMPLETE) - { - FLASH->CTLR |= CR_PG_Set; - *(__IO uint16_t *)Address = Data; - status = FLASH_WaitForLastOperation(ProgramTimeout); - FLASH->CTLR &= CR_PG_Reset; - } - - *(__IO uint32_t *)0x40022034 = *(__IO uint32_t *)((Address & 0xFFFFFFFC) ^ 0x00001000); - - return status; -} - -/********************************************************************* - * @fn FLASH_ProgramOptionByteData - * - * @brief Programs a half word at a specified Option Byte Data address. - * - * @param Address - specifies the address to be programmed. - * Data - specifies the data to be programmed. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data) -{ - FLASH_Status status = FLASH_COMPLETE; - status = FLASH_WaitForLastOperation(ProgramTimeout); - if(status == FLASH_COMPLETE) - { - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - FLASH->CTLR |= CR_OPTPG_Set; - *(__IO uint16_t *)Address = Data; - status = FLASH_WaitForLastOperation(ProgramTimeout); - if(status != FLASH_TIMEOUT) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - - *(__IO uint32_t *)0x40022034 = *(__IO uint32_t *)((Address & 0xFFFFFFFC) ^ 0x00001000); - - return status; -} - -/********************************************************************* - * @fn FLASH_EnableWriteProtection - * - * @brief Write protects the desired sectors - * - * @param FLASH_Sectors - specifies the address of the pages to be write protected. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages) -{ - uint16_t WRP0_Data = 0xFFFF, WRP1_Data = 0xFFFF, WRP2_Data = 0xFFFF, WRP3_Data = 0xFFFF; - - FLASH_Status status = FLASH_COMPLETE; - - FLASH_Pages = (uint32_t)(~FLASH_Pages); - WRP0_Data = (uint16_t)(FLASH_Pages & WRP0_Mask); - WRP1_Data = (uint16_t)((FLASH_Pages & WRP1_Mask) >> 8); - WRP2_Data = (uint16_t)((FLASH_Pages & WRP2_Mask) >> 16); - WRP3_Data = (uint16_t)((FLASH_Pages & WRP3_Mask) >> 24); - - status = FLASH_WaitForLastOperation(ProgramTimeout); - - if(status == FLASH_COMPLETE) - { - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - FLASH->CTLR |= CR_OPTPG_Set; - if(WRP0_Data != 0xFF) - { - OB->WRPR0 = WRP0_Data; - status = FLASH_WaitForLastOperation(ProgramTimeout); - } - if((status == FLASH_COMPLETE) && (WRP1_Data != 0xFF)) - { - OB->WRPR1 = WRP1_Data; - status = FLASH_WaitForLastOperation(ProgramTimeout); - } - if((status == FLASH_COMPLETE) && (WRP2_Data != 0xFF)) - { - OB->WRPR2 = WRP2_Data; - status = FLASH_WaitForLastOperation(ProgramTimeout); - } - - if((status == FLASH_COMPLETE) && (WRP3_Data != 0xFF)) - { - OB->WRPR3 = WRP3_Data; - status = FLASH_WaitForLastOperation(ProgramTimeout); - } - - if(status != FLASH_TIMEOUT) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - return status; -} - -/********************************************************************* - * @fn FLASH_ReadOutProtection - * - * @brief Enables or disables the read out protection. - * - * @param Newstate - new state of the ReadOut Protection(ENABLE or DISABLE). - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState) -{ - FLASH_Status status = FLASH_COMPLETE; - status = FLASH_WaitForLastOperation(EraseTimeout); - if(status == FLASH_COMPLETE) - { - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - FLASH->CTLR |= CR_OPTER_Set; - FLASH->CTLR |= CR_STRT_Set; - status = FLASH_WaitForLastOperation(EraseTimeout); - if(status == FLASH_COMPLETE) - { - FLASH->CTLR &= CR_OPTER_Reset; - FLASH->CTLR |= CR_OPTPG_Set; - if(NewState != DISABLE) - { - OB->RDPR = 0x00; - } - else - { - OB->RDPR = RDP_Key; - } - status = FLASH_WaitForLastOperation(EraseTimeout); - - if(status != FLASH_TIMEOUT) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - else - { - if(status != FLASH_TIMEOUT) - { - FLASH->CTLR &= CR_OPTER_Reset; - } - } - } - return status; -} - -/********************************************************************* - * @fn FLASH_UserOptionByteConfig - * - * @brief Programs the FLASH User Option Byte - IWDG_SW / RST_STOP / RST_STDBY. - * - * @param OB_IWDG - Selects the IWDG mode - * OB_IWDG_SW - Software IWDG selected - * OB_IWDG_HW - Hardware IWDG selected - * OB_STOP - Reset event when entering STOP mode. - * OB_STOP_NoRST - No reset generated when entering in STOP - * OB_STOP_RST - Reset generated when entering in STOP - * OB_STDBY - Reset event when entering Standby mode. - * OB_STDBY_NoRST - No reset generated when entering in STANDBY - * OB_STDBY_RST - Reset generated when entering in STANDBY - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. - */ -FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY) -{ - FLASH_Status status = FLASH_COMPLETE; - - FLASH->OBKEYR = FLASH_KEY1; - FLASH->OBKEYR = FLASH_KEY2; - status = FLASH_WaitForLastOperation(ProgramTimeout); - - if(status == FLASH_COMPLETE) - { - FLASH->CTLR |= CR_OPTPG_Set; - - OB->USER = OB_IWDG | (uint16_t)(OB_STOP | (uint16_t)(OB_STDBY | ((uint16_t)0xF8))); - - status = FLASH_WaitForLastOperation(ProgramTimeout); - if(status != FLASH_TIMEOUT) - { - FLASH->CTLR &= CR_OPTPG_Reset; - } - } - return status; -} - -/********************************************************************* - * @fn FLASH_GetUserOptionByte - * - * @brief Returns the FLASH User Option Bytes values. - * - * @return The FLASH User Option Bytes values:IWDG_SW(Bit0), RST_STOP(Bit1) - * and RST_STDBY(Bit2). - */ -uint32_t FLASH_GetUserOptionByte(void) -{ - return (uint32_t)(FLASH->OBR >> 2); -} - -/********************************************************************* - * @fn FLASH_GetWriteProtectionOptionByte - * - * @brief Returns the FLASH Write Protection Option Bytes Register value. - * - * @return The FLASH Write Protection Option Bytes Register value. - */ -uint32_t FLASH_GetWriteProtectionOptionByte(void) -{ - return (uint32_t)(FLASH->WPR); -} - -/********************************************************************* - * @fn FLASH_GetReadOutProtectionStatus - * - * @brief Checks whether the FLASH Read Out Protection Status is set or not. - * - * @return FLASH ReadOut Protection Status(SET or RESET) - */ -FlagStatus FLASH_GetReadOutProtectionStatus(void) -{ - FlagStatus readoutstatus = RESET; - if((FLASH->OBR & RDPRT_Mask) != (uint32_t)RESET) - { - readoutstatus = SET; - } - else - { - readoutstatus = RESET; - } - return readoutstatus; -} - -/********************************************************************* - * @fn FLASH_GetPrefetchBufferStatus - * - * @brief Checks whether the FLASH Prefetch Buffer status is set or not. - * - * @return FLASH ReadOut Protection Status(SET or RESET) - */ -FlagStatus FLASH_GetPrefetchBufferStatus(void) -{ - FlagStatus bitstatus = RESET; - - if((FLASH->ACTLR & ACR_PRFTBS_Mask) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn FLASH_ITConfig - * - * @brief Enables or disables the specified FLASH interrupts. - * - * @param FLASH_IT - specifies the FLASH interrupt sources to be enabled or disabled. - * FLASH_IT_ERROR - FLASH Error Interrupt - * FLASH_IT_EOP - FLASH end of operation Interrupt - * NewState - new state of the specified Flash interrupts(ENABLE or DISABLE). - * - * @return FLASH Prefetch Buffer Status (SET or RESET). - */ -void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - FLASH->CTLR |= FLASH_IT; - } - else - { - FLASH->CTLR &= ~(uint32_t)FLASH_IT; - } -} - -/********************************************************************* - * @fn FLASH_GetFlagStatus - * - * @brief Checks whether the specified FLASH flag is set or not. - * - * @param FLASH_FLAG - specifies the FLASH flag to check. - * FLASH_FLAG_BSY - FLASH Busy flag - * FLASH_FLAG_PGERR - FLASH Program error flag - * FLASH_FLAG_WRPRTERR - FLASH Write protected error flag - * FLASH_FLAG_EOP - FLASH End of Operation flag - * FLASH_FLAG_OPTERR - FLASH Option Byte error flag - * - * @return The new state of FLASH_FLAG (SET or RESET). - */ -FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG) -{ - FlagStatus bitstatus = RESET; - - if(FLASH_FLAG == FLASH_FLAG_OPTERR) - { - if((FLASH->OBR & FLASH_FLAG_OPTERR) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - else - { - if((FLASH->STATR & FLASH_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - } - return bitstatus; -} - -/********************************************************************* - * @fn FLASH_ClearFlag - * - * @brief Clears the FLASH's pending flags. - * - * @param FLASH_FLAG - specifies the FLASH flags to clear. - * FLASH_FLAG_PGERR - FLASH Program error flag - * FLASH_FLAG_WRPRTERR - FLASH Write protected error flag - * FLASH_FLAG_EOP - FLASH End of Operation flag - * - * @return none - */ -void FLASH_ClearFlag(uint32_t FLASH_FLAG) -{ - FLASH->STATR = FLASH_FLAG; -} - -/********************************************************************* - * @fn FLASH_GetStatus - * - * @brief Returns the FLASH Status. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP or FLASH_COMPLETE. - */ -FLASH_Status FLASH_GetStatus(void) -{ - FLASH_Status flashstatus = FLASH_COMPLETE; - - if((FLASH->STATR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY) - { - flashstatus = FLASH_BUSY; - } - else - { - if((FLASH->STATR & FLASH_FLAG_PGERR) != 0) - { - flashstatus = FLASH_ERROR_PG; - } - else - { - if((FLASH->STATR & FLASH_FLAG_WRPRTERR) != 0) - { - flashstatus = FLASH_ERROR_WRP; - } - else - { - flashstatus = FLASH_COMPLETE; - } - } - } - return flashstatus; -} - -/********************************************************************* - * @fn FLASH_GetBank1Status - * - * @brief Returns the FLASH Bank1 Status. - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP or FLASH_COMPLETE. - */ -FLASH_Status FLASH_GetBank1Status(void) -{ - FLASH_Status flashstatus = FLASH_COMPLETE; - - if((FLASH->STATR & FLASH_FLAG_BANK1_BSY) == FLASH_FLAG_BSY) - { - flashstatus = FLASH_BUSY; - } - else - { - if((FLASH->STATR & FLASH_FLAG_BANK1_PGERR) != 0) - { - flashstatus = FLASH_ERROR_PG; - } - else - { - if((FLASH->STATR & FLASH_FLAG_BANK1_WRPRTERR) != 0) - { - flashstatus = FLASH_ERROR_WRP; - } - else - { - flashstatus = FLASH_COMPLETE; - } - } - } - return flashstatus; -} - -/********************************************************************* - * @fn FLASH_WaitForLastOperation - * - * @brief Waits for a Flash operation to complete or a TIMEOUT to occur. - * - * @param Timeout - FLASH programming Timeout - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP or FLASH_COMPLETE. - */ -FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_GetBank1Status(); - while((status == FLASH_BUSY) && (Timeout != 0x00)) - { - status = FLASH_GetBank1Status(); - Timeout--; - } - if(Timeout == 0x00) - { - status = FLASH_TIMEOUT; - } - return status; -} - -/********************************************************************* - * @fn FLASH_WaitForLastBank1Operation - * - * @brief Waits for a Flash operation on Bank1 to complete or a TIMEOUT to occur. - * - * @param Timeout - FLASH programming Timeout - * - * @return FLASH Status - The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, - * FLASH_ERROR_WRP or FLASH_COMPLETE. - */ -FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout) -{ - FLASH_Status status = FLASH_COMPLETE; - - status = FLASH_GetBank1Status(); - while((status == FLASH_FLAG_BANK1_BSY) && (Timeout != 0x00)) - { - status = FLASH_GetBank1Status(); - Timeout--; - } - if(Timeout == 0x00) - { - status = FLASH_TIMEOUT; - } - return status; -} - -/********************************************************************* - * @fn FLASH_Unlock_Fast - * - * @brief Unlocks the Fast Program Erase Mode. - * - * @return none - */ -void FLASH_Unlock_Fast(void) -{ - /* Authorize the FPEC of Bank1 Access */ - FLASH->KEYR = FLASH_KEY1; - FLASH->KEYR = FLASH_KEY2; - - /* Fast program mode unlock */ - FLASH->MODEKEYR = FLASH_KEY1; - FLASH->MODEKEYR = FLASH_KEY2; -} - -/********************************************************************* - * @fn FLASH_Unlock_Fast - * - * @brief Unlocks the Fast Program Erase Mode. - * - * @return none - */ -void FLASH_Lock_Fast(void) -{ - FLASH->CTLR |= CR_LOCK_Set; -} - -/********************************************************************* - * @fn FLASH_BufReset - * - * @brief Flash Buffer reset. - * - * @return none - */ -void FLASH_BufReset(void) -{ - FLASH->CTLR |= CR_PAGE_PG; - FLASH->CTLR |= CR_BUF_RST; - while(FLASH->STATR & SR_BSY) - ; - FLASH->CTLR &= ~CR_PAGE_PG; -} - -/********************************************************************* - * @fn FLASH_BufLoad - * - * @brief Flash Buffer load(128 bit). - * - * @param Address - specifies the address to be programmed. - * Data0 - specifies the data0 to be programmed. - * Data1 - specifies the data1 to be programmed. - * Data2 - specifies the data2 to be programmed. - * Data3 - specifies the data3 to be programmed. - * - * @return none - */ -void FLASH_BufLoad(uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3) -{ - if((Address >= ValidAddrStart) && (Address < ValidAddrEnd)) - { - FLASH->CTLR |= CR_PAGE_PG; - *(__IO uint32_t *)(Address + 0x00) = Data0; - *(__IO uint32_t *)(Address + 0x04) = Data1; - *(__IO uint32_t *)(Address + 0x08) = Data2; - *(__IO uint32_t *)(Address + 0x0C) = Data3; - FLASH->CTLR |= CR_BUF_LOAD; - while(FLASH->STATR & SR_BSY) - ; - FLASH->CTLR &= ~CR_PAGE_PG; - - *(__IO uint32_t *)0x40022034 = *(__IO uint32_t *)((Address & 0xFFFFFFFC) ^ 0x00001000); - } -} - -/********************************************************************* - * @fn FLASH_ErasePage_Fast - * - * @brief Erases a specified FLASH page (1page = 256Byte). - * - * @param Page_Address - The page address to be erased. - * - * @return none - */ -void FLASH_ErasePage_Fast(uint32_t Page_Address) -{ - if((Page_Address >= ValidAddrStart) && (Page_Address < ValidAddrEnd)) - { - FLASH->CTLR |= CR_PAGE_ER; - FLASH->ADDR = Page_Address; - FLASH->CTLR |= CR_STRT_Set; - while(FLASH->STATR & SR_BSY) - ; - FLASH->CTLR &= ~CR_PAGE_ER; - - *(__IO uint32_t *)0x40022034 = *(__IO uint32_t *)((Page_Address & 0xFFFFFFFC) ^ 0x00001000); - } -} - -/********************************************************************* - * @fn FLASH_ProgramPage_Fast - * - * @brief Program a specified FLASH page (1page = 256Byte). - * - * @param Page_Address - The page address to be programed. - * - * @return none - */ -void FLASH_ProgramPage_Fast(uint32_t Page_Address) -{ - if((Page_Address >= ValidAddrStart) && (Page_Address < ValidAddrEnd)) - { - FLASH->CTLR |= CR_PAGE_PG; - FLASH->ADDR = Page_Address; - FLASH->CTLR |= CR_STRT_Set; - while(FLASH->STATR & SR_BSY) - ; - FLASH->CTLR &= ~CR_PAGE_PG; - - *(__IO uint32_t *)0x40022034 = *(__IO uint32_t *)((Page_Address & 0xFFFFFFFC) ^ 0x00001000); - } -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_gpio.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_gpio.c deleted file mode 100644 index 737b0fe..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_gpio.c +++ /dev/null @@ -1,538 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_gpio.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the GPIO firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_gpio.h" -#include "ch32v10x_rcc.h" - -/* MASK */ -#define ECR_PORTPINCONFIG_MASK ((uint16_t)0xFF80) -#define LSB_MASK ((uint16_t)0xFFFF) -#define DBGAFR_POSITION_MASK ((uint32_t)0x000F0000) -#define DBGAFR_SWJCFG_MASK ((uint32_t)0xF0FFFFFF) -#define DBGAFR_LOCATION_MASK ((uint32_t)0x00200000) -#define DBGAFR_NUMBITS_MASK ((uint32_t)0x00100000) - -/********************************************************************* - * @fn GPIO_DeInit - * - * @brief Deinitializes the GPIOx peripheral registers to their default - * reset values. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * - * @return none - */ -void GPIO_DeInit(GPIO_TypeDef *GPIOx) -{ - if(GPIOx == GPIOA) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE); - } - else if(GPIOx == GPIOB) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE); - } - else if(GPIOx == GPIOC) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE); - } - else if(GPIOx == GPIOD) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE); - } - else if(GPIOx == GPIOE) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE); - } - else if(GPIOx == GPIOF) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, DISABLE); - } - else - { - if(GPIOx == GPIOG) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE); - } - } -} - -/********************************************************************* - * @fn GPIO_AFIODeInit - * - * @brief Deinitializes the Alternate Functions (remap, event control - * and EXTI configuration) registers to their default reset values. - * - * @return none - */ -void GPIO_AFIODeInit(void) -{ - RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, DISABLE); -} - -/********************************************************************* - * @fn GPIO_Init - * - * @brief GPIOx - where x can be (A..G) to select the GPIO peripheral. - * - * @param GPIO_InitStruct - pointer to a GPIO_InitTypeDef structure that - * contains the configuration information for the specified GPIO peripheral. - * - * @return none - */ -void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct) -{ - uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00; - uint32_t tmpreg = 0x00, pinmask = 0x00; - - currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F); - - if((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00) - { - currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed; - } - - if(((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00) - { - tmpreg = GPIOx->CFGLR; - - for(pinpos = 0x00; pinpos < 0x08; pinpos++) - { - pos = ((uint32_t)0x01) << pinpos; - currentpin = (GPIO_InitStruct->GPIO_Pin) & pos; - - if(currentpin == pos) - { - pos = pinpos << 2; - pinmask = ((uint32_t)0x0F) << pos; - tmpreg &= ~pinmask; - tmpreg |= (currentmode << pos); - - if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD) - { - GPIOx->BCR = (((uint32_t)0x01) << pinpos); - } - else - { - if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU) - { - GPIOx->BSHR = (((uint32_t)0x01) << pinpos); - } - } - } - } - GPIOx->CFGLR = tmpreg; - } - - if(GPIO_InitStruct->GPIO_Pin > 0x00FF) - { - tmpreg = GPIOx->CFGHR; - - for(pinpos = 0x00; pinpos < 0x08; pinpos++) - { - pos = (((uint32_t)0x01) << (pinpos + 0x08)); - currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos); - - if(currentpin == pos) - { - pos = pinpos << 2; - pinmask = ((uint32_t)0x0F) << pos; - tmpreg &= ~pinmask; - tmpreg |= (currentmode << pos); - - if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD) - { - GPIOx->BCR = (((uint32_t)0x01) << (pinpos + 0x08)); - } - - if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU) - { - GPIOx->BSHR = (((uint32_t)0x01) << (pinpos + 0x08)); - } - } - } - GPIOx->CFGHR = tmpreg; - } -} - -/********************************************************************* - * @fn GPIO_StructInit - * - * @brief Fills each GPIO_InitStruct member with its default - * - * @param GPIO_InitStruct - pointer to a GPIO_InitTypeDef structure - * which will be initialized. - * - * @return none - */ -void GPIO_StructInit(GPIO_InitTypeDef *GPIO_InitStruct) -{ - GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All; - GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING; -} - -/********************************************************************* - * @fn GPIO_ReadInputDataBit - * - * @brief GPIOx - where x can be (A..G) 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). - * - * @return The input port pin value. - */ -uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) -{ - uint8_t bitstatus = 0x00; - - if((GPIOx->INDR & GPIO_Pin) != (uint32_t)Bit_RESET) - { - bitstatus = (uint8_t)Bit_SET; - } - else - { - bitstatus = (uint8_t)Bit_RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn GPIO_ReadInputData - * - * @brief Reads the specified GPIO input data port. - * - * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. - * - * @return The input port pin value. - */ -uint16_t GPIO_ReadInputData(GPIO_TypeDef *GPIOx) -{ - return ((uint16_t)GPIOx->INDR); -} - -/********************************************************************* - * @fn GPIO_ReadOutputDataBit - * - * @brief Reads the specified output data port bit. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * GPIO_Pin - specifies the port bit to read. - * This parameter can be GPIO_Pin_x where x can be (0..15). - * - * @return none - */ -uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) -{ - uint8_t bitstatus = 0x00; - - if((GPIOx->OUTDR & GPIO_Pin) != (uint32_t)Bit_RESET) - { - bitstatus = (uint8_t)Bit_SET; - } - else - { - bitstatus = (uint8_t)Bit_RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn GPIO_ReadOutputData - * - * @brief Reads the specified GPIO output data port. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * - * @return GPIO output port pin value. - */ -uint16_t GPIO_ReadOutputData(GPIO_TypeDef *GPIOx) -{ - return ((uint16_t)GPIOx->OUTDR); -} - -/********************************************************************* - * @fn GPIO_SetBits - * - * @brief Sets the selected data port bits. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * GPIO_Pin - specifies the port bits to be written. - * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). - * - * @return none - */ -void GPIO_SetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) -{ - GPIOx->BSHR = GPIO_Pin; -} - -/********************************************************************* - * @fn GPIO_ResetBits - * - * @brief Clears the selected data port bits. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * GPIO_Pin - specifies the port bits to be written. - * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). - * - * @return none - */ -void GPIO_ResetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) -{ - GPIOx->BCR = GPIO_Pin; -} - -/********************************************************************* - * @fn GPIO_WriteBit - * - * @brief Sets or clears the selected data port bit. - * - * @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). - * BitVal - specifies the value to be written to the selected bit. - * Bit_SetL - to clear the port pin. - * Bit_SetH - to set the port pin. - * - * @return none - */ -void GPIO_WriteBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, BitAction BitVal) -{ - if(BitVal != Bit_RESET) - { - GPIOx->BSHR = GPIO_Pin; - } - else - { - GPIOx->BCR = GPIO_Pin; - } -} - -/********************************************************************* - * @fn GPIO_Write - * - * @brief Writes data to the specified GPIO data port. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * PortVal - specifies the value to be written to the port output data register. - * - * @return none - */ -void GPIO_Write(GPIO_TypeDef *GPIOx, uint16_t PortVal) -{ - GPIOx->OUTDR = PortVal; -} - -/********************************************************************* - * @fn GPIO_PinLockConfig - * - * @brief Locks GPIO Pins configuration registers. - * - * @param GPIOx - where x can be (A..G) to select the GPIO peripheral. - * GPIO_Pin - specifies the port bit to be written. - * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). - * - * @return none - */ -void GPIO_PinLockConfig(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) -{ - uint32_t tmp = 0x00010000; - - tmp |= GPIO_Pin; - GPIOx->LCKR = tmp; - GPIOx->LCKR = GPIO_Pin; - GPIOx->LCKR = tmp; - tmp = GPIOx->LCKR; - tmp = GPIOx->LCKR; -} - -/********************************************************************* - * @fn GPIO_EventOutputConfig - * - * @brief Selects the GPIO pin used as Event output. - * - * @param GPIO_PortSource - selects the GPIO port to be used as source - * for Event output. - * This parameter can be GPIO_PortSourceGPIOx where x can be (A..E). - * GPIO_PinSource - specifies the pin for the Event output. - * This parameter can be GPIO_PinSourcex where x can be (0..15). - * - * @return none - */ -void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) -{ - uint32_t tmpreg = 0x00; - - tmpreg = AFIO->ECR; - tmpreg &= ECR_PORTPINCONFIG_MASK; - tmpreg |= (uint32_t)GPIO_PortSource << 0x04; - tmpreg |= GPIO_PinSource; - AFIO->ECR = tmpreg; -} - -/********************************************************************* - * @fn GPIO_EventOutputCmd - * - * @brief Enables or disables the Event Output. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void GPIO_EventOutputCmd(FunctionalState NewState) -{ - if(NewState) - { - AFIO->ECR |= (1 << 7); - } - else - { - AFIO->ECR &= ~(1 << 7); - } -} - -/********************************************************************* - * @fn GPIO_PinRemapConfig - * - * @brief Changes the mapping of the specified pin. - * - * @param GPIO_Remap - selects the pin to remap. - * GPIO_Remap_SPI1 - SPI1 Alternate Function mapping - * GPIO_Remap_I2C1 - I2C1 Alternate Function mapping - * GPIO_Remap_USART1 - USART1 Alternate Function mapping - * GPIO_Remap_USART2 - USART2 Alternate Function mapping - * GPIO_PartialRemap_USART3 - USART3 Partial Alternate Function mapping - * GPIO_FullRemap_USART3 - USART3 Full Alternate Function mapping - * GPIO_PartialRemap_TIM1 - TIM1 Partial Alternate Function mapping - * GPIO_FullRemap_TIM1 - TIM1 Full Alternate Function mapping - * GPIO_PartialRemap1_TIM2 - TIM2 Partial1 Alternate Function mapping - * GPIO_PartialRemap2_TIM2 - TIM2 Partial2 Alternate Function mapping - * GPIO_FullRemap_TIM2 - TIM2 Full Alternate Function mapping - * GPIO_PartialRemap_TIM3 - TIM3 Partial Alternate Function mapping - * GPIO_FullRemap_TIM3 - TIM3 Full Alternate Function mapping - * GPIO_Remap_TIM4 - TIM4 Alternate Function mapping - * GPIO_Remap1_CAN1 - CAN1 Alternate Function mapping - * GPIO_Remap2_CAN1 - CAN1 Alternate Function mapping - * GPIO_Remap_PD01 - PD01 Alternate Function mapping - * GPIO_Remap_ADC1_ETRGINJ - ADC1 External Trigger Injected Conversion remapping - * GPIO_Remap_ADC1_ETRGREG - ADC1 External Trigger Regular Conversion remapping - * GPIO_Remap_ADC2_ETRGINJ - ADC2 External Trigger Injected Conversion remapping - * GPIO_Remap_ADC2_ETRGREG - ADC2 External Trigger Regular Conversion remapping - * GPIO_Remap_ETH - Ethernet remapping - * GPIO_Remap_CAN2 - CAN2 remapping - * GPIO_Remap_MII_RMII_SEL - MII or RMII selection - * GPIO_Remap_SWJ_NoJTRST - Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST - * GPIO_Remap_SWJ_JTAGDisable - JTAG-DP Disabled and SW-DP Enabled - * GPIO_Remap_SWJ_Disable - Full SWJ Disabled (JTAG-DP + SW-DP) - * GPIO_Remap_TIM2ITR1_PTP_SOF - Ethernet PTP output or USB OTG SOF (Start of Frame) connected - * to TIM2 Internal Trigger 1 for calibration - * GPIO_Remap_TIM2ITR1_PTP_SOF - Ethernet PTP output or USB OTG SOF (Start of Frame) - * GPIO_Remap_TIM8 - TIM8 Alternate Function mapping - * GPIO_PartialRemap_TIM9 - TIM9 Partial Alternate Function mapping - * GPIO_FullRemap_TIM9 - TIM9 Full Alternate Function mapping - * GPIO_PartialRemap_TIM10 - TIM10 Partial Alternate Function mapping - * GPIO_FullRemap_TIM10 - TIM10 Full Alternate Function mapping - * GPIO_Remap_FSMC_NADV - FSMC_NADV Alternate Function mapping - * GPIO_PartialRemap_USART4 - USART4 Partial Alternate Function mapping - * GPIO_FullRemap_USART4 - USART4 Full Alternate Function mapping - * GPIO_PartialRemap_USART5 - USART5 Partial Alternate Function mapping - * GPIO_FullRemap_USART5 - USART5 Full Alternate Function mapping - * GPIO_PartialRemap_USART6 - USART6 Partial Alternate Function mapping - * GPIO_FullRemap_USART6 - USART6 Full Alternate Function mapping - * GPIO_PartialRemap_USART7 - USART7 Partial Alternate Function mapping - * GPIO_FullRemap_USART7 - USART7 Full Alternate Function mapping - * GPIO_PartialRemap_USART8 - USART8 Partial Alternate Function mapping - * GPIO_FullRemap_USART8 - USART8 Full Alternate Function mapping - * GPIO_Remap_USART1_HighBit - USART1 Alternate Function mapping high bit - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState) -{ - uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00; - - if((GPIO_Remap & 0x80000000) == 0x80000000) - { - tmpreg = AFIO->PCFR2; - } - else - { - tmpreg = AFIO->PCFR1; - } - - tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10; - tmp = GPIO_Remap & LSB_MASK; - - if((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) - { - tmpreg &= DBGAFR_SWJCFG_MASK; - AFIO->PCFR1 &= DBGAFR_SWJCFG_MASK; - } - else if((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK) - { - tmp1 = ((uint32_t)0x03) << tmpmask; - tmpreg &= ~tmp1; - tmpreg |= ~DBGAFR_SWJCFG_MASK; - } - else - { - tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15) * 0x10)); - tmpreg |= ~DBGAFR_SWJCFG_MASK; - } - - if(NewState != DISABLE) - { - tmpreg |= (tmp << ((GPIO_Remap >> 0x15) * 0x10)); - } - - if((GPIO_Remap & 0x80000000) == 0x80000000) - { - AFIO->PCFR2 = tmpreg; - } - else - { - AFIO->PCFR1 = tmpreg; - } -} - -/********************************************************************* - * @fn GPIO_EXTILineConfig - * - * @brief Selects the GPIO pin used as EXTI Line. - * - * @param GPIO_PortSource - selects the GPIO port to be used as source for EXTI lines. - * This parameter can be GPIO_PortSourceGPIOx where x can be (A..G). - * GPIO_PinSource - specifies the EXTI line to be configured. - * This parameter can be GPIO_PinSourcex where x can be (0..15). - * - * @return none - */ -void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) -{ - uint32_t tmp = 0x00; - - tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)); - AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp; - AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03))); -} - - - - diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_i2c.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_i2c.c deleted file mode 100644 index 972ede0..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_i2c.c +++ /dev/null @@ -1,979 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_i2c.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the I2C firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_i2c.h" -#include "ch32v10x_rcc.h" - -/* I2C SPE mask */ -#define CTLR1_PE_Set ((uint16_t)0x0001) -#define CTLR1_PE_Reset ((uint16_t)0xFFFE) - -/* I2C START mask */ -#define CTLR1_START_Set ((uint16_t)0x0100) -#define CTLR1_START_Reset ((uint16_t)0xFEFF) - -/* I2C STOP mask */ -#define CTLR1_STOP_Set ((uint16_t)0x0200) -#define CTLR1_STOP_Reset ((uint16_t)0xFDFF) - -/* I2C ACK mask */ -#define CTLR1_ACK_Set ((uint16_t)0x0400) -#define CTLR1_ACK_Reset ((uint16_t)0xFBFF) - -/* I2C ENGC mask */ -#define CTLR1_ENGC_Set ((uint16_t)0x0040) -#define CTLR1_ENGC_Reset ((uint16_t)0xFFBF) - -/* I2C SWRST mask */ -#define CTLR1_SWRST_Set ((uint16_t)0x8000) -#define CTLR1_SWRST_Reset ((uint16_t)0x7FFF) - -/* I2C PEC mask */ -#define CTLR1_PEC_Set ((uint16_t)0x1000) -#define CTLR1_PEC_Reset ((uint16_t)0xEFFF) - -/* I2C ENPEC mask */ -#define CTLR1_ENPEC_Set ((uint16_t)0x0020) -#define CTLR1_ENPEC_Reset ((uint16_t)0xFFDF) - -/* I2C ENARP mask */ -#define CTLR1_ENARP_Set ((uint16_t)0x0010) -#define CTLR1_ENARP_Reset ((uint16_t)0xFFEF) - -/* I2C NOSTRETCH mask */ -#define CTLR1_NOSTRETCH_Set ((uint16_t)0x0080) -#define CTLR1_NOSTRETCH_Reset ((uint16_t)0xFF7F) - -/* I2C registers Masks */ -#define CTLR1_CLEAR_Mask ((uint16_t)0xFBF5) - -/* I2C DMAEN mask */ -#define CTLR2_DMAEN_Set ((uint16_t)0x0800) -#define CTLR2_DMAEN_Reset ((uint16_t)0xF7FF) - -/* I2C LAST mask */ -#define CTLR2_LAST_Set ((uint16_t)0x1000) -#define CTLR2_LAST_Reset ((uint16_t)0xEFFF) - -/* I2C FREQ mask */ -#define CTLR2_FREQ_Reset ((uint16_t)0xFFC0) - -/* I2C ADD0 mask */ -#define OADDR1_ADD0_Set ((uint16_t)0x0001) -#define OADDR1_ADD0_Reset ((uint16_t)0xFFFE) - -/* I2C ENDUAL mask */ -#define OADDR2_ENDUAL_Set ((uint16_t)0x0001) -#define OADDR2_ENDUAL_Reset ((uint16_t)0xFFFE) - -/* I2C ADD2 mask */ -#define OADDR2_ADD2_Reset ((uint16_t)0xFF01) - -/* I2C F/S mask */ -#define CKCFGR_FS_Set ((uint16_t)0x8000) - -/* I2C CCR mask */ -#define CKCFGR_CCR_Set ((uint16_t)0x0FFF) - -/* I2C FLAG mask */ -#define FLAG_Mask ((uint32_t)0x00FFFFFF) - -/* I2C Interrupt Enable mask */ -#define ITEN_Mask ((uint32_t)0x07000000) - -/********************************************************************* - * @fn I2C_DeInit - * - * @brief Deinitializes the I2Cx peripheral registers to their default - * reset values. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * - * @return none - */ -void I2C_DeInit(I2C_TypeDef *I2Cx) -{ - if(I2Cx == I2C1) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); - } - else - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, DISABLE); - } -} - -/********************************************************************* - * @fn I2C_Init - * - * @brief Initializes the I2Cx peripheral according to the specified - * parameters in the I2C_InitStruct. - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_InitStruct - pointer to a I2C_InitTypeDef structure that - * contains the configuration information for the specified I2C peripheral. - * - * @return none - */ -void I2C_Init(I2C_TypeDef *I2Cx, I2C_InitTypeDef *I2C_InitStruct) -{ - uint16_t tmpreg = 0, freqrange = 0; - uint16_t result = 0x04; - uint32_t pclk1 = 8000000; - - RCC_ClocksTypeDef rcc_clocks; - - tmpreg = I2Cx->CTLR2; - tmpreg &= CTLR2_FREQ_Reset; - RCC_GetClocksFreq(&rcc_clocks); - pclk1 = rcc_clocks.PCLK1_Frequency; - freqrange = (uint16_t)(pclk1 / 1000000); - tmpreg |= freqrange; - I2Cx->CTLR2 = tmpreg; - - I2Cx->CTLR1 &= CTLR1_PE_Reset; - tmpreg = 0; - - if(I2C_InitStruct->I2C_ClockSpeed <= 100000) - { - result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed << 1)); - - if(result < 0x04) - { - result = 0x04; - } - - tmpreg |= result; - I2Cx->RTR = freqrange + 1; - } - else - { - if(I2C_InitStruct->I2C_DutyCycle == I2C_DutyCycle_2) - { - result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed * 3)); - } - else - { - result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed * 25)); - result |= I2C_DutyCycle_16_9; - } - - if((result & CKCFGR_CCR_Set) == 0) - { - result |= (uint16_t)0x0001; - } - - tmpreg |= (uint16_t)(result | CKCFGR_FS_Set); - I2Cx->RTR = (uint16_t)(((freqrange * (uint16_t)300) / (uint16_t)1000) + (uint16_t)1); - } - - I2Cx->CKCFGR = tmpreg; - I2Cx->CTLR1 |= CTLR1_PE_Set; - - tmpreg = I2Cx->CTLR1; - tmpreg &= CTLR1_CLEAR_Mask; - tmpreg |= (uint16_t)((uint32_t)I2C_InitStruct->I2C_Mode | I2C_InitStruct->I2C_Ack); - I2Cx->CTLR1 = tmpreg; - - I2Cx->OADDR1 = (I2C_InitStruct->I2C_AcknowledgedAddress | I2C_InitStruct->I2C_OwnAddress1); -} - -/********************************************************************* - * @fn I2C_StructInit - * - * @brief Fills each I2C_InitStruct member with its default value. - * - * @param I2C_InitStruct - pointer to an I2C_InitTypeDef structure which - * will be initialized. - * - * @return none - */ -void I2C_StructInit(I2C_InitTypeDef *I2C_InitStruct) -{ - I2C_InitStruct->I2C_ClockSpeed = 5000; - I2C_InitStruct->I2C_Mode = I2C_Mode_I2C; - I2C_InitStruct->I2C_DutyCycle = I2C_DutyCycle_2; - I2C_InitStruct->I2C_OwnAddress1 = 0; - I2C_InitStruct->I2C_Ack = I2C_Ack_Disable; - I2C_InitStruct->I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; -} - -/********************************************************************* - * @fn I2C_Cmd - * - * @brief Enables or disables the specified I2C peripheral. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_Cmd(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR1 |= CTLR1_PE_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_PE_Reset; - } -} - -/********************************************************************* - * @fn I2C_DMACmd - * - * @brief Enables or disables the specified I2C DMA requests. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_DMACmd(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR2 |= CTLR2_DMAEN_Set; - } - else - { - I2Cx->CTLR2 &= CTLR2_DMAEN_Reset; - } -} - -/********************************************************************* - * @fn I2C_DMALastTransferCmd - * - * @brief Specifies if the next DMA transfer will be the last one. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_DMALastTransferCmd(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR2 |= CTLR2_LAST_Set; - } - else - { - I2Cx->CTLR2 &= CTLR2_LAST_Reset; - } -} - -/********************************************************************* - * @fn I2C_GenerateSTART - * - * @brief Generates I2Cx communication START condition. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_GenerateSTART(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR1 |= CTLR1_START_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_START_Reset; - } -} - -/********************************************************************* - * @fn I2C_GenerateSTOP - * - * @brief Generates I2Cx communication STOP condition. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_GenerateSTOP(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR1 |= CTLR1_STOP_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_STOP_Reset; - } -} - -/********************************************************************* - * @fn I2C_AcknowledgeConfig - * - * @brief Enables or disables the specified I2C acknowledge feature. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_AcknowledgeConfig(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR1 |= CTLR1_ACK_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_ACK_Reset; - } -} - -/********************************************************************* - * @fn I2C_OwnAddress2Config - * - * @brief Configures the specified I2C own address2. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * Address - specifies the 7bit I2C own address2. - * - * @return none - */ -void I2C_OwnAddress2Config(I2C_TypeDef *I2Cx, uint8_t Address) -{ - uint16_t tmpreg = 0; - - tmpreg = I2Cx->OADDR2; - tmpreg &= OADDR2_ADD2_Reset; - tmpreg |= (uint16_t)((uint16_t)Address & (uint16_t)0x00FE); - I2Cx->OADDR2 = tmpreg; -} - -/********************************************************************* - * @fn I2C_DualAddressCmd - * - * @brief Enables or disables the specified I2C dual addressing mode. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_DualAddressCmd(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->OADDR2 |= OADDR2_ENDUAL_Set; - } - else - { - I2Cx->OADDR2 &= OADDR2_ENDUAL_Reset; - } -} - -/********************************************************************* - * @fn I2C_GeneralCallCmd - * - * @brief Enables or disables the specified I2C general call feature. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_GeneralCallCmd(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR1 |= CTLR1_ENGC_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_ENGC_Reset; - } -} - -/********************************************************************* - * @fn I2C_ITConfig - * - * @brief Enables or disables the specified I2C interrupts. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_IT - specifies the I2C interrupts sources to be enabled or disabled. - * I2C_IT_BUF - Buffer interrupt mask. - * I2C_IT_EVT - Event interrupt mask. - * I2C_IT_ERR - Error interrupt mask. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_ITConfig(I2C_TypeDef *I2Cx, uint16_t I2C_IT, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR2 |= I2C_IT; - } - else - { - I2Cx->CTLR2 &= (uint16_t)~I2C_IT; - } -} - -/********************************************************************* - * @fn I2C_SendData - * - * @brief Sends a data byte through the I2Cx peripheral. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * Data - Byte to be transmitted. - * - * @return none - */ -void I2C_SendData(I2C_TypeDef *I2Cx, uint8_t Data) -{ - I2Cx->DATAR = Data; -} - -/********************************************************************* - * @fn I2C_ReceiveData - * - * @brief Returns the most recent received data by the I2Cx peripheral. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * - * @return The value of the received data. - */ -uint8_t I2C_ReceiveData(I2C_TypeDef *I2Cx) -{ - return (uint8_t)I2Cx->DATAR; -} - -/********************************************************************* - * @fn I2C_Send7bitAddress - * - * @brief Transmits the address byte to select the slave device. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * Address - specifies the slave address which will be transmitted. - * I2C_Direction - specifies whether the I2C device will be a - * Transmitter or a Receiver. - * I2C_Direction_Transmitter - Transmitter mode. - * I2C_Direction_Receiver - Receiver mode. - * - * @return none - */ -void I2C_Send7bitAddress(I2C_TypeDef *I2Cx, uint8_t Address, uint8_t I2C_Direction) -{ - if(I2C_Direction != I2C_Direction_Transmitter) - { - Address |= OADDR1_ADD0_Set; - } - else - { - Address &= OADDR1_ADD0_Reset; - } - - I2Cx->DATAR = Address; -} - -/********************************************************************* - * @fn I2C_ReadRegister - * - * @brief Reads the specified I2C register and returns its value. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_Register - specifies the register to read. - * I2C_Register_CTLR1. - * I2C_Register_CTLR2. - * I2C_Register_OADDR1. - * I2C_Register_OADDR2. - * I2C_Register_DATAR. - * I2C_Register_STAR1. - * I2C_Register_STAR2. - * I2C_Register_CKCFGR. - * I2C_Register_RTR. - * - * @return none - */ -uint16_t I2C_ReadRegister(I2C_TypeDef *I2Cx, uint8_t I2C_Register) -{ - __IO uint32_t tmp = 0; - - tmp = (uint32_t)I2Cx; - tmp += I2C_Register; - - return (*(__IO uint16_t *)tmp); -} - -/********************************************************************* - * @fn I2C_SoftwareResetCmd - * - * @brief Enables or disables the specified I2C software reset. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_SoftwareResetCmd(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR1 |= CTLR1_SWRST_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_SWRST_Reset; - } -} - -/********************************************************************* - * @fn I2C_NACKPositionConfig - * - * @brief Selects the specified I2C NACK position in master receiver mode. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_NACKPosition - specifies the NACK position. - * I2C_NACKPosition_Next - indicates that the next byte will be - * the last received byte. - * I2C_NACKPosition_Current - indicates that current byte is the - * last received byte. - * - * @return none - */ -void I2C_NACKPositionConfig(I2C_TypeDef *I2Cx, uint16_t I2C_NACKPosition) -{ - if(I2C_NACKPosition == I2C_NACKPosition_Next) - { - I2Cx->CTLR1 |= I2C_NACKPosition_Next; - } - else - { - I2Cx->CTLR1 &= I2C_NACKPosition_Current; - } -} - -/********************************************************************* - * @fn I2C_SMBusAlertConfig - * - * @brief Drives the SMBusAlert pin high or low for the specified I2C. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_SMBusAlert - specifies SMBAlert pin level. - * I2C_SMBusAlert_Low - SMBAlert pin driven low. - * I2C_SMBusAlert_High - SMBAlert pin driven high. - * - * @return none - */ -void I2C_SMBusAlertConfig(I2C_TypeDef *I2Cx, uint16_t I2C_SMBusAlert) -{ - if(I2C_SMBusAlert == I2C_SMBusAlert_Low) - { - I2Cx->CTLR1 |= I2C_SMBusAlert_Low; - } - else - { - I2Cx->CTLR1 &= I2C_SMBusAlert_High; - } -} - -/********************************************************************* - * @fn I2C_TransmitPEC - * - * @brief Enables or disables the specified I2C PEC transfer. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_TransmitPEC(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR1 |= CTLR1_PEC_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_PEC_Reset; - } -} - -/********************************************************************* - * @fn I2C_PECPositionConfig - * - * @brief Selects the specified I2C PEC position. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_PECPosition - specifies the PEC position. - * I2C_PECPosition_Next - indicates that the next byte is PEC. - * I2C_PECPosition_Current - indicates that current byte is PEC. - * - * @return none - */ -void I2C_PECPositionConfig(I2C_TypeDef *I2Cx, uint16_t I2C_PECPosition) -{ - if(I2C_PECPosition == I2C_PECPosition_Next) - { - I2Cx->CTLR1 |= I2C_PECPosition_Next; - } - else - { - I2Cx->CTLR1 &= I2C_PECPosition_Current; - } -} - -/********************************************************************* - * @fn I2C_CalculatePEC - * - * @brief Enables or disables the PEC value calculation of the transferred bytes. - * - * @param I2Cx- where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_CalculatePEC(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR1 |= CTLR1_ENPEC_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_ENPEC_Reset; - } -} - -/********************************************************************* - * @fn I2C_GetPEC - * - * @brief Returns the PEC value for the specified I2C. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * - * @return The PEC value. - */ -uint8_t I2C_GetPEC(I2C_TypeDef *I2Cx) -{ - return ((I2Cx->STAR2) >> 8); -} - -/********************************************************************* - * @fn I2C_ARPCmd - * - * @brief Enables or disables the specified I2C ARP. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return The PEC value. - */ -void I2C_ARPCmd(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - I2Cx->CTLR1 |= CTLR1_ENARP_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_ENARP_Reset; - } -} - -/********************************************************************* - * @fn I2C_StretchClockCmd - * - * @brief Enables or disables the specified I2C Clock stretching. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2C_StretchClockCmd(I2C_TypeDef *I2Cx, FunctionalState NewState) -{ - if(NewState == DISABLE) - { - I2Cx->CTLR1 |= CTLR1_NOSTRETCH_Set; - } - else - { - I2Cx->CTLR1 &= CTLR1_NOSTRETCH_Reset; - } -} - -/********************************************************************* - * @fn I2C_FastModeDutyCycleConfig - * - * @brief Selects the specified I2C fast mode duty cycle. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_DutyCycle - specifies the fast mode duty cycle. - * I2C_DutyCycle_2 - I2C fast mode Tlow/Thigh = 2. - * I2C_DutyCycle_16_9 - I2C fast mode Tlow/Thigh = 16/9. - * - * @return none - */ -void I2C_FastModeDutyCycleConfig(I2C_TypeDef *I2Cx, uint16_t I2C_DutyCycle) -{ - if(I2C_DutyCycle != I2C_DutyCycle_16_9) - { - I2Cx->CKCFGR &= I2C_DutyCycle_2; - } - else - { - I2Cx->CKCFGR |= I2C_DutyCycle_16_9; - } -} - -/********************************************************************* - * @fn I2C_CheckEvent - * - * @brief Checks whether the last I2Cx Event is equal to the one passed - * as parameter. - * - * @param I2Cx- where x can be 1 or 2 to select the I2C peripheral. - * I2C_EVENT: specifies the event to be checked. - * I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED - EV1. - * I2C_EVENT_SLAVE_BYTE_RECEIVED - EV2. - * (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF) - EV2. - * (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL) - EV2. - * I2C_EVENT_SLAVE_BYTE_TRANSMITTED - EV3. - * (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF) - EV3. - * (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL) - EV3. - * I2C_EVENT_SLAVE_ACK_FAILURE - EV3_2. - * I2C_EVENT_SLAVE_STOP_DETECTED - EV4. - * I2C_EVENT_MASTER_MODE_SELECT - EV5. - * I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED - EV6. - * I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED - EV6. - * I2C_EVENT_MASTER_BYTE_RECEIVED - EV7. - * I2C_EVENT_MASTER_BYTE_TRANSMITTING - EV8. - * I2C_EVENT_MASTER_BYTE_TRANSMITTED - EV8_2. - * I2C_EVENT_MASTER_MODE_ADDRESS10 - EV9. - * - * @return none - */ -ErrorStatus I2C_CheckEvent(I2C_TypeDef *I2Cx, uint32_t I2C_EVENT) -{ - uint32_t lastevent = 0; - uint32_t flag1 = 0, flag2 = 0; - ErrorStatus status = ERROR; - - flag1 = I2Cx->STAR1; - flag2 = I2Cx->STAR2; - flag2 = flag2 << 16; - - lastevent = (flag1 | flag2) & FLAG_Mask; - - if((lastevent & I2C_EVENT) == I2C_EVENT) - { - status = SUCCESS; - } - else - { - status = ERROR; - } - - return status; -} - -/********************************************************************* - * @fn I2C_GetLastEvent - * - * @brief Returns the last I2Cx Event. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * - * @return none - */ -uint32_t I2C_GetLastEvent(I2C_TypeDef *I2Cx) -{ - uint32_t lastevent = 0; - uint32_t flag1 = 0, flag2 = 0; - - flag1 = I2Cx->STAR1; - flag2 = I2Cx->STAR2; - flag2 = flag2 << 16; - lastevent = (flag1 | flag2) & FLAG_Mask; - - return lastevent; -} - -/********************************************************************* - * @fn I2C_GetFlagStatus - * - * @brief Checks whether the last I2Cx Event is equal to the one passed - * as parameter. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_FLAG - specifies the flag to check. - * I2C_FLAG_DUALF - Dual flag (Slave mode). - * I2C_FLAG_SMBHOST - SMBus host header (Slave mode). - * I2C_FLAG_SMBDEFAULT - SMBus default header (Slave mode). - * I2C_FLAG_GENCALL - General call header flag (Slave mode). - * I2C_FLAG_TRA - Transmitter/Receiver flag. - * I2C_FLAG_BUSY - Bus busy flag. - * I2C_FLAG_MSL - Master/Slave flag. - * I2C_FLAG_SMBALERT - SMBus Alert flag. - * I2C_FLAG_TIMEOUT - Timeout or Tlow error flag. - * I2C_FLAG_PECERR - PEC error in reception flag. - * I2C_FLAG_OVR - Overrun/Underrun flag (Slave mode). - * I2C_FLAG_AF - Acknowledge failure flag. - * I2C_FLAG_ARLO - Arbitration lost flag (Master mode). - * I2C_FLAG_BERR - Bus error flag. - * I2C_FLAG_TXE - Data register empty flag (Transmitter). - * I2C_FLAG_RXNE- Data register not empty (Receiver) flag. - * I2C_FLAG_STOPF - Stop detection flag (Slave mode). - * I2C_FLAG_ADD10 - 10-bit header sent flag (Master mode). - * I2C_FLAG_BTF - Byte transfer finished flag. - * I2C_FLAG_ADDR - Address sent flag (Master mode) "ADSL" - * Address matched flag (Slave mode)"ENDA". - * I2C_FLAG_SB - Start bit flag (Master mode). - * - * @return none - */ -FlagStatus I2C_GetFlagStatus(I2C_TypeDef *I2Cx, uint32_t I2C_FLAG) -{ - FlagStatus bitstatus = RESET; - __IO uint32_t i2creg = 0, i2cxbase = 0; - - i2cxbase = (uint32_t)I2Cx; - i2creg = I2C_FLAG >> 28; - I2C_FLAG &= FLAG_Mask; - - if(i2creg != 0) - { - i2cxbase += 0x14; - } - else - { - I2C_FLAG = (uint32_t)(I2C_FLAG >> 16); - i2cxbase += 0x18; - } - - if(((*(__IO uint32_t *)i2cxbase) & I2C_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn I2C_ClearFlag - * - * @brief Clears the I2Cx's pending flags. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_FLAG - specifies the flag to clear. - * I2C_FLAG_SMBALERT - SMBus Alert flag. - * I2C_FLAG_TIMEOUT - Timeout or Tlow error flag. - * I2C_FLAG_PECERR - PEC error in reception flag. - * I2C_FLAG_OVR - Overrun/Underrun flag (Slave mode). - * I2C_FLAG_AF - Acknowledge failure flag. - * I2C_FLAG_ARLO - Arbitration lost flag (Master mode). - * I2C_FLAG_BERR - Bus error flag. - * - * @return none - */ -void I2C_ClearFlag(I2C_TypeDef *I2Cx, uint32_t I2C_FLAG) -{ - uint32_t flagpos = 0; - - flagpos = I2C_FLAG & FLAG_Mask; - I2Cx->STAR1 = (uint16_t)~flagpos; -} - -/********************************************************************* - * @fn I2C_GetITStatus - * - * @brief Checks whether the specified I2C interrupt has occurred or not. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * II2C_IT - specifies the interrupt source to check. - * I2C_IT_SMBALERT - SMBus Alert flag. - * I2C_IT_TIMEOUT - Timeout or Tlow error flag. - * I2C_IT_PECERR - PEC error in reception flag. - * I2C_IT_OVR - Overrun/Underrun flag (Slave mode). - * I2C_IT_AF - Acknowledge failure flag. - * I2C_IT_ARLO - Arbitration lost flag (Master mode). - * I2C_IT_BERR - Bus error flag. - * I2C_IT_TXE - Data register empty flag (Transmitter). - * I2C_IT_RXNE - Data register not empty (Receiver) flag. - * I2C_IT_STOPF - Stop detection flag (Slave mode). - * I2C_IT_ADD10 - 10-bit header sent flag (Master mode). - * I2C_IT_BTF - Byte transfer finished flag. - * I2C_IT_ADDR - Address sent flag (Master mode) "ADSL" Address matched - * flag (Slave mode)"ENDAD". - * I2C_IT_SB - Start bit flag (Master mode). - * - * @return none - */ -ITStatus I2C_GetITStatus(I2C_TypeDef *I2Cx, uint32_t I2C_IT) -{ - ITStatus bitstatus = RESET; - uint32_t enablestatus = 0; - - enablestatus = (uint32_t)(((I2C_IT & ITEN_Mask) >> 16) & (I2Cx->CTLR2)); - I2C_IT &= FLAG_Mask; - - if(((I2Cx->STAR1 & I2C_IT) != (uint32_t)RESET) && enablestatus) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn I2C_ClearITPendingBit - * - * @brief Clears the I2Cx interrupt pending bits. - * - * @param I2Cx - where x can be 1 or 2 to select the I2C peripheral. - * I2C_IT - specifies the interrupt pending bit to clear. - * I2C_IT_SMBALERT - SMBus Alert interrupt. - * I2C_IT_TIMEOUT - Timeout or Tlow error interrupt. - * I2C_IT_PECERR - PEC error in reception interrupt. - * I2C_IT_OVR - Overrun/Underrun interrupt (Slave mode). - * I2C_IT_AF - Acknowledge failure interrupt. - * I2C_IT_ARLO - Arbitration lost interrupt (Master mode). - * I2C_IT_BERR - Bus error interrupt. - * - * @return none - */ -void I2C_ClearITPendingBit(I2C_TypeDef *I2Cx, uint32_t I2C_IT) -{ - uint32_t flagpos = 0; - - flagpos = I2C_IT & FLAG_Mask; - I2Cx->STAR1 = (uint16_t)~flagpos; -} - - - - - - - diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_iwdg.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_iwdg.c deleted file mode 100644 index 3a3551c..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_iwdg.c +++ /dev/null @@ -1,123 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_iwdg.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the IWDG firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_iwdg.h" - -/* CTLR register bit mask */ -#define CTLR_KEY_Reload ((uint16_t)0xAAAA) -#define CTLR_KEY_Enable ((uint16_t)0xCCCC) - -/********************************************************************* - * @fn IWDG_WriteAccessCmd - * - * @brief Enables or disables write access to IWDG_PSCR and IWDG_RLDR registers. - * - * @param WDG_WriteAccess - new state of write access to IWDG_PSCR and - * IWDG_RLDR registers. - * IWDG_WriteAccess_Enable - Enable write access to IWDG_PSCR and - * IWDG_RLDR registers. - * IWDG_WriteAccess_Disable - Disable write access to IWDG_PSCR - * and IWDG_RLDR registers. - * - * @return none - */ -void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess) -{ - IWDG->CTLR = IWDG_WriteAccess; -} - -/********************************************************************* - * @fn IWDG_SetPrescaler - * - * @brief Sets IWDG Prescaler value. - * - * @param IWDG_Prescaler - specifies the IWDG Prescaler value. - * IWDG_Prescaler_4 - IWDG prescaler set to 4. - * IWDG_Prescaler_8 - IWDG prescaler set to 8. - * IWDG_Prescaler_16 - IWDG prescaler set to 16. - * IWDG_Prescaler_32 - IWDG prescaler set to 32. - * IWDG_Prescaler_64 - IWDG prescaler set to 64. - * IWDG_Prescaler_128 - IWDG prescaler set to 128. - * IWDG_Prescaler_256 - IWDG prescaler set to 256. - * - * @return none - */ -void IWDG_SetPrescaler(uint8_t IWDG_Prescaler) -{ - IWDG->PSCR = IWDG_Prescaler; -} - -/********************************************************************* - * @fn IWDG_SetReload - * - * @brief Sets IWDG Reload value. - * - * @param Reload - specifies the IWDG Reload value. - * This parameter must be a number between 0 and 0x0FFF. - * - * @return none - */ -void IWDG_SetReload(uint16_t Reload) -{ - IWDG->RLDR = Reload; -} - -/********************************************************************* - * @fn IWDG_ReloadCounter - * - * @brief Reloads IWDG counter with value defined in the reload register. - * - * @return none - */ -void IWDG_ReloadCounter(void) -{ - IWDG->CTLR = CTLR_KEY_Reload; -} - -/********************************************************************* - * @fn IWDG_Enable - * - * @brief Enables IWDG (write access to IWDG_PSCR and IWDG_RLDR registers disabled). - * - * @return none - */ -void IWDG_Enable(void) -{ - IWDG->CTLR = CTLR_KEY_Enable; -} - -/********************************************************************* - * @fn IWDG_GetFlagStatus - * - * @brief Checks whether the specified IWDG flag is set or not. - * - * @param IWDG_FLAG - specifies the flag to check. - * IWDG_FLAG_PVU - Prescaler Value Update on going. - * IWDG_FLAG_RVU - Reload Value Update on going. - * - * @return none - */ -FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG) -{ - FlagStatus bitstatus = RESET; - - if((IWDG->STATR & IWDG_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - - - diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_misc.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_misc.c deleted file mode 100644 index e7e5aef..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_misc.c +++ /dev/null @@ -1,107 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_misc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the miscellaneous firmware functions . - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *********************************************************************************/ -#include "ch32v10x_misc.h" - -__IO uint32_t NVIC_Priority_Group = 0; - -/********************************************************************* - * @fn NVIC_PriorityGroupConfig - * - * @brief Configures the priority grouping - pre-emption priority and subpriority. - * - * @param NVIC_PriorityGroup - specifies the priority grouping bits length. - * NVIC_PriorityGroup_0 - 0 bits for pre-emption priority - * 4 bits for subpriority - * NVIC_PriorityGroup_1 - 1 bits for pre-emption priority - * 3 bits for subpriority - * NVIC_PriorityGroup_2 - 2 bits for pre-emption priority - * 2 bits for subpriority - * NVIC_PriorityGroup_3 - 3 bits for pre-emption priority - * 1 bits for subpriority - * NVIC_PriorityGroup_4 - 4 bits for pre-emption priority - * 0 bits for subpriority - * - * @return none - */ -void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) -{ - NVIC_Priority_Group = NVIC_PriorityGroup; -} - -/********************************************************************* - * @fn NVIC_Init - * - * @brief Initializes the NVIC peripheral according to the specified parameters in - * the NVIC_InitStruct. - * - * @param NVIC_InitStruct - pointer to a NVIC_InitTypeDef structure that contains the - * configuration information for the specified NVIC peripheral. - * - * @return none - */ -void NVIC_Init(NVIC_InitTypeDef *NVIC_InitStruct) -{ - uint8_t tmppre = 0; - - if(NVIC_Priority_Group == NVIC_PriorityGroup_0) - { - NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4); - } - else if(NVIC_Priority_Group == NVIC_PriorityGroup_1) - { - if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority == 1) - { - NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (1 << 7) | (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4)); - } - else - { - NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (0 << 7) | (NVIC_InitStruct->NVIC_IRQChannelSubPriority << 4)); - } - } - else if(NVIC_Priority_Group == NVIC_PriorityGroup_2) - { - if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 1) - { - tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (4 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority); - NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (0 << 7) | (tmppre << 4)); - } - else - { - tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (4 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 2)); - NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (1 << 7) | (tmppre << 4)); - } - } - else if(NVIC_Priority_Group == NVIC_PriorityGroup_3) - { - if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 3) - { - tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (2 * NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority); - NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (0 << 7) | (tmppre << 4)); - } - else - { - tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (2 * (NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority - 4)); - NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, (1 << 7) | (tmppre << 4)); - } - } - else if(NVIC_Priority_Group == NVIC_PriorityGroup_4) - { - NVIC_SetPriority(NVIC_InitStruct->NVIC_IRQChannel, NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << 4); - } - - if(NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE) - { - NVIC_EnableIRQ(NVIC_InitStruct->NVIC_IRQChannel); - } - else - { - NVIC_DisableIRQ(NVIC_InitStruct->NVIC_IRQChannel); - } -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_pwr.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_pwr.c deleted file mode 100644 index 7d263d4..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_pwr.c +++ /dev/null @@ -1,217 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_pwr.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the PWR firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ -#include "ch32v10x_pwr.h" -#include "ch32v10x_rcc.h" - -/* PWR registers bit mask */ -/* CTLR register bit mask */ -#define CTLR_DS_MASK ((uint32_t)0xFFFFFFFC) -#define CTLR_PLS_MASK ((uint32_t)0xFFFFFF1F) - -/********************************************************************* - * @fn PWR_DeInit - * - * @brief Deinitializes the PWR peripheral registers to their default - * reset values. - * - * @return none - */ -void PWR_DeInit(void) -{ - RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, DISABLE); -} - -/********************************************************************* - * @fn PWR_BackupAccessCmd - * - * @brief Enables or disables access to the RTC and backup registers. - * - * @param NewState - new state of the access to the RTC and backup registers, - * This parameter can be: ENABLE or DISABLE. - * - * @return none - */ -void PWR_BackupAccessCmd(FunctionalState NewState) -{ - if(NewState) - { - PWR->CTLR |= (1 << 8); - } - else - { - PWR->CTLR &= ~(1 << 8); - } -} - -/********************************************************************* - * @fn PWR_PVDCmd - * - * @brief Enables or disables the Power Voltage Detector(PVD). - * - * @param NewState - new state of the PVD(ENABLE or DISABLE). - * - * @return none - */ -void PWR_PVDCmd(FunctionalState NewState) -{ - if(NewState) - { - PWR->CTLR |= (1 << 4); - } - else - { - PWR->CTLR &= ~(1 << 4); - } -} - -/********************************************************************* - * @fn PWR_PVDLevelConfig - * - * @brief Configures the voltage threshold detected by the Power Voltage - * Detector(PVD). - * - * @param PWR_PVDLevel - specifies the PVD detection level - * PWR_PVDLevel_2V2 - PVD detection level set to 2.2V - * PWR_PVDLevel_2V3 - PVD detection level set to 2.3V - * PWR_PVDLevel_2V4 - PVD detection level set to 2.4V - * PWR_PVDLevel_2V5 - PVD detection level set to 2.5V - * PWR_PVDLevel_2V6 - PVD detection level set to 2.6V - * PWR_PVDLevel_2V7 - PVD detection level set to 2.7V - * PWR_PVDLevel_2V8 - PVD detection level set to 2.8V - * PWR_PVDLevel_2V9 - PVD detection level set to 2.9V - * - * @return none - */ -void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel) -{ - uint32_t tmpreg = 0; - tmpreg = PWR->CTLR; - tmpreg &= CTLR_PLS_MASK; - tmpreg |= PWR_PVDLevel; - PWR->CTLR = tmpreg; -} - -/********************************************************************* - * @fn PWR_WakeUpPinCmd - * - * @brief Enables or disables the WakeUp Pin functionality. - * - * @param NewState - new state of the WakeUp Pin functionality - * (ENABLE or DISABLE). - * - * @return none - */ -void PWR_WakeUpPinCmd(FunctionalState NewState) -{ - if(NewState) - { - PWR->CSR |= (1 << 8); - } - else - { - PWR->CSR &= ~(1 << 8); - } -} - -/********************************************************************* - * @fn PWR_EnterSTOPMode - * - * @brief Enters STOP mode. - * - * @param PWR_Regulator - specifies the regulator state in STOP mode. - * PWR_Regulator_ON - STOP mode with regulator ON - * PWR_Regulator_LowPower - STOP mode with regulator in low power mode - * PWR_STOPEntry - specifies if STOP mode in entered with WFI or WFE instruction. - * PWR_STOPEntry_WFI - enter STOP mode with WFI instruction - * PWR_STOPEntry_WFE - enter STOP mode with WFE instruction - * - * @return none - */ -void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry) -{ - uint32_t tmpreg = 0; - tmpreg = PWR->CTLR; - tmpreg &= CTLR_DS_MASK; - tmpreg |= PWR_Regulator; - PWR->CTLR = tmpreg; - - NVIC->SCTLR |= (1 << 2); - - if(PWR_STOPEntry == PWR_STOPEntry_WFI) - { - __WFI(); - } - else - { - __WFE(); - } - - NVIC->SCTLR &= ~(1 << 2); -} - -/********************************************************************* - * @fn PWR_EnterSTANDBYMode - * - * @brief Enters STANDBY mode. - * - * @return none - */ -void PWR_EnterSTANDBYMode(void) -{ - PWR->CTLR |= PWR_CTLR_CWUF; - PWR->CTLR |= PWR_CTLR_PDDS; - NVIC->SCTLR |= (1 << 2); - - __WFI(); -} - -/********************************************************************* - * @fn PWR_GetFlagStatus - * - * @brief Checks whether the specified PWR flag is set or not. - * - * @param PWR_FLAG - specifies the flag to check. - * PWR_FLAG_WU - Wake Up flag - * PWR_FLAG_SB - StandBy flag - * PWR_FLAG_PVDO - PVD Output - * - * @return The new state of PWR_FLAG (SET or RESET). - */ -FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG) -{ - FlagStatus bitstatus = RESET; - - if((PWR->CSR & PWR_FLAG) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn PWR_ClearFlag - * - * @brief Clears the PWR's pending flags. - * - * @param PWR_FLAG - specifies the flag to clear. - * PWR_FLAG_WU - Wake Up flag - * PWR_FLAG_SB - StandBy flag - * - * @return none - */ -void PWR_ClearFlag(uint32_t PWR_FLAG) -{ - PWR->CTLR |= PWR_FLAG << 2; -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_rcc.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_rcc.c deleted file mode 100644 index 5258906..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_rcc.c +++ /dev/null @@ -1,938 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_rcc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the RCC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_rcc.h" - -/* RCC registers bit address in the alias region */ -#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) - -/* BDCTLR Register */ -#define BDCTLR_OFFSET (RCC_OFFSET + 0x20) - -/* RCC registers bit mask */ - -/* CTLR register bit mask */ -#define CTLR_HSEBYP_Reset ((uint32_t)0xFFFBFFFF) -#define CTLR_HSEBYP_Set ((uint32_t)0x00040000) -#define CTLR_HSEON_Reset ((uint32_t)0xFFFEFFFF) -#define CTLR_HSEON_Set ((uint32_t)0x00010000) -#define CTLR_HSITRIM_Mask ((uint32_t)0xFFFFFF07) - -#define CFGR0_PLL_Mask ((uint32_t)0xFFC0FFFF) -#define CFGR0_PLLMull_Mask ((uint32_t)0x003C0000) -#define CFGR0_PLLSRC_Mask ((uint32_t)0x00010000) -#define CFGR0_PLLXTPRE_Mask ((uint32_t)0x00020000) -#define CFGR0_SWS_Mask ((uint32_t)0x0000000C) -#define CFGR0_SW_Mask ((uint32_t)0xFFFFFFFC) -#define CFGR0_HPRE_Reset_Mask ((uint32_t)0xFFFFFF0F) -#define CFGR0_HPRE_Set_Mask ((uint32_t)0x000000F0) -#define CFGR0_PPRE1_Reset_Mask ((uint32_t)0xFFFFF8FF) -#define CFGR0_PPRE1_Set_Mask ((uint32_t)0x00000700) -#define CFGR0_PPRE2_Reset_Mask ((uint32_t)0xFFFFC7FF) -#define CFGR0_PPRE2_Set_Mask ((uint32_t)0x00003800) -#define CFGR0_ADCPRE_Reset_Mask ((uint32_t)0xFFFF3FFF) -#define CFGR0_ADCPRE_Set_Mask ((uint32_t)0x0000C000) - -/* RSTSCKR register bit mask */ -#define RSTSCKR_RMVF_Set ((uint32_t)0x01000000) - -/* RCC Flag Mask */ -#define FLAG_Mask ((uint8_t)0x1F) - -/* INTR register byte 2 (Bits[15:8]) base address */ -#define INTR_BYTE2_ADDRESS ((uint32_t)0x40021009) - -/* INTR register byte 3 (Bits[23:16]) base address */ -#define INTR_BYTE3_ADDRESS ((uint32_t)0x4002100A) - -/* CFGR0 register byte 4 (Bits[31:24]) base address */ -#define CFGR0_BYTE4_ADDRESS ((uint32_t)0x40021007) - -/* BDCTLR register base address */ -#define BDCTLR_ADDRESS (PERIPH_BASE + BDCTLR_OFFSET) - -static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; -static __I uint8_t ADCPrescTable[4] = {2, 4, 6, 8}; - -/********************************************************************* - * @fn RCC_DeInit - * - * @brief Resets the RCC clock configuration to the default reset state. - * - * @return none - */ -void RCC_DeInit(void) -{ - RCC->CTLR |= (uint32_t)0x00000001; - RCC->CFGR0 &= (uint32_t)0xF8FF0000; - RCC->CTLR &= (uint32_t)0xFEF6FFFF; - RCC->CTLR &= (uint32_t)0xFFFBFFFF; - RCC->CFGR0 &= (uint32_t)0xFF80FFFF; - RCC->INTR = 0x009F0000; -} - -/********************************************************************* - * @fn RCC_HSEConfig - * - * @brief Configures the External High Speed oscillator (HSE). - * - * @param RCC_HSE - - * RCC_HSE_OFF - HSE oscillator OFF. - * RCC_HSE_ON - HSE oscillator ON. - * RCC_HSE_Bypass - HSE oscillator bypassed with external clock. - * - * @return none - */ -void RCC_HSEConfig(uint32_t RCC_HSE) -{ - RCC->CTLR &= CTLR_HSEON_Reset; - RCC->CTLR &= CTLR_HSEBYP_Reset; - - switch(RCC_HSE) - { - case RCC_HSE_ON: - RCC->CTLR |= CTLR_HSEON_Set; - break; - - case RCC_HSE_Bypass: - RCC->CTLR |= CTLR_HSEBYP_Set | CTLR_HSEON_Set; - break; - - default: - break; - } -} - -/********************************************************************* - * @fn RCC_WaitForHSEStartUp - * - * @brief Waits for HSE start-up. - * - * @return SUCCESS - HSE oscillator is stable and ready to use. - * ERROR - HSE oscillator not yet ready. - */ -ErrorStatus RCC_WaitForHSEStartUp(void) -{ - __IO uint32_t StartUpCounter = 0; - - ErrorStatus status = ERROR; - FlagStatus HSEStatus = RESET; - - do - { - HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY); - StartUpCounter++; - } while((StartUpCounter != HSE_STARTUP_TIMEOUT) && (HSEStatus == RESET)); - - if(RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET) - { - status = SUCCESS; - } - else - { - status = ERROR; - } - - return (status); -} - -/********************************************************************* - * @fn RCC_AdjustHSICalibrationValue - * - * @brief Adjusts the Internal High Speed oscillator (HSI) calibration value. - * - * @param HSICalibrationValue - specifies the calibration trimming value. - * This parameter must be a number between 0 and 0x1F. - * - * @return none - */ -void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CTLR; - tmpreg &= CTLR_HSITRIM_Mask; - tmpreg |= (uint32_t)HSICalibrationValue << 3; - RCC->CTLR = tmpreg; -} - -/********************************************************************* - * @fn RCC_HSICmd - * - * @brief Enables or disables the Internal High Speed oscillator (HSI). - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_HSICmd(FunctionalState NewState) -{ - if(NewState) - { - RCC->CTLR |= (1 << 0); - } - else - { - RCC->CTLR &= ~(1 << 0); - } -} - -/********************************************************************* - * @fn RCC_PLLConfig - * - * @brief Configures the PLL clock source and multiplication factor. - * - * @param RCC_PLLSource - specifies the PLL entry clock source. - * RCC_PLLSource_HSI_Div2 - HSI oscillator clock divided by 2 - * selected as PLL clock entry. - * RCC_PLLSource_HSE_Div1 - HSE oscillator clock selected as PLL - * clock entry. - * RCC_PLLSource_HSE_Div2 - HSE oscillator clock divided by 2 - * selected as PLL clock entry. - * RCC_PLLMul - specifies the PLL multiplication factor. - * This parameter can be RCC_PLLMul_x where x:[2,16]. - * - * @return none - */ -void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_PLL_Mask; - tmpreg |= RCC_PLLSource | RCC_PLLMul; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_PLLCmd - * - * @brief Enables or disables the PLL. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_PLLCmd(FunctionalState NewState) -{ - if(NewState) - { - RCC->CTLR |= (1 << 24); - } - else - { - RCC->CTLR &= ~(1 << 24); - } -} - -/********************************************************************* - * @fn RCC_SYSCLKConfig - * - * @brief Configures the system clock (SYSCLK). - * - * @param RCC_SYSCLKSource - specifies the clock source used as system clock. - * RCC_SYSCLKSource_HSI - HSI selected as system clock. - * RCC_SYSCLKSource_HSE - HSE selected as system clock. - * RCC_SYSCLKSource_PLLCLK - PLL selected as system clock. - * - * @return none - */ -void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_SW_Mask; - tmpreg |= RCC_SYSCLKSource; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_GetSYSCLKSource - * - * @brief Returns the clock source used as system clock. - * - * @return 0x00 - HSI used as system clock. - * 0x04 - HSE used as system clock. - * 0x08 - PLL used as system clock. - */ -uint8_t RCC_GetSYSCLKSource(void) -{ - return ((uint8_t)(RCC->CFGR0 & CFGR0_SWS_Mask)); -} - -/********************************************************************* - * @fn RCC_HCLKConfig - * - * @brief Configures the AHB clock (HCLK). - * - * @param RCC_SYSCLK - defines the AHB clock divider. This clock is derived from - * the system clock (SYSCLK). - * RCC_SYSCLK_Div1 - AHB clock = SYSCLK. - * RCC_SYSCLK_Div2 - AHB clock = SYSCLK/2. - * RCC_SYSCLK_Div4 - AHB clock = SYSCLK/4. - * RCC_SYSCLK_Div8 - AHB clock = SYSCLK/8. - * RCC_SYSCLK_Div16 - AHB clock = SYSCLK/16. - * RCC_SYSCLK_Div64 - AHB clock = SYSCLK/64. - * RCC_SYSCLK_Div128 - AHB clock = SYSCLK/128. - * RCC_SYSCLK_Div256 - AHB clock = SYSCLK/256. - * RCC_SYSCLK_Div512 - AHB clock = SYSCLK/512. - * - * @return none - */ -void RCC_HCLKConfig(uint32_t RCC_SYSCLK) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_HPRE_Reset_Mask; - tmpreg |= RCC_SYSCLK; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_PCLK1Config - * - * @brief Configures the Low Speed APB clock (PCLK1). - * - * @param RCC_HCLK - defines the APB1 clock divider. This clock is derived from - * the AHB clock (HCLK). - * RCC_HCLK_Div1 - APB1 clock = HCLK. - * RCC_HCLK_Div2 - APB1 clock = HCLK/2. - * RCC_HCLK_Div4 - APB1 clock = HCLK/4. - * RCC_HCLK_Div8 - APB1 clock = HCLK/8. - * RCC_HCLK_Div16 - APB1 clock = HCLK/16. - * - * @return none - */ -void RCC_PCLK1Config(uint32_t RCC_HCLK) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_PPRE1_Reset_Mask; - tmpreg |= RCC_HCLK; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_PCLK2Config - * - * @brief Configures the High Speed APB clock (PCLK2). - * - * @param RCC_HCLK - defines the APB2 clock divider. This clock is derived from - * the AHB clock (HCLK). - * RCC_HCLK_Div1 - APB1 clock = HCLK. - * RCC_HCLK_Div2 - APB1 clock = HCLK/2. - * RCC_HCLK_Div4 - APB1 clock = HCLK/4. - * RCC_HCLK_Div8 - APB1 clock = HCLK/8. - * RCC_HCLK_Div16 - APB1 clock = HCLK/16. - * - * @return none - */ -void RCC_PCLK2Config(uint32_t RCC_HCLK) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_PPRE2_Reset_Mask; - tmpreg |= RCC_HCLK << 3; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_ITConfig - * - * @brief Enables or disables the specified RCC interrupts. - * - * @param RCC_IT - specifies the RCC interrupt sources to be enabled or disabled. - * RCC_IT_LSIRDY - LSI ready interrupt. - * RCC_IT_LSERDY - LSE ready interrupt. - * RCC_IT_HSIRDY - HSI ready interrupt. - * RCC_IT_HSERDY - HSE ready interrupt. - * RCC_IT_PLLRDY - PLL ready interrupt. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - *(__IO uint8_t *)INTR_BYTE2_ADDRESS |= RCC_IT; - } - else - { - *(__IO uint8_t *)INTR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT; - } -} - -/********************************************************************* - * @fn RCC_USBCLKConfig - * - * @brief Configures the USB clock (USBCLK). - * - * @param RCC_USBCLKSource: specifies the USB clock source. This clock is - * derived from the PLL output. - * RCC_USBCLKSource_PLLCLK_1Div5: PLL clock divided by 1,5 selected as USB - * clock source. - * RCC_USBCLKSource_PLLCLK_Div1: PLL clock selected as USB clock source. - * - * @return none - */ -void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource) -{ - if(RCC_USBCLKSource) - { - RCC->CFGR0 |= (1 << 22); - } - else - { - RCC->CFGR0 &= ~(1 << 22); - } -} - -/********************************************************************* - * @fn RCC_ADCCLKConfig - * - * @brief Configures the ADC clock (ADCCLK). - * - * @param RCC_PCLK2 - defines the ADC clock divider. This clock is derived from - * the APB2 clock (PCLK2). - * RCC_PCLK2_Div2 - ADC clock = PCLK2/2. - * RCC_PCLK2_Div4 - ADC clock = PCLK2/4. - * RCC_PCLK2_Div6 - ADC clock = PCLK2/6. - * RCC_PCLK2_Div8 - ADC clock = PCLK2/8. - * - * @return none - */ -void RCC_ADCCLKConfig(uint32_t RCC_PCLK2) -{ - uint32_t tmpreg = 0; - - tmpreg = RCC->CFGR0; - tmpreg &= CFGR0_ADCPRE_Reset_Mask; - tmpreg |= RCC_PCLK2; - RCC->CFGR0 = tmpreg; -} - -/********************************************************************* - * @fn RCC_LSEConfig - * - * @brief Configures the External Low Speed oscillator (LSE). - * - * @param RCC_LSE - specifies the new state of the LSE. - * RCC_LSE_OFF - LSE oscillator OFF. - * RCC_LSE_ON - LSE oscillator ON. - * RCC_LSE_Bypass - LSE oscillator bypassed with external clock. - * - * @return none - */ -void RCC_LSEConfig(uint8_t RCC_LSE) -{ - *(__IO uint8_t *)BDCTLR_ADDRESS = RCC_LSE_OFF; - *(__IO uint8_t *)BDCTLR_ADDRESS = RCC_LSE_OFF; - - switch(RCC_LSE) - { - case RCC_LSE_ON: - *(__IO uint8_t *)BDCTLR_ADDRESS = RCC_LSE_ON; - break; - - case RCC_LSE_Bypass: - *(__IO uint8_t *)BDCTLR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON; - break; - - default: - break; - } -} - -/********************************************************************* - * @fn RCC_LSICmd - * - * @brief Enables or disables the Internal Low Speed oscillator (LSI). - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_LSICmd(FunctionalState NewState) -{ - if(NewState) - { - RCC->RSTSCKR |= (1 << 0); - } - else - { - RCC->RSTSCKR &= ~(1 << 0); - } -} - -/********************************************************************* - * @fn RCC_RTCCLKConfig - * - * @brief Once the RTC clock is selected it can't be changed unless the Backup domain is reset. - * - * @param RCC_RTCCLKSource - specifies the RTC clock source. - * RCC_RTCCLKSource_LSE - LSE selected as RTC clock. - * RCC_RTCCLKSource_LSI - LSI selected as RTC clock. - * RCC_RTCCLKSource_HSE_Div128 - HSE clock divided by 128 selected as RTC clock. - * - * @return none - */ -void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource) -{ - RCC->BDCTLR |= RCC_RTCCLKSource; -} - -/********************************************************************* - * @fn RCC_RTCCLKCmd - * - * @brief This function must be used only after the RTC clock was selected - * using the RCC_RTCCLKConfig function. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_RTCCLKCmd(FunctionalState NewState) -{ - if(NewState) - { - RCC->BDCTLR |= (1 << 15); - } - else - { - RCC->BDCTLR &= ~(1 << 15); - } -} - -/********************************************************************* - * @fn RCC_GetClocksFreq - * - * @brief The result of this function could be not correct when using - * fractional value for HSE crystal. - * - * @param RCC_Clocks - pointer to a RCC_ClocksTypeDef structure which will hold - * the clocks frequencies. - * - * @return none - */ -void RCC_GetClocksFreq(RCC_ClocksTypeDef *RCC_Clocks) -{ - uint32_t tmp = 0, pllmull = 0, pllsource = 0, presc = 0; - - tmp = RCC->CFGR0 & CFGR0_SWS_Mask; - - switch(tmp) - { - case 0x00: - RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; - break; - - case 0x04: - RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; - break; - - case 0x08: - pllmull = RCC->CFGR0 & CFGR0_PLLMull_Mask; - pllsource = RCC->CFGR0 & CFGR0_PLLSRC_Mask; - pllmull = (pllmull >> 18) + 2; - - if(pllsource == 0x00) - { - if(EXTEN->EXTEN_CTR & EXTEN_PLL_HSI_PRE) - { - RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE)*pllmull; - } - else - { - RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull; - } - } - else - { - if((RCC->CFGR0 & CFGR0_PLLXTPRE_Mask) != (uint32_t)RESET) - { - RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE >> 1) * pllmull; - } - else - { - RCC_Clocks->SYSCLK_Frequency = HSE_VALUE * pllmull; - } - } - break; - - default: - RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; - break; - } - - tmp = RCC->CFGR0 & CFGR0_HPRE_Set_Mask; - tmp = tmp >> 4; - presc = APBAHBPrescTable[tmp]; - RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc; - tmp = RCC->CFGR0 & CFGR0_PPRE1_Set_Mask; - tmp = tmp >> 8; - presc = APBAHBPrescTable[tmp]; - RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc; - tmp = RCC->CFGR0 & CFGR0_PPRE2_Set_Mask; - tmp = tmp >> 11; - presc = APBAHBPrescTable[tmp]; - RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc; - tmp = RCC->CFGR0 & CFGR0_ADCPRE_Set_Mask; - tmp = tmp >> 14; - presc = ADCPrescTable[tmp]; - RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc; -} - -/********************************************************************* - * @fn RCC_AHBPeriphClockCmd - * - * @brief Enables or disables the AHB peripheral clock. - * - * @param RCC_AHBPeriph - specifies the AHB peripheral to gates its clock. - * RCC_AHBPeriph_DMA1. - * RCC_AHBPeriph_DMA2. - * RCC_AHBPeriph_SRAM. - * NewState: ENABLE or DISABLE. - * - * @return none - */ -void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - RCC->AHBPCENR |= RCC_AHBPeriph; - } - else - { - RCC->AHBPCENR &= ~RCC_AHBPeriph; - } -} - -/********************************************************************* - * @fn RCC_APB2PeriphClockCmd - * - * @brief Enables or disables the High Speed APB (APB2) peripheral clock. - * - * @param RCC_APB2Periph - specifies the APB2 peripheral to gates its clock. - * RCC_APB2Periph_AFIO. - * RCC_APB2Periph_GPIOA. - * RCC_APB2Periph_GPIOB. - * RCC_APB2Periph_GPIOC. - * RCC_APB2Periph_GPIOD. - * RCC_APB2Periph_GPIOE - * RCC_APB2Periph_ADC1. - * RCC_APB2Periph_ADC2 - * RCC_APB2Periph_TIM1. - * RCC_APB2Periph_SPI1. - * RCC_APB2Periph_TIM8 - * RCC_APB2Periph_USART1. - * NewState - ENABLE or DISABLE - * - * @return none - */ -void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - RCC->APB2PCENR |= RCC_APB2Periph; - } - else - { - RCC->APB2PCENR &= ~RCC_APB2Periph; - } -} - -/********************************************************************* - * @fn RCC_APB1PeriphClockCmd - * - * @brief Enables or disables the Low Speed APB (APB1) peripheral clock. - * - * @param RCC_APB1Periph - specifies the APB1 peripheral to gates its clock. - * RCC_APB1Periph_TIM2. - * RCC_APB1Periph_TIM3. - * RCC_APB1Periph_TIM4. - * RCC_APB1Periph_WWDG. - * RCC_APB1Periph_SPI2. - * RCC_APB1Periph_USART2. - * RCC_APB1Periph_I2C1. - * RCC_APB1Periph_I2C2. - * RCC_APB1Periph_USB. - * RCC_APB1Periph_CAN1. - * RCC_APB1Periph_BKP. - * RCC_APB1Periph_PWR. - * RCC_APB1Periph_DAC. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - RCC->APB1PCENR |= RCC_APB1Periph; - } - else - { - RCC->APB1PCENR &= ~RCC_APB1Periph; - } -} - -/********************************************************************* - * @fn RCC_APB2PeriphResetCmd - * - * @brief Forces or releases High Speed APB (APB2) peripheral reset. - * - * @param RCC_APB2Periph - specifies the APB2 peripheral to reset. - * RCC_APB2Periph_AFIO. - * RCC_APB2Periph_GPIOA. - * RCC_APB2Periph_GPIOB. - * RCC_APB2Periph_GPIOC. - * RCC_APB2Periph_GPIOD. - * RCC_APB2Periph_GPIOE - * RCC_APB2Periph_ADC1. - * RCC_APB2Periph_TIM1. - * RCC_APB2Periph_SPI1. - * RCC_APB2Periph_USART1. - * NewState - ENABLE or DISABLE - * - * @return none - */ -void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - RCC->APB2PRSTR |= RCC_APB2Periph; - } - else - { - RCC->APB2PRSTR &= ~RCC_APB2Periph; - } -} - -/********************************************************************* - * @fn RCC_APB1PeriphResetCmd - * - * @brief Forces or releases Low Speed APB (APB1) peripheral reset. - * - * @param RCC_APB1Periph - specifies the APB1 peripheral to reset. - * RCC_APB1Periph_TIM2. - * RCC_APB1Periph_TIM3. - * RCC_APB1Periph_TIM4. - * RCC_APB1Periph_WWDG. - * RCC_APB1Periph_SPI2. - * RCC_APB1Periph_USART2. - * RCC_APB1Periph_USART3. - * RCC_APB1Periph_I2C1. - * RCC_APB1Periph_I2C2. - * RCC_APB1Periph_USB. - * RCC_APB1Periph_CAN1. - * RCC_APB1Periph_BKP. - * RCC_APB1Periph_PWR. - * RCC_APB1Periph_DAC. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - RCC->APB1PRSTR |= RCC_APB1Periph; - } - else - { - RCC->APB1PRSTR &= ~RCC_APB1Periph; - } -} - -/********************************************************************* - * @fn RCC_BackupResetCmd - * - * @brief Forces or releases the Backup domain reset. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_BackupResetCmd(FunctionalState NewState) -{ - if(NewState) - { - RCC->BDCTLR |= (1 << 16); - } - else - { - RCC->BDCTLR &= ~(1 << 16); - } -} - -/********************************************************************* - * @fn RCC_ClockSecuritySystemCmd - * - * @brief Enables or disables the Clock Security System. - * - * @param NewState - ENABLE or DISABLE. - * - * @return none - */ -void RCC_ClockSecuritySystemCmd(FunctionalState NewState) -{ - if(NewState) - { - RCC->CTLR |= (1 << 19); - } - else - { - RCC->CTLR &= ~(1 << 19); - } -} - -/********************************************************************* - * @fn RCC_MCOConfig - * - * @brief Selects the clock source to output on MCO pin. - * - * @param RCC_MCO - specifies the clock source to output. - * RCC_MCO_NoClock - No clock selected. - * RCC_MCO_SYSCLK - System clock selected. - * RCC_MCO_HSI - HSI oscillator clock selected. - * RCC_MCO_HSE - HSE oscillator clock selected. - * RCC_MCO_PLLCLK_Div2 - PLL clock divided by 2 selected. - * - * @return none - */ -void RCC_MCOConfig(uint8_t RCC_MCO) -{ - *(__IO uint8_t *)CFGR0_BYTE4_ADDRESS = RCC_MCO; -} - -/********************************************************************* - * @fn RCC_GetFlagStatus - * - * @brief Checks whether the specified RCC flag is set or not. - * - * @param RCC_FLAG - specifies the flag to check. - * RCC_FLAG_HSIRDY - HSI oscillator clock ready. - * RCC_FLAG_HSERDY - HSE oscillator clock ready. - * RCC_FLAG_PLLRDY - PLL clock ready. - * RCC_FLAG_LSERDY - LSE oscillator clock ready. - * RCC_FLAG_LSIRDY - LSI oscillator clock ready. - * RCC_FLAG_PINRST - Pin reset. - * RCC_FLAG_PORRST - POR/PDR reset. - * RCC_FLAG_SFTRST - Software reset. - * RCC_FLAG_IWDGRST - Independent Watchdog reset. - * RCC_FLAG_WWDGRST - Window Watchdog reset. - * RCC_FLAG_LPWRRST - Low Power reset. - * - * @return FlagStatus - SET or RESET. - */ -FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG) -{ - uint32_t tmp = 0; - uint32_t statusreg = 0; - - FlagStatus bitstatus = RESET; - tmp = RCC_FLAG >> 5; - - if(tmp == 1) - { - statusreg = RCC->CTLR; - } - else if(tmp == 2) - { - statusreg = RCC->BDCTLR; - } - else - { - statusreg = RCC->RSTSCKR; - } - - tmp = RCC_FLAG & FLAG_Mask; - - if((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn RCC_ClearFlag - * - * @brief Clears the RCC reset flags. - * - * @return none - */ -void RCC_ClearFlag(void) -{ - RCC->RSTSCKR |= RSTSCKR_RMVF_Set; -} - -/********************************************************************* - * @fn RCC_GetITStatus - * - * @brief Checks whether the specified RCC interrupt has occurred or not. - * - * @param RCC_IT - specifies the RCC interrupt source to check. - * RCC_IT_LSIRDY - LSI ready interrupt. - * RCC_IT_LSERDY - LSE ready interrupt. - * RCC_IT_HSIRDY - HSI ready interrupt. - * RCC_IT_HSERDY - HSE ready interrupt. - * RCC_IT_PLLRDY - PLL ready interrupt. - * RCC_IT_CSS - Clock Security System interrupt. - * - * @return ITStatus - SET or RESET. - */ -ITStatus RCC_GetITStatus(uint8_t RCC_IT) -{ - ITStatus bitstatus = RESET; - - if((RCC->INTR & RCC_IT) != (uint32_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn RCC_ClearITPendingBit - * - * @brief Clears the RCC's interrupt pending bits. - * - * @param RCC_IT - specifies the interrupt pending bit to clear. - * RCC_IT_LSIRDY - LSI ready interrupt. - * RCC_IT_LSERDY - LSE ready interrupt. - * RCC_IT_HSIRDY - HSI ready interrupt. - * RCC_IT_HSERDY - HSE ready interrupt. - * RCC_IT_PLLRDY - PLL ready interrupt. - * RCC_IT_CSS - Clock Security System interrupt. - * - * @return none - */ -void RCC_ClearITPendingBit(uint8_t RCC_IT) -{ - *(__IO uint8_t *)INTR_BYTE3_ADDRESS = RCC_IT; -} - - - diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_rtc.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_rtc.c deleted file mode 100644 index 611bcd4..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_rtc.c +++ /dev/null @@ -1,273 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_rtc.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the RTC firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ -#include "ch32v10x_rtc.h" - -/* RTC_Private_Defines */ -#define RTC_LSB_MASK ((uint32_t)0x0000FFFF) /* RTC LSB Mask */ -#define PRLH_MSB_MASK ((uint32_t)0x000F0000) /* RTC Prescaler MSB Mask */ - -/********************************************************************* - * @fn RTC_ITConfig - * - * @brief Enables or disables the specified RTC interrupts. - * - * @param RTC_IT - specifies the RTC interrupts sources to be enabled or disabled. - * RTC_IT_OW - Overflow interrupt - * RTC_IT_ALR - Alarm interrupt - * RTC_IT_SEC - Second interrupt - * - * @return NewState - new state of the specified RTC interrupts(ENABLE or DISABLE). - */ -void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - RTC->CTLRH |= RTC_IT; - } - else - { - RTC->CTLRH &= (uint16_t)~RTC_IT; - } -} - -/********************************************************************* - * @fn RTC_EnterConfigMode - * - * @brief Enters the RTC configuration mode. - * - * @return none - */ -void RTC_EnterConfigMode(void) -{ - RTC->CTLRL |= RTC_CTLRL_CNF; -} - -/********************************************************************* - * @fn RTC_ExitConfigMode - * - * @brief Exits from the RTC configuration mode. - * - * @return none - */ -void RTC_ExitConfigMode(void) -{ - RTC->CTLRL &= (uint16_t) ~((uint16_t)RTC_CTLRL_CNF); -} - -/********************************************************************* - * @fn RTC_GetCounter - * - * @brief Gets the RTC counter value - * - * @return RTC counter value - */ -uint32_t RTC_GetCounter(void) -{ - uint16_t high1 = 0, high2 = 0, low = 0; - - high1 = RTC->CNTH; - low = RTC->CNTL; - high2 = RTC->CNTH; - - if(high1 != high2) - { - return (((uint32_t)high2 << 16) | RTC->CNTL); - } - else - { - return (((uint32_t)high1 << 16) | low); - } -} - -/********************************************************************* - * @fn RTC_SetCounter - * - * @brief Sets the RTC counter value. - * - * @param CounterValue - RTC counter new value. - * - * @return RTC counter value - */ -void RTC_SetCounter(uint32_t CounterValue) -{ - RTC_EnterConfigMode(); - RTC->CNTH = CounterValue >> 16; - RTC->CNTL = (CounterValue & RTC_LSB_MASK); - RTC_ExitConfigMode(); -} - -/********************************************************************* - * @fn RTC_SetPrescaler - * - * @brief Sets the RTC prescaler value - * - * @param PrescalerValue - RTC prescaler new value - * - * @return none - */ -void RTC_SetPrescaler(uint32_t PrescalerValue) -{ - RTC_EnterConfigMode(); - RTC->PSCRH = (PrescalerValue & PRLH_MSB_MASK) >> 16; - RTC->PSCRL = (PrescalerValue & RTC_LSB_MASK); - RTC_ExitConfigMode(); -} - -/********************************************************************* - * @fn RTC_SetAlarm - * - * @brief Sets the RTC alarm value - * - * @param AlarmValue - RTC alarm new value - * - * @return none - */ -void RTC_SetAlarm(uint32_t AlarmValue) -{ - RTC_EnterConfigMode(); - RTC->ALRMH = AlarmValue >> 16; - RTC->ALRML = (AlarmValue & RTC_LSB_MASK); - RTC_ExitConfigMode(); -} - -/********************************************************************* - * @fn RTC_GetDivider - * - * @brief Gets the RTC divider value - * - * @return RTC Divider value - */ -uint32_t RTC_GetDivider(void) -{ - uint32_t tmp = 0x00; - tmp = ((uint32_t)RTC->DIVH & (uint32_t)0x000F) << 16; - tmp |= RTC->DIVL; - return tmp; -} - -/********************************************************************* - * @fn RTC_WaitForLastTask - * - * @brief Waits until last write operation on RTC registers has finished - * - * @return none - */ -void RTC_WaitForLastTask(void) -{ - while((RTC->CTLRL & RTC_FLAG_RTOFF) == (uint16_t)RESET) - { - } -} - -/********************************************************************* - * @fn RTC_WaitForSynchro - * - * @brief Waits until the RTC registers are synchronized with RTC APB clock - * - * @return none - */ -void RTC_WaitForSynchro(void) -{ - RTC->CTLRL &= (uint16_t)~RTC_FLAG_RSF; - while((RTC->CTLRL & RTC_FLAG_RSF) == (uint16_t)RESET) - { - } -} - -/********************************************************************* - * @fn RTC_GetFlagStatus - * - * @brief Checks whether the specified RTC flag is set or not - * - * @param RTC_FLAG- specifies the flag to check - * RTC_FLAG_RTOFF - RTC Operation OFF flag - * RTC_FLAG_RSF - Registers Synchronized flag - * RTC_FLAG_OW - Overflow flag - * RTC_FLAG_ALR - Alarm flag - * RTC_FLAG_SEC - Second flag - * - * @return The new state of RTC_FLAG (SET or RESET) - */ -FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG) -{ - FlagStatus bitstatus = RESET; - if((RTC->CTLRL & RTC_FLAG) != (uint16_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn RTC_ClearFlag - * - * @brief Clears the RTC's pending flags - * - * @param RTC_FLAG - specifies the flag to clear - * RTC_FLAG_RSF - Registers Synchronized flag - * RTC_FLAG_OW - Overflow flag - * RTC_FLAG_ALR - Alarm flag - * RTC_FLAG_SEC - Second flag - * - * @return none - */ -void RTC_ClearFlag(uint16_t RTC_FLAG) -{ - RTC->CTLRL &= (uint16_t)~RTC_FLAG; -} - -/********************************************************************* - * @fn RTC_GetITStatus - * - * @brief Checks whether the specified RTC interrupt has occurred or not - * - * @param RTC_IT - specifies the RTC interrupts sources to check - * RTC_FLAG_OW - Overflow interrupt - * RTC_FLAG_ALR - Alarm interrupt - * RTC_FLAG_SEC - Second interrupt - * - * @return The new state of the RTC_IT (SET or RESET) - */ -ITStatus RTC_GetITStatus(uint16_t RTC_IT) -{ - ITStatus bitstatus = RESET; - - bitstatus = (ITStatus)(RTC->CTLRL & RTC_IT); - if(((RTC->CTLRH & RTC_IT) != (uint16_t)RESET) && (bitstatus != (uint16_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn RTC_ClearITPendingBit - * - * @brief Clears the RTC's interrupt pending bits - * - * @param RTC_IT - specifies the interrupt pending bit to clear - * RTC_FLAG_OW - Overflow interrupt - * RTC_FLAG_ALR - Alarm interrupt - * RTC_FLAG_SEC - Second interrupt - * - * @return none - */ -void RTC_ClearITPendingBit(uint16_t RTC_IT) -{ - RTC->CTLRL &= (uint16_t)~RTC_IT; -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_spi.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_spi.c deleted file mode 100644 index 7ff8fbc..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_spi.c +++ /dev/null @@ -1,652 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_spi.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the SPI firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *********************************************************************************/ -#include "ch32v10x_spi.h" -#include "ch32v10x_rcc.h" - -/* SPI SPE mask */ -#define CTLR1_SPE_Set ((uint16_t)0x0040) -#define CTLR1_SPE_Reset ((uint16_t)0xFFBF) - -/* I2S I2SE mask */ -#define I2SCFGR_I2SE_Set ((uint16_t)0x0400) -#define I2SCFGR_I2SE_Reset ((uint16_t)0xFBFF) - -/* SPI CRCNext mask */ -#define CTLR1_CRCNext_Set ((uint16_t)0x1000) - -/* SPI CRCEN mask */ -#define CTLR1_CRCEN_Set ((uint16_t)0x2000) -#define CTLR1_CRCEN_Reset ((uint16_t)0xDFFF) - -/* SPI SSOE mask */ -#define CTLR2_SSOE_Set ((uint16_t)0x0004) -#define CTLR2_SSOE_Reset ((uint16_t)0xFFFB) - -/* SPI registers Masks */ -#define CTLR1_CLEAR_Mask ((uint16_t)0x3040) -#define I2SCFGR_CLEAR_Mask ((uint16_t)0xF040) - -/* SPI or I2S mode selection masks */ -#define SPI_Mode_Select ((uint16_t)0xF7FF) -#define I2S_Mode_Select ((uint16_t)0x0800) - -/* I2S clock source selection masks */ -#define I2S2_CLOCK_SRC ((uint32_t)(0x00020000)) -#define I2S3_CLOCK_SRC ((uint32_t)(0x00040000)) -#define I2S_MUL_MASK ((uint32_t)(0x0000F000)) -#define I2S_DIV_MASK ((uint32_t)(0x000000F0)) - -/********************************************************************* - * @fn SPI_I2S_DeInit - * - * @brief Deinitializes the SPIx peripheral registers to their default - * reset values (Affects also the I2Ss). - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * - * @return none - */ -void SPI_I2S_DeInit(SPI_TypeDef *SPIx) -{ - if(SPIx == SPI1) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE); - } - else if(SPIx == SPI2) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, DISABLE); - } - else - { - if(SPIx == SPI3) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, DISABLE); - } - } -} - -/********************************************************************* - * @fn SPI_Init - * - * @brief Initializes the SPIx peripheral according to the specified - * parameters in the SPI_InitStruct. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_InitStruct - pointer to a SPI_InitTypeDef structure that - * contains the configuration information for the specified SPI peripheral. - * - * @return none - */ -void SPI_Init(SPI_TypeDef *SPIx, SPI_InitTypeDef *SPI_InitStruct) -{ - uint16_t tmpreg = 0; - - tmpreg = SPIx->CTLR1; - tmpreg &= CTLR1_CLEAR_Mask; - tmpreg |= (uint16_t)((uint32_t)SPI_InitStruct->SPI_Direction | SPI_InitStruct->SPI_Mode | - SPI_InitStruct->SPI_DataSize | SPI_InitStruct->SPI_CPOL | - SPI_InitStruct->SPI_CPHA | SPI_InitStruct->SPI_NSS | - SPI_InitStruct->SPI_BaudRatePrescaler | SPI_InitStruct->SPI_FirstBit); - - SPIx->CTLR1 = tmpreg; - SPIx->I2SCFGR &= SPI_Mode_Select; - SPIx->CRCR = SPI_InitStruct->SPI_CRCPolynomial; -} - -/********************************************************************* - * @fn I2S_Init - * - * @brief Initializes the SPIx peripheral according to the specified - * parameters in the I2S_InitStruct. - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * (configured in I2S mode). - * I2S_InitStruct - pointer to an I2S_InitTypeDef structure that - * contains the configuration information for the specified SPI peripheral - * configured in I2S mode. - * @return none - */ -void I2S_Init(SPI_TypeDef *SPIx, I2S_InitTypeDef *I2S_InitStruct) -{ - uint16_t tmpreg = 0, i2sdiv = 2, i2sodd = 0, packetlength = 1; - uint32_t tmp = 0; - RCC_ClocksTypeDef RCC_Clocks; - uint32_t sourceclock = 0; - - SPIx->I2SCFGR &= I2SCFGR_CLEAR_Mask; - SPIx->I2SPR = 0x0002; - tmpreg = SPIx->I2SCFGR; - - if(I2S_InitStruct->I2S_AudioFreq == I2S_AudioFreq_Default) - { - i2sodd = (uint16_t)0; - i2sdiv = (uint16_t)2; - } - else - { - if(I2S_InitStruct->I2S_DataFormat == I2S_DataFormat_16b) - { - packetlength = 1; - } - else - { - packetlength = 2; - } - - if(((uint32_t)SPIx) == SPI2_BASE) - { - tmp = I2S2_CLOCK_SRC; - } - else - { - tmp = I2S3_CLOCK_SRC; - } - - RCC_GetClocksFreq(&RCC_Clocks); - - sourceclock = RCC_Clocks.SYSCLK_Frequency; - - if(I2S_InitStruct->I2S_MCLKOutput == I2S_MCLKOutput_Enable) - { - tmp = (uint16_t)(((((sourceclock / 256) * 10) / I2S_InitStruct->I2S_AudioFreq)) + 5); - } - else - { - tmp = (uint16_t)(((((sourceclock / (32 * packetlength)) * 10) / I2S_InitStruct->I2S_AudioFreq)) + 5); - } - - tmp = tmp / 10; - i2sodd = (uint16_t)(tmp & (uint16_t)0x0001); - i2sdiv = (uint16_t)((tmp - i2sodd) / 2); - i2sodd = (uint16_t)(i2sodd << 8); - } - - if((i2sdiv < 2) || (i2sdiv > 0xFF)) - { - i2sdiv = 2; - i2sodd = 0; - } - - SPIx->I2SPR = (uint16_t)(i2sdiv | (uint16_t)(i2sodd | (uint16_t)I2S_InitStruct->I2S_MCLKOutput)); - tmpreg |= (uint16_t)(I2S_Mode_Select | (uint16_t)(I2S_InitStruct->I2S_Mode | \ - (uint16_t)(I2S_InitStruct->I2S_Standard | (uint16_t)(I2S_InitStruct->I2S_DataFormat | \ - (uint16_t)I2S_InitStruct->I2S_CPOL)))); - SPIx->I2SCFGR = tmpreg; -} - -/********************************************************************* - * @fn SPI_StructInit - * - * @brief Fills each SPI_InitStruct member with its default value. - * - * @param SPI_InitStruct - pointer to a SPI_InitTypeDef structure which - * will be initialized. - * - * @return none - */ -void SPI_StructInit(SPI_InitTypeDef *SPI_InitStruct) -{ - SPI_InitStruct->SPI_Direction = SPI_Direction_2Lines_FullDuplex; - SPI_InitStruct->SPI_Mode = SPI_Mode_Slave; - SPI_InitStruct->SPI_DataSize = SPI_DataSize_8b; - SPI_InitStruct->SPI_CPOL = SPI_CPOL_Low; - SPI_InitStruct->SPI_CPHA = SPI_CPHA_1Edge; - SPI_InitStruct->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; - SPI_InitStruct->SPI_FirstBit = SPI_FirstBit_MSB; - SPI_InitStruct->SPI_CRCPolynomial = 7; -} - -/********************************************************************* - * @fn I2S_StructInit - * - * @brief Fills each I2S_InitStruct member with its default value. - * - * @param I2S_InitStruct - pointer to a I2S_InitTypeDef structure which - * will be initialized. - * - * @return none - */ -void I2S_StructInit(I2S_InitTypeDef *I2S_InitStruct) -{ - I2S_InitStruct->I2S_Mode = I2S_Mode_SlaveTx; - I2S_InitStruct->I2S_Standard = I2S_Standard_Phillips; - I2S_InitStruct->I2S_DataFormat = I2S_DataFormat_16b; - I2S_InitStruct->I2S_MCLKOutput = I2S_MCLKOutput_Disable; - I2S_InitStruct->I2S_AudioFreq = I2S_AudioFreq_Default; - I2S_InitStruct->I2S_CPOL = I2S_CPOL_Low; -} - -/********************************************************************* - * @fn SPI_Cmd - * - * @brief Enables or disables the specified SPI peripheral. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void SPI_Cmd(SPI_TypeDef *SPIx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - SPIx->CTLR1 |= CTLR1_SPE_Set; - } - else - { - SPIx->CTLR1 &= CTLR1_SPE_Reset; - } -} - -/********************************************************************* - * @fn I2S_Cmd - * - * @brief Enables or disables the specified SPI peripheral (in I2S mode). - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void I2S_Cmd(SPI_TypeDef *SPIx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - SPIx->I2SCFGR |= I2SCFGR_I2SE_Set; - } - else - { - SPIx->I2SCFGR &= I2SCFGR_I2SE_Reset; - } -} - -/********************************************************************* - * @fn SPI_I2S_ITConfig - * - * @brief Enables or disables the specified SPI/I2S interrupts. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_IT - specifies the SPI/I2S interrupt source to be - * enabled or disabled. - * SPI_I2S_IT_TXE - Tx buffer empty interrupt mask. - * SPI_I2S_IT_RXNE - Rx buffer not empty interrupt mask. - * SPI_I2S_IT_ERR - Error interrupt mask. - * NewState: ENABLE or DISABLE. - * @return none - */ -void SPI_I2S_ITConfig(SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState) -{ - uint16_t itpos = 0, itmask = 0; - - itpos = SPI_I2S_IT >> 4; - itmask = (uint16_t)1 << (uint16_t)itpos; - - if(NewState != DISABLE) - { - SPIx->CTLR2 |= itmask; - } - else - { - SPIx->CTLR2 &= (uint16_t)~itmask; - } -} - -/********************************************************************* - * @fn SPI_I2S_DMACmd - * - * @brief Enables or disables the SPIx/I2Sx DMA interface. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_DMAReq - specifies the SPI/I2S DMA transfer request to - * be enabled or disabled. - * SPI_I2S_DMAReq_Tx - Tx buffer DMA transfer request. - * SPI_I2S_DMAReq_Rx - Rx buffer DMA transfer request. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void SPI_I2S_DMACmd(SPI_TypeDef *SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - SPIx->CTLR2 |= SPI_I2S_DMAReq; - } - else - { - SPIx->CTLR2 &= (uint16_t)~SPI_I2S_DMAReq; - } -} - -/********************************************************************* - * @fn SPI_I2S_SendData - * - * @brief Transmits a Data through the SPIx/I2Sx peripheral. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * Data - Data to be transmitted. - * - * @return none - */ -void SPI_I2S_SendData(SPI_TypeDef *SPIx, uint16_t Data) -{ - SPIx->DATAR = Data; -} - -/********************************************************************* - * @fn SPI_I2S_ReceiveData - * - * @brief Returns the most recent received data by the SPIx/I2Sx peripheral. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * Data - Data to be transmitted. - * - * @return SPIx->DATAR - The value of the received data. - */ -uint16_t SPI_I2S_ReceiveData(SPI_TypeDef *SPIx) -{ - return SPIx->DATAR; -} - -/********************************************************************* - * @fn SPI_NSSInternalSoftwareConfig - * - * @brief Configures internally by software the NSS pin for the selected SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_NSSInternalSoft - - * SPI_NSSInternalSoft_Set - Set NSS pin internally. - * SPI_NSSInternalSoft_Reset - Reset NSS pin internally. - * - * @return none - */ -void SPI_NSSInternalSoftwareConfig(SPI_TypeDef *SPIx, uint16_t SPI_NSSInternalSoft) -{ - if(SPI_NSSInternalSoft != SPI_NSSInternalSoft_Reset) - { - SPIx->CTLR1 |= SPI_NSSInternalSoft_Set; - } - else - { - SPIx->CTLR1 &= SPI_NSSInternalSoft_Reset; - } -} - -/********************************************************************* - * @fn SPI_SSOutputCmd - * - * @brief Enables or disables the SS output for the selected SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * NewState - new state of the SPIx SS output. - * - * @return none - */ -void SPI_SSOutputCmd(SPI_TypeDef *SPIx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - SPIx->CTLR2 |= CTLR2_SSOE_Set; - } - else - { - SPIx->CTLR2 &= CTLR2_SSOE_Reset; - } -} - -/********************************************************************* - * @fn SPI_DataSizeConfig - * - * @brief Configures the data size for the selected SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_DataSize - specifies the SPI data size. - * SPI_DataSize_16b - Set data frame format to 16bit. - * SPI_DataSize_8b - Set data frame format to 8bit. - * - * @return none - */ -void SPI_DataSizeConfig(SPI_TypeDef *SPIx, uint16_t SPI_DataSize) -{ - SPIx->CTLR1 &= (uint16_t)~SPI_DataSize_16b; - SPIx->CTLR1 |= SPI_DataSize; -} - -/********************************************************************* - * @fn SPI_TransmitCRC - * - * @brief Transmit the SPIx CRC value. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * - * @return none - */ -void SPI_TransmitCRC(SPI_TypeDef *SPIx) -{ - SPIx->CTLR1 |= CTLR1_CRCNext_Set; -} - -/********************************************************************* - * @fn SPI_CalculateCRC - * - * @brief Enables or disables the CRC value calculation of the transferred bytes. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * NewState - new state of the SPIx CRC value calculation. - * - * @return none - */ -void SPI_CalculateCRC(SPI_TypeDef *SPIx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - SPIx->CTLR1 |= CTLR1_CRCEN_Set; - } - else - { - SPIx->CTLR1 &= CTLR1_CRCEN_Reset; - } -} - -/********************************************************************* - * @fn SPI_GetCRC - * - * @brief Returns the transmit or the receive CRC register value for the specified SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_CRC - specifies the CRC register to be read. - * SPI_CRC_Tx - Selects Tx CRC register. - * SPI_CRC_Rx - Selects Rx CRC register. - * - * @return crcreg: The selected CRC register value. - */ -uint16_t SPI_GetCRC(SPI_TypeDef *SPIx, uint8_t SPI_CRC) -{ - uint16_t crcreg = 0; - - if(SPI_CRC != SPI_CRC_Rx) - { - crcreg = SPIx->TCRCR; - } - else - { - crcreg = SPIx->RCRCR; - } - - return crcreg; -} - -/********************************************************************* - * @fn SPI_GetCRCPolynomial - * - * @brief Returns the CRC Polynomial register value for the specified SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * - * @return SPIx->CRCR - The CRC Polynomial register value. - */ -uint16_t SPI_GetCRCPolynomial(SPI_TypeDef *SPIx) -{ - return SPIx->CRCR; -} - -/********************************************************************* - * @fn SPI_BiDirectionalLineConfig - * - * @brief Selects the data transfer direction in bi-directional mode - * for the specified SPI. - * - * @param SPIx - where x can be 1, 2 or 3 to select the SPI peripheral. - * SPI_Direction - specifies the data transfer direction in - * bi-directional mode. - * SPI_Direction_Tx - Selects Tx transmission direction. - * SPI_Direction_Rx - Selects Rx receive direction. - * - * @return none - */ -void SPI_BiDirectionalLineConfig(SPI_TypeDef *SPIx, uint16_t SPI_Direction) -{ - if(SPI_Direction == SPI_Direction_Tx) - { - SPIx->CTLR1 |= SPI_Direction_Tx; - } - else - { - SPIx->CTLR1 &= SPI_Direction_Rx; - } -} - -/********************************************************************* - * @fn SPI_I2S_GetFlagStatus - * - * @brief Checks whether the specified SPI/I2S flag is set or not. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_FLAG - specifies the SPI/I2S flag to check. - * SPI_I2S_FLAG_TXE - Transmit buffer empty flag. - * SPI_I2S_FLAG_RXNE - Receive buffer not empty flag. - * SPI_I2S_FLAG_BSY - Busy flag. - * SPI_I2S_FLAG_OVR - Overrun flag. - * SPI_FLAG_MODF - Mode Fault flag. - * SPI_FLAG_CRCERR - CRC Error flag. - * I2S_FLAG_UDR - Underrun Error flag. - * I2S_FLAG_CHSIDE - Channel Side flag. - * - * @return FlagStatus: SET or RESET. - */ -FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef *SPIx, uint16_t SPI_I2S_FLAG) -{ - FlagStatus bitstatus = RESET; - - if((SPIx->STATR & SPI_I2S_FLAG) != (uint16_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn SPI_I2S_ClearFlag - * - * @brief Clears the SPIx CRC Error (CRCERR) flag. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_FLAG - specifies the SPI flag to clear. - * SPI_FLAG_CRCERR - CRC Error flag. - * - * @return FlagStatus: SET or RESET. - */ -void SPI_I2S_ClearFlag(SPI_TypeDef *SPIx, uint16_t SPI_I2S_FLAG) -{ - SPIx->STATR = (uint16_t)~SPI_I2S_FLAG; -} - -/********************************************************************* - * @fn SPI_I2S_GetITStatus - * - * @brief Checks whether the specified SPI/I2S interrupt has occurred or not. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * - 2 or 3 in I2S mode. - * SPI_I2S_IT - specifies the SPI/I2S interrupt source to check.. - * SPI_I2S_IT_TXE - Transmit buffer empty interrupt. - * SPI_I2S_IT_RXNE - Receive buffer not empty interrupt. - * SPI_I2S_IT_OVR - Overrun interrupt. - * SPI_IT_MODF - Mode Fault interrupt. - * SPI_IT_CRCERR - CRC Error interrupt. - * I2S_IT_UDR - Underrun Error interrupt. - * - * @return FlagStatus: SET or RESET. - */ -ITStatus SPI_I2S_GetITStatus(SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT) -{ - ITStatus bitstatus = RESET; - uint16_t itpos = 0, itmask = 0, enablestatus = 0; - - itpos = 0x01 << (SPI_I2S_IT & 0x0F); - itmask = SPI_I2S_IT >> 4; - itmask = 0x01 << itmask; - enablestatus = (SPIx->CTLR2 & itmask); - - if(((SPIx->STATR & itpos) != (uint16_t)RESET) && enablestatus) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn SPI_I2S_ClearITPendingBit - * - * @brief Clears the SPIx CRC Error (CRCERR) interrupt pending bit. - * - * @param SPIx - where x can be - * - 1, 2 or 3 in SPI mode. - * SPI_I2S_IT - specifies the SPI interrupt pending bit to clear. - * SPI_IT_CRCERR - CRC Error interrupt. - * - * @return none - */ -void SPI_I2S_ClearITPendingBit(SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT) -{ - uint16_t itpos = 0; - - itpos = 0x01 << (SPI_I2S_IT & 0x0F); - SPIx->STATR = (uint16_t)~itpos; -} - - - - - - diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_tim.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_tim.c deleted file mode 100644 index d13babe..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_tim.c +++ /dev/null @@ -1,2353 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_tim.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the TIM firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_tim.h" -#include "ch32v10x_rcc.h" - -/* TIM registers bit mask */ -#define SMCFGR_ETR_Mask ((uint16_t)0x00FF) -#define CHCTLR_Offset ((uint16_t)0x0018) -#define CCER_CCE_Set ((uint16_t)0x0001) -#define CCER_CCNE_Set ((uint16_t)0x0004) - -static void TI1_Config(TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); -static void TI2_Config(TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); -static void TI3_Config(TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); -static void TI4_Config(TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter); - -/********************************************************************* - * @fn TIM_DeInit - * - * @brief Deinitializes the TIMx peripheral registers to their default - * reset values. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * - * @return none - */ -void TIM_DeInit(TIM_TypeDef *TIMx) -{ - if(TIMx == TIM1) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE); - } - else if(TIMx == TIM2) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE); - } - else if(TIMx == TIM3) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE); - } - else if(TIMx == TIM4) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, DISABLE); - } -} - -/********************************************************************* - * @fn TIM_TimeBaseInit - * - * @brief Initializes the TIMx Time Base Unit peripheral according to - * the specified parameters in the TIM_TimeBaseInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_TimeBaseInitStruct - pointer to a TIM_TimeBaseInitTypeDef - * structure. - * - * @return none - */ -void TIM_TimeBaseInit(TIM_TypeDef *TIMx, TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct) -{ - uint16_t tmpcr1 = 0; - - tmpcr1 = TIMx->CTLR1; - - if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3) || (TIMx == TIM4)) - { - tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_DIR | TIM_CMS))); - tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_CounterMode; - } - - tmpcr1 &= (uint16_t)(~((uint16_t)TIM_CTLR1_CKD)); - tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_ClockDivision; - - TIMx->CTLR1 = tmpcr1; - TIMx->ATRLR = TIM_TimeBaseInitStruct->TIM_Period; - TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler; - - if(TIMx == TIM1) - { - TIMx->RPTCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter; - } - - TIMx->SWEVGR = TIM_PSCReloadMode_Immediate; -} - -/********************************************************************* - * @fn TIM_OC1Init - * - * @brief Initializes the TIMx Channel1 according to the specified - * parameters in the TIM_OCInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OC1Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct) -{ - uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; - - TIMx->CCER &= (uint16_t)(~(uint16_t)TIM_CC1E); - tmpccer = TIMx->CCER; - tmpcr2 = TIMx->CTLR2; - tmpccmrx = TIMx->CHCTLR1; - tmpccmrx &= (uint16_t)(~((uint16_t)TIM_OC1M)); - tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CC1S)); - tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC1P)); - tmpccer |= TIM_OCInitStruct->TIM_OCPolarity; - tmpccer |= TIM_OCInitStruct->TIM_OutputState; - - if(TIMx == TIM1) - { - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC1NP)); - tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity; - - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC1NE)); - tmpccer |= TIM_OCInitStruct->TIM_OutputNState; - - tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS1)); - tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS1N)); - - tmpcr2 |= TIM_OCInitStruct->TIM_OCIdleState; - tmpcr2 |= TIM_OCInitStruct->TIM_OCNIdleState; - } - - TIMx->CTLR2 = tmpcr2; - TIMx->CHCTLR1 = tmpccmrx; - TIMx->CH1CVR = TIM_OCInitStruct->TIM_Pulse; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC2Init - * - * @brief Initializes the TIMx Channel2 according to the specified - * parameters in the TIM_OCInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OC2Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct) -{ - uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; - - TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CC2E)); - tmpccer = TIMx->CCER; - tmpcr2 = TIMx->CTLR2; - tmpccmrx = TIMx->CHCTLR1; - tmpccmrx &= (uint16_t)(~((uint16_t)TIM_OC2M)); - tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CC2S)); - tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8); - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC2P)); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 4); - - if(TIMx == TIM1) - { - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC2NP)); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4); - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC2NE)); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 4); - - tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS2)); - tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS2N)); - tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 2); - tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 2); - } - - TIMx->CTLR2 = tmpcr2; - TIMx->CHCTLR1 = tmpccmrx; - TIMx->CH2CVR = TIM_OCInitStruct->TIM_Pulse; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC3Init - * - * @brief Initializes the TIMx Channel3 according to the specified - * parameters in the TIM_OCInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OC3Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct) -{ - uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; - - TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CC3E)); - tmpccer = TIMx->CCER; - tmpcr2 = TIMx->CTLR2; - tmpccmrx = TIMx->CHCTLR2; - tmpccmrx &= (uint16_t)(~((uint16_t)TIM_OC3M)); - tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CC3S)); - tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC3P)); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 8); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 8); - - if(TIMx == TIM1) - { - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC3NP)); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8); - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC3NE)); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 8); - tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS3)); - tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS3N)); - tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 4); - tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 4); - } - - TIMx->CTLR2 = tmpcr2; - TIMx->CHCTLR2 = tmpccmrx; - TIMx->CH3CVR = TIM_OCInitStruct->TIM_Pulse; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC4Init - * - * @brief Initializes the TIMx Channel4 according to the specified - * parameters in the TIM_OCInitStruct. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OC4Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct) -{ - uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; - - TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CC4E)); - tmpccer = TIMx->CCER; - tmpcr2 = TIMx->CTLR2; - tmpccmrx = TIMx->CHCTLR2; - tmpccmrx &= (uint16_t)(~((uint16_t)TIM_OC4M)); - tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CC4S)); - tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8); - tmpccer &= (uint16_t)(~((uint16_t)TIM_CC4P)); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 12); - tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 12); - - if(TIMx == TIM1) - { - tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS4)); - tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6); - } - - TIMx->CTLR2 = tmpcr2; - TIMx->CHCTLR2 = tmpccmrx; - TIMx->CH4CVR = TIM_OCInitStruct->TIM_Pulse; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_ICInit - * - * @brief IInitializes the TIM peripheral according to the specified - * parameters in the TIM_ICInitStruct. - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ICInitStruct - pointer to a TIM_ICInitTypeDef structure. - * - * @return none - */ -void TIM_ICInit(TIM_TypeDef *TIMx, TIM_ICInitTypeDef *TIM_ICInitStruct) -{ - if(TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) - { - TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } - else if(TIM_ICInitStruct->TIM_Channel == TIM_Channel_2) - { - TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } - else if(TIM_ICInitStruct->TIM_Channel == TIM_Channel_3) - { - TI3_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } - else - { - TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, - TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } -} - -/********************************************************************* - * @fn TIM_PWMIConfig - * - * @brief Configures the TIM peripheral according to the specified - * parameters in the TIM_ICInitStruct to measure an external - * PWM signal. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ICInitStruct - pointer to a TIM_ICInitTypeDef structure. - * - * @return none - */ -void TIM_PWMIConfig(TIM_TypeDef *TIMx, TIM_ICInitTypeDef *TIM_ICInitStruct) -{ - uint16_t icoppositepolarity = TIM_ICPolarity_Rising; - uint16_t icoppositeselection = TIM_ICSelection_DirectTI; - - if(TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising) - { - icoppositepolarity = TIM_ICPolarity_Falling; - } - else - { - icoppositepolarity = TIM_ICPolarity_Rising; - } - - if(TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI) - { - icoppositeselection = TIM_ICSelection_IndirectTI; - } - else - { - icoppositeselection = TIM_ICSelection_DirectTI; - } - - if(TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) - { - TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); - TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } - else - { - TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, - TIM_ICInitStruct->TIM_ICFilter); - TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); - TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); - } -} - -/********************************************************************* - * @fn TIM_BDTRConfig - * - * @brief Configures the: Break feature, dead time, Lock level, the OSSI, - * the OSSR State and the AOE(automatic output enable). - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_BDTRInitStruct - pointer to a TIM_BDTRInitTypeDef structure. - * - * @return none - */ -void TIM_BDTRConfig(TIM_TypeDef *TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct) -{ - TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState | - TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime | - TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity | - TIM_BDTRInitStruct->TIM_AutomaticOutput; -} - -/********************************************************************* - * @fn TIM_TimeBaseStructInit - * - * @brief Fills each TIM_TimeBaseInitStruct member with its default value. - * - * @param TIM_TimeBaseInitStruct - pointer to a TIM_TimeBaseInitTypeDef structure. - * - * @return none - */ -void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct) -{ - TIM_TimeBaseInitStruct->TIM_Period = 0xFFFF; - TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000; - TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1; - TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up; - TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000; -} - -/********************************************************************* - * @fn TIM_OCStructInit - * - * @brief Fills each TIM_OCInitStruct member with its default value. - * - * @param TIM_OCInitStruct - pointer to a TIM_OCInitTypeDef structure. - * - * @return none - */ -void TIM_OCStructInit(TIM_OCInitTypeDef *TIM_OCInitStruct) -{ - TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing; - TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable; - TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable; - TIM_OCInitStruct->TIM_Pulse = 0x0000; - TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High; - TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High; - TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset; - TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset; -} - -/********************************************************************* - * @fn TIM_ICStructInit - * - * @brief Fills each TIM_ICInitStruct member with its default value. - * - * @param TIM_ICInitStruct - pointer to a TIM_ICInitTypeDef structure. - * - * @return none - */ -void TIM_ICStructInit(TIM_ICInitTypeDef *TIM_ICInitStruct) -{ - TIM_ICInitStruct->TIM_Channel = TIM_Channel_1; - TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising; - TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI; - TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1; - TIM_ICInitStruct->TIM_ICFilter = 0x00; -} - -/********************************************************************* - * @fn TIM_BDTRStructInit - * - * @brief Fills each TIM_BDTRInitStruct member with its default value. - * - * @param TIM_BDTRInitStruct - pointer to a TIM_BDTRInitTypeDef structure. - * - * @return none - */ -void TIM_BDTRStructInit(TIM_BDTRInitTypeDef *TIM_BDTRInitStruct) -{ - TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable; - TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable; - TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF; - TIM_BDTRInitStruct->TIM_DeadTime = 0x00; - TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable; - TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low; - TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; -} - -/********************************************************************* - * @fn TIM_Cmd - * - * @brief Enables or disables the specified TIM peripheral. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_Cmd(TIM_TypeDef *TIMx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->CTLR1 |= TIM_CEN; - } - else - { - TIMx->CTLR1 &= (uint16_t)(~((uint16_t)TIM_CEN)); - } -} - -/********************************************************************* - * @fn TIM_CtrlPWMOutputs - * - * @brief Enables or disables the TIM peripheral Main Outputs. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_CtrlPWMOutputs(TIM_TypeDef *TIMx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->BDTR |= TIM_MOE; - } - else - { - TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_MOE)); - } -} - -/********************************************************************* - * @fn TIM_ITConfig - * - * @brief Enables or disables the specified TIM interrupts. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_IT - specifies the TIM interrupts sources to be enabled or disabled. - * TIM_IT_Update - TIM update Interrupt source. - * TIM_IT_CC1 - TIM Capture Compare 1 Interrupt source. - * TIM_IT_CC2 - TIM Capture Compare 2 Interrupt source - * TIM_IT_CC3 - TIM Capture Compare 3 Interrupt source. - * TIM_IT_CC4 - TIM Capture Compare 4 Interrupt source. - * TIM_IT_COM - TIM Commutation Interrupt source. - * TIM_IT_Trigger - TIM Trigger Interrupt source. - * TIM_IT_Break - TIM Break Interrupt source. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_ITConfig(TIM_TypeDef *TIMx, uint16_t TIM_IT, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->DMAINTENR |= TIM_IT; - } - else - { - TIMx->DMAINTENR &= (uint16_t)~TIM_IT; - } -} - -/********************************************************************* - * @fn TIM_GenerateEvent - * - * @brief Configures the TIMx event to be generate by software. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_IT - specifies the TIM interrupts sources to be enabled or disabled. - * TIM_IT_Update - TIM update Interrupt source. - * TIM_IT_CC1 - TIM Capture Compare 1 Interrupt source. - * TIM_IT_CC2 - TIM Capture Compare 2 Interrupt source - * TIM_IT_CC3 - TIM Capture Compare 3 Interrupt source. - * TIM_IT_CC4 - TIM Capture Compare 4 Interrupt source. - * TIM_IT_COM - TIM Commutation Interrupt source. - * TIM_IT_Trigger - TIM Trigger Interrupt source. - * TIM_IT_Break - TIM Break Interrupt source. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_GenerateEvent(TIM_TypeDef *TIMx, uint16_t TIM_EventSource) -{ - TIMx->SWEVGR = TIM_EventSource; -} - -/********************************************************************* - * @fn TIM_DMAConfig - * - * @brief Configures the TIMx's DMA interface. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_DMABase: DMA Base address. - * TIM_DMABase_CR. - * TIM_DMABase_CR2. - * TIM_DMABase_SMCR. - * TIM_DMABase_DIER. - * TIM1_DMABase_SR. - * TIM_DMABase_EGR. - * TIM_DMABase_CCMR1. - * TIM_DMABase_CCMR2. - * TIM_DMABase_CCER. - * TIM_DMABase_CNT. - * TIM_DMABase_PSC. - * TIM_DMABase_CCR1. - * TIM_DMABase_CCR2. - * TIM_DMABase_CCR3. - * TIM_DMABase_CCR4. - * TIM_DMABase_BDTR. - * TIM_DMABase_DCR. - * TIM_DMABurstLength - DMA Burst length. - * TIM_DMABurstLength_1Transfer. - * TIM_DMABurstLength_18Transfers. - * - * @return none - */ -void TIM_DMAConfig(TIM_TypeDef *TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength) -{ - TIMx->DMACFGR = TIM_DMABase | TIM_DMABurstLength; -} - -/********************************************************************* - * @fn TIM_DMACmd - * - * @brief Enables or disables the TIMx's DMA Requests. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_DMASource - specifies the DMA Request sources. - * TIM_DMA_Update - TIM update Interrupt source. - * TIM_DMA_CC1 - TIM Capture Compare 1 DMA source. - * TIM_DMA_CC2 - TIM Capture Compare 2 DMA source. - * TIM_DMA_CC3 - TIM Capture Compare 3 DMA source. - * TIM_DMA_CC4 - TIM Capture Compare 4 DMA source. - * TIM_DMA_COM - TIM Commutation DMA source. - * TIM_DMA_Trigger - TIM Trigger DMA source. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_DMACmd(TIM_TypeDef *TIMx, uint16_t TIM_DMASource, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->DMAINTENR |= TIM_DMASource; - } - else - { - TIMx->DMAINTENR &= (uint16_t)~TIM_DMASource; - } -} - -/********************************************************************* - * @fn TIM_InternalClockConfig - * - * @brief Configures the TIMx internal Clock. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * - * @return none - */ -void TIM_InternalClockConfig(TIM_TypeDef *TIMx) -{ - TIMx->SMCFGR &= (uint16_t)(~((uint16_t)TIM_SMS)); -} - -/********************************************************************* - * @fn TIM_ITRxExternalClockConfig - * - * @brief Configures the TIMx Internal Trigger as External Clock. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_InputTriggerSource: Trigger source. - * TIM_TS_ITR0 - Internal Trigger 0. - * TIM_TS_ITR1 - Internal Trigger 1. - * TIM_TS_ITR2 - Internal Trigger 2. - * TIM_TS_ITR3 - Internal Trigger 3. - * - * @return none - */ -void TIM_ITRxExternalClockConfig(TIM_TypeDef *TIMx, uint16_t TIM_InputTriggerSource) -{ - TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource); - TIMx->SMCFGR |= TIM_SlaveMode_External1; -} - -/********************************************************************* - * @fn TIM_TIxExternalClockConfig - * - * @brief Configures the TIMx Trigger as External Clock. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_TIxExternalCLKSource - Trigger source. - * TIM_TIxExternalCLK1Source_TI1ED - TI1 Edge Detector. - * TIM_TIxExternalCLK1Source_TI1 - Filtered Timer Input 1. - * TIM_TIxExternalCLK1Source_TI2 - Filtered Timer Input 2. - * TIM_ICPolarity - specifies the TIx Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_DMA_COM - TIM Commutation DMA source. - * TIM_DMA_Trigger - TIM Trigger DMA source. - * ICFilter - specifies the filter value. - * This parameter must be a value between 0x0 and 0xF. - * - * @return none - */ -void TIM_TIxExternalClockConfig(TIM_TypeDef *TIMx, uint16_t TIM_TIxExternalCLKSource, - uint16_t TIM_ICPolarity, uint16_t ICFilter) -{ - if(TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2) - { - TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); - } - else - { - TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); - } - - TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource); - TIMx->SMCFGR |= TIM_SlaveMode_External1; -} - -/********************************************************************* - * @fn TIM_ETRClockMode1Config - * - * @brief Configures the External clock Mode1. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ExtTRGPrescaler - The external Trigger Prescaler. - * TIM_ExtTRGPSC_OFF - ETRP Prescaler OFF. - * TIM_ExtTRGPSC_DIV2 - ETRP frequency divided by 2. - * TIM_ExtTRGPSC_DIV4 - ETRP frequency divided by 4. - * TIM_ExtTRGPSC_DIV8 - ETRP frequency divided by 8. - * TIM_ExtTRGPolarity - The external Trigger Polarity. - * TIM_ExtTRGPolarity_Inverted - active low or falling edge active. - * TIM_ExtTRGPolarity_NonInverted - active high or rising edge active. - * ExtTRGFilter - External Trigger Filter. - * This parameter must be a value between 0x0 and 0xF. - * - * @return none - */ -void TIM_ETRClockMode1Config(TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter) -{ - uint16_t tmpsmcr = 0; - - TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); - tmpsmcr = TIMx->SMCFGR; - tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMS)); - tmpsmcr |= TIM_SlaveMode_External1; - tmpsmcr &= (uint16_t)(~((uint16_t)TIM_TS)); - tmpsmcr |= TIM_TS_ETRF; - TIMx->SMCFGR = tmpsmcr; -} - -/********************************************************************* - * @fn TIM_ETRClockMode2Config - * - * @brief Configures the External clock Mode2. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ExtTRGPrescaler - The external Trigger Prescaler. - * TIM_ExtTRGPSC_OFF - ETRP Prescaler OFF. - * TIM_ExtTRGPSC_DIV2 - ETRP frequency divided by 2. - * TIM_ExtTRGPSC_DIV4 - ETRP frequency divided by 4. - * TIM_ExtTRGPSC_DIV8 - ETRP frequency divided by 8. - * TIM_ExtTRGPolarity - The external Trigger Polarity. - * TIM_ExtTRGPolarity_Inverted - active low or falling edge active. - * TIM_ExtTRGPolarity_NonInverted - active high or rising edge active. - * ExtTRGFilter - External Trigger Filter. - * This parameter must be a value between 0x0 and 0xF. - * - * @return none - */ -void TIM_ETRClockMode2Config(TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, - uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter) -{ - TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); - TIMx->SMCFGR |= TIM_ECE; -} - -/********************************************************************* - * @fn TIM_ETRConfig - * - * @brief Configures the TIMx External Trigger (ETR). - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ExtTRGPrescaler - The external Trigger Prescaler. - * TIM_ExtTRGPSC_OFF - ETRP Prescaler OFF. - * TIM_ExtTRGPSC_DIV2 - ETRP frequency divided by 2. - * TIM_ExtTRGPSC_DIV4 - ETRP frequency divided by 4. - * TIM_ExtTRGPSC_DIV8 - ETRP frequency divided by 8. - * TIM_ExtTRGPolarity - The external Trigger Polarity. - * TIM_ExtTRGPolarity_Inverted - active low or falling edge active. - * TIM_ExtTRGPolarity_NonInverted - active high or rising edge active. - * ExtTRGFilter - External Trigger Filter. - * This parameter must be a value between 0x0 and 0xF. - * - * @return none - */ -void TIM_ETRConfig(TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, - uint16_t ExtTRGFilter) -{ - uint16_t tmpsmcr = 0; - - tmpsmcr = TIMx->SMCFGR; - tmpsmcr &= SMCFGR_ETR_Mask; - tmpsmcr |= (uint16_t)(TIM_ExtTRGPrescaler | (uint16_t)(TIM_ExtTRGPolarity | (uint16_t)(ExtTRGFilter << (uint16_t)8))); - TIMx->SMCFGR = tmpsmcr; -} - -/********************************************************************* - * @fn TIM_PrescalerConfig - * - * @brief Configures the TIMx Prescaler. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * Prescaler - specifies the Prescaler Register value. - * TIM_PSCReloadMode - specifies the TIM Prescaler Reload mode. - * TIM_PSCReloadMode - specifies the TIM Prescaler Reload mode. - * TIM_PSCReloadMode_Update - The Prescaler is loaded at the update event. - * TIM_PSCReloadMode_Immediate - The Prescaler is loaded immediately. - * - * @return none - */ -void TIM_PrescalerConfig(TIM_TypeDef *TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode) -{ - TIMx->PSC = Prescaler; - TIMx->SWEVGR = TIM_PSCReloadMode; -} - -/********************************************************************* - * @fn TIM_CounterModeConfig - * - * @brief Specifies the TIMx Counter Mode to be used. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_CounterMode - specifies the Counter Mode to be used. - * TIM_CounterMode_Up - TIM Up Counting Mode. - * TIM_CounterMode_Down - TIM Down Counting Mode. - * TIM_CounterMode_CenterAligned1 - TIM Center Aligned Mode1. - * TIM_CounterMode_CenterAligned2 - TIM Center Aligned Mode2. - * TIM_CounterMode_CenterAligned3 - TIM Center Aligned Mode3. - * - * @return none - */ -void TIM_CounterModeConfig(TIM_TypeDef *TIMx, uint16_t TIM_CounterMode) -{ - uint16_t tmpcr1 = 0; - - tmpcr1 = TIMx->CTLR1; - tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_DIR | TIM_CMS))); - tmpcr1 |= TIM_CounterMode; - TIMx->CTLR1 = tmpcr1; -} - -/********************************************************************* - * @fn TIM_SelectInputTrigger - * - * @brief Selects the Input Trigger source. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_InputTriggerSource - The Input Trigger source. - * TIM_TS_ITR0 - Internal Trigger 0. - * TIM_TS_ITR1 - Internal Trigger 1. - * TIM_TS_ITR2 - Internal Trigger 2. - * TIM_TS_ITR3 - Internal Trigger 3. - * TIM_TS_TI1F_ED - TI1 Edge Detector. - * TIM_TS_TI1FP1 - Filtered Timer Input 1. - * TIM_TS_TI2FP2 - Filtered Timer Input 2. - * TIM_TS_ETRF - External Trigger input. - * - * @return none - */ -void TIM_SelectInputTrigger(TIM_TypeDef *TIMx, uint16_t TIM_InputTriggerSource) -{ - uint16_t tmpsmcr = 0; - - tmpsmcr = TIMx->SMCFGR; - tmpsmcr &= (uint16_t)(~((uint16_t)TIM_TS)); - tmpsmcr |= TIM_InputTriggerSource; - TIMx->SMCFGR = tmpsmcr; -} - -/********************************************************************* - * @fn TIM_EncoderInterfaceConfig - * - * @brief Configures the TIMx Encoder Interface. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_EncoderMode - specifies the TIMx Encoder Mode. - * TIM_EncoderMode_TI1 - Counter counts on TI1FP1 edge depending - * on TI2FP2 level. - * TIM_EncoderMode_TI2 - Counter counts on TI2FP2 edge depending - * on TI1FP1 level. - * TIM_EncoderMode_TI12 - Counter counts on both TI1FP1 and - * TI2FP2 edges depending. - * TIM_IC1Polarity - specifies the IC1 Polarity. - * TIM_ICPolarity_Falling - IC Falling edge. - * TTIM_ICPolarity_Rising - IC Rising edge. - * TIM_IC2Polarity - specifies the IC2 Polarity. - * TIM_ICPolarity_Falling - IC Falling edge. - * TIM_ICPolarity_Rising - IC Rising edge. - * - * @return none - */ -void TIM_EncoderInterfaceConfig(TIM_TypeDef *TIMx, uint16_t TIM_EncoderMode, - uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity) -{ - uint16_t tmpsmcr = 0; - uint16_t tmpccmr1 = 0; - uint16_t tmpccer = 0; - - tmpsmcr = TIMx->SMCFGR; - tmpccmr1 = TIMx->CHCTLR1; - tmpccer = TIMx->CCER; - tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMS)); - tmpsmcr |= TIM_EncoderMode; - tmpccmr1 &= (uint16_t)(((uint16_t) ~((uint16_t)TIM_CC1S)) & (uint16_t)(~((uint16_t)TIM_CC2S))); - tmpccmr1 |= TIM_CC1S_0 | TIM_CC2S_0; - tmpccer &= (uint16_t)(((uint16_t) ~((uint16_t)TIM_CC1P)) & ((uint16_t) ~((uint16_t)TIM_CC2P))); - tmpccer |= (uint16_t)(TIM_IC1Polarity | (uint16_t)(TIM_IC2Polarity << (uint16_t)4)); - TIMx->SMCFGR = tmpsmcr; - TIMx->CHCTLR1 = tmpccmr1; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_ForcedOC1Config - * - * @brief Forces the TIMx output 1 waveform to active or inactive level. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ForcedAction - specifies the forced Action to be set to the - * output waveform. - * TIM_ForcedAction_Active - Force active level on OC1REF. - * TIM_ForcedAction_InActive - Force inactive level on OC1REF. - * - * @return none - */ -void TIM_ForcedOC1Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= (uint16_t) ~((uint16_t)TIM_OC1M); - tmpccmr1 |= TIM_ForcedAction; - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_ForcedOC2Config - * - * @brief Forces the TIMx output 2 waveform to active or inactive level. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ForcedAction - specifies the forced Action to be set to the - * output waveform. - * TIM_ForcedAction_Active - Force active level on OC2REF. - * TIM_ForcedAction_InActive - Force inactive level on OC2REF. - * - * @return none - */ -void TIM_ForcedOC2Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= (uint16_t) ~((uint16_t)TIM_OC2M); - tmpccmr1 |= (uint16_t)(TIM_ForcedAction << 8); - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_ForcedOC3Config - * - * @brief Forces the TIMx output 3 waveform to active or inactive level. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ForcedAction - specifies the forced Action to be set to the - * output waveform. - * TIM_ForcedAction_Active - Force active level on OC3REF. - * TIM_ForcedAction_InActive - Force inactive level on OC3REF. - * - * @return none - */ -void TIM_ForcedOC3Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= (uint16_t) ~((uint16_t)TIM_OC3M); - tmpccmr2 |= TIM_ForcedAction; - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_ForcedOC4Config - * - * @brief Forces the TIMx output 4 waveform to active or inactive level. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_ForcedAction - specifies the forced Action to be set to the - * output waveform. - * TIM_ForcedAction_Active - Force active level on OC4REF. - * TIM_ForcedAction_InActive - Force inactive level on OC4REF. - * - * @return none - */ -void TIM_ForcedOC4Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= (uint16_t) ~((uint16_t)TIM_OC4M); - tmpccmr2 |= (uint16_t)(TIM_ForcedAction << 8); - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_ARRPreloadConfig - * - * @brief Enables or disables TIMx peripheral Preload register on ARR. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_ARRPreloadConfig(TIM_TypeDef *TIMx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->CTLR1 |= TIM_ARPE; - } - else - { - TIMx->CTLR1 &= (uint16_t) ~((uint16_t)TIM_ARPE); - } -} - -/********************************************************************* - * @fn TIM_SelectCOM - * - * @brief Selects the TIM peripheral Commutation event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_SelectCOM(TIM_TypeDef *TIMx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->CTLR2 |= TIM_CCUS; - } - else - { - TIMx->CTLR2 &= (uint16_t) ~((uint16_t)TIM_CCUS); - } -} - -/********************************************************************* - * @fn TIM_SelectCCDMA - * - * @brief Selects the TIMx peripheral Capture Compare DMA source. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_SelectCCDMA(TIM_TypeDef *TIMx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->CTLR2 |= TIM_CCDS; - } - else - { - TIMx->CTLR2 &= (uint16_t) ~((uint16_t)TIM_CCDS); - } -} - -/********************************************************************* - * @fn TIM_CCPreloadControl - * - * @brief DSets or Resets the TIM peripheral Capture Compare Preload Control bit. - * reset values (Affects also the I2Ss). - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_CCPreloadControl(TIM_TypeDef *TIMx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->CTLR2 |= TIM_CCPC; - } - else - { - TIMx->CTLR2 &= (uint16_t) ~((uint16_t)TIM_CCPC); - } -} - -/********************************************************************* - * @fn TIM_OC1PreloadConfig - * - * @brief Enables or disables the TIMx peripheral Preload register on CCR1. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPreload - new state of the TIMx peripheral Preload register. - * TIM_OCPreload_Enable. - * TIM_OCPreload_Disable. - * - * @return none - */ -void TIM_OC1PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= (uint16_t) ~((uint16_t)TIM_OC1PE); - tmpccmr1 |= TIM_OCPreload; - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_OC2PreloadConfig - * - * @brief Enables or disables the TIMx peripheral Preload register on CCR2. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPreload - new state of the TIMx peripheral Preload register. - * TIM_OCPreload_Enable. - * TIM_OCPreload_Disable. - * - * @return none - */ -void TIM_OC2PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= (uint16_t) ~((uint16_t)TIM_OC2PE); - tmpccmr1 |= (uint16_t)(TIM_OCPreload << 8); - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_OC3PreloadConfig - * - * @brief Enables or disables the TIMx peripheral Preload register on CCR3. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPreload - new state of the TIMx peripheral Preload register. - * TIM_OCPreload_Enable. - * TIM_OCPreload_Disable. - * - * @return none - */ -void TIM_OC3PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= (uint16_t) ~((uint16_t)TIM_OC3PE); - tmpccmr2 |= TIM_OCPreload; - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_OC4PreloadConfig - * - * @brief Enables or disables the TIMx peripheral Preload register on CCR4. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPreload - new state of the TIMx peripheral Preload register. - * TIM_OCPreload_Enable. - * TIM_OCPreload_Disable. - * - * @return none - */ -void TIM_OC4PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= (uint16_t) ~((uint16_t)TIM_OC4PE); - tmpccmr2 |= (uint16_t)(TIM_OCPreload << 8); - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_OC1FastConfig - * - * @brief Configures the TIMx Output Compare 1 Fast feature. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCFast - new state of the Output Compare Fast Enable Bit. - * TIM_OCFast_Enable - TIM output compare fast enable. - * TIM_OCFast_Disable - TIM output compare fast disable. - * - * @return none - */ -void TIM_OC1FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= (uint16_t) ~((uint16_t)TIM_OC1FE); - tmpccmr1 |= TIM_OCFast; - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_OC2FastConfig - * - * @brief Configures the TIMx Output Compare 2 Fast feature. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCFast - new state of the Output Compare Fast Enable Bit. - * TIM_OCFast_Enable - TIM output compare fast enable. - * TIM_OCFast_Disable - TIM output compare fast disable. - * - * @return none - */ -void TIM_OC2FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= (uint16_t) ~((uint16_t)TIM_OC2FE); - tmpccmr1 |= (uint16_t)(TIM_OCFast << 8); - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_OC3FastConfig - * - * @brief Configures the TIMx Output Compare 3 Fast feature. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCFast - new state of the Output Compare Fast Enable Bit. - * TIM_OCFast_Enable - TIM output compare fast enable. - * TIM_OCFast_Disable - TIM output compare fast disable. - * - * @return none - */ -void TIM_OC3FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= (uint16_t) ~((uint16_t)TIM_OC3FE); - tmpccmr2 |= TIM_OCFast; - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_OC4FastConfig - * - * @brief Configures the TIMx Output Compare 4 Fast feature. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCFast - new state of the Output Compare Fast Enable Bit. - * TIM_OCFast_Enable - TIM output compare fast enable. - * TIM_OCFast_Disable - TIM output compare fast disable. - * - * @return none - */ -void TIM_OC4FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= (uint16_t) ~((uint16_t)TIM_OC4FE); - tmpccmr2 |= (uint16_t)(TIM_OCFast << 8); - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_ClearOC1Ref - * - * @brief Clears or safeguards the OCREF1 signal on an external event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCClear - new state of the Output Compare Clear Enable Bit. - * TIM_OCClear_Enable - TIM Output clear enable. - * TIM_OCClear_Disable - TIM Output clear disable. - * - * @return none - */ -void TIM_ClearOC1Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= (uint16_t) ~((uint16_t)TIM_OC1CE); - tmpccmr1 |= TIM_OCClear; - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_ClearOC2Ref - * - * @brief Clears or safeguards the OCREF2 signal on an external event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCClear - new state of the Output Compare Clear Enable Bit. - * TIM_OCClear_Enable - TIM Output clear enable. - * TIM_OCClear_Disable - TIM Output clear disable. - * - * @return none - */ -void TIM_ClearOC2Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear) -{ - uint16_t tmpccmr1 = 0; - - tmpccmr1 = TIMx->CHCTLR1; - tmpccmr1 &= (uint16_t) ~((uint16_t)TIM_OC2CE); - tmpccmr1 |= (uint16_t)(TIM_OCClear << 8); - TIMx->CHCTLR1 = tmpccmr1; -} - -/********************************************************************* - * @fn TIM_ClearOC3Ref - * - * @brief Clears or safeguards the OCREF3 signal on an external event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCClear - new state of the Output Compare Clear Enable Bit. - * TIM_OCClear_Enable - TIM Output clear enable. - * TIM_OCClear_Disable - TIM Output clear disable. - * - * @return none - */ -void TIM_ClearOC3Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= (uint16_t) ~((uint16_t)TIM_OC3CE); - tmpccmr2 |= TIM_OCClear; - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_ClearOC4Ref - * - * @brief Clears or safeguards the OCREF4 signal on an external event. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCClear - new state of the Output Compare Clear Enable Bit. - * TIM_OCClear_Enable - TIM Output clear enable. - * TIM_OCClear_Disable - TIM Output clear disable. - * - * @return none - */ -void TIM_ClearOC4Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear) -{ - uint16_t tmpccmr2 = 0; - - tmpccmr2 = TIMx->CHCTLR2; - tmpccmr2 &= (uint16_t) ~((uint16_t)TIM_OC4CE); - tmpccmr2 |= (uint16_t)(TIM_OCClear << 8); - TIMx->CHCTLR2 = tmpccmr2; -} - -/********************************************************************* - * @fn TIM_OC1PolarityConfig - * - * @brief Configures the TIMx channel 1 polarity. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPolarity - specifies the OC1 Polarity. - * TIM_OCPolarity_High - Output Compare active high. - * TIM_OCPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC1PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= (uint16_t) ~((uint16_t)TIM_CC1P); - tmpccer |= TIM_OCPolarity; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC1NPolarityConfig - * - * @brief Configures the TIMx channel 1 polarity. - * - * @param TIMx - where x can be 1 to select the TIM peripheral. - * TIM_OCNPolarity - specifies the OC1N Polarity. - * TIM_OCNPolarity_High - Output Compare active high. - * TIM_OCNPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC1NPolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= (uint16_t) ~((uint16_t)TIM_CC1NP); - tmpccer |= TIM_OCNPolarity; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC2PolarityConfig - * - * @brief Configures the TIMx channel 2 polarity. - * - * @param TIMx - where x can be 1 to 4 to select the TIM peripheral. - * TIM_OCPolarity - specifies the OC2 Polarity. - * TIM_OCPolarity_High - Output Compare active high. - * TIM_OCPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC2PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= (uint16_t) ~((uint16_t)TIM_CC2P); - tmpccer |= (uint16_t)(TIM_OCPolarity << 4); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC2NPolarityConfig - * - * @brief Configures the TIMx channel 2 polarity. - * - * @param TIMx - where x can be 1 to select the TIM peripheral. - * TIM_OCNPolarity - specifies the OC1N Polarity. - * TIM_OCNPolarity_High - Output Compare active high. - * TIM_OCNPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC2NPolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= (uint16_t) ~((uint16_t)TIM_CC2NP); - tmpccer |= (uint16_t)(TIM_OCNPolarity << 4); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC3PolarityConfig - * - * @brief Configures the TIMx Channel 3 polarity. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_OCPolarit - specifies the OC3 Polarity. - * TIM_OCPolarity_High - Output Compare active high. - * TIM_OCPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC3PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= (uint16_t) ~((uint16_t)TIM_CC3P); - tmpccer |= (uint16_t)(TIM_OCPolarity << 8); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC3NPolarityConfig - * - * @brief Configures the TIMx Channel 3N polarity. - * - * @param TIMx - where x can be 1 to select the TIM peripheral. - * TIM_OCNPolarity - specifies the OC2N Polarity. - * TIM_OCNPolarity_High - Output Compare active high. - * TIM_OCNPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC3NPolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= (uint16_t) ~((uint16_t)TIM_CC3NP); - tmpccer |= (uint16_t)(TIM_OCNPolarity << 8); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_OC4PolarityConfig - * - * @brief Configures the TIMx Channel 4 polarity. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_OCPolarit - specifies the OC3 Polarity. - * TIM_OCPolarity_High - Output Compare active high. - * TIM_OCPolarity_Low - Output Compare active low. - * - * @return none - */ -void TIM_OC4PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity) -{ - uint16_t tmpccer = 0; - - tmpccer = TIMx->CCER; - tmpccer &= (uint16_t) ~((uint16_t)TIM_CC4P); - tmpccer |= (uint16_t)(TIM_OCPolarity << 12); - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TIM_CCxCmd - * - * @brief Enables or disables the TIM Capture Compare Channel x. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_Channel - specifies the TIM Channel. - * TIM_Channel_1 - TIM Channel 1. - * TIM_Channel_2 - TIM Channel 2. - * TIM_Channel_3 - TIM Channel 3. - * TIM_Channel_4 - TIM Channel 4. - * TIM_CCx - specifies the TIM Channel CCxE bit new state. - * TIM_CCx_Enable. - * TIM_CCx_Disable. - * - * @return none - */ -void TIM_CCxCmd(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx) -{ - uint16_t tmp = 0; - - tmp = CCER_CCE_Set << TIM_Channel; - TIMx->CCER &= (uint16_t)~tmp; - TIMx->CCER |= (uint16_t)(TIM_CCx << TIM_Channel); -} - -/********************************************************************* - * @fn TIM_CCxNCmd - * - * @brief Enables or disables the TIM Capture Compare Channel xN. - * - * @param TIMx - where x can be 1 select the TIM peripheral. - * TIM_Channel - specifies the TIM Channel. - * TIM_Channel_1 - TIM Channel 1. - * TIM_Channel_2 - TIM Channel 2. - * TIM_Channel_3 - TIM Channel 3. - * TIM_CCxN - specifies the TIM Channel CCxNE bit new state. - * TIM_CCxN_Enable. - * TIM_CCxN_Disable. - * - * @return none - */ -void TIM_CCxNCmd(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN) -{ - uint16_t tmp = 0; - - tmp = CCER_CCNE_Set << TIM_Channel; - TIMx->CCER &= (uint16_t)~tmp; - TIMx->CCER |= (uint16_t)(TIM_CCxN << TIM_Channel); -} - -/********************************************************************* - * @fn TIM_SelectOCxM - * - * @brief Selects the TIM Output Compare Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_Channel - specifies the TIM Channel. - * TIM_Channel_1 - TIM Channel 1. - * TIM_Channel_2 - TIM Channel 2. - * TIM_Channel_3 - TIM Channel 3. - * TIM_Channel_4 - TIM Channel 4. - * TIM_OCMode - specifies the TIM Output Compare Mode. - * TIM_OCMode_Timing. - * TIM_OCMode_Active. - * TIM_OCMode_Toggle. - * TIM_OCMode_PWM1. - * TIM_OCMode_PWM2. - * TIM_ForcedAction_Active. - * TIM_ForcedAction_InActive. - * - * @return none - */ -void TIM_SelectOCxM(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode) -{ - uint32_t tmp = 0; - uint16_t tmp1 = 0; - - tmp = (uint32_t)TIMx; - tmp += CHCTLR_Offset; - tmp1 = CCER_CCE_Set << (uint16_t)TIM_Channel; - TIMx->CCER &= (uint16_t)~tmp1; - - if((TIM_Channel == TIM_Channel_1) || (TIM_Channel == TIM_Channel_3)) - { - tmp += (TIM_Channel >> 1); - *(__IO uint32_t *)tmp &= (uint32_t) ~((uint32_t)TIM_OC1M); - *(__IO uint32_t *)tmp |= TIM_OCMode; - } - else - { - tmp += (uint16_t)(TIM_Channel - (uint16_t)4) >> (uint16_t)1; - *(__IO uint32_t *)tmp &= (uint32_t) ~((uint32_t)TIM_OC2M); - *(__IO uint32_t *)tmp |= (uint16_t)(TIM_OCMode << 8); - } -} - -/********************************************************************* - * @fn TIM_UpdateDisableConfig - * - * @brief Enables or Disables the TIMx Update event. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_UpdateDisableConfig(TIM_TypeDef *TIMx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->CTLR1 |= TIM_UDIS; - } - else - { - TIMx->CTLR1 &= (uint16_t) ~((uint16_t)TIM_UDIS); - } -} - -/********************************************************************* - * @fn TIM_UpdateRequestConfig - * - * @brief Configures the TIMx Update Request Interrupt source. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_UpdateSource - specifies the Update source. - * TIM_UpdateSource_Regular. - * TIM_UpdateSource_Global. - * - * @return none - */ -void TIM_UpdateRequestConfig(TIM_TypeDef *TIMx, uint16_t TIM_UpdateSource) -{ - if(TIM_UpdateSource != TIM_UpdateSource_Global) - { - TIMx->CTLR1 |= TIM_URS; - } - else - { - TIMx->CTLR1 &= (uint16_t) ~((uint16_t)TIM_URS); - } -} - -/********************************************************************* - * @fn TIM_SelectHallSensor - * - * @brief Enables or disables the TIMx's Hall sensor interface. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void TIM_SelectHallSensor(TIM_TypeDef *TIMx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - TIMx->CTLR2 |= TIM_TI1S; - } - else - { - TIMx->CTLR2 &= (uint16_t) ~((uint16_t)TIM_TI1S); - } -} - -/********************************************************************* - * @fn TIM_SelectOnePulseMode - * - * @brief Selects the TIMx's One Pulse Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_OPMode - specifies the OPM Mode to be used. - * TIM_OPMode_Single. - * TIM_OPMode_Repetitive. - * - * @return none - */ -void TIM_SelectOnePulseMode(TIM_TypeDef *TIMx, uint16_t TIM_OPMode) -{ - TIMx->CTLR1 &= (uint16_t) ~((uint16_t)TIM_OPM); - TIMx->CTLR1 |= TIM_OPMode; -} - -/********************************************************************* - * @fn TIM_SelectOutputTrigger - * - * @brief Selects the TIMx Trigger Output Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_TRGOSource - specifies the Trigger Output source. - * TIM_TRGOSource_Reset - The UG bit in the TIM_EGR register is - * used as the trigger output (TRGO). - * TIM_TRGOSource_Enable - The Counter Enable CEN is used as the - * trigger output (TRGO). - * TIM_TRGOSource_Update - The update event is selected as the - * trigger output (TRGO). - * TIM_TRGOSource_OC1 - The trigger output sends a positive pulse - * when the CC1IF flag is to be set, as soon as a capture or compare match occurs (TRGO). - * TIM_TRGOSource_OC1Ref - OC1REF signal is used as the trigger output (TRGO). - * TIM_TRGOSource_OC2Ref - OC2REF signal is used as the trigger output (TRGO). - * TIM_TRGOSource_OC3Ref - OC3REF signal is used as the trigger output (TRGO). - * TIM_TRGOSource_OC4Ref - OC4REF signal is used as the trigger output (TRGO). - * - * @return none - */ -void TIM_SelectOutputTrigger(TIM_TypeDef *TIMx, uint16_t TIM_TRGOSource) -{ - TIMx->CTLR2 &= (uint16_t) ~((uint16_t)TIM_MMS); - TIMx->CTLR2 |= TIM_TRGOSource; -} - -/********************************************************************* - * @fn TIM_SelectSlaveMode - * - * @brief Selects the TIMx Slave Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_SlaveMode - specifies the Timer Slave Mode. - * TIM_SlaveMode_Reset - Rising edge of the selected trigger - * signal (TRGI) re-initializes. - * TIM_SlaveMode_Gated - The counter clock is enabled when the - * trigger signal (TRGI) is high. - * TIM_SlaveMode_Trigger - The counter starts at a rising edge - * of the trigger TRGI. - * TIM_SlaveMode_External1 - Rising edges of the selected trigger - * (TRGI) clock the counter. - * - * @return none - */ -void TIM_SelectSlaveMode(TIM_TypeDef *TIMx, uint16_t TIM_SlaveMode) -{ - TIMx->SMCFGR &= (uint16_t) ~((uint16_t)TIM_SMS); - TIMx->SMCFGR |= TIM_SlaveMode; -} - -/********************************************************************* - * @fn TIM_SelectMasterSlaveMode - * - * @brief Sets or Resets the TIMx Master/Slave Mode. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_MasterSlaveMode - specifies the Timer Master Slave Mode. - * TIM_MasterSlaveMode_Enable - synchronization between the current - * timer and its slaves (through TRGO). - * TIM_MasterSlaveMode_Disable - No action. - * - * @return none - */ -void TIM_SelectMasterSlaveMode(TIM_TypeDef *TIMx, uint16_t TIM_MasterSlaveMode) -{ - TIMx->SMCFGR &= (uint16_t) ~((uint16_t)TIM_MSM); - TIMx->SMCFGR |= TIM_MasterSlaveMode; -} - -/********************************************************************* - * @fn TIM_SetCounter - * - * @brief Sets the TIMx Counter Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Counter - specifies the Counter register new value. - * - * @return none - */ -void TIM_SetCounter(TIM_TypeDef *TIMx, uint16_t Counter) -{ - TIMx->CNT = Counter; -} - -/********************************************************************* - * @fn TIM_SetAutoreload - * - * @brief Sets the TIMx Autoreload Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Autoreload - specifies the Autoreload register new value. - * - * @return none - */ -void TIM_SetAutoreload(TIM_TypeDef *TIMx, uint16_t Autoreload) -{ - TIMx->ATRLR = Autoreload; -} - -/********************************************************************* - * @fn TIM_SetCompare1 - * - * @brief Sets the TIMx Capture Compare1 Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Compare1 - specifies the Capture Compare1 register new value. - * - * @return none - */ -void TIM_SetCompare1(TIM_TypeDef *TIMx, uint16_t Compare1) -{ - TIMx->CH1CVR = Compare1; -} - -/********************************************************************* - * @fn TIM_SetCompare2 - * - * @brief Sets the TIMx Capture Compare2 Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Compare1 - specifies the Capture Compare1 register new value. - * - * @return none - */ -void TIM_SetCompare2(TIM_TypeDef *TIMx, uint16_t Compare2) -{ - TIMx->CH2CVR = Compare2; -} - -/********************************************************************* - * @fn TIM_SetCompare3 - * - * @brief Sets the TIMx Capture Compare3 Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Compare1 - specifies the Capture Compare1 register new value. - * - * @return none - */ -void TIM_SetCompare3(TIM_TypeDef *TIMx, uint16_t Compare3) -{ - TIMx->CH3CVR = Compare3; -} - -/********************************************************************* - * @fn TIM_SetCompare4 - * - * @brief Sets the TIMx Capture Compare4 Register value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * Compare1 - specifies the Capture Compare1 register new value. - * - * @return none - */ -void TIM_SetCompare4(TIM_TypeDef *TIMx, uint16_t Compare4) -{ - TIMx->CH4CVR = Compare4; -} - -/********************************************************************* - * @fn TIM_SetIC1Prescaler - * - * @brief Sets the TIMx Input Capture 1 prescaler. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_ICPSC - specifies the Input Capture1 prescaler new value. - * TIM_ICPSC_DIV1 - no prescaler. - * TIM_ICPSC_DIV2 - capture is done once every 2 events. - * TIM_ICPSC_DIV4 - capture is done once every 4 events. - * TIM_ICPSC_DIV8 - capture is done once every 8 events. - * - * @return none - */ -void TIM_SetIC1Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC) -{ - TIMx->CHCTLR1 &= (uint16_t) ~((uint16_t)TIM_IC1PSC); - TIMx->CHCTLR1 |= TIM_ICPSC; -} - -/********************************************************************* - * @fn TIM_SetIC2Prescaler - * - * @brief Sets the TIMx Input Capture 2 prescaler. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_ICPSC - specifies the Input Capture1 prescaler new value. - * TIM_ICPSC_DIV1 - no prescaler. - * TIM_ICPSC_DIV2 - capture is done once every 2 events. - * TIM_ICPSC_DIV4 - capture is done once every 4 events. - * TIM_ICPSC_DIV8 - capture is done once every 8 events. - * - * @return none - */ -void TIM_SetIC2Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC) -{ - TIMx->CHCTLR1 &= (uint16_t) ~((uint16_t)TIM_IC2PSC); - TIMx->CHCTLR1 |= (uint16_t)(TIM_ICPSC << 8); -} - -/********************************************************************* - * @fn TIM_SetIC3Prescaler - * - * @brief Sets the TIMx Input Capture 3 prescaler. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_ICPSC - specifies the Input Capture1 prescaler new value. - * TIM_ICPSC_DIV1 - no prescaler. - * TIM_ICPSC_DIV2 - capture is done once every 2 events. - * TIM_ICPSC_DIV4 - capture is done once every 4 events. - * TIM_ICPSC_DIV8 - capture is done once every 8 events. - * - * @return none - */ -void TIM_SetIC3Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC) -{ - TIMx->CHCTLR2 &= (uint16_t) ~((uint16_t)TIM_IC3PSC); - TIMx->CHCTLR2 |= TIM_ICPSC; -} - -/********************************************************************* - * @fn TIM_SetIC4Prescaler - * - * @brief Sets the TIMx Input Capture 4 prescaler. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_ICPSC - specifies the Input Capture1 prescaler new value. - * TIM_ICPSC_DIV1 - no prescaler. - * TIM_ICPSC_DIV2 - capture is done once every 2 events. - * TIM_ICPSC_DIV4 - capture is done once every 4 events. - * TIM_ICPSC_DIV8 - capture is done once every 8 events. - * - * @return none - */ -void TIM_SetIC4Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC) -{ - TIMx->CHCTLR2 &= (uint16_t) ~((uint16_t)TIM_IC4PSC); - TIMx->CHCTLR2 |= (uint16_t)(TIM_ICPSC << 8); -} - -/********************************************************************* - * @fn TIM_SetClockDivision - * - * @brief Sets the TIMx Clock Division value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_CKD - specifies the clock division value. - * TIM_CKD_DIV1 - TDTS = Tck_tim. - * TIM_CKD_DIV2 - TDTS = 2*Tck_tim. - * TIM_CKD_DIV4 - TDTS = 4*Tck_tim. - * - * @return none - */ -void TIM_SetClockDivision(TIM_TypeDef *TIMx, uint16_t TIM_CKD) -{ - TIMx->CTLR1 &= (uint16_t) ~((uint16_t)TIM_CTLR1_CKD); - TIMx->CTLR1 |= TIM_CKD; -} - -/********************************************************************* - * @fn TIM_GetCapture1 - * - * @brief Gets the TIMx Input Capture 1 value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CH1CVR - Capture Compare 1 Register value. - */ -uint16_t TIM_GetCapture1(TIM_TypeDef *TIMx) -{ - return TIMx->CH1CVR; -} - -/********************************************************************* - * @fn TIM_GetCapture2 - * - * @brief Gets the TIMx Input Capture 2 value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CH2CVR - Capture Compare 2 Register value. - */ -uint16_t TIM_GetCapture2(TIM_TypeDef *TIMx) -{ - return TIMx->CH2CVR; -} - -/********************************************************************* - * @fn TIM_GetCapture2 - * - * @brief Gets the TIMx Input Capture 2 value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CH2CVR - Capture Compare 2 Register value. - */ -uint16_t TIM_GetCapture3(TIM_TypeDef *TIMx) -{ - return TIMx->CH3CVR; -} - -/********************************************************************* - * @fn TIM_GetCapture4 - * - * @brief Gets the TIMx Input Capture 4 value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CH4CVR - Capture Compare 4 Register value. - */ -uint16_t TIM_GetCapture4(TIM_TypeDef *TIMx) -{ - return TIMx->CH4CVR; -} - -/********************************************************************* - * @fn TIM_GetCounter - * - * @brief Gets the TIMx Counter value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->CNT - Counter Register value. - */ -uint16_t TIM_GetCounter(TIM_TypeDef *TIMx) -{ - return TIMx->CNT; -} - -/********************************************************************* - * @fn TIM_GetPrescaler - * - * @brief Gets the TIMx Prescaler value. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * - * @return TIMx->PSC - Prescaler Register value. - */ -uint16_t TIM_GetPrescaler(TIM_TypeDef *TIMx) -{ - return TIMx->PSC; -} - -/********************************************************************* - * @fn TIM_GetFlagStatus - * - * @brief Checks whether the specified TIM flag is set or not. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_FLAG - specifies the flag to check. - * TIM_FLAG_Update - TIM update Flag. - * TIM_FLAG_CC1 - TIM Capture Compare 1 Flag. - * TIM_FLAG_CC2 - TIM Capture Compare 2 Flag. - * TIM_FLAG_CC3 - TIM Capture Compare 3 Flag. - * TIM_FLAG_CC4 - TIM Capture Compare 4 Flag. - * TIM_FLAG_COM - TIM Commutation Flag. - * TIM_FLAG_Trigger - TIM Trigger Flag. - * TIM_FLAG_Break - TIM Break Flag. - * TIM_FLAG_CC1OF - TIM Capture Compare 1 overcapture Flag. - * TIM_FLAG_CC2OF - TIM Capture Compare 2 overcapture Flag. - * TIM_FLAG_CC3OF - TIM Capture Compare 3 overcapture Flag. - * TIM_FLAG_CC4OF - TIM Capture Compare 4 overcapture Flag. - * - * @return SET or RESET. - */ -FlagStatus TIM_GetFlagStatus(TIM_TypeDef *TIMx, uint16_t TIM_FLAG) -{ - ITStatus bitstatus = RESET; - - if((TIMx->INTFR & TIM_FLAG) != (uint16_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn TIM_ClearFlag - * - * @brief Clears the TIMx's pending flags. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_FLAG - specifies the flag to check. - * TIM_FLAG_Update - TIM update Flag. - * TIM_FLAG_CC1 - TIM Capture Compare 1 Flag. - * TIM_FLAG_CC2 - TIM Capture Compare 2 Flag. - * TIM_FLAG_CC3 - TIM Capture Compare 3 Flag. - * TIM_FLAG_CC4 - TIM Capture Compare 4 Flag. - * TIM_FLAG_COM - TIM Commutation Flag. - * TIM_FLAG_Trigger - TIM Trigger Flag. - * TIM_FLAG_Break - TIM Break Flag. - * TIM_FLAG_CC1OF - TIM Capture Compare 1 overcapture Flag. - * TIM_FLAG_CC2OF - TIM Capture Compare 2 overcapture Flag. - * TIM_FLAG_CC3OF - TIM Capture Compare 3 overcapture Flag. - * TIM_FLAG_CC4OF - TIM Capture Compare 4 overcapture Flag. - * - * @return none - */ -void TIM_ClearFlag(TIM_TypeDef *TIMx, uint16_t TIM_FLAG) -{ - TIMx->INTFR = (uint16_t)~TIM_FLAG; -} - -/********************************************************************* - * @fn TIM_GetITStatus - * - * @brief Checks whether the TIM interrupt has occurred or not. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_IT - specifies the TIM interrupt source to check. - * TIM_IT_Update - TIM update Interrupt source. - * TIM_IT_CC1 - TIM Capture Compare 1 Interrupt source. - * TIM_IT_CC2 - TIM Capture Compare 2 Interrupt source. - * TIM_IT_CC3 - TIM Capture Compare 3 Interrupt source. - * TIM_IT_CC4 - TIM Capture Compare 4 Interrupt source. - * TIM_IT_COM - TIM Commutation Interrupt source. - * TIM_IT_Trigger - TIM Trigger Interrupt source. - * TIM_IT_Break - TIM Break Interrupt source. - * - * @return none - */ -ITStatus TIM_GetITStatus(TIM_TypeDef *TIMx, uint16_t TIM_IT) -{ - ITStatus bitstatus = RESET; - uint16_t itstatus = 0x0, itenable = 0x0; - - itstatus = TIMx->INTFR & TIM_IT; - - itenable = TIMx->DMAINTENR & TIM_IT; - if((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn TIM_ClearITPendingBit - * - * @brief Clears the TIMx's interrupt pending bits. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * TIM_IT - specifies the TIM interrupt source to check. - * TIM_IT_Update - TIM update Interrupt source. - * TIM_IT_CC1 - TIM Capture Compare 1 Interrupt source. - * TIM_IT_CC2 - TIM Capture Compare 2 Interrupt source. - * TIM_IT_CC3 - TIM Capture Compare 3 Interrupt source. - * TIM_IT_CC4 - TIM Capture Compare 4 Interrupt source. - * TIM_IT_COM - TIM Commutation Interrupt source. - * TIM_IT_Trigger - TIM Trigger Interrupt source. - * TIM_IT_Break - TIM Break Interrupt source. - * - * @return none - */ -void TIM_ClearITPendingBit(TIM_TypeDef *TIMx, uint16_t TIM_IT) -{ - TIMx->INTFR = (uint16_t)~TIM_IT; -} - -/********************************************************************* - * @fn TI1_Config - * - * @brief Configure the TI1 as Input. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * IM_ICPolarity - The Input Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_ICSelection - specifies the input to be used. - * TIM_ICSelection_DirectTI - TIM Input 1 is selected to be - * connected to IC1. - * TIM_ICSelection_IndirectTI - TIM Input 1 is selected to be - * connected to IC2. - * TIM_ICSelection_TRC - TIM Input 1 is selected to be connected - * to TRC. - * TIM_ICFilter - Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * - * @return none - */ -static void TI1_Config(TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter) -{ - uint16_t tmpccmr1 = 0, tmpccer = 0; - - TIMx->CCER &= (uint16_t) ~((uint16_t)TIM_CC1E); - tmpccmr1 = TIMx->CHCTLR1; - tmpccer = TIMx->CCER; - tmpccmr1 &= (uint16_t)(((uint16_t) ~((uint16_t)TIM_CC1S)) & ((uint16_t) ~((uint16_t)TIM_IC1F))); - - TIMx->CHCTLR1 |= (uint16_t)(TIM_ICSelection); - tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); - - if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3) || (TIMx == TIM4)) - { - tmpccer &= (uint16_t) ~((uint16_t)(TIM_CC1P)); - tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC1E); - } - else - { - tmpccer &= (uint16_t) ~((uint16_t)(TIM_CC1P | TIM_CC1NP)); - tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC1E); - } - - TIMx->CHCTLR1 = tmpccmr1; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TI2_Config - * - * @brief Configure the TI2 as Input. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * IM_ICPolarity - The Input Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_ICSelection - specifies the input to be used. - * TIM_ICSelection_DirectTI - TIM Input 2 is selected to be - * connected to IC1. - * TIM_ICSelection_IndirectTI - TIM Input 2 is selected to be - * connected to IC2. - * TIM_ICSelection_TRC - TIM Input 2 is selected to be connected - * to TRC. - * TIM_ICFilter - Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * - * @return none - */ -static void TI2_Config(TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter) -{ - uint16_t tmpccmr1 = 0, tmpccer = 0, tmp = 0; - - TIMx->CCER &= (uint16_t) ~((uint16_t)TIM_CC2E); - tmpccmr1 = TIMx->CHCTLR1; - tmpccer = TIMx->CCER; - tmp = (uint16_t)(TIM_ICPolarity << 4); - tmpccmr1 &= (uint16_t)(((uint16_t) ~((uint16_t)TIM_CC2S)) & ((uint16_t) ~((uint16_t)TIM_IC2F))); - - TIMx->CHCTLR1 |= (uint16_t)(TIM_ICSelection << 8); - tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12); - - if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3) || (TIMx == TIM4)) - { - tmpccer &= (uint16_t) ~((uint16_t)(TIM_CC2P)); - tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CC2E); - } - else - { - tmpccer &= (uint16_t) ~((uint16_t)(TIM_CC2P | TIM_CC2NP)); - tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC2E); - } - - TIMx->CHCTLR1 = tmpccmr1; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TI3_Config - * - * @brief Configure the TI3 as Input. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * IM_ICPolarity - The Input Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_ICSelection - specifies the input to be used. - * TIM_ICSelection_DirectTI - TIM Input 3 is selected to be - * connected to IC1. - * TIM_ICSelection_IndirectTI - TIM Input 3 is selected to be - * connected to IC2. - * TIM_ICSelection_TRC - TIM Input 3 is selected to be connected - * to TRC. - * TIM_ICFilter - Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * - * @return none - */ -static void TI3_Config(TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter) -{ - uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; - - TIMx->CCER &= (uint16_t) ~((uint16_t)TIM_CC3E); - tmpccmr2 = TIMx->CHCTLR2; - tmpccer = TIMx->CCER; - tmp = (uint16_t)(TIM_ICPolarity << 8); - tmpccmr2 &= (uint16_t)(((uint16_t) ~((uint16_t)TIM_CC3S)) & ((uint16_t) ~((uint16_t)TIM_IC3F))); - - TIMx->CHCTLR2 |= (uint16_t)(TIM_ICSelection); - tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); - - if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3) || (TIMx == TIM4)) - { - tmpccer &= (uint16_t) ~((uint16_t)(TIM_CC3P)); - tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CC3E); - } - else - { - tmpccer &= (uint16_t) ~((uint16_t)(TIM_CC3P | TIM_CC3NP)); - tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC3E); - } - - TIMx->CHCTLR2 = tmpccmr2; - TIMx->CCER = tmpccer; -} - -/********************************************************************* - * @fn TI4_Config - * - * @brief Configure the TI4 as Input. - * - * @param TIMx - where x can be 1 to 4 select the TIM peripheral. - * IM_ICPolarity - The Input Polarity. - * TIM_ICPolarity_Rising. - * TIM_ICPolarity_Falling. - * TIM_ICSelection - specifies the input to be used. - * TIM_ICSelection_DirectTI - TIM Input 4 is selected to be - * connected to IC1. - * TIM_ICSelection_IndirectTI - TIM Input 4 is selected to be - * connected to IC2. - * TIM_ICSelection_TRC - TIM Input 4 is selected to be connected - * to TRC. - * TIM_ICFilter - Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * - * @return none - */ -static void TI4_Config(TIM_TypeDef *TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, - uint16_t TIM_ICFilter) -{ - uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; - - TIMx->CCER &= (uint16_t) ~((uint16_t)TIM_CC4E); - tmpccmr2 = TIMx->CHCTLR2; - tmpccer = TIMx->CCER; - tmp = (uint16_t)(TIM_ICPolarity << 12); - tmpccmr2 &= (uint16_t)((uint16_t)(~(uint16_t)TIM_CC4S) & ((uint16_t) ~((uint16_t)TIM_IC4F))); - - TIMx->CHCTLR2 |= (uint16_t)(TIM_ICSelection << 8); - tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12); - - if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3) || (TIMx == TIM4)) - { - tmpccer &= (uint16_t) ~((uint16_t)(TIM_CC4P)); - tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CC4E); - } - else - { - tmpccer &= (uint16_t) ~((uint16_t)(TIM_CC3P | TIM_CC4NP)); - tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC4E); - } - - TIMx->CHCTLR2 = tmpccmr2; - TIMx->CCER = tmpccer; -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usart.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usart.c deleted file mode 100644 index fd8e8b0..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usart.c +++ /dev/null @@ -1,815 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_usart.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the USART firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_usart.h" -#include "ch32v10x_rcc.h" - -/* USART_Private_Defines */ -#define CTLR1_UE_Set ((uint16_t)0x2000) /* USART Enable Mask */ -#define CTLR1_UE_Reset ((uint16_t)0xDFFF) /* USART Disable Mask */ - -#define CTLR1_WAKE_Mask ((uint16_t)0xF7FF) /* USART WakeUp Method Mask */ - -#define CTLR1_RWU_Set ((uint16_t)0x0002) /* USART mute mode Enable Mask */ -#define CTLR1_RWU_Reset ((uint16_t)0xFFFD) /* USART mute mode Enable Mask */ -#define CTLR1_SBK_Set ((uint16_t)0x0001) /* USART Break Character send Mask */ -#define CTLR1_CLEAR_Mask ((uint16_t)0xE9F3) /* USART CR1 Mask */ -#define CTLR2_Address_Mask ((uint16_t)0xFFF0) /* USART address Mask */ - -#define CTLR2_LINEN_Set ((uint16_t)0x4000) /* USART LIN Enable Mask */ -#define CTLR2_LINEN_Reset ((uint16_t)0xBFFF) /* USART LIN Disable Mask */ - -#define CTLR2_LBDL_Mask ((uint16_t)0xFFDF) /* USART LIN Break detection Mask */ -#define CTLR2_STOP_CLEAR_Mask ((uint16_t)0xCFFF) /* USART CR2 STOP Bits Mask */ -#define CTLR2_CLOCK_CLEAR_Mask ((uint16_t)0xF0FF) /* USART CR2 Clock Mask */ - -#define CTLR3_SCEN_Set ((uint16_t)0x0020) /* USART SC Enable Mask */ -#define CTLR3_SCEN_Reset ((uint16_t)0xFFDF) /* USART SC Disable Mask */ - -#define CTLR3_NACK_Set ((uint16_t)0x0010) /* USART SC NACK Enable Mask */ -#define CTLR3_NACK_Reset ((uint16_t)0xFFEF) /* USART SC NACK Disable Mask */ - -#define CTLR3_HDSEL_Set ((uint16_t)0x0008) /* USART Half-Duplex Enable Mask */ -#define CTLR3_HDSEL_Reset ((uint16_t)0xFFF7) /* USART Half-Duplex Disable Mask */ - -#define CTLR3_IRLP_Mask ((uint16_t)0xFFFB) /* USART IrDA LowPower mode Mask */ -#define CTLR3_CLEAR_Mask ((uint16_t)0xFCFF) /* USART CR3 Mask */ - -#define CTLR3_IREN_Set ((uint16_t)0x0002) /* USART IrDA Enable Mask */ -#define CTLR3_IREN_Reset ((uint16_t)0xFFFD) /* USART IrDA Disable Mask */ -#define GPR_LSB_Mask ((uint16_t)0x00FF) /* Guard Time Register LSB Mask */ -#define GPR_MSB_Mask ((uint16_t)0xFF00) /* Guard Time Register MSB Mask */ -#define IT_Mask ((uint16_t)0x001F) /* USART Interrupt Mask */ - -/* USART OverSampling-8 Mask */ -#define CTLR1_OVER8_Set ((uint16_t)0x8000) /* USART OVER8 mode Enable Mask */ -#define CTLR1_OVER8_Reset ((uint16_t)0x7FFF) /* USART OVER8 mode Disable Mask */ - -/* USART One Bit Sampling Mask */ -#define CTLR3_ONEBITE_Set ((uint16_t)0x0800) /* USART ONEBITE mode Enable Mask */ -#define CTLR3_ONEBITE_Reset ((uint16_t)0xF7FF) /* USART ONEBITE mode Disable Mask */ - -/********************************************************************* - * @fn USART_DeInit - * - * @brief Deinitializes the USARTx peripheral registers to their default - * reset values. - * - * @param USARTx - where x can be 1, 2 or 3 to select the UART peripheral. - * - * @return none - */ -void USART_DeInit(USART_TypeDef *USARTx) -{ - if(USARTx == USART1) - { - RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE); - RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE); - } - else if(USARTx == USART2) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE); - } - else if(USARTx == USART3) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE); - } - else if(USARTx == UART4) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE); - } - else - { - if(USARTx == UART5) - { - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE); - } - } -} - -/********************************************************************* - * @fn USART_Init - * - * @brief Initializes the USARTx peripheral according to the specified - * parameters in the USART_InitStruct. - * - * @param USARTx - where x can be 1, 2 or 3 to select the UART peripheral. - * USART_InitStruct - pointer to a USART_InitTypeDef structure - * that contains the configuration information for the specified - * USART peripheral. - * - * @return none - */ -void USART_Init(USART_TypeDef *USARTx, USART_InitTypeDef *USART_InitStruct) -{ - uint32_t tmpreg = 0x00, apbclock = 0x00; - uint32_t integerdivider = 0x00; - uint32_t fractionaldivider = 0x00; - uint32_t usartxbase = 0; - RCC_ClocksTypeDef RCC_ClocksStatus; - - if(USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None) - { - } - - usartxbase = (uint32_t)USARTx; - tmpreg = USARTx->CTLR2; - tmpreg &= CTLR2_STOP_CLEAR_Mask; - tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits; - - USARTx->CTLR2 = (uint16_t)tmpreg; - tmpreg = USARTx->CTLR1; - tmpreg &= CTLR1_CLEAR_Mask; - tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity | - USART_InitStruct->USART_Mode; - USARTx->CTLR1 = (uint16_t)tmpreg; - - tmpreg = USARTx->CTLR3; - tmpreg &= CTLR3_CLEAR_Mask; - tmpreg |= USART_InitStruct->USART_HardwareFlowControl; - USARTx->CTLR3 = (uint16_t)tmpreg; - - RCC_GetClocksFreq(&RCC_ClocksStatus); - - if(usartxbase == USART1_BASE) - { - apbclock = RCC_ClocksStatus.PCLK2_Frequency; - } - else - { - apbclock = RCC_ClocksStatus.PCLK1_Frequency; - } - - if((USARTx->CTLR1 & CTLR1_OVER8_Set) != 0) - { - integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate))); - } - else - { - integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate))); - } - tmpreg = (integerdivider / 100) << 4; - - fractionaldivider = integerdivider - (100 * (tmpreg >> 4)); - - if((USARTx->CTLR1 & CTLR1_OVER8_Set) != 0) - { - tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07); - } - else - { - tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F); - } - - USARTx->BRR = (uint16_t)tmpreg; -} - -/********************************************************************* - * @fn USART_StructInit - * - * @brief Fills each USART_InitStruct member with its default value. - * - * @param USART_InitStruct: pointer to a USART_InitTypeDef structure - * which will be initialized. - * - * @return none - */ -void USART_StructInit(USART_InitTypeDef *USART_InitStruct) -{ - USART_InitStruct->USART_BaudRate = 9600; - USART_InitStruct->USART_WordLength = USART_WordLength_8b; - USART_InitStruct->USART_StopBits = USART_StopBits_1; - USART_InitStruct->USART_Parity = USART_Parity_No; - USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx; - USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None; -} - -/********************************************************************* - * @fn USART_ClockInit - * - * @brief Initializes the USARTx peripheral Clock according to the - * specified parameters in the USART_ClockInitStruct . - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_ClockInitStruct - pointer to a USART_ClockInitTypeDef - * structure that contains the configuration information for the specified - * USART peripheral. - * - * @return none - */ -void USART_ClockInit(USART_TypeDef *USARTx, USART_ClockInitTypeDef *USART_ClockInitStruct) -{ - uint32_t tmpreg = 0x00; - - tmpreg = USARTx->CTLR2; - tmpreg &= CTLR2_CLOCK_CLEAR_Mask; - tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | - USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit; - USARTx->CTLR2 = (uint16_t)tmpreg; -} - -/********************************************************************* - * @fn USART_ClockStructInit - * - * @brief Fills each USART_ClockStructInit member with its default value. - * - * @param USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef - * structure which will be initialized. - * - * @return none - */ -void USART_ClockStructInit(USART_ClockInitTypeDef *USART_ClockInitStruct) -{ - USART_ClockInitStruct->USART_Clock = USART_Clock_Disable; - USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low; - USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge; - USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable; -} - -/********************************************************************* - * @fn USART_Cmd - * - * @brief Enables or disables the specified USART peripheral. - * reset values (Affects also the I2Ss). - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState: ENABLE or DISABLE. - * - * @return none - */ -void USART_Cmd(USART_TypeDef *USARTx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR1 |= CTLR1_UE_Set; - } - else - { - USARTx->CTLR1 &= CTLR1_UE_Reset; - } -} - -/********************************************************************* - * @fn USART_ITConfig - * - * @brief Enables or disables the specified USART interrupts. - * reset values (Affects also the I2Ss). - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_IT - specifies the USART interrupt sources to be enabled or disabled. - * USART_IT_CTS - CTS change interrupt. - * USART_IT_LBD - LIN Break detection interrupt. - * USART_IT_TXE - Transmit Data Register empty interrupt. - * USART_IT_TC - Transmission complete interrupt. - * USART_IT_RXNE - Receive Data register not empty interrupt. - * USART_IT_IDLE - Idle line detection interrupt. - * USART_IT_PE - Parity Error interrupt. - * USART_IT_ERR - Error interrupt. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_ITConfig(USART_TypeDef *USARTx, uint16_t USART_IT, FunctionalState NewState) -{ - uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00; - uint32_t usartxbase = 0x00; - - if(USART_IT == USART_IT_CTS) - { - } - - usartxbase = (uint32_t)USARTx; - usartreg = (((uint8_t)USART_IT) >> 0x05); - itpos = USART_IT & IT_Mask; - itmask = (((uint32_t)0x01) << itpos); - - if(usartreg == 0x01) - { - usartxbase += 0x0C; - } - else if(usartreg == 0x02) - { - usartxbase += 0x10; - } - else - { - usartxbase += 0x14; - } - - if(NewState != DISABLE) - { - *(__IO uint32_t *)usartxbase |= itmask; - } - else - { - *(__IO uint32_t *)usartxbase &= ~itmask; - } -} - -/********************************************************************* - * @fn USART_DMACmd - * - * @brief Enables or disables the USART DMA interface. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_DMAReq - specifies the DMA request. - * USART_DMAReq_Tx - USART DMA transmit request. - * USART_DMAReq_Rx - USART DMA receive request. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_DMACmd(USART_TypeDef *USARTx, uint16_t USART_DMAReq, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR3 |= USART_DMAReq; - } - else - { - USARTx->CTLR3 &= (uint16_t)~USART_DMAReq; - } -} - -/********************************************************************* - * @fn USART_SetAddress - * - * @brief Sets the address of the USART node. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_Address - Indicates the address of the USART node. - * - * @return none - */ -void USART_SetAddress(USART_TypeDef *USARTx, uint8_t USART_Address) -{ - USARTx->CTLR2 &= CTLR2_Address_Mask; - USARTx->CTLR2 |= USART_Address; -} - -/********************************************************************* - * @fn USART_WakeUpConfig - * - * @brief Selects the USART WakeUp method. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_WakeUp - specifies the USART wakeup method. - * USART_WakeUp_IdleLine - WakeUp by an idle line detection. - * USART_WakeUp_AddressMark - WakeUp by an address mark. - * - * @return none - */ -void USART_WakeUpConfig(USART_TypeDef *USARTx, uint16_t USART_WakeUp) -{ - USARTx->CTLR1 &= CTLR1_WAKE_Mask; - USARTx->CTLR1 |= USART_WakeUp; -} - -/********************************************************************* - * @fn USART_ReceiverWakeUpCmd - * - * @brief Determines if the USART is in mute mode or not. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_ReceiverWakeUpCmd(USART_TypeDef *USARTx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR1 |= CTLR1_RWU_Set; - } - else - { - USARTx->CTLR1 &= CTLR1_RWU_Reset; - } -} - -/********************************************************************* - * @fn USART_LINBreakDetectLengthConfig - * - * @brief Sets the USART LIN Break detection length. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_LINBreakDetectLength - specifies the LIN break detection length. - * USART_LINBreakDetectLength_10b - 10-bit break detection. - * USART_LINBreakDetectLength_11b - 11-bit break detection. - * - * @return none - */ -void USART_LINBreakDetectLengthConfig(USART_TypeDef *USARTx, uint16_t USART_LINBreakDetectLength) -{ - USARTx->CTLR2 &= CTLR2_LBDL_Mask; - USARTx->CTLR2 |= USART_LINBreakDetectLength; -} - -/********************************************************************* - * @fn USART_LINCmd - * - * @brief Enables or disables the USART LIN mode. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_LINCmd(USART_TypeDef *USARTx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR2 |= CTLR2_LINEN_Set; - } - else - { - USARTx->CTLR2 &= CTLR2_LINEN_Reset; - } -} - -/********************************************************************* - * @fn USART_SendData - * - * @brief Transmits single data through the USARTx peripheral. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * Data - the data to transmit. - * - * @return none - */ -void USART_SendData(USART_TypeDef *USARTx, uint16_t Data) -{ - USARTx->DATAR = (Data & (uint16_t)0x01FF); -} - -/********************************************************************* - * @fn USART_ReceiveData - * - * @brief Returns the most recent received data by the USARTx peripheral. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * - * @return The received data. - */ -uint16_t USART_ReceiveData(USART_TypeDef *USARTx) -{ - return (uint16_t)(USARTx->DATAR & (uint16_t)0x01FF); -} - -/********************************************************************* - * @fn USART_SendBreak - * - * @brief Transmits break characters. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * - * @return none - */ -void USART_SendBreak(USART_TypeDef *USARTx) -{ - USARTx->CTLR1 |= CTLR1_SBK_Set; -} - -/********************************************************************* - * @fn USART_SetGuardTime - * - * @brief Sets the specified USART guard time. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_GuardTime - specifies the guard time. - * - * @return none - */ -void USART_SetGuardTime(USART_TypeDef *USARTx, uint8_t USART_GuardTime) -{ - USARTx->GPR &= GPR_LSB_Mask; - USARTx->GPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08); -} - -/********************************************************************* - * @fn USART_SetPrescaler - * - * @brief Sets the system clock prescaler. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_Prescaler - specifies the prescaler clock. - * - * @return none - */ -void USART_SetPrescaler(USART_TypeDef *USARTx, uint8_t USART_Prescaler) -{ - USARTx->GPR &= GPR_MSB_Mask; - USARTx->GPR |= USART_Prescaler; -} - -/********************************************************************* - * @fn USART_SmartCardCmd - * - * @brief Enables or disables the USART Smart Card mode. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_SmartCardCmd(USART_TypeDef *USARTx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR3 |= CTLR3_SCEN_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_SCEN_Reset; - } -} - -/********************************************************************* - * @fn USART_SmartCardNACKCmd - * - * @brief Enables or disables NACK transmission. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_SmartCardNACKCmd(USART_TypeDef *USARTx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR3 |= CTLR3_NACK_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_NACK_Reset; - } -} - -/********************************************************************* - * @fn USART_HalfDuplexCmd - * - * @brief Enables or disables the USART Half Duplex communication. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_HalfDuplexCmd(USART_TypeDef *USARTx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR3 |= CTLR3_HDSEL_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_HDSEL_Reset; - } -} - -/********************************************************************* - * @fn USART_OverSampling8Cmd - * - * @brief Enables or disables the USART's 8x oversampling mode. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_OverSampling8Cmd(USART_TypeDef *USARTx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR1 |= CTLR1_OVER8_Set; - } - else - { - USARTx->CTLR1 &= CTLR1_OVER8_Reset; - } -} - -/********************************************************************* - * @fn USART_OneBitMethodCmd - * - * @brief Enables or disables the USART's one bit sampling method. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_OneBitMethodCmd(USART_TypeDef *USARTx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR3 |= CTLR3_ONEBITE_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_ONEBITE_Reset; - } -} - -/********************************************************************* - * @fn USART_IrDAConfig - * - * @brief Configures the USART's IrDA interface. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_IrDAMode - specifies the IrDA mode. - * USART_IrDAMode_LowPower. - * USART_IrDAMode_Normal. - * - * @return none - */ -void USART_IrDAConfig(USART_TypeDef *USARTx, uint16_t USART_IrDAMode) -{ - USARTx->CTLR3 &= CTLR3_IRLP_Mask; - USARTx->CTLR3 |= USART_IrDAMode; -} - -/********************************************************************* - * @fn USART_IrDACmd - * - * @brief Enables or disables the USART's IrDA interface. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * NewState - ENABLE or DISABLE. - * - * @return none - */ -void USART_IrDACmd(USART_TypeDef *USARTx, FunctionalState NewState) -{ - if(NewState != DISABLE) - { - USARTx->CTLR3 |= CTLR3_IREN_Set; - } - else - { - USARTx->CTLR3 &= CTLR3_IREN_Reset; - } -} - -/********************************************************************* - * @fn USART_GetFlagStatus - * - * @brief Checks whether the specified USART flag is set or not. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_FLAG - specifies the flag to check. - * USART_FLAG_CTS - CTS Change flag. - * USART_FLAG_LBD - LIN Break detection flag. - * USART_FLAG_TXE - Transmit data register empty flag. - * USART_FLAG_TC - Transmission Complete flag. - * USART_FLAG_RXNE - Receive data register not empty flag. - * USART_FLAG_IDLE - Idle Line detection flag. - * USART_FLAG_ORE - OverRun Error flag. - * USART_FLAG_NE - Noise Error flag. - * USART_FLAG_FE - Framing Error flag. - * USART_FLAG_PE - Parity Error flag. - * - * @return bitstatus: SET or RESET - */ -FlagStatus USART_GetFlagStatus(USART_TypeDef *USARTx, uint16_t USART_FLAG) -{ - FlagStatus bitstatus = RESET; - - if(USART_FLAG == USART_FLAG_CTS) - { - } - - if((USARTx->STATR & USART_FLAG) != (uint16_t)RESET) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - return bitstatus; -} - -/********************************************************************* - * @fn USART_ClearFlag - * - * @brief Clears the USARTx's pending flags. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_FLAG - specifies the flag to clear. - * USART_FLAG_CTS - CTS Change flag. - * USART_FLAG_LBD - LIN Break detection flag. - * USART_FLAG_TC - Transmission Complete flag. - * USART_FLAG_RXNE - Receive data register not empty flag. - * - * @return none - */ -void USART_ClearFlag(USART_TypeDef *USARTx, uint16_t USART_FLAG) -{ - if((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS) - { - } - - USARTx->STATR = (uint16_t)~USART_FLAG; -} - -/********************************************************************* - * @fn USART_GetITStatus - * - * @brief Checks whether the specified USART interrupt has occurred or not. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_IT - specifies the USART interrupt source to check. - * USART_IT_CTS - CTS change interrupt. - * USART_IT_LBD - LIN Break detection interrupt. - * USART_IT_TXE - Tansmit Data Register empty interrupt. - * USART_IT_TC - Transmission complete interrupt. - * USART_IT_RXNE - Receive Data register not empty interrupt. - * USART_IT_IDLE - Idle line detection interrupt. - * USART_IT_ORE_RX - OverRun Error interrupt if the RXNEIE bit is set. - * USART_IT_ORE_ER - OverRun Error interrupt if the EIE bit is set. - * USART_IT_NE - Noise Error interrupt. - * USART_IT_FE - Framing Error interrupt. - * USART_IT_PE - Parity Error interrupt. - * - * @return bitstatus: SET or RESET. - */ -ITStatus USART_GetITStatus(USART_TypeDef *USARTx, uint16_t USART_IT) -{ - uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00; - ITStatus bitstatus = RESET; - - if(USART_IT == USART_IT_CTS) - { - } - - usartreg = (((uint8_t)USART_IT) >> 0x05); - itmask = USART_IT & IT_Mask; - itmask = (uint32_t)0x01 << itmask; - - if(usartreg == 0x01) - { - itmask &= USARTx->CTLR1; - } - else if(usartreg == 0x02) - { - itmask &= USARTx->CTLR2; - } - else - { - itmask &= USARTx->CTLR3; - } - - bitpos = USART_IT >> 0x08; - bitpos = (uint32_t)0x01 << bitpos; - bitpos &= USARTx->STATR; - - if((itmask != (uint16_t)RESET) && (bitpos != (uint16_t)RESET)) - { - bitstatus = SET; - } - else - { - bitstatus = RESET; - } - - return bitstatus; -} - -/********************************************************************* - * @fn USART_ClearITPendingBit - * - * @brief Clears the USARTx's interrupt pending bits. - * - * @param USARTx - where x can be 1, 2, 3 to select the USART peripheral. - * USART_IT - specifies the interrupt pending bit to clear. - * USART_IT_CTS - CTS change interrupt. - * USART_IT_LBD - LIN Break detection interrupt. - * USART_IT_TC - Transmission complete interrupt. - * USART_IT_RXNE - Receive Data register not empty interrupt. - * - * @return none - */ -void USART_ClearITPendingBit(USART_TypeDef *USARTx, uint16_t USART_IT) -{ - uint16_t bitpos = 0x00, itmask = 0x00; - - if(USART_IT == USART_IT_CTS) - { - } - - bitpos = USART_IT >> 0x08; - itmask = ((uint16_t)0x01 << (uint16_t)bitpos); - USARTx->STATR = (uint16_t)~itmask; -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usb.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usb.c deleted file mode 100644 index bc3093e..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usb.c +++ /dev/null @@ -1,170 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_usb.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the USB firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_usb.h" -#include "ch32v10x_rcc.h" -#include "debug.h" -/******************************** USB DEVICE **********************************/ - -/* Endpoint address */ -PUINT8 pEP0_RAM_Addr; -PUINT8 pEP1_RAM_Addr; -PUINT8 pEP2_RAM_Addr; -PUINT8 pEP3_RAM_Addr; -PUINT8 pEP4_RAM_Addr; -PUINT8 pEP5_RAM_Addr; -PUINT8 pEP6_RAM_Addr; -PUINT8 pEP7_RAM_Addr; - -/********************************************************************* - * @fn USB_DeviceInit - * - * @brief Initializes USB device. - * - * @return none - */ -void USB_DeviceInit(void) -{ - R8_USB_CTRL = 0x00; - - R8_UEP4_1_MOD = RB_UEP4_RX_EN | RB_UEP4_TX_EN | RB_UEP1_RX_EN | RB_UEP1_TX_EN; - R8_UEP2_3_MOD = RB_UEP2_RX_EN | RB_UEP2_TX_EN | RB_UEP3_RX_EN | RB_UEP3_TX_EN; - R8_UEP5_6_MOD = RB_UEP5_RX_EN | RB_UEP5_TX_EN | RB_UEP6_RX_EN | RB_UEP6_TX_EN; - R8_UEP7_MOD = RB_UEP7_RX_EN | RB_UEP7_TX_EN; - - R16_UEP0_DMA = (UINT16)(UINT32)pEP0_RAM_Addr; - R16_UEP1_DMA = (UINT16)(UINT32)pEP1_RAM_Addr; - R16_UEP2_DMA = (UINT16)(UINT32)pEP2_RAM_Addr; - R16_UEP3_DMA = (UINT16)(UINT32)pEP3_RAM_Addr; - R16_UEP4_DMA = (UINT16)(UINT32)pEP4_RAM_Addr; - R16_UEP5_DMA = (UINT16)(UINT32)pEP5_RAM_Addr; - R16_UEP6_DMA = (UINT16)(UINT32)pEP6_RAM_Addr; - R16_UEP7_DMA = (UINT16)(UINT32)pEP7_RAM_Addr; - - R8_UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP1_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP2_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP3_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP4_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP5_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP6_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - R8_UEP7_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; - - R8_USB_INT_FG = 0xFF; - R8_USB_INT_EN = RB_UIE_SUSPEND | RB_UIE_BUS_RST | RB_UIE_TRANSFER; - - R8_USB_DEV_AD = 0x00; - R8_USB_CTRL = RB_UC_DEV_PU_EN | RB_UC_INT_BUSY | RB_UC_DMA_EN; - R8_UDEV_CTRL = RB_UD_PD_DIS | RB_UD_PORT_EN; -} - -/********************************************************************* - * @fn DevEP1_IN_Deal - * - * @brief Device endpoint1 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP1_IN_Deal(UINT8 l) -{ - R8_UEP1_T_LEN = l; - R8_UEP1_CTRL = (R8_UEP1_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK; -} - -/********************************************************************* - * @fn DevEP2_IN_Deal - * - * @brief Device endpoint2 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP2_IN_Deal(UINT8 l) -{ - R8_UEP2_T_LEN = l; - R8_UEP2_CTRL = (R8_UEP2_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK; -} - -/********************************************************************* - * @fn DevEP3_IN_Deal - * - * @brief Device endpoint3 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP3_IN_Deal(UINT8 l) -{ - R8_UEP3_T_LEN = l; - R8_UEP3_CTRL = (R8_UEP3_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK; -} - -/********************************************************************* - * @fn DevEP4_IN_Deal - * - * @brief Device endpoint4 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP4_IN_Deal(UINT8 l) -{ - R8_UEP4_T_LEN = l; - R8_UEP4_CTRL = (R8_UEP4_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK; -} - -/********************************************************************* - * @fn DevEP5_IN_Deal - * - * @brief Device endpoint5 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP5_IN_Deal(UINT8 l) -{ - R8_UEP5_T_LEN = l; - R8_UEP5_CTRL = (R8_UEP5_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK; -} - -/********************************************************************* - * @fn DevEP6_IN_Deal - * - * @brief Device endpoint6 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP6_IN_Deal(UINT8 l) -{ - R8_UEP6_T_LEN = l; - R8_UEP6_CTRL = (R8_UEP6_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK; -} - -/********************************************************************* - * @fn DevEP7_IN_Deal - * - * @brief Device endpoint7 IN - * - * @param l: IN length(<64B) - * - * @return none - */ -void DevEP7_IN_Deal(UINT8 l) -{ - R8_UEP7_T_LEN = l; - R8_UEP7_CTRL = (R8_UEP7_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK; -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usb_host.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usb_host.c deleted file mode 100644 index 1205f2f..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usb_host.c +++ /dev/null @@ -1,809 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_usb_host.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the USB firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_usb_host.h" -#include "debug.h" - -/******************************** HOST DEVICE **********************************/ -UINT8 UsbDevEndp0Size; -UINT8 FoundNewDev; -_RootHubDev ThisUsbDev; - -PUINT8 pHOST_RX_RAM_Addr; -PUINT8 pHOST_TX_RAM_Addr; -extern UINT8 Com_Buffer[128]; - -__attribute__((aligned(4))) const UINT8 SetupGetDevDescr[] = {USB_REQ_TYP_IN, USB_GET_DESCRIPTOR, 0x00, USB_DESCR_TYP_DEVICE, 0x00, 0x00, sizeof(USB_DEV_DESCR), 0x00}; - -__attribute__((aligned(4))) const UINT8 SetupGetCfgDescr[] = {USB_REQ_TYP_IN, USB_GET_DESCRIPTOR, 0x00, USB_DESCR_TYP_CONFIG, 0x00, 0x00, 0x04, 0x00}; - -__attribute__((aligned(4))) const UINT8 SetupSetUsbAddr[] = {USB_REQ_TYP_OUT, USB_SET_ADDRESS, USB_DEVICE_ADDR, 0x00, 0x00, 0x00, 0x00, 0x00}; - -__attribute__((aligned(4))) const UINT8 SetupSetUsbConfig[] = {USB_REQ_TYP_OUT, USB_SET_CONFIGURATION, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -__attribute__((aligned(4))) const UINT8 SetupSetUsbInterface[] = {USB_REQ_RECIP_INTERF, USB_SET_INTERFACE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -__attribute__((aligned(4))) const UINT8 SetupClrEndpStall[] = {USB_REQ_TYP_OUT | USB_REQ_RECIP_ENDP, USB_CLEAR_FEATURE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -/********************************************************************* - * @fn DisableRootHubPort( ) - * - * @brief Disable root hub - * - * @return none - */ -void DisableRootHubPort(void) -{ -#ifdef FOR_ROOT_UDISK_ONLY - CH103DiskStatus = DISK_DISCONNECT; - -#endif - -#ifndef DISK_BASE_BUF_LEN - ThisUsbDev.DeviceStatus = ROOT_DEV_DISCONNECT; - ThisUsbDev.DeviceAddress = 0x00; - -#endif -} - -/********************************************************************* - * @fn AnalyzeRootHub - * - * @brief Analyze root hub state. - * - * @return Error - */ -UINT8 AnalyzeRootHub(void) -{ - UINT8 s; - - s = ERR_SUCCESS; - - if(R8_USB_MIS_ST & RB_UMS_DEV_ATTACH) - { -#ifdef DISK_BASE_BUF_LEN - if(CH103DiskStatus == DISK_DISCONNECT - -#else - if(ThisUsbDev.DeviceStatus == ROOT_DEV_DISCONNECT - -#endif - || (R8_UHOST_CTRL & RB_UH_PORT_EN) == 0x00) - { - DisableRootHubPort(); - -#ifdef DISK_BASE_BUF_LEN - CH103DiskStatus = DISK_CONNECT; - -#else - ThisUsbDev.DeviceSpeed = R8_USB_MIS_ST & RB_UMS_DM_LEVEL ? 0 : 1; - ThisUsbDev.DeviceStatus = ROOT_DEV_CONNECTED; - -#endif - s = ERR_USB_CONNECT; - } - } - -#ifdef DISK_BASE_BUF_LEN - else if(CH103DiskStatus >= DISK_CONNECT) - { -#else - else if(ThisUsbDev.DeviceStatus >= ROOT_DEV_CONNECTED) - { - -#endif - DisableRootHubPort(); - if(s == ERR_SUCCESS) - s = ERR_USB_DISCON; - } - - return (s); -} - -/********************************************************************* - * @fn SetHostUsbAddr - * - * @brief Set USB host address - * - * @param addr - host address - * - * @return none - */ -void SetHostUsbAddr(UINT8 addr) -{ - R8_USB_DEV_AD = (R8_USB_DEV_AD & RB_UDA_GP_BIT) | (addr & MASK_USB_ADDR); -} - -#ifndef FOR_ROOT_UDISK_ONLY -/********************************************************************* - * @fn SetUsbSpeed - * - * @brief Set USB speed. - * - * @param FullSpeed - USB speed. - * - * @return none - */ -void SetUsbSpeed(UINT8 FullSpeed) -{ - if(FullSpeed) - { - R8_USB_CTRL &= ~RB_UC_LOW_SPEED; - R8_UH_SETUP &= ~RB_UH_PRE_PID_EN; - } - else - { - R8_USB_CTRL |= RB_UC_LOW_SPEED; - } -} -#endif - -/********************************************************************* - * @fn ResetRootHubPort( ) - * - * @brief Reset root hub - * - * @return none - */ -void ResetRootHubPort(void) -{ - UsbDevEndp0Size = DEFAULT_ENDP0_SIZE; - SetHostUsbAddr(0x00); - R8_UHOST_CTRL &= ~RB_UH_PORT_EN; - SetUsbSpeed(1); - R8_UHOST_CTRL = (R8_UHOST_CTRL & ~RB_UH_LOW_SPEED) | RB_UH_BUS_RESET; - Delay_Ms(15); - R8_UHOST_CTRL = R8_UHOST_CTRL & ~RB_UH_BUS_RESET; - Delay_Us(250); - R8_USB_INT_FG = RB_UIF_DETECT; -} - -/********************************************************************* - * @fn EnableRootHubPort( ) - * - * @brief Enable root hub. - * - * @return ERROR - */ -UINT8 EnableRootHubPort(void) -{ -#ifdef DISK_BASE_BUF_LEN - if(CH103DiskStatus < DISK_CONNECT) - CH103DiskStatus = DISK_CONNECT; - -#else - if(ThisUsbDev.DeviceStatus < ROOT_DEV_CONNECTED) - ThisUsbDev.DeviceStatus = ROOT_DEV_CONNECTED; - -#endif - if(R8_USB_MIS_ST & RB_UMS_DEV_ATTACH) - { -#ifndef DISK_BASE_BUF_LEN - if((R8_UHOST_CTRL & RB_UH_PORT_EN) == 0x00) - { - ThisUsbDev.DeviceSpeed = (R8_USB_MIS_ST & RB_UMS_DM_LEVEL) ? 0 : 1; - if(ThisUsbDev.DeviceSpeed == 0) - R8_UHOST_CTRL |= RB_UH_LOW_SPEED; - } - -#endif - R8_UHOST_CTRL |= RB_UH_PORT_EN; - return (ERR_SUCCESS); - } - - return (ERR_USB_DISCON); -} - -/********************************************************************* - * @fn WaitUSB_Interrupt - * - * @brief Wait USB Interrput. - * - * @return ERROR - */ -UINT8 WaitUSB_Interrupt(void) -{ - UINT16 i; - - for(i = WAIT_USB_TOUT_200US; i != 0 && (R8_USB_INT_FG & RB_UIF_TRANSFER) == 0; i--) - { - ; - } - return ((R8_USB_INT_FG & RB_UIF_TRANSFER) ? ERR_SUCCESS : ERR_USB_UNKNOWN); -} - -/********************************************************************* - * @fn USBHostTransact - * - * @brief USB host transport transaction - * @param endp_pid: endpoint and PID - * tog: Synchronization flag - * timeout: timeout times - * - * @return EEROR: - * ERR_USB_UNKNOWN - * ERR_USB_DISCON - * ERR_USB_CONNECT - * ERR_SUCCESS - */ -UINT8 USBHostTransact(UINT8 endp_pid, UINT8 tog, UINT32 timeout) -{ - UINT8 TransRetry; - UINT8 s, r; - UINT16 i; - - R8_UH_RX_CTRL = R8_UH_TX_CTRL = tog; - TransRetry = 0; - - do - { - R8_UH_EP_PID = endp_pid; - R8_USB_INT_FG = RB_UIF_TRANSFER; - for(i = WAIT_USB_TOUT_200US; i != 0 && (R8_USB_INT_FG & RB_UIF_TRANSFER) == 0; i--) - ; - R8_UH_EP_PID = 0x00; - if((R8_USB_INT_FG & RB_UIF_TRANSFER) == 0) - { - return (ERR_USB_UNKNOWN); - } - - if(R8_USB_INT_FG & RB_UIF_DETECT) - { - R8_USB_INT_FG = RB_UIF_DETECT; - s = AnalyzeRootHub(); - - if(s == ERR_USB_CONNECT) - FoundNewDev = 1; - -#ifdef DISK_BASE_BUF_LEN - - if(CH103DiskStatus == DISK_DISCONNECT) - return (ERR_USB_DISCON); - if(CH103DiskStatus == DISK_CONNECT) - return (ERR_USB_CONNECT); - -#else - if(ThisUsbDev.DeviceStatus == ROOT_DEV_DISCONNECT) - return (ERR_USB_DISCON); - if(ThisUsbDev.DeviceStatus == ROOT_DEV_CONNECTED) - return (ERR_USB_CONNECT); - -#endif - Delay_Us(200); - } - - if(R8_USB_INT_FG & RB_UIF_TRANSFER) - { - if(R8_USB_INT_ST & RB_UIS_TOG_OK) - return (ERR_SUCCESS); - r = R8_USB_INT_ST & MASK_UIS_H_RES; - if(r == USB_PID_STALL) - return (r | ERR_USB_TRANSFER); - - if(r == USB_PID_NAK) - { - if(timeout == 0) - return (r | ERR_USB_TRANSFER); - if(timeout < 0xFFFF) - timeout--; - --TransRetry; - } - else - switch(endp_pid >> 4) - { - case USB_PID_SETUP: - - case USB_PID_OUT: - if(r) - return (r | ERR_USB_TRANSFER); - break; - - case USB_PID_IN: - if(r == USB_PID_DATA0 && r == USB_PID_DATA1) - { - } - else if(r) - return (r | ERR_USB_TRANSFER); - break; - - default: - return (ERR_USB_UNKNOWN); - } - } - else - { - R8_USB_INT_FG = 0xFF; - } - Delay_Us(15); - } while(++TransRetry < 3); - - return (ERR_USB_TRANSFER); -} - -/********************************************************************* - * @fn HostCtrlTransfer - * - * @brief Host control transport. - * - * @param DataBuf : Receive or send data buffer. - * RetLen : Data length. - * - * @return ERR_USB_BUF_OVER IN - * ERR_SUCCESS - */ -UINT8 HostCtrlTransfer(PUINT8 DataBuf, PUINT8 RetLen) -{ - UINT16 RemLen = 0; - UINT8 s, RxLen, RxCnt, TxCnt; - PUINT8 pBuf; - PUINT8 pLen; - - pBuf = DataBuf; - pLen = RetLen; - Delay_Us(200); - if(pLen) - *pLen = 0; - - R8_UH_TX_LEN = sizeof(USB_SETUP_REQ); - s = USBHostTransact(USB_PID_SETUP << 4 | 0x00, 0x00, 200000 / 20); - if(s != ERR_SUCCESS) - return (s); - R8_UH_RX_CTRL = R8_UH_TX_CTRL = RB_UH_R_TOG | RB_UH_R_AUTO_TOG | RB_UH_T_TOG | RB_UH_T_AUTO_TOG; - R8_UH_TX_LEN = 0x01; - RemLen = pSetupReq->wLength; - - if(RemLen && pBuf) - { - if(pSetupReq->bRequestType & USB_REQ_TYP_IN) - { - while(RemLen) - { - Delay_Us(200); - s = USBHostTransact(USB_PID_IN << 4 | 0x00, R8_UH_RX_CTRL, 200000 / 20); - if(s != ERR_SUCCESS) - return (s); - RxLen = R8_USB_RX_LEN < RemLen ? R8_USB_RX_LEN : RemLen; - RemLen -= RxLen; - if(pLen) - *pLen += RxLen; - - for(RxCnt = 0; RxCnt != RxLen; RxCnt++) { - *pBuf = pHOST_RX_RAM_Addr[RxCnt]; - pBuf++; - } - - if(R8_USB_RX_LEN == 0 || (R8_USB_RX_LEN & (UsbDevEndp0Size - 1))) - break; - } - R8_UH_TX_LEN = 0x00; - } - else - { - while(RemLen) - { - Delay_Us(200); - R8_UH_TX_LEN = RemLen >= UsbDevEndp0Size ? UsbDevEndp0Size : RemLen; - - for(TxCnt = 0; TxCnt != R8_UH_TX_LEN; TxCnt++){ - pHOST_TX_RAM_Addr[TxCnt] = *pBuf; - pBuf++; - } - - s = USBHostTransact(USB_PID_OUT << 4 | 0x00, R8_UH_TX_CTRL, 200000 / 20); - if(s != ERR_SUCCESS) - return (s); - RemLen -= R8_UH_TX_LEN; - if(pLen) - *pLen += R8_UH_TX_LEN; - } - } - } - - Delay_Us(200); - s = USBHostTransact((R8_UH_TX_LEN ? USB_PID_IN << 4 | 0x00 : USB_PID_OUT << 4 | 0x00), RB_UH_R_TOG | RB_UH_T_TOG, 200000 / 20); - if(s != ERR_SUCCESS) - return (s); - if(R8_UH_TX_LEN == 0) - return (ERR_SUCCESS); - if(R8_USB_RX_LEN == 0) - return (ERR_SUCCESS); - - return (ERR_USB_BUF_OVER); -} - -/********************************************************************* - * @fn CopySetupReqPkg - * - * @brief Copy setup request package. - * - * @param pReqPkt: setup request package address. - * - * @return none - */ -void CopySetupReqPkg(const UINT8 *pReqPkt) -{ - UINT8 i; - - for(i = 0; i != sizeof(USB_SETUP_REQ); i++) { - ((PUINT8)pSetupReq)[i] = *pReqPkt; - pReqPkt++; - } -} - -/********************************************************************* - * @fn CtrlGetDeviceDescr - * - * @brief Get device descrptor. - * - * @param DataBuf: Data buffer. - * - * @return ERR_USB_BUF_OVER - * ERR_SUCCESS - */ -UINT8 CtrlGetDeviceDescr(PUINT8 DataBuf) -{ - UINT8 s; - UINT8 len; - - UsbDevEndp0Size = DEFAULT_ENDP0_SIZE; - CopySetupReqPkg(SetupGetDevDescr); - s = HostCtrlTransfer(DataBuf, &len); - - if(s != ERR_SUCCESS) - return (s); - UsbDevEndp0Size = ((PUSB_DEV_DESCR)DataBuf)->bMaxPacketSize0; - if(len < ((PUSB_SETUP_REQ)SetupGetDevDescr)->wLength) - return (ERR_USB_BUF_OVER); - - return (ERR_SUCCESS); -} - -/********************************************************************* - * @fn CtrlGetConfigDescr - * - * @brief Get configration descrptor. - * - * @param DataBuf: Data buffer. - * - * @return ERR_USB_BUF_OVER - * ERR_SUCCESS - */ -UINT8 CtrlGetConfigDescr(PUINT8 DataBuf) -{ - UINT8 s; - UINT8 len; - - CopySetupReqPkg(SetupGetCfgDescr); - s = HostCtrlTransfer(DataBuf, &len); - if(s != ERR_SUCCESS) - return (s); - if(len < ((PUSB_SETUP_REQ)SetupGetCfgDescr)->wLength) - return (ERR_USB_BUF_OVER); - - len = ((PUSB_CFG_DESCR)DataBuf)->wTotalLength; - CopySetupReqPkg(SetupGetCfgDescr); - pSetupReq->wLength = len; - s = HostCtrlTransfer(DataBuf, &len); - if(s != ERR_SUCCESS) - return (s); - - return (ERR_SUCCESS); -} - -/********************************************************************* - * @fn CtrlSetUsbAddress - * - * @brief Set USB device address. - * - * @param addr: Device address. - * - * @return ERR_SUCCESS - */ -UINT8 CtrlSetUsbAddress(UINT8 addr) -{ - UINT8 s; - - CopySetupReqPkg(SetupSetUsbAddr); - pSetupReq->wValue = addr; - s = HostCtrlTransfer(NULL, NULL); - if(s != ERR_SUCCESS) - return (s); - SetHostUsbAddr(addr); - Delay_Ms(10); - - return (ERR_SUCCESS); -} - -/********************************************************************* - * @fn CtrlSetUsbConfig - * - * @brief Set usb configration. - * - * @param cfg: Configration Value. - * - * @return ERR_SUCCESS - */ -UINT8 CtrlSetUsbConfig(UINT8 cfg) -{ - CopySetupReqPkg(SetupSetUsbConfig); - pSetupReq->wValue = cfg; - return (HostCtrlTransfer(NULL, NULL)); -} - -/********************************************************************* - * @fn CtrlClearEndpStall - * - * @brief Clear endpoint STALL. - * - * @param endp: Endpoint address. - * - * @return ERR_SUCCESS - */ -UINT8 CtrlClearEndpStall(UINT8 endp) -{ - CopySetupReqPkg(SetupClrEndpStall); - pSetupReq->wIndex = endp; - return (HostCtrlTransfer(NULL, NULL)); -} - -/********************************************************************* - * @fn CtrlSetUsbIntercace - * - * @brief Set USB Interface configration. - * - * @param cfg: Configration value. - * - * @return ERR_SUCCESS - */ -UINT8 CtrlSetUsbIntercace(UINT8 cfg) -{ - CopySetupReqPkg(SetupSetUsbInterface); - pSetupReq->wValue = cfg; - return (HostCtrlTransfer(NULL, NULL)); -} - -/********************************************************************* - * @fn USB_HostInit - * - * @brief Initializes USB host mode. - * - * @return ERR_SUCCESS - */ -void USB_HostInit(void) -{ - R8_USB_CTRL = RB_UC_HOST_MODE; - R8_UHOST_CTRL = 0; - R8_USB_DEV_AD = 0x00; - R8_UH_EP_MOD = RB_UH_EP_TX_EN | RB_UH_EP_RX_EN; - R16_UH_RX_DMA = (UINT16)(UINT32)pHOST_RX_RAM_Addr; - R16_UH_TX_DMA = (UINT16)(UINT32)pHOST_TX_RAM_Addr; - - R8_UH_RX_CTRL = 0x00; - R8_UH_TX_CTRL = 0x00; - R8_USB_CTRL = RB_UC_HOST_MODE | RB_UC_INT_BUSY | RB_UC_DMA_EN; - R8_UH_SETUP = RB_UH_SOF_EN; - R8_USB_INT_FG = 0xFF; - DisableRootHubPort(); - R8_USB_INT_EN = RB_UIE_TRANSFER | RB_UIE_DETECT; - - FoundNewDev = 0; -} - -/********************************************************************* - * @fn InitRootDevice - * - * @brief Initializes USB root hub. - * - * @param DataBuf: Data buffer. - * - * @return ERROR - */ -UINT8 InitRootDevice(PUINT8 DataBuf) -{ - UINT8 i, s; - UINT8 cfg, dv_cls, if_cls; - - ResetRootHubPort(); - - for(i = 0, s = 0; i < 100; i++) - { - Delay_Ms(1); - if(EnableRootHubPort() == ERR_SUCCESS) - { - i = 0; - s++; - if(s > 100) - break; - } - } - - if(i) - { - DisableRootHubPort(); - return (ERR_USB_DISCON); - } - - SetUsbSpeed(ThisUsbDev.DeviceSpeed); - - s = CtrlGetDeviceDescr(DataBuf); - - if(s == ERR_SUCCESS) - { - ThisUsbDev.DeviceVID = ((PUSB_DEV_DESCR)DataBuf)->idVendor; - ThisUsbDev.DevicePID = ((PUSB_DEV_DESCR)DataBuf)->idProduct; - dv_cls = ((PUSB_DEV_DESCR)DataBuf)->bDeviceClass; - - s = CtrlSetUsbAddress(((PUSB_SETUP_REQ)SetupSetUsbAddr)->wValue); - - if(s == ERR_SUCCESS) - { - ThisUsbDev.DeviceAddress = ((PUSB_SETUP_REQ)SetupSetUsbAddr)->wValue; - - s = CtrlGetConfigDescr(DataBuf); - - if(s == ERR_SUCCESS) - { - cfg = ((PUSB_CFG_DESCR)DataBuf)->bConfigurationValue; - if_cls = ((PUSB_CFG_DESCR_LONG)DataBuf)->itf_descr.bInterfaceClass; - - if((dv_cls == 0x00) && (if_cls == USB_DEV_CLASS_STORAGE)) - { -#ifdef FOR_ROOT_UDISK_ONLY - CH103DiskStatus = DISK_USB_ADDR; - return (ERR_SUCCESS); - } - else - return (ERR_USB_UNSUPPORT); - -#else - s = CtrlSetUsbConfig(cfg); - - if(s == ERR_SUCCESS) - { - ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; - ThisUsbDev.DeviceType = USB_DEV_CLASS_STORAGE; - SetUsbSpeed(1); - return (ERR_SUCCESS); - } - } - else if((dv_cls == 0x00) && (if_cls == USB_DEV_CLASS_PRINTER) && ((PUSB_CFG_DESCR_LONG)DataBuf)->itf_descr.bInterfaceSubClass == 0x01) - { - s = CtrlSetUsbConfig(cfg); - if(s == ERR_SUCCESS) - { - ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; - ThisUsbDev.DeviceType = USB_DEV_CLASS_PRINTER; - SetUsbSpeed(1); - return (ERR_SUCCESS); - } - } - else if((dv_cls == 0x00) && (if_cls == USB_DEV_CLASS_HID) && ((PUSB_CFG_DESCR_LONG)DataBuf)->itf_descr.bInterfaceSubClass <= 0x01) - { - if_cls = ((PUSB_CFG_DESCR_LONG)DataBuf)->itf_descr.bInterfaceProtocol; - s = CtrlSetUsbConfig(cfg); - if(s == ERR_SUCCESS) - { - ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; - if(if_cls == 1) - { - ThisUsbDev.DeviceType = DEV_TYPE_KEYBOARD; - SetUsbSpeed(1); - return (ERR_SUCCESS); - } - else if(if_cls == 2) - { - ThisUsbDev.DeviceType = DEV_TYPE_MOUSE; - SetUsbSpeed(1); - return (ERR_SUCCESS); - } - s = ERR_USB_UNSUPPORT; - } - } - else - { - s = CtrlSetUsbConfig(cfg); - if(s == ERR_SUCCESS) - { - ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; - ThisUsbDev.DeviceType = DEV_TYPE_UNKNOW; - SetUsbSpeed(1); - return (ERR_SUCCESS); - } - } - -#endif - } - } - } - -#ifdef FOR_ROOT_UDISK_ONLY - CH103DiskStatus = DISK_CONNECT; - -#else - ThisUsbDev.DeviceStatus = ROOT_DEV_FAILED; - -#endif - - SetUsbSpeed(1); - - return (s); -} - -/********************************************************************* - * @fn HubGetPortStatus - * - * @brief ѯHUB˿״̬,Com_Buffer - * - * @param UINT8 HubPortIndex - * - * @return ERR_SUCCESS ɹ - * ERR_USB_BUF_OVER ȴ - */ -UINT8 HubGetPortStatus(UINT8 HubPortIndex) -{ - UINT8 s; - UINT8 len; - - pSetupReq->bRequestType = HUB_GET_PORT_STATUS; - pSetupReq->bRequest = HUB_GET_STATUS; - pSetupReq->wValue = 0x0000; - pSetupReq->wIndex = 0x0000 | HubPortIndex; - pSetupReq->wLength = 0x0004; - s = HostCtrlTransfer(Com_Buffer, &len); // ִпƴ - if(s != ERR_SUCCESS) - { - return (s); - } - if(len < 4) - { - return (ERR_USB_BUF_OVER); // ȴ - } - - return (ERR_SUCCESS); -} - -/********************************************************************* - * @fn HubSetPortFeature - * - * @brief HUB˿ - * - * @param UINT8 HubPortIndex - * UINT8 FeatureSelt - * - * @return ERR_SUCCESS ɹ - */ -UINT8 HubSetPortFeature(UINT8 HubPortIndex, UINT8 FeatureSelt) -{ - pSetupReq->bRequestType = HUB_SET_PORT_FEATURE; - pSetupReq->bRequest = HUB_SET_FEATURE; - pSetupReq->wValue = 0x0000 | FeatureSelt; - pSetupReq->wIndex = 0x0000 | HubPortIndex; - pSetupReq->wLength = 0x0000; - return (HostCtrlTransfer(NULL, NULL)); // ִпƴ -} - -/********************************************************************* - * @fn HubClearPortFeature - * - * @brief HUB˿ - * - * @param UINT8 HubPortIndex - * UINT8 FeatureSelt - * - * @return ERR_SUCCESS ɹ - */ -UINT8 HubClearPortFeature(UINT8 HubPortIndex, UINT8 FeatureSelt) -{ - pSetupReq->bRequestType = HUB_CLEAR_PORT_FEATURE; - pSetupReq->bRequest = HUB_CLEAR_FEATURE; - pSetupReq->wValue = 0x0000 | FeatureSelt; - pSetupReq->wIndex = 0x0000 | HubPortIndex; - pSetupReq->wLength = 0x0000; - return (HostCtrlTransfer(NULL, NULL)); // ִпƴ -} diff --git a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_wwdg.c b/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_wwdg.c deleted file mode 100644 index 187a5d9..0000000 --- a/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_wwdg.c +++ /dev/null @@ -1,139 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_wwdg.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file provides all the WWDG firmware functions. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - **********************************************************************************/ -#include "ch32v10x_wwdg.h" -#include "ch32v10x_rcc.h" - -/* CTLR register bit mask */ -#define CTLR_WDGA_Set ((uint32_t)0x00000080) - -/* CFGR register bit mask */ -#define CFGR_WDGTB_Mask ((uint32_t)0xFFFFFE7F) -#define CFGR_W_Mask ((uint32_t)0xFFFFFF80) -#define BIT_Mask ((uint8_t)0x7F) - -/********************************************************************* - * @fn WWDG_DeInit - * - * @brief Deinitializes the WWDG peripheral registers to their default reset values - * - * @return none - */ -void WWDG_DeInit(void) -{ - RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE); - RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, DISABLE); -} - -/********************************************************************* - * @fn WWDG_SetPrescaler - * - * @brief Sets the WWDG Prescaler - * - * @param WWDG_Prescaler - specifies the WWDG Prescaler - * WWDG_Prescaler_1 - WWDG counter clock = (PCLK1/4096)/1 - * WWDG_Prescaler_2 - WWDG counter clock = (PCLK1/4096)/2 - * WWDG_Prescaler_4 - WWDG counter clock = (PCLK1/4096)/4 - * WWDG_Prescaler_8 - WWDG counter clock = (PCLK1/4096)/8 - * - * @return none - */ -void WWDG_SetPrescaler(uint32_t WWDG_Prescaler) -{ - uint32_t tmpreg = 0; - tmpreg = WWDG->CFGR & CFGR_WDGTB_Mask; - tmpreg |= WWDG_Prescaler; - WWDG->CFGR = tmpreg; -} - -/********************************************************************* - * @fn WWDG_SetWindowValue - * - * @brief Sets the WWDG window value - * - * @param WindowValue - specifies the window value to be compared to the - * downcounter,which must be lower than 0x80 - * - * @return none - */ -void WWDG_SetWindowValue(uint8_t WindowValue) -{ - __IO uint32_t tmpreg = 0; - - tmpreg = WWDG->CFGR & CFGR_W_Mask; - - tmpreg |= WindowValue & (uint32_t)BIT_Mask; - - WWDG->CFGR = tmpreg; -} - -/********************************************************************* - * @fn WWDG_EnableIT - * - * @brief Enables the WWDG Early Wakeup interrupt(EWI) - * - * @return none - */ -void WWDG_EnableIT(void) -{ - WWDG->CFGR |= (1 << 9); -} - -/********************************************************************* - * @fn WWDG_SetCounter - * - * @brief Sets the WWDG counter value - * - * @param Counter - specifies the watchdog counter value,which must be a - * number between 0x40 and 0x7F - * - * @return none - */ -void WWDG_SetCounter(uint8_t Counter) -{ - WWDG->CTLR = Counter & BIT_Mask; -} - -/********************************************************************* - * @fn WWDG_Enable - * - * @brief Enables WWDG and load the counter value - * - * @param Counter - specifies the watchdog counter value,which must be a - * number between 0x40 and 0x7F - * @return none - */ -void WWDG_Enable(uint8_t Counter) -{ - WWDG->CTLR = CTLR_WDGA_Set | Counter; -} - -/********************************************************************* - * @fn WWDG_GetFlagStatus - * - * @brief Checks whether the Early Wakeup interrupt flag is set or not - * - * @return The new state of the Early Wakeup interrupt flag (SET or RESET) - */ -FlagStatus WWDG_GetFlagStatus(void) -{ - return (FlagStatus)(WWDG->STATR); -} - -/********************************************************************* - * @fn WWDG_ClearFlag - * - * @brief Clears Early Wakeup interrupt flag - * - * @return none - */ -void WWDG_ClearFlag(void) -{ - WWDG->STATR = (uint32_t)RESET; -} diff --git a/Example/EpaperModuleTest_CH32V103/Startup/startup_ch32v10x.S b/Example/EpaperModuleTest_CH32V103/Startup/startup_ch32v10x.S deleted file mode 100644 index 9c2e6ac..0000000 --- a/Example/EpaperModuleTest_CH32V103/Startup/startup_ch32v10x.S +++ /dev/null @@ -1,232 +0,0 @@ -;/********************************** (C) COPYRIGHT ******************************* -;* File Name : startup_ch32v10x.s -;* Author : WCH -;* Version : V1.0.0 -;* Date : 2020/04/30 -;* Description : CH32V10x vector table for eclipse toolchain. -;* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. -;* SPDX-License-Identifier: Apache-2.0 -;*******************************************************************************/ - - .section .init,"ax",@progbits - .global _start - .align 1 -_start: - j handle_reset - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00000013 - .word 0x00100073 - .section .vector,"ax",@progbits - .align 1 -_vector_base: - .option norvc; - j _start - .word 0 - j NMI_Handler /* NMI Handler */ - j HardFault_Handler /* Hard Fault Handler */ - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - j SysTick_Handler /* SysTick Handler */ - .word 0 - j SW_handler /* SW Handler */ - .word 0 - /* External Interrupts */ - j WWDG_IRQHandler /* Window Watchdog */ - j PVD_IRQHandler /* PVD through EXTI Line detect */ - j TAMPER_IRQHandler /* TAMPER */ - j RTC_IRQHandler /* RTC */ - j FLASH_IRQHandler /* Flash */ - j RCC_IRQHandler /* RCC */ - j EXTI0_IRQHandler /* EXTI Line 0 */ - j EXTI1_IRQHandler /* EXTI Line 1 */ - j EXTI2_IRQHandler /* EXTI Line 2 */ - j EXTI3_IRQHandler /* EXTI Line 3 */ - j EXTI4_IRQHandler /* EXTI Line 4 */ - j DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */ - j DMA1_Channel2_IRQHandler /* DMA1 Channel 2 */ - j DMA1_Channel3_IRQHandler /* DMA1 Channel 3 */ - j DMA1_Channel4_IRQHandler /* DMA1 Channel 4 */ - j DMA1_Channel5_IRQHandler /* DMA1 Channel 5 */ - j DMA1_Channel6_IRQHandler /* DMA1 Channel 6 */ - j DMA1_Channel7_IRQHandler /* DMA1 Channel 7 */ - j ADC1_2_IRQHandler /* ADC1_2 */ - .word 0 - .word 0 - .word 0 - .word 0 - j EXTI9_5_IRQHandler /* EXTI Line 9..5 */ - j TIM1_BRK_IRQHandler /* TIM1 Break */ - j TIM1_UP_IRQHandler /* TIM1 Update */ - j TIM1_TRG_COM_IRQHandler /* TIM1 Trigger and Commutation */ - j TIM1_CC_IRQHandler /* TIM1 Capture Compare */ - j TIM2_IRQHandler /* TIM2 */ - j TIM3_IRQHandler /* TIM3 */ - j TIM4_IRQHandler /* TIM4 */ - j I2C1_EV_IRQHandler /* I2C1 Event */ - j I2C1_ER_IRQHandler /* I2C1 Error */ - j I2C2_EV_IRQHandler /* I2C2 Event */ - j I2C2_ER_IRQHandler /* I2C2 Error */ - j SPI1_IRQHandler /* SPI1 */ - j SPI2_IRQHandler /* SPI2 */ - j USART1_IRQHandler /* USART1 */ - j USART2_IRQHandler /* USART2 */ - j USART3_IRQHandler /* USART3 */ - j EXTI15_10_IRQHandler /* EXTI Line 15..10 */ - j RTCAlarm_IRQHandler /* RTC Alarm through EXTI Line */ - j USBWakeUp_IRQHandler /* USB Wakeup from suspend */ - j USBHD_IRQHandler /* USBHD */ - - .option rvc; - - .section .text.vector_handler, "ax", @progbits - .weak NMI_Handler - .weak HardFault_Handler - .weak SysTick_Handler - .weak SW_handler - .weak WWDG_IRQHandler - .weak PVD_IRQHandler - .weak TAMPER_IRQHandler - .weak RTC_IRQHandler - .weak FLASH_IRQHandler - .weak RCC_IRQHandler - .weak EXTI0_IRQHandler - .weak EXTI1_IRQHandler - .weak EXTI2_IRQHandler - .weak EXTI3_IRQHandler - .weak EXTI4_IRQHandler - .weak DMA1_Channel1_IRQHandler - .weak DMA1_Channel2_IRQHandler - .weak DMA1_Channel3_IRQHandler - .weak DMA1_Channel4_IRQHandler - .weak DMA1_Channel5_IRQHandler - .weak DMA1_Channel6_IRQHandler - .weak DMA1_Channel7_IRQHandler - .weak ADC1_2_IRQHandler - .weak EXTI9_5_IRQHandler - .weak TIM1_BRK_IRQHandler - .weak TIM1_UP_IRQHandler - .weak TIM1_TRG_COM_IRQHandler - .weak TIM1_CC_IRQHandler - .weak TIM2_IRQHandler - .weak TIM3_IRQHandler - .weak TIM4_IRQHandler - .weak I2C1_EV_IRQHandler - .weak I2C1_ER_IRQHandler - .weak I2C2_EV_IRQHandler - .weak I2C2_ER_IRQHandler - .weak SPI1_IRQHandler - .weak SPI2_IRQHandler - .weak USART1_IRQHandler - .weak USART2_IRQHandler - .weak USART3_IRQHandler - .weak EXTI15_10_IRQHandler - .weak RTCAlarm_IRQHandler - .weak USBWakeUp_IRQHandler - .weak USBHD_IRQHandler - -NMI_Handler: 1: j 1b -HardFault_Handler: 1: j 1b -SysTick_Handler: 1: j 1b -SW_handler: 1: j 1b -WWDG_IRQHandler: 1: j 1b -PVD_IRQHandler: 1: j 1b -TAMPER_IRQHandler: 1: j 1b -RTC_IRQHandler: 1: j 1b -FLASH_IRQHandler: 1: j 1b -RCC_IRQHandler: 1: j 1b -EXTI0_IRQHandler: 1: j 1b -EXTI1_IRQHandler: 1: j 1b -EXTI2_IRQHandler: 1: j 1b -EXTI3_IRQHandler: 1: j 1b -EXTI4_IRQHandler: 1: j 1b -DMA1_Channel1_IRQHandler: 1: j 1b -DMA1_Channel2_IRQHandler: 1: j 1b -DMA1_Channel3_IRQHandler: 1: j 1b -DMA1_Channel4_IRQHandler: 1: j 1b -DMA1_Channel5_IRQHandler: 1: j 1b -DMA1_Channel6_IRQHandler: 1: j 1b -DMA1_Channel7_IRQHandler: 1: j 1b -ADC1_2_IRQHandler: 1: j 1b -EXTI9_5_IRQHandler: 1: j 1b -TIM1_BRK_IRQHandler: 1: j 1b -TIM1_UP_IRQHandler: 1: j 1b -TIM1_TRG_COM_IRQHandler: 1: j 1b -TIM1_CC_IRQHandler: 1: j 1b -TIM2_IRQHandler: 1: j 1b -TIM3_IRQHandler: 1: j 1b -TIM4_IRQHandler: 1: j 1b -I2C1_EV_IRQHandler: 1: j 1b -I2C1_ER_IRQHandler: 1: j 1b -I2C2_EV_IRQHandler: 1: j 1b -I2C2_ER_IRQHandler: 1: j 1b -SPI1_IRQHandler: 1: j 1b -SPI2_IRQHandler: 1: j 1b -USART1_IRQHandler: 1: j 1b -USART2_IRQHandler: 1: j 1b -USART3_IRQHandler: 1: j 1b -EXTI15_10_IRQHandler: 1: j 1b -RTCAlarm_IRQHandler: 1: j 1b -USBWakeUp_IRQHandler: 1: j 1b -USBHD_IRQHandler: 1: j 1b - - .section .text.handle_reset,"ax",@progbits - .weak handle_reset - .align 1 -handle_reset: -.option push -.option norelax - la gp, __global_pointer$ -.option pop -1: - la sp, _eusrstack -2: - /* Load data section from flash to RAM */ - la a0, _data_lma - la a1, _data_vma - la a2, _edata - bgeu a1, a2, 2f -1: - lw t0, (a0) - sw t0, (a1) - addi a0, a0, 4 - addi a1, a1, 4 - bltu a1, a2, 1b -2: - /* clear bss section */ - la a0, _sbss - la a1, _ebss - bgeu a0, a1, 2f -1: - sw zero, (a0) - addi a0, a0, 4 - bltu a0, a1, 1b -2: - /* enable all interrupt */ - li t0, 0x88 - csrs mstatus, t0 - la t0, _vector_base - ori t0, t0, 1 - csrw mtvec, t0 - - jal SystemInit - la t0, main - csrw mepc, t0 - mret - - diff --git a/Example/EpaperModuleTest_CH32V103/User/Epaper/bmp.h b/Example/EpaperModuleTest_CH32V103/User/Epaper/bmp.h deleted file mode 100644 index bd22f80..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/Epaper/bmp.h +++ /dev/null @@ -1,638 +0,0 @@ -#ifndef __BMP_H -#define __BMP_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -////////////////array///////////////////////////////////////////////////////////////////////////////////// -const unsigned char gImage_1[4000] = { /* 0X01,0X01,0XFA,0X00,0X7A,0X00, */ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x0E,0x07,0x07, -0x07,0xDF,0xFE,0xFE,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x3C,0x1E,0xFE, -0xFE,0xFE,0x00,0x00,0x00,0x0C,0x0E,0x0F,0x07,0x07,0x87,0xFF,0xFE,0xFC,0x00,0x00, -0x18,0x1F,0x1F,0x0F,0x00,0x00,0x18,0x1F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0xF0, -0xF0,0xF0,0x70,0x30,0x30,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x60,0x70,0x70,0x30,0x30, -0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xF0, -0xE0,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x70,0x30,0x70,0xF0,0xF0,0xE0,0x80,0x00,0x00, -0xF0,0xF0,0xF0,0xF0,0x70,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, -0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00, -0x80,0xE0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0xC0,0xE0,0xF0, -0x70,0x30,0x70,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00, -0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0x3E,0x1F,0x0F,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0x80,0x02,0x03,0x03,0x07,0xCF,0xFF,0xFC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0x00,0xE0,0xF8,0xFC,0xBC,0x0C,0x0C,0x8C,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0xC1,0xFF,0xFF,0x7F,0x00,0x1C,0xFF,0xFF, -0xFF,0x0C,0x0C,0x0C,0x0C,0x8F,0x8F,0x0F,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x0F,0xFF,0xFF, -0xFE,0xFF,0x1F,0x01,0x7F,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x80,0x00,0x00, -0x00,0xE3,0xFF,0xFF,0x3E,0x00,0x1C,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x80,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xCD,0x0C,0x0C,0x0C,0x0D,0x8F, -0x8F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x06,0x07,0x07, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x03, -0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x06,0x00,0x00,0x00,0xFF,0xFF,0x07,0x07, -0x06,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07, -0x03,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x07, -0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00, -0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x03, -0x07,0x07,0x06,0x07,0x03,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x07,0x07,0x06,0x06, -0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00, -0xF8,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x7F,0x03, -0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFF,0xFF,0x7F,0xFF,0xFE,0xE0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0, -0xC0,0xC0,0xC0,0x80,0x00,0x00,0xC0,0xC0,0xC0,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFE, -0xFF,0x0F,0x07,0x07,0x07,0x07,0x07,0x0F,0x1F,0x1E,0x0C,0x00,0x00,0x00,0xC0,0xC0, -0xFE,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0x00,0x00,0xC3,0xC3,0xC3,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80, -0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0xC0,0xFE,0xFF,0x7F,0x03,0x03,0x7F,0xFF, -0xFE,0xC0,0x00,0x00,0xF8,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF, -0x8F,0x83,0x81,0x81,0x81,0x81,0x87,0xBF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00, -0xC0,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x07,0x3F,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00, -0x00,0x00,0xF8,0xFE,0xFF,0x3F,0x07,0x03,0x01,0x01,0x01,0x03,0x03,0x03,0x01,0x00, -0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3E,0x3C,0x78,0x78,0x78, -0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01, -0x01,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x1F,0x07,0x03,0x01, -0x01,0x01,0x03,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0x1F,0x07,0x03,0x01,0x01,0x01,0x03, -0x07,0xFF,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF, -0xFF,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF8,0xFE,0xFF,0xFF, -0x07,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xC3,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x83,0x03,0x03,0x00,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0x0F,0x0E,0x0E,0x0E, -0x0E,0x0E,0x0E,0x0F,0x3F,0xFF,0xFF,0xF0,0x80,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF0, -0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x7E, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x80,0xC0,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x7F,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0xFE,0xFF,0xFF,0x3F,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x07,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x00,0x00, -0x00,0x0E,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, -0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F, -0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x0F,0x06, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x04,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E, -0x0E,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x07,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00, -0x00,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0xC0, -0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0, -0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x80,0x00,0x00, -0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x80, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0E,0x0F, -0x07,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0xC1,0xFF,0xFF,0x7F, -0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x1C,0x7C,0xFC,0xF0,0xC0,0xF0,0xFC,0x7C,0x1C,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0xFF, -0xFF,0xFF,0x61,0x61,0xE1,0xE1,0xC1,0x80,0x00,0x00,0xFC,0xFF,0xFF,0x07,0x01,0x01, -0x03,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x7F,0xFC,0xF0,0xC0,0x00,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0xF0,0xF8,0xFE,0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xE0,0xF0,0xF8,0xFE,0xDF,0xCF,0xC3,0xC1,0xC0,0x00,0xC0,0xE0,0xF8,0xFC,0xFE, -0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x7F, -0x1F,0x0F,0x3F,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF8, -0xFC,0xFE,0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0xE0,0xE0,0xE0,0xC0,0x80,0xC0,0xE0,0xFF, -0xFF,0x3F,0x00,0x00,0x1F,0x7F,0xFF,0xF0,0xC0,0xC0,0xE0,0xFF,0xFF,0x3F,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0, -0xC0,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0, -0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x03,0x0F,0x7F,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03, -0x07,0x1F,0x3F,0xFC,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01, -0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; -const unsigned char gImage_2[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_3[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x1F,0x1F,0x0F,0x0F,0x9F,0xFF,0xFF,0xFE,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x78,0x7C,0x7E,0x3E,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x04,0x0E,0x1E,0x1F,0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x73,0x7F,0x3F,0x1F,0x0F,0x00,0x00,0x31,0x7B,0x7F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x07,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x30,0xF0,0xF0,0xF0,0x78,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0xF8,0x78,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xC0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF0,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0x70,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFE,0xFF,0xBF,0x9F,0x87,0x83,0x80,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0xC0,0xC0,0xC0,0xC7,0x87,0x87,0xCF,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x80,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x40,0xF8,0xFC,0xFC,0xFE,0xFE,0x9E,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9D,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE1,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x1C,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9C,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF0,0xF8,0xFC,0x7C,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x18,0x3C,0x3E,0x3E,0x1E,0x1E,0x3E,0xFE,0xFE,0xFC,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x9E,0x9E,0x9E,0x9E,0x1E,0x1E,0x00,0x00,0xE0,0xF8,0xFC,0xFE,0xFE,0x7E,0x1E,0x3E,0xFE,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xE0,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xC0,0xE0,0xF8,0xFC,0xFE,0xFE,0x3E,0x1E,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xFC,0xFF,0x7F,0x3F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x87,0x87,0x87,0x87,0x07,0x07,0x8F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x7F,0xFF,0xFF,0xFF,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0F,0x0F,0x0F,0x0F,0x0F,0x01,0x01,0x07,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x01,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x01,0x03,0x0F,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_4[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00, -0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE, -0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00, -0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80, -0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0, -0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30, -0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80, -0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF, -0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, -0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF, -0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF, -0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0, -0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F, -0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC, -0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF, -0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F, -0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80, -0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F, -0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F, -0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F, -0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F, -0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F, -0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00, -0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00, -0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F, -0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E, -0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_5[1600]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00, -0x00,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0, -0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF0, -0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFE, -0xE0,0x00,0x00,0x80,0xFC,0xFF,0xFF,0xFF,0x3F,0x01,0x00,0xC0,0xF0,0xF8,0xF8,0xFC, -0x7C,0x3C,0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x80,0xF0,0xFE, -0xFF,0xFF,0x3F,0x07,0x3F,0xFF,0xFF,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0xF8,0xF8,0xFC,0x7C,0x3C,0x3C,0x7C,0x7C,0x7C,0x78,0x38,0x78,0x7C,0xFF,0xFF, -0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F, -0xFF,0xFF,0xFF,0xFF,0xF1,0xE1,0xC0,0xC0,0xC1,0x81,0x83,0x03,0x03,0x01,0x00,0x78, -0x78,0xFC,0xFF,0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0xFC,0xFC,0xFC,0xFC, -0xFC,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,0xC0,0xF0, -0xF8,0xF8,0xFC,0xFC,0x7C,0x3C,0x3C,0x7C,0x78,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xF8,0xFC,0x7C,0x3C, -0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFE,0xF0,0xFF, -0xFF,0xFF,0x1F,0x01,0x00,0x07,0x7F,0xFF,0xFF,0xFE,0xE0,0xFF,0xFF,0xFF,0xFF,0x07, -0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x9E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F, -0x1F,0x1F,0x00,0xE0,0xFC,0xFF,0xFF,0xFF,0x3F,0x3D,0x3C,0x3C,0x3C,0x3F,0x3F,0xFF, -0xFF,0xFF,0xFC,0xE0,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC1,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x81,0x01,0x03,0x03,0x07,0x07,0x0F, -0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC3,0x00,0x00,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x07, -0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x1F, -0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0E,0x18,0x1F,0x1F,0x1F,0x1F,0x07,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x18,0x03,0x07, -0x0F,0x0F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0E,0x00,0x00,0x03,0x0F, -0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x18,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x0F, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0F,0x07,0x01,0x00, -0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1C,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00, -0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x1F,0x1F,0x1E, -0x1E,0x1E,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.c b/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.c deleted file mode 100644 index c4496a5..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.c +++ /dev/null @@ -1,922 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "epaper.h" -#include "epdfont.h" - -#include "systick.h" - -// epaper module -// res pin -> pa8 -// busy pin -> pa15 -// d/c pin -> pb14 -// cs pin -> pb12 -// sck pin -> pb13 -// mosi pin -> pb15 - -EPD_PAINT EPD_Paint; - -static uint8_t _hibernating = 1; - -static const unsigned char lut_partial[] = -{ - 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x40, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, -}; - -void epd_delay(uint16_t ms) -{ - delay(ms); -} - -void epd_res_set() -{ - GPIO_SetBits(GPIOA, GPIO_Pin_8); -} - -void epd_res_reset() -{ - GPIO_ResetBits(GPIOA, GPIO_Pin_8); -} - -void epd_dc_set() -{ - GPIO_SetBits(GPIOB, GPIO_Pin_14); -} - -void epd_dc_reset() -{ - GPIO_ResetBits(GPIOB, GPIO_Pin_14); -} - -void epd_cs_set() -{ - GPIO_SetBits(GPIOB, GPIO_Pin_12); -} - -void epd_cs_reset() -{ - GPIO_ResetBits(GPIOB, GPIO_Pin_12); -} - -uint8_t epd_is_busy() -{ - return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == Bit_RESET ? 0 : 1; -} - -void epd_io_init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure = {0}; - SPI_InitTypeDef spiConfig = {0}; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); - - /* configure the epaper module res pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - /* configure the epaper module busy pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - /* configure the epaper module d/c pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - /* configure the epaper module spi2 sck mosi pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - /* configure the epaper module cs pin */ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - /* configure spi2 */ - RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); - - spiConfig.SPI_DataSize = SPI_DataSize_8b; - spiConfig.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; - spiConfig.SPI_Direction = SPI_Direction_1Line_Tx; - spiConfig.SPI_FirstBit = SPI_FirstBit_MSB; - spiConfig.SPI_Mode = SPI_Mode_Master; - spiConfig.SPI_CPOL = SPI_CPOL_High; - spiConfig.SPI_CPHA = SPI_CPHA_2Edge; - spiConfig.SPI_NSS = SPI_NSS_Soft; - SPI_Init(SPI2, &spiConfig); - SPI_Cmd(SPI2, ENABLE); -} - -void epd_write_reg(uint8_t reg) -{ - epd_dc_reset(); - epd_cs_reset(); - - SPI_I2S_SendData(SPI2, reg); - while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) != RESET) - ; - - epd_cs_set(); - epd_dc_set(); -} - -void epd_write_data(uint8_t data) -{ - epd_cs_reset(); - - SPI_I2S_SendData(SPI2, data); - while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) != RESET) - ; - - epd_cs_set(); -} - -void _epd_write_data(uint8_t data) -{ - - while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) - ; - SPI_I2S_SendData(SPI2, data); -} - -void _epd_write_data_over() -{ - while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) != RESET) - ; -} - -uint8_t epd_wait_busy() -{ - uint32_t timeout = 0; - while (epd_is_busy()) - { - timeout++; - if (timeout > 40000) - { - return 1; - } - epd_delay(1); - } - return 0; -} - -void epd_reset(void) -{ - epd_res_reset(); - epd_delay(50); - epd_res_set(); - epd_delay(50); - _hibernating = 0; -} - -uint8_t epd_init(void) -{ - if (_hibernating) - epd_reset(); - - if (epd_wait_busy()) - return 1; - - epd_write_reg(0x12); // SWRESET - - epd_delay(10); - - if (epd_wait_busy()) - return 1; - - #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) - epd_write_reg(0x01); // Driver output control -#if defined(EPD_29) || defined(EPD_213) - epd_write_data(0x27); - epd_write_data(0x01); - epd_write_data(0x01); -#else - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x01); - #endif - - epd_write_reg(0x11); // data entry mode - epd_write_data(0x01); - -#ifdef EPD_154 - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x18); - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x00); - epd_write_data(0x00); - #else - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x0F); // 0x0F-->(15+1)*8=128 - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0x27); // 0x127-->(295+1)=296 - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_data(0x00); -#endif - - epd_write_reg(0x3C); // BorderWavefrom - epd_write_data(0x05); - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x21); // Display update control - epd_write_data(0x00); - epd_write_data(0x80); - #endif - - #elif defined(EPD_42) - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x40); - epd_write_data(0x00); - epd_write_reg(0x01); // Set MUX as 300 - epd_write_data(0x2B); - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x01); - epd_write_reg(0x11); // data entry mode - epd_write_data(0x03); // X-mode - epd_address_set(0,0,EPD_W-1,EPD_H-1); -#endif - - epd_write_reg(0x18); // Read built-in temperature sensor - epd_write_data(0x80); - - epd_setpos(0,0); - - if (epd_power_on()) - return 1; - - return 0; -} - -uint8_t epd_init_partial(void) -{ - if (epd_init()) - return 1; - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x32); - epd_cs_reset(); - for (int j = 0; j < sizeof(lut_partial); j++) - { - _epd_write_data(lut_partial[j]); - } - _epd_write_data_over(); - epd_cs_set(); - #elif defined(EPD_42) - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x80); - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application -#endif - - return 0; -} - -void epd_enter_deepsleepmode(uint8_t mode) -{ - epd_power_off(); - epd_write_reg(0x10); - epd_write_data(mode); - _hibernating = 1; -} - -uint8_t epd_power_on(void) -{ - #if defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xe0); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xf8); - #endif - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -uint8_t epd_power_off(void) -{ - epd_write_reg(0x22); // Display Update Control - epd_write_data(0x83); - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -void epd_init_internalTempSensor(void) -{ - epd_write_reg(0x18); - epd_write_data(0x80); - - epd_write_reg(0x1A); - epd_write_data(0x7F); -// epd_write_data(0xF0); -} - -void epd_update(void) - { - - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF4); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_update_partial(void) -{ - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFC); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFF); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xCC); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) -{ - epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION - epd_write_data((x_start>>3) & 0xFF); - epd_write_data((x_end>>3) & 0xFF); - - epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION - epd_write_data(y_start & 0xFF); - epd_write_data((y_start >> 8) & 0xFF); - epd_write_data(y_end & 0xFF); - epd_write_data((y_end >> 8) & 0xFF); -} - -void epd_setpos(uint16_t x, uint16_t y) -{ - uint8_t _x; - uint16_t _y; - - _x = x / 8; - -#ifdef EPD_154 - _y = 199 - y; - #elif defined(EPD_29) || defined(EPD_213) - _y = 295 - y; - #elif defined(EPD_42) - _y = y; -#endif - - epd_write_reg(0x4E); // set RAM x address count to 0; - epd_write_data(_x); - epd_write_reg(0x4F); // set RAM y address count to 0x127; - epd_write_data(_y & 0xff); - epd_write_data(_y >> 8 & 0x01); -} - -void epd_writedata(uint8_t *Image1, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(Image1[j]); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_writedata2(uint8_t data, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(data); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_display(uint8_t *Image1, uint8_t *Image2) -{ - uint32_t Width, Height, i, j; - uint32_t k = 0; - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x24); - epd_writedata(Image1, Width * Height); - - epd_setpos(0, 0); - - epd_write_reg(0x26); - k = 0; - epd_cs_reset(); - for (j = 0; j < Height; j++) - { - for (i = 0; i < Width; i++) - { - _epd_write_data(~Image2[k]); - k++; - } - } - _epd_write_data_over(); - epd_cs_set(); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - - epd_update(); -} - -void epd_displayBW(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update(); -} - -void epd_displayBW_partial(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update_partial(); - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); -} - -void epd_displayRED(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - epd_update(); -} - -void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color) -{ - EPD_Paint.Image = 0x00; - EPD_Paint.Image = image; - - EPD_Paint.WidthMemory = Width; - EPD_Paint.HeightMemory = Height; - EPD_Paint.Color = Color; - EPD_Paint.WidthByte = (Width % 8 == 0) ? (Width / 8) : (Width / 8 + 1); - EPD_Paint.HeightByte = Height; - EPD_Paint.Rotate = Rotate; - if (Rotate == EPD_ROTATE_0 || Rotate == EPD_ROTATE_180) - { - - EPD_Paint.Width = Height; - EPD_Paint.Height = Width; - } - else - { - EPD_Paint.Width = Width; - EPD_Paint.Height = Height; - } -} - -void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - uint16_t X, Y; - uint32_t Addr; - uint8_t Rdata; - switch (EPD_Paint.Rotate) - { - case 0: - - X = EPD_Paint.WidthMemory - Ypoint - 1; - Y = Xpoint; - break; - case 90: - X = EPD_Paint.WidthMemory - Xpoint - 1; - Y = EPD_Paint.HeightMemory - Ypoint - 1; - break; - case 180: - X = Ypoint; - Y = EPD_Paint.HeightMemory - Xpoint - 1; - break; - case 270: - X = Xpoint; - Y = Ypoint; - break; - default: - return; - } - Addr = X / 8 + Y * EPD_Paint.WidthByte; - Rdata = EPD_Paint.Image[Addr]; - if (Color == EPD_COLOR_BLACK) - { - EPD_Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8)); - } - else - EPD_Paint.Image[Addr] = Rdata | (0x80 >> (X % 8)); -} - -void epd_paint_clear(uint16_t color) -{ - uint16_t X, Y; - uint32_t Addr; - - for (Y = 0; Y < EPD_Paint.HeightByte; Y++) - { - for (X = 0; X < EPD_Paint.WidthByte; X++) - { // 8 pixel = 1 byte - Addr = X + Y * EPD_Paint.WidthByte; - EPD_Paint.Image[Addr] = color; - } - } -} - -void epd_paint_selectimage(uint8_t *image) -{ - EPD_Paint.Image = image; -} - -void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - epd_paint_setpixel(Xpoint - 1, Ypoint - 1, Color); -} - -void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color) -{ - uint16_t Xpoint, Ypoint; - int32_t dx, dy; - int32_t XAddway, YAddway; - int32_t Esp; - char Dotted_Len; - Xpoint = Xstart; - Ypoint = Ystart; - dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend; - dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend; - - XAddway = Xstart < Xend ? 1 : -1; - YAddway = Ystart < Yend ? 1 : -1; - - Esp = dx + dy; - Dotted_Len = 0; - - for (;;) - { - Dotted_Len++; - epd_paint_drawPoint(Xpoint, Ypoint, Color); - if (2 * Esp >= dy) - { - if (Xpoint == Xend) - break; - Esp += dy; - Xpoint += XAddway; - } - if (2 * Esp <= dx) - { - if (Ypoint == Yend) - break; - Esp += dx; - Ypoint += YAddway; - } - } -} - -void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode) -{ - uint16_t i; - if (mode) - { - for (i = Ystart; i < Yend; i++) - { - epd_paint_drawLine(Xstart, i, Xend, i, Color); - } - } - else - { - epd_paint_drawLine(Xstart, Ystart, Xend, Ystart, Color); - epd_paint_drawLine(Xstart, Ystart, Xstart, Yend, Color); - epd_paint_drawLine(Xend, Yend, Xend, Ystart, Color); - epd_paint_drawLine(Xend, Yend, Xstart, Yend, Color); - } -} - -void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode) -{ - uint16_t Esp, sCountY; - uint16_t XCurrent, YCurrent; - XCurrent = 0; - YCurrent = Radius; - Esp = 3 - (Radius << 1); - if (mode) - { - while (XCurrent <= YCurrent) - { // Realistic circles - for (sCountY = XCurrent; sCountY <= YCurrent; sCountY++) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + sCountY, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + sCountY, Color); // 2 - epd_paint_drawPoint(X_Center - sCountY, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - sCountY, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - sCountY, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - sCountY, Color); // 6 - epd_paint_drawPoint(X_Center + sCountY, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + sCountY, Y_Center + XCurrent, Color); - } - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } - else - { // Draw a hollow circle - while (XCurrent <= YCurrent) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + YCurrent, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + YCurrent, Color); // 2 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - YCurrent, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - YCurrent, Color); // 6 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center + XCurrent, Color); // 0 - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } -} - -void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color) -{ - uint16_t i, m, temp, size2, chr1; - uint16_t x0, y0; - x += 1, y += 1, x0 = x, y0 = y; - if (x - size1 > EPD_H) - return; - if (size1 == 8) - size2 = 6; - else - size2 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * (size1 / 2); - chr1 = chr - ' '; - for (i = 0; i < size2; i++) - { - if (size1 == 8) - { - temp = asc2_0806[chr1][i]; - } // 0806 - else if (size1 == 12) - { - temp = asc2_1206[chr1][i]; - } // 1206 - else if (size1 == 16) - { - temp = asc2_1608[chr1][i]; - } // 1608 - else if (size1 == 24) - { - temp = asc2_2412[chr1][i]; - } // 2412 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((size1 != 8) && ((x - x0) == size1 / 2)) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color) -{ - while (*chr != '\0') - { - epd_paint_showChar(x, y, *chr, size1, color); - chr++; - if (size1 == 8) - { - x += 6; - if(x > EPD_H-6) - break; - } - else - { - x += size1 / 2; - if(x > EPD_H-size1 / 2) - break; - } - } -} - -// m^n -static uint32_t _Pow(uint16_t m, uint16_t n) -{ - uint32_t result = 1; - while (n--) - { - result *= m; - } - return result; -} - -void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color) -{ - uint8_t t, temp, m = 0; - if (size1 == 8) - m = 2; - for (t = 0; t < len; t++) - { - temp = (num / _Pow(10, len - t - 1)) % 10; - if (temp == 0) - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, '0', size1, color); - } - else - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, temp + '0', size1, color); - } - } -} - -void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color) -{ - uint16_t m, temp; - uint16_t x0, y0; - uint16_t i, size3 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * size1; - x += 1, y += 1, x0 = x, y0 = y; - for (i = 0; i < size3; i++) - { - if (size1 == 16) - { - temp = Hzk1[num][i]; - } // 16*16 - else if (size1 == 24) - { - temp = Hzk2[num][i]; - } // 24*24 - else if (size1 == 32) - { - temp = Hzk3[num][i]; - } // 32*32 - else if (size1 == 64) - { - temp = Hzk4[num][i]; - } // 64*64 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == size1) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color) -{ - uint16_t j = 0; - uint16_t i, n = 0, temp = 0, m = 0; - uint16_t x0 = 0, y0 = 0; - x += 1, y += 1, x0 = x, y0 = y; - sizey = sizey / 8 + ((sizey % 8) ? 1 : 0); - for (n = 0; n < sizey; n++) - { - for (i = 0; i < sizex; i++) - { - temp = BMP[j]; - j++; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, !Color); - else - epd_paint_drawPoint(x, y, Color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == sizex) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } - } -} diff --git a/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.h b/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.h deleted file mode 100644 index 769d9e8..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef __EPAPER_H -#define __EPAPER_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "ch32v10x.h" - -//#define EPD_42 -//#define EPD_29 -//#define EPD_213 -//#define EPD_154 - -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) -#error EPD Type Undefine -#endif - -#ifdef EPD_29 -#define EPD_W 128 -#define EPD_H 296 -#endif - -#ifdef EPD_213 -#define EPD_W 122 -#define EPD_H 250 -#endif - -#ifdef EPD_154 -#define EPD_W 200 -#define EPD_H 200 -#endif - -#ifdef EPD_42 -#define EPD_W 400 -#define EPD_H 300 -#endif - -#define EPD_OK 0 -#define EPD_ERROR 1 - -#define EPD_ROTATE_0 0 -#define EPD_ROTATE_90 90 -#define EPD_ROTATE_180 180 -#define EPD_ROTATE_270 270 - -#define EPD_COLOR_WHITE 0xFF -#define EPD_COLOR_BLACK 0x00 -#define EPD_COLOR_RED EPD_COLOR_BLACK - -#define EPD_FONT_SIZE8x6 (8) -#define EPD_FONT_SIZE12x6 (12) -#define EPD_FONT_SIZE16x8 (16) -#define EPD_FONT_SIZE24x12 (24) - -#define EPD_DEEPSLEEP_MODE1 (0x01) -#define EPD_DEEPSLEEP_MODE2 (0x03) - -#define EPD_W_BUFF_SIZE ((EPD_W % 8 == 0) ? (EPD_W / 8) : (EPD_W / 8 + 1)) - typedef struct - { - uint8_t *Image; - uint16_t Width; - uint16_t Height; - uint16_t WidthMemory; - uint16_t HeightMemory; - uint16_t Color; - uint16_t Rotate; - uint16_t WidthByte; - uint16_t HeightByte; - } EPD_PAINT; - extern EPD_PAINT EPD_Paint; - - void epd_io_init(void); - uint8_t epd_init(void); - uint8_t epd_init_partial(void); - void epd_enter_deepsleepmode(uint8_t mode); - uint8_t epd_power_on(void); - uint8_t epd_power_off(void); - void epd_init_internalTempSensor(void); - void epd_update(void); - void epd_update_partial(void); - void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); - void epd_setpos(uint16_t x, uint16_t y); - void epd_display(uint8_t *Image1, uint8_t *Image2); - void epd_displayBW(uint8_t *Image); - void epd_displayBW_partial(uint8_t *Image); - void epd_displayRED(uint8_t *Image); - - void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color); - void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_selectimage(uint8_t *image); - void epd_paint_clear(uint16_t color); - void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color); - void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode); - void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode); - void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color); - void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color); - void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color); - void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color); - void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_CH32V103/User/board.c b/Example/EpaperModuleTest_CH32V103/User/board.c deleted file mode 100644 index c4a7bfc..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/board.c +++ /dev/null @@ -1,52 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "board.h" - -void board_button_init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure = {0}; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); -} - -uint8_t board_button_getstate(void) -{ - return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0); -} - -void board_led_init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure = {0}; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOB, &GPIO_InitStructure); -} - -void board_led_toggle(void) -{ - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_2) == Bit_SET ? GPIO_ResetBits(GPIOB, GPIO_Pin_2) : GPIO_SetBits(GPIOB, GPIO_Pin_2); -} - -void board_led_set(uint8_t set) -{ - if (set) - GPIO_SetBits(GPIOB, GPIO_Pin_2); - else - GPIO_ResetBits(GPIOB, GPIO_Pin_2); -} diff --git a/Example/EpaperModuleTest_CH32V103/User/board.h b/Example/EpaperModuleTest_CH32V103/User/board.h deleted file mode 100644 index 23f9243..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/board.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __BOARD_H -#define __BOARD_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "ch32v10x.h" - - void board_button_init(void); - uint8_t board_button_getstate(void); - void board_led_init(void); - void board_led_toggle(void); - void board_led_set(uint8_t set); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_CH32V103/User/ch32v10x_conf.h b/Example/EpaperModuleTest_CH32V103/User/ch32v10x_conf.h deleted file mode 100644 index 711015e..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/ch32v10x_conf.h +++ /dev/null @@ -1,35 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_conf.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : Library configuration file. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_CONF_H -#define __CH32V10x_CONF_H - -#include "ch32v10x_adc.h" -#include "ch32v10x_bkp.h" -#include "ch32v10x_crc.h" -#include "ch32v10x_dbgmcu.h" -#include "ch32v10x_dma.h" -#include "ch32v10x_exti.h" -#include "ch32v10x_flash.h" -#include "ch32v10x_gpio.h" -#include "ch32v10x_i2c.h" -#include "ch32v10x_iwdg.h" -#include "ch32v10x_pwr.h" -#include "ch32v10x_rcc.h" -#include "ch32v10x_rtc.h" -#include "ch32v10x_spi.h" -#include "ch32v10x_tim.h" -#include "ch32v10x_usart.h" -#include "ch32v10x_wwdg.h" -#include "ch32v10x_usb.h" -#include "ch32v10x_usb_host.h" -#include "ch32v10x_it.h" -#include "ch32v10x_misc.h" - -#endif /* __CH32V10x_CONF_H */ diff --git a/Example/EpaperModuleTest_CH32V103/User/ch32v10x_it.c b/Example/EpaperModuleTest_CH32V103/User/ch32v10x_it.c deleted file mode 100644 index 4d1706a..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/ch32v10x_it.c +++ /dev/null @@ -1,38 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_it.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : Main Interrupt Service Routines. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#include "ch32v10x_it.h" - -void NMI_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); -void HardFault_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); - -/********************************************************************* - * @fn NMI_Handler - * - * @brief This function handles NMI exception. - * - * @return none - */ -void NMI_Handler(void) -{ -} - -/********************************************************************* - * @fn HardFault_Handler - * - * @brief This function handles Hard Fault exception. - * - * @return none - */ -void HardFault_Handler(void) -{ - while(1) - { - } -} diff --git a/Example/EpaperModuleTest_CH32V103/User/ch32v10x_it.h b/Example/EpaperModuleTest_CH32V103/User/ch32v10x_it.h deleted file mode 100644 index df7b82c..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/ch32v10x_it.h +++ /dev/null @@ -1,15 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : ch32v10x_it.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : This file contains the headers of the interrupt handlers. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __CH32V10x_IT_H -#define __CH32V10x_IT_H - -#include "debug.h" - -#endif /* __CH32V10x_IT_H */ diff --git a/Example/EpaperModuleTest_CH32V103/User/main.c b/Example/EpaperModuleTest_CH32V103/User/main.c deleted file mode 100644 index 03a87aa..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/main.c +++ /dev/null @@ -1,229 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "debug.h" -#include "board.h" -#include "systick.h" - -#include "epaper.h" -#include "bmp.h" - -// define for White Black Red Epaper Module -//#define EPD_BWR - -uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; -#ifdef EPD_BWR -uint8_t image_red[EPD_W_BUFF_SIZE * EPD_H]; -#endif - -/********************************************************************* - * @fn main - * - * @brief Main program. - * - * @return none - */ -int main(void) -{ - uint8_t text[20]; - - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); - - SystemCoreClockUpdate(); - - systick_config(); - - USART_Printf_Init(115200); - - board_button_init(); - board_led_init(); - - printf("\r\nWeAct Studio Core Board\r\n"); - printf("weactstudio.taobao.com\r\n"); - printf("weactstudio.aliexpress.com\r\n"); - printf("wwww.weact-tc.cn\r\n\r\n"); - printf("SystemClk:%d\r\n", SystemCoreClock); - printf("Epaper Module Test\r\n"); - - epd_io_init(); - - epd_init(); - -#ifdef EPD_BWR - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - #else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #endif - - epd_display(image_bw, image_red); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(8000); - - epd_init(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); - -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"CH32V103C8T6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_RED); -#else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_RED, 1); -#endif - - epd_display(image_bw, image_red); - -#else - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); -#else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - - #ifdef EPD_154 - epd_paint_clear(EPD_COLOR_WHITE); - epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); - #else - epd_paint_clear(EPD_COLOR_WHITE); - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); -#endif - #endif - - epd_displayBW(image_bw); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(5000); - - epd_init_partial(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_154 - epd_paint_showString(10, 0, (uint8_t *)&"1.54 Inch", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 23, (uint8_t *)&"Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 48, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showString(10, 60, (uint8_t *)&"with 200 x 200 resolution", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showPicture((EPD_H - 200) / 2,130,200,64,gImage_5,EPD_COLOR_WHITE); -#endif -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"CH32V103C8T6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); -#else - epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); -#endif - - sprintf((char *)&text, ">> Partial Mode"); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(1000); - - for (uint32_t i = 123; i < 8 * 123; i += 123) - { - sprintf((char *)&text, ">> Num=%d ", i); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(100); - } - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_displayBW_partial(image_bw); - - delay(1000); - - epd_update(); -#endif - - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - uint32_t tick, toggle_tick; - tick = 0; - toggle_tick = 250; - while (1) - { - tick++; - if (tick % toggle_tick == 0) - { - board_led_toggle(); - } - if (board_button_getstate()) - { - while (board_button_getstate()) - { - Delay_Ms(50); - } - if (toggle_tick == 250) - { - toggle_tick = 100; - } - else - { - toggle_tick = 250; - } - } - delay(1); - } -} diff --git a/Example/EpaperModuleTest_CH32V103/User/system_ch32v10x.c b/Example/EpaperModuleTest_CH32V103/User/system_ch32v10x.c deleted file mode 100644 index 8426317..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/system_ch32v10x.c +++ /dev/null @@ -1,503 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : system_ch32v10x.c - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : CH32V10x Device Peripheral Access Layer System Source File. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *********************************************************************************/ -#include "ch32v10x.h" - -/* - * Uncomment the line corresponding to the desired System clock (SYSCLK) frequency (after - * reset the HSI is used as SYSCLK source). - * If none of the define below is enabled, the HSI is used as System clock source. - */ -/* #define SYSCLK_FREQ_HSE HSE_VALUE */ -/* #define SYSCLK_FREQ_24MHz 24000000 */ -/* #define SYSCLK_FREQ_48MHz 48000000 */ -/* #define SYSCLK_FREQ_56MHz 56000000 */ -#define SYSCLK_FREQ_72MHz 72000000 - -/* Clock Definitions */ -#ifdef SYSCLK_FREQ_HSE -uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /* System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_24MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /* System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_48MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /* System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_56MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /* System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_72MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /* System Clock Frequency (Core Clock) */ -#else /* HSI Selected as System Clock source */ -uint32_t SystemCoreClock = HSI_VALUE; /* System Clock Frequency (Core Clock) */ -#endif - -__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - -/* ch32v10x_system_private_function_proto_types */ -static void SetSysClock(void); - -#ifdef SYSCLK_FREQ_HSE -static void SetSysClockToHSE(void); -#elif defined SYSCLK_FREQ_24MHz -static void SetSysClockTo24(void); -#elif defined SYSCLK_FREQ_48MHz -static void SetSysClockTo48(void); -#elif defined SYSCLK_FREQ_56MHz -static void SetSysClockTo56(void); -#elif defined SYSCLK_FREQ_72MHz -static void SetSysClockTo72(void); -#endif - -/********************************************************************* - * @fn SystemInit - * - * @brief Setup the microcontroller system Initialize the Embedded Flash Interface, - * the PLL and update the SystemCoreClock variable. - * - * @return none - */ -void SystemInit(void) -{ - RCC->CTLR |= (uint32_t)0x00000001; - RCC->CFGR0 &= (uint32_t)0xF8FF0000; - RCC->CTLR &= (uint32_t)0xFEF6FFFF; - RCC->CTLR &= (uint32_t)0xFFFBFFFF; - RCC->CFGR0 &= (uint32_t)0xFF80FFFF; - RCC->INTR = 0x009F0000; - SetSysClock(); -} - -/********************************************************************* - * @fn SystemCoreClockUpdate - * - * @brief Update SystemCoreClock variable according to Clock Register Values. - * - * @return none - */ -void SystemCoreClockUpdate(void) -{ - uint32_t tmp = 0, pllmull = 0, pllsource = 0; - - tmp = RCC->CFGR0 & RCC_SWS; - - switch(tmp) - { - case 0x00: - SystemCoreClock = HSI_VALUE; - break; - case 0x04: - SystemCoreClock = HSE_VALUE; - break; - case 0x08: - pllmull = RCC->CFGR0 & RCC_PLLMULL; - pllsource = RCC->CFGR0 & RCC_PLLSRC; - pllmull = (pllmull >> 18) + 2; - if(pllsource == 0x00) - { - SystemCoreClock = (HSI_VALUE >> 1) * pllmull; - } - else - { - if((RCC->CFGR0 & RCC_PLLXTPRE) != (uint32_t)RESET) - { - SystemCoreClock = (HSE_VALUE >> 1) * pllmull; - } - else - { - SystemCoreClock = HSE_VALUE * pllmull; - } - } - break; - default: - SystemCoreClock = HSI_VALUE; - break; - } - - tmp = AHBPrescTable[((RCC->CFGR0 & RCC_HPRE) >> 4)]; - SystemCoreClock >>= tmp; -} - -/********************************************************************* - * @fn SetSysClock - * - * @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClock(void) -{ -#ifdef SYSCLK_FREQ_HSE - SetSysClockToHSE(); -#elif defined SYSCLK_FREQ_24MHz - SetSysClockTo24(); -#elif defined SYSCLK_FREQ_48MHz - SetSysClockTo48(); -#elif defined SYSCLK_FREQ_56MHz - SetSysClockTo56(); -#elif defined SYSCLK_FREQ_72MHz - SetSysClockTo72(); -#endif - - /* If none of the define above is enabled, the HSI is used as System clock - * source (default after reset) - */ -} - -#ifdef SYSCLK_FREQ_HSE - -/********************************************************************* - * @fn SetSysClockToHSE - * - * @brief Sets HSE as System clock source and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockToHSE(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - RCC->CTLR |= ((uint32_t)RCC_HSEON); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); - - if((RCC->CTLR & RCC_HSERDY) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if(HSEStatus == (uint32_t)0x01) - { - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - /* Flash 0 wait state */ - FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); - FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_0; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV1; - - /* Select HSE as system clock source */ - RCC->CFGR0 &= (uint32_t)((uint32_t) ~(RCC_SW)); - RCC->CFGR0 |= (uint32_t)RCC_SW_HSE; - - /* Wait till HSE is used as system clock source */ - while((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x04) - { - } - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - } -} - -#elif defined SYSCLK_FREQ_24MHz - -/********************************************************************* - * @fn SetSysClockTo24 - * - * @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockTo24(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - RCC->CTLR |= ((uint32_t)RCC_HSEON); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); - - if((RCC->CTLR & RCC_HSERDY) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - if(HSEStatus == (uint32_t)0x01) - { - /* Enable Prefetch Buffer */ - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - - /* Flash 0 wait state */ - FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); - FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_0; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV1; - - RCC->CFGR0 &= (uint32_t)((uint32_t) ~(RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL)); - RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE | RCC_PLLMULL3); - /* Enable PLL */ - RCC->CTLR |= RCC_PLLON; - - /* Wait till PLL is ready */ - while((RCC->CTLR & RCC_PLLRDY) == 0) - { - } - /* Select PLL as system clock source */ - RCC->CFGR0 &= (uint32_t)((uint32_t) ~(RCC_SW)); - RCC->CFGR0 |= (uint32_t)RCC_SW_PLL; - /* Wait till PLL is used as system clock source */ - while((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08) - { - } - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - } -} - -#elif defined SYSCLK_FREQ_48MHz - -/********************************************************************* - * @fn SetSysClockTo48 - * - * @brief Sets System clock frequency to 48MHz and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockTo48(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - RCC->CTLR |= ((uint32_t)RCC_HSEON); - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); - - if((RCC->CTLR & RCC_HSERDY) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if(HSEStatus == (uint32_t)0x01) - { - /* Enable Prefetch Buffer */ - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); - FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_1; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV2; - - /* PLL configuration: PLLCLK = HSE * 6 = 48 MHz */ - RCC->CFGR0 &= (uint32_t)((uint32_t) ~(RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL)); - RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLMULL6); - - /* Enable PLL */ - RCC->CTLR |= RCC_PLLON; - /* Wait till PLL is ready */ - while((RCC->CTLR & RCC_PLLRDY) == 0) - { - } - /* Select PLL as system clock source */ - RCC->CFGR0 &= (uint32_t)((uint32_t) ~(RCC_SW)); - RCC->CFGR0 |= (uint32_t)RCC_SW_PLL; - /* Wait till PLL is used as system clock source */ - while((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08) - { - } - } - else - { - /* - * If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - } -} - -#elif defined SYSCLK_FREQ_56MHz - -/********************************************************************* - * @fn SetSysClockTo56 - * - * @brief Sets System clock frequency to 56MHz and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockTo56(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - RCC->CTLR |= ((uint32_t)RCC_HSEON); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); - - if((RCC->CTLR & RCC_HSERDY) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if(HSEStatus == (uint32_t)0x01) - { - /* Enable Prefetch Buffer */ - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - - /* Flash 2 wait state */ - FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); - FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_2; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV2; - - /* PLL configuration: PLLCLK = HSE * 7 = 56 MHz */ - RCC->CFGR0 &= (uint32_t)((uint32_t) ~(RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL)); - RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLMULL7); - /* Enable PLL */ - RCC->CTLR |= RCC_PLLON; - /* Wait till PLL is ready */ - while((RCC->CTLR & RCC_PLLRDY) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFGR0 &= (uint32_t)((uint32_t) ~(RCC_SW)); - RCC->CFGR0 |= (uint32_t)RCC_SW_PLL; - /* Wait till PLL is used as system clock source */ - while((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08) - { - } - } - else - { - /* - * If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - } -} - -#elif defined SYSCLK_FREQ_72MHz - -/********************************************************************* - * @fn SetSysClockTo72 - * - * @brief Sets System clock frequency to 72MHz and configure HCLK, PCLK2 and PCLK1 prescalers. - * - * @return none - */ -static void SetSysClockTo72(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - RCC->CTLR |= ((uint32_t)RCC_HSEON); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTLR & RCC_HSERDY; - StartUpCounter++; - } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); - - if((RCC->CTLR & RCC_HSERDY) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if(HSEStatus == (uint32_t)0x01) - { - /* Enable Prefetch Buffer */ - FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; - - /* Flash 2 wait state */ - FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); - FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_2; - - /* HCLK = SYSCLK */ - RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; - /* PCLK2 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; - /* PCLK1 = HCLK */ - RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV2; - - /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ - RCC->CFGR0 &= (uint32_t)((uint32_t) ~(RCC_PLLSRC | RCC_PLLXTPRE | - RCC_PLLMULL)); - RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLMULL9); - /* Enable PLL */ - RCC->CTLR |= RCC_PLLON; - /* Wait till PLL is ready */ - while((RCC->CTLR & RCC_PLLRDY) == 0) - { - } - /* Select PLL as system clock source */ - RCC->CFGR0 &= (uint32_t)((uint32_t) ~(RCC_SW)); - RCC->CFGR0 |= (uint32_t)RCC_SW_PLL; - /* Wait till PLL is used as system clock source */ - while((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08) - { - } - } - else - { - /* - * If HSE fails to start-up, the application will have wrong clock - * configuration. User can add here some code to deal with this error - */ - } -} -#endif diff --git a/Example/EpaperModuleTest_CH32V103/User/system_ch32v10x.h b/Example/EpaperModuleTest_CH32V103/User/system_ch32v10x.h deleted file mode 100644 index e693624..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/system_ch32v10x.h +++ /dev/null @@ -1,27 +0,0 @@ -/********************************** (C) COPYRIGHT ******************************* - * File Name : system_ch32v10x.h - * Author : WCH - * Version : V1.0.0 - * Date : 2020/04/30 - * Description : CH32V10x Device Peripheral Access Layer System Header File. - * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * SPDX-License-Identifier: Apache-2.0 - *******************************************************************************/ -#ifndef __SYSTEM_CH32V10x_H -#define __SYSTEM_CH32V10x_H - -#ifdef __cplusplus -extern "C" { -#endif - -extern uint32_t SystemCoreClock; /* System Clock Frequency (Core Clock) */ - -/* System_Exported_Functions */ -extern void SystemInit(void); -extern void SystemCoreClockUpdate(void); - -#ifdef __cplusplus -} -#endif - -#endif /*__CH32V10x_SYSTEM_H */ diff --git a/Example/EpaperModuleTest_CH32V103/User/systick.c b/Example/EpaperModuleTest_CH32V103/User/systick.c deleted file mode 100644 index b79d22c..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/systick.c +++ /dev/null @@ -1,163 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "systick.h" -#include "ch32v10x.h" -#include "ch32v10x_pwr.h" - -void SysTick_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); - -volatile uint32_t _tick = 0; - -/*! - \brief configure systick - \param[in] none - \param[out] none - \retval none -*/ -void systick_config(void) -{ - uint32_t ticks = (SystemCoreClock / SysTick_Tick); - - //رϵͳSTKֹͣ - SysTick->CTLR = 0x0000; - - //ϵͳĴֵ - - //ϵͳλĴ - SysTick->CNTL0 = 0; - SysTick->CNTL1 = 0; - SysTick->CNTL2 = 0; - SysTick->CNTL3 = 0; - - //ϵͳλĴ - SysTick->CNTH0 = 0; - SysTick->CNTH1 = 0; - SysTick->CNTH2 = 0; - SysTick->CNTH3 = 0; - - //üȽϼĴֵҪڴSTKжϷCNT[63:0]CMP[63:0]ֵʱSTKжϷ - //üȽϵλĴֵ - SysTick->CMPLR0 = (uint8_t)(ticks & 0xFF); - SysTick->CMPLR1 = (uint8_t)(ticks >> 8); - SysTick->CMPLR2 = (uint8_t)(ticks >> 16); - SysTick->CMPLR3 = (uint8_t)(ticks >> 24); - - //üȽϸλĴֵ - SysTick->CMPHR0 = 0; - SysTick->CMPHR1 = 0; - SysTick->CMPHR2 = 0; - SysTick->CMPHR3 = 0; - NVIC_SetPriority(SysTicK_IRQn, 15); //SysTickжȼ - NVIC_EnableIRQ(SysTicK_IRQn); //ʹܿSystickж - SysTick->CTLR = 0x0001; //ϵͳSTKHCLK/8ʱ 72000000/8=9000000 -} - -/*! - \brief delay a time in milliseconds - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay(uint32_t count) -{ - uint32_t utick; - utick = count + systick_get_tick(); - - while (systick_get_tick() < utick) - { - } -} - -/*! - \brief delay a time in milliseconds with low power - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay_lp(uint32_t count) -{ - uint32_t utick; - utick = count + systick_get_tick(); - - while (systick_get_tick() < utick) - { - PWR_EnterSTANDBYMode(); - } -} - -/*! - \brief delay decrement - \param[in] none - \param[out] none - \retval none -*/ -void delay_decrement(void) -{ - _tick++; -} - -/*! - \brief get systick tick - \param[in] none - \param[out] none - \retval none -*/ - -uint32_t systick_get_tick(void) -{ - return _tick; -} - -void systick_DisableIRQ(void) -{ - NVIC_DisableIRQ(SysTicK_IRQn); -} - -void systick_EnableIRQ(void) -{ - NVIC_EnableIRQ(SysTicK_IRQn); -} - -void systick_Disable(void) -{ - /* Disable SysTick */ - //رϵͳSTKֹͣ - SysTick->CTLR = 0x0000; -} - -void systick_Enable(void) -{ - /* Enable SysTick */ - //ϵͳSTKHCLK/8ʱ 72000000/8=9000000 - SysTick->CTLR = 0x0001; -} - -void systick_deinit(void) -{ - //رϵͳSTKֹͣ - SysTick->CTLR = 0x0000; -} - -void SysTick_Handler(void) -{ - //ϵͳĴֵ - //ϵͳλĴ - SysTick->CNTL0 = 0; - SysTick->CNTL1 = 0; - SysTick->CNTL2 = 0; - SysTick->CNTL3 = 0; - //ϵͳλĴ - SysTick->CNTH0 = 0; - SysTick->CNTH1 = 0; - SysTick->CNTH2 = 0; - SysTick->CNTH3 = 0; - - delay_decrement(); -} diff --git a/Example/EpaperModuleTest_CH32V103/User/systick.h b/Example/EpaperModuleTest_CH32V103/User/systick.h deleted file mode 100644 index f0b6173..0000000 --- a/Example/EpaperModuleTest_CH32V103/User/systick.h +++ /dev/null @@ -1,38 +0,0 @@ - -#ifndef __SYS_TICK_H -#define __SYS_TICK_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include - -#define SysTick_Freq (1000U) // Hz -#define SysTick_Tick (8000000U / SysTick_Freq) - - /* configure systick */ - void systick_config(void); - /* delay a time in milliseconds */ - void delay(uint32_t count); - /* delay a time in milliseconds with low power */ - void delay_lp(uint32_t count); - /* delay decrement */ - void delay_decrement(void); - /* get system tick */ - uint32_t systick_get_tick(void); - /* suspend system tick */ - void systick_DisableIRQ(void); - /* resume system tick */ - void systick_EnableIRQ(void); - - void systick_Disable(void); - void systick_Enable(void); - void systick_deinit(void); - -#ifdef __cplusplus -} -#endif - -#endif /* SYS_TICK_H */ diff --git a/Example/EpaperModuleTest_GD32F103/Epaper/bmp.h b/Example/EpaperModuleTest_GD32F103/Epaper/bmp.h deleted file mode 100644 index bd22f80..0000000 --- a/Example/EpaperModuleTest_GD32F103/Epaper/bmp.h +++ /dev/null @@ -1,638 +0,0 @@ -#ifndef __BMP_H -#define __BMP_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -////////////////array///////////////////////////////////////////////////////////////////////////////////// -const unsigned char gImage_1[4000] = { /* 0X01,0X01,0XFA,0X00,0X7A,0X00, */ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x0E,0x07,0x07, -0x07,0xDF,0xFE,0xFE,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x3C,0x1E,0xFE, -0xFE,0xFE,0x00,0x00,0x00,0x0C,0x0E,0x0F,0x07,0x07,0x87,0xFF,0xFE,0xFC,0x00,0x00, -0x18,0x1F,0x1F,0x0F,0x00,0x00,0x18,0x1F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0xF0, -0xF0,0xF0,0x70,0x30,0x30,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x60,0x70,0x70,0x30,0x30, -0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xF0, -0xE0,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x70,0x30,0x70,0xF0,0xF0,0xE0,0x80,0x00,0x00, -0xF0,0xF0,0xF0,0xF0,0x70,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, -0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00, -0x80,0xE0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0xC0,0xE0,0xF0, -0x70,0x30,0x70,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00, -0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0x3E,0x1F,0x0F,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0x80,0x02,0x03,0x03,0x07,0xCF,0xFF,0xFC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0x00,0xE0,0xF8,0xFC,0xBC,0x0C,0x0C,0x8C,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0xC1,0xFF,0xFF,0x7F,0x00,0x1C,0xFF,0xFF, -0xFF,0x0C,0x0C,0x0C,0x0C,0x8F,0x8F,0x0F,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x0F,0xFF,0xFF, -0xFE,0xFF,0x1F,0x01,0x7F,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x80,0x00,0x00, -0x00,0xE3,0xFF,0xFF,0x3E,0x00,0x1C,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x80,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xCD,0x0C,0x0C,0x0C,0x0D,0x8F, -0x8F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x06,0x07,0x07, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x03, -0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x06,0x00,0x00,0x00,0xFF,0xFF,0x07,0x07, -0x06,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07, -0x03,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x07, -0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00, -0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x03, -0x07,0x07,0x06,0x07,0x03,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x07,0x07,0x06,0x06, -0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00, -0xF8,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x7F,0x03, -0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFF,0xFF,0x7F,0xFF,0xFE,0xE0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0, -0xC0,0xC0,0xC0,0x80,0x00,0x00,0xC0,0xC0,0xC0,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFE, -0xFF,0x0F,0x07,0x07,0x07,0x07,0x07,0x0F,0x1F,0x1E,0x0C,0x00,0x00,0x00,0xC0,0xC0, -0xFE,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0x00,0x00,0xC3,0xC3,0xC3,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80, -0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0xC0,0xFE,0xFF,0x7F,0x03,0x03,0x7F,0xFF, -0xFE,0xC0,0x00,0x00,0xF8,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF, -0x8F,0x83,0x81,0x81,0x81,0x81,0x87,0xBF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00, -0xC0,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x07,0x3F,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00, -0x00,0x00,0xF8,0xFE,0xFF,0x3F,0x07,0x03,0x01,0x01,0x01,0x03,0x03,0x03,0x01,0x00, -0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3E,0x3C,0x78,0x78,0x78, -0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01, -0x01,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x1F,0x07,0x03,0x01, -0x01,0x01,0x03,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0x1F,0x07,0x03,0x01,0x01,0x01,0x03, -0x07,0xFF,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF, -0xFF,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF8,0xFE,0xFF,0xFF, -0x07,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xC3,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x83,0x03,0x03,0x00,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0x0F,0x0E,0x0E,0x0E, -0x0E,0x0E,0x0E,0x0F,0x3F,0xFF,0xFF,0xF0,0x80,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF0, -0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x7E, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x80,0xC0,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x7F,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0xFE,0xFF,0xFF,0x3F,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x07,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x00,0x00, -0x00,0x0E,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, -0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F, -0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x0F,0x06, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x04,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E, -0x0E,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x07,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00, -0x00,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0xC0, -0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0, -0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x80,0x00,0x00, -0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x80, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0E,0x0F, -0x07,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0xC1,0xFF,0xFF,0x7F, -0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x1C,0x7C,0xFC,0xF0,0xC0,0xF0,0xFC,0x7C,0x1C,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0xFF, -0xFF,0xFF,0x61,0x61,0xE1,0xE1,0xC1,0x80,0x00,0x00,0xFC,0xFF,0xFF,0x07,0x01,0x01, -0x03,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x7F,0xFC,0xF0,0xC0,0x00,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0xF0,0xF8,0xFE,0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xE0,0xF0,0xF8,0xFE,0xDF,0xCF,0xC3,0xC1,0xC0,0x00,0xC0,0xE0,0xF8,0xFC,0xFE, -0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x7F, -0x1F,0x0F,0x3F,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF8, -0xFC,0xFE,0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0xE0,0xE0,0xE0,0xC0,0x80,0xC0,0xE0,0xFF, -0xFF,0x3F,0x00,0x00,0x1F,0x7F,0xFF,0xF0,0xC0,0xC0,0xE0,0xFF,0xFF,0x3F,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0, -0xC0,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0, -0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x03,0x0F,0x7F,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03, -0x07,0x1F,0x3F,0xFC,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01, -0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; -const unsigned char gImage_2[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_3[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x1F,0x1F,0x0F,0x0F,0x9F,0xFF,0xFF,0xFE,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x78,0x7C,0x7E,0x3E,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x04,0x0E,0x1E,0x1F,0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x73,0x7F,0x3F,0x1F,0x0F,0x00,0x00,0x31,0x7B,0x7F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x07,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x30,0xF0,0xF0,0xF0,0x78,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0xF8,0x78,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xC0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF0,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0x70,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFE,0xFF,0xBF,0x9F,0x87,0x83,0x80,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0xC0,0xC0,0xC0,0xC7,0x87,0x87,0xCF,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x80,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x40,0xF8,0xFC,0xFC,0xFE,0xFE,0x9E,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9D,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE1,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x1C,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9C,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF0,0xF8,0xFC,0x7C,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x18,0x3C,0x3E,0x3E,0x1E,0x1E,0x3E,0xFE,0xFE,0xFC,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x9E,0x9E,0x9E,0x9E,0x1E,0x1E,0x00,0x00,0xE0,0xF8,0xFC,0xFE,0xFE,0x7E,0x1E,0x3E,0xFE,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xE0,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xC0,0xE0,0xF8,0xFC,0xFE,0xFE,0x3E,0x1E,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xFC,0xFF,0x7F,0x3F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x87,0x87,0x87,0x87,0x07,0x07,0x8F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x7F,0xFF,0xFF,0xFF,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0F,0x0F,0x0F,0x0F,0x0F,0x01,0x01,0x07,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x01,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x01,0x03,0x0F,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_4[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00, -0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE, -0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00, -0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80, -0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0, -0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30, -0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80, -0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF, -0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, -0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF, -0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF, -0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0, -0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F, -0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC, -0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF, -0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F, -0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80, -0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F, -0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F, -0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F, -0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F, -0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F, -0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00, -0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00, -0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F, -0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E, -0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_5[1600]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00, -0x00,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0, -0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF0, -0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFE, -0xE0,0x00,0x00,0x80,0xFC,0xFF,0xFF,0xFF,0x3F,0x01,0x00,0xC0,0xF0,0xF8,0xF8,0xFC, -0x7C,0x3C,0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x80,0xF0,0xFE, -0xFF,0xFF,0x3F,0x07,0x3F,0xFF,0xFF,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0xF8,0xF8,0xFC,0x7C,0x3C,0x3C,0x7C,0x7C,0x7C,0x78,0x38,0x78,0x7C,0xFF,0xFF, -0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F, -0xFF,0xFF,0xFF,0xFF,0xF1,0xE1,0xC0,0xC0,0xC1,0x81,0x83,0x03,0x03,0x01,0x00,0x78, -0x78,0xFC,0xFF,0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0xFC,0xFC,0xFC,0xFC, -0xFC,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,0xC0,0xF0, -0xF8,0xF8,0xFC,0xFC,0x7C,0x3C,0x3C,0x7C,0x78,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xF8,0xFC,0x7C,0x3C, -0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFE,0xF0,0xFF, -0xFF,0xFF,0x1F,0x01,0x00,0x07,0x7F,0xFF,0xFF,0xFE,0xE0,0xFF,0xFF,0xFF,0xFF,0x07, -0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x9E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F, -0x1F,0x1F,0x00,0xE0,0xFC,0xFF,0xFF,0xFF,0x3F,0x3D,0x3C,0x3C,0x3C,0x3F,0x3F,0xFF, -0xFF,0xFF,0xFC,0xE0,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC1,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x81,0x01,0x03,0x03,0x07,0x07,0x0F, -0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC3,0x00,0x00,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x07, -0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x1F, -0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0E,0x18,0x1F,0x1F,0x1F,0x1F,0x07,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x18,0x03,0x07, -0x0F,0x0F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0E,0x00,0x00,0x03,0x0F, -0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x18,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x0F, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0F,0x07,0x01,0x00, -0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1C,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00, -0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x1F,0x1F,0x1E, -0x1E,0x1E,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_GD32F103/Epaper/epaper.c b/Example/EpaperModuleTest_GD32F103/Epaper/epaper.c deleted file mode 100644 index 6e4cb34..0000000 --- a/Example/EpaperModuleTest_GD32F103/Epaper/epaper.c +++ /dev/null @@ -1,912 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "epaper.h" -#include "epdfont.h" - -#include "systick.h" - -// epaper module -// res pin -> pa8 -// busy pin -> pa15 -// d/c pin -> pb14 -// cs pin -> pb12 -// sck pin -> pb13 -// mosi pin -> pb15 - -EPD_PAINT EPD_Paint; - -static uint8_t _hibernating = 1; - -static const unsigned char lut_partial[] = -{ - 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x40, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, -}; - -void epd_delay(uint16_t ms) -{ - delay(ms); -} - -void epd_res_set() -{ - gpio_bit_write(GPIOA, GPIO_PIN_8, SET); -} - -void epd_res_reset() -{ - gpio_bit_write(GPIOA, GPIO_PIN_8, RESET); -} - -void epd_dc_set() -{ - gpio_bit_write(GPIOB, GPIO_PIN_14, SET); -} - -void epd_dc_reset() -{ - gpio_bit_write(GPIOB, GPIO_PIN_14, RESET); -} - -void epd_cs_set() -{ - gpio_bit_write(GPIOB, GPIO_PIN_12, SET); -} - -void epd_cs_reset() -{ - gpio_bit_write(GPIOB, GPIO_PIN_12, RESET); -} - -uint8_t epd_is_busy() -{ - return gpio_input_bit_get(GPIOA, GPIO_PIN_15) == RESET ? 0 : 1; -} - -void epd_io_init(void) -{ - rcu_periph_clock_enable(RCU_GPIOA); - rcu_periph_clock_enable(RCU_GPIOB); - rcu_periph_clock_enable(RCU_AF); - - spi_parameter_struct spi_init_struct; - - /* configure the epaper module res pin */ - gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8); - - /* configure the epaper module busy pin */ - gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_15); - - /* configure the epaper module d/c pin */ - gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14); - - /* configure the epaper module SPI1 sck mosi pin */ - gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_15); - - /* configure the epaper module cs pin */ - gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12); - - /* configure SPI1 */ - rcu_periph_clock_enable(RCU_SPI1); - - /* deinitilize SPI and the parameters */ - spi_i2s_deinit(SPI1); - spi_struct_para_init(&spi_init_struct); - - spi_init_struct.trans_mode = SPI_TRANSMODE_BDTRANSMIT; - spi_init_struct.device_mode = SPI_MASTER; - spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT; - spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE; - spi_init_struct.nss = SPI_NSS_SOFT; - spi_init_struct.prescale = SPI_PSC_16; - spi_init_struct.endian = SPI_ENDIAN_MSB; - spi_init(SPI1, &spi_init_struct); - - spi_enable(SPI1); -} - -void epd_write_reg(uint8_t reg) -{ - epd_dc_reset(); - epd_cs_reset(); - - spi_i2s_data_transmit(SPI1, reg); - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TBE) == RESET) - ; - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TRANS) != RESET) - ; - - epd_cs_set(); - epd_dc_set(); -} - -void epd_write_data(uint8_t data) -{ - epd_cs_reset(); - - spi_i2s_data_transmit(SPI1, data); - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TBE) == RESET) - ; - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TRANS) != RESET) - ; - - epd_cs_set(); -} - -void _epd_write_data(uint8_t data) -{ - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TBE) == RESET) - ; - spi_i2s_data_transmit(SPI1, data); -} - -void _epd_write_data_over() -{ - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TRANS) != RESET) - ; -} - -uint8_t epd_wait_busy() -{ - uint32_t timeout = 0; - while (epd_is_busy()) - { - timeout++; - if (timeout > 40000) - { - return 1; - } - epd_delay(1); - } - return 0; -} - -void epd_reset(void) -{ - epd_res_reset(); - epd_delay(50); - epd_res_set(); - epd_delay(50); - _hibernating = 0; -} - -uint8_t epd_init(void) -{ - if (_hibernating) - epd_reset(); - - if (epd_wait_busy()) - return 1; - - epd_write_reg(0x12); // SWRESET - - epd_delay(10); - - if (epd_wait_busy()) - return 1; - - #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) - epd_write_reg(0x01); // Driver output control -#if defined(EPD_29) || defined(EPD_213) - epd_write_data(0x27); - epd_write_data(0x01); - epd_write_data(0x01); -#else - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x01); - #endif - - epd_write_reg(0x11); // data entry mode - epd_write_data(0x01); - -#ifdef EPD_154 - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x18); - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x00); - epd_write_data(0x00); - #else - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x0F); // 0x0F-->(15+1)*8=128 - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0x27); // 0x127-->(295+1)=296 - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_data(0x00); -#endif - - epd_write_reg(0x3C); // BorderWavefrom - epd_write_data(0x05); - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x21); // Display update control - epd_write_data(0x00); - epd_write_data(0x80); - #endif - - #elif defined(EPD_42) - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x40); - epd_write_data(0x00); - epd_write_reg(0x01); // Set MUX as 300 - epd_write_data(0x2B); - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x01); - epd_write_reg(0x11); // data entry mode - epd_write_data(0x03); // X-mode - epd_address_set(0,0,EPD_W-1,EPD_H-1); -#endif - - epd_write_reg(0x18); // Read built-in temperature sensor - epd_write_data(0x80); - - epd_setpos(0,0); - - if (epd_power_on()) - return 1; - - return 0; -} - -uint8_t epd_init_partial(void) -{ - if (epd_init()) - return 1; - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x32); - epd_cs_reset(); - for (int j = 0; j < sizeof(lut_partial); j++) - { - _epd_write_data(lut_partial[j]); - } - _epd_write_data_over(); - epd_cs_set(); - #elif defined(EPD_42) - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x80); - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application -#endif - - return 0; -} - -void epd_enter_deepsleepmode(uint8_t mode) -{ -epd_power_off(); - epd_write_reg(0x10); - epd_write_data(mode); - _hibernating = 1; -} - -uint8_t epd_power_on(void) -{ - #if defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xe0); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xf8); - #endif - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -uint8_t epd_power_off(void) -{ - epd_write_reg(0x22); // Display Update Control - epd_write_data(0x83); - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -void epd_init_internalTempSensor(void) -{ - epd_write_reg(0x18); - epd_write_data(0x80); - - epd_write_reg(0x1A); - epd_write_data(0x7F); -// epd_write_data(0xF0); -} - -void epd_update(void) -{ - - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF4); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_update_partial(void) -{ - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFC); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFF); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xCC); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) -{ - epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION - epd_write_data((x_start>>3) & 0xFF); - epd_write_data((x_end>>3) & 0xFF); - - epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION - epd_write_data(y_start & 0xFF); - epd_write_data((y_start >> 8) & 0xFF); - epd_write_data(y_end & 0xFF); - epd_write_data((y_end >> 8) & 0xFF); -} - -void epd_setpos(uint16_t x, uint16_t y) -{ - uint8_t _x; - uint16_t _y; - - _x = x / 8; - -#ifdef EPD_154 - _y = 199 - y; - #elif defined(EPD_29) || defined(EPD_213) - _y = 295 - y; - #elif defined(EPD_42) - _y = y; -#endif - - epd_write_reg(0x4E); // set RAM x address count to 0; - epd_write_data(_x); - epd_write_reg(0x4F); // set RAM y address count to 0x127; - epd_write_data(_y & 0xff); - epd_write_data(_y >> 8 & 0x01); -} - -void epd_writedata(uint8_t *Image1, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(Image1[j]); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_writedata2(uint8_t data, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(data); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_display(uint8_t *Image1, uint8_t *Image2) -{ - uint32_t Width, Height, i, j; - uint32_t k = 0; - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x24); - epd_writedata(Image1, Width * Height); - - epd_setpos(0, 0); - - epd_write_reg(0x26); - k = 0; - epd_cs_reset(); - for (j = 0; j < Height; j++) - { - for (i = 0; i < Width; i++) - { - _epd_write_data(~Image2[k]); - k++; - } - } - _epd_write_data_over(); - epd_cs_set(); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - - epd_update(); -} - -void epd_displayBW(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update(); -} - -void epd_displayBW_partial(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update_partial(); - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - } - -void epd_displayRED(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - epd_update(); -} - -void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color) -{ - EPD_Paint.Image = 0x00; - EPD_Paint.Image = image; - - EPD_Paint.WidthMemory = Width; - EPD_Paint.HeightMemory = Height; - EPD_Paint.Color = Color; - EPD_Paint.WidthByte = (Width % 8 == 0) ? (Width / 8) : (Width / 8 + 1); - EPD_Paint.HeightByte = Height; - EPD_Paint.Rotate = Rotate; - if (Rotate == EPD_ROTATE_0 || Rotate == EPD_ROTATE_180) - { - - EPD_Paint.Width = Height; - EPD_Paint.Height = Width; - } - else - { - EPD_Paint.Width = Width; - EPD_Paint.Height = Height; - } -} - -void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - uint16_t X, Y; - uint32_t Addr; - uint8_t Rdata; - switch (EPD_Paint.Rotate) - { - case 0: - - X = EPD_Paint.WidthMemory - Ypoint - 1; - Y = Xpoint; - break; - case 90: - X = EPD_Paint.WidthMemory - Xpoint - 1; - Y = EPD_Paint.HeightMemory - Ypoint - 1; - break; - case 180: - X = Ypoint; - Y = EPD_Paint.HeightMemory - Xpoint - 1; - break; - case 270: - X = Xpoint; - Y = Ypoint; - break; - default: - return; - } - Addr = X / 8 + Y * EPD_Paint.WidthByte; - Rdata = EPD_Paint.Image[Addr]; - if (Color == EPD_COLOR_BLACK) - { - EPD_Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8)); - } - else - EPD_Paint.Image[Addr] = Rdata | (0x80 >> (X % 8)); -} - -void epd_paint_clear(uint16_t color) -{ - uint16_t X, Y; - uint32_t Addr; - - for (Y = 0; Y < EPD_Paint.HeightByte; Y++) - { - for (X = 0; X < EPD_Paint.WidthByte; X++) - { // 8 pixel = 1 byte - Addr = X + Y * EPD_Paint.WidthByte; - EPD_Paint.Image[Addr] = color; - } - } -} - -void epd_paint_selectimage(uint8_t *image) -{ - EPD_Paint.Image = image; -} - -void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - epd_paint_setpixel(Xpoint - 1, Ypoint - 1, Color); -} - -void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color) -{ - uint16_t Xpoint, Ypoint; - int32_t dx, dy; - int32_t XAddway, YAddway; - int32_t Esp; - char Dotted_Len; - Xpoint = Xstart; - Ypoint = Ystart; - dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend; - dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend; - - XAddway = Xstart < Xend ? 1 : -1; - YAddway = Ystart < Yend ? 1 : -1; - - Esp = dx + dy; - Dotted_Len = 0; - - for (;;) - { - Dotted_Len++; - epd_paint_drawPoint(Xpoint, Ypoint, Color); - if (2 * Esp >= dy) - { - if (Xpoint == Xend) - break; - Esp += dy; - Xpoint += XAddway; - } - if (2 * Esp <= dx) - { - if (Ypoint == Yend) - break; - Esp += dx; - Ypoint += YAddway; - } - } -} - -void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode) -{ - uint16_t i; - if (mode) - { - for (i = Ystart; i < Yend; i++) - { - epd_paint_drawLine(Xstart, i, Xend, i, Color); - } - } - else - { - epd_paint_drawLine(Xstart, Ystart, Xend, Ystart, Color); - epd_paint_drawLine(Xstart, Ystart, Xstart, Yend, Color); - epd_paint_drawLine(Xend, Yend, Xend, Ystart, Color); - epd_paint_drawLine(Xend, Yend, Xstart, Yend, Color); - } -} - -void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode) -{ - uint16_t Esp, sCountY; - uint16_t XCurrent, YCurrent; - XCurrent = 0; - YCurrent = Radius; - Esp = 3 - (Radius << 1); - if (mode) - { - while (XCurrent <= YCurrent) - { // Realistic circles - for (sCountY = XCurrent; sCountY <= YCurrent; sCountY++) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + sCountY, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + sCountY, Color); // 2 - epd_paint_drawPoint(X_Center - sCountY, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - sCountY, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - sCountY, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - sCountY, Color); // 6 - epd_paint_drawPoint(X_Center + sCountY, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + sCountY, Y_Center + XCurrent, Color); - } - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } - else - { // Draw a hollow circle - while (XCurrent <= YCurrent) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + YCurrent, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + YCurrent, Color); // 2 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - YCurrent, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - YCurrent, Color); // 6 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center + XCurrent, Color); // 0 - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } -} - -void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color) -{ - uint16_t i, m, temp, size2, chr1; - uint16_t x0, y0; - x += 1, y += 1, x0 = x, y0 = y; - if (x - size1 > EPD_H) - return; - if (size1 == 8) - size2 = 6; - else - size2 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * (size1 / 2); - chr1 = chr - ' '; - for (i = 0; i < size2; i++) - { - if (size1 == 8) - { - temp = asc2_0806[chr1][i]; - } // 0806 - else if (size1 == 12) - { - temp = asc2_1206[chr1][i]; - } // 1206 - else if (size1 == 16) - { - temp = asc2_1608[chr1][i]; - } // 1608 - else if (size1 == 24) - { - temp = asc2_2412[chr1][i]; - } // 2412 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((size1 != 8) && ((x - x0) == size1 / 2)) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color) -{ - while (*chr != '\0') - { - epd_paint_showChar(x, y, *chr, size1, color); - chr++; - if (size1 == 8) - { - x += 6; - if(x > EPD_H-6) - break; - } - else - { - x += size1 / 2; - if(x > EPD_H-size1 / 2) - break; - } - } -} - -// m^n -static uint32_t _Pow(uint16_t m, uint16_t n) -{ - uint32_t result = 1; - while (n--) - { - result *= m; - } - return result; -} - -void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color) -{ - uint8_t t, temp, m = 0; - if (size1 == 8) - m = 2; - for (t = 0; t < len; t++) - { - temp = (num / _Pow(10, len - t - 1)) % 10; - if (temp == 0) - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, '0', size1, color); - } - else - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, temp + '0', size1, color); - } - } -} - -void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color) -{ - uint16_t m, temp; - uint16_t x0, y0; - uint16_t i, size3 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * size1; - x += 1, y += 1, x0 = x, y0 = y; - for (i = 0; i < size3; i++) - { - if (size1 == 16) - { - temp = Hzk1[num][i]; - } // 16*16 - else if (size1 == 24) - { - temp = Hzk2[num][i]; - } // 24*24 - else if (size1 == 32) - { - temp = Hzk3[num][i]; - } // 32*32 - else if (size1 == 64) - { - temp = Hzk4[num][i]; - } // 64*64 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == size1) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color) -{ - uint16_t j = 0; - uint16_t i, n = 0, temp = 0, m = 0; - uint16_t x0 = 0, y0 = 0; - x += 1, y += 1, x0 = x, y0 = y; - sizey = sizey / 8 + ((sizey % 8) ? 1 : 0); - for (n = 0; n < sizey; n++) - { - for (i = 0; i < sizex; i++) - { - temp = BMP[j]; - j++; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, !Color); - else - epd_paint_drawPoint(x, y, Color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == sizex) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } - } -} diff --git a/Example/EpaperModuleTest_GD32F103/Epaper/epaper.h b/Example/EpaperModuleTest_GD32F103/Epaper/epaper.h deleted file mode 100644 index 1653675..0000000 --- a/Example/EpaperModuleTest_GD32F103/Epaper/epaper.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef __EPAPER_H -#define __EPAPER_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "gd32f10x.h" - -//#define EPD_42 -//#define EPD_29 -//#define EPD_213 -//#define EPD_154 - -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) -#error EPD Type Undefine -#endif - -#ifdef EPD_29 -#define EPD_W 128 -#define EPD_H 296 -#endif - -#ifdef EPD_213 -#define EPD_W 122 -#define EPD_H 250 -#endif - -#ifdef EPD_154 -#define EPD_W 200 -#define EPD_H 200 -#endif - -#ifdef EPD_42 -#define EPD_W 400 -#define EPD_H 300 -#endif - -#define EPD_OK 0 -#define EPD_ERROR 1 - -#define EPD_ROTATE_0 0 -#define EPD_ROTATE_90 90 -#define EPD_ROTATE_180 180 -#define EPD_ROTATE_270 270 - -#define EPD_COLOR_WHITE 0xFF -#define EPD_COLOR_BLACK 0x00 -#define EPD_COLOR_RED EPD_COLOR_BLACK - -#define EPD_FONT_SIZE8x6 (8) -#define EPD_FONT_SIZE12x6 (12) -#define EPD_FONT_SIZE16x8 (16) -#define EPD_FONT_SIZE24x12 (24) - -#define EPD_DEEPSLEEP_MODE1 (0x01) -#define EPD_DEEPSLEEP_MODE2 (0x03) - -#define EPD_W_BUFF_SIZE ((EPD_W % 8 == 0) ? (EPD_W / 8) : (EPD_W / 8 + 1)) - typedef struct - { - uint8_t *Image; - uint16_t Width; - uint16_t Height; - uint16_t WidthMemory; - uint16_t HeightMemory; - uint16_t Color; - uint16_t Rotate; - uint16_t WidthByte; - uint16_t HeightByte; - } EPD_PAINT; - extern EPD_PAINT EPD_Paint; - - void epd_io_init(void); - uint8_t epd_init(void); - uint8_t epd_init_partial(void); - void epd_enter_deepsleepmode(uint8_t mode); - uint8_t epd_power_on(void); - uint8_t epd_power_off(void); - void epd_init_internalTempSensor(void); - void epd_update(void); - void epd_update_partial(void); - void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); - void epd_setpos(uint16_t x, uint16_t y); - void epd_display(uint8_t *Image1, uint8_t *Image2); - void epd_displayBW(uint8_t *Image); - void epd_displayBW_partial(uint8_t *Image); - void epd_displayRED(uint8_t *Image); - - void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color); - void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_selectimage(uint8_t *image); - void epd_paint_clear(uint16_t color); - void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color); - void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode); - void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode); - void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color); - void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color); - void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color); - void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color); - void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_GD32F103/Epaper/epdfont.h b/Example/EpaperModuleTest_GD32F103/Epaper/epdfont.h deleted file mode 100644 index 3d4913b..0000000 --- a/Example/EpaperModuleTest_GD32F103/Epaper/epdfont.h +++ /dev/null @@ -1,429 +0,0 @@ -#ifndef __EPDFONT_H -#define __EPDFONT_H - -#ifdef __cplusplus -extern "C" { -#endif - -const unsigned char asc2_0806[][6] = -{ -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// sp -{0x00, 0x00, 0x00, 0x2f, 0x00, 0x00},// ! -{0x00, 0x00, 0x07, 0x00, 0x07, 0x00},// " -{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14},// # -{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12},// $ -{0x00, 0x62, 0x64, 0x08, 0x13, 0x23},// % -{0x00, 0x36, 0x49, 0x55, 0x22, 0x50},// & -{0x00, 0x00, 0x05, 0x03, 0x00, 0x00},// ' -{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00},// ( -{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00},// ) -{0x00, 0x14, 0x08, 0x3E, 0x08, 0x14},// * -{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08},// + -{0x00, 0x00, 0x00, 0xA0, 0x60, 0x00},// , -{0x00, 0x08, 0x08, 0x08, 0x08, 0x08},// - -{0x00, 0x00, 0x60, 0x60, 0x00, 0x00},// . -{0x00, 0x20, 0x10, 0x08, 0x04, 0x02},// / -{0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E},// 0 -{0x00, 0x00, 0x42, 0x7F, 0x40, 0x00},// 1 -{0x00, 0x42, 0x61, 0x51, 0x49, 0x46},// 2 -{0x00, 0x21, 0x41, 0x45, 0x4B, 0x31},// 3 -{0x00, 0x18, 0x14, 0x12, 0x7F, 0x10},// 4 -{0x00, 0x27, 0x45, 0x45, 0x45, 0x39},// 5 -{0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30},// 6 -{0x00, 0x01, 0x71, 0x09, 0x05, 0x03},// 7 -{0x00, 0x36, 0x49, 0x49, 0x49, 0x36},// 8 -{0x00, 0x06, 0x49, 0x49, 0x29, 0x1E},// 9 -{0x00, 0x00, 0x36, 0x36, 0x00, 0x00},// : -{0x00, 0x00, 0x56, 0x36, 0x00, 0x00},// ; -{0x00, 0x08, 0x14, 0x22, 0x41, 0x00},// < -{0x00, 0x14, 0x14, 0x14, 0x14, 0x14},// = -{0x00, 0x00, 0x41, 0x22, 0x14, 0x08},// > -{0x00, 0x02, 0x01, 0x51, 0x09, 0x06},// ? -{0x00, 0x32, 0x49, 0x59, 0x51, 0x3E},// @ -{0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C},// A -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x36},// B -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x22},// C -{0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C},// D -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x41},// E -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x01},// F -{0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A},// G -{0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F},// H -{0x00, 0x00, 0x41, 0x7F, 0x41, 0x00},// I -{0x00, 0x20, 0x40, 0x41, 0x3F, 0x01},// J -{0x00, 0x7F, 0x08, 0x14, 0x22, 0x41},// K -{0x00, 0x7F, 0x40, 0x40, 0x40, 0x40},// L -{0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F},// M -{0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F},// N -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E},// O -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x06},// P -{0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E},// Q -{0x00, 0x7F, 0x09, 0x19, 0x29, 0x46},// R -{0x00, 0x46, 0x49, 0x49, 0x49, 0x31},// S -{0x00, 0x01, 0x01, 0x7F, 0x01, 0x01},// T -{0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F},// U -{0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F},// V -{0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F},// W -{0x00, 0x63, 0x14, 0x08, 0x14, 0x63},// X -{0x00, 0x07, 0x08, 0x70, 0x08, 0x07},// Y -{0x00, 0x61, 0x51, 0x49, 0x45, 0x43},// Z -{0x00, 0x00, 0x7F, 0x41, 0x41, 0x00},// [ -{0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55},// 55 -{0x00, 0x00, 0x41, 0x41, 0x7F, 0x00},// ] -{0x00, 0x04, 0x02, 0x01, 0x02, 0x04},// ^ -{0x00, 0x40, 0x40, 0x40, 0x40, 0x40},// _ -{0x00, 0x00, 0x01, 0x02, 0x04, 0x00},// ' -{0x00, 0x20, 0x54, 0x54, 0x54, 0x78},// a -{0x00, 0x7F, 0x48, 0x44, 0x44, 0x38},// b -{0x00, 0x38, 0x44, 0x44, 0x44, 0x20},// c -{0x00, 0x38, 0x44, 0x44, 0x48, 0x7F},// d -{0x00, 0x38, 0x54, 0x54, 0x54, 0x18},// e -{0x00, 0x08, 0x7E, 0x09, 0x01, 0x02},// f -{0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C},// g -{0x00, 0x7F, 0x08, 0x04, 0x04, 0x78},// h -{0x00, 0x00, 0x44, 0x7D, 0x40, 0x00},// i -{0x00, 0x40, 0x80, 0x84, 0x7D, 0x00},// j -{0x00, 0x7F, 0x10, 0x28, 0x44, 0x00},// k -{0x00, 0x00, 0x41, 0x7F, 0x40, 0x00},// l -{0x00, 0x7C, 0x04, 0x18, 0x04, 0x78},// m -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x78},// n -{0x00, 0x38, 0x44, 0x44, 0x44, 0x38},// o -{0x00, 0xFC, 0x24, 0x24, 0x24, 0x18},// p -{0x00, 0x18, 0x24, 0x24, 0x18, 0xFC},// q -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x08},// r -{0x00, 0x48, 0x54, 0x54, 0x54, 0x20},// s -{0x00, 0x04, 0x3F, 0x44, 0x40, 0x20},// t -{0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C},// u -{0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C},// v -{0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C},// w -{0x00, 0x44, 0x28, 0x10, 0x28, 0x44},// x -{0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C},// y -{0x00, 0x44, 0x64, 0x54, 0x4C, 0x44},// z -{0x14, 0x14, 0x14, 0x14, 0x14, 0x14},// horiz lines -}; -//12*12 ASCII -const unsigned char asc2_1206[95][12]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x0C,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x90,0xD0,0xBC,0xD0,0xBC,0x90,0x00,0x03,0x00,0x03,0x00,0x00},/*"#",3*/ -{0x18,0x24,0xFE,0x44,0x8C,0x00,0x03,0x02,0x07,0x02,0x01,0x00},/*"$",4*/ -{0x18,0x24,0xD8,0xB0,0x4C,0x80,0x00,0x03,0x00,0x01,0x02,0x01},/*"%",5*/ -{0xC0,0x38,0xE4,0x38,0xE0,0x00,0x01,0x02,0x02,0x01,0x02,0x02},/*"&",6*/ -{0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xF8,0x04,0x02,0x00,0x00,0x00,0x01,0x02,0x04},/*"(",8*/ -{0x00,0x02,0x04,0xF8,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0x00},/*")",9*/ -{0x90,0x60,0xF8,0x60,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"*",10*/ -{0x20,0x20,0xFC,0x20,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x00,0x00,0x00,0x00},/*",",12*/ -{0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x80,0x60,0x1C,0x02,0x00,0x04,0x03,0x00,0x00,0x00,0x00},/*"/",15*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"0",16*/ -{0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"1",17*/ -{0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00},/*"2",18*/ -{0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"3",19*/ -{0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00},/*"4",20*/ -{0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"5",21*/ -{0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"6",22*/ -{0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00},/*"7",23*/ -{0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"8",24*/ -{0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"9",25*/ -{0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00},/*";",27*/ -{0x00,0x20,0x50,0x88,0x04,0x02,0x00,0x00,0x00,0x00,0x01,0x02},/*"<",28*/ -{0x90,0x90,0x90,0x90,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x02,0x04,0x88,0x50,0x20,0x00,0x02,0x01,0x00,0x00,0x00},/*">",30*/ -{0x18,0x04,0xC4,0x24,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"?",31*/ -{0xF8,0x04,0xE4,0x94,0xF8,0x00,0x01,0x02,0x02,0x02,0x02,0x00},/*"@",32*/ -{0x00,0xE0,0x9C,0xF0,0x80,0x00,0x02,0x03,0x00,0x00,0x03,0x02},/*"A",33*/ -{0x04,0xFC,0x24,0x24,0xD8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"B",34*/ -{0xF8,0x04,0x04,0x04,0x0C,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"C",35*/ -{0x04,0xFC,0x04,0x04,0xF8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"D",36*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"E",37*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"F",38*/ -{0xF0,0x08,0x04,0x44,0xCC,0x40,0x00,0x01,0x02,0x02,0x01,0x00},/*"G",39*/ -{0x04,0xFC,0x20,0x20,0xFC,0x04,0x02,0x03,0x00,0x00,0x03,0x02},/*"H",40*/ -{0x04,0x04,0xFC,0x04,0x04,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"I",41*/ -{0x00,0x04,0x04,0xFC,0x04,0x04,0x06,0x04,0x04,0x03,0x00,0x00},/*"J",42*/ -{0x04,0xFC,0x24,0xD0,0x0C,0x04,0x02,0x03,0x02,0x00,0x03,0x02},/*"K",43*/ -{0x04,0xFC,0x04,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x02,0x03},/*"L",44*/ -{0xFC,0x3C,0xC0,0x3C,0xFC,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"M",45*/ -{0x04,0xFC,0x30,0xC4,0xFC,0x04,0x02,0x03,0x02,0x00,0x03,0x00},/*"N",46*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"O",47*/ -{0x04,0xFC,0x24,0x24,0x18,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"P",48*/ -{0xF8,0x84,0x84,0x04,0xF8,0x00,0x01,0x02,0x02,0x07,0x05,0x00},/*"Q",49*/ -{0x04,0xFC,0x24,0x64,0x98,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"R",50*/ -{0x18,0x24,0x24,0x44,0x8C,0x00,0x03,0x02,0x02,0x02,0x01,0x00},/*"S",51*/ -{0x0C,0x04,0xFC,0x04,0x0C,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"T",52*/ -{0x04,0xFC,0x00,0x00,0xFC,0x04,0x00,0x01,0x02,0x02,0x01,0x00},/*"U",53*/ -{0x04,0x7C,0x80,0xE0,0x1C,0x04,0x00,0x00,0x03,0x00,0x00,0x00},/*"V",54*/ -{0x1C,0xE0,0x3C,0xE0,0x1C,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"W",55*/ -{0x04,0x9C,0x60,0x9C,0x04,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"X",56*/ -{0x04,0x1C,0xE0,0x1C,0x04,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"Y",57*/ -{0x0C,0x84,0x64,0x1C,0x04,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"Z",58*/ -{0x00,0x00,0xFE,0x02,0x02,0x00,0x00,0x00,0x07,0x04,0x04,0x00},/*"[",59*/ -{0x00,0x0E,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00},/*"\",60*/ -{0x00,0x02,0x02,0xFE,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00},/*"]",61*/ -{0x00,0x04,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08},/*"_",63*/ -{0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x40,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"a",65*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"b",66*/ -{0x00,0xC0,0x20,0x20,0x60,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"c",67*/ -{0x00,0xC0,0x20,0x24,0xFC,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"d",68*/ -{0x00,0xC0,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"e",69*/ -{0x00,0x20,0xF8,0x24,0x24,0x04,0x00,0x02,0x03,0x02,0x02,0x00},/*"f",70*/ -{0x00,0x40,0xA0,0xA0,0x60,0x20,0x00,0x07,0x0A,0x0A,0x0A,0x04},/*"g",71*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"h",72*/ -{0x00,0x20,0xE4,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x20,0xE4,0x00,0x00,0x08,0x08,0x08,0x07,0x00,0x00},/*"j",74*/ -{0x04,0xFC,0x80,0xE0,0x20,0x20,0x02,0x03,0x02,0x00,0x03,0x02},/*"k",75*/ -{0x04,0x04,0xFC,0x00,0x00,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"l",76*/ -{0xE0,0x20,0xE0,0x20,0xC0,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"m",77*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"n",78*/ -{0x00,0xC0,0x20,0x20,0xC0,0x00,0x00,0x01,0x02,0x02,0x01,0x00},/*"o",79*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x08,0x0F,0x0A,0x02,0x01,0x00},/*"p",80*/ -{0x00,0xC0,0x20,0x20,0xE0,0x00,0x00,0x01,0x02,0x0A,0x0F,0x08},/*"q",81*/ -{0x20,0xE0,0x40,0x20,0x20,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x60,0xA0,0xA0,0x20,0x00,0x00,0x02,0x02,0x02,0x03,0x00},/*"s",83*/ -{0x00,0x20,0xF8,0x20,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x00},/*"t",84*/ -{0x20,0xE0,0x00,0x20,0xE0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"u",85*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x00,0x00,0x03,0x01,0x00,0x00},/*"v",86*/ -{0x60,0x80,0xE0,0x80,0x60,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"w",87*/ -{0x20,0x60,0x80,0x60,0x20,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"x",88*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x08,0x08,0x07,0x01,0x00,0x00},/*"y",89*/ -{0x00,0x20,0xA0,0x60,0x20,0x00,0x00,0x02,0x03,0x02,0x02,0x00},/*"z",90*/ -{0x00,0x00,0x20,0xDE,0x02,0x00,0x00,0x00,0x00,0x07,0x04,0x00},/*"{",91*/ -{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00},/*"|",92*/ -{0x00,0x02,0xDE,0x20,0x00,0x00,0x00,0x04,0x07,0x00,0x00,0x00},/*"}",93*/ -{0x02,0x01,0x02,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//16*16 ASCII -const unsigned char asc2_1608[][16]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00},/*"#",3*/ -{0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00},/*"$",4*/ -{0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00},/*"%",5*/ -{0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10},/*"&",6*/ -{0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},/*")",9*/ -{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},/*"*",10*/ -{0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/*"/",15*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",16*/ -{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"1",17*/ -{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",18*/ -{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},/*"3",19*/ -{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},/*"4",20*/ -{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},/*"5",21*/ -{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"6",22*/ -{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",24*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},/*"9",25*/ -{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},/*"<",28*/ -{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"=",29*/ -{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},/*">",30*/ -{0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00},/*"?",31*/ -{0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00},/*"@",32*/ -{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",33*/ -{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},/*"B",34*/ -{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",35*/ -{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},/*"D",36*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},/*"E",37*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},/*"F",38*/ -{0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},/*"G",39*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},/*"H",40*/ -{0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},/*"J",42*/ -{0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},/*"K",43*/ -{0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},/*"L",44*/ -{0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00},/*"M",45*/ -{0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},/*"N",46*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},/*"O",47*/ -{0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},/*"P",48*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},/*"Q",49*/ -{0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},/*"R",50*/ -{0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},/*"S",51*/ -{0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"T",52*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"U",53*/ -{0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},/*"V",54*/ -{0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},/*"W",55*/ -{0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},/*"X",56*/ -{0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"Y",57*/ -{0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},/*"\",60*/ -{0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},/*"a",65*/ -{0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20},/*"d",68*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},/*"e",69*/ -{0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},/*"g",71*/ -{0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"h",72*/ -{0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},/*"j",74*/ -{0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00},/*"k",75*/ -{0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"l",76*/ -{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},/*"m",77*/ -{0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"n",78*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"o",79*/ -{0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80},/*"q",81*/ -{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},/*"r",82*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},/*"s",83*/ -{0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00},/*"t",84*/ -{0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},/*"u",85*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00},/*"v",86*/ -{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},/*"w",87*/ -{0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00},/*"x",88*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00},/*"y",89*/ -{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40},/*"{",91*/ -{0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//24*24 ASICII -const unsigned char asc2_2412[][36]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x00,0x80,0x60,0x30,0x1C,0x8C,0x60,0x30,0x1C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x86,0xE6,0x9F,0x86,0x86,0x86,0x86,0xE6,0x9F,0x86,0x00,0x00,0x01,0x1F,0x01,0x01,0x01,0x01,0x01,0x1F,0x01,0x01,0x00},/*"#",3*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0xF8,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x03,0x07,0x0C,0x18,0xFF,0x70,0xE1,0x81,0x00,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x7F,0x10,0x0F,0x07,0x00,0x00},/*"$",4*/ -{0x80,0x60,0x20,0x60,0x80,0x00,0x00,0x00,0xE0,0x20,0x00,0x00,0x0F,0x30,0x20,0x30,0x9F,0x70,0xDC,0x37,0x10,0x30,0xC0,0x00,0x00,0x00,0x10,0x0E,0x03,0x00,0x07,0x18,0x10,0x18,0x07,0x00},/*"%",5*/ -{0x00,0x00,0xC0,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x1F,0x38,0xE8,0x87,0x03,0xC4,0x3C,0x04,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x0B,0x07,0x0D,0x10,0x10,0x08,0x00},/*"&",6*/ -{0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x30,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x04,0x08,0x30,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x66,0x66,0x3C,0x18,0xFF,0x18,0x3C,0x66,0x66,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"*",10*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x0C,0x00,0x00,0x00,0x00,0x00,0x80,0x70,0x1C,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x38,0x0E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"/",15*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0E,0x07,0x01,0x00},/*"0",16*/ -{0x00,0x00,0x80,0x80,0x80,0xC0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"1",17*/ -{0x00,0x80,0x40,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x03,0x03,0x00,0x80,0x40,0x20,0x38,0x1F,0x07,0x00,0x00,0x00,0x1C,0x1A,0x19,0x18,0x18,0x18,0x18,0x18,0x1F,0x00,0x00},/*"2",18*/ -{0x00,0x80,0xC0,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00},/*"3",19*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x00,0x00,0x00,0x00,0xC0,0xB0,0x88,0x86,0x81,0x80,0xFF,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00},/*"4",20*/ -{0x00,0x00,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x3F,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x00,0x07,0x0B,0x10,0x10,0x10,0x10,0x1C,0x0F,0x03,0x00,0x00},/*"5",21*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0xFC,0xFF,0x21,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x01,0x07,0x0C,0x18,0x10,0x10,0x10,0x08,0x0F,0x03,0x00},/*"6",22*/ -{0x00,0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0x60,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x87,0xEF,0x2C,0x18,0x18,0x30,0x30,0x68,0xCF,0x83,0x00,0x00,0x07,0x0F,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"8",24*/ -{0x00,0x00,0xC0,0xC0,0x20,0x20,0x20,0x20,0xC0,0x80,0x00,0x00,0x00,0x1F,0x3F,0x60,0x40,0x40,0x40,0x20,0x10,0xFF,0xFE,0x00,0x00,0x00,0x0C,0x1C,0x10,0x10,0x10,0x08,0x0F,0x03,0x00,0x00},/*"9",25*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x00,0x00,0x00,0x10,0x28,0x44,0x82,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"<",28*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x00,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x44,0x28,0x10,0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00},/*">",30*/ -{0x00,0xC0,0x20,0x20,0x10,0x10,0x10,0x10,0x30,0xE0,0xC0,0x00,0x00,0x03,0x03,0x00,0x00,0xF0,0x10,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00},/*"?",31*/ -{0x00,0x00,0x00,0xC0,0x40,0x60,0x20,0x20,0x20,0x40,0xC0,0x00,0x00,0xFC,0xFF,0x01,0xF0,0x0E,0x03,0xC1,0xFE,0x03,0x80,0x7F,0x00,0x01,0x07,0x0E,0x08,0x11,0x11,0x10,0x11,0x09,0x04,0x02},/*"@",32*/ -{0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7C,0x43,0x40,0x47,0x7F,0xF8,0x80,0x00,0x00,0x10,0x18,0x1F,0x10,0x00,0x00,0x00,0x00,0x13,0x1F,0x1C,0x10},/*"A",33*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"B",34*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0x20,0x60,0xE0,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x08,0x04,0x03,0x00},/*"C",35*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x40,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x18,0x08,0x0E,0x07,0x01,0x00},/*"D",36*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"E",37*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x01,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"F",38*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x40,0xE0,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x40,0x40,0xC0,0xC1,0x40,0x40,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x0F,0x0F,0x00,0x00},/*"G",39*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0x20,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0xFF,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10},/*"H",40*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x60,0xE0,0x80,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"J",42*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x20,0xA0,0x60,0x20,0x20,0x00,0x00,0xFF,0xFF,0x30,0x18,0x7C,0xE3,0xC0,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x01,0x13,0x1F,0x1C,0x18,0x10},/*"K",43*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"L",44*/ -{0x20,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0x20,0x00,0xFF,0x01,0x3F,0xFE,0xC0,0xE0,0x1E,0x01,0xFF,0xFF,0x00,0x10,0x1F,0x10,0x00,0x03,0x1F,0x03,0x00,0x10,0x1F,0x1F,0x10},/*"M",45*/ -{0x20,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0x00,0x03,0x07,0x1C,0x78,0xE0,0x80,0x00,0xFF,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x00},/*"N",46*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0C,0x07,0x01,0x00},/*"O",47*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x20,0x20,0x20,0x20,0x20,0x30,0x1F,0x0F,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"P",48*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x11,0x11,0x13,0x3C,0x7C,0x67,0x21,0x00},/*"Q",49*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x30,0xF0,0xD0,0x08,0x0F,0x07,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x03,0x0F,0x1C,0x10,0x10},/*"R",50*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x40,0x40,0xE0,0x00,0x00,0x07,0x0F,0x0C,0x18,0x18,0x30,0x30,0x60,0xE0,0x81,0x00,0x00,0x1F,0x0C,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"S",51*/ -{0x80,0x60,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x60,0x80,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00},/*"T",52*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x10,0x10,0x08,0x07,0x00},/*"U",53*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x07,0x7F,0xF8,0x80,0x00,0x80,0x7C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x1C,0x07,0x00,0x00,0x00,0x00},/*"V",54*/ -{0x20,0xE0,0xE0,0x20,0x00,0xE0,0xE0,0x20,0x00,0x20,0xE0,0x20,0x00,0x07,0xFF,0xF8,0xE0,0x1F,0xFF,0xFC,0xE0,0x1F,0x00,0x00,0x00,0x00,0x03,0x1F,0x03,0x00,0x01,0x1F,0x03,0x00,0x00,0x00},/*"W",55*/ -{0x00,0x20,0x60,0xE0,0xA0,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x03,0x8F,0x7C,0xF8,0xC6,0x01,0x00,0x00,0x00,0x00,0x10,0x18,0x1E,0x13,0x00,0x01,0x17,0x1F,0x18,0x10,0x00},/*"X",56*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x01,0x07,0x3E,0xF8,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00},/*"Y",57*/ -{0x00,0x80,0x60,0x20,0x20,0x20,0x20,0xA0,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x3E,0x0F,0x03,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x00,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1C,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x70,0x80,0x00},/*"\",60*/ -{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x00,0x10,0x08,0x0C,0x04,0x0C,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x00,0x00,0x04,0x04,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0xD8,0x44,0x64,0x24,0x24,0xFC,0xF8,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x10,0x08,0x1F,0x1F,0x10,0x18},/*"a",65*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x18,0x08,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x1F,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x03,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x18,0x04,0x04,0x04,0x3C,0x38,0x00,0x00,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x08,0x06,0x00,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"d",68*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x48,0x44,0x44,0x44,0x4C,0x78,0x70,0x00,0x00,0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x08,0x04,0x00},/*"e",69*/ -{0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0xE0,0xC0,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF8,0x8C,0x04,0x04,0x8C,0xF8,0x74,0x04,0x0C,0x00,0x70,0x76,0xCF,0x8D,0x8D,0x8D,0x89,0xC8,0x78,0x70,0x00},/*"g",71*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x08,0x04,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"h",72*/ -{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"j",74*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0xC0,0xF4,0x1C,0x04,0x04,0x00,0x00,0x00,0x10,0x1F,0x1F,0x11,0x00,0x03,0x1F,0x1C,0x10,0x10,0x00},/*"k",75*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"l",76*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x00,0x10,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10},/*"m",77*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x08,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"n",78*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0x18,0x0C,0x04,0x04,0x0C,0x18,0xF0,0xE0,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x0C,0x0F,0x03,0x00},/*"o",79*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x80,0xFF,0xFF,0x88,0x90,0x10,0x10,0x1C,0x0F,0x03,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xF8,0xFC,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x90,0x88,0xFF,0xFF,0x80,0x00},/*"q",81*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x10,0x08,0x04,0x04,0x0C,0x0C,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x78,0xCC,0xC4,0x84,0x84,0x84,0x0C,0x1C,0x00,0x00,0x00,0x1E,0x18,0x10,0x10,0x10,0x11,0x19,0x0F,0x06,0x00},/*"s",83*/ -{0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x10,0x10,0x10,0x0C,0x00,0x00},/*"t",84*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"u",85*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0x00,0xC4,0x3C,0x0C,0x04,0x00,0x00,0x00,0x00,0x01,0x0F,0x1E,0x0E,0x01,0x00,0x00,0x00},/*"v",86*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x3C,0xFC,0xC4,0x00,0xE4,0x7C,0xFC,0x84,0x80,0x7C,0x04,0x00,0x00,0x07,0x1F,0x07,0x00,0x00,0x07,0x1F,0x07,0x00,0x00},/*"w",87*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x1C,0x7C,0xE4,0xC0,0x34,0x1C,0x04,0x04,0x00,0x00,0x10,0x10,0x1C,0x16,0x01,0x13,0x1F,0x1C,0x18,0x10,0x00},/*"x",88*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0xC4,0x3C,0x04,0x04,0x00,0x00,0x00,0xC0,0x80,0xC1,0x37,0x0E,0x01,0x00,0x00,0x00,0x00},/*"y",89*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x04,0x04,0xC4,0xF4,0x7C,0x1C,0x04,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x11,0x10,0x10,0x18,0x0E,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x60,0x40,0x00,0x00},/*"{",91*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x00,0x04,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x18,0x06,0x02,0x02,0x04,0x08,0x10,0x20,0x20,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -const unsigned char Hzk1[][32]={ -{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"��",0*/ -{0x40,0x40,0x40,0x5F,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x5F,0x40,0x40,0x40,0x00,0x00,0x40,0x20,0x0F,0x09,0x49,0x89,0x79,0x09,0x09,0x09,0x0F,0x20,0x40,0x00,0x00},/*"��",1*/ -{0x00,0xFE,0x02,0x42,0x4A,0xCA,0x4A,0x4A,0xCA,0x4A,0x4A,0x42,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x50,0x4C,0x43,0x40,0x40,0x4F,0x50,0x50,0x5C,0x40,0xFF,0x00,0x00},/*"԰",2*/ -{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"��",3*/ -{0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",4*/ -{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"��",5*/ -{0x00,0x10,0x10,0x10,0x10,0xD0,0x30,0xFF,0x30,0xD0,0x12,0x1C,0x10,0x10,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"��",6*/ -{0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00},/*"��",7*/ -{0x00,0xFE,0x22,0x5A,0x86,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,0xFF,0x04,0x08,0x07,0x00,0xFF,0x40,0x20,0x03,0x0C,0x14,0x22,0x41,0x40,0x00},/*"��",8*/ -{0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,0x00,0x01,0x00,0x20,0x70,0x28,0x26,0x21,0x20,0x20,0x24,0x38,0x60,0x00,0x01,0x01,0x00},/*"��",9*/ -{0x00,0x10,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x12,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00},/*"˾",10*/ -}; -const unsigned char Hzk2[][72]={ -{0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFC,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; -const unsigned char Hzk3[][128]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - - -}; - -const unsigned char Hzk4[][512]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF0,0xF0,0x70,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Include/gd32f10x.h b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Include/gd32f10x.h deleted file mode 100644 index c79893b..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Include/gd32f10x.h +++ /dev/null @@ -1,380 +0,0 @@ -/*! - \file gd32f10x.h - \brief general definitions for GD32F10x - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_H -#define GD32F10X_H - -#ifdef cplusplus - extern "C" { -#endif - -/* define GD32F10x */ -#if !defined (GD32F10X_MD) && !defined (GD32F10X_HD) && !defined (GD32F10X_XD) && !defined (GD32F10X_CL) - /* #define GD32F10X_MD */ /*!< GD32F10X_MD: GD32 Medium density devices */ - /* #define GD32F10X_HD */ /*!< GD32F10X_HD: GD32 High density Value Line devices */ - /* #define GD32F10X_XD */ /*!< GD32F10X_XD: GD32 Extra density devices */ - /* #define GD32F10X_CL */ /*!< GD32F10X_CL: GD32 Connectivity line devices */ -#endif /* define GD32F10x */ - -#if !defined (GD32F10X_MD) && !defined (GD32F10X_HD) && !defined (GD32F10X_XD) && !defined (GD32F10X_CL) - #error "Please select the target GD32F10x device in gd32f10x.h file" -#endif /* undefine GD32F10x tip */ - -/* define value of high speed crystal oscillator (HXTAL) in Hz */ -#if !defined HXTAL_VALUE -#ifdef GD32F10X_CL -#define HXTAL_VALUE ((uint32_t)25000000) /*!< value of the external oscillator in Hz */ -#else -#define HXTAL_VALUE ((uint32_t)8000000) /* !< from 4M to 16M *!< value of the external oscillator in Hz*/ -#endif /* HXTAL_VALUE */ -#endif /* high speed crystal oscillator value */ - -/* define startup timeout value of high speed crystal oscillator (HXTAL) */ -#if !defined (HXTAL_STARTUP_TIMEOUT) -#define HXTAL_STARTUP_TIMEOUT ((uint16_t)0xFFFF) -#endif /* high speed crystal oscillator startup timeout */ - -/* define value of internal 8MHz RC oscillator (IRC8M) in Hz */ -#if !defined (IRC8M_VALUE) -#define IRC8M_VALUE ((uint32_t)8000000) -#endif /* internal 8MHz RC oscillator value */ - -/* define startup timeout value of internal 8MHz RC oscillator (IRC8M) */ -#if !defined (IRC8M_STARTUP_TIMEOUT) -#define IRC8M_STARTUP_TIMEOUT ((uint16_t)0x0500) -#endif /* internal 8MHz RC oscillator startup timeout */ - -/* define value of internal 40KHz RC oscillator(IRC40K) in Hz */ -#if !defined (IRC40K_VALUE) -#define IRC40K_VALUE ((uint32_t)40000) -#endif /* internal 40KHz RC oscillator value */ - -/* define value of low speed crystal oscillator (LXTAL)in Hz */ -#if !defined (LXTAL_VALUE) -#define LXTAL_VALUE ((uint32_t)32768) -#endif /* low speed crystal oscillator value */ - -/* GD32F10x firmware library version number V2.0 */ -#define __GD32F10x_STDPERIPH_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __GD32F10x_STDPERIPH_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ -#define __GD32F10x_STDPERIPH_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ -#define __GD32F10x_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __GD32F10x_STDPERIPH_VERSION ((__GD32F10x_STDPERIPH_VERSION_MAIN << 24)\ - |(__GD32F10x_STDPERIPH_VERSION_SUB1 << 16)\ - |(__GD32F10x_STDPERIPH_VERSION_SUB2 << 8)\ - |(__GD32F10x_STDPERIPH_VERSION_RC)) - -/* configuration of the Cortex-M3 processor and core peripherals */ -#define __MPU_PRESENT 0 /*!< GD32F10x do not provide MPU */ -#define __NVIC_PRIO_BITS 4 /*!< GD32F10x uses 4 bits for the priority levels */ -#define __Vendor_SysTickConfig 0 /*!< set to 1 if different sysTick config is used */ -/* define interrupt number */ -typedef enum IRQn -{ - /* Cortex-M3 processor exceptions numbers */ - NonMaskableInt_IRQn = -14, /*!< 2 non maskable 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 */ - - /* interruput numbers */ - WWDGT_IRQn = 0, /*!< window watchDog timer interrupt */ - LVD_IRQn = 1, /*!< LVD through EXTI line detect interrupt */ - TAMPER_IRQn = 2, /*!< tamper through EXTI line detect */ - RTC_IRQn = 3, /*!< RTC through EXTI line interrupt */ - FMC_IRQn = 4, /*!< FMC interrupt */ - RCU_CTC_IRQn = 5, /*!< RCU and CTC interrupt */ - EXTI0_IRQn = 6, /*!< EXTI line 0 interrupts */ - EXTI1_IRQn = 7, /*!< EXTI line 1 interrupts */ - EXTI2_IRQn = 8, /*!< EXTI line 2 interrupts */ - EXTI3_IRQn = 9, /*!< EXTI line 3 interrupts */ - EXTI4_IRQn = 10, /*!< EXTI line 4 interrupts */ - DMA0_Channel0_IRQn = 11, /*!< DMA0 channel0 interrupt */ - DMA0_Channel1_IRQn = 12, /*!< DMA0 channel1 interrupt */ - DMA0_Channel2_IRQn = 13, /*!< DMA0 channel2 interrupt */ - DMA0_Channel3_IRQn = 14, /*!< DMA0 channel3 interrupt */ - DMA0_Channel4_IRQn = 15, /*!< DMA0 channel4 interrupt */ - DMA0_Channel5_IRQn = 16, /*!< DMA0 channel5 interrupt */ - DMA0_Channel6_IRQn = 17, /*!< DMA0 channel6 interrupt */ - ADC0_1_IRQn = 18, /*!< ADC0 and ADC1 interrupt */ - -#ifdef GD32F10X_MD - USBD_HP_CAN0_TX_IRQn = 19, /*!< CAN0 TX interrupts */ - USBD_LP_CAN0_RX0_IRQn = 20, /*!< CAN0 RX0 interrupts */ - CAN0_RX1_IRQn = 21, /*!< CAN0 RX1 interrupts */ - CAN0_EWMC_IRQn = 22, /*!< CAN0 EWMC interrupts */ - EXTI5_9_IRQn = 23, /*!< EXTI[9:5] interrupts */ - TIMER0_BRK_IRQn = 24, /*!< TIMER0 break interrupts */ - TIMER0_UP_IRQn = 25, /*!< TIMER0 update interrupts */ - TIMER0_TRG_CMT_IRQn = 26, /*!< TIMER0 trigger and commutation interrupts */ - TIMER0_Channel_IRQn = 27, /*!< TIMER0 channel capture compare interrupts */ - TIMER1_IRQn = 28, /*!< TIMER1 interrupt */ - TIMER2_IRQn = 29, /*!< TIMER2 interrupt */ - TIMER3_IRQn = 30, /*!< TIMER3 interrupts */ - I2C0_EV_IRQn = 31, /*!< I2C0 event interrupt */ - I2C0_ER_IRQn = 32, /*!< I2C0 error interrupt */ - I2C1_EV_IRQn = 33, /*!< I2C1 event interrupt */ - I2C1_ER_IRQn = 34, /*!< I2C1 error interrupt */ - SPI0_IRQn = 35, /*!< SPI0 interrupt */ - SPI1_IRQn = 36, /*!< SPI1 interrupt */ - USART0_IRQn = 37, /*!< USART0 interrupt */ - USART1_IRQn = 38, /*!< USART1 interrupt */ - USART2_IRQn = 39, /*!< USART2 interrupt */ - EXTI10_15_IRQn = 40, /*!< EXTI[15:10] interrupts */ - RTC_Alarm_IRQn = 41, /*!< RTC alarm interrupt */ - USBD_WKUP_IRQn = 42, /*!< USBD Wakeup interrupt */ - EXMC_IRQn = 48, /*!< EXMC global interrupt */ -#endif /* GD32F10X_MD */ - -#ifdef GD32F10X_HD - USBD_HP_CAN0_TX_IRQn = 19, /*!< CAN0 TX interrupts */ - USBD_LP_CAN0_RX0_IRQn = 20, /*!< CAN0 RX0 interrupts */ - CAN0_RX1_IRQn = 21, /*!< CAN0 RX1 interrupts */ - CAN0_EWMC_IRQn = 22, /*!< CAN0 EWMC interrupts */ - EXTI5_9_IRQn = 23, /*!< EXTI[9:5] interrupts */ - TIMER0_BRK_IRQn = 24, /*!< TIMER0 break interrupts */ - TIMER0_UP_IRQn = 25, /*!< TIMER0 update interrupts */ - TIMER0_TRG_CMT_IRQn = 26, /*!< TIMER0 trigger and commutation interrupts */ - TIMER0_Channel_IRQn = 27, /*!< TIMER0 channel capture compare interrupts */ - TIMER1_IRQn = 28, /*!< TIMER1 interrupt */ - TIMER2_IRQn = 29, /*!< TIMER2 interrupt */ - TIMER3_IRQn = 30, /*!< TIMER3 interrupts */ - I2C0_EV_IRQn = 31, /*!< I2C0 event interrupt */ - I2C0_ER_IRQn = 32, /*!< I2C0 error interrupt */ - I2C1_EV_IRQn = 33, /*!< I2C1 event interrupt */ - I2C1_ER_IRQn = 34, /*!< I2C1 error interrupt */ - SPI0_IRQn = 35, /*!< SPI0 interrupt */ - SPI1_IRQn = 36, /*!< SPI1 interrupt */ - USART0_IRQn = 37, /*!< USART0 interrupt */ - USART1_IRQn = 38, /*!< USART1 interrupt */ - USART2_IRQn = 39, /*!< USART2 interrupt */ - EXTI10_15_IRQn = 40, /*!< EXTI[15:10] interrupts */ - RTC_Alarm_IRQn = 41, /*!< RTC alarm interrupt */ - USBD_WKUP_IRQn = 42, /*!< USBD Wakeup interrupt */ - TIMER7_BRK_IRQn = 43, /*!< TIMER7 break interrupts */ - TIMER7_UP_IRQn = 44, /*!< TIMER7 update interrupts */ - TIMER7_TRG_CMT_IRQn = 45, /*!< TIMER7 trigger and commutation interrupts */ - TIMER7_Channel_IRQn = 46, /*!< TIMER7 channel capture compare interrupts */ - ADC2_IRQn = 47, /*!< ADC2 global interrupt */ - EXMC_IRQn = 48, /*!< EXMC global interrupt */ - SDIO_IRQn = 49, /*!< SDIO global interrupt */ - TIMER4_IRQn = 50, /*!< TIMER4 global interrupt */ - SPI2_IRQn = 51, /*!< SPI2 global interrupt */ - UART3_IRQn = 52, /*!< UART3 global interrupt */ - UART4_IRQn = 53, /*!< UART4 global interrupt */ - TIMER5_IRQn = 54, /*!< TIMER5 global interrupt */ - TIMER6_IRQn = 55, /*!< TIMER6 global interrupt */ - DMA1_Channel0_IRQn = 56, /*!< DMA1 channel0 global interrupt */ - DMA1_Channel1_IRQn = 57, /*!< DMA1 channel1 global interrupt */ - DMA1_Channel2_IRQn = 58, /*!< DMA1 channel2 global interrupt */ - DMA1_Channel3_Channel4_IRQn = 59, /*!< DMA1 channel3 and channel4 global Interrupt */ -#endif /* GD32F10X_HD */ - -#ifdef GD32F10X_XD - USBD_HP_CAN0_TX_IRQn = 19, /*!< CAN0 TX interrupts */ - USBD_LP_CAN0_RX0_IRQn = 20, /*!< CAN0 RX0 interrupts */ - CAN0_RX1_IRQn = 21, /*!< CAN0 RX1 interrupts */ - CAN0_EWMC_IRQn = 22, /*!< CAN0 EWMC interrupts */ - EXTI5_9_IRQn = 23, /*!< EXTI[9:5] interrupts */ - TIMER0_BRK_TIMER8_IRQn = 24, /*!< TIMER0 break and TIMER8 interrupts */ - TIMER0_UP_TIMER9_IRQn = 25, /*!< TIMER0 update and TIMER9 interrupts */ - TIMER0_TRG_CMT_TIMER10_IRQn = 26, /*!< TIMER0 trigger and commutation and TIMER10 interrupts */ - TIMER0_Channel_IRQn = 27, /*!< TIMER0 channel capture compare interrupts */ - TIMER1_IRQn = 28, /*!< TIMER1 interrupt */ - TIMER2_IRQn = 29, /*!< TIMER2 interrupt */ - TIMER3_IRQn = 30, /*!< TIMER3 interrupts */ - I2C0_EV_IRQn = 31, /*!< I2C0 event interrupt */ - I2C0_ER_IRQn = 32, /*!< I2C0 error interrupt */ - I2C1_EV_IRQn = 33, /*!< I2C1 event interrupt */ - I2C1_ER_IRQn = 34, /*!< I2C1 error interrupt */ - SPI0_IRQn = 35, /*!< SPI0 interrupt */ - SPI1_IRQn = 36, /*!< SPI1 interrupt */ - USART0_IRQn = 37, /*!< USART0 interrupt */ - USART1_IRQn = 38, /*!< USART1 interrupt */ - USART2_IRQn = 39, /*!< USART2 interrupt */ - EXTI10_15_IRQn = 40, /*!< EXTI[15:10] interrupts */ - RTC_Alarm_IRQn = 41, /*!< RTC alarm interrupt */ - USBD_WKUP_IRQn = 42, /*!< USBD wakeup interrupt */ - TIMER7_BRK_TIMER11_IRQn = 43, /*!< TIMER7 break and TIMER11 interrupts */ - TIMER7_UP_TIMER12_IRQn = 44, /*!< TIMER7 update and TIMER12 interrupts */ - TIMER7_TRG_CMT_TIMER13_IRQn = 45, /*!< TIMER7 trigger and commutation and TIMER13 interrupts */ - TIMER7_Channel_IRQn = 46, /*!< TIMER7 channel capture compare interrupts */ - ADC2_IRQn = 47, /*!< ADC2 global interrupt */ - EXMC_IRQn = 48, /*!< EXMC global interrupt */ - SDIO_IRQn = 49, /*!< SDIO global interrupt */ - TIMER4_IRQn = 50, /*!< TIMER4 global interrupt */ - SPI2_IRQn = 51, /*!< SPI2 global interrupt */ - UART3_IRQn = 52, /*!< UART3 global interrupt */ - UART4_IRQn = 53, /*!< UART4 global interrupt */ - TIMER5_IRQn = 54, /*!< TIMER5 global interrupt */ - TIMER6_IRQn = 55, /*!< TIMER6 global interrupt */ - DMA1_Channel0_IRQn = 56, /*!< DMA1 channel0 global interrupt */ - DMA1_Channel1_IRQn = 57, /*!< DMA1 channel1 global interrupt */ - DMA1_Channel2_IRQn = 58, /*!< DMA1 channel2 global interrupt */ - DMA1_Channel3_Channel4_IRQn = 59, /*!< DMA1 channel3 and channel4 global interrupt */ -#endif /* GD32F10X_XD */ - -#ifdef GD32F10X_CL - CAN0_TX_IRQn = 19, /*!< CAN0 TX interrupts */ - CAN0_RX0_IRQn = 20, /*!< CAN0 RX0 interrupts */ - CAN0_RX1_IRQn = 21, /*!< CAN0 RX1 interrupts */ - CAN0_EWMC_IRQn = 22, /*!< CAN0 EWMC interrupts */ - EXTI5_9_IRQn = 23, /*!< EXTI[9:5] interrupts */ - TIMER0_BRK_IRQn = 24, /*!< TIMER0 break interrupts */ - TIMER0_UP_IRQn = 25, /*!< TIMER0 update interrupts */ - TIMER0_TRG_CMT_IRQn = 26, /*!< TIMER0 trigger and commutation interrupts */ - TIMER0_Channel_IRQn = 27, /*!< TIMER0 channel capture compare interrupts */ - TIMER1_IRQn = 28, /*!< TIMER1 interrupt */ - TIMER2_IRQn = 29, /*!< TIMER2 interrupt */ - TIMER3_IRQn = 30, /*!< TIMER3 interrupts */ - I2C0_EV_IRQn = 31, /*!< I2C0 event interrupt */ - I2C0_ER_IRQn = 32, /*!< I2C0 error interrupt */ - I2C1_EV_IRQn = 33, /*!< I2C1 event interrupt */ - I2C1_ER_IRQn = 34, /*!< I2C1 error interrupt */ - SPI0_IRQn = 35, /*!< SPI0 interrupt */ - SPI1_IRQn = 36, /*!< SPI1 interrupt */ - USART0_IRQn = 37, /*!< USART0 interrupt */ - USART1_IRQn = 38, /*!< USART1 interrupt */ - USART2_IRQn = 39, /*!< USART2 interrupt */ - EXTI10_15_IRQn = 40, /*!< EXTI[15:10] interrupts */ - RTC_Alarm_IRQn = 41, /*!< RTC alarm interrupt */ - USBFS_WKUP_IRQn = 42, /*!< USBFS wakeup interrupt */ - TIMER7_BRK_IRQn = 43, /*!< TIMER7 break interrupts */ - TIMER7_UP_IRQn = 44, /*!< TIMER7 update interrupts */ - TIMER7_TRG_CMT_IRQn = 45, /*!< TIMER7 trigger and commutation interrupts */ - TIMER7_Channel_IRQn = 46, /*!< TIMER7 channel capture compare interrupts */ - EXMC_IRQn = 48, /*!< EXMC global interrupt */ - TIMER4_IRQn = 50, /*!< TIMER4 global interrupt */ - SPI2_IRQn = 51, /*!< SPI2 global interrupt */ - UART3_IRQn = 52, /*!< UART3 global interrupt */ - UART4_IRQn = 53, /*!< UART4 global interrupt */ - TIMER5_IRQn = 54, /*!< TIMER5 global interrupt */ - TIMER6_IRQn = 55, /*!< TIMER6 global interrupt */ - DMA1_Channel0_IRQn = 56, /*!< DMA1 channel0 global interrupt */ - DMA1_Channel1_IRQn = 57, /*!< DMA1 channel1 global interrupt */ - DMA1_Channel2_IRQn = 58, /*!< DMA1 channel2 global interrupt */ - DMA1_Channel3_IRQn = 59, /*!< DMA1 channel3 global interrupt */ - DMA1_Channel4_IRQn = 60, /*!< DMA1 channel3 global interrupt */ - ENET_IRQn = 61, /*!< ENET global interrupt */ - ENET_WKUP_IRQn = 62, /*!< ENET Wakeup interrupt */ - CAN1_TX_IRQn = 63, /*!< CAN1 TX interrupt */ - CAN1_RX0_IRQn = 64, /*!< CAN1 RX0 interrupt */ - CAN1_RX1_IRQn = 65, /*!< CAN1 RX1 interrupt */ - CAN1_EWMC_IRQn = 66, /*!< CAN1 EWMC interrupt */ - USBFS_IRQn = 67, /*!< USBFS global interrupt */ -#endif /* GD32F10X_CL */ - -} IRQn_Type; - -/* includes */ -#include "core_cm3.h" -#include "system_gd32f10x.h" -#include - -/* enum definitions */ -typedef enum {DISABLE = 0, ENABLE = !DISABLE} EventStatus, ControlStatus; -typedef enum {FALSE = 0, TRUE = !FALSE} bool; -typedef enum {RESET = 0, SET = !RESET} FlagStatus; -typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrStatus; - -/* bit operations */ -#define REG32(addr) (*(volatile uint32_t *)(uint32_t)(addr)) -#define REG16(addr) (*(volatile uint16_t *)(uint32_t)(addr)) -#define REG8(addr) (*(volatile uint8_t *)(uint32_t)(addr)) -#define BIT(x) ((uint32_t)((uint32_t)0x01U<<(x))) -#define BITS(start, end) ((0xFFFFFFFFUL << (start)) & (0xFFFFFFFFUL >> (31U - (uint32_t)(end)))) -#define GET_BITS(regval, start, end) (((regval) & BITS((start),(end))) >> (start)) - -/* main flash and SRAM memory map */ -#define FLASH_BASE ((uint32_t)0x08000000U) /*!< main FLASH base address */ -#define SRAM_BASE ((uint32_t)0x20000000U) /*!< SRAM0 base address */ -#define OB_BASE ((uint32_t)0x1FFFF800U) /*!< OB base address */ -#define DBG_BASE ((uint32_t)0xE0042000U) /*!< DBG base address */ -#define EXMC_BASE ((uint32_t)0xA0000000U) /*!< EXMC register base address */ - -/* peripheral memory map */ -#define APB1_BUS_BASE ((uint32_t)0x40000000U) /*!< apb1 base address */ -#define APB2_BUS_BASE ((uint32_t)0x40010000U) /*!< apb2 base address */ -#define AHB1_BUS_BASE ((uint32_t)0x40018000U) /*!< ahb1 base address */ -#define AHB3_BUS_BASE ((uint32_t)0x60000000U) /*!< ahb3 base address */ - -/* advanced peripheral bus 1 memory map */ -#define TIMER_BASE (APB1_BUS_BASE + 0x00000000U) /*!< TIMER base address */ -#define RTC_BASE (APB1_BUS_BASE + 0x00002800U) /*!< RTC base address */ -#define WWDGT_BASE (APB1_BUS_BASE + 0x00002C00U) /*!< WWDGT base address */ -#define FWDGT_BASE (APB1_BUS_BASE + 0x00003000U) /*!< FWDGT base address */ -#define SPI_BASE (APB1_BUS_BASE + 0x00003800U) /*!< SPI base address */ -#define USART_BASE (APB1_BUS_BASE + 0x00004400U) /*!< USART base address */ -#define I2C_BASE (APB1_BUS_BASE + 0x00005400U) /*!< I2C base address */ -#define USBD_BASE (APB1_BUS_BASE + 0x00005C00U) /*!< USBD base address */ -#define USBD_RAM_BASE (APB1_BUS_BASE + 0x00006000U) /*!< USBD RAM base address */ -#define CAN_BASE (APB1_BUS_BASE + 0x00006400U) /*!< CAN base address */ -#define BKP_BASE (APB1_BUS_BASE + 0x00006C00U) /*!< BKP base address */ -#define PMU_BASE (APB1_BUS_BASE + 0x00007000U) /*!< PMU base address */ -#define DAC_BASE (APB1_BUS_BASE + 0x00007400U) /*!< DAC base address */ - -/* advanced peripheral bus 2 memory map */ -#define AFIO_BASE (APB2_BUS_BASE + 0x00000000U) /*!< AFIO base address */ -#define EXTI_BASE (APB2_BUS_BASE + 0x00000400U) /*!< EXTI base address */ -#define GPIO_BASE (APB2_BUS_BASE + 0x00000800U) /*!< GPIO base address */ -#define ADC_BASE (APB2_BUS_BASE + 0x00002400U) /*!< ADC base address */ - -/* advanced high performance bus 1 memory map */ -#define SDIO_BASE (AHB1_BUS_BASE + 0x00000000U) /*!< SDIO base address */ -#define DMA_BASE (AHB1_BUS_BASE + 0x00008000U) /*!< DMA base address */ -#define RCU_BASE (AHB1_BUS_BASE + 0x00009000U) /*!< RCU base address */ -#define FMC_BASE (AHB1_BUS_BASE + 0x0000A000U) /*!< FMC base address */ -#define CRC_BASE (AHB1_BUS_BASE + 0x0000B000U) /*!< CRC base address */ -#define ENET_BASE (AHB1_BUS_BASE + 0x00010000U) /*!< ENET base address */ -#define USBFS_BASE (AHB1_BUS_BASE + 0x0FFE8000U) /*!< USBFS base address */ - -/* define marco USE_STDPERIPH_DRIVER */ -#if !defined USE_STDPERIPH_DRIVER -#define USE_STDPERIPH_DRIVER -#endif -#ifdef USE_STDPERIPH_DRIVER -#include "gd32f10x_libopt.h" -#endif /* USE_STDPERIPH_DRIVER */ - -#ifdef cplusplus -} -#endif -#endif diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Include/system_gd32f10x.h b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Include/system_gd32f10x.h deleted file mode 100644 index d3283fa..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Include/system_gd32f10x.h +++ /dev/null @@ -1,60 +0,0 @@ -/*! - \file system_gd32f10x.h - \brief CMSIS Cortex-M3 Device Peripheral Access Layer Header File for - GD32F10x Device Series -*/ - -/* - Copyright (c) 2012 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: - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -/* This file refers the CMSIS standard, some adjustments are made according to GigaDevice chips */ - -#ifndef SYSTEM_GD32F10X_H -#define SYSTEM_GD32F10X_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/* system clock frequency (core clock) */ -extern uint32_t SystemCoreClock; - -/* function declarations */ -/* initialize the system and update the SystemCoreClock variable */ -extern void SystemInit(void); -/* update the SystemCoreClock with current core clock retrieved from cpu registers */ -extern void SystemCoreClockUpdate(void); - -#ifdef __cplusplus -} -#endif - -#endif /* SYSTEM_GD32F10X_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_cl.s b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_cl.s deleted file mode 100644 index f59acfa..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_cl.s +++ /dev/null @@ -1,390 +0,0 @@ -;/*! -; \file startup_gd32f10x_cl.s -; \brief start up file -; -; \version 2014-12-26, V1.0.0, firmware for GD32F10x -; \version 2017-06-20, V2.0.0, firmware for GD32F10x -; \version 2018-07-31, V2.1.0, firmware for GD32F10x -;*/ -; -;/* -; Copyright (c) 2018, GigaDevice Semiconductor Inc. -; -; All rights reserved. -; -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN = 3 -Stack_Mem SPACE Stack_Size -__initial_sp - - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000200 - - AREA HEAP, NOINIT, READWRITE, ALIGN = 3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - - PRESERVE8 - THUMB - -; /* reset Vector Mapped to at Address 0 */ - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - -; /* external interrupts handler */ - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper Interrupt - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_IRQHandler ; 21:RCU - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel 0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel 1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel 2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel 3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel 4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel 5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel 6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD CAN0_TX_IRQHandler ; 35:CAN0 TX - DCD CAN0_RX0_IRQHandler ; 36:CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI Line 5 to EXTI Line 9 - DCD TIMER0_BRK_IRQHandler ; 40:TIMER0 Break - DCD TIMER0_UP_IRQHandler ; 41:TIMER0 Update - DCD TIMER0_TRG_CMT_IRQHandler ; 42:TIMER0 Trigger and Commutation - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI Line 10 to EXTI Line 15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm through EXTI Line - DCD USBFS_WKUP_IRQHandler ; 58:USBFS WakeUp from suspend through EXTI Line - DCD TIMER7_BRK_IRQHandler ; 59:TIMER7 Break Interrupt - DCD TIMER7_UP_IRQHandler ; 60:TIMER7 Update Interrupt - DCD TIMER7_TRG_CMT_IRQHandler ; 61:TIMER7 Trigger - DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare - DCD 0 ; Reserved - DCD EXMC_IRQHandler ; 64:EXMC - DCD 0 ; Reserved - DCD TIMER4_IRQHandler ; 66:TIMER4 - DCD SPI2_IRQHandler ; 67:SPI2 - DCD UART3_IRQHandler ; 68:UART3 - DCD UART4_IRQHandler ; 69:UART4 - DCD TIMER5_IRQHandler ; 70:TIMER5 - DCD TIMER6_IRQHandler ; 71:TIMER6 - DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 - DCD DMA1_Channel3_IRQHandler ; 75:DMA1 Channel3 - DCD DMA1_Channel4_IRQHandler ; 76:DMA1 Channel4 - DCD ENET_IRQHandler ; 77:Ethernet - DCD ENET_WKUP_IRQHandler ; 78:Ethernet Wakeup through EXTI line - DCD CAN1_TX_IRQHandler ; 79:CAN1 TX - DCD CAN1_RX0_IRQHandler ; 80:CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; 81:CAN1 RX1 - DCD CAN1_EWMC_IRQHandler ; 82:CAN1 EWMC - DCD USBFS_IRQHandler ; 83:USBFS - -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -;/* reset Handler */ -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT __main - IMPORT SystemInit - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -;/* dummy Exception Handlers */ -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP - -HardFault_Handler PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP - -MemManage_Handler PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP - -BusFault_Handler PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP - -UsageFault_Handler PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP - -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP - -DebugMon_Handler PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP - -PendSV_Handler PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP - -SysTick_Handler PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC -; /* external interrupts handler */ - EXPORT WWDGT_IRQHandler [WEAK] - EXPORT LVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FMC_IRQHandler [WEAK] - EXPORT RCU_IRQHandler [WEAK] - EXPORT EXTI0_IRQHandler [WEAK] - EXPORT EXTI1_IRQHandler [WEAK] - EXPORT EXTI2_IRQHandler [WEAK] - EXPORT EXTI3_IRQHandler [WEAK] - EXPORT EXTI4_IRQHandler [WEAK] - EXPORT DMA0_Channel0_IRQHandler [WEAK] - EXPORT DMA0_Channel1_IRQHandler [WEAK] - EXPORT DMA0_Channel2_IRQHandler [WEAK] - EXPORT DMA0_Channel3_IRQHandler [WEAK] - EXPORT DMA0_Channel4_IRQHandler [WEAK] - EXPORT DMA0_Channel5_IRQHandler [WEAK] - EXPORT DMA0_Channel6_IRQHandler [WEAK] - EXPORT ADC0_1_IRQHandler [WEAK] - EXPORT CAN0_TX_IRQHandler [WEAK] - EXPORT CAN0_RX0_IRQHandler [WEAK] - EXPORT CAN0_RX1_IRQHandler [WEAK] - EXPORT CAN0_EWMC_IRQHandler [WEAK] - EXPORT EXTI5_9_IRQHandler [WEAK] - EXPORT TIMER0_BRK_IRQHandler [WEAK] - EXPORT TIMER0_UP_IRQHandler [WEAK] - EXPORT TIMER0_TRG_CMT_IRQHandler [WEAK] - EXPORT TIMER0_Channel_IRQHandler [WEAK] - EXPORT TIMER1_IRQHandler [WEAK] - EXPORT TIMER2_IRQHandler [WEAK] - EXPORT TIMER3_IRQHandler [WEAK] - EXPORT I2C0_EV_IRQHandler [WEAK] - EXPORT I2C0_ER_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT SPI0_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT USART0_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT EXTI10_15_IRQHandler [WEAK] - EXPORT RTC_Alarm_IRQHandler [WEAK] - EXPORT USBFS_WKUP_IRQHandler [WEAK] - EXPORT TIMER7_BRK_IRQHandler [WEAK] - EXPORT TIMER7_UP_IRQHandler [WEAK] - EXPORT TIMER7_TRG_CMT_IRQHandler [WEAK] - EXPORT TIMER7_Channel_IRQHandler [WEAK] - EXPORT EXMC_IRQHandler [WEAK] - EXPORT TIMER4_IRQHandler [WEAK] - EXPORT SPI2_IRQHandler [WEAK] - EXPORT UART3_IRQHandler [WEAK] - EXPORT UART4_IRQHandler [WEAK] - EXPORT TIMER5_IRQHandler [WEAK] - EXPORT TIMER6_IRQHandler [WEAK] - EXPORT DMA1_Channel0_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_IRQHandler [WEAK] - EXPORT DMA1_Channel4_IRQHandler [WEAK] - EXPORT ENET_IRQHandler [WEAK] - EXPORT ENET_WKUP_IRQHandler [WEAK] - EXPORT CAN1_TX_IRQHandler [WEAK] - EXPORT CAN1_RX0_IRQHandler [WEAK] - EXPORT CAN1_RX1_IRQHandler [WEAK] - EXPORT CAN1_EWMC_IRQHandler [WEAK] - EXPORT USBFS_IRQHandler [WEAK] - - -;/* external interrupts handler */ -WWDGT_IRQHandler -LVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FMC_IRQHandler -RCU_IRQHandler -EXTI0_IRQHandler -EXTI1_IRQHandler -EXTI2_IRQHandler -EXTI3_IRQHandler -EXTI4_IRQHandler -DMA0_Channel0_IRQHandler -DMA0_Channel1_IRQHandler -DMA0_Channel2_IRQHandler -DMA0_Channel3_IRQHandler -DMA0_Channel4_IRQHandler -DMA0_Channel5_IRQHandler -DMA0_Channel6_IRQHandler -ADC0_1_IRQHandler -CAN0_TX_IRQHandler -CAN0_RX0_IRQHandler -CAN0_RX1_IRQHandler -CAN0_EWMC_IRQHandler -EXTI5_9_IRQHandler -TIMER0_BRK_IRQHandler -TIMER0_UP_IRQHandler -TIMER0_TRG_CMT_IRQHandler -TIMER0_Channel_IRQHandler -TIMER1_IRQHandler -TIMER2_IRQHandler -TIMER3_IRQHandler -I2C0_EV_IRQHandler -I2C0_ER_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -SPI0_IRQHandler -SPI1_IRQHandler -USART0_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -EXTI10_15_IRQHandler -RTC_Alarm_IRQHandler -USBFS_WKUP_IRQHandler -TIMER7_BRK_IRQHandler -TIMER7_UP_IRQHandler -TIMER7_TRG_CMT_IRQHandler -TIMER7_Channel_IRQHandler -EXMC_IRQHandler -TIMER4_IRQHandler -SPI2_IRQHandler -UART3_IRQHandler -UART4_IRQHandler -TIMER5_IRQHandler -TIMER6_IRQHandler -DMA1_Channel0_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_IRQHandler -DMA1_Channel4_IRQHandler -ENET_IRQHandler -ENET_WKUP_IRQHandler -CAN1_TX_IRQHandler -CAN1_RX0_IRQHandler -CAN1_RX1_IRQHandler -CAN1_EWMC_IRQHandler -USBFS_IRQHandler - - - B . - ENDP - - ALIGN - -; user Initial Stack & Heap - - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap PROC - LDR R0, = Heap_Mem - LDR R1, =(Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - ENDP - - ALIGN - - ENDIF - - END diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_hd.s b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_hd.s deleted file mode 100644 index 69ef130..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_hd.s +++ /dev/null @@ -1,371 +0,0 @@ -;/*! -; \file startup_gd32f10x_hd.s -; \brief start up file -; -; \version 2014-12-26, V1.0.0, firmware for GD32F10x -; \version 2017-06-20, V2.0.0, firmware for GD32F10x -; \version 2018-07-31, V2.1.0, firmware for GD32F10x -;*/ -; -;/* -; Copyright (c) 2018, GigaDevice Semiconductor Inc. -; -; All rights reserved. -; -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN = 3 -Stack_Mem SPACE Stack_Size -__initial_sp - - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000200 - - AREA HEAP, NOINIT, READWRITE, ALIGN = 3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - - PRESERVE8 - THUMB - -; /* reset Vector Mapped to at Address 0 */ - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - -; /* external interrupts handler */ - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper Interrupt - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_IRQHandler ; 21:RCU - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel 0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel 1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel 2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel 3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel 4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel 5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel 6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; 35:USBD and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; 36:USBD and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI Line 5 to EXTI Line 9 - DCD TIMER0_BRK_IRQHandler ; 40:TIMER0 Break - DCD TIMER0_UP_IRQHandler ; 41:TIMER0 Update - DCD TIMER0_TRG_CMT_IRQHandler ; 42:TIMER0 Trigger and Commutation - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI Line 10 to EXTI Line 15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm through EXTI Line - DCD USBD_WKUP_IRQHandler ; 58:USBD WakeUp from suspend through EXTI Line - DCD TIMER7_BRK_IRQHandler ; 59:TIMER7 Break Interrupt - DCD TIMER7_UP_IRQHandler ; 60:TIMER7 Update Interrupt - DCD TIMER7_TRG_CMT_IRQHandler ; 61:TIMER7 Trigger and Commutation Interrupt - DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare - DCD ADC2_IRQHandler ; 63:ADC2 - DCD EXMC_IRQHandler ; 64:EXMC - DCD SDIO_IRQHandler ; 65:SDIO - DCD TIMER4_IRQHandler ; 66:TIMER4 - DCD SPI2_IRQHandler ; 67:SPI2 - DCD UART3_IRQHandler ; 68:UART3 - DCD UART4_IRQHandler ; 69:UART4 - DCD TIMER5_IRQHandler ; 70:TIMER5 - DCD TIMER6_IRQHandler ; 71:TIMER6 - DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 - DCD DMA1_Channel3_4_IRQHandler ; 75:DMA1 Channel3 and Channel4 - -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -;/* reset Handler */ -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT __main - IMPORT SystemInit - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -;/* dummy Exception Handlers */ -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP - -HardFault_Handler PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP - -MemManage_Handler PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP - -BusFault_Handler PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP - -UsageFault_Handler PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP - -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP - -DebugMon_Handler PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP - -PendSV_Handler PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP - -SysTick_Handler PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC -; /* external interrupts handler */ - EXPORT WWDGT_IRQHandler [WEAK] - EXPORT LVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FMC_IRQHandler [WEAK] - EXPORT RCU_IRQHandler [WEAK] - EXPORT EXTI0_IRQHandler [WEAK] - EXPORT EXTI1_IRQHandler [WEAK] - EXPORT EXTI2_IRQHandler [WEAK] - EXPORT EXTI3_IRQHandler [WEAK] - EXPORT EXTI4_IRQHandler [WEAK] - EXPORT DMA0_Channel0_IRQHandler [WEAK] - EXPORT DMA0_Channel1_IRQHandler [WEAK] - EXPORT DMA0_Channel2_IRQHandler [WEAK] - EXPORT DMA0_Channel3_IRQHandler [WEAK] - EXPORT DMA0_Channel4_IRQHandler [WEAK] - EXPORT DMA0_Channel5_IRQHandler [WEAK] - EXPORT DMA0_Channel6_IRQHandler [WEAK] - EXPORT ADC0_1_IRQHandler [WEAK] - EXPORT USBD_HP_CAN0_TX_IRQHandler [WEAK] - EXPORT USBD_LP_CAN0_RX0_IRQHandler [WEAK] - EXPORT CAN0_RX1_IRQHandler [WEAK] - EXPORT CAN0_EWMC_IRQHandler [WEAK] - EXPORT EXTI5_9_IRQHandler [WEAK] - EXPORT TIMER0_BRK_IRQHandler [WEAK] - EXPORT TIMER0_UP_IRQHandler [WEAK] - EXPORT TIMER0_TRG_CMT_IRQHandler [WEAK] - EXPORT TIMER0_Channel_IRQHandler [WEAK] - EXPORT TIMER1_IRQHandler [WEAK] - EXPORT TIMER2_IRQHandler [WEAK] - EXPORT TIMER3_IRQHandler [WEAK] - EXPORT I2C0_EV_IRQHandler [WEAK] - EXPORT I2C0_ER_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT SPI0_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT USART0_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT EXTI10_15_IRQHandler [WEAK] - EXPORT RTC_Alarm_IRQHandler [WEAK] - EXPORT USBD_WKUP_IRQHandler [WEAK] - EXPORT TIMER7_BRK_IRQHandler [WEAK] - EXPORT TIMER7_UP_IRQHandler [WEAK] - EXPORT TIMER7_TRG_CMT_IRQHandler [WEAK] - EXPORT TIMER7_Channel_IRQHandler [WEAK] - EXPORT ADC2_IRQHandler [WEAK] - EXPORT EXMC_IRQHandler [WEAK] - EXPORT SDIO_IRQHandler [WEAK] - EXPORT TIMER4_IRQHandler [WEAK] - EXPORT SPI2_IRQHandler [WEAK] - EXPORT UART3_IRQHandler [WEAK] - EXPORT UART4_IRQHandler [WEAK] - EXPORT TIMER5_IRQHandler [WEAK] - EXPORT TIMER6_IRQHandler [WEAK] - EXPORT DMA1_Channel0_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_4_IRQHandler [WEAK] - - -;/* external interrupts handler */ -WWDGT_IRQHandler -LVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FMC_IRQHandler -RCU_IRQHandler -EXTI0_IRQHandler -EXTI1_IRQHandler -EXTI2_IRQHandler -EXTI3_IRQHandler -EXTI4_IRQHandler -DMA0_Channel0_IRQHandler -DMA0_Channel1_IRQHandler -DMA0_Channel2_IRQHandler -DMA0_Channel3_IRQHandler -DMA0_Channel4_IRQHandler -DMA0_Channel5_IRQHandler -DMA0_Channel6_IRQHandler -ADC0_1_IRQHandler -USBD_HP_CAN0_TX_IRQHandler -USBD_LP_CAN0_RX0_IRQHandler -CAN0_RX1_IRQHandler -CAN0_EWMC_IRQHandler -EXTI5_9_IRQHandler -TIMER0_BRK_IRQHandler -TIMER0_UP_IRQHandler -TIMER0_TRG_CMT_IRQHandler -TIMER0_Channel_IRQHandler -TIMER1_IRQHandler -TIMER2_IRQHandler -TIMER3_IRQHandler -I2C0_EV_IRQHandler -I2C0_ER_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -SPI0_IRQHandler -SPI1_IRQHandler -USART0_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -EXTI10_15_IRQHandler -RTC_Alarm_IRQHandler -USBD_WKUP_IRQHandler -TIMER7_BRK_IRQHandler -TIMER7_UP_IRQHandler -TIMER7_TRG_CMT_IRQHandler -TIMER7_Channel_IRQHandler -ADC2_IRQHandler -EXMC_IRQHandler -SDIO_IRQHandler -TIMER4_IRQHandler -SPI2_IRQHandler -UART3_IRQHandler -UART4_IRQHandler -TIMER5_IRQHandler -TIMER6_IRQHandler -DMA1_Channel0_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_4_IRQHandler - - - - B . - ENDP - - ALIGN - -; user Initial Stack & Heap - - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap PROC - LDR R0, = Heap_Mem - LDR R1, =(Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - ENDP - - ALIGN - - ENDIF - - END diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_md.s b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_md.s deleted file mode 100644 index 2b2f363..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_md.s +++ /dev/null @@ -1,328 +0,0 @@ -;/*! -; \file startup_gd32f10x_md.s -; \brief start up file -; -; \version 2014-12-26, V1.0.0, firmware for GD32F10x -; \version 2017-06-20, V2.0.0, firmware for GD32F10x -; \version 2018-07-31, V2.1.0, firmware for GD32F10x -;*/ -; -;/* -; Copyright (c) 2018, GigaDevice Semiconductor Inc. -; -; All rights reserved. -; -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN = 3 -Stack_Mem SPACE Stack_Size -__initial_sp - - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000200 - - AREA HEAP, NOINIT, READWRITE, ALIGN = 3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - - PRESERVE8 - THUMB - -; /* reset Vector Mapped to at Address 0 */ - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - -; /* external interrupts handler */ - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper Interrupt - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_IRQHandler ; 21:RCU - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel 0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel 1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel 2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel 3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel 4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel 5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel 6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; 35:USBD and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; 36:USBD and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI Line 5 to EXTI Line 9 - DCD TIMER0_BRK_IRQHandler ; 40:TIMER0 Break - DCD TIMER0_UP_IRQHandler ; 41:TIMER0 Update - DCD TIMER0_TRG_CMT_IRQHandler ; 42:TIMER0 Trigger - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI Line 10 to EXTI Line 15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm through EXTI Line - DCD USBD_WKUP_IRQHandler ; 58:USBD WakeUp from suspend through EXTI Line - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD EXMC_IRQHandler ; 64:EXMC - -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -;/* reset Handler */ -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT __main - IMPORT SystemInit - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -;/* dummy Exception Handlers */ -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP - -HardFault_Handler PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP - -MemManage_Handler PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP - -BusFault_Handler PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP - -UsageFault_Handler PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP - -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP - -DebugMon_Handler PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP - -PendSV_Handler PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP - -SysTick_Handler PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC -; /* external interrupts handler */ - EXPORT WWDGT_IRQHandler [WEAK] - EXPORT LVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FMC_IRQHandler [WEAK] - EXPORT RCU_IRQHandler [WEAK] - EXPORT EXTI0_IRQHandler [WEAK] - EXPORT EXTI1_IRQHandler [WEAK] - EXPORT EXTI2_IRQHandler [WEAK] - EXPORT EXTI3_IRQHandler [WEAK] - EXPORT EXTI4_IRQHandler [WEAK] - EXPORT DMA0_Channel0_IRQHandler [WEAK] - EXPORT DMA0_Channel1_IRQHandler [WEAK] - EXPORT DMA0_Channel2_IRQHandler [WEAK] - EXPORT DMA0_Channel3_IRQHandler [WEAK] - EXPORT DMA0_Channel4_IRQHandler [WEAK] - EXPORT DMA0_Channel5_IRQHandler [WEAK] - EXPORT DMA0_Channel6_IRQHandler [WEAK] - EXPORT ADC0_1_IRQHandler [WEAK] - EXPORT USBD_HP_CAN0_TX_IRQHandler [WEAK] - EXPORT USBD_LP_CAN0_RX0_IRQHandler [WEAK] - EXPORT CAN0_RX1_IRQHandler [WEAK] - EXPORT CAN0_EWMC_IRQHandler [WEAK] - EXPORT EXTI5_9_IRQHandler [WEAK] - EXPORT TIMER0_BRK_IRQHandler [WEAK] - EXPORT TIMER0_UP_IRQHandler [WEAK] - EXPORT TIMER0_TRG_CMT_IRQHandler [WEAK] - EXPORT TIMER0_Channel_IRQHandler [WEAK] - EXPORT TIMER1_IRQHandler [WEAK] - EXPORT TIMER2_IRQHandler [WEAK] - EXPORT TIMER3_IRQHandler [WEAK] - EXPORT I2C0_EV_IRQHandler [WEAK] - EXPORT I2C0_ER_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT SPI0_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT USART0_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT EXTI10_15_IRQHandler [WEAK] - EXPORT RTC_Alarm_IRQHandler [WEAK] - EXPORT USBD_WKUP_IRQHandler [WEAK] - EXPORT EXMC_IRQHandler [WEAK] - - -;/* external interrupts handler */ -WWDGT_IRQHandler -LVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FMC_IRQHandler -RCU_IRQHandler -EXTI0_IRQHandler -EXTI1_IRQHandler -EXTI2_IRQHandler -EXTI3_IRQHandler -EXTI4_IRQHandler -DMA0_Channel0_IRQHandler -DMA0_Channel1_IRQHandler -DMA0_Channel2_IRQHandler -DMA0_Channel3_IRQHandler -DMA0_Channel4_IRQHandler -DMA0_Channel5_IRQHandler -DMA0_Channel6_IRQHandler -ADC0_1_IRQHandler -USBD_HP_CAN0_TX_IRQHandler -USBD_LP_CAN0_RX0_IRQHandler -CAN0_RX1_IRQHandler -CAN0_EWMC_IRQHandler -EXTI5_9_IRQHandler -TIMER0_BRK_IRQHandler -TIMER0_UP_IRQHandler -TIMER0_TRG_CMT_IRQHandler -TIMER0_Channel_IRQHandler -TIMER1_IRQHandler -TIMER2_IRQHandler -TIMER3_IRQHandler -I2C0_EV_IRQHandler -I2C0_ER_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -SPI0_IRQHandler -SPI1_IRQHandler -USART0_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -EXTI10_15_IRQHandler -RTC_Alarm_IRQHandler -USBD_WKUP_IRQHandler -EXMC_IRQHandler - - - - B . - ENDP - - ALIGN - -; user Initial Stack & Heap - - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap PROC - LDR R0, = Heap_Mem - LDR R1, =(Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - ENDP - - ALIGN - - ENDIF - - END diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_xd.s b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_xd.s deleted file mode 100644 index 645dc24..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_xd.s +++ /dev/null @@ -1,371 +0,0 @@ -;/*! -; \file startup_gd32f10x_xd.s -; \brief start up file -; -; \version 2014-12-26, V1.0.0, firmware for GD32F10x -; \version 2017-06-20, V2.0.0, firmware for GD32F10x -; \version 2018-07-31, V2.1.0, firmware for GD32F10x -;*/ -; -;/* -; Copyright (c) 2018, GigaDevice Semiconductor Inc. -; -; All rights reserved. -; -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN = 3 -Stack_Mem SPACE Stack_Size -__initial_sp - - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000200 - - AREA HEAP, NOINIT, READWRITE, ALIGN = 3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - - PRESERVE8 - THUMB - -; /* reset Vector Mapped to at Address 0 */ - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - -; /* external interrupts handler */ - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper Interrupt - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_IRQHandler ; 21:RCU - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel 0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel 1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel 2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel 3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel 4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel 5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel 6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; 35:USBD and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; 36:USBD and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI Line 5 to EXTI Line 9 - DCD TIMER0_BRK_TIMER8_IRQHandler ; 40:TIMER0 Break and TIMER8 global - DCD TIMER0_UP_TIMER9_IRQHandler ; 41:TIMER0 Update and TIMER9 global - DCD TIMER0_TRG_CMT_TIMER10_IRQHandler ; 42:TIMER0 Trigger and Commutation and TIMER10 global - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI Line 10 to EXTI Line 15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm through EXTI Line - DCD USBD_WKUP_IRQHandler ; 58:USBD WakeUp from suspend through EXTI Line - DCD TIMER7_BRK_TIMER11_IRQHandler ; 59:TIMER7 Break Interrupt and TIMER11 global - DCD TIMER7_UP_TIMER12_IRQHandler ; 60:TIMER7 Update Interrupt and TIMER12 global - DCD TIMER7_TRG_CMT_TIMER13_IRQHandler ; 61:TIMER7 Trigger and Commutation Interrupt and TIMER13 global - DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare - DCD ADC2_IRQHandler ; 63:ADC2 - DCD EXMC_IRQHandler ; 64:EXMC - DCD SDIO_IRQHandler ; 65:SDIO - DCD TIMER4_IRQHandler ; 66:TIMER4 - DCD SPI2_IRQHandler ; 67:SPI2 - DCD UART3_IRQHandler ; 68:UART3 - DCD UART4_IRQHandler ; 69:UART4 - DCD TIMER5_IRQHandler ; 70:TIMER5 - DCD TIMER6_IRQHandler ; 71:TIMER6 - DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 - DCD DMA1_Channel3_4_IRQHandler ; 75:DMA1 Channel3 and Channel4 - -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -;/* reset Handler */ -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT __main - IMPORT SystemInit - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -;/* dummy Exception Handlers */ -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP - -HardFault_Handler PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP - -MemManage_Handler PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP - -BusFault_Handler PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP - -UsageFault_Handler PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP - -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP - -DebugMon_Handler PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP - -PendSV_Handler PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP - -SysTick_Handler PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC -; /* external interrupts handler */ - EXPORT WWDGT_IRQHandler [WEAK] - EXPORT LVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FMC_IRQHandler [WEAK] - EXPORT RCU_IRQHandler [WEAK] - EXPORT EXTI0_IRQHandler [WEAK] - EXPORT EXTI1_IRQHandler [WEAK] - EXPORT EXTI2_IRQHandler [WEAK] - EXPORT EXTI3_IRQHandler [WEAK] - EXPORT EXTI4_IRQHandler [WEAK] - EXPORT DMA0_Channel0_IRQHandler [WEAK] - EXPORT DMA0_Channel1_IRQHandler [WEAK] - EXPORT DMA0_Channel2_IRQHandler [WEAK] - EXPORT DMA0_Channel3_IRQHandler [WEAK] - EXPORT DMA0_Channel4_IRQHandler [WEAK] - EXPORT DMA0_Channel5_IRQHandler [WEAK] - EXPORT DMA0_Channel6_IRQHandler [WEAK] - EXPORT ADC0_1_IRQHandler [WEAK] - EXPORT USBD_HP_CAN0_TX_IRQHandler [WEAK] - EXPORT USBD_LP_CAN0_RX0_IRQHandler [WEAK] - EXPORT CAN0_RX1_IRQHandler [WEAK] - EXPORT CAN0_EWMC_IRQHandler [WEAK] - EXPORT EXTI5_9_IRQHandler [WEAK] - EXPORT TIMER0_BRK_TIMER8_IRQHandler [WEAK] - EXPORT TIMER0_UP_TIMER9_IRQHandler [WEAK] - EXPORT TIMER0_TRG_CMT_TIMER10_IRQHandler [WEAK] - EXPORT TIMER0_Channel_IRQHandler [WEAK] - EXPORT TIMER1_IRQHandler [WEAK] - EXPORT TIMER2_IRQHandler [WEAK] - EXPORT TIMER3_IRQHandler [WEAK] - EXPORT I2C0_EV_IRQHandler [WEAK] - EXPORT I2C0_ER_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT SPI0_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT USART0_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT EXTI10_15_IRQHandler [WEAK] - EXPORT RTC_Alarm_IRQHandler [WEAK] - EXPORT USBD_WKUP_IRQHandler [WEAK] - EXPORT TIMER7_BRK_TIMER11_IRQHandler [WEAK] - EXPORT TIMER7_UP_TIMER12_IRQHandler [WEAK] - EXPORT TIMER7_TRG_CMT_TIMER13_IRQHandler [WEAK] - EXPORT TIMER7_Channel_IRQHandler [WEAK] - EXPORT ADC2_IRQHandler [WEAK] - EXPORT EXMC_IRQHandler [WEAK] - EXPORT SDIO_IRQHandler [WEAK] - EXPORT TIMER4_IRQHandler [WEAK] - EXPORT SPI2_IRQHandler [WEAK] - EXPORT UART3_IRQHandler [WEAK] - EXPORT UART4_IRQHandler [WEAK] - EXPORT TIMER5_IRQHandler [WEAK] - EXPORT TIMER6_IRQHandler [WEAK] - EXPORT DMA1_Channel0_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_4_IRQHandler [WEAK] - - -;/* external interrupts handler */ -WWDGT_IRQHandler -LVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FMC_IRQHandler -RCU_IRQHandler -EXTI0_IRQHandler -EXTI1_IRQHandler -EXTI2_IRQHandler -EXTI3_IRQHandler -EXTI4_IRQHandler -DMA0_Channel0_IRQHandler -DMA0_Channel1_IRQHandler -DMA0_Channel2_IRQHandler -DMA0_Channel3_IRQHandler -DMA0_Channel4_IRQHandler -DMA0_Channel5_IRQHandler -DMA0_Channel6_IRQHandler -ADC0_1_IRQHandler -USBD_HP_CAN0_TX_IRQHandler -USBD_LP_CAN0_RX0_IRQHandler -CAN0_RX1_IRQHandler -CAN0_EWMC_IRQHandler -EXTI5_9_IRQHandler -TIMER0_BRK_TIMER8_IRQHandler -TIMER0_UP_TIMER9_IRQHandler -TIMER0_TRG_CMT_TIMER10_IRQHandler -TIMER0_Channel_IRQHandler -TIMER1_IRQHandler -TIMER2_IRQHandler -TIMER3_IRQHandler -I2C0_EV_IRQHandler -I2C0_ER_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -SPI0_IRQHandler -SPI1_IRQHandler -USART0_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -EXTI10_15_IRQHandler -RTC_Alarm_IRQHandler -USBD_WKUP_IRQHandler -TIMER7_BRK_TIMER11_IRQHandler -TIMER7_UP_TIMER12_IRQHandler -TIMER7_TRG_CMT_TIMER13_IRQHandler -TIMER7_Channel_IRQHandler -ADC2_IRQHandler -EXMC_IRQHandler -SDIO_IRQHandler -TIMER4_IRQHandler -SPI2_IRQHandler -UART3_IRQHandler -UART4_IRQHandler -TIMER5_IRQHandler -TIMER6_IRQHandler -DMA1_Channel0_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_4_IRQHandler - - - - B . - ENDP - - ALIGN - -; user Initial Stack & Heap - - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap PROC - LDR R0, = Heap_Mem - LDR R1, =(Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - ENDP - - ALIGN - - ENDIF - - END diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_cl.s b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_cl.s deleted file mode 100644 index 76480fb..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_cl.s +++ /dev/null @@ -1,528 +0,0 @@ -;/*! -; \file startup_gd32f10x_cl.s -; \brief start up file -; -; \version 2014-12-26, V1.0.0, firmware for GD32F10x -; \version 2017-06-20, V2.0.0, firmware for GD32F10x -; \version 2018-07-31, V2.1.0, firmware for GD32F10x -; \version 2020-09-30, V2.2.0, firmware for GD32F10x -;*/ - -;/* - ;Copyright (c) 2020, GigaDevice Semiconductor Inc. - - ;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 the copyright holder nor the names of its contributors - ;may be used to endorse or promote products derived from this software without - ;specific prior written permission. - - ;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA -__vector_table - DCD sfe(CSTACK) ; top of stack - DCD Reset_Handler ; Reset Handler - - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDGT_IRQHandler ; Vector Number 16,Window Watchdog Timer - DCD LVD_IRQHandler ; Vector Number 17,LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; Vector Number 18,Tamper Interrupt - DCD RTC_IRQHandler ; Vector Number 19,RTC through EXTI Line - DCD FMC_IRQHandler ; Vector Number 20,FMC - DCD RCU_IRQHandler ; Vector Number 21,RCU - DCD EXTI0_IRQHandler ; Vector Number 22,EXTI Line 0 - DCD EXTI1_IRQHandler ; Vector Number 23,EXTI Line 1 - DCD EXTI2_IRQHandler ; Vector Number 24,EXTI Line 2 - DCD EXTI3_IRQHandler ; Vector Number 25,EXTI Line 3 - DCD EXTI4_IRQHandler ; Vector Number 26,EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; Vector Number 27,DMA0 Channel 0 - DCD DMA0_Channel1_IRQHandler ; Vector Number 28,DMA0 Channel 1 - DCD DMA0_Channel2_IRQHandler ; Vector Number 29,DMA0 Channel 2 - DCD DMA0_Channel3_IRQHandler ; Vector Number 30,DMA0 Channel 3 - DCD DMA0_Channel4_IRQHandler ; Vector Number 31,DMA0 Channel 4 - DCD DMA0_Channel5_IRQHandler ; Vector Number 32,DMA0 Channel 5 - DCD DMA0_Channel6_IRQHandler ; Vector Number 33,DMA0 Channel 6 - DCD ADC0_1_IRQHandler ; Vector Number 34,ADC0 and ADC1 - DCD CAN0_TX_IRQHandler ; Vector Number 35,CAN0 TX - DCD CAN0_RX0_IRQHandler ; Vector Number 36,CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; Vector Number 37,CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; Vector Number 38,CAN0 EWMC - DCD EXTI5_9_IRQHandler ; Vector Number 39,EXTI Line 5 to EXTI Line 9 - DCD TIMER0_BRK_IRQHandler ; Vector Number 40,TIMER0 Break - DCD TIMER0_UP_IRQHandler ; Vector Number 41,TIMER0 Update - DCD TIMER0_TRG_CMT_IRQHandler ; Vector Number 42,TIMER0 Trigger and Commutation - DCD TIMER0_Channel_IRQHandler ; Vector Number 43,TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; Vector Number 44,TIMER1 - DCD TIMER2_IRQHandler ; Vector Number 45,TIMER2 - DCD TIMER3_IRQHandler ; Vector Number 46,TIMER3 - DCD I2C0_EV_IRQHandler ; Vector Number 47,I2C0 Event - DCD I2C0_ER_IRQHandler ; Vector Number 48,I2C0 Error - DCD I2C1_EV_IRQHandler ; Vector Number 49,I2C1 Event - DCD I2C1_ER_IRQHandler ; Vector Number 50,I2C1 Error - DCD SPI0_IRQHandler ; Vector Number 51,SPI0 - DCD SPI1_IRQHandler ; Vector Number 52,SPI1 - DCD USART0_IRQHandler ; Vector Number 53,USART0 - DCD USART1_IRQHandler ; Vector Number 54,USART1 - DCD USART2_IRQHandler ; Vector Number 55,USART2 - DCD EXTI10_15_IRQHandler ; Vector Number 56,EXTI Line 10 to EXTI Line 15 - DCD RTC_Alarm_IRQHandler ; Vector Number 57,RTC Alarm through EXTI Line - DCD USBFS_WKUP_IRQHandler ; Vector Number 58,USBFS WakeUp from suspend through EXTI Line - DCD TIMER7_BRK_IRQHandler ; Vector Number 59,TIMER7 Break Interrupt - DCD TIMER7_UP_IRQHandler ; Vector Number 60,TIMER7 Update Interrupt - DCD TIMER7_TRG_CMT_IRQHandler ; Vector Number 61,TIMER7 Trigger and Commutation Interrupt - DCD TIMER7_Channel_IRQHandler ; Vector Number 62,TIMER7 Channel Capture Compare - DCD 0 ; Reserved - DCD EXMC_IRQHandler ; Vector Number 64,EXMC - DCD 0 ; Reserved - DCD TIMER4_IRQHandler ; Vector Number 66,TIMER4 - DCD SPI2_IRQHandler ; Vector Number 67,SPI2 - DCD UART3_IRQHandler ; Vector Number 68,UART3 - DCD UART4_IRQHandler ; Vector Number 69,UART4 - DCD TIMER5_IRQHandler ; Vector Number 70,TIMER5 - DCD TIMER6_IRQHandler ; Vector Number 71,TIMER6 - DCD DMA1_Channel0_IRQHandler ; Vector Number 72,DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; Vector Number 73,DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; Vector Number 74,DMA1 Channel2 - DCD DMA1_Channel3_IRQHandler ; Vector Number 75,DMA1 Channel3 - DCD DMA1_Channel4_IRQHandler ; Vector Number 76,DMA1 Channel4 - DCD ENET_IRQHandler ; Vector Number 77,Ethernet - DCD ENET_WKUP_IRQHandler ; Vector Number 78,Ethernet Wakeup through EXTI line - DCD CAN1_TX_IRQHandler ; Vector Number 79,CAN1 TX - DCD CAN1_RX0_IRQHandler ; Vector Number 80,CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; Vector Number 81,CAN1 RX1 - DCD CAN1_EWMC_IRQHandler ; Vector Number 82,CAN1 EWMC - DCD USBFS_IRQHandler ; Vector Number 83,USBFS -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:NOROOT:REORDER(2) -Reset_Handler - LDR R0, = SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDGT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -WWDGT_IRQHandler - B WWDGT_IRQHandler - - PUBWEAK LVD_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -LVD_IRQHandler - B LVD_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -FMC_IRQHandler - B FMC_IRQHandler - - PUBWEAK RCU_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RCU_IRQHandler - B RCU_IRQHandler - - PUBWEAK EXTI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI0_IRQHandler - B EXTI0_IRQHandler - - PUBWEAK EXTI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI1_IRQHandler - B EXTI1_IRQHandler - - PUBWEAK EXTI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI2_IRQHandler - B EXTI2_IRQHandler - - PUBWEAK EXTI3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI3_IRQHandler - B EXTI3_IRQHandler - - PUBWEAK EXTI4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI4_IRQHandler - B EXTI4_IRQHandler - - PUBWEAK DMA0_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel0_IRQHandler - B DMA0_Channel0_IRQHandler - - PUBWEAK DMA0_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel1_IRQHandler - B DMA0_Channel1_IRQHandler - - PUBWEAK DMA0_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel2_IRQHandler - B DMA0_Channel2_IRQHandler - - PUBWEAK DMA0_Channel3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel3_IRQHandler - B DMA0_Channel3_IRQHandler - - PUBWEAK DMA0_Channel4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel4_IRQHandler - B DMA0_Channel4_IRQHandler - - PUBWEAK DMA0_Channel5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel5_IRQHandler - B DMA0_Channel5_IRQHandler - - PUBWEAK DMA0_Channel6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel6_IRQHandler - B DMA0_Channel6_IRQHandler - - PUBWEAK ADC0_1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC0_1_IRQHandler - B ADC0_1_IRQHandler - - PUBWEAK CAN0_TX_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_TX_IRQHandler - B CAN0_TX_IRQHandler - - PUBWEAK CAN0_RX0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_RX0_IRQHandler - B CAN0_RX0_IRQHandler - - PUBWEAK CAN0_RX1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_RX1_IRQHandler - B CAN0_RX1_IRQHandler - - PUBWEAK CAN0_EWMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_EWMC_IRQHandler - B CAN0_EWMC_IRQHandler - - PUBWEAK EXTI5_9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI5_9_IRQHandler - B EXTI5_9_IRQHandler - - PUBWEAK TIMER0_BRK_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_BRK_IRQHandler - B TIMER0_BRK_IRQHandler - - PUBWEAK TIMER0_UP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_UP_IRQHandler - B TIMER0_UP_IRQHandler - - PUBWEAK TIMER0_TRG_CMT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_TRG_CMT_IRQHandler - B TIMER0_TRG_CMT_IRQHandler - - PUBWEAK TIMER0_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_Channel_IRQHandler - B TIMER0_Channel_IRQHandler - - PUBWEAK TIMER1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER1_IRQHandler - B TIMER1_IRQHandler - - PUBWEAK TIMER2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER2_IRQHandler - B TIMER2_IRQHandler - - PUBWEAK TIMER3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER3_IRQHandler - B TIMER3_IRQHandler - - PUBWEAK I2C0_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_EV_IRQHandler - B I2C0_EV_IRQHandler - - PUBWEAK I2C0_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_ER_IRQHandler - B I2C0_ER_IRQHandler - - PUBWEAK I2C1_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_EV_IRQHandler - B I2C1_EV_IRQHandler - - PUBWEAK I2C1_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_ER_IRQHandler - B I2C1_ER_IRQHandler - - PUBWEAK SPI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI0_IRQHandler - B SPI0_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK USART0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART0_IRQHandler - B USART0_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK EXTI10_15_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI10_15_IRQHandler - B EXTI10_15_IRQHandler - - PUBWEAK RTC_Alarm_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_Alarm_IRQHandler - B RTC_Alarm_IRQHandler - - PUBWEAK USBFS_WKUP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBFS_WKUP_IRQHandler - B USBFS_WKUP_IRQHandler - - PUBWEAK TIMER7_BRK_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_BRK_IRQHandler - B TIMER7_BRK_IRQHandler - - PUBWEAK TIMER7_UP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_UP_IRQHandler - B TIMER7_UP_IRQHandler - - PUBWEAK TIMER7_TRG_CMT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_TRG_CMT_IRQHandler - B TIMER7_TRG_CMT_IRQHandler - - PUBWEAK TIMER7_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_Channel_IRQHandler - B TIMER7_Channel_IRQHandler - - PUBWEAK EXMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXMC_IRQHandler - B EXMC_IRQHandler - - PUBWEAK TIMER4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER4_IRQHandler - B TIMER4_IRQHandler - - PUBWEAK SPI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI2_IRQHandler - B SPI2_IRQHandler - - PUBWEAK UART3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART3_IRQHandler - B UART3_IRQHandler - - PUBWEAK UART4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART4_IRQHandler - B UART4_IRQHandler - - PUBWEAK TIMER5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER5_IRQHandler - B TIMER5_IRQHandler - - PUBWEAK TIMER6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER6_IRQHandler - B TIMER6_IRQHandler - - PUBWEAK DMA1_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel0_IRQHandler - B DMA1_Channel0_IRQHandler - - PUBWEAK DMA1_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel1_IRQHandler - B DMA1_Channel1_IRQHandler - - PUBWEAK DMA1_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel2_IRQHandler - B DMA1_Channel2_IRQHandler - - PUBWEAK DMA1_Channel3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel3_IRQHandler - B DMA1_Channel3_IRQHandler - - PUBWEAK DMA1_Channel4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel4_IRQHandler - B DMA1_Channel4_IRQHandler - - PUBWEAK ENET_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ENET_IRQHandler - B ENET_IRQHandler - - PUBWEAK ENET_WKUP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ENET_WKUP_IRQHandler - B ENET_WKUP_IRQHandler - - PUBWEAK CAN1_TX_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN1_TX_IRQHandler - B CAN1_TX_IRQHandler - - PUBWEAK CAN1_RX0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN1_RX0_IRQHandler - B CAN1_RX0_IRQHandler - - PUBWEAK CAN1_RX1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN1_RX1_IRQHandler - B CAN1_RX1_IRQHandler - - PUBWEAK CAN1_EWMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN1_EWMC_IRQHandler - B CAN1_EWMC_IRQHandler - - PUBWEAK USBFS_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBFS_IRQHandler - B USBFS_IRQHandler - - - END diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_hd.s b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_hd.s deleted file mode 100644 index 7f5356f..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_hd.s +++ /dev/null @@ -1,490 +0,0 @@ -;/*! -; \file startup_gd32f10x_hd.s -; \brief start up file -; -; \version 2014-12-26, V1.0.0, firmware for GD32F10x -; \version 2017-06-20, V2.0.0, firmware for GD32F10x -; \version 2018-07-31, V2.1.0, firmware for GD32F10x -; \version 2020-09-30, V2.2.0, firmware for GD32F10x -;*/ - -;/* - ;Copyright (c) 2020, GigaDevice Semiconductor Inc. - - ;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 the copyright holder nor the names of its contributors - ;may be used to endorse or promote products derived from this software without - ;specific prior written permission. - - ;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA -__vector_table - DCD sfe(CSTACK) ; top of stack - DCD Reset_Handler ; Reset Handler - - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDGT_IRQHandler ; Vector Number 16,Window Watchdog Timer - DCD LVD_IRQHandler ; Vector Number 17,LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; Vector Number 18,Tamper Interrupt - DCD RTC_IRQHandler ; Vector Number 19,RTC through EXTI Line - DCD FMC_IRQHandler ; Vector Number 20,FMC - DCD RCU_IRQHandler ; Vector Number 21,RCU - DCD EXTI0_IRQHandler ; Vector Number 22,EXTI Line 0 - DCD EXTI1_IRQHandler ; Vector Number 23,EXTI Line 1 - DCD EXTI2_IRQHandler ; Vector Number 24,EXTI Line 2 - DCD EXTI3_IRQHandler ; Vector Number 25,EXTI Line 3 - DCD EXTI4_IRQHandler ; Vector Number 26,EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; Vector Number 27,DMA0 Channel 0 - DCD DMA0_Channel1_IRQHandler ; Vector Number 28,DMA0 Channel 1 - DCD DMA0_Channel2_IRQHandler ; Vector Number 29,DMA0 Channel 2 - DCD DMA0_Channel3_IRQHandler ; Vector Number 30,DMA0 Channel 3 - DCD DMA0_Channel4_IRQHandler ; Vector Number 31,DMA0 Channel 4 - DCD DMA0_Channel5_IRQHandler ; Vector Number 32,DMA0 Channel 5 - DCD DMA0_Channel6_IRQHandler ; Vector Number 33,DMA0 Channel 6 - DCD ADC0_1_IRQHandler ; Vector Number 34,ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; Vector Number 35,USBD and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; Vector Number 36,USBD and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; Vector Number 37,CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; Vector Number 38,CAN0 EWMC - DCD EXTI5_9_IRQHandler ; Vector Number 39,EXTI Line 5 to EXTI Line 9 - DCD TIMER0_BRK_IRQHandler ; Vector Number 40,TIMER0 Break - DCD TIMER0_UP_IRQHandler ; Vector Number 41,TIMER0 Update - DCD TIMER0_TRG_CMT_IRQHandler ; Vector Number 42,TIMER0 Trigger and Commutation - DCD TIMER0_Channel_IRQHandler ; Vector Number 43,TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; Vector Number 44,TIMER1 - DCD TIMER2_IRQHandler ; Vector Number 45,TIMER2 - DCD TIMER3_IRQHandler ; Vector Number 46,TIMER3 - DCD I2C0_EV_IRQHandler ; Vector Number 47,I2C0 Event - DCD I2C0_ER_IRQHandler ; Vector Number 48,I2C0 Error - DCD I2C1_EV_IRQHandler ; Vector Number 49,I2C1 Event - DCD I2C1_ER_IRQHandler ; Vector Number 50,I2C1 Error - DCD SPI0_IRQHandler ; Vector Number 51,SPI0 - DCD SPI1_IRQHandler ; Vector Number 52,SPI1 - DCD USART0_IRQHandler ; Vector Number 53,USART0 - DCD USART1_IRQHandler ; Vector Number 54,USART1 - DCD USART2_IRQHandler ; Vector Number 55,USART2 - DCD EXTI10_15_IRQHandler ; Vector Number 56,EXTI Line 10 to EXTI Line 15 - DCD RTC_Alarm_IRQHandler ; Vector Number 57,RTC Alarm through EXTI Line - DCD USBD_WKUP_IRQHandler ; Vector Number 58,USBD WakeUp from suspend through EXTI Line - DCD TIMER7_BRK_IRQHandler ; Vector Number 59,TIMER7 Break Interrupt - DCD TIMER7_UP_IRQHandler ; Vector Number 60,TIMER7 Update Interrupt - DCD TIMER7_TRG_CMT_IRQHandler ; Vector Number 61,TIMER7 Trigger and Commutation Interrupt - DCD TIMER7_Channel_IRQHandler ; Vector Number 62,TIMER7 Channel Capture Compare - DCD ADC2_IRQHandler ; Vector Number 63,ADC2 - DCD EXMC_IRQHandler ; Vector Number 64,EXMC - DCD SDIO_IRQHandler ; Vector Number 65,SDIO - DCD TIMER4_IRQHandler ; Vector Number 66,TIMER4 - DCD SPI2_IRQHandler ; Vector Number 67,SPI2 - DCD UART3_IRQHandler ; Vector Number 68,UART3 - DCD UART4_IRQHandler ; Vector Number 69,UART4 - DCD TIMER5_IRQHandler ; Vector Number 70,TIMER5 - DCD TIMER6_IRQHandler ; Vector Number 71,TIMER6 - DCD DMA1_Channel0_IRQHandler ; Vector Number 72,DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; Vector Number 73,DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; Vector Number 74,DMA1 Channel2 - DCD DMA1_Channel3_4_IRQHandler ; Vector Number 75,DMA1 Channel4 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:NOROOT:REORDER(2) -Reset_Handler - LDR R0, = SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDGT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -WWDGT_IRQHandler - B WWDGT_IRQHandler - - PUBWEAK LVD_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -LVD_IRQHandler - B LVD_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -FMC_IRQHandler - B FMC_IRQHandler - - PUBWEAK RCU_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RCU_IRQHandler - B RCU_IRQHandler - - PUBWEAK EXTI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI0_IRQHandler - B EXTI0_IRQHandler - - PUBWEAK EXTI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI1_IRQHandler - B EXTI1_IRQHandler - - PUBWEAK EXTI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI2_IRQHandler - B EXTI2_IRQHandler - - PUBWEAK EXTI3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI3_IRQHandler - B EXTI3_IRQHandler - - PUBWEAK EXTI4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI4_IRQHandler - B EXTI4_IRQHandler - - PUBWEAK DMA0_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel0_IRQHandler - B DMA0_Channel0_IRQHandler - - - PUBWEAK DMA0_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel1_IRQHandler - B DMA0_Channel1_IRQHandler - - PUBWEAK DMA0_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel2_IRQHandler - B DMA0_Channel2_IRQHandler - - PUBWEAK DMA0_Channel3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel3_IRQHandler - B DMA0_Channel3_IRQHandler - - PUBWEAK DMA0_Channel4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel4_IRQHandler - B DMA0_Channel4_IRQHandler - - PUBWEAK DMA0_Channel5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel5_IRQHandler - B DMA0_Channel5_IRQHandler - - PUBWEAK DMA0_Channel6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel6_IRQHandler - B DMA0_Channel6_IRQHandler - - PUBWEAK ADC0_1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC0_1_IRQHandler - B ADC0_1_IRQHandler - - PUBWEAK USBD_HP_CAN0_TX_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_HP_CAN0_TX_IRQHandler - B USBD_HP_CAN0_TX_IRQHandler - - PUBWEAK USBD_LP_CAN0_RX0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_LP_CAN0_RX0_IRQHandler - B USBD_LP_CAN0_RX0_IRQHandler - - PUBWEAK CAN0_RX1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_RX1_IRQHandler - B CAN0_RX1_IRQHandler - - PUBWEAK CAN0_EWMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_EWMC_IRQHandler - B CAN0_EWMC_IRQHandler - - PUBWEAK EXTI5_9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI5_9_IRQHandler - B EXTI5_9_IRQHandler - - PUBWEAK TIMER0_BRK_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_BRK_IRQHandler - B TIMER0_BRK_IRQHandler - - PUBWEAK TIMER0_UP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_UP_IRQHandler - B TIMER0_UP_IRQHandler - - PUBWEAK TIMER0_TRG_CMT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_TRG_CMT_IRQHandler - B TIMER0_TRG_CMT_IRQHandler - - PUBWEAK TIMER0_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_Channel_IRQHandler - B TIMER0_Channel_IRQHandler - - PUBWEAK TIMER1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER1_IRQHandler - B TIMER1_IRQHandler - - PUBWEAK TIMER2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER2_IRQHandler - B TIMER2_IRQHandler - - PUBWEAK TIMER3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER3_IRQHandler - B TIMER3_IRQHandler - - PUBWEAK I2C0_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_EV_IRQHandler - B I2C0_EV_IRQHandler - - PUBWEAK I2C0_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_ER_IRQHandler - B I2C0_ER_IRQHandler - - PUBWEAK I2C1_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_EV_IRQHandler - B I2C1_EV_IRQHandler - - PUBWEAK I2C1_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_ER_IRQHandler - B I2C1_ER_IRQHandler - - PUBWEAK SPI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI0_IRQHandler - B SPI0_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK USART0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART0_IRQHandler - B USART0_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK EXTI10_15_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI10_15_IRQHandler - B EXTI10_15_IRQHandler - - PUBWEAK RTC_Alarm_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_Alarm_IRQHandler - B RTC_Alarm_IRQHandler - - PUBWEAK USBD_WKUP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_WKUP_IRQHandler - B USBD_WKUP_IRQHandler - - PUBWEAK TIMER7_BRK_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_BRK_IRQHandler - B TIMER7_BRK_IRQHandler - - PUBWEAK TIMER7_UP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_UP_IRQHandler - B TIMER7_UP_IRQHandler - - PUBWEAK TIMER7_TRG_CMT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_TRG_CMT_IRQHandler - B TIMER7_TRG_CMT_IRQHandler - - PUBWEAK TIMER7_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_Channel_IRQHandler - B TIMER7_Channel_IRQHandler - - PUBWEAK ADC2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC2_IRQHandler - B ADC2_IRQHandler - - PUBWEAK EXMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXMC_IRQHandler - B EXMC_IRQHandler - - PUBWEAK SDIO_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SDIO_IRQHandler - B SDIO_IRQHandler - - PUBWEAK TIMER4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER4_IRQHandler - B TIMER4_IRQHandler - - PUBWEAK SPI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI2_IRQHandler - B SPI2_IRQHandler - - PUBWEAK UART3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART3_IRQHandler - B UART3_IRQHandler - - PUBWEAK UART4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART4_IRQHandler - B UART4_IRQHandler - - PUBWEAK TIMER5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER5_IRQHandler - B TIMER5_IRQHandler - - PUBWEAK TIMER6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER6_IRQHandler - B TIMER6_IRQHandler - - PUBWEAK DMA1_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel0_IRQHandler - B DMA1_Channel0_IRQHandler - - PUBWEAK DMA1_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel1_IRQHandler - B DMA1_Channel1_IRQHandler - - PUBWEAK DMA1_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel2_IRQHandler - B DMA1_Channel2_IRQHandler - - PUBWEAK DMA1_Channel3_4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel3_4_IRQHandler - B DMA1_Channel3_4_IRQHandler - - END diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_md.s b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_md.s deleted file mode 100644 index 6fefa84..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_md.s +++ /dev/null @@ -1,399 +0,0 @@ -;/*! -; \file startup_gd32f10x_md.s -; \brief start up file -; -; \version 2014-12-26, V1.0.0, firmware for GD32F10x -; \version 2017-06-20, V2.0.0, firmware for GD32F10x -; \version 2018-07-31, V2.1.0, firmware for GD32F10x -; \version 2020-09-30, V2.2.0, firmware for GD32F10x -;*/ - -;/* - ;Copyright (c) 2020, GigaDevice Semiconductor Inc. - - ;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 the copyright holder nor the names of its contributors - ;may be used to endorse or promote products derived from this software without - ;specific prior written permission. - - ;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA -__vector_table - DCD sfe(CSTACK) ; top of stack - DCD Reset_Handler ; Reset Handler - - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDGT_IRQHandler ; Vector Number 16,Window Watchdog Timer - DCD LVD_IRQHandler ; Vector Number 17,LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; Vector Number 18,Tamper Interrupt - DCD RTC_IRQHandler ; Vector Number 19,RTC through EXTI Line - DCD FMC_IRQHandler ; Vector Number 20,FMC - DCD RCU_IRQHandler ; Vector Number 21,RCU - DCD EXTI0_IRQHandler ; Vector Number 22,EXTI Line 0 - DCD EXTI1_IRQHandler ; Vector Number 23,EXTI Line 1 - DCD EXTI2_IRQHandler ; Vector Number 24,EXTI Line 2 - DCD EXTI3_IRQHandler ; Vector Number 25,EXTI Line 3 - DCD EXTI4_IRQHandler ; Vector Number 26,EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; Vector Number 27,DMA0 Channel 0 - DCD DMA0_Channel1_IRQHandler ; Vector Number 28,DMA0 Channel 1 - DCD DMA0_Channel2_IRQHandler ; Vector Number 29,DMA0 Channel 2 - DCD DMA0_Channel3_IRQHandler ; Vector Number 30,DMA0 Channel 3 - DCD DMA0_Channel4_IRQHandler ; Vector Number 31,DMA0 Channel 4 - DCD DMA0_Channel5_IRQHandler ; Vector Number 32,DMA0 Channel 5 - DCD DMA0_Channel6_IRQHandler ; Vector Number 33,DMA0 Channel 6 - DCD ADC0_1_IRQHandler ; Vector Number 34,ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; Vector Number 35,USBD and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; Vector Number 36,USBD and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; Vector Number 37,CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; Vector Number 38,CAN0 EWMC - DCD EXTI5_9_IRQHandler ; Vector Number 39,EXTI Line 5 to EXTI Line 9 - DCD TIMER0_BRK_IRQHandler ; Vector Number 40,TIMER0 Break - DCD TIMER0_UP_IRQHandler ; Vector Number 41,TIMER0 Update - DCD TIMER0_TRG_CMT_IRQHandler ; Vector Number 42,TIMER0 Trigger and Commutation - DCD TIMER0_Channel_IRQHandler ; Vector Number 43,TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; Vector Number 44,TIMER1 - DCD TIMER2_IRQHandler ; Vector Number 45,TIMER2 - DCD TIMER3_IRQHandler ; Vector Number 46,TIMER3 - DCD I2C0_EV_IRQHandler ; Vector Number 47,I2C0 Event - DCD I2C0_ER_IRQHandler ; Vector Number 48,I2C0 Error - DCD I2C1_EV_IRQHandler ; Vector Number 49,I2C1 Event - DCD I2C1_ER_IRQHandler ; Vector Number 50,I2C1 Error - DCD SPI0_IRQHandler ; Vector Number 51,SPI0 - DCD SPI1_IRQHandler ; Vector Number 52,SPI1 - DCD USART0_IRQHandler ; Vector Number 53,USART0 - DCD USART1_IRQHandler ; Vector Number 54,USART1 - DCD USART2_IRQHandler ; Vector Number 55,USART2 - DCD EXTI10_15_IRQHandler ; Vector Number 56,EXTI Line 10 to EXTI Line 15 - DCD RTC_Alarm_IRQHandler ; Vector Number 57,RTC Alarm through EXTI Line - DCD USBD_WKUP_IRQHandler ; Vector Number 58,USBD WakeUp from suspend through EXTI Line - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD EXMC_IRQHandler ; Vector Number 64,EXMC -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:NOROOT:REORDER(2) -Reset_Handler - LDR R0, = SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDGT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -WWDGT_IRQHandler - B WWDGT_IRQHandler - - PUBWEAK LVD_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -LVD_IRQHandler - B LVD_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -FMC_IRQHandler - B FMC_IRQHandler - - PUBWEAK RCU_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RCU_IRQHandler - B RCU_IRQHandler - - PUBWEAK EXTI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI0_IRQHandler - B EXTI0_IRQHandler - - PUBWEAK EXTI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI1_IRQHandler - B EXTI1_IRQHandler - - PUBWEAK EXTI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI2_IRQHandler - B EXTI2_IRQHandler - - PUBWEAK EXTI3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI3_IRQHandler - B EXTI3_IRQHandler - - PUBWEAK EXTI4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI4_IRQHandler - B EXTI4_IRQHandler - - PUBWEAK DMA0_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel0_IRQHandler - B DMA0_Channel0_IRQHandler - - - PUBWEAK DMA0_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel1_IRQHandler - B DMA0_Channel1_IRQHandler - - PUBWEAK DMA0_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel2_IRQHandler - B DMA0_Channel2_IRQHandler - - PUBWEAK DMA0_Channel3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel3_IRQHandler - B DMA0_Channel3_IRQHandler - - PUBWEAK DMA0_Channel4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel4_IRQHandler - B DMA0_Channel4_IRQHandler - - PUBWEAK DMA0_Channel5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel5_IRQHandler - B DMA0_Channel5_IRQHandler - - PUBWEAK DMA0_Channel6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel6_IRQHandler - B DMA0_Channel6_IRQHandler - - PUBWEAK ADC0_1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC0_1_IRQHandler - B ADC0_1_IRQHandler - - PUBWEAK USBD_HP_CAN0_TX_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_HP_CAN0_TX_IRQHandler - B USBD_HP_CAN0_TX_IRQHandler - - PUBWEAK USBD_LP_CAN0_RX0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_LP_CAN0_RX0_IRQHandler - B USBD_LP_CAN0_RX0_IRQHandler - - PUBWEAK CAN0_RX1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_RX1_IRQHandler - B CAN0_RX1_IRQHandler - - PUBWEAK CAN0_EWMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_EWMC_IRQHandler - B CAN0_EWMC_IRQHandler - - PUBWEAK EXTI5_9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI5_9_IRQHandler - B EXTI5_9_IRQHandler - - PUBWEAK TIMER0_BRK_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_BRK_IRQHandler - B TIMER0_BRK_IRQHandler - - PUBWEAK TIMER0_UP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_UP_IRQHandler - B TIMER0_UP_IRQHandler - - PUBWEAK TIMER0_TRG_CMT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_TRG_CMT_IRQHandler - B TIMER0_TRG_CMT_IRQHandler - - PUBWEAK TIMER0_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_Channel_IRQHandler - B TIMER0_Channel_IRQHandler - - PUBWEAK TIMER1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER1_IRQHandler - B TIMER1_IRQHandler - - PUBWEAK TIMER2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER2_IRQHandler - B TIMER2_IRQHandler - - PUBWEAK TIMER3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER3_IRQHandler - B TIMER3_IRQHandler - - PUBWEAK I2C0_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_EV_IRQHandler - B I2C0_EV_IRQHandler - - PUBWEAK I2C0_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_ER_IRQHandler - B I2C0_ER_IRQHandler - - PUBWEAK I2C1_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_EV_IRQHandler - B I2C1_EV_IRQHandler - - PUBWEAK I2C1_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_ER_IRQHandler - B I2C1_ER_IRQHandler - - PUBWEAK SPI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI0_IRQHandler - B SPI0_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK USART0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART0_IRQHandler - B USART0_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK EXTI10_15_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI10_15_IRQHandler - B EXTI10_15_IRQHandler - - PUBWEAK RTC_Alarm_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_Alarm_IRQHandler - B RTC_Alarm_IRQHandler - - PUBWEAK USBD_WKUP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_WKUP_IRQHandler - B USBD_WKUP_IRQHandler - - PUBWEAK EXMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXMC_IRQHandler - B EXMC_IRQHandler - - END diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_xd.s b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_xd.s deleted file mode 100644 index 08659af..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_xd.s +++ /dev/null @@ -1,490 +0,0 @@ -;/*! -; \file startup_gd32f10x_xd.s -; \brief start up file -; -; \version 2014-12-26, V1.0.0, firmware for GD32F10x -; \version 2017-06-20, V2.0.0, firmware for GD32F10x -; \version 2018-07-31, V2.1.0, firmware for GD32F10x -; \version 2020-09-30, V2.2.0, firmware for GD32F10x -;*/ - -;/* - ;Copyright (c) 2020, GigaDevice Semiconductor Inc. - - ;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 the copyright holder nor the names of its contributors - ;may be used to endorse or promote products derived from this software without - ;specific prior written permission. - - ;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA -__vector_table - DCD sfe(CSTACK) ; top of stack - DCD Reset_Handler ; Reset Handler - - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; External Interrupts - DCD WWDGT_IRQHandler ; Vector Number 16,Window Watchdog Timer - DCD LVD_IRQHandler ; Vector Number 17,LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; Vector Number 18,Tamper Interrupt - DCD RTC_IRQHandler ; Vector Number 19,RTC through EXTI Line - DCD FMC_IRQHandler ; Vector Number 20,FMC - DCD RCU_IRQHandler ; Vector Number 21,RCU - DCD EXTI0_IRQHandler ; Vector Number 22,EXTI Line 0 - DCD EXTI1_IRQHandler ; Vector Number 23,EXTI Line 1 - DCD EXTI2_IRQHandler ; Vector Number 24,EXTI Line 2 - DCD EXTI3_IRQHandler ; Vector Number 25,EXTI Line 3 - DCD EXTI4_IRQHandler ; Vector Number 26,EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; Vector Number 27,DMA0 Channel 0 - DCD DMA0_Channel1_IRQHandler ; Vector Number 28,DMA0 Channel 1 - DCD DMA0_Channel2_IRQHandler ; Vector Number 29,DMA0 Channel 2 - DCD DMA0_Channel3_IRQHandler ; Vector Number 30,DMA0 Channel 3 - DCD DMA0_Channel4_IRQHandler ; Vector Number 31,DMA0 Channel 4 - DCD DMA0_Channel5_IRQHandler ; Vector Number 32,DMA0 Channel 5 - DCD DMA0_Channel6_IRQHandler ; Vector Number 33,DMA0 Channel 6 - DCD ADC0_1_IRQHandler ; Vector Number 34,ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; Vector Number 35,USBD and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; Vector Number 36,USBD and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; Vector Number 37,CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; Vector Number 38,CAN0 EWMC - DCD EXTI5_9_IRQHandler ; Vector Number 39,EXTI Line 5 to EXTI Line 9 - DCD TIMER0_BRK_TIMER8_IRQHandler ; Vector Number 40,TIMER0 Break and TIMER8 global - DCD TIMER0_UP_TIMER9_IRQHandler ; Vector Number 41,TIMER0 Update and TIMER9 global - DCD TIMER0_TRG_CMT_TIMER10_IRQHandler ; Vector Number 42,TIMER0 Trigger and Commutation and TIMER10 global - DCD TIMER0_Channel_IRQHandler ; Vector Number 43,TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; Vector Number 44,TIMER1 - DCD TIMER2_IRQHandler ; Vector Number 45,TIMER2 - DCD TIMER3_IRQHandler ; Vector Number 46,TIMER3 - DCD I2C0_EV_IRQHandler ; Vector Number 47,I2C0 Event - DCD I2C0_ER_IRQHandler ; Vector Number 48,I2C0 Error - DCD I2C1_EV_IRQHandler ; Vector Number 49,I2C1 Event - DCD I2C1_ER_IRQHandler ; Vector Number 50,I2C1 Error - DCD SPI0_IRQHandler ; Vector Number 51,SPI0 - DCD SPI1_IRQHandler ; Vector Number 52,SPI1 - DCD USART0_IRQHandler ; Vector Number 53,USART0 - DCD USART1_IRQHandler ; Vector Number 54,USART1 - DCD USART2_IRQHandler ; Vector Number 55,USART2 - DCD EXTI10_15_IRQHandler ; Vector Number 56,EXTI Line 10 to EXTI Line 15 - DCD RTC_Alarm_IRQHandler ; Vector Number 57,RTC Alarm through EXTI Line - DCD USBD_WKUP_IRQHandler ; Vector Number 58,USBD WakeUp from suspend through EXTI Line - DCD TIMER7_BRK_TIMER11_IRQHandler ; Vector Number 59,TIMER7 Break Interrupt and TIMER11 global - DCD TIMER7_UP_TIMER12_IRQHandler ; Vector Number 60,TIMER7 Update Interrupt and TIMER12 global - DCD TIMER7_TRG_CMT_TIMER13_IRQHandler ; Vector Number 61,TIMER7 Trigger and Commutation Interrupt and TIMER13 global - DCD TIMER7_Channel_IRQHandler ; Vector Number 62,TIMER7 Channel Capture Compare - DCD ADC2_IRQHandler ; Vector Number 63,ADC2 - DCD EXMC_IRQHandler ; Vector Number 64,EXMC - DCD SDIO_IRQHandler ; Vector Number 65,SDIO - DCD TIMER4_IRQHandler ; Vector Number 66,TIMER4 - DCD SPI2_IRQHandler ; Vector Number 67,SPI2 - DCD UART3_IRQHandler ; Vector Number 68,UART3 - DCD UART4_IRQHandler ; Vector Number 69,UART4 - DCD TIMER5_IRQHandler ; Vector Number 70,TIMER5 - DCD TIMER6_IRQHandler ; Vector Number 71,TIMER6 - DCD DMA1_Channel0_IRQHandler ; Vector Number 72,DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; Vector Number 73,DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; Vector Number 74,DMA1 Channel2 - DCD DMA1_Channel3_4_IRQHandler ; Vector Number 75,DMA1 Channel4 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:NOROOT:REORDER(2) -Reset_Handler - LDR R0, = SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDGT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -WWDGT_IRQHandler - B WWDGT_IRQHandler - - PUBWEAK LVD_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -LVD_IRQHandler - B LVD_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -FMC_IRQHandler - B FMC_IRQHandler - - PUBWEAK RCU_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RCU_IRQHandler - B RCU_IRQHandler - - PUBWEAK EXTI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI0_IRQHandler - B EXTI0_IRQHandler - - PUBWEAK EXTI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI1_IRQHandler - B EXTI1_IRQHandler - - PUBWEAK EXTI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI2_IRQHandler - B EXTI2_IRQHandler - - PUBWEAK EXTI3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI3_IRQHandler - B EXTI3_IRQHandler - - PUBWEAK EXTI4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI4_IRQHandler - B EXTI4_IRQHandler - - PUBWEAK DMA0_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel0_IRQHandler - B DMA0_Channel0_IRQHandler - - - PUBWEAK DMA0_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel1_IRQHandler - B DMA0_Channel1_IRQHandler - - PUBWEAK DMA0_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel2_IRQHandler - B DMA0_Channel2_IRQHandler - - PUBWEAK DMA0_Channel3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel3_IRQHandler - B DMA0_Channel3_IRQHandler - - PUBWEAK DMA0_Channel4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel4_IRQHandler - B DMA0_Channel4_IRQHandler - - PUBWEAK DMA0_Channel5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel5_IRQHandler - B DMA0_Channel5_IRQHandler - - PUBWEAK DMA0_Channel6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel6_IRQHandler - B DMA0_Channel6_IRQHandler - - PUBWEAK ADC0_1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC0_1_IRQHandler - B ADC0_1_IRQHandler - - PUBWEAK USBD_HP_CAN0_TX_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_HP_CAN0_TX_IRQHandler - B USBD_HP_CAN0_TX_IRQHandler - - PUBWEAK USBD_LP_CAN0_RX0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_LP_CAN0_RX0_IRQHandler - B USBD_LP_CAN0_RX0_IRQHandler - - PUBWEAK CAN0_RX1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_RX1_IRQHandler - B CAN0_RX1_IRQHandler - - PUBWEAK CAN0_EWMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_EWMC_IRQHandler - B CAN0_EWMC_IRQHandler - - PUBWEAK EXTI5_9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI5_9_IRQHandler - B EXTI5_9_IRQHandler - - PUBWEAK TIMER0_BRK_TIMER8_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_BRK_TIMER8_IRQHandler - B TIMER0_BRK_TIMER8_IRQHandler - - PUBWEAK TIMER0_UP_TIMER9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_UP_TIMER9_IRQHandler - B TIMER0_UP_TIMER9_IRQHandler - - PUBWEAK TIMER0_TRG_CMT_TIMER10_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_TRG_CMT_TIMER10_IRQHandler - B TIMER0_TRG_CMT_TIMER10_IRQHandler - - PUBWEAK TIMER0_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_Channel_IRQHandler - B TIMER0_Channel_IRQHandler - - PUBWEAK TIMER1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER1_IRQHandler - B TIMER1_IRQHandler - - PUBWEAK TIMER2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER2_IRQHandler - B TIMER2_IRQHandler - - PUBWEAK TIMER3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER3_IRQHandler - B TIMER3_IRQHandler - - PUBWEAK I2C0_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_EV_IRQHandler - B I2C0_EV_IRQHandler - - PUBWEAK I2C0_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_ER_IRQHandler - B I2C0_ER_IRQHandler - - PUBWEAK I2C1_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_EV_IRQHandler - B I2C1_EV_IRQHandler - - PUBWEAK I2C1_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_ER_IRQHandler - B I2C1_ER_IRQHandler - - PUBWEAK SPI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI0_IRQHandler - B SPI0_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK USART0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART0_IRQHandler - B USART0_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK EXTI10_15_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI10_15_IRQHandler - B EXTI10_15_IRQHandler - - PUBWEAK RTC_Alarm_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_Alarm_IRQHandler - B RTC_Alarm_IRQHandler - - PUBWEAK USBD_WKUP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_WKUP_IRQHandler - B USBD_WKUP_IRQHandler - - PUBWEAK TIMER7_BRK_TIMER11_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_BRK_TIMER11_IRQHandler - B TIMER7_BRK_TIMER11_IRQHandler - - PUBWEAK TIMER7_UP_TIMER12_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_UP_TIMER12_IRQHandler - B TIMER7_UP_TIMER12_IRQHandler - - PUBWEAK TIMER7_TRG_CMT_TIMER13_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_TRG_CMT_TIMER13_IRQHandler - B TIMER7_TRG_CMT_TIMER13_IRQHandler - - PUBWEAK TIMER7_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_Channel_IRQHandler - B TIMER7_Channel_IRQHandler - - PUBWEAK ADC2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC2_IRQHandler - B ADC2_IRQHandler - - PUBWEAK EXMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXMC_IRQHandler - B EXMC_IRQHandler - - PUBWEAK SDIO_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SDIO_IRQHandler - B SDIO_IRQHandler - - PUBWEAK TIMER4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER4_IRQHandler - B TIMER4_IRQHandler - - PUBWEAK SPI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI2_IRQHandler - B SPI2_IRQHandler - - PUBWEAK UART3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART3_IRQHandler - B UART3_IRQHandler - - PUBWEAK UART4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART4_IRQHandler - B UART4_IRQHandler - - PUBWEAK TIMER5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER5_IRQHandler - B TIMER5_IRQHandler - - PUBWEAK TIMER6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER6_IRQHandler - B TIMER6_IRQHandler - - PUBWEAK DMA1_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel0_IRQHandler - B DMA1_Channel0_IRQHandler - - PUBWEAK DMA1_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel1_IRQHandler - B DMA1_Channel1_IRQHandler - - PUBWEAK DMA1_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel2_IRQHandler - B DMA1_Channel2_IRQHandler - - PUBWEAK DMA1_Channel3_4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel3_4_IRQHandler - B DMA1_Channel3_4_IRQHandler - - END diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/system_gd32f10x.c b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/system_gd32f10x.c deleted file mode 100644 index a51c0d5..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/GD/GD32F10x/Source/system_gd32f10x.c +++ /dev/null @@ -1,1059 +0,0 @@ -/*! - \file system_gd32f10x.c - \brief CMSIS Cortex-M3 Device Peripheral Access Layer Source File for - GD32F10x Device Series -*/ - -/* - Copyright (c) 2012 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: - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -/* This file refers the CMSIS standard, some adjustments are made according to GigaDevice chips */ - -#include "gd32f10x.h" - -/* system frequency define */ -#define __IRC8M (IRC8M_VALUE) /* internal 8 MHz RC oscillator frequency */ -#define __HXTAL (HXTAL_VALUE) /* high speed crystal oscillator frequency */ -#define __SYS_OSC_CLK (__IRC8M) /* main oscillator frequency */ - -#define VECT_TAB_OFFSET (uint32_t)0x00 /* vector table base offset */ - -/* select a system clock by uncommenting the following line */ -/* use IRC8M */ -//#define __SYSTEM_CLOCK_48M_PLL_IRC8M (uint32_t)(48000000) -//#define __SYSTEM_CLOCK_72M_PLL_IRC8M (uint32_t)(72000000) -//#define __SYSTEM_CLOCK_108M_PLL_IRC8M (uint32_t)(108000000) - -/* use HXTAL (XD series CK_HXTAL = 8M, CL series CK_HXTAL = 25M) */ -//#define __SYSTEM_CLOCK_HXTAL (uint32_t)(__HXTAL) -//#define __SYSTEM_CLOCK_24M_PLL_HXTAL (uint32_t)(24000000) -//#define __SYSTEM_CLOCK_36M_PLL_HXTAL (uint32_t)(36000000) -//#define __SYSTEM_CLOCK_48M_PLL_HXTAL (uint32_t)(48000000) -//#define __SYSTEM_CLOCK_56M_PLL_HXTAL (uint32_t)(56000000) -//#define __SYSTEM_CLOCK_72M_PLL_HXTAL (uint32_t)(72000000) -//#define __SYSTEM_CLOCK_96M_PLL_HXTAL (uint32_t)(96000000) -#define __SYSTEM_CLOCK_108M_PLL_HXTAL (uint32_t)(108000000) - -#define RCU_MODIFY(__delay) do{ \ - volatile uint32_t i; \ - if(0 != __delay){ \ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV2; \ - for(i=0; i<__delay; i++){ \ - } \ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV4; \ - for(i=0; i<__delay; i++){ \ - } \ - } \ - }while(0) - -#define SEL_IRC8M 0x00U -#define SEL_HXTAL 0x01U -#define SEL_PLL 0x02U - -/* set the system clock frequency and declare the system clock configuration function */ -#ifdef __SYSTEM_CLOCK_48M_PLL_IRC8M -uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_IRC8M; -static void system_clock_48m_irc8m(void); -#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_IRC8M; -static void system_clock_72m_irc8m(void); -#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_IRC8M; -static void system_clock_108m_irc8m(void); - -#elif defined (__SYSTEM_CLOCK_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_HXTAL; -static void system_clock_hxtal(void); -#elif defined (__SYSTEM_CLOCK_24M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_24M_PLL_HXTAL; -static void system_clock_24m_hxtal(void); -#elif defined (__SYSTEM_CLOCK_36M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_36M_PLL_HXTAL; -static void system_clock_36m_hxtal(void); -#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_HXTAL; -static void system_clock_48m_hxtal(void); -#elif defined (__SYSTEM_CLOCK_56M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_56M_PLL_HXTAL; -static void system_clock_56m_hxtal(void); -#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_HXTAL; -static void system_clock_72m_hxtal(void); -#elif defined (__SYSTEM_CLOCK_96M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_96M_PLL_HXTAL; -static void system_clock_96m_hxtal(void); -#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_HXTAL; -static void system_clock_108m_hxtal(void); -#endif /* __SYSTEM_CLOCK_48M_PLL_IRC8M */ - -/* configure the system clock */ -static void system_clock_config(void); - -/*! - \brief configure the system clock - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_config(void) -{ -#ifdef __SYSTEM_CLOCK_HXTAL - system_clock_hxtal(); -#elif defined (__SYSTEM_CLOCK_24M_PLL_HXTAL) - system_clock_24m_hxtal(); -#elif defined (__SYSTEM_CLOCK_36M_PLL_HXTAL) - system_clock_36m_hxtal(); -#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) - system_clock_48m_hxtal(); -#elif defined (__SYSTEM_CLOCK_56M_PLL_HXTAL) - system_clock_56m_hxtal(); -#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) - system_clock_72m_hxtal(); -#elif defined (__SYSTEM_CLOCK_96M_PLL_HXTAL) - system_clock_96m_hxtal(); -#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) - system_clock_108m_hxtal(); - -#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) - system_clock_48m_irc8m(); -#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) - system_clock_72m_irc8m(); -#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) - system_clock_108m_irc8m(); -#endif /* __SYSTEM_CLOCK_HXTAL */ -} - -/*! - \brief setup the microcontroller system, initialize the system - \param[in] none - \param[out] none - \retval none -*/ -void SystemInit(void) -{ - /* reset the RCC clock configuration to the default reset state */ - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - while(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ - } - RCU_MODIFY(0x50); - RCU_CFG0 &= ~RCU_CFG0_SCS; - /* reset HXTALEN, CKMEN, PLLEN bits */ - RCU_CTL &= ~(RCU_CTL_HXTALEN | RCU_CTL_CKMEN | RCU_CTL_PLLEN); - - /* reset SCS, AHBPSC, APB1PSC, APB2PSC, ADCPSC, CKOUT0SEL bits */ - RCU_CFG0 &= ~(RCU_CFG0_SCS | RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC | - RCU_CFG0_ADCPSC | RCU_CFG0_ADCPSC_2 | RCU_CFG0_CKOUT0SEL); - - /* reset HXTALEN, CKMEN, PLLEN bits */ - RCU_CTL &= ~(RCU_CTL_HXTALEN | RCU_CTL_CKMEN | RCU_CTL_PLLEN); - - /* Reset HXTALBPS bit */ - RCU_CTL &= ~(RCU_CTL_HXTALBPS); - - /* reset PLLSEL, PREDV0_LSB, PLLMF, USBFSPSC bits */ - -#ifdef GD32F10X_CL - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0_LSB | RCU_CFG0_PLLMF | - RCU_CFG0_USBFSPSC | RCU_CFG0_PLLMF_4); - - RCU_CFG1 = 0x00000000U; -#else - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0 | RCU_CFG0_PLLMF | - RCU_CFG0_USBDPSC | RCU_CFG0_PLLMF_4); -#endif /* GD32F10X_CL */ - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - /* reset HXTALEN, CKMEN and PLLEN bits */ - RCU_CTL &= ~(RCU_CTL_PLLEN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN); - /* disable all interrupts */ - RCU_INT = 0x009F0000U; -#elif defined(GD32F10X_CL) - /* Reset HXTALEN, CKMEN, PLLEN, PLL1EN and PLL2EN bits */ - RCU_CTL &= ~(RCU_CTL_PLLEN | RCU_CTL_PLL1EN | RCU_CTL_PLL2EN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN); - /* disable all interrupts */ - RCU_INT = 0x00FF0000U; -#endif - - /* Configure the System clock source, PLL Multiplier, AHB/APBx prescalers and Flash settings */ - system_clock_config(); - -#ifdef VECT_TAB_SRAM - nvic_vector_table_set(NVIC_VECTTAB_RAM, VECT_TAB_OFFSET); -#else - nvic_vector_table_set(NVIC_VECTTAB_FLASH, VECT_TAB_OFFSET); -#endif -} - -/*! - \brief update the SystemCoreClock with current core clock retrieved from cpu registers - \param[in] none - \param[out] none - \retval none -*/ -void SystemCoreClockUpdate(void) -{ - uint32_t scss; - uint32_t pllsel, predv0sel, pllmf, ck_src, idx, clk_exp; -#ifdef GD32F10X_CL - uint32_t predv0, predv1, pll1mf; -#endif /* GD32F10X_CL */ - /* exponent of AHB, APB1 and APB2 clock divider */ - const uint8_t ahb_exp[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - - scss = GET_BITS(RCU_CFG0, 2, 3); - - switch (scss) - { - /* IRC8M is selected as CK_SYS */ - case SEL_IRC8M: - SystemCoreClock = IRC8M_VALUE; - break; - - /* HXTAL is selected as CK_SYS */ - case SEL_HXTAL: - SystemCoreClock = HXTAL_VALUE; - break; - - /* PLL is selected as CK_SYS */ - case SEL_PLL: - /* PLL clock source selection, HXTAL or IRC8M/2 */ - pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL); - - if(RCU_PLLSRC_IRC8M_DIV2 == pllsel){ - /* PLL clock source is IRC8M/2 */ - ck_src = IRC8M_VALUE / 2U; - }else{ - /* PLL clock source is HXTAL */ - ck_src = HXTAL_VALUE; - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - predv0sel = (RCU_CFG0 & RCU_CFG0_PREDV0); - - /* PREDV0 input source clock divided by 2 */ - if(RCU_CFG0_PREDV0 == predv0sel){ - ck_src = HXTAL_VALUE / 2U; - } -#elif defined(GD32F10X_CL) - predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL); - - /* source clock use PLL1 */ - if(RCU_PREDV0SRC_CKPLL1 == predv0sel){ - predv1 = ((RCU_CFG1 & RCU_CFG1_PREDV1) >> 4) + 1U; - pll1mf = ((RCU_CFG1 & RCU_CFG1_PLL1MF) >> 8) + 2U; - if(17U == pll1mf){ - pll1mf = 20U; - } - ck_src = (ck_src / predv1) * pll1mf; - } - predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U; - ck_src /= predv0; -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - } - - /* PLL multiplication factor */ - pllmf = GET_BITS(RCU_CFG0, 18, 21); - - if((RCU_CFG0 & RCU_CFG0_PLLMF_4)){ - pllmf |= 0x10U; - } - - if(pllmf >= 15U){ - pllmf += 1U; - }else{ - pllmf += 2U; - } - - SystemCoreClock = ck_src * pllmf; - -#ifdef GD32F10X_CL - if(15U == pllmf){ - /* PLL source clock multiply by 6.5 */ - SystemCoreClock = ck_src * 6U + ck_src / 2U; - } -#endif /* GD32F10X_CL */ - - break; - - /* IRC8M is selected as CK_SYS */ - default: - SystemCoreClock = IRC8M_VALUE; - break; - } - /* calculate AHB clock frequency */ - idx = GET_BITS(RCU_CFG0, 4, 7); - clk_exp = ahb_exp[idx]; - SystemCoreClock = SystemCoreClock >> clk_exp; -} - -#ifdef __SYSTEM_CLOCK_HXTAL -/*! - \brief configure the system clock to HXTAL - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* select HXTAL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_HXTAL; - - /* wait until HXTAL is selected as system clock */ - while(0 == (RCU_CFG0 & RCU_SCSS_HXTAL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_24M_PLL_HXTAL) -/*! - \brief configure the system clock to 24M by PLL which selects HXTAL(MD/HD/XD:8M; CL:25M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_24m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 6 = 24 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL6; - -#elif defined(GD32F10X_CL) - /* CK_PLL = (CK_PREDIV0) * 6 = 24 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL6); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ - } -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_36M_PLL_HXTAL) -/*! - \brief configure the system clock to 36M by PLL which selects HXTAL(MD/HD/XD:8M; CL:25M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_36m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 9 = 36 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL9; - -#elif defined(GD32F10X_CL) - /* CK_PLL = (CK_PREDIV0) * 9 = 36 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL9); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ - } -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) -/*! - \brief configure the system clock to 48M by PLL which selects HXTAL(MD/HD/XD:8M; CL:25M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_48m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 12 = 48 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL12; - -#elif defined(GD32F10X_CL) - /* CK_PLL = (CK_PREDIV0) * 12 = 48 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL12); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ - } -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_56M_PLL_HXTAL) -/*! - \brief configure the system clock to 56M by PLL which selects HXTAL(MD/HD/XD:8M; CL:25M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_56m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 14 = 56 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL14; - -#elif defined(GD32F10X_CL) - /* CK_PLL = (CK_PREDIV0) * 14 = 56 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL14); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ - } -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) -/*! - \brief configure the system clock to 72M by PLL which selects HXTAL(MD/HD/XD:8M; CL:25M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_72m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 18 = 72 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL18; - -#elif defined(GD32F10X_CL) - /* CK_PLL = (CK_PREDIV0) * 18 = 72 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL18); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ - } -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_96M_PLL_HXTAL) -/*! - \brief configure the system clock to 96M by PLL which selects HXTAL(MD/HD/XD:8M; CL:25M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_96m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 24 = 96 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL24; - -#elif defined(GD32F10X_CL) - /* CK_PLL = (CK_PREDIV0) * 24 = 96 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL24); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ - } -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) -/*! - \brief configure the system clock to 108M by PLL which selects HXTAL(MD/HD/XD:8M; CL:25M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_108m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 27 = 108 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL27; - -#elif defined(GD32F10X_CL) - /* CK_PLL = (CK_PREDIV0) * 27 = 108 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL27); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while(0U == (RCU_CTL & RCU_CTL_PLL1STB)){ - } -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) -/*! - \brief configure the system clock to 48M by PLL which selects IRC8M as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_48m_irc8m(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - - /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); - } - while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ - while(1){ - } - } - - /* IRC8M is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* CK_PLL = (CK_IRC8M/2) * 12 = 48 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL12; - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) -/*! - \brief configure the system clock to 72M by PLL which selects IRC8M as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_72m_irc8m(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - - /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); - } - while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ - while(1){ - } - } - - /* IRC8M is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* CK_PLL = (CK_IRC8M/2) * 18 = 72 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL18; - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) -/*! - \brief configure the system clock to 108M by PLL which selects IRC8M as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_108m_irc8m(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - - /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); - } - while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ - while(1){ - } - } - - /* IRC8M is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* CK_PLL = (CK_IRC8M/2) * 27 = 108 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - RCU_CFG0 |= RCU_PLL_MUL27; - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#endif diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cm3.h b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cm3.h deleted file mode 100644 index 1b661b4..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cm3.h +++ /dev/null @@ -1,1638 +0,0 @@ -/**************************************************************************//** - * @file core_cm3.h - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V3.30 - * @date 17. February 2014 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2009 - 2014 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 */ -#endif - -#ifdef __cplusplus - extern "C" { -#endif - -#ifndef __CORE_CM3_H_GENERIC -#define __CORE_CM3_H_GENERIC - -/** \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 (0x03) /*!< [31:16] CMSIS HAL main version */ -#define __CM3_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ -#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | \ - __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ - -#define __CORTEX_M (0x03) /*!< 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 ( __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__ ) /* Cosmic */ - #define __packed - #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ - #define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */ - #define __STATIC_INLINE static inline - -#endif - -/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all -*/ -#define __FPU_USED 0 - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TMS470__ ) - #if defined __TI__VFP_SUPPORT____ - #warning "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__ ) /* Cosmic */ - #if ( __CSMC__ & 0x400) // FPU present for parser - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif -#endif - -#include /* standard types definitions */ -#include /* Core Instruction Access */ -#include /* Core Function Access */ - -#endif /* __CORE_CM3_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM3_H_DEPENDANT -#define __CORE_CM3_H_DEPENDANT - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM3_REV - #define __CM3_REV 0x0200 - #warning "__CM3_REV not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0 - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0 - #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 */ - -/*@} 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 - { -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ -#else - 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 */ -#endif - 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; - - -/** \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; - - -/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ -#else - 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 */ -#endif - 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; - - -/** \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; - -/*@} 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 -{ - __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[24]; - __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[24]; - __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[24]; - __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[24]; - __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[56]; - __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644]; - __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0 /*!< 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 -{ - __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[5]; - __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0 /*!< 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 31 /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< 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 < 0x0201) /* core r2p1 */ -#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ -#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ - -#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ -#else -#define SCB_VTOR_TBLOFF_Pos 7 /*!< 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 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0 /*!< 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 4 /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< 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 9 /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< 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 4 /*!< 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 3 /*!< 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 1 /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< 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 18 /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Registers Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< 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 8 /*!< 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 0 /*!< 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 Registers Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1 /*!< 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 4 /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0 /*!< 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[1]; - __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ -#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) - __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -#else - uint32_t RESERVED1[1]; -#endif -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< 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 2 /*!< ACTLR: DISFOLD Position */ -#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ - -#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ -#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ - -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< 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 -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0 /*!< 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 0 /*!< 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 0 /*!< 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 31 /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_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 -{ - __O union - { - __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864]; - __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15]; - __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15]; - __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[29]; - __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ - __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ - __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ - uint32_t RESERVED4[43]; - __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[6]; - __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0 /*!< 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 23 /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10 /*!< 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 8 /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 2 /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0 /*!< 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 -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1]; - __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1]; - __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1]; - __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 24 /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ -#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ - -#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ -#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ -#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ - -#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ -#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ - -#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ -#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ - -#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ -#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ - -#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< 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 -{ - __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2]; - __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55]; - __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131]; - __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759]; - __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ - __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1]; - __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39]; - __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8]; - __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0 /*!< 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 0 /*!< 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 3 /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0 /*!< 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 8 /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1 /*!< 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 0 /*!< 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 29 /*!< 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 27 /*!< 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 26 /*!< 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 24 /*!< 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 16 /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0 /*!< 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 0 /*!< 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 29 /*!< 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 27 /*!< 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 26 /*!< 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 24 /*!< 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 16 /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0 /*!< 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 0 /*!< 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 0 /*!< 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 11 /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0 /*!< 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_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if (__MPU_PRESENT == 1) -/** \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 -{ - __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ - __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ - __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ - __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ - __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ - __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ - __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -/* MPU Type Register */ -#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register */ -#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register */ -#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register */ -#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register */ -#define MPU_RASR_ATTRS_Pos 16 /*!< 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 28 /*!< 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 24 /*!< 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 19 /*!< 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 18 /*!< 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 17 /*!< 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 16 /*!< 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 8 /*!< 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 1 /*!< 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 0 /*!< 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 -{ - __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< 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 25 /*!< 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 24 /*!< 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 19 /*!< 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 18 /*!< 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 17 /*!< 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 16 /*!< 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 5 /*!< 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 3 /*!< 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 2 /*!< 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 1 /*!< 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 0 /*!< 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 */ -#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register */ -#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< 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 18 /*!< 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 17 /*!< 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 16 /*!< 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 10 /*!< 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 9 /*!< 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 8 /*!< 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 7 /*!< 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 6 /*!< 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 5 /*!< 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 4 /*!< 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 0 /*!< 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_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 == 1) - #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 - - The function 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)0x07); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ - SCB->AIRCR = reg_value; -} - - -/** \brief Get Priority Grouping - - The function 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 ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ -} - - -/** \brief Enable External Interrupt - - The function 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)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ -} - - -/** \brief Disable External Interrupt - - The function 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)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ -} - - -/** \brief Get Pending Interrupt - - The function 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)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ -} - - -/** \brief Set Pending Interrupt - - The function 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)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ -} - - -/** \brief Clear Pending Interrupt - - The function 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)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ -} - - -/** \brief Get Active Interrupt - - The function 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)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ -} - - -/** \brief Set Interrupt Priority - - The function 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(IRQn < 0) { - SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ - else { - NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ -} - - -/** \brief Get Interrupt Priority - - The function 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(IRQn < 0) { - return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ - else { - return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ -} - - -/** \brief Encode Priority - - The function 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 samllest 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 & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - return ( - ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | - ((SubPriority & ((1 << (SubPriorityBits )) - 1))) - ); -} - - -/** \brief Decode Priority - - The function 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 samllest 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* pPreemptPriority, uint32_t* pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); - *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); -} - - -/** \brief System Reset - - The function 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 = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - while(1); /* wait until reset */ -} - -/*@} 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 == 0) - -/** \brief System Tick Configuration - - The function 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 - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ - - SysTick->LOAD = ticks - 1; /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0; /* 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 (0); /* 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 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** \brief ITM Send Character - - The function 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) && /* ITM enabled */ - (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0].u32 == 0); - ITM->PORT[0].u8 = (uint8_t) ch; - } - return (ch); -} - - -/** \brief ITM Receive Character - - The function 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 - - The function 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 */ - -#endif /* __CORE_CM3_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ - -#ifdef __cplusplus -} -#endif diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cmFunc.h b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cmFunc.h deleted file mode 100644 index 2c2af69..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cmFunc.h +++ /dev/null @@ -1,637 +0,0 @@ -/**************************************************************************//** - * @file core_cmFunc.h - * @brief CMSIS Cortex-M Core Function Access Header File - * @version V3.30 - * @date 17. February 2014 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2009 - 2014 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 __CORE_CMFUNC_H -#define __CORE_CMFUNC_H - - -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions - @{ - */ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -#if (__ARMCC_VERSION < 400677) - #error "Please use ARM Compiler Toolchain V4.0.677 or later!" -#endif - -/* intrinsic void __enable_irq(); */ -/* intrinsic void __disable_irq(); */ - -/** \brief Get Control Register - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 >= 0x03) - -/** \brief Enable FIQ - - This function 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 - - This function 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 - - This function 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 - - This function 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 & 0xff); -} - - -/** \brief Get Fault Mask - - This function 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 - - This function 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 >= 0x03) */ - - -#if (__CORTEX_M == 0x04) - -/** \brief Get FPSCR - - This function 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 == 1) && (__FPU_USED == 1) - register uint32_t __regfpscr __ASM("fpscr"); - return(__regfpscr); -#else - return(0); -#endif -} - - -/** \brief Set FPSCR - - This function 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 == 1) && (__FPU_USED == 1) - register uint32_t __regfpscr __ASM("fpscr"); - __regfpscr = (fpscr); -#endif -} - -#endif /* (__CORTEX_M == 0x04) */ - - -#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/** \brief Enable IRQ Interrupts - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 >= 0x03) - -/** \brief Enable FIQ - - This function 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 - - This function 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 - - This function 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_max" : "=r" (result) ); - return(result); -} - - -/** \brief Set Base Priority - - This function 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 Get Fault Mask - - This function 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 - - This function 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 >= 0x03) */ - - -#if (__CORTEX_M == 0x04) - -/** \brief Get FPSCR - - This function 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 == 1) && (__FPU_USED == 1) - 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 - - This function 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 == 1) && (__FPU_USED == 1) - /* Empty asm statement works as a scheduling barrier */ - __ASM volatile (""); - __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc"); - __ASM volatile (""); -#endif -} - -#endif /* (__CORTEX_M == 0x04) */ - - -#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ -#include - - -#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ -/* TI CCS specific functions */ -#include - - -#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ -/* TASKING carm specific functions */ -/* - * 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. - */ - - -#elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/ -/* Cosmic specific functions */ -#include - -#endif - -/*@} end of CMSIS_Core_RegAccFunctions */ - -#endif /* __CORE_CMFUNC_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cmInstr.h b/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cmInstr.h deleted file mode 100644 index d2ec262..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/CMSIS/core_cmInstr.h +++ /dev/null @@ -1,687 +0,0 @@ -/**************************************************************************//** - * @file core_cmInstr.h - * @brief CMSIS Cortex-M Core Instruction Access Header File - * @version V3.30 - * @date 17. February 2014 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2009 - 2014 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 __CORE_CMINSTR_H -#define __CORE_CMINSTR_H - - -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions - @{ -*/ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -#if (__ARMCC_VERSION < 400677) - #error "Please use ARM Compiler Toolchain V4.0.677 or later!" -#endif - - -/** \brief No Operation - - No Operation does nothing. This instruction can be used for code alignment purposes. - */ -#define __NOP __nop - - -/** \brief Wait For Interrupt - - 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 - - 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 - - Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV __sev - - -/** \brief Instruction Synchronization Barrier - - 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() __isb(0xF) - - -/** \brief Data Synchronization Barrier - - This function acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -#define __DSB() __dsb(0xF) - - -/** \brief Data Memory Barrier - - This function ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. - */ -#define __DMB() __dmb(0xF) - - -/** \brief Reverse byte order (32 bit) - - This function 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) - - This function 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 - - This function 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) - - This function 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 - - This function 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) - - -#if (__CORTEX_M >= 0x03) - -/** \brief Reverse bit order of value - - This function reverses the bit order of the given value. - - \param [in] value Value to reverse - \return Reversed value - */ -#define __RBIT __rbit - - -/** \brief LDR Exclusive (8 bit) - - This function performs a exclusive LDR command for 8 bit value. - - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) - - -/** \brief LDR Exclusive (16 bit) - - This function performs a exclusive LDR command for 16 bit values. - - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) - - -/** \brief LDR Exclusive (32 bit) - - This function performs a exclusive LDR command for 32 bit values. - - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) - - -/** \brief STR Exclusive (8 bit) - - This function performs a exclusive STR command 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(value, ptr) __strex(value, ptr) - - -/** \brief STR Exclusive (16 bit) - - This function performs a exclusive STR command 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(value, ptr) __strex(value, ptr) - - -/** \brief STR Exclusive (32 bit) - - This function performs a exclusive STR command 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(value, ptr) __strex(value, ptr) - - -/** \brief Remove the exclusive lock - - This function removes the exclusive lock which is created by LDREX. - - */ -#define __CLREX __clrex - - -/** \brief Signed Saturate - - This function 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 - - This function 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 Count leading zeros - - This function 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 - -#endif /* (__CORTEX_M >= 0x03) */ - - -#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/* Define macros for porting to both thumb1 and thumb2. - * For thumb1, use low register (r0-r7), specified by constrant "l" - * Otherwise, use general registers, specified by constrant "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 - - 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 - - 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 - - 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 - - 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 - - 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"); -} - - -/** \brief Data Synchronization Barrier - - This function 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"); -} - - -/** \brief Data Memory Barrier - - This function 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"); -} - - -/** \brief Reverse byte order (32 bit) - - This function 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) - - This function 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 - - This function 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 - uint32_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) - - This function 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 << (32 - op2)); -} - - -/** \brief Breakpoint - - This function 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) - - -#if (__CORTEX_M >= 0x03) - -/** \brief Reverse bit order of value - - This function 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; - - __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - - -/** \brief LDR Exclusive (8 bit) - - This function performs a exclusive LDR command 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) - - This function performs a exclusive LDR command 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) - - This function performs a exclusive LDR command 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) - - This function performs a exclusive STR command 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) - - This function performs a exclusive STR command 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) - - This function performs a exclusive STR command 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 - - This function removes the exclusive lock which is created by LDREX. - - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void) -{ - __ASM volatile ("clrex" ::: "memory"); -} - - -/** \brief Signed Saturate - - This function 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 - - This function 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 Count leading zeros - - This function 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 - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value) -{ - uint32_t result; - - __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) ); - return ((uint8_t) result); /* Add explicit type cast here */ -} - -#endif /* (__CORTEX_M >= 0x03) */ - - -#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ -#include - - -#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ -/* TI CCS specific functions */ -#include - - -#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ -/* TASKING carm specific functions */ -/* - * 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. - */ - - -#elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/ -/* Cosmic specific functions */ -#include - -#endif - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - -#endif /* __CORE_CMINSTR_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_adc.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_adc.h deleted file mode 100644 index 5c87996..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_adc.h +++ /dev/null @@ -1,367 +0,0 @@ -/*! - \file gd32f10x_adc.h - \brief definitions for the ADC - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10x_ADC_H -#define GD32F10x_ADC_H - -#include "gd32f10x.h" - -/* ADC definitions */ -#define ADC0 ADC_BASE -#define ADC1 (ADC_BASE + 0x400U) -#define ADC2 (ADC_BASE + 0x1800U) - -/* registers definitions */ -#define ADC_STAT(adcx) REG32((adcx) + 0x00U) /*!< ADC status register */ -#define ADC_CTL0(adcx) REG32((adcx) + 0x04U) /*!< ADC control register 0 */ -#define ADC_CTL1(adcx) REG32((adcx) + 0x08U) /*!< ADC control register 1 */ -#define ADC_SAMPT0(adcx) REG32((adcx) + 0x0CU) /*!< ADC sampling time register 0 */ -#define ADC_SAMPT1(adcx) REG32((adcx) + 0x10U) /*!< ADC sampling time register 1 */ -#define ADC_IOFF0(adcx) REG32((adcx) + 0x14U) /*!< ADC inserted channel data offset register 0 */ -#define ADC_IOFF1(adcx) REG32((adcx) + 0x18U) /*!< ADC inserted channel data offset register 1 */ -#define ADC_IOFF2(adcx) REG32((adcx) + 0x1CU) /*!< ADC inserted channel data offset register 2 */ -#define ADC_IOFF3(adcx) REG32((adcx) + 0x20U) /*!< ADC inserted channel data offset register 3 */ -#define ADC_WDHT(adcx) REG32((adcx) + 0x24U) /*!< ADC watchdog high threshold register */ -#define ADC_WDLT(adcx) REG32((adcx) + 0x28U) /*!< ADC watchdog low threshold register */ -#define ADC_RSQ0(adcx) REG32((adcx) + 0x2CU) /*!< ADC regular sequence register 0 */ -#define ADC_RSQ1(adcx) REG32((adcx) + 0x30U) /*!< ADC regular sequence register 1 */ -#define ADC_RSQ2(adcx) REG32((adcx) + 0x34U) /*!< ADC regular sequence register 2 */ -#define ADC_ISQ(adcx) REG32((adcx) + 0x38U) /*!< ADC inserted sequence register */ -#define ADC_IDATA0(adcx) REG32((adcx) + 0x3CU) /*!< ADC inserted data register 0 */ -#define ADC_IDATA1(adcx) REG32((adcx) + 0x40U) /*!< ADC inserted data register 1 */ -#define ADC_IDATA2(adcx) REG32((adcx) + 0x44U) /*!< ADC inserted data register 2 */ -#define ADC_IDATA3(adcx) REG32((adcx) + 0x48U) /*!< ADC inserted data register 3 */ -#define ADC_RDATA(adcx) REG32((adcx) + 0x4CU) /*!< ADC regular data register */ - -/* bits definitions */ -/* ADC_STAT */ -#define ADC_STAT_WDE BIT(0) /*!< analog watchdog event flag */ -#define ADC_STAT_EOC BIT(1) /*!< end of conversion */ -#define ADC_STAT_EOIC BIT(2) /*!< inserted channel end of conversion */ -#define ADC_STAT_STIC BIT(3) /*!< inserted channel start flag */ -#define ADC_STAT_STRC BIT(4) /*!< regular channel start flag */ - -/* ADC_CTL0 */ -#define ADC_CTL0_WDCHSEL BITS(0,4) /*!< analog watchdog channel select bits */ -#define ADC_CTL0_EOCIE BIT(5) /*!< interrupt enable for EOC */ -#define ADC_CTL0_WDEIE BIT(6) /*!< analog watchdog interrupt enable */ -#define ADC_CTL0_EOICIE BIT(7) /*!< interrupt enable for inserted channels */ -#define ADC_CTL0_SM BIT(8) /*!< scan mode */ -#define ADC_CTL0_WDSC BIT(9) /*!< when in scan mode, analog watchdog is effective on a single channel */ -#define ADC_CTL0_ICA BIT(10) /*!< automatic inserted group conversion */ -#define ADC_CTL0_DISRC BIT(11) /*!< discontinuous mode on regular channels */ -#define ADC_CTL0_DISIC BIT(12) /*!< discontinuous mode on inserted channels */ -#define ADC_CTL0_DISNUM BITS(13,15) /*!< discontinuous mode channel count */ -#define ADC_CTL0_SYNCM BITS(16,19) /*!< sync mode selection */ -#define ADC_CTL0_IWDEN BIT(22) /*!< analog watchdog enable on inserted channels */ -#define ADC_CTL0_RWDEN BIT(23) /*!< analog watchdog enable on regular channels */ -#define ADC_CTL0_DRES BITS(24,25) /*!< ADC data resolution */ - -/* ADC_CTL1 */ -#define ADC_CTL1_ADCON BIT(0) /*!< ADC converter on */ -#define ADC_CTL1_CTN BIT(1) /*!< continuous conversion */ -#define ADC_CTL1_CLB BIT(2) /*!< ADC calibration */ -#define ADC_CTL1_RSTCLB BIT(3) /*!< reset calibration */ -#define ADC_CTL1_DMA BIT(8) /*!< direct memory access mode */ -#define ADC_CTL1_DAL BIT(11) /*!< data alignment */ -#define ADC_CTL1_ETSIC BITS(12,14) /*!< external trigger select for inserted channel */ -#define ADC_CTL1_ETEIC BIT(15) /*!< external trigger enable for inserted channel */ -#define ADC_CTL1_ETSRC BITS(17,19) /*!< external trigger select for regular channel */ -#define ADC_CTL1_ETERC BIT(20) /*!< external trigger conversion mode for inserted channels */ -#define ADC_CTL1_SWICST BIT(21) /*!< start on inserted channel */ -#define ADC_CTL1_SWRCST BIT(22) /*!< start on regular channel */ -#define ADC_CTL1_TSVREN BIT(23) /*!< channel 16 and 17 enable of ADC0 */ - -/* ADC_SAMPTx x=0..1 */ -#define ADC_SAMPTX_SPTN BITS(0,2) /*!< channel n sample time selection */ - -/* ADC_IOFFx x=0..3 */ -#define ADC_IOFFX_IOFF BITS(0,11) /*!< data offset for inserted channel x */ - -/* ADC_WDHT */ -#define ADC_WDHT_WDHT BITS(0,11) /*!< analog watchdog high threshold */ - -/* ADC_WDLT */ -#define ADC_WDLT_WDLT BITS(0,11) /*!< analog watchdog low threshold */ - -/* ADC_RSQx x=0..2 */ -#define ADC_RSQX_RSQN BITS(0,4) /*!< nth conversion in regular sequence */ -#define ADC_RSQ0_RL BITS(20,23) /*!< regular channel sequence length */ - -/* ADC_ISQ */ -#define ADC_ISQ_ISQN BITS(0,4) /*!< nth conversion in inserted sequence */ -#define ADC_ISQ_IL BITS(20,21) /*!< inserted sequence length */ - -/* ADC_IDATAx x=0..3*/ -#define ADC_IDATAX_IDATAN BITS(0,15) /*!< inserted data n */ - -/* ADC_RDATA */ -#define ADC_RDATA_RDATA BITS(0,15) /*!< regular data */ -#define ADC_RDATA_ADC1RDTR BITS(16,31) /*!< ADC1 regular channel data */ - -/* constants definitions */ -/* adc_stat register value */ -#define ADC_FLAG_WDE ADC_STAT_WDE /*!< analog watchdog event flag */ -#define ADC_FLAG_EOC ADC_STAT_EOC /*!< end of conversion */ -#define ADC_FLAG_EOIC ADC_STAT_EOIC /*!< inserted channel end of conversion */ -#define ADC_FLAG_STIC ADC_STAT_STIC /*!< inserted channel start flag */ -#define ADC_FLAG_STRC ADC_STAT_STRC /*!< regular channel start flag */ - -/* adc_ctl0 register value */ -#define CTL0_DISNUM(regval) (BITS(13,15) & ((uint32_t)(regval) << 13)) /*!< write value to ADC_CTL0_DISNUM bit field */ - -/* scan mode */ -#define ADC_SCAN_MODE ADC_CTL0_SM /*!< scan mode */ - -/* inserted channel group convert automatically */ -#define ADC_INSERTED_CHANNEL_AUTO ADC_CTL0_ICA /*!< inserted channel group convert automatically */ - -/* ADC sync mode */ -#define CTL0_SYNCM(regval) (BITS(16,19) & ((uint32_t)(regval) << 16)) /*!< write value to ADC_CTL0_SYNCM bit field */ -#define ADC_MODE_FREE CTL0_SYNCM(0) /*!< all the ADCs work independently */ -#define ADC_DAUL_REGULAL_PARALLEL_INSERTED_PARALLEL CTL0_SYNCM(1) /*!< ADC0 and ADC1 work in combined regular parallel + inserted parallel mode */ -#define ADC_DAUL_REGULAL_PARALLEL_INSERTED_ROTATION CTL0_SYNCM(2) /*!< ADC0 and ADC1 work in combined regular parallel + trigger rotation mode */ -#define ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_FAST CTL0_SYNCM(3) /*!< ADC0 and ADC1 work in combined inserted parallel + follow-up fast mode */ -#define ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_SLOW CTL0_SYNCM(4) /*!< ADC0 and ADC1 work in combined inserted parallel + follow-up slow mode */ -#define ADC_DAUL_INSERTED_PARALLEL CTL0_SYNCM(5) /*!< ADC0 and ADC1 work in inserted parallel mode only */ -#define ADC_DAUL_REGULAL_PARALLEL CTL0_SYNCM(6) /*!< ADC0 and ADC1 work in regular parallel mode only */ -#define ADC_DAUL_REGULAL_FOLLOWUP_FAST CTL0_SYNCM(7) /*!< ADC0 and ADC1 work in follow-up fast mode only */ -#define ADC_DAUL_REGULAL_FOLLOWUP_SLOW CTL0_SYNCM(8) /*!< ADC0 and ADC1 work in follow-up slow mode only */ -#define ADC_DAUL_INSERTED_TRIGGER_ROTATION CTL0_SYNCM(9) /*!< ADC0 and ADC1 work in trigger rotation mode only */ - -/* adc_ctl1 register value */ -#define ADC_DATAALIGN_RIGHT ((uint32_t)0x00000000U) /*!< LSB alignment */ -#define ADC_DATAALIGN_LEFT ADC_CTL1_DAL /*!< MSB alignment */ - -/* continuous mode */ -#define ADC_CONTINUOUS_MODE ADC_CTL1_CTN /*!< continuous mode */ - -/* external trigger select for regular channel */ -#define CTL1_ETSRC(regval) (BITS(17,19) & ((uint32_t)(regval) << 17)) /*!< write value to ADC_CTL1_ETSRC bit field */ -/* for ADC0 and ADC1 regular channel */ -#define ADC0_1_EXTTRIG_REGULAR_T0_CH0 CTL1_ETSRC(0) /*!< TIMER0 CH0 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T0_CH1 CTL1_ETSRC(1) /*!< TIMER0 CH1 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T0_CH2 CTL1_ETSRC(2) /*!< TIMER0 CH2 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T1_CH1 CTL1_ETSRC(3) /*!< TIMER1 CH1 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T2_TRGO CTL1_ETSRC(4) /*!< TIMER2 TRGO event select */ -#define ADC0_1_EXTTRIG_REGULAR_T3_CH3 CTL1_ETSRC(5) /*!< TIMER3 CH3 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T7_TRGO CTL1_ETSRC(6) /*!< TIMER7 TRGO event select */ -#define ADC0_1_EXTTRIG_REGULAR_EXTI_11 CTL1_ETSRC(6) /*!< external interrupt line 11 */ -#define ADC0_1_2_EXTTRIG_REGULAR_NONE CTL1_ETSRC(7) /*!< software trigger */ -/* for ADC2 regular channel */ -#define ADC2_EXTTRIG_REGULAR_T2_CH0 CTL1_ETSRC(0) /*!< TIMER2 CH0 event select */ -#define ADC2_EXTTRIG_REGULAR_T1_CH2 CTL1_ETSRC(1) /*!< TIMER1 CH2 event select */ -#define ADC2_EXTTRIG_REGULAR_T0_CH2 CTL1_ETSRC(2) /*!< TIMER0 CH2 event select */ -#define ADC2_EXTTRIG_REGULAR_T7_CH0 CTL1_ETSRC(3) /*!< TIMER7 CH0 event select */ -#define ADC2_EXTTRIG_REGULAR_T7_TRGO CTL1_ETSRC(4) /*!< TIMER7 TRGO event select */ -#define ADC2_EXTTRIG_REGULAR_T4_CH0 CTL1_ETSRC(5) /*!< TIMER4 CH0 event select */ -#define ADC2_EXTTRIG_REGULAR_T4_CH2 CTL1_ETSRC(6) /*!< TIMER4 CH2 event select */ - -/* external trigger mode for inserted channel */ -#define CTL1_ETSIC(regval) (BITS(12,14) & ((uint32_t)(regval) << 12)) /*!< write value to ADC_CTL1_ETSIC bit field */ -/* for ADC0 and ADC1 inserted channel */ -#define ADC0_1_EXTTRIG_INSERTED_T0_TRGO CTL1_ETSIC(0) /*!< TIMER0 TRGO event select */ -#define ADC0_1_EXTTRIG_INSERTED_T0_CH3 CTL1_ETSIC(1) /*!< TIMER0 CH3 event select */ -#define ADC0_1_EXTTRIG_INSERTED_T1_TRGO CTL1_ETSIC(2) /*!< TIMER1 TRGO event select */ -#define ADC0_1_EXTTRIG_INSERTED_T1_CH0 CTL1_ETSIC(3) /*!< TIMER1 CH0 event select */ -#define ADC0_1_EXTTRIG_INSERTED_T2_CH3 CTL1_ETSIC(4) /*!< TIMER2 CH3 event select */ -#define ADC0_1_EXTTRIG_INSERTED_T3_TRGO CTL1_ETSIC(5) /*!< TIMER3 TRGO event select */ -#define ADC0_1_EXTTRIG_INSERTED_EXTI_15 CTL1_ETSIC(6) /*!< external interrupt line 15 */ -#define ADC0_1_EXTTRIG_INSERTED_T7_CH3 CTL1_ETSIC(6) /*!< TIMER7 CH3 event select */ -#define ADC0_1_2_EXTTRIG_INSERTED_NONE CTL1_ETSIC(7) /*!< software trigger */ -/* for ADC2 inserted channel */ -#define ADC2_EXTTRIG_INSERTED_T0_TRGO CTL1_ETSIC(0) /*!< TIMER0 TRGO event select */ -#define ADC2_EXTTRIG_INSERTED_T0_CH3 CTL1_ETSIC(1) /*!< TIMER0 CH3 event select */ -#define ADC2_EXTTRIG_INSERTED_T3_CH2 CTL1_ETSIC(2) /*!< TIMER3 CH2 event select */ -#define ADC2_EXTTRIG_INSERTED_T7_CH1 CTL1_ETSIC(3) /*!< TIMER7 CH1 event select */ -#define ADC2_EXTTRIG_INSERTED_T7_CH3 CTL1_ETSIC(4) /*!< TIMER7 CH3 event select */ -#define ADC2_EXTTRIG_INSERTED_T4_TRGO CTL1_ETSIC(5) /*!< TIMER4 TRGO event select */ -#define ADC2_EXTTRIG_INSERTED_T4_CH3 CTL1_ETSIC(6) /*!< TIMER4 CH3 event select */ - -/* adc_samptx register value */ -#define SAMPTX_SPT(regval) (BITS(0,2) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_SAMPTX_SPT bit field */ -#define ADC_SAMPLETIME_1POINT5 SAMPTX_SPT(0) /*!< 1.5 sampling cycles */ -#define ADC_SAMPLETIME_7POINT5 SAMPTX_SPT(1) /*!< 7.5 sampling cycles */ -#define ADC_SAMPLETIME_13POINT5 SAMPTX_SPT(2) /*!< 13.5 sampling cycles */ -#define ADC_SAMPLETIME_28POINT5 SAMPTX_SPT(3) /*!< 28.5 sampling cycles */ -#define ADC_SAMPLETIME_41POINT5 SAMPTX_SPT(4) /*!< 41.5 sampling cycles */ -#define ADC_SAMPLETIME_55POINT5 SAMPTX_SPT(5) /*!< 55.5 sampling cycles */ -#define ADC_SAMPLETIME_71POINT5 SAMPTX_SPT(6) /*!< 71.5 sampling cycles */ -#define ADC_SAMPLETIME_239POINT5 SAMPTX_SPT(7) /*!< 239.5 sampling cycles */ - -/* adc_ioffx register value */ -#define IOFFX_IOFF(regval) (BITS(0,11) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_IOFFX_IOFF bit field */ - -/* adc_wdht register value */ -#define WDHT_WDHT(regval) (BITS(0,11) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_WDHT_WDHT bit field */ - -/* adc_wdlt register value */ -#define WDLT_WDLT(regval) (BITS(0,11) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_WDLT_WDLT bit field */ - -/* adc_rsqx register value */ -#define RSQ0_RL(regval) (BITS(20,23) & ((uint32_t)(regval) << 20)) /*!< write value to ADC_RSQ0_RL bit field */ - -/* adc_isq register value */ -#define ISQ_IL(regval) (BITS(20,21) & ((uint32_t)(regval) << 20)) /*!< write value to ADC_ISQ_IL bit field */ - -/* ADC channel group definitions */ -#define ADC_REGULAR_CHANNEL ((uint8_t)0x01U) /*!< adc regular channel group */ -#define ADC_INSERTED_CHANNEL ((uint8_t)0x02U) /*!< adc inserted channel group */ -#define ADC_REGULAR_INSERTED_CHANNEL ((uint8_t)0x03U) /*!< both regular and inserted channel group */ - -#define ADC_CHANNEL_DISCON_DISABLE ((uint8_t)0x04U) /*!< disable discontinuous mode of regular & inserted channel */ - -/* ADC inserted channel definitions */ -#define ADC_INSERTED_CHANNEL_0 ((uint8_t)0x00U) /*!< adc inserted channel 0 */ -#define ADC_INSERTED_CHANNEL_1 ((uint8_t)0x01U) /*!< adc inserted channel 1 */ -#define ADC_INSERTED_CHANNEL_2 ((uint8_t)0x02U) /*!< adc inserted channel 2 */ -#define ADC_INSERTED_CHANNEL_3 ((uint8_t)0x03U) /*!< adc inserted channel 3 */ - -/* ADC channel definitions */ -#define ADC_CHANNEL_0 ((uint8_t)0x00U) /*!< ADC channel 0 */ -#define ADC_CHANNEL_1 ((uint8_t)0x01U) /*!< ADC channel 1 */ -#define ADC_CHANNEL_2 ((uint8_t)0x02U) /*!< ADC channel 2 */ -#define ADC_CHANNEL_3 ((uint8_t)0x03U) /*!< ADC channel 3 */ -#define ADC_CHANNEL_4 ((uint8_t)0x04U) /*!< ADC channel 4 */ -#define ADC_CHANNEL_5 ((uint8_t)0x05U) /*!< ADC channel 5 */ -#define ADC_CHANNEL_6 ((uint8_t)0x06U) /*!< ADC channel 6 */ -#define ADC_CHANNEL_7 ((uint8_t)0x07U) /*!< ADC channel 7 */ -#define ADC_CHANNEL_8 ((uint8_t)0x08U) /*!< ADC channel 8 */ -#define ADC_CHANNEL_9 ((uint8_t)0x09U) /*!< ADC channel 9 */ -#define ADC_CHANNEL_10 ((uint8_t)0x0AU) /*!< ADC channel 10 */ -#define ADC_CHANNEL_11 ((uint8_t)0x0BU) /*!< ADC channel 11 */ -#define ADC_CHANNEL_12 ((uint8_t)0x0CU) /*!< ADC channel 12 */ -#define ADC_CHANNEL_13 ((uint8_t)0x0DU) /*!< ADC channel 13 */ -#define ADC_CHANNEL_14 ((uint8_t)0x0EU) /*!< ADC channel 14 */ -#define ADC_CHANNEL_15 ((uint8_t)0x0FU) /*!< ADC channel 15 */ -#define ADC_CHANNEL_16 ((uint8_t)0x10U) /*!< ADC channel 16 */ -#define ADC_CHANNEL_17 ((uint8_t)0x11U) /*!< ADC channel 17 */ - -/* ADC interrupt */ -#define ADC_INT_WDE ADC_STAT_WDE /*!< analog watchdog event interrupt */ -#define ADC_INT_EOC ADC_STAT_EOC /*!< end of group conversion interrupt */ -#define ADC_INT_EOIC ADC_STAT_EOIC /*!< end of inserted group conversion interrupt */ - -/* ADC interrupt flag */ -#define ADC_INT_FLAG_WDE ADC_STAT_WDE /*!< analog watchdog event interrupt flag */ -#define ADC_INT_FLAG_EOC ADC_STAT_EOC /*!< end of group conversion interrupt flag */ -#define ADC_INT_FLAG_EOIC ADC_STAT_EOIC /*!< end of inserted group conversion interrupt flag */ - -/* function declarations */ -/* initialization config */ -/* reset ADC */ -void adc_deinit(uint32_t adc_periph); -/* configure the ADC sync mode */ -void adc_mode_config(uint32_t mode); -/* enable or disable ADC special function */ -void adc_special_function_config(uint32_t adc_periph, uint32_t function, ControlStatus newvalue); -/* configure ADC data alignment */ -void adc_data_alignment_config(uint32_t adc_periph, uint32_t data_alignment); -/* enable ADC interface */ -void adc_enable(uint32_t adc_periph); -/* disable ADC interface */ -void adc_disable(uint32_t adc_periph); -/* ADC calibration and reset calibration */ -void adc_calibration_enable(uint32_t adc_periph); -/* enable the temperature sensor and Vrefint channel */ -void adc_tempsensor_vrefint_enable(void); -/* disable the temperature sensor and Vrefint channel */ -void adc_tempsensor_vrefint_disable(void); - -/* DMA config */ -/* enable DMA request */ -void adc_dma_mode_enable(uint32_t adc_periph); -/* disable DMA request */ -void adc_dma_mode_disable(uint32_t adc_periph); - -/* regular group and inserted group config */ -/* configure ADC discontinuous mode */ -void adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length); - -/* configure the length of regular channel group or inserted channel group */ -void adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t length); -/* configure ADC regular channel */ -void adc_regular_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time); -/* configure ADC inserted channel */ -void adc_inserted_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time); -/* configure ADC inserted channel offset */ -void adc_inserted_channel_offset_config(uint32_t adc_periph, uint8_t inserted_channel, uint16_t offset); - -/* configure ADC external trigger source */ -void adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t external_trigger_source); -/* configure ADC external trigger */ -void adc_external_trigger_config(uint32_t adc_periph, uint8_t adc_channel_group, ControlStatus newvalue); -/* enable ADC software trigger */ -void adc_software_trigger_enable(uint32_t adc_periph, uint8_t adc_channel_group); - -/* get channel data */ -/* read ADC regular group data register */ -uint16_t adc_regular_data_read(uint32_t adc_periph); -/* read ADC inserted group data register */ -uint16_t adc_inserted_data_read(uint32_t adc_periph, uint8_t inserted_channel); -/* read the last ADC0 and ADC1 conversion result data in sync mode */ -uint32_t adc_sync_mode_convert_value_read(void); - -/* watchdog config */ -/* configure ADC analog watchdog single channel */ -void adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel); -/* configure ADC analog watchdog group channel */ -void adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group); -/* disable ADC analog watchdog */ -void adc_watchdog_disable(uint32_t adc_periph); -/* configure ADC analog watchdog threshold */ -void adc_watchdog_threshold_config(uint32_t adc_periph, uint16_t low_threshold, uint16_t high_threshold); - -/* interrupt & flag functions */ -/* get the ADC flag bits */ -FlagStatus adc_flag_get(uint32_t adc_periph, uint32_t adc_flag); -/* clear the ADC flag bits */ -void adc_flag_clear(uint32_t adc_periph, uint32_t adc_flag); -/* get the bit state of ADCx software start conversion */ -FlagStatus adc_regular_software_startconv_flag_get(uint32_t adc_periph); -/* get the bit state of ADCx software inserted channel start conversion */ -FlagStatus adc_inserted_software_startconv_flag_get(uint32_t adc_periph); -/* get the ADC interrupt bits */ -FlagStatus adc_interrupt_flag_get(uint32_t adc_periph, uint32_t adc_interrupt); -/* clear the ADC flag */ -void adc_interrupt_flag_clear(uint32_t adc_periph, uint32_t adc_interrupt); -/* enable ADC interrupt */ -void adc_interrupt_enable(uint32_t adc_periph, uint32_t adc_interrupt); -/* disable ADC interrupt */ -void adc_interrupt_disable(uint32_t adc_periph, uint32_t adc_interrupt); - -#endif /* GD32F10x_ADC_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_bkp.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_bkp.h deleted file mode 100644 index 79c0aa0..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_bkp.h +++ /dev/null @@ -1,229 +0,0 @@ -/*! - \file gd32f10x_bkp.h - \brief definitions for the BKP - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_BKP_H -#define GD32F10X_BKP_H - -#include "gd32f10x.h" - -/* BKP definitions */ -#define BKP BKP_BASE /*!< BKP base address */ - -/* registers definitions */ -#define BKP_DATA0 REG16((BKP) + 0x04U) /*!< BKP data register 0 */ -#define BKP_DATA1 REG16((BKP) + 0x08U) /*!< BKP data register 1 */ -#define BKP_DATA2 REG16((BKP) + 0x0CU) /*!< BKP data register 2 */ -#define BKP_DATA3 REG16((BKP) + 0x10U) /*!< BKP data register 3 */ -#define BKP_DATA4 REG16((BKP) + 0x14U) /*!< BKP data register 4 */ -#define BKP_DATA5 REG16((BKP) + 0x18U) /*!< BKP data register 5 */ -#define BKP_DATA6 REG16((BKP) + 0x1CU) /*!< BKP data register 6 */ -#define BKP_DATA7 REG16((BKP) + 0x20U) /*!< BKP data register 7 */ -#define BKP_DATA8 REG16((BKP) + 0x24U) /*!< BKP data register 8 */ -#define BKP_DATA9 REG16((BKP) + 0x28U) /*!< BKP data register 9 */ -#define BKP_DATA10 REG16((BKP) + 0x40U) /*!< BKP data register 10 */ -#define BKP_DATA11 REG16((BKP) + 0x44U) /*!< BKP data register 11 */ -#define BKP_DATA12 REG16((BKP) + 0x48U) /*!< BKP data register 12 */ -#define BKP_DATA13 REG16((BKP) + 0x4CU) /*!< BKP data register 13 */ -#define BKP_DATA14 REG16((BKP) + 0x50U) /*!< BKP data register 14 */ -#define BKP_DATA15 REG16((BKP) + 0x54U) /*!< BKP data register 15 */ -#define BKP_DATA16 REG16((BKP) + 0x58U) /*!< BKP data register 16 */ -#define BKP_DATA17 REG16((BKP) + 0x5CU) /*!< BKP data register 17 */ -#define BKP_DATA18 REG16((BKP) + 0x60U) /*!< BKP data register 18 */ -#define BKP_DATA19 REG16((BKP) + 0x64U) /*!< BKP data register 19 */ -#define BKP_DATA20 REG16((BKP) + 0x68U) /*!< BKP data register 20 */ -#define BKP_DATA21 REG16((BKP) + 0x6CU) /*!< BKP data register 21 */ -#define BKP_DATA22 REG16((BKP) + 0x70U) /*!< BKP data register 22 */ -#define BKP_DATA23 REG16((BKP) + 0x74U) /*!< BKP data register 23 */ -#define BKP_DATA24 REG16((BKP) + 0x78U) /*!< BKP data register 24 */ -#define BKP_DATA25 REG16((BKP) + 0x7CU) /*!< BKP data register 25 */ -#define BKP_DATA26 REG16((BKP) + 0x80U) /*!< BKP data register 26 */ -#define BKP_DATA27 REG16((BKP) + 0x84U) /*!< BKP data register 27 */ -#define BKP_DATA28 REG16((BKP) + 0x88U) /*!< BKP data register 28 */ -#define BKP_DATA29 REG16((BKP) + 0x8CU) /*!< BKP data register 29 */ -#define BKP_DATA30 REG16((BKP) + 0x90U) /*!< BKP data register 30 */ -#define BKP_DATA31 REG16((BKP) + 0x94U) /*!< BKP data register 31 */ -#define BKP_DATA32 REG16((BKP) + 0x98U) /*!< BKP data register 32 */ -#define BKP_DATA33 REG16((BKP) + 0x9CU) /*!< BKP data register 33 */ -#define BKP_DATA34 REG16((BKP) + 0xA0U) /*!< BKP data register 34 */ -#define BKP_DATA35 REG16((BKP) + 0xA4U) /*!< BKP data register 35 */ -#define BKP_DATA36 REG16((BKP) + 0xA8U) /*!< BKP data register 36 */ -#define BKP_DATA37 REG16((BKP) + 0xACU) /*!< BKP data register 37 */ -#define BKP_DATA38 REG16((BKP) + 0xB0U) /*!< BKP data register 38 */ -#define BKP_DATA39 REG16((BKP) + 0xB4U) /*!< BKP data register 39 */ -#define BKP_DATA40 REG16((BKP) + 0xB8U) /*!< BKP data register 40 */ -#define BKP_DATA41 REG16((BKP) + 0xBCU) /*!< BKP data register 41 */ -#define BKP_OCTL REG16((BKP) + 0x2CU) /*!< RTC signal output control register */ -#define BKP_TPCTL REG16((BKP) + 0x30U) /*!< tamper pin control register */ -#define BKP_TPCS REG16((BKP) + 0x34U) /*!< tamper control and status register */ - -/* bits definitions */ -/* BKP_DATA */ -#define BKP_DATA BITS(0,15) /*!< backup data */ - -/* BKP_OCTL */ -#define BKP_OCTL_RCCV BITS(0,6) /*!< RTC clock calibration value */ -#define BKP_OCTL_COEN BIT(7) /*!< RTC clock calibration output enable */ -#define BKP_OCTL_ASOEN BIT(8) /*!< RTC alarm or second signal output enable */ -#define BKP_OCTL_ROSEL BIT(9) /*!< RTC output selection */ - -/* BKP_TPCTL */ -#define BKP_TPCTL_TPEN BIT(0) /*!< tamper detection enable */ -#define BKP_TPCTL_TPAL BIT(1) /*!< tamper pin active level */ - -/* BKP_TPCS */ -#define BKP_TPCS_TER BIT(0) /*!< tamper event reset */ -#define BKP_TPCS_TIR BIT(1) /*!< tamper interrupt reset */ -#define BKP_TPCS_TPIE BIT(2) /*!< tamper interrupt enable */ -#define BKP_TPCS_TEF BIT(8) /*!< tamper event flag */ -#define BKP_TPCS_TIF BIT(9) /*!< tamper interrupt flag */ - -/* constants definitions */ -/* BKP data register number */ -typedef enum -{ - BKP_DATA_0 = 1, /*!< BKP data register 0 */ - BKP_DATA_1, /*!< BKP data register 1 */ - BKP_DATA_2, /*!< BKP data register 2 */ - BKP_DATA_3, /*!< BKP data register 3 */ - BKP_DATA_4, /*!< BKP data register 4 */ - BKP_DATA_5, /*!< BKP data register 5 */ - BKP_DATA_6, /*!< BKP data register 6 */ - BKP_DATA_7, /*!< BKP data register 7 */ - BKP_DATA_8, /*!< BKP data register 8 */ - BKP_DATA_9, /*!< BKP data register 9 */ - BKP_DATA_10, /*!< BKP data register 10 */ - BKP_DATA_11, /*!< BKP data register 11 */ - BKP_DATA_12, /*!< BKP data register 12 */ - BKP_DATA_13, /*!< BKP data register 13 */ - BKP_DATA_14, /*!< BKP data register 14 */ - BKP_DATA_15, /*!< BKP data register 15 */ - BKP_DATA_16, /*!< BKP data register 16 */ - BKP_DATA_17, /*!< BKP data register 17 */ - BKP_DATA_18, /*!< BKP data register 18 */ - BKP_DATA_19, /*!< BKP data register 19 */ - BKP_DATA_20, /*!< BKP data register 20 */ - BKP_DATA_21, /*!< BKP data register 21 */ - BKP_DATA_22, /*!< BKP data register 22 */ - BKP_DATA_23, /*!< BKP data register 23 */ - BKP_DATA_24, /*!< BKP data register 24 */ - BKP_DATA_25, /*!< BKP data register 25 */ - BKP_DATA_26, /*!< BKP data register 26 */ - BKP_DATA_27, /*!< BKP data register 27 */ - BKP_DATA_28, /*!< BKP data register 28 */ - BKP_DATA_29, /*!< BKP data register 29 */ - BKP_DATA_30, /*!< BKP data register 30 */ - BKP_DATA_31, /*!< BKP data register 31 */ - BKP_DATA_32, /*!< BKP data register 32 */ - BKP_DATA_33, /*!< BKP data register 33 */ - BKP_DATA_34, /*!< BKP data register 34 */ - BKP_DATA_35, /*!< BKP data register 35 */ - BKP_DATA_36, /*!< BKP data register 36 */ - BKP_DATA_37, /*!< BKP data register 37 */ - BKP_DATA_38, /*!< BKP data register 38 */ - BKP_DATA_39, /*!< BKP data register 39 */ - BKP_DATA_40, /*!< BKP data register 40 */ - BKP_DATA_41, /*!< BKP data register 41 */ -}bkp_data_register_enum; - -/* BKP register */ -#define BKP_DATA0_9(number) REG16((BKP) + 0x04U + (number) * 0x04U) -#define BKP_DATA10_41(number) REG16((BKP) + 0x40U + ((number)-10U) * 0x04U) - -/* get data of BKP data register */ -#define BKP_DATA_GET(regval) GET_BITS((uint32_t)(regval), 0, 15) - -/* RTC clock calibration value */ -#define OCTL_RCCV(regval) (BITS(0,6) & ((uint32_t)(regval) << 0)) - -/* RTC output selection */ -#define RTC_OUTPUT_ALARM_PULSE ((uint16_t)0x0000U) /*!< RTC alarm pulse is selected as the RTC output */ -#define RTC_OUTPUT_SECOND_PULSE ((uint16_t)0x0200U) /*!< RTC second pulse is selected as the RTC output */ - -/* tamper pin active level */ -#define TAMPER_PIN_ACTIVE_HIGH ((uint16_t)0x0000U) /*!< the tamper pin is active high */ -#define TAMPER_PIN_ACTIVE_LOW ((uint16_t)0x0002U) /*!< the tamper pin is active low */ - -/* tamper flag */ -#define BKP_FLAG_TAMPER BKP_TPCS_TEF /*!< tamper event flag */ - -/* tamper interrupt flag */ -#define BKP_INT_FLAG_TAMPER BKP_TPCS_TIF /*!< tamper interrupt flag */ -/* function declarations */ -/* reset BKP registers */ -void bkp_deinit(void); -/* write BKP data register */ -void bkp_data_write(bkp_data_register_enum register_number, uint16_t data); -/* read BKP data register */ -uint16_t bkp_data_read(bkp_data_register_enum register_number); - -/* RTC related functions */ -/* enable RTC clock calibration output */ -void bkp_rtc_calibration_output_enable(void); -/* disable RTC clock calibration output */ -void bkp_rtc_calibration_output_disable(void); -/* enable RTC alarm or second signal output */ -void bkp_rtc_signal_output_enable(void); -/* disable RTC alarm or second signal output */ -void bkp_rtc_signal_output_disable(void); -/* select RTC output */ -void bkp_rtc_output_select(uint16_t outputsel); -/* set RTC clock calibration value */ -void bkp_rtc_calibration_value_set(uint8_t value); - -/* tamper pin related functions */ -/* enable tamper pin detection */ -void bkp_tamper_detection_enable(void); -/* disable tamper pin detection */ -void bkp_tamper_detection_disable(void); -/* set tamper pin active level */ -void bkp_tamper_active_level_set(uint16_t level); - -/* interrupt & flag functions */ -/* enable tamper interrupt */ -void bkp_interrupt_enable(void); -/* disable tamper interrupt */ -void bkp_interrupt_disable(void); -/* get tamper flag state */ -FlagStatus bkp_flag_get(void); -/* clear tamper flag state */ -void bkp_flag_clear(void); -/* get tamper interrupt flag state */ -FlagStatus bkp_interrupt_flag_get(void); -/* clear tamper interrupt flag state */ -void bkp_interrupt_flag_clear(void); - -#endif /* GD32F10X_BKP_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_can.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_can.h deleted file mode 100644 index 84167a5..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_can.h +++ /dev/null @@ -1,759 +0,0 @@ -/*! - \file gd32f10x_can.h - \brief definitions for the CAN - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2019-11-27, V2.1.1, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x - \version 2021-07-21, V2.2.1, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10x_CAN_H -#define GD32F10x_CAN_H - -#include "gd32f10x.h" - -/* CAN definitions */ -#define CAN0 CAN_BASE /*!< CAN0 base address */ -#define CAN1 (CAN0 + 0x00000400U) /*!< CAN1 base address */ - -/* registers definitions */ -#define CAN_CTL(canx) REG32((canx) + 0x00U) /*!< CAN control register */ -#define CAN_STAT(canx) REG32((canx) + 0x04U) /*!< CAN status register */ -#define CAN_TSTAT(canx) REG32((canx) + 0x08U) /*!< CAN transmit status register*/ -#define CAN_RFIFO0(canx) REG32((canx) + 0x0CU) /*!< CAN receive FIFO0 register */ -#define CAN_RFIFO1(canx) REG32((canx) + 0x10U) /*!< CAN receive FIFO1 register */ -#define CAN_INTEN(canx) REG32((canx) + 0x14U) /*!< CAN interrupt enable register */ -#define CAN_ERR(canx) REG32((canx) + 0x18U) /*!< CAN error register */ -#define CAN_BT(canx) REG32((canx) + 0x1CU) /*!< CAN bit timing register */ -#define CAN_TMI0(canx) REG32((canx) + 0x180U) /*!< CAN transmit mailbox0 identifier register */ -#define CAN_TMP0(canx) REG32((canx) + 0x184U) /*!< CAN transmit mailbox0 property register */ -#define CAN_TMDATA00(canx) REG32((canx) + 0x188U) /*!< CAN transmit mailbox0 data0 register */ -#define CAN_TMDATA10(canx) REG32((canx) + 0x18CU) /*!< CAN transmit mailbox0 data1 register */ -#define CAN_TMI1(canx) REG32((canx) + 0x190U) /*!< CAN transmit mailbox1 identifier register */ -#define CAN_TMP1(canx) REG32((canx) + 0x194U) /*!< CAN transmit mailbox1 property register */ -#define CAN_TMDATA01(canx) REG32((canx) + 0x198U) /*!< CAN transmit mailbox1 data0 register */ -#define CAN_TMDATA11(canx) REG32((canx) + 0x19CU) /*!< CAN transmit mailbox1 data1 register */ -#define CAN_TMI2(canx) REG32((canx) + 0x1A0U) /*!< CAN transmit mailbox2 identifier register */ -#define CAN_TMP2(canx) REG32((canx) + 0x1A4U) /*!< CAN transmit mailbox2 property register */ -#define CAN_TMDATA02(canx) REG32((canx) + 0x1A8U) /*!< CAN transmit mailbox2 data0 register */ -#define CAN_TMDATA12(canx) REG32((canx) + 0x1ACU) /*!< CAN transmit mailbox2 data1 register */ -#define CAN_RFIFOMI0(canx) REG32((canx) + 0x1B0U) /*!< CAN receive FIFO0 mailbox identifier register */ -#define CAN_RFIFOMP0(canx) REG32((canx) + 0x1B4U) /*!< CAN receive FIFO0 mailbox property register */ -#define CAN_RFIFOMDATA00(canx) REG32((canx) + 0x1B8U) /*!< CAN receive FIFO0 mailbox data0 register */ -#define CAN_RFIFOMDATA10(canx) REG32((canx) + 0x1BCU) /*!< CAN receive FIFO0 mailbox data1 register */ -#define CAN_RFIFOMI1(canx) REG32((canx) + 0x1C0U) /*!< CAN receive FIFO1 mailbox identifier register */ -#define CAN_RFIFOMP1(canx) REG32((canx) + 0x1C4U) /*!< CAN receive FIFO1 mailbox property register */ -#define CAN_RFIFOMDATA01(canx) REG32((canx) + 0x1C8U) /*!< CAN receive FIFO1 mailbox data0 register */ -#define CAN_RFIFOMDATA11(canx) REG32((canx) + 0x1CCU) /*!< CAN receive FIFO1 mailbox data1 register */ -#define CAN_FCTL(canx) REG32((canx) + 0x200U) /*!< CAN filter control register */ -#define CAN_FMCFG(canx) REG32((canx) + 0x204U) /*!< CAN filter mode register */ -#define CAN_FSCFG(canx) REG32((canx) + 0x20CU) /*!< CAN filter scale register */ -#define CAN_FAFIFO(canx) REG32((canx) + 0x214U) /*!< CAN filter associated FIFO register */ -#define CAN_FW(canx) REG32((canx) + 0x21CU) /*!< CAN filter working register */ -#define CAN_F0DATA0(canx) REG32((canx) + 0x240U) /*!< CAN filter 0 data 0 register */ -#define CAN_F1DATA0(canx) REG32((canx) + 0x248U) /*!< CAN filter 1 data 0 register */ -#define CAN_F2DATA0(canx) REG32((canx) + 0x250U) /*!< CAN filter 2 data 0 register */ -#define CAN_F3DATA0(canx) REG32((canx) + 0x258U) /*!< CAN filter 3 data 0 register */ -#define CAN_F4DATA0(canx) REG32((canx) + 0x260U) /*!< CAN filter 4 data 0 register */ -#define CAN_F5DATA0(canx) REG32((canx) + 0x268U) /*!< CAN filter 5 data 0 register */ -#define CAN_F6DATA0(canx) REG32((canx) + 0x270U) /*!< CAN filter 6 data 0 register */ -#define CAN_F7DATA0(canx) REG32((canx) + 0x278U) /*!< CAN filter 7 data 0 register */ -#define CAN_F8DATA0(canx) REG32((canx) + 0x280U) /*!< CAN filter 8 data 0 register */ -#define CAN_F9DATA0(canx) REG32((canx) + 0x288U) /*!< CAN filter 9 data 0 register */ -#define CAN_F10DATA0(canx) REG32((canx) + 0x290U) /*!< CAN filter 10 data 0 register */ -#define CAN_F11DATA0(canx) REG32((canx) + 0x298U) /*!< CAN filter 11 data 0 register */ -#define CAN_F12DATA0(canx) REG32((canx) + 0x2A0U) /*!< CAN filter 12 data 0 register */ -#define CAN_F13DATA0(canx) REG32((canx) + 0x2A8U) /*!< CAN filter 13 data 0 register */ -#define CAN_F14DATA0(canx) REG32((canx) + 0x2B0U) /*!< CAN filter 14 data 0 register */ -#define CAN_F15DATA0(canx) REG32((canx) + 0x2B8U) /*!< CAN filter 15 data 0 register */ -#define CAN_F16DATA0(canx) REG32((canx) + 0x2C0U) /*!< CAN filter 16 data 0 register */ -#define CAN_F17DATA0(canx) REG32((canx) + 0x2C8U) /*!< CAN filter 17 data 0 register */ -#define CAN_F18DATA0(canx) REG32((canx) + 0x2D0U) /*!< CAN filter 18 data 0 register */ -#define CAN_F19DATA0(canx) REG32((canx) + 0x2D8U) /*!< CAN filter 19 data 0 register */ -#define CAN_F20DATA0(canx) REG32((canx) + 0x2E0U) /*!< CAN filter 20 data 0 register */ -#define CAN_F21DATA0(canx) REG32((canx) + 0x2E8U) /*!< CAN filter 21 data 0 register */ -#define CAN_F22DATA0(canx) REG32((canx) + 0x2F0U) /*!< CAN filter 22 data 0 register */ -#define CAN_F23DATA0(canx) REG32((canx) + 0x3F8U) /*!< CAN filter 23 data 0 register */ -#define CAN_F24DATA0(canx) REG32((canx) + 0x300U) /*!< CAN filter 24 data 0 register */ -#define CAN_F25DATA0(canx) REG32((canx) + 0x308U) /*!< CAN filter 25 data 0 register */ -#define CAN_F26DATA0(canx) REG32((canx) + 0x310U) /*!< CAN filter 26 data 0 register */ -#define CAN_F27DATA0(canx) REG32((canx) + 0x318U) /*!< CAN filter 27 data 0 register */ -#define CAN_F0DATA1(canx) REG32((canx) + 0x244U) /*!< CAN filter 0 data 1 register */ -#define CAN_F1DATA1(canx) REG32((canx) + 0x24CU) /*!< CAN filter 1 data 1 register */ -#define CAN_F2DATA1(canx) REG32((canx) + 0x254U) /*!< CAN filter 2 data 1 register */ -#define CAN_F3DATA1(canx) REG32((canx) + 0x25CU) /*!< CAN filter 3 data 1 register */ -#define CAN_F4DATA1(canx) REG32((canx) + 0x264U) /*!< CAN filter 4 data 1 register */ -#define CAN_F5DATA1(canx) REG32((canx) + 0x26CU) /*!< CAN filter 5 data 1 register */ -#define CAN_F6DATA1(canx) REG32((canx) + 0x274U) /*!< CAN filter 6 data 1 register */ -#define CAN_F7DATA1(canx) REG32((canx) + 0x27CU) /*!< CAN filter 7 data 1 register */ -#define CAN_F8DATA1(canx) REG32((canx) + 0x284U) /*!< CAN filter 8 data 1 register */ -#define CAN_F9DATA1(canx) REG32((canx) + 0x28CU) /*!< CAN filter 9 data 1 register */ -#define CAN_F10DATA1(canx) REG32((canx) + 0x294U) /*!< CAN filter 10 data 1 register */ -#define CAN_F11DATA1(canx) REG32((canx) + 0x29CU) /*!< CAN filter 11 data 1 register */ -#define CAN_F12DATA1(canx) REG32((canx) + 0x2A4U) /*!< CAN filter 12 data 1 register */ -#define CAN_F13DATA1(canx) REG32((canx) + 0x2ACU) /*!< CAN filter 13 data 1 register */ -#define CAN_F14DATA1(canx) REG32((canx) + 0x2B4U) /*!< CAN filter 14 data 1 register */ -#define CAN_F15DATA1(canx) REG32((canx) + 0x2BCU) /*!< CAN filter 15 data 1 register */ -#define CAN_F16DATA1(canx) REG32((canx) + 0x2C4U) /*!< CAN filter 16 data 1 register */ -#define CAN_F17DATA1(canx) REG32((canx) + 0x24CU) /*!< CAN filter 17 data 1 register */ -#define CAN_F18DATA1(canx) REG32((canx) + 0x2D4U) /*!< CAN filter 18 data 1 register */ -#define CAN_F19DATA1(canx) REG32((canx) + 0x2DCU) /*!< CAN filter 19 data 1 register */ -#define CAN_F20DATA1(canx) REG32((canx) + 0x2E4U) /*!< CAN filter 20 data 1 register */ -#define CAN_F21DATA1(canx) REG32((canx) + 0x2ECU) /*!< CAN filter 21 data 1 register */ -#define CAN_F22DATA1(canx) REG32((canx) + 0x2F4U) /*!< CAN filter 22 data 1 register */ -#define CAN_F23DATA1(canx) REG32((canx) + 0x2FCU) /*!< CAN filter 23 data 1 register */ -#define CAN_F24DATA1(canx) REG32((canx) + 0x304U) /*!< CAN filter 24 data 1 register */ -#define CAN_F25DATA1(canx) REG32((canx) + 0x30CU) /*!< CAN filter 25 data 1 register */ -#define CAN_F26DATA1(canx) REG32((canx) + 0x314U) /*!< CAN filter 26 data 1 register */ -#define CAN_F27DATA1(canx) REG32((canx) + 0x31CU) /*!< CAN filter 27 data 1 register */ - -/* CAN transmit mailbox bank */ -#define CAN_TMI(canx, bank) REG32((canx) + 0x180U + ((bank) * 0x10U)) /*!< CAN transmit mailbox identifier register */ -#define CAN_TMP(canx, bank) REG32((canx) + 0x184U + ((bank) * 0x10U)) /*!< CAN transmit mailbox property register */ -#define CAN_TMDATA0(canx, bank) REG32((canx) + 0x188U + ((bank) * 0x10U)) /*!< CAN transmit mailbox data0 register */ -#define CAN_TMDATA1(canx, bank) REG32((canx) + 0x18CU + ((bank) * 0x10U)) /*!< CAN transmit mailbox data1 register */ - -/* CAN filter bank */ -#define CAN_FDATA0(canx, bank) REG32((canx) + 0x240U + ((bank) * 0x8U) + 0x0U) /*!< CAN filter data 0 register */ -#define CAN_FDATA1(canx, bank) REG32((canx) + 0x240U + ((bank) * 0x8U) + 0x4U) /*!< CAN filter data 1 register */ - -/* CAN receive fifo mailbox bank */ -#define CAN_RFIFOMI(canx, bank) REG32((canx) + 0x1B0U + ((bank) * 0x10U)) /*!< CAN receive FIFO mailbox identifier register */ -#define CAN_RFIFOMP(canx, bank) REG32((canx) + 0x1B4U + ((bank) * 0x10U)) /*!< CAN receive FIFO mailbox property register */ -#define CAN_RFIFOMDATA0(canx, bank) REG32((canx) + 0x1B8U + ((bank) * 0x10U)) /*!< CAN receive FIFO mailbox data0 register */ -#define CAN_RFIFOMDATA1(canx, bank) REG32((canx) + 0x1BCU + ((bank) * 0x10U)) /*!< CAN receive FIFO mailbox data1 register */ - -/* bits definitions */ -/* CAN_CTL */ -#define CAN_CTL_IWMOD BIT(0) /*!< initial working mode */ -#define CAN_CTL_SLPWMOD BIT(1) /*!< sleep working mode */ -#define CAN_CTL_TFO BIT(2) /*!< transmit FIFO order */ -#define CAN_CTL_RFOD BIT(3) /*!< receive FIFO overwrite disable */ -#define CAN_CTL_ARD BIT(4) /*!< automatic retransmission disable */ -#define CAN_CTL_AWU BIT(5) /*!< automatic wakeup */ -#define CAN_CTL_ABOR BIT(6) /*!< automatic bus-off recovery */ -#define CAN_CTL_TTC BIT(7) /*!< time triggered communication */ -#define CAN_CTL_SWRST BIT(15) /*!< CAN software reset */ -#define CAN_CTL_DFZ BIT(16) /*!< CAN debug freeze */ - -/* CAN_STAT */ -#define CAN_STAT_IWS BIT(0) /*!< initial working state */ -#define CAN_STAT_SLPWS BIT(1) /*!< sleep working state */ -#define CAN_STAT_ERRIF BIT(2) /*!< error interrupt flag*/ -#define CAN_STAT_WUIF BIT(3) /*!< status change interrupt flag of wakeup from sleep working mode */ -#define CAN_STAT_SLPIF BIT(4) /*!< status change interrupt flag of sleep working mode entering */ -#define CAN_STAT_TS BIT(8) /*!< transmitting state */ -#define CAN_STAT_RS BIT(9) /*!< receiving state */ -#define CAN_STAT_LASTRX BIT(10) /*!< last sample value of rx pin */ -#define CAN_STAT_RXL BIT(11) /*!< CAN rx signal */ - -/* CAN_TSTAT */ -#define CAN_TSTAT_MTF0 BIT(0) /*!< mailbox0 transmit finished */ -#define CAN_TSTAT_MTFNERR0 BIT(1) /*!< mailbox0 transmit finished and no error */ -#define CAN_TSTAT_MAL0 BIT(2) /*!< mailbox0 arbitration lost */ -#define CAN_TSTAT_MTE0 BIT(3) /*!< mailbox0 transmit error */ -#define CAN_TSTAT_MST0 BIT(7) /*!< mailbox0 stop transmitting */ -#define CAN_TSTAT_MTF1 BIT(8) /*!< mailbox1 transmit finished */ -#define CAN_TSTAT_MTFNERR1 BIT(9) /*!< mailbox1 transmit finished and no error */ -#define CAN_TSTAT_MAL1 BIT(10) /*!< mailbox1 arbitration lost */ -#define CAN_TSTAT_MTE1 BIT(11) /*!< mailbox1 transmit error */ -#define CAN_TSTAT_MST1 BIT(15) /*!< mailbox1 stop transmitting */ -#define CAN_TSTAT_MTF2 BIT(16) /*!< mailbox2 transmit finished */ -#define CAN_TSTAT_MTFNERR2 BIT(17) /*!< mailbox2 transmit finished and no error */ -#define CAN_TSTAT_MAL2 BIT(18) /*!< mailbox2 arbitration lost */ -#define CAN_TSTAT_MTE2 BIT(19) /*!< mailbox2 transmit error */ -#define CAN_TSTAT_MST2 BIT(23) /*!< mailbox2 stop transmitting */ -#define CAN_TSTAT_NUM BITS(24,25) /*!< mailbox number */ -#define CAN_TSTAT_TME0 BIT(26) /*!< transmit mailbox0 empty */ -#define CAN_TSTAT_TME1 BIT(27) /*!< transmit mailbox1 empty */ -#define CAN_TSTAT_TME2 BIT(28) /*!< transmit mailbox2 empty */ -#define CAN_TSTAT_TMLS0 BIT(29) /*!< last sending priority flag for mailbox0 */ -#define CAN_TSTAT_TMLS1 BIT(30) /*!< last sending priority flag for mailbox1 */ -#define CAN_TSTAT_TMLS2 BIT(31) /*!< last sending priority flag for mailbox2 */ - -/* CAN_RFIFO0 */ -#define CAN_RFIFO0_RFL0 BITS(0,1) /*!< receive FIFO0 length */ -#define CAN_RFIFO0_RFF0 BIT(3) /*!< receive FIFO0 full */ -#define CAN_RFIFO0_RFO0 BIT(4) /*!< receive FIFO0 overfull */ -#define CAN_RFIFO0_RFD0 BIT(5) /*!< receive FIFO0 dequeue */ - -/* CAN_RFIFO1 */ -#define CAN_RFIFO1_RFL1 BITS(0,1) /*!< receive FIFO1 length */ -#define CAN_RFIFO1_RFF1 BIT(3) /*!< receive FIFO1 full */ -#define CAN_RFIFO1_RFO1 BIT(4) /*!< receive FIFO1 overfull */ -#define CAN_RFIFO1_RFD1 BIT(5) /*!< receive FIFO1 dequeue */ - -/* CAN_INTEN */ -#define CAN_INTEN_TMEIE BIT(0) /*!< transmit mailbox empty interrupt enable */ -#define CAN_INTEN_RFNEIE0 BIT(1) /*!< receive FIFO0 not empty interrupt enable */ -#define CAN_INTEN_RFFIE0 BIT(2) /*!< receive FIFO0 full interrupt enable */ -#define CAN_INTEN_RFOIE0 BIT(3) /*!< receive FIFO0 overfull interrupt enable */ -#define CAN_INTEN_RFNEIE1 BIT(4) /*!< receive FIFO1 not empty interrupt enable */ -#define CAN_INTEN_RFFIE1 BIT(5) /*!< receive FIFO1 full interrupt enable */ -#define CAN_INTEN_RFOIE1 BIT(6) /*!< receive FIFO1 overfull interrupt enable */ -#define CAN_INTEN_WERRIE BIT(8) /*!< warning error interrupt enable */ -#define CAN_INTEN_PERRIE BIT(9) /*!< passive error interrupt enable */ -#define CAN_INTEN_BOIE BIT(10) /*!< bus-off interrupt enable */ -#define CAN_INTEN_ERRNIE BIT(11) /*!< error number interrupt enable */ -#define CAN_INTEN_ERRIE BIT(15) /*!< error interrupt enable */ -#define CAN_INTEN_WIE BIT(16) /*!< wakeup interrupt enable */ -#define CAN_INTEN_SLPWIE BIT(17) /*!< sleep working interrupt enable */ - -/* CAN_ERR */ -#define CAN_ERR_WERR BIT(0) /*!< warning error */ -#define CAN_ERR_PERR BIT(1) /*!< passive error */ -#define CAN_ERR_BOERR BIT(2) /*!< bus-off error */ -#define CAN_ERR_ERRN BITS(4,6) /*!< error number */ -#define CAN_ERR_TECNT BITS(16,23) /*!< transmit error count */ -#define CAN_ERR_RECNT BITS(24,31) /*!< receive error count */ - -/* CAN_BT */ -#define CAN_BT_BAUDPSC BITS(0,9) /*!< baudrate prescaler */ -#define CAN_BT_BS1 BITS(16,19) /*!< bit segment 1 */ -#define CAN_BT_BS2 BITS(20,22) /*!< bit segment 2 */ -#define CAN_BT_SJW BITS(24,25) /*!< resynchronization jump width */ -#define CAN_BT_LCMOD BIT(30) /*!< loopback communication mode */ -#define CAN_BT_SCMOD BIT(31) /*!< silent communication mode */ - -/* CAN_TMIx */ -#define CAN_TMI_TEN BIT(0) /*!< transmit enable */ -#define CAN_TMI_FT BIT(1) /*!< frame type */ -#define CAN_TMI_FF BIT(2) /*!< frame format */ -#define CAN_TMI_EFID BITS(3,31) /*!< the frame identifier */ -#define CAN_TMI_SFID BITS(21,31) /*!< the frame identifier */ - -/* CAN_TMPx */ -#define CAN_TMP_DLENC BITS(0,3) /*!< data length code */ -#define CAN_TMP_TSEN BIT(8) /*!< time stamp enable */ -#define CAN_TMP_TS BITS(16,31) /*!< time stamp */ - -/* CAN_TMDATA0x */ -#define CAN_TMDATA0_DB0 BITS(0,7) /*!< transmit data byte 0 */ -#define CAN_TMDATA0_DB1 BITS(8,15) /*!< transmit data byte 1 */ -#define CAN_TMDATA0_DB2 BITS(16,23) /*!< transmit data byte 2 */ -#define CAN_TMDATA0_DB3 BITS(24,31) /*!< transmit data byte 3 */ - -/* CAN_TMDATA1x */ -#define CAN_TMDATA1_DB4 BITS(0,7) /*!< transmit data byte 4 */ -#define CAN_TMDATA1_DB5 BITS(8,15) /*!< transmit data byte 5 */ -#define CAN_TMDATA1_DB6 BITS(16,23) /*!< transmit data byte 6 */ -#define CAN_TMDATA1_DB7 BITS(24,31) /*!< transmit data byte 7 */ - -/* CAN_RFIFOMIx */ -#define CAN_RFIFOMI_FT BIT(1) /*!< frame type */ -#define CAN_RFIFOMI_FF BIT(2) /*!< frame format */ -#define CAN_RFIFOMI_EFID BITS(3,31) /*!< the frame identifier */ -#define CAN_RFIFOMI_SFID BITS(21,31) /*!< the frame identifier */ - -/* CAN_RFIFOMPx */ -#define CAN_RFIFOMP_DLENC BITS(0,3) /*!< receive data length code */ -#define CAN_RFIFOMP_FI BITS(8,15) /*!< filter index */ -#define CAN_RFIFOMP_TS BITS(16,31) /*!< time stamp */ - -/* CAN_RFIFOMDATA0x */ -#define CAN_RFIFOMDATA0_DB0 BITS(0,7) /*!< receive data byte 0 */ -#define CAN_RFIFOMDATA0_DB1 BITS(8,15) /*!< receive data byte 1 */ -#define CAN_RFIFOMDATA0_DB2 BITS(16,23) /*!< receive data byte 2 */ -#define CAN_RFIFOMDATA0_DB3 BITS(24,31) /*!< receive data byte 3 */ - -/* CAN_RFIFOMDATA1x */ -#define CAN_RFIFOMDATA1_DB4 BITS(0,7) /*!< receive data byte 4 */ -#define CAN_RFIFOMDATA1_DB5 BITS(8,15) /*!< receive data byte 5 */ -#define CAN_RFIFOMDATA1_DB6 BITS(16,23) /*!< receive data byte 6 */ -#define CAN_RFIFOMDATA1_DB7 BITS(24,31) /*!< receive data byte 7 */ - -/* CAN_FCTL */ -#define CAN_FCTL_FLD BIT(0) /*!< filter lock disable */ -#define CAN_FCTL_HBC1F BITS(8,13) /*!< header bank of CAN1 filter */ - -/* CAN_FMCFG */ -#define CAN_FMCFG_FMOD(regval) BIT(regval) /*!< filter mode, list or mask*/ - -/* CAN_FSCFG */ -#define CAN_FSCFG_FS(regval) BIT(regval) /*!< filter scale, 32 bits or 16 bits*/ - -/* CAN_FAFIFO */ -#define CAN_FAFIFOR_FAF(regval) BIT(regval) /*!< filter associated with FIFO */ - -/* CAN_FW */ -#define CAN_FW_FW(regval) BIT(regval) /*!< filter working */ - -/* CAN_FxDATAy */ -#define CAN_FDATA_FD(regval) BIT(regval) /*!< filter data */ - -/* constants definitions */ -/* define the CAN bit position and its register index offset */ -#define CAN_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define CAN_REG_VAL(canx, offset) (REG32((canx) + ((uint32_t)(offset) >> 6))) -#define CAN_BIT_POS(val) ((uint32_t)(val) & 0x1FU) - -#define CAN_REGIDX_BITS(regidx, bitpos0, bitpos1) (((uint32_t)(regidx) << 12) | ((uint32_t)(bitpos0) << 6) | (uint32_t)(bitpos1)) -#define CAN_REG_VALS(canx, offset) (REG32((canx) + ((uint32_t)(offset) >> 12))) -#define CAN_BIT_POS0(val) (((uint32_t)(val) >> 6) & 0x1FU) -#define CAN_BIT_POS1(val) ((uint32_t)(val) & 0x1FU) - -/* register offset */ -#define STAT_REG_OFFSET ((uint8_t)0x04U) /*!< STAT register offset */ -#define TSTAT_REG_OFFSET ((uint8_t)0x08U) /*!< TSTAT register offset */ -#define RFIFO0_REG_OFFSET ((uint8_t)0x0CU) /*!< RFIFO0 register offset */ -#define RFIFO1_REG_OFFSET ((uint8_t)0x10U) /*!< RFIFO1 register offset */ -#define ERR_REG_OFFSET ((uint8_t)0x18U) /*!< ERR register offset */ - -/* CAN flags */ -typedef enum -{ - /* flags in STAT register */ - CAN_FLAG_RXL = CAN_REGIDX_BIT(STAT_REG_OFFSET, 11U), /*!< RX level */ - CAN_FLAG_LASTRX = CAN_REGIDX_BIT(STAT_REG_OFFSET, 10U), /*!< last sample value of RX pin */ - CAN_FLAG_RS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 9U), /*!< receiving state */ - CAN_FLAG_TS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 8U), /*!< transmitting state */ - CAN_FLAG_SLPIF = CAN_REGIDX_BIT(STAT_REG_OFFSET, 4U), /*!< status change flag of entering sleep working mode */ - CAN_FLAG_WUIF = CAN_REGIDX_BIT(STAT_REG_OFFSET, 3U), /*!< status change flag of wakeup from sleep working mode */ - CAN_FLAG_ERRIF = CAN_REGIDX_BIT(STAT_REG_OFFSET, 2U), /*!< error flag */ - CAN_FLAG_SLPWS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 1U), /*!< sleep working state */ - CAN_FLAG_IWS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 0U), /*!< initial working state */ - /* flags in TSTAT register */ - CAN_FLAG_TMLS2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 31U), /*!< transmit mailbox 2 last sending in Tx FIFO */ - CAN_FLAG_TMLS1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 30U), /*!< transmit mailbox 1 last sending in Tx FIFO */ - CAN_FLAG_TMLS0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 29U), /*!< transmit mailbox 0 last sending in Tx FIFO */ - CAN_FLAG_TME2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 28U), /*!< transmit mailbox 2 empty */ - CAN_FLAG_TME1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 27U), /*!< transmit mailbox 1 empty */ - CAN_FLAG_TME0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 26U), /*!< transmit mailbox 0 empty */ - CAN_FLAG_MTE2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 19U), /*!< mailbox 2 transmit error */ - CAN_FLAG_MTE1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 11U), /*!< mailbox 1 transmit error */ - CAN_FLAG_MTE0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 3U), /*!< mailbox 0 transmit error */ - CAN_FLAG_MAL2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 18U), /*!< mailbox 2 arbitration lost */ - CAN_FLAG_MAL1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 10U), /*!< mailbox 1 arbitration lost */ - CAN_FLAG_MAL0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 2U), /*!< mailbox 0 arbitration lost */ - CAN_FLAG_MTFNERR2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 17U), /*!< mailbox 2 transmit finished with no error */ - CAN_FLAG_MTFNERR1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 9U), /*!< mailbox 1 transmit finished with no error */ - CAN_FLAG_MTFNERR0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 1U), /*!< mailbox 0 transmit finished with no error */ - CAN_FLAG_MTF2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 16U), /*!< mailbox 2 transmit finished */ - CAN_FLAG_MTF1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 8U), /*!< mailbox 1 transmit finished */ - CAN_FLAG_MTF0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 0U), /*!< mailbox 0 transmit finished */ - /* flags in RFIFO0 register */ - CAN_FLAG_RFO0 = CAN_REGIDX_BIT(RFIFO0_REG_OFFSET, 4U), /*!< receive FIFO0 overfull */ - CAN_FLAG_RFF0 = CAN_REGIDX_BIT(RFIFO0_REG_OFFSET, 3U), /*!< receive FIFO0 full */ - /* flags in RFIFO1 register */ - CAN_FLAG_RFO1 = CAN_REGIDX_BIT(RFIFO1_REG_OFFSET, 4U), /*!< receive FIFO1 overfull */ - CAN_FLAG_RFF1 = CAN_REGIDX_BIT(RFIFO1_REG_OFFSET, 3U), /*!< receive FIFO1 full */ - /* flags in ERR register */ - CAN_FLAG_BOERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 2U), /*!< bus-off error */ - CAN_FLAG_PERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 1U), /*!< passive error */ - CAN_FLAG_WERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 0U), /*!< warning error */ -}can_flag_enum; - -/* CAN interrupt flags */ -typedef enum -{ - /* interrupt flags in STAT register */ - CAN_INT_FLAG_SLPIF = CAN_REGIDX_BITS(STAT_REG_OFFSET, 4U, 17U), /*!< status change interrupt flag of sleep working mode entering */ - CAN_INT_FLAG_WUIF = CAN_REGIDX_BITS(STAT_REG_OFFSET, 3U, 16), /*!< status change interrupt flag of wakeup from sleep working mode */ - CAN_INT_FLAG_ERRIF = CAN_REGIDX_BITS(STAT_REG_OFFSET, 2U, 15), /*!< error interrupt flag */ - /* interrupt flags in TSTAT register */ - CAN_INT_FLAG_MTF2 = CAN_REGIDX_BITS(TSTAT_REG_OFFSET, 16U, 0U), /*!< mailbox 2 transmit finished interrupt flag */ - CAN_INT_FLAG_MTF1 = CAN_REGIDX_BITS(TSTAT_REG_OFFSET, 8U, 0U), /*!< mailbox 1 transmit finished interrupt flag */ - CAN_INT_FLAG_MTF0 = CAN_REGIDX_BITS(TSTAT_REG_OFFSET, 0U, 0U), /*!< mailbox 0 transmit finished interrupt flag */ - /* interrupt flags in RFIFO0 register */ - CAN_INT_FLAG_RFO0 = CAN_REGIDX_BITS(RFIFO0_REG_OFFSET, 4U, 3U), /*!< receive FIFO0 overfull interrupt flag */ - CAN_INT_FLAG_RFF0 = CAN_REGIDX_BITS(RFIFO0_REG_OFFSET, 3U, 2U), /*!< receive FIFO0 full interrupt flag */ - CAN_INT_FLAG_RFL0 = CAN_REGIDX_BITS(RFIFO0_REG_OFFSET, 2U, 1U), /*!< receive FIFO0 not empty interrupt flag */ - /* interrupt flags in RFIFO0 register */ - CAN_INT_FLAG_RFO1 = CAN_REGIDX_BITS(RFIFO1_REG_OFFSET, 4U, 6U), /*!< receive FIFO1 overfull interrupt flag */ - CAN_INT_FLAG_RFF1 = CAN_REGIDX_BITS(RFIFO1_REG_OFFSET, 3U, 5U), /*!< receive FIFO1 full interrupt flag */ - CAN_INT_FLAG_RFL1 = CAN_REGIDX_BITS(RFIFO1_REG_OFFSET, 2U, 4U), /*!< receive FIFO1 not empty interrupt flag */ - /* interrupt flags in ERR register */ - CAN_INT_FLAG_ERRN = CAN_REGIDX_BITS(ERR_REG_OFFSET, 3U, 11U), /*!< error number interrupt flag */ - CAN_INT_FLAG_BOERR = CAN_REGIDX_BITS(ERR_REG_OFFSET, 2U, 10U), /*!< bus-off error interrupt flag */ - CAN_INT_FLAG_PERR = CAN_REGIDX_BITS(ERR_REG_OFFSET, 1U, 9U), /*!< passive error interrupt flag */ - CAN_INT_FLAG_WERR = CAN_REGIDX_BITS(ERR_REG_OFFSET, 0U, 8U), /*!< warning error interrupt flag */ -}can_interrupt_flag_enum; - -/* CAN initiliaze parameters structure */ -typedef struct -{ - uint8_t working_mode; /*!< CAN working mode */ - uint8_t resync_jump_width; /*!< CAN resynchronization jump width */ - uint8_t time_segment_1; /*!< time segment 1 */ - uint8_t time_segment_2; /*!< time segment 2 */ - ControlStatus time_triggered; /*!< time triggered communication mode */ - ControlStatus auto_bus_off_recovery; /*!< automatic bus-off recovery */ - ControlStatus auto_wake_up; /*!< automatic wake-up mode */ - ControlStatus no_auto_retrans; /*!< automatic retransmission mode disable */ - ControlStatus rec_fifo_overwrite; /*!< receive FIFO overwrite mode */ - ControlStatus trans_fifo_order; /*!< transmit FIFO order */ - uint16_t prescaler; /*!< baudrate prescaler */ -}can_parameter_struct; - -/* CAN transmit message structure */ -typedef struct -{ - uint32_t tx_sfid; /*!< standard format frame identifier */ - uint32_t tx_efid; /*!< extended format frame identifier */ - uint8_t tx_ff; /*!< format of frame, standard or extended format */ - uint8_t tx_ft; /*!< type of frame, data or remote */ - uint8_t tx_dlen; /*!< data length */ - uint8_t tx_data[8]; /*!< transmit data */ -}can_trasnmit_message_struct; - -/* CAN receive message structure */ -typedef struct -{ - uint32_t rx_sfid; /*!< standard format frame identifier */ - uint32_t rx_efid; /*!< extended format frame identifier */ - uint8_t rx_ff; /*!< format of frame, standard or extended format */ - uint8_t rx_ft; /*!< type of frame, data or remote */ - uint8_t rx_dlen; /*!< data length */ - uint8_t rx_data[8]; /*!< receive data */ - uint8_t rx_fi; /*!< filtering index */ -} can_receive_message_struct; - -/* CAN filter parameters structure */ -typedef struct -{ - uint16_t filter_list_high; /*!< filter list number high bits*/ - uint16_t filter_list_low; /*!< filter list number low bits */ - uint16_t filter_mask_high; /*!< filter mask number high bits */ - uint16_t filter_mask_low; /*!< filter mask number low bits */ - uint16_t filter_fifo_number; /*!< receive FIFO associated with the filter */ - uint16_t filter_number; /*!< filter number */ - uint16_t filter_mode; /*!< filter mode, list or mask */ - uint16_t filter_bits; /*!< filter scale */ - ControlStatus filter_enable; /*!< filter work or not */ -}can_filter_parameter_struct; - -/* CAN errors */ -typedef enum -{ - CAN_ERROR_NONE = 0, /*!< no error */ - CAN_ERROR_FILL, /*!< fill error */ - CAN_ERROR_FORMATE, /*!< format error */ - CAN_ERROR_ACK, /*!< ACK error */ - CAN_ERROR_BITRECESSIVE, /*!< bit recessive error */ - CAN_ERROR_BITDOMINANTER, /*!< bit dominant error */ - CAN_ERROR_CRC, /*!< CRC error */ - CAN_ERROR_SOFTWARECFG, /*!< software configure */ -}can_error_enum; - -/* transmit states */ -typedef enum -{ - CAN_TRANSMIT_FAILED = 0U, /*!< CAN transmitted failure */ - CAN_TRANSMIT_OK = 1U, /*!< CAN transmitted success */ - CAN_TRANSMIT_PENDING = 2U, /*!< CAN transmitted pending */ - CAN_TRANSMIT_NOMAILBOX = 4U, /*!< no empty mailbox to be used for CAN */ -}can_transmit_state_enum; - -typedef enum -{ - CAN_INIT_STRUCT = 0, /* CAN initiliaze parameters struct */ - CAN_FILTER_STRUCT, /* CAN filter parameters struct */ - CAN_TX_MESSAGE_STRUCT, /* CAN transmit message struct */ - CAN_RX_MESSAGE_STRUCT, /* CAN receive message struct */ -}can_struct_type_enum; - -/* CAN baudrate prescaler*/ -#define BT_BAUDPSC(regval) (BITS(0,9) & ((uint32_t)(regval) << 0)) - -/* CAN bit segment 1*/ -#define BT_BS1(regval) (BITS(16,19) & ((uint32_t)(regval) << 16)) - -/* CAN bit segment 2*/ -#define BT_BS2(regval) (BITS(20,22) & ((uint32_t)(regval) << 20)) - -/* CAN resynchronization jump width*/ -#define BT_SJW(regval) (BITS(24,25) & ((uint32_t)(regval) << 24)) - -/* CAN communication mode*/ -#define BT_MODE(regval) (BITS(30,31) & ((uint32_t)(regval) << 30)) - -/* CAN FDATA high 16 bits */ -#define FDATA_MASK_HIGH(regval) (BITS(16,31) & ((uint32_t)(regval) << 16)) - -/* CAN FDATA low 16 bits */ -#define FDATA_MASK_LOW(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) - -/* CAN1 filter start bank_number*/ -#define FCTL_HBC1F(regval) (BITS(8,13) & ((uint32_t)(regval) << 8)) - -/* CAN transmit mailbox extended identifier*/ -#define TMI_EFID(regval) (BITS(3,31) & ((uint32_t)(regval) << 3)) - -/* CAN transmit mailbox standard identifier*/ -#define TMI_SFID(regval) (BITS(21,31) & ((uint32_t)(regval) << 21)) - -/* transmit data byte 0 */ -#define TMDATA0_DB0(regval) (BITS(0,7) & ((uint32_t)(regval) << 0)) - -/* transmit data byte 1 */ -#define TMDATA0_DB1(regval) (BITS(8,15) & ((uint32_t)(regval) << 8)) - -/* transmit data byte 2 */ -#define TMDATA0_DB2(regval) (BITS(16,23) & ((uint32_t)(regval) << 16)) - -/* transmit data byte 3 */ -#define TMDATA0_DB3(regval) (BITS(24,31) & ((uint32_t)(regval) << 24)) - -/* transmit data byte 4 */ -#define TMDATA1_DB4(regval) (BITS(0,7) & ((uint32_t)(regval) << 0)) - -/* transmit data byte 5 */ -#define TMDATA1_DB5(regval) (BITS(8,15) & ((uint32_t)(regval) << 8)) - -/* transmit data byte 6 */ -#define TMDATA1_DB6(regval) (BITS(16,23) & ((uint32_t)(regval) << 16)) - -/* transmit data byte 7 */ -#define TMDATA1_DB7(regval) (BITS(24,31) & ((uint32_t)(regval) << 24)) - -/* receive mailbox extended identifier*/ -#define GET_RFIFOMI_EFID(regval) GET_BITS((uint32_t)(regval), 3U, 31U) - -/* receive mailbox standrad identifier*/ -#define GET_RFIFOMI_SFID(regval) GET_BITS((uint32_t)(regval), 21U, 31U) - -/* receive data length */ -#define GET_RFIFOMP_DLENC(regval) GET_BITS((uint32_t)(regval), 0U, 3U) - -/* the index of the filter by which the frame is passed */ -#define GET_RFIFOMP_FI(regval) GET_BITS((uint32_t)(regval), 8U, 15U) - -/* receive data byte 0 */ -#define GET_RFIFOMDATA0_DB0(regval) GET_BITS((uint32_t)(regval), 0U, 7U) - -/* receive data byte 1 */ -#define GET_RFIFOMDATA0_DB1(regval) GET_BITS((uint32_t)(regval), 8U, 15U) - -/* receive data byte 2 */ -#define GET_RFIFOMDATA0_DB2(regval) GET_BITS((uint32_t)(regval), 16U, 23U) - -/* receive data byte 3 */ -#define GET_RFIFOMDATA0_DB3(regval) GET_BITS((uint32_t)(regval), 24U, 31U) - -/* receive data byte 4 */ -#define GET_RFIFOMDATA1_DB4(regval) GET_BITS((uint32_t)(regval), 0U, 7U) - -/* receive data byte 5 */ -#define GET_RFIFOMDATA1_DB5(regval) GET_BITS((uint32_t)(regval), 8U, 15U) - -/* receive data byte 6 */ -#define GET_RFIFOMDATA1_DB6(regval) GET_BITS((uint32_t)(regval), 16U, 23U) - -/* receive data byte 7 */ -#define GET_RFIFOMDATA1_DB7(regval) GET_BITS((uint32_t)(regval), 24U, 31U) - -/* error number */ -#define GET_ERR_ERRN(regval) GET_BITS((uint32_t)(regval), 4U, 6U) - -/* transmit error count */ -#define GET_ERR_TECNT(regval) GET_BITS((uint32_t)(regval), 16U, 23U) - -/* receive error count */ -#define GET_ERR_RECNT(regval) GET_BITS((uint32_t)(regval), 24U, 31U) - -/* CAN errors */ -#define ERR_ERRN(regval) (BITS(4,6) & ((uint32_t)(regval) << 4)) -#define CAN_ERRN_0 ERR_ERRN(0U) /*!< no error */ -#define CAN_ERRN_1 ERR_ERRN(1U) /*!< fill error */ -#define CAN_ERRN_2 ERR_ERRN(2U) /*!< format error */ -#define CAN_ERRN_3 ERR_ERRN(3U) /*!< ACK error */ -#define CAN_ERRN_4 ERR_ERRN(4U) /*!< bit recessive error */ -#define CAN_ERRN_5 ERR_ERRN(5U) /*!< bit dominant error */ -#define CAN_ERRN_6 ERR_ERRN(6U) /*!< CRC error */ -#define CAN_ERRN_7 ERR_ERRN(7U) /*!< software error */ - -#define CAN_STATE_PENDING ((uint32_t)0x00000000U) /*!< CAN pending */ - -/* CAN communication mode */ -#define CAN_NORMAL_MODE ((uint8_t)0x00U) /*!< normal communication mode */ -#define CAN_LOOPBACK_MODE ((uint8_t)0x01U) /*!< loopback communication mode */ -#define CAN_SILENT_MODE ((uint8_t)0x02U) /*!< silent communication mode */ -#define CAN_SILENT_LOOPBACK_MODE ((uint8_t)0x03U) /*!< loopback and silent communication mode */ - -/* CAN resynchronisation jump width */ -#define CAN_BT_SJW_1TQ ((uint8_t)0x00U) /*!< 1 time quanta */ -#define CAN_BT_SJW_2TQ ((uint8_t)0x01U) /*!< 2 time quanta */ -#define CAN_BT_SJW_3TQ ((uint8_t)0x02U) /*!< 3 time quanta */ -#define CAN_BT_SJW_4TQ ((uint8_t)0x03U) /*!< 4 time quanta */ - -/* CAN time segment 1 */ -#define CAN_BT_BS1_1TQ ((uint8_t)0x00U) /*!< 1 time quanta */ -#define CAN_BT_BS1_2TQ ((uint8_t)0x01U) /*!< 2 time quanta */ -#define CAN_BT_BS1_3TQ ((uint8_t)0x02U) /*!< 3 time quanta */ -#define CAN_BT_BS1_4TQ ((uint8_t)0x03U) /*!< 4 time quanta */ -#define CAN_BT_BS1_5TQ ((uint8_t)0x04U) /*!< 5 time quanta */ -#define CAN_BT_BS1_6TQ ((uint8_t)0x05U) /*!< 6 time quanta */ -#define CAN_BT_BS1_7TQ ((uint8_t)0x06U) /*!< 7 time quanta */ -#define CAN_BT_BS1_8TQ ((uint8_t)0x07U) /*!< 8 time quanta */ -#define CAN_BT_BS1_9TQ ((uint8_t)0x08U) /*!< 9 time quanta */ -#define CAN_BT_BS1_10TQ ((uint8_t)0x09U) /*!< 10 time quanta */ -#define CAN_BT_BS1_11TQ ((uint8_t)0x0AU) /*!< 11 time quanta */ -#define CAN_BT_BS1_12TQ ((uint8_t)0x0BU) /*!< 12 time quanta */ -#define CAN_BT_BS1_13TQ ((uint8_t)0x0CU) /*!< 13 time quanta */ -#define CAN_BT_BS1_14TQ ((uint8_t)0x0DU) /*!< 14 time quanta */ -#define CAN_BT_BS1_15TQ ((uint8_t)0x0EU) /*!< 15 time quanta */ -#define CAN_BT_BS1_16TQ ((uint8_t)0x0FU) /*!< 16 time quanta */ - -/* CAN time segment 2 */ -#define CAN_BT_BS2_1TQ ((uint8_t)0x00U) /*!< 1 time quanta */ -#define CAN_BT_BS2_2TQ ((uint8_t)0x01U) /*!< 2 time quanta */ -#define CAN_BT_BS2_3TQ ((uint8_t)0x02U) /*!< 3 time quanta */ -#define CAN_BT_BS2_4TQ ((uint8_t)0x03U) /*!< 4 time quanta */ -#define CAN_BT_BS2_5TQ ((uint8_t)0x04U) /*!< 5 time quanta */ -#define CAN_BT_BS2_6TQ ((uint8_t)0x05U) /*!< 6 time quanta */ -#define CAN_BT_BS2_7TQ ((uint8_t)0x06U) /*!< 7 time quanta */ -#define CAN_BT_BS2_8TQ ((uint8_t)0x07U) /*!< 8 time quanta */ - -/* CAN mailbox number */ -#define CAN_MAILBOX0 ((uint8_t)0x00U) /*!< mailbox0 */ -#define CAN_MAILBOX1 ((uint8_t)0x01U) /*!< mailbox1 */ -#define CAN_MAILBOX2 ((uint8_t)0x02U) /*!< mailbox2 */ -#define CAN_NOMAILBOX ((uint8_t)0x03U) /*!< no mailbox empty */ - -/* CAN frame format */ -#define CAN_FF_STANDARD ((uint32_t)0x00000000U) /*!< standard frame */ -#define CAN_FF_EXTENDED ((uint32_t)0x00000004U) /*!< extended frame */ - -/* CAN receive fifo */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< receive FIFO0 */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< receive FIFO1 */ - -/* frame number of receive fifo */ -#define CAN_RFIF_RFL_MASK ((uint32_t)0x00000003U) /*!< mask for frame number in receive FIFOx */ - -#define CAN_SFID_MASK ((uint32_t)0x000007FFU) /*!< mask of standard identifier */ -#define CAN_EFID_MASK ((uint32_t)0x1FFFFFFFU) /*!< mask of extended identifier */ - -/* CAN working mode */ -#define CAN_MODE_INITIALIZE ((uint8_t)0x01U) /*!< CAN initialize mode */ -#define CAN_MODE_NORMAL ((uint8_t)0x02U) /*!< CAN normal mode */ -#define CAN_MODE_SLEEP ((uint8_t)0x04U) /*!< CAN sleep mode */ - -/* filter bits */ -#define CAN_FILTERBITS_16BIT ((uint8_t)0x00U) /*!< CAN filter 16 bits */ -#define CAN_FILTERBITS_32BIT ((uint8_t)0x01U) /*!< CAN filter 32 bits */ - -/* filter mode */ -#define CAN_FILTERMODE_MASK ((uint8_t)0x00U) /*!< mask mode */ -#define CAN_FILTERMODE_LIST ((uint8_t)0x01U) /*!< list mode */ - -/* filter 16 bits mask */ -#define CAN_FILTER_MASK_16BITS ((uint32_t)0x0000FFFFU) /*!< can filter 16 bits mask */ - -/* frame type */ -#define CAN_FT_DATA ((uint32_t)0x00000000U) /*!< data frame */ -#define CAN_FT_REMOTE ((uint32_t)0x00000002U) /*!< remote frame */ - -/* CAN timeout */ -#define CAN_TIMEOUT ((uint32_t)0x0000FFFFU) /*!< timeout value */ - -/* interrupt enable bits */ -#define CAN_INT_TME CAN_INTEN_TMEIE /*!< transmit mailbox empty interrupt enable */ -#define CAN_INT_RFNE0 CAN_INTEN_RFNEIE0 /*!< receive FIFO0 not empty interrupt enable */ -#define CAN_INT_RFF0 CAN_INTEN_RFFIE0 /*!< receive FIFO0 full interrupt enable */ -#define CAN_INT_RFO0 CAN_INTEN_RFOIE0 /*!< receive FIFO0 overfull interrupt enable */ -#define CAN_INT_RFNE1 CAN_INTEN_RFNEIE1 /*!< receive FIFO1 not empty interrupt enable */ -#define CAN_INT_RFF1 CAN_INTEN_RFFIE1 /*!< receive FIFO1 full interrupt enable */ -#define CAN_INT_RFO1 CAN_INTEN_RFOIE1 /*!< receive FIFO1 overfull interrupt enable */ -#define CAN_INT_WERR CAN_INTEN_WERRIE /*!< warning error interrupt enable */ -#define CAN_INT_PERR CAN_INTEN_PERRIE /*!< passive error interrupt enable */ -#define CAN_INT_BO CAN_INTEN_BOIE /*!< bus-off interrupt enable */ -#define CAN_INT_ERRN CAN_INTEN_ERRNIE /*!< error number interrupt enable */ -#define CAN_INT_ERR CAN_INTEN_ERRIE /*!< error interrupt enable */ -#define CAN_INT_WAKEUP CAN_INTEN_WIE /*!< wakeup interrupt enable */ -#define CAN_INT_SLPW CAN_INTEN_SLPWIE /*!< sleep working interrupt enable */ - -/* function declarations */ -/* initialization functions */ -/* deinitialize CAN */ -void can_deinit(uint32_t can_periph); -/* initialize CAN structure */ -void can_struct_para_init(can_struct_type_enum type, void* p_struct); -/* initialize CAN */ -ErrStatus can_init(uint32_t can_periph, can_parameter_struct* can_parameter_init); -/* CAN filter initialization */ -void can_filter_init(can_filter_parameter_struct* can_filter_parameter_init); - -/* function configuration */ -/* set can1 filter start bank number */ -void can1_filter_start_bank(uint8_t start_bank); -/* enable functions */ -/* CAN debug freeze enable */ -void can_debug_freeze_enable(uint32_t can_periph); -/* CAN debug freeze disable */ -void can_debug_freeze_disable(uint32_t can_periph); -/* CAN time trigger mode enable */ -void can_time_trigger_mode_enable(uint32_t can_periph); -/* CAN time trigger mode disable */ -void can_time_trigger_mode_disable(uint32_t can_periph); - -/* transmit functions */ -/* transmit CAN message */ -uint8_t can_message_transmit(uint32_t can_periph, can_trasnmit_message_struct* transmit_message); -/* get CAN transmit state */ -can_transmit_state_enum can_transmit_states(uint32_t can_periph, uint8_t mailbox_number); -/* stop CAN transmission */ -void can_transmission_stop(uint32_t can_periph, uint8_t mailbox_number); -/* CAN receive message */ -void can_message_receive(uint32_t can_periph, uint8_t fifo_number, can_receive_message_struct* receive_message); -/* CAN release fifo */ -void can_fifo_release(uint32_t can_periph, uint8_t fifo_number); -/* CAN receive message length */ -uint8_t can_receive_message_length_get(uint32_t can_periph, uint8_t fifo_number); -/* CAN working mode */ -ErrStatus can_working_mode_set(uint32_t can_periph, uint8_t working_mode); -/* CAN wakeup from sleep mode */ -ErrStatus can_wakeup(uint32_t can_periph); - -/* CAN get error */ -can_error_enum can_error_get(uint32_t can_periph); -/* get CAN receive error number */ -uint8_t can_receive_error_number_get(uint32_t can_periph); -/* get CAN transmit error number */ -uint8_t can_transmit_error_number_get(uint32_t can_periph); - -/* interrupt & flag functions */ -/* CAN interrupt enable */ -void can_interrupt_enable(uint32_t can_periph, uint32_t interrupt); -/* CAN interrupt disable */ -void can_interrupt_disable(uint32_t can_periph, uint32_t interrupt); -/* CAN get flag state */ -FlagStatus can_flag_get(uint32_t can_periph, can_flag_enum flag); -/* CAN clear flag state */ -void can_flag_clear(uint32_t can_periph, can_flag_enum flag); -/* CAN get interrupt flag state */ -FlagStatus can_interrupt_flag_get(uint32_t can_periph, can_interrupt_flag_enum flag); -/* CAN clear interrupt flag state */ -void can_interrupt_flag_clear(uint32_t can_periph, can_interrupt_flag_enum flag); - -#endif /* GD32F10x_CAN_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_crc.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_crc.h deleted file mode 100644 index 84ac0ff..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_crc.h +++ /dev/null @@ -1,80 +0,0 @@ -/*! - \file gd32f10x_crc.h - \brief definitions for the CRC - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_CRC_H -#define GD32F10X_CRC_H - -#include "gd32f10x.h" - -/* CRC definitions */ -#define CRC CRC_BASE - -/* registers definitions */ -#define CRC_DATA REG32(CRC + 0x00U) /*!< CRC data register */ -#define CRC_FDATA REG32(CRC + 0x04U) /*!< CRC free data register */ -#define CRC_CTL REG32(CRC + 0x08U) /*!< CRC control register */ - -/* bits definitions */ -/* CRC_DATA */ -#define CRC_DATA_DATA BITS(0,31) /*!< CRC calculation result bits */ - -/* CRC_FDATA */ -#define CRC_FDATA_FDATA BITS(0,7) /*!< CRC free data bits */ - -/* CRC_CTL */ -#define CRC_CTL_RST BIT(0) /*!< CRC reset CRC_DATA register bit */ - -/* function declarations */ -/* deinit CRC calculation unit */ -void crc_deinit(void); - -/* reset data register to the value of initializaiton data register */ -void crc_data_register_reset(void); -/* read the value of the data register */ -uint32_t crc_data_register_read(void); - -/* read the value of the free data register */ -uint8_t crc_free_data_register_read(void); -/* write data to the free data register */ -void crc_free_data_register_write(uint8_t free_data); - -/* calculate the CRC value of a 32-bit data */ -uint32_t crc_single_data_calculate(uint32_t sdata); -/* calculate the CRC value of an array of 32-bit values */ -uint32_t crc_block_data_calculate(uint32_t array[], uint32_t size); - -#endif /* GD32F10X_CRC_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dac.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dac.h deleted file mode 100644 index 6260fde..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dac.h +++ /dev/null @@ -1,249 +0,0 @@ -/*! - \file gd32f10x_dac.h - \brief definitions for the DAC - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_DAC_H -#define GD32F10X_DAC_H - -#include "gd32f10x.h" - -/* DACx(x=0,1) definitions */ -#define DAC DAC_BASE -#define DAC0 0U -#define DAC1 1U - -/* registers definitions */ -#define DAC_CTL REG32(DAC + 0x00U) /*!< DAC control register */ -#define DAC_SWT REG32(DAC + 0x04U) /*!< DAC software trigger register */ -#define DAC0_R12DH REG32(DAC + 0x08U) /*!< DAC0 12-bit right-aligned data holding register */ -#define DAC0_L12DH REG32(DAC + 0x0CU) /*!< DAC0 12-bit left-aligned data holding register */ -#define DAC0_R8DH REG32(DAC + 0x10U) /*!< DAC0 8-bit right-aligned data holding register */ -#define DAC1_R12DH REG32(DAC + 0x14U) /*!< DAC1 12-bit right-aligned data holding register */ -#define DAC1_L12DH REG32(DAC + 0x18U) /*!< DAC1 12-bit left-aligned data holding register */ -#define DAC1_R8DH REG32(DAC + 0x1CU) /*!< DAC1 8-bit right-aligned data holding register */ -#define DACC_R12DH REG32(DAC + 0x20U) /*!< DAC concurrent mode 12-bit right-aligned data holding register */ -#define DACC_L12DH REG32(DAC + 0x24U) /*!< DAC concurrent mode 12-bit left-aligned data holding register */ -#define DACC_R8DH REG32(DAC + 0x28U) /*!< DAC concurrent mode 8-bit right-aligned data holding register */ -#define DAC0_DO REG32(DAC + 0x2CU) /*!< DAC0 data output register */ -#define DAC1_DO REG32(DAC + 0x30U) /*!< DAC1 data output register */ - -/* bits definitions */ -/* DAC_CTL */ -#define DAC_CTL_DEN0 BIT(0) /*!< DAC0 enable/disable bit */ -#define DAC_CTL_DBOFF0 BIT(1) /*!< DAC0 output buffer turn on/off bit */ -#define DAC_CTL_DTEN0 BIT(2) /*!< DAC0 trigger enable/disable bit */ -#define DAC_CTL_DTSEL0 BITS(3,5) /*!< DAC0 trigger source selection enable/disable bits */ -#define DAC_CTL_DWM0 BITS(6,7) /*!< DAC0 noise wave mode */ -#define DAC_CTL_DWBW0 BITS(8,11) /*!< DAC0 noise wave bit width */ -#define DAC_CTL_DDMAEN0 BIT(12) /*!< DAC0 DMA enable/disable bit */ -#define DAC_CTL_DEN1 BIT(16) /*!< DAC1 enable/disable bit */ -#define DAC_CTL_DBOFF1 BIT(17) /*!< DAC1 output buffer turn on/turn off bit */ -#define DAC_CTL_DTEN1 BIT(18) /*!< DAC1 trigger enable/disable bit */ -#define DAC_CTL_DTSEL1 BITS(19,21) /*!< DAC1 trigger source selection enable/disable bits */ -#define DAC_CTL_DWM1 BITS(22,23) /*!< DAC1 noise wave mode */ -#define DAC_CTL_DWBW1 BITS(24,27) /*!< DAC1 noise wave bit width */ -#define DAC_CTL_DDMAEN1 BIT(28) /*!< DAC1 DMA enable/disable bit */ - -/* DAC_SWT */ -#define DAC_SWT_SWTR0 BIT(0) /*!< DAC0 software trigger bit, cleared by hardware */ -#define DAC_SWT_SWTR1 BIT(1) /*!< DAC1 software trigger bit, cleared by hardware */ - -/* DAC0_R12DH */ -#define DAC0_R12DH_DAC0_DH BITS(0,11) /*!< DAC0 12-bit right-aligned data bits */ - -/* DAC0_L12DH */ -#define DAC0_L12DH_DAC0_DH BITS(4,15) /*!< DAC0 12-bit left-aligned data bits */ - -/* DAC0_R8DH */ -#define DAC0_R8DH_DAC0_DH BITS(0,7) /*!< DAC0 8-bit right-aligned data bits */ - -/* DAC1_R12DH */ -#define DAC1_R12DH_DAC1_DH BITS(0,11) /*!< DAC1 12-bit right-aligned data bits */ - -/* DAC1_L12DH */ -#define DAC1_L12DH_DAC1_DH BITS(4,15) /*!< DAC1 12-bit left-aligned data bits */ - -/* DAC1_R8DH */ -#define DAC1_R8DH_DAC1_DH BITS(0,7) /*!< DAC1 8-bit right-aligned data bits */ - -/* DACC_R12DH */ -#define DACC_R12DH_DAC0_DH BITS(0,11) /*!< DAC concurrent mode DAC0 12-bit right-aligned data bits */ -#define DACC_R12DH_DAC1_DH BITS(16,27) /*!< DAC concurrent mode DAC1 12-bit right-aligned data bits */ - -/* DACC_L12DH */ -#define DACC_L12DH_DAC0_DH BITS(4,15) /*!< DAC concurrent mode DAC0 12-bit left-aligned data bits */ -#define DACC_L12DH_DAC1_DH BITS(20,31) /*!< DAC concurrent mode DAC1 12-bit left-aligned data bits */ - -/* DACC_R8DH */ -#define DACC_R8DH_DAC0_DH BITS(0,7) /*!< DAC concurrent mode DAC0 8-bit right-aligned data bits */ -#define DACC_R8DH_DAC1_DH BITS(8,15) /*!< DAC concurrent mode DAC1 8-bit right-aligned data bits */ - -/* DAC0_DO */ -#define DAC0_DO_DAC0_DO BITS(0,11) /*!< DAC0 12-bit output data bits */ - -/* DAC1_DO */ -#define DAC1_DO_DAC1_DO BITS(0,11) /*!< DAC1 12-bit output data bits */ - -/* constants definitions */ -/* DAC trigger source */ -#define CTL_DTSEL(regval) (BITS(3,5) & ((uint32_t)(regval) << 3)) -#define DAC_TRIGGER_T5_TRGO CTL_DTSEL(0) /*!< TIMER5 TRGO */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define DAC_TRIGGER_T7_TRGO CTL_DTSEL(1) /*!< TIMER7 TRGO */ -#elif defined(GD32F10X_CL) -#define DAC_TRIGGER_T2_TRGO CTL_DTSEL(1) /*!< TIMER2 TRGO */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ -#define DAC_TRIGGER_T6_TRGO CTL_DTSEL(2) /*!< TIMER6 TRGO */ -#define DAC_TRIGGER_T4_TRGO CTL_DTSEL(3) /*!< TIMER4 TRGO */ -#define DAC_TRIGGER_T1_TRGO CTL_DTSEL(4) /*!< TIMER1 TRGO */ -#define DAC_TRIGGER_T3_TRGO CTL_DTSEL(5) /*!< TIMER3 TRGO */ -#define DAC_TRIGGER_EXTI_9 CTL_DTSEL(6) /*!< EXTI interrupt line9 event */ -#define DAC_TRIGGER_SOFTWARE CTL_DTSEL(7) /*!< software trigger */ - -/* DAC noise wave mode */ -#define CTL_DWM(regval) (BITS(6,7) & ((uint32_t)(regval) << 6)) -#define DAC_WAVE_DISABLE CTL_DWM(0) /*!< wave disable */ -#define DAC_WAVE_MODE_LFSR CTL_DWM(1) /*!< LFSR noise mode */ -#define DAC_WAVE_MODE_TRIANGLE CTL_DWM(2) /*!< triangle noise mode */ - -/* DAC noise wave bit width */ -#define DWBW(regval) (BITS(8,11) & ((uint32_t)(regval) << 8)) -#define DAC_WAVE_BIT_WIDTH_1 DWBW(0) /*!< bit width of the wave signal is 1 */ -#define DAC_WAVE_BIT_WIDTH_2 DWBW(1) /*!< bit width of the wave signal is 2 */ -#define DAC_WAVE_BIT_WIDTH_3 DWBW(2) /*!< bit width of the wave signal is 3 */ -#define DAC_WAVE_BIT_WIDTH_4 DWBW(3) /*!< bit width of the wave signal is 4 */ -#define DAC_WAVE_BIT_WIDTH_5 DWBW(4) /*!< bit width of the wave signal is 5 */ -#define DAC_WAVE_BIT_WIDTH_6 DWBW(5) /*!< bit width of the wave signal is 6 */ -#define DAC_WAVE_BIT_WIDTH_7 DWBW(6) /*!< bit width of the wave signal is 7 */ -#define DAC_WAVE_BIT_WIDTH_8 DWBW(7) /*!< bit width of the wave signal is 8 */ -#define DAC_WAVE_BIT_WIDTH_9 DWBW(8) /*!< bit width of the wave signal is 9 */ -#define DAC_WAVE_BIT_WIDTH_10 DWBW(9) /*!< bit width of the wave signal is 10 */ -#define DAC_WAVE_BIT_WIDTH_11 DWBW(10) /*!< bit width of the wave signal is 11 */ -#define DAC_WAVE_BIT_WIDTH_12 DWBW(11) /*!< bit width of the wave signal is 12 */ - -/* unmask LFSR bits in DAC LFSR noise mode */ -#define DAC_LFSR_BIT0 DAC_WAVE_BIT_WIDTH_1 /*!< unmask the LFSR bit0 */ -#define DAC_LFSR_BITS1_0 DAC_WAVE_BIT_WIDTH_2 /*!< unmask the LFSR bits[1:0] */ -#define DAC_LFSR_BITS2_0 DAC_WAVE_BIT_WIDTH_3 /*!< unmask the LFSR bits[2:0] */ -#define DAC_LFSR_BITS3_0 DAC_WAVE_BIT_WIDTH_4 /*!< unmask the LFSR bits[3:0] */ -#define DAC_LFSR_BITS4_0 DAC_WAVE_BIT_WIDTH_5 /*!< unmask the LFSR bits[4:0] */ -#define DAC_LFSR_BITS5_0 DAC_WAVE_BIT_WIDTH_6 /*!< unmask the LFSR bits[5:0] */ -#define DAC_LFSR_BITS6_0 DAC_WAVE_BIT_WIDTH_7 /*!< unmask the LFSR bits[6:0] */ -#define DAC_LFSR_BITS7_0 DAC_WAVE_BIT_WIDTH_8 /*!< unmask the LFSR bits[7:0] */ -#define DAC_LFSR_BITS8_0 DAC_WAVE_BIT_WIDTH_9 /*!< unmask the LFSR bits[8:0] */ -#define DAC_LFSR_BITS9_0 DAC_WAVE_BIT_WIDTH_10 /*!< unmask the LFSR bits[9:0] */ -#define DAC_LFSR_BITS10_0 DAC_WAVE_BIT_WIDTH_11 /*!< unmask the LFSR bits[10:0] */ -#define DAC_LFSR_BITS11_0 DAC_WAVE_BIT_WIDTH_12 /*!< unmask the LFSR bits[11:0] */ - -/* DAC data alignment */ -#define DATA_ALIGN(regval) (BITS(0,1) & ((uint32_t)(regval) << 0)) -#define DAC_ALIGN_12B_R DATA_ALIGN(0) /*!< data right 12b alignment */ -#define DAC_ALIGN_12B_L DATA_ALIGN(1) /*!< data left 12b alignment */ -#define DAC_ALIGN_8B_R DATA_ALIGN(2) /*!< data right 8b alignment */ -/* triangle amplitude in DAC triangle noise mode */ -#define DAC_TRIANGLE_AMPLITUDE_1 DAC_WAVE_BIT_WIDTH_1 /*!< triangle amplitude is 1 */ -#define DAC_TRIANGLE_AMPLITUDE_3 DAC_WAVE_BIT_WIDTH_2 /*!< triangle amplitude is 3 */ -#define DAC_TRIANGLE_AMPLITUDE_7 DAC_WAVE_BIT_WIDTH_3 /*!< triangle amplitude is 7 */ -#define DAC_TRIANGLE_AMPLITUDE_15 DAC_WAVE_BIT_WIDTH_4 /*!< triangle amplitude is 15 */ -#define DAC_TRIANGLE_AMPLITUDE_31 DAC_WAVE_BIT_WIDTH_5 /*!< triangle amplitude is 31 */ -#define DAC_TRIANGLE_AMPLITUDE_63 DAC_WAVE_BIT_WIDTH_6 /*!< triangle amplitude is 63 */ -#define DAC_TRIANGLE_AMPLITUDE_127 DAC_WAVE_BIT_WIDTH_7 /*!< triangle amplitude is 127 */ -#define DAC_TRIANGLE_AMPLITUDE_255 DAC_WAVE_BIT_WIDTH_8 /*!< triangle amplitude is 255 */ -#define DAC_TRIANGLE_AMPLITUDE_511 DAC_WAVE_BIT_WIDTH_9 /*!< triangle amplitude is 511 */ -#define DAC_TRIANGLE_AMPLITUDE_1023 DAC_WAVE_BIT_WIDTH_10 /*!< triangle amplitude is 1023 */ -#define DAC_TRIANGLE_AMPLITUDE_2047 DAC_WAVE_BIT_WIDTH_11 /*!< triangle amplitude is 2047 */ -#define DAC_TRIANGLE_AMPLITUDE_4095 DAC_WAVE_BIT_WIDTH_12 /*!< triangle amplitude is 4095 */ - -/* function declarations */ -/* initialization functions */ -/* deinitialize DAC */ -void dac_deinit(void); -/* enable DAC */ -void dac_enable(uint32_t dac_periph); -/* disable DAC */ -void dac_disable(uint32_t dac_periph); -/* enable DAC DMA */ -void dac_dma_enable(uint32_t dac_periph); -/* disable DAC DMA */ -void dac_dma_disable(uint32_t dac_periph); -/* enable DAC output buffer */ -void dac_output_buffer_enable(uint32_t dac_periph); -/* disable DAC output buffer */ -void dac_output_buffer_disable(uint32_t dac_periph); -/* get the last data output value */ -uint16_t dac_output_value_get(uint32_t dac_periph); -/* set DAC data holding register value */ -void dac_data_set(uint32_t dac_periph, uint32_t dac_align, uint16_t data); - -/* DAC trigger configuration */ -/* enable DAC trigger */ -void dac_trigger_enable(uint32_t dac_periph); -/* disable DAC trigger */ -void dac_trigger_disable(uint32_t dac_periph); -/* configure DAC trigger source */ -void dac_trigger_source_config(uint32_t dac_periph, uint32_t triggersource); -/* enable DAC software trigger */ -void dac_software_trigger_enable(uint32_t dac_periph); -/* disable DAC software trigger */ -void dac_software_trigger_disable(uint32_t dac_periph); - -/* DAC wave mode configuration */ -/* configure DAC wave mode */ -void dac_wave_mode_config(uint32_t dac_periph, uint32_t wave_mode); -/* configure DAC wave bit width */ -void dac_wave_bit_width_config(uint32_t dac_periph, uint32_t bit_width); -/* configure DAC LFSR noise mode */ -void dac_lfsr_noise_config(uint32_t dac_periph, uint32_t unmask_bits); -/* configure DAC triangle noise mode */ -void dac_triangle_noise_config(uint32_t dac_periph, uint32_t amplitude); - -/* DAC concurrent mode configuration */ -/* enable DAC concurrent mode */ -void dac_concurrent_enable(void); -/* disable DAC concurrent mode */ -void dac_concurrent_disable(void); -/* enable DAC concurrent software trigger */ -void dac_concurrent_software_trigger_enable(void); -/* disable DAC concurrent software trigger */ -void dac_concurrent_software_trigger_disable(void); -/* enable DAC concurrent buffer function */ -void dac_concurrent_output_buffer_enable(void); -/* disable DAC concurrent buffer function */ -void dac_concurrent_output_buffer_disable(void); -/* set DAC concurrent mode data holding register value */ -void dac_concurrent_data_set(uint32_t dac_align, uint16_t data0, uint16_t data1); - -#endif /* GD32F10X_DAC_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dbg.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dbg.h deleted file mode 100644 index d2e5087..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dbg.h +++ /dev/null @@ -1,152 +0,0 @@ -/*! - \file gd32f10x_dbg.h - \brief definitions for the DBG - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2019-07-01, V2.1.1, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_DBG_H -#define GD32F10X_DBG_H - -#include "gd32f10x.h" - -/* DBG definitions */ -#define DBG DBG_BASE - -/* registers definitions */ -#define DBG_ID REG32(DBG + 0x00U) /*!< DBG_ID code register */ -#define DBG_CTL REG32(DBG + 0x04U) /*!< DBG control register */ - -/* bits definitions */ -/* DBG_ID */ -#define DBG_ID_ID_CODE BITS(0,31) /*!< DBG ID code values */ - -/* DBG_CTL */ -#define DBG_CTL_SLP_HOLD BIT(0) /*!< keep debugger connection during sleep mode */ -#define DBG_CTL_DSLP_HOLD BIT(1) /*!< keep debugger connection during deepsleep mode */ -#define DBG_CTL_STB_HOLD BIT(2) /*!< keep debugger connection during standby mode */ -#define DBG_CTL_TRACE_IOEN BIT(5) /*!< enable trace pin assignment */ -#define DBG_CTL_TRACE_MODE BITS(6,7) /*!< trace pin mode selection */ -#define DBG_CTL_FWDGT_HOLD BIT(8) /*!< debug FWDGT kept when core is halted */ -#define DBG_CTL_WWDGT_HOLD BIT(9) /*!< debug WWDGT kept when core is halted */ -#define DBG_CTL_TIMER0_HOLD BIT(10) /*!< hold TIMER0 counter when core is halted */ -#define DBG_CTL_TIMER1_HOLD BIT(11) /*!< hold TIMER1 counter when core is halted */ -#define DBG_CTL_TIMER2_HOLD BIT(12) /*!< hold TIMER2 counter when core is halted */ -#define DBG_CTL_TIMER3_HOLD BIT(13) /*!< hold TIMER3 counter when core is halted */ -#define DBG_CTL_CAN0_HOLD BIT(14) /*!< debug CAN0 kept when core is halted */ -#define DBG_CTL_I2C0_HOLD BIT(15) /*!< hold I2C0 smbus when core is halted */ -#define DBG_CTL_I2C1_HOLD BIT(16) /*!< hold I2C1 smbus when core is halted */ -#define DBG_CTL_TIMER7_HOLD BIT(17) /*!< hold TIMER7 counter when core is halted */ -#define DBG_CTL_TIMER4_HOLD BIT(18) /*!< hold TIMER4 counter when core is halted */ -#define DBG_CTL_TIMER5_HOLD BIT(19) /*!< hold TIMER5 counter when core is halted */ -#define DBG_CTL_TIMER6_HOLD BIT(20) /*!< hold TIMER6 counter when core is halted */ -#ifdef GD32F10X_CL -#define DBG_CTL_CAN1_HOLD BIT(21) /*!< debug CAN1 kept when core is halted */ -#endif /* GD32F10X_CL */ -#ifdef GD32F10X_XD -#define DBG_CTL_TIMER11_HOLD BIT(25) /*!< hold TIMER11 counter when core is halted */ -#define DBG_CTL_TIMER12_HOLD BIT(26) /*!< hold TIMER12 counter when core is halted */ -#define DBG_CTL_TIMER13_HOLD BIT(27) /*!< hold TIMER13 counter when core is halted */ -#define DBG_CTL_TIMER8_HOLD BIT(28) /*!< hold TIMER8 counter when core is halted */ -#define DBG_CTL_TIMER9_HOLD BIT(29) /*!< hold TIMER9 counter when core is halted */ -#define DBG_CTL_TIMER10_HOLD BIT(30) /*!< hold TIMER10 counter when core is halted */ -#endif /* GD32F10X_XD */ - -/* constants definitions */ -/* debug hold when core is halted */ -typedef enum -{ - DBG_FWDGT_HOLD = BIT(8), /*!< debug FWDGT kept when core is halted */ - DBG_WWDGT_HOLD = BIT(9), /*!< debug WWDGT kept when core is halted */ - DBG_TIMER0_HOLD = BIT(10), /*!< hold TIMER0 counter when core is halted */ - DBG_TIMER1_HOLD = BIT(11), /*!< hold TIMER1 counter when core is halted */ - DBG_TIMER2_HOLD = BIT(12), /*!< hold TIMER2 counter when core is halted */ - DBG_TIMER3_HOLD = BIT(13), /*!< hold TIMER3 counter when core is halted */ - DBG_CAN0_HOLD = BIT(14), /*!< debug CAN0 kept when core is halted */ - DBG_I2C0_HOLD = BIT(15), /*!< hold I2C0 smbus when core is halted */ - DBG_I2C1_HOLD = BIT(16), /*!< hold I2C1 smbus when core is halted */ - DBG_TIMER7_HOLD = BIT(17), /*!< hold TIMER7 counter when core is halted */ - DBG_TIMER4_HOLD = BIT(18), /*!< hold TIMER4 counter when core is halted */ - DBG_TIMER5_HOLD = BIT(19), /*!< hold TIMER5 counter when core is halted */ - DBG_TIMER6_HOLD = BIT(20), /*!< hold TIMER6 counter when core is halted */ -#ifdef GD32F10X_CL - DBG_CAN1_HOLD = BIT(21), /*!< debug CAN1 kept when core is halted */ -#endif /* GD32F10X_CL */ -#if (defined(GD32F10X_XD) || defined(GD32F10X_CL)) - DBG_TIMER11_HOLD = BIT(25), /*!< hold TIMER11 counter when core is halted */ - DBG_TIMER12_HOLD = BIT(26), /*!< hold TIMER12 counter when core is halted */ - DBG_TIMER13_HOLD = BIT(27), /*!< hold TIMER13 counter when core is halted */ - DBG_TIMER8_HOLD = BIT(28), /*!< hold TIMER8 counter when core is halted */ - DBG_TIMER9_HOLD = BIT(29), /*!< hold TIMER9 counter when core is halted */ - DBG_TIMER10_HOLD = BIT(30), /*!< hold TIMER10 counter when core is halted */ -#endif /* GD32F10X_XD || GD32F10X_CL*/ -}dbg_periph_enum; - -/* DBG low power mode configurations */ -#define DBG_LOW_POWER_SLEEP DBG_CTL_SLP_HOLD /*!< keep debugger connection during sleep mode */ -#define DBG_LOW_POWER_DEEPSLEEP DBG_CTL_DSLP_HOLD /*!< keep debugger connection during deepsleep mode */ -#define DBG_LOW_POWER_STANDBY DBG_CTL_STB_HOLD /*!< keep debugger connection during standby mode */ - -/* DBG_CTL0_TRACE_MODE configurations */ -#define CTL_TRACE_MODE(regval) (BITS(6,7) & ((uint32_t)(regval) << 6U)) -#define TRACE_MODE_ASYNC CTL_TRACE_MODE(0) /*!< trace pin used for async mode */ -#define TRACE_MODE_SYNC_DATASIZE_1 CTL_TRACE_MODE(1) /*!< trace pin used for sync mode and data size is 1 */ -#define TRACE_MODE_SYNC_DATASIZE_2 CTL_TRACE_MODE(2) /*!< trace pin used for sync mode and data size is 2 */ -#define TRACE_MODE_SYNC_DATASIZE_4 CTL_TRACE_MODE(3) /*!< trace pin used for sync mode and data size is 4 */ - -/* function declarations */ -/* read DBG_ID code register */ -uint32_t dbg_id_get(void); - -/* low power behavior configuration */ -/* enable low power behavior when the MCU is in debug mode */ -void dbg_low_power_enable(uint32_t dbg_low_power); -/* disable low power behavior when the MCU is in debug mode */ -void dbg_low_power_disable(uint32_t dbg_low_power); - -/* peripheral behavior configuration */ -/* enable peripheral behavior when the MCU is in debug mode */ -void dbg_periph_enable(dbg_periph_enum dbg_periph); -/* disable peripheral behavior when the MCU is in debug mode */ -void dbg_periph_disable(dbg_periph_enum dbg_periph); - -/* trace pin assignment configuration */ -/* enable trace pin assignment */ -void dbg_trace_pin_enable(void); -/* disable trace pin assignment */ -void dbg_trace_pin_disable(void); -/* set trace pin mode */ -void dbg_trace_pin_mode_set(uint32_t trace_mode); - -#endif /* GD32F10X_DBG_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dma.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dma.h deleted file mode 100644 index 52feec4..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_dma.h +++ /dev/null @@ -1,289 +0,0 @@ -/*! - \file gd32f10x_dma.h - \brief definitions for the DMA - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2019-10-30, V2.1.1, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_DMA_H -#define GD32F10X_DMA_H - -#include "gd32f10x.h" - -/* DMA definitions */ -#define DMA0 (DMA_BASE) /*!< DMA0 base address */ -#define DMA1 (DMA_BASE + 0x0400U) /*!< DMA1 base address */ - -/* registers definitions */ -#define DMA_INTF(dmax) REG32((dmax) + 0x00U) /*!< DMA interrupt flag register */ -#define DMA_INTC(dmax) REG32((dmax) + 0x04U) /*!< DMA interrupt flag clear register */ - -#define DMA_CH0CTL(dmax) REG32((dmax) + 0x08U) /*!< DMA channel 0 control register */ -#define DMA_CH0CNT(dmax) REG32((dmax) + 0x0CU) /*!< DMA channel 0 counter register */ -#define DMA_CH0PADDR(dmax) REG32((dmax) + 0x10U) /*!< DMA channel 0 peripheral base address register */ -#define DMA_CH0MADDR(dmax) REG32((dmax) + 0x14U) /*!< DMA channel 0 memory base address register */ - -#define DMA_CH1CTL(dmax) REG32((dmax) + 0x1CU) /*!< DMA channel 1 control register */ -#define DMA_CH1CNT(dmax) REG32((dmax) + 0x20U) /*!< DMA channel 1 counter register */ -#define DMA_CH1PADDR(dmax) REG32((dmax) + 0x24U) /*!< DMA channel 1 peripheral base address register */ -#define DMA_CH1MADDR(dmax) REG32((dmax) + 0x28U) /*!< DMA channel 1 memory base address register */ - -#define DMA_CH2CTL(dmax) REG32((dmax) + 0x30U) /*!< DMA channel 2 control register */ -#define DMA_CH2CNT(dmax) REG32((dmax) + 0x34U) /*!< DMA channel 2 counter register */ -#define DMA_CH2PADDR(dmax) REG32((dmax) + 0x38U) /*!< DMA channel 2 peripheral base address register */ -#define DMA_CH2MADDR(dmax) REG32((dmax) + 0x3CU) /*!< DMA channel 2 memory base address register */ - -#define DMA_CH3CTL(dmax) REG32((dmax) + 0x44U) /*!< DMA channel 3 control register */ -#define DMA_CH3CNT(dmax) REG32((dmax) + 0x48U) /*!< DMA channel 3 counter register */ -#define DMA_CH3PADDR(dmax) REG32((dmax) + 0x4CU) /*!< DMA channel 3 peripheral base address register */ -#define DMA_CH3MADDR(dmax) REG32((dmax) + 0x50U) /*!< DMA channel 3 memory base address register */ - -#define DMA_CH4CTL(dmax) REG32((dmax) + 0x58U) /*!< DMA channel 4 control register */ -#define DMA_CH4CNT(dmax) REG32((dmax) + 0x5CU) /*!< DMA channel 4 counter register */ -#define DMA_CH4PADDR(dmax) REG32((dmax) + 0x60U) /*!< DMA channel 4 peripheral base address register */ -#define DMA_CH4MADDR(dmax) REG32((dmax) + 0x64U) /*!< DMA channel 4 memory base address register */ - -#define DMA_CH5CTL(dmax) REG32((dmax) + 0x6CU) /*!< DMA channel 5 control register */ -#define DMA_CH5CNT(dmax) REG32((dmax) + 0x70U) /*!< DMA channel 5 counter register */ -#define DMA_CH5PADDR(dmax) REG32((dmax) + 0x74U) /*!< DMA channel 5 peripheral base address register */ -#define DMA_CH5MADDR(dmax) REG32((dmax) + 0x78U) /*!< DMA channel 5 memory base address register */ - -#define DMA_CH6CTL(dmax) REG32((dmax) + 0x80U) /*!< DMA channel 6 control register */ -#define DMA_CH6CNT(dmax) REG32((dmax) + 0x84U) /*!< DMA channel 6 counter register */ -#define DMA_CH6PADDR(dmax) REG32((dmax) + 0x88U) /*!< DMA channel 6 peripheral base address register */ -#define DMA_CH6MADDR(dmax) REG32((dmax) + 0x8CU) /*!< DMA channel 6 memory base address register */ - -/* bits definitions */ -/* DMA_INTF */ -#define DMA_INTF_GIF BIT(0) /*!< global interrupt flag of channel */ -#define DMA_INTF_FTFIF BIT(1) /*!< full transfer finish flag of channel */ -#define DMA_INTF_HTFIF BIT(2) /*!< half transfer finish flag of channel */ -#define DMA_INTF_ERRIF BIT(3) /*!< error flag of channel */ - -/* DMA_INTC */ -#define DMA_INTC_GIFC BIT(0) /*!< clear global interrupt flag of channel */ -#define DMA_INTC_FTFIFC BIT(1) /*!< clear transfer finish flag of channel */ -#define DMA_INTC_HTFIFC BIT(2) /*!< clear half transfer finish flag of channel */ -#define DMA_INTC_ERRIFC BIT(3) /*!< clear error flag of channel */ - -/* DMA_CHxCTL, x=0..6 */ -#define DMA_CHXCTL_CHEN BIT(0) /*!< channel enable */ -#define DMA_CHXCTL_FTFIE BIT(1) /*!< enable bit for channel full transfer finish interrupt */ -#define DMA_CHXCTL_HTFIE BIT(2) /*!< enable bit for channel half transfer finish interrupt */ -#define DMA_CHXCTL_ERRIE BIT(3) /*!< enable bit for channel error interrupt */ -#define DMA_CHXCTL_DIR BIT(4) /*!< transfer direction */ -#define DMA_CHXCTL_CMEN BIT(5) /*!< circular mode enable */ -#define DMA_CHXCTL_PNAGA BIT(6) /*!< next address generation algorithm of peripheral */ -#define DMA_CHXCTL_MNAGA BIT(7) /*!< next address generation algorithm of memory */ -#define DMA_CHXCTL_PWIDTH BITS(8,9) /*!< transfer data width of peripheral */ -#define DMA_CHXCTL_MWIDTH BITS(10,11) /*!< transfer data width of memory */ -#define DMA_CHXCTL_PRIO BITS(12,13) /*!< priority level */ -#define DMA_CHXCTL_M2M BIT(14) /*!< memory to memory mode */ - -/* DMA_CHxCNT, x=0..6 */ -#define DMA_CHXCNT_CNT BITS(0,15) /*!< transfer counter */ - -/* DMA_CHxPADDR, x=0..6 */ -#define DMA_CHXPADDR_PADDR BITS(0,31) /*!< peripheral base address */ - -/* DMA_CHxMADDR, x=0..6 */ -#define DMA_CHXMADDR_MADDR BITS(0,31) /*!< memory base address */ - -/* constants definitions */ -/* DMA channel select */ -typedef enum -{ - DMA_CH0 = 0, /*!< DMA channel 0 */ - DMA_CH1, /*!< DMA channel 1 */ - DMA_CH2, /*!< DMA channel 2 */ - DMA_CH3, /*!< DMA channel 3 */ - DMA_CH4, /*!< DMA channel 4 */ - DMA_CH5, /*!< DMA channel 5 */ - DMA_CH6 /*!< DMA channel 6 */ -} dma_channel_enum; - -/* DMA initialize struct */ -typedef struct -{ - uint32_t periph_addr; /*!< peripheral base address */ - uint32_t periph_width; /*!< transfer data size of peripheral */ - uint32_t memory_addr; /*!< memory base address */ - uint32_t memory_width; /*!< transfer data size of memory */ - uint32_t number; /*!< channel transfer number */ - uint32_t priority; /*!< channel priority level */ - uint8_t periph_inc; /*!< peripheral increasing mode */ - uint8_t memory_inc; /*!< memory increasing mode */ - uint8_t direction; /*!< channel data transfer direction */ - -} dma_parameter_struct; - -#define DMA_FLAG_ADD(flag, shift) ((flag) << ((shift) * 4U)) /*!< DMA channel flag shift */ - -/* DMA_register address */ -#define DMA_CHCTL(dma, channel) REG32(((dma) + 0x08U) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXCTL register */ -#define DMA_CHCNT(dma, channel) REG32(((dma) + 0x0CU) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXCNT register */ -#define DMA_CHPADDR(dma, channel) REG32(((dma) + 0x10U) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXPADDR register */ -#define DMA_CHMADDR(dma, channel) REG32(((dma) + 0x14U) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXMADDR register */ - -/* DMA reset value */ -#define DMA_CHCTL_RESET_VALUE ((uint32_t)0x00000000U) /*!< the reset value of DMA channel CHXCTL register */ -#define DMA_CHCNT_RESET_VALUE ((uint32_t)0x00000000U) /*!< the reset value of DMA channel CHXCNT register */ -#define DMA_CHPADDR_RESET_VALUE ((uint32_t)0x00000000U) /*!< the reset value of DMA channel CHXPADDR register */ -#define DMA_CHMADDR_RESET_VALUE ((uint32_t)0x00000000U) /*!< the reset value of DMA channel CHXMADDR register */ -#define DMA_CHINTF_RESET_VALUE (DMA_INTF_GIF | DMA_INTF_FTFIF | \ - DMA_INTF_HTFIF | DMA_INTF_ERRIF) /*!< clear DMA channel DMA_INTF register */ - -/* DMA_INTF register */ -/* interrupt flag bits */ -#define DMA_INT_FLAG_G DMA_INTF_GIF /*!< global interrupt flag of channel */ -#define DMA_INT_FLAG_FTF DMA_INTF_FTFIF /*!< full transfer finish interrupt flag of channel */ -#define DMA_INT_FLAG_HTF DMA_INTF_HTFIF /*!< half transfer finish interrupt flag of channel */ -#define DMA_INT_FLAG_ERR DMA_INTF_ERRIF /*!< error interrupt flag of channel */ - -/* flag bits */ -#define DMA_FLAG_G DMA_INTF_GIF /*!< global interrupt flag of channel */ -#define DMA_FLAG_FTF DMA_INTF_FTFIF /*!< full transfer finish flag of channel */ -#define DMA_FLAG_HTF DMA_INTF_HTFIF /*!< half transfer finish flag of channel */ -#define DMA_FLAG_ERR DMA_INTF_ERRIF /*!< error flag of channel */ - -/* DMA_CHxCTL register */ -/* interrupt enable bits */ -#define DMA_INT_FTF DMA_CHXCTL_FTFIE /*!< enable bit for channel full transfer finish interrupt */ -#define DMA_INT_HTF DMA_CHXCTL_HTFIE /*!< enable bit for channel half transfer finish interrupt */ -#define DMA_INT_ERR DMA_CHXCTL_ERRIE /*!< enable bit for channel error interrupt */ - -/* transfer direction */ -#define DMA_PERIPHERAL_TO_MEMORY ((uint8_t)0x00U) /*!< read from peripheral and write to memory */ -#define DMA_MEMORY_TO_PERIPHERAL ((uint8_t)0x01U) /*!< read from memory and write to peripheral */ -/* circular mode */ -#define DMA_CIRCULAR_MODE_DISABLE ((uint32_t)0x00000000U) /*!< circular mode disable */ -#define DMA_CIRCULAR_MODE_ENABLE ((uint32_t)0x00000001U) /*!< circular mode enable */ - -/* peripheral increasing mode */ -#define DMA_PERIPH_INCREASE_DISABLE ((uint8_t)0x00U) /*!< next address of peripheral is fixed address mode */ -#define DMA_PERIPH_INCREASE_ENABLE ((uint8_t)0x01U) /*!< next address of peripheral is increasing address mode */ - -/* memory increasing mode */ -#define DMA_MEMORY_INCREASE_DISABLE ((uint8_t)0x00U) /*!< next address of memory is fixed address mode */ -#define DMA_MEMORY_INCREASE_ENABLE ((uint8_t)0x01U) /*!< next address of memory is increasing address mode */ - -/* transfer data size of peripheral */ -#define CHCTL_PWIDTH(regval) (BITS(8,9) & ((regval) << 8)) /*!< transfer data size of peripheral */ -#define DMA_PERIPHERAL_WIDTH_8BIT CHCTL_PWIDTH(0U) /*!< transfer data size of peripheral is 8-bit */ -#define DMA_PERIPHERAL_WIDTH_16BIT CHCTL_PWIDTH(1U) /*!< transfer data size of peripheral is 16-bit */ -#define DMA_PERIPHERAL_WIDTH_32BIT CHCTL_PWIDTH(2U) /*!< transfer data size of peripheral is 32-bit */ - -/* transfer data size of memory */ -#define CHCTL_MWIDTH(regval) (BITS(10,11) & ((regval) << 10)) /*!< transfer data size of memory */ -#define DMA_MEMORY_WIDTH_8BIT CHCTL_MWIDTH(0U) /*!< transfer data size of memory is 8-bit */ -#define DMA_MEMORY_WIDTH_16BIT CHCTL_MWIDTH(1U) /*!< transfer data size of memory is 16-bit */ -#define DMA_MEMORY_WIDTH_32BIT CHCTL_MWIDTH(2U) /*!< transfer data size of memory is 32-bit */ - -/* channel priority level */ -#define CHCTL_PRIO(regval) (BITS(12,13) & ((regval) << 12)) /*!< DMA channel priority level */ -#define DMA_PRIORITY_LOW CHCTL_PRIO(0U) /*!< low priority */ -#define DMA_PRIORITY_MEDIUM CHCTL_PRIO(1U) /*!< medium priority */ -#define DMA_PRIORITY_HIGH CHCTL_PRIO(2U) /*!< high priority */ -#define DMA_PRIORITY_ULTRA_HIGH CHCTL_PRIO(3U) /*!< ultra high priority */ - -/* memory to memory mode */ -#define DMA_MEMORY_TO_MEMORY_DISABLE ((uint32_t)0x00000000U) /*!< disable memory to memory mode */ -#define DMA_MEMORY_TO_MEMORY_ENABLE ((uint32_t)0x00000001U) /*!< enable memory to memory mode */ - -/* DMA_CHxCNT register */ -/* transfer counter */ -#define DMA_CHANNEL_CNT_MASK DMA_CHXCNT_CNT /*!< transfer counter mask */ - -/* function declarations */ -/* DMA deinitialization and initialization functions */ -/* deinitialize DMA a channel registers */ -void dma_deinit(uint32_t dma_periph, dma_channel_enum channelx); -/* initialize the parameters of DMA struct with the default values */ -void dma_struct_para_init(dma_parameter_struct* init_struct); -/* initialize DMA channel */ -void dma_init(uint32_t dma_periph, dma_channel_enum channelx, dma_parameter_struct *init_struct); -/* enable DMA circulation mode */ -void dma_circulation_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable DMA circulation mode */ -void dma_circulation_disable(uint32_t dma_periph, dma_channel_enum channelx); -/* enable memory to memory mode */ -void dma_memory_to_memory_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable memory to memory mode */ -void dma_memory_to_memory_disable(uint32_t dma_periph, dma_channel_enum channelx); -/* enable DMA channel */ -void dma_channel_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable DMA channel */ -void dma_channel_disable(uint32_t dma_periph, dma_channel_enum channelx); - -/* DMA configuration functions */ -/* set DMA peripheral base address */ -void dma_periph_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address); -/* set DMA memory base address */ -void dma_memory_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address); -/* set the number of remaining data to be transferred by the DMA */ -void dma_transfer_number_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t number); -/* get the number of remaining data to be transferred by the DMA */ -uint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx); -/* configure priority level of DMA channel */ -void dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t priority); -/* configure transfer data size of memory */ -void dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t mwidth); -/* configure transfer data size of peripheral */ -void dma_periph_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t pwidth); -/* enable next address increasement algorithm of memory */ -void dma_memory_increase_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable next address increasement algorithm of memory */ -void dma_memory_increase_disable(uint32_t dma_periph, dma_channel_enum channelx); -/* enable next address increasement algorithm of peripheral */ -void dma_periph_increase_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable next address increasement algorithm of peripheral */ -void dma_periph_increase_disable(uint32_t dma_periph, dma_channel_enum channelx); -/* configure the direction of data transfer on the channel */ -void dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint8_t direction); - -/* flag and interrupt functions */ -/* check DMA flag is set or not */ -FlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag); -/* clear the flag of a DMA channel */ -void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag); -/* check DMA flag and interrupt enable bit is set or not */ -FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag); -/* clear the interrupt flag of a DMA channel */ -void dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag); -/* enable DMA interrupt */ -void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source); -/* disable DMA interrupt */ -void dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source); - -#endif /* GD32F10X_DMA_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_enet.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_enet.h deleted file mode 100644 index 8c5e561..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_enet.h +++ /dev/null @@ -1,1497 +0,0 @@ -/*! - \file gd32f10x_enet.h - \brief definitions for the ENET - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10x_ENET_H -#define GD32F10x_ENET_H - -#include "gd32f10x.h" -#include - -#define IF_USE_EXTERNPHY_LIB 0 -#if (1 == IF_USE_EXTERNPHY_LIB) -#include "phy.h" -#endif - -#ifndef ENET_RXBUF_NUM -#define ENET_RXBUF_NUM 5U /*!< ethernet Rx DMA descriptor number */ -#endif - -#ifndef ENET_TXBUF_NUM -#define ENET_TXBUF_NUM 5U /*!< ethernet Tx DMA descriptor number */ -#endif - -#ifndef ENET_RXBUF_SIZE -#define ENET_RXBUF_SIZE ENET_MAX_FRAME_SIZE /*!< ethernet receive buffer size */ -#endif - -#ifndef ENET_TXBUF_SIZE -#define ENET_TXBUF_SIZE ENET_MAX_FRAME_SIZE /*!< ethernet transmit buffer size */ -#endif - -/* #define USE_DELAY */ - -#ifndef _PHY_H_ -#define DP83848 0 -#define LAN8700 1 -#define PHY_TYPE DP83848 - -#define PHY_ADDRESS ((uint16_t)1U) /*!< phy address determined by the hardware */ - -/* PHY read write timeouts */ -#define PHY_READ_TO ((uint32_t)0x0004FFFFU) /*!< PHY read timeout */ -#define PHY_WRITE_TO ((uint32_t)0x0004FFFFU) /*!< PHY write timeout */ - -/* PHY delay */ -#define PHY_RESETDELAY ((uint32_t)0x008FFFFFU) /*!< PHY reset delay */ -#define PHY_CONFIGDELAY ((uint32_t)0x00FFFFFFU) /*!< PHY configure delay */ - -/* PHY register address */ -#define PHY_REG_BCR 0U /*!< tranceiver basic control register */ -#define PHY_REG_BSR 1U /*!< tranceiver basic status register */ - -/* PHY basic control register */ -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< enable phy loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< configure speed to 100 Mbit/s and the full-duplex mode */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< configure speed to 100 Mbit/s and the half-duplex mode */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< configure speed to 10 Mbit/s and the full-duplex mode */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< configure speed to 10 Mbit/s and the half-duplex mode */ -#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) /*!< enable the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< isolate PHY from MII */ - -/* PHY basic status register */ -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< auto-negotioation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< jabber condition detected */ - -#if(PHY_TYPE == LAN8700) -#define PHY_SR 31U /*!< tranceiver status register */ -#define PHY_SPEED_STATUS ((uint16_t)0x0004) /*!< configured information of speed: 10Mbit/s */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0010) /*!< configured information of duplex: full-duplex */ -#elif(PHY_TYPE == DP83848) -#define PHY_SR 16U /*!< tranceiver status register */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< configured information of speed: 10Mbit/s */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< configured information of duplex: full-duplex */ -#endif /* PHY_TYPE */ - -#endif /* _PHY_H_ */ - - -/* ENET definitions */ -#define ENET ENET_BASE - -/* registers definitions */ -#define ENET_MAC_CFG REG32((ENET) + 0x00U) /*!< ethernet MAC configuration register */ -#define ENET_MAC_FRMF REG32((ENET) + 0x04U) /*!< ethernet MAC frame filter register */ -#define ENET_MAC_HLH REG32((ENET) + 0x08U) /*!< ethernet MAC hash list high register */ -#define ENET_MAC_HLL REG32((ENET) + 0x0CU) /*!< ethernet MAC hash list low register */ -#define ENET_MAC_PHY_CTL REG32((ENET) + 0x10U) /*!< ethernet MAC PHY control register */ -#define ENET_MAC_PHY_DATA REG32((ENET) + 0x14U) /*!< ethernet MAC MII data register */ -#define ENET_MAC_FCTL REG32((ENET) + 0x18U) /*!< ethernet MAC flow control register */ -#define ENET_MAC_FCTH REG32((ENET) + 0x1080U) /*!< ethernet MAC flow control threshold register */ -#define ENET_MAC_VLT REG32((ENET) + 0x1CU) /*!< ethernet MAC VLAN tag register */ -#define ENET_MAC_RWFF REG32((ENET) + 0x28U) /*!< ethernet MAC remote wakeup frame filter register */ -#define ENET_MAC_WUM REG32((ENET) + 0x2CU) /*!< ethernet MAC wakeup management register */ -#define ENET_MAC_INTF REG32((ENET) + 0x38U) /*!< ethernet MAC interrupt flag register */ -#define ENET_MAC_INTMSK REG32((ENET) + 0x3CU) /*!< ethernet MAC interrupt mask register */ -#define ENET_MAC_ADDR0H REG32((ENET) + 0x40U) /*!< ethernet MAC address 0 high register */ -#define ENET_MAC_ADDR0L REG32((ENET) + 0x44U) /*!< ethernet MAC address 0 low register */ -#define ENET_MAC_ADDR1H REG32((ENET) + 0x48U) /*!< ethernet MAC address 1 high register */ -#define ENET_MAC_ADDR1L REG32((ENET) + 0x4CU) /*!< ethernet MAC address 1 low register */ -#define ENET_MAC_ADDT2H REG32((ENET) + 0x50U) /*!< ethernet MAC address 2 high register */ -#define ENET_MAC_ADDR2L REG32((ENET) + 0x54U) /*!< ethernet MAC address 2 low register */ -#define ENET_MAC_ADDR3H REG32((ENET) + 0x58U) /*!< ethernet MAC address 3 high register */ -#define ENET_MAC_ADDR3L REG32((ENET) + 0x5CU) /*!< ethernet MAC address 3 low register */ - -#define ENET_MSC_CTL REG32((ENET) + 0x100U) /*!< ethernet MSC control register */ -#define ENET_MSC_RINTF REG32((ENET) + 0x104U) /*!< ethernet MSC receive interrupt flag register */ -#define ENET_MSC_TINTF REG32((ENET) + 0x108U) /*!< ethernet MSC transmit interrupt flag register */ -#define ENET_MSC_RINTMSK REG32((ENET) + 0x10CU) /*!< ethernet MSC receive interrupt mask register */ -#define ENET_MSC_TINTMSK REG32((ENET) + 0x110U) /*!< ethernet MSC transmit interrupt mask register */ -#define ENET_MSC_SCCNT REG32((ENET) + 0x14CU) /*!< ethernet MSC transmitted good frames after a single collision counter register */ -#define ENET_MSC_MSCCNT REG32((ENET) + 0x150U) /*!< ethernet MSC transmitted good frames after more than a single collision counter register */ -#define ENET_MSC_TGFCNT REG32((ENET) + 0x168U) /*!< ethernet MSC transmitted good frames counter register */ -#define ENET_MSC_RFCECNT REG32((ENET) + 0x194U) /*!< ethernet MSC received frames with CRC error counter register */ -#define ENET_MSC_RFAECNT REG32((ENET) + 0x198U) /*!< ethernet MSC received frames with alignment error counter register */ -#define ENET_MSC_RGUFCNT REG32((ENET) + 0x1C4U) /*!< ethernet MSC received good unicast frames counter register */ - -#define ENET_PTP_TSCTL REG32((ENET) + 0x700U) /*!< ethernet PTP time stamp control register */ -#define ENET_PTP_SSINC REG32((ENET) + 0x704U) /*!< ethernet PTP subsecond increment register */ -#define ENET_PTP_TSH REG32((ENET) + 0x708U) /*!< ethernet PTP time stamp high register */ -#define ENET_PTP_TSL REG32((ENET) + 0x70CU) /*!< ethernet PTP time stamp low register */ -#define ENET_PTP_TSUH REG32((ENET) + 0x710U) /*!< ethernet PTP time stamp update high register */ -#define ENET_PTP_TSUL REG32((ENET) + 0x714U) /*!< ethernet PTP time stamp update low register */ -#define ENET_PTP_TSADDEND REG32((ENET) + 0x718U) /*!< ethernet PTP time stamp addend register */ -#define ENET_PTP_ETH REG32((ENET) + 0x71CU) /*!< ethernet PTP expected time high register */ -#define ENET_PTP_ETL REG32((ENET) + 0x720U) /*!< ethernet PTP expected time low register */ - -#define ENET_DMA_BCTL REG32((ENET) + 0x1000U) /*!< ethernet DMA bus control register */ -#define ENET_DMA_TPEN REG32((ENET) + 0x1004U) /*!< ethernet DMA transmit poll enable register */ -#define ENET_DMA_RPEN REG32((ENET) + 0x1008U) /*!< ethernet DMA receive poll enable register */ -#define ENET_DMA_RDTADDR REG32((ENET) + 0x100CU) /*!< ethernet DMA receive descriptor table address register */ -#define ENET_DMA_TDTADDR REG32((ENET) + 0x1010U) /*!< ethernet DMA transmit descriptor table address register */ -#define ENET_DMA_STAT REG32((ENET) + 0x1014U) /*!< ethernet DMA status register */ -#define ENET_DMA_CTL REG32((ENET) + 0x1018U) /*!< ethernet DMA control register */ -#define ENET_DMA_INTEN REG32((ENET) + 0x101CU) /*!< ethernet DMA interrupt enable register */ -#define ENET_DMA_MFBOCNT REG32((ENET) + 0x1020U) /*!< ethernet DMA missed frame and buffer overflow counter register */ -#define ENET_DMA_CTDADDR REG32((ENET) + 0x1048U) /*!< ethernet DMA current transmit descriptor address register */ -#define ENET_DMA_CRDADDR REG32((ENET) + 0x104CU) /*!< ethernet DMA current receive descriptor address register */ -#define ENET_DMA_CTBADDR REG32((ENET) + 0x1050U) /*!< ethernet DMA current transmit buffer address register */ -#define ENET_DMA_CRBADDR REG32((ENET) + 0x1054U) /*!< ethernet DMA current receive buffer address register */ - -/* bits definitions */ -/* ENET_MAC_CFG */ -#define ENET_MAC_CFG_REN BIT(2) /*!< receiver enable */ -#define ENET_MAC_CFG_TEN BIT(3) /*!< transmitter enable */ -#define ENET_MAC_CFG_DFC BIT(4) /*!< defferal check */ -#define ENET_MAC_CFG_BOL BITS(5,6) /*!< back-off limit */ -#define ENET_MAC_CFG_APCD BIT(7) /*!< automatic pad/CRC drop */ -#define ENET_MAC_CFG_RTD BIT(9) /*!< retry disable */ -#define ENET_MAC_CFG_IPFCO BIT(10) /*!< IP frame checksum offload */ -#define ENET_MAC_CFG_DPM BIT(11) /*!< duplex mode */ -#define ENET_MAC_CFG_LBM BIT(12) /*!< loopback mode */ -#define ENET_MAC_CFG_ROD BIT(13) /*!< receive own disable */ -#define ENET_MAC_CFG_SPD BIT(14) /*!< fast eneternet speed */ -#define ENET_MAC_CFG_CSD BIT(16) /*!< carrier sense disable */ -#define ENET_MAC_CFG_IGBS BITS(17,19) /*!< inter-frame gap bit selection */ -#define ENET_MAC_CFG_JBD BIT(22) /*!< jabber disable */ -#define ENET_MAC_CFG_WDD BIT(23) /*!< watchdog disable */ - -/* ENET_MAC_FRMF */ -#define ENET_MAC_FRMF_PM BIT(0) /*!< promiscuous mode */ -#define ENET_MAC_FRMF_HUF BIT(1) /*!< hash unicast filter */ -#define ENET_MAC_FRMF_HMF BIT(2) /*!< hash multicast filter */ -#define ENET_MAC_FRMF_DAIFLT BIT(3) /*!< destination address inverse filtering enable */ -#define ENET_MAC_FRMF_MFD BIT(4) /*!< multicast filter disable */ -#define ENET_MAC_FRMF_BFRMD BIT(5) /*!< broadcast frame disable */ -#define ENET_MAC_FRMF_PCFRM BITS(6,7) /*!< pass control frames */ -#define ENET_MAC_FRMF_SAIFLT BIT(8) /*!< source address inverse filtering */ -#define ENET_MAC_FRMF_SAFLT BIT(9) /*!< source address filter */ -#define ENET_MAC_FRMF_HPFLT BIT(10) /*!< hash or perfect filter */ -#define ENET_MAC_FRMF_FAR BIT(31) /*!< frames all receive */ - -/* ENET_MAC_HLH */ -#define ENET_MAC_HLH_HLH BITS(0,31) /*!< hash list high */ - -/* ENET_MAC_HLL */ -#define ENET_MAC_HLL_HLL BITS(0,31) /*!< hash list low */ - -/* ENET_MAC_PHY_CTL */ -#define ENET_MAC_PHY_CTL_PB BIT(0) /*!< PHY busy */ -#define ENET_MAC_PHY_CTL_PW BIT(1) /*!< PHY write */ -#define ENET_MAC_PHY_CTL_CLR BITS(2,4) /*!< clock range */ -#define ENET_MAC_PHY_CTL_PR BITS(6,10) /*!< PHY register */ -#define ENET_MAC_PHY_CTL_PA BITS(11,15) /*!< PHY address */ - -/* ENET_MAC_PHY_DATA */ -#define ENET_MAC_PHY_DATA_PD BITS(0,15) /*!< PHY data */ - -/* ENET_MAC_FCTL */ -#define ENET_MAC_FCTL_FLCBBKPA BIT(0) /*!< flow control busy(in full duplex mode)/backpressure activate(in half duplex mode) */ -#define ENET_MAC_FCTL_TFCEN BIT(1) /*!< transmit flow control enable */ -#define ENET_MAC_FCTL_RFCEN BIT(2) /*!< receive flow control enable */ -#define ENET_MAC_FCTL_UPFDT BIT(3) /*!< unicast pause frame detect */ -#define ENET_MAC_FCTL_PLTS BITS(4,5) /*!< pause low threshold */ -#define ENET_MAC_FCTL_DZQP BIT(7) /*!< disable zero-quanta pause */ -#define ENET_MAC_FCTL_PTM BITS(16,31) /*!< pause time */ - -/* ENET_MAC_FCTH */ -#define ENET_MAC_FCTH_RFA BITS(0,2) /*!< threshold of active flow control */ -#define ENET_MAC_FCTH_RFD BITS(4,6) /*!< threshold of deactive flow control */ - -/* ENET_MAC_VLT */ -#define ENET_MAC_VLT_VLTI BITS(0,15) /*!< VLAN tag identifier(for receive frames) */ -#define ENET_MAC_VLT_VLTC BIT(16) /*!< 12-bit VLAN tag comparison */ - -/* ENET_MAC_RWFF */ -#define ENET_MAC_RWFF_DATA BITS(0,31) /*!< wakeup frame filter register data */ - -/* ENET_MAC_WUM */ -#define ENET_MAC_WUM_PWD BIT(0) /*!< power down */ -#define ENET_MAC_WUM_MPEN BIT(1) /*!< magic packet enable */ -#define ENET_MAC_WUM_WFEN BIT(2) /*!< wakeup frame enable */ -#define ENET_MAC_WUM_MPKR BIT(5) /*!< magic packet received */ -#define ENET_MAC_WUM_WUFR BIT(6) /*!< wakeup frame received */ -#define ENET_MAC_WUM_GU BIT(9) /*!< global unicast */ -#define ENET_MAC_WUM_WUFFRPR BIT(31) /*!< wakeup frame filter register pointer reset */ - -/* ENET_MAC_INTF */ -#define ENET_MAC_INTF_WUM BIT(3) /*!< WUM status */ -#define ENET_MAC_INTF_MSC BIT(4) /*!< MSC status */ -#define ENET_MAC_INTF_MSCR BIT(5) /*!< MSC receive status */ -#define ENET_MAC_INTF_MSCT BIT(6) /*!< MSC transmit status */ -#define ENET_MAC_INTF_TMST BIT(9) /*!< timestamp trigger status */ - -/* ENET_MAC_INTMSK */ -#define ENET_MAC_INTMSK_WUMIM BIT(3) /*!< WUM interrupt mask */ -#define ENET_MAC_INTMSK_TMSTIM BIT(9) /*!< timestamp trigger interrupt mask */ - -/* ENET_MAC_ADDR0H */ -#define ENET_MAC_ADDR0H_ADDR0H BITS(0,15) /*!< MAC address0 high */ -#define ENET_MAC_ADDR0H_MO BIT(31) /*!< always read 1 and must be kept */ - -/* ENET_MAC_ADDR0L */ -#define ENET_MAC_ADDR0L_ADDR0L BITS(0,31) /*!< MAC address0 low */ - -/* ENET_MAC_ADDR1H */ -#define ENET_MAC_ADDR1H_ADDR1H BITS(0,15) /*!< MAC address1 high */ -#define ENET_MAC_ADDR1H_MB BITS(24,29) /*!< mask byte */ -#define ENET_MAC_ADDR1H_SAF BIT(30) /*!< source address filter */ -#define ENET_MAC_ADDR1H_AFE BIT(31) /*!< address filter enable */ - -/* ENET_MAC_ADDR1L */ -#define ENET_MAC_ADDR1L_ADDR1L BITS(0,31) /*!< MAC address1 low */ - -/* ENET_MAC_ADDR2H */ -#define ENET_MAC_ADDR2H_ADDR2H BITS(0,15) /*!< MAC address2 high */ -#define ENET_MAC_ADDR2H_MB BITS(24,29) /*!< mask byte */ -#define ENET_MAC_ADDR2H_SAF BIT(30) /*!< source address filter */ -#define ENET_MAC_ADDR2H_AFE BIT(31) /*!< address filter enable */ - -/* ENET_MAC_ADDR2L */ -#define ENET_MAC_ADDR2L_ADDR2L BITS(0,31) /*!< MAC address2 low */ - -/* ENET_MAC_ADDR3H */ -#define ENET_MAC_ADDR3H_ADDR3H BITS(0,15) /*!< MAC address3 high */ -#define ENET_MAC_ADDR3H_MB BITS(24,29) /*!< mask byte */ -#define ENET_MAC_ADDR3H_SAF BIT(30) /*!< source address filter */ -#define ENET_MAC_ADDR3H_AFE BIT(31) /*!< address filter enable */ - -/* ENET_MAC_ADDR3L */ -#define ENET_MAC_ADDR3L_ADDR3L BITS(0,31) /*!< MAC address3 low */ - -/* ENET_MSC_CTL */ -#define ENET_MSC_CTL_CTR BIT(0) /*!< counter reset */ -#define ENET_MSC_CTL_CTSR BIT(1) /*!< counter stop rollover */ -#define ENET_MSC_CTL_RTOR BIT(2) /*!< reset on read */ -#define ENET_MSC_CTL_MCFZ BIT(3) /*!< MSC counter freeze */ - -/* ENET_MSC_RINTF */ -#define ENET_MSC_RINTF_RFCE BIT(5) /*!< received frames CRC error */ -#define ENET_MSC_RINTF_RFAE BIT(6) /*!< received frames alignment error */ -#define ENET_MSC_RINTF_RGUF BIT(17) /*!< receive good unicast frames */ - -/* ENET_MSC_TINTF */ -#define ENET_MSC_TINTF_TGFSC BIT(14) /*!< transmitted good frames single collision */ -#define ENET_MSC_TINTF_TGFMSC BIT(15) /*!< transmitted good frames more single collision */ -#define ENET_MSC_TINTF_TGF BIT(21) /*!< transmitted good frames */ - -/* ENET_MSC_RINTMSK */ -#define ENET_MSC_RINTMSK_RFCEIM BIT(5) /*!< received frame CRC error interrupt mask */ -#define ENET_MSC_RINTMSK_RFAEIM BIT(6) /*!< received frames alignment error interrupt mask */ -#define ENET_MSC_RINTMSK_RGUFIM BIT(17) /*!< received good unicast frames interrupt mask */ - -/* ENET_MSC_TINTMSK */ -#define ENET_MSC_TINTMSK_TGFSCIM BIT(14) /*!< transmitted good frames single collision interrupt mask */ -#define ENET_MSC_TINTMSK_TGFMSCIM BIT(15) /*!< transmitted good frames more single collision interrupt mask */ -#define ENET_MSC_TINTMSK_TGFIM BIT(21) /*!< transmitted good frames interrupt mask */ - -/* ENET_MSC_SCCNT */ -#define ENET_MSC_SCCNT_SCC BITS(0,31) /*!< transmitted good frames single collision counter */ - -/* ENET_MSC_MSCCNT */ -#define ENET_MSC_MSCCNT_MSCC BITS(0,31) /*!< transmitted good frames more one single collision counter */ - -/* ENET_MSC_TGFCNT */ -#define ENET_MSC_TGFCNT_TGF BITS(0,31) /*!< transmitted good frames counter */ - -/* ENET_MSC_RFCECNT */ -#define ENET_MSC_RFCECNT_RFCER BITS(0,31) /*!< received frames with CRC error counter */ - -/* ENET_MSC_RFAECNT */ -#define ENET_MSC_RFAECNT_RFAER BITS(0,31) /*!< received frames alignment error counter */ - -/* ENET_MSC_RGUFCNT */ -#define ENET_MSC_RGUFCNT_RGUF BITS(0,31) /*!< received good unicast frames counter */ - -/* ENET_PTP_TSCTL */ -#define ENET_PTP_TSCTL_TMSEN BIT(0) /*!< timestamp enable */ -#define ENET_PTP_TSCTL_TMSFCU BIT(1) /*!< timestamp fine or coarse update */ -#define ENET_PTP_TSCTL_TMSSTI BIT(2) /*!< timestamp system time initialize */ -#define ENET_PTP_TSCTL_TMSSTU BIT(3) /*!< timestamp system time update */ -#define ENET_PTP_TSCTL_TMSITEN BIT(4) /*!< timestamp interrupt trigger enable */ -#define ENET_PTP_TSCTL_TMSARU BIT(5) /*!< timestamp addend register update */ - -/* ENET_PTP_SSINC */ -#define ENET_PTP_SSINC_STMSSI BITS(0,7) /*!< system time subsecond increment */ - -/* ENET_PTP_TSH */ -#define ENET_PTP_TSH_STMS BITS(0,31) /*!< system time second */ - -/* ENET_PTP_TSL */ -#define ENET_PTP_TSL_STMSS BITS(0,30) /*!< system time subseconds */ -#define ENET_PTP_TSL_STS BIT(31) /*!< system time sign */ - -/* ENET_PTP_TSUH */ -#define ENET_PTP_TSUH_TMSUS BITS(0,31) /*!< timestamp update seconds */ - -/* ENET_PTP_TSUL */ -#define ENET_PTP_TSUL_TMSUSS BITS(0,30) /*!< timestamp update subseconds */ -#define ENET_PTP_TSUL_TMSUPNS BIT(31) /*!< timestamp update positive or negative sign */ - -/* ENET_PTP_TSADDEND */ -#define ENET_PTP_TSADDEND_TMSA BITS(0,31) /*!< timestamp addend */ - -/* ENET_PTP_ETH */ -#define ENET_PTP_ETH_ETSH BITS(0,31) /*!< expected time high */ - -/* ENET_PTP_ETL */ -#define ENET_PTP_ETL_ETSL BITS(0,31) /*!< expected time low */ - -/* ENET_DMA_BCTL */ -#define ENET_DMA_BCTL_SWR BIT(0) /*!< software reset */ -#define ENET_DMA_BCTL_DAB BIT(1) /*!< DMA arbitration */ -#define ENET_DMA_BCTL_DPSL BITS(2,6) /*!< descriptor skip length */ -#define ENET_DMA_BCTL_PGBL BITS(8,13) /*!< programmable burst length */ -#define ENET_DMA_BCTL_RTPR BITS(14,15) /*!< RxDMA and TxDMA transfer priority ratio */ -#define ENET_DMA_BCTL_FB BIT(16) /*!< fixed Burst */ -#define ENET_DMA_BCTL_RXDP BITS(17,22) /*!< RxDMA PGBL */ -#define ENET_DMA_BCTL_UIP BIT(23) /*!< use independent PGBL */ -#define ENET_DMA_BCTL_FPBL BIT(24) /*!< four times PGBL mode */ -#define ENET_DMA_BCTL_AA BIT(25) /*!< address-aligned */ - -/* ENET_DMA_TPEN */ -#define ENET_DMA_TPEN_TPE BITS(0,31) /*!< transmit poll enable */ - -/* ENET_DMA_RPEN */ -#define ENET_DMA_RPEN_RPE BITS(0,31) /*!< receive poll enable */ - -/* ENET_DMA_RDTADDR */ -#define ENET_DMA_RDTADDR_SRT BITS(0,31) /*!< start address of receive table */ - -/* ENET_DMA_TDTADDR */ -#define ENET_DMA_TDTADDR_STT BITS(0,31) /*!< start address of transmit table */ - -/* ENET_DMA_STAT */ -#define ENET_DMA_STAT_TS BIT(0) /*!< transmit status */ -#define ENET_DMA_STAT_TPS BIT(1) /*!< transmit process stopped status */ -#define ENET_DMA_STAT_TBU BIT(2) /*!< transmit buffer unavailable status */ -#define ENET_DMA_STAT_TJT BIT(3) /*!< transmit jabber timeout status */ -#define ENET_DMA_STAT_RO BIT(4) /*!< receive overflow status */ -#define ENET_DMA_STAT_TU BIT(5) /*!< transmit underflow status */ -#define ENET_DMA_STAT_RS BIT(6) /*!< receive status */ -#define ENET_DMA_STAT_RBU BIT(7) /*!< receive buffer unavailable status */ -#define ENET_DMA_STAT_RPS BIT(8) /*!< receive process stopped status */ -#define ENET_DMA_STAT_RWT BIT(9) /*!< receive watchdog timeout status */ -#define ENET_DMA_STAT_ET BIT(10) /*!< early transmit status */ -#define ENET_DMA_STAT_FBE BIT(13) /*!< fatal bus error status */ -#define ENET_DMA_STAT_ER BIT(14) /*!< early receive status */ -#define ENET_DMA_STAT_AI BIT(15) /*!< abnormal interrupt summary */ -#define ENET_DMA_STAT_NI BIT(16) /*!< normal interrupt summary */ -#define ENET_DMA_STAT_RP BITS(17,19) /*!< receive process state */ -#define ENET_DMA_STAT_TP BITS(20,22) /*!< transmit process state */ -#define ENET_DMA_STAT_EB BITS(23,25) /*!< error bits status */ -#define ENET_DMA_STAT_MSC BIT(27) /*!< MSC status */ -#define ENET_DMA_STAT_WUM BIT(28) /*!< WUM status */ -#define ENET_DMA_STAT_TST BIT(29) /*!< timestamp trigger status */ - -/* ENET_DMA_CTL */ -#define ENET_DMA_CTL_SRE BIT(1) /*!< start/stop receive enable */ -#define ENET_DMA_CTL_OSF BIT(2) /*!< operate on second frame */ -#define ENET_DMA_CTL_RTHC BITS(3,4) /*!< receive threshold control */ -#define ENET_DMA_CTL_FUF BIT(6) /*!< forward undersized good frames */ -#define ENET_DMA_CTL_FERF BIT(7) /*!< forward error frames */ -#define ENET_DMA_CTL_STE BIT(13) /*!< start/stop transmission enable */ -#define ENET_DMA_CTL_TTHC BITS(14,16) /*!< transmit threshold control */ -#define ENET_DMA_CTL_FTF BIT(20) /*!< flush transmit FIFO */ -#define ENET_DMA_CTL_TSFD BIT(21) /*!< transmit store-and-forward */ -#define ENET_DMA_CTL_DAFRF BIT(24) /*!< disable flushing of received frames */ -#define ENET_DMA_CTL_RSFD BIT(25) /*!< receive store-and-forward */ -#define ENET_DMA_CTL_DTCERFD BIT(26) /*!< dropping of TCP/IP checksum error frames disable */ - -/* ENET_DMA_INTEN */ -#define ENET_DMA_INTEN_TIE BIT(0) /*!< transmit interrupt enable */ -#define ENET_DMA_INTEN_TPSIE BIT(1) /*!< transmit process stopped interrupt enable */ -#define ENET_DMA_INTEN_TBUIE BIT(2) /*!< transmit buffer unavailable interrupt enable */ -#define ENET_DMA_INTEN_TJTIE BIT(3) /*!< transmit jabber timeout interrupt enable */ -#define ENET_DMA_INTEN_ROIE BIT(4) /*!< receive overflow interrupt enable */ -#define ENET_DMA_INTEN_TUIE BIT(5) /*!< transmit underflow interrupt enable */ -#define ENET_DMA_INTEN_RIE BIT(6) /*!< receive interrupt enable */ -#define ENET_DMA_INTEN_RBUIE BIT(7) /*!< receive buffer unavailable interrupt enable */ -#define ENET_DMA_INTEN_RPSIE BIT(8) /*!< receive process stopped interrupt enable */ -#define ENET_DMA_INTEN_RWTIE BIT(9) /*!< receive watchdog timeout interrupt enable */ -#define ENET_DMA_INTEN_ETIE BIT(10) /*!< early transmit interrupt enable */ -#define ENET_DMA_INTEN_FBEIE BIT(13) /*!< fatal bus error interrupt enable */ -#define ENET_DMA_INTEN_ERIE BIT(14) /*!< early receive interrupt enable */ -#define ENET_DMA_INTEN_AIE BIT(15) /*!< abnormal interrupt summary enable */ -#define ENET_DMA_INTEN_NIE BIT(16) /*!< normal interrupt summary enable */ - -/* ENET_DMA_MFBOCNT */ -#define ENET_DMA_MFBOCNT_MSFC BITS(0,15) /*!< missed frames by the controller */ -#define ENET_DMA_MFBOCNT_OBMFC BIT(16) /* Overflow bit for missed frame counter */ -#define ENET_DMA_MFBOCNT_MSFA BITS(17,27) /*!< missed frames by the application */ -#define ENET_DMA_MFBOCNT_OBFOC BIT(28) /*!< Overflow bit for FIFO overflow counter */ - -/* ENET_DMA_CTDADDR */ -#define ENET_DMA_CTDADDR_TDAP BITS(0,31) /*!< transmit descriptor address pointer */ - -/* ENET_DMA_CRDADDR */ -#define ENET_DMA_CRDADDR_RDAP BITS(0,31) /*!< receive descriptor address pointer */ - -/* ENET_DMA_CTBADDR */ -#define ENET_DMA_CTBADDR_TBAP BITS(0,31) /*!< transmit buffer address pointer */ - -/* ENET_DMA_CRBADDR */ -#define ENET_DMA_CRBADDR_RBAP BITS(0,31) /*!< receive buffer address pointer */ - -/* ENET DMA Tx descriptor TDES0 */ -#define ENET_TDES0_DB BIT(0) /*!< deferred */ -#define ENET_TDES0_UFE BIT(1) /*!< underflow error */ -#define ENET_TDES0_EXD BIT(2) /*!< excessive deferral */ -#define ENET_TDES0_COCNT BITS(3,6) /*!< collision count */ -#define ENET_TDES0_VFRM BIT(7) /*!< VLAN frame */ -#define ENET_TDES0_ECO BIT(8) /*!< excessive collision */ -#define ENET_TDES0_LCO BIT(9) /*!< late collision */ -#define ENET_TDES0_NCA BIT(10) /*!< no carrier */ -#define ENET_TDES0_LCA BIT(11) /*!< loss of carrier */ -#define ENET_TDES0_IPPE BIT(12) /*!< IP payload error */ -#define ENET_TDES0_FRMF BIT(13) /*!< frame flushed */ -#define ENET_TDES0_JT BIT(14) /*!< jabber timeout */ -#define ENET_TDES0_ES BIT(15) /*!< error summary */ -#define ENET_TDES0_IPHE BIT(16) /*!< IP header error */ -#define ENET_TDES0_TTMSS BIT(17) /*!< transmit timestamp status */ -#define ENET_TDES0_TCHM BIT(20) /*!< the second address chained mode */ -#define ENET_TDES0_TERM BIT(21) /*!< transmit end of ring mode*/ -#define ENET_TDES0_CM BITS(22,23) /*!< checksum mode */ -#define ENET_TDES0_TTSEN BIT(25) /*!< transmit timestamp function enable */ -#define ENET_TDES0_DPAD BIT(26) /*!< disable adding pad */ -#define ENET_TDES0_DCRC BIT(27) /*!< disable CRC */ -#define ENET_TDES0_FSG BIT(28) /*!< first segment */ -#define ENET_TDES0_LSG BIT(29) /*!< last segment */ -#define ENET_TDES0_INTC BIT(30) /*!< interrupt on completion */ -#define ENET_TDES0_DAV BIT(31) /*!< DAV bit */ - -/* ENET DMA Tx descriptor TDES1 */ -#define ENET_TDES1_TB1S BITS(0,12) /*!< transmit buffer 1 size */ -#define ENET_TDES1_TB2S BITS(16,28) /*!< transmit buffer 2 size */ - -/* ENET DMA Tx descriptor TDES2 */ -#define ENET_TDES2_TB1AP BITS(0,31) /*!< transmit buffer 1 address pointer/transmit frame timestamp low 32-bit value */ - -/* ENET DMA Tx descriptor TDES3 */ -#define ENET_TDES3_TB2AP BITS(0,31) /*!< transmit buffer 2 address pointer (or next descriptor address) / transmit frame timestamp high 32-bit value */ - -/* ENET DMA Rx descriptor RDES0 */ -#define ENET_RDES0_PCERR BIT(0) /*!< payload checksum error */ -#define ENET_RDES0_CERR BIT(1) /*!< CRC error */ -#define ENET_RDES0_DBERR BIT(2) /*!< dribble bit error */ -#define ENET_RDES0_RERR BIT(3) /*!< receive error */ -#define ENET_RDES0_RWDT BIT(4) /*!< receive watchdog timeout */ -#define ENET_RDES0_FRMT BIT(5) /*!< frame type */ -#define ENET_RDES0_LCO BIT(6) /*!< late collision */ -#define ENET_RDES0_IPHERR BIT(7) /*!< IP frame header error */ -#define ENET_RDES0_LDES BIT(8) /*!< last descriptor */ -#define ENET_RDES0_FDES BIT(9) /*!< first descriptor */ -#define ENET_RDES0_VTAG BIT(10) /*!< VLAN tag */ -#define ENET_RDES0_OERR BIT(11) /*!< overflow Error */ -#define ENET_RDES0_LERR BIT(12) /*!< length error */ -#define ENET_RDES0_SAFF BIT(13) /*!< SA filter fail */ -#define ENET_RDES0_DERR BIT(14) /*!< descriptor error */ -#define ENET_RDES0_ERRS BIT(15) /*!< error summary */ -#define ENET_RDES0_FRML BITS(16,29) /*!< frame length */ -#define ENET_RDES0_DAFF BIT(30) /*!< destination address filter fail */ -#define ENET_RDES0_DAV BIT(31) /*!< descriptor available */ - -/* ENET DMA Rx descriptor RDES1 */ -#define ENET_RDES1_RB1S BITS(0,12) /*!< receive buffer 1 size */ -#define ENET_RDES1_RCHM BIT(14) /*!< receive chained mode for second address */ -#define ENET_RDES1_RERM BIT(15) /*!< receive end of ring mode*/ -#define ENET_RDES1_RB2S BITS(16,28) /*!< receive buffer 2 size */ -#define ENET_RDES1_DINTC BIT(31) /*!< disable interrupt on completion */ - -/* ENET DMA Rx descriptor RDES2 */ -#define ENET_RDES2_RB1AP BITS(0,31) /*!< receive buffer 1 address pointer / receive frame timestamp low 32-bit */ - -/* ENET DMA Rx descriptor RDES3 */ -#define ENET_RDES3_RB2AP BITS(0,31) /*!< receive buffer 2 address pointer (next descriptor address)/receive frame timestamp high 32-bit value */ - -/* constants definitions */ -/* define bit position and its register index offset */ -#define ENET_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define ENET_REG_VAL(periph) (REG32(ENET + ((uint32_t)(periph)>>6))) -#define ENET_BIT_POS(val) ((uint32_t)(val) & 0x1FU) - -/* ENET clock range judgement */ -#define ENET_RANGE(hclk, n, m) (((hclk) >= (n))&&((hclk) < (m))) - -/* define MAC address configuration and reference address */ -#define ENET_SET_MACADDRH(p) (((uint32_t)(p)[5] << 8) | (uint32_t)(p)[4]) -#define ENET_SET_MACADDRL(p) (((uint32_t)(p)[3] << 24) | ((uint32_t)(p)[2] << 16) | ((uint32_t)(p)[1] << 8) | (uint32_t)(p)[0]) -#define ENET_ADDRH_BASE ((ENET) + 0x40U) -#define ENET_ADDRL_BASE ((ENET) + 0x44U) -#define ENET_GET_MACADDR(offset, n) ((uint8_t)((REG32((ENET_ADDRL_BASE + (offset)) - (((n) / 4U) * 4U)) >> (8U * ((n) % 4U))) & 0xFFU)) - -/* register offset */ -#define MAC_FCTL_REG_OFFSET 0x0018U /*!< MAC flow control register offset */ -#define MAC_WUM_REG_OFFSET 0x002CU /*!< MAC wakeup management register offset */ -#define MAC_INTF_REG_OFFSET 0x0038U /*!< MAC interrupt flag register offset */ -#define MAC_INTMSK_REG_OFFSET 0x003CU /*!< MAC interrupt mask register offset */ - -#define MSC_RINTF_REG_OFFSET 0x0104U /*!< MSC receive interrupt flag register offset */ -#define MSC_TINTF_REG_OFFSET 0x0108U /*!< MSC transmit interrupt flag register offset */ -#define MSC_RINTMSK_REG_OFFSET 0x010CU /*!< MSC receive interrupt mask register offset */ -#define MSC_TINTMSK_REG_OFFSET 0x0110U /*!< MSC transmit interrupt mask register offset */ -#define MSC_SCCNT_REG_OFFSET 0x014CU /*!< MSC transmitted good frames after a single collision counter register offset */ -#define MSC_MSCCNT_REG_OFFSET 0x0150U /*!< MSC transmitted good frames after more than a single collision counter register offset */ -#define MSC_TGFCNT_REG_OFFSET 0x0168U /*!< MSC transmitted good frames counter register offset */ -#define MSC_RFCECNT_REG_OFFSET 0x0194U /*!< MSC received frames with CRC error counter register offset */ -#define MSC_RFAECNT_REG_OFFSET 0x0198U /*!< MSC received frames with alignment error counter register offset */ -#define MSC_RGUFCNT_REG_OFFSET 0x01C4U /*!< MSC received good unicast frames counter register offset */ - -#define DMA_STAT_REG_OFFSET 0x1014U /*!< DMA status register offset */ -#define DMA_INTEN_REG_OFFSET 0x101CU /*!< DMA interrupt enable register offset */ -#define DMA_TDTADDR_REG_OFFSET 0x1010U /*!< DMA transmit descriptor table address register offset */ -#define DMA_CTDADDR_REG_OFFSET 0x1048U /*!< DMA current transmit descriptor address register */ -#define DMA_CTBADDR_REG_OFFSET 0x1050U /*!< DMA current transmit buffer address register */ -#define DMA_RDTADDR_REG_OFFSET 0x100CU /*!< DMA receive descriptor table address register */ -#define DMA_CRDADDR_REG_OFFSET 0x104CU /*!< DMA current receive descriptor address register */ -#define DMA_CRBADDR_REG_OFFSET 0x1054U /*!< DMA current receive buffer address register */ - -/* ENET status flag get */ -typedef enum -{ - /* ENET_MAC_WUM register */ - ENET_MAC_FLAG_MPKR = ENET_REGIDX_BIT(MAC_WUM_REG_OFFSET, 5U), /*!< magic packet received flag */ - ENET_MAC_FLAG_WUFR = ENET_REGIDX_BIT(MAC_WUM_REG_OFFSET, 6U), /*!< wakeup frame received flag */ - /* ENET_MAC_FCTL register */ - ENET_MAC_FLAG_FLOWCONTROL = ENET_REGIDX_BIT(MAC_FCTL_REG_OFFSET, 0U), /*!< flow control status flag */ - /* ENET_MAC_INTF register */ - ENET_MAC_FLAG_WUM = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 3U), /*!< WUM status flag */ - ENET_MAC_FLAG_MSC = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 4U), /*!< MSC status flag */ - ENET_MAC_FLAG_MSCR = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 5U), /*!< MSC receive status flag */ - ENET_MAC_FLAG_MSCT = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 6U), /*!< MSC transmit status flag */ - ENET_MAC_FLAG_TMST = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 9U), /*!< timestamp trigger status flag */ - /* ENET_MSC_RINTF register */ - ENET_MSC_FLAG_RFCE = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 5U), /*!< received frames CRC error flag */ - ENET_MSC_FLAG_RFAE = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 6U), /*!< received frames alignment error flag */ - ENET_MSC_FLAG_RGUF = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 17U), /*!< received good unicast frames flag */ - /* ENET_MSC_TINTF register */ - ENET_MSC_FLAG_TGFSC = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 14U), /*!< transmitted good frames single collision flag */ - ENET_MSC_FLAG_TGFMSC = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 15U), /*!< transmitted good frames more single collision flag */ - ENET_MSC_FLAG_TGF = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 21U), /*!< transmitted good frames flag */ - /* ENET_DMA_STAT register */ - ENET_DMA_FLAG_TS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 0U), /*!< transmit status flag */ - ENET_DMA_FLAG_TPS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 1U), /*!< transmit process stopped status flag */ - ENET_DMA_FLAG_TBU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 2U), /*!< transmit buffer unavailable status flag */ - ENET_DMA_FLAG_TJT = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 3U), /*!< transmit jabber timeout status flag */ - ENET_DMA_FLAG_RO = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 4U), /*!< receive overflow status flag */ - ENET_DMA_FLAG_TU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 5U), /*!< transmit underflow status flag */ - ENET_DMA_FLAG_RS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 6U), /*!< receive status flag */ - ENET_DMA_FLAG_RBU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 7U), /*!< receive buffer unavailable status flag */ - ENET_DMA_FLAG_RPS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 8U), /*!< receive process stopped status flag */ - ENET_DMA_FLAG_RWT = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 9U), /*!< receive watchdog timeout status flag */ - ENET_DMA_FLAG_ET = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 10U), /*!< early transmit status flag */ - ENET_DMA_FLAG_FBE = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 13U), /*!< fatal bus error status flag */ - ENET_DMA_FLAG_ER = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 14U), /*!< early receive status flag */ - ENET_DMA_FLAG_AI = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 15U), /*!< abnormal interrupt summary flag */ - ENET_DMA_FLAG_NI = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 16U), /*!< normal interrupt summary flag */ - ENET_DMA_FLAG_EB_DMA_ERROR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 23U), /*!< error during data transfer by RxDMA/TxDMA flag */ - ENET_DMA_FLAG_EB_TRANSFER_ERROR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 24U), /*!< error during write/read transfer flag */ - ENET_DMA_FLAG_EB_ACCESS_ERROR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 25U), /*!< error during data buffer/descriptor access flag */ - ENET_DMA_FLAG_MSC = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 27U), /*!< MSC status flag */ - ENET_DMA_FLAG_WUM = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 28U), /*!< WUM status flag */ - ENET_DMA_FLAG_TST = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 29U), /*!< timestamp trigger status flag */ -}enet_flag_enum; - -/* ENET stutus flag clear */ -typedef enum -{ - /* ENET_DMA_STAT register */ - ENET_DMA_FLAG_TS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 0U), /*!< transmit status flag */ - ENET_DMA_FLAG_TPS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 1U), /*!< transmit process stopped status flag */ - ENET_DMA_FLAG_TBU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 2U), /*!< transmit buffer unavailable status flag */ - ENET_DMA_FLAG_TJT_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 3U), /*!< transmit jabber timeout status flag */ - ENET_DMA_FLAG_RO_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 4U), /*!< receive overflow status flag */ - ENET_DMA_FLAG_TU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 5U), /*!< transmit underflow status flag */ - ENET_DMA_FLAG_RS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 6U), /*!< receive status flag */ - ENET_DMA_FLAG_RBU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 7U), /*!< receive buffer unavailable status flag */ - ENET_DMA_FLAG_RPS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 8U), /*!< receive process stopped status flag */ - ENET_DMA_FLAG_RWT_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 9U), /*!< receive watchdog timeout status flag */ - ENET_DMA_FLAG_ET_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 10U), /*!< early transmit status flag */ - ENET_DMA_FLAG_FBE_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 13U), /*!< fatal bus error status flag */ - ENET_DMA_FLAG_ER_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 14U), /*!< early receive status flag */ - ENET_DMA_FLAG_AI_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 15U), /*!< abnormal interrupt summary flag */ - ENET_DMA_FLAG_NI_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 16U), /*!< normal interrupt summary flag */ -}enet_flag_clear_enum; - -/* ENET interrupt enable/disable */ -typedef enum -{ - /* ENET_MAC_INTMSK register */ - ENET_MAC_INT_WUMIM = ENET_REGIDX_BIT(MAC_INTMSK_REG_OFFSET, 3U), /*!< WUM interrupt mask */ - ENET_MAC_INT_TMSTIM = ENET_REGIDX_BIT(MAC_INTMSK_REG_OFFSET, 9U), /*!< timestamp trigger interrupt mask */ - /* ENET_MSC_RINTMSK register */ - ENET_MSC_INT_RFCEIM = ENET_REGIDX_BIT(MSC_RINTMSK_REG_OFFSET, 5U), /*!< received frame CRC error interrupt mask */ - ENET_MSC_INT_RFAEIM = ENET_REGIDX_BIT(MSC_RINTMSK_REG_OFFSET, 6U), /*!< received frames alignment error interrupt mask */ - ENET_MSC_INT_RGUFIM = ENET_REGIDX_BIT(MSC_RINTMSK_REG_OFFSET, 17U), /*!< received good unicast frames interrupt mask */ - /* ENET_MSC_TINTMSK register */ - ENET_MSC_INT_TGFSCIM = ENET_REGIDX_BIT(MSC_TINTMSK_REG_OFFSET, 14U), /*!< transmitted good frames single collision interrupt mask */ - ENET_MSC_INT_TGFMSCIM = ENET_REGIDX_BIT(MSC_TINTMSK_REG_OFFSET, 15U), /*!< transmitted good frames more single collision interrupt mask */ - ENET_MSC_INT_TGFIM = ENET_REGIDX_BIT(MSC_TINTMSK_REG_OFFSET, 21U), /*!< transmitted good frames interrupt mask */ - /* ENET_DMA_INTEN register */ - ENET_DMA_INT_TIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 0U), /*!< transmit interrupt enable */ - ENET_DMA_INT_TPSIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 1U), /*!< transmit process stopped interrupt enable */ - ENET_DMA_INT_TBUIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 2U), /*!< transmit buffer unavailable interrupt enable */ - ENET_DMA_INT_TJTIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 3U), /*!< transmit jabber timeout interrupt enable */ - ENET_DMA_INT_ROIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 4U), /*!< receive overflow interrupt enable */ - ENET_DMA_INT_TUIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 5U), /*!< transmit underflow interrupt enable */ - ENET_DMA_INT_RIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 6U), /*!< receive interrupt enable */ - ENET_DMA_INT_RBUIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 7U), /*!< receive buffer unavailable interrupt enable */ - ENET_DMA_INT_RPSIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 8U), /*!< receive process stopped interrupt enable */ - ENET_DMA_INT_RWTIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 9U), /*!< receive watchdog timeout interrupt enable */ - ENET_DMA_INT_ETIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 10U), /*!< early transmit interrupt enable */ - ENET_DMA_INT_FBEIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 13U), /*!< fatal bus error interrupt enable */ - ENET_DMA_INT_ERIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 14U), /*!< early receive interrupt enable */ - ENET_DMA_INT_AIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 15U), /*!< abnormal interrupt summary enable */ - ENET_DMA_INT_NIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 16U), /*!< normal interrupt summary enable */ -}enet_int_enum; - -/* ENET interrupt flag get */ -typedef enum -{ - /* ENET_MAC_INTF register */ - ENET_MAC_INT_FLAG_WUM = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 3U), /*!< WUM status flag */ - ENET_MAC_INT_FLAG_MSC = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 4U), /*!< MSC status flag */ - ENET_MAC_INT_FLAG_MSCR = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 5U), /*!< MSC receive status flag */ - ENET_MAC_INT_FLAG_MSCT = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 6U), /*!< MSC transmit status flag */ - ENET_MAC_INT_FLAG_TMST = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 9U), /*!< timestamp trigger status flag */ - /* ENET_MSC_RINTF register */ - ENET_MSC_INT_FLAG_RFCE = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 5U), /*!< received frames CRC error flag */ - ENET_MSC_INT_FLAG_RFAE = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 6U), /*!< received frames alignment error flag */ - ENET_MSC_INT_FLAG_RGUF = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 17U), /*!< received good unicast frames flag */ - /* ENET_MSC_TINTF register */ - ENET_MSC_INT_FLAG_TGFSC = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 14U), /*!< transmitted good frames single collision flag */ - ENET_MSC_INT_FLAG_TGFMSC = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 15U), /*!< transmitted good frames more single collision flag */ - ENET_MSC_INT_FLAG_TGF = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 21U), /*!< transmitted good frames flag */ - /* ENET_DMA_STAT register */ - ENET_DMA_INT_FLAG_TS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 0U), /*!< transmit status flag */ - ENET_DMA_INT_FLAG_TPS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 1U), /*!< transmit process stopped status flag */ - ENET_DMA_INT_FLAG_TBU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 2U), /*!< transmit buffer unavailable status flag */ - ENET_DMA_INT_FLAG_TJT = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 3U), /*!< transmit jabber timeout status flag */ - ENET_DMA_INT_FLAG_RO = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 4U), /*!< receive overflow status flag */ - ENET_DMA_INT_FLAG_TU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 5U), /*!< transmit underflow status flag */ - ENET_DMA_INT_FLAG_RS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 6U), /*!< receive status flag */ - ENET_DMA_INT_FLAG_RBU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 7U), /*!< receive buffer unavailable status flag */ - ENET_DMA_INT_FLAG_RPS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 8U), /*!< receive process stopped status flag */ - ENET_DMA_INT_FLAG_RWT = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 9U), /*!< receive watchdog timeout status flag */ - ENET_DMA_INT_FLAG_ET = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 10U), /*!< early transmit status flag */ - ENET_DMA_INT_FLAG_FBE = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 13U), /*!< fatal bus error status flag */ - ENET_DMA_INT_FLAG_ER = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 14U), /*!< early receive status flag */ - ENET_DMA_INT_FLAG_AI = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 15U), /*!< abnormal interrupt summary flag */ - ENET_DMA_INT_FLAG_NI = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 16U), /*!< normal interrupt summary flag */ - ENET_DMA_INT_FLAG_MSC = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 27U), /*!< MSC status flag */ - ENET_DMA_INT_FLAG_WUM = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 28U), /*!< WUM status flag */ - ENET_DMA_INT_FLAG_TST = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 29U), /*!< timestamp trigger status flag */ -}enet_int_flag_enum; - -/* ENET interrupt flag clear */ -typedef enum -{ - /* ENET_DMA_STAT register */ - ENET_DMA_INT_FLAG_TS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 0U), /*!< transmit status flag */ - ENET_DMA_INT_FLAG_TPS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 1U), /*!< transmit process stopped status flag */ - ENET_DMA_INT_FLAG_TBU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 2U), /*!< transmit buffer unavailable status flag */ - ENET_DMA_INT_FLAG_TJT_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 3U), /*!< transmit jabber timeout status flag */ - ENET_DMA_INT_FLAG_RO_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 4U), /*!< receive overflow status flag */ - ENET_DMA_INT_FLAG_TU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 5U), /*!< transmit underflow status flag */ - ENET_DMA_INT_FLAG_RS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 6U), /*!< receive status flag */ - ENET_DMA_INT_FLAG_RBU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 7U), /*!< receive buffer unavailable status flag */ - ENET_DMA_INT_FLAG_RPS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 8U), /*!< receive process stopped status flag */ - ENET_DMA_INT_FLAG_RWT_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 9U), /*!< receive watchdog timeout status flag */ - ENET_DMA_INT_FLAG_ET_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 10U), /*!< early transmit status flag */ - ENET_DMA_INT_FLAG_FBE_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 13U), /*!< fatal bus error status flag */ - ENET_DMA_INT_FLAG_ER_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 14U), /*!< early receive status flag */ - ENET_DMA_INT_FLAG_AI_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 15U), /*!< abnormal interrupt summary flag */ - ENET_DMA_INT_FLAG_NI_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 16U), /*!< normal interrupt summary flag */ -}enet_int_flag_clear_enum; - -/* current RX/TX descriptor/buffer/descriptor table address get */ -typedef enum -{ - ENET_RX_DESC_TABLE = DMA_RDTADDR_REG_OFFSET, /*!< RX descriptor table */ - ENET_RX_CURRENT_DESC = DMA_CRDADDR_REG_OFFSET, /*!< current RX descriptor */ - ENET_RX_CURRENT_BUFFER = DMA_CRBADDR_REG_OFFSET, /*!< current RX buffer */ - ENET_TX_DESC_TABLE = DMA_TDTADDR_REG_OFFSET, /*!< TX descriptor table */ - ENET_TX_CURRENT_DESC = DMA_CTDADDR_REG_OFFSET, /*!< current TX descriptor */ - ENET_TX_CURRENT_BUFFER = DMA_CTBADDR_REG_OFFSET /*!< current TX buffer */ -}enet_desc_reg_enum; - -/* MAC statistics counter get */ -typedef enum -{ - ENET_MSC_TX_SCCNT = MSC_SCCNT_REG_OFFSET, /*!< MSC transmitted good frames after a single collision counter */ - ENET_MSC_TX_MSCCNT = MSC_MSCCNT_REG_OFFSET, /*!< MSC transmitted good frames after more than a single collision counter */ - ENET_MSC_TX_TGFCNT = MSC_TGFCNT_REG_OFFSET, /*!< MSC transmitted good frames counter */ - ENET_MSC_RX_RFCECNT = MSC_RFCECNT_REG_OFFSET, /*!< MSC received frames with CRC error counter */ - ENET_MSC_RX_RFAECNT = MSC_RFAECNT_REG_OFFSET, /*!< MSC received frames with alignment error counter */ - ENET_MSC_RX_RGUFCNT = MSC_RGUFCNT_REG_OFFSET /*!< MSC received good unicast frames counter */ -}enet_msc_counter_enum; - -/* function option, used for ENET initialization */ -typedef enum -{ - FORWARD_OPTION = BIT(0), /*!< configure the frame forward related parameters */ - DMABUS_OPTION = BIT(1), /*!< configure the DMA bus mode related parameters */ - DMA_MAXBURST_OPTION = BIT(2), /*!< configure the DMA max burst related parameters */ - DMA_ARBITRATION_OPTION = BIT(3), /*!< configure the DMA arbitration related parameters */ - STORE_OPTION = BIT(4), /*!< configure the store forward mode related parameters */ - DMA_OPTION = BIT(5), /*!< configure the DMA control related parameters */ - VLAN_OPTION = BIT(6), /*!< configure the VLAN tag related parameters */ - FLOWCTL_OPTION = BIT(7), /*!< configure the flow control related parameters */ - HASHH_OPTION = BIT(8), /*!< configure the hash list high 32-bit related parameters */ - HASHL_OPTION = BIT(9), /*!< configure the hash list low 32-bit related parameters */ - FILTER_OPTION = BIT(10), /*!< configure the frame filter control related parameters */ - HALFDUPLEX_OPTION = BIT(11), /*!< configure the halfduplex related parameters */ - TIMER_OPTION = BIT(12), /*!< configure the frame timer related parameters */ - INTERFRAMEGAP_OPTION = BIT(13), /*!< configure the inter frame gap related parameters */ -}enet_option_enum; - -/* phy mode and mac loopback configurations */ -typedef enum -{ - ENET_AUTO_NEGOTIATION = 0x01u, /*!< PHY auto negotiation */ - ENET_100M_FULLDUPLEX = (ENET_MAC_CFG_SPD | ENET_MAC_CFG_DPM), /*!< 100Mbit/s, full-duplex */ - ENET_100M_HALFDUPLEX = ENET_MAC_CFG_SPD , /*!< 100Mbit/s, half-duplex */ - ENET_10M_FULLDUPLEX = ENET_MAC_CFG_DPM, /*!< 10Mbit/s, full-duplex */ - ENET_10M_HALFDUPLEX = (uint32_t)0x00000000U, /*!< 10Mbit/s, half-duplex */ - ENET_LOOPBACKMODE = (ENET_MAC_CFG_LBM | ENET_MAC_CFG_DPM) /*!< MAC in loopback mode at the MII */ -}enet_mediamode_enum; - -/* IP frame checksum function */ -typedef enum -{ - ENET_NO_AUTOCHECKSUM = (uint32_t)0x00000000U, /*!< disable IP frame checksum function */ - ENET_AUTOCHECKSUM_DROP_FAILFRAMES = ENET_MAC_CFG_IPFCO, /*!< enable IP frame checksum function */ - ENET_AUTOCHECKSUM_ACCEPT_FAILFRAMES = (ENET_MAC_CFG_IPFCO|ENET_DMA_CTL_DTCERFD) /*!< enable IP frame checksum function, and the received frame - with only payload error but no other errors will not be dropped */ -}enet_chksumconf_enum; - -/* received frame filter function */ -typedef enum -{ - ENET_PROMISCUOUS_MODE = ENET_MAC_FRMF_PM, /*!< promiscuous mode enabled */ - ENET_RECEIVEALL = (int32_t)ENET_MAC_FRMF_FAR, /*!< all received frame are forwarded to application */ - ENET_BROADCAST_FRAMES_PASS = (uint32_t)0x00000000U, /*!< the address filters pass all received broadcast frames */ - ENET_BROADCAST_FRAMES_DROP = ENET_MAC_FRMF_BFRMD /*!< the address filters filter all incoming broadcast frames */ -}enet_frmrecept_enum; - -/* register group value get */ -typedef enum -{ - ALL_MAC_REG = 0, /*!< MAC register group */ - ALL_MSC_REG = 22, /*!< MSC register group */ - ALL_PTP_REG = 33, /*!< PTP register group */ - ALL_DMA_REG = 44, /*!< DMA register group */ -}enet_registers_type_enum; - -/* dma direction select */ -typedef enum -{ - ENET_DMA_TX = ENET_DMA_STAT_TP, /*!< DMA transmit direction */ - ENET_DMA_RX = ENET_DMA_STAT_RP /*!< DMA receive direction */ -}enet_dmadirection_enum; - -/* PHY operation direction select */ -typedef enum -{ - ENET_PHY_READ = (uint32_t)0x00000000, /*!< read PHY */ - ENET_PHY_WRITE = ENET_MAC_PHY_CTL_PW /*!< write PHY */ -}enet_phydirection_enum; - -/* register operation direction select */ -typedef enum -{ - ENET_REG_READ, /*!< read register */ - ENET_REG_WRITE /*!< write register */ -}enet_regdirection_enum; - -/* ENET MAC addresses */ -typedef enum -{ - ENET_MAC_ADDRESS0 = ((uint32_t)0x00000000), /*!< MAC address0 */ - ENET_MAC_ADDRESS1 = ((uint32_t)0x00000008), /*!< MAC address1 */ - ENET_MAC_ADDRESS2 = ((uint32_t)0x00000010), /*!< MAC address2 */ - ENET_MAC_ADDRESS3 = ((uint32_t)0x00000018) /*!< MAC address3 */ -}enet_macaddress_enum; - -/* descriptor information */ -typedef enum -{ - TXDESC_COLLISION_COUNT, /*!< the number of collisions occurred before the frame was transmitted */ - TXDESC_BUFFER_1_ADDR, /*!< transmit frame buffer 1 address */ - RXDESC_FRAME_LENGTH, /*!< the byte length of the received frame that was transferred to the buffer */ - RXDESC_BUFFER_1_SIZE, /*!< receive buffer 1 size */ - RXDESC_BUFFER_2_SIZE, /*!< receive buffer 2 size */ - RXDESC_BUFFER_1_ADDR /*!< receive frame buffer 1 address */ -}enet_descstate_enum; - -/* structure for initialization of the ENET */ -typedef struct -{ - uint32_t option_enable; /*!< select which function to configure */ - uint32_t forward_frame; /*!< frame forward related parameters */ - uint32_t dmabus_mode; /*!< DMA bus mode related parameters */ - uint32_t dma_maxburst; /*!< DMA max burst related parameters */ - uint32_t dma_arbitration; /*!< DMA Tx and Rx arbitration related parameters */ - uint32_t store_forward_mode; /*!< store forward mode related parameters */ - uint32_t dma_function; /*!< DMA control related parameters */ - uint32_t vlan_config; /*!< VLAN tag related parameters */ - uint32_t flow_control; /*!< flow control related parameters */ - uint32_t hashtable_high; /*!< hash list high 32-bit related parameters */ - uint32_t hashtable_low; /*!< hash list low 32-bit related parameters */ - uint32_t framesfilter_mode; /*!< frame filter control related parameters */ - uint32_t halfduplex_param; /*!< halfduplex related parameters */ - uint32_t timer_config; /*!< frame timer related parameters */ - uint32_t interframegap; /*!< inter frame gap related parameters */ -}enet_initpara_struct; - -/* structure for ENET DMA desciptors */ -typedef struct -{ - uint32_t status; /*!< status */ - uint32_t control_buffer_size; /*!< control and buffer1, buffer2 lengths */ - uint32_t buffer1_addr; /*!< buffer1 address pointer/timestamp low */ - uint32_t buffer2_next_desc_addr; /*!< buffer2 or next descriptor address pointer/timestamp high */ -} enet_descriptors_struct; - -/* structure of PTP system time */ -typedef struct -{ - uint32_t second; /*!< second of system time */ - uint32_t nanosecond; /*!< nanosecond of system time */ - uint32_t sign; /*!< sign of system time */ -}enet_ptp_systime_struct; - -/* mac_cfg register value */ -#define MAC_CFG_BOL(regval) (BITS(5,6) & ((uint32_t)(regval) << 5)) /*!< write value to ENET_MAC_CFG_BOL bit field */ -#define ENET_BACKOFFLIMIT_10 MAC_CFG_BOL(0) /*!< min (n, 10) */ -#define ENET_BACKOFFLIMIT_8 MAC_CFG_BOL(1) /*!< min (n, 8) */ -#define ENET_BACKOFFLIMIT_4 MAC_CFG_BOL(2) /*!< min (n, 4) */ -#define ENET_BACKOFFLIMIT_1 MAC_CFG_BOL(3) /*!< min (n, 1) */ - -#define MAC_CFG_IGBS(regval) (BITS(17,19) & ((uint32_t)(regval) << 17)) /*!< write value to ENET_MAC_CFG_IGBS bit field */ -#define ENET_INTERFRAMEGAP_96BIT MAC_CFG_IGBS(0) /*!< minimum 96 bit times */ -#define ENET_INTERFRAMEGAP_88BIT MAC_CFG_IGBS(1) /*!< minimum 88 bit times */ -#define ENET_INTERFRAMEGAP_80BIT MAC_CFG_IGBS(2) /*!< minimum 80 bit times */ -#define ENET_INTERFRAMEGAP_72BIT MAC_CFG_IGBS(3) /*!< minimum 72 bit times */ -#define ENET_INTERFRAMEGAP_64BIT MAC_CFG_IGBS(4) /*!< minimum 64 bit times */ -#define ENET_INTERFRAMEGAP_56BIT MAC_CFG_IGBS(5) /*!< minimum 56 bit times */ -#define ENET_INTERFRAMEGAP_48BIT MAC_CFG_IGBS(6) /*!< minimum 48 bit times */ -#define ENET_INTERFRAMEGAP_40BIT MAC_CFG_IGBS(7) /*!< minimum 40 bit times */ - -#define ENET_WATCHDOG_ENABLE ((uint32_t)0x00000000U) /*!< the MAC allows no more than 2048 bytes of the frame being received */ -#define ENET_WATCHDOG_DISABLE ENET_MAC_CFG_WDD /*!< the MAC disables the watchdog timer on the receiver, and can receive frames of up to 16384 bytes */ - -#define ENET_JABBER_ENABLE ((uint32_t)0x00000000U) /*!< the maximum transmission byte is 2048 */ -#define ENET_JABBER_DISABLE ENET_MAC_CFG_JBD /*!< the maximum transmission byte can be 16384 */ - -#define ENET_CARRIERSENSE_ENABLE ((uint32_t)0x00000000U) /*!< the MAC transmitter generates carrier sense error and aborts the transmission */ -#define ENET_CARRIERSENSE_DISABLE ENET_MAC_CFG_CSD /*!< the MAC transmitter ignores the MII CRS signal during frame transmission in half-duplex mode */ - -#define ENET_SPEEDMODE_10M ((uint32_t)0x00000000U) /*!< 10 Mbit/s */ -#define ENET_SPEEDMODE_100M ENET_MAC_CFG_SPD /*!< 100 Mbit/s */ - -#define ENET_RECEIVEOWN_ENABLE ((uint32_t)0x00000000U) /*!< the MAC receives all packets that are given by the PHY while transmitting */ -#define ENET_RECEIVEOWN_DISABLE ENET_MAC_CFG_ROD /*!< the MAC disables the reception of frames in half-duplex mode */ - -#define ENET_LOOPBACKMODE_ENABLE ENET_MAC_CFG_LBM /*!< the MAC operates in loopback mode at the MII */ -#define ENET_LOOPBACKMODE_DISABLE ((uint32_t)0x00000000U) /*!< the MAC operates in normal mode */ - -#define ENET_MODE_FULLDUPLEX ENET_MAC_CFG_DPM /*!< full-duplex mode enable */ -#define ENET_MODE_HALFDUPLEX ((uint32_t)0x00000000U) /*!< half-duplex mode enable */ - -#define ENET_CHECKSUMOFFLOAD_ENABLE ENET_MAC_CFG_IPFCO /*!< IP frame checksum offload function enabled for received IP frame */ -#define ENET_CHECKSUMOFFLOAD_DISABLE ((uint32_t)0x00000000U) /*!< the checksum offload function in the receiver is disabled */ - -#define ENET_RETRYTRANSMISSION_ENABLE ((uint32_t)0x00000000U) /*!< the MAC attempts retries up to 16 times based on the settings of BOL*/ -#define ENET_RETRYTRANSMISSION_DISABLE ENET_MAC_CFG_RTD /*!< the MAC attempts only 1 transmission */ - -#define ENET_AUTO_PADCRC_DROP_ENABLE ENET_MAC_CFG_APCD /*!< the MAC strips the Pad/FCS field on received frames */ -#define ENET_AUTO_PADCRC_DROP_DISABLE ((uint32_t)0x00000000U) /*!< the MAC forwards all received frames without modify it */ -#define ENET_AUTO_PADCRC_DROP ENET_MAC_CFG_APCD /*!< the function of the MAC strips the Pad/FCS field on received frames */ - -#define ENET_DEFERRALCHECK_ENABLE ENET_MAC_CFG_DFC /*!< the deferral check function is enabled in the MAC */ -#define ENET_DEFERRALCHECK_DISABLE ((uint32_t)0x00000000U) /*!< the deferral check function is disabled */ - -/* mac_frmf register value */ -#define MAC_FRMF_PCFRM(regval) (BITS(6,7) & ((uint32_t)(regval) << 6)) /*!< write value to ENET_MAC_FRMF_PCFRM bit field */ -#define ENET_PCFRM_PREVENT_ALL MAC_FRMF_PCFRM(0) /*!< MAC prevents all control frames from reaching the application */ -#define ENET_PCFRM_PREVENT_PAUSEFRAME MAC_FRMF_PCFRM(1) /*!< MAC only forwards all other control frames except pause control frame */ -#define ENET_PCFRM_FORWARD_ALL MAC_FRMF_PCFRM(2) /*!< MAC forwards all control frames to application even if they fail the address filter */ -#define ENET_PCFRM_FORWARD_FILTERED MAC_FRMF_PCFRM(3) /*!< MAC forwards control frames that only pass the address filter */ - -#define ENET_RX_FILTER_DISABLE ENET_MAC_FRMF_FAR /*!< all received frame are forwarded to application */ -#define ENET_RX_FILTER_ENABLE ((uint32_t)0x00000000U) /*!< only the frame passed the filter can be forwarded to application */ - -#define ENET_SRC_FILTER_NORMAL_ENABLE ENET_MAC_FRMF_SAFLT /*!< filter source address */ -#define ENET_SRC_FILTER_INVERSE_ENABLE (ENET_MAC_FRMF_SAFLT | ENET_MAC_FRMF_SAIFLT) /*!< inverse source address filtering result */ -#define ENET_SRC_FILTER_DISABLE ((uint32_t)0x00000000U) /*!< source address function in filter disable */ -#define ENET_SRC_FILTER ENET_MAC_FRMF_SAFLT /*!< filter source address function */ -#define ENET_SRC_FILTER_INVERSE ENET_MAC_FRMF_SAIFLT /*!< inverse source address filtering result function */ - -#define ENET_BROADCASTFRAMES_ENABLE ((uint32_t)0x00000000U) /*!< the address filters pass all received broadcast frames */ -#define ENET_BROADCASTFRAMES_DISABLE ENET_MAC_FRMF_BFRMD /*!< the address filters filter all incoming broadcast frames */ - -#define ENET_DEST_FILTER_INVERSE_ENABLE ENET_MAC_FRMF_DAIFLT /*!< inverse DA filtering result */ -#define ENET_DEST_FILTER_INVERSE_DISABLE ((uint32_t)0x00000000U) /*!< not inverse DA filtering result */ -#define ENET_DEST_FILTER_INVERSE ENET_MAC_FRMF_DAIFLT /*!< inverse DA filtering result function */ - -#define ENET_PROMISCUOUS_ENABLE ENET_MAC_FRMF_PM /*!< promiscuous mode enabled */ -#define ENET_PROMISCUOUS_DISABLE ((uint32_t)0x00000000U) /*!< promiscuous mode disabled */ - -#define ENET_MULTICAST_FILTER_HASH_OR_PERFECT (ENET_MAC_FRMF_HMF | ENET_MAC_FRMF_HPFLT) /*!< pass multicast frames that match either the perfect or the hash filtering */ -#define ENET_MULTICAST_FILTER_HASH ENET_MAC_FRMF_HMF /*!< pass multicast frames that match the hash filtering */ -#define ENET_MULTICAST_FILTER_PERFECT ((uint32_t)0x00000000U) /*!< pass multicast frames that match the perfect filtering */ -#define ENET_MULTICAST_FILTER_NONE ENET_MAC_FRMF_MFD /*!< all multicast frames are passed */ -#define ENET_MULTICAST_FILTER_PASS ENET_MAC_FRMF_MFD /*!< pass all multicast frames function */ -#define ENET_MULTICAST_FILTER_HASH_MODE ENET_MAC_FRMF_HMF /*!< HASH multicast filter function */ -#define ENET_FILTER_MODE_EITHER ENET_MAC_FRMF_HPFLT /*!< HASH or perfect filter function */ - -#define ENET_UNICAST_FILTER_EITHER (ENET_MAC_FRMF_HUF | ENET_MAC_FRMF_HPFLT) /*!< pass unicast frames that match either the perfect or the hash filtering */ -#define ENET_UNICAST_FILTER_HASH ENET_MAC_FRMF_HUF /*!< pass unicast frames that match the hash filtering */ -#define ENET_UNICAST_FILTER_PERFECT ((uint32_t)0x00000000U) /*!< pass unicast frames that match the perfect filtering */ -#define ENET_UNICAST_FILTER_HASH_MODE ENET_MAC_FRMF_HUF /*!< HASH unicast filter function */ - -/* mac_phy_ctl register value */ -#define MAC_PHY_CTL_CLR(regval) (BITS(2,4) & ((uint32_t)(regval) << 2)) /*!< write value to ENET_MAC_PHY_CTL_CLR bit field */ -#define ENET_MDC_HCLK_DIV42 MAC_PHY_CTL_CLR(0) /*!< HCLK:60-100 MHz; MDC clock= HCLK/42 */ -#define ENET_MDC_HCLK_DIV62 MAC_PHY_CTL_CLR(1) /*!< HCLK:100-120 MHz; MDC clock= HCLK/62 */ -#define ENET_MDC_HCLK_DIV16 MAC_PHY_CTL_CLR(2) /*!< HCLK:20-35 MHz; MDC clock= HCLK/16 */ -#define ENET_MDC_HCLK_DIV26 MAC_PHY_CTL_CLR(3) /*!< HCLK:35-60 MHz; MDC clock= HCLK/26 */ - -#define MAC_PHY_CTL_PR(regval) (BITS(6,10) & ((uint32_t)(regval) << 6)) /*!< write value to ENET_MAC_PHY_CTL_PR bit field */ - -#define MAC_PHY_CTL_PA(regval) (BITS(11,15) & ((uint32_t)(regval) << 11)) /*!< write value to ENET_MAC_PHY_CTL_PA bit field */ - -/* mac_phy_data register value */ -#define MAC_PHY_DATA_PD(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_MAC_PHY_DATA_PD bit field */ - -/* mac_fctl register value */ -#define MAC_FCTL_PLTS(regval) (BITS(4,5) & ((uint32_t)(regval) << 4)) /*!< write value to ENET_MAC_FCTL_PLTS bit field */ -#define ENET_PAUSETIME_MINUS4 MAC_FCTL_PLTS(0) /*!< pause time minus 4 slot times */ -#define ENET_PAUSETIME_MINUS28 MAC_FCTL_PLTS(1) /*!< pause time minus 28 slot times */ -#define ENET_PAUSETIME_MINUS144 MAC_FCTL_PLTS(2) /*!< pause time minus 144 slot times */ -#define ENET_PAUSETIME_MINUS256 MAC_FCTL_PLTS(3) /*!< pause time minus 256 slot times */ - -#define ENET_ZERO_QUANTA_PAUSE_ENABLE ((uint32_t)0x00000000U) /*!< enable the automatic zero-quanta generation function */ -#define ENET_ZERO_QUANTA_PAUSE_DISABLE ENET_MAC_FCTL_DZQP /*!< disable the automatic zero-quanta generation function */ -#define ENET_ZERO_QUANTA_PAUSE ENET_MAC_FCTL_DZQP /*!< the automatic zero-quanta generation function */ - -#define ENET_MAC0_AND_UNIQUE_ADDRESS_PAUSEDETECT ENET_MAC_FCTL_UPFDT /*!< besides the unique multicast address, MAC also use the MAC0 address to detect pause frame */ -#define ENET_UNIQUE_PAUSEDETECT ((uint32_t)0x00000000U) /*!< only the unique multicast address for pause frame which is specified in IEEE802.3 can be detected */ - -#define ENET_RX_FLOWCONTROL_ENABLE ENET_MAC_FCTL_RFCEN /*!< enable decoding function for the received pause frame and process it */ -#define ENET_RX_FLOWCONTROL_DISABLE ((uint32_t)0x00000000U) /*!< decode function for pause frame is disabled */ -#define ENET_RX_FLOWCONTROL ENET_MAC_FCTL_RFCEN /*!< decoding function for the received pause frame and process it */ - -#define ENET_TX_FLOWCONTROL_ENABLE ENET_MAC_FCTL_TFCEN /*!< enable the flow control operation in the MAC */ -#define ENET_TX_FLOWCONTROL_DISABLE ((uint32_t)0x00000000U) /*!< disable the flow control operation in the MAC */ -#define ENET_TX_FLOWCONTROL ENET_MAC_FCTL_TFCEN /*!< the flow control operation in the MAC */ - -#define ENET_BACK_PRESSURE_ENABLE ENET_MAC_FCTL_FLCBBKPA /*!< enable the back pressure operation in the MAC */ -#define ENET_BACK_PRESSURE_DISABLE ((uint32_t)0x00000000U) /*!< disable the back pressure operation in the MAC */ -#define ENET_BACK_PRESSURE ENET_MAC_FCTL_FLCBBKPA /*!< the back pressure operation in the MAC */ - -#define MAC_FCTL_PTM(regval) (BITS(16,31) & ((uint32_t)(regval) << 16)) /*!< write value to ENET_MAC_FCTL_PTM bit field */ -/* mac_vlt register value */ -#define MAC_VLT_VLTI(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_MAC_VLT_VLTI bit field */ - -#define ENET_VLANTAGCOMPARISON_12BIT ENET_MAC_VLT_VLTC /*!< only low 12 bits of the VLAN tag are used for comparison */ -#define ENET_VLANTAGCOMPARISON_16BIT ((uint32_t)0x00000000U) /*!< all 16 bits of the VLAN tag are used for comparison */ - -/* mac_wum register value */ -#define ENET_WUM_FLAG_WUFFRPR ENET_MAC_WUM_WUFFRPR /*!< wakeup frame filter register poniter reset */ -#define ENET_WUM_FLAG_WUFR ENET_MAC_WUM_WUFR /*!< wakeup frame received */ -#define ENET_WUM_FLAG_MPKR ENET_MAC_WUM_MPKR /*!< magic packet received */ -#define ENET_WUM_POWER_DOWN ENET_MAC_WUM_PWD /*!< power down mode */ -#define ENET_WUM_MAGIC_PACKET_FRAME ENET_MAC_WUM_MPEN /*!< enable a wakeup event due to magic packet reception */ -#define ENET_WUM_WAKE_UP_FRAME ENET_MAC_WUM_WFEN /*!< enable a wakeup event due to wakeup frame reception */ -#define ENET_WUM_GLOBAL_UNICAST ENET_MAC_WUM_GU /*!< any received unicast frame passed filter is considered to be a wakeup frame */ - -/* mac_addr0h register value */ -#define MAC_ADDR0H_ADDR0H(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_MAC_ADDR0H_ADDR0H bit field */ - -/* mac_addrxh register value, x = 1,2,3 */ -#define MAC_ADDR123H_ADDR123H(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_MAC_ADDRxH_ADDRxH(x=1,2,3) bit field */ - -#define ENET_ADDRESS_MASK_BYTE0 BIT(24) /*!< low register bits [7:0] */ -#define ENET_ADDRESS_MASK_BYTE1 BIT(25) /*!< low register bits [15:8] */ -#define ENET_ADDRESS_MASK_BYTE2 BIT(26) /*!< low register bits [23:16] */ -#define ENET_ADDRESS_MASK_BYTE3 BIT(27) /*!< low register bits [31:24] */ -#define ENET_ADDRESS_MASK_BYTE4 BIT(28) /*!< high register bits [7:0] */ -#define ENET_ADDRESS_MASK_BYTE5 BIT(29) /*!< high register bits [15:8] */ - -#define ENET_ADDRESS_FILTER_SA BIT(30) /*!< use MAC address[47:0] is to compare with the SA fields of the received frame */ -#define ENET_ADDRESS_FILTER_DA ((uint32_t)0x00000000) /*!< use MAC address[47:0] is to compare with the DA fields of the received frame */ - -/* mac_fcth register value */ -#define MAC_FCTH_RFA(regval) ((BITS(0,2) & ((uint32_t)(regval) << 0))<<8) /*!< write value to ENET_MAC_FCTH_RFA bit field */ -#define ENET_ACTIVE_THRESHOLD_256BYTES MAC_FCTH_RFA(0) /*!< threshold level is 256 bytes */ -#define ENET_ACTIVE_THRESHOLD_512BYTES MAC_FCTH_RFA(1) /*!< threshold level is 512 bytes */ -#define ENET_ACTIVE_THRESHOLD_768BYTES MAC_FCTH_RFA(2) /*!< threshold level is 768 bytes */ -#define ENET_ACTIVE_THRESHOLD_1024BYTES MAC_FCTH_RFA(3) /*!< threshold level is 1024 bytes */ -#define ENET_ACTIVE_THRESHOLD_1280BYTES MAC_FCTH_RFA(4) /*!< threshold level is 1280 bytes */ -#define ENET_ACTIVE_THRESHOLD_1536BYTES MAC_FCTH_RFA(5) /*!< threshold level is 1536 bytes */ -#define ENET_ACTIVE_THRESHOLD_1792BYTES MAC_FCTH_RFA(6) /*!< threshold level is 1792 bytes */ - -#define MAC_FCTH_RFD(regval) ((BITS(4,6) & ((uint32_t)(regval) << 4))<<8) /*!< write value to ENET_MAC_FCTH_RFD bit field */ -#define ENET_DEACTIVE_THRESHOLD_256BYTES MAC_FCTH_RFD(0) /*!< threshold level is 256 bytes */ -#define ENET_DEACTIVE_THRESHOLD_512BYTES MAC_FCTH_RFD(1) /*!< threshold level is 512 bytes */ -#define ENET_DEACTIVE_THRESHOLD_768BYTES MAC_FCTH_RFD(2) /*!< threshold level is 768 bytes */ -#define ENET_DEACTIVE_THRESHOLD_1024BYTES MAC_FCTH_RFD(3) /*!< threshold level is 1024 bytes */ -#define ENET_DEACTIVE_THRESHOLD_1280BYTES MAC_FCTH_RFD(4) /*!< threshold level is 1280 bytes */ -#define ENET_DEACTIVE_THRESHOLD_1536BYTES MAC_FCTH_RFD(5) /*!< threshold level is 1536 bytes */ -#define ENET_DEACTIVE_THRESHOLD_1792BYTES MAC_FCTH_RFD(6) /*!< threshold level is 1792 bytes */ - -/* msc_ctl register value */ -#define ENET_MSC_COUNTER_STOP_ROLLOVER ENET_MSC_CTL_CTSR /*!< counter stop rollover */ -#define ENET_MSC_RESET_ON_READ ENET_MSC_CTL_RTOR /*!< reset on read */ -#define ENET_MSC_COUNTERS_FREEZE ENET_MSC_CTL_MCFZ /*!< MSC counter freeze */ - -/* ptp_tsctl register value */ -#define ENET_RXTX_TIMESTAMP ENET_PTP_TSCTL_TMSEN /*!< enable timestamp function for transmit and receive frames */ -#define ENET_PTP_TIMESTAMP_INT ENET_PTP_TSCTL_TMSITEN /*!< timestamp interrupt trigger enable */ - -/* ptp_ssinc register value */ -#define PTP_SSINC_STMSSI(regval) (BITS(0,7) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_PTP_SSINC_STMSSI bit field */ - -/* ptp_tsl register value */ -#define GET_PTP_TSL_STMSS(regval) GET_BITS((uint32_t)(regval),0,30) /*!< get value of ENET_PTP_TSL_STMSS bit field */ - -#define ENET_PTP_TIME_POSITIVE ((uint32_t)0x00000000) /*!< time value is positive */ -#define ENET_PTP_TIME_NEGATIVE ENET_PTP_TSL_STS /*!< time value is negative */ - -#define GET_PTP_TSL_STS(regval) (((regval) & BIT(31)) >> (31U)) /*!< get value of ENET_PTP_TSL_STS bit field */ - -/* ptp_tsul register value */ -#define PTP_TSUL_TMSUSS(regval) (BITS(0,30) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_PTP_TSUL_TMSUSS bit field */ - -#define ENET_PTP_ADD_TO_TIME ((uint32_t)0x00000000) /*!< timestamp update value is added to system time */ -#define ENET_PTP_SUBSTRACT_FROM_TIME ENET_PTP_TSUL_TMSUPNS /*!< timestamp update value is subtracted from system time */ - -/* dma_bctl register value */ -#define DMA_BCTL_DPSL(regval) (BITS(2,6) & ((uint32_t)(regval) << 2)) /*!< write value to ENET_DMA_BCTL_DPSL bit field */ -#define GET_DMA_BCTL_DPSL(regval) GET_BITS((regval),2,6) /*!< get value of ENET_DMA_BCTL_DPSL bit field */ - -#define DMA_BCTL_PGBL(regval) (BITS(8,13) & ((uint32_t)(regval) << 8)) /*!< write value to ENET_DMA_BCTL_PGBL bit field */ -#define ENET_PGBL_1BEAT DMA_BCTL_PGBL(1) /*!< maximum number of beats is 1 */ -#define ENET_PGBL_2BEAT DMA_BCTL_PGBL(2) /*!< maximum number of beats is 2 */ -#define ENET_PGBL_4BEAT DMA_BCTL_PGBL(4) /*!< maximum number of beats is 4 */ -#define ENET_PGBL_8BEAT DMA_BCTL_PGBL(8) /*!< maximum number of beats is 8 */ -#define ENET_PGBL_16BEAT DMA_BCTL_PGBL(16) /*!< maximum number of beats is 16 */ -#define ENET_PGBL_32BEAT DMA_BCTL_PGBL(32) /*!< maximum number of beats is 32 */ -#define ENET_PGBL_4xPGBL_4BEAT (DMA_BCTL_PGBL(1)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 4 */ -#define ENET_PGBL_4xPGBL_8BEAT (DMA_BCTL_PGBL(2)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 8 */ -#define ENET_PGBL_4xPGBL_16BEAT (DMA_BCTL_PGBL(4)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 16 */ -#define ENET_PGBL_4xPGBL_32BEAT (DMA_BCTL_PGBL(8)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 32 */ -#define ENET_PGBL_4xPGBL_64BEAT (DMA_BCTL_PGBL(16)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 64 */ -#define ENET_PGBL_4xPGBL_128BEAT (DMA_BCTL_PGBL(32)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 128 */ - -#define DMA_BCTL_RTPR(regval) (BITS(14,15) & ((uint32_t)(regval) << 14)) /*!< write value to ENET_DMA_BCTL_RTPR bit field */ -#define ENET_ARBITRATION_RXTX_1_1 DMA_BCTL_RTPR(0) /*!< receive and transmit priority ratio is 1:1*/ -#define ENET_ARBITRATION_RXTX_2_1 DMA_BCTL_RTPR(1) /*!< receive and transmit priority ratio is 2:1*/ -#define ENET_ARBITRATION_RXTX_3_1 DMA_BCTL_RTPR(2) /*!< receive and transmit priority ratio is 3:1 */ -#define ENET_ARBITRATION_RXTX_4_1 DMA_BCTL_RTPR(3) /*!< receive and transmit priority ratio is 4:1 */ -#define ENET_ARBITRATION_RXPRIORTX ENET_DMA_BCTL_DAB /*!< RxDMA has higher priority than TxDMA */ - -#define ENET_FIXED_BURST_ENABLE ENET_DMA_BCTL_FB /*!< AHB can only use SINGLE/INCR4/INCR8/INCR16 during start of normal burst transfers */ -#define ENET_FIXED_BURST_DISABLE ((uint32_t)0x00000000) /*!< AHB can use SINGLE/INCR burst transfer operations */ - -#define DMA_BCTL_RXDP(regval) (BITS(17,22) & ((uint32_t)(regval) << 17)) /*!< write value to ENET_DMA_BCTL_RXDP bit field */ -#define ENET_RXDP_1BEAT DMA_BCTL_RXDP(1) /*!< maximum number of beats 1 */ -#define ENET_RXDP_2BEAT DMA_BCTL_RXDP(2) /*!< maximum number of beats 2 */ -#define ENET_RXDP_4BEAT DMA_BCTL_RXDP(4) /*!< maximum number of beats 4 */ -#define ENET_RXDP_8BEAT DMA_BCTL_RXDP(8) /*!< maximum number of beats 8 */ -#define ENET_RXDP_16BEAT DMA_BCTL_RXDP(16) /*!< maximum number of beats 16 */ -#define ENET_RXDP_32BEAT DMA_BCTL_RXDP(32) /*!< maximum number of beats 32 */ -#define ENET_RXDP_4xPGBL_4BEAT (DMA_BCTL_RXDP(1)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 4 */ -#define ENET_RXDP_4xPGBL_8BEAT (DMA_BCTL_RXDP(2)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 8 */ -#define ENET_RXDP_4xPGBL_16BEAT (DMA_BCTL_RXDP(4)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 16 */ -#define ENET_RXDP_4xPGBL_32BEAT (DMA_BCTL_RXDP(8)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 32 */ -#define ENET_RXDP_4xPGBL_64BEAT (DMA_BCTL_RXDP(16)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 64 */ -#define ENET_RXDP_4xPGBL_128BEAT (DMA_BCTL_RXDP(32)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 128 */ - -#define ENET_RXTX_DIFFERENT_PGBL ENET_DMA_BCTL_UIP /*!< RxDMA uses the RXDP[5:0], while TxDMA uses the PGBL[5:0] */ -#define ENET_RXTX_SAME_PGBL ((uint32_t)0x00000000) /*!< RxDMA/TxDMA uses PGBL[5:0] */ - -#define ENET_ADDRESS_ALIGN_ENABLE ENET_DMA_BCTL_AA /*!< enabled address-aligned */ -#define ENET_ADDRESS_ALIGN_DISABLE ((uint32_t)0x00000000) /*!< disable address-aligned */ - -/* dma_stat register value */ -#define GET_DMA_STAT_RP(regval) GET_BITS((uint32_t)(regval),17,19) /*!< get value of ENET_DMA_STAT_RP bit field */ -#define ENET_RX_STATE_STOPPED ((uint32_t)0x00000000) /*!< reset or stop rx command issued */ -#define ENET_RX_STATE_FETCHING BIT(17) /*!< fetching the Rx descriptor */ -#define ENET_RX_STATE_WAITING (BIT(17)|BIT(18)) /*!< waiting for receive packet */ -#define ENET_RX_STATE_SUSPENDED BIT(19) /*!< Rx descriptor unavailable */ -#define ENET_RX_STATE_CLOSING (BIT(17)|BIT(19)) /*!< closing receive descriptor */ -#define ENET_RX_STATE_QUEUING ENET_DMA_STAT_RP /*!< transferring the receive packet data from recevie buffer to host memory */ - -#define GET_DMA_STAT_TP(regval) GET_BITS((uint32_t)(regval),20,22) /*!< get value of ENET_DMA_STAT_TP bit field */ -#define ENET_TX_STATE_STOPPED ((uint32_t)0x00000000) /*!< reset or stop Tx Command issued */ -#define ENET_TX_STATE_FETCHING BIT(20) /*!< fetching the Tx descriptor */ -#define ENET_TX_STATE_WAITING BIT(21) /*!< waiting for status */ -#define ENET_TX_STATE_READING (BIT(20)|BIT(21)) /*!< reading the data from host memory buffer and queuing it to transmit buffer */ -#define ENET_TX_STATE_SUSPENDED (BIT(21)|BIT(22)) /*!< Tx descriptor unavailabe or transmit buffer underflow */ -#define ENET_TX_STATE_CLOSING ENET_DMA_STAT_TP /*!< closing Tx descriptor */ - -#define GET_DMA_STAT_EB(regval) GET_BITS((uint32_t)(regval),23,25) /*!< get value of ENET_DMA_STAT_EB bit field */ -#define ENET_ERROR_TXDATA_TRANSFER BIT(23) /*!< error during data transfer by TxDMA or RxDMA */ -#define ENET_ERROR_READ_TRANSFER BIT(24) /*!< error during write transfer or read transfer */ -#define ENET_ERROR_DESC_ACCESS BIT(25) /*!< error during descriptor or buffer access */ - -/* dma_ctl register value */ -#define DMA_CTL_RTHC(regval) (BITS(3,4) & ((uint32_t)(regval) << 3)) /*!< write value to ENET_DMA_CTL_RTHC bit field */ -#define ENET_RX_THRESHOLD_64BYTES DMA_CTL_RTHC(0) /*!< threshold level is 64 Bytes */ -#define ENET_RX_THRESHOLD_32BYTES DMA_CTL_RTHC(1) /*!< threshold level is 32 Bytes */ -#define ENET_RX_THRESHOLD_96BYTES DMA_CTL_RTHC(2) /*!< threshold level is 96 Bytes */ -#define ENET_RX_THRESHOLD_128BYTES DMA_CTL_RTHC(3) /*!< threshold level is 128 Bytes */ - -#define DMA_CTL_TTHC(regval) (BITS(14,16) & ((uint32_t)(regval) << 14)) /*!< write value to ENET_DMA_CTL_TTHC bit field */ -#define ENET_TX_THRESHOLD_64BYTES DMA_CTL_TTHC(0) /*!< threshold level is 64 Bytes */ -#define ENET_TX_THRESHOLD_128BYTES DMA_CTL_TTHC(1) /*!< threshold level is 128 Bytes */ -#define ENET_TX_THRESHOLD_192BYTES DMA_CTL_TTHC(2) /*!< threshold level is 192 Bytes */ -#define ENET_TX_THRESHOLD_256BYTES DMA_CTL_TTHC(3) /*!< threshold level is 256 Bytes */ -#define ENET_TX_THRESHOLD_40BYTES DMA_CTL_TTHC(4) /*!< threshold level is 40 Bytes */ -#define ENET_TX_THRESHOLD_32BYTES DMA_CTL_TTHC(5) /*!< threshold level is 32 Bytes */ -#define ENET_TX_THRESHOLD_24BYTES DMA_CTL_TTHC(6) /*!< threshold level is 24 Bytes */ -#define ENET_TX_THRESHOLD_16BYTES DMA_CTL_TTHC(7) /*!< threshold level is 16 Bytes */ - -#define ENET_TCPIP_CKSUMERROR_ACCEPT ENET_DMA_CTL_DTCERFD /*!< Rx frame with only payload error but no other errors will not be dropped */ -#define ENET_TCPIP_CKSUMERROR_DROP ((uint32_t)0x00000000) /*!< all error frames will be dropped when FERF = 0 */ - -#define ENET_RX_MODE_STOREFORWARD ENET_DMA_CTL_RSFD /*!< RxFIFO operates in store-and-forward mode */ -#define ENET_RX_MODE_CUTTHROUGH ((uint32_t)0x00000000) /*!< RxFIFO operates in cut-through mode */ - -#define ENET_FLUSH_RXFRAME_ENABLE ((uint32_t)0x00000000) /*!< RxDMA flushes all frames */ -#define ENET_FLUSH_RXFRAME_DISABLE ENET_DMA_CTL_DAFRF /*!< RxDMA does not flush any frames */ -#define ENET_NO_FLUSH_RXFRAME ENET_DMA_CTL_DAFRF /*!< RxDMA does not flush frames function */ - -#define ENET_TX_MODE_STOREFORWARD ENET_DMA_CTL_TSFD /*!< TxFIFO operates in store-and-forward mode */ -#define ENET_TX_MODE_CUTTHROUGH ((uint32_t)0x00000000) /*!< TxFIFO operates in cut-through mode */ - -#define ENET_FORWARD_ERRFRAMES_ENABLE (ENET_DMA_CTL_FERF << 2) /*!< all frame received with error except runt error are forwarded to memory */ -#define ENET_FORWARD_ERRFRAMES_DISABLE ((uint32_t)0x00000000) /*!< RxFIFO drop error frame */ -#define ENET_FORWARD_ERRFRAMES (ENET_DMA_CTL_FERF << 2) /*!< the function that all frame received with error except runt error are forwarded to memory */ - -#define ENET_FORWARD_UNDERSZ_GOODFRAMES_ENABLE (ENET_DMA_CTL_FUF << 2) /*!< forward undersized good frames */ -#define ENET_FORWARD_UNDERSZ_GOODFRAMES_DISABLE ((uint32_t)0x00000000) /*!< RxFIFO drops all frames whose length is less than 64 bytes */ -#define ENET_FORWARD_UNDERSZ_GOODFRAMES (ENET_DMA_CTL_FUF << 2) /*!< the function that forwarding undersized good frames */ - -#define ENET_SECONDFRAME_OPT_ENABLE ENET_DMA_CTL_OSF /*!< TxDMA controller operate on second frame mode enable*/ -#define ENET_SECONDFRAME_OPT_DISABLE ((uint32_t)0x00000000) /*!< TxDMA controller operate on second frame mode disable */ -#define ENET_SECONDFRAME_OPT ENET_DMA_CTL_OSF /*!< TxDMA controller operate on second frame function */ - -/* dma_mfbocnt register value */ -#define GET_DMA_MFBOCNT_MSFC(regval) GET_BITS((regval),0,15) /*!< get value of ENET_DMA_MFBOCNT_MSFC bit field */ - -#define GET_DMA_MFBOCNT_MSFA(regval) GET_BITS((regval),17,27) /*!< get value of ENET_DMA_MFBOCNT_MSFA bit field */ - -/* dma tx descriptor tdes0 register value */ -#define TDES0_CONT(regval) (BITS(3,6) & ((uint32_t)(regval) << 3)) /*!< write value to ENET DMA TDES0 CONT bit field */ -#define GET_TDES0_COCNT(regval) GET_BITS((regval),3,6) /*!< get value of ENET DMA TDES0 CONT bit field */ - -#define TDES0_CM(regval) (BITS(22,23) & ((uint32_t)(regval) << 22)) /*!< write value to ENET DMA TDES0 CM bit field */ -#define ENET_CHECKSUM_DISABLE TDES0_CM(0) /*!< checksum insertion disabled */ -#define ENET_CHECKSUM_IPV4HEADER TDES0_CM(1) /*!< only IP header checksum calculation and insertion are enabled */ -#define ENET_CHECKSUM_TCPUDPICMP_SEGMENT TDES0_CM(2) /*!< TCP/UDP/ICMP checksum insertion calculated but pseudo-header */ -#define ENET_CHECKSUM_TCPUDPICMP_FULL TDES0_CM(3) /*!< TCP/UDP/ICMP checksum insertion fully calculated */ - -/* dma tx descriptor tdes1 register value */ -#define TDES1_TB1S(regval) (BITS(0,12) & ((uint32_t)(regval) << 0)) /*!< write value to ENET DMA TDES1 TB1S bit field */ - -#define TDES1_TB2S(regval) (BITS(16,28) & ((uint32_t)(regval) << 16)) /*!< write value to ENET DMA TDES1 TB2S bit field */ - -/* dma rx descriptor rdes0 register value */ -#define RDES0_FRML(regval) (BITS(16,29) & ((uint32_t)(regval) << 16)) /*!< write value to ENET DMA RDES0 FRML bit field */ -#define GET_RDES0_FRML(regval) GET_BITS((regval),16,29) /*!< get value of ENET DMA RDES0 FRML bit field */ - -/* dma rx descriptor rdes1 register value */ -#define ENET_RECEIVE_COMPLETE_INT_ENABLE ((uint32_t)0x00000000U) /*!< RS bit immediately set after Rx completed */ -#define ENET_RECEIVE_COMPLETE_INT_DISABLE ENET_RDES1_DINTC /*!< RS bit not immediately set after Rx completed */ - -#define GET_RDES1_RB1S(regval) GET_BITS((regval),0,12) /*!< get value of ENET DMA RDES1 RB1S bit field */ - -#define GET_RDES1_RB2S(regval) GET_BITS((regval),16,28) /*!< get value of ENET DMA RDES1 RB2S bit field */ - -/* dma rx descriptor rdes4 register value */ -#define RDES4_IPPLDT(regval) (BITS(0,2) & ((uint32_t)(regval) << 0)) /*!< write value to ENET DMA RDES4 IPPLDT bit field */ -#define GET_RDES4_IPPLDT(regval) GET_BITS((regval),0,2) /*!< get value of ENET DMA RDES4 IPPLDT bit field */ - -#define RDES4_PTPMT(regval) (BITS(8,11) & ((uint32_t)(regval) << 8)) /*!< write value to ENET DMA RDES4 PTPMT bit field */ -#define GET_RDES4_PTPMT(regval) GET_BITS((regval),8,11) /*!< get value of ENET DMA RDES4 PTPMT bit field */ - -/* ENET register mask value */ -#define MAC_CFG_MASK ((uint32_t)0xFD30810FU) /*!< ENET_MAC_CFG register mask */ -#define MAC_FCTL_MASK ((uint32_t)0x0000FF41U) /*!< ENET_MAC_FCTL register mask */ -#define DMA_CTL_MASK ((uint32_t)0xF8DE3F23U) /*!< ENET_DMA_CTL register mask */ -#define DMA_BCTL_MASK ((uint32_t)0xF800007DU) /*!< ENET_DMA_BCTL register mask */ - -#define ETH_DMATXDESC_SIZE 0x10U /*!< TxDMA descriptor size */ -#define ETH_DMARXDESC_SIZE 0x10U /*!< RxDMA descriptor size */ - -typedef enum{ - ENET_PTP_SYSTIME_INIT = ENET_PTP_TSCTL_TMSSTI, /*!< timestamp initialize */ - ENET_PTP_SYSTIME_UPDATE = ENET_PTP_TSCTL_TMSSTU, /*!< timestamp update */ - ENET_PTP_ADDEND_UPDATE = ENET_PTP_TSCTL_TMSARU, /*!< addend register update */ - ENET_PTP_FINEMODE = (int32_t)(ENET_PTP_TSCTL_TMSFCU| BIT(31)), /*!< the system timestamp uses the fine method for updating */ - ENET_PTP_COARSEMODE = ENET_PTP_TSCTL_TMSFCU, /*!< the system timestamp uses the coarse method for updating */ -}enet_ptp_function_enum; - - -/* ENET remote wake-up frame register length */ -#define ETH_WAKEUP_REGISTER_LENGTH 8U /*!< remote wake-up frame register length */ - -/* ENET frame size */ -#define ENET_MAX_FRAME_SIZE 1524U /*!< header + frame_extra + payload + CRC */ - -/* ENET delay timeout */ -#define ENET_DELAY_TO ((uint32_t)0x0004FFFFU) /*!< ENET delay timeout */ -#define ENET_RESET_TO ((uint32_t)0x000004FFU) /*!< ENET reset timeout */ - -/* function declarations */ -/* main function */ -/* deinitialize the ENET, and reset structure parameters for ENET initialization */ -void enet_deinit(void); -/* configure the parameters which are usually less cared for initialization */ -void enet_initpara_config(enet_option_enum option, uint32_t para); -/* initialize ENET peripheral with generally concerned parameters and the less cared parameters */ -ErrStatus enet_init(enet_mediamode_enum mediamode, enet_chksumconf_enum checksum, enet_frmrecept_enum recept); -/* reset all core internal registers located in CLK_TX and CLK_RX */ -ErrStatus enet_software_reset(void); -/* check receive frame valid and return frame size */ -uint32_t enet_rxframe_size_get(void); -/* initialize the dma tx/rx descriptors's parameters in chain mode */ -void enet_descriptors_chain_init(enet_dmadirection_enum direction); -/* initialize the dma tx/rx descriptors's parameters in ring mode */ -void enet_descriptors_ring_init(enet_dmadirection_enum direction); -/* handle current received frame data to application buffer */ -ErrStatus enet_frame_receive(uint8_t *buffer, uint32_t bufsize); -/* handle current received frame but without data copy to application buffer */ -#define ENET_NOCOPY_FRAME_RECEIVE() enet_frame_receive(NULL, 0U) -/* handle application buffer data to transmit it */ -ErrStatus enet_frame_transmit(uint8_t *buffer, uint32_t length); -/* handle current transmit frame but without data copy from application buffer */ -#define ENET_NOCOPY_FRAME_TRANSMIT(len) enet_frame_transmit(NULL, (len)) -/* configure the transmit IP frame checksum offload calculation and insertion */ -void enet_transmit_checksum_config(enet_descriptors_struct *desc, uint32_t checksum); -/* ENET Tx and Rx function enable (include MAC and DMA module) */ -void enet_enable(void); -/* ENET Tx and Rx function disable (include MAC and DMA module) */ -void enet_disable(void); -/* configure MAC address */ -void enet_mac_address_set(enet_macaddress_enum mac_addr, uint8_t paddr[]); -/* get MAC address */ -void enet_mac_address_get(enet_macaddress_enum mac_addr, uint8_t paddr[]); - -/* get the ENET MAC/MSC/PTP/DMA status flag */ -FlagStatus enet_flag_get(enet_flag_enum enet_flag); -/* clear the ENET DMA status flag */ -void enet_flag_clear(enet_flag_clear_enum enet_flag); -/* enable ENET MAC/MSC/DMA interrupt */ -void enet_interrupt_enable(enet_int_enum enet_int); -/* disable ENET MAC/MSC/DMA interrupt */ -void enet_interrupt_disable(enet_int_enum enet_int); -/* get ENET MAC/MSC/DMA interrupt flag */ -FlagStatus enet_interrupt_flag_get(enet_int_flag_enum int_flag); -/* clear ENET DMA interrupt flag */ -void enet_interrupt_flag_clear(enet_int_flag_clear_enum int_flag_clear); - -/* MAC function */ -/* ENET Tx function enable (include MAC and DMA module) */ -void enet_tx_enable(void); -/* ENET Tx function disable (include MAC and DMA module) */ -void enet_tx_disable(void); -/* ENET Rx function enable (include MAC and DMA module) */ -void enet_rx_enable(void); -/* ENET Rx function disable (include MAC and DMA module) */ -void enet_rx_disable(void); -/* put registers value into the application buffer */ -void enet_registers_get(enet_registers_type_enum type, uint32_t *preg, uint32_t num); -/* enable the MAC address filter */ -void enet_address_filter_enable(enet_macaddress_enum mac_addr); -/* disable the MAC address filter */ -void enet_address_filter_disable(enet_macaddress_enum mac_addr); -/* configure the MAC address filter */ -void enet_address_filter_config(enet_macaddress_enum mac_addr, uint32_t addr_mask, uint32_t filter_type); -/* PHY interface configuration (configure SMI clock and reset PHY chip) */ -ErrStatus enet_phy_config(void); -/* write to/read from a PHY register */ -ErrStatus enet_phy_write_read(enet_phydirection_enum direction, uint16_t phy_address, uint16_t phy_reg, uint16_t *pvalue); -/* enable the loopback function of phy chip */ -ErrStatus enet_phyloopback_enable(void); -/* disable the loopback function of phy chip */ -ErrStatus enet_phyloopback_disable(void); -/* enable ENET forward feature */ -void enet_forward_feature_enable(uint32_t feature); -/* disable ENET forward feature */ -void enet_forward_feature_disable(uint32_t feature); -/* enable ENET filter feature */ -void enet_fliter_feature_enable(uint32_t feature); -/* disable ENET filter feature */ -void enet_fliter_feature_disable(uint32_t feature); - -/* flow control function */ -/* generate the pause frame, ENET will send pause frame after enable transmit flow control */ -ErrStatus enet_pauseframe_generate(void); -/* configure the pause frame detect type */ -void enet_pauseframe_detect_config(uint32_t detect); -/* configure the pause frame parameters */ -void enet_pauseframe_config(uint32_t pausetime, uint32_t pause_threshold); -/* configure the threshold of the flow control(deactive and active threshold) */ -void enet_flowcontrol_threshold_config(uint32_t deactive, uint32_t active); -/* enable ENET flow control feature */ -void enet_flowcontrol_feature_enable(uint32_t feature); -/* disable ENET flow control feature */ -void enet_flowcontrol_feature_disable(uint32_t feature); - -/* DMA function */ -/* get the dma transmit/receive process state */ -uint32_t enet_dmaprocess_state_get(enet_dmadirection_enum direction); -/* poll the dma transmission/reception enable */ -void enet_dmaprocess_resume(enet_dmadirection_enum direction); -/* check and recover the Rx process */ -void enet_rxprocess_check_recovery(void); -/* flush the ENET transmit fifo, and wait until the flush operation completes */ -ErrStatus enet_txfifo_flush(void); -/* get the transmit/receive address of current descriptor, or current buffer, or descriptor table */ -uint32_t enet_current_desc_address_get(enet_desc_reg_enum addr_get); -/* get the Tx or Rx descriptor information */ -uint32_t enet_desc_information_get(enet_descriptors_struct *desc, enet_descstate_enum info_get); -/* get the number of missed frames during receiving */ -void enet_missed_frame_counter_get(uint32_t *rxfifo_drop, uint32_t *rxdma_drop); - -/* descriptor function */ -/* get the bit flag of ENET dma descriptor */ -FlagStatus enet_desc_flag_get(enet_descriptors_struct *desc, uint32_t desc_flag); -/* set the bit flag of ENET dma tx descriptor */ -void enet_desc_flag_set(enet_descriptors_struct *desc, uint32_t desc_flag); -/* clear the bit flag of ENET dma tx descriptor */ -void enet_desc_flag_clear(enet_descriptors_struct *desc, uint32_t desc_flag); -/* when receiving the completed, set RS bit in ENET_DMA_STAT register will set */ -void enet_desc_receive_complete_bit_enable(enet_descriptors_struct *desc); -/* when receiving the completed, set RS bit in ENET_DMA_STAT register will not set */ -void enet_desc_receive_complete_bit_disable(enet_descriptors_struct *desc); -/* drop current receive frame */ -void enet_rxframe_drop(void); -/* enable DMA feature */ -void enet_dma_feature_enable(uint32_t feature); -/* disable DMA feature */ -void enet_dma_feature_disable(uint32_t feature); - -/* initialize the dma Tx/Rx descriptors's parameters in normal chain mode with ptp function */ -void enet_ptp_normal_descriptors_chain_init(enet_dmadirection_enum direction, enet_descriptors_struct *desc_ptptab); -/* initialize the dma Tx/Rx descriptors's parameters in normal ring mode with ptp function */ -void enet_ptp_normal_descriptors_ring_init(enet_dmadirection_enum direction, enet_descriptors_struct *desc_ptptab); -/* receive a packet data with timestamp values to application buffer, when the DMA is in normal mode */ -ErrStatus enet_ptpframe_receive_normal_mode(uint8_t *buffer, uint32_t bufsize, uint32_t timestamp[]); -/* handle current received frame but without data copy to application buffer in PTP normal mode */ -#define ENET_NOCOPY_PTPFRAME_RECEIVE_NORMAL_MODE(ptr) enet_ptpframe_receive_normal_mode(NULL, 0U, (ptr)) -/* send data with timestamp values in application buffer as a transmit packet, when the DMA is in normal mode */ -ErrStatus enet_ptpframe_transmit_normal_mode(uint8_t *buffer, uint32_t length, uint32_t timestamp[]); -/* handle current transmit frame but without data copy from application buffer in PTP normal mode */ -#define ENET_NOCOPY_PTPFRAME_TRANSMIT_NORMAL_MODE(len, ptr) enet_ptpframe_transmit_normal_mode(NULL, (len), (ptr)) - -/* WUM function */ -/* wakeup frame filter register pointer reset */ -void enet_wum_filter_register_pointer_reset(void); -/* set the remote wakeup frame registers */ -void enet_wum_filter_config(uint32_t pdata[]); -/* enable wakeup management features */ -void enet_wum_feature_enable(uint32_t feature); -/* disable wakeup management features */ -void enet_wum_feature_disable(uint32_t feature); - -/* MSC function */ -/* reset the MAC statistics counters */ -void enet_msc_counters_reset(void); -/* enable the MAC statistics counter features */ -void enet_msc_feature_enable(uint32_t feature); -/* disable the MAC statistics counter features */ -void enet_msc_feature_disable(uint32_t feature); -/* get MAC statistics counter */ -uint32_t enet_msc_counters_get(enet_msc_counter_enum counter); - -/* PTP function */ -/* change subsecond to nanosecond */ -uint32_t enet_ptp_subsecond_2_nanosecond(uint32_t subsecond); -/* change nanosecond to subsecond */ -uint32_t enet_ptp_nanosecond_2_subsecond(uint32_t nanosecond); -/* enable the PTP features */ -void enet_ptp_feature_enable(uint32_t feature); -/* disable the PTP features */ -void enet_ptp_feature_disable(uint32_t feature); -/* configure the PTP timestamp function */ -ErrStatus enet_ptp_timestamp_function_config(enet_ptp_function_enum func); -/* configure the PTP system time subsecond increment value */ -void enet_ptp_subsecond_increment_config(uint32_t subsecond); -/* adjusting the PTP clock frequency only in fine update mode */ -void enet_ptp_timestamp_addend_config(uint32_t add); -/* initializing or adding/subtracting to second of the PTP system time */ -void enet_ptp_timestamp_update_config(uint32_t sign, uint32_t second, uint32_t subsecond); -/* configure the PTP expected target time */ -void enet_ptp_expected_time_config(uint32_t second, uint32_t nanosecond); -/* get the PTP current system time */ -void enet_ptp_system_time_get(enet_ptp_systime_struct *systime_struct); -/* configure and start PTP timestamp counter */ -void enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg); -/* adjust frequency in fine method by configure addend register */ -void enet_ptp_finecorrection_adjfreq(int32_t carry_cfg); -/* update system time in coarse method */ -void enet_ptp_coarsecorrection_systime_update(enet_ptp_systime_struct *systime_struct); -/* set system time in fine method */ -void enet_ptp_finecorrection_settime(enet_ptp_systime_struct * systime_struct); -/* get the ptp flag status */ -FlagStatus enet_ptp_flag_get(uint32_t flag); - -/* internal function */ -/* reset the ENET initpara struct, call it before using enet_initpara_config() */ -void enet_initpara_reset(void); -/* initialize ENET peripheral with generally concerned parameters, call it by enet_init() */ -static void enet_default_init(void); -#ifdef USE_DELAY -/* user can provide more timing precise _ENET_DELAY_ function */ -#define _ENET_DELAY_ delay_ms -#else -/* insert a delay time */ -static void enet_delay(uint32_t ncount); -/* default _ENET_DELAY_ function with less precise timing */ -#define _ENET_DELAY_ enet_delay -#endif - -#endif /* GD32F10X_ENET_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_exmc.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_exmc.h deleted file mode 100644 index 14b48fb..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_exmc.h +++ /dev/null @@ -1,431 +0,0 @@ -/*! - \file gd32f10x_exmc.h - \brief definitions for the EXMC - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_EXMC_H -#define GD32F10X_EXMC_H - -#include "gd32f10x.h" - -/* EXMC definitions */ -#define EXMC (EXMC_BASE) /*!< EXMC register base address */ - -/* registers definitions */ -/* NOR/PSRAM */ -#define EXMC_SNCTL0 REG32(EXMC + 0x00U) /*!< EXMC SRAM/NOR flash control register 0 */ -#define EXMC_SNTCFG0 REG32(EXMC + 0x04U) /*!< EXMC SRAM/NOR flash timing configuration register 0 */ -#define EXMC_SNWTCFG0 REG32(EXMC + 0x104U) /*!< EXMC SRAM/NOR flash write timing configuration register 0 */ - -#define EXMC_SNCTL1 REG32(EXMC + 0x08U) /*!< EXMC SRAM/NOR flash control register 1 */ -#define EXMC_SNTCFG1 REG32(EXMC + 0x0CU) /*!< EXMC SRAM/NOR flash timing configuration register 1 */ -#define EXMC_SNWTCFG1 REG32(EXMC + 0x10CU) /*!< EXMC SRAM/NOR flash write timing configuration register 1 */ - -#define EXMC_SNCTL2 REG32(EXMC + 0x10U) /*!< EXMC SRAM/NOR flash control register 2 */ -#define EXMC_SNTCFG2 REG32(EXMC + 0x14U) /*!< EXMC SRAM/NOR flash timing configuration register 2 */ -#define EXMC_SNWTCFG2 REG32(EXMC + 0x114U) /*!< EXMC SRAM/NOR flash write timing configuration register 2 */ - -#define EXMC_SNCTL3 REG32(EXMC + 0x18U) /*!< EXMC SRAM/NOR flash control register 3 */ -#define EXMC_SNTCFG3 REG32(EXMC + 0x1CU) /*!< EXMC SRAM/NOR flash timing configuration register 3 */ -#define EXMC_SNWTCFG3 REG32(EXMC + 0x11CU) /*!< EXMC SRAM/NOR flash write timing configuration register 3 */ - -/* NAND/PC card */ -#define EXMC_NPCTL1 REG32(EXMC + 0x60U) /*!< EXMC NAND/PC card control register 1 */ -#define EXMC_NPINTEN1 REG32(EXMC + 0x64U) /*!< EXMC NAND/PC card interrupt enable register 1 */ -#define EXMC_NPCTCFG1 REG32(EXMC + 0x68U) /*!< EXMC NAND/PC card common space timing configuration register 1 */ -#define EXMC_NPATCFG1 REG32(EXMC + 0x6CU) /*!< EXMC NAND/PC card attribute space timing configuration register 1 */ -#define EXMC_NECC1 REG32(EXMC + 0x74U) /*!< EXMC NAND ECC register 1 */ - -#define EXMC_NPCTL2 REG32(EXMC + 0x80U) /*!< EXMC NAND/PC card control register 2 */ -#define EXMC_NPINTEN2 REG32(EXMC + 0x84U) /*!< EXMC NAND/PC card interrupt enable register 2 */ -#define EXMC_NPCTCFG2 REG32(EXMC + 0x88U) /*!< EXMC NAND/PC card common space timing configuration register 2 */ -#define EXMC_NPATCFG2 REG32(EXMC + 0x8CU) /*!< EXMC NAND/PC card attribute space timing configuration register 2 */ -#define EXMC_NECC2 REG32(EXMC + 0x94U) /*!< EXMC NAND ECC register 2 */ - -#define EXMC_NPCTL3 REG32(EXMC + 0xA0U) /*!< EXMC NAND/PC card control register 3 */ -#define EXMC_NPINTEN3 REG32(EXMC + 0xA4U) /*!< EXMC NAND/PC card interrupt enable register 3 */ -#define EXMC_NPCTCFG3 REG32(EXMC + 0xA8U) /*!< EXMC NAND/PC card common space timing configuration register 3 */ -#define EXMC_NPATCFG3 REG32(EXMC + 0xACU) /*!< EXMC NAND/PC card attribute space timing configuration register 3 */ -#define EXMC_PIOTCFG3 REG32(EXMC + 0xB0U) /*!< EXMC PC card I/O space timing configuration register */ - -/* bits definitions */ -/* NOR/PSRAM */ -/* EXMC_SNCTLx,x=0..3 */ -#define EXMC_SNCTL_NRBKEN BIT(0) /*!< NOR bank enable */ -#define EXMC_SNCTL_NRMUX BIT(1) /*!< NOR bank memory address/data multiplexing */ -#define EXMC_SNCTL_NRTP BITS(2,3) /*!< NOR bank memory type */ -#define EXMC_SNCTL_NRW BITS(4,5) /*!< NOR bank memory data bus width */ -#define EXMC_SNCTL_NREN BIT(6) /*!< NOR flash access enable */ -#define EXMC_SNCTL_SBRSTEN BIT(8) /*!< synchronous burst enable */ -#define EXMC_SNCTL_NRWTPOL BIT(9) /*!< NWAIT signal polarity */ -#define EXMC_SNCTL_WRAPEN BIT(10) /*!< wrapped burst mode enable */ -#define EXMC_SNCTL_NRWTCFG BIT(11) /*!< NWAIT signal configuration, only work in synchronous mode */ -#define EXMC_SNCTL_WREN BIT(12) /*!< write enable */ -#define EXMC_SNCTL_NRWTEN BIT(13) /*!< NWAIT signal enable */ -#define EXMC_SNCTL_EXMODEN BIT(14) /*!< extended mode enable */ -#define EXMC_SNCTL_ASYNCWAIT BIT(15) /*!< asynchronous wait */ -#define EXMC_SNCTL_SYNCWR BIT(19) /*!< synchronous write */ - -/* EXMC_SNTCFGx,x=0..3 */ -#define EXMC_SNTCFG_ASET BITS(0,3) /*!< address setup time */ -#define EXMC_SNTCFG_AHLD BITS(4,7) /*!< address hold time */ -#define EXMC_SNTCFG_DSET BITS(8,15) /*!< data setup time */ -#define EXMC_SNTCFG_BUSLAT BITS(16,19) /*!< bus latency */ -#define EXMC_SNTCFG_CKDIV BITS(20,23) /*!< synchronous clock divide ratio */ -#define EXMC_SNTCFG_DLAT BITS(24,27) /*!< data latency for NOR flash */ -#define EXMC_SNTCFG_ASYNCMOD BITS(28,29) /*!< asynchronous access mode */ - -/* EXMC_SNWTCFGx,x=0..3 */ -#define EXMC_SNWTCFG_WASET BITS(0,3) /*!< address setup time */ -#define EXMC_SNWTCFG_WAHLD BITS(4,7) /*!< address hold time */ -#define EXMC_SNWTCFG_WDSET BITS(8,15) /*!< data setup time */ -#define EXMC_SNWTCFG_CKDIV BITS(20,23) /*!< synchronous clock divide ratio */ -#define EXMC_SNWTCFG_DLAT BITS(24,27) /*!< data latency for NOR flash */ -#define EXMC_SNWTCFG_WASYNCMOD BITS(28,29) /*!< asynchronous access mode */ - -/* NAND/PC card */ -/* EXMC_NPCTLx,x=1..3 */ -#define EXMC_NPCTL_NDWTEN BIT(1) /*!< wait feature enable */ -#define EXMC_NPCTL_NDBKEN BIT(2) /*!< NAND bank enable */ -#define EXMC_NPCTL_NDTP BIT(3) /*!< NAND bank memory type */ -#define EXMC_NPCTL_NDW BITS(4,5) /*!< NAND bank memory data bus width */ -#define EXMC_NPCTL_ECCEN BIT(6) /*!< ECC enable */ -#define EXMC_NPCTL_CTR BITS(9,12) /*!< CLE to RE delay */ -#define EXMC_NPCTL_ATR BITS(13,16) /*!< ALE to RE delay */ -#define EXMC_NPCTL_ECCSZ BITS(17,19) /*!< ECC size */ - -/* EXMC_NPINTENx,x=1..3 */ -#define EXMC_NPINTEN_INTRS BIT(0) /*!< interrupt rising edge status */ -#define EXMC_NPINTEN_INTHS BIT(1) /*!< interrupt high-level status */ -#define EXMC_NPINTEN_INTFS BIT(2) /*!< interrupt falling edge status */ -#define EXMC_NPINTEN_INTREN BIT(3) /*!< interrupt rising edge detection enable */ -#define EXMC_NPINTEN_INTHEN BIT(4) /*!< interrupt high-level detection enable */ -#define EXMC_NPINTEN_INTFEN BIT(5) /*!< interrupt falling edge detection enable */ -#define EXMC_NPINTEN_FFEPT BIT(6) /*!< FIFO empty flag */ - -/* EXMC_NPCTCFGx,x=1..3 */ -#define EXMC_NPCTCFG_COMSET BITS(0,7) /*!< common memory setup time */ -#define EXMC_NPCTCFG_COMWAIT BITS(8,15) /*!< common memory wait time */ -#define EXMC_NPCTCFG_COMHLD BITS(16,23) /*!< common memory hold time */ -#define EXMC_NPCTCFG_COMHIZ BITS(24,31) /*!< common memory data bus HiZ time */ - -/* EXMC_NPATCFGx,x=1..3 */ -#define EXMC_NPATCFG_ATTSET BITS(0,7) /*!< attribute memory setup time */ -#define EXMC_NPATCFG_ATTWAIT BITS(8,15) /*!< attribute memory wait time */ -#define EXMC_NPATCFG_ATTHLD BITS(16,23) /*!< attribute memory hold time */ -#define EXMC_NPATCFG_ATTHIZ BITS(24,31) /*!< attribute memory data bus HiZ time */ - -/* EXMC_PIOTCFG3 */ -#define EXMC_PIOTCFG3_IOSET BITS(0,7) /*!< IO space setup time */ -#define EXMC_PIOTCFG3_IOWAIT BITS(8,15) /*!< IO space wait time */ -#define EXMC_PIOTCFG3_IOHLD BITS(16,23) /*!< IO space hold time */ -#define EXMC_PIOTCFG3_IOHIZ BITS(24,31) /*!< IO space data bus HiZ time */ - -/* EXMC_NECCx,x=1,2 */ -#define EXMC_NECC_ECC BITS(0,31) /*!< ECC result */ - -/* constants definitions */ -/* EXMC NOR/SRAM timing initialize struct */ -typedef struct -{ - uint32_t asyn_access_mode; /*!< asynchronous access mode */ - uint32_t syn_data_latency; /*!< configure the data latency */ - uint32_t syn_clk_division; /*!< configure the clock divide ratio */ - uint32_t bus_latency; /*!< configure the bus latency */ - uint32_t asyn_data_setuptime; /*!< configure the data setup time,asynchronous access mode valid */ - uint32_t asyn_address_holdtime; /*!< configure the address hold time,asynchronous access mode valid */ - uint32_t asyn_address_setuptime; /*!< configure the data setup time,asynchronous access mode valid */ -}exmc_norsram_timing_parameter_struct; - -/* EXMC NOR/SRAM initialize struct */ -typedef struct -{ - uint32_t norsram_region; /*!< select the region of EXMC NOR/SRAM bank */ - uint32_t write_mode; /*!< the write mode, synchronous mode or asynchronous mode */ - uint32_t extended_mode; /*!< enable or disable the extended mode */ - uint32_t asyn_wait; /*!< enable or disable the asynchronous wait function */ - uint32_t nwait_signal; /*!< enable or disable the NWAIT signal while in synchronous bust mode */ - uint32_t memory_write; /*!< enable or disable the write operation */ - uint32_t nwait_config; /*!< NWAIT signal configuration */ - uint32_t wrap_burst_mode; /*!< enable or disable the wrap burst mode */ - uint32_t nwait_polarity; /*!< specifies the polarity of NWAIT signal from memory */ - uint32_t burst_mode; /*!< enable or disable the burst mode */ - uint32_t databus_width; /*!< specifies the databus width of external memory */ - uint32_t memory_type; /*!< specifies the type of external memory */ - uint32_t address_data_mux; /*!< specifies whether the data bus and address bus are multiplexed */ - exmc_norsram_timing_parameter_struct* read_write_timing; /*!< timing parameters for read and write if the extended mode is not used or the timing - parameters for read if the extended mode is used */ - exmc_norsram_timing_parameter_struct* write_timing; /*!< timing parameters for write when the extended mode is used */ -}exmc_norsram_parameter_struct; - -/* EXMC NAND/PC card timing initialize struct */ -typedef struct -{ - uint32_t databus_hiztime; /*!< configure the dadtabus HiZ time for write operation */ - uint32_t holdtime; /*!< configure the address hold time(or the data hold time for write operation) */ - uint32_t waittime; /*!< configure the minimum wait time */ - uint32_t setuptime; /*!< configure the address setup time */ -}exmc_nand_pccard_timing_parameter_struct; - -/* EXMC NAND initialize struct */ -typedef struct -{ - uint32_t nand_bank; /*!< select the bank of NAND */ - uint32_t ecc_size; /*!< the page size for the ECC calculation */ - uint32_t atr_latency; /*!< configure the latency of ALE low to RB low */ - uint32_t ctr_latency; /*!< configure the latency of CLE low to RB low */ - uint32_t ecc_logic; /*!< enable or disable the ECC calculation logic */ - uint32_t databus_width; /*!< the NAND flash databus width */ - uint32_t wait_feature; /*!< enables or disables the wait feature */ - exmc_nand_pccard_timing_parameter_struct* common_space_timing; /*!< the timing parameters for NAND flash common space */ - exmc_nand_pccard_timing_parameter_struct* attribute_space_timing; /*!< the timing parameters for NAND flash attribute space */ -}exmc_nand_parameter_struct; - -/* EXMC PC card initialize struct */ -typedef struct -{ - uint32_t atr_latency; /*!< configure the latency of ALE low to RB low */ - uint32_t ctr_latency; /*!< configure the latency of CLE low to RB low */ - uint32_t wait_feature; /*!< enables or disables the Wait feature */ - exmc_nand_pccard_timing_parameter_struct* common_space_timing; /*!< the timing parameters for NAND flash common space */ - exmc_nand_pccard_timing_parameter_struct* attribute_space_timing; /*!< the timing parameters for NAND flash attribute space */ - exmc_nand_pccard_timing_parameter_struct* io_space_timing; /*!< the timing parameters for NAND flash IO space */ -}exmc_pccard_parameter_struct;; - -/* EXMC register address */ -#define EXMC_SNCTL(region) REG32(EXMC + 0x08U * (region)) /*!< EXMC SRAM/NOR flash control register */ -#define EXMC_SNTCFG(region) REG32(EXMC + 0x04U + 0x08U * (region)) /*!< EXMC SRAM/NOR flash timing configuration register */ -#define EXMC_SNWTCFG(region) REG32(EXMC + 0x104U + 0x08U * (region)) /*!< EXMC SRAM/NOR flash write timing configuration register */ - -#define EXMC_NPCTL(bank) REG32(EXMC + 0x40U + 0x20U * (bank)) /*!< EXMC NAND/PC card control register */ -#define EXMC_NPINTEN(bank) REG32(EXMC + 0x44U + 0x20U * (bank)) /*!< EXMC NAND/PC card interrupt enable register */ -#define EXMC_NPCTCFG(bank) REG32(EXMC + 0x48U + 0x20U * (bank)) /*!< EXMC NAND/PC card common space timing configuration register */ -#define EXMC_NPATCFG(bank) REG32(EXMC + 0x4CU + 0x20U * (bank)) /*!< EXMC NAND/PC card attribute space timing configuration register */ -#define EXMC_NECC(bank) REG32(EXMC + 0x54U + 0x20U * (bank)) /*!< EXMC NAND ECC register */ - -/* NOR bank memory data bus width */ -#define SNCTL_NRW(regval) (BITS(4,5) & ((uint32_t)(regval) << 4)) -#define EXMC_NOR_DATABUS_WIDTH_8B SNCTL_NRW(0) /*!< NOR data width 8 bits */ -#define EXMC_NOR_DATABUS_WIDTH_16B SNCTL_NRW(1) /*!< NOR data width 16 bits */ - -/* NOR bank memory type */ -#define SNCTL_NRTP(regval) (BITS(2,3) & ((uint32_t)(regval) << 2)) -#define EXMC_MEMORY_TYPE_SRAM SNCTL_NRTP(0) /*!< SRAM,ROM */ -#define EXMC_MEMORY_TYPE_PSRAM SNCTL_NRTP(1) /*!< PSRAM,CRAM */ -#define EXMC_MEMORY_TYPE_NOR SNCTL_NRTP(2) /*!< NOR flash */ - -/* asynchronous access mode */ -#define SNTCFG_ASYNCMOD(regval) (BITS(28,29) & ((uint32_t)(regval) << 28)) -#define EXMC_ACCESS_MODE_A SNTCFG_ASYNCMOD(0) /*!< mode A access */ -#define EXMC_ACCESS_MODE_B SNTCFG_ASYNCMOD(1) /*!< mode B access */ -#define EXMC_ACCESS_MODE_C SNTCFG_ASYNCMOD(2) /*!< mode C access */ -#define EXMC_ACCESS_MODE_D SNTCFG_ASYNCMOD(3) /*!< mode D access */ - -/* data latency for NOR flash */ -#define SNTCFG_DLAT(regval) (BITS(24,27) & ((uint32_t)(regval) << 24)) -#define EXMC_DATALAT_2_CLK SNTCFG_DLAT(0) /*!< data latency 2 EXMC_CLK */ -#define EXMC_DATALAT_3_CLK SNTCFG_DLAT(1) /*!< data latency 3 EXMC_CLK */ -#define EXMC_DATALAT_4_CLK SNTCFG_DLAT(2) /*!< data latency 4 EXMC_CLK */ -#define EXMC_DATALAT_5_CLK SNTCFG_DLAT(3) /*!< data latency 5 EXMC_CLK */ -#define EXMC_DATALAT_6_CLK SNTCFG_DLAT(4) /*!< data latency 6 EXMC_CLK */ -#define EXMC_DATALAT_7_CLK SNTCFG_DLAT(5) /*!< data latency 7 EXMC_CLK */ -#define EXMC_DATALAT_8_CLK SNTCFG_DLAT(6) /*!< data latency 8 EXMC_CLK */ -#define EXMC_DATALAT_9_CLK SNTCFG_DLAT(7) /*!< data latency 9 EXMC_CLK */ -#define EXMC_DATALAT_10_CLK SNTCFG_DLAT(8) /*!< data latency 10 EXMC_CLK */ -#define EXMC_DATALAT_11_CLK SNTCFG_DLAT(9) /*!< data latency 11 EXMC_CLK */ -#define EXMC_DATALAT_12_CLK SNTCFG_DLAT(10) /*!< data latency 12 EXMC_CLK */ -#define EXMC_DATALAT_13_CLK SNTCFG_DLAT(11) /*!< data latency 13 EXMC_CLK */ -#define EXMC_DATALAT_14_CLK SNTCFG_DLAT(12) /*!< data latency 14 EXMC_CLK */ -#define EXMC_DATALAT_15_CLK SNTCFG_DLAT(13) /*!< data latency 15 EXMC_CLK */ -#define EXMC_DATALAT_16_CLK SNTCFG_DLAT(14) /*!< data latency 16 EXMC_CLK */ -#define EXMC_DATALAT_17_CLK SNTCFG_DLAT(15) /*!< data latency 17 EXMC_CLK */ - -/* synchronous clock divide ratio */ -#define SNTCFG_CKDIV(regval) (BITS(20,23) & ((uint32_t)(regval) << 20)) -#define EXMC_SYN_CLOCK_RATIO_DISABLE SNTCFG_CKDIV(0) /*!< EXMC_CLK disable */ -#define EXMC_SYN_CLOCK_RATIO_2_CLK SNTCFG_CKDIV(1) /*!< frequency EXMC_CLK = HCLK/2 */ -#define EXMC_SYN_CLOCK_RATIO_3_CLK SNTCFG_CKDIV(2) /*!< frequency EXMC_CLK = HCLK/3 */ -#define EXMC_SYN_CLOCK_RATIO_4_CLK SNTCFG_CKDIV(3) /*!< frequency EXMC_CLK = HCLK/4 */ -#define EXMC_SYN_CLOCK_RATIO_5_CLK SNTCFG_CKDIV(4) /*!< frequency EXMC_CLK = HCLK/5 */ -#define EXMC_SYN_CLOCK_RATIO_6_CLK SNTCFG_CKDIV(5) /*!< frequency EXMC_CLK = HCLK/6 */ -#define EXMC_SYN_CLOCK_RATIO_7_CLK SNTCFG_CKDIV(6) /*!< frequency EXMC_CLK = HCLK/7 */ -#define EXMC_SYN_CLOCK_RATIO_8_CLK SNTCFG_CKDIV(7) /*!< frequency EXMC_CLK = HCLK/8 */ -#define EXMC_SYN_CLOCK_RATIO_9_CLK SNTCFG_CKDIV(8) /*!< frequency EXMC_CLK = HCLK/9 */ -#define EXMC_SYN_CLOCK_RATIO_10_CLK SNTCFG_CKDIV(9) /*!< frequency EXMC_CLK = HCLK/10 */ -#define EXMC_SYN_CLOCK_RATIO_11_CLK SNTCFG_CKDIV(10) /*!< frequency EXMC_CLK = HCLK/11 */ -#define EXMC_SYN_CLOCK_RATIO_12_CLK SNTCFG_CKDIV(11) /*!< frequency EXMC_CLK = HCLK/12 */ -#define EXMC_SYN_CLOCK_RATIO_13_CLK SNTCFG_CKDIV(12) /*!< frequency EXMC_CLK = HCLK/13 */ -#define EXMC_SYN_CLOCK_RATIO_14_CLK SNTCFG_CKDIV(13) /*!< frequency EXMC_CLK = HCLK/14 */ -#define EXMC_SYN_CLOCK_RATIO_15_CLK SNTCFG_CKDIV(14) /*!< frequency EXMC_CLK = HCLK/15 */ -#define EXMC_SYN_CLOCK_RATIO_16_CLK SNTCFG_CKDIV(15) /*!< frequency EXMC_CLK = HCLK/16 */ - -/* ECC size */ -#define NPCTL_ECCSZ(regval) (BITS(17,19) & ((uint32_t)(regval) << 17)) -#define EXMC_ECC_SIZE_256BYTES NPCTL_ECCSZ(0) /* 256 bytes */ -#define EXMC_ECC_SIZE_512BYTES NPCTL_ECCSZ(1) /* 512 bytes */ -#define EXMC_ECC_SIZE_1024BYTES NPCTL_ECCSZ(2) /* 1024 bytes */ -#define EXMC_ECC_SIZE_2048BYTES NPCTL_ECCSZ(3) /* 2048 bytes */ -#define EXMC_ECC_SIZE_4096BYTES NPCTL_ECCSZ(4) /* 4096 bytes */ -#define EXMC_ECC_SIZE_8192BYTES NPCTL_ECCSZ(5) /* 8192 bytes */ - -/* ALE to RE delay */ -#define NPCTL_ATR(regval) (BITS(13,16) & ((uint32_t)(regval) << 13)) -#define EXMC_ALE_RE_DELAY_1_HCLK NPCTL_ATR(0) /* ALE to RE delay = 1*HCLK */ -#define EXMC_ALE_RE_DELAY_2_HCLK NPCTL_ATR(1) /* ALE to RE delay = 2*HCLK */ -#define EXMC_ALE_RE_DELAY_3_HCLK NPCTL_ATR(2) /* ALE to RE delay = 3*HCLK */ -#define EXMC_ALE_RE_DELAY_4_HCLK NPCTL_ATR(3) /* ALE to RE delay = 4*HCLK */ -#define EXMC_ALE_RE_DELAY_5_HCLK NPCTL_ATR(4) /* ALE to RE delay = 5*HCLK */ -#define EXMC_ALE_RE_DELAY_6_HCLK NPCTL_ATR(5) /* ALE to RE delay = 6*HCLK */ -#define EXMC_ALE_RE_DELAY_7_HCLK NPCTL_ATR(6) /* ALE to RE delay = 7*HCLK */ -#define EXMC_ALE_RE_DELAY_8_HCLK NPCTL_ATR(7) /* ALE to RE delay = 8*HCLK */ -#define EXMC_ALE_RE_DELAY_9_HCLK NPCTL_ATR(8) /* ALE to RE delay = 9*HCLK */ -#define EXMC_ALE_RE_DELAY_10_HCLK NPCTL_ATR(9) /* ALE to RE delay = 10*HCLK */ -#define EXMC_ALE_RE_DELAY_11_HCLK NPCTL_ATR(10) /* ALE to RE delay = 11*HCLK */ -#define EXMC_ALE_RE_DELAY_12_HCLK NPCTL_ATR(11) /* ALE to RE delay = 12*HCLK */ -#define EXMC_ALE_RE_DELAY_13_HCLK NPCTL_ATR(12) /* ALE to RE delay = 13*HCLK */ -#define EXMC_ALE_RE_DELAY_14_HCLK NPCTL_ATR(13) /* ALE to RE delay = 14*HCLK */ -#define EXMC_ALE_RE_DELAY_15_HCLK NPCTL_ATR(14) /* ALE to RE delay = 15*HCLK */ -#define EXMC_ALE_RE_DELAY_16_HCLK NPCTL_ATR(15) /* ALE to RE delay = 16*HCLK */ - -/* CLE to RE delay */ -#define NPCTL_CTR(regval) (BITS(9,12) & ((uint32_t)(regval) << 9)) -#define EXMC_CLE_RE_DELAY_1_HCLK NPCTL_CTR(0) /* CLE to RE delay = 1*HCLK */ -#define EXMC_CLE_RE_DELAY_2_HCLK NPCTL_CTR(1) /* CLE to RE delay = 2*HCLK */ -#define EXMC_CLE_RE_DELAY_3_HCLK NPCTL_CTR(2) /* CLE to RE delay = 3*HCLK */ -#define EXMC_CLE_RE_DELAY_4_HCLK NPCTL_CTR(3) /* CLE to RE delay = 4*HCLK */ -#define EXMC_CLE_RE_DELAY_5_HCLK NPCTL_CTR(4) /* CLE to RE delay = 5*HCLK */ -#define EXMC_CLE_RE_DELAY_6_HCLK NPCTL_CTR(5) /* CLE to RE delay = 6*HCLK */ -#define EXMC_CLE_RE_DELAY_7_HCLK NPCTL_CTR(6) /* CLE to RE delay = 7*HCLK */ -#define EXMC_CLE_RE_DELAY_8_HCLK NPCTL_CTR(7) /* CLE to RE delay = 8*HCLK */ -#define EXMC_CLE_RE_DELAY_9_HCLK NPCTL_CTR(8) /* CLE to RE delay = 9*HCLK */ -#define EXMC_CLE_RE_DELAY_10_HCLK NPCTL_CTR(9) /* CLE to RE delay = 10*HCLK */ -#define EXMC_CLE_RE_DELAY_11_HCLK NPCTL_CTR(10) /* CLE to RE delay = 11*HCLK */ -#define EXMC_CLE_RE_DELAY_12_HCLK NPCTL_CTR(11) /* CLE to RE delay = 12*HCLK */ -#define EXMC_CLE_RE_DELAY_13_HCLK NPCTL_CTR(12) /* CLE to RE delay = 13*HCLK */ -#define EXMC_CLE_RE_DELAY_14_HCLK NPCTL_CTR(13) /* CLE to RE delay = 14*HCLK */ -#define EXMC_CLE_RE_DELAY_15_HCLK NPCTL_CTR(14) /* CLE to RE delay = 15*HCLK */ -#define EXMC_CLE_RE_DELAY_16_HCLK NPCTL_CTR(15) /* CLE to RE delay = 16*HCLK */ - -/* NAND bank memory data bus width */ -#define NPCTL_NDW(regval) (BITS(4,5) & ((uint32_t)(regval) << 4)) -#define EXMC_NAND_DATABUS_WIDTH_8B NPCTL_NDW(0) /*!< NAND data width 8 bits */ -#define EXMC_NAND_DATABUS_WIDTH_16B NPCTL_NDW(1) /*!< NAND data width 16 bits */ - -/* EXMC NOR/SRAM bank region definition */ -#define EXMC_BANK0_NORSRAM_REGION0 ((uint32_t)0x00000000U) /*!< bank0 NOR/SRAM region0 */ -#define EXMC_BANK0_NORSRAM_REGION1 ((uint32_t)0x00000001U) /*!< bank0 NOR/SRAM region1 */ -#define EXMC_BANK0_NORSRAM_REGION2 ((uint32_t)0x00000002U) /*!< bank0 NOR/SRAM region2 */ -#define EXMC_BANK0_NORSRAM_REGION3 ((uint32_t)0x00000003U) /*!< bank0 NOR/SRAM region3 */ - -/* EXMC NOR/SRAM write mode */ -#define EXMC_ASYN_WRITE ((uint32_t)0x00000000U) /*!< asynchronous write mode */ -#define EXMC_SYN_WRITE ((uint32_t)0x00080000U) /*!< synchronous write mode */ - -/* EXMC NWAIT signal configuration */ -#define EXMC_NWAIT_CONFIG_BEFORE ((uint32_t)0x00000000U) /*!< NWAIT signal is active one data cycle before wait state */ -#define EXMC_NWAIT_CONFIG_DURING ((uint32_t)0x00000800U) /*!< NWAIT signal is active during wait state */ - -/* EXMC NWAIT signal polarity configuration */ -#define EXMC_NWAIT_POLARITY_LOW ((uint32_t)0x00000000U) /*!< low level is active of NWAIT */ -#define EXMC_NWAIT_POLARITY_HIGH ((uint32_t)0x00000200U) /*!< high level is active of NWAIT */ - -/* EXMC NAND/PC card bank definition */ -#define EXMC_BANK1_NAND ((uint32_t)0x00000001U) /*!< bank1 NAND flash */ -#define EXMC_BANK2_NAND ((uint32_t)0x00000002U) /*!< bank2 NAND flash */ -#define EXMC_BANK3_PCCARD ((uint32_t)0x00000003U) /*!< bank3 PC card */ - -/* EXMC flag bits */ -#define EXMC_NAND_PCCARD_FLAG_RISE EXMC_NPINTEN_INTRS /*!< interrupt rising edge status */ -#define EXMC_NAND_PCCARD_FLAG_LEVEL EXMC_NPINTEN_INTHS /*!< interrupt high-level status */ -#define EXMC_NAND_PCCARD_FLAG_FALL EXMC_NPINTEN_INTFS /*!< interrupt falling edge status */ -#define EXMC_NAND_PCCARD_FLAG_FIFOE EXMC_NPINTEN_FFEPT /*!< FIFO empty flag */ - -/* EXMC interrupt flag bits */ -#define EXMC_NAND_PCCARD_INT_RISE EXMC_NPINTEN_INTREN /*!< interrupt rising edge detection enable */ -#define EXMC_NAND_PCCARD_INT_LEVEL EXMC_NPINTEN_INTHEN /*!< interrupt high-level detection enable */ -#define EXMC_NAND_PCCARD_INT_FALL EXMC_NPINTEN_INTFEN /*!< interrupt falling edge detection enable */ - -/* function declarations */ -/* deinitialize EXMC NOR/SRAM region */ -void exmc_norsram_deinit(uint32_t norsram_region); -/* exmc_norsram_parameter_struct parameter initialize */ -void exmc_norsram_struct_para_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct); -/* initialize EXMC NOR/SRAM region */ -void exmc_norsram_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct); -/* EXMC NOR/SRAM bank enable */ -void exmc_norsram_enable(uint32_t norsram_region); -/* EXMC NOR/SRAM bank disable */ -void exmc_norsram_disable(uint32_t norsram_region); - -/* deinitialize EXMC NAND bank */ -void exmc_nand_deinit(uint32_t nand_bank); -/* initialize EXMC NAND bank */ -void exmc_nand_init(exmc_nand_parameter_struct* exmc_nand_init_struct); -/* exmc_nand_init_struct parameter initialize */ -void exmc_nand_struct_para_init(exmc_nand_parameter_struct* exmc_nand_init_struct); -/* EXMC NAND bank enable */ -void exmc_nand_enable(uint32_t nand_bank); -/* EXMC NAND bank disable */ -void exmc_nand_disable(uint32_t nand_bank); -/* enable or disable the EXMC NAND ECC function */ -void exmc_nand_ecc_config(uint32_t nand_bank, ControlStatus newvalue); -/* get the EXMC ECC value */ -uint32_t exmc_ecc_get(uint32_t nand_bank); - -/* deinitialize EXMC PC card bank */ -void exmc_pccard_deinit(void); -/* initialize EXMC PC card bank */ -void exmc_pccard_init(exmc_pccard_parameter_struct* exmc_pccard_init_struct); -/* exmc_pccard_parameter_struct parameter initialize */ -void exmc_pccard_struct_para_init(exmc_pccard_parameter_struct* exmc_pccard_init_struct); -/* EXMC PC card bank enable */ -void exmc_pccard_enable(void); -/* EXMC PC card bank disable */ -void exmc_pccard_disable(void); - -/* enable EXMC interrupt */ -void exmc_interrupt_enable(uint32_t bank, uint32_t interrupt_source); -/* disable EXMC interrupt */ -void exmc_interrupt_disable(uint32_t bank, uint32_t interrupt_source); -/* check EXMC flag is set or not */ -FlagStatus exmc_flag_get(uint32_t bank, uint32_t flag); -/* clear EXMC flag */ -void exmc_flag_clear(uint32_t bank, uint32_t flag); -/* check EXMC flag is set or not */ -FlagStatus exmc_interrupt_flag_get(uint32_t bank, uint32_t interrupt_source); -/* clear EXMC flag */ -void exmc_interrupt_flag_clear(uint32_t bank, uint32_t interrupt_source); - -#endif /* GD32F10X_EXMC_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_exti.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_exti.h deleted file mode 100644 index fc473ca..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_exti.h +++ /dev/null @@ -1,258 +0,0 @@ -/*! - \file gd32f10x_exti.h - \brief definitions for the EXTI - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_EXTI_H -#define GD32F10X_EXTI_H - -#include "gd32f10x.h" - -/* EXTI definitions */ -#define EXTI EXTI_BASE - -/* registers definitions */ -#define EXTI_INTEN REG32(EXTI + 0x00U) /*!< interrupt enable register */ -#define EXTI_EVEN REG32(EXTI + 0x04U) /*!< event enable register */ -#define EXTI_RTEN REG32(EXTI + 0x08U) /*!< rising edge trigger enable register */ -#define EXTI_FTEN REG32(EXTI + 0x0CU) /*!< falling trigger enable register */ -#define EXTI_SWIEV REG32(EXTI + 0x10U) /*!< software interrupt event register */ -#define EXTI_PD REG32(EXTI + 0x14U) /*!< pending register */ - -/* bits definitions */ -/* EXTI_INTEN */ -#define EXTI_INTEN_INTEN0 BIT(0) /*!< interrupt from line 0 */ -#define EXTI_INTEN_INTEN1 BIT(1) /*!< interrupt from line 1 */ -#define EXTI_INTEN_INTEN2 BIT(2) /*!< interrupt from line 2 */ -#define EXTI_INTEN_INTEN3 BIT(3) /*!< interrupt from line 3 */ -#define EXTI_INTEN_INTEN4 BIT(4) /*!< interrupt from line 4 */ -#define EXTI_INTEN_INTEN5 BIT(5) /*!< interrupt from line 5 */ -#define EXTI_INTEN_INTEN6 BIT(6) /*!< interrupt from line 6 */ -#define EXTI_INTEN_INTEN7 BIT(7) /*!< interrupt from line 7 */ -#define EXTI_INTEN_INTEN8 BIT(8) /*!< interrupt from line 8 */ -#define EXTI_INTEN_INTEN9 BIT(9) /*!< interrupt from line 9 */ -#define EXTI_INTEN_INTEN10 BIT(10) /*!< interrupt from line 10 */ -#define EXTI_INTEN_INTEN11 BIT(11) /*!< interrupt from line 11 */ -#define EXTI_INTEN_INTEN12 BIT(12) /*!< interrupt from line 12 */ -#define EXTI_INTEN_INTEN13 BIT(13) /*!< interrupt from line 13 */ -#define EXTI_INTEN_INTEN14 BIT(14) /*!< interrupt from line 14 */ -#define EXTI_INTEN_INTEN15 BIT(15) /*!< interrupt from line 15 */ -#define EXTI_INTEN_INTEN16 BIT(16) /*!< interrupt from line 16 */ -#define EXTI_INTEN_INTEN17 BIT(17) /*!< interrupt from line 17 */ -#define EXTI_INTEN_INTEN18 BIT(18) /*!< interrupt from line 18 */ -#define EXTI_INTEN_INTEN19 BIT(19) /*!< interrupt from line 19 */ - -/* EXTI_EVEN */ -#define EXTI_EVEN_EVEN0 BIT(0) /*!< event from line 0 */ -#define EXTI_EVEN_EVEN1 BIT(1) /*!< event from line 1 */ -#define EXTI_EVEN_EVEN2 BIT(2) /*!< event from line 2 */ -#define EXTI_EVEN_EVEN3 BIT(3) /*!< event from line 3 */ -#define EXTI_EVEN_EVEN4 BIT(4) /*!< event from line 4 */ -#define EXTI_EVEN_EVEN5 BIT(5) /*!< event from line 5 */ -#define EXTI_EVEN_EVEN6 BIT(6) /*!< event from line 6 */ -#define EXTI_EVEN_EVEN7 BIT(7) /*!< event from line 7 */ -#define EXTI_EVEN_EVEN8 BIT(8) /*!< event from line 8 */ -#define EXTI_EVEN_EVEN9 BIT(9) /*!< event from line 9 */ -#define EXTI_EVEN_EVEN10 BIT(10) /*!< event from line 10 */ -#define EXTI_EVEN_EVEN11 BIT(11) /*!< event from line 11 */ -#define EXTI_EVEN_EVEN12 BIT(12) /*!< event from line 12 */ -#define EXTI_EVEN_EVEN13 BIT(13) /*!< event from line 13 */ -#define EXTI_EVEN_EVEN14 BIT(14) /*!< event from line 14 */ -#define EXTI_EVEN_EVEN15 BIT(15) /*!< event from line 15 */ -#define EXTI_EVEN_EVEN16 BIT(16) /*!< event from line 16 */ -#define EXTI_EVEN_EVEN17 BIT(17) /*!< event from line 17 */ -#define EXTI_EVEN_EVEN18 BIT(18) /*!< event from line 18 */ -#define EXTI_EVEN_EVEN19 BIT(19) /*!< event from line 19 */ - -/* EXTI_RTEN */ -#define EXTI_RTEN_RTEN0 BIT(0) /*!< rising edge from line 0 */ -#define EXTI_RTEN_RTEN1 BIT(1) /*!< rising edge from line 1 */ -#define EXTI_RTEN_RTEN2 BIT(2) /*!< rising edge from line 2 */ -#define EXTI_RTEN_RTEN3 BIT(3) /*!< rising edge from line 3 */ -#define EXTI_RTEN_RTEN4 BIT(4) /*!< rising edge from line 4 */ -#define EXTI_RTEN_RTEN5 BIT(5) /*!< rising edge from line 5 */ -#define EXTI_RTEN_RTEN6 BIT(6) /*!< rising edge from line 6 */ -#define EXTI_RTEN_RTEN7 BIT(7) /*!< rising edge from line 7 */ -#define EXTI_RTEN_RTEN8 BIT(8) /*!< rising edge from line 8 */ -#define EXTI_RTEN_RTEN9 BIT(9) /*!< rising edge from line 9 */ -#define EXTI_RTEN_RTEN10 BIT(10) /*!< rising edge from line 10 */ -#define EXTI_RTEN_RTEN11 BIT(11) /*!< rising edge from line 11 */ -#define EXTI_RTEN_RTEN12 BIT(12) /*!< rising edge from line 12 */ -#define EXTI_RTEN_RTEN13 BIT(13) /*!< rising edge from line 13 */ -#define EXTI_RTEN_RTEN14 BIT(14) /*!< rising edge from line 14 */ -#define EXTI_RTEN_RTEN15 BIT(15) /*!< rising edge from line 15 */ -#define EXTI_RTEN_RTEN16 BIT(16) /*!< rising edge from line 16 */ -#define EXTI_RTEN_RTEN17 BIT(17) /*!< rising edge from line 17 */ -#define EXTI_RTEN_RTEN18 BIT(18) /*!< rising edge from line 18 */ -#define EXTI_RTEN_RTEN19 BIT(19) /*!< rising edge from line 19 */ - -/* EXTI_FTEN */ -#define EXTI_FTEN_FTEN0 BIT(0) /*!< falling edge from line 0 */ -#define EXTI_FTEN_FTEN1 BIT(1) /*!< falling edge from line 1 */ -#define EXTI_FTEN_FTEN2 BIT(2) /*!< falling edge from line 2 */ -#define EXTI_FTEN_FTEN3 BIT(3) /*!< falling edge from line 3 */ -#define EXTI_FTEN_FTEN4 BIT(4) /*!< falling edge from line 4 */ -#define EXTI_FTEN_FTEN5 BIT(5) /*!< falling edge from line 5 */ -#define EXTI_FTEN_FTEN6 BIT(6) /*!< falling edge from line 6 */ -#define EXTI_FTEN_FTEN7 BIT(7) /*!< falling edge from line 7 */ -#define EXTI_FTEN_FTEN8 BIT(8) /*!< falling edge from line 8 */ -#define EXTI_FTEN_FTEN9 BIT(9) /*!< falling edge from line 9 */ -#define EXTI_FTEN_FTEN10 BIT(10) /*!< falling edge from line 10 */ -#define EXTI_FTEN_FTEN11 BIT(11) /*!< falling edge from line 11 */ -#define EXTI_FTEN_FTEN12 BIT(12) /*!< falling edge from line 12 */ -#define EXTI_FTEN_FTEN13 BIT(13) /*!< falling edge from line 13 */ -#define EXTI_FTEN_FTEN14 BIT(14) /*!< falling edge from line 14 */ -#define EXTI_FTEN_FTEN15 BIT(15) /*!< falling edge from line 15 */ -#define EXTI_FTEN_FTEN16 BIT(16) /*!< falling edge from line 16 */ -#define EXTI_FTEN_FTEN17 BIT(17) /*!< falling edge from line 17 */ -#define EXTI_FTEN_FTEN18 BIT(18) /*!< falling edge from line 18 */ -#define EXTI_FTEN_FTEN19 BIT(19) /*!< falling edge from line 19 */ - -/* EXTI_SWIEV */ -#define EXTI_SWIEV_SWIEV0 BIT(0) /*!< software interrupt/event request from line 0 */ -#define EXTI_SWIEV_SWIEV1 BIT(1) /*!< software interrupt/event request from line 1 */ -#define EXTI_SWIEV_SWIEV2 BIT(2) /*!< software interrupt/event request from line 2 */ -#define EXTI_SWIEV_SWIEV3 BIT(3) /*!< software interrupt/event request from line 3 */ -#define EXTI_SWIEV_SWIEV4 BIT(4) /*!< software interrupt/event request from line 4 */ -#define EXTI_SWIEV_SWIEV5 BIT(5) /*!< software interrupt/event request from line 5 */ -#define EXTI_SWIEV_SWIEV6 BIT(6) /*!< software interrupt/event request from line 6 */ -#define EXTI_SWIEV_SWIEV7 BIT(7) /*!< software interrupt/event request from line 7 */ -#define EXTI_SWIEV_SWIEV8 BIT(8) /*!< software interrupt/event request from line 8 */ -#define EXTI_SWIEV_SWIEV9 BIT(9) /*!< software interrupt/event request from line 9 */ -#define EXTI_SWIEV_SWIEV10 BIT(10) /*!< software interrupt/event request from line 10 */ -#define EXTI_SWIEV_SWIEV11 BIT(11) /*!< software interrupt/event request from line 11 */ -#define EXTI_SWIEV_SWIEV12 BIT(12) /*!< software interrupt/event request from line 12 */ -#define EXTI_SWIEV_SWIEV13 BIT(13) /*!< software interrupt/event request from line 13 */ -#define EXTI_SWIEV_SWIEV14 BIT(14) /*!< software interrupt/event request from line 14 */ -#define EXTI_SWIEV_SWIEV15 BIT(15) /*!< software interrupt/event request from line 15 */ -#define EXTI_SWIEV_SWIEV16 BIT(16) /*!< software interrupt/event request from line 16 */ -#define EXTI_SWIEV_SWIEV17 BIT(17) /*!< software interrupt/event request from line 17 */ -#define EXTI_SWIEV_SWIEV18 BIT(18) /*!< software interrupt/event request from line 18 */ -#define EXTI_SWIEV_SWIEV19 BIT(19) /*!< software interrupt/event request from line 19 */ - -/* EXTI_PD */ -#define EXTI_PD_PD0 BIT(0) /*!< interrupt/event pending status from line 0 */ -#define EXTI_PD_PD1 BIT(1) /*!< interrupt/event pending status from line 1 */ -#define EXTI_PD_PD2 BIT(2) /*!< interrupt/event pending status from line 2 */ -#define EXTI_PD_PD3 BIT(3) /*!< interrupt/event pending status from line 3 */ -#define EXTI_PD_PD4 BIT(4) /*!< interrupt/event pending status from line 4 */ -#define EXTI_PD_PD5 BIT(5) /*!< interrupt/event pending status from line 5 */ -#define EXTI_PD_PD6 BIT(6) /*!< interrupt/event pending status from line 6 */ -#define EXTI_PD_PD7 BIT(7) /*!< interrupt/event pending status from line 7 */ -#define EXTI_PD_PD8 BIT(8) /*!< interrupt/event pending status from line 8 */ -#define EXTI_PD_PD9 BIT(9) /*!< interrupt/event pending status from line 9 */ -#define EXTI_PD_PD10 BIT(10) /*!< interrupt/event pending status from line 10 */ -#define EXTI_PD_PD11 BIT(11) /*!< interrupt/event pending status from line 11 */ -#define EXTI_PD_PD12 BIT(12) /*!< interrupt/event pending status from line 12 */ -#define EXTI_PD_PD13 BIT(13) /*!< interrupt/event pending status from line 13 */ -#define EXTI_PD_PD14 BIT(14) /*!< interrupt/event pending status from line 14 */ -#define EXTI_PD_PD15 BIT(15) /*!< interrupt/event pending status from line 15 */ -#define EXTI_PD_PD16 BIT(16) /*!< interrupt/event pending status from line 16 */ -#define EXTI_PD_PD17 BIT(17) /*!< interrupt/event pending status from line 17 */ -#define EXTI_PD_PD18 BIT(18) /*!< interrupt/event pending status from line 18 */ -#define EXTI_PD_PD19 BIT(19) /*!< interrupt/event pending status from line 19 */ - -/* constants definitions */ -/* EXTI line number */ -typedef enum -{ - EXTI_0 = BIT(0), /*!< EXTI line 0 */ - EXTI_1 = BIT(1), /*!< EXTI line 1 */ - EXTI_2 = BIT(2), /*!< EXTI line 2 */ - EXTI_3 = BIT(3), /*!< EXTI line 3 */ - EXTI_4 = BIT(4), /*!< EXTI line 4 */ - EXTI_5 = BIT(5), /*!< EXTI line 5 */ - EXTI_6 = BIT(6), /*!< EXTI line 6 */ - EXTI_7 = BIT(7), /*!< EXTI line 7 */ - EXTI_8 = BIT(8), /*!< EXTI line 8 */ - EXTI_9 = BIT(9), /*!< EXTI line 9 */ - EXTI_10 = BIT(10), /*!< EXTI line 10 */ - EXTI_11 = BIT(11), /*!< EXTI line 11 */ - EXTI_12 = BIT(12), /*!< EXTI line 12 */ - EXTI_13 = BIT(13), /*!< EXTI line 13 */ - EXTI_14 = BIT(14), /*!< EXTI line 14 */ - EXTI_15 = BIT(15), /*!< EXTI line 15 */ - EXTI_16 = BIT(16), /*!< EXTI line 16 */ - EXTI_17 = BIT(17), /*!< EXTI line 17 */ - EXTI_18 = BIT(18), /*!< EXTI line 18 */ - EXTI_19 = BIT(19), /*!< EXTI line 19 */ -}exti_line_enum; - -/* external interrupt and event */ -typedef enum -{ - EXTI_INTERRUPT = 0, /*!< EXTI interrupt mode */ - EXTI_EVENT /*!< EXTI event mode */ -}exti_mode_enum; - -/* interrupt trigger mode */ -typedef enum -{ - EXTI_TRIG_RISING = 0, /*!< EXTI rising edge trigger */ - EXTI_TRIG_FALLING, /*!< EXTI falling edge trigger */ - EXTI_TRIG_BOTH, /*!< EXTI rising and falling edge trigger */ - EXTI_TRIG_NONE /*!< without rising edge or falling edge trigger */ -}exti_trig_type_enum; - -/* function declarations */ -/* initialization, EXTI lines configuration functions */ -/* deinitialize the EXTI */ -void exti_deinit(void); -/* enable the configuration of EXTI initialize */ -void exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type); -/* enable the interrupts from EXTI line x */ -void exti_interrupt_enable(exti_line_enum linex); -/* enable the events from EXTI line x */ -void exti_event_enable(exti_line_enum linex); -/* disable the interrupts from EXTI line x */ -void exti_interrupt_disable(exti_line_enum linex); -/* disable the events from EXTI line x */ -void exti_event_disable(exti_line_enum linex); - -/* interrupt & flag functions */ -/* get EXTI lines pending flag */ -FlagStatus exti_flag_get(exti_line_enum linex); -/* clear EXTI lines pending flag */ -void exti_flag_clear(exti_line_enum linex); -/* get EXTI lines flag when the interrupt flag is set */ -FlagStatus exti_interrupt_flag_get(exti_line_enum linex); -/* clear EXTI lines pending flag */ -void exti_interrupt_flag_clear(exti_line_enum linex); -/* enable the EXTI software interrupt event */ -void exti_software_interrupt_enable(exti_line_enum linex); -/* disable the EXTI software interrupt event */ -void exti_software_interrupt_disable(exti_line_enum linex); - -#endif /* GD32F10X_EXTI_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_fmc.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_fmc.h deleted file mode 100644 index c3b6b27..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_fmc.h +++ /dev/null @@ -1,369 +0,0 @@ -/*! - \file gd32f10x_fmc.h - \brief definitions for the FMC - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_FMC_H -#define GD32F10X_FMC_H - -#include "gd32f10x.h" - -/* FMC and option byte definition */ -#define FMC FMC_BASE /*!< FMC register base address */ -#define OB OB_BASE /*!< option bytes base address */ - -/* registers definitions */ -#define FMC_WS REG32((FMC) + 0x00U) /*!< FMC wait state register */ -#define FMC_KEY0 REG32((FMC) + 0x04U) /*!< FMC unlock key register 0 */ -#define FMC_OBKEY REG32((FMC) + 0x08U) /*!< FMC option bytes unlock key register */ -#define FMC_STAT0 REG32((FMC) + 0x0CU) /*!< FMC status register 0 */ -#define FMC_CTL0 REG32((FMC) + 0x10U) /*!< FMC control register 0 */ -#define FMC_ADDR0 REG32((FMC) + 0x14U) /*!< FMC address register 0 */ -#define FMC_OBSTAT REG32((FMC) + 0x1CU) /*!< FMC option bytes status register */ -#define FMC_WP REG32((FMC) + 0x20U) /*!< FMC erase/program protection register */ -#define FMC_KEY1 REG32((FMC) + 0x44U) /*!< FMC unlock key register 1 */ -#define FMC_STAT1 REG32((FMC) + 0x4CU) /*!< FMC status register 1 */ -#define FMC_CTL1 REG32((FMC) + 0x50U) /*!< FMC control register 1 */ -#define FMC_ADDR1 REG32((FMC) + 0x54U) /*!< FMC address register 1 */ -#define FMC_WSEN REG32((FMC) + 0xFCU) /*!< FMC wait state enable register */ -#define FMC_PID REG32((FMC) + 0x100U) /*!< FMC product ID register */ - -#define OB_SPC REG16((OB) + 0x00U) /*!< option byte security protection value */ -#define OB_USER REG16((OB) + 0x02U) /*!< option byte user value*/ -#define OB_WP0 REG16((OB) + 0x08U) /*!< option byte write protection 0 */ -#define OB_WP1 REG16((OB) + 0x0AU) /*!< option byte write protection 1 */ -#define OB_WP2 REG16((OB) + 0x0CU) /*!< option byte write protection 2 */ -#define OB_WP3 REG16((OB) + 0x0EU) /*!< option byte write protection 3 */ - -/* bits definitions */ -/* FMC_WS */ -#define FMC_WS_WSCNT BITS(0,2) /*!< wait state counter */ - -/* FMC_KEY0 */ -#define FMC_KEY0_KEY BITS(0,31) /*!< FMC_CTL0 unlock key bits */ - -/* FMC_OBKEY */ -#define FMC_OBKEY_OBKEY BITS(0,31) /*!< option bytes unlock key bits */ - -/* FMC_STAT0 */ -#define FMC_STAT0_BUSY BIT(0) /*!< flash busy flag bit */ -#define FMC_STAT0_PGERR BIT(2) /*!< flash program error flag bit */ -#define FMC_STAT0_WPERR BIT(4) /*!< erase/program protection error flag bit */ -#define FMC_STAT0_ENDF BIT(5) /*!< end of operation flag bit */ - -/* FMC_CTL0 */ -#define FMC_CTL0_PG BIT(0) /*!< main flash program for bank0 command bit */ -#define FMC_CTL0_PER BIT(1) /*!< main flash page erase for bank0 command bit */ -#define FMC_CTL0_MER BIT(2) /*!< main flash mass erase for bank0 command bit */ -#define FMC_CTL0_OBPG BIT(4) /*!< option bytes program command bit */ -#define FMC_CTL0_OBER BIT(5) /*!< option bytes erase command bit */ -#define FMC_CTL0_START BIT(6) /*!< send erase command to FMC bit */ -#define FMC_CTL0_LK BIT(7) /*!< FMC_CTL0 lock bit */ -#define FMC_CTL0_OBWEN BIT(9) /*!< option bytes erase/program enable bit */ -#define FMC_CTL0_ERRIE BIT(10) /*!< error interrupt enable bit */ -#define FMC_CTL0_ENDIE BIT(12) /*!< end of operation interrupt enable bit */ - -/* FMC_ADDR0 */ -#define FMC_ADDR0_ADDR BITS(0,31) /*!< flash erase/program command address bits */ - -/* FMC_OBSTAT */ -#define FMC_OBSTAT_OBERR BIT(0) /*!< option bytes read error bit. */ -#define FMC_OBSTAT_SPC BIT(1) /*!< option bytes security protection code */ -#define FMC_OBSTAT_USER BITS(2,9) /*!< store USER of option bytes block after system reset */ -#define FMC_OBSTAT_DATA BITS(10,25) /*!< store DATA of option bytes block after system reset. */ - -/* FMC_WP */ -#define FMC_WP_WP BITS(0,31) /*!< store WP of option bytes block after system reset */ - -/* FMC_KEY1 */ -#define FMC_KEY1_KEY BITS(0,31) /*!< FMC_CTL1 unlock key bits */ - -/* FMC_STAT1 */ -#define FMC_STAT1_BUSY BIT(0) /*!< flash busy flag bit */ -#define FMC_STAT1_PGERR BIT(2) /*!< flash program error flag bit */ -#define FMC_STAT1_WPERR BIT(4) /*!< erase/program protection error flag bit */ -#define FMC_STAT1_ENDF BIT(5) /*!< end of operation flag bit */ - -/* FMC_CTL1 */ -#define FMC_CTL1_PG BIT(0) /*!< main flash program for bank1 command bit */ -#define FMC_CTL1_PER BIT(1) /*!< main flash page erase for bank1 command bit */ -#define FMC_CTL1_MER BIT(2) /*!< main flash mass erase for bank1 command bit */ -#define FMC_CTL1_START BIT(6) /*!< send erase command to FMC bit */ -#define FMC_CTL1_LK BIT(7) /*!< FMC_CTL1 lock bit */ -#define FMC_CTL1_ERRIE BIT(10) /*!< error interrupt enable bit */ -#define FMC_CTL1_ENDIE BIT(12) /*!< end of operation interrupt enable bit */ - -/* FMC_ADDR1 */ -#define FMC_ADDR1_ADDR BITS(0,31) /*!< flash erase/program command address bits */ - -/* FMC_WSEN */ -#define FMC_WSEN_WSEN BIT(0) /*!< FMC wait state enable bit */ - -/* FMC_PID */ -#define FMC_PID_PID BITS(0,31) /*!< product ID bits */ - -/* constants definitions */ -/* define the FMC bit position and its register index offset */ -#define FMC_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define FMC_REG_VAL(offset) (REG32(FMC + ((uint32_t)(offset) >> 6))) -#define FMC_BIT_POS(val) ((uint32_t)(val) & 0x1FU) -#define FMC_REGIDX_BITS(regidx, bitpos0, bitpos1) (((uint32_t)(regidx) << 12) | ((uint32_t)(bitpos0) << 6) | (uint32_t)(bitpos1)) -#define FMC_REG_VALS(offset) (REG32(FMC + ((uint32_t)(offset) >> 12))) -#define FMC_BIT_POS0(val) (((uint32_t)(val) >> 6) & 0x1FU) -#define FMC_BIT_POS1(val) ((uint32_t)(val) & 0x1FU) -#define FMC_REG_OFFSET_GET(flag) ((uint32_t)(flag) >> 12) - -/* configuration register */ -#define FMC_STAT0_REG_OFFSET 0x0CU /*!< status register 0 offset */ -#define FMC_CTL0_REG_OFFSET 0x10U /*!< control register 0 offset */ -#define FMC_STAT1_REG_OFFSET 0x4CU /*!< status register 1 offset */ -#define FMC_CTL1_REG_OFFSET 0x50U /*!< control register 1 offset */ -#define FMC_OBSTAT_REG_OFFSET 0x1CU /*!< option byte status register offset */ - -/* fmc state */ -typedef enum -{ - FMC_READY, /*!< the operation has been completed */ - FMC_BUSY, /*!< the operation is in progress */ - FMC_PGERR, /*!< program error */ - FMC_WPERR, /*!< erase/program protection error */ - FMC_TOERR, /*!< timeout error */ -}fmc_state_enum; - -/* FMC interrupt enable */ -typedef enum -{ - FMC_INT_BANK0_END = FMC_REGIDX_BIT(FMC_CTL0_REG_OFFSET, 12U), /*!< enable FMC end of program interrupt */ - FMC_INT_BANK0_ERR = FMC_REGIDX_BIT(FMC_CTL0_REG_OFFSET, 10U), /*!< enable FMC error interrupt */ - FMC_INT_BANK1_END = FMC_REGIDX_BIT(FMC_CTL1_REG_OFFSET, 12U), /*!< enable FMC bank1 end of program interrupt */ - FMC_INT_BANK1_ERR = FMC_REGIDX_BIT(FMC_CTL1_REG_OFFSET, 10U), /*!< enable FMC bank1 error interrupt */ -}fmc_int_enum; - -/* FMC flags */ -typedef enum -{ - FMC_FLAG_BANK0_BUSY = FMC_REGIDX_BIT(FMC_STAT0_REG_OFFSET, 0U), /*!< FMC bank0 busy flag */ - FMC_FLAG_BANK0_PGERR = FMC_REGIDX_BIT(FMC_STAT0_REG_OFFSET, 2U), /*!< FMC bank0 operation error flag bit */ - FMC_FLAG_BANK0_WPERR = FMC_REGIDX_BIT(FMC_STAT0_REG_OFFSET, 4U), /*!< FMC bank0 erase/program protection error flag bit */ - FMC_FLAG_BANK0_END = FMC_REGIDX_BIT(FMC_STAT0_REG_OFFSET, 5U), /*!< FMC bank0 end of operation flag bit */ - FMC_FLAG_OBERR = FMC_REGIDX_BIT(FMC_OBSTAT_REG_OFFSET, 0U), /*!< FMC option bytes read error flag */ - FMC_FLAG_BANK1_BUSY = FMC_REGIDX_BIT(FMC_STAT1_REG_OFFSET, 0U), /*!< FMC bank1 busy flag */ - FMC_FLAG_BANK1_PGERR = FMC_REGIDX_BIT(FMC_STAT1_REG_OFFSET, 2U), /*!< FMC bank1 operation error flag bit */ - FMC_FLAG_BANK1_WPERR = FMC_REGIDX_BIT(FMC_STAT1_REG_OFFSET, 4U), /*!< FMC bank1 erase/program protection error flag bit */ - FMC_FLAG_BANK1_END = FMC_REGIDX_BIT(FMC_STAT1_REG_OFFSET, 5U), /*!< FMC bank1 end of operation flag bit */ -}fmc_flag_enum; - -/* FMC interrupt flags */ -typedef enum -{ - FMC_INT_FLAG_BANK0_PGERR = FMC_REGIDX_BITS(FMC_STAT0_REG_OFFSET, 2U, 10U), /*!< FMC bank0 operation error interrupt flag bit */ - FMC_INT_FLAG_BANK0_WPERR = FMC_REGIDX_BITS(FMC_STAT0_REG_OFFSET, 4U, 10U), /*!< FMC bank0 erase/program protection error interrupt flag bit */ - FMC_INT_FLAG_BANK0_END = FMC_REGIDX_BITS(FMC_STAT0_REG_OFFSET, 5U, 12U), /*!< FMC bank0 end of operation interrupt flag bit */ - FMC_INT_FLAG_BANK1_PGERR = FMC_REGIDX_BITS(FMC_STAT1_REG_OFFSET, 2U, 10U), /*!< FMC bank1 operation error interrupt flag bit */ - FMC_INT_FLAG_BANK1_WPERR = FMC_REGIDX_BITS(FMC_STAT1_REG_OFFSET, 4U, 10U), /*!< FMC bank1 erase/program protection error interrupt flag bit */ - FMC_INT_FLAG_BANK1_END = FMC_REGIDX_BITS(FMC_STAT1_REG_OFFSET, 5U, 12U), /*!< FMC bank1 end of operation interrupt flag bit */ -}fmc_interrupt_flag_enum; - -/* unlock key */ -#define UNLOCK_KEY0 ((uint32_t)0x45670123U) /*!< unlock key 0 */ -#define UNLOCK_KEY1 ((uint32_t)0xCDEF89ABU) /*!< unlock key 1 */ - -/* FMC wait state counter */ -#define WS_WSCNT(regval) (BITS(0,2) & ((uint32_t)(regval))) -#define WS_WSCNT_0 WS_WSCNT(0) /*!< FMC 0 wait */ -#define WS_WSCNT_1 WS_WSCNT(1) /*!< FMC 1 wait */ -#define WS_WSCNT_2 WS_WSCNT(2) /*!< FMC 2 wait */ - -/* option bytes software/hardware free watch dog timer */ -#define OB_FWDGT_SW ((uint8_t)0x01U) /*!< software free watchdog */ -#define OB_FWDGT_HW ((uint8_t)0x00U) /*!< hardware free watchdog */ - -/* option bytes reset or not entering deep sleep mode */ -#define OB_DEEPSLEEP_NRST ((uint8_t)0x02U) /*!< no reset when entering deepsleep mode */ -#define OB_DEEPSLEEP_RST ((uint8_t)0x00U) /*!< generate a reset instead of entering deepsleep mode */ - -/* option bytes reset or not entering standby mode */ -#define OB_STDBY_NRST ((uint8_t)0x04U) /*!< no reset when entering deepsleep mode */ -#define OB_STDBY_RST ((uint8_t)0x00U) /*!< generate a reset instead of entering standby mode */ - -/* option bytes boot bank value */ -#define OB_BOOT_B0 ((uint8_t)0x08U) /*!< boot from bank0 */ -#define OB_BOOT_B1 ((uint8_t)0x00U) /*!< boot from bank1 */ - -#define OB_USER_MASK ((uint8_t)0xF0U) /*!< MASK value */ - -/* read protect configure */ -#define FMC_NSPC ((uint8_t)0xA5U) /*!< no security protection */ -#define FMC_USPC ((uint8_t)0xBBU) /*!< under security protection */ - -/* OB_SPC */ -#define OB_SPC_SPC ((uint32_t)0x000000FFU) /*!< option byte security protection value */ -#define OB_SPC_SPC_N ((uint32_t)0x0000FF00U) /*!< option byte security protection complement value */ - -/* OB_USER */ -#define OB_USER_USER ((uint32_t)0x00FF0000U) /*!< user option value */ -#define OB_USER_USER_N ((uint32_t)0xFF000000U) /*!< user option complement value */ - -/* OB_WP0 */ -#define OB_WP0_WP0 ((uint32_t)0x000000FFU) /*!< FMC write protection option value */ - -/* OB_WP1 */ -#define OB_WP1_WP1 ((uint32_t)0x0000FF00U) /*!< FMC write protection option complement value */ - -/* OB_WP2 */ -#define OB_WP2_WP2 ((uint32_t)0x00FF0000U) /*!< FMC write protection option value */ - -/* OB_WP3 */ -#define OB_WP3_WP3 ((uint32_t)0xFF000000U) /*!< FMC write protection option complement value */ - -/* option bytes write protection */ -#define OB_WP_0 ((uint32_t)0x00000001U) /*!< erase/program protection of sector 0 */ -#define OB_WP_1 ((uint32_t)0x00000002U) /*!< erase/program protection of sector 1 */ -#define OB_WP_2 ((uint32_t)0x00000004U) /*!< erase/program protection of sector 2 */ -#define OB_WP_3 ((uint32_t)0x00000008U) /*!< erase/program protection of sector 3 */ -#define OB_WP_4 ((uint32_t)0x00000010U) /*!< erase/program protection of sector 4 */ -#define OB_WP_5 ((uint32_t)0x00000020U) /*!< erase/program protection of sector 5 */ -#define OB_WP_6 ((uint32_t)0x00000040U) /*!< erase/program protection of sector 6 */ -#define OB_WP_7 ((uint32_t)0x00000080U) /*!< erase/program protection of sector 7 */ -#define OB_WP_8 ((uint32_t)0x00000100U) /*!< erase/program protection of sector 8 */ -#define OB_WP_9 ((uint32_t)0x00000200U) /*!< erase/program protection of sector 9 */ -#define OB_WP_10 ((uint32_t)0x00000400U) /*!< erase/program protection of sector 10 */ -#define OB_WP_11 ((uint32_t)0x00000800U) /*!< erase/program protection of sector 11 */ -#define OB_WP_12 ((uint32_t)0x00001000U) /*!< erase/program protection of sector 12 */ -#define OB_WP_13 ((uint32_t)0x00002000U) /*!< erase/program protection of sector 13 */ -#define OB_WP_14 ((uint32_t)0x00004000U) /*!< erase/program protection of sector 14 */ -#define OB_WP_15 ((uint32_t)0x00008000U) /*!< erase/program protection of sector 15 */ -#define OB_WP_16 ((uint32_t)0x00010000U) /*!< erase/program protection of sector 16 */ -#define OB_WP_17 ((uint32_t)0x00020000U) /*!< erase/program protection of sector 17 */ -#define OB_WP_18 ((uint32_t)0x00040000U) /*!< erase/program protection of sector 18 */ -#define OB_WP_19 ((uint32_t)0x00080000U) /*!< erase/program protection of sector 19 */ -#define OB_WP_20 ((uint32_t)0x00100000U) /*!< erase/program protection of sector 20 */ -#define OB_WP_21 ((uint32_t)0x00200000U) /*!< erase/program protection of sector 21 */ -#define OB_WP_22 ((uint32_t)0x00400000U) /*!< erase/program protection of sector 22 */ -#define OB_WP_23 ((uint32_t)0x00800000U) /*!< erase/program protection of sector 23 */ -#define OB_WP_24 ((uint32_t)0x01000000U) /*!< erase/program protection of sector 24 */ -#define OB_WP_25 ((uint32_t)0x02000000U) /*!< erase/program protection of sector 25 */ -#define OB_WP_26 ((uint32_t)0x04000000U) /*!< erase/program protection of sector 26 */ -#define OB_WP_27 ((uint32_t)0x08000000U) /*!< erase/program protection of sector 27 */ -#define OB_WP_28 ((uint32_t)0x10000000U) /*!< erase/program protection of sector 28 */ -#define OB_WP_29 ((uint32_t)0x20000000U) /*!< erase/program protection of sector 29 */ -#define OB_WP_30 ((uint32_t)0x40000000U) /*!< erase/program protection of sector 30 */ -#define OB_WP_31 ((uint32_t)0x80000000U) /*!< erase/program protection of sector 31 */ -#define OB_WP_ALL ((uint32_t)0xFFFFFFFFU) /*!< erase/program protection of all sectors */ - -/* FMC timeout */ -#define FMC_TIMEOUT_COUNT ((uint32_t)0x000F0000U) /*!< FMC timeout count value */ - -/* FMC BANK address */ -#define FMC_BANK0_END_ADDRESS ((uint32_t)0x0807FFFFU) /*!< FMC bank0 end address */ -#define FMC_BANK0_SIZE ((uint32_t)0x00000200U) /*!< FMC bank0 size */ -#define FMC_SIZE (*(uint16_t *)0x1FFFF7E0U) /*!< FMC size */ - -/* function declarations */ -/* FMC main memory programming functions */ -/* set the FMC wait state counter */ -void fmc_wscnt_set(uint32_t wscnt); -/* unlock the main FMC operation */ -void fmc_unlock(void); -/* unlock the FMC bank0 operation */ -void fmc_bank0_unlock(void); -/* unlock the FMC bank1 operation */ -void fmc_bank1_unlock(void); -/* lock the main FMC operation */ -void fmc_lock(void); -/* lock the bank0 FMC operation */ -void fmc_bank0_lock(void); -/* lock the bank1 FMC operation */ -void fmc_bank1_lock(void); -/* FMC erase page */ -fmc_state_enum fmc_page_erase(uint32_t page_address); -/* FMC erase whole chip */ -fmc_state_enum fmc_mass_erase(void); -/* FMC erase whole bank0 */ -fmc_state_enum fmc_bank0_erase(void); -/* FMC erase whole bank1 */ -fmc_state_enum fmc_bank1_erase(void); -/* FMC program a word at the corresponding address */ -fmc_state_enum fmc_word_program(uint32_t address, uint32_t data); -/* FMC program a half word at the corresponding address */ -fmc_state_enum fmc_halfword_program(uint32_t address, uint16_t data); - -/* FMC option bytes programming functions */ -/* unlock the option byte operation */ -void ob_unlock(void); -/* lock the option byte operation */ -void ob_lock(void); -/* erase the option byte */ -fmc_state_enum ob_erase(void); -/* enable write protect */ -fmc_state_enum ob_write_protection_enable(uint32_t ob_wp); -/* configure the option byte security protection */ -fmc_state_enum ob_security_protection_config(uint8_t ob_spc); -/* write the FMC option byte */ -fmc_state_enum ob_user_write(uint8_t ob_fwdgt, uint8_t ob_deepsleep, uint8_t ob_stdby, uint8_t ob_boot); -/* program option bytes data */ -fmc_state_enum ob_data_program(uint32_t address, uint8_t data); -/* get the FMC option byte user */ -uint8_t ob_user_get(void); -/* get OB_DATA in register FMC_OBSTAT */ -uint16_t ob_data_get(void); -/* get the FMC option byte write protection */ -uint32_t ob_write_protection_get(void); -/* get option byte security protection code value */ -FlagStatus ob_spc_get(void); - -/* FMC interrupts and flags management functions */ -/* enable FMC interrupt */ -void fmc_interrupt_enable(uint32_t interrupt); -/* disable FMC interrupt */ -void fmc_interrupt_disable(uint32_t interrupt); -/* check flag is set or not */ -FlagStatus fmc_flag_get(uint32_t flag); -/* clear the FMC flag */ -void fmc_flag_clear(uint32_t flag); -/* get FMC interrupt flag state */ -FlagStatus fmc_interrupt_flag_get(fmc_interrupt_flag_enum flag); -/* clear FMC interrupt flag state */ -void fmc_interrupt_flag_clear(fmc_interrupt_flag_enum flag); -/* return the FMC bank0 state */ -fmc_state_enum fmc_bank0_state_get(void); -/* return the FMC bank1 state */ -fmc_state_enum fmc_bank1_state_get(void); -/* check FMC bank0 ready or not */ -fmc_state_enum fmc_bank0_ready_wait(uint32_t timeout); -/* check FMC bank1 ready or not */ -fmc_state_enum fmc_bank1_ready_wait(uint32_t timeout); - -#endif /* GD32F10X_FMC_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_fwdgt.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_fwdgt.h deleted file mode 100644 index f6b8ca4..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_fwdgt.h +++ /dev/null @@ -1,107 +0,0 @@ -/*! - \file gd32f10x_fwdgt.h - \brief definitions for the FWDGT - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_FWDGT_H -#define GD32F10X_FWDGT_H - -#include "gd32f10x.h" - -/* FWDGT definitions */ -#define FWDGT FWDGT_BASE /*!< FWDGT base address */ - -/* registers definitions */ -#define FWDGT_CTL REG32((FWDGT) + 0x00U) /*!< FWDGT control register */ -#define FWDGT_PSC REG32((FWDGT) + 0x04U) /*!< FWDGT prescaler register */ -#define FWDGT_RLD REG32((FWDGT) + 0x08U) /*!< FWDGT reload register */ -#define FWDGT_STAT REG32((FWDGT) + 0x0CU) /*!< FWDGT status register */ - -/* bits definitions */ -/* FWDGT_CTL */ -#define FWDGT_CTL_CMD BITS(0,15) /*!< FWDGT command value */ - -/* FWDGT_PSC */ -#define FWDGT_PSC_PSC BITS(0,2) /*!< FWDGT prescaler divider value */ - -/* FWDGT_RLD */ -#define FWDGT_RLD_RLD BITS(0,11) /*!< FWDGT counter reload value */ - -/* FWDGT_STAT */ -#define FWDGT_STAT_PUD BIT(0) /*!< FWDGT prescaler divider value update */ -#define FWDGT_STAT_RUD BIT(1) /*!< FWDGT counter reload value update */ - -/* constants definitions */ -/* psc register value */ -#define PSC_PSC(regval) (BITS(0,2) & ((uint32_t)(regval) << 0)) -#define FWDGT_PSC_DIV4 ((uint8_t)PSC_PSC(0)) /*!< FWDGT prescaler set to 4 */ -#define FWDGT_PSC_DIV8 ((uint8_t)PSC_PSC(1)) /*!< FWDGT prescaler set to 8 */ -#define FWDGT_PSC_DIV16 ((uint8_t)PSC_PSC(2)) /*!< FWDGT prescaler set to 16 */ -#define FWDGT_PSC_DIV32 ((uint8_t)PSC_PSC(3)) /*!< FWDGT prescaler set to 32 */ -#define FWDGT_PSC_DIV64 ((uint8_t)PSC_PSC(4)) /*!< FWDGT prescaler set to 64 */ -#define FWDGT_PSC_DIV128 ((uint8_t)PSC_PSC(5)) /*!< FWDGT prescaler set to 128 */ -#define FWDGT_PSC_DIV256 ((uint8_t)PSC_PSC(6)) /*!< FWDGT prescaler set to 256 */ - -/* control value */ -#define FWDGT_WRITEACCESS_ENABLE ((uint16_t)0x5555U) /*!< FWDGT_CTL bits write access enable value */ -#define FWDGT_WRITEACCESS_DISABLE ((uint16_t)0x0000U) /*!< FWDGT_CTL bits write access disable value */ -#define FWDGT_KEY_RELOAD ((uint16_t)0xAAAAU) /*!< FWDGT_CTL bits fwdgt counter reload value */ -#define FWDGT_KEY_ENABLE ((uint16_t)0xCCCCU) /*!< FWDGT_CTL bits fwdgt counter enable value */ - -/* FWDGT timeout value */ -#define FWDGT_PSC_TIMEOUT ((uint32_t)0x000FFFFFU) /*!< FWDGT_PSC register write operation state flag timeout */ -#define FWDGT_RLD_TIMEOUT ((uint32_t)0x000FFFFFU) /*!< FWDGT_RLD register write operation state flag timeout */ - -/* FWDGT flag definitions */ -#define FWDGT_FLAG_PUD FWDGT_STAT_PUD /*!< FWDGT prescaler divider value update flag */ -#define FWDGT_FLAG_RUD FWDGT_STAT_RUD /*!< FWDGT counter reload value update flag */ - -/* function declarations */ -/* enable write access to FWDGT_PSC and FWDGT_RLD */ -void fwdgt_write_enable(void); -/* disable write access to FWDGT_PSC and FWDGT_RLD */ -void fwdgt_write_disable(void); -/* start the free watchdog timer counter */ -void fwdgt_enable(void); - -/* reload the counter of FWDGT */ -void fwdgt_counter_reload(void); -/* configure counter reload value, and prescaler divider value */ -ErrStatus fwdgt_config(uint16_t reload_value, uint8_t prescaler_div); - -/* get flag state of FWDGT */ -FlagStatus fwdgt_flag_get(uint16_t flag); - -#endif /* GD32F10X_FWDGT_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_gpio.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_gpio.h deleted file mode 100644 index d5f3fe1..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_gpio.h +++ /dev/null @@ -1,498 +0,0 @@ -/*! - \file gd32f10x_gpio.h - \brief definitions for the GPIO - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10x_GPIO_H -#define GD32F10x_GPIO_H - -#include "gd32f10x.h" - -/* GPIOx(x=A,B,C,D,E,F,G) definitions */ -#define GPIOA (GPIO_BASE + 0x00000000U) -#define GPIOB (GPIO_BASE + 0x00000400U) -#define GPIOC (GPIO_BASE + 0x00000800U) -#define GPIOD (GPIO_BASE + 0x00000C00U) -#define GPIOE (GPIO_BASE + 0x00001000U) -#define GPIOF (GPIO_BASE + 0x00001400U) -#define GPIOG (GPIO_BASE + 0x00001800U) - -/* AFIO definitions */ -#define AFIO AFIO_BASE - -/* registers definitions */ - -/* GPIO registers definitions */ -#define GPIO_CTL0(gpiox) REG32((gpiox) + 0x00U) /*!< GPIO port control register 0 */ -#define GPIO_CTL1(gpiox) REG32((gpiox) + 0x04U) /*!< GPIO port control register 1 */ -#define GPIO_ISTAT(gpiox) REG32((gpiox) + 0x08U) /*!< GPIO port input status register */ -#define GPIO_OCTL(gpiox) REG32((gpiox) + 0x0CU) /*!< GPIO port output control register */ -#define GPIO_BOP(gpiox) REG32((gpiox) + 0x10U) /*!< GPIO port bit operation register */ -#define GPIO_BC(gpiox) REG32((gpiox) + 0x14U) /*!< GPIO bit clear register */ -#define GPIO_LOCK(gpiox) REG32((gpiox) + 0x18U) /*!< GPIO port configuration lock register */ - -/* AFIO registers definitions */ -#define AFIO_EC REG32(AFIO + 0x00U) /*!< AFIO event control register */ -#define AFIO_PCF0 REG32(AFIO + 0x04U) /*!< AFIO port configuration register 0 */ -#define AFIO_EXTISS0 REG32(AFIO + 0x08U) /*!< AFIO port EXTI sources selection register 0 */ -#define AFIO_EXTISS1 REG32(AFIO + 0x0CU) /*!< AFIO port EXTI sources selection register 1 */ -#define AFIO_EXTISS2 REG32(AFIO + 0x10U) /*!< AFIO port EXTI sources selection register 2 */ -#define AFIO_EXTISS3 REG32(AFIO + 0x14U) /*!< AFIO port EXTI sources selection register 3 */ -#define AFIO_PCF1 REG32(AFIO + 0x1CU) /*!< AFIO port configuration register 1 */ - -/* bits definitions */ -/* GPIO_CTL0 */ -#define GPIO_CTL0_MD0 BITS(0,1) /*!< port 0 mode bits */ -#define GPIO_CTL0_CTL0 BITS(2,3) /*!< pin 0 configuration bits */ -#define GPIO_CTL0_MD1 BITS(4,5) /*!< port 1 mode bits */ -#define GPIO_CTL0_CTL1 BITS(6,7) /*!< pin 1 configuration bits */ -#define GPIO_CTL0_MD2 BITS(8,9) /*!< port 2 mode bits */ -#define GPIO_CTL0_CTL2 BITS(10,11) /*!< pin 2 configuration bits */ -#define GPIO_CTL0_MD3 BITS(12,13) /*!< port 3 mode bits */ -#define GPIO_CTL0_CTL3 BITS(14,15) /*!< pin 3 configuration bits */ -#define GPIO_CTL0_MD4 BITS(16,17) /*!< port 4 mode bits */ -#define GPIO_CTL0_CTL4 BITS(18,19) /*!< pin 4 configuration bits */ -#define GPIO_CTL0_MD5 BITS(20,21) /*!< port 5 mode bits */ -#define GPIO_CTL0_CTL5 BITS(22,23) /*!< pin 5 configuration bits */ -#define GPIO_CTL0_MD6 BITS(24,25) /*!< port 6 mode bits */ -#define GPIO_CTL0_CTL6 BITS(26,27) /*!< pin 6 configuration bits */ -#define GPIO_CTL0_MD7 BITS(28,29) /*!< port 7 mode bits */ -#define GPIO_CTL0_CTL7 BITS(30,31) /*!< pin 7 configuration bits */ - -/* GPIO_CTL1 */ -#define GPIO_CTL1_MD8 BITS(0,1) /*!< port 8 mode bits */ -#define GPIO_CTL1_CTL8 BITS(2,3) /*!< pin 8 configuration bits */ -#define GPIO_CTL1_MD9 BITS(4,5) /*!< port 9 mode bits */ -#define GPIO_CTL1_CTL9 BITS(6,7) /*!< pin 9 configuration bits */ -#define GPIO_CTL1_MD10 BITS(8,9) /*!< port 10 mode bits */ -#define GPIO_CTL1_CTL10 BITS(10,11) /*!< pin 10 configuration bits */ -#define GPIO_CTL1_MD11 BITS(12,13) /*!< port 11 mode bits */ -#define GPIO_CTL1_CTL11 BITS(14,15) /*!< pin 11 configuration bits */ -#define GPIO_CTL1_MD12 BITS(16,17) /*!< port 12 mode bits */ -#define GPIO_CTL1_CTL12 BITS(18,19) /*!< pin 12 configuration bits */ -#define GPIO_CTL1_MD13 BITS(20,21) /*!< port 13 mode bits */ -#define GPIO_CTL1_CTL13 BITS(22,23) /*!< pin 13 configuration bits */ -#define GPIO_CTL1_MD14 BITS(24,25) /*!< port 14 mode bits */ -#define GPIO_CTL1_CTL14 BITS(26,27) /*!< pin 14 configuration bits */ -#define GPIO_CTL1_MD15 BITS(28,29) /*!< port 15 mode bits */ -#define GPIO_CTL1_CTL15 BITS(30,31) /*!< pin 15 configuration bits */ - -/* GPIO_ISTAT */ -#define GPIO_ISTAT_ISTAT0 BIT(0) /*!< pin 0 input status */ -#define GPIO_ISTAT_ISTAT1 BIT(1) /*!< pin 1 input status */ -#define GPIO_ISTAT_ISTAT2 BIT(2) /*!< pin 2 input status */ -#define GPIO_ISTAT_ISTAT3 BIT(3) /*!< pin 3 input status */ -#define GPIO_ISTAT_ISTAT4 BIT(4) /*!< pin 4 input status */ -#define GPIO_ISTAT_ISTAT5 BIT(5) /*!< pin 5 input status */ -#define GPIO_ISTAT_ISTAT6 BIT(6) /*!< pin 6 input status */ -#define GPIO_ISTAT_ISTAT7 BIT(7) /*!< pin 7 input status */ -#define GPIO_ISTAT_ISTAT8 BIT(8) /*!< pin 8 input status */ -#define GPIO_ISTAT_ISTAT9 BIT(9) /*!< pin 9 input status */ -#define GPIO_ISTAT_ISTAT10 BIT(10) /*!< pin 10 input status */ -#define GPIO_ISTAT_ISTAT11 BIT(11) /*!< pin 11 input status */ -#define GPIO_ISTAT_ISTAT12 BIT(12) /*!< pin 12 input status */ -#define GPIO_ISTAT_ISTAT13 BIT(13) /*!< pin 13 input status */ -#define GPIO_ISTAT_ISTAT14 BIT(14) /*!< pin 14 input status */ -#define GPIO_ISTAT_ISTAT15 BIT(15) /*!< pin 15 input status */ - -/* GPIO_OCTL */ -#define GPIO_OCTL_OCTL0 BIT(0) /*!< pin 0 output bit */ -#define GPIO_OCTL_OCTL1 BIT(1) /*!< pin 1 output bit */ -#define GPIO_OCTL_OCTL2 BIT(2) /*!< pin 2 output bit */ -#define GPIO_OCTL_OCTL3 BIT(3) /*!< pin 3 output bit */ -#define GPIO_OCTL_OCTL4 BIT(4) /*!< pin 4 output bit */ -#define GPIO_OCTL_OCTL5 BIT(5) /*!< pin 5 output bit */ -#define GPIO_OCTL_OCTL6 BIT(6) /*!< pin 6 output bit */ -#define GPIO_OCTL_OCTL7 BIT(7) /*!< pin 7 output bit */ -#define GPIO_OCTL_OCTL8 BIT(8) /*!< pin 8 output bit */ -#define GPIO_OCTL_OCTL9 BIT(9) /*!< pin 9 output bit */ -#define GPIO_OCTL_OCTL10 BIT(10) /*!< pin 10 output bit */ -#define GPIO_OCTL_OCTL11 BIT(11) /*!< pin 11 output bit */ -#define GPIO_OCTL_OCTL12 BIT(12) /*!< pin 12 output bit */ -#define GPIO_OCTL_OCTL13 BIT(13) /*!< pin 13 output bit */ -#define GPIO_OCTL_OCTL14 BIT(14) /*!< pin 14 output bit */ -#define GPIO_OCTL_OCTL15 BIT(15) /*!< pin 15 output bit */ - -/* GPIO_BOP */ -#define GPIO_BOP_BOP0 BIT(0) /*!< pin 0 set bit */ -#define GPIO_BOP_BOP1 BIT(1) /*!< pin 1 set bit */ -#define GPIO_BOP_BOP2 BIT(2) /*!< pin 2 set bit */ -#define GPIO_BOP_BOP3 BIT(3) /*!< pin 3 set bit */ -#define GPIO_BOP_BOP4 BIT(4) /*!< pin 4 set bit */ -#define GPIO_BOP_BOP5 BIT(5) /*!< pin 5 set bit */ -#define GPIO_BOP_BOP6 BIT(6) /*!< pin 6 set bit */ -#define GPIO_BOP_BOP7 BIT(7) /*!< pin 7 set bit */ -#define GPIO_BOP_BOP8 BIT(8) /*!< pin 8 set bit */ -#define GPIO_BOP_BOP9 BIT(9) /*!< pin 9 set bit */ -#define GPIO_BOP_BOP10 BIT(10) /*!< pin 10 set bit */ -#define GPIO_BOP_BOP11 BIT(11) /*!< pin 11 set bit */ -#define GPIO_BOP_BOP12 BIT(12) /*!< pin 12 set bit */ -#define GPIO_BOP_BOP13 BIT(13) /*!< pin 13 set bit */ -#define GPIO_BOP_BOP14 BIT(14) /*!< pin 14 set bit */ -#define GPIO_BOP_BOP15 BIT(15) /*!< pin 15 set bit */ -#define GPIO_BOP_CR0 BIT(16) /*!< pin 0 clear bit */ -#define GPIO_BOP_CR1 BIT(17) /*!< pin 1 clear bit */ -#define GPIO_BOP_CR2 BIT(18) /*!< pin 2 clear bit */ -#define GPIO_BOP_CR3 BIT(19) /*!< pin 3 clear bit */ -#define GPIO_BOP_CR4 BIT(20) /*!< pin 4 clear bit */ -#define GPIO_BOP_CR5 BIT(21) /*!< pin 5 clear bit */ -#define GPIO_BOP_CR6 BIT(22) /*!< pin 6 clear bit */ -#define GPIO_BOP_CR7 BIT(23) /*!< pin 7 clear bit */ -#define GPIO_BOP_CR8 BIT(24) /*!< pin 8 clear bit */ -#define GPIO_BOP_CR9 BIT(25) /*!< pin 9 clear bit */ -#define GPIO_BOP_CR10 BIT(26) /*!< pin 10 clear bit */ -#define GPIO_BOP_CR11 BIT(27) /*!< pin 11 clear bit */ -#define GPIO_BOP_CR12 BIT(28) /*!< pin 12 clear bit */ -#define GPIO_BOP_CR13 BIT(29) /*!< pin 13 clear bit */ -#define GPIO_BOP_CR14 BIT(30) /*!< pin 14 clear bit */ -#define GPIO_BOP_CR15 BIT(31) /*!< pin 15 clear bit */ - -/* GPIO_BC */ -#define GPIO_BC_CR0 BIT(0) /*!< pin 0 clear bit */ -#define GPIO_BC_CR1 BIT(1) /*!< pin 1 clear bit */ -#define GPIO_BC_CR2 BIT(2) /*!< pin 2 clear bit */ -#define GPIO_BC_CR3 BIT(3) /*!< pin 3 clear bit */ -#define GPIO_BC_CR4 BIT(4) /*!< pin 4 clear bit */ -#define GPIO_BC_CR5 BIT(5) /*!< pin 5 clear bit */ -#define GPIO_BC_CR6 BIT(6) /*!< pin 6 clear bit */ -#define GPIO_BC_CR7 BIT(7) /*!< pin 7 clear bit */ -#define GPIO_BC_CR8 BIT(8) /*!< pin 8 clear bit */ -#define GPIO_BC_CR9 BIT(9) /*!< pin 9 clear bit */ -#define GPIO_BC_CR10 BIT(10) /*!< pin 10 clear bit */ -#define GPIO_BC_CR11 BIT(11) /*!< pin 11 clear bit */ -#define GPIO_BC_CR12 BIT(12) /*!< pin 12 clear bit */ -#define GPIO_BC_CR13 BIT(13) /*!< pin 13 clear bit */ -#define GPIO_BC_CR14 BIT(14) /*!< pin 14 clear bit */ -#define GPIO_BC_CR15 BIT(15) /*!< pin 15 clear bit */ - -/* GPIO_LOCK */ -#define GPIO_LOCK_LK0 BIT(0) /*!< pin 0 lock bit */ -#define GPIO_LOCK_LK1 BIT(1) /*!< pin 1 lock bit */ -#define GPIO_LOCK_LK2 BIT(2) /*!< pin 2 lock bit */ -#define GPIO_LOCK_LK3 BIT(3) /*!< pin 3 lock bit */ -#define GPIO_LOCK_LK4 BIT(4) /*!< pin 4 lock bit */ -#define GPIO_LOCK_LK5 BIT(5) /*!< pin 5 lock bit */ -#define GPIO_LOCK_LK6 BIT(6) /*!< pin 6 lock bit */ -#define GPIO_LOCK_LK7 BIT(7) /*!< pin 7 lock bit */ -#define GPIO_LOCK_LK8 BIT(8) /*!< pin 8 lock bit */ -#define GPIO_LOCK_LK9 BIT(9) /*!< pin 9 lock bit */ -#define GPIO_LOCK_LK10 BIT(10) /*!< pin 10 lock bit */ -#define GPIO_LOCK_LK11 BIT(11) /*!< pin 11 lock bit */ -#define GPIO_LOCK_LK12 BIT(12) /*!< pin 12 lock bit */ -#define GPIO_LOCK_LK13 BIT(13) /*!< pin 13 lock bit */ -#define GPIO_LOCK_LK14 BIT(14) /*!< pin 14 lock bit */ -#define GPIO_LOCK_LK15 BIT(15) /*!< pin 15 lock bit */ -#define GPIO_LOCK_LKK BIT(16) /*!< pin sequence lock key */ - -/* AFIO_EC */ -#define AFIO_EC_PIN BITS(0,3) /*!< event output pin selection */ -#define AFIO_EC_PORT BITS(4,6) /*!< event output port selection */ -#define AFIO_EC_EOE BIT(7) /*!< event output enable */ - -/* AFIO_PCF0 */ -#ifdef GD32F10X_CL -/* memory map and bit definitions for GD32F10X_CL devices */ -#define AFIO_PCF0_SPI0_REMAP BIT(0) /*!< SPI0 remapping */ -#define AFIO_PCF0_I2C0_REMAP BIT(1) /*!< I2C0 remapping */ -#define AFIO_PCF0_USART0_REMAP BIT(2) /*!< USART0 remapping */ -#define AFIO_PCF0_USART1_REMAP BIT(3) /*!< USART1 remapping */ -#define AFIO_PCF0_USART2_REMAP BITS(4,5) /*!< USART2 remapping */ -#define AFIO_PCF0_TIMER0_REMAP BITS(6,7) /*!< TIMER0 remapping */ -#define AFIO_PCF0_TIMER1_REMAP BITS(8,9) /*!< TIMER1 remapping */ -#define AFIO_PCF0_TIMER2_REMAP BITS(10,11) /*!< TIMER2 remapping */ -#define AFIO_PCF0_TIMER3_REMAP BIT(12) /*!< TIMER3 remapping */ -#define AFIO_PCF0_CAN0_REMAP BITS(13,14) /*!< CAN0 remapping */ -#define AFIO_PCF0_PD01_REMAP BIT(15) /*!< port D0/port D1 mapping on OSC_IN/OSC_OUT */ -#define AFIO_PCF0_TIMER4CH3_IREMAP BIT(16) /*!< TIMER3 channel3 internal remapping */ -#define AFIO_PCF0_ENET_REMAP BIT(21) /*!< ethernet MAC I/O remapping */ -#define AFIO_PCF0_CAN1_REMAP BIT(22) /*!< CAN1 remapping */ -#define AFIO_PCF0_ENET_PHY_SEL BIT(23) /*!< ethernet MII or RMII PHY selection */ -#define AFIO_PCF0_SWJ_CFG BITS(24,26) /*!< serial wire JTAG configuration */ -#define AFIO_PCF0_SPI2_REMAP BIT(28) /*!< SPI2/I2S2 remapping */ -#define AFIO_PCF0_TIMER1ITI1_REMAP BIT(29) /*!< TIMER1 internal trigger 1 remapping */ -#define AFIO_PCF0_PTP_PPS_REMAP BIT(30) /*!< ethernet PTP PPS remapping */ - -#else -/* memory map and bit definitions for GD32F10X_MD, GD32F10X_HD devices and GD32F10X_XD devices */ -#define AFIO_PCF0_SPI0_REMAP BIT(0) /*!< SPI0 remapping */ -#define AFIO_PCF0_I2C0_REMAP BIT(1) /*!< I2C0 remapping */ -#define AFIO_PCF0_USART0_REMAP BIT(2) /*!< USART0 remapping */ -#define AFIO_PCF0_USART1_REMAP BIT(3) /*!< USART1 remapping */ -#define AFIO_PCF0_USART2_REMAP BITS(4,5) /*!< USART2 remapping */ -#define AFIO_PCF0_TIMER0_REMAP BITS(6,7) /*!< TIMER0 remapping */ -#define AFIO_PCF0_TIMER1_REMAP BITS(8,9) /*!< TIMER1 remapping */ -#define AFIO_PCF0_TIMER2_REMAP BITS(10,11) /*!< TIMER2 remapping */ -#define AFIO_PCF0_TIMER3_REMAP BIT(12) /*!< TIMER3 remapping */ -#define AFIO_PCF0_CAN_REMAP BITS(13,14) /*!< CAN remapping */ -#define AFIO_PCF0_PD01_REMAP BIT(15) /*!< port D0/port D1 mapping on OSC_IN/OSC_OUT */ -#define AFIO_PCF0_TIMER4CH3_REMAP BIT(16) /*!< TIMER4 channel3 internal remapping */ -#define AFIO_PCF0_ADC0_ETRGINS_REMAP BIT(17) /*!< ADC 0 external trigger inserted conversion remapping */ -#define AFIO_PCF0_ADC0_ETRGREG_REMAP BIT(18) /*!< ADC 0 external trigger regular conversion remapping */ -#define AFIO_PCF0_ADC1_ETRGINS_REMAP BIT(19) /*!< ADC 1 external trigger inserted conversion remapping */ -#define AFIO_PCF0_ADC1_ETRGREG_REMAP BIT(20) /*!< ADC 1 external trigger regular conversion remapping */ -#define AFIO_PCF0_SWJ_CFG BITS(24,26) /*!< serial wire JTAG configuration */ -#endif /* GD32F10X_CL */ - -/* AFIO_EXTISS0 */ -#define AFIO_EXTI0_SS BITS(0,3) /*!< EXTI 0 sources selection */ -#define AFIO_EXTI1_SS BITS(4,7) /*!< EXTI 1 sources selection */ -#define AFIO_EXTI2_SS BITS(8,11) /*!< EXTI 2 sources selection */ -#define AFIO_EXTI3_SS BITS(12,15) /*!< EXTI 3 sources selection */ - -/* AFIO_EXTISS1 */ -#define AFIO_EXTI4_SS BITS(0,3) /*!< EXTI 4 sources selection */ -#define AFIO_EXTI5_SS BITS(4,7) /*!< EXTI 5 sources selection */ -#define AFIO_EXTI6_SS BITS(8,11) /*!< EXTI 6 sources selection */ -#define AFIO_EXTI7_SS BITS(12,15) /*!< EXTI 7 sources selection */ - -/* AFIO_EXTISS2 */ -#define AFIO_EXTI8_SS BITS(0,3) /*!< EXTI 8 sources selection */ -#define AFIO_EXTI9_SS BITS(4,7) /*!< EXTI 9 sources selection */ -#define AFIO_EXTI10_SS BITS(8,11) /*!< EXTI 10 sources selection */ -#define AFIO_EXTI11_SS BITS(12,15) /*!< EXTI 11 sources selection */ - -/* AFIO_EXTISS3 */ -#define AFIO_EXTI12_SS BITS(0,3) /*!< EXTI 12 sources selection */ -#define AFIO_EXTI13_SS BITS(4,7) /*!< EXTI 13 sources selection */ -#define AFIO_EXTI14_SS BITS(8,11) /*!< EXTI 14 sources selection */ -#define AFIO_EXTI15_SS BITS(12,15) /*!< EXTI 15 sources selection */ - -/* AFIO_PCF1 */ -#define AFIO_PCF1_TIMER8_REMAP BIT(5) /*!< TIMER8 remapping */ -#define AFIO_PCF1_TIMER9_REMAP BIT(6) /*!< TIMER9 remapping */ -#define AFIO_PCF1_TIMER10_REMAP BIT(7) /*!< TIMER10 remapping */ -#define AFIO_PCF1_TIMER12_REMAP BIT(8) /*!< TIMER12 remapping */ -#define AFIO_PCF1_TIMER13_REMAP BIT(9) /*!< TIMER13 remapping */ -#define AFIO_PCF1_EXMC_NADV BIT(10) /*!< EXMC_NADV connect/disconnect */ - -/* constants definitions */ -typedef FlagStatus bit_status; - -/* GPIO mode values set */ -#define GPIO_MODE_SET(n, mode) ((uint32_t)((uint32_t)(mode) << (4U * (n)))) -#define GPIO_MODE_MASK(n) (0xFU << (4U * (n))) - -/* GPIO mode definitions */ -#define GPIO_MODE_AIN ((uint8_t)0x00U) /*!< analog input mode */ -#define GPIO_MODE_IN_FLOATING ((uint8_t)0x04U) /*!< floating input mode */ -#define GPIO_MODE_IPD ((uint8_t)0x28U) /*!< pull-down input mode */ -#define GPIO_MODE_IPU ((uint8_t)0x48U) /*!< pull-up input mode */ -#define GPIO_MODE_OUT_OD ((uint8_t)0x14U) /*!< GPIO output with open-drain */ -#define GPIO_MODE_OUT_PP ((uint8_t)0x10U) /*!< GPIO output with push-pull */ -#define GPIO_MODE_AF_OD ((uint8_t)0x1CU) /*!< AFIO output with open-drain */ -#define GPIO_MODE_AF_PP ((uint8_t)0x18U) /*!< AFIO output with push-pull */ - -/* GPIO output max speed value */ -#define GPIO_OSPEED_10MHZ ((uint8_t)0x01U) /*!< output max speed 10MHz */ -#define GPIO_OSPEED_2MHZ ((uint8_t)0x02U) /*!< output max speed 2MHz */ -#define GPIO_OSPEED_50MHZ ((uint8_t)0x03U) /*!< output max speed 50MHz */ - -/* GPIO event output port definitions */ -#define GPIO_EVENT_PORT_GPIOA ((uint8_t)0x00U) /*!< event output port A */ -#define GPIO_EVENT_PORT_GPIOB ((uint8_t)0x01U) /*!< event output port B */ -#define GPIO_EVENT_PORT_GPIOC ((uint8_t)0x02U) /*!< event output port C */ -#define GPIO_EVENT_PORT_GPIOD ((uint8_t)0x03U) /*!< event output port D */ -#define GPIO_EVENT_PORT_GPIOE ((uint8_t)0x04U) /*!< event output port E */ - -/* GPIO output port source definitions */ -#define GPIO_PORT_SOURCE_GPIOA ((uint8_t)0x00U) /*!< output port source A */ -#define GPIO_PORT_SOURCE_GPIOB ((uint8_t)0x01U) /*!< output port source B */ -#define GPIO_PORT_SOURCE_GPIOC ((uint8_t)0x02U) /*!< output port source C */ -#define GPIO_PORT_SOURCE_GPIOD ((uint8_t)0x03U) /*!< output port source D */ -#define GPIO_PORT_SOURCE_GPIOE ((uint8_t)0x04U) /*!< output port source E */ -#define GPIO_PORT_SOURCE_GPIOF ((uint8_t)0x05U) /*!< output port source F */ -#define GPIO_PORT_SOURCE_GPIOG ((uint8_t)0x06U) /*!< output port source G */ - -/* GPIO event output pin definitions */ -#define GPIO_EVENT_PIN_0 ((uint8_t)0x00U) /*!< GPIO event pin 0 */ -#define GPIO_EVENT_PIN_1 ((uint8_t)0x01U) /*!< GPIO event pin 1 */ -#define GPIO_EVENT_PIN_2 ((uint8_t)0x02U) /*!< GPIO event pin 2 */ -#define GPIO_EVENT_PIN_3 ((uint8_t)0x03U) /*!< GPIO event pin 3 */ -#define GPIO_EVENT_PIN_4 ((uint8_t)0x04U) /*!< GPIO event pin 4 */ -#define GPIO_EVENT_PIN_5 ((uint8_t)0x05U) /*!< GPIO event pin 5 */ -#define GPIO_EVENT_PIN_6 ((uint8_t)0x06U) /*!< GPIO event pin 6 */ -#define GPIO_EVENT_PIN_7 ((uint8_t)0x07U) /*!< GPIO event pin 7 */ -#define GPIO_EVENT_PIN_8 ((uint8_t)0x08U) /*!< GPIO event pin 8 */ -#define GPIO_EVENT_PIN_9 ((uint8_t)0x09U) /*!< GPIO event pin 9 */ -#define GPIO_EVENT_PIN_10 ((uint8_t)0x0AU) /*!< GPIO event pin 10 */ -#define GPIO_EVENT_PIN_11 ((uint8_t)0x0BU) /*!< GPIO event pin 11 */ -#define GPIO_EVENT_PIN_12 ((uint8_t)0x0CU) /*!< GPIO event pin 12 */ -#define GPIO_EVENT_PIN_13 ((uint8_t)0x0DU) /*!< GPIO event pin 13 */ -#define GPIO_EVENT_PIN_14 ((uint8_t)0x0EU) /*!< GPIO event pin 14 */ -#define GPIO_EVENT_PIN_15 ((uint8_t)0x0FU) /*!< GPIO event pin 15 */ - -/* GPIO output pin source definitions */ -#define GPIO_PIN_SOURCE_0 ((uint8_t)0x00U) /*!< GPIO pin source 0 */ -#define GPIO_PIN_SOURCE_1 ((uint8_t)0x01U) /*!< GPIO pin source 1 */ -#define GPIO_PIN_SOURCE_2 ((uint8_t)0x02U) /*!< GPIO pin source 2 */ -#define GPIO_PIN_SOURCE_3 ((uint8_t)0x03U) /*!< GPIO pin source 3 */ -#define GPIO_PIN_SOURCE_4 ((uint8_t)0x04U) /*!< GPIO pin source 4 */ -#define GPIO_PIN_SOURCE_5 ((uint8_t)0x05U) /*!< GPIO pin source 5 */ -#define GPIO_PIN_SOURCE_6 ((uint8_t)0x06U) /*!< GPIO pin source 6 */ -#define GPIO_PIN_SOURCE_7 ((uint8_t)0x07U) /*!< GPIO pin source 7 */ -#define GPIO_PIN_SOURCE_8 ((uint8_t)0x08U) /*!< GPIO pin source 8 */ -#define GPIO_PIN_SOURCE_9 ((uint8_t)0x09U) /*!< GPIO pin source 9 */ -#define GPIO_PIN_SOURCE_10 ((uint8_t)0x0AU) /*!< GPIO pin source 10 */ -#define GPIO_PIN_SOURCE_11 ((uint8_t)0x0BU) /*!< GPIO pin source 11 */ -#define GPIO_PIN_SOURCE_12 ((uint8_t)0x0CU) /*!< GPIO pin source 12 */ -#define GPIO_PIN_SOURCE_13 ((uint8_t)0x0DU) /*!< GPIO pin source 13 */ -#define GPIO_PIN_SOURCE_14 ((uint8_t)0x0EU) /*!< GPIO pin source 14 */ -#define GPIO_PIN_SOURCE_15 ((uint8_t)0x0FU) /*!< GPIO pin source 15 */ - -/* GPIO pin definitions */ -#define GPIO_PIN_0 BIT(0) /*!< GPIO pin 0 */ -#define GPIO_PIN_1 BIT(1) /*!< GPIO pin 1 */ -#define GPIO_PIN_2 BIT(2) /*!< GPIO pin 2 */ -#define GPIO_PIN_3 BIT(3) /*!< GPIO pin 3 */ -#define GPIO_PIN_4 BIT(4) /*!< GPIO pin 4 */ -#define GPIO_PIN_5 BIT(5) /*!< GPIO pin 5 */ -#define GPIO_PIN_6 BIT(6) /*!< GPIO pin 6 */ -#define GPIO_PIN_7 BIT(7) /*!< GPIO pin 7 */ -#define GPIO_PIN_8 BIT(8) /*!< GPIO pin 8 */ -#define GPIO_PIN_9 BIT(9) /*!< GPIO pin 9 */ -#define GPIO_PIN_10 BIT(10) /*!< GPIO pin 10 */ -#define GPIO_PIN_11 BIT(11) /*!< GPIO pin 11 */ -#define GPIO_PIN_12 BIT(12) /*!< GPIO pin 12 */ -#define GPIO_PIN_13 BIT(13) /*!< GPIO pin 13 */ -#define GPIO_PIN_14 BIT(14) /*!< GPIO pin 14 */ -#define GPIO_PIN_15 BIT(15) /*!< GPIO pin 15 */ -#define GPIO_PIN_ALL BITS(0,15) /*!< GPIO pin all */ - -/* GPIO remap definitions */ -#define GPIO_SPI0_REMAP ((uint32_t)0x00000001U) /*!< SPI0 remapping */ -#define GPIO_I2C0_REMAP ((uint32_t)0x00000002U) /*!< I2C0 remapping */ -#define GPIO_USART0_REMAP ((uint32_t)0x00000004U) /*!< USART0 remapping */ -#define GPIO_USART1_REMAP ((uint32_t)0x00000008U) /*!< USART1 remapping */ -#define GPIO_USART2_PARTIAL_REMAP ((uint32_t)0x00140010U) /*!< USART2 partial remapping */ -#define GPIO_USART2_FULL_REMAP ((uint32_t)0x00140030U) /*!< USART2 full remapping */ -#define GPIO_TIMER0_PARTIAL_REMAP ((uint32_t)0x00160040U) /*!< TIMER0 partial remapping */ -#define GPIO_TIMER0_FULL_REMAP ((uint32_t)0x001600C0U) /*!< TIMER0 full remapping */ -#define GPIO_TIMER1_PARTIAL_REMAP0 ((uint32_t)0x00180100U) /*!< TIMER1 partial remapping */ -#define GPIO_TIMER1_PARTIAL_REMAP1 ((uint32_t)0x00180200U) /*!< TIMER1 partial remapping */ -#define GPIO_TIMER1_FULL_REMAP ((uint32_t)0x00180300U) /*!< TIMER1 full remapping */ -#define GPIO_TIMER2_PARTIAL_REMAP ((uint32_t)0x001A0800U) /*!< TIMER2 partial remapping */ -#define GPIO_TIMER2_FULL_REMAP ((uint32_t)0x001A0C00U) /*!< TIMER2 full remapping */ -#define GPIO_TIMER3_REMAP ((uint32_t)0x00001000U) /*!< TIMER3 remapping */ -#define GPIO_PD01_REMAP ((uint32_t)0x00008000U) /*!< PD01 remapping */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define GPIO_CAN_PARTIAL_REMAP ((uint32_t)0x001D4000U) /*!< CAN partial remapping(only for GD32F10X_MD devices, GD32F10X_HD devices and GD32F10X_XD devices) */ -#define GPIO_CAN_FULL_REMAP ((uint32_t)0x001D6000U) /*!< CAN full remapping(only for GD32F10X_MD devices, GD32F10X_HD devices and GD32F10X_XD devices) */ -#endif /* GD32F10X_MD||GD32F10X_HD||GD32F10X_XD */ -#if (defined(GD32F10X_CL) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define GPIO_SPI2_REMAP ((uint32_t)0x00201100U) /*!< SPI2 remapping(only for GD32F10X_CL devices) */ -#endif /* GD32F10X_CL||GD32F10X_HD */ -#if (defined(GD32F10X_CL) || defined(GD32F10X_HD)) -#define GPIO_TIMER4CH3_IREMAP ((uint32_t)0x00200001U) /*!< TIMER4 channel3 internal remapping(only for GD32F10X_CL devices and GD32F10X_HD devices) */ -#endif /* GD32F10X_CL||GD32F10X_HD */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define GPIO_ADC0_ETRGINS_REMAP ((uint32_t)0x00200002U) /*!< ADC0 external trigger inserted conversion remapping(only for GD32F10X_MD devices, GD32F10X_HD devices and GD32F10X_XD devices) */ -#define GPIO_ADC0_ETRGREG_REMAP ((uint32_t)0x00200004U) /*!< ADC0 external trigger regular conversion remapping(only for GD32F10X_MD devices, GD32F10X_HD devices and GD32F10X_XD devices) */ -#define GPIO_ADC1_ETRGINS_REMAP ((uint32_t)0x00200008U) /*!< ADC1 external trigger inserted conversion remapping(only for GD32F10X_MD devices, GD32F10X_HD devices and GD32F10X_XD devices) */ -#define GPIO_ADC1_ETRGREG_REMAP ((uint32_t)0x00200010U) /*!< ADC1 external trigger regular conversion remapping(only for GD32F10X_MD devices, GD32F10X_HD devices and GD32F10X_XD devices) */ -#endif /* GD32F10X_MD||GD32F10X_HD||GD32F10X_XD */ -#define GPIO_SWJ_NONJTRST_REMAP ((uint32_t)0x00300100U) /*!< full SWJ(JTAG-DP + SW-DP),but without NJTRST */ -#define GPIO_SWJ_SWDPENABLE_REMAP ((uint32_t)0x00300200U) /*!< JTAG-DP disabled and SW-DP enabled */ -#define GPIO_SWJ_DISABLE_REMAP ((uint32_t)0x00300400U) /*!< JTAG-DP disabled and SW-DP disabled */ -#ifdef GD32F10X_CL -#define GPIO_CAN0_PARTIAL_REMAP ((uint32_t)0x001D4000U) /*!< CAN0 partial remapping(only for GD32F10X_CL devices) */ -#define GPIO_CAN0_FULL_REMAP ((uint32_t)0x001D6000U) /*!< CAN0 full remapping(only for GD32F10X_CL devices) */ -#define GPIO_ENET_REMAP ((uint32_t)0x00200020U) /*!< ENET remapping(only for GD32F10X_CL devices) */ -#define GPIO_CAN1_REMAP ((uint32_t)0x00200040U) /*!< CAN1 remapping(only for GD32F10X_CL devices) */ -#define GPIO_TIMER1ITI1_REMAP ((uint32_t)0x00202000U) /*!< TIMER1 internal trigger 1 remapping(only for GD32F10X_CL devices) */ -#define GPIO_PTP_PPS_REMAP ((uint32_t)0x00204000U) /*!< ethernet PTP PPS remapping(only for GD32F10X_CL devices) */ -#endif /* GD32F10X_CL */ -#ifdef GD32F10X_XD -#define GPIO_TIMER8_REMAP ((uint32_t)0x80000020U) /*!< TIMER8 remapping */ -#define GPIO_TIMER9_REMAP ((uint32_t)0x80000040U) /*!< TIMER9 remapping */ -#define GPIO_TIMER10_REMAP ((uint32_t)0x80000080U) /*!< TIMER10 remapping */ -#define GPIO_TIMER12_REMAP ((uint32_t)0x80000100U) /*!< TIMER12 remapping */ -#define GPIO_TIMER13_REMAP ((uint32_t)0x80000200U) /*!< TIMER13 remapping */ -#define GPIO_EXMC_NADV_REMAP ((uint32_t)0x80000400U) /*!< EXMC_NADV connect/disconnect */ -#endif /* GD32F10X_XD */ - -#ifdef GD32F10X_CL -/* ethernet MII or RMII PHY selection */ -#define GPIO_ENET_PHY_MII ((uint32_t)0x00000000U) /*!< configure ethernet MAC for connection with an MII PHY */ -#define GPIO_ENET_PHY_RMII AFIO_PCF0_ENET_PHY_SEL /*!< configure ethernet MAC for connection with an RMII PHY */ -#endif /* GD32F10X_CL */ - -/* function declarations */ -/* reset GPIO port */ -void gpio_deinit(uint32_t gpio_periph); -/* reset alternate function I/O(AFIO) */ -void gpio_afio_deinit(void); -/* GPIO parameter initialization */ -void gpio_init(uint32_t gpio_periph,uint32_t mode,uint32_t speed,uint32_t pin); - -/* set GPIO pin bit */ -void gpio_bit_set(uint32_t gpio_periph, uint32_t pin); -/* reset GPIO pin bit */ -void gpio_bit_reset(uint32_t gpio_periph, uint32_t pin); -/* write data to the specified GPIO pin */ -void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value); -/* write data to the specified GPIO port */ -void gpio_port_write(uint32_t gpio_periph, uint16_t data); - -/* get GPIO pin input status */ -FlagStatus gpio_input_bit_get(uint32_t gpio_periph, uint32_t pin); -/* get GPIO port input status */ -uint16_t gpio_input_port_get(uint32_t gpio_periph); -/* get GPIO pin output status */ -FlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin); -/* get GPIO port output status */ -uint16_t gpio_output_port_get(uint32_t gpio_periph); - -/* configure GPIO pin remap */ -void gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue); - -/* select GPIO pin exti sources */ -void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin); -/* configure GPIO pin event output */ -void gpio_event_output_config(uint8_t output_port, uint8_t output_pin); -/* enable GPIO pin event output */ -void gpio_event_output_enable(void); -/* disable GPIO pin event output */ -void gpio_event_output_disable(void); - -/* lock GPIO pin bit */ -void gpio_pin_lock(uint32_t gpio_periph, uint32_t pin); - -#ifdef GD32F10X_CL -/* select ethernet MII or RMII PHY */ -void gpio_ethernet_phy_select(uint32_t gpio_enetsel); -#endif /* GD32F10X_CL */ - - -#endif /* GD32F10x_GPIO_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_i2c.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_i2c.h deleted file mode 100644 index 52e54f5..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_i2c.h +++ /dev/null @@ -1,347 +0,0 @@ -/*! - \file gd32f10x_i2c.h - \brief definitions for the I2C - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2019-04-16, V2.1.1, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_I2C_H -#define GD32F10X_I2C_H - -#include "gd32f10x.h" - -/* I2Cx(x=0,1) definitions */ -#define I2C0 I2C_BASE /*!< I2C0 base address */ -#define I2C1 (I2C_BASE + 0x00000400U) /*!< I2C1 base address */ - -/* registers definitions */ -#define I2C_CTL0(i2cx) REG32((i2cx) + 0x00U) /*!< I2C control register 0 */ -#define I2C_CTL1(i2cx) REG32((i2cx) + 0x04U) /*!< I2C control register 1 */ -#define I2C_SADDR0(i2cx) REG32((i2cx) + 0x08U) /*!< I2C slave address register 0*/ -#define I2C_SADDR1(i2cx) REG32((i2cx) + 0x0CU) /*!< I2C slave address register */ -#define I2C_DATA(i2cx) REG32((i2cx) + 0x10U) /*!< I2C transfer buffer register */ -#define I2C_STAT0(i2cx) REG32((i2cx) + 0x14U) /*!< I2C transfer status register 0 */ -#define I2C_STAT1(i2cx) REG32((i2cx) + 0x18U) /*!< I2C transfer status register */ -#define I2C_CKCFG(i2cx) REG32((i2cx) + 0x1CU) /*!< I2C clock configure register */ -#define I2C_RT(i2cx) REG32((i2cx) + 0x20U) /*!< I2C rise time register */ - -/* bits definitions */ -/* I2Cx_CTL0 */ -#define I2C_CTL0_I2CEN BIT(0) /*!< peripheral enable */ -#define I2C_CTL0_SMBEN BIT(1) /*!< SMBus mode */ -#define I2C_CTL0_SMBSEL BIT(3) /*!< SMBus type */ -#define I2C_CTL0_ARPEN BIT(4) /*!< ARP enable */ -#define I2C_CTL0_PECEN BIT(5) /*!< PEC enable */ -#define I2C_CTL0_GCEN BIT(6) /*!< general call enable */ -#define I2C_CTL0_SS BIT(7) /*!< clock stretching disable (slave mode) */ -#define I2C_CTL0_START BIT(8) /*!< start generation */ -#define I2C_CTL0_STOP BIT(9) /*!< stop generation */ -#define I2C_CTL0_ACKEN BIT(10) /*!< acknowledge enable */ -#define I2C_CTL0_POAP BIT(11) /*!< acknowledge/PEC position (for data reception) */ -#define I2C_CTL0_PECTRANS BIT(12) /*!< packet error checking */ -#define I2C_CTL0_SALT BIT(13) /*!< SMBus alert */ -#define I2C_CTL0_SRESET BIT(15) /*!< software reset */ - -/* I2Cx_CTL1 */ -#define I2C_CTL1_I2CCLK BITS(0,5) /*!< I2CCLK[5:0] bits (peripheral clock frequency) */ -#define I2C_CTL1_ERRIE BIT(8) /*!< error interrupt enable */ -#define I2C_CTL1_EVIE BIT(9) /*!< event interrupt enable */ -#define I2C_CTL1_BUFIE BIT(10) /*!< buffer interrupt enable */ -#define I2C_CTL1_DMAON BIT(11) /*!< DMA requests enable */ -#define I2C_CTL1_DMALST BIT(12) /*!< DMA last transfer */ - -/* I2Cx_SADDR0 */ -#define I2C_SADDR0_ADDRESS0 BIT(0) /*!< bit 0 of a 10-bit address */ -#define I2C_SADDR0_ADDRESS BITS(1,7) /*!< 7-bit address or bits 7:1 of a 10-bit address */ -#define I2C_SADDR0_ADDRESS_H BITS(8,9) /*!< highest two bits of a 10-bit address */ -#define I2C_SADDR0_ADDFORMAT BIT(15) /*!< address mode for the I2C slave */ - -/* I2Cx_SADDR1 */ -#define I2C_SADDR1_DUADEN BIT(0) /*!< aual-address mode switch */ -#define I2C_SADDR1_ADDRESS2 BITS(1,7) /*!< second I2C address for the slave in dual-address mode */ - -/* I2Cx_DATA */ -#define I2C_DATA_TRB BITS(0,7) /*!< 8-bit data register */ - -/* I2Cx_STAT0 */ -#define I2C_STAT0_SBSEND BIT(0) /*!< start bit (master mode) */ -#define I2C_STAT0_ADDSEND BIT(1) /*!< address sent (master mode)/matched (slave mode) */ -#define I2C_STAT0_BTC BIT(2) /*!< byte transfer finished */ -#define I2C_STAT0_ADD10SEND BIT(3) /*!< 10-bit header sent (master mode) */ -#define I2C_STAT0_STPDET BIT(4) /*!< stop detection (slave mode) */ -#define I2C_STAT0_RBNE BIT(6) /*!< data register not empty (receivers) */ -#define I2C_STAT0_TBE BIT(7) /*!< data register empty (transmitters) */ -#define I2C_STAT0_BERR BIT(8) /*!< bus error */ -#define I2C_STAT0_LOSTARB BIT(9) /*!< arbitration lost (master mode) */ -#define I2C_STAT0_AERR BIT(10) /*!< acknowledge failure */ -#define I2C_STAT0_OUERR BIT(11) /*!< overrun/underrun */ -#define I2C_STAT0_PECERR BIT(12) /*!< PEC error in reception */ -#define I2C_STAT0_SMBTO BIT(14) /*!< timeout signal in SMBus mode */ -#define I2C_STAT0_SMBALT BIT(15) /*!< SMBus alert status */ - -/* I2Cx_STAT1 */ -#define I2C_STAT1_MASTER BIT(0) /*!< master/slave */ -#define I2C_STAT1_I2CBSY BIT(1) /*!< bus busy */ -#define I2C_STAT1_TR BIT(2) /*!< transmitter/receiver */ -#define I2C_STAT1_RXGC BIT(4) /*!< general call address (slave mode) */ -#define I2C_STAT1_DEFSMB BIT(5) /*!< SMBus device default address (slave mode) */ -#define I2C_STAT1_HSTSMB BIT(6) /*!< SMBus host header (slave mode) */ -#define I2C_STAT1_DUMODF BIT(7) /*!< dual flag (slave mode) */ -#define I2C_STAT1_PECV BITS(8,15) /*!< packet error checking value */ - -/* I2Cx_CKCFG */ -#define I2C_CKCFG_CLKC BITS(0,11) /*!< clock control register in fast/standard mode (master mode) */ -#define I2C_CKCFG_DTCY BIT(14) /*!< fast mode duty cycle */ -#define I2C_CKCFG_FAST BIT(15) /*!< I2C speed selection in master mode */ - -/* I2Cx_RT */ -#define I2C_RT_RISETIME BITS(0,5) /*!< maximum rise time in fast/standard mode (Master mode) */ - -/* constants definitions */ -/* define the I2C bit position and its register index offset */ -#define I2C_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define I2C_REG_VAL(i2cx, offset) (REG32((i2cx) + (((uint32_t)(offset) & 0xFFFFU) >> 6))) -#define I2C_BIT_POS(val) ((uint32_t)(val) & 0x1FU) -#define I2C_REGIDX_BIT2(regidx, bitpos, regidx2, bitpos2) (((uint32_t)(regidx2) << 22) | (uint32_t)((bitpos2) << 16)\ - | (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))) -#define I2C_REG_VAL2(i2cx, offset) (REG32((i2cx) + ((uint32_t)(offset) >> 22))) -#define I2C_BIT_POS2(val) (((uint32_t)(val) & 0x1F0000U) >> 16) - -/* register offset */ -#define I2C_CTL1_REG_OFFSET 0x04U /*!< CTL1 register offset */ -#define I2C_STAT0_REG_OFFSET 0x14U /*!< STAT0 register offset */ -#define I2C_STAT1_REG_OFFSET 0x18U /*!< STAT1 register offset */ - -/* I2C flags */ -typedef enum -{ - /* flags in STAT0 register */ - I2C_FLAG_SBSEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 0U), /*!< start condition sent out in master mode */ - I2C_FLAG_ADDSEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 1U), /*!< address is sent in master mode or received and matches in slave mode */ - I2C_FLAG_BTC = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 2U), /*!< byte transmission finishes */ - I2C_FLAG_ADD10SEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 3U), /*!< header of 10-bit address is sent in master mode */ - I2C_FLAG_STPDET = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 4U), /*!< stop condition detected in slave mode */ - I2C_FLAG_RBNE = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 6U), /*!< I2C_DATA is not Empty during receiving */ - I2C_FLAG_TBE = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 7U), /*!< I2C_DATA is empty during transmitting */ - I2C_FLAG_BERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 8U), /*!< a bus error occurs indication a unexpected start or stop condition on I2C bus */ - I2C_FLAG_LOSTARB = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 9U), /*!< arbitration lost in master mode */ - I2C_FLAG_AERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 10U), /*!< acknowledge error */ - I2C_FLAG_OUERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 11U), /*!< over-run or under-run situation occurs in slave mode */ - I2C_FLAG_PECERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 12U), /*!< PEC error when receiving data */ - I2C_FLAG_SMBTO = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 14U), /*!< timeout signal in SMBus mode */ - I2C_FLAG_SMBALT = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 15U), /*!< SMBus alert status */ - /* flags in STAT1 register */ - I2C_FLAG_MASTER = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 0U), /*!< a flag indicating whether I2C block is in master or slave mode */ - I2C_FLAG_I2CBSY = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 1U), /*!< busy flag */ - I2C_FLAG_TRS = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 2U), /*!< whether the I2C is a transmitter or a receiver */ - I2C_FLAG_RXGC = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 4U), /*!< general call address (00h) received */ - I2C_FLAG_DEFSMB = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 5U), /*!< default address of SMBus device */ - I2C_FLAG_HSTSMB = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 6U), /*!< SMBus host header detected in slave mode */ - I2C_FLAG_DUMOD = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 7U), /*!< dual flag in slave mode indicating which address is matched in dual-address mode */ -}i2c_flag_enum; - -/* I2C interrupt flags */ -typedef enum -{ - /* interrupt flags in CTL1 register */ - I2C_INT_FLAG_SBSEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 0U), /*!< start condition sent out in master mode interrupt flag */ - I2C_INT_FLAG_ADDSEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 1U), /*!< address is sent in master mode or received and matches in slave mode interrupt flag */ - I2C_INT_FLAG_BTC = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 2U), /*!< byte transmission finishes */ - I2C_INT_FLAG_ADD10SEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 3U), /*!< header of 10-bit address is sent in master mode interrupt flag */ - I2C_INT_FLAG_STPDET = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 4U), /*!< stop condition detected in slave mode interrupt flag */ - I2C_INT_FLAG_RBNE = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 6U), /*!< I2C_DATA is not Empty during receiving interrupt flag */ - I2C_INT_FLAG_TBE = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 7U), /*!< I2C_DATA is empty during transmitting interrupt flag */ - I2C_INT_FLAG_BERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 8U), /*!< a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag */ - I2C_INT_FLAG_LOSTARB = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 9U), /*!< arbitration lost in master mode interrupt flag */ - I2C_INT_FLAG_AERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 10U), /*!< acknowledge error interrupt flag */ - I2C_INT_FLAG_OUERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 11U), /*!< over-run or under-run situation occurs in slave mode interrupt flag */ - I2C_INT_FLAG_PECERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 12U), /*!< PEC error when receiving data interrupt flag */ - I2C_INT_FLAG_SMBTO = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 14U), /*!< timeout signal in SMBus mode interrupt flag */ - I2C_INT_FLAG_SMBALT = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 15U), /*!< SMBus Alert status interrupt flag */ -}i2c_interrupt_flag_enum; - -/* I2C interrupt enable or disable */ -typedef enum -{ - /* interrupt in CTL1 register */ - I2C_INT_ERR = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 8U), /*!< error interrupt enable */ - I2C_INT_EV = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 9U), /*!< event interrupt enable */ - I2C_INT_BUF = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 10U), /*!< buffer interrupt enable */ -}i2c_interrupt_enum; - -/* SMBus/I2C mode switch and SMBus type selection */ -#define I2C_I2CMODE_ENABLE ((uint32_t)0x00000000U) /*!< I2C mode */ -#define I2C_SMBUSMODE_ENABLE I2C_CTL0_SMBEN /*!< SMBus mode */ - -/* SMBus/I2C mode switch and SMBus type selection */ -#define I2C_SMBUS_DEVICE ((uint32_t)0x00000000U) /*!< SMBus mode device type */ -#define I2C_SMBUS_HOST I2C_CTL0_SMBSEL /*!< SMBus mode host type */ - -/* I2C transfer direction */ -#define I2C_RECEIVER ((uint32_t)0x00000001U) /*!< receiver */ -#define I2C_TRANSMITTER ((uint32_t)0xFFFFFFFEU) /*!< transmitter */ - -/* whether or not to send an ACK */ -#define I2C_ACK_DISABLE ((uint32_t)0x00000000U) /*!< ACK will be not sent */ -#define I2C_ACK_ENABLE ((uint32_t)0x00000001U) /*!< ACK will be sent */ - -/* I2C POAP position*/ -#define I2C_ACKPOS_NEXT ((uint32_t)0x00000000U) /*!< ACKEN bit decides whether or not to send ACK for the next byte */ -#define I2C_ACKPOS_CURRENT ((uint32_t)0x00000001U) /*!< ACKEN bit decides whether or not to send ACK or not for the current byte */ - -/* I2C dual-address mode switch */ -#define I2C_DUADEN_DISABLE ((uint32_t)0x00000000U) /*!< dual-address mode disabled */ -#define I2C_DUADEN_ENABLE ((uint32_t)0x00000001U) /*!< dual-address mode enabled */ - -/* whether or not to stretch SCL low */ -#define I2C_SCLSTRETCH_ENABLE ((uint32_t)0x00000000U) /*!< SCL stretching is enabled */ -#define I2C_SCLSTRETCH_DISABLE I2C_CTL0_SS /*!< SCL stretching is disabled */ - -/* whether or not to response to a general call */ -#define I2C_GCEN_ENABLE I2C_CTL0_GCEN /*!< slave will response to a general call */ -#define I2C_GCEN_DISABLE ((uint32_t)0x00000000U) /*!< slave will not response to a general call */ - -/* software reset I2C */ -#define I2C_SRESET_SET I2C_CTL0_SRESET /*!< I2C is under reset */ -#define I2C_SRESET_RESET ((uint32_t)0x00000000U) /*!< I2C is not under reset */ - -/* I2C DMA mode configure */ -/* DMA mode switch */ -#define I2C_DMA_ON I2C_CTL1_DMAON /*!< DMA mode enabled */ -#define I2C_DMA_OFF ((uint32_t)0x00000000U) /*!< DMA mode disabled */ - -/* flag indicating DMA last transfer */ -#define I2C_DMALST_ON I2C_CTL1_DMALST /*!< next DMA EOT is the last transfer */ -#define I2C_DMALST_OFF ((uint32_t)0x00000000U) /*!< next DMA EOT is not the last transfer */ - -/* I2C PEC configure */ -/* PEC enable */ -#define I2C_PEC_ENABLE I2C_CTL0_PECEN /*!< PEC calculation on */ -#define I2C_PEC_DISABLE ((uint32_t)0x00000000U) /*!< PEC calculation off */ - -/* PEC transfer */ -#define I2C_PECTRANS_ENABLE I2C_CTL0_PECTRANS /*!< transfer PEC */ -#define I2C_PECTRANS_DISABLE ((uint32_t)0x00000000U) /*!< not transfer PEC value */ - -/* I2C SMBus configure */ -/* issue or not alert through SMBA pin */ -#define I2C_SALTSEND_ENABLE I2C_CTL0_SALT /*!< issue alert through SMBA pin */ -#define I2C_SALTSEND_DISABLE ((uint32_t)0x00000000U) /*!< not issue alert through SMBA */ - -/* ARP protocol in SMBus switch */ -#define I2C_ARP_ENABLE I2C_CTL0_ARPEN /*!< ARP is enabled */ -#define I2C_ARP_DISABLE ((uint32_t)0x00000000U) /*!< ARP is disabled */ - -/* transmit I2C data */ -#define DATA_TRANS(regval) (BITS(0,7) & ((uint32_t)(regval) << 0)) - -/* receive I2C data */ -#define DATA_RECV(regval) GET_BITS((uint32_t)(regval), 0, 7) - -/* I2C duty cycle in fast mode */ -#define I2C_DTCY_2 ((uint32_t)0x00000000U) /*!< I2C fast mode Tlow/Thigh = 2 */ -#define I2C_DTCY_16_9 I2C_CKCFG_DTCY /*!< I2C fast mode Tlow/Thigh = 16/9 */ - -/* address mode for the I2C slave */ -#define I2C_ADDFORMAT_7BITS ((uint32_t)0x00000000U) /*!< address:7 bits */ -#define I2C_ADDFORMAT_10BITS I2C_SADDR0_ADDFORMAT /*!< address:10 bits */ - -/* function declarations */ -/* reset I2C */ -void i2c_deinit(uint32_t i2c_periph); -/* configure I2C clock */ -void i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc); -/* configure I2C address */ -void i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr); -/* SMBus type selection */ -void i2c_smbus_type_config(uint32_t i2c_periph, uint32_t type); -/* whether or not to send an ACK */ -void i2c_ack_config(uint32_t i2c_periph, uint32_t ack); -/* configure I2C POAP position */ -void i2c_ackpos_config(uint32_t i2c_periph, uint32_t pos); -/* master sends slave address */ -void i2c_master_addressing(uint32_t i2c_periph, uint32_t addr, uint32_t trandirection); -/* enable dual-address mode */ -void i2c_dualaddr_enable(uint32_t i2c_periph, uint32_t addr); -/* disable dual-address mode */ -void i2c_dualaddr_disable(uint32_t i2c_periph); -/* enable I2C */ -void i2c_enable(uint32_t i2c_periph); -/* disable I2C */ -void i2c_disable(uint32_t i2c_periph); - -/* generate a START condition on I2C bus */ -void i2c_start_on_bus(uint32_t i2c_periph); -/* generate a STOP condition on I2C bus */ -void i2c_stop_on_bus(uint32_t i2c_periph); -/* I2C transmit data function */ -void i2c_data_transmit(uint32_t i2c_periph, uint8_t data); -/* I2C receive data function */ -uint8_t i2c_data_receive(uint32_t i2c_periph); -/* enable I2C DMA mode */ -void i2c_dma_enable(uint32_t i2c_periph, uint32_t dmastate); -/* configure whether next DMA EOT is DMA last transfer or not */ -void i2c_dma_last_transfer_config(uint32_t i2c_periph, uint32_t dmalast); -/* whether to stretch SCL low when data is not ready in slave mode */ -void i2c_stretch_scl_low_config(uint32_t i2c_periph, uint32_t stretchpara); -/* whether or not to response to a general call */ -void i2c_slave_response_to_gcall_config(uint32_t i2c_periph, uint32_t gcallpara); -/* software reset I2C */ -void i2c_software_reset_config(uint32_t i2c_periph, uint32_t sreset); - -/* I2C PEC calculation on or off */ -void i2c_pec_enable(uint32_t i2c_periph, uint32_t pecstate); -/* I2C whether to transfer PEC value */ -void i2c_pec_transfer_enable(uint32_t i2c_periph, uint32_t pecpara); -/* packet error checking value */ -uint8_t i2c_pec_value_get(uint32_t i2c_periph); -/* I2C issue alert through SMBA pin */ -void i2c_smbus_issue_alert(uint32_t i2c_periph, uint32_t smbuspara); -/* I2C ARP protocol in SMBus switch */ -void i2c_smbus_arp_enable(uint32_t i2c_periph, uint32_t arpstate); - -/* check I2C flag is set or not */ -FlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag); -/* clear I2C flag */ -void i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag); -/* enable I2C interrupt */ -void i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt); -/* disable I2C interrupt */ -void i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt); -/* check I2C interrupt flag */ -FlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag); -/* clear I2C interrupt flag */ -void i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag); - -#endif /* GD32E10X_I2C_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_misc.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_misc.h deleted file mode 100644 index a014545..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_misc.h +++ /dev/null @@ -1,94 +0,0 @@ -/*! - \file gd32f10x_misc.h - \brief definitions for the MISC - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_MISC_H -#define GD32F10X_MISC_H - -#include "gd32f10x.h" - -/* constants definitions */ -/* set the RAM and FLASH base address */ -#define NVIC_VECTTAB_RAM ((uint32_t)0x20000000) /*!< RAM base address */ -#define NVIC_VECTTAB_FLASH ((uint32_t)0x08000000) /*!< Flash base address */ - -/* set the NVIC vector table offset mask */ -#define NVIC_VECTTAB_OFFSET_MASK ((uint32_t)0x1FFFFF80) - -/* the register key mask, if you want to do the write operation, you should write 0x5FA to VECTKEY bits */ -#define NVIC_AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) - -/* priority group - define the pre-emption priority and the subpriority */ -#define NVIC_PRIGROUP_PRE0_SUB4 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority 4 bits for subpriority */ -#define NVIC_PRIGROUP_PRE1_SUB3 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority 3 bits for subpriority */ -#define NVIC_PRIGROUP_PRE2_SUB2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority 2 bits for subpriority */ -#define NVIC_PRIGROUP_PRE3_SUB1 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority 1 bits for subpriority */ -#define NVIC_PRIGROUP_PRE4_SUB0 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority 0 bits for subpriority */ - -/* choose the method to enter or exit the lowpower mode */ -#define SCB_SCR_SLEEPONEXIT ((uint8_t)0x02) /*!< choose the the system whether enter low power mode by exiting from ISR */ -#define SCB_SCR_SLEEPDEEP ((uint8_t)0x04) /*!< choose the the system enter the DEEPSLEEP mode or SLEEP mode */ -#define SCB_SCR_SEVONPEND ((uint8_t)0x10) /*!< choose the interrupt source that can wake up the lowpower mode */ - -#define SCB_LPM_SLEEP_EXIT_ISR SCB_SCR_SLEEPONEXIT -#define SCB_LPM_DEEPSLEEP SCB_SCR_SLEEPDEEP -#define SCB_LPM_WAKE_BY_ALL_INT SCB_SCR_SEVONPEND - -/* choose the systick clock source */ -#define SYSTICK_CLKSOURCE_HCLK_DIV8 ((uint32_t)0xFFFFFFFBU) /*!< systick clock source is from HCLK/8 */ -#define SYSTICK_CLKSOURCE_HCLK ((uint32_t)0x00000004U) /*!< systick clock source is from HCLK */ - -/* function declarations */ -/* set the priority group */ -void nvic_priority_group_set(uint32_t nvic_prigroup); - -/* enable NVIC request */ -void nvic_irq_enable(uint8_t nvic_irq, uint8_t nvic_irq_pre_priority, uint8_t nvic_irq_sub_priority); -/* disable NVIC request */ -void nvic_irq_disable(uint8_t nvic_irq); - -/* set the NVIC vector table base address */ -void nvic_vector_table_set(uint32_t nvic_vict_tab, uint32_t offset); - -/* set the state of the low power mode */ -void system_lowpower_set(uint8_t lowpower_mode); -/* reset the state of the low power mode */ -void system_lowpower_reset(uint8_t lowpower_mode); - -/* set the systick clock source */ -void systick_clksource_set(uint32_t systick_clksource); - -#endif /* GD32F10X_MISC_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_pmu.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_pmu.h deleted file mode 100644 index d21ee8c..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_pmu.h +++ /dev/null @@ -1,128 +0,0 @@ -/*! - \file gd32f10x_pmu.h - \brief definitions for the PMU - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_PMU_H -#define GD32F10X_PMU_H - -#include "gd32f10x.h" - -/* PMU definitions */ -#define PMU PMU_BASE /*!< PMU base address */ - -/* registers definitions */ -#define PMU_CTL REG32((PMU) + 0x00U) /*!< PMU control register */ -#define PMU_CS REG32((PMU) + 0x04U) /*!< PMU control and status register */ - -/* bits definitions */ -/* PMU_CTL */ -#define PMU_CTL_LDOLP BIT(0) /*!< LDO low power mode */ -#define PMU_CTL_STBMOD BIT(1) /*!< standby mode */ -#define PMU_CTL_WURST BIT(2) /*!< wakeup flag reset */ -#define PMU_CTL_STBRST BIT(3) /*!< standby flag reset */ -#define PMU_CTL_LVDEN BIT(4) /*!< low voltage detector enable */ -#define PMU_CTL_LVDT BITS(5,7) /*!< low voltage detector threshold */ -#define PMU_CTL_BKPWEN BIT(8) /*!< backup domain write enable */ - -/* PMU_CS */ -#define PMU_CS_WUF BIT(0) /*!< wakeup flag */ -#define PMU_CS_STBF BIT(1) /*!< standby flag */ -#define PMU_CS_LVDF BIT(2) /*!< low voltage detector status flag */ -#define PMU_CS_WUPEN BIT(8) /*!< wakeup pin enable */ - -/* constants definitions */ -/* PMU low voltage detector threshold definitions */ -#define CTL_LVDT(regval) (BITS(5,7)&((uint32_t)(regval) << 5)) -#define PMU_LVDT_0 CTL_LVDT(0) /*!< voltage threshold is 2.2V */ -#define PMU_LVDT_1 CTL_LVDT(1) /*!< voltage threshold is 2.3V */ -#define PMU_LVDT_2 CTL_LVDT(2) /*!< voltage threshold is 2.4V */ -#define PMU_LVDT_3 CTL_LVDT(3) /*!< voltage threshold is 2.5V */ -#define PMU_LVDT_4 CTL_LVDT(4) /*!< voltage threshold is 2.6V */ -#define PMU_LVDT_5 CTL_LVDT(5) /*!< voltage threshold is 2.7V */ -#define PMU_LVDT_6 CTL_LVDT(6) /*!< voltage threshold is 2.8V */ -#define PMU_LVDT_7 CTL_LVDT(7) /*!< voltage threshold is 2.9V */ - -/* PMU flag definitions */ -#define PMU_FLAG_WAKEUP PMU_CS_WUF /*!< wakeup flag status */ -#define PMU_FLAG_STANDBY PMU_CS_STBF /*!< standby flag status */ -#define PMU_FLAG_LVD PMU_CS_LVDF /*!< lvd flag status */ - -/* PMU ldo definitions */ -#define PMU_LDO_NORMAL ((uint32_t)0x00000000U) /*!< LDO normal work when PMU enter deepsleep mode */ -#define PMU_LDO_LOWPOWER PMU_CTL_LDOLP /*!< LDO work at low power status when PMU enter deepsleep mode */ - -/* PMU flag reset definitions */ -#define PMU_FLAG_RESET_WAKEUP ((uint8_t)0x00U) /*!< wakeup flag reset */ -#define PMU_FLAG_RESET_STANDBY ((uint8_t)0x01U) /*!< standby flag reset */ - -/* PMU command constants definitions */ -#define WFI_CMD ((uint8_t)0x00U) /*!< use WFI command */ -#define WFE_CMD ((uint8_t)0x01U) /*!< use WFE command */ - -/* function declarations */ -/* reset PMU registers */ -void pmu_deinit(void); - -/* select low voltage detector threshold */ -void pmu_lvd_select(uint32_t lvdt_n); -/* disable PMU lvd */ -void pmu_lvd_disable(void); - -/* set PMU mode */ -/* PMU work at sleep mode */ -void pmu_to_sleepmode(uint8_t sleepmodecmd); -/* PMU work at deepsleep mode */ -void pmu_to_deepsleepmode(uint32_t ldo, uint8_t deepsleepmodecmd); -/* PMU work at standby mode */ -void pmu_to_standbymode(uint8_t standbymodecmd); -/* enable PMU wakeup pin */ -void pmu_wakeup_pin_enable(void); -/* disable PMU wakeup pin */ -void pmu_wakeup_pin_disable(void); - -/* backup related functions */ -/* enable write access to the registers in backup domain */ -void pmu_backup_write_enable(void); -/* disable write access to the registers in backup domain */ -void pmu_backup_write_disable(void); - -/* flag functions */ -/* get flag state */ -FlagStatus pmu_flag_get(uint32_t flag); -/* clear flag bit */ -void pmu_flag_clear(uint32_t flag_reset); - -#endif /* GD32F10X_PMU_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_rcu.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_rcu.h deleted file mode 100644 index a4348b7..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_rcu.h +++ /dev/null @@ -1,923 +0,0 @@ -/*! - \file gd32f10x_rcu.h - \brief definitions for the RCU - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_RCU_H -#define GD32F10X_RCU_H - -#include "gd32f10x.h" - -/* RCU definitions */ -#define RCU RCU_BASE - -/* registers definitions */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define RCU_CTL REG32(RCU + 0x00U) /*!< control register */ -#define RCU_CFG0 REG32(RCU + 0x04U) /*!< clock configuration register 0 */ -#define RCU_INT REG32(RCU + 0x08U) /*!< clock interrupt register */ -#define RCU_APB2RST REG32(RCU + 0x0CU) /*!< APB2 reset register */ -#define RCU_APB1RST REG32(RCU + 0x10U) /*!< APB1 reset register */ -#define RCU_AHBEN REG32(RCU + 0x14U) /*!< AHB enable register */ -#define RCU_APB2EN REG32(RCU + 0x18U) /*!< APB2 enable register */ -#define RCU_APB1EN REG32(RCU + 0x1CU) /*!< APB1 enable register */ -#define RCU_BDCTL REG32(RCU + 0x20U) /*!< backup domain control register */ -#define RCU_RSTSCK REG32(RCU + 0x24U) /*!< reset source / clock register */ -#define RCU_DSV REG32(RCU + 0x34U) /*!< deep-sleep mode voltage register */ -#elif defined(GD32F10X_CL) -#define RCU_CTL REG32(RCU + 0x00U) /*!< control register */ -#define RCU_CFG0 REG32(RCU + 0x04U) /*!< clock configuration register 0 */ -#define RCU_INT REG32(RCU + 0x08U) /*!< clock interrupt register */ -#define RCU_APB2RST REG32(RCU + 0x0CU) /*!< APB2 reset register */ -#define RCU_APB1RST REG32(RCU + 0x10U) /*!< APB1 reset register */ -#define RCU_AHBEN REG32(RCU + 0x14U) /*!< AHB1 enable register */ -#define RCU_APB2EN REG32(RCU + 0x18U) /*!< APB2 enable register */ -#define RCU_APB1EN REG32(RCU + 0x1CU) /*!< APB1 enable register */ -#define RCU_BDCTL REG32(RCU + 0x20U) /*!< backup domain control register */ -#define RCU_RSTSCK REG32(RCU + 0x24U) /*!< reset source / clock register */ -#define RCU_AHBRST REG32(RCU + 0x28U) /*!< AHB reset register */ -#define RCU_CFG1 REG32(RCU + 0x2CU) /*!< clock configuration register 1 */ -#define RCU_DSV REG32(RCU + 0x34U) /*!< deep-sleep mode voltage register */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - -/* bits definitions */ -/* RCU_CTL */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define RCU_CTL_IRC8MEN BIT(0) /*!< internal high speed oscillator enable */ -#define RCU_CTL_IRC8MSTB BIT(1) /*!< IRC8M high speed internal oscillator stabilization flag */ -#define RCU_CTL_IRC8MADJ BITS(3,7) /*!< high speed internal oscillator clock trim adjust value */ -#define RCU_CTL_IRC8MCALIB BITS(8,15) /*!< high speed internal oscillator calibration value register */ -#define RCU_CTL_HXTALEN BIT(16) /*!< external high speed oscillator enable */ -#define RCU_CTL_HXTALSTB BIT(17) /*!< external crystal oscillator clock stabilization flag */ -#define RCU_CTL_HXTALBPS BIT(18) /*!< external crystal oscillator clock bypass mode enable */ -#define RCU_CTL_CKMEN BIT(19) /*!< HXTAL clock monitor enable */ -#define RCU_CTL_PLLEN BIT(24) /*!< PLL enable */ -#define RCU_CTL_PLLSTB BIT(25) /*!< PLL clock stabilization flag */ -#elif defined(GD32F10X_CL) -#define RCU_CTL_IRC8MEN BIT(0) /*!< internal high speed oscillator enable */ -#define RCU_CTL_IRC8MSTB BIT(1) /*!< IRC8M high speed internal oscillator stabilization flag */ -#define RCU_CTL_IRC8MADJ BITS(3,7) /*!< high speed internal oscillator clock trim adjust value */ -#define RCU_CTL_IRC8MCALIB BITS(8,15) /*!< high speed internal oscillator calibration value register */ -#define RCU_CTL_HXTALEN BIT(16) /*!< external high speed oscillator enable */ -#define RCU_CTL_HXTALSTB BIT(17) /*!< external crystal oscillator clock stabilization flag */ -#define RCU_CTL_HXTALBPS BIT(18) /*!< external crystal oscillator clock bypass mode enable */ -#define RCU_CTL_CKMEN BIT(19) /*!< HXTAL clock monitor enable */ -#define RCU_CTL_PLLEN BIT(24) /*!< PLL enable */ -#define RCU_CTL_PLLSTB BIT(25) /*!< PLL clock stabilization flag */ -#define RCU_CTL_PLL1EN BIT(26) /*!< PLL1 enable */ -#define RCU_CTL_PLL1STB BIT(27) /*!< PLL1 clock stabilization flag */ -#define RCU_CTL_PLL2EN BIT(28) /*!< PLL2 enable */ -#define RCU_CTL_PLL2STB BIT(29) /*!< PLL2 clock stabilization flag */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - -/* RCU_CFG0 */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define RCU_CFG0_SCS BITS(0,1) /*!< system clock switch */ -#define RCU_CFG0_SCSS BITS(2,3) /*!< system clock switch status */ -#define RCU_CFG0_AHBPSC BITS(4,7) /*!< AHB prescaler selection */ -#define RCU_CFG0_APB1PSC BITS(8,10) /*!< APB1 prescaler selection */ -#define RCU_CFG0_APB2PSC BITS(11,13) /*!< APB2 prescaler selection */ -#define RCU_CFG0_ADCPSC BITS(14,15) /*!< ADC prescaler selection */ -#define RCU_CFG0_PLLSEL BIT(16) /*!< PLL clock source selection */ -#define RCU_CFG0_PREDV0 BIT(17) /*!< PREDV0 division factor */ -#define RCU_CFG0_PLLMF BITS(18,21) /*!< PLL clock multiplication factor */ -#define RCU_CFG0_USBDPSC BITS(22,23) /*!< USBD clock prescaler selection */ -#define RCU_CFG0_CKOUT0SEL BITS(24,26) /*!< CKOUT0 clock source selection */ -#define RCU_CFG0_PLLMF_4 BIT(27) /*!< bit 4 of PLLMF */ -#define RCU_CFG0_ADCPSC_2 BIT(28) /*!< bit 2 of ADCPSC */ -#elif defined(GD32F10X_CL) -#define RCU_CFG0_SCS BITS(0,1) /*!< system clock switch */ -#define RCU_CFG0_SCSS BITS(2,3) /*!< system clock switch status */ -#define RCU_CFG0_AHBPSC BITS(4,7) /*!< AHB prescaler selection */ -#define RCU_CFG0_APB1PSC BITS(8,10) /*!< APB1 prescaler selection */ -#define RCU_CFG0_APB2PSC BITS(11,13) /*!< APB2 prescaler selection */ -#define RCU_CFG0_ADCPSC BITS(14,15) /*!< ADC prescaler selection */ -#define RCU_CFG0_PLLSEL BIT(16) /*!< PLL clock source selection */ -#define RCU_CFG0_PREDV0_LSB BIT(17) /*!< the LSB of PREDV0 division factor */ -#define RCU_CFG0_PLLMF BITS(18,21) /*!< PLL clock multiplication factor */ -#define RCU_CFG0_USBFSPSC BITS(22,23) /*!< USBFS clock prescaler selection */ -#define RCU_CFG0_CKOUT0SEL BITS(24,27) /*!< CKOUT0 clock source selection */ -#define RCU_CFG0_ADCPSC_2 BIT(28) /*!< bit 2 of ADCPSC */ -#define RCU_CFG0_PLLMF_4 BIT(29) /*!< bit 4 of PLLMF */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - -/* RCU_INT */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define RCU_INT_IRC40KSTBIF BIT(0) /*!< IRC40K stabilization interrupt flag */ -#define RCU_INT_LXTALSTBIF BIT(1) /*!< LXTAL stabilization interrupt flag */ -#define RCU_INT_IRC8MSTBIF BIT(2) /*!< IRC8M stabilization interrupt flag */ -#define RCU_INT_HXTALSTBIF BIT(3) /*!< HXTAL stabilization interrupt flag */ -#define RCU_INT_PLLSTBIF BIT(4) /*!< PLL stabilization interrupt flag */ -#define RCU_INT_CKMIF BIT(7) /*!< HXTAL clock stuck interrupt flag */ -#define RCU_INT_IRC40KSTBIE BIT(8) /*!< IRC40K stabilization interrupt enable */ -#define RCU_INT_LXTALSTBIE BIT(9) /*!< LXTAL stabilization interrupt enable */ -#define RCU_INT_IRC8MSTBIE BIT(10) /*!< IRC8M stabilization interrupt enable */ -#define RCU_INT_HXTALSTBIE BIT(11) /*!< HXTAL stabilization interrupt enable */ -#define RCU_INT_PLLSTBIE BIT(12) /*!< PLL stabilization interrupt enable */ -#define RCU_INT_IRC40KSTBIC BIT(16) /*!< IRC40K Stabilization interrupt clear */ -#define RCU_INT_LXTALSTBIC BIT(17) /*!< LXTAL Stabilization interrupt clear */ -#define RCU_INT_IRC8MSTBIC BIT(18) /*!< IRC8M Stabilization interrupt clear */ -#define RCU_INT_HXTALSTBIC BIT(19) /*!< HXTAL Stabilization interrupt clear */ -#define RCU_INT_PLLSTBIC BIT(20) /*!< PLL stabilization interrupt clear */ -#define RCU_INT_CKMIC BIT(23) /*!< HXTAL clock stuck interrupt clear */ -#elif defined(GD32F10X_CL) -#define RCU_INT_IRC40KSTBIF BIT(0) /*!< IRC40K stabilization interrupt flag */ -#define RCU_INT_LXTALSTBIF BIT(1) /*!< LXTAL stabilization interrupt flag */ -#define RCU_INT_IRC8MSTBIF BIT(2) /*!< IRC8M stabilization interrupt flag */ -#define RCU_INT_HXTALSTBIF BIT(3) /*!< HXTAL stabilization interrupt flag */ -#define RCU_INT_PLLSTBIF BIT(4) /*!< PLL stabilization interrupt flag */ -#define RCU_INT_PLL1STBIF BIT(5) /*!< PLL1 stabilization interrupt flag */ -#define RCU_INT_PLL2STBIF BIT(6) /*!< PLL2 stabilization interrupt flag */ -#define RCU_INT_CKMIF BIT(7) /*!< HXTAL clock stuck interrupt flag */ -#define RCU_INT_IRC40KSTBIE BIT(8) /*!< IRC40K stabilization interrupt enable */ -#define RCU_INT_LXTALSTBIE BIT(9) /*!< LXTAL stabilization interrupt enable */ -#define RCU_INT_IRC8MSTBIE BIT(10) /*!< IRC8M stabilization interrupt enable */ -#define RCU_INT_HXTALSTBIE BIT(11) /*!< HXTAL stabilization interrupt enable */ -#define RCU_INT_PLLSTBIE BIT(12) /*!< PLL stabilization interrupt enable */ -#define RCU_INT_PLL1STBIE BIT(13) /*!< PLL1 stabilization interrupt enable */ -#define RCU_INT_PLL2STBIE BIT(14) /*!< PLL2 stabilization interrupt enable */ -#define RCU_INT_IRC40KSTBIC BIT(16) /*!< IRC40K stabilization interrupt clear */ -#define RCU_INT_LXTALSTBIC BIT(17) /*!< LXTAL stabilization interrupt clear */ -#define RCU_INT_IRC8MSTBIC BIT(18) /*!< IRC8M stabilization interrupt clear */ -#define RCU_INT_HXTALSTBIC BIT(19) /*!< HXTAL stabilization interrupt clear */ -#define RCU_INT_PLLSTBIC BIT(20) /*!< PLL stabilization interrupt clear */ -#define RCU_INT_PLL1STBIC BIT(21) /*!< PLL1 stabilization interrupt clear */ -#define RCU_INT_PLL2STBIC BIT(22) /*!< PLL2 stabilization interrupt clear */ -#define RCU_INT_CKMIC BIT(23) /*!< HXTAL clock stuck interrupt clear */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - -/* RCU_APB2RST */ -#define RCU_APB2RST_AFRST BIT(0) /*!< alternate function I/O reset */ -#define RCU_APB2RST_PARST BIT(2) /*!< GPIO port A reset */ -#define RCU_APB2RST_PBRST BIT(3) /*!< GPIO port B reset */ -#define RCU_APB2RST_PCRST BIT(4) /*!< GPIO port C reset */ -#define RCU_APB2RST_PDRST BIT(5) /*!< GPIO port D reset */ -#define RCU_APB2RST_PERST BIT(6) /*!< GPIO port E reset */ -#define RCU_APB2RST_PFRST BIT(7) /*!< GPIO port F reset */ -#define RCU_APB2RST_PGRST BIT(8) /*!< GPIO port G reset */ -#define RCU_APB2RST_ADC0RST BIT(9) /*!< ADC0 reset */ -#define RCU_APB2RST_ADC1RST BIT(10) /*!< ADC1 reset */ -#define RCU_APB2RST_TIMER0RST BIT(11) /*!< TIMER0 reset */ -#define RCU_APB2RST_SPI0RST BIT(12) /*!< SPI0 reset */ -#define RCU_APB2RST_TIMER7RST BIT(13) /*!< TIMER7 reset */ -#define RCU_APB2RST_USART0RST BIT(14) /*!< USART0 reset */ -#ifndef GD32F10X_CL -#define RCU_APB2RST_ADC2RST BIT(15) /*!< ADC2 reset */ -#endif /* GD32F10X_CL */ -#ifdef GD32F10X_XD -#define RCU_APB2RST_TIMER8RST BIT(19) /*!< TIMER8 reset */ -#define RCU_APB2RST_TIMER9RST BIT(20) /*!< TIMER9 reset */ -#define RCU_APB2RST_TIMER10RST BIT(21) /*!< TIMER10 reset */ -#endif /* GD32F10X_XD */ - -/* RCU_APB1RST */ -#define RCU_APB1RST_TIMER1RST BIT(0) /*!< TIMER1 reset */ -#define RCU_APB1RST_TIMER2RST BIT(1) /*!< TIMER2 reset */ -#define RCU_APB1RST_TIMER3RST BIT(2) /*!< TIMER3 reset */ -#define RCU_APB1RST_TIMER4RST BIT(3) /*!< TIMER4 reset */ -#define RCU_APB1RST_TIMER5RST BIT(4) /*!< TIMER5 reset */ -#define RCU_APB1RST_TIMER6RST BIT(5) /*!< TIMER6 reset */ -#ifdef GD32F10X_XD -#define RCU_APB1RST_TIMER11RST BIT(6) /*!< TIMER11 reset */ -#define RCU_APB1RST_TIMER12RST BIT(7) /*!< TIMER12 reset */ -#define RCU_APB1RST_TIMER13RST BIT(8) /*!< TIMER13 reset */ -#endif /* GD32F10X_XD */ -#define RCU_APB1RST_WWDGTRST BIT(11) /*!< WWDGT reset */ -#define RCU_APB1RST_SPI1RST BIT(14) /*!< SPI1 reset */ -#define RCU_APB1RST_SPI2RST BIT(15) /*!< SPI2 reset */ -#define RCU_APB1RST_USART1RST BIT(17) /*!< USART1 reset */ -#define RCU_APB1RST_USART2RST BIT(18) /*!< USART2 reset */ -#define RCU_APB1RST_UART3RST BIT(19) /*!< UART3 reset */ -#define RCU_APB1RST_UART4RST BIT(20) /*!< UART4 reset */ -#define RCU_APB1RST_I2C0RST BIT(21) /*!< I2C0 reset */ -#define RCU_APB1RST_I2C1RST BIT(22) /*!< I2C1 reset */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define RCU_APB1RST_USBDRST BIT(23) /*!< USBD reset */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ -#define RCU_APB1RST_CAN0RST BIT(25) /*!< CAN0 reset */ -#ifdef GD32F10X_CL -#define RCU_APB1RST_CAN1RST BIT(26) /*!< CAN1 reset */ -#endif /* GD32F10X_CL */ -#define RCU_APB1RST_BKPIRST BIT(27) /*!< backup interface reset */ -#define RCU_APB1RST_PMURST BIT(28) /*!< PMU reset */ -#define RCU_APB1RST_DACRST BIT(29) /*!< DAC reset */ - -/* RCU_AHBEN */ -#define RCU_AHBEN_DMA0EN BIT(0) /*!< DMA0 clock enable */ -#define RCU_AHBEN_DMA1EN BIT(1) /*!< DMA1 clock enable */ -#define RCU_AHBEN_SRAMSPEN BIT(2) /*!< SRAM clock enable when sleep mode */ -#define RCU_AHBEN_FMCSPEN BIT(4) /*!< FMC clock enable when sleep mode */ -#define RCU_AHBEN_CRCEN BIT(6) /*!< CRC clock enable */ -#define RCU_AHBEN_EXMCEN BIT(8) /*!< EXMC clock enable */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define RCU_AHBEN_SDIOEN BIT(10) /*!< SDIO clock enable */ -#elif defined(GD32F10X_CL) -#define RCU_AHBEN_USBFSEN BIT(12) /*!< USBFS clock enable */ -#define RCU_AHBEN_ENETEN BIT(14) /*!< ENET clock enable */ -#define RCU_AHBEN_ENETTXEN BIT(15) /*!< Ethernet TX clock enable */ -#define RCU_AHBEN_ENETRXEN BIT(16) /*!< Ethernet RX clock enable */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - -/* RCU_APB2EN */ -#define RCU_APB2EN_AFEN BIT(0) /*!< alternate function IO clock enable */ -#define RCU_APB2EN_PAEN BIT(2) /*!< GPIO port A clock enable */ -#define RCU_APB2EN_PBEN BIT(3) /*!< GPIO port B clock enable */ -#define RCU_APB2EN_PCEN BIT(4) /*!< GPIO port C clock enable */ -#define RCU_APB2EN_PDEN BIT(5) /*!< GPIO port D clock enable */ -#define RCU_APB2EN_PEEN BIT(6) /*!< GPIO port E clock enable */ -#define RCU_APB2EN_PFEN BIT(7) /*!< GPIO port F clock enable */ -#define RCU_APB2EN_PGEN BIT(8) /*!< GPIO port G clock enable */ -#define RCU_APB2EN_ADC0EN BIT(9) /*!< ADC0 clock enable */ -#define RCU_APB2EN_ADC1EN BIT(10) /*!< ADC1 clock enable */ -#define RCU_APB2EN_TIMER0EN BIT(11) /*!< TIMER0 clock enable */ -#define RCU_APB2EN_SPI0EN BIT(12) /*!< SPI0 clock enable */ -#define RCU_APB2EN_TIMER7EN BIT(13) /*!< TIMER7 clock enable */ -#define RCU_APB2EN_USART0EN BIT(14) /*!< USART0 clock enable */ -#ifndef GD32F10X_CL -#define RCU_APB2EN_ADC2EN BIT(15) /*!< ADC2 clock enable */ -#endif /* GD32F10X_CL */ -#ifdef GD32F10X_XD -#define RCU_APB2EN_TIMER8EN BIT(19) /*!< TIMER8 clock enable */ -#define RCU_APB2EN_TIMER9EN BIT(20) /*!< TIMER9 clock enable */ -#define RCU_APB2EN_TIMER10EN BIT(21) /*!< TIMER10 clock enable */ -#endif /* GD32F10X_XD */ - -/* RCU_APB1EN */ -#define RCU_APB1EN_TIMER1EN BIT(0) /*!< TIMER1 clock enable */ -#define RCU_APB1EN_TIMER2EN BIT(1) /*!< TIMER2 clock enable */ -#define RCU_APB1EN_TIMER3EN BIT(2) /*!< TIMER3 clock enable */ -#define RCU_APB1EN_TIMER4EN BIT(3) /*!< TIMER4 clock enable */ -#define RCU_APB1EN_TIMER5EN BIT(4) /*!< TIMER5 clock enable */ -#define RCU_APB1EN_TIMER6EN BIT(5) /*!< TIMER6 clock enable */ -#ifdef GD32F10X_XD -#define RCU_APB1EN_TIMER11EN BIT(6) /*!< TIMER11 clock enable */ -#define RCU_APB1EN_TIMER12EN BIT(7) /*!< TIMER12 clock enable */ -#define RCU_APB1EN_TIMER13EN BIT(8) /*!< TIMER13 clock enable */ -#endif /* GD32F10X_XD */ -#define RCU_APB1EN_WWDGTEN BIT(11) /*!< WWDGT clock enable */ -#define RCU_APB1EN_SPI1EN BIT(14) /*!< SPI1 clock enable */ -#define RCU_APB1EN_SPI2EN BIT(15) /*!< SPI2 clock enable */ -#define RCU_APB1EN_USART1EN BIT(17) /*!< USART1 clock enable */ -#define RCU_APB1EN_USART2EN BIT(18) /*!< USART2 clock enable */ -#define RCU_APB1EN_UART3EN BIT(19) /*!< UART3 clock enable */ -#define RCU_APB1EN_UART4EN BIT(20) /*!< UART4 clock enable */ -#define RCU_APB1EN_I2C0EN BIT(21) /*!< I2C0 clock enable */ -#define RCU_APB1EN_I2C1EN BIT(22) /*!< I2C1 clock enable */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define RCU_APB1EN_USBDEN BIT(23) /*!< USBD clock enable */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ -#define RCU_APB1EN_CAN0EN BIT(25) /*!< CAN0 clock enable */ -#ifdef GD32F10X_CL -#define RCU_APB1EN_CAN1EN BIT(26) /*!< CAN1 clock enable */ -#endif /* GD32F10X_CL */ -#define RCU_APB1EN_BKPIEN BIT(27) /*!< backup interface clock enable */ -#define RCU_APB1EN_PMUEN BIT(28) /*!< PMU clock enable */ -#define RCU_APB1EN_DACEN BIT(29) /*!< DAC clock enable */ - -/* RCU_BDCTL */ -#define RCU_BDCTL_LXTALEN BIT(0) /*!< LXTAL enable */ -#define RCU_BDCTL_LXTALSTB BIT(1) /*!< low speed crystal oscillator stabilization flag */ -#define RCU_BDCTL_LXTALBPS BIT(2) /*!< LXTAL bypass mode enable */ -#define RCU_BDCTL_RTCSRC BITS(8,9) /*!< RTC clock entry selection */ -#define RCU_BDCTL_RTCEN BIT(15) /*!< RTC clock enable */ -#define RCU_BDCTL_BKPRST BIT(16) /*!< backup domain reset */ - -/* RCU_RSTSCK */ -#define RCU_RSTSCK_IRC40KEN BIT(0) /*!< IRC40K enable */ -#define RCU_RSTSCK_IRC40KSTB BIT(1) /*!< IRC40K stabilization flag */ -#define RCU_RSTSCK_RSTFC BIT(24) /*!< reset flag clear */ -#define RCU_RSTSCK_EPRSTF BIT(26) /*!< external pin reset flag */ -#define RCU_RSTSCK_PORRSTF BIT(27) /*!< power reset flag */ -#define RCU_RSTSCK_SWRSTF BIT(28) /*!< software reset flag */ -#define RCU_RSTSCK_FWDGTRSTF BIT(29) /*!< free watchdog timer reset flag */ -#define RCU_RSTSCK_WWDGTRSTF BIT(30) /*!< window watchdog timer reset flag */ -#define RCU_RSTSCK_LPRSTF BIT(31) /*!< low-power reset flag */ - -#ifdef GD32F10X_CL -/* RCU_AHBRST */ -#define RCU_AHBRST_USBFSRST BIT(12) /*!< USBFS reset */ -#define RCU_AHBRST_ENETRST BIT(14) /*!< ENET reset */ -#endif /* GD32F10X_CL */ - -#if defined(GD32F10X_CL) -/* RCU_CFG1 */ -#define RCU_CFG1_PREDV0 BITS(0,3) /*!< PREDV0 division factor */ -#define RCU_CFG1_PREDV1 BITS(4,7) /*!< PREDV1 division factor */ -#define RCU_CFG1_PLL1MF BITS(8,11) /*!< PLL1 clock multiplication factor */ -#define RCU_CFG1_PLL2MF BITS(12,15) /*!< PLL2 clock multiplication factor */ -#define RCU_CFG1_PREDV0SEL BIT(16) /*!< PREDV0 input clock source selection */ -#define RCU_CFG1_I2S1SEL BIT(17) /*!< I2S1 clock source selection */ -#define RCU_CFG1_I2S2SEL BIT(18) /*!< I2S2 clock source selection */ -#endif /* GD32F10X_CL */ - -/* RCU_DSV */ -#define RCU_DSV_DSLPVS BITS(0,2) /*!< deep-sleep mode voltage select */ - -/* constants definitions */ -/* define the peripheral clock enable bit position and its register index offset */ -#define RCU_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define RCU_REG_VAL(periph) (REG32(RCU + ((uint32_t)(periph) >> 6))) -#define RCU_BIT_POS(val) ((uint32_t)(val) & 0x1FU) - -/* register offset */ -/* peripherals enable */ -#define AHBEN_REG_OFFSET 0x14U /*!< AHB enable register offset */ -#define APB1EN_REG_OFFSET 0x1CU /*!< APB1 enable register offset */ -#define APB2EN_REG_OFFSET 0x18U /*!< APB2 enable register offset */ - -/* peripherals reset */ -#define AHBRST_REG_OFFSET 0x28U /*!< AHB reset register offset */ -#define APB1RST_REG_OFFSET 0x10U /*!< APB1 reset register offset */ -#define APB2RST_REG_OFFSET 0x0CU /*!< APB2 reset register offset */ -#define RSTSCK_REG_OFFSET 0x24U /*!< reset source/clock register offset */ - -/* clock control */ -#define CTL_REG_OFFSET 0x00U /*!< control register offset */ -#define BDCTL_REG_OFFSET 0x20U /*!< backup domain control register offset */ - -/* clock stabilization and stuck interrupt */ -#define INT_REG_OFFSET 0x08U /*!< clock interrupt register offset */ - -/* configuration register */ -#define CFG0_REG_OFFSET 0x04U /*!< clock configuration register 0 offset */ -#define CFG1_REG_OFFSET 0x2CU /*!< clock configuration register 1 offset */ - -/* peripheral clock enable */ -typedef enum -{ - /* AHB peripherals */ - RCU_DMA0 = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 0U), /*!< DMA0 clock */ - RCU_DMA1 = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 1U), /*!< DMA1 clock */ - RCU_CRC = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 6U), /*!< CRC clock */ - RCU_EXMC = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 8U), /*!< EXMC clock */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - RCU_SDIO = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 10U), /*!< SDIO clock */ -#elif defined(GD32F10X_CL) - RCU_USBFS = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 12U), /*!< USBFS clock */ - RCU_ENET = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 14U), /*!< ENET clock */ - RCU_ENETTX = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 15U), /*!< ENETTX clock */ - RCU_ENETRX = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 16U), /*!< ENETRX clock */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - /* APB1 peripherals */ - RCU_TIMER1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 0U), /*!< TIMER1 clock */ - RCU_TIMER2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 1U), /*!< TIMER2 clock */ - RCU_TIMER3 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 2U), /*!< TIMER3 clock */ - RCU_TIMER4 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 3U), /*!< TIMER4 clock */ - RCU_TIMER5 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 4U), /*!< TIMER5 clock */ - RCU_TIMER6 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 5U), /*!< TIMER6 clock */ -#if defined(GD32F10X_XD) - RCU_TIMER11 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 6U), /*!< TIMER11 clock */ - RCU_TIMER12 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 7U), /*!< TIMER12 clock */ - RCU_TIMER13 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 8U), /*!< TIMER13 clock */ -#endif /* GD32F10X_XD */ - RCU_WWDGT = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 11U), /*!< WWDGT clock */ - RCU_SPI1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 14U), /*!< SPI1 clock */ - RCU_SPI2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 15U), /*!< SPI2 clock */ - RCU_USART1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 17U), /*!< USART1 clock */ - RCU_USART2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 18U), /*!< USART2 clock */ - RCU_UART3 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 19U), /*!< UART3 clock */ - RCU_UART4 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 20U), /*!< UART4 clock */ - RCU_I2C0 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 21U), /*!< I2C0 clock */ - RCU_I2C1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 22U), /*!< I2C1 clock */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - RCU_USBD = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 23U), /*!< USBD clock */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - RCU_CAN0 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 25U), /*!< CAN0 clock */ -#ifdef GD32F10X_CL - RCU_CAN1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 26U), /*!< CAN1 clock */ -#endif /* GD32F10X_CL */ - RCU_BKPI = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 27U), /*!< BKPI clock */ - RCU_PMU = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 28U), /*!< PMU clock */ - RCU_DAC = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 29U), /*!< DAC clock */ - RCU_RTC = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 15U), /*!< RTC clock */ - - /* APB2 peripherals */ - RCU_AF = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 0U), /*!< alternate function clock */ - RCU_GPIOA = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 2U), /*!< GPIOA clock */ - RCU_GPIOB = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 3U), /*!< GPIOB clock */ - RCU_GPIOC = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 4U), /*!< GPIOC clock */ - RCU_GPIOD = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 5U), /*!< GPIOD clock */ - RCU_GPIOE = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 6U), /*!< GPIOE clock */ - RCU_GPIOF = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 7U), /*!< GPIOF clock */ - RCU_GPIOG = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 8U), /*!< GPIOG clock */ - RCU_ADC0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 9U), /*!< ADC0 clock */ - RCU_ADC1 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 10U), /*!< ADC1 clock */ - RCU_TIMER0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 11U), /*!< TIMER0 clock */ - RCU_SPI0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 12U), /*!< SPI0 clock */ - RCU_TIMER7 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 13U), /*!< TIMER7 clock */ - RCU_USART0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 14U), /*!< USART0 clock */ -#ifndef GD32F10X_CL - RCU_ADC2 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 15U), /*!< ADC2 clock */ -#endif /* GD32F10X_CL */ -#ifdef GD32F10X_XD - RCU_TIMER8 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 19U), /*!< TIMER8 clock */ - RCU_TIMER9 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 20U), /*!< TIMER9 clock */ - RCU_TIMER10 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 21U), /*!< TIMER10 clock */ -#endif /* GD32F10X_XD */ -}rcu_periph_enum; - -/* peripheral clock enable when sleep mode*/ -typedef enum -{ - /* AHB peripherals */ - RCU_SRAM_SLP = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 2U), /*!< SRAM clock */ - RCU_FMC_SLP = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 4U), /*!< FMC clock */ -}rcu_periph_sleep_enum; - -/* peripherals reset */ -typedef enum -{ - /* AHB peripherals */ -#ifdef GD32F10X_CL - RCU_USBFSRST = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 12U), /*!< USBFS clock reset */ - RCU_ENETRST = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 14U), /*!< ENET clock reset */ -#endif /* GD32F10X_CL */ - - /* APB1 peripherals */ - RCU_TIMER1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 0U), /*!< TIMER1 clock reset */ - RCU_TIMER2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 1U), /*!< TIMER2 clock reset */ - RCU_TIMER3RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 2U), /*!< TIMER3 clock reset */ - RCU_TIMER4RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 3U), /*!< TIMER4 clock reset */ - RCU_TIMER5RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 4U), /*!< TIMER5 clock reset */ - RCU_TIMER6RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 5U), /*!< TIMER6 clock reset */ -#ifdef GD32F10X_XD - RCU_TIMER11RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 6U), /*!< TIMER11 clock reset */ - RCU_TIMER12RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 7U), /*!< TIMER12 clock reset */ - RCU_TIMER13RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 8U), /*!< TIMER13 clock reset */ -#endif /* GD32F10X_XD */ - RCU_WWDGTRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 11U), /*!< WWDGT clock reset */ - RCU_SPI1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 14U), /*!< SPI1 clock reset */ - RCU_SPI2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 15U), /*!< SPI2 clock reset */ - RCU_USART1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 17U), /*!< USART1 clock reset */ - RCU_USART2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 18U), /*!< USART2 clock reset */ - RCU_UART3RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 19U), /*!< UART3 clock reset */ - RCU_UART4RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 20U), /*!< UART4 clock reset */ - RCU_I2C0RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 21U), /*!< I2C0 clock reset */ - RCU_I2C1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 22U), /*!< I2C1 clock reset */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - RCU_USBDRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 23U), /*!< USBD clock reset */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - RCU_CAN0RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 25U), /*!< CAN0 clock reset */ -#ifdef GD32F10X_CL - RCU_CAN1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 26U), /*!< CAN1 clock reset */ -#endif /* GD32F10X_CL */ - RCU_BKPIRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 27U), /*!< BKPI clock reset */ - RCU_PMURST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 28U), /*!< PMU clock reset */ - RCU_DACRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 29U), /*!< DAC clock reset */ - - /* APB2 peripherals */ - RCU_AFRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 0U), /*!< alternate function clock reset */ - RCU_GPIOARST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 2U), /*!< GPIOA clock reset */ - RCU_GPIOBRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 3U), /*!< GPIOB clock reset */ - RCU_GPIOCRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 4U), /*!< GPIOC clock reset */ - RCU_GPIODRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 5U), /*!< GPIOD clock reset */ - RCU_GPIOERST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 6U), /*!< GPIOE clock reset */ - RCU_GPIOFRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 7U), /*!< GPIOF clock reset */ - RCU_GPIOGRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 8U), /*!< GPIOG clock reset */ - RCU_ADC0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 9U), /*!< ADC0 clock reset */ - RCU_ADC1RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 10U), /*!< ADC1 clock reset */ - RCU_TIMER0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 11U), /*!< TIMER0 clock reset */ - RCU_SPI0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 12U), /*!< SPI0 clock reset */ - RCU_TIMER7RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 13U), /*!< TIMER7 clock reset */ - RCU_USART0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 14U), /*!< USART0 clock reset */ -#ifndef GD32F10X_CL - RCU_ADC2RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 15U), /*!< ADC2 clock reset */ -#endif /* GD32F10X_CL */ -#ifdef GD32F10X_XD - RCU_TIMER8RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 19U), /*!< TIMER8 clock reset */ - RCU_TIMER9RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 20U), /*!< TIMER9 clock reset */ - RCU_TIMER10RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 21U), /*!< TIMER10 clock reset */ -#endif /* GD32F10X_XD */ -}rcu_periph_reset_enum; - -/* clock stabilization and peripheral reset flags */ -typedef enum -{ - /* clock stabilization flags */ - RCU_FLAG_IRC8MSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 1U), /*!< IRC8M stabilization flags */ - RCU_FLAG_HXTALSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 17U), /*!< HXTAL stabilization flags */ - RCU_FLAG_PLLSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 25U), /*!< PLL stabilization flags */ -#ifdef GD32F10X_CL - RCU_FLAG_PLL1STB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 27U), /*!< PLL1 stabilization flags */ - RCU_FLAG_PLL2STB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 29U), /*!< PLL2 stabilization flags */ -#endif /* GD32F10X_CL */ - RCU_FLAG_LXTALSTB = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 1U), /*!< LXTAL stabilization flags */ - RCU_FLAG_IRC40KSTB = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 1U), /*!< IRC40K stabilization flags */ - /* reset source flags */ - RCU_FLAG_EPRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 26U), /*!< external PIN reset flags */ - RCU_FLAG_PORRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 27U), /*!< power reset flags */ - RCU_FLAG_SWRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 28U), /*!< software reset flags */ - RCU_FLAG_FWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 29U), /*!< FWDGT reset flags */ - RCU_FLAG_WWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 30U), /*!< WWDGT reset flags */ - RCU_FLAG_LPRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 31U), /*!< low-power reset flags */ -}rcu_flag_enum; - -/* clock stabilization and ckm interrupt flags */ -typedef enum -{ - RCU_INT_FLAG_IRC40KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 0U), /*!< IRC40K stabilization interrupt flag */ - RCU_INT_FLAG_LXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 1U), /*!< LXTAL stabilization interrupt flag */ - RCU_INT_FLAG_IRC8MSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 2U), /*!< IRC8M stabilization interrupt flag */ - RCU_INT_FLAG_HXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 3U), /*!< HXTAL stabilization interrupt flag */ - RCU_INT_FLAG_PLLSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 4U), /*!< PLL stabilization interrupt flag */ -#ifdef GD32F10X_CL - RCU_INT_FLAG_PLL1STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 5U), /*!< PLL1 stabilization interrupt flag */ - RCU_INT_FLAG_PLL2STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 6U), /*!< PLL2 stabilization interrupt flag */ -#endif /* GD32F10X_CL */ - RCU_INT_FLAG_CKM = RCU_REGIDX_BIT(INT_REG_OFFSET, 7U), /*!< HXTAL clock stuck interrupt flag */ -}rcu_int_flag_enum; - -/* clock stabilization and stuck interrupt flags clear */ -typedef enum -{ - RCU_INT_FLAG_IRC40KSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 16U), /*!< IRC40K stabilization interrupt flags clear */ - RCU_INT_FLAG_LXTALSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 17U), /*!< LXTAL stabilization interrupt flags clear */ - RCU_INT_FLAG_IRC8MSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 18U), /*!< IRC8M stabilization interrupt flags clear */ - RCU_INT_FLAG_HXTALSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 19U), /*!< HXTAL stabilization interrupt flags clear */ - RCU_INT_FLAG_PLLSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 20U), /*!< PLL stabilization interrupt flags clear */ -#ifdef GD32F10X_CL - RCU_INT_FLAG_PLL1STB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 21U), /*!< PLL1 stabilization interrupt flags clear */ - RCU_INT_FLAG_PLL2STB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 22U), /*!< PLL2 stabilization interrupt flags clear */ -#endif /* GD32F10X_CL */ - RCU_INT_FLAG_CKM_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 23U), /*!< CKM interrupt flags clear */ -}rcu_int_flag_clear_enum; - -/* clock stabilization interrupt enable or disable */ -typedef enum -{ - RCU_INT_IRC40KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 8U), /*!< IRC40K stabilization interrupt */ - RCU_INT_LXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 9U), /*!< LXTAL stabilization interrupt */ - RCU_INT_IRC8MSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 10U), /*!< IRC8M stabilization interrupt */ - RCU_INT_HXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 11U), /*!< HXTAL stabilization interrupt */ - RCU_INT_PLLSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 12U), /*!< PLL stabilization interrupt */ -#ifdef GD32F10X_CL - RCU_INT_PLL1STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 13U), /*!< PLL1 stabilization interrupt */ - RCU_INT_PLL2STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 14U), /*!< PLL2 stabilization interrupt */ -#endif /* GD32F10X_CL */ -}rcu_int_enum; - -/* oscillator types */ -typedef enum -{ - RCU_HXTAL = RCU_REGIDX_BIT(CTL_REG_OFFSET, 16U), /*!< HXTAL */ - RCU_LXTAL = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 0U), /*!< LXTAL */ - RCU_IRC8M = RCU_REGIDX_BIT(CTL_REG_OFFSET, 0U), /*!< IRC8M */ - RCU_IRC40K = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 0U), /*!< IRC40K */ - RCU_PLL_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 24U), /*!< PLL */ -#ifdef GD32F10X_CL - RCU_PLL1_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 26U), /*!< PLL1 */ - RCU_PLL2_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 28U), /*!< PLL2 */ -#endif /* GD32F10X_CL */ -}rcu_osci_type_enum; - -/* rcu clock frequency */ -typedef enum -{ - CK_SYS = 0, /*!< system clock */ - CK_AHB, /*!< AHB clock */ - CK_APB1, /*!< APB1 clock */ - CK_APB2, /*!< APB2 clock */ -}rcu_clock_freq_enum; - -/* RCU_CFG0 register bit define */ -/* system clock source select */ -#define CFG0_SCS(regval) (BITS(0,1) & ((uint32_t)(regval) << 0)) -#define RCU_CKSYSSRC_IRC8M CFG0_SCS(0) /*!< system clock source select IRC8M */ -#define RCU_CKSYSSRC_HXTAL CFG0_SCS(1) /*!< system clock source select HXTAL */ -#define RCU_CKSYSSRC_PLL CFG0_SCS(2) /*!< system clock source select PLL */ - -/* system clock source select status */ -#define CFG0_SCSS(regval) (BITS(2,3) & ((uint32_t)(regval) << 2)) -#define RCU_SCSS_IRC8M CFG0_SCSS(0) /*!< system clock source select IRC8M */ -#define RCU_SCSS_HXTAL CFG0_SCSS(1) /*!< system clock source select HXTAL */ -#define RCU_SCSS_PLL CFG0_SCSS(2) /*!< system clock source select PLLP */ - -/* AHB prescaler selection */ -#define CFG0_AHBPSC(regval) (BITS(4,7) & ((uint32_t)(regval) << 4)) -#define RCU_AHB_CKSYS_DIV1 CFG0_AHBPSC(0) /*!< AHB prescaler select CK_SYS */ -#define RCU_AHB_CKSYS_DIV2 CFG0_AHBPSC(8) /*!< AHB prescaler select CK_SYS/2 */ -#define RCU_AHB_CKSYS_DIV4 CFG0_AHBPSC(9) /*!< AHB prescaler select CK_SYS/4 */ -#define RCU_AHB_CKSYS_DIV8 CFG0_AHBPSC(10) /*!< AHB prescaler select CK_SYS/8 */ -#define RCU_AHB_CKSYS_DIV16 CFG0_AHBPSC(11) /*!< AHB prescaler select CK_SYS/16 */ -#define RCU_AHB_CKSYS_DIV64 CFG0_AHBPSC(12) /*!< AHB prescaler select CK_SYS/64 */ -#define RCU_AHB_CKSYS_DIV128 CFG0_AHBPSC(13) /*!< AHB prescaler select CK_SYS/128 */ -#define RCU_AHB_CKSYS_DIV256 CFG0_AHBPSC(14) /*!< AHB prescaler select CK_SYS/256 */ -#define RCU_AHB_CKSYS_DIV512 CFG0_AHBPSC(15) /*!< AHB prescaler select CK_SYS/512 */ - -/* APB1 prescaler selection */ -#define CFG0_APB1PSC(regval) (BITS(8,10) & ((uint32_t)(regval) << 8)) -#define RCU_APB1_CKAHB_DIV1 CFG0_APB1PSC(0) /*!< APB1 prescaler select CK_AHB */ -#define RCU_APB1_CKAHB_DIV2 CFG0_APB1PSC(4) /*!< APB1 prescaler select CK_AHB/2 */ -#define RCU_APB1_CKAHB_DIV4 CFG0_APB1PSC(5) /*!< APB1 prescaler select CK_AHB/4 */ -#define RCU_APB1_CKAHB_DIV8 CFG0_APB1PSC(6) /*!< APB1 prescaler select CK_AHB/8 */ -#define RCU_APB1_CKAHB_DIV16 CFG0_APB1PSC(7) /*!< APB1 prescaler select CK_AHB/16 */ - -/* APB2 prescaler selection */ -#define CFG0_APB2PSC(regval) (BITS(11,13) & ((uint32_t)(regval) << 11)) -#define RCU_APB2_CKAHB_DIV1 CFG0_APB2PSC(0) /*!< APB2 prescaler select CK_AHB */ -#define RCU_APB2_CKAHB_DIV2 CFG0_APB2PSC(4) /*!< APB2 prescaler select CK_AHB/2 */ -#define RCU_APB2_CKAHB_DIV4 CFG0_APB2PSC(5) /*!< APB2 prescaler select CK_AHB/4 */ -#define RCU_APB2_CKAHB_DIV8 CFG0_APB2PSC(6) /*!< APB2 prescaler select CK_AHB/8 */ -#define RCU_APB2_CKAHB_DIV16 CFG0_APB2PSC(7) /*!< APB2 prescaler select CK_AHB/16 */ - -/* ADC prescaler select */ -#define RCU_CKADC_CKAPB2_DIV2 ((uint32_t)0x00000000U) /*!< ADC prescaler select CK_APB2/2 */ -#define RCU_CKADC_CKAPB2_DIV4 ((uint32_t)0x00000001U) /*!< ADC prescaler select CK_APB2/4 */ -#define RCU_CKADC_CKAPB2_DIV6 ((uint32_t)0x00000002U) /*!< ADC prescaler select CK_APB2/6 */ -#define RCU_CKADC_CKAPB2_DIV8 ((uint32_t)0x00000003U) /*!< ADC prescaler select CK_APB2/8 */ -#define RCU_CKADC_CKAPB2_DIV12 ((uint32_t)0x00000005U) /*!< ADC prescaler select CK_APB2/12 */ -#define RCU_CKADC_CKAPB2_DIV16 ((uint32_t)0x00000007U) /*!< ADC prescaler select CK_APB2/16 */ - -/* PLL clock source selection */ -#define RCU_PLLSRC_IRC8M_DIV2 ((uint32_t)0x00000000U) /*!< IRC8M/2 clock selected as source clock of PLL */ -#define RCU_PLLSRC_HXTAL RCU_CFG0_PLLSEL /*!< HXTAL clock selected as source clock of PLL */ - -/* PLL clock multiplication factor */ -#define PLLMF_4 RCU_CFG0_PLLMF_4 /* bit 4 of PLLMF */ - -#define CFG0_PLLMF(regval) (BITS(18,21) & ((uint32_t)(regval) << 18)) -#define RCU_PLL_MUL2 CFG0_PLLMF(0) /*!< PLL source clock multiply by 2 */ -#define RCU_PLL_MUL3 CFG0_PLLMF(1) /*!< PLL source clock multiply by 3 */ -#define RCU_PLL_MUL4 CFG0_PLLMF(2) /*!< PLL source clock multiply by 4 */ -#define RCU_PLL_MUL5 CFG0_PLLMF(3) /*!< PLL source clock multiply by 5 */ -#define RCU_PLL_MUL6 CFG0_PLLMF(4) /*!< PLL source clock multiply by 6 */ -#define RCU_PLL_MUL7 CFG0_PLLMF(5) /*!< PLL source clock multiply by 7 */ -#define RCU_PLL_MUL8 CFG0_PLLMF(6) /*!< PLL source clock multiply by 8 */ -#define RCU_PLL_MUL9 CFG0_PLLMF(7) /*!< PLL source clock multiply by 9 */ -#define RCU_PLL_MUL10 CFG0_PLLMF(8) /*!< PLL source clock multiply by 10 */ -#define RCU_PLL_MUL11 CFG0_PLLMF(9) /*!< PLL source clock multiply by 11 */ -#define RCU_PLL_MUL12 CFG0_PLLMF(10) /*!< PLL source clock multiply by 12 */ -#define RCU_PLL_MUL13 CFG0_PLLMF(11) /*!< PLL source clock multiply by 13 */ -#define RCU_PLL_MUL14 CFG0_PLLMF(12) /*!< PLL source clock multiply by 14 */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -#define RCU_PLL_MUL15 CFG0_PLLMF(13) /*!< PLL source clock multiply by 15 */ -#elif defined(GD32F10X_CL) -#define RCU_PLL_MUL6_5 CFG0_PLLMF(13) /*!< PLL source clock multiply by 6.5 */ -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ -#define RCU_PLL_MUL16 CFG0_PLLMF(14) /*!< PLL source clock multiply by 16 */ -#define RCU_PLL_MUL17 (PLLMF_4 | CFG0_PLLMF(0)) /*!< PLL source clock multiply by 17 */ -#define RCU_PLL_MUL18 (PLLMF_4 | CFG0_PLLMF(1)) /*!< PLL source clock multiply by 18 */ -#define RCU_PLL_MUL19 (PLLMF_4 | CFG0_PLLMF(2)) /*!< PLL source clock multiply by 19 */ -#define RCU_PLL_MUL20 (PLLMF_4 | CFG0_PLLMF(3)) /*!< PLL source clock multiply by 20 */ -#define RCU_PLL_MUL21 (PLLMF_4 | CFG0_PLLMF(4)) /*!< PLL source clock multiply by 21 */ -#define RCU_PLL_MUL22 (PLLMF_4 | CFG0_PLLMF(5)) /*!< PLL source clock multiply by 22 */ -#define RCU_PLL_MUL23 (PLLMF_4 | CFG0_PLLMF(6)) /*!< PLL source clock multiply by 23 */ -#define RCU_PLL_MUL24 (PLLMF_4 | CFG0_PLLMF(7)) /*!< PLL source clock multiply by 24 */ -#define RCU_PLL_MUL25 (PLLMF_4 | CFG0_PLLMF(8)) /*!< PLL source clock multiply by 25 */ -#define RCU_PLL_MUL26 (PLLMF_4 | CFG0_PLLMF(9)) /*!< PLL source clock multiply by 26 */ -#define RCU_PLL_MUL27 (PLLMF_4 | CFG0_PLLMF(10)) /*!< PLL source clock multiply by 27 */ -#define RCU_PLL_MUL28 (PLLMF_4 | CFG0_PLLMF(11)) /*!< PLL source clock multiply by 28 */ -#define RCU_PLL_MUL29 (PLLMF_4 | CFG0_PLLMF(12)) /*!< PLL source clock multiply by 29 */ -#define RCU_PLL_MUL30 (PLLMF_4 | CFG0_PLLMF(13)) /*!< PLL source clock multiply by 30 */ -#define RCU_PLL_MUL31 (PLLMF_4 | CFG0_PLLMF(14)) /*!< PLL source clock multiply by 31 */ -#define RCU_PLL_MUL32 (PLLMF_4 | CFG0_PLLMF(15)) /*!< PLL source clock multiply by 32 */ - -/* USBD/USBFS prescaler select */ -#define CFG0_USBPSC(regval) (BITS(22,23) & ((uint32_t)(regval) << 22)) -#define RCU_CKUSB_CKPLL_DIV1_5 CFG0_USBPSC(0) /*!< USBD/USBFS prescaler select CK_PLL/1.5 */ -#define RCU_CKUSB_CKPLL_DIV1 CFG0_USBPSC(1) /*!< USBD/USBFS prescaler select CK_PLL/1 */ -#define RCU_CKUSB_CKPLL_DIV2_5 CFG0_USBPSC(2) /*!< USBD/USBFS prescaler select CK_PLL/2.5 */ -#define RCU_CKUSB_CKPLL_DIV2 CFG0_USBPSC(3) /*!< USBD/USBFS prescaler select CK_PLL/2 */ - -/* CKOUT0 clock source selection */ -#define CFG0_CKOUT0SEL(regval) (BITS(24,27) & ((uint32_t)(regval) << 24)) -#define RCU_CKOUT0SRC_NONE CFG0_CKOUT0SEL(0) /*!< no clock selected */ -#define RCU_CKOUT0SRC_CKSYS CFG0_CKOUT0SEL(4) /*!< system clock selected */ -#define RCU_CKOUT0SRC_IRC8M CFG0_CKOUT0SEL(5) /*!< internal 8M RC oscillator clock selected */ -#define RCU_CKOUT0SRC_HXTAL CFG0_CKOUT0SEL(6) /*!< high speed crystal oscillator clock (HXTAL) selected */ -#define RCU_CKOUT0SRC_CKPLL_DIV2 CFG0_CKOUT0SEL(7) /*!< CK_PLL/2 clock selected */ -#ifdef GD32F10X_CL -#define RCU_CKOUT0SRC_CKPLL1 CFG0_CKOUT0SEL(8) /*!< CK_PLL1 clock selected */ -#define RCU_CKOUT0SRC_CKPLL2_DIV2 CFG0_CKOUT0SEL(9) /*!< CK_PLL2/2 clock selected */ -#define RCU_CKOUT0SRC_EXT1 CFG0_CKOUT0SEL(10) /*!< EXT1 selected, to provide the external clock for ENET */ -#define RCU_CKOUT0SRC_CKPLL2 CFG0_CKOUT0SEL(11) /*!< CK_PLL2 clock selected */ -#endif /* GD32F10X_CL */ - -/* RTC clock entry selection */ -#define BDCTL_RTCSRC(regval) (BITS(8,9) & ((uint32_t)(regval) << 8)) -#define RCU_RTCSRC_NONE BDCTL_RTCSRC(0) /*!< no clock selected */ -#define RCU_RTCSRC_LXTAL BDCTL_RTCSRC(1) /*!< RTC source clock select LXTAL */ -#define RCU_RTCSRC_IRC40K BDCTL_RTCSRC(2) /*!< RTC source clock select IRC40K */ -#define RCU_RTCSRC_HXTAL_DIV_128 BDCTL_RTCSRC(3) /*!< RTC source clock select HXTAL/128 */ - -/* PREDV0 division factor */ -#define CFG1_PREDV0(regval) (BITS(0,3) & ((uint32_t)(regval) << 0)) -#define RCU_PREDV0_DIV1 CFG1_PREDV0(0) /*!< PREDV0 input source clock not divided */ -#define RCU_PREDV0_DIV2 CFG1_PREDV0(1) /*!< PREDV0 input source clock divided by 2 */ -#define RCU_PREDV0_DIV3 CFG1_PREDV0(2) /*!< PREDV0 input source clock divided by 3 */ -#define RCU_PREDV0_DIV4 CFG1_PREDV0(3) /*!< PREDV0 input source clock divided by 4 */ -#define RCU_PREDV0_DIV5 CFG1_PREDV0(4) /*!< PREDV0 input source clock divided by 5 */ -#define RCU_PREDV0_DIV6 CFG1_PREDV0(5) /*!< PREDV0 input source clock divided by 6 */ -#define RCU_PREDV0_DIV7 CFG1_PREDV0(6) /*!< PREDV0 input source clock divided by 7 */ -#define RCU_PREDV0_DIV8 CFG1_PREDV0(7) /*!< PREDV0 input source clock divided by 8 */ -#define RCU_PREDV0_DIV9 CFG1_PREDV0(8) /*!< PREDV0 input source clock divided by 9 */ -#define RCU_PREDV0_DIV10 CFG1_PREDV0(9) /*!< PREDV0 input source clock divided by 10 */ -#define RCU_PREDV0_DIV11 CFG1_PREDV0(10) /*!< PREDV0 input source clock divided by 11 */ -#define RCU_PREDV0_DIV12 CFG1_PREDV0(11) /*!< PREDV0 input source clock divided by 12 */ -#define RCU_PREDV0_DIV13 CFG1_PREDV0(12) /*!< PREDV0 input source clock divided by 13 */ -#define RCU_PREDV0_DIV14 CFG1_PREDV0(13) /*!< PREDV0 input source clock divided by 14 */ -#define RCU_PREDV0_DIV15 CFG1_PREDV0(14) /*!< PREDV0 input source clock divided by 15 */ -#define RCU_PREDV0_DIV16 CFG1_PREDV0(15) /*!< PREDV0 input source clock divided by 16 */ - -/* PREDV1 division factor */ -#define CFG1_PREDV1(regval) (BITS(4,7) & ((uint32_t)(regval) << 4)) -#define RCU_PREDV1_DIV1 CFG1_PREDV1(0) /*!< PREDV1 input source clock not divided */ -#define RCU_PREDV1_DIV2 CFG1_PREDV1(1) /*!< PREDV1 input source clock divided by 2 */ -#define RCU_PREDV1_DIV3 CFG1_PREDV1(2) /*!< PREDV1 input source clock divided by 3 */ -#define RCU_PREDV1_DIV4 CFG1_PREDV1(3) /*!< PREDV1 input source clock divided by 4 */ -#define RCU_PREDV1_DIV5 CFG1_PREDV1(4) /*!< PREDV1 input source clock divided by 5 */ -#define RCU_PREDV1_DIV6 CFG1_PREDV1(5) /*!< PREDV1 input source clock divided by 6 */ -#define RCU_PREDV1_DIV7 CFG1_PREDV1(6) /*!< PREDV1 input source clock divided by 7 */ -#define RCU_PREDV1_DIV8 CFG1_PREDV1(7) /*!< PREDV1 input source clock divided by 8 */ -#define RCU_PREDV1_DIV9 CFG1_PREDV1(8) /*!< PREDV1 input source clock divided by 9 */ -#define RCU_PREDV1_DIV10 CFG1_PREDV1(9) /*!< PREDV1 input source clock divided by 10 */ -#define RCU_PREDV1_DIV11 CFG1_PREDV1(10) /*!< PREDV1 input source clock divided by 11 */ -#define RCU_PREDV1_DIV12 CFG1_PREDV1(11) /*!< PREDV1 input source clock divided by 12 */ -#define RCU_PREDV1_DIV13 CFG1_PREDV1(12) /*!< PREDV1 input source clock divided by 13 */ -#define RCU_PREDV1_DIV14 CFG1_PREDV1(13) /*!< PREDV1 input source clock divided by 14 */ -#define RCU_PREDV1_DIV15 CFG1_PREDV1(14) /*!< PREDV1 input source clock divided by 15 */ -#define RCU_PREDV1_DIV16 CFG1_PREDV1(15) /*!< PREDV1 input source clock divided by 16 */ - -/* PLL1 clock multiplication factor */ -#define CFG1_PLL1MF(regval) (BITS(8,11) & ((uint32_t)(regval) << 8)) -#define RCU_PLL1_MUL8 CFG1_PLL1MF(6) /*!< PLL1 source clock multiply by 8 */ -#define RCU_PLL1_MUL9 CFG1_PLL1MF(7) /*!< PLL1 source clock multiply by 9 */ -#define RCU_PLL1_MUL10 CFG1_PLL1MF(8) /*!< PLL1 source clock multiply by 10 */ -#define RCU_PLL1_MUL11 CFG1_PLL1MF(9) /*!< PLL1 source clock multiply by 11 */ -#define RCU_PLL1_MUL12 CFG1_PLL1MF(10) /*!< PLL1 source clock multiply by 12 */ -#define RCU_PLL1_MUL13 CFG1_PLL1MF(11) /*!< PLL1 source clock multiply by 13 */ -#define RCU_PLL1_MUL14 CFG1_PLL1MF(12) /*!< PLL1 source clock multiply by 14 */ -#define RCU_PLL1_MUL15 CFG1_PLL1MF(13) /*!< PLL1 source clock multiply by 15 */ -#define RCU_PLL1_MUL16 CFG1_PLL1MF(14) /*!< PLL1 source clock multiply by 16 */ -#define RCU_PLL1_MUL20 CFG1_PLL1MF(15) /*!< PLL1 source clock multiply by 20 */ - -/* PLL2 clock multiplication factor */ -#define CFG1_PLL2MF(regval) (BITS(12,15) & ((uint32_t)(regval) << 12)) -#define RCU_PLL2_MUL8 CFG1_PLL2MF(6) /*!< PLL2 source clock multiply by 8 */ -#define RCU_PLL2_MUL9 CFG1_PLL2MF(7) /*!< PLL2 source clock multiply by 9 */ -#define RCU_PLL2_MUL10 CFG1_PLL2MF(8) /*!< PLL2 source clock multiply by 10 */ -#define RCU_PLL2_MUL11 CFG1_PLL2MF(9) /*!< PLL2 source clock multiply by 11 */ -#define RCU_PLL2_MUL12 CFG1_PLL2MF(10) /*!< PLL2 source clock multiply by 12 */ -#define RCU_PLL2_MUL13 CFG1_PLL2MF(11) /*!< PLL2 source clock multiply by 13 */ -#define RCU_PLL2_MUL14 CFG1_PLL2MF(12) /*!< PLL2 source clock multiply by 14 */ -#define RCU_PLL2_MUL15 CFG1_PLL2MF(13) /*!< PLL2 source clock multiply by 15 */ -#define RCU_PLL2_MUL16 CFG1_PLL2MF(14) /*!< PLL2 source clock multiply by 16 */ -#define RCU_PLL2_MUL20 CFG1_PLL2MF(15) /*!< PLL2 source clock multiply by 20 */ - -#ifdef GD32F10X_CL -/* PREDV0 input clock source selection */ -#define RCU_PREDV0SRC_HXTAL ((uint32_t)0x00000000U) /*!< HXTAL selected as PREDV0 input source clock */ -#define RCU_PREDV0SRC_CKPLL1 RCU_CFG1_PREDV0SEL /*!< CK_PLL1 selected as PREDV0 input source clock */ - -/* I2S1 clock source selection */ -#define RCU_I2S1SRC_CKSYS ((uint32_t)0x00000000U) /*!< system clock selected as I2S1 source clock */ -#define RCU_I2S1SRC_CKPLL2_MUL2 RCU_CFG1_I2S1SEL /*!< (CK_PLL2 x 2) selected as I2S1 source clock */ - -/* I2S2 clock source selection */ -#define RCU_I2S2SRC_CKSYS ((uint32_t)0x00000000U) /*!< system clock selected as I2S2 source clock */ -#define RCU_I2S2SRC_CKPLL2_MUL2 RCU_CFG1_I2S2SEL /*!< (CK_PLL2 x 2) selected as I2S2 source clock */ -#endif /* GD32F10X_CL */ - -/* deep-sleep mode voltage */ -#define DSV_DSLPVS(regval) (BITS(0,2) & ((uint32_t)(regval) << 0)) -#define RCU_DEEPSLEEP_V_1_2 DSV_DSLPVS(0) /*!< core voltage is 1.2V in deep-sleep mode */ -#define RCU_DEEPSLEEP_V_1_1 DSV_DSLPVS(1) /*!< core voltage is 1.1V in deep-sleep mode */ -#define RCU_DEEPSLEEP_V_1_0 DSV_DSLPVS(2) /*!< core voltage is 1.0V in deep-sleep mode */ -#define RCU_DEEPSLEEP_V_0_9 DSV_DSLPVS(3) /*!< core voltage is 0.9V in deep-sleep mode */ - -/* function declarations */ -/* initialization, peripheral clock enable/disable functions */ -/* deinitialize the RCU */ -void rcu_deinit(void); -/* enable the peripherals clock */ -void rcu_periph_clock_enable(rcu_periph_enum periph); -/* disable the peripherals clock */ -void rcu_periph_clock_disable(rcu_periph_enum periph); -/* enable the peripherals clock when sleep mode */ -void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph); -/* disable the peripherals clock when sleep mode */ -void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph); -/* reset the peripherals */ -void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset); -/* disable reset the peripheral */ -void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset); -/* reset the BKP domain */ -void rcu_bkp_reset_enable(void); -/* disable the BKP domain reset */ -void rcu_bkp_reset_disable(void); - -/* clock configuration functions */ -/* configure the system clock source */ -void rcu_system_clock_source_config(uint32_t ck_sys); -/* get the system clock source */ -uint32_t rcu_system_clock_source_get(void); -/* configure the AHB prescaler selection */ -void rcu_ahb_clock_config(uint32_t ck_ahb); -/* configure the APB1 prescaler selection */ -void rcu_apb1_clock_config(uint32_t ck_apb1); -/* configure the APB2 prescaler selection */ -void rcu_apb2_clock_config(uint32_t ck_apb2); -/* configure the CK_OUT0 clock source and divider */ -void rcu_ckout0_config(uint32_t ckout0_src); -/* configure the PLL clock source selection and PLL multiply factor */ -void rcu_pll_config(uint32_t pll_src, uint32_t pll_mul); -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -/* configure the PREDV0 division factor and clock source */ -void rcu_predv0_config(uint32_t predv0_div); -#elif defined(GD32F10X_CL) -/* configure the PREDV0 division factor and clock source */ -void rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div); -/* configure the PREDV1 division factor */ -void rcu_predv1_config(uint32_t predv1_div); -/* configure the PLL1 clock */ -void rcu_pll1_config(uint32_t pll_mul); -/* configure the PLL2 clock */ -void rcu_pll2_config(uint32_t pll_mul); -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - -/* peripheral clock configuration functions */ -/* configure the ADC division factor */ -void rcu_adc_clock_config(uint32_t adc_psc); -/* configure the USBD/USBFS prescaler factor */ -void rcu_usb_clock_config(uint32_t usb_psc); -/* configure the RTC clock source selection */ -void rcu_rtc_clock_config(uint32_t rtc_clock_source); -#ifdef GD32F10X_CL -/* configure the I2S1 clock source selection */ -void rcu_i2s1_clock_config(uint32_t i2s_clock_source); -/* configure the I2S2 clock source selection */ -void rcu_i2s2_clock_config(uint32_t i2s_clock_source); -#endif /* GD32F10X_CL */ - -/* interrupt & flag functions */ -/* get the clock stabilization and periphral reset flags */ -FlagStatus rcu_flag_get(rcu_flag_enum flag); -/* clear the reset flag */ -void rcu_all_reset_flag_clear(void); -/* get the clock stabilization interrupt and ckm flags */ -FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag); -/* clear the interrupt flags */ -void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear); -/* enable the stabilization interrupt */ -void rcu_interrupt_enable(rcu_int_enum stab_int); -/* disable the stabilization interrupt */ -void rcu_interrupt_disable(rcu_int_enum stab_int); - -/* oscillator configuration functions */ -/* wait for oscillator stabilization flags is SET or oscillator startup is timeout */ -ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci); -/* turn on the oscillator */ -void rcu_osci_on(rcu_osci_type_enum osci); -/* turn off the oscillator */ -void rcu_osci_off(rcu_osci_type_enum osci); -/* enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */ -void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci); -/* disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */ -void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci); -/* enable the HXTAL clock monitor */ -void rcu_hxtal_clock_monitor_enable(void); -/* disable the HXTAL clock monitor */ -void rcu_hxtal_clock_monitor_disable(void); - -/* set the IRC8M adjust value */ -void rcu_irc8m_adjust_value_set(uint8_t irc8m_adjval); -/* set the deep sleep mode voltage */ -void rcu_deepsleep_voltage_set(uint32_t dsvol); - -/* get the system clock, bus and peripheral clock frequency */ -uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock); - -#endif /* GD32F10X_RCU_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_rtc.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_rtc.h deleted file mode 100644 index 2604d25..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_rtc.h +++ /dev/null @@ -1,151 +0,0 @@ -/*! - \file gd32f10x_rtc.h - \brief definitions for the RTC - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_RTC_H -#define GD32F10X_RTC_H - -#include "gd32f10x.h" - -/* RTC definitions */ -#define RTC RTC_BASE - -/* registers definitions */ -#define RTC_INTEN REG32(RTC + 0x00U) /*!< interrupt enable register */ -#define RTC_CTL REG32(RTC + 0x04U) /*!< control register */ -#define RTC_PSCH REG32(RTC + 0x08U) /*!< prescaler high register */ -#define RTC_PSCL REG32(RTC + 0x0CU) /*!< prescaler low register */ -#define RTC_DIVH REG32(RTC + 0x10U) /*!< divider high register */ -#define RTC_DIVL REG32(RTC + 0x14U) /*!< divider low register */ -#define RTC_CNTH REG32(RTC + 0x18U) /*!< counter high register */ -#define RTC_CNTL REG32(RTC + 0x1CU) /*!< counter low register */ -#define RTC_ALRMH REG32(RTC + 0x20U) /*!< alarm high register */ -#define RTC_ALRML REG32(RTC + 0x24U) /*!< alarm low register */ - -/* bits definitions */ -/* RTC_INTEN */ -#define RTC_INTEN_SCIE BIT(0) /*!< second interrupt enable */ -#define RTC_INTEN_ALRMIE BIT(1) /*!< alarm interrupt enable */ -#define RTC_INTEN_OVIE BIT(2) /*!< overflow interrupt enable */ - -/* RTC_CTL */ -#define RTC_CTL_SCIF BIT(0) /*!< second interrupt flag */ -#define RTC_CTL_ALRMIF BIT(1) /*!< alarm interrupt flag */ -#define RTC_CTL_OVIF BIT(2) /*!< overflow interrupt flag */ -#define RTC_CTL_RSYNF BIT(3) /*!< registers synchronized flag */ -#define RTC_CTL_CMF BIT(4) /*!< configuration mode flag */ -#define RTC_CTL_LWOFF BIT(5) /*!< last write operation finished flag */ - -/* RTC_PSCH */ -#define RTC_PSCH_PSC BITS(0,3) /*!< prescaler high value */ - -/* RTC_PSCL */ -#define RTC_PSCL_PSC BITS(0,15) /*!< prescaler low value */ - -/* RTC_DIVH */ -#define RTC_DIVH_DIV BITS(0,3) /*!< divider high value */ - -/* RTC_DIVL */ -#define RTC_DIVL_DIV BITS(0,15) /*!< divider low value */ - -/* RTC_CNTH */ -#define RTC_CNTH_CNT BITS(0,15) /*!< counter high value */ - -/* RTC_CNTL */ -#define RTC_CNTL_CNT BITS(0,15) /*!< counter low value */ - -/* RTC_ALRMH */ -#define RTC_ALRMH_ALRM BITS(0,15) /*!< alarm high value */ - -/* RTC_ALRML */ -#define RTC_ALRML_ALRM BITS(0,15) /*!< alarm low value */ - -/* constants definitions */ -/* RTC interrupt enable or disable definitions */ -#define RTC_INT_SECOND RTC_INTEN_SCIE /*!< second interrupt enable */ -#define RTC_INT_ALARM RTC_INTEN_ALRMIE /*!< alarm interrupt enable */ -#define RTC_INT_OVERFLOW RTC_INTEN_OVIE /*!< overflow interrupt enable */ - -/* RTC interrupt flag definitions */ -#define RTC_INT_FLAG_SECOND RTC_CTL_SCIF /*!< second interrupt flag */ -#define RTC_INT_FLAG_ALARM RTC_CTL_ALRMIF /*!< alarm interrupt flag */ -#define RTC_INT_FLAG_OVERFLOW RTC_CTL_OVIF /*!< overflow interrupt flag */ - -/* RTC flag definitions */ -#define RTC_FLAG_SECOND RTC_CTL_SCIF /*!< second interrupt flag */ -#define RTC_FLAG_ALARM RTC_CTL_ALRMIF /*!< alarm interrupt flag */ -#define RTC_FLAG_OVERFLOW RTC_CTL_OVIF /*!< overflow interrupt flag */ -#define RTC_FLAG_RSYN RTC_CTL_RSYNF /*!< registers synchronized flag */ -#define RTC_FLAG_LWOF RTC_CTL_LWOFF /*!< last write operation finished flag */ - -/* function declarations */ -/* initialization functions */ -/* enter RTC configuration mode */ -void rtc_configuration_mode_enter(void); -/* exit RTC configuration mode */ -void rtc_configuration_mode_exit(void); -/* set RTC counter value */ -void rtc_counter_set(uint32_t cnt); -/* set RTC prescaler value */ -void rtc_prescaler_set(uint32_t psc); - -/* operation functions */ -/* wait RTC last write operation finished flag set */ -void rtc_lwoff_wait(void); -/* wait RTC registers synchronized flag set */ -void rtc_register_sync_wait(void); -/* set RTC alarm value */ -void rtc_alarm_config(uint32_t alarm); -/* get RTC counter value */ -uint32_t rtc_counter_get(void); -/* get RTC divider value */ -uint32_t rtc_divider_get(void); - -/* flag & interrupt functions */ -/* get RTC flag status */ -FlagStatus rtc_flag_get(uint32_t flag); -/* clear RTC flag status */ -void rtc_flag_clear(uint32_t flag); -/* get RTC interrupt flag status */ -FlagStatus rtc_interrupt_flag_get(uint32_t flag); -/* clear RTC interrupt flag status */ -void rtc_interrupt_flag_clear(uint32_t flag); -/* enable RTC interrupt */ -void rtc_interrupt_enable(uint32_t interrupt); -/* disable RTC interrupt */ -void rtc_interrupt_disable(uint32_t interrupt); - -#endif /* GD32F10X_RTC_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_sdio.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_sdio.h deleted file mode 100644 index 0f18d56..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_sdio.h +++ /dev/null @@ -1,433 +0,0 @@ -/*! - \file gd32f10x_sdio.h - \brief definitions for the SDIO - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_SDIO_H -#define GD32F10X_SDIO_H - -#include "gd32f10x.h" - -/* SDIO definitions */ -#define SDIO SDIO_BASE - -/* registers definitions */ -#define SDIO_PWRCTL REG32(SDIO + 0x00U) /*!< SDIO power control register */ -#define SDIO_CLKCTL REG32(SDIO + 0x04U) /*!< SDIO clock control register */ -#define SDIO_CMDAGMT REG32(SDIO + 0x08U) /*!< SDIO command argument register */ -#define SDIO_CMDCTL REG32(SDIO + 0x0CU) /*!< SDIO command control register */ -#define SDIO_RSPCMDIDX REG32(SDIO + 0x10U) /*!< SDIO command index response register */ -#define SDIO_RESP0 REG32(SDIO + 0x14U) /*!< SDIO response register 0 */ -#define SDIO_RESP1 REG32(SDIO + 0x18U) /*!< SDIO response register 1 */ -#define SDIO_RESP2 REG32(SDIO + 0x1CU) /*!< SDIO response register 2 */ -#define SDIO_RESP3 REG32(SDIO + 0x20U) /*!< SDIO response register 3 */ -#define SDIO_DATATO REG32(SDIO + 0x24U) /*!< SDIO data timeout register */ -#define SDIO_DATALEN REG32(SDIO + 0x28U) /*!< SDIO data length register */ -#define SDIO_DATACTL REG32(SDIO + 0x2CU) /*!< SDIO data control register */ -#define SDIO_DATACNT REG32(SDIO + 0x30U) /*!< SDIO data counter register */ -#define SDIO_STAT REG32(SDIO + 0x34U) /*!< SDIO status register */ -#define SDIO_INTC REG32(SDIO + 0x38U) /*!< SDIO interrupt clear register */ -#define SDIO_INTEN REG32(SDIO + 0x3CU) /*!< SDIO interrupt enable register */ -#define SDIO_FIFOCNT REG32(SDIO + 0x48U) /*!< SDIO FIFO counter register */ -#define SDIO_FIFO REG32(SDIO + 0x80U) /*!< SDIO FIFO data register */ - -/* bits definitions */ -/* SDIO_PWRCTL */ -#define SDIO_PWRCTL_PWRCTL BITS(0,1) /*!< SDIO power control bits */ - -/* SDIO_CLKCTL */ -#define SDIO_CLKCTL_DIV BITS(0,7) /*!< clock division */ -#define SDIO_CLKCTL_CLKEN BIT(8) /*!< SDIO_CLK clock output enable bit */ -#define SDIO_CLKCTL_CLKPWRSAV BIT(9) /*!< SDIO_CLK clock dynamic switch on/off for power saving */ -#define SDIO_CLKCTL_CLKBYP BIT(10) /*!< clock bypass enable bit */ -#define SDIO_CLKCTL_BUSMODE BITS(11,12) /*!< SDIO card bus mode control bit */ -#define SDIO_CLKCTL_CLKEDGE BIT(13) /*!< SDIO_CLK clock edge selection bit */ -#define SDIO_CLKCTL_HWCLKEN BIT(14) /*!< hardware clock control enable bit */ - -/* SDIO_CMDAGMT */ -#define SDIO_CMDAGMT_CMDAGMT BITS(0,31) /*!< SDIO card command argument */ - -/* SDIO_CMDCTL */ -#define SDIO_CMDCTL_CMDIDX BITS(0,5) /*!< command index */ -#define SDIO_CMDCTL_CMDRESP BITS(6,7) /*!< command response type bits */ -#define SDIO_CMDCTL_INTWAIT BIT(8) /*!< interrupt wait instead of timeout */ -#define SDIO_CMDCTL_WAITDEND BIT(9) /*!< wait for ends of data transfer */ -#define SDIO_CMDCTL_CSMEN BIT(10) /*!< command state machine(CSM) enable bit */ -#define SDIO_CMDCTL_SUSPEND BIT(11) /*!< SD I/O suspend command(SD I/O only) */ -#define SDIO_CMDCTL_ENCMDC BIT(12) /*!< CMD completion signal enabled (CE-ATA only) */ -#define SDIO_CMDCTL_NINTEN BIT(13) /*!< no CE-ATA interrupt (CE-ATA only) */ -#define SDIO_CMDCTL_ATAEN BIT(14) /*!< CE-ATA command enable(CE-ATA only) */ - -/* SDIO_DATATO */ -#define SDIO_DATATO_DATATO BITS(0,31) /*!< data timeout period */ - -/* SDIO_DATALEN */ -#define SDIO_DATALEN_DATALEN BITS(0,24) /*!< data transfer length */ - -/* SDIO_DATACTL */ -#define SDIO_DATACTL_DATAEN BIT(0) /*!< data transfer enabled bit */ -#define SDIO_DATACTL_DATADIR BIT(1) /*!< data transfer direction */ -#define SDIO_DATACTL_TRANSMOD BIT(2) /*!< data transfer mode */ -#define SDIO_DATACTL_DMAEN BIT(3) /*!< DMA enable bit */ -#define SDIO_DATACTL_BLKSZ BITS(4,7) /*!< data block size */ -#define SDIO_DATACTL_RWEN BIT(8) /*!< read wait mode enabled(SD I/O only) */ -#define SDIO_DATACTL_RWSTOP BIT(9) /*!< read wait stop(SD I/O only) */ -#define SDIO_DATACTL_RWTYPE BIT(10) /*!< read wait type(SD I/O only) */ -#define SDIO_DATACTL_IOEN BIT(11) /*!< SD I/O specific function enable(SD I/O only) */ - -/* SDIO_STAT */ -#define SDIO_STAT_CCRCERR BIT(0) /*!< command response received (CRC check failed) */ -#define SDIO_STAT_DTCRCERR BIT(1) /*!< data block sent/received (CRC check failed) */ -#define SDIO_STAT_CMDTMOUT BIT(2) /*!< command response timeout */ -#define SDIO_STAT_DTTMOUT BIT(3) /*!< data timeout */ -#define SDIO_STAT_TXURE BIT(4) /*!< transmit FIFO underrun error occurs */ -#define SDIO_STAT_RXORE BIT(5) /*!< received FIFO overrun error occurs */ -#define SDIO_STAT_CMDRECV BIT(6) /*!< command response received (CRC check passed) */ -#define SDIO_STAT_CMDSEND BIT(7) /*!< command sent (no response required) */ -#define SDIO_STAT_DTEND BIT(8) /*!< data end (data counter, SDIO_DATACNT, is zero) */ -#define SDIO_STAT_STBITE BIT(9) /*!< start bit error in the bus */ -#define SDIO_STAT_DTBLKEND BIT(10) /*!< data block sent/received (CRC check passed) */ -#define SDIO_STAT_CMDRUN BIT(11) /*!< command transmission in progress */ -#define SDIO_STAT_TXRUN BIT(12) /*!< data transmission in progress */ -#define SDIO_STAT_RXRUN BIT(13) /*!< data reception in progress */ -#define SDIO_STAT_TFH BIT(14) /*!< transmit FIFO is half empty: at least 8 words can be written into the FIFO */ -#define SDIO_STAT_RFH BIT(15) /*!< receive FIFO is half full: at least 8 words can be read in the FIFO */ -#define SDIO_STAT_TFF BIT(16) /*!< transmit FIFO is full */ -#define SDIO_STAT_RFF BIT(17) /*!< receive FIFO is full */ -#define SDIO_STAT_TFE BIT(18) /*!< transmit FIFO is empty */ -#define SDIO_STAT_RFE BIT(19) /*!< receive FIFO is empty */ -#define SDIO_STAT_TXDTVAL BIT(20) /*!< data is valid in transmit FIFO */ -#define SDIO_STAT_RXDTVAL BIT(21) /*!< data is valid in receive FIFO */ -#define SDIO_STAT_SDIOINT BIT(22) /*!< SD I/O interrupt received */ -#define SDIO_STAT_ATAEND BIT(23) /*!< CE-ATA command completion signal received (only for CMD61) */ - -/* SDIO_INTC */ -#define SDIO_INTC_CCRCERRC BIT(0) /*!< CCRCERR flag clear bit */ -#define SDIO_INTC_DTCRCERRC BIT(1) /*!< DTCRCERR flag clear bit */ -#define SDIO_INTC_CMDTMOUTC BIT(2) /*!< CMDTMOUT flag clear bit */ -#define SDIO_INTC_DTTMOUTC BIT(3) /*!< DTTMOUT flag clear bit */ -#define SDIO_INTC_TXUREC BIT(4) /*!< TXURE flag clear bit */ -#define SDIO_INTC_RXOREC BIT(5) /*!< RXORE flag clear bit */ -#define SDIO_INTC_CMDRECVC BIT(6) /*!< CMDRECV flag clear bit */ -#define SDIO_INTC_CMDSENDC BIT(7) /*!< CMDSEND flag clear bit */ -#define SDIO_INTC_DTENDC BIT(8) /*!< DTEND flag clear bit */ -#define SDIO_INTC_STBITEC BIT(9) /*!< STBITE flag clear bit */ -#define SDIO_INTC_DTBLKENDC BIT(10) /*!< DTBLKEND flag clear bit */ -#define SDIO_INTC_SDIOINTC BIT(22) /*!< SDIOINT flag clear bit */ -#define SDIO_INTC_ATAENDC BIT(23) /*!< ATAEND flag clear bit */ - -/* SDIO_INTEN */ -#define SDIO_INTEN_CCRCERRIE BIT(0) /*!< command response CRC fail interrupt enable */ -#define SDIO_INTEN_DTCRCERRIE BIT(1) /*!< data CRC fail interrupt enable */ -#define SDIO_INTEN_CMDTMOUTIE BIT(2) /*!< command response timeout interrupt enable */ -#define SDIO_INTEN_DTTMOUTIE BIT(3) /*!< data timeout interrupt enable */ -#define SDIO_INTEN_TXUREIE BIT(4) /*!< transmit FIFO underrun error interrupt enable */ -#define SDIO_INTEN_RXOREIE BIT(5) /*!< received FIFO overrun error interrupt enable */ -#define SDIO_INTEN_CMDRECVIE BIT(6) /*!< command response received interrupt enable */ -#define SDIO_INTEN_CMDSENDIE BIT(7) /*!< command sent interrupt enable */ -#define SDIO_INTEN_DTENDIE BIT(8) /*!< data end interrupt enable */ -#define SDIO_INTEN_STBITEIE BIT(9) /*!< start bit error interrupt enable */ -#define SDIO_INTEN_DTBLKENDIE BIT(10) /*!< data block end interrupt enable */ -#define SDIO_INTEN_CMDRUNIE BIT(11) /*!< command transmission interrupt enable */ -#define SDIO_INTEN_TXRUNIE BIT(12) /*!< data transmission interrupt enable */ -#define SDIO_INTEN_RXRUNIE BIT(13) /*!< data reception interrupt enable */ -#define SDIO_INTEN_TFHIE BIT(14) /*!< transmit FIFO half empty interrupt enable */ -#define SDIO_INTEN_RFHIE BIT(15) /*!< receive FIFO half full interrupt enable */ -#define SDIO_INTEN_TFFIE BIT(16) /*!< transmit FIFO full interrupt enable */ -#define SDIO_INTEN_RFFIE BIT(17) /*!< receive FIFO full interrupt enable */ -#define SDIO_INTEN_TFEIE BIT(18) /*!< transmit FIFO empty interrupt enable */ -#define SDIO_INTEN_RFEIE BIT(19) /*!< receive FIFO empty interrupt enable */ -#define SDIO_INTEN_TXDTVALIE BIT(20) /*!< data valid in transmit FIFO interrupt enable */ -#define SDIO_INTEN_RXDTVALIE BIT(21) /*!< data valid in receive FIFO interrupt enable */ -#define SDIO_INTEN_SDIOINTIE BIT(22) /*!< SD I/O interrupt received interrupt enable */ -#define SDIO_INTEN_ATAENDIE BIT(23) /*!< CE-ATA command completion signal received interrupt enable */ - -/* SDIO_FIFO */ -#define SDIO_FIFO_FIFODT BITS(0,31) /*!< receive FIFO data or transmit FIFO data */ - -/* constants definitions */ -/* SDIO flags */ -#define SDIO_FLAG_CCRCERR BIT(0) /*!< command response received (CRC check failed) flag */ -#define SDIO_FLAG_DTCRCERR BIT(1) /*!< data block sent/received (CRC check failed) flag */ -#define SDIO_FLAG_CMDTMOUT BIT(2) /*!< command response timeout flag */ -#define SDIO_FLAG_DTTMOUT BIT(3) /*!< data timeout flag */ -#define SDIO_FLAG_TXURE BIT(4) /*!< transmit FIFO underrun error occurs flag */ -#define SDIO_FLAG_RXORE BIT(5) /*!< received FIFO overrun error occurs flag */ -#define SDIO_FLAG_CMDRECV BIT(6) /*!< command response received (CRC check passed) flag */ -#define SDIO_FLAG_CMDSEND BIT(7) /*!< command sent (no response required) flag */ -#define SDIO_FLAG_DTEND BIT(8) /*!< data end (data counter, SDIO_DATACNT, is zero) flag */ -#define SDIO_FLAG_STBITE BIT(9) /*!< start bit error in the bus flag */ -#define SDIO_FLAG_DTBLKEND BIT(10) /*!< data block sent/received (CRC check passed) flag */ -#define SDIO_FLAG_CMDRUN BIT(11) /*!< command transmission in progress flag */ -#define SDIO_FLAG_TXRUN BIT(12) /*!< data transmission in progress flag */ -#define SDIO_FLAG_RXRUN BIT(13) /*!< data reception in progress flag */ -#define SDIO_FLAG_TFH BIT(14) /*!< transmit FIFO is half empty flag: at least 8 words can be written into the FIFO */ -#define SDIO_FLAG_RFH BIT(15) /*!< receive FIFO is half full flag: at least 8 words can be read in the FIFO */ -#define SDIO_FLAG_TFF BIT(16) /*!< transmit FIFO is full flag */ -#define SDIO_FLAG_RFF BIT(17) /*!< receive FIFO is full flag */ -#define SDIO_FLAG_TFE BIT(18) /*!< transmit FIFO is empty flag */ -#define SDIO_FLAG_RFE BIT(19) /*!< receive FIFO is empty flag */ -#define SDIO_FLAG_TXDTVAL BIT(20) /*!< data is valid in transmit FIFO flag */ -#define SDIO_FLAG_RXDTVAL BIT(21) /*!< data is valid in receive FIFO flag */ -#define SDIO_FLAG_SDIOINT BIT(22) /*!< SD I/O interrupt received flag */ -#define SDIO_FLAG_ATAEND BIT(23) /*!< CE-ATA command completion signal received (only for CMD61) flag */ - -/* SDIO interrupt enable or disable */ -#define SDIO_INT_CCRCERR BIT(0) /*!< SDIO CCRCERR interrupt */ -#define SDIO_INT_DTCRCERR BIT(1) /*!< SDIO DTCRCERR interrupt */ -#define SDIO_INT_CMDTMOUT BIT(2) /*!< SDIO CMDTMOUT interrupt */ -#define SDIO_INT_DTTMOUT BIT(3) /*!< SDIO DTTMOUT interrupt */ -#define SDIO_INT_TXURE BIT(4) /*!< SDIO TXURE interrupt */ -#define SDIO_INT_RXORE BIT(5) /*!< SDIO RXORE interrupt */ -#define SDIO_INT_CMDRECV BIT(6) /*!< SDIO CMDRECV interrupt */ -#define SDIO_INT_CMDSEND BIT(7) /*!< SDIO CMDSEND interrupt */ -#define SDIO_INT_DTEND BIT(8) /*!< SDIO DTEND interrupt */ -#define SDIO_INT_STBITE BIT(9) /*!< SDIO STBITE interrupt */ -#define SDIO_INT_DTBLKEND BIT(10) /*!< SDIO DTBLKEND interrupt */ -#define SDIO_INT_CMDRUN BIT(11) /*!< SDIO CMDRUN interrupt */ -#define SDIO_INT_TXRUN BIT(12) /*!< SDIO TXRUN interrupt */ -#define SDIO_INT_RXRUN BIT(13) /*!< SDIO RXRUN interrupt */ -#define SDIO_INT_TFH BIT(14) /*!< SDIO TFH interrupt */ -#define SDIO_INT_RFH BIT(15) /*!< SDIO RFH interrupt */ -#define SDIO_INT_TFF BIT(16) /*!< SDIO TFF interrupt */ -#define SDIO_INT_RFF BIT(17) /*!< SDIO RFF interrupt */ -#define SDIO_INT_TFE BIT(18) /*!< SDIO TFE interrupt */ -#define SDIO_INT_RFE BIT(19) /*!< SDIO RFE interrupt */ -#define SDIO_INT_TXDTVAL BIT(20) /*!< SDIO TXDTVAL interrupt */ -#define SDIO_INT_RXDTVAL BIT(21) /*!< SDIO RXDTVAL interrupt */ -#define SDIO_INT_SDIOINT BIT(22) /*!< SDIO SDIOINT interrupt */ -#define SDIO_INT_ATAEND BIT(23) /*!< SDIO ATAEND interrupt */ - -/* SDIO interrupt flags */ -#define SDIO_INT_FLAG_CCRCERR BIT(0) /*!< SDIO CCRCERR interrupt flag */ -#define SDIO_INT_FLAG_DTCRCERR BIT(1) /*!< SDIO DTCRCERR interrupt flag */ -#define SDIO_INT_FLAG_CMDTMOUT BIT(2) /*!< SDIO CMDTMOUT interrupt flag */ -#define SDIO_INT_FLAG_DTTMOUT BIT(3) /*!< SDIO DTTMOUT interrupt flag */ -#define SDIO_INT_FLAG_TXURE BIT(4) /*!< SDIO TXURE interrupt flag */ -#define SDIO_INT_FLAG_RXORE BIT(5) /*!< SDIO RXORE interrupt flag */ -#define SDIO_INT_FLAG_CMDRECV BIT(6) /*!< SDIO CMDRECV interrupt flag */ -#define SDIO_INT_FLAG_CMDSEND BIT(7) /*!< SDIO CMDSEND interrupt flag */ -#define SDIO_INT_FLAG_DTEND BIT(8) /*!< SDIO DTEND interrupt flag */ -#define SDIO_INT_FLAG_STBITE BIT(9) /*!< SDIO STBITE interrupt flag */ -#define SDIO_INT_FLAG_DTBLKEND BIT(10) /*!< SDIO DTBLKEND interrupt flag */ -#define SDIO_INT_FLAG_CMDRUN BIT(11) /*!< SDIO CMDRUN interrupt flag */ -#define SDIO_INT_FLAG_TXRUN BIT(12) /*!< SDIO TXRUN interrupt flag */ -#define SDIO_INT_FLAG_RXRUN BIT(13) /*!< SDIO RXRUN interrupt flag */ -#define SDIO_INT_FLAG_TFH BIT(14) /*!< SDIO TFH interrupt flag */ -#define SDIO_INT_FLAG_RFH BIT(15) /*!< SDIO RFH interrupt flag */ -#define SDIO_INT_FLAG_TFF BIT(16) /*!< SDIO TFF interrupt flag */ -#define SDIO_INT_FLAG_RFF BIT(17) /*!< SDIO RFF interrupt flag */ -#define SDIO_INT_FLAG_TFE BIT(18) /*!< SDIO TFE interrupt flag */ -#define SDIO_INT_FLAG_RFE BIT(19) /*!< SDIO RFE interrupt flag */ -#define SDIO_INT_FLAG_TXDTVAL BIT(20) /*!< SDIO TXDTVAL interrupt flag */ -#define SDIO_INT_FLAG_RXDTVAL BIT(21) /*!< SDIO RXDTVAL interrupt flag */ -#define SDIO_INT_FLAG_SDIOINT BIT(22) /*!< SDIO SDIOINT interrupt flag */ -#define SDIO_INT_FLAG_ATAEND BIT(23) /*!< SDIO ATAEND interrupt flag */ - -/* SDIO power control */ -#define PWRCTL_PWRCTL(regval) (BITS(0,1) & ((uint32_t)(regval) << 0)) -#define SDIO_POWER_OFF PWRCTL_PWRCTL(0) /*!< SDIO power off */ -#define SDIO_POWER_ON PWRCTL_PWRCTL(3) /*!< SDIO power on */ - -/* SDIO card bus mode control */ -#define CLKCTL_BUSMODE(regval) (BITS(11,12) & ((uint32_t)(regval) << 11)) -#define SDIO_BUSMODE_1BIT CLKCTL_BUSMODE(0) /*!< 1-bit SDIO card bus mode */ -#define SDIO_BUSMODE_4BIT CLKCTL_BUSMODE(1) /*!< 4-bit SDIO card bus mode */ -#define SDIO_BUSMODE_8BIT CLKCTL_BUSMODE(2) /*!< 8-bit SDIO card bus mode */ - -/* SDIO_CLK clock edge selection */ -#define SDIO_SDIOCLKEDGE_RISING ((uint32_t)0x00000000U)/*!< select the rising edge of the SDIOCLK to generate SDIO_CLK */ -#define SDIO_SDIOCLKEDGE_FALLING SDIO_CLKCTL_CLKEDGE /*!< select the falling edge of the SDIOCLK to generate SDIO_CLK */ - -/* clock bypass enable or disable */ -#define SDIO_CLOCKBYPASS_DISABLE ((uint32_t)0x00000000U)/*!< no bypass */ -#define SDIO_CLOCKBYPASS_ENABLE SDIO_CLKCTL_CLKBYP /*!< clock bypass */ - -/* SDIO_CLK clock dynamic switch on/off for power saving */ -#define SDIO_CLOCKPWRSAVE_DISABLE ((uint32_t)0x00000000U)/*!< SDIO_CLK clock is always on */ -#define SDIO_CLOCKPWRSAVE_ENABLE SDIO_CLKCTL_CLKPWRSAV /*!< SDIO_CLK closed when bus is idle */ - -/* SDIO command response type */ -#define CMDCTL_CMDRESP(regval) (BITS(6,7) & ((uint32_t)(regval) << 6)) -#define SDIO_RESPONSETYPE_NO CMDCTL_CMDRESP(0) /*!< no response */ -#define SDIO_RESPONSETYPE_SHORT CMDCTL_CMDRESP(1) /*!< short response */ -#define SDIO_RESPONSETYPE_LONG CMDCTL_CMDRESP(3) /*!< long response */ - -/* command state machine wait type */ -#define SDIO_WAITTYPE_NO ((uint32_t)0x00000000U)/*!< not wait interrupt */ -#define SDIO_WAITTYPE_INTERRUPT SDIO_CMDCTL_INTWAIT /*!< wait interrupt */ -#define SDIO_WAITTYPE_DATAEND SDIO_CMDCTL_WAITDEND /*!< wait the end of data transfer */ - -#define SDIO_RESPONSE0 ((uint32_t)0x00000000U)/*!< card response[31:0]/card response[127:96] */ -#define SDIO_RESPONSE1 ((uint32_t)0x00000001U)/*!< card response[95:64] */ -#define SDIO_RESPONSE2 ((uint32_t)0x00000002U)/*!< card response[63:32] */ -#define SDIO_RESPONSE3 ((uint32_t)0x00000003U)/*!< card response[31:1], plus bit 0 */ - -/* SDIO data block size */ -#define DATACTL_BLKSZ(regval) (BITS(4,7) & ((uint32_t)(regval) << 4)) -#define SDIO_DATABLOCKSIZE_1BYTE DATACTL_BLKSZ(0) /*!< block size = 1 byte */ -#define SDIO_DATABLOCKSIZE_2BYTES DATACTL_BLKSZ(1) /*!< block size = 2 bytes */ -#define SDIO_DATABLOCKSIZE_4BYTES DATACTL_BLKSZ(2) /*!< block size = 4 bytes */ -#define SDIO_DATABLOCKSIZE_8BYTES DATACTL_BLKSZ(3) /*!< block size = 8 bytes */ -#define SDIO_DATABLOCKSIZE_16BYTES DATACTL_BLKSZ(4) /*!< block size = 16 bytes */ -#define SDIO_DATABLOCKSIZE_32BYTES DATACTL_BLKSZ(5) /*!< block size = 32 bytes */ -#define SDIO_DATABLOCKSIZE_64BYTES DATACTL_BLKSZ(6) /*!< block size = 64 bytes */ -#define SDIO_DATABLOCKSIZE_128BYTES DATACTL_BLKSZ(7) /*!< block size = 128 bytes */ -#define SDIO_DATABLOCKSIZE_256BYTES DATACTL_BLKSZ(8) /*!< block size = 256 bytes */ -#define SDIO_DATABLOCKSIZE_512BYTES DATACTL_BLKSZ(9) /*!< block size = 512 bytes */ -#define SDIO_DATABLOCKSIZE_1024BYTES DATACTL_BLKSZ(10) /*!< block size = 1024 bytes */ -#define SDIO_DATABLOCKSIZE_2048BYTES DATACTL_BLKSZ(11) /*!< block size = 2048 bytes */ -#define SDIO_DATABLOCKSIZE_4096BYTES DATACTL_BLKSZ(12) /*!< block size = 4096 bytes */ -#define SDIO_DATABLOCKSIZE_8192BYTES DATACTL_BLKSZ(13) /*!< block size = 8192 bytes */ -#define SDIO_DATABLOCKSIZE_16384BYTES DATACTL_BLKSZ(14) /*!< block size = 16384 bytes */ - -/* SDIO data transfer mode */ -#define SDIO_TRANSMODE_BLOCK ((uint32_t)0x00000000U)/*!< block transfer */ -#define SDIO_TRANSMODE_STREAM SDIO_DATACTL_TRANSMOD /*!< stream transfer or SDIO multibyte transfer */ - -/* SDIO data transfer direction */ -#define SDIO_TRANSDIRECTION_TOCARD ((uint32_t)0x00000000U)/*!< write data to card */ -#define SDIO_TRANSDIRECTION_TOSDIO SDIO_DATACTL_DATADIR /*!< read data from card */ - -/* SDIO read wait type */ -#define SDIO_READWAITTYPE_DAT2 ((uint32_t)0x00000000U)/*!< read wait control using SDIO_DAT[2] */ -#define SDIO_READWAITTYPE_CLK SDIO_DATACTL_RWTYPE /*!< read wait control by stopping SDIO_CLK */ - -/* function declarations */ -/* de/initialization functions, hardware clock, bus mode, power_state and SDIO clock configuration */ -/* deinitialize the SDIO */ -void sdio_deinit(void); -/* configure the SDIO clock */ -void sdio_clock_config(uint32_t clock_edge, uint32_t clock_bypass, uint32_t clock_powersave, uint16_t clock_division); -/* enable hardware clock control */ -void sdio_hardware_clock_enable(void); -/* disable hardware clock control */ -void sdio_hardware_clock_disable(void); -/* set different SDIO card bus mode */ -void sdio_bus_mode_set(uint32_t bus_mode); -/* set the SDIO power state */ -void sdio_power_state_set(uint32_t power_state); -/* get the SDIO power state */ -uint32_t sdio_power_state_get(void); -/* enable SDIO_CLK clock output */ -void sdio_clock_enable(void); -/* disable SDIO_CLK clock output */ -void sdio_clock_disable(void); - -/* configure the command index, argument, response type, wait type and CSM to send command functions */ -/* configure the command and response */ -void sdio_command_response_config(uint32_t cmd_index, uint32_t cmd_argument, uint32_t response_type); -/* set the command state machine wait type */ -void sdio_wait_type_set(uint32_t wait_type); -/* enable the CSM(command state machine) */ -void sdio_csm_enable(void); -/* disable the CSM(command state machine) */ -void sdio_csm_disable(void); -/* get the last response command index */ -uint8_t sdio_command_index_get(void); -/* get the response for the last received command */ -uint32_t sdio_response_get(uint32_t responsex); - -/* configure the data timeout, length, block size, transfer mode, direction and DSM for data transfer functions */ -/* configure the data timeout, data length and data block size */ -void sdio_data_config(uint32_t data_timeout, uint32_t data_length, uint32_t data_blocksize); -/* configure the data transfer mode and direction */ -void sdio_data_transfer_config(uint32_t transfer_mode, uint32_t transfer_direction); -/* enable the DSM(data state machine) for data transfer */ -void sdio_dsm_enable(void); -/* disable the DSM(data state machine) */ -void sdio_dsm_disable(void); -/* write data(one word) to the transmit FIFO */ -void sdio_data_write(uint32_t data); -/* read data(one word) from the receive FIFO */ -uint32_t sdio_data_read(void); -/* get the number of remaining data bytes to be transferred to card */ -uint32_t sdio_data_counter_get(void); -/* get the number of words remaining to be written or read from FIFO */ -uint32_t sdio_fifo_counter_get(void); -/* enable the DMA request for SDIO */ -void sdio_dma_enable(void); -/* disable the DMA request for SDIO */ -void sdio_dma_disable(void); - -/* flag and interrupt functions */ -/* get the flags state of SDIO */ -FlagStatus sdio_flag_get(uint32_t flag); -/* clear the pending flags of SDIO */ -void sdio_flag_clear(uint32_t flag); -/* enable the SDIO interrupt */ -void sdio_interrupt_enable(uint32_t int_flag); -/* disable the SDIO interrupt */ -void sdio_interrupt_disable(uint32_t int_flag); -/* get the interrupt flags state of SDIO */ -FlagStatus sdio_interrupt_flag_get(uint32_t int_flag); -/* clear the interrupt pending flags of SDIO */ -void sdio_interrupt_flag_clear(uint32_t int_flag); - -/* SD I/O card functions */ -/* enable the read wait mode(SD I/O only) */ -void sdio_readwait_enable(void); -/* disable the read wait mode(SD I/O only) */ -void sdio_readwait_disable(void); -/* enable the function that stop the read wait process(SD I/O only) */ -void sdio_stop_readwait_enable(void); -/* disable the function that stop the read wait process(SD I/O only) */ -void sdio_stop_readwait_disable(void); -/* set the read wait type(SD I/O only) */ -void sdio_readwait_type_set(uint32_t readwait_type); -/* enable the SD I/O mode specific operation(SD I/O only) */ -void sdio_operation_enable(void); -/* disable the SD I/O mode specific operation(SD I/O only) */ -void sdio_operation_disable(void); -/* enable the SD I/O suspend operation(SD I/O only) */ -void sdio_suspend_enable(void); -/* disable the SD I/O suspend operation(SD I/O only) */ -void sdio_suspend_disable(void); - -/* CE-ATA functions */ -/* enable the CE-ATA command(CE-ATA only) */ -void sdio_ceata_command_enable(void); -/* disable the CE-ATA command(CE-ATA only) */ -void sdio_ceata_command_disable(void); -/* enable the CE-ATA interrupt(CE-ATA only) */ -void sdio_ceata_interrupt_enable(void); -/* disable the CE-ATA interrupt(CE-ATA only) */ -void sdio_ceata_interrupt_disable(void); -/* enable the CE-ATA command completion signal(CE-ATA only) */ -void sdio_ceata_command_completion_enable(void); -/* disable the CE-ATA command completion signal(CE-ATA only) */ -void sdio_ceata_command_completion_disable(void); - -#endif /* GD32F10X_SDIO_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_spi.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_spi.h deleted file mode 100644 index 5ce1cb3..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_spi.h +++ /dev/null @@ -1,327 +0,0 @@ -/*! - \file gd32f10x_spi.h - \brief definitions for the SPI - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_SPI_H -#define GD32F10X_SPI_H - -#include "gd32f10x.h" - -/* SPIx(x=0,1,2) definitions */ -#define SPI0 (SPI_BASE + 0x0000F800U) -#define SPI1 SPI_BASE -#define SPI2 (SPI_BASE + 0x00000400U) - -/* SPI registers definitions */ -#define SPI_CTL0(spix) REG32((spix) + 0x00U) /*!< SPI control register 0 */ -#define SPI_CTL1(spix) REG32((spix) + 0x04U) /*!< SPI control register 1*/ -#define SPI_STAT(spix) REG32((spix) + 0x08U) /*!< SPI status register */ -#define SPI_DATA(spix) REG32((spix) + 0x0CU) /*!< SPI data register */ -#define SPI_CRCPOLY(spix) REG32((spix) + 0x10U) /*!< SPI CRC polynomial register */ -#define SPI_RCRC(spix) REG32((spix) + 0x14U) /*!< SPI receive CRC register */ -#define SPI_TCRC(spix) REG32((spix) + 0x18U) /*!< SPI transmit CRC register */ -#define SPI_I2SCTL(spix) REG32((spix) + 0x1CU) /*!< SPI I2S control register */ -#define SPI_I2SPSC(spix) REG32((spix) + 0x20U) /*!< SPI I2S clock prescaler register */ - -/* bits definitions */ -/* SPI_CTL0 */ -#define SPI_CTL0_CKPH BIT(0) /*!< clock phase selection*/ -#define SPI_CTL0_CKPL BIT(1) /*!< clock polarity selection */ -#define SPI_CTL0_MSTMOD BIT(2) /*!< master mode enable */ -#define SPI_CTL0_PSC BITS(3,5) /*!< master clock prescaler selection */ -#define SPI_CTL0_SPIEN BIT(6) /*!< SPI enable*/ -#define SPI_CTL0_LF BIT(7) /*!< LSB first mode */ -#define SPI_CTL0_SWNSS BIT(8) /*!< NSS pin selection in NSS software mode */ -#define SPI_CTL0_SWNSSEN BIT(9) /*!< NSS software mode selection */ -#define SPI_CTL0_RO BIT(10) /*!< receive only */ -#define SPI_CTL0_FF16 BIT(11) /*!< data frame size */ -#define SPI_CTL0_CRCNT BIT(12) /*!< CRC next transfer */ -#define SPI_CTL0_CRCEN BIT(13) /*!< CRC calculation enable */ -#define SPI_CTL0_BDOEN BIT(14) /*!< bidirectional transmit output enable*/ -#define SPI_CTL0_BDEN BIT(15) /*!< bidirectional enable */ - -/* SPI_CTL1 */ -#define SPI_CTL1_DMAREN BIT(0) /*!< receive buffer dma enable */ -#define SPI_CTL1_DMATEN BIT(1) /*!< transmit buffer dma enable */ -#define SPI_CTL1_NSSDRV BIT(2) /*!< drive NSS output */ -#define SPI_CTL1_ERRIE BIT(5) /*!< errors interrupt enable */ -#define SPI_CTL1_RBNEIE BIT(6) /*!< receive buffer not empty interrupt enable */ -#define SPI_CTL1_TBEIE BIT(7) /*!< transmit buffer empty interrupt enable */ - -/* SPI_STAT */ -#define SPI_STAT_RBNE BIT(0) /*!< receive buffer not empty */ -#define SPI_STAT_TBE BIT(1) /*!< transmit buffer empty */ -#define SPI_STAT_I2SCH BIT(2) /*!< I2S channel side */ -#define SPI_STAT_TXURERR BIT(3) /*!< I2S transmission underrun error bit */ -#define SPI_STAT_CRCERR BIT(4) /*!< SPI CRC error bit */ -#define SPI_STAT_CONFERR BIT(5) /*!< SPI configuration error bit */ -#define SPI_STAT_RXORERR BIT(6) /*!< SPI reception overrun error bit */ -#define SPI_STAT_TRANS BIT(7) /*!< transmitting on-going bit */ - -/* SPI_DATA */ -#define SPI_DATA_DATA BITS(0,15) /*!< data transfer register */ - -/* SPI_CRCPOLY */ -#define SPI_CRCPOLY_CPR BITS(0,15) /*!< CRC polynomial value */ - -/* SPI_RCRC */ -#define SPI_RCRC_RCR BITS(0,15) /*!< RX CRC value */ - -/* SPI_TCRC */ -#define SPI_TCRC_TCR BITS(0,15) /*!< TX CRC value */ - -/* SPI_I2SCTL */ -#define SPI_I2SCTL_CHLEN BIT(0) /*!< channel length */ -#define SPI_I2SCTL_DTLEN BITS(1,2) /*!< data length */ -#define SPI_I2SCTL_CKPL BIT(3) /*!< idle state clock polarity */ -#define SPI_I2SCTL_I2SSTD BITS(4,5) /*!< I2S standard selection */ -#define SPI_I2SCTL_PCMSMOD BIT(7) /*!< PCM frame synchronization mode */ -#define SPI_I2SCTL_I2SOPMOD BITS(8,9) /*!< I2S operation mode */ -#define SPI_I2SCTL_I2SEN BIT(10) /*!< I2S enable */ -#define SPI_I2SCTL_I2SSEL BIT(11) /*!< I2S mode selection */ - -/* SPI_I2SPSC */ -#define SPI_I2SPSC_DIV BITS(0,7) /*!< dividing factor for the prescaler */ -#define SPI_I2SPSC_OF BIT(8) /*!< odd factor for the prescaler */ -#define SPI_I2SPSC_MCKOEN BIT(9) /*!< I2S MCK output enable */ - -/* constants definitions */ -/* SPI and I2S parameter struct definitions */ -typedef struct -{ - uint32_t device_mode; /*!< SPI master or slave */ - uint32_t trans_mode; /*!< SPI transtype */ - uint32_t frame_size; /*!< SPI frame size */ - uint32_t nss; /*!< SPI NSS control by handware or software */ - uint32_t endian; /*!< SPI big endian or little endian */ - uint32_t clock_polarity_phase; /*!< SPI clock phase and polarity */ - uint32_t prescale; /*!< SPI prescale factor */ -}spi_parameter_struct; - -/* SPI mode definitions */ -#define SPI_MASTER (SPI_CTL0_MSTMOD | SPI_CTL0_SWNSS) /*!< SPI as master */ -#define SPI_SLAVE ((uint32_t)0x00000000U) /*!< SPI as slave */ - -/* SPI bidirectional transfer direction */ -#define SPI_BIDIRECTIONAL_TRANSMIT SPI_CTL0_BDOEN /*!< SPI work in transmit-only mode */ -#define SPI_BIDIRECTIONAL_RECEIVE (~SPI_CTL0_BDOEN) /*!< SPI work in receive-only mode */ - -/* SPI transmit type */ -#define SPI_TRANSMODE_FULLDUPLEX ((uint32_t)0x00000000U) /*!< SPI receive and send data at fullduplex communication */ -#define SPI_TRANSMODE_RECEIVEONLY SPI_CTL0_RO /*!< SPI only receive data */ -#define SPI_TRANSMODE_BDRECEIVE SPI_CTL0_BDEN /*!< bidirectional receive data */ -#define SPI_TRANSMODE_BDTRANSMIT (SPI_CTL0_BDEN | SPI_CTL0_BDOEN) /*!< bidirectional transmit data*/ - -/* SPI frame size */ -#define SPI_FRAMESIZE_16BIT SPI_CTL0_FF16 /*!< SPI frame size is 16 bits */ -#define SPI_FRAMESIZE_8BIT ((uint32_t)0x00000000U) /*!< SPI frame size is 8 bits */ - -/* SPI NSS control mode */ -#define SPI_NSS_SOFT SPI_CTL0_SWNSSEN /*!< SPI NSS control by software */ -#define SPI_NSS_HARD ((uint32_t)0x00000000U) /*!< SPI NSS control by hardware */ - -/* SPI transmit way */ -#define SPI_ENDIAN_MSB ((uint32_t)0x00000000U) /*!< SPI transmit way is big endian: transmit MSB first */ -#define SPI_ENDIAN_LSB SPI_CTL0_LF /*!< SPI transmit way is little endian: transmit LSB first */ - -/* SPI clock phase and polarity */ -#define SPI_CK_PL_LOW_PH_1EDGE ((uint32_t)0x00000000U) /*!< SPI clock polarity is low level and phase is first edge */ -#define SPI_CK_PL_HIGH_PH_1EDGE SPI_CTL0_CKPL /*!< SPI clock polarity is high level and phase is first edge */ -#define SPI_CK_PL_LOW_PH_2EDGE SPI_CTL0_CKPH /*!< SPI clock polarity is low level and phase is second edge */ -#define SPI_CK_PL_HIGH_PH_2EDGE (SPI_CTL0_CKPL | SPI_CTL0_CKPH) /*!< SPI clock polarity is high level and phase is second edge */ - -/* SPI clock prescale factor */ -#define CTL0_PSC(regval) (BITS(3,5) & ((uint32_t)(regval) << 3)) -#define SPI_PSC_2 CTL0_PSC(0) /*!< SPI clock prescale factor is 2 */ -#define SPI_PSC_4 CTL0_PSC(1) /*!< SPI clock prescale factor is 4 */ -#define SPI_PSC_8 CTL0_PSC(2) /*!< SPI clock prescale factor is 8 */ -#define SPI_PSC_16 CTL0_PSC(3) /*!< SPI clock prescale factor is 16 */ -#define SPI_PSC_32 CTL0_PSC(4) /*!< SPI clock prescale factor is 32 */ -#define SPI_PSC_64 CTL0_PSC(5) /*!< SPI clock prescale factor is 64 */ -#define SPI_PSC_128 CTL0_PSC(6) /*!< SPI clock prescale factor is 128 */ -#define SPI_PSC_256 CTL0_PSC(7) /*!< SPI clock prescale factor is 256 */ - -/* I2S audio sample rate */ -#define I2S_AUDIOSAMPLE_8K ((uint32_t)8000U) /*!< I2S audio sample rate is 8KHz */ -#define I2S_AUDIOSAMPLE_11K ((uint32_t)11025U) /*!< I2S audio sample rate is 11KHz */ -#define I2S_AUDIOSAMPLE_16K ((uint32_t)16000U) /*!< I2S audio sample rate is 16KHz */ -#define I2S_AUDIOSAMPLE_22K ((uint32_t)22050U) /*!< I2S audio sample rate is 22KHz */ -#define I2S_AUDIOSAMPLE_32K ((uint32_t)32000U) /*!< I2S audio sample rate is 32KHz */ -#define I2S_AUDIOSAMPLE_44K ((uint32_t)44100U) /*!< I2S audio sample rate is 44KHz */ -#define I2S_AUDIOSAMPLE_48K ((uint32_t)48000U) /*!< I2S audio sample rate is 48KHz */ -#define I2S_AUDIOSAMPLE_96K ((uint32_t)96000U) /*!< I2S audio sample rate is 96KHz */ -#define I2S_AUDIOSAMPLE_192K ((uint32_t)192000U) /*!< I2S audio sample rate is 192KHz */ - -/* I2S frame format */ -#define I2SCTL_DTLEN(regval) (BITS(1,2) & ((uint32_t)(regval) << 1)) -#define I2S_FRAMEFORMAT_DT16B_CH16B I2SCTL_DTLEN(0) /*!< I2S data length is 16 bit and channel length is 16 bit */ -#define I2S_FRAMEFORMAT_DT16B_CH32B (I2SCTL_DTLEN(0) | SPI_I2SCTL_CHLEN) /*!< I2S data length is 16 bit and channel length is 32 bit */ -#define I2S_FRAMEFORMAT_DT24B_CH32B (I2SCTL_DTLEN(1) | SPI_I2SCTL_CHLEN) /*!< I2S data length is 24 bit and channel length is 32 bit */ -#define I2S_FRAMEFORMAT_DT32B_CH32B (I2SCTL_DTLEN(2) | SPI_I2SCTL_CHLEN) /*!< I2S data length is 32 bit and channel length is 32 bit */ - -/* I2S master clock output */ -#define I2S_MCKOUT_DISABLE ((uint32_t)0x00000000U) /*!< I2S master clock output disable */ -#define I2S_MCKOUT_ENABLE SPI_I2SPSC_MCKOEN /*!< I2S master clock output enable */ - -/* I2S operation mode */ -#define I2SCTL_I2SOPMOD(regval) (BITS(8,9) & ((uint32_t)(regval) << 8)) -#define I2S_MODE_SLAVETX I2SCTL_I2SOPMOD(0) /*!< I2S slave transmit mode */ -#define I2S_MODE_SLAVERX I2SCTL_I2SOPMOD(1) /*!< I2S slave receive mode */ -#define I2S_MODE_MASTERTX I2SCTL_I2SOPMOD(2) /*!< I2S master transmit mode */ -#define I2S_MODE_MASTERRX I2SCTL_I2SOPMOD(3) /*!< I2S master receive mode */ - -/* I2S standard */ -#define I2SCTL_I2SSTD(regval) (BITS(4,5) & ((uint32_t)(regval) << 4)) -#define I2S_STD_PHILLIPS I2SCTL_I2SSTD(0) /*!< I2S phillips standard */ -#define I2S_STD_MSB I2SCTL_I2SSTD(1) /*!< I2S MSB standard */ -#define I2S_STD_LSB I2SCTL_I2SSTD(2) /*!< I2S LSB standard */ -#define I2S_STD_PCMSHORT I2SCTL_I2SSTD(3) /*!< I2S PCM short standard */ -#define I2S_STD_PCMLONG (I2SCTL_I2SSTD(3) | SPI_I2SCTL_PCMSMOD) /*!< I2S PCM long standard */ - -/* I2S clock polarity */ -#define I2S_CKPL_LOW ((uint32_t)0x00000000U) /*!< I2S clock polarity low level */ -#define I2S_CKPL_HIGH SPI_I2SCTL_CKPL /*!< I2S clock polarity high level */ - -/* SPI DMA constants definitions */ -#define SPI_DMA_TRANSMIT ((uint8_t)0x00U) /*!< SPI transmit data use DMA */ -#define SPI_DMA_RECEIVE ((uint8_t)0x01U) /*!< SPI receive data use DMA */ - -/* SPI CRC constants definitions */ -#define SPI_CRC_TX ((uint8_t)0x00U) /*!< SPI transmit CRC value */ -#define SPI_CRC_RX ((uint8_t)0x01U) /*!< SPI receive CRC value */ - -/* SPI/I2S interrupt enable/disable constants definitions */ -#define SPI_I2S_INT_TBE ((uint8_t)0x00U) /*!< transmit buffer empty interrupt */ -#define SPI_I2S_INT_RBNE ((uint8_t)0x01U) /*!< receive buffer not empty interrupt */ -#define SPI_I2S_INT_ERR ((uint8_t)0x02U) /*!< error interrupt */ - -/* SPI/I2S interrupt flag constants definitions */ -#define SPI_I2S_INT_FLAG_TBE ((uint8_t)0x00U) /*!< transmit buffer empty interrupt flag */ -#define SPI_I2S_INT_FLAG_RBNE ((uint8_t)0x01U) /*!< receive buffer not empty interrupt flag */ -#define SPI_I2S_INT_FLAG_RXORERR ((uint8_t)0x02U) /*!< overrun interrupt flag */ -#define SPI_INT_FLAG_CONFERR ((uint8_t)0x03U) /*!< config error interrupt flag */ -#define SPI_INT_FLAG_CRCERR ((uint8_t)0x04U) /*!< CRC error interrupt flag */ -#define I2S_INT_FLAG_TXURERR ((uint8_t)0x05U) /*!< underrun error interrupt flag */ - -/* SPI/I2S flag definitions */ -#define SPI_FLAG_RBNE SPI_STAT_RBNE /*!< receive buffer not empty flag */ -#define SPI_FLAG_TBE SPI_STAT_TBE /*!< transmit buffer empty flag */ -#define SPI_FLAG_CRCERR SPI_STAT_CRCERR /*!< CRC error flag */ -#define SPI_FLAG_CONFERR SPI_STAT_CONFERR /*!< mode config error flag */ -#define SPI_FLAG_RXORERR SPI_STAT_RXORERR /*!< receive overrun error flag */ -#define SPI_FLAG_TRANS SPI_STAT_TRANS /*!< transmit on-going flag */ -#define I2S_FLAG_RBNE SPI_STAT_RBNE /*!< receive buffer not empty flag */ -#define I2S_FLAG_TBE SPI_STAT_TBE /*!< transmit buffer empty flag */ -#define I2S_FLAG_CH SPI_STAT_I2SCH /*!< channel side flag */ -#define I2S_FLAG_TXURERR SPI_STAT_TXURERR /*!< underrun error flag */ -#define I2S_FLAG_RXORERR SPI_STAT_RXORERR /*!< overrun error flag */ -#define I2S_FLAG_TRANS SPI_STAT_TRANS /*!< transmit on-going flag */ - -/* function declarations */ -/* SPI/I2S deinitialization and initialization functions */ -/* reset SPI and I2S */ -void spi_i2s_deinit(uint32_t spi_periph); -/* initialize the parameters of SPI struct with the default values */ -void spi_struct_para_init(spi_parameter_struct* spi_struct); -/* initialize SPI parameter */ -void spi_init(uint32_t spi_periph, spi_parameter_struct* spi_struct); -/* enable SPI */ -void spi_enable(uint32_t spi_periph); -/* disable SPI */ -void spi_disable(uint32_t spi_periph); - -/* initialize I2S parameter */ -void i2s_init(uint32_t spi_periph,uint32_t mode, uint32_t standard, uint32_t ckpl); -/* configure I2S prescaler */ -void i2s_psc_config(uint32_t spi_periph, uint32_t audiosample, uint32_t frameformat, uint32_t mckout); -/* enable I2S */ -void i2s_enable(uint32_t spi_periph); -/* disable I2S */ -void i2s_disable(uint32_t spi_periph); - -/* NSS functions */ -/* enable SPI NSS output */ -void spi_nss_output_enable(uint32_t spi_periph); -/* disable SPI NSS output */ -void spi_nss_output_disable(uint32_t spi_periph); -/* SPI NSS pin high level in software mode */ -void spi_nss_internal_high(uint32_t spi_periph); -/* SPI NSS pin low level in software mode */ -void spi_nss_internal_low(uint32_t spi_periph); - -/* DMA communication */ -/* enable SPI DMA */ -void spi_dma_enable(uint32_t spi_periph, uint8_t dma); -/* disable SPI DMA */ -void spi_dma_disable(uint32_t spi_periph, uint8_t dma); - -/* normal mode communication */ -/* configure SPI/I2S data frame format */ -void spi_i2s_data_frame_format_config(uint32_t spi_periph, uint16_t frame_format); -/* SPI transmit data */ -void spi_i2s_data_transmit(uint32_t spi_periph, uint16_t data); -/* SPI receive data */ -uint16_t spi_i2s_data_receive(uint32_t spi_periph); -/* configure SPI bidirectional transfer direction */ -void spi_bidirectional_transfer_config(uint32_t spi_periph, uint32_t transfer_direction); - -/* SPI CRC functions */ -/* set SPI CRC polynomial */ -void spi_crc_polynomial_set(uint32_t spi_periph, uint16_t crc_poly); -/* get SPI CRC polynomial */ -uint16_t spi_crc_polynomial_get(uint32_t spi_periph); -/* turn on SPI CRC function */ -void spi_crc_on(uint32_t spi_periph); -/* turn off SPI CRC function */ -void spi_crc_off(uint32_t spi_periph); -/* SPI next data is CRC value */ -void spi_crc_next(uint32_t spi_periph); -/* get SPI CRC send value or receive value */ -uint16_t spi_crc_get(uint32_t spi_periph, uint8_t crc); - -/* flag and interrupt functions */ -/* enable SPI and I2S interrupt */ -void spi_i2s_interrupt_enable(uint32_t spi_periph, uint8_t interrupt); -/* disable SPI and I2S interrupt */ -void spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt); -/* get SPI and I2S interrupt status */ -FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt); -/* get SPI and I2S flag status */ -FlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag); -/* clear SPI CRC error flag status */ -void spi_crc_error_clear(uint32_t spi_periph); - -#endif /* GD32F10X_SPI_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_timer.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_timer.h deleted file mode 100644 index 6fbdfc7..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_timer.h +++ /dev/null @@ -1,728 +0,0 @@ -/*! - \file gd32f10x_timer.h - \brief definitions for the TIMER - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_TIMER_H -#define GD32F10X_TIMER_H - -#include "gd32f10x.h" - -/* TIMERx(x=0..13) definitions */ -#define TIMER0 (TIMER_BASE + 0x00012C00U) -#define TIMER1 (TIMER_BASE + 0x00000000U) -#define TIMER2 (TIMER_BASE + 0x00000400U) -#define TIMER3 (TIMER_BASE + 0x00000800U) -#define TIMER4 (TIMER_BASE + 0x00000C00U) -#define TIMER5 (TIMER_BASE + 0x00001000U) -#define TIMER6 (TIMER_BASE + 0x00001400U) -#define TIMER7 (TIMER_BASE + 0x00013400U) -#define TIMER8 (TIMER_BASE + 0x00014C00U) -#define TIMER9 (TIMER_BASE + 0x00015000U) -#define TIMER10 (TIMER_BASE + 0x00015400U) -#define TIMER11 (TIMER_BASE + 0x00001800U) -#define TIMER12 (TIMER_BASE + 0x00001C00U) -#define TIMER13 (TIMER_BASE + 0x00002000U) - -/* registers definitions */ -#define TIMER_CTL0(timerx) REG32((timerx) + 0x00U) /*!< TIMER control register 0 */ -#define TIMER_CTL1(timerx) REG32((timerx) + 0x04U) /*!< TIMER control register 1 */ -#define TIMER_SMCFG(timerx) REG32((timerx) + 0x08U) /*!< TIMER slave mode configuration register */ -#define TIMER_DMAINTEN(timerx) REG32((timerx) + 0x0CU) /*!< TIMER DMA and interrupt enable register */ -#define TIMER_INTF(timerx) REG32((timerx) + 0x10U) /*!< TIMER interrupt flag register */ -#define TIMER_SWEVG(timerx) REG32((timerx) + 0x14U) /*!< TIMER software event generation register */ -#define TIMER_CHCTL0(timerx) REG32((timerx) + 0x18U) /*!< TIMER channel control register 0 */ -#define TIMER_CHCTL1(timerx) REG32((timerx) + 0x1CU) /*!< TIMER channel control register 1 */ -#define TIMER_CHCTL2(timerx) REG32((timerx) + 0x20U) /*!< TIMER channel control register 2 */ -#define TIMER_CNT(timerx) REG32((timerx) + 0x24U) /*!< TIMER counter register */ -#define TIMER_PSC(timerx) REG32((timerx) + 0x28U) /*!< TIMER prescaler register */ -#define TIMER_CAR(timerx) REG32((timerx) + 0x2CU) /*!< TIMER counter auto reload register */ -#define TIMER_CREP(timerx) REG32((timerx) + 0x30U) /*!< TIMER counter repetition register */ -#define TIMER_CH0CV(timerx) REG32((timerx) + 0x34U) /*!< TIMER channel 0 capture/compare value register */ -#define TIMER_CH1CV(timerx) REG32((timerx) + 0x38U) /*!< TIMER channel 1 capture/compare value register */ -#define TIMER_CH2CV(timerx) REG32((timerx) + 0x3CU) /*!< TIMER channel 2 capture/compare value register */ -#define TIMER_CH3CV(timerx) REG32((timerx) + 0x40U) /*!< TIMER channel 3 capture/compare value register */ -#define TIMER_CCHP(timerx) REG32((timerx) + 0x44U) /*!< TIMER channel complementary protection register */ -#define TIMER_DMACFG(timerx) REG32((timerx) + 0x48U) /*!< TIMER DMA configuration register */ -#define TIMER_DMATB(timerx) REG32((timerx) + 0x4CU) /*!< TIMER DMA transfer buffer register */ - -/* bits definitions */ -/* TIMER_CTL0 */ -#define TIMER_CTL0_CEN BIT(0) /*!< TIMER counter enable */ -#define TIMER_CTL0_UPDIS BIT(1) /*!< update disable */ -#define TIMER_CTL0_UPS BIT(2) /*!< update source */ -#define TIMER_CTL0_SPM BIT(3) /*!< single pulse mode */ -#define TIMER_CTL0_DIR BIT(4) /*!< timer counter direction */ -#define TIMER_CTL0_CAM BITS(5,6) /*!< center-aligned mode selection */ -#define TIMER_CTL0_ARSE BIT(7) /*!< auto-reload shadow enable */ -#define TIMER_CTL0_CKDIV BITS(8,9) /*!< clock division */ - -/* TIMER_CTL1 */ -#define TIMER_CTL1_CCSE BIT(0) /*!< commutation control shadow enable */ -#define TIMER_CTL1_CCUC BIT(2) /*!< commutation control shadow register update control */ -#define TIMER_CTL1_DMAS BIT(3) /*!< DMA request source selection */ -#define TIMER_CTL1_MMC BITS(4,6) /*!< master mode control */ -#define TIMER_CTL1_TI0S BIT(7) /*!< channel 0 trigger input selection(hall mode selection) */ -#define TIMER_CTL1_ISO0 BIT(8) /*!< idle state of channel 0 output */ -#define TIMER_CTL1_ISO0N BIT(9) /*!< idle state of channel 0 complementary output */ -#define TIMER_CTL1_ISO1 BIT(10) /*!< idle state of channel 1 output */ -#define TIMER_CTL1_ISO1N BIT(11) /*!< idle state of channel 1 complementary output */ -#define TIMER_CTL1_ISO2 BIT(12) /*!< idle state of channel 2 output */ -#define TIMER_CTL1_ISO2N BIT(13) /*!< idle state of channel 2 complementary output */ -#define TIMER_CTL1_ISO3 BIT(14) /*!< idle state of channel 3 output */ - -/* TIMER_SMCFG */ -#define TIMER_SMCFG_SMC BITS(0,2) /*!< slave mode control */ -#define TIMER_SMCFG_TRGS BITS(4,6) /*!< trigger selection */ -#define TIMER_SMCFG_MSM BIT(7) /*!< master-slave mode */ -#define TIMER_SMCFG_ETFC BITS(8,11) /*!< external trigger filter control */ -#define TIMER_SMCFG_ETPSC BITS(12,13) /*!< external trigger prescaler */ -#define TIMER_SMCFG_SMC1 BIT(14) /*!< part of SMC for enable external clock mode 1 */ -#define TIMER_SMCFG_ETP BIT(15) /*!< external trigger polarity */ - -/* TIMER_DMAINTEN */ -#define TIMER_DMAINTEN_UPIE BIT(0) /*!< update interrupt enable */ -#define TIMER_DMAINTEN_CH0IE BIT(1) /*!< channel 0 capture/compare interrupt enable */ -#define TIMER_DMAINTEN_CH1IE BIT(2) /*!< channel 1 capture/compare interrupt enable */ -#define TIMER_DMAINTEN_CH2IE BIT(3) /*!< channel 2 capture/compare interrupt enable */ -#define TIMER_DMAINTEN_CH3IE BIT(4) /*!< channel 3 capture/compare interrupt enable */ -#define TIMER_DMAINTEN_CMTIE BIT(5) /*!< commutation interrupt request enable */ -#define TIMER_DMAINTEN_TRGIE BIT(6) /*!< trigger interrupt enable */ -#define TIMER_DMAINTEN_BRKIE BIT(7) /*!< break interrupt enable */ -#define TIMER_DMAINTEN_UPDEN BIT(8) /*!< update DMA request enable */ -#define TIMER_DMAINTEN_CH0DEN BIT(9) /*!< channel 0 capture/compare DMA request enable */ -#define TIMER_DMAINTEN_CH1DEN BIT(10) /*!< channel 1 capture/compare DMA request enable */ -#define TIMER_DMAINTEN_CH2DEN BIT(11) /*!< channel 2 capture/compare DMA request enable */ -#define TIMER_DMAINTEN_CH3DEN BIT(12) /*!< channel 3 capture/compare DMA request enable */ -#define TIMER_DMAINTEN_CMTDEN BIT(13) /*!< commutation DMA request enable */ -#define TIMER_DMAINTEN_TRGDEN BIT(14) /*!< trigger DMA request enable */ - -/* TIMER_INTF */ -#define TIMER_INTF_UPIF BIT(0) /*!< update interrupt flag */ -#define TIMER_INTF_CH0IF BIT(1) /*!< channel 0 capture/compare interrupt flag */ -#define TIMER_INTF_CH1IF BIT(2) /*!< channel 1 capture/compare interrupt flag */ -#define TIMER_INTF_CH2IF BIT(3) /*!< channel 2 capture/compare interrupt flag */ -#define TIMER_INTF_CH3IF BIT(4) /*!< channel 3 capture/compare interrupt flag */ -#define TIMER_INTF_CMTIF BIT(5) /*!< channel commutation interrupt flag */ -#define TIMER_INTF_TRGIF BIT(6) /*!< trigger interrupt flag */ -#define TIMER_INTF_BRKIF BIT(7) /*!< break interrupt flag */ -#define TIMER_INTF_CH0OF BIT(9) /*!< channel 0 over capture flag */ -#define TIMER_INTF_CH1OF BIT(10) /*!< channel 1 over capture flag */ -#define TIMER_INTF_CH2OF BIT(11) /*!< channel 2 over capture flag */ -#define TIMER_INTF_CH3OF BIT(12) /*!< channel 3 over capture flag */ - -/* TIMER_SWEVG */ -#define TIMER_SWEVG_UPG BIT(0) /*!< update event generate */ -#define TIMER_SWEVG_CH0G BIT(1) /*!< channel 0 capture or compare event generation */ -#define TIMER_SWEVG_CH1G BIT(2) /*!< channel 1 capture or compare event generation */ -#define TIMER_SWEVG_CH2G BIT(3) /*!< channel 2 capture or compare event generation */ -#define TIMER_SWEVG_CH3G BIT(4) /*!< channel 3 capture or compare event generation */ -#define TIMER_SWEVG_CMTG BIT(5) /*!< channel commutation event generation */ -#define TIMER_SWEVG_TRGG BIT(6) /*!< trigger event generation */ -#define TIMER_SWEVG_BRKG BIT(7) /*!< break event generation */ - -/* TIMER_CHCTL0 */ -/* output compare mode */ -#define TIMER_CHCTL0_CH0MS BITS(0,1) /*!< channel 0 mode selection */ -#define TIMER_CHCTL0_CH0COMFEN BIT(2) /*!< channel 0 output compare fast enable */ -#define TIMER_CHCTL0_CH0COMSEN BIT(3) /*!< channel 0 output compare shadow enable */ -#define TIMER_CHCTL0_CH0COMCTL BITS(4,6) /*!< channel 0 output compare control */ -#define TIMER_CHCTL0_CH0COMCEN BIT(7) /*!< channel 0 output compare clear enable */ -#define TIMER_CHCTL0_CH1MS BITS(8,9) /*!< channel 1 mode selection */ -#define TIMER_CHCTL0_CH1COMFEN BIT(10) /*!< channel 1 output compare fast enable */ -#define TIMER_CHCTL0_CH1COMSEN BIT(11) /*!< channel 1 output compare shadow enable */ -#define TIMER_CHCTL0_CH1COMCTL BITS(12,14) /*!< channel 1 output compare control */ -#define TIMER_CHCTL0_CH1COMCEN BIT(15) /*!< channel 1 output compare clear enable */ -/* input capture mode */ -#define TIMER_CHCTL0_CH0CAPPSC BITS(2,3) /*!< channel 0 input capture prescaler */ -#define TIMER_CHCTL0_CH0CAPFLT BITS(4,7) /*!< channel 0 input capture filter control */ -#define TIMER_CHCTL0_CH1CAPPSC BITS(10,11) /*!< channel 1 input capture prescaler */ -#define TIMER_CHCTL0_CH1CAPFLT BITS(12,15) /*!< channel 1 input capture filter control */ - -/* TIMER_CHCTL1 */ -/* output compare mode */ -#define TIMER_CHCTL1_CH2MS BITS(0,1) /*!< channel 2 mode selection */ -#define TIMER_CHCTL1_CH2COMFEN BIT(2) /*!< channel 2 output compare fast enable */ -#define TIMER_CHCTL1_CH2COMSEN BIT(3) /*!< channel 2 output compare shadow enable */ -#define TIMER_CHCTL1_CH2COMCTL BITS(4,6) /*!< channel 2 output compare control */ -#define TIMER_CHCTL1_CH2COMCEN BIT(7) /*!< channel 2 output compare clear enable */ -#define TIMER_CHCTL1_CH3MS BITS(8,9) /*!< channel 3 mode selection */ -#define TIMER_CHCTL1_CH3COMFEN BIT(10) /*!< channel 3 output compare fast enable */ -#define TIMER_CHCTL1_CH3COMSEN BIT(11) /*!< channel 3 output compare shadow enable */ -#define TIMER_CHCTL1_CH3COMCTL BITS(12,14) /*!< channel 3 output compare control */ -#define TIMER_CHCTL1_CH3COMCEN BIT(15) /*!< channel 3 output compare clear enable */ -/* input capture mode */ -#define TIMER_CHCTL1_CH2CAPPSC BITS(2,3) /*!< channel 2 input capture prescaler */ -#define TIMER_CHCTL1_CH2CAPFLT BITS(4,7) /*!< channel 2 input capture filter control */ -#define TIMER_CHCTL1_CH3CAPPSC BITS(10,11) /*!< channel 3 input capture prescaler */ -#define TIMER_CHCTL1_CH3CAPFLT BITS(12,15) /*!< channel 3 input capture filter control */ - -/* TIMER_CHCTL2 */ -#define TIMER_CHCTL2_CH0EN BIT(0) /*!< channel 0 capture/compare function enable */ -#define TIMER_CHCTL2_CH0P BIT(1) /*!< channel 0 capture/compare function polarity */ -#define TIMER_CHCTL2_CH0NEN BIT(2) /*!< channel 0 complementary output enable */ -#define TIMER_CHCTL2_CH0NP BIT(3) /*!< channel 0 complementary output polarity */ -#define TIMER_CHCTL2_CH1EN BIT(4) /*!< channel 1 capture/compare function enable */ -#define TIMER_CHCTL2_CH1P BIT(5) /*!< channel 1 capture/compare function polarity */ -#define TIMER_CHCTL2_CH1NEN BIT(6) /*!< channel 1 complementary output enable */ -#define TIMER_CHCTL2_CH1NP BIT(7) /*!< channel 1 complementary output polarity */ -#define TIMER_CHCTL2_CH2EN BIT(8) /*!< channel 2 capture/compare function enable */ -#define TIMER_CHCTL2_CH2P BIT(9) /*!< channel 2 capture/compare function polarity */ -#define TIMER_CHCTL2_CH2NEN BIT(10) /*!< channel 2 complementary output enable */ -#define TIMER_CHCTL2_CH2NP BIT(11) /*!< channel 2 complementary output polarity */ -#define TIMER_CHCTL2_CH3EN BIT(12) /*!< channel 3 capture/compare function enable */ -#define TIMER_CHCTL2_CH3P BIT(13) /*!< channel 3 capture/compare function polarity */ - -/* TIMER_CNT */ -#define TIMER_CNT_CNT BITS(0,15) /*!< 16 bit timer counter */ - -/* TIMER_PSC */ -#define TIMER_PSC_PSC BITS(0,15) /*!< prescaler value of the counter clock */ - -/* TIMER_CAR */ -#define TIMER_CAR_CARL BITS(0,15) /*!< 16 bit counter auto reload value */ - -/* TIMER_CREP */ -#define TIMER_CREP_CREP BITS(0,7) /*!< counter repetition value */ - -/* TIMER_CH0CV */ -#define TIMER_CH0CV_CH0VAL BITS(0,15) /*!< 16 bit capture/compare value of channel 0 */ - -/* TIMER_CH1CV */ -#define TIMER_CH1CV_CH1VAL BITS(0,15) /*!< 16 bit capture/compare value of channel 1 */ - -/* TIMER_CH2CV */ -#define TIMER_CH2CV_CH2VAL BITS(0,15) /*!< 16 bit capture/compare value of channel 2 */ - -/* TIMER_CH3CV */ -#define TIMER_CH3CV_CH3VAL BITS(0,15) /*!< 16 bit capture/compare value of channel 3 */ - -/* TIMER_CCHP */ -#define TIMER_CCHP_DTCFG BITS(0,7) /*!< dead time configure */ -#define TIMER_CCHP_PROT BITS(8,9) /*!< complementary register protect control */ -#define TIMER_CCHP_IOS BIT(10) /*!< idle mode off-state configure */ -#define TIMER_CCHP_ROS BIT(11) /*!< run mode off-state configure */ -#define TIMER_CCHP_BRKEN BIT(12) /*!< break enable */ -#define TIMER_CCHP_BRKP BIT(13) /*!< break polarity */ -#define TIMER_CCHP_OAEN BIT(14) /*!< output automatic enable */ -#define TIMER_CCHP_POEN BIT(15) /*!< primary output enable */ - -/* TIMER_DMACFG */ -#define TIMER_DMACFG_DMATA BITS(0,4) /*!< DMA transfer access start address */ -#define TIMER_DMACFG_DMATC BITS(8,12) /*!< DMA transfer count */ - -/* TIMER_DMATB */ -#define TIMER_DMATB_DMATB BITS(0,15) /*!< DMA transfer buffer address */ - -/* constants definitions */ -/* TIMER init parameter struct definitions */ -typedef struct -{ - uint16_t prescaler; /*!< prescaler value */ - uint16_t alignedmode; /*!< aligned mode */ - uint16_t counterdirection; /*!< counter direction */ - uint32_t period; /*!< period value */ - uint16_t clockdivision; /*!< clock division value */ - uint8_t repetitioncounter; /*!< the counter repetition value */ -}timer_parameter_struct; - -/* break parameter struct definitions*/ -typedef struct -{ - uint16_t runoffstate; /*!< run mode off-state */ - uint16_t ideloffstate; /*!< idle mode off-state */ - uint16_t deadtime; /*!< dead time */ - uint16_t breakpolarity; /*!< break polarity */ - uint16_t outputautostate; /*!< output automatic enable */ - uint16_t protectmode; /*!< complementary register protect control */ - uint16_t breakstate; /*!< break enable */ -}timer_break_parameter_struct; - -/* channel output parameter struct definitions */ -typedef struct -{ - uint16_t outputstate; /*!< channel output state */ - uint16_t outputnstate; /*!< channel complementary output state */ - uint16_t ocpolarity; /*!< channel output polarity */ - uint16_t ocnpolarity; /*!< channel complementary output polarity */ - uint16_t ocidlestate; /*!< idle state of channel output */ - uint16_t ocnidlestate; /*!< idle state of channel complementary output */ -}timer_oc_parameter_struct; - -/* channel input parameter struct definitions */ -typedef struct -{ - uint16_t icpolarity; /*!< channel input polarity */ - uint16_t icselection; /*!< channel input mode selection */ - uint16_t icprescaler; /*!< channel input capture prescaler */ - uint16_t icfilter; /*!< channel input capture filter control */ -}timer_ic_parameter_struct; - -/* TIMER interrupt enable or disable */ -#define TIMER_INT_UP TIMER_DMAINTEN_UPIE /*!< update interrupt */ -#define TIMER_INT_CH0 TIMER_DMAINTEN_CH0IE /*!< channel 0 interrupt */ -#define TIMER_INT_CH1 TIMER_DMAINTEN_CH1IE /*!< channel 1 interrupt */ -#define TIMER_INT_CH2 TIMER_DMAINTEN_CH2IE /*!< channel 2 interrupt */ -#define TIMER_INT_CH3 TIMER_DMAINTEN_CH3IE /*!< channel 3 interrupt */ -#define TIMER_INT_CMT TIMER_DMAINTEN_CMTIE /*!< channel commutation interrupt flag */ -#define TIMER_INT_TRG TIMER_DMAINTEN_TRGIE /*!< trigger interrupt */ -#define TIMER_INT_BRK TIMER_DMAINTEN_BRKIE /*!< break interrupt */ - -/* TIMER interrupt flag */ -#define TIMER_INT_FLAG_UP TIMER_INT_UP /*!< update interrupt */ -#define TIMER_INT_FLAG_CH0 TIMER_INT_CH0 /*!< channel 0 interrupt */ -#define TIMER_INT_FLAG_CH1 TIMER_INT_CH1 /*!< channel 1 interrupt */ -#define TIMER_INT_FLAG_CH2 TIMER_INT_CH2 /*!< channel 2 interrupt */ -#define TIMER_INT_FLAG_CH3 TIMER_INT_CH3 /*!< channel 3 interrupt */ -#define TIMER_INT_FLAG_CMT TIMER_INT_CMT /*!< channel commutation interrupt flag */ -#define TIMER_INT_FLAG_TRG TIMER_INT_TRG /*!< trigger interrupt */ -#define TIMER_INT_FLAG_BRK TIMER_INT_BRK - -/* TIMER flag */ -#define TIMER_FLAG_UP TIMER_INTF_UPIF /*!< update flag */ -#define TIMER_FLAG_CH0 TIMER_INTF_CH0IF /*!< channel 0 flag */ -#define TIMER_FLAG_CH1 TIMER_INTF_CH1IF /*!< channel 1 flag */ -#define TIMER_FLAG_CH2 TIMER_INTF_CH2IF /*!< channel 2 flag */ -#define TIMER_FLAG_CH3 TIMER_INTF_CH3IF /*!< channel 3 flag */ -#define TIMER_FLAG_CMT TIMER_INTF_CMTIF /*!< channel commutation flag */ -#define TIMER_FLAG_TRG TIMER_INTF_TRGIF /*!< trigger flag */ -#define TIMER_FLAG_BRK TIMER_INTF_BRKIF /*!< break flag */ -#define TIMER_FLAG_CH0O TIMER_INTF_CH0OF /*!< channel 0 overcapture flag */ -#define TIMER_FLAG_CH1O TIMER_INTF_CH1OF /*!< channel 1 overcapture flag */ -#define TIMER_FLAG_CH2O TIMER_INTF_CH2OF /*!< channel 2 overcapture flag */ -#define TIMER_FLAG_CH3O TIMER_INTF_CH3OF /*!< channel 3 overcapture flag */ -/* TIMER DMA source enable */ -#define TIMER_DMA_UPD ((uint16_t)TIMER_DMAINTEN_UPDEN) /*!< update DMA enable */ -#define TIMER_DMA_CH0D ((uint16_t)TIMER_DMAINTEN_CH0DEN) /*!< channel 0 DMA enable */ -#define TIMER_DMA_CH1D ((uint16_t)TIMER_DMAINTEN_CH1DEN) /*!< channel 1 DMA enable */ -#define TIMER_DMA_CH2D ((uint16_t)TIMER_DMAINTEN_CH2DEN) /*!< channel 2 DMA enable */ -#define TIMER_DMA_CH3D ((uint16_t)TIMER_DMAINTEN_CH3DEN) /*!< channel 3 DMA enable */ -#define TIMER_DMA_CMTD ((uint16_t)TIMER_DMAINTEN_CMTDEN) /*!< commutation DMA request enable */ -#define TIMER_DMA_TRGD ((uint16_t)TIMER_DMAINTEN_TRGDEN) /*!< trigger DMA enable */ - -/* channel DMA request source selection */ -#define TIMER_DMAREQUEST_UPDATEEVENT TIMER_CTL1_DMAS /*!< DMA request of channel n is sent when update event occurs */ -#define TIMER_DMAREQUEST_CHANNELEVENT ((uint32_t)0x00000000U) /*!< DMA request of channel n is sent when channel n event occurs */ - -/* DMA access base address */ -#define DMACFG_DMATA(regval) (BITS(0, 4) & ((uint32_t)(regval) << 0U)) -#define TIMER_DMACFG_DMATA_CTL0 DMACFG_DMATA(0) /*!< DMA transfer address is TIMER_CTL0 */ -#define TIMER_DMACFG_DMATA_CTL1 DMACFG_DMATA(1) /*!< DMA transfer address is TIMER_CTL1 */ -#define TIMER_DMACFG_DMATA_SMCFG DMACFG_DMATA(2) /*!< DMA transfer address is TIMER_SMCFG */ -#define TIMER_DMACFG_DMATA_DMAINTEN DMACFG_DMATA(3) /*!< DMA transfer address is TIMER_DMAINTEN */ -#define TIMER_DMACFG_DMATA_INTF DMACFG_DMATA(4) /*!< DMA transfer address is TIMER_INTF */ -#define TIMER_DMACFG_DMATA_SWEVG DMACFG_DMATA(5) /*!< DMA transfer address is TIMER_SWEVG */ -#define TIMER_DMACFG_DMATA_CHCTL0 DMACFG_DMATA(6) /*!< DMA transfer address is TIMER_CHCTL0 */ -#define TIMER_DMACFG_DMATA_CHCTL1 DMACFG_DMATA(7) /*!< DMA transfer address is TIMER_CHCTL1 */ -#define TIMER_DMACFG_DMATA_CHCTL2 DMACFG_DMATA(8) /*!< DMA transfer address is TIMER_CHCTL2 */ -#define TIMER_DMACFG_DMATA_CNT DMACFG_DMATA(9) /*!< DMA transfer address is TIMER_CNT */ -#define TIMER_DMACFG_DMATA_PSC DMACFG_DMATA(10) /*!< DMA transfer address is TIMER_PSC */ -#define TIMER_DMACFG_DMATA_CAR DMACFG_DMATA(11) /*!< DMA transfer address is TIMER_CAR */ -#define TIMER_DMACFG_DMATA_CREP DMACFG_DMATA(12) /*!< DMA transfer address is TIMER_CREP */ -#define TIMER_DMACFG_DMATA_CH0CV DMACFG_DMATA(13) /*!< DMA transfer address is TIMER_CH0CV */ -#define TIMER_DMACFG_DMATA_CH1CV DMACFG_DMATA(14) /*!< DMA transfer address is TIMER_CH1CV */ -#define TIMER_DMACFG_DMATA_CH2CV DMACFG_DMATA(15) /*!< DMA transfer address is TIMER_CH2CV */ -#define TIMER_DMACFG_DMATA_CH3CV DMACFG_DMATA(16) /*!< DMA transfer address is TIMER_CH3CV */ -#define TIMER_DMACFG_DMATA_CCHP DMACFG_DMATA(17) /*!< DMA transfer address is TIMER_CCHP */ -#define TIMER_DMACFG_DMATA_DMACFG DMACFG_DMATA(18) /*!< DMA transfer address is TIMER_DMACFG */ - -/* DMA access burst length */ -#define DMACFG_DMATC(regval) (BITS(8, 12) & ((uint32_t)(regval) << 8U)) -#define TIMER_DMACFG_DMATC_1TRANSFER DMACFG_DMATC(0) /*!< DMA transfer 1 time */ -#define TIMER_DMACFG_DMATC_2TRANSFER DMACFG_DMATC(1) /*!< DMA transfer 2 times */ -#define TIMER_DMACFG_DMATC_3TRANSFER DMACFG_DMATC(2) /*!< DMA transfer 3 times */ -#define TIMER_DMACFG_DMATC_4TRANSFER DMACFG_DMATC(3) /*!< DMA transfer 4 times */ -#define TIMER_DMACFG_DMATC_5TRANSFER DMACFG_DMATC(4) /*!< DMA transfer 5 times */ -#define TIMER_DMACFG_DMATC_6TRANSFER DMACFG_DMATC(5) /*!< DMA transfer 6 times */ -#define TIMER_DMACFG_DMATC_7TRANSFER DMACFG_DMATC(6) /*!< DMA transfer 7 times */ -#define TIMER_DMACFG_DMATC_8TRANSFER DMACFG_DMATC(7) /*!< DMA transfer 8 times */ -#define TIMER_DMACFG_DMATC_9TRANSFER DMACFG_DMATC(8) /*!< DMA transfer 9 times */ -#define TIMER_DMACFG_DMATC_10TRANSFER DMACFG_DMATC(9) /*!< DMA transfer 10 times */ -#define TIMER_DMACFG_DMATC_11TRANSFER DMACFG_DMATC(10) /*!< DMA transfer 11 times */ -#define TIMER_DMACFG_DMATC_12TRANSFER DMACFG_DMATC(11) /*!< DMA transfer 12 times */ -#define TIMER_DMACFG_DMATC_13TRANSFER DMACFG_DMATC(12) /*!< DMA transfer 13 times */ -#define TIMER_DMACFG_DMATC_14TRANSFER DMACFG_DMATC(13) /*!< DMA transfer 14 times */ -#define TIMER_DMACFG_DMATC_15TRANSFER DMACFG_DMATC(14) /*!< DMA transfer 15 times */ -#define TIMER_DMACFG_DMATC_16TRANSFER DMACFG_DMATC(15) /*!< DMA transfer 16 times */ -#define TIMER_DMACFG_DMATC_17TRANSFER DMACFG_DMATC(16) /*!< DMA transfer 17 times */ -#define TIMER_DMACFG_DMATC_18TRANSFER DMACFG_DMATC(17) /*!< DMA transfer 18 times */ - -/* TIMER software event generation source */ -#define TIMER_EVENT_SRC_UPG ((uint16_t)0x0001U) /*!< update event generation */ -#define TIMER_EVENT_SRC_CH0G ((uint16_t)0x0002U) /*!< channel 0 capture or compare event generation */ -#define TIMER_EVENT_SRC_CH1G ((uint16_t)0x0004U) /*!< channel 1 capture or compare event generation */ -#define TIMER_EVENT_SRC_CH2G ((uint16_t)0x0008U) /*!< channel 2 capture or compare event generation */ -#define TIMER_EVENT_SRC_CH3G ((uint16_t)0x0010U) /*!< channel 3 capture or compare event generation */ -#define TIMER_EVENT_SRC_CMTG ((uint16_t)0x0020U) /*!< channel commutation event generation */ -#define TIMER_EVENT_SRC_TRGG ((uint16_t)0x0040U) /*!< trigger event generation */ -#define TIMER_EVENT_SRC_BRKG ((uint16_t)0x0080U) /*!< break event generation */ - -/* center-aligned mode selection */ -#define CTL0_CAM(regval) ((uint16_t)(BITS(5, 6) & ((uint32_t)(regval) << 5U))) -#define TIMER_COUNTER_EDGE CTL0_CAM(0) /*!< edge-aligned mode */ -#define TIMER_COUNTER_CENTER_DOWN CTL0_CAM(1) /*!< center-aligned and counting down assert mode */ -#define TIMER_COUNTER_CENTER_UP CTL0_CAM(2) /*!< center-aligned and counting up assert mode */ -#define TIMER_COUNTER_CENTER_BOTH CTL0_CAM(3) /*!< center-aligned and counting up/down assert mode */ - -/* TIMER prescaler reload mode */ -#define TIMER_PSC_RELOAD_NOW TIMER_SWEVG_UPG /*!< the prescaler is loaded right now */ -#define TIMER_PSC_RELOAD_UPDATE ((uint32_t)0x00000000U) /*!< the prescaler is loaded at the next update event */ - -/* count direction */ -#define TIMER_COUNTER_UP ((uint16_t)0x0000U) /*!< counter up direction */ -#define TIMER_COUNTER_DOWN ((uint16_t)TIMER_CTL0_DIR) /*!< counter down direction */ - -/* specify division ratio between TIMER clock and dead-time and sampling clock */ -#define CTL0_CKDIV(regval) ((uint16_t)(BITS(8, 9) & ((uint32_t)(regval) << 8U))) -#define TIMER_CKDIV_DIV1 CTL0_CKDIV(0) /*!< clock division value is 1,fDTS=fTIMER_CK */ -#define TIMER_CKDIV_DIV2 CTL0_CKDIV(1) /*!< clock division value is 2,fDTS= fTIMER_CK/2 */ -#define TIMER_CKDIV_DIV4 CTL0_CKDIV(2) /*!< clock division value is 4, fDTS= fTIMER_CK/4 */ - -/* single pulse mode */ -#define TIMER_SP_MODE_SINGLE TIMER_CTL0_SPM /*!< single pulse mode */ -#define TIMER_SP_MODE_REPETITIVE ((uint32_t)0x00000000U) /*!< repetitive pulse mode */ - -/* update source */ -#define TIMER_UPDATE_SRC_REGULAR TIMER_CTL0_UPS /*!< update generate only by counter overflow/underflow */ -#define TIMER_UPDATE_SRC_GLOBAL ((uint32_t)0x00000000U) /*!< update generate by setting of UPG bit or the counter overflow/underflow,or the slave mode controller trigger */ - -/* run mode off-state configure */ -#define TIMER_ROS_STATE_ENABLE ((uint16_t)TIMER_CCHP_ROS) /*!< when POEN bit is set, the channel output signals(CHx_O/CHx_ON) are enabled, with relationship to CHxEN/CHxNEN bits */ -#define TIMER_ROS_STATE_DISABLE ((uint16_t)0x0000U) /*!< when POEN bit is set, the channel output signals(CHx_O/CHx_ON) are disabled */ - -/* idle mode off-state configure */ -#define TIMER_IOS_STATE_ENABLE ((uint16_t)TIMER_CCHP_IOS) /*!< when POEN bit is reset, he channel output signals(CHx_O/CHx_ON) are enabled, with relationship to CHxEN/CHxNEN bits */ -#define TIMER_IOS_STATE_DISABLE ((uint16_t)0x0000U) /*!< when POEN bit is reset, the channel output signals(CHx_O/CHx_ON) are disabled */ - -/* break input polarity */ -#define TIMER_BREAK_POLARITY_LOW ((uint16_t)0x0000U) /*!< break input polarity is low */ -#define TIMER_BREAK_POLARITY_HIGH ((uint16_t)TIMER_CCHP_BRKP) /*!< break input polarity is high */ - -/* output automatic enable */ -#define TIMER_OUTAUTO_ENABLE ((uint16_t)TIMER_CCHP_OAEN) /*!< output automatic enable */ -#define TIMER_OUTAUTO_DISABLE ((uint16_t)0x0000U) /*!< output automatic disable */ - -/* complementary register protect control */ -#define CCHP_PROT(regval) ((uint16_t)(BITS(8, 9) & ((uint32_t)(regval) << 8U))) -#define TIMER_CCHP_PROT_OFF CCHP_PROT(0) /*!< protect disable */ -#define TIMER_CCHP_PROT_0 CCHP_PROT(1) /*!< PROT mode 0 */ -#define TIMER_CCHP_PROT_1 CCHP_PROT(2) /*!< PROT mode 1 */ -#define TIMER_CCHP_PROT_2 CCHP_PROT(3) /*!< PROT mode 2 */ - -/* break input enable */ -#define TIMER_BREAK_ENABLE ((uint16_t)TIMER_CCHP_BRKEN) /*!< break input enable */ -#define TIMER_BREAK_DISABLE ((uint16_t)0x0000U) /*!< break input disable */ - -/* TIMER channel n(n=0,1,2,3) */ -#define TIMER_CH_0 ((uint16_t)0x0000U) /*!< TIMER channel 0(TIMERx(x=0..4,7..13)) */ -#define TIMER_CH_1 ((uint16_t)0x0001U) /*!< TIMER channel 1(TIMERx(x=0..4,7,8,11)) */ -#define TIMER_CH_2 ((uint16_t)0x0002U) /*!< TIMER channel 2(TIMERx(x=0..4,7)) */ -#define TIMER_CH_3 ((uint16_t)0x0003U) /*!< TIMER channel 3(TIMERx(x=0..4,7)) */ - -/* channel enable state */ -#define TIMER_CCX_ENABLE ((uint16_t)0x0001U) /*!< channel enable */ -#define TIMER_CCX_DISABLE ((uint16_t)0x0000U) /*!< channel disable */ - -/* channel complementary output enable state */ -#define TIMER_CCXN_ENABLE ((uint16_t)0x0004U) /*!< channel complementary enable */ -#define TIMER_CCXN_DISABLE ((uint16_t)0x0000U) /*!< channel complementary disable */ - -/* channel output polarity */ -#define TIMER_OC_POLARITY_HIGH ((uint16_t)0x0000U) /*!< channel output polarity is high */ -#define TIMER_OC_POLARITY_LOW ((uint16_t)0x0002U) /*!< channel output polarity is low */ - -/* channel complementary output polarity */ -#define TIMER_OCN_POLARITY_HIGH ((uint16_t)0x0000U) /*!< channel complementary output polarity is high */ -#define TIMER_OCN_POLARITY_LOW ((uint16_t)0x0008U) /*!< channel complementary output polarity is low */ - -/* idle state of channel output */ -#define TIMER_OC_IDLE_STATE_HIGH ((uint16_t)0x0100) /*!< idle state of channel output is high */ -#define TIMER_OC_IDLE_STATE_LOW ((uint16_t)0x0000) /*!< idle state of channel output is low */ - -/* idle state of channel complementary output */ -#define TIMER_OCN_IDLE_STATE_HIGH ((uint16_t)0x0200U) /*!< idle state of channel complementary output is high */ -#define TIMER_OCN_IDLE_STATE_LOW ((uint16_t)0x0000U) /*!< idle state of channel complementary output is low */ - -/* channel output compare mode */ -#define TIMER_OC_MODE_TIMING ((uint16_t)0x0000U) /*!< frozen mode */ -#define TIMER_OC_MODE_ACTIVE ((uint16_t)0x0010U) /*!< set the channel output */ -#define TIMER_OC_MODE_INACTIVE ((uint16_t)0x0020U) /*!< clear the channel output */ -#define TIMER_OC_MODE_TOGGLE ((uint16_t)0x0030U) /*!< toggle on match */ -#define TIMER_OC_MODE_LOW ((uint16_t)0x0040U) /*!< force low mode */ -#define TIMER_OC_MODE_HIGH ((uint16_t)0x0050U) /*!< force high mode */ -#define TIMER_OC_MODE_PWM0 ((uint16_t)0x0060U) /*!< PWM0 mode */ -#define TIMER_OC_MODE_PWM1 ((uint16_t)0x0070U) /*!< PWM1 mode*/ - -/* channel output compare shadow enable */ -#define TIMER_OC_SHADOW_ENABLE ((uint16_t)0x0008U) /*!< channel output shadow state enable */ -#define TIMER_OC_SHADOW_DISABLE ((uint16_t)0x0000U) /*!< channel output shadow state disable */ - -/* channel output compare fast enable */ -#define TIMER_OC_FAST_ENABLE ((uint16_t)0x0004) /*!< channel output fast function enable */ -#define TIMER_OC_FAST_DISABLE ((uint16_t)0x0000) /*!< channel output fast function disable */ - -/* channel output compare clear enable */ -#define TIMER_OC_CLEAR_ENABLE ((uint16_t)0x0080U) /*!< channel output clear function enable */ -#define TIMER_OC_CLEAR_DISABLE ((uint16_t)0x0000U) /*!< channel output clear function disable */ - -/* channel control shadow register update control */ -#define TIMER_UPDATECTL_CCU ((uint32_t)0x00000000U) /*!< the shadow registers update by when CMTG bit is set */ -#define TIMER_UPDATECTL_CCUTRI TIMER_CTL1_CCUC /*!< the shadow registers update by when CMTG bit is set or an rising edge of TRGI occurs */ - -/* channel input capture polarity */ -#define TIMER_IC_POLARITY_RISING ((uint16_t)0x0000U) /*!< input capture rising edge */ -#define TIMER_IC_POLARITY_FALLING ((uint16_t)0x0002U) /*!< input capture falling edge */ - -/* timer input capture selection */ -#define TIMER_IC_SELECTION_DIRECTTI ((uint16_t)0x0001U) /*!< channel y is configured as input and icy is mapped on CIy */ -#define TIMER_IC_SELECTION_INDIRECTTI ((uint16_t)0x0002U) /*!< channel y is configured as input and icy is mapped on opposite input */ -#define TIMER_IC_SELECTION_ITS ((uint16_t)0x0003U) /*!< channel y is configured as input and icy is mapped on ITS */ - -/* channel input capture prescaler */ -#define TIMER_IC_PSC_DIV1 ((uint16_t)0x0000U) /*!< no prescaler */ -#define TIMER_IC_PSC_DIV2 ((uint16_t)0x0004U) /*!< divided by 2 */ -#define TIMER_IC_PSC_DIV4 ((uint16_t)0x0008U) /*!< divided by 4 */ -#define TIMER_IC_PSC_DIV8 ((uint16_t)0x000CU) /*!< divided by 8 */ - -/* trigger selection */ -#define SMCFG_TRGSEL(regval) (BITS(4, 6) & ((uint32_t)(regval) << 4U)) -#define TIMER_SMCFG_TRGSEL_ITI0 SMCFG_TRGSEL(0) /*!< internal trigger 0 */ -#define TIMER_SMCFG_TRGSEL_ITI1 SMCFG_TRGSEL(1) /*!< internal trigger 1 */ -#define TIMER_SMCFG_TRGSEL_ITI2 SMCFG_TRGSEL(2) /*!< internal trigger 2 */ -#define TIMER_SMCFG_TRGSEL_ITI3 SMCFG_TRGSEL(3) /*!< internal trigger 3 */ -#define TIMER_SMCFG_TRGSEL_CI0F_ED SMCFG_TRGSEL(4) /*!< TI0 Edge Detector */ -#define TIMER_SMCFG_TRGSEL_CI0FE0 SMCFG_TRGSEL(5) /*!< filtered TIMER input 0 */ -#define TIMER_SMCFG_TRGSEL_CI1FE1 SMCFG_TRGSEL(6) /*!< filtered TIMER input 1 */ -#define TIMER_SMCFG_TRGSEL_ETIFP SMCFG_TRGSEL(7) /*!< external trigger */ - -/* master mode control */ -#define CTL1_MMC(regval) (BITS(4, 6) & ((uint32_t)(regval) << 4U)) -#define TIMER_TRI_OUT_SRC_RESET CTL1_MMC(0) /*!< the UPG bit as trigger output */ -#define TIMER_TRI_OUT_SRC_ENABLE CTL1_MMC(1) /*!< the counter enable signal TIMER_CTL0_CEN as trigger output */ -#define TIMER_TRI_OUT_SRC_UPDATE CTL1_MMC(2) /*!< update event as trigger output */ -#define TIMER_TRI_OUT_SRC_CH0 CTL1_MMC(3) /*!< a capture or a compare match occurred in channel 0 as trigger output TRGO */ -#define TIMER_TRI_OUT_SRC_O0CPRE CTL1_MMC(4) /*!< O0CPRE as trigger output */ -#define TIMER_TRI_OUT_SRC_O1CPRE CTL1_MMC(5) /*!< O1CPRE as trigger output */ -#define TIMER_TRI_OUT_SRC_O2CPRE CTL1_MMC(6) /*!< O2CPRE as trigger output */ -#define TIMER_TRI_OUT_SRC_O3CPRE CTL1_MMC(7) /*!< O3CPRE as trigger output */ - -/* slave mode control */ -#define SMCFG_SMC(regval) (BITS(0, 2) & ((uint32_t)(regval) << 0U)) -#define TIMER_SLAVE_MODE_DISABLE SMCFG_SMC(0) /*!< slave mode disable */ -#define TIMER_ENCODER_MODE0 SMCFG_SMC(1) /*!< encoder mode 0 */ -#define TIMER_ENCODER_MODE1 SMCFG_SMC(2) /*!< encoder mode 1 */ -#define TIMER_ENCODER_MODE2 SMCFG_SMC(3) /*!< encoder mode 2 */ -#define TIMER_SLAVE_MODE_RESTART SMCFG_SMC(4) /*!< restart mode */ -#define TIMER_SLAVE_MODE_PAUSE SMCFG_SMC(5) /*!< pause mode */ -#define TIMER_SLAVE_MODE_EVENT SMCFG_SMC(6) /*!< event mode */ -#define TIMER_SLAVE_MODE_EXTERNAL0 SMCFG_SMC(7) /*!< external clock mode 0 */ - -/* master slave mode selection */ -#define TIMER_MASTER_SLAVE_MODE_ENABLE TIMER_SMCFG_MSM /*!< master slave mode enable */ -#define TIMER_MASTER_SLAVE_MODE_DISABLE ((uint32_t)0x00000000U) /*!< master slave mode disable */ - -/* external trigger prescaler */ -#define SMCFG_ETPSC(regval) (BITS(12, 13) & ((uint32_t)(regval) << 12U)) -#define TIMER_EXT_TRI_PSC_OFF SMCFG_ETPSC(0) /*!< no divided */ -#define TIMER_EXT_TRI_PSC_DIV2 SMCFG_ETPSC(1) /*!< divided by 2 */ -#define TIMER_EXT_TRI_PSC_DIV4 SMCFG_ETPSC(2) /*!< divided by 4 */ -#define TIMER_EXT_TRI_PSC_DIV8 SMCFG_ETPSC(3) /*!< divided by 8 */ - -/* external trigger polarity */ -#define TIMER_ETP_FALLING TIMER_SMCFG_ETP /*!< active low or falling edge active */ -#define TIMER_ETP_RISING ((uint32_t)0x00000000U) /*!< active high or rising edge active */ - -/* channel 0 trigger input selection */ -#define TIMER_HALLINTERFACE_ENABLE TIMER_CTL1_TI0S /*!< TIMER hall sensor mode enable */ -#define TIMER_HALLINTERFACE_DISABLE ((uint32_t)0x00000000U) /*!< TIMER hall sensor mode disable */ - -/* TIMERx(x=0..4,7..13) write CHxVAL register selection */ -#define TIMER_CHVSEL_ENABLE ((uint16_t)TIMER_CFG_OUTSEL) /*!< write CHxVAL register selection enable */ -#define TIMER_CHVSEL_DISABLE ((uint16_t)0x0000U) /*!< write CHxVAL register selection disable */ - -/* function declarations */ -/* TIMER timebase */ -/* deinit a TIMER */ -void timer_deinit(uint32_t timer_periph); -/* initialize TIMER init parameter struct */ -void timer_struct_para_init(timer_parameter_struct* initpara); -/* initialize TIMER counter */ -void timer_init(uint32_t timer_periph, timer_parameter_struct* initpara); -/* enable a TIMER */ -void timer_enable(uint32_t timer_periph); -/* disable a TIMER */ -void timer_disable(uint32_t timer_periph); -/* enable the auto reload shadow function */ -void timer_auto_reload_shadow_enable(uint32_t timer_periph); -/* disable the auto reload shadow function */ -void timer_auto_reload_shadow_disable(uint32_t timer_periph); -/* enable the update event */ -void timer_update_event_enable(uint32_t timer_periph); -/* disable the update event */ -void timer_update_event_disable(uint32_t timer_periph); -/* set TIMER counter alignment mode */ -void timer_counter_alignment(uint32_t timer_periph, uint16_t aligned); -/* set TIMER counter up direction */ -void timer_counter_up_direction(uint32_t timer_periph); -/* set TIMER counter down direction */ -void timer_counter_down_direction(uint32_t timer_periph); -/* configure TIMER prescaler */ -void timer_prescaler_config(uint32_t timer_periph, uint16_t prescaler, uint32_t pscreload); -/* configure TIMER repetition register value */ -void timer_repetition_value_config(uint32_t timer_periph, uint8_t repetition); -/* configure TIMER autoreload register value */ -void timer_autoreload_value_config(uint32_t timer_periph, uint32_t autoreload); -/* configure TIMER counter register value */ -void timer_counter_value_config(uint32_t timer_periph, uint32_t counter); -/* read TIMER counter value */ -uint32_t timer_counter_read(uint32_t timer_periph); -/* read TIMER prescaler value */ -uint16_t timer_prescaler_read(uint32_t timer_periph); -/* configure TIMER single pulse mode */ -void timer_single_pulse_mode_config(uint32_t timer_periph, uint32_t spmode); -/* configure TIMER update source */ -void timer_update_source_config(uint32_t timer_periph, uint32_t update); - -/* timer DMA and event */ -/* enable the TIMER DMA */ -void timer_dma_enable(uint32_t timer_periph, uint16_t dma); -/* disable the TIMER DMA */ -void timer_dma_disable(uint32_t timer_periph, uint16_t dma); -/* channel DMA request source selection */ -void timer_channel_dma_request_source_select(uint32_t timer_periph, uint32_t dma_request); -/* configure the TIMER DMA transfer */ -void timer_dma_transfer_config(uint32_t timer_periph, uint32_t dma_baseaddr, uint32_t dma_lenth); -/* software generate events */ -void timer_event_software_generate(uint32_t timer_periph, uint16_t event); - -/* TIMER channel complementary protection */ -/* initialize TIMER break parameter struct */ -void timer_break_struct_para_init(timer_break_parameter_struct* breakpara); -/* configure TIMER break function */ -void timer_break_config(uint32_t timer_periph, timer_break_parameter_struct* breakpara); -/* enable TIMER break function */ -void timer_break_enable(uint32_t timer_periph); -/* disable TIMER break function */ -void timer_break_disable(uint32_t timer_periph); -/* enable TIMER output automatic function */ -void timer_automatic_output_enable(uint32_t timer_periph); -/* disable TIMER output automatic function */ -void timer_automatic_output_disable(uint32_t timer_periph); -/* enable or disable TIMER primary output function */ -void timer_primary_output_config(uint32_t timer_periph, ControlStatus newvalue); -/* enable or disable channel capture/compare control shadow register */ -void timer_channel_control_shadow_config(uint32_t timer_periph, ControlStatus newvalue); -/* configure TIMER channel control shadow register update control */ -void timer_channel_control_shadow_update_config(uint32_t timer_periph, uint32_t ccuctl); - -/* TIMER channel output */ -/* initialize TIMER channel output parameter struct */ -void timer_channel_output_struct_para_init(timer_oc_parameter_struct* ocpara); -/* configure TIMER channel output function */ -void timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_oc_parameter_struct* ocpara); -/* configure TIMER channel output compare mode */ -void timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel, uint16_t ocmode); -/* configure TIMER channel output pulse value */ -void timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t channel, uint16_t pulse); -/* configure TIMER channel output shadow function */ -void timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, uint16_t ocshadow); -/* configure TIMER channel output fast function */ -void timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, uint16_t ocfast); -/* configure TIMER channel output clear function */ -void timer_channel_output_clear_config(uint32_t timer_periph, uint16_t channel, uint16_t occlear); -/* configure TIMER channel output polarity */ -void timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocpolarity); -/* configure TIMER channel complementary output polarity */ -void timer_channel_complementary_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnpolarity); -/* configure TIMER channel enable state */ -void timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state); -/* configure TIMER channel complementary output enable state */ -void timer_channel_complementary_output_state_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnstate); - -/* TIMER channel input */ -/* initialize TIMER channel input parameter struct */ -void timer_channel_input_struct_para_init(timer_ic_parameter_struct* icpara); -/* configure TIMER input capture parameter */ -void timer_input_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpara); -/* configure TIMER channel input capture prescaler value */ -void timer_channel_input_capture_prescaler_config(uint32_t timer_periph, uint16_t channel, uint16_t prescaler); -/* read TIMER channel capture compare register value */ -uint32_t timer_channel_capture_value_register_read(uint32_t timer_periph, uint16_t channel); -/* configure TIMER input pwm capture function */ -void timer_input_pwm_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpwm); -/* configure TIMER hall sensor mode */ -void timer_hall_mode_config(uint32_t timer_periph, uint32_t hallmode); - -/* TIMER master and slave */ -/* select TIMER input trigger source */ -void timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger); -/* select TIMER master mode output trigger source */ -void timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t outrigger); -/* select TIMER slave mode */ -void timer_slave_mode_select(uint32_t timer_periph, uint32_t slavemode); -/* configure TIMER master slave mode */ -void timer_master_slave_mode_config(uint32_t timer_periph, uint32_t masterslave); -/* configure TIMER external trigger input */ -void timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint8_t extfilter); -/* configure TIMER quadrature decoder mode */ -void timer_quadrature_decoder_mode_config(uint32_t timer_periph, uint32_t decomode, uint16_t ic0polarity, uint16_t ic1polarity); -/* configure TIMER internal clock mode */ -void timer_internal_clock_config(uint32_t timer_periph); -/* configure TIMER the internal trigger as external clock input */ -void timer_internal_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t intrigger); -/* configure TIMER the external trigger as external clock input */ -void timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t extrigger, uint16_t extpolarity, uint8_t extfilter); -/* configure TIMER the external clock mode 0 */ -void timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint8_t extfilter); -/* configure TIMER the external clock mode 1 */ -void timer_external_clock_mode1_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint8_t extfilter); -/* disable TIMER the external clock mode 1 */ -void timer_external_clock_mode1_disable(uint32_t timer_periph); - -/* TIMER interrupt and flag */ -/* enable the TIMER interrupt */ -void timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt); -/* disable the TIMER interrupt */ -void timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt); -/* get TIMER interrupt flag */ -FlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt); -/* clear TIMER interrupt flag */ -void timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt); -/* get TIMER flag */ -FlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag); -/* clear TIMER flag */ -void timer_flag_clear(uint32_t timer_periph, uint32_t flag); - -#endif /* GD32E10X_TIMER_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_usart.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_usart.h deleted file mode 100644 index 599c91f..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_usart.h +++ /dev/null @@ -1,377 +0,0 @@ -/*! - \file gd32f10x_usart.h - \brief definitions for the USART - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.1, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_USART_H -#define GD32F10X_USART_H - -#include "gd32f10x.h" - -/* USARTx(x=0,1,2)/UARTx(x=3,4) definitions */ -#define USART1 USART_BASE /*!< USART1 base address */ -#define USART2 (USART_BASE+(0x00000400U)) /*!< USART2 base address */ -#define UART3 (USART_BASE+(0x00000800U)) /*!< UART3 base address */ -#define UART4 (USART_BASE+(0x00000C00U)) /*!< UART4 base address */ -#define USART0 (USART_BASE+(0x0000F400U)) /*!< USART0 base address */ - -/* registers definitions */ -#define USART_STAT(usartx) REG32((usartx) + (0x00000000U)) /*!< USART status register */ -#define USART_DATA(usartx) REG32((usartx) + (0x00000004U)) /*!< USART data register */ -#define USART_BAUD(usartx) REG32((usartx) + (0x00000008U)) /*!< USART baud rate register */ -#define USART_CTL0(usartx) REG32((usartx) + (0x0000000CU)) /*!< USART control register 0 */ -#define USART_CTL1(usartx) REG32((usartx) + (0x00000010U)) /*!< USART control register 1 */ -#define USART_CTL2(usartx) REG32((usartx) + (0x00000014U)) /*!< USART control register 2 */ -#define USART_GP(usartx) REG32((usartx) + (0x00000018U)) /*!< USART guard time and prescaler register */ - -/* bits definitions */ -/* USARTx_STAT */ -#define USART_STAT_PERR BIT(0) /*!< parity error flag */ -#define USART_STAT_FERR BIT(1) /*!< frame error flag */ -#define USART_STAT_NERR BIT(2) /*!< noise error flag */ -#define USART_STAT_ORERR BIT(3) /*!< overrun error */ -#define USART_STAT_IDLEF BIT(4) /*!< IDLE frame detected flag */ -#define USART_STAT_RBNE BIT(5) /*!< read data buffer not empty */ -#define USART_STAT_TC BIT(6) /*!< transmission complete */ -#define USART_STAT_TBE BIT(7) /*!< transmit data buffer empty */ -#define USART_STAT_LBDF BIT(8) /*!< LIN break detected flag */ -#define USART_STAT_CTSF BIT(9) /*!< CTS change flag */ - -/* USARTx_DATA */ -#define USART_DATA_DATA BITS(0,8) /*!< transmit or read data value */ - -/* USARTx_BAUD */ -#define USART_BAUD_FRADIV BITS(0,3) /*!< fraction part of baud-rate divider */ -#define USART_BAUD_INTDIV BITS(4,15) /*!< integer part of baud-rate divider */ - -/* USARTx_CTL0 */ -#define USART_CTL0_SBKCMD BIT(0) /*!< send break command */ -#define USART_CTL0_RWU BIT(1) /*!< receiver wakeup from mute mode */ -#define USART_CTL0_REN BIT(2) /*!< receiver enable */ -#define USART_CTL0_TEN BIT(3) /*!< transmitter enable */ -#define USART_CTL0_IDLEIE BIT(4) /*!< idle line detected interrupt enable */ -#define USART_CTL0_RBNEIE BIT(5) /*!< read data buffer not empty interrupt and overrun error interrupt enable */ -#define USART_CTL0_TCIE BIT(6) /*!< transmission complete interrupt enable */ -#define USART_CTL0_TBEIE BIT(7) /*!< transmitter buffer empty interrupt enable */ -#define USART_CTL0_PERRIE BIT(8) /*!< parity error interrupt enable */ -#define USART_CTL0_PM BIT(9) /*!< parity mode */ -#define USART_CTL0_PCEN BIT(10) /*!< parity check function enable */ -#define USART_CTL0_WM BIT(11) /*!< wakeup method in mute mode */ -#define USART_CTL0_WL BIT(12) /*!< word length */ -#define USART_CTL0_UEN BIT(13) /*!< USART enable */ - -/* USARTx_CTL1 */ -#define USART_CTL1_ADDR BITS(0,3) /*!< address of USART */ -#define USART_CTL1_LBLEN BIT(5) /*!< LIN break frame length */ -#define USART_CTL1_LBDIE BIT(6) /*!< LIN break detected interrupt eanble */ -#define USART_CTL1_CLEN BIT(8) /*!< CK length */ -#define USART_CTL1_CPH BIT(9) /*!< CK phase */ -#define USART_CTL1_CPL BIT(10) /*!< CK polarity */ -#define USART_CTL1_CKEN BIT(11) /*!< CK pin enable */ -#define USART_CTL1_STB BITS(12,13) /*!< STOP bits length */ -#define USART_CTL1_LMEN BIT(14) /*!< LIN mode enable */ - -/* USARTx_CTL2 */ -#define USART_CTL2_ERRIE BIT(0) /*!< error interrupt enable */ -#define USART_CTL2_IREN BIT(1) /*!< IrDA mode enable */ -#define USART_CTL2_IRLP BIT(2) /*!< IrDA low-power */ -#define USART_CTL2_HDEN BIT(3) /*!< half-duplex enable */ -#define USART_CTL2_NKEN BIT(4) /*!< NACK enable in smartcard mode */ -#define USART_CTL2_SCEN BIT(5) /*!< smartcard mode enable */ -#define USART_CTL2_DENR BIT(6) /*!< DMA request enable for reception */ -#define USART_CTL2_DENT BIT(7) /*!< DMA request enable for transmission */ -#define USART_CTL2_RTSEN BIT(8) /*!< RTS enable */ -#define USART_CTL2_CTSEN BIT(9) /*!< CTS enable */ -#define USART_CTL2_CTSIE BIT(10) /*!< CTS interrupt enable */ - -/* USARTx_GP */ -#define USART_GP_PSC BITS(0,7) /*!< prescaler value for dividing the system clock */ -#define USART_GP_GUAT BITS(8,15) /*!< guard time value in smartcard mode */ - -/* constants definitions */ -/* define the USART bit position and its register index offset */ -#define USART_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define USART_REG_VAL(usartx, offset) (REG32((usartx) + (((uint32_t)(offset) & (0x0000FFFFU)) >> 6))) -#define USART_BIT_POS(val) ((uint32_t)(val) & (0x0000001FU)) -#define USART_REGIDX_BIT2(regidx, bitpos, regidx2, bitpos2) (((uint32_t)(regidx2) << 22) | (uint32_t)((bitpos2) << 16)\ - | (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))) -#define USART_REG_VAL2(usartx, offset) (REG32((usartx) + ((uint32_t)(offset) >> 22))) -#define USART_BIT_POS2(val) (((uint32_t)(val) & (0x001F0000U)) >> 16) - -/* register offset */ -#define USART_STAT_REG_OFFSET (0x00000000U) /*!< STAT register offset */ -#define USART_CTL0_REG_OFFSET (0x0000000CU) /*!< CTL0 register offset */ -#define USART_CTL1_REG_OFFSET (0x00000010U) /*!< CTL1 register offset */ -#define USART_CTL2_REG_OFFSET (0x00000014U) /*!< CTL2 register offset */ - -/* USART flags */ -typedef enum -{ - /* flags in STAT register */ - USART_FLAG_CTSF = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 9U), /*!< CTS change flag */ - USART_FLAG_LBDF = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 8U), /*!< LIN break detected flag */ - USART_FLAG_TBE = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 7U), /*!< transmit data buffer empty */ - USART_FLAG_TC = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 6U), /*!< transmission complete */ - USART_FLAG_RBNE = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 5U), /*!< read data buffer not empty */ - USART_FLAG_IDLEF = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 4U), /*!< IDLE frame detected flag */ - USART_FLAG_ORERR = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 3U), /*!< overrun error */ - USART_FLAG_NERR = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 2U), /*!< noise error flag */ - USART_FLAG_FERR = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 1U), /*!< frame error flag */ - USART_FLAG_PERR = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 0U), /*!< parity error flag */ -}usart_flag_enum; - -/* USART interrupt flags */ -typedef enum -{ - /* interrupt flags in CTL0 register */ - USART_INT_FLAG_PERR = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 8U, USART_STAT_REG_OFFSET, 0U), /*!< parity error interrupt and flag */ - USART_INT_FLAG_TBE = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 7U, USART_STAT_REG_OFFSET, 7U), /*!< transmitter buffer empty interrupt and flag */ - USART_INT_FLAG_TC = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 6U, USART_STAT_REG_OFFSET, 6U), /*!< transmission complete interrupt and flag */ - USART_INT_FLAG_RBNE = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 5U, USART_STAT_REG_OFFSET, 5U), /*!< read data buffer not empty interrupt and flag */ - USART_INT_FLAG_RBNE_ORERR = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 5U, USART_STAT_REG_OFFSET, 3U), /*!< read data buffer not empty interrupt and overrun error flag */ - USART_INT_FLAG_IDLE = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 4U, USART_STAT_REG_OFFSET, 4U), /*!< IDLE line detected interrupt and flag */ - /* interrupt flags in CTL1 register */ - USART_INT_FLAG_LBD = USART_REGIDX_BIT2(USART_CTL1_REG_OFFSET, 6U, USART_STAT_REG_OFFSET, 8U), /*!< LIN break detected interrupt and flag */ - /* interrupt flags in CTL2 register */ - USART_INT_FLAG_CTS = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 10U, USART_STAT_REG_OFFSET, 9U), /*!< CTS interrupt and flag */ - USART_INT_FLAG_ERR_ORERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT_REG_OFFSET, 3U), /*!< error interrupt and overrun error */ - USART_INT_FLAG_ERR_NERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT_REG_OFFSET, 2U), /*!< error interrupt and noise error flag */ - USART_INT_FLAG_ERR_FERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT_REG_OFFSET, 1U), /*!< error interrupt and frame error flag */ -}usart_interrupt_flag_enum; - -/* USART interrupt enable or disable */ -typedef enum -{ - /* interrupt in CTL0 register */ - USART_INT_PERR = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 8U), /*!< parity error interrupt */ - USART_INT_TBE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 7U), /*!< transmitter buffer empty interrupt */ - USART_INT_TC = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 6U), /*!< transmission complete interrupt */ - USART_INT_RBNE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 5U), /*!< read data buffer not empty interrupt and overrun error interrupt */ - USART_INT_IDLE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 4U), /*!< IDLE line detected interrupt */ - /* interrupt in CTL1 register */ - USART_INT_LBD = USART_REGIDX_BIT(USART_CTL1_REG_OFFSET, 6U), /*!< LIN break detected interrupt */ - /* interrupt in CTL2 register */ - USART_INT_CTS = USART_REGIDX_BIT(USART_CTL2_REG_OFFSET, 10U), /*!< CTS interrupt */ - USART_INT_ERR = USART_REGIDX_BIT(USART_CTL2_REG_OFFSET, 0U), /*!< error interrupt */ -}usart_interrupt_enum; - -/* USART receiver configure */ -#define CTL0_REN(regval) (BIT(2) & ((uint32_t)(regval) << 2)) -#define USART_RECEIVE_ENABLE CTL0_REN(1) /*!< enable receiver */ -#define USART_RECEIVE_DISABLE CTL0_REN(0) /*!< disable receiver */ - -/* USART transmitter configure */ -#define CTL0_TEN(regval) (BIT(3) & ((uint32_t)(regval) << 3)) -#define USART_TRANSMIT_ENABLE CTL0_TEN(1) /*!< enable transmitter */ -#define USART_TRANSMIT_DISABLE CTL0_TEN(0) /*!< disable transmitter */ - -/* USART parity bits definitions */ -#define CTL0_PM(regval) (BITS(9,10) & ((uint32_t)(regval) << 9)) -#define USART_PM_NONE CTL0_PM(0) /*!< no parity */ -#define USART_PM_EVEN CTL0_PM(2) /*!< even parity */ -#define USART_PM_ODD CTL0_PM(3) /*!< odd parity */ - -/* USART wakeup method in mute mode */ -#define CTL0_WM(regval) (BIT(11) & ((uint32_t)(regval) << 11)) -#define USART_WM_IDLE CTL0_WM(0) /*!< idle line */ -#define USART_WM_ADDR CTL0_WM(1) /*!< address match */ - -/* USART word length definitions */ -#define CTL0_WL(regval) (BIT(12) & ((uint32_t)(regval) << 12)) -#define USART_WL_8BIT CTL0_WL(0) /*!< 8 bits */ -#define USART_WL_9BIT CTL0_WL(1) /*!< 9 bits */ - -/* USART stop bits definitions */ -#define CTL1_STB(regval) (BITS(12,13) & ((uint32_t)(regval) << 12)) -#define USART_STB_1BIT CTL1_STB(0) /*!< 1 bit */ -#define USART_STB_0_5BIT CTL1_STB(1) /*!< 0.5 bit */ -#define USART_STB_2BIT CTL1_STB(2) /*!< 2 bits */ -#define USART_STB_1_5BIT CTL1_STB(3) /*!< 1.5 bits */ - -/* USART LIN break frame length */ -#define CTL1_LBLEN(regval) (BIT(5) & ((uint32_t)(regval) << 5)) -#define USART_LBLEN_10B CTL1_LBLEN(0) /*!< 10 bits */ -#define USART_LBLEN_11B CTL1_LBLEN(1) /*!< 11 bits */ - -/* USART CK length */ -#define CTL1_CLEN(regval) (BIT(8) & ((uint32_t)(regval) << 8)) -#define USART_CLEN_NONE CTL1_CLEN(0) /*!< there are 7 CK pulses for an 8 bit frame and 8 CK pulses for a 9 bit frame */ -#define USART_CLEN_EN CTL1_CLEN(1) /*!< there are 8 CK pulses for an 8 bit frame and 9 CK pulses for a 9 bit frame */ - -/* USART clock phase */ -#define CTL1_CPH(regval) (BIT(9) & ((uint32_t)(regval) << 9)) -#define USART_CPH_1CK CTL1_CPH(0) /*!< first clock transition is the first data capture edge */ -#define USART_CPH_2CK CTL1_CPH(1) /*!< second clock transition is the first data capture edge */ - -/* USART clock polarity */ -#define CTL1_CPL(regval) (BIT(10) & ((uint32_t)(regval) << 10)) -#define USART_CPL_LOW CTL1_CPL(0) /*!< steady low value on CK pin */ -#define USART_CPL_HIGH CTL1_CPL(1) /*!< steady high value on CK pin */ - -/* USART DMA request for receive configure */ -#define CLT2_DENR(regval) (BIT(6) & ((uint32_t)(regval) << 6)) -#define USART_DENR_ENABLE CLT2_DENR(1) /*!< DMA request enable for reception */ -#define USART_DENR_DISABLE CLT2_DENR(0) /*!< DMA request disable for reception */ - -/* USART DMA request for transmission configure */ -#define CLT2_DENT(regval) (BIT(7) & ((uint32_t)(regval) << 7)) -#define USART_DENT_ENABLE CLT2_DENT(1) /*!< DMA request enable for transmission */ -#define USART_DENT_DISABLE CLT2_DENT(0) /*!< DMA request disable for transmission */ - -/* USART RTS configure */ -#define CLT2_RTSEN(regval) (BIT(8) & ((uint32_t)(regval) << 8)) -#define USART_RTS_ENABLE CLT2_RTSEN(1) /*!< RTS enable */ -#define USART_RTS_DISABLE CLT2_RTSEN(0) /*!< RTS disable */ - -/* USART CTS configure */ -#define CLT2_CTSEN(regval) (BIT(9) & ((uint32_t)(regval) << 9)) -#define USART_CTS_ENABLE CLT2_CTSEN(1) /*!< CTS enable */ -#define USART_CTS_DISABLE CLT2_CTSEN(0) /*!< CTS disable */ - -/* USART IrDA low-power enable */ -#define CTL2_IRLP(regval) (BIT(2) & ((uint32_t)(regval) << 2)) -#define USART_IRLP_LOW CTL2_IRLP(1) /*!< low-power */ -#define USART_IRLP_NORMAL CTL2_IRLP(0) /*!< normal */ - -/* function declarations */ -/* initialization functions */ -/* reset USART */ -void usart_deinit(uint32_t usart_periph); -/* configure USART baud rate value */ -void usart_baudrate_set(uint32_t usart_periph, uint32_t baudval); -/* configure USART parity function */ -void usart_parity_config(uint32_t usart_periph, uint32_t paritycfg); -/* configure USART word length */ -void usart_word_length_set(uint32_t usart_periph, uint32_t wlen); -/* configure USART stop bit length */ -void usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen); - -/* USART normal mode communication */ -/* enable USART */ -void usart_enable(uint32_t usart_periph); -/* disable USART */ -void usart_disable(uint32_t usart_periph); -/* configure USART transmitter */ -void usart_transmit_config(uint32_t usart_periph, uint32_t txconfig); -/* configure USART receiver */ -void usart_receive_config(uint32_t usart_periph, uint32_t rxconfig); -/* USART transmit data function */ -void usart_data_transmit(uint32_t usart_periph, uint16_t data); -/* USART receive data function */ -uint16_t usart_data_receive(uint32_t usart_periph); - -/* multi-processor communication */ -/* configure address of the USART */ -void usart_address_config(uint32_t usart_periph, uint8_t addr); -/* enable mute mode */ -void usart_mute_mode_enable(uint32_t usart_periph); -/* disable mute mode */ -void usart_mute_mode_disable(uint32_t usart_periph); -/* configure wakeup method in mute mode */ -void usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmethod); - -/* LIN mode communication */ -/* enable LIN mode */ -void usart_lin_mode_enable(uint32_t usart_periph); -/* disable LIN mode */ -void usart_lin_mode_disable(uint32_t usart_periph); -/* configure LIN break frame length */ -void usart_lin_break_detection_length_config(uint32_t usart_periph, uint32_t lblen); -/* send break frame */ -void usart_send_break(uint32_t usart_periph); - -/* half-duplex communication */ -/* enable half-duplex */ -void usart_halfduplex_enable(uint32_t usart_periph); -/* disable half-duplex */ -void usart_halfduplex_disable(uint32_t usart_periph); - -/* synchronous communication */ -/* enable CK pin in synchronous mode */ -void usart_synchronous_clock_enable(uint32_t usart_periph); -/* disable CK pin in synchronous mode */ -void usart_synchronous_clock_disable(uint32_t usart_periph); -/* configure usart synchronous mode parameters */ -void usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl); - -/* smartcard communication */ -/* configure guard time value in smartcard mode */ -void usart_guard_time_config(uint32_t usart_periph,uint32_t gaut); -/* enable smartcard mode */ -void usart_smartcard_mode_enable(uint32_t usart_periph); -/* disable smartcard mode */ -void usart_smartcard_mode_disable(uint32_t usart_periph); -/* enable NACK in smartcard mode */ -void usart_smartcard_mode_nack_enable(uint32_t usart_periph); -/* disable NACK in smartcard mode */ -void usart_smartcard_mode_nack_disable(uint32_t usart_periph); - -/* IrDA communication */ -/* enable IrDA mode */ -void usart_irda_mode_enable(uint32_t usart_periph); -/* disable IrDA mode */ -void usart_irda_mode_disable(uint32_t usart_periph); -/* configure the peripheral clock prescaler */ -void usart_prescaler_config(uint32_t usart_periph, uint8_t psc); -/* configure IrDA low-power */ -void usart_irda_lowpower_config(uint32_t usart_periph, uint32_t irlp); - -/* hardware flow communication */ -/* configure hardware flow control RTS */ -void usart_hardware_flow_rts_config(uint32_t usart_periph, uint32_t rtsconfig); -/* configure hardware flow control CTS */ -void usart_hardware_flow_cts_config(uint32_t usart_periph, uint32_t ctsconfig); - -/* configure USART DMA for reception */ -void usart_dma_receive_config(uint32_t usart_periph, uint32_t dmacmd); -/* configure USART DMA for transmission */ -void usart_dma_transmit_config(uint32_t usart_periph, uint32_t dmacmd); - -/* flag functions */ -/* get flag in STAT register */ -FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag); -/* clear flag in STAT register */ -void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag); - -/* interrupt functions */ -/* enable USART interrupt */ -void usart_interrupt_enable(uint32_t usart_periph, uint32_t interrupt); -/* disable USART interrupt */ -void usart_interrupt_disable(uint32_t usart_periph, uint32_t interrupt); -/* get USART interrupt and flag status */ -FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, uint32_t int_flag); -/* clear interrupt flag in STAT register */ -void usart_interrupt_flag_clear(uint32_t usart_periph, uint32_t int_flag); -#endif /* GD32F10X_USART_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_wwdgt.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_wwdgt.h deleted file mode 100644 index 16c8849..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Include/gd32f10x_wwdgt.h +++ /dev/null @@ -1,89 +0,0 @@ -/*! - \file gd32f10x_wwdgt.h - \brief definitions for the WWDGT - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_WWDGT_H -#define GD32F10X_WWDGT_H - -#include "gd32f10x.h" - -/* WWDGT definitions */ -#define WWDGT WWDGT_BASE /*!< WWDGT base address */ - -/* registers definitions */ -#define WWDGT_CTL REG32((WWDGT) + 0x00U) /*!< WWDGT control register */ -#define WWDGT_CFG REG32((WWDGT) + 0x04U) /*!< WWDGT configuration register */ -#define WWDGT_STAT REG32((WWDGT) + 0x08U) /*!< WWDGT status register */ - -/* bits definitions */ -/* WWDGT_CTL */ -#define WWDGT_CTL_CNT BITS(0,6) /*!< WWDGT counter value */ -#define WWDGT_CTL_WDGTEN BIT(7) /*!< WWDGT counter enable */ - -/* WWDGT_CFG */ -#define WWDGT_CFG_WIN BITS(0,6) /*!< WWDGT counter window value */ -#define WWDGT_CFG_PSC BITS(7,8) /*!< WWDGT prescaler divider value */ -#define WWDGT_CFG_EWIE BIT(9) /*!< early wakeup interrupt enable */ - -/* WWDGT_STAT */ -#define WWDGT_STAT_EWIF BIT(0) /*!< early wakeup interrupt flag */ - -/* constants definitions */ -#define CFG_PSC(regval) (BITS(7,8) & ((uint32_t)(regval) << 7)) /*!< write value to WWDGT_CFG_PSC bit field */ -#define WWDGT_CFG_PSC_DIV1 CFG_PSC(0) /*!< the time base of WWDGT = (PCLK1/4096)/1 */ -#define WWDGT_CFG_PSC_DIV2 CFG_PSC(1) /*!< the time base of WWDGT = (PCLK1/4096)/2 */ -#define WWDGT_CFG_PSC_DIV4 CFG_PSC(2) /*!< the time base of WWDGT = (PCLK1/4096)/4 */ -#define WWDGT_CFG_PSC_DIV8 CFG_PSC(3) /*!< the time base of WWDGT = (PCLK1/4096)/8 */ - -/* function declarations */ -/* reset the window watchdog timer configuration */ -void wwdgt_deinit(void); -/* start the window watchdog timer counter */ -void wwdgt_enable(void); - -/* configure the window watchdog timer counter value */ -void wwdgt_counter_update(uint16_t counter_value); -/* configure counter value, window value, and prescaler divider value */ -void wwdgt_config(uint16_t counter, uint16_t window, uint32_t prescaler); - -/* enable early wakeup interrupt of WWDGT */ -void wwdgt_interrupt_enable(void); -/* check early wakeup interrupt state of WWDGT */ -FlagStatus wwdgt_flag_get(void); -/* clear early wakeup interrupt state of WWDGT */ -void wwdgt_flag_clear(void); - -#endif /* GD32F10X_WWDGT_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_adc.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_adc.c deleted file mode 100644 index b2e2b74..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_adc.c +++ /dev/null @@ -1,932 +0,0 @@ -/*! - \file gd32f10x_adc.c - \brief ADC driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_adc.h" - -/* discontinuous mode macro*/ -#define ADC_CHANNEL_LENGTH_SUBTRACT_ONE ((uint8_t)1U) - -/* ADC regular channel macro */ -#define ADC_REGULAR_CHANNEL_RANK_SIX ((uint8_t)6U) -#define ADC_REGULAR_CHANNEL_RANK_TWELVE ((uint8_t)12U) -#define ADC_REGULAR_CHANNEL_RANK_SIXTEEN ((uint8_t)16U) -#define ADC_REGULAR_CHANNEL_RANK_LENGTH ((uint8_t)5U) - -/* ADC sampling time macro */ -#define ADC_CHANNEL_SAMPLE_TEN ((uint8_t)10U) -#define ADC_CHANNEL_SAMPLE_EIGHTEEN ((uint8_t)18U) -#define ADC_CHANNEL_SAMPLE_LENGTH ((uint8_t)3U) - -/* ADC inserted channel macro */ -#define ADC_INSERTED_CHANNEL_RANK_LENGTH ((uint8_t)5U) -#define ADC_INSERTED_CHANNEL_SHIFT_LENGTH ((uint8_t)15U) - -/* ADC inserted channel offset macro */ -#define ADC_OFFSET_LENGTH ((uint8_t)3U) -#define ADC_OFFSET_SHIFT_LENGTH ((uint8_t)4U) - -/*! - \brief reset ADC - \param[in] adc_periph: ADCx, x=0,1,2 - \param[out] none - \retval none -*/ -void adc_deinit(uint32_t adc_periph) -{ - switch(adc_periph){ - case ADC0: - /* reset ADC0 */ - rcu_periph_reset_enable(RCU_ADC0RST); - rcu_periph_reset_disable(RCU_ADC0RST); - break; - case ADC1: - /* reset ADC1 */ - rcu_periph_reset_enable(RCU_ADC1RST); - rcu_periph_reset_disable(RCU_ADC1RST); - break; -#ifndef GD32F10X_CL - case ADC2: - rcu_periph_reset_enable(RCU_ADC2RST); - rcu_periph_reset_disable(RCU_ADC2RST); - break; -#endif /* GD32F10X_CL */ - default: - break; - } -} - -/*! - \brief configure the ADC sync mode - \param[in] mode: ADC mode - only one parameter can be selected which is shown as below: - \arg ADC_MODE_FREE: all the ADCs work independently - \arg ADC_DAUL_REGULAL_PARALLEL_INSERTED_PARALLEL: ADC0 and ADC1 work in combined regular parallel + inserted parallel mode - \arg ADC_DAUL_REGULAL_PARALLEL_INSERTED_ROTATION: ADC0 and ADC1 work in combined regular parallel + trigger rotation mode - \arg ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in combined inserted parallel + follow-up fast mode - \arg ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in combined inserted parallel + follow-up slow mode - \arg ADC_DAUL_INSERTED_PARALLEL: ADC0 and ADC1 work in inserted parallel mode only - \arg ADC_DAUL_REGULAL_PARALLEL: ADC0 and ADC1 work in regular parallel mode only - \arg ADC_DAUL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in follow-up fast mode only - \arg ADC_DAUL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in follow-up slow mode only - \arg ADC_DAUL_INSERTED_TRIGGER_ROTATION: ADC0 and ADC1 work in trigger rotation mode only - \param[out] none - \retval none -*/ -void adc_mode_config(uint32_t mode) -{ - ADC_CTL0(ADC0) &= ~(ADC_CTL0_SYNCM); - ADC_CTL0(ADC0) |= mode; -} - -/*! - \brief enable or disable ADC special function - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] function: the function to config - only one parameter can be selected which is shown as below: - \arg ADC_SCAN_MODE: scan mode select - \arg ADC_INSERTED_CHANNEL_AUTO: inserted channel group convert automatically - \arg ADC_CONTINUOUS_MODE: continuous mode select - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void adc_special_function_config(uint32_t adc_periph, uint32_t function, ControlStatus newvalue) -{ - if(newvalue){ - if(0U != (function & ADC_SCAN_MODE)){ - /* enable scan mode */ - ADC_CTL0(adc_periph) |= ADC_SCAN_MODE; - } - if(0U != (function & ADC_INSERTED_CHANNEL_AUTO)){ - /* enable inserted channel group convert automatically */ - ADC_CTL0(adc_periph) |= ADC_INSERTED_CHANNEL_AUTO; - } - if(0U != (function & ADC_CONTINUOUS_MODE)){ - /* enable continuous mode */ - ADC_CTL1(adc_periph) |= ADC_CONTINUOUS_MODE; - } - }else{ - if(0U != (function & ADC_SCAN_MODE)){ - /* disable scan mode */ - ADC_CTL0(adc_periph) &= ~ADC_SCAN_MODE; - } - if(0U != (function & ADC_INSERTED_CHANNEL_AUTO)){ - /* disable inserted channel group convert automatically */ - ADC_CTL0(adc_periph) &= ~ADC_INSERTED_CHANNEL_AUTO; - } - if(0U != (function & ADC_CONTINUOUS_MODE)){ - /* disable continuous mode */ - ADC_CTL1(adc_periph) &= ~ADC_CONTINUOUS_MODE; - } - } -} - -/*! - \brief configure ADC data alignment - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] data_alignment: data alignment select - only one parameter can be selected which is shown as below: - \arg ADC_DATAALIGN_RIGHT: LSB alignment - \arg ADC_DATAALIGN_LEFT: MSB alignment - \param[out] none - \retval none -*/ -void adc_data_alignment_config(uint32_t adc_periph, uint32_t data_alignment) -{ - if(ADC_DATAALIGN_RIGHT != data_alignment){ - /* MSB alignment */ - ADC_CTL1(adc_periph) |= ADC_CTL1_DAL; - }else{ - /* LSB alignment */ - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DAL); - } -} - -/*! - \brief enable ADC interface - \param[in] adc_periph: ADCx, x=0,1,2 - \param[out] none - \retval none -*/ -void adc_enable(uint32_t adc_periph) -{ - if(RESET == (ADC_CTL1(adc_periph) & ADC_CTL1_ADCON)){ - /* enable ADC */ - ADC_CTL1(adc_periph) |= (uint32_t)ADC_CTL1_ADCON; - } -} - -/*! - \brief disable ADC interface - \param[in] adc_periph: ADCx, x=0,1,2 - \param[out] none - \retval none -*/ -void adc_disable(uint32_t adc_periph) -{ - /* disable ADC */ - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ADCON); -} - -/*! - \brief ADC calibration and reset calibration - \param[in] adc_periph: ADCx, x=0,1,2 - \param[out] none - \retval none -*/ -void adc_calibration_enable(uint32_t adc_periph) -{ - /* reset the selected ADC1 calibration registers */ - ADC_CTL1(adc_periph) |= (uint32_t) ADC_CTL1_RSTCLB; - /* check the RSTCLB bit state */ - while(RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_RSTCLB)){ - } - /* enable ADC calibration process */ - ADC_CTL1(adc_periph) |= ADC_CTL1_CLB; - /* check the CLB bit state */ - while(RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_CLB)){ - } -} - -/*! - \brief enable the temperature sensor and Vrefint channel - \param[in] none - \param[out] none - \retval none -*/ -void adc_tempsensor_vrefint_enable(void) -{ - /* enable the temperature sensor and Vrefint channel */ - ADC_CTL1(ADC0) |= ADC_CTL1_TSVREN; -} - -/*! - \brief disable the temperature sensor and Vrefint channel - \param[in] none - \param[out] none - \retval none -*/ -void adc_tempsensor_vrefint_disable(void) -{ - /* disable the temperature sensor and Vrefint channel */ - ADC_CTL1(ADC0) &= ~ADC_CTL1_TSVREN; -} - -/*! - \brief enable DMA request - \param[in] adc_periph: ADCx, x=0,1,2 - \param[out] none - \retval none -*/ -void adc_dma_mode_enable(uint32_t adc_periph) -{ - /* enable DMA request */ - ADC_CTL1(adc_periph) |= (uint32_t)(ADC_CTL1_DMA); -} - -/*! - \brief disable DMA request - \param[in] adc_periph: ADCx, x=0,1,2 - \param[out] none - \retval none -*/ -void adc_dma_mode_disable(uint32_t adc_periph) -{ - /* disable DMA request */ - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DMA); -} - -/*! - \brief configure ADC discontinuous mode - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_channel_group: select the channel group - only one parameter can be selected which is shown as below: - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \arg ADC_CHANNEL_DISCON_DISABLE: disable discontinuous mode of regular & inserted channel - \param[in] length: number of conversions in discontinuous mode,the number can be 1..8 - for regular channel, the number has no effect for inserted channel - \param[out] none - \retval none -*/ -void adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length) -{ - /* disable discontinuous mode of regular & inserted channel */ - ADC_CTL0(adc_periph) &= ~((uint32_t)(ADC_CTL0_DISRC | ADC_CTL0_DISIC)); - switch(adc_channel_group){ - case ADC_REGULAR_CHANNEL: - /* config the number of conversions in discontinuous mode */ - ADC_CTL0(adc_periph) &= ~((uint32_t)ADC_CTL0_DISNUM); - ADC_CTL0(adc_periph) |= CTL0_DISNUM(((uint32_t)length - ADC_CHANNEL_LENGTH_SUBTRACT_ONE)); - /* enable regular channel group discontinuous mode */ - ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISRC; - break; - case ADC_INSERTED_CHANNEL: - /* enable inserted channel group discontinuous mode */ - ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISIC; - break; - case ADC_CHANNEL_DISCON_DISABLE: - /* disable discontinuous mode of regular & inserted channel */ - default: - break; - } -} - -/*! - \brief configure the length of regular channel group or inserted channel group - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_channel_group: select the channel group - only one parameter can be selected which is shown as below: - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \param[in] length: the length of the channel - regular channel 1-16 - inserted channel 1-4 - \param[out] none - \retval none -*/ -void adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t length) -{ - switch(adc_channel_group){ - case ADC_REGULAR_CHANNEL: - /* configure the length of regular channel group */ - ADC_RSQ0(adc_periph) &= ~((uint32_t)ADC_RSQ0_RL); - ADC_RSQ0(adc_periph) |= RSQ0_RL((uint32_t)(length-ADC_CHANNEL_LENGTH_SUBTRACT_ONE)); - break; - case ADC_INSERTED_CHANNEL: - /* configure the length of inserted channel group */ - ADC_ISQ(adc_periph) &= ~((uint32_t)ADC_ISQ_IL); - ADC_ISQ(adc_periph) |= ISQ_IL((uint32_t)(length-ADC_CHANNEL_LENGTH_SUBTRACT_ONE)); - break; - default: - break; - } -} - -/*! - \brief configure ADC regular channel - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] rank: the regular group sequence rank,this parameter must be between 0 to 15 - \param[in] adc_channel: the selected ADC channel - only one parameter can be selected which is shown as below: - \arg ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx - \param[in] sample_time: the sample time value - only one parameter can be selected which is shown as below: - \arg ADC_SAMPLETIME_1POINT5: 1.5 cycles - \arg ADC_SAMPLETIME_7POINT5: 7.5 cycles - \arg ADC_SAMPLETIME_13POINT5: 13.5 cycles - \arg ADC_SAMPLETIME_28POINT5: 28.5 cycles - \arg ADC_SAMPLETIME_41POINT5: 41.5 cycles - \arg ADC_SAMPLETIME_55POINT5: 55.5 cycles - \arg ADC_SAMPLETIME_71POINT5: 71.5 cycles - \arg ADC_SAMPLETIME_239POINT5: 239.5 cycles - \param[out] none - \retval none -*/ -void adc_regular_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time) -{ - uint32_t rsq,sampt; - - /* ADC regular sequence config */ - if(rank < ADC_REGULAR_CHANNEL_RANK_SIX){ - /* the regular group sequence rank is smaller than six */ - rsq = ADC_RSQ2(adc_periph); - rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH*rank))); - /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */ - rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH*rank)); - ADC_RSQ2(adc_periph) = rsq; - }else if(rank < ADC_REGULAR_CHANNEL_RANK_TWELVE){ - /* the regular group sequence rank is smaller than twelve */ - rsq = ADC_RSQ1(adc_periph); - rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_SIX)))); - /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */ - rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_SIX))); - ADC_RSQ1(adc_periph) = rsq; - }else if(rank < ADC_REGULAR_CHANNEL_RANK_SIXTEEN){ - /* the regular group sequence rank is smaller than sixteen */ - rsq = ADC_RSQ0(adc_periph); - rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_TWELVE)))); - /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */ - rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_TWELVE))); - ADC_RSQ0(adc_periph) = rsq; - }else{ - } - - /* ADC sampling time config */ - if(adc_channel < ADC_CHANNEL_SAMPLE_TEN){ - /* the regular group sequence rank is smaller than ten */ - sampt = ADC_SAMPT1(adc_periph); - sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel))); - /* channel sample time set*/ - sampt |= (uint32_t)(sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel)); - ADC_SAMPT1(adc_periph) = sampt; - }else if(adc_channel < ADC_CHANNEL_SAMPLE_EIGHTEEN){ - /* the regular group sequence rank is smaller than eighteen */ - sampt = ADC_SAMPT0(adc_periph); - sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN)))); - /* channel sample time set*/ - sampt |= (uint32_t)(sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN))); - ADC_SAMPT0(adc_periph) = sampt; - }else{ - } -} - -/*! - \brief configure ADC inserted channel - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] rank: the inserted group sequencer rank,this parameter must be between 0 to 3 - \param[in] adc_channel: the selected ADC channel - only one parameter can be selected which is shown as below: - \arg ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx - \param[in] sample_time: The sample time value - only one parameter can be selected which is shown as below: - \arg ADC_SAMPLETIME_1POINT5: 1.5 cycles - \arg ADC_SAMPLETIME_7POINT5: 7.5 cycles - \arg ADC_SAMPLETIME_13POINT5: 13.5 cycles - \arg ADC_SAMPLETIME_28POINT5: 28.5 cycles - \arg ADC_SAMPLETIME_41POINT5: 41.5 cycles - \arg ADC_SAMPLETIME_55POINT5: 55.5 cycles - \arg ADC_SAMPLETIME_71POINT5: 71.5 cycles - \arg ADC_SAMPLETIME_239POINT5: 239.5 cycles - \param[out] none - \retval none -*/ -void adc_inserted_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time) -{ - uint8_t inserted_length; - uint32_t isq,sampt; - /* get inserted channel group length */ - inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph) , 20U , 21U); - /* the channel number is written to these bits to select a channel as the nth conversion in the inserted channel group */ - isq = ADC_ISQ(adc_periph); - isq &= ~((uint32_t)(ADC_ISQ_ISQN << (ADC_INSERTED_CHANNEL_SHIFT_LENGTH-(inserted_length-rank)*ADC_INSERTED_CHANNEL_RANK_LENGTH))); - isq |= ((uint32_t)adc_channel << (ADC_INSERTED_CHANNEL_SHIFT_LENGTH-(inserted_length-rank)*ADC_INSERTED_CHANNEL_RANK_LENGTH)); - ADC_ISQ(adc_periph) = isq; - - /* ADC sampling time config */ - if(adc_channel < ADC_CHANNEL_SAMPLE_TEN){ - /* the inserted group sequence rank is smaller than ten */ - sampt = ADC_SAMPT1(adc_periph); - sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel))); - /* channel sample time set*/ - sampt |= (uint32_t) sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel); - ADC_SAMPT1(adc_periph) = sampt; - }else if(adc_channel < ADC_CHANNEL_SAMPLE_EIGHTEEN){ - /* the inserted group sequence rank is smaller than eighteen */ - sampt = ADC_SAMPT0(adc_periph); - sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN)))); - /* channel sample time set*/ - sampt |= ((uint32_t)sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN))); - ADC_SAMPT0(adc_periph) = sampt; - }else{ - } -} - -/*! - \brief configure ADC inserted channel offset - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] inserted_channel: insert channel select - only one parameter can be selected - \arg ADC_INSERTED_CHANNEL_0: inserted channel0 - \arg ADC_INSERTED_CHANNEL_1: inserted channel1 - \arg ADC_INSERTED_CHANNEL_2: inserted channel2 - \arg ADC_INSERTED_CHANNEL_3: inserted channel3 - \param[in] offset: the offset data - \param[out] none - \retval none -*/ -void adc_inserted_channel_offset_config(uint32_t adc_periph, uint8_t inserted_channel, uint16_t offset) -{ - uint8_t inserted_length; - uint32_t num = 0U; - - inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph) , 20U , 21U); - num = ((uint32_t)ADC_OFFSET_LENGTH - ((uint32_t)inserted_length - (uint32_t)inserted_channel)); - - if(num <= ADC_OFFSET_LENGTH){ - /* calculate the offset of the register */ - num = num * ADC_OFFSET_SHIFT_LENGTH; - /* config the offset of the selected channels */ - REG32((adc_periph) + 0x14U + num) = IOFFX_IOFF((uint32_t)offset); - } -} - -/*! - \brief configure ADC external trigger source - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_channel_group: select the channel group - only one parameter can be selected which is shown as below: - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \param[in] external_trigger_source: regular or inserted group trigger source - only one parameter can be selected - for regular channel: - \arg ADC0_1_EXTTRIG_REGULAR_T0_CH0: TIMER0 CH0 event select - \arg ADC0_1_EXTTRIG_REGULAR_T0_CH1: TIMER0 CH1 event select - \arg ADC0_1_EXTTRIG_REGULAR_T0_CH2: TIMER0 CH2 event select - \arg ADC0_1_EXTTRIG_REGULAR_T1_CH1: TIMER1 CH1 event select - \arg ADC0_1_EXTTRIG_REGULAR_T2_TRGO: TIMER2 TRGO event select - \arg ADC0_1_EXTTRIG_REGULAR_T3_CH3: TIMER3 CH3 event select - \arg ADC0_1_EXTTRIG_REGULAR_T7_TRGO: TIMER7 TRGO event select - \arg ADC0_1_EXTTRIG_REGULAR_EXTI_11: external interrupt line 11 - \arg ADC2_EXTTRIG_REGULAR_T2_CH0: TIMER2 CH0 event select - \arg ADC2_EXTTRIG_REGULAR_T1_CH2: TIMER1 CH2 event select - \arg ADC2_EXTTRIG_REGULAR_T0_CH2: TIMER0 CH2 event select - \arg ADC2_EXTTRIG_REGULAR_T7_CH0: TIMER7 CH0 event select - \arg ADC2_EXTTRIG_REGULAR_T7_TRGO: TIMER7 TRGO event select - \arg ADC2_EXTTRIG_REGULAR_T4_CH0: TIMER4 CH0 event select - \arg ADC2_EXTTRIG_REGULAR_T4_CH2: TIMER4 CH2 event select - \arg ADC0_1_2_EXTTRIG_REGULAR_NONE: software trigger - for inserted channel: - \arg ADC0_1_EXTTRIG_INSERTED_T0_TRGO: TIMER0 TRGO event select - \arg ADC0_1_EXTTRIG_INSERTED_T0_CH3: TIMER0 CH3 event select - \arg ADC0_1_EXTTRIG_INSERTED_T1_TRGO: TIMER1 TRGO event select - \arg ADC0_1_EXTTRIG_INSERTED_T1_CH0: TIMER1 CH0 event select - \arg ADC0_1_EXTTRIG_INSERTED_T2_CH3: TIMER2 CH3 event select - \arg ADC0_1_EXTTRIG_INSERTED_T3_TRGO: TIMER3 TRGO event select - \arg ADC0_1_EXTTRIG_INSERTED_EXTI_15: external interrupt line 15 - \arg ADC0_1_EXTTRIG_INSERTED_T7_CH3: TIMER7 CH3 event select - \arg ADC2_EXTTRIG_INSERTED_T0_TRGO: TIMER0 TRGO event select - \arg ADC2_EXTTRIG_INSERTED_T0_CH3: TIMER0 CH3 event select - \arg ADC2_EXTTRIG_INSERTED_T3_CH2: TIMER3 CH2 event select - \arg ADC2_EXTTRIG_INSERTED_T7_CH1: TIMER7 CH1 event select - \arg ADC2_EXTTRIG_INSERTED_T7_CH3: TIMER7 CH3 event select - \arg ADC2_EXTTRIG_INSERTED_T4_TRGO: TIMER4 TRGO event select - \arg ADC2_EXTTRIG_INSERTED_T4_CH3: TIMER4 CH3 event select - \arg ADC0_1_2_EXTTRIG_INSERTED_NONE: software trigger - \param[out] none - \retval none -*/ -void adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t external_trigger_source) -{ - switch(adc_channel_group){ - case ADC_REGULAR_CHANNEL: - /* configure ADC regular group external trigger source */ - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSRC); - ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source; - break; - case ADC_INSERTED_CHANNEL: - /* configure ADC inserted group external trigger source */ - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSIC); - ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source; - break; - default: - break; - } -} - -/*! - \brief configure ADC external trigger - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_channel_group: select the channel group - one or more parameters can be selected which are shown as below: - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void adc_external_trigger_config(uint32_t adc_periph, uint8_t adc_channel_group, ControlStatus newvalue) -{ - if(newvalue){ - if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ - /* enable ADC regular channel group external trigger */ - ADC_CTL1(adc_periph) |= ADC_CTL1_ETERC; - } - if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ - /* enable ADC inserted channel group external trigger */ - ADC_CTL1(adc_periph) |= ADC_CTL1_ETEIC; - } - }else{ - if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ - /* disable ADC regular channel group external trigger */ - ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETERC; - } - if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ - /* disable ADC regular channel group external trigger */ - ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETEIC; - } - } -} - -/*! - \brief enable ADC software trigger - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_channel_group: select the channel group - one or more parameters can be selected which are shown as below: - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \param[out] none - \retval none -*/ -void adc_software_trigger_enable(uint32_t adc_periph, uint8_t adc_channel_group) -{ - if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ - /* enable ADC regular channel group software trigger */ - ADC_CTL1(adc_periph) |= ADC_CTL1_SWRCST; - } - if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ - /* enable ADC inserted channel group software trigger */ - ADC_CTL1(adc_periph) |= ADC_CTL1_SWICST; - } -} - -/*! - \brief read ADC regular group data register - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] none - \param[out] none - \retval the conversion value -*/ -uint16_t adc_regular_data_read(uint32_t adc_periph) -{ - return (uint16_t)(ADC_RDATA(adc_periph)); -} - -/*! - \brief read ADC inserted group data register - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] inserted_channel: insert channel select - only one parameter can be selected - \arg ADC_INSERTED_CHANNEL_0: inserted Channel0 - \arg ADC_INSERTED_CHANNEL_1: inserted channel1 - \arg ADC_INSERTED_CHANNEL_2: inserted Channel2 - \arg ADC_INSERTED_CHANNEL_3: inserted Channel3 - \param[out] none - \retval the conversion value -*/ -uint16_t adc_inserted_data_read(uint32_t adc_periph, uint8_t inserted_channel) -{ - uint32_t idata; - /* read the data of the selected channel */ - switch(inserted_channel){ - case ADC_INSERTED_CHANNEL_0: - /* read the data of channel 0 */ - idata = ADC_IDATA0(adc_periph); - break; - case ADC_INSERTED_CHANNEL_1: - /* read the data of channel 1 */ - idata = ADC_IDATA1(adc_periph); - break; - case ADC_INSERTED_CHANNEL_2: - /* read the data of channel 2 */ - idata = ADC_IDATA2(adc_periph); - break; - case ADC_INSERTED_CHANNEL_3: - /* read the data of channel 3 */ - idata = ADC_IDATA3(adc_periph); - break; - default: - idata = 0U; - break; - } - return (uint16_t)idata; -} - -/*! - \brief read the last ADC0 and ADC1 conversion result data in sync mode - \param[in] none - \param[out] none - \retval the conversion value -*/ -uint32_t adc_sync_mode_convert_value_read(void) -{ - /* return conversion value */ - return ADC_RDATA(ADC0); -} - - -/*! - \brief configure ADC analog watchdog single channel - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_channel: the selected ADC channel - only one parameter can be selected which is shown as below: - \arg ADC_CHANNEL_x: ADC Channelx(x=0..17)(x=16 and x=17 are only for ADC0) - \param[out] none - \retval none -*/ -void adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel) -{ - ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); - /* analog watchdog channel select */ - ADC_CTL0(adc_periph) |= (uint32_t)adc_channel; - ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC); -} - -/*! - \brief configure ADC analog watchdog group channel - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_channel_group: the channel group use analog watchdog - only one parameter can be selected which is shown as below: - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \arg ADC_REGULAR_INSERTED_CHANNEL: both regular and inserted group - \param[out] none - \retval none -*/ -void adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group) -{ - ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC); - /* select the group */ - switch(adc_channel_group){ - case ADC_REGULAR_CHANNEL: - /* regular channel analog watchdog enable */ - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_RWDEN; - break; - case ADC_INSERTED_CHANNEL: - /* inserted channel analog watchdog enable */ - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_IWDEN; - break; - case ADC_REGULAR_INSERTED_CHANNEL: - /* regular and inserted channel analog watchdog enable */ - ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN); - break; - default: - break; - } -} - -/*! - \brief disable ADC analog watchdog - \param[in] adc_periph: ADCx, x=0,1,2 - \param[out] none - \retval none -*/ -void adc_watchdog_disable(uint32_t adc_periph) -{ - ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); -} - -/*! - \brief configure ADC analog watchdog threshold - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] low_threshold: analog watchdog low threshold, 0..4095 - \param[in] high_threshold: analog watchdog high threshold, 0..4095 - \param[out] none - \retval none -*/ -void adc_watchdog_threshold_config(uint32_t adc_periph, uint16_t low_threshold, uint16_t high_threshold) -{ - ADC_WDLT(adc_periph) = (uint32_t)WDLT_WDLT(low_threshold); - ADC_WDHT(adc_periph) = (uint32_t)WDHT_WDHT(high_threshold); -} - -/*! - \brief get the ADC flag bits - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_flag: the adc flag bits - only one parameter can be selected which is shown as below: - \arg ADC_FLAG_WDE: analog watchdog event flag - \arg ADC_FLAG_EOC: end of group conversion flag - \arg ADC_FLAG_EOIC: end of inserted group conversion flag - \arg ADC_FLAG_STIC: start flag of inserted channel group - \arg ADC_FLAG_STRC: start flag of regular channel group - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus adc_flag_get(uint32_t adc_periph, uint32_t adc_flag) -{ - FlagStatus reval = RESET; - if(ADC_STAT(adc_periph) & adc_flag){ - reval = SET; - } - return reval; -} - -/*! - \brief clear the ADC flag bits - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_flag: the adc flag bits - one or more parameters can be selected which are shown as below: - \arg ADC_FLAG_WDE: analog watchdog event flag - \arg ADC_FLAG_EOC: end of group conversion flag - \arg ADC_FLAG_EOIC: end of inserted group conversion flag - \arg ADC_FLAG_STIC: start flag of inserted channel group - \arg ADC_FLAG_STRC: start flag of regular channel group - \param[out] none - \retval none -*/ -void adc_flag_clear(uint32_t adc_periph, uint32_t adc_flag) -{ - ADC_STAT(adc_periph) &= ~((uint32_t)adc_flag); -} - -/*! - \brief get the bit state of ADCx software start conversion - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] none - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus adc_regular_software_startconv_flag_get(uint32_t adc_periph) -{ - FlagStatus reval = RESET; - if((uint32_t)RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_SWRCST)){ - reval = SET; - } - return reval; -} - -/*! - \brief get the bit state of ADCx software inserted channel start conversion - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] none - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus adc_inserted_software_startconv_flag_get(uint32_t adc_periph) -{ - FlagStatus reval = RESET; - if((uint32_t)RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_SWICST)){ - reval = SET; - } - return reval; -} - -/*! - \brief get the ADC interrupt bits - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_interrupt: the adc interrupt bits - only one parameter can be selected which is shown as below: - \arg ADC_INT_FLAG_WDE: analog watchdog interrupt - \arg ADC_INT_FLAG_EOC: end of group conversion interrupt - \arg ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus adc_interrupt_flag_get(uint32_t adc_periph, uint32_t adc_interrupt) -{ - FlagStatus interrupt_flag = RESET; - uint32_t state; - /* check the interrupt bits */ - switch(adc_interrupt){ - case ADC_INT_FLAG_WDE: - /* get the ADC analog watchdog interrupt bits */ - state = ADC_STAT(adc_periph) & ADC_STAT_WDE; - if((ADC_CTL0(adc_periph) & ADC_CTL0_WDEIE) && state){ - interrupt_flag = SET; - } - break; - case ADC_INT_FLAG_EOC: - /* get the ADC end of group conversion interrupt bits */ - state = ADC_STAT(adc_periph) & ADC_STAT_EOC; - if((ADC_CTL0(adc_periph) & ADC_CTL0_EOCIE) && state){ - interrupt_flag = SET; - } - break; - case ADC_INT_FLAG_EOIC: - /* get the ADC end of inserted group conversion interrupt bits */ - state = ADC_STAT(adc_periph) & ADC_STAT_EOIC; - if((ADC_CTL0(adc_periph) & ADC_CTL0_EOICIE) && state){ - interrupt_flag = SET; - } - break; - default: - break; - } - return interrupt_flag; -} - -/*! - \brief clear the ADC flag - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_interrupt: the adc status flag - one or more parameters can be selected which are shown as below: - \arg ADC_INT_FLAG_WDE: analog watchdog interrupt - \arg ADC_INT_FLAG_EOC: end of group conversion interrupt - \arg ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt - \param[out] none - \retval none -*/ -void adc_interrupt_flag_clear(uint32_t adc_periph, uint32_t adc_interrupt) -{ - ADC_STAT(adc_periph) &= ~((uint32_t)adc_interrupt); -} - -/*! - \brief enable ADC interrupt - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_interrupt: the adc interrupt - one or more parameters can be selected which are shown as below: - \arg ADC_INT_WDE: analog watchdog interrupt flag - \arg ADC_INT_EOC: end of group conversion interrupt flag - \arg ADC_INT_EOIC: end of inserted group conversion interrupt flag - \param[out] none - \retval none -*/ -void adc_interrupt_enable(uint32_t adc_periph, uint32_t adc_interrupt) -{ - /* enable ADC analog watchdog interrupt */ - if(0U != (adc_interrupt & ADC_INT_WDE)){ - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_WDEIE; - } - /* enable ADC end of group conversion interrupt */ - if(0U != (adc_interrupt & ADC_INT_EOC)){ - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_EOCIE; - } - /* enable ADC end of inserted group conversion interrupt */ - if(0U != (adc_interrupt & ADC_INT_EOIC)){ - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_EOICIE; - } -} - -/*! - \brief disable ADC interrupt - \param[in] adc_periph: ADCx, x=0,1,2 - \param[in] adc_interrupt: the adc interrupt flag - one or more parameters can be selected which are shown as below: - \arg ADC_INT_WDE: analog watchdog interrupt flag - \arg ADC_INT_EOC: end of group conversion interrupt flag - \arg ADC_INT_EOIC: end of inserted group conversion interrupt flag - \param[out] none - \retval none -*/ -void adc_interrupt_disable(uint32_t adc_periph, uint32_t adc_interrupt) -{ - /* disable ADC analog watchdog interrupt */ - if(0U != (adc_interrupt & ADC_INT_WDE)){ - ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_WDEIE; - } - /* disable ADC end of group conversion interrupt */ - if(0U != (adc_interrupt & ADC_INT_EOC)){ - ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_EOCIE; - } - /* disable ADC end of inserted group conversion interrupt */ - if(0U != (adc_interrupt & ADC_INT_EOIC)){ - ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_EOICIE; - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_bkp.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_bkp.c deleted file mode 100644 index b6538cc..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_bkp.c +++ /dev/null @@ -1,295 +0,0 @@ -/*! - \file gd32f10x_bkp.c - \brief BKP driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_bkp.h" - -/* BKP register bits offset */ -#define BKP_TAMPER_BITS_OFFSET ((uint32_t)8U) - -/*! - \brief reset BKP registers - \param[in] none - \param[out] none - \retval none -*/ -void bkp_deinit(void) -{ - /* reset BKP domain register*/ - rcu_bkp_reset_enable(); - rcu_bkp_reset_disable(); -} - -/*! - \brief write BKP data register - \param[in] register_number: refer to bkp_data_register_enum - only one parameter can be selected which is shown as below: - \arg BKP_DATA_x(x = 0..41): bkp data register number x - \param[in] data: the data to be write in BKP data register - \param[out] none - \retval none -*/ -void bkp_data_write(bkp_data_register_enum register_number, uint16_t data) -{ - if((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)){ - BKP_DATA10_41(register_number - 1U) = data; - }else if((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)){ - BKP_DATA0_9(register_number - 1U) = data; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief read BKP data register - \param[in] register_number: refer to bkp_data_register_enum - only one parameter can be selected which is shown as below: - \arg BKP_DATA_x(x = 0..41): bkp data register number x - \param[out] none - \retval data of BKP data register -*/ -uint16_t bkp_data_read(bkp_data_register_enum register_number) -{ - uint16_t data = 0U; - - /* get the data from the BKP data register */ - if((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)){ - data = BKP_DATA10_41(register_number - 1U); - }else if((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)){ - data = BKP_DATA0_9(register_number - 1U); - }else{ - /* illegal parameters */ - } - return data; -} - -/*! - \brief enable RTC clock calibration output - \param[in] none - \param[out] none - \retval none -*/ -void bkp_rtc_calibration_output_enable(void) -{ - BKP_OCTL |= (uint16_t)BKP_OCTL_COEN; -} - -/*! - \brief disable RTC clock calibration output - \param[in] none - \param[out] none - \retval none -*/ -void bkp_rtc_calibration_output_disable(void) -{ - BKP_OCTL &= (uint16_t)~BKP_OCTL_COEN; -} - -/*! - \brief enable RTC alarm or second signal output - \param[in] none - \param[out] none - \retval none -*/ -void bkp_rtc_signal_output_enable(void) -{ - BKP_OCTL |= (uint16_t)BKP_OCTL_ASOEN; -} - -/*! - \brief disable RTC alarm or second signal output - \param[in] none - \param[out] none - \retval none -*/ -void bkp_rtc_signal_output_disable(void) -{ - BKP_OCTL &= (uint16_t)~BKP_OCTL_ASOEN; -} - -/*! - \brief select RTC output - \param[in] outputsel: RTC output selection - only one parameter can be selected which is shown as below: - \arg RTC_OUTPUT_ALARM_PULSE: RTC alarm pulse is selected as the RTC output - \arg RTC_OUTPUT_SECOND_PULSE: RTC second pulse is selected as the RTC output - \param[out] none - \retval none -*/ -void bkp_rtc_output_select(uint16_t outputsel) -{ - uint16_t ctl = 0U; - - /* configure BKP_OCTL_ROSEL with outputsel */ - ctl = BKP_OCTL; - ctl &= (uint16_t)~BKP_OCTL_ROSEL; - ctl |= outputsel; - BKP_OCTL = ctl; -} - -/*! - \brief set RTC clock calibration value - \param[in] value: RTC clock calibration value - \arg 0x00 - 0x7F - \param[out] none - \retval none -*/ -void bkp_rtc_calibration_value_set(uint8_t value) -{ - uint16_t ctl; - - /* configure BKP_OCTL_RCCV with value */ - ctl = BKP_OCTL; - ctl &= (uint16_t)~BKP_OCTL_RCCV; - ctl |= (uint16_t)OCTL_RCCV(value); - BKP_OCTL = ctl; -} - -/*! - \brief enable tamper detection - \param[in] none - \param[out] none - \retval none -*/ -void bkp_tamper_detection_enable(void) -{ - BKP_TPCTL |= (uint16_t)BKP_TPCTL_TPEN; -} - -/*! - \brief disable tamper detection - \param[in] none - \param[out] none - \retval none -*/ -void bkp_tamper_detection_disable(void) -{ - BKP_TPCTL &= (uint16_t)~BKP_TPCTL_TPEN; -} - -/*! - \brief set tamper pin active level - \param[in] level: tamper active level - only one parameter can be selected which is shown as below: - \arg TAMPER_PIN_ACTIVE_HIGH: the tamper pin is active high - \arg TAMPER_PIN_ACTIVE_LOW: the tamper pin is active low - \param[out] none - \retval none -*/ -void bkp_tamper_active_level_set(uint16_t level) -{ - uint16_t ctl = 0U; - - /* configure BKP_TPCTL_TPAL with level */ - ctl = BKP_TPCTL; - ctl &= (uint16_t)~BKP_TPCTL_TPAL; - ctl |= level; - BKP_TPCTL = ctl; -} - -/*! - \brief enable tamper interrupt - \param[in] none - \param[out] none - \retval none -*/ -void bkp_interrupt_enable(void) -{ - BKP_TPCS |= (uint16_t)BKP_TPCS_TPIE; -} - -/*! - \brief disable tamper interrupt - \param[in] none - \param[out] none - \retval none -*/ -void bkp_interrupt_disable(void) -{ - BKP_TPCS &= (uint16_t)~BKP_TPCS_TPIE; -} - -/*! - \brief get tamper flag state - \param[in] none - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus bkp_flag_get(void) -{ - if(RESET != (BKP_TPCS & BKP_FLAG_TAMPER)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear tamper flag state - \param[in] none - \param[out] none - \retval none -*/ -void bkp_flag_clear(void) -{ - BKP_TPCS |= (uint16_t)(BKP_FLAG_TAMPER >> BKP_TAMPER_BITS_OFFSET); -} - -/*! - \brief get tamper interrupt flag state - \param[in] none - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus bkp_interrupt_flag_get(void) -{ - if(RESET != (BKP_TPCS & BKP_INT_FLAG_TAMPER)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear tamper interrupt flag state - \param[in] none - \param[out] none - \retval none -*/ -void bkp_interrupt_flag_clear(void) -{ - BKP_TPCS |= (uint16_t)(BKP_INT_FLAG_TAMPER >> BKP_TAMPER_BITS_OFFSET); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_can.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_can.c deleted file mode 100644 index 0b0a89b..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_can.c +++ /dev/null @@ -1,1054 +0,0 @@ -/*! - \file gd32f10x_can.c - \brief CAN driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2019-11-27, V2.1.1, firmware for GD32F10x - \version 2020-07-14, V2.1.2, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x - \version 2021-07-21, V2.2.1, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_can.h" - -#define CAN_ERROR_HANDLE(s) do{}while(1) - -#define RFO1_CLEAR_VAL ((uint32_t)0x00000000U) /*!< RFO1 clear value */ -#define RFF1_CLEAR_VAL ((uint32_t)0x00000018U) /*!< RFF1 clear value */ - -/*! - \brief deinitialize CAN - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[out] none - \retval none -*/ -void can_deinit(uint32_t can_periph) -{ -#ifdef GD32F10x_CL - if(CAN0 == can_periph){ - rcu_periph_reset_enable(RCU_CAN0RST); - rcu_periph_reset_disable(RCU_CAN0RST); - }else{ - rcu_periph_reset_enable(RCU_CAN1RST); - rcu_periph_reset_disable(RCU_CAN1RST); - } -#else - if(CAN0 == can_periph){ - rcu_periph_reset_enable(RCU_CAN0RST); - rcu_periph_reset_disable(RCU_CAN0RST); - } -#endif -} - -/*! - \brief initialize CAN parameter struct with a default value - \param[in] type: the type of CAN parameter struct - only one parameter can be selected which is shown as below: - \arg CAN_INIT_STRUCT: the CAN initial struct - \arg CAN_FILTER_STRUCT: the CAN filter struct - \arg CAN_TX_MESSAGE_STRUCT: the CAN TX message struct - \arg CAN_RX_MESSAGE_STRUCT: the CAN RX message struct - \param[in] p_struct: the pointer of the specific struct - \param[out] none - \retval none -*/ -void can_struct_para_init(can_struct_type_enum type, void* p_struct) -{ - uint8_t i; - - /* get type of the struct */ - switch(type){ - /* used for can_init() */ - case CAN_INIT_STRUCT: - ((can_parameter_struct*)p_struct)->auto_bus_off_recovery = DISABLE; - ((can_parameter_struct*)p_struct)->no_auto_retrans = DISABLE; - ((can_parameter_struct*)p_struct)->auto_wake_up = DISABLE; - ((can_parameter_struct*)p_struct)->prescaler = 0x03FFU; - ((can_parameter_struct*)p_struct)->rec_fifo_overwrite = DISABLE; - ((can_parameter_struct*)p_struct)->resync_jump_width = CAN_BT_SJW_1TQ; - ((can_parameter_struct*)p_struct)->time_segment_1 = CAN_BT_BS1_3TQ; - ((can_parameter_struct*)p_struct)->time_segment_2 = CAN_BT_BS2_1TQ; - ((can_parameter_struct*)p_struct)->time_triggered = DISABLE; - ((can_parameter_struct*)p_struct)->trans_fifo_order = DISABLE; - ((can_parameter_struct*)p_struct)->working_mode = CAN_NORMAL_MODE; - - break; - /* used for can_filter_init() */ - case CAN_FILTER_STRUCT: - ((can_filter_parameter_struct*)p_struct)->filter_bits = CAN_FILTERBITS_32BIT; - ((can_filter_parameter_struct*)p_struct)->filter_enable = DISABLE; - ((can_filter_parameter_struct*)p_struct)->filter_fifo_number = CAN_FIFO0; - ((can_filter_parameter_struct*)p_struct)->filter_list_high = 0x0000U; - ((can_filter_parameter_struct*)p_struct)->filter_list_low = 0x0000U; - ((can_filter_parameter_struct*)p_struct)->filter_mask_high = 0x0000U; - ((can_filter_parameter_struct*)p_struct)->filter_mask_low = 0x0000U; - ((can_filter_parameter_struct*)p_struct)->filter_mode = CAN_FILTERMODE_MASK; - ((can_filter_parameter_struct*)p_struct)->filter_number = 0U; - - break; - /* used for can_message_transmit() */ - case CAN_TX_MESSAGE_STRUCT: - for(i = 0U; i < 8U; i++){ - ((can_trasnmit_message_struct*)p_struct)->tx_data[i] = 0U; - } - - ((can_trasnmit_message_struct*)p_struct)->tx_dlen = 0u; - ((can_trasnmit_message_struct*)p_struct)->tx_efid = 0U; - ((can_trasnmit_message_struct*)p_struct)->tx_ff = (uint8_t)CAN_FF_STANDARD; - ((can_trasnmit_message_struct*)p_struct)->tx_ft = (uint8_t)CAN_FT_DATA; - ((can_trasnmit_message_struct*)p_struct)->tx_sfid = 0U; - - break; - /* used for can_message_receive() */ - case CAN_RX_MESSAGE_STRUCT: - for(i = 0U; i < 8U; i++){ - ((can_receive_message_struct*)p_struct)->rx_data[i] = 0U; - } - - ((can_receive_message_struct*)p_struct)->rx_dlen = 0U; - ((can_receive_message_struct*)p_struct)->rx_efid = 0U; - ((can_receive_message_struct*)p_struct)->rx_ff = (uint8_t)CAN_FF_STANDARD; - ((can_receive_message_struct*)p_struct)->rx_fi = 0U; - ((can_receive_message_struct*)p_struct)->rx_ft = (uint8_t)CAN_FT_DATA; - ((can_receive_message_struct*)p_struct)->rx_sfid = 0U; - - break; - - default: - CAN_ERROR_HANDLE("parameter is invalid \r\n"); - } -} - -/*! - \brief initialize CAN - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] can_parameter_init: parameters for CAN initializtion - \arg working_mode: CAN_NORMAL_MODE, CAN_LOOPBACK_MODE, CAN_SILENT_MODE, CAN_SILENT_LOOPBACK_MODE - \arg resync_jump_width: CAN_BT_SJW_xTQ(x=1, 2, 3, 4) - \arg time_segment_1: CAN_BT_BS1_xTQ(1..16) - \arg time_segment_2: CAN_BT_BS2_xTQ(1..8) - \arg time_triggered: ENABLE or DISABLE - \arg auto_bus_off_recovery: ENABLE or DISABLE - \arg auto_wake_up: ENABLE or DISABLE - \arg no_auto_retrans: ENABLE or DISABLE - \arg rec_fifo_overwrite: ENABLE or DISABLE - \arg trans_fifo_order: ENABLE or DISABLE - \arg prescaler: 0x0001 - 0x0400 - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus can_init(uint32_t can_periph, can_parameter_struct* can_parameter_init) -{ - uint32_t timeout = CAN_TIMEOUT; - ErrStatus flag = ERROR; - - /* disable sleep mode */ - CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; - /* enable initialize mode */ - CAN_CTL(can_periph) |= CAN_CTL_IWMOD; - /* wait ACK */ - while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)){ - timeout--; - } - /* check initialize working success */ - if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)){ - flag = ERROR; - }else{ - /* set the bit timing register */ - CAN_BT(can_periph) = (BT_MODE((uint32_t)can_parameter_init->working_mode) | \ - BT_SJW((uint32_t)can_parameter_init->resync_jump_width) | \ - BT_BS1((uint32_t)can_parameter_init->time_segment_1) | \ - BT_BS2((uint32_t)can_parameter_init->time_segment_2) | \ - BT_BAUDPSC(((uint32_t)(can_parameter_init->prescaler) - 1U))); - - /* time trigger communication mode */ - if(ENABLE == can_parameter_init->time_triggered){ - CAN_CTL(can_periph) |= CAN_CTL_TTC; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_TTC; - } - /* automatic bus-off managment */ - if(ENABLE == can_parameter_init->auto_bus_off_recovery){ - CAN_CTL(can_periph) |= CAN_CTL_ABOR; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_ABOR; - } - /* automatic wakeup mode */ - if(ENABLE == can_parameter_init->auto_wake_up){ - CAN_CTL(can_periph) |= CAN_CTL_AWU; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_AWU; - } - /* automatic retransmission mode disable */ - if(ENABLE == can_parameter_init->no_auto_retrans){ - CAN_CTL(can_periph) |= CAN_CTL_ARD; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_ARD; - } - /* receive fifo overwrite mode */ - if(ENABLE == can_parameter_init->rec_fifo_overwrite){ - CAN_CTL(can_periph) |= CAN_CTL_RFOD; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_RFOD; - } - /* transmit fifo order */ - if(ENABLE == can_parameter_init->trans_fifo_order){ - CAN_CTL(can_periph) |= CAN_CTL_TFO; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_TFO; - } - /* disable initialize mode */ - CAN_CTL(can_periph) &= ~CAN_CTL_IWMOD; - timeout = CAN_TIMEOUT; - /* wait the ACK */ - while((CAN_STAT_IWS == (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)){ - timeout--; - } - /* check exit initialize mode */ - if(0U != timeout){ - flag = SUCCESS; - } - } - return flag; -} - -/*! - \brief initialize CAN filter - \param[in] can_filter_parameter_init: struct for CAN filter initialization - \arg filter_list_high: 0x0000 - 0xFFFF - \arg filter_list_low: 0x0000 - 0xFFFF - \arg filter_mask_high: 0x0000 - 0xFFFF - \arg filter_mask_low: 0x0000 - 0xFFFF - \arg filter_fifo_number: CAN_FIFO0, CAN_FIFO1 - \arg filter_number: 0 - 27 - \arg filter_mode: CAN_FILTERMODE_MASK, CAN_FILTERMODE_LIST - \arg filter_bits: CAN_FILTERBITS_32BIT, CAN_FILTERBITS_16BIT - \arg filter_enable: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void can_filter_init(can_filter_parameter_struct* can_filter_parameter_init) -{ - uint32_t val = 0U; - - val = ((uint32_t)1) << (can_filter_parameter_init->filter_number); - /* filter lock disable */ - CAN_FCTL(CAN0) |= CAN_FCTL_FLD; - /* disable filter */ - CAN_FW(CAN0) &= ~(uint32_t)val; - - /* filter 16 bits */ - if(CAN_FILTERBITS_16BIT == can_filter_parameter_init->filter_bits){ - /* set filter 16 bits */ - CAN_FSCFG(CAN0) &= ~(uint32_t)val; - /* first 16 bits list and first 16 bits mask or first 16 bits list and second 16 bits list */ - CAN_FDATA0(CAN0, can_filter_parameter_init->filter_number) = \ - FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_low) & CAN_FILTER_MASK_16BITS) | \ - FDATA_MASK_LOW((can_filter_parameter_init->filter_list_low) & CAN_FILTER_MASK_16BITS); - /* second 16 bits list and second 16 bits mask or third 16 bits list and fourth 16 bits list */ - CAN_FDATA1(CAN0, can_filter_parameter_init->filter_number) = \ - FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_high) & CAN_FILTER_MASK_16BITS) | \ - FDATA_MASK_LOW((can_filter_parameter_init->filter_list_high) & CAN_FILTER_MASK_16BITS); - } - /* filter 32 bits */ - if(CAN_FILTERBITS_32BIT == can_filter_parameter_init->filter_bits){ - /* set filter 32 bits */ - CAN_FSCFG(CAN0) |= (uint32_t)val; - /* 32 bits list or first 32 bits list */ - CAN_FDATA0(CAN0, can_filter_parameter_init->filter_number) = \ - FDATA_MASK_HIGH((can_filter_parameter_init->filter_list_high) & CAN_FILTER_MASK_16BITS) | - FDATA_MASK_LOW((can_filter_parameter_init->filter_list_low) & CAN_FILTER_MASK_16BITS); - /* 32 bits mask or second 32 bits list */ - CAN_FDATA1(CAN0, can_filter_parameter_init->filter_number) = \ - FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_high) & CAN_FILTER_MASK_16BITS) | - FDATA_MASK_LOW((can_filter_parameter_init->filter_mask_low) & CAN_FILTER_MASK_16BITS); - } - - /* filter mode */ - if(CAN_FILTERMODE_MASK == can_filter_parameter_init->filter_mode){ - /* mask mode */ - CAN_FMCFG(CAN0) &= ~(uint32_t)val; - }else{ - /* list mode */ - CAN_FMCFG(CAN0) |= (uint32_t)val; - } - - /* filter FIFO */ - if(CAN_FIFO0 == (can_filter_parameter_init->filter_fifo_number)){ - /* FIFO0 */ - CAN_FAFIFO(CAN0) &= ~(uint32_t)val; - }else{ - /* FIFO1 */ - CAN_FAFIFO(CAN0) |= (uint32_t)val; - } - - /* filter working */ - if(ENABLE == can_filter_parameter_init->filter_enable){ - - CAN_FW(CAN0) |= (uint32_t)val; - } - - /* filter lock enable */ - CAN_FCTL(CAN0) &= ~CAN_FCTL_FLD; -} - -/*! - \brief set CAN1 fliter start bank number - \param[in] start_bank: CAN1 start bank number - only one parameter can be selected which is shown as below: - \arg (1..27) - \param[out] none - \retval none -*/ -void can1_filter_start_bank(uint8_t start_bank) -{ - /* filter lock disable */ - CAN_FCTL(CAN0) |= CAN_FCTL_FLD; - /* set CAN1 filter start number */ - CAN_FCTL(CAN0) &= ~(uint32_t)CAN_FCTL_HBC1F; - CAN_FCTL(CAN0) |= FCTL_HBC1F(start_bank); - /* filter lock enaable */ - CAN_FCTL(CAN0) &= ~CAN_FCTL_FLD; -} - -/*! - \brief enable CAN debug freeze - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[out] none - \retval none -*/ -void can_debug_freeze_enable(uint32_t can_periph) -{ - /* set DFZ bit */ - CAN_CTL(can_periph) |= CAN_CTL_DFZ; -#ifdef GD32F10x_CL - if(CAN0 == can_periph){ - dbg_periph_enable(DBG_CAN0_HOLD); - }else{ - dbg_periph_enable(DBG_CAN1_HOLD); - } -#else - if(CAN0 == can_periph){ - dbg_periph_enable(DBG_CAN0_HOLD); - } -#endif -} - -/*! - \brief disable CAN debug freeze - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[out] none - \retval none -*/ -void can_debug_freeze_disable(uint32_t can_periph) -{ - /* set DFZ bit */ - CAN_CTL(can_periph) &= ~CAN_CTL_DFZ; -#ifdef GD32F10x_CL - if(CAN0 == can_periph){ - dbg_periph_disable(DBG_CAN0_HOLD); - }else{ - dbg_periph_disable(DBG_CAN1_HOLD); - } -#else - if(CAN0 == can_periph){ - dbg_periph_enable(DBG_CAN0_HOLD); - } -#endif -} - -/*! - \brief enable CAN time trigger mode - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[out] none - \retval none -*/ -void can_time_trigger_mode_enable(uint32_t can_periph) -{ - uint8_t mailbox_number; - - /* enable the tcc mode */ - CAN_CTL(can_periph) |= CAN_CTL_TTC; - /* enable time stamp */ - for(mailbox_number = 0U; mailbox_number < 3U; mailbox_number++){ - CAN_TMP(can_periph, mailbox_number) |= CAN_TMP_TSEN; - } -} - -/*! - \brief disable CAN time trigger mode - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[out] none - \retval none -*/ -void can_time_trigger_mode_disable(uint32_t can_periph) -{ - uint8_t mailbox_number; - - /* disable the TCC mode */ - CAN_CTL(can_periph) &= ~CAN_CTL_TTC; - /* reset TSEN bits */ - for(mailbox_number = 0U; mailbox_number < 3U; mailbox_number++){ - CAN_TMP(can_periph, mailbox_number) &= ~CAN_TMP_TSEN; - } -} - -/*! - \brief transmit CAN message - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] transmit_message: struct for CAN transmit message - \arg tx_sfid: 0x00000000 - 0x000007FF - \arg tx_efid: 0x00000000 - 0x1FFFFFFF - \arg tx_ff: CAN_FF_STANDARD, CAN_FF_EXTENDED - \arg tx_ft: CAN_FT_DATA, CAN_FT_REMOTE - \arg tx_dlen: 0 - 8 - \arg tx_data[]: 0x00 - 0xFF - \param[out] none - \retval mailbox_number -*/ -uint8_t can_message_transmit(uint32_t can_periph, can_trasnmit_message_struct* transmit_message) -{ - uint8_t mailbox_number = CAN_MAILBOX0; - - /* select one empty mailbox */ - if(CAN_TSTAT_TME0 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME0)){ - mailbox_number = CAN_MAILBOX0; - }else if(CAN_TSTAT_TME1 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME1)){ - mailbox_number = CAN_MAILBOX1; - }else if(CAN_TSTAT_TME2 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME2)){ - mailbox_number = CAN_MAILBOX2; - }else{ - mailbox_number = CAN_NOMAILBOX; - } - /* return no mailbox empty */ - if(CAN_NOMAILBOX == mailbox_number){ - return CAN_NOMAILBOX; - } - - CAN_TMI(can_periph, mailbox_number) &= CAN_TMI_TEN; - if(CAN_FF_STANDARD == transmit_message->tx_ff){ - /* set transmit mailbox standard identifier */ - CAN_TMI(can_periph, mailbox_number) |= (uint32_t)(TMI_SFID(transmit_message->tx_sfid) | \ - transmit_message->tx_ft); - }else{ - /* set transmit mailbox extended identifier */ - CAN_TMI(can_periph, mailbox_number) |= (uint32_t)(TMI_EFID(transmit_message->tx_efid) | \ - transmit_message->tx_ff | \ - transmit_message->tx_ft); - } - /* set the data length */ - CAN_TMP(can_periph, mailbox_number) &= ~CAN_TMP_DLENC; - CAN_TMP(can_periph, mailbox_number) |= transmit_message->tx_dlen; - /* set the data */ - CAN_TMDATA0(can_periph, mailbox_number) = TMDATA0_DB3(transmit_message->tx_data[3]) | \ - TMDATA0_DB2(transmit_message->tx_data[2]) | \ - TMDATA0_DB1(transmit_message->tx_data[1]) | \ - TMDATA0_DB0(transmit_message->tx_data[0]); - CAN_TMDATA1(can_periph, mailbox_number) = TMDATA1_DB7(transmit_message->tx_data[7]) | \ - TMDATA1_DB6(transmit_message->tx_data[6]) | \ - TMDATA1_DB5(transmit_message->tx_data[5]) | \ - TMDATA1_DB4(transmit_message->tx_data[4]); - /* enable transmission */ - CAN_TMI(can_periph, mailbox_number) |= CAN_TMI_TEN; - - return mailbox_number; -} - -/*! - \brief get CAN transmit state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] mailbox_number - only one parameter can be selected which is shown as below: - \arg CAN_MAILBOX(x=0,1,2) - \param[out] none - \retval can_transmit_state_enum -*/ -can_transmit_state_enum can_transmit_states(uint32_t can_periph, uint8_t mailbox_number) -{ - can_transmit_state_enum state = CAN_TRANSMIT_FAILED; - uint32_t val = 0U; - - /* check selected mailbox state */ - switch(mailbox_number){ - /* mailbox0 */ - case CAN_MAILBOX0: - val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF0 | CAN_TSTAT_MTFNERR0 | CAN_TSTAT_TME0); - break; - /* mailbox1 */ - case CAN_MAILBOX1: - val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF1 | CAN_TSTAT_MTFNERR1 | CAN_TSTAT_TME1); - break; - /* mailbox2 */ - case CAN_MAILBOX2: - val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF2 | CAN_TSTAT_MTFNERR2 | CAN_TSTAT_TME2); - break; - default: - val = CAN_TRANSMIT_FAILED; - break; - } - - switch(val){ - /* transmit pending */ - case (CAN_STATE_PENDING): - state = CAN_TRANSMIT_PENDING; - break; - /* mailbox0 transmit succeeded */ - case (CAN_TSTAT_MTF0 | CAN_TSTAT_MTFNERR0 | CAN_TSTAT_TME0): - state = CAN_TRANSMIT_OK; - break; - /* mailbox1 transmit succeeded */ - case (CAN_TSTAT_MTF1 | CAN_TSTAT_MTFNERR1 | CAN_TSTAT_TME1): - state = CAN_TRANSMIT_OK; - break; - /* mailbox2 transmit succeeded */ - case (CAN_TSTAT_MTF2 | CAN_TSTAT_MTFNERR2 | CAN_TSTAT_TME2): - state = CAN_TRANSMIT_OK; - break; - /* transmit failed */ - default: - state = CAN_TRANSMIT_FAILED; - break; - } - return state; -} - -/*! - \brief stop CAN transmission - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] mailbox_number - only one parameter can be selected which is shown as below: - \arg CAN_MAILBOXx(x=0,1,2) - \param[out] none - \retval none -*/ -void can_transmission_stop(uint32_t can_periph, uint8_t mailbox_number) -{ - if(CAN_MAILBOX0 == mailbox_number){ - CAN_TSTAT(can_periph) |= CAN_TSTAT_MST0; - while(CAN_TSTAT_MST0 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST0)){ - } - }else if(CAN_MAILBOX1 == mailbox_number){ - CAN_TSTAT(can_periph) |= CAN_TSTAT_MST1; - while(CAN_TSTAT_MST1 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST1)){ - } - }else if(CAN_MAILBOX2 == mailbox_number){ - CAN_TSTAT(can_periph) |= CAN_TSTAT_MST2; - while(CAN_TSTAT_MST2 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST2)){ - } - }else{ - /* illegal parameters */ - } -} - -/*! - \brief CAN receive message - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] fifo_number - \arg CAN_FIFOx(x=0,1) - \param[out] receive_message: struct for CAN receive message - \arg rx_sfid: 0x00000000 - 0x000007FF - \arg rx_efid: 0x00000000 - 0x1FFFFFFF - \arg rx_ff: CAN_FF_STANDARD, CAN_FF_EXTENDED - \arg rx_ft: CAN_FT_DATA, CAN_FT_REMOTE - \arg rx_dlen: 0 - 8 - \arg rx_data[]: 0x00 - 0xFF - \arg rx_fi: 0 - 27 - \retval none -*/ -void can_message_receive(uint32_t can_periph, uint8_t fifo_number, can_receive_message_struct* receive_message) -{ - /* get the frame format */ - receive_message->rx_ff = (uint8_t)(CAN_RFIFOMI_FF & CAN_RFIFOMI(can_periph, fifo_number)); - if(CAN_FF_STANDARD == receive_message->rx_ff){ - /* get standard identifier */ - receive_message->rx_sfid = (uint32_t)(GET_RFIFOMI_SFID(CAN_RFIFOMI(can_periph, fifo_number))); - }else{ - /* get extended identifier */ - receive_message->rx_efid = (uint32_t)(GET_RFIFOMI_EFID(CAN_RFIFOMI(can_periph, fifo_number))); - } - - /* get frame type */ - receive_message->rx_ft = (uint8_t)(CAN_RFIFOMI_FT & CAN_RFIFOMI(can_periph, fifo_number)); - /* filtering index */ - receive_message->rx_fi = (uint8_t)(GET_RFIFOMP_FI(CAN_RFIFOMP(can_periph, fifo_number))); - /* get recevie data length */ - receive_message->rx_dlen = (uint8_t)(GET_RFIFOMP_DLENC(CAN_RFIFOMP(can_periph, fifo_number))); - - /* receive data */ - receive_message -> rx_data[0] = (uint8_t)(GET_RFIFOMDATA0_DB0(CAN_RFIFOMDATA0(can_periph, fifo_number))); - receive_message -> rx_data[1] = (uint8_t)(GET_RFIFOMDATA0_DB1(CAN_RFIFOMDATA0(can_periph, fifo_number))); - receive_message -> rx_data[2] = (uint8_t)(GET_RFIFOMDATA0_DB2(CAN_RFIFOMDATA0(can_periph, fifo_number))); - receive_message -> rx_data[3] = (uint8_t)(GET_RFIFOMDATA0_DB3(CAN_RFIFOMDATA0(can_periph, fifo_number))); - receive_message -> rx_data[4] = (uint8_t)(GET_RFIFOMDATA1_DB4(CAN_RFIFOMDATA1(can_periph, fifo_number))); - receive_message -> rx_data[5] = (uint8_t)(GET_RFIFOMDATA1_DB5(CAN_RFIFOMDATA1(can_periph, fifo_number))); - receive_message -> rx_data[6] = (uint8_t)(GET_RFIFOMDATA1_DB6(CAN_RFIFOMDATA1(can_periph, fifo_number))); - receive_message -> rx_data[7] = (uint8_t)(GET_RFIFOMDATA1_DB7(CAN_RFIFOMDATA1(can_periph, fifo_number))); - - /* release FIFO */ - if(CAN_FIFO0 == fifo_number){ - CAN_RFIFO0(can_periph) |= CAN_RFIFO0_RFD0; - }else{ - CAN_RFIFO1(can_periph) |= CAN_RFIFO1_RFD1; - } -} - -/*! - \brief release FIFO0 - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] fifo_number - only one parameter can be selected which is shown as below: - \arg CAN_FIFOx(x=0,1) - \param[out] none - \retval none -*/ -void can_fifo_release(uint32_t can_periph, uint8_t fifo_number) -{ - if(CAN_FIFO0 == fifo_number){ - CAN_RFIFO0(can_periph) |= CAN_RFIFO0_RFD0; - }else if(CAN_FIFO1 == fifo_number){ - CAN_RFIFO1(can_periph) |= CAN_RFIFO1_RFD1; - }else{ - /* illegal parameters */ - CAN_ERROR_HANDLE("CAN FIFO NUM is invalid \r\n"); - } -} - -/*! - \brief CAN receive message length - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] fifo_number - only one parameter can be selected which is shown as below: - \arg CAN_FIFOx(x=0,1) - \param[out] none - \retval message length -*/ -uint8_t can_receive_message_length_get(uint32_t can_periph, uint8_t fifo_number) -{ - uint8_t val = 0U; - - if(CAN_FIFO0 == fifo_number){ - /* FIFO0 */ - val = (uint8_t)(CAN_RFIFO0(can_periph) & CAN_RFIF_RFL_MASK); - }else if(CAN_FIFO1 == fifo_number){ - /* FIFO1 */ - val = (uint8_t)(CAN_RFIFO1(can_periph) & CAN_RFIF_RFL_MASK); - }else{ - /* illegal parameters */ - } - return val; -} - -/*! - \brief set CAN working mode - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] can_working_mode - only one parameter can be selected which is shown as below: - \arg CAN_MODE_INITIALIZE - \arg CAN_MODE_NORMAL - \arg CAN_MODE_SLEEP - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus can_working_mode_set(uint32_t can_periph, uint8_t working_mode) -{ - ErrStatus flag = ERROR; - /* timeout for IWS or also for SLPWS bits */ - uint32_t timeout = CAN_TIMEOUT; - - if(CAN_MODE_INITIALIZE == working_mode){ - /* disable sleep mode */ - CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_SLPWMOD); - /* set initialize mode */ - CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_IWMOD; - /* wait the acknowledge */ - while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)){ - timeout--; - } - if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)){ - flag = ERROR; - }else{ - flag = SUCCESS; - } - }else if(CAN_MODE_NORMAL == working_mode){ - /* enter normal mode */ - CAN_CTL(can_periph) &= ~(uint32_t)(CAN_CTL_SLPWMOD | CAN_CTL_IWMOD); - /* wait the acknowledge */ - while((0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) && (0U != timeout)){ - timeout--; - } - if(0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))){ - flag = ERROR; - }else{ - flag = SUCCESS; - } - }else if(CAN_MODE_SLEEP == working_mode){ - /* disable initialize mode */ - CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_IWMOD); - /* set sleep mode */ - CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_SLPWMOD; - /* wait the acknowledge */ - while((CAN_STAT_SLPWS != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) && (0U != timeout)){ - timeout--; - } - if(CAN_STAT_SLPWS != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)){ - flag = ERROR; - }else{ - flag = SUCCESS; - } - }else{ - flag = ERROR; - } - return flag; -} - -/*! - \brief wake up CAN - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus can_wakeup(uint32_t can_periph) -{ - ErrStatus flag = ERROR; - uint32_t timeout = CAN_TIMEOUT; - - /* wakeup */ - CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; - - while((0U != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) && (0x00U != timeout)){ - timeout--; - } - /* check state */ - if(0U != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)){ - flag = ERROR; - }else{ - flag = SUCCESS; - } - return flag; -} - -/*! - \brief get CAN error type - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[out] none - \retval can_error_enum - \arg CAN_ERROR_NONE: no error - \arg CAN_ERROR_FILL: fill error - \arg CAN_ERROR_FORMATE: format error - \arg CAN_ERROR_ACK: ACK error - \arg CAN_ERROR_BITRECESSIVE: bit recessive - \arg CAN_ERROR_BITDOMINANTER: bit dominant error - \arg CAN_ERROR_CRC: CRC error - \arg CAN_ERROR_SOFTWARECFG: software configure -*/ -can_error_enum can_error_get(uint32_t can_periph) -{ - can_error_enum error; - error = CAN_ERROR_NONE; - - /* get error type */ - error = (can_error_enum)(GET_ERR_ERRN(CAN_ERR(can_periph))); - return error; -} - -/*! - \brief get CAN receive error number - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[out] none - \retval error number -*/ -uint8_t can_receive_error_number_get(uint32_t can_periph) -{ - uint8_t val; - - /* get error count */ - val = (uint8_t)(GET_ERR_RECNT(CAN_ERR(can_periph))); - return val; -} - -/*! - \brief get CAN transmit error number - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[out] none - \retval error number -*/ -uint8_t can_transmit_error_number_get(uint32_t can_periph) -{ - uint8_t val; - - val = (uint8_t)(GET_ERR_TECNT(CAN_ERR(can_periph))); - return val; -} - -/*! - \brief enable CAN interrupt - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] interrupt - one or more parameters can be selected which are shown as below: - \arg CAN_INT_TME: transmit mailbox empty interrupt enable - \arg CAN_INT_RFNE0: receive FIFO0 not empty interrupt enable - \arg CAN_INT_RFF0: receive FIFO0 full interrupt enable - \arg CAN_INT_RFO0: receive FIFO0 overfull interrupt enable - \arg CAN_INT_RFNE1: receive FIFO1 not empty interrupt enable - \arg CAN_INT_RFF1: receive FIFO1 full interrupt enable - \arg CAN_INT_RFO1: receive FIFO1 overfull interrupt enable - \arg CAN_INT_WERR: warning error interrupt enable - \arg CAN_INT_PERR: passive error interrupt enable - \arg CAN_INT_BO: bus-off interrupt enable - \arg CAN_INT_ERRN: error number interrupt enable - \arg CAN_INT_ERR: error interrupt enable - \arg CAN_INT_WAKEUP: wakeup interrupt enable - \arg CAN_INT_SLPW: sleep working interrupt enable - \param[out] none - \retval none -*/ -void can_interrupt_enable(uint32_t can_periph, uint32_t interrupt) -{ - CAN_INTEN(can_periph) |= interrupt; -} - -/*! - \brief disable CAN interrupt - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] interrupt - one or more parameters can be selected which are shown as below: - \arg CAN_INT_TME: transmit mailbox empty interrupt enable - \arg CAN_INT_RFNE0: receive FIFO0 not empty interrupt enable - \arg CAN_INT_RFF0: receive FIFO0 full interrupt enable - \arg CAN_INT_RFO0: receive FIFO0 overfull interrupt enable - \arg CAN_INT_RFNE1: receive FIFO1 not empty interrupt enable - \arg CAN_INT_RFF1: receive FIFO1 full interrupt enable - \arg CAN_INT_RFO1: receive FIFO1 overfull interrupt enable - \arg CAN_INT_WERR: warning error interrupt enable - \arg CAN_INT_PERR: passive error interrupt enable - \arg CAN_INT_BO: bus-off interrupt enable - \arg CAN_INT_ERRN: error number interrupt enable - \arg CAN_INT_ERR: error interrupt enable - \arg CAN_INT_WAKEUP: wakeup interrupt enable - \arg CAN_INT_SLPW: sleep working interrupt enable - \param[out] none - \retval none -*/ -void can_interrupt_disable(uint32_t can_periph, uint32_t interrupt) -{ - CAN_INTEN(can_periph) &= ~interrupt; -} - -/*! - \brief get CAN flag state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] flag: CAN flags, refer to can_flag_enum - only one parameter can be selected which is shown as below: - \arg CAN_FLAG_RXL: RX level - \arg CAN_FLAG_LASTRX: last sample value of RX pin - \arg CAN_FLAG_RS: receiving state - \arg CAN_FLAG_TS: transmitting state - \arg CAN_FLAG_SLPIF: status change flag of entering sleep working mode - \arg CAN_FLAG_WUIF: status change flag of wakeup from sleep working mode - \arg CAN_FLAG_ERRIF: error flag - \arg CAN_FLAG_SLPWS: sleep working state - \arg CAN_FLAG_IWS: initial working state - \arg CAN_FLAG_TMLS2: transmit mailbox 2 last sending in Tx FIFO - \arg CAN_FLAG_TMLS1: transmit mailbox 1 last sending in Tx FIFO - \arg CAN_FLAG_TMLS0: transmit mailbox 0 last sending in Tx FIFO - \arg CAN_FLAG_TME2: transmit mailbox 2 empty - \arg CAN_FLAG_TME1: transmit mailbox 1 empty - \arg CAN_FLAG_TME0: transmit mailbox 0 empty - \arg CAN_FLAG_MTE2: mailbox 2 transmit error - \arg CAN_FLAG_MTE1: mailbox 1 transmit error - \arg CAN_FLAG_MTE0: mailbox 0 transmit error - \arg CAN_FLAG_MAL2: mailbox 2 arbitration lost - \arg CAN_FLAG_MAL1: mailbox 1 arbitration lost - \arg CAN_FLAG_MAL0: mailbox 0 arbitration lost - \arg CAN_FLAG_MTFNERR2: mailbox 2 transmit finished with no error - \arg CAN_FLAG_MTFNERR1: mailbox 1 transmit finished with no error - \arg CAN_FLAG_MTFNERR0: mailbox 0 transmit finished with no error - \arg CAN_FLAG_MTF2: mailbox 2 transmit finished - \arg CAN_FLAG_MTF1: mailbox 1 transmit finished - \arg CAN_FLAG_MTF0: mailbox 0 transmit finished - \arg CAN_FLAG_RFO0: receive FIFO0 overfull - \arg CAN_FLAG_RFF0: receive FIFO0 full - \arg CAN_FLAG_RFO1: receive FIFO1 overfull - \arg CAN_FLAG_RFF1: receive FIFO1 full - \arg CAN_FLAG_BOERR: bus-off error - \arg CAN_FLAG_PERR: passive error - \arg CAN_FLAG_WERR: warning error - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus can_flag_get(uint32_t can_periph, can_flag_enum flag) -{ - /* get flag and interrupt enable state */ - if(RESET != (CAN_REG_VAL(can_periph, flag) & BIT(CAN_BIT_POS(flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear CAN flag state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] flag: CAN flags, refer to can_flag_enum - only one parameter can be selected which is shown as below: - \arg CAN_FLAG_SLPIF: status change flag of entering sleep working mode - \arg CAN_FLAG_WUIF: status change flag of wakeup from sleep working mode - \arg CAN_FLAG_ERRIF: error flag - \arg CAN_FLAG_MTE2: mailbox 2 transmit error - \arg CAN_FLAG_MTE1: mailbox 1 transmit error - \arg CAN_FLAG_MTE0: mailbox 0 transmit error - \arg CAN_FLAG_MAL2: mailbox 2 arbitration lost - \arg CAN_FLAG_MAL1: mailbox 1 arbitration lost - \arg CAN_FLAG_MAL0: mailbox 0 arbitration lost - \arg CAN_FLAG_MTFNERR2: mailbox 2 transmit finished with no error - \arg CAN_FLAG_MTFNERR1: mailbox 1 transmit finished with no error - \arg CAN_FLAG_MTFNERR0: mailbox 0 transmit finished with no error - \arg CAN_FLAG_MTF2: mailbox 2 transmit finished - \arg CAN_FLAG_MTF1: mailbox 1 transmit finished - \arg CAN_FLAG_MTF0: mailbox 0 transmit finished - \arg CAN_FLAG_RFO0: receive FIFO0 overfull - \arg CAN_FLAG_RFF0: receive FIFO0 full - \arg CAN_FLAG_RFO1: receive FIFO1 overfull - \arg CAN_FLAG_RFF1: receive FIFO1 full - \param[out] none - \retval none -*/ -void can_flag_clear(uint32_t can_periph, can_flag_enum flag) -{ - if (flag == CAN_FLAG_RFO1){ - CAN_REG_VAL(can_periph, flag) = RFO1_CLEAR_VAL; - } else if (flag == CAN_FLAG_RFF1){ - CAN_REG_VAL(can_periph, flag) = RFF1_CLEAR_VAL; - } else { - CAN_REG_VAL(can_periph, flag) = BIT(CAN_BIT_POS(flag)); - } -} - -/*! - \brief get CAN interrupt flag state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] flag: CAN interrupt flags, refer to can_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg CAN_INT_FLAG_SLPIF: status change interrupt flag of sleep working mode entering - \arg CAN_INT_FLAG_WUIF: status change interrupt flag of wakeup from sleep working mode - \arg CAN_INT_FLAG_ERRIF: error interrupt flag - \arg CAN_INT_FLAG_MTF2: mailbox 2 transmit finished interrupt flag - \arg CAN_INT_FLAG_MTF1: mailbox 1 transmit finished interrupt flag - \arg CAN_INT_FLAG_MTF0: mailbox 0 transmit finished interrupt flag - \arg CAN_INT_FLAG_RFO0: receive FIFO0 overfull interrupt flag - \arg CAN_INT_FLAG_RFF0: receive FIFO0 full interrupt flag - \arg CAN_INT_FLAG_RFL0: receive FIFO0 not empty interrupt flag - \arg CAN_INT_FLAG_RFO1: receive FIFO1 overfull interrupt flag - \arg CAN_INT_FLAG_RFF1: receive FIFO1 full interrupt flag - \arg CAN_INT_FLAG_RFL1: receive FIFO1 not empty interrupt flag - \arg CAN_INT_FLAG_ERRN: error number interrupt flag - \arg CAN_INT_FLAG_BOERR: bus-off error interrupt flag - \arg CAN_INT_FLAG_PERR: passive error interrupt flag - \arg CAN_INT_FLAG_WERR: warning error interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus can_interrupt_flag_get(uint32_t can_periph, can_interrupt_flag_enum flag) -{ - uint32_t ret1 = RESET; - uint32_t ret2 = RESET; - - /* get the staus of interrupt flag */ - if (flag == CAN_INT_FLAG_RFL0) { - ret1 = can_receive_message_length_get(can_periph, CAN_FIFO0); - } else if (flag == CAN_INT_FLAG_RFL1) { - ret1 = can_receive_message_length_get(can_periph, CAN_FIFO1); - } else if (flag == CAN_INT_FLAG_ERRN) { - ret1 = can_error_get(can_periph); - } else { - ret1 = CAN_REG_VALS(can_periph, flag) & BIT(CAN_BIT_POS0(flag)); - } - /* get the staus of interrupt enale bit */ - ret2 = CAN_INTEN(can_periph) & BIT(CAN_BIT_POS1(flag)); - if(ret1 && ret2){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear CAN interrupt flag state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F10x_CL - \param[in] flag: CAN interrupt flags, refer to can_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg CAN_INT_FLAG_SLPIF: status change interrupt flag of sleep working mode entering - \arg CAN_INT_FLAG_WUIF: status change interrupt flag of wakeup from sleep working mode - \arg CAN_INT_FLAG_ERRIF: error interrupt flag - \arg CAN_INT_FLAG_MTF2: mailbox 2 transmit finished interrupt flag - \arg CAN_INT_FLAG_MTF1: mailbox 1 transmit finished interrupt flag - \arg CAN_INT_FLAG_MTF0: mailbox 0 transmit finished interrupt flag - \arg CAN_INT_FLAG_RFO0: receive FIFO0 overfull interrupt flag - \arg CAN_INT_FLAG_RFF0: receive FIFO0 full interrupt flag - \arg CAN_INT_FLAG_RFO1: receive FIFO1 overfull interrupt flag - \arg CAN_INT_FLAG_RFF1: receive FIFO1 full interrupt flag - \param[out] none - \retval none -*/ -void can_interrupt_flag_clear(uint32_t can_periph, can_interrupt_flag_enum flag) -{ - if (flag == CAN_INT_FLAG_RFO1){ - CAN_REG_VALS(can_periph, flag) = RFO1_CLEAR_VAL; - } else if (flag == CAN_INT_FLAG_RFF1){ - CAN_REG_VALS(can_periph, flag) = RFF1_CLEAR_VAL; - } else { - CAN_REG_VALS(can_periph, flag) = BIT(CAN_BIT_POS0(flag)); - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_crc.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_crc.c deleted file mode 100644 index 0ba6e9e..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_crc.c +++ /dev/null @@ -1,130 +0,0 @@ -/*! - \file gd32f10x_crc.c - \brief CRC driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_crc.h" - -#define CRC_DATA_RESET_VALUE ((uint32_t)0xFFFFFFFFU) -#define CRC_FDATA_RESET_VALUE ((uint32_t)0x00000000U) - -/*! - \brief deinit CRC calculation unit - \param[in] none - \param[out] none - \retval none -*/ -void crc_deinit(void) -{ - CRC_DATA = CRC_DATA_RESET_VALUE; - CRC_FDATA = CRC_FDATA_RESET_VALUE; - CRC_CTL = (uint32_t)CRC_CTL_RST; -} - -/*! - \brief reset data register to the value of initializaiton data register - \param[in] none - \param[out] none - \retval none -*/ -void crc_data_register_reset(void) -{ - CRC_CTL |= (uint32_t)CRC_CTL_RST; -} - -/*! - \brief read the value of the data register - \param[in] none - \param[out] none - \retval 32-bit value of the data register -*/ -uint32_t crc_data_register_read(void) -{ - uint32_t data; - data = CRC_DATA; - return (data); -} - -/*! - \brief read the value of the free data register - \param[in] none - \param[out] none - \retval 8-bit value of the free data register -*/ -uint8_t crc_free_data_register_read(void) -{ - uint8_t fdata; - fdata = (uint8_t)CRC_FDATA; - return (fdata); -} - -/*! - \brief write data to the free data register - \param[in] free_data: specify 8-bit data - \param[out] none - \retval none -*/ -void crc_free_data_register_write(uint8_t free_data) -{ - CRC_FDATA = (uint32_t)free_data; -} - -/*! - \brief calculate the CRC value of a 32-bit data - \param[in] sdata: specified 32-bit data - \param[out] none - \retval 32-bit value calculated by CRC -*/ -uint32_t crc_single_data_calculate(uint32_t sdata) -{ - CRC_DATA = sdata; - return (CRC_DATA); -} - -/*! - \brief calculate the CRC value of an array of 32-bit values - \param[in] array: pointer to an array of 32-bit values - \param[in] size: size of the array - \param[out] none - \retval 32-bit value calculated by CRC -*/ -uint32_t crc_block_data_calculate(uint32_t array[], uint32_t size) -{ - uint32_t index; - for(index = 0U; index < size; index++){ - CRC_DATA = array[index]; - } - return (CRC_DATA); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dac.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dac.c deleted file mode 100644 index 81017f0..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dac.c +++ /dev/null @@ -1,558 +0,0 @@ -/*! - \file gd32f10x_dac.c - \brief DAC driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_dac.h" - -/* DAC register bit offset */ -#define DAC1_REG_OFFSET ((uint32_t)16U) -#define DH_12BIT_OFFSET ((uint32_t)16U) -#define DH_8BIT_OFFSET ((uint32_t)8U) - -/*! - \brief deinitialize DAC - \param[in] none - \param[out] none - \retval none -*/ -void dac_deinit(void) -{ - rcu_periph_reset_enable(RCU_DACRST); - rcu_periph_reset_disable(RCU_DACRST); -} - -/*! - \brief enable DAC - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval none -*/ -void dac_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL |= DAC_CTL_DEN0; - }else{ - DAC_CTL |= DAC_CTL_DEN1; - } -} - -/*! - \brief disable DAC - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval none -*/ -void dac_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL &= ~DAC_CTL_DEN0; - }else{ - DAC_CTL &= ~DAC_CTL_DEN1; - } -} - -/*! - \brief enable DAC DMA function - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval none -*/ -void dac_dma_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL |= DAC_CTL_DDMAEN0; - }else{ - DAC_CTL |= DAC_CTL_DDMAEN1; - } -} - -/*! - \brief disable DAC DMA function - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval none -*/ -void dac_dma_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL &= ~DAC_CTL_DDMAEN0; - }else{ - DAC_CTL &= ~DAC_CTL_DDMAEN1; - } -} - -/*! - \brief enable DAC output buffer - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval none -*/ -void dac_output_buffer_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL &= ~DAC_CTL_DBOFF0; - }else{ - DAC_CTL &= ~DAC_CTL_DBOFF1; - } -} - -/*! - \brief disable DAC output buffer - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval none -*/ -void dac_output_buffer_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL |= DAC_CTL_DBOFF0; - }else{ - DAC_CTL |= DAC_CTL_DBOFF1; - } -} - -/*! - \brief get DAC output value - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval DAC output data -*/ -uint16_t dac_output_value_get(uint32_t dac_periph) -{ - uint16_t data = 0U; - if(DAC0 == dac_periph){ - /* store the DAC0 output value */ - data = (uint16_t)DAC0_DO; - }else{ - /* store the DAC1 output value */ - data = (uint16_t)DAC1_DO; - } - return data; -} - -/*! - \brief set the DAC specified data holding register value - \param[in] dac_periph - \arg DACx(x=0,1) - \param[in] dac_align - only one parameter can be selected which is shown as below: - \arg DAC_ALIGN_8B_R: data right 8b alignment - \arg DAC_ALIGN_12B_R: data right 12b alignment - \arg DAC_ALIGN_12B_L: data left 12b alignment - \param[in] data: data to be loaded - \param[out] none - \retval none -*/ -void dac_data_set(uint32_t dac_periph, uint32_t dac_align, uint16_t data) -{ - if(DAC0 == dac_periph){ - switch(dac_align){ - /* data right 12b alignment */ - case DAC_ALIGN_12B_R: - DAC0_R12DH = data; - break; - /* data left 12b alignment */ - case DAC_ALIGN_12B_L: - DAC0_L12DH = data; - break; - /* data right 8b alignment */ - case DAC_ALIGN_8B_R: - DAC0_R8DH = data; - break; - default: - break; - } - }else{ - switch(dac_align){ - /* data right 12b alignment */ - case DAC_ALIGN_12B_R: - DAC1_R12DH = data; - break; - /* data left 12b alignment */ - case DAC_ALIGN_12B_L: - DAC1_L12DH = data; - break; - /* data right 8b alignment */ - case DAC_ALIGN_8B_R: - DAC1_R8DH = data; - break; - default: - break; - } - } -} - -/*! - \brief enable DAC trigger - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval none -*/ -void dac_trigger_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL |= DAC_CTL_DTEN0; - }else{ - DAC_CTL |= DAC_CTL_DTEN1; - } -} - -/*! - \brief disable DAC trigger - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval none -*/ -void dac_trigger_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL &= ~DAC_CTL_DTEN0; - }else{ - DAC_CTL &= ~DAC_CTL_DTEN1; - } -} - -/*! - \brief set DAC trigger source - \param[in] dac_periph - \arg DACx(x=0,1) - \param[in] triggersource: external triggers of DAC - only one parameter can be selected which is shown as below: - \arg DAC_TRIGGER_T1_TRGO: TIMER1 TRGO - \arg DAC_TRIGGER_T2_TRGO: TIMER2 TRGO (for GD32F10X_CL) - \arg DAC_TRIGGER_T3_TRGO: TIMER3 TRGO - \arg DAC_TRIGGER_T4_TRGO: TIMER4 TRGO - \arg DAC_TRIGGER_T5_TRGO: TIMER5 TRGO - \arg DAC_TRIGGER_T6_TRGO: TIMER6 TRGO - \arg DAC_TRIGGER_T7_TRGO: TIMER7 TRGO (for GD32F10X_MD and GD32F10X_HD and GD32F10X_XD) - \arg DAC_TRIGGER_EXTI_9: EXTI interrupt line9 event - \arg DAC_TRIGGER_SOFTWARE: software trigger - \param[out] none - \retval none -*/ -void dac_trigger_source_config(uint32_t dac_periph,uint32_t triggersource) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 trigger source */ - DAC_CTL &= ~DAC_CTL_DTSEL0; - DAC_CTL |= triggersource; - }else{ - /* configure DAC1 trigger source */ - DAC_CTL &= ~DAC_CTL_DTSEL1; - DAC_CTL |= (triggersource << DAC1_REG_OFFSET); - } -} - -/*! - \brief enable DAC software trigger - \param[in] dac_periph - \arg DACx(x=0,1) - \retval none -*/ -void dac_software_trigger_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_SWT |= DAC_SWT_SWTR0; - }else{ - DAC_SWT |= DAC_SWT_SWTR1; - } -} - -/*! - \brief disable DAC software trigger - \param[in] dac_periph - \arg DACx(x=0,1) - \param[out] none - \retval none -*/ -void dac_software_trigger_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_SWT &= ~DAC_SWT_SWTR0; - }else{ - DAC_SWT &= ~DAC_SWT_SWTR1; - } -} - -/*! - \brief configure DAC wave mode - \param[in] dac_periph - \arg DACx(x=0,1) - \param[in] wave_mode - only one parameter can be selected which is shown as below: - \arg DAC_WAVE_DISABLE: wave disable - \arg DAC_WAVE_MODE_LFSR: LFSR noise mode - \arg DAC_WAVE_MODE_TRIANGLE: triangle noise mode - \param[out] none - \retval none -*/ -void dac_wave_mode_config(uint32_t dac_periph, uint32_t wave_mode) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 wave mode */ - DAC_CTL &= ~DAC_CTL_DWM0; - DAC_CTL |= wave_mode; - }else{ - /* configure DAC1 wave mode */ - DAC_CTL &= ~DAC_CTL_DWM1; - DAC_CTL |= (wave_mode << DAC1_REG_OFFSET); - } -} - -/*! - \brief configure DAC wave bit width - \param[in] dac_periph - \arg DACx(x=0,1) - \param[in] bit_width - only one parameter can be selected which is shown as below: - \arg DAC_WAVE_BIT_WIDTH_1: bit width of the wave signal is 1 - \arg DAC_WAVE_BIT_WIDTH_2: bit width of the wave signal is 2 - \arg DAC_WAVE_BIT_WIDTH_3: bit width of the wave signal is 3 - \arg DAC_WAVE_BIT_WIDTH_4: bit width of the wave signal is 4 - \arg DAC_WAVE_BIT_WIDTH_5: bit width of the wave signal is 5 - \arg DAC_WAVE_BIT_WIDTH_6: bit width of the wave signal is 6 - \arg DAC_WAVE_BIT_WIDTH_7: bit width of the wave signal is 7 - \arg DAC_WAVE_BIT_WIDTH_8: bit width of the wave signal is 8 - \arg DAC_WAVE_BIT_WIDTH_9: bit width of the wave signal is 9 - \arg DAC_WAVE_BIT_WIDTH_10: bit width of the wave signal is 10 - \arg DAC_WAVE_BIT_WIDTH_11: bit width of the wave signal is 11 - \arg DAC_WAVE_BIT_WIDTH_12: bit width of the wave signal is 12 - \param[out] none - \retval none -*/ -void dac_wave_bit_width_config(uint32_t dac_periph, uint32_t bit_width) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 wave bit width */ - DAC_CTL &= ~DAC_CTL_DWBW0; - DAC_CTL |= bit_width; - }else{ - /* configure DAC1 wave bit width */ - DAC_CTL &= ~DAC_CTL_DWBW1; - DAC_CTL |= (bit_width << DAC1_REG_OFFSET); - } -} - -/*! - \brief configure DAC LFSR noise mode - \param[in] dac_periph - \arg DACx(x=0,1) - \param[in] unmask_bits - only one parameter can be selected which is shown as below: - \arg DAC_LFSR_BIT0: unmask the LFSR bit0 - \arg DAC_LFSR_BITS1_0: unmask the LFSR bits[1:0] - \arg DAC_LFSR_BITS2_0: unmask the LFSR bits[2:0] - \arg DAC_LFSR_BITS3_0: unmask the LFSR bits[3:0] - \arg DAC_LFSR_BITS4_0: unmask the LFSR bits[4:0] - \arg DAC_LFSR_BITS5_0: unmask the LFSR bits[5:0] - \arg DAC_LFSR_BITS6_0: unmask the LFSR bits[6:0] - \arg DAC_LFSR_BITS7_0: unmask the LFSR bits[7:0] - \arg DAC_LFSR_BITS8_0: unmask the LFSR bits[8:0] - \arg DAC_LFSR_BITS9_0: unmask the LFSR bits[9:0] - \arg DAC_LFSR_BITS10_0: unmask the LFSR bits[10:0] - \arg DAC_LFSR_BITS11_0: unmask the LFSR bits[11:0] - \param[out] none - \retval none -*/ -void dac_lfsr_noise_config(uint32_t dac_periph, uint32_t unmask_bits) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 LFSR noise mode */ - DAC_CTL &= ~DAC_CTL_DWBW0; - DAC_CTL |= unmask_bits; - }else{ - /* configure DAC1 LFSR noise mode */ - DAC_CTL &= ~DAC_CTL_DWBW1; - DAC_CTL |= (unmask_bits << DAC1_REG_OFFSET); - } -} - -/*! - \brief configure DAC triangle noise mode - \param[in] dac_periph - \arg DACx(x=0,1) - \param[in] amplitude - only one parameter can be selected which is shown as below: - \arg DAC_TRIANGLE_AMPLITUDE_1: triangle amplitude is 1 - \arg DAC_TRIANGLE_AMPLITUDE_3: triangle amplitude is 3 - \arg DAC_TRIANGLE_AMPLITUDE_7: triangle amplitude is 7 - \arg DAC_TRIANGLE_AMPLITUDE_15: triangle amplitude is 15 - \arg DAC_TRIANGLE_AMPLITUDE_31: triangle amplitude is 31 - \arg DAC_TRIANGLE_AMPLITUDE_63: triangle amplitude is 63 - \arg DAC_TRIANGLE_AMPLITUDE_127: triangle amplitude is 127 - \arg DAC_TRIANGLE_AMPLITUDE_255: triangle amplitude is 255 - \arg DAC_TRIANGLE_AMPLITUDE_511: triangle amplitude is 511 - \arg DAC_TRIANGLE_AMPLITUDE_1023: triangle amplitude is 1023 - \arg DAC_TRIANGLE_AMPLITUDE_2047: triangle amplitude is 2047 - \arg DAC_TRIANGLE_AMPLITUDE_4095: triangle amplitude is 4095 - \param[out] none - \retval none -*/ -void dac_triangle_noise_config(uint32_t dac_periph, uint32_t amplitude) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 triangle noise mode */ - DAC_CTL &= ~DAC_CTL_DWBW0; - DAC_CTL |= amplitude; - }else{ - /* configure DAC1 triangle noise mode */ - DAC_CTL &= ~DAC_CTL_DWBW1; - DAC_CTL |= (amplitude << DAC1_REG_OFFSET); - } -} - -/*! - \brief enable DAC concurrent mode - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_enable(void) -{ - uint32_t ctl = 0U; - ctl = DAC_CTL_DEN0 | DAC_CTL_DEN1; - DAC_CTL |= (ctl); -} - -/*! - \brief disable DAC concurrent mode - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_disable(void) -{ - uint32_t ctl = 0U; - ctl = DAC_CTL_DEN0 | DAC_CTL_DEN1; - DAC_CTL &= (~ctl); -} - -/*! - \brief enable DAC concurrent software trigger function - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_software_trigger_enable(void) -{ - uint32_t swt = 0U; - swt = DAC_SWT_SWTR0 | DAC_SWT_SWTR1; - DAC_SWT |= (swt); -} - -/*! - \brief disable DAC concurrent software trigger function - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_software_trigger_disable(void) -{ - uint32_t swt = 0U; - swt = DAC_SWT_SWTR0 | DAC_SWT_SWTR1; - DAC_SWT &= (~swt); -} - -/*! - \brief enable DAC concurrent buffer function - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_output_buffer_enable(void) -{ - uint32_t ctl = 0U; - ctl = DAC_CTL_DBOFF0 | DAC_CTL_DBOFF1; - DAC_CTL &= (~ctl); -} - -/*! - \brief disable DAC concurrent buffer function - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_output_buffer_disable(void) -{ - uint32_t ctl = 0U; - ctl = DAC_CTL_DBOFF0 | DAC_CTL_DBOFF1; - DAC_CTL |= (ctl); -} - -/*! - \brief set DAC concurrent mode data holding register value - \param[in] dac_align - only one parameter can be selected which is shown as below: - \arg DAC_ALIGN_8B_R: data right 8b alignment - \arg DAC_ALIGN_12B_R: data right 12b alignment - \arg DAC_ALIGN_12B_L: data left 12b alignment - \param[in] data0: data to be loaded - \param[in] data1: data to be loaded - \param[out] none - \retval none -*/ -void dac_concurrent_data_set(uint32_t dac_align, uint16_t data0, uint16_t data1) -{ - uint32_t data = 0U; - switch(dac_align){ - /* data right 12b alignment */ - case DAC_ALIGN_12B_R: - data = ((uint32_t)data1 << DH_12BIT_OFFSET) | data0; - DACC_R12DH = data; - break; - /* data left 12b alignment */ - case DAC_ALIGN_12B_L: - data = ((uint32_t)data1 << DH_12BIT_OFFSET) | data0; - DACC_L12DH = data; - break; - /* data right 8b alignment */ - case DAC_ALIGN_8B_R: - data = ((uint32_t)data1 << DH_8BIT_OFFSET) | data0; - DACC_R8DH = data; - break; - default: - break; - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dbg.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dbg.c deleted file mode 100644 index 2e29a93..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dbg.c +++ /dev/null @@ -1,152 +0,0 @@ -/*! - \file gd32f10x_dbg.c - \brief DBG driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_dbg.h" - -/*! - \brief read DBG_ID code register - \param[in] none - \param[out] none - \retval DBG_ID code -*/ -uint32_t dbg_id_get(void) -{ - return DBG_ID; -} - -/*! - \brief enable low power behavior when the mcu is in debug mode - \param[in] dbg_low_power: - one or more parameters can be selected which are shown as below: - \arg DBG_LOW_POWER_SLEEP: keep debugger connection during sleep mode - \arg DBG_LOW_POWER_DEEPSLEEP: keep debugger connection during deepsleep mode - \arg DBG_LOW_POWER_STANDBY: keep debugger connection during standby mode - \param[out] none - \retval none -*/ -void dbg_low_power_enable(uint32_t dbg_low_power) -{ - DBG_CTL |= dbg_low_power; -} - -/*! - \brief disable low power behavior when the mcu is in debug mode - \param[in] dbg_low_power: - one or more parameters can be selected which are shown as below: - \arg DBG_LOW_POWER_SLEEP: donot keep debugger connection during sleep mode - \arg DBG_LOW_POWER_DEEPSLEEP: donot keep debugger connection during deepsleep mode - \arg DBG_LOW_POWER_STANDBY: donot keep debugger connection during standby mode - \param[out] none - \retval none -*/ -void dbg_low_power_disable(uint32_t dbg_low_power) -{ - DBG_CTL &= ~dbg_low_power; -} - -/*! - \brief enable peripheral behavior when the mcu is in debug mode - \param[in] dbg_periph: refer to dbg_periph_enum - one or more parameters can be selected which are shown as below: - \arg DBG_FWDGT_HOLD : debug FWDGT kept when core is halted - \arg DBG_WWDGT_HOLD : debug WWDGT kept when core is halted - \arg DBG_CANx_HOLD (x=0,1,CAN1 is only available for CL series): hold CANx counter when core is halted - \arg DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted - \arg DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are not available for HD series): hold TIMERx counter when core is halted - \param[out] none - \retval none -*/ -void dbg_periph_enable(dbg_periph_enum dbg_periph) -{ - DBG_CTL |= (uint32_t)dbg_periph; -} - -/*! - \brief disable peripheral behavior when the mcu is in debug mode - \param[in] dbg_periph: refer to dbg_periph_enum - one or more parameters can be selected which are shown as below: - \arg DBG_FWDGT_HOLD : debug FWDGT kept when core is halted - \arg DBG_WWDGT_HOLD : debug WWDGT kept when core is halted - \arg DBG_CANx_HOLD (x=0,1,CAN1 is only available for CL series): hold CAN0 counter when core is halted - \arg DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted - \arg DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are only available for XD and CL series): hold TIMERx counter when core is halted - \param[out] none - \retval none -*/ -void dbg_periph_disable(dbg_periph_enum dbg_periph) -{ - DBG_CTL &= ~(uint32_t)dbg_periph; -} - -/*! - \brief enable trace pin assignment - \param[in] none - \param[out] none - \retval none -*/ -void dbg_trace_pin_enable(void) -{ - DBG_CTL |= DBG_CTL_TRACE_IOEN; -} - -/*! - \brief disable trace pin assignment - \param[in] none - \param[out] none - \retval none -*/ -void dbg_trace_pin_disable(void) -{ - DBG_CTL &= ~DBG_CTL_TRACE_IOEN; -} - -/*! - \brief trace pin mode selection - \param[in] trace_mode: - only one parameter can be selected which is shown as below: - \arg TRACE_MODE_ASYNC: trace pin used for async mode - \arg TRACE_MODE_SYNC_DATASIZE_1: trace pin used for sync mode and data size is 1 - \arg TRACE_MODE_SYNC_DATASIZE_2: trace pin used for sync mode and data size is 2 - \arg TRACE_MODE_SYNC_DATASIZE_4: trace pin used for sync mode and data size is 4 - \param[out] none - \retval none -*/ -void dbg_trace_pin_mode_set(uint32_t trace_mode) -{ - DBG_CTL &= ~DBG_CTL_TRACE_MODE; - DBG_CTL |= trace_mode; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dma.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dma.c deleted file mode 100644 index a6da8e5..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_dma.c +++ /dev/null @@ -1,737 +0,0 @@ -/*! - \file gd32f10x_dma.c - \brief DMA driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2019-10-30, V2.1.1, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_dma.h" - -#define DMA_WRONG_HANDLE while(1){} - - /* check whether peripheral matches channels or not */ -static ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx); - -/*! - \brief deinitialize DMA a channel registers - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel is deinitialized - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_deinit(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* disable DMA a channel */ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN; - /* reset DMA channel registers */ - DMA_CHCTL(dma_periph, channelx) = DMA_CHCTL_RESET_VALUE; - DMA_CHCNT(dma_periph, channelx) = DMA_CHCNT_RESET_VALUE; - DMA_CHPADDR(dma_periph, channelx) = DMA_CHPADDR_RESET_VALUE; - DMA_CHMADDR(dma_periph, channelx) = DMA_CHMADDR_RESET_VALUE; - DMA_INTC(dma_periph) |= DMA_FLAG_ADD(DMA_CHINTF_RESET_VALUE, channelx); -} - -/*! - \brief initialize the parameters of DMA struct with the default values - \param[in] init_struct: the initialization data needed to initialize DMA channel - \param[out] none - \retval none -*/ -void dma_struct_para_init(dma_parameter_struct* init_struct) -{ - /* set the DMA struct with the default values */ - init_struct->periph_addr = 0U; - init_struct->periph_width = 0U; - init_struct->periph_inc = DMA_PERIPH_INCREASE_DISABLE; - init_struct->memory_addr = 0U; - init_struct->memory_width = 0U; - init_struct->memory_inc = DMA_MEMORY_INCREASE_DISABLE; - init_struct->number = 0U; - init_struct->direction = DMA_PERIPHERAL_TO_MEMORY; - init_struct->priority = DMA_PRIORITY_LOW; -} - -/*! - \brief initialize DMA channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel is initialized - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] init_struct: the data needed to initialize DMA channel - periph_addr: peripheral base address - periph_width: DMA_PERIPHERAL_WIDTH_8BIT, DMA_PERIPHERAL_WIDTH_16BIT, DMA_PERIPHERAL_WIDTH_32BIT - periph_inc: DMA_PERIPH_INCREASE_ENABLE, DMA_PERIPH_INCREASE_DISABLE - memory_addr: memory base address - memory_width: DMA_MEMORY_WIDTH_8BIT, DMA_MEMORY_WIDTH_16BIT, DMA_MEMORY_WIDTH_32BIT - memory_inc: DMA_MEMORY_INCREASE_ENABLE, DMA_MEMORY_INCREASE_DISABLE - direction: DMA_PERIPHERAL_TO_MEMORY, DMA_MEMORY_TO_PERIPHERAL - number: the number of remaining data to be transferred by the DMA - priority: DMA_PRIORITY_LOW, DMA_PRIORITY_MEDIUM, DMA_PRIORITY_HIGH, DMA_PRIORITY_ULTRA_HIGH - \param[out] none - \retval none -*/ -void dma_init(uint32_t dma_periph, dma_channel_enum channelx, dma_parameter_struct *init_struct) -{ - uint32_t ctl; - - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* configure peripheral base address */ - DMA_CHPADDR(dma_periph, channelx) = init_struct->periph_addr; - - /* configure memory base address */ - DMA_CHMADDR(dma_periph, channelx) = init_struct->memory_addr; - - /* configure the number of remaining data to be transferred */ - DMA_CHCNT(dma_periph, channelx) = (init_struct->number & DMA_CHANNEL_CNT_MASK); - - /* configure peripheral transfer width,memory transfer width, */ - ctl = DMA_CHCTL(dma_periph, channelx); - ctl &= ~(DMA_CHXCTL_PWIDTH | DMA_CHXCTL_MWIDTH | DMA_CHXCTL_PRIO); - ctl |= (init_struct->periph_width | init_struct->memory_width | init_struct->priority); - DMA_CHCTL(dma_periph, channelx) = ctl; - - /* configure peripheral increasing mode */ - if(DMA_PERIPH_INCREASE_ENABLE == init_struct->periph_inc){ - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA; - }else{ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA; - } - - /* configure memory increasing mode */ - if(DMA_MEMORY_INCREASE_ENABLE == init_struct->memory_inc){ - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA; - }else{ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA; - } - - /* configure the direction of data transfer */ - if(DMA_PERIPHERAL_TO_MEMORY == init_struct->direction){ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR; - }else{ - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR; - } -} - -/*! - \brief enable DMA circulation mode - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_circulation_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CMEN; -} - -/*! - \brief disable DMA circulation mode - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_circulation_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CMEN; -} - -/*! - \brief enable memory to memory mode - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_memory_to_memory_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_M2M; -} - -/*! - \brief disable memory to memory mode - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_memory_to_memory_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_M2M; -} - -/*! - \brief enable DMA channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_channel_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CHEN; -} - -/*! - \brief disable DMA channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_channel_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN; -} - -/*! - \brief set DMA peripheral base address - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to set peripheral base address - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] address: peripheral base address - \param[out] none - \retval none -*/ -void dma_periph_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHPADDR(dma_periph, channelx) = address; -} - -/*! - \brief set DMA memory base address - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to set memory base address - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] address: memory base address - \param[out] none - \retval none -*/ -void dma_memory_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHMADDR(dma_periph, channelx) = address; -} - -/*! - \brief set the number of remaining data to be transferred by the DMA - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to set number - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] number: the number of remaining data to be transferred by the DMA - \arg 0x0000-0xFFFF - \param[out] none - \retval none -*/ -void dma_transfer_number_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t number) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCNT(dma_periph, channelx) = (number & DMA_CHANNEL_CNT_MASK); -} - -/*! - \brief get the number of remaining data to be transferred by the DMA - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to set number - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval uint32_t: the number of remaining data to be transferred by the DMA -*/ -uint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - return (uint32_t)DMA_CHCNT(dma_periph, channelx); -} - -/*! - \brief configure priority level of DMA channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] priority: priority Level of this channel - only one parameter can be selected which is shown as below: - \arg DMA_PRIORITY_LOW: low priority - \arg DMA_PRIORITY_MEDIUM: medium priority - \arg DMA_PRIORITY_HIGH: high priority - \arg DMA_PRIORITY_ULTRA_HIGH: ultra high priority - \param[out] none - \retval none -*/ -void dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t priority) -{ - uint32_t ctl; - - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* acquire DMA_CHxCTL register */ - ctl = DMA_CHCTL(dma_periph, channelx); - /* assign regiser */ - ctl &= ~DMA_CHXCTL_PRIO; - ctl |= priority; - DMA_CHCTL(dma_periph, channelx) = ctl; -} - -/*! - \brief configure transfer data size of memory - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] mwidth: transfer data width of memory - only one parameter can be selected which is shown as below: - \arg DMA_MEMORY_WIDTH_8BIT: transfer data width of memory is 8-bit - \arg DMA_MEMORY_WIDTH_16BIT: transfer data width of memory is 16-bit - \arg DMA_MEMORY_WIDTH_32BIT: transfer data width of memory is 32-bit - \param[out] none - \retval none -*/ -void dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t mwidth) -{ - uint32_t ctl; - - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* acquire DMA_CHxCTL register */ - ctl = DMA_CHCTL(dma_periph, channelx); - /* assign regiser */ - ctl &= ~DMA_CHXCTL_MWIDTH; - ctl |= mwidth; - DMA_CHCTL(dma_periph, channelx) = ctl; -} - -/*! - \brief configure transfer data size of peripheral - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] pwidth: transfer data width of peripheral - only one parameter can be selected which is shown as below: - \arg DMA_PERIPHERAL_WIDTH_8BIT: transfer data width of peripheral is 8-bit - \arg DMA_PERIPHERAL_WIDTH_16BIT: transfer data width of peripheral is 16-bit - \arg DMA_PERIPHERAL_WIDTH_32BIT: transfer data width of peripheral is 32-bit - \param[out] none - \retval none -*/ -void dma_periph_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t pwidth) -{ - uint32_t ctl; - - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* acquire DMA_CHxCTL register */ - ctl = DMA_CHCTL(dma_periph, channelx); - /* assign regiser */ - ctl &= ~DMA_CHXCTL_PWIDTH; - ctl |= pwidth; - DMA_CHCTL(dma_periph, channelx) = ctl; -} - -/*! - \brief enable next address increasement algorithm of memory - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_memory_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA; -} - -/*! - \brief disable next address increasement algorithm of memory - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_memory_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA; -} - -/*! - \brief enable next address increasement algorithm of peripheral - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_periph_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA; -} - -/*! - \brief disable next address increasement algorithm of peripheral - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_periph_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA; -} - -/*! - \brief configure the direction of data transfer on the channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] direction: specify the direction of data transfer - only one parameter can be selected which is shown as below: - \arg DMA_PERIPHERAL_TO_MEMORY: read from peripheral and write to memory - \arg DMA_MEMORY_TO_PERIPHERAL: read from memory and write to peripheral - \param[out] none - \retval none -*/ -void dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint8_t direction) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - if(DMA_PERIPHERAL_TO_MEMORY == direction){ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR; - } else { - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR; - } -} - -/*! - \brief check DMA flag is set or not - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to get flag - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] flag: specify get which flag - only one parameter can be selected which is shown as below: - \arg DMA_FLAG_G: global interrupt flag of channel - \arg DMA_FLAG_FTF: full transfer finish flag of channel - \arg DMA_FLAG_HTF: half transfer finish flag of channel - \arg DMA_FLAG_ERR: error flag of channel - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) -{ - FlagStatus reval; - - /* check whether the flag is set or not */ - if(RESET != (DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx))){ - reval = SET; - }else{ - reval = RESET; - } - - return reval; -} - -/*! - \brief clear the flag of a DMA channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to clear flag - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] flag: specify get which flag - only one parameter can be selected which is shown as below: - \arg DMA_FLAG_G: global interrupt flag of channel - \arg DMA_FLAG_FTF: full transfer finish flag of channel - \arg DMA_FLAG_HTF: half transfer finish flag of channel - \arg DMA_FLAG_ERR: error flag of channel - \param[out] none - \retval none -*/ -void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) -{ - DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); -} - -/*! - \brief check DMA flag and interrupt enable bit is set or not - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to get flag - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] flag: specify get which flag - only one parameter can be selected which is shown as below: - \arg DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel - \arg DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel - \arg DMA_INT_FLAG_ERR: error interrupt flag of channel - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) -{ - uint32_t interrupt_enable = 0U, interrupt_flag = 0U; - - switch(flag){ - case DMA_INT_FLAG_FTF: - /* check whether the full transfer finish interrupt flag is set and enabled */ - interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); - interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_FTFIE; - break; - case DMA_INT_FLAG_HTF: - /* check whether the half transfer finish interrupt flag is set and enabled */ - interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); - interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_HTFIE; - break; - case DMA_INT_FLAG_ERR: - /* check whether the error interrupt flag is set and enabled */ - interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); - interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_ERRIE; - break; - default: - DMA_WRONG_HANDLE - } - - /* when the interrupt flag is set and enabled, return SET */ - if(interrupt_flag && interrupt_enable){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear DMA a channel flag - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to clear flag - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] flag: specify get which flag - only one parameter can be selected which is shown as below: - \arg DMA_INT_FLAG_G: global interrupt flag of channel - \arg DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel - \arg DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel - \arg DMA_INT_FLAG_ERR: error interrupt flag of channel - \param[out] none - \retval none -*/ -void dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) -{ - DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); -} - -/*! - \brief enable DMA interrupt - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] source: specify which interrupt to enbale - one or more parameters can be selected which are shown as below - \arg DMA_INT_FTF: channel full transfer finish interrupt - \arg DMA_INT_HTF: channel half transfer finish interrupt - \arg DMA_INT_ERR: channel error interrupt - \param[out] none - \retval none -*/ -void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= source; -} - -/*! - \brief disable DMA interrupt - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] source: specify which interrupt to disbale - one or more parameters can be selected which are shown as below - \arg DMA_INT_FTF: channel full transfer finish interrupt - \arg DMA_INT_HTF: channel half transfer finish interrupt - \arg DMA_INT_ERR: channel error interrupt - \param[out] none - \retval none -*/ -void dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~source; -} - -/*! - \brief check whether peripheral and channels match - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA_CHx(x=0..6) - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -static ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx) -{ - ErrStatus val = SUCCESS; - - if(DMA1 == dma_periph){ - /* for DMA1, the channel is from DMA_CH0 to DMA_CH4 */ - if(channelx > DMA_CH4){ - val = ERROR; - } - } - - return val; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_enet.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_enet.c deleted file mode 100644 index 121c045..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_enet.c +++ /dev/null @@ -1,3084 +0,0 @@ -/*! - \file gd32f10x_enet.c - \brief ENET driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_enet.h" - -#ifdef GD32F10X_CL - -#if defined (__CC_ARM) /*!< ARM compiler */ -__align(4) -enet_descriptors_struct rxdesc_tab[ENET_RXBUF_NUM]; /*!< ENET RxDMA descriptor */ -__align(4) -enet_descriptors_struct txdesc_tab[ENET_TXBUF_NUM]; /*!< ENET TxDMA descriptor */ -__align(4) -uint8_t rx_buff[ENET_RXBUF_NUM][ENET_RXBUF_SIZE]; /*!< ENET receive buffer */ -__align(4) -uint8_t tx_buff[ENET_TXBUF_NUM][ENET_TXBUF_SIZE]; /*!< ENET transmit buffer */ - -#elif defined ( __ICCARM__ ) /*!< IAR compiler */ -#pragma data_alignment=4 -enet_descriptors_struct rxdesc_tab[ENET_RXBUF_NUM]; /*!< ENET RxDMA descriptor */ -#pragma data_alignment=4 -enet_descriptors_struct txdesc_tab[ENET_TXBUF_NUM]; /*!< ENET TxDMA descriptor */ -#pragma data_alignment=4 -uint8_t rx_buff[ENET_RXBUF_NUM][ENET_RXBUF_SIZE]; /*!< ENET receive buffer */ -#pragma data_alignment=4 -uint8_t tx_buff[ENET_TXBUF_NUM][ENET_TXBUF_SIZE]; /*!< ENET transmit buffer */ - -#elif defined (__GNUC__) /* GNU Compiler */ -enet_descriptors_struct rxdesc_tab[ENET_RXBUF_NUM] __attribute__ ((aligned (4))); /*!< ENET RxDMA descriptor */ -enet_descriptors_struct txdesc_tab[ENET_TXBUF_NUM] __attribute__ ((aligned (4))); /*!< ENET TxDMA descriptor */ -uint8_t rx_buff[ENET_RXBUF_NUM][ENET_RXBUF_SIZE] __attribute__ ((aligned (4))); /*!< ENET receive buffer */ -uint8_t tx_buff[ENET_TXBUF_NUM][ENET_TXBUF_SIZE] __attribute__ ((aligned (4))); /*!< ENET transmit buffer */ - -#endif /* __CC_ARM */ - -/* global transmit and receive descriptors pointers */ -enet_descriptors_struct *dma_current_txdesc; -enet_descriptors_struct *dma_current_rxdesc; - -/* structure pointer of ptp descriptor for normal mode */ -enet_descriptors_struct *dma_current_ptp_txdesc = NULL; -enet_descriptors_struct *dma_current_ptp_rxdesc = NULL; - -/* init structure parameters for ENET initialization */ -static enet_initpara_struct enet_initpara ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - -static uint32_t enet_unknow_err = 0U; - -/* array of register offset for debug information get */ -static const uint16_t enet_reg_tab[] = { -0x0000, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x1080, 0x001C, 0x0028, 0x002C, -0x0038, 0x003C, 0x0040, 0x0044, 0x0048, 0x004C, 0x0050, 0x0054, 0x0058, 0x005C, - -0x0100, 0x0104, 0x0108, 0x010C, 0x0110, 0x014C, 0x0150, 0x0168, 0x0194, 0x0198, 0x01C4, - -0x0700, 0x0704,0x0708, 0x070C, 0x0710, 0x0714, 0x0718, 0x071C, 0x0720, - -0x1000, 0x1004, 0x1008, 0x100C, 0x1010, 0x1014, 0x1018, 0x101C, 0x1020, 0x1048, 0x104C, -0x1050, 0x1054}; - - -/*! - \brief deinitialize the ENET, and reset structure parameters for ENET initialization - \param[in] none - \param[out] none - \retval none -*/ -void enet_deinit(void) -{ - rcu_periph_reset_enable(RCU_ENETRST); - rcu_periph_reset_disable(RCU_ENETRST); - enet_initpara_reset(); -} - -/*! - \brief configure the parameters which are usually less cared for initialization - note -- this function must be called before enet_init(), otherwise - configuration will be no effect - \param[in] option: different function option, which is related to several parameters, - only one parameter can be selected which is shown as below, refer to enet_option_enum - \arg FORWARD_OPTION: choose to configure the frame forward related parameters - \arg DMABUS_OPTION: choose to configure the DMA bus mode related parameters - \arg DMA_MAXBURST_OPTION: choose to configure the DMA max burst related parameters - \arg DMA_ARBITRATION_OPTION: choose to configure the DMA arbitration related parameters - \arg STORE_OPTION: choose to configure the store forward mode related parameters - \arg DMA_OPTION: choose to configure the DMA descriptor related parameters - \arg VLAN_OPTION: choose to configure vlan related parameters - \arg FLOWCTL_OPTION: choose to configure flow control related parameters - \arg HASHH_OPTION: choose to configure hash high - \arg HASHL_OPTION: choose to configure hash low - \arg FILTER_OPTION: choose to configure frame filter related parameters - \arg HALFDUPLEX_OPTION: choose to configure halfduplex mode related parameters - \arg TIMER_OPTION: choose to configure time counter related parameters - \arg INTERFRAMEGAP_OPTION: choose to configure the inter frame gap related parameters - \param[in] para: the related parameters according to the option - all the related parameters should be configured which are shown as below - FORWARD_OPTION related parameters: - - ENET_AUTO_PADCRC_DROP_ENABLE/ ENET_AUTO_PADCRC_DROP_DISABLE ; - - ENET_FORWARD_ERRFRAMES_ENABLE/ ENET_FORWARD_ERRFRAMES_DISABLE ; - - ENET_FORWARD_UNDERSZ_GOODFRAMES_ENABLE/ ENET_FORWARD_UNDERSZ_GOODFRAMES_DISABLE . - DMABUS_OPTION related parameters: - - ENET_ADDRESS_ALIGN_ENABLE/ ENET_ADDRESS_ALIGN_DISABLE ; - - ENET_FIXED_BURST_ENABLE/ ENET_FIXED_BURST_DISABLE ; - DMA_MAXBURST_OPTION related parameters: - - ENET_RXDP_1BEAT/ ENET_RXDP_2BEAT/ ENET_RXDP_4BEAT/ - ENET_RXDP_8BEAT/ ENET_RXDP_16BEAT/ ENET_RXDP_32BEAT/ - ENET_RXDP_4xPGBL_4BEAT/ ENET_RXDP_4xPGBL_8BEAT/ - ENET_RXDP_4xPGBL_16BEAT/ ENET_RXDP_4xPGBL_32BEAT/ - ENET_RXDP_4xPGBL_64BEAT/ ENET_RXDP_4xPGBL_128BEAT ; - - ENET_PGBL_1BEAT/ ENET_PGBL_2BEAT/ ENET_PGBL_4BEAT/ - ENET_PGBL_8BEAT/ ENET_PGBL_16BEAT/ ENET_PGBL_32BEAT/ - ENET_PGBL_4xPGBL_4BEAT/ ENET_PGBL_4xPGBL_8BEAT/ - ENET_PGBL_4xPGBL_16BEAT/ ENET_PGBL_4xPGBL_32BEAT/ - ENET_PGBL_4xPGBL_64BEAT/ ENET_PGBL_4xPGBL_128BEAT ; - - ENET_RXTX_DIFFERENT_PGBL/ ENET_RXTX_SAME_PGBL ; - DMA_ARBITRATION_OPTION related parameters: - - ENET_ARBITRATION_RXPRIORTX / ENET_ARBITRATION_RXTX_1_1 - / ENET_ARBITRATION_RXTX_2_1/ ENET_ARBITRATION_RXTX_3_1 - / ENET_ARBITRATION_RXTX_4_1. - STORE_OPTION related parameters: - - ENET_RX_MODE_STOREFORWARD/ ENET_RX_MODE_CUTTHROUGH ; - - ENET_TX_MODE_STOREFORWARD/ ENET_TX_MODE_CUTTHROUGH ; - - ENET_RX_THRESHOLD_64BYTES/ ENET_RX_THRESHOLD_32BYTES/ - ENET_RX_THRESHOLD_96BYTES/ ENET_RX_THRESHOLD_128BYTES ; - - ENET_TX_THRESHOLD_64BYTES/ ENET_TX_THRESHOLD_128BYTES/ - ENET_TX_THRESHOLD_192BYTES/ ENET_TX_THRESHOLD_256BYTES/ - ENET_TX_THRESHOLD_40BYTES/ ENET_TX_THRESHOLD_32BYTES/ - ENET_TX_THRESHOLD_24BYTES/ ENET_TX_THRESHOLD_16BYTES . - DMA_OPTION related parameters: - - ENET_FLUSH_RXFRAME_ENABLE/ ENET_FLUSH_RXFRAME_DISABLE ; - - ENET_SECONDFRAME_OPT_ENABLE/ ENET_SECONDFRAME_OPT_DISABLE . - VLAN_OPTION related parameters: - - ENET_VLANTAGCOMPARISON_12BIT/ ENET_VLANTAGCOMPARISON_16BIT ; - - MAC_VLT_VLTI(regval) . - FLOWCTL_OPTION related parameters: - - MAC_FCTL_PTM(regval) ; - - ENET_ZERO_QUANTA_PAUSE_ENABLE/ ENET_ZERO_QUANTA_PAUSE_DISABLE ; - - ENET_PAUSETIME_MINUS4/ ENET_PAUSETIME_MINUS28/ - ENET_PAUSETIME_MINUS144/ENET_PAUSETIME_MINUS256 ; - - ENET_MAC0_AND_UNIQUE_ADDRESS_PAUSEDETECT/ ENET_UNIQUE_PAUSEDETECT ; - - ENET_RX_FLOWCONTROL_ENABLE/ ENET_RX_FLOWCONTROL_DISABLE ; - - ENET_TX_FLOWCONTROL_ENABLE/ ENET_TX_FLOWCONTROL_DISABLE ; - - ENET_ACTIVE_THRESHOLD_256BYTES/ ENET_ACTIVE_THRESHOLD_512BYTES ; - - ENET_ACTIVE_THRESHOLD_768BYTES/ ENET_ACTIVE_THRESHOLD_1024BYTES ; - - ENET_ACTIVE_THRESHOLD_1280BYTES/ ENET_ACTIVE_THRESHOLD_1536BYTES ; - - ENET_ACTIVE_THRESHOLD_1792BYTES ; - - ENET_DEACTIVE_THRESHOLD_256BYTES/ ENET_DEACTIVE_THRESHOLD_512BYTES ; - - ENET_DEACTIVE_THRESHOLD_768BYTES/ ENET_DEACTIVE_THRESHOLD_1024BYTES ; - - ENET_DEACTIVE_THRESHOLD_1280BYTES/ ENET_DEACTIVE_THRESHOLD_1536BYTES ; - - ENET_DEACTIVE_THRESHOLD_1792BYTES . - HASHH_OPTION related parameters: - - 0x0~0xFFFF FFFFU - HASHL_OPTION related parameters: - - 0x0~0xFFFF FFFFU - FILTER_OPTION related parameters: - - ENET_SRC_FILTER_NORMAL_ENABLE/ ENET_SRC_FILTER_INVERSE_ENABLE/ - ENET_SRC_FILTER_DISABLE ; - - ENET_DEST_FILTER_INVERSE_ENABLE/ ENET_DEST_FILTER_INVERSE_DISABLE ; - - ENET_MULTICAST_FILTER_HASH_OR_PERFECT/ ENET_MULTICAST_FILTER_HASH/ - ENET_MULTICAST_FILTER_PERFECT/ ENET_MULTICAST_FILTER_NONE ; - - ENET_UNICAST_FILTER_EITHER/ ENET_UNICAST_FILTER_HASH/ - ENET_UNICAST_FILTER_PERFECT ; - - ENET_PCFRM_PREVENT_ALL/ ENET_PCFRM_PREVENT_PAUSEFRAME/ - ENET_PCFRM_FORWARD_ALL/ ENET_PCFRM_FORWARD_FILTERED . - HALFDUPLEX_OPTION related parameters: - - ENET_CARRIERSENSE_ENABLE/ ENET_CARRIERSENSE_DISABLE ; - - ENET_RECEIVEOWN_ENABLE/ ENET_RECEIVEOWN_DISABLE ; - - ENET_RETRYTRANSMISSION_ENABLE/ ENET_RETRYTRANSMISSION_DISABLE ; - - ENET_BACKOFFLIMIT_10/ ENET_BACKOFFLIMIT_8/ - ENET_BACKOFFLIMIT_4/ ENET_BACKOFFLIMIT_1 ; - - ENET_DEFERRALCHECK_ENABLE/ ENET_DEFERRALCHECK_DISABLE . - TIMER_OPTION related parameters: - - ENET_WATCHDOG_ENABLE/ ENET_WATCHDOG_DISABLE ; - - ENET_JABBER_ENABLE/ ENET_JABBER_DISABLE ; - INTERFRAMEGAP_OPTION related parameters: - - ENET_INTERFRAMEGAP_96BIT/ ENET_INTERFRAMEGAP_88BIT/ - ENET_INTERFRAMEGAP_80BIT/ ENET_INTERFRAMEGAP_72BIT/ - ENET_INTERFRAMEGAP_64BIT/ ENET_INTERFRAMEGAP_56BIT/ - ENET_INTERFRAMEGAP_48BIT/ ENET_INTERFRAMEGAP_40BIT . - \param[out] none - \retval none -*/ -void enet_initpara_config(enet_option_enum option, uint32_t para) -{ - switch(option){ - case FORWARD_OPTION: - /* choose to configure forward_frame, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)FORWARD_OPTION; - enet_initpara.forward_frame = para; - break; - case DMABUS_OPTION: - /* choose to configure dmabus_mode, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)DMABUS_OPTION; - enet_initpara.dmabus_mode = para; - break; - case DMA_MAXBURST_OPTION: - /* choose to configure dma_maxburst, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)DMA_MAXBURST_OPTION; - enet_initpara.dma_maxburst = para; - break; - case DMA_ARBITRATION_OPTION: - /* choose to configure dma_arbitration, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)DMA_ARBITRATION_OPTION; - enet_initpara.dma_arbitration = para; - break; - case STORE_OPTION: - /* choose to configure store_forward_mode, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)STORE_OPTION; - enet_initpara.store_forward_mode = para; - break; - case DMA_OPTION: - /* choose to configure dma_function, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)DMA_OPTION; - enet_initpara.dma_function = para; - break; - case VLAN_OPTION: - /* choose to configure vlan_config, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)VLAN_OPTION; - enet_initpara.vlan_config = para; - break; - case FLOWCTL_OPTION: - /* choose to configure flow_control, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)FLOWCTL_OPTION; - enet_initpara.flow_control = para; - break; - case HASHH_OPTION: - /* choose to configure hashtable_high, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)HASHH_OPTION; - enet_initpara.hashtable_high = para; - break; - case HASHL_OPTION: - /* choose to configure hashtable_low, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)HASHL_OPTION; - enet_initpara.hashtable_low = para; - break; - case FILTER_OPTION: - /* choose to configure framesfilter_mode, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)FILTER_OPTION; - enet_initpara.framesfilter_mode = para; - break; - case HALFDUPLEX_OPTION: - /* choose to configure halfduplex_param, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)HALFDUPLEX_OPTION; - enet_initpara.halfduplex_param = para; - break; - case TIMER_OPTION: - /* choose to configure timer_config, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)TIMER_OPTION; - enet_initpara.timer_config = para; - break; - case INTERFRAMEGAP_OPTION: - /* choose to configure interframegap, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)INTERFRAMEGAP_OPTION; - enet_initpara.interframegap = para; - break; - default: - break; - } -} - -/*! - \brief initialize ENET peripheral with generally concerned parameters and the less cared - parameters - \param[in] mediamode: PHY mode and mac loopback configurations, only one parameter can be selected - which is shown as below, refer to enet_mediamode_enum - \arg ENET_AUTO_NEGOTIATION: PHY auto negotiation - \arg ENET_100M_FULLDUPLEX: 100Mbit/s, full-duplex - \arg ENET_100M_HALFDUPLEX: 100Mbit/s, half-duplex - \arg ENET_10M_FULLDUPLEX: 10Mbit/s, full-duplex - \arg ENET_10M_HALFDUPLEX: 10Mbit/s, half-duplex - \arg ENET_LOOPBACKMODE: MAC in loopback mode at the MII - \param[in] checksum: IP frame checksum offload function, only one parameter can be selected - which is shown as below, refer to enet_mediamode_enum - \arg ENET_NO_AUTOCHECKSUM: disable IP frame checksum function - \arg ENET_AUTOCHECKSUM_DROP_FAILFRAMES: enable IP frame checksum function - \arg ENET_AUTOCHECKSUM_ACCEPT_FAILFRAMES: enable IP frame checksum function, and the received frame - with only payload error but no other errors will not be dropped - \param[in] recept: frame filter function, only one parameter can be selected - which is shown as below, refer to enet_frmrecept_enum - \arg ENET_PROMISCUOUS_MODE: promiscuous mode enabled - \arg ENET_RECEIVEALL: all received frame are forwarded to application - \arg ENET_BROADCAST_FRAMES_PASS: the address filters pass all received broadcast frames - \arg ENET_BROADCAST_FRAMES_DROP: the address filters filter all incoming broadcast frames - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_init(enet_mediamode_enum mediamode, enet_chksumconf_enum checksum, enet_frmrecept_enum recept) -{ - uint32_t reg_value=0U, reg_temp = 0U, temp = 0U; - uint32_t media_temp = 0U; - uint32_t timeout = 0U; - uint16_t phy_value = 0U; - ErrStatus phy_state= ERROR, enet_state = ERROR; - - /* PHY interface configuration, configure SMI clock and reset PHY chip */ - if(ERROR == enet_phy_config()){ - _ENET_DELAY_(PHY_RESETDELAY); - if(ERROR == enet_phy_config()){ - return enet_state; - } - } - /* initialize ENET peripheral with generally concerned parameters */ - enet_default_init(); - - /* 1st, configure mediamode */ - media_temp = (uint32_t)mediamode; - /* if is PHY auto negotiation */ - if((uint32_t)ENET_AUTO_NEGOTIATION == media_temp){ - /* wait for PHY_LINKED_STATUS bit be set */ - do{ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BSR, &phy_value); - phy_value &= PHY_LINKED_STATUS; - timeout++; - }while((RESET == phy_value) && (timeout < PHY_READ_TO)); - /* return ERROR due to timeout */ - if(PHY_READ_TO == timeout){ - return enet_state; - } - /* reset timeout counter */ - timeout = 0U; - - /* enable auto-negotiation */ - phy_value = PHY_AUTONEGOTIATION; - phy_state = enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &phy_value); - if(!phy_state){ - /* return ERROR due to write timeout */ - return enet_state; - } - - /* wait for the PHY_AUTONEGO_COMPLETE bit be set */ - do{ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BSR, &phy_value); - phy_value &= PHY_AUTONEGO_COMPLETE; - timeout++; - }while((RESET == phy_value) && (timeout < (uint32_t)PHY_READ_TO)); - /* return ERROR due to timeout */ - if(PHY_READ_TO == timeout){ - return enet_state; - } - /* reset timeout counter */ - timeout = 0U; - - /* read the result of the auto-negotiation */ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_SR, &phy_value); - /* configure the duplex mode of MAC following the auto-negotiation result */ - if((uint16_t)RESET != (phy_value & PHY_DUPLEX_STATUS)){ - media_temp = ENET_MODE_FULLDUPLEX; - }else{ - media_temp = ENET_MODE_HALFDUPLEX; - } - /* configure the communication speed of MAC following the auto-negotiation result */ - if((uint16_t)RESET !=(phy_value & PHY_SPEED_STATUS)){ - media_temp |= ENET_SPEEDMODE_10M; - }else{ - media_temp |= ENET_SPEEDMODE_100M; - } - }else{ - phy_value = (uint16_t)((media_temp & ENET_MAC_CFG_DPM) >> 3); - phy_value |= (uint16_t)((media_temp & ENET_MAC_CFG_SPD) >> 1); - phy_state = enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &phy_value); - if(!phy_state){ - /* return ERROR due to write timeout */ - return enet_state; - } - /* PHY configuration need some time */ - _ENET_DELAY_(PHY_CONFIGDELAY); - } - /* after configuring the PHY, use mediamode to configure registers */ - reg_value = ENET_MAC_CFG; - /* configure ENET_MAC_CFG register */ - reg_value &= (~(ENET_MAC_CFG_SPD |ENET_MAC_CFG_DPM |ENET_MAC_CFG_LBM)); - reg_value |= media_temp; - ENET_MAC_CFG = reg_value; - - - /* 2st, configure checksum */ - if(RESET != ((uint32_t)checksum & ENET_CHECKSUMOFFLOAD_ENABLE)){ - ENET_MAC_CFG |= ENET_CHECKSUMOFFLOAD_ENABLE; - - reg_value = ENET_DMA_CTL; - /* configure ENET_DMA_CTL register */ - reg_value &= ~ENET_DMA_CTL_DTCERFD; - reg_value |= ((uint32_t)checksum & ENET_DMA_CTL_DTCERFD); - ENET_DMA_CTL = reg_value; - } - - /* 3rd, configure recept */ - ENET_MAC_FRMF |= (uint32_t)recept; - - /* 4th, configure different function options */ - /* configure forward_frame related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)FORWARD_OPTION)){ - reg_temp = enet_initpara.forward_frame; - - reg_value = ENET_MAC_CFG; - temp = reg_temp; - /* configure ENET_MAC_CFG register */ - reg_value &= (~ENET_MAC_CFG_APCD); - temp &= ENET_MAC_CFG_APCD; - reg_value |= temp; - ENET_MAC_CFG = reg_value; - - reg_value = ENET_DMA_CTL; - temp = reg_temp; - /* configure ENET_DMA_CTL register */ - reg_value &= (~(ENET_DMA_CTL_FERF |ENET_DMA_CTL_FUF)); - temp &= ((ENET_DMA_CTL_FERF | ENET_DMA_CTL_FUF) << 2); - reg_value |= (temp >> 2); - ENET_DMA_CTL = reg_value; - } - - /* configure dmabus_mode related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)DMABUS_OPTION)){ - temp = enet_initpara.dmabus_mode; - - reg_value = ENET_DMA_BCTL; - /* configure ENET_DMA_BCTL register */ - reg_value &= ~(ENET_DMA_BCTL_AA | ENET_DMA_BCTL_FB \ - |ENET_DMA_BCTL_FPBL); - reg_value |= temp; - ENET_DMA_BCTL = reg_value; - } - - /* configure dma_maxburst related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)DMA_MAXBURST_OPTION)){ - temp = enet_initpara.dma_maxburst; - - reg_value = ENET_DMA_BCTL; - /* configure ENET_DMA_BCTL register */ - reg_value &= ~(ENET_DMA_BCTL_RXDP| ENET_DMA_BCTL_PGBL | ENET_DMA_BCTL_UIP); - reg_value |= temp; - ENET_DMA_BCTL = reg_value; - } - - /* configure dma_arbitration related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)DMA_ARBITRATION_OPTION)){ - temp = enet_initpara.dma_arbitration; - - reg_value = ENET_DMA_BCTL; - /* configure ENET_DMA_BCTL register */ - reg_value &= ~(ENET_DMA_BCTL_RTPR | ENET_DMA_BCTL_DAB); - reg_value |= temp; - ENET_DMA_BCTL = reg_value; - } - - /* configure store_forward_mode related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)STORE_OPTION)){ - temp = enet_initpara.store_forward_mode; - - reg_value = ENET_DMA_CTL; - /* configure ENET_DMA_CTL register */ - reg_value &= ~(ENET_DMA_CTL_RSFD | ENET_DMA_CTL_TSFD| ENET_DMA_CTL_RTHC| ENET_DMA_CTL_TTHC); - reg_value |= temp; - ENET_DMA_CTL = reg_value; - } - - /* configure dma_function related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)DMA_OPTION)){ - reg_temp = enet_initpara.dma_function; - - reg_value = ENET_DMA_CTL; - /* configure ENET_DMA_CTL register */ - reg_value &= (~(ENET_DMA_CTL_DAFRF |ENET_DMA_CTL_OSF)); - reg_value |= reg_temp; - ENET_DMA_CTL = reg_value; - } - - /* configure vlan_config related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)VLAN_OPTION)){ - reg_temp = enet_initpara.vlan_config; - - reg_value = ENET_MAC_VLT; - /* configure ENET_MAC_VLT register */ - reg_value &= ~(ENET_MAC_VLT_VLTI | ENET_MAC_VLT_VLTC); - reg_value |= reg_temp; - ENET_MAC_VLT = reg_value; - } - - /* configure flow_control related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)FLOWCTL_OPTION)){ - reg_temp = enet_initpara.flow_control; - - reg_value = ENET_MAC_FCTL; - temp = reg_temp; - /* configure ENET_MAC_FCTL register */ - reg_value &= ~(ENET_MAC_FCTL_PTM |ENET_MAC_FCTL_DZQP |ENET_MAC_FCTL_PLTS \ - | ENET_MAC_FCTL_UPFDT |ENET_MAC_FCTL_RFCEN |ENET_MAC_FCTL_TFCEN); - temp &= (ENET_MAC_FCTL_PTM |ENET_MAC_FCTL_DZQP |ENET_MAC_FCTL_PLTS \ - | ENET_MAC_FCTL_UPFDT |ENET_MAC_FCTL_RFCEN |ENET_MAC_FCTL_TFCEN); - reg_value |= temp; - ENET_MAC_FCTL = reg_value; - - reg_value = ENET_MAC_FCTH; - temp = reg_temp; - /* configure ENET_MAC_FCTH register */ - reg_value &= ~(ENET_MAC_FCTH_RFA |ENET_MAC_FCTH_RFD); - temp &= ((ENET_MAC_FCTH_RFA | ENET_MAC_FCTH_RFD )<<8); - reg_value |= (temp >> 8); - ENET_MAC_FCTH = reg_value; - } - - /* configure hashtable_high related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)HASHH_OPTION)){ - ENET_MAC_HLH = enet_initpara.hashtable_high; - } - - /* configure hashtable_low related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)HASHL_OPTION)){ - ENET_MAC_HLL = enet_initpara.hashtable_low; - } - - /* configure framesfilter_mode related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)FILTER_OPTION)){ - reg_temp = enet_initpara.framesfilter_mode; - - reg_value = ENET_MAC_FRMF; - /* configure ENET_MAC_FRMF register */ - reg_value &= ~(ENET_MAC_FRMF_SAFLT | ENET_MAC_FRMF_SAIFLT | ENET_MAC_FRMF_DAIFLT \ - | ENET_MAC_FRMF_HMF | ENET_MAC_FRMF_HPFLT | ENET_MAC_FRMF_MFD \ - | ENET_MAC_FRMF_HUF | ENET_MAC_FRMF_PCFRM); - reg_value |= reg_temp; - ENET_MAC_FRMF = reg_value; - } - - /* configure halfduplex_param related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)HALFDUPLEX_OPTION)){ - reg_temp = enet_initpara.halfduplex_param; - - reg_value = ENET_MAC_CFG; - /* configure ENET_MAC_CFG register */ - reg_value &= ~(ENET_MAC_CFG_CSD | ENET_MAC_CFG_ROD | ENET_MAC_CFG_RTD \ - | ENET_MAC_CFG_BOL | ENET_MAC_CFG_DFC); - reg_value |= reg_temp; - ENET_MAC_CFG = reg_value; - } - - /* configure timer_config related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)TIMER_OPTION)){ - reg_temp = enet_initpara.timer_config; - - reg_value = ENET_MAC_CFG; - /* configure ENET_MAC_CFG register */ - reg_value &= ~(ENET_MAC_CFG_WDD | ENET_MAC_CFG_JBD); - reg_value |= reg_temp; - ENET_MAC_CFG = reg_value; - } - - /* configure interframegap related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)INTERFRAMEGAP_OPTION)){ - reg_temp = enet_initpara.interframegap; - - reg_value = ENET_MAC_CFG; - /* configure ENET_MAC_CFG register */ - reg_value &= ~ENET_MAC_CFG_IGBS; - reg_value |= reg_temp; - ENET_MAC_CFG = reg_value; - } - - enet_state = SUCCESS; - return enet_state; -} - -/*! - \brief reset all core internal registers located in CLK_TX and CLK_RX - \param[in] none - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_software_reset(void) -{ - uint32_t timeout = 0U; - ErrStatus enet_state = ERROR; - uint32_t dma_flag; - - /* reset all core internal registers located in CLK_TX and CLK_RX */ - ENET_DMA_BCTL |= ENET_DMA_BCTL_SWR; - - /* wait for reset operation complete */ - do{ - dma_flag = (ENET_DMA_BCTL & ENET_DMA_BCTL_SWR); - timeout++; - }while((RESET != dma_flag) && (ENET_DELAY_TO != timeout)); - - /* reset operation complete */ - if(RESET == (ENET_DMA_BCTL & ENET_DMA_BCTL_SWR)){ - enet_state = SUCCESS; - } - - return enet_state; -} - -/*! - \brief check receive frame valid and return frame size - \param[in] none - \param[out] none - \retval size of received frame: 0x0 - 0x3FFF -*/ -uint32_t enet_rxframe_size_get(void) -{ - uint32_t size = 0U; - uint32_t status; - - /* get rdes0 information of current RxDMA descriptor */ - status = dma_current_rxdesc->status; - - /* if the desciptor is owned by DMA */ - if((uint32_t)RESET != (status & ENET_RDES0_DAV)){ - return 0U; - } - - /* if has any error, or the frame uses two or more descriptors */ - if((((uint32_t)RESET) != (status & ENET_RDES0_ERRS)) || - (((uint32_t)RESET) == (status & ENET_RDES0_LDES)) || - (((uint32_t)RESET) == (status & ENET_RDES0_FDES))){ - /* drop current receive frame */ - enet_rxframe_drop(); - - return 1U; - } - - /* if is an ethernet-type frame, and IP frame payload error occurred */ - if((((uint32_t)RESET) != (status & ENET_RDES0_FRMT)) && - (((uint32_t)RESET) != (status & ENET_RDES0_PCERR))){ - /* drop current receive frame */ - enet_rxframe_drop(); - - return 1U; - } - - /* if CPU owns current descriptor, no error occured, the frame uses only one descriptor */ - if((((uint32_t)RESET) == (status & ENET_RDES0_DAV)) && - (((uint32_t)RESET) == (status & ENET_RDES0_ERRS)) && - (((uint32_t)RESET) != (status & ENET_RDES0_LDES)) && - (((uint32_t)RESET) != (status & ENET_RDES0_FDES))){ - /* get the size of the received data including CRC */ - size = GET_RDES0_FRML(status); - /* substract the CRC size */ - size = size - 4U; - }else{ - enet_unknow_err++; - enet_rxframe_drop(); - - return 1U; - } - - /* return packet size */ - return size; -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in chain mode - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[out] none - \retval none -*/ -void enet_descriptors_chain_init(enet_dmadirection_enum direction) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc, *desc_tab; - uint8_t *buf; - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* select chain mode */ - desc_status = ENET_TDES0_TCHM; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* select receive chained mode and set buffer1 size */ - desc_bufsize = ENET_RDES1_RCHM | (uint32_t)ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - } - dma_current_ptp_rxdesc = NULL; - dma_current_ptp_txdesc = NULL; - - /* configure each descriptor */ - for(num=0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* if is not the last descriptor */ - if(num < (count - 1U)){ - /* configure the next descriptor address */ - desc->buffer2_next_desc_addr = (uint32_t)(desc_tab + num + 1U); - }else{ - /* when it is the last descriptor, the next descriptor address - equals to first descriptor address in descriptor table */ - desc->buffer2_next_desc_addr = (uint32_t) desc_tab; - } - } -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in ring mode - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[out] none - \retval none -*/ -void enet_descriptors_ring_init(enet_dmadirection_enum direction) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc; - enet_descriptors_struct *desc_tab; - uint8_t *buf; - - /* configure descriptor skip length */ - ENET_DMA_BCTL &= ~ENET_DMA_BCTL_DPSL; - ENET_DMA_BCTL |= DMA_BCTL_DPSL(0); - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* set buffer1 size */ - desc_bufsize = ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - } - dma_current_ptp_rxdesc = NULL; - dma_current_ptp_txdesc = NULL; - - /* configure each descriptor */ - for(num=0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* when it is the last descriptor */ - if(num == (count - 1U)){ - if (ENET_DMA_TX == direction){ - /* configure transmit end of ring mode */ - desc->status |= ENET_TDES0_TERM; - }else{ - /* configure receive end of ring mode */ - desc->control_buffer_size |= ENET_RDES1_RERM; - } - } - } -} - -/*! - \brief handle current received frame data to application buffer - \param[in] bufsize: the size of buffer which is the parameter in function - \param[out] buffer: pointer to the received frame data - note -- if the input is NULL, user should copy data in application by himself - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_frame_receive(uint8_t *buffer, uint32_t bufsize) -{ - uint32_t offset = 0U, size = 0U; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_DAV)){ - return ERROR; - } - - - /* if buffer pointer is null, indicates that users has copied data in application */ - if(NULL != buffer){ - /* if no error occurs, and the frame uses only one descriptor */ - if((((uint32_t)RESET) == (dma_current_rxdesc->status & ENET_RDES0_ERRS)) && - (((uint32_t)RESET) != (dma_current_rxdesc->status & ENET_RDES0_LDES)) && - (((uint32_t)RESET) != (dma_current_rxdesc->status & ENET_RDES0_FDES))){ - /* get the frame length except CRC */ - size = GET_RDES0_FRML(dma_current_rxdesc->status); - size = size - 4U; - - /* to avoid situation that the frame size exceeds the buffer length */ - if(size > bufsize){ - return ERROR; - } - - /* copy data from Rx buffer to application buffer */ - for(offset = 0U; offsetbuffer1_addr) + offset)); - } - - }else{ - /* return ERROR */ - return ERROR; - } - } - /* enable reception, descriptor is owned by DMA */ - dma_current_rxdesc->status = ENET_RDES0_DAV; - - /* check Rx buffer unavailable flag status */ - if ((uint32_t)RESET != (ENET_DMA_STAT & ENET_DMA_STAT_RBU)){ - /* clear RBU flag */ - ENET_DMA_STAT = ENET_DMA_STAT_RBU; - /* resume DMA reception by writing to the RPEN register*/ - ENET_DMA_RPEN = 0U; - } - - /* update the current RxDMA descriptor pointer to the next decriptor in RxDMA decriptor table */ - /* chained mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RCHM)){ - dma_current_rxdesc = (enet_descriptors_struct*) (dma_current_rxdesc->buffer2_next_desc_addr); - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_rxdesc = (enet_descriptors_struct*) (ENET_DMA_RDTADDR); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_rxdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_rxdesc + ETH_DMARXDESC_SIZE + (GET_DMA_BCTL_DPSL(ENET_DMA_BCTL))); - } - } - - return SUCCESS; -} - -/*! - \brief handle application buffer data to transmit it - \param[in] buffer: pointer to the frame data to be transmitted, - note -- if the input is NULL, user should handle the data in application by himself - \param[in] length: the length of frame data to be transmitted - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_frame_transmit(uint8_t *buffer, uint32_t length) -{ - uint32_t offset = 0U; - uint32_t dma_tbu_flag, dma_tu_flag; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_DAV)){ - return ERROR; - } - - /* only frame length no more than ENET_MAX_FRAME_SIZE is allowed */ - if(length > ENET_MAX_FRAME_SIZE){ - return ERROR; - } - - /* if buffer pointer is null, indicates that users has handled data in application */ - if(NULL != buffer){ - /* copy frame data from application buffer to Tx buffer */ - for(offset = 0U; offset < length; offset++){ - (*(__IO uint8_t *) (uint32_t)((dma_current_txdesc->buffer1_addr) + offset)) = (*(buffer + offset)); - } - } - - /* set the frame length */ - dma_current_txdesc->control_buffer_size = length; - /* set the segment of frame, frame is transmitted in one descriptor */ - dma_current_txdesc->status |= ENET_TDES0_LSG | ENET_TDES0_FSG; - /* enable the DMA transmission */ - dma_current_txdesc->status |= ENET_TDES0_DAV; - - /* check Tx buffer unavailable flag status */ - dma_tbu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TBU); - dma_tu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TU); - - if ((RESET != dma_tbu_flag) || (RESET != dma_tu_flag)){ - /* clear TBU and TU flag */ - ENET_DMA_STAT = (dma_tbu_flag | dma_tu_flag); - /* resume DMA transmission by writing to the TPEN register*/ - ENET_DMA_TPEN = 0U; - } - - /* update the current TxDMA descriptor pointer to the next decriptor in TxDMA decriptor table*/ - /* chained mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TCHM)){ - dma_current_txdesc = (enet_descriptors_struct*) (dma_current_txdesc->buffer2_next_desc_addr); - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_txdesc = (enet_descriptors_struct*) (ENET_DMA_TDTADDR); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_txdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_txdesc + ETH_DMATXDESC_SIZE + (GET_DMA_BCTL_DPSL(ENET_DMA_BCTL))); - } - } - - return SUCCESS; -} - -/*! - \brief configure the transmit IP frame checksum offload calculation and insertion - \param[in] desc: the descriptor pointer which users want to configure - \param[in] checksum: IP frame checksum configuration - only one parameter can be selected which is shown as below - \arg ENET_CHECKSUM_DISABLE: checksum insertion disabled - \arg ENET_CHECKSUM_IPV4HEADER: only IP header checksum calculation and insertion are enabled - \arg ENET_CHECKSUM_TCPUDPICMP_SEGMENT: TCP/UDP/ICMP checksum insertion calculated but pseudo-header - \arg ENET_CHECKSUM_TCPUDPICMP_FULL: TCP/UDP/ICMP checksum insertion fully calculated - \param[out] none - \retval none -*/ -void enet_transmit_checksum_config(enet_descriptors_struct *desc, uint32_t checksum) -{ - desc->status &= ~ENET_TDES0_CM; - desc->status |= checksum; -} - -/*! - \brief ENET Tx and Rx function enable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_enable(void) -{ - enet_tx_enable(); - enet_rx_enable(); -} - -/*! - \brief ENET Tx and Rx function disable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_disable(void) -{ - enet_tx_disable(); - enet_rx_disable(); -} - -/*! - \brief configure MAC address - \param[in] mac_addr: select which MAC address will be set, - only one parameter can be selected which is shown as below - \arg ENET_MAC_ADDRESS0: set MAC address 0 filter - \arg ENET_MAC_ADDRESS1: set MAC address 1 filter - \arg ENET_MAC_ADDRESS2: set MAC address 2 filter - \arg ENET_MAC_ADDRESS3: set MAC address 3 filter - \param[in] paddr: the buffer pointer which stores the MAC address - (little-ending store, such as MAC address is aa:bb:cc:dd:ee:22, the buffer is {22, ee, dd, cc, bb, aa}) - \param[out] none - \retval none -*/ -void enet_mac_address_set(enet_macaddress_enum mac_addr, uint8_t paddr[]) -{ - REG32(ENET_ADDRH_BASE + (uint32_t)mac_addr) = ENET_SET_MACADDRH(paddr); - REG32(ENET_ADDRL_BASE + (uint32_t)mac_addr) = ENET_SET_MACADDRL(paddr); -} - -/*! - \brief get MAC address - \param[in] mac_addr: select which MAC address will be get, - only one parameter can be selected which is shown as below - \arg ENET_MAC_ADDRESS0: get MAC address 0 filter - \arg ENET_MAC_ADDRESS1: get MAC address 1 filter - \arg ENET_MAC_ADDRESS2: get MAC address 2 filter - \arg ENET_MAC_ADDRESS3: get MAC address 3 filter - \param[out] paddr: the buffer pointer which is stored the MAC address - (little-ending store, such as mac address is aa:bb:cc:dd:ee:22, the buffer is {22, ee, dd, cc, bb, aa}) - \retval none -*/ -void enet_mac_address_get(enet_macaddress_enum mac_addr, uint8_t paddr[]) -{ - paddr[0] = ENET_GET_MACADDR(mac_addr, 0U); - paddr[1] = ENET_GET_MACADDR(mac_addr, 1U); - paddr[2] = ENET_GET_MACADDR(mac_addr, 2U); - paddr[3] = ENET_GET_MACADDR(mac_addr, 3U); - paddr[4] = ENET_GET_MACADDR(mac_addr, 4U); - paddr[5] = ENET_GET_MACADDR(mac_addr, 5U); -} - -/*! - \brief get the ENET MAC/MSC/PTP/DMA status flag - \param[in] enet_flag: ENET status flag, refer to enet_flag_enum, - only one parameter can be selected which is shown as below - \arg ENET_MAC_FLAG_MPKR: magic packet received flag - \arg ENET_MAC_FLAG_WUFR: wakeup frame received flag - \arg ENET_MAC_FLAG_FLOWCONTROL: flow control status flag - \arg ENET_MAC_FLAG_WUM: WUM status flag - \arg ENET_MAC_FLAG_MSC: MSC status flag - \arg ENET_MAC_FLAG_MSCR: MSC receive status flag - \arg ENET_MAC_FLAG_MSCT: MSC transmit status flag - \arg ENET_MAC_FLAG_TMST: time stamp trigger status flag - \arg ENET_PTP_FLAG_TSSCO: timestamp second counter overflow flag - \arg ENET_PTP_FLAG_TTM: target time match flag - \arg ENET_MSC_FLAG_RFCE: received frames CRC error flag - \arg ENET_MSC_FLAG_RFAE: received frames alignment error flag - \arg ENET_MSC_FLAG_RGUF: received good unicast frames flag - \arg ENET_MSC_FLAG_TGFSC: transmitted good frames single collision flag - \arg ENET_MSC_FLAG_TGFMSC: transmitted good frames more single collision flag - \arg ENET_MSC_FLAG_TGF: transmitted good frames flag - \arg ENET_DMA_FLAG_TS: transmit status flag - \arg ENET_DMA_FLAG_TPS: transmit process stopped status flag - \arg ENET_DMA_FLAG_TBU: transmit buffer unavailable status flag - \arg ENET_DMA_FLAG_TJT: transmit jabber timeout status flag - \arg ENET_DMA_FLAG_RO: receive overflow status flag - \arg ENET_DMA_FLAG_TU: transmit underflow status flag - \arg ENET_DMA_FLAG_RS: receive status flag - \arg ENET_DMA_FLAG_RBU: receive buffer unavailable status flag - \arg ENET_DMA_FLAG_RPS: receive process stopped status flag - \arg ENET_DMA_FLAG_RWT: receive watchdog timeout status flag - \arg ENET_DMA_FLAG_ET: early transmit status flag - \arg ENET_DMA_FLAG_FBE: fatal bus error status flag - \arg ENET_DMA_FLAG_ER: early receive status flag - \arg ENET_DMA_FLAG_AI: abnormal interrupt summary flag - \arg ENET_DMA_FLAG_NI: normal interrupt summary flag - \arg ENET_DMA_FLAG_EB_DMA_ERROR: DMA error flag - \arg ENET_DMA_FLAG_EB_TRANSFER_ERROR: transfer error flag - \arg ENET_DMA_FLAG_EB_ACCESS_ERROR: access error flag - \arg ENET_DMA_FLAG_MSC: MSC status flag - \arg ENET_DMA_FLAG_WUM: WUM status flag - \arg ENET_DMA_FLAG_TST: timestamp trigger status flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus enet_flag_get(enet_flag_enum enet_flag) -{ - if(RESET != (ENET_REG_VAL(enet_flag) & BIT(ENET_BIT_POS(enet_flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear the ENET DMA status flag - \param[in] enet_flag: ENET DMA flag clear, refer to enet_flag_clear_enum - only one parameter can be selected which is shown as below - \arg ENET_DMA_FLAG_TS_CLR: transmit status flag clear - \arg ENET_DMA_FLAG_TPS_CLR: transmit process stopped status flag clear - \arg ENET_DMA_FLAG_TBU_CLR: transmit buffer unavailable status flag clear - \arg ENET_DMA_FLAG_TJT_CLR: transmit jabber timeout status flag clear - \arg ENET_DMA_FLAG_RO_CLR: receive overflow status flag clear - \arg ENET_DMA_FLAG_TU_CLR: transmit underflow status flag clear - \arg ENET_DMA_FLAG_RS_CLR: receive status flag clear - \arg ENET_DMA_FLAG_RBU_CLR: receive buffer unavailable status flag clear - \arg ENET_DMA_FLAG_RPS_CLR: receive process stopped status flag clear - \arg ENET_DMA_FLAG_RWT_CLR: receive watchdog timeout status flag clear - \arg ENET_DMA_FLAG_ET_CLR: early transmit status flag clear - \arg ENET_DMA_FLAG_FBE_CLR: fatal bus error status flag clear - \arg ENET_DMA_FLAG_ER_CLR: early receive status flag clear - \arg ENET_DMA_FLAG_AI_CLR: abnormal interrupt summary flag clear - \arg ENET_DMA_FLAG_NI_CLR: normal interrupt summary flag clear - \param[out] none - \retval none -*/ -void enet_flag_clear(enet_flag_clear_enum enet_flag) -{ - /* write 1 to the corresponding bit in ENET_DMA_STAT, to clear it */ - ENET_REG_VAL(enet_flag) = BIT(ENET_BIT_POS(enet_flag)); -} - -/*! - \brief enable ENET MAC/MSC/DMA interrupt - \param[in] enet_int: ENET interrupt, - only one parameter can be selected which is shown as below - \arg ENET_MAC_INT_WUMIM: WUM interrupt mask - \arg ENET_MAC_INT_TMSTIM: timestamp trigger interrupt mask - \arg ENET_MSC_INT_RFCEIM: received frame CRC error interrupt mask - \arg ENET_MSC_INT_RFAEIM: received frames alignment error interrupt mask - \arg ENET_MSC_INT_RGUFIM: received good unicast frames interrupt mask - \arg ENET_MSC_INT_TGFSCIM: transmitted good frames single collision interrupt mask - \arg ENET_MSC_INT_TGFMSCIM: transmitted good frames more single collision interrupt mask - \arg ENET_MSC_INT_TGFIM: transmitted good frames interrupt mask - \arg ENET_DMA_INT_TIE: transmit interrupt enable - \arg ENET_DMA_INT_TPSIE: transmit process stopped interrupt enable - \arg ENET_DMA_INT_TBUIE: transmit buffer unavailable interrupt enable - \arg ENET_DMA_INT_TJTIE: transmit jabber timeout interrupt enable - \arg ENET_DMA_INT_ROIE: receive overflow interrupt enable - \arg ENET_DMA_INT_TUIE: transmit underflow interrupt enable - \arg ENET_DMA_INT_RIE: receive interrupt enable - \arg ENET_DMA_INT_RBUIE: receive buffer unavailable interrupt enable - \arg ENET_DMA_INT_RPSIE: receive process stopped interrupt enable - \arg ENET_DMA_INT_RWTIE: receive watchdog timeout interrupt enable - \arg ENET_DMA_INT_ETIE: early transmit interrupt enable - \arg ENET_DMA_INT_FBEIE: fatal bus error interrupt enable - \arg ENET_DMA_INT_ERIE: early receive interrupt enable - \arg ENET_DMA_INT_AIE: abnormal interrupt summary enable - \arg ENET_DMA_INT_NIE: normal interrupt summary enable - \param[out] none - \retval none -*/ -void enet_interrupt_enable(enet_int_enum enet_int) -{ - if(DMA_INTEN_REG_OFFSET == ((uint32_t)enet_int >> 6)){ - /* ENET_DMA_INTEN register interrupt */ - ENET_REG_VAL(enet_int) |= BIT(ENET_BIT_POS(enet_int)); - }else{ - /* other INTMSK register interrupt */ - ENET_REG_VAL(enet_int) &= ~BIT(ENET_BIT_POS(enet_int)); - } -} - -/*! - \brief disable ENET MAC/MSC/DMA interrupt - \param[in] enet_int: ENET interrupt, - only one parameter can be selected which is shown as below - \arg ENET_MAC_INT_WUMIM: WUM interrupt mask - \arg ENET_MAC_INT_TMSTIM: timestamp trigger interrupt mask - \arg ENET_MSC_INT_RFCEIM: received frame CRC error interrupt mask - \arg ENET_MSC_INT_RFAEIM: received frames alignment error interrupt mask - \arg ENET_MSC_INT_RGUFIM: received good unicast frames interrupt mask - \arg ENET_MSC_INT_TGFSCIM: transmitted good frames single collision interrupt mask - \arg ENET_MSC_INT_TGFMSCIM: transmitted good frames more single collision interrupt mask - \arg ENET_MSC_INT_TGFIM: transmitted good frames interrupt mask - \arg ENET_DMA_INT_TIE: transmit interrupt enable - \arg ENET_DMA_INT_TPSIE: transmit process stopped interrupt enable - \arg ENET_DMA_INT_TBUIE: transmit buffer unavailable interrupt enable - \arg ENET_DMA_INT_TJTIE: transmit jabber timeout interrupt enable - \arg ENET_DMA_INT_ROIE: receive overflow interrupt enable - \arg ENET_DMA_INT_TUIE: transmit underflow interrupt enable - \arg ENET_DMA_INT_RIE: receive interrupt enable - \arg ENET_DMA_INT_RBUIE: receive buffer unavailable interrupt enable - \arg ENET_DMA_INT_RPSIE: receive process stopped interrupt enable - \arg ENET_DMA_INT_RWTIE: receive watchdog timeout interrupt enable - \arg ENET_DMA_INT_ETIE: early transmit interrupt enable - \arg ENET_DMA_INT_FBEIE: fatal bus error interrupt enable - \arg ENET_DMA_INT_ERIE: early receive interrupt enable - \arg ENET_DMA_INT_AIE: abnormal interrupt summary enable - \arg ENET_DMA_INT_NIE: normal interrupt summary enable - \param[out] none - \retval none -*/ -void enet_interrupt_disable(enet_int_enum enet_int) -{ - if(DMA_INTEN_REG_OFFSET == ((uint32_t)enet_int >> 6)){ - /* ENET_DMA_INTEN register interrupt */ - ENET_REG_VAL(enet_int) &= ~BIT(ENET_BIT_POS(enet_int)); - }else{ - /* other INTMSK register interrupt */ - ENET_REG_VAL(enet_int) |= BIT(ENET_BIT_POS(enet_int)); - } -} - -/*! - \brief get ENET MAC/MSC/DMA interrupt flag - \param[in] int_flag: ENET interrupt flag, - only one parameter can be selected which is shown as below - \arg ENET_MAC_INT_FLAG_WUM: WUM status flag - \arg ENET_MAC_INT_FLAG_MSC: MSC status flag - \arg ENET_MAC_INT_FLAG_MSCR: MSC receive status flag - \arg ENET_MAC_INT_FLAG_MSCT: MSC transmit status flag - \arg ENET_MAC_INT_FLAG_TMST: time stamp trigger status flag - \arg ENET_MSC_INT_FLAG_RFCE: received frames CRC error flag - \arg ENET_MSC_INT_FLAG_RFAE: received frames alignment error flag - \arg ENET_MSC_INT_FLAG_RGUF: received good unicast frames flag - \arg ENET_MSC_INT_FLAG_TGFSC: transmitted good frames single collision flag - \arg ENET_MSC_INT_FLAG_TGFMSC: transmitted good frames more single collision flag - \arg ENET_MSC_INT_FLAG_TGF: transmitted good frames flag - \arg ENET_DMA_INT_FLAG_TS: transmit status flag - \arg ENET_DMA_INT_FLAG_TPS: transmit process stopped status flag - \arg ENET_DMA_INT_FLAG_TBU: transmit buffer unavailable status flag - \arg ENET_DMA_INT_FLAG_TJT: transmit jabber timeout status flag - \arg ENET_DMA_INT_FLAG_RO: receive overflow status flag - \arg ENET_DMA_INT_FLAG_TU: transmit underflow status flag - \arg ENET_DMA_INT_FLAG_RS: receive status flag - \arg ENET_DMA_INT_FLAG_RBU: receive buffer unavailable status flag - \arg ENET_DMA_INT_FLAG_RPS: receive process stopped status flag - \arg ENET_DMA_INT_FLAG_RWT: receive watchdog timeout status flag - \arg ENET_DMA_INT_FLAG_ET: early transmit status flag - \arg ENET_DMA_INT_FLAG_FBE: fatal bus error status flag - \arg ENET_DMA_INT_FLAG_ER: early receive status flag - \arg ENET_DMA_INT_FLAG_AI: abnormal interrupt summary flag - \arg ENET_DMA_INT_FLAG_NI: normal interrupt summary flag - \arg ENET_DMA_INT_FLAG_MSC: MSC status flag - \arg ENET_DMA_INT_FLAG_WUM: WUM status flag - \arg ENET_DMA_INT_FLAG_TST: timestamp trigger status flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus enet_interrupt_flag_get(enet_int_flag_enum int_flag) -{ - if(RESET != (ENET_REG_VAL(int_flag) & BIT(ENET_BIT_POS(int_flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear ENET DMA interrupt flag - \param[in] int_flag_clear: clear ENET interrupt flag, - only one parameter can be selected which is shown as below - \arg ENET_DMA_INT_FLAG_TS_CLR: transmit status flag - \arg ENET_DMA_INT_FLAG_TPS_CLR: transmit process stopped status flag - \arg ENET_DMA_INT_FLAG_TBU_CLR: transmit buffer unavailable status flag - \arg ENET_DMA_INT_FLAG_TJT_CLR: transmit jabber timeout status flag - \arg ENET_DMA_INT_FLAG_RO_CLR: receive overflow status flag - \arg ENET_DMA_INT_FLAG_TU_CLR: transmit underflow status flag - \arg ENET_DMA_INT_FLAG_RS_CLR: receive status flag - \arg ENET_DMA_INT_FLAG_RBU_CLR: receive buffer unavailable status flag - \arg ENET_DMA_INT_FLAG_RPS_CLR: receive process stopped status flag - \arg ENET_DMA_INT_FLAG_RWT_CLR: receive watchdog timeout status flag - \arg ENET_DMA_INT_FLAG_ET_CLR: early transmit status flag - \arg ENET_DMA_INT_FLAG_FBE_CLR: fatal bus error status flag - \arg ENET_DMA_INT_FLAG_ER_CLR: early receive status flag - \arg ENET_DMA_INT_FLAG_AI_CLR: abnormal interrupt summary flag - \arg ENET_DMA_INT_FLAG_NI_CLR: normal interrupt summary flag - \param[out] none - \retval none -*/ -void enet_interrupt_flag_clear(enet_int_flag_clear_enum int_flag_clear) -{ - /* write 1 to the corresponding bit in ENET_DMA_STAT, to clear it */ - ENET_REG_VAL(int_flag_clear) = BIT(ENET_BIT_POS(int_flag_clear)); -} - -/*! - \brief ENET Tx function enable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_tx_enable(void) -{ - ENET_MAC_CFG |= ENET_MAC_CFG_TEN; - enet_txfifo_flush(); - ENET_DMA_CTL |= ENET_DMA_CTL_STE; -} - -/*! - \brief ENET Tx function disable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_tx_disable(void) -{ - ENET_DMA_CTL &= ~ENET_DMA_CTL_STE; - enet_txfifo_flush(); - ENET_MAC_CFG &= ~ENET_MAC_CFG_TEN; -} - -/*! - \brief ENET Rx function enable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_rx_enable(void) -{ - ENET_MAC_CFG |= ENET_MAC_CFG_REN; - ENET_DMA_CTL |= ENET_DMA_CTL_SRE; -} - -/*! - \brief ENET Rx function disable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_rx_disable(void) -{ - ENET_DMA_CTL &= ~ENET_DMA_CTL_SRE; - ENET_MAC_CFG &= ~ENET_MAC_CFG_REN; -} - -/*! - \brief put registers value into the application buffer - \param[in] type: register type which will be get, refer to enet_registers_type_enum, - only one parameter can be selected which is shown as below - \arg ALL_MAC_REG: get the registers within the offset scope between ENET_MAC_CFG and ENET_MAC_FCTH - \arg ALL_MSC_REG: get the registers within the offset scope between ENET_MSC_CTL and ENET_MSC_RGUFCNT - \arg ALL_PTP_REG: get the registers within the offset scope between ENET_PTP_TSCTL and ENET_PTP_PPSCTL - \arg ALL_DMA_REG: get the registers within the offset scope between ENET_DMA_BCTL and ENET_DMA_CRBADDR - \param[in] num: the number of registers that the user want to get - \param[out] preg: the application buffer pointer for storing the register value - \retval none -*/ -void enet_registers_get(enet_registers_type_enum type, uint32_t *preg, uint32_t num) -{ - uint32_t offset = 0U, max = 0U, limit = 0U; - - offset = (uint32_t)type; - max = (uint32_t)type + num; - limit = sizeof(enet_reg_tab)/sizeof(uint16_t); - - /* prevent element in this array is out of range */ - if(max > limit){ - max = limit; - } - - for(; offset < max; offset++){ - /* get value of the corresponding register */ - *preg = REG32((ENET) + enet_reg_tab[offset]); - preg++; - } -} - -/*! - \brief enable the MAC address filter - \param[in] mac_addr: select which MAC address will be enable - \arg ENET_MAC_ADDRESS1: enable MAC address 1 filter - \arg ENET_MAC_ADDRESS2: enable MAC address 2 filter - \arg ENET_MAC_ADDRESS3: enable MAC address 3 filter - \param[out] none - \retval none -*/ -void enet_address_filter_enable(enet_macaddress_enum mac_addr) -{ - REG32(ENET_ADDRH_BASE + mac_addr) |= ENET_MAC_ADDR1H_AFE; -} - -/*! - \brief disable the MAC address filter - \param[in] mac_addr: select which MAC address will be disable, - only one parameter can be selected which is shown as below - \arg ENET_MAC_ADDRESS1: disable MAC address 1 filter - \arg ENET_MAC_ADDRESS2: disable MAC address 2 filter - \arg ENET_MAC_ADDRESS3: disable MAC address 3 filter - \param[out] none - \retval none -*/ -void enet_address_filter_disable(enet_macaddress_enum mac_addr) -{ - REG32(ENET_ADDRH_BASE + mac_addr) &= ~ENET_MAC_ADDR1H_AFE; -} - -/*! - \brief configure the MAC address filter - \param[in] mac_addr: select which MAC address will be configured, - only one parameter can be selected which is shown as below - \arg ENET_MAC_ADDRESS1: configure MAC address 1 filter - \arg ENET_MAC_ADDRESS2: configure MAC address 2 filter - \arg ENET_MAC_ADDRESS3: configure MAC address 3 filter - \param[in] addr_mask: select which MAC address bytes will be mask, - one or more parameters can be selected which are shown as below - \arg ENET_ADDRESS_MASK_BYTE0: mask ENET_MAC_ADDR1L[7:0] bits - \arg ENET_ADDRESS_MASK_BYTE1: mask ENET_MAC_ADDR1L[15:8] bits - \arg ENET_ADDRESS_MASK_BYTE2: mask ENET_MAC_ADDR1L[23:16] bits - \arg ENET_ADDRESS_MASK_BYTE3: mask ENET_MAC_ADDR1L [31:24] bits - \arg ENET_ADDRESS_MASK_BYTE4: mask ENET_MAC_ADDR1H [7:0] bits - \arg ENET_ADDRESS_MASK_BYTE5: mask ENET_MAC_ADDR1H [15:8] bits - \param[in] filter_type: select which MAC address filter type will be selected, - only one parameter can be selected which is shown as below - \arg ENET_ADDRESS_FILTER_SA: The MAC address is used to compared with the SA field of the received frame - \arg ENET_ADDRESS_FILTER_DA: The MAC address is used to compared with the DA field of the received frame - \param[out] none - \retval none -*/ -void enet_address_filter_config(enet_macaddress_enum mac_addr, uint32_t addr_mask, uint32_t filter_type) -{ - uint32_t reg; - - /* get the address filter register value which is to be configured */ - reg = REG32(ENET_ADDRH_BASE + mac_addr); - - /* clear and configure the address filter register */ - reg &= ~(ENET_MAC_ADDR1H_MB | ENET_MAC_ADDR1H_SAF); - reg |= (addr_mask | filter_type); - REG32(ENET_ADDRH_BASE + mac_addr) = reg; -} - -/*! - \brief PHY interface configuration (configure SMI clock and reset PHY chip) - \param[in] none - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_phy_config(void) -{ - uint32_t ahbclk; - uint32_t reg; - uint16_t phy_value; - ErrStatus enet_state = ERROR; - - /* clear the previous MDC clock */ - reg = ENET_MAC_PHY_CTL; - reg &= ~ENET_MAC_PHY_CTL_CLR; - - /* get the HCLK frequency */ - ahbclk = rcu_clock_freq_get(CK_AHB); - - /* configure MDC clock according to HCLK frequency range */ - if(ENET_RANGE(ahbclk, 20000000U, 35000000U)){ - reg |= ENET_MDC_HCLK_DIV16; - }else if(ENET_RANGE(ahbclk, 35000000U, 60000000U)){ - reg |= ENET_MDC_HCLK_DIV26; - }else if(ENET_RANGE(ahbclk, 60000000U, 90000000U)){ - reg |= ENET_MDC_HCLK_DIV42; - }else if((ENET_RANGE(ahbclk, 90000000U, 108000000U))||(108000000U == ahbclk)){ - reg |= ENET_MDC_HCLK_DIV62; - }else{ - return enet_state; - } - ENET_MAC_PHY_CTL = reg; - - /* reset PHY */ - phy_value = PHY_RESET; - if(ERROR == (enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &phy_value))){ - return enet_state; - } - /* PHY reset need some time */ - _ENET_DELAY_(ENET_DELAY_TO); - - /* check whether PHY reset is complete */ - if(ERROR == (enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BCR, &phy_value))){ - return enet_state; - } - - /* PHY reset complete */ - if(RESET == (phy_value & PHY_RESET)){ - enet_state = SUCCESS; - } - - return enet_state; -} - -/*! - \brief write to / read from a PHY register - \param[in] direction: only one parameter can be selected which is shown as below - \arg ENET_PHY_WRITE: write data to phy register - \arg ENET_PHY_READ: read data from phy register - \param[in] phy_address: 0x0 - 0x1F - \param[in] phy_reg: 0x0 - 0x1F - \param[in] pvalue: the value will be written to the PHY register in ENET_PHY_WRITE direction - \param[out] pvalue: the value will be read from the PHY register in ENET_PHY_READ direction - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_phy_write_read(enet_phydirection_enum direction, uint16_t phy_address, uint16_t phy_reg, uint16_t *pvalue) -{ - uint32_t reg, phy_flag; - uint32_t timeout = 0U; - ErrStatus enet_state = ERROR; - - /* configure ENET_MAC_PHY_CTL with write/read operation */ - reg = ENET_MAC_PHY_CTL; - reg &= ~(ENET_MAC_PHY_CTL_PB | ENET_MAC_PHY_CTL_PW | ENET_MAC_PHY_CTL_PR | ENET_MAC_PHY_CTL_PA); - reg |= (direction | MAC_PHY_CTL_PR(phy_reg) | MAC_PHY_CTL_PA(phy_address) | ENET_MAC_PHY_CTL_PB); - - /* if do the write operation, write value to the register */ - if(ENET_PHY_WRITE == direction){ - ENET_MAC_PHY_DATA = *pvalue; - } - - /* do PHY write/read operation, and wait the operation complete */ - ENET_MAC_PHY_CTL = reg; - do{ - phy_flag = (ENET_MAC_PHY_CTL & ENET_MAC_PHY_CTL_PB); - timeout++; - } - while((RESET != phy_flag) && (ENET_DELAY_TO != timeout)); - - /* write/read operation complete */ - if(RESET == (ENET_MAC_PHY_CTL & ENET_MAC_PHY_CTL_PB)){ - enet_state = SUCCESS; - } - - /* if do the read operation, get value from the register */ - if(ENET_PHY_READ == direction){ - *pvalue = (uint16_t)ENET_MAC_PHY_DATA; - } - - return enet_state; -} - -/*! - \brief enable the loopback function of PHY chip - \param[in] none - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_phyloopback_enable(void) -{ - uint16_t temp_phy = 0U; - ErrStatus phy_state = ERROR; - - /* get the PHY configuration to update it */ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BCR, &temp_phy); - - /* enable the PHY loopback mode */ - temp_phy |= PHY_LOOPBACK; - - /* update the PHY control register with the new configuration */ - phy_state = enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &temp_phy); - - return phy_state; -} - -/*! - \brief disable the loopback function of PHY chip - \param[in] none - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_phyloopback_disable(void) -{ - uint16_t temp_phy = 0U; - ErrStatus phy_state = ERROR; - - /* get the PHY configuration to update it */ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BCR, &temp_phy); - - /* disable the PHY loopback mode */ - temp_phy &= (uint16_t)~PHY_LOOPBACK; - - /* update the PHY control register with the new configuration */ - phy_state = enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &temp_phy); - - return phy_state; -} - -/*! - \brief enable ENET forward feature - \param[in] feature: the feature of ENET forward mode, - one or more parameters can be selected which are shown as below - \arg ENET_AUTO_PADCRC_DROP: the function of the MAC strips the Pad/FCS field on received frames - \arg ENET_FORWARD_ERRFRAMES: the function that all frame received with error except runt error are forwarded to memory - \arg ENET_FORWARD_UNDERSZ_GOODFRAMES: the function that forwarding undersized good frames - \param[out] none - \retval none -*/ -void enet_forward_feature_enable(uint32_t feature) -{ - uint32_t mask; - - mask = (feature & (~(ENET_FORWARD_ERRFRAMES | ENET_FORWARD_UNDERSZ_GOODFRAMES))); - ENET_MAC_CFG |= mask; - - mask = (feature & (~(ENET_AUTO_PADCRC_DROP))); - ENET_DMA_CTL |= (mask >> 2); -} - -/*! - \brief disable ENET forward feature - \param[in] feature: the feature of ENET forward mode, - one or more parameters can be selected which are shown as below - \arg ENET_AUTO_PADCRC_DROP: the function of the MAC strips the Pad/FCS field on received frames - \arg ENET_FORWARD_ERRFRAMES: the function that all frame received with error except runt error are forwarded to memory - \arg ENET_FORWARD_UNDERSZ_GOODFRAMES: the function that forwarding undersized good frames - \param[out] none - \retval none -*/ -void enet_forward_feature_disable(uint32_t feature) -{ - uint32_t mask; - - mask = (feature & (~(ENET_FORWARD_ERRFRAMES | ENET_FORWARD_UNDERSZ_GOODFRAMES))); - ENET_MAC_CFG &= ~mask; - - mask = (feature & (~(ENET_AUTO_PADCRC_DROP))); - ENET_DMA_CTL &= ~(mask >> 2); -} - -/*! - \brief enable ENET filter feature - \param[in] feature: the feature of ENET filter mode, - one or more parameters can be selected which are shown as below - \arg ENET_SRC_FILTER: filter source address function - \arg ENET_SRC_FILTER_INVERSE: inverse source address filtering result function - \arg ENET_DEST_FILTER_INVERSE: inverse DA filtering result function - \arg ENET_MULTICAST_FILTER_PASS: pass all multicast frames function - \arg ENET_MULTICAST_FILTER_HASH_MODE: HASH multicast filter function - \arg ENET_UNICAST_FILTER_HASH_MODE: HASH unicast filter function - \arg ENET_FILTER_MODE_EITHER: HASH or perfect filter function - \param[out] none - \retval none -*/ -void enet_filter_feature_enable(uint32_t feature) -{ - ENET_MAC_FRMF |= feature; -} - -/*! - \brief disable ENET filter feature - \param[in] feature: the feature of ENET filter mode, - one or more parameters can be selected which are shown as below - \arg ENET_SRC_FILTER: filter source address function - \arg ENET_SRC_FILTER_INVERSE: inverse source address filtering result function - \arg ENET_DEST_FILTER_INVERSE: inverse DA filtering result function - \arg ENET_MULTICAST_FILTER_PASS: pass all multicast frames function - \arg ENET_MULTICAST_FILTER_HASH_MODE: HASH multicast filter function - \arg ENET_UNICAST_FILTER_HASH_MODE: HASH unicast filter function - \arg ENET_FILTER_MODE_EITHER: HASH or perfect filter function - \param[out] none - \retval none -*/ -void enet_filter_feature_disable(uint32_t feature) -{ - ENET_MAC_FRMF &= ~feature; -} - -/*! - \brief generate the pause frame, ENET will send pause frame after enable transmit flow control - this function only use in full-dulex mode - \param[in] none - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_pauseframe_generate(void) -{ - ErrStatus enet_state =ERROR; - uint32_t temp = 0U; - - /* in full-duplex mode, must make sure this bit is 0 before writing register */ - temp = ENET_MAC_FCTL & ENET_MAC_FCTL_FLCBBKPA; - if(RESET == temp){ - ENET_MAC_FCTL |= ENET_MAC_FCTL_FLCBBKPA; - enet_state = SUCCESS; - } - return enet_state; -} - -/*! - \brief configure the pause frame detect type - \param[in] detect: pause frame detect type, - only one parameter can be selected which is shown as below - \arg ENET_MAC0_AND_UNIQUE_ADDRESS_PAUSEDETECT: besides the unique multicast address, MAC can also - use the MAC0 address to detecting pause frame - \arg ENET_UNIQUE_PAUSEDETECT: only the unique multicast address for pause frame which is specified - in IEEE802.3 can be detected - \param[out] none - \retval none -*/ -void enet_pauseframe_detect_config(uint32_t detect) -{ - ENET_MAC_FCTL &= ~ENET_MAC_FCTL_UPFDT; - ENET_MAC_FCTL |= detect; -} - -/*! - \brief configure the pause frame parameters - \param[in] pausetime: pause time in transmit pause control frame - \param[in] pause_threshold: the threshold of the pause timer for retransmitting frames automatically, - this value must make sure to be less than configured pause time, only one parameter can be - selected which is shown as below - \arg ENET_PAUSETIME_MINUS4: pause time minus 4 slot times - \arg ENET_PAUSETIME_MINUS28: pause time minus 28 slot times - \arg ENET_PAUSETIME_MINUS144: pause time minus 144 slot times - \arg ENET_PAUSETIME_MINUS256: pause time minus 256 slot times - \param[out] none - \retval none -*/ -void enet_pauseframe_config(uint32_t pausetime, uint32_t pause_threshold) -{ - ENET_MAC_FCTL &= ~(ENET_MAC_FCTL_PTM | ENET_MAC_FCTL_PLTS); - ENET_MAC_FCTL |= (MAC_FCTL_PTM(pausetime) | pause_threshold); -} - -/*! - \brief configure the threshold of the flow control(deactive and active threshold) - \param[in] deactive: the threshold of the deactive flow control, this value - should always be less than active flow control value, only one - parameter can be selected which is shown as below - \arg ENET_DEACTIVE_THRESHOLD_256BYTES: threshold level is 256 bytes - \arg ENET_DEACTIVE_THRESHOLD_512BYTES: threshold level is 512 bytes - \arg ENET_DEACTIVE_THRESHOLD_768BYTES: threshold level is 768 bytes - \arg ENET_DEACTIVE_THRESHOLD_1024BYTES: threshold level is 1024 bytes - \arg ENET_DEACTIVE_THRESHOLD_1280BYTES: threshold level is 1280 bytes - \arg ENET_DEACTIVE_THRESHOLD_1536BYTES: threshold level is 1536 bytes - \arg ENET_DEACTIVE_THRESHOLD_1792BYTES: threshold level is 1792 bytes - \param[in] active: the threshold of the active flow control, only one parameter - can be selected which is shown as below - \arg ENET_ACTIVE_THRESHOLD_256BYTES: threshold level is 256 bytes - \arg ENET_ACTIVE_THRESHOLD_512BYTES: threshold level is 512 bytes - \arg ENET_ACTIVE_THRESHOLD_768BYTES: threshold level is 768 bytes - \arg ENET_ACTIVE_THRESHOLD_1024BYTES: threshold level is 1024 bytes - \arg ENET_ACTIVE_THRESHOLD_1280BYTES: threshold level is 1280 bytes - \arg ENET_ACTIVE_THRESHOLD_1536BYTES: threshold level is 1536 bytes - \arg ENET_ACTIVE_THRESHOLD_1792BYTES: threshold level is 1792 bytes - \param[out] none - \retval none -*/ -void enet_flowcontrol_threshold_config(uint32_t deactive, uint32_t active) -{ - ENET_MAC_FCTH = ((deactive | active) >> 8); -} - -/*! - \brief enable ENET flow control feature - \param[in] feature: the feature of ENET flow control mode - one or more parameters can be selected which are shown as below - \arg ENET_ZERO_QUANTA_PAUSE: the automatic zero-quanta generation function - \arg ENET_TX_FLOWCONTROL: the flow control operation in the MAC - \arg ENET_RX_FLOWCONTROL: decoding function for the received pause frame and process it - \arg ENET_BACK_PRESSURE: back pressure operation in the MAC(only use in half-dulex mode) - \param[out] none - \retval none -*/ -void enet_flowcontrol_feature_enable(uint32_t feature) -{ - if(RESET != (feature & ENET_ZERO_QUANTA_PAUSE)){ - ENET_MAC_FCTL &= ~ENET_ZERO_QUANTA_PAUSE; - } - feature &= ~ENET_ZERO_QUANTA_PAUSE; - ENET_MAC_FCTL |= feature; -} - -/*! - \brief disable ENET flow control feature - \param[in] feature: the feature of ENET flow control mode - one or more parameters can be selected which are shown as below - \arg ENET_ZERO_QUANTA_PAUSE: the automatic zero-quanta generation function - \arg ENET_TX_FLOWCONTROL: the flow control operation in the MAC - \arg ENET_RX_FLOWCONTROL: decoding function for the received pause frame and process it - \arg ENET_BACK_PRESSURE: back pressure operation in the MAC(only use in half-dulex mode) - \param[out] none - \retval none -*/ -void enet_flowcontrol_feature_disable(uint32_t feature) -{ - if(RESET != (feature & ENET_ZERO_QUANTA_PAUSE)){ - ENET_MAC_FCTL |= ENET_ZERO_QUANTA_PAUSE; - } - feature &= ~ENET_ZERO_QUANTA_PAUSE; - ENET_MAC_FCTL &= ~feature; -} - -/*! - \brief get the dma transmit/receive process state - \param[in] direction: choose the direction of dma process which users want to check, - refer to enet_dmadirection_enum, only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: dma transmit process - \arg ENET_DMA_RX: dma receive process - \param[out] none - \retval state of dma process, the value range shows below: - ENET_RX_STATE_STOPPED, ENET_RX_STATE_FETCHING, ENET_RX_STATE_WAITING, - ENET_RX_STATE_SUSPENDED, ENET_RX_STATE_CLOSING, ENET_RX_STATE_QUEUING, - ENET_TX_STATE_STOPPED, ENET_TX_STATE_FETCHING, ENET_TX_STATE_WAITING, - ENET_TX_STATE_READING, ENET_TX_STATE_SUSPENDED, ENET_TX_STATE_CLOSING -*/ -uint32_t enet_dmaprocess_state_get(enet_dmadirection_enum direction) -{ - uint32_t reval; - reval = (uint32_t)(ENET_DMA_STAT & (uint32_t)direction); - return reval; -} - -/*! - \brief poll the DMA transmission/reception enable by writing any value to the - ENET_DMA_TPEN/ENET_DMA_RPEN register, this will make the DMA to resume transmission/reception - \param[in] direction: choose the direction of DMA process which users want to resume, - refer to enet_dmadirection_enum, only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA transmit process - \arg ENET_DMA_RX: DMA receive process - \param[out] none - \retval none -*/ -void enet_dmaprocess_resume(enet_dmadirection_enum direction) -{ - if(ENET_DMA_TX == direction){ - ENET_DMA_TPEN = 0U; - }else{ - ENET_DMA_RPEN = 0U; - } -} - -/*! - \brief check and recover the Rx process - \param[in] none - \param[out] none - \retval none -*/ -void enet_rxprocess_check_recovery(void) -{ - uint32_t status; - - /* get DAV information of current RxDMA descriptor */ - status = dma_current_rxdesc->status; - status &= ENET_RDES0_DAV; - - /* if current descriptor is owned by DMA, but the descriptor address mismatches with - receive descriptor address pointer updated by RxDMA controller */ - if((ENET_DMA_CRDADDR != ((uint32_t)dma_current_rxdesc)) && - (ENET_RDES0_DAV == status)){ - dma_current_rxdesc = (enet_descriptors_struct*)ENET_DMA_CRDADDR; - } -} - -/*! - \brief flush the ENET transmit FIFO, and wait until the flush operation completes - \param[in] none - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_txfifo_flush(void) -{ - uint32_t flush_state; - uint32_t timeout = 0U; - ErrStatus enet_state = ERROR; - - /* set the FTF bit for flushing transmit FIFO */ - ENET_DMA_CTL |= ENET_DMA_CTL_FTF; - /* wait until the flush operation completes */ - do{ - flush_state = ENET_DMA_CTL & ENET_DMA_CTL_FTF; - timeout++; - }while((RESET != flush_state) && (timeout < ENET_DELAY_TO)); - /* return ERROR due to timeout */ - if(RESET == flush_state){ - enet_state = SUCCESS; - } - - return enet_state; -} - -/*! - \brief get the transmit/receive address of current descriptor, or current buffer, or descriptor table - \param[in] addr_get: choose the address which users want to get, refer to enet_desc_reg_enum, - only one parameter can be selected which is shown as below - \arg ENET_RX_DESC_TABLE: the start address of the receive descriptor table - \arg ENET_RX_CURRENT_DESC: the start descriptor address of the current receive descriptor read by - the RxDMA controller - \arg ENET_RX_CURRENT_BUFFER: the current receive buffer address being read by the RxDMA controller - \arg ENET_TX_DESC_TABLE: the start address of the transmit descriptor table - \arg ENET_TX_CURRENT_DESC: the start descriptor address of the current transmit descriptor read by - the TxDMA controller - \arg ENET_TX_CURRENT_BUFFER: the current transmit buffer address being read by the TxDMA controller - \param[out] none - \retval address value -*/ -uint32_t enet_current_desc_address_get(enet_desc_reg_enum addr_get) -{ - uint32_t reval = 0U; - - reval = REG32((ENET) +(uint32_t)addr_get); - return reval; -} - -/*! - \brief get the Tx or Rx descriptor information - \param[in] desc: the descriptor pointer which users want to get information - \param[in] info_get: the descriptor information type which is selected, - only one parameter can be selected which is shown as below - \arg RXDESC_BUFFER_1_SIZE: receive buffer 1 size - \arg RXDESC_BUFFER_2_SIZE: receive buffer 2 size - \arg RXDESC_FRAME_LENGTH: the byte length of the received frame that was transferred to the buffer - \arg TXDESC_COLLISION_COUNT: the number of collisions occurred before the frame was transmitted - \arg RXDESC_BUFFER_1_ADDR: the buffer1 address of the Rx frame - \arg TXDESC_BUFFER_1_ADDR: the buffer1 address of the Tx frame - \param[out] none - \retval descriptor information, if value is 0xFFFFFFFFU, means the false input parameter -*/ -uint32_t enet_desc_information_get(enet_descriptors_struct *desc, enet_descstate_enum info_get) -{ - uint32_t reval = 0xFFFFFFFFU; - - switch(info_get){ - case RXDESC_BUFFER_1_SIZE: - reval = GET_RDES1_RB1S(desc->control_buffer_size); - break; - case RXDESC_BUFFER_2_SIZE: - reval = GET_RDES1_RB2S(desc->control_buffer_size); - break; - case RXDESC_FRAME_LENGTH: - reval = GET_RDES0_FRML(desc->status); - if(reval > 4U){ - reval = reval - 4U; - }else{ - reval = 0U; - } - break; - case RXDESC_BUFFER_1_ADDR: - reval = desc->buffer1_addr; - break; - case TXDESC_BUFFER_1_ADDR: - reval = desc->buffer1_addr; - break; - case TXDESC_COLLISION_COUNT: - reval = GET_TDES0_COCNT(desc->status); - break; - default: - break; - } - return reval; -} - -/*! - \brief get the number of missed frames during receiving - \param[in] none - \param[out] rxfifo_drop: pointer to the number of frames dropped by RxFIFO - \param[out] rxdma_drop: pointer to the number of frames missed by the RxDMA controller - \retval none -*/ -void enet_missed_frame_counter_get(uint32_t *rxfifo_drop, uint32_t *rxdma_drop) -{ - uint32_t temp_counter = 0U; - - temp_counter = ENET_DMA_MFBOCNT; - *rxfifo_drop = GET_DMA_MFBOCNT_MSFA(temp_counter); - *rxdma_drop = GET_DMA_MFBOCNT_MSFC(temp_counter); -} - -/*! - \brief get the bit flag of ENET DMA descriptor - \param[in] desc: the descriptor pointer which users want to get flag - \param[in] desc_flag: the bit flag of ENET DMA descriptor, - only one parameter can be selected which is shown as below - \arg ENET_TDES0_DB: deferred - \arg ENET_TDES0_UFE: underflow error - \arg ENET_TDES0_EXD: excessive deferral - \arg ENET_TDES0_VFRM: VLAN frame - \arg ENET_TDES0_ECO: excessive collision - \arg ENET_TDES0_LCO: late collision - \arg ENET_TDES0_NCA: no carrier - \arg ENET_TDES0_LCA: loss of carrier - \arg ENET_TDES0_IPPE: IP payload error - \arg ENET_TDES0_FRMF: frame flushed - \arg ENET_TDES0_JT: jabber timeout - \arg ENET_TDES0_ES: error summary - \arg ENET_TDES0_IPHE: IP header error - \arg ENET_TDES0_TTMSS: transmit timestamp status - \arg ENET_TDES0_TCHM: the second address chained mode - \arg ENET_TDES0_TERM: transmit end of ring mode - \arg ENET_TDES0_TTSEN: transmit timestamp function enable - \arg ENET_TDES0_DPAD: disable adding pad - \arg ENET_TDES0_DCRC: disable CRC - \arg ENET_TDES0_FSG: first segment - \arg ENET_TDES0_LSG: last segment - \arg ENET_TDES0_INTC: interrupt on completion - \arg ENET_TDES0_DAV: DAV bit - - \arg ENET_RDES0_PCERR: payload checksum error - \arg ENET_RDES0_CERR: CRC error - \arg ENET_RDES0_DBERR: dribble bit error - \arg ENET_RDES0_RERR: receive error - \arg ENET_RDES0_RWDT: receive watchdog timeout - \arg ENET_RDES0_FRMT: frame type - \arg ENET_RDES0_LCO: late collision - \arg ENET_RDES0_IPHERR: IP frame header error - \arg ENET_RDES0_LDES: last descriptor - \arg ENET_RDES0_FDES: first descriptor - \arg ENET_RDES0_VTAG: VLAN tag - \arg ENET_RDES0_OERR: overflow error - \arg ENET_RDES0_LERR: length error - \arg ENET_RDES0_SAFF: SA filter fail - \arg ENET_RDES0_DERR: descriptor error - \arg ENET_RDES0_ERRS: error summary - \arg ENET_RDES0_DAFF: destination address filter fail - \arg ENET_RDES0_DAV: descriptor available - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus enet_desc_flag_get(enet_descriptors_struct *desc, uint32_t desc_flag) -{ - FlagStatus enet_flag = RESET; - - if ((uint32_t)RESET != (desc->status & desc_flag)){ - enet_flag = SET; - } - - return enet_flag; -} - -/*! - \brief set the bit flag of ENET DMA descriptor - \param[in] desc: the descriptor pointer which users want to set flag - \param[in] desc_flag: the bit flag of ENET DMA descriptor, - only one parameter can be selected which is shown as below - \arg ENET_TDES0_VFRM: VLAN frame - \arg ENET_TDES0_FRMF: frame flushed - \arg ENET_TDES0_TCHM: the second address chained mode - \arg ENET_TDES0_TERM: transmit end of ring mode - \arg ENET_TDES0_TTSEN: transmit timestamp function enable - \arg ENET_TDES0_DPAD: disable adding pad - \arg ENET_TDES0_DCRC: disable CRC - \arg ENET_TDES0_FSG: first segment - \arg ENET_TDES0_LSG: last segment - \arg ENET_TDES0_INTC: interrupt on completion - \arg ENET_TDES0_DAV: DAV bit - \arg ENET_RDES0_DAV: descriptor available - \param[out] none - \retval none -*/ -void enet_desc_flag_set(enet_descriptors_struct *desc, uint32_t desc_flag) -{ - desc->status |= desc_flag; -} - -/*! - \brief clear the bit flag of ENET DMA descriptor - \param[in] desc: the descriptor pointer which users want to clear flag - \param[in] desc_flag: the bit flag of ENET DMA descriptor, - only one parameter can be selected which is shown as below - \arg ENET_TDES0_VFRM: VLAN frame - \arg ENET_TDES0_FRMF: frame flushed - \arg ENET_TDES0_TCHM: the second address chained mode - \arg ENET_TDES0_TERM: transmit end of ring mode - \arg ENET_TDES0_TTSEN: transmit timestamp function enable - \arg ENET_TDES0_DPAD: disable adding pad - \arg ENET_TDES0_DCRC: disable CRC - \arg ENET_TDES0_FSG: first segment - \arg ENET_TDES0_LSG: last segment - \arg ENET_TDES0_INTC: interrupt on completion - \arg ENET_TDES0_DAV: DAV bit - \arg ENET_RDES0_DAV: descriptor available - \param[out] none - \retval none -*/ -void enet_desc_flag_clear(enet_descriptors_struct *desc, uint32_t desc_flag) -{ - desc->status &= ~desc_flag; -} - -/*! - \brief when receiving completed, set RS bit in ENET_DMA_STAT register will set - \param[in] desc: the descriptor pointer which users want to configure - \param[out] none - \retval none -*/ -void enet_desc_receive_complete_bit_enable(enet_descriptors_struct *desc) -{ - desc->control_buffer_size &= ~ENET_RDES1_DINTC; -} - -/*! - \brief when receiving completed, set RS bit in ENET_DMA_STAT register will not set - \param[in] desc: the descriptor pointer which users want to configure - \param[out] none - \retval none -*/ -void enet_desc_receive_complete_bit_disable(enet_descriptors_struct *desc) -{ - desc->control_buffer_size |= ENET_RDES1_DINTC; -} - -/*! - \brief drop current receive frame - \param[in] none - \param[out] none - \retval none -*/ -void enet_rxframe_drop(void) -{ - /* enable reception, descriptor is owned by DMA */ - dma_current_rxdesc->status = ENET_RDES0_DAV; - - /* chained mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RCHM)){ - if(NULL != dma_current_ptp_rxdesc){ - dma_current_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->buffer2_next_desc_addr); - /* if it is the last ptp descriptor */ - if(0U != dma_current_ptp_rxdesc->status){ - /* pointer back to the first ptp descriptor address in the desc_ptptab list address */ - dma_current_ptp_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->status); - }else{ - /* ponter to the next ptp descriptor */ - dma_current_ptp_rxdesc++; - } - }else{ - dma_current_rxdesc = (enet_descriptors_struct*) (dma_current_rxdesc->buffer2_next_desc_addr); - } - - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_rxdesc = (enet_descriptors_struct*) (ENET_DMA_RDTADDR); - if(NULL != dma_current_ptp_rxdesc){ - dma_current_ptp_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->status); - } - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_rxdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_rxdesc + ETH_DMARXDESC_SIZE + GET_DMA_BCTL_DPSL(ENET_DMA_BCTL)); - if(NULL != dma_current_ptp_rxdesc){ - dma_current_ptp_rxdesc++; - } - } - } -} - -/*! - \brief enable DMA feature - \param[in] feature: the feature of DMA mode, - one or more parameters can be selected which are shown as below - \arg ENET_NO_FLUSH_RXFRAME: RxDMA does not flushes frames function - \arg ENET_SECONDFRAME_OPT: TxDMA controller operate on second frame function - \param[out] none - \retval none -*/ -void enet_dma_feature_enable(uint32_t feature) -{ - ENET_DMA_CTL |= feature; -} - -/*! - \brief disable DMA feature - \param[in] feature: the feature of DMA mode, - one or more parameters can be selected which are shown as below - \arg ENET_NO_FLUSH_RXFRAME: RxDMA does not flushes frames function - \arg ENET_SECONDFRAME_OPT: TxDMA controller operate on second frame function - \param[out] none - \retval none -*/ -void enet_dma_feature_disable(uint32_t feature) -{ - ENET_DMA_CTL &= ~feature; -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in normal chain mode with PTP function - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[in] desc_ptptab: pointer to the first descriptor address of PTP Rx descriptor table - \param[out] none - \retval none -*/ -void enet_ptp_normal_descriptors_chain_init(enet_dmadirection_enum direction, enet_descriptors_struct *desc_ptptab) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc, *desc_tab; - uint8_t *buf; - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* select chain mode, and enable transmit timestamp function */ - desc_status = ENET_TDES0_TCHM | ENET_TDES0_TTSEN; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - dma_current_ptp_txdesc = desc_ptptab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* select receive chained mode and set buffer1 size */ - desc_bufsize = ENET_RDES1_RCHM | (uint32_t)ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - dma_current_ptp_rxdesc = desc_ptptab; - } - - /* configure each descriptor */ - for(num = 0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* if is not the last descriptor */ - if(num < (count - 1U)){ - /* configure the next descriptor address */ - desc->buffer2_next_desc_addr = (uint32_t)(desc_tab + num + 1U); - }else{ - /* when it is the last descriptor, the next descriptor address - equals to first descriptor address in descriptor table */ - desc->buffer2_next_desc_addr = (uint32_t)desc_tab; - } - /* set desc_ptptab equal to desc_tab */ - (&desc_ptptab[num])->buffer1_addr = desc->buffer1_addr; - (&desc_ptptab[num])->buffer2_next_desc_addr = desc->buffer2_next_desc_addr; - } - /* when it is the last ptp descriptor, preserve the first descriptor - address of desc_ptptab in ptp descriptor status */ - (&desc_ptptab[num-1U])->status = (uint32_t)desc_ptptab; -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in normal ring mode with PTP function - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[in] desc_ptptab: pointer to the first descriptor address of PTP Rx descriptor table - \param[out] none - \retval none -*/ -void enet_ptp_normal_descriptors_ring_init(enet_dmadirection_enum direction, enet_descriptors_struct *desc_ptptab) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc, *desc_tab; - uint8_t *buf; - - /* configure descriptor skip length */ - ENET_DMA_BCTL &= ~ENET_DMA_BCTL_DPSL; - ENET_DMA_BCTL |= DMA_BCTL_DPSL(0); - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* select ring mode, and enable transmit timestamp function */ - desc_status = ENET_TDES0_TTSEN; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - dma_current_ptp_txdesc = desc_ptptab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* select receive ring mode and set buffer1 size */ - desc_bufsize = (uint32_t)ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - dma_current_ptp_rxdesc = desc_ptptab; - } - - /* configure each descriptor */ - for(num = 0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* when it is the last descriptor */ - if(num == (count - 1U)){ - if (ENET_DMA_TX == direction){ - /* configure transmit end of ring mode */ - desc->status |= ENET_TDES0_TERM; - }else{ - /* configure receive end of ring mode */ - desc->control_buffer_size |= ENET_RDES1_RERM; - } - } - /* set desc_ptptab equal to desc_tab */ - (&desc_ptptab[num])->buffer1_addr = desc->buffer1_addr; - (&desc_ptptab[num])->buffer2_next_desc_addr = desc->buffer2_next_desc_addr; - } - /* when it is the last ptp descriptor, preserve the first descriptor - address of desc_ptptab in ptp descriptor status */ - (&desc_ptptab[num-1U])->status = (uint32_t)desc_ptptab; -} - -/*! - \brief receive a packet data with timestamp values to application buffer, when the DMA is in normal mode - \param[in] bufsize: the size of buffer which is the parameter in function - \param[out] timestamp: pointer to the table which stores the timestamp high and low - \param[out] buffer: pointer to the application buffer - note -- if the input is NULL, user should copy data in application by himself - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_ptpframe_receive_normal_mode(uint8_t *buffer, uint32_t bufsize, uint32_t timestamp[]) -{ - uint32_t offset = 0U, size = 0U; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_DAV)){ - return ERROR; - } - - /* if buffer pointer is null, indicates that users has copied data in application */ - if(NULL != buffer){ - /* if no error occurs, and the frame uses only one descriptor */ - if(((uint32_t)RESET == (dma_current_rxdesc->status & ENET_RDES0_ERRS)) && - ((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_LDES)) && - ((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_FDES))){ - - /* get the frame length except CRC */ - size = GET_RDES0_FRML(dma_current_rxdesc->status) - 4U; - - /* to avoid situation that the frame size exceeds the buffer length */ - if(size > bufsize){ - return ERROR; - } - - /* copy data from Rx buffer to application buffer */ - for(offset = 0U; offset < size; offset++){ - (*(buffer + offset)) = (*(__IO uint8_t *)(uint32_t)((dma_current_ptp_rxdesc->buffer1_addr) + offset)); - } - - }else{ - return ERROR; - } - } - /* copy timestamp value from Rx descriptor to application array */ - timestamp[0] = dma_current_rxdesc->buffer1_addr; - timestamp[1] = dma_current_rxdesc->buffer2_next_desc_addr; - - dma_current_rxdesc->buffer1_addr = dma_current_ptp_rxdesc ->buffer1_addr ; - dma_current_rxdesc->buffer2_next_desc_addr = dma_current_ptp_rxdesc ->buffer2_next_desc_addr; - - /* enable reception, descriptor is owned by DMA */ - dma_current_rxdesc->status = ENET_RDES0_DAV; - - /* check Rx buffer unavailable flag status */ - if ((uint32_t)RESET != (ENET_DMA_STAT & ENET_DMA_STAT_RBU)){ - /* clear RBU flag */ - ENET_DMA_STAT = ENET_DMA_STAT_RBU; - /* resume DMA reception by writing to the RPEN register*/ - ENET_DMA_RPEN = 0U; - } - - - /* update the current RxDMA descriptor pointer to the next decriptor in RxDMA decriptor table */ - /* chained mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RCHM)){ - dma_current_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->buffer2_next_desc_addr); - /* if it is the last ptp descriptor */ - if(0U != dma_current_ptp_rxdesc->status){ - /* pointer back to the first ptp descriptor address in the desc_ptptab list address */ - dma_current_ptp_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->status); - }else{ - /* ponter to the next ptp descriptor */ - dma_current_ptp_rxdesc++; - } - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_rxdesc = (enet_descriptors_struct*) (ENET_DMA_RDTADDR); - /* RDES2 and RDES3 will not be covered by buffer address, so do not need to preserve a new table, - use the same table with RxDMA descriptor */ - dma_current_ptp_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->status); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_rxdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_rxdesc + ETH_DMARXDESC_SIZE + GET_DMA_BCTL_DPSL(ENET_DMA_BCTL)); - dma_current_ptp_rxdesc ++; - } - } - - return SUCCESS; -} - -/*! - \brief send data with timestamp values in application buffer as a transmit packet, when the DMA is in normal mode - \param[in] buffer: pointer on the application buffer - note -- if the input is NULL, user should copy data in application by himself - \param[in] length: the length of frame data to be transmitted - \param[out] timestamp: pointer to the table which stores the timestamp high and low - note -- if the input is NULL, timestamp is ignored - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_ptpframe_transmit_normal_mode(uint8_t *buffer, uint32_t length, uint32_t timestamp[]) -{ - uint32_t offset = 0U, timeout = 0U; - uint32_t dma_tbu_flag, dma_tu_flag, tdes0_ttmss_flag; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_DAV)){ - return ERROR; - } - - /* only frame length no more than ENET_MAX_FRAME_SIZE is allowed */ - if(length > ENET_MAX_FRAME_SIZE){ - return ERROR; - } - - /* if buffer pointer is null, indicates that users has handled data in application */ - if(NULL != buffer){ - /* copy frame data from application buffer to Tx buffer */ - for(offset = 0U; offset < length; offset++){ - (*(__IO uint8_t *) (uint32_t)((dma_current_ptp_txdesc->buffer1_addr) + offset)) = (*(buffer + offset)); - } - } - /* set the frame length */ - dma_current_txdesc->control_buffer_size = (length & (uint32_t)0x1FFF); - /* set the segment of frame, frame is transmitted in one descriptor */ - dma_current_txdesc->status |= ENET_TDES0_LSG | ENET_TDES0_FSG; - /* enable the DMA transmission */ - dma_current_txdesc->status |= ENET_TDES0_DAV; - - /* check Tx buffer unavailable flag status */ - dma_tbu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TBU); - dma_tu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TU); - - if((RESET != dma_tbu_flag) || (RESET != dma_tu_flag)){ - /* clear TBU and TU flag */ - ENET_DMA_STAT = (dma_tbu_flag | dma_tu_flag); - /* resume DMA transmission by writing to the TPEN register*/ - ENET_DMA_TPEN = 0U; - } - - /* if timestamp pointer is null, indicates that users don't care timestamp in application */ - if(NULL != timestamp){ - /* wait for ENET_TDES0_TTMSS flag to be set, a timestamp was captured */ - do{ - tdes0_ttmss_flag = (dma_current_txdesc->status & ENET_TDES0_TTMSS); - timeout++; - }while((RESET == tdes0_ttmss_flag) && (timeout < ENET_DELAY_TO)); - - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - return ERROR; - } - - /* clear the ENET_TDES0_TTMSS flag */ - dma_current_txdesc->status &= ~ENET_TDES0_TTMSS; - /* get the timestamp value of the transmit frame */ - timestamp[0] = dma_current_txdesc->buffer1_addr; - timestamp[1] = dma_current_txdesc->buffer2_next_desc_addr; - } - dma_current_txdesc->buffer1_addr = dma_current_ptp_txdesc ->buffer1_addr ; - dma_current_txdesc->buffer2_next_desc_addr = dma_current_ptp_txdesc ->buffer2_next_desc_addr; - - /* update the current TxDMA descriptor pointer to the next decriptor in TxDMA decriptor table */ - /* chained mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TCHM)){ - dma_current_txdesc = (enet_descriptors_struct*) (dma_current_ptp_txdesc->buffer2_next_desc_addr); - /* if it is the last ptp descriptor */ - if(0U != dma_current_ptp_txdesc->status){ - /* pointer back to the first ptp descriptor address in the desc_ptptab list address */ - dma_current_ptp_txdesc = (enet_descriptors_struct*) (dma_current_ptp_txdesc->status); - }else{ - /* ponter to the next ptp descriptor */ - dma_current_ptp_txdesc++; - } - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_txdesc = (enet_descriptors_struct*) (ENET_DMA_TDTADDR); - /* TDES2 and TDES3 will not be covered by buffer address, so do not need to preserve a new table, - use the same table with TxDMA descriptor */ - dma_current_ptp_txdesc = (enet_descriptors_struct*) (dma_current_ptp_txdesc->status); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_txdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_txdesc + ETH_DMATXDESC_SIZE + GET_DMA_BCTL_DPSL(ENET_DMA_BCTL)); - dma_current_ptp_txdesc ++; - } - } - return SUCCESS; -} - -/*! - \brief wakeup frame filter register pointer reset - \param[in] none - \param[out] none - \retval none -*/ -void enet_wum_filter_register_pointer_reset(void) -{ - ENET_MAC_WUM |= ENET_MAC_WUM_WUFFRPR; -} - -/*! - \brief set the remote wakeup frame registers - \param[in] pdata: pointer to buffer data which is written to remote wakeup frame registers (8 words total) - \param[out] none - \retval none -*/ -void enet_wum_filter_config(uint32_t pdata[]) -{ - uint32_t num = 0U; - - /* configure ENET_MAC_RWFF register */ - for(num = 0U; num < ETH_WAKEUP_REGISTER_LENGTH; num++){ - ENET_MAC_RWFF = pdata[num]; - } -} - -/*! - \brief enable wakeup management features - \param[in] feature: one or more parameters can be selected which are shown as below - \arg ENET_WUM_POWER_DOWN: power down mode - \arg ENET_WUM_MAGIC_PACKET_FRAME: enable a wakeup event due to magic packet reception - \arg ENET_WUM_WAKE_UP_FRAME: enable a wakeup event due to wakeup frame reception - \arg ENET_WUM_GLOBAL_UNICAST: any received unicast frame passed filter is considered to be a wakeup frame - \param[out] none - \retval none -*/ -void enet_wum_feature_enable(uint32_t feature) -{ - ENET_MAC_WUM |= feature; -} - -/*! - \brief disable wakeup management features - \param[in] feature: one or more parameters can be selected which are shown as below - \arg ENET_WUM_MAGIC_PACKET_FRAME: enable a wakeup event due to magic packet reception - \arg ENET_WUM_WAKE_UP_FRAME: enable a wakeup event due to wakeup frame reception - \arg ENET_WUM_GLOBAL_UNICAST: any received unicast frame passed filter is considered to be a wakeup frame - \param[out] none - \retval none -*/ -void enet_wum_feature_disable(uint32_t feature) -{ - ENET_MAC_WUM &= (~feature); -} - -/*! - \brief reset the MAC statistics counters - \param[in] none - \param[out] none - \retval none -*/ -void enet_msc_counters_reset(void) -{ - /* reset all counters */ - ENET_MSC_CTL |= ENET_MSC_CTL_CTR; -} - -/*! - \brief enable the MAC statistics counter features - \param[in] feature: one or more parameters can be selected which are shown as below - \arg ENET_MSC_COUNTER_STOP_ROLLOVER: counter stop rollover - \arg ENET_MSC_RESET_ON_READ: reset on read - \arg ENET_MSC_COUNTERS_FREEZE: MSC counter freeze - \param[out] none - \retval none -*/ -void enet_msc_feature_enable(uint32_t feature) -{ - ENET_MSC_CTL |= feature; -} - -/*! - \brief disable the MAC statistics counter features - \param[in] feature: one or more parameters can be selected which are shown as below - \arg ENET_MSC_COUNTER_STOP_ROLLOVER: counter stop rollover - \arg ENET_MSC_RESET_ON_READ: reset on read - \arg ENET_MSC_COUNTERS_FREEZE: MSC counter freeze - \param[out] none - \retval none -*/ -void enet_msc_feature_disable(uint32_t feature) -{ - ENET_MSC_CTL &= (~feature); -} - -/*! - \brief get MAC statistics counter - \param[in] counter: MSC counters which is selected, refer to enet_msc_counter_enum, - only one parameter can be selected which is shown as below - \arg ENET_MSC_TX_SCCNT: MSC transmitted good frames after a single collision counter - \arg ENET_MSC_TX_MSCCNT: MSC transmitted good frames after more than a single collision counter - \arg ENET_MSC_TX_TGFCNT: MSC transmitted good frames counter - \arg ENET_MSC_RX_RFCECNT: MSC received frames with CRC error counter - \arg ENET_MSC_RX_RFAECNT: MSC received frames with alignment error counter - \arg ENET_MSC_RX_RGUFCNT: MSC received good unicast frames counter - \param[out] none - \retval the MSC counter value -*/ -uint32_t enet_msc_counters_get(enet_msc_counter_enum counter) -{ - uint32_t reval; - - reval = REG32((ENET + (uint32_t)counter)); - - return reval; -} - -/*! - \brief change subsecond to nanosecond - \param[in] subsecond: subsecond value - \param[out] none - \retval the nanosecond value -*/ -uint32_t enet_ptp_subsecond_2_nanosecond(uint32_t subsecond) -{ - uint64_t val = subsecond * 1000000000Ull; - val >>= 31; - return (uint32_t)val; -} - -/*! - \brief change nanosecond to subsecond - \param[in] nanosecond: nanosecond value - \param[out] none - \retval the subsecond value -*/ -uint32_t enet_ptp_nanosecond_2_subsecond(uint32_t nanosecond) -{ - uint64_t val = nanosecond * 0x80000000Ull; - val /= 1000000000U; - return (uint32_t)val; -} - -/*! - \brief enable the PTP features - \param[in] feature: the feature of ENET PTP mode - one or more parameters can be selected which are shown as below - \arg ENET_RXTX_TIMESTAMP: timestamp function for transmit and receive frames - \arg ENET_PTP_TIMESTAMP_INT: timestamp interrupt trigger - \param[out] none - \retval none -*/ -void enet_ptp_feature_enable(uint32_t feature) -{ - ENET_PTP_TSCTL |= feature; -} - -/*! - \brief disable the PTP features - \param[in] feature: the feature of ENET PTP mode - one or more parameters can be selected which are shown as below - \arg ENET_RXTX_TIMESTAMP: timestamp function for transmit and receive frames - \arg ENET_PTP_TIMESTAMP_INT: timestamp interrupt trigger - \param[out] none - \retval none -*/ -void enet_ptp_feature_disable(uint32_t feature) -{ - ENET_PTP_TSCTL &= ~feature; -} - -/*! - \brief configure the PTP timestamp function - \param[in] func: only one parameter can be selected which is shown as below - \arg ENET_PTP_ADDEND_UPDATE: addend register update - \arg ENET_PTP_SYSTIME_UPDATE: timestamp update - \arg ENET_PTP_SYSTIME_INIT: timestamp initialize - \arg ENET_PTP_FINEMODE: the system timestamp uses the fine method for updating - \arg ENET_PTP_COARSEMODE: the system timestamp uses the coarse method for updating - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ - -ErrStatus enet_ptp_timestamp_function_config(enet_ptp_function_enum func) -{ - uint32_t temp_config = 0U, temp_state = 0U; - uint32_t timeout = 0U; - ErrStatus enet_state = SUCCESS; - - switch(func){ - case ENET_PTP_ADDEND_UPDATE: - /* this bit must be read as zero before application set it */ - do{ - temp_state = ENET_PTP_TSCTL & ENET_PTP_TSCTL_TMSARU; - timeout++; - }while((RESET != temp_state) && (timeout < ENET_DELAY_TO)); - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - enet_state = ERROR; - }else{ - ENET_PTP_TSCTL |= ENET_PTP_TSCTL_TMSARU; - } - break; - case ENET_PTP_SYSTIME_UPDATE: - /* both the TMSSTU and TMSSTI bits must be read as zero before application set this bit */ - do{ - temp_state = ENET_PTP_TSCTL & (ENET_PTP_TSCTL_TMSSTU | ENET_PTP_TSCTL_TMSSTI); - timeout++; - }while((RESET != temp_state) && (timeout < ENET_DELAY_TO)); - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - enet_state = ERROR; - }else{ - ENET_PTP_TSCTL |= ENET_PTP_TSCTL_TMSSTU; - } - break; - case ENET_PTP_SYSTIME_INIT: - /* this bit must be read as zero before application set it */ - do{ - temp_state = ENET_PTP_TSCTL & ENET_PTP_TSCTL_TMSSTI; - timeout++; - }while((RESET != temp_state) && (timeout < ENET_DELAY_TO)); - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - enet_state = ERROR; - }else{ - ENET_PTP_TSCTL |= ENET_PTP_TSCTL_TMSSTI; - } - break; - default: - temp_config = (uint32_t)func & (~BIT(31)); - if(RESET != ((uint32_t)func & BIT(31))){ - ENET_PTP_TSCTL |= temp_config; - }else{ - ENET_PTP_TSCTL &= ~temp_config; - } - break; - } - - return enet_state; -} - -/*! - \brief configure system time subsecond increment value - \param[in] subsecond: the value will be added to the subsecond value of system time, - this value must be between 0 and 0xFF - \param[out] none - \retval none -*/ -void enet_ptp_subsecond_increment_config(uint32_t subsecond) -{ - ENET_PTP_SSINC = PTP_SSINC_STMSSI(subsecond); -} - -/*! - \brief adjusting the clock frequency only in fine update mode - \param[in] add: the value will be added to the accumulator register to achieve time synchronization - \param[out] none - \retval none -*/ -void enet_ptp_timestamp_addend_config(uint32_t add) -{ - ENET_PTP_TSADDEND = add; -} - -/*! - \brief initialize or add/subtract to second of the system time - \param[in] sign: timestamp update positive or negative sign, - only one parameter can be selected which is shown as below - \arg ENET_PTP_ADD_TO_TIME: timestamp update value is added to system time - \arg ENET_PTP_SUBSTRACT_FROM_TIME: timestamp update value is subtracted from system time - \param[in] second: initializing or adding/subtracting to second of the system time - \param[in] subsecond: the current subsecond of the system time - with 0.46 ns accuracy if required accuracy is 20 ns - \param[out] none - \retval none -*/ -void enet_ptp_timestamp_update_config(uint32_t sign, uint32_t second, uint32_t subsecond) -{ - ENET_PTP_TSUH = second; - ENET_PTP_TSUL = sign | PTP_TSUL_TMSUSS(subsecond); -} - -/*! - \brief configure the expected target time - \param[in] second: the expected target second time - \param[in] nanosecond: the expected target nanosecond time (signed) - \param[out] none - \retval none -*/ -void enet_ptp_expected_time_config(uint32_t second, uint32_t nanosecond) -{ - ENET_PTP_ETH = second; - ENET_PTP_ETL = nanosecond; -} - -/*! - \brief get the current system time - \param[in] none - \param[out] systime_struct: pointer to a enet_ptp_systime_struct structure which contains - parameters of PTP system time - members of the structure and the member values are shown as below: - second: 0x0 - 0xFFFF FFFF - nanosecond: 0x0 - 0x7FFF FFFF * 10^9 / 2^31 - sign: ENET_PTP_TIME_POSITIVE, ENET_PTP_TIME_NEGATIVE - \retval none -*/ -void enet_ptp_system_time_get(enet_ptp_systime_struct *systime_struct) -{ - uint32_t temp_sec = 0U, temp_subs = 0U; - - /* get the value of sysytem time registers */ - temp_sec = (uint32_t)ENET_PTP_TSH; - temp_subs = (uint32_t)ENET_PTP_TSL; - - /* get sysytem time and construct the enet_ptp_systime_struct structure */ - systime_struct->second = temp_sec; - systime_struct->nanosecond = GET_PTP_TSL_STMSS(temp_subs); - systime_struct->nanosecond = enet_ptp_subsecond_2_nanosecond(systime_struct->nanosecond); - systime_struct->sign = GET_PTP_TSL_STS(temp_subs); -} - -/*! - \brief configure and start PTP timestamp counter - \param[in] updatemethod: method for updating - \arg ENET_PTP_FINEMODE: fine correction method - \arg ENET_PTP_COARSEMODE: coarse correction method - \param[in] init_sec: second value for initializing system time - \param[in] init_subsec: subsecond value for initializing system time - \param[in] carry_cfg: the value to be added to the accumulator register (in fine method is used) - \param[in] accuracy_cfg: the value to be added to the subsecond value of system time - \param[out] none - \retval none -*/ -void enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg) -{ - /* mask the timestamp trigger interrupt */ - enet_interrupt_disable(ENET_MAC_INT_TMSTIM); - - /* enable timestamp */ - enet_ptp_feature_enable(ENET_RXTX_TIMESTAMP); - - /* configure system time subsecond increment based on the PTP clock frequency */ - enet_ptp_subsecond_increment_config(accuracy_cfg); - - if(ENET_PTP_FINEMODE == updatemethod){ - /* fine correction method: configure the timestamp addend, then update */ - enet_ptp_timestamp_addend_config(carry_cfg); - enet_ptp_timestamp_function_config(ENET_PTP_ADDEND_UPDATE); - /* wait until update is completed */ - while(SET == enet_ptp_flag_get((uint32_t)ENET_PTP_ADDEND_UPDATE)){ - } - } - - /* choose the fine correction method */ - enet_ptp_timestamp_function_config((enet_ptp_function_enum)updatemethod); - - /* initialize the system time */ - enet_ptp_timestamp_update_config(ENET_PTP_ADD_TO_TIME, init_sec, init_subsec); - enet_ptp_timestamp_function_config(ENET_PTP_SYSTIME_INIT); -} - -/*! - \brief adjust frequency in fine method by configure addend register - \param[in] carry_cfg: the value to be added to the accumulator register - \param[out] none - \retval none -*/ -void enet_ptp_finecorrection_adjfreq(int32_t carry_cfg) -{ - /* re-configure the timestamp addend, then update */ - enet_ptp_timestamp_addend_config((uint32_t)carry_cfg); - enet_ptp_timestamp_function_config(ENET_PTP_ADDEND_UPDATE); -} - -/*! - \brief update system time in coarse method - \param[in] systime_struct: pointer to a enet_ptp_systime_struct structure which contains - parameters of PTP system time - members of the structure and the member values are shown as below: - second: 0x0 - 0xFFFF FFFF - nanosecond: 0x0 - 0x7FFF FFFF * 10^9 / 2^31 - sign: ENET_PTP_TIME_POSITIVE, ENET_PTP_TIME_NEGATIVE - \param[out] none - \retval none -*/ -void enet_ptp_coarsecorrection_systime_update(enet_ptp_systime_struct *systime_struct) -{ - uint32_t subsecond_val; - uint32_t carry_cfg; - - subsecond_val = enet_ptp_nanosecond_2_subsecond(systime_struct->nanosecond); - - /* save the carry_cfg value */ - carry_cfg = ENET_PTP_TSADDEND_TMSA; - - /* update the system time */ - enet_ptp_timestamp_update_config(systime_struct->sign, systime_struct->second, subsecond_val); - enet_ptp_timestamp_function_config(ENET_PTP_SYSTIME_UPDATE); - - /* wait until the update is completed */ - while(SET == enet_ptp_flag_get((uint32_t)ENET_PTP_SYSTIME_UPDATE)){ - } - - /* write back the carry_cfg value, then update */ - enet_ptp_timestamp_addend_config(carry_cfg); - enet_ptp_timestamp_function_config(ENET_PTP_ADDEND_UPDATE); -} - -/*! - \brief set system time in fine method - \param[in] systime_struct: pointer to a enet_ptp_systime_struct structure which contains - parameters of PTP system time - members of the structure and the member values are shown as below: - second: 0x0 - 0xFFFF FFFF - nanosecond: 0x0 - 0x7FFF FFFF * 10^9 / 2^31 - sign: ENET_PTP_TIME_POSITIVE, ENET_PTP_TIME_NEGATIVE - \param[out] none - \retval none -*/ -void enet_ptp_finecorrection_settime(enet_ptp_systime_struct * systime_struct) -{ - uint32_t subsecond_val; - - subsecond_val = enet_ptp_nanosecond_2_subsecond(systime_struct->nanosecond); - - /* initialize the system time */ - enet_ptp_timestamp_update_config(systime_struct->sign, systime_struct->second, subsecond_val); - enet_ptp_timestamp_function_config(ENET_PTP_SYSTIME_INIT); - - /* wait until the system time initialzation finished */ - while(SET == enet_ptp_flag_get((uint32_t)ENET_PTP_SYSTIME_INIT)){ - } -} - -/*! - \brief get the ptp flag status - \param[in] flag: ptp flag status to be checked - \arg ENET_PTP_ADDEND_UPDATE: addend register update - \arg ENET_PTP_SYSTIME_UPDATE: timestamp update - \arg ENET_PTP_SYSTIME_INIT: timestamp initialize - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus enet_ptp_flag_get(uint32_t flag) -{ - FlagStatus bitstatus = RESET; - - if ((uint32_t)RESET != (ENET_PTP_TSCTL & flag)){ - bitstatus = SET; - } - - return bitstatus; -} - -/*! - \brief reset the ENET initpara struct, call it before using enet_initpara_config() - \param[in] none - \param[out] none - \retval none -*/ -void enet_initpara_reset(void) -{ - enet_initpara.option_enable = 0U; - enet_initpara.forward_frame = 0U; - enet_initpara.dmabus_mode = 0U; - enet_initpara.dma_maxburst = 0U; - enet_initpara.dma_arbitration = 0U; - enet_initpara.store_forward_mode = 0U; - enet_initpara.dma_function = 0U; - enet_initpara.vlan_config = 0U; - enet_initpara.flow_control = 0U; - enet_initpara.hashtable_high = 0U; - enet_initpara.hashtable_low = 0U; - enet_initpara.framesfilter_mode = 0U; - enet_initpara.halfduplex_param = 0U; - enet_initpara.timer_config = 0U; - enet_initpara.interframegap = 0U; -} - -/*! - \brief initialize ENET peripheral with generally concerned parameters, call it by enet_init() - \param[in] none - \param[out] none - \retval none -*/ -static void enet_default_init(void) -{ - uint32_t reg_value = 0U; - - /* MAC */ - /* configure ENET_MAC_CFG register */ - reg_value = ENET_MAC_CFG; - reg_value &= MAC_CFG_MASK; - reg_value |= ENET_WATCHDOG_ENABLE | ENET_JABBER_ENABLE | ENET_INTERFRAMEGAP_96BIT \ - | ENET_SPEEDMODE_10M |ENET_MODE_HALFDUPLEX | ENET_LOOPBACKMODE_DISABLE \ - | ENET_CARRIERSENSE_ENABLE | ENET_RECEIVEOWN_ENABLE \ - | ENET_RETRYTRANSMISSION_ENABLE | ENET_BACKOFFLIMIT_10 \ - | ENET_DEFERRALCHECK_DISABLE \ - | ENET_AUTO_PADCRC_DROP_DISABLE \ - | ENET_CHECKSUMOFFLOAD_DISABLE; - ENET_MAC_CFG = reg_value; - - /* configure ENET_MAC_FRMF register */ - ENET_MAC_FRMF = ENET_SRC_FILTER_DISABLE |ENET_DEST_FILTER_INVERSE_DISABLE \ - |ENET_MULTICAST_FILTER_PERFECT |ENET_UNICAST_FILTER_PERFECT \ - |ENET_PCFRM_PREVENT_ALL |ENET_BROADCASTFRAMES_ENABLE \ - |ENET_PROMISCUOUS_DISABLE |ENET_RX_FILTER_ENABLE; - - /* configure ENET_MAC_HLH, ENET_MAC_HLL register */ - ENET_MAC_HLH = 0x0U; - - ENET_MAC_HLL = 0x0U; - - /* configure ENET_MAC_FCTL, ENET_MAC_FCTH register */ - reg_value = ENET_MAC_FCTL; - reg_value &= MAC_FCTL_MASK; - reg_value |= MAC_FCTL_PTM(0) |ENET_ZERO_QUANTA_PAUSE_DISABLE \ - |ENET_PAUSETIME_MINUS4 |ENET_UNIQUE_PAUSEDETECT \ - |ENET_RX_FLOWCONTROL_DISABLE |ENET_TX_FLOWCONTROL_DISABLE; - ENET_MAC_FCTL = reg_value; - - /* configure ENET_MAC_VLT register */ - ENET_MAC_VLT = ENET_VLANTAGCOMPARISON_16BIT |MAC_VLT_VLTI(0); - - /* DMA */ - /* configure ENET_DMA_CTL register */ - reg_value = ENET_DMA_CTL; - reg_value &= DMA_CTL_MASK; - reg_value |= ENET_TCPIP_CKSUMERROR_DROP |ENET_RX_MODE_STOREFORWARD \ - |ENET_FLUSH_RXFRAME_ENABLE |ENET_TX_MODE_STOREFORWARD \ - |ENET_TX_THRESHOLD_64BYTES |ENET_RX_THRESHOLD_64BYTES \ - |ENET_SECONDFRAME_OPT_DISABLE; - ENET_DMA_CTL = reg_value; - - /* configure ENET_DMA_BCTL register */ - reg_value = ENET_DMA_BCTL; - reg_value &= DMA_BCTL_MASK; - reg_value = ENET_ADDRESS_ALIGN_ENABLE |ENET_ARBITRATION_RXTX_2_1 \ - |ENET_RXDP_32BEAT |ENET_PGBL_32BEAT |ENET_RXTX_DIFFERENT_PGBL \ - |ENET_FIXED_BURST_ENABLE; - ENET_DMA_BCTL = reg_value; -} - -#ifndef USE_DELAY -/*! - \brief insert a delay time - \param[in] ncount: specifies the delay time length - \param[out] none - \param[out] none -*/ -static void enet_delay(uint32_t ncount) -{ - __IO uint32_t delay_time = 0U; - - for(delay_time = ncount; delay_time != 0U; delay_time--){ - } -} -#endif /* USE_DELAY */ - -#endif /* GD32F10X_CL */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_exmc.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_exmc.c deleted file mode 100644 index 4fd8a5a..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_exmc.c +++ /dev/null @@ -1,645 +0,0 @@ -/*! - \file gd32f10x_exmc.c - \brief EXMC driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_exmc.h" - -/* EXMC bank0 register reset value */ -#define BANK0_SNCTL0_REGION_RESET ((uint32_t)0x000030DBU) -#define BANK0_SNCTL1_2_3_REGION_RESET ((uint32_t)0x000030D2U) -#define BANK0_SNTCFG_RESET ((uint32_t)0x0FFFFFFFU) -#define BANK0_SNWTCFG_RESET ((uint32_t)0x0FFFFFFFU) - -/* EXMC bank1/2 register reset mask*/ -#define BANK1_2_NPCTL_RESET ((uint32_t)0x00000018U) -#define BANK1_2_NPINTEN_RESET ((uint32_t)0x00000040U) -#define BANK1_2_NPCTCFG_RESET ((uint32_t)0xFCFCFCFCU) -#define BANK1_2_NPATCFG_RESET ((uint32_t)0xFCFCFCFCU) - -/* EXMC bank3 register reset mask*/ -#define BANK3_NPCTL_RESET ((uint32_t)0x00000018U) -#define BANK3_NPINTEN_RESET ((uint32_t)0x00000040U) -#define BANK3_NPCTCFG_RESET ((uint32_t)0xFCFCFCFCU) -#define BANK3_NPATCFG_RESET ((uint32_t)0xFCFCFCFCU) -#define BANK3_PIOTCFG3_RESET ((uint32_t)0xFCFCFCFCU) - -/* EXMC register bit offset */ -#define SNCTL_NRMUX_OFFSET ((uint32_t)1U) -#define SNCTL_SBRSTEN_OFFSET ((uint32_t)8U) -#define SNCTL_WRAPEN_OFFSET ((uint32_t)10U) -#define SNCTL_WREN_OFFSET ((uint32_t)12U) -#define SNCTL_NRWTEN_OFFSET ((uint32_t)13U) -#define SNCTL_EXMODEN_OFFSET ((uint32_t)14U) -#define SNCTL_ASYNCWAIT_OFFSET ((uint32_t)15U) - -#define SNTCFG_AHLD_OFFSET ((uint32_t)4U) -#define SNTCFG_DSET_OFFSET ((uint32_t)8U) -#define SNTCFG_BUSLAT_OFFSET ((uint32_t)16U) - -#define SNWTCFG_WAHLD_OFFSET ((uint32_t)4U) -#define SNWTCFG_WDSET_OFFSET ((uint32_t)8U) -#define SNWTCFG_WBUSLAT_OFFSET ((uint32_t)16U) - -#define NPCTL_NDWTEN_OFFSET ((uint32_t)1U) -#define NPCTL_ECCEN_OFFSET ((uint32_t)6U) - -#define NPCTCFG_COMWAIT_OFFSET ((uint32_t)8U) -#define NPCTCFG_COMHLD_OFFSET ((uint32_t)16U) -#define NPCTCFG_COMHIZ_OFFSET ((uint32_t)24U) - -#define NPATCFG_ATTWAIT_OFFSET ((uint32_t)8U) -#define NPATCFG_ATTHLD_OFFSET ((uint32_t)16U) -#define NPATCFG_ATTHIZ_OFFSET ((uint32_t)24U) - -#define PIOTCFG_IOWAIT_OFFSET ((uint32_t)8U) -#define PIOTCFG_IOHLD_OFFSET ((uint32_t)16U) -#define PIOTCFG_IOHIZ_OFFSET ((uint32_t)24U) - -#define INTEN_INTS_OFFSET ((uint32_t)3U) - -/*! - \brief deinitialize EXMC NOR/SRAM region - \param[in] norsram_region: select the region of bank0 - \arg EXMC_BANK0_NORSRAM_REGIONx(x=0..3) - \param[out] none - \retval none -*/ -void exmc_norsram_deinit(uint32_t norsram_region) -{ - /* reset the registers */ - if(EXMC_BANK0_NORSRAM_REGION0 == norsram_region){ - EXMC_SNCTL(norsram_region) = BANK0_SNCTL0_REGION_RESET; - }else{ - EXMC_SNCTL(norsram_region) = BANK0_SNCTL1_2_3_REGION_RESET; - } - - EXMC_SNTCFG(norsram_region) = BANK0_SNTCFG_RESET; - EXMC_SNWTCFG(norsram_region) = BANK0_SNWTCFG_RESET; -} - -/*! - \brief initialize EXMC NOR/SRAM region - \param[in] exmc_norsram_parameter_struct: configure the EXMC NOR/SRAM parameter - norsram_region: EXMC_BANK0_NORSRAM_REGIONx,x=0..3 - write_mode: EXMC_ASYN_WRITE,EXMC_SYN_WRITE - extended_mode: ENABLE or DISABLE - asyn_wait: ENABLE or DISABLE - nwait_signal: ENABLE or DISABLE - memory_write: ENABLE or DISABLE - nwait_config: EXMC_NWAIT_CONFIG_BEFORE,EXMC_NWAIT_CONFIG_DURING - wrap_burst_mode: ENABLE or DISABLE - nwait_polarity: EXMC_NWAIT_POLARITY_LOW,EXMC_NWAIT_POLARITY_HIGH - burst_mode: ENABLE or DISABLE - databus_width: EXMC_NOR_DATABUS_WIDTH_8B,EXMC_NOR_DATABUS_WIDTH_16B - memory_type: EXMC_MEMORY_TYPE_SRAM,EXMC_MEMORY_TYPE_PSRAM,EXMC_MEMORY_TYPE_NOR - address_data_mux: ENABLE or DISABLE - read_write_timing: struct exmc_norsram_timing_parameter_struct set the time - write_timing: struct exmc_norsram_timing_parameter_struct set the time - \param[out] none - \retval none -*/ -void exmc_norsram_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct) -{ - uint32_t snctl = 0x00000000U, sntcfg = 0x00000000U, snwtcfg = 0x00000000U; - - /* get the register value */ - snctl = EXMC_SNCTL(exmc_norsram_init_struct->norsram_region); - - /* clear relative bits */ - snctl &= ((uint32_t)~(EXMC_SNCTL_NREN | EXMC_SNCTL_NRTP | EXMC_SNCTL_NRW | EXMC_SNCTL_SBRSTEN | - EXMC_SNCTL_NRWTPOL | EXMC_SNCTL_WRAPEN | EXMC_SNCTL_NRWTCFG | EXMC_SNCTL_WREN | - EXMC_SNCTL_NRWTEN | EXMC_SNCTL_EXMODEN | EXMC_SNCTL_ASYNCWAIT | EXMC_SNCTL_SYNCWR | - EXMC_SNCTL_NRMUX )); - - snctl |= (uint32_t)(exmc_norsram_init_struct->address_data_mux << SNCTL_NRMUX_OFFSET) | - exmc_norsram_init_struct->memory_type | - exmc_norsram_init_struct->databus_width | - (exmc_norsram_init_struct->burst_mode << SNCTL_SBRSTEN_OFFSET) | - exmc_norsram_init_struct->nwait_polarity | - (exmc_norsram_init_struct->wrap_burst_mode << SNCTL_WRAPEN_OFFSET) | - exmc_norsram_init_struct->nwait_config | - (exmc_norsram_init_struct->memory_write << SNCTL_WREN_OFFSET) | - (exmc_norsram_init_struct->nwait_signal << SNCTL_NRWTEN_OFFSET) | - (exmc_norsram_init_struct->extended_mode << SNCTL_EXMODEN_OFFSET) | - (exmc_norsram_init_struct->asyn_wait << SNCTL_ASYNCWAIT_OFFSET) | - exmc_norsram_init_struct->write_mode; - - sntcfg = (uint32_t)((exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime - 1U ) & EXMC_SNTCFG_ASET )| - (((exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime - 1U ) << SNTCFG_AHLD_OFFSET ) & EXMC_SNTCFG_AHLD ) | - (((exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime - 1U ) << SNTCFG_DSET_OFFSET ) & EXMC_SNTCFG_DSET ) | - (((exmc_norsram_init_struct->read_write_timing->bus_latency - 1U ) << SNTCFG_BUSLAT_OFFSET ) & EXMC_SNTCFG_BUSLAT )| - exmc_norsram_init_struct->read_write_timing->syn_clk_division | - exmc_norsram_init_struct->read_write_timing->syn_data_latency | - exmc_norsram_init_struct->read_write_timing->asyn_access_mode; - - /* nor flash access enable */ - if(EXMC_MEMORY_TYPE_NOR == exmc_norsram_init_struct->memory_type){ - snctl |= (uint32_t)EXMC_SNCTL_NREN; - } - - /* extended mode configure */ - if(ENABLE == exmc_norsram_init_struct->extended_mode){ - snwtcfg = (uint32_t)(((exmc_norsram_init_struct->write_timing->asyn_address_setuptime - 1U) & EXMC_SNWTCFG_WASET) | - (((exmc_norsram_init_struct->write_timing->asyn_address_holdtime - 1U) << SNTCFG_AHLD_OFFSET ) & EXMC_SNWTCFG_WAHLD)| - (((exmc_norsram_init_struct->write_timing->asyn_data_setuptime - 1U) << SNTCFG_DSET_OFFSET) & EXMC_SNWTCFG_WDSET) | - exmc_norsram_init_struct->write_timing->asyn_access_mode); - }else{ - snwtcfg = BANK0_SNWTCFG_RESET; - } - - /* configure the registers */ - EXMC_SNCTL(exmc_norsram_init_struct->norsram_region) = snctl; - EXMC_SNTCFG(exmc_norsram_init_struct->norsram_region) = sntcfg; - EXMC_SNWTCFG(exmc_norsram_init_struct->norsram_region) = snwtcfg; -} - -/*! - \brief initialize the struct exmc_norsram_parameter_struct - \param[in] none - \param[out] exmc_norsram_init_struct: the initialized struct exmc_norsram_parameter_struct pointer - \retval none -*/ -void exmc_norsram_struct_para_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct) -{ - /* configure the structure with default value */ - exmc_norsram_init_struct->norsram_region = EXMC_BANK0_NORSRAM_REGION0; - exmc_norsram_init_struct->address_data_mux = ENABLE; - exmc_norsram_init_struct->memory_type = EXMC_MEMORY_TYPE_SRAM; - exmc_norsram_init_struct->databus_width = EXMC_NOR_DATABUS_WIDTH_8B; - exmc_norsram_init_struct->burst_mode = DISABLE; - exmc_norsram_init_struct->nwait_polarity = EXMC_NWAIT_POLARITY_LOW; - exmc_norsram_init_struct->wrap_burst_mode = DISABLE; - exmc_norsram_init_struct->nwait_config = EXMC_NWAIT_CONFIG_BEFORE; - exmc_norsram_init_struct->memory_write = ENABLE; - exmc_norsram_init_struct->nwait_signal = ENABLE; - exmc_norsram_init_struct->extended_mode = DISABLE; - exmc_norsram_init_struct->asyn_wait = DISABLE; - exmc_norsram_init_struct->write_mode = EXMC_ASYN_WRITE; - - /* read/write timing configure */ - exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime = 0xFU; - exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime = 0xFU; - exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime = 0xFFU; - exmc_norsram_init_struct->read_write_timing->bus_latency = 0xFU; - exmc_norsram_init_struct->read_write_timing->syn_clk_division = EXMC_SYN_CLOCK_RATIO_16_CLK; - exmc_norsram_init_struct->read_write_timing->syn_data_latency = EXMC_DATALAT_17_CLK; - exmc_norsram_init_struct->read_write_timing->asyn_access_mode = EXMC_ACCESS_MODE_A; - - /* write timing configure, when extended mode is used */ - exmc_norsram_init_struct->write_timing->asyn_address_setuptime = 0xFU; - exmc_norsram_init_struct->write_timing->asyn_address_holdtime = 0xFU; - exmc_norsram_init_struct->write_timing->asyn_data_setuptime = 0xFFU; - exmc_norsram_init_struct->write_timing->bus_latency = 0xFU; - exmc_norsram_init_struct->write_timing->asyn_access_mode = EXMC_ACCESS_MODE_A; -} - -/*! - \brief enable EXMC NOR/PSRAM bank region - \param[in] norsram_region: specifie the region of NOR/PSRAM bank - \arg EXMC_BANK0_NORSRAM_REGIONx(x=0..3) - \param[out] none - \retval none -*/ -void exmc_norsram_enable(uint32_t norsram_region) -{ - EXMC_SNCTL(norsram_region) |= (uint32_t)EXMC_SNCTL_NRBKEN; -} - -/*! - \brief disable EXMC NOR/PSRAM bank region - \param[in] norsram_region: specifie the region of NOR/PSRAM Bank - \arg EXMC_BANK0_NORSRAM_REGIONx(x=0..3) - \param[out] none - \retval none -*/ -void exmc_norsram_disable(uint32_t norsram_region) -{ - EXMC_SNCTL(norsram_region) &= ~(uint32_t)EXMC_SNCTL_NRBKEN; -} - -/*! - \brief deinitialize EXMC NAND bank - \param[in] nand_bank: select the bank of NAND - \arg EXMC_BANKx_NAND(x=1..2) - \param[out] none - \retval none -*/ -void exmc_nand_deinit(uint32_t nand_bank) -{ - /* EXMC_BANK1_NAND or EXMC_BANK2_NAND */ - EXMC_NPCTL(nand_bank) = BANK1_2_NPCTL_RESET; - EXMC_NPINTEN(nand_bank) = BANK1_2_NPINTEN_RESET; - EXMC_NPCTCFG(nand_bank) = BANK1_2_NPCTCFG_RESET; - EXMC_NPATCFG(nand_bank) = BANK1_2_NPATCFG_RESET; -} - -/*! - \brief initialize EXMC NAND bank - \param[in] exmc_nand_parameter_struct: configure the EXMC NAND parameter - nand_bank: EXMC_BANK1_NAND,EXMC_BANK2_NAND - ecc_size: EXMC_ECC_SIZE_xBYTES,x=256,512,1024,2048,4096 - atr_latency: EXMC_ALE_RE_DELAY_x_HCLK,x=1..16 - ctr_latency: EXMC_CLE_RE_DELAY_x_HCLK,x=1..16 - ecc_logic: ENABLE or DISABLE - databus_width: EXMC_NAND_DATABUS_WIDTH_8B,EXMC_NAND_DATABUS_WIDTH_16B - wait_feature: ENABLE or DISABLE - common_space_timing: struct exmc_nand_pccard_timing_parameter_struct set the time - attribute_space_timing: struct exmc_nand_pccard_timing_parameter_struct set the time - \param[out] none - \retval none -*/ -void exmc_nand_init(exmc_nand_parameter_struct* exmc_nand_init_struct) -{ - uint32_t npctl = 0x00000000U, npctcfg = 0x00000000U, npatcfg = 0x00000000U; - - npctl = (uint32_t)(exmc_nand_init_struct->wait_feature << NPCTL_NDWTEN_OFFSET)| - EXMC_NPCTL_NDTP | - exmc_nand_init_struct->databus_width | - (exmc_nand_init_struct->ecc_logic << NPCTL_ECCEN_OFFSET)| - exmc_nand_init_struct->ecc_size | - exmc_nand_init_struct->ctr_latency | - exmc_nand_init_struct->atr_latency; - - npctcfg = (uint32_t)((exmc_nand_init_struct->common_space_timing->setuptime - 1U) & EXMC_NPCTCFG_COMSET ) | - (((exmc_nand_init_struct->common_space_timing->waittime - 1U) << NPCTCFG_COMWAIT_OFFSET) & EXMC_NPCTCFG_COMWAIT ) | - ((exmc_nand_init_struct->common_space_timing->holdtime << NPCTCFG_COMHLD_OFFSET) & EXMC_NPCTCFG_COMHLD ) | - (((exmc_nand_init_struct->common_space_timing->databus_hiztime - 1U) << NPCTCFG_COMHIZ_OFFSET) & EXMC_NPCTCFG_COMHIZ ); - - npatcfg = (uint32_t)((exmc_nand_init_struct->attribute_space_timing->setuptime - 1U) & EXMC_NPATCFG_ATTSET ) | - (((exmc_nand_init_struct->attribute_space_timing->waittime - 1U) << NPATCFG_ATTWAIT_OFFSET) & EXMC_NPATCFG_ATTWAIT ) | - ((exmc_nand_init_struct->attribute_space_timing->holdtime << NPATCFG_ATTHLD_OFFSET) & EXMC_NPATCFG_ATTHLD ) | - (((exmc_nand_init_struct->attribute_space_timing->databus_hiztime -1U) << NPATCFG_ATTHIZ_OFFSET) & EXMC_NPATCFG_ATTHIZ ); - - /* EXMC_BANK1_NAND or EXMC_BANK2_NAND initialize */ - EXMC_NPCTL(exmc_nand_init_struct->nand_bank) = npctl; - EXMC_NPCTCFG(exmc_nand_init_struct->nand_bank) = npctcfg; - EXMC_NPATCFG(exmc_nand_init_struct->nand_bank) = npatcfg; -} - -/*! - \brief initialize the struct exmc_nand_init_struct - \param[in] none - \param[out] the initialized struct exmc_nand_init_struct pointer - \retval none -*/ -void exmc_nand_struct_para_init(exmc_nand_parameter_struct* exmc_nand_init_struct) -{ - /* configure the structure with default value */ - exmc_nand_init_struct->nand_bank = EXMC_BANK1_NAND; - exmc_nand_init_struct->wait_feature = DISABLE; - exmc_nand_init_struct->databus_width = EXMC_NAND_DATABUS_WIDTH_8B; - exmc_nand_init_struct->ecc_logic = DISABLE; - exmc_nand_init_struct->ecc_size = EXMC_ECC_SIZE_256BYTES; - exmc_nand_init_struct->ctr_latency = 0x0U; - exmc_nand_init_struct->atr_latency = 0x0U; - exmc_nand_init_struct->common_space_timing->setuptime = 0xFCU; - exmc_nand_init_struct->common_space_timing->waittime = 0xFCU; - exmc_nand_init_struct->common_space_timing->holdtime = 0xFCU; - exmc_nand_init_struct->common_space_timing->databus_hiztime = 0xFCU; - exmc_nand_init_struct->attribute_space_timing->setuptime = 0xFCU; - exmc_nand_init_struct->attribute_space_timing->waittime = 0xFCU; - exmc_nand_init_struct->attribute_space_timing->holdtime = 0xFCU; - exmc_nand_init_struct->attribute_space_timing->databus_hiztime = 0xFCU; -} - -/*! - \brief enable NAND bank - \param[in] nand_bank: specifie the NAND bank - \arg EXMC_BANKx_NAND(x=1,2) - \param[out] none - \retval none -*/ -void exmc_nand_enable(uint32_t nand_bank) -{ - EXMC_NPCTL(nand_bank) |= EXMC_NPCTL_NDBKEN; -} - -/*! - \brief disable NAND bank - \param[in] nand_bank: specifie the NAND bank - \arg EXMC_BANKx_NAND(x=1,2) - \param[out] none - \retval none -*/ -void exmc_nand_disable(uint32_t nand_bank) -{ - EXMC_NPCTL(nand_bank) &= ~EXMC_NPCTL_NDBKEN; -} - -/*! - \brief enable or disable the EXMC NAND ECC function - \param[in] nand_bank: specifie the NAND bank - \arg EXMC_BANKx_NAND(x=1,2) - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void exmc_nand_ecc_config(uint32_t nand_bank, ControlStatus newvalue) -{ - if (ENABLE == newvalue){ - /* enable the selected NAND bank ECC function */ - EXMC_NPCTL(nand_bank) |= EXMC_NPCTL_ECCEN; - }else{ - /* disable the selected NAND bank ECC function */ - EXMC_NPCTL(nand_bank) &= ~EXMC_NPCTL_ECCEN; - } -} - -/*! - \brief get the EXMC ECC value - \param[in] nand_bank: specifie the NAND bank - \arg EXMC_BANKx_NAND(x=1,2) - \param[out] none - \retval the error correction code(ECC) value -*/ -uint32_t exmc_ecc_get(uint32_t nand_bank) -{ - return (EXMC_NECC(nand_bank)); -} - -/*! - \brief deinitialize EXMC PC card bank - \param[in] none - \param[out] none - \retval none -*/ -void exmc_pccard_deinit(void) -{ - /* EXMC_BANK3_PCCARD */ - EXMC_NPCTL3 = BANK3_NPCTL_RESET; - EXMC_NPINTEN3 = BANK3_NPINTEN_RESET; - EXMC_NPCTCFG3 = BANK3_NPCTCFG_RESET; - EXMC_NPATCFG3 = BANK3_NPATCFG_RESET; - EXMC_PIOTCFG3 = BANK3_PIOTCFG3_RESET; -} - -/*! - \brief initialize EXMC PC card bank - \param[in] exmc_pccard_parameter_struct: configure the EXMC NAND parameter - atr_latency: EXMC_ALE_RE_DELAY_x_HCLK,x=1..16 - ctr_latency: EXMC_CLE_RE_DELAY_x_HCLK,x=1..16 - wait_feature: ENABLE or DISABLE - common_space_timing: struct exmc_nand_pccard_timing_parameter_struct set the time - attribute_space_timing: struct exmc_nand_pccard_timing_parameter_struct set the time - io_space_timing: exmc_nand_pccard_timing_parameter_struct set the time - \param[out] none - \retval none -*/ -void exmc_pccard_init(exmc_pccard_parameter_struct* exmc_pccard_init_struct) -{ - /* configure the EXMC bank3 PC card control register */ - EXMC_NPCTL3 = (uint32_t)(exmc_pccard_init_struct->wait_feature << NPCTL_NDWTEN_OFFSET) | - EXMC_NAND_DATABUS_WIDTH_16B | - exmc_pccard_init_struct->ctr_latency | - exmc_pccard_init_struct->atr_latency ; - - /* configure the EXMC bank3 PC card common space timing configuration register */ - EXMC_NPCTCFG3 = (uint32_t)((exmc_pccard_init_struct->common_space_timing->setuptime - 1U)& EXMC_NPCTCFG_COMSET ) | - (((exmc_pccard_init_struct->common_space_timing->waittime - 1U) << NPCTCFG_COMWAIT_OFFSET) & EXMC_NPCTCFG_COMWAIT ) | - ((exmc_pccard_init_struct->common_space_timing->holdtime << NPCTCFG_COMHLD_OFFSET) & EXMC_NPCTCFG_COMHLD ) | - (((exmc_pccard_init_struct->common_space_timing->databus_hiztime - 1U) << NPCTCFG_COMHIZ_OFFSET) & EXMC_NPCTCFG_COMHIZ ); - - /* configure the EXMC bank3 PC card attribute space timing configuration register */ - EXMC_NPATCFG3 = (uint32_t)((exmc_pccard_init_struct->attribute_space_timing->setuptime - 1U) & EXMC_NPATCFG_ATTSET ) | - (((exmc_pccard_init_struct->attribute_space_timing->waittime - 1U) << NPATCFG_ATTWAIT_OFFSET) & EXMC_NPATCFG_ATTWAIT ) | - ((exmc_pccard_init_struct->attribute_space_timing->holdtime << NPATCFG_ATTHLD_OFFSET) & EXMC_NPATCFG_ATTHLD )| - (((exmc_pccard_init_struct->attribute_space_timing->databus_hiztime -1U) << NPATCFG_ATTHIZ_OFFSET) & EXMC_NPATCFG_ATTHIZ ); - - /* configure the EXMC bank3 PC card io space timing configuration register */ - EXMC_PIOTCFG3 = (uint32_t)((exmc_pccard_init_struct->io_space_timing->setuptime - 1U) & EXMC_PIOTCFG3_IOSET ) | - (((exmc_pccard_init_struct->io_space_timing->waittime - 1U) << PIOTCFG_IOWAIT_OFFSET) & EXMC_PIOTCFG3_IOWAIT ) | - ((exmc_pccard_init_struct->io_space_timing->holdtime << PIOTCFG_IOHLD_OFFSET) & EXMC_PIOTCFG3_IOHLD )| - ((exmc_pccard_init_struct->io_space_timing->databus_hiztime << PIOTCFG_IOHIZ_OFFSET) & EXMC_PIOTCFG3_IOHIZ ); -} - -/*! - \brief initialize the struct exmc_pccard_parameter_struct - \param[in] none - \param[out] the initialized struct exmc_pccard_parameter_struct pointer - \retval none -*/ -void exmc_pccard_struct_para_init(exmc_pccard_parameter_struct* exmc_pccard_init_struct) -{ - /* configure the structure with default value */ - exmc_pccard_init_struct->wait_feature = DISABLE; - exmc_pccard_init_struct->ctr_latency = 0x0U; - exmc_pccard_init_struct->atr_latency = 0x0U; - exmc_pccard_init_struct->common_space_timing->setuptime = 0xFCU; - exmc_pccard_init_struct->common_space_timing->waittime = 0xFCU; - exmc_pccard_init_struct->common_space_timing->holdtime = 0xFCU; - exmc_pccard_init_struct->common_space_timing->databus_hiztime = 0xFCU; - exmc_pccard_init_struct->attribute_space_timing->setuptime = 0xFCU; - exmc_pccard_init_struct->attribute_space_timing->waittime = 0xFCU; - exmc_pccard_init_struct->attribute_space_timing->holdtime = 0xFCU; - exmc_pccard_init_struct->attribute_space_timing->databus_hiztime = 0xFCU; - exmc_pccard_init_struct->io_space_timing->setuptime = 0xFCU; - exmc_pccard_init_struct->io_space_timing->waittime = 0xFCU; - exmc_pccard_init_struct->io_space_timing->holdtime = 0xFCU; - exmc_pccard_init_struct->io_space_timing->databus_hiztime = 0xFCU; -} - -/*! - \brief enable PC Card Bank - \param[in] none - \param[out] none - \retval none -*/ -void exmc_pccard_enable(void) -{ - EXMC_NPCTL3 |= EXMC_NPCTL_NDBKEN; -} - -/*! - \brief disable PC Card Bank - \param[in] none - \param[out] none - \retval none -*/ -void exmc_pccard_disable(void) -{ - EXMC_NPCTL3 &= ~EXMC_NPCTL_NDBKEN; -} - -/*! - \brief enable EXMC interrupt - \param[in] bank: specifies the NAND bank, PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] interrupt_source: specify get which interrupt flag - one or more parameters can be selected which is shown as below: - \arg EXMC_NAND_PCCARD_INT_RISE: interrupt source of rising edge - \arg EXMC_NAND_PCCARD_INT_LEVEL: interrupt source of high-level - \arg EXMC_NAND_PCCARD_INT_FALL: interrupt source of falling edge - \param[out] none - \retval none -*/ -void exmc_interrupt_enable(uint32_t bank, uint32_t interrupt_source) -{ - /* NAND bank1, bank2 or PC card bank3 */ - EXMC_NPINTEN(bank) |= interrupt_source; -} - -/*! - \brief disable EXMC interrupt - \param[in] bank: specifies the NAND bank, PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] interrupt_source: specify get which interrupt flag - one or more parameters can be selected which is shown as below: - \arg EXMC_NAND_PCCARD_INT_RISE: interrupt source of rising edge - \arg EXMC_NAND_PCCARD_INT_LEVEL: interrupt source of high-level - \arg EXMC_NAND_PCCARD_INT_FALL: interrupt source of falling edge - \param[out] none - \retval none -*/ -void exmc_interrupt_disable(uint32_t bank, uint32_t interrupt_source) -{ - /* NAND bank1,bank2 or PC card bank3 */ - EXMC_NPINTEN(bank) &= ~interrupt_source; -} - -/*! - \brief check EXMC flag is set or not - \param[in] bank: specifies the NAND bank, PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC Card bank - \param[in] flag: specify get which flag - only one parameter can be selected which is shown as below: - \arg EXMC_NAND_PCCARD_FLAG_RISE: interrupt rising edge status - \arg EXMC_NAND_PCCARD_FLAG_LEVEL: interrupt high-level status - \arg EXMC_NAND_PCCARD_FLAG_FALL: interrupt falling edge status - \arg EXMC_NAND_PCCARD_FLAG_FIFOE: FIFO empty flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus exmc_flag_get(uint32_t bank, uint32_t flag) -{ - uint32_t status = 0x00000000U; - - /* NAND bank1,bank2 or PC card bank3 */ - status = EXMC_NPINTEN(bank); - - if ((status & flag) != (uint32_t)flag ){ - /* flag is reset */ - return RESET; - }else{ - /* flag is set */ - return SET; - } -} - -/*! - \brief clear EXMC flag - \param[in] bank: specifie the NAND bank, PCCARD bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] flag: specify get which flag - one or more parameters can be selected which is shown as below: - \arg EXMC_NAND_PCCARD_FLAG_RISE: interrupt rising edge status - \arg EXMC_NAND_PCCARD_FLAG_LEVEL: interrupt high-level status - \arg EXMC_NAND_PCCARD_FLAG_FALL: interrupt falling edge status - \arg EXMC_NAND_PCCARD_FLAG_FIFOE: FIFO empty flag - \param[out] none - \retval none -*/ -void exmc_flag_clear(uint32_t bank, uint32_t flag) -{ - /* NAND bank1,bank2 or PC card bank3 */ - EXMC_NPINTEN(bank) &= ~flag; -} - -/*! - \brief check EXMC interrupt flag is set or not - \param[in] bank: specifies the NAND bank, PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] interrupt_source: specify get which interrupt flag - only one parameter can be selected which is shown as below: - \arg EXMC_NAND_PCCARD_INT_RISE: interrupt source of rising edge - \arg EXMC_NAND_PCCARD_INT_LEVEL: interrupt source of high-level - \arg EXMC_NAND_PCCARD_INT_FALL: interrupt source of falling edge - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus exmc_interrupt_flag_get(uint32_t bank, uint32_t interrupt_source) -{ - uint32_t status = 0x00000000U,interrupt_enable = 0x00000000U,interrupt_state = 0x00000000U; - - /* NAND bank1,bank2 or PC card bank3 */ - status = EXMC_NPINTEN(bank); - interrupt_state = (status & (interrupt_source >> INTEN_INTS_OFFSET)); - - interrupt_enable = (status & interrupt_source); - - if ((interrupt_enable) && (interrupt_state)){ - /* interrupt flag is set */ - return SET; - }else{ - /* interrupt flag is reset */ - return RESET; - } -} - -/*! - \brief clear EXMC interrupt flag - \param[in] bank: specifies the NAND bank, PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] interrupt_source: specify get which interrupt flag - one or more parameters can be selected which is shown as below: - \arg EXMC_NAND_PCCARD_INT_RISE: interrupt source of rising edge - \arg EXMC_NAND_PCCARD_INT_LEVEL: interrupt source of high-level - \arg EXMC_NAND_PCCARD_INT_FALL: interrupt source of falling edge - \param[out] none - \retval none -*/ -void exmc_interrupt_flag_clear(uint32_t bank, uint32_t interrupt_source) -{ - /* NAND bank1, bank2 or PC card bank3 */ - EXMC_NPINTEN(bank) &= ~(interrupt_source >> INTEN_INTS_OFFSET); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_exti.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_exti.c deleted file mode 100644 index 35818f2..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_exti.c +++ /dev/null @@ -1,251 +0,0 @@ -/*! - \file gd32f10x_exti.c - \brief EXTI driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ -#include "gd32f10x_exti.h" - -#define EXTI_REG_RESET_VALUE ((uint32_t)0x00000000U) - -/*! - \brief deinitialize the EXTI - \param[in] none - \param[out] none - \retval none -*/ -void exti_deinit(void) -{ - /* reset the value of all the EXTI registers */ - EXTI_INTEN = EXTI_REG_RESET_VALUE; - EXTI_EVEN = EXTI_REG_RESET_VALUE; - EXTI_RTEN = EXTI_REG_RESET_VALUE; - EXTI_FTEN = EXTI_REG_RESET_VALUE; - EXTI_SWIEV = EXTI_REG_RESET_VALUE; -} - -/*! - \brief initialize the EXTI - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[in] mode: interrupt or event mode, refer to exti_mode_enum - only one parameter can be selected which is shown as below: - \arg EXTI_INTERRUPT: interrupt mode - \arg EXTI_EVENT: event mode - \param[in] trig_type: interrupt trigger type, refer to exti_trig_type_enum - only one parameter can be selected which is shown as below: - \arg EXTI_TRIG_RISING: rising edge trigger - \arg EXTI_TRIG_FALLING: falling trigger - \arg EXTI_TRIG_BOTH: rising and falling trigger - \arg EXTI_TRIG_NONE: without rising edge or falling edge trigger - \param[out] none - \retval none -*/ -void exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type) -{ - /* reset the EXTI line x */ - EXTI_INTEN &= ~(uint32_t)linex; - EXTI_EVEN &= ~(uint32_t)linex; - EXTI_RTEN &= ~(uint32_t)linex; - EXTI_FTEN &= ~(uint32_t)linex; - - /* set the EXTI mode and enable the interrupts or events from EXTI line x */ - switch(mode){ - case EXTI_INTERRUPT: - EXTI_INTEN |= (uint32_t)linex; - break; - case EXTI_EVENT: - EXTI_EVEN |= (uint32_t)linex; - break; - default: - break; - } - - /* set the EXTI trigger type */ - switch(trig_type){ - case EXTI_TRIG_RISING: - EXTI_RTEN |= (uint32_t)linex; - EXTI_FTEN &= ~(uint32_t)linex; - break; - case EXTI_TRIG_FALLING: - EXTI_RTEN &= ~(uint32_t)linex; - EXTI_FTEN |= (uint32_t)linex; - break; - case EXTI_TRIG_BOTH: - EXTI_RTEN |= (uint32_t)linex; - EXTI_FTEN |= (uint32_t)linex; - break; - case EXTI_TRIG_NONE: - default: - break; - } -} - -/*! - \brief enable the interrupts from EXTI line x - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_interrupt_enable(exti_line_enum linex) -{ - EXTI_INTEN |= (uint32_t)linex; -} - -/*! - \brief enable the events from EXTI line x - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_event_enable(exti_line_enum linex) -{ - EXTI_EVEN |= (uint32_t)linex; -} - -/*! - \brief disable the interrupt from EXTI line x - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_interrupt_disable(exti_line_enum linex) -{ - EXTI_INTEN &= ~(uint32_t)linex; -} - -/*! - \brief disable the events from EXTI line x - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_event_disable(exti_line_enum linex) -{ - EXTI_EVEN &= ~(uint32_t)linex; -} - -/*! - \brief get EXTI lines flag - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval FlagStatus: status of flag (RESET or SET) -*/ -FlagStatus exti_flag_get(exti_line_enum linex) -{ - if(RESET != (EXTI_PD & (uint32_t)linex)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear EXTI lines pending flag - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_flag_clear(exti_line_enum linex) -{ - EXTI_PD = (uint32_t)linex; -} - -/*! - \brief get EXTI lines flag when the interrupt flag is set - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval FlagStatus: status of flag (RESET or SET) -*/ -FlagStatus exti_interrupt_flag_get(exti_line_enum linex) -{ - if(RESET != (EXTI_PD & (uint32_t)linex)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear EXTI lines pending flag - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_interrupt_flag_clear(exti_line_enum linex) -{ - EXTI_PD = (uint32_t)linex; -} - -/*! - \brief enable EXTI software interrupt event - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_software_interrupt_enable(exti_line_enum linex) -{ - EXTI_SWIEV |= (uint32_t)linex; -} - -/*! - \brief disable EXTI software interrupt event - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_software_interrupt_disable(exti_line_enum linex) -{ - EXTI_SWIEV &= ~(uint32_t)linex; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_fmc.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_fmc.c deleted file mode 100644 index 78bff24..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_fmc.c +++ /dev/null @@ -1,964 +0,0 @@ -/*! - \file gd32f10x_fmc.c - \brief FMC driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_fmc.h" - -/*! - \brief set the wait state counter value - \param[in] wscntwait state counter value - \arg WS_WSCNT_0: FMC 0 wait state - \arg WS_WSCNT_1: FMC 1 wait state - \arg WS_WSCNT_2: FMC 2 wait state - \param[out] none - \retval none -*/ -void fmc_wscnt_set(uint32_t wscnt) -{ - uint32_t reg; - - reg = FMC_WS; - /* set the wait state counter value */ - reg &= ~FMC_WS_WSCNT; - FMC_WS = (reg | wscnt); -} - -/*! - \brief unlock the main FMC operation - \param[in] none - \param[out] none - \retval none -*/ -void fmc_unlock(void) -{ - if((RESET != (FMC_CTL0 & FMC_CTL0_LK))){ - /* write the FMC unlock key */ - FMC_KEY0 = UNLOCK_KEY0; - FMC_KEY0 = UNLOCK_KEY1; - } - - if(FMC_BANK0_SIZE < FMC_SIZE){ - /* write the FMC unlock key */ - if(RESET != (FMC_CTL1 & FMC_CTL1_LK)){ - FMC_KEY1 = UNLOCK_KEY0; - FMC_KEY1 = UNLOCK_KEY1; - } - } -} - -/*! - \brief unlock the FMC bank0 operation - this function can be used for all GD32F10x devices. - for GD32F10x_MD and GD32F10x_HD, this function unlocks bank0. - for GD32F10x_XD and GD32F10x_CL with flash no more than 512KB, it is equivalent to fmc_unlock function. - \param[in] none - \param[out] none - \retval none -*/ -void fmc_bank0_unlock(void) -{ - if((RESET != (FMC_CTL0 & FMC_CTL0_LK))){ - /* write the FMC unlock key */ - FMC_KEY0 = UNLOCK_KEY0; - FMC_KEY0 = UNLOCK_KEY1; - } -} - -/*! - \brief unlock the FMC bank1 operation - this function can be used for GD32F10x_XD and GD32F10x_CL with flash more than 512KB. - \param[in] none - \param[out] none - \retval none -*/ -void fmc_bank1_unlock(void) -{ - if((RESET != (FMC_CTL1 & FMC_CTL1_LK))){ - /* write the FMC unlock key */ - FMC_KEY1 = UNLOCK_KEY0; - FMC_KEY1 = UNLOCK_KEY1; - } -} - -/*! - \brief lock the main FMC operation - \param[in] none - \param[out] none - \retval none -*/ -void fmc_lock(void) -{ - /* set the LK bit */ - FMC_CTL0 |= FMC_CTL0_LK; - - if(FMC_BANK0_SIZE < FMC_SIZE){ - /* set the LK bit */ - FMC_CTL1 |= FMC_CTL1_LK; - } -} - -/*! - \brief lock the FMC bank0 operation - this function can be used for all GD32F10X devices. - for GD32F10x_MD and GD32F10x_HD, this function unlocks bank0. - for GD32F10x_XD and GD32F10x_CL with flash no more than 512KB, it is equivalent to fmc_unlock function. - \param[in] none - \param[out] none - \retval none -*/ -void fmc_bank0_lock(void) -{ - /* set the LK bit*/ - FMC_CTL0 |= FMC_CTL0_LK; -} - -/*! - \brief lock the FMC bank1 operation - this function can be used for GD32F10x_XD and GD32F10x_CL with flash more than 512KB. - \param[in] none - \param[out] none - \retval none -*/ -void fmc_bank1_lock(void) -{ - /* set the LK bit*/ - FMC_CTL1 |= FMC_CTL1_LK; -} - -/*! - \brief erase page - \param[in] page_address: the page address to be erased. - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_page_erase(uint32_t page_address) -{ - fmc_state_enum fmc_state; - - if(FMC_BANK0_SIZE < FMC_SIZE){ - if(FMC_BANK0_END_ADDRESS > page_address){ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* if the last operation is completed, start page erase */ - if(FMC_READY == fmc_state){ - FMC_CTL0 |= FMC_CTL0_PER; - FMC_ADDR0 = page_address; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PER bit */ - FMC_CTL0 &= ~FMC_CTL0_PER; - } - }else{ - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* if the last operation is completed, start page erase */ - if(FMC_READY == fmc_state){ - FMC_CTL1 |= FMC_CTL1_PER; - FMC_ADDR1 = page_address; - if(FMC_OBSTAT & FMC_OBSTAT_SPC){ - FMC_ADDR0 = page_address; - } - FMC_CTL1 |= FMC_CTL1_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PER bit */ - FMC_CTL1 &= ~FMC_CTL1_PER; - } - } - }else{ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* if the last operation is completed, start page erase */ - if(FMC_READY == fmc_state){ - FMC_CTL0 |= FMC_CTL0_PER; - FMC_ADDR0 = page_address; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PER bit */ - FMC_CTL0 &= ~FMC_CTL0_PER; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief erase whole chip - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_mass_erase(void) -{ - fmc_state_enum fmc_state; - if(FMC_BANK0_SIZE < FMC_SIZE){ - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - if(FMC_READY == fmc_state){ - /* start whole chip erase */ - FMC_CTL0 |= FMC_CTL0_MER; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the MER bit */ - FMC_CTL0 &= ~FMC_CTL0_MER; - } - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - if(FMC_READY == fmc_state){ - /* start whole chip erase */ - FMC_CTL1 |= FMC_CTL1_MER; - FMC_CTL1 |= FMC_CTL1_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the MER bit */ - FMC_CTL1 &= ~FMC_CTL1_MER; - } - }else{ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* start whole chip erase */ - FMC_CTL0 |= FMC_CTL0_MER; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the MER bit */ - FMC_CTL0 &= ~FMC_CTL0_MER; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief erase bank0 - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank0_erase(void) -{ - fmc_state_enum fmc_state = FMC_READY; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* start FMC bank0 erase */ - FMC_CTL0 |= FMC_CTL0_MER; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the MER bit */ - FMC_CTL0 &= ~FMC_CTL0_MER; - } - /* return the fmc state */ - return fmc_state; -} - -/*! - \brief erase bank1 - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank1_erase(void) -{ - fmc_state_enum fmc_state = FMC_READY; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* start FMC bank1 erase */ - FMC_CTL1 |= FMC_CTL1_MER; - FMC_CTL1 |= FMC_CTL1_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the MER bit */ - FMC_CTL1 &= ~FMC_CTL1_MER; - } - /* return the fmc state */ - return fmc_state; -} - -/*! - \brief program a word at the corresponding address - \param[in] address: address to program - \param[in] data: word to program - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_word_program(uint32_t address, uint32_t data) -{ - fmc_state_enum fmc_state = FMC_READY; - if(FMC_BANK0_SIZE < FMC_SIZE){ - if(FMC_BANK0_END_ADDRESS > address){ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG32(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - }else{ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL1 |= FMC_CTL1_PG; - REG32(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL1 &= ~FMC_CTL1_PG; - } - } - }else{ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG32(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief program a half word at the corresponding address - \param[in] address: address to program - \param[in] data: halfword to program - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_halfword_program(uint32_t address, uint16_t data) -{ - fmc_state_enum fmc_state = FMC_READY; - if(FMC_BANK0_SIZE < FMC_SIZE){ - if(FMC_BANK0_END_ADDRESS > address){ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG16(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - }else{ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL1 |= FMC_CTL1_PG; - REG16(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL1 &= ~FMC_CTL1_PG; - } - } - }else{ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG16(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief unlock the option byte operation - \param[in] none - \param[out] none - \retval none -*/ -void ob_unlock(void) -{ - if(RESET == (FMC_CTL0 & FMC_CTL0_OBWEN)){ - /* write the FMC key */ - FMC_OBKEY = UNLOCK_KEY0; - FMC_OBKEY = UNLOCK_KEY1; - } - - /* wait until OBWEN bit is set by hardware */ - while(RESET == (FMC_CTL0 & FMC_CTL0_OBWEN)){ - } -} - -/*! - \brief lock the option byte operation - \param[in] none - \param[out] none - \retval none -*/ -void ob_lock(void) -{ - /* reset the OBWEN bit */ - FMC_CTL0 &= ~FMC_CTL0_OBWEN; -} - -/*! - \brief erase the FMC option byte - unlock the FMC_CTL0 and option byte before calling this function - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_erase(void) -{ - uint16_t temp_spc = FMC_NSPC; - - fmc_state_enum fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - /* check the option byte security protection value */ - if(RESET != ob_spc_get()){ - temp_spc = FMC_USPC; - } - - if(FMC_READY == fmc_state){ - - /* start erase the option byte */ - FMC_CTL0 |= FMC_CTL0_OBER; - FMC_CTL0 |= FMC_CTL0_START; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* reset the OBER bit */ - FMC_CTL0 &= ~FMC_CTL0_OBER; - /* set the OBPG bit */ - FMC_CTL0 |= FMC_CTL0_OBPG; - /* no security protection */ - OB_SPC = (uint16_t)temp_spc; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - }else{ - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief enable write protection - \param[in] ob_wp: specify sector to be write protected, set the bit to 1 if - you want to protect the corresponding pages. meanwhile, sector - macro could used to set specific sector write protected. - one or more parameters can be selected which are shown as below: - \arg OB_WPx(x = 0..31): write protect specify sector - \arg OB_WP_ALL: write protect all sector - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_write_protection_enable(uint32_t ob_wp) -{ - uint16_t temp_wp0, temp_wp1, temp_wp2, temp_wp3; - - fmc_state_enum fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - ob_wp = (uint32_t)(~ob_wp); - temp_wp0 = (uint16_t)(ob_wp & OB_WP0_WP0); - temp_wp1 = (uint16_t)((ob_wp & OB_WP1_WP1) >> 8U); - temp_wp2 = (uint16_t)((ob_wp & OB_WP2_WP2) >> 16U); - temp_wp3 = (uint16_t)((ob_wp & OB_WP3_WP3) >> 24U); - - if(FMC_READY == fmc_state){ - - /* set the OBPG bit*/ - FMC_CTL0 |= FMC_CTL0_OBPG; - - if(0xFFU != temp_wp0){ - OB_WP0 = temp_wp0; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - } - if((FMC_READY == fmc_state) && (0xFFU != temp_wp1)){ - OB_WP1 = temp_wp1; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - } - if((FMC_READY == fmc_state) && (0xFFU != temp_wp2)){ - OB_WP2 = temp_wp2; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - } - if((FMC_READY == fmc_state) && (0xFFU != temp_wp3)){ - OB_WP3 = temp_wp3; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - } - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief configure security protection - \param[in] ob_spc: specify security protection - only one parameter can be selected which is shown as below: - \arg FMC_NSPC: no security protection - \arg FMC_USPC: under security protection - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_security_protection_config(uint8_t ob_spc) -{ - fmc_state_enum fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - FMC_CTL0 |= FMC_CTL0_OBER; - FMC_CTL0 |= FMC_CTL0_START; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* reset the OBER bit */ - FMC_CTL0 &= ~FMC_CTL0_OBER; - - /* start the option byte program */ - FMC_CTL0 |= FMC_CTL0_OBPG; - - OB_SPC = (uint16_t)ob_spc; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - }else{ - if(FMC_TOERR != fmc_state){ - /* reset the OBER bit */ - FMC_CTL0 &= ~FMC_CTL0_OBER; - } - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief program the FMC user option byte - \param[in] ob_fwdgt: option byte watchdog value - \arg OB_FWDGT_SW: software free watchdog - \arg OB_FWDGT_HW: hardware free watchdog - \param[in] ob_deepsleep: option byte deepsleep reset value - \arg OB_DEEPSLEEP_NRST: no reset when entering deepsleep mode - \arg OB_DEEPSLEEP_RST: generate a reset instead of entering deepsleep mode - \param[in] ob_stdby:option byte standby reset value - \arg OB_STDBY_NRST: no reset when entering standby mode - \arg OB_STDBY_RST: generate a reset instead of entering standby mode - \param[in] ob_boot: specifies the option byte boot bank value - \arg OB_BOOT_B0: boot from bank0 - \arg OB_BOOT_B1: boot from bank1 or bank0 if bank1 is void - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_user_write(uint8_t ob_fwdgt, uint8_t ob_deepsleep, uint8_t ob_stdby, uint8_t ob_boot) -{ - fmc_state_enum fmc_state = FMC_READY; - uint8_t temp; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the OBPG bit*/ - FMC_CTL0 |= FMC_CTL0_OBPG; - - temp = ((uint8_t)((uint8_t)((uint8_t)(ob_boot | ob_fwdgt) | ob_deepsleep) | ob_stdby) | OB_USER_MASK); - OB_USER = (uint16_t)temp; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief program option bytes data - \param[in] address: the option bytes address to be programmed - \param[in] data: the byte to be programmed - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_data_program(uint32_t address, uint8_t data) -{ - fmc_state_enum fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the OBPG bit */ - FMC_CTL0 |= FMC_CTL0_OBPG; - REG16(address) = data; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief get the FMC user option byte - \param[in] none - \param[out] none - \retval the FMC user option byte values -*/ -uint8_t ob_user_get(void) -{ - /* return the FMC user option byte value */ - return (uint8_t)(FMC_OBSTAT >> 2U); -} - -/*! - \brief get OB_DATA in register FMC_OBSTAT - \param[in] none - \param[out] none - \retval ob_data -*/ -uint16_t ob_data_get(void) -{ - return (uint16_t)(FMC_OBSTAT >> 10U); -} - -/*! - \brief get the FMC option byte write protection - \param[in] none - \param[out] none - \retval the FMC write protection option byte value -*/ -uint32_t ob_write_protection_get(void) -{ - /* return the FMC write protection option byte value */ - return FMC_WP; -} - -/*! - \brief get the FMC option byte security protection - \param[in] none - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus ob_spc_get(void) -{ - FlagStatus spc_state = RESET; - - if(RESET != (FMC_OBSTAT & FMC_OBSTAT_SPC)){ - spc_state = SET; - }else{ - spc_state = RESET; - } - return spc_state; -} - -/*! - \brief enable FMC interrupt - \param[in] interrupt: the FMC interrupt source - only one parameter can be selected which is shown as below: - \arg FMC_INT_BANK0_END: enable FMC end of program interrupt - \arg FMC_INT_BANK0_ERR: enable FMC error interrupt - \arg FMC_INT_BANK1_END: enable FMC bank1 end of program interrupt - \arg FMC_INT_BANK1_ERR: enable FMC bank1 error interrupt - \param[out] none - \retval none -*/ -void fmc_interrupt_enable(uint32_t interrupt) -{ - FMC_REG_VAL(interrupt) |= BIT(FMC_BIT_POS(interrupt)); -} - -/*! - \brief disable FMC interrupt - \param[in] interrupt: the FMC interrupt source - only one parameter can be selected which is shown as below: - \arg FMC_INT_BANK0_END: enable FMC end of program interrupt - \arg FMC_INT_BANK0_ERR: enable FMC error interrupt - \arg FMC_INT_BANK1_END: enable FMC bank1 end of program interrupt - \arg FMC_INT_BANK1_ERR: enable FMC bank1 error interrupt - \param[out] none - \retval none -*/ -void fmc_interrupt_disable(uint32_t interrupt) -{ - FMC_REG_VAL(interrupt) &= ~BIT(FMC_BIT_POS(interrupt)); -} - -/*! - \brief check flag is set or not - \param[in] flag: check FMC flag - only one parameter can be selected which is shown as below: - \arg FMC_FLAG_BANK0_BUSY: FMC bank0 busy flag bit - \arg FMC_FLAG_BANK0_PGERR: FMC bank0 operation error flag bit - \arg FMC_FLAG_BANK0_WPERR: FMC bank0 erase/program protection error flag bit - \arg FMC_FLAG_BANK0_END: FMC bank0 end of operation flag bit - \arg FMC_FLAG_OBERR: FMC option bytes read error flag bit - \arg FMC_FLAG_BANK1_BUSY: FMC bank1 busy flag bit - \arg FMC_FLAG_BANK1_PGERR: FMC bank1 operation error flag bit - \arg FMC_FLAG_BANK1_WPERR: FMC bank1 erase/program protection error flag bit - \arg FMC_FLAG_BANK1_END: FMC bank1 end of operation flag bit - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus fmc_flag_get(uint32_t flag) -{ - if(RESET != (FMC_REG_VAL(flag) & BIT(FMC_BIT_POS(flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear the FMC flag - \param[in] flag: clear FMC flag - only one parameter can be selected which is shown as below: - \arg FMC_FLAG_BANK0_PGERR: FMC bank0 operation error flag bit - \arg FMC_FLAG_BANK0_WPERR: FMC bank0 erase/program protection error flag bit - \arg FMC_FLAG_BANK0_END: FMC bank0 end of operation flag bit - \arg FMC_FLAG_BANK1_PGERR: FMC bank1 operation error flag bit - \arg FMC_FLAG_BANK1_WPERR: FMC bank1 erase/program protection error flag bit - \arg FMC_FLAG_BANK1_END: FMC bank1 end of operation flag bit - \param[out] none - \retval none -*/ -void fmc_flag_clear(uint32_t flag) -{ - FMC_REG_VAL(flag) |= BIT(FMC_BIT_POS(flag)); -} - -/*! - \brief get FMC interrupt flag state - \param[in] flag: FMC interrupt flags, refer to fmc_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg FMC_INT_FLAG_BANK0_PGERR: FMC bank0 operation error interrupt flag bit - \arg FMC_INT_FLAG_BANK0_WPERR: FMC bank0 erase/program protection error interrupt flag bit - \arg FMC_INT_FLAG_BANK0_END: FMC bank0 end of operation interrupt flag bit - \arg FMC_INT_FLAG_BANK1_PGERR: FMC bank1 operation error interrupt flag bit - \arg FMC_INT_FLAG_BANK1_WPERR: FMC bank1 erase/program protection error interrupt flag bit - \arg FMC_INT_FLAG_BANK1_END: FMC bank1 end of operation interrupt flag bit - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus fmc_interrupt_flag_get(fmc_interrupt_flag_enum flag) -{ - uint32_t ret1 = RESET; - uint32_t ret2 = RESET; - - if(FMC_STAT0_REG_OFFSET == FMC_REG_OFFSET_GET(flag)){ - /* get the staus of interrupt flag */ - ret1 = (uint32_t)(FMC_REG_VALS(flag) & BIT(FMC_BIT_POS0(flag))); - /* get the staus of interrupt enale bit */ - ret2 = (uint32_t)(FMC_CTL0 & BIT(FMC_BIT_POS1(flag))); - }else{ - /* get the staus of interrupt flag */ - ret1 = (uint32_t)(FMC_REG_VALS(flag) & BIT(FMC_BIT_POS0(flag))); - /* get the staus of interrupt enale bit */ - ret2 = (uint32_t)(FMC_CTL1 & BIT(FMC_BIT_POS1(flag))); - } - - if(ret1 && ret2){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear FMC interrupt flag state - \param[in] flag: FMC interrupt flags, refer to can_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg FMC_INT_FLAG_BANK0_PGERR: FMC bank0 operation error interrupt flag bit - \arg FMC_INT_FLAG_BANK0_WPERR: FMC bank0 erase/program protection error interrupt flag bit - \arg FMC_INT_FLAG_BANK0_END: FMC bank0 end of operation interrupt flag bit - \arg FMC_INT_FLAG_BANK1_PGERR: FMC bank1 operation error interrupt flag bit - \arg FMC_INT_FLAG_BANK1_WPERR: FMC bank1 erase/program protection error interrupt flag bit - \arg FMC_INT_FLAG_BANK1_END: FMC bank1 end of operation interrupt flag bit - \param[out] none - \retval none -*/ -void fmc_interrupt_flag_clear(fmc_interrupt_flag_enum flag) -{ - FMC_REG_VALS(flag) |= BIT(FMC_BIT_POS0(flag)); -} - -/*! - \brief get the FMC bank0 state - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank0_state_get(void) -{ - fmc_state_enum fmc_state = FMC_READY; - - if((uint32_t)0x00U != (FMC_STAT0 & FMC_STAT0_BUSY)){ - fmc_state = FMC_BUSY; - }else{ - if((uint32_t)0x00U != (FMC_STAT0 & FMC_STAT0_WPERR)){ - fmc_state = FMC_WPERR; - }else{ - if((uint32_t)0x00U != (FMC_STAT0 & (FMC_STAT0_PGERR))){ - fmc_state = FMC_PGERR; - } - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief get the FMC bank1 state - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank1_state_get(void) -{ - fmc_state_enum fmc_state = FMC_READY; - - if((uint32_t)0x00U != (FMC_STAT1 & FMC_STAT1_BUSY)){ - fmc_state = FMC_BUSY; - }else{ - if((uint32_t)0x00U != (FMC_STAT1 & FMC_STAT1_WPERR)){ - fmc_state = FMC_WPERR; - }else{ - if((uint32_t)0x00U != (FMC_STAT1 & FMC_STAT1_PGERR)){ - fmc_state = FMC_PGERR; - } - } - } - - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief check whether FMC bank0 is ready or not - \param[in] timeout: count of loop - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank0_ready_wait(uint32_t timeout) -{ - fmc_state_enum fmc_state = FMC_BUSY; - - /* wait for FMC ready */ - do{ - /* get FMC state */ - fmc_state = fmc_bank0_state_get(); - timeout--; - }while((FMC_BUSY == fmc_state) && (0x00U != timeout)); - - if(FMC_BUSY == fmc_state){ - fmc_state = FMC_TOERR; - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief check whether FMC bank1 is ready or not - \param[in] timeout: count of loop - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank1_ready_wait(uint32_t timeout) -{ - fmc_state_enum fmc_state = FMC_BUSY; - - /* wait for FMC ready */ - do{ - /* get FMC state */ - fmc_state = fmc_bank1_state_get(); - timeout--; - }while((FMC_BUSY == fmc_state) && (0x00U != timeout)); - - if(FMC_BUSY == fmc_state){ - fmc_state = FMC_TOERR; - } - /* return the FMC state */ - return fmc_state; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_fwdgt.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_fwdgt.c deleted file mode 100644 index f5650ad..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_fwdgt.c +++ /dev/null @@ -1,154 +0,0 @@ -/*! - \file gd32f10x_fwdgt.c - \brief FWDGT driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_fwdgt.h" - -/* write value to FWDGT_CTL_CMD bit field */ -#define CTL_CMD(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) -/* write value to FWDGT_RLD_RLD bit field */ -#define RLD_RLD(regval) (BITS(0,11) & ((uint32_t)(regval) << 0)) - -/*! - \brief enable write access to FWDGT_PSC and FWDGT_RLD - \param[in] none - \param[out] none - \retval none -*/ -void fwdgt_write_enable(void) -{ - FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; -} - -/*! - \brief disable write access to FWDGT_PSC and FWDGT_RLD - \param[in] none - \param[out] none - \retval none -*/ -void fwdgt_write_disable(void) -{ - FWDGT_CTL = FWDGT_WRITEACCESS_DISABLE; -} - -/*! - \brief start the free watchdog timer counter - \param[in] none - \param[out] none - \retval none -*/ -void fwdgt_enable(void) -{ - FWDGT_CTL = FWDGT_KEY_ENABLE; -} - -/*! - \brief reload the counter of FWDGT - \param[in] none - \param[out] none - \retval none -*/ -void fwdgt_counter_reload(void) -{ - FWDGT_CTL = FWDGT_KEY_RELOAD; -} - -/*! - \brief configure counter reload value, and prescaler divider value - \param[in] reload_value: specify reload value(0x0000 - 0x0FFF) - \param[in] prescaler_div: FWDGT prescaler value - only one parameter can be selected which is shown as below: - \arg FWDGT_PSC_DIV4: FWDGT prescaler set to 4 - \arg FWDGT_PSC_DIV8: FWDGT prescaler set to 8 - \arg FWDGT_PSC_DIV16: FWDGT prescaler set to 16 - \arg FWDGT_PSC_DIV32: FWDGT prescaler set to 32 - \arg FWDGT_PSC_DIV64: FWDGT prescaler set to 64 - \arg FWDGT_PSC_DIV128: FWDGT prescaler set to 128 - \arg FWDGT_PSC_DIV256: FWDGT prescaler set to 256 - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus fwdgt_config(uint16_t reload_value, uint8_t prescaler_div) -{ - uint32_t timeout = FWDGT_PSC_TIMEOUT; - uint32_t flag_status = RESET; - - /* enable write access to FWDGT_PSC,and FWDGT_RLD */ - FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; - /* wait until the PUD flag to be reset */ - do{ - flag_status = FWDGT_STAT & FWDGT_STAT_PUD; - }while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); - - if((uint32_t)RESET != flag_status){ - return ERROR; - } - /* configure FWDGT */ - FWDGT_PSC = (uint32_t)prescaler_div; - - timeout = FWDGT_RLD_TIMEOUT; - /* wait until the RUD flag to be reset */ - do{ - flag_status = FWDGT_STAT & FWDGT_STAT_RUD; - }while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); - - if((uint32_t)RESET != flag_status){ - return ERROR; - } - FWDGT_RLD = RLD_RLD(reload_value); - /* reload the counter */ - FWDGT_CTL = FWDGT_KEY_RELOAD; - - return SUCCESS; -} - -/*! - \brief get flag state of FWDGT - \param[in] flag: flag to get - only one parameter can be selected which is shown as below: - \arg FWDGT_FLAG_PUD: a write operation to FWDGT_PSC register is on going - \arg FWDGT_FLAG_RUD: a write operation to FWDGT_RLD register is on going - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus fwdgt_flag_get(uint16_t flag) -{ - if(FWDGT_STAT & flag){ - return SET; - } - - return RESET; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_gpio.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_gpio.c deleted file mode 100644 index d31a660..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_gpio.c +++ /dev/null @@ -1,538 +0,0 @@ -/*! - \file gd32f10x_gpio.c - \brief GPIO driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_gpio.h" - -#define AFIO_EXTI_SOURCE_MASK ((uint8_t)0x03U) /*!< AFIO exti source selection mask*/ -#define AFIO_EXTI_SOURCE_FIELDS ((uint8_t)0x04U) /*!< select AFIO exti source registers */ -#define LSB_16BIT_MASK ((uint16_t)0xFFFFU) /*!< LSB 16-bit mask */ -#define PCF_POSITION_MASK ((uint32_t)0x000F0000U) /*!< AFIO_PCF register position mask */ -#define PCF_SWJCFG_MASK ((uint32_t)0xF0FFFFFFU) /*!< AFIO_PCF register SWJCFG mask */ -#define PCF_LOCATION1_MASK ((uint32_t)0x00200000U) /*!< AFIO_PCF register location1 mask */ -#define PCF_LOCATION2_MASK ((uint32_t)0x00100000U) /*!< AFIO_PCF register location2 mask */ -#define AFIO_PCF1_FIELDS ((uint32_t)0x80000000U) /*!< select AFIO_PCF1 register */ -#define GPIO_OUTPUT_PORT_OFFSET ((uint32_t)4U) /*!< GPIO event output port offset*/ - -/*! - \brief reset GPIO port - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[out] none - \retval none -*/ -void gpio_deinit(uint32_t gpio_periph) -{ - switch(gpio_periph){ - case GPIOA: - /* reset GPIOA */ - rcu_periph_reset_enable(RCU_GPIOARST); - rcu_periph_reset_disable(RCU_GPIOARST); - break; - case GPIOB: - /* reset GPIOB */ - rcu_periph_reset_enable(RCU_GPIOBRST); - rcu_periph_reset_disable(RCU_GPIOBRST); - break; - case GPIOC: - /* reset GPIOC */ - rcu_periph_reset_enable(RCU_GPIOCRST); - rcu_periph_reset_disable(RCU_GPIOCRST); - break; - case GPIOD: - /* reset GPIOD */ - rcu_periph_reset_enable(RCU_GPIODRST); - rcu_periph_reset_disable(RCU_GPIODRST); - break; - case GPIOE: - /* reset GPIOE */ - rcu_periph_reset_enable(RCU_GPIOERST); - rcu_periph_reset_disable(RCU_GPIOERST); - break; - case GPIOF: - /* reset GPIOF */ - rcu_periph_reset_enable(RCU_GPIOFRST); - rcu_periph_reset_disable(RCU_GPIOFRST); - break; - case GPIOG: - /* reset GPIOG */ - rcu_periph_reset_enable(RCU_GPIOGRST); - rcu_periph_reset_disable(RCU_GPIOGRST); - break; - default: - break; - } -} - -/*! - \brief reset alternate function I/O(AFIO) - \param[in] none - \param[out] none - \retval none -*/ -void gpio_afio_deinit(void) -{ - rcu_periph_reset_enable(RCU_AFRST); - rcu_periph_reset_disable(RCU_AFRST); -} - -/*! - \brief GPIO parameter initialization - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] mode: gpio pin mode - only one parameter can be selected which is shown as below: - \arg GPIO_MODE_AIN: analog input mode - \arg GPIO_MODE_IN_FLOATING: floating input mode - \arg GPIO_MODE_IPD: pull-down input mode - \arg GPIO_MODE_IPU: pull-up input mode - \arg GPIO_MODE_OUT_OD: GPIO output with open-drain - \arg GPIO_MODE_OUT_PP: GPIO output with push-pull - \arg GPIO_MODE_AF_OD: AFIO output with open-drain - \arg GPIO_MODE_AF_PP: AFIO output with push-pull - \param[in] speed: gpio output max speed value - only one parameter can be selected which is shown as below: - \arg GPIO_OSPEED_10MHZ: output max speed 10MHz - \arg GPIO_OSPEED_2MHZ: output max speed 2MHz - \arg GPIO_OSPEED_50MHZ: output max speed 50MHz - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - - \param[out] none - \retval none -*/ -void gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin) -{ - uint16_t i; - uint32_t temp_mode = 0U; - uint32_t reg = 0U; - - /* GPIO mode configuration */ - temp_mode = (uint32_t)(mode & ((uint32_t)0x0FU)); - - /* GPIO speed configuration */ - if(((uint32_t)0x00U) != ((uint32_t)mode & ((uint32_t)0x10U))){ - /* output mode max speed:10MHz,2MHz,50MHz */ - temp_mode |= (uint32_t)speed; - } - - /* configure the eight low port pins with GPIO_CTL0 */ - for(i = 0U;i < 8U;i++){ - if((1U << i) & pin){ - reg = GPIO_CTL0(gpio_periph); - - /* clear the specified pin mode bits */ - reg &= ~GPIO_MODE_MASK(i); - /* set the specified pin mode bits */ - reg |= GPIO_MODE_SET(i, temp_mode); - - /* set IPD or IPU */ - if(GPIO_MODE_IPD == mode){ - /* reset the corresponding OCTL bit */ - GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin); - }else{ - /* set the corresponding OCTL bit */ - if(GPIO_MODE_IPU == mode){ - GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin); - } - } - /* set GPIO_CTL0 register */ - GPIO_CTL0(gpio_periph) = reg; - } - } - /* configure the eight high port pins with GPIO_CTL1 */ - for(i = 8U;i < 16U;i++){ - if((1U << i) & pin){ - reg = GPIO_CTL1(gpio_periph); - - /* clear the specified pin mode bits */ - reg &= ~GPIO_MODE_MASK(i - 8U); - /* set the specified pin mode bits */ - reg |= GPIO_MODE_SET(i - 8U, temp_mode); - - /* set IPD or IPU */ - if(GPIO_MODE_IPD == mode){ - /* reset the corresponding OCTL bit */ - GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin); - }else{ - /* set the corresponding OCTL bit */ - if(GPIO_MODE_IPU == mode){ - GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin); - } - } - /* set GPIO_CTL1 register */ - GPIO_CTL1(gpio_periph) = reg; - } - } -} - -/*! - \brief set GPIO pin - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval none -*/ -void gpio_bit_set(uint32_t gpio_periph, uint32_t pin) -{ - GPIO_BOP(gpio_periph) = (uint32_t)pin; -} - -/*! - \brief reset GPIO pin - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval none -*/ -void gpio_bit_reset(uint32_t gpio_periph, uint32_t pin) -{ - GPIO_BC(gpio_periph) = (uint32_t)pin; -} - -/*! - \brief write data to the specified GPIO pin - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[in] bit_value: SET or RESET - \arg RESET: clear the port pin - \arg SET: set the port pin - \param[out] none - \retval none -*/ -void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value) -{ - if(RESET != bit_value){ - GPIO_BOP(gpio_periph) = (uint32_t)pin; - }else{ - GPIO_BC(gpio_periph) = (uint32_t)pin; - } -} - -/*! - \brief write data to the specified GPIO port - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] data: specify the value to be written to the port output data register - \param[out] none - \retval none -*/ -void gpio_port_write(uint32_t gpio_periph,uint16_t data) -{ - GPIO_OCTL(gpio_periph) = (uint32_t)data; -} - -/*! - \brief get GPIO pin input status - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval input status of gpio pin: SET or RESET -*/ -FlagStatus gpio_input_bit_get(uint32_t gpio_periph,uint32_t pin) -{ - if((uint32_t)RESET != (GPIO_ISTAT(gpio_periph)&(pin))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief get GPIO port input status - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[out] none - \retval input status of gpio all pins -*/ -uint16_t gpio_input_port_get(uint32_t gpio_periph) -{ - return (uint16_t)(GPIO_ISTAT(gpio_periph)); -} - -/*! - \brief get GPIO pin output status - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval output status of gpio pin: SET or RESET -*/ -FlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin) -{ - if((uint32_t)RESET !=(GPIO_OCTL(gpio_periph)&(pin))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief get GPIO port output status - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[out] none - \retval output status of gpio all pins -*/ -uint16_t gpio_output_port_get(uint32_t gpio_periph) -{ - return ((uint16_t)GPIO_OCTL(gpio_periph)); -} - -/*! - \brief configure GPIO pin remap - \param[in] gpio_remap: select the pin to remap - \arg GPIO_SPI0_REMAP: SPI0 remapping - \arg GPIO_I2C0_REMAP: I2C0 remapping - \arg GPIO_USART0_REMAP: USART0 remapping - \arg GPIO_USART1_REMAP: USART1 remapping - \arg GPIO_USART2_PARTIAL_REMAP: USART2 partial remapping - \arg GPIO_USART2_FULL_REMAP: USART2 full remapping - \arg GPIO_TIMER0_PARTIAL_REMAP: TIMER0 partial remapping - \arg GPIO_TIMER0_FULL_REMAP: TIMER0 full remapping - \arg GPIO_TIMER1_PARTIAL_REMAP1: TIMER1 partial remapping - \arg GPIO_TIMER1_PARTIAL_REMAP2: TIMER1 partial remapping - \arg GPIO_TIMER1_FULL_REMAP: TIMER1 full remapping - \arg GPIO_TIMER2_PARTIAL_REMAP: TIMER2 partial remapping - \arg GPIO_TIMER2_FULL_REMAP: TIMER2 full remapping - \arg GPIO_TIMER3_REMAP: TIMER3 remapping - \arg GPIO_CAN_PARTIAL_REMAP: CAN partial remapping(only for GD32F10X_MD, GD32F10X_HD devices and GD32F10X_XD devices) - \arg GPIO_CAN_FULL_REMAP: CAN full remapping(only for GD32F10X_MD, GD32F10X_HD devices and GD32F10X_XD devices) - \arg GPIO_CAN0_PARTIAL_REMAP: CAN0 partial remapping(only for GD32F10X_CL devices) - \arg GPIO_CAN0_FULL_REMAP: CAN0 full remapping(only for GD32F10X_CL devices) - \arg GPIO_PD01_REMAP: PD01 remapping - \arg GPIO_TIMER4CH3_IREMAP: TIMER4 channel3 internal remapping(only for GD32F10X_CL devices and GD32F10X_HD devices) - \arg GPIO_ADC0_ETRGINS_REMAP: ADC0 external trigger inserted conversion remapping(only for GD32F10X_MD, GD32F10X_HD devices and GD32F10X_XD devices) - \arg GPIO_ADC0_ETRGREG_REMAP: ADC0 external trigger regular conversion remapping(only for GD32F10X_MD, GD32F10X_HD devices and GD32F10X_XD devices) - \arg GPIO_ADC1_ETRGINS_REMAP: ADC1 external trigger inserted conversion remapping(only for GD32F10X_MD, GD32F10X_HD devices and GD32F10X_XD devices) - \arg GPIO_ADC1_ETRGREG_REMAP: ADC1 external trigger regular conversion remapping(only for GD32F10X_MD, GD32F10X_HD devices and GD32F10X_XD devices) - \arg GPIO_ENET_REMAP: ENET remapping(only for GD32F10X_CL devices) - \arg GPIO_CAN1_REMAP: CAN1 remapping(only for GD32F10X_CL devices) - \arg GPIO_SWJ_NONJTRST_REMAP: full SWJ(JTAG-DP + SW-DP),but without NJTRST - \arg GPIO_SWJ_SWDPENABLE_REMAP: JTAG-DP disabled and SW-DP enabled - \arg GPIO_SWJ_DISABLE_REMAP: JTAG-DP disabled and SW-DP disabled - \arg GPIO_SPI2_REMAP: SPI2 remapping(only for GD32F10X_CL, GD32F10X_HD and GD32F10X_XD devices) - \arg GPIO_TIMER1ITI1_REMAP: TIMER1 internal trigger 1 remapping(only for GD32F10X_CL devices) - \arg GPIO_PTP_PPS_REMAP: ethernet PTP PPS remapping(only for GD32F10X_CL devices) - \arg GPIO_TIMER8_REMAP: TIMER8 remapping - \arg GPIO_TIMER9_REMAP: TIMER9 remapping - \arg GPIO_TIMER10_REMAP: TIMER10 remapping - \arg GPIO_TIMER12_REMAP: TIMER12 remapping - \arg GPIO_TIMER13_REMAP: TIMER13 remapping - \arg GPIO_EXMC_NADV_REMAP: EXMC_NADV connect/disconnect - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue) -{ - uint32_t remap1 = 0U, remap2 = 0U, temp_reg = 0U, temp_mask = 0U; - - if(AFIO_PCF1_FIELDS == (remap & AFIO_PCF1_FIELDS)){ - /* get AFIO_PCF1 regiter value */ - temp_reg = AFIO_PCF1; - }else{ - /* get AFIO_PCF0 regiter value */ - temp_reg = AFIO_PCF0; - } - - temp_mask = (remap & PCF_POSITION_MASK) >> 0x10U; - remap1 = remap & LSB_16BIT_MASK; - - /* judge pin remap type */ - if((PCF_LOCATION1_MASK | PCF_LOCATION2_MASK) == (remap & (PCF_LOCATION1_MASK | PCF_LOCATION2_MASK))){ - temp_reg &= PCF_SWJCFG_MASK; - AFIO_PCF0 &= PCF_SWJCFG_MASK; - }else if(PCF_LOCATION2_MASK == (remap & PCF_LOCATION2_MASK)){ - remap2 = ((uint32_t)0x03U) << temp_mask; - temp_reg &= ~remap2; - temp_reg |= ~PCF_SWJCFG_MASK; - }else{ - temp_reg &= ~(remap1 << ((remap >> 0x15U)*0x10U)); - temp_reg |= ~PCF_SWJCFG_MASK; - } - - /* set pin remap value */ - if(DISABLE != newvalue){ - temp_reg |= (remap1 << ((remap >> 0x15U)*0x10U)); - } - - if(AFIO_PCF1_FIELDS == (remap & AFIO_PCF1_FIELDS)){ - /* set AFIO_PCF1 regiter value */ - AFIO_PCF1 = temp_reg; - }else{ - /* set AFIO_PCF0 regiter value */ - AFIO_PCF0 = temp_reg; - } -} - -/*! - \brief select GPIO pin exti sources - \param[in] gpio_outputport: gpio event output port - \arg GPIO_PORT_SOURCE_GPIOA: output port source A - \arg GPIO_PORT_SOURCE_GPIOB: output port source B - \arg GPIO_PORT_SOURCE_GPIOC: output port source C - \arg GPIO_PORT_SOURCE_GPIOD: output port source D - \arg GPIO_PORT_SOURCE_GPIOE: output port source E - \arg GPIO_PORT_SOURCE_GPIOF: output port source F - \arg GPIO_PORT_SOURCE_GPIOG: output port source G - \param[in] gpio_outputpin: GPIO_PIN_SOURCE_x(x=0..15) - \param[out] none - \retval none -*/ -void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin) -{ - uint32_t source = 0U; - source = ((uint32_t)0x0FU) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK)); - - /* select EXTI sources */ - if(GPIO_PIN_SOURCE_4 > output_pin){ - /* select EXTI0/EXTI1/EXTI2/EXTI3 */ - AFIO_EXTISS0 &= ~source; - AFIO_EXTISS0 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); - }else if(GPIO_PIN_SOURCE_8 > output_pin){ - /* select EXTI4/EXTI5/EXTI6/EXTI7 */ - AFIO_EXTISS1 &= ~source; - AFIO_EXTISS1 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); - }else if(GPIO_PIN_SOURCE_12 > output_pin){ - /* select EXTI8/EXTI9/EXTI10/EXTI11 */ - AFIO_EXTISS2 &= ~source; - AFIO_EXTISS2 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); - }else{ - /* select EXTI12/EXTI13/EXTI14/EXTI15 */ - AFIO_EXTISS3 &= ~source; - AFIO_EXTISS3 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); - } -} - -/*! - \brief configure GPIO pin event output - \param[in] output_port: gpio event output port - only one parameter can be selected which are shown as below: - \arg GPIO_EVENT_PORT_GPIOA: event output port A - \arg GPIO_EVENT_PORT_GPIOB: event output port B - \arg GPIO_EVENT_PORT_GPIOC: event output port C - \arg GPIO_EVENT_PORT_GPIOD: event output port D - \arg GPIO_EVENT_PORT_GPIOE: event output port E - \arg GPIO_EVENT_PORT_GPIOE: event output port F - \arg GPIO_EVENT_PORT_GPIOE: event output port G - \param[in] output_pin: - only one parameter can be selected which are shown as below: - \arg GPIO_EVENT_PIN_x(x=0..15) - \param[out] none - \retval none -*/ -void gpio_event_output_config(uint8_t output_port, uint8_t output_pin) -{ - uint32_t reg = 0U; - reg = AFIO_EC; - - /* clear AFIO_EC_PORT and AFIO_EC_PIN bits */ - reg &= (uint32_t)(~(AFIO_EC_PORT|AFIO_EC_PIN)); - - reg |= (uint32_t)((uint32_t)output_port << GPIO_OUTPUT_PORT_OFFSET); - reg |= (uint32_t)output_pin; - - AFIO_EC = reg; -} - -/*! - \brief enable GPIO pin event output - \param[in] none - \param[out] none - \retval none -*/ -void gpio_event_output_enable(void) -{ - AFIO_EC |= AFIO_EC_EOE; -} - -/*! - \brief disable GPIO pin event output - \param[in] none - \param[out] none - \retval none -*/ -void gpio_event_output_disable(void) -{ - AFIO_EC &= (uint32_t)(~AFIO_EC_EOE); -} - -/*! - \brief lock GPIO pin - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval none -*/ -void gpio_pin_lock(uint32_t gpio_periph, uint32_t pin) -{ - uint32_t lock = 0x00010000U; - lock |= pin; - - /* lock key writing sequence: write 1 -> write 0 -> write 1 -> read 0 -> read 1 */ - GPIO_LOCK(gpio_periph) = (uint32_t)lock; - GPIO_LOCK(gpio_periph) = (uint32_t)pin; - GPIO_LOCK(gpio_periph) = (uint32_t)lock; - lock = GPIO_LOCK(gpio_periph); - lock = GPIO_LOCK(gpio_periph); -} - -#ifdef GD32F10X_CL -/*! - \brief select ethernet MII or RMII PHY - \param[in] gpio_enetsel: ethernet MII or RMII PHY selection - \arg GPIO_ENET_PHY_MII: configure ethernet MAC for connection with an MII PHY - \arg GPIO_ENET_PHY_RMII: configure ethernet MAC for connection with an RMII PHY - \param[out] none - \retval none -*/ -void gpio_ethernet_phy_select(uint32_t gpio_enetsel) -{ - /* clear AFIO_PCF0_ENET_PHY_SEL bit */ - AFIO_PCF0 &= (uint32_t)(~AFIO_PCF0_ENET_PHY_SEL); - - /* select MII or RMII PHY */ - AFIO_PCF0 |= (uint32_t)gpio_enetsel; -} -#endif diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_i2c.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_i2c.c deleted file mode 100644 index 8796326..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_i2c.c +++ /dev/null @@ -1,714 +0,0 @@ -/*! - \file gd32f10x_i2c.c - \brief I2C driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2019-04-16, V2.1.1, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_i2c.h" - -/* I2C register bit mask */ -#define I2CCLK_MAX ((uint32_t)0x00000036U) /*!< i2cclk maximum value */ -#define I2CCLK_MIN ((uint32_t)0x00000002U) /*!< i2cclk minimum value */ -#define I2C_FLAG_MASK ((uint32_t)0x0000FFFFU) /*!< i2c flag mask */ -#define I2C_ADDRESS_MASK ((uint32_t)0x000003FFU) /*!< i2c address mask */ -#define I2C_ADDRESS2_MASK ((uint32_t)0x000000FEU) /*!< the second i2c address mask */ - -/* I2C register bit offset */ -#define STAT1_PECV_OFFSET ((uint32_t)8U) /* bit offset of PECV in I2C_STAT1 */ - -/*! - \brief reset I2C - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_deinit(uint32_t i2c_periph) -{ - switch(i2c_periph){ - case I2C0: - /* reset I2C0 */ - rcu_periph_reset_enable(RCU_I2C0RST); - rcu_periph_reset_disable(RCU_I2C0RST); - break; - case I2C1: - /* reset I2C1 */ - rcu_periph_reset_enable(RCU_I2C1RST); - rcu_periph_reset_disable(RCU_I2C1RST); - break; - default: - break; - } -} - -/*! - \brief configure I2C clock - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] clkspeed: I2C clock speed, supports standard mode (up to 100 kHz), fast mode (up to 400 kHz) - \param[in] dutycyc: duty cycle in fast mode - only one parameter can be selected which is shown as below: - \arg I2C_DTCY_2: T_low/T_high=2 - \arg I2C_DTCY_16_9: T_low/T_high=16/9 - \param[out] none - \retval none -*/ -void i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc) -{ - uint32_t pclk1, clkc, freq, risetime; - uint32_t temp; - - pclk1 = rcu_clock_freq_get(CK_APB1); - /* I2C peripheral clock frequency */ - freq = (uint32_t)(pclk1/1000000U); - if(freq >= I2CCLK_MAX){ - freq = I2CCLK_MAX; - } - temp = I2C_CTL1(i2c_periph); - temp &= ~I2C_CTL1_I2CCLK; - temp |= freq; - - I2C_CTL1(i2c_periph) = temp; - - if(100000U >= clkspeed){ - /* the maximum SCL rise time is 1000ns in standard mode */ - risetime = (uint32_t)((pclk1/1000000U)+1U); - if(risetime >= I2CCLK_MAX){ - I2C_RT(i2c_periph) = I2CCLK_MAX; - }else if(risetime <= I2CCLK_MIN){ - I2C_RT(i2c_periph) = I2CCLK_MIN; - }else{ - I2C_RT(i2c_periph) = risetime; - } - clkc = (uint32_t)(pclk1/(clkspeed*2U)); - if(clkc < 0x04U){ - /* the CLKC in standard mode minmum value is 4 */ - clkc = 0x04U; - } - I2C_CKCFG(i2c_periph) |= (I2C_CKCFG_CLKC & clkc); - - }else if(400000U >= clkspeed){ - /* the maximum SCL rise time is 300ns in fast mode */ - I2C_RT(i2c_periph) = (uint32_t)(((freq*(uint32_t)300U)/(uint32_t)1000U)+(uint32_t)1U); - if(I2C_DTCY_2 == dutycyc){ - /* I2C duty cycle is 2 */ - clkc = (uint32_t)(pclk1/(clkspeed*3U)); - I2C_CKCFG(i2c_periph) &= ~I2C_CKCFG_DTCY; - }else{ - /* I2C duty cycle is 16/9 */ - clkc = (uint32_t)(pclk1/(clkspeed*25U)); - I2C_CKCFG(i2c_periph) |= I2C_CKCFG_DTCY; - } - if(0U == (clkc & I2C_CKCFG_CLKC)){ - /* the CLKC in fast mode minmum value is 1 */ - clkc |= 0x0001U; - } - I2C_CKCFG(i2c_periph) |= I2C_CKCFG_FAST; - I2C_CKCFG(i2c_periph) |= clkc; - }else{ - } -} - -/*! - \brief configure I2C address - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] mode: - only one parameter can be selected which is shown as below: - \arg I2C_I2CMODE_ENABLE: I2C mode - \arg I2C_SMBUSMODE_ENABLE: SMBus mode - \param[in] addformat: 7bits or 10bits - only one parameter can be selected which is shown as below: - \arg I2C_ADDFORMAT_7BITS: 7bits - \arg I2C_ADDFORMAT_10BITS: 10bits - \param[in] addr: I2C address - \param[out] none - \retval none -*/ -void i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr) -{ - /* SMBus/I2C mode selected */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_SMBEN); - ctl |= mode; - I2C_CTL0(i2c_periph) = ctl; - /* configure address */ - addr = addr & I2C_ADDRESS_MASK; - I2C_SADDR0(i2c_periph) = (addformat | addr); -} - -/*! - \brief SMBus type selection - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] type: - only one parameter can be selected which is shown as below: - \arg I2C_SMBUS_DEVICE: device - \arg I2C_SMBUS_HOST: host - \param[out] none - \retval none -*/ -void i2c_smbus_type_config(uint32_t i2c_periph, uint32_t type) -{ - if(I2C_SMBUS_HOST == type){ - I2C_CTL0(i2c_periph) |= I2C_CTL0_SMBSEL; - }else{ - I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_SMBSEL); - } -} - -/*! - \brief whether or not to send an ACK - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] ack: - only one parameter can be selected which is shown as below: - \arg I2C_ACK_ENABLE: ACK will be sent - \arg I2C_ACK_DISABLE: ACK will not be sent - \param[out] none - \retval none -*/ -void i2c_ack_config(uint32_t i2c_periph, uint32_t ack) -{ - if(I2C_ACK_ENABLE == ack){ - I2C_CTL0(i2c_periph) |= I2C_CTL0_ACKEN; - }else{ - I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_ACKEN); - } -} - -/*! - \brief configure I2C POAP position - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] pos: - only one parameter can be selected which is shown as below: - \arg I2C_ACKPOS_CURRENT: whether to send ACK or not for the current - \arg I2C_ACKPOS_NEXT: whether to send ACK or not for the next byte - \param[out] none - \retval none -*/ -void i2c_ackpos_config(uint32_t i2c_periph, uint32_t pos) -{ - /* configure I2C POAP position */ - if(I2C_ACKPOS_NEXT == pos){ - I2C_CTL0(i2c_periph) |= I2C_CTL0_POAP; - }else{ - I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_POAP); - } -} - -/*! - \brief master sends slave address - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] addr: slave address - \param[in] trandirection: transmitter or receiver - only one parameter can be selected which is shown as below: - \arg I2C_TRANSMITTER: transmitter - \arg I2C_RECEIVER: receiver - \param[out] none - \retval none -*/ -void i2c_master_addressing(uint32_t i2c_periph, uint32_t addr, uint32_t trandirection) -{ - /* master is a transmitter or a receiver */ - if(I2C_TRANSMITTER == trandirection){ - addr = addr & I2C_TRANSMITTER; - }else{ - addr = addr | I2C_RECEIVER; - } - /* send slave address */ - I2C_DATA(i2c_periph) = addr; -} - -/*! - \brief enable dual-address mode - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] addr: the second address in dual-address mode - \param[out] none - \retval none -*/ -void i2c_dualaddr_enable(uint32_t i2c_periph, uint32_t addr) -{ - /* configure address */ - addr = addr & I2C_ADDRESS2_MASK; - I2C_SADDR1(i2c_periph) = (I2C_SADDR1_DUADEN | addr); -} - -/*! - \brief disable dual-address mode - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_dualaddr_disable(uint32_t i2c_periph) -{ - I2C_SADDR1(i2c_periph) &= ~(I2C_SADDR1_DUADEN); -} - -/*! - \brief enable I2C - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_enable(uint32_t i2c_periph) -{ - I2C_CTL0(i2c_periph) |= I2C_CTL0_I2CEN; -} - -/*! - \brief disable I2C - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_disable(uint32_t i2c_periph) -{ - I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_I2CEN); -} - -/*! - \brief generate a START condition on I2C bus - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_start_on_bus(uint32_t i2c_periph) -{ - I2C_CTL0(i2c_periph) |= I2C_CTL0_START; -} - -/*! - \brief generate a STOP condition on I2C bus - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_stop_on_bus(uint32_t i2c_periph) -{ - I2C_CTL0(i2c_periph) |= I2C_CTL0_STOP; -} - -/*! - \brief I2C transmit data function - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] data: data of transmission - \param[out] none - \retval none -*/ -void i2c_data_transmit(uint32_t i2c_periph, uint8_t data) -{ - I2C_DATA(i2c_periph) = DATA_TRANS(data); -} - -/*! - \brief I2C receive data function - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval data of received -*/ -uint8_t i2c_data_receive(uint32_t i2c_periph) -{ - return (uint8_t)DATA_RECV(I2C_DATA(i2c_periph)); -} - -/*! - \brief enable I2C DMA mode - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] dmastate: - only one parameter can be selected which is shown as below: - \arg I2C_DMA_ON: DMA mode enable - \arg I2C_DMA_OFF: DMA mode disable - \param[out] none - \retval none -*/ -void i2c_dma_enable(uint32_t i2c_periph, uint32_t dmastate) -{ - /* configure I2C DMA function */ - uint32_t ctl = 0U; - - ctl = I2C_CTL1(i2c_periph); - ctl &= ~(I2C_CTL1_DMAON); - ctl |= dmastate; - I2C_CTL1(i2c_periph) = ctl; -} - -/*! - \brief configure whether next DMA EOT is DMA last transfer or not - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] dmalast: - only one parameter can be selected which is shown as below: - \arg I2C_DMALST_ON: next DMA EOT is the last transfer - \arg I2C_DMALST_OFF: next DMA EOT is not the last transfer - \param[out] none - \retval none -*/ -void i2c_dma_last_transfer_config(uint32_t i2c_periph, uint32_t dmalast) -{ - /* configure DMA last transfer */ - uint32_t ctl = 0U; - - ctl = I2C_CTL1(i2c_periph); - ctl &= ~(I2C_CTL1_DMALST); - ctl |= dmalast; - I2C_CTL1(i2c_periph) = ctl; -} - -/*! - \brief whether to stretch SCL low when data is not ready in slave mode - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] stretchpara: - only one parameter can be selected which is shown as below: - \arg I2C_SCLSTRETCH_ENABLE: SCL stretching is enabled - \arg I2C_SCLSTRETCH_DISABLE: SCL stretching is disabled - \param[out] none - \retval none -*/ -void i2c_stretch_scl_low_config(uint32_t i2c_periph, uint32_t stretchpara) -{ - /* configure I2C SCL strerching enable or disable */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_SS); - ctl |= stretchpara; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief whether or not to response to a general call - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] gcallpara: - only one parameter can be selected which is shown as below: - \arg I2C_GCEN_ENABLE: slave will response to a general call - \arg I2C_GCEN_DISABLE: slave will not response to a general call - \param[out] none - \retval none -*/ -void i2c_slave_response_to_gcall_config(uint32_t i2c_periph, uint32_t gcallpara) -{ - /* configure slave response to a general call enable or disable */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_GCEN); - ctl |= gcallpara; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief software reset I2C - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] sreset: - only one parameter can be selected which is shown as below: - \arg I2C_SRESET_SET: I2C is under reset - \arg I2C_SRESET_RESET: I2C is not under reset - \param[out] none - \retval none -*/ -void i2c_software_reset_config(uint32_t i2c_periph, uint32_t sreset) -{ - /* modify CTL0 and configure software reset I2C state */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_SRESET); - ctl |= sreset; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief I2C PEC calculation on or off - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] pecstate: - only one parameter can be selected which is shown as below: - \arg I2C_PEC_ENABLE: PEC calculation on - \arg I2C_PEC_DISABLE: PEC calculation off - \param[out] none - \retval none -*/ -void i2c_pec_enable(uint32_t i2c_periph, uint32_t pecstate) -{ - /* on/off PEC calculation */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_PECEN); - ctl |= pecstate; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief I2C whether to transfer PEC value - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] pecpara: - only one parameter can be selected which is shown as below: - \arg I2C_PECTRANS_ENABLE: transfer PEC - \arg I2C_PECTRANS_DISABLE: not transfer PEC - \param[out] none - \retval none -*/ -void i2c_pec_transfer_enable(uint32_t i2c_periph, uint32_t pecpara) -{ - /* whether to transfer PEC */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_PECTRANS); - ctl |= pecpara; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief get packet error checking value - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval PEC value -*/ -uint8_t i2c_pec_value_get(uint32_t i2c_periph) -{ - return (uint8_t)((I2C_STAT1(i2c_periph) & I2C_STAT1_PECV)>>STAT1_PECV_OFFSET); -} - -/*! - \brief I2C issue alert through SMBA pin - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] smbuspara: - only one parameter can be selected which is shown as below: - \arg I2C_SALTSEND_ENABLE: issue alert through SMBA pin - \arg I2C_SALTSEND_DISABLE: not issue alert through SMBA pin - \param[out] none - \retval none -*/ -void i2c_smbus_issue_alert(uint32_t i2c_periph, uint32_t smbuspara) -{ - /* issue alert through SMBA pin configure*/ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_SALT); - ctl |= smbuspara; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief enable or disable I2C ARP protocol in SMBus switch - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] arpstate: - only one parameter can be selected which is shown as below: - \arg I2C_ARP_ENABLE: enable ARP - \arg I2C_ARP_DISABLE: disable ARP - \param[out] none - \retval none -*/ -void i2c_smbus_arp_enable(uint32_t i2c_periph, uint32_t arpstate) -{ - /* enable or disable I2C ARP protocol*/ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_ARPEN); - ctl |= arpstate; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief check I2C flag is set or not - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] flag: I2C flags, refer to i2c_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_FLAG_SBSEND: start condition send out - \arg I2C_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode - \arg I2C_FLAG_BTC: byte transmission finishes - \arg I2C_FLAG_ADD10SEND: header of 10-bit address is sent in master mode - \arg I2C_FLAG_STPDET: stop condition detected in slave mode - \arg I2C_FLAG_RBNE: I2C_DATA is not Empty during receiving - \arg I2C_FLAG_TBE: I2C_DATA is empty during transmitting - \arg I2C_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus - \arg I2C_FLAG_LOSTARB: arbitration lost in master mode - \arg I2C_FLAG_AERR: acknowledge error - \arg I2C_FLAG_OUERR: overrun or underrun situation occurs in slave mode - \arg I2C_FLAG_PECERR: PEC error when receiving data - \arg I2C_FLAG_SMBTO: timeout signal in SMBus mode - \arg I2C_FLAG_SMBALT: SMBus alert status - \arg I2C_FLAG_MASTER: a flag indicating whether I2C block is in master or slave mode - \arg I2C_FLAG_I2CBSY: busy flag - \arg I2C_FLAG_TRS: whether the I2C is a transmitter or a receiver - \arg I2C_FLAG_RXGC: general call address (00h) received - \arg I2C_FLAG_DEFSMB: default address of SMBus device - \arg I2C_FLAG_HSTSMB: SMBus host header detected in slave mode - \arg I2C_FLAG_DUMOD: dual flag in slave mode indicating which address is matched in dual-address mode - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag) -{ - if(RESET != (I2C_REG_VAL(i2c_periph, flag) & BIT(I2C_BIT_POS(flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear I2C flag - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] flag: I2C flags, refer to i2c_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_FLAG_SMBALT: SMBus Alert status - \arg I2C_FLAG_SMBTO: timeout signal in SMBus mode - \arg I2C_FLAG_PECERR: PEC error when receiving data - \arg I2C_FLAG_OUERR: over-run or under-run situation occurs in slave mode - \arg I2C_FLAG_AERR: acknowledge error - \arg I2C_FLAG_LOSTARB: arbitration lost in master mode - \arg I2C_FLAG_BERR: a bus error - \arg I2C_FLAG_ADDSEND: cleared by reading I2C_STAT0 and reading I2C_STAT1 - \param[out] none - \retval none -*/ -void i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag) -{ - if(I2C_FLAG_ADDSEND == flag){ - /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */ - I2C_STAT0(i2c_periph); - I2C_STAT1(i2c_periph); - }else{ - I2C_REG_VAL(i2c_periph, flag) &= ~BIT(I2C_BIT_POS(flag)); - } -} - -/*! - \brief enable I2C interrupt - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] interrupt: I2C interrupts, refer to i2c_interrupt_enum - only one parameter can be selected which is shown as below: - \arg I2C_INT_ERR: error interrupt enable - \arg I2C_INT_EV: event interrupt enable - \arg I2C_INT_BUF: buffer interrupt enable - \param[out] none - \retval none -*/ -void i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) -{ - I2C_REG_VAL(i2c_periph, interrupt) |= BIT(I2C_BIT_POS(interrupt)); -} - -/*! - \brief disable I2C interrupt - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] interrupt: I2C interrupts, refer to i2c_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_INT_ERR: error interrupt enable - \arg I2C_INT_EV: event interrupt enable - \arg I2C_INT_BUF: buffer interrupt enable - \param[out] none - \retval none -*/ -void i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) -{ - I2C_REG_VAL(i2c_periph, interrupt) &= ~BIT(I2C_BIT_POS(interrupt)); -} - -/*! - \brief check I2C interrupt flag - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] int_flag: I2C interrupt flags, refer to i2c_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_INT_FLAG_SBSEND: start condition sent out in master mode interrupt flag - \arg I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag - \arg I2C_INT_FLAG_BTC: byte transmission finishes - \arg I2C_INT_FLAG_ADD10SEND: header of 10-bit address is sent in master mode interrupt flag - \arg I2C_INT_FLAG_STPDET: etop condition detected in slave mode interrupt flag - \arg I2C_INT_FLAG_RBNE: I2C_DATA is not Empty during receiving interrupt flag - \arg I2C_INT_FLAG_TBE: I2C_DATA is empty during transmitting interrupt flag - \arg I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag - \arg I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag - \arg I2C_INT_FLAG_AERR: acknowledge error interrupt flag - \arg I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag - \arg I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag - \arg I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag - \arg I2C_INT_FLAG_SMBALT: SMBus Alert status interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) -{ - uint32_t intenable = 0U, flagstatus = 0U, bufie; - - /* check BUFIE */ - bufie = I2C_CTL1(i2c_periph)&I2C_CTL1_BUFIE; - - /* get the interrupt enable bit status */ - intenable = (I2C_REG_VAL(i2c_periph, int_flag) & BIT(I2C_BIT_POS(int_flag))); - /* get the corresponding flag bit status */ - flagstatus = (I2C_REG_VAL2(i2c_periph, int_flag) & BIT(I2C_BIT_POS2(int_flag))); - - if((I2C_INT_FLAG_RBNE == int_flag) || (I2C_INT_FLAG_TBE == int_flag)){ - if(intenable && bufie){ - intenable = 1U; - }else{ - intenable = 0U; - } - } - if((0U != flagstatus) && (0U != intenable)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear I2C interrupt flag - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] int_flag: I2C interrupt flags, refer to i2c_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag - \arg I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag - \arg I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag - \arg I2C_INT_FLAG_AERR: acknowledge error interrupt flag - \arg I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag - \arg I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag - \arg I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag - \arg I2C_INT_FLAG_SMBALT: SMBus Alert status interrupt flag - \param[out] none - \retval none -*/ -void i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) -{ - if(I2C_INT_FLAG_ADDSEND == int_flag){ - /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */ - I2C_STAT0(i2c_periph); - I2C_STAT1(i2c_periph); - }else{ - I2C_REG_VAL2(i2c_periph, int_flag) &= ~BIT(I2C_BIT_POS2(int_flag)); - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_misc.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_misc.c deleted file mode 100644 index 7ea386b..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_misc.c +++ /dev/null @@ -1,187 +0,0 @@ -/*! - \file gd32f10x_misc.c - \brief MISC driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_misc.h" - -/*! - \brief set the priority group - \param[in] nvic_prigroup: the NVIC priority group - \arg NVIC_PRIGROUP_PRE0_SUB4:0 bits for pre-emption priority 4 bits for subpriority - \arg NVIC_PRIGROUP_PRE1_SUB3:1 bits for pre-emption priority 3 bits for subpriority - \arg NVIC_PRIGROUP_PRE2_SUB2:2 bits for pre-emption priority 2 bits for subpriority - \arg NVIC_PRIGROUP_PRE3_SUB1:3 bits for pre-emption priority 1 bits for subpriority - \arg NVIC_PRIGROUP_PRE4_SUB0:4 bits for pre-emption priority 0 bits for subpriority - \param[out] none - \retval none -*/ -void nvic_priority_group_set(uint32_t nvic_prigroup) -{ - /* set the priority group value */ - SCB->AIRCR = NVIC_AIRCR_VECTKEY_MASK | nvic_prigroup; -} - -/*! - \brief enable NVIC request - \param[in] nvic_irq: the NVIC interrupt request, detailed in IRQn_Type - \param[in] nvic_irq_pre_priority: the pre-emption priority needed to set - \param[in] nvic_irq_sub_priority: the subpriority needed to set - \param[out] none - \retval none -*/ -void nvic_irq_enable(uint8_t nvic_irq, - uint8_t nvic_irq_pre_priority, - uint8_t nvic_irq_sub_priority) -{ - uint32_t temp_priority = 0x00U, temp_pre = 0x00U, temp_sub = 0x00U; - - /* use the priority group value to get the temp_pre and the temp_sub */ - switch ((SCB->AIRCR) & (uint32_t)0x700U) { - case NVIC_PRIGROUP_PRE0_SUB4: - temp_pre = 0U; - temp_sub = 0x4U; - break; - case NVIC_PRIGROUP_PRE1_SUB3: - temp_pre = 1U; - temp_sub = 0x3U; - break; - case NVIC_PRIGROUP_PRE2_SUB2: - temp_pre = 2U; - temp_sub = 0x2U; - break; - case NVIC_PRIGROUP_PRE3_SUB1: - temp_pre = 3U; - temp_sub = 0x1U; - break; - case NVIC_PRIGROUP_PRE4_SUB0: - temp_pre = 4U; - temp_sub = 0x0U; - break; - default: - nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); - temp_pre = 2U; - temp_sub = 0x2U; - break; - } - - /* get the temp_priority to fill the NVIC->IP register */ - temp_priority = (uint32_t)nvic_irq_pre_priority << (0x4U - temp_pre); - temp_priority |= nvic_irq_sub_priority &(0x0FU >> (0x4U - temp_sub)); - temp_priority = temp_priority << 0x04U; - NVIC->IP[nvic_irq] = (uint8_t)temp_priority; - - /* enable the selected IRQ */ - NVIC->ISER[nvic_irq >> 0x05U] = (uint32_t)0x01U << (nvic_irq & (uint8_t)0x1FU); -} - -/*! - \brief disable NVIC request - \param[in] nvic_irq: the NVIC interrupt request, detailed in IRQn_Type - \param[out] none - \retval none -*/ -void nvic_irq_disable(uint8_t nvic_irq) -{ - /* disable the selected IRQ.*/ - NVIC->ICER[nvic_irq >> 0x05U] = (uint32_t)0x01U << (nvic_irq & (uint8_t)0x1FU); -} - -/*! - \brief set the NVIC vector table base address - \param[in] nvic_vict_tab: the RAM or FLASH base address - \arg NVIC_VECTTAB_RAM: RAM base address - \are NVIC_VECTTAB_FLASH: Flash base address - \param[in] offset: Vector Table offset - \param[out] none - \retval none -*/ -void nvic_vector_table_set(uint32_t nvic_vict_tab, uint32_t offset) -{ - SCB->VTOR = nvic_vict_tab | (offset & NVIC_VECTTAB_OFFSET_MASK); - __DSB(); -} - -/*! - \brief set the state of the low power mode - \param[in] lowpower_mode: the low power mode state - \arg SCB_LPM_SLEEP_EXIT_ISR: if chose this para, the system always enter low power - mode by exiting from ISR - \arg SCB_LPM_DEEPSLEEP: if chose this para, the system will enter the DEEPSLEEP mode - \arg SCB_LPM_WAKE_BY_ALL_INT: if chose this para, the lowpower mode can be woke up - by all the enable and disable interrupts - \param[out] none - \retval none -*/ -void system_lowpower_set(uint8_t lowpower_mode) -{ - SCB->SCR |= (uint32_t)lowpower_mode; -} - -/*! - \brief reset the state of the low power mode - \param[in] lowpower_mode: the low power mode state - \arg SCB_LPM_SLEEP_EXIT_ISR: if chose this para, the system will exit low power - mode by exiting from ISR - \arg SCB_LPM_DEEPSLEEP: if chose this para, the system will enter the SLEEP mode - \arg SCB_LPM_WAKE_BY_ALL_INT: if chose this para, the lowpower mode only can be - woke up by the enable interrupts - \param[out] none - \retval none -*/ -void system_lowpower_reset(uint8_t lowpower_mode) -{ - SCB->SCR &= (~(uint32_t)lowpower_mode); -} - -/*! - \brief set the systick clock source - \param[in] systick_clksource: the systick clock source needed to choose - \arg SYSTICK_CLKSOURCE_HCLK: systick clock source is from HCLK - \arg SYSTICK_CLKSOURCE_HCLK_DIV8: systick clock source is from HCLK/8 - \param[out] none - \retval none -*/ - -void systick_clksource_set(uint32_t systick_clksource) -{ - if(SYSTICK_CLKSOURCE_HCLK == systick_clksource ){ - /* set the systick clock source from HCLK */ - SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; - }else{ - /* set the systick clock source from HCLK/8 */ - SysTick->CTRL &= SYSTICK_CLKSOURCE_HCLK_DIV8; - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_pmu.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_pmu.c deleted file mode 100644 index 341335c..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_pmu.c +++ /dev/null @@ -1,282 +0,0 @@ -/*! - \file gd32f10x_pmu.c - \brief PMU driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2019-11-26, V2.1.1, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_pmu.h" - -/*! - \brief reset PMU register - \param[in] none - \param[out] none - \retval none -*/ -void pmu_deinit(void) -{ - /* reset PMU */ - rcu_periph_reset_enable(RCU_PMURST); - rcu_periph_reset_disable(RCU_PMURST); -} - -/*! - \brief select low voltage detector threshold - \param[in] lvdt_n: - only one parameter can be selected which is shown as below: - \arg PMU_LVDT_0: voltage threshold is 2.2V - \arg PMU_LVDT_1: voltage threshold is 2.3V - \arg PMU_LVDT_2: voltage threshold is 2.4V - \arg PMU_LVDT_3: voltage threshold is 2.5V - \arg PMU_LVDT_4: voltage threshold is 2.6V - \arg PMU_LVDT_5: voltage threshold is 2.7V - \arg PMU_LVDT_6: voltage threshold is 2.8V - \arg PMU_LVDT_7: voltage threshold is 2.9V - \param[out] none - \retval none -*/ -void pmu_lvd_select(uint32_t lvdt_n) -{ - /* disable LVD */ - PMU_CTL &= ~PMU_CTL_LVDEN; - /* clear LVDT bits */ - PMU_CTL &= ~PMU_CTL_LVDT; - /* set LVDT bits according to lvdt_n */ - PMU_CTL |= lvdt_n; - /* enable LVD */ - PMU_CTL |= PMU_CTL_LVDEN; -} - -/*! - \brief disable PMU lvd - \param[in] none - \param[out] none - \retval none -*/ -void pmu_lvd_disable(void) -{ - /* disable LVD */ - PMU_CTL &= ~PMU_CTL_LVDEN; -} - -/*! - \brief PMU work at sleep mode - \param[in] sleepmodecmd: - only one parameter can be selected which is shown as below: - \arg WFI_CMD: use WFI command - \arg WFE_CMD: use WFE command - \param[out] none - \retval none -*/ -void pmu_to_sleepmode(uint8_t sleepmodecmd) -{ - /* clear sleepdeep bit of Cortex-M3 system control register */ - SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); - - /* select WFI or WFE command to enter sleep mode */ - if(WFI_CMD == sleepmodecmd){ - __WFI(); - }else{ - __WFE(); - } -} - -/*! - \brief PMU work at deepsleep mode - \param[in] ldo: - only one parameter can be selected which is shown as below: - \arg PMU_LDO_NORMAL: LDO work at normal power mode when pmu enter deepsleep mode - \arg PMU_LDO_LOWPOWER: LDO work at low power mode when pmu enter deepsleep mode - \param[in] deepsleepmodecmd: - only one parameter can be selected which is shown as below: - \arg WFI_CMD: use WFI command - \arg WFE_CMD: use WFE command - \param[out] none - \retval none -*/ -void pmu_to_deepsleepmode(uint32_t ldo,uint8_t deepsleepmodecmd) -{ - static uint32_t reg_snap[ 4 ]; - /* clear stbmod and ldolp bits */ - PMU_CTL &= ~((uint32_t)(PMU_CTL_STBMOD | PMU_CTL_LDOLP)); - - /* set ldolp bit according to pmu_ldo */ - PMU_CTL |= ldo; - - /* set sleepdeep bit of Cortex-M3 system control register */ - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - - reg_snap[0] = REG32(0xE000E010U); - reg_snap[1] = REG32(0xE000E100U); - reg_snap[2] = REG32(0xE000E104U); - reg_snap[3] = REG32(0xE000E108U); - - REG32( 0xE000E010U ) &= 0x00010004U; - REG32( 0xE000E180U ) = 0XFF7FF83DU; - REG32( 0xE000E184U ) = 0XBFFFF8FFU; - REG32( 0xE000E188U ) = 0xFFFFFFFFU; - - /* select WFI or WFE command to enter deepsleep mode */ - if(WFI_CMD == deepsleepmodecmd){ - __WFI(); - }else{ - __SEV(); - __WFE(); - __WFE(); - } - - REG32(0xE000E010U) = reg_snap[0] ; - REG32(0xE000E100U) = reg_snap[1] ; - REG32(0xE000E104U) = reg_snap[2] ; - REG32(0xE000E108U) = reg_snap[3] ; - - /* reset sleepdeep bit of Cortex-M3 system control register */ - SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); -} - -/*! - \brief pmu work at standby mode - \param[in] standbymodecmd: - only one parameter can be selected which is shown as below: - \arg WFI_CMD: use WFI command - \arg WFE_CMD: use WFE command - \param[out] none - \retval none -*/ -void pmu_to_standbymode(uint8_t standbymodecmd) -{ - /* set sleepdeep bit of Cortex-M3 system control register */ - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - - /* set stbmod bit */ - PMU_CTL |= PMU_CTL_STBMOD; - - /* reset wakeup flag */ - PMU_CTL |= PMU_CTL_WURST; - - /* select WFI or WFE command to enter standby mode */ - if(WFI_CMD == standbymodecmd){ - __WFI(); - }else{ - __WFE(); - } -} - -/*! - \brief enable wakeup pin - \param[in] none - \param[out] none - \retval none -*/ -void pmu_wakeup_pin_enable(void) -{ - PMU_CS |= PMU_CS_WUPEN; -} - -/*! - \brief disable wakeup pin - \param[in] none - \param[out] none - \retval none -*/ -void pmu_wakeup_pin_disable(void) -{ - PMU_CS &= ~PMU_CS_WUPEN; -} - -/*! - \brief enable write access to the registers in backup domain - \param[in] none - \param[out] none - \retval none -*/ -void pmu_backup_write_enable(void) -{ - PMU_CTL |= PMU_CTL_BKPWEN; -} - -/*! - \brief disable write access to the registers in backup domain - \param[in] none - \param[out] none - \retval none -*/ -void pmu_backup_write_disable(void) -{ - PMU_CTL &= ~PMU_CTL_BKPWEN; -} - -/*! - \brief get flag state - \param[in] flag: - only one parameter can be selected which is shown as below: - \arg PMU_FLAG_WAKEUP: wakeup flag - \arg PMU_FLAG_STANDBY: standby flag - \arg PMU_FLAG_LVD: lvd flag - \param[out] none - \retval FlagStatus SET or RESET -*/ -FlagStatus pmu_flag_get(uint32_t flag) -{ - if(PMU_CS & flag){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear flag bit - \param[in] flag_reset: - only one parameter can be selected which is shown as below: - \arg PMU_FLAG_RESET_WAKEUP: reset wakeup flag - \arg PMU_FLAG_RESET_STANDBY: reset standby flag - \param[out] none - \retval none -*/ -void pmu_flag_clear(uint32_t flag_reset) -{ - switch(flag_reset){ - case PMU_FLAG_RESET_WAKEUP: - /* reset wakeup flag */ - PMU_CTL |= PMU_CTL_WURST; - break; - case PMU_FLAG_RESET_STANDBY: - /* reset standby flag */ - PMU_CTL |= PMU_CTL_STBRST; - break; - default : - break; - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_rcu.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_rcu.c deleted file mode 100644 index 20ea2ca..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_rcu.c +++ /dev/null @@ -1,1195 +0,0 @@ -/*! - \file gd32f10x_rcu.c - \brief RCU driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_rcu.h" - -/* define clock source */ -#define SEL_IRC8M ((uint16_t)0U) -#define SEL_HXTAL ((uint16_t)1U) -#define SEL_PLL ((uint16_t)2U) - -/* define startup timeout count */ -#define OSC_STARTUP_TIMEOUT ((uint32_t)0xFFFFFU) -#define LXTAL_STARTUP_TIMEOUT ((uint32_t)0x3FFFFFFU) - -/*! - \brief deinitialize the RCU - \param[in] none - \param[out] none - \retval none -*/ -void rcu_deinit(void) -{ - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - rcu_osci_stab_wait(RCU_IRC8M); - - RCU_CFG0 &= ~RCU_CFG0_SCS; - - /* reset CTL register */ - RCU_CTL &= ~(RCU_CTL_HXTALEN | RCU_CTL_CKMEN | RCU_CTL_PLLEN); - RCU_CTL &= ~RCU_CTL_HXTALBPS; -#ifdef GD32F10X_CL - RCU_CTL &= ~(RCU_CTL_PLL1EN | RCU_CTL_PLL2EN); -#endif /* GD32F10X_CL */ - - /* reset CFG0 register */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - RCU_CFG0 &= ~(RCU_CFG0_SCS | RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC | - RCU_CFG0_ADCPSC | RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0 | RCU_CFG0_PLLMF | - RCU_CFG0_USBDPSC | RCU_CFG0_CKOUT0SEL | RCU_CFG0_PLLMF_4 | RCU_CFG0_ADCPSC_2); -#elif defined(GD32F10X_CL) - RCU_CFG0 &= ~(RCU_CFG0_SCS | RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC | - RCU_CFG0_ADCPSC | RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0_LSB | RCU_CFG0_PLLMF | - RCU_CFG0_USBFSPSC | RCU_CFG0_CKOUT0SEL | RCU_CFG0_ADCPSC_2 | RCU_CFG0_PLLMF_4); -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - /* reset INT and CFG1 register */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - RCU_INT = 0x009f0000U; -#elif defined(GD32F10X_CL) - RCU_INT = 0x00ff0000U; - RCU_CFG1 &= ~(RCU_CFG1_PREDV0 | RCU_CFG1_PREDV1 | RCU_CFG1_PLL1MF | RCU_CFG1_PLL2MF | - RCU_CFG1_PREDV0SEL | RCU_CFG1_I2S1SEL | RCU_CFG1_I2S2SEL); -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ -} - -/*! - \brief enable the peripherals clock - \param[in] periph: RCU peripherals, refer to rcu_periph_enum - only one parameter can be selected which is shown as below: - \arg RCU_GPIOx (x=A,B,C,D,E,F,G): GPIO ports clock - \arg RCU_AF : alternate function clock - \arg RCU_CRC: CRC clock - \arg RCU_DMAx (x=0,1): DMA clock - \arg RCU_ENET: ENET clock(CL series available) - \arg RCU_ENETTX: ENETTX clock(CL series available) - \arg RCU_ENETRX: ENETRX clock(CL series available) - \arg RCU_USBD: USBD clock(HD,XD series available) - \arg RCU_USBFS: USBFS clock(CL series available) - \arg RCU_EXMC: EXMC clock - \arg RCU_TIMERx (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are only available for XD series): TIMER clock - \arg RCU_WWDGT: WWDGT clock - \arg RCU_SPIx (x=0,1,2): SPI clock - \arg RCU_USARTx (x=0,1,2): USART clock - \arg RCU_UARTx (x=3,4): UART clock - \arg RCU_I2Cx (x=0,1): I2C clock - \arg RCU_CANx (x=0,1,CAN1 is only available for CL series): CAN clock - \arg RCU_PMU: PMU clock - \arg RCU_DAC: DAC clock - \arg RCU_RTC: RTC clock - \arg RCU_ADCx (x=0,1,2,ADC2 is not available for CL series): ADC clock - \arg RCU_SDIO: SDIO clock(not available for CL series) - \arg RCU_BKPI: BKP interface clock - \param[out] none - \retval none -*/ -void rcu_periph_clock_enable(rcu_periph_enum periph) -{ - RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); -} - -/*! - \brief disable the peripherals clock - \param[in] periph: RCU peripherals, refer to rcu_periph_enum - only one parameter can be selected which is shown as below: - \arg RCU_GPIOx (x=A,B,C,D,E,F,G): GPIO ports clock - \arg RCU_AF: alternate function clock - \arg RCU_CRC: CRC clock - \arg RCU_DMAx (x=0,1): DMA clock - \arg RCU_ENET: ENET clock(CL series available) - \arg RCU_ENETTX: ENETTX clock(CL series available) - \arg RCU_ENETRX: ENETRX clock(CL series available) - \arg RCU_USBD: USBD clock(HD,XD series available) - \arg RCU_USBFS: USBFS clock(CL series available) - \arg RCU_EXMC: EXMC clock - \arg RCU_TIMERx (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are only available for XD series): TIMER clock - \arg RCU_WWDGT: WWDGT clock - \arg RCU_SPIx (x=0,1,2): SPI clock - \arg RCU_USARTx (x=0,1,2): USART clock - \arg RCU_UARTx (x=3,4): UART clock - \arg RCU_I2Cx (x=0,1): I2C clock - \arg RCU_CANx (x=0,1,CAN1 is only available for CL series): CAN clock - \arg RCU_PMU: PMU clock - \arg RCU_DAC: DAC clock - \arg RCU_RTC: RTC clock - \arg RCU_ADCx (x=0,1,2,ADC2 is not available for CL series): ADC clock - \arg RCU_SDIO: SDIO clock(not available for CL series) - \arg RCU_BKPI: BKP interface clock - \param[out] none - \retval none -*/ -void rcu_periph_clock_disable(rcu_periph_enum periph) -{ - RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); -} - -/*! - \brief enable the peripherals clock when sleep mode - \param[in] periph: RCU peripherals, refer to rcu_periph_sleep_enum - only one parameter can be selected which is shown as below: - \arg RCU_FMC_SLP: FMC clock - \arg RCU_SRAM_SLP: SRAM clock - \param[out] none - \retval none -*/ -void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph) -{ - RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); -} - -/*! - \brief disable the peripherals clock when sleep mode - \param[in] periph: RCU peripherals, refer to rcu_periph_sleep_enum - only one parameter can be selected which is shown as below: - \arg RCU_FMC_SLP: FMC clock - \arg RCU_SRAM_SLP: SRAM clock - \param[out] none - \retval none -*/ -void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph) -{ - RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); -} - -/*! - \brief reset the peripherals - \param[in] periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum - only one parameter can be selected which is shown as below: - \arg RCU_GPIOxRST (x=A,B,C,D,E,F,G): reset GPIO ports - \arg RCU_AFRST : reset alternate function clock - \arg RCU_ENETRST: reset ENET(CL series available) - \arg RCU_USBDRST: reset USBD(HD,XD series available) - \arg RCU_USBFSRST: reset USBFS(CL series available) - \arg RCU_TIMERxRST (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are only available for XD series): reset TIMER - \arg RCU_WWDGTRST: reset WWDGT - \arg RCU_SPIxRST (x=0,1,2): reset SPI - \arg RCU_USARTxRST (x=0,1,2): reset USART - \arg RCU_UARTxRST (x=3,4): reset UART - \arg RCU_I2CxRST (x=0,1): reset I2C - \arg RCU_CANxRST (x=0,1,CAN1 is only available for CL series): reset CAN - \arg RCU_PMURST: reset PMU - \arg RCU_DACRST: reset DAC - \arg RCU_ADCxRST (x=0,1,2, ADC2 is not available for CL series): reset ADC - \arg RCU_BKPIRST: reset BKPI - \param[out] none - \retval none -*/ -void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset) -{ - RCU_REG_VAL(periph_reset) |= BIT(RCU_BIT_POS(periph_reset)); -} - -/*! - \brief disable reset the peripheral - \param[in] periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum - only one parameter can be selected which is shown as below: - \arg RCU_GPIOxRST (x=A,B,C,D,E,F,G): reset GPIO ports - \arg RCU_AFRST : reset alternate function clock - \arg RCU_ENETRST: reset ENET(CL series available) - \arg RCU_USBDRST: reset USBD(HD,XD series available) - \arg RCU_USBFSRST: reset USBFS(CL series available) - \arg RCU_TIMERxRST (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are only available for XD series): reset TIMER - \arg RCU_WWDGTRST: reset WWDGT - \arg RCU_SPIxRST (x=0,1,2): reset SPI - \arg RCU_USARTxRST (x=0,1,2): reset USART - \arg RCU_UARTxRST (x=3,4): reset UART - \arg RCU_I2CxRST (x=0,1): reset I2C - \arg RCU_CANxRST (x=0,1,CAN1 is only available for CL series): reset CAN - \arg RCU_PMURST: reset PMU - \arg RCU_DACRST: reset DAC - \arg RCU_ADCxRST (x=0,1,2, ADC2 is not available for CL series): reset ADC - \arg RCU_BKPIRST: reset BKPI - \param[out] none - \retval none -*/ -void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset) -{ - RCU_REG_VAL(periph_reset) &= ~BIT(RCU_BIT_POS(periph_reset)); -} - -/*! - \brief reset the BKP domain - \param[in] none - \param[out] none - \retval none -*/ -void rcu_bkp_reset_enable(void) -{ - RCU_BDCTL |= RCU_BDCTL_BKPRST; -} - -/*! - \brief disable the BKP domain reset - \param[in] none - \param[out] none - \retval none -*/ -void rcu_bkp_reset_disable(void) -{ - RCU_BDCTL &= ~RCU_BDCTL_BKPRST; -} - -/*! - \brief configure the system clock source - \param[in] ck_sys: system clock source select - only one parameter can be selected which is shown as below: - \arg RCU_CKSYSSRC_IRC8M: select CK_IRC8M as the CK_SYS source - \arg RCU_CKSYSSRC_HXTAL: select CK_HXTAL as the CK_SYS source - \arg RCU_CKSYSSRC_PLL: select CK_PLL as the CK_SYS source - \param[out] none - \retval none -*/ -void rcu_system_clock_source_config(uint32_t ck_sys) -{ - uint32_t reg; - - reg = RCU_CFG0; - /* reset the SCS bits and set according to ck_sys */ - reg &= ~RCU_CFG0_SCS; - RCU_CFG0 = (reg | ck_sys); -} - -/*! - \brief get the system clock source - \param[in] none - \param[out] none - \retval which clock is selected as CK_SYS source - \arg RCU_SCSS_IRC8M: CK_IRC8M is selected as the CK_SYS source - \arg RCU_SCSS_HXTAL: CK_HXTAL is selected as the CK_SYS source - \arg RCU_SCSS_PLL: CK_PLL is selected as the CK_SYS source -*/ -uint32_t rcu_system_clock_source_get(void) -{ - return (RCU_CFG0 & RCU_CFG0_SCSS); -} - -/*! - \brief configure the AHB clock prescaler selection - \param[in] ck_ahb: AHB clock prescaler selection - only one parameter can be selected which is shown as below: - \arg RCU_AHB_CKSYS_DIVx, x=1, 2, 4, 8, 16, 64, 128, 256, 512 - \param[out] none - \retval none -*/ -void rcu_ahb_clock_config(uint32_t ck_ahb) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* reset the AHBPSC bits and set according to ck_ahb */ - reg &= ~RCU_CFG0_AHBPSC; - RCU_CFG0 = (reg | ck_ahb); -} - -/*! - \brief configure the APB1 clock prescaler selection - \param[in] ck_apb1: APB1 clock prescaler selection - only one parameter can be selected which is shown as below: - \arg RCU_APB1_CKAHB_DIV1: select CK_AHB as CK_APB1 - \arg RCU_APB1_CKAHB_DIV2: select CK_AHB/2 as CK_APB1 - \arg RCU_APB1_CKAHB_DIV4: select CK_AHB/4 as CK_APB1 - \arg RCU_APB1_CKAHB_DIV8: select CK_AHB/8 as CK_APB1 - \arg RCU_APB1_CKAHB_DIV16: select CK_AHB/16 as CK_APB1 - \param[out] none - \retval none -*/ -void rcu_apb1_clock_config(uint32_t ck_apb1) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* reset the APB1PSC and set according to ck_apb1 */ - reg &= ~RCU_CFG0_APB1PSC; - RCU_CFG0 = (reg | ck_apb1); -} - -/*! - \brief configure the APB2 clock prescaler selection - \param[in] ck_apb2: APB2 clock prescaler selection - only one parameter can be selected which is shown as below: - \arg RCU_APB2_CKAHB_DIV1: select CK_AHB as CK_APB2 - \arg RCU_APB2_CKAHB_DIV2: select CK_AHB/2 as CK_APB2 - \arg RCU_APB2_CKAHB_DIV4: select CK_AHB/4 as CK_APB2 - \arg RCU_APB2_CKAHB_DIV8: select CK_AHB/8 as CK_APB2 - \arg RCU_APB2_CKAHB_DIV16: select CK_AHB/16 as CK_APB2 - \param[out] none - \retval none -*/ -void rcu_apb2_clock_config(uint32_t ck_apb2) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* reset the APB2PSC and set according to ck_apb2 */ - reg &= ~RCU_CFG0_APB2PSC; - RCU_CFG0 = (reg | ck_apb2); -} - -/*! - \brief configure the CK_OUT0 clock source - \param[in] ckout0_src: CK_OUT0 clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_CKOUT0SRC_NONE: no clock selected - \arg RCU_CKOUT0SRC_CKSYS: system clock selected - \arg RCU_CKOUT0SRC_IRC8M: high speed 8M internal oscillator clock selected - \arg RCU_CKOUT0SRC_HXTAL: HXTAL selected - \arg RCU_CKOUT0SRC_CKPLL_DIV2: CK_PLL/2 selected - \arg RCU_CKOUT0SRC_CKPLL1: CK_PLL1 selected - \arg RCU_CKOUT0SRC_CKPLL2_DIV2: CK_PLL2/2 selected - \arg RCU_CKOUT0SRC_EXT1: EXT1 selected - \arg RCU_CKOUT0SRC_CKPLL2: PLL2 selected - \param[out] none - \retval none -*/ -void rcu_ckout0_config(uint32_t ckout0_src) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* reset the CKOUT0SRC, set according to ckout0_src */ - reg &= ~RCU_CFG0_CKOUT0SEL; - RCU_CFG0 = (reg | ckout0_src); -} - -/*! - \brief configure the main PLL clock - \param[in] pll_src: PLL clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_PLLSRC_IRC8M_DIV2: IRC8M/2 clock selected as source clock of PLL - \arg RCU_PLLSRC_HXTAL: HXTAL selected as source clock of PLL - \param[in] pll_mul: PLL clock multiplication factor - only one parameter can be selected which is shown as below: - \arg RCU_PLL_MULx (XD series x = 2..32, CL series x = 2..14, 6.5, 16..32) - \param[out] none - \retval none -*/ -void rcu_pll_config(uint32_t pll_src, uint32_t pll_mul) -{ - uint32_t reg = 0U; - - reg = RCU_CFG0; - - /* PLL clock source and multiplication factor configuration */ - reg &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); - reg |= (pll_src | pll_mul); - - RCU_CFG0 = reg; -} - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) -/*! - \brief configure the PREDV0 division factor - \param[in] predv0_div: PREDV0 division factor - only one parameter can be selected which is shown as below: - \arg RCU_PREDV0_DIVx, x = 1,2 - \param[out] none - \retval none -*/ -void rcu_predv0_config(uint32_t predv0_div) -{ - uint32_t reg = 0U; - - reg = RCU_CFG0; - /* reset PREDV0 bit */ - reg &= ~RCU_CFG0_PREDV0; - if(RCU_PREDV0_DIV2 == predv0_div){ - /* set the PREDV0 bit */ - reg |= RCU_CFG0_PREDV0; - } - - RCU_CFG0 = reg; -} -#elif defined(GD32F10X_CL) -/*! - \brief configure the PREDV0 division factor and clock source - \param[in] predv0_source: PREDV0 input clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_PREDV0SRC_HXTAL: HXTAL selected as PREDV0 input source clock - \arg RCU_PREDV0SRC_CKPLL1: CK_PLL1 selected as PREDV0 input source clock - \param[in] predv0_div: PREDV0 division factor - only one parameter can be selected which is shown as below: - \arg RCU_PREDV0_DIVx, x = 1..16 - \param[out] none - \retval none -*/ -void rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div) -{ - uint32_t reg = 0U; - - reg = RCU_CFG1; - /* reset PREDV0SEL and PREDV0 bits */ - reg &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PREDV0); - /* set the PREDV0SEL and PREDV0 division factor */ - reg |= (predv0_source | predv0_div); - - RCU_CFG1 = reg; -} - -/*! - \brief configure the PREDV1 division factor - \param[in] predv1_div: PREDV1 division factor - only one parameter can be selected which is shown as below: - \arg RCU_PREDV1_DIVx, x = 1..16 - \param[out] none - \retval none -*/ -void rcu_predv1_config(uint32_t predv1_div) -{ - uint32_t reg = 0U; - - reg = RCU_CFG1; - /* reset the PREDV1 bits */ - reg &= ~RCU_CFG1_PREDV1; - /* set the PREDV1 division factor */ - reg |= predv1_div; - - RCU_CFG1 = reg; -} - -/*! - \brief configure the PLL1 clock - \param[in] pll_mul: PLL clock multiplication factor - only one parameter can be selected which is shown as below: - \arg RCU_PLL1_MULx (x = 8..16, 20) - \param[out] none - \retval none -*/ -void rcu_pll1_config(uint32_t pll_mul) -{ - RCU_CFG1 &= ~RCU_CFG1_PLL1MF; - RCU_CFG1 |= pll_mul; -} - -/*! - \brief configure the PLL2 clock - \param[in] pll_mul: PLL clock multiplication factor - only one parameter can be selected which is shown as below: - \arg RCU_PLL2_MULx (x = 8..16, 20) - \param[out] none - \retval none -*/ -void rcu_pll2_config(uint32_t pll_mul) -{ - RCU_CFG1 &= ~RCU_CFG1_PLL2MF; - RCU_CFG1 |= pll_mul; -} -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - -/*! - \brief configure the ADC prescaler factor - \param[in] adc_psc: ADC prescaler factor - only one parameter can be selected which is shown as below: - \arg RCU_CKADC_CKAPB2_DIV2: ADC prescaler select CK_APB2/2 - \arg RCU_CKADC_CKAPB2_DIV4: ADC prescaler select CK_APB2/4 - \arg RCU_CKADC_CKAPB2_DIV6: ADC prescaler select CK_APB2/6 - \arg RCU_CKADC_CKAPB2_DIV8: ADC prescaler select CK_APB2/8 - \arg RCU_CKADC_CKAPB2_DIV12: ADC prescaler select CK_APB2/12 - \arg RCU_CKADC_CKAPB2_DIV16: ADC prescaler select CK_APB2/16 - \param[out] none - \retval none -*/ -void rcu_adc_clock_config(uint32_t adc_psc) -{ - uint32_t reg0; - - /* reset the ADCPSC bits */ - reg0 = RCU_CFG0; - reg0 &= ~(RCU_CFG0_ADCPSC_2 | RCU_CFG0_ADCPSC); - - /* set the ADC prescaler factor */ - switch(adc_psc){ - case RCU_CKADC_CKAPB2_DIV2: - case RCU_CKADC_CKAPB2_DIV4: - case RCU_CKADC_CKAPB2_DIV6: - case RCU_CKADC_CKAPB2_DIV8: - reg0 |= (adc_psc << 14); - break; - - case RCU_CKADC_CKAPB2_DIV12: - case RCU_CKADC_CKAPB2_DIV16: - adc_psc &= ~BIT(2); - reg0 |= (adc_psc << 14 | RCU_CFG0_ADCPSC_2); - break; - - default: - break; - } - - /* set the register */ - RCU_CFG0 = reg0; -} - -/*! - \brief configure the USBD/USBFS prescaler factor - \param[in] usb_psc: USB prescaler factor - only one parameter can be selected which is shown as below: - \arg RCU_CKUSB_CKPLL_DIV1_5: USBD/USBFS prescaler select CK_PLL/1.5 - \arg RCU_CKUSB_CKPLL_DIV1: USBD/USBFS prescaler select CK_PLL/1 - \arg RCU_CKUSB_CKPLL_DIV2_5: USBD/USBFS prescaler select CK_PLL/2.5 - \arg RCU_CKUSB_CKPLL_DIV2: USBD/USBFS prescaler select CK_PLL/2 - \param[out] none - \retval none -*/ -void rcu_usb_clock_config(uint32_t usb_psc) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* configure the USBD/USBFS prescaler factor */ -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - reg &= ~RCU_CFG0_USBDPSC; -#elif defined(GD32F10X_CL) - reg &= ~RCU_CFG0_USBFSPSC; -#endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ - - RCU_CFG0 = (reg | usb_psc); -} - -/*! - \brief configure the RTC clock source selection - \param[in] rtc_clock_source: RTC clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_RTCSRC_NONE: no clock selected - \arg RCU_RTCSRC_LXTAL: CK_LXTAL selected as RTC source clock - \arg RCU_RTCSRC_IRC40K: CK_IRC40K selected as RTC source clock - \arg RCU_RTCSRC_HXTAL_DIV_128: CK_HXTAL/128 selected as RTC source clock - \param[out] none - \retval none -*/ -void rcu_rtc_clock_config(uint32_t rtc_clock_source) -{ - uint32_t reg; - - reg = RCU_BDCTL; - /* reset the RTCSRC bits and set according to rtc_clock_source */ - reg &= ~RCU_BDCTL_RTCSRC; - RCU_BDCTL = (reg | rtc_clock_source); -} - -#ifdef GD32F10X_CL -/*! - \brief configure the I2S1 clock source selection - \param[in] i2s_clock_source: I2S1 clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_I2S1SRC_CKSYS: System clock selected as I2S1 source clock - \arg RCU_I2S1SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S1 source clock - \param[out] none - \retval none -*/ -void rcu_i2s1_clock_config(uint32_t i2s_clock_source) -{ - uint32_t reg; - - reg = RCU_CFG1; - /* reset the I2S1SEL bit and set according to i2s_clock_source */ - reg &= ~RCU_CFG1_I2S1SEL; - RCU_CFG1 = (reg | i2s_clock_source); -} - -/*! - \brief configure the I2S2 clock source selection - \param[in] i2s_clock_source: I2S2 clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_I2S2SRC_CKSYS: system clock selected as I2S2 source clock - \arg RCU_I2S2SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S2 source clock - \param[out] none - \retval none -*/ -void rcu_i2s2_clock_config(uint32_t i2s_clock_source) -{ - uint32_t reg; - - reg = RCU_CFG1; - /* reset the I2S2SEL bit and set according to i2s_clock_source */ - reg &= ~RCU_CFG1_I2S2SEL; - RCU_CFG1 = (reg | i2s_clock_source); -} -#endif /* GD32F10X_CL */ - -/*! - \brief get the clock stabilization and periphral reset flags - \param[in] flag: the clock stabilization and periphral reset flags, refer to rcu_flag_enum - only one parameter can be selected which is shown as below: - \arg RCU_FLAG_IRC8MSTB: IRC8M stabilization flag - \arg RCU_FLAG_HXTALSTB: HXTAL stabilization flag - \arg RCU_FLAG_PLLSTB: PLL stabilization flag - \arg RCU_FLAG_PLL1STB: PLL1 stabilization flag(CL series only) - \arg RCU_FLAG_PLL2STB: PLL2 stabilization flag(CL series only) - \arg RCU_FLAG_LXTALSTB: LXTAL stabilization flag - \arg RCU_FLAG_IRC40KSTB: IRC40K stabilization flag - \arg RCU_FLAG_EPRST: external PIN reset flag - \arg RCU_FLAG_PORRST: power reset flag - \arg RCU_FLAG_SWRST: software reset flag - \arg RCU_FLAG_FWDGTRST: free watchdog timer reset flag - \arg RCU_FLAG_WWDGTRST: window watchdog timer reset flag - \arg RCU_FLAG_LPRST: low-power reset flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus rcu_flag_get(rcu_flag_enum flag) -{ - /* get the rcu flag */ - if(RESET != (RCU_REG_VAL(flag) & BIT(RCU_BIT_POS(flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear all the reset flag - \param[in] none - \param[out] none - \retval none -*/ -void rcu_all_reset_flag_clear(void) -{ - RCU_RSTSCK |= RCU_RSTSCK_RSTFC; -} - -/*! - \brief get the clock stabilization interrupt and ckm flags - \param[in] int_flag: interrupt and ckm flags, refer to rcu_int_flag_enum - only one parameter can be selected which is shown as below: - \arg RCU_INT_FLAG_IRC40KSTB: IRC40K stabilization interrupt flag - \arg RCU_INT_FLAG_LXTALSTB: LXTAL stabilization interrupt flag - \arg RCU_INT_FLAG_IRC8MSTB: IRC8M stabilization interrupt flag - \arg RCU_INT_FLAG_HXTALSTB: HXTAL stabilization interrupt flag - \arg RCU_INT_FLAG_PLLSTB: PLL stabilization interrupt flag - \arg RCU_INT_FLAG_PLL1STB: PLL1 stabilization interrupt flag(CL series only) - \arg RCU_INT_FLAG_PLL2STB: PLL2 stabilization interrupt flag(CL series only) - \arg RCU_INT_FLAG_CKM: HXTAL clock stuck interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag) -{ - /* get the rcu interrupt flag */ - if(RESET != (RCU_REG_VAL(int_flag) & BIT(RCU_BIT_POS(int_flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear the interrupt flags - \param[in] int_flag_clear: clock stabilization and stuck interrupt flags clear, refer to rcu_int_flag_clear_enum - only one parameter can be selected which is shown as below: - \arg RCU_INT_FLAG_IRC40KSTB_CLR: IRC40K stabilization interrupt flag clear - \arg RCU_INT_FLAG_LXTALSTB_CLR: LXTAL stabilization interrupt flag clear - \arg RCU_INT_FLAG_IRC8MSTB_CLR: IRC8M stabilization interrupt flag clear - \arg RCU_INT_FLAG_HXTALSTB_CLR: HXTAL stabilization interrupt flag clear - \arg RCU_INT_FLAG_PLLSTB_CLR: PLL stabilization interrupt flag clear - \arg RCU_INT_FLAG_PLL1STB_CLR: PLL1 stabilization interrupt flag clear(CL series only) - \arg RCU_INT_FLAG_PLL2STB_CLR: PLL2 stabilization interrupt flag clear(CL series only) - \arg RCU_INT_FLAG_CKM_CLR: clock stuck interrupt flag clear - \param[out] none - \retval none -*/ -void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear) -{ - RCU_REG_VAL(int_flag_clear) |= BIT(RCU_BIT_POS(int_flag_clear)); -} - -/*! - \brief enable the stabilization interrupt - \param[in] stab_int: clock stabilization interrupt, refer to rcu_int_enum - Only one parameter can be selected which is shown as below: - \arg RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable - \arg RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable - \arg RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable - \arg RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable - \arg RCU_INT_PLLSTB: PLL stabilization interrupt enable - \arg RCU_INT_PLL1STB: PLL1 stabilization interrupt enable(CL series only) - \arg RCU_INT_PLL2STB: PLL2 stabilization interrupt enable(CL series only) - \param[out] none - \retval none -*/ -void rcu_interrupt_enable(rcu_int_enum stab_int) -{ - RCU_REG_VAL(stab_int) |= BIT(RCU_BIT_POS(stab_int)); -} - -/*! - \brief disable the stabilization interrupt - \param[in] stab_int: clock stabilization interrupt, refer to rcu_int_enum - only one parameter can be selected which is shown as below: - \arg RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable - \arg RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable - \arg RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable - \arg RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable - \arg RCU_INT_PLLSTB: PLL stabilization interrupt enable - \arg RCU_INT_PLL1STB: PLL1 stabilization interrupt enable(CL series only) - \arg RCU_INT_PLL2STB: PLL2 stabilization interrupt enable(CL series only) - \param[out] none - \retval none -*/ -void rcu_interrupt_disable(rcu_int_enum stab_int) -{ - RCU_REG_VAL(stab_int) &= ~BIT(RCU_BIT_POS(stab_int)); -} - -/*! - \brief wait for oscillator stabilization flags is SET or oscillator startup is timeout - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) - \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) - \arg RCU_PLL_CK: phase locked loop(PLL) - \arg RCU_PLL1_CK: phase locked loop 1(CL series only) - \arg RCU_PLL2_CK: phase locked loop 2(CL series only) - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci) -{ - uint32_t stb_cnt = 0U; - ErrStatus reval = ERROR; - FlagStatus osci_stat = RESET; - - switch(osci){ - /* wait HXTAL stable */ - case RCU_HXTAL: - while((RESET == osci_stat) && (HXTAL_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_HXTALSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_HXTALSTB)){ - reval = SUCCESS; - } - break; - - /* wait LXTAL stable */ - case RCU_LXTAL: - while((RESET == osci_stat) && (LXTAL_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_LXTALSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_LXTALSTB)){ - reval = SUCCESS; - } - break; - - /* wait IRC8M stable */ - case RCU_IRC8M: - while((RESET == osci_stat) && (IRC8M_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_IRC8MSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_IRC8MSTB)){ - reval = SUCCESS; - } - break; - - /* wait IRC40K stable */ - case RCU_IRC40K: - while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_IRC40KSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_IRC40KSTB)){ - reval = SUCCESS; - } - break; - - /* wait PLL stable */ - case RCU_PLL_CK: - while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_PLLSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_PLLSTB)){ - reval = SUCCESS; - } - break; - -#ifdef GD32F10X_CL - /* wait PLL1 stable */ - case RCU_PLL1_CK: - while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_PLL1STB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_PLL1STB)){ - reval = SUCCESS; - } - break; - /* wait PLL2 stable */ - case RCU_PLL2_CK: - while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_PLL2STB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_PLL2STB)){ - reval = SUCCESS; - } - break; -#endif /* GD32F10X_CL */ - - default: - break; - } - - /* return value */ - return reval; -} - -/*! - \brief turn on the oscillator - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) - \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) - \arg RCU_PLL_CK: phase locked loop(PLL) - \arg RCU_PLL1_CK: phase locked loop 1(CL series only) - \arg RCU_PLL2_CK: phase locked loop 2(CL series only) - \param[out] none - \retval none -*/ -void rcu_osci_on(rcu_osci_type_enum osci) -{ - RCU_REG_VAL(osci) |= BIT(RCU_BIT_POS(osci)); -} - -/*! - \brief turn off the oscillator - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) - \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) - \arg RCU_PLL_CK: phase locked loop(PLL) - \arg RCU_PLL1_CK: phase locked loop 1(CL series only) - \arg RCU_PLL2_CK: phase locked loop 2(CL series only) - \param[out] none - \retval none -*/ -void rcu_osci_off(rcu_osci_type_enum osci) -{ - RCU_REG_VAL(osci) &= ~BIT(RCU_BIT_POS(osci)); -} - -/*! - \brief enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \param[out] none - \retval none -*/ -void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci) -{ - uint32_t reg; - - switch(osci){ - /* enable HXTAL to bypass mode */ - case RCU_HXTAL: - reg = RCU_CTL; - RCU_CTL &= ~RCU_CTL_HXTALEN; - RCU_CTL = (reg | RCU_CTL_HXTALBPS); - break; - /* enable LXTAL to bypass mode */ - case RCU_LXTAL: - reg = RCU_BDCTL; - RCU_BDCTL &= ~RCU_BDCTL_LXTALEN; - RCU_BDCTL = (reg | RCU_BDCTL_LXTALBPS); - break; - case RCU_IRC8M: - case RCU_IRC40K: - case RCU_PLL_CK: -#ifdef GD32F10X_CL - case RCU_PLL1_CK: - case RCU_PLL2_CK: -#endif /* GD32F10X_CL */ - break; - default: - break; - } -} - -/*! - \brief disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \param[out] none - \retval none -*/ -void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci) -{ - uint32_t reg; - - switch(osci){ - /* disable HXTAL to bypass mode */ - case RCU_HXTAL: - reg = RCU_CTL; - RCU_CTL &= ~RCU_CTL_HXTALEN; - RCU_CTL = (reg & ~RCU_CTL_HXTALBPS); - break; - /* disable LXTAL to bypass mode */ - case RCU_LXTAL: - reg = RCU_BDCTL; - RCU_BDCTL &= ~RCU_BDCTL_LXTALEN; - RCU_BDCTL = (reg & ~RCU_BDCTL_LXTALBPS); - break; - case RCU_IRC8M: - case RCU_IRC40K: - case RCU_PLL_CK: -#ifdef GD32F10X_CL - case RCU_PLL1_CK: - case RCU_PLL2_CK: -#endif /* GD32F10X_CL */ - break; - default: - break; - } -} - -/*! - \brief enable the HXTAL clock monitor - \param[in] none - \param[out] none - \retval none -*/ - -void rcu_hxtal_clock_monitor_enable(void) -{ - RCU_CTL |= RCU_CTL_CKMEN; -} - -/*! - \brief disable the HXTAL clock monitor - \param[in] none - \param[out] none - \retval none -*/ -void rcu_hxtal_clock_monitor_disable(void) -{ - RCU_CTL &= ~RCU_CTL_CKMEN; -} - -/*! - \brief set the IRC8M adjust value - \param[in] irc8m_adjval: IRC8M adjust value, must be between 0 and 0x1F - \param[out] none - \retval none -*/ -void rcu_irc8m_adjust_value_set(uint8_t irc8m_adjval) -{ - uint32_t reg; - - reg = RCU_CTL; - /* reset the IRC8MADJ bits and set according to irc8m_adjval */ - reg &= ~RCU_CTL_IRC8MADJ; - RCU_CTL = (reg | ((irc8m_adjval & 0x1FU) << 3)); -} - -/*! - \brief deep-sleep mode voltage select - \param[in] dsvol: deep sleep mode voltage - only one parameter can be selected which is shown as below: - \arg RCU_DEEPSLEEP_V_1_2: the core voltage is 1.2V - \arg RCU_DEEPSLEEP_V_1_1: the core voltage is 1.1V - \arg RCU_DEEPSLEEP_V_1_0: the core voltage is 1.0V - \arg RCU_DEEPSLEEP_V_0_9: the core voltage is 0.9V - \param[out] none - \retval none -*/ -void rcu_deepsleep_voltage_set(uint32_t dsvol) -{ - dsvol &= RCU_DSV_DSLPVS; - RCU_DSV = dsvol; -} - -/*! - \brief get the system clock, bus and peripheral clock frequency - \param[in] clock: the clock frequency which to get - only one parameter can be selected which is shown as below: - \arg CK_SYS: system clock frequency - \arg CK_AHB: AHB clock frequency - \arg CK_APB1: APB1 clock frequency - \arg CK_APB2: APB2 clock frequency - \param[out] none - \retval clock frequency of system, AHB, APB1, APB2 -*/ -uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock) -{ - uint32_t sws, ck_freq = 0U; - uint32_t cksys_freq, ahb_freq, apb1_freq, apb2_freq; - uint32_t pllsel, predv0sel, pllmf,ck_src, idx, clk_exp; -#ifdef GD32F10X_CL - uint32_t predv0, predv1, pll1mf; -#endif /* GD32F10X_CL */ - - /* exponent of AHB, APB1 and APB2 clock divider */ - uint8_t ahb_exp[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - uint8_t apb1_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4}; - uint8_t apb2_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4}; - - sws = GET_BITS(RCU_CFG0, 2, 3); - switch(sws){ - /* IRC8M is selected as CK_SYS */ - case SEL_IRC8M: - cksys_freq = IRC8M_VALUE; - break; - /* HXTAL is selected as CK_SYS */ - case SEL_HXTAL: - cksys_freq = HXTAL_VALUE; - break; - /* PLL is selected as CK_SYS */ - case SEL_PLL: - /* PLL clock source selection, HXTAL or IRC8M/2 */ - pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL); - - if(RCU_PLLSRC_HXTAL == pllsel) { - /* PLL clock source is HXTAL */ - ck_src = HXTAL_VALUE; - -#if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) - predv0sel = (RCU_CFG0 & RCU_CFG0_PREDV0); - /* PREDV0 input source clock divided by 2 */ - if(RCU_CFG0_PREDV0 == predv0sel){ - ck_src = HXTAL_VALUE/2U; - } -#elif defined(GD32F10X_CL) - predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL); - /* source clock use PLL1 */ - if(RCU_PREDV0SRC_CKPLL1 == predv0sel){ - predv1 = (uint32_t)((RCU_CFG1 & RCU_CFG1_PREDV1) >> 4) + 1U; - pll1mf = (uint32_t)((RCU_CFG1 & RCU_CFG1_PLL1MF) >> 8) + 2U; - if(17U == pll1mf){ - pll1mf = 20U; - } - ck_src = (ck_src / predv1) * pll1mf; - } - predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U; - ck_src /= predv0; -#endif /* GD32F10X_HD and GD32F10X_XD */ - }else{ - /* PLL clock source is IRC8M/2 */ - ck_src = IRC8M_VALUE/2U; - } - - /* PLL multiplication factor */ - pllmf = GET_BITS(RCU_CFG0, 18, 21); - if((RCU_CFG0 & RCU_CFG0_PLLMF_4)){ - pllmf |= 0x10U; - } - if(pllmf < 15U){ - pllmf += 2U; - }else{ - pllmf += 1U; - } - - cksys_freq = ck_src * pllmf; - - #ifdef GD32F10X_CL - if(15U == pllmf){ - /* PLL source clock multiply by 6.5 */ - cksys_freq = ck_src * 6U + ck_src / 2U; - } - #endif /* GD32F10X_CL */ - - break; - /* IRC8M is selected as CK_SYS */ - default: - cksys_freq = IRC8M_VALUE; - break; - } - - /* calculate AHB clock frequency */ - idx = GET_BITS(RCU_CFG0, 4, 7); - clk_exp = ahb_exp[idx]; - ahb_freq = cksys_freq >> clk_exp; - - /* calculate APB1 clock frequency */ - idx = GET_BITS(RCU_CFG0, 8, 10); - clk_exp = apb1_exp[idx]; - apb1_freq = ahb_freq >> clk_exp; - - /* calculate APB2 clock frequency */ - idx = GET_BITS(RCU_CFG0, 11, 13); - clk_exp = apb2_exp[idx]; - apb2_freq = ahb_freq >> clk_exp; - - /* return the clocks frequency */ - switch(clock){ - case CK_SYS: - ck_freq = cksys_freq; - break; - case CK_AHB: - ck_freq = ahb_freq; - break; - case CK_APB1: - ck_freq = apb1_freq; - break; - case CK_APB2: - ck_freq = apb2_freq; - break; - default: - break; - } - return ck_freq; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_rtc.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_rtc.c deleted file mode 100644 index 9a3043b..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_rtc.c +++ /dev/null @@ -1,276 +0,0 @@ -/*! - \file gd32f10x_rtc.c - \brief RTC driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_rtc.h" - -/* RTC register high / low bits mask */ -#define RTC_HIGH_BITS_MASK ((uint32_t)0x000F0000U) /* RTC high bits mask */ -#define RTC_LOW_BITS_MASK ((uint32_t)0x0000FFFFU) /* RTC low bits mask */ - -/* RTC register high bits offset */ -#define RTC_HIGH_BITS_OFFSET ((uint32_t)16U) - -/*! - \brief enter RTC configuration mode - \param[in] none - \param[out] none - \retval none -*/ -void rtc_configuration_mode_enter(void) -{ - RTC_CTL |= RTC_CTL_CMF; -} - -/*! - \brief exit RTC configuration mode - \param[in] none - \param[out] none - \retval none -*/ -void rtc_configuration_mode_exit(void) -{ - RTC_CTL &= ~RTC_CTL_CMF; -} - -/*! - \brief set RTC counter value - \param[in] cnt: RTC counter value - \param[out] none - \retval none -*/ -void rtc_counter_set(uint32_t cnt) -{ - rtc_configuration_mode_enter(); - /* set the RTC counter high bits */ - RTC_CNTH = (cnt >> RTC_HIGH_BITS_OFFSET); - /* set the RTC counter low bits */ - RTC_CNTL = (cnt & RTC_LOW_BITS_MASK); - rtc_configuration_mode_exit(); -} - -/*! - \brief set RTC prescaler value - \param[in] psc: RTC prescaler value - \param[out] none - \retval none -*/ -void rtc_prescaler_set(uint32_t psc) -{ - rtc_configuration_mode_enter(); - /* set the RTC prescaler high bits */ - RTC_PSCH = ((psc & RTC_HIGH_BITS_MASK) >> RTC_HIGH_BITS_OFFSET); - /* set the RTC prescaler low bits */ - RTC_PSCL = (psc & RTC_LOW_BITS_MASK); - rtc_configuration_mode_exit(); -} - -/*! - \brief wait RTC last write operation finished flag set - \param[in] none - \param[out] none - \retval none -*/ -void rtc_lwoff_wait(void) -{ - /* loop until LWOFF flag is set */ - while(RESET == (RTC_CTL & RTC_CTL_LWOFF)){ - } -} - -/*! - \brief wait RTC registers synchronized flag set - \param[in] none - \param[out] none - \retval none -*/ -void rtc_register_sync_wait(void) -{ - /* clear RSYNF flag */ - RTC_CTL &= ~RTC_CTL_RSYNF; - /* loop until RSYNF flag is set */ - while(RESET == (RTC_CTL & RTC_CTL_RSYNF)){ - } -} - -/*! - \brief set RTC alarm value - \param[in] alarm: RTC alarm value - \param[out] none - \retval none -*/ -void rtc_alarm_config(uint32_t alarm) -{ - rtc_configuration_mode_enter(); - /* set the alarm high bits */ - RTC_ALRMH = (alarm >> RTC_HIGH_BITS_OFFSET); - /* set the alarm low bits */ - RTC_ALRML = (alarm & RTC_LOW_BITS_MASK); - rtc_configuration_mode_exit(); -} - -/*! - \brief get RTC counter value - \param[in] none - \param[out] none - \retval RTC counter value -*/ -uint32_t rtc_counter_get(void) -{ - uint32_t temp = 0x0U; - - temp = RTC_CNTL; - temp |= (RTC_CNTH << RTC_HIGH_BITS_OFFSET); - return temp; -} - -/*! - \brief get RTC divider value - \param[in] none - \param[out] none - \retval RTC divider value -*/ -uint32_t rtc_divider_get(void) -{ - uint32_t temp = 0x00U; - - temp = ((RTC_DIVH & RTC_DIVH_DIV) << RTC_HIGH_BITS_OFFSET); - temp |= RTC_DIVL; - return temp; -} - -/*! - \brief get RTC flag status - \param[in] flag: specify which flag status to get - only one parameter can be selected which is shown as below: - \arg RTC_FLAG_SECOND: second interrupt flag - \arg RTC_FLAG_ALARM: alarm interrupt flag - \arg RTC_FLAG_OVERFLOW: overflow interrupt flag - \arg RTC_FLAG_RSYN: registers synchronized flag - \arg RTC_FLAG_LWOF: last write operation finished flag - \param[out] none - \retval SET or RESET -*/ -FlagStatus rtc_flag_get(uint32_t flag) -{ - if(RESET != (RTC_CTL & flag)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear RTC flag status - \param[in] flag: specify which flag status to clear - one or more parameters can be selected which are shown as below: - \arg RTC_FLAG_SECOND: second interrupt flag - \arg RTC_FLAG_ALARM: alarm interrupt flag - \arg RTC_FLAG_OVERFLOW: overflow interrupt flag - \arg RTC_FLAG_RSYN: registers synchronized flag - \param[out] none - \retval none -*/ -void rtc_flag_clear(uint32_t flag) -{ - /* clear RTC flag */ - RTC_CTL &= ~flag; -} - -/*! - \brief get RTC interrupt flag status - \param[in] flag: specify which flag status to get - only one parameter can be selected which is shown as below: - \arg RTC_INT_FLAG_SECOND: second interrupt flag - \arg RTC_INT_FLAG_ALARM: alarm interrupt flag - \arg RTC_INT_FLAG_OVERFLOW: overflow interrupt flag - \param[out] none - \retval SET or RESET -*/ -FlagStatus rtc_interrupt_flag_get(uint32_t flag) -{ - if(RESET != (RTC_CTL & flag)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear RTC interrupt flag status - \param[in] flag: specify which flag status to clear - one or more parameters can be selected which are shown as below: - \arg RTC_INT_FLAG_SECOND: second interrupt flag - \arg RTC_INT_FLAG_ALARM: alarm interrupt flag - \arg RTC_INT_FLAG_OVERFLOW: overflow interrupt flag - \param[out] none - \retval none -*/ -void rtc_interrupt_flag_clear(uint32_t flag) -{ - /* clear RTC interrupt flag */ - RTC_CTL &= ~flag; -} - -/*! - \brief enable RTC interrupt - \param[in] interrupt: specify which interrupt to enbale - one or more parameters can be selected which are shown as below: - \arg RTC_INT_SECOND: second interrupt - \arg RTC_INT_ALARM: alarm interrupt - \arg RTC_INT_OVERFLOW: overflow interrupt - \param[out] none - \retval none -*/ -void rtc_interrupt_enable(uint32_t interrupt) -{ - RTC_INTEN |= interrupt; -} - -/*! - \brief disable RTC interrupt - \param[in] interrupt: specify which interrupt to disbale - one or more parameters can be selected which are shown as below: - \arg RTC_INT_SECOND: second interrupt - \arg RTC_INT_ALARM: alarm interrupt - \arg RTC_INT_OVERFLOW: overflow interrupt - \param[out] none - \retval none -*/ -void rtc_interrupt_disable(uint32_t interrupt) -{ - RTC_INTEN &= ~interrupt; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_sdio.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_sdio.c deleted file mode 100644 index 713c8b7..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_sdio.c +++ /dev/null @@ -1,807 +0,0 @@ -/*! - \file gd32f10x_sdio.c - \brief SDIO driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_sdio.h" - -#define DEFAULT_RESET_VALUE 0x00000000U - -/*! - \brief deinitialize the SDIO - \param[in] none - \param[out] none - \retval none -*/ -void sdio_deinit(void) -{ - SDIO_PWRCTL = DEFAULT_RESET_VALUE; - SDIO_CLKCTL = DEFAULT_RESET_VALUE; - SDIO_CMDAGMT = DEFAULT_RESET_VALUE; - SDIO_CMDCTL = DEFAULT_RESET_VALUE; - SDIO_DATATO = DEFAULT_RESET_VALUE; - SDIO_DATALEN = DEFAULT_RESET_VALUE; - SDIO_DATACTL = DEFAULT_RESET_VALUE; - SDIO_INTC = DEFAULT_RESET_VALUE; - SDIO_INTEN = DEFAULT_RESET_VALUE; -} - -/*! - \brief configure the SDIO clock - \param[in] clock_edge: SDIO_CLK clock edge - only one parameter can be selected which is shown as below: - \arg SDIO_SDIOCLKEDGE_RISING: select the rising edge of the SDIOCLK to generate SDIO_CLK - \arg SDIO_SDIOCLKEDGE_FALLING: select the falling edge of the SDIOCLK to generate SDIO_CLK - \param[in] clock_bypass: clock bypass - only one parameter can be selected which is shown as below: - \arg SDIO_CLOCKBYPASS_ENABLE: clock bypass - \arg SDIO_CLOCKBYPASS_DISABLE: no bypass - \param[in] clock_powersave: SDIO_CLK clock dynamic switch on/off for power saving - only one parameter can be selected which is shown as below: - \arg SDIO_CLOCKPWRSAVE_ENABLE: SDIO_CLK closed when bus is idle - \arg SDIO_CLOCKPWRSAVE_DISABLE: SDIO_CLK clock is always on - \param[in] clock_division: clock division, less than 256 - \param[out] none - \retval none -*/ -void sdio_clock_config(uint32_t clock_edge, uint32_t clock_bypass, uint32_t clock_powersave, uint16_t clock_division) -{ - uint32_t clock_config = 0U; - clock_config = SDIO_CLKCTL; - /* reset the CLKEDGE, CLKBYP, CLKPWRSAV, DIV */ - clock_config &= ~(SDIO_CLKCTL_CLKEDGE | SDIO_CLKCTL_CLKBYP | SDIO_CLKCTL_CLKPWRSAV | SDIO_CLKCTL_DIV); - - /* configure the SDIO_CLKCTL according to the parameters */ - clock_config |= (clock_edge | clock_bypass | clock_powersave | clock_division); - SDIO_CLKCTL = clock_config; -} - -/*! - \brief enable hardware clock control - \param[in] none - \param[out] none - \retval none -*/ -void sdio_hardware_clock_enable(void) -{ - SDIO_CLKCTL |= SDIO_CLKCTL_HWCLKEN; -} - -/*! - \brief disable hardware clock control - \param[in] none - \param[out] none - \retval none -*/ -void sdio_hardware_clock_disable(void) -{ - SDIO_CLKCTL &= ~SDIO_CLKCTL_HWCLKEN; -} - -/*! - \brief set different SDIO card bus mode - \param[in] bus_mode: SDIO card bus mode - only one parameter can be selected which is shown as below: - \arg SDIO_BUSMODE_1BIT: 1-bit SDIO card bus mode - \arg SDIO_BUSMODE_4BIT: 4-bit SDIO card bus mode - \arg SDIO_BUSMODE_8BIT: 8-bit SDIO card bus mode - \param[out] none - \retval none -*/ -void sdio_bus_mode_set(uint32_t bus_mode) -{ - /* reset the SDIO card bus mode bits and set according to bus_mode */ - SDIO_CLKCTL &= ~SDIO_CLKCTL_BUSMODE; - SDIO_CLKCTL |= bus_mode; -} - -/*! - \brief set the SDIO power state - \param[in] power_state: SDIO power state - only one parameter can be selected which is shown as below: - \arg SDIO_POWER_ON: SDIO power on - \arg SDIO_POWER_OFF: SDIO power off - \param[out] none - \retval none -*/ -void sdio_power_state_set(uint32_t power_state) -{ - SDIO_PWRCTL = power_state; -} - -/*! - \brief get the SDIO power state - \param[in] none - \param[out] none - \retval SDIO power state - only one parameter can be selected which is shown as below: - \arg SDIO_POWER_ON: SDIO power on - \arg SDIO_POWER_OFF: SDIO power off -*/ -uint32_t sdio_power_state_get(void) -{ - return SDIO_PWRCTL; -} - -/*! - \brief enable SDIO_CLK clock output - \param[in] none - \param[out] none - \retval none -*/ -void sdio_clock_enable(void) -{ - SDIO_CLKCTL |= SDIO_CLKCTL_CLKEN; -} - -/*! - \brief disable SDIO_CLK clock output - \param[in] none - \param[out] none - \retval none -*/ -void sdio_clock_disable(void) -{ - SDIO_CLKCTL &= ~SDIO_CLKCTL_CLKEN; -} - -/*! - \brief configure the command and response - \param[in] cmd_index: command index, refer to the related specifications - \param[in] cmd_argument: command argument, refer to the related specifications - \param[in] response_type: response type - only one parameter can be selected which is shown as below: - \arg SDIO_RESPONSETYPE_NO: no response - \arg SDIO_RESPONSETYPE_SHORT: short response - \arg SDIO_RESPONSETYPE_LONG: long response - \param[out] none - \retval none -*/ -void sdio_command_response_config(uint32_t cmd_index, uint32_t cmd_argument, uint32_t response_type) -{ - uint32_t cmd_config = 0U; - /* reset the command index, command argument and response type */ - SDIO_CMDAGMT &= ~SDIO_CMDAGMT_CMDAGMT; - SDIO_CMDAGMT = cmd_argument; - cmd_config = SDIO_CMDCTL; - cmd_config &= ~(SDIO_CMDCTL_CMDIDX | SDIO_CMDCTL_CMDRESP); - /* configure SDIO_CMDCTL and SDIO_CMDAGMT according to the parameters */ - cmd_config |= (cmd_index | response_type); - SDIO_CMDCTL = cmd_config; -} - -/*! - \brief set the command state machine wait type - \param[in] wait_type: wait type - only one parameter can be selected which is shown as below: - \arg SDIO_WAITTYPE_NO: not wait interrupt - \arg SDIO_WAITTYPE_INTERRUPT: wait interrupt - \arg SDIO_WAITTYPE_DATAEND: wait the end of data transfer - \param[out] none - \retval none -*/ -void sdio_wait_type_set(uint32_t wait_type) -{ - /* reset INTWAIT and WAITDEND */ - SDIO_CMDCTL &= ~(SDIO_CMDCTL_INTWAIT | SDIO_CMDCTL_WAITDEND); - /* set the wait type according to wait_type */ - SDIO_CMDCTL |= wait_type; -} - -/*! - \brief enable the CSM(command state machine) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_csm_enable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_CSMEN; -} - -/*! - \brief disable the CSM(command state machine) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_csm_disable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_CSMEN; -} - -/*! - \brief get the last response command index - \param[in] none - \param[out] none - \retval last response command index -*/ -uint8_t sdio_command_index_get(void) -{ - return (uint8_t)SDIO_RSPCMDIDX; -} - -/*! - \brief get the response for the last received command - \param[in] responsex: SDIO response - only one parameter can be selected which is shown as below: - \arg SDIO_RESPONSE0: card response[31:0]/card response[127:96] - \arg SDIO_RESPONSE1: card response[95:64] - \arg SDIO_RESPONSE2: card response[63:32] - \arg SDIO_RESPONSE3: card response[31:1], plus bit 0 - \param[out] none - \retval response for the last received command -*/ -uint32_t sdio_response_get(uint32_t responsex) -{ - uint32_t resp_content = 0U; - switch(responsex){ - case SDIO_RESPONSE0: - resp_content = SDIO_RESP0; - break; - case SDIO_RESPONSE1: - resp_content = SDIO_RESP1; - break; - case SDIO_RESPONSE2: - resp_content = SDIO_RESP2; - break; - case SDIO_RESPONSE3: - resp_content = SDIO_RESP3; - break; - default: - break; - } - return resp_content; -} - -/*! - \brief configure the data timeout, data length and data block size - \param[in] data_timeout: data timeout period in card bus clock periods - \param[in] data_length: number of data bytes to be transferred - \param[in] data_blocksize: size of data block for block transfer - only one parameter can be selected which is shown as below: - \arg SDIO_DATABLOCKSIZE_1BYTE: block size = 1 byte - \arg SDIO_DATABLOCKSIZE_2BYTES: block size = 2 bytes - \arg SDIO_DATABLOCKSIZE_4BYTES: block size = 4 bytes - \arg SDIO_DATABLOCKSIZE_8BYTES: block size = 8 bytes - \arg SDIO_DATABLOCKSIZE_16BYTES: block size = 16 bytes - \arg SDIO_DATABLOCKSIZE_32BYTES: block size = 32 bytes - \arg SDIO_DATABLOCKSIZE_64BYTES: block size = 64 bytes - \arg SDIO_DATABLOCKSIZE_128BYTES: block size = 128 bytes - \arg SDIO_DATABLOCKSIZE_256BYTES: block size = 256 bytes - \arg SDIO_DATABLOCKSIZE_512BYTES: block size = 512 bytes - \arg SDIO_DATABLOCKSIZE_1024BYTES: block size = 1024 bytes - \arg SDIO_DATABLOCKSIZE_2048BYTES: block size = 2048 bytes - \arg SDIO_DATABLOCKSIZE_4096BYTES: block size = 4096 bytes - \arg SDIO_DATABLOCKSIZE_8192BYTES: block size = 8192 bytes - \arg SDIO_DATABLOCKSIZE_16384BYTES: block size = 16384 bytes - \param[out] none - \retval none -*/ -void sdio_data_config(uint32_t data_timeout, uint32_t data_length, uint32_t data_blocksize) -{ - /* reset data timeout, data length and data block size */ - SDIO_DATATO &= ~SDIO_DATATO_DATATO; - SDIO_DATALEN &= ~SDIO_DATALEN_DATALEN; - SDIO_DATACTL &= ~SDIO_DATACTL_BLKSZ; - /* configure the related parameters of data */ - SDIO_DATATO = data_timeout; - SDIO_DATALEN = data_length; - SDIO_DATACTL |= data_blocksize; -} - -/*! - \brief configure the data transfer mode and direction - \param[in] transfer_mode: mode of data transfer - only one parameter can be selected which is shown as below: - \arg SDIO_TRANSMODE_BLOCK: block transfer - \arg SDIO_TRANSMODE_STREAM: stream transfer or SDIO multibyte transfer - \param[in] transfer_direction: data transfer direction, read or write - only one parameter can be selected which is shown as below: - \arg SDIO_TRANSDIRECTION_TOCARD: write data to card - \arg SDIO_TRANSDIRECTION_TOSDIO: read data from card - \param[out] none - \retval none -*/ -void sdio_data_transfer_config(uint32_t transfer_mode, uint32_t transfer_direction) -{ - uint32_t data_trans = 0U; - /* reset the data transfer mode, transfer direction and set according to the parameters */ - data_trans = SDIO_DATACTL; - data_trans &= ~(SDIO_DATACTL_TRANSMOD | SDIO_DATACTL_DATADIR); - data_trans |= (transfer_mode | transfer_direction); - SDIO_DATACTL = data_trans; -} - -/*! - \brief enable the DSM(data state machine) for data transfer - \param[in] none - \param[out] none - \retval none -*/ -void sdio_dsm_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_DATAEN; -} - -/*! - \brief disable the DSM(data state machine) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_dsm_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_DATAEN; -} - -/*! - \brief write data(one word) to the transmit FIFO - \param[in] data: 32-bit data write to card - \param[out] none - \retval none -*/ -void sdio_data_write(uint32_t data) -{ - SDIO_FIFO = data; -} - -/*! - \brief read data(one word) from the receive FIFO - \param[in] none - \param[out] none - \retval received data -*/ -uint32_t sdio_data_read(void) -{ - return SDIO_FIFO; -} - -/*! - \brief get the number of remaining data bytes to be transferred to card - \param[in] none - \param[out] none - \retval number of remaining data bytes to be transferred -*/ -uint32_t sdio_data_counter_get(void) -{ - return SDIO_DATACNT; -} - -/*! - \brief get the number of words remaining to be written or read from FIFO - \param[in] none - \param[out] none - \retval remaining number of words -*/ -uint32_t sdio_fifo_counter_get(void) -{ - return SDIO_FIFOCNT; -} - -/*! - \brief enable the DMA request for SDIO - \param[in] none - \param[out] none - \retval none -*/ -void sdio_dma_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_DMAEN; -} - -/*! - \brief disable the DMA request for SDIO - \param[in] none - \param[out] none - \retval none -*/ -void sdio_dma_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_DMAEN; -} - -/*! - \brief get the flags state of SDIO - \param[in] flag: flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_FLAG_CCRCERR: command response received (CRC check failed) flag - \arg SDIO_FLAG_DTCRCERR: data block sent/received (CRC check failed) flag - \arg SDIO_FLAG_CMDTMOUT: command response timeout flag - \arg SDIO_FLAG_DTTMOUT: data timeout flag - \arg SDIO_FLAG_TXURE: transmit FIFO underrun error occurs flag - \arg SDIO_FLAG_RXORE: received FIFO overrun error occurs flag - \arg SDIO_FLAG_CMDRECV: command response received (CRC check passed) flag - \arg SDIO_FLAG_CMDSEND: command sent (no response required) flag - \arg SDIO_FLAG_DTEND: data end (data counter, SDIO_DATACNT, is zero) flag - \arg SDIO_FLAG_STBITE: start bit error in the bus flag - \arg SDIO_FLAG_DTBLKEND: data block sent/received (CRC check passed) flag - \arg SDIO_FLAG_CMDRUN: command transmission in progress flag - \arg SDIO_FLAG_TXRUN: data transmission in progress flag - \arg SDIO_FLAG_RXRUN: data reception in progress flag - \arg SDIO_FLAG_TFH: transmit FIFO is half empty flag: at least 8 words can be written into the FIFO - \arg SDIO_FLAG_RFH: receive FIFO is half full flag: at least 8 words can be read in the FIFO - \arg SDIO_FLAG_TFF: transmit FIFO is full flag - \arg SDIO_FLAG_RFF: receive FIFO is full flag - \arg SDIO_FLAG_TFE: transmit FIFO is empty flag - \arg SDIO_FLAG_RFE: receive FIFO is empty flag - \arg SDIO_FLAG_TXDTVAL: data is valid in transmit FIFO flag - \arg SDIO_FLAG_RXDTVAL: data is valid in receive FIFO flag - \arg SDIO_FLAG_SDIOINT: SD I/O interrupt received flag - \arg SDIO_FLAG_ATAEND: CE-ATA command completion signal received (only for CMD61) flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus sdio_flag_get(uint32_t flag) -{ - FlagStatus temp_flag = RESET; - if(RESET != (SDIO_STAT & flag)){ - temp_flag = SET; - } - return temp_flag; -} - -/*! - \brief clear the pending flags of SDIO - \param[in] flag: flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_FLAG_CCRCERR: command response received (CRC check failed) flag - \arg SDIO_FLAG_DTCRCERR: data block sent/received (CRC check failed) flag - \arg SDIO_FLAG_CMDTMOUT: command response timeout flag - \arg SDIO_FLAG_DTTMOUT: data timeout flag - \arg SDIO_FLAG_TXURE: transmit FIFO underrun error occurs flag - \arg SDIO_FLAG_RXORE: received FIFO overrun error occurs flag - \arg SDIO_FLAG_CMDRECV: command response received (CRC check passed) flag - \arg SDIO_FLAG_CMDSEND: command sent (no response required) flag - \arg SDIO_FLAG_DTEND: data end (data counter, SDIO_DATACNT, is zero) flag - \arg SDIO_FLAG_STBITE: start bit error in the bus flag - \arg SDIO_FLAG_DTBLKEND: data block sent/received (CRC check passed) flag - \arg SDIO_FLAG_SDIOINT: SD I/O interrupt received flag - \arg SDIO_FLAG_ATAEND: CE-ATA command completion signal received (only for CMD61) flag - \param[out] none - \retval none -*/ -void sdio_flag_clear(uint32_t flag) -{ - SDIO_INTC = flag; -} - -/*! - \brief enable the SDIO interrupt - \param[in] int_flag: interrupt flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_INT_CCRCERR: SDIO CCRCERR interrupt - \arg SDIO_INT_DTCRCERR: SDIO DTCRCERR interrupt - \arg SDIO_INT_CMDTMOUT: SDIO CMDTMOUT interrupt - \arg SDIO_INT_DTTMOUT: SDIO DTTMOUT interrupt - \arg SDIO_INT_TXURE: SDIO TXURE interrupt - \arg SDIO_INT_RXORE: SDIO RXORE interrupt - \arg SDIO_INT_CMDRECV: SDIO CMDRECV interrupt - \arg SDIO_INT_CMDSEND: SDIO CMDSEND interrupt - \arg SDIO_INT_DTEND: SDIO DTEND interrupt - \arg SDIO_INT_STBITE: SDIO STBITE interrupt - \arg SDIO_INT_DTBLKEND: SDIO DTBLKEND interrupt - \arg SDIO_INT_CMDRUN: SDIO CMDRUN interrupt - \arg SDIO_INT_TXRUN: SDIO TXRUN interrupt - \arg SDIO_INT_RXRUN: SDIO RXRUN interrupt - \arg SDIO_INT_TFH: SDIO TFH interrupt - \arg SDIO_INT_RFH: SDIO RFH interrupt - \arg SDIO_INT_TFF: SDIO TFF interrupt - \arg SDIO_INT_RFF: SDIO RFF interrupt - \arg SDIO_INT_TFE: SDIO TFE interrupt - \arg SDIO_INT_RFE: SDIO RFE interrupt - \arg SDIO_INT_TXDTVAL: SDIO TXDTVAL interrupt - \arg SDIO_INT_RXDTVAL: SDIO RXDTVAL interrupt - \arg SDIO_INT_SDIOINT: SDIO SDIOINT interrupt - \arg SDIO_INT_ATAEND: SDIO ATAEND interrupt - \param[out] none - \retval none -*/ -void sdio_interrupt_enable(uint32_t int_flag) -{ - SDIO_INTEN |= int_flag; -} - -/*! - \brief disable the SDIO interrupt - \param[in] int_flag: interrupt flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_INT_CCRCERR: SDIO CCRCERR interrupt - \arg SDIO_INT_DTCRCERR: SDIO DTCRCERR interrupt - \arg SDIO_INT_CMDTMOUT: SDIO CMDTMOUT interrupt - \arg SDIO_INT_DTTMOUT: SDIO DTTMOUT interrupt - \arg SDIO_INT_TXURE: SDIO TXURE interrupt - \arg SDIO_INT_RXORE: SDIO RXORE interrupt - \arg SDIO_INT_CMDRECV: SDIO CMDRECV interrupt - \arg SDIO_INT_CMDSEND: SDIO CMDSEND interrupt - \arg SDIO_INT_DTEND: SDIO DTEND interrupt - \arg SDIO_INT_STBITE: SDIO STBITE interrupt - \arg SDIO_INT_DTBLKEND: SDIO DTBLKEND interrupt - \arg SDIO_INT_CMDRUN: SDIO CMDRUN interrupt - \arg SDIO_INT_TXRUN: SDIO TXRUN interrupt - \arg SDIO_INT_RXRUN: SDIO RXRUN interrupt - \arg SDIO_INT_TFH: SDIO TFH interrupt - \arg SDIO_INT_RFH: SDIO RFH interrupt - \arg SDIO_INT_TFF: SDIO TFF interrupt - \arg SDIO_INT_RFF: SDIO RFF interrupt - \arg SDIO_INT_TFE: SDIO TFE interrupt - \arg SDIO_INT_RFE: SDIO RFE interrupt - \arg SDIO_INT_TXDTVAL: SDIO TXDTVAL interrupt - \arg SDIO_INT_RXDTVAL: SDIO RXDTVAL interrupt - \arg SDIO_INT_SDIOINT: SDIO SDIOINT interrupt - \arg SDIO_INT_ATAEND: SDIO ATAEND interrupt - \param[out] none - \retval none -*/ -void sdio_interrupt_disable(uint32_t int_flag) -{ - SDIO_INTEN &= ~int_flag; -} - -/*! - \brief get the interrupt flags state of SDIO - \param[in] int_flag: interrupt flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_INT_FLAG_CCRCERR: SDIO CCRCERR interrupt flag - \arg SDIO_INT_FLAG_DTCRCERR: SDIO DTCRCERR interrupt flag - \arg SDIO_INT_FLAG_CMDTMOUT: SDIO CMDTMOUT interrupt flag - \arg SDIO_INT_FLAG_DTTMOUT: SDIO DTTMOUT interrupt flag - \arg SDIO_INT_FLAG_TXURE: SDIO TXURE interrupt flag - \arg SDIO_INT_FLAG_RXORE: SDIO RXORE interrupt flag - \arg SDIO_INT_FLAG_CMDRECV: SDIO CMDRECV interrupt flag - \arg SDIO_INT_FLAG_CMDSEND: SDIO CMDSEND interrupt flag - \arg SDIO_INT_FLAG_DTEND: SDIO DTEND interrupt flag - \arg SDIO_INT_FLAG_STBITE: SDIO STBITE interrupt flag - \arg SDIO_INT_FLAG_DTBLKEND: SDIO DTBLKEND interrupt flag - \arg SDIO_INT_FLAG_CMDRUN: SDIO CMDRUN interrupt flag - \arg SDIO_INT_FLAG_TXRUN: SDIO TXRUN interrupt flag - \arg SDIO_INT_FLAG_RXRUN: SDIO RXRUN interrupt flag - \arg SDIO_INT_FLAG_TFH: SDIO TFH interrupt flag - \arg SDIO_INT_FLAG_RFH: SDIO RFH interrupt flag - \arg SDIO_INT_FLAG_TFF: SDIO TFF interrupt flag - \arg SDIO_INT_FLAG_RFF: SDIO RFF interrupt flag - \arg SDIO_INT_FLAG_TFE: SDIO TFE interrupt flag - \arg SDIO_INT_FLAG_RFE: SDIO RFE interrupt flag - \arg SDIO_INT_FLAG_TXDTVAL: SDIO TXDTVAL interrupt flag - \arg SDIO_INT_FLAG_RXDTVAL: SDIO RXDTVAL interrupt flag - \arg SDIO_INT_FLAG_SDIOINT: SDIO SDIOINT interrupt flag - \arg SDIO_INT_FLAG_ATAEND: SDIO ATAEND interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus sdio_interrupt_flag_get(uint32_t int_flag) -{ - if(RESET != (SDIO_STAT & int_flag)){ - return SET; - } - return RESET; -} - -/*! - \brief clear the interrupt pending flags of SDIO - \param[in] int_flag: interrupt flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_INT_FLAG_CCRCERR: command response received (CRC check failed) flag - \arg SDIO_INT_FLAG_DTCRCERR: data block sent/received (CRC check failed) flag - \arg SDIO_INT_FLAG_CMDTMOUT: command response timeout flag - \arg SDIO_INT_FLAG_DTTMOUT: data timeout flag - \arg SDIO_INT_FLAG_TXURE: transmit FIFO underrun error occurs flag - \arg SDIO_INT_FLAG_RXORE: received FIFO overrun error occurs flag - \arg SDIO_INT_FLAG_CMDRECV: command response received (CRC check passed) flag - \arg SDIO_INT_FLAG_CMDSEND: command sent (no response required) flag - \arg SDIO_INT_FLAG_DTEND: data end (data counter, SDIO_DATACNT, is zero) flag - \arg SDIO_INT_FLAG_STBITE: start bit error in the bus flag - \arg SDIO_INT_FLAG_DTBLKEND: data block sent/received (CRC check passed) flag - \arg SDIO_INT_FLAG_SDIOINT: SD I/O interrupt received flag - \arg SDIO_INT_FLAG_ATAEND: CE-ATA command completion signal received (only for CMD61) flag - \param[out] none - \retval none -*/ -void sdio_interrupt_flag_clear(uint32_t int_flag) -{ - SDIO_INTC = int_flag; -} - -/*! - \brief enable the read wait mode(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_readwait_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_RWEN; -} - -/*! - \brief disable the read wait mode(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_readwait_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_RWEN; -} - -/*! - \brief enable the function that stop the read wait process(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_stop_readwait_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_RWSTOP; -} - -/*! - \brief disable the function that stop the read wait process(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_stop_readwait_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_RWSTOP; -} - -/*! - \brief set the read wait type(SD I/O only) - \param[in] readwait_type: SD I/O read wait type - only one parameter can be selected which is shown as below: - \arg SDIO_READWAITTYPE_CLK: read wait control by stopping SDIO_CLK - \arg SDIO_READWAITTYPE_DAT2: read wait control using SDIO_DAT[2] - \param[out] none - \retval none -*/ -void sdio_readwait_type_set(uint32_t readwait_type) -{ - if(SDIO_READWAITTYPE_CLK == readwait_type){ - SDIO_DATACTL |= SDIO_DATACTL_RWTYPE; - }else{ - SDIO_DATACTL &= ~SDIO_DATACTL_RWTYPE; - } -} - -/*! - \brief enable the SD I/O mode specific operation(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_operation_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_IOEN; -} - -/*! - \brief disable the SD I/O mode specific operation(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_operation_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_IOEN; -} - -/*! - \brief enable the SD I/O suspend operation(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_suspend_enable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_SUSPEND; -} - -/*! - \brief disable the SD I/O suspend operation(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_suspend_disable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_SUSPEND; -} - -/*! - \brief enable the CE-ATA command(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_command_enable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_ATAEN; -} - -/*! - \brief disable the CE-ATA command(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_command_disable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_ATAEN; -} - -/*! - \brief enable the CE-ATA interrupt(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_interrupt_enable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_NINTEN; -} - -/*! - \brief disable the CE-ATA interrupt(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_interrupt_disable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_NINTEN; -} - -/*! - \brief enable the CE-ATA command completion signal(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_command_completion_enable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_ENCMDC; -} - -/*! - \brief disable the CE-ATA command completion signal(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_command_completion_disable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_ENCMDC; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_spi.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_spi.c deleted file mode 100644 index 26b7081..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_spi.c +++ /dev/null @@ -1,717 +0,0 @@ -/*! - \file gd32f10x_spi.c - \brief SPI driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_spi.h" - -/* SPI/I2S parameter initialization mask */ -#define SPI_INIT_MASK ((uint32_t)0x00003040U) /*!< SPI parameter initialization mask */ -#define I2S_INIT_MASK ((uint32_t)0x0000F047U) /*!< I2S parameter initialization mask */ - -/* I2S clock source selection, multiplication and division mask */ -#define I2S1_CLOCK_SEL ((uint32_t)0x00020000U) /* I2S1 clock source selection */ -#define I2S2_CLOCK_SEL ((uint32_t)0x00040000U) /* I2S2 clock source selection */ -#define I2S_CLOCK_MUL_MASK ((uint32_t)0x0000F000U) /* I2S clock multiplication mask */ -#define I2S_CLOCK_DIV_MASK ((uint32_t)0x000000F0U) /* I2S clock division mask */ - -/* default value and offset */ -#define SPI_I2SPSC_DEFAULT_VALUE ((uint32_t)0x00000002U) /* default value of SPI_I2SPSC register */ -#define RCU_CFG1_PREDV1_OFFSET 4U /* PREDV1 offset in RCU_CFG1 */ -#define RCU_CFG1_PLL2MF_OFFSET 12U /* PLL2MF offset in RCU_CFG1 */ - -/*! - \brief reset SPI and I2S - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_i2s_deinit(uint32_t spi_periph) -{ - switch(spi_periph){ - case SPI0: - /* reset SPI0 */ - rcu_periph_reset_enable(RCU_SPI0RST); - rcu_periph_reset_disable(RCU_SPI0RST); - break; - case SPI1: - /* reset SPI1 and I2S1 */ - rcu_periph_reset_enable(RCU_SPI1RST); - rcu_periph_reset_disable(RCU_SPI1RST); - break; - case SPI2: - /* reset SPI2 and I2S2 */ - rcu_periph_reset_enable(RCU_SPI2RST); - rcu_periph_reset_disable(RCU_SPI2RST); - break; - default : - break; - } -} - -/*! - \brief initialize the parameters of SPI struct with the default values - \param[in] spi_struct: SPI parameter stuct - \param[out] none - \retval none -*/ -void spi_struct_para_init(spi_parameter_struct* spi_struct) -{ - /* set the SPI struct with the default values */ - spi_struct->device_mode = SPI_SLAVE; - spi_struct->trans_mode = SPI_TRANSMODE_FULLDUPLEX; - spi_struct->frame_size = SPI_FRAMESIZE_8BIT; - spi_struct->nss = SPI_NSS_HARD; - spi_struct->clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE; - spi_struct->prescale = SPI_PSC_2; -} - -/*! - \brief initialize SPI parameter - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] spi_struct: SPI parameter initialization stuct members of the structure - and the member values are shown as below: - device_mode: SPI_MASTER, SPI_SLAVE - trans_mode: SPI_TRANSMODE_FULLDUPLEX, SPI_TRANSMODE_RECEIVEONLY, - SPI_TRANSMODE_BDRECEIVE, SPI_TRANSMODE_BDTRANSMIT - frame_size: SPI_FRAMESIZE_16BIT, SPI_FRAMESIZE_8BIT - nss: SPI_NSS_SOFT, SPI_NSS_HARD - endian: SPI_ENDIAN_MSB, SPI_ENDIAN_LSB - clock_polarity_phase: SPI_CK_PL_LOW_PH_1EDGE, SPI_CK_PL_HIGH_PH_1EDGE - SPI_CK_PL_LOW_PH_2EDGE, SPI_CK_PL_HIGH_PH_2EDGE - prescale: SPI_PSC_n (n=2,4,8,16,32,64,128,256) - \param[out] none - \retval none -*/ -void spi_init(uint32_t spi_periph, spi_parameter_struct* spi_struct) -{ - uint32_t reg = 0U; - reg = SPI_CTL0(spi_periph); - reg &= SPI_INIT_MASK; - - /* select SPI as master or slave */ - reg |= spi_struct->device_mode; - /* select SPI transfer mode */ - reg |= spi_struct->trans_mode; - /* select SPI frame size */ - reg |= spi_struct->frame_size; - /* select SPI NSS use hardware or software */ - reg |= spi_struct->nss; - /* select SPI LSB or MSB */ - reg |= spi_struct->endian; - /* select SPI polarity and phase */ - reg |= spi_struct->clock_polarity_phase; - /* select SPI prescale to adjust transmit speed */ - reg |= spi_struct->prescale; - - /* write to SPI_CTL0 register */ - SPI_CTL0(spi_periph) = (uint32_t)reg; - - SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SSEL); -} - -/*! - \brief enable SPI - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_enable(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SPIEN; -} - -/*! - \brief disable SPI - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_disable(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SPIEN); -} - -/*! - \brief initialize I2S parameter - \param[in] spi_periph: SPIx(x=1,2) - \param[in] mode: I2S operation mode - only one parameter can be selected which is shown as below: - \arg I2S_MODE_SLAVETX: I2S slave transmit mode - \arg I2S_MODE_SLAVERX: I2S slave receive mode - \arg I2S_MODE_MASTERTX: I2S master transmit mode - \arg I2S_MODE_MASTERRX: I2S master receive mode - \param[in] standard: I2S standard - only one parameter can be selected which is shown as below: - \arg I2S_STD_PHILLIPS: I2S phillips standard - \arg I2S_STD_MSB: I2S MSB standard - \arg I2S_STD_LSB: I2S LSB standard - \arg I2S_STD_PCMSHORT: I2S PCM short standard - \arg I2S_STD_PCMLONG: I2S PCM long standard - \param[in] ckpl: I2S idle state clock polarity - only one parameter can be selected which is shown as below: - \arg I2S_CKPL_LOW: I2S clock polarity low level - \arg I2S_CKPL_HIGH: I2S clock polarity high level - \param[out] none - \retval none -*/ -void i2s_init(uint32_t spi_periph, uint32_t mode, uint32_t standard, uint32_t ckpl) -{ - uint32_t reg = 0U; - reg = SPI_I2SCTL(spi_periph); - reg &= I2S_INIT_MASK; - - /* enable I2S mode */ - reg |= (uint32_t)SPI_I2SCTL_I2SSEL; - /* select I2S mode */ - reg |= (uint32_t)mode; - /* select I2S standard */ - reg |= (uint32_t)standard; - /* select I2S polarity */ - reg |= (uint32_t)ckpl; - - /* write to SPI_I2SCTL register */ - SPI_I2SCTL(spi_periph) = (uint32_t)reg; -} - -/*! - \brief configure I2S prescaler - \param[in] spi_periph: SPIx(x=1,2) - \param[in] audiosample: I2S audio sample rate - only one parameter can be selected which is shown as below: - \arg I2S_AUDIOSAMPLE_8K: audio sample rate is 8KHz - \arg I2S_AUDIOSAMPLE_11K: audio sample rate is 11KHz - \arg I2S_AUDIOSAMPLE_16K: audio sample rate is 16KHz - \arg I2S_AUDIOSAMPLE_22K: audio sample rate is 22KHz - \arg I2S_AUDIOSAMPLE_32K: audio sample rate is 32KHz - \arg I2S_AUDIOSAMPLE_44K: audio sample rate is 44KHz - \arg I2S_AUDIOSAMPLE_48K: audio sample rate is 48KHz - \arg I2S_AUDIOSAMPLE_96K: audio sample rate is 96KHz - \arg I2S_AUDIOSAMPLE_192K: audio sample rate is 192KHz - \param[in] frameformat: I2S data length and channel length - only one parameter can be selected which is shown as below: - \arg I2S_FRAMEFORMAT_DT16B_CH16B: I2S data length is 16 bit and channel length is 16 bit - \arg I2S_FRAMEFORMAT_DT16B_CH32B: I2S data length is 16 bit and channel length is 32 bit - \arg I2S_FRAMEFORMAT_DT24B_CH32B: I2S data length is 24 bit and channel length is 32 bit - \arg I2S_FRAMEFORMAT_DT32B_CH32B: I2S data length is 32 bit and channel length is 32 bit - \param[in] mckout: I2S master clock output - only one parameter can be selected which is shown as below: - \arg I2S_MCKOUT_ENABLE: I2S master clock output enable - \arg I2S_MCKOUT_DISABLE: I2S master clock output disable - \param[out] none - \retval none -*/ -void i2s_psc_config(uint32_t spi_periph, uint32_t audiosample, uint32_t frameformat, uint32_t mckout) -{ - uint32_t i2sdiv = 2U, i2sof = 0U; - uint32_t clks = 0U; - uint32_t i2sclock = 0U; - - /* deinit SPI_I2SPSC register */ - SPI_I2SPSC(spi_periph) = SPI_I2SPSC_DEFAULT_VALUE; - -#ifdef GD32F10X_CL - /* get the I2S clock source */ - if(SPI1 == ((uint32_t)spi_periph)){ - /* I2S1 clock source selection */ - clks = I2S1_CLOCK_SEL; - }else{ - /* I2S2 clock source selection */ - clks = I2S2_CLOCK_SEL; - } - - if(0U != (RCU_CFG1 & clks)){ - /* get RCU PLL2 clock multiplication factor */ - clks = (uint32_t)((RCU_CFG1 & I2S_CLOCK_MUL_MASK) >> RCU_CFG1_PLL2MF_OFFSET); - - if((clks > 5U) && (clks < 15U)){ - /* multiplier is between 8 and 14 */ - clks += 2U; - }else{ - if(15U == clks){ - /* multiplier is 20 */ - clks = 20U; - } - } - - /* get the PREDV1 value */ - i2sclock = (uint32_t)(((RCU_CFG1 & I2S_CLOCK_DIV_MASK) >> RCU_CFG1_PREDV1_OFFSET) + 1U); - /* calculate I2S clock based on PLL2 and PREDV1 */ - i2sclock = (uint32_t)((HXTAL_VALUE / i2sclock) * clks * 2U); - }else{ - /* get system clock */ - i2sclock = rcu_clock_freq_get(CK_SYS); - } -#else - /* get system clock */ - i2sclock = rcu_clock_freq_get(CK_SYS); -#endif /* GD32F10X_CL */ - - /* config the prescaler depending on the mclk output state, the frame format and audio sample rate */ - if(I2S_MCKOUT_ENABLE == mckout){ - clks = (uint32_t)(((i2sclock / 256U) * 10U) / audiosample); - }else{ - if(I2S_FRAMEFORMAT_DT16B_CH16B == frameformat){ - clks = (uint32_t)(((i2sclock / 32U) *10U ) / audiosample); - }else{ - clks = (uint32_t)(((i2sclock / 64U) *10U ) / audiosample); - } - } - - /* remove the floating point */ - clks = (clks + 5U) / 10U; - i2sof = (clks & 0x00000001U); - i2sdiv = ((clks - i2sof) / 2U); - i2sof = (i2sof << 8U); - - /* set the default values */ - if((i2sdiv < 2U) || (i2sdiv > 255U)){ - i2sdiv = 2U; - i2sof = 0U; - } - - /* configure SPI_I2SPSC */ - SPI_I2SPSC(spi_periph) = (uint32_t)(i2sdiv | i2sof | mckout); - - /* clear SPI_I2SCTL_DTLEN and SPI_I2SCTL_CHLEN bits */ - SPI_I2SCTL(spi_periph) &= (uint32_t)(~(SPI_I2SCTL_DTLEN | SPI_I2SCTL_CHLEN)); - /* configure data frame format */ - SPI_I2SCTL(spi_periph) |= (uint32_t)frameformat; -} - -/*! - \brief enable I2S - \param[in] spi_periph: SPIx(x=1,2) - \param[out] none - \retval none -*/ -void i2s_enable(uint32_t spi_periph) -{ - SPI_I2SCTL(spi_periph) |= (uint32_t)SPI_I2SCTL_I2SEN; -} - -/*! - \brief disable I2S - \param[in] spi_periph: SPIx(x=1,2) - \param[out] none - \retval none -*/ -void i2s_disable(uint32_t spi_periph) -{ - SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SEN); -} - -/*! - \brief enable SPI NSS output - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nss_output_enable(uint32_t spi_periph) -{ - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSDRV; -} - -/*! - \brief disable SPI NSS output - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nss_output_disable(uint32_t spi_periph) -{ - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_NSSDRV); -} - -/*! - \brief SPI NSS pin high level in software mode - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nss_internal_high(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SWNSS; -} - -/*! - \brief SPI NSS pin low level in software mode - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nss_internal_low(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SWNSS); -} - -/*! - \brief enable SPI DMA send or receive - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] dma: SPI DMA mode - only one parameter can be selected which is shown as below: - \arg SPI_DMA_TRANSMIT: SPI transmit data using DMA - \arg SPI_DMA_RECEIVE: SPI receive data using DMA - \param[out] none - \retval none -*/ -void spi_dma_enable(uint32_t spi_periph, uint8_t dma) -{ - if(SPI_DMA_TRANSMIT == dma){ - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMATEN; - }else{ - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMAREN; - } -} - -/*! - \brief disable SPI DMA send or receive - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] dma: SPI DMA mode - only one parameter can be selected which is shown as below: - \arg SPI_DMA_TRANSMIT: SPI transmit data using DMA - \arg SPI_DMA_RECEIVE: SPI receive data using DMA - \param[out] none - \retval none -*/ -void spi_dma_disable(uint32_t spi_periph, uint8_t dma) -{ - if(SPI_DMA_TRANSMIT == dma){ - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMATEN); - }else{ - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMAREN); - } -} - -/*! - \brief configure SPI/I2S data frame format - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] frame_format: SPI frame size - only one parameter can be selected which is shown as below: - \arg SPI_FRAMESIZE_16BIT: SPI frame size is 16 bits - \arg SPI_FRAMESIZE_8BIT: SPI frame size is 8 bits - \param[out] none - \retval none -*/ -void spi_i2s_data_frame_format_config(uint32_t spi_periph, uint16_t frame_format) -{ - /* clear SPI_CTL0_FF16 bit */ - SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_FF16); - /* configure SPI_CTL0_FF16 bit */ - SPI_CTL0(spi_periph) |= (uint32_t)frame_format; -} - -/*! - \brief SPI transmit data - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] data: 16-bit data - \param[out] none - \retval none -*/ -void spi_i2s_data_transmit(uint32_t spi_periph, uint16_t data) -{ - SPI_DATA(spi_periph) = (uint32_t)data; -} - -/*! - \brief SPI receive data - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval 16-bit data -*/ -uint16_t spi_i2s_data_receive(uint32_t spi_periph) -{ - return ((uint16_t)SPI_DATA(spi_periph)); -} - -/*! - \brief configure SPI bidirectional transfer direction - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] transfer_direction: SPI transfer direction - only one parameter can be selected which is shown as below: - \arg SPI_BIDIRECTIONAL_TRANSMIT: SPI work in transmit-only mode - \arg SPI_BIDIRECTIONAL_RECEIVE: SPI work in receive-only mode - \param[out] none - \retval none -*/ -void spi_bidirectional_transfer_config(uint32_t spi_periph, uint32_t transfer_direction) -{ - if(SPI_BIDIRECTIONAL_TRANSMIT == transfer_direction){ - /* set the transmit only mode */ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_BIDIRECTIONAL_TRANSMIT; - }else{ - /* set the receive only mode */ - SPI_CTL0(spi_periph) &= SPI_BIDIRECTIONAL_RECEIVE; - } -} - -/*! - \brief set CRC polynomial - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] crc_poly: CRC polynomial value - \param[out] none - \retval none -*/ -void spi_crc_polynomial_set(uint32_t spi_periph, uint16_t crc_poly) -{ - /* enable SPI CRC */ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCEN; - /* set SPI CRC polynomial */ - SPI_CRCPOLY(spi_periph) = (uint32_t)crc_poly; -} - -/*! - \brief get SPI CRC polynomial - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval 16-bit CRC polynomial -*/ -uint16_t spi_crc_polynomial_get(uint32_t spi_periph) -{ - return ((uint16_t)SPI_CRCPOLY(spi_periph)); -} - -/*! - \brief turn on CRC function - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_crc_on(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCEN; -} - -/*! - \brief turn off CRC function - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_crc_off(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_CRCEN); -} -/*! - \brief SPI next data is CRC value - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_crc_next(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCNT; -} - -/*! - \brief get SPI CRC send value or receive value - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] crc: SPI crc value - only one parameter can be selected which is shown as below: - \arg SPI_CRC_TX: get transmit crc value - \arg SPI_CRC_RX: get receive crc value - \param[out] none - \retval 16-bit CRC value -*/ -uint16_t spi_crc_get(uint32_t spi_periph, uint8_t crc) -{ - if(SPI_CRC_TX == crc){ - return ((uint16_t)(SPI_TCRC(spi_periph))); - }else{ - return ((uint16_t)(SPI_RCRC(spi_periph))); - } -} - -/*! - \brief enable SPI and I2S interrupt - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] interrupt: SPI/I2S interrupt - only one parameter can be selected which is shown as below: - \arg SPI_I2S_INT_TBE: transmit buffer empty interrupt - \arg SPI_I2S_INT_RBNE: receive buffer not empty interrupt - \arg SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error, - transmission underrun error and format error interrupt - \param[out] none - \retval none -*/ -void spi_i2s_interrupt_enable(uint32_t spi_periph, uint8_t interrupt) -{ - switch(interrupt){ - /* SPI/I2S transmit buffer empty interrupt */ - case SPI_I2S_INT_TBE: - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_TBEIE; - break; - /* SPI/I2S receive buffer not empty interrupt */ - case SPI_I2S_INT_RBNE: - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_RBNEIE; - break; - /* SPI/I2S error */ - case SPI_I2S_INT_ERR: - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_ERRIE; - break; - default: - break; - } -} - -/*! - \brief disable SPI and I2S interrupt - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] interrupt: SPI/I2S interrupt - only one parameter can be selected which is shown as below: - \arg SPI_I2S_INT_TBE: transmit buffer empty interrupt - \arg SPI_I2S_INT_RBNE: receive buffer not empty interrupt - \arg SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error, - transmission underrun error and format error interrupt - \param[out] none - \retval none -*/ -void spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt) -{ - switch(interrupt){ - /* SPI/I2S transmit buffer empty interrupt */ - case SPI_I2S_INT_TBE: - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_TBEIE); - break; - /* SPI/I2S receive buffer not empty interrupt */ - case SPI_I2S_INT_RBNE: - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_RBNEIE); - break; - /* SPI/I2S error */ - case SPI_I2S_INT_ERR: - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_ERRIE); - break; - default : - break; - } -} - -/*! - \brief get SPI and I2S interrupt flag status - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] interrupt: SPI/I2S interrupt flag status - only one parameter can be selected which is shown as below: - \arg SPI_I2S_INT_FLAG_TBE: transmit buffer empty interrupt flag - \arg SPI_I2S_INT_FLAG_RBNE: receive buffer not empty interrupt flag - \arg SPI_I2S_INT_FLAG_RXORERR: overrun interrupt flag - \arg SPI_INT_FLAG_CONFERR: config error interrupt flag - \arg SPI_INT_FLAG_CRCERR: CRC error interrupt flag - \arg I2S_INT_FLAG_TXURERR: underrun error interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt) -{ - uint32_t reg1 = SPI_STAT(spi_periph); - uint32_t reg2 = SPI_CTL1(spi_periph); - - switch(interrupt){ - /* SPI/I2S transmit buffer empty interrupt */ - case SPI_I2S_INT_FLAG_TBE: - reg1 = reg1 & SPI_STAT_TBE; - reg2 = reg2 & SPI_CTL1_TBEIE; - break; - /* SPI/I2S receive buffer not empty interrupt */ - case SPI_I2S_INT_FLAG_RBNE: - reg1 = reg1 & SPI_STAT_RBNE; - reg2 = reg2 & SPI_CTL1_RBNEIE; - break; - /* SPI/I2S overrun interrupt */ - case SPI_I2S_INT_FLAG_RXORERR: - reg1 = reg1 & SPI_STAT_RXORERR; - reg2 = reg2 & SPI_CTL1_ERRIE; - break; - /* SPI config error interrupt */ - case SPI_INT_FLAG_CONFERR: - reg1 = reg1 & SPI_STAT_CONFERR; - reg2 = reg2 & SPI_CTL1_ERRIE; - break; - /* SPI CRC error interrupt */ - case SPI_INT_FLAG_CRCERR: - reg1 = reg1 & SPI_STAT_CRCERR; - reg2 = reg2 & SPI_CTL1_ERRIE; - break; - /* I2S underrun error interrupt */ - case I2S_INT_FLAG_TXURERR: - reg1 = reg1 & SPI_STAT_TXURERR; - reg2 = reg2 & SPI_CTL1_ERRIE; - break; - default : - break; - } - /*get SPI/I2S interrupt flag status */ - if((0U != reg1) && (0U != reg2)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief get SPI and I2S flag status - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] flag: SPI/I2S flag status - one or more parameters can be selected which are shown as below: - \arg SPI_FLAG_TBE: transmit buffer empty flag - \arg SPI_FLAG_RBNE: receive buffer not empty flag - \arg SPI_FLAG_TRANS: transmit on-going flag - \arg SPI_FLAG_RXORERR: receive overrun error flag - \arg SPI_FLAG_CONFERR: mode config error flag - \arg SPI_FLAG_CRCERR: CRC error flag - \arg I2S_FLAG_RXORERR: overrun error flag - \arg I2S_FLAG_TXURERR: underrun error flag - \arg I2S_FLAG_CH: channel side flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag) -{ - if(RESET != (SPI_STAT(spi_periph) & flag)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear SPI CRC error flag status - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_crc_error_clear(uint32_t spi_periph) -{ - SPI_STAT(spi_periph) &= (uint32_t)(~SPI_FLAG_CRCERR); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_timer.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_timer.c deleted file mode 100644 index 6877bbc..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_timer.c +++ /dev/null @@ -1,2002 +0,0 @@ -/*! - \file gd32f10x_timer.c - \brief TIMER driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_timer.h" - -/* TIMER init parameter mask */ -#define ALIGNEDMODE_MASK ((uint32_t)0x00000060U) /*!< TIMER init parameter aligne dmode mask */ -#define COUNTERDIRECTION_MASK ((uint32_t)0x00000010U) /*!< TIMER init parameter counter direction mask */ -#define CLOCKDIVISION_MASK ((uint32_t)0x00000300U) /*!< TIMER init parameter clock division value mask */ - -/*! - \brief deinit a TIMER - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_deinit(uint32_t timer_periph) -{ - switch(timer_periph){ - case TIMER0: - /* reset TIMER0 */ - rcu_periph_reset_enable(RCU_TIMER0RST); - rcu_periph_reset_disable(RCU_TIMER0RST); - break; - case TIMER1: - /* reset TIMER1 */ - rcu_periph_reset_enable(RCU_TIMER1RST); - rcu_periph_reset_disable(RCU_TIMER1RST); - break; - case TIMER2: - /* reset TIMER2 */ - rcu_periph_reset_enable(RCU_TIMER2RST); - rcu_periph_reset_disable(RCU_TIMER2RST); - break; - case TIMER3: - /* reset TIMER3 */ - rcu_periph_reset_enable(RCU_TIMER3RST); - rcu_periph_reset_disable(RCU_TIMER3RST); - break; - case TIMER4: - /* reset TIMER4 */ - rcu_periph_reset_enable(RCU_TIMER4RST); - rcu_periph_reset_disable(RCU_TIMER4RST); - break; - case TIMER5: - /* reset TIMER5 */ - rcu_periph_reset_enable(RCU_TIMER5RST); - rcu_periph_reset_disable(RCU_TIMER5RST); - break; - case TIMER6: - /* reset TIMER6 */ - rcu_periph_reset_enable(RCU_TIMER6RST); - rcu_periph_reset_disable(RCU_TIMER6RST); - break; - case TIMER7: - /* reset TIMER7 */ - rcu_periph_reset_enable(RCU_TIMER7RST); - rcu_periph_reset_disable(RCU_TIMER7RST); - break; -#ifdef GD32F10X_XD - case TIMER8: - /* reset TIMER8 */ - rcu_periph_reset_enable(RCU_TIMER8RST); - rcu_periph_reset_disable(RCU_TIMER8RST); - break; - case TIMER9: - /* reset TIMER9 */ - rcu_periph_reset_enable(RCU_TIMER9RST); - rcu_periph_reset_disable(RCU_TIMER9RST); - break; - case TIMER10: - /* reset TIMER10 */ - rcu_periph_reset_enable(RCU_TIMER10RST); - rcu_periph_reset_disable(RCU_TIMER10RST); - break; - case TIMER11: - /* reset TIMER11 */ - rcu_periph_reset_enable(RCU_TIMER11RST); - rcu_periph_reset_disable(RCU_TIMER11RST); - break; - case TIMER12: - /* reset TIMER12 */ - rcu_periph_reset_enable(RCU_TIMER12RST); - rcu_periph_reset_disable(RCU_TIMER12RST); - break; - case TIMER13: - /* reset TIMER13 */ - rcu_periph_reset_enable(RCU_TIMER13RST); - rcu_periph_reset_disable(RCU_TIMER13RST); - break; -#endif /* GD32F10X_XD */ - default: - break; - } -} - -/*! - \brief initialize TIMER init parameter struct with a default value - \param[in] initpara: init parameter struct - \param[out] none - \retval none -*/ -void timer_struct_para_init(timer_parameter_struct* initpara) -{ - /* initialize the init parameter struct member with the default value */ - initpara->prescaler = 0U; - initpara->alignedmode = TIMER_COUNTER_EDGE; - initpara->counterdirection = TIMER_COUNTER_UP; - initpara->period = 65535U; - initpara->clockdivision = TIMER_CKDIV_DIV1; - initpara->repetitioncounter = 0U; -} - -/*! - \brief initialize TIMER counter - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] initpara: init parameter struct - prescaler: prescaler value of the counter clock,0~65535 - alignedmode: TIMER_COUNTER_EDGE,TIMER_COUNTER_CENTER_DOWN,TIMER_COUNTER_CENTER_UP, - TIMER_COUNTER_CENTER_BOTH - counterdirection: TIMER_COUNTER_UP,TIMER_COUNTER_DOWN - period: counter auto reload value,0~65535 - clockdivision: TIMER_CKDIV_DIV1,TIMER_CKDIV_DIV2,TIMER_CKDIV_DIV4 - repetitioncounter: counter repetition value,0~255 - \param[out] none - \retval none -*/ -void timer_init(uint32_t timer_periph, timer_parameter_struct* initpara) -{ - /* configure the counter prescaler value */ - TIMER_PSC(timer_periph) = (uint16_t)initpara->prescaler; - - /* configure the counter direction and aligned mode */ - if((TIMER0 == timer_periph) || (TIMER1 == timer_periph) || (TIMER2 == timer_periph) || (TIMER3 == timer_periph) || - (TIMER4 == timer_periph) || (TIMER7 == timer_periph) || (TIMER8 == timer_periph) || (TIMER9 == timer_periph) || - (TIMER10 == timer_periph) || (TIMER11 == timer_periph) || (TIMER12 == timer_periph) || (TIMER13 == timer_periph)){ - TIMER_CTL0(timer_periph) &= (~(uint32_t)(TIMER_CTL0_DIR | TIMER_CTL0_CAM)); - TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->alignedmode & ALIGNEDMODE_MASK); - TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->counterdirection & COUNTERDIRECTION_MASK); - } - - /* configure the autoreload value */ - TIMER_CAR(timer_periph) = (uint32_t)initpara->period; - - if((TIMER5 != timer_periph) && (TIMER6 != timer_periph)){ - /* reset the CKDIV bit */ - TIMER_CTL0(timer_periph) &= (~(uint32_t)TIMER_CTL0_CKDIV); - TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->clockdivision & CLOCKDIVISION_MASK); - } - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* configure the repetition counter value */ - TIMER_CREP(timer_periph) = (uint32_t)initpara->repetitioncounter; - } - - /* generate an update event */ - TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG; -} - -/*! - \brief enable a TIMER - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_enable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_CEN; -} - -/*! - \brief disable a TIMER - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_disable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_CEN; -} - -/*! - \brief enable the auto reload shadow function - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_auto_reload_shadow_enable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_ARSE; -} - -/*! - \brief disable the auto reload shadow function - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_auto_reload_shadow_disable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_ARSE; -} - -/*! - \brief enable the update event - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_update_event_enable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPDIS; -} - -/*! - \brief disable the update event - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_update_event_disable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) |= (uint32_t) TIMER_CTL0_UPDIS; -} - -/*! - \brief set TIMER counter alignment mode - \param[in] timer_periph: TIMERx(x=0..4,7..13) - \param[in] aligned: - only one parameter can be selected which is shown as below: - \arg TIMER_COUNTER_EDGE: edge-aligned mode - \arg TIMER_COUNTER_CENTER_DOWN: center-aligned and counting down assert mode - \arg TIMER_COUNTER_CENTER_UP: center-aligned and counting up assert mode - \arg TIMER_COUNTER_CENTER_BOTH: center-aligned and counting up/down assert mode - \param[out] none - \retval none -*/ -void timer_counter_alignment(uint32_t timer_periph, uint16_t aligned) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_CAM; - TIMER_CTL0(timer_periph) |= (uint32_t)aligned; -} - -/*! - \brief set TIMER counter up direction - \param[in] timer_periph: TIMERx(x=0..4,7..13) - \param[out] none - \retval none -*/ -void timer_counter_up_direction(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_DIR; -} - -/*! - \brief set TIMER counter down direction - \param[in] timer_periph: TIMERx(x=0..4,7..13) - \param[out] none - \retval none -*/ -void timer_counter_down_direction(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_DIR; -} - -/*! - \brief configure TIMER prescaler - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] prescaler: prescaler value - \param[in] pscreload: prescaler reload mode - only one parameter can be selected which is shown as below: - \arg TIMER_PSC_RELOAD_NOW: the prescaler is loaded right now - \arg TIMER_PSC_RELOAD_UPDATE: the prescaler is loaded at the next update event - \param[out] none - \retval none -*/ -void timer_prescaler_config(uint32_t timer_periph, uint16_t prescaler, uint32_t pscreload) -{ - TIMER_PSC(timer_periph) = (uint32_t)prescaler; - - if(TIMER_PSC_RELOAD_NOW == pscreload){ - TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG; - } -} - -/*! - \brief configure TIMER repetition register value - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] repetition: the counter repetition value,0~255 - \param[out] none - \retval none -*/ -void timer_repetition_value_config(uint32_t timer_periph, uint8_t repetition) -{ - TIMER_CREP(timer_periph) = (uint32_t)repetition; -} - -/*! - \brief configure TIMER autoreload register value - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] autoreload: the counter auto-reload value - \param[out] none - \retval none -*/ -void timer_autoreload_value_config(uint32_t timer_periph, uint32_t autoreload) -{ - TIMER_CAR(timer_periph) = (uint32_t)autoreload; -} - -/*! - \brief configure TIMER counter register value - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] counter: the counter value - \param[out] none - \retval none -*/ -void timer_counter_value_config(uint32_t timer_periph, uint32_t counter) -{ - TIMER_CNT(timer_periph) = (uint32_t)counter; -} - -/*! - \brief read TIMER counter value - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval counter value -*/ -uint32_t timer_counter_read(uint32_t timer_periph) -{ - uint32_t count_value = 0U; - count_value = TIMER_CNT(timer_periph); - return (count_value); -} - -/*! - \brief read TIMER prescaler value - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval prescaler register value -*/ -uint16_t timer_prescaler_read(uint32_t timer_periph) -{ - uint16_t prescaler_value = 0U; - prescaler_value = (uint16_t)(TIMER_PSC(timer_periph)); - return (prescaler_value); -} - -/*! - \brief configure TIMER single pulse mode - \param[in] timer_periph: TIMERx(x=0..8,11) - \param[in] spmode: - only one parameter can be selected which is shown as below: - \arg TIMER_SP_MODE_SINGLE: single pulse mode - \arg TIMER_SP_MODE_REPETITIVE: repetitive pulse mode - \param[out] none - \retval none -*/ -void timer_single_pulse_mode_config(uint32_t timer_periph, uint32_t spmode) -{ - if(TIMER_SP_MODE_SINGLE == spmode){ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_SPM; - }else if(TIMER_SP_MODE_REPETITIVE == spmode){ - TIMER_CTL0(timer_periph) &= ~((uint32_t)TIMER_CTL0_SPM); - }else{ - /* illegal parameters */ - } -} - -/*! - \brief configure TIMER update source - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] update: - only one parameter can be selected which is shown as below: - \arg TIMER_UPDATE_SRC_GLOBAL: update generate by setting of UPG bit or the counter overflow/underflow, - or the slave mode controller trigger - \arg TIMER_UPDATE_SRC_REGULAR: update generate only by counter overflow/underflow - \param[out] none - \retval none -*/ -void timer_update_source_config(uint32_t timer_periph, uint32_t update) -{ - if(TIMER_UPDATE_SRC_REGULAR == update){ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_UPS; - }else if(TIMER_UPDATE_SRC_GLOBAL == update){ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPS; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief enable the TIMER DMA - \param[in] timer_periph: please refer to the following parameters - \param[in] dma: timer DMA source enable - only one parameter can be selected which is shown as below: - \arg TIMER_DMA_UPD: update DMA enable,TIMERx(x=0..7) - \arg TIMER_DMA_CH0D: channel 0 DMA enable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH1D: channel 1 DMA enable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH2D: channel 2 DMA enable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH3D: channel 3 DMA enable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CMTD: commutation DMA request enable,TIMERx(x=0,7) - \arg TIMER_DMA_TRGD: trigger DMA enable,TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_dma_enable(uint32_t timer_periph, uint16_t dma) -{ - TIMER_DMAINTEN(timer_periph) |= (uint32_t) dma; -} - -/*! - \brief disable the TIMER DMA - \param[in] timer_periph: please refer to the following parameters - \param[in] dma: timer DMA source disable - only one parameter can be selected which is shown as below: - \arg TIMER_DMA_UPD: update DMA disable,TIMERx(x=0..7) - \arg TIMER_DMA_CH0D: channel 0 DMA disable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH1D: channel 1 DMA disable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH2D: channel 2 DMA disable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH3D: channel 3 DMA disable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CMTD: commutation DMA request disable,TIMERx(x=0,7) - \arg TIMER_DMA_TRGD: trigger DMA disable,TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_dma_disable(uint32_t timer_periph, uint16_t dma) -{ - TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)(dma)); -} - -/*! - \brief channel DMA request source selection - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] dma_request: channel DMA request source selection - only one parameter can be selected which is shown as below: - \arg TIMER_DMAREQUEST_CHANNELEVENT: DMA request of channel y is sent when channel y event occurs - \arg TIMER_DMAREQUEST_UPDATEEVENT: DMA request of channel y is sent when update event occurs - \param[out] none - \retval none -*/ -void timer_channel_dma_request_source_select(uint32_t timer_periph, uint32_t dma_request) -{ - if(TIMER_DMAREQUEST_UPDATEEVENT == dma_request){ - TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_DMAS; - }else if(TIMER_DMAREQUEST_CHANNELEVENT == dma_request){ - TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_DMAS; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief configure the TIMER DMA transfer - \param[in] timer_periph: please refer to the following parameters - \param[in] dma_baseaddr: - only one parameter can be selected which is shown as below: - \arg TIMER_DMACFG_DMATA_CTL0: DMA transfer address is TIMER_CTL0,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CTL1: DMA transfer address is TIMER_CTL1,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_SMCFG: DMA transfer address is TIMER_SMCFG,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_DMAINTEN: DMA transfer address is TIMER_DMAINTEN,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_INTF: DMA transfer address is TIMER_INTF,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_SWEVG: DMA transfer address is TIMER_SWEVG,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CHCTL0: DMA transfer address is TIMER_CHCTL0,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CHCTL1: DMA transfer address is TIMER_CHCTL1,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CHCTL2: DMA transfer address is TIMER_CHCTL2,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CNT: DMA transfer address is TIMER_CNT,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_PSC: DMA transfer address is TIMER_PSC,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CAR: DMA transfer address is TIMER_CAR,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CREP: DMA transfer address is TIMER_CREP,TIMERx(x=0,7) - \arg TIMER_DMACFG_DMATA_CH0CV: DMA transfer address is TIMER_CH0CV,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CH1CV: DMA transfer address is TIMER_CH1CV,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CH2CV: DMA transfer address is TIMER_CH2CV,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CH3CV: DMA transfer address is TIMER_CH3CV,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CCHP: DMA transfer address is TIMER_CCHP,TIMERx(x=0,7) - \arg TIMER_DMACFG_DMATA_DMACFG: DMA transfer address is TIMER_DMACFG,TIMERx(x=0..4,7) - \param[in] dma_lenth: - only one parameter can be selected which is shown as below: - \arg TIMER_DMACFG_DMATC_xTRANSFER(x=1..18): DMA transfer x time - \param[out] none - \retval none -*/ -void timer_dma_transfer_config(uint32_t timer_periph, uint32_t dma_baseaddr, uint32_t dma_lenth) -{ - TIMER_DMACFG(timer_periph) &= (~(uint32_t)(TIMER_DMACFG_DMATA | TIMER_DMACFG_DMATC)); - TIMER_DMACFG(timer_periph) |= (uint32_t)(dma_baseaddr | dma_lenth); -} - -/*! - \brief software generate events - \param[in] timer_periph: please refer to the following parameters - \param[in] event: the timer software event generation sources - one or more parameters can be selected which are shown as below: - \arg TIMER_EVENT_SRC_UPG: update event generation, TIMERx(x=0..13) - \arg TIMER_EVENT_SRC_CH0G: channel 0 capture or compare event generation, TIMERx(x=0..4,7..13) - \arg TIMER_EVENT_SRC_CH1G: channel 1 capture or compare event generation, TIMERx(x=0..4,7,8,11) - \arg TIMER_EVENT_SRC_CH2G: channel 2 capture or compare event generation, TIMERx(x=0..4,7) - \arg TIMER_EVENT_SRC_CH3G: channel 3 capture or compare event generation, TIMERx(x=0..4,7) - \arg TIMER_EVENT_SRC_CMTG: channel commutation event generation, TIMERx(x=0,7) - \arg TIMER_EVENT_SRC_TRGG: trigger event generation, TIMERx(x=0..4,7,8,11) - \arg TIMER_EVENT_SRC_BRKG: break event generation, TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_event_software_generate(uint32_t timer_periph, uint16_t event) -{ - TIMER_SWEVG(timer_periph) |= (uint32_t)event; -} - -/*! - \brief initialize TIMER break parameter struct with a default value - \param[in] breakpara: TIMER break parameter struct - \param[out] none - \retval none -*/ -void timer_break_struct_para_init(timer_break_parameter_struct* breakpara) -{ - /* initialize the break parameter struct member with the default value */ - breakpara->runoffstate = TIMER_ROS_STATE_DISABLE; - breakpara->ideloffstate = TIMER_IOS_STATE_DISABLE; - breakpara->deadtime = 0U; - breakpara->breakpolarity = TIMER_BREAK_POLARITY_LOW; - breakpara->outputautostate = TIMER_OUTAUTO_DISABLE; - breakpara->protectmode = TIMER_CCHP_PROT_OFF; - breakpara->breakstate = TIMER_BREAK_DISABLE; -} - -/*! - \brief configure TIMER break function - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] breakpara: TIMER break parameter struct - runoffstate: TIMER_ROS_STATE_ENABLE,TIMER_ROS_STATE_DISABLE - ideloffstate: TIMER_IOS_STATE_ENABLE,TIMER_IOS_STATE_DISABLE - deadtime: 0~255 - breakpolarity: TIMER_BREAK_POLARITY_LOW,TIMER_BREAK_POLARITY_HIGH - outputautostate: TIMER_OUTAUTO_ENABLE,TIMER_OUTAUTO_DISABLE - protectmode: TIMER_CCHP_PROT_OFF,TIMER_CCHP_PROT_0,TIMER_CCHP_PROT_1,TIMER_CCHP_PROT_2 - breakstate: TIMER_BREAK_ENABLE,TIMER_BREAK_DISABLE - \param[out] none - \retval none -*/ -void timer_break_config(uint32_t timer_periph, timer_break_parameter_struct* breakpara) -{ - TIMER_CCHP(timer_periph) = (uint32_t)(((uint32_t)(breakpara->runoffstate)) | - ((uint32_t)(breakpara->ideloffstate)) | - ((uint32_t)(breakpara->deadtime)) | - ((uint32_t)(breakpara->breakpolarity)) | - ((uint32_t)(breakpara->outputautostate)) | - ((uint32_t)(breakpara->protectmode)) | - ((uint32_t)(breakpara->breakstate))) ; -} - -/*! - \brief enable TIMER break function - \param[in] timer_periph: TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_break_enable(uint32_t timer_periph) -{ - TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_BRKEN; -} - -/*! - \brief disable TIMER break function - \param[in] timer_periph: TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_break_disable(uint32_t timer_periph) -{ - TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_BRKEN; -} - -/*! - \brief enable TIMER output automatic function - \param[in] timer_periph: TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_automatic_output_enable(uint32_t timer_periph) -{ - TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_OAEN; -} - -/*! - \brief disable TIMER output automatic function - \param[in] timer_periph: TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_automatic_output_disable(uint32_t timer_periph) -{ - TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_OAEN; -} - -/*! - \brief enable or disable TIMER primary output function - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void timer_primary_output_config(uint32_t timer_periph, ControlStatus newvalue) -{ - if(ENABLE == newvalue){ - TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_POEN; - }else{ - TIMER_CCHP(timer_periph) &= (~(uint32_t)TIMER_CCHP_POEN); - } -} - -/*! - \brief enable or disable channel capture/compare control shadow register - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void timer_channel_control_shadow_config(uint32_t timer_periph, ControlStatus newvalue) -{ - if(ENABLE == newvalue){ - TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCSE; - }else{ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCSE); - } -} - -/*! - \brief configure TIMER channel control shadow register update control - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] ccuctl: channel control shadow register update control - only one parameter can be selected which is shown as below: - \arg TIMER_UPDATECTL_CCU: the shadow registers update by when CMTG bit is set - \arg TIMER_UPDATECTL_CCUTRI: the shadow registers update by when CMTG bit is set or an rising edge of TRGI occurs - \param[out] none - \retval none -*/ -void timer_channel_control_shadow_update_config(uint32_t timer_periph, uint32_t ccuctl) -{ - if(TIMER_UPDATECTL_CCU == ccuctl){ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCUC); - }else if(TIMER_UPDATECTL_CCUTRI == ccuctl){ - TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCUC; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief initialize TIMER channel output parameter struct with a default value - \param[in] ocpara: TIMER channel n output parameter struct - \param[out] none - \retval none -*/ -void timer_channel_output_struct_para_init(timer_oc_parameter_struct* ocpara) -{ - /* initialize the channel output parameter struct member with the default value */ - ocpara->outputstate = TIMER_CCX_DISABLE; - ocpara->outputnstate = TIMER_CCXN_DISABLE; - ocpara->ocpolarity = TIMER_OC_POLARITY_HIGH; - ocpara->ocnpolarity = TIMER_OCN_POLARITY_HIGH; - ocpara->ocidlestate = TIMER_OC_IDLE_STATE_LOW; - ocpara->ocnidlestate = TIMER_OCN_IDLE_STATE_LOW; -} - -/*! - \brief configure TIMER channel output function - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) - \param[in] ocpara: TIMER channeln output parameter struct - outputstate: TIMER_CCX_ENABLE,TIMER_CCX_DISABLE - outputnstate: TIMER_CCXN_ENABLE,TIMER_CCXN_DISABLE - ocpolarity: TIMER_OC_POLARITY_HIGH,TIMER_OC_POLARITY_LOW - ocnpolarity: TIMER_OCN_POLARITY_HIGH,TIMER_OCN_POLARITY_LOW - ocidlestate: TIMER_OC_IDLE_STATE_LOW,TIMER_OC_IDLE_STATE_HIGH - ocnidlestate: TIMER_OCN_IDLE_STATE_LOW,TIMER_OCN_IDLE_STATE_HIGH - \param[out] none - \retval none -*/ -void timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_oc_parameter_struct* ocpara) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH0MS; - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputstate; - /* reset the CH0P bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P); - /* set the CH0P bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocpolarity; - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* reset the CH0NEN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN); - /* set the CH0NEN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputnstate; - /* reset the CH0NP bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP); - /* set the CH0NP bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocnpolarity; - /* reset the ISO0 bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0); - /* set the ISO0 bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocidlestate; - /* reset the ISO0N bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0N); - /* set the ISO0N bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocnidlestate; - } - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH1MS; - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 4U); - /* reset the CH1P bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P); - /* set the CH1P bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity)<< 4U); - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* reset the CH1NEN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN); - /* set the CH1NEN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate)<< 4U); - /* reset the CH1NP bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP); - /* set the CH1NP bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity)<< 4U); - /* reset the ISO1 bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1); - /* set the ISO1 bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate)<< 2U); - /* reset the ISO1N bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1N); - /* set the ISO1N bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate)<< 2U); - } - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - /* reset the CH2EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); - TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH2MS; - /* set the CH2EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 8U); - /* reset the CH2P bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P); - /* set the CH2P bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity)<< 8U); - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* reset the CH2NEN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN); - /* set the CH2NEN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate)<< 8U); - /* reset the CH2NP bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP); - /* set the CH2NP bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity)<< 8U); - /* reset the ISO2 bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2); - /* set the ISO2 bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate)<< 4U); - /* reset the ISO2N bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2N); - /* set the ISO2N bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate)<< 4U); - } - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - /* reset the CH3EN bit */ - TIMER_CHCTL2(timer_periph) &=(~(uint32_t)TIMER_CHCTL2_CH3EN); - TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH3MS; - /* set the CH3EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 12U); - /* reset the CH3P bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P); - /* set the CH3P bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity)<< 12U); - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* reset the ISO3 bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO3); - /* set the ISO3 bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate)<< 6U); - } - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output compare mode - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] ocmode: channel output compare mode - only one parameter can be selected which is shown as below: - \arg TIMER_OC_MODE_TIMING: timing mode - \arg TIMER_OC_MODE_ACTIVE: active mode - \arg TIMER_OC_MODE_INACTIVE: inactive mode - \arg TIMER_OC_MODE_TOGGLE: toggle mode - \arg TIMER_OC_MODE_LOW: force low mode - \arg TIMER_OC_MODE_HIGH: force high mode - \arg TIMER_OC_MODE_PWM0: PWM0 mode - \arg TIMER_OC_MODE_PWM1: PWM1 mode - \param[out] none - \retval none -*/ -void timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel, uint16_t ocmode) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCTL); - TIMER_CHCTL0(timer_periph) |= (uint32_t)ocmode; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCTL); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocmode)<< 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCTL); - TIMER_CHCTL1(timer_periph) |= (uint32_t)ocmode; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCTL); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocmode)<< 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output pulse value - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] pulse: channel output pulse value - \param[out] none - \retval none -*/ -void timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t channel, uint16_t pulse) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CH0CV(timer_periph) = (uint32_t)pulse; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CH1CV(timer_periph) = (uint32_t)pulse; - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CH2CV(timer_periph) = (uint32_t)pulse; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CH3CV(timer_periph) = (uint32_t)pulse; - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output shadow function - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] ocshadow: channel output shadow state - only one parameter can be selected which is shown as below: - \arg TIMER_OC_SHADOW_ENABLE: channel output shadow state enable - \arg TIMER_OC_SHADOW_DISABLE: channel output shadow state disable - \param[out] none - \retval none -*/ -void timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, uint16_t ocshadow) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMSEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)ocshadow; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMSEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMSEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)ocshadow; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMSEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output fast function - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] ocfast: channel output fast function - only one parameter can be selected which is shown as below: - \arg TIMER_OC_FAST_ENABLE: channel output fast function enable - \arg TIMER_OC_FAST_DISABLE: channel output fast function disable - \param[out] none - \retval none -*/ -void timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, uint16_t ocfast) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMFEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)ocfast; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMFEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMFEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)ocfast; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMFEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output clear function - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0 - \arg TIMER_CH_1: TIMER channel1 - \arg TIMER_CH_2: TIMER channel2 - \arg TIMER_CH_3: TIMER channel3 - \param[in] occlear: channel output clear function - only one parameter can be selected which is shown as below: - \arg TIMER_OC_CLEAR_ENABLE: channel output clear function enable - \arg TIMER_OC_CLEAR_DISABLE: channel output clear function disable - \param[out] none - \retval none -*/ -void timer_channel_output_clear_config(uint32_t timer_periph, uint16_t channel, uint16_t occlear) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)occlear; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)occlear; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output polarity - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] ocpolarity: channel output polarity - only one parameter can be selected which is shown as below: - \arg TIMER_OC_POLARITY_HIGH: channel output polarity is high - \arg TIMER_OC_POLARITY_LOW: channel output polarity is low - \param[out] none - \retval none -*/ -void timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocpolarity) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P); - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpolarity; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 4U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 8U); - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 12U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel complementary output polarity - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \param[in] ocnpolarity: channel complementary output polarity - only one parameter can be selected which is shown as below: - \arg TIMER_OCN_POLARITY_HIGH: channel complementary output polarity is high - \arg TIMER_OCN_POLARITY_LOW: channel complementary output polarity is low - \param[out] none - \retval none -*/ -void timer_channel_complementary_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnpolarity) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP); - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnpolarity; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 4U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel enable state - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] state: TIMER channel enable state - only one parameter can be selected which is shown as below: - \arg TIMER_CCX_ENABLE: channel enable - \arg TIMER_CCX_DISABLE: channel disable - \param[out] none - \retval none -*/ -void timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)state; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 4U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 8U); - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 12U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel complementary output enable state - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0 - \arg TIMER_CH_1: TIMER channel1 - \arg TIMER_CH_2: TIMER channel2 - \param[in] ocnstate: TIMER channel complementary output enable state - only one parameter can be selected which is shown as below: - \arg TIMER_CCXN_ENABLE: channel complementary enable - \arg TIMER_CCXN_DISABLE: channel complementary disable - \param[out] none - \retval none -*/ -void timer_channel_complementary_output_state_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnstate) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnstate; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 4U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 8U); - break; - default: - break; - } -} - -/*! - \brief initialize TIMER channel input parameter struct with a default value - \param[in] icpara: TIMER channel intput parameter struct - \param[out] none - \retval none -*/ -void timer_channel_input_struct_para_init(timer_ic_parameter_struct* icpara) -{ - /* initialize the channel input parameter struct member with the default value */ - icpara->icpolarity = TIMER_IC_POLARITY_RISING; - icpara->icselection = TIMER_IC_SELECTION_DIRECTTI; - icpara->icprescaler = TIMER_IC_PSC_DIV1; - icpara->icfilter = 0U; -} - -/*! - \brief configure TIMER input capture parameter - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) - \param[in] icpara: TIMER channel intput parameter struct - icpolarity: TIMER_IC_POLARITY_RISING, TIMER_IC_POLARITY_FALLING - icselection: TIMER_IC_SELECTION_DIRECTTI, TIMER_IC_SELECTION_INDIRECTTI, - TIMER_IC_SELECTION_ITS - icprescaler: TIMER_IC_PSC_DIV1, TIMER_IC_PSC_DIV2, TIMER_IC_PSC_DIV4, - TIMER_IC_PSC_DIV8 - icfilter: 0~15 - \param[out] none - \retval none -*/ -void timer_input_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpara) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - - /* reset the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); - TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpara->icpolarity); - /* reset the CH0MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); - TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpara->icselection); - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U); - - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; - break; - - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - - /* reset the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 4U); - /* reset the CH1MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U); - /* reset the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U); - - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - /* reset the CH2EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); - - /* reset the CH2P and CH2NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH2P | TIMER_CHCTL2_CH2NP)); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 8U); - - /* reset the CH2MS bit */ - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2MS); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection)); - - /* reset the CH2CAPFLT bit */ - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPFLT); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U); - - /* set the CH2EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH2EN; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - /* reset the CH3EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN); - - /* reset the CH3P bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH3P)); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 12U); - - /* reset the CH3MS bit */ - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3MS); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U); - - /* reset the CH3CAPFLT bit */ - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPFLT); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U); - - /* set the CH3EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH3EN; - break; - default: - break; - } - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph,channel,(uint16_t)(icpara->icprescaler)); -} - -/*! - \brief configure TIMER channel input capture prescaler value - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] prescaler: channel input capture prescaler value - only one parameter can be selected which is shown as below: - \arg TIMER_IC_PSC_DIV1: no prescaler - \arg TIMER_IC_PSC_DIV2: divided by 2 - \arg TIMER_IC_PSC_DIV4: divided by 4 - \arg TIMER_IC_PSC_DIV8: divided by 8 - \param[out] none - \retval none -*/ -void timer_channel_input_capture_prescaler_config(uint32_t timer_periph, uint16_t channel, uint16_t prescaler) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPPSC); - TIMER_CHCTL0(timer_periph) |= (uint32_t)prescaler; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPPSC); - TIMER_CHCTL0(timer_periph) |= ((uint32_t)prescaler << 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPPSC); - TIMER_CHCTL1(timer_periph) |= (uint32_t)prescaler; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPPSC); - TIMER_CHCTL1(timer_periph) |= ((uint32_t)prescaler << 8U); - break; - default: - break; - } -} - -/*! - \brief read TIMER channel capture compare register value - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[out] none - \retval channel capture compare register value -*/ -uint32_t timer_channel_capture_value_register_read(uint32_t timer_periph, uint16_t channel) -{ - uint32_t count_value = 0U; - - switch(channel){ - case TIMER_CH_0: - /* read TIMER channel 0 capture compare register value */ - count_value = TIMER_CH0CV(timer_periph); - break; - case TIMER_CH_1: - /* read TIMER channel 1 capture compare register value */ - count_value = TIMER_CH1CV(timer_periph); - break; - case TIMER_CH_2: - /* read TIMER channel 2 capture compare register value */ - count_value = TIMER_CH2CV(timer_periph); - break; - case TIMER_CH_3: - /* read TIMER channel 3 capture compare register value */ - count_value = TIMER_CH3CV(timer_periph); - break; - default: - break; - } - return (count_value); -} - -/*! - \brief configure TIMER input pwm capture function - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0 - \arg TIMER_CH_1: TIMER channel1 - \param[in] icpwm:TIMER channel intput pwm parameter struct - icpolarity: TIMER_IC_POLARITY_RISING,TIMER_IC_POLARITY_FALLING - icselection: TIMER_IC_SELECTION_DIRECTTI,TIMER_IC_SELECTION_INDIRECTTI - icprescaler: TIMER_IC_PSC_DIV1,TIMER_IC_PSC_DIV2,TIMER_IC_PSC_DIV4,TIMER_IC_PSC_DIV8 - icfilter: 0~15 - \param[out] none - \retval none -*/ -void timer_input_pwm_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpwm) -{ - uint16_t icpolarity = 0x0U; - uint16_t icselection = 0x0U; - - /* Set channel input polarity */ - if(TIMER_IC_POLARITY_RISING == icpwm->icpolarity){ - icpolarity = TIMER_IC_POLARITY_FALLING; - }else{ - icpolarity = TIMER_IC_POLARITY_RISING; - } - /* Set channel input mode selection */ - if(TIMER_IC_SELECTION_DIRECTTI == icpwm->icselection){ - icselection = TIMER_IC_SELECTION_INDIRECTTI; - }else{ - icselection = TIMER_IC_SELECTION_DIRECTTI; - } - - if(TIMER_CH_0 == channel){ - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - /* reset the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); - /* set the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpwm->icpolarity); - /* reset the CH0MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); - /* set the CH0MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpwm->icselection); - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); - /* set the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U); - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph,TIMER_CH_0,(uint16_t)(icpwm->icprescaler)); - - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - /* reset the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P|TIMER_CHCTL2_CH1NP)); - /* set the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)icpolarity<< 4U); - /* reset the CH1MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); - /* set the CH1MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)icselection<< 8U); - /* reset the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); - /* set the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter)<< 12U); - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph,TIMER_CH_1,(uint16_t)(icpwm->icprescaler)); - }else{ - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - /* reset the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P|TIMER_CHCTL2_CH1NP)); - /* set the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icpolarity)<< 4U); - /* reset the CH1MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); - /* set the CH1MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icselection)<< 8U); - /* reset the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); - /* set the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter)<< 12U); - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph,TIMER_CH_1,(uint16_t)(icpwm->icprescaler)); - - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - /* reset the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P|TIMER_CHCTL2_CH0NP)); - /* set the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)icpolarity; - /* reset the CH0MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); - /* set the CH0MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)icselection; - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); - /* set the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U); - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph,TIMER_CH_0,(uint16_t)(icpwm->icprescaler)); - } -} - -/*! - \brief configure TIMER hall sensor mode - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] hallmode: - only one parameter can be selected which is shown as below: - \arg TIMER_HALLINTERFACE_ENABLE: TIMER hall sensor mode enable - \arg TIMER_HALLINTERFACE_DISABLE: TIMER hall sensor mode disable - \param[out] none - \retval none -*/ -void timer_hall_mode_config(uint32_t timer_periph, uint32_t hallmode) -{ - if(TIMER_HALLINTERFACE_ENABLE == hallmode){ - TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_TI0S; - }else if(TIMER_HALLINTERFACE_DISABLE == hallmode){ - TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_TI0S; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief select TIMER input trigger source - \param[in] timer_periph: please refer to the following parameters - \param[in] intrigger: - only one parameter can be selected which is shown as below: - \arg TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0,TIMERx(x=0..4,7,8,11) - \arg TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1,TIMERx(x=0..4,7,8,11) - \arg TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2,TIMERx(x=0..4,7,8,11) - \arg TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3,TIMERx(x=0..4,7,8,11) - \arg TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector,TIMERx(x=0..4,7,8,11) - \arg TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0,TIMERx(x=0..4,7,8,11) - \arg TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1,TIMERx(x=0..4,7,8,11) - \arg TIMER_SMCFG_TRGSEL_ETIFP: external trigger,TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger) -{ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_TRGS); - TIMER_SMCFG(timer_periph) |= (uint32_t)intrigger; -} - -/*! - \brief select TIMER master mode output trigger source - \param[in] timer_periph: TIMERx(x=0..7) - \param[in] outrigger: - only one parameter can be selected which is shown as below: - \arg TIMER_TRI_OUT_SRC_RESET: the UPG bit as trigger output(TIMERx(x=0..7)) - \arg TIMER_TRI_OUT_SRC_ENABLE: the counter enable signal TIMER_CTL0_CEN as trigger output(TIMERx(x=0..7)) - \arg TIMER_TRI_OUT_SRC_UPDATE: update event as trigger output(TIMERx(x=0..7)) - \arg TIMER_TRI_OUT_SRC_CH0: a capture or a compare match occurred in channel 0 as trigger output TRGO(TIMERx(x=0..4,7)) - \arg TIMER_TRI_OUT_SRC_O0CPRE: O0CPRE as trigger output(TIMERx(x=0..4,7)) - \arg TIMER_TRI_OUT_SRC_O1CPRE: O1CPRE as trigger output(TIMERx(x=0..4,7)) - \arg TIMER_TRI_OUT_SRC_O2CPRE: O2CPRE as trigger output(TIMERx(x=0..4,7)) - \arg TIMER_TRI_OUT_SRC_O3CPRE: O3CPRE as trigger output(TIMERx(x=0..4,7)) - \param[out] none - \retval none -*/ -void timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t outrigger) -{ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_MMC); - TIMER_CTL1(timer_periph) |= (uint32_t)outrigger; -} - -/*! - \brief select TIMER slave mode - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] slavemode: - only one parameter can be selected which is shown as below: - \arg TIMER_SLAVE_MODE_DISABLE: slave mode disable - \arg TIMER_ENCODER_MODE0: encoder mode 0 - \arg TIMER_ENCODER_MODE1: encoder mode 1 - \arg TIMER_ENCODER_MODE2: encoder mode 2 - \arg TIMER_SLAVE_MODE_RESTART: restart mode - \arg TIMER_SLAVE_MODE_PAUSE: pause mode - \arg TIMER_SLAVE_MODE_EVENT: event mode - \arg TIMER_SLAVE_MODE_EXTERNAL0: external clock mode 0. - \param[out] none - \retval none -*/ - -void timer_slave_mode_select(uint32_t timer_periph, uint32_t slavemode) -{ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); - - TIMER_SMCFG(timer_periph) |= (uint32_t)slavemode; -} - -/*! - \brief configure TIMER master slave mode - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] masterslave: - only one parameter can be selected which is shown as below: - \arg TIMER_MASTER_SLAVE_MODE_ENABLE: master slave mode enable - \arg TIMER_MASTER_SLAVE_MODE_DISABLE: master slave mode disable - \param[out] none - \retval none -*/ -void timer_master_slave_mode_config(uint32_t timer_periph, uint32_t masterslave) -{ - if(TIMER_MASTER_SLAVE_MODE_ENABLE == masterslave){ - TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_MSM; - }else if(TIMER_MASTER_SLAVE_MODE_DISABLE == masterslave){ - TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_MSM; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief configure TIMER external trigger input - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] extprescaler: - only one parameter can be selected which is shown as below: - \arg TIMER_EXT_TRI_PSC_OFF: no divided - \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 - \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 - \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 - \param[in] expolarity: - only one parameter can be selected which is shown as below: - \arg TIMER_ETP_FALLING: active low or falling edge active - \arg TIMER_ETP_RISING: active high or rising edge active - \param[in] extfilter: a value between 0 and 15 - \param[out] none - \retval none -*/ -void timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint8_t extfilter) -{ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_ETP | TIMER_SMCFG_ETPSC | TIMER_SMCFG_ETFC)); - TIMER_SMCFG(timer_periph) |= (uint32_t)(extprescaler | extpolarity); - TIMER_SMCFG(timer_periph) |= (uint32_t)(extfilter << 8U); -} - -/*! - \brief configure TIMER quadrature decoder mode - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] decomode: - only one parameter can be selected which is shown as below: - \arg TIMER_ENCODER_MODE0: counter counts on CI0FE0 edge depending on CI1FE1 level - \arg TIMER_ENCODER_MODE1: counter counts on CI1FE1 edge depending on CI0FE0 level - \arg TIMER_ENCODER_MODE2: counter counts on both CI0FE0 and CI1FE1 edges depending on the level of the other input - \param[in] ic0polarity: - only one parameter can be selected which is shown as below: - \arg TIMER_IC_POLARITY_RISING: capture rising edge - \arg TIMER_IC_POLARITY_FALLING: capture falling edge - \param[in] ic1polarity: - only one parameter can be selected which is shown as below: - \arg TIMER_IC_POLARITY_RISING: capture rising edge - \arg TIMER_IC_POLARITY_FALLING: capture falling edge - \param[out] none - \retval none -*/ -void timer_quadrature_decoder_mode_config(uint32_t timer_periph, uint32_t decomode, uint16_t ic0polarity, uint16_t ic1polarity) -{ - /* configure the quadrature decoder mode */ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); - TIMER_SMCFG(timer_periph) |= (uint32_t)decomode; - /* configure input capture selection */ - TIMER_CHCTL0(timer_periph) &= (uint32_t)(((~(uint32_t)TIMER_CHCTL0_CH0MS)) & ((~(uint32_t)TIMER_CHCTL0_CH1MS))); - TIMER_CHCTL0(timer_periph) |= (uint32_t)(TIMER_IC_SELECTION_DIRECTTI | ((uint32_t)TIMER_IC_SELECTION_DIRECTTI << 8U)); - /* configure channel input capture polarity */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); - TIMER_CHCTL2(timer_periph) |= ((uint32_t)ic0polarity | ((uint32_t)ic1polarity << 4U)); -} - -/*! - \brief configure TIMER internal clock mode - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[out] none - \retval none -*/ -void timer_internal_clock_config(uint32_t timer_periph) -{ - TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC; -} - -/*! - \brief configure TIMER the internal trigger as external clock input - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] intrigger: - only one parameter can be selected which is shown as below: - \arg TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0 - \arg TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1 - \arg TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2 - \arg TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3 - \param[out] none - \retval none -*/ -void timer_internal_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t intrigger) -{ - timer_input_trigger_source_select(timer_periph,intrigger); - TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC; - TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0; -} - -/*! - \brief configure TIMER the external trigger as external clock input - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] extrigger: - only one parameter can be selected which is shown as below: - \arg TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector - \arg TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0 - \arg TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1 - \param[in] expolarity: - only one parameter can be selected which is shown as below: - \arg TIMER_IC_POLARITY_RISING: active high or rising edge active - \arg TIMER_IC_POLARITY_FALLING: active low or falling edge active - \param[in] extfilter: a value between 0 and 15 - \param[out] none - \retval none -*/ -void timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t extrigger, uint16_t extpolarity, uint8_t extfilter) -{ - if(TIMER_SMCFG_TRGSEL_CI1FE1 == extrigger){ - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - /* reset the CH1NP bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P|TIMER_CHCTL2_CH1NP)); - /* set the CH1NP bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)extpolarity << 4U); - /* reset the CH1MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); - /* set the CH1MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)TIMER_IC_SELECTION_DIRECTTI<< 8U); - /* reset the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); - /* set the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 12U); - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; - }else{ - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - /* reset the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P|TIMER_CHCTL2_CH0NP)); - /* set the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)extpolarity; - /* reset the CH0MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); - /* set the CH0MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)TIMER_IC_SELECTION_DIRECTTI; - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 4U); - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; - } - /* select TIMER input trigger source */ - timer_input_trigger_source_select(timer_periph,extrigger); - /* reset the SMC bit */ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); - /* set the SMC bit */ - TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0; -} - -/*! - \brief configure TIMER the external clock mode0 - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] extprescaler: - only one parameter can be selected which is shown as below: - \arg TIMER_EXT_TRI_PSC_OFF: no divided - \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 - \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 - \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 - \param[in] expolarity: - only one parameter can be selected which is shown as below: - \arg TIMER_ETP_FALLING: active low or falling edge active - \arg TIMER_ETP_RISING: active high or rising edge active - \param[in] extfilter: a value between 0 and 15 - \param[out] none - \retval none -*/ -void timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint8_t extfilter) -{ - /* configure TIMER external trigger input */ - timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter); - /* reset the SMC bit,TRGS bit */ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_SMC | TIMER_SMCFG_TRGS)); - /* set the SMC bit,TRGS bit */ - TIMER_SMCFG(timer_periph) |= (uint32_t)(TIMER_SLAVE_MODE_EXTERNAL0 | TIMER_SMCFG_TRGSEL_ETIFP); -} - -/*! - \brief configure TIMER the external clock mode1 - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] extprescaler: - only one parameter can be selected which is shown as below: - \arg TIMER_EXT_TRI_PSC_OFF: no divided - \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 - \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 - \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 - \param[in] extpolarity: - only one parameter can be selected which is shown as below: - \arg TIMER_ETP_FALLING: active low or falling edge active - \arg TIMER_ETP_RISING: active high or rising edge active - \param[in] extfilter: a value between 0 and 15 - \param[out] none - \retval none -*/ -void timer_external_clock_mode1_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint8_t extfilter) -{ - /* configure TIMER external trigger input */ - timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter); - TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_SMC1; -} - -/*! - \brief disable TIMER the external clock mode1 - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_external_clock_mode1_disable(uint32_t timer_periph) -{ - TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC1; -} - -/*! - \brief enable the TIMER interrupt - \param[in] timer_periph: please refer to the following parameters - \param[in] interrupt: timer interrupt enable source - only one parameter can be selected which is shown as below: - \arg TIMER_INT_UP: update interrupt enable, TIMERx(x=0..13) - \arg TIMER_INT_CH0: channel 0 interrupt enable, TIMERx(x=0..4,7..13) - \arg TIMER_INT_CH1: channel 1 interrupt enable, TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_CH2: channel 2 interrupt enable, TIMERx(x=0..4,7) - \arg TIMER_INT_CH3: channel 3 interrupt enable , TIMERx(x=0..4,7) - \arg TIMER_INT_CMT: commutation interrupt enable, TIMERx(x=0,7) - \arg TIMER_INT_TRG: trigger interrupt enable, TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_BRK: break interrupt enable, TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt) -{ - TIMER_DMAINTEN(timer_periph) |= (uint32_t) interrupt; -} - -/*! - \brief disable the TIMER interrupt - \param[in] timer_periph: please refer to the following parameters - \param[in] interrupt: timer interrupt source disable - only one parameter can be selected which is shown as below: - \arg TIMER_INT_UP: update interrupt disable, TIMERx(x=0..13) - \arg TIMER_INT_CH0: channel 0 interrupt disable, TIMERx(x=0..4,7..13) - \arg TIMER_INT_CH1: channel 1 interrupt disable, TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_CH2: channel 2 interrupt disable, TIMERx(x=0..4,7) - \arg TIMER_INT_CH3: channel 3 interrupt disable , TIMERx(x=0..4,7) - \arg TIMER_INT_CMT: commutation interrupt disable, TIMERx(x=0,7) - \arg TIMER_INT_TRG: trigger interrupt disable, TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_BRK: break interrupt disable, TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt) -{ - TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)interrupt); -} - -/*! - \brief get timer interrupt flag - \param[in] timer_periph: please refer to the following parameters - \param[in] interrupt: the timer interrupt bits - only one parameter can be selected which is shown as below: - \arg TIMER_INT_FLAG_UP: update interrupt flag,TIMERx(x=0..13) - \arg TIMER_INT_FLAG_CH0: channel 0 interrupt flag,TIMERx(x=0..4,7..13) - \arg TIMER_INT_FLAG_CH1: channel 1 interrupt flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_FLAG_CH2: channel 2 interrupt flag,TIMERx(x=0..4,7) - \arg TIMER_INT_FLAG_CH3: channel 3 interrupt flag,TIMERx(x=0..4,7) - \arg TIMER_INT_FLAG_CMT: channel commutation interrupt flag,TIMERx(x=0,7) - \arg TIMER_INT_FLAG_TRG: trigger interrupt flag,TIMERx(x=0,7,8,11) - \arg TIMER_INT_FLAG_BRK: break interrupt flag,TIMERx(x=0,7) - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt) -{ - uint32_t val; - val = (TIMER_DMAINTEN(timer_periph) & interrupt); - if((RESET != (TIMER_INTF(timer_periph) & interrupt) ) && (RESET != val)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear TIMER interrupt flag - \param[in] timer_periph: please refer to the following parameters - \param[in] interrupt: the timer interrupt bits - only one parameter can be selected which is shown as below: - \arg TIMER_INT_FLAG_UP: update interrupt flag,TIMERx(x=0..13) - \arg TIMER_INT_FLAG_CH0: channel 0 interrupt flag,TIMERx(x=0..4,7..13) - \arg TIMER_INT_FLAG_CH1: channel 1 interrupt flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_FLAG_CH2: channel 2 interrupt flag,TIMERx(x=0..4,7) - \arg TIMER_INT_FLAG_CH3: channel 3 interrupt flag,TIMERx(x=0..4,7) - \arg TIMER_INT_FLAG_CMT: channel commutation interrupt flag,TIMERx(x=0,7) - \arg TIMER_INT_FLAG_TRG: trigger interrupt flag,TIMERx(x=0,7,8,11) - \arg TIMER_INT_FLAG_BRK: break interrupt flag,TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt) -{ - TIMER_INTF(timer_periph) = (~(uint32_t)interrupt); -} - -/*! - \brief get TIMER flags - \param[in] timer_periph: please refer to the following parameters - \param[in] flag: the timer interrupt flags - only one parameter can be selected which is shown as below: - \arg TIMER_FLAG_UP: update flag,TIMERx(x=0..13) - \arg TIMER_FLAG_CH0: channel 0 flag,TIMERx(x=0..4,7..13) - \arg TIMER_FLAG_CH1: channel 1 flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_FLAG_CH2: channel 2 flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CH3: channel 3 flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CMT: channel commutation flag,TIMERx(x=0,7) - \arg TIMER_FLAG_TRG: trigger flag,TIMERx(x=0,7,8,11) - \arg TIMER_FLAG_BRK: break flag,TIMERx(x=0,7) - \arg TIMER_FLAG_CH0O: channel 0 overcapture flag,TIMERx(x=0..4,7..11) - \arg TIMER_FLAG_CH1O: channel 1 overcapture flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_FLAG_CH2O: channel 2 overcapture flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CH3O: channel 3 overcapture flag,TIMERx(x=0..4,7) - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag) -{ - if(RESET != (TIMER_INTF(timer_periph) & flag)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear TIMER flags - \param[in] timer_periph: please refer to the following parameters - \param[in] flag: the timer interrupt flags - only one parameter can be selected which is shown as below: - \arg TIMER_FLAG_UP: update flag,TIMERx(x=0..13) - \arg TIMER_FLAG_CH0: channel 0 flag,TIMERx(x=0..4,7..13) - \arg TIMER_FLAG_CH1: channel 1 flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_FLAG_CH2: channel 2 flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CH3: channel 3 flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CMT: channel control update flag,TIMERx(x=0,7) - \arg TIMER_FLAG_TRG: trigger flag,TIMERx(x=0,7,8,11) - \arg TIMER_FLAG_BRK: break flag,TIMERx(x=0,7) - \arg TIMER_FLAG_CH0O: channel 0 overcapture flag,TIMERx(x=0..4,7..11) - \arg TIMER_FLAG_CH1O: channel 1 overcapture flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_FLAG_CH2O: channel 2 overcapture flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CH3O: channel 3 overcapture flag,TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_flag_clear(uint32_t timer_periph, uint32_t flag) -{ - TIMER_INTF(timer_periph) = (~(uint32_t)flag); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_usart.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_usart.c deleted file mode 100644 index 78530e8..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_usart.c +++ /dev/null @@ -1,766 +0,0 @@ -/*! - \file gd32f10x_usart.c - \brief USART driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.1, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_usart.h" - -/*! - \brief reset USART/UART - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_deinit(uint32_t usart_periph) -{ - switch(usart_periph){ - case USART0: - /* reset USART0 */ - rcu_periph_reset_enable(RCU_USART0RST); - rcu_periph_reset_disable(RCU_USART0RST); - break; - case USART1: - /* reset USART1 */ - rcu_periph_reset_enable(RCU_USART1RST); - rcu_periph_reset_disable(RCU_USART1RST); - break; - case USART2: - /* reset USART2 */ - rcu_periph_reset_enable(RCU_USART2RST); - rcu_periph_reset_disable(RCU_USART2RST); - break; - case UART3: - /* reset UART3 */ - rcu_periph_reset_enable(RCU_UART3RST); - rcu_periph_reset_disable(RCU_UART3RST); - break; - case UART4: - /* reset UART4 */ - rcu_periph_reset_enable(RCU_UART4RST); - rcu_periph_reset_disable(RCU_UART4RST); - break; - default: - break; - } -} - -/*! - \brief configure USART baud rate value - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] baudval: baud rate value - \param[out] none - \retval none -*/ -void usart_baudrate_set(uint32_t usart_periph, uint32_t baudval) -{ - uint32_t uclk=0U, intdiv=0U, fradiv=0U, udiv=0U; - switch(usart_periph){ - /* get clock frequency */ - case USART0: - /* get USART0 clock */ - uclk=rcu_clock_freq_get(CK_APB2); - break; - case USART1: - /* get USART1 clock */ - uclk=rcu_clock_freq_get(CK_APB1); - break; - case USART2: - /* get USART2 clock */ - uclk=rcu_clock_freq_get(CK_APB1); - break; - case UART3: - /* get UART3 clock */ - uclk=rcu_clock_freq_get(CK_APB1); - break; - case UART4: - /* get UART4 clock */ - uclk=rcu_clock_freq_get(CK_APB1); - break; - default: - break; - } - /* oversampling by 16, configure the value of USART_BAUD */ - udiv = (uclk+baudval/2U)/baudval; - intdiv = udiv & (0x0000fff0U); - fradiv = udiv & (0x0000000fU); - USART_BAUD(usart_periph) = ((USART_BAUD_FRADIV | USART_BAUD_INTDIV) & (intdiv | fradiv)); -} - -/*! - \brief configure USART parity - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] paritycfg: configure USART parity - only one parameter can be selected which is shown as below: - \arg USART_PM_NONE: no parity - \arg USART_PM_ODD: odd parity - \arg USART_PM_EVEN: even parity - \param[out] none - \retval none -*/ -void usart_parity_config(uint32_t usart_periph, uint32_t paritycfg) -{ - /* clear USART_CTL0 PM,PCEN bits */ - USART_CTL0(usart_periph) &= ~(USART_CTL0_PM | USART_CTL0_PCEN); - /* configure USART parity mode */ - USART_CTL0(usart_periph) |= paritycfg ; -} - -/*! - \brief configure USART word length - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] wlen: USART word length configure - only one parameter can be selected which is shown as below: - \arg USART_WL_8BIT: 8 bits - \arg USART_WL_9BIT: 9 bits - \param[out] none - \retval none -*/ -void usart_word_length_set(uint32_t usart_periph, uint32_t wlen) -{ - /* clear USART_CTL0 WL bit */ - USART_CTL0(usart_periph) &= ~USART_CTL0_WL; - /* configure USART word length */ - USART_CTL0(usart_periph) |= wlen; -} - -/*! - \brief configure USART stop bit length - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] stblen: USART stop bit configure - only one parameter can be selected which is shown as below: - \arg USART_STB_1BIT: 1 bit - \arg USART_STB_0_5BIT: 0.5 bit, not available for UARTx(x=3,4) - \arg USART_STB_2BIT: 2 bits - \arg USART_STB_1_5BIT: 1.5 bits, not available for UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen) -{ - /* clear USART_CTL1 STB bits */ - USART_CTL1(usart_periph) &= ~USART_CTL1_STB; - /* configure USART stop bits */ - USART_CTL1(usart_periph) |= stblen; -} -/*! - \brief enable USART - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_enable(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) |= USART_CTL0_UEN; -} - -/*! - \brief disable USART - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_disable(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) &= ~(USART_CTL0_UEN); -} - -/*! - \brief configure USART transmitter - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] txconfig: enable or disable USART transmitter - only one parameter can be selected which is shown as below: - \arg USART_TRANSMIT_ENABLE: enable USART transmission - \arg USART_TRANSMIT_DISABLE: disable USART transmission - \param[out] none - \retval none -*/ -void usart_transmit_config(uint32_t usart_periph, uint32_t txconfig) -{ - uint32_t ctl = 0U; - - ctl = USART_CTL0(usart_periph); - ctl &= ~USART_CTL0_TEN; - ctl |= txconfig; - /* configure transfer mode */ - USART_CTL0(usart_periph) = ctl; -} - -/*! - \brief configure USART receiver - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] rxconfig: enable or disable USART receiver - only one parameter can be selected which is shown as below: - \arg USART_RECEIVE_ENABLE: enable USART reception - \arg USART_RECEIVE_DISABLE: disable USART reception - \param[out] none - \retval none -*/ -void usart_receive_config(uint32_t usart_periph, uint32_t rxconfig) -{ - uint32_t ctl = 0U; - - ctl = USART_CTL0(usart_periph); - ctl &= ~USART_CTL0_REN; - ctl |= rxconfig; - /* configure receiver mode */ - USART_CTL0(usart_periph) = ctl; -} - -/*! - \brief USART transmit data function - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] data: data of transmission - \param[out] none - \retval none -*/ -void usart_data_transmit(uint32_t usart_periph, uint16_t data) -{ - USART_DATA(usart_periph) = USART_DATA_DATA & data; -} - -/*! - \brief USART receive data function - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval data of received -*/ -uint16_t usart_data_receive(uint32_t usart_periph) -{ - return (uint16_t)(GET_BITS(USART_DATA(usart_periph), 0U, 8U)); -} - -/*! - \brief configure the address of the USART in wake up by address match mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] addr: address of USART/UART - \param[out] none - \retval none -*/ -void usart_address_config(uint32_t usart_periph, uint8_t addr) -{ - USART_CTL1(usart_periph) &= ~(USART_CTL1_ADDR); - USART_CTL1(usart_periph) |= (USART_CTL1_ADDR & addr); -} - -/*! - \brief receiver in mute mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_mute_mode_enable(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) |= USART_CTL0_RWU; -} - -/*! - \brief receiver in active mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_mute_mode_disable(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) &= ~(USART_CTL0_RWU); -} - -/*! - \brief configure wakeup method in mute mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] wmethod: two methods be used to enter or exit the mute mode - only one parameter can be selected which is shown as below: - \arg USART_WM_IDLE: idle line - \arg USART_WM_ADDR: address mask - \param[out] none - \retval none -*/ -void usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmethod) -{ - USART_CTL0(usart_periph) &= ~(USART_CTL0_WM); - USART_CTL0(usart_periph) |= wmethod; -} - -/*! - \brief enable LIN mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_lin_mode_enable(uint32_t usart_periph) -{ - USART_CTL1(usart_periph) |= USART_CTL1_LMEN; -} - -/*! - \brief disable LIN mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_lin_mode_disable(uint32_t usart_periph) -{ - USART_CTL1(usart_periph) &= ~(USART_CTL1_LMEN); -} - -/*! - \brief configure lin break frame length - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] lblen: lin break frame length - only one parameter can be selected which is shown as below: - \arg USART_LBLEN_10B: 10 bits - \arg USART_LBLEN_11B: 11 bits - \param[out] none - \retval none -*/ -void usart_lin_break_detection_length_config(uint32_t usart_periph, uint32_t lblen) -{ - USART_CTL1(usart_periph) &= ~(USART_CTL1_LBLEN); - USART_CTL1(usart_periph) |= (USART_CTL1_LBLEN & lblen); -} - -/*! - \brief send break frame - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_send_break(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) |= USART_CTL0_SBKCMD; -} - -/*! - \brief enable half duplex mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_halfduplex_enable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) |= USART_CTL2_HDEN; -} - -/*! - \brief disable half duplex mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_halfduplex_disable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) &= ~(USART_CTL2_HDEN); -} - -/*! - \brief enable CK pin in synchronous mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_synchronous_clock_enable(uint32_t usart_periph) -{ - USART_CTL1(usart_periph) |= USART_CTL1_CKEN; -} - -/*! - \brief disable CK pin in synchronous mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_synchronous_clock_disable(uint32_t usart_periph) -{ - USART_CTL1(usart_periph) &= ~(USART_CTL1_CKEN); -} - -/*! - \brief configure USART synchronous mode parameters - \param[in] usart_periph: USARTx(x=0,1,2) - \param[in] clen: CK length - only one parameter can be selected which is shown as below: - \arg USART_CLEN_NONE: there are 7 CK pulses for an 8 bit frame and 8 CK pulses for a 9 bit frame - \arg USART_CLEN_EN: there are 8 CK pulses for an 8 bit frame and 9 CK pulses for a 9 bit frame - \param[in] cph: clock phase - only one parameter can be selected which is shown as below: - \arg USART_CPH_1CK: first clock transition is the first data capture edge - \arg USART_CPH_2CK: second clock transition is the first data capture edge - \param[in] cpl: clock polarity - only one parameter can be selected which is shown as below: - \arg USART_CPL_LOW: steady low value on CK pin - \arg USART_CPL_HIGH: steady high value on CK pin - \param[out] none - \retval none -*/ -void usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl) -{ - uint32_t ctl = 0U; - - /* read USART_CTL1 register */ - ctl = USART_CTL1(usart_periph); - ctl &= ~(USART_CTL1_CLEN | USART_CTL1_CPH | USART_CTL1_CPL); - /* set CK length, CK phase, CK polarity */ - ctl |= (USART_CTL1_CLEN & clen) | (USART_CTL1_CPH & cph) | (USART_CTL1_CPL & cpl); - - USART_CTL1(usart_periph) = ctl; -} - -/*! - \brief configure guard time value in smartcard mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[in] gaut: guard time value - \param[out] none - \retval none -*/ -void usart_guard_time_config(uint32_t usart_periph,uint32_t gaut) -{ - USART_GP(usart_periph) &= ~(USART_GP_GUAT); - USART_GP(usart_periph) |= (USART_GP_GUAT & ((gaut)<<8)); -} - -/*! - \brief enable smartcard mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_smartcard_mode_enable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) |= USART_CTL2_SCEN; -} - -/*! - \brief disable smartcard mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_smartcard_mode_disable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) &= ~(USART_CTL2_SCEN); -} - -/*! - \brief enable NACK in smartcard mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_smartcard_mode_nack_enable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) |= USART_CTL2_NKEN; -} - -/*! - \brief disable NACK in smartcard mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_smartcard_mode_nack_disable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) &= ~(USART_CTL2_NKEN); -} - -/*! - \brief enable IrDA mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_irda_mode_enable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) |= USART_CTL2_IREN; -} - -/*! - \brief disable IrDA mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_irda_mode_disable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) &= ~(USART_CTL2_IREN); -} - -/*! - \brief configure the peripheral clock prescaler in USART IrDA low-power mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] psc: 0x00-0xFF - \param[out] none - \retval none -*/ -void usart_prescaler_config(uint32_t usart_periph, uint8_t psc) -{ - USART_GP(usart_periph) &= ~(USART_GP_PSC); - USART_GP(usart_periph) |= psc; -} - -/*! - \brief configure IrDA low-power - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] irlp: IrDA low-power or normal - only one parameter can be selected which is shown as below: - \arg USART_IRLP_LOW: low-power - \arg USART_IRLP_NORMAL: normal - \param[out] none - \retval none -*/ -void usart_irda_lowpower_config(uint32_t usart_periph, uint32_t irlp) -{ - USART_CTL2(usart_periph) &= ~(USART_CTL2_IRLP); - USART_CTL2(usart_periph) |= (USART_CTL2_IRLP & irlp); -} - -/*! - \brief configure hardware flow control RTS - \param[in] usart_periph: USARTx(x=0,1,2) - \param[in] rtsconfig: enable or disable RTS - only one parameter can be selected which is shown as below: - \arg USART_RTS_ENABLE: enable RTS - \arg USART_RTS_DISABLE: disable RTS - \param[out] none - \retval none -*/ -void usart_hardware_flow_rts_config(uint32_t usart_periph, uint32_t rtsconfig) -{ - uint32_t ctl = 0U; - - ctl = USART_CTL2(usart_periph); - ctl &= ~USART_CTL2_RTSEN; - ctl |= rtsconfig; - /* configure RTS */ - USART_CTL2(usart_periph) = ctl; -} - -/*! - \brief configure hardware flow control CTS - \param[in] usart_periph: USARTx(x=0,1,2) - \param[in] ctsconfig: enable or disable CTS - only one parameter can be selected which is shown as below: - \arg USART_CTS_ENABLE: enable CTS - \arg USART_CTS_DISABLE: disable CTS - \param[out] none - \retval none -*/ -void usart_hardware_flow_cts_config(uint32_t usart_periph, uint32_t ctsconfig) -{ - uint32_t ctl = 0U; - - ctl = USART_CTL2(usart_periph); - ctl &= ~USART_CTL2_CTSEN; - ctl |= ctsconfig; - /* configure CTS */ - USART_CTL2(usart_periph) = ctl; -} - -/*! - \brief configure USART DMA reception - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3) - \param[in] dmacmd: enable or disable DMA for reception - only one parameter can be selected which is shown as below: - \arg USART_DENR_ENABLE: DMA enable for reception - \arg USART_DENR_DISABLE: DMA disable for reception - \param[out] none - \retval none -*/ -void usart_dma_receive_config(uint32_t usart_periph, uint32_t dmacmd) -{ - uint32_t ctl = 0U; - - ctl = USART_CTL2(usart_periph); - ctl &= ~USART_CTL2_DENR; - ctl |= dmacmd; - /* configure DMA reception */ - USART_CTL2(usart_periph) = ctl; -} - -/*! - \brief configure USART DMA transmission - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3) - \param[in] dmacmd: enable or disable DMA for transmission - only one parameter can be selected which is shown as below: - \arg USART_DENT_ENABLE: DMA enable for transmission - \arg USART_DENT_DISABLE: DMA disable for transmission - \param[out] none - \retval none -*/ -void usart_dma_transmit_config(uint32_t usart_periph, uint32_t dmacmd) -{ - uint32_t ctl = 0U; - - ctl = USART_CTL2(usart_periph); - ctl &= ~USART_CTL2_DENT; - ctl |= dmacmd; - /* configure DMA transmission */ - USART_CTL2(usart_periph) = ctl; -} - -/*! - \brief get flag in STAT register - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] flag: USART flags, refer to usart_flag_enum - only one parameter can be selected which is shown as below: - \arg USART_FLAG_CTSF: CTS change flag - \arg USART_FLAG_LBDF: LIN break detected flag - \arg USART_FLAG_TBE: transmit data buffer empty - \arg USART_FLAG_TC: transmission complete - \arg USART_FLAG_RBNE: read data buffer not empty - \arg USART_FLAG_IDLEF: IDLE frame detected flag - \arg USART_FLAG_ORERR: overrun error - \arg USART_FLAG_NERR: noise error flag - \arg USART_FLAG_FERR: frame error flag - \arg USART_FLAG_PERR: parity error flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag) -{ - if(RESET != (USART_REG_VAL(usart_periph, flag) & BIT(USART_BIT_POS(flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear flag in STAT register - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] flag: USART flags, refer to usart_flag_enum - only one parameter can be selected which is shown as below: - \arg USART_FLAG_CTSF: CTS change flag - \arg USART_FLAG_LBDF: LIN break detected flag - \arg USART_FLAG_TC: transmission complete - \arg USART_FLAG_RBNE: read data buffer not empty - \param[out] none - \retval none -*/ -void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag) -{ - USART_REG_VAL(usart_periph, flag) &= ~BIT(USART_BIT_POS(flag)); -} - -/*! - \brief enable USART interrupt - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] int_flag - only one parameter can be selected which is shown as below: - \arg USART_INT_PERR: parity error interrupt - \arg USART_INT_TBE: transmitter buffer empty interrupt - \arg USART_INT_TC: transmission complete interrupt - \arg USART_INT_RBNE: read data buffer not empty interrupt and overrun error interrupt - \arg USART_INT_IDLE: IDLE line detected interrupt - \arg USART_INT_LBD: LIN break detected interrupt - \arg USART_INT_ERR: error interrupt - \arg USART_INT_CTS: CTS interrupt - \param[out] none - \retval none -*/ -void usart_interrupt_enable(uint32_t usart_periph, uint32_t int_flag) -{ - USART_REG_VAL(usart_periph, int_flag) |= BIT(USART_BIT_POS(int_flag)); -} - -/*! - \brief disable USART interrupt - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] int_flag - only one parameter can be selected which is shown as below: - \arg USART_INT_PERR: parity error interrupt - \arg USART_INT_TBE: transmitter buffer empty interrupt - \arg USART_INT_TC: transmission complete interrupt - \arg USART_INT_RBNE: read data buffer not empty interrupt and overrun error interrupt - \arg USART_INT_IDLE: IDLE line detected interrupt - \arg USART_INT_LBD: LIN break detected interrupt - \arg USART_INT_ERR: error interrupt - \arg USART_INT_CTS: CTS interrupt - \param[out] none - \retval none -*/ -void usart_interrupt_disable(uint32_t usart_periph, uint32_t int_flag) -{ - USART_REG_VAL(usart_periph, int_flag) &= ~BIT(USART_BIT_POS(int_flag)); -} - -/*! - \brief get USART interrupt and flag status - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] int_flag - only one parameter can be selected which is shown as below: - \arg USART_INT_FLAG_PERR: parity error interrupt and flag - \arg USART_INT_FLAG_TBE: transmitter buffer empty interrupt and flag - \arg USART_INT_FLAG_TC: transmission complete interrupt and flag - \arg USART_INT_FLAG_RBNE: read data buffer not empty interrupt and flag - \arg USART_INT_FLAG_RBNE_ORERR: read data buffer not empty interrupt and overrun error flag - \arg USART_INT_FLAG_IDLE: IDLE line detected interrupt and flag - \arg USART_INT_FLAG_LBD: LIN break detected interrupt and flag - \arg USART_INT_FLAG_CTS: CTS interrupt and flag - \arg USART_INT_FLAG_ERR_ORERR: error interrupt and overrun error - \arg USART_INT_FLAG_ERR_NERR: error interrupt and noise error flag - \arg USART_INT_FLAG_ERR_FERR: error interrupt and frame error flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, uint32_t int_flag) -{ - uint32_t intenable = 0U, flagstatus = 0U; - /* get the interrupt enable bit status */ - intenable = (USART_REG_VAL(usart_periph, int_flag) & BIT(USART_BIT_POS(int_flag))); - /* get the corresponding flag bit status */ - flagstatus = (USART_REG_VAL2(usart_periph, int_flag) & BIT(USART_BIT_POS2(int_flag))); - - if(flagstatus && intenable){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear USART interrupt flag in STAT register - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] flag: USART interrupt flag - only one parameter can be selected which is shown as below: - \arg USART_INT_FLAG_CTS: CTS change flag - \arg USART_INT_FLAG_LBD: LIN break detected flag - \arg USART_INT_FLAG_TC: transmission complete - \arg USART_INT_FLAG_RBNE: read data buffer not empty - \param[out] none - \retval none -*/ -void usart_interrupt_flag_clear(uint32_t usart_periph, uint32_t flag) -{ - USART_REG_VAL2(usart_periph, flag) &= ~BIT(USART_BIT_POS2(flag)); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_wwdgt.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_wwdgt.c deleted file mode 100644 index ab173eb..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_standard_peripheral/Source/gd32f10x_wwdgt.c +++ /dev/null @@ -1,133 +0,0 @@ -/*! - \file gd32f10x_wwdgt.c - \brief WWDGT driver - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f10x_wwdgt.h" - -/* write value to WWDGT_CTL_CNT bit field */ -#define CTL_CNT(regval) (BITS(0,6) & ((uint32_t)(regval) << 0)) -/* write value to WWDGT_CFG_WIN bit field */ -#define CFG_WIN(regval) (BITS(0,6) & ((uint32_t)(regval) << 0)) - -/*! - \brief reset the window watchdog timer configuration - \param[in] none - \param[out] none - \retval none -*/ -void wwdgt_deinit(void) -{ - rcu_periph_reset_enable(RCU_WWDGTRST); - rcu_periph_reset_disable(RCU_WWDGTRST); -} - -/*! - \brief start the window watchdog timer counter - \param[in] none - \param[out] none - \retval none -*/ -void wwdgt_enable(void) -{ - WWDGT_CTL |= WWDGT_CTL_WDGTEN; -} - -/*! - \brief configure the window watchdog timer counter value - \param[in] counter_value: 0x00 - 0x7F - \param[out] none - \retval none -*/ -void wwdgt_counter_update(uint16_t counter_value) -{ - WWDGT_CTL = (uint32_t)(CTL_CNT(counter_value)); -} - -/*! - \brief configure counter value, window value, and prescaler divider value - \param[in] counter: 0x00 - 0x7F - \param[in] window: 0x00 - 0x7F - \param[in] prescaler: wwdgt prescaler value - only one parameter can be selected which is shown as below: - \arg WWDGT_CFG_PSC_DIV1: the time base of window watchdog counter = (PCLK1/4096)/1 - \arg WWDGT_CFG_PSC_DIV2: the time base of window watchdog counter = (PCLK1/4096)/2 - \arg WWDGT_CFG_PSC_DIV4: the time base of window watchdog counter = (PCLK1/4096)/4 - \arg WWDGT_CFG_PSC_DIV8: the time base of window watchdog counter = (PCLK1/4096)/8 - \param[out] none - \retval none -*/ -void wwdgt_config(uint16_t counter, uint16_t window, uint32_t prescaler) -{ - WWDGT_CTL = (uint32_t)(CTL_CNT(counter)); - WWDGT_CFG = (uint32_t)(CFG_WIN(window) | prescaler); -} - -/*! - \brief enable early wakeup interrupt of WWDGT - \param[in] none - \param[out] none - \retval none -*/ -void wwdgt_interrupt_enable(void) -{ - WWDGT_CFG |= WWDGT_CFG_EWIE; -} - -/*! - \brief check early wakeup interrupt state of WWDGT - \param[in] none - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus wwdgt_flag_get(void) -{ - if(WWDGT_STAT & WWDGT_STAT_EWIF){ - return SET; - } - - return RESET; -} - -/*! - \brief clear early wakeup interrupt state of WWDGT - \param[in] none - \param[out] none - \retval none -*/ -void wwdgt_flag_clear(void) -{ - WWDGT_STAT = (uint32_t)(RESET); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Include/audio_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Include/audio_core.h deleted file mode 100644 index 80281d0..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Include/audio_core.h +++ /dev/null @@ -1,261 +0,0 @@ -/*! - \file audio_core.h - \brief the header file of USB audio device class core functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __AUDIO_CORE_H -#define __AUDIO_CORE_H - -#include "usbd_enum.h" - -#define FORMAT_24BIT(x) (uint8_t)(x);(uint8_t)((x) >> 8);(uint8_t)((x) >> 16) - -/* audio_freq * data_size (2 bytes) * num_channels (stereo: 2) */ -#define DEFAULT_OUT_BIT_RESOLUTION 16U -#define DEFAULT_OUT_CHANNEL_NBR 2U /* mono = 1, stereo = 2 */ -#define AUDIO_OUT_PACKET (uint32_t)(((USBD_AUDIO_FREQ_16K * \ - (DEFAULT_OUT_BIT_RESOLUTION / 8U) *\ - DEFAULT_OUT_CHANNEL_NBR) / 1000U)) - -/* number of sub-packets in the audio transfer buffer. you can modify this value but always make sure - that it is an even number and higher than 3 */ -#define OUT_PACKET_NUM 4U - -/* total size of the audio transfer buffer */ -#define OUT_BUF_MARGIN 4U -#define TOTAL_OUT_BUF_SIZE ((uint32_t)((AUDIO_OUT_PACKET + OUT_BUF_MARGIN) * OUT_PACKET_NUM)) - -#define AUDIO_CONFIG_DESC_SET_LEN 109U -#define AUDIO_INTERFACE_DESC_SIZE 9U - -#define USB_AUDIO_DESC_SIZ 0x09U -#define AUDIO_STANDARD_EP_DESC_SIZE 0x09U -#define AUDIO_STREAMING_EP_DESC_SIZE 0x07U - -/* audio interface class code */ -#define USB_CLASS_AUDIO 0x01U - -/* audio interface subclass codes */ -#define AUDIO_SUBCLASS_CONTROL 0x01U -#define AUDIO_SUBCLASS_AUDIOSTREAMING 0x02U -#define AUDIO_SUBCLASS_MIDISTREAMING 0x03U - -/* audio interface protocol codes */ -#define AUDIO_PROTOCOL_UNDEFINED 0x00U -#define AUDIO_STREAMING_GENERAL 0x01U -#define AUDIO_STREAMING_FORMAT_TYPE 0x02U - -/* audio class-specific descriptor types */ -#define AUDIO_DESCTYPE_UNDEFINED 0x20U -#define AUDIO_DESCTYPE_DEVICE 0x21U -#define AUDIO_DESCTYPE_CONFIGURATION 0x22U -#define AUDIO_DESCTYPE_STRING 0x23U -#define AUDIO_DESCTYPE_INTERFACE 0x24U -#define AUDIO_DESCTYPE_ENDPOINT 0x25U - -/* audio control interface descriptor subtypes */ -#define AUDIO_CONTROL_HEADER 0x01U -#define AUDIO_CONTROL_INPUT_TERMINAL 0x02U -#define AUDIO_CONTROL_OUTPUT_TERMINAL 0x03U -#define AUDIO_CONTROL_MIXER_UNIT 0x04U -#define AUDIO_CONTROL_SELECTOR_UNIT 0x05U -#define AUDIO_CONTROL_FEATURE_UNIT 0x06U -#define AUDIO_CONTROL_PROCESSING_UNIT 0x07U -#define AUDIO_CONTROL_EXTENSION_UNIT 0x08U - -#define AUDIO_INPUT_TERMINAL_DESC_SIZE 0x0CU -#define AUDIO_OUTPUT_TERMINAL_DESC_SIZE 0x09U -#define AUDIO_STREAMING_INTERFACE_DESC_SIZE 0x07U - -#define AUDIO_CONTROL_MUTE 0x0001U - -#define AUDIO_FORMAT_TYPE_I 0x01U -#define AUDIO_FORMAT_TYPE_III 0x03U - -#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01U -#define AUDIO_ENDPOINT_GENERAL 0x01U - -#define AUDIO_REQ_GET_CUR 0x81U -#define AUDIO_REQ_SET_CUR 0x01U - -#define AUDIO_OUT_STREAMING_CTRL 0x02U - -#define PACKET_SIZE(freq) (((freq) * 2U) * 2U / 1000U) - -#define AUDIO_PACKET_SIZE(frq) (uint8_t)(PACKET_SIZE(frq) & 0xFFU), \ - (uint8_t)((PACKET_SIZE(frq) >> 8U) & 0xFFU) - -#define SAMPLE_FREQ(frq) (uint8_t)(frq), (uint8_t)((frq) >> 8U), \ - (uint8_t)((frq) >> 16U) - - -#pragma pack(1) - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< header descriptor subtype */ - uint16_t bcdADC; /*!< audio device class specification release number in binary-coded decimal */ - uint16_t wTotalLength; /*!< total number of bytes */ - uint8_t bInCollection; /*!< the number of the streaming interfaces */ - uint8_t baInterfaceNr; /*!< interface number of the streaming interfaces */ -} usb_desc_AC_itf; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< AS_GENERAL descriptor subtype */ - uint8_t bTerminalLink; /*!< the terminal ID */ - uint8_t bDelay; /*!< delay introduced by the data path */ - uint16_t wFormatTag; /*!< the audio data format */ -} usb_desc_AS_itf; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< INPUT_TERMINAL descriptor subtype. */ - uint8_t bTerminalID; /*!< constant uniquely identifying the terminal within the audio function */ - uint16_t wTerminalType; /*!< constant characterizing the type of terminal */ - uint8_t bAssocTerminal; /*!< ID of the output terminal */ - uint8_t bNrChannels; /*!< number of logical output channels */ - uint16_t wChannelConfig; /*!< describes the spatial location of the logical channels */ - uint8_t iChannelNames; /*!< index of a string descriptor */ - uint8_t iTerminal; /*!< index of a string descriptor */ -} usb_desc_input_terminal; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< OUTPUT_TERMINAL descriptor subtype */ - uint8_t bTerminalID; /*!< constant uniquely identifying the terminal within the audio function */ - uint16_t wTerminalType; /*!< constant characterizing the type of terminal */ - uint8_t bAssocTerminal; /*!< constant, identifying the input terminal to which this output terminal is associated */ - uint8_t bSourceID; /*!< ID of the unit or terminal */ - uint8_t iTerminal; /*!< index of a string descriptor */ -} usb_desc_output_terminal; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< FEATURE_UNIT descriptor subtype */ - uint8_t bUnitID; /*!< constant uniquely identifying the unit within the audio function */ - uint8_t bSourceID; /*!< ID of the unit or terminal */ - uint8_t bControlSize; /*!< size in bytes of an element of the bmaControls() array */ - uint8_t bmaControls0; /*!< a bit set to 1 indicates that the mentioned control is supported for master channel 0 */ - uint8_t bmaControls1; /*!< a bit set to 1 indicates that the mentioned control is supported for logical channel 1 */ - uint8_t iFeature; /*!< index of a string descriptor */ -} usb_desc_mono_feature_unit; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< FEATURE_UNIT descriptor subtype */ - uint8_t bUnitID; /*!< constant uniquely identifying the unit within the audio function */ - uint8_t bSourceID; /*!< ID of the unit or terminal */ - uint8_t bControlSize; /*!< size in bytes of an element of the bmaControls() array */ - uint16_t bmaControls0; /*!< a bit set to 1 indicates that the mentioned control is supported for master channel 0 */ - uint16_t bmaControls1; /*!< a bit set to 1 indicates that the mentioned control is supported for logical channel 1 */ - uint16_t bmaControls2; /*!< a bit set to 1 indicates that the mentioned control is supported for logical channel 2 */ - uint8_t iFeature; /*!< index of a string descriptor */ -} usb_desc_stereo_feature_unit; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< FORMAT_TYPE descriptor subtype */ - uint8_t bFormatType; /*!< constant identifying the format type */ - uint8_t bNrChannels; /*!< indicates the number of physical channels in the audio data stream */ - uint8_t bSubFrameSize; /*!< the number of bytes occupied by one audio sub frame */ - uint8_t bBitResolution; /*!< the number of effectively used bits from the available bits in an audio sub frame */ - uint8_t bSamFreqType; /*!< indicates how the sampling frequency can be programmed */ - uint8_t bSamFreq[3]; /*!< sampling frequency ns in Hz for this isochronous data endpoint */ -} usb_desc_format_type; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bEndpointAddress; /*!< the address of the endpoint */ - uint8_t bmAttributes; /*!< transfer type and synchronization type */ - uint16_t wMaxPacketSize; /*!< maximum packet size this endpoint is capable of sending or receiving */ - uint8_t bInterval; /*!< left to the designer's discretion */ - uint8_t bRefresh; /*!< reset to 0 */ - uint8_t bSynchAddress; /*!< reset to 0 */ -} usb_desc_std_ep; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< EP_GENERAL descriptor subtype */ - uint8_t bmAttributes; /*!< transfer type and synchronization type */ - uint8_t bLockDelayUnits; /*!< indicates the units used for the wLockDelay field */ - uint16_t wLockDelay; /*!< indicates the time it takes this endpoint to reliably lock its internal clock recovery circuitry */ -} usb_desc_AS_ep; - -#pragma pack() - -/* USB configuration descriptor structure */ -typedef struct -{ - usb_desc_config config; - usb_desc_itf std_itf; - usb_desc_AC_itf ac_itf; - usb_desc_input_terminal in_terminal; - usb_desc_mono_feature_unit feature_unit; - usb_desc_output_terminal out_terminal; - usb_desc_itf std_as_itf_zeroband; - usb_desc_itf std_as_itf_opera; - usb_desc_AS_itf as_itf; - usb_desc_format_type format_typeI; - usb_desc_std_ep std_endpoint; - usb_desc_AS_ep as_endpoint; -} usb_desc_config_set; - -typedef struct -{ - /* main buffer for audio data out transfers and its relative pointers */ - uint8_t isoc_out_buff[TOTAL_OUT_BUF_SIZE * 2U]; - uint8_t* isoc_out_wrptr; - uint8_t* isoc_out_rdptr; - - /* main buffer for audio control requests transfers and its relative variables */ - uint8_t audioctl[64]; - uint8_t audioctl_unit; - uint32_t audioctl_len; - - uint32_t play_flag; -} usbd_audio_handler; - -extern usb_desc audio_desc; -extern usb_class audio_class; - -#endif /* __AUDIO_CORE_H */ - diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Include/audio_out_itf.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Include/audio_out_itf.h deleted file mode 100644 index b695b59..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Include/audio_out_itf.h +++ /dev/null @@ -1,76 +0,0 @@ -/*! - \file audio_out_itf.h - \brief audio OUT (playback) interface header file - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __AUDIO_OUT_ITF_H -#define __AUDIO_OUT_ITF_H - -#include "usbd_conf.h" - -/* audio commands enumeration */ -typedef enum -{ - AUDIO_CMD_PLAY = 1U, - AUDIO_CMD_PAUSE, - AUDIO_CMD_STOP, -}audio_cmd_enum; - -/* mute commands */ -#define AUDIO_MUTE 0x01U -#define AUDIO_UNMUTE 0x00U - -/* functions return value */ -#define AUDIO_OK 0x00U -#define AUDIO_FAIL 0xFFU - -/* audio machine states */ -#define AUDIO_STATE_INACTIVE 0x00U -#define AUDIO_STATE_ACTIVE 0x01U -#define AUDIO_STATE_PLAYING 0x02U -#define AUDIO_STATE_PAUSED 0x03U -#define AUDIO_STATE_STOPPED 0x04U -#define AUDIO_STATE_ERROR 0x05U - -typedef struct { - uint8_t (*audio_init) (uint32_t audio_freq, uint32_t volume, uint32_t options); - uint8_t (*audio_deinit) (uint32_t options); - uint8_t (*audio_cmd) (uint8_t* pbuf, uint32_t size, uint8_t cmd); - uint8_t (*audio_volume_ctl) (uint8_t vol); - uint8_t (*audio_mute_ctl) (uint8_t cmd); - uint8_t (*audio_periodic_tc) (uint8_t cmd); - uint8_t (*audio_state_get) (void); -} audio_fops_struct; - -extern audio_fops_struct audio_out_fops; - -#endif /* __AUDIO_OUT_ITF_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Source/audio_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Source/audio_core.c deleted file mode 100644 index 8958ca9..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Source/audio_core.c +++ /dev/null @@ -1,549 +0,0 @@ -/*! - \file audio_core.c - \brief USB audio device class core functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "audio_out_itf.h" -#include "audio_core.h" - -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x9574U - -/* local function prototypes ('static') */ -static uint8_t usbd_audio_sof (usb_dev *udev); -static uint8_t audio_init (usb_dev *udev, uint8_t config_index); -static uint8_t audio_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t audio_req_handler (usb_dev *udev, usb_req *req); -static uint8_t audio_ctlx_out (usb_dev *udev); -static void audio_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class audio_class = { - .init = audio_init, - .deinit = audio_deinit, - .req_process = audio_req_handler, - .ctlx_out = audio_ctlx_out, - .data_out = audio_data_out -}; - -usbd_int_cb_struct usb_inthandler = -{ - usbd_audio_sof, -}; - -/* note:it should use the c99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev audio_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -/* USB device configuration descriptor */ -usb_desc_config_set audio_config_set = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = AUDIO_CONFIG_DESC_SET_LEN, - .bNumInterfaces = 0x02U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0xC0U, - .bMaxPower = 0x32U - }, - - .std_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x00U, - .bInterfaceClass = USB_CLASS_AUDIO, - .bInterfaceSubClass = AUDIO_SUBCLASS_CONTROL, - .bInterfaceProtocol = AUDIO_PROTOCOL_UNDEFINED, - .iInterface = 0x00U - }, - - .ac_itf = - { - .header = - { - .bLength = sizeof(usb_desc_AC_itf), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = 0x01U, - .bcdADC = 0x0100U, - .wTotalLength = 0x0027U, - .bInCollection = 0x01U, - .baInterfaceNr = 0x01U - }, - - .in_terminal = - { - .header = - { - .bLength = sizeof(usb_desc_input_terminal), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = 0x02U, - .bTerminalID = 0x01U, - .wTerminalType = 0x0101U, - .bAssocTerminal = 0x00U, - .bNrChannels = 0x01U, - .wChannelConfig = 0x0000U, - .iChannelNames = 0x00U, - .iTerminal = 0x00U - }, - - .feature_unit = - { - .header = - { - .bLength = sizeof(usb_desc_mono_feature_unit), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = AUDIO_CONTROL_FEATURE_UNIT, - .bUnitID = AUDIO_OUT_STREAMING_CTRL, - .bSourceID = 0x01U, - .bControlSize = 0x01U, - .bmaControls0 = AUDIO_CONTROL_MUTE, - .bmaControls1 = 0x00U, - .iFeature = 0x00U - }, - - .out_terminal = - { - .header = - { - .bLength = sizeof(usb_desc_output_terminal), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = AUDIO_CONTROL_OUTPUT_TERMINAL, - .bTerminalID = 0x03U, - .wTerminalType = 0x0301U, - .bAssocTerminal = 0x00U, - .bSourceID = 0x02U, - .iTerminal = 0x00U - }, - - .std_as_itf_zeroband = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x01U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x00U, - .bInterfaceClass = USB_CLASS_AUDIO, - .bInterfaceSubClass = AUDIO_SUBCLASS_AUDIOSTREAMING, - .bInterfaceProtocol = AUDIO_PROTOCOL_UNDEFINED, - .iInterface = 0x00U - }, - - .std_as_itf_opera = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x01U, - .bAlternateSetting = 0x01U, - .bNumEndpoints = 0x01U, - .bInterfaceClass = USB_CLASS_AUDIO, - .bInterfaceSubClass = AUDIO_SUBCLASS_AUDIOSTREAMING, - .bInterfaceProtocol = AUDIO_PROTOCOL_UNDEFINED, - .iInterface = 0x00U - }, - - .as_itf = - { - .header = - { - .bLength = sizeof(usb_desc_AS_itf), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = AUDIO_STREAMING_GENERAL, - .bTerminalLink = 0x01U, - .bDelay = 0x01U, - .wFormatTag = 0x0001U, - }, - - .format_typeI = - { - .header = - { - .bLength = sizeof(usb_desc_format_type), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = AUDIO_STREAMING_FORMAT_TYPE, - .bFormatType = AUDIO_FORMAT_TYPE_III, - .bNrChannels = 0x02U, - .bSubFrameSize = 0x02U, - .bBitResolution = 0x10U, - .bSamFreqType = 0x01U, - .bSamFreq[0] = (uint8_t)USBD_AUDIO_FREQ_16K, - .bSamFreq[1] = USBD_AUDIO_FREQ_16K >> 8, - .bSamFreq[2] = USBD_AUDIO_FREQ_16K >> 16 - }, - - .std_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_std_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = AUDIO_OUT_EP, - .bmAttributes = USB_ENDPOINT_TYPE_ISOCHRONOUS, - .wMaxPacketSize = PACKET_SIZE(USBD_AUDIO_FREQ_16K), - .bInterval = 0x01U, - .bRefresh = 0x00U, - .bSynchAddress = 0x00U - }, - - .as_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_AS_ep), - .bDescriptorType = AUDIO_DESCTYPE_ENDPOINT - }, - .bDescriptorSubtype = AUDIO_ENDPOINT_GENERAL, - .bmAttributes = 0x00U, - .bLockDelayUnits = 0x00U, - .wLockDelay = 0x0000U, - } -}; - -/* USB language ID descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(14U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'A', 'u', 'd', 'i', 'o'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor */ -static uint8_t* usbd_audio_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc audio_desc = { - .dev_desc = (uint8_t *)&audio_dev_desc, - .config_desc = (uint8_t *)&audio_config_set, - .strings = usbd_audio_strings -}; - -/*! - \brief initialize the audio device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t audio_init (usb_dev *udev, uint8_t config_index) -{ - usb_desc_std_ep std_ep = audio_config_set.std_endpoint; - - static usbd_audio_handler audio_handler; - - memset((void *)&audio_handler, 0, sizeof(usbd_audio_handler)); - - usb_desc_ep ep = { - .header = std_ep.header, - .bEndpointAddress = std_ep.bEndpointAddress, - .bmAttributes = std_ep.bmAttributes, - .wMaxPacketSize = std_ep.wMaxPacketSize, - .bInterval = std_ep.bInterval - }; - - /* initialize RX endpoint */ - usbd_ep_init(udev, EP_BUF_DBL, AUDIO_BUF_ADDR, &ep); - - usbd_int_fops = &usb_inthandler; - - audio_handler.isoc_out_rdptr = audio_handler.isoc_out_buff; - audio_handler.isoc_out_wrptr = audio_handler.isoc_out_buff; - - /* initialize the audio output hardware layer */ - if (USBD_OK != audio_out_fops.audio_init(USBD_AUDIO_FREQ_16K, DEFAULT_VOLUME, 0U)) { - return USBD_FAIL; - } - - udev->ep_transc[AUDIO_OUT_EP][TRANSC_OUT] = audio_class.data_out; - - /* prepare out endpoint to receive audio data */ - usbd_ep_recev (udev, AUDIO_OUT_EP, (uint8_t*)audio_handler.isoc_out_buff, (uint16_t)AUDIO_OUT_PACKET); - - udev->class_data[USBD_AUDIO_INTERFACE] = (void *)&audio_handler; - - return USBD_OK; -} - -/*! - \brief de-initialize the audio device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t audio_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize audio endpoints */ - usbd_ep_deinit(udev, AUDIO_OUT_EP); - - /* deinitialize the audio output hardware layer */ - if (USBD_OK != audio_out_fops.audio_deinit(0U)) { - return USBD_FAIL; - } - - return USBD_OK; -} - -/*! - \brief handle the audio class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t audio_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - usbd_audio_handler *audio = (usbd_audio_handler *)udev->class_data[USBD_AUDIO_INTERFACE]; - - switch (req->bRequest) { - case AUDIO_REQ_GET_CUR: - usb_transc_config(&udev->transc_in[0], audio->audioctl, req->wLength, 0U); - - status = REQ_SUPP; - break; - - case AUDIO_REQ_SET_CUR: - if (req->wLength) { - usb_transc_config(&udev->transc_out[0], audio->audioctl, req->wLength, 0U); - - udev->class_core->req_cmd = AUDIO_REQ_SET_CUR; - - audio->audioctl_len = req->wLength; - audio->audioctl_unit = BYTE_HIGH(req->wIndex); - - status = REQ_SUPP; - } - break; - - default: - break; - } - - return status; -} - -/*! - \brief handles the audio out data stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval USB device operation status -*/ -static void audio_data_out (usb_dev *udev, uint8_t ep_num) -{ - usbd_audio_handler *audio = (usbd_audio_handler *)udev->class_data[USBD_AUDIO_INTERFACE]; - - if (AUDIO_OUT_EP == ep_num) { - /* increment the Buffer pointer or roll it back when all buffers are full */ - if (audio->isoc_out_wrptr >= (audio->isoc_out_buff + (AUDIO_OUT_PACKET * OUT_PACKET_NUM))) { - /* all buffers are full: roll back */ - audio->isoc_out_wrptr = audio->isoc_out_buff; - } else { - /* increment the buffer pointer */ - audio->isoc_out_wrptr += AUDIO_OUT_PACKET; - } - - /* prepare out endpoint to receive next audio packet */ - usbd_ep_recev (udev, AUDIO_OUT_EP, (uint8_t*)(audio->isoc_out_wrptr), (uint16_t)AUDIO_OUT_PACKET); - - /* trigger the start of streaming only when half buffer is full */ - if ((0U == audio->play_flag) && (audio->isoc_out_wrptr >= (audio->isoc_out_buff + ((AUDIO_OUT_PACKET * OUT_PACKET_NUM) / 2U)))) { - /* enable start of streaming */ - audio->play_flag = 1U; - } - } -} - -/*! - \brief handles audio control request data - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -static uint8_t audio_ctlx_out (usb_dev *udev) -{ - usbd_audio_handler *audio = (usbd_audio_handler *)udev->class_data[USBD_AUDIO_INTERFACE]; - - /* check if an audio_control request has been issued */ - if (AUDIO_REQ_SET_CUR == udev->class_core->req_cmd) { - /* in this driver, to simplify code, only SET_CUR request is managed */ - - /* check for which addressed unit the audio_control request has been issued */ - if (AUDIO_OUT_STREAMING_CTRL == audio->audioctl_unit) { - /* in this driver, to simplify code, only one unit is manage */ - - /* call the audio interface mute function */ - audio_out_fops.audio_mute_ctl(audio->audioctl[0]); - - /* reset the audioctl_cmd variable to prevent re-entering this function */ - udev->class_core->req_cmd = 0U; - - audio->audioctl_len = 0U; - } - } - - return USBD_OK; -} - -/*! - \brief handles the SOF event (data buffer update and synchronization) - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -static uint8_t usbd_audio_sof (usb_dev *udev) -{ - usbd_audio_handler *audio = (usbd_audio_handler *)udev->class_data[USBD_AUDIO_INTERFACE]; - - /* check if there are available data in stream buffer. - in this function, a single variable (play_flag) is used to avoid software delays. - the play operation must be executed as soon as possible after the SOF detection. */ - if (audio->play_flag) { - /* start playing received packet */ - audio_out_fops.audio_cmd((uint8_t*)(audio->isoc_out_rdptr), /* samples buffer pointer */ - AUDIO_OUT_PACKET, /* number of samples in Bytes */ - AUDIO_CMD_PLAY); /* command to be processed */ - - /* increment the Buffer pointer or roll it back when all buffers all full */ - if (audio->isoc_out_rdptr >= (audio->isoc_out_buff + (AUDIO_OUT_PACKET * OUT_PACKET_NUM))) { - /* roll back to the start of buffer */ - audio->isoc_out_rdptr = audio->isoc_out_buff; - } else { - /* increment to the next sub-buffer */ - audio->isoc_out_rdptr += AUDIO_OUT_PACKET; - } - - /* if all available buffers have been consumed, stop playing */ - if (audio->isoc_out_rdptr == audio->isoc_out_wrptr) { - /* pause the audio stream */ - audio_out_fops.audio_cmd((uint8_t*)(audio->isoc_out_buff), /* samples buffer pointer */ - AUDIO_OUT_PACKET, /* number of samples in Bytes */ - AUDIO_CMD_PAUSE); /* command to be processed */ - - /* stop entering play loop */ - audio->play_flag = 0U; - - /* reset buffer pointers */ - audio->isoc_out_rdptr = audio->isoc_out_buff; - audio->isoc_out_wrptr = audio->isoc_out_buff; - } - } - - return USBD_OK; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Source/audio_out_itf.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Source/audio_out_itf.c deleted file mode 100644 index cc64f53..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/audio/Source/audio_out_itf.c +++ /dev/null @@ -1,242 +0,0 @@ -/*! - \file audio_out_itf.c - \brief audio OUT (playback) interface functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "audio_core.h" -#include "audio_out_itf.h" - -/* local function prototypes ('static') */ -static uint8_t init (uint32_t audio_freq, uint32_t volume, uint32_t options); -static uint8_t deinit (uint32_t options); -static uint8_t audio_cmd (uint8_t* pbuf, uint32_t size, uint8_t cmd); -static uint8_t volume_ctl (uint8_t vol); -static uint8_t mute_ctl (uint8_t cmd); -static uint8_t periodic_tc (uint8_t cmd); -static uint8_t get_state (void); - -audio_fops_struct audio_out_fops = -{ - init, - deinit, - audio_cmd, - volume_ctl, - mute_ctl, - periodic_tc, - get_state -}; - -static uint8_t audio_state = AUDIO_STATE_INACTIVE; - -/*! - \brief initialize and configures all required resources for audio play function - \param[in] audio_freq: statrt_up audio frequency - \param[in] volume: start_up volume to be set - \param[in] options: specific options passed to low layer function - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t init (uint32_t audio_freq, uint32_t volume, uint32_t options) -{ - static uint32_t initialized = 0U; - - /* check if the low layer has already been initialized */ - if (0U == initialized) { - /* call low layer function */ - if (0U != eval_audio_init(OUTPUT_DEVICE_AUTO, volume, audio_freq)) { - audio_state = AUDIO_STATE_ERROR; - - return AUDIO_FAIL; - } - - /* set the initialization flag to prevent reinitializing the interface again */ - initialized = 1U; - } - - /* update the audio state machine */ - audio_state = AUDIO_STATE_ACTIVE; - - return AUDIO_OK; -} - -/*! - \brief free all resources used by low layer and stops audio-play function - \param[in] options: specific options passed to low layer function - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t deinit (uint32_t options) -{ - /* update the audio state machine */ - audio_state = AUDIO_STATE_INACTIVE; - - return AUDIO_OK; -} - -/*! - \brief play, stop, pause or resume current file - \param[in] pbuf: address from which file should be played - \param[in] size: size of the current buffer/file - \param[in] cmd: command to be executed, can be: - \arg AUDIO_CMD_PLAY - \arg AUDIO_CMD_PAUSE - \arg AUDIO_CMD_RESUME - \arg AUDIO_CMD_STOP - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t audio_cmd (uint8_t* pbuf, uint32_t size, uint8_t cmd) -{ - uint8_t status = AUDIO_OK; - - /* check the current state */ - if ((AUDIO_STATE_INACTIVE == audio_state) || (AUDIO_STATE_ERROR == audio_state)) { - audio_state = AUDIO_STATE_ERROR; - - return AUDIO_FAIL; - } - - switch (cmd) { - /* process the play command */ - case AUDIO_CMD_PLAY: - /* if current state is active or stopped */ - if ((AUDIO_STATE_ACTIVE == audio_state) || \ - (AUDIO_STATE_STOPPED == audio_state) || \ - (AUDIO_STATE_PLAYING == audio_state)) { - audio_mal_play((uint32_t)pbuf, (size / 2U)); - audio_state = AUDIO_STATE_PLAYING; - } else if (AUDIO_STATE_PAUSED == audio_state) { - if (eval_audio_pause_resume(AUDIO_RESUME, (uint32_t)pbuf, (size / 2U))) { - audio_state = AUDIO_STATE_ERROR; - - status = AUDIO_FAIL; - } else { - audio_state = AUDIO_STATE_PLAYING; - } - } else { - status = AUDIO_FAIL; - } - break; - - /* process the stop command */ - case AUDIO_CMD_STOP: - if (AUDIO_STATE_PLAYING != audio_state) { - /* unsupported command */ - status = AUDIO_FAIL; - } else if (eval_audio_stop(CODEC_PDWN_SW)) { - audio_state = AUDIO_STATE_ERROR; - - status = AUDIO_FAIL; - } else { - audio_state = AUDIO_STATE_STOPPED; - } - break; - - /* process the pause command */ - case AUDIO_CMD_PAUSE: - if (AUDIO_STATE_PLAYING != audio_state) { - /* unsupported command */ - status = AUDIO_FAIL; - } else if (eval_audio_pause_resume(AUDIO_PAUSE, (uint32_t)pbuf, (size / 2U))) { - audio_state = AUDIO_STATE_ERROR; - - status = AUDIO_FAIL; - } else { - audio_state = AUDIO_STATE_PAUSED; - } - break; - - /* unsupported command */ - default: - break; - } - - return status; -} - -/*! - \brief set the volume level - \param[in] vol: volume level to be set in % (from 0% to 100%) - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t volume_ctl (uint8_t vol) -{ - /* call low layer volume setting function */ - if (eval_audio_volume_ctl(vol)) { - audio_state = AUDIO_STATE_ERROR; - - return AUDIO_FAIL; - } - - return AUDIO_OK; -} - -/*! - \brief mute or unmute the audio current output - \param[in] cmd: can be 0 to unmute, or 1 to mute - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t mute_ctl (uint8_t cmd) -{ - /* call low layer mute setting function */ - if (eval_audio_mute((uint32_t)cmd)) { - audio_state = AUDIO_STATE_ERROR; - - return AUDIO_FAIL; - } - - return AUDIO_OK; -} - -/*! - \brief periodic transfer control - \param[in] cmd: command - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t periodic_tc (uint8_t cmd) -{ - return AUDIO_OK; -} - -/*! - \brief return the current state of the audio machine - \param[in] none - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t get_state (void) -{ - return audio_state; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/cdc/Include/cdc_acm_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/cdc/Include/cdc_acm_core.h deleted file mode 100644 index 3510ff0..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/cdc/Include/cdc_acm_core.h +++ /dev/null @@ -1,164 +0,0 @@ -/*! - \file cdc_acm_core.h - \brief the header file of CDC ACM driver - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __CDC_ACM_CORE_H -#define __CDC_ACM_CORE_H - -#include "usbd_enum.h" - -/* communications device class code */ -#define USB_CLASS_CDC 0x02U - -/* CDC subclass code */ -#define USB_CDC_SUBCLASS_DLCM 0x01U -#define USB_CDC_SUBCLASS_ACM 0x02U - -/* communications interface class control protocol codes */ -#define USB_CDC_PROTOCOL_NONE 0x00U -#define USB_CDC_PROTOCOL_AT 0x01U - -/* data interface class code */ -#define USB_CLASS_DATA 0x0AU - -#define USB_DESCTYPE_CDC_ACM 0x21U -#define USB_DESCTYPE_CS_INTERFACE 0x24U - -#define USB_CDC_ACM_CONFIG_DESC_SIZE 0x43U - -/* class-specific notification codes for PSTN subclasses */ -#define USB_CDC_NOTIFY_SERIAL_STATE 0x20U - -/* class-specific request codes */ -#define SEND_ENCAPSULATED_COMMAND 0x00U -#define GET_ENCAPSULATED_RESPONSE 0x01U -#define SET_COMM_FEATURE 0x02U -#define GET_COMM_FEATURE 0x03U -#define CLEAR_COMM_FEATURE 0x04U -#define SET_LINE_CODING 0x20U -#define GET_LINE_CODING 0x21U -#define SET_CONTROL_LINE_STATE 0x22U -#define SEND_BREAK 0x23U -#define NO_CMD 0xFFU - -#pragma pack(1) - -/* CDC ACM line coding structure */ -typedef struct { - uint32_t dwDTERate; /*!< data terminal rate */ - uint8_t bCharFormat; /*!< stop bits */ - uint8_t bParityType; /*!< parity */ - uint8_t bDataBits; /*!< data bits */ -} acm_line; - -/* notification structure */ -typedef struct { - uint8_t bmRequestType; /*!< type of request */ - uint8_t bNotification; /*!< communication interface class notifications */ - uint16_t wValue; /*!< value of notification */ - uint16_t wIndex; /*!< index of interface */ - uint16_t wLength; /*!< length of notification data */ -} acm_notification; - -/* header function structure */ -typedef struct { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint8_t bDescriptorSubtype; /*!< bDescriptorSubtype: header function descriptor */ - uint16_t bcdCDC; /*!< bcdCDC: low byte of spec release number (CDC1.10) */ -} usb_desc_header_func; - -/* call management function structure */ -typedef struct { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint8_t bDescriptorSubtype; /*!< bDescriptorSubtype: call management function descriptor */ - uint8_t bmCapabilities; /*!< bmCapabilities: D0 is reset, D1 is ignored */ - uint8_t bDataInterface; /*!< bDataInterface: 1 interface used for call management */ -} usb_desc_call_managment_func; - -/* ACM function structure */ -typedef struct { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint8_t bDescriptorSubtype; /*!< bDescriptorSubtype: abstract control management descriptor */ - uint8_t bmCapabilities; /*!< bmCapabilities: D1 */ -} usb_desc_acm_func; - -/* union function structure */ -typedef struct { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint8_t bDescriptorSubtype; /*!< bDescriptorSubtype: union function descriptor */ - uint8_t bMasterInterface; /*!< bMasterInterface: communication class interface */ - uint8_t bSlaveInterface0; /*!< bSlaveInterface0: data class interface */ -} usb_desc_union_func; - -#pragma pack() - -/* configuration descriptor structure */ -typedef struct { - usb_desc_config config; - usb_desc_itf cmd_itf; - usb_desc_header_func cdc_header; - usb_desc_call_managment_func cdc_call_managment; - usb_desc_acm_func cdc_acm; - usb_desc_union_func cdc_union; - usb_desc_ep cdc_cmd_endpoint; - usb_desc_itf cdc_data_interface; - usb_desc_ep cdc_out_endpoint; - usb_desc_ep cdc_in_endpoint; -} usb_cdc_desc_config_set; - -#define USB_CDC_RX_LEN 64U - -typedef struct { - uint8_t pre_packet_send; - uint8_t packet_sent; - uint8_t packet_receive; - - uint8_t data[USB_CDC_RX_LEN]; - - uint32_t receive_length; - - acm_line line_coding; -} usb_cdc_handler; - -extern usb_desc cdc_desc; -extern usb_class cdc_class; - -/* function declarations */ -/* receive CDC ACM data */ -void cdc_acm_data_receive(usb_dev *udev); -/* send CDC ACM data */ -void cdc_acm_data_send(usb_dev *udev); -/* check CDC ACM is ready for data transfer */ -uint8_t cdc_acm_check_ready(usb_dev *udev); - -#endif /* __CDC_ACM_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/cdc/Source/cdc_acm_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/cdc/Source/cdc_acm_core.c deleted file mode 100644 index 6d74d34..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/cdc/Source/cdc_acm_core.c +++ /dev/null @@ -1,509 +0,0 @@ -/*! - \file cdc_acm_core.c - \brief CDC ACM driver - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "cdc_acm_core.h" - -#define USBD_VID 0x28E9U -#define USBD_PID 0x018AU - -/* note:it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev cdc_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV, - }, - .bcdUSB = 0x0200U, - .bDeviceClass = USB_CLASS_CDC, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM, -}; - -/* USB device configuration descriptor */ -usb_cdc_desc_config_set cdc_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG, - }, - .wTotalLength = USB_CDC_ACM_CONFIG_DESC_SIZE, - .bNumInterfaces = 0x02U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0x80U, - .bMaxPower = 0x32U - }, - - .cmd_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x01U, - .bInterfaceClass = USB_CLASS_CDC, - .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM, - .bInterfaceProtocol = USB_CDC_PROTOCOL_AT, - .iInterface = 0x00U - }, - - .cdc_header = - { - .header = - { - .bLength = sizeof(usb_desc_header_func), - .bDescriptorType = USB_DESCTYPE_CS_INTERFACE - }, - .bDescriptorSubtype = 0x00U, - .bcdCDC = 0x0110U - }, - - .cdc_call_managment = - { - .header = - { - .bLength = sizeof(usb_desc_call_managment_func), - .bDescriptorType = USB_DESCTYPE_CS_INTERFACE - }, - .bDescriptorSubtype = 0x01U, - .bmCapabilities = 0x00U, - .bDataInterface = 0x01U - }, - - .cdc_acm = - { - .header = - { - .bLength = sizeof(usb_desc_acm_func), - .bDescriptorType = USB_DESCTYPE_CS_INTERFACE - }, - .bDescriptorSubtype = 0x02U, - .bmCapabilities = 0x02U, - }, - - .cdc_union = - { - .header = - { - .bLength = sizeof(usb_desc_union_func), - .bDescriptorType = USB_DESCTYPE_CS_INTERFACE - }, - .bDescriptorSubtype = 0x06U, - .bMasterInterface = 0x00U, - .bSlaveInterface0 = 0x01U, - }, - - .cdc_cmd_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP, - }, - .bEndpointAddress = CDC_CMD_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = CDC_ACM_CMD_PACKET_SIZE, - .bInterval = 0x0AU - }, - - .cdc_data_interface = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF, - }, - .bInterfaceNumber = 0x01U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_CLASS_DATA, - .bInterfaceSubClass = 0x00U, - .bInterfaceProtocol = USB_CDC_PROTOCOL_NONE, - .iInterface = 0x00U - }, - - .cdc_out_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP, - }, - .bEndpointAddress = CDC_OUT_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = CDC_ACM_DATA_PACKET_SIZE, - .bInterval = 0x00U - }, - - .cdc_in_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = CDC_IN_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = CDC_ACM_DATA_PACKET_SIZE, - .bInterval = 0x00U - } -}; - -/* USB language ID descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'C', 'D', 'C', '_', 'A', 'C', 'M'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor set */ -uint8_t* usbd_cdc_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc cdc_desc = { - .dev_desc = (uint8_t *)&cdc_dev_desc, - .config_desc = (uint8_t *)&cdc_config_desc, - .strings = usbd_cdc_strings -}; - -/* local function prototypes ('static') */ -static uint8_t cdc_acm_init (usb_dev *udev, uint8_t config_index); -static uint8_t cdc_acm_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t cdc_acm_req_handler (usb_dev *udev, usb_req *req); -static uint8_t cdc_acm_ctlx_out (usb_dev *udev); -static void cdc_acm_data_in (usb_dev *udev, uint8_t ep_num); -static void cdc_acm_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class cdc_class = { - .req_cmd = NO_CMD, - - .init = cdc_acm_init, - .deinit = cdc_acm_deinit, - .req_process = cdc_acm_req_handler, - .ctlx_out = cdc_acm_ctlx_out, - .data_in = cdc_acm_data_in, - .data_out = cdc_acm_data_out -}; - -/*! - \brief receive CDC ACM data - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -void cdc_acm_data_receive(usb_dev *udev) -{ - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - cdc->packet_receive = 0U; - cdc->pre_packet_send = 0U; - - usbd_ep_recev(udev, CDC_OUT_EP, (uint8_t*)(cdc->data), USB_CDC_RX_LEN); -} - -/*! - \brief send CDC ACM data - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -void cdc_acm_data_send (usb_dev *udev) -{ - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - uint32_t data_len = cdc->receive_length; - - if ((0U != data_len) && (1U == cdc->packet_sent)) { - cdc->packet_sent = 0U; - usbd_ep_send(udev, CDC_IN_EP, (uint8_t*)(cdc->data), (uint16_t)data_len); - cdc->receive_length = 0U; - } -} - -/*! - \brief check CDC ACM is ready for data transfer - \param[in] udev: pointer to USB device instance - \param[out] none - \retval 0 if CDC is ready, 5 otherwise -*/ -uint8_t cdc_acm_check_ready(usb_dev *udev) -{ - if (udev->class_data[CDC_COM_INTERFACE] != NULL) { - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - if ((1U == cdc->packet_receive) && (1U == cdc->pre_packet_send)) { - return 0U; - } - } - - return 5U; -} - -/*! - \brief initialize the CDC ACM device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t cdc_acm_init (usb_dev *udev, uint8_t config_index) -{ - static usb_cdc_handler cdc_handler; - - /* initialize the data endpoints */ - usbd_ep_init(udev, EP_BUF_SNG, BULK_TX_ADDR, &(cdc_config_desc.cdc_in_endpoint)); - usbd_ep_init(udev, EP_BUF_SNG, BULK_RX_ADDR, &(cdc_config_desc.cdc_out_endpoint)); - - /* initialize the command endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, INT_TX_ADDR, &(cdc_config_desc.cdc_cmd_endpoint)); - - udev->ep_transc[EP_ID(CDC_IN_EP)][TRANSC_IN] = cdc_class.data_in; - udev->ep_transc[CDC_OUT_EP][TRANSC_OUT] = cdc_class.data_out; - - /* initialize CDC handler structure */ - cdc_handler.packet_receive = 0U; - cdc_handler.packet_sent = 1U; - cdc_handler.pre_packet_send = 1U; - cdc_handler.receive_length = 0U; - - cdc_handler.line_coding = (acm_line){ - .dwDTERate = 115200U, - .bCharFormat = 0U, - .bParityType = 0U, - .bDataBits = 0x08U - }; - - udev->class_data[CDC_COM_INTERFACE] = (void *)&cdc_handler; - - return USBD_OK; -} - -/*! - \brief deinitialize the CDC ACM device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t cdc_acm_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize the data endpoints */ - usbd_ep_deinit(udev, CDC_IN_EP); - usbd_ep_deinit(udev, CDC_OUT_EP); - - /* deinitialize the command endpoint */ - usbd_ep_deinit(udev, CDC_CMD_EP); - - return USBD_OK; -} - -/*! - \brief command data received on control endpoint - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -static uint8_t cdc_acm_ctlx_out (usb_dev *udev) -{ - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - if (NO_CMD != udev->class_core->req_cmd) { - cdc->packet_receive = 1U; - cdc->pre_packet_send = 1U; - - udev->class_core->req_cmd = NO_CMD; - } - - return USBD_OK; -} - -/*! - \brief handle CDC ACM data in transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval USB device operation status -*/ -static void cdc_acm_data_in (usb_dev *udev, uint8_t ep_num) -{ - usb_transc *transc = &udev->transc_in[ep_num]; - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - if (transc->xfer_count == transc->max_len) { - usbd_ep_send(udev, EP_ID(ep_num), NULL, 0U); - } else { - cdc->packet_sent = 1U; - cdc->pre_packet_send = 1U; - } -} - -/*! - \brief handle CDC ACM data out transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval USB device operation status -*/ -static void cdc_acm_data_out (usb_dev *udev, uint8_t ep_num) -{ - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - cdc->packet_receive = 1U; - - cdc->receive_length = udev->transc_out[ep_num].xfer_count; -} - -/*! - \brief handle the CDC ACM class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t cdc_acm_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP, noti_buf[10] = {0U}; - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - acm_notification *notif = (void *)noti_buf; - - switch (req->bRequest) { - case SEND_ENCAPSULATED_COMMAND: - break; - - case GET_ENCAPSULATED_RESPONSE: - break; - - case SET_COMM_FEATURE: - break; - - case GET_COMM_FEATURE: - break; - - case CLEAR_COMM_FEATURE: - break; - - case SET_LINE_CODING: - /* set the value of the current command to be processed */ - udev->class_core->req_cmd = req->bRequest; - - usb_transc_config(&udev->transc_out[0U], (uint8_t *)&cdc->line_coding, req->wLength, 0U); - - status = REQ_SUPP; - break; - - case GET_LINE_CODING: - usb_transc_config(&udev->transc_in[0U], (uint8_t *)&cdc->line_coding, 7U, 0U); - - status = REQ_SUPP; - break; - - case SET_CONTROL_LINE_STATE: - notif->bmRequestType = 0xA1U; - notif->bNotification = USB_CDC_NOTIFY_SERIAL_STATE; - notif->wIndex = 0U; - notif->wValue = 0U; - notif->wLength = 2U; - noti_buf[8] = (uint8_t)req->wValue & 3U; - noti_buf[9] = 0U; - - status = REQ_SUPP; - break; - - case SEND_BREAK: - break; - - default: - break; - } - - return status; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/dfu/Include/dfu_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/dfu/Include/dfu_core.h deleted file mode 100644 index 9f1b78b..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/dfu/Include/dfu_core.h +++ /dev/null @@ -1,179 +0,0 @@ -/*! - \file dfu_core.h - \brief the header file of USB DFU device class core functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __DFU_CORE_H -#define __DFU_CORE_H - -#include "usbd_enum.h" - -/* DFU class code */ -#define USB_DFU_CLASS 0xFEU - -/* DFU subclass code */ -#define USB_DFU_SUBCLASS_UPGRADE 0x01U - -/* DFU protocol code */ -#define USB_DFU_PROTOCL_RUNTIME 0x01U -#define USB_DFU_PROTOCL_DFU 0x02U - -/* manifestation state */ -#define MANIFEST_COMPLETE 0x00U -#define MANIFEST_IN_PROGRESS 0x01U - -/* DFU attributes code */ -#define USB_DFU_CAN_DOWNLOAD 0x01U -#define USB_DFU_CAN_UPLOAD 0x02U -#define USB_DFU_MANIFEST_TOLERANT 0x04U -#define USB_DFU_WILL_DETACH 0x08U - -/* special commands with download request */ -#define GET_COMMANDS 0x00U -#define SET_ADDRESS_POINTER 0x21U -#define ERASE 0x41U - -/* memory operation command */ -#define CMD_ERASE 0U -#define CMD_WRITE 1U - -#define _BYTE1(x) (uint8_t)((x) & 0xFFU) /*!< addressing cycle 1st byte */ -#define _BYTE2(x) (uint8_t)(((x) & 0xFF00U) >> 8U) /*!< addressing cycle 2nd byte */ -#define _BYTE3(x) (uint8_t)(((x) & 0xFF0000U) >> 16U) /*!< addressing cycle 3rd byte */ - -#define SET_POLLING_TIMEOUT(x) do { \ - dfu->bwPollTimeout0 = _BYTE1(x);\ - dfu->bwPollTimeout1 = _BYTE2(x);\ - dfu->bwPollTimeout2 = _BYTE3(x);\ - } while(0) - -#define FLASH_ERASE_TIMEOUT 60U -#define FLASH_WRITE_TIMEOUT 80U - -/* bit detach capable = bit 3 in bmAttributes field */ -#define DFU_DETACH_MASK (uint8_t)(0x10U) -#define USB_DFU_CONFIG_DESC_SIZE (18U + (9U * USBD_ITF_MAX_NUM)) -#define DFU_DESC_TYPE 0x21U - -/* DFU device state enumeration */ -typedef enum { - STATE_APP_IDLE = 0x00U, - STATE_APP_DETACH, - STATE_DFU_IDLE, - STATE_DFU_DNLOAD_SYNC, - STATE_DFU_DNBUSY, - STATE_DFU_DNLOAD_IDLE, - STATE_DFU_MANIFEST_SYNC, - STATE_DFU_MANIFEST, - STATE_DFU_MANIFEST_WAIT_RESET, - STATE_DFU_UPLOAD_IDLE, - STATE_DFU_ERROR -} dfu_state; - -/* DFU device status enumeration */ -typedef enum { - STATUS_OK = 0x00U, - STATUS_ERR_TARGET, - STATUS_ERR_FILE, - STATUS_ERR_WRITE, - STATUS_ERR_ERASE, - STATUS_ERR_CHECK_ERASED, - STATUS_ERR_PROG, - STATUS_ERR_VERIFY, - STATUS_ERR_ADDRESS, - STATUS_ERR_NOTDONE, - STATUS_ERR_FIRMWARE, - STATUS_ERR_VENDOR, - STATUS_ERR_USBR, - STATUS_ERR_POR, - STATUS_ERR_UNKNOWN, - STATUS_ERR_STALLEDPKT -} dfu_status; - -/* DFU class-specific requests enumeration */ -typedef enum { - DFU_DETACH = 0U, - DFU_DNLOAD, - DFU_UPLOAD, - DFU_GETSTATUS, - DFU_CLRSTATUS, - DFU_GETSTATE, - DFU_ABORT, - DFU_REQ_MAX -} dfu_requests; - -#pragma pack(1) - -/* USB DFU function descriptor structure */ -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bmAttributes; /*!< DFU attributes */ - uint16_t wDetachTimeOut; /*!< time, in milliseconds, that the device will wait after receipt of the DFU_DETACH request. If */ - uint16_t wTransferSize; /*!< maximum number of bytes that the device can accept per control-write transaction */ - uint16_t bcdDFUVersion; /*!< numeric expression identifying the version of the DFU specification release. */ -} usb_desc_dfu_func; - -#pragma pack() - -/* USB configuration descriptor structure */ -typedef struct -{ - usb_desc_config config; - usb_desc_itf dfu_itf; - usb_desc_dfu_func dfu_func; -} usb_dfu_desc_config_set; - -/* USB DFU handler structure */ -typedef struct -{ - uint8_t bStatus; - uint8_t bwPollTimeout0; - uint8_t bwPollTimeout1; - uint8_t bwPollTimeout2; - uint8_t bState; - uint8_t iString; - - uint8_t manifest_state; - uint16_t data_len; - uint16_t block_num; - uint32_t base_addr; - - uint8_t buf[TRANSFER_SIZE]; -} usbd_dfu_handler; - -typedef void (*app_func) (void); - -extern usb_desc dfu_desc; -extern usb_class dfu_class; - -#endif /* __DFU_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/dfu/Source/dfu_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/dfu/Source/dfu_core.c deleted file mode 100644 index 013e26e..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/dfu/Source/dfu_core.c +++ /dev/null @@ -1,675 +0,0 @@ -/*! - \file dfu_core.c - \brief USB DFU device class core functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "dfu_core.h" -#include "systick.h" -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x0189U - -/* local function prototypes ('static') */ -static uint8_t dfu_init (usb_dev *udev, uint8_t config_index); -static uint8_t dfu_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t dfu_req_handler (usb_dev *udev, usb_req *req); -static uint8_t dfu_ctlx_in (usb_dev *udev); - -/* DFU requests management functions */ -static void dfu_detach (usb_dev *udev, usb_req *req); -static void dfu_dnload (usb_dev *udev, usb_req *req); -static void dfu_upload (usb_dev *udev, usb_req *req); -static void dfu_getstatus (usb_dev *udev, usb_req *req); -static void dfu_clrstatus (usb_dev *udev, usb_req *req); -static void dfu_getstate (usb_dev *udev, usb_req *req); -static void dfu_abort (usb_dev *udev, usb_req *req); - -static void dfu_mode_leave (usb_dev *udev); -static uint8_t dfu_getstatus_complete (usb_dev *udev); - -static void (*dfu_request_process[])(usb_dev *udev, usb_req *req) = -{ - [DFU_DETACH] = dfu_detach, - [DFU_DNLOAD] = dfu_dnload, - [DFU_UPLOAD] = dfu_upload, - [DFU_GETSTATUS] = dfu_getstatus, - [DFU_CLRSTATUS] = dfu_clrstatus, - [DFU_GETSTATE] = dfu_getstate, - [DFU_ABORT] = dfu_abort -}; - -/* note:it should use the c99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev dfu_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -/* USB device configuration descriptor */ -usb_dfu_desc_config_set dfu_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_DFU_CONFIG_DESC_SIZE, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0x80U, - .bMaxPower = 0x32U - }, - - .dfu_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x00U, - .bInterfaceClass = USB_DFU_CLASS, - .bInterfaceSubClass = USB_DFU_SUBCLASS_UPGRADE, - .bInterfaceProtocol = USB_DFU_PROTOCL_DFU, - .iInterface = 0x00U - }, - - .dfu_func = - { - .header = - { - .bLength = sizeof(usb_desc_dfu_func), - .bDescriptorType = DFU_DESC_TYPE - }, - .bmAttributes = USB_DFU_CAN_DOWNLOAD | USB_DFU_CAN_UPLOAD | USB_DFU_WILL_DETACH, - .wDetachTimeOut = 0x00FFU, - .wTransferSize = TRANSFER_SIZE, - .bcdDFUVersion = 0x011AU, - }, -}; - -/* USB language ID descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'D', 'F', 'U'} -}; - -/* USB serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(2U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB configure string */ -static usb_desc_str config_string = -{ - .header = - { - .bLength = USB_STRING_LEN(15U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', ' ', 'U', 'S', 'B', ' ', 'C', 'O', 'N', 'F', 'I', 'G'} -}; - -/* USB interface string */ -static usb_desc_str interface_string = -{ - .header = - { - .bLength = USB_STRING_LEN(15U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'@', 'I', 'n', 't', 'e', 'r', 'n', 'a', 'l', 'F', 'l', 'a', 's', 'h', ' ', '/', '0', 'x', '0', '8', '0', '0', - '0', '0', '0', '0', '/', '1', '6', '*', '0', '0', '1', 'K', 'a', ',', '4', '8', '*', '0', '0', '1', 'K', 'g'} -}; - -uint8_t* usbd_dfu_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string, - [STR_IDX_CONFIG] = (uint8_t *)&config_string, - [STR_IDX_ITF] = (uint8_t *)&interface_string -}; - -usb_desc dfu_desc = { - .dev_desc = (uint8_t *)&dfu_dev_desc, - .config_desc = (uint8_t *)&dfu_config_desc, - .strings = usbd_dfu_strings -}; - -usb_class dfu_class = { - .init = dfu_init, - .deinit = dfu_deinit, - .req_process = dfu_req_handler, - .ctlx_in = dfu_ctlx_in -}; - -/*! - \brief initialize the USB DFU device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t dfu_init (usb_dev *udev, uint8_t config_index) -{ - static usbd_dfu_handler dfu_handler; - - /* unlock the internal flash */ - fmc_unlock(); - - systick_config(); - - memset((void *)&dfu_handler, 0, sizeof(usbd_dfu_handler)); - - dfu_handler.base_addr = APP_LOADED_ADDR; - dfu_handler.manifest_state = MANIFEST_COMPLETE; - dfu_handler.bState = STATE_DFU_IDLE; - dfu_handler.bStatus = STATUS_OK; - - udev->class_data[USBD_DFU_INTERFACE] = (void *)&dfu_handler; - - return USBD_OK; -} - -/*! - \brief deinitialize the USB DFU device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t dfu_deinit (usb_dev *udev, uint8_t config_index) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - /* restore device default state */ - memset(udev->class_data[USBD_DFU_INTERFACE], 0, sizeof(usbd_dfu_handler)); - - dfu->bState = STATE_DFU_IDLE; - dfu->bStatus = STATUS_OK; - - /* lock the internal flash */ - fmc_lock(); - - return USBD_OK; -} - -/*! - \brief handle the USB DFU class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t dfu_req_handler (usb_dev *udev, usb_req *req) -{ - if (req->bRequest < DFU_REQ_MAX) { - dfu_request_process[req->bRequest](udev, req); - } else { - return USBD_FAIL; - } - - return USBD_OK; -} - -/*! - \brief handle data stage - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -static uint8_t dfu_ctlx_in (usb_dev *udev) -{ - dfu_getstatus_complete(udev); - - return USBD_OK; -} - -/*! - \brief handle data in stage in control endpoint 0 - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status - */ -static uint8_t dfu_getstatus_complete (usb_dev *udev) -{ - uint32_t addr; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - if (STATE_DFU_DNBUSY == dfu->bState) { - /* decode the special command */ - if (0U == dfu->block_num) { - if (1U == dfu->data_len){ - if (GET_COMMANDS == dfu->buf[0]) { - /* no operation */ - } - } else if (5U == dfu->data_len) { - if (SET_ADDRESS_POINTER == dfu->buf[0]) { - /* set flash operation address */ - dfu->base_addr = *(uint32_t *)(dfu->buf + 1U); - } else if (ERASE == dfu->buf[0]) { - dfu->base_addr = *(uint32_t *)(dfu->buf + 1U); - - fmc_page_erase(dfu->base_addr); - } else { - /* no operation */ - } - } else { - /* no operation */ - } - } else if (dfu->block_num > 1U) { /* regular download command */ - /* preform the write operation */ - uint32_t idx = 0U; - - /* decode the required address */ - addr = (dfu->block_num - 2U) * TRANSFER_SIZE + dfu->base_addr; - - if (dfu->data_len & 0x03U) { /* not an aligned data */ - for (idx = dfu->data_len; idx < ((dfu->data_len & 0xFFFCU) + 4U); idx++) { - dfu->buf[idx] = 0xFFU; - } - } - - /* data received are word multiple */ - for (idx = 0U; idx < dfu->data_len; idx += 4U) { - fmc_word_program(addr, *(uint32_t *)(dfu->buf + idx)); - - addr += 4U; - } - - dfu->block_num = 0U; - } else { - /* no operation */ - } - - dfu->data_len = 0U; - - /* update the device state and poll timeout */ - dfu->bState = STATE_DFU_DNLOAD_SYNC; - - return USBD_OK; - } else if (STATE_DFU_MANIFEST == dfu->bState) { /* manifestation in progress */ - /* start leaving DFU mode */ - dfu_mode_leave(udev); - } else { - /* no operation */ - } - - return USBD_OK; -} - -/*! - \brief handle the DFU_DETACH request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none. -*/ -static void dfu_detach(usb_dev *udev, usb_req *req) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - switch (dfu->bState) { - case STATE_DFU_IDLE: - case STATE_DFU_DNLOAD_SYNC: - case STATE_DFU_DNLOAD_IDLE: - case STATE_DFU_MANIFEST_SYNC: - case STATE_DFU_UPLOAD_IDLE: - dfu->bStatus = STATUS_OK; - dfu->bState = STATE_DFU_IDLE; - dfu->iString = 0U; /* iString */ - - dfu->block_num = 0U; - dfu->data_len = 0U; - break; - - default: - break; - } - - /* check the detach capability in the DFU functional descriptor */ - if (dfu_config_desc.dfu_func.wDetachTimeOut & DFU_DETACH_MASK) { - usbd_disconnect(udev); - - usbd_connect(udev); - } else { - /* wait for the period of time specified in detach request */ - delay_1ms(4U); - } -} - -/*! - \brief handle the DFU_DNLOAD request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_dnload(usb_dev *udev, usb_req *req) -{ - usb_transc *transc = &udev->transc_out[0]; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - switch (dfu->bState) { - case STATE_DFU_IDLE: - case STATE_DFU_DNLOAD_IDLE: - if (req->wLength > 0U) { - /* update the global length and block number */ - dfu->block_num = req->wValue; - dfu->data_len = req->wLength; - - dfu->bState = STATE_DFU_DNLOAD_SYNC; - - transc->xfer_len = dfu->data_len; - transc->xfer_buf = dfu->buf; - transc->xfer_count = 0U; - } else { - dfu->manifest_state = MANIFEST_IN_PROGRESS; - dfu->bState = STATE_DFU_MANIFEST_SYNC; - } - break; - - default: - break; - } -} - -/*! - \brief handles the DFU UPLOAD request. - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_upload (usb_dev *udev, usb_req *req) -{ - uint8_t *phy_addr = NULL; - uint32_t addr = 0U; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - if(req->wLength <= 0U) { - dfu->bState = STATE_DFU_IDLE; - - return; - } - - usb_transc *transc = &udev->transc_in[0]; - - switch (dfu->bState) { - case STATE_DFU_IDLE: - case STATE_DFU_UPLOAD_IDLE: - /* update the global length and block number */ - dfu->block_num = req->wValue; - dfu->data_len = req->wLength; - - /* DFU get command */ - if (0U == dfu->block_num) { - /* update the state machine */ - dfu->bState = (dfu->data_len > 3U) ? STATE_DFU_IDLE : STATE_DFU_UPLOAD_IDLE; - - /* store the values of all supported commands */ - dfu->buf[0] = GET_COMMANDS; - dfu->buf[1] = SET_ADDRESS_POINTER; - dfu->buf[2] = ERASE; - - /* send the status data over EP0 */ - transc->xfer_buf = &(dfu->buf[0]); - transc->xfer_len = 3U; - } else if (dfu->block_num > 1U) { - dfu->bState = STATE_DFU_UPLOAD_IDLE; - - /* change is accelerated */ - addr = (dfu->block_num - 2U) * TRANSFER_SIZE + dfu->base_addr; - - /* return the physical address where data are stored */ - phy_addr = (uint8_t *)(addr); - - /* send the status data over EP0 */ - transc->xfer_buf = phy_addr; - transc->xfer_len = dfu->data_len; - } else { - dfu->bState = STATUS_ERR_STALLEDPKT; - } - break; - - default: - dfu->data_len = 0U; - dfu->block_num = 0U; - break; - } -} - -/*! - \brief handle the DFU_GETSTATUS request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_getstatus (usb_dev *udev, usb_req *req) -{ - usb_transc *transc = &udev->transc_in[0]; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - switch (dfu->bState) { - case STATE_DFU_DNLOAD_SYNC: - if (0U != dfu->data_len) { - dfu->bState = STATE_DFU_DNBUSY; - - if (0U == dfu->block_num) { - if (ERASE == dfu->buf[0]) { - SET_POLLING_TIMEOUT(FLASH_ERASE_TIMEOUT); - } else { - SET_POLLING_TIMEOUT(FLASH_WRITE_TIMEOUT); - } - } - } else { - dfu->bState = STATE_DFU_DNLOAD_IDLE; - } - break; - - case STATE_DFU_MANIFEST_SYNC: - if (MANIFEST_IN_PROGRESS == dfu->manifest_state) { - dfu->bState = STATE_DFU_MANIFEST; - dfu->bwPollTimeout0 = 1U; - } else if ((MANIFEST_COMPLETE == dfu->manifest_state) && \ - (dfu_config_desc.dfu_func.bmAttributes & 0x04U)){ - dfu->bState = STATE_DFU_IDLE; - dfu->bwPollTimeout0 = 0U; - } else { - /* no operation */ - } - break; - - default: - break; - } - - /* send the status data of DFU interface to host over EP0 */ - transc->xfer_buf = (uint8_t *)&(dfu->bStatus); - transc->xfer_len = 6U; -} - -/*! - \brief handle the DFU_CLRSTATUS request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_clrstatus (usb_dev *udev, usb_req *req) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - if (STATE_DFU_ERROR == dfu->bState) { - dfu->bStatus = STATUS_OK; - dfu->bState = STATE_DFU_IDLE; - } else { - /* state error */ - dfu->bStatus = STATUS_ERR_UNKNOWN; - dfu->bState = STATE_DFU_ERROR; - } - - dfu->iString = 0U; /* iString: index = 0 */ -} - -/*! - \brief handle the DFU_GETSTATE request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_getstate (usb_dev *udev, usb_req *req) -{ - usb_transc *transc = &udev->transc_in[0]; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - /* send the current state of the DFU interface to host */ - transc->xfer_buf = &(dfu->bState); - transc->xfer_len = 1U; -} - -/*! - \brief handle the DFU_ABORT request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_abort (usb_dev *udev, usb_req *req) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - switch (dfu->bState){ - case STATE_DFU_IDLE: - case STATE_DFU_DNLOAD_SYNC: - case STATE_DFU_DNLOAD_IDLE: - case STATE_DFU_MANIFEST_SYNC: - case STATE_DFU_UPLOAD_IDLE: - dfu->bStatus = STATUS_OK; - dfu->bState = STATE_DFU_IDLE; - dfu->iString = 0U; /* iString: index = 0 */ - - dfu->block_num = 0U; - dfu->data_len = 0U; - break; - - default: - break; - } -} - -/*! - \brief leave DFU mode and reset device to jump to user loaded code - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void dfu_mode_leave (usb_dev *udev) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - dfu->manifest_state = MANIFEST_COMPLETE; - - if (dfu_config_desc.dfu_func.bmAttributes & 0x04U) { - dfu->bState = STATE_DFU_MANIFEST_SYNC; - } else { - dfu->bState = STATE_DFU_MANIFEST_WAIT_RESET; - - /* lock the internal flash */ - fmc_lock(); - - /* generate system reset to allow jumping to the user code */ - NVIC_SystemReset(); - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/custom_hid_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/custom_hid_core.h deleted file mode 100644 index 382e4f6..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/custom_hid_core.h +++ /dev/null @@ -1,67 +0,0 @@ -/*! - \file custom_hid_core.h - \brief definitions for HID core - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __CUSTOM_HID_CORE_H -#define __CUSTOM_HID_CORE_H - -#include "usbd_enum.h" -#include "usb_hid.h" - -#define DESC_LEN_REPORT 96U -#define DESC_LEN_CONFIG 41U - -#define MAX_PERIPH_NUM 4U - -typedef struct { - uint8_t data[2]; - - uint8_t reportID; - uint8_t idlestate; - uint8_t protocol; -} custom_hid_handler; - -typedef struct { - void (*periph_config[MAX_PERIPH_NUM])(void); -} hid_fop_handler; - -extern usb_desc custom_hid_desc; -extern usb_class custom_hid_class; - -/* function declarations */ -/* register HID interface operation functions */ -uint8_t custom_hid_itfop_register (usb_dev *udev, hid_fop_handler *hid_fop); -/* send custom HID report */ -uint8_t custom_hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len); - -#endif /* __CUSTOM_HID_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/standard_hid_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/standard_hid_core.h deleted file mode 100644 index a509936..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/standard_hid_core.h +++ /dev/null @@ -1,66 +0,0 @@ -/*! - \file standard_hid_core.h - \brief definitions for HID core - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __STANDARD_HID_CORE_H -#define __STANDARD_HID_CORE_H - -#include "usbd_enum.h" -#include "usb_hid.h" - -#define USB_HID_CONFIG_DESC_LEN 0x22U -#define USB_HID_REPORT_DESC_LEN 0x2EU - -typedef struct { - uint32_t protocol; - uint32_t idle_state; - - uint8_t data[HID_IN_PACKET]; - __IO uint8_t prev_transfer_complete; -} standard_hid_handler; - -typedef struct { - void (*hid_itf_config) (void); - void (*hid_itf_data_process) (usb_dev *udev); -} hid_fop_handler; - -extern usb_desc hid_desc; -extern usb_class hid_class; - -/* function declarations */ -/* register HID interface operation functions */ -uint8_t hid_itfop_register (usb_dev *udev, hid_fop_handler *hid_fop); -/* send HID report */ -uint8_t hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len); - -#endif /* __STANDARD_HID_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/usb_hid.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/usb_hid.h deleted file mode 100644 index 7e6d407..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Include/usb_hid.h +++ /dev/null @@ -1,83 +0,0 @@ -/*! - \file usb_hid.h - \brief definitions for the USB HID class - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USB_HID_H -#define __USB_HID_H - -#include "usb_ch9_std.h" - -#define USB_HID_CLASS 0x03U - -#define USB_DESCTYPE_HID 0x21U -#define USB_DESCTYPE_REPORT 0x22U - -/* HID subclass code */ -#define USB_HID_SUBCLASS_BOOT_ITF 0x01U - -/* HID protocol codes */ -#define USB_HID_PROTOCOL_KEYBOARD 0x01U -#define USB_HID_PROTOCOL_MOUSE 0x02U - -#define GET_REPORT 0x01U -#define GET_IDLE 0x02U -#define GET_PROTOCOL 0x03U -#define SET_REPORT 0x09U -#define SET_IDLE 0x0AU -#define SET_PROTOCOL 0x0BU - -#pragma pack(1) - -typedef struct -{ - usb_desc_header header; /*!< regular descriptor header containing the descriptor's type and length */ - - uint16_t bcdHID; /*!< BCD encoded version that the HID descriptor and device complies to */ - uint8_t bCountryCode; /*!< country code of the localized device, or zero if universal */ - uint8_t bNumDescriptors; /*!< total number of HID report descriptors for the interface */ - uint8_t bDescriptorType; /*!< type of HID report */ - uint16_t wDescriptorLength; /*!< length of the associated HID report descriptor, in bytes */ -} usb_desc_hid; - -#pragma pack() - -typedef struct -{ - usb_desc_config config; - usb_desc_itf hid_itf; - usb_desc_hid hid_vendor; - usb_desc_ep hid_epin; - usb_desc_ep hid_epout; -} usb_hid_desc_config_set; - -#endif /* __USB_HID_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Source/custom_hid_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Source/custom_hid_core.c deleted file mode 100644 index 4e24bf9..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Source/custom_hid_core.c +++ /dev/null @@ -1,510 +0,0 @@ -/*! - \file custom_hid_core.c - \brief custom HID class driver - - \version 2020-07-17, V3.0.0, firmware for GD32F10x - \version 2021-06-22, V3.0.1, firmware for GD32F10x - \version 2021-11-09, V3.0.2, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "custom_hid_core.h" -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x128AU - -/* Note:it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev custom_hid_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV, - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM, -}; - -/* USB device configure descriptor */ -usb_hid_desc_config_set custom_hid_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = DESC_LEN_CONFIG, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0x80U, - .bMaxPower = 0x32U - }, - - .hid_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_HID_CLASS, - .bInterfaceSubClass = 0x00U, - .bInterfaceProtocol = 0x00U, - .iInterface = 0x00U - }, - - .hid_vendor = - { - .header = - { - .bLength = sizeof(usb_desc_hid), - .bDescriptorType = USB_DESCTYPE_HID - }, - .bcdHID = 0x0111U, - .bCountryCode = 0x00U, - .bNumDescriptors = 0x01U, - .bDescriptorType = USB_DESCTYPE_REPORT, - .wDescriptorLength = DESC_LEN_REPORT, - }, - - .hid_epin = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = CUSTOMHID_IN_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = CUSTOMHID_IN_PACKET, - .bInterval = 0x20U - }, - - .hid_epout = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = CUSTOMHID_OUT_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = CUSTOMHID_OUT_PACKET, - .bInterval = 0x20U - } -}; - -/* USB language ID descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(14U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'C', 'u', 's', 't', 'o', 'm', 'H', 'I', 'D'} -}; - -/* USB serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor set */ -static uint8_t* usbd_hid_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc custom_hid_desc = { - .dev_desc = (uint8_t *)&custom_hid_dev_desc, - .config_desc = (uint8_t *)&custom_hid_config_desc, - .strings = usbd_hid_strings -}; - -/* local function prototypes ('static') */ -static uint8_t custom_hid_init (usb_dev *udev, uint8_t config_index); -static uint8_t custom_hid_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t custom_hid_req_handler (usb_dev *udev, usb_req *req); -static void custom_hid_data_in (usb_dev *udev, uint8_t ep_num); -static void custom_hid_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class custom_hid_class = { - .req_cmd = 0xFFU, - - .init = custom_hid_init, - .deinit = custom_hid_deinit, - .req_process = custom_hid_req_handler, - .data_in = custom_hid_data_in, - .data_out = custom_hid_data_out -}; - -const uint8_t customhid_report_descriptor[DESC_LEN_REPORT] = -{ - 0x06, 0x00, 0xFF, /* USAGE_PAGE (Vendor Defined: 0xFF00) */ - 0x09, 0x00, /* USAGE (Custom Device) */ - 0xa1, 0x01, /* COLLECTION (Application) */ - - /* led 1 */ - 0x85, 0x11, /* REPORT_ID (0x11) */ - 0x09, 0x01, /* USAGE (LED 1) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* led 2 */ - 0x85, 0x12, /* REPORT_ID (0x12) */ - 0x09, 0x02, /* USAGE (LED 2) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* led 3 */ - 0x85, 0x13, /* REPORT_ID (0x13) */ - 0x09, 0x03, /* USAGE (LED 3) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* led 4 */ - 0x85, 0x14, /* REPORT_ID (0x14) */ - 0x09, 0x04, /* USAGE (LED 4) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* wakeup key */ - 0x85, 0x15, /* REPORT_ID (0x15) */ - 0x09, 0x05, /* USAGE (Push Button) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x01, /* REPORT_SIZE (1) */ - 0x81, 0x02, /* INPUT (Data,Var,Abs,Vol) */ - - 0x75, 0x07, /* REPORT_SIZE (7) */ - 0x81, 0x03, /* INPUT (Cnst,Var,Abs,Vol) */ - - /* tamper key */ - 0x85, 0x16, /* REPORT_ID (0x16) */ - 0x09, 0x06, /* USAGE (Push Button) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x01, /* REPORT_SIZE (1) */ - 0x81, 0x02, /* INPUT (Data,Var,Abs,Vol) */ - - 0x75, 0x07, /* REPORT_SIZE (7) */ - 0x81, 0x03, /* INPUT (Cnst,Var,Abs,Vol) */ - - 0xc0 /* END_COLLECTION */ -}; - -/*! - \brief register HID interface operation functions - \param[in] udev: pointer to USB device instance - \param[in] hid_fop: HID operation functions structure - \param[out] none - \retval USB device operation status -*/ -uint8_t custom_hid_itfop_register (usb_dev *udev, hid_fop_handler *hid_fop) -{ - if (NULL != hid_fop) { - udev->user_data = hid_fop; - - return USBD_OK; - } - - return USBD_FAIL; -} - -/*! - \brief send custom HID report - \param[in] udev: pointer to USB device instance - \param[in] report: pointer to HID report - \param[in] len: data length - \param[out] none - \retval USB device operation status -*/ -uint8_t custom_hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len) -{ - usbd_ep_send (udev, CUSTOMHID_IN_EP, report, len); - - return USBD_OK; -} - -/*! - \brief initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t custom_hid_init (usb_dev *udev, uint8_t config_index) -{ - static custom_hid_handler hid_handler; - - memset((void *)&hid_handler, 0, sizeof(custom_hid_handler)); - - /* initialize the data endpoints */ - usbd_ep_init(udev, EP_BUF_SNG, HID_TX_ADDR, &(custom_hid_config_desc.hid_epin)); - usbd_ep_init(udev, EP_BUF_SNG, HID_RX_ADDR, &(custom_hid_config_desc.hid_epout)); - - usbd_ep_recev (udev, CUSTOMHID_OUT_EP, hid_handler.data, 2U); - - udev->ep_transc[EP_ID(CUSTOMHID_IN_EP)][TRANSC_IN] = custom_hid_class.data_in; - udev->ep_transc[EP_ID(CUSTOMHID_OUT_EP)][TRANSC_OUT] = custom_hid_class.data_out; - - udev->class_data[CUSTOM_HID_INTERFACE] = (void *)&hid_handler; - - if (udev->user_data != NULL) { - for (uint8_t i = 0U; i < MAX_PERIPH_NUM; i++) { - if (((hid_fop_handler *)udev->user_data)->periph_config[i] != NULL) { - ((hid_fop_handler *)udev->user_data)->periph_config[i](); - } - } - } - - return USBD_OK; -} - -/*! - \brief de-initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t custom_hid_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize HID endpoints */ - usbd_ep_deinit(udev, CUSTOMHID_IN_EP); - usbd_ep_deinit(udev, CUSTOMHID_OUT_EP); - - return USBD_OK; -} - -/*! - \brief handle the HID class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t custom_hid_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - custom_hid_handler *hid = (custom_hid_handler *)udev->class_data[CUSTOM_HID_INTERFACE]; - - switch (req->bRequest) { - case USB_GET_DESCRIPTOR: - if (USB_DESCTYPE_REPORT == (req->wValue >> 8)) { - usb_transc_config(&udev->transc_in[0], - (uint8_t *)customhid_report_descriptor, - USB_MIN(DESC_LEN_REPORT, req->wLength), - 0U); - - status = REQ_SUPP; - } else if (USB_DESCTYPE_HID == (req->wValue >> 8U)) { - usb_transc_config(&udev->transc_in[0U], - (uint8_t *)(&(custom_hid_config_desc.hid_vendor)), - USB_MIN(9U, req->wLength), - 0U); - } - break; - - case GET_REPORT: - if (2U == req->wLength) { - usb_transc_config(&udev->transc_in[0], hid->data, 2U, 0U); - - status = REQ_SUPP; - } - break; - - case GET_IDLE: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&hid->idlestate, 1U, 0U); - - status = REQ_SUPP; - break; - - case GET_PROTOCOL: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&hid->protocol, 1U, 0U); - - status = REQ_SUPP; - break; - - case SET_REPORT: - hid->reportID = (uint8_t)(req->wValue); - - usb_transc_config(&udev->transc_out[0], hid->data, req->wLength, 0U); - - status = REQ_SUPP; - break; - - case SET_IDLE: - hid->idlestate = (uint8_t)(req->wValue >> 8); - - status = REQ_SUPP; - break; - - case SET_PROTOCOL: - hid->protocol = (uint8_t)(req->wValue); - - status = REQ_SUPP; - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle custom HID data in transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void custom_hid_data_in (usb_dev *udev, uint8_t ep_num) -{ - return; -} - -/*! - \brief handle custom HID data out transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void custom_hid_data_out (usb_dev *udev, uint8_t ep_num) -{ - custom_hid_handler *hid = (custom_hid_handler *)udev->class_data[CUSTOM_HID_INTERFACE]; - - if (CUSTOMHID_OUT_EP == ep_num){ - switch (hid->data[0]){ - case 0x11: - if (RESET != hid->data[1]) { - /* turn on led5 */ - gd_eval_led_on(LED5); - } else { - gd_eval_led_off(LED5); - } - break; - case 0x12: - if (RESET != hid->data[1]) { - gd_eval_led_on(LED2); - } else { - gd_eval_led_off(LED2); - } - break; - case 0x13: - if (RESET != hid->data[1]) { - gd_eval_led_on(LED3); - } else { - gd_eval_led_off(LED3); - } - break; - case 0x14: - if (RESET != hid->data[1]) { - gd_eval_led_on(LED4); - } else { - gd_eval_led_off(LED4); - } - break; - default: - /* turn off all leds */ - gd_eval_led_off(LED2); - gd_eval_led_off(LED3); - gd_eval_led_off(LED4); - gd_eval_led_off(LED5); - break; - } - - usbd_ep_recev(udev, CUSTOMHID_OUT_EP, hid->data, 2U); - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Source/standard_hid_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Source/standard_hid_core.c deleted file mode 100644 index e66a30d..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/hid/Source/standard_hid_core.c +++ /dev/null @@ -1,427 +0,0 @@ -/*! - \file standard_hid_core.c - \brief HID class driver - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "standard_hid_core.h" -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x0380U - -/* Note:it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev hid_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, -#ifdef LPM_ENABLED - .bcdUSB = 0x0201U, -#else - .bcdUSB = 0x0200U, -#endif /* LPM_ENABLED */ - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -#ifdef LPM_ENABLED - -/* BOS descriptor */ -uint8_t USBD_BOSDesc[USB_BOS_DESC_LEN] = -{ - 0x05, - USB_DESCTYPE_BOS, - 0x0C, - 0x00, - 0x01, /* 1 device capability descriptor */ - - /* device capability*/ - 0x07, - USB_DEVICE_CAPABITY, - 0x02, - 0x06, /* LPM capability bit set */ - 0x00, - 0x00, - 0x00 -}; - -#endif /* LPM_ENABLED */ - -usb_hid_desc_config_set hid_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_HID_CONFIG_DESC_LEN, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0xA0U, - .bMaxPower = 0x32U - }, - - .hid_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x01U, - .bInterfaceClass = USB_HID_CLASS, - .bInterfaceSubClass = USB_HID_SUBCLASS_BOOT_ITF, - .bInterfaceProtocol = USB_HID_PROTOCOL_KEYBOARD, - .iInterface = 0x00U - }, - - .hid_vendor = - { - .header = - { - .bLength = sizeof(usb_desc_hid), - .bDescriptorType = USB_DESCTYPE_HID - }, - .bcdHID = 0x0111U, - .bCountryCode = 0x00U, - .bNumDescriptors = 0x01U, - .bDescriptorType = USB_DESCTYPE_REPORT, - .wDescriptorLength = USB_HID_REPORT_DESC_LEN, - }, - - .hid_epin = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = HID_IN_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = HID_IN_PACKET, - .bInterval = 0x40U - } -}; - -/* USB language ID Descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(17U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'K', 'e', 'y', 'b', 'o', 'a', 'r', 'd'} -}; - -/* USB serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor set */ -static uint8_t* usbd_hid_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc hid_desc = { -#ifdef LPM_ENABLED - .bos_desc = (uint8_t *)&USBD_BOSDesc, -#endif /* LPM_ENABLED */ - .dev_desc = (uint8_t *)&hid_dev_desc, - .config_desc = (uint8_t *)&hid_config_desc, - .strings = usbd_hid_strings -}; - -/* local function prototypes ('static') */ -static uint8_t hid_init (usb_dev *udev, uint8_t config_index); -static uint8_t hid_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t hid_req_handler (usb_dev *udev, usb_req *req); -static void hid_data_in_handler (usb_dev *udev, uint8_t ep_num); - -usb_class hid_class = { - .init = hid_init, - .deinit = hid_deinit, - .req_process = hid_req_handler, - .data_in = hid_data_in_handler -}; - -const uint8_t hid_report_desc[USB_HID_REPORT_DESC_LEN] = -{ - 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ - 0x09, 0x06, /* USAGE (Keyboard) */ - 0xa1, 0x01, /* COLLECTION (Application) */ - - 0x05, 0x07, /* USAGE_PAGE (Keyboard/Keypad) */ - 0x19, 0xe0, /* USAGE_MINIMUM (Keyboard LeftControl) */ - 0x29, 0xe7, /* USAGE_MAXIMUM (Keyboard Right GUI) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x95, 0x08, /* REPORT_COUNT (8) */ - 0x75, 0x01, /* REPORT_SIZE (1) */ - 0x81, 0x02, /* INPUT (Data,Var,Abs) */ - - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x81, 0x03, /* INPUT (Cnst,Var,Abs) */ - - 0x95, 0x06, /* REPORT_COUNT (6) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x26, 0xFF, 0x00, /* LOGICAL_MAXIMUM (255) */ - 0x05, 0x07, /* USAGE_PAGE (Keyboard/Keypad) */ - 0x19, 0x00, /* USAGE_MINIMUM (Reserved (no event indicated)) */ - 0x29, 0x65, /* USAGE_MAXIMUM (Keyboard Application) */ - 0x81, 0x00, /* INPUT (Data,Ary,Abs) */ - - 0xc0 /* END_COLLECTION */ -}; - -/*! - \brief register HID interface operation functions - \param[in] udev: pointer to USB device instance - \param[in] hid_fop: HID operation functions structure - \param[out] none - \retval USB device operation status -*/ -uint8_t hid_itfop_register (usb_dev *udev, hid_fop_handler *hid_fop) -{ - if (NULL != hid_fop) { - udev->user_data = (void *)hid_fop; - - return USBD_OK; - } - - return USBD_FAIL; -} - -/*! - \brief send HID report - \param[in] udev: pointer to USB device instance - \param[in] report: pointer to HID report - \param[in] len: data length - \param[out] none - \retval USB device operation status -*/ -uint8_t hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len) -{ - standard_hid_handler *hid = (standard_hid_handler *)udev->class_data[USBD_HID_INTERFACE]; - - /* check if USB is configured */ - hid->prev_transfer_complete = 0U; - - usbd_ep_send(udev, HID_IN_EP, report, len); - - return USBD_OK; -} - -/*! - \brief initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t hid_init (usb_dev *udev, uint8_t config_index) -{ - static standard_hid_handler hid_handler; - - memset((void *)&hid_handler, 0, sizeof(standard_hid_handler)); - - /* initialize TX endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, INT_TX_ADDR, &(hid_config_desc.hid_epin)); - - udev->ep_transc[EP_ID(HID_IN_EP)][TRANSC_IN] = hid_class.data_in; - - hid_handler.prev_transfer_complete = 1U; - - udev->class_data[USBD_HID_INTERFACE] = (void *)&hid_handler; - - if (NULL != udev->user_data) { - ((hid_fop_handler *)udev->user_data)->hid_itf_config(); - } - - return USBD_OK; -} - -/*! - \brief deinitialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t hid_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize HID endpoints */ - usbd_ep_deinit (udev, HID_IN_EP); - - return USBD_OK; -} - -/*! - \brief handle the HID class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t hid_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - standard_hid_handler *hid = (standard_hid_handler *)udev->class_data[USBD_HID_INTERFACE]; - - switch (req->bRequest) { - case GET_REPORT: - /* no use for this driver */ - break; - - case GET_IDLE: - usb_transc_config(&udev->transc_in[0U], (uint8_t *)&hid->idle_state, 1U, 0U); - - status = REQ_SUPP; - break; - - case GET_PROTOCOL: - usb_transc_config(&udev->transc_in[0U], (uint8_t *)&hid->protocol, 1U, 0U); - - status = REQ_SUPP; - break; - - case SET_REPORT: - /* no use for this driver */ - break; - - case SET_IDLE: - hid->idle_state = (uint8_t)(req->wValue >> 8); - - status = REQ_SUPP; - break; - - case SET_PROTOCOL: - hid->protocol = (uint8_t)(req->wValue); - - status = REQ_SUPP; - break; - - case USB_GET_DESCRIPTOR: - if (USB_DESCTYPE_REPORT == (req->wValue >> 8)) { - usb_transc_config(&udev->transc_in[0U], - (uint8_t *)hid_report_desc, - USB_MIN(USB_HID_REPORT_DESC_LEN, req->wLength), - 0U); - - status = REQ_SUPP; - } else if (USB_DESCTYPE_HID == (req->wValue >> 8U)) { - usb_transc_config(&udev->transc_in[0U], - (uint8_t *)(&(hid_config_desc.hid_vendor)), - USB_MIN(9U, req->wLength), - 0U); - } - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle data stage in DATA IN transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint identifier - \param[out] none - \retval none -*/ -static void hid_data_in_handler (usb_dev *udev, uint8_t ep_num) -{ - standard_hid_handler *hid = (standard_hid_handler *)udev->class_data[USBD_HID_INTERFACE]; - - if (hid->data[2]) { - hid->data[2] = 0x00U; - - usbd_ep_send(udev, HID_IN_EP, hid->data, HID_IN_PACKET); - } else { - hid->prev_transfer_complete = 1U; - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/iap/Include/usb_iap_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/iap/Include/usb_iap_core.h deleted file mode 100644 index a8b66c8..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/iap/Include/usb_iap_core.h +++ /dev/null @@ -1,82 +0,0 @@ -/*! - \file usb_iap_core.h - \brief the header file of IAP driver - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USB_IAP_CORE_H -#define __USB_IAP_CORE_H - -#include "usbd_enum.h" -#include "usb_hid.h" - -#define USB_DESC_LEN_IAP_REPORT 35U -#define USB_DESC_LEN_IAP_CONFIG_SET 41U - -/* special commands with download request */ -#define IAP_OPTION_BYTE 0x01U -#define IAP_ERASE 0x02U -#define IAP_DNLOAD 0x03U -#define IAP_LEAVE 0x04U -#define IAP_GETBIN_ADDRESS 0x05U - -typedef void (*app_func) (void); - -typedef struct -{ - uint8_t report_buf[IAP_OUT_PACKET + 1U]; - uint8_t option_byte[IAP_IN_PACKET]; - - /* state machine variables */ - uint8_t dev_status[IAP_IN_PACKET]; - uint8_t bin_addr[IAP_IN_PACKET]; - - uint8_t reportID; - uint8_t flag; - - uint32_t protocol; - uint32_t idlestate; - - uint16_t transfer_times; - uint16_t page_count; - uint16_t lps; /* last packet size */ - uint32_t file_length; - uint32_t base_address; -} usbd_iap_handler; - -extern usb_desc iap_desc; -extern usb_class iap_class; - -/* function declarations */ -/* send IAP report */ -uint8_t iap_report_send(usb_dev *udev, uint8_t *report, uint16_t len); - -#endif /* __USB_IAP_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/iap/Source/usb_iap_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/iap/Source/usb_iap_core.c deleted file mode 100644 index 3a494c6..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/iap/Source/usb_iap_core.c +++ /dev/null @@ -1,596 +0,0 @@ -/*! - \file usb_iap_core.c - \brief IAP driver - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "usb_iap_core.h" -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x028BU - -/* Note:it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev iap_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -/* USB device configure descriptor */ -usb_hid_desc_config_set iap_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_DESC_LEN_IAP_CONFIG_SET, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0x80U, - .bMaxPower = 0x32U - }, - - .hid_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_HID_CLASS, - .bInterfaceSubClass = 0x00U, - .bInterfaceProtocol = 0x01U, - .iInterface = 0x00U - }, - - .hid_vendor = - { - .header = - { - .bLength = sizeof(usb_desc_hid), - .bDescriptorType = USB_DESCTYPE_HID - }, - .bcdHID = 0x0111U, - .bCountryCode = 0x00U, - .bNumDescriptors = 0x01U, - .bDescriptorType = USB_DESCTYPE_REPORT, - .wDescriptorLength = USB_DESC_LEN_IAP_REPORT, - }, - - .hid_epin = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = IAP_IN_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = IAP_IN_PACKET, - .bInterval = 0x01U - }, - - .hid_epout = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = IAP_OUT_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = IAP_OUT_PACKET, - .bInterval = 0x01U - } -}; - -/* USB language ID Descriptor */ -usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'I', 'A', 'P'} -}; - -/* USB serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(2U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor set */ -uint8_t* usbd_iap_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc iap_desc = { - .dev_desc = (uint8_t *)&iap_dev_desc, - .config_desc = (uint8_t *)&iap_config_desc, - .strings = usbd_iap_strings -}; - -/* local function prototypes ('static') */ -static uint8_t iap_init (usb_dev *udev, uint8_t config_index); -static uint8_t iap_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t iap_req_handler (usb_dev *udev, usb_req *req); -static void iap_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class iap_class = { - .init = iap_init, - .deinit = iap_deinit, - .req_process = iap_req_handler, - .data_out = iap_data_out -}; - -/* USB custom HID device report descriptor */ -const uint8_t iap_report_desc[USB_DESC_LEN_IAP_REPORT] = -{ - 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ - 0x09, 0x00, /* USAGE (Custom Device) */ - 0xa1, 0x01, /* COLLECTION (Application) */ - - /* IAP command and data */ - 0x85, 0x01, /* REPORT_ID (0x01) */ - 0x09, 0x01, /* USAGE (IAP command) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0xff, /* LOGICAL_MAXIMUM (255) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x3f, /* REPORT_COUNT (63) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* device status and option byte */ - 0x85, 0x02, /* REPORT_ID (0x02) */ - 0x09, 0x02, /* USAGE (Status and option byte) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0xff, /* LOGICAL_MAXIMUM (255) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x10, /* REPORT_COUNT (16) */ - 0x81, 0x82, /* INPUT (Data,Var,Abs,Vol) */ - - 0xc0 /* END_COLLECTION */ -}; - -/* IAP requests management functions */ -static void iap_req_erase (usb_dev *udev); -static void iap_req_dnload (usb_dev *udev); -static void iap_req_optionbyte(usb_dev *udev); -static void iap_req_leave (usb_dev *udev); -static void iap_address_send (usb_dev *udev); -static void iap_data_write (uint8_t *data, uint32_t addr, uint32_t len); - -/*! - \brief initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t iap_init (usb_dev *udev, uint8_t config_index) -{ - static usbd_iap_handler iap_handler; - - /* initialize TX endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, INT_TX_ADDR, &(iap_config_desc.hid_epin)); - - /* initialize RX endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, INT_RX_ADDR, &(iap_config_desc.hid_epout)); - - /* unlock the internal flash */ - fmc_unlock(); - - memset((void *)&iap_handler, 0, sizeof(usbd_iap_handler)); - - /* prepare receive Data */ - usbd_ep_recev(udev, IAP_OUT_EP, iap_handler.report_buf, IAP_OUT_PACKET); - - udev->ep_transc[EP_ID(IAP_OUT_EP)][TRANSC_OUT] = iap_class.data_out; - - iap_handler.base_address = APP_LOADED_ADDR; - - udev->class_data[USBD_IAP_INTERFACE] = (void *)&iap_handler; - - return USBD_OK; -} - -/*! - \brief deinitialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t iap_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize HID endpoints */ - usbd_ep_deinit (udev, IAP_IN_EP); - usbd_ep_deinit (udev, IAP_OUT_EP); - - /* lock the internal flash */ - fmc_lock(); - - return USBD_OK; -} - -/*! - \brief handle the HID class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t iap_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - switch (req->bRequest) { - case GET_REPORT: - /* no use for this driver */ - break; - - case GET_IDLE: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&iap->idlestate, 1U, 0U); - - status = REQ_SUPP; - break; - - case GET_PROTOCOL: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&iap->protocol, 1U, 0U); - - status = REQ_SUPP; - break; - - case SET_REPORT: - iap->reportID = (uint8_t)(req->wValue); - - usb_transc_config(&udev->transc_out[0], iap->report_buf, req->wLength, 0U); - - status = REQ_SUPP; - break; - - case SET_IDLE: - iap->idlestate = (uint8_t)(req->wValue >> 8); - - status = REQ_SUPP; - break; - - case SET_PROTOCOL: - iap->protocol = (uint8_t)(req->wValue); - - status = REQ_SUPP; - break; - - case USB_GET_DESCRIPTOR: - if (USB_DESCTYPE_REPORT == (req->wValue >> 8)) { - usb_transc_config(&udev->transc_in[0], - (uint8_t *)iap_report_desc, - USB_MIN(USB_DESC_LEN_IAP_REPORT, req->wLength), - 0U); - - return REQ_SUPP; - } - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle data out stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void iap_data_out (usb_dev *udev ,uint8_t ep_num) -{ - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - if (0x01U == iap->report_buf[0]) { - switch(iap->report_buf[1]) { - case IAP_DNLOAD: - iap_req_dnload(udev); - break; - - case IAP_ERASE: - iap_req_erase(udev); - break; - - case IAP_OPTION_BYTE: - iap_req_optionbyte(udev); - break; - - case IAP_LEAVE: - iap_req_leave(udev); - break; - - case IAP_GETBIN_ADDRESS: - iap_address_send(udev); - break; - - default: - break; - } - } - - usbd_ep_recev(udev, IAP_OUT_EP, iap->report_buf, IAP_OUT_PACKET); -} - -/*! - \brief send IAP report - \param[in] udev: pointer to USB device instance - \param[in] report: pointer to HID report - \param[in] len: data length - \param[out] none - \retval USB device operation status -*/ -uint8_t iap_report_send (usb_dev *udev, uint8_t *report, uint16_t len) -{ - usbd_ep_send (udev, IAP_IN_EP, report, len); - - return USBD_OK; -} - -/*! - \brief handle the IAP_DNLOAD request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_req_dnload (usb_dev *udev) -{ - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - if (0U != iap->transfer_times) { - if (1U == iap->transfer_times) { - if (0U == iap->lps) { - iap_data_write(&iap->report_buf[2], iap->base_address, TRANSFER_SIZE); - } else { - iap_data_write(&iap->report_buf[2], iap->base_address, iap->file_length % TRANSFER_SIZE); - iap->lps = 0U; - } - - iap->dev_status[0] = 0x02U; - iap->dev_status[1] = 0x02U; - iap_report_send (udev, iap->dev_status, IAP_IN_PACKET); - } else { - iap_data_write(&iap->report_buf[2], iap->base_address, TRANSFER_SIZE); - - iap->base_address += TRANSFER_SIZE; - } - - iap->transfer_times--; - } -} - -/*! - \brief handle the IAP_ERASE request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_req_erase (usb_dev *udev) -{ - uint32_t i, addr = 0U; - - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - /* get base address to erase */ - iap->base_address = iap->report_buf[2]; - iap->base_address |= (uint32_t)iap->report_buf[3] << 8; - iap->base_address |= (uint32_t)iap->report_buf[4] << 16; - iap->base_address |= (uint32_t)iap->report_buf[5] << 24; - - iap->page_count = iap->report_buf[6]; - - /* get file length */ - iap->file_length = iap->report_buf[7]; - iap->file_length |= (uint32_t)iap->report_buf[8] << 8; - iap->file_length |= (uint32_t)iap->report_buf[9] << 16; - iap->file_length |= (uint32_t)iap->report_buf[10] << 24; - - /* compute last packet size and transfer times */ - iap->lps = iap->file_length % TRANSFER_SIZE; - if (0U == iap->lps) { - iap->transfer_times = (uint16_t)iap->file_length / TRANSFER_SIZE; - } else { - iap->transfer_times = (uint16_t)iap->file_length / TRANSFER_SIZE + 1U; - } - - /* check if the address is in protected area */ - if (IS_PROTECTED_AREA(iap->base_address)) { - return; - } - - addr = iap->base_address; - - for (i = 0U; i < iap->page_count; i ++) { - /* call the standard flash erase-page function */ - fmc_page_erase(addr); - - addr += PAGE_SIZE; - } - - iap->dev_status[0] = 0x02U; - iap->dev_status[1] = 0x01U; - - usbd_ep_send(udev, IAP_IN_EP, iap->dev_status, IAP_IN_PACKET); -} - -/*! - \brief handle the IAP_OPTION_BYTE request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_req_optionbyte (usb_dev *udev) -{ - uint8_t i = 0U; - uint32_t address = 0x1FFFF800U; - - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - iap->option_byte[0] = 0x02U; - - for (i = 1U; i < 17U; i++) { - iap->option_byte[i] = *(uint8_t *)address; - address++; - } - - iap_report_send(udev, iap->option_byte, IAP_IN_PACKET); -} - -/*! - \brief handle the IAP_LEAVE request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_req_leave (usb_dev *udev) -{ - /* lock the internal flash */ - fmc_lock(); - - /* generate system reset to allow jumping to the user code */ - NVIC_SystemReset(); -} - -/*! - \brief handle the IAP_SEND_ADDRESS request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_address_send(usb_dev *udev) -{ - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - iap->bin_addr[0] = 0x02U; - - iap->bin_addr[1] = (uint8_t)(APP_LOADED_ADDR); - iap->bin_addr[2] = (uint8_t)(APP_LOADED_ADDR >> 8); - iap->bin_addr[3] = (uint8_t)(APP_LOADED_ADDR >> 16); - iap->bin_addr[4] = (uint8_t)(APP_LOADED_ADDR >> 24); - - iap_report_send (udev, iap->bin_addr, IAP_IN_PACKET); -} - -/*! - \brief write data to sectors of memory - \param[in] data: data to be written - \param[in] addr: sector address/code - \param[in] len: length of data to be written (in bytes) - \param[out] none - \retval MAL_OK if all operations are OK, MAL_FAIL else -*/ -static void iap_data_write (uint8_t *data, uint32_t addr, uint32_t len) -{ - uint32_t index = 0U; - - /* check if the address is in protected area */ - if (IS_PROTECTED_AREA(addr)) { - return; - } - - if (len & 0x03U) {/* not an aligned data */ - for (index = len; index < ((len & 0xFFFCU) + 4U); index++) { - data[index] = 0xFFU; - } - } - - /* data received are word multiple */ - for (index = 0U; index < len; index += 4U) { - fmc_word_program(addr, *(uint32_t *)(data + index)); - addr += 4U; - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_bbb.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_bbb.h deleted file mode 100644 index 175e565..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_bbb.h +++ /dev/null @@ -1,129 +0,0 @@ -/*! - \file usbd_msc_bbb.h - \brief the header file of the usbd_msc_bot.c file - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_MSC_BBB_H -#define __USBD_MSC_BBB_H - -#include "usbd_core.h" -#include "usbd_msc_mem.h" -#include "usbd_msc_scsi.h" - -#define BBB_CBW_SIGNATURE 0x43425355U -#define BBB_CSW_SIGNATURE 0x53425355U -#define BBB_CBW_LENGTH 31U -#define BBB_CSW_LENGTH 13U - -typedef struct { - uint32_t dCBWSignature; - uint32_t dCBWTag; - uint32_t dCBWDataTransferLength; - uint8_t bmCBWFlags; - uint8_t bCBWLUN; - uint8_t bCBWCBLength; - uint8_t CBWCB[16]; -}msc_bbb_cbw; - -typedef struct { - uint32_t dCSWSignature; - uint32_t dCSWTag; - uint32_t dCSWDataResidue; - uint8_t bCSWStatus; -}msc_bbb_csw; - -/* CSW command status */ -enum msc_csw_status { - CSW_CMD_PASSED = 0, - CSW_CMD_FAILED, - CSW_PHASE_ERROR -}; - -/* MSC BBB state */ -enum msc_bbb_state { - BBB_IDLE = 0U, /*!< idle state */ - BBB_DATA_OUT, /*!< data OUT state */ - BBB_DATA_IN, /*!< data IN state */ - BBB_LAST_DATA_IN, /*!< last data IN state */ - BBB_SEND_DATA /*!< send immediate data state */ -}; - -/* MSC BBB status */ -enum msc_bbb_status { - BBB_STATUS_NORMAL = 0U, /*!< normal status */ - BBB_STATUS_RECOVERY, /*!< recovery status*/ - BBB_STATUS_ERROR /*!< error status */ -}; - -typedef struct -{ - uint8_t bbb_data[MSC_MEDIA_PACKET_SIZE]; - - uint8_t max_lun; - uint8_t bbb_state; - uint8_t bbb_status; - - uint32_t bbb_datalen; - - msc_bbb_cbw bbb_cbw; - msc_bbb_csw bbb_csw; - - uint8_t scsi_sense_head; - uint8_t scsi_sense_tail; - - uint32_t scsi_blk_size[MEM_LUN_NUM]; - uint32_t scsi_blk_nbr[MEM_LUN_NUM]; - - uint32_t scsi_blk_addr; - uint32_t scsi_blk_len; -// uint32_t scsi_disk_pop; - - msc_scsi_sense scsi_sense[SENSE_LIST_DEEPTH]; -} usbd_msc_handler; - -/* function declarations */ -/* initialize the bbb process */ -void msc_bbb_init (usb_dev *udev); -/* reset the BBB machine */ -void msc_bbb_reset (usb_dev *udev); -/* deinitialize the BBB machine */ -void msc_bbb_deinit (usb_dev *udev); -/* handle BBB data IN stage */ -void msc_bbb_data_in (usb_dev *udev, uint8_t ep_num); -/* handle BBB data OUT stage */ -void msc_bbb_data_out (usb_dev *udev, uint8_t ep_num); -/* send the CSW(command status wrapper) */ -void msc_bbb_csw_send (usb_dev *udev, uint8_t csw_status); -/* complete the clear feature request */ -void msc_bbb_clrfeature (usb_dev *udev, uint8_t ep_num); - -#endif /* __USBD_MSC_BBB_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_core.h deleted file mode 100644 index 3b15070..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_core.h +++ /dev/null @@ -1,85 +0,0 @@ -/*! - \file usbd_msc_core.h - \brief the header file of USB MSC device class core functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_MSC_CORE_H -#define __USBD_MSC_CORE_H - -#include "usbd_core.h" - -/* mass storage device class code */ -#define USB_CLASS_MSC 0x08U - -/* mass storage subclass code */ -#define USB_MSC_SUBCLASS_RBC 0x01U -#define USB_MSC_SUBCLASS_ATAPI 0x02U -#define USB_MSC_SUBCLASS_UFI 0x04U -#define USB_MSC_SUBCLASS_SCSI 0x06U -#define USB_MSC_SUBCLASS_LOCKABLE 0x07U -#define USB_MSC_SUBCLASS_IEEE1667 0x08U - -/* mass storage interface class control protocol codes */ -#define USB_MSC_PROTOCOL_CBI 0x00U -#define USB_MSC_PROTOCOL_CBI_ALT 0x01U -#define USB_MSC_PROTOCOL_BBB 0x50U - -/* mass storage request codes */ -#define USB_MSC_REQ_CODES_ADSC 0x00U -#define USB_MSC_REQ_CODES_GET 0xFCU -#define USB_MSC_REQ_CODES_PUT 0xFDU -#define USB_MSC_REQ_CODES_GML 0xFEU -#define USB_MSC_REQ_CODES_BOMSR 0xFFU - -/* mass storage class-specific request codes */ -#define BBB_GET_MAX_LUN 0xFEU -#define BBB_RESET 0xFFU - -#define USB_MSC_CONFIG_DESC_SIZE 32U - -#define MSC_EPIN_SIZE MSC_DATA_PACKET_SIZE -#define MSC_EPOUT_SIZE MSC_DATA_PACKET_SIZE - -/* USB configuration descriptor structure */ -typedef struct -{ - usb_desc_config config; - - usb_desc_itf msc_itf; - usb_desc_ep msc_epin; - usb_desc_ep msc_epout; -} usb_desc_config_set; - -extern usb_desc msc_desc; -extern usb_class msc_class; - -#endif /* __USBD_MSC_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_data.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_data.h deleted file mode 100644 index b246b47..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_data.h +++ /dev/null @@ -1,49 +0,0 @@ -/*! - \file usbd_msc_data.h - \brief the header file of the usbd_msc_data.c file - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_MSC_DATA_H -#define __USBD_MSC_DATA_H - -#include "usbd_conf.h" - -#define MODE_SENSE6_LENGTH 8U -#define MODE_SENSE10_LENGTH 8U -#define INQUIRY_PAGE00_LENGTH 96U -#define FORMAT_CAPACITIES_LENGTH 20U - -extern const uint8_t msc_page00_inquiry_data[]; -extern const uint8_t msc_mode_sense6_data[]; -extern const uint8_t msc_mode_sense10_data[]; - -#endif /* __USBD_MSC_DATA_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_mem.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_mem.h deleted file mode 100644 index 5cbc7ba..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_mem.h +++ /dev/null @@ -1,59 +0,0 @@ -/*! - \file usbd_msc_mem.h - \brief header file for storage memory - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_MSC_MEM_H -#define __USBD_MSC_MEM_H - -#include "usbd_conf.h" - -#define USBD_STD_INQUIRY_LENGTH 36U - -typedef struct -{ - int8_t (*mem_init) (uint8_t lun); - int8_t (*mem_ready) (uint8_t lun); - int8_t (*mem_protected) (uint8_t lun); - int8_t (*mem_read) (uint8_t lun, uint8_t *buf, uint32_t block_addr, uint16_t block_len); - int8_t (*mem_write) (uint8_t lun, uint8_t *buf, uint32_t block_addr, uint16_t block_len); - int8_t (*mem_maxlun) (void); - - uint8_t *mem_toc_data; - uint8_t *mem_inquiry_data[MEM_LUN_NUM]; - uint32_t mem_block_size[MEM_LUN_NUM]; - uint32_t mem_block_len[MEM_LUN_NUM]; -}usbd_mem_cb; - -extern usbd_mem_cb *usbd_mem_fops; - -#endif /* __USBD_MSC_MEM_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_scsi.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_scsi.h deleted file mode 100644 index 2bf16b8..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Include/usbd_msc_scsi.h +++ /dev/null @@ -1,126 +0,0 @@ -/*! - \file usbd_msc_scsi.h - \brief the header file of the usbd_msc_scsi.c file - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_MSC_SCSI_H -#define __USBD_MSC_SCSI_H - -#include "usbd_msc_data.h" -#include "usbd_msc_bbb.h" - -#define SENSE_LIST_DEEPTH 4U - -/* SCSI commands */ -#define SCSI_FORMAT_UNIT 0x04U -#define SCSI_INQUIRY 0x12U -#define SCSI_MODE_SELECT6 0x15U -#define SCSI_MODE_SELECT10 0x55U -#define SCSI_MODE_SENSE6 0x1AU -#define SCSI_READ_TOC_DATA 0x43U -#define SCSI_MODE_SENSE10 0x5AU -#define SCSI_ALLOW_MEDIUM_REMOVAL 0x1EU -#define SCSI_READ6 0x08U -#define SCSI_READ10 0x28U -#define SCSI_READ12 0xA8U -#define SCSI_READ16 0x88U - -#define SCSI_READ_CAPACITY10 0x25U -#define SCSI_READ_CAPACITY16 0x9EU - -#define SCSI_REQUEST_SENSE 0x03U -#define SCSI_START_STOP_UNIT 0x1BU -#define SCSI_TEST_UNIT_READY 0x00U -#define SCSI_WRITE6 0x0AU -#define SCSI_WRITE10 0x2AU -#define SCSI_WRITE12 0xAAU -#define SCSI_WRITE16 0x8AU - -#define SCSI_VERIFY10 0x2FU -#define SCSI_VERIFY12 0xAFU -#define SCSI_VERIFY16 0x8FU - -#define SCSI_SEND_DIAGNOSTIC 0x1DU -#define SCSI_READ_FORMAT_CAPACITIES 0x23U - -#define INVALID_CDB 0x20U -#define INVALID_FIELED_IN_COMMAND 0x24U -#define PARAMETER_LIST_LENGTH_ERROR 0x1AU -#define INVALID_FIELD_IN_PARAMETER_LIST 0x26U -#define ADDRESS_OUT_OF_RANGE 0x21U -#define MEDIUM_NOT_PRESENT 0x3AU -#define MEDIUM_HAVE_CHANGED 0x28U -#define WRITE_PROTECTED 0x27U -#define UNRECOVERED_READ_ERROR 0x11U -#define WRITE_FAULT 0x03U - -#define READ_FORMAT_CAPACITY_DATA_LEN 0x0CU -#define READ_CAPACITY10_DATA_LEN 0x08U -#define MODE_SENSE10_DATA_LEN 0x08U -#define MODE_SENSE6_DATA_LEN 0x04U -#define READ_TOC_CMD_LEN 0x14U -#define REQUEST_SENSE_DATA_LEN 0x12U -#define STANDARD_INQUIRY_DATA_LEN 0x24U -#define BLKVFY 0x04U - -enum sense_state { - NO_SENSE = 0U, - RECOVERED_ERROR, - NOT_READY, - MEDIUM_ERROR, - HARDWARE_ERROR, - ILLEGAL_REQUEST, - UNIT_ATTENTION, - DATA_PROTECT, - BLANK_CHECK, - VENDOR_SPECIFIC, - COPY_ABORTED, - ABORTED_COMMAND, - RESERVED, - VOLUME_OVERFLOW, - MISCOMPARE -}; - -typedef struct { - uint8_t SenseKey; - uint32_t Information; - uint8_t ASC; - uint8_t ASCQ; -} msc_scsi_sense; - -/* function declarations */ -/* process SCSI commands */ -int8_t scsi_process_cmd (usb_dev *udev, uint8_t lun, uint8_t *cmd); -/* load the last error code in the error list */ -void scsi_sense_code (usb_dev *udev, uint8_t lun, uint8_t skey, uint8_t asc); - -#endif /* __USBD_MSC_SCSI_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_bbb.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_bbb.c deleted file mode 100644 index b6261b5..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_bbb.c +++ /dev/null @@ -1,283 +0,0 @@ -/*! - \file usbd_msc_bbb.c - \brief USB BBB(Bulk/Bulk/Bulk) protocol core functions - \note BBB means Bulk-only transport protocol for USB MSC - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_enum.h" -#include "usbd_msc_bbb.h" - -/* local function prototypes ('static') */ -static void msc_bbb_cbw_decode (usb_dev *udev); -static void msc_bbb_data_send (usb_dev *udev, uint8_t *pbuf, uint32_t Len); -static void msc_bbb_abort (usb_dev *udev); - -/*! - \brief initialize the bbb process - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -void msc_bbb_init (usb_dev *udev) -{ - uint8_t lun_num; - - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_state = BBB_IDLE; - msc->bbb_status = BBB_STATUS_NORMAL; - - /* initializes the storage logic unit */ - for(lun_num = 0U; lun_num < MEM_LUN_NUM; lun_num++) { - usbd_mem_fops->mem_init(lun_num); - } - - /* prepare endpoint to receive the first BBB CBW */ - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); -} - -/*! - \brief reset the BBB machine - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -void msc_bbb_reset (usb_dev *udev) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_state = BBB_IDLE; - msc->bbb_status = BBB_STATUS_RECOVERY; - - /* prepare endpoint to receive the first BBB command */ - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); -} - -/*! - \brief deinitialize the BBB machine - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -void msc_bbb_deinit (usb_dev *udev) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_state = BBB_IDLE; -} - -/*! - \brief handle BBB data IN stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -void msc_bbb_data_in (usb_dev *udev, uint8_t ep_num) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - switch (msc->bbb_state) { - case BBB_DATA_IN: - if (scsi_process_cmd (udev, msc->bbb_cbw.bCBWLUN, &msc->bbb_cbw.CBWCB[0]) < 0) { - msc_bbb_csw_send (udev, CSW_CMD_FAILED); - } - break; - - case BBB_SEND_DATA: - case BBB_LAST_DATA_IN: - msc_bbb_csw_send (udev, CSW_CMD_PASSED); - break; - - default: - break; - } -} - -/*! - \brief handle BBB data OUT stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -void msc_bbb_data_out (usb_dev *udev, uint8_t ep_num) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - switch (msc->bbb_state) { - case BBB_IDLE: - msc_bbb_cbw_decode (udev); - break; - - case BBB_DATA_OUT: - if (scsi_process_cmd (udev, msc->bbb_cbw.bCBWLUN, &msc->bbb_cbw.CBWCB[0]) < 0) { - msc_bbb_csw_send (udev, CSW_CMD_FAILED); - } - break; - - default: - break; - } -} - -/*! - \brief send the CSW(command status wrapper) - \param[in] udev: pointer to USB device instance - \param[in] csw_status: CSW status - \param[out] none - \retval none -*/ -void msc_bbb_csw_send (usb_dev *udev, uint8_t csw_status) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_csw.dCSWSignature = BBB_CSW_SIGNATURE; - msc->bbb_csw.bCSWStatus = csw_status; - msc->bbb_state = BBB_IDLE; - - usbd_ep_send (udev, MSC_IN_EP, (uint8_t *)&msc->bbb_csw, BBB_CSW_LENGTH); - - /* prepare endpoint to receive next command */ - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); -} - -/*! - \brief complete the clear feature request - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -void msc_bbb_clrfeature (usb_dev *udev, uint8_t ep_num) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - if (msc->bbb_status == BBB_STATUS_ERROR)/* bad CBW signature */ { - usbd_ep_stall(udev, MSC_IN_EP); - - msc->bbb_status = BBB_STATUS_NORMAL; - } else if(((ep_num & 0x80U) == 0x80U) && (msc->bbb_status != BBB_STATUS_RECOVERY)) { - msc_bbb_csw_send (udev, CSW_CMD_FAILED); - } else { - - } -} - -/*! - \brief decode the CBW command and set the BBB state machine accordingly - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void msc_bbb_cbw_decode (usb_dev *udev) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - uint16_t rx_len = udev->transc_out[MSC_OUT_EP].xfer_count; - - msc->bbb_csw.dCSWTag = msc->bbb_cbw.dCBWTag; - msc->bbb_csw.dCSWDataResidue = msc->bbb_cbw.dCBWDataTransferLength; - - if ((BBB_CBW_LENGTH != rx_len) || - (BBB_CBW_SIGNATURE != msc->bbb_cbw.dCBWSignature)|| - (msc->bbb_cbw.bCBWLUN > 1U) || - (msc->bbb_cbw.bCBWCBLength < 1U) || - (msc->bbb_cbw.bCBWCBLength > 16U)) { - /* illegal command handler */ - scsi_sense_code (udev, msc->bbb_cbw.bCBWLUN, ILLEGAL_REQUEST, INVALID_CDB); - - msc->bbb_status = BBB_STATUS_ERROR; - - msc_bbb_abort (udev); - } else { - if (scsi_process_cmd (udev, msc->bbb_cbw.bCBWLUN, &msc->bbb_cbw.CBWCB[0]) < 0) { - msc_bbb_abort (udev); - } else if ((BBB_DATA_IN != msc->bbb_state) && - (BBB_DATA_OUT != msc->bbb_state) && - (BBB_LAST_DATA_IN != msc->bbb_state)) { /* burst xfer handled internally */ - if (msc->bbb_datalen > 0U) { - msc_bbb_data_send (udev, msc->bbb_data, msc->bbb_datalen); - } else if (0U == msc->bbb_datalen) { - msc_bbb_csw_send (udev, CSW_CMD_PASSED); - } else { - - } - } else { - - } - } -} - -/*! - \brief send the requested data - \param[in] udev: pointer to USB device instance - \param[in] buf: pointer to data buffer - \param[in] len: data length - \param[out] none - \retval none -*/ -static void msc_bbb_data_send (usb_dev *udev, uint8_t *buf, uint32_t len) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - len = USB_MIN (msc->bbb_cbw.dCBWDataTransferLength, len); - - msc->bbb_csw.dCSWDataResidue -= len; - msc->bbb_csw.bCSWStatus = CSW_CMD_PASSED; - msc->bbb_state = BBB_SEND_DATA; - - usbd_ep_send (udev, MSC_IN_EP, buf, len); -} - -/*! - \brief abort the current transfer - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void msc_bbb_abort (usb_dev *udev) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - if ((0U == msc->bbb_cbw.bmCBWFlags) && - (0U != msc->bbb_cbw.dCBWDataTransferLength) && - (BBB_STATUS_NORMAL == msc->bbb_status)) { - usbd_ep_stall(udev, MSC_OUT_EP); - } - - usbd_ep_stall(udev, MSC_IN_EP); - - if (msc->bbb_status == BBB_STATUS_ERROR) { - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_core.c deleted file mode 100644 index 5c9af87..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_core.c +++ /dev/null @@ -1,316 +0,0 @@ -/*! - \file usbd_msc_core.c - \brief USB MSC device class core functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x - \version 2020-12-07, V3.0.1, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_enum.h" -#include "usbd_msc_bbb.h" -#include "usbd_msc_core.h" -#include "usbd_transc.h" -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x128FU - -/* local function prototypes ('static') */ -static uint8_t msc_core_init (usb_dev *udev, uint8_t config_index); -static uint8_t msc_core_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t msc_core_req (usb_dev *udev, usb_req *req); -static void msc_core_in (usb_dev *udev, uint8_t ep_num); -static void msc_core_out (usb_dev *udev, uint8_t ep_num); - -usb_class msc_class = -{ - .init = msc_core_init, - .deinit = msc_core_deinit, - - .req_process = msc_core_req, - - .data_in = msc_core_in, - .data_out = msc_core_out -}; - -/* note: it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -const usb_desc_dev msc_dev_desc = -{ - .header = { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -/* USB device configuration descriptor */ -const usb_desc_config_set msc_config_desc = -{ - .config = - { - .header = { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_MSC_CONFIG_DESC_SIZE, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0xC0U, - .bMaxPower = 0x32U - }, - - .msc_itf = - { - .header = { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_CLASS_MSC, - .bInterfaceSubClass = USB_MSC_SUBCLASS_SCSI, - .bInterfaceProtocol = USB_MSC_PROTOCOL_BBB, - .iInterface = 0x00U - }, - - .msc_epin = - { - .header = { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = MSC_IN_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = MSC_EPIN_SIZE, - .bInterval = 0x00U - }, - - .msc_epout = - { - .header = { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = MSC_OUT_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = MSC_EPOUT_SIZE, - .bInterval = 0x00U - } -}; - -/* USB language ID descriptor */ -const usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static const usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static const usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'M', 'S', 'C'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor */ -uint8_t* usbd_msc_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc msc_desc = { - .dev_desc = (uint8_t *)&msc_dev_desc, - .config_desc = (uint8_t *)&msc_config_desc, - .strings = usbd_msc_strings -}; - -static uint8_t usbd_msc_maxlun = 0U; - -/*! - \brief initialize the MSC device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t msc_core_init (usb_dev *udev, uint8_t config_index) -{ - static usbd_msc_handler msc_handler; - - memset((void *)&msc_handler, 0U, sizeof(usbd_msc_handler)); - - udev->class_data[USBD_MSC_INTERFACE] = (void *)&msc_handler; - - /* initialize Tx endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, BULK_TX_ADDR, &(msc_config_desc.msc_epin)); - - /* initialize Rx endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, BULK_RX_ADDR, &(msc_config_desc.msc_epout)); - - udev->ep_transc[EP_ID(MSC_IN_EP)][TRANSC_IN] = msc_class.data_in; - udev->ep_transc[MSC_OUT_EP][TRANSC_OUT] = msc_class.data_out; - - /* initialize the BBB layer */ - msc_bbb_init(udev); - - return USBD_OK; -} - -/*! - \brief deinitialize the MSC device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t msc_core_deinit (usb_dev *udev, uint8_t config_index) -{ - /* clear MSC endpoints */ - usbd_ep_deinit (udev, MSC_IN_EP); - usbd_ep_deinit (udev, MSC_OUT_EP); - - /* deinitialize the BBB layer */ - msc_bbb_deinit(udev); - - return USBD_OK; -} - -/*! - \brief handle the MSC class-specific and standard requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t msc_core_req (usb_dev *udev, usb_req *req) -{ - switch (req->bRequest) { - case BBB_GET_MAX_LUN : - if((0U == req->wValue) && - (1U == req->wLength) && - (0x80U == (req->bmRequestType & 0x80U))) { - usbd_msc_maxlun = (uint8_t)usbd_mem_fops->mem_maxlun(); - - usb_transc_config(&udev->transc_in[0], &usbd_msc_maxlun, 1U, 0U); - } else { - return USBD_FAIL; - } - break; - - case BBB_RESET : - if((0U == req->wValue) && - (0U == req->wLength) && - (0x80U != (req->bmRequestType & 0x80U))) { - msc_bbb_reset(udev); - } else { - return USBD_FAIL; - } - break; - - case USB_CLEAR_FEATURE: - msc_bbb_clrfeature (udev, (uint8_t)req->wIndex); - break; - - default: - return USBD_FAIL; - } - - return USBD_OK; -} - -/*! - \brief handle data in stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: the endpoint number - \param[out] none - \retval none -*/ -static void msc_core_in (usb_dev *udev, uint8_t ep_num) -{ - msc_bbb_data_in(udev, ep_num); -} - -/*! - \brief handle data out stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: the endpoint number - \param[out] none - \retval none -*/ -static void msc_core_out (usb_dev *udev, uint8_t ep_num) -{ - msc_bbb_data_out (udev, ep_num); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_data.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_data.c deleted file mode 100644 index 259a77c..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_data.c +++ /dev/null @@ -1,73 +0,0 @@ -/*! - \file usbd_msc_data.c - \brief USB MSC vital inquiry pages and sense data - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_msc_data.h" - -/* USB mass storage page 0 inquiry data */ -const uint8_t msc_page00_inquiry_data[] = -{ - 0x00U, - 0x00U, - 0x00U, - 0x00U, - (INQUIRY_PAGE00_LENGTH - 4U), - 0x80U, - 0x83U, -}; - -/* USB mass storage sense 6 data */ -const uint8_t msc_mode_sense6_data[] = -{ - 0x00U, - 0x00U, - 0x00U, - 0x00U, - 0x00U, - 0x00U, - 0x00U, - 0x00U -}; - -/* USB mass storage sense 10 data */ -const uint8_t msc_mode_sense10_data[] = -{ - 0x00U, - 0x06U, - 0x00U, - 0x00U, - 0x00U, - 0x00U, - 0x00U, - 0x00U -}; diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_scsi.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_scsi.c deleted file mode 100644 index beeb651..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/msc/Source/usbd_msc_scsi.c +++ /dev/null @@ -1,728 +0,0 @@ -/*! - \file usbd_msc_scsi.c - \brief USB SCSI layer functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_enum.h" -#include "usbd_msc_bbb.h" -#include "usbd_msc_scsi.h" -#include "usbd_msc_data.h" - -/* local function prototypes ('static') */ -static int8_t scsi_test_unit_ready (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_mode_select6 (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_mode_select10 (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_inquiry (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_read_format_capacity (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_read_capacity10 (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_request_sense (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_mode_sense6 (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_toc_cmd_read (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_mode_sense10 (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_write10 (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_read10 (usb_dev *udev, uint8_t lun, uint8_t *params); -static int8_t scsi_verify10 (usb_dev *udev, uint8_t lun, uint8_t *params); - -static int8_t scsi_process_read (usb_dev *udev, uint8_t lun); -static int8_t scsi_process_write (usb_dev *udev, uint8_t lun); - -static inline int8_t scsi_check_address_range (usb_dev *udev, uint8_t lun, uint32_t blk_offset, uint16_t blk_nbr); -static inline int8_t scsi_format_cmd (usb_dev *udev, uint8_t lun); -static inline int8_t scsi_start_stop_unit (usb_dev *udev, uint8_t lun, uint8_t *params); -static inline int8_t scsi_allow_medium_removal (usb_dev *udev, uint8_t lun, uint8_t *params); - -/*! - \brief process SCSI commands - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -int8_t scsi_process_cmd(usb_dev *udev, uint8_t lun, uint8_t *params) -{ - switch (params[0]) { - case SCSI_TEST_UNIT_READY: - return scsi_test_unit_ready (udev, lun, params); - - case SCSI_REQUEST_SENSE: - return scsi_request_sense (udev, lun, params); - - case SCSI_INQUIRY: - return scsi_inquiry (udev, lun, params); - - case SCSI_START_STOP_UNIT: - return scsi_start_stop_unit (udev, lun, params); - - case SCSI_ALLOW_MEDIUM_REMOVAL: - return scsi_allow_medium_removal (udev, lun, params); - - case SCSI_MODE_SENSE6: - return scsi_mode_sense6 (udev, lun, params); - - case SCSI_MODE_SENSE10: - return scsi_mode_sense10 (udev, lun, params); - - case SCSI_READ_FORMAT_CAPACITIES: - return scsi_read_format_capacity (udev, lun, params); - - case SCSI_READ_CAPACITY10: - return scsi_read_capacity10 (udev, lun, params); - - case SCSI_READ10: - return scsi_read10 (udev, lun, params); - - case SCSI_WRITE10: - return scsi_write10 (udev, lun, params); - - case SCSI_VERIFY10: - return scsi_verify10 (udev, lun, params); - - case SCSI_FORMAT_UNIT: - return scsi_format_cmd (udev, lun); - - case SCSI_READ_TOC_DATA: - return scsi_toc_cmd_read (udev, lun, params); - - case SCSI_MODE_SELECT6: - return scsi_mode_select6 (udev, lun, params); - - case SCSI_MODE_SELECT10: - return scsi_mode_select10 (udev, lun, params); - - default: - scsi_sense_code (udev, lun, ILLEGAL_REQUEST, INVALID_CDB); - return -1; - } -} - -/*! - \brief load the last error code in the error list - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] skey: sense key - \param[in] asc: additional sense key - \param[out] none - \retval none -*/ -void scsi_sense_code (usb_dev *udev, uint8_t lun, uint8_t skey, uint8_t asc) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->scsi_sense[msc->scsi_sense_tail].SenseKey = skey; - msc->scsi_sense[msc->scsi_sense_tail].ASC = asc << 8U; - msc->scsi_sense_tail++; - - if (SENSE_LIST_DEEPTH == msc->scsi_sense_tail) { - msc->scsi_sense_tail = 0U; - } -} - -/*! - \brief process SCSI Test Unit Ready command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_test_unit_ready (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - /* case 9 : Hi > D0 */ - if (0U != msc->bbb_cbw.dCBWDataTransferLength) { - scsi_sense_code (udev, msc->bbb_cbw.bCBWLUN, ILLEGAL_REQUEST, INVALID_CDB); - - return -1; - } - - if (0 != usbd_mem_fops->mem_ready(lun)) { - scsi_sense_code(udev, lun, NOT_READY, MEDIUM_NOT_PRESENT); - - return -1; - } - -// if (1U == msc->scsi_disk_pop) { -// usbd_disconnect (udev); -// } - - msc->bbb_datalen = 0U; - - return 0; -} - -/*! - \brief process Inquiry command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_mode_select6 (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_datalen = 0U; - - return 0; -} - -/*! - \brief process Inquiry command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_mode_select10 (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_datalen = 0U; - - return 0; -} - -/*! - \brief process Inquiry command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_inquiry (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - uint8_t *page = NULL; - uint16_t len = 0U; - - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - if (params[1] & 0x01U) { - page = (uint8_t *)msc_page00_inquiry_data; - - len = INQUIRY_PAGE00_LENGTH; - } else { - page = (uint8_t *)usbd_mem_fops->mem_inquiry_data[lun]; - - len = (uint16_t)(page[4] + 5U); - - if (params[4] <= len) { - len = params[4]; - } - } - - msc->bbb_datalen = len; - - while (len) { - len--; - msc->bbb_data[len] = page[len]; - } - - return 0; -} - -/*! - \brief process Read Capacity 10 command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_read_capacity10 (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - uint32_t blk_num = usbd_mem_fops->mem_block_len[lun] - 1U; - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->scsi_blk_nbr[lun] = usbd_mem_fops->mem_block_len[lun]; - msc->scsi_blk_size[lun] = usbd_mem_fops->mem_block_size[lun]; - - msc->bbb_data[0] = (uint8_t)(blk_num >> 24U); - msc->bbb_data[1] = (uint8_t)(blk_num >> 16U); - msc->bbb_data[2] = (uint8_t)(blk_num >> 8U); - msc->bbb_data[3] = (uint8_t)(blk_num); - - msc->bbb_data[4] = (uint8_t)(msc->scsi_blk_size[lun] >> 24U); - msc->bbb_data[5] = (uint8_t)(msc->scsi_blk_size[lun] >> 16U); - msc->bbb_data[6] = (uint8_t)(msc->scsi_blk_size[lun] >> 8U); - msc->bbb_data[7] = (uint8_t)(msc->scsi_blk_size[lun]); - - msc->bbb_datalen = 8U; - - return 0; -} - -/*! - \brief process Read Format Capacity command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_read_format_capacity (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - uint16_t i = 0U; - uint32_t blk_size = usbd_mem_fops->mem_block_size[lun]; - uint32_t blk_num = usbd_mem_fops->mem_block_len[lun]; - uint32_t blk_nbr = blk_num - 1U; - - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - for (i = 0U; i < 12U; i++) { - msc->bbb_data[i] = 0U; - } - - msc->bbb_data[3] = 0x08U; - msc->bbb_data[4] = (uint8_t)(blk_nbr >> 24U); - msc->bbb_data[5] = (uint8_t)(blk_nbr >> 16U); - msc->bbb_data[6] = (uint8_t)(blk_nbr >> 8U); - msc->bbb_data[7] = (uint8_t)(blk_nbr); - - msc->bbb_data[8] = 0x02U; - msc->bbb_data[9] = (uint8_t)(blk_size >> 16U); - msc->bbb_data[10] = (uint8_t)(blk_size >> 8U); - msc->bbb_data[11] = (uint8_t)(blk_size); - - msc->bbb_datalen = 12U; - - return 0; -} - -/*! - \brief process Mode Sense6 command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_mode_sense6 (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - uint16_t len = 8U; - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_datalen = len; - - while (len) { - len--; - msc->bbb_data[len] = msc_mode_sense6_data[len]; - } - - return 0; -} - -/*! - \brief process Mode Sense10 command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_mode_sense10 (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - uint16_t len = 8U; - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_datalen = len; - - while (len) { - len--; - msc->bbb_data[len] = msc_mode_sense10_data[len]; - } - - return 0; -} - -/*! - \brief process Request Sense command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_request_sense (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - uint8_t i = 0U; - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - for (i = 0U; i < REQUEST_SENSE_DATA_LEN; i++) { - msc->bbb_data[i] = 0U; - } - - msc->bbb_data[0] = 0x70U; - msc->bbb_data[7] = REQUEST_SENSE_DATA_LEN - 6U; - - if ((msc->scsi_sense_head != msc->scsi_sense_tail)) { - msc->bbb_data[2] = msc->scsi_sense[msc->scsi_sense_head].SenseKey; - msc->bbb_data[12] = msc->scsi_sense[msc->scsi_sense_head].ASCQ; - msc->bbb_data[13] = msc->scsi_sense[msc->scsi_sense_head].ASC; - msc->scsi_sense_head++; - - if (msc->scsi_sense_head == SENSE_LIST_DEEPTH) { - msc->scsi_sense_head = 0U; - } - } - - msc->bbb_datalen = USB_MIN(REQUEST_SENSE_DATA_LEN, params[4]); - - return 0; -} - -/*! - \brief process Start Stop Unit command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static inline int8_t scsi_start_stop_unit (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_datalen = 0U; -// msc->scsi_disk_pop = 1U; - - return 0; -} - -/*! - \brief process Allow Medium Removal command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static inline int8_t scsi_allow_medium_removal (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_datalen = 0U; - - return 0; -} - -/*! - \brief process Read10 command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_read10 (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - if (msc->bbb_state == BBB_IDLE) { - /* direction is from device to host */ - if (0x80U != (msc->bbb_cbw.bmCBWFlags & 0x80U)) { - scsi_sense_code (udev, msc->bbb_cbw.bCBWLUN, ILLEGAL_REQUEST, INVALID_CDB); - - return -1; - } - - if (0 != usbd_mem_fops->mem_ready(lun)) { - scsi_sense_code (udev, lun, NOT_READY, MEDIUM_NOT_PRESENT); - - return -1; - } - - msc->scsi_blk_addr = (params[2] << 24U) | (params[3] << 16U) | \ - (params[4] << 8U) | params[5]; - - msc->scsi_blk_len = (params[7] << 8U) | params[8]; - - if (scsi_check_address_range (udev, lun, msc->scsi_blk_addr, (uint16_t)msc->scsi_blk_len) < 0) { - return -1; /* error */ - } - - msc->bbb_state = BBB_DATA_IN; - - msc->scsi_blk_addr *= msc->scsi_blk_size[lun]; - msc->scsi_blk_len *= msc->scsi_blk_size[lun]; - - /* cases 4,5 : Hi <> Dn */ - if (msc->bbb_cbw.dCBWDataTransferLength != msc->scsi_blk_len) { - scsi_sense_code (udev, msc->bbb_cbw.bCBWLUN, ILLEGAL_REQUEST, INVALID_CDB); - - return -1; - } - } - - msc->bbb_datalen = MSC_MEDIA_PACKET_SIZE; - - return scsi_process_read (udev, lun); -} - -/*! - \brief process Write10 command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_write10 (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - if (BBB_IDLE == msc->bbb_state) { - /* case 8 : Hi <> Do */ - if (0x80U == (msc->bbb_cbw.bmCBWFlags & 0x80U)) { - scsi_sense_code (udev, msc->bbb_cbw.bCBWLUN, ILLEGAL_REQUEST, INVALID_CDB); - - return -1; - } - - /* check whether media is ready */ - if (0 != usbd_mem_fops->mem_ready(lun)) { - scsi_sense_code (udev, lun, NOT_READY, MEDIUM_NOT_PRESENT); - - return -1; - } - - /* check if media is write-protected */ - if (0 != usbd_mem_fops->mem_protected(lun)) { - scsi_sense_code (udev, lun, NOT_READY, WRITE_PROTECTED); - - return -1; - } - - msc->scsi_blk_addr = (params[2] << 24U) | (params[3] << 16U) | \ - (params[4] << 8U) | params[5]; - - msc->scsi_blk_len = (params[7] << 8U) | params[8]; - - /* check if LBA address is in the right range */ - if (scsi_check_address_range (udev, lun, msc->scsi_blk_addr, (uint16_t)msc->scsi_blk_len) < 0) { - return -1; /* error */ - } - - msc->scsi_blk_addr *= msc->scsi_blk_size[lun]; - msc->scsi_blk_len *= msc->scsi_blk_size[lun]; - - /* cases 3,11,13 : Hn,Ho <> D0 */ - if (msc->bbb_cbw.dCBWDataTransferLength != msc->scsi_blk_len) { - scsi_sense_code (udev, msc->bbb_cbw.bCBWLUN, ILLEGAL_REQUEST, INVALID_CDB); - - return -1; - } - - /* prepare endpoint to receive first data packet */ - msc->bbb_state = BBB_DATA_OUT; - - usbd_ep_recev (udev, - MSC_OUT_EP, - msc->bbb_data, - USB_MIN (msc->scsi_blk_len, MSC_MEDIA_PACKET_SIZE)); - } else { /* write process ongoing */ - return scsi_process_write (udev, lun); - } - - return 0; -} - -/*! - \brief process Verify10 command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_verify10 (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - if (0x02U == (params[1] & 0x02U)) { - scsi_sense_code (udev, lun, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); - - return -1; /* error, verify mode not supported*/ - } - - if (scsi_check_address_range (udev, lun, msc->scsi_blk_addr, (uint16_t)msc->scsi_blk_len) < 0) { - return -1; /* error */ - } - - msc->bbb_datalen = 0U; - - return 0; -} - -/*! - \brief check address range - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] blk_offset: block offset - \param[in] blk_nbr: number of block to be processed - \param[out] none - \retval status -*/ -static inline int8_t scsi_check_address_range (usb_dev *udev, uint8_t lun, uint32_t blk_offset, uint16_t blk_nbr) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - if ((blk_offset + blk_nbr) > msc->scsi_blk_nbr[lun]) { - scsi_sense_code (udev, lun, ILLEGAL_REQUEST, ADDRESS_OUT_OF_RANGE); - - return -1; - } - - return 0; -} - -/*! - \brief handle read process - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[out] none - \retval status -*/ -static int8_t scsi_process_read (usb_dev *udev, uint8_t lun) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - uint32_t len = USB_MIN(msc->scsi_blk_len, MSC_MEDIA_PACKET_SIZE); - - if (usbd_mem_fops->mem_read(lun, - msc->bbb_data, - msc->scsi_blk_addr, - (uint16_t)(len / msc->scsi_blk_size[lun])) < 0) { - scsi_sense_code(udev, lun, HARDWARE_ERROR, UNRECOVERED_READ_ERROR); - - return -1; - } - - usbd_ep_send (udev, MSC_IN_EP, msc->bbb_data, len); - - msc->scsi_blk_addr += len; - msc->scsi_blk_len -= len; - - /* case 6 : Hi = Di */ - msc->bbb_csw.dCSWDataResidue -= len; - - if (0U == msc->scsi_blk_len) { - msc->bbb_state = BBB_LAST_DATA_IN; - } - - return 0; -} - -/*! - \brief handle write process - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[out] none - \retval status -*/ -static int8_t scsi_process_write (usb_dev *udev, uint8_t lun) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - uint32_t len = USB_MIN(msc->scsi_blk_len, MSC_MEDIA_PACKET_SIZE); - - if (usbd_mem_fops->mem_write (lun, - msc->bbb_data, - msc->scsi_blk_addr, - (uint16_t)(len / msc->scsi_blk_size[lun])) < 0) { - scsi_sense_code(udev, lun, HARDWARE_ERROR, WRITE_FAULT); - - return -1; - } - - msc->scsi_blk_addr += len; - msc->scsi_blk_len -= len; - - /* case 12 : Ho = Do */ - msc->bbb_csw.dCSWDataResidue -= len; - - if (0U == msc->scsi_blk_len) { - msc_bbb_csw_send (udev, CSW_CMD_PASSED); - } else { - /* prepare endpoint to receive next packet */ - usbd_ep_recev (udev, - MSC_OUT_EP, - msc->bbb_data, - USB_MIN (msc->scsi_blk_len, MSC_MEDIA_PACKET_SIZE)); - } - - return 0; -} - -/*! - \brief process Format Unit command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[out] none - \retval status -*/ -static inline int8_t scsi_format_cmd (usb_dev *udev, uint8_t lun) -{ - return 0; -} - -/*! - \brief process Read_Toc command - \param[in] udev: pointer to USB device instance - \param[in] lun: logical unit number - \param[in] params: command parameters - \param[out] none - \retval status -*/ -static int8_t scsi_toc_cmd_read (usb_dev *udev, uint8_t lun, uint8_t *params) -{ - uint8_t* pPage; - uint16_t len; - - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - pPage = (uint8_t *)&usbd_mem_fops->mem_toc_data[lun * READ_TOC_CMD_LEN]; - len = (uint16_t)pPage[1] + 2U; - - msc->bbb_datalen = len; - - while (len) { - len--; - msc->bbb_data[len] = pPage[len]; - } - - return 0; -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/printer/Include/printer_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/printer/Include/printer_core.h deleted file mode 100644 index faefa1c..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/printer/Include/printer_core.h +++ /dev/null @@ -1,73 +0,0 @@ -/*! - \file printer_core.h - \brief the header file of USB printer device class core functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __PRINTER_CORE_H -#define __PRINTER_CORE_H - -#include "usbd_enum.h" - -/* USB printing device class code */ -#define USB_CLASS_PRINTER 0x07U - -/* printing device subclass code */ -#define USB_SUBCLASS_PRINTER 0x01U - -/* printing device protocol code */ -#define PROTOCOL_UNIDIRECTIONAL_ITF 0x01U -#define PROTOCOL_BI_DIRECTIONAL_ITF 0x02U -#define PROTOCOL_1284_4_ITF 0x03U -#define PROTOCOL_VENDOR 0xFFU - -#define DEVICE_ID_LEN 103U - -#define USB_PRINTER_CONFIG_DESC_LEN 32U - -/* printing device specific-class request */ -#define GET_DEVICE_ID 0x00U -#define GET_PORT_STATUS 0x01U -#define SOFT_RESET 0x02U - -/* USB configuration descriptor structure */ -typedef struct -{ - usb_desc_config config; - usb_desc_itf printer_itf; - usb_desc_ep printer_epin; - usb_desc_ep printer_epout; -} usb_printer_desc_config_set; - -extern usb_desc printer_desc; -extern usb_class printer_class; - -#endif /* __PRINTER_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/printer/Source/printer_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/printer/Source/printer_core.c deleted file mode 100644 index 585b9e8..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/class/device/printer/Source/printer_core.c +++ /dev/null @@ -1,310 +0,0 @@ -/*! - \file printer_core.c - \brief USB printer device class core functions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "printer_core.h" - -#define USBD_VID 0x28E9U -#define USBD_PID 0x028DU - -/* printer port status: paper not empty/selected/no error */ -static uint8_t g_port_status = 0x18U; -uint8_t g_printer_data_buf[PRINTER_OUT_PACKET]; - -uint8_t Printer_DEVICE_ID[DEVICE_ID_LEN] = -{ - 0x00, 0x67, - 'M', 'A', 'N', 'U', 'F', 'A', 'C', 'T', 'U', 'R', 'E', 'R', ':', - 'G', 'I', 'G', 'A', ' ', 'D', 'E', 'V', 'I', 'C', 'E', '-', ';', - 'C', 'O', 'M', 'M', 'A', 'N', 'D', ' ', 'S', 'E', 'T', ':', - 'P', 'C', 'L', ',', 'M', 'P', 'L', ';', - 'M', 'O', 'D', 'E', 'L', ':', - 'L', 'a', 's', 'e', 'r', 'B', 'e', 'a', 'm', '?', ';', - 'C', 'O', 'M', 'M', 'E', 'N', 'T', ':', - 'G', 'o', 'o', 'd', ' ', '!', ';', - 'A', 'C', 'T', 'I', 'V', 'E', ' ', 'C', 'O', 'M', 'M', 'A', 'N', 'D', ' ', 'S', 'E', 'T', ':', - 'P', 'C', 'L', ';' -}; - -/* USB standard device descriptor */ -usb_desc_dev printer_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV, - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM, -}; - -/* USB device configuration descriptor */ -usb_printer_desc_config_set printer_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_PRINTER_CONFIG_DESC_LEN, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0xA0U, - .bMaxPower = 0x32U - }, - - .printer_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_CLASS_PRINTER, - .bInterfaceSubClass = USB_SUBCLASS_PRINTER, - .bInterfaceProtocol = PROTOCOL_BI_DIRECTIONAL_ITF, - .iInterface = 0x00U - }, - - .printer_epin = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = PRINTER_IN_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = PRINTER_IN_PACKET, - .bInterval = 0x00U - }, - - .printer_epout = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = PRINTER_OUT_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = PRINTER_OUT_PACKET, - .bInterval = 0x00U - }, -}; - -/* USB language ID Descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(16U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'P', 'r', 'i', 'n', 't', 'e', 'r'} -}; - -/* USB serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor set */ -static uint8_t* usbd_msc_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc printer_desc = { - .dev_desc = (uint8_t *)&printer_dev_desc, - .config_desc = (uint8_t *)&printer_config_desc, - .strings = usbd_msc_strings -}; - -/* local function prototypes ('static') */ -static uint8_t printer_init (usb_dev *udev, uint8_t config_index); -static uint8_t printer_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t printer_req_handler (usb_dev *udev, usb_req *req); -static void printer_data_in (usb_dev *udev, uint8_t ep_num); -static void printer_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class printer_class = { - .init = printer_init, - .deinit = printer_deinit, - .req_process = printer_req_handler, - .data_in = printer_data_in, - .data_out = printer_data_out -}; -/*! - \brief initialize the printer device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t printer_init (usb_dev *udev, uint8_t config_index) -{ - /* initialize the data TX/RX endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, BULK_TX_ADDR, &(printer_config_desc.printer_epin)); - usbd_ep_init(udev, EP_BUF_SNG, BULK_RX_ADDR, &(printer_config_desc.printer_epout)); - - udev->ep_transc[EP_ID(PRINTER_IN_EP)][TRANSC_IN] = printer_class.data_in; - udev->ep_transc[PRINTER_OUT_EP][TRANSC_OUT] = printer_class.data_out; - - /* prepare to receive data */ - usbd_ep_recev(udev, PRINTER_OUT_EP, g_printer_data_buf, PRINTER_OUT_PACKET); - - return USBD_OK; -} - -/*! - \brief deinitialize the printer device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t printer_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize the data TX/RX endpoint */ - usbd_ep_deinit(udev, PRINTER_IN_EP); - usbd_ep_deinit(udev, PRINTER_OUT_EP); - - return USBD_OK; -} - -/*! - \brief handle the printer class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t printer_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - switch (req->bRequest) { - case GET_DEVICE_ID: - usb_transc_config(&udev->transc_in[0], Printer_DEVICE_ID, DEVICE_ID_LEN, 0U); - - status = REQ_SUPP; - break; - - case GET_PORT_STATUS: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&g_port_status, 1U, 0U); - - status = REQ_SUPP; - break; - - case SOFT_RESET: - usbd_ep_recev(udev, PRINTER_OUT_EP, g_printer_data_buf, PRINTER_OUT_PACKET); - - status = REQ_SUPP; - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle printer data - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void printer_data_in (usb_dev *udev, uint8_t ep_num) -{ -} - -/*! - \brief handle printer data - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void printer_data_out (usb_dev *udev, uint8_t ep_num) -{ -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usb_ch9_std.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usb_ch9_std.h deleted file mode 100644 index f5e7abe..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usb_ch9_std.h +++ /dev/null @@ -1,211 +0,0 @@ -/*! - \file usb_ch9_std.h - \brief USB 2.0 standard defines - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USB_CH9_STD_H -#define __USB_CH9_STD_H - -#include "usbd_conf.h" - -#define USB_DEV_QUALIFIER_DESC_LEN 0x0AU /*!< USB device qualifier descriptor length */ -#define USB_DEV_DESC_LEN 0x12U /*!< USB device descriptor length */ -#define USB_CFG_DESC_LEN 0x09U /*!< USB configuration descriptor length */ -#define USB_ITF_DESC_LEN 0x09U /*!< USB interface descriptor length */ -#define USB_EP_DESC_LEN 0x07U /*!< USB endpoint descriptor length */ -#define USB_BOS_DESC_LEN 0x0CU /*!< USB BOS descriptor length */ -#define USB_OTG_DESC_LEN 0x03U /*!< USB device OTG descriptor length */ -#define USB_SETUP_PACKET_LEN 0x08U /*!< USB SETUP packet length */ -#define USB_DEVICE_CAPABITY 0x10U /*!< USB device capabity */ - -/* bit 7 of bmRequestType: data phase transfer direction */ -#define USB_TRX_MASK 0x80U /*!< USB transfer direction mask */ -#define USB_TRX_OUT 0x00U /*!< USB transfer OUT direction */ -#define USB_TRX_IN 0x80U /*!< USB transfer IN direction */ - -/* bit 6..5 of bmRequestType: request type */ -#define USB_REQTYPE_STRD 0x00U /*!< USB standard request */ -#define USB_REQTYPE_CLASS 0x20U /*!< USB class request */ -#define USB_REQTYPE_VENDOR 0x40U /*!< USB vendor request */ -#define USB_REQTYPE_MASK 0x60U /*!< USB request mask */ - -#define USBD_BUS_POWERED 0x00U /*!< USB bus power supply */ -#define USBD_SELF_POWERED 0x01U /*!< USB self power supply */ - -#define USB_STATUS_REMOTE_WAKEUP 2U /*!< USB is in remote wakeup status */ -#define USB_STATUS_SELF_POWERED 1U /*!< USB is in self powered status */ - -/* bit 4..0 of bmRequestType: recipient type */ -enum _usb_recp_type { - USB_RECPTYPE_DEV = 0x0U, /*!< USB device request type */ - USB_RECPTYPE_ITF = 0x1U, /*!< USB interface request type */ - USB_RECPTYPE_EP = 0x2U, /*!< USB endpoint request type */ - USB_RECPTYPE_MASK = 0x3U /*!< USB request type mask */ -}; - -/* bRequest value */ -enum _usb_request { - USB_GET_STATUS = 0x0U, /*!< USB get status request */ - USB_CLEAR_FEATURE = 0x1U, /*!< USB clear feature request */ - USB_RESERVED2 = 0x2U, /*!< USB reserved2 */ - USB_SET_FEATURE = 0x3U, /*!< USB set feature request */ - USB_RESERVED4 = 0x4U, /*!< USB reserved4 */ - USB_SET_ADDRESS = 0x5U, /*!< USB set address request */ - USB_GET_DESCRIPTOR = 0x6U, /*!< USB get descriptor request */ - USB_SET_DESCRIPTOR = 0x7U, /*!< USB set descriptor request */ - USB_GET_CONFIGURATION = 0x8U, /*!< USB get configuration request */ - USB_SET_CONFIGURATION = 0x9U, /*!< USB set configuration request */ - USB_GET_INTERFACE = 0xAU, /*!< USB get interface request */ - USB_SET_INTERFACE = 0xBU, /*!< USB set interface request */ - USB_SYNCH_FRAME = 0xCU /*!< USB synchronized frame request */ -}; - -/* descriptor types of USB specifications */ -enum _usb_desctype { - USB_DESCTYPE_DEV = 0x1U, /*!< USB device descriptor type */ - USB_DESCTYPE_CONFIG = 0x2U, /*!< USB configuration descriptor type */ - USB_DESCTYPE_STR = 0x3U, /*!< USB string descriptor type */ - USB_DESCTYPE_ITF = 0x4U, /*!< USB interface descriptor type */ - USB_DESCTYPE_EP = 0x5U, /*!< USB endpoint descriptor type */ - USB_DESCTYPE_DEV_QUALIFIER = 0x6U, /*!< USB device qualifier descriptor type */ - USB_DESCTYPE_OTHER_SPD_CONFIG = 0x7U, /*!< USB other speed configuration descriptor type */ - USB_DESCTYPE_ITF_POWER = 0x8U, /*!< USB interface power descriptor type */ - USB_DESCTYPE_BOS = 0xFU /*!< USB BOS descriptor type */ -}; - -/* USB endpoint descriptor bmAttributes bit definitions */ -/* bits 1..0 : transfer type */ -enum _usbx_type { - USB_EP_ATTR_CTL = 0x0U, /*!< USB endpoint control attributes*/ - USB_EP_ATTR_ISO = 0x1U, /*!< USB endpoint isochronous attributes*/ - USB_EP_ATTR_BULK = 0x2U, /*!< USB endpoint bulk attributes*/ - USB_EP_ATTR_INT = 0x3U /*!< USB endpoint interrupt attributes*/ -}; - -/* bits 3..2 : Sync type (only if ISOCHRONOUS) */ -#define USB_EP_ATTR_NOSYNC 0x00U /*!< USB endpoint no SYNC attributes*/ -#define USB_EP_ATTR_ASYNC 0x04U /*!< USB endpoint ASYNC attributes*/ -#define USB_EP_ATTR_ADAPTIVE 0x08U /*!< USB endpoint adaptive attributes*/ -#define USB_EP_ATTR_SYNC 0x0CU /*!< USB endpoint SYNC attributes*/ -#define USB_EP_ATTR_SYNCTYPE 0x0CU /*!< USB endpoint SYNC type attributes*/ - -/* bits 5..4 : usage type (only if ISOCHRONOUS) */ -#define USB_EP_ATTR_DATA 0x00U /*!< USB endpoint data attributes*/ -#define USB_EP_ATTR_FEEDBACK 0x10U /*!< USB endpoint feedback attributes*/ -#define USB_EP_ATTR_IMPLICIT_FEEDBACK_DATA 0x20U /*!< USB endpoint implicit feedback attributes*/ -#define USB_EP_ATTR_USAGETYPE 0x30U /*!< USB endpoint usage type attributes*/ - -#pragma pack(1) - -/* USB standard device request structure */ -typedef struct _usb_req { - uint8_t bmRequestType; /*!< type of request */ - uint8_t bRequest; /*!< request of setup packet */ - uint16_t wValue; /*!< value of setup packet */ - uint16_t wIndex; /*!< index of setup packet */ - uint16_t wLength; /*!< length of setup packet */ -} usb_req; - -/* USB setup packet definition */ -typedef union _usb_setup { - uint8_t data[8]; /*!< USB setup data */ - - usb_req req; /*!< USB setup request */ -} usb_setup; - -/* USB descriptor definition */ -typedef struct _usb_desc_header { - uint8_t bLength; /*!< size of the descriptor */ - uint8_t bDescriptorType; /*!< type of the descriptor */ -} usb_desc_header; - -typedef struct _usb_desc_dev { - usb_desc_header header; /*!< descriptor header, including type and size */ - uint16_t bcdUSB; /*!< BCD of the supported USB specification */ - uint8_t bDeviceClass; /*!< USB device class */ - uint8_t bDeviceSubClass; /*!< USB device subclass */ - uint8_t bDeviceProtocol; /*!< USB device protocol */ - uint8_t bMaxPacketSize0; /*!< size of the control (address 0) endpoint's bank in bytes */ - uint16_t idVendor; /*!< vendor ID for the USB product */ - uint16_t idProduct; /*!< unique product ID for the USB product */ - uint16_t bcdDevice; /*!< product release (version) number */ - uint8_t iManufacturer; /*!< string index for the manufacturer's name */ - uint8_t iProduct; /*!< string index for the product name/details */ - uint8_t iSerialNumber; /*!< string index for the product's globally unique hexadecimal serial number */ - uint8_t bNumberConfigurations; /*!< total number of configurations supported by the device */ -} usb_desc_dev; - -typedef struct _usb_desc_config { - usb_desc_header header; /*!< descriptor header, including type and size */ - uint16_t wTotalLength; /*!< size of the configuration descriptor header, and all sub descriptors inside the configuration */ - uint8_t bNumInterfaces; /*!< total number of interfaces in the configuration */ - uint8_t bConfigurationValue; /*!< configuration index of the current configuration */ - uint8_t iConfiguration; /*!< index of a string descriptor describing the configuration */ - uint8_t bmAttributes; /*!< configuration attributes */ - uint8_t bMaxPower; /*!< maximum power consumption of the device while in the current configuration */ -} usb_desc_config; - -typedef struct _usb_desc_itf { - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bInterfaceNumber; /*!< index of the interface in the current configuration */ - uint8_t bAlternateSetting; /*!< alternate setting for the interface number */ - uint8_t bNumEndpoints; /*!< total number of endpoints in the interface */ - uint8_t bInterfaceClass; /*!< interface class ID */ - uint8_t bInterfaceSubClass; /*!< interface subclass ID */ - uint8_t bInterfaceProtocol; /*!< interface protocol ID */ - uint8_t iInterface; /*!< index of the string descriptor describing the interface */ -} usb_desc_itf; - -typedef struct _usb_desc_ep { - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bEndpointAddress; /*!< logical address of the endpoint */ - uint8_t bmAttributes; /*!< endpoint attribute */ - uint16_t wMaxPacketSize; /*!< size of the endpoint bank, in bytes */ - uint8_t bInterval; /*!< polling interval in milliseconds for the endpoint if it is an INTERRUPT or ISOCHRONOUS type */ -} usb_desc_ep; - -typedef struct _usb_desc_LANGID { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint16_t wLANGID; /*!< LANGID code */ -} usb_desc_LANGID; - -typedef struct _usb_desc_str { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint16_t unicode_string[64]; /*!< unicode string data */ -} usb_desc_str; - -#pragma pack() - -/* compute string descriptor length */ -#define USB_STRING_LEN(unicode_chars) (sizeof(usb_desc_header) + ((unicode_chars) << 1)) - -#endif /* __USB_CH9_STD_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_core.h deleted file mode 100644 index 2f4f336..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_core.h +++ /dev/null @@ -1,334 +0,0 @@ -/*! - \file usbd_core.h - \brief USB device driver core - - \version 2020-07-17, V3.0.0, firmware for GD32F10x - \version 2021-08-10, V3.0.1, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_CORE_H -#define __USBD_CORE_H - -#include "usb_ch9_std.h" - -/* endpoints definitions */ -#define EP_IN(x) ((uint8_t)(0x80U | (x))) -#define EP_OUT(x) ((uint8_t)(x)) - -#define EP_DIR(x) ((uint8_t)((x) >> 7U)) -#define EP_ID(x) ((uint8_t)((x) & 0x7FU)) - -/* USB device endpoint0 max packet size */ -#define USBD_EP0_MAX_SIZE 64U - -#define USBD_TRANSC_COUNT 3U - -/* USB device operation status */ -enum usbd_status { - USBD_UNCONNECTED = 0U, /*!< USB device unconnected status */ - USBD_DEFAULT, /*!< USB device default status */ - USBD_ADDRESSED, /*!< USB device addressed status */ - USBD_CONFIGURED, /*!< USB device configured status */ - USBD_SUSPENDED, /*!< USB device suspended status */ - USBD_CONNECTED /*!< USB device connected status */ -}; - -/* USB device operation state */ -enum usbd_state { - USBD_OK = 0U, /*!< USB device OK state */ - USBD_BUSY, /*!< USB device busy state */ - USBD_FAIL /*!< USB device fail state */ -}; - -/* USB device type */ -enum usbd_transc { - TRANSC_SETUP = 0U, /*!< SETUP transaction */ - TRANSC_OUT, /*!< OUT transaction */ - TRANSC_IN, /*!< IN transaction */ - TRANSC_UNKNOWN /*!< unknown transaction */ -}; - -/* USB device endpoint buffer type */ -enum usbd_ep_kind { - EP_BUF_SNG = 0U, /*!< single buffer endpoint type value */ - EP_BUF_DBL /*!< double buffer endpoint type value */ -}; - -/* USB device transaction structure */ -typedef struct { - uint16_t max_len; /*!< packet max length */ - uint8_t ep_stall; /*!< endpoint STALL */ - - uint8_t *xfer_buf; /*!< transfer buffer */ - uint16_t xfer_len; /*!< transfer length */ - uint16_t xfer_count; /*!< transfer count */ -} usb_transc; - -/* USB device basic structure */ -typedef struct { - uint8_t max_ep_count; /*!< endpoint max count */ - uint8_t twin_buf; /*!< double buffer */ - uint16_t ram_size; /*!< ram size */ -} usb_basic; - -/* USB descriptor */ -typedef struct { - uint8_t *dev_desc; /*!< device descriptor */ - uint8_t *config_desc; /*!< configure descriptor */ - uint8_t *bos_desc; /*!< BOS descriptor */ - uint8_t **strings; /*!< strings descriptor */ -} usb_desc; - -/* USB power management */ -typedef struct { - uint8_t power_mode; /*!< power mode */ - uint8_t power_low; /*!< power low */ - uint8_t esof_count; /*!< ESOF count */ - uint8_t suspend_enabled; /*!< suspend enabled flag */ - uint8_t remote_wakeup; /*!< remote wakeup */ - uint8_t remote_wakeup_on; /*!< remote wakeup enable */ - uint8_t lpm_enable; /*!< LPM enable */ -} usb_pm; - -/* USB LPM management */ -typedef struct { - uint32_t besl; /*!< BESL */ - uint32_t L1_resume; /*!< L1 resume */ - uint32_t L1_remote_wakeup; /*!< L1 remote wakeup */ -} usb_lpm; - -/* USB control information */ -typedef struct { - usb_req req; /*!< USB request */ - uint8_t ctl_zlp; /*!< control zero length packet */ -} usb_control; - -typedef struct _usb_dev usb_dev; -typedef struct _usb_handler usb_handler; -typedef void (*usb_ep_transc) (usb_dev *usbd_dev, uint8_t ep_num); - -/* USB class structure */ -typedef struct { - uint8_t req_cmd; - uint8_t req_altset; - - uint8_t (*init) (usb_dev *udev, uint8_t config_index); - uint8_t (*deinit) (usb_dev *udev, uint8_t config_index); - - uint8_t (*req_process) (usb_dev *udev, usb_req *req); - - uint8_t (*ctlx_in) (usb_dev *udev); - uint8_t (*ctlx_out) (usb_dev *udev); - - void (*data_in) (usb_dev *udev, uint8_t ep_num); - void (*data_out) (usb_dev *udev, uint8_t ep_num); -} usb_class; - -/* USB core driver structure */ -struct _usb_dev { - /* basic parameters */ - uint8_t config; - uint8_t dev_addr; - - __IO uint8_t cur_status; - __IO uint8_t backup_status; - - usb_pm pm; -#ifdef LPM_ENABLED - usb_lpm lpm; -#endif /* LPM_ENABLED */ - usb_control control; - - usb_transc transc_out[EP_COUNT]; - usb_transc transc_in[EP_COUNT]; - - usb_ep_transc ep_transc[EP_COUNT][USBD_TRANSC_COUNT]; - - /* device class */ - usb_desc *desc; - usb_class *class_core; - usb_handler *drv_handler; - - void *class_data[USBD_ITF_MAX_NUM]; - void *user_data; - void *data; -}; - -typedef struct -{ - uint8_t (*SOF) (usb_dev *udev); /*!< SOF ISR callback */ -} usbd_int_cb_struct; - -/* USB handler structure */ -struct _usb_handler { - void (*init) (void); - void (*deinit) (void); - - void (*dp_pullup) (FlagStatus status); - void (*set_addr) (usb_dev *udev); - void (*suspend) (void); - void (*suspend_leave) (void); - void (*resume) (usb_dev *udev); - - void (*ep_reset) (usb_dev *udev); - void (*ep_setup) (usb_dev *udev, uint8_t buf_kind, uint32_t buf_addr, const usb_desc_ep *ep_desc); - void (*ep_disable) (usb_dev *udev, uint8_t ep_addr); - void (*ep_rx_enable) (usb_dev *udev, uint8_t ep_num); - void (*ep_write) (uint8_t *fifo, uint8_t ep_num, uint16_t bytes); - uint16_t (*ep_read) (uint8_t *fifo, uint8_t ep_num, uint8_t buf_kind); - void (*ep_stall_set) (usb_dev *udev, uint8_t ep_addr); - void (*ep_stall_clear) (usb_dev *udev, uint8_t ep_addr); - uint8_t (*ep_status_get) (usb_dev *udev, uint8_t ep_addr); -}; - -extern usbd_int_cb_struct *usbd_int_fops; - -/* static inline function definitions */ -/*! - \brief device connect - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_connect (usb_dev *udev) -{ - udev->drv_handler->dp_pullup(SET); - - udev->cur_status = (uint8_t)USBD_CONNECTED; -} - - -/*! - \brief device disconnect - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_disconnect (usb_dev *udev) -{ - udev->drv_handler->dp_pullup(RESET); - - udev->cur_status = (uint8_t)USBD_UNCONNECTED; -} - -/*! - \brief device core register configure when stop device - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_core_deinit (usb_dev *udev) -{ - udev->drv_handler->deinit(); -} - -/*! - \brief initialize endpoint - \param[in] udev: pointer to USB core instance - \param[in] buf_kind: endpoint buffer kind - \param[in] buf_addr: buffer address - \param[in] ep_desc: pointer to endpoint descriptor - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_ep_init (usb_dev *udev, uint8_t buf_kind, uint32_t buf_addr, const usb_desc_ep *ep_desc) -{ - udev->drv_handler->ep_setup(udev, buf_kind, buf_addr, ep_desc); -} - -/*! - \brief configure the endpoint when it is disabled - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_ep_deinit (usb_dev *udev, uint8_t ep_addr) -{ - udev->drv_handler->ep_disable(udev, ep_addr); -} - -/*! - \brief set an endpoint to STALL status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_ep_stall (usb_dev *udev, uint8_t ep_addr) -{ - udev->drv_handler->ep_stall_set(udev, ep_addr); -} - -/*! - \brief clear endpoint stalled status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_ep_clear_stall (usb_dev *udev, uint8_t ep_addr) -{ - udev->drv_handler->ep_stall_clear(udev, ep_addr); -} - -/*! - \brief get endpoint status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -__STATIC_INLINE uint8_t usbd_ep_status_get (usb_dev *udev, uint8_t ep_addr) -{ - return udev->drv_handler->ep_status_get(udev, ep_addr); -} - -/* function declarations */ -/* initialize USBD */ -void usbd_init(usb_dev *udev, usb_desc *desc, usb_class *usbc); -/* endpoint prepare to transmit data */ -void usbd_ep_send (usb_dev *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len); -/* endpoint prepare to receive data */ -void usbd_ep_recev (usb_dev *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len); - -#endif /* __USBD_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_enum.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_enum.h deleted file mode 100644 index 03486ce..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_enum.h +++ /dev/null @@ -1,111 +0,0 @@ -/*! - \file usbd_enum.h - \brief USB enumeration definitions - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_ENUM_H -#define __USBD_ENUM_H - -#include "usbd_core.h" -#include "usb_ch9_std.h" - -#ifndef NULL - #define NULL 0U -#endif - -/* request state enumeration */ -typedef enum _usb_reqsta -{ - REQ_SUPP = 0x0U, /* supported request */ - REQ_NOTSUPP = 0x1U /* unsupported request */ -} usb_reqsta; - -/* string descriptor index enumeration */ -enum _str_index -{ - STR_IDX_LANGID = 0x0U, /* language ID string index */ - STR_IDX_MFC = 0x1U, /* manufacturer string index */ - STR_IDX_PRODUCT = 0x2U, /* product string index */ - STR_IDX_SERIAL = 0x3U, /* serial string index */ - STR_IDX_CONFIG = 0x4U, /* configuration string index */ - STR_IDX_ITF = 0x5U, /* interface string index */ - STR_IDX_MAX = 0x6U /* string index max value */ -}; - -/* PWR status enumeration */ -typedef enum -{ - USB_PWRSTA_SELF_POWERED = 0x1U, /* USB is in self powered status */ - USB_PWRSTA_REMOTE_WAKEUP = 0x2U, /* USB is in remote wakeup status */ -} usb_pwrsta; - -/* USB endpoint feature enumeration */ -typedef enum -{ - USB_FEATURE_EP_HALT = 0x0U, /* USB has endpoint halt feature */ - USB_FEATURE_REMOTE_WAKEUP = 0x1U, /* USB has endpoint remote wakeup feature */ - USB_FEATURE_TEST_MODE = 0x2U /* USB has endpoint test mode feature */ -} usb_feature; - -#define ENG_LANGID 0x0409U /* english language ID */ -#define CHN_LANGID 0x0804U /* chinese language ID */ - -/* device unique ID */ -#define DEVICE_ID1 (0x1FFFF7E8U) /* device ID1 */ -#define DEVICE_ID2 (0x1FFFF7ECU) /* device ID2 */ -#define DEVICE_ID3 (0x1FFFF7F0U) /* device ID3 */ - -#define DEVICE_ID (0x40022100U) /* device ID information */ - -//#define USB_SERIAL_STRING_SIZE 0x1AU - -/* USB device exported macros */ -#define BYTE_SWAP(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \ - (uint16_t)(((uint16_t)(*(((uint8_t *)(addr)) + 1U))) << 8U)) -#define BYTE_LOW(x) ((uint8_t)((x) & 0x00FFU)) -#define BYTE_HIGH(x) ((uint8_t)(((x) & 0xFF00U) >> 8U)) - -#define USB_MIN(a, b) (((a) < (b)) ? (a) : (b)) - -#define CTL_EP(ep) (((ep) == 0x00U) || ((ep) == 0x80U)) - -/* function declarations */ -/* handle USB standard device request */ -usb_reqsta usbd_standard_request (usb_dev *udev, usb_req *req); -/* handle device class request */ -usb_reqsta usbd_class_request (usb_dev *udev, usb_req *req); -/* handle USB vendor request */ -usb_reqsta usbd_vendor_request (usb_dev *udev, usb_req *req); -/* get serial string */ -void serial_string_get (uint16_t *unicode_str); - -#endif /* __USBD_ENUM_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_pwr.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_pwr.h deleted file mode 100644 index dd0fbb0..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_pwr.h +++ /dev/null @@ -1,67 +0,0 @@ -/*! - \file usbd_pwr.h - \brief USB device power management functions prototype - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_PWR_H -#define __USBD_PWR_H - -#include "usbd_core.h" - -/* static inline function definitions */ -/*! - \brief first operation of USB wakeup is to wakeup MCU - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void resume_mcu (usb_dev *udev) -{ - udev->drv_handler->suspend_leave(); -} - -/*! - \brief set USB device to suspend mode - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_to_suspend (usb_dev *udev) -{ - udev->drv_handler->suspend(); -} - -/* function declarations */ -/* start to remote wakeup */ -void usbd_remote_wakeup_active (usb_dev *udev); - -#endif /* __USBD_PWR_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_transc.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_transc.h deleted file mode 100644 index 663c1ae..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Include/usbd_transc.h +++ /dev/null @@ -1,64 +0,0 @@ -/*! - \file usbd_transc.h - \brief USBD transaction - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USB_TRANSC_H -#define __USB_TRANSC_H - -#include "usbd_core.h" - -/*! - \brief USB transaction configure - \param[in] transc: pointer to USB device transaction instance - \param[in] buf: transfer data buffer - \param[in] len: transfer data length - \param[in] count: transfer data counter - \param[out] none - \retval none -*/ -__STATIC_INLINE void usb_transc_config (usb_transc *transc, uint8_t *buf, uint16_t len, uint16_t count) -{ - transc->xfer_buf = buf; - transc->xfer_len = len; - transc->xfer_count = count; -} - -/* function declarations */ -/* process USB SETUP transaction */ -void _usb_setup_transc (usb_dev *udev, uint8_t ep_num); -/* process USB OUT transaction */ -void _usb_out0_transc (usb_dev *udev, uint8_t ep_num); -/* process USB IN transaction */ -void _usb_in0_transc (usb_dev *udev, uint8_t ep_num); - -#endif /* __USB_TRANSC_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_core.c deleted file mode 100644 index f092d96..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_core.c +++ /dev/null @@ -1,127 +0,0 @@ -/*! - \file usbd_core.c - \brief USB device driver - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_core.h" -#include "usbd_enum.h" -#include "usbd_transc.h" -#include "usbd_lld_core.h" - -usbd_int_cb_struct *usbd_int_fops = NULL; - -/*! - \brief configure USB device initialization - \param[in] udev: pointer to USB core instance - \param[in] desc: pointer to USB descriptor - \param[in] usbc: USB class - \param[out] none - \retval none -*/ -void usbd_init (usb_dev *udev, usb_desc *desc, usb_class *usbc) -{ - /* configure USBD core basic attributes */ - usbd_core.basic.max_ep_count = 8U; - usbd_core.basic.twin_buf = 1U; - usbd_core.basic.ram_size = 512U; - - usbd_core.dev = udev; - - udev->desc = desc; - udev->class_core = usbc; - udev->drv_handler = &usbd_drv_handler; - - udev->ep_transc[0][TRANSC_SETUP] = _usb_setup_transc; - udev->ep_transc[0][TRANSC_OUT] = _usb_out0_transc; - udev->ep_transc[0][TRANSC_IN] = _usb_in0_transc; - - /* configure power management */ - udev->pm.power_mode = (udev->desc->config_desc[7] & 0x40U) >> 5; - - /* enable USB suspend */ - udev->pm.suspend_enabled = 1U; - - /* USB low level initialization */ - udev->drv_handler->init(); - - /* create serial string */ - serial_string_get((uint16_t *)udev->desc->strings[STR_IDX_SERIAL]); -} - -/*! - \brief endpoint prepare to receive data - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[in] pbuf: user buffer address pointer - \param[in] buf_len: buffer length - \param[out] none - \retval none -*/ -void usbd_ep_recev (usb_dev *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len) -{ - /* configure the transaction level parameters */ - usb_transc *transc = &udev->transc_out[EP_ID(ep_addr)]; - - usb_transc_config(transc, pbuf, buf_len, 0U); - - /* enable endpoint to receive */ - udev->drv_handler->ep_rx_enable(udev, ep_addr); -} - -/*! - \brief endpoint prepare to transmit data - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[in] pbuf: transmit buffer address pointer - \param[in] buf_len: buffer length - \param[out] none - \retval none -*/ -void usbd_ep_send (usb_dev *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len) -{ - uint8_t ep_num = EP_ID(ep_addr); - - usb_transc *transc = &udev->transc_in[ep_num]; - - uint16_t len = USB_MIN(buf_len, transc->max_len); - - /* configure the transaction level parameters */ - udev->drv_handler->ep_write(pbuf, ep_num, len); - - usb_transc_config(transc, pbuf + len, buf_len - len, len); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_enum.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_enum.c deleted file mode 100644 index 759afb7..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_enum.c +++ /dev/null @@ -1,747 +0,0 @@ -/*! - \file usbd_enum.c - \brief USB enumeration function - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_enum.h" -#include "usbd_transc.h" - -/* USB enumeration handle functions */ -static usb_reqsta _usb_std_getstatus (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_clearfeature (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setfeature (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setaddress (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_getdescriptor (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setdescriptor (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_getconfiguration (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setconfiguration (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_reserved (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_getinterface (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setinterface (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_synchframe (usb_dev *udev, usb_req *req); - -static uint8_t* _usb_dev_desc_get (usb_dev *udev, uint8_t index, uint16_t *len); -static uint8_t* _usb_config_desc_get (usb_dev *udev, uint8_t index, uint16_t *len); -static uint8_t* _usb_str_desc_get (usb_dev *udev, uint8_t index, uint16_t *len); -static uint8_t* _usb_bos_desc_get (usb_dev *udev, uint8_t index, uint16_t *len); - -static void int_to_unicode (uint32_t value, uint8_t *pbuf, uint8_t len); - -/* standard device request handler */ -static usb_reqsta (*_std_dev_req[]) (usb_dev *udev, usb_req *req) = { - [USB_GET_STATUS] = _usb_std_getstatus, - [USB_CLEAR_FEATURE] = _usb_std_clearfeature, - [USB_RESERVED2] = _usb_std_reserved, - [USB_SET_FEATURE] = _usb_std_setfeature, - [USB_RESERVED4] = _usb_std_reserved, - [USB_SET_ADDRESS] = _usb_std_setaddress, - [USB_GET_DESCRIPTOR] = _usb_std_getdescriptor, - [USB_SET_DESCRIPTOR] = _usb_std_setdescriptor, - [USB_GET_CONFIGURATION] = _usb_std_getconfiguration, - [USB_SET_CONFIGURATION] = _usb_std_setconfiguration, - [USB_GET_INTERFACE] = _usb_std_getinterface, - [USB_SET_INTERFACE] = _usb_std_setinterface, - [USB_SYNCH_FRAME] = _usb_std_synchframe, -}; - -/* get standard descriptor handler */ -static uint8_t* (*std_desc_get[])(usb_dev *udev, uint8_t index, uint16_t *len) = { - [USB_DESCTYPE_DEV - 1U] = _usb_dev_desc_get, - [USB_DESCTYPE_CONFIG - 1U] = _usb_config_desc_get, - [USB_DESCTYPE_STR - 1U] = _usb_str_desc_get -}; - -/*! - \brief handle USB standard device request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device operation cur_status -*/ -usb_reqsta usbd_standard_request (usb_dev *udev, usb_req *req) -{ - /* call device request handle function */ - return (*_std_dev_req[req->bRequest]) (udev, req); -} - -/*! - \brief handle USB device class request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device class request - \param[out] none - \retval USB device request status -*/ -usb_reqsta usbd_class_request (usb_dev *udev, usb_req *req) -{ - if ((uint8_t)USBD_CONFIGURED == udev->cur_status) { - if (BYTE_LOW(req->wIndex) < USBD_ITF_MAX_NUM) { - /* call device class handle function */ - return (usb_reqsta)udev->class_core->req_process(udev, req); - } - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB vendor request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB vendor request - \param[out] none - \retval USB device request status -*/ -usb_reqsta usbd_vendor_request (usb_dev *udev, usb_req *req) -{ - (void)udev; - (void)req; - - /* added by user */ - - return REQ_NOTSUPP; -} - -/*! - \brief no operation, just for reserved - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_reserved (usb_dev *udev, usb_req *req) -{ - (void)udev; - (void)req; - - /* no operation */ - return REQ_NOTSUPP; -} - -/*! - \brief get the device descriptor - \param[in] udev: pointer to USB device instance - \param[in] index: no use - \param[out] len: data length pointer - \retval descriptor buffer pointer -*/ -static uint8_t* _usb_dev_desc_get (usb_dev *udev, uint8_t index, uint16_t *len) -{ - (void)index; - - *len = udev->desc->dev_desc[0]; - - return udev->desc->dev_desc; -} - -/*! - \brief get the configuration descriptor - \brief[in] udev: pointer to USB device instance - \brief[in] index: no use - \param[out] len: data length pointer - \retval descriptor buffer pointer -*/ -static uint8_t* _usb_config_desc_get (usb_dev *udev, uint8_t index, uint16_t *len) -{ - (void)index; - - *len = udev->desc->config_desc[2] | (udev->desc->config_desc[3]<< 8U); - - return udev->desc->config_desc; -} - -/*! - \brief get the BOS descriptor - \brief[in] udev: pointer to USB device instance - \brief[in] index: no use - \param[out] len: data length pointer - \retval descriptor buffer pointer -*/ -static uint8_t* _usb_bos_desc_get (usb_dev *udev, uint8_t index, uint16_t *len) -{ - if (NULL != udev->desc->bos_desc) { - (void)index; - - *len = (uint16_t)udev->desc->bos_desc[2] | (uint16_t)((uint16_t)udev->desc->bos_desc[3] << 8); - - return udev->desc->bos_desc; - } else { - *len = 0U; - - return NULL; - } -} - -/*! - \brief get string descriptor - \param[in] udev: pointer to USB device instance - \param[in] index: string descriptor index - \param[out] len: pointer to string length - \retval string descriptor -*/ -static uint8_t* _usb_str_desc_get (usb_dev *udev, uint8_t index, uint16_t *len) -{ - uint8_t* desc = udev->desc->strings[index]; - - *len = desc[0]; - - return desc; -} - -/*! - \brief handle Get_Status request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_getstatus (usb_dev *udev, usb_req *req) -{ - uint8_t recp = BYTE_LOW(req->wIndex); - - usb_reqsta req_status = REQ_NOTSUPP; - - static uint8_t status[2] = {0U}; - - switch(req->bmRequestType & USB_RECPTYPE_MASK) { - /* handle device get status request */ - case USB_RECPTYPE_DEV: - switch (udev->cur_status) { - case USBD_ADDRESSED: - case USBD_CONFIGURED: - if (udev->pm.power_mode) { - status[0] = USB_STATUS_SELF_POWERED; - } else { - status[0] = 0U; - } - - if (udev->pm.remote_wakeup) { - status[0] |= USB_STATUS_REMOTE_WAKEUP; - } else { - status[0] = 0U; - } - - req_status = REQ_SUPP; - break; - - default: - break; - } - break; - - /* handle interface get status request */ - case USB_RECPTYPE_ITF: - if (((uint8_t)USBD_CONFIGURED == udev->cur_status) && (recp < USBD_ITF_MAX_NUM)) { - req_status = REQ_SUPP; - } - break; - - /* handle endpoint get status request */ - case USB_RECPTYPE_EP: - if ((uint8_t)USBD_CONFIGURED == udev->cur_status) { - if (0x80U == (recp & 0x80U)) { - status[0] = udev->transc_in[EP_ID(recp)].ep_stall; - } else { - status[0] = udev->transc_out[recp].ep_stall; - } - req_status = REQ_SUPP; - } - break; - - default: - break; - } - - if (REQ_SUPP == req_status) { - usb_transc_config(&udev->transc_in[0], status, 2U, 2U); - } - - return req_status; -} - -/*! - \brief handle USB Clear_Feature request - \param[in] udev: pointer to USB device instance - \param[in] req: USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_clearfeature (usb_dev *udev, usb_req *req) -{ - uint8_t ep = 0U; - - switch (req->bmRequestType & (uint8_t)USB_RECPTYPE_MASK) { - case USB_RECPTYPE_DEV: - switch (udev->cur_status) { - case USBD_ADDRESSED: - case USBD_CONFIGURED: - /* clear device remote wakeup feature */ - if ((uint16_t)USB_FEATURE_REMOTE_WAKEUP == req->wValue) { - udev->pm.remote_wakeup = 0U; - - return REQ_SUPP; - } - break; - - default: - break; - } - break; - - case USB_RECPTYPE_EP: - /* get endpoint address */ - ep = BYTE_LOW(req->wIndex); - - if ((uint8_t)USBD_CONFIGURED == udev->cur_status) { - /* clear endpoint halt feature */ - if (((uint16_t)USB_FEATURE_EP_HALT == req->wValue) && (!CTL_EP(ep))) { - usbd_ep_clear_stall(udev, ep); - - udev->class_core->req_process(udev, req); - - return REQ_SUPP; - } - } - break; - - case USB_RECPTYPE_ITF: - break; - - default: - break; - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB Set_Feature request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_setfeature (usb_dev *udev, usb_req *req) -{ - uint8_t ep = 0U; - - switch (req->bmRequestType & (uint8_t)USB_RECPTYPE_MASK) { - case USB_RECPTYPE_DEV: - switch (udev->cur_status) { - case USBD_ADDRESSED: - case USBD_CONFIGURED: - /* set device remote wakeup feature */ - if ((uint16_t)USB_FEATURE_REMOTE_WAKEUP == req->wValue) { - udev->pm.remote_wakeup = 1U; - - return REQ_SUPP; - } - break; - - default: - break; - } - break; - - case USB_RECPTYPE_EP: - /* get endpoint address */ - ep = BYTE_LOW(req->wIndex); - - if ((uint8_t)USBD_CONFIGURED == udev->cur_status) { - /* set endpoint halt feature */ - if (((uint8_t)USB_FEATURE_EP_HALT == req->wValue) && (!CTL_EP(ep))) { - usbd_ep_stall(udev, ep); - - return REQ_SUPP; - } - } - break; - - case USB_RECPTYPE_ITF: - break; - - default: - break; - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB Set_Address request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_setaddress (usb_dev *udev, usb_req *req) -{ - if ((0U == req->wIndex) && (0U == req->wLength)) { - udev->dev_addr = (uint8_t)(req->wValue) & 0x7FU; - - if (udev->cur_status != (uint8_t)USBD_CONFIGURED) { - if (udev->dev_addr) { - udev->cur_status = (uint8_t)USBD_ADDRESSED; - } else { - udev->cur_status = (uint8_t)USBD_DEFAULT; - } - - return REQ_SUPP; - } - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB Get_Descriptor request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_getdescriptor (usb_dev *udev, usb_req *req) -{ - uint8_t desc_type = 0U; - uint8_t desc_index = 0U; - - usb_reqsta status = REQ_NOTSUPP; - - usb_transc *transc = &udev->transc_in[0]; - - switch (req->bmRequestType & USB_RECPTYPE_MASK) { - case USB_RECPTYPE_DEV: - desc_type = BYTE_HIGH(req->wValue); - desc_index = BYTE_LOW(req->wValue); - - switch (desc_type) { - case USB_DESCTYPE_DEV: - transc->xfer_buf = std_desc_get[desc_type - 1U](udev, desc_index, &transc->xfer_len); - if (64U == req->wLength) { - transc->xfer_len = 8U; - } - break; - - case USB_DESCTYPE_CONFIG: - transc->xfer_buf = std_desc_get[desc_type - 1U](udev, desc_index, &transc->xfer_len); - break; - - case USB_DESCTYPE_STR: - if (desc_index < STR_IDX_MAX) { - transc->xfer_buf = std_desc_get[desc_type - 1U](udev, desc_index, &transc->xfer_len); - } - break; - - case USB_DESCTYPE_ITF: - case USB_DESCTYPE_EP: - case USB_DESCTYPE_DEV_QUALIFIER: - case USB_DESCTYPE_OTHER_SPD_CONFIG: - case USB_DESCTYPE_ITF_POWER: - break; - - case USB_DESCTYPE_BOS: - transc->xfer_buf = _usb_bos_desc_get(udev, desc_index, &transc->xfer_len); - break; - - default: - break; - } - break; - - case USB_RECPTYPE_ITF: - /* get device class special descriptor */ - status = (usb_reqsta)(udev->class_core->req_process(udev, req)); - break; - - case USB_RECPTYPE_EP: - break; - - default: - break; - } - - if ((transc->xfer_len) && (req->wLength)) { - transc->xfer_len = USB_MIN(transc->xfer_len, req->wLength); - - if ((transc->xfer_len < udev->control.req.wLength) && - (0U == transc->xfer_len % transc->max_len)) { - udev->control.ctl_zlp = 1U; - } - - status = REQ_SUPP; - } - - return status; -} - -/*! - \brief handle USB Set_Descriptor request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_setdescriptor (usb_dev *udev, usb_req *req) -{ - (void)udev; - (void)req; - - /* no handle */ - return REQ_SUPP; -} - -/*! - \brief handle USB Get_Configuration request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_getconfiguration (usb_dev *udev, usb_req *req) -{ - (void)req; - - usb_reqsta req_status = REQ_NOTSUPP; - - switch (udev->cur_status) { - case USBD_ADDRESSED: - if (0U == udev->config) { - req_status = REQ_SUPP; - } - break; - - case USBD_CONFIGURED: - if (udev->config) { - req_status = REQ_SUPP; - } - break; - - default: - break; - } - - if (REQ_SUPP == req_status) { - usb_transc_config(&udev->transc_in[0], &(udev->config), 1U, 1U); - } - - return req_status; -} - -/*! - \brief handle USB Set_Configuration request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device operation cur_status -*/ -static usb_reqsta _usb_std_setconfiguration (usb_dev *udev, usb_req *req) -{ - static uint8_t config; - usb_reqsta status = REQ_NOTSUPP; - - config = (uint8_t)(req->wValue); - - if (config <= USBD_CFG_MAX_NUM) { - switch (udev->cur_status) { - case USBD_ADDRESSED: - if (config){ - (void)udev->class_core->init(udev, config); - - udev->config = config; - udev->cur_status = (uint8_t)USBD_CONFIGURED; - } - status = REQ_SUPP; - break; - - case USBD_CONFIGURED: - if (0U == config) { - (void)udev->class_core->deinit(udev, config); - - udev->config = config; - udev->cur_status = (uint8_t)USBD_ADDRESSED; - } else if (config != udev->config) { - /* clear old configuration */ - (void)udev->class_core->deinit(udev, udev->config); - - /* set new configuration */ - udev->config = config; - - (void)udev->class_core->init(udev, config); - } else { - /* no operation */ - } - status = REQ_SUPP; - break; - - case USBD_DEFAULT: - break; - - default: - break; - } - } - - return status; -} - -/*! - \brief handle USB Get_Interface request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_getinterface (usb_dev *udev, usb_req *req) -{ - switch (udev->cur_status) { - case USBD_DEFAULT: - break; - - case USBD_ADDRESSED: - break; - - case USBD_CONFIGURED: - if (BYTE_LOW(req->wIndex) < USBD_ITF_MAX_NUM) { - usb_transc_config(&udev->transc_in[0], &(udev->class_core->req_altset), 1U, 1U); - - return REQ_SUPP; - } - break; - - default: - break; - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB Set_Interface request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_setinterface (usb_dev *udev, usb_req *req) -{ - switch (udev->cur_status) { - case USBD_DEFAULT: - break; - - case USBD_ADDRESSED: - break; - - case USBD_CONFIGURED: - if (BYTE_LOW(req->wIndex) < USBD_ITF_MAX_NUM) { - udev->class_core->req_altset = (uint8_t)req->wValue; - - return REQ_SUPP; - } - break; - - default: - break; - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB SynchFrame request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_synchframe (usb_dev *udev, usb_req *req) -{ - (void)udev; - (void)req; - - /* no handle */ - return REQ_SUPP; -} - -/*! - \brief convert hex 32bits value into unicode char - \param[in] value: Hex 32bits value - \param[in] pbuf: buffer pointer to store unicode char - \param[in] len: value length - \param[out] none - \retval none -*/ -static void int_to_unicode (uint32_t value, uint8_t *pbuf, uint8_t len) -{ - uint8_t index = 0U; - - for (index = 0U; index < len; index++) { - if ((value >> 28U) < 0x0AU) { - pbuf[2U * index] = (uint8_t)((value >> 28) + '0'); - } else { - pbuf[2U * index] = (uint8_t)((value >> 28) + 'A' - 10U); - } - - value = value << 4U; - - pbuf[2U * index + 1U] = 0U; - } -} - -/*! - \brief convert hex 32bits value into unicode char - \param[in] unicode_str: pointer to unicode string - \param[out] none - \retval none -*/ -void serial_string_get (uint16_t *unicode_str) -{ - if (6U != (unicode_str[0] & 0x00FFU)) { - uint32_t DeviceSerial0, DeviceSerial1, DeviceSerial2; - - DeviceSerial0 = *(uint32_t*)DEVICE_ID1; - DeviceSerial1 = *(uint32_t*)DEVICE_ID2; - DeviceSerial2 = *(uint32_t*)DEVICE_ID3; - - DeviceSerial0 += DeviceSerial2; - - if (0U != DeviceSerial0) { - int_to_unicode(DeviceSerial0, (uint8_t*)&(unicode_str[1]), 8U); - int_to_unicode(DeviceSerial1, (uint8_t*)&(unicode_str[9]), 4U); - } - } else { - uint32_t device_serial = *(uint32_t*)DEVICE_ID; - - if (0U != device_serial) { - unicode_str[1] = (uint16_t)(device_serial & 0x0000FFFFU); - unicode_str[2] = (uint16_t)((device_serial & 0xFFFF0000U) >> 16U); - - } - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_pwr.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_pwr.c deleted file mode 100644 index 09ff36a..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_pwr.c +++ /dev/null @@ -1,60 +0,0 @@ -/*! - \file usbd_pwr.c - \brief USB device power management driver - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_pwr.h" - -/*! - \brief start to remote wakeup - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -void usbd_remote_wakeup_active(usb_dev *udev) -{ - resume_mcu(udev); - -#ifdef LPM_ENABLED - if(1U == udev->lpm.L1_remote_wakeup){ - udev->drv_handler->resume(udev); - - udev->lpm.L1_resume = 1U; - } -#endif /* LPM_ENABLED */ - - if(1U == udev->pm.remote_wakeup){ - udev->pm.remote_wakeup_on = 1U; - udev->pm.esof_count = 15U; - udev->drv_handler->resume(udev); - } -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_transc.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_transc.c deleted file mode 100644 index bc79094..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/device/Source/usbd_transc.c +++ /dev/null @@ -1,208 +0,0 @@ -/*! - \file usbd_transc.c - \brief USBD transaction function - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_enum.h" -#include "usbd_transc.h" - -/* local function prototypes ('static') */ -static inline void usb_stall_transc (usb_dev *udev); -static inline void usb_ctl_status_in (usb_dev *udev); -static inline void usb_ctl_data_in (usb_dev *udev); -static inline void usb_ctl_out (usb_dev *udev); -static inline void usb_0len_packet_send (usb_dev *udev); - -/*! - \brief USB setup stage processing - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint identifier(0..7) - \param[out] none - \retval none -*/ -void _usb_setup_transc (usb_dev *udev, uint8_t ep_num) -{ - (void)ep_num; - - usb_reqsta reqstat = REQ_NOTSUPP; - - uint16_t count = udev->drv_handler->ep_read((uint8_t *)(&udev->control.req), 0U, (uint8_t)EP_BUF_SNG); - - if (count != USB_SETUP_PACKET_LEN) { - usb_stall_transc(udev); - - return; - } - - switch (udev->control.req.bmRequestType & USB_REQTYPE_MASK) { - /* standard device request */ - case USB_REQTYPE_STRD: - reqstat = usbd_standard_request(udev, &udev->control.req); - break; - - /* device class request */ - case USB_REQTYPE_CLASS: - reqstat = usbd_class_request(udev, &udev->control.req); - break; - - /* vendor defined request */ - case USB_REQTYPE_VENDOR: - reqstat = usbd_vendor_request(udev, &udev->control.req); - break; - - default: - break; - } - - if (REQ_SUPP == reqstat) { - if (0U == udev->control.req.wLength) { - /* USB control transfer status in stage */ - usb_ctl_status_in(udev); - } else { - if (udev->control.req.bmRequestType & 0x80U) { - usb_ctl_data_in(udev); - } else { - /* USB control transfer data out stage */ - usb_ctl_out(udev); - } - } - } else { - usb_stall_transc(udev); - } -} - -/*! - \brief data out stage processing - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint identifier(0..7) - \param[out] none - \retval none -*/ -void _usb_out0_transc (usb_dev *udev, uint8_t ep_num) -{ - if (((uint8_t)USBD_CONFIGURED == udev->cur_status) && (udev->class_core->ctlx_out != NULL)) { - /* device class handle */ - (void)udev->class_core->ctlx_out(udev); - } - - usb_transc_config(&udev->transc_out[ep_num], NULL, 0U, 0U); - - /* enter the control transaction status in stage */ - usb_ctl_status_in(udev); -} - -/*! - \brief data in stage processing - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint identifier(0..7) - \param[out] none - \retval none -*/ -void _usb_in0_transc (usb_dev *udev, uint8_t ep_num) -{ - (void)ep_num; - - if (udev->control.ctl_zlp) { - /* send 0 length packet */ - usb_0len_packet_send(udev); - - udev->control.ctl_zlp = 0U; - } - - if (((uint8_t)USBD_CONFIGURED == udev->cur_status) && (udev->class_core->ctlx_in != NULL)) { - (void)udev->class_core->ctlx_in(udev); - } - - /* USB control transfer status out stage */ - usb_ctl_out(udev); - - if (0U != udev->dev_addr) { - udev->drv_handler->set_addr(udev); - - udev->dev_addr = 0U; - } -} - -/*! - \brief USB stalled transaction - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_stall_transc (usb_dev *udev) -{ - usbd_ep_stall(udev, 0x0U); -} - -/*! - \brief USB control transaction status in stage - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_ctl_status_in (usb_dev *udev) -{ - udev->drv_handler->ep_write(udev->transc_in[0].xfer_buf, 0U, 0U); -} - -/*! - \brief USB control transaction data in stage - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_ctl_data_in (usb_dev *udev) -{ - usbd_ep_send(udev, 0U, udev->transc_in[0].xfer_buf, udev->transc_in[0].xfer_len); -} - -/*! - \brief USB control transaction data out & status out stage - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_ctl_out (usb_dev *udev) -{ - udev->drv_handler->ep_rx_enable(udev, 0U); -} - -/*! - \brief USB send 0 length data packet - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_0len_packet_send (usb_dev *udev) -{ - udev->drv_handler->ep_write(udev->transc_in[0].xfer_buf, 0U, 0U); -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_core.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_core.h deleted file mode 100644 index 779e77f..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_core.h +++ /dev/null @@ -1,73 +0,0 @@ -/*! - \file usbd_lld_core.h - \brief USB device low level driver core - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_LLD_CORE_H -#define __USBD_LLD_CORE_H - -#include "usbd_lld_regs.h" -#include "usbd_core.h" - -/* double buffer endpoint direction enumeration */ -enum dbuf_ep_dir -{ - DBUF_EP_IN, /*!< double buffer in direction */ - DBUF_EP_OUT, /*!< double buffer out direction */ - DBUF_EP_ERR, /*!< double buffer error direction */ -}; - -/* USBD endpoint ram structure */ -typedef struct -{ - __IO uint32_t tx_addr; /*!< transmission address */ - __IO uint32_t tx_count; /*!< transmission count */ - __IO uint32_t rx_addr; /*!< reception address */ - __IO uint32_t rx_count; /*!< reception count */ -} usbd_ep_ram; - -extern struct _usb_handler usbd_drv_handler; - -/* USB core driver structure */ -typedef struct -{ - usb_basic basic; - usb_dev *dev; -} usb_core_drv; - -extern usb_core_drv usbd_core; - -/* function declarations */ -/* free buffer used from application by toggling the SW_BUF byte */ -void user_buffer_free (uint8_t ep_num, uint8_t dir); - -#endif /* __USBD_LLD_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_int.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_int.h deleted file mode 100644 index 3a09dbf..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_int.h +++ /dev/null @@ -1,48 +0,0 @@ -/*! - \file usbd_lld_int.h - \brief USB device low level interrupt handler - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_LLD_INT_H -#define __USBD_LLD_INT_H - -#include "usbd_core.h" -#include "usbd_enum.h" -#include "usbd_pwr.h" - -/* function declarations */ -/* USB device interrupt service routine */ -void usbd_isr (void); -/* handle USB high priority successful transfer event */ -void usbd_int_hpst (usb_dev *udev); - -#endif /* __USBD_LLD_INT_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_regs.h b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_regs.h deleted file mode 100644 index 55b43e0..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Include/usbd_lld_regs.h +++ /dev/null @@ -1,227 +0,0 @@ -/*! - \file usbd_lld_regs.h - \brief USB device low level registers - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_LLD_REGS_H -#define __USBD_LLD_REGS_H - -#include "usbd_conf.h" - -/* USB device registers base address */ -#define USBD USBD_BASE -#define USBD_RAM USBD_RAM_BASE - -/* registers definitions */ -/* common registers */ -#define USBD_CTL (REG32(USBD + 0x40U)) /*!< control register */ -#define USBD_INTF (REG32(USBD + 0x44U)) /*!< interrupt flag register */ -#define USBD_STAT (REG32(USBD + 0x48U)) /*!< status register */ -#define USBD_DADDR (REG32(USBD + 0x4CU)) /*!< device address register */ -#define USBD_BADDR (REG32(USBD + 0x50U)) /*!< buffer address register */ -#define USBD_LPMCS (REG32(USBD + 0x54U)) /*!< USBD LPM control and status register */ - -/* endpoint control and status register */ -#define USBD_EPxCS(ep_num) (REG32(USBD + (ep_num) * 4U)) /*!< endpoint x control and status register address */ - -/* bits definitions */ -/* USBD_CTL */ -#define CTL_STIE BIT(15) /*!< successful transfer interrupt enable mask */ -#define CTL_PMOUIE BIT(14) /*!< packet memory overrun/underrun interrupt enable mask */ -#define CTL_ERRIE BIT(13) /*!< error interrupt enable mask */ -#define CTL_WKUPIE BIT(12) /*!< wakeup interrupt enable mask */ -#define CTL_SPSIE BIT(11) /*!< suspend state interrupt enable mask */ -#define CTL_RSTIE BIT(10) /*!< reset interrupt enable mask */ -#define CTL_SOFIE BIT(9) /*!< start of frame interrupt enable mask */ -#define CTL_ESOFIE BIT(8) /*!< expected start of frame interrupt enable mask */ -#define CTL_L1REQIE BIT(7) /*!< LPM L1 state request interrupt enable */ -#define CTL_L1RSREQ BIT(5) /*!< LPM L1 resume request */ -#define CTL_RSREQ BIT(4) /*!< resume request */ -#define CTL_SETSPS BIT(3) /*!< set suspend state */ -#define CTL_LOWM BIT(2) /*!< low-power mode at suspend state */ -#define CTL_CLOSE BIT(1) /*!< goes to close state */ -#define CTL_SETRST BIT(0) /*!< set USB reset */ - -#ifdef LPM_ENABLED -#define USBD_INTEN BITS(7, 15) /*!< USBD interrupt enable bits */ -#else -#define USBD_INTEN BITS(8, 15) /*!< USBD interrupt enable bits */ -#endif -/* USBD_INTF */ -#define INTF_STIF BIT(15) /*!< successful transfer interrupt flag (read only bit) */ -#define INTF_PMOUIF BIT(14) /*!< packet memory overrun/underrun interrupt flag (clear-only bit) */ -#define INTF_ERRIF BIT(13) /*!< error interrupt flag (clear-only bit) */ -#define INTF_WKUPIF BIT(12) /*!< wakeup interrupt flag (clear-only bit) */ -#define INTF_SPSIF BIT(11) /*!< suspend state interrupt flag (clear-only bit) */ -#define INTF_RSTIF BIT(10) /*!< reset interrupt flag (clear-only bit) */ -#define INTF_SOFIF BIT(9) /*!< start of frame interrupt flag (clear-only bit) */ -#define INTF_ESOFIF BIT(8) /*!< expected start of frame interrupt flag(clear-only bit) */ -#define INTF_L1REQ BIT(7) /*!< LPM L1 transaction is successfully received and acknowledged */ -#define INTF_DIR BIT(4) /*!< direction of transaction (read-only bit) */ -#define INTF_EPNUM BITS(0, 3) /*!< endpoint number (read-only bit) */ - -/* USBD_STAT */ -#define STAT_RXDP BIT(15) /*!< data plus line status */ -#define STAT_RXDM BIT(14) /*!< data minus line status */ -#define STAT_LOCK BIT(13) /*!< locked the USB */ -#define STAT_SOFLN BITS(11, 12) /*!< SOF lost number */ -#define STAT_FCNT BITS(0, 10) /*!< frame number count */ - -/* USBD_DADDR */ -#define DADDR_USBEN BIT(7) /*!< USB module enable */ -#define DADDR_USBADDR BITS(0, 6) /*!< USB device address */ - -/* USBD_EPxCS */ -#define EPxCS_RX_ST BIT(15) /*!< endpoint reception successful transferred */ -#define EPxCS_RX_DTG BIT(14) /*!< endpoint reception data PID toggle */ -#define EPxCS_RX_STA BITS(12, 13) /*!< endpoint reception status bits */ -#define EPxCS_SETUP BIT(11) /*!< endpoint setup transaction completed */ -#define EPxCS_CTL BITS(9, 10) /*!< endpoint type control */ -#define EPxCS_KCTL BIT(8) /*!< endpoint kind control */ -#define EPxCS_TX_ST BIT(7) /*!< endpoint transmission successful transfer */ -#define EPxCS_TX_DTG BIT(6) /*!< endpoint transmission data toggle */ -#define EPxCS_TX_STA BITS(4, 5) /*!< endpoint transmission transfers status bits */ -#define EPxCS_AR BITS(0, 3) /*!< endpoint address */ - -/* USBD_LPMCS */ -#define LPMCS_BLSTAT BITS(4, 7) /*!< bLinkState value */ -#define LPMCS_REMWK BIT(3) /*!< bRemoteWake value */ -#define LPMCS_LPMACK BIT(1) /*!< LPM token acknowledge enable */ -#define LPMCS_LPMEN BIT(0) /*!< LPM support enable */ - -/* constants definitions */ -/* endpoint control and status register mask (no toggle fields) */ -#define EPCS_MASK (EPxCS_RX_ST | EPxCS_SETUP | \ - EPxCS_CTL | EPxCS_KCTL | EPxCS_TX_ST | EPxCS_AR) - -/* EPxCS_CTL[1:0] endpoint type control */ -#define ENDP_TYPE(regval) (EPxCS_CTL & ((regval) << 9U)) - -#define EP_BULK ENDP_TYPE(0U) /* bulk transfers */ -#define EP_CONTROL ENDP_TYPE(1U) /* control transfers */ -#define EP_ISO ENDP_TYPE(2U) /* isochronous transfers */ -#define EP_INTERRUPT ENDP_TYPE(3U) /* interrupt transfers */ -#define EP_CTL_MASK (~EPxCS_CTL & EPCS_MASK) - -/* endpoint kind control mask */ -#define EPKCTL_MASK (~EPxCS_KCTL & EPCS_MASK) - -/* EPxCS_TX_STA[1:0] status for TX transfer */ -#define ENDP_TXSTAT(regval) (EPxCS_TX_STA & ((regval) << 4U)) - -#define EPTX_DISABLED ENDP_TXSTAT(0U) /* transmission state is disabled */ -#define EPTX_STALL ENDP_TXSTAT(1U) /* transmission state is STALL */ -#define EPTX_NAK ENDP_TXSTAT(2U) /* transmission state is NAK */ -#define EPTX_VALID ENDP_TXSTAT(3U) /* transmission state is enabled */ -#define EPTX_DTGMASK (EPxCS_TX_STA | EPCS_MASK) - -/* EPxCS_RX_STA[1:0] status for RX transfer */ -#define ENDP_RXSTAT(regval) (EPxCS_RX_STA & ((regval) << 12U)) - -#define EPRX_DISABLED ENDP_RXSTAT(0U) /* reception state is disabled */ -#define EPRX_STALL ENDP_RXSTAT(1U) /* reception state is STALL */ -#define EPRX_NAK ENDP_RXSTAT(2U) /* reception state is NAK */ -#define EPRX_VALID ENDP_RXSTAT(3U) /* reception state is enabled */ -#define EPRX_DTGMASK (EPxCS_RX_STA | EPCS_MASK) - -/* endpoint receive/transmission counter register bit definitions */ -#define EPRCNT_BLKSIZ BIT(15) /* reception data block size */ -#define EPRCNT_BLKNUM BITS(10, 14) /* reception data block number */ -#define EPRCNT_CNT BITS(0, 9) /* reception data count */ - -#define EPTCNT_CNT BITS(0, 9) /* transmisson data count */ - -/* interrupt flag clear bits */ -#define CLR(x) (USBD_INTF = ~INTF_##x) - -/* endpoint receive/transmission counter register bit offset */ -#define BLKSIZE_OFFSET (0x01U) -#define BLKNUM_OFFSET (0x05U) -#define RXCNT_OFFSET (0x0AU) - -#define TXCNT_OFFSET (0x0AU) - -#define BLKSIZE32_MASK (0x1fU) -#define BLKSIZE2_MASK (0x01U) - -#define BLKSIZE32_OFFSETMASK (0x05U) -#define BLKSIZE2_OFFSETMASK (0x01U) - -/* USBD operation macros */ - -/* TX or RX transfer status setting (bits EPTX_STA[1:0]) */ - -#define USBD_EP_TX_STAT_SET(ep, stat) do {\ - USBD_EPxCS(ep) = (USBD_EPxCS(ep) & (uint16_t)EPTX_DTGMASK) ^ (stat); \ -} while(0) - -#define USBD_EP_RX_STAT_SET(ep, stat) do {\ - USBD_EPxCS(ep) = (USBD_EPxCS(ep) & (uint16_t)EPRX_DTGMASK) ^ (stat); \ -} while(0) - -/* clear bit EPxCS_RX_ST/EPxCS_TX_ST in the endpoint control and status register */ - -#define USBD_EP_TX_ST_CLEAR(ep) do {\ - USBD_EPxCS(ep) &= ~EPxCS_TX_ST & (uint16_t)EPCS_MASK; \ -} while(0) - -#define USBD_EP_RX_ST_CLEAR(ep) do {\ - USBD_EPxCS(ep) &= ~EPxCS_RX_ST & (uint16_t)EPCS_MASK; \ -} while(0) - -/* toggle EPxCS_RX_DTG or EPxCS_TX_DTG bit in the endpoint control and status register */ - -#define USBD_TX_DTG_TOGGLE(ep) do {\ - USBD_EPxCS(ep) = EPxCS_TX_DTG | (USBD_EPxCS(ep) & EPCS_MASK); \ -} while(0) - -#define USBD_RX_DTG_TOGGLE(ep) do {\ - USBD_EPxCS(ep) = EPxCS_RX_DTG | (USBD_EPxCS(ep) & EPCS_MASK); \ -} while(0) - -/* clear EPxCS_RX_DTG or EPxCS_TX_DTG bit in the endpoint control and status register */ - -#define USBD_TX_DTG_CLEAR(ep) do {\ - if ((USBD_EPxCS(ep_num) & EPxCS_TX_DTG) != 0U) {\ - USBD_TX_DTG_TOGGLE(ep);\ - } \ -} while(0) - -#define USBD_RX_DTG_CLEAR(ep) do {\ - if ((USBD_EPxCS(ep_num) & EPxCS_RX_DTG) != 0U) {\ - USBD_RX_DTG_TOGGLE(ep);\ - } \ -} while(0) - -#define USBD_EP_DBL_BUF_SET(ep) (USBD_EPxCS(ep) = (USBD_EPxCS(ep) | EPxCS_KCTL) & EPCS_MASK) - -#endif /* __USBD_LLD_REGS_H */ diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Source/usbd_lld_core.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Source/usbd_lld_core.c deleted file mode 100644 index a4526cc..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Source/usbd_lld_core.c +++ /dev/null @@ -1,632 +0,0 @@ -/*! - \file usbd_lld_core.c - \brief USB device low level driver core - - \version 2020-07-17, V3.0.0, firmware for GD32F10x - \version 2021-08-10, V3.0.1, firmware for GD32F10x - \version 2021-08-18, V3.0.2, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_lld_core.h" -#include "usbd_enum.h" - -#define USB_EPTYPE_MASK 0x03U - -#if defined (__CC_ARM) /* ARM Compiler */ -static usbd_ep_ram btable_ep[EP_COUNT]__attribute__((at(USBD_RAM + 2 * (BTABLE_OFFSET & 0xFFF8)))); -#elif defined (__ICCARM__) /* IAR Compiler */ - __no_init usbd_ep_ram btable_ep[EP_COUNT] @(USBD_RAM + 2 * (BTABLE_OFFSET & 0xFFF8)); -#elif defined (__GNUC__) /* GNU GCC Compiler */ - usbd_ep_ram *btable_ep = (usbd_ep_ram *)(USBD_RAM + 2 * (BTABLE_OFFSET & 0xFFF8)); -#endif - -usb_core_drv usbd_core; - -static const uint32_t ep_type[] = { - [USB_EP_ATTR_CTL] = EP_CONTROL, - [USB_EP_ATTR_BULK] = EP_BULK, - [USB_EP_ATTR_INT] = EP_INTERRUPT, - [USB_EP_ATTR_ISO] = EP_ISO -}; - -/* local function prototypes ('static') */ -static void usbd_dp_pullup (FlagStatus status); -static void usbd_core_reset (void); -static void usbd_core_stop (void); -static void usbd_address_set (usb_dev *udev); -static void usbd_ep_reset (usb_dev *udev); -static void usbd_ep_setup (usb_dev *udev, uint8_t buf_kind, uint32_t buf_addr, const usb_desc_ep *ep_desc); -static void usbd_ep_rx_enable (usb_dev *udev, uint8_t ep_addr); -static void usbd_ep_disable (usb_dev *udev, uint8_t ep_addr); -static void usbd_ep_stall_set (usb_dev *udev, uint8_t ep_addr); -static void usbd_ep_stall_clear (usb_dev *udev, uint8_t ep_addr); -static void usbd_ep_data_write (uint8_t *user_fifo, uint8_t ep_num, uint16_t bytes); -static uint16_t usbd_ep_data_read (uint8_t *user_fifo, uint8_t ep_num, uint8_t buf_kind); -static void usbd_resume (usb_dev *udev); -static void usbd_suspend (void); -static void usbd_leave_suspend (void); -static uint8_t usbd_ep_status (usb_dev *udev, uint8_t ep_addr); - -struct _usb_handler usbd_drv_handler = { - .dp_pullup = usbd_dp_pullup, - .init = usbd_core_reset, - .deinit = usbd_core_stop, - .suspend = usbd_suspend, - .suspend_leave = usbd_leave_suspend, - .resume = usbd_resume, - .set_addr = usbd_address_set, - .ep_reset = usbd_ep_reset, - .ep_disable = usbd_ep_disable, - .ep_setup = usbd_ep_setup, - .ep_rx_enable = usbd_ep_rx_enable, - .ep_write = usbd_ep_data_write, - .ep_read = usbd_ep_data_read, - .ep_stall_set = usbd_ep_stall_set, - .ep_stall_clear = usbd_ep_stall_clear, - .ep_status_get = usbd_ep_status -}; - -/*! - \brief free buffer used from application by toggling the SW_BUF byte - \param[in] ep_num: endpoint identifier (0..7) - \param[in] dir: endpoint direction which can be OUT(0) or IN(1) - \param[out] none - \retval None -*/ -void user_buffer_free (uint8_t ep_num, uint8_t dir) -{ - if ((uint8_t)DBUF_EP_OUT == dir) { - USBD_TX_DTG_TOGGLE(ep_num); - } else if ((uint8_t)DBUF_EP_IN == dir) { - USBD_RX_DTG_TOGGLE(ep_num); - } else { - /* no operation */ - } -} - -/*! - \brief set the status of pull-up pin - \param[in] status: SET or RESET - \param[out] none - \retval none -*/ -static void usbd_dp_pullup (FlagStatus status) -{ - if (SET == status) { - gpio_bit_set(USB_PULLUP, USB_PULLUP_PIN); - } else { - gpio_bit_reset(USB_PULLUP, USB_PULLUP_PIN); - } -} - -/*! - \brief device core register initialization - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_core_reset (void) -{ - /* reset the CLOSE bit */ - USBD_CTL = CTL_SETRST; - - /* may be need wait some time(tSTARTUP) ... */ - - /* clear SETRST bit in USBD_CTL register */ - USBD_CTL = 0U; - - /* clear all pending interrupts */ - USBD_INTF = 0U; - - /* set descriptors table offset in USB dedicated SRAM */ - USBD_BADDR = BTABLE_OFFSET & 0xFFF8U; - -#ifdef LPM_ENABLED - /* enable L1REQ interrupt */ - USBD_CTL = CTL_L1REQIE; - - USBD_LPMCS = LPMCS_LPMACK | LPMCS_LPMEN; -#endif /* LPM_ENABLED */ - - /* enable all interrupts mask bits */ - USBD_CTL |= CTL_STIE | CTL_WKUPIE | CTL_SPSIE | CTL_SOFIE | CTL_ESOFIE | CTL_RSTIE; -} - -/*! - \brief device core register configure when stop device - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_core_stop (void) -{ - /* disable all interrupts and set USB reset */ - USBD_CTL = CTL_SETRST; - - /* clear all interrupt flags */ - USBD_INTF = 0U; - - /* close device */ - USBD_CTL = CTL_SETRST | CTL_CLOSE; -} - -/*! - \brief set device address - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void usbd_address_set (usb_dev *udev) -{ - USBD_DADDR = DADDR_USBEN | udev->dev_addr; -} - -/*! - \brief handle USB reset event - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void usbd_ep_reset (usb_dev *udev) -{ - uint8_t i = 0U; - - usb_transc *transc = &udev->transc_in[0]; - - btable_ep[0].tx_addr = EP0_TX_ADDR; - btable_ep[0].tx_count = 0U; - - transc->max_len = USBD_EP0_MAX_SIZE; - - transc = &udev->transc_out[0]; - - btable_ep[0].rx_addr = EP0_RX_ADDR; - - transc->max_len = USBD_EP0_MAX_SIZE; - - if (transc->max_len > 62U) { - btable_ep[0].rx_count = ((uint16_t)((uint16_t)transc->max_len << 5) - 1U) | 0x8000U; - } else { - btable_ep[0].rx_count = ((transc->max_len + 1U) & ~1U) << 9U; - } - - /* reset non-control endpoints */ - for (i = 1U; i < EP_COUNT; i++) { - USBD_EPxCS(i) = (USBD_EPxCS(i) & (~EPCS_MASK)) | i; - } - - /* clear endpoint 0 register */ - USBD_EPxCS(0U)= (uint16_t)(USBD_EPxCS(0U)); - - USBD_EPxCS(0U) = EP_CONTROL | EPRX_VALID | EPTX_NAK; - - /* set device address as default address 0 */ - USBD_DADDR = DADDR_USBEN; - - udev->cur_status = (uint8_t)USBD_DEFAULT; -} - -/*! - \brief endpoint initialization - \param[in] udev: pointer to USB core instance - \param[in] buf_kind: endpoint buffer kind - \param[in] buf_addr: endpoint buffer address - \param[in] ep_desc: pointer to endpoint descriptor - \param[out] none - \retval none -*/ -static void usbd_ep_setup (usb_dev *udev, uint8_t buf_kind, uint32_t buf_addr, const usb_desc_ep *ep_desc) -{ - uint8_t ep_addr = ep_desc->bEndpointAddress; - uint8_t ep_num = EP_ID(ep_addr); - uint16_t max_len = ep_desc->wMaxPacketSize; - - usb_transc *transc = NULL; - - /* set the endpoint type */ - USBD_EPxCS(ep_num) = ep_type[ep_desc->bmAttributes & USB_EPTYPE_MASK] | ep_num; - - if (EP_DIR(ep_addr)) { - transc = &udev->transc_in[ep_num]; - - transc->max_len = max_len; - - if ((uint8_t)EP_BUF_SNG == buf_kind) { - btable_ep[ep_num].tx_addr = buf_addr; - - /* configure the endpoint status as NAK status */ - USBD_EP_TX_STAT_SET(ep_num, EPTX_NAK); - } else if ((uint8_t)EP_BUF_DBL == buf_kind) { - USBD_EP_DBL_BUF_SET(ep_num); - - btable_ep[ep_num].tx_addr = buf_addr & 0xFFFFU; - btable_ep[ep_num].rx_addr = (buf_addr & 0xFFFF0000U) >> 16U; - - USBD_EP_TX_STAT_SET(ep_num, EPTX_VALID); - USBD_EP_RX_STAT_SET(ep_num, EPRX_DISABLED); - } else { - /* error operation */ - } - } else { - transc = &udev->transc_out[ep_num]; - - transc->max_len = max_len; - - if ((uint8_t)EP_BUF_SNG == buf_kind) { - btable_ep[ep_num].rx_addr = buf_addr; - } else if ((uint8_t)EP_BUF_DBL == buf_kind) { - USBD_EP_DBL_BUF_SET(ep_num); - - USBD_TX_DTG_TOGGLE(ep_num); - - btable_ep[ep_num].tx_addr = buf_addr & 0xFFFFU; - btable_ep[ep_num].rx_addr = (buf_addr & 0xFFFF0000U) >> 16U; - - if (max_len > 62U) { - btable_ep[ep_num].tx_count = (((uint32_t)max_len << 5) - 1U) | 0x8000U; - } else { - btable_ep[ep_num].tx_count = ((max_len + 1U) & ~1U) << 9U; - } - } else { - /* error operation */ - } - - if (max_len > 62U) { - btable_ep[ep_num].rx_count = (((uint32_t)max_len << 5U) - 1U) | 0x8000U; - } else { - btable_ep[ep_num].rx_count = ((max_len + 1U) & ~1U) << 9U; - } - - if ((uint8_t)EP_BUF_SNG == buf_kind) { - /* configure the endpoint status as NAK status */ - USBD_EP_RX_STAT_SET(ep_num, EPRX_NAK); - } else if ((uint8_t)EP_BUF_DBL == buf_kind) { - USBD_EP_RX_STAT_SET(ep_num, EPRX_DISABLED); - USBD_EP_TX_STAT_SET(ep_num, EPTX_NAK); - } else { - /* error operation */ - } - } -} - -/*! - \brief configure the endpoint when it is disabled - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -static void usbd_ep_disable (usb_dev *udev, uint8_t ep_addr) -{ - (void)udev; - - uint8_t ep_num = EP_ID(ep_addr); - - if (EP_DIR(ep_addr)) { - USBD_TX_DTG_CLEAR(ep_num); - - /* configure the endpoint status as DISABLED */ - USBD_EP_TX_STAT_SET(ep_num, EPTX_DISABLED); - } else { - USBD_RX_DTG_CLEAR(ep_num); - - /* configure the endpoint status as DISABLED */ - USBD_EP_RX_STAT_SET(ep_num, EPRX_DISABLED); - } -} - -/*! - \brief enable endpoint to receive - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -static void usbd_ep_rx_enable (usb_dev *udev, uint8_t ep_addr) -{ - (void)udev; - - /* enable endpoint to receive */ - USBD_EP_RX_STAT_SET(EP_ID(ep_addr), EPRX_VALID); -} - -/*! - \brief set an endpoint to STALL status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -static void usbd_ep_stall_set (usb_dev *udev, uint8_t ep_addr) -{ - uint8_t ep_num = EP_ID(ep_addr); - - if (0U == ep_num) { - USBD_EP_TX_STAT_SET(0U, EPTX_STALL); - USBD_EP_RX_STAT_SET(0U, EPRX_STALL); - } else { - if (EP_DIR(ep_addr)) { - udev->transc_in[ep_num].ep_stall = 1U; - - USBD_EP_TX_STAT_SET(ep_num, EPTX_STALL); - } else { - udev->transc_out[ep_num].ep_stall = 1U; - - USBD_EP_RX_STAT_SET(ep_num, EPRX_STALL); - } - } -} - -/*! - \brief clear endpoint stalled status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -static void usbd_ep_stall_clear (usb_dev *udev, uint8_t ep_addr) -{ - uint8_t ep_num = EP_ID(ep_addr); - - if (EP_DIR(ep_addr)) { - /* clear endpoint data toggle bit */ - USBD_TX_DTG_CLEAR(ep_num); - - udev->transc_in[ep_num].ep_stall = 0U; - - /* clear endpoint stall status */ - USBD_EP_TX_STAT_SET(ep_num, EPTX_VALID); - } else { - /* clear endpoint data toggle bit */ - USBD_RX_DTG_CLEAR(ep_num); - - udev->transc_out[ep_num].ep_stall = 0U; - - /* clear endpoint stall status */ - USBD_EP_RX_STAT_SET(ep_num, EPRX_VALID); - } -} - -/*! - \brief get the endpoint status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval endpoint status -*/ -static uint8_t usbd_ep_status (usb_dev *udev, uint8_t ep_addr) -{ - (void)udev; - - uint32_t epcs = USBD_EPxCS(EP_ID(ep_addr)); - - if (EP_DIR(ep_addr)) { - return (uint8_t)(epcs & EPxCS_TX_STA); - } else { - return (uint8_t)(epcs & EPxCS_RX_STA); - } -} - -/*! - \brief write data from user FIFO to USB RAM - \param[in] user_fifo: pointer to user FIFO - \param[in] ep_num: endpoint number - \param[in] bytes: the bytes count of the write data - \param[out] none - \retval none -*/ -static void usbd_ep_data_write (uint8_t *user_fifo, uint8_t ep_num, uint16_t bytes) -{ - if (0U != bytes) { - uint32_t n; - uint32_t *write_addr = (uint32_t *)(btable_ep[ep_num].tx_addr * 2U + USBD_RAM); - - for (n = 0U; n < (bytes + 1U) / 2U; n++) { - *write_addr++ = *((uint16_t*)user_fifo); - user_fifo += 2U; - } - } - - btable_ep[ep_num].tx_count = bytes; - - USBD_EP_TX_STAT_SET(ep_num, EPTX_VALID); -} - -/*! - \brief read data from USBRAM to user FIFO - \param[in] user_fifo: pointer to user FIFO - \param[in] ep_num: endpoint number - \param[in] buf_kind: endpoint buffer kind - \param[out] none - \retval none -*/ -static uint16_t usbd_ep_data_read (uint8_t *user_fifo, uint8_t ep_num, uint8_t buf_kind) -{ - uint16_t n = 0U, bytes = 0U; - uint32_t *read_addr = NULL; - - if ((uint8_t)EP_BUF_SNG == buf_kind) { - bytes = (uint16_t)(btable_ep[ep_num].rx_count & EPRCNT_CNT); - - read_addr = (uint32_t *)(btable_ep[ep_num].rx_addr * 2U + USBD_RAM); - } else if ((uint8_t)EP_BUF_DBL == buf_kind) { - if (USBD_EPxCS(ep_num) & EPxCS_TX_DTG) { - bytes = (uint16_t)(btable_ep[ep_num].tx_count & EPRCNT_CNT); - - read_addr = (uint32_t *)(btable_ep[ep_num].tx_addr * 2U + USBD_RAM); - } else { - bytes = (uint16_t)(btable_ep[ep_num].rx_count & EPRCNT_CNT); - - read_addr = (uint32_t *)(btable_ep[ep_num].rx_addr * 2U + USBD_RAM); - } - } else { - return 0U; - } - - for (n = 0U; n < (bytes + 1U) / 2U; n++) { - *((uint16_t*)user_fifo) = (uint16_t)*read_addr++; - user_fifo += 2U; - } - - return bytes; -} - -#ifdef USBD_LOWPWR_MODE_ENABLE - -/*! - \brief restore system clocks and power while exiting from suspend mode - \param[in] none - \param[out] none - \retval none -*/ -static void lowpower_mode_exit (void) -{ - /* restore system clock */ - -#ifdef LPM_ENABLED - /* enable IRC8M */ - rcu_osci_on(RCU_IRC8M); - - /* wait till IRC8M is ready */ - while (RESET == rcu_flag_get(RCU_FLAG_IRC8MSTB)) { - } -#else - /* enable HXTAL */ - rcu_osci_on(RCU_HXTAL); - - /* wait till HXTAL is ready */ - while(RESET == rcu_flag_get(RCU_FLAG_HXTALSTB)) { - } -#endif - - /* enable PLL */ - rcu_osci_on(RCU_PLL_CK); - - /* wait till PLL is ready */ - while(RESET == rcu_flag_get(RCU_FLAG_PLLSTB)) { - } - - /* select PLL as system clock source */ - rcu_system_clock_source_config(RCU_CKSYSSRC_PLL); - - /* wait till PLL is used as system clock source */ - while(0x08U != rcu_system_clock_source_get()) { - } - - /* low power sleep on exit disabled */ - system_lowpower_reset(SCB_LPM_DEEPSLEEP); -} - -#endif /* USBD_LOWPWR_MODE_ENABLE */ - -/*! - \brief resume the USB device - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_resume (usb_dev *udev) -{ -#ifdef LPM_ENABLED - if(1 == udev->lpm.L1_remote_wakeup){ - USBD_CTL |= CTL_L1RSREQ; - } -#endif /* LPM_ENABLED */ - - if(1U == usbd_core.dev->pm.remote_wakeup){ - /* make USB resume */ - USBD_CTL |= CTL_RSREQ; - } -} - -/*! - \brief set USB device to leave mode - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_leave_suspend (void) -{ - /* clear low_power mode bit in USBD_CTL */ - USBD_CTL &= ~CTL_LOWM; - -#ifdef USBD_LOWPWR_MODE_ENABLE - - /* restore normal operations */ - lowpower_mode_exit(); - -#endif /* USBD_LOWPWR_MODE_ENABLE */ - - /* clear SETSPS bit */ - USBD_CTL &= ~CTL_SETSPS; -} - -/*! - \brief set USB device to enter suspend mode - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_suspend (void) -{ - /* set USB module to suspend and low-power mode */ - USBD_CTL |= CTL_SETSPS | CTL_LOWM; - -#ifdef USBD_LOWPWR_MODE_ENABLE - - /* check wakeup flag is set */ - if (0U == (USBD_INTF & INTF_WKUPIF)) { - /* enter DEEP_SLEEP mode with LDO in low power mode */ - pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD); - } else { - /* clear wakeup interrupt flag */ - CLR(WKUPIF); - - /* clear set_suspend flag */ - USBD_CTL &= ~CTL_SETSPS; - } - -#endif /* USBD_LOWPWR_MODE_ENABLE */ -} diff --git a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Source/usbd_lld_int.c b/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Source/usbd_lld_int.c deleted file mode 100644 index 0a294f4..0000000 --- a/Example/EpaperModuleTest_GD32F103/GD32F103/GD32F10x_usbd_library/usbd/Source/usbd_lld_int.c +++ /dev/null @@ -1,276 +0,0 @@ - /*! - \file usbd_lld_int.c - \brief USB device low level interrupt routines - - \version 2020-07-17, V3.0.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_lld_int.h" -#include "usbd_lld_core.h" - -/* local function prototypes ('static') */ -static void usbd_int_suspend (usb_dev *udev); - -/*! - \brief handle USB high priority successful transfer event - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -void usbd_int_hpst (usb_dev *udev) -{ - __IO uint16_t int_status = 0U; - - /* wait till interrupts are not pending */ - while ((int_status = (uint16_t)USBD_INTF) & (uint16_t)INTF_STIF) { - /* get endpoint number */ - uint8_t ep_num = (uint8_t)(int_status & INTF_EPNUM); - - uint8_t transc_num = (uint8_t)TRANSC_UNKNOWN; - - if (int_status & INTF_DIR) { - if (USBD_EPxCS(ep_num) & EPxCS_RX_ST) { - uint16_t count = 0U; - - usb_transc *transc = &udev->transc_out[ep_num]; - - /* clear successful receive interrupt flag */ - USBD_EP_RX_ST_CLEAR(ep_num); - - count = udev->drv_handler->ep_read (transc->xfer_buf, ep_num, (uint8_t)EP_BUF_DBL); - - user_buffer_free(ep_num, (uint8_t)DBUF_EP_OUT); - - transc->xfer_buf += count; - transc->xfer_count += count; - transc->xfer_len -= count; - - if ((0U == transc->xfer_len) || (count < transc->max_len)) { - USBD_EP_RX_STAT_SET(ep_num, EPRX_NAK); - - transc_num = (uint8_t)TRANSC_OUT; - } - } - } else { - /* handle the in direction transaction */ - if (USBD_EPxCS(ep_num) & EPxCS_TX_ST) { - /* clear successful transmit interrupt flag */ - USBD_EP_TX_ST_CLEAR(ep_num); - - transc_num = (uint8_t)TRANSC_IN; - } - } - - if ((uint8_t)TRANSC_UNKNOWN != transc_num) { - udev->ep_transc[ep_num][transc_num](udev, ep_num); - } - } -} - -/*! - \brief USB interrupt events service routine - \param[in] none - \param[out] none - \retval none -*/ -void usbd_isr (void) -{ - __IO uint16_t int_status = (uint16_t)USBD_INTF; - __IO uint16_t int_flag = (uint16_t)(USBD_INTF & (USBD_CTL & USBD_INTEN)); - - usb_dev *udev = usbd_core.dev; - - if (INTF_STIF & int_flag) { - /* wait till interrupts are not pending */ - while ((int_status = (uint16_t)USBD_INTF) & (uint16_t)INTF_STIF) { - /* get endpoint number */ - uint8_t ep_num = (uint8_t)(int_status & INTF_EPNUM); - - if (int_status & INTF_DIR) { - /* handle the USB OUT direction transaction */ - if (USBD_EPxCS(ep_num) & EPxCS_RX_ST) { - /* clear successful receive interrupt flag */ - USBD_EP_RX_ST_CLEAR(ep_num); - - if (USBD_EPxCS(ep_num) & EPxCS_SETUP) { - - if (ep_num == 0U) { - udev->ep_transc[ep_num][TRANSC_SETUP](udev, ep_num); - } else { - return; - } - } else { - usb_transc *transc = &udev->transc_out[ep_num]; - - uint16_t count = udev->drv_handler->ep_read (transc->xfer_buf, ep_num, (uint8_t)EP_BUF_SNG); - - transc->xfer_buf += count; - transc->xfer_count += count; - - if ((transc->xfer_count >= transc->xfer_len) || (count < transc->max_len)) { - if (udev->ep_transc[ep_num][TRANSC_OUT]) { - udev->ep_transc[ep_num][TRANSC_OUT](udev, ep_num); - } - } else { - udev->drv_handler->ep_rx_enable(udev, ep_num); - } - } - } - } else { - /* handle the USB IN direction transaction */ - if (USBD_EPxCS(ep_num) & EPxCS_TX_ST) { - /* clear successful transmit interrupt flag */ - USBD_EP_TX_ST_CLEAR(ep_num); - - usb_transc *transc = &udev->transc_in[ep_num]; - - if (transc->xfer_len == 0U) { - if (udev->ep_transc[ep_num][TRANSC_IN]) { - udev->ep_transc[ep_num][TRANSC_IN](udev, ep_num); - } - } else { - usbd_ep_send(udev, ep_num, transc->xfer_buf, transc->xfer_len); - } - } - } - } - } - - if (INTF_WKUPIF & int_flag) { - /* clear wakeup interrupt flag in INTF */ - CLR(WKUPIF); - - /* restore the old cur_status */ - udev->cur_status = udev->backup_status; - -#ifdef LPM_ENABLED - if ((0U == udev->pm.remote_wakeup_on) && (0U == udev->lpm.L1_resume)) { - resume_mcu(udev); - } else if (1U == udev->pm.remote_wakeup_on) { - /* no operation */ - } else { - udev->lpm.L1_resume = 0U; - } - - /* clear L1 remote wakeup flag */ - udev->lpm.L1_remote_wakeup = 0U; -#else - if (0U == udev->pm.remote_wakeup_on) { - resume_mcu(udev); - } -#endif /* LPM_ENABLED */ - } - - if (INTF_SPSIF & int_flag) { - if(!(USBD_CTL & CTL_RSREQ)) { - usbd_int_suspend (udev); - - /* clear of suspend interrupt flag bit must be done after setting of CTLR_SETSPS */ - CLR(SPSIF); - } - } - - if (INTF_SOFIF & int_flag) { - /* clear SOF interrupt flag in INTF */ - CLR(SOFIF); - - /* if necessary, user can add code here */ - if (NULL != usbd_int_fops) { - (void)usbd_int_fops->SOF(udev); - } - } - - if (INTF_ESOFIF & int_flag) { - /* clear ESOF interrupt flag in INTF */ - CLR(ESOFIF); - - /* control resume time by ESOFs */ - if (udev->pm.esof_count > 0U) { - if (0U == --udev->pm.esof_count) { - if (udev->pm.remote_wakeup_on) { - USBD_CTL &= ~CTL_RSREQ; - - udev->pm.remote_wakeup_on = 0U; - } else { - USBD_CTL |= CTL_RSREQ; - - udev->pm.esof_count = 3U; - udev->pm.remote_wakeup_on = 1U; - } - } - } - } - - if (INTF_RSTIF & int_flag) { - /* clear reset interrupt flag in INTF */ - CLR(RSTIF); - - udev->drv_handler->ep_reset(udev); - } - -#ifdef LPM_ENABLED - if (INTF_L1REQ & int_flag) { - /* clear L1 ST bit in LPM INTF */ - USBD_INTF = CLR(L1REQ); - - /* read BESL field from subendpoint0 register which corresponds to HIRD parameter in LPM spec */ - udev->lpm.besl = (USBD_LPMCS & LPMCS_BLSTAT) >> 4; - - /* read BREMOTEWAKE bit from subendpoint0 register which corresponding to bRemoteWake bit in LPM request */ - udev->lpm.L1_remote_wakeup = (USBD_LPMCS & LPMCS_REMWK) >> 3; - - /* process USB device core layer suspend routine */ - usbd_int_suspend(udev); - } -#endif /* LPM_ENABLED */ -} - -/*! - \brief handle USB suspend event - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void usbd_int_suspend (usb_dev *udev) -{ - /* store the device current status */ - udev->backup_status = udev->cur_status; - - /* set device in suspended state */ - udev->cur_status = (uint8_t)USBD_SUSPENDED; - - /* usb enter in suspend mode and mcu system in low power mode */ - if (udev->pm.suspend_enabled) { - usbd_to_suspend(udev); - } else { - /* if not possible then resume after xx ms */ - udev->pm.esof_count = 3U; - } -} diff --git a/Example/EpaperModuleTest_GD32F103/Inc/board.h b/Example/EpaperModuleTest_GD32F103/Inc/board.h deleted file mode 100644 index b7a3c40..0000000 --- a/Example/EpaperModuleTest_GD32F103/Inc/board.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef __BOARD_H -#define __BOARD_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "gd32f10x.h" - -void board_usart0_init(void); -void board_led_init(void); -void board_led_on(void); -void board_led_off(void); -void board_led_toggle(void); -void board_button_init(void); -uint8_t board_button_state_get(void); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_GD32F103/Inc/gd32f10x_it.h b/Example/EpaperModuleTest_GD32F103/Inc/gd32f10x_it.h deleted file mode 100644 index 5a1eb5e..0000000 --- a/Example/EpaperModuleTest_GD32F103/Inc/gd32f10x_it.h +++ /dev/null @@ -1,63 +0,0 @@ -/*! - \file gd32f10x_it.h - \brief the header file of the ISR - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_IT_H -#define GD32F10X_IT_H - -#include "gd32f10x.h" - -/* function declarations */ -/* this function handles NMI exception */ -void NMI_Handler(void); -/* this function handles HardFault exception */ -void HardFault_Handler(void); -/* this function handles MemManage exception */ -void MemManage_Handler(void); -/* this function handles BusFault exception */ -void BusFault_Handler(void); -/* this function handles UsageFault exception */ -void UsageFault_Handler(void); -/* this function handles SVC exception */ -void SVC_Handler(void); -/* this function handles DebugMon exception */ -void DebugMon_Handler(void); -/* this function handles PendSV exception */ -void PendSV_Handler(void); -/* this function handles SysTick exception */ -void SysTick_Handler(void); - -#endif /* GD32F10X_IT_H */ diff --git a/Example/EpaperModuleTest_GD32F103/Inc/gd32f10x_libopt.h b/Example/EpaperModuleTest_GD32F103/Inc/gd32f10x_libopt.h deleted file mode 100644 index 357a133..0000000 --- a/Example/EpaperModuleTest_GD32F103/Inc/gd32f10x_libopt.h +++ /dev/null @@ -1,65 +0,0 @@ -/*! - \file gd32f10x_libopt.h - \brief library optional for gd32f10x - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F10X_LIBOPT_H -#define GD32F10X_LIBOPT_H - -#include "gd32f10x_fmc.h" -#include "gd32f10x_pmu.h" -#include "gd32f10x_bkp.h" -#include "gd32f10x_rcu.h" -#include "gd32f10x_exti.h" -#include "gd32f10x_gpio.h" -#include "gd32f10x_crc.h" -#include "gd32f10x_dma.h" -#include "gd32f10x_dbg.h" -#include "gd32f10x_adc.h" -#include "gd32f10x_dac.h" -#include "gd32f10x_fwdgt.h" -#include "gd32f10x_wwdgt.h" -#include "gd32f10x_rtc.h" -#include "gd32f10x_timer.h" -#include "gd32f10x_usart.h" -#include "gd32f10x_i2c.h" -#include "gd32f10x_spi.h" -#include "gd32f10x_sdio.h" -#include "gd32f10x_exmc.h" -#include "gd32f10x_can.h" -#include "gd32f10x_enet.h" -#include "gd32f10x_misc.h" - -#endif /* GD32F10X_LIBOPT_H */ diff --git a/Example/EpaperModuleTest_GD32F103/Inc/main.h b/Example/EpaperModuleTest_GD32F103/Inc/main.h deleted file mode 100644 index 69405c6..0000000 --- a/Example/EpaperModuleTest_GD32F103/Inc/main.h +++ /dev/null @@ -1,13 +0,0 @@ - -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifdef __cplusplus -} -#endif -#endif /* MAIN_H */ diff --git a/Example/EpaperModuleTest_GD32F103/Inc/systick.h b/Example/EpaperModuleTest_GD32F103/Inc/systick.h deleted file mode 100644 index 8a09598..0000000 --- a/Example/EpaperModuleTest_GD32F103/Inc/systick.h +++ /dev/null @@ -1,38 +0,0 @@ - -#ifndef __SYS_TICK_H -#define __SYS_TICK_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include - -#define SysTick_Freq (1000U) // Hz -#define SysTick_Tick (1000U / SysTick_Freq) - - /* configure systick */ - void systick_config(void); - /* delay a time in milliseconds */ - void delay(uint32_t count); - /* delay a time in milliseconds with low power */ - void delay_lp(uint32_t count); - /* delay decrement */ - void delay_decrement(void); - /* get system tick */ - uint32_t systick_get_tick(void); - /* suspend system tick */ - void systick_DisableIRQ(void); - /* resume system tick */ - void systick_EnableIRQ(void); - - void systick_Disable(void); - void systick_Enable(void); - void systick_deinit(void); - -#ifdef __cplusplus -} -#endif - -#endif /* SYS_TICK_H */ diff --git a/Example/EpaperModuleTest_GD32F103/MDK-ARM/EpaperModuleTest_GD32F103.uvoptx b/Example/EpaperModuleTest_GD32F103/MDK-ARM/EpaperModuleTest_GD32F103.uvoptx deleted file mode 100644 index 1069a24..0000000 --- a/Example/EpaperModuleTest_GD32F103/MDK-ARM/EpaperModuleTest_GD32F103.uvoptx +++ /dev/null @@ -1,614 +0,0 @@ - - - - 1.0 - -

    ### uVision Project, (C) Keil Software
    - - - *.c - *.s*; *.src; *.a* - *.obj; *.o - *.lib - *.txt; *.h; *.inc; *.md - *.plm - *.cpp - 0 - - - - 0 - 0 - - - - Target 1 - 0x4 - ARM-ADS - - 12000000 - - 1 - 1 - 0 - 1 - 0 - - - 1 - 65535 - 0 - 0 - 0 - - - 79 - 66 - 8 - .\Listings\ - - - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - - - 1 - 0 - 1 - - 255 - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 4 - - - - - - - - - - - Segger\JL2CM3.dll - - - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - DLGUARM - d - - - 0 - JL2CM3 - -U59423694 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_MD.FLM -FS08000000 -FL020000 -FP0($$Device:GD32F103CB$Flash\GD32F10x_MD.FLM) - - - 0 - UL2CM3 - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_MD -FS08000000 -FL020000 -FP0($$Device:GD32F103CB$Flash\GD32F10x_MD.FLM)) - - - - - - 0 - 1 - _tick,0x0A - - - 1 - 1 - SPI2 - - - 2 - 1 - SPI2 - - - - 0 - - - 0 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - 0 - 0 - 0 - - - - - - - - - - - - - App - 0 - 0 - 0 - 0 - - 1 - 1 - 1 - 0 - 0 - 0 - ..\Src\gd32f10x_it.c - gd32f10x_it.c - 0 - 0 - - - 1 - 2 - 1 - 0 - 0 - 0 - ..\Src\main.c - main.c - 0 - 0 - - - 1 - 3 - 1 - 0 - 0 - 0 - ..\Src\systick.c - systick.c - 0 - 0 - - - 1 - 4 - 1 - 0 - 0 - 0 - ..\Src\board.c - board.c - 0 - 0 - - - - - CMSIS - 0 - 0 - 0 - 0 - - 2 - 5 - 1 - 0 - 0 - 0 - ..\GD32F103\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c - system_gd32f10x.c - 0 - 0 - - - - - Peripherals - 0 - 0 - 0 - 0 - - 3 - 6 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_adc.c - gd32f10x_adc.c - 0 - 0 - - - 3 - 7 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_bkp.c - gd32f10x_bkp.c - 0 - 0 - - - 3 - 8 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_can.c - gd32f10x_can.c - 0 - 0 - - - 3 - 9 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_crc.c - gd32f10x_crc.c - 0 - 0 - - - 3 - 10 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_dac.c - gd32f10x_dac.c - 0 - 0 - - - 3 - 11 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_dbg.c - gd32f10x_dbg.c - 0 - 0 - - - 3 - 12 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_dma.c - gd32f10x_dma.c - 0 - 0 - - - 3 - 13 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_enet.c - gd32f10x_enet.c - 0 - 0 - - - 3 - 14 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_exmc.c - gd32f10x_exmc.c - 0 - 0 - - - 3 - 15 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c - gd32f10x_exti.c - 0 - 0 - - - 3 - 16 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_fmc.c - gd32f10x_fmc.c - 0 - 0 - - - 3 - 17 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_fwdgt.c - gd32f10x_fwdgt.c - 0 - 0 - - - 3 - 18 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c - gd32f10x_gpio.c - 0 - 0 - - - 3 - 19 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_i2c.c - gd32f10x_i2c.c - 0 - 0 - - - 3 - 20 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c - gd32f10x_misc.c - 0 - 0 - - - 3 - 21 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_pmu.c - gd32f10x_pmu.c - 0 - 0 - - - 3 - 22 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c - gd32f10x_rcu.c - 0 - 0 - - - 3 - 23 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_rtc.c - gd32f10x_rtc.c - 0 - 0 - - - 3 - 24 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_sdio.c - gd32f10x_sdio.c - 0 - 0 - - - 3 - 25 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_spi.c - gd32f10x_spi.c - 0 - 0 - - - 3 - 26 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_timer.c - gd32f10x_timer.c - 0 - 0 - - - 3 - 27 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c - gd32f10x_usart.c - 0 - 0 - - - 3 - 28 - 1 - 0 - 0 - 0 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_wwdgt.c - gd32f10x_wwdgt.c - 0 - 0 - - - - - Startup - 0 - 0 - 0 - 0 - - 4 - 29 - 2 - 0 - 0 - 0 - ..\GD32F103\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_md.s - startup_gd32f10x_md.s - 0 - 0 - - - - - Epaper - 0 - 0 - 0 - 0 - - 5 - 30 - 1 - 0 - 0 - 0 - ..\Epaper\epaper.c - epaper.c - 0 - 0 - - - - diff --git a/Example/EpaperModuleTest_GD32F103/MDK-ARM/EpaperModuleTest_GD32F103.uvprojx b/Example/EpaperModuleTest_GD32F103/MDK-ARM/EpaperModuleTest_GD32F103.uvprojx deleted file mode 100644 index c2ad901..0000000 --- a/Example/EpaperModuleTest_GD32F103/MDK-ARM/EpaperModuleTest_GD32F103.uvprojx +++ /dev/null @@ -1,577 +0,0 @@ - - - - 2.1 - -
    ### uVision Project, (C) Keil Software
    - - - - Target 1 - 0x4 - ARM-ADS - 6160000::V6.16::ARMCLANG - 1 - - - GD32F103CB - GigaDevice - GigaDevice.GD32F10x_DFP.2.0.2 - http://gd32mcu.com/data/documents/pack/ - IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00020000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE - - - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_MD -FS08000000 -FL020000 -FP0($$Device:GD32F103CB$Flash\GD32F10x_MD.FLM)) - 0 - $$Device:GD32F103CB$Device\Include\gd32f10x.h - - - - - - - - - - $$Device:GD32F103CB$SVD\GD32F10x\GD32F10x_MD.svd - 0 - 0 - - - - - - - 0 - 0 - 0 - 0 - 1 - - .\Objects\ - EpaperModuleTest_GD32F103 - 1 - 0 - 1 - 1 - 1 - .\Listings\ - 1 - 0 - 0 - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - 0 - - - - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - SARMCM3.DLL - -REMAP - DCM.DLL - -pCM3 - SARMCM3.DLL - - TCM.DLL - -pCM3 - - - - 1 - 0 - 0 - 0 - 16 - - - - - 1 - 0 - 0 - 1 - 1 - -1 - - 1 - BIN\UL2CM3.DLL - - - - - - 0 - - - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - "Cortex-M3" - - 0 - 0 - 0 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 8 - 1 - 0 - 0 - 0 - 3 - 3 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 1 - 0x8000000 - 0x20000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8000000 - 0x20000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 2 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 3 - 0 - 0 - 1 - 1 - 0 - 3 - 3 - 1 - 1 - 0 - 0 - 0 - - - USE_STDPERIPH_DRIVER,GD32F10X_MD - - ..\GD32F103\CMSIS\GD\GD32F10x\Include;..\GD32F103\CMSIS;..\GD32F103\GD32F10x_standard_peripheral\Include;..\GD32F103\GD32F10x_usbd_library\usbd\Include;..\GD32F103\GD32F10x_usbd_library\device\Include;..\Inc;..\Epaper - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 4 - - - - - - - - - 1 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - - - - - - - - - - - - App - - - gd32f10x_it.c - 1 - ..\Src\gd32f10x_it.c - - - main.c - 1 - ..\Src\main.c - - - systick.c - 1 - ..\Src\systick.c - - - board.c - 1 - ..\Src\board.c - - - - - CMSIS - - - system_gd32f10x.c - 1 - ..\GD32F103\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c - - - - - Peripherals - - - gd32f10x_adc.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_adc.c - - - gd32f10x_bkp.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_bkp.c - - - gd32f10x_can.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_can.c - - - gd32f10x_crc.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_crc.c - - - gd32f10x_dac.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_dac.c - - - gd32f10x_dbg.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_dbg.c - - - gd32f10x_dma.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_dma.c - - - gd32f10x_enet.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_enet.c - - - gd32f10x_exmc.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_exmc.c - - - gd32f10x_exti.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c - - - gd32f10x_fmc.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_fmc.c - - - gd32f10x_fwdgt.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_fwdgt.c - - - gd32f10x_gpio.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c - - - gd32f10x_i2c.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_i2c.c - - - gd32f10x_misc.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c - - - gd32f10x_pmu.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_pmu.c - - - gd32f10x_rcu.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c - - - gd32f10x_rtc.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_rtc.c - - - gd32f10x_sdio.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_sdio.c - - - gd32f10x_spi.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_spi.c - - - gd32f10x_timer.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_timer.c - - - gd32f10x_usart.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c - - - gd32f10x_wwdgt.c - 1 - ..\GD32F103\GD32F10x_standard_peripheral\Source\gd32f10x_wwdgt.c - - - - - Startup - - - startup_gd32f10x_md.s - 2 - ..\GD32F103\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_md.s - - - - - Epaper - - - epaper.c - 1 - ..\Epaper\epaper.c - - - - - - - - - - - - - - - - - EpaperModuleTest_GD32F103 - 1 - - - - -
    diff --git a/Example/EpaperModuleTest_GD32F103/MDK-ARM/EventRecorderStub.scvd b/Example/EpaperModuleTest_GD32F103/MDK-ARM/EventRecorderStub.scvd deleted file mode 100644 index 2956b29..0000000 --- a/Example/EpaperModuleTest_GD32F103/MDK-ARM/EventRecorderStub.scvd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/Example/EpaperModuleTest_GD32F103/MDK-ARM/JLinkSettings.ini b/Example/EpaperModuleTest_GD32F103/MDK-ARM/JLinkSettings.ini deleted file mode 100644 index 7835810..0000000 --- a/Example/EpaperModuleTest_GD32F103/MDK-ARM/JLinkSettings.ini +++ /dev/null @@ -1,40 +0,0 @@ -[BREAKPOINTS] -ForceImpTypeAny = 0 -ShowInfoWin = 1 -EnableFlashBP = 2 -BPDuringExecution = 0 -[CFI] -CFISize = 0x00 -CFIAddr = 0x00 -[CPU] -MonModeVTableAddr = 0xFFFFFFFF -MonModeDebug = 0 -MaxNumAPs = 0 -LowPowerHandlingMode = 0 -OverrideMemMap = 0 -AllowSimulation = 1 -ScriptFile="" -[FLASH] -EraseType = 0x00 -CacheExcludeSize = 0x00 -CacheExcludeAddr = 0x00 -MinNumBytesFlashDL = 0 -SkipProgOnCRCMatch = 1 -VerifyDownload = 1 -AllowCaching = 1 -EnableFlashDL = 2 -Override = 0 -Device="ARM7" -[GENERAL] -WorkRAMSize = 0x00 -WorkRAMAddr = 0x00 -RAMUsageLimit = 0x00 -[SWO] -SWOLogFile="" -[MEM] -RdOverrideOrMask = 0x00 -RdOverrideAndMask = 0xFFFFFFFF -RdOverrideAddr = 0xFFFFFFFF -WrOverrideOrMask = 0x00 -WrOverrideAndMask = 0xFFFFFFFF -WrOverrideAddr = 0xFFFFFFFF diff --git a/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/EpaperModuleTest_GD32F103.axf b/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/EpaperModuleTest_GD32F103.axf deleted file mode 100644 index 52ff5f5da9cc4a4949f5a02eea772ba57f045193..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96028 zcmeFa3w%`7^*_4z+2_nTnVC!`2}qEToP;0|Gz0_;ie&O2JQaMu7zy$U79;{H3Yq~T zL_owhCEi>(tt!V(Snd2_!K0yY`+lGfd#uUw{95Kc9Q= zrw3-Qz1Ci9?X}l_oVEANIcXR%u7-2YoJ(WHj4*>UYtekp*5jjT%oxOM(2JR$Wk}X{ zvYFi-JWt~D2tMoZxsPy-S&l9TZUg-RdMk4! z#~-?LGWw}Q(VuEB0{wWqL(l18kr&#@=7j7j$+JJs;{wlf?MnV`srU1ESzBDz550Rp zXOS)KftFm^e)zYZbff(aWdSR;;Hy#XEV8P-__ZuZy@LF*c55@YL)$sFTaIY@7n`K#J5L4J-bozOlW`I%DZ7^!n4tURxs73W~ZpuXF*E!z4JW{O%t z27>#t_Gqg+THSJ`zZtWkI&WR?E^Ry`+B)n6zv$?mXzQ30(Ni}??age{9MaH97eDy5yv*Xl9Umc%aQw&&iV*H^%fUg;UXh}U=!)(l)TeLOreM z&Dk}^qprtTq)kfv^0>JvqWUs6*TGxCB6lSDg!+*QSG|-rEu}SmYdkgYx3N&Pb$yhd|LT^FXp=^I7MIoxMd^jH()*%>53K1G z!|#dG>YOOQOX7+0Td}&67Oa)<_2+F?nEd@-8)NTS51^Vvh2 zuj@Bt&zo&lX>(Oh^_y+((%)1~%*hUK?dRS7^5NwT-kO{p{_UPHIKscF(rbMCv9bem zgFiRNs-fO}X3OF&Q>xJC&0_x^UoPxn5tD_Ab_H^)=FnaA7>lsJ)(-J4)4grJfM1S* z<(qh^SQFZ!t!X~C#_ldJ_*ja%3`x9q+o z*Z<_x2W(bxtOpHxSe~>-!{x?Qd7RHCRF8|oQ zk-(XJ-B~qFm13>FV{wf_t?;8y;zrpV&T5r4G$rR~wzRkVzo%lB7sXw@{p?%|w% zp56X_*}J{{&ZF`p^Rt|CS6E+H*|K*a-@h})znJqdTgP@-)oa?=Mp)q)R5R(@ckBDs zQ2m>?SUc`ai?+UVV*Iz)x%rSc4wxC91KjhEk6cfr9pGtJzvuTDu<+%5W^7#2JXyZ! z&+vrtAbg?a?9ldqp`|7Yz~BlDOLngnE4z=z6fO_lmuYsZor*W=_rYK67K8rW3Xt!DQ}#@f$Oi}u9Q z>TWe}B)6q%@uqb(*$aNV`SUhAl#W?7{@ZKKEAn1DU}ac4Tz%M%O-^twN z9nO6VYe;=)`zG9911)|0BhI8d#dU4F4*r_4$OUb5ueiMJYpe=`+TK1$ccxMqAB46Q zB45+iinLFgjWp24BK}x?R94pZ9@6fzY#_=sS?0&RW$f{5Hjh41QO#{W%)-2iwt8V# z;5aKjyoX_~%GgdfD7Mq1t-r&am)5f*$85xTERus&`RHyH&t*{__n&v#H_7`J-C-QL zcX7|!6qDT>lRb7UA$y4OkbNF}%`tgzjZqVAeWZQZW_}Ud(N*5#-aW>L5#Qcp(bk6( z^%#im5P$C6Lid`-aX&I)+h;M`Hf{I!qPgCsSN93^BQb_Ye&FJf3@zLls`&&)(9@7u^t^ksy*L5IZ}080Ti=hOcbJ(T6T?gAjijwN9~wblUv6Q1+rg0 z9LUc<7V2>A=~`D5sh`q2Qa`mzZP)NGHTUo5L^6c)%eOW@l4Nb9VHrq8jGbWY^&CyxbMnBCk`$}mQIM_Yd$jkZ>x7Ygv1 zd91pnl~FXpA{TX3w`9r4ghkFrzHcl)0QtYhc=}#@kSy5;vV>M$Aq3_Z$g>Nm2; z;C2lob|A1@fR(fhVEtlPpZ58nSs16QFG+Mndd9HdA9vd`3L=H`QN|yMwib5Ow9E-Kw@hQM zH8n>j2X-B?Cm3r+woJBvb!5I@UsH8tcC+%joThs(6>g_u}NAr^BAJ)`eQ(Kqh>10u-;fmxkfq z`NB~hclBuNWk*@$*`tk>?R%#VinjJY%8CzRc8))Ka9`EfNfo0i?V0oJ-c!@vj1fMe zazLD*@PToBME&IYX>;w1=S;nI)-?NyY4hf%vwnnszJ2-pTc^&PgCaKmNNDa(?1D1` zR@Eg(tV`u?y>`dJ@%K{vBqDQUDteY=_S~YeEZRa`fA=QqquB`)+?u)wR zgCg7a^oJ8OTB?2aG40?NU-L+|=1R}0!JY*x?0W|_I}dSHFZk8Jeb>Rak}&M|Vi(th z?lP@3LMadX1dHVJP#WwOSZ};BLtZLh!`0eLUwL8m;$Wr+T(_3-#ZRr7f`(2`MY(;SRa`bre-J!ws= z-=@{=`9}LnJ5(`o&o^w~o^SN4s=oD#Gpj1U^=XAw_s;BFHLxnPir4O(S#XF=-Z{B` zJ1c1Z#>i~`hT)@SQaf~<6liQho1R;7C^R4dIR40qTYwK6leeN$e3*TR4alrHvYR;W z75w*X$BBLNyko99?f9jHkey6;!Jz>5(rA4Qsxy&_2%B7S$j;=ovYtrj7OF>TZ*@?bm`8P8~Mg|crxuo>pxDg%_sI5_KDWd zPEg$7?CDuu{YZ)fs*glV;a!$q(};ZsW7(fq$9%u4vit54vQHRaRhb>@2adddkFdSr z>K4^Ut16A%kdb|~s#4pdVGb`l!S-LtHnks)gtlyyYy6yplL{(iKcmJ0sz1BN>uRdZ zi`Ugu*&|+8yw3-n5wEYQ(ig9<3AO}UvZ_stg=~zAKuecu8W)*zTx>r<mGYSNpbf*wBsKc(apZazTI;o{WW{R#sj51?QHK}Ykw1`odVm> zt*N;!``l}%(l}k|UPCqfZuit;Yxm4z*X~=3^J2Bn&b=n=UN=7CPUF9EKfsE$PXm?b z7HHw2hW>HC0-Q_vd4UKYHTB(gLF>L1HP%b%Vcb9WC1hInjjlP-I_7xk09PCDiRgaM zi~C)S9kA0DnEdxxo2++6XrDi~AB$I**`XTN#}&4oyRN1=NUfip+mL(ph$DZ}!=<+J z$L!o!4>0~5c0-3hGs0)IagRfP4fLO24{+$Sskzhkr4@7LuDd+fQ|p)KuIM9qS2}zQ z{_*IeS#jH*?O*!?ZjAW-ugithmMJCuDKYVnb!osqR@AqlZx*|8s+HY~4H)G%c9=+Q%%YxL-|^B5a41bWz2lv-V=-Y#@e z?OiOU@k`TOY~bi?FCESnWo2e9VhvJuctu4;A!|UAD=8JMAuTP9v*8t^N8iaBU|<6@ zG(ejjs3_;4km`m2F4mxVwFcIpTmA;{S5yp_vM%H=Ew};s?uhnlP|EN3Nx*G%VcQoh$=>=Fm`2M{6oDJs9e{$rZcJ#PN6Kbuejoh1*~CI zb#)mltFFdb8`4n?tPJ!VX5F2}HJ0Vl zP`XI+ke)KuQB+iv!*Y;xNV>&FL8s01^6G%ih6MulB9;sLbCE9%3}e;Bq%L>k#*K?u z_0%iIRZEw{=gC)xL^Mjh@K~&9&F(jMzqtnYVT_ZUq7&7tn9xj(BfodkxDcpZrjeHNvS36*95q78mr+R0Xn`s(u<1r#&`monmR%x2&Q3h;jS3Ht*Gdn=2+gV zf0c{Aqvo=`;BjQh@n`^)lGT2E7*ht>GB2BLPiT_ug|0Pp$r57Jn)o-a+kEbnwjg%DiClJoH8^z52ZX3E;#C zuI_)v9@Zhdo%EOPB0b(He4)H^( zt+7${g=vt^scR)&Xc(k&%#b}^RO^)$P`!+G=rKDNg~H@?@_BA}SQx929B=yi+V!v* zdGvU$WRaD58>fPu>?Da3)FNi0b<9`Vj4X{e)S{h0PS>&cVboE>k}kQVVND~+*cI5g zv6&>Hmi&gi^gnC1?OI6(Z?lcVf5pR^9e&Vlj38wY=I_RhwKg-|Za2J4ddOt_x4)u_ zr2P;80vlkP-VqAhw&H;Ru>jFn*bYOM+#ndT2|cifeG8*NfbzOvhpmBNsv|Eev}AA-$HKuv8Z9IB1^->xOH^1tGN$>3r3Mq-zC0{OG_ zqA6V*MJbbC>1uxl3zP1rl~K(LD(rO8xzy)`GgeLs{HOHi78VrH{ob*M4Ja(kggvOBnNrjoYe7h2 zjD`hWp#Xva8acS3+VGdWFwx|NVePjAA+X6v0WGc{g$6}PuyhE}=F)eHzefAboIXXp zx_CftE(;^IhxO95K4rGm*3?AJCvQ-Dn@b^Xm4P2P>b2T{LSB}`f5iW_<(GIb8@JU2 zj+sOCNpUG(n1}m88*E2nmltqeP;O%yLL(Uv^M8!c914XRK!(2N;v9?g^RvppPV&S~ z_SvPt+gKZDb~*e@>e{ddN&Q#^a>}K9$zJMi>Tjxz{2}XyKgj*E91CUHgz+dx`{4lS zXTn=*%l<<9S(z>SD@WQ(9ZVc#pK1@{6ze8jBI&Dr?64Q41|Y zA^D3ITP=0D1r_d;7x?8uAz5WYWMsM*6&4nj+b~t4tUNY;r6|gM!0k+u2!)#36z(S% zKs*F$KEw;N35~#kIn1UW0$rAe82iD)4?p}+ExAJS!~e>Kp|xv?E5Xkcr5S8!5cs8l zU0$S}i|(M|k<1S+x}^7DO*yiJ0*~n@6u8qrvK(kA`a?B8m4T`~8>5n$1YmxF&Cr32 zNFl6_2u6y!6B?HKq((v|i_#B&gor>1_mx^$agf8mP$;9+i{XU%O$2 zLW@_|%N2_9R9;Yej$D68{US90C^81hqLkp0P}3HL2%(snE*HnLsp~TT?M*JbFSQxMyY1 zA{W1!RjzXS^kF&CoMF?aS1Lj>Q%I5gbVX&_nMYAhN>A4osUbffCMA9IUM5$h&m$_cID?I0S&h;TuP4+ zgqG#g4L|qH?m2Yj6HjxTg@Fg^`|k^ZPD29-jSY1*hvi^x-qf^gaVUyetH`Q0gK z=HfLcjdZw|oQ`ehlBD6Rf`&vLlxvJ%C(~Ihj)+tF5^Q6E(FsIMCt5{qEF~uj_$T7G zye9bx-RdkG2mu1MXnX)X9Z??fiJd0|R(6aZD>KudnWoE|TPPeRF9IG%~An2BQ0NuWMg_TXd}BVEGWvq zFb6Zynacs{Ff+qTbGbIW7<1hlpUa_IC_%evaB!+z`ABACx?+AtnQVKMxNrf=n-fM8 zHl7%xa16230+=-3LyOeZVP<}=i6W(k*hr5VZ42i|JHq5P>17U26H{$?qoW1|_b+Pu z6(_nsCoh}vZuvR>l)AV%ye+Eha`tiq&?3|GsfKR3S{%>ayfdEw*&m&!X$ zBaEU`8J-~6PP#-cO_2B{y!C`i9UXD1bPi!sM?;K`#YBhWleqqeSq%921rc4B8;t*< zFk8E~dTLQo2Su3~@E&>#!x{0cy5%S>(P$2i1HEk#p!pPWV4aV3o>NV@EeEX}CRb&V z;UyO)oy{q2;kI1xSaJv<)R1*$AZ|J73b)||vwGZudQhQAaw-4I)rF=RltiQCQxZ(v zatTXZ^=+$keO23h90Aqe_Q8Gk-FNRhq%);mXqGP9t_HI+q;W7&8&gFLPS?R==l-rr zPr=pP?5sbjb%mM_q5Tkql1z+gnu0LMPBAG~Z>PE>9ky7pkDAN0UeYJ|A_g?N=VvHtR=_NlBW*6*Qcv}sK|m~gaUQB-}}MlOPf(F7kQQ>zUm%Vso&W%5g!F?01D>xPmJwBv3pZ6s+npRRh|}PaR{r zcUZ?R{2F?gSB@Z_kw;tClP;Y&zFO4L7+M4#lR`I{oXn)>F8Zo@knB{r<_vX9If(_o zg(FRf)v2oH(9ZKaRRuaU>^igvhm5#r0m{S#i-$vP%1SCK{+>8u7Xm9Mo4hccDvzn_ zumXNB;~F9aYResZjtko;9H!W%sT0!S_z(P#2ma%M|9Id(9{7K`2SW0aMmC3WH8=me z2H$-`UJwhZ+zA;0bx35mqb;eP7%9{iV?Ti}7n84K);4t|7gIhQY3o1*ci%mH_}zD( z=;&BbO4QRZQ_)G6YI0OvD8YUU7wtG>m$D$_pr?i9Qbh-ACfFd65DtRqB4rV@5OiqH z2jxUZTQg~D?x6AplW5UsTS(F(9VFI3c9fTw`}F*LD#S$;;&86~21)K{Yl}p};hoJP zI&I09G|5c$DvTszbmW@b;x&{fsGS+gp^X?|ZJ0Ei?#hr#WK;4PHn=1rQ`(*7$z1dc z=)$#O0}}L^Dvx$_bR1XZ9nEnIL$V%~s=}zGBqbpP%bW`#OjUO@iU>Wa0mQ0AkqIS~ z#B!lTxm5ix8HoRsmx&&dmmDw-f**F!#Z3$*(1znGFVD~Su~I->`LU=`NUVGqh8TwvWc{_Gy!+%s+Sjl#(eo zr@PZxx;yzt{C3rxxzp^*Ig{s3O=psGp8Rot$^6N4Zk#-)WXhb`C(|d-nmKJjJsuF4 zr^<#8w=cPM_C>v?(pjpF^Mr&eL!m@oo|8Ig65SyY#PbZeoNroEk7H!vzn#!m^o4~| z%#ZgBAY)VVTvz-o0XXt@Grq!q6}V(NILE~^d2e5~A$RMwj=>m#HLCFvPbyHDwHY{<}IgOq?Ke=#I-5xQiS!2T>(Am_2l?n-l? z?&bIrKg(cRH$@;zvrAYC8!>h1M5RVE)^!lmauUL4bgDzKbpu;c9XXw}DO0+ig02*t z*-3Gq?y97RM>Y%RWaI?6z@S$2OyxIJ4SDg#O1Ave3S(?`++N96Fo@xc(zxFit(TZPlDdSYZ5aRv+x zSMmrl)i|*R%i)riYNJOv#~pW$hfMawogh(fywws-PgMffsUGpg)kybboPv>tjz6wX zvSr3=lW11le2n4$oj2kd$Q#N5rgDIlYEsMrX>rSC6UiS*gFDq9sY+sFCp|7D8}dK! zhH{(#WCvu%&4&ZB5-ULV$t%GB{jN!!{%UM=8Z+_kPK+Aa-h`JV>P_`h%+=(jq!qz; znu&PY!E*|J<;KjD-Jg}bDr6`7w2NA)yE-fN8HsiIlunJyVmOJ!q|?>NGUCPPE?2C( zkTv7oWzd3csoO!C8i#IWg2yqzn=m0ADhyi9@N29j6+knbdxZZqt|bp7xfUKsMzOxD zm8?&98wPdh$p&Q8f`5(YTF=!WbdCE@&Vf_9BEHVRoKr4Dac4l`|8DA~_HS(1cuuy? zdve=OwI*U}~U6WFcip}_whSez@mUN$2Q9`nVl2>pwm|SXj zn5XGr%em#Hq4`M*lsnZvIIZ(C9-9!SUBuz8xL2hYGSn#bJEJsHjp3}sU_E7<|K%Ww zGteMOc1X(IDqe)qcB&>)4|`7GD%GWQ+e(@Z>8J3KV)SKmipwa7!X%5&IT>g9yTv20 zOy!L%#~a!I!VR6eUiGaWZxw1Y63dB;yppiPl(+eGEF5ZNq{YR^8Hr`a6Sr3`GhWq2 z>B?50V{1mjR)1oB$xM=kR@E|OI!A))R?sEY*YZ}NRu1K9Icz$`f?#8;8{(k!L@1S$ zsw+0nyPw=^XU0dQ9JW19+li?oF^eLrPF9z1}vhz(jZFlI)<^QdYYRJ9<9oqkajwZ;`HjM1><3nxH z8J^Esnc3Xgn1ekJ_j6nt$8zA6P@kEa8Y<+rAk zuSvl-#c+C#j_UggIPF_2eb#EeT$6qzdI+!b+XcmyKASnb*ydV&lX&SQns{G@4n_Bq zj(bF-9&gV^lu`dUI?z4V8IF!dEzb8HbbFKekS{s~A0A4PziuL4s++DXeEv^yr!DjG zw80AKtMnz>;*{m$v14V^Das(1T9#}R`M|*g;7#_)1mK0TPV@nM;`l0zzCFvKqi-C# z1%7I?(`Sx--@(_L5_B{n;rCbJ-{gLFYymr4gpY&gf^R)=r!FeL2A?Zvd?eXMbmDPr zu#tZcpKnv${j!H7~6M(Ke>;S>uOBVMdLNO9B%!$aPpH=H?nLxKC3%)^;4`VH5yw68j>O3XfsRLO# z)|@ql<^tJ7*Uk7;`nu5lW|_E0Z!{`>IgSlfek#5Hcb2F6@V{FlLTG2|dY8IhQJa(P zqkJ-+%Kz`SFZupM{-JwSvi?+jVp92g|DvB};nfSbf!`S;PT#j-EZijNo!6Nh#BIs* zdO`|5C0|4-MKT7RlPlI!=T^ao4D;lJemBY!625%gcGei~=V{g;ZTu4@!yor*sUdQL13 zrgFk<;7(jkcwq`&l!Bj?f)}UYeN*srQt*-#yfg(L7{ke@@8Q#gI5;_;bLd+=N%3`3 z%((tE^!ns@Jc<9B)6fH_p%W9=dybSc$CHRZ4?c_2lYCQbFzZ8yA9TmA4$z0C z*yZT5P)74JwGNP2JoZnj!-h?9Ta)O+Qs_?I5!hOiQnyof2r_4-lqKIw=c26Im$RBT zY0Jej{T`#y6~70sLBC!gWlxU(-#ZN*tcms{`FIhYg1_PvdOica=@fLo$*c(u9qo7K z?QZZ>-tjBm9xK-cXM9nA(fp_deKlaUuV^)2sjU$A>P^OS*D~`St1+$8S7yifa1*c= zNxqZXPupI3k0f1mJ&G@rPory;Q|Ht)jJ?zI1#IXceOI8bD0Zs$<*w%UYE5FfzRbAC z)o7wtM;D6mKIYTbSxi1~Y@^sCS+3*sa&cRm+{}9S^n3vtJ6+J0V!S?!#%)FR-HqC6 zJ~o@}`rSFPvUjkCPXJG4_PoZld#q*Va#xdauf9U81ZPF|P2=6!w^!lpi^dx1ss%sU zT9Lh|GW*U(*J`6Cd*QA`c?jh+7ZT;;WI45!4v3VBQGPxFTw@fFsrEwvD&UqO#-SQ98izIknNraC*h(b*Cc=P_?Lz(bTDq^v^Lnp$@V!ZMd7B8pREk zY2~h-0H)?!3_x6Z_jG|_VL!}E?Ysen8+=C-?sdnULH60>EOoAAjJ3Epz*~12nn)^gQ7TxBmlxkk9`qz+#{OZvabt z{s_QQpT8ZT(dT!e_IrH(On{X>e-D7wK7SFw{XYM>01x>5WdINQ{8a!C`TQ3HJnZvd z4e*H1UkmW4&p#93F`s`fz&f9QA;1$pKh|Hi-sfKh@TAZGFu?tOKTZr;$m{;D3v$?N|H;9jr41z?5O-wv?S>vv%=uJZcn z_o4TB{bvHK_WFAR-0x-XWq=prqXk?g0H*G$1~BwYCwSq(Q6T68Xfwq=$HBNhfW`pJ zcA^*_yo?xzWIN#t58gn83$vZLg$HL5A&~6^EIfES5k_POVi5@sHWFb>wiBZ8;Qd4x z-^GbdcyK)tuAl*u=>#S`_#6?h?W#S%!erW{pZQ=~rW2U(;8rSMnsqj)6R|L=qg$Msa49}k71SmXsga|JX zTer=Sx|Yd+{vU5 ziwr4bJ)M|^2jM!VyLlchcvFbS&84aN#8-$955nC{&*b?|;KG9wiPD4TJ0S}X&LBz= z@96|9Ja{Kj&gFStm{CWH&*d}%@(}K_n-aK9%fKwcOJ%uz8}K=V_g9AWbYdJHyoXd? z#Pc2i%Uoi)h|@xp_j4q7D4ZPD;{>828hG~SD3A>gaOp|blUhYV5f45@%0}_LqmHss zN?BhF{}3rtc!8hRHGPa!P;iXXiWkG|31D4LtYc-VeLHYjo#M8i0)8)*E1dOoLM|TM zK()`{d9Q;dja1H%wa03kc~Wf(V?CX~j0ayN={tB{*pa>?S$g3~(h5^8FO)6+B}uR3 zc{Iai-7Ax&?>k9aVXUVUgzgJ0H?3sd0}>=|X;~bj{A`kwJRBz#VPeb?tQoThfI|h7h0x#s3Nd>CZ4nk@Jm2Oo7XdUn$ zCgD4P|A_Eys+T?m{v6@2#0HoXkn&&~iu6x-A)oLPF?^yF9(EM|QQ^5*Gh~Gd&y~tQ zmC9L9CyM1k%rU0_os>y8{aw0=^>o5o9>fpPn7*IqT?QzdyI(bTA#mB;82$`!*jFBMI+={98%*CCL9efvXNtvi54wW%Vtpxjz9e&5Pl? zfWJqw2YEI^F#8MSKS{!mA^$1iM|d8UpMl3iz9syy#qj8n|p$3~vH1n-#-f0xp}S@Iro#^joa-3zW(wuA4?noNXYwk<+ug z)UKuo?FM)-NCx!P@@%l2ARGHC17-s^p~k_V0*>Jm$3F!wtBmn;1hultzN$)w_px>( z{&S^1dn|D2n{yQY0&qL2ybt8hCR~-Xp3X*u2j`NBH)?s;f<>;cH!2e!1uoau82%w} z@*{Yq58HtcPQr^2#>>&J%I$LC7gG5&Wzuxu!;|n;z$*x!s>**1d}I>-7I5j+SovY# zxuVe+3C5m^(t?NQ6^ijaJji-v~%LY7s#|9%j$Z&rOc02T`oi?LDHvi z`$FK82>*#>R?U;!gWzV;u}jOF4HntFT}nkWaM`>Vo`s1in-{}J0GG{);d%a;2NiBF zK)LMHccec1dEjzT{956=fy+S?!v*B0lZi3@YT&Zjzf$~@fy*W;ob_}ztvvW^YQh06 zuL&%&2?taY-Ucq45W_iMzBY@hh~dS+=O*FT0bii--morjJt6`*H5I>oJIZAf4l9#> z0$kp_4=Vgmz@^s@DZD%6WfNok0pPL;vGRGqWfNog&w)#qDV(`qM;}~>wZv@nQEL;ynN2BbEiz3 zSaI3K6X(sJJa_)B^^;~yJ#XOj0i_Ej&7N8^k5$c?T|ejMX*bWmzy=c@6PR5;a~A%T zz>tywL+mT&%$aq8jUS#&o;TaRe(==k(3(tTWnW)8#RDA{P<=#nWbAJo)CyGp5C*h%66+D{q~5 zvJg>=N$ARX5IDJv=<;~@@~f)is)&Fstff^?yYbc;7tgslUP4rPT0CLe%~LPGDo!Vw zJT=A>99PVo@`HE*5#{l5^|a|HwSrDxNpNs1t6|zJfz+y|>2C&2u_>P|~wZww}jh5I5aE~Qk0$6E@Hvm>!;@1H8TjC>t z2Q2XyfCnw{J-|bj=m2=w5@|5y5leIhc+?UF0FPPXT!3|!7z*%&B}M?Ox5Na1CoOS3 zK*%Mg0W5Kexd2ODq5+`MB~}64;}Yutmbt{U0LxwCWq>A^Xa=~~CEf#A;SzfRR=ULB z0am$03&4GdeQ_UL?GiqK`&|g(VWFvMm(cB>Ptrs&=uGrS%Eb_*ni!50FCRV=z~YKg zyO4_-;7p7|%5joJ;$oGU05nb1604|3YKjJ=E^!}HLp+I87cU_dVh2)9e1MdTFOY)k z4JheARuAak1DLw`Yf!9BNLrJ9bprhe=-4>Q(wr~-c(8=( zYV`66vZh8^(=l*QAa04WH0LWp9;_tpM;-1*C3i2J0AEMk5@l)57lu4|4RJs3a6d1( z$ANniaZ8k?IbSF8;17uV=MMMJiJRgtv>YEETtLNdImK_OV&}_79$ZGndz|7uvaVZE z*L12&qMoOK&LQ+8CG31NiBks>{<|amcPYFZ-1CTAqMoCU@YhP%`5Kc4HSc}TeJJ!%G`2#g5XjJJtfa3cGz0GD*T;8H0B)Ok7&?j^Pi?vM3LhGg*F1%bt+ zHiPdW*GK{7o_~-)kGMdOB#nxJ-koin6=ygri2=82I5?LW2FDo&t16#Gm8+>rg(p{e z0SQ#Z1uBv>swyWC!?-xZxFiO66IIS2hU?=D*Q+W&K$VYDl?qR;5{FsLm=PD4k)%;o zxse#=#u?^zVtADp?us+q)rnybF*L;)nmRE=h~c3)!$V07bUx36ess6-e4OEV$>3{4 ztJYJiVt4_<$R8$fKfnCH5?JOKl*+OCLXvvrwEm?27jgB!Q0f;!;3uR&;mJ-LNdoW2 z1>Q~4sGK&17(R|OeB6m4L=53LL%0*e4~b!aoMC?_hF=oHkvPMVP7I$C1J|4Z&$Yyi zP{Xr@7}Dbm>5{?sUugDA)a-OEF(Z_p(h$HIJ>vpBmB8;Hu!RH^&N7_u!+EfX1kQ~M zoT~&{A@Fk&PSlJk?2nb~wh% zae{f@ zI${dXTmn2o^?oVKGoJ!}EP*RKR7>%zerB}C?PymDUx$Enjlx+LZC##$1qeA@6lE-f zm_FR~17trzR;**oXtTra#125`28Oto4MSRwpkN^lcwCzh1193UzkrH3?|T5mdB*_| z=XtQ}L7dke0C8R)0K|EN0TAa^0wB)21ORa!?XM8$)d3*RyA1$w-ckU>d20X==dA}o zocA06;=HW@i1V5O5a+!IfH?0H0K|D;0wB)&4ghi9Q2@kwE|`uuFB<@Ho(+IF?_2=H zc^3d6&Kn7UIPY=*#Cekd5a-PXK%9360OGvm0EqJ*0iZbVL$otF&ifhYOuT}Wi|t4? z@itP#c|Qb5j`Q9J&csJZ5$Dk%^;g6f&_4md_a93@F{w9X4EPT!8*Wgvc9^o|mh-DR z9y|epeo@+A(Zd6=gzFcP6i(@5KdUZIIuBx&^J_aEq_>Lex1m@{ z-$v4DUW{qUeH(Fm1_Q;<=b64h>2`jO$AkSy_%TQLF;xuxv6yHG6+i71KbUx3dlBkGON9gww{SDCX2>qu-BS2f?s9Y*z?Z1vJ z3Gnooa|4|ClNqKF!`L{(*iH<$5W`h*hO0U;EGLG^afZpA7@i`AS#gG0ofx(f!|ic~ z+mjeDwBXO*5W})K!!pU>qc~k=y`k>NgNW_pxYmyytr?_MVTxVd4X+~heR1}E4tpW7@9Sj5Y+^sGjM(HD zaX85c73?$;8`GRI!?e^fb3ZY7;tZZn3{Mb4*EmC0#UR~*6(8I?Quu# z8 zvVH+b7kvS(O+W^JU`!K5DDjIDq#?g317M<(kSuXAKn}(R0B%~dQNp!hTuhfdvykGi zDqRDB8WfW>aH3}BgCtOjUui^l*~xWz_*kWc&+V6jiU0VfKQ~MsSo-@7l4O+A`jqUpC|@+#3v{s zeAFi{0C>zNssPsc#5jN_eBw%g^*#{i8gCIBEXx&Z)z(JTN2Mt1-p zFuDf-fzbm12#huWATW9n0D%$3a|n!n4S>MtBLD$hWN6|`!o?w^nZkwpXLoT1(#3vJOdv~K z2=I887z6M`mbeaJeU_LB@MM;toAXmy;y!>4S&q)$nph7)NEa^yEY=0xq?hR83xK7% zI1JFJi!`iu%dxtu(LG2LXM(Us7j$oWKo{cy9@NE5fQNLk6yRZ9JOS`nT&7ABw0Jk^ z;w^xCb@36v3SE2!uoCqEtOB!~TXgWJW5r>@gOrObq^J_9K|kns}XT?N(1yj}3qeHE3>B(-;>&jH6P#Bs+xbYr4h9s`Pc7Zbz! z^tBGd`UHd0@HjC%pT5&!c>aMD4X+ZztLfi546iDNE8;fLa<2bAJsTDN6(9ZgbjHcN zgTMe3HhfPEk@R7}Btt|pNN=g2g&L!`)BTPqLQf*NxV+!sMgtw^5v414PlFOyfy|RH zJgb4H6W)zW-}u4JD8Y}6NTgVjlN8-d)WO{S69{IK;9$w&`4G5NbiPuQB(ju5#&P#Q zz>-5E_KiTsR2?&j`W!BR{jcPo*n9Fb6x z2rNMhcaq2>-2EC@&LfdWBugg0^uh$@`O;DFSds#o=sdWa6#Nt~o0(8W0zXwX=3~<< z+x23SKtKw7Ndj4#djwc6A(1RicEeoYR}tPt;%bwtdajj3hH38mz;ZpY3{xVnIJFG# zB;v(b)34Utd%!Yz6q5$lP-1&g zOA@?{C_9zla0o6Z!JXPR5|m>A=EGAniS1L(Jp(LH6U(RC&J>m<#PSc#y#_45A(nq= z@5fnespTFS?1=n9i6nV5N+L%^5+x57 z;#KTYt?HQJM9I+IdT++QAg^TTe?)sc=K`0OWa@I_N)a`2uO*Qp{OoMPArdH33~BVx z+ImKvF^?DqOR{?u^c*9$!TMLE_YUA)Fi!OIWx3~Z;5kV+USGj%!iTEzbAb0r!mkEi zl7!C%UY3Nf1wNecG9~{7@X<-QzYk-VCGigdeq9ni5BLoU{;ayBJk28fX~78Ek+qug z0bL-T%zBLS6*AAVuZ9aIVMRqSn7vhlvFHSZxY@9St%PIvL@j$h^4lr@7SDc?Gxk2^ z-{slckdIK_t7X3n**oAkUZ`c~3EWvJKS0Z--)3&6d_c>l-+F#X`Aal|?vmdjFNSBo z3^M&dkWbUPP-k|fudMv+j5|TI%mfKb{10@P&b~E}@{K6=vQLn{0h_z^f)ZT2!J!R6 zW+4bXAZ`Z0pU}Jr6k{}!9vFYxP29CgyPTViD6HimAhOWj^d6 z*Kn`-xPx5F{pM2+avkqtJ`Ln1QgA)bF?Ty96M2#O2L}oAV)IW9asxld3_HjqUTXf$ zL2CIRbH9U3=4EEYL2l&3%)>w)rh2CEfO!;%Y{FDN$~^8M)A%@(qoo^(Z91P|;+1ji z1wv-fH?$g`A$b@|wMm-GuU)H|A*Y7xHD=!9AQLs+T;U)=%`#U5k==fShCg)y z=gNm&c<{%di}Ny9V_6u2rAnMfrYMH#$nf9}VyMXcIT)&mp@RB0^K+mV6Iv-zyoQNQ zA+(Cnth0gALMTR%wyX(2mn6_xKv%|5RhPQ?d_Z;0&wLsTvab20jb;B3WPJ|je&^YB z9t;!b(#+q2a~-K#N)=@u0{Y`P+GUr(+J{wJN10e=sG8Ioe}v>8&g^+MLR%7eSk@%{ zqC!A7QJ=}IaTuOSFktTnzu3gEr7NHCrp!pUv3>?EH-}xc-24u7FT>ki*l!CMlb(Pe z-aE$<2jM?ODfWA>0bsxPYXI!`J_f*k@2>#Z?;QZZelH4u{hk+o$9^vd0Qe+Z#n?>dvgJ>-@6+C`@Iza*zY|Gfc@SN0kGeD0Ra2GR{*fz z`y~MOd%FR!-=prve(zfV?Dtv$u;0_+ZS40l0kGfe34r|`bv^cb=L2BBR|SCm-lYK8 z?@a=rgYfle3(gcO(YYMA4si$QOf(?HnZgeMaHgONhjOu07Os?q2CbGGki|ymK>%!o zXw@+%Au&keIVw|!-KI zX!7t0lD~=gJvcY)OH@MAo`s%_IO^e-ca0<74^Y;f(3QmMJp!~Bp{pcXjBFo5SI{b{ zel0`86eF7|{m`lO!&s$Ku|$%2|3SQAhc}$eD-mV|VsE|R!4Bd*;P4(u=8YkjolOQE zI0GY8efgve@{qGQ_r=_RpQylMAHQ@sadR&1&v4$JfggMjdj`jQ`Ivt?SfuYV93j~b zg{hFzB^y1Igz}^=|NV|oo)l7SZpn5rv7MuIzv{4^bCPa_CF`C{LKiCCe{qB^RJw5| zQE%n6)|_roGe_#9c9IRN-gN%;N1=Oy8<0KYSVE3Y=n zrmUjs{)_uR2g_n&`7cf@jQ`SeFk=#U<_o~r68__u#gLBuYV#RV@d5Y$87xx82T}#P zMk-KPrg?5`;O$WgXnB(>ArEdR1%Ks9ls^#VpFBOm6Cp|m_n!+jvMW2J8vj+mWoIfp zvjO-9vh#$hCi@(;rUb$i8`5An4~53LJbN_gmm#m=4je*WXJ=VR`7@w-*`JU`d*hw~ zx6ri_lG;ol=L6B|4S_Lfi%KBNK;!}a4ggbE&(RT&xBc$MVSC@K;3m+_MACJVMzos4`C& zXgi@{iM9jP&>J!ItP-pd3A6%eb^@INw0iow_4cOh->!v&Si1B293K3P>KY<^ zPlEYs;utEZV&5*{lL;@AILn|w!@r0UmPw1IxE0BT;NZjca{(-#RYkyL>9|Si?94Rk zgP9Y>BZyo^7c>4h0jJH1k&UniJaK>8!fHU54 z0662l8USa!Hv-^{cQyddcozWRjCUyj&Uo(wz!~qO0662_0Dv>z=K*lWyA1$myySSC z@%{z?XS^Q*;EeZA0663Q3IJ!k{{X-l?-2l;@ty#{8LtbT!5J^!@JVO9T>)^$ix=*SFL`r&33Mj5BE`*ZBY?#XS%}~2y$Uo7pW=sA$5tvNDX21 zN1uo@kP6WUsV2@x%Ed^e;QA$Mn2IcRX;%Z_UPx+Z6J@wb&jwl)vZw7w5&{u(FYPMi zZ$%z+((SyHiU(JM;_`W%7g6!xlSJrC0j@U;OFX4<)P)kCMClPf=Eh&Cl@GIHYLU!& zZnDgW4-dXVgp1q(a45nriBRcw-b;lC)rc_CjVFmL1OyQIk_Z>4J8z=m!9zs2`dwJ9 z{|H$_H!03`ZAUT{R+zJVL4YgF+cW%tdq6fDnEwiMK}H_%?+L$yWt1U*gz|Tx7QH_( zJT0hU*k`37xq|7{AX!+M2$*aKhP%!R&=gDvkT4;T{uxWzW&~pb1Tv! z^A|{ao9`k$%lre6BpG?|HyMuLA$md!BF*Z2LVM9R%Bc&$AAKZNKNI4uWmJXA_WNR1dcOo~=M+ zTe0o;yy_s>_Iut0BA=MWw%@Z8$Q2}mZNKMNKxzrWw%@ZGi1aCK`_oH7_6NFKbs;ufe#y9>#H!KkN_`*ojw9`}3!Z9{OY$LTne zW>gY_t-a?frvzJj&o@A13AXl`Elvq-?K4}QBHG$#a%h+OXltK|7u+f_+S+IOoif_m zXLbd42~|d0`^9L^AbcJybxNou3fNn%eNo$;202e(?w3}+8>MHKN2`QVUu4an~ZJ^wALW= z3RbbM*MR?^Dj<3KK3Bagfd_8_Sv$M?Vp?H`P?i|Z+y>N3Xg|r{!+C)s57ra^RYaxj zuY7n2-|i4`X!qTYlA%(GPKzcfxlk&}&OxPq$nf9_;vbVu3bG{OaUxuwM0k-1lamNL zh%h6G@BtBKClUTkgn4O~Kw$^6VgQ$4rR(e&4?MxMV2PKFMmhxX%+-J)#QcLW#kH4! zP`6=2fqsB!H4=RSl8qVa@Xz&gu;A4UZxb-BKRN=g*h>toFCB`{q3m}kXMi$j03NnD z1jE>RzhB>&9GkjRFDB;y7*Q!HY>I_j;PA+5_IJ2+O;XW^g{bEl6no zKOyb+;w2I#$oTkG*Aw+VqC(+iKnz{BA(LFyg|RmQbhgk-?!FPlUbYVDcL;=D0;FpJ z-7%fFlJcNYhBoxqa3(2Vhs1-KL>Q{AjT3qip+;L3Ck!US<(l(mQXZ@!Lanwn&T%af zW@~HWglR;$oqp69tK~K#ET#wdNExs=TV{l@(CxP z4rM|A(Wl^wu`if}XP$1Jiid+H)lZu{v%YTH+{v@z0&H6S)ai3>o?lW&hRvHlb*9W? zAWy5G41PtA<);vj^W+ptFuomZ(%dPxf`WA{PMKFfQ&AY6@;9_5Ojt}KL%91Je5|Iy zACgWlP!L0izQN!d5_Ecxg1E3VonEIPnpx+9YpCGuQxpWK;N4Rc;9UWh_}~-;hwzpG z@p}}wVblQE5<^T+7*Z4!@blHsM_rs zN6>Zg*pu8w?`{weD(23-C$VlsEG#yF)$M*mszS9(6YbeW#m^>+4elD3D5V!Vh!0k%n8`F(y_x2IAs1UXsv2Z+j4LNK5;VoiWz%&oKBK ziQ;11u*EJEo9_Our=YsOVb-}w-2jz=zOzdVA+8%UW5$d+{Gbtm-*y=Ou^bLujBjYdwRVWR2Tt`KBPj9k}L>4Fs)bC{U% z;Ycrc5c{O?grze!;{Qpy>Fo{TXuNpb(iw)4G<{{&D+M`jLSu?3y?jADjN zST<>_aW=+iGo*w|{9Kffj^8X=LWA;SfeHCjlw`Za8z>EQ#1f+~^a`vEnBy3Y;%Ss*y2M{V>WPwkR|AY4V;JOvSqZiDP6qLJ>A&og z)=YXAgV-yJiY)|5apY4Fq%Lj(+2?q~7J^d)H648Rg2-L=>7Za30LxxL+?Zd^3TA>JtB4NcD+F^b*bG ztZFz~w!~xj3BT#K3Js&wFvl4M5jkqX>P71&A3S)_;D?e#XkI-pMLu(h4;G?&JPE0z zy7y55Ec&^w72$11usdyx>l2rFXW<{P=)jb-VkG0jgWwzEdc!ztgUYzXTMM5uhPlKx zeGIyOiD8Zrzg;NZ{Wd5WPluopbJ-duOJNu<+5p z-sH?V-}C#O-+4dpIp62fqL#a`S!Oa4~AU z2f@AGW4FVeEb9JvPt<)sJn^bO@74a?n~u7>49PKbU(t=U8lQq2xAwwn_W?*!@b)kExpyJHNbd&_U!>9J5U`nOSUl8}J7GqheZWHz z{M;U?FyHX18ju>F1qG@6KfQZ4)U4S+cOL;ADgA^>>4TEePe@811TRwhsX$7jqwQoW zBQs~L$3Os@pR*_-?h<6JJMb{l@FXh@dG&z%41zzWb_bfPsC&(xPWJ^!a;wq*U5!lm zl^3P%9S2j*Q*0!TlcvI}M)}{5P$ASWdH0}5?74^W+>10o==U<#04y0agX>CAFrGVt zCF3}iK{XQIS?duUG!0TRb0}Z#EL7iL?cT?d`WvKTO*ib0L{)QhAnf0BkJ#dkD#C@d zyRKSQlD%vSoGtjp;2D=(=s`5`l+XNgTwCtcKS$#jm@dS~-Mu~%S+r=8TYc;j{kTs$ z$5vHUvl;sk<{8s?_@2I(j^zDe`IH9SQya&>qG`b){a1G&Si^HQU=I%HG3@t;?-O~X znHv84(*k?Iujqpu@;lQ!q$AI7yHU1e2ddqkPPbv7{mV=}K8j}iGHG5LP+JTSNe?qbwfvb|1zV+pB%F+WqKd`!L|%2fee5evfU>s`#8UEZt{sbvFjzEKbXdl6kP( zy%J-?CACLi=?~cGCl7JEH`B@|z(hn@5~@6BD%qR5J1K1v$g2SiSR@v0!M#kWA=O{!sQr!ly&h=5D@w@dHX@_q)a)Q z!SeeF&?}U0hx9KWg3gNb$YJO|sZ8fdUH2OFeshuT95bK`id63?Rxrt!o564z7&z#D z0zJ+f-Gk^LPlJKndKTwr&u73L)!bi4$9I~02e_kA?=*6UGxKZUUaq-0P&f@^gHCU` z<_^n#LV`Nqn|Gym_B!vJF0Tf&uzv~#_eC(Bu0>vf;GW{X43Ve9Pz>$`@`mZ?KaF0h zY>&hRC+Uy;K1?k^v7eU(7M@vk&(%FtbEo^3eXjf>6Ww{}n?8yD<=alp$5rZc(Tayy z-N(=mom{)pTYR2}Z#ei9e4b!+p9k$o%wiX=!gvgeAPc)=Fzo8=!rIQlmEQDa4GrF+ zMy~dlHkD#|e${RHS!hA~>~_7W96>oz;!fMfytuBKM1ERN1JNg!}822oHl$Hm2XJMEFT1!V8rM``t*b`|FD%UX6P- z<~ta!{_5gkX6!rdwL6Kxjb#0yu>PGZGoT-+6@r5$tRF|CxyT+UFm-tf6e|WgPP+H? zll^`WOz#^^I5g(9?rq}lBV046cK`lj4Bo5V$6ag1NrLzz<*#=<(m(9MFDrVm7tLbX zbbd!A!u6F1w}McEkv#(W*xMu>{{fTwV0`WdkH>=G&c;l|%}T0&6|;3j>Fd)lHM-+% zop=YTS2rbI-zn$h!^+A3p_A)NoV*Ap^K0iV$I=0&AegFR_3jGq=JnomtbR2fTAR^> zU51#?%y<6>W?7Ny6~)@idpMZ0dLlaF;6@aMSEo^Ip2p@Twd))td`eot9GwKdx?qs zzhTw4K8a&|fYaS?AuF)_(t$PgAMKWj{s+-8k^Yp>ZvuUObsDYKus37aeO#6#+^=8} zu>NwiiJk5jcHc~?w^i5F8LLN>)tw@UOqjqvfT<|_d9nJQViXC2uEW1WO{=)e?3+TtXY_!b{_-JOh{e8EVouoC8;>E5CM&q1#l*D zIG!h`!1LQF@LZ2p7k;5sVvQDk?@d^}oxdC=v>Y7zTW_=^{Qsc%y_!aE`Wak3o3*2~ zDSt28wi&hi(K}-~52f+%u+mz4nm0G*&2ndU_DmP%H_%jrA_R@QtCc6cD9B*60=W$VRpH~@FneXStXZ` zfuUX(x?3@fJ;D7CZ=Y8WL#T*~KR*Tc63zV{a3AOXUvMvhp&a*KG%at?+`r{&l)DeX zc!TB+7wEq}g6+DhShwaohBo>#E&{cSd1~ zQs;8=d#Cet#zL-1?mz~t=i4XGod@=ZcXn1S#CT-}2GG--`%nr?7yMq)%ACBg54^&k z(psHA%fWzSFq2Eh2gg=mMb2KO8%yN}(II1DPBV0j=L>vm&pE&}obpz4ffW&NSuI{7 zbauL{I=$H(qUmh$S^gRQ-n`oTkV06X>vZqB>>f6Ak2^@04_&s;I}@#t6ZOtT=6(Q6 zcq`o>0-cUGW>H{C*Qe1<@_iywwgvNuGtt`~JM5ikl@s5uU%;=H+M^W@UI=uSu<=li zybC`S<@60$#C{Q-)KTtLk$uyqaUuREk?1rR_2`C6b;se${u}gFvsk!wz4QsU8iHP? z^9i4hU|jy-rTZ{-_-sVR<=?mz3j}yes9$3@V2yK{v*1s7*f)|*WkPdnv65XQYH}@Y z_G&XDcq7(#4_x-J`#oIUtJih?R^rFVeY`aYwm)4sQ{rBYEUKyHg!Y8fP`xqB#Z>jZ zk(vVDbY04KaM+1}*Q^WCDN0eB3k}5?uVfdX)Z*pHJieV>g<^{g1ou}WSXIWDtjLaB zMWa32y>K|}rlDL$jx9VKePNeC=6+1C8zh6bIM~X?oUCfLCcPb-n%ck zhc8H9#?n9ylJn^5^Z1r#UV}IH48ETCMmVZ)_hJE|34?b`vbp>`x3d~e!f!ArLV910 zLDAgxz%K(M>#lV>AEV@F)l~fYl6mfjF-kh8cGRo6#j87wzAb3*n$~*@uvm&O*WZj` zP#!NByNY(Tv_mHWp%3EC{Vex02*&~pz>KR~y#=TF;9zlVFKPcx8I+BB(^stP_GT6r zZ2hA7Bp7Da!gK4Lxw!mUCBjP})S@X{+`W9cHv>wS7Jg1=nsWsl|9AEwflXiLm5$v_ zhXJFGV?5myNt~Ddh=QSu&GUzDWOsn#wiemaS9}@-sc_tsHslk zo0Kf9-_GY&LEU`P=^8ryGK%BTAp(zuxc>seNm!pa5%U4Bx`PE-)^O?a3GRJ+PzrLx z71i!Pax33M7{{26h~(kP5%&@B%z$*STI~evld|xsS6#iCX;XV8T*75-*F=$I#m80Z zs=}KEaFtco&{1C2vW{?XxH~`MEyUXODO@UN-piIKFm)H1xN}@y3(r7j=b0^kexvgy+j#>R=tq+`9a}tx zG}=%U#vSCcEwq+>{3Atz6tnLl!{^mv`BnD>z9-+SMEFr9!cQv^o)f}><=$Ms+xWC} z8&8!jS119mVAt>~D`AJ6pP1do&cIj}MU17-+BiIxNR6WyqK&YMAqt*BdaE#ASE&gK zcagh`S@AJ#`zuU0>i1o>etp-y_ulK(-OF6YCOqoh_ zD$qu~sw+LOYh?71|M)HjA(uYuRiUqm?5kQj?@{zRzr+|HbBA|FZa(lRSY50yauXol ziad8IW|Hp*WBt5)KMxVz-VE?Rjxike6MPbrg88n@XffWY?!p`td%RGTAI9VZcNj(@ zKVn=Qo@^}b?2&81mN`{G>LAUy_k_FG-Q^K4Qaew|AFQ~4-9<_EYL7Nn+`;bNkHTWv zaTB}yzk+t$$L>B6wBuHGmnG2hg1gzVCplop4ejpb=(R0A?rC@50Xy#T(JNfP!^5rI z3_te8AR_#toZxBBbCI3{B=8|4zd%Pbf51p>p%{5(o_uUG;%tIR9y;KzW&+Crjsn2# zW@^f9z`;R8IpkoeIOwA-AByEBW{yj6m;mFUhCmp(!{qmr>1CV7mEVk-35B<=|&wlZWE zAd;;dmx}2oYKkimRLWuqND8Nwkw(vSe#(VN&Sq*V;R69P4phK4Q9E1Q2D~H}MUq4> zskcByWaAeMDiNu#gtFOkz@cc8%}5AGfP0!rw=$coq1@uu=EHN5gO4SP*#lYB7K<^E z7~J*@TXivn(?hO4sM0cJ7~4RNI5BE#HDl}mO`VEB%}9s^iV=56gD7Pd8O5Tz3`%)L zlSQ%4Pbl5#uIm^hOnX zn&?ZY37{8su%Z-WYDFS&+byeUpf!raR}8y1V8SgfeigNPH5KsE+}DL^*rYoJ``qR0Un7z==^Kz?!KHtdly z5@~Amt26@)W3@0!g))qxhD1wLH9SVmFb0bXw}gWzKe|qe(;G-T28|9V zJK}7`uRKPy@ix?$&=va=oT0Mfgps~SoVOO;2C^PRc~pu@THSz9MVvq>APXyCEffki zgQODZt(5*KlS&B2#kXaAPAd?HIubPrH813$-k zTbN{GP=+MZ@k22*8!2p$C{1PAHfsL?g_AG+Xa2x676{OFW(ArxH9puQIhS#c$_#S*AMt{BHE-#4-F zEf5Er=-VzaZlT*n;xyNbF`Sy0EHw5 zlF>uUMr|o%FqSaNV-kZQS6)fTp9Tyy8Wh$9YxXk`hF^J%fHgqtpvsV#HFZ#?m!dy3 zQ&-7bk~bt>2Za*-Lud>RT~Jpp0+mV93K8RxVb|H?1X^vL4uLa!fV~DV6uTgobUTVG z(83w6r6PbARZ4QWP9Y-w@0(!(5bSb|BZdMwNloQ`piq%(Hb`rPE07?tk%wd?FSTpM z7;K}3$IK}TqCEMG{@H^dV+@pt1W6l_A*3GY!A4lf8_efVQ)forBm57k=z0khjWd6gRan>oEl@ zZMdI-6(3cXdltc12Zg{;8x`YrY8OJG4lSl$P}UbidtMpwD~}xr-8@j_$x!f^nsR$S z-QFg)=Tm!HjGL(`iRZ&4k1eqVHpo9}6vHY_IWK85GnSeYN`tDHabz^Dk-C(I8_LJ9R!R*p?#&MgRL2c9;X7ZaX}nv!V4_4EZ%{i$j4^7bi?L*$ z0$aN`GR;iTZ!*zuMw>}Ook<4|>B}LS8I@4-ifddP1bS`Q$io!SeUh5Nl$`=9F6o4n z=Y86_Ke#7WTrwY3jaj@-*hE2*WgvN|(-d|rvyb#OPOSfA`O(qxr`H9i3bc}#&}Sy~K*o}&R83rv}=4z_mc zzNY@DaZeAm%DKp7BsElYc^nG1GR8m^pp2YwZQ2R#1ImbBd6)!rz^YgWb%c|5noe2~ ztS4k(`cMq(E#>TjLcOK7M~t$de=&^Ypnj>crgp8irvBH;n%duLYw9Xoff`S5naWWp zc!ghiOps3pS_xI{%-(zJ)2_Uei2-ByEqwSftjtximXUG}tlNb2SJae%l3>u9u}69q zBk#u;wv6RI#lVC@svGS-3$zo{9<(zzyxwnV03sn=xUGYbj{ zLTxToWkxH5jn_Q~>fvNtS!X;^1%hr^V_h)DG-GfPj*OJeI5CN--v$+`o`!9iW@CMP zv#`bXLQ{2$KFGtoql;63j0@@mP}nX)EeloUtUf?p`4=dNJQM{ASR{R@)k0NHAB(Yi zs*JBv;xz1CW*}L>m~=hRw?KuOuP__gnHboZMvY|}E~u?lw$zwmu%*Uk1H9DsC|mr> z!(=wn=`jOAUAYLfQig4*W}~j8^}{3&r5Ur;N;JSuB|A-LL!rD#G%gmg07fB z%PJ#&<*@@Z12zaXH99I^?wI+rg|T<8W`rA<i=!*$?-bTOSZDG5xxIU* z$-236CyQyyFIkLHfh!3S%RK{pgmY2pC<6Afp0^4*vV)M1i4CiC1C;5`Y2E-8YA;|T zi*_W3>H|qEKWm_n5!94`62C40X#lEBqSAV_l*H3t%$0>u%EP^~m0|F=_jv8xyX$d%}8QFTlUuqOy$_T5lL>1OP zY86T=+!$(TLoD3LV+GI>XChU))<7l>H7s!pP}lew1k0*5GnUPaC&vqC*Wq&eI>J;s znX6kBZCq8?m&v5hu1n;`2Gfc0k-E2@IW(LcIIE%IFL^3Top$N>Z=YX#cK_C7^I)O3 zFoAPujr~2j%+SPOA+K!DQ0(2XODFq#GsA_+L@wEH+x8{%g}6T2vZBAcZT%Stk(0;| zHpLrOH>`3d#`CF>@#Ik5;AkS}#N*AeSo8LHZ^!xV@xJXn?eVzcZEOOsxN2P0uv(d# zRyH;{>-OwuyoLFQO(qy9LwZ(Yby;}GwDpuiDe3jLQ;up*$tC&CPwkMxno106CX_tBy;15LTY@( znJC1wxY#q5NIS9i-u6C+D%QF=-qzjRU<{37XpOas-oC9{8G73~Hi}JOM|XQnF^RFM zXuG0lTv;@pSv0N^2QU`xQ~CJ7L|#cvW#Xyvl#)7`OBIsf8xj8$8cGxrPMjgBjN_S| z$((YNNEM2*Egy{+^vf@fl!{g&nL{j-*?by5V;Ow;g7(6QL|`#a_a(=&y~*)BDgbE{ zS%gZlDPuq)QYD+o7o#9CptGS=K5G(Fn_IRDpN|59v~8@tO_;K*((&=+WJ+o^B`Pa= znA(+0TU>+bB$^YOC7m2BgdGm$5|cd{lhaBV?YdIqDt1My7@VWIOo#1TQ#tr$`!t%F zY-L+!c@C@ILXK@g&~n4Xm=o{GOopsmN8x`yEVL&zSeVEqow2-wOBPlB;NlUq#?DZ3 zXKFARm%J~`Y#-=!MbMkk#dA3+l<&2E#k!$~+p=P;cb zom~yi?glY8(YDbUb8xyp>x?6-5IZa)j5|oHiF84jR>(63QX?f1{Bw`8}ax}sRG>P%E`6hJEiXk`GM89=KHlFrEh_D`0% z$(U6y6+lHA`zoKr?#cl6SeDtByt%if&DgW+GG_K(#*7Zk7}19rWAj>Lk{-+kEjI8S zNLOZ4+HDY!cAlZITeHl5uqC~H3i~(1rMftSR4-=`J35;E?3CKmx<1~!z1M-(yskyG zo|Z z;*%MC!b!Dh7H7VY$;JoJjTRjz#}fl+Jhe}$yoCyEkH^3rkeo{nCR00cy_D@8Tf?~F zH^OMAxwTaSO=mKn54s(jKy273qeHiRFIuBBEo(oS*pZyb28E?l<7H&|wn0&}9>^sV zJCMW$cCwjqlV*X~<eQ5YnxG-!xIzpu zcFB%HrJa!k22YhatDqDar8&f{1(rfl*hro)9A_rt0fG z5K(u5|9Kel=V1s|D$X(k59$5=Akn(e!>&Y->24l~2UzIi;ktH@*c85fDa-RjeIkPwc3(TOzh zq29%~_h}|L=v*@B4rQf)cDgg5@pYV6%S0MYwtO$t8Qg(h0liTwlTVCcXvE%VEU7Zp z85`We$u|;1Mn9Oz@5mEnhWX3h3WYiTyn!Dq@T|JU7Yr9*0^Pg8Q0_zRUrlaN>#UJ|WMR7%fSuE=j zQeAud)XM|0kxCt~LG2A-sq6t8Rn-Gl?L8)CL~75*SOE8K4ZyX0xe~AmtZ0ddE?**E z5&5A<6Jz}Ktpfq{Z39vDZ3EHuZLKK#cCG7myH?_RytON)nmj`?AtDTB^(}PN552Zkc_=AMM(Bvl@R7z$evo5=#6Wx!?^m4m zTu#qiNmRpz;DSVny&1BU5agwc8Q)c)mT@d^cFH(Y_O^q89a;6}$>uIv+N}B}TeY;3 z&rIa-PC-vd8M1O@jEn@VkEXwzVOmrbVwFqa(K8DL1@U7HH4 z<>y4cOhB-HQ_AU&2iF!?A|xvCS0$rxsPQ2QWrmq$tjqE1;d_wVPI)O{7%7uOnK4xM z!NBfp0y6`9`Kc_;mN>erfbqFXp0NyOIvDC&!6-+zo#U<6>aloY=)wuSzQ@wYgjy=4 zxBjcb_|8nafcNV%3m`@LHk?adBr80ONHG$H-C3?pV%fsfCX}2cS6#525+B6MtsZ|< zlCD$2ZededAVhOWMu{i3h4Kf>Z78xF&SF^25-J+Xq}K6*hvVsncphV5mNui0O{Dok zjKz(EYL+vu(LhiG)?fw{@QakHC~CmWuu7>3uFudKrKb!DX~q|o0S2*BQIIwVE`0_i z*JO^YS%J*y?@%7up9~*`>l1(wPT8j%z zHR8!#Sto_paZ;_t7N({mBk5%~aIhI5QP^pCz2_DBlMS!+#DW>+zkX=#+1%0QbhP3U zhb?`WCp4qy!fXMmmHN7#&}@PZnUCdCuy-BBw64X^I{virr@MP?bIfVsPcw1PS`q-- zgcfr;u&F~{;>5PJw>3DeJ$QqK0JOyWP!&OK2TLn{VlaWD5mr4#2TdSaaD~&++)|{j zbUHA!#tS04Jk#mz>xelUwsf>A*{yxp``Wd!xy{*v`BiIkS4WG}yF1^9+maPSJl=*| z=f?5YI-bp?GVCab4Xsa0SG&``LA1)_?ZDD4i=G*H zi#ahIvXDhtA(=O@K2UYrhq7JD5tzkBKec^I;nX-+X(=GIRw&$xDsD&?JH4=LoY;0j z#w^~3=8|Ix|Bb4!VzCnw2-DPXE0PkM+==ZdX4P1aVwD4%pvP^c1k)Z0g+BA8sE%?n zm%>XX)ud#T$sq@H)f$N%M@1=z@sZJ;m@wMliz8VxlsGupY^BJpnejp{lh)H7?udzx zCGtCzK*|#SCZ#nxI=PrMz8T)@p^}91zhMj@-*_tXeU5(J>YF_>xcvJyYRr1kSSQC? z@u8?ziByGRZuYo_cAP5L9r7AN1nCj9E(jsvo7JW}9XB<+Yiz(MUB>dr%={oWc^!Ia z$Kjh9%5iMR!I&RrS=2n#FhoY99Ns!+AJ{9;L|o9`Z$5MJ8fA_jv0_j2=LOn7hy_|d zXQap#I}LeR_{X@rL#~rav}hN) z8k>s76-DDpWn^0zZyimHk0;aGxoxGz*j8GcZKcK9R%OJWS?c2|WyM{NaqSg1WX9L^ z#JL$W-nUILh-H_yjBV2a6_(gG?NCtrR+BhPgfruBQts7u$#_d_eE@In3BbM>b~bkR z1?+UvSa#Yw5vkKc%sLUc(KOz!Ggtwgfjlc=QvfuD`!|&j-1MqUYRiOWw(YgQlF>*x zow6(;&DhXAW?Ug9x2`vlA)Xd_C9-u!9#V;H^3&jr?eH!W@zDM+BsINdh z4#h7Ik@gM9=C^%L!Pka<1N9OVW$^1mCqt<>WkQ#I9=`-|~ahHpX1H%@RhJU>Tr0hFG6NGH+9)xd8oAsHw|PeSpe{Q@X{d6I3L z;pfLA*(Vr0RsAN&ycvpL`NNlGYWQit4?yvAe(!=}oNtEWXZt<}g^#b);1h#2w?pCE zkTv`yAJe9ie-TB{^oTPP7+I4Ze957 z>>?)J+_6LY@xb5q%VWej5%^&Xp9)+o*AZtqFzY-tJSslyPYh;wc3PO>-D_deKV)Ij zKW1Ul7amiTNBUw5lfKr%Oy8~$hE*LDo+`P!N|||Y!!y5YF#tMo2lR*5I5kH>$Co1= zUR?4du)0P8_wob30DPRLC!o)5R(Ic%|3ctp!0M)y2<`ww_<)VPOMuNo|K1L8H}Yp0 zbbR&JxdHkuz`R$2_@mIxL;im>06OuPpx=#h&jcs`ze7JB_$G~i3f(;9f5`yo#79Po z7R3Daj(Lbr4dK-xd|n7|3E|-o-WkICL-_g-{zwR;&iN0+_tg;o_Yg*X^dIs+7s6Gz z3&T95&kf-dLbxe}TSJ)N9X1c;y$|?nM>%y!YkIkA^f!k1 z4~N%*-_(D~+X8IrJ8=^DYr1|DqknMz6}SfxWcj@u*wk;*uLV9H;p0^%q#w@z*P8ww zgvUHgzi|403UsDFuWDiV9{@hu!cSV5?M2xAbD-B){9$?+&wxiWto#ns!}z4b@M8`o z@>qZv{;>Nn-U@!kk7+U$e$3wv$$t&#=3)BYrf?lK7bW2K5dEJ+nDxo@hYU}c{$C;f zUxn~oe)d>D^#Ak_UK_#}gz%0KW_U)CKJ}2v@Z>`D!{K*@_&*WCcLB4%WPd^V4+4J< znAM*6`@nZu^cOAnv#Xx@-3`3NNI%2}L-@83{(K1EAHv@X;m1Pw=@5P)gsYD*p}{x^ z;lcdae~1@_@UjqI8NzP~;m#1=62b!^JRZV(LU?}&|6K^*9>QM@;ctcTe}(XmL-@H6 zemR6^N=;Nr#`HQNgja>|nh=(&(shc{{a=RY6CwQW5WX>lZw=wkgz#5G_?y7&8~M=x z#}!@L(>YZU=V?V3TjJ+o@^t$%7x?86K4QA#Ot_;YbG}1dr!k=5Cg691&i;t>R^azoxDOa(exE)Je4~YT0e{fKR|0>^!tVpV!@>uE ze*nz-NB{m2_@}_PYkUvz2Qhy);dv1F7T~3t{-3~K1zx1_v%ud2K3QX|mpIe0F2TDQ zDgQX&VZ%y}){Uj%%rMaNo= z(`?~ufVW%t2H=Yg(eG}Hn@6mWB@GpT)`W*{A2kY29ntm#90{C4Tp9B01u!(OEaD;2#nm!7A z2{3PVWO&{N{BOW0mV(~{{GY&AYkVtk5^Lm3(T9-#PT*^>7XE;yKM1@T>*8xQ{yy*r zfld1V9QY0kzXbdsu*u(Q1oRo;sCGXG_yn%~YrGivTnjG;-VSWsp9_r7$kwdV{9V9z z0P~_=hWC8nUjm!*HVS+^*3FFjao}cP6MufVuN(L_?f&h+zXnFLD)K%6>|uRxkH)tH zUk=PWAnD&7!0lMyG4=QBzzN`+H2>qk^Rd2T%ER-(X9Cx0`cZR`o)-O$z!Sj6|0dwe zfv0Kyb--5voAlob{Gi1@3j7`5m74z|;F(y@fVUFf{lH%WUZ(N&z&`~x>G2WZUjtvL z>30Js@y^1u2M+>|0q@lG$AEtTY{L5^;Aeo1f6oI)Fn%`jkrvKO3u7JIITqOPuLC~S zqW>lEnHD_@+-}kL18=hEHvuPrO?mv7#t5#&|Fa={AMoYiH|@*UH8%Ws4|K@XAK4-=ba-Zvp;!vzkB72EGt@c1sao28>7Me{--{b2Tu$ z^6}pSBX8@tJ~s!87aszy^XabhF<{i4I_011dtdjO&n6YOa!9pT-%EY7N4v4{^ZHhJ%Um0L%rL zhY~?JFk&;~P5~Px$CHHs-Zd6*&8^NheK<%So*WtpxaZzwn?KbQ5T}ps_z}yFP1xKx zI2C|}fMeW=5Ri?l9c*syV$InWvQ5vnnAD+-M*Gd}eEqWP7|_`4!o{~dD%p>VZTqqD zE?2-Y7C*dWL(x2r$28;i0JYCCD%%MB3wA5r6pOof2h*v6>wF03@=xj@WtZ|3e`8l z6;R%W%8ZRNIOW0dpI zjO_WI<95qbkaq~*K4D@MmRGPUu z8KcXGvwE;p1?Rgja!ZPb~O zi6qFQYJ&=k0ZSO}AjSQjxpXEmgtC;~U1B*tkxrLb?n&lwy(qTUwoIhbL(K(TwTgYP z$$Wi%-@5KN4x;Q_S>IFNR=>W!rM|bmr@g-U?5?J!&0Q-SH+MBP)^9tztFf`Z7dE}H z>4i;4dwV;6x7J?@wYj&wcgw2!OMCm)x2|tf@GQV}UG*Ee{jWZ@v8SWHy`_0|eRoG| zY$Fc4)yLX5t*-AugPpdsYu40eEkhgfX~nvQZM@ngx8UcC zD2o#_gEkyZ?(*S?Z%P$S*v)D?N&A#^Q4Z4C_?J!>!;?-I<)qUYi)X?z7yUOyA?Tql zA8|XRK4%7}V|=fR@f;f{WG0K@8~1sNfx!7wokTbdJjnfaKIYjy)CS(cYwU7K+^0LP z&%YSUqJP{4ozGe+i;C;J#l5@ZD62SlD7TlF+M7+5KBbsERwO2IgmG-Z=b7XMzC{i?=HtD*$k&HOQ@kD5Fx2m93I7grVRFs5RK(k$`Bu-xox6X;Z(J<-kv zvstyPT*;Hl702~}@!=G2h5{MVe3;yYx)6 zEk}?ovE>M|Keik}HtCil$bRK=1le0#jv#xN4Z&=#En>YJ+qP&lTXh4L+>>it1j5c8 zzJV~)A`n({IO zFFMC=?a&tY0L|>=HkST*0b>!5Cz6SQRD1&Wx9vpDv=9#a!NTfSg9w$l3EieX)L`V5 zZ0(%N{!x3sX?QEBwQbbQi;Q2unE!OJ`!2KLbV?WB4`g^d>l6;dD8_OJZYrO#kvV}r zx}$b`hxc^zPWQm|{?@hsfzJT|@Vqzql_W8#OYskR5k7jdig)yjI5yC{-B3OanA0jyP7Ylf+Pw}e>)^`>tMM0i%^^uI*)j2LX zddu@()^TI$E`<<0XzU-;4IB`be!KjQ2D}zTP5J#xRcNKJI#CqsQkTFLDCTUi!# zT&lop4z*hvdBY;3RlI-Nw^bKs8z|SC@LaT5u-ejqu@OE*U|+DQ7DCK93a(#Z-#m|` z=|fp^!FHK@xPyU^+K1XANvePjv;ux;6huL?t}`yVuQ*69x$U^z72x`MOcM{~O_>|O z3uUkQ4qqT{?^Mm1Q)>^dHAQf8Q}SvFXTQ*Q8R5Ng6@q7-Q3<1$SOTKSVCnf)j7 z<^w!ps`z;wea-^keo2mCZi*Qd56RWnw%@Z3fG)7Y=t3SQ>hyE;@RlpS9w$k zkS{~U7z=JB-=V&1lt}QqM$Ne~v~D}<&Nu_b z6qj$nfO&E*k=q^TtwiUVH5S<88yM-4Tp~M49?n8}lQRav91ag>U24X!x?m2rmA}V(^~NpZlgat!RYhV0PkM#2*VjXLPRsPN(vPbEExT&@d0lSN={? zRQaM#(Zj{YfeX>>9?C&t7ek@D`6;=`OFA%C=jJEIa1;4%ned#hehc`_Q96J6#P~!$ zIdnQMBS7ZXFJ7}Vyxg~99i+s_^a0$b-ow`w%hjVbf)N#E6x_=in9f| z;%q~#I9re_&Njq~vkkH0Y(ZIZwlP8WyRUXSaG(XT5+~4q(8Aa)QWQkV~qrA0VvKZJ-df{)k@c*A#ZAJXd*wR zo6r@y32lZA8af_phW`7sdqc@Ajy|JR%IJ2iT*!v%>dxqB*X>IWzLk*gKQA?sXp>JH z`D^X*wzWO|P0@yEQ@^Hkj1Q(KhLQ*p+TNig7ATVEE{(^{Qd}KAw$@zNxHL@PyrrYJ zW8;SS7JP~YIy)ITle@7S-w@l1sckb1QHgClF@Wz|>@-MjWHx~9r!k}3N&4mtmv@;~ z92yxT#t0)xEWM-q;Qdd0X(al124B;P4yxJ->rqW`xNVAG;Kak%oiz(v@a_%Y`^6Tq zy|kF>LpfB{%0Uff;+>rTu+Qbgcc$dSmQ_A=_$rKgai_3vCLjGLAK%sWfDh+6{Ktfi zR+MKR@_kfy?zA(s6D%|BUqFUDh4+}|F?@VSZ_K29H{m$nY&Bd(8XC9&-)$duoJZ(b zKSl=MSsOD+mp_D0!!~Fpi?+!!llmEKXuDo#46%{XZ<%So4jXH}rW2jm@bO)C6)p5L zyDj1zoUg_`*T9bX!S~NOD4iEDInM3dBY|`_^0*hk+BWE9$0G8rWO0NalfQdmHf~7! ZYw-1#2_M5?`}=f0BA>{n8$L$H{{!$*$O-@e diff --git a/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/EpaperModuleTest_GD32F103.hex b/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/EpaperModuleTest_GD32F103.hex deleted file mode 100644 index 06ced16..0000000 --- a/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/EpaperModuleTest_GD32F103.hex +++ /dev/null @@ -1,1061 +0,0 @@ -:020000040800F2 -:10000000C8130020190100089D010008950100088F -:10001000990100088D0100089D0200080000000001 -:10002000000000000000000000000000B501000812 -:100030009101000800000000B1010008E50100087E -:1000400033010008330100083301000833010008C0 -:1000500033010008330100083301000833010008B0 -:1000600033010008330100083301000833010008A0 -:100070003301000833010008330100083301000890 -:100080003301000833010008330100083301000880 -:100090003301000833010008330100083301000870 -:1000A0003301000833010008330100083301000860 -:1000B0003301000833010008330100083301000850 -:1000C0003301000833010008330100083301000840 -:1000D0003301000833010008330100083301000830 -:1000E000330100083301000833010008000000005C -:1000F0000000000000000000000000000000000000 -:1001000033010008DFF80CD000F02EF8004800475B -:10011000810E0008C81300200648804706480047A3 -:10012000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7A7 -:10013000FEE7FEE7ED0100080501000830B50B46BB -:10014000014600202022012409E021FA02F59D4207 -:1001500005D303FA02F5491B04FA02F52844151EDB -:10016000A2F10102F1DC30BD064C074D06E0E0686B -:1001700040F0010394E8070098471034AC42F6D3EE -:10018000FFF7C4FFF041000810420008FEE700003E -:1001900070470000FEE70000FEE700007047000027 -:1001A0004EF623510001CEF20001087070470000A6 -:1001B0007047000070470000B0B501380024B4EB70 -:1001C000106F1CBF0120B0BD4EF21005CEF200052D -:1001D00068600F20FFF7E4FF0720AC60286020462E -:1001E000B0BD000080B500F017F980BD80B582B0C9 -:1001F00041F20000C4F20200016841F00101016017 -:1002000001688907FCD5416841F080014160002107 -:100210000191019A4F2A05D8019A01320192019A5F -:10022000502AF9D3426842F090024260019101994C -:100230004F2905D801990131019101995029F9D32C -:1002400041684FF6FF7221F0030141600168CFF66B -:10025000F6621140016041680C23CEF6FF0319409D -:10026000416001684FF6FF73114001600168CFF2F1 -:10027000007321F4802101604168194041600168E8 -:10028000114001604FF41F01816001F095F84FF0BB -:100290000060002100F056FF02B080BDFEE70000C4 -:1002A000B0B543F600050446C4F200052846022115 -:1002B00001F00CF80028F9D02846214600F0E0FFB4 -:1002C000B0BD000010B543F60004C4F2000400BF46 -:1002D0002046802100F0FAFF0028F9D110BD00006F -:1002E00080B540F2026000F095FF4FF4C06000F06E -:1002F00091FF40F60000C4F20100282103220123EF -:1003000000F024FD80BD000080B540F60000C4F27E -:100310000100012100F070FD80BD0000B0B540F289 -:10032000036000F077FF40F60044C4F20104204669 -:10033000102103220423042500F008FD6561B0BDEF -:1003400040F61440C4F2010004210160704700002F -:1003500010B540F60044C4F201042046042100F028 -:100360004BFDC0F10100C2B22046042100F0E8FCC0 -:1003700010BD0000B0B540F2026000F04BFF40F24B -:100380000E6000F047FF43F60004C4F20104A4F538 -:1003900040552846182103224FF4007300F0D6FC84 -:1003A0002846042103224FF4806300F0CFFC20464E -:1003B00001F05CF820464FF4E13101F01DF82046D1 -:1003C000002101F0C5F82046002101F0B3F82046D5 -:1003D000002101F0A1F82046002101F097F8204605 -:1003E000002101F08DF82046042101F09DF82046FF -:1003F000082101F0A7F8204601F074F8B0BD000014 -:1004000010B5044600F0F2FF044400BF00F0EEFF18 -:10041000A042FBD310BD000040F22000C2F2000059 -:10042000016801310160704780B540F60040C4F2B8 -:1004300001004FF48051002200F082FC80BD0000DA -:1004400080B540F60040C4F201004FF48051012213 -:1004500000F076FC80BD000080B540F60040C4F29C -:1004600001004FF48041002200F06AFC80BD0000D2 -:1004700080B540F60040C4F201004FF480410122F3 -:1004800000F05EFC80BD000080B5FFF7B9FF80BDC5 -:1004900010B504460020002100F0AAFB262000F041 -:1004A00009FC20464FF47A6100F024FC0020002172 -:1004B00000F09EFB242000F0FDFB20464FF47A6103 -:1004C00000F018FC00F0ACFB10BD000010B50446B5 -:1004D0000020002100F08CFB242000F0EBFB2046E4 -:1004E0004FF47A6100F006FC00F0A8FB0020002128 -:1004F00000F07EFB262000F0DDFB20464FF47A6101 -:1005000000F0F8FB10BD000010B50446102000F00C -:10051000D1FB204600F0B2FB40F21C00C2F200000A -:100520000021017010BD000080B540F21C00C2F235 -:1005300000000078002808BF00F048FB00F08CFBAA -:1005400028B9122000F0B6FB00F086FB08B10120AC -:1005500080BD012000F0AEFB272000F08FFB0120C2 -:1005600000F08CFB012000F089FB112000F0A2FBC1 -:10057000012000F083FB442000F09CFB002000F0F1 -:100580007DFB0F2000F07AFB452000F093FB272035 -:1005900000F074FB012000F071FB002000F06EFB06 -:1005A000002000F06BFB3C2000F084FB052000F0F5 -:1005B00065FB212000F07EFB002000F05FFB802027 -:1005C00000F05CFB182000F075FB802000F056FB6B -:1005D0004E2000F06FFB002000F050FB4F2000F099 -:1005E00069FB272000F04AFB012000F047FB00F0E8 -:1005F00033FB002818BF012080BD0000B0B5FFF715 -:1006000093FF00281CBF0120B0BD322000F052FB38 -:10061000FFF70AFF44F25510C0F60000441E99256A -:1006200014F8010FFFF73CFE013DF9D1FFF74AFE38 -:10063000FFF706FF0020B0BDF0B587B040F20260C2 -:1006400000F0E8FD40F2036000F0E4FD4FF4C0600C -:1006500000F0E0FD43F60004C4F2000404F5504548 -:100660002846102103224FF48073032600F06EFB0E -:100670002846482103224FF4004300F067FB04F5AD -:1006800054452846102103224FF4804300F05EFBBE -:100690002846182103224FF42043182700F056FB68 -:1006A0002846102103224FF4805300F04FFB40F204 -:1006B0000E7000F0AFFD204600F0E4FD6D462846C8 -:1006C00000F024FE4FF4404001904FF482700090FF -:1006D00000204FF400710290CDE903102046294616 -:1006E0000596069700F0F8FD204600F0C3FD07B020 -:1006F000F0BD000080B540F60000C4F201004FF4E8 -:10070000004100F079FB002818BF012080BD0000E7 -:1007100080B540F2080CC2F2000CBCF8121000299F -:1007200008BF80BD4FF0000E06E000BFBCF81210FD -:100730000EF1010E8E4512D2BCF81030002BF5D010 -:100740004FF0FF31DCF800200EFB03220A4450700A -:10075000BCF810308A1C01319A42F3D3E6E780BD21 -:100760002DE9F04F85B006461046B2EB060B0F465A -:10077000049248BFCBF1000BD81B80EAE07102461F -:1007800048BF4242C1EBE07904984FF0FF31B042DC -:100790004FF0FF38ABEB020A88BF4FF00108184654 -:1007A0000293BB4288BF01210191039203E000BF85 -:1007B000BBEB4A0F11DAB4B2BDB20E9A20462946FD -:1007C00000F016F8B9EB4A0FF2DC049884420BD023 -:1007D00003984644AAEB000AEAE70298854203D050 -:1007E0000198DA440744E6E705B0BDE8F08F000061 -:1007F00080B50138013980B289B200F06FF880BD50 -:100800002DE9F04182B00F46DDE908811C4615460E -:10081000064681B1A7420BD2B9B230462A460B46F2 -:10082000CDF80080FFF79CFF0137B8B2A042F3D3A8 -:1008300002B0BDE8F081304639462A463B46CDF845 -:100840000080FFF78DFF3046394632462346CDF80B -:100850000080FFF785FF284621462A463B46CDF813 -:100860000080FFF77DFF2846214632462346CDF81B -:100870000080FFF775FF02B0BDE8F08110B540F2CF -:10088000080CDDF808E0C2F2000CCCF80000C80843 -:100890004C07ACF80810ACF80A20ACF80CE04FF0AC -:1008A000010E18BF0EEBD100ACF81000ACF812200E -:1008B000ACF80E302BB1B42B12BF084610460A46D6 -:1008C00001E010460A46ACF80400ACF8062010BD62 -:1008D00040F20801C2F200010860704710B540F212 -:1008E000080CC2F2000CBCF80E30B32B0BDC93B139 -:1008F0005A2B36D1BCF80830C0431844BCF80A3033 -:10090000C9435C1813E0B42B0CD0B3F5877F0C46B9 -:1009100018BF10BD0BE0BCF808E0C94304460EEB5D -:10092000010004E0BCF80A30C0431C180846BCF8BB -:100930001030A4B281B26343DCF800C003EBD10EE7 -:100940001CF80E3000F007008024C4401C436FF0F8 -:10095000800141FA00F0002A08BF03EA00040CF805 -:100960000E4010BD2DE9F04F87B00130039080B2EA -:100970000290C01AFA2800F38380082B02D10624C3 -:1009800064B97DE0D8085F074FF0010618BF06EB99 -:10099000D3005F08784384B2002C71D04E1C109DA8 -:1009A000A2F1200041F6E85182B25808C0F60001D9 -:1009B000DDF80C90B5FA85F70190002001EB0211EB -:1009C0004FF0000804920091CDE9054312E000BF0A -:1009D00002991FFA89F0401A019926468842039825 -:1009E00004BF81460836059908F101081FFA88F00E -:1009F000814245D9082B09D1049941F24C7201EB8F -:100A00004101C0F6000202EB410119E0182B0BD0A6 -:100A1000102B13D00C2B33D1049941F6741201EB37 -:100A20004101C0F6000206E0049942F2D83201EB1F -:100A3000C101C0F6000202EB810101E0009900BF94 -:100A4000084490F800A04FF0000B34465FEACA70EB -:100A50002A461FFA89F0B1B208BF7A09FFF7C8FE2B -:100A60004FEA5A0A0136BBF1070F0BF1010BEDD328 -:100A7000069B09F10109082BAAD105992646B3E77F -:100A800007B0BDE8F08F00002DE9F04F87B0DE0819 -:100A90005F0705924FF0010218BF02EBD306002E4C -:100AA000009653D0119E00F1010A4A1CB6FA86F551 -:100AB0001FFA8AF000234FF0000B17460390CDF881 -:100AC00010A004E00133009998B288423ED2059804 -:100AD0000028F7D04FF000080293CDF804B000BF13 -:100AE00010991FFA8BF00C5C4FF00009069200BFC2 -:100AF000E00732461FFA8AF0B9B218BF6A09FFF759 -:100B000077FE64080137B9F1070F09F10109EFD346 -:100B10000AF1010A03991FFA8AF0401A059908F1AF -:100B200001088842049808BF8246069A1FFA88F096 -:100B30000BF1010B08BF083288421746D0D3059845 -:100B4000DDF804B0029B83441746BBE707B0BDE85D -:100B5000F08F00002DE9F04381B099461378CBB1B6 -:100B6000DDF820800D4606464FEA5907541EB9F1BC -:100B7000080F08BF062700BFB0B2DAB229464B46BD -:100B8000CDF80080FFF7EEFEA3783E44002B04F181 -:100B90000104F1D101B0BDE8F083000080B540F65A -:100BA0000000C4F201004FF48071002200F0C8F888 -:100BB00080BD000080B540F60000C4F201004FF493 -:100BC0008071012200F0BCF880BD000080B5FFF705 -:100BD000E5FF3220FFF758FCFFF7ECFF3220FFF76C -:100BE00053FC40F21C00C2F200000121017080BDE4 -:100BF000B0B5044640F22710451A4E2000F05AF8CE -:100C0000C4F3C70000F03AF84F2000F053F8E8B200 -:100C100000F034F8C5F3002000F030F8B0BD00005B -:100C200080B5222000F046F8F72000F027F82020B9 -:100C300000F040F800F010F880BD000080B52220E0 -:100C400000F038F8CC2000F019F8202000F032F83D -:100C500000F002F880BD000010B5FFF74BFD58B161 -:100C600049F641440120013C08BF10BDFFF70CFCD0 -:100C7000FFF740FD0028F5D1002010BDB0B543F6C8 -:100C800000040546C4F20004FFF7CEFB20462946C7 -:100C900000F0F6FA2046022100F018FB0028F9D0F7 -:100CA0002046802100F012FB0028F9D1FFF7C8FB95 -:100CB000B0BD0000B0B543F600040546C4F2000420 -:100CC000FFF7CAFBFFF7B0FB2046294600F0D8FA31 -:100CD0002046022100F0FAFA0028F9D020468021AF -:100CE00000F0F4FA0028F9D1FFF7AAFBFFF7C0FBE8 -:100CF000B0BD0000B0B50C460546FFF795FB3CB112 -:100D0000013D00BF15F8010FFFF7CAFA013CF9D108 -:100D1000FFF7D8FAFFF794FBB0BD0000B0B543F67B -:100D20000005C4F201050446C1B2284600F09AFB52 -:100D30002846072100F0DCFB0028F9D02046B0BD92 -:100D40001023002A08BF1423195070472DE9F047DB -:100D5000CF0601F00F0C00F1100E00F1140A4FF055 -:100D600000044FF001094FF00F084FF0000748BF93 -:100D70004CEA020C0EE000BF166008FA04F225EA05 -:100D800002020CFA04F52A4302600137082F04F12D -:100D900004040CD009FA07F212EA0306F5D005683C -:100DA00028295246E8D04829E7D17246E4E70824CA -:100DB00000254FF001094FF00F080FE0176008FA07 -:100DC00005F226EA02020CFA05F6324342600134CB -:100DD000102C05F1040508BFBDE8F08709FA04F2FC -:100DE00012EA0307F3D0466828295246E6D048297C -:100DF000E5D17246E2E700008068084018BF012094 -:100E000070470000B0B50422C4F20102134602F19B -:100E1000180E002848BF73461C6800F44013B3F551 -:100E2000401F1FFA80FC06D1156824F0706325F07E -:100E30007064146015E0C3020AD46FF00F0303EA74 -:100E400050430CFA03F324EA030343F0706308E011 -:100E5000C0F30343032505FA03F324EA030343F035 -:100E600070636FF00F0404EA504400290CFA04F593 -:100E700018BF2B43002848BF72461360B0BD000066 -:100E800088B000F09DFA40F20020C0F2300001214D -:100E90000125FFF7B7FFFFF741FAFFF721FAFFF748 -:100EA00069FA44F2F700C0F6000000F03DFC44F29D -:100EB0001210C0F6000000F037FC44F22A10C0F611 -:100EC000000000F031FC44F2E300C0F6000000F046 -:100ED0002BFC40F20400C2F20000016844F2D4008E -:100EE000C0F6000000F03CFB012000F039F901469B -:100EF00070A000F035FB022000F032F9014671A02D -:100F000000F02EFB032000F02BF9014671A000F049 -:100F100027FB74A000F008FCFFF78EFBFFF704FB33 -:100F200040F22408C2F20008FF2440467A21FA2247 -:100F3000B4230094FFF7A2FC4046FFF7C9FCFF2052 -:100F4000FFF7E6FB43F23410C0F60000CDE90004E1 -:100F500000200021FA227A230024FFF795FD404665 -:100F6000FFF796FA0120FFF7CFFA41F28830FFF73A -:100F700047FAFFF743FB4046FFF7AAFCFF20FFF7C5 -:100F8000C7FB5DA20A20002118230094FFF7E2FDB1 -:100F90005EA20A20322110230094FFF7DBFD62A23B -:100FA0000A201D2110230094FFF7D4FD0A20672199 -:100FB000F022742300940195FFF722FC46F26F4063 -:100FC000C0F26500069046F66140C4F620500590D8 -:100FD00047F26120C6F67410049043F63E60C5F2F5 -:100FE000200003AD03900A2047212A4618230094CD -:100FF000FFF7B0FD4046FFF769FA4FF47A70FFF74C -:10100000FFF944F246177B26C0F60007284639460A -:10101000324600F0B5FA0A2047212A4618230094E8 -:10102000FFF798FD4046FFF751FA6420FFF7E8F913 -:10103000B6F5577F06F17B06E8D946F26C40C0F260 -:101040002E00069045F22070C7F26F20059046F6FC -:101050006540C6F66C70049043F63E60C4F620000E -:101060000390002703AA0A20472118230097FFF7BF -:1010700071FD40F22400C2F20000FFF727FA4FF49E -:101080007A70FFF7BDF9FFF7CBFD0120FFF73CFABF -:1010900000F0ACF9044601E0FFF752F900F0A6F9C0 -:1010A0008442FBD86434FFF72FF90028F4D1FFF70E -:1010B0004FF9F3E7434B5F414842206973202564B1 -:1010C0000D0A0000434B5F415042312069732025D7 -:1010D000640D0A00434B5F41504232206973202562 -:1010E000640D0A00457061706572204D6F64756C07 -:1010F0006520546573740D00322E313320457061C4 -:10110000706572204D6F64756C6500007769746856 -:1011100020323530207820313232207265736F6C86 -:101120007574696F6E00000044657369676E65646D -:101130002042792057654163742053747564696F48 -:10114000000000004FF68072C1F6FF7211400843A4 -:101150004EF60851CEF200010860BFF34F8F704782 -:1011600010B541F20402C4F202021368014603F012 -:101170000C00082841F20020C0F27A0019D113684F -:1011800040F6001CDB03C0F23D0C03D513689B0343 -:1011900058BF844610681368C0F3834E102000EADD -:1011A000D350704401230F2838BF0223184400FB9A -:1011B0000CF01368D2F800C0146803290DD8C3F3EB -:1011C00003130EA2D25C0FF2440E20FA02F3DFE802 -:1011D00001F01302060D184610BD002010BDCCF31F -:1011E00002201EF8000023FA00F010BDC4F3C22054 -:1011F0001EF8000023FA00F010BD00BF0000000040 -:1012000000000000010203040607080900000000B6 -:101210000102030441F2000300F01F018009C4F23F -:1012200002034FF0010CC2580CFA01F11143C150F6 -:101230007047000041F2000300F01F018009C4F272 -:1012400002034FF0010CC2580CFA01F122EA01012D -:10125000C150704741F2000300F01F018009C4F241 -:1012600002034FF0010CC2580CFA01F11143C150B6 -:1012700070470000016841F04001016070470000C4 -:10128000C160704710B543F20001C4F20101884209 -:101290000FD043F60041C4F2000188420CD043F65F -:1012A0000001C4F20001884218BF10BD40F20E4494 -:1012B00004E04FF4437401E040F20F442046FFF78E -:1012C000C9FF2046FFF7B6FF10BD00008068084048 -:1012D00018BF01207047000070B50268D1E902E430 -:1012E00002F4415CD1E90032D1E9045643EA0C032F -:1012F0001A4342EA0E02224389692A4332431143C8 -:101300000160C16921F40061C16170BD0021C0E9C3 -:101310000511C0E90011C0E90211704741F2040053 -:10132000C4F2020050F8041C41F4803140F8041C5F -:101330004FF6FE7150F8043C4A1E8A4203D213F461 -:1013400000311146F6D050F8041C890301D400BFC7 -:10135000FEE701684FF6FF7201600168CFF2C372C9 -:101360000160016841F480610160016821F440314D -:101370000160016841F44031016001681140016081 -:10138000016841F0006141F42011016050F8041C33 -:1013900041F0807140F8041C50F8041C8901FBD511 -:1013A000016821F003010160016841F00201016060 -:1013B00001680907FCD5704780B5FFF7AFFF80BD16 -:1013C00080B540F20400C2F20000006844F6D35138 -:1013D000C1F26201A0FB01018809FEF7EDFE00B138 -:1013E000FEE70520FEF7DCFE80BD000040F2200095 -:1013F000C2F2000000687047B0B5044644F6FF3002 -:10140000C4F200000D4684424FF0000013DD44F6A4 -:101410000041C4F200018C4219D045F20001C4F22F -:1014200000018C4213D043F60001C4F201018C424A -:1014300010D103200CE044F20041C4F200018C42C0 -:1014400005D044F60001C4F200018C4202D1022012 -:10145000FFF786FE00EB5500B0FBF5F080B2A06010 -:10146000B0BD00006FF35F214160704710B544F6D6 -:10147000FF31C4F20001884215DD44F60041C4F298 -:10148000000188421ED045F20001C4F200018842EA -:101490001BD043F60001C4F20101884218BF10BD01 -:1014A00040F20E3416E044F20041C4F200018842DA -:1014B0000ED044F60001C4F20001884210D140F27F -:1014C000124407E040F2134404E040F2144401E007 -:1014D00040F211442046FFF7BDFE2046FFF7AAFE6A -:1014E00010BD0000C16841F40051C16070470000A8 -:1014F0008A09105801F01F01C84000F00100704730 -:10150000426922F40072114341617047426922F43A -:101510008072114341617047C26822F4C062C260A8 -:10152000C2681143C1607047C26822F004021143CF -:10153000C1607047026922F440520261026911439E -:1015400001617047C26822F008021143C160704710 -:10155000C26822F48052C260C2681143C160704701 -:101560000FB4054B10B503A9044A029800F02CF8FB -:1015700010BC5DF814FB00001D0D000800000020E9 -:101580000FB4084B10B504A902AA039800F01CF888 -:10159000044602A9002000F0C1F8204610BC5DF806 -:1015A00014FB00001D17000802E008C8121F08C144 -:1015B000002AFAD170477047002001E001C1121FD4 -:1015C000002AFBD1704700002DE9FF4F89B09B46F0 -:1015D0000446002506E025280BD05A460B99904773 -:1015E000641C6D1C20780028F5D10DB02846BDE89C -:1015F000F08F0027B8460122474900E0074314F85E -:10160000013F203B02FA03F00842F7D120782E2850 -:1016100019D114F8010F47F004072A280ED06FF0F3 -:101620002F022078A0F1300109290CD808EB88019D -:1016300002EB410100EB0108641CF2E70A98641C0C -:1016400050F8048B0A9020780028CED0642808D067 -:10165000692806D075281ED05A460B9990476D1CF4 -:1016600058E00A994FF00A0901C90A91002802DAE4 -:1016700040422D2102E0390504D52B218DF82010A0 -:10168000012103E0F90704D02021F7E78A4608AEDC -:101690000DE00021FAE70A994FF00A0901C90A9101 -:1016A000F7E74946FEF74AFD303106F8011D0028EC -:1016B000F7D1ADEB060000F12009780701D44FF017 -:1016C0000108C84502DDA8EB090000E000208046C3 -:1016D000002706E008A85A46C05D0B9990476D1C8C -:1016E0007F1C5745F6DB04E030205A460B999047A3 -:1016F0006D1CB8F10001A8F10108F5DC05E016F851 -:10170000010B5A460B9990476D1CB9F10001A9F1E4 -:101710000109F4DC641C65E7092801000A68531C10 -:101720000B6010707047000010B5044601E0FFF731 -:10173000F5FA14F8010B04490028F8D1BDE810406F -:101740000A20FFF7EBBA00000000002000000000B4 -:1017500000000000002F0000000007000700001438 -:101760007F147F1400242A7F2A1200626408132346 -:1017700000364955225000000503000000001C22DD -:101780004100000041221C000014083E081400081B -:10179000083E0808000000A06000000808080808CB -:1017A000000060600000002010080402003E514963 -:1017B000453E0000427F4000004261514946002101 -:1017C00041454B31001814127F100027454545391B -:1017D000003C4A4949300001710905030036494976 -:1017E000493600064949291E00003636000000002F -:1017F000563600000008142241000014141414147A -:101800000000412214080002015109060032495922 -:10181000513E007C1211127C007F49494936003E3E -:1018200041414122007F4141221C007F49494941F9 -:10183000007F09090901003E4149497A007F0808F3 -:10184000087F0000417F4100002040413F01007FB0 -:1018500008142241007F40404040007F020C027F7C -:10186000007F0408107F003E4141413E007F09098E -:101870000906003E4151215E007F091929460046B4 -:10188000494949310001017F0101003F4040403F8B -:10189000001F2040201F003F4038403F00631408D5 -:1018A00014630007087008070061514945430000B0 -:1018B0007F41410000552A552A55000041417F00D3 -:1018C00000040201020400404040404000000102C8 -:1018D0000400002054545478007F484444380038B1 -:1018E0004444442000384444487F00385454541839 -:1018F00000087E0901020018A4A4A47C007F08044B -:1019000004780000447D4000004080847D00007F1A -:10191000102844000000417F4000007C0418047837 -:10192000007C0804047800384444443800FC242433 -:1019300024180018242418FC007C0804040800481B -:101940005454542000043F444020003C4040207C3C -:10195000001C2040201C003C4030403C004428102B -:101960002844001CA0A0A07C004464544C441414DF -:101970001414141400000000000000000000000017 -:101980000000FC000000000002000000000C020C3F -:10199000020000000000000090D0BCD0BC9000030A -:1019A000000300001824FE448C000302070201001B -:1019B0001824D8B04C80000300010201C038E4387C -:1019C000E00001020201020208060000000000001F -:1019D00000000000000000F8040200000001020402 -:1019E000000204F800000004020100009060F860AA -:1019F00090000000010000002020FC2020000000DA -:101A000001000000000000000000080600000000C7 -:101A10002020202020000000000000000000000026 -:101A200000000002000000000080601C02000403AF -:101A300000000000F8040404F800010202020100A2 -:101A40000008FC0000000002030200001884442487 -:101A5000180003020202020008042424D800010234 -:101A60000202010040B088FC800000000003020078 -:101A70003C242424C400010202020100F824242C86 -:101A8000C0000102020201000C04E41C040000007A -:101A900003000000D8242424D8000102020201001F -:101AA00038444444F8000003020201000000100022 -:101AB0000000000002000000000020000000000004 -:101AC000060000000020508804020000000001020F -:101AD00090909090900000000000000000020488A8 -:101AE00050200002010000001804C4241800000067 -:101AF00002000000F804E494F8000102020202006F -:101B000000E09CF0800002030000030204FC242497 -:101B1000D800020302020100F80404040C000102D0 -:101B20000202010004FC0404F800020302020100A6 -:101B300004FC24740C0002030202030004FC24745D -:101B40000C00020302000000F0080444CC40000135 -:101B50000202010004FC2020FC0402030000030236 -:101B60000404FC040400020203020200000404FC5A -:101B7000040406040403000004FC24D00C04020343 -:101B80000200030204FC040000000203020202033C -:101B9000FC3CC03CFC0003000300030004FC30C418 -:101BA000FC04020302000300F8040404F80001022C -:101BB0000202010004FC24241800020302000000B9 -:101BC000F8848404F80001020207050004FC246480 -:101BD0009800020302000302182424448C0003022C -:101BE000020201000C04FC040C00000203020000CD -:101BF00004FC0000FC04000102020100047C80E0FF -:101C00001C040000030000001CE03CE01C0000037A -:101C100000030000049C609C040002030003020017 -:101C2000041CE01C04000002030200000C84641C7D -:101C300004000203020203000000FE020200000092 -:101C400007040400000E30C0000000000001020084 -:101C5000000202FE00000004040700000004020469 -:101C60000000000000000000000000000000080864 -:101C70000808080800000200000000000000000042 -:101C80000040A0A0C00000010202030204FC2020CA -:101C9000C00000030202010000C02020600000011B -:101CA0000202020000C02024FC0000010202030224 -:101CB00000C0A0A0C0000001020202000020F82421 -:101CC00024040002030202000040A0A060200007DC -:101CD0000A0A0A0404FC2020C000020302000302D6 -:101CE0000020E4000000000203020000000020E4E5 -:101CF000000008080807000004FC80E02020020320 -:101D0000020003020404FC000000020203020200BD -:101D1000E020E020C00003000300030020E02020BA -:101D2000C00002030200030200C02020C000000126 -:101D30000202010020E02020C000080F0A0201007A -:101D400000C02020E0000001020A0F0820E040202F -:101D500020000203020000000060A0A0200000029A -:101D6000020203000020F82000000000010202002F -:101D700020E00020E00000010202030220E02080B9 -:101D800060200000030100006080E080600000032C -:101D900000030000206080602000020300030200B6 -:101DA00020E0208060200808070100000020A060DB -:101DB0002000000203020200000020DE02000000FA -:101DC00000070400000000FF00000000000F0000FA -:101DD0000002DE20000000040700000002010204EF -:101DE00004020000000000000000000000000000ED -:101DF0000000000000000000000000F800000000EB -:101E0000000000333000000000100C06100C06002B -:101E1000000000000000000040C07840C078400092 -:101E2000043F04043F040400007088FC08300000F4 -:101E3000001820FF211E0000F008F000E01800004C -:101E400000211C031E211E0000F008887000000005 -:101E50001E2123241927211010160E000000000057 -:101E60000000000000000000000000E01804020074 -:101E7000000000071820400000020418E0000000E5 -:101E80000040201807000000404080F080404000E3 -:101E90000202010F01020200000000F00000000039 -:101EA0000101011F0101010000000000000000000D -:101EB00080B0700000000000000000000000000082 -:101EC000000101010101010100000000000000000B -:101ED00000303000000000000000000080601804A6 -:101EE000006018060100000000E010080810E00083 -:101EF000000F102020100F00001010F8000000004C -:101F00000020203F20200000007008080888700092 -:101F10000030282422213000003008888848300012 -:101F20000018202020110E000000C02010F8000032 -:101F300000070424243F240000F8088888080800CB -:101F40000019212020110E0000E0108888180000E0 -:101F5000000F112020110E0000380808C8380800B2 -:101F60000000003F00000000007088080888700032 -:101F7000001C222121221C0000E010080810E000B3 -:101F80000000312222110F00000000C0C00000003C -:101F90000000003030000000000000800000000061 -:101FA0000000806000000000000080402010080059 -:101FB0000001020408102000404040404040400022 -:101FC00004040404040404000008102040800000FD -:101FD0000020100804020100007048080808F00002 -:101FE0000000003036010000C030C828E810E000D2 -:101FF0000718272423140B000000C038E00000005D -:10200000203C23020227382008F8888888700000C6 -:10201000203F202020110E00C0300808080838009A -:10202000071820202010080008F808080810E00011 -:10203000203F202020100F0008F88888E8081000B2 -:10204000203F20202320180008F88888E808100086 -:10205000203F200003000000C030080808380000BE -:1020600007182020221E020008F808000008F808BF -:10207000203F210101213F20000808F80808000046 -:102080000020203F2020000000000808F808080079 -:10209000C08080807F00000008F888C028180800F1 -:1020A000203F20012638200008F80800000000002A -:1020B000203F20202020300008F8F800F8F8080021 -:1020C000203F003F003F200008F830C00008F8081B -:1020D000203F200007183F00E01008080810E0002B -:1020E0000F10202020100F0008F808080808F00042 -:1020F000203F210101010000E01008080810E00065 -:102100000F18242438504F0008F8888888887000F9 -:10211000203F2000030C3020007088080808380099 -:102120000038202121221C00180808F8080818008F -:102130000000203F2000000008F808000008F80810 -:10214000001F202020201F000878880000C83808C1 -:10215000000007380E010000F80800F80008F80039 -:10216000033C0700073C03000818688080681808D3 -:1021700020302C03032C30200838C800C838080051 -:102180000000203F2000000010080808C8380800A0 -:102190002038262120201800000000FE0202020044 -:1021A0000000007F40404000000C30C000000000F4 -:1021B000000000010638C00000020202FE0000001C -:1021C000004040407F0000000000040202020400C2 -:1021D00000000000000000000000000000000000FF -:1021E00080808080808080800002020400000000E7 -:1021F00000000000000000000000808080800000DF -:102200000019242222223F2008F8008080000000CC -:10221000003F112020110E0000000080808000008F -:10222000000E112020201100000000808088F8009E -:10223000000E112020103F200000808080800000D0 -:10224000001F222222221300008080F08888881834 -:102250000020203F2020000000008080808080003F -:10226000006B94949493600008F8008080800000D4 -:10227000203F210000203F200080989800000000AF -:102280000020203F202000000000008098980000DF -:1022900000C08080807F000008F8000080808000FF -:1022A000203F24022D302000000808F80000000024 -:1022B0000020203F202000008080808080808000DF -:1022C000203F20003F20003F808000808080000071 -:1022D000203F210000203F200000808080800000FF -:1022E000001F202020201F00808000808000000030 -:1022F00080FFA12020110E0000000080808080005F -:10230000000E112020A0FF8080808000808080004F -:1023100020203F212000010000008080808080007C -:102320000033242424241900008080E080800000F1 -:102330000000001F2020000080800000008080003E -:10234000001F202020103F2080808000008080809F -:1023500000010E300806010080800080008080802F -:102360000F300C030C300F00008080008080800054 -:102370000020312E0E31200080808000008080807F -:1023800080818E701806010000808080808080002F -:102390000021302C2221300000000000807C02024D -:1023A00000000000003F404000000000FF0000006F -:1023B00000000000FF0000000002027C800000001E -:1023C0000040403F0000000000060101020204043A -:1023D00000000000000000000000000000000000FD -:1023E00000000000000000000000000000000000ED -:1023F00000000000000000000000000000000000DD -:1024000000F0F0F0000000000000000000017F017B -:102410000000000000000000001C1C1C0000000068 -:1024200000008060301C8C60301C0C00000000003C -:10243000000000000000000000000000000000009C -:1024400000000000000000E00000000000E00000CC -:102450000086E69F86868686E69F860000011F012D -:10246000010101011F010100000080C06020F8206F -:10247000E0C00000000003070C18FF70E1810000BD -:102480000000070F10107F100F0700008060206011 -:1024900080000000E02000000F3020309F70DC370B -:1024A0001030C0000000100E0300071810180700BD -:1024B0000000C02020E0C0000000000080E01F38C5 -:1024C000E88703C43C040000070F1810100B070D29 -:1024D0001010080000808C4C380000000000000044 -:1024E00000000000000000000000000000000000EC -:1024F000000000000000000000000000000080E07C -:10250000300804000000000000FEFF010000000091 -:10251000000000000000030F1820400000040830F5 -:10252000E0800000000000000000000001FFFE004D -:1025300000000000004020180F0300000000000011 -:10254000000000000000C0000000000000426666BD -:102550003C18FF183C6666420000000000000300C3 -:1025600000000000000000000000800000000000EB -:10257000001010101010FF101010101000000000BC -:102580000000030000000000000000000000000048 -:10259000000000000000000000000000000000003B -:1025A00000808C4C3800000000000000000000009B -:1025B00000000000000000000010101010101010AB -:1025C00010101000000000000000000000000000DB -:1025D00000000000000000000000000000000000FB -:1025E000000000000000000000001C1C1C00000097 -:1025F000000000000000000000000000E0380C00B7 -:102600000000000080701C03000000000060380E15 -:102610000100000000000000000080C06020206079 -:10262000C080000000FEFF010000000001FFFE006E -:102630000001070E181010180E070100000080801E -:1026400080C0E000000000000000000000FFFF006C -:102650000000000000001010101F1F1010100000DC -:102660000080402020202060C08000000003030084 -:10267000804020381F070000001C1A19181818186D -:10268000181F00000080C020202060C080000000D3 -:10269000000303001010182FE780000000070F1040 -:1026A000101010180F070000000000000000C0E02C -:1026B000F000000000C0B088868180FFFF808000AD -:1026C000000000000010101F1F1010000000E0604C -:1026D000606060606060000000003F10080808183B -:1026E000F0E0000000070B101010101C0F0300009A -:1026F000000080C040202020E0C0000000FCFF213E -:102700001008080818F0E0000001070C181010105D -:10271000080F03000000C0E06060606060E06000DF -:10272000000003000000E0180700000000000000A7 -:10273000001F1F00000000000080C060202020203B -:1027400060C080000087EF2C1818303068CF8300FD -:1027500000070F0810101010180F07000000C0C06D -:1027600020202020C0800000001F3F60404040200B -:1027700010FFFE0000000C1C101010080F030000DA -:102780000000000000000000000000000000000049 -:10279000000E0E0E0000000000000000001C1C1CBB -:1027A0000000000000000000000000000000000029 -:1027B00000000000000C0C00000000000000000001 -:1027C00000583800000000000000000000000080F9 -:1027D000402010000000102844820100000000008A -:1027E00000000000000001020408100000000000CA -:1027F000000000000000000000848484848484843D -:10280000848484000000000000000000000000003C -:1028100000001020408000000000000000000000C8 -:10282000000001824428100000001008040201008A -:102830000000000000C020201010101030E0C00088 -:102840000003030000F010080C0703000000000064 -:102850001C1C1C0000000000000000C04060202084 -:102860002040C00000FCFF01F00E03C1FE03807F8A -:102870000001070E081111101109040200000000E8 -:1028800080E0E000000000000000807C4340477FC3 -:10289000F880000010181F1000000000131F1C100B -:1028A00020E0E02020202060C080000000FFFF101A -:1028B000101010182FE78000101F1F10101010109C -:1028C000180F0700000080C0402020202060E0009A -:1028D00000FCFF0100000000000001000001070EE5 -:1028E000181010100804030020E0E02020202040F1 -:1028F000C080000000FFFF000000000001FFFE009C -:10290000101F1F10101018080E07010020E0E02013 -:10291000202020202060800000FFFF101010107C7D -:1029200000000000101F1F101010101010180600DB -:1029300020E0E020202020206060800000FFFF10C9 -:102940001010107C00000100101F1F10000000007C -:1029500000000000000080C06020202040E0000057 -:1029600000FCFF0100004040C0C140400001070ED4 -:10297000181010100F0F000020E0E02000000000F1 -:1029800020E0E02000FFFF101010101010FFFF00EB -:10299000101F1F1000000000101F1F10000020203B -:1029A00020E0E020202000000000000000FFFF00E9 -:1029B0000000000000001010101F1F101010000079 -:1029C00000000000202020E0E02020200000000087 -:1029D000000000FFFF0000000060E0808080C07FFA -:1029E0003F00000020E0E020000020A06020200048 -:1029F00000FFFF30187CE3C000000000101F1F1014 -:102A0000000001131F1C181020E0E020000000004F -:102A10000000000000FFFF000000000000000000B8 -:102A2000101F1F10101010101018060020E0E0E01A -:102A300000000000E0E0E02000FF013FFEC0E01EDB -:102A400001FFFF00101F1000031F0300101F1F10C5 -:102A500020E0E0C0000000000020E02000FF0003B4 -:102A6000071C78E08000FF00101F1000000000002D -:102A7000030F1F00000080C060202060C0800000A5 -:102A800000FEFF010000000000FFFE000001070E35 -:102A9000181010180C07010020E0E0202020202052 -:102AA00060C0800000FFFF2020202020301F0F008A -:102AB000101F1F100000000000000000000080C078 -:102AC00060202060C080000000FEFF0100000000C8 -:102AD00000FFFE000001070E1111133C7C6721006E -:102AE00020E0E0202020202060C0800000FFFF10B8 -:102AF0001030F0D0080F0700101F1F100000000357 -:102B00000F1C10100080C060202020204040E000FA -:102B100000070F0C1818303060E08100001F0C080F -:102B200010101010180F07008060202020E0E02017 -:102B3000202060800100000000FFFF000000000175 -:102B400000000000101F1F100000000020E0E02027 -:102B5000000000000020E02000FFFF000000000057 -:102B60000000FF0000070F181010101010080700D9 -:102B70002060E0E02000000020E060200000077FEF -:102B8000F88000807C03000000000000071F1C0785 -:102B90000000000020E0E02000E0E0200020E02035 -:102BA0000007FFF8E01FFFFCE01F00000000031F0C -:102BB0000300011F03000000002060E0A0000020CF -:102BC000E0602000000000038F7CF8C601000000D8 -:102BD0000010181E130001171F1810002060E0E0FD -:102BE0002000000020E06020000001073EF8E0180F -:102BF0000700000000000010101F1F101000000050 -:102C000000806020202020A0E0E0200000000000E4 -:102C1000C0F03E0F0300000000101C1F1710101022 -:102C2000101806000000000000FC04040404040066 -:102C30000000000000FF0000000000000000000095 -:102C4000007F404040404000000010E000000000D5 -:102C50000000000000000000031C60800000000075 -:102C600000000000000000030C708000000004045D -:102C7000040404FC0000000000000000000000FF4D -:102C800000000000000040404040407F0000000085 -:102C900000000010080C040C0810000000000000E8 -:102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000008080808004 -:102CD00080808080808080800000000404080800DC -:102CE00000000000000000000000000000000000E4 -:102CF00000000000000000000000000000000000D4 -:102D00000000000000000000000098D84464242463 -:102D1000FCF80000000F1F18101010081F1F1018DB -:102D20000020E0F000000000000000000000FFFFB5 -:102D3000180804040CF8F00000001F0F1810101001 -:102D4000180F030000000000000000000000000059 -:102D500000E0F8180404043C3800000000030F0CE5 -:102D600010101010080600000000000000000020F5 -:102D7000E0F0000000E0F81C04040408FFFF00007D -:102D800000030F18101010081F0F080000000000AB -:102D900000000000000000000000E0F84844444447 -:102DA0004C7870000000030F0C181010100804007D -:102DB0000000000080C0602020E0C0000004040487 -:102DC000FFFF040404040000000010101F1F101077 -:102DD00010000000000000000000000000000000E3 -:102DE000000070F88C04048CF874040C007076CF2A -:102DF0008D8D8D89C87870000020E0F00000000003 -:102E0000000000000000FFFF08040404FCF80000BC -:102E100000101F1F100000101F1F100000000000F6 -:102E200000606000000000000000040404FCFC00DE -:102E30000000000000001010101F1F1010100000F4 -:102E400000000000000000606000000000000000C2 -:102E5000040404FCFC0000000000C0C08080C07FAF -:102E60003F0000000020E0F0000000000000000033 -:102E70000000FFFF80C0F41C0404000000101F1FAE -:102E80001100031F1C1010000000202020E0F000A3 -:102E9000000000000000000000FFFF000000000034 -:102EA00000001010101F1F10101000000000000084 -:102EB000000000000000000004FCFC0804FCFC080A -:102EC00004FCFC00101F1F10001F1F10001F1F100C -:102ED0000000000000000000000000000004FCFCF6 -:102EE00008080404FCF8000000101F1F1000001068 -:102EF0001F1F100000000000000000000000000084 -:102F000000E0F0180C04040C18F0E00000030F0CB3 -:102F1000101010100C0F0300000000000000000053 -:102F2000000000000004FCFC080404040CF8F0009D -:102F30000080FFFF889010101C0F030000000000AD -:102F4000000000000000000000E0F81C0404040879 -:102F5000F8FC000000030F1810109088FFFF80009D -:102F6000000000000000000000000000040404FC59 -:102F7000FC100804040C0C001010101F1F1010107F -:102F80000000000000000000000000000000000041 -:102F900000003078CCC48484840C1C0000001E180F -:102FA00010101011190F06000000000000C00000F2 -:102FB0000000000000040404FFFF040404000000FB -:102FC000000000000F1F1010100C00000000000097 -:102FD00000000000000000000004FCFE00000004EF -:102FE000FCFE000000000F1F181010081F0F080043 -:102FF00000000000000000000000000000040C3C85 -:10300000FCC40000C43C0C0400000000010F1E0EB4 -:1030100001000000000000000000000000000000AF -:10302000043CFCC400E47CFC84807C040000071F9A -:10303000070000071F07000000000000000000005C -:10304000000000000004041C7CE4C0341C040400E4 -:103050000010101C1601131F1C18100000000000A7 -:10306000000000000000000000040C3CFCC400C490 -:103070003C0404000000C080C1370E0100000000C5 -:1030800000000000000000000000000000001C0420 -:1030900004C4F47C1C0400000000101C1F17111055 -:1030A00010180E0000000000000000F80C040000E2 -:1030B00000000000001028EF0000000000000000E9 -:1030C0000000003F60400000000000000000FF0022 -:1030D00000000000000000000000FF0000000000F1 -:1030E000000000000000FF00000000000000040CD1 -:1030F000F80000000000000000000000EF281000B1 -:1031000000000000000040603F00000000000000E0 -:1031100000180602020408102020300800000000F9 -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A000000000000000000000000000000000001A -:1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000080808080EA -:1036E00080800000000000C0E0E0E0E0C0C000001A -:1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000007EFE2D -:10372000FEFEFEFEFE00000080FEFEFEFEFEFEFE31 -:10373000FC00000000FCFEFEFEFEFE3E000000005D -:103740000000000080808080808000000000000079 -:1037500000000000000080F8FEFEFEFEFEFEFEFE01 -:10376000F080000000000000000000000000008069 -:103770008080808080000000000000F8F8F8F8F8F1 -:10378000F8F8000000000000000000000000000049 -:103790000000E0F0F8FCFCFEFE7E7E3E3E7E7EFEFB -:1037A000FCFC783000000000F8F8F8F8F8F8F800B1 -:1037B0000000000000000000000000000000000009 -:1037C00000000000000000000000000000000000F9 -:1037D000808080808000FFFFFFFFFFFFFF00000070 -:1037E000030F1F1F1F1F0F0F00000000000000002D -:1037F0000080808080808080000000000000000049 -:1038000000000000000000000000000000000000B8 -:103810000000000000000000003FFFFFFFFFFFFC72 -:1038200000C0FFFFFFFF7FFFFFFFFFFF8000FEFFE5 -:10383000FFFFFFFF0F000000F0F8FEFEFFFF7F1FFD -:103840000F0F1FFFFFFFFEFCF8C000000000C0FCD0 -:10385000FFFFFFFF7F071FFFFFFFFFFFF880000054 -:103860000000C0F0FCFEFFFFFF7F1F1F1F1F3F3F38 -:103870003F0E041F1FFFFFFFFFFFFFFF1F1F1F1F44 -:103880000000000000000000000000001F7FFFFF9C -:10389000FFFFFFFCF8F8F0F0E0E0C1C08000001F7F -:1038A0001F1FFFFFFFFFFFFFFF1F1F1F0F00000075 -:1038B000FFFFFFFFFFFF00000000FFFFFFFFFFFF14 -:1038C000FF000000C0F8FCFEFFFFFF7F1F1F1F3F2F -:1038D000FFFFFFFFFFFFFF00000000FFFFFFFFFFF4 -:1038E000FFFF000000C0F8FCFEFFFFFF3F1F1F1F8F -:1038F0003FFFFFFFFEFCF8E00000000000000000BA -:1039000000000000000000000000000000000000B7 -:10391000000000000FFFFFFFFFFFFCFFFFFFFF1F86 -:103920000001FFFFFFFFFFFEFFFFFFFFFF0700009B -:10393000001EFFFFFFFFFFFFDF1F1F1F1F1F1F9F37 -:103940009F1F1F1F0000E0FEFFFFFFFFFFFFFCFCAB -:10395000FCFDFFFFFFFFFFFFFCC00000FFFFFFFFBC -:10396000FFFFFF800000000000800000000000FF5B -:10397000FFFFFFFFFFFF000000000000000000004D -:1039800000000000000080C0C080010103030307A5 -:103990000FFFFFFFFFFFFFFF70000000FFFFFFFFB3 -:1039A000FFFFFF00000000000000FFFFFFFFFFFF20 -:1039B00000000080FFFFFFFFFFFFFF000000FFFF90 -:1039C000FFFFFFFFFF8000000000FFFFFFFFFFFF82 -:1039D000FF00000000FFFFFFFFFFFFFF000000FFF0 -:1039E000FFFFFFFFFFFF8000000000FFFFFFFFFF62 -:1039F000FFFF0000000000000000000000000000C9 -:103A000000000000000000000000000000000007AF -:103A10003F3F3F3F3F3F3F3F0F000000003F3F3FE2 -:103A20003F3F3F3F3F3F01000000000001070F1FE5 -:103A30001F3F3F3F3E3E3E3E3F3F1F1F0E00303E7A -:103A40003F3F3F3F3F1F01000000000000033F3F9A -:103A50003F3F3F3F3C000003070F1F3F3F3F3F3EBC -:103A60003E3F3F3F1F1E080000030F1F3F3F3F3FE9 -:103A70003F3E3F3F1C180000000000000000000710 -:103A80000F1F1F3F3F3F3F3E3E3F3F3F3F1F1F0F28 -:103A9000070300000000070F1F3F3F3F3F3E3F3F2F -:103AA0003F1C00000F1F3F3F3F3F3F3E3F1F1F3F58 -:103AB0003F3F3F3F3F00000000070F1F3F3F3F3F9A -:103AC0003F3E3F1F1F3F3F3F3F3F3F000000003F43 -:103AD0003F3F3F3F3F3F0000000003070F1F3F3FB6 -:103AE0003F3F3E3E3F3F3F1F1F0F030000000000CF -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D0000000000053797374656D436C6B3A25647E -:1040E0000D0A00777777772E77656163742D746397 -:1040F0002E636E0D0A0D000D0A576541637420533F -:10410000747564696F20436F726520426F617264D9 -:104110000D00776561637473747564696F2E7461E3 -:104120006F62616F2E636F6D0D00776561637473ED -:10413000747564696F2E616C6965787072657373EC -:104140002E636F6D0D003E3E204E756D3D25642043 -:10415000202020200000400000000000000000009F -:1041600000808000000000000000000000404000CF -:1041700000000000000000000000800000000000BF -:10418000000000000000000000000000000000002F -:10419000000A000000000002010000000000000111 -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E0000000000000222222222222000000000003 -:1041F000104200080000002008000000A815000878 -:104200001842000808000020C0130000B81500087C -:084210000000000000F36F063E -:0400000508000105E9 -:00000001FF diff --git a/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/template.axf b/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/template.axf deleted file mode 100644 index 5421809dd4171d69ef8619aadd8ef391944455b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57300 zcmeIb34B~t*#~^?oVhcTO!lPp zuEzCQT)TZDq-|;X9Qc>xB7O$+1zdCgi!PlGH)Z@^*_*LL>?+rW!?Qqf_4Vy?sN4`J4o;JLUB zGjC%X*7>?B-r6(==$#J+nJ7Q7|q98j}ohp+1@DW3meXGNFscBN6VuA)m_Z*5vnI`yrxITp5PZdqPkIl@KS z5C_En6qOo-sj*_l*!vK}@~$+bapf+7^ga0Mgfg+~vin7juWaAGcRt7v`(E9*PwWw5 zI`UYEP4|?&;aewmz3}eJw;l$4=H0;3=~LuXW7>nSZi3It?-LIhON}XF*Gu<_kWqFg z^d#D6zGu~Fj~y(S3l(Rao4cXvc;n8uuGVn*npf@u>`=VtwR*Ain_ zcKVY6vAZBc?9Rzrxywjfxhp%g^r5=H_|nCp;;_){@jKGq3%-%}7ingr)TbXVcPu?z zJ~Lb+M%!x+Sr>XQ@OJupfwyk0oLcEy=U-qf{Nv6L{Ao)$#i55De0A4_Y3~JW8x<*R z1YsknY*eiCFEkeXe&?pHP}zisj0n;s#I6ta?%NaDw{K4XSJl1=ODERfv}EE$Vc|IrZjSX1^t2AgGLbd1F1IXHDQiRP9(r@-6m;DzkAEm!liO9$m2-&sm*<-w zd2@65lq#br`|w2%`HH4golsfOmEV=uC8uY+^w^uSAp2{X%jdOBdC&jWE3b-OS-wEp zl$x|rF(o+q!#8~qWAxECAB{|3TlAjT9jY04(2uq%@=g~b?P#$J`G+W~pW&1KKroax zRI_i-@ISZLq}A=)b1v#5aSyNw+;8J{U<3FRV7C46(v@$Wev0V2^Znhsj74|u-gJ(5 z?t`7d+FetZt_v*n4Tz~1uM191U)M0j7+@PK=Z^7ZIZ}vTsjxpLlJRxbywDcWt`srgdmJk#}~AMMhcw zo6#xdXlXh3*anG+Za4)EeAk`P| zv-*>Ld(L_Y>4a^JTV1_%ME=;3B@!(BpXrhaM3#-g`!kNhopSk-US&jQ4?snDys< zD=)h9i#2FZhXh6snI7J8VomtEE0(lR>YWtXD5k&tOy-@_(O2!dTpV^^jWKmetr!hf z7VI^SjeN@Yp4=6x*z-(eWAXHf&w!V`WS2iUV|vz({#~VcGjYd z-gv*HG_cn=NKD`J%pI=3g5y$ditGnf;(@P7&VOrZUsl#LC--BTcG{id6Ow#v&E{ zt%L3892Q|N0<{Ql$D^+)176D^IyCLTLch;&o<##;<(hc7zM5T*IsDkkO{LSz&h zN@N~3ak0|QG?lTec?q7fVPitvMozJ?g6hkXS@V>?TyN;GSewuA^PKQahM%88k!l4_ z5K67kiGYIRoOC0X#J`k{js<3;m2*KW=R!I;o}5d{Q729DJXNs^Cq_17o|u$rWh+yh z=}mFiDwwQi^bKUU^1sSiiek*@XM-0<}d_!0BU?!~A<}(J1;1M$& z2AXD-M!FS+u#Q4TJPMgGVOlLE%Vh$_vz0a+Ij+nuh0$ErK05O3nyxZGf>85KD-*&D zyTIkms^?Z#7dn+!sf}|ATEX!L8KwDb3CD*|2(N+738t8o&Cn*I-K!ivY$C%t;2<

    ZEK}W!0_3Ri|0?Ke~Tlm1ltLI(-w6qwd^ucehs64Oo>i z7|#=yW60fb((E!ujiM~wn-O+14~JD*psz*BT%Bm9xALfrW#!3EC>GRcT_de78daKA zHqXf@RfY2Hs3}ljwV^`YhQ?VfY<#>a{cAPOsgkU5?hNz{MUDtncg%cANadIVQHor( z>J7&v*SMC{S=!l;ilnO0o0bX>FJC7l!R zG;>{kVKq;8ni!MgdBnPm!PwpA94TevQj`drpy~`)jdyj0R>wQhRnJX!k_VuZ%w#=B zCusGSlUypQA3Z4Ev{={-c5-5IADmeGBi;^nimRhwSX152W135-+ZL1HZ4`N&!8vt) ztZq0(epod$kQm3HQ=&+YHz+j~93xsXMF@zy3#Es`!HiHAIw|G@87Vo6@EG6 zW;}9mF)e=V0U#Y2T($oz>GS&W?MI$`JU<~PAD=`VuffhJ^MLtEe1!*J<-wPF@Gk5; zyZt}wkzeM)J3RP#U@TOe@PCaJ=_F44?fCo}J12`>ayUhS3r`4&5OpzPs`!J5Nw_Mq zaxOD2^qnua_#IpSkk~DTOxvdJe*){UhhhIxPuN<9M23pSkQKq7SLTi*-5OUxmu}|4 zleiijzoE;FEk1|;7RqHhDR*#jy78vP=H)WAMjm zKEjK@&G^kjx~~VV%8FcOTW| zZ3%Mpj0rfEob^Q88-TkatAKfRfjr;81)ZsrmvD-9CAad}9S@eT8-LvT#B$VS31>py zy6rNq8t*kxW-d&B9~Cb3-Qg?+R&@hqtL@Ux=UsZYpzYC5MOv1uc{KTMx8ce(v1@*O6X&5tTqcf7pm^5T!mcW*vXpS&k= zVIwN^c~I47Uy#^mUyJ^U=5kxU?Kjk>|ne3v?b1V7zd*WgUki@SCBR zYTWQ)jCY4w?7%**Yv^mPn&qygP#B% zYdjo9I2iw(`bHc9)^j@IsUBS9!H0SV9O@NxSacxuo$Y5J+ZF%GJwL`^( zHb#5fi-$yIfA2tlU#xHVs0fs>(ce4J-4h#(EGRBr5NYo3?>Q=h#Zv1~Z{*YS+dE>d zb4yBEM9ooa)#Cx{=|Jh)hQa>!5j@YdxU;GUS_fi-%fai3AqE}88(IfrYu()D*wAp) ziT3iUWwQ{tsuuH*L?+DF7#oTWN0+wtwIe!8q-x2E<+Toz3{_Q@;=x2s>qt*rpKMiY zmdARRxAwJm#vET{s|r*xGL-0vTve4;4Z%aAjC@tCnpRgjrpQort17mBq;q+HpCchx z)v|_IUwhMPhfkiWZFp$g+}(DvBOp^%yQ)}6LQ2Tgneq}EyUD@>r0|LUI|% zU9{3^)jLh{=n*M;PRAYTm0pMYE+ zlFx(O5R$KeYzoLfgPa$T?|^I$NQqXzB_MM^&JW0gKrRT#86X!1Dv-+q!v8a*GwAcJKoEuz^~u}87xHf04f#FX zeezM ziqHg!=>Nhzy*L5k{5FJd_$~oI{ksVYJ*wf2-3E2T=Z2(_i{Zz*3q~Flz)5 zhXaIpJf&H;03H*EuK-rZAx?dXdIyR$Jtr|*e#)@6WE%}Cq%E|SZ5($TbrlHTiRf~Q zA#xr@C zR?zca?Rl^AjDvgPEPCGiB>ah7CIb+;zMk6BAUp2}XsHsDhBAshKx-CYw2V+K+bFP$ zG+Qa;HN(SsG@EVw4+>G`Ed2=O(<;`B>GMFx=YcNMmco~)aHykjXp+MHRG9B5%vTBp z#&MT3WDBW^;0^ib^jGfqD^D`~Iu+_2g?g6)=Q2i%A4_iY(~iQYl|tTGNcHC!wuMus zdM15#IzBsHrma*TO@%>6VK7Ny6&22M6wXRg=%d0`M`3G{!e^;)wWDygOMz1aqvZ}N z-0CRYsuc3RhUDGAcbT_x?@5~ffn)v$miZZIeYetp zg~Q+HG>|_|Pt}^lXvu+`m#Z56fySP2j6LBB&B{;#JLU_H!V5_X2T@_vQ5a29IED(Z zISQ{ODXgQyJC4FTNeUaNVEA+^F?{i6WJMB#k1#VGg-oS@s{AcxNTyFUA}2#s>bVFo zTE0eq2RZ%@QvUKdklan577hpCR=*rQy*66@fliHAzFt8XEsxOHEXUX^9f|vB%0h)_ z!n7*Z*-ENR``BmZ>y?MmGD8E;`)Fs4V`q)F^Caz9 zsPGAG=Y+T&l~h+1!M>|7dmKAG33e=0xLe!l^VrGNDJl$f z`g!HR&oN#X`F5~KRq&jA8!h$pw%rMSyXD~|?P0s}5WZCnA@HE8yVX!0hEHC~7-#-Q zOAC$N?HIe;GIlkLy~@xnYH^1pIy+yR+k~H2c02q4zC={qUgj&%*Htja!8gs2qMU z%?fa4bs^09j|rR%=Sy(P>%<;pxL(( zE!6pv*fQquE~;r0@;=&{|<6(mfQ>Sxh!d5 z(Rf{!Ob7X5mdppaK1&`5azmD!26B0hJOX4>hMWU(UWQx@vN=Q6fNaT-4It-d$P+;> z$dK(I7iP#lkgXYVBgjP=@?4OMGvvh}mt@FoAeUyy?I54cklz5gEJJ<=M&a5(t(WGeEG^SO|ipMkNTA z8Y@At)Mx?0QsZP0EHyTQV5xCF2$mXGf?%m}0|=HH-vGf<;~o$!H68)MQsYSwEH!=( zf~Cf9L9o>L8wi#f?}K2e5yEpaEHw&2u+*3ef~Cf65G*wogJ7w#6a-6+W)Lhj)`MWF z(FcO1#+e{kYFrG0-rlZUSUOw_hLG3eZs<(O_Q{)wMCntbhpC=Ckxgk#;39>y;E(5tSPuo1iCr<=plV6?!a;{%q2y&iZ-T<=M zFYgA~;+H=LxzMlu%=5{Yz_`LM-vqhRFEeqR?kc}L4CHFREC;#9FHZpZoa3j`C;PzI z>X(~9F7nGOK`!>oFN0iya6m4FaxdE!mspR2A>>bRH{=f75hU&sJr8>1*Xbolm zbj7a_k5@SB0%WZEA@{K~#bvZy1354J*XDCz*gsu)aRo7x-1!XR_cS@*3gRXm#6nLH zE}!M}Sx=vTq0f5D=l8YG6=VBcL!WK*`38NqSw3IXK4WA1?4{4M>GM7MJlpcQTl?IU z$|rN!XgP;Iw;AbJ$q5tN`*1Te)8_+c#&P&Fz$$Y;m&z8O3m7ez(bjE@MIn9OX2s%s z?eh+Wt(DwN<>4lJ$n&M&3zZ1He-Nd0wX9puIeAd3i;9dC~IX z%A*JA9FbBAh_()66 zsmo<9%z4T-7j6Z<(S^?h{wnbz<-g$0xI26wWZ!e)KLh{J<=2lE@Y6Uh_*q=H;1_fs z>;Dy^TktmBW&Xd>{Q=$O$}O_>Q$VAo3R%Fba1C+l7-*Fy7;fidrW5w4+Z}Y zC>U#fCI`eO*pbH+-i^HOgwu%m#<3j6@5C)fO!zH$p6z2FI+$?L4e2d?y)!OMOj7@HGh6ajuL>cW^fV zH*kHc4S(<*4b~W;;QJaJZ)5}w7*J{_7&$?lQntW}MnMqA?!-wn@M&X0aG{p0HHv~q zYtUj$4_0XK8DnN}i3U-lBv`M(I%8h2QG-@vQE-h0>y5?1wE)*JoHnB@xDG%iq1{*- zY}X)W)Cao&ZlYR;(GctfxSgQWSQi`wz&I{^UB+NOW%&117@7Vo z-&`Yj3D9LMz4<5%M)3;-3yetc3N2Y^Yzl7El10W%S=+VbNJAJ|U(uqYjEIqShn9WH z*kokgrDcnan~banwCre1LbDzL;%<-c7$f4#`YF&|MA+h&Sx*D~fT+yaC9_@vQkjK! zVX{Ozohnr!R|+S%+>2cKxXa>aGf%M(@8|Bh`D@(Xhf!bD7s&CQ;0x~5A$-~=f`8Ru ztbEH;%einX;CBcs6#O>e6NHt7<9-P^N?1*6;|xsN{v3w~0lwkD@r(_BoDa&+ zq)phAuA*hdfsYK)X;6E(un8Vj9EKSR&cK81?>CGB9;mU#G9Gi3n+v(F;PC{xnGq=b zDqxla4|o+J`p_w>5HVLn7s49MkWQxmYYLx+heCR|Mup^3IEM;17w*vtH^&vIg{dbM z?mEzDm`4A1sq7TXF(LE|?o|7Y`QT@W9^98;0dYGhe>m4Ae1{-e>Pb@`PG4gA7XiWY zuNVZ&zr`R}{?&nC`FA`BmVX@}SpE%xVEK0r2$p}BfMEG|9SD|xUkAbR?>it^{yhSM z<=;~vSpNM21k1laf?)Z#8wAV0e}Z877dk*K|MEew{5uE)%fA^QSpF>p!Sb&P1k1nU zK(PG#3<#EgCxc-5w-E%(zbznG{#^lr<==J?EdOo=!Se4u5G?=={z zJDyH!iPQ}9czytee^FWlg>g2vdi{&&EB*Vpsb4q(Ii3;WAT)lQmZ@j|MoTsQb;lJ$ z`ly`IvYMi;nMQ*$xRnMojpHt+bp_JaAh63Fm}xX^b3oQ*kX=W33H@c=1NarfOBLJ+ z_;tdI+0|O{VLdil)-lj$b)e7MfhxlaxOID}JF0a@-MR|k!7a|@Sxw?h>h9LMyWP4r zX#55vw0jX(J!*1lMd%WGG>jZO8?drPjB||Ren4%*Q1Q>zXa9_rFH$|*;KP8tBA8Km zm#saibXdrmas^bP@2989%2wWT?P;>|WT|16fV_E%YBMd{r)ssC3AQcdw*6ar`jln+ zM(ycSmTf>RY?bYIsMc%bJr3RvnY3PQ_a_#rLW=TtLpn;_ucY}C&|m!}jtj(_agfg? z@_TV?W$HQ=S_au)HS#*3f;S%NW)GD2OW@2n&R>D))CA(MyCQ7$P(?KHGb3*VD$2yq zEEC&-l?e;y{}@=+yk{&EnBeGc@@Sg)z2V}lCg*R4$`?chc|JhSKa9NBVMdkZKa`og zahO=E(zI~?vA_p2rXN_rjGKw{d=r_9E?^vM!`(1s&N9Z;g8wYsK8)k{!0i_oLh3h) z;5kEl8uu$<>MBtFZefS|XMlwOz5!FBQbuG2Kmc30209AJf_`%aIn zVfAAdFqD_`9)-W{biTsa=KUVo@j+l_3@! zj6y@rtOn)pVHVs<`1cvuNxltS>?D5&1UtzOf?y~4e?YL4{4@x5l79|@o#fwvU?=%? z5bPxH1;I|Tj9{F?OQay!NuCITo#bgC*h!uVf}P~~AlOMR1Hn%6G7#(}uL8kNauftR z$z34WNj?PxJISYmU?+Jq2zHV$1;I}8H6YkYz8(ZS$v1;wC;2uI>?Gd)He;-wqzB##HdPV!U`>?F?u!A`RO zdZZI$W{-iq=9pOpK0Y^qJI2ffAR)t4LY%!=0hlH~L#FJ*Jt)t@Js>Z^-IQO%-7jy) zUCIY>_sOSlH{{E>L+ghI`Xo59zIz=6LoCh8so)$F{3V!)+XxXs~Ik;SR%% zc%}1f{Z`m9T22HfkQL7J!5)|*V+t7ZKqHeOh%C&?LJ_6dL&X`>Q5~|kq3ZoI4u1sr zvVv;zn8O43mY-9}oy!hL4R=P%`D7fO!(;axyN#Bs$f!u?xqHjYO=K(yf7yqIr{Yr# zhPlIvkBU?#6C%=aTtyx8H(I_;FU!L(z{@!0F@S#wZhwKqC^KIMLAAIV33>HU)|``q`@k9u<`>~K zM(}XlM}iA+KQ*`n_cMY`xStt};eK}T6x`1Vo{hT*UWB_5yb5<;a69fY_;uXs` zgAd{!2tJN`F!&tqq2O}|APC(;JdgV5adyz1A|j=pA?*h z`$54Yai1LIO6TBUBkqx46!$5?9^9t}Ps4p$kjs#w;Ae3^BzPU}hX%ij`(eRv<32t3 zFz$y3e}?;v;BRm*5$2o7xPXDd9V}BHiRml7&8R?h$n~ZRgR>Yo1c!oBC zJ&*8g4Y21Co~Hr!JiomZgM>wVd_B_HT zX@EVCaK8rYjCtV^4Y21CK3xOsd4$gaSj=#+=MmlvpwfyxkMM;WV9z6b3BXdSVb3Fc z1wb0p`4Hkx)8Zulyg@K+c){w)7oBm7NRTi^!=`x+`56$A^6Nce6o!M;ZLJ^&@bzDDjN zTEcye+#hMtQAWhb-JxaN*T{WA%eb$R`-+xvUnBPqKs*KIKgNjoa{mT&BGIwf*T~%s z)Ir33jokNvREDU1jZ8XKs_=NlN#O*Sdyy;Gc3J#9<{#%`9}V3aB_kOu;D(duX7lGSB@0qotchj-0$g zn?I8FrYh5)N;bXNWBQm3F^wbh;S#lF{p8 z{D_PpaWRbg#lva18@~lBLrgeah!2p6LqUIyv3wXBzNNUSC!3dmE96zU8}d5beez4V zPU4;2(01E#%;l|K-0o;$liADdtAVI%)ic)a|)_i{B zDX=gM-skqsg}m zlK~c^(eelx>wM2T8qbr_%cJJD#wZyZd^;S*ZZgj0QC?P6*bqnHeu@7l09;83a{wB? zabgn~Qmm$qAp)7WgR0;DA5<42^-*cygOz9B{w^GB9zn{gb~J6Meow03n_j zV5UNip}&vsV%U)&qqumsK6b7h8>0xWuN_Coqd2wRJdL{FVRcfLAokK^o>_2ny;tgYzoTZ<$5-6_o35lJ1sb#Nb#5cFyN z!M2g&E`c;?4iL&yqv*&Gj`v#{L&NReeRRttc^h&Dxnl~`$3w?>k=iuVm*IGIoh&I% zzMBU2(TW4|?sMvV705^Bk*AL3i-JC}qxSW4>f|p(@rO|}Hz3~>+s%Ulb!Jmwxj8vd z48yYn@}hH!@#P8IEDxZ`ErwyDj|#|l&+hQy#bzr+o*9DSZI1O(KAJ)>mByZdAe>%krp;bvPA)Og+8mEO!z=$Zww%XwXPDz5H3P-i(Y4d3B$q=n8In1(&B?U^`S-Kx;u)Y6zGy2XCFN^l3GT53 z0r``&T)C-?Ju;S`C&v=}$`;JE;`f!L`0X6a=Nn@Q{yCOltF-bWDXCYFCAbxWgVHCO z3z6%G)R_&%<}r0UTgseTFN+ zJo_mhbxH4cOI4=*+$Fs^N%~ip^m4b9r!VD2reWqG!xtd8^Xkkj_5mk*TE}+i9HClA zha5fK6>}B(-H;YrQnR?uJc8}3(_`Ur=*+e)eD`!$>Xe016^BCeDAW?fAwN)WE=F|n z>+sheOxxIIJ32fhiK9>d{}^3TjwBq3>~X}8aYSY8Lc`2VuQ$!jW>%M( z`6ZBx%uE?ZdCpTq1eR~;>m2o~0~|fZ2jtGvLdTnF0l6daJrf%{cb?Wk^xZ%xLimIQ zueaeJEcnB~8x%fhp>Np2p95m1{N+GLK>p^mI*can0N+QaoSi-!!$3fuceY)zoakJD zen?CAoaL2ngEX98YNnM07^Dyek zuldoy(ZI3-eag%;=n4{x{{hueAV=o}nz^+oeVLDF-n+4wqVGYJKifQ@)67?*OeL~=49DQ} z+Tbmg!C$2?c!g!~wvC(VrT^MA2VNKk!(VM|ru%yt^cQ<&YmqS|2f?C3YDp+P_ zT5}A%R+prEGjziUCv%x9gqJqBBEkbc@*briGf{rC&3u`$-ONA*|K^5b`E01zJRmUF z%qcN*<@gRWb2eI59cFR0W(MYpmv2B$y#<|vwwhs?TReBJY0eGEKb^_}S8hx56=Bx+ z8W8Hmt!ZeEFP>WGi=f6GioU`xet-@md1C%A&7jqUJYkByUvp}wS3@V>hA&%2+j{4E zX4AdhL-@olC(yP+ZQs!FprwROXWi}1HOv|5$hEp+Ge<74XSKC&l6dGb%9*qn(GsTi2KFJA=%lSFeuojEaZzFC0+m|tg3 zQ*+9IyaqF8)ux<4-a;T1=>_KeK!-W816`4$yA`^s8B>=h59DU_hKHkW92_W?@1Kp< zAkR07{eDvhCXeig7UB^jyvDG%6P_BW`EY@C3E&hDAU8Nl9&031O{R`d8I?}r! z4Z$z^?k5o_9`GB*_^j5GXP<|0Tz=m`t@QEl@1D(p(k1Su0Ild;s*A7$+wW4zR*k=)&12N6gOD#t*3c&#$ z!F0xdcf2Zn7STra*=u;Mo{Q0u6MVN-KD?J)Xi+eit&44Tr6)eyp`h1jiR0hxkT9mD zV|o4lm|kCpB$U3~Tr4wK_lN7)4lX}yJ7%8ppT1(VV2K$jHSUSEeE-Z2mchBQgI@QY$w{lcOm=*M@SQVJ2^f;YjW02tWQxhmU)1 z@RyBYys5Bd8oOlwM>tE3sw3iw2(u$suZ53W^ea_f%HBOgsOEfPjyn8*aW}AOu+6ne_wR1<#fOOX{8+a&fUuhNTf2e6A3%BV z(YDOuz)^C3K=xqZ7+)Nk_KVINH(S4eJn?(hjDgzN@x@D9)b2D3S=G)9VAN=^Hy)^g zM`agxAR5mL)STPhT70rCe-5pTbo4-9 zKgUW$wW=cD{Z^t^4Uch(mxt367}saWO_+A($@7f5WdQ#?yAFz&^^G9M zqV{slX}X82mW!?8eA$dyft<StqFSQo%1&kFSV#i%`vb-vs2c-Pp=fJE6?d11E|%+X!lU-vL# zYY&F3|LO?`9-XNNU~;x$8tM6Jt_Bt#fk{*+Grd5w_z+C~2xa5q@i~}$E|JGaVRAH) z$ERVErS1xX55(l2L>`}s$#XH5x%Bv0OkM(>iRiJ0^1G~jyn@7AIUpLC5qu8p7jGI3 zH^QNQROI6n0ybwuG?0`jXEW~V=hnirEodD_LSKehrBra!S`;n7+ zhKp%9&qEw^%jD+oL&3mNBb;B6c`!OIk-L~j#Kg6g%P$=%rDKT2gA(E z;}R016@Ad4ZBolqqxOW%15^E&d_K}4u(UqJv{u}I(|j64(^kPAM?#z&YbxEx=Sv~Y7(f-JzXE$+9XD~^*s)S{J7DmS%aV?q(=IO5!(37VKz)?R} z9QHd^w4R)NKIfoGcUh$a8={eH{#f>W;6e9Cs8NN#|BM=+h0vOnkqsm~ppjhITG3U8 zS~0QG(;9!4#Sf{%mKx3%z=1L#;R%l9{7a$u;U$9e4y?H(lWmKMot(DF@zuqt8$V^M_5%Kw>g&BKMXu*EjG!C%Gp4|I78VTb>>-*#U>e0 z&IS@D3d-)ZF(0>BY?7_Y*+9ZnL;1rJ?}ti;QftIr{dB(kZ;BYO50~A+>-LnonJ{8# zCL~%hbu(dgXNi+i)6>I&qXK0gLN(HKTu@_Q!uFcN2e{$@C2Amv;8Mf-`}?vFNUB>j z$=Z{`&cBwuuw|E51B*>}6Ad@g6~ToZBq_m_+-riVGQt{ij++WN6W16+j#V!{`EZy? zh&BoHJax2LhAB#f4{IP%AL@n;Hli+EaFU#a%Q8n-pCup}b_8&!A8S30u~?4B#R@@d zpTT8_W|DQvc^nD-Q-gFPE>8~95R=0k42o04oI~a&)(t8!H5_5kLUC6=9SN3C1Xn=h zY`XbXc_ZD6aivh51UAKpBkt;_trP=Uz7i&N44Z7G67gOOVkJ_gj9m}7?I28Cii9y7 z%WpINu2WjgaSuuHV83PAYJf}qbQCLqXe)@0?Nf&=JV0eR%gSLWb=>GfyIDpkVUl!Q zsVfYXt8hV)q#oDUij$QhU;l9wQ+Fvdlwu=^wwOG_W5g!mVhtf>JM$DBIEYSMjhH{3 zOv)G=njoEt3uQsVrfs59%_~akZXmG^w2FotI9ZL7)69olRCF~vDvzzmxFBp2t(ZD< zToymPTo^veg(L%4a?oI^pUYxAF%gJ3S|xkq;~V-b!i6rExitqD6&r6Hfa_ET!J&T4 zaC&3v=$9Ez+K$Um!!#ULxo9<7r&$u2 z0pxniiM#sIGattg_;4Y!NIpDQU5d=N@c{alLwA&XX`RQG!lf=C^-9}+eP=3NEo zQe1|b6v2^L_1P~{jg$sGD|v7bM%)^$T51WM57qc%)j~J$6MS@ARVsf|;sybj|jNIhEk*Tr#HIi6i9jC+c#E4Ib&V<%hT+FaB zny*(4+Ulnh#r$DlDTjD!7T~ff0xOLAX}=SIBDj)=_#{=2j@Z%1Yg_gQ< zFvBVJ!~-1lv*OW^4xsBzd)y?d!BY@VHPPnT8oM3C`RF-JVaJ&3hRB3)?`3gs;Vp&72 z<~J-~rJYsfmD*Weqg_iHYFC!KL4_MQ9;oJoMNsWlOR%;?OUkR_(T3ZJw#t1cvdA9C ztt1Pzf0aFs3>H*YImOx5)jBBf_sE-0Xd=O%Ems78t=y(_L}PVRb+h25Y(;D8%a=qe zo11FfxW1w)0XJ7vyT#3wZq!(@B0*YPRbQRpdu3yFW24*03JzICL15Py+93O$=O z&^p*Xd|I@vzptaa)8=jH$Ga;%vA)jXE|=!eaQ{GbefO}773*_{lo0OlU~At{FSHXZ z560SJ-KXM!oIAMo*5THu*4NP{&(^kCt?ljn+x3Zldq|cW+D8U@ zVjC0V?BXYeG;~^DTi0NJU;hXa-_wsj@{o|$WbsFNPl#XV2p;T5hr4?{r83lu8q-Eu za`t*;p70Vq_O&KOIE6x@iSEJn))c|U*@@}{s26Rm__H2~#i`VL`Zo;pZ}5uHJ+$+W zh(tRej}8udYE_~be~2W}aC@&)H(xdSd9X ztVW6!9vd7S85mA1<~Tbs@o~NrhS!cOh?T3F>uXn3S4C@9t*C6SUAZD!B9eKfDR^^I z@aCrA&9jqXz56EE<(%5uBSzZ0PZb@5tt5yt$w*tz$-?S?+B!PL2DBcWT0qy;Cx$oL zb+m1`M+|DfjzX{-P~G4nbbcFpW5Zqj?V?BdLN4}+wt+5OJ)*O9WLOLgwTbS*o&kX( zb}VWaim|P?T`+gtWfAKe>17mAHy~j4TD=@0-t1$^{cq2LtT!Y+p}&&jj4$yy(9+|Z z%j?zrr`~bZHdZcLu6S_GD_N$T4fXZW%4P8(N{zc1v{p8Xrd5@d)lE%Gt!jCBiFTAK zM`dHBqSePQw;WAXwJR0Jnt#Qe7^(HFY;N2+FYcTlcP>y)HQQ1yPPMedvZKa&i>I76 zm(weysODD6#fg=6Xb%-tio^Moa&R)G9GFQdifNRhjhGoQ+T}HhsEL&0s&HJElA1p` zylTf4_q#;#IA_uhD@N9AN%1&UQVwgLq?{^+ju$JbO^xNtqfPY868 z{^6@4XE4CHH^ySaUQuw}(LdDI&9~jxM>n)$kx@N3Xisfii;{#HYZ712Ws(F#J+at; zo&k*^P2t&E0@)+B%Uj~oh=TPe57-MPmv)@#wr!uKwo)>r{sNw!-O*AiF{gTzwRWwy z=j`_MLoo-|m!{;-N#?el+&?m0;tp=0rzZgp#@bI!P-ty$OSUsIlp-RS;3sRU*`jBv zs$z|Bt!z{p)|8b3PLZq$tK&5VJC(jG=i^4)Ij<^Mf1k=q%iYlt2kTE8XvKoiy*^>U zO3^KITkP66+=~2D%c$OdERFjI-L)*0*zLW0ux(Lqw6*=D5&XeH%xg!iwKRimM}@U& z?Wz4e!~6?@TxC;Yh1M|`J4G!4lIPq1`8hcAAf8dfrwwp{jCn2Q*U>gK?ZFr)W;t-CIvIc6}JJKVt{$ds6oSt=$lWrI)!K8Y<1)OST zH6BdK?OaqV0~9^y^6f*&H=**%n`wI^0bn@?z{jz+0fs=O$5YW;67 z0PNQXKj{@fLZ@HZu&TC7)K)e%iq*}S(3fL~!L%M%CF#-z&$ORgQ!K|+IoPz6W-4oN zTgqD%Z_Ah0lsAeB-pYv^YA67xQnE%-iycw5PuIA*x~fD}Heizy5vYhZqdr4g4V6mV z8sUOQDOh;S#K{oh90*--uBa`qh)d^*TFilM)%l{SxwcWPSY2Cb*{*DEtQYkw%d5m{ zEQBh{>uW1Sll>PqRp5Q6cB7&XcK55@v(CYO>?N_eYrf(jE2^3*EME8EDY~CgI>fqT zQH)cuhlIWegK3Y|bJ)X*vw=bLUY_cY6_+@TS)QadGL zIM$1VjI6gD@Sq)5N-bYV`!FLa`a3!pk`qPt#L2PwUvDk;yN;i9Yl*Ly)fy;q5BvYt zPFRU>QS{&S%pks!szUEmQC}^pS12;}#F%{^`@Rp~jc1+IoAJus+TmfSeR?I*o9qs- znz;ivpwo#71qblhD(b@BeFG!d=f}RgX9lOVEvfQDvEpG=cYAU35)}uq;XN4ZZFM%y zm1=C`FqQz;oERf8Ix)*^>{R>>=%{Vnp8HxJ+yZ+7m@Lp;qmnRWPT1@utB-04tFIY| z#o7hrRyU=1oWpbrW`UZYDVM!(r#28(8bn`ggC(x)?;9TM@39vys{g~Er#{&-NLxyO zjzvm^og!w9<3{lI#74#PKQK8+e$%VT`or7y0HB|b;`NqKsF%ZNhrFo7*9P_Qu+ z`cT`@N6ig6>(etpP6;`ibJC`^FF$M^^RE{z-cMSq-=X}3ip)tyd|>*&jaNLuRy!bS zC~{o?%Nwsw$*2kzA7j)8?SJEwXO4L_XvTK0sRk_fLoIi|PGQ0bg$As;^~AACH4f{m zgC*EffKms>B|N^tYSohU#M&)E9Aaz01+X^|N5lP{op=gvG1iX^599f)GMm8Rzz|bo zWm}i%z=XY~w!S*rKhS#0NKB*F9-I;B#c+m+E{?S@Lbl#e_vtaA$~4uY$5Ils_-{;s z*>SKtwcg+Tgt`tq|Hbg?R8uCA-Jm*YV4sjt$z0Ljw;Y2b*C@3Z-fJ6=>l4dkz5Roy zEpP3^mIrgm;#Q0d)wGWE*l5)dgf85)y0R6U2+Ds|Z2d^*a(gRAaT@T*ylJ&1MOWX< zwT%*}y<^K+zq-nDG?y>OF$v3!$1awG4>pt!?uS=uZuRlawIvpx&eFJZPTV;+?wn^i z*@;FgyITADVm-EZH_JBTX4&T4EZeM`mBRe|b{;AeB|E1M{k^@>Mj1;wn%it#Qd2jhuDD( zSvx3AvEc^2pTK;ywp5%g2D>w3r)zaPnqklW+G9PfrwMhB;>o?`XpgmF9?m{kYgbvv zjSzsts#Xu`-5guVqv1gNQAS(;2s=F02mX6AJo^RtPpFqptdAf5AcrwgW9NtT?EhX` z^%^9q-m?FMlI$)070YX*OYwDO9QF}QafrtnQ#1!dku?rEI?gbpRa_&HW??XL^z~rm zFzm6&(Y1#ojrmso!?^g;eLF56UjOEs-TcDvB3%5OFkd3)w}bTyxIB1E9(AZo9lqPG z-|(mWzwO62q?vZU0Gc0S)++luR2w?C7 z*QCLI>yPm{23WrZNL&dVZwH203e2_!f}f$@73p$ezGT(o!Y2Z6bz!FO78hOz%>D@k zKSMBntV;?4GkzIPJ+jizx~1hEaK!7GAx;L?ABLg50bq_-T7Lu%{e2P2X`kbomh-Rs*g1`_g&_} z+kjbqe8-9D`7-X!F8nRvn_Tz-;P1FF{}9D}F8m^}{xLk-Xa2kG=eY1F%RxAf3(N%f3v=7c{VWXr^b_jS>H8299aK!eAr&Joar5P;Zfi}xbUao|5X=W3j9|W z#-BZMezf22!9yN=o(Es)!8dvEw>Z#6SGe%)z}L9&_kcf#{*bS3 z;p3*_X<+;AJc0}jjZ$+dNBG*=SO}1St9)-X8mUS*YW={ z@MA7K3jDYWvpzlP!mLj_T(}1I+23e;Ob_ZnLV6x?Vg6;ep91ssHKwoA6F>fSH~nLL z?*&F55A};0b^k?u(<7hZ z!OK1-?t#AUUupkz;Ei^FN_-LUX}}GLD)Z;#+W$}M^Uq1?AM?wbzu$$N`Aap%|7UO% zxbUkkjIX^VmCs(t@ijchzt_GO=i;v_WI&&BVt8J;7tiqHA-?DJT%1@uT$0L8-gIWLe{EPAT%KzZe|EC9!XG64q48PQamw9l^g9kjA z@##YT6u~Crv%w?(D15a?|1J-H5Sa51_Mf!>EN}-fyGi1mz+Eo62-=AQ$?@&pcfALH z&4cgs;72_eeWCNCy%#-r)Pu1$c7D|Vrw3!7!1+-=&VwT!T;jn;d2qD{s}D=qA<+I> zj~sdB{3svx;7uNUsRw__gTL#+KlR`jJ@}6v{C5w2*Mnu66J1rF`5t_j2QT*E8V_FM z!EGLVh6iu+;2S;oRu8`4gMaG5F94(eR6pkbA1t}*4|6ej{F^0Lxj_66VAJk@@_;2K z4sM(YoaT}r44mo0i#)i>gPT0~Gr)x||Ggf37Vt#K8NsQD&n3WfZGGY!JoqjT{*ed2 z;=y}8I5(VVe})HFdhl8g9`WGwJ@{G=zRiOl@ZhIB_%|N>cMtaA-G6ufj)A4x@ z_-$a0&y@cWcp}!HOfd03fDZwV*f@;8dtdF6PXs>BC7%I20=(7MUkvA>AC`C{NxfE#RiE$|D# zI{vGHUjYVD@r}Xpcb9w%@VhSj6=3`kYRCV*z?r~0zn%o1=#swzJk2G48+f)$9?liw zNML??h50q!#()Y>^Wa&)CqN(7K*`I1JArlmX#(zc$xi})3i~#YJQvR^NBA3qwYHR+rY?s8%uF7aE@O@=qcBS$z@S{F<#E^Q78V2h5<#< zaPeHSOX-@YT=RK9lDM=)F_a9>;o=3v3+Y;@L<^N@;T*-b?5I0T3>PadAnaIb@o#6V zhhz3*!Dy5Zp4$eBOYqjU3zWLSd^cF=28;A_OPu<1`JNL8b6{5;Z*gnPa|brx4Hg3M zacZpB{dXcPPa1N$#%n7 zUyPsdc5KBq_9pn|=~K77BT?M3p}jM~KhGVx^}FXJn6qEAaB^U-JGbUWOXCq4=;hz6 zbK-@!d;lGP3ljV#2LQe(qXzh!s$CHm0Up(x4R9ebm8C`uGu&UFnAjDi(#s`vcHGtj*IXs zv3~*;6jHBW^_MGV<5<}c64zZ!M=GVk?!M01y|G@r+W@^JD>%u}H{3DXBFa!ST4JH1 zQkdo26i~oRdU$;z0gPp8Xn17((Adc-O_|O)3rksddT_ih>ZE&&44IeG0(>nROHe+R zpkgdR)mVa>soNO$f-7%0*X*ve* z*$AsFlO%Y9Z43#*8bi|2y%CbO_QAGZe8>gyWUWjUU7i@^HHMwoKzC1n=SU3VF6&eS zs{yJ|6dyDh#%q;5{jKe&NCT%OG5bb(dXku@#|Hb=A;*f5?wgScNs-II@bo^2ErKLqp;532L1Ws*r zbv5p5iq6Khs;RnZ^@5_ao0^wZE~~QOLcpcf;s_HK0i^DylB8s67>R)@~oIjtgCGRidpOXkzZB zW~*8+p<3SB1_rEi!xmJnD~eABMLW9t_$KiH-x+maY$FaXH>&S&=_5k%lbf28a11kn zX`j^8Jojl)b^0-tKplEaB~T|IQwh{D%v1t(A~lsjot{i3P^VM1Kp&rsWBa_Vn^CF{ zVe9_fh&#`4Cd8SHgt)p+vT7^#5nv5n$4nDh>KLkvrH`B@vJ$lHv&UM4XN+CZ zPdH-g=vZfvHPokBT{xi_na1!h&odi26jxWc(<2U}_y}UEduY>E`R`2?%e8f#Dih z6A>Em9FcThFzGjCEqZj#(z(3@IwAXdQ}S6indNcjIf23~IQY@BLYIJ^p^7brd|RhT3k7t3w0a z?@`|h1}Vcjk6Sy=Z~u-i;~R}9Tc4qAZRKZZ%LjYw$(l6_6BxY24hNPAgRO(7Mfr)0 zqxB*ae0)!^r*p7%po==3g!8*|m;!Jz(9sVjoVX92*1NvHX9%v1gRu^f_HI;;p^*Vh zU518^KJv)9rC_!Vj2w-mVnI7=`CQX;wjKMOUBiBR zZ_whnH~sqK9=WyWg5273L2m82A-48hkXw6hh^;+0#MYh*s;xaY=GI;U#@3z-b8F8H z)rOOcp|YO5$PGL<#QvEJs{J!J#{QWLTKi`%hU&)M8rJq$Kf15| z>$s9Wpv^a@llIGCZ~x4-4)xmI;9R>KEC&aj6<@sr{WyJBdu#x&=b`WEw>zg)F>8-R zX4O_7wRTyoyC>R!FTf71UDDmzS{1{mLt@T;V6>{HVeOpalHxgQZHfIS))6K2pY1U$ zv0_J0jYjomLIj^{E{~K>^~zVRu5IGCOjqN})1VwB)O%wqm*YE$YcM%4hoe}fHrl!# zU+q0rBYcsxH>Lr*P3^|e;qdVSyk>LZYa7Dg+Zn_DA%*~c3#Aw$Mf>{kE_!jB)hNO4 zvIRJGV*ULB5I!~vmEqyfQanJxQIAbz?C+0uc-co@LW|(WvlHjXag#r?sE4N^{6z-9 zaEGJa)T5hvpplK#(?)C=h~OD*+S5PkT}IFLPs^qNYd1xKLYx)kgDLx`WyQeSP0`cv z_yscUpO#sFmqBxJZl?h@4~%22R|A%IQ`&bj{+<{Ao`C(+vg3fYo1(qv;Mvg;wvtP> z*5#%&bQ{v)$`@_pB*^&OOaFF!3uhk@E|YvGE_%V^HuWieyDWfk{`fJRsl;nNZ8h diff --git a/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/template.hex b/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/template.hex deleted file mode 100644 index 55b7ca1..0000000 --- a/Example/EpaperModuleTest_GD32F103/MDK-ARM/Objects/template.hex +++ /dev/null @@ -1,167 +0,0 @@ -:020000040800F2 -:100000001004002019010008950100089101000862 -:10001000930100088D010008F102000800000000B3 -:10002000000000000000000000000000D3010008F4 -:100030008F01000800000000D1010008D501000870 -:1000400033010008330100083301000833010008C0 -:1000500033010008330100083301000833010008B0 -:1000600033010008330100083301000833010008A0 -:100070003301000833010008330100083301000890 -:100080003301000833010008330100083301000880 -:100090003301000833010008330100083301000870 -:1000A0003301000833010008330100083301000860 -:1000B0003301000833010008330100083301000850 -:1000C0003301000833010008330100083301000840 -:1000D0003301000833010008330100083301000830 -:1000E000330100083301000833010008000000005C -:1000F0000000000000000000000000000000000000 -:1001000033010008DFF80CD000F02EF8004800475B -:10011000DD04000810040020064880470648004718 -:10012000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7A7 -:10013000FEE7FEE7D90100080501000830B50B46CF -:10014000014600202022012409E021FA02F59D4207 -:1001500005D303FA02F5491B04FA02F52844151EDB -:10016000A2F10102F1DC30BD064C074D06E0E0686B -:1001700040F0010394E8070098471034AC42F6D3EE -:10018000FFF7C4FF140A0008340A0008FEE77047AE -:10019000FEE7FEE7704700F01F010122800902FA26 -:1001A00001F17047835823EA0101815070470261D1 -:1001B00002691143016170478358194381507047A8 -:1001C000C260C2681143C16070471143416170470A -:1001D0007047704700F012B918B54048016841F007 -:1001E0000101016001688907FCD5416841F0800187 -:1001F00041600021009100994F2902D800990131F6 -:10020000F8E7416841F090014160002100910099B8 -:100210004F2902D800990131F8E74168304A314B43 -:1002200021F00301416001681140016041681940FB -:100230004160016811400160016821F48021016082 -:10024000294943680B40436003681A4002604FF439 -:100250001F028260026842F4803202604FF6FE7232 -:10026000531E0468934203D214F400321A46F7D0A6 -:100270000268920300D4FEE7426801F54301426040 -:1002800042684260426842F480624260426822F4FE -:1002900040324260426842F440324260426811405B -:1002A000124A4160416811434160016841F0807128 -:1002B000016001688901FCD5416821F003014160BA -:1002C000416841F00201416041680907FCD54FF0E7 -:1002D00000600021BDE8184000F08EB90010024017 -:1002E000FFFFF6FE0C00FFE8FFFF00F70000280804 -:1002F000FEE7000080B540F2026000F0D5F94FF44F -:10030000C06000F0D1F90648282103220123BDE88E -:10031000804000F08FB800BF0148012100F0D8B83C -:1003200000080140B0B540F2036000F0BDF9104C88 -:100330001021032204230425204600F07BF8656188 -:10034000B0BD00BF0148042101607047140C01409A -:1003500010B5074C0421204600F0BAF8C0F10100A6 -:100360000421C2B22046BDE8104000F05DB800BFD5 -:10037000000C0140B0B540F2026000F095F940F287 -:100380000E6000F091F9F74C182103224FF400732E -:10039000A4F54055284600F04DF8284604210322D4 -:1003A0004FF4806300F046F8204600F0E1F9204663 -:1003B0004FF4E13100F0B6F92046002100F037FAA1 -:1003C0002046002100F028FA2046002100F019FA0A -:1003D0002046002100F010FA2046002100F007FA24 -:1003E0002046042100F012FA2046082100F019FAF4 -:1003F0002046BDE8B04000F0EDB900BFC848016834 -:1004000001310160704700BFB0B5ED4D0446C1B287 -:10041000284600F0A9F92846072100F0E0F9002855 -:10042000F9D02046B0BD00BF1023002A08BF142316 -:10043000195070472DE9F04701F00F0ACC0600F182 -:10044000140C00F1100E4FF001094FF00F0848BFD7 -:100450004AEA020A00260027082F17D009FA07F2F5 -:1004600012EA03050FD00268282903D0482903D1D6 -:10047000744600E06446256008FA06F50AFA06F4B8 -:10048000AA432243026004360137E5E70826002725 -:100490004FF001094FF00F08102E08BFBDE8F0879C -:1004A00009FA06F212EA03050FD04268282903D0A0 -:1004B000482903D1744600E06446256008FA07F530 -:1004C0000AFA07F4AA432243426004370136E3E7FD -:1004D0008068084018BF01207047000000F0FEF857 -:1004E000FFF720FFFFF706FFFFF744FF1848194CFE -:1004F000A04719A0A0471EA0A04724A0A0472848B5 -:100500002C4D016827A0A8472B4E0120B04701467B -:100510002AA0A8470220B04701462CA0A8470320E4 -:10052000B04701462DA0A84730A0A04700F0F4F83E -:10053000044600F0F1F88442FBD86434FFF7ECFE87 -:1005400010B1FFF7FFFEF4E7FFF702FFF1E700BF8E -:10055000F8090008CD090008776561637473747544 -:1005600064696F2E74616F62616F2E636F6D0D0031 -:10057000776561637473747564696F2E616C696506 -:100580007870726573732E636F6D0D007777777770 -:100590002E77656163742D74632E636E0D0A0D00F2 -:1005A0000400002053797374656D436C6B3A2564C5 -:1005B0000D0A00003908000811060008434B5F418E -:1005C00048422069732025640D0A0000434B5F41B7 -:1005D0005042312069732025640D0A00434B5F416E -:1005E0005042322069732025640D0A0054656D70F5 -:1005F0006C6174650D000000034A11400843034913 -:100600000860BFF34F8F704780FFFF1F08ED00E0C9 -:1006100070B51D4A116801F00C031C49082B15D157 -:100620001368DB031A4B03D51468A40358BF0B46A9 -:1006300011681468102505EAD454C1F3834121449C -:1006400001240F2938BF0224214459431468136838 -:10065000126803280CD8C4F303140FA60D4D345DA3 -:1006600021FA04F4DFE800F00E020609214609E051 -:10067000002107E0C3F3022001E0C2F3C220285C9E -:1006800024FA00F1084670BD0410024000127A00FE -:1006900000093D00F0090008000000000000000013 -:1006A00001020304060708097346FFF774FD9E461E -:1006B000094AFFF781BD00BF7346FFF76CFD9E46F8 -:1006C000054AFFF76FBD00BF7346FFF764FD9E4606 -:1006D000014AFFF771BD00BF001002400B484FF404 -:1006E0007A710068B0FBF1F00138B0F1807F00D37F -:1006F000FEE70749F02248600648027000228A603F -:1007000007220A6050210170704700BF04000020DA -:1007100010E000E023ED00E001480068704700BFF2 -:1007200008000020B0B5044625480D4684420DD08F -:100730002448844208D02448844205D02348844277 -:1007400002D0234884420BD1022000E00320FFF7AF -:100750005FFF00EB5500B0FBF5F080B2A060B0BDCC -:100760000020F6E7003801406FF35F2141607047D9 -:1007700010B5134988420FD0124988420FD0124950 -:1007800088420FD0114988420FD01149884218BFC2 -:1007900010BD40F211440AE040F20E3407E040F28E -:1007A000124404E040F2134401E040F214442046B5 -:1007B000FFF78AFF2046BDE81040FFF77DBF00BF6E -:1007C0000038014000480040004C0040005000400C -:1007D00000440040C16841F40051C16070478A097B -:1007E00001F01F011058C84000F001007047426935 -:1007F00022F40072FFF7E9BC426922F48072FFF72D -:10080000E4BCC26822F4C062FFF7DABCC26822F01E -:1008100004021143C1607047026922F44052FFF79D -:10082000C6BCC26822F008021143C1607047C268AA -:1008300022F48052FFF7C4BC0FB4054B10B503A9D6 -:10084000044A029800F018F810BC5DF814FB000090 -:10085000090400080000002002E008C8121F08C1B7 -:10086000002AFAD170477047002001E001C1121F31 -:10087000002AFBD1704700002DE9FF4F89B09B464D -:100880000446002506E025280BD05A460B999047D0 -:10089000641C6D1C20780028F5D10DB02846BDE8F9 -:1008A000F08F0027B8460122474900E0074314F8BB -:1008B000013F203B02FA03F00842F7D120782E28AE -:1008C00019D114F8010F47F004072A280ED06FF051 -:1008D0002F022078A0F1300109290CD808EB8801FB -:1008E00002EB410100EB0108641CF2E70A98641C6A -:1008F00050F8048B0A9020780028CED0642808D0C5 -:10090000692806D075281ED05A460B9990476D1C51 -:1009100058E00A994FF00A0901C90A91002802DA41 -:1009200040422D2102E0390504D52B218DF82010FD -:10093000012103E0F90704D02021F7E78A4608AE39 -:100940000DE00021FAE70A994FF00A0901C90A915E -:10095000F7E74946FFF7F2FB303106F8011D0028A2 -:10096000F7D1ADEB060000F12009780701D44FF074 -:100970000108C84502DDA8EB090000E00020804620 -:10098000002706E008A85A46C05D0B9990476D1CE9 -:100990007F1C5745F6DB04E030205A460B99904700 -:1009A0006D1CB8F10001A8F10108F5DC05E016F8AE -:1009B000010B5A460B9990476D1CB9F10001A9F142 -:1009C0000109F4DC641C65E70928010010B5044640 -:1009D00001E0FFF719FD14F8010B04490028F8D1D4 -:1009E000BDE810400A20FFF70FBD00000000002006 -:1009F00000000000010203040D0A576541637420E2 -:100A000053747564696F20436F726520426F617221 -:100A1000640D0000380A00080000002008000000F3 -:100A200058080008400A00080800002008040000D8 -:100A300068080008000000000000000000F36F06D6 -:0400000508000105E9 -:00000001FF diff --git a/Example/EpaperModuleTest_GD32F103/Src/board.c b/Example/EpaperModuleTest_GD32F103/Src/board.c deleted file mode 100644 index e169cea..0000000 --- a/Example/EpaperModuleTest_GD32F103/Src/board.c +++ /dev/null @@ -1,90 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "board.h" - -#include - -void board_usart0_init(void) -{ - /* enable GPIO clock */ - rcu_periph_clock_enable(RCU_GPIOA); - - /* enable USART clock */ - rcu_periph_clock_enable(RCU_USART0); - - /* connect port to USARTx_Tx */ - gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); - - /* connect port to USARTx_Rx */ - gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10); - - /* USART configure */ - usart_deinit(USART0); - usart_baudrate_set(USART0, 115200U); - usart_word_length_set(USART0, USART_WL_8BIT); - usart_stop_bit_set(USART0, USART_STB_1BIT); - usart_parity_config(USART0, USART_PM_NONE); - usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE); - usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE); - usart_receive_config(USART0, USART_RECEIVE_ENABLE); - usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); - usart_enable(USART0); -} - -/* retarget the C library printf function to the USART */ -int fputc(int ch, FILE *f) -{ - usart_data_transmit(USART0, (uint8_t)ch); - while (RESET == usart_flag_get(USART0, USART_FLAG_TBE)) - ; - - return ch; -} - -void board_led_init(void) -{ - /* enable the led clock */ - rcu_periph_clock_enable(RCU_GPIOB); - /* configure led GPIO port */ - gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2); - - GPIO_BC(GPIOB) = GPIO_PIN_2; -} - -void board_led_on(void) -{ - GPIO_BOP(GPIOB) = GPIO_PIN_2; -} - -void board_led_off(void) -{ - GPIO_BC(GPIOB) = GPIO_PIN_2; -} - -void board_led_toggle(void) -{ - gpio_bit_write(GPIOB, GPIO_PIN_2, - (bit_status)(1 - gpio_input_bit_get(GPIOB, GPIO_PIN_2))); -} - -void board_button_init(void) -{ - /* enable the button clock */ - rcu_periph_clock_enable(RCU_GPIOA); - rcu_periph_clock_enable(RCU_AF); - - /* configure button pin as input */ - gpio_init(GPIOA, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, GPIO_PIN_0); -} - -uint8_t board_button_state_get(void) -{ - return gpio_input_bit_get(GPIOA, GPIO_PIN_0); -} diff --git a/Example/EpaperModuleTest_GD32F103/Src/gd32f10x_it.c b/Example/EpaperModuleTest_GD32F103/Src/gd32f10x_it.c deleted file mode 100644 index 7834a75..0000000 --- a/Example/EpaperModuleTest_GD32F103/Src/gd32f10x_it.c +++ /dev/null @@ -1,142 +0,0 @@ -/*! - \file gd32f10x_it.c - \brief interrupt service routines - - \version 2014-12-26, V1.0.0, firmware for GD32F10x - \version 2017-06-20, V2.0.0, firmware for GD32F10x - \version 2018-07-31, V2.1.0, firmware for GD32F10x - \version 2020-09-30, V2.2.0, firmware for GD32F10x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ -#include "gd32f10x_it.h" -#include "main.h" -#include "systick.h" - -/*! - \brief this function handles NMI exception - \param[in] none - \param[out] none - \retval none -*/ -void NMI_Handler(void) -{ -} - -/*! - \brief this function handles HardFault exception - \param[in] none - \param[out] none - \retval none -*/ -void HardFault_Handler(void) -{ - /* if Hard Fault exception occurs, go to infinite loop */ - while(1){ - } -} - -/*! - \brief this function handles MemManage exception - \param[in] none - \param[out] none - \retval none -*/ -void MemManage_Handler(void) -{ - /* if Memory Manage exception occurs, go to infinite loop */ - while(1){ - } -} - -/*! - \brief this function handles BusFault exception - \param[in] none - \param[out] none - \retval none -*/ -void BusFault_Handler(void) -{ - /* if Bus Fault exception occurs, go to infinite loop */ - while(1){ - } -} - -/*! - \brief this function handles UsageFault exception - \param[in] none - \param[out] none - \retval none -*/ -void UsageFault_Handler(void) -{ - /* if Usage Fault exception occurs, go to infinite loop */ - while(1){ - } -} - -/*! - \brief this function handles SVC exception - \param[in] none - \param[out] none - \retval none -*/ -void SVC_Handler(void) -{ -} - -/*! - \brief this function handles DebugMon exception - \param[in] none - \param[out] none - \retval none -*/ -void DebugMon_Handler(void) -{ -} - -/*! - \brief this function handles PendSV exception - \param[in] none - \param[out] none - \retval none -*/ -void PendSV_Handler(void) -{ -} - -/*! - \brief this function handles SysTick exception - \param[in] none - \param[out] none - \retval none -*/ -void SysTick_Handler(void) -{ - delay_decrement(); -} diff --git a/Example/EpaperModuleTest_GD32F103/Src/main.c b/Example/EpaperModuleTest_GD32F103/Src/main.c deleted file mode 100644 index b41e445..0000000 --- a/Example/EpaperModuleTest_GD32F103/Src/main.c +++ /dev/null @@ -1,218 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "gd32f10x.h" -#include "systick.h" -#include -#include "main.h" - -#include "board.h" - -#include "epaper.h" -#include "bmp.h" - -// define for White Black Red Epaper Module -//#define EPD_BWR - -uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; -#ifdef EPD_BWR -uint8_t image_red[EPD_W_BUFF_SIZE * EPD_H]; -#endif - -int main(void) -{ - uint8_t text[20]; - uint32_t tick; - - /* configure systick */ - systick_config(); - - gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE); - - /* initilize the LEDs, USART and key */ - board_led_init(); - board_button_init(); - board_usart0_init(); - - printf("\r\nWeAct Studio Core Board\r\n"); - printf("weactstudio.taobao.com\r\n"); - printf("weactstudio.aliexpress.com\r\n"); - printf("wwww.weact-tc.cn\r\n\r\n"); - printf("SystemClk:%d\r\n", SystemCoreClock); - printf("CK_AHB is %d\r\n", rcu_clock_freq_get(CK_AHB)); - printf("CK_APB1 is %d\r\n", rcu_clock_freq_get(CK_APB1)); - printf("CK_APB2 is %d\r\n", rcu_clock_freq_get(CK_APB2)); - - printf("Epaper Module Test\r\n"); - - epd_io_init(); - - epd_init(); - -#ifdef EPD_BWR - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - #else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #endif - - epd_display(image_bw, image_red); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(8000); - - epd_init(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); - -#if 0 - epd_paint_showString(10,100,(uint8_t *)&"GD32F103CBT6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_RED); -#else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_RED, 1); -#endif - - epd_display(image_bw, image_red); - -#else - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); -#else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - - #ifdef EPD_154 - epd_paint_clear(EPD_COLOR_WHITE); - epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); - #else - epd_paint_clear(EPD_COLOR_WHITE); - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); -#endif - #endif - - epd_displayBW(image_bw); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(5000); - - epd_init_partial(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_154 - epd_paint_showString(10, 0, (uint8_t *)&"1.54 Inch", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 23, (uint8_t *)&"Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 48, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showString(10, 60, (uint8_t *)&"with 200 x 200 resolution", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showPicture((EPD_H - 200) / 2,130,200,64,gImage_5,EPD_COLOR_WHITE); -#endif -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"GD32F103CBT6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); -#else - epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); -#endif - - sprintf((char *)&text, ">> Partial Mode"); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(1000); - - for (uint32_t i = 123; i < 8 * 123; i += 123) - { - sprintf((char *)&text, ">> Num=%d ", i); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(100); - } - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_displayBW_partial(image_bw); - - delay(1000); - - epd_update(); -#endif - - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - tick = systick_get_tick(); - while (1) - { - if (tick <= systick_get_tick()) - { - tick += 100; - if (!board_button_state_get()) - { - board_led_toggle(); - } - else - { - board_led_off(); - } - } - } -} diff --git a/Example/EpaperModuleTest_GD32F103/Src/systick.c b/Example/EpaperModuleTest_GD32F103/Src/systick.c deleted file mode 100644 index 001777a..0000000 --- a/Example/EpaperModuleTest_GD32F103/Src/systick.c +++ /dev/null @@ -1,120 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "gd32f10x.h" -#include "systick.h" - -volatile uint32_t _tick = 0; - -/*! - \brief configure systick - \param[in] none - \param[out] none - \retval none -*/ -void systick_config(void) -{ - /* setup systick timer for (SysTick_Freq) Hz interrupts */ - if (SysTick_Config(SystemCoreClock / SysTick_Freq)) - { - /* capture error */ - while (1) - { - } - } - /* configure the systick handler priority */ - NVIC_SetPriority(SysTick_IRQn, 0x05U); -} - -/*! - \brief delay a time in milliseconds - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay(uint32_t count) -{ - uint32_t utick; - utick = count + systick_get_tick(); - - while (systick_get_tick() < utick) - { - } -} - -/*! - \brief delay a time in milliseconds with low power - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay_lp(uint32_t count) -{ - uint32_t utick; - utick = count + systick_get_tick(); - - while (systick_get_tick() < utick) - { - pmu_to_sleepmode(WFI_CMD); - } -} - -/*! - \brief delay decrement - \param[in] none - \param[out] none - \retval none -*/ -void delay_decrement(void) -{ - _tick++; -} - -/*! - \brief get systick tick - \param[in] none - \param[out] none - \retval none -*/ - -uint32_t systick_get_tick(void) -{ - return _tick; -} - -void systick_DisableIRQ(void) -{ - /* Disable SysTick Interrupt */ - SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; -} - -void systick_EnableIRQ(void) -{ - /* Enable SysTick Interrupt */ - SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; -} - -void systick_Disable(void) -{ - /* Disable SysTick */ - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; -} - -void systick_Enable(void) -{ - /* Enable SysTick */ - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; -} - -void systick_deinit(void) -{ - SysTick->CTRL = 0; - SysTick->LOAD = 0; - SysTick->VAL = 0; -} diff --git a/Example/EpaperModuleTest_GD32F303/Epaper/bmp.h b/Example/EpaperModuleTest_GD32F303/Epaper/bmp.h deleted file mode 100644 index bd22f80..0000000 --- a/Example/EpaperModuleTest_GD32F303/Epaper/bmp.h +++ /dev/null @@ -1,638 +0,0 @@ -#ifndef __BMP_H -#define __BMP_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -////////////////array///////////////////////////////////////////////////////////////////////////////////// -const unsigned char gImage_1[4000] = { /* 0X01,0X01,0XFA,0X00,0X7A,0X00, */ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x0E,0x07,0x07, -0x07,0xDF,0xFE,0xFE,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x3C,0x1E,0xFE, -0xFE,0xFE,0x00,0x00,0x00,0x0C,0x0E,0x0F,0x07,0x07,0x87,0xFF,0xFE,0xFC,0x00,0x00, -0x18,0x1F,0x1F,0x0F,0x00,0x00,0x18,0x1F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0xF0, -0xF0,0xF0,0x70,0x30,0x30,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x60,0x70,0x70,0x30,0x30, -0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xF0, -0xE0,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x70,0x30,0x70,0xF0,0xF0,0xE0,0x80,0x00,0x00, -0xF0,0xF0,0xF0,0xF0,0x70,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, -0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00, -0x80,0xE0,0xF0,0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0xC0,0xE0,0xF0, -0x70,0x30,0x70,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00, -0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0x70,0x30,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0x3E,0x1F,0x0F,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0x80,0x02,0x03,0x03,0x07,0xCF,0xFF,0xFC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0x00,0xE0,0xF8,0xFC,0xBC,0x0C,0x0C,0x8C,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0xC1,0xFF,0xFF,0x7F,0x00,0x1C,0xFF,0xFF, -0xFF,0x0C,0x0C,0x0C,0x0C,0x8F,0x8F,0x0F,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x0F,0xFF,0xFF, -0xFE,0xFF,0x1F,0x01,0x7F,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x80,0x00,0x00, -0x00,0xE3,0xFF,0xFF,0x3E,0x00,0x1C,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x80,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xCD,0x0C,0x0C,0x0C,0x0D,0x8F, -0x8F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x06,0x07,0x07, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x03, -0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x06,0x00,0x00,0x00,0xFF,0xFF,0x07,0x07, -0x06,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07, -0x03,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x07, -0x07,0x07,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00, -0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x03, -0x07,0x07,0x06,0x07,0x03,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x07,0x07,0x06,0x06, -0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00, -0xF8,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x7F,0x03, -0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFF,0xFF,0x7F,0xFF,0xFE,0xE0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0, -0xC0,0xC0,0xC0,0x80,0x00,0x00,0xC0,0xC0,0xC0,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFE, -0xFF,0x0F,0x07,0x07,0x07,0x07,0x07,0x0F,0x1F,0x1E,0x0C,0x00,0x00,0x00,0xC0,0xC0, -0xFE,0xFE,0xFE,0xFE,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0, -0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0x00,0x00,0xC3,0xC3,0xC3,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80, -0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0xC0,0xFE,0xFF,0x7F,0x03,0x03,0x7F,0xFF, -0xFE,0xC0,0x00,0x00,0xF8,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF, -0x8F,0x83,0x81,0x81,0x81,0x81,0x87,0xBF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00, -0xC0,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x07,0x3F,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00, -0x00,0x00,0xF8,0xFE,0xFF,0x3F,0x07,0x03,0x01,0x01,0x01,0x03,0x03,0x03,0x01,0x00, -0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3E,0x3C,0x78,0x78,0x78, -0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01, -0x01,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x1F,0x07,0x03,0x01, -0x01,0x01,0x03,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0x1F,0x07,0x03,0x01,0x01,0x01,0x03, -0x07,0xFF,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF, -0xFF,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF8,0xFE,0xFF,0xFF, -0x07,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xC3,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x83,0x03,0x03,0x00,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0x0F,0x0E,0x0E,0x0E, -0x0E,0x0E,0x0E,0x0F,0x3F,0xFF,0xFF,0xF0,0x80,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF0, -0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x7E, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x80,0xC0,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x7F,0xFF,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0xFE,0xFF,0xFF,0x3F,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x07,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x00,0x00, -0x00,0x0E,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, -0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0F, -0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x0F,0x06, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x04,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0E, -0x0E,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07, -0x07,0x0F,0x0F,0x0E,0x0E,0x0F,0x07,0x07,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00, -0x00,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F, -0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0xC0, -0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0, -0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x80,0x00,0x00, -0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x80, -0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0E,0x0F, -0x07,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0xC1,0xFF,0xFF,0x7F, -0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x04,0x1C,0x7C,0xFC,0xF0,0xC0,0xF0,0xFC,0x7C,0x1C,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x01,0x81,0xF7,0xFF,0xFF,0x1C,0x00,0x00,0xFF, -0xFF,0xFF,0x61,0x61,0xE1,0xE1,0xC1,0x80,0x00,0x00,0xFC,0xFF,0xFF,0x07,0x01,0x01, -0x03,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x7F,0xFC,0xF0,0xC0,0x00,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0xFF,0xFF,0xFF,0xF0,0xF8,0xFE,0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xE0,0xF0,0xF8,0xFE,0xDF,0xCF,0xC3,0xC1,0xC0,0x00,0xC0,0xE0,0xF8,0xFC,0xFE, -0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x7F, -0x1F,0x0F,0x3F,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF8, -0xFC,0xFE,0xCF,0xC7,0xC3,0xC0,0xC0,0x00,0xE0,0xE0,0xE0,0xC0,0x80,0xC0,0xE0,0xFF, -0xFF,0x3F,0x00,0x00,0x1F,0x7F,0xFF,0xF0,0xC0,0xC0,0xE0,0xFF,0xFF,0x3F,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0, -0xC0,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0, -0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0x00,0x03,0x0F,0x7F,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03, -0x07,0x1F,0x3F,0xFC,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, -0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01, -0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; -const unsigned char gImage_2[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_3[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x1F,0x1F,0x0F,0x0F,0x9F,0xFF,0xFF,0xFE,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x78,0x7C,0x7E,0x3E,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x04,0x0E,0x1E,0x1F,0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x73,0x7F,0x3F,0x1F,0x0F,0x00,0x00,0x31,0x7B,0x7F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x07,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x30,0xF0,0xF0,0xF0,0x78,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0xF8,0x78,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xC0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF0,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0x70,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFE,0xFF,0xBF,0x9F,0x87,0x83,0x80,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0xC0,0xC0,0xC0,0xC7,0x87,0x87,0xCF,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x80,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x40,0xF8,0xFC,0xFC,0xFE,0xFE,0x9E,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9D,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE1,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x1C,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9C,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF0,0xF8,0xFC,0x7C,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x18,0x3C,0x3E,0x3E,0x1E,0x1E,0x3E,0xFE,0xFE,0xFC,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3E,0x3E,0x1E,0x1E,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x9E,0x9E,0x9E,0x9E,0x1E,0x1E,0x00,0x00,0xE0,0xF8,0xFC,0xFE,0xFE,0x7E,0x1E,0x3E,0xFE,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xE0,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xC0,0xE0,0xF8,0xFC,0xFE,0xFE,0x3E,0x1E,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xFC,0xFF,0x7F,0x3F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x87,0x87,0x87,0x87,0x07,0x07,0x8F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x7F,0xFF,0xFF,0xFF,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0F,0x0F,0x0F,0x0F,0x0F,0x01,0x01,0x07,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x01,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x01,0x03,0x0F,0x0F,0x0F,0x0F,0x0F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_4[4000]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00, -0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE, -0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00, -0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80, -0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0, -0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30, -0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80, -0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, -0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF, -0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, -0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF, -0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF, -0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0, -0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F, -0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC, -0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF, -0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x01,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x1E,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x9F,0x9F,0x1F,0x1F,0x1F, -0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFD,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80, -0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0xC0,0xC0,0x80,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F, -0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,0x1F,0x1F,0x0E,0x00,0x30,0x3E,0x3F,0x3F,0x3F,0x3F, -0x3F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3C,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F, -0x1F,0x1E,0x08,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F, -0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x3F, -0x3F,0x3F,0x3F,0x3E,0x3E,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00, -0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x3F,0x3F,0x1C,0x00,0x00, -0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3F,0x1F, -0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F, -0x3F,0x3F,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3E,0x3E, -0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; - -const unsigned char gImage_5[1600]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00, -0x00,0x80,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0, -0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF0, -0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, -0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFE, -0xE0,0x00,0x00,0x80,0xFC,0xFF,0xFF,0xFF,0x3F,0x01,0x00,0xC0,0xF0,0xF8,0xF8,0xFC, -0x7C,0x3C,0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x80,0xF0,0xFE, -0xFF,0xFF,0x3F,0x07,0x3F,0xFF,0xFF,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0xC0,0xE0, -0xF0,0xF8,0xF8,0xFC,0x7C,0x3C,0x3C,0x7C,0x7C,0x7C,0x78,0x38,0x78,0x7C,0xFF,0xFF, -0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F, -0xFF,0xFF,0xFF,0xFF,0xF1,0xE1,0xC0,0xC0,0xC1,0x81,0x83,0x03,0x03,0x01,0x00,0x78, -0x78,0xFC,0xFF,0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0xFC,0xFC,0xFC,0xFC, -0xFC,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,0xC0,0xF0, -0xF8,0xF8,0xFC,0xFC,0x7C,0x3C,0x3C,0x7C,0x78,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xF8,0xFC,0x7C,0x3C, -0x3C,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFE,0xF0,0xFF, -0xFF,0xFF,0x1F,0x01,0x00,0x07,0x7F,0xFF,0xFF,0xFE,0xE0,0xFF,0xFF,0xFF,0xFF,0x07, -0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x9E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F, -0x1F,0x1F,0x00,0xE0,0xFC,0xFF,0xFF,0xFF,0x3F,0x3D,0x3C,0x3C,0x3C,0x3F,0x3F,0xFF, -0xFF,0xFF,0xFC,0xE0,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC1,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x81,0x01,0x03,0x03,0x07,0x07,0x0F, -0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, -0xFF,0xFF,0xFF,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xC3,0x00,0x00,0x00,0x00,0x00, -0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, -0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x07, -0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x1F, -0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0E,0x18,0x1F,0x1F,0x1F,0x1F,0x07,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x18,0x03,0x07, -0x0F,0x0F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0E,0x00,0x00,0x03,0x0F, -0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x18,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x0F, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x0F,0x0F,0x07,0x01,0x00, -0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1C,0x00,0x03,0x0F,0x1F,0x1F, -0x1F,0x1F,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07, -0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x00,0x00, -0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x1F,0x1F,0x1E, -0x1E,0x1E,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_GD32F303/Epaper/epaper.c b/Example/EpaperModuleTest_GD32F303/Epaper/epaper.c deleted file mode 100644 index e8a1780..0000000 --- a/Example/EpaperModuleTest_GD32F303/Epaper/epaper.c +++ /dev/null @@ -1,912 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "epaper.h" -#include "epdfont.h" - -#include "systick.h" - -// epaper module -// res pin -> pa8 -// busy pin -> pa15 -// d/c pin -> pb14 -// cs pin -> pb12 -// sck pin -> pb13 -// mosi pin -> pb15 - -EPD_PAINT EPD_Paint; - -static uint8_t _hibernating = 1; - -static const unsigned char lut_partial[] = -{ - 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x40, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, -}; - -void epd_delay(uint16_t ms) -{ - delay(ms); -} - -void epd_res_set() -{ - gpio_bit_write(GPIOA, GPIO_PIN_8, SET); -} - -void epd_res_reset() -{ - gpio_bit_write(GPIOA, GPIO_PIN_8, RESET); -} - -void epd_dc_set() -{ - gpio_bit_write(GPIOB, GPIO_PIN_14, SET); -} - -void epd_dc_reset() -{ - gpio_bit_write(GPIOB, GPIO_PIN_14, RESET); -} - -void epd_cs_set() -{ - gpio_bit_write(GPIOB, GPIO_PIN_12, SET); -} - -void epd_cs_reset() -{ - gpio_bit_write(GPIOB, GPIO_PIN_12, RESET); -} - -uint8_t epd_is_busy() -{ - return gpio_input_bit_get(GPIOA, GPIO_PIN_15) == RESET ? 0 : 1; -} - -void epd_io_init(void) -{ - rcu_periph_clock_enable(RCU_GPIOA); - rcu_periph_clock_enable(RCU_GPIOB); - rcu_periph_clock_enable(RCU_AF); - - spi_parameter_struct spi_init_struct; - - /* configure the epaper module res pin */ - gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8); - - /* configure the epaper module busy pin */ - gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_15); - - /* configure the epaper module d/c pin */ - gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14); - - /* configure the epaper module SPI1 sck mosi pin */ - gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_15); - - /* configure the epaper module cs pin */ - gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12); - - /* configure SPI1 */ - rcu_periph_clock_enable(RCU_SPI1); - - /* deinitilize SPI and the parameters */ - spi_i2s_deinit(SPI1); - spi_struct_para_init(&spi_init_struct); - - spi_init_struct.trans_mode = SPI_TRANSMODE_BDTRANSMIT; - spi_init_struct.device_mode = SPI_MASTER; - spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT; - spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE; - spi_init_struct.nss = SPI_NSS_SOFT; - spi_init_struct.prescale = SPI_PSC_16; - spi_init_struct.endian = SPI_ENDIAN_MSB; - spi_init(SPI1, &spi_init_struct); - - spi_enable(SPI1); -} - -void epd_write_reg(uint8_t reg) -{ - epd_dc_reset(); - epd_cs_reset(); - - spi_i2s_data_transmit(SPI1, reg); - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TBE) == RESET) - ; - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TRANS) != RESET) - ; - - epd_cs_set(); - epd_dc_set(); -} - -void epd_write_data(uint8_t data) -{ - epd_cs_reset(); - - spi_i2s_data_transmit(SPI1, data); - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TBE) == RESET) - ; - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TRANS) != RESET) - ; - - epd_cs_set(); -} - -void _epd_write_data(uint8_t data) -{ - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TBE) == RESET) - ; - spi_i2s_data_transmit(SPI1, data); -} - -void _epd_write_data_over() -{ - while (spi_i2s_flag_get(SPI1, SPI_FLAG_TRANS) != RESET) - ; -} - -uint8_t epd_wait_busy() -{ - uint32_t timeout = 0; - while (epd_is_busy()) - { - timeout++; - if (timeout > 40000) - { - return 1; - } - epd_delay(1); - } - return 0; -} - -void epd_reset(void) -{ - epd_res_reset(); - epd_delay(50); - epd_res_set(); - epd_delay(50); - _hibernating = 0; -} - -uint8_t epd_init(void) -{ - if (_hibernating) - epd_reset(); - - if (epd_wait_busy()) - return 1; - - epd_write_reg(0x12); // SWRESET - - epd_delay(10); - - if (epd_wait_busy()) - return 1; - - #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) - epd_write_reg(0x01); // Driver output control -#if defined(EPD_29) || defined(EPD_213) - epd_write_data(0x27); - epd_write_data(0x01); - epd_write_data(0x01); -#else - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x01); - #endif - - epd_write_reg(0x11); // data entry mode - epd_write_data(0x01); - -#ifdef EPD_154 - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x18); - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x00); - epd_write_data(0x00); - #else - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x0F); // 0x0F-->(15+1)*8=128 - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0x27); // 0x127-->(295+1)=296 - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_data(0x00); -#endif - - epd_write_reg(0x3C); // BorderWavefrom - epd_write_data(0x05); - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x21); // Display update control - epd_write_data(0x00); - epd_write_data(0x80); - #endif - - #elif defined(EPD_42) - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x40); - epd_write_data(0x00); - epd_write_reg(0x01); // Set MUX as 300 - epd_write_data(0x2B); - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x01); - epd_write_reg(0x11); // data entry mode - epd_write_data(0x03); // X-mode - epd_address_set(0,0,EPD_W-1,EPD_H-1); -#endif - - epd_write_reg(0x18); // Read built-in temperature sensor - epd_write_data(0x80); - - epd_setpos(0,0); - - if (epd_power_on()) - return 1; - - return 0; -} - -uint8_t epd_init_partial(void) -{ - if (epd_init()) - return 1; - -#if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x32); - epd_cs_reset(); - for (int j = 0; j < sizeof(lut_partial); j++) - { - _epd_write_data(lut_partial[j]); - } - _epd_write_data_over(); - epd_cs_set(); - #elif defined(EPD_42) - epd_write_reg(0x3C); //BorderWavefrom - epd_write_data(0x80); - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application -#endif - - return 0; -} - -void epd_enter_deepsleepmode(uint8_t mode) -{ -epd_power_off(); - epd_write_reg(0x10); - epd_write_data(mode); - _hibernating = 1; -} - -uint8_t epd_power_on(void) -{ - #if defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xe0); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xf8); - #endif - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -uint8_t epd_power_off(void) -{ - epd_write_reg(0x22); // Display Update Control - epd_write_data(0x83); - epd_write_reg(0x20); // Activate Display Update Sequence - - return epd_wait_busy(); -} - -void epd_init_internalTempSensor(void) -{ - epd_write_reg(0x18); - epd_write_data(0x80); - - epd_write_reg(0x1A); - epd_write_data(0x7F); -// epd_write_data(0xF0); -} - -void epd_update(void) -{ - - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF4); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xF7); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_update_partial(void) -{ - #ifdef EPD_154 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFC); - #elif defined EPD_42 - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xFF); - #else - epd_write_reg(0x22); // Display Update Control - epd_write_data(0xCC); -#endif - epd_write_reg(0x20); // Activate Display Update Sequence - - epd_wait_busy(); -} - -void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) -{ - epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION - epd_write_data((x_start>>3) & 0xFF); - epd_write_data((x_end>>3) & 0xFF); - - epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION - epd_write_data(y_start & 0xFF); - epd_write_data((y_start >> 8) & 0xFF); - epd_write_data(y_end & 0xFF); - epd_write_data((y_end >> 8) & 0xFF); -} - -void epd_setpos(uint16_t x, uint16_t y) -{ - uint8_t _x; - uint16_t _y; - - _x = x / 8; - -#ifdef EPD_154 - _y = 199 - y; - #elif defined(EPD_29) || defined(EPD_213) - _y = 295 - y; - #elif defined(EPD_42) - _y = y; -#endif - - epd_write_reg(0x4E); // set RAM x address count to 0; - epd_write_data(_x); - epd_write_reg(0x4F); // set RAM y address count to 0x127; - epd_write_data(_y & 0xff); - epd_write_data(_y >> 8 & 0x01); -} - -void epd_writedata(uint8_t *Image1, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(Image1[j]); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_writedata2(uint8_t data, uint32_t length) -{ - epd_cs_reset(); - for (uint32_t j = 0; j < length; j++) - { - _epd_write_data(data); - } - _epd_write_data_over(); - epd_cs_set(); -} - -void epd_display(uint8_t *Image1, uint8_t *Image2) -{ - uint32_t Width, Height, i, j; - uint32_t k = 0; - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x24); - epd_writedata(Image1, Width * Height); - - epd_setpos(0, 0); - - epd_write_reg(0x26); - k = 0; - epd_cs_reset(); - for (j = 0; j < Height; j++) - { - for (i = 0; i < Width; i++) - { - _epd_write_data(~Image2[k]); - k++; - } - } - _epd_write_data_over(); - epd_cs_set(); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - - epd_update(); -} - -void epd_displayBW(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update(); -} - -void epd_displayBW_partial(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - epd_write_reg(0x24); - epd_writedata(Image, Width * Height); - - epd_update_partial(); - - epd_setpos(0, 0); - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); -} - -void epd_displayRED(uint8_t *Image) -{ - uint32_t Width, Height; - - Width = EPD_H; - Height = EPD_W_BUFF_SIZE; - - epd_setpos(0, 0); - - epd_write_reg(0x26); - epd_writedata(Image, Width * Height); - - #if defined EPD_42 - epd_write_reg(0x21); // Display Update Controll - epd_write_data(0x00); // RED normal - epd_write_data(0x00); // single chip application - #endif - epd_update(); -} - -void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color) -{ - EPD_Paint.Image = 0x00; - EPD_Paint.Image = image; - - EPD_Paint.WidthMemory = Width; - EPD_Paint.HeightMemory = Height; - EPD_Paint.Color = Color; - EPD_Paint.WidthByte = (Width % 8 == 0) ? (Width / 8) : (Width / 8 + 1); - EPD_Paint.HeightByte = Height; - EPD_Paint.Rotate = Rotate; - if (Rotate == EPD_ROTATE_0 || Rotate == EPD_ROTATE_180) - { - - EPD_Paint.Width = Height; - EPD_Paint.Height = Width; - } - else - { - EPD_Paint.Width = Width; - EPD_Paint.Height = Height; - } -} - -void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - uint16_t X, Y; - uint32_t Addr; - uint8_t Rdata; - switch (EPD_Paint.Rotate) - { - case 0: - - X = EPD_Paint.WidthMemory - Ypoint - 1; - Y = Xpoint; - break; - case 90: - X = EPD_Paint.WidthMemory - Xpoint - 1; - Y = EPD_Paint.HeightMemory - Ypoint - 1; - break; - case 180: - X = Ypoint; - Y = EPD_Paint.HeightMemory - Xpoint - 1; - break; - case 270: - X = Xpoint; - Y = Ypoint; - break; - default: - return; - } - Addr = X / 8 + Y * EPD_Paint.WidthByte; - Rdata = EPD_Paint.Image[Addr]; - if (Color == EPD_COLOR_BLACK) - { - EPD_Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8)); - } - else - EPD_Paint.Image[Addr] = Rdata | (0x80 >> (X % 8)); -} - -void epd_paint_clear(uint16_t color) -{ - uint16_t X, Y; - uint32_t Addr; - - for (Y = 0; Y < EPD_Paint.HeightByte; Y++) - { - for (X = 0; X < EPD_Paint.WidthByte; X++) - { // 8 pixel = 1 byte - Addr = X + Y * EPD_Paint.WidthByte; - EPD_Paint.Image[Addr] = color; - } - } -} - -void epd_paint_selectimage(uint8_t *image) -{ - EPD_Paint.Image = image; -} - -void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) -{ - epd_paint_setpixel(Xpoint - 1, Ypoint - 1, Color); -} - -void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color) -{ - uint16_t Xpoint, Ypoint; - int32_t dx, dy; - int32_t XAddway, YAddway; - int32_t Esp; - char Dotted_Len; - Xpoint = Xstart; - Ypoint = Ystart; - dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend; - dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend; - - XAddway = Xstart < Xend ? 1 : -1; - YAddway = Ystart < Yend ? 1 : -1; - - Esp = dx + dy; - Dotted_Len = 0; - - for (;;) - { - Dotted_Len++; - epd_paint_drawPoint(Xpoint, Ypoint, Color); - if (2 * Esp >= dy) - { - if (Xpoint == Xend) - break; - Esp += dy; - Xpoint += XAddway; - } - if (2 * Esp <= dx) - { - if (Ypoint == Yend) - break; - Esp += dx; - Ypoint += YAddway; - } - } -} - -void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode) -{ - uint16_t i; - if (mode) - { - for (i = Ystart; i < Yend; i++) - { - epd_paint_drawLine(Xstart, i, Xend, i, Color); - } - } - else - { - epd_paint_drawLine(Xstart, Ystart, Xend, Ystart, Color); - epd_paint_drawLine(Xstart, Ystart, Xstart, Yend, Color); - epd_paint_drawLine(Xend, Yend, Xend, Ystart, Color); - epd_paint_drawLine(Xend, Yend, Xstart, Yend, Color); - } -} - -void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode) -{ - uint16_t Esp, sCountY; - uint16_t XCurrent, YCurrent; - XCurrent = 0; - YCurrent = Radius; - Esp = 3 - (Radius << 1); - if (mode) - { - while (XCurrent <= YCurrent) - { // Realistic circles - for (sCountY = XCurrent; sCountY <= YCurrent; sCountY++) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + sCountY, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + sCountY, Color); // 2 - epd_paint_drawPoint(X_Center - sCountY, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - sCountY, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - sCountY, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - sCountY, Color); // 6 - epd_paint_drawPoint(X_Center + sCountY, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + sCountY, Y_Center + XCurrent, Color); - } - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } - else - { // Draw a hollow circle - while (XCurrent <= YCurrent) - { - epd_paint_drawPoint(X_Center + XCurrent, Y_Center + YCurrent, Color); // 1 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center + YCurrent, Color); // 2 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center + XCurrent, Color); // 3 - epd_paint_drawPoint(X_Center - YCurrent, Y_Center - XCurrent, Color); // 4 - epd_paint_drawPoint(X_Center - XCurrent, Y_Center - YCurrent, Color); // 5 - epd_paint_drawPoint(X_Center + XCurrent, Y_Center - YCurrent, Color); // 6 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center - XCurrent, Color); // 7 - epd_paint_drawPoint(X_Center + YCurrent, Y_Center + XCurrent, Color); // 0 - if ((int)Esp < 0) - Esp += 4 * XCurrent + 6; - else - { - Esp += 10 + 4 * (XCurrent - YCurrent); - YCurrent--; - } - XCurrent++; - } - } -} - -void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color) -{ - uint16_t i, m, temp, size2, chr1; - uint16_t x0, y0; - x += 1, y += 1, x0 = x, y0 = y; - if (x - size1 > EPD_H) - return; - if (size1 == 8) - size2 = 6; - else - size2 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * (size1 / 2); - chr1 = chr - ' '; - for (i = 0; i < size2; i++) - { - if (size1 == 8) - { - temp = asc2_0806[chr1][i]; - } // 0806 - else if (size1 == 12) - { - temp = asc2_1206[chr1][i]; - } // 1206 - else if (size1 == 16) - { - temp = asc2_1608[chr1][i]; - } // 1608 - else if (size1 == 24) - { - temp = asc2_2412[chr1][i]; - } // 2412 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((size1 != 8) && ((x - x0) == size1 / 2)) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color) -{ - while (*chr != '\0') - { - epd_paint_showChar(x, y, *chr, size1, color); - chr++; - if (size1 == 8) - { - x += 6; - if(x > EPD_H-6) - break; - } - else - { - x += size1 / 2; - if(x > EPD_H-size1 / 2) - break; - } - } -} - -// m^n -static uint32_t _Pow(uint16_t m, uint16_t n) -{ - uint32_t result = 1; - while (n--) - { - result *= m; - } - return result; -} - -void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color) -{ - uint8_t t, temp, m = 0; - if (size1 == 8) - m = 2; - for (t = 0; t < len; t++) - { - temp = (num / _Pow(10, len - t - 1)) % 10; - if (temp == 0) - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, '0', size1, color); - } - else - { - epd_paint_showChar(x + (size1 / 2 + m) * t, y, temp + '0', size1, color); - } - } -} - -void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color) -{ - uint16_t m, temp; - uint16_t x0, y0; - uint16_t i, size3 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * size1; - x += 1, y += 1, x0 = x, y0 = y; - for (i = 0; i < size3; i++) - { - if (size1 == 16) - { - temp = Hzk1[num][i]; - } // 16*16 - else if (size1 == 24) - { - temp = Hzk2[num][i]; - } // 24*24 - else if (size1 == 32) - { - temp = Hzk3[num][i]; - } // 32*32 - else if (size1 == 64) - { - temp = Hzk4[num][i]; - } // 64*64 - else - return; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, color); - else - epd_paint_drawPoint(x, y, !color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == size1) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } -} - -void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color) -{ - uint16_t j = 0; - uint16_t i, n = 0, temp = 0, m = 0; - uint16_t x0 = 0, y0 = 0; - x += 1, y += 1, x0 = x, y0 = y; - sizey = sizey / 8 + ((sizey % 8) ? 1 : 0); - for (n = 0; n < sizey; n++) - { - for (i = 0; i < sizex; i++) - { - temp = BMP[j]; - j++; - for (m = 0; m < 8; m++) - { - if (temp & 0x01) - epd_paint_drawPoint(x, y, !Color); - else - epd_paint_drawPoint(x, y, Color); - temp >>= 1; - y++; - } - x++; - if ((x - x0) == sizex) - { - x = x0; - y0 = y0 + 8; - } - y = y0; - } - } -} diff --git a/Example/EpaperModuleTest_GD32F303/Epaper/epaper.h b/Example/EpaperModuleTest_GD32F303/Epaper/epaper.h deleted file mode 100644 index c8df27e..0000000 --- a/Example/EpaperModuleTest_GD32F303/Epaper/epaper.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef __EPAPER_H -#define __EPAPER_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "gd32f30x.h" - -//#define EPD_42 -//#define EPD_29 -//#define EPD_213 -//#define EPD_154 - -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) -#error EPD Type Undefine -#endif - -#ifdef EPD_29 -#define EPD_W 128 -#define EPD_H 296 -#endif - -#ifdef EPD_213 -#define EPD_W 122 -#define EPD_H 250 -#endif - -#ifdef EPD_154 -#define EPD_W 200 -#define EPD_H 200 -#endif - -#ifdef EPD_42 -#define EPD_W 400 -#define EPD_H 300 -#endif - -#define EPD_OK 0 -#define EPD_ERROR 1 - -#define EPD_ROTATE_0 0 -#define EPD_ROTATE_90 90 -#define EPD_ROTATE_180 180 -#define EPD_ROTATE_270 270 - -#define EPD_COLOR_WHITE 0xFF -#define EPD_COLOR_BLACK 0x00 -#define EPD_COLOR_RED EPD_COLOR_BLACK - -#define EPD_FONT_SIZE8x6 (8) -#define EPD_FONT_SIZE12x6 (12) -#define EPD_FONT_SIZE16x8 (16) -#define EPD_FONT_SIZE24x12 (24) - -#define EPD_DEEPSLEEP_MODE1 (0x01) -#define EPD_DEEPSLEEP_MODE2 (0x03) - -#define EPD_W_BUFF_SIZE ((EPD_W % 8 == 0) ? (EPD_W / 8) : (EPD_W / 8 + 1)) - typedef struct - { - uint8_t *Image; - uint16_t Width; - uint16_t Height; - uint16_t WidthMemory; - uint16_t HeightMemory; - uint16_t Color; - uint16_t Rotate; - uint16_t WidthByte; - uint16_t HeightByte; - } EPD_PAINT; - extern EPD_PAINT EPD_Paint; - - void epd_io_init(void); - uint8_t epd_init(void); - uint8_t epd_init_partial(void); - void epd_enter_deepsleepmode(uint8_t mode); - uint8_t epd_power_on(void); - uint8_t epd_power_off(void); - void epd_init_internalTempSensor(void); - void epd_update(void); - void epd_update_partial(void); - void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); - void epd_setpos(uint16_t x, uint16_t y); - void epd_display(uint8_t *Image1, uint8_t *Image2); - void epd_displayBW(uint8_t *Image); - void epd_displayBW_partial(uint8_t *Image); - void epd_displayRED(uint8_t *Image); - - void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color); - void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_selectimage(uint8_t *image); - void epd_paint_clear(uint16_t color); - void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); - void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color); - void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode); - void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode); - void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color); - void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color); - void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color); - void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color); - void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_GD32F303/Epaper/epdfont.h b/Example/EpaperModuleTest_GD32F303/Epaper/epdfont.h deleted file mode 100644 index 3d4913b..0000000 --- a/Example/EpaperModuleTest_GD32F303/Epaper/epdfont.h +++ /dev/null @@ -1,429 +0,0 @@ -#ifndef __EPDFONT_H -#define __EPDFONT_H - -#ifdef __cplusplus -extern "C" { -#endif - -const unsigned char asc2_0806[][6] = -{ -{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// sp -{0x00, 0x00, 0x00, 0x2f, 0x00, 0x00},// ! -{0x00, 0x00, 0x07, 0x00, 0x07, 0x00},// " -{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14},// # -{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12},// $ -{0x00, 0x62, 0x64, 0x08, 0x13, 0x23},// % -{0x00, 0x36, 0x49, 0x55, 0x22, 0x50},// & -{0x00, 0x00, 0x05, 0x03, 0x00, 0x00},// ' -{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00},// ( -{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00},// ) -{0x00, 0x14, 0x08, 0x3E, 0x08, 0x14},// * -{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08},// + -{0x00, 0x00, 0x00, 0xA0, 0x60, 0x00},// , -{0x00, 0x08, 0x08, 0x08, 0x08, 0x08},// - -{0x00, 0x00, 0x60, 0x60, 0x00, 0x00},// . -{0x00, 0x20, 0x10, 0x08, 0x04, 0x02},// / -{0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E},// 0 -{0x00, 0x00, 0x42, 0x7F, 0x40, 0x00},// 1 -{0x00, 0x42, 0x61, 0x51, 0x49, 0x46},// 2 -{0x00, 0x21, 0x41, 0x45, 0x4B, 0x31},// 3 -{0x00, 0x18, 0x14, 0x12, 0x7F, 0x10},// 4 -{0x00, 0x27, 0x45, 0x45, 0x45, 0x39},// 5 -{0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30},// 6 -{0x00, 0x01, 0x71, 0x09, 0x05, 0x03},// 7 -{0x00, 0x36, 0x49, 0x49, 0x49, 0x36},// 8 -{0x00, 0x06, 0x49, 0x49, 0x29, 0x1E},// 9 -{0x00, 0x00, 0x36, 0x36, 0x00, 0x00},// : -{0x00, 0x00, 0x56, 0x36, 0x00, 0x00},// ; -{0x00, 0x08, 0x14, 0x22, 0x41, 0x00},// < -{0x00, 0x14, 0x14, 0x14, 0x14, 0x14},// = -{0x00, 0x00, 0x41, 0x22, 0x14, 0x08},// > -{0x00, 0x02, 0x01, 0x51, 0x09, 0x06},// ? -{0x00, 0x32, 0x49, 0x59, 0x51, 0x3E},// @ -{0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C},// A -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x36},// B -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x22},// C -{0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C},// D -{0x00, 0x7F, 0x49, 0x49, 0x49, 0x41},// E -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x01},// F -{0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A},// G -{0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F},// H -{0x00, 0x00, 0x41, 0x7F, 0x41, 0x00},// I -{0x00, 0x20, 0x40, 0x41, 0x3F, 0x01},// J -{0x00, 0x7F, 0x08, 0x14, 0x22, 0x41},// K -{0x00, 0x7F, 0x40, 0x40, 0x40, 0x40},// L -{0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F},// M -{0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F},// N -{0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E},// O -{0x00, 0x7F, 0x09, 0x09, 0x09, 0x06},// P -{0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E},// Q -{0x00, 0x7F, 0x09, 0x19, 0x29, 0x46},// R -{0x00, 0x46, 0x49, 0x49, 0x49, 0x31},// S -{0x00, 0x01, 0x01, 0x7F, 0x01, 0x01},// T -{0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F},// U -{0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F},// V -{0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F},// W -{0x00, 0x63, 0x14, 0x08, 0x14, 0x63},// X -{0x00, 0x07, 0x08, 0x70, 0x08, 0x07},// Y -{0x00, 0x61, 0x51, 0x49, 0x45, 0x43},// Z -{0x00, 0x00, 0x7F, 0x41, 0x41, 0x00},// [ -{0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55},// 55 -{0x00, 0x00, 0x41, 0x41, 0x7F, 0x00},// ] -{0x00, 0x04, 0x02, 0x01, 0x02, 0x04},// ^ -{0x00, 0x40, 0x40, 0x40, 0x40, 0x40},// _ -{0x00, 0x00, 0x01, 0x02, 0x04, 0x00},// ' -{0x00, 0x20, 0x54, 0x54, 0x54, 0x78},// a -{0x00, 0x7F, 0x48, 0x44, 0x44, 0x38},// b -{0x00, 0x38, 0x44, 0x44, 0x44, 0x20},// c -{0x00, 0x38, 0x44, 0x44, 0x48, 0x7F},// d -{0x00, 0x38, 0x54, 0x54, 0x54, 0x18},// e -{0x00, 0x08, 0x7E, 0x09, 0x01, 0x02},// f -{0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C},// g -{0x00, 0x7F, 0x08, 0x04, 0x04, 0x78},// h -{0x00, 0x00, 0x44, 0x7D, 0x40, 0x00},// i -{0x00, 0x40, 0x80, 0x84, 0x7D, 0x00},// j -{0x00, 0x7F, 0x10, 0x28, 0x44, 0x00},// k -{0x00, 0x00, 0x41, 0x7F, 0x40, 0x00},// l -{0x00, 0x7C, 0x04, 0x18, 0x04, 0x78},// m -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x78},// n -{0x00, 0x38, 0x44, 0x44, 0x44, 0x38},// o -{0x00, 0xFC, 0x24, 0x24, 0x24, 0x18},// p -{0x00, 0x18, 0x24, 0x24, 0x18, 0xFC},// q -{0x00, 0x7C, 0x08, 0x04, 0x04, 0x08},// r -{0x00, 0x48, 0x54, 0x54, 0x54, 0x20},// s -{0x00, 0x04, 0x3F, 0x44, 0x40, 0x20},// t -{0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C},// u -{0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C},// v -{0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C},// w -{0x00, 0x44, 0x28, 0x10, 0x28, 0x44},// x -{0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C},// y -{0x00, 0x44, 0x64, 0x54, 0x4C, 0x44},// z -{0x14, 0x14, 0x14, 0x14, 0x14, 0x14},// horiz lines -}; -//12*12 ASCII -const unsigned char asc2_1206[95][12]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x0C,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x90,0xD0,0xBC,0xD0,0xBC,0x90,0x00,0x03,0x00,0x03,0x00,0x00},/*"#",3*/ -{0x18,0x24,0xFE,0x44,0x8C,0x00,0x03,0x02,0x07,0x02,0x01,0x00},/*"$",4*/ -{0x18,0x24,0xD8,0xB0,0x4C,0x80,0x00,0x03,0x00,0x01,0x02,0x01},/*"%",5*/ -{0xC0,0x38,0xE4,0x38,0xE0,0x00,0x01,0x02,0x02,0x01,0x02,0x02},/*"&",6*/ -{0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xF8,0x04,0x02,0x00,0x00,0x00,0x01,0x02,0x04},/*"(",8*/ -{0x00,0x02,0x04,0xF8,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0x00},/*")",9*/ -{0x90,0x60,0xF8,0x60,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"*",10*/ -{0x20,0x20,0xFC,0x20,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x00,0x00,0x00,0x00},/*",",12*/ -{0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x80,0x60,0x1C,0x02,0x00,0x04,0x03,0x00,0x00,0x00,0x00},/*"/",15*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"0",16*/ -{0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"1",17*/ -{0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00},/*"2",18*/ -{0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"3",19*/ -{0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00},/*"4",20*/ -{0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"5",21*/ -{0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"6",22*/ -{0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00},/*"7",23*/ -{0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"8",24*/ -{0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"9",25*/ -{0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00},/*";",27*/ -{0x00,0x20,0x50,0x88,0x04,0x02,0x00,0x00,0x00,0x00,0x01,0x02},/*"<",28*/ -{0x90,0x90,0x90,0x90,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x02,0x04,0x88,0x50,0x20,0x00,0x02,0x01,0x00,0x00,0x00},/*">",30*/ -{0x18,0x04,0xC4,0x24,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"?",31*/ -{0xF8,0x04,0xE4,0x94,0xF8,0x00,0x01,0x02,0x02,0x02,0x02,0x00},/*"@",32*/ -{0x00,0xE0,0x9C,0xF0,0x80,0x00,0x02,0x03,0x00,0x00,0x03,0x02},/*"A",33*/ -{0x04,0xFC,0x24,0x24,0xD8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"B",34*/ -{0xF8,0x04,0x04,0x04,0x0C,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"C",35*/ -{0x04,0xFC,0x04,0x04,0xF8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"D",36*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"E",37*/ -{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"F",38*/ -{0xF0,0x08,0x04,0x44,0xCC,0x40,0x00,0x01,0x02,0x02,0x01,0x00},/*"G",39*/ -{0x04,0xFC,0x20,0x20,0xFC,0x04,0x02,0x03,0x00,0x00,0x03,0x02},/*"H",40*/ -{0x04,0x04,0xFC,0x04,0x04,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"I",41*/ -{0x00,0x04,0x04,0xFC,0x04,0x04,0x06,0x04,0x04,0x03,0x00,0x00},/*"J",42*/ -{0x04,0xFC,0x24,0xD0,0x0C,0x04,0x02,0x03,0x02,0x00,0x03,0x02},/*"K",43*/ -{0x04,0xFC,0x04,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x02,0x03},/*"L",44*/ -{0xFC,0x3C,0xC0,0x3C,0xFC,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"M",45*/ -{0x04,0xFC,0x30,0xC4,0xFC,0x04,0x02,0x03,0x02,0x00,0x03,0x00},/*"N",46*/ -{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"O",47*/ -{0x04,0xFC,0x24,0x24,0x18,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"P",48*/ -{0xF8,0x84,0x84,0x04,0xF8,0x00,0x01,0x02,0x02,0x07,0x05,0x00},/*"Q",49*/ -{0x04,0xFC,0x24,0x64,0x98,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"R",50*/ -{0x18,0x24,0x24,0x44,0x8C,0x00,0x03,0x02,0x02,0x02,0x01,0x00},/*"S",51*/ -{0x0C,0x04,0xFC,0x04,0x0C,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"T",52*/ -{0x04,0xFC,0x00,0x00,0xFC,0x04,0x00,0x01,0x02,0x02,0x01,0x00},/*"U",53*/ -{0x04,0x7C,0x80,0xE0,0x1C,0x04,0x00,0x00,0x03,0x00,0x00,0x00},/*"V",54*/ -{0x1C,0xE0,0x3C,0xE0,0x1C,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"W",55*/ -{0x04,0x9C,0x60,0x9C,0x04,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"X",56*/ -{0x04,0x1C,0xE0,0x1C,0x04,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"Y",57*/ -{0x0C,0x84,0x64,0x1C,0x04,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"Z",58*/ -{0x00,0x00,0xFE,0x02,0x02,0x00,0x00,0x00,0x07,0x04,0x04,0x00},/*"[",59*/ -{0x00,0x0E,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00},/*"\",60*/ -{0x00,0x02,0x02,0xFE,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00},/*"]",61*/ -{0x00,0x04,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08},/*"_",63*/ -{0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x40,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"a",65*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"b",66*/ -{0x00,0xC0,0x20,0x20,0x60,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"c",67*/ -{0x00,0xC0,0x20,0x24,0xFC,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"d",68*/ -{0x00,0xC0,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"e",69*/ -{0x00,0x20,0xF8,0x24,0x24,0x04,0x00,0x02,0x03,0x02,0x02,0x00},/*"f",70*/ -{0x00,0x40,0xA0,0xA0,0x60,0x20,0x00,0x07,0x0A,0x0A,0x0A,0x04},/*"g",71*/ -{0x04,0xFC,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"h",72*/ -{0x00,0x20,0xE4,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x20,0xE4,0x00,0x00,0x08,0x08,0x08,0x07,0x00,0x00},/*"j",74*/ -{0x04,0xFC,0x80,0xE0,0x20,0x20,0x02,0x03,0x02,0x00,0x03,0x02},/*"k",75*/ -{0x04,0x04,0xFC,0x00,0x00,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"l",76*/ -{0xE0,0x20,0xE0,0x20,0xC0,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"m",77*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"n",78*/ -{0x00,0xC0,0x20,0x20,0xC0,0x00,0x00,0x01,0x02,0x02,0x01,0x00},/*"o",79*/ -{0x20,0xE0,0x20,0x20,0xC0,0x00,0x08,0x0F,0x0A,0x02,0x01,0x00},/*"p",80*/ -{0x00,0xC0,0x20,0x20,0xE0,0x00,0x00,0x01,0x02,0x0A,0x0F,0x08},/*"q",81*/ -{0x20,0xE0,0x40,0x20,0x20,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x60,0xA0,0xA0,0x20,0x00,0x00,0x02,0x02,0x02,0x03,0x00},/*"s",83*/ -{0x00,0x20,0xF8,0x20,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x00},/*"t",84*/ -{0x20,0xE0,0x00,0x20,0xE0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"u",85*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x00,0x00,0x03,0x01,0x00,0x00},/*"v",86*/ -{0x60,0x80,0xE0,0x80,0x60,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"w",87*/ -{0x20,0x60,0x80,0x60,0x20,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"x",88*/ -{0x20,0xE0,0x20,0x80,0x60,0x20,0x08,0x08,0x07,0x01,0x00,0x00},/*"y",89*/ -{0x00,0x20,0xA0,0x60,0x20,0x00,0x00,0x02,0x03,0x02,0x02,0x00},/*"z",90*/ -{0x00,0x00,0x20,0xDE,0x02,0x00,0x00,0x00,0x00,0x07,0x04,0x00},/*"{",91*/ -{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00},/*"|",92*/ -{0x00,0x02,0xDE,0x20,0x00,0x00,0x00,0x04,0x07,0x00,0x00,0x00},/*"}",93*/ -{0x02,0x01,0x02,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//16*16 ASCII -const unsigned char asc2_1608[][16]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00},/*"#",3*/ -{0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00},/*"$",4*/ -{0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00},/*"%",5*/ -{0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10},/*"&",6*/ -{0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},/*")",9*/ -{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},/*"*",10*/ -{0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/*"/",15*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",16*/ -{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"1",17*/ -{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",18*/ -{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},/*"3",19*/ -{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},/*"4",20*/ -{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},/*"5",21*/ -{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"6",22*/ -{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",24*/ -{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},/*"9",25*/ -{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},/*"<",28*/ -{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"=",29*/ -{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},/*">",30*/ -{0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00},/*"?",31*/ -{0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00},/*"@",32*/ -{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",33*/ -{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},/*"B",34*/ -{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",35*/ -{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},/*"D",36*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},/*"E",37*/ -{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},/*"F",38*/ -{0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},/*"G",39*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},/*"H",40*/ -{0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},/*"J",42*/ -{0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},/*"K",43*/ -{0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},/*"L",44*/ -{0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00},/*"M",45*/ -{0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},/*"N",46*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},/*"O",47*/ -{0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},/*"P",48*/ -{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},/*"Q",49*/ -{0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},/*"R",50*/ -{0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},/*"S",51*/ -{0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"T",52*/ -{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"U",53*/ -{0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},/*"V",54*/ -{0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},/*"W",55*/ -{0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},/*"X",56*/ -{0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"Y",57*/ -{0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},/*"\",60*/ -{0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},/*"a",65*/ -{0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20},/*"d",68*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},/*"e",69*/ -{0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},/*"g",71*/ -{0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"h",72*/ -{0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},/*"j",74*/ -{0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00},/*"k",75*/ -{0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"l",76*/ -{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},/*"m",77*/ -{0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"n",78*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"o",79*/ -{0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80},/*"q",81*/ -{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},/*"r",82*/ -{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},/*"s",83*/ -{0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00},/*"t",84*/ -{0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},/*"u",85*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00},/*"v",86*/ -{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},/*"w",87*/ -{0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00},/*"x",88*/ -{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00},/*"y",89*/ -{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40},/*"{",91*/ -{0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -//24*24 ASICII -const unsigned char asc2_2412[][36]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ -{0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*"!",1*/ -{0x00,0x00,0x80,0x60,0x30,0x1C,0x8C,0x60,0x30,0x1C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ -{0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x86,0xE6,0x9F,0x86,0x86,0x86,0x86,0xE6,0x9F,0x86,0x00,0x00,0x01,0x1F,0x01,0x01,0x01,0x01,0x01,0x1F,0x01,0x01,0x00},/*"#",3*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0xF8,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x03,0x07,0x0C,0x18,0xFF,0x70,0xE1,0x81,0x00,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x7F,0x10,0x0F,0x07,0x00,0x00},/*"$",4*/ -{0x80,0x60,0x20,0x60,0x80,0x00,0x00,0x00,0xE0,0x20,0x00,0x00,0x0F,0x30,0x20,0x30,0x9F,0x70,0xDC,0x37,0x10,0x30,0xC0,0x00,0x00,0x00,0x10,0x0E,0x03,0x00,0x07,0x18,0x10,0x18,0x07,0x00},/*"%",5*/ -{0x00,0x00,0xC0,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x1F,0x38,0xE8,0x87,0x03,0xC4,0x3C,0x04,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x0B,0x07,0x0D,0x10,0x10,0x08,0x00},/*"&",6*/ -{0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x30,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x18,0x20,0x40,0x00},/*"(",8*/ -{0x00,0x04,0x08,0x30,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x66,0x66,0x3C,0x18,0xFF,0x18,0x3C,0x66,0x66,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"*",10*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"+",11*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x8C,0x4C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x0C,0x00,0x00,0x00,0x00,0x00,0x80,0x70,0x1C,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x38,0x0E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"/",15*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0E,0x07,0x01,0x00},/*"0",16*/ -{0x00,0x00,0x80,0x80,0x80,0xC0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"1",17*/ -{0x00,0x80,0x40,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x03,0x03,0x00,0x80,0x40,0x20,0x38,0x1F,0x07,0x00,0x00,0x00,0x1C,0x1A,0x19,0x18,0x18,0x18,0x18,0x18,0x1F,0x00,0x00},/*"2",18*/ -{0x00,0x80,0xC0,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00},/*"3",19*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x00,0x00,0x00,0x00,0xC0,0xB0,0x88,0x86,0x81,0x80,0xFF,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00},/*"4",20*/ -{0x00,0x00,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x3F,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x00,0x07,0x0B,0x10,0x10,0x10,0x10,0x1C,0x0F,0x03,0x00,0x00},/*"5",21*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0xFC,0xFF,0x21,0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x01,0x07,0x0C,0x18,0x10,0x10,0x10,0x08,0x0F,0x03,0x00},/*"6",22*/ -{0x00,0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0x60,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00},/*"7",23*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x87,0xEF,0x2C,0x18,0x18,0x30,0x30,0x68,0xCF,0x83,0x00,0x00,0x07,0x0F,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"8",24*/ -{0x00,0x00,0xC0,0xC0,0x20,0x20,0x20,0x20,0xC0,0x80,0x00,0x00,0x00,0x1F,0x3F,0x60,0x40,0x40,0x40,0x20,0x10,0xFF,0xFE,0x00,0x00,0x00,0x0C,0x1C,0x10,0x10,0x10,0x08,0x0F,0x03,0x00,0x00},/*"9",25*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00},/*":",26*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00},/*";",27*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x00,0x00,0x00,0x10,0x28,0x44,0x82,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"<",28*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ -{0x00,0x00,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x44,0x28,0x10,0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00},/*">",30*/ -{0x00,0xC0,0x20,0x20,0x10,0x10,0x10,0x10,0x30,0xE0,0xC0,0x00,0x00,0x03,0x03,0x00,0x00,0xF0,0x10,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00},/*"?",31*/ -{0x00,0x00,0x00,0xC0,0x40,0x60,0x20,0x20,0x20,0x40,0xC0,0x00,0x00,0xFC,0xFF,0x01,0xF0,0x0E,0x03,0xC1,0xFE,0x03,0x80,0x7F,0x00,0x01,0x07,0x0E,0x08,0x11,0x11,0x10,0x11,0x09,0x04,0x02},/*"@",32*/ -{0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7C,0x43,0x40,0x47,0x7F,0xF8,0x80,0x00,0x00,0x10,0x18,0x1F,0x10,0x00,0x00,0x00,0x00,0x13,0x1F,0x1C,0x10},/*"A",33*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"B",34*/ -{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0x20,0x60,0xE0,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x08,0x04,0x03,0x00},/*"C",35*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x40,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x18,0x08,0x0E,0x07,0x01,0x00},/*"D",36*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"E",37*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0x60,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,0x01,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"F",38*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x40,0xE0,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x40,0x40,0xC0,0xC1,0x40,0x40,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x0F,0x0F,0x00,0x00},/*"G",39*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x20,0xE0,0xE0,0x20,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0xFF,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10},/*"H",40*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"I",41*/ -{0x00,0x00,0x00,0x00,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x60,0xE0,0x80,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"J",42*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x20,0xA0,0x60,0x20,0x20,0x00,0x00,0xFF,0xFF,0x30,0x18,0x7C,0xE3,0xC0,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x01,0x13,0x1F,0x1C,0x18,0x10},/*"K",43*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"L",44*/ -{0x20,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0x20,0x00,0xFF,0x01,0x3F,0xFE,0xC0,0xE0,0x1E,0x01,0xFF,0xFF,0x00,0x10,0x1F,0x10,0x00,0x03,0x1F,0x03,0x00,0x10,0x1F,0x1F,0x10},/*"M",45*/ -{0x20,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0x00,0x03,0x07,0x1C,0x78,0xE0,0x80,0x00,0xFF,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x00},/*"N",46*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,0x0C,0x07,0x01,0x00},/*"O",47*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x20,0x20,0x20,0x20,0x20,0x30,0x1F,0x0F,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"P",48*/ -{0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x11,0x11,0x13,0x3C,0x7C,0x67,0x21,0x00},/*"Q",49*/ -{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x10,0x10,0x30,0xF0,0xD0,0x08,0x0F,0x07,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x03,0x0F,0x1C,0x10,0x10},/*"R",50*/ -{0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x40,0x40,0xE0,0x00,0x00,0x07,0x0F,0x0C,0x18,0x18,0x30,0x30,0x60,0xE0,0x81,0x00,0x00,0x1F,0x0C,0x08,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"S",51*/ -{0x80,0x60,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x60,0x80,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00},/*"T",52*/ -{0x20,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x20,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x10,0x10,0x08,0x07,0x00},/*"U",53*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x07,0x7F,0xF8,0x80,0x00,0x80,0x7C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x1C,0x07,0x00,0x00,0x00,0x00},/*"V",54*/ -{0x20,0xE0,0xE0,0x20,0x00,0xE0,0xE0,0x20,0x00,0x20,0xE0,0x20,0x00,0x07,0xFF,0xF8,0xE0,0x1F,0xFF,0xFC,0xE0,0x1F,0x00,0x00,0x00,0x00,0x03,0x1F,0x03,0x00,0x01,0x1F,0x03,0x00,0x00,0x00},/*"W",55*/ -{0x00,0x20,0x60,0xE0,0xA0,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x03,0x8F,0x7C,0xF8,0xC6,0x01,0x00,0x00,0x00,0x00,0x10,0x18,0x1E,0x13,0x00,0x01,0x17,0x1F,0x18,0x10,0x00},/*"X",56*/ -{0x20,0x60,0xE0,0xE0,0x20,0x00,0x00,0x00,0x20,0xE0,0x60,0x20,0x00,0x00,0x01,0x07,0x3E,0xF8,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x00,0x00,0x00},/*"Y",57*/ -{0x00,0x80,0x60,0x20,0x20,0x20,0x20,0xA0,0xE0,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x3E,0x0F,0x03,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x10,0x10,0x10,0x10,0x18,0x06,0x00},/*"Z",58*/ -{0x00,0x00,0x00,0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x40,0x00},/*"[",59*/ -{0x00,0x00,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1C,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x70,0x80,0x00},/*"\",60*/ -{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00},/*"]",61*/ -{0x00,0x00,0x00,0x10,0x08,0x0C,0x04,0x0C,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/ -{0x00,0x00,0x00,0x04,0x04,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0xD8,0x44,0x64,0x24,0x24,0xFC,0xF8,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x10,0x08,0x1F,0x1F,0x10,0x18},/*"a",65*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x18,0x08,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x1F,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x03,0x00},/*"b",66*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x18,0x04,0x04,0x04,0x3C,0x38,0x00,0x00,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x08,0x06,0x00,0x00},/*"c",67*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"d",68*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x48,0x44,0x44,0x44,0x4C,0x78,0x70,0x00,0x00,0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x08,0x04,0x00},/*"e",69*/ -{0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0xE0,0xC0,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00},/*"f",70*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF8,0x8C,0x04,0x04,0x8C,0xF8,0x74,0x04,0x0C,0x00,0x70,0x76,0xCF,0x8D,0x8D,0x8D,0x89,0xC8,0x78,0x70,0x00},/*"g",71*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x08,0x04,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"h",72*/ -{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"i",73*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x80,0xC0,0x7F,0x3F,0x00,0x00,0x00},/*"j",74*/ -{0x00,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0xC0,0xF4,0x1C,0x04,0x04,0x00,0x00,0x00,0x10,0x1F,0x1F,0x11,0x00,0x03,0x1F,0x1C,0x10,0x10,0x00},/*"k",75*/ -{0x00,0x00,0x20,0x20,0x20,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00},/*"l",76*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x08,0x04,0xFC,0xFC,0x00,0x10,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10,0x00,0x1F,0x1F,0x10},/*"m",77*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x08,0x04,0x04,0xFC,0xF8,0x00,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x10,0x1F,0x1F,0x10,0x00},/*"n",78*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0x18,0x0C,0x04,0x04,0x0C,0x18,0xF0,0xE0,0x00,0x00,0x03,0x0F,0x0C,0x10,0x10,0x10,0x10,0x0C,0x0F,0x03,0x00},/*"o",79*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x08,0x04,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x80,0xFF,0xFF,0x88,0x90,0x10,0x10,0x1C,0x0F,0x03,0x00},/*"p",80*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x04,0x04,0x04,0x08,0xF8,0xFC,0x00,0x00,0x00,0x03,0x0F,0x18,0x10,0x10,0x90,0x88,0xFF,0xFF,0x80,0x00},/*"q",81*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x10,0x08,0x04,0x04,0x0C,0x0C,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00},/*"r",82*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x78,0xCC,0xC4,0x84,0x84,0x84,0x0C,0x1C,0x00,0x00,0x00,0x1E,0x18,0x10,0x10,0x10,0x11,0x19,0x0F,0x06,0x00},/*"s",83*/ -{0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x10,0x10,0x10,0x0C,0x00,0x00},/*"t",84*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x04,0xFC,0xFE,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x10,0x10,0x08,0x1F,0x0F,0x08,0x00},/*"u",85*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0x00,0xC4,0x3C,0x0C,0x04,0x00,0x00,0x00,0x00,0x01,0x0F,0x1E,0x0E,0x01,0x00,0x00,0x00},/*"v",86*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x3C,0xFC,0xC4,0x00,0xE4,0x7C,0xFC,0x84,0x80,0x7C,0x04,0x00,0x00,0x07,0x1F,0x07,0x00,0x00,0x07,0x1F,0x07,0x00,0x00},/*"w",87*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x1C,0x7C,0xE4,0xC0,0x34,0x1C,0x04,0x04,0x00,0x00,0x10,0x10,0x1C,0x16,0x01,0x13,0x1F,0x1C,0x18,0x10,0x00},/*"x",88*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x3C,0xFC,0xC4,0x00,0xC4,0x3C,0x04,0x04,0x00,0x00,0x00,0xC0,0x80,0xC1,0x37,0x0E,0x01,0x00,0x00,0x00,0x00},/*"y",89*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x04,0x04,0xC4,0xF4,0x7C,0x1C,0x04,0x00,0x00,0x00,0x00,0x10,0x1C,0x1F,0x17,0x11,0x10,0x10,0x18,0x0E,0x00},/*"z",90*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0xEF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x60,0x40,0x00,0x00},/*"{",91*/ -{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"|",92*/ -{0x00,0x00,0x04,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/ -{0x00,0x18,0x06,0x02,0x02,0x04,0x08,0x10,0x20,0x20,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ -}; -const unsigned char Hzk1[][32]={ -{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"��",0*/ -{0x40,0x40,0x40,0x5F,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x5F,0x40,0x40,0x40,0x00,0x00,0x40,0x20,0x0F,0x09,0x49,0x89,0x79,0x09,0x09,0x09,0x0F,0x20,0x40,0x00,0x00},/*"��",1*/ -{0x00,0xFE,0x02,0x42,0x4A,0xCA,0x4A,0x4A,0xCA,0x4A,0x4A,0x42,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x50,0x4C,0x43,0x40,0x40,0x4F,0x50,0x50,0x5C,0x40,0xFF,0x00,0x00},/*"԰",2*/ -{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"��",3*/ -{0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",4*/ -{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"��",5*/ -{0x00,0x10,0x10,0x10,0x10,0xD0,0x30,0xFF,0x30,0xD0,0x12,0x1C,0x10,0x10,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"��",6*/ -{0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00},/*"��",7*/ -{0x00,0xFE,0x22,0x5A,0x86,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,0xFF,0x04,0x08,0x07,0x00,0xFF,0x40,0x20,0x03,0x0C,0x14,0x22,0x41,0x40,0x00},/*"��",8*/ -{0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,0x00,0x01,0x00,0x20,0x70,0x28,0x26,0x21,0x20,0x20,0x24,0x38,0x60,0x00,0x01,0x01,0x00},/*"��",9*/ -{0x00,0x10,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x12,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00},/*"˾",10*/ -}; -const unsigned char Hzk2[][72]={ -{0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFC,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; -const unsigned char Hzk3[][128]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - - -}; - -const unsigned char Hzk4[][512]={ -{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF0,0xF0,0x70,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"��",0*/ - -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Include/gd32f30x.h b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Include/gd32f30x.h deleted file mode 100644 index c9ba4bb..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Include/gd32f30x.h +++ /dev/null @@ -1,356 +0,0 @@ -/*! - \file gd32f30x.h - \brief general definitions for GD32F30x - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_H -#define GD32F30X_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* define GD32F30x */ -#if !defined (GD32F30X_HD) && !defined (GD32F30X_XD) && !defined (GD32F30X_CL) - /* #define GD32F30X_HD */ - /* #define GD32F30X_XD */ - /* #define GD32F30X_CL */ -#endif /* define GD32F30x */ - -#if !defined (GD32F30X_HD) && !defined (GD32F30X_XD) && !defined (GD32F30X_CL) - #error "Please select the target GD32F30x device in gd32f30x.h file" -#endif /* undefine GD32F30x tip */ - -/* define value of high speed crystal oscillator (HXTAL) in Hz */ -#if !defined HXTAL_VALUE -#ifdef GD32F30X_CL -#define HXTAL_VALUE ((uint32_t)25000000) /*!< value of the external oscillator in Hz */ -#else -#define HXTAL_VALUE ((uint32_t)8000000) /* !< from 4M to 32M *!< value of the external oscillator in Hz*/ -#endif /* HXTAL_VALUE */ -#endif /* high speed crystal oscillator value */ - -/* define startup timeout value of high speed crystal oscillator (HXTAL) */ -#if !defined (HXTAL_STARTUP_TIMEOUT) -#define HXTAL_STARTUP_TIMEOUT ((uint16_t)0xFFFF) -#endif /* high speed crystal oscillator startup timeout */ - -/* define value of internal 48MHz RC oscillator (IRC48M) in Hz */ -#if !defined (IRC48M_VALUE) -#define IRC48M_VALUE ((uint32_t)48000000) -#endif /* internal 48MHz RC oscillator value */ - -/* define value of internal 8MHz RC oscillator (IRC8M) in Hz */ -#if !defined (IRC8M_VALUE) -#define IRC8M_VALUE ((uint32_t)8000000) -#endif /* internal 8MHz RC oscillator value */ - -/* define startup timeout value of internal 8MHz RC oscillator (IRC8M) */ -#if !defined (IRC8M_STARTUP_TIMEOUT) -#define IRC8M_STARTUP_TIMEOUT ((uint16_t)0x0500) -#endif /* internal 8MHz RC oscillator startup timeout */ - -/* define value of internal 40KHz RC oscillator(IRC40K) in Hz */ -#if !defined (IRC40K_VALUE) -#define IRC40K_VALUE ((uint32_t)40000) -#endif /* internal 40KHz RC oscillator value */ - -/* define value of low speed crystal oscillator (LXTAL)in Hz */ -#if !defined (LXTAL_VALUE) -#define LXTAL_VALUE ((uint32_t)32768) -#endif /* low speed crystal oscillator value */ - -/* GD32F30x firmware library version number V1.0 */ -#define __GD32F30x_STDPERIPH_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __GD32F30x_STDPERIPH_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ -#define __GD32F30x_STDPERIPH_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ -#define __GD32F30x_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __GD32F30x_STDPERIPH_VERSION ((__GD32F30x_STDPERIPH_VERSION_MAIN << 24)\ - |(__GD32F30x_STDPERIPH_VERSION_SUB1 << 16)\ - |(__GD32F30x_STDPERIPH_VERSION_SUB2 << 8)\ - |(__GD32F30x_STDPERIPH_VERSION_RC)) - -/* configuration of the Cortex-M4 processor and core peripherals */ -#define __CM4_REV 0x0001 /*!< Core revision r0p1 */ -#define __MPU_PRESENT 1 /*!< GD32F30x provide MPU */ -#define __NVIC_PRIO_BITS 4 /*!< GD32F30x uses 4 bits for the priority levels */ -#define __Vendor_SysTickConfig 0 /*!< set to 1 if different sysTick config is used */ -#define __FPU_PRESENT 1 /*!< FPU present */ -/* define interrupt number */ -typedef enum IRQn -{ - /* Cortex-M4 processor exceptions numbers */ - NonMaskableInt_IRQn = -14, /*!< 2 non maskable interrupt */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 memory management interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M4 bus fault interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M4 usage fault interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV call interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 debug monitor interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M4 pend SV interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M4 system tick interrupt */ - /* interruput numbers */ - WWDGT_IRQn = 0, /*!< window watchDog timer interrupt */ - LVD_IRQn = 1, /*!< LVD through EXTI line detect interrupt */ - TAMPER_IRQn = 2, /*!< tamper through EXTI line detect */ - RTC_IRQn = 3, /*!< RTC through EXTI line interrupt */ - FMC_IRQn = 4, /*!< FMC interrupt */ - RCU_CTC_IRQn = 5, /*!< RCU and CTC interrupt */ - EXTI0_IRQn = 6, /*!< EXTI line 0 interrupt */ - EXTI1_IRQn = 7, /*!< EXTI line 1 interrupt */ - EXTI2_IRQn = 8, /*!< EXTI line 2 interrupt */ - EXTI3_IRQn = 9, /*!< EXTI line 3 interrupt */ - EXTI4_IRQn = 10, /*!< EXTI line 4 interrupt */ - DMA0_Channel0_IRQn = 11, /*!< DMA0 channel0 interrupt */ - DMA0_Channel1_IRQn = 12, /*!< DMA0 channel1 interrupt */ - DMA0_Channel2_IRQn = 13, /*!< DMA0 channel2 interrupt */ - DMA0_Channel3_IRQn = 14, /*!< DMA0 channel3 interrupt */ - DMA0_Channel4_IRQn = 15, /*!< DMA0 channel4 interrupt */ - DMA0_Channel5_IRQn = 16, /*!< DMA0 channel5 interrupt */ - DMA0_Channel6_IRQn = 17, /*!< DMA0 channel6 interrupt */ - ADC0_1_IRQn = 18, /*!< ADC0 and ADC1 interrupt */ -#ifdef GD32F30X_HD - USBD_HP_CAN0_TX_IRQn = 19, /*!< CAN0 TX interrupts */ - USBD_LP_CAN0_RX0_IRQn = 20, /*!< CAN0 RX0 interrupts */ - CAN0_RX1_IRQn = 21, /*!< CAN0 RX1 interrupt */ - CAN0_EWMC_IRQn = 22, /*!< CAN0 EWMC interrupt */ - EXTI5_9_IRQn = 23, /*!< EXTI[9:5] interrupts */ - TIMER0_BRK_IRQn = 24, /*!< TIMER0 break interrupt */ - TIMER0_UP_IRQn = 25, /*!< TIMER0 update interrupt */ - TIMER0_TRG_CMT_IRQn = 26, /*!< TIMER0 trigger and commutation interrupt */ - TIMER0_Channel_IRQn = 27, /*!< TIMER0 channel capture compare interrupt */ - TIMER1_IRQn = 28, /*!< TIMER1 interrupt */ - TIMER2_IRQn = 29, /*!< TIMER2 interrupt */ - TIMER3_IRQn = 30, /*!< TIMER3 interrupt */ - I2C0_EV_IRQn = 31, /*!< I2C0 event interrupt */ - I2C0_ER_IRQn = 32, /*!< I2C0 error interrupt */ - I2C1_EV_IRQn = 33, /*!< I2C1 event interrupt */ - I2C1_ER_IRQn = 34, /*!< I2C1 error interrupt */ - SPI0_IRQn = 35, /*!< SPI0 interrupt */ - SPI1_IRQn = 36, /*!< SPI1 interrupt */ - USART0_IRQn = 37, /*!< USART0 interrupt */ - USART1_IRQn = 38, /*!< USART1 interrupt */ - USART2_IRQn = 39, /*!< USART2 interrupt */ - EXTI10_15_IRQn = 40, /*!< EXTI[15:10] interrupts */ - RTC_Alarm_IRQn = 41, /*!< RTC alarm interrupt */ - USBD_WKUP_IRQn = 42, /*!< USBD Wakeup interrupt */ - TIMER7_BRK_IRQn = 43, /*!< TIMER7 break interrupt */ - TIMER7_UP_IRQn = 44, /*!< TIMER7 update interrupt */ - TIMER7_TRG_CMT_IRQn = 45, /*!< TIMER7 trigger and commutation interrupt */ - TIMER7_Channel_IRQn = 46, /*!< TIMER7 channel capture compare interrupt */ - ADC2_IRQn = 47, /*!< ADC2 global interrupt */ - EXMC_IRQn = 48, /*!< EXMC global interrupt */ - SDIO_IRQn = 49, /*!< SDIO global interrupt */ - TIMER4_IRQn = 50, /*!< TIMER4 global interrupt */ - SPI2_IRQn = 51, /*!< SPI2 global interrupt */ - UART3_IRQn = 52, /*!< UART3 global interrupt */ - UART4_IRQn = 53, /*!< UART4 global interrupt */ - TIMER5_IRQn = 54, /*!< TIMER5 global interrupt */ - TIMER6_IRQn = 55, /*!< TIMER6 global interrupt */ - DMA1_Channel0_IRQn = 56, /*!< DMA1 channel0 global interrupt */ - DMA1_Channel1_IRQn = 57, /*!< DMA1 channel1 global interrupt */ - DMA1_Channel2_IRQn = 58, /*!< DMA1 channel2 global interrupt */ - DMA1_Channel3_Channel4_IRQn = 59, /*!< DMA1 channel3 and channel4 global Interrupt */ -#endif /* GD32F30X_HD */ - -#ifdef GD32F30X_XD - USBD_HP_CAN0_TX_IRQn = 19, /*!< CAN0 TX interrupts */ - USBD_LP_CAN0_RX0_IRQn = 20, /*!< CAN0 RX0 interrupts */ - CAN0_RX1_IRQn = 21, /*!< CAN0 RX1 interrupt */ - CAN0_EWMC_IRQn = 22, /*!< CAN0 EWMC interrupt */ - EXTI5_9_IRQn = 23, /*!< EXTI[9:5] interrupts */ - TIMER0_BRK_TIMER8_IRQn = 24, /*!< TIMER0 break and TIMER8 interrupt */ - TIMER0_UP_TIMER9_IRQn = 25, /*!< TIMER0 update and TIMER9 interrupt */ - TIMER0_TRG_CMT_TIMER10_IRQn = 26, /*!< TIMER0 trigger and commutation and TIMER10 interrupt */ - TIMER0_Channel_IRQn = 27, /*!< TIMER0 channel capture compare interrupt */ - TIMER1_IRQn = 28, /*!< TIMER1 interrupt */ - TIMER2_IRQn = 29, /*!< TIMER2 interrupt */ - TIMER3_IRQn = 30, /*!< TIMER3 interrupt */ - I2C0_EV_IRQn = 31, /*!< I2C0 event interrupt */ - I2C0_ER_IRQn = 32, /*!< I2C0 error interrupt */ - I2C1_EV_IRQn = 33, /*!< I2C1 event interrupt */ - I2C1_ER_IRQn = 34, /*!< I2C1 error interrupt */ - SPI0_IRQn = 35, /*!< SPI0 interrupt */ - SPI1_IRQn = 36, /*!< SPI1 interrupt */ - USART0_IRQn = 37, /*!< USART0 interrupt */ - USART1_IRQn = 38, /*!< USART1 interrupt */ - USART2_IRQn = 39, /*!< USART2 interrupt */ - EXTI10_15_IRQn = 40, /*!< EXTI[15:10] interrupts */ - RTC_Alarm_IRQn = 41, /*!< RTC alarm interrupt */ - USBD_WKUP_IRQn = 42, /*!< USBD wakeup interrupt */ - TIMER7_BRK_TIMER11_IRQn = 43, /*!< TIMER7 break and TIMER11 interrupt */ - TIMER7_UP_TIMER12_IRQn = 44, /*!< TIMER7 update and TIMER12 interrupt */ - TIMER7_TRG_CMT_TIMER13_IRQn = 45, /*!< TIMER7 trigger and commutation and TIMER13 interrupt */ - TIMER7_Channel_IRQn = 46, /*!< TIMER7 channel capture compare interrupt */ - ADC2_IRQn = 47, /*!< ADC2 global interrupt */ - EXMC_IRQn = 48, /*!< EXMC global interrupt */ - SDIO_IRQn = 49, /*!< SDIO global interrupt */ - TIMER4_IRQn = 50, /*!< TIMER4 global interrupt */ - SPI2_IRQn = 51, /*!< SPI2 global interrupt */ - UART3_IRQn = 52, /*!< UART3 global interrupt */ - UART4_IRQn = 53, /*!< UART4 global interrupt */ - TIMER5_IRQn = 54, /*!< TIMER5 global interrupt */ - TIMER6_IRQn = 55, /*!< TIMER6 global interrupt */ - DMA1_Channel0_IRQn = 56, /*!< DMA1 channel0 global interrupt */ - DMA1_Channel1_IRQn = 57, /*!< DMA1 channel1 global interrupt */ - DMA1_Channel2_IRQn = 58, /*!< DMA1 channel2 global interrupt */ - DMA1_Channel3_Channel4_IRQn = 59, /*!< DMA1 channel3 and channel4 global interrupt */ -#endif /* GD32F30X_XD */ - -#ifdef GD32F30X_CL - CAN0_TX_IRQn = 19, /*!< CAN0 TX interrupt */ - CAN0_RX0_IRQn = 20, /*!< CAN0 RX0 interrupt */ - CAN0_RX1_IRQn = 21, /*!< CAN0 RX1 interrupt */ - CAN0_EWMC_IRQn = 22, /*!< CAN0 EWMC interrupt */ - EXTI5_9_IRQn = 23, /*!< EXTI[9:5] interrupts */ - TIMER0_BRK_TIMER8_IRQn = 24, /*!< TIMER0 break and TIMER8 interrupt */ - TIMER0_UP_TIMER9_IRQn = 25, /*!< TIMER0 update and TIMER9 interrupt */ - TIMER0_TRG_CMT_TIMER10_IRQn = 26, /*!< TIMER0 trigger and commutation and TIMER10 interrupt */ - TIMER0_Channel_IRQn = 27, /*!< TIMER0 channel capture compare interrupt */ - TIMER1_IRQn = 28, /*!< TIMER1 interrupt */ - TIMER2_IRQn = 29, /*!< TIMER2 interrupt */ - TIMER3_IRQn = 30, /*!< TIMER3 interrupt */ - I2C0_EV_IRQn = 31, /*!< I2C0 event interrupt */ - I2C0_ER_IRQn = 32, /*!< I2C0 error interrupt */ - I2C1_EV_IRQn = 33, /*!< I2C1 event interrupt */ - I2C1_ER_IRQn = 34, /*!< I2C1 error interrupt */ - SPI0_IRQn = 35, /*!< SPI0 interrupt */ - SPI1_IRQn = 36, /*!< SPI1 interrupt */ - USART0_IRQn = 37, /*!< USART0 interrupt */ - USART1_IRQn = 38, /*!< USART1 interrupt */ - USART2_IRQn = 39, /*!< USART2 interrupt */ - EXTI10_15_IRQn = 40, /*!< EXTI[15:10] interrupts */ - RTC_ALARM_IRQn = 41, /*!< RTC alarm interrupt */ - USBFS_WKUP_IRQn = 42, /*!< USBFS wakeup interrupt */ - TIMER7_BRK_TIMER11_IRQn = 43, /*!< TIMER7 break and TIMER11 interrupt */ - TIMER7_UP_TIMER12_IRQn = 44, /*!< TIMER7 update and TIMER12 interrupt */ - TIMER7_TRG_CMT_TIMER13_IRQn = 45, /*!< TIMER7 trigger and commutation and TIMER13 interrupt */ - TIMER7_Channel_IRQn = 46, /*!< TIMER7 channel capture compare interrupt */ - EXMC_IRQn = 48, /*!< EXMC global interrupt */ - TIMER4_IRQn = 50, /*!< TIMER4 global interrupt */ - SPI2_IRQn = 51, /*!< SPI2 global interrupt */ - UART3_IRQn = 52, /*!< UART3 global interrupt */ - UART4_IRQn = 53, /*!< UART4 global interrupt */ - TIMER5_IRQn = 54, /*!< TIMER5 global interrupt */ - TIMER6_IRQn = 55, /*!< TIMER6 global interrupt */ - DMA1_Channel0_IRQn = 56, /*!< DMA1 channel0 global interrupt */ - DMA1_Channel1_IRQn = 57, /*!< DMA1 channel1 global interrupt */ - DMA1_Channel2_IRQn = 58, /*!< DMA1 channel2 global interrupt */ - DMA1_Channel3_IRQn = 59, /*!< DMA1 channel3 global interrupt */ - DMA1_Channel4_IRQn = 60, /*!< DMA1 channel3 global interrupt */ - ENET_IRQn = 61, /*!< ENET global interrupt */ - ENET_WKUP_IRQn = 62, /*!< ENET Wakeup interrupt */ - CAN1_TX_IRQn = 63, /*!< CAN1 TX interrupt */ - CAN1_RX0_IRQn = 64, /*!< CAN1 RX0 interrupt */ - CAN1_RX1_IRQn = 65, /*!< CAN1 RX1 interrupt */ - CAN1_EWMC_IRQn = 66, /*!< CAN1 EWMC interrupt */ - USBFS_IRQn = 67, /*!< USBFS global interrupt */ -#endif /* GD32F30X_CL */ - -} IRQn_Type; - -/* includes */ -#include "core_cm4.h" -#include "system_gd32f30x.h" -#include - -/* enum definitions */ -typedef enum {DISABLE = 0, ENABLE = !DISABLE} EventStatus, ControlStatus; -typedef enum {RESET = 0, SET = !RESET} FlagStatus; -typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrStatus; - -/* bit operations */ -#define REG32(addr) (*(volatile uint32_t *)(uint32_t)(addr)) -#define REG16(addr) (*(volatile uint16_t *)(uint32_t)(addr)) -#define REG8(addr) (*(volatile uint8_t *)(uint32_t)(addr)) -#define BIT(x) ((uint32_t)((uint32_t)0x01U<<(x))) -#define BITS(start, end) ((0xFFFFFFFFUL << (start)) & (0xFFFFFFFFUL >> (31U - (uint32_t)(end)))) -#define GET_BITS(regval, start, end) (((regval) & BITS((start),(end))) >> (start)) - -/* main flash and SRAM memory map */ -#define FLASH_BASE ((uint32_t)0x08000000U) /*!< main FLASH base address */ -#define SRAM_BASE ((uint32_t)0x20000000U) /*!< SRAM0 base address */ -#define OB_BASE ((uint32_t)0x1FFFF800U) /*!< OB base address */ -#define DBG_BASE ((uint32_t)0xE0042000U) /*!< DBG base address */ -#define EXMC_BASE ((uint32_t)0xA0000000U) /*!< EXMC register base address */ - -/* peripheral memory map */ -#define APB1_BUS_BASE ((uint32_t)0x40000000U) /*!< apb1 base address */ -#define APB2_BUS_BASE ((uint32_t)0x40010000U) /*!< apb2 base address */ -#define AHB1_BUS_BASE ((uint32_t)0x40018000U) /*!< ahb1 base address */ -#define AHB3_BUS_BASE ((uint32_t)0x60000000U) /*!< ahb3 base address */ - -/* advanced peripheral bus 1 memory map */ -#define TIMER_BASE (APB1_BUS_BASE + 0x00000000U) /*!< TIMER base address */ -#define RTC_BASE (APB1_BUS_BASE + 0x00002800U) /*!< RTC base address */ -#define WWDGT_BASE (APB1_BUS_BASE + 0x00002C00U) /*!< WWDGT base address */ -#define FWDGT_BASE (APB1_BUS_BASE + 0x00003000U) /*!< FWDGT base address */ -#define SPI_BASE (APB1_BUS_BASE + 0x00003800U) /*!< SPI base address */ -#define USART_BASE (APB1_BUS_BASE + 0x00004400U) /*!< USART base address */ -#define I2C_BASE (APB1_BUS_BASE + 0x00005400U) /*!< I2C base address */ -#define USBD_BASE (APB1_BUS_BASE + 0x00005C00U) /*!< USBD base address */ -#define USBD_RAM_BASE (APB1_BUS_BASE + 0x00006000U) /*!< USBD RAM base address */ -#define CAN_BASE (APB1_BUS_BASE + 0x00006400U) /*!< CAN base address */ -#define BKP_BASE (APB1_BUS_BASE + 0x00006C00U) /*!< BKP base address */ -#define PMU_BASE (APB1_BUS_BASE + 0x00007000U) /*!< PMU base address */ -#define DAC_BASE (APB1_BUS_BASE + 0x00007400U) /*!< DAC base address */ -#define CTC_BASE (APB1_BUS_BASE + 0x0000C800U) /*!< CTC base address */ - -/* advanced peripheral bus 2 memory map */ -#define AFIO_BASE (APB2_BUS_BASE + 0x00000000U) /*!< AFIO base address */ -#define EXTI_BASE (APB2_BUS_BASE + 0x00000400U) /*!< EXTI base address */ -#define GPIO_BASE (APB2_BUS_BASE + 0x00000800U) /*!< GPIO base address */ -#define ADC_BASE (APB2_BUS_BASE + 0x00002400U) /*!< ADC base address */ - -/* advanced high performance bus 1 memory map */ -#define SDIO_BASE (AHB1_BUS_BASE + 0x00000000U) /*!< SDIO base address */ -#define DMA_BASE (AHB1_BUS_BASE + 0x00008000U) /*!< DMA base address */ -#define RCU_BASE (AHB1_BUS_BASE + 0x00009000U) /*!< RCU base address */ -#define FMC_BASE (AHB1_BUS_BASE + 0x0000A000U) /*!< FMC base address */ -#define CRC_BASE (AHB1_BUS_BASE + 0x0000B000U) /*!< CRC base address */ -#define ENET_BASE (AHB1_BUS_BASE + 0x00010000U) /*!< ENET base address */ -#define USBFS_BASE (AHB1_BUS_BASE + 0x0FFE8000U) /*!< USBFS base address */ - -/* define marco USE_STDPERIPH_DRIVER */ -#if !defined USE_STDPERIPH_DRIVER -#define USE_STDPERIPH_DRIVER -#endif -#ifdef USE_STDPERIPH_DRIVER -#include "gd32f30x_libopt.h" -#endif /* USE_STDPERIPH_DRIVER */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Include/system_gd32f30x.h b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Include/system_gd32f30x.h deleted file mode 100644 index 69e7366..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Include/system_gd32f30x.h +++ /dev/null @@ -1,57 +0,0 @@ -/*! - \file system_gd32f30x.h - \brief CMSIS Cortex-M4 Device Peripheral Access Layer Header File for - GD32F30x Device Series -*/ - -/* Copyright (c) 2012 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. - ---------------------------------------------------------------------------*/ -/* This file refers the CMSIS standard, some adjustments are made according to GigaDevice chips */ - -#ifndef SYSTEM_GD32F30X_H -#define SYSTEM_GD32F30X_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/* system clock frequency (core clock) */ -extern uint32_t SystemCoreClock; - -/* function declarations */ -/* initialize the system and update the SystemCoreClock variable */ -extern void SystemInit (void); -/* update the SystemCoreClock with current core clock retrieved from cpu registers */ -extern void SystemCoreClockUpdate (void); - -#ifdef __cplusplus -} -#endif - -#endif /* SYSTEM_GD32F30X_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_cl.s b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_cl.s deleted file mode 100644 index b274d61..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_cl.s +++ /dev/null @@ -1,385 +0,0 @@ -;/*! -; \file startup_gd32f30x_cl.s -; \brief start up file -; -; \version 2017-02-10, V1.0.0, firmware for GD32F30x -; \version 2018-10-10, V1.1.0, firmware for GD32F30x -; \version 2018-12-25, V2.0.0, firmware for GD32F30x -; \version 2020-09-30, V2.1.0, firmware for GD32F30x -;*/ -; -;/* -; Copyright (c) 2020, GigaDevice Semiconductor Inc. - -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN=3 -Stack_Mem SPACE Stack_Size -__initial_sp - - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000400 - - AREA HEAP, NOINIT, READWRITE, ALIGN=3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - PRESERVE8 - THUMB - -; /* reset Vector Mapped to at Address 0 */ - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - -; /* external interrupts handler */ - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper through EXTI Line detect - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_CTC_IRQHandler ; 21:RCU and CTC - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD CAN0_TX_IRQHandler ; 35:CAN0 TX - DCD CAN0_RX0_IRQHandler ; 36:CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI5 to EXTI9 - DCD TIMER0_BRK_TIMER8_IRQHandler ; 40:TIMER0 Break and TIMER8 - DCD TIMER0_UP_TIMER9_IRQHandler ; 41:TIMER0 Update and TIMER9 - DCD TIMER0_TRG_CMT_TIMER10_IRQHandler ; 42:TIMER0 Trigger and Commutation and TIMER10 - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI10 to EXTI15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm - DCD USBFS_WKUP_IRQHandler ; 58:USBFS Wakeup - DCD TIMER7_BRK_TIMER11_IRQHandler ; 59:TIMER7 Break and TIMER11 - DCD TIMER7_UP_TIMER12_IRQHandler ; 60:TIMER7 Update and TIMER12 - DCD TIMER7_TRG_CMT_TIMER13_IRQHandler ; 61:TIMER7 Trigger and Commutation and TIMER13 - DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare - DCD 0 ; Reserved - DCD EXMC_IRQHandler ; 64:EXMC - DCD 0 ; Reserved - DCD TIMER4_IRQHandler ; 66:TIMER4 - DCD SPI2_IRQHandler ; 67:SPI2 - DCD UART3_IRQHandler ; 68:UART3 - DCD UART4_IRQHandler ; 69:UART4 - DCD TIMER5_IRQHandler ; 70:TIMER5 - DCD TIMER6_IRQHandler ; 71:TIMER6 - DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 - DCD DMA1_Channel3_IRQHandler ; 75:DMA1 Channel3 - DCD DMA1_Channel4_IRQHandler ; 76:DMA1 Channel4 - DCD ENET_IRQHandler ; 77:Ethernet - DCD ENET_WKUP_IRQHandler ; 78:Ethernet Wakeup through EXTI Line - DCD CAN1_TX_IRQHandler ; 79:CAN1 TX - DCD CAN1_RX0_IRQHandler ; 80:CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; 81:CAN1 RX1 - DCD CAN1_EWMC_IRQHandler ; 82:CAN1 EWMC - DCD USBFS_IRQHandler ; 83:USBFS - -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -;/* reset Handler */ -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT SystemInit - IMPORT __main - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -;/* dummy Exception Handlers */ -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP -HardFault_Handler\ - PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP -MemManage_Handler\ - PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP -BusFault_Handler\ - PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP -UsageFault_Handler\ - PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP -DebugMon_Handler\ - PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP -PendSV_Handler\ - PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP -SysTick_Handler\ - PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC -; /* external interrupts handler */ - EXPORT WWDGT_IRQHandler [WEAK] - EXPORT LVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FMC_IRQHandler [WEAK] - EXPORT RCU_CTC_IRQHandler [WEAK] - EXPORT EXTI0_IRQHandler [WEAK] - EXPORT EXTI1_IRQHandler [WEAK] - EXPORT EXTI2_IRQHandler [WEAK] - EXPORT EXTI3_IRQHandler [WEAK] - EXPORT EXTI4_IRQHandler [WEAK] - EXPORT DMA0_Channel0_IRQHandler [WEAK] - EXPORT DMA0_Channel1_IRQHandler [WEAK] - EXPORT DMA0_Channel2_IRQHandler [WEAK] - EXPORT DMA0_Channel3_IRQHandler [WEAK] - EXPORT DMA0_Channel4_IRQHandler [WEAK] - EXPORT DMA0_Channel5_IRQHandler [WEAK] - EXPORT DMA0_Channel6_IRQHandler [WEAK] - EXPORT ADC0_1_IRQHandler [WEAK] - EXPORT CAN0_TX_IRQHandler [WEAK] - EXPORT CAN0_RX0_IRQHandler [WEAK] - EXPORT CAN0_RX1_IRQHandler [WEAK] - EXPORT CAN0_EWMC_IRQHandler [WEAK] - EXPORT EXTI5_9_IRQHandler [WEAK] - EXPORT TIMER0_BRK_TIMER8_IRQHandler [WEAK] - EXPORT TIMER0_UP_TIMER9_IRQHandler [WEAK] - EXPORT TIMER0_TRG_CMT_TIMER10_IRQHandler [WEAK] - EXPORT TIMER0_Channel_IRQHandler [WEAK] - EXPORT TIMER1_IRQHandler [WEAK] - EXPORT TIMER2_IRQHandler [WEAK] - EXPORT TIMER3_IRQHandler [WEAK] - EXPORT I2C0_EV_IRQHandler [WEAK] - EXPORT I2C0_ER_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT SPI0_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT USART0_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT EXTI10_15_IRQHandler [WEAK] - EXPORT RTC_Alarm_IRQHandler [WEAK] - EXPORT USBFS_WKUP_IRQHandler [WEAK] - EXPORT TIMER7_BRK_TIMER11_IRQHandler [WEAK] - EXPORT TIMER7_UP_TIMER12_IRQHandler [WEAK] - EXPORT TIMER7_TRG_CMT_TIMER13_IRQHandler [WEAK] - EXPORT TIMER7_Channel_IRQHandler [WEAK] - EXPORT EXMC_IRQHandler [WEAK] - EXPORT TIMER4_IRQHandler [WEAK] - EXPORT SPI2_IRQHandler [WEAK] - EXPORT UART3_IRQHandler [WEAK] - EXPORT UART4_IRQHandler [WEAK] - EXPORT TIMER5_IRQHandler [WEAK] - EXPORT TIMER6_IRQHandler [WEAK] - EXPORT DMA1_Channel0_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_IRQHandler [WEAK] - EXPORT DMA1_Channel4_IRQHandler [WEAK] - EXPORT ENET_IRQHandler [WEAK] - EXPORT ENET_WKUP_IRQHandler [WEAK] - EXPORT CAN1_TX_IRQHandler [WEAK] - EXPORT CAN1_RX0_IRQHandler [WEAK] - EXPORT CAN1_RX1_IRQHandler [WEAK] - EXPORT CAN1_EWMC_IRQHandler [WEAK] - EXPORT USBFS_IRQHandler [WEAK] - -;/* external interrupts handler */ -WWDGT_IRQHandler -LVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FMC_IRQHandler -RCU_CTC_IRQHandler -EXTI0_IRQHandler -EXTI1_IRQHandler -EXTI2_IRQHandler -EXTI3_IRQHandler -EXTI4_IRQHandler -DMA0_Channel0_IRQHandler -DMA0_Channel1_IRQHandler -DMA0_Channel2_IRQHandler -DMA0_Channel3_IRQHandler -DMA0_Channel4_IRQHandler -DMA0_Channel5_IRQHandler -DMA0_Channel6_IRQHandler -ADC0_1_IRQHandler -CAN0_TX_IRQHandler -CAN0_RX0_IRQHandler -CAN0_RX1_IRQHandler -CAN0_EWMC_IRQHandler -EXTI5_9_IRQHandler -TIMER0_BRK_TIMER8_IRQHandler -TIMER0_UP_TIMER9_IRQHandler -TIMER0_TRG_CMT_TIMER10_IRQHandler -TIMER0_Channel_IRQHandler -TIMER1_IRQHandler -TIMER2_IRQHandler -TIMER3_IRQHandler -I2C0_EV_IRQHandler -I2C0_ER_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -SPI0_IRQHandler -SPI1_IRQHandler -USART0_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -EXTI10_15_IRQHandler -RTC_Alarm_IRQHandler -USBFS_WKUP_IRQHandler -TIMER7_BRK_TIMER11_IRQHandler -TIMER7_UP_TIMER12_IRQHandler -TIMER7_TRG_CMT_TIMER13_IRQHandler -TIMER7_Channel_IRQHandler -EXMC_IRQHandler -TIMER4_IRQHandler -SPI2_IRQHandler -UART3_IRQHandler -UART4_IRQHandler -TIMER5_IRQHandler -TIMER6_IRQHandler -DMA1_Channel0_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_IRQHandler -DMA1_Channel4_IRQHandler -ENET_IRQHandler -ENET_WKUP_IRQHandler -CAN1_TX_IRQHandler -CAN1_RX0_IRQHandler -CAN1_RX1_IRQHandler -CAN1_EWMC_IRQHandler -USBFS_IRQHandler - - B . - ENDP - - ALIGN - -; user Initial Stack & Heap - - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap PROC - LDR R0, = Heap_Mem - LDR R1, =(Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - ENDP - - ALIGN - - ENDIF - - END diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_hd.s b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_hd.s deleted file mode 100644 index cbc0764..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_hd.s +++ /dev/null @@ -1,365 +0,0 @@ -;/*! -; \file startup_gd32f30x_hd.s -; \brief start up file -; -; \version 2017-02-10, V1.0.0, firmware for GD32F30x -; \version 2018-10-10, V1.1.0, firmware for GD32F30x -; \version 2018-12-25, V2.0.0, firmware for GD32F30x -; \version 2020-09-30, V2.1.0, firmware for GD32F30x -;*/ -; -;/* -; Copyright (c) 2020, GigaDevice Semiconductor Inc. - -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN=3 -Stack_Mem SPACE Stack_Size -__initial_sp - - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000400 - - AREA HEAP, NOINIT, READWRITE, ALIGN=3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - PRESERVE8 - THUMB - -; /* reset Vector Mapped to at Address 0 */ - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - -; /* external interrupts handler */ - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper through EXTI Line detect - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_CTC_IRQHandler ; 21:RCU and CTC - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; 35:USBD HP and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; 36:USBD LP and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI5 to EXTI9 - DCD TIMER0_BRK_IRQHandler ; 40:TIMER0 Break - DCD TIMER0_UP_IRQHandler ; 41:TIMER0 Update - DCD TIMER0_TRG_CMT_IRQHandler ; 42:TIMER0 Trigger and Commutation - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI10 to EXTI15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm - DCD USBD_WKUP_IRQHandler ; 58:USBD Wakeup - DCD TIMER7_BRK_IRQHandler ; 59:TIMER7 Break - DCD TIMER7_UP_IRQHandler ; 60:TIMER7 Update - DCD TIMER7_TRG_CMT_IRQHandler ; 61:TIMER7 Trigger and Commutation - DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare - DCD ADC2_IRQHandler ; 63:ADC2 - DCD EXMC_IRQHandler ; 64:EXMC - DCD SDIO_IRQHandler ; 65:SDIO - DCD TIMER4_IRQHandler ; 66:TIMER4 - DCD SPI2_IRQHandler ; 67:SPI2 - DCD UART3_IRQHandler ; 68:UART3 - DCD UART4_IRQHandler ; 69:UART4 - DCD TIMER5_IRQHandler ; 70:TIMER5 - DCD TIMER6_IRQHandler ; 71:TIMER6 - DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 - DCD DMA1_Channel3_4_IRQHandler ; 75:DMA1 Channel3 and Channel4 - -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -;/* reset Handler */ -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT SystemInit - IMPORT __main - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -;/* dummy Exception Handlers */ -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP -HardFault_Handler\ - PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP -MemManage_Handler\ - PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP -BusFault_Handler\ - PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP -UsageFault_Handler\ - PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP -DebugMon_Handler\ - PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP -PendSV_Handler\ - PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP -SysTick_Handler\ - PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC -; /* external interrupts handler */ - EXPORT WWDGT_IRQHandler [WEAK] - EXPORT LVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FMC_IRQHandler [WEAK] - EXPORT RCU_CTC_IRQHandler [WEAK] - EXPORT EXTI0_IRQHandler [WEAK] - EXPORT EXTI1_IRQHandler [WEAK] - EXPORT EXTI2_IRQHandler [WEAK] - EXPORT EXTI3_IRQHandler [WEAK] - EXPORT EXTI4_IRQHandler [WEAK] - EXPORT DMA0_Channel0_IRQHandler [WEAK] - EXPORT DMA0_Channel1_IRQHandler [WEAK] - EXPORT DMA0_Channel2_IRQHandler [WEAK] - EXPORT DMA0_Channel3_IRQHandler [WEAK] - EXPORT DMA0_Channel4_IRQHandler [WEAK] - EXPORT DMA0_Channel5_IRQHandler [WEAK] - EXPORT DMA0_Channel6_IRQHandler [WEAK] - EXPORT ADC0_1_IRQHandler [WEAK] - EXPORT USBD_HP_CAN0_TX_IRQHandler [WEAK] - EXPORT USBD_LP_CAN0_RX0_IRQHandler [WEAK] - EXPORT CAN0_RX1_IRQHandler [WEAK] - EXPORT CAN0_EWMC_IRQHandler [WEAK] - EXPORT EXTI5_9_IRQHandler [WEAK] - EXPORT TIMER0_BRK_IRQHandler [WEAK] - EXPORT TIMER0_UP_IRQHandler [WEAK] - EXPORT TIMER0_TRG_CMT_IRQHandler [WEAK] - EXPORT TIMER0_Channel_IRQHandler [WEAK] - EXPORT TIMER1_IRQHandler [WEAK] - EXPORT TIMER2_IRQHandler [WEAK] - EXPORT TIMER3_IRQHandler [WEAK] - EXPORT I2C0_EV_IRQHandler [WEAK] - EXPORT I2C0_ER_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT SPI0_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT USART0_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT EXTI10_15_IRQHandler [WEAK] - EXPORT RTC_Alarm_IRQHandler [WEAK] - EXPORT USBD_WKUP_IRQHandler [WEAK] - EXPORT TIMER7_BRK_IRQHandler [WEAK] - EXPORT TIMER7_UP_IRQHandler [WEAK] - EXPORT TIMER7_TRG_CMT_IRQHandler [WEAK] - EXPORT TIMER7_Channel_IRQHandler [WEAK] - EXPORT ADC2_IRQHandler [WEAK] - EXPORT EXMC_IRQHandler [WEAK] - EXPORT SDIO_IRQHandler [WEAK] - EXPORT TIMER4_IRQHandler [WEAK] - EXPORT SPI2_IRQHandler [WEAK] - EXPORT UART3_IRQHandler [WEAK] - EXPORT UART4_IRQHandler [WEAK] - EXPORT TIMER5_IRQHandler [WEAK] - EXPORT TIMER6_IRQHandler [WEAK] - EXPORT DMA1_Channel0_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_4_IRQHandler [WEAK] - -;/* external interrupts handler */ -WWDGT_IRQHandler -LVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FMC_IRQHandler -RCU_CTC_IRQHandler -EXTI0_IRQHandler -EXTI1_IRQHandler -EXTI2_IRQHandler -EXTI3_IRQHandler -EXTI4_IRQHandler -DMA0_Channel0_IRQHandler -DMA0_Channel1_IRQHandler -DMA0_Channel2_IRQHandler -DMA0_Channel3_IRQHandler -DMA0_Channel4_IRQHandler -DMA0_Channel5_IRQHandler -DMA0_Channel6_IRQHandler -ADC0_1_IRQHandler -USBD_HP_CAN0_TX_IRQHandler -USBD_LP_CAN0_RX0_IRQHandler -CAN0_RX1_IRQHandler -CAN0_EWMC_IRQHandler -EXTI5_9_IRQHandler -TIMER0_BRK_IRQHandler -TIMER0_UP_IRQHandler -TIMER0_TRG_CMT_IRQHandler -TIMER0_Channel_IRQHandler -TIMER1_IRQHandler -TIMER2_IRQHandler -TIMER3_IRQHandler -I2C0_EV_IRQHandler -I2C0_ER_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -SPI0_IRQHandler -SPI1_IRQHandler -USART0_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -EXTI10_15_IRQHandler -RTC_Alarm_IRQHandler -USBD_WKUP_IRQHandler -TIMER7_BRK_IRQHandler -TIMER7_UP_IRQHandler -TIMER7_TRG_CMT_IRQHandler -TIMER7_Channel_IRQHandler -ADC2_IRQHandler -EXMC_IRQHandler -SDIO_IRQHandler -TIMER4_IRQHandler -SPI2_IRQHandler -UART3_IRQHandler -UART4_IRQHandler -TIMER5_IRQHandler -TIMER6_IRQHandler -DMA1_Channel0_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_4_IRQHandler - - B . - ENDP - - ALIGN - -; user Initial Stack & Heap - - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap PROC - LDR R0, = Heap_Mem - LDR R1, =(Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - ENDP - - ALIGN - - ENDIF - - END diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_xd.s b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_xd.s deleted file mode 100644 index 4475675..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_xd.s +++ /dev/null @@ -1,365 +0,0 @@ -;/*! -; \file startup_gd32f30x_xd.s -; \brief start up file -; -; \version 2017-02-10, V1.0.0, firmware for GD32F30x -; \version 2018-10-10, V1.1.0, firmware for GD32F30x -; \version 2018-12-25, V2.0.0, firmware for GD32F30x -; \version 2020-09-30, V2.1.0, firmware for GD32F30x -;*/ -; -;/* -; Copyright (c) 2020, GigaDevice Semiconductor Inc. - -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - -; Stack Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Stack_Size EQU 0x00000400 - - AREA STACK, NOINIT, READWRITE, ALIGN=3 -Stack_Mem SPACE Stack_Size -__initial_sp - - -; Heap Configuration -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -Heap_Size EQU 0x00000400 - - AREA HEAP, NOINIT, READWRITE, ALIGN=3 -__heap_base -Heap_Mem SPACE Heap_Size -__heap_limit - - PRESERVE8 - THUMB - -; /* reset Vector Mapped to at Address 0 */ - AREA RESET, DATA, READONLY - EXPORT __Vectors - EXPORT __Vectors_End - EXPORT __Vectors_Size - -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD MemManage_Handler ; MPU Fault Handler - DCD BusFault_Handler ; Bus Fault Handler - DCD UsageFault_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - -; /* external interrupts handler */ - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper through EXTI Line detect - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_CTC_IRQHandler ; 21:RCU and CTC - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; 35:USBD HP and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; 36:USBD LP and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI5 to EXTI9 - DCD TIMER0_BRK_TIMER8_IRQHandler ; 40:TIMER0 Break and TIMER8 - DCD TIMER0_UP_TIMER9_IRQHandler ; 41:TIMER0 Update and TIMER9 - DCD TIMER0_TRG_CMT_TIMER10_IRQHandler ; 42:TIMER0 Trigger and Commutation and TIMER10 - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI10 to EXTI15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm - DCD USBD_WKUP_IRQHandler ; 58:USBD Wakeup - DCD TIMER7_BRK_TIMER11_IRQHandler ; 59:TIMER7 Break and TIMER11 - DCD TIMER7_UP_TIMER12_IRQHandler ; 60:TIMER7 Update and TIMER12 - DCD TIMER7_TRG_CMT_TIMER13_IRQHandler ; 61:TIMER7 Trigger and Commutation and TIMER13 - DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare - DCD ADC2_IRQHandler ; 63:ADC2 - DCD EXMC_IRQHandler ; 64:EXMC - DCD SDIO_IRQHandler ; 65:SDIO - DCD TIMER4_IRQHandler ; 66:TIMER4 - DCD SPI2_IRQHandler ; 67:SPI2 - DCD UART3_IRQHandler ; 68:UART3 - DCD UART4_IRQHandler ; 69:UART4 - DCD TIMER5_IRQHandler ; 70:TIMER5 - DCD TIMER6_IRQHandler ; 71:TIMER6 - DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 - DCD DMA1_Channel3_4_IRQHandler ; 75:DMA1 Channel3 and Channel4 - -__Vectors_End - -__Vectors_Size EQU __Vectors_End - __Vectors - - AREA |.text|, CODE, READONLY - -;/* reset Handler */ -Reset_Handler PROC - EXPORT Reset_Handler [WEAK] - IMPORT SystemInit - IMPORT __main - LDR R0, =SystemInit - BLX R0 - LDR R0, =__main - BX R0 - ENDP - -;/* dummy Exception Handlers */ -NMI_Handler PROC - EXPORT NMI_Handler [WEAK] - B . - ENDP -HardFault_Handler\ - PROC - EXPORT HardFault_Handler [WEAK] - B . - ENDP -MemManage_Handler\ - PROC - EXPORT MemManage_Handler [WEAK] - B . - ENDP -BusFault_Handler\ - PROC - EXPORT BusFault_Handler [WEAK] - B . - ENDP -UsageFault_Handler\ - PROC - EXPORT UsageFault_Handler [WEAK] - B . - ENDP -SVC_Handler PROC - EXPORT SVC_Handler [WEAK] - B . - ENDP -DebugMon_Handler\ - PROC - EXPORT DebugMon_Handler [WEAK] - B . - ENDP -PendSV_Handler\ - PROC - EXPORT PendSV_Handler [WEAK] - B . - ENDP -SysTick_Handler\ - PROC - EXPORT SysTick_Handler [WEAK] - B . - ENDP - -Default_Handler PROC -; /* external interrupts handler */ - EXPORT WWDGT_IRQHandler [WEAK] - EXPORT LVD_IRQHandler [WEAK] - EXPORT TAMPER_IRQHandler [WEAK] - EXPORT RTC_IRQHandler [WEAK] - EXPORT FMC_IRQHandler [WEAK] - EXPORT RCU_CTC_IRQHandler [WEAK] - EXPORT EXTI0_IRQHandler [WEAK] - EXPORT EXTI1_IRQHandler [WEAK] - EXPORT EXTI2_IRQHandler [WEAK] - EXPORT EXTI3_IRQHandler [WEAK] - EXPORT EXTI4_IRQHandler [WEAK] - EXPORT DMA0_Channel0_IRQHandler [WEAK] - EXPORT DMA0_Channel1_IRQHandler [WEAK] - EXPORT DMA0_Channel2_IRQHandler [WEAK] - EXPORT DMA0_Channel3_IRQHandler [WEAK] - EXPORT DMA0_Channel4_IRQHandler [WEAK] - EXPORT DMA0_Channel5_IRQHandler [WEAK] - EXPORT DMA0_Channel6_IRQHandler [WEAK] - EXPORT ADC0_1_IRQHandler [WEAK] - EXPORT USBD_HP_CAN0_TX_IRQHandler [WEAK] - EXPORT USBD_LP_CAN0_RX0_IRQHandler [WEAK] - EXPORT CAN0_RX1_IRQHandler [WEAK] - EXPORT CAN0_EWMC_IRQHandler [WEAK] - EXPORT EXTI5_9_IRQHandler [WEAK] - EXPORT TIMER0_BRK_TIMER8_IRQHandler [WEAK] - EXPORT TIMER0_UP_TIMER9_IRQHandler [WEAK] - EXPORT TIMER0_TRG_CMT_TIMER10_IRQHandler [WEAK] - EXPORT TIMER0_Channel_IRQHandler [WEAK] - EXPORT TIMER1_IRQHandler [WEAK] - EXPORT TIMER2_IRQHandler [WEAK] - EXPORT TIMER3_IRQHandler [WEAK] - EXPORT I2C0_EV_IRQHandler [WEAK] - EXPORT I2C0_ER_IRQHandler [WEAK] - EXPORT I2C1_EV_IRQHandler [WEAK] - EXPORT I2C1_ER_IRQHandler [WEAK] - EXPORT SPI0_IRQHandler [WEAK] - EXPORT SPI1_IRQHandler [WEAK] - EXPORT USART0_IRQHandler [WEAK] - EXPORT USART1_IRQHandler [WEAK] - EXPORT USART2_IRQHandler [WEAK] - EXPORT EXTI10_15_IRQHandler [WEAK] - EXPORT RTC_Alarm_IRQHandler [WEAK] - EXPORT USBD_WKUP_IRQHandler [WEAK] - EXPORT TIMER7_BRK_TIMER11_IRQHandler [WEAK] - EXPORT TIMER7_UP_TIMER12_IRQHandler [WEAK] - EXPORT TIMER7_TRG_CMT_TIMER13_IRQHandler [WEAK] - EXPORT TIMER7_Channel_IRQHandler [WEAK] - EXPORT ADC2_IRQHandler [WEAK] - EXPORT EXMC_IRQHandler [WEAK] - EXPORT SDIO_IRQHandler [WEAK] - EXPORT TIMER4_IRQHandler [WEAK] - EXPORT SPI2_IRQHandler [WEAK] - EXPORT UART3_IRQHandler [WEAK] - EXPORT UART4_IRQHandler [WEAK] - EXPORT TIMER5_IRQHandler [WEAK] - EXPORT TIMER6_IRQHandler [WEAK] - EXPORT DMA1_Channel0_IRQHandler [WEAK] - EXPORT DMA1_Channel1_IRQHandler [WEAK] - EXPORT DMA1_Channel2_IRQHandler [WEAK] - EXPORT DMA1_Channel3_4_IRQHandler [WEAK] - -;/* external interrupts handler */ -WWDGT_IRQHandler -LVD_IRQHandler -TAMPER_IRQHandler -RTC_IRQHandler -FMC_IRQHandler -RCU_CTC_IRQHandler -EXTI0_IRQHandler -EXTI1_IRQHandler -EXTI2_IRQHandler -EXTI3_IRQHandler -EXTI4_IRQHandler -DMA0_Channel0_IRQHandler -DMA0_Channel1_IRQHandler -DMA0_Channel2_IRQHandler -DMA0_Channel3_IRQHandler -DMA0_Channel4_IRQHandler -DMA0_Channel5_IRQHandler -DMA0_Channel6_IRQHandler -ADC0_1_IRQHandler -USBD_HP_CAN0_TX_IRQHandler -USBD_LP_CAN0_RX0_IRQHandler -CAN0_RX1_IRQHandler -CAN0_EWMC_IRQHandler -EXTI5_9_IRQHandler -TIMER0_BRK_TIMER8_IRQHandler -TIMER0_UP_TIMER9_IRQHandler -TIMER0_TRG_CMT_TIMER10_IRQHandler -TIMER0_Channel_IRQHandler -TIMER1_IRQHandler -TIMER2_IRQHandler -TIMER3_IRQHandler -I2C0_EV_IRQHandler -I2C0_ER_IRQHandler -I2C1_EV_IRQHandler -I2C1_ER_IRQHandler -SPI0_IRQHandler -SPI1_IRQHandler -USART0_IRQHandler -USART1_IRQHandler -USART2_IRQHandler -EXTI10_15_IRQHandler -RTC_Alarm_IRQHandler -USBD_WKUP_IRQHandler -TIMER7_BRK_TIMER11_IRQHandler -TIMER7_UP_TIMER12_IRQHandler -TIMER7_TRG_CMT_TIMER13_IRQHandler -TIMER7_Channel_IRQHandler -ADC2_IRQHandler -EXMC_IRQHandler -SDIO_IRQHandler -TIMER4_IRQHandler -SPI2_IRQHandler -UART3_IRQHandler -UART4_IRQHandler -TIMER5_IRQHandler -TIMER6_IRQHandler -DMA1_Channel0_IRQHandler -DMA1_Channel1_IRQHandler -DMA1_Channel2_IRQHandler -DMA1_Channel3_4_IRQHandler - - B . - ENDP - - ALIGN - -; user Initial Stack & Heap - - IF :DEF:__MICROLIB - - EXPORT __initial_sp - EXPORT __heap_base - EXPORT __heap_limit - - ELSE - - IMPORT __use_two_region_memory - EXPORT __user_initial_stackheap - -__user_initial_stackheap PROC - LDR R0, = Heap_Mem - LDR R1, =(Stack_Mem + Stack_Size) - LDR R2, = (Heap_Mem + Heap_Size) - LDR R3, = Stack_Mem - BX LR - ENDP - - ALIGN - - ENDIF - - END diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_cl.s b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_cl.s deleted file mode 100644 index 4e1fd63..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_cl.s +++ /dev/null @@ -1,525 +0,0 @@ -;/*! -; \file startup_gd32f30x_cl.s -; \brief start up file -; -; \version 2018-10-10, V1.1.0, firmware for GD32F30x -; \version 2020-09-30, V2.1.0, firmware for GD32F30x -;*/ -; -;/* -; Copyright (c) 2020, GigaDevice Semiconductor Inc. - -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA -__vector_table - DCD sfe(CSTACK) ; top of stack - DCD Reset_Handler ; Vector Number 1,Reset Handler - - DCD NMI_Handler ; Vector Number 2,NMI Handler - DCD HardFault_Handler ; Vector Number 3,Hard Fault Handler - DCD MemManage_Handler ; Vector Number 4,MPU Fault Handler - DCD BusFault_Handler ; Vector Number 5,Bus Fault Handler - DCD UsageFault_Handler ; Vector Number 6,Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; Vector Number 11,SVCall Handler - DCD DebugMon_Handler ; Vector Number 12,Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; Vector Number 14,PendSV Handler - DCD SysTick_Handler ; Vector Number 15,SysTick Handler - - ; External Interrupts - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper through EXTI Line detect - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_CTC_IRQHandler ; 21:RCU and CTC - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD CAN0_TX_IRQHandler ; 35:CAN0 TX - DCD CAN0_RX0_IRQHandler ; 36:CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI5 to EXTI9 - DCD TIMER0_BRK_TIMER8_IRQHandler ; 40:TIMER0 Break and TIMER8 - DCD TIMER0_UP_TIMER9_IRQHandler ; 41:TIMER0 Update and TIMER9 - DCD TIMER0_TRG_CMT_TIMER10_IRQHandler ; 42:TIMER0 Trigger and Commucation and TIMER10 - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI10 to EXTI15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm - DCD USBFS_WKUP_IRQHandler ; 58:USBFS Wakeup - DCD TIMER7_BRK_TIMER11_IRQHandler ; 59:TIMER7 Break and TIMER11 - DCD TIMER7_UP_TIMER12_IRQHandler ; 60:TIMER7 Update and TIMER12 - DCD TIMER7_TRG_CMT_TIMER13_IRQHandler ; 61:TIMER7 Trigger and Commucation and TIMER13 - DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare - DCD 0 ; 63:Reserved - DCD EXMC_IRQHandler ; 64:EXMC - DCD 0 ; 65:Reserved - DCD TIMER4_IRQHandler ; 66:TIMER4 - DCD SPI2_IRQHandler ; 67:SPI2 - DCD UART3_IRQHandler ; 68:UART3 - DCD UART4_IRQHandler ; 69:UART4 - DCD TIMER5_IRQHandler ; 70:TIMER5 - DCD TIMER6_IRQHandler ; 71:TIMER6 - DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 - DCD DMA1_Channel3_IRQHandler ; 75:DMA1 Channel3 - DCD DMA1_Channel4_IRQHandler ; 76:DMA1 Channel4 - DCD ENET_IRQHandler ; 77:Ethernet - DCD ENET_WKUP_IRQHandler ; 78:Ethernet Wakeup through EXTI Line - DCD CAN1_TX_IRQHandler ; 79:CAN1 TX - DCD CAN1_RX0_IRQHandler ; 80:CAN1 RX0 - DCD CAN1_RX1_IRQHandler ; 81:CAN1 RX1 - DCD CAN1_EWMC_IRQHandler ; 82:CAN1 EWMC - DCD USBFS_IRQHandler ; 83:USBFS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:NOROOT:REORDER(2) -Reset_Handler - LDR R0, =SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDGT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -WWDGT_IRQHandler - B WWDGT_IRQHandler - - PUBWEAK LVD_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -LVD_IRQHandler - B LVD_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -FMC_IRQHandler - B FMC_IRQHandler - - PUBWEAK RCU_CTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RCU_CTC_IRQHandler - B RCU_CTC_IRQHandler - - PUBWEAK EXTI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI0_IRQHandler - B EXTI0_IRQHandler - - PUBWEAK EXTI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI1_IRQHandler - B EXTI1_IRQHandler - - PUBWEAK EXTI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI2_IRQHandler - B EXTI2_IRQHandler - - PUBWEAK EXTI3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI3_IRQHandler - B EXTI3_IRQHandler - - PUBWEAK EXTI4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI4_IRQHandler - B EXTI4_IRQHandler - - PUBWEAK DMA0_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel0_IRQHandler - B DMA0_Channel0_IRQHandler - - PUBWEAK DMA0_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel1_IRQHandler - B DMA0_Channel1_IRQHandler - - PUBWEAK DMA0_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel2_IRQHandler - B DMA0_Channel2_IRQHandler - - PUBWEAK DMA0_Channel3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel3_IRQHandler - B DMA0_Channel3_IRQHandler - - PUBWEAK DMA0_Channel4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel4_IRQHandler - B DMA0_Channel4_IRQHandler - - PUBWEAK DMA0_Channel5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel5_IRQHandler - B DMA0_Channel5_IRQHandler - - PUBWEAK DMA0_Channel6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel6_IRQHandler - B DMA0_Channel6_IRQHandler - - PUBWEAK ADC0_1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC0_1_IRQHandler - B ADC0_1_IRQHandler - - PUBWEAK CAN0_TX_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_TX_IRQHandler - B CAN0_TX_IRQHandler - - PUBWEAK CAN0_RX0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_RX0_IRQHandler - B CAN0_RX0_IRQHandler - - PUBWEAK CAN0_RX1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_RX1_IRQHandler - B CAN0_RX1_IRQHandler - - PUBWEAK CAN0_EWMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_EWMC_IRQHandler - B CAN0_EWMC_IRQHandler - - PUBWEAK EXTI5_9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI5_9_IRQHandler - B EXTI5_9_IRQHandler - - PUBWEAK TIMER0_BRK_TIMER8_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_BRK_TIMER8_IRQHandler - B TIMER0_BRK_TIMER8_IRQHandler - - PUBWEAK TIMER0_UP_TIMER9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_UP_TIMER9_IRQHandler - B TIMER0_UP_TIMER9_IRQHandler - - PUBWEAK TIMER0_TRG_CMT_TIMER10_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_TRG_CMT_TIMER10_IRQHandler - B TIMER0_TRG_CMT_TIMER10_IRQHandler - - PUBWEAK TIMER0_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_Channel_IRQHandler - B TIMER0_Channel_IRQHandler - - PUBWEAK TIMER1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER1_IRQHandler - B TIMER1_IRQHandler - - PUBWEAK TIMER2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER2_IRQHandler - B TIMER2_IRQHandler - - PUBWEAK TIMER3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER3_IRQHandler - B TIMER3_IRQHandler - - PUBWEAK I2C0_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_EV_IRQHandler - B I2C0_EV_IRQHandler - - PUBWEAK I2C0_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_ER_IRQHandler - B I2C0_ER_IRQHandler - - PUBWEAK I2C1_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_EV_IRQHandler - B I2C1_EV_IRQHandler - - PUBWEAK I2C1_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_ER_IRQHandler - B I2C1_ER_IRQHandler - - PUBWEAK SPI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI0_IRQHandler - B SPI0_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK USART0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART0_IRQHandler - B USART0_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK EXTI10_15_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI10_15_IRQHandler - B EXTI10_15_IRQHandler - - PUBWEAK RTC_Alarm_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_Alarm_IRQHandler - B RTC_Alarm_IRQHandler - - PUBWEAK USBFS_WKUP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBFS_WKUP_IRQHandler - B USBFS_WKUP_IRQHandler - - PUBWEAK TIMER7_BRK_TIMER11_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_BRK_TIMER11_IRQHandler - B TIMER7_BRK_TIMER11_IRQHandler - - PUBWEAK TIMER7_UP_TIMER12_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_UP_TIMER12_IRQHandler - B TIMER7_UP_TIMER12_IRQHandler - - PUBWEAK TIMER7_TRG_CMT_TIMER13_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_TRG_CMT_TIMER13_IRQHandler - B TIMER7_TRG_CMT_TIMER13_IRQHandler - - PUBWEAK TIMER7_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_Channel_IRQHandler - B TIMER7_Channel_IRQHandler - - PUBWEAK EXMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXMC_IRQHandler - B EXMC_IRQHandler - - PUBWEAK TIMER4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER4_IRQHandler - B TIMER4_IRQHandler - - PUBWEAK SPI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI2_IRQHandler - B SPI2_IRQHandler - - PUBWEAK UART3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART3_IRQHandler - B UART3_IRQHandler - - PUBWEAK UART4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART4_IRQHandler - B UART4_IRQHandler - - PUBWEAK TIMER5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER5_IRQHandler - B TIMER5_IRQHandler - - PUBWEAK TIMER6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER6_IRQHandler - B TIMER6_IRQHandler - - PUBWEAK DMA1_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel0_IRQHandler - B DMA1_Channel0_IRQHandler - - PUBWEAK DMA1_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel1_IRQHandler - B DMA1_Channel1_IRQHandler - - PUBWEAK DMA1_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel2_IRQHandler - B DMA1_Channel2_IRQHandler - - PUBWEAK DMA1_Channel3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel3_IRQHandler - B DMA1_Channel3_IRQHandler - - PUBWEAK DMA1_Channel4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel4_IRQHandler - B DMA1_Channel4_IRQHandler - - PUBWEAK ENET_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ENET_IRQHandler - B ENET_IRQHandler - - PUBWEAK ENET_WKUP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ENET_WKUP_IRQHandler - B ENET_WKUP_IRQHandler - - PUBWEAK CAN1_TX_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN1_TX_IRQHandler - B CAN1_TX_IRQHandler - - PUBWEAK CAN1_RX0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN1_RX0_IRQHandler - B CAN1_RX0_IRQHandler - - PUBWEAK CAN1_RX1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN1_RX1_IRQHandler - B CAN1_RX1_IRQHandler - - PUBWEAK CAN1_EWMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN1_EWMC_IRQHandler - B CAN1_EWMC_IRQHandler - - PUBWEAK USBFS_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBFS_IRQHandler - B USBFS_IRQHandler - END \ No newline at end of file diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_hd.s b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_hd.s deleted file mode 100644 index 71b952f..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_hd.s +++ /dev/null @@ -1,487 +0,0 @@ -;/*! -; \file startup_gd32f30x_hd.s -; \brief start up file -; -; \version 2018-10-10, V1.1.0, firmware for GD32F30x -; \version 2020-09-30, V2.1.0, firmware for GD32F30x -;*/ -; -;/* -; Copyright (c) 2020, GigaDevice Semiconductor Inc. - -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA -__vector_table - DCD sfe(CSTACK) ; top of stack - DCD Reset_Handler ; Vector Number 1,Reset Handler - - DCD NMI_Handler ; Vector Number 2,NMI Handler - DCD HardFault_Handler ; Vector Number 3,Hard Fault Handler - DCD MemManage_Handler ; Vector Number 4,MPU Fault Handler - DCD BusFault_Handler ; Vector Number 5,Bus Fault Handler - DCD UsageFault_Handler ; Vector Number 6,Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; Vector Number 11,SVCall Handler - DCD DebugMon_Handler ; Vector Number 12,Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; Vector Number 14,PendSV Handler - DCD SysTick_Handler ; Vector Number 15,SysTick Handler - - ; External Interrupts - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper through EXTI Line detect - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_CTC_IRQHandler ; 21:RCU and CTC - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; 35:USBD HP and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; 36:USBD LP and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI5 to EXTI9 - DCD TIMER0_BRK_IRQHandler ; 40:TIMER0 Break - DCD TIMER0_UP_IRQHandler ; 41:TIMER0 Update - DCD TIMER0_TRG_CMT_IRQHandler ; 42:TIMER0 Trigger and Commucation - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI10 to EXTI15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm - DCD USBD_WKUP_IRQHandler ; 58:USBD Wakeup - DCD TIMER7_BRK_IRQHandler ; 59:TIMER7 Break - DCD TIMER7_UP_IRQHandler ; 60:TIMER7 Update - DCD TIMER7_TRG_CMT_IRQHandler ; 61:TIMER7 Trigger and Commucation - DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare - DCD ADC2_IRQHandler ; 63:ADC2 - DCD EXMC_IRQHandler ; 64:EXMC - DCD SDIO_IRQHandler ; 65:SDIO - DCD TIMER4_IRQHandler ; 66:TIMER4 - DCD SPI2_IRQHandler ; 67:SPI2 - DCD UART3_IRQHandler ; 68:UART3 - DCD UART4_IRQHandler ; 69:UART4 - DCD TIMER5_IRQHandler ; 70:TIMER5 - DCD TIMER6_IRQHandler ; 71:TIMER6 - DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 - DCD DMA1_Channel3_4_IRQHandler ; 75:DMA1 Channel3 and channel4 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:NOROOT:REORDER(2) -Reset_Handler - LDR R0, =SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDGT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -WWDGT_IRQHandler - B WWDGT_IRQHandler - - PUBWEAK LVD_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -LVD_IRQHandler - B LVD_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -FMC_IRQHandler - B FMC_IRQHandler - - PUBWEAK RCU_CTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RCU_CTC_IRQHandler - B RCU_CTC_IRQHandler - - PUBWEAK EXTI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI0_IRQHandler - B EXTI0_IRQHandler - - PUBWEAK EXTI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI1_IRQHandler - B EXTI1_IRQHandler - - PUBWEAK EXTI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI2_IRQHandler - B EXTI2_IRQHandler - - PUBWEAK EXTI3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI3_IRQHandler - B EXTI3_IRQHandler - - PUBWEAK EXTI4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI4_IRQHandler - B EXTI4_IRQHandler - - PUBWEAK DMA0_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel0_IRQHandler - B DMA0_Channel0_IRQHandler - - PUBWEAK DMA0_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel1_IRQHandler - B DMA0_Channel1_IRQHandler - - PUBWEAK DMA0_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel2_IRQHandler - B DMA0_Channel2_IRQHandler - - PUBWEAK DMA0_Channel3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel3_IRQHandler - B DMA0_Channel3_IRQHandler - - PUBWEAK DMA0_Channel4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel4_IRQHandler - B DMA0_Channel4_IRQHandler - - PUBWEAK DMA0_Channel5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel5_IRQHandler - B DMA0_Channel5_IRQHandler - - PUBWEAK DMA0_Channel6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel6_IRQHandler - B DMA0_Channel6_IRQHandler - - PUBWEAK ADC0_1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC0_1_IRQHandler - B ADC0_1_IRQHandler - - PUBWEAK USBD_HP_CAN0_TX_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_HP_CAN0_TX_IRQHandler - B USBD_HP_CAN0_TX_IRQHandler - - PUBWEAK USBD_LP_CAN0_RX0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_LP_CAN0_RX0_IRQHandler - B USBD_LP_CAN0_RX0_IRQHandler - - PUBWEAK CAN0_RX1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_RX1_IRQHandler - B CAN0_RX1_IRQHandler - - PUBWEAK CAN0_EWMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_EWMC_IRQHandler - B CAN0_EWMC_IRQHandler - - PUBWEAK EXTI5_9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI5_9_IRQHandler - B EXTI5_9_IRQHandler - - PUBWEAK TIMER0_BRK_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_BRK_IRQHandler - B TIMER0_BRK_IRQHandler - - PUBWEAK TIMER0_UP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_UP_IRQHandler - B TIMER0_UP_IRQHandler - - PUBWEAK TIMER0_TRG_CMT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_TRG_CMT_IRQHandler - B TIMER0_TRG_CMT_IRQHandler - - PUBWEAK TIMER0_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_Channel_IRQHandler - B TIMER0_Channel_IRQHandler - - PUBWEAK TIMER1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER1_IRQHandler - B TIMER1_IRQHandler - - PUBWEAK TIMER2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER2_IRQHandler - B TIMER2_IRQHandler - - PUBWEAK TIMER3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER3_IRQHandler - B TIMER3_IRQHandler - - PUBWEAK I2C0_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_EV_IRQHandler - B I2C0_EV_IRQHandler - - PUBWEAK I2C0_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_ER_IRQHandler - B I2C0_ER_IRQHandler - - PUBWEAK I2C1_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_EV_IRQHandler - B I2C1_EV_IRQHandler - - PUBWEAK I2C1_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_ER_IRQHandler - B I2C1_ER_IRQHandler - - PUBWEAK SPI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI0_IRQHandler - B SPI0_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK USART0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART0_IRQHandler - B USART0_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK EXTI10_15_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI10_15_IRQHandler - B EXTI10_15_IRQHandler - - PUBWEAK RTC_Alarm_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_Alarm_IRQHandler - B RTC_Alarm_IRQHandler - - PUBWEAK USBD_WKUP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_WKUP_IRQHandler - B USBD_WKUP_IRQHandler - - PUBWEAK TIMER7_BRK_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_BRK_IRQHandler - B TIMER7_BRK_IRQHandler - - PUBWEAK TIMER7_UP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_UP_IRQHandler - B TIMER7_UP_IRQHandler - - PUBWEAK TIMER7_TRG_CMT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_TRG_CMT_IRQHandler - B TIMER7_TRG_CMT_IRQHandler - - PUBWEAK TIMER7_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_Channel_IRQHandler - B TIMER7_Channel_IRQHandler - - PUBWEAK ADC2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC2_IRQHandler - B ADC2_IRQHandler - - PUBWEAK EXMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXMC_IRQHandler - B EXMC_IRQHandler - - PUBWEAK SDIO_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SDIO_IRQHandler - B SDIO_IRQHandler - - PUBWEAK TIMER4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER4_IRQHandler - B TIMER4_IRQHandler - - PUBWEAK SPI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI2_IRQHandler - B SPI2_IRQHandler - - PUBWEAK UART3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART3_IRQHandler - B UART3_IRQHandler - - PUBWEAK UART4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART4_IRQHandler - B UART4_IRQHandler - - PUBWEAK TIMER5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER5_IRQHandler - B TIMER5_IRQHandler - - PUBWEAK TIMER6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER6_IRQHandler - B TIMER6_IRQHandler - - PUBWEAK DMA1_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel0_IRQHandler - B DMA1_Channel0_IRQHandler - - PUBWEAK DMA1_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel1_IRQHandler - B DMA1_Channel1_IRQHandler - - PUBWEAK DMA1_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel2_IRQHandler - B DMA1_Channel2_IRQHandler - - PUBWEAK DMA1_Channel3_4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel3_4_IRQHandler - B DMA1_Channel3_4_IRQHandler - END \ No newline at end of file diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_xd.s b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_xd.s deleted file mode 100644 index 1eb4659..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_xd.s +++ /dev/null @@ -1,487 +0,0 @@ -;/*! -; \file startup_gd32f30x_xd.s -; \brief start up file -; -; \version 2018-10-10, V1.1.0, firmware for GD32F30x -; \version 2020-09-30, V2.1.0, firmware for GD32F30x -;*/ -; -;/* -; Copyright (c) 2020, GigaDevice Semiconductor Inc. - -; 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 the copyright holder nor the names of its contributors -; may be used to endorse or promote products derived from this software without -; specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -;*/ - - MODULE ?cstartup - - ;; Forward declaration of sections. - SECTION CSTACK:DATA:NOROOT(3) - - SECTION .intvec:CODE:NOROOT(2) - - EXTERN __iar_program_start - EXTERN SystemInit - PUBLIC __vector_table - - DATA -__vector_table - DCD sfe(CSTACK) ; top of stack - DCD Reset_Handler ; Vector Number 1,Reset Handler - - DCD NMI_Handler ; Vector Number 2,NMI Handler - DCD HardFault_Handler ; Vector Number 3,Hard Fault Handler - DCD MemManage_Handler ; Vector Number 4,MPU Fault Handler - DCD BusFault_Handler ; Vector Number 5,Bus Fault Handler - DCD UsageFault_Handler ; Vector Number 6,Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD SVC_Handler ; Vector Number 11,SVCall Handler - DCD DebugMon_Handler ; Vector Number 12,Debug Monitor Handler - DCD 0 ; Reserved - DCD PendSV_Handler ; Vector Number 14,PendSV Handler - DCD SysTick_Handler ; Vector Number 15,SysTick Handler - - ; External Interrupts - DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer - DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect - DCD TAMPER_IRQHandler ; 18:Tamper through EXTI Line detect - DCD RTC_IRQHandler ; 19:RTC through EXTI Line - DCD FMC_IRQHandler ; 20:FMC - DCD RCU_CTC_IRQHandler ; 21:RCU and CTC - DCD EXTI0_IRQHandler ; 22:EXTI Line 0 - DCD EXTI1_IRQHandler ; 23:EXTI Line 1 - DCD EXTI2_IRQHandler ; 24:EXTI Line 2 - DCD EXTI3_IRQHandler ; 25:EXTI Line 3 - DCD EXTI4_IRQHandler ; 26:EXTI Line 4 - DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel0 - DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel1 - DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel2 - DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel3 - DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel4 - DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel5 - DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel6 - DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 - DCD USBD_HP_CAN0_TX_IRQHandler ; 35:USBD HP and CAN0 TX - DCD USBD_LP_CAN0_RX0_IRQHandler ; 36:USBD LP and CAN0 RX0 - DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 - DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC - DCD EXTI5_9_IRQHandler ; 39:EXTI5 to EXTI9 - DCD TIMER0_BRK_TIMER8_IRQHandler ; 40:TIMER0 Break and TIMER8 - DCD TIMER0_UP_TIMER9_IRQHandler ; 41:TIMER0 Update and TIMER9 - DCD TIMER0_TRG_CMT_TIMER10_IRQHandler ; 42:TIMER0 Trigger and Commucation and TIMER10 - DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare - DCD TIMER1_IRQHandler ; 44:TIMER1 - DCD TIMER2_IRQHandler ; 45:TIMER2 - DCD TIMER3_IRQHandler ; 46:TIMER3 - DCD I2C0_EV_IRQHandler ; 47:I2C0 Event - DCD I2C0_ER_IRQHandler ; 48:I2C0 Error - DCD I2C1_EV_IRQHandler ; 49:I2C1 Event - DCD I2C1_ER_IRQHandler ; 50:I2C1 Error - DCD SPI0_IRQHandler ; 51:SPI0 - DCD SPI1_IRQHandler ; 52:SPI1 - DCD USART0_IRQHandler ; 53:USART0 - DCD USART1_IRQHandler ; 54:USART1 - DCD USART2_IRQHandler ; 55:USART2 - DCD EXTI10_15_IRQHandler ; 56:EXTI10 to EXTI15 - DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm - DCD USBD_WKUP_IRQHandler ; 58:USBD Wakeup - DCD TIMER7_BRK_TIMER11_IRQHandler ; 59:TIMER7 Break and TIMER11 - DCD TIMER7_UP_TIMER12_IRQHandler ; 60:TIMER7 Update and TIMER12 - DCD TIMER7_TRG_CMT_TIMER13_IRQHandler ; 61:TIMER7 Trigger and Commucation and TIMER13 - DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare - DCD ADC2_IRQHandler ; 63:ADC2 - DCD EXMC_IRQHandler ; 64:EXMC - DCD SDIO_IRQHandler ; 65:SDIO - DCD TIMER4_IRQHandler ; 66:TIMER4 - DCD SPI2_IRQHandler ; 67:SPI2 - DCD UART3_IRQHandler ; 68:UART3 - DCD UART4_IRQHandler ; 69:UART4 - DCD TIMER5_IRQHandler ; 70:TIMER5 - DCD TIMER6_IRQHandler ; 71:TIMER6 - DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 - DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 - DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 - DCD DMA1_Channel3_4_IRQHandler ; 75:DMA1 Channel3 and channel4 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Default interrupt handlers. -;; - THUMB - - PUBWEAK Reset_Handler - SECTION .text:CODE:NOROOT:REORDER(2) -Reset_Handler - LDR R0, =SystemInit - BLX R0 - LDR R0, =__iar_program_start - BX R0 - - PUBWEAK NMI_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -NMI_Handler - B NMI_Handler - - PUBWEAK HardFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -HardFault_Handler - B HardFault_Handler - - PUBWEAK MemManage_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -MemManage_Handler - B MemManage_Handler - - PUBWEAK BusFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -BusFault_Handler - B BusFault_Handler - - PUBWEAK UsageFault_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -UsageFault_Handler - B UsageFault_Handler - - PUBWEAK SVC_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SVC_Handler - B SVC_Handler - - PUBWEAK DebugMon_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -DebugMon_Handler - B DebugMon_Handler - - PUBWEAK PendSV_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -PendSV_Handler - B PendSV_Handler - - PUBWEAK SysTick_Handler - SECTION .text:CODE:NOROOT:REORDER(1) -SysTick_Handler - B SysTick_Handler - - PUBWEAK WWDGT_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -WWDGT_IRQHandler - B WWDGT_IRQHandler - - PUBWEAK LVD_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -LVD_IRQHandler - B LVD_IRQHandler - - PUBWEAK TAMPER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler - - PUBWEAK RTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_IRQHandler - B RTC_IRQHandler - - PUBWEAK FMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -FMC_IRQHandler - B FMC_IRQHandler - - PUBWEAK RCU_CTC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RCU_CTC_IRQHandler - B RCU_CTC_IRQHandler - - PUBWEAK EXTI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI0_IRQHandler - B EXTI0_IRQHandler - - PUBWEAK EXTI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI1_IRQHandler - B EXTI1_IRQHandler - - PUBWEAK EXTI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI2_IRQHandler - B EXTI2_IRQHandler - - PUBWEAK EXTI3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI3_IRQHandler - B EXTI3_IRQHandler - - PUBWEAK EXTI4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI4_IRQHandler - B EXTI4_IRQHandler - - PUBWEAK DMA0_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel0_IRQHandler - B DMA0_Channel0_IRQHandler - - PUBWEAK DMA0_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel1_IRQHandler - B DMA0_Channel1_IRQHandler - - PUBWEAK DMA0_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel2_IRQHandler - B DMA0_Channel2_IRQHandler - - PUBWEAK DMA0_Channel3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel3_IRQHandler - B DMA0_Channel3_IRQHandler - - PUBWEAK DMA0_Channel4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel4_IRQHandler - B DMA0_Channel4_IRQHandler - - PUBWEAK DMA0_Channel5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel5_IRQHandler - B DMA0_Channel5_IRQHandler - - PUBWEAK DMA0_Channel6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA0_Channel6_IRQHandler - B DMA0_Channel6_IRQHandler - - PUBWEAK ADC0_1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC0_1_IRQHandler - B ADC0_1_IRQHandler - - PUBWEAK USBD_HP_CAN0_TX_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_HP_CAN0_TX_IRQHandler - B USBD_HP_CAN0_TX_IRQHandler - - PUBWEAK USBD_LP_CAN0_RX0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_LP_CAN0_RX0_IRQHandler - B USBD_LP_CAN0_RX0_IRQHandler - - PUBWEAK CAN0_RX1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_RX1_IRQHandler - B CAN0_RX1_IRQHandler - - PUBWEAK CAN0_EWMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -CAN0_EWMC_IRQHandler - B CAN0_EWMC_IRQHandler - - PUBWEAK EXTI5_9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI5_9_IRQHandler - B EXTI5_9_IRQHandler - - PUBWEAK TIMER0_BRK_TIMER8_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_BRK_TIMER8_IRQHandler - B TIMER0_BRK_TIMER8_IRQHandler - - PUBWEAK TIMER0_UP_TIMER9_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_UP_TIMER9_IRQHandler - B TIMER0_UP_TIMER9_IRQHandler - - PUBWEAK TIMER0_TRG_CMT_TIMER10_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_TRG_CMT_TIMER10_IRQHandler - B TIMER0_TRG_CMT_TIMER10_IRQHandler - - PUBWEAK TIMER0_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER0_Channel_IRQHandler - B TIMER0_Channel_IRQHandler - - PUBWEAK TIMER1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER1_IRQHandler - B TIMER1_IRQHandler - - PUBWEAK TIMER2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER2_IRQHandler - B TIMER2_IRQHandler - - PUBWEAK TIMER3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER3_IRQHandler - B TIMER3_IRQHandler - - PUBWEAK I2C0_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_EV_IRQHandler - B I2C0_EV_IRQHandler - - PUBWEAK I2C0_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C0_ER_IRQHandler - B I2C0_ER_IRQHandler - - PUBWEAK I2C1_EV_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_EV_IRQHandler - B I2C1_EV_IRQHandler - - PUBWEAK I2C1_ER_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -I2C1_ER_IRQHandler - B I2C1_ER_IRQHandler - - PUBWEAK SPI0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI0_IRQHandler - B SPI0_IRQHandler - - PUBWEAK SPI1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI1_IRQHandler - B SPI1_IRQHandler - - PUBWEAK USART0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART0_IRQHandler - B USART0_IRQHandler - - PUBWEAK USART1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART1_IRQHandler - B USART1_IRQHandler - - PUBWEAK USART2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USART2_IRQHandler - B USART2_IRQHandler - - PUBWEAK EXTI10_15_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXTI10_15_IRQHandler - B EXTI10_15_IRQHandler - - PUBWEAK RTC_Alarm_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -RTC_Alarm_IRQHandler - B RTC_Alarm_IRQHandler - - PUBWEAK USBD_WKUP_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -USBD_WKUP_IRQHandler - B USBD_WKUP_IRQHandler - - PUBWEAK TIMER7_BRK_TIMER11_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_BRK_TIMER11_IRQHandler - B TIMER7_BRK_TIMER11_IRQHandler - - PUBWEAK TIMER7_UP_TIMER12_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_UP_TIMER12_IRQHandler - B TIMER7_UP_TIMER12_IRQHandler - - PUBWEAK TIMER7_TRG_CMT_TIMER13_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_TRG_CMT_TIMER13_IRQHandler - B TIMER7_TRG_CMT_TIMER13_IRQHandler - - PUBWEAK TIMER7_Channel_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER7_Channel_IRQHandler - B TIMER7_Channel_IRQHandler - - PUBWEAK ADC2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -ADC2_IRQHandler - B ADC2_IRQHandler - - PUBWEAK EXMC_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -EXMC_IRQHandler - B EXMC_IRQHandler - - PUBWEAK SDIO_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SDIO_IRQHandler - B SDIO_IRQHandler - - PUBWEAK TIMER4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER4_IRQHandler - B TIMER4_IRQHandler - - PUBWEAK SPI2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -SPI2_IRQHandler - B SPI2_IRQHandler - - PUBWEAK UART3_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART3_IRQHandler - B UART3_IRQHandler - - PUBWEAK UART4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -UART4_IRQHandler - B UART4_IRQHandler - - PUBWEAK TIMER5_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER5_IRQHandler - B TIMER5_IRQHandler - - PUBWEAK TIMER6_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -TIMER6_IRQHandler - B TIMER6_IRQHandler - - PUBWEAK DMA1_Channel0_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel0_IRQHandler - B DMA1_Channel0_IRQHandler - - PUBWEAK DMA1_Channel1_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel1_IRQHandler - B DMA1_Channel1_IRQHandler - - PUBWEAK DMA1_Channel2_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel2_IRQHandler - B DMA1_Channel2_IRQHandler - - PUBWEAK DMA1_Channel3_4_IRQHandler - SECTION .text:CODE:NOROOT:REORDER(1) -DMA1_Channel3_4_IRQHandler - B DMA1_Channel3_4_IRQHandler - END \ No newline at end of file diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/system_gd32f30x.c b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/system_gd32f30x.c deleted file mode 100644 index d3ffd43..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/GD/GD32F30x/Source/system_gd32f30x.c +++ /dev/null @@ -1,991 +0,0 @@ -/*! - \file system_gd32f30x.c - \brief CMSIS Cortex-M4 Device Peripheral Access Layer Source File for - GD32F30x Device Series -*/ - -/* Copyright (c) 2012 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. - ---------------------------------------------------------------------------*/ -/* This file refers the CMSIS standard, some adjustments are made according to GigaDevice chips */ - -#include "gd32f30x.h" - -/* system frequency define */ -#define __IRC8M (IRC8M_VALUE) /* internal 8 MHz RC oscillator frequency */ -#define __HXTAL (HXTAL_VALUE) /* high speed crystal oscillator frequency */ -#define __SYS_OSC_CLK (__IRC8M) /* main oscillator frequency */ - -/* select a system clock by uncommenting the following line */ -/* use IRC8M */ -//#define __SYSTEM_CLOCK_IRC8M (uint32_t)(__IRC8M) -//#define __SYSTEM_CLOCK_48M_PLL_IRC8M (uint32_t)(48000000) -//#define __SYSTEM_CLOCK_72M_PLL_IRC8M (uint32_t)(72000000) -//#define __SYSTEM_CLOCK_108M_PLL_IRC8M (uint32_t)(108000000) -//#define __SYSTEM_CLOCK_120M_PLL_IRC8M (uint32_t)(120000000) - -/* use HXTAL(XD series CK_HXTAL = 8M, CL series CK_HXTAL = 25M) */ -//#define __SYSTEM_CLOCK_HXTAL (uint32_t)(__HXTAL) -//#define __SYSTEM_CLOCK_48M_PLL_HXTAL (uint32_t)(48000000) -//#define __SYSTEM_CLOCK_72M_PLL_HXTAL (uint32_t)(72000000) -//#define __SYSTEM_CLOCK_108M_PLL_HXTAL (uint32_t)(108000000) -#define __SYSTEM_CLOCK_120M_PLL_HXTAL (uint32_t)(120000000) - -#define SEL_IRC8M 0x00U -#define SEL_HXTAL 0x01U -#define SEL_PLL 0x02U -#define RCU_MODIFY {volatile uint32_t i; \ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV2; \ - for(i=0;i<20000;i++);} - -/* set the system clock frequency and declare the system clock configuration function */ -#ifdef __SYSTEM_CLOCK_IRC8M -uint32_t SystemCoreClock = __SYSTEM_CLOCK_IRC8M; -static void system_clock_8m_irc8m(void); -#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_IRC8M; -static void system_clock_48m_irc8m(void); -#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_IRC8M; -static void system_clock_72m_irc8m(void); -#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_IRC8M; -static void system_clock_108m_irc8m(void); -#elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_120M_PLL_IRC8M; -static void system_clock_120m_irc8m(void); - -#elif defined (__SYSTEM_CLOCK_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_HXTAL; -static void system_clock_hxtal(void); -#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_HXTAL; -static void system_clock_48m_hxtal(void); -#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_HXTAL; -static void system_clock_72m_hxtal(void); -#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_HXTAL; -static void system_clock_108m_hxtal(void); -#elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) -uint32_t SystemCoreClock = __SYSTEM_CLOCK_120M_PLL_HXTAL; -static void system_clock_120m_hxtal(void); -#endif /* __SYSTEM_CLOCK_IRC8M */ - -/* configure the system clock */ -static void system_clock_config(void); - -/*! - \brief setup the microcontroller system, initialize the system - \param[in] none - \param[out] none - \retval none -*/ -void SystemInit (void) -{ - /* FPU settings */ -#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ -#endif - /* reset the RCU clock configuration to the default reset state */ - /* Set IRC8MEN bit */ - RCU_CTL |= RCU_CTL_IRC8MEN; - - RCU_MODIFY - - /* Reset CFG0 and CFG1 registers */ - RCU_CFG0 = 0x00000000U; - RCU_CFG1 = 0x00000000U; - -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - /* reset HXTALEN, CKMEN and PLLEN bits */ - RCU_CTL &= ~(RCU_CTL_PLLEN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN); - /* disable all interrupts */ - RCU_INT = 0x009f0000U; -#elif defined(GD32F30X_CL) - /* Reset HXTALEN, CKMEN, PLLEN, PLL1EN and PLL2EN bits */ - RCU_CTL &= ~(RCU_CTL_PLLEN |RCU_CTL_PLL1EN | RCU_CTL_PLL2EN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN); - /* disable all interrupts */ - RCU_INT = 0x00ff0000U; -#endif - - /* reset HXTALBPS bit */ - RCU_CTL &= ~(RCU_CTL_HXTALBPS); - - /* configure the system clock source, PLL Multiplier, AHB/APBx prescalers and Flash settings */ - system_clock_config(); -} -/*! - \brief configure the system clock - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_config(void) -{ -#ifdef __SYSTEM_CLOCK_IRC8M - system_clock_8m_irc8m(); -#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) - system_clock_48m_irc8m(); -#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) - system_clock_72m_irc8m(); -#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) - system_clock_108m_irc8m(); -#elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) - system_clock_120m_irc8m(); - -#elif defined (__SYSTEM_CLOCK_HXTAL) - system_clock_hxtal(); -#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) - system_clock_48m_hxtal(); -#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) - system_clock_72m_hxtal(); -#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) - system_clock_108m_hxtal(); -#elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) - system_clock_120m_hxtal(); -#endif /* __SYSTEM_CLOCK_IRC8M */ -} - -#ifdef __SYSTEM_CLOCK_IRC8M -/*! - \brief configure the system clock to 8M by IRC8M - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_8m_irc8m(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - - /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); - } - while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ - while(1){ - } - } - - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* select IRC8M as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_IRC8M; - - /* wait until IRC8M is selected as system clock */ - while(0U != (RCU_CFG0 & RCU_SCSS_IRC8M)){ - } -} - -#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) -/*! - \brief configure the system clock to 48M by PLL which selects IRC8M as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_48m_irc8m(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - - /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); - } - while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ - while(1){ - } - } - - /* LDO output voltage high mode */ - RCU_APB1EN |= RCU_APB1EN_PMUEN; - PMU_CTL |= PMU_CTL_LDOVS; - - /* IRC8M is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* CK_PLL = (CK_IRC8M/2) * 12 = 48 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= RCU_PLL_MUL12; - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* enable the high-drive to extend the clock frequency to 120 MHz */ - PMU_CTL |= PMU_CTL_HDEN; - while(0U == (PMU_CS & PMU_CS_HDRF)){ - } - - /* select the high-drive mode */ - PMU_CTL |= PMU_CTL_HDS; - while(0U == (PMU_CS & PMU_CS_HDSRF)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) -/*! - \brief configure the system clock to 72M by PLL which selects IRC8M as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_72m_irc8m(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - - /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); - }while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ - while(1){ - } - } - - /* LDO output voltage high mode */ - RCU_APB1EN |= RCU_APB1EN_PMUEN; - PMU_CTL |= PMU_CTL_LDOVS; - - /* IRC8M is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* CK_PLL = (CK_IRC8M/2) * 18 = 72 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= RCU_PLL_MUL18; - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* enable the high-drive to extend the clock frequency to 120 MHz */ - PMU_CTL |= PMU_CTL_HDEN; - while(0U == (PMU_CS & PMU_CS_HDRF)){ - } - - /* select the high-drive mode */ - PMU_CTL |= PMU_CTL_HDS; - while(0U == (PMU_CS & PMU_CS_HDSRF)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) -/*! - \brief configure the system clock to 108M by PLL which selects IRC8M as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_108m_irc8m(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - - /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); - }while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ - while(1){ - } - } - - /* LDO output voltage high mode */ - RCU_APB1EN |= RCU_APB1EN_PMUEN; - PMU_CTL |= PMU_CTL_LDOVS; - - /* IRC8M is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* CK_PLL = (CK_IRC8M/2) * 27 = 108 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= RCU_PLL_MUL27; - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* enable the high-drive to extend the clock frequency to 120 MHz */ - PMU_CTL |= PMU_CTL_HDEN; - while(0U == (PMU_CS & PMU_CS_HDRF)){ - } - - /* select the high-drive mode */ - PMU_CTL |= PMU_CTL_HDS; - while(0U == (PMU_CS & PMU_CS_HDSRF)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) -/*! - \brief configure the system clock to 120M by PLL which selects IRC8M as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_120m_irc8m(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - - /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); - }while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ - while(1){ - } - } - - /* LDO output voltage high mode */ - RCU_APB1EN |= RCU_APB1EN_PMUEN; - PMU_CTL |= PMU_CTL_LDOVS; - - /* IRC8M is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* CK_PLL = (CK_IRC8M/2) * 30 = 120 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= RCU_PLL_MUL30; - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* enable the high-drive to extend the clock frequency to 120 MHz */ - PMU_CTL |= PMU_CTL_HDEN; - while(0U == (PMU_CS & PMU_CS_HDRF)){ - } - - /* select the high-drive mode */ - PMU_CTL |= PMU_CTL_HDS; - while(0U == (PMU_CS & PMU_CS_HDSRF)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_HXTAL) -/*! - \brief configure the system clock to HXTAL - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - - /* select HXTAL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_HXTAL; - - /* wait until HXTAL is selected as system clock */ - while(0 == (RCU_CFG0 & RCU_SCSS_HXTAL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) -/*! - \brief configure the system clock to 48M by PLL which selects HXTAL(8M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_48m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - RCU_APB1EN |= RCU_APB1EN_PMUEN; - PMU_CTL |= PMU_CTL_LDOVS; - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 12 = 48 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= RCU_PLL_MUL12; - -#elif defined(GD32F30X_CL) - /* CK_PLL = (CK_PREDIV0) * 12 = 48 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL12); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ - } -#endif /* GD32F30X_HD and GD32F30X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* enable the high-drive to extend the clock frequency to 120 MHz */ - PMU_CTL |= PMU_CTL_HDEN; - while(0U == (PMU_CS & PMU_CS_HDRF)){ - } - - /* select the high-drive mode */ - PMU_CTL |= PMU_CTL_HDS; - while(0U == (PMU_CS & PMU_CS_HDSRF)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} -#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) -/*! - \brief configure the system clock to 72M by PLL which selects HXTAL(8M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_72m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - RCU_APB1EN |= RCU_APB1EN_PMUEN; - PMU_CTL |= PMU_CTL_LDOVS; - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 18 = 72 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= RCU_PLL_MUL18; - -#elif defined(GD32F30X_CL) - /* CK_PLL = (CK_PREDIV0) * 18 = 72 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL18); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ - } -#endif /* GD32F30X_HD and GD32F30X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* enable the high-drive to extend the clock frequency to 120 MHz */ - PMU_CTL |= PMU_CTL_HDEN; - while(0U == (PMU_CS & PMU_CS_HDRF)){ - } - - /* select the high-drive mode */ - PMU_CTL |= PMU_CTL_HDS; - while(0U == (PMU_CS & PMU_CS_HDSRF)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) -/*! - \brief configure the system clock to 108M by PLL which selects HXTAL(8M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_108m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - RCU_APB1EN |= RCU_APB1EN_PMUEN; - PMU_CTL |= PMU_CTL_LDOVS; - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 27 = 108 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= RCU_PLL_MUL27; - -#elif defined(GD32F30X_CL) - /* CK_PLL = (CK_PREDIV0) * 27 = 108 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL27); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ - } -#endif /* GD32F30X_HD and GD32F30X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* enable the high-drive to extend the clock frequency to 120 MHz */ - PMU_CTL |= PMU_CTL_HDEN; - while(0U == (PMU_CS & PMU_CS_HDRF)){ - } - - /* select the high-drive mode */ - PMU_CTL |= PMU_CTL_HDS; - while(0U == (PMU_CS & PMU_CS_HDSRF)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} - -#elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) -/*! - \brief configure the system clock to 120M by PLL which selects HXTAL(8M) as its clock source - \param[in] none - \param[out] none - \retval none -*/ -static void system_clock_120m_hxtal(void) -{ - uint32_t timeout = 0U; - uint32_t stab_flag = 0U; - - /* enable HXTAL */ - RCU_CTL |= RCU_CTL_HXTALEN; - - /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ - do{ - timeout++; - stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); - }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); - - /* if fail */ - if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ - while(1){ - } - } - - RCU_APB1EN |= RCU_APB1EN_PMUEN; - PMU_CTL |= PMU_CTL_LDOVS; - - /* HXTAL is stable */ - /* AHB = SYSCLK */ - RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; - /* APB2 = AHB/1 */ - RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; - /* APB1 = AHB/2 */ - RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; - -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - /* select HXTAL/2 as clock source */ - RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_CFG0_PREDV0); - - /* CK_PLL = (CK_HXTAL/2) * 30 = 120 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= RCU_PLL_MUL30; - -#elif defined(GD32F30X_CL) - /* CK_PLL = (CK_PREDIV0) * 30 = 120 MHz */ - RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL30); - - /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ - RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); - RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); - - /* enable PLL1 */ - RCU_CTL |= RCU_CTL_PLL1EN; - /* wait till PLL1 is ready */ - while((RCU_CTL & RCU_CTL_PLL1STB) == 0U){ - } -#endif /* GD32F30X_HD and GD32F30X_XD */ - - /* enable PLL */ - RCU_CTL |= RCU_CTL_PLLEN; - - /* wait until PLL is stable */ - while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ - } - - /* enable the high-drive to extend the clock frequency to 120 MHz */ - PMU_CTL |= PMU_CTL_HDEN; - while(0U == (PMU_CS & PMU_CS_HDRF)){ - } - - /* select the high-drive mode */ - PMU_CTL |= PMU_CTL_HDS; - while(0U == (PMU_CS & PMU_CS_HDSRF)){ - } - - /* select PLL as system clock */ - RCU_CFG0 &= ~RCU_CFG0_SCS; - RCU_CFG0 |= RCU_CKSYSSRC_PLL; - - /* wait until PLL is selected as system clock */ - while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ - } -} -#endif /* __SYSTEM_CLOCK_IRC8M */ - -/*! - \brief update the SystemCoreClock with current core clock retrieved from cpu registers - \param[in] none - \param[out] none - \retval none -*/ -void SystemCoreClockUpdate (void) -{ - uint32_t sws; - uint32_t pllsel, pllpresel, predv0sel, pllmf,ck_src; -#ifdef GD32F30X_CL - uint32_t predv0, predv1, pll1mf; -#endif /* GD32F30X_CL */ - - sws = GET_BITS(RCU_CFG0, 2, 3); - switch(sws){ - /* IRC8M is selected as CK_SYS */ - case SEL_IRC8M: - SystemCoreClock = IRC8M_VALUE; - break; - /* HXTAL is selected as CK_SYS */ - case SEL_HXTAL: - SystemCoreClock = HXTAL_VALUE; - break; - /* PLL is selected as CK_SYS */ - case SEL_PLL: - /* PLL clock source selection, HXTAL, IRC48M or IRC8M/2 */ - pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL); - - if (RCU_PLLSRC_HXTAL_IRC48M == pllsel) { - /* PLL clock source is HXTAL or IRC48M */ - pllpresel = (RCU_CFG1 & RCU_CFG1_PLLPRESEL); - - if(RCU_PLLPRESRC_HXTAL == pllpresel){ - /* PLL clock source is HXTAL */ - ck_src = HXTAL_VALUE; - }else{ - /* PLL clock source is IRC48 */ - ck_src = IRC48M_VALUE; - } - -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - predv0sel = (RCU_CFG0 & RCU_CFG0_PREDV0); - /* PREDV0 input source clock divided by 2 */ - if(RCU_CFG0_PREDV0 == predv0sel){ - ck_src = HXTAL_VALUE/2U; - } -#elif defined(GD32F30X_CL) - predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL); - /* source clock use PLL1 */ - if(RCU_PREDV0SRC_CKPLL1 == predv0sel){ - predv1 = ((RCU_CFG1 & RCU_CFG1_PREDV1) >> 4) + 1U; - pll1mf = ((RCU_CFG1 & RCU_CFG1_PLL1MF) >> 8) + 2U; - if(17U == pll1mf){ - pll1mf = 20U; - } - ck_src = (ck_src/predv1)*pll1mf; - } - predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U; - ck_src /= predv0; -#endif /* GD32F30X_HD and GD32F30X_XD */ - }else{ - /* PLL clock source is IRC8M/2 */ - ck_src = IRC8M_VALUE/2U; - } - - /* PLL multiplication factor */ - pllmf = GET_BITS(RCU_CFG0, 18, 21); - - if((RCU_CFG0 & RCU_CFG0_PLLMF_4)){ - pllmf |= 0x10U; - } - if((RCU_CFG0 & RCU_CFG0_PLLMF_5)){ - pllmf |= 0x20U; - } - - if( pllmf >= 15U){ - pllmf += 1U; - }else{ - pllmf += 2U; - } - if(pllmf > 61U){ - pllmf = 63U; - } - SystemCoreClock = ck_src*pllmf; - #ifdef GD32F30X_CL - if(15U == pllmf){ - SystemCoreClock = ck_src*6U + ck_src/2U; - } - #endif /* GD32F30X_CL */ - - break; - /* IRC8M is selected as CK_SYS */ - default: - SystemCoreClock = IRC8M_VALUE; - break; - } - -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cm4.h b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cm4.h deleted file mode 100644 index d828414..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cm4.h +++ /dev/null @@ -1,1790 +0,0 @@ -/**************************************************************************//** - * @file core_cm4.h - * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File - * @version V3.30 - * @date 17. February 2014 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2009 - 2014 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 */ -#endif - -#ifdef __cplusplus - extern "C" { -#endif - -#ifndef __CORE_CM4_H_GENERIC -#define __CORE_CM4_H_GENERIC - -/** \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 (0x03) /*!< [31:16] CMSIS HAL main version */ -#define __CM4_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ -#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16) | \ - __CM4_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ - -#define __CORTEX_M (0x04) /*!< 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 ( __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__ ) /* Cosmic */ - #define __packed - #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ - #define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */ - #define __STATIC_INLINE static inline - -#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 == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __TMS470__ ) - #if defined __TI_VFP_SUPPORT__ - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif - -#elif defined ( __CSMC__ ) /* Cosmic */ - #if ( __CSMC__ & 0x400) // FPU present for parser - #if (__FPU_PRESENT == 1) - #define __FPU_USED 1 - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0 - #endif - #else - #define __FPU_USED 0 - #endif -#endif - -#include /* standard types definitions */ -#include /* Core Instruction Access */ -#include /* Core Function Access */ -#include /* Compiler specific SIMD Intrinsics */ - -#endif /* __CORE_CM4_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM4_H_DEPENDANT -#define __CORE_CM4_H_DEPENDANT - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM4_REV - #define __CM4_REV 0x0000 - #warning "__CM4_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0 - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0 - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0 - #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 */ - -/*@} 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 - { -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ -#else - 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 */ -#endif - 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; - - -/** \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; - - -/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ -#else - 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 */ -#endif - 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; - - -/** \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; - -/*@} 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 -{ - __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[24]; - __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[24]; - __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[24]; - __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[24]; - __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[56]; - __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644]; - __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0 /*!< 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 -{ - __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[5]; - __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0 /*!< 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 31 /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< 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 7 /*!< 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 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0 /*!< 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 4 /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< 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 9 /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< 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 4 /*!< 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 3 /*!< 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 1 /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< 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 18 /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Registers Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< 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 8 /*!< 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 0 /*!< 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 Registers Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1 /*!< 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 4 /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0 /*!< 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[1]; - __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< 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 9 /*!< ACTLR: DISOOFP Position */ -#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ - -#define SCnSCB_ACTLR_DISFPCA_Pos 8 /*!< ACTLR: DISFPCA Position */ -#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ - -#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ -#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ - -#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ -#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ - -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< 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 -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0 /*!< 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 0 /*!< 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 0 /*!< 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 31 /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_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 -{ - __O union - { - __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864]; - __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15]; - __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15]; - __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[29]; - __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ - __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ - __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ - uint32_t RESERVED4[43]; - __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[6]; - __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0 /*!< 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 23 /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10 /*!< 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 8 /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 2 /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0 /*!< 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 -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1]; - __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1]; - __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1]; - __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 0 /*!< 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 24 /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ -#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ - -#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ -#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ -#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ - -#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ -#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ - -#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ -#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ - -#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ -#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ - -#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< 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 -{ - __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2]; - __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55]; - __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131]; - __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759]; - __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ - __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1]; - __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39]; - __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8]; - __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0 /*!< 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 0 /*!< 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 3 /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0 /*!< 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 8 /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1 /*!< 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 0 /*!< 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 29 /*!< 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 27 /*!< 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 26 /*!< 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 24 /*!< 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 16 /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0 /*!< 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 0 /*!< 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 29 /*!< 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 27 /*!< 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 26 /*!< 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 24 /*!< 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 16 /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0 /*!< 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 0 /*!< 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 0 /*!< 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 11 /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0 /*!< 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_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if (__MPU_PRESENT == 1) -/** \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 -{ - __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ - __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ - __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ - __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ - __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ - __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ - __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -/* MPU Type Register */ -#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register */ -#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register */ -#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register */ -#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register */ -#define MPU_RASR_ATTRS_Pos 16 /*!< 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 28 /*!< 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 24 /*!< 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 19 /*!< 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 18 /*!< 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 17 /*!< 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 16 /*!< 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 8 /*!< 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 1 /*!< 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 0 /*!< 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 == 1) -/** \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[1]; - __IO uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ - __IO uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ - __IO uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ - __I uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ - __I uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ -} FPU_Type; - -/* Floating-Point Context Control Register */ -#define FPU_FPCCR_ASPEN_Pos 31 /*!< FPCCR: ASPEN bit Position */ -#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ - -#define FPU_FPCCR_LSPEN_Pos 30 /*!< FPCCR: LSPEN Position */ -#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ - -#define FPU_FPCCR_MONRDY_Pos 8 /*!< FPCCR: MONRDY Position */ -#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ - -#define FPU_FPCCR_BFRDY_Pos 6 /*!< FPCCR: BFRDY Position */ -#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ - -#define FPU_FPCCR_MMRDY_Pos 5 /*!< FPCCR: MMRDY Position */ -#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ - -#define FPU_FPCCR_HFRDY_Pos 4 /*!< FPCCR: HFRDY Position */ -#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ - -#define FPU_FPCCR_THREAD_Pos 3 /*!< 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 1 /*!< 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 0 /*!< 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 */ -#define FPU_FPCAR_ADDRESS_Pos 3 /*!< FPCAR: ADDRESS bit Position */ -#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ - -/* Floating-Point Default Status Control Register */ -#define FPU_FPDSCR_AHP_Pos 26 /*!< FPDSCR: AHP bit Position */ -#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ - -#define FPU_FPDSCR_DN_Pos 25 /*!< FPDSCR: DN bit Position */ -#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ - -#define FPU_FPDSCR_FZ_Pos 24 /*!< FPDSCR: FZ bit Position */ -#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ - -#define FPU_FPDSCR_RMode_Pos 22 /*!< FPDSCR: RMode bit Position */ -#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ - -/* Media and FP Feature Register 0 */ -#define FPU_MVFR0_FP_rounding_modes_Pos 28 /*!< 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 24 /*!< 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 20 /*!< 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 16 /*!< 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 12 /*!< 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 8 /*!< 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 4 /*!< 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 0 /*!< 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 */ -#define FPU_MVFR1_FP_fused_MAC_Pos 28 /*!< 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 24 /*!< 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 4 /*!< 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 0 /*!< 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 -{ - __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< 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 25 /*!< 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 24 /*!< 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 19 /*!< 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 18 /*!< 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 17 /*!< 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 16 /*!< 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 5 /*!< 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 3 /*!< 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 2 /*!< 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 1 /*!< 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 0 /*!< 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 */ -#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register */ -#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< 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 18 /*!< 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 17 /*!< 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 16 /*!< 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 10 /*!< 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 9 /*!< 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 8 /*!< 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 7 /*!< 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 6 /*!< 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 5 /*!< 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 4 /*!< 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 0 /*!< 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_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 == 1) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -#if (__FPU_PRESENT == 1) - #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 - - The function 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)0x07); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ - SCB->AIRCR = reg_value; -} - - -/** \brief Get Priority Grouping - - The function 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 ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ -} - - -/** \brief Enable External Interrupt - - The function 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)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */ - NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */ -} - - -/** \brief Disable External Interrupt - - The function 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)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ -} - - -/** \brief Get Pending Interrupt - - The function 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)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ -} - - -/** \brief Set Pending Interrupt - - The function 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)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ -} - - -/** \brief Clear Pending Interrupt - - The function 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)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ -} - - -/** \brief Get Active Interrupt - - The function 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)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ -} - - -/** \brief Set Interrupt Priority - - The function 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(IRQn < 0) { - SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ - else { - NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ -} - - -/** \brief Get Interrupt Priority - - The function 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(IRQn < 0) { - return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ - else { - return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ -} - - -/** \brief Encode Priority - - The function 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 samllest 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 & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - return ( - ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | - ((SubPriority & ((1 << (SubPriorityBits )) - 1))) - ); -} - - -/** \brief Decode Priority - - The function 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 samllest 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* pPreemptPriority, uint32_t* pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); - *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); -} - - -/** \brief System Reset - - The function 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 = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - while(1); /* wait until reset */ -} - -/*@} 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 == 0) - -/** \brief System Tick Configuration - - The function 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 - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ - - SysTick->LOAD = ticks - 1; /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0; /* 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 (0); /* 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 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** \brief ITM Send Character - - The function 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) && /* ITM enabled */ - (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0].u32 == 0); - ITM->PORT[0].u8 = (uint8_t) ch; - } - return (ch); -} - - -/** \brief ITM Receive Character - - The function 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 - - The function 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 */ - -#endif /* __CORE_CM4_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ - -#ifdef __cplusplus -} -#endif diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cm4_simd.h b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cm4_simd.h deleted file mode 100644 index f9bceff..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cm4_simd.h +++ /dev/null @@ -1,697 +0,0 @@ -/**************************************************************************//** - * @file core_cm4_simd.h - * @brief CMSIS Cortex-M4 SIMD Header File - * @version V3.30 - * @date 17. February 2014 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2009 - 2014 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 */ -#endif - -#ifndef __CORE_CM4_SIMD_H -#define __CORE_CM4_SIMD_H - -#ifdef __cplusplus - extern "C" { -#endif - - -/******************************************************************************* - * Hardware Abstraction Layer - ******************************************************************************/ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ -#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) << 32) ) >> 32)) - - -#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ -__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 uint32_t __QADD(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB(uint32_t op1, uint32_t op2) -{ - uint32_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); -} - - -#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ -#include - - -#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ -/* TI CCS specific functions */ -#include - - -#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ -/* TASKING carm specific functions */ -/* not yet supported */ - - -#elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/ -/* Cosmic specific functions */ -#include - -#endif - -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM4_SIMD_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cmFunc.h b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cmFunc.h deleted file mode 100644 index 3c932e0..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cmFunc.h +++ /dev/null @@ -1,616 +0,0 @@ -/**************************************************************************//** - * @file core_cmFunc.h - * @brief CMSIS Cortex-M Core Function Access Header File - * @version V3.01 - * @date 06. March 2012 - * - * @note - * Copyright (C) 2009-2012 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#ifndef __CORE_CMFUNC_H -#define __CORE_CMFUNC_H - - -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions - @{ - */ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -#if (__ARMCC_VERSION < 400677) - #error "Please use ARM Compiler Toolchain V4.0.677 or later!" -#endif - -/* intrinsic void __enable_irq(); */ -/* intrinsic void __disable_irq(); */ - -/** \brief Get Control Register - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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 >= 0x03) - -/** \brief Enable FIQ - - This function 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 - - This function 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 - - This function 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 - - This function 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 & 0xff); -} - - -/** \brief Get Fault Mask - - This function 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 - - This function 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 >= 0x03) */ - - -#if (__CORTEX_M == 0x04) - -/** \brief Get FPSCR - - This function 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 == 1) && (__FPU_USED == 1) - register uint32_t __regfpscr __ASM("fpscr"); - return(__regfpscr); -#else - return(0); -#endif -} - - -/** \brief Set FPSCR - - This function 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 == 1) && (__FPU_USED == 1) - register uint32_t __regfpscr __ASM("fpscr"); - __regfpscr = (fpscr); -#endif -} - -#endif /* (__CORTEX_M == 0x04) */ - - -#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ - -#include - - -#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ -/* TI CCS specific functions */ - -#include - - -#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/** \brief Enable IRQ Interrupts - - This function 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"); -} - - -/** \brief Disable IRQ Interrupts - - This function 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"); -} - - -/** \brief Get Control Register - - This function 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 - - This function 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) ); -} - - -/** \brief Get IPSR Register - - This function 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 - - This function 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 - - This function 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 - - This function 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 - - This function 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) ); -} - - -/** \brief Get Main Stack Pointer - - This function 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 - - This function 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) ); -} - - -/** \brief Get Priority Mask - - This function 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 - - This function 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) ); -} - - -#if (__CORTEX_M >= 0x03) - -/** \brief Enable FIQ - - This function 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"); -} - - -/** \brief Disable FIQ - - This function 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"); -} - - -/** \brief Get Base Priority - - This function 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_max" : "=r" (result) ); - return(result); -} - - -/** \brief Set Base Priority - - This function 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) ); -} - - -/** \brief Get Fault Mask - - This function 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 - - This function 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) ); -} - -#endif /* (__CORTEX_M >= 0x03) */ - - -#if (__CORTEX_M == 0x04) - -/** \brief Get FPSCR - - This function 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 == 1) && (__FPU_USED == 1) - uint32_t result; - - __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); - return(result); -#else - return(0); -#endif -} - - -/** \brief Set FPSCR - - This function 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 == 1) && (__FPU_USED == 1) - __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) ); -#endif -} - -#endif /* (__CORTEX_M == 0x04) */ - - -#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ -/* TASKING carm specific functions */ - -/* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all instrinsics, - * Including the CMSIS ones. - */ - -#endif - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -#endif /* __CORE_CMFUNC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cmInstr.h b/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cmInstr.h deleted file mode 100644 index 597e64d..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/CMSIS/core_cmInstr.h +++ /dev/null @@ -1,618 +0,0 @@ -/**************************************************************************//** - * @file core_cmInstr.h - * @brief CMSIS Cortex-M Core Instruction Access Header File - * @version V3.01 - * @date 06. March 2012 - * - * @note - * Copyright (C) 2009-2012 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#ifndef __CORE_CMINSTR_H -#define __CORE_CMINSTR_H - - -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions - @{ -*/ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -#if (__ARMCC_VERSION < 400677) - #error "Please use ARM Compiler Toolchain V4.0.677 or later!" -#endif - - -/** \brief No Operation - - No Operation does nothing. This instruction can be used for code alignment purposes. - */ -#define __NOP __nop - - -/** \brief Wait For Interrupt - - 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 - - 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 - - Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV __sev - - -/** \brief Instruction Synchronization Barrier - - 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() __isb(0xF) - - -/** \brief Data Synchronization Barrier - - This function acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -#define __DSB() __dsb(0xF) - - -/** \brief Data Memory Barrier - - This function ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. - */ -#define __DMB() __dmb(0xF) - - -/** \brief Reverse byte order (32 bit) - - This function 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) - - This function reverses the byte order in two unsigned short values. - - \param [in] value Value to reverse - \return Reversed value - */ -__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) -{ - rev16 r0, r0 - bx lr -} - - -/** \brief Reverse byte order in signed short value - - This function reverses the byte order in a signed short value with sign extension to integer. - - \param [in] value Value to reverse - \return Reversed value - */ -__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) -{ - revsh r0, r0 - bx lr -} - - -/** \brief Rotate Right in unsigned value (32 bit) - - This function 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 - - -#if (__CORTEX_M >= 0x03) - -/** \brief Reverse bit order of value - - This function reverses the bit order of the given value. - - \param [in] value Value to reverse - \return Reversed value - */ -#define __RBIT __rbit - - -/** \brief LDR Exclusive (8 bit) - - This function performs a exclusive LDR command for 8 bit value. - - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) - - -/** \brief LDR Exclusive (16 bit) - - This function performs a exclusive LDR command for 16 bit values. - - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) - - -/** \brief LDR Exclusive (32 bit) - - This function performs a exclusive LDR command for 32 bit values. - - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) - - -/** \brief STR Exclusive (8 bit) - - This function performs a exclusive STR command 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(value, ptr) __strex(value, ptr) - - -/** \brief STR Exclusive (16 bit) - - This function performs a exclusive STR command 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(value, ptr) __strex(value, ptr) - - -/** \brief STR Exclusive (32 bit) - - This function performs a exclusive STR command 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(value, ptr) __strex(value, ptr) - - -/** \brief Remove the exclusive lock - - This function removes the exclusive lock which is created by LDREX. - - */ -#define __CLREX __clrex - - -/** \brief Signed Saturate - - This function 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 - - This function 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 Count leading zeros - - This function 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 - -#endif /* (__CORTEX_M >= 0x03) */ - - - -#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ - -#include - - -#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ -/* TI CCS specific functions */ - -#include - - -#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/** \brief No Operation - - 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 - - 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 - - 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 - - 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 - - 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"); -} - - -/** \brief Data Synchronization Barrier - - This function 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"); -} - - -/** \brief Data Memory Barrier - - This function 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"); -} - - -/** \brief Reverse byte order (32 bit) - - This function 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) -{ - uint32_t result; - - __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - - -/** \brief Reverse byte order (16 bit) - - This function 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" : "=r" (result) : "r" (value) ); - return(result); -} - - -/** \brief Reverse byte order in signed short value - - This function 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) -{ - uint32_t result; - - __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - - -/** \brief Rotate Right in unsigned value (32 bit) - - This function 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) -{ - - __ASM volatile ("ror %0, %0, %1" : "+r" (op1) : "r" (op2) ); - return(op1); -} - - -#if (__CORTEX_M >= 0x03) - -/** \brief Reverse bit order of value - - This function 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; - - __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - - -/** \brief LDR Exclusive (8 bit) - - This function performs a exclusive LDR command 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) -{ - uint8_t result; - - __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - - -/** \brief LDR Exclusive (16 bit) - - This function performs a exclusive LDR command 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) -{ - uint16_t result; - - __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - - -/** \brief LDR Exclusive (32 bit) - - This function performs a exclusive LDR command 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) : "r" (addr) ); - return(result); -} - - -/** \brief STR Exclusive (8 bit) - - This function performs a exclusive STR command 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) : "r" (addr), "r" (value) ); - return(result); -} - - -/** \brief STR Exclusive (16 bit) - - This function performs a exclusive STR command 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) : "r" (addr), "r" (value) ); - return(result); -} - - -/** \brief STR Exclusive (32 bit) - - This function performs a exclusive STR command 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) : "r" (addr), "r" (value) ); - return(result); -} - - -/** \brief Remove the exclusive lock - - This function removes the exclusive lock which is created by LDREX. - - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void) -{ - __ASM volatile ("clrex"); -} - - -/** \brief Signed Saturate - - This function 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 - - This function 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 Count leading zeros - - This function 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 - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value) -{ - uint8_t result; - - __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -#endif /* (__CORTEX_M >= 0x03) */ - - - - -#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ -/* TASKING carm specific functions */ - -/* - * 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. - */ - -#endif - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - -#endif /* __CORE_CMINSTR_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_adc.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_adc.h deleted file mode 100644 index ee9638c..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_adc.h +++ /dev/null @@ -1,403 +0,0 @@ -/*! - \file gd32f30x_adc.h - \brief definitions for the ADC - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_ADC_H -#define GD32F30X_ADC_H - -#include "gd32f30x.h" - -/* ADC definitions */ -#define ADC0 ADC_BASE -#define ADC1 (ADC_BASE + 0x400U) -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define ADC2 (ADC_BASE + 0x1800U) -#endif - -/* registers definitions */ -#define ADC_STAT(adcx) REG32((adcx) + 0x00U) /*!< ADC status register */ -#define ADC_CTL0(adcx) REG32((adcx) + 0x04U) /*!< ADC control register 0 */ -#define ADC_CTL1(adcx) REG32((adcx) + 0x08U) /*!< ADC control register 1 */ -#define ADC_SAMPT0(adcx) REG32((adcx) + 0x0CU) /*!< ADC sampling time register 0 */ -#define ADC_SAMPT1(adcx) REG32((adcx) + 0x10U) /*!< ADC sampling time register 1 */ -#define ADC_IOFF0(adcx) REG32((adcx) + 0x14U) /*!< ADC inserted channel data offset register 0 */ -#define ADC_IOFF1(adcx) REG32((adcx) + 0x18U) /*!< ADC inserted channel data offset register 1 */ -#define ADC_IOFF2(adcx) REG32((adcx) + 0x1CU) /*!< ADC inserted channel data offset register 2 */ -#define ADC_IOFF3(adcx) REG32((adcx) + 0x20U) /*!< ADC inserted channel data offset register 3 */ -#define ADC_WDHT(adcx) REG32((adcx) + 0x24U) /*!< ADC watchdog high threshold register */ -#define ADC_WDLT(adcx) REG32((adcx) + 0x28U) /*!< ADC watchdog low threshold register */ -#define ADC_RSQ0(adcx) REG32((adcx) + 0x2CU) /*!< ADC regular sequence register 0 */ -#define ADC_RSQ1(adcx) REG32((adcx) + 0x30U) /*!< ADC regular sequence register 1 */ -#define ADC_RSQ2(adcx) REG32((adcx) + 0x34U) /*!< ADC regular sequence register 2 */ -#define ADC_ISQ(adcx) REG32((adcx) + 0x38U) /*!< ADC inserted sequence register */ -#define ADC_IDATA0(adcx) REG32((adcx) + 0x3CU) /*!< ADC inserted data register 0 */ -#define ADC_IDATA1(adcx) REG32((adcx) + 0x40U) /*!< ADC inserted data register 1 */ -#define ADC_IDATA2(adcx) REG32((adcx) + 0x44U) /*!< ADC inserted data register 2 */ -#define ADC_IDATA3(adcx) REG32((adcx) + 0x48U) /*!< ADC inserted data register 3 */ -#define ADC_RDATA(adcx) REG32((adcx) + 0x4CU) /*!< ADC regular data register */ -#define ADC_OVSAMPCTL(adcx) REG32((adcx) + 0x80U) /*!< ADC oversampling control register */ - -/* bits definitions */ -/* ADC_STAT */ -#define ADC_STAT_WDE BIT(0) /*!< analog watchdog event flag */ -#define ADC_STAT_EOC BIT(1) /*!< end of conversion */ -#define ADC_STAT_EOIC BIT(2) /*!< inserted channel end of conversion */ -#define ADC_STAT_STIC BIT(3) /*!< inserted channel start flag */ -#define ADC_STAT_STRC BIT(4) /*!< regular channel start flag */ - -/* ADC_CTL0 */ -#define ADC_CTL0_WDCHSEL BITS(0,4) /*!< analog watchdog channel select bits */ -#define ADC_CTL0_EOCIE BIT(5) /*!< interrupt enable for EOC */ -#define ADC_CTL0_WDEIE BIT(6) /*!< analog watchdog interrupt enable */ -#define ADC_CTL0_EOICIE BIT(7) /*!< interrupt enable for inserted channels */ -#define ADC_CTL0_SM BIT(8) /*!< scan mode */ -#define ADC_CTL0_WDSC BIT(9) /*!< when in scan mode, analog watchdog is effective on a single channel */ -#define ADC_CTL0_ICA BIT(10) /*!< automatic inserted group conversion */ -#define ADC_CTL0_DISRC BIT(11) /*!< discontinuous mode on regular channels */ -#define ADC_CTL0_DISIC BIT(12) /*!< discontinuous mode on inserted channels */ -#define ADC_CTL0_DISNUM BITS(13,15) /*!< discontinuous mode channel count */ -#define ADC_CTL0_SYNCM BITS(16,19) /*!< sync mode selection */ -#define ADC_CTL0_IWDEN BIT(22) /*!< analog watchdog enable on inserted channels */ -#define ADC_CTL0_RWDEN BIT(23) /*!< analog watchdog enable on regular channels */ -#define ADC_CTL0_DRES BITS(24,25) /*!< ADC data resolution */ - -/* ADC_CTL1 */ -#define ADC_CTL1_ADCON BIT(0) /*!< ADC converter on */ -#define ADC_CTL1_CTN BIT(1) /*!< continuous conversion */ -#define ADC_CTL1_CLB BIT(2) /*!< ADC calibration */ -#define ADC_CTL1_RSTCLB BIT(3) /*!< reset calibration */ -#define ADC_CTL1_DMA BIT(8) /*!< direct memory access mode */ -#define ADC_CTL1_DAL BIT(11) /*!< data alignment */ -#define ADC_CTL1_ETSIC BITS(12,14) /*!< external trigger select for inserted channel */ -#define ADC_CTL1_ETEIC BIT(15) /*!< external trigger enable for inserted channel */ -#define ADC_CTL1_ETSRC BITS(17,19) /*!< external trigger select for regular channel */ -#define ADC_CTL1_ETERC BIT(20) /*!< external trigger conversion mode for inserted channels */ -#define ADC_CTL1_SWICST BIT(21) /*!< start on inserted channel */ -#define ADC_CTL1_SWRCST BIT(22) /*!< start on regular channel */ -#define ADC_CTL1_TSVREN BIT(23) /*!< channel 16 and 17 enable of ADC0 */ - -/* ADC_SAMPTx x=0..1 */ -#define ADC_SAMPTX_SPTN BITS(0,2) /*!< channel x sample time selection */ - -/* ADC_IOFFx x=0..3 */ -#define ADC_IOFFX_IOFF BITS(0,11) /*!< data offset for inserted channel x */ - -/* ADC_WDHT */ -#define ADC_WDHT_WDHT BITS(0,11) /*!< analog watchdog high threshold */ - -/* ADC_WDLT */ -#define ADC_WDLT_WDLT BITS(0,11) /*!< analog watchdog low threshold */ - -/* ADC_RSQx */ -#define ADC_RSQX_RSQN BITS(0,4) /*!< x conversion in regular sequence */ -#define ADC_RSQ0_RL BITS(20,23) /*!< regular channel sequence length */ - -/* ADC_ISQ */ -#define ADC_ISQ_ISQN BITS(0,4) /*!< x conversion in regular sequence */ -#define ADC_ISQ_IL BITS(20,21) /*!< inserted sequence length */ - -/* ADC_IDATAx x=0..3*/ -#define ADC_IDATAX_IDATAN BITS(0,15) /*!< inserted data x */ - -/* ADC_RDATA */ -#define ADC_RDATA_RDATA BITS(0,15) /*!< regular data */ -#define ADC_RDATA_ADC1RDTR BITS(16,31) /*!< ADC1 regular channel data */ - -/* ADC_OVSAMPCTL */ -#define ADC_OVSAMPCTL_OVSEN BIT(0) /*!< oversampling enable */ -#define ADC_OVSAMPCTL_OVSR BITS(2,4) /*!< oversampling ratio */ -#define ADC_OVSAMPCTL_OVSS BITS(5,8) /*!< oversampling shift */ -#define ADC_OVSAMPCTL_TOVS BIT(9) /*!< triggered oversampling */ -#define ADC_OVSAMPCTL_DRES BITS(12,13) /*!< oversampling shift */ - - -/* constants definitions */ -/* ADC status flag */ -#define ADC_FLAG_WDE ADC_STAT_WDE /*!< analog watchdog event flag */ -#define ADC_FLAG_EOC ADC_STAT_EOC /*!< end of conversion */ -#define ADC_FLAG_EOIC ADC_STAT_EOIC /*!< inserted channel end of conversion */ -#define ADC_FLAG_STIC ADC_STAT_STIC /*!< inserted channel start flag */ -#define ADC_FLAG_STRC ADC_STAT_STRC /*!< regular channel start flag */ - -/* adc_ctl0 register value */ -#define CTL0_DISNUM(regval) (BITS(13,15) & ((uint32_t)(regval) << 13)) /*!< write value to ADC_CTL0_DISNUM bit field */ - -/* ADC special function definitions */ -#define ADC_SCAN_MODE ADC_CTL0_SM /*!< scan mode */ -#define ADC_INSERTED_CHANNEL_AUTO ADC_CTL0_ICA /*!< inserted channel group convert automatically */ -#define ADC_CONTINUOUS_MODE ADC_CTL1_CTN /*!< continuous mode */ - -/* ADC synchronization mode */ -#define CTL0_SYNCM(regval) (BITS(16,19) & ((uint32_t)(regval) << 16)) /*!< write value to ADC_CTL0_SYNCM bit field */ -#define ADC_MODE_FREE CTL0_SYNCM(0) /*!< all the ADCs work independently */ -#define ADC_DAUL_REGULAL_PARALLEL_INSERTED_PARALLEL CTL0_SYNCM(1) /*!< ADC0 and ADC1 work in combined regular parallel + inserted parallel mode */ -#define ADC_DAUL_REGULAL_PARALLEL_INSERTED_ROTATION CTL0_SYNCM(2) /*!< ADC0 and ADC1 work in combined regular parallel + trigger rotation mode */ -#define ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_FAST CTL0_SYNCM(3) /*!< ADC0 and ADC1 work in combined inserted parallel + follow-up fast mode */ -#define ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_SLOW CTL0_SYNCM(4) /*!< ADC0 and ADC1 work in combined inserted parallel + follow-up slow mode */ -#define ADC_DAUL_INSERTED_PARALLEL CTL0_SYNCM(5) /*!< ADC0 and ADC1 work in inserted parallel mode only */ -#define ADC_DAUL_REGULAL_PARALLEL CTL0_SYNCM(6) /*!< ADC0 and ADC1 work in regular parallel mode only */ -#define ADC_DAUL_REGULAL_FOLLOWUP_FAST CTL0_SYNCM(7) /*!< ADC0 and ADC1 work in follow-up fast mode only */ -#define ADC_DAUL_REGULAL_FOLLOWUP_SLOW CTL0_SYNCM(8) /*!< ADC0 and ADC1 work in follow-up slow mode only */ -#define ADC_DAUL_INSERTED_TRRIGGER_ROTATION CTL0_SYNCM(9) /*!< ADC0 and ADC1 work in trigger rotation mode only */ - -/* ADC data alignment */ -#define ADC_DATAALIGN_RIGHT ((uint32_t)0x00000000U) /*!< LSB alignment */ -#define ADC_DATAALIGN_LEFT ADC_CTL1_DAL /*!< MSB alignment */ - -/* ADC external trigger select for regular channel */ -#define CTL1_ETSRC(regval) (BITS(17,19) & ((uint32_t)(regval) << 17)) /*!< write value to ADC_CTL1_ETSRC bit field */ -#define ADC0_1_EXTTRIG_REGULAR_T0_CH0 CTL1_ETSRC(0) /*!< timer 0 CC0 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T0_CH1 CTL1_ETSRC(1) /*!< timer 0 CC1 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T0_CH2 CTL1_ETSRC(2) /*!< timer 0 CC2 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T1_CH1 CTL1_ETSRC(3) /*!< timer 1 CC1 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T2_TRGO CTL1_ETSRC(4) /*!< timer 2 TRGO event select */ -#define ADC0_1_EXTTRIG_REGULAR_T3_CH3 CTL1_ETSRC(5) /*!< timer 3 CC3 event select */ -#define ADC0_1_EXTTRIG_REGULAR_T7_TRGO CTL1_ETSRC(6) /*!< timer 7 TRGO event select */ -#define ADC0_1_EXTTRIG_REGULAR_EXTI_11 CTL1_ETSRC(6) /*!< external interrupt line 11 */ -#define ADC0_1_2_EXTTRIG_REGULAR_NONE CTL1_ETSRC(7) /*!< software trigger */ - -#define ADC2_EXTTRIG_REGULAR_T2_CH0 CTL1_ETSRC(0) /*!< timer 2 CC0 event select */ -#define ADC2_EXTTRIG_REGULAR_T1_CH2 CTL1_ETSRC(1) /*!< timer 1 CC2 event select */ -#define ADC2_EXTTRIG_REGULAR_T0_CH2 CTL1_ETSRC(2) /*!< timer 0 CC2 event select */ -#define ADC2_EXTTRIG_REGULAR_T7_CH0 CTL1_ETSRC(3) /*!< timer 7 CC0 event select */ -#define ADC2_EXTTRIG_REGULAR_T7_TRGO CTL1_ETSRC(4) /*!< timer 7 TRGO event select */ -#define ADC2_EXTTRIG_REGULAR_T4_CH0 CTL1_ETSRC(5) /*!< timer 4 CC0 event select */ -#define ADC2_EXTTRIG_REGULAR_T4_CH2 CTL1_ETSRC(6) /*!< timer 4 CC2 event select */ - -/* ADC external trigger select for inserted channel */ -#define CTL1_ETSIC(regval) (BITS(12,14) & ((uint32_t)(regval) << 12)) /*!< write value to ADC_CTL1_ETSIC bit field */ -#define ADC0_1_EXTTRIG_INSERTED_T0_TRGO CTL1_ETSIC(0) /*!< timer 0 TRGO event select */ -#define ADC0_1_EXTTRIG_INSERTED_T0_CH3 CTL1_ETSIC(1) /*!< timer 0 CC3 event select */ -#define ADC0_1_EXTTRIG_INSERTED_T1_TRGO CTL1_ETSIC(2) /*!< timer 1 TRGO event select */ -#define ADC0_1_EXTTRIG_INSERTED_T1_CH0 CTL1_ETSIC(3) /*!< timer 1 CC0 event select */ -#define ADC0_1_EXTTRIG_INSERTED_T2_CH3 CTL1_ETSIC(4) /*!< timer 2 CC3 event select */ -#define ADC0_1_EXTTRIG_INSERTED_T3_TRGO CTL1_ETSIC(5) /*!< timer 3 TRGO event select */ -#define ADC0_1_EXTTRIG_INSERTED_EXTI_15 CTL1_ETSIC(6) /*!< external interrupt line 15 */ -#define ADC0_1_EXTTRIG_INSERTED_T7_CH3 CTL1_ETSIC(6) /*!< timer 7 CC3 event select */ -#define ADC0_1_2_EXTTRIG_INSERTED_NONE CTL1_ETSIC(7) /*!< software trigger */ - -#define ADC2_EXTTRIG_INSERTED_T0_TRGO CTL1_ETSIC(0) /*!< timer 0 TRGO event select */ -#define ADC2_EXTTRIG_INSERTED_T0_CH3 CTL1_ETSIC(1) /*!< timer 0 CC3 event select */ -#define ADC2_EXTTRIG_INSERTED_T3_CH2 CTL1_ETSIC(2) /*!< timer 3 CC2 event select */ -#define ADC2_EXTTRIG_INSERTED_T7_CH1 CTL1_ETSIC(3) /*!< timer 7 CC1 event select */ -#define ADC2_EXTTRIG_INSERTED_T7_CH3 CTL1_ETSIC(4) /*!< timer 7 CC3 event select */ -#define ADC2_EXTTRIG_INSERTED_T4_TRGO CTL1_ETSIC(5) /*!< timer 4 TRGO event select */ -#define ADC2_EXTTRIG_INSERTED_T4_CH3 CTL1_ETSIC(6) /*!< timer 4 CC3 event select */ - -/* ADC channel sample time */ -#define SAMPTX_SPT(regval) (BITS(0,2) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_SAMPTX_SPT bit field */ -#define ADC_SAMPLETIME_1POINT5 SAMPTX_SPT(0) /*!< 1.5 sampling cycles */ -#define ADC_SAMPLETIME_7POINT5 SAMPTX_SPT(1) /*!< 7.5 sampling cycles */ -#define ADC_SAMPLETIME_13POINT5 SAMPTX_SPT(2) /*!< 13.5 sampling cycles */ -#define ADC_SAMPLETIME_28POINT5 SAMPTX_SPT(3) /*!< 28.5 sampling cycles */ -#define ADC_SAMPLETIME_41POINT5 SAMPTX_SPT(4) /*!< 41.5 sampling cycles */ -#define ADC_SAMPLETIME_55POINT5 SAMPTX_SPT(5) /*!< 55.5 sampling cycles */ -#define ADC_SAMPLETIME_71POINT5 SAMPTX_SPT(6) /*!< 71.5 sampling cycles */ -#define ADC_SAMPLETIME_239POINT5 SAMPTX_SPT(7) /*!< 239.5 sampling cycles */ - -/* adc_ioffx register value */ -#define IOFFX_IOFF(regval) (BITS(0,11) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_IOFFX_IOFF bit field */ - -/* adc_wdht register value */ -#define WDHT_WDHT(regval) (BITS(0,11) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_WDHT_WDHT bit field */ - -/* adc_wdlt register value */ -#define WDLT_WDLT(regval) (BITS(0,11) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_WDLT_WDLT bit field */ - -/* adc_rsqx register value */ -#define RSQ0_RL(regval) (BITS(20,23) & ((uint32_t)(regval) << 20)) /*!< write value to ADC_RSQ0_RL bit field */ - -/* adc_isq register value */ -#define ISQ_IL(regval) (BITS(20,21) & ((uint32_t)(regval) << 20)) /*!< write value to ADC_ISQ_IL bit field */ - -/* adc_ovsampctl register value */ -/* ADC resolution */ -#define OVSAMPCTL_DRES(regval) (BITS(12,13) & ((uint32_t)(regval) << 12)) /*!< write value to ADC_OVSAMPCTL_DRES bit field */ -#define ADC_RESOLUTION_12B OVSAMPCTL_DRES(0) /*!< 12-bit ADC resolution */ -#define ADC_RESOLUTION_10B OVSAMPCTL_DRES(1) /*!< 10-bit ADC resolution */ -#define ADC_RESOLUTION_8B OVSAMPCTL_DRES(2) /*!< 8-bit ADC resolution */ -#define ADC_RESOLUTION_6B OVSAMPCTL_DRES(3) /*!< 6-bit ADC resolution */ - -/* oversampling shift */ -#define OVSAMPCTL_OVSS(regval) (BITS(5,8) & ((uint32_t)(regval) << 5)) /*!< write value to ADC_OVSAMPCTL_OVSS bit field */ -#define ADC_OVERSAMPLING_SHIFT_NONE OVSAMPCTL_OVSS(0) /*!< no oversampling shift */ -#define ADC_OVERSAMPLING_SHIFT_1B OVSAMPCTL_OVSS(1) /*!< 1-bit oversampling shift */ -#define ADC_OVERSAMPLING_SHIFT_2B OVSAMPCTL_OVSS(2) /*!< 2-bit oversampling shift */ -#define ADC_OVERSAMPLING_SHIFT_3B OVSAMPCTL_OVSS(3) /*!< 3-bit oversampling shift */ -#define ADC_OVERSAMPLING_SHIFT_4B OVSAMPCTL_OVSS(4) /*!< 4-bit oversampling shift */ -#define ADC_OVERSAMPLING_SHIFT_5B OVSAMPCTL_OVSS(5) /*!< 5-bit oversampling shift */ -#define ADC_OVERSAMPLING_SHIFT_6B OVSAMPCTL_OVSS(6) /*!< 6-bit oversampling shift */ -#define ADC_OVERSAMPLING_SHIFT_7B OVSAMPCTL_OVSS(7) /*!< 7-bit oversampling shift */ -#define ADC_OVERSAMPLING_SHIFT_8B OVSAMPCTL_OVSS(8) /*!< 8-bit oversampling shift */ - -/* oversampling ratio */ -#define OVSAMPCTL_OVSR(regval) (BITS(2,4) & ((uint32_t)(regval) << 2)) /*!< write value to ADC_OVSAMPCTL_OVSR bit field */ -#define ADC_OVERSAMPLING_RATIO_MUL2 OVSAMPCTL_OVSR(0) /*!< oversampling ratio multiple 2 */ -#define ADC_OVERSAMPLING_RATIO_MUL4 OVSAMPCTL_OVSR(1) /*!< oversampling ratio multiple 4 */ -#define ADC_OVERSAMPLING_RATIO_MUL8 OVSAMPCTL_OVSR(2) /*!< oversampling ratio multiple 8 */ -#define ADC_OVERSAMPLING_RATIO_MUL16 OVSAMPCTL_OVSR(3) /*!< oversampling ratio multiple 16 */ -#define ADC_OVERSAMPLING_RATIO_MUL32 OVSAMPCTL_OVSR(4) /*!< oversampling ratio multiple 32 */ -#define ADC_OVERSAMPLING_RATIO_MUL64 OVSAMPCTL_OVSR(5) /*!< oversampling ratio multiple 64 */ -#define ADC_OVERSAMPLING_RATIO_MUL128 OVSAMPCTL_OVSR(6) /*!< oversampling ratio multiple 128 */ -#define ADC_OVERSAMPLING_RATIO_MUL256 OVSAMPCTL_OVSR(7) /*!< oversampling ratio multiple 256 */ - -/* triggered oversampling */ -#define ADC_OVERSAMPLING_ALL_CONVERT ((uint32_t)0x00000000U) /*!< all oversampled conversions for a channel are done consecutively after a trigger */ -#define ADC_OVERSAMPLING_ONE_CONVERT ADC_OVSAMPCTL_TOVS /*!< each oversampled conversion for a channel needs a trigger */ - -/* ADC channel group definitions */ -#define ADC_REGULAR_CHANNEL ((uint8_t)0x01U) /*!< adc regular channel group */ -#define ADC_INSERTED_CHANNEL ((uint8_t)0x02U) /*!< adc inserted channel group */ -#define ADC_REGULAR_INSERTED_CHANNEL ((uint8_t)0x03U) /*!< both regular and inserted channel group */ - -#define ADC_CHANNEL_DISCON_DISABLE ((uint8_t)0x04U) /*!< disable discontinuous mode of regular & inserted channel */ - -/* ADC inserted channel definitions */ -#define ADC_INSERTED_CHANNEL_0 ((uint8_t)0x00U) /*!< adc inserted channel 0 */ -#define ADC_INSERTED_CHANNEL_1 ((uint8_t)0x01U) /*!< adc inserted channel 1 */ -#define ADC_INSERTED_CHANNEL_2 ((uint8_t)0x02U) /*!< adc inserted channel 2 */ -#define ADC_INSERTED_CHANNEL_3 ((uint8_t)0x03U) /*!< adc inserted channel 3 */ - -/* ADC channel definitions */ -#define ADC_CHANNEL_0 ((uint8_t)0x00U) /*!< ADC channel 0 */ -#define ADC_CHANNEL_1 ((uint8_t)0x01U) /*!< ADC channel 1 */ -#define ADC_CHANNEL_2 ((uint8_t)0x02U) /*!< ADC channel 2 */ -#define ADC_CHANNEL_3 ((uint8_t)0x03U) /*!< ADC channel 3 */ -#define ADC_CHANNEL_4 ((uint8_t)0x04U) /*!< ADC channel 4 */ -#define ADC_CHANNEL_5 ((uint8_t)0x05U) /*!< ADC channel 5 */ -#define ADC_CHANNEL_6 ((uint8_t)0x06U) /*!< ADC channel 6 */ -#define ADC_CHANNEL_7 ((uint8_t)0x07U) /*!< ADC channel 7 */ -#define ADC_CHANNEL_8 ((uint8_t)0x08U) /*!< ADC channel 8 */ -#define ADC_CHANNEL_9 ((uint8_t)0x09U) /*!< ADC channel 9 */ -#define ADC_CHANNEL_10 ((uint8_t)0x0AU) /*!< ADC channel 10 */ -#define ADC_CHANNEL_11 ((uint8_t)0x0BU) /*!< ADC channel 11 */ -#define ADC_CHANNEL_12 ((uint8_t)0x0CU) /*!< ADC channel 12 */ -#define ADC_CHANNEL_13 ((uint8_t)0x0DU) /*!< ADC channel 13 */ -#define ADC_CHANNEL_14 ((uint8_t)0x0EU) /*!< ADC channel 14 */ -#define ADC_CHANNEL_15 ((uint8_t)0x0FU) /*!< ADC channel 15 */ -#define ADC_CHANNEL_16 ((uint8_t)0x10U) /*!< ADC channel 16 */ -#define ADC_CHANNEL_17 ((uint8_t)0x11U) /*!< ADC channel 17 */ - -/* ADC interrupt */ -#define ADC_INT_WDE ADC_STAT_WDE /*!< analog watchdog event interrupt */ -#define ADC_INT_EOC ADC_STAT_EOC /*!< end of group conversion interrupt */ -#define ADC_INT_EOIC ADC_STAT_EOIC /*!< end of inserted group conversion interrupt */ - -/* ADC interrupt flag */ -#define ADC_INT_FLAG_WDE ADC_STAT_WDE /*!< analog watchdog event interrupt flag */ -#define ADC_INT_FLAG_EOC ADC_STAT_EOC /*!< end of group conversion interrupt flag */ -#define ADC_INT_FLAG_EOIC ADC_STAT_EOIC /*!< end of inserted group conversion interrupt flag */ - -/* function declarations */ -/* reset ADC */ -void adc_deinit(uint32_t adc_periph); -/* enable ADC interface */ -void adc_enable(uint32_t adc_periph); -/* disable ADC interface */ -void adc_disable(uint32_t adc_periph); -/* ADC calibration and reset calibration */ -void adc_calibration_enable(uint32_t adc_periph); -/* enable DMA request */ -void adc_dma_mode_enable(uint32_t adc_periph); -/* disable DMA request */ -void adc_dma_mode_disable(uint32_t adc_periph); -/* enable the temperature sensor and Vrefint channel */ -void adc_tempsensor_vrefint_enable(void); -/* disable the temperature sensor and Vrefint channel */ -void adc_tempsensor_vrefint_disable(void); - -/* configure ADC resolution */ -void adc_resolution_config(uint32_t adc_periph , uint32_t resolution); -/* configure ADC discontinuous mode */ -void adc_discontinuous_mode_config(uint32_t adc_periph , uint8_t adc_channel_group , uint8_t length); - -/* configure the ADC mode */ -void adc_mode_config(uint32_t mode); -/* enable or disable ADC special function */ -void adc_special_function_config(uint32_t adc_periph , uint32_t function , ControlStatus newvalue); -/* configure ADC data alignment */ -void adc_data_alignment_config(uint32_t adc_periph , uint32_t data_alignment); -/* configure the length of regular channel group or inserted channel group */ -void adc_channel_length_config(uint32_t adc_periph , uint8_t adc_channel_group , uint32_t length); -/* configure ADC regular channel */ -void adc_regular_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time); -/* configure ADC inserted channel */ -void adc_inserted_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time); -/* configure ADC inserted channel offset */ -void adc_inserted_channel_offset_config(uint32_t adc_periph , uint8_t inserted_channel , uint16_t offset); -/* enable ADC external trigger */ -void adc_external_trigger_config(uint32_t adc_periph, uint8_t adc_channel_group, ControlStatus newvalue); -/* configure ADC external trigger source */ -void adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t external_trigger_source); -/* enable ADC software trigger */ -void adc_software_trigger_enable(uint32_t adc_periph , uint8_t adc_channel_group); - -/* read ADC regular group data register */ -uint16_t adc_regular_data_read(uint32_t adc_periph); -/* read ADC inserted group data register */ -uint16_t adc_inserted_data_read(uint32_t adc_periph , uint8_t inserted_channel); -/* read the last ADC0 and ADC1 conversion result data in sync mode */ -uint32_t adc_sync_mode_convert_value_read(void); - -/* get the ADC flag bits */ -FlagStatus adc_flag_get(uint32_t adc_periph , uint32_t adc_flag); -/* clear the ADC flag bits */ -void adc_flag_clear(uint32_t adc_periph , uint32_t adc_flag); -/* get the ADC interrupt bits */ -FlagStatus adc_interrupt_flag_get(uint32_t adc_periph , uint32_t adc_interrupt); -/* clear the ADC flag */ -void adc_interrupt_flag_clear(uint32_t adc_periph , uint32_t adc_interrupt); -/* enable ADC interrupt */ -void adc_interrupt_enable(uint32_t adc_periph , uint32_t adc_interrupt); -/* disable ADC interrupt */ -void adc_interrupt_disable(uint32_t adc_periph , uint32_t adc_interrupt); - -/* configure ADC analog watchdog single channel */ -void adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel); -/* configure ADC analog watchdog group channel */ -void adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group); -/* disable ADC analog watchdog */ -void adc_watchdog_disable(uint32_t adc_periph); -/* configure ADC analog watchdog threshold */ -void adc_watchdog_threshold_config(uint32_t adc_periph , uint16_t low_threshold , uint16_t high_threshold); - -/* configure ADC oversample mode */ -void adc_oversample_mode_config(uint32_t adc_periph , uint32_t mode , uint16_t shift , uint8_t ratio); -/* enable ADC oversample mode */ -void adc_oversample_mode_enable(uint32_t adc_periph); -/* disable ADC oversample mode */ -void adc_oversample_mode_disable(uint32_t adc_periph); -#endif /* GD32F30X_ADC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_bkp.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_bkp.h deleted file mode 100644 index 215a8f9..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_bkp.h +++ /dev/null @@ -1,244 +0,0 @@ -/*! - \file gd32f30x_bkp.h - \brief definitions for the BKP - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_BKP_H -#define GD32F30X_BKP_H - -#include "gd32f30x.h" - -/* BKP definitions */ -#define BKP BKP_BASE /*!< BKP base address */ - -/* registers definitions */ -#define BKP_DATA0 REG16((BKP) + 0x04U) /*!< BKP data register 0 */ -#define BKP_DATA1 REG16((BKP) + 0x08U) /*!< BKP data register 1 */ -#define BKP_DATA2 REG16((BKP) + 0x0CU) /*!< BKP data register 2 */ -#define BKP_DATA3 REG16((BKP) + 0x10U) /*!< BKP data register 3 */ -#define BKP_DATA4 REG16((BKP) + 0x14U) /*!< BKP data register 4 */ -#define BKP_DATA5 REG16((BKP) + 0x18U) /*!< BKP data register 5 */ -#define BKP_DATA6 REG16((BKP) + 0x1CU) /*!< BKP data register 6 */ -#define BKP_DATA7 REG16((BKP) + 0x20U) /*!< BKP data register 7 */ -#define BKP_DATA8 REG16((BKP) + 0x24U) /*!< BKP data register 8 */ -#define BKP_DATA9 REG16((BKP) + 0x28U) /*!< BKP data register 9 */ -#define BKP_DATA10 REG16((BKP) + 0x40U) /*!< BKP data register 10 */ -#define BKP_DATA11 REG16((BKP) + 0x44U) /*!< BKP data register 11 */ -#define BKP_DATA12 REG16((BKP) + 0x48U) /*!< BKP data register 12 */ -#define BKP_DATA13 REG16((BKP) + 0x4CU) /*!< BKP data register 13 */ -#define BKP_DATA14 REG16((BKP) + 0x50U) /*!< BKP data register 14 */ -#define BKP_DATA15 REG16((BKP) + 0x54U) /*!< BKP data register 15 */ -#define BKP_DATA16 REG16((BKP) + 0x58U) /*!< BKP data register 16 */ -#define BKP_DATA17 REG16((BKP) + 0x5CU) /*!< BKP data register 17 */ -#define BKP_DATA18 REG16((BKP) + 0x60U) /*!< BKP data register 18 */ -#define BKP_DATA19 REG16((BKP) + 0x64U) /*!< BKP data register 19 */ -#define BKP_DATA20 REG16((BKP) + 0x68U) /*!< BKP data register 20 */ -#define BKP_DATA21 REG16((BKP) + 0x6CU) /*!< BKP data register 21 */ -#define BKP_DATA22 REG16((BKP) + 0x70U) /*!< BKP data register 22 */ -#define BKP_DATA23 REG16((BKP) + 0x74U) /*!< BKP data register 23 */ -#define BKP_DATA24 REG16((BKP) + 0x78U) /*!< BKP data register 24 */ -#define BKP_DATA25 REG16((BKP) + 0x7CU) /*!< BKP data register 25 */ -#define BKP_DATA26 REG16((BKP) + 0x80U) /*!< BKP data register 26 */ -#define BKP_DATA27 REG16((BKP) + 0x84U) /*!< BKP data register 27 */ -#define BKP_DATA28 REG16((BKP) + 0x88U) /*!< BKP data register 28 */ -#define BKP_DATA29 REG16((BKP) + 0x8CU) /*!< BKP data register 29 */ -#define BKP_DATA30 REG16((BKP) + 0x90U) /*!< BKP data register 30 */ -#define BKP_DATA31 REG16((BKP) + 0x94U) /*!< BKP data register 31 */ -#define BKP_DATA32 REG16((BKP) + 0x98U) /*!< BKP data register 32 */ -#define BKP_DATA33 REG16((BKP) + 0x9CU) /*!< BKP data register 33 */ -#define BKP_DATA34 REG16((BKP) + 0xA0U) /*!< BKP data register 34 */ -#define BKP_DATA35 REG16((BKP) + 0xA4U) /*!< BKP data register 35 */ -#define BKP_DATA36 REG16((BKP) + 0xA8U) /*!< BKP data register 36 */ -#define BKP_DATA37 REG16((BKP) + 0xACU) /*!< BKP data register 37 */ -#define BKP_DATA38 REG16((BKP) + 0xB0U) /*!< BKP data register 38 */ -#define BKP_DATA39 REG16((BKP) + 0xB4U) /*!< BKP data register 39 */ -#define BKP_DATA40 REG16((BKP) + 0xB8U) /*!< BKP data register 40 */ -#define BKP_DATA41 REG16((BKP) + 0xBCU) /*!< BKP data register 41 */ -#define BKP_OCTL REG16((BKP) + 0x2CU) /*!< RTC signal output control register */ -#define BKP_TPCTL REG16((BKP) + 0x30U) /*!< tamper pin control register */ -#define BKP_TPCS REG16((BKP) + 0x34U) /*!< tamper control and status register */ - -/* bits definitions */ -/* BKP_DATA */ -#define BKP_DATA BITS(0,15) /*!< backup data */ - -/* BKP_OCTL */ -#define BKP_OCTL_RCCV BITS(0,6) /*!< RTC clock calibration value */ -#define BKP_OCTL_COEN BIT(7) /*!< RTC clock calibration output enable */ -#define BKP_OCTL_ASOEN BIT(8) /*!< RTC alarm or second signal output enable */ -#define BKP_OCTL_ROSEL BIT(9) /*!< RTC output selection */ -#define BKP_OCTL_CCOSEL BIT(14) /*!< RTC clock output selection */ -#define BKP_OCTL_CALDIR BIT(15) /*!< RTC clock calibration direction */ - -/* BKP_TPCTL */ -#define BKP_TPCTL_TPEN BIT(0) /*!< tamper detection enable */ -#define BKP_TPCTL_TPAL BIT(1) /*!< tamper pin active level */ - -/* BKP_TPCS */ -#define BKP_TPCS_TER BIT(0) /*!< tamper event reset */ -#define BKP_TPCS_TIR BIT(1) /*!< tamper interrupt reset */ -#define BKP_TPCS_TPIE BIT(2) /*!< tamper interrupt enable */ -#define BKP_TPCS_TEF BIT(8) /*!< tamper event flag */ -#define BKP_TPCS_TIF BIT(9) /*!< tamper interrupt flag */ - -/* constants definitions */ -/* BKP register */ -#define BKP_DATA0_9(number) REG16((BKP) + 0x04U + (number) * 0x04U) -#define BKP_DATA10_41(number) REG16((BKP) + 0x40U + ((number)-10U) * 0x04U) - -/* get data of BKP data register */ -#define BKP_DATA_GET(regval) GET_BITS((uint32_t)(regval), 0, 15) - -/* RTC clock calibration value */ -#define OCTL_RCCV(regval) (BITS(0,6) & ((uint32_t)(regval) << 0)) - -/* RTC output selection */ -#define RTC_OUTPUT_ALARM_PULSE ((uint16_t)0x0000U) /*!< RTC alarm pulse is selected as the RTC output */ -#define RTC_OUTPUT_SECOND_PULSE ((uint16_t)0x0200U) /*!< RTC second pulse is selected as the RTC output */ - -/* RTC clock output selection */ -#define RTC_CLOCK_DIV_64 ((uint16_t)0x0000U) /*!< RTC clock div 64 */ -#define RTC_CLOCK_DIV_1 ((uint16_t)0x4000U) /*!< RTC clock div 1 */ - -/* RTC clock calibration direction */ -#define RTC_CLOCK_SLOWED_DOWN ((uint16_t)0x0000U) /*!< RTC clock slow down */ -#define RTC_CLOCK_SPEED_UP ((uint16_t)0x8000U) /*!< RTC clock speed up */ - -/* tamper pin active level */ -#define TAMPER_PIN_ACTIVE_HIGH ((uint16_t)0x0000U) /*!< the tamper pin is active high */ -#define TAMPER_PIN_ACTIVE_LOW ((uint16_t)0x0002U) /*!< the tamper pin is active low */ - -/* tamper flag */ -#define BKP_FLAG_TAMPER BKP_TPCS_TEF /*!< tamper event flag */ - -/* tamper interrupt flag */ -#define BKP_INT_FLAG_TAMPER BKP_TPCS_TIF /*!< tamper interrupt flag */ - -/* BKP data register number */ -typedef enum -{ - BKP_DATA_0 = 1, /*!< BKP data register 0 */ - BKP_DATA_1, /*!< BKP data register 1 */ - BKP_DATA_2, /*!< BKP data register 2 */ - BKP_DATA_3, /*!< BKP data register 3 */ - BKP_DATA_4, /*!< BKP data register 4 */ - BKP_DATA_5, /*!< BKP data register 5 */ - BKP_DATA_6, /*!< BKP data register 6 */ - BKP_DATA_7, /*!< BKP data register 7 */ - BKP_DATA_8, /*!< BKP data register 8 */ - BKP_DATA_9, /*!< BKP data register 9 */ - BKP_DATA_10, /*!< BKP data register 10 */ - BKP_DATA_11, /*!< BKP data register 11 */ - BKP_DATA_12, /*!< BKP data register 12 */ - BKP_DATA_13, /*!< BKP data register 13 */ - BKP_DATA_14, /*!< BKP data register 14 */ - BKP_DATA_15, /*!< BKP data register 15 */ - BKP_DATA_16, /*!< BKP data register 16 */ - BKP_DATA_17, /*!< BKP data register 17 */ - BKP_DATA_18, /*!< BKP data register 18 */ - BKP_DATA_19, /*!< BKP data register 19 */ - BKP_DATA_20, /*!< BKP data register 20 */ - BKP_DATA_21, /*!< BKP data register 21 */ - BKP_DATA_22, /*!< BKP data register 22 */ - BKP_DATA_23, /*!< BKP data register 23 */ - BKP_DATA_24, /*!< BKP data register 24 */ - BKP_DATA_25, /*!< BKP data register 25 */ - BKP_DATA_26, /*!< BKP data register 26 */ - BKP_DATA_27, /*!< BKP data register 27 */ - BKP_DATA_28, /*!< BKP data register 28 */ - BKP_DATA_29, /*!< BKP data register 29 */ - BKP_DATA_30, /*!< BKP data register 30 */ - BKP_DATA_31, /*!< BKP data register 31 */ - BKP_DATA_32, /*!< BKP data register 32 */ - BKP_DATA_33, /*!< BKP data register 33 */ - BKP_DATA_34, /*!< BKP data register 34 */ - BKP_DATA_35, /*!< BKP data register 35 */ - BKP_DATA_36, /*!< BKP data register 36 */ - BKP_DATA_37, /*!< BKP data register 37 */ - BKP_DATA_38, /*!< BKP data register 38 */ - BKP_DATA_39, /*!< BKP data register 39 */ - BKP_DATA_40, /*!< BKP data register 40 */ - BKP_DATA_41, /*!< BKP data register 41 */ -}bkp_data_register_enum; - -/* function declarations */ -/* reset BKP registers */ -void bkp_deinit(void); -/* write BKP data register */ -void bkp_write_data(bkp_data_register_enum register_number, uint16_t data); -/* read BKP data register */ -uint16_t bkp_read_data(bkp_data_register_enum register_number); - -/* RTC related functions */ -/* enable RTC clock calibration output */ -void bkp_rtc_calibration_output_enable(void); -/* disable RTC clock calibration output */ -void bkp_rtc_calibration_output_disable(void); -/* enable RTC alarm or second signal output */ -void bkp_rtc_signal_output_enable(void); -/* disable RTC alarm or second signal output */ -void bkp_rtc_signal_output_disable(void); -/* RTC output selection */ -void bkp_rtc_output_select(uint16_t outputsel); -/* RTC clock output selection */ -void bkp_rtc_clock_output_select(uint16_t clocksel); -/* RTC clock calibration direction */ -void bkp_rtc_clock_calibration_direction(uint16_t direction); -/* set RTC clock calibration value */ -void bkp_rtc_calibration_value_set(uint8_t value); - -/* tamper pin related functions */ -/* enable tamper pin detection */ -void bkp_tamper_detection_enable(void); -/* disable tamper pin detection */ -void bkp_tamper_detection_disable(void); -/* set tamper pin active level */ -void bkp_tamper_active_level_set(uint16_t level); -/* enable tamper pin interrupt */ -void bkp_tamper_interrupt_enable(void); -/* disable tamper pin interrupt */ -void bkp_tamper_interrupt_disable(void); - -/* flag functions */ -/* get BKP flag state */ -FlagStatus bkp_flag_get(uint16_t flag); -/* clear BKP flag state */ -void bkp_flag_clear(uint16_t flag); -/* get BKP interrupt flag state */ -FlagStatus bkp_interrupt_flag_get(uint16_t flag); -/* clear BKP interrupt flag state */ -void bkp_interrupt_flag_clear(uint16_t flag); - -#endif /* GD32F30X_BKP_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_can.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_can.h deleted file mode 100644 index a5a203f..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_can.h +++ /dev/null @@ -1,754 +0,0 @@ -/*! - \file gd32f30x_can.h - \brief definitions for the CAN - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2019-11-27, V2.0.1, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_CAN_H -#define GD32F30X_CAN_H - -#include "gd32f30x.h" - -/* CAN definitions */ -#define CAN0 CAN_BASE /*!< CAN0 base address */ -#define CAN1 (CAN0 + 0x00000400U) /*!< CAN1 base address */ - -/* registers definitions */ -#define CAN_CTL(canx) REG32((canx) + 0x00U) /*!< CAN control register */ -#define CAN_STAT(canx) REG32((canx) + 0x04U) /*!< CAN status register */ -#define CAN_TSTAT(canx) REG32((canx) + 0x08U) /*!< CAN transmit status register*/ -#define CAN_RFIFO0(canx) REG32((canx) + 0x0CU) /*!< CAN receive FIFO0 register */ -#define CAN_RFIFO1(canx) REG32((canx) + 0x10U) /*!< CAN receive FIFO1 register */ -#define CAN_INTEN(canx) REG32((canx) + 0x14U) /*!< CAN interrupt enable register */ -#define CAN_ERR(canx) REG32((canx) + 0x18U) /*!< CAN error register */ -#define CAN_BT(canx) REG32((canx) + 0x1CU) /*!< CAN bit timing register */ -#define CAN_TMI0(canx) REG32((canx) + 0x180U) /*!< CAN transmit mailbox0 identifier register */ -#define CAN_TMP0(canx) REG32((canx) + 0x184U) /*!< CAN transmit mailbox0 property register */ -#define CAN_TMDATA00(canx) REG32((canx) + 0x188U) /*!< CAN transmit mailbox0 data0 register */ -#define CAN_TMDATA10(canx) REG32((canx) + 0x18CU) /*!< CAN transmit mailbox0 data1 register */ -#define CAN_TMI1(canx) REG32((canx) + 0x190U) /*!< CAN transmit mailbox1 identifier register */ -#define CAN_TMP1(canx) REG32((canx) + 0x194U) /*!< CAN transmit mailbox1 property register */ -#define CAN_TMDATA01(canx) REG32((canx) + 0x198U) /*!< CAN transmit mailbox1 data0 register */ -#define CAN_TMDATA11(canx) REG32((canx) + 0x19CU) /*!< CAN transmit mailbox1 data1 register */ -#define CAN_TMI2(canx) REG32((canx) + 0x1A0U) /*!< CAN transmit mailbox2 identifier register */ -#define CAN_TMP2(canx) REG32((canx) + 0x1A4U) /*!< CAN transmit mailbox2 property register */ -#define CAN_TMDATA02(canx) REG32((canx) + 0x1A8U) /*!< CAN transmit mailbox2 data0 register */ -#define CAN_TMDATA12(canx) REG32((canx) + 0x1ACU) /*!< CAN transmit mailbox2 data1 register */ -#define CAN_RFIFOMI0(canx) REG32((canx) + 0x1B0U) /*!< CAN receive FIFO0 mailbox identifier register */ -#define CAN_RFIFOMP0(canx) REG32((canx) + 0x1B4U) /*!< CAN receive FIFO0 mailbox property register */ -#define CAN_RFIFOMDATA00(canx) REG32((canx) + 0x1B8U) /*!< CAN receive FIFO0 mailbox data0 register */ -#define CAN_RFIFOMDATA10(canx) REG32((canx) + 0x1BCU) /*!< CAN receive FIFO0 mailbox data1 register */ -#define CAN_RFIFOMI1(canx) REG32((canx) + 0x1C0U) /*!< CAN receive FIFO1 mailbox identifier register */ -#define CAN_RFIFOMP1(canx) REG32((canx) + 0x1C4U) /*!< CAN receive FIFO1 mailbox property register */ -#define CAN_RFIFOMDATA01(canx) REG32((canx) + 0x1C8U) /*!< CAN receive FIFO1 mailbox data0 register */ -#define CAN_RFIFOMDATA11(canx) REG32((canx) + 0x1CCU) /*!< CAN receive FIFO1 mailbox data1 register */ -#define CAN_FCTL(canx) REG32((canx) + 0x200U) /*!< CAN filter control register */ -#define CAN_FMCFG(canx) REG32((canx) + 0x204U) /*!< CAN filter mode register */ -#define CAN_FSCFG(canx) REG32((canx) + 0x20CU) /*!< CAN filter scale register */ -#define CAN_FAFIFO(canx) REG32((canx) + 0x214U) /*!< CAN filter associated FIFO register */ -#define CAN_FW(canx) REG32((canx) + 0x21CU) /*!< CAN filter working register */ -#define CAN_F0DATA0(canx) REG32((canx) + 0x240U) /*!< CAN filter 0 data 0 register */ -#define CAN_F1DATA0(canx) REG32((canx) + 0x248U) /*!< CAN filter 1 data 0 register */ -#define CAN_F2DATA0(canx) REG32((canx) + 0x250U) /*!< CAN filter 2 data 0 register */ -#define CAN_F3DATA0(canx) REG32((canx) + 0x258U) /*!< CAN filter 3 data 0 register */ -#define CAN_F4DATA0(canx) REG32((canx) + 0x260U) /*!< CAN filter 4 data 0 register */ -#define CAN_F5DATA0(canx) REG32((canx) + 0x268U) /*!< CAN filter 5 data 0 register */ -#define CAN_F6DATA0(canx) REG32((canx) + 0x270U) /*!< CAN filter 6 data 0 register */ -#define CAN_F7DATA0(canx) REG32((canx) + 0x278U) /*!< CAN filter 7 data 0 register */ -#define CAN_F8DATA0(canx) REG32((canx) + 0x280U) /*!< CAN filter 8 data 0 register */ -#define CAN_F9DATA0(canx) REG32((canx) + 0x288U) /*!< CAN filter 9 data 0 register */ -#define CAN_F10DATA0(canx) REG32((canx) + 0x290U) /*!< CAN filter 10 data 0 register */ -#define CAN_F11DATA0(canx) REG32((canx) + 0x298U) /*!< CAN filter 11 data 0 register */ -#define CAN_F12DATA0(canx) REG32((canx) + 0x2A0U) /*!< CAN filter 12 data 0 register */ -#define CAN_F13DATA0(canx) REG32((canx) + 0x2A8U) /*!< CAN filter 13 data 0 register */ -#define CAN_F14DATA0(canx) REG32((canx) + 0x2B0U) /*!< CAN filter 14 data 0 register */ -#define CAN_F15DATA0(canx) REG32((canx) + 0x2B8U) /*!< CAN filter 15 data 0 register */ -#define CAN_F16DATA0(canx) REG32((canx) + 0x2C0U) /*!< CAN filter 16 data 0 register */ -#define CAN_F17DATA0(canx) REG32((canx) + 0x2C8U) /*!< CAN filter 17 data 0 register */ -#define CAN_F18DATA0(canx) REG32((canx) + 0x2D0U) /*!< CAN filter 18 data 0 register */ -#define CAN_F19DATA0(canx) REG32((canx) + 0x2D8U) /*!< CAN filter 19 data 0 register */ -#define CAN_F20DATA0(canx) REG32((canx) + 0x2E0U) /*!< CAN filter 20 data 0 register */ -#define CAN_F21DATA0(canx) REG32((canx) + 0x2E8U) /*!< CAN filter 21 data 0 register */ -#define CAN_F22DATA0(canx) REG32((canx) + 0x2F0U) /*!< CAN filter 22 data 0 register */ -#define CAN_F23DATA0(canx) REG32((canx) + 0x3F8U) /*!< CAN filter 23 data 0 register */ -#define CAN_F24DATA0(canx) REG32((canx) + 0x300U) /*!< CAN filter 24 data 0 register */ -#define CAN_F25DATA0(canx) REG32((canx) + 0x308U) /*!< CAN filter 25 data 0 register */ -#define CAN_F26DATA0(canx) REG32((canx) + 0x310U) /*!< CAN filter 26 data 0 register */ -#define CAN_F27DATA0(canx) REG32((canx) + 0x318U) /*!< CAN filter 27 data 0 register */ -#define CAN_F0DATA1(canx) REG32((canx) + 0x244U) /*!< CAN filter 0 data 1 register */ -#define CAN_F1DATA1(canx) REG32((canx) + 0x24CU) /*!< CAN filter 1 data 1 register */ -#define CAN_F2DATA1(canx) REG32((canx) + 0x254U) /*!< CAN filter 2 data 1 register */ -#define CAN_F3DATA1(canx) REG32((canx) + 0x25CU) /*!< CAN filter 3 data 1 register */ -#define CAN_F4DATA1(canx) REG32((canx) + 0x264U) /*!< CAN filter 4 data 1 register */ -#define CAN_F5DATA1(canx) REG32((canx) + 0x26CU) /*!< CAN filter 5 data 1 register */ -#define CAN_F6DATA1(canx) REG32((canx) + 0x274U) /*!< CAN filter 6 data 1 register */ -#define CAN_F7DATA1(canx) REG32((canx) + 0x27CU) /*!< CAN filter 7 data 1 register */ -#define CAN_F8DATA1(canx) REG32((canx) + 0x284U) /*!< CAN filter 8 data 1 register */ -#define CAN_F9DATA1(canx) REG32((canx) + 0x28CU) /*!< CAN filter 9 data 1 register */ -#define CAN_F10DATA1(canx) REG32((canx) + 0x294U) /*!< CAN filter 10 data 1 register */ -#define CAN_F11DATA1(canx) REG32((canx) + 0x29CU) /*!< CAN filter 11 data 1 register */ -#define CAN_F12DATA1(canx) REG32((canx) + 0x2A4U) /*!< CAN filter 12 data 1 register */ -#define CAN_F13DATA1(canx) REG32((canx) + 0x2ACU) /*!< CAN filter 13 data 1 register */ -#define CAN_F14DATA1(canx) REG32((canx) + 0x2B4U) /*!< CAN filter 14 data 1 register */ -#define CAN_F15DATA1(canx) REG32((canx) + 0x2BCU) /*!< CAN filter 15 data 1 register */ -#define CAN_F16DATA1(canx) REG32((canx) + 0x2C4U) /*!< CAN filter 16 data 1 register */ -#define CAN_F17DATA1(canx) REG32((canx) + 0x24CU) /*!< CAN filter 17 data 1 register */ -#define CAN_F18DATA1(canx) REG32((canx) + 0x2D4U) /*!< CAN filter 18 data 1 register */ -#define CAN_F19DATA1(canx) REG32((canx) + 0x2DCU) /*!< CAN filter 19 data 1 register */ -#define CAN_F20DATA1(canx) REG32((canx) + 0x2E4U) /*!< CAN filter 20 data 1 register */ -#define CAN_F21DATA1(canx) REG32((canx) + 0x2ECU) /*!< CAN filter 21 data 1 register */ -#define CAN_F22DATA1(canx) REG32((canx) + 0x2F4U) /*!< CAN filter 22 data 1 register */ -#define CAN_F23DATA1(canx) REG32((canx) + 0x2FCU) /*!< CAN filter 23 data 1 register */ -#define CAN_F24DATA1(canx) REG32((canx) + 0x304U) /*!< CAN filter 24 data 1 register */ -#define CAN_F25DATA1(canx) REG32((canx) + 0x30CU) /*!< CAN filter 25 data 1 register */ -#define CAN_F26DATA1(canx) REG32((canx) + 0x314U) /*!< CAN filter 26 data 1 register */ -#define CAN_F27DATA1(canx) REG32((canx) + 0x31CU) /*!< CAN filter 27 data 1 register */ - -/* CAN transmit mailbox bank */ -#define CAN_TMI(canx, bank) REG32((canx) + 0x180U + ((bank) * 0x10U)) /*!< CAN transmit mailbox identifier register */ -#define CAN_TMP(canx, bank) REG32((canx) + 0x184U + ((bank) * 0x10U)) /*!< CAN transmit mailbox property register */ -#define CAN_TMDATA0(canx, bank) REG32((canx) + 0x188U + ((bank) * 0x10U)) /*!< CAN transmit mailbox data0 register */ -#define CAN_TMDATA1(canx, bank) REG32((canx) + 0x18CU + ((bank) * 0x10U)) /*!< CAN transmit mailbox data1 register */ - -/* CAN filter bank */ -#define CAN_FDATA0(canx, bank) REG32((canx) + 0x240U + ((bank) * 0x8U) + 0x0U) /*!< CAN filter data 0 register */ -#define CAN_FDATA1(canx, bank) REG32((canx) + 0x240U + ((bank) * 0x8U) + 0x4U) /*!< CAN filter data 1 register */ - -/* CAN receive fifo mailbox bank */ -#define CAN_RFIFOMI(canx, bank) REG32((canx) + 0x1B0U + ((bank) * 0x10U)) /*!< CAN receive FIFO mailbox identifier register */ -#define CAN_RFIFOMP(canx, bank) REG32((canx) + 0x1B4U + ((bank) * 0x10U)) /*!< CAN receive FIFO mailbox property register */ -#define CAN_RFIFOMDATA0(canx, bank) REG32((canx) + 0x1B8U + ((bank) * 0x10U)) /*!< CAN receive FIFO mailbox data0 register */ -#define CAN_RFIFOMDATA1(canx, bank) REG32((canx) + 0x1BCU + ((bank) * 0x10U)) /*!< CAN receive FIFO mailbox data1 register */ - -/* bits definitions */ -/* CAN_CTL */ -#define CAN_CTL_IWMOD BIT(0) /*!< initial working mode */ -#define CAN_CTL_SLPWMOD BIT(1) /*!< sleep working mode */ -#define CAN_CTL_TFO BIT(2) /*!< transmit FIFO order */ -#define CAN_CTL_RFOD BIT(3) /*!< receive FIFO overwrite disable */ -#define CAN_CTL_ARD BIT(4) /*!< automatic retransmission disable */ -#define CAN_CTL_AWU BIT(5) /*!< automatic wakeup */ -#define CAN_CTL_ABOR BIT(6) /*!< automatic bus-off recovery */ -#define CAN_CTL_TTC BIT(7) /*!< time triggered communication */ -#define CAN_CTL_SWRST BIT(15) /*!< CAN software reset */ -#define CAN_CTL_DFZ BIT(16) /*!< CAN debug freeze */ - -/* CAN_STAT */ -#define CAN_STAT_IWS BIT(0) /*!< initial working state */ -#define CAN_STAT_SLPWS BIT(1) /*!< sleep working state */ -#define CAN_STAT_ERRIF BIT(2) /*!< error interrupt flag*/ -#define CAN_STAT_WUIF BIT(3) /*!< status change interrupt flag of wakeup from sleep working mode */ -#define CAN_STAT_SLPIF BIT(4) /*!< status change interrupt flag of sleep working mode entering */ -#define CAN_STAT_TS BIT(8) /*!< transmitting state */ -#define CAN_STAT_RS BIT(9) /*!< receiving state */ -#define CAN_STAT_LASTRX BIT(10) /*!< last sample value of rx pin */ -#define CAN_STAT_RXL BIT(11) /*!< CAN rx signal */ - -/* CAN_TSTAT */ -#define CAN_TSTAT_MTF0 BIT(0) /*!< mailbox0 transmit finished */ -#define CAN_TSTAT_MTFNERR0 BIT(1) /*!< mailbox0 transmit finished and no error */ -#define CAN_TSTAT_MAL0 BIT(2) /*!< mailbox0 arbitration lost */ -#define CAN_TSTAT_MTE0 BIT(3) /*!< mailbox0 transmit error */ -#define CAN_TSTAT_MST0 BIT(7) /*!< mailbox0 stop transmitting */ -#define CAN_TSTAT_MTF1 BIT(8) /*!< mailbox1 transmit finished */ -#define CAN_TSTAT_MTFNERR1 BIT(9) /*!< mailbox1 transmit finished and no error */ -#define CAN_TSTAT_MAL1 BIT(10) /*!< mailbox1 arbitration lost */ -#define CAN_TSTAT_MTE1 BIT(11) /*!< mailbox1 transmit error */ -#define CAN_TSTAT_MST1 BIT(15) /*!< mailbox1 stop transmitting */ -#define CAN_TSTAT_MTF2 BIT(16) /*!< mailbox2 transmit finished */ -#define CAN_TSTAT_MTFNERR2 BIT(17) /*!< mailbox2 transmit finished and no error */ -#define CAN_TSTAT_MAL2 BIT(18) /*!< mailbox2 arbitration lost */ -#define CAN_TSTAT_MTE2 BIT(19) /*!< mailbox2 transmit error */ -#define CAN_TSTAT_MST2 BIT(23) /*!< mailbox2 stop transmitting */ -#define CAN_TSTAT_NUM BITS(24,25) /*!< mailbox number */ -#define CAN_TSTAT_TME0 BIT(26) /*!< transmit mailbox0 empty */ -#define CAN_TSTAT_TME1 BIT(27) /*!< transmit mailbox1 empty */ -#define CAN_TSTAT_TME2 BIT(28) /*!< transmit mailbox2 empty */ -#define CAN_TSTAT_TMLS0 BIT(29) /*!< last sending priority flag for mailbox0 */ -#define CAN_TSTAT_TMLS1 BIT(30) /*!< last sending priority flag for mailbox1 */ -#define CAN_TSTAT_TMLS2 BIT(31) /*!< last sending priority flag for mailbox2 */ - -/* CAN_RFIFO0 */ -#define CAN_RFIFO0_RFL0 BITS(0,1) /*!< receive FIFO0 length */ -#define CAN_RFIFO0_RFF0 BIT(3) /*!< receive FIFO0 full */ -#define CAN_RFIFO0_RFO0 BIT(4) /*!< receive FIFO0 overfull */ -#define CAN_RFIFO0_RFD0 BIT(5) /*!< receive FIFO0 dequeue */ - -/* CAN_RFIFO1 */ -#define CAN_RFIFO1_RFL1 BITS(0,1) /*!< receive FIFO1 length */ -#define CAN_RFIFO1_RFF1 BIT(3) /*!< receive FIFO1 full */ -#define CAN_RFIFO1_RFO1 BIT(4) /*!< receive FIFO1 overfull */ -#define CAN_RFIFO1_RFD1 BIT(5) /*!< receive FIFO1 dequeue */ - -/* CAN_INTEN */ -#define CAN_INTEN_TMEIE BIT(0) /*!< transmit mailbox empty interrupt enable */ -#define CAN_INTEN_RFNEIE0 BIT(1) /*!< receive FIFO0 not empty interrupt enable */ -#define CAN_INTEN_RFFIE0 BIT(2) /*!< receive FIFO0 full interrupt enable */ -#define CAN_INTEN_RFOIE0 BIT(3) /*!< receive FIFO0 overfull interrupt enable */ -#define CAN_INTEN_RFNEIE1 BIT(4) /*!< receive FIFO1 not empty interrupt enable */ -#define CAN_INTEN_RFFIE1 BIT(5) /*!< receive FIFO1 full interrupt enable */ -#define CAN_INTEN_RFOIE1 BIT(6) /*!< receive FIFO1 overfull interrupt enable */ -#define CAN_INTEN_WERRIE BIT(8) /*!< warning error interrupt enable */ -#define CAN_INTEN_PERRIE BIT(9) /*!< passive error interrupt enable */ -#define CAN_INTEN_BOIE BIT(10) /*!< bus-off interrupt enable */ -#define CAN_INTEN_ERRNIE BIT(11) /*!< error number interrupt enable */ -#define CAN_INTEN_ERRIE BIT(15) /*!< error interrupt enable */ -#define CAN_INTEN_WIE BIT(16) /*!< wakeup interrupt enable */ -#define CAN_INTEN_SLPWIE BIT(17) /*!< sleep working interrupt enable */ - -/* CAN_ERR */ -#define CAN_ERR_WERR BIT(0) /*!< warning error */ -#define CAN_ERR_PERR BIT(1) /*!< passive error */ -#define CAN_ERR_BOERR BIT(2) /*!< bus-off error */ -#define CAN_ERR_ERRN BITS(4,6) /*!< error number */ -#define CAN_ERR_TECNT BITS(16,23) /*!< transmit error count */ -#define CAN_ERR_RECNT BITS(24,31) /*!< receive error count */ - -/* CAN_BT */ -#define CAN_BT_BAUDPSC BITS(0,9) /*!< baudrate prescaler */ -#define CAN_BT_BS1 BITS(16,19) /*!< bit segment 1 */ -#define CAN_BT_BS2 BITS(20,22) /*!< bit segment 2 */ -#define CAN_BT_SJW BITS(24,25) /*!< resynchronization jump width */ -#define CAN_BT_LCMOD BIT(30) /*!< loopback communication mode */ -#define CAN_BT_SCMOD BIT(31) /*!< silent communication mode */ - -/* CAN_TMIx */ -#define CAN_TMI_TEN BIT(0) /*!< transmit enable */ -#define CAN_TMI_FT BIT(1) /*!< frame type */ -#define CAN_TMI_FF BIT(2) /*!< frame format */ -#define CAN_TMI_EFID BITS(3,31) /*!< the frame identifier */ -#define CAN_TMI_SFID BITS(21,31) /*!< the frame identifier */ - -/* CAN_TMPx */ -#define CAN_TMP_DLENC BITS(0,3) /*!< data length code */ -#define CAN_TMP_TSEN BIT(8) /*!< time stamp enable */ -#define CAN_TMP_TS BITS(16,31) /*!< time stamp */ - -/* CAN_TMDATA0x */ -#define CAN_TMDATA0_DB0 BITS(0,7) /*!< transmit data byte 0 */ -#define CAN_TMDATA0_DB1 BITS(8,15) /*!< transmit data byte 1 */ -#define CAN_TMDATA0_DB2 BITS(16,23) /*!< transmit data byte 2 */ -#define CAN_TMDATA0_DB3 BITS(24,31) /*!< transmit data byte 3 */ - -/* CAN_TMDATA1x */ -#define CAN_TMDATA1_DB4 BITS(0,7) /*!< transmit data byte 4 */ -#define CAN_TMDATA1_DB5 BITS(8,15) /*!< transmit data byte 5 */ -#define CAN_TMDATA1_DB6 BITS(16,23) /*!< transmit data byte 6 */ -#define CAN_TMDATA1_DB7 BITS(24,31) /*!< transmit data byte 7 */ - -/* CAN_RFIFOMIx */ -#define CAN_RFIFOMI_FT BIT(1) /*!< frame type */ -#define CAN_RFIFOMI_FF BIT(2) /*!< frame format */ -#define CAN_RFIFOMI_EFID BITS(3,31) /*!< the frame identifier */ -#define CAN_RFIFOMI_SFID BITS(21,31) /*!< the frame identifier */ - -/* CAN_RFIFOMPx */ -#define CAN_RFIFOMP_DLENC BITS(0,3) /*!< receive data length code */ -#define CAN_RFIFOMP_FI BITS(8,15) /*!< filter index */ -#define CAN_RFIFOMP_TS BITS(16,31) /*!< time stamp */ - -/* CAN_RFIFOMDATA0x */ -#define CAN_RFIFOMDATA0_DB0 BITS(0,7) /*!< receive data byte 0 */ -#define CAN_RFIFOMDATA0_DB1 BITS(8,15) /*!< receive data byte 1 */ -#define CAN_RFIFOMDATA0_DB2 BITS(16,23) /*!< receive data byte 2 */ -#define CAN_RFIFOMDATA0_DB3 BITS(24,31) /*!< receive data byte 3 */ - -/* CAN_RFIFOMDATA1x */ -#define CAN_RFIFOMDATA1_DB4 BITS(0,7) /*!< receive data byte 4 */ -#define CAN_RFIFOMDATA1_DB5 BITS(8,15) /*!< receive data byte 5 */ -#define CAN_RFIFOMDATA1_DB6 BITS(16,23) /*!< receive data byte 6 */ -#define CAN_RFIFOMDATA1_DB7 BITS(24,31) /*!< receive data byte 7 */ - -/* CAN_FCTL */ -#define CAN_FCTL_FLD BIT(0) /*!< filter lock disable */ -#define CAN_FCTL_HBC1F BITS(8,13) /*!< header bank of CAN1 filter */ - -/* CAN_FMCFG */ -#define CAN_FMCFG_FMOD(regval) BIT(regval) /*!< filter mode, list or mask*/ - -/* CAN_FSCFG */ -#define CAN_FSCFG_FS(regval) BIT(regval) /*!< filter scale, 32 bits or 16 bits*/ - -/* CAN_FAFIFO */ -#define CAN_FAFIFOR_FAF(regval) BIT(regval) /*!< filter associated with FIFO */ - -/* CAN_FW */ -#define CAN_FW_FW(regval) BIT(regval) /*!< filter working */ - -/* CAN_FxDATAy */ -#define CAN_FDATA_FD(regval) BIT(regval) /*!< filter data */ - -/* consts definitions */ -/* define the CAN bit position and its register index offset */ -#define CAN_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define CAN_REG_VAL(canx, offset) (REG32((canx) + ((uint32_t)(offset) >> 6))) -#define CAN_BIT_POS(val) ((uint32_t)(val) & 0x1FU) - -#define CAN_REGIDX_BITS(regidx, bitpos0, bitpos1) (((uint32_t)(regidx) << 12) | ((uint32_t)(bitpos0) << 6) | (uint32_t)(bitpos1)) -#define CAN_REG_VALS(canx, offset) (REG32((canx) + ((uint32_t)(offset) >> 12))) -#define CAN_BIT_POS0(val) (((uint32_t)(val) >> 6) & 0x1FU) -#define CAN_BIT_POS1(val) ((uint32_t)(val) & 0x1FU) - -/* register offset */ -#define STAT_REG_OFFSET ((uint8_t)0x04U) /*!< STAT register offset */ -#define TSTAT_REG_OFFSET ((uint8_t)0x08U) /*!< TSTAT register offset */ -#define RFIFO0_REG_OFFSET ((uint8_t)0x0CU) /*!< RFIFO0 register offset */ -#define RFIFO1_REG_OFFSET ((uint8_t)0x10U) /*!< RFIFO1 register offset */ -#define ERR_REG_OFFSET ((uint8_t)0x18U) /*!< ERR register offset */ - -/* CAN flags */ -typedef enum -{ - /* flags in STAT register */ - CAN_FLAG_RXL = CAN_REGIDX_BIT(STAT_REG_OFFSET, 11U), /*!< RX level */ - CAN_FLAG_LASTRX = CAN_REGIDX_BIT(STAT_REG_OFFSET, 10U), /*!< last sample value of RX pin */ - CAN_FLAG_RS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 9U), /*!< receiving state */ - CAN_FLAG_TS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 8U), /*!< transmitting state */ - CAN_FLAG_SLPIF = CAN_REGIDX_BIT(STAT_REG_OFFSET, 4U), /*!< status change flag of entering sleep working mode */ - CAN_FLAG_WUIF = CAN_REGIDX_BIT(STAT_REG_OFFSET, 3U), /*!< status change flag of wakeup from sleep working mode */ - CAN_FLAG_ERRIF = CAN_REGIDX_BIT(STAT_REG_OFFSET, 2U), /*!< error flag */ - CAN_FLAG_SLPWS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 1U), /*!< sleep working state */ - CAN_FLAG_IWS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 0U), /*!< initial working state */ - /* flags in TSTAT register */ - CAN_FLAG_TMLS2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 31U), /*!< transmit mailbox 2 last sending in Tx FIFO */ - CAN_FLAG_TMLS1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 30U), /*!< transmit mailbox 1 last sending in Tx FIFO */ - CAN_FLAG_TMLS0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 29U), /*!< transmit mailbox 0 last sending in Tx FIFO */ - CAN_FLAG_TME2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 28U), /*!< transmit mailbox 2 empty */ - CAN_FLAG_TME1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 27U), /*!< transmit mailbox 1 empty */ - CAN_FLAG_TME0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 26U), /*!< transmit mailbox 0 empty */ - CAN_FLAG_MTE2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 19U), /*!< mailbox 2 transmit error */ - CAN_FLAG_MTE1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 11U), /*!< mailbox 1 transmit error */ - CAN_FLAG_MTE0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 3U), /*!< mailbox 0 transmit error */ - CAN_FLAG_MAL2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 18U), /*!< mailbox 2 arbitration lost */ - CAN_FLAG_MAL1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 10U), /*!< mailbox 1 arbitration lost */ - CAN_FLAG_MAL0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 2U), /*!< mailbox 0 arbitration lost */ - CAN_FLAG_MTFNERR2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 17U), /*!< mailbox 2 transmit finished with no error */ - CAN_FLAG_MTFNERR1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 9U), /*!< mailbox 1 transmit finished with no error */ - CAN_FLAG_MTFNERR0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 1U), /*!< mailbox 0 transmit finished with no error */ - CAN_FLAG_MTF2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 16U), /*!< mailbox 2 transmit finished */ - CAN_FLAG_MTF1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 8U), /*!< mailbox 1 transmit finished */ - CAN_FLAG_MTF0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 0U), /*!< mailbox 0 transmit finished */ - /* flags in RFIFO0 register */ - CAN_FLAG_RFO0 = CAN_REGIDX_BIT(RFIFO0_REG_OFFSET, 4U), /*!< receive FIFO0 overfull */ - CAN_FLAG_RFF0 = CAN_REGIDX_BIT(RFIFO0_REG_OFFSET, 3U), /*!< receive FIFO0 full */ - /* flags in RFIFO1 register */ - CAN_FLAG_RFO1 = CAN_REGIDX_BIT(RFIFO1_REG_OFFSET, 4U), /*!< receive FIFO1 overfull */ - CAN_FLAG_RFF1 = CAN_REGIDX_BIT(RFIFO1_REG_OFFSET, 3U), /*!< receive FIFO1 full */ - /* flags in ERR register */ - CAN_FLAG_BOERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 2U), /*!< bus-off error */ - CAN_FLAG_PERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 1U), /*!< passive error */ - CAN_FLAG_WERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 0U), /*!< warning error */ -}can_flag_enum; - -/* CAN interrupt flags */ -typedef enum -{ - /* interrupt flags in STAT register */ - CAN_INT_FLAG_SLPIF = CAN_REGIDX_BITS(STAT_REG_OFFSET, 4U, 17U), /*!< status change interrupt flag of sleep working mode entering */ - CAN_INT_FLAG_WUIF = CAN_REGIDX_BITS(STAT_REG_OFFSET, 3U, 16), /*!< status change interrupt flag of wakeup from sleep working mode */ - CAN_INT_FLAG_ERRIF = CAN_REGIDX_BITS(STAT_REG_OFFSET, 2U, 15), /*!< error interrupt flag */ - /* interrupt flags in TSTAT register */ - CAN_INT_FLAG_MTF2 = CAN_REGIDX_BITS(TSTAT_REG_OFFSET, 16U, 0U), /*!< mailbox 2 transmit finished interrupt flag */ - CAN_INT_FLAG_MTF1 = CAN_REGIDX_BITS(TSTAT_REG_OFFSET, 8U, 0U), /*!< mailbox 1 transmit finished interrupt flag */ - CAN_INT_FLAG_MTF0 = CAN_REGIDX_BITS(TSTAT_REG_OFFSET, 0U, 0U), /*!< mailbox 0 transmit finished interrupt flag */ - /* interrupt flags in RFIFO0 register */ - CAN_INT_FLAG_RFO0 = CAN_REGIDX_BITS(RFIFO0_REG_OFFSET, 4U, 3U), /*!< receive FIFO0 overfull interrupt flag */ - CAN_INT_FLAG_RFF0 = CAN_REGIDX_BITS(RFIFO0_REG_OFFSET, 3U, 2U), /*!< receive FIFO0 full interrupt flag */ - CAN_INT_FLAG_RFL0 = CAN_REGIDX_BITS(RFIFO0_REG_OFFSET, 2U, 1U), /*!< receive FIFO0 not empty interrupt flag */ - /* interrupt flags in RFIFO0 register */ - CAN_INT_FLAG_RFO1 = CAN_REGIDX_BITS(RFIFO1_REG_OFFSET, 4U, 6U), /*!< receive FIFO1 overfull interrupt flag */ - CAN_INT_FLAG_RFF1 = CAN_REGIDX_BITS(RFIFO1_REG_OFFSET, 3U, 5U), /*!< receive FIFO1 full interrupt flag */ - CAN_INT_FLAG_RFL1 = CAN_REGIDX_BITS(RFIFO1_REG_OFFSET, 2U, 4U), /*!< receive FIFO0 not empty interrupt flag */ - /* interrupt flags in ERR register */ - CAN_INT_FLAG_ERRN = CAN_REGIDX_BITS(ERR_REG_OFFSET, 3U, 11U), /*!< error number interrupt flag */ - CAN_INT_FLAG_BOERR = CAN_REGIDX_BITS(ERR_REG_OFFSET, 2U, 10U), /*!< bus-off error interrupt flag */ - CAN_INT_FLAG_PERR = CAN_REGIDX_BITS(ERR_REG_OFFSET, 1U, 9U), /*!< passive error interrupt flag */ - CAN_INT_FLAG_WERR = CAN_REGIDX_BITS(ERR_REG_OFFSET, 0U, 8U), /*!< warning error interrupt flag */ -}can_interrupt_flag_enum; - -/* CAN initiliaze parameters struct */ -typedef struct -{ - uint8_t working_mode; /*!< CAN working mode */ - uint8_t resync_jump_width; /*!< CAN resynchronization jump width */ - uint8_t time_segment_1; /*!< time segment 1 */ - uint8_t time_segment_2; /*!< time segment 2 */ - ControlStatus time_triggered; /*!< time triggered communication mode */ - ControlStatus auto_bus_off_recovery; /*!< automatic bus-off recovery */ - ControlStatus auto_wake_up; /*!< automatic wake-up mode */ - ControlStatus no_auto_retrans; /*!< automatic retransmission mode disable */ - ControlStatus rec_fifo_overwrite; /*!< receive FIFO overwrite mode */ - ControlStatus trans_fifo_order; /*!< transmit FIFO order */ - uint16_t prescaler; /*!< baudrate prescaler */ -}can_parameter_struct; - -/* CAN transmit message struct */ -typedef struct -{ - uint32_t tx_sfid; /*!< standard format frame identifier */ - uint32_t tx_efid; /*!< extended format frame identifier */ - uint8_t tx_ff; /*!< format of frame, standard or extended format */ - uint8_t tx_ft; /*!< type of frame, data or remote */ - uint8_t tx_dlen; /*!< data length */ - uint8_t tx_data[8]; /*!< transmit data */ -}can_trasnmit_message_struct; - -/* CAN receive message struct */ -typedef struct -{ - uint32_t rx_sfid; /*!< standard format frame identifier */ - uint32_t rx_efid; /*!< extended format frame identifier */ - uint8_t rx_ff; /*!< format of frame, standard or extended format */ - uint8_t rx_ft; /*!< type of frame, data or remote */ - uint8_t rx_dlen; /*!< data length */ - uint8_t rx_data[8]; /*!< receive data */ - uint8_t rx_fi; /*!< filtering index */ -} can_receive_message_struct; - -/* CAN filter parameters struct */ -typedef struct -{ - uint16_t filter_list_high; /*!< filter list number high bits*/ - uint16_t filter_list_low; /*!< filter list number low bits */ - uint16_t filter_mask_high; /*!< filter mask number high bits */ - uint16_t filter_mask_low; /*!< filter mask number low bits */ - uint16_t filter_fifo_number; /*!< receive FIFO associated with the filter */ - uint16_t filter_number; /*!< filter number */ - uint16_t filter_mode; /*!< filter mode, list or mask */ - uint16_t filter_bits; /*!< filter scale */ - ControlStatus filter_enable; /*!< filter work or not */ -}can_filter_parameter_struct; - -/* CAN errors */ -typedef enum -{ - CAN_ERROR_NONE = 0, /*!< no error */ - CAN_ERROR_FILL, /*!< fill error */ - CAN_ERROR_FORMATE, /*!< format error */ - CAN_ERROR_ACK, /*!< ACK error */ - CAN_ERROR_BITRECESSIVE, /*!< bit recessive error */ - CAN_ERROR_BITDOMINANTER, /*!< bit dominant error */ - CAN_ERROR_CRC, /*!< CRC error */ - CAN_ERROR_SOFTWARECFG, /*!< software configure */ -}can_error_enum; - -/* transmit states */ -typedef enum -{ - CAN_TRANSMIT_FAILED = 0U, /*!< CAN transmitted failure */ - CAN_TRANSMIT_OK = 1U, /*!< CAN transmitted success */ - CAN_TRANSMIT_PENDING = 2U, /*!< CAN transmitted pending */ - CAN_TRANSMIT_NOMAILBOX = 4U, /*!< no empty mailbox to be used for CAN */ -}can_transmit_state_enum; - -typedef enum -{ - CAN_INIT_STRUCT = 0, /* CAN initiliaze parameters struct */ - CAN_FILTER_STRUCT, /* CAN filter parameters struct */ - CAN_TX_MESSAGE_STRUCT, /* CAN transmit message struct */ - CAN_RX_MESSAGE_STRUCT, /* CAN receive message struct */ -}can_struct_type_enum; - -/* CAN baudrate prescaler*/ -#define BT_BAUDPSC(regval) (BITS(0,9) & ((uint32_t)(regval) << 0)) - -/* CAN bit segment 1*/ -#define BT_BS1(regval) (BITS(16,19) & ((uint32_t)(regval) << 16)) - -/* CAN bit segment 2*/ -#define BT_BS2(regval) (BITS(20,22) & ((uint32_t)(regval) << 20)) - -/* CAN resynchronization jump width*/ -#define BT_SJW(regval) (BITS(24,25) & ((uint32_t)(regval) << 24)) - -/* CAN communication mode*/ -#define BT_MODE(regval) (BITS(30,31) & ((uint32_t)(regval) << 30)) - -/* CAN FDATA high 16 bits */ -#define FDATA_MASK_HIGH(regval) (BITS(16,31) & ((uint32_t)(regval) << 16)) - -/* CAN FDATA low 16 bits */ -#define FDATA_MASK_LOW(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) - -/* CAN1 filter start bank_number*/ -#define FCTL_HBC1F(regval) (BITS(8,13) & ((uint32_t)(regval) << 8)) - -/* CAN transmit mailbox extended identifier*/ -#define TMI_EFID(regval) (BITS(3,31) & ((uint32_t)(regval) << 3)) - -/* CAN transmit mailbox standard identifier*/ -#define TMI_SFID(regval) (BITS(21,31) & ((uint32_t)(regval) << 21)) - -/* transmit data byte 0 */ -#define TMDATA0_DB0(regval) (BITS(0,7) & ((uint32_t)(regval) << 0)) - -/* transmit data byte 1 */ -#define TMDATA0_DB1(regval) (BITS(8,15) & ((uint32_t)(regval) << 8)) - -/* transmit data byte 2 */ -#define TMDATA0_DB2(regval) (BITS(16,23) & ((uint32_t)(regval) << 16)) - -/* transmit data byte 3 */ -#define TMDATA0_DB3(regval) (BITS(24,31) & ((uint32_t)(regval) << 24)) - -/* transmit data byte 4 */ -#define TMDATA1_DB4(regval) (BITS(0,7) & ((uint32_t)(regval) << 0)) - -/* transmit data byte 5 */ -#define TMDATA1_DB5(regval) (BITS(8,15) & ((uint32_t)(regval) << 8)) - -/* transmit data byte 6 */ -#define TMDATA1_DB6(regval) (BITS(16,23) & ((uint32_t)(regval) << 16)) - -/* transmit data byte 7 */ -#define TMDATA1_DB7(regval) (BITS(24,31) & ((uint32_t)(regval) << 24)) - -/* receive mailbox extended identifier*/ -#define GET_RFIFOMI_EFID(regval) GET_BITS((uint32_t)(regval), 3U, 31U) - -/* receive mailbox standrad identifier*/ -#define GET_RFIFOMI_SFID(regval) GET_BITS((uint32_t)(regval), 21U, 31U) - -/* receive data length */ -#define GET_RFIFOMP_DLENC(regval) GET_BITS((uint32_t)(regval), 0U, 3U) - -/* the index of the filter by which the frame is passed */ -#define GET_RFIFOMP_FI(regval) GET_BITS((uint32_t)(regval), 8U, 15U) - -/* receive data byte 0 */ -#define GET_RFIFOMDATA0_DB0(regval) GET_BITS((uint32_t)(regval), 0U, 7U) - -/* receive data byte 1 */ -#define GET_RFIFOMDATA0_DB1(regval) GET_BITS((uint32_t)(regval), 8U, 15U) - -/* receive data byte 2 */ -#define GET_RFIFOMDATA0_DB2(regval) GET_BITS((uint32_t)(regval), 16U, 23U) - -/* receive data byte 3 */ -#define GET_RFIFOMDATA0_DB3(regval) GET_BITS((uint32_t)(regval), 24U, 31U) - -/* receive data byte 4 */ -#define GET_RFIFOMDATA1_DB4(regval) GET_BITS((uint32_t)(regval), 0U, 7U) - -/* receive data byte 5 */ -#define GET_RFIFOMDATA1_DB5(regval) GET_BITS((uint32_t)(regval), 8U, 15U) - -/* receive data byte 6 */ -#define GET_RFIFOMDATA1_DB6(regval) GET_BITS((uint32_t)(regval), 16U, 23U) - -/* receive data byte 7 */ -#define GET_RFIFOMDATA1_DB7(regval) GET_BITS((uint32_t)(regval), 24U, 31U) - -/* error number */ -#define GET_ERR_ERRN(regval) GET_BITS((uint32_t)(regval), 4U, 6U) - -/* transmit error count */ -#define GET_ERR_TECNT(regval) GET_BITS((uint32_t)(regval), 16U, 23U) - -/* receive error count */ -#define GET_ERR_RECNT(regval) GET_BITS((uint32_t)(regval), 24U, 31U) - -/* CAN errors */ -#define ERR_ERRN(regval) (BITS(4,6) & ((uint32_t)(regval) << 4)) -#define CAN_ERRN_0 ERR_ERRN(0U) /* no error */ -#define CAN_ERRN_1 ERR_ERRN(1U) /*!< fill error */ -#define CAN_ERRN_2 ERR_ERRN(2U) /*!< format error */ -#define CAN_ERRN_3 ERR_ERRN(3U) /*!< ACK error */ -#define CAN_ERRN_4 ERR_ERRN(4U) /*!< bit recessive error */ -#define CAN_ERRN_5 ERR_ERRN(5U) /*!< bit dominant error */ -#define CAN_ERRN_6 ERR_ERRN(6U) /*!< CRC error */ -#define CAN_ERRN_7 ERR_ERRN(7U) /*!< software error */ - -#define CAN_STATE_PENDING ((uint32_t)0x00000000U) /*!< CAN pending */ - -/* CAN communication mode */ -#define CAN_NORMAL_MODE ((uint8_t)0x00U) /*!< normal communication mode */ -#define CAN_LOOPBACK_MODE ((uint8_t)0x01U) /*!< loopback communication mode */ -#define CAN_SILENT_MODE ((uint8_t)0x02U) /*!< silent communication mode */ -#define CAN_SILENT_LOOPBACK_MODE ((uint8_t)0x03U) /*!< loopback and silent communication mode */ - -/* CAN resynchronisation jump width */ -#define CAN_BT_SJW_1TQ ((uint8_t)0x00U) /*!< 1 time quanta */ -#define CAN_BT_SJW_2TQ ((uint8_t)0x01U) /*!< 2 time quanta */ -#define CAN_BT_SJW_3TQ ((uint8_t)0x02U) /*!< 3 time quanta */ -#define CAN_BT_SJW_4TQ ((uint8_t)0x03U) /*!< 4 time quanta */ - -/* CAN time segment 1 */ -#define CAN_BT_BS1_1TQ ((uint8_t)0x00U) /*!< 1 time quanta */ -#define CAN_BT_BS1_2TQ ((uint8_t)0x01U) /*!< 2 time quanta */ -#define CAN_BT_BS1_3TQ ((uint8_t)0x02U) /*!< 3 time quanta */ -#define CAN_BT_BS1_4TQ ((uint8_t)0x03U) /*!< 4 time quanta */ -#define CAN_BT_BS1_5TQ ((uint8_t)0x04U) /*!< 5 time quanta */ -#define CAN_BT_BS1_6TQ ((uint8_t)0x05U) /*!< 6 time quanta */ -#define CAN_BT_BS1_7TQ ((uint8_t)0x06U) /*!< 7 time quanta */ -#define CAN_BT_BS1_8TQ ((uint8_t)0x07U) /*!< 8 time quanta */ -#define CAN_BT_BS1_9TQ ((uint8_t)0x08U) /*!< 9 time quanta */ -#define CAN_BT_BS1_10TQ ((uint8_t)0x09U) /*!< 10 time quanta */ -#define CAN_BT_BS1_11TQ ((uint8_t)0x0AU) /*!< 11 time quanta */ -#define CAN_BT_BS1_12TQ ((uint8_t)0x0BU) /*!< 12 time quanta */ -#define CAN_BT_BS1_13TQ ((uint8_t)0x0CU) /*!< 13 time quanta */ -#define CAN_BT_BS1_14TQ ((uint8_t)0x0DU) /*!< 14 time quanta */ -#define CAN_BT_BS1_15TQ ((uint8_t)0x0EU) /*!< 15 time quanta */ -#define CAN_BT_BS1_16TQ ((uint8_t)0x0FU) /*!< 16 time quanta */ - -/* CAN time segment 2 */ -#define CAN_BT_BS2_1TQ ((uint8_t)0x00U) /*!< 1 time quanta */ -#define CAN_BT_BS2_2TQ ((uint8_t)0x01U) /*!< 2 time quanta */ -#define CAN_BT_BS2_3TQ ((uint8_t)0x02U) /*!< 3 time quanta */ -#define CAN_BT_BS2_4TQ ((uint8_t)0x03U) /*!< 4 time quanta */ -#define CAN_BT_BS2_5TQ ((uint8_t)0x04U) /*!< 5 time quanta */ -#define CAN_BT_BS2_6TQ ((uint8_t)0x05U) /*!< 6 time quanta */ -#define CAN_BT_BS2_7TQ ((uint8_t)0x06U) /*!< 7 time quanta */ -#define CAN_BT_BS2_8TQ ((uint8_t)0x07U) /*!< 8 time quanta */ - -/* CAN mailbox number */ -#define CAN_MAILBOX0 ((uint8_t)0x00U) /*!< mailbox0 */ -#define CAN_MAILBOX1 ((uint8_t)0x01U) /*!< mailbox1 */ -#define CAN_MAILBOX2 ((uint8_t)0x02U) /*!< mailbox2 */ -#define CAN_NOMAILBOX ((uint8_t)0x03U) /*!< no mailbox empty */ - -/* CAN frame format */ -#define CAN_FF_STANDARD ((uint32_t)0x00000000U) /*!< standard frame */ -#define CAN_FF_EXTENDED ((uint32_t)0x00000004U) /*!< extended frame */ - -/* CAN receive fifo */ -#define CAN_FIFO0 ((uint8_t)0x00U) /*!< receive FIFO0 */ -#define CAN_FIFO1 ((uint8_t)0x01U) /*!< receive FIFO1 */ - -/* frame number of receive fifo */ -#define CAN_RFIF_RFL_MASK ((uint32_t)0x00000003U) /*!< mask for frame number in receive FIFOx */ - -#define CAN_SFID_MASK ((uint32_t)0x000007FFU) /*!< mask of standard identifier */ -#define CAN_EFID_MASK ((uint32_t)0x1FFFFFFFU) /*!< mask of extended identifier */ - -/* CAN working mode */ -#define CAN_MODE_INITIALIZE ((uint8_t)0x01U) /*!< CAN initialize mode */ -#define CAN_MODE_NORMAL ((uint8_t)0x02U) /*!< CAN normal mode */ -#define CAN_MODE_SLEEP ((uint8_t)0x04U) /*!< CAN sleep mode */ - -/* filter bits */ -#define CAN_FILTERBITS_16BIT ((uint8_t)0x00U) /*!< CAN filter 16 bits */ -#define CAN_FILTERBITS_32BIT ((uint8_t)0x01U) /*!< CAN filter 32 bits */ - -/* filter mode */ -#define CAN_FILTERMODE_MASK ((uint8_t)0x00U) /*!< mask mode */ -#define CAN_FILTERMODE_LIST ((uint8_t)0x01U) /*!< list mode */ - -/* filter 16 bits mask */ -#define CAN_FILTER_MASK_16BITS ((uint32_t)0x0000FFFFU) /*!< can filter 16 bits mask */ - -/* frame type */ -#define CAN_FT_DATA ((uint32_t)0x00000000U) /*!< data frame */ -#define CAN_FT_REMOTE ((uint32_t)0x00000002U) /*!< remote frame */ - -/* CAN timeout */ -#define CAN_TIMEOUT ((uint32_t)0x0000FFFFU) /*!< timeout value */ - -/* interrupt enable bits */ -#define CAN_INT_TME CAN_INTEN_TMEIE /*!< transmit mailbox empty interrupt enable */ -#define CAN_INT_RFNE0 CAN_INTEN_RFNEIE0 /*!< receive FIFO0 not empty interrupt enable */ -#define CAN_INT_RFF0 CAN_INTEN_RFFIE0 /*!< receive FIFO0 full interrupt enable */ -#define CAN_INT_RFO0 CAN_INTEN_RFOIE0 /*!< receive FIFO0 overfull interrupt enable */ -#define CAN_INT_RFNE1 CAN_INTEN_RFNEIE1 /*!< receive FIFO1 not empty interrupt enable */ -#define CAN_INT_RFF1 CAN_INTEN_RFFIE1 /*!< receive FIFO1 full interrupt enable */ -#define CAN_INT_RFO1 CAN_INTEN_RFOIE1 /*!< receive FIFO1 overfull interrupt enable */ -#define CAN_INT_WERR CAN_INTEN_WERRIE /*!< warning error interrupt enable */ -#define CAN_INT_PERR CAN_INTEN_PERRIE /*!< passive error interrupt enable */ -#define CAN_INT_BO CAN_INTEN_BOIE /*!< bus-off interrupt enable */ -#define CAN_INT_ERRN CAN_INTEN_ERRNIE /*!< error number interrupt enable */ -#define CAN_INT_ERR CAN_INTEN_ERRIE /*!< error interrupt enable */ -#define CAN_INT_WAKEUP CAN_INTEN_WIE /*!< wakeup interrupt enable */ -#define CAN_INT_SLPW CAN_INTEN_SLPWIE /*!< sleep working interrupt enable */ - -/* function declarations */ -/* deinitialize CAN */ -void can_deinit(uint32_t can_periph); -/* initialize CAN struct */ -void can_struct_para_init(can_struct_type_enum type, void* p_struct); -/* initialize CAN */ -ErrStatus can_init(uint32_t can_periph, can_parameter_struct* can_parameter_init); -/* CAN filter init */ -void can_filter_init(can_filter_parameter_struct* can_filter_parameter_init); -/* set can1 fliter start bank number */ -void can1_filter_start_bank(uint8_t start_bank); -/* enable functions */ -/* CAN debug freeze enable */ -void can_debug_freeze_enable(uint32_t can_periph); -/* CAN debug freeze disable */ -void can_debug_freeze_disable(uint32_t can_periph); -/* CAN time trigger mode enable */ -void can_time_trigger_mode_enable(uint32_t can_periph); -/* CAN time trigger mode disable */ -void can_time_trigger_mode_disable(uint32_t can_periph); - -/* transmit functions */ -/* transmit CAN message */ -uint8_t can_message_transmit(uint32_t can_periph, can_trasnmit_message_struct* transmit_message); -/* get CAN transmit state */ -can_transmit_state_enum can_transmit_states(uint32_t can_periph, uint8_t mailbox_number); -/* stop CAN transmission */ -void can_transmission_stop(uint32_t can_periph, uint8_t mailbox_number); -/* CAN receive message */ -void can_message_receive(uint32_t can_periph, uint8_t fifo_number, can_receive_message_struct* receive_message); -/* CAN release fifo */ -void can_fifo_release(uint32_t can_periph, uint8_t fifo_number); -/* CAN receive message length */ -uint8_t can_receive_message_length_get(uint32_t can_periph, uint8_t fifo_number); -/* CAN working mode */ -ErrStatus can_working_mode_set(uint32_t can_periph, uint8_t working_mode); -/* CAN wakeup from sleep mode */ -ErrStatus can_wakeup(uint32_t can_periph); - -/* CAN get error */ -can_error_enum can_error_get(uint32_t can_periph); -/* get CAN receive error number */ -uint8_t can_receive_error_number_get(uint32_t can_periph); -/* get CAN transmit error number */ -uint8_t can_transmit_error_number_get(uint32_t can_periph); - -/* CAN interrupt enable */ -void can_interrupt_enable(uint32_t can_periph, uint32_t interrupt); -/* CAN interrupt disable */ -void can_interrupt_disable(uint32_t can_periph, uint32_t interrupt); -/* CAN get flag state */ -FlagStatus can_flag_get(uint32_t can_periph, can_flag_enum flag); -/* CAN clear flag state */ -void can_flag_clear(uint32_t can_periph, can_flag_enum flag); -/* CAN get interrupt flag state */ -FlagStatus can_interrupt_flag_get(uint32_t can_periph, can_interrupt_flag_enum flag); -/* CAN clear interrupt flag state */ -void can_interrupt_flag_clear(uint32_t can_periph, can_interrupt_flag_enum flag); - -#endif /* GD32F30X_CAN_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_crc.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_crc.h deleted file mode 100644 index 1563134..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_crc.h +++ /dev/null @@ -1,81 +0,0 @@ -/*! - \file gd32f30x_crc.h - \brief definitions for the CRC - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_CRC_H -#define GD32F30X_CRC_H - -#include "gd32f30x.h" - -/* CRC definitions */ -#define CRC CRC_BASE - -/* registers definitions */ -#define CRC_DATA REG32(CRC + 0x00U) /*!< CRC data register */ -#define CRC_FDATA REG32(CRC + 0x04U) /*!< CRC free data register */ -#define CRC_CTL REG32(CRC + 0x08U) /*!< CRC control register */ - -/* bits definitions */ -/* CRC_DATA */ -#define CRC_DATA_DATA BITS(0,31) /*!< CRC calculation result bits */ - -/* CRC_FDATA */ -#define CRC_FDATA_FDATA BITS(0,7) /*!< CRC free data bits */ - -/* CRC_CTL */ -#define CRC_CTL_RST BIT(0) /*!< CRC reset CRC_DATA register bit */ - - -/* function declarations */ -/* deinit CRC calculation unit */ -void crc_deinit(void); - -/* reset data register(CRC_DATA) to the value of 0xFFFFFFFF */ -void crc_data_register_reset(void); -/* read the value of the data register */ -uint32_t crc_data_register_read(void); - -/* read the value of the free data register */ -uint8_t crc_free_data_register_read(void); -/* write data to the free data register */ -void crc_free_data_register_write(uint8_t free_data); - -/* calculate the CRC value of a 32-bit data */ -uint32_t crc_single_data_calculate(uint32_t sdata); -/* calculate the CRC value of an array of 32-bit values */ -uint32_t crc_block_data_calculate(const uint32_t *array, uint32_t size); - -#endif /* GD32F30X_CRC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_ctc.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_ctc.h deleted file mode 100644 index d55d399..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_ctc.h +++ /dev/null @@ -1,186 +0,0 @@ -/*! - \file gd32f30x_ctc.h - \brief definitions for the CTC - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_CTC_H -#define GD32F30X_CTC_H - -#include "gd32f30x.h" - -/* CTC definitions */ -#define CTC CTC_BASE - -/* registers definitions */ -#define CTC_CTL0 REG32((CTC) + 0x00U) /*!< CTC control register 0 */ -#define CTC_CTL1 REG32((CTC) + 0x04U) /*!< CTC control register 1 */ -#define CTC_STAT REG32((CTC) + 0x08U) /*!< CTC status register */ -#define CTC_INTC REG32((CTC) + 0x0CU) /*!< CTC interrupt clear register */ - -/* bits definitions */ -/* CTC_CTL0 */ -#define CTC_CTL0_CKOKIE BIT(0) /*!< clock trim OK(CKOKIF) interrupt enable */ -#define CTC_CTL0_CKWARNIE BIT(1) /*!< clock trim warning(CKWARNIF) interrupt enable */ -#define CTC_CTL0_ERRIE BIT(2) /*!< error(ERRIF) interrupt enable */ -#define CTC_CTL0_EREFIE BIT(3) /*!< EREFIF interrupt enable */ -#define CTC_CTL0_CNTEN BIT(5) /*!< CTC counter enable */ -#define CTC_CTL0_AUTOTRIM BIT(6) /*!< hardware automatically trim mode */ -#define CTC_CTL0_SWREFPUL BIT(7) /*!< software reference source sync pulse */ -#define CTC_CTL0_TRIMVALUE BITS(8,13) /*!< IRC48M trim value */ - -/* CTC_CTL1 */ -#define CTC_CTL1_RLVALUE BITS(0,15) /*!< CTC counter reload value */ -#define CTC_CTL1_CKLIM BITS(16,23) /*!< clock trim base limit value */ -#define CTC_CTL1_REFPSC BITS(24,26) /*!< reference signal source prescaler */ -#define CTC_CTL1_REFSEL BITS(28,29) /*!< reference signal source selection */ -#define CTC_CTL1_REFPOL BIT(31) /*!< reference signal source polarity */ - -/* CTC_STAT */ -#define CTC_STAT_CKOKIF BIT(0) /*!< clock trim OK interrupt flag */ -#define CTC_STAT_CKWARNIF BIT(1) /*!< clock trim warning interrupt flag */ -#define CTC_STAT_ERRIF BIT(2) /*!< error interrupt flag */ -#define CTC_STAT_EREFIF BIT(3) /*!< expect reference interrupt flag */ -#define CTC_STAT_CKERR BIT(8) /*!< clock trim error bit */ -#define CTC_STAT_REFMISS BIT(9) /*!< reference sync pulse miss */ -#define CTC_STAT_TRIMERR BIT(10) /*!< trim value error bit */ -#define CTC_STAT_REFDIR BIT(15) /*!< CTC trim counter direction when reference sync pulse occurred */ -#define CTC_STAT_REFCAP BITS(16,31) /*!< CTC counter capture when reference sync pulse occurred */ - -/* CTC_INTC */ -#define CTC_INTC_CKOKIC BIT(0) /*!< CKOKIF interrupt clear bit */ -#define CTC_INTC_CKWARNIC BIT(1) /*!< CKWARNIF interrupt clear bit */ -#define CTC_INTC_ERRIC BIT(2) /*!< ERRIF interrupt clear bit */ -#define CTC_INTC_EREFIC BIT(3) /*!< EREFIF interrupt clear bit */ - -/* constants definitions */ -/* hardware automatically trim mode definitions */ -#define CTC_HARDWARE_TRIM_MODE_ENABLE CTC_CTL0_AUTOTRIM /*!< hardware automatically trim mode enable*/ -#define CTC_HARDWARE_TRIM_MODE_DISABLE ((uint32_t)0x00000000U) /*!< hardware automatically trim mode disable*/ - -/* reference signal source polarity definitions */ -#define CTC_REFSOURCE_POLARITY_FALLING CTC_CTL1_REFPOL /*!< reference signal source polarity is falling edge*/ -#define CTC_REFSOURCE_POLARITY_RISING ((uint32_t)0x00000000U) /*!< reference signal source polarity is rising edge*/ - -/* reference signal source selection definitions */ -#define CTL1_REFSEL(regval) (BITS(28,29) & ((uint32_t)(regval) << 28)) -#define CTC_REFSOURCE_GPIO CTL1_REFSEL(0) /*!< GPIO is selected */ -#define CTC_REFSOURCE_LXTAL CTL1_REFSEL(1) /*!< LXTAL is selected */ -#define CTC_REFSOURCE_USB_SOF CTL1_REFSEL(2) /*!< USBD_SOF or USBFS_SOF is selected */ - -/* reference signal source prescaler definitions */ -#define CTL1_REFPSC(regval) (BITS(24,26) & ((uint32_t)(regval) << 24)) -#define CTC_REFSOURCE_PSC_OFF CTL1_REFPSC(0) /*!< reference signal not divided */ -#define CTC_REFSOURCE_PSC_DIV2 CTL1_REFPSC(1) /*!< reference signal divided by 2 */ -#define CTC_REFSOURCE_PSC_DIV4 CTL1_REFPSC(2) /*!< reference signal divided by 4 */ -#define CTC_REFSOURCE_PSC_DIV8 CTL1_REFPSC(3) /*!< reference signal divided by 8 */ -#define CTC_REFSOURCE_PSC_DIV16 CTL1_REFPSC(4) /*!< reference signal divided by 16 */ -#define CTC_REFSOURCE_PSC_DIV32 CTL1_REFPSC(5) /*!< reference signal divided by 32 */ -#define CTC_REFSOURCE_PSC_DIV64 CTL1_REFPSC(6) /*!< reference signal divided by 64 */ -#define CTC_REFSOURCE_PSC_DIV128 CTL1_REFPSC(7) /*!< reference signal divided by 128 */ - -/* CTC interrupt enable definitions */ -#define CTC_INT_CKOK CTC_CTL0_CKOKIE /*!< clock trim OK interrupt enable */ -#define CTC_INT_CKWARN CTC_CTL0_CKWARNIE /*!< clock trim warning interrupt enable */ -#define CTC_INT_ERR CTC_CTL0_ERRIE /*!< error interrupt enable */ -#define CTC_INT_EREF CTC_CTL0_EREFIE /*!< expect reference interrupt enable */ - -/* CTC interrupt source definitions */ -#define CTC_INT_FLAG_CKOK CTC_STAT_CKOKIF /*!< clock trim OK interrupt flag */ -#define CTC_INT_FLAG_CKWARN CTC_STAT_CKWARNIF /*!< clock trim warning interrupt flag */ -#define CTC_INT_FLAG_ERR CTC_STAT_ERRIF /*!< error interrupt flag */ -#define CTC_INT_FLAG_EREF CTC_STAT_EREFIF /*!< expect reference interrupt flag */ -#define CTC_INT_FLAG_CKERR CTC_STAT_CKERR /*!< clock trim error bit */ -#define CTC_INT_FLAG_REFMISS CTC_STAT_REFMISS /*!< reference sync pulse miss */ -#define CTC_INT_FLAG_TRIMERR CTC_STAT_TRIMERR /*!< trim value error */ - -/* CTC flag definitions */ -#define CTC_FLAG_CKOK CTC_STAT_CKOKIF /*!< clock trim OK flag */ -#define CTC_FLAG_CKWARN CTC_STAT_CKWARNIF /*!< clock trim warning flag */ -#define CTC_FLAG_ERR CTC_STAT_ERRIF /*!< error flag */ -#define CTC_FLAG_EREF CTC_STAT_EREFIF /*!< expect reference flag */ -#define CTC_FLAG_CKERR CTC_STAT_CKERR /*!< clock trim error bit */ -#define CTC_FLAG_REFMISS CTC_STAT_REFMISS /*!< reference sync pulse miss */ -#define CTC_FLAG_TRIMERR CTC_STAT_TRIMERR /*!< trim value error bit */ - -/* function declarations */ -/* reset ctc clock trim controller */ -void ctc_deinit(void); -/* enable CTC trim counter */ -void ctc_counter_enable(void); -/* disable CTC trim counter */ -void ctc_counter_disable(void); - -/* configure the IRC48M trim value */ -void ctc_irc48m_trim_value_config(uint8_t trim_value); -/* generate software reference source sync pulse */ -void ctc_software_refsource_pulse_generate(void); -/* configure hardware automatically trim mode */ -void ctc_hardware_trim_mode_config(uint32_t hardmode); - -/* configure reference signal source polarity */ -void ctc_refsource_polarity_config(uint32_t polarity); -/* select reference signal source */ -void ctc_refsource_signal_select(uint32_t refs); -/* configure reference signal source prescaler */ -void ctc_refsource_prescaler_config(uint32_t prescaler); -/* configure clock trim base limit value */ -void ctc_clock_limit_value_config(uint8_t limit_value); -/* configure CTC counter reload value */ -void ctc_counter_reload_value_config(uint16_t reload_value); - -/* read CTC counter capture value when reference sync pulse occurred */ -uint16_t ctc_counter_capture_value_read(void); -/* read CTC trim counter direction when reference sync pulse occurred */ -FlagStatus ctc_counter_direction_read(void); -/* read CTC counter reload value */ -uint16_t ctc_counter_reload_value_read(void); -/* read the IRC48M trim value */ -uint8_t ctc_irc48m_trim_value_read(void); - -/* interrupt & flag functions */ -/* enable the CTC interrupt */ -void ctc_interrupt_enable(uint32_t interrupt); -/* disable the CTC interrupt */ -void ctc_interrupt_disable(uint32_t interrupt); -/* get CTC interrupt flag */ -FlagStatus ctc_interrupt_flag_get(uint32_t int_flag); -/* clear CTC interrupt flag */ -void ctc_interrupt_flag_clear(uint32_t int_flag); -/* get CTC flag */ -FlagStatus ctc_flag_get(uint32_t flag); -/* clear CTC flag */ -void ctc_flag_clear(uint32_t flag); - -#endif /* GD32F30X_CTC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dac.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dac.h deleted file mode 100644 index 24c28c2..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dac.h +++ /dev/null @@ -1,250 +0,0 @@ -/*! - \file gd32f30x_dac.h - \brief definitions for the DAC - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_DAC_H -#define GD32F30X_DAC_H - -#include "gd32f30x.h" - -/* DACx(x=0,1) definitions */ -#define DAC DAC_BASE -#define DAC0 0U -#define DAC1 1U - -/* registers definitions */ -#define DAC_CTL REG32(DAC + 0x00U) /*!< DAC control register */ -#define DAC_SWT REG32(DAC + 0x04U) /*!< DAC software trigger register */ -#define DAC0_R12DH REG32(DAC + 0x08U) /*!< DAC0 12-bit right-aligned data holding register */ -#define DAC0_L12DH REG32(DAC + 0x0CU) /*!< DAC0 12-bit left-aligned data holding register */ -#define DAC0_R8DH REG32(DAC + 0x10U) /*!< DAC0 8-bit right-aligned data holding register */ -#define DAC1_R12DH REG32(DAC + 0x14U) /*!< DAC1 12-bit right-aligned data holding register */ -#define DAC1_L12DH REG32(DAC + 0x18U) /*!< DAC1 12-bit left-aligned data holding register */ -#define DAC1_R8DH REG32(DAC + 0x1CU) /*!< DAC1 8-bit right-aligned data holding register */ -#define DACC_R12DH REG32(DAC + 0x20U) /*!< DAC concurrent mode 12-bit right-aligned data holding register */ -#define DACC_L12DH REG32(DAC + 0x24U) /*!< DAC concurrent mode 12-bit left-aligned data holding register */ -#define DACC_R8DH REG32(DAC + 0x28U) /*!< DAC concurrent mode 8-bit right-aligned data holding register */ -#define DAC0_DO REG32(DAC + 0x2CU) /*!< DAC0 data output register */ -#define DAC1_DO REG32(DAC + 0x30U) /*!< DAC1 data output register */ - -/* bits definitions */ -/* DAC_CTL */ -#define DAC_CTL_DEN0 BIT(0) /*!< DAC0 enable/disable bit */ -#define DAC_CTL_DBOFF0 BIT(1) /*!< DAC0 output buffer turn on/turn off bit */ -#define DAC_CTL_DTEN0 BIT(2) /*!< DAC0 trigger enable/disable bit */ -#define DAC_CTL_DTSEL0 BITS(3,5) /*!< DAC0 trigger source selection enable/disable bits */ -#define DAC_CTL_DWM0 BITS(6,7) /*!< DAC0 noise wave mode */ -#define DAC_CTL_DWBW0 BITS(8,11) /*!< DAC0 noise wave bit width */ -#define DAC_CTL_DDMAEN0 BIT(12) /*!< DAC0 DMA enable/disable bit */ -#define DAC_CTL_DEN1 BIT(16) /*!< DAC1 enable/disable bit */ -#define DAC_CTL_DBOFF1 BIT(17) /*!< DAC1 output buffer turn on/turn off bit */ -#define DAC_CTL_DTEN1 BIT(18) /*!< DAC1 trigger enable/disable bit */ -#define DAC_CTL_DTSEL1 BITS(19,21) /*!< DAC1 trigger source selection enable/disable bits */ -#define DAC_CTL_DWM1 BITS(22,23) /*!< DAC1 noise wave mode */ -#define DAC_CTL_DWBW1 BITS(24,27) /*!< DAC1 noise wave bit width */ -#define DAC_CTL_DDMAEN1 BIT(28) /*!< DAC1 DMA enable/disable bit */ - -/* DAC_SWT */ -#define DAC_SWT_SWTR0 BIT(0) /*!< DAC0 software trigger bit, cleared by hardware */ -#define DAC_SWT_SWTR1 BIT(1) /*!< DAC1 software trigger bit, cleared by hardware */ - -/* DAC0_R12DH */ -#define DAC0_R12DH_DAC0_DH BITS(0,11) /*!< DAC0 12-bit right-aligned data bits */ - -/* DAC0_L12DH */ -#define DAC0_L12DH_DAC0_DH BITS(4,15) /*!< DAC0 12-bit left-aligned data bits */ - -/* DAC0_R8DH */ -#define DAC0_R8DH_DAC0_DH BITS(0,7) /*!< DAC0 8-bit right-aligned data bits */ - -/* DAC1_R12DH */ -#define DAC1_R12DH_DAC1_DH BITS(0,11) /*!< DAC1 12-bit right-aligned data bits */ - -/* DAC1_L12DH */ -#define DAC1_L12DH_DAC1_DH BITS(4,15) /*!< DAC1 12-bit left-aligned data bits */ - -/* DAC1_R8DH */ -#define DAC1_R8DH_DAC1_DH BITS(0,7) /*!< DAC1 8-bit right-aligned data bits */ - -/* DACC_R12DH */ -#define DACC_R12DH_DAC0_DH BITS(0,11) /*!< DAC concurrent mode DAC0 12-bit right-aligned data bits */ -#define DACC_R12DH_DAC1_DH BITS(16,27) /*!< DAC concurrent mode DAC1 12-bit right-aligned data bits */ - -/* DACC_L12DH */ -#define DACC_L12DH_DAC0_DH BITS(4,15) /*!< DAC concurrent mode DAC0 12-bit left-aligned data bits */ -#define DACC_L12DH_DAC1_DH BITS(20,31) /*!< DAC concurrent mode DAC1 12-bit left-aligned data bits */ - -/* DACC_R8DH */ -#define DACC_R8DH_DAC0_DH BITS(0,7) /*!< DAC concurrent mode DAC0 8-bit right-aligned data bits */ -#define DACC_R8DH_DAC1_DH BITS(8,15) /*!< DAC concurrent mode DAC1 8-bit right-aligned data bits */ - -/* DAC0_DO */ -#define DAC0_DO_DAC0_DO BITS(0,11) /*!< DAC0 12-bit output data bits */ - -/* DAC1_DO */ -#define DAC1_DO_DAC1_DO BITS(0,11) /*!< DAC1 12-bit output data bits */ - -/* constants definitions */ -/* DAC trigger source */ -#define CTL_DTSEL(regval) (BITS(3,5) & ((uint32_t)(regval) << 3)) -#define DAC_TRIGGER_T5_TRGO CTL_DTSEL(0) /*!< TIMER5 TRGO */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define DAC_TRIGGER_T7_TRGO CTL_DTSEL(1) /*!< TIMER7 TRGO */ -#elif defined(GD32F30X_CL) -#define DAC_TRIGGER_T2_TRGO CTL_DTSEL(1) /*!< TIMER2 TRGO */ -#endif /* GD32F30X_HD and GD32F30X_XD */ -#define DAC_TRIGGER_T6_TRGO CTL_DTSEL(2) /*!< TIMER6 TRGO */ -#define DAC_TRIGGER_T4_TRGO CTL_DTSEL(3) /*!< TIMER4 TRGO */ -#define DAC_TRIGGER_T1_TRGO CTL_DTSEL(4) /*!< TIMER1 TRGO */ -#define DAC_TRIGGER_T3_TRGO CTL_DTSEL(5) /*!< TIMER3 TRGO */ -#define DAC_TRIGGER_EXTI_9 CTL_DTSEL(6) /*!< EXTI interrupt line9 event */ -#define DAC_TRIGGER_SOFTWARE CTL_DTSEL(7) /*!< software trigger */ - -/* DAC noise wave mode */ -#define CTL_DWM(regval) (BITS(6,7) & ((uint32_t)(regval) << 6)) -#define DAC_WAVE_DISABLE CTL_DWM(0) /*!< wave disable */ -#define DAC_WAVE_MODE_LFSR CTL_DWM(1) /*!< LFSR noise mode */ -#define DAC_WAVE_MODE_TRIANGLE CTL_DWM(2) /*!< triangle noise mode */ - -/* DAC noise wave bit width */ -#define DWBW(regval) (BITS(8,11) & ((uint32_t)(regval) << 8)) -#define DAC_WAVE_BIT_WIDTH_1 DWBW(0) /*!< bit width of the wave signal is 1 */ -#define DAC_WAVE_BIT_WIDTH_2 DWBW(1) /*!< bit width of the wave signal is 2 */ -#define DAC_WAVE_BIT_WIDTH_3 DWBW(2) /*!< bit width of the wave signal is 3 */ -#define DAC_WAVE_BIT_WIDTH_4 DWBW(3) /*!< bit width of the wave signal is 4 */ -#define DAC_WAVE_BIT_WIDTH_5 DWBW(4) /*!< bit width of the wave signal is 5 */ -#define DAC_WAVE_BIT_WIDTH_6 DWBW(5) /*!< bit width of the wave signal is 6 */ -#define DAC_WAVE_BIT_WIDTH_7 DWBW(6) /*!< bit width of the wave signal is 7 */ -#define DAC_WAVE_BIT_WIDTH_8 DWBW(7) /*!< bit width of the wave signal is 8 */ -#define DAC_WAVE_BIT_WIDTH_9 DWBW(8) /*!< bit width of the wave signal is 9 */ -#define DAC_WAVE_BIT_WIDTH_10 DWBW(9) /*!< bit width of the wave signal is 10 */ -#define DAC_WAVE_BIT_WIDTH_11 DWBW(10) /*!< bit width of the wave signal is 11 */ -#define DAC_WAVE_BIT_WIDTH_12 DWBW(11) /*!< bit width of the wave signal is 12 */ - -/* unmask LFSR bits in DAC LFSR noise mode */ -#define DAC_LFSR_BIT0 DAC_WAVE_BIT_WIDTH_1 /*!< unmask the LFSR bit0 */ -#define DAC_LFSR_BITS1_0 DAC_WAVE_BIT_WIDTH_2 /*!< unmask the LFSR bits[1:0] */ -#define DAC_LFSR_BITS2_0 DAC_WAVE_BIT_WIDTH_3 /*!< unmask the LFSR bits[2:0] */ -#define DAC_LFSR_BITS3_0 DAC_WAVE_BIT_WIDTH_4 /*!< unmask the LFSR bits[3:0] */ -#define DAC_LFSR_BITS4_0 DAC_WAVE_BIT_WIDTH_5 /*!< unmask the LFSR bits[4:0] */ -#define DAC_LFSR_BITS5_0 DAC_WAVE_BIT_WIDTH_6 /*!< unmask the LFSR bits[5:0] */ -#define DAC_LFSR_BITS6_0 DAC_WAVE_BIT_WIDTH_7 /*!< unmask the LFSR bits[6:0] */ -#define DAC_LFSR_BITS7_0 DAC_WAVE_BIT_WIDTH_8 /*!< unmask the LFSR bits[7:0] */ -#define DAC_LFSR_BITS8_0 DAC_WAVE_BIT_WIDTH_9 /*!< unmask the LFSR bits[8:0] */ -#define DAC_LFSR_BITS9_0 DAC_WAVE_BIT_WIDTH_10 /*!< unmask the LFSR bits[9:0] */ -#define DAC_LFSR_BITS10_0 DAC_WAVE_BIT_WIDTH_11 /*!< unmask the LFSR bits[10:0] */ -#define DAC_LFSR_BITS11_0 DAC_WAVE_BIT_WIDTH_12 /*!< unmask the LFSR bits[11:0] */ - -/* DAC data alignment */ -#define DATA_ALIGN(regval) (BITS(0,1) & ((uint32_t)(regval) << 0)) -#define DAC_ALIGN_12B_R DATA_ALIGN(0) /*!< data right 12 bit alignment */ -#define DAC_ALIGN_12B_L DATA_ALIGN(1) /*!< data left 12 bit alignment */ -#define DAC_ALIGN_8B_R DATA_ALIGN(2) /*!< data right 8 bit alignment */ - -/* triangle amplitude in DAC triangle noise mode */ -#define DAC_TRIANGLE_AMPLITUDE_1 DAC_WAVE_BIT_WIDTH_1 /*!< triangle amplitude is 1 */ -#define DAC_TRIANGLE_AMPLITUDE_3 DAC_WAVE_BIT_WIDTH_2 /*!< triangle amplitude is 3 */ -#define DAC_TRIANGLE_AMPLITUDE_7 DAC_WAVE_BIT_WIDTH_3 /*!< triangle amplitude is 7 */ -#define DAC_TRIANGLE_AMPLITUDE_15 DAC_WAVE_BIT_WIDTH_4 /*!< triangle amplitude is 15 */ -#define DAC_TRIANGLE_AMPLITUDE_31 DAC_WAVE_BIT_WIDTH_5 /*!< triangle amplitude is 31 */ -#define DAC_TRIANGLE_AMPLITUDE_63 DAC_WAVE_BIT_WIDTH_6 /*!< triangle amplitude is 63 */ -#define DAC_TRIANGLE_AMPLITUDE_127 DAC_WAVE_BIT_WIDTH_7 /*!< triangle amplitude is 127 */ -#define DAC_TRIANGLE_AMPLITUDE_255 DAC_WAVE_BIT_WIDTH_8 /*!< triangle amplitude is 255 */ -#define DAC_TRIANGLE_AMPLITUDE_511 DAC_WAVE_BIT_WIDTH_9 /*!< triangle amplitude is 511 */ -#define DAC_TRIANGLE_AMPLITUDE_1023 DAC_WAVE_BIT_WIDTH_10 /*!< triangle amplitude is 1023 */ -#define DAC_TRIANGLE_AMPLITUDE_2047 DAC_WAVE_BIT_WIDTH_11 /*!< triangle amplitude is 2047 */ -#define DAC_TRIANGLE_AMPLITUDE_4095 DAC_WAVE_BIT_WIDTH_12 /*!< triangle amplitude is 4095 */ - -/* function declarations */ -/* initialization functions */ -/* deinitialize DAC */ -void dac_deinit(void); -/* enable DAC */ -void dac_enable(uint32_t dac_periph); -/* disable DAC */ -void dac_disable(uint32_t dac_periph); -/* enable DAC DMA */ -void dac_dma_enable(uint32_t dac_periph); -/* disable DAC DMA */ -void dac_dma_disable(uint32_t dac_periph); -/* enable DAC output buffer */ -void dac_output_buffer_enable(uint32_t dac_periph); -/* disable DAC output buffer */ -void dac_output_buffer_disable(uint32_t dac_periph); -/* get the last data output value */ -uint16_t dac_output_value_get(uint32_t dac_periph); -/* set DAC data holding register value */ -void dac_data_set(uint32_t dac_periph, uint32_t dac_align, uint16_t data); - -/* DAC trigger configuration */ -/* enable DAC trigger */ -void dac_trigger_enable(uint32_t dac_periph); -/* disable DAC trigger */ -void dac_trigger_disable(uint32_t dac_periph); -/* configure DAC trigger source */ -void dac_trigger_source_config(uint32_t dac_periph, uint32_t triggersource); -/* enable DAC software trigger */ -void dac_software_trigger_enable(uint32_t dac_periph); -/* disable DAC software trigger */ -void dac_software_trigger_disable(uint32_t dac_periph); - -/* DAC wave mode configuration */ -/* configure DAC wave mode */ -void dac_wave_mode_config(uint32_t dac_periph, uint32_t wave_mode); -/* configure DAC wave bit width */ -void dac_wave_bit_width_config(uint32_t dac_periph, uint32_t bit_width); -/* configure DAC LFSR noise mode */ -void dac_lfsr_noise_config(uint32_t dac_periph, uint32_t unmask_bits); -/* configure DAC triangle noise mode */ -void dac_triangle_noise_config(uint32_t dac_periph, uint32_t amplitude); - -/* DAC concurrent mode configuration */ -/* enable DAC concurrent mode */ -void dac_concurrent_enable(void); -/* disable DAC concurrent mode */ -void dac_concurrent_disable(void); -/* enable DAC concurrent software trigger */ -void dac_concurrent_software_trigger_enable(void); -/* disable DAC concurrent software trigger */ -void dac_concurrent_software_trigger_disable(void); -/* enable DAC concurrent buffer function */ -void dac_concurrent_output_buffer_enable(void); -/* disable DAC concurrent buffer function */ -void dac_concurrent_output_buffer_disable(void); -/* set DAC concurrent mode data holding register value */ -void dac_concurrent_data_set(uint32_t dac_align, uint16_t data0, uint16_t data1); - -#endif /* GD32F30X_DAC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dbg.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dbg.h deleted file mode 100644 index a375d3e..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dbg.h +++ /dev/null @@ -1,158 +0,0 @@ -/*! - \file gd32f30x_dbg.h - \brief definitions for the DBG - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_DBG_H -#define GD32F30X_DBG_H - -#include "gd32f30x.h" - -/* DBG definitions */ -#define DBG DBG_BASE - -/* registers definitions */ -#define DBG_ID REG32(DBG + 0x00U) /*!< DBG_ID code register */ -#define DBG_CTL0 REG32(DBG + 0x04U) /*!< DBG control register 0 */ - -/* bits definitions */ -/* DBG_ID */ -#define DBG_ID_ID_CODE BITS(0,31) /*!< DBG ID code values */ - -/* DBG_CTL0 */ -#define DBG_CTL0_SLP_HOLD BIT(0) /*!< keep debugger connection during sleep mode */ -#define DBG_CTL0_DSLP_HOLD BIT(1) /*!< keep debugger connection during deepsleep mode */ -#define DBG_CTL0_STB_HOLD BIT(2) /*!< keep debugger connection during standby mode */ -#define DBG_CTL0_TRACE_IOEN BIT(5) /*!< enable trace pin assignment */ -#define DBG_CTL0_TRACE_MODE BITS(6,7) /*!< trace pin mode selection */ -#define DBG_CTL0_FWDGT_HOLD BIT(8) /*!< debug FWDGT kept when core is halted */ -#define DBG_CTL0_WWDGT_HOLD BIT(9) /*!< debug WWDGT kept when core is halted */ -#define DBG_CTL0_TIMER0_HOLD BIT(10) /*!< hold TIMER0 counter when core is halted */ -#define DBG_CTL0_TIMER1_HOLD BIT(11) /*!< hold TIMER1 counter when core is halted */ -#define DBG_CTL0_TIMER2_HOLD BIT(12) /*!< hold TIMER2 counter when core is halted */ -#define DBG_CTL0_TIMER3_HOLD BIT(13) /*!< hold TIMER3 counter when core is halted */ -#define DBG_CTL0_CAN0_HOLD BIT(14) /*!< debug CAN0 kept when core is halted */ -#define DBG_CTL0_I2C0_HOLD BIT(15) /*!< hold I2C0 smbus when core is halted */ -#define DBG_CTL0_I2C1_HOLD BIT(16) /*!< hold I2C1 smbus when core is halted */ -#define DBG_CTL0_TIMER7_HOLD BIT(17) /*!< hold TIMER7 counter when core is halted */ -#define DBG_CTL0_TIMER4_HOLD BIT(18) /*!< hold TIMER4 counter when core is halted */ -#define DBG_CTL0_TIMER5_HOLD BIT(19) /*!< hold TIMER5 counter when core is halted */ -#define DBG_CTL0_TIMER6_HOLD BIT(20) /*!< hold TIMER6 counter when core is halted */ -#ifdef GD32F30X_CL -#define DBG_CTL0_CAN1_HOLD BIT(21) /*!< debug CAN1 kept when core is halted */ -#endif /* GD32F30X_CL */ -#ifndef GD32F30X_HD -#define DBG_CTL0_TIMER11_HOLD BIT(25) /*!< hold TIMER11 counter when core is halted */ -#define DBG_CTL0_TIMER12_HOLD BIT(26) /*!< hold TIMER12 counter when core is halted */ -#define DBG_CTL0_TIMER13_HOLD BIT(27) /*!< hold TIMER13 counter when core is halted */ -#define DBG_CTL0_TIMER8_HOLD BIT(28) /*!< hold TIMER8 counter when core is halted */ -#define DBG_CTL0_TIMER9_HOLD BIT(29) /*!< hold TIMER9 counter when core is halted */ -#define DBG_CTL0_TIMER10_HOLD BIT(30) /*!< hold TIMER10 counter when core is halted */ -#endif /* GD32F30X_HD */ - -/* constants definitions */ -#define DBG_LOW_POWER_SLEEP DBG_CTL0_SLP_HOLD /*!< keep debugger connection during sleep mode */ -#define DBG_LOW_POWER_DEEPSLEEP DBG_CTL0_DSLP_HOLD /*!< keep debugger connection during deepsleep mode */ -#define DBG_LOW_POWER_STANDBY DBG_CTL0_STB_HOLD /*!< keep debugger connection during standby mode */ - -/* define the peripheral debug hold bit position and its register index offset */ -#define DBG_REGIDX_BIT(regidx, bitpos) (((regidx) << 6) | (bitpos)) -#define DBG_REG_VAL(periph) (REG32(DBG + ((uint32_t)(periph) >> 6))) -#define DBG_BIT_POS(val) ((uint32_t)(val) & 0x1FU) - -/* register index */ -enum dbg_reg_idx -{ - DBG_IDX_CTL0 = 0x04U -}; - -typedef enum -{ - DBG_FWDGT_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 8U), /*!< debug FWDGT kept when core is halted */ - DBG_WWDGT_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 9U), /*!< debug WWDGT kept when core is halted */ - DBG_TIMER0_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 10U), /*!< hold TIMER0 counter when core is halted */ - DBG_TIMER1_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 11U), /*!< hold TIMER1 counter when core is halted */ - DBG_TIMER2_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 12U), /*!< hold TIMER2 counter when core is halted */ - DBG_TIMER3_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 13U), /*!< hold TIMER3 counter when core is halted */ - DBG_CAN0_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 14U), /*!< debug CAN0 kept when core is halted */ - DBG_I2C0_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 15U), /*!< hold I2C0 smbus when core is halted */ - DBG_I2C1_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 16U), /*!< hold I2C1 smbus when core is halted */ - DBG_TIMER7_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 17U), /*!< hold TIMER7 counter when core is halted */ - DBG_TIMER4_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 18U), /*!< hold TIMER4 counter when core is halted */ - DBG_TIMER5_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 19U), /*!< hold TIMER5 counter when core is halted */ - DBG_TIMER6_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 20U), /*!< hold TIMER6 counter when core is halted */ -#ifdef GD32F30X_CL - DBG_CAN1_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 21U), /*!< debug CAN1 kept when core is halted */ -#endif /* GD32F30X_CL */ -#ifndef GD32F30X_HD - DBG_TIMER11_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 25U), /*!< hold TIMER11 counter when core is halted */ - DBG_TIMER12_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 26U), /*!< hold TIMER12 counter when core is halted */ - DBG_TIMER13_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 27U), /*!< hold TIMER13 counter when core is halted */ - DBG_TIMER8_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 28U), /*!< hold TIMER8 counter when core is halted */ - DBG_TIMER9_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 29U), /*!< hold TIMER9 counter when core is halted */ - DBG_TIMER10_HOLD = DBG_REGIDX_BIT(DBG_IDX_CTL0, 30U), /*!< hold TIMER10 counter when core is halted */ -#endif /* GD32F30X_HD */ -}dbg_periph_enum; - -#define CTL0_TRACE_MODE(regval) (BITS(6,7)&((uint32_t)(regval)<<6)) -#define TRACE_MODE_ASYNC CTL0_TRACE_MODE(0) /*!< trace pin used for async mode */ -#define TRACE_MODE_SYNC_DATASIZE_1 CTL0_TRACE_MODE(1) /*!< trace pin used for sync mode and data size is 1 */ -#define TRACE_MODE_SYNC_DATASIZE_2 CTL0_TRACE_MODE(2) /*!< trace pin used for sync mode and data size is 2 */ -#define TRACE_MODE_SYNC_DATASIZE_4 CTL0_TRACE_MODE(3) /*!< trace pin used for sync mode and data size is 4 */ - -/* function declarations */ -/* deinitialize the DBG */ -void dbg_deinit(void); -/* read DBG_ID code register */ -uint32_t dbg_id_get(void); - -/* enable low power behavior when the MCU is in debug mode */ -void dbg_low_power_enable(uint32_t dbg_low_power); -/* disable low power behavior when the MCU is in debug mode */ -void dbg_low_power_disable(uint32_t dbg_low_power); - -/* enable peripheral behavior when the MCU is in debug mode */ -void dbg_periph_enable(dbg_periph_enum dbg_periph); -/* disable peripheral behavior when the MCU is in debug mode */ -void dbg_periph_disable(dbg_periph_enum dbg_periph); - -/* enable trace pin assignment */ -void dbg_trace_pin_enable(void); -/* disable trace pin assignment */ -void dbg_trace_pin_disable(void); -/* set trace pin mode */ -void dbg_trace_pin_mode_set(uint32_t trace_mode); - -#endif /* GD32F30X_DBG_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dma.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dma.h deleted file mode 100644 index 13f715f..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_dma.h +++ /dev/null @@ -1,285 +0,0 @@ -/*! - \file gd32f30x_dma.h - \brief definitions for the DMA - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_DMA_H -#define GD32F30X_DMA_H - -#include "gd32f30x.h" - -/* DMA definitions */ -#define DMA0 (DMA_BASE) /*!< DMA0 base address */ -#define DMA1 (DMA_BASE + 0x0400U) /*!< DMA1 base address */ - -/* registers definitions */ -#define DMA_INTF(dmax) REG32((dmax) + 0x00U) /*!< DMA interrupt flag register */ -#define DMA_INTC(dmax) REG32((dmax) + 0x04U) /*!< DMA interrupt flag clear register */ - -#define DMA_CH0CTL(dmax) REG32((dmax) + 0x08U) /*!< DMA channel 0 control register */ -#define DMA_CH0CNT(dmax) REG32((dmax) + 0x0CU) /*!< DMA channel 0 counter register */ -#define DMA_CH0PADDR(dmax) REG32((dmax) + 0x10U) /*!< DMA channel 0 peripheral base address register */ -#define DMA_CH0MADDR(dmax) REG32((dmax) + 0x14U) /*!< DMA channel 0 memory base address register */ - -#define DMA_CH1CTL(dmax) REG32((dmax) + 0x1CU) /*!< DMA channel 1 control register */ -#define DMA_CH1CNT(dmax) REG32((dmax) + 0x20U) /*!< DMA channel 1 counter register */ -#define DMA_CH1PADDR(dmax) REG32((dmax) + 0x24U) /*!< DMA channel 1 peripheral base address register */ -#define DMA_CH1MADDR(dmax) REG32((dmax) + 0x28U) /*!< DMA channel 1 memory base address register */ - -#define DMA_CH2CTL(dmax) REG32((dmax) + 0x30U) /*!< DMA channel 2 control register */ -#define DMA_CH2CNT(dmax) REG32((dmax) + 0x34U) /*!< DMA channel 2 counter register */ -#define DMA_CH2PADDR(dmax) REG32((dmax) + 0x38U) /*!< DMA channel 2 peripheral base address register */ -#define DMA_CH2MADDR(dmax) REG32((dmax) + 0x3CU) /*!< DMA channel 2 memory base address register */ - -#define DMA_CH3CTL(dmax) REG32((dmax) + 0x44U) /*!< DMA channel 3 control register */ -#define DMA_CH3CNT(dmax) REG32((dmax) + 0x48U) /*!< DMA channel 3 counter register */ -#define DMA_CH3PADDR(dmax) REG32((dmax) + 0x4CU) /*!< DMA channel 3 peripheral base address register */ -#define DMA_CH3MADDR(dmax) REG32((dmax) + 0x50U) /*!< DMA channel 3 memory base address register */ - -#define DMA_CH4CTL(dmax) REG32((dmax) + 0x58U) /*!< DMA channel 4 control register */ -#define DMA_CH4CNT(dmax) REG32((dmax) + 0x5CU) /*!< DMA channel 4 counter register */ -#define DMA_CH4PADDR(dmax) REG32((dmax) + 0x60U) /*!< DMA channel 4 peripheral base address register */ -#define DMA_CH4MADDR(dmax) REG32((dmax) + 0x64U) /*!< DMA channel 4 memory base address register */ - -#define DMA_CH5CTL(dmax) REG32((dmax) + 0x6CU) /*!< DMA channel 5 control register */ -#define DMA_CH5CNT(dmax) REG32((dmax) + 0x70U) /*!< DMA channel 5 counter register */ -#define DMA_CH5PADDR(dmax) REG32((dmax) + 0x74U) /*!< DMA channel 5 peripheral base address register */ -#define DMA_CH5MADDR(dmax) REG32((dmax) + 0x78U) /*!< DMA channel 5 memory base address register */ - -#define DMA_CH6CTL(dmax) REG32((dmax) + 0x80U) /*!< DMA channel 6 control register */ -#define DMA_CH6CNT(dmax) REG32((dmax) + 0x84U) /*!< DMA channel 6 counter register */ -#define DMA_CH6PADDR(dmax) REG32((dmax) + 0x88U) /*!< DMA channel 6 peripheral base address register */ -#define DMA_CH6MADDR(dmax) REG32((dmax) + 0x8CU) /*!< DMA channel 6 memory base address register */ - -/* bits definitions */ -/* DMA_INTF */ -#define DMA_INTF_GIF BIT(0) /*!< global interrupt flag of channel */ -#define DMA_INTF_FTFIF BIT(1) /*!< full transfer finish flag of channel */ -#define DMA_INTF_HTFIF BIT(2) /*!< half transfer finish flag of channel */ -#define DMA_INTF_ERRIF BIT(3) /*!< error flag of channel */ - -/* DMA_INTC */ -#define DMA_INTC_GIFC BIT(0) /*!< clear global interrupt flag of channel */ -#define DMA_INTC_FTFIFC BIT(1) /*!< clear transfer finish flag of channel */ -#define DMA_INTC_HTFIFC BIT(2) /*!< clear half transfer finish flag of channel */ -#define DMA_INTC_ERRIFC BIT(3) /*!< clear error flag of channel */ - -/* DMA_CHxCTL, x=0..6 */ -#define DMA_CHXCTL_CHEN BIT(0) /*!< channel enable */ -#define DMA_CHXCTL_FTFIE BIT(1) /*!< enable bit for channel full transfer finish interrupt */ -#define DMA_CHXCTL_HTFIE BIT(2) /*!< enable bit for channel half transfer finish interrupt */ -#define DMA_CHXCTL_ERRIE BIT(3) /*!< enable bit for channel error interrupt */ -#define DMA_CHXCTL_DIR BIT(4) /*!< transfer direction */ -#define DMA_CHXCTL_CMEN BIT(5) /*!< circular mode enable */ -#define DMA_CHXCTL_PNAGA BIT(6) /*!< next address generation algorithm of peripheral */ -#define DMA_CHXCTL_MNAGA BIT(7) /*!< next address generation algorithm of memory */ -#define DMA_CHXCTL_PWIDTH BITS(8,9) /*!< transfer data width of peripheral */ -#define DMA_CHXCTL_MWIDTH BITS(10,11) /*!< transfer data width of memory */ -#define DMA_CHXCTL_PRIO BITS(12,13) /*!< priority level */ -#define DMA_CHXCTL_M2M BIT(14) /*!< memory to memory mode */ - -/* DMA_CHxCNT,x=0..6 */ -#define DMA_CHXCNT_CNT BITS(0,15) /*!< transfer counter */ - -/* DMA_CHxPADDR,x=0..6 */ -#define DMA_CHXPADDR_PADDR BITS(0,31) /*!< peripheral base address */ - -/* DMA_CHxMADDR,x=0..6 */ -#define DMA_CHXMADDR_MADDR BITS(0,31) /*!< memory base address */ - -/* constants definitions */ -/* DMA channel select */ -typedef enum -{ - DMA_CH0 = 0, /*!< DMA Channel0 */ - DMA_CH1, /*!< DMA Channel1 */ - DMA_CH2, /*!< DMA Channel2 */ - DMA_CH3, /*!< DMA Channel3 */ - DMA_CH4, /*!< DMA Channel4 */ - DMA_CH5, /*!< DMA Channel5 */ - DMA_CH6 /*!< DMA Channel6 */ -} dma_channel_enum; - -/* DMA initialize struct */ -typedef struct -{ - uint32_t periph_addr; /*!< peripheral base address */ - uint32_t periph_width; /*!< transfer data size of peripheral */ - uint32_t memory_addr; /*!< memory base address */ - uint32_t memory_width; /*!< transfer data size of memory */ - uint32_t number; /*!< channel transfer number */ - uint32_t priority; /*!< channel priority level */ - uint8_t periph_inc; /*!< peripheral increasing mode */ - uint8_t memory_inc; /*!< memory increasing mode */ - uint8_t direction; /*!< channel data transfer direction */ - -} dma_parameter_struct; - -#define DMA_FLAG_ADD(flag, shift) ((flag) << ((shift) * 4U)) /*!< DMA channel flag shift */ - -/* DMA_register address */ -#define DMA_CHCTL(dma, channel) REG32(((dma) + 0x08U) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXCTL register */ -#define DMA_CHCNT(dma, channel) REG32(((dma) + 0x0CU) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXCNT register */ -#define DMA_CHPADDR(dma, channel) REG32(((dma) + 0x10U) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXPADDR register */ -#define DMA_CHMADDR(dma, channel) REG32(((dma) + 0x14U) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXMADDR register */ - -/* DMA reset value */ -#define DMA_CHCTL_RESET_VALUE ((uint32_t)0x00000000U) /*!< the reset value of DMA channel CHXCTL register */ -#define DMA_CHCNT_RESET_VALUE ((uint32_t)0x00000000U) /*!< the reset value of DMA channel CHXCNT register */ -#define DMA_CHPADDR_RESET_VALUE ((uint32_t)0x00000000U) /*!< the reset value of DMA channel CHXPADDR register */ -#define DMA_CHMADDR_RESET_VALUE ((uint32_t)0x00000000U) /*!< the reset value of DMA channel CHXMADDR register */ -#define DMA_CHINTF_RESET_VALUE (DMA_INTF_GIF | DMA_INTF_FTFIF | \ - DMA_INTF_HTFIF | DMA_INTF_ERRIF) /*!< clear DMA channel DMA_INTF register */ - -/* DMA_INTF register */ -/* interrupt flag bits */ -#define DMA_INT_FLAG_G DMA_INTF_GIF /*!< global interrupt flag of channel */ -#define DMA_INT_FLAG_FTF DMA_INTF_FTFIF /*!< full transfer finish interrupt flag of channel */ -#define DMA_INT_FLAG_HTF DMA_INTF_HTFIF /*!< half transfer finish interrupt flag of channel */ -#define DMA_INT_FLAG_ERR DMA_INTF_ERRIF /*!< error interrupt flag of channel */ - -/* flag bits */ -#define DMA_FLAG_G DMA_INTF_GIF /*!< global interrupt flag of channel */ -#define DMA_FLAG_FTF DMA_INTF_FTFIF /*!< full transfer finish flag of channel */ -#define DMA_FLAG_HTF DMA_INTF_HTFIF /*!< half transfer finish flag of channel */ -#define DMA_FLAG_ERR DMA_INTF_ERRIF /*!< error flag of channel */ - -/* DMA_CHxCTL register */ -/* interrupt enable bits */ -#define DMA_INT_FTF DMA_CHXCTL_FTFIE /*!< enable bit for channel full transfer finish interrupt */ -#define DMA_INT_HTF DMA_CHXCTL_HTFIE /*!< enable bit for channel half transfer finish interrupt */ -#define DMA_INT_ERR DMA_CHXCTL_ERRIE /*!< enable bit for channel error interrupt */ - -/* transfer direction */ -#define DMA_PERIPHERAL_TO_MEMORY ((uint8_t)0x0000U) /*!< read from peripheral and write to memory */ -#define DMA_MEMORY_TO_PERIPHERAL ((uint8_t)0x0001U) /*!< read from memory and write to peripheral */ - -/* peripheral increasing mode */ -#define DMA_PERIPH_INCREASE_DISABLE ((uint8_t)0x0000U) /*!< next address of peripheral is fixed address mode */ -#define DMA_PERIPH_INCREASE_ENABLE ((uint8_t)0x0001U) /*!< next address of peripheral is increasing address mode */ - -/* memory increasing mode */ -#define DMA_MEMORY_INCREASE_DISABLE ((uint8_t)0x0000U) /*!< next address of memory is fixed address mode */ -#define DMA_MEMORY_INCREASE_ENABLE ((uint8_t)0x0001U) /*!< next address of memory is increasing address mode */ - -/* transfer data size of peripheral */ -#define CHCTL_PWIDTH(regval) (BITS(8,9) & ((uint32_t)(regval) << 8)) /*!< transfer data size of peripheral */ -#define DMA_PERIPHERAL_WIDTH_8BIT CHCTL_PWIDTH(0) /*!< transfer data size of peripheral is 8-bit */ -#define DMA_PERIPHERAL_WIDTH_16BIT CHCTL_PWIDTH(1) /*!< transfer data size of peripheral is 16-bit */ -#define DMA_PERIPHERAL_WIDTH_32BIT CHCTL_PWIDTH(2) /*!< transfer data size of peripheral is 32-bit */ - -/* transfer data size of memory */ -#define CHCTL_MWIDTH(regval) (BITS(10,11) & ((uint32_t)(regval) << 10)) /*!< transfer data size of memory */ -#define DMA_MEMORY_WIDTH_8BIT CHCTL_MWIDTH(0) /*!< transfer data size of memory is 8-bit */ -#define DMA_MEMORY_WIDTH_16BIT CHCTL_MWIDTH(1) /*!< transfer data size of memory is 16-bit */ -#define DMA_MEMORY_WIDTH_32BIT CHCTL_MWIDTH(2) /*!< transfer data size of memory is 32-bit */ - -/* channel priority level */ -#define CHCTL_PRIO(regval) (BITS(12,13) & ((uint32_t)(regval) << 12)) /*!< DMA channel priority level */ -#define DMA_PRIORITY_LOW CHCTL_PRIO(0) /*!< low priority */ -#define DMA_PRIORITY_MEDIUM CHCTL_PRIO(1) /*!< medium priority */ -#define DMA_PRIORITY_HIGH CHCTL_PRIO(2) /*!< high priority */ -#define DMA_PRIORITY_ULTRA_HIGH CHCTL_PRIO(3) /*!< ultra high priority */ - -/* memory to memory mode */ -#define DMA_MEMORY_TO_MEMORY_DISABLE ((uint32_t)0x00000000U) -#define DMA_MEMORY_TO_MEMORY_ENABLE ((uint32_t)0x00000001U) - -/* DMA_CHxCNT register */ -/* transfer counter */ -#define DMA_CHANNEL_CNT_MASK DMA_CHXCNT_CNT /*!< transfer counter mask */ - -/* function declarations */ -/* DMA deinitialization and initialization functions */ -/* deinitialize DMA a channel registers */ -void dma_deinit(uint32_t dma_periph, dma_channel_enum channelx); -/* initialize the parameters of DMA struct with the default values */ -void dma_struct_para_init(dma_parameter_struct* init_struct); -/* initialize DMA channel */ -void dma_init(uint32_t dma_periph, dma_channel_enum channelx, dma_parameter_struct* init_struct); -/* enable DMA circulation mode */ -void dma_circulation_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable DMA circulation mode */ -void dma_circulation_disable(uint32_t dma_periph, dma_channel_enum channelx); -/* enable memory to memory mode */ -void dma_memory_to_memory_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable memory to memory mode */ -void dma_memory_to_memory_disable(uint32_t dma_periph, dma_channel_enum channelx); -/* enable DMA channel */ -void dma_channel_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable DMA channel */ -void dma_channel_disable(uint32_t dma_periph, dma_channel_enum channelx); - -/* DMA configuration functions */ -/* set DMA peripheral base address */ -void dma_periph_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address); -/* set DMA memory base address */ -void dma_memory_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address); -/* set the number of remaining data to be transferred by the DMA */ -void dma_transfer_number_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t number); -/* get the number of remaining data to be transferred by the DMA */ -uint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx); -/* configure priority level of DMA channel */ -void dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t priority); -/* configure transfer data size of memory */ -void dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t mwidth); -/* configure transfer data size of peripheral */ -void dma_periph_width_config (uint32_t dma_periph, dma_channel_enum channelx, uint32_t pwidth); -/* enable next address increasement algorithm of memory */ -void dma_memory_increase_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable next address increasement algorithm of memory */ -void dma_memory_increase_disable(uint32_t dma_periph, dma_channel_enum channelx); -/* enable next address increasement algorithm of peripheral */ -void dma_periph_increase_enable(uint32_t dma_periph, dma_channel_enum channelx); -/* disable next address increasement algorithm of peripheral */ -void dma_periph_increase_disable(uint32_t dma_periph, dma_channel_enum channelx); -/* configure the direction of data transfer on the channel */ -void dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t direction); - -/* flag and interrupt functions */ -/* check DMA flag is set or not */ -FlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag); -/* clear DMA a channel flag */ -void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag); -/* check DMA flag and interrupt enable bit is set or not */ -FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag); -/* clear DMA a channel flag */ -void dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag); -/* enable DMA interrupt */ -void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source); -/* disable DMA interrupt */ -void dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source); - -#endif /* GD32F30X_DMA_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_enet.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_enet.h deleted file mode 100644 index d77dfa6..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_enet.h +++ /dev/null @@ -1,1702 +0,0 @@ -/*! - \file gd32f30x_enet.h - \brief definitions for the ENET - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-04-02, V2.0.1, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_ENET_H -#define GD32F30X_ENET_H - -#include "gd32f30x.h" - -#define IF_USE_EXTERNPHY_LIB 0 -#if (1 == IF_USE_EXTERNPHY_LIB) -#include "phy.h" -#endif - -#ifndef ENET_RXBUF_NUM -#define ENET_RXBUF_NUM 5U /*!< ethernet Rx DMA descriptor number */ -#endif - -#ifndef ENET_TXBUF_NUM -#define ENET_TXBUF_NUM 5U /*!< ethernet Tx DMA descriptor number */ -#endif - -#ifndef ENET_RXBUF_SIZE -#define ENET_RXBUF_SIZE ENET_MAX_FRAME_SIZE /*!< ethernet receive buffer size */ -#endif - -#ifndef ENET_TXBUF_SIZE -#define ENET_TXBUF_SIZE ENET_MAX_FRAME_SIZE /*!< ethernet transmit buffer size */ -#endif - -/* #define SELECT_DESCRIPTORS_ENHANCED_MODE */ - -/* #define USE_DELAY */ - -#ifndef _PHY_H_ -#define DP83848 0 -#define LAN8700 1 -#define PHY_TYPE DP83848 - -#define PHY_ADDRESS ((uint16_t)1U) /*!< phy address determined by the hardware */ - -/* PHY read write timeouts */ -#define PHY_READ_TO ((uint32_t)0x0004FFFFU) /*!< PHY read timeout */ -#define PHY_WRITE_TO ((uint32_t)0x0004FFFFU) /*!< PHY write timeout */ - -/* PHY delay */ -#define PHY_RESETDELAY ((uint32_t)0x008FFFFFU) /*!< PHY reset delay */ -#define PHY_CONFIGDELAY ((uint32_t)0x00FFFFFFU) /*!< PHY configure delay */ - -/* PHY register address */ -#define PHY_REG_BCR 0U /*!< tranceiver basic control register */ -#define PHY_REG_BSR 1U /*!< tranceiver basic status register */ - -/* PHY basic control register */ -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< enable phy loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< configure speed to 100 Mbit/s and the full-duplex mode */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< configure speed to 100 Mbit/s and the half-duplex mode */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< configure speed to 10 Mbit/s and the full-duplex mode */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< configure speed to 10 Mbit/s and the half-duplex mode */ -#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) /*!< enable the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< isolate PHY from MII */ - -/* PHY basic status register */ -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< auto-negotioation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< jabber condition detected */ - -#if(PHY_TYPE == LAN8700) -#define PHY_SR 31U /*!< tranceiver status register */ -#define PHY_SPEED_STATUS ((uint16_t)0x0004) /*!< configured information of speed: 10Mbit/s */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0010) /*!< configured information of duplex: full-duplex */ -#elif(PHY_TYPE == DP83848) -#define PHY_SR 16U /*!< tranceiver status register */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< configured information of speed: 10Mbit/s */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< configured information of duplex: full-duplex */ -#endif /* PHY_TYPE */ - -#endif /* _PHY_H_ */ - - -/* ENET definitions */ -#define ENET ENET_BASE - -/* registers definitions */ -#define ENET_MAC_CFG REG32((ENET) + 0x00U) /*!< ethernet MAC configuration register */ -#define ENET_MAC_FRMF REG32((ENET) + 0x04U) /*!< ethernet MAC frame filter register */ -#define ENET_MAC_HLH REG32((ENET) + 0x08U) /*!< ethernet MAC hash list high register */ -#define ENET_MAC_HLL REG32((ENET) + 0x0CU) /*!< ethernet MAC hash list low register */ -#define ENET_MAC_PHY_CTL REG32((ENET) + 0x10U) /*!< ethernet MAC PHY control register */ -#define ENET_MAC_PHY_DATA REG32((ENET) + 0x14U) /*!< ethernet MAC MII data register */ -#define ENET_MAC_FCTL REG32((ENET) + 0x18U) /*!< ethernet MAC flow control register */ -#define ENET_MAC_VLT REG32((ENET) + 0x1CU) /*!< ethernet MAC VLAN tag register */ -#define ENET_MAC_RWFF REG32((ENET) + 0x28U) /*!< ethernet MAC remote wakeup frame filter register */ -#define ENET_MAC_WUM REG32((ENET) + 0x2CU) /*!< ethernet MAC wakeup management register */ -#define ENET_MAC_DBG REG32((ENET) + 0x34U) /*!< ethernet MAC debug register */ -#define ENET_MAC_INTF REG32((ENET) + 0x38U) /*!< ethernet MAC interrupt flag register */ -#define ENET_MAC_INTMSK REG32((ENET) + 0x3CU) /*!< ethernet MAC interrupt mask register */ -#define ENET_MAC_ADDR0H REG32((ENET) + 0x40U) /*!< ethernet MAC address 0 high register */ -#define ENET_MAC_ADDR0L REG32((ENET) + 0x44U) /*!< ethernet MAC address 0 low register */ -#define ENET_MAC_ADDR1H REG32((ENET) + 0x48U) /*!< ethernet MAC address 1 high register */ -#define ENET_MAC_ADDR1L REG32((ENET) + 0x4CU) /*!< ethernet MAC address 1 low register */ -#define ENET_MAC_ADDT2H REG32((ENET) + 0x50U) /*!< ethernet MAC address 2 high register */ -#define ENET_MAC_ADDR2L REG32((ENET) + 0x54U) /*!< ethernet MAC address 2 low register */ -#define ENET_MAC_ADDR3H REG32((ENET) + 0x58U) /*!< ethernet MAC address 3 high register */ -#define ENET_MAC_ADDR3L REG32((ENET) + 0x5CU) /*!< ethernet MAC address 3 low register */ -#define ENET_MAC_FCTH REG32((ENET) + 0x1080U) /*!< ethernet MAC flow control threshold register */ - -#define ENET_MSC_CTL REG32((ENET) + 0x100U) /*!< ethernet MSC control register */ -#define ENET_MSC_RINTF REG32((ENET) + 0x104U) /*!< ethernet MSC receive interrupt flag register */ -#define ENET_MSC_TINTF REG32((ENET) + 0x108U) /*!< ethernet MSC transmit interrupt flag register */ -#define ENET_MSC_RINTMSK REG32((ENET) + 0x10CU) /*!< ethernet MSC receive interrupt mask register */ -#define ENET_MSC_TINTMSK REG32((ENET) + 0x110U) /*!< ethernet MSC transmit interrupt mask register */ -#define ENET_MSC_SCCNT REG32((ENET) + 0x14CU) /*!< ethernet MSC transmitted good frames after a single collision counter register */ -#define ENET_MSC_MSCCNT REG32((ENET) + 0x150U) /*!< ethernet MSC transmitted good frames after more than a single collision counter register */ -#define ENET_MSC_TGFCNT REG32((ENET) + 0x168U) /*!< ethernet MSC transmitted good frames counter register */ -#define ENET_MSC_RFCECNT REG32((ENET) + 0x194U) /*!< ethernet MSC received frames with CRC error counter register */ -#define ENET_MSC_RFAECNT REG32((ENET) + 0x198U) /*!< ethernet MSC received frames with alignment error counter register */ -#define ENET_MSC_RGUFCNT REG32((ENET) + 0x1C4U) /*!< ethernet MSC received good unicast frames counter register */ - -#define ENET_PTP_TSCTL REG32((ENET) + 0x700U) /*!< ethernet PTP time stamp control register */ -#define ENET_PTP_SSINC REG32((ENET) + 0x704U) /*!< ethernet PTP subsecond increment register */ -#define ENET_PTP_TSH REG32((ENET) + 0x708U) /*!< ethernet PTP time stamp high register */ -#define ENET_PTP_TSL REG32((ENET) + 0x70CU) /*!< ethernet PTP time stamp low register */ -#define ENET_PTP_TSUH REG32((ENET) + 0x710U) /*!< ethernet PTP time stamp update high register */ -#define ENET_PTP_TSUL REG32((ENET) + 0x714U) /*!< ethernet PTP time stamp update low register */ -#define ENET_PTP_TSADDEND REG32((ENET) + 0x718U) /*!< ethernet PTP time stamp addend register */ -#define ENET_PTP_ETH REG32((ENET) + 0x71CU) /*!< ethernet PTP expected time high register */ -#define ENET_PTP_ETL REG32((ENET) + 0x720U) /*!< ethernet PTP expected time low register */ -#define ENET_PTP_TSF REG32((ENET) + 0x728U) /*!< ethernet PTP time stamp flag register */ -#define ENET_PTP_PPSCTL REG32((ENET) + 0x72CU) /*!< ethernet PTP PPS control register */ - -#define ENET_DMA_BCTL REG32((ENET) + 0x1000U) /*!< ethernet DMA bus control register */ -#define ENET_DMA_TPEN REG32((ENET) + 0x1004U) /*!< ethernet DMA transmit poll enable register */ -#define ENET_DMA_RPEN REG32((ENET) + 0x1008U) /*!< ethernet DMA receive poll enable register */ -#define ENET_DMA_RDTADDR REG32((ENET) + 0x100CU) /*!< ethernet DMA receive descriptor table address register */ -#define ENET_DMA_TDTADDR REG32((ENET) + 0x1010U) /*!< ethernet DMA transmit descriptor table address register */ -#define ENET_DMA_STAT REG32((ENET) + 0x1014U) /*!< ethernet DMA status register */ -#define ENET_DMA_CTL REG32((ENET) + 0x1018U) /*!< ethernet DMA control register */ -#define ENET_DMA_INTEN REG32((ENET) + 0x101CU) /*!< ethernet DMA interrupt enable register */ -#define ENET_DMA_MFBOCNT REG32((ENET) + 0x1020U) /*!< ethernet DMA missed frame and buffer overflow counter register */ -#define ENET_DMA_RSWDC REG32((ENET) + 0x1024U) /*!< ethernet DMA receive state watchdog counter register */ -#define ENET_DMA_CTDADDR REG32((ENET) + 0x1048U) /*!< ethernet DMA current transmit descriptor address register */ -#define ENET_DMA_CRDADDR REG32((ENET) + 0x104CU) /*!< ethernet DMA current receive descriptor address register */ -#define ENET_DMA_CTBADDR REG32((ENET) + 0x1050U) /*!< ethernet DMA current transmit buffer address register */ -#define ENET_DMA_CRBADDR REG32((ENET) + 0x1054U) /*!< ethernet DMA current receive buffer address register */ - -/* bits definitions */ -/* ENET_MAC_CFG */ -#define ENET_MAC_CFG_REN BIT(2) /*!< receiver enable */ -#define ENET_MAC_CFG_TEN BIT(3) /*!< transmitter enable */ -#define ENET_MAC_CFG_DFC BIT(4) /*!< defferal check */ -#define ENET_MAC_CFG_BOL BITS(5,6) /*!< back-off limit */ -#define ENET_MAC_CFG_APCD BIT(7) /*!< automatic pad/CRC drop */ -#define ENET_MAC_CFG_RTD BIT(9) /*!< retry disable */ -#define ENET_MAC_CFG_IPFCO BIT(10) /*!< IP frame checksum offload */ -#define ENET_MAC_CFG_DPM BIT(11) /*!< duplex mode */ -#define ENET_MAC_CFG_LBM BIT(12) /*!< loopback mode */ -#define ENET_MAC_CFG_ROD BIT(13) /*!< receive own disable */ -#define ENET_MAC_CFG_SPD BIT(14) /*!< fast eneternet speed */ -#define ENET_MAC_CFG_CSD BIT(16) /*!< carrier sense disable */ -#define ENET_MAC_CFG_IGBS BITS(17,19) /*!< inter-frame gap bit selection */ -#define ENET_MAC_CFG_JBD BIT(22) /*!< jabber disable */ -#define ENET_MAC_CFG_WDD BIT(23) /*!< watchdog disable */ -#define ENET_MAC_CFG_TFCD BIT(25) /*!< type frame CRC dropping */ - -/* ENET_MAC_FRMF */ -#define ENET_MAC_FRMF_PM BIT(0) /*!< promiscuous mode */ -#define ENET_MAC_FRMF_HUF BIT(1) /*!< hash unicast filter */ -#define ENET_MAC_FRMF_HMF BIT(2) /*!< hash multicast filter */ -#define ENET_MAC_FRMF_DAIFLT BIT(3) /*!< destination address inverse filtering enable */ -#define ENET_MAC_FRMF_MFD BIT(4) /*!< multicast filter disable */ -#define ENET_MAC_FRMF_BFRMD BIT(5) /*!< broadcast frame disable */ -#define ENET_MAC_FRMF_PCFRM BITS(6,7) /*!< pass control frames */ -#define ENET_MAC_FRMF_SAIFLT BIT(8) /*!< source address inverse filtering */ -#define ENET_MAC_FRMF_SAFLT BIT(9) /*!< source address filter */ -#define ENET_MAC_FRMF_HPFLT BIT(10) /*!< hash or perfect filter */ -#define ENET_MAC_FRMF_FAR BIT(31) /*!< frames all receive */ - -/* ENET_MAC_HLH */ -#define ENET_MAC_HLH_HLH BITS(0,31) /*!< hash list high */ - -/* ENET_MAC_HLL */ -#define ENET_MAC_HLL_HLL BITS(0,31) /*!< hash list low */ - -/* ENET_MAC_PHY_CTL */ -#define ENET_MAC_PHY_CTL_PB BIT(0) /*!< PHY busy */ -#define ENET_MAC_PHY_CTL_PW BIT(1) /*!< PHY write */ -#define ENET_MAC_PHY_CTL_CLR BITS(2,4) /*!< clock range */ -#define ENET_MAC_PHY_CTL_PR BITS(6,10) /*!< PHY register */ -#define ENET_MAC_PHY_CTL_PA BITS(11,15) /*!< PHY address */ - -/* ENET_MAC_PHY_DATA */ -#define ENET_MAC_PHY_DATA_PD BITS(0,15) /*!< PHY data */ - -/* ENET_MAC_FCTL */ -#define ENET_MAC_FCTL_FLCBBKPA BIT(0) /*!< flow control busy(in full duplex mode)/backpressure activate(in half duplex mode) */ -#define ENET_MAC_FCTL_TFCEN BIT(1) /*!< transmit flow control enable */ -#define ENET_MAC_FCTL_RFCEN BIT(2) /*!< receive flow control enable */ -#define ENET_MAC_FCTL_UPFDT BIT(3) /*!< unicast pause frame detect */ -#define ENET_MAC_FCTL_PLTS BITS(4,5) /*!< pause low threshold */ -#define ENET_MAC_FCTL_DZQP BIT(7) /*!< disable zero-quanta pause */ -#define ENET_MAC_FCTL_PTM BITS(16,31) /*!< pause time */ - -/* ENET_MAC_VLT */ -#define ENET_MAC_VLT_VLTI BITS(0,15) /*!< VLAN tag identifier(for receive frames) */ -#define ENET_MAC_VLT_VLTC BIT(16) /*!< 12-bit VLAN tag comparison */ - -/* ENET_MAC_RWFF */ -#define ENET_MAC_RWFF_DATA BITS(0,31) /*!< wakeup frame filter register data */ - -/* ENET_MAC_WUM */ -#define ENET_MAC_WUM_PWD BIT(0) /*!< power down */ -#define ENET_MAC_WUM_MPEN BIT(1) /*!< magic packet enable */ -#define ENET_MAC_WUM_WFEN BIT(2) /*!< wakeup frame enable */ -#define ENET_MAC_WUM_MPKR BIT(5) /*!< magic packet received */ -#define ENET_MAC_WUM_WUFR BIT(6) /*!< wakeup frame received */ -#define ENET_MAC_WUM_GU BIT(9) /*!< global unicast */ -#define ENET_MAC_WUM_WUFFRPR BIT(31) /*!< wakeup frame filter register pointer reset */ - -/* ENET_MAC_DBG */ -#define ENET_MAC_DBG_MRNI BIT(0) /*!< MAC receive state not idle */ -#define ENET_MAC_DBG_RXAFS BITS(1,2) /*!< Rx asynchronous FIFO status */ -#define ENET_MAC_DBG_RXFW BIT(4) /*!< RxFIFO is writing */ -#define ENET_MAC_DBG_RXFRS BITS(5,6) /*!< RxFIFO read operation status */ -#define ENET_MAC_DBG_RXFS BITS(8,9) /*!< RxFIFO state */ -#define ENET_MAC_DBG_MTNI BIT(16) /*!< MAC transmit state not idle */ -#define ENET_MAC_DBG_SOMT BITS(17,18) /*!< status of mac transmitter */ -#define ENET_MAC_DBG_PCS BIT(19) /*!< pause condition status */ -#define ENET_MAC_DBG_TXFRS BITS(20,21) /*!< TxFIFO read operation status */ -#define ENET_MAC_DBG_TXFW BIT(22) /*!< TxFIFO is writing */ -#define ENET_MAC_DBG_TXFNE BIT(24) /*!< TxFIFO not empty flag */ -#define ENET_MAC_DBG_TXFF BIT(25) /*!< TxFIFO full flag */ - -/* ENET_MAC_INTF */ -#define ENET_MAC_INTF_WUM BIT(3) /*!< WUM status */ -#define ENET_MAC_INTF_MSC BIT(4) /*!< MSC status */ -#define ENET_MAC_INTF_MSCR BIT(5) /*!< MSC receive status */ -#define ENET_MAC_INTF_MSCT BIT(6) /*!< MSC transmit status */ -#define ENET_MAC_INTF_TMST BIT(9) /*!< timestamp trigger status */ - -/* ENET_MAC_INTMSK */ -#define ENET_MAC_INTMSK_WUMIM BIT(3) /*!< WUM interrupt mask */ -#define ENET_MAC_INTMSK_TMSTIM BIT(9) /*!< timestamp trigger interrupt mask */ - -/* ENET_MAC_ADDR0H */ -#define ENET_MAC_ADDR0H_ADDR0H BITS(0,15) /*!< MAC address0 high */ -#define ENET_MAC_ADDR0H_MO BIT(31) /*!< always read 1 and must be kept */ - -/* ENET_MAC_ADDR0L */ -#define ENET_MAC_ADDR0L_ADDR0L BITS(0,31) /*!< MAC address0 low */ - -/* ENET_MAC_ADDR1H */ -#define ENET_MAC_ADDR1H_ADDR1H BITS(0,15) /*!< MAC address1 high */ -#define ENET_MAC_ADDR1H_MB BITS(24,29) /*!< mask byte */ -#define ENET_MAC_ADDR1H_SAF BIT(30) /*!< source address filter */ -#define ENET_MAC_ADDR1H_AFE BIT(31) /*!< address filter enable */ - -/* ENET_MAC_ADDR1L */ -#define ENET_MAC_ADDR1L_ADDR1L BITS(0,31) /*!< MAC address1 low */ - -/* ENET_MAC_ADDR2H */ -#define ENET_MAC_ADDR2H_ADDR2H BITS(0,15) /*!< MAC address2 high */ -#define ENET_MAC_ADDR2H_MB BITS(24,29) /*!< mask byte */ -#define ENET_MAC_ADDR2H_SAF BIT(30) /*!< source address filter */ -#define ENET_MAC_ADDR2H_AFE BIT(31) /*!< address filter enable */ - -/* ENET_MAC_ADDR2L */ -#define ENET_MAC_ADDR2L_ADDR2L BITS(0,31) /*!< MAC address2 low */ - -/* ENET_MAC_ADDR3H */ -#define ENET_MAC_ADDR3H_ADDR3H BITS(0,15) /*!< MAC address3 high */ -#define ENET_MAC_ADDR3H_MB BITS(24,29) /*!< mask byte */ -#define ENET_MAC_ADDR3H_SAF BIT(30) /*!< source address filter */ -#define ENET_MAC_ADDR3H_AFE BIT(31) /*!< address filter enable */ - -/* ENET_MAC_ADDR3L */ -#define ENET_MAC_ADDR3L_ADDR3L BITS(0,31) /*!< MAC address3 low */ - -/* ENET_MAC_FCTH */ -#define ENET_MAC_FCTH_RFA BITS(0,2) /*!< threshold of active flow control */ -#define ENET_MAC_FCTH_RFD BITS(4,6) /*!< threshold of deactive flow control */ - -/* ENET_MSC_CTL */ -#define ENET_MSC_CTL_CTR BIT(0) /*!< counter reset */ -#define ENET_MSC_CTL_CTSR BIT(1) /*!< counter stop rollover */ -#define ENET_MSC_CTL_RTOR BIT(2) /*!< reset on read */ -#define ENET_MSC_CTL_MCFZ BIT(3) /*!< MSC counter freeze */ -#define ENET_MSC_CTL_PMC BIT(4) /*!< preset MSC counter */ -#define ENET_MSC_CTL_AFHPM BIT(5) /*!< almost full or half preset mode */ - -/* ENET_MSC_RINTF */ -#define ENET_MSC_RINTF_RFCE BIT(5) /*!< received frames CRC error */ -#define ENET_MSC_RINTF_RFAE BIT(6) /*!< received frames alignment error */ -#define ENET_MSC_RINTF_RGUF BIT(17) /*!< receive good unicast frames */ - -/* ENET_MSC_TINTF */ -#define ENET_MSC_TINTF_TGFSC BIT(14) /*!< transmitted good frames single collision */ -#define ENET_MSC_TINTF_TGFMSC BIT(15) /*!< transmitted good frames more single collision */ -#define ENET_MSC_TINTF_TGF BIT(21) /*!< transmitted good frames */ - -/* ENET_MSC_RINTMSK */ -#define ENET_MSC_RINTMSK_RFCEIM BIT(5) /*!< received frame CRC error interrupt mask */ -#define ENET_MSC_RINTMSK_RFAEIM BIT(6) /*!< received frames alignment error interrupt mask */ -#define ENET_MSC_RINTMSK_RGUFIM BIT(17) /*!< received good unicast frames interrupt mask */ - -/* ENET_MSC_TINTMSK */ -#define ENET_MSC_TINTMSK_TGFSCIM BIT(14) /*!< transmitted good frames single collision interrupt mask */ -#define ENET_MSC_TINTMSK_TGFMSCIM BIT(15) /*!< transmitted good frames more single collision interrupt mask */ -#define ENET_MSC_TINTMSK_TGFIM BIT(21) /*!< transmitted good frames interrupt mask */ - -/* ENET_MSC_SCCNT */ -#define ENET_MSC_SCCNT_SCC BITS(0,31) /*!< transmitted good frames single collision counter */ - -/* ENET_MSC_MSCCNT */ -#define ENET_MSC_MSCCNT_MSCC BITS(0,31) /*!< transmitted good frames more one single collision counter */ - -/* ENET_MSC_TGFCNT */ -#define ENET_MSC_TGFCNT_TGF BITS(0,31) /*!< transmitted good frames counter */ - -/* ENET_MSC_RFCECNT */ -#define ENET_MSC_RFCECNT_RFCER BITS(0,31) /*!< received frames with CRC error counter */ - -/* ENET_MSC_RFAECNT */ -#define ENET_MSC_RFAECNT_RFAER BITS(0,31) /*!< received frames alignment error counter */ - -/* ENET_MSC_RGUFCNT */ -#define ENET_MSC_RGUFCNT_RGUF BITS(0,31) /*!< received good unicast frames counter */ - -/* ENET_PTP_TSCTL */ -#define ENET_PTP_TSCTL_TMSEN BIT(0) /*!< timestamp enable */ -#define ENET_PTP_TSCTL_TMSFCU BIT(1) /*!< timestamp fine or coarse update */ -#define ENET_PTP_TSCTL_TMSSTI BIT(2) /*!< timestamp system time initialize */ -#define ENET_PTP_TSCTL_TMSSTU BIT(3) /*!< timestamp system time update */ -#define ENET_PTP_TSCTL_TMSITEN BIT(4) /*!< timestamp interrupt trigger enable */ -#define ENET_PTP_TSCTL_TMSARU BIT(5) /*!< timestamp addend register update */ -#define ENET_PTP_TSCTL_ARFSEN BIT(8) /*!< all received frames snapshot enable */ -#define ENET_PTP_TSCTL_SCROM BIT(9) /*!< subsecond counter rollover mode */ -#define ENET_PTP_TSCTL_PFSV BIT(10) /*!< PTP frame snooping version */ -#define ENET_PTP_TSCTL_ESEN BIT(11) /*!< received Ethernet snapshot enable */ -#define ENET_PTP_TSCTL_IP6SEN BIT(12) /*!< received IPv6 snapshot enable */ -#define ENET_PTP_TSCTL_IP4SEN BIT(13) /*!< received IPv4 snapshot enable */ -#define ENET_PTP_TSCTL_ETMSEN BIT(14) /*!< received event type message snapshot enable */ -#define ENET_PTP_TSCTL_MNMSEN BIT(15) /*!< received master node message snapshot enable */ -#define ENET_PTP_TSCTL_CKNT BITS(16,17) /*!< clock node type for time stamp */ -#define ENET_PTP_TSCTL_MAFEN BIT(18) /*!< MAC address filter enable for PTP frame */ - -/* ENET_PTP_SSINC */ -#define ENET_PTP_SSINC_STMSSI BITS(0,7) /*!< system time subsecond increment */ - -/* ENET_PTP_TSH */ -#define ENET_PTP_TSH_STMS BITS(0,31) /*!< system time second */ - -/* ENET_PTP_TSL */ -#define ENET_PTP_TSL_STMSS BITS(0,30) /*!< system time subseconds */ -#define ENET_PTP_TSL_STS BIT(31) /*!< system time sign */ - -/* ENET_PTP_TSUH */ -#define ENET_PTP_TSUH_TMSUS BITS(0,31) /*!< timestamp update seconds */ - -/* ENET_PTP_TSUL */ -#define ENET_PTP_TSUL_TMSUSS BITS(0,30) /*!< timestamp update subseconds */ -#define ENET_PTP_TSUL_TMSUPNS BIT(31) /*!< timestamp update positive or negative sign */ - -/* ENET_PTP_TSADDEND */ -#define ENET_PTP_TSADDEND_TMSA BITS(0,31) /*!< timestamp addend */ - -/* ENET_PTP_ETH */ -#define ENET_PTP_ETH_ETSH BITS(0,31) /*!< expected time high */ - -/* ENET_PTP_ETL */ -#define ENET_PTP_ETL_ETSL BITS(0,31) /*!< expected time low */ - -/* ENET_PTP_TSF */ -#define ENET_PTP_TSF_TSSCO BIT(0) /*!< timestamp second counter overflow */ -#define ENET_PTP_TSF_TTM BIT(1) /*!< target time match */ - -/* ENET_PTP_PPSCTL */ -#define ENET_PTP_PPSCTL_PPSOFC BITS(0,3) /*!< PPS output frequency configure */ - -/* ENET_DMA_BCTL */ -#define ENET_DMA_BCTL_SWR BIT(0) /*!< software reset */ -#define ENET_DMA_BCTL_DAB BIT(1) /*!< DMA arbitration */ -#define ENET_DMA_BCTL_DPSL BITS(2,6) /*!< descriptor skip length */ -#define ENET_DMA_BCTL_DFM BIT(7) /*!< descriptor format mode */ -#define ENET_DMA_BCTL_PGBL BITS(8,13) /*!< programmable burst length */ -#define ENET_DMA_BCTL_RTPR BITS(14,15) /*!< RxDMA and TxDMA transfer priority ratio */ -#define ENET_DMA_BCTL_FB BIT(16) /*!< fixed Burst */ -#define ENET_DMA_BCTL_RXDP BITS(17,22) /*!< RxDMA PGBL */ -#define ENET_DMA_BCTL_UIP BIT(23) /*!< use independent PGBL */ -#define ENET_DMA_BCTL_FPBL BIT(24) /*!< four times PGBL mode */ -#define ENET_DMA_BCTL_AA BIT(25) /*!< address-aligned */ -#define ENET_DMA_BCTL_MB BIT(26) /*!< mixed burst */ - -/* ENET_DMA_TPEN */ -#define ENET_DMA_TPEN_TPE BITS(0,31) /*!< transmit poll enable */ - -/* ENET_DMA_RPEN */ -#define ENET_DMA_RPEN_RPE BITS(0,31) /*!< receive poll enable */ - -/* ENET_DMA_RDTADDR */ -#define ENET_DMA_RDTADDR_SRT BITS(0,31) /*!< start address of receive table */ - -/* ENET_DMA_TDTADDR */ -#define ENET_DMA_TDTADDR_STT BITS(0,31) /*!< start address of transmit table */ - -/* ENET_DMA_STAT */ -#define ENET_DMA_STAT_TS BIT(0) /*!< transmit status */ -#define ENET_DMA_STAT_TPS BIT(1) /*!< transmit process stopped status */ -#define ENET_DMA_STAT_TBU BIT(2) /*!< transmit buffer unavailable status */ -#define ENET_DMA_STAT_TJT BIT(3) /*!< transmit jabber timeout status */ -#define ENET_DMA_STAT_RO BIT(4) /*!< receive overflow status */ -#define ENET_DMA_STAT_TU BIT(5) /*!< transmit underflow status */ -#define ENET_DMA_STAT_RS BIT(6) /*!< receive status */ -#define ENET_DMA_STAT_RBU BIT(7) /*!< receive buffer unavailable status */ -#define ENET_DMA_STAT_RPS BIT(8) /*!< receive process stopped status */ -#define ENET_DMA_STAT_RWT BIT(9) /*!< receive watchdog timeout status */ -#define ENET_DMA_STAT_ET BIT(10) /*!< early transmit status */ -#define ENET_DMA_STAT_FBE BIT(13) /*!< fatal bus error status */ -#define ENET_DMA_STAT_ER BIT(14) /*!< early receive status */ -#define ENET_DMA_STAT_AI BIT(15) /*!< abnormal interrupt summary */ -#define ENET_DMA_STAT_NI BIT(16) /*!< normal interrupt summary */ -#define ENET_DMA_STAT_RP BITS(17,19) /*!< receive process state */ -#define ENET_DMA_STAT_TP BITS(20,22) /*!< transmit process state */ -#define ENET_DMA_STAT_EB BITS(23,25) /*!< error bits status */ -#define ENET_DMA_STAT_MSC BIT(27) /*!< MSC status */ -#define ENET_DMA_STAT_WUM BIT(28) /*!< WUM status */ -#define ENET_DMA_STAT_TST BIT(29) /*!< timestamp trigger status */ - -/* ENET_DMA_CTL */ -#define ENET_DMA_CTL_SRE BIT(1) /*!< start/stop receive enable */ -#define ENET_DMA_CTL_OSF BIT(2) /*!< operate on second frame */ -#define ENET_DMA_CTL_RTHC BITS(3,4) /*!< receive threshold control */ -#define ENET_DMA_CTL_FUF BIT(6) /*!< forward undersized good frames */ -#define ENET_DMA_CTL_FERF BIT(7) /*!< forward error frames */ -#define ENET_DMA_CTL_STE BIT(13) /*!< start/stop transmission enable */ -#define ENET_DMA_CTL_TTHC BITS(14,16) /*!< transmit threshold control */ -#define ENET_DMA_CTL_FTF BIT(20) /*!< flush transmit FIFO */ -#define ENET_DMA_CTL_TSFD BIT(21) /*!< transmit store-and-forward */ -#define ENET_DMA_CTL_DAFRF BIT(24) /*!< disable flushing of received frames */ -#define ENET_DMA_CTL_RSFD BIT(25) /*!< receive store-and-forward */ -#define ENET_DMA_CTL_DTCERFD BIT(26) /*!< dropping of TCP/IP checksum error frames disable */ - -/* ENET_DMA_INTEN */ -#define ENET_DMA_INTEN_TIE BIT(0) /*!< transmit interrupt enable */ -#define ENET_DMA_INTEN_TPSIE BIT(1) /*!< transmit process stopped interrupt enable */ -#define ENET_DMA_INTEN_TBUIE BIT(2) /*!< transmit buffer unavailable interrupt enable */ -#define ENET_DMA_INTEN_TJTIE BIT(3) /*!< transmit jabber timeout interrupt enable */ -#define ENET_DMA_INTEN_ROIE BIT(4) /*!< receive overflow interrupt enable */ -#define ENET_DMA_INTEN_TUIE BIT(5) /*!< transmit underflow interrupt enable */ -#define ENET_DMA_INTEN_RIE BIT(6) /*!< receive interrupt enable */ -#define ENET_DMA_INTEN_RBUIE BIT(7) /*!< receive buffer unavailable interrupt enable */ -#define ENET_DMA_INTEN_RPSIE BIT(8) /*!< receive process stopped interrupt enable */ -#define ENET_DMA_INTEN_RWTIE BIT(9) /*!< receive watchdog timeout interrupt enable */ -#define ENET_DMA_INTEN_ETIE BIT(10) /*!< early transmit interrupt enable */ -#define ENET_DMA_INTEN_FBEIE BIT(13) /*!< fatal bus error interrupt enable */ -#define ENET_DMA_INTEN_ERIE BIT(14) /*!< early receive interrupt enable */ -#define ENET_DMA_INTEN_AIE BIT(15) /*!< abnormal interrupt summary enable */ -#define ENET_DMA_INTEN_NIE BIT(16) /*!< normal interrupt summary enable */ - -/* ENET_DMA_MFBOCNT */ -#define ENET_DMA_MFBOCNT_MSFC BITS(0,15) /*!< missed frames by the controller */ -#define ENET_DMA_MFBOCNT_MSFA BITS(17,27) /*!< missed frames by the application */ - -/* ENET_DMA_RSWDC */ -#define ENET_DMA_RSWDC_WDCFRS BITS(0,7) /*!< watchdog counter for receive status (RS) */ - -/* ENET_DMA_CTDADDR */ -#define ENET_DMA_CTDADDR_TDAP BITS(0,31) /*!< transmit descriptor address pointer */ - -/* ENET_DMA_CRDADDR */ -#define ENET_DMA_CRDADDR_RDAP BITS(0,31) /*!< receive descriptor address pointer */ - -/* ENET_DMA_CTBADDR */ -#define ENET_DMA_CTBADDR_TBAP BITS(0,31) /*!< transmit buffer address pointer */ - -/* ENET_DMA_CRBADDR */ -#define ENET_DMA_CRBADDR_RBAP BITS(0,31) /*!< receive buffer address pointer */ - -/* ENET DMA Tx descriptor TDES0 */ -#define ENET_TDES0_DB BIT(0) /*!< deferred */ -#define ENET_TDES0_UFE BIT(1) /*!< underflow error */ -#define ENET_TDES0_EXD BIT(2) /*!< excessive deferral */ -#define ENET_TDES0_COCNT BITS(3,6) /*!< collision count */ -#define ENET_TDES0_VFRM BIT(7) /*!< VLAN frame */ -#define ENET_TDES0_ECO BIT(8) /*!< excessive collision */ -#define ENET_TDES0_LCO BIT(9) /*!< late collision */ -#define ENET_TDES0_NCA BIT(10) /*!< no carrier */ -#define ENET_TDES0_LCA BIT(11) /*!< loss of carrier */ -#define ENET_TDES0_IPPE BIT(12) /*!< IP payload error */ -#define ENET_TDES0_FRMF BIT(13) /*!< frame flushed */ -#define ENET_TDES0_JT BIT(14) /*!< jabber timeout */ -#define ENET_TDES0_ES BIT(15) /*!< error summary */ -#define ENET_TDES0_IPHE BIT(16) /*!< IP header error */ -#define ENET_TDES0_TTMSS BIT(17) /*!< transmit timestamp status */ -#define ENET_TDES0_TCHM BIT(20) /*!< the second address chained mode */ -#define ENET_TDES0_TERM BIT(21) /*!< transmit end of ring mode*/ -#define ENET_TDES0_CM BITS(22,23) /*!< checksum mode */ -#define ENET_TDES0_TTSEN BIT(25) /*!< transmit timestamp function enable */ -#define ENET_TDES0_DPAD BIT(26) /*!< disable adding pad */ -#define ENET_TDES0_DCRC BIT(27) /*!< disable CRC */ -#define ENET_TDES0_FSG BIT(28) /*!< first segment */ -#define ENET_TDES0_LSG BIT(29) /*!< last segment */ -#define ENET_TDES0_INTC BIT(30) /*!< interrupt on completion */ -#define ENET_TDES0_DAV BIT(31) /*!< DAV bit */ - -/* ENET DMA Tx descriptor TDES1 */ -#define ENET_TDES1_TB1S BITS(0,12) /*!< transmit buffer 1 size */ -#define ENET_TDES1_TB2S BITS(16,28) /*!< transmit buffer 2 size */ - -/* ENET DMA Tx descriptor TDES2 */ -#define ENET_TDES2_TB1AP BITS(0,31) /*!< transmit buffer 1 address pointer/transmit frame timestamp low 32-bit value */ - -/* ENET DMA Tx descriptor TDES3 */ -#define ENET_TDES3_TB2AP BITS(0,31) /*!< transmit buffer 2 address pointer (or next descriptor address) / transmit frame timestamp high 32-bit value */ - -#ifdef SELECT_DESCRIPTORS_ENHANCED_MODE -/* ENET DMA Tx descriptor TDES6 */ -#define ENET_TDES6_TTSL BITS(0,31) /*!< transmit frame timestamp low 32-bit value */ - -/* ENET DMA Tx descriptor TDES7 */ -#define ENET_TDES7_TTSH BITS(0,31) /*!< transmit frame timestamp high 32-bit value */ -#endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */ - -/* ENET DMA Rx descriptor RDES0 */ -#define ENET_RDES0_PCERR BIT(0) /*!< payload checksum error */ -#define ENET_RDES0_EXSV BIT(0) /*!< extended status valid */ -#define ENET_RDES0_CERR BIT(1) /*!< CRC error */ -#define ENET_RDES0_DBERR BIT(2) /*!< dribble bit error */ -#define ENET_RDES0_RERR BIT(3) /*!< receive error */ -#define ENET_RDES0_RWDT BIT(4) /*!< receive watchdog timeout */ -#define ENET_RDES0_FRMT BIT(5) /*!< frame type */ -#define ENET_RDES0_LCO BIT(6) /*!< late collision */ -#define ENET_RDES0_IPHERR BIT(7) /*!< IP frame header error */ -#define ENET_RDES0_TSV BIT(7) /*!< timestamp valid */ -#define ENET_RDES0_LDES BIT(8) /*!< last descriptor */ -#define ENET_RDES0_FDES BIT(9) /*!< first descriptor */ -#define ENET_RDES0_VTAG BIT(10) /*!< VLAN tag */ -#define ENET_RDES0_OERR BIT(11) /*!< overflow Error */ -#define ENET_RDES0_LERR BIT(12) /*!< length error */ -#define ENET_RDES0_SAFF BIT(13) /*!< SA filter fail */ -#define ENET_RDES0_DERR BIT(14) /*!< descriptor error */ -#define ENET_RDES0_ERRS BIT(15) /*!< error summary */ -#define ENET_RDES0_FRML BITS(16,29) /*!< frame length */ -#define ENET_RDES0_DAFF BIT(30) /*!< destination address filter fail */ -#define ENET_RDES0_DAV BIT(31) /*!< descriptor available */ - -/* ENET DMA Rx descriptor RDES1 */ -#define ENET_RDES1_RB1S BITS(0,12) /*!< receive buffer 1 size */ -#define ENET_RDES1_RCHM BIT(14) /*!< receive chained mode for second address */ -#define ENET_RDES1_RERM BIT(15) /*!< receive end of ring mode*/ -#define ENET_RDES1_RB2S BITS(16,28) /*!< receive buffer 2 size */ -#define ENET_RDES1_DINTC BIT(31) /*!< disable interrupt on completion */ - -/* ENET DMA Rx descriptor RDES2 */ -#define ENET_RDES2_RB1AP BITS(0,31) /*!< receive buffer 1 address pointer / receive frame timestamp low 32-bit */ - -/* ENET DMA Rx descriptor RDES3 */ -#define ENET_RDES3_RB2AP BITS(0,31) /*!< receive buffer 2 address pointer (next descriptor address)/receive frame timestamp high 32-bit value */ - -#ifdef SELECT_DESCRIPTORS_ENHANCED_MODE -/* ENET DMA Rx descriptor RDES4 */ -#define ENET_RDES4_IPPLDT BITS(0,2) /*!< IP frame payload type */ -#define ENET_RDES4_IPHERR BIT(3) /*!< IP frame header error */ -#define ENET_RDES4_IPPLDERR BIT(4) /*!< IP frame payload error */ -#define ENET_RDES4_IPCKSB BIT(5) /*!< IP frame checksum bypassed */ -#define ENET_RDES4_IPF4 BIT(6) /*!< IP frame in version 4 */ -#define ENET_RDES4_IPF6 BIT(7) /*!< IP frame in version 6 */ -#define ENET_RDES4_PTPMT BITS(8,11) /*!< PTP message type */ -#define ENET_RDES4_PTPOEF BIT(12) /*!< PTP on ethernet frame */ -#define ENET_RDES4_PTPVF BIT(13) /*!< PTP version format */ - -/* ENET DMA Rx descriptor RDES6 */ -#define ENET_RDES6_RTSL BITS(0,31) /*!< receive frame timestamp low 32-bit value */ - -/* ENET DMA Rx descriptor RDES7 */ -#define ENET_RDES7_RTSH BITS(0,31) /*!< receive frame timestamp high 32-bit value */ -#endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */ - -/* constants definitions */ -/* define bit position and its register index offset */ -#define ENET_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define ENET_REG_VAL(periph) (REG32(ENET + ((uint32_t)(periph)>>6))) -#define ENET_BIT_POS(val) ((uint32_t)(val) & 0x1FU) - -/* ENET clock range judgement */ -#define ENET_RANGE(hclk, n, m) (((hclk) >= (n))&&((hclk) < (m))) - -/* define MAC address configuration and reference address */ -#define ENET_SET_MACADDRH(p) (((uint32_t)(p)[5] << 8) | (uint32_t)(p)[4]) -#define ENET_SET_MACADDRL(p) (((uint32_t)(p)[3] << 24) | ((uint32_t)(p)[2] << 16) | ((uint32_t)(p)[1] << 8) | (uint32_t)(p)[0]) -#define ENET_ADDRH_BASE ((ENET) + 0x40U) -#define ENET_ADDRL_BASE ((ENET) + 0x44U) -#define ENET_GET_MACADDR(offset, n) ((uint8_t)((REG32((ENET_ADDRL_BASE + (offset)) - (((n) / 4U) * 4U)) >> (8U * ((n) % 4U))) & 0xFFU)) - -/* register offset */ -#define MAC_FCTL_REG_OFFSET 0x0018U /*!< MAC flow control register offset */ -#define MAC_WUM_REG_OFFSET 0x002CU /*!< MAC wakeup management register offset */ -#define MAC_INTF_REG_OFFSET 0x0038U /*!< MAC interrupt flag register offset */ -#define MAC_INTMSK_REG_OFFSET 0x003CU /*!< MAC interrupt mask register offset */ - -#define MSC_RINTF_REG_OFFSET 0x0104U /*!< MSC receive interrupt flag register offset */ -#define MSC_TINTF_REG_OFFSET 0x0108U /*!< MSC transmit interrupt flag register offset */ -#define MSC_RINTMSK_REG_OFFSET 0x010CU /*!< MSC receive interrupt mask register offset */ -#define MSC_TINTMSK_REG_OFFSET 0x0110U /*!< MSC transmit interrupt mask register offset */ -#define MSC_SCCNT_REG_OFFSET 0x014CU /*!< MSC transmitted good frames after a single collision counter register offset */ -#define MSC_MSCCNT_REG_OFFSET 0x0150U /*!< MSC transmitted good frames after more than a single collision counter register offset */ -#define MSC_TGFCNT_REG_OFFSET 0x0168U /*!< MSC transmitted good frames counter register offset */ -#define MSC_RFCECNT_REG_OFFSET 0x0194U /*!< MSC received frames with CRC error counter register offset */ -#define MSC_RFAECNT_REG_OFFSET 0x0198U /*!< MSC received frames with alignment error counter register offset */ -#define MSC_RGUFCNT_REG_OFFSET 0x01C4U /*!< MSC received good unicast frames counter register offset */ - -#define PTP_TSF_REG_OFFSET 0x0728U /*!< PTP time stamp flag register offset */ - -#define DMA_STAT_REG_OFFSET 0x1014U /*!< DMA status register offset */ -#define DMA_INTEN_REG_OFFSET 0x101CU /*!< DMA interrupt enable register offset */ -#define DMA_TDTADDR_REG_OFFSET 0x1010U /*!< DMA transmit descriptor table address register offset */ -#define DMA_CTDADDR_REG_OFFSET 0x1048U /*!< DMA current transmit descriptor address register */ -#define DMA_CTBADDR_REG_OFFSET 0x1050U /*!< DMA current transmit buffer address register */ -#define DMA_RDTADDR_REG_OFFSET 0x100CU /*!< DMA receive descriptor table address register */ -#define DMA_CRDADDR_REG_OFFSET 0x104CU /*!< DMA current receive descriptor address register */ -#define DMA_CRBADDR_REG_OFFSET 0x1054U /*!< DMA current receive buffer address register */ - -/* ENET status flag get */ -typedef enum -{ - /* ENET_MAC_WUM register */ - ENET_MAC_FLAG_MPKR = ENET_REGIDX_BIT(MAC_WUM_REG_OFFSET, 5U), /*!< magic packet received flag */ - ENET_MAC_FLAG_WUFR = ENET_REGIDX_BIT(MAC_WUM_REG_OFFSET, 6U), /*!< wakeup frame received flag */ - /* ENET_MAC_FCTL register */ - ENET_MAC_FLAG_FLOWCONTROL = ENET_REGIDX_BIT(MAC_FCTL_REG_OFFSET, 0U), /*!< flow control status flag */ - /* ENET_MAC_INTF register */ - ENET_MAC_FLAG_WUM = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 3U), /*!< WUM status flag */ - ENET_MAC_FLAG_MSC = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 4U), /*!< MSC status flag */ - ENET_MAC_FLAG_MSCR = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 5U), /*!< MSC receive status flag */ - ENET_MAC_FLAG_MSCT = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 6U), /*!< MSC transmit status flag */ - ENET_MAC_FLAG_TMST = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 9U), /*!< timestamp trigger status flag */ - /* ENET_PTP_TSF register */ - ENET_PTP_FLAG_TSSCO = ENET_REGIDX_BIT(PTP_TSF_REG_OFFSET, 0U), /*!< timestamp second counter overflow flag */ - ENET_PTP_FLAG_TTM = ENET_REGIDX_BIT(PTP_TSF_REG_OFFSET, 1U), /*!< target time match flag */ - /* ENET_MSC_RINTF register */ - ENET_MSC_FLAG_RFCE = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 5U), /*!< received frames CRC error flag */ - ENET_MSC_FLAG_RFAE = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 6U), /*!< received frames alignment error flag */ - ENET_MSC_FLAG_RGUF = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 17U), /*!< received good unicast frames flag */ - /* ENET_MSC_TINTF register */ - ENET_MSC_FLAG_TGFSC = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 14U), /*!< transmitted good frames single collision flag */ - ENET_MSC_FLAG_TGFMSC = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 15U), /*!< transmitted good frames more single collision flag */ - ENET_MSC_FLAG_TGF = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 21U), /*!< transmitted good frames flag */ - /* ENET_DMA_STAT register */ - ENET_DMA_FLAG_TS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 0U), /*!< transmit status flag */ - ENET_DMA_FLAG_TPS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 1U), /*!< transmit process stopped status flag */ - ENET_DMA_FLAG_TBU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 2U), /*!< transmit buffer unavailable status flag */ - ENET_DMA_FLAG_TJT = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 3U), /*!< transmit jabber timeout status flag */ - ENET_DMA_FLAG_RO = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 4U), /*!< receive overflow status flag */ - ENET_DMA_FLAG_TU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 5U), /*!< transmit underflow status flag */ - ENET_DMA_FLAG_RS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 6U), /*!< receive status flag */ - ENET_DMA_FLAG_RBU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 7U), /*!< receive buffer unavailable status flag */ - ENET_DMA_FLAG_RPS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 8U), /*!< receive process stopped status flag */ - ENET_DMA_FLAG_RWT = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 9U), /*!< receive watchdog timeout status flag */ - ENET_DMA_FLAG_ET = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 10U), /*!< early transmit status flag */ - ENET_DMA_FLAG_FBE = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 13U), /*!< fatal bus error status flag */ - ENET_DMA_FLAG_ER = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 14U), /*!< early receive status flag */ - ENET_DMA_FLAG_AI = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 15U), /*!< abnormal interrupt summary flag */ - ENET_DMA_FLAG_NI = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 16U), /*!< normal interrupt summary flag */ - ENET_DMA_FLAG_EB_DMA_ERROR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 23U), /*!< error during data transfer by RxDMA/TxDMA flag */ - ENET_DMA_FLAG_EB_TRANSFER_ERROR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 24U), /*!< error during write/read transfer flag */ - ENET_DMA_FLAG_EB_ACCESS_ERROR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 25U), /*!< error during data buffer/descriptor access flag */ - ENET_DMA_FLAG_MSC = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 27U), /*!< MSC status flag */ - ENET_DMA_FLAG_WUM = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 28U), /*!< WUM status flag */ - ENET_DMA_FLAG_TST = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 29U), /*!< timestamp trigger status flag */ -}enet_flag_enum; - -/* ENET stutus flag clear */ -typedef enum -{ - /* ENET_DMA_STAT register */ - ENET_DMA_FLAG_TS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 0U), /*!< transmit status flag */ - ENET_DMA_FLAG_TPS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 1U), /*!< transmit process stopped status flag */ - ENET_DMA_FLAG_TBU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 2U), /*!< transmit buffer unavailable status flag */ - ENET_DMA_FLAG_TJT_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 3U), /*!< transmit jabber timeout status flag */ - ENET_DMA_FLAG_RO_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 4U), /*!< receive overflow status flag */ - ENET_DMA_FLAG_TU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 5U), /*!< transmit underflow status flag */ - ENET_DMA_FLAG_RS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 6U), /*!< receive status flag */ - ENET_DMA_FLAG_RBU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 7U), /*!< receive buffer unavailable status flag */ - ENET_DMA_FLAG_RPS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 8U), /*!< receive process stopped status flag */ - ENET_DMA_FLAG_RWT_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 9U), /*!< receive watchdog timeout status flag */ - ENET_DMA_FLAG_ET_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 10U), /*!< early transmit status flag */ - ENET_DMA_FLAG_FBE_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 13U), /*!< fatal bus error status flag */ - ENET_DMA_FLAG_ER_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 14U), /*!< early receive status flag */ - ENET_DMA_FLAG_AI_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 15U), /*!< abnormal interrupt summary flag */ - ENET_DMA_FLAG_NI_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 16U), /*!< normal interrupt summary flag */ -}enet_flag_clear_enum; - -/* ENET interrupt enable/disable */ -typedef enum -{ - /* ENET_MAC_INTMSK register */ - ENET_MAC_INT_WUMIM = ENET_REGIDX_BIT(MAC_INTMSK_REG_OFFSET, 3U), /*!< WUM interrupt mask */ - ENET_MAC_INT_TMSTIM = ENET_REGIDX_BIT(MAC_INTMSK_REG_OFFSET, 9U), /*!< timestamp trigger interrupt mask */ - /* ENET_MSC_RINTMSK register */ - ENET_MSC_INT_RFCEIM = ENET_REGIDX_BIT(MSC_RINTMSK_REG_OFFSET, 5U), /*!< received frame CRC error interrupt mask */ - ENET_MSC_INT_RFAEIM = ENET_REGIDX_BIT(MSC_RINTMSK_REG_OFFSET, 6U), /*!< received frames alignment error interrupt mask */ - ENET_MSC_INT_RGUFIM = ENET_REGIDX_BIT(MSC_RINTMSK_REG_OFFSET, 17U), /*!< received good unicast frames interrupt mask */ - /* ENET_MSC_TINTMSK register */ - ENET_MSC_INT_TGFSCIM = ENET_REGIDX_BIT(MSC_TINTMSK_REG_OFFSET, 14U), /*!< transmitted good frames single collision interrupt mask */ - ENET_MSC_INT_TGFMSCIM = ENET_REGIDX_BIT(MSC_TINTMSK_REG_OFFSET, 15U), /*!< transmitted good frames more single collision interrupt mask */ - ENET_MSC_INT_TGFIM = ENET_REGIDX_BIT(MSC_TINTMSK_REG_OFFSET, 21U), /*!< transmitted good frames interrupt mask */ - /* ENET_DMA_INTEN register */ - ENET_DMA_INT_TIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 0U), /*!< transmit interrupt enable */ - ENET_DMA_INT_TPSIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 1U), /*!< transmit process stopped interrupt enable */ - ENET_DMA_INT_TBUIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 2U), /*!< transmit buffer unavailable interrupt enable */ - ENET_DMA_INT_TJTIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 3U), /*!< transmit jabber timeout interrupt enable */ - ENET_DMA_INT_ROIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 4U), /*!< receive overflow interrupt enable */ - ENET_DMA_INT_TUIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 5U), /*!< transmit underflow interrupt enable */ - ENET_DMA_INT_RIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 6U), /*!< receive interrupt enable */ - ENET_DMA_INT_RBUIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 7U), /*!< receive buffer unavailable interrupt enable */ - ENET_DMA_INT_RPSIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 8U), /*!< receive process stopped interrupt enable */ - ENET_DMA_INT_RWTIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 9U), /*!< receive watchdog timeout interrupt enable */ - ENET_DMA_INT_ETIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 10U), /*!< early transmit interrupt enable */ - ENET_DMA_INT_FBEIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 13U), /*!< fatal bus error interrupt enable */ - ENET_DMA_INT_ERIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 14U), /*!< early receive interrupt enable */ - ENET_DMA_INT_AIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 15U), /*!< abnormal interrupt summary enable */ - ENET_DMA_INT_NIE = ENET_REGIDX_BIT(DMA_INTEN_REG_OFFSET, 16U), /*!< normal interrupt summary enable */ -}enet_int_enum; - -/* ENET interrupt flag get */ -typedef enum -{ - /* ENET_MAC_INTF register */ - ENET_MAC_INT_FLAG_WUM = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 3U), /*!< WUM status flag */ - ENET_MAC_INT_FLAG_MSC = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 4U), /*!< MSC status flag */ - ENET_MAC_INT_FLAG_MSCR = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 5U), /*!< MSC receive status flag */ - ENET_MAC_INT_FLAG_MSCT = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 6U), /*!< MSC transmit status flag */ - ENET_MAC_INT_FLAG_TMST = ENET_REGIDX_BIT(MAC_INTF_REG_OFFSET, 9U), /*!< timestamp trigger status flag */ - /* ENET_MSC_RINTF register */ - ENET_MSC_INT_FLAG_RFCE = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 5U), /*!< received frames CRC error flag */ - ENET_MSC_INT_FLAG_RFAE = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 6U), /*!< received frames alignment error flag */ - ENET_MSC_INT_FLAG_RGUF = ENET_REGIDX_BIT(MSC_RINTF_REG_OFFSET, 17U), /*!< received good unicast frames flag */ - /* ENET_MSC_TINTF register */ - ENET_MSC_INT_FLAG_TGFSC = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 14U), /*!< transmitted good frames single collision flag */ - ENET_MSC_INT_FLAG_TGFMSC = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 15U), /*!< transmitted good frames more single collision flag */ - ENET_MSC_INT_FLAG_TGF = ENET_REGIDX_BIT(MSC_TINTF_REG_OFFSET, 21U), /*!< transmitted good frames flag */ - /* ENET_DMA_STAT register */ - ENET_DMA_INT_FLAG_TS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 0U), /*!< transmit status flag */ - ENET_DMA_INT_FLAG_TPS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 1U), /*!< transmit process stopped status flag */ - ENET_DMA_INT_FLAG_TBU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 2U), /*!< transmit buffer unavailable status flag */ - ENET_DMA_INT_FLAG_TJT = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 3U), /*!< transmit jabber timeout status flag */ - ENET_DMA_INT_FLAG_RO = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 4U), /*!< receive overflow status flag */ - ENET_DMA_INT_FLAG_TU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 5U), /*!< transmit underflow status flag */ - ENET_DMA_INT_FLAG_RS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 6U), /*!< receive status flag */ - ENET_DMA_INT_FLAG_RBU = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 7U), /*!< receive buffer unavailable status flag */ - ENET_DMA_INT_FLAG_RPS = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 8U), /*!< receive process stopped status flag */ - ENET_DMA_INT_FLAG_RWT = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 9U), /*!< receive watchdog timeout status flag */ - ENET_DMA_INT_FLAG_ET = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 10U), /*!< early transmit status flag */ - ENET_DMA_INT_FLAG_FBE = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 13U), /*!< fatal bus error status flag */ - ENET_DMA_INT_FLAG_ER = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 14U), /*!< early receive status flag */ - ENET_DMA_INT_FLAG_AI = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 15U), /*!< abnormal interrupt summary flag */ - ENET_DMA_INT_FLAG_NI = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 16U), /*!< normal interrupt summary flag */ - ENET_DMA_INT_FLAG_MSC = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 27U), /*!< MSC status flag */ - ENET_DMA_INT_FLAG_WUM = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 28U), /*!< WUM status flag */ - ENET_DMA_INT_FLAG_TST = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 29U), /*!< timestamp trigger status flag */ -}enet_int_flag_enum; - -/* ENET interrupt flag clear */ -typedef enum -{ - /* ENET_DMA_STAT register */ - ENET_DMA_INT_FLAG_TS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 0U), /*!< transmit status flag */ - ENET_DMA_INT_FLAG_TPS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 1U), /*!< transmit process stopped status flag */ - ENET_DMA_INT_FLAG_TBU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 2U), /*!< transmit buffer unavailable status flag */ - ENET_DMA_INT_FLAG_TJT_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 3U), /*!< transmit jabber timeout status flag */ - ENET_DMA_INT_FLAG_RO_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 4U), /*!< receive overflow status flag */ - ENET_DMA_INT_FLAG_TU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 5U), /*!< transmit underflow status flag */ - ENET_DMA_INT_FLAG_RS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 6U), /*!< receive status flag */ - ENET_DMA_INT_FLAG_RBU_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 7U), /*!< receive buffer unavailable status flag */ - ENET_DMA_INT_FLAG_RPS_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 8U), /*!< receive process stopped status flag */ - ENET_DMA_INT_FLAG_RWT_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 9U), /*!< receive watchdog timeout status flag */ - ENET_DMA_INT_FLAG_ET_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 10U), /*!< early transmit status flag */ - ENET_DMA_INT_FLAG_FBE_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 13U), /*!< fatal bus error status flag */ - ENET_DMA_INT_FLAG_ER_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 14U), /*!< early receive status flag */ - ENET_DMA_INT_FLAG_AI_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 15U), /*!< abnormal interrupt summary flag */ - ENET_DMA_INT_FLAG_NI_CLR = ENET_REGIDX_BIT(DMA_STAT_REG_OFFSET, 16U), /*!< normal interrupt summary flag */ -}enet_int_flag_clear_enum; - -/* current RX/TX descriptor/buffer/descriptor table address get */ -typedef enum -{ - ENET_RX_DESC_TABLE = DMA_RDTADDR_REG_OFFSET, /*!< RX descriptor table */ - ENET_RX_CURRENT_DESC = DMA_CRDADDR_REG_OFFSET, /*!< current RX descriptor */ - ENET_RX_CURRENT_BUFFER = DMA_CRBADDR_REG_OFFSET, /*!< current RX buffer */ - ENET_TX_DESC_TABLE = DMA_TDTADDR_REG_OFFSET, /*!< TX descriptor table */ - ENET_TX_CURRENT_DESC = DMA_CTDADDR_REG_OFFSET, /*!< current TX descriptor */ - ENET_TX_CURRENT_BUFFER = DMA_CTBADDR_REG_OFFSET /*!< current TX buffer */ -}enet_desc_reg_enum; - -/* MAC statistics counter get */ -typedef enum -{ - ENET_MSC_TX_SCCNT = MSC_SCCNT_REG_OFFSET, /*!< MSC transmitted good frames after a single collision counter */ - ENET_MSC_TX_MSCCNT = MSC_MSCCNT_REG_OFFSET, /*!< MSC transmitted good frames after more than a single collision counter */ - ENET_MSC_TX_TGFCNT = MSC_TGFCNT_REG_OFFSET, /*!< MSC transmitted good frames counter */ - ENET_MSC_RX_RFCECNT = MSC_RFCECNT_REG_OFFSET, /*!< MSC received frames with CRC error counter */ - ENET_MSC_RX_RFAECNT = MSC_RFAECNT_REG_OFFSET, /*!< MSC received frames with alignment error counter */ - ENET_MSC_RX_RGUFCNT = MSC_RGUFCNT_REG_OFFSET /*!< MSC received good unicast frames counter */ -}enet_msc_counter_enum; - -/* function option, used for ENET initialization */ -typedef enum -{ - FORWARD_OPTION = BIT(0), /*!< configure the frame forward related parameters */ - DMABUS_OPTION = BIT(1), /*!< configure the DMA bus mode related parameters */ - DMA_MAXBURST_OPTION = BIT(2), /*!< configure the DMA max burst related parameters */ - DMA_ARBITRATION_OPTION = BIT(3), /*!< configure the DMA arbitration related parameters */ - STORE_OPTION = BIT(4), /*!< configure the store forward mode related parameters */ - DMA_OPTION = BIT(5), /*!< configure the DMA control related parameters */ - VLAN_OPTION = BIT(6), /*!< configure the VLAN tag related parameters */ - FLOWCTL_OPTION = BIT(7), /*!< configure the flow control related parameters */ - HASHH_OPTION = BIT(8), /*!< configure the hash list high 32-bit related parameters */ - HASHL_OPTION = BIT(9), /*!< configure the hash list low 32-bit related parameters */ - FILTER_OPTION = BIT(10), /*!< configure the frame filter control related parameters */ - HALFDUPLEX_OPTION = BIT(11), /*!< configure the halfduplex related parameters */ - TIMER_OPTION = BIT(12), /*!< configure the frame timer related parameters */ - INTERFRAMEGAP_OPTION = BIT(13), /*!< configure the inter frame gap related parameters */ -}enet_option_enum; - -/* phy mode and mac loopback configurations */ -typedef enum -{ - ENET_AUTO_NEGOTIATION = 0x01u, /*!< PHY auto negotiation */ - ENET_100M_FULLDUPLEX = (ENET_MAC_CFG_SPD | ENET_MAC_CFG_DPM), /*!< 100Mbit/s, full-duplex */ - ENET_100M_HALFDUPLEX = ENET_MAC_CFG_SPD , /*!< 100Mbit/s, half-duplex */ - ENET_10M_FULLDUPLEX = ENET_MAC_CFG_DPM, /*!< 10Mbit/s, full-duplex */ - ENET_10M_HALFDUPLEX = (uint32_t)0x00000000U, /*!< 10Mbit/s, half-duplex */ - ENET_LOOPBACKMODE = (ENET_MAC_CFG_LBM | ENET_MAC_CFG_DPM) /*!< MAC in loopback mode at the MII */ -}enet_mediamode_enum; - -/* IP frame checksum function */ -typedef enum -{ - ENET_NO_AUTOCHECKSUM = (uint32_t)0x00000000U, /*!< disable IP frame checksum function */ - ENET_AUTOCHECKSUM_DROP_FAILFRAMES = ENET_MAC_CFG_IPFCO, /*!< enable IP frame checksum function */ - ENET_AUTOCHECKSUM_ACCEPT_FAILFRAMES = (ENET_MAC_CFG_IPFCO|ENET_DMA_CTL_DTCERFD) /*!< enable IP frame checksum function, and the received frame - with only payload error but no other errors will not be dropped */ -}enet_chksumconf_enum; - -/* received frame filter function */ -typedef enum -{ - ENET_PROMISCUOUS_MODE = ENET_MAC_FRMF_PM, /*!< promiscuous mode enabled */ - ENET_RECEIVEALL = (int32_t)ENET_MAC_FRMF_FAR, /*!< all received frame are forwarded to application */ - ENET_BROADCAST_FRAMES_PASS = (uint32_t)0x00000000U, /*!< the address filters pass all received broadcast frames */ - ENET_BROADCAST_FRAMES_DROP = ENET_MAC_FRMF_BFRMD /*!< the address filters filter all incoming broadcast frames */ -}enet_frmrecept_enum; - -/* register group value get */ -typedef enum -{ - ALL_MAC_REG = 0, /*!< MAC register group */ - ALL_MSC_REG = 22, /*!< MSC register group */ - ALL_PTP_REG = 33, /*!< PTP register group */ - ALL_DMA_REG = 44, /*!< DMA register group */ -}enet_registers_type_enum; - -/* dma direction select */ -typedef enum -{ - ENET_DMA_TX = ENET_DMA_STAT_TP, /*!< DMA transmit direction */ - ENET_DMA_RX = ENET_DMA_STAT_RP /*!< DMA receive direction */ -}enet_dmadirection_enum; - -/* PHY operation direction select */ -typedef enum -{ - ENET_PHY_READ = (uint32_t)0x00000000, /*!< read PHY */ - ENET_PHY_WRITE = ENET_MAC_PHY_CTL_PW /*!< write PHY */ -}enet_phydirection_enum; - -/* register operation direction select */ -typedef enum -{ - ENET_REG_READ, /*!< read register */ - ENET_REG_WRITE /*!< write register */ -}enet_regdirection_enum; - -/* ENET MAC addresses */ -typedef enum -{ - ENET_MAC_ADDRESS0 = ((uint32_t)0x00000000), /*!< MAC address0 */ - ENET_MAC_ADDRESS1 = ((uint32_t)0x00000008), /*!< MAC address1 */ - ENET_MAC_ADDRESS2 = ((uint32_t)0x00000010), /*!< MAC address2 */ - ENET_MAC_ADDRESS3 = ((uint32_t)0x00000018) /*!< MAC address3 */ -}enet_macaddress_enum; - -/* descriptor information */ -typedef enum -{ - TXDESC_COLLISION_COUNT, /*!< the number of collisions occurred before the frame was transmitted */ - TXDESC_BUFFER_1_ADDR, /*!< transmit frame buffer 1 address */ - RXDESC_FRAME_LENGTH, /*!< the byte length of the received frame that was transferred to the buffer */ - RXDESC_BUFFER_1_SIZE, /*!< receive buffer 1 size */ - RXDESC_BUFFER_2_SIZE, /*!< receive buffer 2 size */ - RXDESC_BUFFER_1_ADDR /*!< receive frame buffer 1 address */ -}enet_descstate_enum; - -/* MSC counters preset mode */ -typedef enum -{ - ENET_MSC_PRESET_NONE = 0U, /*!< do not preset MSC counter */ - ENET_MSC_PRESET_HALF = ENET_MSC_CTL_PMC, /*!< preset all MSC counters to almost-half(0x7FFF FFF0) value */ - ENET_MSC_PRESET_FULL = ENET_MSC_CTL_PMC | ENET_MSC_CTL_AFHPM /*!< preset all MSC counters to almost-full(0xFFFF FFF0) value */ -}enet_msc_preset_enum; - -/* structure for initialization of the ENET */ -typedef struct -{ - uint32_t option_enable; /*!< select which function to configure */ - uint32_t forward_frame; /*!< frame forward related parameters */ - uint32_t dmabus_mode; /*!< DMA bus mode related parameters */ - uint32_t dma_maxburst; /*!< DMA max burst related parameters */ - uint32_t dma_arbitration; /*!< DMA Tx and Rx arbitration related parameters */ - uint32_t store_forward_mode; /*!< store forward mode related parameters */ - uint32_t dma_function; /*!< DMA control related parameters */ - uint32_t vlan_config; /*!< VLAN tag related parameters */ - uint32_t flow_control; /*!< flow control related parameters */ - uint32_t hashtable_high; /*!< hash list high 32-bit related parameters */ - uint32_t hashtable_low; /*!< hash list low 32-bit related parameters */ - uint32_t framesfilter_mode; /*!< frame filter control related parameters */ - uint32_t halfduplex_param; /*!< halfduplex related parameters */ - uint32_t timer_config; /*!< frame timer related parameters */ - uint32_t interframegap; /*!< inter frame gap related parameters */ -}enet_initpara_struct; - -/* structure for ENET DMA desciptors */ -typedef struct -{ - uint32_t status; /*!< status */ - uint32_t control_buffer_size; /*!< control and buffer1, buffer2 lengths */ - uint32_t buffer1_addr; /*!< buffer1 address pointer/timestamp low */ - uint32_t buffer2_next_desc_addr; /*!< buffer2 or next descriptor address pointer/timestamp high */ - -#ifdef SELECT_DESCRIPTORS_ENHANCED_MODE - uint32_t extended_status; /*!< extended status */ - uint32_t reserved; /*!< reserved */ - uint32_t timestamp_low; /*!< timestamp low */ - uint32_t timestamp_high; /*!< timestamp high */ -#endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */ - -} enet_descriptors_struct; - -/* structure of PTP system time */ -typedef struct -{ - uint32_t second; /*!< second of system time */ - uint32_t nanosecond; /*!< nanosecond of system time */ - uint32_t sign; /*!< sign of system time */ -}enet_ptp_systime_struct; - -/* mac_cfg register value */ -#define MAC_CFG_BOL(regval) (BITS(5,6) & ((uint32_t)(regval) << 5)) /*!< write value to ENET_MAC_CFG_BOL bit field */ -#define ENET_BACKOFFLIMIT_10 MAC_CFG_BOL(0) /*!< min (n, 10) */ -#define ENET_BACKOFFLIMIT_8 MAC_CFG_BOL(1) /*!< min (n, 8) */ -#define ENET_BACKOFFLIMIT_4 MAC_CFG_BOL(2) /*!< min (n, 4) */ -#define ENET_BACKOFFLIMIT_1 MAC_CFG_BOL(3) /*!< min (n, 1) */ - -#define MAC_CFG_IGBS(regval) (BITS(17,19) & ((uint32_t)(regval) << 17)) /*!< write value to ENET_MAC_CFG_IGBS bit field */ -#define ENET_INTERFRAMEGAP_96BIT MAC_CFG_IGBS(0) /*!< minimum 96 bit times */ -#define ENET_INTERFRAMEGAP_88BIT MAC_CFG_IGBS(1) /*!< minimum 88 bit times */ -#define ENET_INTERFRAMEGAP_80BIT MAC_CFG_IGBS(2) /*!< minimum 80 bit times */ -#define ENET_INTERFRAMEGAP_72BIT MAC_CFG_IGBS(3) /*!< minimum 72 bit times */ -#define ENET_INTERFRAMEGAP_64BIT MAC_CFG_IGBS(4) /*!< minimum 64 bit times */ -#define ENET_INTERFRAMEGAP_56BIT MAC_CFG_IGBS(5) /*!< minimum 56 bit times */ -#define ENET_INTERFRAMEGAP_48BIT MAC_CFG_IGBS(6) /*!< minimum 48 bit times */ -#define ENET_INTERFRAMEGAP_40BIT MAC_CFG_IGBS(7) /*!< minimum 40 bit times */ - -#define ENET_TYPEFRAME_CRC_DROP_ENABLE ENET_MAC_CFG_TFCD /*!< FCS field(last 4 bytes) of frame will be dropped before forwarding */ -#define ENET_TYPEFRAME_CRC_DROP_DISABLE ((uint32_t)0x00000000U) /*!< FCS field(last 4 bytes) of frame will not be dropped before forwarding */ -#define ENET_TYPEFRAME_CRC_DROP ENET_MAC_CFG_TFCD /*!< the function that FCS field(last 4 bytes) of frame will be dropped before forwarding */ - -#define ENET_WATCHDOG_ENABLE ((uint32_t)0x00000000U) /*!< the MAC allows no more than 2048 bytes of the frame being received */ -#define ENET_WATCHDOG_DISABLE ENET_MAC_CFG_WDD /*!< the MAC disables the watchdog timer on the receiver, and can receive frames of up to 16384 bytes */ - -#define ENET_JABBER_ENABLE ((uint32_t)0x00000000U) /*!< the maximum transmission byte is 2048 */ -#define ENET_JABBER_DISABLE ENET_MAC_CFG_JBD /*!< the maximum transmission byte can be 16384 */ - -#define ENET_CARRIERSENSE_ENABLE ((uint32_t)0x00000000U) /*!< the MAC transmitter generates carrier sense error and aborts the transmission */ -#define ENET_CARRIERSENSE_DISABLE ENET_MAC_CFG_CSD /*!< the MAC transmitter ignores the MII CRS signal during frame transmission in half-duplex mode */ - -#define ENET_SPEEDMODE_10M ((uint32_t)0x00000000U) /*!< 10 Mbit/s */ -#define ENET_SPEEDMODE_100M ENET_MAC_CFG_SPD /*!< 100 Mbit/s */ - -#define ENET_RECEIVEOWN_ENABLE ((uint32_t)0x00000000U) /*!< the MAC receives all packets that are given by the PHY while transmitting */ -#define ENET_RECEIVEOWN_DISABLE ENET_MAC_CFG_ROD /*!< the MAC disables the reception of frames in half-duplex mode */ - -#define ENET_LOOPBACKMODE_ENABLE ENET_MAC_CFG_LBM /*!< the MAC operates in loopback mode at the MII */ -#define ENET_LOOPBACKMODE_DISABLE ((uint32_t)0x00000000U) /*!< the MAC operates in normal mode */ - -#define ENET_MODE_FULLDUPLEX ENET_MAC_CFG_DPM /*!< full-duplex mode enable */ -#define ENET_MODE_HALFDUPLEX ((uint32_t)0x00000000U) /*!< half-duplex mode enable */ - -#define ENET_CHECKSUMOFFLOAD_ENABLE ENET_MAC_CFG_IPFCO /*!< IP frame checksum offload function enabled for received IP frame */ -#define ENET_CHECKSUMOFFLOAD_DISABLE ((uint32_t)0x00000000U) /*!< the checksum offload function in the receiver is disabled */ - -#define ENET_RETRYTRANSMISSION_ENABLE ((uint32_t)0x00000000U) /*!< the MAC attempts retries up to 16 times based on the settings of BOL*/ -#define ENET_RETRYTRANSMISSION_DISABLE ENET_MAC_CFG_RTD /*!< the MAC attempts only 1 transmission */ - -#define ENET_AUTO_PADCRC_DROP_ENABLE ENET_MAC_CFG_APCD /*!< the MAC strips the Pad/FCS field on received frames */ -#define ENET_AUTO_PADCRC_DROP_DISABLE ((uint32_t)0x00000000U) /*!< the MAC forwards all received frames without modify it */ -#define ENET_AUTO_PADCRC_DROP ENET_MAC_CFG_APCD /*!< the function of the MAC strips the Pad/FCS field on received frames */ - -#define ENET_DEFERRALCHECK_ENABLE ENET_MAC_CFG_DFC /*!< the deferral check function is enabled in the MAC */ -#define ENET_DEFERRALCHECK_DISABLE ((uint32_t)0x00000000U) /*!< the deferral check function is disabled */ - -/* mac_frmf register value */ -#define MAC_FRMF_PCFRM(regval) (BITS(6,7) & ((uint32_t)(regval) << 6)) /*!< write value to ENET_MAC_FRMF_PCFRM bit field */ -#define ENET_PCFRM_PREVENT_ALL MAC_FRMF_PCFRM(0) /*!< MAC prevents all control frames from reaching the application */ -#define ENET_PCFRM_PREVENT_PAUSEFRAME MAC_FRMF_PCFRM(1) /*!< MAC only forwards all other control frames except pause control frame */ -#define ENET_PCFRM_FORWARD_ALL MAC_FRMF_PCFRM(2) /*!< MAC forwards all control frames to application even if they fail the address filter */ -#define ENET_PCFRM_FORWARD_FILTERED MAC_FRMF_PCFRM(3) /*!< MAC forwards control frames that only pass the address filter */ - -#define ENET_RX_FILTER_DISABLE ENET_MAC_FRMF_FAR /*!< all received frame are forwarded to application */ -#define ENET_RX_FILTER_ENABLE ((uint32_t)0x00000000U) /*!< only the frame passed the filter can be forwarded to application */ - -#define ENET_SRC_FILTER_NORMAL_ENABLE ENET_MAC_FRMF_SAFLT /*!< filter source address */ -#define ENET_SRC_FILTER_INVERSE_ENABLE (ENET_MAC_FRMF_SAFLT | ENET_MAC_FRMF_SAIFLT) /*!< inverse source address filtering result */ -#define ENET_SRC_FILTER_DISABLE ((uint32_t)0x00000000U) /*!< source address function in filter disable */ -#define ENET_SRC_FILTER ENET_MAC_FRMF_SAFLT /*!< filter source address function */ -#define ENET_SRC_FILTER_INVERSE ENET_MAC_FRMF_SAIFLT /*!< inverse source address filtering result function */ - -#define ENET_BROADCASTFRAMES_ENABLE ((uint32_t)0x00000000U) /*!< the address filters pass all received broadcast frames */ -#define ENET_BROADCASTFRAMES_DISABLE ENET_MAC_FRMF_BFRMD /*!< the address filters filter all incoming broadcast frames */ - -#define ENET_DEST_FILTER_INVERSE_ENABLE ENET_MAC_FRMF_DAIFLT /*!< inverse DA filtering result */ -#define ENET_DEST_FILTER_INVERSE_DISABLE ((uint32_t)0x00000000U) /*!< not inverse DA filtering result */ -#define ENET_DEST_FILTER_INVERSE ENET_MAC_FRMF_DAIFLT /*!< inverse DA filtering result function */ - -#define ENET_PROMISCUOUS_ENABLE ENET_MAC_FRMF_PM /*!< promiscuous mode enabled */ -#define ENET_PROMISCUOUS_DISABLE ((uint32_t)0x00000000U) /*!< promiscuous mode disabled */ - -#define ENET_MULTICAST_FILTER_HASH_OR_PERFECT (ENET_MAC_FRMF_HMF | ENET_MAC_FRMF_HPFLT) /*!< pass multicast frames that match either the perfect or the hash filtering */ -#define ENET_MULTICAST_FILTER_HASH ENET_MAC_FRMF_HMF /*!< pass multicast frames that match the hash filtering */ -#define ENET_MULTICAST_FILTER_PERFECT ((uint32_t)0x00000000U) /*!< pass multicast frames that match the perfect filtering */ -#define ENET_MULTICAST_FILTER_NONE ENET_MAC_FRMF_MFD /*!< all multicast frames are passed */ -#define ENET_MULTICAST_FILTER_PASS ENET_MAC_FRMF_MFD /*!< pass all multicast frames function */ -#define ENET_MULTICAST_FILTER_HASH_MODE ENET_MAC_FRMF_HMF /*!< HASH multicast filter function */ -#define ENET_FILTER_MODE_EITHER ENET_MAC_FRMF_HPFLT /*!< HASH or perfect filter function */ - -#define ENET_UNICAST_FILTER_EITHER (ENET_MAC_FRMF_HUF | ENET_MAC_FRMF_HPFLT) /*!< pass unicast frames that match either the perfect or the hash filtering */ -#define ENET_UNICAST_FILTER_HASH ENET_MAC_FRMF_HUF /*!< pass unicast frames that match the hash filtering */ -#define ENET_UNICAST_FILTER_PERFECT ((uint32_t)0x00000000U) /*!< pass unicast frames that match the perfect filtering */ -#define ENET_UNICAST_FILTER_HASH_MODE ENET_MAC_FRMF_HUF /*!< HASH unicast filter function */ - -/* mac_phy_ctl register value */ -#define MAC_PHY_CTL_CLR(regval) (BITS(2,4) & ((uint32_t)(regval) << 2)) /*!< write value to ENET_MAC_PHY_CTL_CLR bit field */ -#define ENET_MDC_HCLK_DIV42 MAC_PHY_CTL_CLR(0) /*!< HCLK:60-100 MHz; MDC clock= HCLK/42 */ -#define ENET_MDC_HCLK_DIV62 MAC_PHY_CTL_CLR(1) /*!< HCLK:100-120 MHz; MDC clock= HCLK/62 */ -#define ENET_MDC_HCLK_DIV16 MAC_PHY_CTL_CLR(2) /*!< HCLK:20-35 MHz; MDC clock= HCLK/16 */ -#define ENET_MDC_HCLK_DIV26 MAC_PHY_CTL_CLR(3) /*!< HCLK:35-60 MHz; MDC clock= HCLK/26 */ - -#define MAC_PHY_CTL_PR(regval) (BITS(6,10) & ((uint32_t)(regval) << 6)) /*!< write value to ENET_MAC_PHY_CTL_PR bit field */ - -#define MAC_PHY_CTL_PA(regval) (BITS(11,15) & ((uint32_t)(regval) << 11)) /*!< write value to ENET_MAC_PHY_CTL_PA bit field */ - -/* mac_phy_data register value */ -#define MAC_PHY_DATA_PD(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_MAC_PHY_DATA_PD bit field */ - -/* mac_fctl register value */ -#define MAC_FCTL_PLTS(regval) (BITS(4,5) & ((uint32_t)(regval) << 4)) /*!< write value to ENET_MAC_FCTL_PLTS bit field */ -#define ENET_PAUSETIME_MINUS4 MAC_FCTL_PLTS(0) /*!< pause time minus 4 slot times */ -#define ENET_PAUSETIME_MINUS28 MAC_FCTL_PLTS(1) /*!< pause time minus 28 slot times */ -#define ENET_PAUSETIME_MINUS144 MAC_FCTL_PLTS(2) /*!< pause time minus 144 slot times */ -#define ENET_PAUSETIME_MINUS256 MAC_FCTL_PLTS(3) /*!< pause time minus 256 slot times */ - -#define ENET_ZERO_QUANTA_PAUSE_ENABLE ((uint32_t)0x00000000U) /*!< enable the automatic zero-quanta generation function */ -#define ENET_ZERO_QUANTA_PAUSE_DISABLE ENET_MAC_FCTL_DZQP /*!< disable the automatic zero-quanta generation function */ -#define ENET_ZERO_QUANTA_PAUSE ENET_MAC_FCTL_DZQP /*!< the automatic zero-quanta generation function */ - -#define ENET_MAC0_AND_UNIQUE_ADDRESS_PAUSEDETECT ENET_MAC_FCTL_UPFDT /*!< besides the unique multicast address, MAC also use the MAC0 address to detect pause frame */ -#define ENET_UNIQUE_PAUSEDETECT ((uint32_t)0x00000000U) /*!< only the unique multicast address for pause frame which is specified in IEEE802.3 can be detected */ - -#define ENET_RX_FLOWCONTROL_ENABLE ENET_MAC_FCTL_RFCEN /*!< enable decoding function for the received pause frame and process it */ -#define ENET_RX_FLOWCONTROL_DISABLE ((uint32_t)0x00000000U) /*!< decode function for pause frame is disabled */ -#define ENET_RX_FLOWCONTROL ENET_MAC_FCTL_RFCEN /*!< decoding function for the received pause frame and process it */ - -#define ENET_TX_FLOWCONTROL_ENABLE ENET_MAC_FCTL_TFCEN /*!< enable the flow control operation in the MAC */ -#define ENET_TX_FLOWCONTROL_DISABLE ((uint32_t)0x00000000U) /*!< disable the flow control operation in the MAC */ -#define ENET_TX_FLOWCONTROL ENET_MAC_FCTL_TFCEN /*!< the flow control operation in the MAC */ - -#define ENET_BACK_PRESSURE_ENABLE ENET_MAC_FCTL_FLCBBKPA /*!< enable the back pressure operation in the MAC */ -#define ENET_BACK_PRESSURE_DISABLE ((uint32_t)0x00000000U) /*!< disable the back pressure operation in the MAC */ -#define ENET_BACK_PRESSURE ENET_MAC_FCTL_FLCBBKPA /*!< the back pressure operation in the MAC */ - -#define MAC_FCTL_PTM(regval) (BITS(16,31) & ((uint32_t)(regval) << 16)) /*!< write value to ENET_MAC_FCTL_PTM bit field */ -/* mac_vlt register value */ -#define MAC_VLT_VLTI(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_MAC_VLT_VLTI bit field */ - -#define ENET_VLANTAGCOMPARISON_12BIT ENET_MAC_VLT_VLTC /*!< only low 12 bits of the VLAN tag are used for comparison */ -#define ENET_VLANTAGCOMPARISON_16BIT ((uint32_t)0x00000000U) /*!< all 16 bits of the VLAN tag are used for comparison */ - -/* mac_wum register value */ -#define ENET_WUM_FLAG_WUFFRPR ENET_MAC_WUM_WUFFRPR /*!< wakeup frame filter register poniter reset */ -#define ENET_WUM_FLAG_WUFR ENET_MAC_WUM_WUFR /*!< wakeup frame received */ -#define ENET_WUM_FLAG_MPKR ENET_MAC_WUM_MPKR /*!< magic packet received */ -#define ENET_WUM_POWER_DOWN ENET_MAC_WUM_PWD /*!< power down mode */ -#define ENET_WUM_MAGIC_PACKET_FRAME ENET_MAC_WUM_MPEN /*!< enable a wakeup event due to magic packet reception */ -#define ENET_WUM_WAKE_UP_FRAME ENET_MAC_WUM_WFEN /*!< enable a wakeup event due to wakeup frame reception */ -#define ENET_WUM_GLOBAL_UNICAST ENET_MAC_WUM_GU /*!< any received unicast frame passed filter is considered to be a wakeup frame */ - -/* mac_dbg register value */ -#define ENET_MAC_RECEIVER_NOT_IDLE ENET_MAC_DBG_MRNI /*!< MAC receiver is not in idle state */ -#define ENET_RX_ASYNCHRONOUS_FIFO_STATE ENET_MAC_DBG_RXAFS /*!< Rx asynchronous FIFO status */ -#define ENET_RXFIFO_WRITING ENET_MAC_DBG_RXFW /*!< RxFIFO is doing write operation */ -#define ENET_RXFIFO_READ_STATUS ENET_MAC_DBG_RXFRS /*!< RxFIFO read operation status */ -#define ENET_RXFIFO_STATE ENET_MAC_DBG_RXFS /*!< RxFIFO state */ -#define ENET_MAC_TRANSMITTER_NOT_IDLE ENET_MAC_DBG_MTNI /*!< MAC transmitter is not in idle state */ -#define ENET_MAC_TRANSMITTER_STATUS ENET_MAC_DBG_SOMT /*!< status of MAC transmitter */ -#define ENET_PAUSE_CONDITION_STATUS ENET_MAC_DBG_PCS /*!< pause condition status */ -#define ENET_TXFIFO_READ_STATUS ENET_MAC_DBG_TXFRS /*!< TxFIFO read operation status */ -#define ENET_TXFIFO_WRITING ENET_MAC_DBG_TXFW /*!< TxFIFO is doing write operation */ -#define ENET_TXFIFO_NOT_EMPTY ENET_MAC_DBG_TXFNE /*!< TxFIFO is not empty */ -#define ENET_TXFIFO_FULL ENET_MAC_DBG_TXFF /*!< TxFIFO is full */ - -#define GET_MAC_DBG_RXAFS(regval) GET_BITS((regval),1,2) /*!< get value of ENET_MAC_DBG_RXAFS bit field */ - -#define GET_MAC_DBG_RXFRS(regval) GET_BITS((regval),5,6) /*!< get value of ENET_MAC_DBG_RXFRS bit field */ - -#define GET_MAC_DBG_RXFS(regval) GET_BITS((regval),8,9) /*!< get value of ENET_MAC_DBG_RXFS bit field */ - -#define GET_MAC_DBG_SOMT(regval) GET_BITS((regval),17,18) /*!< get value of ENET_MAC_DBG_SOMT bit field */ - -#define GET_MAC_DBG_TXFRS(regval) GET_BITS((regval),20,21) /*!< get value of ENET_MAC_DBG_TXFRS bit field */ - -/* mac_addr0h register value */ -#define MAC_ADDR0H_ADDR0H(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_MAC_ADDR0H_ADDR0H bit field */ - -/* mac_addrxh register value, x = 1,2,3 */ -#define MAC_ADDR123H_ADDR123H(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_MAC_ADDRxH_ADDRxH(x=1,2,3) bit field */ - -#define ENET_ADDRESS_MASK_BYTE0 BIT(24) /*!< low register bits [7:0] */ -#define ENET_ADDRESS_MASK_BYTE1 BIT(25) /*!< low register bits [15:8] */ -#define ENET_ADDRESS_MASK_BYTE2 BIT(26) /*!< low register bits [23:16] */ -#define ENET_ADDRESS_MASK_BYTE3 BIT(27) /*!< low register bits [31:24] */ -#define ENET_ADDRESS_MASK_BYTE4 BIT(28) /*!< high register bits [7:0] */ -#define ENET_ADDRESS_MASK_BYTE5 BIT(29) /*!< high register bits [15:8] */ - -#define ENET_ADDRESS_FILTER_SA BIT(30) /*!< use MAC address[47:0] is to compare with the SA fields of the received frame */ -#define ENET_ADDRESS_FILTER_DA ((uint32_t)0x00000000) /*!< use MAC address[47:0] is to compare with the DA fields of the received frame */ - -/* mac_fcth register value */ -#define MAC_FCTH_RFA(regval) ((BITS(0,2) & ((uint32_t)(regval) << 0))<<8) /*!< write value to ENET_MAC_FCTH_RFA bit field */ -#define ENET_ACTIVE_THRESHOLD_256BYTES MAC_FCTH_RFA(0) /*!< threshold level is 256 bytes */ -#define ENET_ACTIVE_THRESHOLD_512BYTES MAC_FCTH_RFA(1) /*!< threshold level is 512 bytes */ -#define ENET_ACTIVE_THRESHOLD_768BYTES MAC_FCTH_RFA(2) /*!< threshold level is 768 bytes */ -#define ENET_ACTIVE_THRESHOLD_1024BYTES MAC_FCTH_RFA(3) /*!< threshold level is 1024 bytes */ -#define ENET_ACTIVE_THRESHOLD_1280BYTES MAC_FCTH_RFA(4) /*!< threshold level is 1280 bytes */ -#define ENET_ACTIVE_THRESHOLD_1536BYTES MAC_FCTH_RFA(5) /*!< threshold level is 1536 bytes */ -#define ENET_ACTIVE_THRESHOLD_1792BYTES MAC_FCTH_RFA(6) /*!< threshold level is 1792 bytes */ - -#define MAC_FCTH_RFD(regval) ((BITS(4,6) & ((uint32_t)(regval) << 4))<<8) /*!< write value to ENET_MAC_FCTH_RFD bit field */ -#define ENET_DEACTIVE_THRESHOLD_256BYTES MAC_FCTH_RFD(0) /*!< threshold level is 256 bytes */ -#define ENET_DEACTIVE_THRESHOLD_512BYTES MAC_FCTH_RFD(1) /*!< threshold level is 512 bytes */ -#define ENET_DEACTIVE_THRESHOLD_768BYTES MAC_FCTH_RFD(2) /*!< threshold level is 768 bytes */ -#define ENET_DEACTIVE_THRESHOLD_1024BYTES MAC_FCTH_RFD(3) /*!< threshold level is 1024 bytes */ -#define ENET_DEACTIVE_THRESHOLD_1280BYTES MAC_FCTH_RFD(4) /*!< threshold level is 1280 bytes */ -#define ENET_DEACTIVE_THRESHOLD_1536BYTES MAC_FCTH_RFD(5) /*!< threshold level is 1536 bytes */ -#define ENET_DEACTIVE_THRESHOLD_1792BYTES MAC_FCTH_RFD(6) /*!< threshold level is 1792 bytes */ - -/* msc_ctl register value */ -#define ENET_MSC_COUNTER_STOP_ROLLOVER ENET_MSC_CTL_CTSR /*!< counter stop rollover */ -#define ENET_MSC_RESET_ON_READ ENET_MSC_CTL_RTOR /*!< reset on read */ -#define ENET_MSC_COUNTERS_FREEZE ENET_MSC_CTL_MCFZ /*!< MSC counter freeze */ - -/* ptp_tsctl register value */ -#define PTP_TSCTL_CKNT(regval) (BITS(16,17) & ((uint32_t)(regval) << 16)) /*!< write value to ENET_PTP_TSCTL_CKNT bit field */ - -#define ENET_RXTX_TIMESTAMP ENET_PTP_TSCTL_TMSEN /*!< enable timestamp function for transmit and receive frames */ -#define ENET_PTP_TIMESTAMP_INT ENET_PTP_TSCTL_TMSITEN /*!< timestamp interrupt trigger enable */ -#define ENET_ALL_RX_TIMESTAMP ENET_PTP_TSCTL_ARFSEN /*!< all received frames are taken snapshot */ -#define ENET_NONTYPE_FRAME_SNAPSHOT ENET_PTP_TSCTL_ESEN /*!< take snapshot when received non type frame */ -#define ENET_IPV6_FRAME_SNAPSHOT ENET_PTP_TSCTL_IP6SEN /*!< take snapshot for IPv6 frame */ -#define ENET_IPV4_FRAME_SNAPSHOT ENET_PTP_TSCTL_IP4SEN /*!< take snapshot for IPv4 frame */ -#define ENET_PTP_FRAME_USE_MACADDRESS_FILTER ENET_PTP_TSCTL_MAFEN /*!< enable MAC address1-3 to filter the PTP frame */ - -/* ptp_ssinc register value */ -#define PTP_SSINC_STMSSI(regval) (BITS(0,7) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_PTP_SSINC_STMSSI bit field */ - -/* ptp_tsl register value */ -#define GET_PTP_TSL_STMSS(regval) GET_BITS((uint32_t)(regval),0,30) /*!< get value of ENET_PTP_TSL_STMSS bit field */ - -#define ENET_PTP_TIME_POSITIVE ((uint32_t)0x00000000) /*!< time value is positive */ -#define ENET_PTP_TIME_NEGATIVE ENET_PTP_TSL_STS /*!< time value is negative */ - -#define GET_PTP_TSL_STS(regval) (((regval) & BIT(31)) >> (31U)) /*!< get value of ENET_PTP_TSL_STS bit field */ - -/* ptp_tsul register value */ -#define PTP_TSUL_TMSUSS(regval) (BITS(0,30) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_PTP_TSUL_TMSUSS bit field */ - -#define ENET_PTP_ADD_TO_TIME ((uint32_t)0x00000000) /*!< timestamp update value is added to system time */ -#define ENET_PTP_SUBSTRACT_FROM_TIME ENET_PTP_TSUL_TMSUPNS /*!< timestamp update value is subtracted from system time */ - -/* ptp_ppsctl register value */ -#define PTP_PPSCTL_PPSOFC(regval) (BITS(0,3) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_PTP_PPSCTL_PPSOFC bit field */ -#define ENET_PPSOFC_1HZ PTP_PPSCTL_PPSOFC(0) /*!< PPS output 1Hz frequency */ -#define ENET_PPSOFC_2HZ PTP_PPSCTL_PPSOFC(1) /*!< PPS output 2Hz frequency */ -#define ENET_PPSOFC_4HZ PTP_PPSCTL_PPSOFC(2) /*!< PPS output 4Hz frequency */ -#define ENET_PPSOFC_8HZ PTP_PPSCTL_PPSOFC(3) /*!< PPS output 8Hz frequency */ -#define ENET_PPSOFC_16HZ PTP_PPSCTL_PPSOFC(4) /*!< PPS output 16Hz frequency */ -#define ENET_PPSOFC_32HZ PTP_PPSCTL_PPSOFC(5) /*!< PPS output 32Hz frequency */ -#define ENET_PPSOFC_64HZ PTP_PPSCTL_PPSOFC(6) /*!< PPS output 64Hz frequency */ -#define ENET_PPSOFC_128HZ PTP_PPSCTL_PPSOFC(7) /*!< PPS output 128Hz frequency */ -#define ENET_PPSOFC_256HZ PTP_PPSCTL_PPSOFC(8) /*!< PPS output 256Hz frequency */ -#define ENET_PPSOFC_512HZ PTP_PPSCTL_PPSOFC(9) /*!< PPS output 512Hz frequency */ -#define ENET_PPSOFC_1024HZ PTP_PPSCTL_PPSOFC(10) /*!< PPS output 1024Hz frequency */ -#define ENET_PPSOFC_2048HZ PTP_PPSCTL_PPSOFC(11) /*!< PPS output 2048Hz frequency */ -#define ENET_PPSOFC_4096HZ PTP_PPSCTL_PPSOFC(12) /*!< PPS output 4096Hz frequency */ -#define ENET_PPSOFC_8192HZ PTP_PPSCTL_PPSOFC(13) /*!< PPS output 8192Hz frequency */ -#define ENET_PPSOFC_16384HZ PTP_PPSCTL_PPSOFC(14) /*!< PPS output 16384Hz frequency */ -#define ENET_PPSOFC_32768HZ PTP_PPSCTL_PPSOFC(15) /*!< PPS output 32768Hz frequency */ - -/* dma_bctl register value */ -#define DMA_BCTL_DPSL(regval) (BITS(2,6) & ((uint32_t)(regval) << 2)) /*!< write value to ENET_DMA_BCTL_DPSL bit field */ -#define GET_DMA_BCTL_DPSL(regval) GET_BITS((regval),2,6) /*!< get value of ENET_DMA_BCTL_DPSL bit field */ - -#define ENET_ENHANCED_DESCRIPTOR ENET_DMA_BCTL_DFM /*!< enhanced mode descriptor */ -#define ENET_NORMAL_DESCRIPTOR ((uint32_t)0x00000000) /*!< normal mode descriptor */ - -#define DMA_BCTL_PGBL(regval) (BITS(8,13) & ((uint32_t)(regval) << 8)) /*!< write value to ENET_DMA_BCTL_PGBL bit field */ -#define ENET_PGBL_1BEAT DMA_BCTL_PGBL(1) /*!< maximum number of beats is 1 */ -#define ENET_PGBL_2BEAT DMA_BCTL_PGBL(2) /*!< maximum number of beats is 2 */ -#define ENET_PGBL_4BEAT DMA_BCTL_PGBL(4) /*!< maximum number of beats is 4 */ -#define ENET_PGBL_8BEAT DMA_BCTL_PGBL(8) /*!< maximum number of beats is 8 */ -#define ENET_PGBL_16BEAT DMA_BCTL_PGBL(16) /*!< maximum number of beats is 16 */ -#define ENET_PGBL_32BEAT DMA_BCTL_PGBL(32) /*!< maximum number of beats is 32 */ -#define ENET_PGBL_4xPGBL_4BEAT (DMA_BCTL_PGBL(1)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 4 */ -#define ENET_PGBL_4xPGBL_8BEAT (DMA_BCTL_PGBL(2)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 8 */ -#define ENET_PGBL_4xPGBL_16BEAT (DMA_BCTL_PGBL(4)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 16 */ -#define ENET_PGBL_4xPGBL_32BEAT (DMA_BCTL_PGBL(8)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 32 */ -#define ENET_PGBL_4xPGBL_64BEAT (DMA_BCTL_PGBL(16)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 64 */ -#define ENET_PGBL_4xPGBL_128BEAT (DMA_BCTL_PGBL(32)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats is 128 */ - -#define DMA_BCTL_RTPR(regval) (BITS(14,15) & ((uint32_t)(regval) << 14)) /*!< write value to ENET_DMA_BCTL_RTPR bit field */ -#define ENET_ARBITRATION_RXTX_1_1 DMA_BCTL_RTPR(0) /*!< receive and transmit priority ratio is 1:1*/ -#define ENET_ARBITRATION_RXTX_2_1 DMA_BCTL_RTPR(1) /*!< receive and transmit priority ratio is 2:1*/ -#define ENET_ARBITRATION_RXTX_3_1 DMA_BCTL_RTPR(2) /*!< receive and transmit priority ratio is 3:1 */ -#define ENET_ARBITRATION_RXTX_4_1 DMA_BCTL_RTPR(3) /*!< receive and transmit priority ratio is 4:1 */ -#define ENET_ARBITRATION_RXPRIORTX ENET_DMA_BCTL_DAB /*!< RxDMA has higher priority than TxDMA */ - -#define ENET_FIXED_BURST_ENABLE ENET_DMA_BCTL_FB /*!< AHB can only use SINGLE/INCR4/INCR8/INCR16 during start of normal burst transfers */ -#define ENET_FIXED_BURST_DISABLE ((uint32_t)0x00000000) /*!< AHB can use SINGLE/INCR burst transfer operations */ - -#define DMA_BCTL_RXDP(regval) (BITS(17,22) & ((uint32_t)(regval) << 17)) /*!< write value to ENET_DMA_BCTL_RXDP bit field */ -#define ENET_RXDP_1BEAT DMA_BCTL_RXDP(1) /*!< maximum number of beats 1 */ -#define ENET_RXDP_2BEAT DMA_BCTL_RXDP(2) /*!< maximum number of beats 2 */ -#define ENET_RXDP_4BEAT DMA_BCTL_RXDP(4) /*!< maximum number of beats 4 */ -#define ENET_RXDP_8BEAT DMA_BCTL_RXDP(8) /*!< maximum number of beats 8 */ -#define ENET_RXDP_16BEAT DMA_BCTL_RXDP(16) /*!< maximum number of beats 16 */ -#define ENET_RXDP_32BEAT DMA_BCTL_RXDP(32) /*!< maximum number of beats 32 */ -#define ENET_RXDP_4xPGBL_4BEAT (DMA_BCTL_RXDP(1)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 4 */ -#define ENET_RXDP_4xPGBL_8BEAT (DMA_BCTL_RXDP(2)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 8 */ -#define ENET_RXDP_4xPGBL_16BEAT (DMA_BCTL_RXDP(4)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 16 */ -#define ENET_RXDP_4xPGBL_32BEAT (DMA_BCTL_RXDP(8)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 32 */ -#define ENET_RXDP_4xPGBL_64BEAT (DMA_BCTL_RXDP(16)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 64 */ -#define ENET_RXDP_4xPGBL_128BEAT (DMA_BCTL_RXDP(32)|ENET_DMA_BCTL_FPBL) /*!< maximum number of beats 128 */ - -#define ENET_RXTX_DIFFERENT_PGBL ENET_DMA_BCTL_UIP /*!< RxDMA uses the RXDP[5:0], while TxDMA uses the PGBL[5:0] */ -#define ENET_RXTX_SAME_PGBL ((uint32_t)0x00000000) /*!< RxDMA/TxDMA uses PGBL[5:0] */ - -#define ENET_ADDRESS_ALIGN_ENABLE ENET_DMA_BCTL_AA /*!< enabled address-aligned */ -#define ENET_ADDRESS_ALIGN_DISABLE ((uint32_t)0x00000000) /*!< disable address-aligned */ - -#define ENET_MIXED_BURST_ENABLE ENET_DMA_BCTL_MB /*!< AHB master interface transfer burst length greater than 16 with INCR */ -#define ENET_MIXED_BURST_DISABLE ((uint32_t)0x00000000) /*!< AHB master interface only transfer fixed burst length with 16 and below */ - -/* dma_stat register value */ -#define GET_DMA_STAT_RP(regval) GET_BITS((uint32_t)(regval),17,19) /*!< get value of ENET_DMA_STAT_RP bit field */ -#define ENET_RX_STATE_STOPPED ((uint32_t)0x00000000) /*!< reset or stop rx command issued */ -#define ENET_RX_STATE_FETCHING BIT(17) /*!< fetching the Rx descriptor */ -#define ENET_RX_STATE_WAITING (BIT(17)|BIT(18)) /*!< waiting for receive packet */ -#define ENET_RX_STATE_SUSPENDED BIT(19) /*!< Rx descriptor unavailable */ -#define ENET_RX_STATE_CLOSING (BIT(17)|BIT(19)) /*!< closing receive descriptor */ -#define ENET_RX_STATE_QUEUING ENET_DMA_STAT_RP /*!< transferring the receive packet data from recevie buffer to host memory */ - -#define GET_DMA_STAT_TP(regval) GET_BITS((uint32_t)(regval),20,22) /*!< get value of ENET_DMA_STAT_TP bit field */ -#define ENET_TX_STATE_STOPPED ((uint32_t)0x00000000) /*!< reset or stop Tx Command issued */ -#define ENET_TX_STATE_FETCHING BIT(20) /*!< fetching the Tx descriptor */ -#define ENET_TX_STATE_WAITING BIT(21) /*!< waiting for status */ -#define ENET_TX_STATE_READING (BIT(20)|BIT(21)) /*!< reading the data from host memory buffer and queuing it to transmit buffer */ -#define ENET_TX_STATE_SUSPENDED (BIT(21)|BIT(22)) /*!< Tx descriptor unavailabe or transmit buffer underflow */ -#define ENET_TX_STATE_CLOSING ENET_DMA_STAT_TP /*!< closing Tx descriptor */ - -#define GET_DMA_STAT_EB(regval) GET_BITS((uint32_t)(regval),23,25) /*!< get value of ENET_DMA_STAT_EB bit field */ -#define ENET_ERROR_TXDATA_TRANSFER BIT(23) /*!< error during data transfer by TxDMA or RxDMA */ -#define ENET_ERROR_READ_TRANSFER BIT(24) /*!< error during write transfer or read transfer */ -#define ENET_ERROR_DESC_ACCESS BIT(25) /*!< error during descriptor or buffer access */ - -/* dma_ctl register value */ -#define DMA_CTL_RTHC(regval) (BITS(3,4) & ((uint32_t)(regval) << 3)) /*!< write value to ENET_DMA_CTL_RTHC bit field */ -#define ENET_RX_THRESHOLD_64BYTES DMA_CTL_RTHC(0) /*!< threshold level is 64 Bytes */ -#define ENET_RX_THRESHOLD_32BYTES DMA_CTL_RTHC(1) /*!< threshold level is 32 Bytes */ -#define ENET_RX_THRESHOLD_96BYTES DMA_CTL_RTHC(2) /*!< threshold level is 96 Bytes */ -#define ENET_RX_THRESHOLD_128BYTES DMA_CTL_RTHC(3) /*!< threshold level is 128 Bytes */ - -#define DMA_CTL_TTHC(regval) (BITS(14,16) & ((uint32_t)(regval) << 14)) /*!< write value to ENET_DMA_CTL_TTHC bit field */ -#define ENET_TX_THRESHOLD_64BYTES DMA_CTL_TTHC(0) /*!< threshold level is 64 Bytes */ -#define ENET_TX_THRESHOLD_128BYTES DMA_CTL_TTHC(1) /*!< threshold level is 128 Bytes */ -#define ENET_TX_THRESHOLD_192BYTES DMA_CTL_TTHC(2) /*!< threshold level is 192 Bytes */ -#define ENET_TX_THRESHOLD_256BYTES DMA_CTL_TTHC(3) /*!< threshold level is 256 Bytes */ -#define ENET_TX_THRESHOLD_40BYTES DMA_CTL_TTHC(4) /*!< threshold level is 40 Bytes */ -#define ENET_TX_THRESHOLD_32BYTES DMA_CTL_TTHC(5) /*!< threshold level is 32 Bytes */ -#define ENET_TX_THRESHOLD_24BYTES DMA_CTL_TTHC(6) /*!< threshold level is 24 Bytes */ -#define ENET_TX_THRESHOLD_16BYTES DMA_CTL_TTHC(7) /*!< threshold level is 16 Bytes */ - -#define ENET_TCPIP_CKSUMERROR_ACCEPT ENET_DMA_CTL_DTCERFD /*!< Rx frame with only payload error but no other errors will not be dropped */ -#define ENET_TCPIP_CKSUMERROR_DROP ((uint32_t)0x00000000) /*!< all error frames will be dropped when FERF = 0 */ - -#define ENET_RX_MODE_STOREFORWARD ENET_DMA_CTL_RSFD /*!< RxFIFO operates in store-and-forward mode */ -#define ENET_RX_MODE_CUTTHROUGH ((uint32_t)0x00000000) /*!< RxFIFO operates in cut-through mode */ - -#define ENET_FLUSH_RXFRAME_ENABLE ((uint32_t)0x00000000) /*!< RxDMA flushes all frames */ -#define ENET_FLUSH_RXFRAME_DISABLE ENET_DMA_CTL_DAFRF /*!< RxDMA does not flush any frames */ -#define ENET_NO_FLUSH_RXFRAME ENET_DMA_CTL_DAFRF /*!< RxDMA does not flush frames function */ - -#define ENET_TX_MODE_STOREFORWARD ENET_DMA_CTL_TSFD /*!< TxFIFO operates in store-and-forward mode */ -#define ENET_TX_MODE_CUTTHROUGH ((uint32_t)0x00000000) /*!< TxFIFO operates in cut-through mode */ - -#define ENET_FORWARD_ERRFRAMES_ENABLE (ENET_DMA_CTL_FERF<<2) /*!< all frame received with error except runt error are forwarded to memory */ -#define ENET_FORWARD_ERRFRAMES_DISABLE ((uint32_t)0x00000000) /*!< RxFIFO drop error frame */ -#define ENET_FORWARD_ERRFRAMES (ENET_DMA_CTL_FERF<<2) /*!< the function that all frame received with error except runt error are forwarded to memory */ - -#define ENET_FORWARD_UNDERSZ_GOODFRAMES_ENABLE (ENET_DMA_CTL_FUF<<2) /*!< forward undersized good frames */ -#define ENET_FORWARD_UNDERSZ_GOODFRAMES_DISABLE ((uint32_t)0x00000000) /*!< RxFIFO drops all frames whose length is less than 64 bytes */ -#define ENET_FORWARD_UNDERSZ_GOODFRAMES (ENET_DMA_CTL_FUF<<2) /*!< the function that forwarding undersized good frames */ - -#define ENET_SECONDFRAME_OPT_ENABLE ENET_DMA_CTL_OSF /*!< TxDMA controller operate on second frame mode enable*/ -#define ENET_SECONDFRAME_OPT_DISABLE ((uint32_t)0x00000000) /*!< TxDMA controller operate on second frame mode disable */ -#define ENET_SECONDFRAME_OPT ENET_DMA_CTL_OSF /*!< TxDMA controller operate on second frame function */ - -/* dma_mfbocnt register value */ -#define GET_DMA_MFBOCNT_MSFC(regval) GET_BITS((regval),0,15) /*!< get value of ENET_DMA_MFBOCNT_MSFC bit field */ - -#define GET_DMA_MFBOCNT_MSFA(regval) GET_BITS((regval),17,27) /*!< get value of ENET_DMA_MFBOCNT_MSFA bit field */ - -/* dma_rswdc register value */ -#define DMA_RSWDC_WDCFRS(regval) (BITS(0,7) & ((uint32_t)(regval) << 0)) /*!< write value to ENET_DMA_RSWDC_WDCFRS bit field */ - -/* dma tx descriptor tdes0 register value */ -#define TDES0_CONT(regval) (BITS(3,6) & ((uint32_t)(regval) << 3)) /*!< write value to ENET DMA TDES0 CONT bit field */ -#define GET_TDES0_COCNT(regval) GET_BITS((regval),3,6) /*!< get value of ENET DMA TDES0 CONT bit field */ - -#define TDES0_CM(regval) (BITS(22,23) & ((uint32_t)(regval) << 22)) /*!< write value to ENET DMA TDES0 CM bit field */ -#define ENET_CHECKSUM_DISABLE TDES0_CM(0) /*!< checksum insertion disabled */ -#define ENET_CHECKSUM_IPV4HEADER TDES0_CM(1) /*!< only IP header checksum calculation and insertion are enabled */ -#define ENET_CHECKSUM_TCPUDPICMP_SEGMENT TDES0_CM(2) /*!< TCP/UDP/ICMP checksum insertion calculated but pseudo-header */ -#define ENET_CHECKSUM_TCPUDPICMP_FULL TDES0_CM(3) /*!< TCP/UDP/ICMP checksum insertion fully calculated */ - -/* dma tx descriptor tdes1 register value */ -#define TDES1_TB1S(regval) (BITS(0,12) & ((uint32_t)(regval) << 0)) /*!< write value to ENET DMA TDES1 TB1S bit field */ - -#define TDES1_TB2S(regval) (BITS(16,28) & ((uint32_t)(regval) << 16)) /*!< write value to ENET DMA TDES1 TB2S bit field */ - -/* dma rx descriptor rdes0 register value */ -#define RDES0_FRML(regval) (BITS(16,29) & ((uint32_t)(regval) << 16)) /*!< write value to ENET DMA RDES0 FRML bit field */ -#define GET_RDES0_FRML(regval) GET_BITS((regval),16,29) /*!< get value of ENET DMA RDES0 FRML bit field */ - -/* dma rx descriptor rdes1 register value */ -#define ENET_RECEIVE_COMPLETE_INT_ENABLE ((uint32_t)0x00000000U) /*!< RS bit immediately set after Rx completed */ -#define ENET_RECEIVE_COMPLETE_INT_DISABLE ENET_RDES1_DINTC /*!< RS bit not immediately set after Rx completed */ - -#define GET_RDES1_RB1S(regval) GET_BITS((regval),0,12) /*!< get value of ENET DMA RDES1 RB1S bit field */ - -#define GET_RDES1_RB2S(regval) GET_BITS((regval),16,28) /*!< get value of ENET DMA RDES1 RB2S bit field */ - -/* dma rx descriptor rdes4 register value */ -#define RDES4_IPPLDT(regval) (BITS(0,2) & ((uint32_t)(regval) << 0)) /*!< write value to ENET DMA RDES4 IPPLDT bit field */ -#define GET_RDES4_IPPLDT(regval) GET_BITS((regval),0,2) /*!< get value of ENET DMA RDES4 IPPLDT bit field */ - -#define RDES4_PTPMT(regval) (BITS(8,11) & ((uint32_t)(regval) << 8)) /*!< write value to ENET DMA RDES4 PTPMT bit field */ -#define GET_RDES4_PTPMT(regval) GET_BITS((regval),8,11) /*!< get value of ENET DMA RDES4 PTPMT bit field */ - -/* ENET register mask value */ -#define MAC_CFG_MASK ((uint32_t)0xFD30810FU) /*!< ENET_MAC_CFG register mask */ -#define MAC_FCTL_MASK ((uint32_t)0x0000FF41U) /*!< ENET_MAC_FCTL register mask */ -#define DMA_CTL_MASK ((uint32_t)0xF8DE3F23U) /*!< ENET_DMA_CTL register mask */ -#define DMA_BCTL_MASK ((uint32_t)0xF800007DU) /*!< ENET_DMA_BCTL register mask */ -#define ENET_MSC_PRESET_MASK (~(ENET_MSC_CTL_PMC | ENET_MSC_CTL_AFHPM)) /*!< ENET_MSC_CTL preset mask */ - -#ifdef SELECT_DESCRIPTORS_ENHANCED_MODE -#define ETH_DMATXDESC_SIZE 0x20U /*!< TxDMA enhanced descriptor size */ -#define ETH_DMARXDESC_SIZE 0x20U /*!< RxDMA enhanced descriptor size */ -#else -#define ETH_DMATXDESC_SIZE 0x10U /*!< TxDMA descriptor size */ -#define ETH_DMARXDESC_SIZE 0x10U /*!< RxDMA descriptor size */ -#endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */ - - -typedef enum{ - ENET_CKNT_ORDINARY = PTP_TSCTL_CKNT(0), /*!< type of ordinary clock node type for timestamp */ - ENET_CKNT_BOUNDARY = PTP_TSCTL_CKNT(1), /*!< type of boundary clock node type for timestamp */ - ENET_CKNT_END_TO_END = PTP_TSCTL_CKNT(2), /*!< type of end-to-end transparent clock node type for timestamp */ - ENET_CKNT_PEER_TO_PEER = PTP_TSCTL_CKNT(3), /*!< type of peer-to-peer transparent clock node type for timestamp */ - ENET_PTP_SYSTIME_INIT = ENET_PTP_TSCTL_TMSSTI, /*!< timestamp initialize */ - ENET_PTP_SYSTIME_UPDATE = ENET_PTP_TSCTL_TMSSTU, /*!< timestamp update */ - ENET_PTP_ADDEND_UPDATE = ENET_PTP_TSCTL_TMSARU, /*!< addend register update */ - ENET_PTP_FINEMODE = (int32_t)(ENET_PTP_TSCTL_TMSFCU| BIT(31)), /*!< the system timestamp uses the fine method for updating */ - ENET_PTP_COARSEMODE = ENET_PTP_TSCTL_TMSFCU, /*!< the system timestamp uses the coarse method for updating */ - ENET_SUBSECOND_DIGITAL_ROLLOVER = (int32_t)(ENET_PTP_TSCTL_SCROM | BIT(31)), /*!< digital rollover mode */ - ENET_SUBSECOND_BINARY_ROLLOVER = ENET_PTP_TSCTL_SCROM, /*!< binary rollover mode */ - ENET_SNOOPING_PTP_VERSION_2 = (int32_t)(ENET_PTP_TSCTL_PFSV| BIT(31)), /*!< version 2 */ - ENET_SNOOPING_PTP_VERSION_1 = ENET_PTP_TSCTL_PFSV, /*!< version 1 */ - ENET_EVENT_TYPE_MESSAGES_SNAPSHOT = (int32_t)(ENET_PTP_TSCTL_ETMSEN| BIT(31)), /*!< only event type messages are taken snapshot */ - ENET_ALL_TYPE_MESSAGES_SNAPSHOT = ENET_PTP_TSCTL_ETMSEN, /*!< all type messages are taken snapshot except announce, management and signaling message */ - ENET_MASTER_NODE_MESSAGE_SNAPSHOT = (int32_t)(ENET_PTP_TSCTL_MNMSEN| BIT(31)), /*!< snapshot is only take for master node message */ - ENET_SLAVE_NODE_MESSAGE_SNAPSHOT = ENET_PTP_TSCTL_MNMSEN, /*!< snapshot is only taken for slave node message */ -}enet_ptp_function_enum; - - -/* ENET remote wake-up frame register length */ -#define ETH_WAKEUP_REGISTER_LENGTH 8U /*!< remote wake-up frame register length */ - -/* ENET frame size */ -#define ENET_MAX_FRAME_SIZE 1524U /*!< header + frame_extra + payload + CRC */ - -/* ENET delay timeout */ -#define ENET_DELAY_TO ((uint32_t)0x0004FFFFU) /*!< ENET delay timeout */ -#define ENET_RESET_TO ((uint32_t)0x000004FFU) /*!< ENET reset timeout */ - - - -/* function declarations */ -/* main function */ -/* deinitialize the ENET, and reset structure parameters for ENET initialization */ -void enet_deinit(void); -/* configure the parameters which are usually less cared for initialization */ -void enet_initpara_config(enet_option_enum option, uint32_t para); -/* initialize ENET peripheral with generally concerned parameters and the less cared parameters */ -ErrStatus enet_init(enet_mediamode_enum mediamode, enet_chksumconf_enum checksum, enet_frmrecept_enum recept); -/* reset all core internal registers located in CLK_TX and CLK_RX */ -ErrStatus enet_software_reset(void); -/* check receive frame valid and return frame size */ -uint32_t enet_rxframe_size_get(void); -/* initialize the dma tx/rx descriptors's parameters in chain mode */ -void enet_descriptors_chain_init(enet_dmadirection_enum direction); -/* initialize the dma tx/rx descriptors's parameters in ring mode */ -void enet_descriptors_ring_init(enet_dmadirection_enum direction); -/* handle current received frame data to application buffer */ -ErrStatus enet_frame_receive(uint8_t *buffer, uint32_t bufsize); -/* handle current received frame but without data copy to application buffer */ -#define ENET_NOCOPY_FRAME_RECEIVE() enet_frame_receive(NULL, 0U) -/* handle application buffer data to transmit it */ -ErrStatus enet_frame_transmit(uint8_t *buffer, uint32_t length); -/* handle current transmit frame but without data copy from application buffer */ -#define ENET_NOCOPY_FRAME_TRANSMIT(len) enet_frame_transmit(NULL, (len)) -/* configure the transmit IP frame checksum offload calculation and insertion */ -ErrStatus enet_transmit_checksum_config(enet_descriptors_struct *desc, uint32_t checksum); -/* ENET Tx and Rx function enable (include MAC and DMA module) */ -void enet_enable(void); -/* ENET Tx and Rx function disable (include MAC and DMA module) */ -void enet_disable(void); -/* configure MAC address */ -void enet_mac_address_set(enet_macaddress_enum mac_addr, uint8_t paddr[]); -/* get MAC address */ -ErrStatus enet_mac_address_get(enet_macaddress_enum mac_addr, uint8_t paddr[], uint8_t bufsize); - -/* get the ENET MAC/MSC/PTP/DMA status flag */ -FlagStatus enet_flag_get(enet_flag_enum enet_flag); -/* clear the ENET DMA status flag */ -void enet_flag_clear(enet_flag_clear_enum enet_flag); -/* enable ENET MAC/MSC/DMA interrupt */ -void enet_interrupt_enable(enet_int_enum enet_int); -/* disable ENET MAC/MSC/DMA interrupt */ -void enet_interrupt_disable(enet_int_enum enet_int); -/* get ENET MAC/MSC/DMA interrupt flag */ -FlagStatus enet_interrupt_flag_get(enet_int_flag_enum int_flag); -/* clear ENET DMA interrupt flag */ -void enet_interrupt_flag_clear(enet_int_flag_clear_enum int_flag_clear); - -/* MAC function */ -/* ENET Tx function enable (include MAC and DMA module) */ -void enet_tx_enable(void); -/* ENET Tx function disable (include MAC and DMA module) */ -void enet_tx_disable(void); -/* ENET Rx function enable (include MAC and DMA module) */ -void enet_rx_enable(void); -/* ENET Rx function disable (include MAC and DMA module) */ -void enet_rx_disable(void); -/* put registers value into the application buffer */ -void enet_registers_get(enet_registers_type_enum type, uint32_t *preg, uint32_t num); -/* get the enet debug status from the debug register */ -uint32_t enet_debug_status_get(uint32_t mac_debug); -/* enable the MAC address filter */ -void enet_address_filter_enable(enet_macaddress_enum mac_addr); -/* disable the MAC address filter */ -void enet_address_filter_disable(enet_macaddress_enum mac_addr); -/* configure the MAC address filter */ -void enet_address_filter_config(enet_macaddress_enum mac_addr, uint32_t addr_mask, uint32_t filter_type); -/* PHY interface configuration (configure SMI clock and reset PHY chip) */ -ErrStatus enet_phy_config(void); -/* write to/read from a PHY register */ -ErrStatus enet_phy_write_read(enet_phydirection_enum direction, uint16_t phy_address, uint16_t phy_reg, uint16_t *pvalue); -/* enable the loopback function of phy chip */ -ErrStatus enet_phyloopback_enable(void); -/* disable the loopback function of phy chip */ -ErrStatus enet_phyloopback_disable(void); -/* enable ENET forward feature */ -void enet_forward_feature_enable(uint32_t feature); -/* disable ENET forward feature */ -void enet_forward_feature_disable(uint32_t feature); -/* enable ENET fliter feature */ -void enet_fliter_feature_enable(uint32_t feature); -/* disable ENET fliter feature */ -void enet_fliter_feature_disable(uint32_t feature); - -/* flow control function */ -/* generate the pause frame, ENET will send pause frame after enable transmit flow control */ -ErrStatus enet_pauseframe_generate(void); -/* configure the pause frame detect type */ -void enet_pauseframe_detect_config(uint32_t detect); -/* configure the pause frame parameters */ -void enet_pauseframe_config(uint32_t pausetime, uint32_t pause_threshold); -/* configure the threshold of the flow control(deactive and active threshold) */ -void enet_flowcontrol_threshold_config(uint32_t deactive, uint32_t active); -/* enable ENET flow control feature */ -void enet_flowcontrol_feature_enable(uint32_t feature); -/* disable ENET flow control feature */ -void enet_flowcontrol_feature_disable(uint32_t feature); - -/* DMA function */ -/* get the dma transmit/receive process state */ -uint32_t enet_dmaprocess_state_get(enet_dmadirection_enum direction); -/* poll the dma transmission/reception enable */ -void enet_dmaprocess_resume(enet_dmadirection_enum direction); -/* check and recover the Rx process */ -void enet_rxprocess_check_recovery(void); -/* flush the ENET transmit fifo, and wait until the flush operation completes */ -ErrStatus enet_txfifo_flush(void); -/* get the transmit/receive address of current descriptor, or current buffer, or descriptor table */ -uint32_t enet_current_desc_address_get(enet_desc_reg_enum addr_get); -/* get the Tx or Rx descriptor information */ -uint32_t enet_desc_information_get(enet_descriptors_struct *desc, enet_descstate_enum info_get); -/* get the number of missed frames during receiving */ -void enet_missed_frame_counter_get(uint32_t *rxfifo_drop, uint32_t *rxdma_drop); - -/* descriptor function */ -/* get the bit flag of ENET dma descriptor */ -FlagStatus enet_desc_flag_get(enet_descriptors_struct *desc, uint32_t desc_flag); -/* set the bit flag of ENET dma tx descriptor */ -void enet_desc_flag_set(enet_descriptors_struct *desc, uint32_t desc_flag); -/* clear the bit flag of ENET dma tx descriptor */ -void enet_desc_flag_clear(enet_descriptors_struct *desc, uint32_t desc_flag); -/* when receiving the completed, set RS bit in ENET_DMA_STAT register will immediately set */ -void enet_rx_desc_immediate_receive_complete_interrupt(enet_descriptors_struct *desc); -/* when receiving the completed, set RS bit in ENET_DMA_STAT register will is set after a configurable delay time */ -void enet_rx_desc_delay_receive_complete_interrupt(enet_descriptors_struct *desc, uint32_t delay_time); -/* drop current receive frame */ -void enet_rxframe_drop(void); -/* enable DMA feature */ -void enet_dma_feature_enable(uint32_t feature); -/* disable DMA feature */ -void enet_dma_feature_disable(uint32_t feature); - - -/* special enhanced mode function */ -#ifdef SELECT_DESCRIPTORS_ENHANCED_MODE -/* get the bit of extended status flag in ENET DMA descriptor */ -uint32_t enet_rx_desc_enhanced_status_get(enet_descriptors_struct *desc, uint32_t desc_status); -/* configure descriptor to work in enhanced mode */ -void enet_desc_select_enhanced_mode(void); -/* initialize the dma Tx/Rx descriptors's parameters in enhanced chain mode with ptp function */ -void enet_ptp_enhanced_descriptors_chain_init(enet_dmadirection_enum direction); -/* initialize the dma Tx/Rx descriptors's parameters in enhanced ring mode with ptp function */ -void enet_ptp_enhanced_descriptors_ring_init(enet_dmadirection_enum direction); -/* receive a packet data with timestamp values to application buffer, when the DMA is in enhanced mode */ -ErrStatus enet_ptpframe_receive_enhanced_mode(uint8_t *buffer, uint32_t bufsize, uint32_t timestamp[]); -/* handle current received frame but without data copy to application buffer in PTP enhanced mode */ -#define ENET_NOCOPY_PTPFRAME_RECEIVE_ENHANCED_MODE(ptr) enet_ptpframe_receive_enhanced_mode(NULL, 0U, (ptr)) -/* send data with timestamp values in application buffer as a transmit packet, when the DMA is in enhanced mode */ -ErrStatus enet_ptpframe_transmit_enhanced_mode(uint8_t *buffer, uint32_t length, uint32_t timestamp[]); -/* handle current transmit frame but without data copy from application buffer in PTP enhanced mode */ -#define ENET_NOCOPY_PTPFRAME_TRANSMIT_ENHANCED_MODE(len, ptr) enet_ptpframe_transmit_enhanced_mode(NULL, (len), (ptr)) - -#else - -/* configure descriptor to work in normal mode */ -void enet_desc_select_normal_mode(void); -/* initialize the dma Tx/Rx descriptors's parameters in normal chain mode with ptp function */ -void enet_ptp_normal_descriptors_chain_init(enet_dmadirection_enum direction, enet_descriptors_struct *desc_ptptab); -/* initialize the dma Tx/Rx descriptors's parameters in normal ring mode with ptp function */ -void enet_ptp_normal_descriptors_ring_init(enet_dmadirection_enum direction, enet_descriptors_struct *desc_ptptab); -/* receive a packet data with timestamp values to application buffer, when the DMA is in normal mode */ -ErrStatus enet_ptpframe_receive_normal_mode(uint8_t *buffer, uint32_t bufsize, uint32_t timestamp[]); -/* handle current received frame but without data copy to application buffer in PTP normal mode */ -#define ENET_NOCOPY_PTPFRAME_RECEIVE_NORMAL_MODE(ptr) enet_ptpframe_receive_normal_mode(NULL, 0U, (ptr)) -/* send data with timestamp values in application buffer as a transmit packet, when the DMA is in normal mode */ -ErrStatus enet_ptpframe_transmit_normal_mode(uint8_t *buffer, uint32_t length, uint32_t timestamp[]); -/* handle current transmit frame but without data copy from application buffer in PTP normal mode */ -#define ENET_NOCOPY_PTPFRAME_TRANSMIT_NORMAL_MODE(len, ptr) enet_ptpframe_transmit_normal_mode(NULL, (len), (ptr)) - -#endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */ - -/* WUM function */ -/* wakeup frame filter register pointer reset */ -void enet_wum_filter_register_pointer_reset(void); -/* set the remote wakeup frame registers */ -void enet_wum_filter_config(uint32_t pdata[]); -/* enable wakeup management features */ -void enet_wum_feature_enable(uint32_t feature); -/* disable wakeup management features */ -void enet_wum_feature_disable(uint32_t feature); - -/* MSC function */ -/* reset the MAC statistics counters */ -void enet_msc_counters_reset(void); -/* enable the MAC statistics counter features */ -void enet_msc_feature_enable(uint32_t feature); -/* disable the MAC statistics counter features */ -void enet_msc_feature_disable(uint32_t feature); -/* configure MAC statistics counters preset mode */ -void enet_msc_counters_preset_config(enet_msc_preset_enum mode); -/* get MAC statistics counter */ -uint32_t enet_msc_counters_get(enet_msc_counter_enum counter); - -/* PTP function */ -/* change subsecond to nanosecond */ -uint32_t enet_ptp_subsecond_2_nanosecond(uint32_t subsecond); -/* change nanosecond to subsecond */ -uint32_t enet_ptp_nanosecond_2_subsecond(uint32_t nanosecond); -/* enable the PTP features */ -void enet_ptp_feature_enable(uint32_t feature); -/* disable the PTP features */ -void enet_ptp_feature_disable(uint32_t feature); -/* configure the PTP timestamp function */ -ErrStatus enet_ptp_timestamp_function_config(enet_ptp_function_enum func); -/* configure the PTP system time subsecond increment value */ -void enet_ptp_subsecond_increment_config(uint32_t subsecond); -/* adjusting the PTP clock frequency only in fine update mode */ -void enet_ptp_timestamp_addend_config(uint32_t add); -/* initializing or adding/subtracting to second of the PTP system time */ -void enet_ptp_timestamp_update_config(uint32_t sign, uint32_t second, uint32_t subsecond); -/* configure the PTP expected target time */ -void enet_ptp_expected_time_config(uint32_t second, uint32_t nanosecond); -/* get the PTP current system time */ -void enet_ptp_system_time_get(enet_ptp_systime_struct *systime_struct); -/* configure the PPS output frequency */ -void enet_ptp_pps_output_frequency_config(uint32_t freq); -/* configure and start PTP timestamp counter */ -void enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg); -/* adjust frequency in fine method by configure addend register */ -void enet_ptp_finecorrection_adjfreq(int32_t carry_cfg); -/* update system time in coarse method */ -void enet_ptp_coarsecorrection_systime_update(enet_ptp_systime_struct *systime_struct); -/* set system time in fine method */ -void enet_ptp_finecorrection_settime(enet_ptp_systime_struct * systime_struct); -/* get the ptp flag status */ -FlagStatus enet_ptp_flag_get(uint32_t flag); - -/* internal function */ -/* reset the ENET initpara struct, call it before using enet_initpara_config() */ -void enet_initpara_reset(void); -#ifdef USE_DELAY -/* user can provide more timing precise _ENET_DELAY_ function */ -#define _ENET_DELAY_ delay_ms -#else -/* default _ENET_DELAY_ function with less precise timing */ -#define _ENET_DELAY_ enet_delay -#endif - -#endif /* GD32F30X_ENET_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_exmc.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_exmc.h deleted file mode 100644 index acc61b3..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_exmc.h +++ /dev/null @@ -1,446 +0,0 @@ -/*! - \file gd32f30x_exmc.h - \brief definitions for the EXMC - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_EXMC_H -#define GD32F30X_EXMC_H - -#include "gd32f30x.h" - -/* EXMC definitions */ -#define EXMC (EXMC_BASE) /*!< EXMC register base address */ - -/* registers definitions */ -/* NOR/PSRAM */ -#define EXMC_SNCTL0 REG32(EXMC + 0x00U) /*!< EXMC SRAM/NOR flash control register0 */ -#define EXMC_SNTCFG0 REG32(EXMC + 0x04U) /*!< EXMC SRAM/NOR flash timing configuration register0 */ -#define EXMC_SNWTCFG0 REG32(EXMC + 0x104U) /*!< EXMC SRAM/NOR flash write timing configuration register0 */ - -#define EXMC_SNCTL1 REG32(EXMC + 0x08U) /*!< EXMC SRAM/NOR flash control register1 */ -#define EXMC_SNTCFG1 REG32(EXMC + 0x0CU) /*!< EXMC SRAM/NOR flash timing configuration register1 */ -#define EXMC_SNWTCFG1 REG32(EXMC + 0x10CU) /*!< EXMC SRAM/NOR flash write timing configuration register1 */ - -#define EXMC_SNCTL2 REG32(EXMC + 0x10U) /*!< EXMC SRAM/NOR flash control register2 */ -#define EXMC_SNTCFG2 REG32(EXMC + 0x14U) /*!< EXMC SRAM/NOR flash timing configuration register2 */ -#define EXMC_SNWTCFG2 REG32(EXMC + 0x114U) /*!< EXMC SRAM/NOR flash write timing configuration register2 */ - -#define EXMC_SNCTL3 REG32(EXMC + 0x18U) /*!< EXMC SRAM/NOR flash control register3 */ -#define EXMC_SNTCFG3 REG32(EXMC + 0x1CU) /*!< EXMC SRAM/NOR flash timing configuration register3 */ -#define EXMC_SNWTCFG3 REG32(EXMC + 0x11CU) /*!< EXMC SRAM/NOR flash write timing configuration register3 */ - -/* NAND/PC card */ -#define EXMC_NPCTL1 REG32(EXMC + 0x60U) /*!< EXMC NAND/PC card control register1 */ -#define EXMC_NPINTEN1 REG32(EXMC + 0x64U) /*!< EXMC NAND/PC card interrupt enable register1 */ -#define EXMC_NPCTCFG1 REG32(EXMC + 0x68U) /*!< EXMC NAND/PC card common space timing configuration register1 */ -#define EXMC_NPATCFG1 REG32(EXMC + 0x6CU) /*!< EXMC NAND/PC card attribute space timing configuration register1 */ -#define EXMC_NECC1 REG32(EXMC + 0x74U) /*!< EXMC NAND ECC register1 */ - -#define EXMC_NPCTL2 REG32(EXMC + 0x80U) /*!< EXMC NAND/PC card control register2 */ -#define EXMC_NPINTEN2 REG32(EXMC + 0x84U) /*!< EXMC NAND/PC card interrupt enable register2 */ -#define EXMC_NPCTCFG2 REG32(EXMC + 0x88U) /*!< EXMC NAND/PC card common space timing configuration register2 */ -#define EXMC_NPATCFG2 REG32(EXMC + 0x8CU) /*!< EXMC NAND/PC card attribute space timing configuration register2 */ -#define EXMC_NECC2 REG32(EXMC + 0x94U) /*!< EXMC NAND ECC register2 */ - -#define EXMC_NPCTL3 REG32(EXMC + 0xA0U) /*!< EXMC NAND/PC card control register3 */ -#define EXMC_NPINTEN3 REG32(EXMC + 0xA4U) /*!< EXMC NAND/PC card interrupt enable register3 */ -#define EXMC_NPCTCFG3 REG32(EXMC + 0xA8U) /*!< EXMC NAND/PC card common space timing configuration register3 */ -#define EXMC_NPATCFG3 REG32(EXMC + 0xACU) /*!< EXMC NAND/PC card attribute space timing configuration register3 */ -#define EXMC_PIOTCFG3 REG32(EXMC + 0xB0U) /*!< EXMC PC card I/O space timing configuration register */ - -/* bits definitions */ -/* EXMC_SNCTLx,x=0..3 */ -#define EXMC_SNCTL_NRBKEN BIT(0) /*!< NOR bank enable */ -#define EXMC_SNCTL_NRMUX BIT(1) /*!< NOR bank memory address/data multiplexing enable */ -#define EXMC_SNCTL_NRTP BITS(2,3) /*!< NOR bank memory type */ -#define EXMC_SNCTL_NRW BITS(4,5) /*!< NOR bank memory data bus width */ -#define EXMC_SNCTL_NREN BIT(6) /*!< NOR flash access enable */ -#define EXMC_SNCTL_SBRSTEN BIT(8) /*!< synchronous burst enable */ -#define EXMC_SNCTL_NRWTPOL BIT(9) /*!< NWAIT signal polarity */ -#define EXMC_SNCTL_WRAPEN BIT(10) /*!< wrapped burst mode enable */ -#define EXMC_SNCTL_NRWTCFG BIT(11) /*!< NWAIT signal configuration, only work in synchronous mode */ -#define EXMC_SNCTL_WREN BIT(12) /*!< write enable */ -#define EXMC_SNCTL_NRWTEN BIT(13) /*!< NWAIT signal enable */ -#define EXMC_SNCTL_EXMODEN BIT(14) /*!< extended mode enable */ -#define EXMC_SNCTL_ASYNCWAIT BIT(15) /*!< asynchronous wait enable */ -#define EXMC_SNCTL_CPS BITS(16,18) /*!< CRAM page size */ -#define EXMC_SNCTL_SYNCWR BIT(19) /*!< synchronous write config */ - -/* EXMC_SNTCFGx,x=0..3 */ -#define EXMC_SNTCFG_ASET BITS(0,3) /*!< asynchronous address setup time */ -#define EXMC_SNTCFG_AHLD BITS(4,7) /*!< asynchronous address hold time */ -#define EXMC_SNTCFG_DSET BITS(8,15) /*!< asynchronous data setup time */ -#define EXMC_SNTCFG_BUSLAT BITS(16,19) /*!< bus latency */ -#define EXMC_SNTCFG_CKDIV BITS(20,23) /*!< synchronous clock divide ratio */ -#define EXMC_SNTCFG_DLAT BITS(24,27) /*!< synchronous data latency for NOR flash */ -#define EXMC_SNTCFG_ASYNCMOD BITS(28,29) /*!< asynchronous access mode */ - -/* EXMC_SNWTCFGx,x=0..3 */ -#define EXMC_SNWTCFG_WASET BITS(0,3) /*!< asynchronous address setup time */ -#define EXMC_SNWTCFG_WAHLD BITS(4,7) /*!< asynchronous address hold time */ -#define EXMC_SNWTCFG_WDSET BITS(8,15) /*!< asynchronous data setup time */ -#define EXMC_SNWTCFG_WBUSLAT BITS(16,19) /*!< bus latency */ -#define EXMC_SNWTCFG_WASYNCMOD BITS(28,29) /*!< asynchronous access mode */ - -/* EXMC_NPCTLx,x=1..3 */ -#define EXMC_NPCTL_NDWTEN BIT(1) /*!< wait feature enable */ -#define EXMC_NPCTL_NDBKEN BIT(2) /*!< NAND bank enable */ -#define EXMC_NPCTL_NDTP BIT(3) /*!< NAND bank memory type */ -#define EXMC_NPCTL_NDW BITS(4,5) /*!< NAND bank memory data bus width */ -#define EXMC_NPCTL_ECCEN BIT(6) /*!< ECC enable */ -#define EXMC_NPCTL_CTR BITS(9,12) /*!< CLE to RE delay */ -#define EXMC_NPCTL_ATR BITS(13,16) /*!< ALE to RE delay */ -#define EXMC_NPCTL_ECCSZ BITS(17,19) /*!< ECC size */ - -/* EXMC_NPINTENx,x=1..3 */ -#define EXMC_NPINTEN_INTRS BIT(0) /*!< interrupt rising edge status */ -#define EXMC_NPINTEN_INTHS BIT(1) /*!< interrupt high-level status */ -#define EXMC_NPINTEN_INTFS BIT(2) /*!< interrupt falling edge status */ -#define EXMC_NPINTEN_INTREN BIT(3) /*!< interrupt rising edge detection enable */ -#define EXMC_NPINTEN_INTHEN BIT(4) /*!< interrupt high-level detection enable */ -#define EXMC_NPINTEN_INTFEN BIT(5) /*!< interrupt falling edge detection enable */ -#define EXMC_NPINTEN_FFEPT BIT(6) /*!< FIFO empty flag */ - -/* EXMC_NPCTCFGx,x=1..3 */ -#define EXMC_NPCTCFG_COMSET BITS(0,7) /*!< common memory setup time */ -#define EXMC_NPCTCFG_COMWAIT BITS(8,15) /*!< common memory wait time */ -#define EXMC_NPCTCFG_COMHLD BITS(16,23) /*!< common memory hold time */ -#define EXMC_NPCTCFG_COMHIZ BITS(24,31) /*!< common memory data bus HiZ time */ - -/* EXMC_NPATCFGx,x=1..3 */ -#define EXMC_NPATCFG_ATTSET BITS(0,7) /*!< attribute memory setup time */ -#define EXMC_NPATCFG_ATTWAIT BITS(8,15) /*!< attribute memory wait time */ -#define EXMC_NPATCFG_ATTHLD BITS(16,23) /*!< attribute memory hold time */ -#define EXMC_NPATCFG_ATTHIZ BITS(24,31) /*!< attribute memory data bus HiZ time */ - -/* EXMC_PIOTCFG3 */ -#define EXMC_PIOTCFG3_IOSET BITS(0,7) /*!< IO space setup time */ -#define EXMC_PIOTCFG3_IOWAIT BITS(8,15) /*!< IO space wait time */ -#define EXMC_PIOTCFG3_IOHLD BITS(16,23) /*!< IO space hold time */ -#define EXMC_PIOTCFG3_IOHIZ BITS(24,31) /*!< IO space data bus HiZ time */ - -/* EXMC_NECCx,x=1,2 */ -#define EXMC_NECC_ECC BITS(0,31) /*!< ECC result */ - -/* constants definitions */ -/* EXMC NOR/SRAM timing initialize struct */ -typedef struct -{ - uint32_t asyn_access_mode; /*!< asynchronous access mode */ - uint32_t syn_data_latency; /*!< configure the data latency */ - uint32_t syn_clk_division; /*!< configure the clock divide ratio */ - uint32_t bus_latency; /*!< configure the bus latency */ - uint32_t asyn_data_setuptime; /*!< configure the data setup time,asynchronous access mode valid */ - uint32_t asyn_address_holdtime; /*!< configure the address hold time,asynchronous access mode valid */ - uint32_t asyn_address_setuptime; /*!< configure the data setup time,asynchronous access mode valid */ -}exmc_norsram_timing_parameter_struct; - -/* EXMC NOR/SRAM initialize struct */ -typedef struct -{ - uint32_t norsram_region; /*!< select the region of EXMC NOR/SRAM bank */ - uint32_t write_mode; /*!< the write mode, synchronous mode or asynchronous mode */ - uint32_t extended_mode; /*!< enable or disable the extended mode */ - uint32_t asyn_wait; /*!< enable or disable the asynchronous wait function */ - uint32_t nwait_signal; /*!< enable or disable the NWAIT signal while in synchronous bust mode */ - uint32_t memory_write; /*!< enable or disable the write operation */ - uint32_t nwait_config; /*!< NWAIT signal configuration */ - uint32_t wrap_burst_mode; /*!< enable or disable the wrap burst mode */ - uint32_t nwait_polarity; /*!< specifies the polarity of NWAIT signal from memory */ - uint32_t burst_mode; /*!< enable or disable the burst mode */ - uint32_t databus_width; /*!< specifies the databus width of external memory */ - uint32_t memory_type; /*!< specifies the type of external memory */ - uint32_t address_data_mux; /*!< specifies whether the data bus and address bus are multiplexed */ - exmc_norsram_timing_parameter_struct* read_write_timing; /*!< timing parameters for read and write if the extended mode is not used or the timing - parameters for read if the extended mode is used */ - exmc_norsram_timing_parameter_struct* write_timing; /*!< timing parameters for write when the extended mode is used */ -}exmc_norsram_parameter_struct; - -/* EXMC NAND/PC card timing initialize struct */ -typedef struct -{ - uint32_t databus_hiztime; /*!< configure the dadtabus HiZ time for write operation */ - uint32_t holdtime; /*!< configure the address hold time(or the data hold time for write operation) */ - uint32_t waittime; /*!< configure the minimum wait time */ - uint32_t setuptime; /*!< configure the address setup time */ -}exmc_nand_pccard_timing_parameter_struct; - -/* EXMC NAND initialize struct */ -typedef struct -{ - uint32_t nand_bank; /*!< select the bank of NAND */ - uint32_t ecc_size; /*!< the page size for the ECC calculation */ - uint32_t atr_latency; /*!< configure the latency of ALE low to RB low */ - uint32_t ctr_latency; /*!< configure the latency of CLE low to RB low */ - uint32_t ecc_logic; /*!< enable or disable the ECC calculation logic */ - uint32_t databus_width; /*!< the NAND flash databus width */ - uint32_t wait_feature; /*!< enable or disable the wait feature */ - exmc_nand_pccard_timing_parameter_struct* common_space_timing; /*!< the timing parameters for NAND flash common space */ - exmc_nand_pccard_timing_parameter_struct* attribute_space_timing; /*!< the timing parameters for NAND flash attribute space */ -}exmc_nand_parameter_struct; - -/* EXMC PC card initialize struct */ -typedef struct -{ - uint32_t atr_latency; /*!< configure the latency of ALE low to RB low */ - uint32_t ctr_latency; /*!< configure the latency of CLE low to RB low */ - uint32_t wait_feature; /*!< enable or disable the wait feature */ - exmc_nand_pccard_timing_parameter_struct* common_space_timing; /*!< the timing parameters for PC card common space */ - exmc_nand_pccard_timing_parameter_struct* attribute_space_timing; /*!< the timing parameters for PC card attribute space */ - exmc_nand_pccard_timing_parameter_struct* io_space_timing; /*!< the timing parameters for PC card IO space */ -}exmc_pccard_parameter_struct; - -/* EXMC_register address */ -#define EXMC_SNCTL(region) REG32(EXMC + 0x08U * (region)) /*!< EXMC SRAM/NOR flash control registers, region = 0,1,2,3 */ -#define EXMC_SNTCFG(region) REG32(EXMC + 0x04U + 0x08U * (region)) /*!< EXMC SRAM/NOR flash timing configuration registers, region = 0,1,2,3 */ -#define EXMC_SNWTCFG(region) REG32(EXMC + 0x104U + 0x08U * (region)) /*!< EXMC SRAM/NOR flash write timing configuration registers, region = 0,1,2,3 */ - -#define EXMC_NPCTL(bank) REG32(EXMC + 0x40U + 0x20U * (bank)) /*!< EXMC NAND/PC card control registers, bank = 1,2,3 */ -#define EXMC_NPINTEN(bank) REG32(EXMC + 0x44U + 0x20U * (bank)) /*!< EXMC NAND/PC card interrupt enable registers, bank = 1,2,3 */ -#define EXMC_NPCTCFG(bank) REG32(EXMC + 0x48U + 0x20U * (bank)) /*!< EXMC NAND/PC card common space timing configuration registers, bank = 1,2,3 */ -#define EXMC_NPATCFG(bank) REG32(EXMC + 0x4CU + 0x20U * (bank)) /*!< EXMC NAND/PC card attribute space timing configuration registers, bank = 1,2,3 */ -#define EXMC_NECC(bank) REG32(EXMC + 0x54U + 0x20U * (bank)) /*!< EXMC NAND ECC registers, bank = 1,2 */ - -/* CRAM page size */ -#define SNCTL_CPS(regval) (BITS(16,18) & ((uint32_t)(regval) << 16)) -#define EXMC_CRAM_AUTO_SPLIT SNCTL_CPS(0) /*!< automatic burst split on page boundary crossing */ -#define EXMC_CRAM_PAGE_SIZE_128_BYTES SNCTL_CPS(1) /*!< page size is 128 bytes */ -#define EXMC_CRAM_PAGE_SIZE_256_BYTES SNCTL_CPS(2) /*!< page size is 256 bytes */ -#define EXMC_CRAM_PAGE_SIZE_512_BYTES SNCTL_CPS(3) /*!< page size is 512 bytes */ -#define EXMC_CRAM_PAGE_SIZE_1024_BYTES SNCTL_CPS(4) /*!< page size is 1024 bytes */ - -/* NOR bank memory data bus width */ -#define SNCTL_NRW(regval) (BITS(4,5) & ((uint32_t)(regval) << 4)) -#define EXMC_NOR_DATABUS_WIDTH_8B SNCTL_NRW(0) /*!< NOR data width is 8 bits */ -#define EXMC_NOR_DATABUS_WIDTH_16B SNCTL_NRW(1) /*!< NOR data width is 16 bits */ - -/* NOR bank memory type */ -#define SNCTL_NRTP(regval) (BITS(2,3) & ((uint32_t)(regval) << 2)) -#define EXMC_MEMORY_TYPE_SRAM SNCTL_NRTP(0) /*!< SRAM,ROM */ -#define EXMC_MEMORY_TYPE_PSRAM SNCTL_NRTP(1) /*!< PSRAM,CRAM */ -#define EXMC_MEMORY_TYPE_NOR SNCTL_NRTP(2) /*!< NOR flash */ - -/* asynchronous access mode */ -#define SNTCFG_ASYNCMOD(regval) (BITS(28,29) & ((uint32_t)(regval) << 28)) -#define EXMC_ACCESS_MODE_A SNTCFG_ASYNCMOD(0) /*!< mode A access */ -#define EXMC_ACCESS_MODE_B SNTCFG_ASYNCMOD(1) /*!< mode B access */ -#define EXMC_ACCESS_MODE_C SNTCFG_ASYNCMOD(2) /*!< mode C access */ -#define EXMC_ACCESS_MODE_D SNTCFG_ASYNCMOD(3) /*!< mode D access */ - -/* data latency for NOR flash */ -#define SNTCFG_DLAT(regval) (BITS(24,27) & ((uint32_t)(regval) << 24)) -#define EXMC_DATALAT_2_CLK SNTCFG_DLAT(0) /*!< data latency of first burst access is 2 EXMC_CLK */ -#define EXMC_DATALAT_3_CLK SNTCFG_DLAT(1) /*!< data latency of first burst access is 3 EXMC_CLK */ -#define EXMC_DATALAT_4_CLK SNTCFG_DLAT(2) /*!< data latency of first burst access is 4 EXMC_CLK */ -#define EXMC_DATALAT_5_CLK SNTCFG_DLAT(3) /*!< data latency of first burst access is 5 EXMC_CLK */ -#define EXMC_DATALAT_6_CLK SNTCFG_DLAT(4) /*!< data latency of first burst access is 6 EXMC_CLK */ -#define EXMC_DATALAT_7_CLK SNTCFG_DLAT(5) /*!< data latency of first burst access is 7 EXMC_CLK */ -#define EXMC_DATALAT_8_CLK SNTCFG_DLAT(6) /*!< data latency of first burst access is 8 EXMC_CLK */ -#define EXMC_DATALAT_9_CLK SNTCFG_DLAT(7) /*!< data latency of first burst access is 9 EXMC_CLK */ -#define EXMC_DATALAT_10_CLK SNTCFG_DLAT(8) /*!< data latency of first burst access is 10 EXMC_CLK */ -#define EXMC_DATALAT_11_CLK SNTCFG_DLAT(9) /*!< data latency of first burst access is 11 EXMC_CLK */ -#define EXMC_DATALAT_12_CLK SNTCFG_DLAT(10) /*!< data latency of first burst access is 12 EXMC_CLK */ -#define EXMC_DATALAT_13_CLK SNTCFG_DLAT(11) /*!< data latency of first burst access is 13 EXMC_CLK */ -#define EXMC_DATALAT_14_CLK SNTCFG_DLAT(12) /*!< data latency of first burst access is 14 EXMC_CLK */ -#define EXMC_DATALAT_15_CLK SNTCFG_DLAT(13) /*!< data latency of first burst access is 15 EXMC_CLK */ -#define EXMC_DATALAT_16_CLK SNTCFG_DLAT(14) /*!< data latency of first burst access is 16 EXMC_CLK */ -#define EXMC_DATALAT_17_CLK SNTCFG_DLAT(15) /*!< data latency of first burst access is 17 EXMC_CLK */ - -/* synchronous clock divide ratio */ -#define SNTCFG_CKDIV(regval) (BITS(20,23) & ((uint32_t)(regval) << 20)) -#define EXMC_SYN_CLOCK_RATIO_DISABLE SNTCFG_CKDIV(0) /*!< EXMC_CLK disable */ -#define EXMC_SYN_CLOCK_RATIO_2_CLK SNTCFG_CKDIV(1) /*!< EXMC_CLK = 2*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_3_CLK SNTCFG_CKDIV(2) /*!< EXMC_CLK = 3*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_4_CLK SNTCFG_CKDIV(3) /*!< EXMC_CLK = 4*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_5_CLK SNTCFG_CKDIV(4) /*!< EXMC_CLK = 5*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_6_CLK SNTCFG_CKDIV(5) /*!< EXMC_CLK = 6*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_7_CLK SNTCFG_CKDIV(6) /*!< EXMC_CLK = 7*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_8_CLK SNTCFG_CKDIV(7) /*!< EXMC_CLK = 8*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_9_CLK SNTCFG_CKDIV(8) /*!< EXMC_CLK = 9*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_10_CLK SNTCFG_CKDIV(9) /*!< EXMC_CLK = 10*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_11_CLK SNTCFG_CKDIV(10) /*!< EXMC_CLK = 11*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_12_CLK SNTCFG_CKDIV(11) /*!< EXMC_CLK = 12*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_13_CLK SNTCFG_CKDIV(12) /*!< EXMC_CLK = 13*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_14_CLK SNTCFG_CKDIV(13) /*!< EXMC_CLK = 14*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_15_CLK SNTCFG_CKDIV(14) /*!< EXMC_CLK = 15*HCLK */ -#define EXMC_SYN_CLOCK_RATIO_16_CLK SNTCFG_CKDIV(15) /*!< EXMC_CLK = 16*HCLK */ - -/* ECC size */ -#define NPCTL_ECCSZ(regval) (BITS(17,19) & ((uint32_t)(regval) << 17)) -#define EXMC_ECC_SIZE_256BYTES NPCTL_ECCSZ(0) /* ECC size is 256 bytes */ -#define EXMC_ECC_SIZE_512BYTES NPCTL_ECCSZ(1) /* ECC size is 512 bytes */ -#define EXMC_ECC_SIZE_1024BYTES NPCTL_ECCSZ(2) /* ECC size is 1024 bytes */ -#define EXMC_ECC_SIZE_2048BYTES NPCTL_ECCSZ(3) /* ECC size is 2048 bytes */ -#define EXMC_ECC_SIZE_4096BYTES NPCTL_ECCSZ(4) /* ECC size is 4096 bytes */ -#define EXMC_ECC_SIZE_8192BYTES NPCTL_ECCSZ(5) /* ECC size is 8192 bytes */ - -/* ALE to RE delay */ -#define NPCTL_ATR(regval) (BITS(13,16) & ((uint32_t)(regval) << 13)) -#define EXMC_ALE_RE_DELAY_1_HCLK NPCTL_ATR(0) /* ALE to RE delay = 1*HCLK */ -#define EXMC_ALE_RE_DELAY_2_HCLK NPCTL_ATR(1) /* ALE to RE delay = 2*HCLK */ -#define EXMC_ALE_RE_DELAY_3_HCLK NPCTL_ATR(2) /* ALE to RE delay = 3*HCLK */ -#define EXMC_ALE_RE_DELAY_4_HCLK NPCTL_ATR(3) /* ALE to RE delay = 4*HCLK */ -#define EXMC_ALE_RE_DELAY_5_HCLK NPCTL_ATR(4) /* ALE to RE delay = 5*HCLK */ -#define EXMC_ALE_RE_DELAY_6_HCLK NPCTL_ATR(5) /* ALE to RE delay = 6*HCLK */ -#define EXMC_ALE_RE_DELAY_7_HCLK NPCTL_ATR(6) /* ALE to RE delay = 7*HCLK */ -#define EXMC_ALE_RE_DELAY_8_HCLK NPCTL_ATR(7) /* ALE to RE delay = 8*HCLK */ -#define EXMC_ALE_RE_DELAY_9_HCLK NPCTL_ATR(8) /* ALE to RE delay = 9*HCLK */ -#define EXMC_ALE_RE_DELAY_10_HCLK NPCTL_ATR(9) /* ALE to RE delay = 10*HCLK */ -#define EXMC_ALE_RE_DELAY_11_HCLK NPCTL_ATR(10) /* ALE to RE delay = 11*HCLK */ -#define EXMC_ALE_RE_DELAY_12_HCLK NPCTL_ATR(11) /* ALE to RE delay = 12*HCLK */ -#define EXMC_ALE_RE_DELAY_13_HCLK NPCTL_ATR(12) /* ALE to RE delay = 13*HCLK */ -#define EXMC_ALE_RE_DELAY_14_HCLK NPCTL_ATR(13) /* ALE to RE delay = 14*HCLK */ -#define EXMC_ALE_RE_DELAY_15_HCLK NPCTL_ATR(14) /* ALE to RE delay = 15*HCLK */ -#define EXMC_ALE_RE_DELAY_16_HCLK NPCTL_ATR(15) /* ALE to RE delay = 16*HCLK */ - -/* CLE to RE delay */ -#define NPCTL_CTR(regval) (BITS(9,12) & ((uint32_t)(regval) << 9)) -#define EXMC_CLE_RE_DELAY_1_HCLK NPCTL_CTR(0) /* CLE to RE delay = 1*HCLK */ -#define EXMC_CLE_RE_DELAY_2_HCLK NPCTL_CTR(1) /* CLE to RE delay = 2*HCLK */ -#define EXMC_CLE_RE_DELAY_3_HCLK NPCTL_CTR(2) /* CLE to RE delay = 3*HCLK */ -#define EXMC_CLE_RE_DELAY_4_HCLK NPCTL_CTR(3) /* CLE to RE delay = 4*HCLK */ -#define EXMC_CLE_RE_DELAY_5_HCLK NPCTL_CTR(4) /* CLE to RE delay = 5*HCLK */ -#define EXMC_CLE_RE_DELAY_6_HCLK NPCTL_CTR(5) /* CLE to RE delay = 6*HCLK */ -#define EXMC_CLE_RE_DELAY_7_HCLK NPCTL_CTR(6) /* CLE to RE delay = 7*HCLK */ -#define EXMC_CLE_RE_DELAY_8_HCLK NPCTL_CTR(7) /* CLE to RE delay = 8*HCLK */ -#define EXMC_CLE_RE_DELAY_9_HCLK NPCTL_CTR(8) /* CLE to RE delay = 9*HCLK */ -#define EXMC_CLE_RE_DELAY_10_HCLK NPCTL_CTR(9) /* CLE to RE delay = 10*HCLK */ -#define EXMC_CLE_RE_DELAY_11_HCLK NPCTL_CTR(10) /* CLE to RE delay = 11*HCLK */ -#define EXMC_CLE_RE_DELAY_12_HCLK NPCTL_CTR(11) /* CLE to RE delay = 12*HCLK */ -#define EXMC_CLE_RE_DELAY_13_HCLK NPCTL_CTR(12) /* CLE to RE delay = 13*HCLK */ -#define EXMC_CLE_RE_DELAY_14_HCLK NPCTL_CTR(13) /* CLE to RE delay = 14*HCLK */ -#define EXMC_CLE_RE_DELAY_15_HCLK NPCTL_CTR(14) /* CLE to RE delay = 15*HCLK */ -#define EXMC_CLE_RE_DELAY_16_HCLK NPCTL_CTR(15) /* CLE to RE delay = 16*HCLK */ - -/* NAND bank memory data bus width */ -#define NPCTL_NDW(regval) (BITS(4,5) & ((uint32_t)(regval) << 4)) -#define EXMC_NAND_DATABUS_WIDTH_8B NPCTL_NDW(0) /*!< NAND data width is 8 bits */ -#define EXMC_NAND_DATABUS_WIDTH_16B NPCTL_NDW(1) /*!< NAND data width is 16 bits */ - -/* EXMC NOR/SRAM bank region definition */ -#define EXMC_BANK0_NORSRAM_REGION0 ((uint32_t)0x00000000U) /*!< bank0 NOR/SRAM region0 */ -#define EXMC_BANK0_NORSRAM_REGION1 ((uint32_t)0x00000001U) /*!< bank0 NOR/SRAM region1 */ -#define EXMC_BANK0_NORSRAM_REGION2 ((uint32_t)0x00000002U) /*!< bank0 NOR/SRAM region2 */ -#define EXMC_BANK0_NORSRAM_REGION3 ((uint32_t)0x00000003U) /*!< bank0 NOR/SRAM region3 */ - -/* EXMC NOR/SRAM write mode */ -#define EXMC_ASYN_WRITE ((uint32_t)0x00000000U) /*!< asynchronous write mode */ -#define EXMC_SYN_WRITE EXMC_SNCTL_SYNCWR /*!< synchronous write mode */ - -/* EXMC NWAIT signal configuration */ -#define EXMC_NWAIT_CONFIG_BEFORE ((uint32_t)0x00000000U) /*!< NWAIT signal is active one data cycle before wait state */ -#define EXMC_NWAIT_CONFIG_DURING EXMC_SNCTL_NRWTCFG /*!< NWAIT signal is active during wait state */ - -/* EXMC NWAIT signal polarity configuration */ -#define EXMC_NWAIT_POLARITY_LOW ((uint32_t)0x00000000U) /*!< low level is active of NWAIT */ -#define EXMC_NWAIT_POLARITY_HIGH EXMC_SNCTL_NRWTPOL /*!< high level is active of NWAIT */ - -/* EXMC NAND/PC card bank definition */ -#define EXMC_BANK1_NAND ((uint32_t)0x00000001U) /*!< bank1 NAND flash */ -#define EXMC_BANK2_NAND ((uint32_t)0x00000002U) /*!< bank2 NAND flash */ -#define EXMC_BANK3_PCCARD ((uint32_t)0x00000003U) /*!< bank3 PC card */ - -/* EXMC flag bits */ -#define EXMC_NAND_PCCARD_FLAG_RISE EXMC_NPINTEN_INTRS /*!< interrupt rising edge status */ -#define EXMC_NAND_PCCARD_FLAG_LEVEL EXMC_NPINTEN_INTHS /*!< interrupt high-level status */ -#define EXMC_NAND_PCCARD_FLAG_FALL EXMC_NPINTEN_INTFS /*!< interrupt falling edge status */ -#define EXMC_NAND_PCCARD_FLAG_FIFOE EXMC_NPINTEN_FFEPT /*!< FIFO empty flag */ - -/* EXMC interrupt flag bits */ -#define EXMC_NAND_PCCARD_INT_FLAG_RISE EXMC_NPINTEN_INTREN /*!< rising edge interrupt and flag */ -#define EXMC_NAND_PCCARD_INT_FLAG_LEVEL EXMC_NPINTEN_INTHEN /*!< high-level interrupt and flag */ -#define EXMC_NAND_PCCARD_INT_FLAG_FALL EXMC_NPINTEN_INTFEN /*!< falling edge interrupt and flag */ - -/* function declarations */ -/* initialization functions */ -/* NOR/SRAM */ -/* deinitialize EXMC NOR/SRAM region */ -void exmc_norsram_deinit(uint32_t exmc_norsram_region); -/* initialize exmc_norsram_parameter_struct with the default values */ -void exmc_norsram_struct_para_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct); -/* initialize EXMC NOR/SRAM region */ -void exmc_norsram_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct); -/* enable EXMC NOR/SRAM region */ -void exmc_norsram_enable(uint32_t exmc_norsram_region); -/* disable EXMC NOR/SRAM region */ -void exmc_norsram_disable(uint32_t exmc_norsram_region); -/* NAND */ -/* deinitialize EXMC NAND bank */ -void exmc_nand_deinit(uint32_t exmc_nand_bank); -/* initialize exmc_norsram_parameter_struct with the default values */ -void exmc_nand_struct_para_init(exmc_nand_parameter_struct* exmc_nand_init_struct); -/* initialize EXMC NAND bank */ -void exmc_nand_init(exmc_nand_parameter_struct* exmc_nand_init_struct); -/* enable EXMC NAND bank */ -void exmc_nand_enable(uint32_t exmc_nand_bank); -/* disable EXMC NAND bank */ -void exmc_nand_disable(uint32_t exmc_nand_bank); -/* PC card */ -/* deinitialize EXMC PC card bank */ -void exmc_pccard_deinit(void); -/* initialize exmc_pccard_parameter_struct parameter with the default values */ -void exmc_pccard_struct_para_init(exmc_pccard_parameter_struct* exmc_pccard_init_struct); -/* initialize EXMC PC card bank */ -void exmc_pccard_init(exmc_pccard_parameter_struct* exmc_pccard_init_struct); -/* enable EXMC PC card bank */ -void exmc_pccard_enable(void); -/* disable EXMC PC card bank */ -void exmc_pccard_disable(void); - -/* function configuration */ -/* NOR/SRAM */ -/* configure CRAM page size */ -void exmc_norsram_page_size_config(uint32_t exmc_norsram_region, uint32_t page_size); -/* NAND */ -/* enable or disable the EXMC NAND ECC function */ -void exmc_nand_ecc_config(uint32_t exmc_nand_bank, ControlStatus newvalue); -/* get the EXMC ECC value */ -uint32_t exmc_ecc_get(uint32_t exmc_nand_bank); - -/* interrupt & flag functions */ -/* enable EXMC interrupt */ -void exmc_interrupt_enable(uint32_t exmc_bank,uint32_t interrupt); -/* disable EXMC interrupt */ -void exmc_interrupt_disable(uint32_t exmc_bank,uint32_t interrupt); -/* get EXMC flag status */ -FlagStatus exmc_flag_get(uint32_t exmc_bank,uint32_t flag); -/* clear EXMC flag status */ -void exmc_flag_clear(uint32_t exmc_bank,uint32_t flag); -/* get EXMC interrupt flag */ -FlagStatus exmc_interrupt_flag_get(uint32_t exmc_bank,uint32_t interrupt); -/* clear EXMC interrupt flag */ -void exmc_interrupt_flag_clear(uint32_t exmc_bank,uint32_t interrupt); - -#endif /* GD32F30X_EXMC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_exti.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_exti.h deleted file mode 100644 index 9ce7be8..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_exti.h +++ /dev/null @@ -1,255 +0,0 @@ -/*! - \file gd32f30x_exti.h - \brief definitions for the EXTI - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_EXTI_H -#define GD32F30X_EXTI_H - -#include "gd32f30x.h" - -/* EXTI definitions */ -#define EXTI EXTI_BASE - -/* registers definitions */ -#define EXTI_INTEN REG32(EXTI + 0x00U) /*!< interrupt enable register */ -#define EXTI_EVEN REG32(EXTI + 0x04U) /*!< event enable register */ -#define EXTI_RTEN REG32(EXTI + 0x08U) /*!< rising edge trigger enable register */ -#define EXTI_FTEN REG32(EXTI + 0x0CU) /*!< falling trigger enable register */ -#define EXTI_SWIEV REG32(EXTI + 0x10U) /*!< software interrupt event register */ -#define EXTI_PD REG32(EXTI + 0x14U) /*!< pending register */ - -/* bits definitions */ -/* EXTI_INTEN */ -#define EXTI_INTEN_INTEN0 BIT(0) /*!< interrupt from line 0 */ -#define EXTI_INTEN_INTEN1 BIT(1) /*!< interrupt from line 1 */ -#define EXTI_INTEN_INTEN2 BIT(2) /*!< interrupt from line 2 */ -#define EXTI_INTEN_INTEN3 BIT(3) /*!< interrupt from line 3 */ -#define EXTI_INTEN_INTEN4 BIT(4) /*!< interrupt from line 4 */ -#define EXTI_INTEN_INTEN5 BIT(5) /*!< interrupt from line 5 */ -#define EXTI_INTEN_INTEN6 BIT(6) /*!< interrupt from line 6 */ -#define EXTI_INTEN_INTEN7 BIT(7) /*!< interrupt from line 7 */ -#define EXTI_INTEN_INTEN8 BIT(8) /*!< interrupt from line 8 */ -#define EXTI_INTEN_INTEN9 BIT(9) /*!< interrupt from line 9 */ -#define EXTI_INTEN_INTEN10 BIT(10) /*!< interrupt from line 10 */ -#define EXTI_INTEN_INTEN11 BIT(11) /*!< interrupt from line 11 */ -#define EXTI_INTEN_INTEN12 BIT(12) /*!< interrupt from line 12 */ -#define EXTI_INTEN_INTEN13 BIT(13) /*!< interrupt from line 13 */ -#define EXTI_INTEN_INTEN14 BIT(14) /*!< interrupt from line 14 */ -#define EXTI_INTEN_INTEN15 BIT(15) /*!< interrupt from line 15 */ -#define EXTI_INTEN_INTEN16 BIT(16) /*!< interrupt from line 16 */ -#define EXTI_INTEN_INTEN17 BIT(17) /*!< interrupt from line 17 */ -#define EXTI_INTEN_INTEN18 BIT(18) /*!< interrupt from line 18 */ -#define EXTI_INTEN_INTEN19 BIT(19) /*!< interrupt from line 19 */ - -/* EXTI_EVEN */ -#define EXTI_EVEN_EVEN0 BIT(0) /*!< event from line 0 */ -#define EXTI_EVEN_EVEN1 BIT(1) /*!< event from line 1 */ -#define EXTI_EVEN_EVEN2 BIT(2) /*!< event from line 2 */ -#define EXTI_EVEN_EVEN3 BIT(3) /*!< event from line 3 */ -#define EXTI_EVEN_EVEN4 BIT(4) /*!< event from line 4 */ -#define EXTI_EVEN_EVEN5 BIT(5) /*!< event from line 5 */ -#define EXTI_EVEN_EVEN6 BIT(6) /*!< event from line 6 */ -#define EXTI_EVEN_EVEN7 BIT(7) /*!< event from line 7 */ -#define EXTI_EVEN_EVEN8 BIT(8) /*!< event from line 8 */ -#define EXTI_EVEN_EVEN9 BIT(9) /*!< event from line 9 */ -#define EXTI_EVEN_EVEN10 BIT(10) /*!< event from line 10 */ -#define EXTI_EVEN_EVEN11 BIT(11) /*!< event from line 11 */ -#define EXTI_EVEN_EVEN12 BIT(12) /*!< event from line 12 */ -#define EXTI_EVEN_EVEN13 BIT(13) /*!< event from line 13 */ -#define EXTI_EVEN_EVEN14 BIT(14) /*!< event from line 14 */ -#define EXTI_EVEN_EVEN15 BIT(15) /*!< event from line 15 */ -#define EXTI_EVEN_EVEN16 BIT(16) /*!< event from line 16 */ -#define EXTI_EVEN_EVEN17 BIT(17) /*!< event from line 17 */ -#define EXTI_EVEN_EVEN18 BIT(18) /*!< event from line 18 */ -#define EXTI_EVEN_EVEN19 BIT(19) /*!< event from line 19 */ - -/* EXTI_RTEN */ -#define EXTI_RTEN_RTEN0 BIT(0) /*!< rising edge from line 0 */ -#define EXTI_RTEN_RTEN1 BIT(1) /*!< rising edge from line 1 */ -#define EXTI_RTEN_RTEN2 BIT(2) /*!< rising edge from line 2 */ -#define EXTI_RTEN_RTEN3 BIT(3) /*!< rising edge from line 3 */ -#define EXTI_RTEN_RTEN4 BIT(4) /*!< rising edge from line 4 */ -#define EXTI_RTEN_RTEN5 BIT(5) /*!< rising edge from line 5 */ -#define EXTI_RTEN_RTEN6 BIT(6) /*!< rising edge from line 6 */ -#define EXTI_RTEN_RTEN7 BIT(7) /*!< rising edge from line 7 */ -#define EXTI_RTEN_RTEN8 BIT(8) /*!< rising edge from line 8 */ -#define EXTI_RTEN_RTEN9 BIT(9) /*!< rising edge from line 9 */ -#define EXTI_RTEN_RTEN10 BIT(10) /*!< rising edge from line 10 */ -#define EXTI_RTEN_RTEN11 BIT(11) /*!< rising edge from line 11 */ -#define EXTI_RTEN_RTEN12 BIT(12) /*!< rising edge from line 12 */ -#define EXTI_RTEN_RTEN13 BIT(13) /*!< rising edge from line 13 */ -#define EXTI_RTEN_RTEN14 BIT(14) /*!< rising edge from line 14 */ -#define EXTI_RTEN_RTEN15 BIT(15) /*!< rising edge from line 15 */ -#define EXTI_RTEN_RTEN16 BIT(16) /*!< rising edge from line 16 */ -#define EXTI_RTEN_RTEN17 BIT(17) /*!< rising edge from line 17 */ -#define EXTI_RTEN_RTEN18 BIT(18) /*!< rising edge from line 18 */ -#define EXTI_RTEN_RTEN19 BIT(19) /*!< rising edge from line 19 */ - -/* EXTI_FTEN */ -#define EXTI_FTEN_FTEN0 BIT(0) /*!< falling edge from line 0 */ -#define EXTI_FTEN_FTEN1 BIT(1) /*!< falling edge from line 1 */ -#define EXTI_FTEN_FTEN2 BIT(2) /*!< falling edge from line 2 */ -#define EXTI_FTEN_FTEN3 BIT(3) /*!< falling edge from line 3 */ -#define EXTI_FTEN_FTEN4 BIT(4) /*!< falling edge from line 4 */ -#define EXTI_FTEN_FTEN5 BIT(5) /*!< falling edge from line 5 */ -#define EXTI_FTEN_FTEN6 BIT(6) /*!< falling edge from line 6 */ -#define EXTI_FTEN_FTEN7 BIT(7) /*!< falling edge from line 7 */ -#define EXTI_FTEN_FTEN8 BIT(8) /*!< falling edge from line 8 */ -#define EXTI_FTEN_FTEN9 BIT(9) /*!< falling edge from line 9 */ -#define EXTI_FTEN_FTEN10 BIT(10) /*!< falling edge from line 10 */ -#define EXTI_FTEN_FTEN11 BIT(11) /*!< falling edge from line 11 */ -#define EXTI_FTEN_FTEN12 BIT(12) /*!< falling edge from line 12 */ -#define EXTI_FTEN_FTEN13 BIT(13) /*!< falling edge from line 13 */ -#define EXTI_FTEN_FTEN14 BIT(14) /*!< falling edge from line 14 */ -#define EXTI_FTEN_FTEN15 BIT(15) /*!< falling edge from line 15 */ -#define EXTI_FTEN_FTEN16 BIT(16) /*!< falling edge from line 16 */ -#define EXTI_FTEN_FTEN17 BIT(17) /*!< falling edge from line 17 */ -#define EXTI_FTEN_FTEN18 BIT(18) /*!< falling edge from line 18 */ -#define EXTI_FTEN_FTEN19 BIT(19) /*!< falling edge from line 19 */ - -/* EXTI_SWIEV */ -#define EXTI_SWIEV_SWIEV0 BIT(0) /*!< software interrupt/event request from line 0 */ -#define EXTI_SWIEV_SWIEV1 BIT(1) /*!< software interrupt/event request from line 1 */ -#define EXTI_SWIEV_SWIEV2 BIT(2) /*!< software interrupt/event request from line 2 */ -#define EXTI_SWIEV_SWIEV3 BIT(3) /*!< software interrupt/event request from line 3 */ -#define EXTI_SWIEV_SWIEV4 BIT(4) /*!< software interrupt/event request from line 4 */ -#define EXTI_SWIEV_SWIEV5 BIT(5) /*!< software interrupt/event request from line 5 */ -#define EXTI_SWIEV_SWIEV6 BIT(6) /*!< software interrupt/event request from line 6 */ -#define EXTI_SWIEV_SWIEV7 BIT(7) /*!< software interrupt/event request from line 7 */ -#define EXTI_SWIEV_SWIEV8 BIT(8) /*!< software interrupt/event request from line 8 */ -#define EXTI_SWIEV_SWIEV9 BIT(9) /*!< software interrupt/event request from line 9 */ -#define EXTI_SWIEV_SWIEV10 BIT(10) /*!< software interrupt/event request from line 10 */ -#define EXTI_SWIEV_SWIEV11 BIT(11) /*!< software interrupt/event request from line 11 */ -#define EXTI_SWIEV_SWIEV12 BIT(12) /*!< software interrupt/event request from line 12 */ -#define EXTI_SWIEV_SWIEV13 BIT(13) /*!< software interrupt/event request from line 13 */ -#define EXTI_SWIEV_SWIEV14 BIT(14) /*!< software interrupt/event request from line 14 */ -#define EXTI_SWIEV_SWIEV15 BIT(15) /*!< software interrupt/event request from line 15 */ -#define EXTI_SWIEV_SWIEV16 BIT(16) /*!< software interrupt/event request from line 16 */ -#define EXTI_SWIEV_SWIEV17 BIT(17) /*!< software interrupt/event request from line 17 */ -#define EXTI_SWIEV_SWIEV18 BIT(18) /*!< software interrupt/event request from line 18 */ -#define EXTI_SWIEV_SWIEV19 BIT(19) /*!< software interrupt/event request from line 19 */ - -/* EXTI_PD */ -#define EXTI_PD_PD0 BIT(0) /*!< interrupt/event pending status from line 0 */ -#define EXTI_PD_PD1 BIT(1) /*!< interrupt/event pending status from line 1 */ -#define EXTI_PD_PD2 BIT(2) /*!< interrupt/event pending status from line 2 */ -#define EXTI_PD_PD3 BIT(3) /*!< interrupt/event pending status from line 3 */ -#define EXTI_PD_PD4 BIT(4) /*!< interrupt/event pending status from line 4 */ -#define EXTI_PD_PD5 BIT(5) /*!< interrupt/event pending status from line 5 */ -#define EXTI_PD_PD6 BIT(6) /*!< interrupt/event pending status from line 6 */ -#define EXTI_PD_PD7 BIT(7) /*!< interrupt/event pending status from line 7 */ -#define EXTI_PD_PD8 BIT(8) /*!< interrupt/event pending status from line 8 */ -#define EXTI_PD_PD9 BIT(9) /*!< interrupt/event pending status from line 9 */ -#define EXTI_PD_PD10 BIT(10) /*!< interrupt/event pending status from line 10 */ -#define EXTI_PD_PD11 BIT(11) /*!< interrupt/event pending status from line 11 */ -#define EXTI_PD_PD12 BIT(12) /*!< interrupt/event pending status from line 12 */ -#define EXTI_PD_PD13 BIT(13) /*!< interrupt/event pending status from line 13 */ -#define EXTI_PD_PD14 BIT(14) /*!< interrupt/event pending status from line 14 */ -#define EXTI_PD_PD15 BIT(15) /*!< interrupt/event pending status from line 15 */ -#define EXTI_PD_PD16 BIT(16) /*!< interrupt/event pending status from line 16 */ -#define EXTI_PD_PD17 BIT(17) /*!< interrupt/event pending status from line 17 */ -#define EXTI_PD_PD18 BIT(18) /*!< interrupt/event pending status from line 18 */ -#define EXTI_PD_PD19 BIT(19) /*!< interrupt/event pending status from line 19 */ - -/* constants definitions */ -/* EXTI line number */ -typedef enum -{ - EXTI_0 = BIT(0), /*!< EXTI line 0 */ - EXTI_1 = BIT(1), /*!< EXTI line 1 */ - EXTI_2 = BIT(2), /*!< EXTI line 2 */ - EXTI_3 = BIT(3), /*!< EXTI line 3 */ - EXTI_4 = BIT(4), /*!< EXTI line 4 */ - EXTI_5 = BIT(5), /*!< EXTI line 5 */ - EXTI_6 = BIT(6), /*!< EXTI line 6 */ - EXTI_7 = BIT(7), /*!< EXTI line 7 */ - EXTI_8 = BIT(8), /*!< EXTI line 8 */ - EXTI_9 = BIT(9), /*!< EXTI line 9 */ - EXTI_10 = BIT(10), /*!< EXTI line 10 */ - EXTI_11 = BIT(11), /*!< EXTI line 11 */ - EXTI_12 = BIT(12), /*!< EXTI line 12 */ - EXTI_13 = BIT(13), /*!< EXTI line 13 */ - EXTI_14 = BIT(14), /*!< EXTI line 14 */ - EXTI_15 = BIT(15), /*!< EXTI line 15 */ - EXTI_16 = BIT(16), /*!< EXTI line 16 */ - EXTI_17 = BIT(17), /*!< EXTI line 17 */ - EXTI_18 = BIT(18), /*!< EXTI line 18 */ - EXTI_19 = BIT(19), /*!< EXTI line 19 */ -}exti_line_enum; - -/* external interrupt and event */ -typedef enum -{ - EXTI_INTERRUPT = 0, /*!< EXTI interrupt mode */ - EXTI_EVENT /*!< EXTI event mode */ -}exti_mode_enum; - -/* interrupt trigger mode */ -typedef enum -{ - EXTI_TRIG_RISING = 0, /*!< EXTI rising edge trigger */ - EXTI_TRIG_FALLING, /*!< EXTI falling edge trigger */ - EXTI_TRIG_BOTH /*!< EXTI rising and falling edge trigger */ -}exti_trig_type_enum; - -/* function declarations */ -/* deinitialize the EXTI */ -void exti_deinit(void); -/* enable the configuration of EXTI initialize */ -void exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type); -/* enable the interrupts from EXTI line x */ -void exti_interrupt_enable(exti_line_enum linex); -/* enable the events from EXTI line x */ -void exti_event_enable(exti_line_enum linex); -/* disable the interrupts from EXTI line x */ -void exti_interrupt_disable(exti_line_enum linex); -/* disable the events from EXTI line x */ -void exti_event_disable(exti_line_enum linex); - -/* get EXTI lines pending flag */ -FlagStatus exti_flag_get(exti_line_enum linex); -/* clear EXTI lines pending flag */ -void exti_flag_clear(exti_line_enum linex); -/* get EXTI lines flag when the interrupt flag is set */ -FlagStatus exti_interrupt_flag_get(exti_line_enum linex); -/* clear EXTI lines pending flag */ -void exti_interrupt_flag_clear(exti_line_enum linex); -/* enable the EXTI software interrupt event */ -void exti_software_interrupt_enable(exti_line_enum linex); -/* disable the EXTI software interrupt event */ -void exti_software_interrupt_disable(exti_line_enum linex); - -#endif /* GD32F30X_EXTI_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_fmc.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_fmc.h deleted file mode 100644 index 874c7c8..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_fmc.h +++ /dev/null @@ -1,375 +0,0 @@ -/*! - \file gd32f30x_fmc.h - \brief definitions for the FMC - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - - -#ifndef GD32F30X_FMC_H -#define GD32F30X_FMC_H - -#include "gd32f30x.h" - -/* FMC and option byte definition */ -#define FMC FMC_BASE /*!< FMC register base address */ -#define OB OB_BASE /*!< option bytes base address */ - -/* registers definitions */ -#define FMC_WS REG32((FMC) + 0x00U) /*!< FMC wait state register */ -#define FMC_KEY0 REG32((FMC) + 0x04U) /*!< FMC unlock key register 0 */ -#define FMC_OBKEY REG32((FMC) + 0x08U) /*!< FMC option bytes unlock key register */ -#define FMC_STAT0 REG32((FMC) + 0x0CU) /*!< FMC status register 0 */ -#define FMC_CTL0 REG32((FMC) + 0x10U) /*!< FMC control register 0 */ -#define FMC_ADDR0 REG32((FMC) + 0x14U) /*!< FMC address register 0 */ -#define FMC_OBSTAT REG32((FMC) + 0x1CU) /*!< FMC option bytes status register */ -#define FMC_WP REG32((FMC) + 0x20U) /*!< FMC erase/program protection register */ -#define FMC_KEY1 REG32((FMC) + 0x44U) /*!< FMC unlock key register 1 */ -#define FMC_STAT1 REG32((FMC) + 0x4CU) /*!< FMC status register 1 */ -#define FMC_CTL1 REG32((FMC) + 0x50U) /*!< FMC control register 1 */ -#define FMC_ADDR1 REG32((FMC) + 0x54U) /*!< FMC address register 1 */ -#define FMC_WSEN REG32((FMC) + 0xFCU) /*!< FMC wait state enable register */ -#define FMC_PID REG32((FMC) + 0x100U) /*!< FMC product ID register */ - -#define OB_SPC REG16((OB) + 0x00U) /*!< option byte security protection value */ -#define OB_USER REG16((OB) + 0x02U) /*!< option byte user value*/ -#define OB_DATA1 REG16((OB) + 0x04U) /*!< option byte data1 value*/ -#define OB_DATA2 REG16((OB) + 0x06U) /*!< option byte data2 value*/ -#define OB_WP0 REG16((OB) + 0x08U) /*!< option byte write protection 0 */ -#define OB_WP1 REG16((OB) + 0x0AU) /*!< option byte write protection 1 */ -#define OB_WP2 REG16((OB) + 0x0CU) /*!< option byte write protection 2 */ -#define OB_WP3 REG16((OB) + 0x0EU) /*!< option byte write protection 3 */ - -/* bits definitions */ -/* FMC_WS */ -#define FMC_WS_WSCNT BITS(0,2) /*!< wait state counter */ - -/* FMC_KEY0 */ -#define FMC_KEY0_KEY BITS(0,31) /*!< FMC_CTL0 unlock key bits */ - -/* FMC_OBKEY */ -#define FMC_OBKEY_OBKEY BITS(0,31) /*!< option bytes unlock key bits */ - -/* FMC_STAT0 */ -#define FMC_STAT0_BUSY BIT(0) /*!< flash busy flag bit */ -#define FMC_STAT0_PGERR BIT(2) /*!< flash program error flag bit */ -#define FMC_STAT0_WPERR BIT(4) /*!< erase/program protection error flag bit */ -#define FMC_STAT0_ENDF BIT(5) /*!< end of operation flag bit */ - -/* FMC_CTL0 */ -#define FMC_CTL0_PG BIT(0) /*!< main flash program for bank0 command bit */ -#define FMC_CTL0_PER BIT(1) /*!< main flash page erase for bank0 command bit */ -#define FMC_CTL0_MER BIT(2) /*!< main flash mass erase for bank0 command bit */ -#define FMC_CTL0_OBPG BIT(4) /*!< option bytes program command bit */ -#define FMC_CTL0_OBER BIT(5) /*!< option bytes erase command bit */ -#define FMC_CTL0_START BIT(6) /*!< send erase command to FMC bit */ -#define FMC_CTL0_LK BIT(7) /*!< FMC_CTL0 lock bit */ -#define FMC_CTL0_OBWEN BIT(9) /*!< option bytes erase/program enable bit */ -#define FMC_CTL0_ERRIE BIT(10) /*!< error interrupt enable bit */ -#define FMC_CTL0_ENDIE BIT(12) /*!< end of operation interrupt enable bit */ - -/* FMC_ADDR0 */ -#define FMC_ADDR0_ADDR BITS(0,31) /*!< Flash erase/program command address bits */ - -/* FMC_OBSTAT */ -#define FMC_OBSTAT_OBERR BIT(0) /*!< option bytes read error bit. */ -#define FMC_OBSTAT_SPC BIT(1) /*!< option bytes security protection code */ -#define FMC_OBSTAT_USER BITS(2,9) /*!< store USER of option bytes block after system reset */ -#define FMC_OBSTAT_DATA BITS(10,25) /*!< store DATA of option bytes block after system reset. */ - -/* FMC_WP */ -#define FMC_WP_WP BITS(0,31) /*!< store WP of option bytes block after system reset */ - -/* FMC_KEY1 */ -#define FMC_KEY1_KEY BITS(0,31) /*!< FMC_CTL1 unlock key bits */ - -/* FMC_STAT1 */ -#define FMC_STAT1_BUSY BIT(0) /*!< flash busy flag bit */ -#define FMC_STAT1_PGERR BIT(2) /*!< flash program error flag bit */ -#define FMC_STAT1_WPERR BIT(4) /*!< erase/program protection error flag bit */ -#define FMC_STAT1_ENDF BIT(5) /*!< end of operation flag bit */ - -/* FMC_CTL1 */ -#define FMC_CTL1_PG BIT(0) /*!< main flash program for bank1 command bit */ -#define FMC_CTL1_PER BIT(1) /*!< main flash page erase for bank1 command bit */ -#define FMC_CTL1_MER BIT(2) /*!< main flash mass erase for bank1 command bit */ -#define FMC_CTL1_START BIT(6) /*!< send erase command to FMC bit */ -#define FMC_CTL1_LK BIT(7) /*!< FMC_CTL1 lock bit */ -#define FMC_CTL1_ERRIE BIT(10) /*!< error interrupt enable bit */ -#define FMC_CTL1_ENDIE BIT(12) /*!< end of operation interrupt enable bit */ - -/* FMC_ADDR1 */ -#define FMC_ADDR1_ADDR BITS(0,31) /*!< Flash erase/program command address bits */ - -/* FMC_WSEN */ -#define FMC_WSEN_WSEN BIT(0) /*!< FMC wait state enable bit */ -#define FMC_WSEN_BPEN BIT(1) /*!< FMC bit program enable bit */ - -/* FMC_PID */ -#define FMC_PID_PID BITS(0,31) /*!< product ID bits */ - -/* constants definitions */ -/* define the FMC bit position and its register index offset */ -#define FMC_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define FMC_REG_VAL(offset) (REG32(FMC + ((uint32_t)(offset) >> 6))) -#define FMC_BIT_POS(val) ((uint32_t)(val) & 0x1FU) -#define FMC_REGIDX_BITS(regidx, bitpos0, bitpos1) (((uint32_t)(regidx) << 12) | ((uint32_t)(bitpos0) << 6) | (uint32_t)(bitpos1)) -#define FMC_REG_VALS(offset) (REG32(FMC + ((uint32_t)(offset) >> 12))) -#define FMC_BIT_POS0(val) (((uint32_t)(val) >> 6) & 0x1FU) -#define FMC_BIT_POS1(val) ((uint32_t)(val) & 0x1FU) -#define FMC_REG_OFFSET_GET(flag) ((uint32_t)(flag) >> 12) - -/* configuration register */ -#define FMC_STAT0_REG_OFFSET 0x0CU /*!< status register 0 offset */ -#define FMC_CTL0_REG_OFFSET 0x10U /*!< control register 0 offset */ -#define FMC_STAT1_REG_OFFSET 0x4CU /*!< status register 1 offset */ -#define FMC_CTL1_REG_OFFSET 0x50U /*!< control register 1 offset */ -#define FMC_OBSTAT_REG_OFFSET 0x1CU /*!< option byte status register offset */ - -/* fmc state */ -typedef enum -{ - FMC_READY, /*!< the operation has been completed */ - FMC_BUSY, /*!< the operation is in progress */ - FMC_PGERR, /*!< program error */ - FMC_WPERR, /*!< erase/program protection error */ - FMC_TOERR, /*!< timeout error */ -}fmc_state_enum; - -/* FMC interrupt enable */ -typedef enum -{ - FMC_INT_BANK0_END = FMC_REGIDX_BIT(FMC_CTL0_REG_OFFSET, 12U), /*!< enable FMC end of program interrupt */ - FMC_INT_BANK0_ERR = FMC_REGIDX_BIT(FMC_CTL0_REG_OFFSET, 10U), /*!< enable FMC error interrupt */ - FMC_INT_BANK1_END = FMC_REGIDX_BIT(FMC_CTL1_REG_OFFSET, 12U), /*!< enable FMC bank1 end of program interrupt */ - FMC_INT_BANK1_ERR = FMC_REGIDX_BIT(FMC_CTL1_REG_OFFSET, 10U), /*!< enable FMC bank1 error interrupt */ -}fmc_int_enum; - -/* FMC flags */ -typedef enum -{ - FMC_FLAG_BANK0_BUSY = FMC_REGIDX_BIT(FMC_STAT0_REG_OFFSET, 0U), /*!< FMC bank0 busy flag */ - FMC_FLAG_BANK0_PGERR = FMC_REGIDX_BIT(FMC_STAT0_REG_OFFSET, 2U), /*!< FMC bank0 operation error flag bit */ - FMC_FLAG_BANK0_WPERR = FMC_REGIDX_BIT(FMC_STAT0_REG_OFFSET, 4U), /*!< FMC bank0 erase/program protection error flag bit */ - FMC_FLAG_BANK0_END = FMC_REGIDX_BIT(FMC_STAT0_REG_OFFSET, 5U), /*!< FMC bank0 end of operation flag bit */ - FMC_FLAG_OBERR = FMC_REGIDX_BIT(FMC_OBSTAT_REG_OFFSET, 0U), /*!< FMC option bytes read error flag */ - FMC_FLAG_BANK1_BUSY = FMC_REGIDX_BIT(FMC_STAT1_REG_OFFSET, 0U), /*!< FMC bank1 busy flag */ - FMC_FLAG_BANK1_PGERR = FMC_REGIDX_BIT(FMC_STAT1_REG_OFFSET, 2U), /*!< FMC bank1 operation error flag bit */ - FMC_FLAG_BANK1_WPERR = FMC_REGIDX_BIT(FMC_STAT1_REG_OFFSET, 4U), /*!< FMC bank1 erase/program protection error flag bit */ - FMC_FLAG_BANK1_END = FMC_REGIDX_BIT(FMC_STAT1_REG_OFFSET, 5U), /*!< FMC bank1 end of operation flag bit */ -}fmc_flag_enum; - -/* FMC interrupt flags */ -typedef enum -{ - FMC_INT_FLAG_BANK0_PGERR = FMC_REGIDX_BITS(FMC_STAT0_REG_OFFSET, 2U, 10U), /*!< FMC bank0 operation error interrupt flag bit */ - FMC_INT_FLAG_BANK0_WPERR = FMC_REGIDX_BITS(FMC_STAT0_REG_OFFSET, 4U, 10U), /*!< FMC bank0 erase/program protection error interrupt flag bit */ - FMC_INT_FLAG_BANK0_END = FMC_REGIDX_BITS(FMC_STAT0_REG_OFFSET, 5U, 12U), /*!< FMC bank0 end of operation interrupt flag bit */ - FMC_INT_FLAG_BANK1_PGERR = FMC_REGIDX_BITS(FMC_STAT1_REG_OFFSET, 2U, 10U), /*!< FMC bank1 operation error interrupt flag bit */ - FMC_INT_FLAG_BANK1_WPERR = FMC_REGIDX_BITS(FMC_STAT1_REG_OFFSET, 4U, 10U), /*!< FMC bank1 erase/program protection error interrupt flag bit */ - FMC_INT_FLAG_BANK1_END = FMC_REGIDX_BITS(FMC_STAT1_REG_OFFSET, 5U, 12U), /*!< FMC bank1 end of operation interrupt flag bit */ -}fmc_interrupt_flag_enum; - -/* unlock key */ -#define UNLOCK_KEY0 ((uint32_t)0x45670123U) /*!< unlock key 0 */ -#define UNLOCK_KEY1 ((uint32_t)0xCDEF89ABU) /*!< unlock key 1 */ - -/* FMC wait state counter */ -#define WS_WSCNT(regval) (BITS(0,2) & ((uint32_t)(regval))) -#define WS_WSCNT_0 WS_WSCNT(0) /*!< FMC 0 wait */ -#define WS_WSCNT_1 WS_WSCNT(1) /*!< FMC 1 wait */ -#define WS_WSCNT_2 WS_WSCNT(2) /*!< FMC 2 wait */ - -/* option bytes software/hardware free watch dog timer */ -#define OB_FWDGT_SW ((uint8_t)0x01U) /*!< software free watchdog */ -#define OB_FWDGT_HW ((uint8_t)0x00U) /*!< hardware free watchdog */ - -/* option bytes reset or not entering deep sleep mode */ -#define OB_DEEPSLEEP_NRST ((uint8_t)0x02U) /*!< no reset when entering deepsleep mode */ -#define OB_DEEPSLEEP_RST ((uint8_t)0x00U) /*!< generate a reset instead of entering deepsleep mode */ - -/* option bytes reset or not entering standby mode */ -#define OB_STDBY_NRST ((uint8_t)0x04U) /*!< no reset when entering deepsleep mode */ -#define OB_STDBY_RST ((uint8_t)0x00U) /*!< generate a reset instead of entering standby mode */ - -/* option bytes boot bank value */ -#define OB_BOOT_B0 ((uint8_t)0x08U) /*!< boot from bank0 */ -#define OB_BOOT_B1 ((uint8_t)0x00U) /*!< boot from bank1 */ - -#define OB_USER_MASK ((uint8_t)0xF0U) /*!< MASK value */ - -/* read protect configure */ -#define FMC_NSPC ((uint8_t)0xA5U) /*!< no security protection */ -#define FMC_USPC ((uint8_t)0xBBU) /*!< under security protection */ - -/* OB_SPC */ -#define OB_SPC_SPC ((uint32_t)0x000000FFU) /*!< option byte security protection value */ -#define OB_SPC_SPC_N ((uint32_t)0x0000FF00U) /*!< option byte security protection complement value */ - -/* OB_USER */ -#define OB_USER_USER ((uint32_t)0x00FF0000U) /*!< user option value */ -#define OB_USER_USER_N ((uint32_t)0xFF000000U) /*!< user option complement value */ - -/* OB_WP0 */ -#define OB_WP0_WP0 ((uint32_t)0x000000FFU) /*!< FMC write protection option value */ - -/* OB_WP1 */ -#define OB_WP1_WP1 ((uint32_t)0x0000FF00U) /*!< FMC write protection option complement value */ - -/* OB_WP2 */ -#define OB_WP2_WP2 ((uint32_t)0x00FF0000U) /*!< FMC write protection option value */ - -/* OB_WP3 */ -#define OB_WP3_WP3 ((uint32_t)0xFF000000U) /*!< FMC write protection option complement value */ - -/* option bytes write protection */ -#define OB_WP_0 ((uint32_t)0x00000001U) /*!< erase/program protection of sector 0 */ -#define OB_WP_1 ((uint32_t)0x00000002U) /*!< erase/program protection of sector 1 */ -#define OB_WP_2 ((uint32_t)0x00000004U) /*!< erase/program protection of sector 2 */ -#define OB_WP_3 ((uint32_t)0x00000008U) /*!< erase/program protection of sector 3 */ -#define OB_WP_4 ((uint32_t)0x00000010U) /*!< erase/program protection of sector 4 */ -#define OB_WP_5 ((uint32_t)0x00000020U) /*!< erase/program protection of sector 5 */ -#define OB_WP_6 ((uint32_t)0x00000040U) /*!< erase/program protection of sector 6 */ -#define OB_WP_7 ((uint32_t)0x00000080U) /*!< erase/program protection of sector 7 */ -#define OB_WP_8 ((uint32_t)0x00000100U) /*!< erase/program protection of sector 8 */ -#define OB_WP_9 ((uint32_t)0x00000200U) /*!< erase/program protection of sector 9 */ -#define OB_WP_10 ((uint32_t)0x00000400U) /*!< erase/program protection of sector 10 */ -#define OB_WP_11 ((uint32_t)0x00000800U) /*!< erase/program protection of sector 11 */ -#define OB_WP_12 ((uint32_t)0x00001000U) /*!< erase/program protection of sector 12 */ -#define OB_WP_13 ((uint32_t)0x00002000U) /*!< erase/program protection of sector 13 */ -#define OB_WP_14 ((uint32_t)0x00004000U) /*!< erase/program protection of sector 14 */ -#define OB_WP_15 ((uint32_t)0x00008000U) /*!< erase/program protection of sector 15 */ -#define OB_WP_16 ((uint32_t)0x00010000U) /*!< erase/program protection of sector 16 */ -#define OB_WP_17 ((uint32_t)0x00020000U) /*!< erase/program protection of sector 17 */ -#define OB_WP_18 ((uint32_t)0x00040000U) /*!< erase/program protection of sector 18 */ -#define OB_WP_19 ((uint32_t)0x00080000U) /*!< erase/program protection of sector 19 */ -#define OB_WP_20 ((uint32_t)0x00100000U) /*!< erase/program protection of sector 20 */ -#define OB_WP_21 ((uint32_t)0x00200000U) /*!< erase/program protection of sector 21 */ -#define OB_WP_22 ((uint32_t)0x00400000U) /*!< erase/program protection of sector 22 */ -#define OB_WP_23 ((uint32_t)0x00800000U) /*!< erase/program protection of sector 23 */ -#define OB_WP_24 ((uint32_t)0x01000000U) /*!< erase/program protection of sector 24 */ -#define OB_WP_25 ((uint32_t)0x02000000U) /*!< erase/program protection of sector 25 */ -#define OB_WP_26 ((uint32_t)0x04000000U) /*!< erase/program protection of sector 26 */ -#define OB_WP_27 ((uint32_t)0x08000000U) /*!< erase/program protection of sector 27 */ -#define OB_WP_28 ((uint32_t)0x10000000U) /*!< erase/program protection of sector 28 */ -#define OB_WP_29 ((uint32_t)0x20000000U) /*!< erase/program protection of sector 29 */ -#define OB_WP_30 ((uint32_t)0x40000000U) /*!< erase/program protection of sector 30 */ -#define OB_WP_31 ((uint32_t)0x80000000U) /*!< erase/program protection of sector 31 */ -#define OB_WP_ALL ((uint32_t)0xFFFFFFFFU) /*!< erase/program protection of all sectors */ - -/* FMC timeout */ -#define FMC_TIMEOUT_COUNT ((uint32_t)0x000F0000U) /*!< FMC timeout count value */ - -/* FMC BANK address */ -#define FMC_BANK0_END_ADDRESS ((uint32_t)0x0807FFFFU) /*!< FMC bank0 end address */ -#define FMC_BANK0_SIZE ((uint32_t)0x00000200U) /*!< FMC bank0 size */ -#define FMC_SIZE (*(uint16_t *)0x1FFFF7E0U) /*!< FMC size */ - -/* function declarations */ -/* FMC main memory programming functions */ -/* set the FMC wait state counter */ -void fmc_wscnt_set(uint32_t wscnt); -/* unlock the main FMC operation */ -void fmc_unlock(void); -/* unlock the FMC bank0 operation */ -void fmc_bank0_unlock(void); -/* unlock the FMC bank1 operation */ -void fmc_bank1_unlock(void); -/* lock the main FMC operation */ -void fmc_lock(void); -/* lock the bank0 FMC operation */ -void fmc_bank0_lock(void); -/* lock the bank1 FMC operation */ -void fmc_bank1_lock(void); -/* FMC erase page */ -fmc_state_enum fmc_page_erase(uint32_t page_address); -/* FMC erase whole chip */ -fmc_state_enum fmc_mass_erase(void); -/* FMC erase whole bank0 */ -fmc_state_enum fmc_bank0_erase(void); -/* FMC erase whole bank1 */ -fmc_state_enum fmc_bank1_erase(void); -/* FMC program a word at the corresponding address */ -fmc_state_enum fmc_word_program(uint32_t address, uint32_t data); -/* FMC program a half word at the corresponding address */ -fmc_state_enum fmc_halfword_program(uint32_t address, uint16_t data); -/* FMC reprogram a word at the corresponding address without erasing */ -fmc_state_enum fmc_word_reprogram(uint32_t address, uint32_t data); - -/* FMC option bytes programming functions */ -/* unlock the option byte operation */ -void ob_unlock(void); -/* lock the option byte operation */ -void ob_lock(void); -/* erase the option byte */ -fmc_state_enum ob_erase(void); -/* enable write protect */ -fmc_state_enum ob_write_protection_enable(uint32_t ob_wp); -/* configure the option byte security protection */ -fmc_state_enum ob_security_protection_config(uint8_t ob_spc); -/* write the FMC option byte */ -fmc_state_enum ob_user_write(uint8_t ob_fwdgt, uint8_t ob_deepsleep, uint8_t ob_stdby, uint8_t ob_boot); -/* program option bytes data */ -fmc_state_enum ob_data_program(uint32_t address, uint8_t data); -/* get the FMC option byte user */ -uint8_t ob_user_get(void); -/* get OB_DATA in register FMC_OBSTAT */ -uint16_t ob_data_get(void); -/* get the FMC option byte write protection */ -uint32_t ob_write_protection_get(void); -/* get option byte security protection code value */ -FlagStatus ob_spc_get(void); - -/* FMC interrupts and flags management functions */ -/* enable FMC interrupt */ -void fmc_interrupt_enable(uint32_t interrupt); -/* disable FMC interrupt */ -void fmc_interrupt_disable(uint32_t interrupt); -/* check flag is set or not */ -FlagStatus fmc_flag_get(uint32_t flag); -/* clear the FMC flag */ -void fmc_flag_clear(uint32_t flag); -/* get FMC interrupt flag state */ -FlagStatus fmc_interrupt_flag_get(fmc_interrupt_flag_enum flag); -/* clear FMC interrupt flag state */ -void fmc_interrupt_flag_clear(fmc_interrupt_flag_enum flag); -/* return the FMC bank0 state */ -fmc_state_enum fmc_bank0_state_get(void); -/* return the FMC bank1 state */ -fmc_state_enum fmc_bank1_state_get(void); -/* check FMC bank0 ready or not */ -fmc_state_enum fmc_bank0_ready_wait(uint32_t timeout); -/* check FMC bank1 ready or not */ -fmc_state_enum fmc_bank1_ready_wait(uint32_t timeout); - -#endif /* GD32F30X_FMC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_fwdgt.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_fwdgt.h deleted file mode 100644 index fd7529e..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_fwdgt.h +++ /dev/null @@ -1,107 +0,0 @@ -/*! - \file gd32f30x_fwdgt.h - \brief definitions for the FWDGT - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_FWDGT_H -#define GD32F30X_FWDGT_H - -#include "gd32f30x.h" - -/* FWDGT definitions */ -#define FWDGT FWDGT_BASE - -/* registers definitions */ -#define FWDGT_CTL REG32((FWDGT) + 0x00U) /*!< FWDGT control register */ -#define FWDGT_PSC REG32((FWDGT) + 0x04U) /*!< FWDGT prescaler register */ -#define FWDGT_RLD REG32((FWDGT) + 0x08U) /*!< FWDGT reload register */ -#define FWDGT_STAT REG32((FWDGT) + 0x0CU) /*!< FWDGT status register */ - -/* bits definitions */ -/* FWDGT_CTL */ -#define FWDGT_CTL_CMD BITS(0,15) /*!< FWDGT command value */ - -/* FWDGT_PSC */ -#define FWDGT_PSC_PSC BITS(0,2) /*!< FWDGT prescaler divider value */ - -/* FWDGT_RLD */ -#define FWDGT_RLD_RLD BITS(0,11) /*!< FWDGT counter reload value */ - -/* FWDGT_STAT */ -#define FWDGT_STAT_PUD BIT(0) /*!< FWDGT prescaler divider value update */ -#define FWDGT_STAT_RUD BIT(1) /*!< FWDGT counter reload value update */ - -/* constants definitions */ -/* psc register value */ -#define PSC_PSC(regval) (BITS(0,2) & ((uint32_t)(regval) << 0)) -#define FWDGT_PSC_DIV4 ((uint8_t)PSC_PSC(0)) /*!< FWDGT prescaler set to 4 */ -#define FWDGT_PSC_DIV8 ((uint8_t)PSC_PSC(1)) /*!< FWDGT prescaler set to 8 */ -#define FWDGT_PSC_DIV16 ((uint8_t)PSC_PSC(2)) /*!< FWDGT prescaler set to 16 */ -#define FWDGT_PSC_DIV32 ((uint8_t)PSC_PSC(3)) /*!< FWDGT prescaler set to 32 */ -#define FWDGT_PSC_DIV64 ((uint8_t)PSC_PSC(4)) /*!< FWDGT prescaler set to 64 */ -#define FWDGT_PSC_DIV128 ((uint8_t)PSC_PSC(5)) /*!< FWDGT prescaler set to 128 */ -#define FWDGT_PSC_DIV256 ((uint8_t)PSC_PSC(6)) /*!< FWDGT prescaler set to 256 */ - -/* control value */ -#define FWDGT_WRITEACCESS_ENABLE ((uint16_t)0x5555U) /*!< FWDGT_CTL bits write access enable value */ -#define FWDGT_WRITEACCESS_DISABLE ((uint16_t)0x0000U) /*!< FWDGT_CTL bits write access disable value */ -#define FWDGT_KEY_RELOAD ((uint16_t)0xAAAAU) /*!< FWDGT_CTL bits fwdgt counter reload value */ -#define FWDGT_KEY_ENABLE ((uint16_t)0xCCCCU) /*!< FWDGT_CTL bits fwdgt counter enable value */ - -/* FWDGT timeout value */ -#define FWDGT_PSC_TIMEOUT ((uint32_t)0x000FFFFFU) /*!< FWDGT_PSC register write operation state flag timeout */ -#define FWDGT_RLD_TIMEOUT ((uint32_t)0x000FFFFFU) /*!< FWDGT_RLD register write operation state flag timeout */ - -/* FWDGT flag definitions */ -#define FWDGT_FLAG_PUD FWDGT_STAT_PUD /*!< FWDGT prescaler divider value update flag */ -#define FWDGT_FLAG_RUD FWDGT_STAT_RUD /*!< FWDGT counter reload value update flag */ - -/* function declarations */ -/* enable write access to FWDGT_PSC and FWDGT_RLD */ -void fwdgt_write_enable(void); -/* disable write access to FWDGT_PSC and FWDGT_RLD */ -void fwdgt_write_disable(void); -/* start the free watchdog timer counter */ -void fwdgt_enable(void); - -/* reload the counter of FWDGT */ -void fwdgt_counter_reload(void); -/* configure counter reload value, and prescaler divider value */ -ErrStatus fwdgt_config(uint16_t reload_value, uint8_t prescaler_div); - -/* get flag state of FWDGT */ -FlagStatus fwdgt_flag_get(uint16_t flag); - -#endif /* GD32F30X_FWDGT_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_gpio.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_gpio.h deleted file mode 100644 index ea7a5b0..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_gpio.h +++ /dev/null @@ -1,536 +0,0 @@ -/*! - \file gd32f30x_gpio.h - \brief definitions for the GPIO - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_GPIO_H -#define GD32F30X_GPIO_H - -#include "gd32f30x.h" - -/* GPIOx(x=A,B,C,D,E,F,G) definitions */ -#define GPIOA (GPIO_BASE + 0x00000000U) -#define GPIOB (GPIO_BASE + 0x00000400U) -#define GPIOC (GPIO_BASE + 0x00000800U) -#define GPIOD (GPIO_BASE + 0x00000C00U) -#define GPIOE (GPIO_BASE + 0x00001000U) -#define GPIOF (GPIO_BASE + 0x00001400U) -#define GPIOG (GPIO_BASE + 0x00001800U) - -/* AFIO definitions */ -#define AFIO AFIO_BASE - -/* registers definitions */ -/* GPIO registers definitions */ -#define GPIO_CTL0(gpiox) REG32((gpiox) + 0x00U) /*!< GPIO port control register 0 */ -#define GPIO_CTL1(gpiox) REG32((gpiox) + 0x04U) /*!< GPIO port control register 1 */ -#define GPIO_ISTAT(gpiox) REG32((gpiox) + 0x08U) /*!< GPIO port input status register */ -#define GPIO_OCTL(gpiox) REG32((gpiox) + 0x0CU) /*!< GPIO port output control register */ -#define GPIO_BOP(gpiox) REG32((gpiox) + 0x10U) /*!< GPIO port bit operation register */ -#define GPIO_BC(gpiox) REG32((gpiox) + 0x14U) /*!< GPIO bit clear register */ -#define GPIO_LOCK(gpiox) REG32((gpiox) + 0x18U) /*!< GPIO port configuration lock register */ -#define GPIOx_SPD(gpiox) REG32((gpiox) + 0x3CU) /*!< GPIO port bit speed register */ - -/* AFIO registers definitions */ -#define AFIO_EC REG32(AFIO + 0x00U) /*!< AFIO event control register */ -#define AFIO_PCF0 REG32(AFIO + 0x04U) /*!< AFIO port configuration register 0 */ -#define AFIO_EXTISS0 REG32(AFIO + 0x08U) /*!< AFIO port EXTI sources selection register 0 */ -#define AFIO_EXTISS1 REG32(AFIO + 0x0CU) /*!< AFIO port EXTI sources selection register 1 */ -#define AFIO_EXTISS2 REG32(AFIO + 0x10U) /*!< AFIO port EXTI sources selection register 2 */ -#define AFIO_EXTISS3 REG32(AFIO + 0x14U) /*!< AFIO port EXTI sources selection register 3 */ -#define AFIO_PCF1 REG32(AFIO + 0x1CU) /*!< AFIO port configuration register 1 */ -#define AFIO_CPSCTL REG32(AFIO + 0x20U) /*!< IO compensation control register */ - -/* bits definitions */ -/* GPIO_CTL0 */ -#define GPIO_CTL0_MD0 BITS(0,1) /*!< port 0 mode bits */ -#define GPIO_CTL0_CTL0 BITS(2,3) /*!< pin 0 configuration bits */ -#define GPIO_CTL0_MD1 BITS(4,5) /*!< port 1 mode bits */ -#define GPIO_CTL0_CTL1 BITS(6,7) /*!< pin 1 configuration bits */ -#define GPIO_CTL0_MD2 BITS(8,9) /*!< port 2 mode bits */ -#define GPIO_CTL0_CTL2 BITS(10,11) /*!< pin 2 configuration bits */ -#define GPIO_CTL0_MD3 BITS(12,13) /*!< port 3 mode bits */ -#define GPIO_CTL0_CTL3 BITS(14,15) /*!< pin 3 configuration bits */ -#define GPIO_CTL0_MD4 BITS(16,17) /*!< port 4 mode bits */ -#define GPIO_CTL0_CTL4 BITS(18,19) /*!< pin 4 configuration bits */ -#define GPIO_CTL0_MD5 BITS(20,21) /*!< port 5 mode bits */ -#define GPIO_CTL0_CTL5 BITS(22,23) /*!< pin 5 configuration bits */ -#define GPIO_CTL0_MD6 BITS(24,25) /*!< port 6 mode bits */ -#define GPIO_CTL0_CTL6 BITS(26,27) /*!< pin 6 configuration bits */ -#define GPIO_CTL0_MD7 BITS(28,29) /*!< port 7 mode bits */ -#define GPIO_CTL0_CTL7 BITS(30,31) /*!< pin 7 configuration bits */ - -/* GPIO_CTL1 */ -#define GPIO_CTL1_MD8 BITS(0,1) /*!< port 8 mode bits */ -#define GPIO_CTL1_CTL8 BITS(2,3) /*!< pin 8 configuration bits */ -#define GPIO_CTL1_MD9 BITS(4,5) /*!< port 9 mode bits */ -#define GPIO_CTL1_CTL9 BITS(6,7) /*!< pin 9 configuration bits */ -#define GPIO_CTL1_MD10 BITS(8,9) /*!< port 10 mode bits */ -#define GPIO_CTL1_CTL10 BITS(10,11) /*!< pin 10 configuration bits */ -#define GPIO_CTL1_MD11 BITS(12,13) /*!< port 11 mode bits */ -#define GPIO_CTL1_CTL11 BITS(14,15) /*!< pin 11 configuration bits */ -#define GPIO_CTL1_MD12 BITS(16,17) /*!< port 12 mode bits */ -#define GPIO_CTL1_CTL12 BITS(18,19) /*!< pin 12 configuration bits */ -#define GPIO_CTL1_MD13 BITS(20,21) /*!< port 13 mode bits */ -#define GPIO_CTL1_CTL13 BITS(22,23) /*!< pin 13 configuration bits */ -#define GPIO_CTL1_MD14 BITS(24,25) /*!< port 14 mode bits */ -#define GPIO_CTL1_CTL14 BITS(26,27) /*!< pin 14 configuration bits */ -#define GPIO_CTL1_MD15 BITS(28,29) /*!< port 15 mode bits */ -#define GPIO_CTL1_CTL15 BITS(30,31) /*!< pin 15 configuration bits */ - -/* GPIO_ISTAT */ -#define GPIO_ISTAT_ISTAT0 BIT(0) /*!< pin 0 input status */ -#define GPIO_ISTAT_ISTAT1 BIT(1) /*!< pin 1 input status */ -#define GPIO_ISTAT_ISTAT2 BIT(2) /*!< pin 2 input status */ -#define GPIO_ISTAT_ISTAT3 BIT(3) /*!< pin 3 input status */ -#define GPIO_ISTAT_ISTAT4 BIT(4) /*!< pin 4 input status */ -#define GPIO_ISTAT_ISTAT5 BIT(5) /*!< pin 5 input status */ -#define GPIO_ISTAT_ISTAT6 BIT(6) /*!< pin 6 input status */ -#define GPIO_ISTAT_ISTAT7 BIT(7) /*!< pin 7 input status */ -#define GPIO_ISTAT_ISTAT8 BIT(8) /*!< pin 8 input status */ -#define GPIO_ISTAT_ISTAT9 BIT(9) /*!< pin 9 input status */ -#define GPIO_ISTAT_ISTAT10 BIT(10) /*!< pin 10 input status */ -#define GPIO_ISTAT_ISTAT11 BIT(11) /*!< pin 11 input status */ -#define GPIO_ISTAT_ISTAT12 BIT(12) /*!< pin 12 input status */ -#define GPIO_ISTAT_ISTAT13 BIT(13) /*!< pin 13 input status */ -#define GPIO_ISTAT_ISTAT14 BIT(14) /*!< pin 14 input status */ -#define GPIO_ISTAT_ISTAT15 BIT(15) /*!< pin 15 input status */ - -/* GPIO_OCTL */ -#define GPIO_OCTL_OCTL0 BIT(0) /*!< pin 0 output bit */ -#define GPIO_OCTL_OCTL1 BIT(1) /*!< pin 1 output bit */ -#define GPIO_OCTL_OCTL2 BIT(2) /*!< pin 2 output bit */ -#define GPIO_OCTL_OCTL3 BIT(3) /*!< pin 3 output bit */ -#define GPIO_OCTL_OCTL4 BIT(4) /*!< pin 4 output bit */ -#define GPIO_OCTL_OCTL5 BIT(5) /*!< pin 5 output bit */ -#define GPIO_OCTL_OCTL6 BIT(6) /*!< pin 6 output bit */ -#define GPIO_OCTL_OCTL7 BIT(7) /*!< pin 7 output bit */ -#define GPIO_OCTL_OCTL8 BIT(8) /*!< pin 8 output bit */ -#define GPIO_OCTL_OCTL9 BIT(9) /*!< pin 9 output bit */ -#define GPIO_OCTL_OCTL10 BIT(10) /*!< pin 10 output bit */ -#define GPIO_OCTL_OCTL11 BIT(11) /*!< pin 11 output bit */ -#define GPIO_OCTL_OCTL12 BIT(12) /*!< pin 12 output bit */ -#define GPIO_OCTL_OCTL13 BIT(13) /*!< pin 13 output bit */ -#define GPIO_OCTL_OCTL14 BIT(14) /*!< pin 14 output bit */ -#define GPIO_OCTL_OCTL15 BIT(15) /*!< pin 15 output bit */ - -/* GPIO_BOP */ -#define GPIO_BOP_BOP0 BIT(0) /*!< pin 0 set bit */ -#define GPIO_BOP_BOP1 BIT(1) /*!< pin 1 set bit */ -#define GPIO_BOP_BOP2 BIT(2) /*!< pin 2 set bit */ -#define GPIO_BOP_BOP3 BIT(3) /*!< pin 3 set bit */ -#define GPIO_BOP_BOP4 BIT(4) /*!< pin 4 set bit */ -#define GPIO_BOP_BOP5 BIT(5) /*!< pin 5 set bit */ -#define GPIO_BOP_BOP6 BIT(6) /*!< pin 6 set bit */ -#define GPIO_BOP_BOP7 BIT(7) /*!< pin 7 set bit */ -#define GPIO_BOP_BOP8 BIT(8) /*!< pin 8 set bit */ -#define GPIO_BOP_BOP9 BIT(9) /*!< pin 9 set bit */ -#define GPIO_BOP_BOP10 BIT(10) /*!< pin 10 set bit */ -#define GPIO_BOP_BOP11 BIT(11) /*!< pin 11 set bit */ -#define GPIO_BOP_BOP12 BIT(12) /*!< pin 12 set bit */ -#define GPIO_BOP_BOP13 BIT(13) /*!< pin 13 set bit */ -#define GPIO_BOP_BOP14 BIT(14) /*!< pin 14 set bit */ -#define GPIO_BOP_BOP15 BIT(15) /*!< pin 15 set bit */ -#define GPIO_BOP_CR0 BIT(16) /*!< pin 0 clear bit */ -#define GPIO_BOP_CR1 BIT(17) /*!< pin 1 clear bit */ -#define GPIO_BOP_CR2 BIT(18) /*!< pin 2 clear bit */ -#define GPIO_BOP_CR3 BIT(19) /*!< pin 3 clear bit */ -#define GPIO_BOP_CR4 BIT(20) /*!< pin 4 clear bit */ -#define GPIO_BOP_CR5 BIT(21) /*!< pin 5 clear bit */ -#define GPIO_BOP_CR6 BIT(22) /*!< pin 6 clear bit */ -#define GPIO_BOP_CR7 BIT(23) /*!< pin 7 clear bit */ -#define GPIO_BOP_CR8 BIT(24) /*!< pin 8 clear bit */ -#define GPIO_BOP_CR9 BIT(25) /*!< pin 9 clear bit */ -#define GPIO_BOP_CR10 BIT(26) /*!< pin 10 clear bit */ -#define GPIO_BOP_CR11 BIT(27) /*!< pin 11 clear bit */ -#define GPIO_BOP_CR12 BIT(28) /*!< pin 12 clear bit */ -#define GPIO_BOP_CR13 BIT(29) /*!< pin 13 clear bit */ -#define GPIO_BOP_CR14 BIT(30) /*!< pin 14 clear bit */ -#define GPIO_BOP_CR15 BIT(31) /*!< pin 15 clear bit */ - -/* GPIO_BC */ -#define GPIO_BC_CR0 BIT(0) /*!< pin 0 clear bit */ -#define GPIO_BC_CR1 BIT(1) /*!< pin 1 clear bit */ -#define GPIO_BC_CR2 BIT(2) /*!< pin 2 clear bit */ -#define GPIO_BC_CR3 BIT(3) /*!< pin 3 clear bit */ -#define GPIO_BC_CR4 BIT(4) /*!< pin 4 clear bit */ -#define GPIO_BC_CR5 BIT(5) /*!< pin 5 clear bit */ -#define GPIO_BC_CR6 BIT(6) /*!< pin 6 clear bit */ -#define GPIO_BC_CR7 BIT(7) /*!< pin 7 clear bit */ -#define GPIO_BC_CR8 BIT(8) /*!< pin 8 clear bit */ -#define GPIO_BC_CR9 BIT(9) /*!< pin 9 clear bit */ -#define GPIO_BC_CR10 BIT(10) /*!< pin 10 clear bit */ -#define GPIO_BC_CR11 BIT(11) /*!< pin 11 clear bit */ -#define GPIO_BC_CR12 BIT(12) /*!< pin 12 clear bit */ -#define GPIO_BC_CR13 BIT(13) /*!< pin 13 clear bit */ -#define GPIO_BC_CR14 BIT(14) /*!< pin 14 clear bit */ -#define GPIO_BC_CR15 BIT(15) /*!< pin 15 clear bit */ - -/* GPIO_LOCK */ -#define GPIO_LOCK_LK0 BIT(0) /*!< pin 0 lock bit */ -#define GPIO_LOCK_LK1 BIT(1) /*!< pin 1 lock bit */ -#define GPIO_LOCK_LK2 BIT(2) /*!< pin 2 lock bit */ -#define GPIO_LOCK_LK3 BIT(3) /*!< pin 3 lock bit */ -#define GPIO_LOCK_LK4 BIT(4) /*!< pin 4 lock bit */ -#define GPIO_LOCK_LK5 BIT(5) /*!< pin 5 lock bit */ -#define GPIO_LOCK_LK6 BIT(6) /*!< pin 6 lock bit */ -#define GPIO_LOCK_LK7 BIT(7) /*!< pin 7 lock bit */ -#define GPIO_LOCK_LK8 BIT(8) /*!< pin 8 lock bit */ -#define GPIO_LOCK_LK9 BIT(9) /*!< pin 9 lock bit */ -#define GPIO_LOCK_LK10 BIT(10) /*!< pin 10 lock bit */ -#define GPIO_LOCK_LK11 BIT(11) /*!< pin 11 lock bit */ -#define GPIO_LOCK_LK12 BIT(12) /*!< pin 12 lock bit */ -#define GPIO_LOCK_LK13 BIT(13) /*!< pin 13 lock bit */ -#define GPIO_LOCK_LK14 BIT(14) /*!< pin 14 lock bit */ -#define GPIO_LOCK_LK15 BIT(15) /*!< pin 15 lock bit */ -#define GPIO_LOCK_LKK BIT(16) /*!< pin sequence lock key */ - -/* GPIO_SPD */ -#define GPIO_SPD_SPD0 BIT(0) /*!< pin 0 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD1 BIT(1) /*!< pin 1 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD2 BIT(2) /*!< pin 2 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD3 BIT(3) /*!< pin 3 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD4 BIT(4) /*!< pin 4 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD5 BIT(5) /*!< pin 5 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD6 BIT(6) /*!< pin 6 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD7 BIT(7) /*!< pin 7 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD8 BIT(8) /*!< pin 8 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD9 BIT(9) /*!< pin 9 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD10 BIT(10) /*!< pin 10 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD11 BIT(11) /*!< pin 11 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD12 BIT(12) /*!< pin 12 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD13 BIT(13) /*!< pin 13 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD14 BIT(14) /*!< pin 14 set very high output speed when MDx is 0b11 */ -#define GPIO_SPD_SPD15 BIT(15) /*!< pin 15 set very high output speed when MDx is 0b11 */ - -/* AFIO_EC */ -#define AFIO_EC_PIN BITS(0,3) /*!< event output pin selection */ -#define AFIO_EC_PORT BITS(4,6) /*!< event output port selection */ -#define AFIO_EC_EOE BIT(7) /*!< event output enable */ - -/* AFIO_PCF0 */ -#ifdef GD32F30X_CL -/* memory map and bit definitions for GD32F30X_CL devices */ -#define AFIO_PCF0_SPI0_REMAP BIT(0) /*!< SPI0 remapping */ -#define AFIO_PCF0_I2C0_REMAP BIT(1) /*!< I2C0 remapping */ -#define AFIO_PCF0_USART0_REMAP BIT(2) /*!< USART0 remapping */ -#define AFIO_PCF0_USART1_REMAP BIT(3) /*!< USART1 remapping */ -#define AFIO_PCF0_USART2_REMAP BITS(4,5) /*!< USART2 remapping */ -#define AFIO_PCF0_TIMER0_REMAP BITS(6,7) /*!< TIMER0 remapping */ -#define AFIO_PCF0_TIMER1_REMAP BITS(8,9) /*!< TIMER1 remapping */ -#define AFIO_PCF0_TIMER2_REMAP BITS(10,11) /*!< TIMER2 remapping */ -#define AFIO_PCF0_TIMER3_REMAP BIT(12) /*!< TIMER3 remapping */ -#define AFIO_PCF0_CAN0_REMAP BITS(13,14) /*!< CAN0 remapping */ -#define AFIO_PCF0_PD01_REMAP BIT(15) /*!< port D0/port D1 mapping on OSC_IN/OSC_OUT */ -#define AFIO_PCF0_TIMER4CH3_IREMAP BIT(16) /*!< TIMER4 channel3 internal remapping */ -#define AFIO_PCF0_ENET_REMAP BIT(21) /*!< ethernet MAC I/O remapping */ -#define AFIO_PCF0_CAN1_REMAP BIT(22) /*!< CAN1 remapping */ -#define AFIO_PCF0_ENET_PHY_SEL BIT(23) /*!< ethernet MII or RMII PHY selection */ -#define AFIO_PCF0_SWJ_CFG BITS(24,26) /*!< serial wire JTAG configuration */ -#define AFIO_PCF0_SPI2_REMAP BIT(28) /*!< SPI2/I2S2 remapping */ -#define AFIO_PCF0_TIMER1ITR0_REMAP BIT(29) /*!< TIMER1 internal trigger 0 remapping */ -#define AFIO_PCF0_PTP_PPS_REMAP BIT(30) /*!< ethernet PTP PPS remapping */ - -#else -/* memory map and bit definitions for GD32F30X_HD devices and GD32F30X_XD devices */ -#define AFIO_PCF0_SPI0_REMAP BIT(0) /*!< SPI0 remapping */ -#define AFIO_PCF0_I2C0_REMAP BIT(1) /*!< I2C0 remapping */ -#define AFIO_PCF0_USART0_REMAP BIT(2) /*!< USART0 remapping */ -#define AFIO_PCF0_USART1_REMAP BIT(3) /*!< USART1 remapping */ -#define AFIO_PCF0_USART2_REMAP BITS(4,5) /*!< USART2 remapping */ -#define AFIO_PCF0_TIMER0_REMAP BITS(6,7) /*!< TIMER0 remapping */ -#define AFIO_PCF0_TIMER1_REMAP BITS(8,9) /*!< TIMER1 remapping */ -#define AFIO_PCF0_TIMER2_REMAP BITS(10,11) /*!< TIMER2 remapping */ -#define AFIO_PCF0_TIMER3_REMAP BIT(12) /*!< TIMER3 remapping */ -#define AFIO_PCF0_CAN_REMAP BITS(13,14) /*!< CAN remapping */ -#define AFIO_PCF0_PD01_REMAP BIT(15) /*!< port D0/port D1 mapping on OSC_IN/OSC_OUT */ -#define AFIO_PCF0_TIMER4CH3_IREMAP BIT(16) /*!< TIMER4 channel3 internal remapping */ -#define AFIO_PCF0_ADC0_ETRGINS_REMAP BIT(17) /*!< ADC 0 external trigger inserted conversion remapping */ -#define AFIO_PCF0_ADC0_ETRGREG_REMAP BIT(18) /*!< ADC 0 external trigger regular conversion remapping */ -#define AFIO_PCF0_ADC1_ETRGINS_REMAP BIT(19) /*!< ADC 1 external trigger inserted conversion remapping */ -#define AFIO_PCF0_ADC1_ETRGREG_REMAP BIT(20) /*!< ADC 1 external trigger regular conversion remapping */ -#define AFIO_PCF0_SWJ_CFG BITS(24,26) /*!< serial wire JTAG configuration */ -#define AFIO_PCF0_SPI2_REMAP BIT(28) /*!< SPI2/I2S2 remapping */ -#endif /* GD32F30X_CL */ - -/* AFIO_EXTISS0 */ -#define AFIO_EXTI0_SS BITS(0,3) /*!< EXTI 0 sources selection */ -#define AFIO_EXTI1_SS BITS(4,7) /*!< EXTI 1 sources selection */ -#define AFIO_EXTI2_SS BITS(8,11) /*!< EXTI 2 sources selection */ -#define AFIO_EXTI3_SS BITS(12,15) /*!< EXTI 3 sources selection */ - -/* AFIO_EXTISS1 */ -#define AFIO_EXTI4_SS BITS(0,3) /*!< EXTI 4 sources selection */ -#define AFIO_EXTI5_SS BITS(4,7) /*!< EXTI 5 sources selection */ -#define AFIO_EXTI6_SS BITS(8,11) /*!< EXTI 6 sources selection */ -#define AFIO_EXTI7_SS BITS(12,15) /*!< EXTI 7 sources selection */ - -/* AFIO_EXTISS2 */ -#define AFIO_EXTI8_SS BITS(0,3) /*!< EXTI 8 sources selection */ -#define AFIO_EXTI9_SS BITS(4,7) /*!< EXTI 9 sources selection */ -#define AFIO_EXTI10_SS BITS(8,11) /*!< EXTI 10 sources selection */ -#define AFIO_EXTI11_SS BITS(12,15) /*!< EXTI 11 sources selection */ - -/* AFIO_EXTISS3 */ -#define AFIO_EXTI12_SS BITS(0,3) /*!< EXTI 12 sources selection */ -#define AFIO_EXTI13_SS BITS(4,7) /*!< EXTI 13 sources selection */ -#define AFIO_EXTI14_SS BITS(8,11) /*!< EXTI 14 sources selection */ -#define AFIO_EXTI15_SS BITS(12,15) /*!< EXTI 15 sources selection */ - -/* AFIO_PCF1 */ -#define AFIO_PCF1_TIMER8_REMAP BIT(5) /*!< TIMER8 remapping */ -#define AFIO_PCF1_TIMER9_REMAP BIT(6) /*!< TIMER9 remapping */ -#define AFIO_PCF1_TIMER10_REMAP BIT(7) /*!< TIMER10 remapping */ -#define AFIO_PCF1_TIMER12_REMAP BIT(8) /*!< TIMER12 remapping */ -#define AFIO_PCF1_TIMER13_REMAP BIT(9) /*!< TIMER13 remapping */ -#define AFIO_PCF1_EXMC_NADV BIT(10) /*!< EXMC_NADV connect/disconnect */ -#define AFIO_PCF1_CTC_REMAP BITS(11,12) /*!< CTC remapping */ - -/* AFIO_CPSCTL */ -#define AFIO_CPSCTL_CPS_EN BIT(0) /*!< I/O compensation cell enable */ -#define AFIO_CPSCTL_CPS_RDY BIT(8) /*!< I/O compensation cell is ready or not */ - -/* constants definitions */ -typedef FlagStatus bit_status; - -/* GPIO mode values set */ -#define GPIO_MODE_SET(n, mode) ((uint32_t)((uint32_t)(mode) << (4U * (n)))) -#define GPIO_MODE_MASK(n) (0xFU << (4U * (n))) - -/* GPIO mode definitions */ -#define GPIO_MODE_AIN ((uint8_t)0x00U) /*!< analog input mode */ -#define GPIO_MODE_IN_FLOATING ((uint8_t)0x04U) /*!< floating input mode */ -#define GPIO_MODE_IPD ((uint8_t)0x28U) /*!< pull-down input mode */ -#define GPIO_MODE_IPU ((uint8_t)0x48U) /*!< pull-up input mode */ -#define GPIO_MODE_OUT_OD ((uint8_t)0x14U) /*!< GPIO output with open-drain */ -#define GPIO_MODE_OUT_PP ((uint8_t)0x10U) /*!< GPIO output with push-pull */ -#define GPIO_MODE_AF_OD ((uint8_t)0x1CU) /*!< AFIO output with open-drain */ -#define GPIO_MODE_AF_PP ((uint8_t)0x18U) /*!< AFIO output with push-pull */ - -/* GPIO output max speed value */ -#define GPIO_OSPEED_10MHZ ((uint8_t)0x01U) /*!< output max speed 10MHz */ -#define GPIO_OSPEED_2MHZ ((uint8_t)0x02U) /*!< output max speed 2MHz */ -#define GPIO_OSPEED_50MHZ ((uint8_t)0x03U) /*!< output max speed 50MHz */ -#define GPIO_OSPEED_MAX ((uint8_t)0x04U) /*!< GPIO very high output speed, max speed more than 50MHz */ - -/* GPIO event output port definitions */ -#define GPIO_EVENT_PORT_GPIOA ((uint8_t)0x00U) /*!< event output port A */ -#define GPIO_EVENT_PORT_GPIOB ((uint8_t)0x01U) /*!< event output port B */ -#define GPIO_EVENT_PORT_GPIOC ((uint8_t)0x02U) /*!< event output port C */ -#define GPIO_EVENT_PORT_GPIOD ((uint8_t)0x03U) /*!< event output port D */ -#define GPIO_EVENT_PORT_GPIOE ((uint8_t)0x04U) /*!< event output port E */ - -/* GPIO output port source definitions */ -#define GPIO_PORT_SOURCE_GPIOA ((uint8_t)0x00U) /*!< output port source A */ -#define GPIO_PORT_SOURCE_GPIOB ((uint8_t)0x01U) /*!< output port source B */ -#define GPIO_PORT_SOURCE_GPIOC ((uint8_t)0x02U) /*!< output port source C */ -#define GPIO_PORT_SOURCE_GPIOD ((uint8_t)0x03U) /*!< output port source D */ -#define GPIO_PORT_SOURCE_GPIOE ((uint8_t)0x04U) /*!< output port source E */ -#define GPIO_PORT_SOURCE_GPIOF ((uint8_t)0x05U) /*!< output port source F */ -#define GPIO_PORT_SOURCE_GPIOG ((uint8_t)0x06U) /*!< output port source G */ - -/* GPIO event output pin definitions */ -#define GPIO_EVENT_PIN_0 ((uint8_t)0x00U) /*!< GPIO event pin 0 */ -#define GPIO_EVENT_PIN_1 ((uint8_t)0x01U) /*!< GPIO event pin 1 */ -#define GPIO_EVENT_PIN_2 ((uint8_t)0x02U) /*!< GPIO event pin 2 */ -#define GPIO_EVENT_PIN_3 ((uint8_t)0x03U) /*!< GPIO event pin 3 */ -#define GPIO_EVENT_PIN_4 ((uint8_t)0x04U) /*!< GPIO event pin 4 */ -#define GPIO_EVENT_PIN_5 ((uint8_t)0x05U) /*!< GPIO event pin 5 */ -#define GPIO_EVENT_PIN_6 ((uint8_t)0x06U) /*!< GPIO event pin 6 */ -#define GPIO_EVENT_PIN_7 ((uint8_t)0x07U) /*!< GPIO event pin 7 */ -#define GPIO_EVENT_PIN_8 ((uint8_t)0x08U) /*!< GPIO event pin 8 */ -#define GPIO_EVENT_PIN_9 ((uint8_t)0x09U) /*!< GPIO event pin 9 */ -#define GPIO_EVENT_PIN_10 ((uint8_t)0x0AU) /*!< GPIO event pin 10 */ -#define GPIO_EVENT_PIN_11 ((uint8_t)0x0BU) /*!< GPIO event pin 11 */ -#define GPIO_EVENT_PIN_12 ((uint8_t)0x0CU) /*!< GPIO event pin 12 */ -#define GPIO_EVENT_PIN_13 ((uint8_t)0x0DU) /*!< GPIO event pin 13 */ -#define GPIO_EVENT_PIN_14 ((uint8_t)0x0EU) /*!< GPIO event pin 14 */ -#define GPIO_EVENT_PIN_15 ((uint8_t)0x0FU) /*!< GPIO event pin 15 */ - -/* GPIO output pin source definitions */ -#define GPIO_PIN_SOURCE_0 ((uint8_t)0x00U) /*!< GPIO pin source 0 */ -#define GPIO_PIN_SOURCE_1 ((uint8_t)0x01U) /*!< GPIO pin source 1 */ -#define GPIO_PIN_SOURCE_2 ((uint8_t)0x02U) /*!< GPIO pin source 2 */ -#define GPIO_PIN_SOURCE_3 ((uint8_t)0x03U) /*!< GPIO pin source 3 */ -#define GPIO_PIN_SOURCE_4 ((uint8_t)0x04U) /*!< GPIO pin source 4 */ -#define GPIO_PIN_SOURCE_5 ((uint8_t)0x05U) /*!< GPIO pin source 5 */ -#define GPIO_PIN_SOURCE_6 ((uint8_t)0x06U) /*!< GPIO pin source 6 */ -#define GPIO_PIN_SOURCE_7 ((uint8_t)0x07U) /*!< GPIO pin source 7 */ -#define GPIO_PIN_SOURCE_8 ((uint8_t)0x08U) /*!< GPIO pin source 8 */ -#define GPIO_PIN_SOURCE_9 ((uint8_t)0x09U) /*!< GPIO pin source 9 */ -#define GPIO_PIN_SOURCE_10 ((uint8_t)0x0AU) /*!< GPIO pin source 10 */ -#define GPIO_PIN_SOURCE_11 ((uint8_t)0x0BU) /*!< GPIO pin source 11 */ -#define GPIO_PIN_SOURCE_12 ((uint8_t)0x0CU) /*!< GPIO pin source 12 */ -#define GPIO_PIN_SOURCE_13 ((uint8_t)0x0DU) /*!< GPIO pin source 13 */ -#define GPIO_PIN_SOURCE_14 ((uint8_t)0x0EU) /*!< GPIO pin source 14 */ -#define GPIO_PIN_SOURCE_15 ((uint8_t)0x0FU) /*!< GPIO pin source 15 */ - -/* GPIO pin definitions */ -#define GPIO_PIN_0 BIT(0) /*!< GPIO pin 0 */ -#define GPIO_PIN_1 BIT(1) /*!< GPIO pin 1 */ -#define GPIO_PIN_2 BIT(2) /*!< GPIO pin 2 */ -#define GPIO_PIN_3 BIT(3) /*!< GPIO pin 3 */ -#define GPIO_PIN_4 BIT(4) /*!< GPIO pin 4 */ -#define GPIO_PIN_5 BIT(5) /*!< GPIO pin 5 */ -#define GPIO_PIN_6 BIT(6) /*!< GPIO pin 6 */ -#define GPIO_PIN_7 BIT(7) /*!< GPIO pin 7 */ -#define GPIO_PIN_8 BIT(8) /*!< GPIO pin 8 */ -#define GPIO_PIN_9 BIT(9) /*!< GPIO pin 9 */ -#define GPIO_PIN_10 BIT(10) /*!< GPIO pin 10 */ -#define GPIO_PIN_11 BIT(11) /*!< GPIO pin 11 */ -#define GPIO_PIN_12 BIT(12) /*!< GPIO pin 12 */ -#define GPIO_PIN_13 BIT(13) /*!< GPIO pin 13 */ -#define GPIO_PIN_14 BIT(14) /*!< GPIO pin 14 */ -#define GPIO_PIN_15 BIT(15) /*!< GPIO pin 15 */ -#define GPIO_PIN_ALL BITS(0,15) /*!< GPIO pin all */ - -/* AFIO remap mask */ -#define PCF0_USART2_REMAP(regval) (BITS(4,5) & ((uint32_t)(regval) << 4)) /*!< USART2 remapping */ -#define PCF0_TIMER0_REMAP(regval) (BITS(6,7) & ((uint32_t)(regval) << 6)) /*!< TIMER0 remapping */ -#define PCF0_TIMER1_REMAP(regval) (BITS(8,9) & ((uint32_t)(regval) << 8)) /*!< TIMER1 remapping */ -#define PCF0_TIMER2_REMAP(regval) (BITS(10,11) & ((uint32_t)(regval) << 10)) /*!< TIMER2 remapping */ -#define PCF0_CAN_REMAP(regval) (BITS(13,14) & ((uint32_t)(regval) << 13)) /*!< CAN remapping */ -#define PCF0_SWJ_CFG(regval) (BITS(24,26) & ((uint32_t)(regval) << 24)) /*!< serial wire JTAG configuration */ -#define PCF1_CTC_REMAP(regval) (BITS(11,12) & ((uint32_t)(regval) << 11)) /*!< CTC remapping */ - -/* GPIO remap definitions */ -#define GPIO_SPI0_REMAP AFIO_PCF0_SPI0_REMAP /*!< SPI0 remapping */ -#define GPIO_I2C0_REMAP AFIO_PCF0_I2C0_REMAP /*!< I2C0 remapping */ -#define GPIO_USART0_REMAP AFIO_PCF0_USART0_REMAP /*!< USART0 remapping */ -#define GPIO_USART1_REMAP AFIO_PCF0_USART1_REMAP /*!< USART1 remapping */ -#define GPIO_USART2_PARTIAL_REMAP ((uint32_t)0x00140000U | PCF0_USART2_REMAP(1)) /*!< USART2 partial remapping */ -#define GPIO_USART2_FULL_REMAP ((uint32_t)0x00140000U | PCF0_USART2_REMAP(3)) /*!< USART2 full remapping */ -#define GPIO_TIMER0_PARTIAL_REMAP ((uint32_t)0x00160000U | PCF0_TIMER0_REMAP(1)) /*!< TIMER0 partial remapping */ -#define GPIO_TIMER0_FULL_REMAP ((uint32_t)0x00160000U | PCF0_TIMER0_REMAP(3)) /*!< TIMER0 full remapping */ -#define GPIO_TIMER1_PARTIAL_REMAP0 ((uint32_t)0x00180000U | PCF0_TIMER1_REMAP(1)) /*!< TIMER1 partial remapping */ -#define GPIO_TIMER1_PARTIAL_REMAP1 ((uint32_t)0x00180000U | PCF0_TIMER1_REMAP(2)) /*!< TIMER1 partial remapping */ -#define GPIO_TIMER1_FULL_REMAP ((uint32_t)0x00180000U | PCF0_TIMER1_REMAP(3)) /*!< TIMER1 full remapping */ -#define GPIO_TIMER2_PARTIAL_REMAP ((uint32_t)0x001A0000U | PCF0_TIMER2_REMAP(2)) /*!< TIMER2 partial remapping */ -#define GPIO_TIMER2_FULL_REMAP ((uint32_t)0x001A0000U | PCF0_TIMER2_REMAP(3)) /*!< TIMER2 full remapping */ -#define GPIO_TIMER3_REMAP AFIO_PCF0_TIMER3_REMAP /*!< TIMER3 remapping */ -#define GPIO_PD01_REMAP AFIO_PCF0_PD01_REMAP /*!< PD01 remapping */ -#define GPIO_TIMER4CH3_IREMAP ((uint32_t)0x00200000U | (AFIO_PCF0_TIMER4CH3_IREMAP >> 16)) /*!< TIMER4 channel3 internal remapping */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define GPIO_CAN_PARTIAL_REMAP ((uint32_t)0x001D0000U | PCF0_CAN_REMAP(2)) /*!< CAN partial remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */ -#define GPIO_CAN_FULL_REMAP ((uint32_t)0x001D0000U | PCF0_CAN_REMAP(3)) /*!< CAN full remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */ -#endif /* GD32F30X_HD||GD32F30X_XD */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define GPIO_ADC0_ETRGINS_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_ADC0_ETRGINS_REMAP >> 16)) /*!< ADC0 external trigger inserted conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */ -#define GPIO_ADC0_ETRGREG_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_ADC0_ETRGREG_REMAP >> 16)) /*!< ADC0 external trigger regular conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */ -#define GPIO_ADC1_ETRGINS_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_ADC1_ETRGINS_REMAP >> 16)) /*!< ADC1 external trigger inserted conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */ -#define GPIO_ADC1_ETRGREG_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_ADC1_ETRGREG_REMAP >> 16)) /*!< ADC1 external trigger regular conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) */ -#endif /* GD32F30X_HD||GD32F30X_XD */ -#define GPIO_SWJ_NONJTRST_REMAP ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(1) >> 16)) /*!< full SWJ(JTAG-DP + SW-DP),but without NJTRST */ -#define GPIO_SWJ_SWDPENABLE_REMAP ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(2) >> 16)) /*!< JTAG-DP disabled and SW-DP enabled */ -#define GPIO_SWJ_DISABLE_REMAP ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(4) >> 16)) /*!< JTAG-DP disabled and SW-DP disabled */ -#define GPIO_SPI2_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_SPI2_REMAP >> 16)) /*!< SPI2 remapping*/ -#ifdef GD32F30X_CL -#define GPIO_CAN0_PARTIAL_REMAP ((uint32_t)0x001D0000U | PCF0_CAN_REMAP(2)) /*!< CAN0 partial remapping(only for GD32F30X_CL devices) */ -#define GPIO_CAN0_FULL_REMAP ((uint32_t)0x001D0000U | PCF0_CAN_REMAP(3)) /*!< CAN0 full remapping(only for GD32F30X_CL devices) */ -#define GPIO_ENET_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_ENET_REMAP >> 16)) /*!< ENET remapping(only for GD32F30X_CL devices) */ -#define GPIO_CAN1_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_CAN1_REMAP >> 16)) /*!< CAN1 remapping(only for GD32F30X_CL devices) */ -#define GPIO_TIMER1ITR0_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_TIMER1ITR0_REMAP >> 16)) /*!< TIMER1 internal trigger 0 remapping(only for GD32F30X_CL devices) */ -#define GPIO_PTP_PPS_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_PTP_PPS_REMAP >> 16)) /*!< ethernet PTP PPS remapping(only for GD32F30X_CL devices) */ -#endif /* GD32F30X_CL */ -#define GPIO_TIMER8_REMAP ((uint32_t)0x80000000U | AFIO_PCF1_TIMER8_REMAP) /*!< TIMER8 remapping */ -#define GPIO_TIMER9_REMAP ((uint32_t)0x80000000U | AFIO_PCF1_TIMER9_REMAP) /*!< TIMER9 remapping */ -#define GPIO_TIMER10_REMAP ((uint32_t)0x80000000U | AFIO_PCF1_TIMER10_REMAP) /*!< TIMER10 remapping */ -#define GPIO_TIMER12_REMAP ((uint32_t)0x80000000U | AFIO_PCF1_TIMER12_REMAP) /*!< TIMER12 remapping */ -#define GPIO_TIMER13_REMAP ((uint32_t)0x80000000U | AFIO_PCF1_TIMER13_REMAP) /*!< TIMER13 remapping */ -#define GPIO_EXMC_NADV_REMAP ((uint32_t)0x80000000U | AFIO_PCF1_EXMC_NADV) /*!< EXMC_NADV connect/disconnect */ -#define GPIO_CTC_REMAP0 ((uint32_t)0x801B0000U | PCF1_CTC_REMAP(1)) /*!< CTC remapping(PD15) */ -#define GPIO_CTC_REMAP1 ((uint32_t)0x801B0000U | PCF1_CTC_REMAP(2)) /*!< CTC remapping(PF0) */ - -#ifdef GD32F30X_CL -/* ethernet MII or RMII PHY selection */ -#define GPIO_ENET_PHY_MII ((uint32_t)0x00000000U) /*!< configure ethernet MAC for connection with an MII PHY */ -#define GPIO_ENET_PHY_RMII AFIO_PCF0_ENET_PHY_SEL /*!< configure ethernet MAC for connection with an RMII PHY */ -#endif /* GD32F30X_CL */ - -/* I/O compensation cell enable/disable */ -#define GPIO_COMPENSATION_ENABLE AFIO_CPSCTL_CPS_EN /*!< I/O compensation cell is enable */ -#define GPIO_COMPENSATION_DISABLE ((uint32_t)0x00000000U) /*!< I/O compensation cell is disable */ - -/* function declarations */ -/* reset GPIO port */ -void gpio_deinit(uint32_t gpio_periph); -/* reset alternate function I/O(AFIO) */ -void gpio_afio_deinit(void); -/* GPIO parameter initialization */ -void gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin); - -/* set GPIO pin bit */ -void gpio_bit_set(uint32_t gpio_periph, uint32_t pin); -/* reset GPIO pin bit */ -void gpio_bit_reset(uint32_t gpio_periph, uint32_t pin); -/* write data to the specified GPIO pin */ -void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value); -/* write data to the specified GPIO port */ -void gpio_port_write(uint32_t gpio_periph, uint16_t data); - -/* get GPIO pin input status */ -FlagStatus gpio_input_bit_get(uint32_t gpio_periph, uint32_t pin); -/* get GPIO port input status */ -uint16_t gpio_input_port_get(uint32_t gpio_periph); -/* get GPIO pin output status */ -FlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin); -/* get GPIO port output status */ -uint16_t gpio_output_port_get(uint32_t gpio_periph); -/* configure GPIO pin remap */ -void gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue); - -#ifdef GD32F30X_CL -/* select ethernet MII or RMII PHY */ -void gpio_ethernet_phy_select(uint32_t enet_sel); -#endif /* GD32F30X_CL */ - -/* select GPIO pin exti sources */ -void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin); - -/* configure GPIO pin event output */ -void gpio_event_output_config(uint8_t output_port, uint8_t output_pin); -/* enable GPIO pin event output */ -void gpio_event_output_enable(void); -/* disable GPIO pin event output */ -void gpio_event_output_disable(void); - -/* lock GPIO pin bit */ -void gpio_pin_lock(uint32_t gpio_periph, uint32_t pin); -/* configure the I/O compensation cell */ -void gpio_compensation_config(uint32_t compensation); -/* check the I/O compensation cell is ready or not */ -FlagStatus gpio_compensation_flag_get(void); - -#endif /* GD32F30X_GPIO_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_i2c.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_i2c.h deleted file mode 100644 index 95d0fc6..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_i2c.h +++ /dev/null @@ -1,355 +0,0 @@ -/*! - \file gd32f30x_i2c.h - \brief definitions for the I2C - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2019-04-16, V2.0.1, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_I2C_H -#define GD32F30X_I2C_H - -#include "gd32f30x.h" - -/* I2Cx(x=0,1) definitions */ -#define I2C0 I2C_BASE /*!< I2C0 base address */ -#define I2C1 (I2C_BASE + 0x00000400U) /*!< I2C1 base address */ - -/* registers definitions */ -#define I2C_CTL0(i2cx) REG32((i2cx) + 0x00U) /*!< I2C control register 0 */ -#define I2C_CTL1(i2cx) REG32((i2cx) + 0x04U) /*!< I2C control register 1 */ -#define I2C_SADDR0(i2cx) REG32((i2cx) + 0x08U) /*!< I2C slave address register 0*/ -#define I2C_SADDR1(i2cx) REG32((i2cx) + 0x0CU) /*!< I2C slave address register */ -#define I2C_DATA(i2cx) REG32((i2cx) + 0x10U) /*!< I2C transfer buffer register */ -#define I2C_STAT0(i2cx) REG32((i2cx) + 0x14U) /*!< I2C transfer status register 0 */ -#define I2C_STAT1(i2cx) REG32((i2cx) + 0x18U) /*!< I2C transfer status register */ -#define I2C_CKCFG(i2cx) REG32((i2cx) + 0x1CU) /*!< I2C clock configure register */ -#define I2C_RT(i2cx) REG32((i2cx) + 0x20U) /*!< I2C rise time register */ -#define I2C_FMPCFG(i2cx) REG32((i2cx) + 0x90U) /*!< I2C fast-mode-plus configure register */ - -/* bits definitions */ -/* I2Cx_CTL0 */ -#define I2C_CTL0_I2CEN BIT(0) /*!< peripheral enable */ -#define I2C_CTL0_SMBEN BIT(1) /*!< SMBus mode */ -#define I2C_CTL0_SMBSEL BIT(3) /*!< SMBus type */ -#define I2C_CTL0_ARPEN BIT(4) /*!< ARP enable */ -#define I2C_CTL0_PECEN BIT(5) /*!< PEC enable */ -#define I2C_CTL0_GCEN BIT(6) /*!< general call enable */ -#define I2C_CTL0_SS BIT(7) /*!< clock stretching disable (slave mode) */ -#define I2C_CTL0_START BIT(8) /*!< start generation */ -#define I2C_CTL0_STOP BIT(9) /*!< stop generation */ -#define I2C_CTL0_ACKEN BIT(10) /*!< acknowledge enable */ -#define I2C_CTL0_POAP BIT(11) /*!< acknowledge/PEC position (for data reception) */ -#define I2C_CTL0_PECTRANS BIT(12) /*!< packet error checking */ -#define I2C_CTL0_SALT BIT(13) /*!< SMBus alert */ -#define I2C_CTL0_SRESET BIT(15) /*!< software reset */ - -/* I2Cx_CTL1 */ -#define I2C_CTL1_I2CCLK BITS(0,6) /*!< I2CCLK[6:0] bits (peripheral clock frequency) */ -#define I2C_CTL1_ERRIE BIT(8) /*!< error interrupt inable */ -#define I2C_CTL1_EVIE BIT(9) /*!< event interrupt enable */ -#define I2C_CTL1_BUFIE BIT(10) /*!< buffer interrupt enable */ -#define I2C_CTL1_DMAON BIT(11) /*!< DMA requests enable */ -#define I2C_CTL1_DMALST BIT(12) /*!< DMA last transfer */ - -/* I2Cx_SADDR0 */ -#define I2C_SADDR0_ADDRESS0 BIT(0) /*!< bit 0 of a 10-bit address */ -#define I2C_SADDR0_ADDRESS BITS(1,7) /*!< 7-bit address or bits 7:1 of a 10-bit address */ -#define I2C_SADDR0_ADDRESS_H BITS(8,9) /*!< highest two bits of a 10-bit address */ -#define I2C_SADDR0_ADDFORMAT BIT(15) /*!< address mode for the I2C slave */ - -/* I2Cx_SADDR1 */ -#define I2C_SADDR1_DUADEN BIT(0) /*!< aual-address mode switch */ -#define I2C_SADDR1_ADDRESS2 BITS(1,7) /*!< second I2C address for the slave in dual-address mode */ - -/* I2Cx_DATA */ -#define I2C_DATA_TRB BITS(0,7) /*!< 8-bit data register */ - -/* I2Cx_STAT0 */ -#define I2C_STAT0_SBSEND BIT(0) /*!< start bit (master mode) */ -#define I2C_STAT0_ADDSEND BIT(1) /*!< address sent (master mode)/matched (slave mode) */ -#define I2C_STAT0_BTC BIT(2) /*!< byte transfer finished */ -#define I2C_STAT0_ADD10SEND BIT(3) /*!< 10-bit header sent (master mode) */ -#define I2C_STAT0_STPDET BIT(4) /*!< stop detection (slave mode) */ -#define I2C_STAT0_RBNE BIT(6) /*!< data register not empty (receivers) */ -#define I2C_STAT0_TBE BIT(7) /*!< data register empty (transmitters) */ -#define I2C_STAT0_BERR BIT(8) /*!< bus error */ -#define I2C_STAT0_LOSTARB BIT(9) /*!< arbitration lost (master mode) */ -#define I2C_STAT0_AERR BIT(10) /*!< acknowledge failure */ -#define I2C_STAT0_OUERR BIT(11) /*!< overrun/underrun */ -#define I2C_STAT0_PECERR BIT(12) /*!< PEC error in reception */ -#define I2C_STAT0_SMBTO BIT(14) /*!< timeout signal in SMBus mode */ -#define I2C_STAT0_SMBALT BIT(15) /*!< SMBus alert status */ - -/* I2Cx_STAT1 */ -#define I2C_STAT1_MASTER BIT(0) /*!< master/slave */ -#define I2C_STAT1_I2CBSY BIT(1) /*!< bus busy */ -#define I2C_STAT1_TR BIT(2) /*!< transmitter/receiver */ -#define I2C_STAT1_RXGC BIT(4) /*!< general call address (slave mode) */ -#define I2C_STAT1_DEFSMB BIT(5) /*!< SMBus device default address (slave mode) */ -#define I2C_STAT1_HSTSMB BIT(6) /*!< SMBus host header (slave mode) */ -#define I2C_STAT1_DUMODF BIT(7) /*!< dual flag (slave mode) */ -#define I2C_STAT1_PECV BITS(8,15) /*!< packet error checking value */ - -/* I2Cx_CKCFG */ -#define I2C_CKCFG_CLKC BITS(0,11) /*!< clock control register in fast/standard mode or fast mode plus(master mode) */ -#define I2C_CKCFG_DTCY BIT(14) /*!< duty cycle of fast mode or fast mode plus */ -#define I2C_CKCFG_FAST BIT(15) /*!< I2C speed selection in master mode */ - -/* I2Cx_RT */ -#define I2C_RT_RISETIME BITS(0,6) /*!< maximum rise time in fast/standard mode or fast mode plus(master mode) */ - -/* I2Cx_FMPCFG */ -#define I2C_FMPCFG_FMPEN BIT(0) /*!< fast mode plus enable bit */ - -/* constants definitions */ -/* define the I2C bit position and its register index offset */ -#define I2C_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define I2C_REG_VAL(i2cx, offset) (REG32((i2cx) + (((uint32_t)(offset) & 0xFFFFU) >> 6))) -#define I2C_BIT_POS(val) ((uint32_t)(val) & 0x1FU) -#define I2C_REGIDX_BIT2(regidx, bitpos, regidx2, bitpos2) (((uint32_t)(regidx2) << 22) | (uint32_t)((bitpos2) << 16)\ - | (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))) -#define I2C_REG_VAL2(i2cx, offset) (REG32((i2cx) + ((uint32_t)(offset) >> 22))) -#define I2C_BIT_POS2(val) (((uint32_t)(val) & 0x1F0000U) >> 16) - -/* register offset */ -#define I2C_CTL1_REG_OFFSET 0x04U /*!< CTL1 register offset */ -#define I2C_STAT0_REG_OFFSET 0x14U /*!< STAT0 register offset */ -#define I2C_STAT1_REG_OFFSET 0x18U /*!< STAT1 register offset */ - -/* I2C flags */ -typedef enum -{ - /* flags in STAT0 register */ - I2C_FLAG_SBSEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 0U), /*!< start condition sent out in master mode */ - I2C_FLAG_ADDSEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 1U), /*!< address is sent in master mode or received and matches in slave mode */ - I2C_FLAG_BTC = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 2U), /*!< byte transmission finishes */ - I2C_FLAG_ADD10SEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 3U), /*!< header of 10-bit address is sent in master mode */ - I2C_FLAG_STPDET = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 4U), /*!< stop condition detected in slave mode */ - I2C_FLAG_RBNE = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 6U), /*!< I2C_DATA is not Empty during receiving */ - I2C_FLAG_TBE = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 7U), /*!< I2C_DATA is empty during transmitting */ - I2C_FLAG_BERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 8U), /*!< a bus error occurs indication a unexpected start or stop condition on I2C bus */ - I2C_FLAG_LOSTARB = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 9U), /*!< arbitration lost in master mode */ - I2C_FLAG_AERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 10U), /*!< acknowledge error */ - I2C_FLAG_OUERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 11U), /*!< over-run or under-run situation occurs in slave mode */ - I2C_FLAG_PECERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 12U), /*!< PEC error when receiving data */ - I2C_FLAG_SMBTO = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 14U), /*!< timeout signal in SMBus mode */ - I2C_FLAG_SMBALT = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 15U), /*!< SMBus alert status */ - /* flags in STAT1 register */ - I2C_FLAG_MASTER = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 0U), /*!< a flag indicating whether I2C block is in master or slave mode */ - I2C_FLAG_I2CBSY = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 1U), /*!< busy flag */ - I2C_FLAG_TRS = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 2U), /*!< whether the I2C is a transmitter or a receiver */ - I2C_FLAG_RXGC = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 4U), /*!< general call address (00h) received */ - I2C_FLAG_DEFSMB = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 5U), /*!< default address of SMBus device */ - I2C_FLAG_HSTSMB = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 6U), /*!< SMBus host header detected in slave mode */ - I2C_FLAG_DUMOD = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 7U) /*!< dual flag in slave mode indicating which address is matched in dual-address mode */ -}i2c_flag_enum; - -/* I2C interrupt flags */ -typedef enum -{ - /* interrupt flags in CTL1 register */ - I2C_INT_FLAG_SBSEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 0U), /*!< start condition sent out in master mode interrupt flag */ - I2C_INT_FLAG_ADDSEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 1U), /*!< address is sent in master mode or received and matches in slave mode interrupt flag */ - I2C_INT_FLAG_BTC = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 2U), /*!< byte transmission finishes */ - I2C_INT_FLAG_ADD10SEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 3U), /*!< header of 10-bit address is sent in master mode interrupt flag */ - I2C_INT_FLAG_STPDET = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 4U), /*!< stop condition detected in slave mode interrupt flag */ - I2C_INT_FLAG_RBNE = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 6U), /*!< I2C_DATA is not Empty during receiving interrupt flag */ - I2C_INT_FLAG_TBE = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 7U), /*!< I2C_DATA is empty during transmitting interrupt flag */ - I2C_INT_FLAG_BERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 8U), /*!< a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag */ - I2C_INT_FLAG_LOSTARB = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 9U), /*!< arbitration lost in master mode interrupt flag */ - I2C_INT_FLAG_AERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 10U), /*!< acknowledge error interrupt flag */ - I2C_INT_FLAG_OUERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 11U), /*!< over-run or under-run situation occurs in slave mode interrupt flag */ - I2C_INT_FLAG_PECERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 12U), /*!< PEC error when receiving data interrupt flag */ - I2C_INT_FLAG_SMBTO = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 14U), /*!< timeout signal in SMBus mode interrupt flag */ - I2C_INT_FLAG_SMBALT = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 15U), /*!< SMBus Alert status interrupt flag */ -}i2c_interrupt_flag_enum; - -/* I2C interrupt enable or disable */ -typedef enum -{ - /* interrupt in CTL1 register */ - I2C_INT_ERR = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 8U), /*!< error interrupt enable */ - I2C_INT_EV = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 9U), /*!< event interrupt enable */ - I2C_INT_BUF = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 10U), /*!< buffer interrupt enable */ -}i2c_interrupt_enum; - -/* SMBus/I2C mode switch and SMBus type selection */ -#define I2C_I2CMODE_ENABLE ((uint32_t)0x00000000U) /*!< I2C mode */ -#define I2C_SMBUSMODE_ENABLE I2C_CTL0_SMBEN /*!< SMBus mode */ - -/* SMBus/I2C mode switch and SMBus type selection */ -#define I2C_SMBUS_DEVICE ((uint32_t)0x00000000U) /*!< SMBus mode device type */ -#define I2C_SMBUS_HOST I2C_CTL0_SMBSEL /*!< SMBus mode host type */ - -/* I2C transfer direction */ -#define I2C_RECEIVER ((uint32_t)0x00000001U) /*!< receiver */ -#define I2C_TRANSMITTER ((uint32_t)0xFFFFFFFEU) /*!< transmitter */ - -/* whether or not to send an ACK */ -#define I2C_ACK_DISABLE ((uint32_t)0x00000000U) /*!< ACK will be not sent */ -#define I2C_ACK_ENABLE ((uint32_t)0x00000001U) /*!< ACK will be sent */ - -/* I2C POAP position*/ -#define I2C_ACKPOS_NEXT ((uint32_t)0x00000000U) /*!< ACKEN bit decides whether or not to send ACK for the next byte */ -#define I2C_ACKPOS_CURRENT ((uint32_t)0x00000001U) /*!< ACKEN bit decides whether or not to send ACK or not for the current byte */ - -/* I2C dual-address mode switch */ -#define I2C_DUADEN_DISABLE ((uint32_t)0x00000000U) /*!< dual-address mode disabled */ -#define I2C_DUADEN_ENABLE ((uint32_t)0x00000001U) /*!< dual-address mode enabled */ - -/* whether or not to stretch SCL low */ -#define I2C_SCLSTRETCH_ENABLE ((uint32_t)0x00000000U) /*!< SCL stretching is enabled */ -#define I2C_SCLSTRETCH_DISABLE I2C_CTL0_SS /*!< SCL stretching is disabled */ - -/* whether or not to response to a general call */ -#define I2C_GCEN_ENABLE I2C_CTL0_GCEN /*!< slave will response to a general call */ -#define I2C_GCEN_DISABLE ((uint32_t)0x00000000U) /*!< slave will not response to a general call */ - -/* software reset I2C */ -#define I2C_SRESET_SET I2C_CTL0_SRESET /*!< I2C is under reset */ -#define I2C_SRESET_RESET ((uint32_t)0x00000000U) /*!< I2C is not under reset */ - -/* I2C DMA mode configure */ -/* DMA mode switch */ -#define I2C_DMA_ON I2C_CTL1_DMAON /*!< DMA mode enabled */ -#define I2C_DMA_OFF ((uint32_t)0x00000000U) /*!< DMA mode disabled */ - -/* flag indicating DMA last transfer */ -#define I2C_DMALST_ON I2C_CTL1_DMALST /*!< next DMA EOT is the last transfer */ -#define I2C_DMALST_OFF ((uint32_t)0x00000000U) /*!< next DMA EOT is not the last transfer */ - -/* I2C PEC configure */ -/* PEC enable */ -#define I2C_PEC_ENABLE I2C_CTL0_PECEN /*!< PEC calculation on */ -#define I2C_PEC_DISABLE ((uint32_t)0x00000000U) /*!< PEC calculation off */ - -/* PEC transfer */ -#define I2C_PECTRANS_ENABLE I2C_CTL0_PECTRANS /*!< transfer PEC */ -#define I2C_PECTRANS_DISABLE ((uint32_t)0x00000000U) /*!< not transfer PEC value */ - -/* I2C SMBus configure */ -/* issue or not alert through SMBA pin */ -#define I2C_SALTSEND_ENABLE I2C_CTL0_SALT /*!< issue alert through SMBA pin */ -#define I2C_SALTSEND_DISABLE ((uint32_t)0x00000000U) /*!< not issue alert through SMBA */ - -/* ARP protocol in SMBus switch */ -#define I2C_ARP_ENABLE I2C_CTL0_ARPEN /*!< ARP enable */ -#define I2C_ARP_DISABLE ((uint32_t)0x00000000U) /*!< ARP disable */ - -/* fast mode plus enable */ -#define I2C_FAST_MODE_PLUS_ENABLE I2C_FMPCFG_FMPEN /*!< fast mode plus enable */ -#define I2C_FAST_MODE_PLUS_DISABLE ((uint32_t)0x00000000U) /*!< fast mode plus disable */ - -/* transmit I2C data */ -#define DATA_TRANS(regval) (BITS(0,7) & ((uint32_t)(regval) << 0)) - -/* receive I2C data */ -#define DATA_RECV(regval) GET_BITS((uint32_t)(regval), 0, 7) - -/* I2C duty cycle in fast mode or fast mode plus */ -#define I2C_DTCY_2 ((uint32_t)0x00000000U) /*!< in I2C fast mode or fast mode plus Tlow/Thigh = 2 */ -#define I2C_DTCY_16_9 I2C_CKCFG_DTCY /*!< in I2C fast mode or fast mode plus Tlow/Thigh = 16/9 */ - -/* address mode for the I2C slave */ -#define I2C_ADDFORMAT_7BITS ((uint32_t)0x00000000U) /*!< address:7 bits */ -#define I2C_ADDFORMAT_10BITS I2C_SADDR0_ADDFORMAT /*!< address:10 bits */ - -/* function declarations */ -/* reset I2C */ -void i2c_deinit(uint32_t i2c_periph); -/* configure I2C clock */ -void i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc); -/* configure I2C address */ -void i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr); -/* SMBus type selection */ -void i2c_smbus_type_config(uint32_t i2c_periph, uint32_t type); -/* whether or not to send an ACK */ -void i2c_ack_config(uint32_t i2c_periph, uint32_t ack); -/* configure I2C POAP position */ -void i2c_ackpos_config(uint32_t i2c_periph, uint32_t pos); -/* master sends slave address */ -void i2c_master_addressing(uint32_t i2c_periph, uint32_t addr, uint32_t trandirection); -/* enable dual-address mode */ -void i2c_dualaddr_enable(uint32_t i2c_periph, uint32_t dualaddr); -/* disable dual-address mode */ -void i2c_dualaddr_disable(uint32_t i2c_periph); -/* enable I2C */ -void i2c_enable(uint32_t i2c_periph); -/* disable I2C */ -void i2c_disable(uint32_t i2c_periph); - -/* generate a START condition on I2C bus */ -void i2c_start_on_bus(uint32_t i2c_periph); -/* generate a STOP condition on I2C bus */ -void i2c_stop_on_bus(uint32_t i2c_periph); -/* I2C transmit data function */ -void i2c_data_transmit(uint32_t i2c_periph, uint8_t data); -/* I2C receive data function */ -uint8_t i2c_data_receive(uint32_t i2c_periph); -/* enable I2C DMA mode */ -void i2c_dma_enable(uint32_t i2c_periph, uint32_t dmastate); -/* configure whether next DMA EOT is DMA last transfer or not */ -void i2c_dma_last_transfer_config(uint32_t i2c_periph, uint32_t dmalast); -/* whether to stretch SCL low when data is not ready in slave mode */ -void i2c_stretch_scl_low_config(uint32_t i2c_periph, uint32_t stretchpara); -/* whether or not to response to a general call */ -void i2c_slave_response_to_gcall_config(uint32_t i2c_periph, uint32_t gcallpara); -/* software reset I2C */ -void i2c_software_reset_config(uint32_t i2c_periph, uint32_t sreset); - -/* I2C PEC calculation on or off */ -void i2c_pec_enable(uint32_t i2c_periph, uint32_t pecstate); -/* I2C whether to transfer PEC value */ -void i2c_pec_transfer_enable(uint32_t i2c_periph, uint32_t pecpara); -/* packet error checking value */ -uint8_t i2c_pec_value_get(uint32_t i2c_periph); -/* I2C issue alert through SMBA pin */ -void i2c_smbus_issue_alert(uint32_t i2c_periph, uint32_t smbuspara); -/* I2C ARP protocol in SMBus switch */ -void i2c_smbus_arp_enable(uint32_t i2c_periph, uint32_t arpstate); - -/* check I2C flag is set or not */ -FlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag); -/* clear I2C flag */ -void i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag); -/* enable I2C interrupt */ -void i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt); -/* disable I2C interrupt */ -void i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt); -/* check I2C interrupt flag */ -FlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag); -/* clear I2C interrupt flag */ -void i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag); - -#endif /* GD32F30X_I2C_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_misc.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_misc.h deleted file mode 100644 index 3b58b30..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_misc.h +++ /dev/null @@ -1,94 +0,0 @@ -/*! - \file gd32f30x_misc.h - \brief definitions for the MISC - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_MISC_H -#define GD32F30X_MISC_H - -#include "gd32f30x.h" - -/* constants definitions */ -/* set the RAM and FLASH base address */ -#define NVIC_VECTTAB_RAM ((uint32_t)0x20000000) /*!< RAM base address */ -#define NVIC_VECTTAB_FLASH ((uint32_t)0x08000000) /*!< Flash base address */ - -/* set the NVIC vector table offset mask */ -#define NVIC_VECTTAB_OFFSET_MASK ((uint32_t)0x1FFFFF80) - -/* the register key mask, if you want to do the write operation, you should write 0x5FA to VECTKEY bits */ -#define NVIC_AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) - -/* priority group - define the pre-emption priority and the subpriority */ -#define NVIC_PRIGROUP_PRE0_SUB4 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority 4 bits for subpriority */ -#define NVIC_PRIGROUP_PRE1_SUB3 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority 3 bits for subpriority */ -#define NVIC_PRIGROUP_PRE2_SUB2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority 2 bits for subpriority */ -#define NVIC_PRIGROUP_PRE3_SUB1 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority 1 bits for subpriority */ -#define NVIC_PRIGROUP_PRE4_SUB0 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority 0 bits for subpriority */ - -/* choose the method to enter or exit the lowpower mode */ -#define SCB_SCR_SLEEPONEXIT ((uint8_t)0x02) /*!< choose the the system whether enter low power mode by exiting from ISR */ -#define SCB_SCR_SLEEPDEEP ((uint8_t)0x04) /*!< choose the the system enter the DEEPSLEEP mode or SLEEP mode */ -#define SCB_SCR_SEVONPEND ((uint8_t)0x10) /*!< choose the interrupt source that can wake up the lowpower mode */ - -#define SCB_LPM_SLEEP_EXIT_ISR SCB_SCR_SLEEPONEXIT -#define SCB_LPM_DEEPSLEEP SCB_SCR_SLEEPDEEP -#define SCB_LPM_WAKE_BY_ALL_INT SCB_SCR_SEVONPEND - -/* choose the systick clock source */ -#define SYSTICK_CLKSOURCE_HCLK_DIV8 ((uint32_t)0xFFFFFFFBU) /*!< systick clock source is from HCLK/8 */ -#define SYSTICK_CLKSOURCE_HCLK ((uint32_t)0x00000004U) /*!< systick clock source is from HCLK */ - -/* function declarations */ -/* set the priority group */ -void nvic_priority_group_set(uint32_t nvic_prigroup); - -/* enable NVIC request */ -void nvic_irq_enable(uint8_t nvic_irq, uint8_t nvic_irq_pre_priority, uint8_t nvic_irq_sub_priority); -/* disable NVIC request */ -void nvic_irq_disable(uint8_t nvic_irq); - -/* set the NVIC vector table base address */ -void nvic_vector_table_set(uint32_t nvic_vict_tab, uint32_t offset); - -/* set the state of the low power mode */ -void system_lowpower_set(uint8_t lowpower_mode); -/* reset the state of the low power mode */ -void system_lowpower_reset(uint8_t lowpower_mode); - -/* set the systick clock source */ -void systick_clksource_set(uint32_t systick_clksource); - -#endif /* GD32F30X_MISC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_pmu.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_pmu.h deleted file mode 100644 index 377a47c..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_pmu.h +++ /dev/null @@ -1,187 +0,0 @@ -/*! - \file gd32f30x_pmu.h - \brief definitions for the PMU - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - - -#ifndef GD32F30X_PMU_H -#define GD32F30X_PMU_H - -#include "gd32f30x.h" - -/* PMU definitions */ -#define PMU PMU_BASE /*!< PMU base address */ - -/* registers definitions */ -#define PMU_CTL REG32((PMU) + 0x00U) /*!< PMU control register */ -#define PMU_CS REG32((PMU) + 0x04U) /*!< PMU control and status register */ - -/* bits definitions */ -/* PMU_CTL */ -#define PMU_CTL_LDOLP BIT(0) /*!< LDO low power mode */ -#define PMU_CTL_STBMOD BIT(1) /*!< standby mode */ -#define PMU_CTL_WURST BIT(2) /*!< wakeup flag reset */ -#define PMU_CTL_STBRST BIT(3) /*!< standby flag reset */ -#define PMU_CTL_LVDEN BIT(4) /*!< low voltage detector enable */ -#define PMU_CTL_LVDT BITS(5,7) /*!< low voltage detector threshold */ -#define PMU_CTL_BKPWEN BIT(8) /*!< backup domain write enable */ -#define PMU_CTL_LDLP BIT(10) /*!< low-driver mode when use low power LDO */ -#define PMU_CTL_LDNP BIT(11) /*!< low-driver mode when use normal power LDO */ -#define PMU_CTL_LDOVS BITS(14,15) /*!< LDO output voltage select */ -#define PMU_CTL_HDEN BIT(16) /*!< high-driver mode enable */ -#define PMU_CTL_HDS BIT(17) /*!< high-driver mode switch */ -#define PMU_CTL_LDEN BITS(18,19) /*!< low-driver mode enable in deep-sleep mode */ - -/* PMU_CS */ -#define PMU_CS_WUF BIT(0) /*!< wakeup flag */ -#define PMU_CS_STBF BIT(1) /*!< standby flag */ -#define PMU_CS_LVDF BIT(2) /*!< low voltage detector status flag */ -#define PMU_CS_WUPEN BIT(8) /*!< wakeup pin enable */ -#define PMU_CS_LDOVSRF BIT(14) /*!< LDO voltage select ready flag */ -#define PMU_CS_HDRF BIT(16) /*!< high-driver ready flag */ -#define PMU_CS_HDSRF BIT(17) /*!< high-driver switch ready flag */ -#define PMU_CS_LDRF BITS(18,19) /*!< Low-driver mode ready flag */ - -/* constants definitions */ -/* PMU low voltage detector threshold definitions */ -#define CTL_LVDT(regval) (BITS(5,7)&((uint32_t)(regval)<<5)) -#define PMU_LVDT_0 CTL_LVDT(0) /*!< voltage threshold is 2.1V */ -#define PMU_LVDT_1 CTL_LVDT(1) /*!< voltage threshold is 2.3V */ -#define PMU_LVDT_2 CTL_LVDT(2) /*!< voltage threshold is 2.4V */ -#define PMU_LVDT_3 CTL_LVDT(3) /*!< voltage threshold is 2.6V */ -#define PMU_LVDT_4 CTL_LVDT(4) /*!< voltage threshold is 2.7V */ -#define PMU_LVDT_5 CTL_LVDT(5) /*!< voltage threshold is 2.9V */ -#define PMU_LVDT_6 CTL_LVDT(6) /*!< voltage threshold is 3.0V */ -#define PMU_LVDT_7 CTL_LVDT(7) /*!< voltage threshold is 3.1V */ - -/* PMU LDO output voltage select definitions */ -#define CTL_LDOVS(regval) (BITS(14,15)&((uint32_t)(regval)<<14)) -#define PMU_LDOVS_LOW CTL_LDOVS(1) /*!< LDO output voltage low mode */ -#define PMU_LDOVS_MID CTL_LDOVS(2) /*!< LDO output voltage mid mode */ -#define PMU_LDOVS_HIGH CTL_LDOVS(3) /*!< LDO output voltage high mode */ - -/* PMU high-driver mode switch */ -#define CTL_HDS(regval) (BIT(17)&((uint32_t)(regval)<<17)) -#define PMU_HIGHDR_SWITCH_NONE CTL_HDS(0) /*!< no high-driver mode switch */ -#define PMU_HIGHDR_SWITCH_EN CTL_HDS(1) /*!< high-driver mode switch */ - -/* PMU low-driver mode when use low power LDO */ -#define CTL_LDLP(regval) (BIT(10)&((uint32_t)(regval)<<10)) -#define PMU_NORMALDR_LOWPWR CTL_LDLP(0) /*!< normal driver when use low power LDO */ -#define PMU_LOWDR_LOWPWR CTL_LDLP(1) /*!< low-driver mode enabled when LDEN is 11 and use low power LDO */ - -/* PMU low-driver mode when use normal power LDO */ -#define CTL_LDNP(regval) (BIT(11)&((uint32_t)(regval)<<11)) -#define PMU_NORMALDR_NORMALPWR CTL_LDNP(0) /*!< normal driver when use normal power LDO */ -#define PMU_LOWDR_NORMALPWR CTL_LDNP(1) /*!< low-driver mode enabled when LDEN is 11 and use normal power LDO */ - -/* PMU low power mode ready flag definitions */ -#define CS_LDRF(regval) (BITS(18,19)&((uint32_t)(regval)<<18)) -#define PMU_LDRF_NORMAL CS_LDRF(0) /*!< normal driver in deep-sleep mode */ -#define PMU_LDRF_LOWDRIVER CS_LDRF(3) /*!< low-driver mode in deep-sleep mode */ - -/* PMU flag definitions */ -#define PMU_FLAG_WAKEUP PMU_CS_WUF /*!< wakeup flag status */ -#define PMU_FLAG_STANDBY PMU_CS_STBF /*!< standby flag status */ -#define PMU_FLAG_LVD PMU_CS_LVDF /*!< lvd flag status */ -#define PMU_FLAG_LDOVSRF PMU_CS_LDOVSRF /*!< LDO voltage select ready flag */ -#define PMU_FLAG_HDRF PMU_CS_HDRF /*!< high-driver ready flag */ -#define PMU_FLAG_HDSRF PMU_CS_HDSRF /*!< high-driver switch ready flag */ -#define PMU_FLAG_LDRF PMU_CS_LDRF /*!< low-driver mode ready flag */ - -/* PMU ldo definitions */ -#define PMU_LDO_NORMAL ((uint32_t)0x00000000U) /*!< LDO normal work when PMU enter deepsleep mode */ -#define PMU_LDO_LOWPOWER PMU_CTL_LDOLP /*!< LDO work at low power status when PMU enter deepsleep mode */ - -/* PMU flag reset definitions */ -#define PMU_FLAG_RESET_WAKEUP ((uint8_t)0x00U) /*!< wakeup flag reset */ -#define PMU_FLAG_RESET_STANDBY ((uint8_t)0x01U) /*!< standby flag reset */ - -/* PMU command constants definitions */ -#define WFI_CMD ((uint8_t)0x00U) /*!< use WFI command */ -#define WFE_CMD ((uint8_t)0x01U) /*!< use WFE command */ - -/* function declarations */ -/* reset PMU registers */ -void pmu_deinit(void); - -/* select low voltage detector threshold */ -void pmu_lvd_select(uint32_t lvdt_n); -/* select LDO output voltage */ -void pmu_ldo_output_select(uint32_t ldo_output); -/* disable PMU lvd */ -void pmu_lvd_disable(void); - -/* functions of low-driver mode and high-driver mode in deep-sleep mode */ -/* switch high-driver mode */ -void pmu_highdriver_switch_select(uint32_t highdr_switch); -/* enable high-driver mode */ -void pmu_highdriver_mode_enable(void); -/* disable high-driver mode */ -void pmu_highdriver_mode_disable(void); -/* enable low-driver mode in deep-sleep mode */ -void pmu_lowdriver_mode_enable(void); -/* disable low-driver mode in deep-sleep mode */ -void pmu_lowdriver_mode_disable(void); -/* in deep-sleep mode, driver mode when use low power LDO */ -void pmu_lowpower_driver_config(uint32_t mode); -/* in deep-sleep mode, driver mode when use normal power LDO */ -void pmu_normalpower_driver_config(uint32_t mode); - -/* set PMU mode */ -/* PMU work at sleep mode */ -void pmu_to_sleepmode(uint8_t sleepmodecmd); -/* PMU work at deepsleep mode */ -void pmu_to_deepsleepmode(uint32_t ldo, uint8_t deepsleepmodecmd); -/* PMU work at standby mode */ -void pmu_to_standbymode(uint8_t standbymodecmd); -/* enable PMU wakeup pin */ -void pmu_wakeup_pin_enable(void); -/* disable PMU wakeup pin */ -void pmu_wakeup_pin_disable(void); - -/* backup related functions */ -/* enable backup domain write */ -void pmu_backup_write_enable(void); -/* disable backup domain write */ -void pmu_backup_write_disable(void); - -/* flag functions */ -/* clear flag bit */ -void pmu_flag_clear(uint32_t flag_reset); -/* get flag state */ -FlagStatus pmu_flag_get(uint32_t flag); - -#endif /* GD32F30X_PMU_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_rcu.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_rcu.h deleted file mode 100644 index dfeb6a0..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_rcu.h +++ /dev/null @@ -1,1053 +0,0 @@ -/*! - \file gd32f30x_rcu.h - \brief definitions for the RCU - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_RCU_H -#define GD32F30X_RCU_H - -#include "gd32f30x.h" - -/* RCU definitions */ -#define RCU RCU_BASE - -/* registers definitions */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define RCU_CTL REG32(RCU + 0x00U) /*!< control register */ -#define RCU_CFG0 REG32(RCU + 0x04U) /*!< clock configuration register 0 */ -#define RCU_INT REG32(RCU + 0x08U) /*!< clock interrupt register */ -#define RCU_APB2RST REG32(RCU + 0x0CU) /*!< APB2 reset register */ -#define RCU_APB1RST REG32(RCU + 0x10U) /*!< APB1 reset register */ -#define RCU_AHBEN REG32(RCU + 0x14U) /*!< AHB enable register */ -#define RCU_APB2EN REG32(RCU + 0x18U) /*!< APB2 enable register */ -#define RCU_APB1EN REG32(RCU + 0x1CU) /*!< APB1 enable register */ -#define RCU_BDCTL REG32(RCU + 0x20U) /*!< backup domain control register */ -#define RCU_RSTSCK REG32(RCU + 0x24U) /*!< reset source / clock register */ -#define RCU_CFG1 REG32(RCU + 0x2CU) /*!< clock configuration register 1 */ -#define RCU_DSV REG32(RCU + 0x34U) /*!< deep-sleep mode voltage register */ -#define RCU_ADDCTL REG32(RCU + 0xC0U) /*!< Additional clock control register */ -#define RCU_ADDINT REG32(RCU + 0xCCU) /*!< Additional clock interrupt register */ -#define RCU_ADDAPB1RST REG32(RCU + 0xE0U) /*!< APB1 additional reset register */ -#define RCU_ADDAPB1EN REG32(RCU + 0xE4U) /*!< APB1 additional enable register */ -#elif defined(GD32F30X_CL) -#define RCU_CTL REG32(RCU + 0x00U) /*!< control register */ -#define RCU_CFG0 REG32(RCU + 0x04U) /*!< clock configuration register 0 */ -#define RCU_INT REG32(RCU + 0x08U) /*!< clock interrupt register */ -#define RCU_APB2RST REG32(RCU + 0x0CU) /*!< APB2 reset register */ -#define RCU_APB1RST REG32(RCU + 0x10U) /*!< APB1 reset register */ -#define RCU_AHBEN REG32(RCU + 0x14U) /*!< AHB1 enable register */ -#define RCU_APB2EN REG32(RCU + 0x18U) /*!< APB2 enable register */ -#define RCU_APB1EN REG32(RCU + 0x1CU) /*!< APB1 enable register */ -#define RCU_BDCTL REG32(RCU + 0x20U) /*!< backup domain control register */ -#define RCU_RSTSCK REG32(RCU + 0x24U) /*!< reset source / clock register */ -#define RCU_AHBRST REG32(RCU + 0x28U) /*!< AHB reset register */ -#define RCU_CFG1 REG32(RCU + 0x2CU) /*!< clock configuration register 1 */ -#define RCU_DSV REG32(RCU + 0x34U) /*!< deep-sleep mode voltage register */ -#define RCU_ADDCTL REG32(RCU + 0xC0U) /*!< Additional clock control register */ -#define RCU_ADDINT REG32(RCU + 0xCCU) /*!< Additional clock interrupt register */ -#define RCU_ADDAPB1RST REG32(RCU + 0xE0U) /*!< APB1 additional reset register */ -#define RCU_ADDAPB1EN REG32(RCU + 0xE4U) /*!< APB1 additional enable register */ -#endif /* GD32F30X_HD and GD32F30X_XD */ - -/* bits definitions */ -/* RCU_CTL */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define RCU_CTL_IRC8MEN BIT(0) /*!< internal high speed oscillator enable */ -#define RCU_CTL_IRC8MSTB BIT(1) /*!< IRC8M high speed internal oscillator stabilization flag */ -#define RCU_CTL_IRC8MADJ BITS(3,7) /*!< high speed internal oscillator clock trim adjust value */ -#define RCU_CTL_IRC8MCALIB BITS(8,15) /*!< high speed internal oscillator calibration value register */ -#define RCU_CTL_HXTALEN BIT(16) /*!< external high speed oscillator enable */ -#define RCU_CTL_HXTALSTB BIT(17) /*!< external crystal oscillator clock stabilization flag */ -#define RCU_CTL_HXTALBPS BIT(18) /*!< external crystal oscillator clock bypass mode enable */ -#define RCU_CTL_CKMEN BIT(19) /*!< HXTAL clock monitor enable */ -#define RCU_CTL_PLLEN BIT(24) /*!< PLL enable */ -#define RCU_CTL_PLLSTB BIT(25) /*!< PLL clock stabilization flag */ -#elif defined(GD32F30X_CL) -#define RCU_CTL_IRC8MEN BIT(0) /*!< internal high speed oscillator enable */ -#define RCU_CTL_IRC8MSTB BIT(1) /*!< IRC8M high speed internal oscillator stabilization flag */ -#define RCU_CTL_IRC8MADJ BITS(3,7) /*!< high speed internal oscillator clock trim adjust value */ -#define RCU_CTL_IRC8MCALIB BITS(8,15) /*!< high speed internal oscillator calibration value register */ -#define RCU_CTL_HXTALEN BIT(16) /*!< external high speed oscillator enable */ -#define RCU_CTL_HXTALSTB BIT(17) /*!< external crystal oscillator clock stabilization flag */ -#define RCU_CTL_HXTALBPS BIT(18) /*!< external crystal oscillator clock bypass mode enable */ -#define RCU_CTL_CKMEN BIT(19) /*!< HXTAL clock monitor enable */ -#define RCU_CTL_PLLEN BIT(24) /*!< PLL enable */ -#define RCU_CTL_PLLSTB BIT(25) /*!< PLL clock stabilization flag */ -#define RCU_CTL_PLL1EN BIT(26) /*!< PLL1 enable */ -#define RCU_CTL_PLL1STB BIT(27) /*!< PLL1 clock stabilization flag */ -#define RCU_CTL_PLL2EN BIT(28) /*!< PLL2 enable */ -#define RCU_CTL_PLL2STB BIT(29) /*!< PLL2 clock stabilization flag */ -#endif /* GD32F30X_HD and GD32F30X_XD */ - -/* RCU_CFG0 */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define RCU_CFG0_SCS BITS(0,1) /*!< system clock switch */ -#define RCU_CFG0_SCSS BITS(2,3) /*!< system clock switch status */ -#define RCU_CFG0_AHBPSC BITS(4,7) /*!< AHB prescaler selection */ -#define RCU_CFG0_APB1PSC BITS(8,10) /*!< APB1 prescaler selection */ -#define RCU_CFG0_APB2PSC BITS(11,13) /*!< APB2 prescaler selection */ -#define RCU_CFG0_ADCPSC BITS(14,15) /*!< ADC prescaler selection */ -#define RCU_CFG0_PLLSEL BIT(16) /*!< PLL clock source selection */ -#define RCU_CFG0_PREDV0 BIT(17) /*!< PREDV0 division factor */ -#define RCU_CFG0_PLLMF BITS(18,21) /*!< PLL clock multiplication factor */ -#define RCU_CFG0_USBDPSC BITS(22,23) /*!< USBD clock prescaler selection */ -#define RCU_CFG0_CKOUT0SEL BITS(24,26) /*!< CKOUT0 clock source selection */ -#define RCU_CFG0_PLLMF_4 BIT(27) /*!< bit 4 of PLLMF */ -#define RCU_CFG0_ADCPSC_2 BIT(28) /*!< bit 2 of ADCPSC */ -#define RCU_CFG0_PLLMF_5 BIT(30) /*!< bit 5 of PLLMF */ -#define RCU_CFG0_USBDPSC_2 BIT(31) /*!< bit 2 of USBDPSC */ -#elif defined(GD32F30X_CL) -#define RCU_CFG0_SCS BITS(0,1) /*!< system clock switch */ -#define RCU_CFG0_SCSS BITS(2,3) /*!< system clock switch status */ -#define RCU_CFG0_AHBPSC BITS(4,7) /*!< AHB prescaler selection */ -#define RCU_CFG0_APB1PSC BITS(8,10) /*!< APB1 prescaler selection */ -#define RCU_CFG0_APB2PSC BITS(11,13) /*!< APB2 prescaler selection */ -#define RCU_CFG0_ADCPSC BITS(14,15) /*!< ADC prescaler selection */ -#define RCU_CFG0_PLLSEL BIT(16) /*!< PLL clock source selection */ -#define RCU_CFG0_PREDV0_LSB BIT(17) /*!< the LSB of PREDV0 division factor */ -#define RCU_CFG0_PLLMF BITS(18,21) /*!< PLL clock multiplication factor */ -#define RCU_CFG0_USBFSPSC BITS(22,23) /*!< USBFS clock prescaler selection */ -#define RCU_CFG0_CKOUT0SEL BITS(24,27) /*!< CKOUT0 clock source selection */ -#define RCU_CFG0_ADCPSC_2 BIT(28) /*!< bit 2 of ADCPSC */ -#define RCU_CFG0_PLLMF_4 BIT(29) /*!< bit 4 of PLLMF */ -#define RCU_CFG0_PLLMF_5 BIT(30) /*!< bit 5 of PLLMF */ -#define RCU_CFG0_USBFSPSC_2 BIT(31) /*!< bit 2 of USBFSPSC */ -#endif /* GD32F30X_HD and GD32F30X_XD */ - -/* RCU_INT */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define RCU_INT_IRC40KSTBIF BIT(0) /*!< IRC40K stabilization interrupt flag */ -#define RCU_INT_LXTALSTBIF BIT(1) /*!< LXTAL stabilization interrupt flag */ -#define RCU_INT_IRC8MSTBIF BIT(2) /*!< IRC8M stabilization interrupt flag */ -#define RCU_INT_HXTALSTBIF BIT(3) /*!< HXTAL stabilization interrupt flag */ -#define RCU_INT_PLLSTBIF BIT(4) /*!< PLL stabilization interrupt flag */ -#define RCU_INT_CKMIF BIT(7) /*!< HXTAL clock stuck interrupt flag */ -#define RCU_INT_IRC40KSTBIE BIT(8) /*!< IRC40K stabilization interrupt enable */ -#define RCU_INT_LXTALSTBIE BIT(9) /*!< LXTAL stabilization interrupt enable */ -#define RCU_INT_IRC8MSTBIE BIT(10) /*!< IRC8M stabilization interrupt enable */ -#define RCU_INT_HXTALSTBIE BIT(11) /*!< HXTAL stabilization interrupt enable */ -#define RCU_INT_PLLSTBIE BIT(12) /*!< PLL stabilization interrupt enable */ -#define RCU_INT_IRC40KSTBIC BIT(16) /*!< IRC40K Stabilization interrupt clear */ -#define RCU_INT_LXTALSTBIC BIT(17) /*!< LXTAL Stabilization interrupt clear */ -#define RCU_INT_IRC8MSTBIC BIT(18) /*!< IRC8M Stabilization interrupt clear */ -#define RCU_INT_HXTALSTBIC BIT(19) /*!< HXTAL Stabilization interrupt clear */ -#define RCU_INT_PLLSTBIC BIT(20) /*!< PLL stabilization interrupt clear */ -#define RCU_INT_CKMIC BIT(23) /*!< HXTAL clock stuck interrupt clear */ -#elif defined(GD32F30X_CL) -#define RCU_INT_IRC40KSTBIF BIT(0) /*!< IRC40K stabilization interrupt flag */ -#define RCU_INT_LXTALSTBIF BIT(1) /*!< LXTAL stabilization interrupt flag */ -#define RCU_INT_IRC8MSTBIF BIT(2) /*!< IRC8M stabilization interrupt flag */ -#define RCU_INT_HXTALSTBIF BIT(3) /*!< HXTAL stabilization interrupt flag */ -#define RCU_INT_PLLSTBIF BIT(4) /*!< PLL stabilization interrupt flag */ -#define RCU_INT_PLL1STBIF BIT(5) /*!< PLL1 stabilization interrupt flag */ -#define RCU_INT_PLL2STBIF BIT(6) /*!< PLL2 stabilization interrupt flag */ -#define RCU_INT_CKMIF BIT(7) /*!< HXTAL clock stuck interrupt flag */ -#define RCU_INT_IRC40KSTBIE BIT(8) /*!< IRC40K stabilization interrupt enable */ -#define RCU_INT_LXTALSTBIE BIT(9) /*!< LXTAL stabilization interrupt enable */ -#define RCU_INT_IRC8MSTBIE BIT(10) /*!< IRC8M stabilization interrupt enable */ -#define RCU_INT_HXTALSTBIE BIT(11) /*!< HXTAL stabilization interrupt enable */ -#define RCU_INT_PLLSTBIE BIT(12) /*!< PLL stabilization interrupt enable */ -#define RCU_INT_PLL1STBIE BIT(13) /*!< PLL1 stabilization interrupt enable */ -#define RCU_INT_PLL2STBIE BIT(14) /*!< PLL2 stabilization interrupt enable */ -#define RCU_INT_IRC40KSTBIC BIT(16) /*!< IRC40K stabilization interrupt clear */ -#define RCU_INT_LXTALSTBIC BIT(17) /*!< LXTAL stabilization interrupt clear */ -#define RCU_INT_IRC8MSTBIC BIT(18) /*!< IRC8M stabilization interrupt clear */ -#define RCU_INT_HXTALSTBIC BIT(19) /*!< HXTAL stabilization interrupt clear */ -#define RCU_INT_PLLSTBIC BIT(20) /*!< PLL stabilization interrupt clear */ -#define RCU_INT_PLL1STBIC BIT(21) /*!< PLL1 stabilization interrupt clear */ -#define RCU_INT_PLL2STBIC BIT(22) /*!< PLL2 stabilization interrupt clear */ -#define RCU_INT_CKMIC BIT(23) /*!< HXTAL clock stuck interrupt clear */ -#endif /* GD32F30X_HD and GD32F30X_XD */ - -/* RCU_APB2RST */ -#define RCU_APB2RST_AFRST BIT(0) /*!< alternate function I/O reset */ -#define RCU_APB2RST_PARST BIT(2) /*!< GPIO port A reset */ -#define RCU_APB2RST_PBRST BIT(3) /*!< GPIO port B reset */ -#define RCU_APB2RST_PCRST BIT(4) /*!< GPIO port C reset */ -#define RCU_APB2RST_PDRST BIT(5) /*!< GPIO port D reset */ -#define RCU_APB2RST_PERST BIT(6) /*!< GPIO port E reset */ -#define RCU_APB2RST_PFRST BIT(7) /*!< GPIO port F reset */ -#define RCU_APB2RST_PGRST BIT(8) /*!< GPIO port G reset */ -#define RCU_APB2RST_ADC0RST BIT(9) /*!< ADC0 reset */ -#define RCU_APB2RST_ADC1RST BIT(10) /*!< ADC1 reset */ -#define RCU_APB2RST_TIMER0RST BIT(11) /*!< TIMER0 reset */ -#define RCU_APB2RST_SPI0RST BIT(12) /*!< SPI0 reset */ -#define RCU_APB2RST_TIMER7RST BIT(13) /*!< TIMER7 reset */ -#define RCU_APB2RST_USART0RST BIT(14) /*!< USART0 reset */ -#ifndef GD32F30X_CL -#define RCU_APB2RST_ADC2RST BIT(15) /*!< ADC2 reset */ -#endif /* GD32F30X_CL */ -#ifndef GD32F30X_HD -#define RCU_APB2RST_TIMER8RST BIT(19) /*!< TIMER8 reset */ -#define RCU_APB2RST_TIMER9RST BIT(20) /*!< TIMER9 reset */ -#define RCU_APB2RST_TIMER10RST BIT(21) /*!< TIMER10 reset */ -#endif /* GD32F30X_HD */ - -/* RCU_APB1RST */ -#define RCU_APB1RST_TIMER1RST BIT(0) /*!< TIMER1 reset */ -#define RCU_APB1RST_TIMER2RST BIT(1) /*!< TIMER2 reset */ -#define RCU_APB1RST_TIMER3RST BIT(2) /*!< TIMER3 reset */ -#define RCU_APB1RST_TIMER4RST BIT(3) /*!< TIMER4 reset */ -#define RCU_APB1RST_TIMER5RST BIT(4) /*!< TIMER5 reset */ -#define RCU_APB1RST_TIMER6RST BIT(5) /*!< TIMER6 reset */ -#ifndef GD32F30X_HD -#define RCU_APB1RST_TIMER11RST BIT(6) /*!< TIMER11 reset */ -#define RCU_APB1RST_TIMER12RST BIT(7) /*!< TIMER12 reset */ -#define RCU_APB1RST_TIMER13RST BIT(8) /*!< TIMER13 reset */ -#endif /* GD32F30X_HD */ -#define RCU_APB1RST_WWDGTRST BIT(11) /*!< WWDGT reset */ -#define RCU_APB1RST_SPI1RST BIT(14) /*!< SPI1 reset */ -#define RCU_APB1RST_SPI2RST BIT(15) /*!< SPI2 reset */ -#define RCU_APB1RST_USART1RST BIT(17) /*!< USART1 reset */ -#define RCU_APB1RST_USART2RST BIT(18) /*!< USART2 reset */ -#define RCU_APB1RST_UART3RST BIT(19) /*!< UART3 reset */ -#define RCU_APB1RST_UART4RST BIT(20) /*!< UART4 reset */ -#define RCU_APB1RST_I2C0RST BIT(21) /*!< I2C0 reset */ -#define RCU_APB1RST_I2C1RST BIT(22) /*!< I2C1 reset */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define RCU_APB1RST_USBDRST BIT(23) /*!< USBD reset */ -#endif /* GD32F30X_HD and GD32F30X_XD */ -#define RCU_APB1RST_CAN0RST BIT(25) /*!< CAN0 reset */ -#ifdef GD32F30X_CL -#define RCU_APB1RST_CAN1RST BIT(26) /*!< CAN1 reset */ -#endif /* GD32F30X_CL */ -#define RCU_APB1RST_BKPIRST BIT(27) /*!< backup interface reset */ -#define RCU_APB1RST_PMURST BIT(28) /*!< PMU reset */ -#define RCU_APB1RST_DACRST BIT(29) /*!< DAC reset */ - -/* RCU_AHBEN */ -#define RCU_AHBEN_DMA0EN BIT(0) /*!< DMA0 clock enable */ -#define RCU_AHBEN_DMA1EN BIT(1) /*!< DMA1 clock enable */ -#define RCU_AHBEN_SRAMSPEN BIT(2) /*!< SRAM clock enable when sleep mode */ -#define RCU_AHBEN_FMCSPEN BIT(4) /*!< FMC clock enable when sleep mode */ -#define RCU_AHBEN_CRCEN BIT(6) /*!< CRC clock enable */ -#define RCU_AHBEN_EXMCEN BIT(8) /*!< EXMC clock enable */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define RCU_AHBEN_SDIOEN BIT(10) /*!< SDIO clock enable */ -#elif defined(GD32F30X_CL) -#define RCU_AHBEN_USBFSEN BIT(12) /*!< USBFS clock enable */ -#define RCU_AHBEN_ENETEN BIT(14) /*!< ENET clock enable */ -#define RCU_AHBEN_ENETTXEN BIT(15) /*!< Ethernet TX clock enable */ -#define RCU_AHBEN_ENETRXEN BIT(16) /*!< Ethernet RX clock enable */ -#endif /* GD32F30X_HD and GD32F30X_XD */ - -/* RCU_APB2EN */ -#define RCU_APB2EN_AFEN BIT(0) /*!< alternate function IO clock enable */ -#define RCU_APB2EN_PAEN BIT(2) /*!< GPIO port A clock enable */ -#define RCU_APB2EN_PBEN BIT(3) /*!< GPIO port B clock enable */ -#define RCU_APB2EN_PCEN BIT(4) /*!< GPIO port C clock enable */ -#define RCU_APB2EN_PDEN BIT(5) /*!< GPIO port D clock enable */ -#define RCU_APB2EN_PEEN BIT(6) /*!< GPIO port E clock enable */ -#define RCU_APB2EN_PFEN BIT(7) /*!< GPIO port F clock enable */ -#define RCU_APB2EN_PGEN BIT(8) /*!< GPIO port G clock enable */ -#define RCU_APB2EN_ADC0EN BIT(9) /*!< ADC0 clock enable */ -#define RCU_APB2EN_ADC1EN BIT(10) /*!< ADC1 clock enable */ -#define RCU_APB2EN_TIMER0EN BIT(11) /*!< TIMER0 clock enable */ -#define RCU_APB2EN_SPI0EN BIT(12) /*!< SPI0 clock enable */ -#define RCU_APB2EN_TIMER7EN BIT(13) /*!< TIMER7 clock enable */ -#define RCU_APB2EN_USART0EN BIT(14) /*!< USART0 clock enable */ -#ifndef GD32F30X_CL -#define RCU_APB2EN_ADC2EN BIT(15) /*!< ADC2 clock enable */ -#endif /* GD32F30X_CL */ -#ifndef GD32F30X_HD -#define RCU_APB2EN_TIMER8EN BIT(19) /*!< TIMER8 clock enable */ -#define RCU_APB2EN_TIMER9EN BIT(20) /*!< TIMER9 clock enable */ -#define RCU_APB2EN_TIMER10EN BIT(21) /*!< TIMER10 clock enable */ -#endif /* GD32F30X_HD */ - -/* RCU_APB1EN */ -#define RCU_APB1EN_TIMER1EN BIT(0) /*!< TIMER1 clock enable */ -#define RCU_APB1EN_TIMER2EN BIT(1) /*!< TIMER2 clock enable */ -#define RCU_APB1EN_TIMER3EN BIT(2) /*!< TIMER3 clock enable */ -#define RCU_APB1EN_TIMER4EN BIT(3) /*!< TIMER4 clock enable */ -#define RCU_APB1EN_TIMER5EN BIT(4) /*!< TIMER5 clock enable */ -#define RCU_APB1EN_TIMER6EN BIT(5) /*!< TIMER6 clock enable */ -#ifndef GD32F30X_HD -#define RCU_APB1EN_TIMER11EN BIT(6) /*!< TIMER11 clock enable */ -#define RCU_APB1EN_TIMER12EN BIT(7) /*!< TIMER12 clock enable */ -#define RCU_APB1EN_TIMER13EN BIT(8) /*!< TIMER13 clock enable */ -#endif /* GD32F30X_HD */ -#define RCU_APB1EN_WWDGTEN BIT(11) /*!< WWDGT clock enable */ -#define RCU_APB1EN_SPI1EN BIT(14) /*!< SPI1 clock enable */ -#define RCU_APB1EN_SPI2EN BIT(15) /*!< SPI2 clock enable */ -#define RCU_APB1EN_USART1EN BIT(17) /*!< USART1 clock enable */ -#define RCU_APB1EN_USART2EN BIT(18) /*!< USART2 clock enable */ -#define RCU_APB1EN_UART3EN BIT(19) /*!< UART3 clock enable */ -#define RCU_APB1EN_UART4EN BIT(20) /*!< UART4 clock enable */ -#define RCU_APB1EN_I2C0EN BIT(21) /*!< I2C0 clock enable */ -#define RCU_APB1EN_I2C1EN BIT(22) /*!< I2C1 clock enable */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define RCU_APB1EN_USBDEN BIT(23) /*!< USBD clock enable */ -#endif /* GD32F30X_HD and GD32F30X_XD */ -#define RCU_APB1EN_CAN0EN BIT(25) /*!< CAN0 clock enable */ -#ifdef GD32F30X_CL -#define RCU_APB1EN_CAN1EN BIT(26) /*!< CAN1 clock enable */ -#endif /* GD32F30X_CL */ -#define RCU_APB1EN_BKPIEN BIT(27) /*!< backup interface clock enable */ -#define RCU_APB1EN_PMUEN BIT(28) /*!< PMU clock enable */ -#define RCU_APB1EN_DACEN BIT(29) /*!< DAC clock enable */ - -/* RCU_BDCTL */ -#define RCU_BDCTL_LXTALEN BIT(0) /*!< LXTAL enable */ -#define RCU_BDCTL_LXTALSTB BIT(1) /*!< low speed crystal oscillator stabilization flag */ -#define RCU_BDCTL_LXTALBPS BIT(2) /*!< LXTAL bypass mode enable */ -#define RCU_BDCTL_LXTALDRI BITS(3,4) /*!< LXTAL drive capability */ -#define RCU_BDCTL_RTCSRC BITS(8,9) /*!< RTC clock entry selection */ -#define RCU_BDCTL_RTCEN BIT(15) /*!< RTC clock enable */ -#define RCU_BDCTL_BKPRST BIT(16) /*!< backup domain reset */ - -/* RCU_RSTSCK */ -#define RCU_RSTSCK_IRC40KEN BIT(0) /*!< IRC40K enable */ -#define RCU_RSTSCK_IRC40KSTB BIT(1) /*!< IRC40K stabilization flag */ -#define RCU_RSTSCK_RSTFC BIT(24) /*!< reset flag clear */ -#define RCU_RSTSCK_EPRSTF BIT(26) /*!< external pin reset flag */ -#define RCU_RSTSCK_PORRSTF BIT(27) /*!< power reset flag */ -#define RCU_RSTSCK_SWRSTF BIT(28) /*!< software reset flag */ -#define RCU_RSTSCK_FWDGTRSTF BIT(29) /*!< free watchdog timer reset flag */ -#define RCU_RSTSCK_WWDGTRSTF BIT(30) /*!< window watchdog timer reset flag */ -#define RCU_RSTSCK_LPRSTF BIT(31) /*!< low-power reset flag */ - -#ifdef GD32F30X_CL -/* RCU_AHBRST */ -#define RCU_AHBRST_USBFSRST BIT(12) /*!< USBFS reset */ -#define RCU_AHBRST_ENETRST BIT(14) /*!< ENET reset */ -#endif /* GD32F30X_CL */ - -/* RCU_CFG1 */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define RCU_CFG1_ADCPSC_3 BIT(29) /*!< bit 4 of ADCPSC */ -#define RCU_CFG1_PLLPRESEL BIT(30) /*!< PLL clock source selection */ -#elif defined(GD32F30X_CL) -#define RCU_CFG1_PREDV0 BITS(0,3) /*!< PREDV0 division factor */ -#define RCU_CFG1_PREDV1 BITS(4,7) /*!< PREDV1 division factor */ -#define RCU_CFG1_PLL1MF BITS(8,11) /*!< PLL1 clock multiplication factor */ -#define RCU_CFG1_PLL2MF BITS(12,15) /*!< PLL2 clock multiplication factor */ -#define RCU_CFG1_PREDV0SEL BIT(16) /*!< PREDV0 input clock source selection */ -#define RCU_CFG1_I2S1SEL BIT(17) /*!< I2S1 clock source selection */ -#define RCU_CFG1_I2S2SEL BIT(18) /*!< I2S2 clock source selection */ -#define RCU_CFG1_ADCPSC_3 BIT(29) /*!< bit 4 of ADCPSC */ -#define RCU_CFG1_PLLPRESEL BIT(30) /*!< PLL clock source selection */ -#define RCU_CFG1_PLL2MF_4 BIT(31) /*!< bit 5 of PLL2MF */ -#endif /* GD32F30X_HD and GD32F30X_XD */ - -/* RCU_DSV */ -#define RCU_DSV_DSLPVS BITS(0,2) /*!< deep-sleep mode voltage select */ - -/* RCU_ADDCTL */ -#define RCU_ADDCTL_CK48MSEL BIT(0) /*!< 48MHz clock selection */ -#define RCU_ADDCTL_IRC48MEN BIT(16) /*!< internal 48MHz RC oscillator enable */ -#define RCU_ADDCTL_IRC48MSTB BIT(17) /*!< internal 48MHz RC oscillator clock stabilization flag */ -#define RCU_ADDCTL_IRC48MCAL BITS(24,31) /*!< internal 48MHz RC oscillator calibration value register */ - -/* RCU_ADDINT */ -#define RCU_ADDINT_IRC48MSTBIF BIT(6) /*!< IRC48M stabilization interrupt flag */ -#define RCU_ADDINT_IRC48MSTBIE BIT(14) /*!< internal 48 MHz RC oscillator stabilization interrupt enable */ -#define RCU_ADDINT_IRC48MSTBIC BIT(22) /*!< internal 48 MHz RC oscillator stabilization interrupt clear */ - -/* RCU_ADDAPB1RST */ -#define RCU_ADDAPB1RST_CTCRST BIT(27) /*!< CTC reset */ - -/* RCU_ADDAPB1EN */ -#define RCU_ADDAPB1EN_CTCEN BIT(27) /*!< CTC clock enable */ - - -/* constants definitions */ -/* define the peripheral clock enable bit position and its register index offset */ -#define RCU_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define RCU_REG_VAL(periph) (REG32(RCU + ((uint32_t)(periph) >> 6))) -#define RCU_BIT_POS(val) ((uint32_t)(val) & 0x1FU) - -/* register offset */ -/* peripherals enable */ -#define AHBEN_REG_OFFSET 0x14U /*!< AHB enable register offset */ -#define APB1EN_REG_OFFSET 0x1CU /*!< APB1 enable register offset */ -#define APB2EN_REG_OFFSET 0x18U /*!< APB2 enable register offset */ -#define ADD_APB1EN_REG_OFFSET 0xE4U /*!< APB1 additional enable register offset */ - -/* peripherals reset */ -#define AHBRST_REG_OFFSET 0x28U /*!< AHB reset register offset */ -#define APB1RST_REG_OFFSET 0x10U /*!< APB1 reset register offset */ -#define APB2RST_REG_OFFSET 0x0CU /*!< APB2 reset register offset */ -#define ADD_APB1RST_REG_OFFSET 0xE0U /*!< APB1 additional reset register offset */ -#define RSTSCK_REG_OFFSET 0x24U /*!< reset source/clock register offset */ - -/* clock control */ -#define CTL_REG_OFFSET 0x00U /*!< control register offset */ -#define BDCTL_REG_OFFSET 0x20U /*!< backup domain control register offset */ -#define ADDCTL_REG_OFFSET 0xC0U /*!< additional clock control register offset */ - -/* clock stabilization and stuck interrupt */ -#define INT_REG_OFFSET 0x08U /*!< clock interrupt register offset */ -#define ADDINT_REG_OFFSET 0xCCU /*!< additional clock interrupt register offset */ - -/* configuration register */ -#define CFG0_REG_OFFSET 0x04U /*!< clock configuration register 0 offset */ -#define CFG1_REG_OFFSET 0x2CU /*!< clock configuration register 1 offset */ - -/* peripheral clock enable */ -typedef enum -{ - /* AHB peripherals */ - RCU_DMA0 = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 0U), /*!< DMA0 clock */ - RCU_DMA1 = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 1U), /*!< DMA1 clock */ - RCU_CRC = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 6U), /*!< CRC clock */ - RCU_EXMC = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 8U), /*!< EXMC clock */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - RCU_SDIO = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 10U), /*!< SDIO clock */ -#elif defined(GD32F30X_CL) - RCU_USBFS = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 12U), /*!< USBFS clock */ - RCU_ENET = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 14U), /*!< ENET clock */ - RCU_ENETTX = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 15U), /*!< ENETTX clock */ - RCU_ENETRX = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 16U), /*!< ENETRX clock */ -#endif /* GD32F30X_HD and GD32F30X_XD */ - - /* APB1 peripherals */ - RCU_TIMER1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 0U), /*!< TIMER1 clock */ - RCU_TIMER2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 1U), /*!< TIMER2 clock */ - RCU_TIMER3 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 2U), /*!< TIMER3 clock */ - RCU_TIMER4 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 3U), /*!< TIMER4 clock */ - RCU_TIMER5 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 4U), /*!< TIMER5 clock */ - RCU_TIMER6 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 5U), /*!< TIMER6 clock */ -#ifndef GD32F30X_HD - RCU_TIMER11 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 6U), /*!< TIMER11 clock */ - RCU_TIMER12 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 7U), /*!< TIMER12 clock */ - RCU_TIMER13 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 8U), /*!< TIMER13 clock */ -#endif /* GD32F30X_HD */ - RCU_WWDGT = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 11U), /*!< WWDGT clock */ - RCU_SPI1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 14U), /*!< SPI1 clock */ - RCU_SPI2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 15U), /*!< SPI2 clock */ - RCU_USART1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 17U), /*!< USART1 clock */ - RCU_USART2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 18U), /*!< USART2 clock */ - RCU_UART3 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 19U), /*!< UART3 clock */ - RCU_UART4 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 20U), /*!< UART4 clock */ - RCU_I2C0 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 21U), /*!< I2C0 clock */ - RCU_I2C1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 22U), /*!< I2C1 clock */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - RCU_USBD = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 23U), /*!< USBD clock */ -#endif /* GD32F30X_HD and GD32F30X_XD */ - RCU_CAN0 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 25U), /*!< CAN0 clock */ -#ifdef GD32F30X_CL - RCU_CAN1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 26U), /*!< CAN1 clock */ -#endif /* GD32F30X_CL */ - RCU_BKPI = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 27U), /*!< BKPI clock */ - RCU_PMU = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 28U), /*!< PMU clock */ - RCU_DAC = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 29U), /*!< DAC clock */ - RCU_RTC = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 15U), /*!< RTC clock */ - RCU_CTC = RCU_REGIDX_BIT(ADD_APB1EN_REG_OFFSET, 27U), /*!< CTC clock */ - - /* APB2 peripherals */ - RCU_AF = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 0U), /*!< alternate function clock */ - RCU_GPIOA = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 2U), /*!< GPIOA clock */ - RCU_GPIOB = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 3U), /*!< GPIOB clock */ - RCU_GPIOC = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 4U), /*!< GPIOC clock */ - RCU_GPIOD = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 5U), /*!< GPIOD clock */ - RCU_GPIOE = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 6U), /*!< GPIOE clock */ - RCU_GPIOF = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 7U), /*!< GPIOF clock */ - RCU_GPIOG = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 8U), /*!< GPIOG clock */ - RCU_ADC0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 9U), /*!< ADC0 clock */ - RCU_ADC1 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 10U), /*!< ADC1 clock */ - RCU_TIMER0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 11U), /*!< TIMER0 clock */ - RCU_SPI0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 12U), /*!< SPI0 clock */ - RCU_TIMER7 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 13U), /*!< TIMER7 clock */ - RCU_USART0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 14U), /*!< USART0 clock */ -#ifndef GD32F30X_CL - RCU_ADC2 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 15U), /*!< ADC2 clock */ -#endif /* GD32F30X_CL */ -#ifndef GD32F30X_HD - RCU_TIMER8 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 19U), /*!< TIMER8 clock */ - RCU_TIMER9 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 20U), /*!< TIMER9 clock */ - RCU_TIMER10 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 21U), /*!< TIMER10 clock */ -#endif /* GD32F30X_HD */ -}rcu_periph_enum; - -/* peripheral clock enable when sleep mode*/ -typedef enum -{ - /* AHB peripherals */ - RCU_SRAM_SLP = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 2U), /*!< SRAM clock */ - RCU_FMC_SLP = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 4U), /*!< FMC clock */ -}rcu_periph_sleep_enum; - -/* peripherals reset */ -typedef enum -{ - /* AHB peripherals */ -#ifdef GD32F30X_CL - RCU_USBFSRST = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 12U), /*!< USBFS clock reset */ - RCU_ENETRST = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 14U), /*!< ENET clock reset */ -#endif /* GD32F30X_CL */ - - /* APB1 peripherals */ - RCU_TIMER1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 0U), /*!< TIMER1 clock reset */ - RCU_TIMER2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 1U), /*!< TIMER2 clock reset */ - RCU_TIMER3RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 2U), /*!< TIMER3 clock reset */ - RCU_TIMER4RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 3U), /*!< TIMER4 clock reset */ - RCU_TIMER5RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 4U), /*!< TIMER5 clock reset */ - RCU_TIMER6RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 5U), /*!< TIMER6 clock reset */ -#ifndef GD32F30X_HD - RCU_TIMER11RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 6U), /*!< TIMER11 clock reset */ - RCU_TIMER12RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 7U), /*!< TIMER12 clock reset */ - RCU_TIMER13RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 8U), /*!< TIMER13 clock reset */ -#endif /* GD32F30X_HD */ - RCU_WWDGTRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 11U), /*!< WWDGT clock reset */ - RCU_SPI1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 14U), /*!< SPI1 clock reset */ - RCU_SPI2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 15U), /*!< SPI2 clock reset */ - RCU_USART1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 17U), /*!< USART1 clock reset */ - RCU_USART2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 18U), /*!< USART2 clock reset */ - RCU_UART3RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 19U), /*!< UART3 clock reset */ - RCU_UART4RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 20U), /*!< UART4 clock reset */ - RCU_I2C0RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 21U), /*!< I2C0 clock reset */ - RCU_I2C1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 22U), /*!< I2C1 clock reset */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - RCU_USBDRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 23U), /*!< USBD clock reset */ -#endif /* GD32F30X_HD and GD32F30X_XD */ - RCU_CAN0RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 25U), /*!< CAN0 clock reset */ -#ifdef GD32F30X_CL - RCU_CAN1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 26U), /*!< CAN1 clock reset */ -#endif /* GD32F30X_CL */ - RCU_BKPIRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 27U), /*!< BKPI clock reset */ - RCU_PMURST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 28U), /*!< PMU clock reset */ - RCU_DACRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 29U), /*!< DAC clock reset */ - RCU_CTCRST = RCU_REGIDX_BIT(ADD_APB1RST_REG_OFFSET, 27U), /*!< RTC clock reset */ - - /* APB2 peripherals */ - RCU_AFRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 0U), /*!< alternate function clock reset */ - RCU_GPIOARST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 2U), /*!< GPIOA clock reset */ - RCU_GPIOBRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 3U), /*!< GPIOB clock reset */ - RCU_GPIOCRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 4U), /*!< GPIOC clock reset */ - RCU_GPIODRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 5U), /*!< GPIOD clock reset */ - RCU_GPIOERST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 6U), /*!< GPIOE clock reset */ - RCU_GPIOFRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 7U), /*!< GPIOF clock reset */ - RCU_GPIOGRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 8U), /*!< GPIOG clock reset */ - RCU_ADC0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 9U), /*!< ADC0 clock reset */ - RCU_ADC1RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 10U), /*!< ADC1 clock reset */ - RCU_TIMER0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 11U), /*!< TIMER0 clock reset */ - RCU_SPI0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 12U), /*!< SPI0 clock reset */ - RCU_TIMER7RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 13U), /*!< TIMER7 clock reset */ - RCU_USART0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 14U), /*!< USART0 clock reset */ -#ifndef GD32F30X_CL - RCU_ADC2RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 15U), /*!< ADC2 clock reset */ -#endif /* GD32F30X_CL */ -#ifndef GD32F30X_HD - RCU_TIMER8RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 19U), /*!< TIMER8 clock reset */ - RCU_TIMER9RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 20U), /*!< TIMER9 clock reset */ - RCU_TIMER10RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 21U), /*!< TIMER10 clock reset */ -#endif /* GD32F30X_HD */ -}rcu_periph_reset_enum; - -/* clock stabilization and peripheral reset flags */ -typedef enum -{ - /* clock stabilization flags */ - RCU_FLAG_IRC8MSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 1U), /*!< IRC8M stabilization flags */ - RCU_FLAG_HXTALSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 17U), /*!< HXTAL stabilization flags */ - RCU_FLAG_PLLSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 25U), /*!< PLL stabilization flags */ -#ifdef GD32F30X_CL - RCU_FLAG_PLL1STB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 27U), /*!< PLL1 stabilization flags */ - RCU_FLAG_PLL2STB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 29U), /*!< PLL2 stabilization flags */ -#endif /* GD32F30X_CL */ - RCU_FLAG_LXTALSTB = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 1U), /*!< LXTAL stabilization flags */ - RCU_FLAG_IRC40KSTB = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 1U), /*!< IRC40K stabilization flags */ - RCU_FLAG_IRC48MSTB = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 17U), /*!< IRC48M stabilization flags */ - /* reset source flags */ - RCU_FLAG_EPRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 26U), /*!< external PIN reset flags */ - RCU_FLAG_PORRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 27U), /*!< power reset flags */ - RCU_FLAG_SWRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 28U), /*!< software reset flags */ - RCU_FLAG_FWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 29U), /*!< FWDGT reset flags */ - RCU_FLAG_WWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 30U), /*!< WWDGT reset flags */ - RCU_FLAG_LPRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 31U), /*!< low-power reset flags */ -}rcu_flag_enum; - -/* clock stabilization and ckm interrupt flags */ -typedef enum -{ - RCU_INT_FLAG_IRC40KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 0U), /*!< IRC40K stabilization interrupt flag */ - RCU_INT_FLAG_LXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 1U), /*!< LXTAL stabilization interrupt flag */ - RCU_INT_FLAG_IRC8MSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 2U), /*!< IRC8M stabilization interrupt flag */ - RCU_INT_FLAG_HXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 3U), /*!< HXTAL stabilization interrupt flag */ - RCU_INT_FLAG_PLLSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 4U), /*!< PLL stabilization interrupt flag */ -#ifdef GD32F30X_CL - RCU_INT_FLAG_PLL1STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 5U), /*!< PLL1 stabilization interrupt flag */ - RCU_INT_FLAG_PLL2STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 6U), /*!< PLL2 stabilization interrupt flag */ -#endif /* GD32F30X_CL */ - RCU_INT_FLAG_CKM = RCU_REGIDX_BIT(INT_REG_OFFSET, 7U), /*!< HXTAL clock stuck interrupt flag */ - RCU_INT_FLAG_IRC48MSTB = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 6U), /*!< IRC48M stabilization interrupt flag */ -}rcu_int_flag_enum; - -/* clock stabilization and stuck interrupt flags clear */ -typedef enum -{ - RCU_INT_FLAG_IRC40KSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 16U), /*!< IRC40K stabilization interrupt flags clear */ - RCU_INT_FLAG_LXTALSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 17U), /*!< LXTAL stabilization interrupt flags clear */ - RCU_INT_FLAG_IRC8MSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 18U), /*!< IRC8M stabilization interrupt flags clear */ - RCU_INT_FLAG_HXTALSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 19U), /*!< HXTAL stabilization interrupt flags clear */ - RCU_INT_FLAG_PLLSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 20U), /*!< PLL stabilization interrupt flags clear */ -#ifdef GD32F30X_CL - RCU_INT_FLAG_PLL1STB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 21U), /*!< PLL1 stabilization interrupt flags clear */ - RCU_INT_FLAG_PLL2STB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 22U), /*!< PLL2 stabilization interrupt flags clear */ -#endif /* GD32F30X_CL */ - RCU_INT_FLAG_CKM_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 23U), /*!< CKM interrupt flags clear */ - RCU_INT_FLAG_IRC48MSTB_CLR = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 22U), /*!< internal 48 MHz RC oscillator stabilization interrupt clear */ -}rcu_int_flag_clear_enum; - -/* clock stabilization interrupt enable or disable */ -typedef enum -{ - RCU_INT_IRC40KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 8U), /*!< IRC40K stabilization interrupt */ - RCU_INT_LXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 9U), /*!< LXTAL stabilization interrupt */ - RCU_INT_IRC8MSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 10U), /*!< IRC8M stabilization interrupt */ - RCU_INT_HXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 11U), /*!< HXTAL stabilization interrupt */ - RCU_INT_PLLSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 12U), /*!< PLL stabilization interrupt */ -#ifdef GD32F30X_CL - RCU_INT_PLL1STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 13U), /*!< PLL1 stabilization interrupt */ - RCU_INT_PLL2STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 14U), /*!< PLL2 stabilization interrupt */ -#endif /* GD32F30X_CL */ - RCU_INT_IRC48MSTB = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 14U), /*!< internal 48 MHz RC oscillator stabilization interrupt */ -}rcu_int_enum; - -/* oscillator types */ -typedef enum -{ - RCU_HXTAL = RCU_REGIDX_BIT(CTL_REG_OFFSET, 16U), /*!< HXTAL */ - RCU_LXTAL = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 0U), /*!< LXTAL */ - RCU_IRC8M = RCU_REGIDX_BIT(CTL_REG_OFFSET, 0U), /*!< IRC8M */ - RCU_IRC48M = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 16U), /*!< IRC48M */ - RCU_IRC40K = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 0U), /*!< IRC40K */ - RCU_PLL_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 24U), /*!< PLL */ -#ifdef GD32F30X_CL - RCU_PLL1_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 26U), /*!< PLL1 */ - RCU_PLL2_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 28U), /*!< PLL2 */ -#endif /* GD32F30X_CL */ -}rcu_osci_type_enum; - -/* rcu clock frequency */ -typedef enum -{ - CK_SYS = 0, /*!< system clock */ - CK_AHB, /*!< AHB clock */ - CK_APB1, /*!< APB1 clock */ - CK_APB2, /*!< APB2 clock */ -}rcu_clock_freq_enum; - -/* RCU_CFG0 register bit define */ -/* system clock source select */ -#define CFG0_SCS(regval) (BITS(0,1) & ((uint32_t)(regval) << 0)) -#define RCU_CKSYSSRC_IRC8M CFG0_SCS(0) /*!< system clock source select IRC8M */ -#define RCU_CKSYSSRC_HXTAL CFG0_SCS(1) /*!< system clock source select HXTAL */ -#define RCU_CKSYSSRC_PLL CFG0_SCS(2) /*!< system clock source select PLL */ - -/* system clock source select status */ -#define CFG0_SCSS(regval) (BITS(2,3) & ((uint32_t)(regval) << 2)) -#define RCU_SCSS_IRC8M CFG0_SCSS(0) /*!< system clock source select IRC8M */ -#define RCU_SCSS_HXTAL CFG0_SCSS(1) /*!< system clock source select HXTAL */ -#define RCU_SCSS_PLL CFG0_SCSS(2) /*!< system clock source select PLLP */ - -/* AHB prescaler selection */ -#define CFG0_AHBPSC(regval) (BITS(4,7) & ((uint32_t)(regval) << 4)) -#define RCU_AHB_CKSYS_DIV1 CFG0_AHBPSC(0) /*!< AHB prescaler select CK_SYS */ -#define RCU_AHB_CKSYS_DIV2 CFG0_AHBPSC(8) /*!< AHB prescaler select CK_SYS/2 */ -#define RCU_AHB_CKSYS_DIV4 CFG0_AHBPSC(9) /*!< AHB prescaler select CK_SYS/4 */ -#define RCU_AHB_CKSYS_DIV8 CFG0_AHBPSC(10) /*!< AHB prescaler select CK_SYS/8 */ -#define RCU_AHB_CKSYS_DIV16 CFG0_AHBPSC(11) /*!< AHB prescaler select CK_SYS/16 */ -#define RCU_AHB_CKSYS_DIV64 CFG0_AHBPSC(12) /*!< AHB prescaler select CK_SYS/64 */ -#define RCU_AHB_CKSYS_DIV128 CFG0_AHBPSC(13) /*!< AHB prescaler select CK_SYS/128 */ -#define RCU_AHB_CKSYS_DIV256 CFG0_AHBPSC(14) /*!< AHB prescaler select CK_SYS/256 */ -#define RCU_AHB_CKSYS_DIV512 CFG0_AHBPSC(15) /*!< AHB prescaler select CK_SYS/512 */ - -/* APB1 prescaler selection */ -#define CFG0_APB1PSC(regval) (BITS(8,10) & ((uint32_t)(regval) << 8)) -#define RCU_APB1_CKAHB_DIV1 CFG0_APB1PSC(0) /*!< APB1 prescaler select CK_AHB */ -#define RCU_APB1_CKAHB_DIV2 CFG0_APB1PSC(4) /*!< APB1 prescaler select CK_AHB/2 */ -#define RCU_APB1_CKAHB_DIV4 CFG0_APB1PSC(5) /*!< APB1 prescaler select CK_AHB/4 */ -#define RCU_APB1_CKAHB_DIV8 CFG0_APB1PSC(6) /*!< APB1 prescaler select CK_AHB/8 */ -#define RCU_APB1_CKAHB_DIV16 CFG0_APB1PSC(7) /*!< APB1 prescaler select CK_AHB/16 */ - -/* APB2 prescaler selection */ -#define CFG0_APB2PSC(regval) (BITS(11,13) & ((uint32_t)(regval) << 11)) -#define RCU_APB2_CKAHB_DIV1 CFG0_APB2PSC(0) /*!< APB2 prescaler select CK_AHB */ -#define RCU_APB2_CKAHB_DIV2 CFG0_APB2PSC(4) /*!< APB2 prescaler select CK_AHB/2 */ -#define RCU_APB2_CKAHB_DIV4 CFG0_APB2PSC(5) /*!< APB2 prescaler select CK_AHB/4 */ -#define RCU_APB2_CKAHB_DIV8 CFG0_APB2PSC(6) /*!< APB2 prescaler select CK_AHB/8 */ -#define RCU_APB2_CKAHB_DIV16 CFG0_APB2PSC(7) /*!< APB2 prescaler select CK_AHB/16 */ - -/* ADC prescaler select */ -#define RCU_CKADC_CKAPB2_DIV2 ((uint32_t)0x00000000U) /*!< ADC prescaler select CK_APB2/2 */ -#define RCU_CKADC_CKAPB2_DIV4 ((uint32_t)0x00000001U) /*!< ADC prescaler select CK_APB2/4 */ -#define RCU_CKADC_CKAPB2_DIV6 ((uint32_t)0x00000002U) /*!< ADC prescaler select CK_APB2/6 */ -#define RCU_CKADC_CKAPB2_DIV8 ((uint32_t)0x00000003U) /*!< ADC prescaler select CK_APB2/8 */ -#define RCU_CKADC_CKAPB2_DIV12 ((uint32_t)0x00000005U) /*!< ADC prescaler select CK_APB2/12 */ -#define RCU_CKADC_CKAPB2_DIV16 ((uint32_t)0x00000007U) /*!< ADC prescaler select CK_APB2/16 */ -#define RCU_CKADC_CKAHB_DIV5 ((uint32_t)0x00000008U) /*!< ADC prescaler select CK_AHB/5 */ -#define RCU_CKADC_CKAHB_DIV6 ((uint32_t)0x00000009U) /*!< ADC prescaler select CK_AHB/6 */ -#define RCU_CKADC_CKAHB_DIV10 ((uint32_t)0x0000000AU) /*!< ADC prescaler select CK_AHB/10 */ -#define RCU_CKADC_CKAHB_DIV20 ((uint32_t)0x0000000BU) /*!< ADC prescaler select CK_AHB/20 */ - -/* PLL clock source selection */ -#define RCU_PLLSRC_IRC8M_DIV2 ((uint32_t)0x00000000U) /*!< IRC8M/2 clock selected as source clock of PLL */ -#define RCU_PLLSRC_HXTAL_IRC48M RCU_CFG0_PLLSEL /*!< HXTAL or IRC48M selected as source clock of PLL */ - -/* PLL clock multiplication factor */ -#define PLLMF_4 RCU_CFG0_PLLMF_4 /* bit 4 of PLLMF */ -#define PLLMF_5 RCU_CFG0_PLLMF_5 /* bit 5 of PLLMF */ -#define PLLMF_4_5 (PLLMF_4 | PLLMF_5) /* bit 4 and 5 of PLLMF */ - -#define CFG0_PLLMF(regval) (BITS(18,21) & ((uint32_t)(regval) << 18)) -#define RCU_PLL_MUL2 CFG0_PLLMF(0) /*!< PLL source clock multiply by 2 */ -#define RCU_PLL_MUL3 CFG0_PLLMF(1) /*!< PLL source clock multiply by 3 */ -#define RCU_PLL_MUL4 CFG0_PLLMF(2) /*!< PLL source clock multiply by 4 */ -#define RCU_PLL_MUL5 CFG0_PLLMF(3) /*!< PLL source clock multiply by 5 */ -#define RCU_PLL_MUL6 CFG0_PLLMF(4) /*!< PLL source clock multiply by 6 */ -#define RCU_PLL_MUL7 CFG0_PLLMF(5) /*!< PLL source clock multiply by 7 */ -#define RCU_PLL_MUL8 CFG0_PLLMF(6) /*!< PLL source clock multiply by 8 */ -#define RCU_PLL_MUL9 CFG0_PLLMF(7) /*!< PLL source clock multiply by 9 */ -#define RCU_PLL_MUL10 CFG0_PLLMF(8) /*!< PLL source clock multiply by 10 */ -#define RCU_PLL_MUL11 CFG0_PLLMF(9) /*!< PLL source clock multiply by 11 */ -#define RCU_PLL_MUL12 CFG0_PLLMF(10) /*!< PLL source clock multiply by 12 */ -#define RCU_PLL_MUL13 CFG0_PLLMF(11) /*!< PLL source clock multiply by 13 */ -#define RCU_PLL_MUL14 CFG0_PLLMF(12) /*!< PLL source clock multiply by 14 */ -#if(defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define RCU_PLL_MUL15 CFG0_PLLMF(13) /*!< PLL source clock multiply by 15 */ -#elif defined(GD32F30X_CL) -#define RCU_PLL_MUL6_5 CFG0_PLLMF(13) /*!< PLL source clock multiply by 6.5 */ -#endif /* GD32F30X_HD and GD32F30X_XD */ -#define RCU_PLL_MUL16 CFG0_PLLMF(14) /*!< PLL source clock multiply by 16 */ -#define RCU_PLL_MUL17 (PLLMF_4 | CFG0_PLLMF(0)) /*!< PLL source clock multiply by 17 */ -#define RCU_PLL_MUL18 (PLLMF_4 | CFG0_PLLMF(1)) /*!< PLL source clock multiply by 18 */ -#define RCU_PLL_MUL19 (PLLMF_4 | CFG0_PLLMF(2)) /*!< PLL source clock multiply by 19 */ -#define RCU_PLL_MUL20 (PLLMF_4 | CFG0_PLLMF(3)) /*!< PLL source clock multiply by 20 */ -#define RCU_PLL_MUL21 (PLLMF_4 | CFG0_PLLMF(4)) /*!< PLL source clock multiply by 21 */ -#define RCU_PLL_MUL22 (PLLMF_4 | CFG0_PLLMF(5)) /*!< PLL source clock multiply by 22 */ -#define RCU_PLL_MUL23 (PLLMF_4 | CFG0_PLLMF(6)) /*!< PLL source clock multiply by 23 */ -#define RCU_PLL_MUL24 (PLLMF_4 | CFG0_PLLMF(7)) /*!< PLL source clock multiply by 24 */ -#define RCU_PLL_MUL25 (PLLMF_4 | CFG0_PLLMF(8)) /*!< PLL source clock multiply by 25 */ -#define RCU_PLL_MUL26 (PLLMF_4 | CFG0_PLLMF(9)) /*!< PLL source clock multiply by 26 */ -#define RCU_PLL_MUL27 (PLLMF_4 | CFG0_PLLMF(10)) /*!< PLL source clock multiply by 27 */ -#define RCU_PLL_MUL28 (PLLMF_4 | CFG0_PLLMF(11)) /*!< PLL source clock multiply by 28 */ -#define RCU_PLL_MUL29 (PLLMF_4 | CFG0_PLLMF(12)) /*!< PLL source clock multiply by 29 */ -#define RCU_PLL_MUL30 (PLLMF_4 | CFG0_PLLMF(13)) /*!< PLL source clock multiply by 30 */ -#define RCU_PLL_MUL31 (PLLMF_4 | CFG0_PLLMF(14)) /*!< PLL source clock multiply by 31 */ -#define RCU_PLL_MUL32 (PLLMF_4 | CFG0_PLLMF(15)) /*!< PLL source clock multiply by 32 */ -#define RCU_PLL_MUL33 (PLLMF_5 | CFG0_PLLMF(0)) /*!< PLL source clock multiply by 33 */ -#define RCU_PLL_MUL34 (PLLMF_5 | CFG0_PLLMF(1)) /*!< PLL source clock multiply by 34 */ -#define RCU_PLL_MUL35 (PLLMF_5 | CFG0_PLLMF(2)) /*!< PLL source clock multiply by 35 */ -#define RCU_PLL_MUL36 (PLLMF_5 | CFG0_PLLMF(3)) /*!< PLL source clock multiply by 36 */ -#define RCU_PLL_MUL37 (PLLMF_5 | CFG0_PLLMF(4)) /*!< PLL source clock multiply by 37 */ -#define RCU_PLL_MUL38 (PLLMF_5 | CFG0_PLLMF(5)) /*!< PLL source clock multiply by 38 */ -#define RCU_PLL_MUL39 (PLLMF_5 | CFG0_PLLMF(6)) /*!< PLL source clock multiply by 39 */ -#define RCU_PLL_MUL40 (PLLMF_5 | CFG0_PLLMF(7)) /*!< PLL source clock multiply by 40 */ -#define RCU_PLL_MUL41 (PLLMF_5 | CFG0_PLLMF(8)) /*!< PLL source clock multiply by 41 */ -#define RCU_PLL_MUL42 (PLLMF_5 | CFG0_PLLMF(9)) /*!< PLL source clock multiply by 42 */ -#define RCU_PLL_MUL43 (PLLMF_5 | CFG0_PLLMF(10)) /*!< PLL source clock multiply by 43 */ -#define RCU_PLL_MUL44 (PLLMF_5 | CFG0_PLLMF(11)) /*!< PLL source clock multiply by 44 */ -#define RCU_PLL_MUL45 (PLLMF_5 | CFG0_PLLMF(12)) /*!< PLL source clock multiply by 45 */ -#define RCU_PLL_MUL46 (PLLMF_5 | CFG0_PLLMF(13)) /*!< PLL source clock multiply by 46 */ -#define RCU_PLL_MUL47 (PLLMF_5 | CFG0_PLLMF(14)) /*!< PLL source clock multiply by 47 */ -#define RCU_PLL_MUL48 (PLLMF_5 | CFG0_PLLMF(15)) /*!< PLL source clock multiply by 48 */ -#define RCU_PLL_MUL49 (PLLMF_4_5 | CFG0_PLLMF(0)) /*!< PLL source clock multiply by 49 */ -#define RCU_PLL_MUL50 (PLLMF_4_5 | CFG0_PLLMF(1)) /*!< PLL source clock multiply by 50 */ -#define RCU_PLL_MUL51 (PLLMF_4_5 | CFG0_PLLMF(2)) /*!< PLL source clock multiply by 51 */ -#define RCU_PLL_MUL52 (PLLMF_4_5 | CFG0_PLLMF(3)) /*!< PLL source clock multiply by 52 */ -#define RCU_PLL_MUL53 (PLLMF_4_5 | CFG0_PLLMF(4)) /*!< PLL source clock multiply by 53 */ -#define RCU_PLL_MUL54 (PLLMF_4_5 | CFG0_PLLMF(5)) /*!< PLL source clock multiply by 54 */ -#define RCU_PLL_MUL55 (PLLMF_4_5 | CFG0_PLLMF(6)) /*!< PLL source clock multiply by 55 */ -#define RCU_PLL_MUL56 (PLLMF_4_5 | CFG0_PLLMF(7)) /*!< PLL source clock multiply by 56 */ -#define RCU_PLL_MUL57 (PLLMF_4_5 | CFG0_PLLMF(8)) /*!< PLL source clock multiply by 57 */ -#define RCU_PLL_MUL58 (PLLMF_4_5 | CFG0_PLLMF(9)) /*!< PLL source clock multiply by 58 */ -#define RCU_PLL_MUL59 (PLLMF_4_5 | CFG0_PLLMF(10)) /*!< PLL source clock multiply by 59 */ -#define RCU_PLL_MUL60 (PLLMF_4_5 | CFG0_PLLMF(11)) /*!< PLL source clock multiply by 60 */ -#define RCU_PLL_MUL61 (PLLMF_4_5 | CFG0_PLLMF(12)) /*!< PLL source clock multiply by 61 */ -#define RCU_PLL_MUL62 (PLLMF_4_5 | CFG0_PLLMF(13)) /*!< PLL source clock multiply by 62 */ -#define RCU_PLL_MUL63 (PLLMF_4_5 | CFG0_PLLMF(14)) /*!< PLL source clock multiply by 63 */ - -#if(defined(GD32F30X_HD) || defined(GD32F30X_XD)) -#define USBPSC_2 RCU_CFG0_USBDPSC_2 -#elif defined(GD32F30X_CL) -#define USBPSC_2 RCU_CFG0_USBFSPSC_2 -#endif /* GD32F30X_HD and GD32F30X_XD */ - -/* USBD/USBFS prescaler select */ -#define CFG0_USBPSC(regval) (BITS(22,23) & ((uint32_t)(regval) << 22)) -#define RCU_CKUSB_CKPLL_DIV1_5 CFG0_USBPSC(0) /*!< USBD/USBFS prescaler select CK_PLL/1.5 */ -#define RCU_CKUSB_CKPLL_DIV1 CFG0_USBPSC(1) /*!< USBD/USBFS prescaler select CK_PLL/1 */ -#define RCU_CKUSB_CKPLL_DIV2_5 CFG0_USBPSC(2) /*!< USBD/USBFS prescaler select CK_PLL/2.5 */ -#define RCU_CKUSB_CKPLL_DIV2 CFG0_USBPSC(3) /*!< USBD/USBFS prescaler select CK_PLL/2 */ -#define RCU_CKUSB_CKPLL_DIV3 (USBPSC_2 |CFG0_USBPSC(0)) /*!< USBD/USBFS prescaler select CK_PLL/3 */ -#define RCU_CKUSB_CKPLL_DIV3_5 (USBPSC_2 |CFG0_USBPSC(1)) /*!< USBD/USBFS prescaler select CK_PLL/3.5 */ -#define RCU_CKUSB_CKPLL_DIV4 (USBPSC_2 |CFG0_USBPSC(2)) /*!< USBD/USBFS prescaler select CK_PLL/4 */ - -/* CKOUT0 Clock source selection */ -#define CFG0_CKOUT0SEL(regval) (BITS(24,27) & ((uint32_t)(regval) << 24)) -#define RCU_CKOUT0SRC_NONE CFG0_CKOUT0SEL(0) /*!< no clock selected */ -#define RCU_CKOUT0SRC_CKSYS CFG0_CKOUT0SEL(4) /*!< system clock selected */ -#define RCU_CKOUT0SRC_IRC8M CFG0_CKOUT0SEL(5) /*!< internal 8M RC oscillator clock selected */ -#define RCU_CKOUT0SRC_HXTAL CFG0_CKOUT0SEL(6) /*!< high speed crystal oscillator clock (HXTAL) selected */ -#define RCU_CKOUT0SRC_CKPLL_DIV2 CFG0_CKOUT0SEL(7) /*!< CK_PLL/2 clock selected */ -#ifdef GD32F30X_CL -#define RCU_CKOUT0SRC_CKPLL1 CFG0_CKOUT0SEL(8) /*!< CK_PLL1 clock selected */ -#define RCU_CKOUT0SRC_CKPLL2_DIV2 CFG0_CKOUT0SEL(9) /*!< CK_PLL2/2 clock selected */ -#define RCU_CKOUT0SRC_EXT1 CFG0_CKOUT0SEL(10) /*!< EXT1 selected, to provide the external clock for ENET */ -#define RCU_CKOUT0SRC_CKPLL2 CFG0_CKOUT0SEL(11) /*!< CK_PLL2 clock selected */ -#endif /* GD32F30X_CL */ - -/* LXTAL drive capability */ -#define BDCTL_LXTALDRI(regval) (BITS(3,4) & ((uint32_t)(regval) << 3)) -#define RCU_LXTAL_LOWDRI BDCTL_LXTALDRI(0) /*!< lower driving capability */ -#define RCU_LXTAL_MED_LOWDRI BDCTL_LXTALDRI(1) /*!< medium low driving capability */ -#define RCU_LXTAL_MED_HIGHDRI BDCTL_LXTALDRI(2) /*!< medium high driving capability */ -#define RCU_LXTAL_HIGHDRI BDCTL_LXTALDRI(3) /*!< higher driving capability */ - -/* RTC clock entry selection */ -#define BDCTL_RTCSRC(regval) (BITS(8,9) & ((uint32_t)(regval) << 8)) -#define RCU_RTCSRC_NONE BDCTL_RTCSRC(0) /*!< no clock selected */ -#define RCU_RTCSRC_LXTAL BDCTL_RTCSRC(1) /*!< RTC source clock select LXTAL */ -#define RCU_RTCSRC_IRC40K BDCTL_RTCSRC(2) /*!< RTC source clock select IRC40K */ -#define RCU_RTCSRC_HXTAL_DIV_128 BDCTL_RTCSRC(3) /*!< RTC source clock select HXTAL/128 */ - -/* PREDV0 division factor */ -#define CFG1_PREDV0(regval) (BITS(0,3) & ((uint32_t)(regval) << 0)) -#define RCU_PREDV0_DIV1 CFG1_PREDV0(0) /*!< PREDV0 input source clock not divided */ -#define RCU_PREDV0_DIV2 CFG1_PREDV0(1) /*!< PREDV0 input source clock divided by 2 */ -#define RCU_PREDV0_DIV3 CFG1_PREDV0(2) /*!< PREDV0 input source clock divided by 3 */ -#define RCU_PREDV0_DIV4 CFG1_PREDV0(3) /*!< PREDV0 input source clock divided by 4 */ -#define RCU_PREDV0_DIV5 CFG1_PREDV0(4) /*!< PREDV0 input source clock divided by 5 */ -#define RCU_PREDV0_DIV6 CFG1_PREDV0(5) /*!< PREDV0 input source clock divided by 6 */ -#define RCU_PREDV0_DIV7 CFG1_PREDV0(6) /*!< PREDV0 input source clock divided by 7 */ -#define RCU_PREDV0_DIV8 CFG1_PREDV0(7) /*!< PREDV0 input source clock divided by 8 */ -#define RCU_PREDV0_DIV9 CFG1_PREDV0(8) /*!< PREDV0 input source clock divided by 9 */ -#define RCU_PREDV0_DIV10 CFG1_PREDV0(9) /*!< PREDV0 input source clock divided by 10 */ -#define RCU_PREDV0_DIV11 CFG1_PREDV0(10) /*!< PREDV0 input source clock divided by 11 */ -#define RCU_PREDV0_DIV12 CFG1_PREDV0(11) /*!< PREDV0 input source clock divided by 12 */ -#define RCU_PREDV0_DIV13 CFG1_PREDV0(12) /*!< PREDV0 input source clock divided by 13 */ -#define RCU_PREDV0_DIV14 CFG1_PREDV0(13) /*!< PREDV0 input source clock divided by 14 */ -#define RCU_PREDV0_DIV15 CFG1_PREDV0(14) /*!< PREDV0 input source clock divided by 15 */ -#define RCU_PREDV0_DIV16 CFG1_PREDV0(15) /*!< PREDV0 input source clock divided by 16 */ - -/* PREDV1 division factor */ -#define CFG1_PREDV1(regval) (BITS(4,7) & ((uint32_t)(regval) << 4)) -#define RCU_PREDV1_DIV1 CFG1_PREDV1(0) /*!< PREDV1 input source clock not divided */ -#define RCU_PREDV1_DIV2 CFG1_PREDV1(1) /*!< PREDV1 input source clock divided by 2 */ -#define RCU_PREDV1_DIV3 CFG1_PREDV1(2) /*!< PREDV1 input source clock divided by 3 */ -#define RCU_PREDV1_DIV4 CFG1_PREDV1(3) /*!< PREDV1 input source clock divided by 4 */ -#define RCU_PREDV1_DIV5 CFG1_PREDV1(4) /*!< PREDV1 input source clock divided by 5 */ -#define RCU_PREDV1_DIV6 CFG1_PREDV1(5) /*!< PREDV1 input source clock divided by 6 */ -#define RCU_PREDV1_DIV7 CFG1_PREDV1(6) /*!< PREDV1 input source clock divided by 7 */ -#define RCU_PREDV1_DIV8 CFG1_PREDV1(7) /*!< PREDV1 input source clock divided by 8 */ -#define RCU_PREDV1_DIV9 CFG1_PREDV1(8) /*!< PREDV1 input source clock divided by 9 */ -#define RCU_PREDV1_DIV10 CFG1_PREDV1(9) /*!< PREDV1 input source clock divided by 10 */ -#define RCU_PREDV1_DIV11 CFG1_PREDV1(10) /*!< PREDV1 input source clock divided by 11 */ -#define RCU_PREDV1_DIV12 CFG1_PREDV1(11) /*!< PREDV1 input source clock divided by 12 */ -#define RCU_PREDV1_DIV13 CFG1_PREDV1(12) /*!< PREDV1 input source clock divided by 13 */ -#define RCU_PREDV1_DIV14 CFG1_PREDV1(13) /*!< PREDV1 input source clock divided by 14 */ -#define RCU_PREDV1_DIV15 CFG1_PREDV1(14) /*!< PREDV1 input source clock divided by 15 */ -#define RCU_PREDV1_DIV16 CFG1_PREDV1(15) /*!< PREDV1 input source clock divided by 16 */ - -/* PLL1 clock multiplication factor */ -#define CFG1_PLL1MF(regval) (BITS(8,11) & ((uint32_t)(regval) << 8)) -#define RCU_PLL1_MUL8 CFG1_PLL1MF(6) /*!< PLL1 source clock multiply by 8 */ -#define RCU_PLL1_MUL9 CFG1_PLL1MF(7) /*!< PLL1 source clock multiply by 9 */ -#define RCU_PLL1_MUL10 CFG1_PLL1MF(8) /*!< PLL1 source clock multiply by 10 */ -#define RCU_PLL1_MUL11 CFG1_PLL1MF(9) /*!< PLL1 source clock multiply by 11 */ -#define RCU_PLL1_MUL12 CFG1_PLL1MF(10) /*!< PLL1 source clock multiply by 12 */ -#define RCU_PLL1_MUL13 CFG1_PLL1MF(11) /*!< PLL1 source clock multiply by 13 */ -#define RCU_PLL1_MUL14 CFG1_PLL1MF(12) /*!< PLL1 source clock multiply by 14 */ -#define RCU_PLL1_MUL15 CFG1_PLL1MF(13) /*!< PLL1 source clock multiply by 15 */ -#define RCU_PLL1_MUL16 CFG1_PLL1MF(14) /*!< PLL1 source clock multiply by 16 */ -#define RCU_PLL1_MUL20 CFG1_PLL1MF(15) /*!< PLL1 source clock multiply by 20 */ - -/* PLL2 clock multiplication factor */ -#define PLL2MF_4 RCU_CFG1_PLL2MF_4 /* bit 4 of PLL2MF */ - -#define CFG1_PLL2MF(regval) (BITS(12,15) & ((uint32_t)(regval) << 12)) -#define RCU_PLL2_MUL8 CFG1_PLL2MF(6) /*!< PLL2 source clock multiply by 8 */ -#define RCU_PLL2_MUL9 CFG1_PLL2MF(7) /*!< PLL2 source clock multiply by 9 */ -#define RCU_PLL2_MUL10 CFG1_PLL2MF(8) /*!< PLL2 source clock multiply by 10 */ -#define RCU_PLL2_MUL11 CFG1_PLL2MF(9) /*!< PLL2 source clock multiply by 11 */ -#define RCU_PLL2_MUL12 CFG1_PLL2MF(10) /*!< PLL2 source clock multiply by 12 */ -#define RCU_PLL2_MUL13 CFG1_PLL2MF(11) /*!< PLL2 source clock multiply by 13 */ -#define RCU_PLL2_MUL14 CFG1_PLL2MF(12) /*!< PLL2 source clock multiply by 14 */ -#define RCU_PLL2_MUL15 CFG1_PLL2MF(13) /*!< PLL2 source clock multiply by 15 */ -#define RCU_PLL2_MUL16 CFG1_PLL2MF(14) /*!< PLL2 source clock multiply by 16 */ -#define RCU_PLL2_MUL20 CFG1_PLL2MF(15) /*!< PLL2 source clock multiply by 20 */ -#define RCU_PLL2_MUL18 (PLL2MF_4 | CFG1_PLL2MF(0)) /*!< PLL2 source clock multiply by 18 */ -#define RCU_PLL2_MUL19 (PLL2MF_4 | CFG1_PLL2MF(1)) /*!< PLL2 source clock multiply by 19 */ -#define RCU_PLL2_MUL21 (PLL2MF_4 | CFG1_PLL2MF(3)) /*!< PLL2 source clock multiply by 21 */ -#define RCU_PLL2_MUL22 (PLL2MF_4 | CFG1_PLL2MF(4)) /*!< PLL2 source clock multiply by 22 */ -#define RCU_PLL2_MUL23 (PLL2MF_4 | CFG1_PLL2MF(5)) /*!< PLL2 source clock multiply by 23 */ -#define RCU_PLL2_MUL24 (PLL2MF_4 | CFG1_PLL2MF(6)) /*!< PLL2 source clock multiply by 24 */ -#define RCU_PLL2_MUL25 (PLL2MF_4 | CFG1_PLL2MF(7)) /*!< PLL2 source clock multiply by 25 */ -#define RCU_PLL2_MUL26 (PLL2MF_4 | CFG1_PLL2MF(8)) /*!< PLL2 source clock multiply by 26 */ -#define RCU_PLL2_MUL27 (PLL2MF_4 | CFG1_PLL2MF(9)) /*!< PLL2 source clock multiply by 27 */ -#define RCU_PLL2_MUL28 (PLL2MF_4 | CFG1_PLL2MF(10)) /*!< PLL2 source clock multiply by 28 */ -#define RCU_PLL2_MUL29 (PLL2MF_4 | CFG1_PLL2MF(11)) /*!< PLL2 source clock multiply by 29 */ -#define RCU_PLL2_MUL30 (PLL2MF_4 | CFG1_PLL2MF(12)) /*!< PLL2 source clock multiply by 30 */ -#define RCU_PLL2_MUL31 (PLL2MF_4 | CFG1_PLL2MF(13)) /*!< PLL2 source clock multiply by 31 */ -#define RCU_PLL2_MUL32 (PLL2MF_4 | CFG1_PLL2MF(14)) /*!< PLL2 source clock multiply by 32 */ -#define RCU_PLL2_MUL40 (PLL2MF_4 | CFG1_PLL2MF(15)) /*!< PLL2 source clock multiply by 40 */ - -#ifdef GD32F30X_CL -/* PREDV0 input clock source selection */ -#define RCU_PREDV0SRC_HXTAL_IRC48M ((uint32_t)0x00000000U) /*!< HXTAL or IRC48M selected as PREDV0 input source clock */ -#define RCU_PREDV0SRC_CKPLL1 RCU_CFG1_PREDV0SEL /*!< CK_PLL1 selected as PREDV0 input source clock */ - -/* I2S1 clock source selection */ -#define RCU_I2S1SRC_CKSYS ((uint32_t)0x00000000U) /*!< system clock selected as I2S1 source clock */ -#define RCU_I2S1SRC_CKPLL2_MUL2 RCU_CFG1_I2S1SEL /*!< (CK_PLL2 x 2) selected as I2S1 source clock */ - -/* I2S2 clock source selection */ -#define RCU_I2S2SRC_CKSYS ((uint32_t)0x00000000U) /*!< system clock selected as I2S2 source clock */ -#define RCU_I2S2SRC_CKPLL2_MUL2 RCU_CFG1_I2S2SEL /*!< (CK_PLL2 x 2) selected as I2S2 source clock */ -#endif /* GD32F30X_CL */ - -/* PLL input clock source selection */ -#define RCU_PLLPRESRC_HXTAL ((uint32_t)0x00000000U) /*!< HXTAL selected as PLL source clock */ -#define RCU_PLLPRESRC_IRC48M RCU_CFG1_PLLPRESEL /*!< CK_PLL selected as PREDV0 input source clock */ - -/* deep-sleep mode voltage */ -#define DSV_DSLPVS(regval) (BITS(0,2) & ((uint32_t)(regval) << 0)) -#define RCU_DEEPSLEEP_V_1_0 DSV_DSLPVS(0) /*!< core voltage is 1.0V in deep-sleep mode */ -#define RCU_DEEPSLEEP_V_0_9 DSV_DSLPVS(1) /*!< core voltage is 0.9V in deep-sleep mode */ -#define RCU_DEEPSLEEP_V_0_8 DSV_DSLPVS(2) /*!< core voltage is 0.8V in deep-sleep mode */ -#define RCU_DEEPSLEEP_V_0_7 DSV_DSLPVS(3) /*!< core voltage is 0.7V in deep-sleep mode */ - -/* 48MHz clock selection */ -#define RCU_CK48MSRC_CKPLL ((uint32_t)0x00000000U) /*!< use CK_PLL clock */ -#define RCU_CK48MSRC_IRC48M RCU_ADDCTL_CK48MSEL /*!< select IRC48M clock */ - -/* function declarations */ -/* deinitialize the RCU */ -void rcu_deinit(void); -/* enable the peripherals clock */ -void rcu_periph_clock_enable(rcu_periph_enum periph); -/* disable the peripherals clock */ -void rcu_periph_clock_disable(rcu_periph_enum periph); -/* enable the peripherals clock when sleep mode */ -void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph); -/* disable the peripherals clock when sleep mode */ -void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph); -/* reset the peripherals */ -void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset); -/* disable reset the peripheral */ -void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset); -/* reset the BKP domain */ -void rcu_bkp_reset_enable(void); -/* disable the BKP domain reset */ -void rcu_bkp_reset_disable(void); - -/* configure the system clock source */ -void rcu_system_clock_source_config(uint32_t ck_sys); -/* get the system clock source */ -uint32_t rcu_system_clock_source_get(void); -/* configure the AHB prescaler selection */ -void rcu_ahb_clock_config(uint32_t ck_ahb); -/* configure the APB1 prescaler selection */ -void rcu_apb1_clock_config(uint32_t ck_apb1); -/* configure the APB2 prescaler selection */ -void rcu_apb2_clock_config(uint32_t ck_apb2); -/* configure the CK_OUT0 clock source and divider */ -void rcu_ckout0_config(uint32_t ckout0_src); -/* configure the PLL clock source selection and PLL multiply factor */ -void rcu_pll_config(uint32_t pll_src, uint32_t pll_mul); -/* configure the PLL clock source preselection */ -void rcu_pllpresel_config(uint32_t pll_presel); -#if(defined(GD32F30X_HD) || defined(GD32F30X_XD)) -/* configure the PREDV0 division factor and clock source */ -void rcu_predv0_config(uint32_t predv0_div); -#elif defined(GD32F30X_CL) -/* configure the PREDV0 division factor and clock source */ -void rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div); -/* configure the PREDV1 division factor */ -void rcu_predv1_config(uint32_t predv1_div); -/* configure the PLL1 clock */ -void rcu_pll1_config(uint32_t pll_mul); -/* configure the PLL2 clock */ -void rcu_pll2_config(uint32_t pll_mul); -#endif /* GD32F30X_HD and GD32F30X_XD */ - -/* configure the ADC division factor */ -void rcu_adc_clock_config(uint32_t adc_psc); -/* configure the USBD/USBFS prescaler factor */ -void rcu_usb_clock_config(uint32_t usb_psc); -/* configure the RTC clock source selection */ -void rcu_rtc_clock_config(uint32_t rtc_clock_source); -#ifdef GD32F30X_CL -/* configure the I2S1 clock source selection */ -void rcu_i2s1_clock_config(uint32_t i2s_clock_source); -/* configure the I2S2 clock source selection */ -void rcu_i2s2_clock_config(uint32_t i2s_clock_source); -#endif /* GD32F30X_CL */ -/* configure the CK48M clock selection */ -void rcu_ck48m_clock_config(uint32_t ck48m_clock_source); - - -/* get the clock stabilization and periphral reset flags */ -FlagStatus rcu_flag_get(rcu_flag_enum flag); -/* clear the reset flag */ -void rcu_all_reset_flag_clear(void); -/* get the clock stabilization interrupt and ckm flags */ -FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag); -/* clear the interrupt flags */ -void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag); -/* enable the stabilization interrupt */ -void rcu_interrupt_enable(rcu_int_enum interrupt); -/* disable the stabilization interrupt */ -void rcu_interrupt_disable(rcu_int_enum interrupt); - -/* configure the LXTAL drive capability */ -void rcu_lxtal_drive_capability_config(uint32_t lxtal_dricap); -/* wait for oscillator stabilization flags is SET or oscillator startup is timeout */ -ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci); -/* turn on the oscillator */ -void rcu_osci_on(rcu_osci_type_enum osci); -/* turn off the oscillator */ -void rcu_osci_off(rcu_osci_type_enum osci); -/* enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */ -void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci); -/* disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */ -void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci); -/* enable the HXTAL clock monitor */ -void rcu_hxtal_clock_monitor_enable(void); -/* disable the HXTAL clock monitor */ -void rcu_hxtal_clock_monitor_disable(void); - -/* set the IRC8M adjust value */ -void rcu_irc8m_adjust_value_set(uint32_t irc8m_adjval); - -/* set the deep sleep mode voltage */ -void rcu_deepsleep_voltage_set(uint32_t dsvol); - -/* get the system clock, bus and peripheral clock frequency */ -uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock); - -#endif /* GD32F30X_RCU_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_rtc.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_rtc.h deleted file mode 100644 index 24aab19..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_rtc.h +++ /dev/null @@ -1,138 +0,0 @@ -/*! - \file gd32f30x_rtc.h - \brief definitions for the RTC - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - - -#ifndef GD32F30X_RTC_H -#define GD32F30X_RTC_H - -#include "gd32f30x.h" - -/* RTC definitions */ -#define RTC RTC_BASE - -/* registers definitions */ -#define RTC_INTEN REG32(RTC + 0x00U) /*!< interrupt enable register */ -#define RTC_CTL REG32(RTC + 0x04U) /*!< control register */ -#define RTC_PSCH REG32(RTC + 0x08U) /*!< prescaler high register */ -#define RTC_PSCL REG32(RTC + 0x0CU) /*!< prescaler low register */ -#define RTC_DIVH REG32(RTC + 0x10U) /*!< divider high register */ -#define RTC_DIVL REG32(RTC + 0x14U) /*!< divider low register */ -#define RTC_CNTH REG32(RTC + 0x18U) /*!< counter high register */ -#define RTC_CNTL REG32(RTC + 0x1CU) /*!< counter low register */ -#define RTC_ALRMH REG32(RTC + 0x20U) /*!< alarm high register */ -#define RTC_ALRML REG32(RTC + 0x24U) /*!< alarm low register */ - -/* bits definitions */ -/* RTC_INTEN */ -#define RTC_INTEN_SCIE BIT(0) /*!< second interrupt enable */ -#define RTC_INTEN_ALRMIE BIT(1) /*!< alarm interrupt enable */ -#define RTC_INTEN_OVIE BIT(2) /*!< overflow interrupt enable */ - -/* RTC_CTL */ -#define RTC_CTL_SCIF BIT(0) /*!< second interrupt flag */ -#define RTC_CTL_ALRMIF BIT(1) /*!< alarm interrupt flag */ -#define RTC_CTL_OVIF BIT(2) /*!< overflow interrupt flag */ -#define RTC_CTL_RSYNF BIT(3) /*!< registers synchronized flag */ -#define RTC_CTL_CMF BIT(4) /*!< configuration mode flag */ -#define RTC_CTL_LWOFF BIT(5) /*!< last write operation finished flag */ - -/* RTC_PSC */ -#define RTC_PSCH_PSC BITS(0, 3) /*!< prescaler high value */ -#define RTC_PSCL_PSC BITS(0, 15) /*!< prescaler low value */ - -/* RTC_DIV */ -#define RTC_DIVH_DIV BITS(0, 3) /*!< divider high value */ -#define RTC_DIVL_DIV BITS(0, 15) /*!< divider low value */ - -/* RTC_CNT */ -#define RTC_CNTH_CNT BITS(0, 15) /*!< counter high value */ -#define RTC_CNTL_CNT BITS(0, 15) /*!< counter low value */ - -/* RTC_ALRM */ -#define RTC_ALRMH_ALRM BITS(0, 15) /*!< alarm high value */ -#define RTC_ALRML_ALRM BITS(0, 15) /*!< alarm low value */ - -/* constants definitions */ -#define RTC_HIGH_VALUE 0x000F0000U /*!< RTC high value */ -#define RTC_LOW_VALUE 0x0000FFFFU /*!< RTC low value */ - -/* RTC interrupt enable or disable definitions */ -#define RTC_INT_SECOND RTC_INTEN_SCIE /*!< second interrupt enable */ -#define RTC_INT_ALARM RTC_INTEN_ALRMIE /*!< alarm interrupt enable */ -#define RTC_INT_OVERFLOW RTC_INTEN_OVIE /*!< overflow interrupt enable */ - -/* RTC flag definitions */ -#define RTC_FLAG_SECOND RTC_CTL_SCIF /*!< second interrupt flag */ -#define RTC_FLAG_ALARM RTC_CTL_ALRMIF /*!< alarm interrupt flag */ -#define RTC_FLAG_OVERFLOW RTC_CTL_OVIF /*!< overflow interrupt flag */ -#define RTC_FLAG_RSYN RTC_CTL_RSYNF /*!< registers synchronized flag */ -#define RTC_FLAG_LWOF RTC_CTL_LWOFF /*!< last write operation finished flag */ - -/* function declarations */ -/* enable RTC interrupt */ -void rtc_interrupt_enable(uint32_t interrupt); -/* disable RTC interrupt */ -void rtc_interrupt_disable(uint32_t interrupt); - -/* enter RTC configuration mode */ -void rtc_configuration_mode_enter(void); -/* exit RTC configuration mode */ -void rtc_configuration_mode_exit(void); - -/* wait RTC last write operation finished flag set */ -void rtc_lwoff_wait(void); -/* wait RTC registers synchronized flag set */ -void rtc_register_sync_wait(void); - -/* get RTC counter value */ -uint32_t rtc_counter_get(void); -/* set RTC counter value */ -void rtc_counter_set(uint32_t cnt); - -/* set RTC prescaler value */ -void rtc_prescaler_set(uint32_t psc); -/* set RTC alarm value */ -void rtc_alarm_config(uint32_t alarm); -/* get RTC divider value */ -uint32_t rtc_divider_get(void); - -/* get RTC flag status */ -FlagStatus rtc_flag_get(uint32_t flag); -/* clear RTC flag status */ -void rtc_flag_clear(uint32_t flag); - -#endif /* GD32F30X_RTC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_sdio.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_sdio.h deleted file mode 100644 index c2796c5..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_sdio.h +++ /dev/null @@ -1,434 +0,0 @@ -/*! - \file gd32f30x_sdio.h - \brief definitions for the SDIO - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_SDIO_H -#define GD32F30X_SDIO_H - -#include "gd32f30x.h" - -/* SDIO definitions */ -#define SDIO SDIO_BASE - -/* registers definitions */ -#define SDIO_PWRCTL REG32(SDIO + 0x00U) /*!< SDIO power control register */ -#define SDIO_CLKCTL REG32(SDIO + 0x04U) /*!< SDIO clock control register */ -#define SDIO_CMDAGMT REG32(SDIO + 0x08U) /*!< SDIO command argument register */ -#define SDIO_CMDCTL REG32(SDIO + 0x0CU) /*!< SDIO command control register */ -#define SDIO_RSPCMDIDX REG32(SDIO + 0x10U) /*!< SDIO command index response register */ -#define SDIO_RESP0 REG32(SDIO + 0x14U) /*!< SDIO response register 0 */ -#define SDIO_RESP1 REG32(SDIO + 0x18U) /*!< SDIO response register 1 */ -#define SDIO_RESP2 REG32(SDIO + 0x1CU) /*!< SDIO response register 2 */ -#define SDIO_RESP3 REG32(SDIO + 0x20U) /*!< SDIO response register 3 */ -#define SDIO_DATATO REG32(SDIO + 0x24U) /*!< SDIO data timeout register */ -#define SDIO_DATALEN REG32(SDIO + 0x28U) /*!< SDIO data length register */ -#define SDIO_DATACTL REG32(SDIO + 0x2CU) /*!< SDIO data control register */ -#define SDIO_DATACNT REG32(SDIO + 0x30U) /*!< SDIO data counter register */ -#define SDIO_STAT REG32(SDIO + 0x34U) /*!< SDIO status register */ -#define SDIO_INTC REG32(SDIO + 0x38U) /*!< SDIO interrupt clear register */ -#define SDIO_INTEN REG32(SDIO + 0x3CU) /*!< SDIO interrupt enable register */ -#define SDIO_FIFOCNT REG32(SDIO + 0x48U) /*!< SDIO FIFO counter register */ -#define SDIO_FIFO REG32(SDIO + 0x80U) /*!< SDIO FIFO data register */ - -/* bits definitions */ -/* SDIO_PWRCTL */ -#define SDIO_PWRCTL_PWRCTL BITS(0,1) /*!< SDIO power control bits */ - -/* SDIO_CLKCTL */ -#define SDIO_CLKCTL_DIV BITS(0,7) /*!< clock division */ -#define SDIO_CLKCTL_CLKEN BIT(8) /*!< SDIO_CLK clock output enable bit */ -#define SDIO_CLKCTL_CLKPWRSAV BIT(9) /*!< SDIO_CLK clock dynamic switch on/off for power saving */ -#define SDIO_CLKCTL_CLKBYP BIT(10) /*!< clock bypass enable bit */ -#define SDIO_CLKCTL_BUSMODE BITS(11,12) /*!< SDIO card bus mode control bit */ -#define SDIO_CLKCTL_CLKEDGE BIT(13) /*!< SDIO_CLK clock edge selection bit */ -#define SDIO_CLKCTL_HWCLKEN BIT(14) /*!< hardware clock control enable bit */ -#define SDIO_CLKCTL_DIV8 BIT(31) /*!< MSB of clock division */ - -/* SDIO_CMDAGMT */ -#define SDIO_CMDAGMT_CMDAGMT BITS(0,31) /*!< SDIO card command argument */ - -/* SDIO_CMDCTL */ -#define SDIO_CMDCTL_CMDIDX BITS(0,5) /*!< command index */ -#define SDIO_CMDCTL_CMDRESP BITS(6,7) /*!< command response type bits */ -#define SDIO_CMDCTL_INTWAIT BIT(8) /*!< interrupt wait instead of timeout */ -#define SDIO_CMDCTL_WAITDEND BIT(9) /*!< wait for ends of data transfer */ -#define SDIO_CMDCTL_CSMEN BIT(10) /*!< command state machine(CSM) enable bit */ -#define SDIO_CMDCTL_SUSPEND BIT(11) /*!< SD I/O suspend command(SD I/O only) */ -#define SDIO_CMDCTL_ENCMDC BIT(12) /*!< CMD completion signal enabled (CE-ATA only) */ -#define SDIO_CMDCTL_NINTEN BIT(13) /*!< no CE-ATA interrupt (CE-ATA only) */ -#define SDIO_CMDCTL_ATAEN BIT(14) /*!< CE-ATA command enable(CE-ATA only) */ - -/* SDIO_DATATO */ -#define SDIO_DATATO_DATATO BITS(0,31) /*!< data timeout period */ - -/* SDIO_DATALEN */ -#define SDIO_DATALEN_DATALEN BITS(0,24) /*!< data transfer length */ - -/* SDIO_DATACTL */ -#define SDIO_DATACTL_DATAEN BIT(0) /*!< data transfer enabled bit */ -#define SDIO_DATACTL_DATADIR BIT(1) /*!< data transfer direction */ -#define SDIO_DATACTL_TRANSMOD BIT(2) /*!< data transfer mode */ -#define SDIO_DATACTL_DMAEN BIT(3) /*!< DMA enable bit */ -#define SDIO_DATACTL_BLKSZ BITS(4,7) /*!< data block size */ -#define SDIO_DATACTL_RWEN BIT(8) /*!< read wait mode enabled(SD I/O only) */ -#define SDIO_DATACTL_RWSTOP BIT(9) /*!< read wait stop(SD I/O only) */ -#define SDIO_DATACTL_RWTYPE BIT(10) /*!< read wait type(SD I/O only) */ -#define SDIO_DATACTL_IOEN BIT(11) /*!< SD I/O specific function enable(SD I/O only) */ - -/* SDIO_STAT */ -#define SDIO_STAT_CCRCERR BIT(0) /*!< command response received (CRC check failed) */ -#define SDIO_STAT_DTCRCERR BIT(1) /*!< data block sent/received (CRC check failed) */ -#define SDIO_STAT_CMDTMOUT BIT(2) /*!< command response timeout */ -#define SDIO_STAT_DTTMOUT BIT(3) /*!< data timeout */ -#define SDIO_STAT_TXURE BIT(4) /*!< transmit FIFO underrun error occurs */ -#define SDIO_STAT_RXORE BIT(5) /*!< received FIFO overrun error occurs */ -#define SDIO_STAT_CMDRECV BIT(6) /*!< command response received (CRC check passed) */ -#define SDIO_STAT_CMDSEND BIT(7) /*!< command sent (no response required) */ -#define SDIO_STAT_DTEND BIT(8) /*!< data end (data counter, SDIO_DATACNT, is zero) */ -#define SDIO_STAT_STBITE BIT(9) /*!< start bit error in the bus */ -#define SDIO_STAT_DTBLKEND BIT(10) /*!< data block sent/received (CRC check passed) */ -#define SDIO_STAT_CMDRUN BIT(11) /*!< command transmission in progress */ -#define SDIO_STAT_TXRUN BIT(12) /*!< data transmission in progress */ -#define SDIO_STAT_RXRUN BIT(13) /*!< data reception in progress */ -#define SDIO_STAT_TFH BIT(14) /*!< transmit FIFO is half empty: at least 8 words can be written into the FIFO */ -#define SDIO_STAT_RFH BIT(15) /*!< receive FIFO is half full: at least 8 words can be read in the FIFO */ -#define SDIO_STAT_TFF BIT(16) /*!< transmit FIFO is full */ -#define SDIO_STAT_RFF BIT(17) /*!< receive FIFO is full */ -#define SDIO_STAT_TFE BIT(18) /*!< transmit FIFO is empty */ -#define SDIO_STAT_RFE BIT(19) /*!< receive FIFO is empty */ -#define SDIO_STAT_TXDTVAL BIT(20) /*!< data is valid in transmit FIFO */ -#define SDIO_STAT_RXDTVAL BIT(21) /*!< data is valid in receive FIFO */ -#define SDIO_STAT_SDIOINT BIT(22) /*!< SD I/O interrupt received */ -#define SDIO_STAT_ATAEND BIT(23) /*!< CE-ATA command completion signal received (only for CMD61) */ - -/* SDIO_INTC */ -#define SDIO_INTC_CCRCERRC BIT(0) /*!< CCRCERR flag clear bit */ -#define SDIO_INTC_DTCRCERRC BIT(1) /*!< DTCRCERR flag clear bit */ -#define SDIO_INTC_CMDTMOUTC BIT(2) /*!< CMDTMOUT flag clear bit */ -#define SDIO_INTC_DTTMOUTC BIT(3) /*!< DTTMOUT flag clear bit */ -#define SDIO_INTC_TXUREC BIT(4) /*!< TXURE flag clear bit */ -#define SDIO_INTC_RXOREC BIT(5) /*!< RXORE flag clear bit */ -#define SDIO_INTC_CMDRECVC BIT(6) /*!< CMDRECV flag clear bit */ -#define SDIO_INTC_CMDSENDC BIT(7) /*!< CMDSEND flag clear bit */ -#define SDIO_INTC_DTENDC BIT(8) /*!< DTEND flag clear bit */ -#define SDIO_INTC_STBITEC BIT(9) /*!< STBITE flag clear bit */ -#define SDIO_INTC_DTBLKENDC BIT(10) /*!< DTBLKEND flag clear bit */ -#define SDIO_INTC_SDIOINTC BIT(22) /*!< SDIOINT flag clear bit */ -#define SDIO_INTC_ATAENDC BIT(23) /*!< ATAEND flag clear bit */ - -/* SDIO_INTEN */ -#define SDIO_INTEN_CCRCERRIE BIT(0) /*!< command response CRC fail interrupt enable */ -#define SDIO_INTEN_DTCRCERRIE BIT(1) /*!< data CRC fail interrupt enable */ -#define SDIO_INTEN_CMDTMOUTIE BIT(2) /*!< command response timeout interrupt enable */ -#define SDIO_INTEN_DTTMOUTIE BIT(3) /*!< data timeout interrupt enable */ -#define SDIO_INTEN_TXUREIE BIT(4) /*!< transmit FIFO underrun error interrupt enable */ -#define SDIO_INTEN_RXOREIE BIT(5) /*!< received FIFO overrun error interrupt enable */ -#define SDIO_INTEN_CMDRECVIE BIT(6) /*!< command response received interrupt enable */ -#define SDIO_INTEN_CMDSENDIE BIT(7) /*!< command sent interrupt enable */ -#define SDIO_INTEN_DTENDIE BIT(8) /*!< data end interrupt enable */ -#define SDIO_INTEN_STBITEIE BIT(9) /*!< start bit error interrupt enable */ -#define SDIO_INTEN_DTBLKENDIE BIT(10) /*!< data block end interrupt enable */ -#define SDIO_INTEN_CMDRUNIE BIT(11) /*!< command transmission interrupt enable */ -#define SDIO_INTEN_TXRUNIE BIT(12) /*!< data transmission interrupt enable */ -#define SDIO_INTEN_RXRUNIE BIT(13) /*!< data reception interrupt enable */ -#define SDIO_INTEN_TFHIE BIT(14) /*!< transmit FIFO half empty interrupt enable */ -#define SDIO_INTEN_RFHIE BIT(15) /*!< receive FIFO half full interrupt enable */ -#define SDIO_INTEN_TFFIE BIT(16) /*!< transmit FIFO full interrupt enable */ -#define SDIO_INTEN_RFFIE BIT(17) /*!< receive FIFO full interrupt enable */ -#define SDIO_INTEN_TFEIE BIT(18) /*!< transmit FIFO empty interrupt enable */ -#define SDIO_INTEN_RFEIE BIT(19) /*!< receive FIFO empty interrupt enable */ -#define SDIO_INTEN_TXDTVALIE BIT(20) /*!< data valid in transmit FIFO interrupt enable */ -#define SDIO_INTEN_RXDTVALIE BIT(21) /*!< data valid in receive FIFO interrupt enable */ -#define SDIO_INTEN_SDIOINTIE BIT(22) /*!< SD I/O interrupt received interrupt enable */ -#define SDIO_INTEN_ATAENDIE BIT(23) /*!< CE-ATA command completion signal received interrupt enable */ - -/* SDIO_FIFO */ -#define SDIO_FIFO_FIFODT BITS(0,31) /*!< receive FIFO data or transmit FIFO data */ - -/* constants definitions */ -/* SDIO flags */ -#define SDIO_FLAG_CCRCERR BIT(0) /*!< command response received (CRC check failed) flag */ -#define SDIO_FLAG_DTCRCERR BIT(1) /*!< data block sent/received (CRC check failed) flag */ -#define SDIO_FLAG_CMDTMOUT BIT(2) /*!< command response timeout flag */ -#define SDIO_FLAG_DTTMOUT BIT(3) /*!< data timeout flag */ -#define SDIO_FLAG_TXURE BIT(4) /*!< transmit FIFO underrun error occurs flag */ -#define SDIO_FLAG_RXORE BIT(5) /*!< received FIFO overrun error occurs flag */ -#define SDIO_FLAG_CMDRECV BIT(6) /*!< command response received (CRC check passed) flag */ -#define SDIO_FLAG_CMDSEND BIT(7) /*!< command sent (no response required) flag */ -#define SDIO_FLAG_DTEND BIT(8) /*!< data end (data counter, SDIO_DATACNT, is zero) flag */ -#define SDIO_FLAG_STBITE BIT(9) /*!< start bit error in the bus flag */ -#define SDIO_FLAG_DTBLKEND BIT(10) /*!< data block sent/received (CRC check passed) flag */ -#define SDIO_FLAG_CMDRUN BIT(11) /*!< command transmission in progress flag */ -#define SDIO_FLAG_TXRUN BIT(12) /*!< data transmission in progress flag */ -#define SDIO_FLAG_RXRUN BIT(13) /*!< data reception in progress flag */ -#define SDIO_FLAG_TFH BIT(14) /*!< transmit FIFO is half empty flag: at least 8 words can be written into the FIFO */ -#define SDIO_FLAG_RFH BIT(15) /*!< receive FIFO is half full flag: at least 8 words can be read in the FIFO */ -#define SDIO_FLAG_TFF BIT(16) /*!< transmit FIFO is full flag */ -#define SDIO_FLAG_RFF BIT(17) /*!< receive FIFO is full flag */ -#define SDIO_FLAG_TFE BIT(18) /*!< transmit FIFO is empty flag */ -#define SDIO_FLAG_RFE BIT(19) /*!< receive FIFO is empty flag */ -#define SDIO_FLAG_TXDTVAL BIT(20) /*!< data is valid in transmit FIFO flag */ -#define SDIO_FLAG_RXDTVAL BIT(21) /*!< data is valid in receive FIFO flag */ -#define SDIO_FLAG_SDIOINT BIT(22) /*!< SD I/O interrupt received flag */ -#define SDIO_FLAG_ATAEND BIT(23) /*!< CE-ATA command completion signal received (only for CMD61) flag */ - -/* SDIO interrupt enable or disable */ -#define SDIO_INT_CCRCERR BIT(0) /*!< SDIO CCRCERR interrupt */ -#define SDIO_INT_DTCRCERR BIT(1) /*!< SDIO DTCRCERR interrupt */ -#define SDIO_INT_CMDTMOUT BIT(2) /*!< SDIO CMDTMOUT interrupt */ -#define SDIO_INT_DTTMOUT BIT(3) /*!< SDIO DTTMOUT interrupt */ -#define SDIO_INT_TXURE BIT(4) /*!< SDIO TXURE interrupt */ -#define SDIO_INT_RXORE BIT(5) /*!< SDIO RXORE interrupt */ -#define SDIO_INT_CMDRECV BIT(6) /*!< SDIO CMDRECV interrupt */ -#define SDIO_INT_CMDSEND BIT(7) /*!< SDIO CMDSEND interrupt */ -#define SDIO_INT_DTEND BIT(8) /*!< SDIO DTEND interrupt */ -#define SDIO_INT_STBITE BIT(9) /*!< SDIO STBITE interrupt */ -#define SDIO_INT_DTBLKEND BIT(10) /*!< SDIO DTBLKEND interrupt */ -#define SDIO_INT_CMDRUN BIT(11) /*!< SDIO CMDRUN interrupt */ -#define SDIO_INT_TXRUN BIT(12) /*!< SDIO TXRUN interrupt */ -#define SDIO_INT_RXRUN BIT(13) /*!< SDIO RXRUN interrupt */ -#define SDIO_INT_TFH BIT(14) /*!< SDIO TFH interrupt */ -#define SDIO_INT_RFH BIT(15) /*!< SDIO RFH interrupt */ -#define SDIO_INT_TFF BIT(16) /*!< SDIO TFF interrupt */ -#define SDIO_INT_RFF BIT(17) /*!< SDIO RFF interrupt */ -#define SDIO_INT_TFE BIT(18) /*!< SDIO TFE interrupt */ -#define SDIO_INT_RFE BIT(19) /*!< SDIO RFE interrupt */ -#define SDIO_INT_TXDTVAL BIT(20) /*!< SDIO TXDTVAL interrupt */ -#define SDIO_INT_RXDTVAL BIT(21) /*!< SDIO RXDTVAL interrupt */ -#define SDIO_INT_SDIOINT BIT(22) /*!< SDIO SDIOINT interrupt */ -#define SDIO_INT_ATAEND BIT(23) /*!< SDIO ATAEND interrupt */ - -/* SDIO interrupt flags */ -#define SDIO_INT_FLAG_CCRCERR BIT(0) /*!< SDIO CCRCERR interrupt flag */ -#define SDIO_INT_FLAG_DTCRCERR BIT(1) /*!< SDIO DTCRCERR interrupt flag */ -#define SDIO_INT_FLAG_CMDTMOUT BIT(2) /*!< SDIO CMDTMOUT interrupt flag */ -#define SDIO_INT_FLAG_DTTMOUT BIT(3) /*!< SDIO DTTMOUT interrupt flag */ -#define SDIO_INT_FLAG_TXURE BIT(4) /*!< SDIO TXURE interrupt flag */ -#define SDIO_INT_FLAG_RXORE BIT(5) /*!< SDIO RXORE interrupt flag */ -#define SDIO_INT_FLAG_CMDRECV BIT(6) /*!< SDIO CMDRECV interrupt flag */ -#define SDIO_INT_FLAG_CMDSEND BIT(7) /*!< SDIO CMDSEND interrupt flag */ -#define SDIO_INT_FLAG_DTEND BIT(8) /*!< SDIO DTEND interrupt flag */ -#define SDIO_INT_FLAG_STBITE BIT(9) /*!< SDIO STBITE interrupt flag */ -#define SDIO_INT_FLAG_DTBLKEND BIT(10) /*!< SDIO DTBLKEND interrupt flag */ -#define SDIO_INT_FLAG_CMDRUN BIT(11) /*!< SDIO CMDRUN interrupt flag */ -#define SDIO_INT_FLAG_TXRUN BIT(12) /*!< SDIO TXRUN interrupt flag */ -#define SDIO_INT_FLAG_RXRUN BIT(13) /*!< SDIO RXRUN interrupt flag */ -#define SDIO_INT_FLAG_TFH BIT(14) /*!< SDIO TFH interrupt flag */ -#define SDIO_INT_FLAG_RFH BIT(15) /*!< SDIO RFH interrupt flag */ -#define SDIO_INT_FLAG_TFF BIT(16) /*!< SDIO TFF interrupt flag */ -#define SDIO_INT_FLAG_RFF BIT(17) /*!< SDIO RFF interrupt flag */ -#define SDIO_INT_FLAG_TFE BIT(18) /*!< SDIO TFE interrupt flag */ -#define SDIO_INT_FLAG_RFE BIT(19) /*!< SDIO RFE interrupt flag */ -#define SDIO_INT_FLAG_TXDTVAL BIT(20) /*!< SDIO TXDTVAL interrupt flag */ -#define SDIO_INT_FLAG_RXDTVAL BIT(21) /*!< SDIO RXDTVAL interrupt flag */ -#define SDIO_INT_FLAG_SDIOINT BIT(22) /*!< SDIO SDIOINT interrupt flag */ -#define SDIO_INT_FLAG_ATAEND BIT(23) /*!< SDIO ATAEND interrupt flag */ - -/* SDIO power control */ -#define PWRCTL_PWRCTL(regval) (BITS(0,1) & ((uint32_t)(regval) << 0)) -#define SDIO_POWER_OFF PWRCTL_PWRCTL(0) /*!< SDIO power off */ -#define SDIO_POWER_ON PWRCTL_PWRCTL(3) /*!< SDIO power on */ - -/* SDIO card bus mode control */ -#define CLKCTL_BUSMODE(regval) (BITS(11,12) & ((uint32_t)(regval) << 11)) -#define SDIO_BUSMODE_1BIT CLKCTL_BUSMODE(0) /*!< 1-bit SDIO card bus mode */ -#define SDIO_BUSMODE_4BIT CLKCTL_BUSMODE(1) /*!< 4-bit SDIO card bus mode */ -#define SDIO_BUSMODE_8BIT CLKCTL_BUSMODE(2) /*!< 8-bit SDIO card bus mode */ - -/* SDIO_CLK clock edge selection */ -#define SDIO_SDIOCLKEDGE_RISING (uint32_t)0x00000000U /*!< select the rising edge of the SDIOCLK to generate SDIO_CLK */ -#define SDIO_SDIOCLKEDGE_FALLING SDIO_CLKCTL_CLKEDGE /*!< select the falling edge of the SDIOCLK to generate SDIO_CLK */ - -/* clock bypass enable or disable */ -#define SDIO_CLOCKBYPASS_DISABLE (uint32_t)0x00000000U /*!< no bypass */ -#define SDIO_CLOCKBYPASS_ENABLE SDIO_CLKCTL_CLKBYP /*!< clock bypass */ - -/* SDIO_CLK clock dynamic switch on/off for power saving */ -#define SDIO_CLOCKPWRSAVE_DISABLE (uint32_t)0x00000000U /*!< SDIO_CLK clock is always on */ -#define SDIO_CLOCKPWRSAVE_ENABLE SDIO_CLKCTL_CLKPWRSAV /*!< SDIO_CLK closed when bus is idle */ - -/* SDIO command response type */ -#define CMDCTL_CMDRESP(regval) (BITS(6,7) & ((uint32_t)(regval) << 6)) -#define SDIO_RESPONSETYPE_NO CMDCTL_CMDRESP(0) /*!< no response */ -#define SDIO_RESPONSETYPE_SHORT CMDCTL_CMDRESP(1) /*!< short response */ -#define SDIO_RESPONSETYPE_LONG CMDCTL_CMDRESP(3) /*!< long response */ - -/* command state machine wait type */ -#define SDIO_WAITTYPE_NO (uint32_t)0x00000000U /*!< not wait interrupt */ -#define SDIO_WAITTYPE_INTERRUPT SDIO_CMDCTL_INTWAIT /*!< wait interrupt */ -#define SDIO_WAITTYPE_DATAEND SDIO_CMDCTL_WAITDEND /*!< wait the end of data transfer */ - -#define SDIO_RESPONSE0 (uint32_t)0x00000000U /*!< card response[31:0]/card response[127:96] */ -#define SDIO_RESPONSE1 (uint32_t)0x00000001U /*!< card response[95:64] */ -#define SDIO_RESPONSE2 (uint32_t)0x00000002U /*!< card response[63:32] */ -#define SDIO_RESPONSE3 (uint32_t)0x00000003U /*!< card response[31:1], plus bit 0 */ - -/* SDIO data block size */ -#define DATACTL_BLKSZ(regval) (BITS(4,7) & ((uint32_t)(regval) << 4)) -#define SDIO_DATABLOCKSIZE_1BYTE DATACTL_BLKSZ(0) /*!< block size = 1 byte */ -#define SDIO_DATABLOCKSIZE_2BYTES DATACTL_BLKSZ(1) /*!< block size = 2 bytes */ -#define SDIO_DATABLOCKSIZE_4BYTES DATACTL_BLKSZ(2) /*!< block size = 4 bytes */ -#define SDIO_DATABLOCKSIZE_8BYTES DATACTL_BLKSZ(3) /*!< block size = 8 bytes */ -#define SDIO_DATABLOCKSIZE_16BYTES DATACTL_BLKSZ(4) /*!< block size = 16 bytes */ -#define SDIO_DATABLOCKSIZE_32BYTES DATACTL_BLKSZ(5) /*!< block size = 32 bytes */ -#define SDIO_DATABLOCKSIZE_64BYTES DATACTL_BLKSZ(6) /*!< block size = 64 bytes */ -#define SDIO_DATABLOCKSIZE_128BYTES DATACTL_BLKSZ(7) /*!< block size = 128 bytes */ -#define SDIO_DATABLOCKSIZE_256BYTES DATACTL_BLKSZ(8) /*!< block size = 256 bytes */ -#define SDIO_DATABLOCKSIZE_512BYTES DATACTL_BLKSZ(9) /*!< block size = 512 bytes */ -#define SDIO_DATABLOCKSIZE_1024BYTES DATACTL_BLKSZ(10) /*!< block size = 1024 bytes */ -#define SDIO_DATABLOCKSIZE_2048BYTES DATACTL_BLKSZ(11) /*!< block size = 2048 bytes */ -#define SDIO_DATABLOCKSIZE_4096BYTES DATACTL_BLKSZ(12) /*!< block size = 4096 bytes */ -#define SDIO_DATABLOCKSIZE_8192BYTES DATACTL_BLKSZ(13) /*!< block size = 8192 bytes */ -#define SDIO_DATABLOCKSIZE_16384BYTES DATACTL_BLKSZ(14) /*!< block size = 16384 bytes */ - -/* SDIO data transfer mode */ -#define SDIO_TRANSMODE_BLOCK (uint32_t)0x00000000U /*!< block transfer */ -#define SDIO_TRANSMODE_STREAM SDIO_DATACTL_TRANSMOD /*!< stream transfer or SDIO multibyte transfer */ - -/* SDIO data transfer direction */ -#define SDIO_TRANSDIRECTION_TOCARD (uint32_t)0x00000000U /*!< write data to card */ -#define SDIO_TRANSDIRECTION_TOSDIO SDIO_DATACTL_DATADIR /*!< read data from card */ - -/* SDIO read wait type */ -#define SDIO_READWAITTYPE_DAT2 (uint32_t)0x00000000U /*!< read wait control using SDIO_DAT[2] */ -#define SDIO_READWAITTYPE_CLK SDIO_DATACTL_RWTYPE /*!< read wait control by stopping SDIO_CLK */ - -/* function declarations */ -/* de/initialization functions, hardware clock, bus mode, power_state and SDIO clock configuration */ -/* deinitialize the SDIO */ -void sdio_deinit(void); -/* configure the SDIO clock */ -void sdio_clock_config(uint32_t clock_edge, uint32_t clock_bypass, uint32_t clock_powersave, uint16_t clock_division); -/* enable hardware clock control */ -void sdio_hardware_clock_enable(void); -/* disable hardware clock control */ -void sdio_hardware_clock_disable(void); -/* set different SDIO card bus mode */ -void sdio_bus_mode_set(uint32_t bus_mode); -/* set the SDIO power state */ -void sdio_power_state_set(uint32_t power_state); -/* get the SDIO power state */ -uint32_t sdio_power_state_get(void); -/* enable SDIO_CLK clock output */ -void sdio_clock_enable(void); -/* disable SDIO_CLK clock output */ -void sdio_clock_disable(void); - -/* configure the command index, argument, response type, wait type and CSM to send command functions */ -/* configure the command and response */ -void sdio_command_response_config(uint32_t cmd_index, uint32_t cmd_argument, uint32_t response_type); -/* set the command state machine wait type */ -void sdio_wait_type_set(uint32_t wait_type); -/* enable the CSM(command state machine) */ -void sdio_csm_enable(void); -/* disable the CSM(command state machine) */ -void sdio_csm_disable(void); -/* get the last response command index */ -uint8_t sdio_command_index_get(void); -/* get the response for the last received command */ -uint32_t sdio_response_get(uint32_t responsex); - -/* configure the data timeout, length, block size, transfer mode, direction and DSM for data transfer functions */ -/* configure the data timeout, data length and data block size */ -void sdio_data_config(uint32_t data_timeout, uint32_t data_length, uint32_t data_blocksize); -/* configure the data transfer mode and direction */ -void sdio_data_transfer_config(uint32_t transfer_mode, uint32_t transfer_direction); -/* enable the DSM(data state machine) for data transfer */ -void sdio_dsm_enable(void); -/* disable the DSM(data state machine) */ -void sdio_dsm_disable(void); -/* write data(one word) to the transmit FIFO */ -void sdio_data_write(uint32_t data); -/* read data(one word) from the receive FIFO */ -uint32_t sdio_data_read(void); -/* get the number of remaining data bytes to be transferred to card */ -uint32_t sdio_data_counter_get(void); -/* get the number of words remaining to be written or read from FIFO */ -uint32_t sdio_fifo_counter_get(void); -/* enable the DMA request for SDIO */ -void sdio_dma_enable(void); -/* disable the DMA request for SDIO */ -void sdio_dma_disable(void); - -/* flag and interrupt functions */ -/* get the flags state of SDIO */ -FlagStatus sdio_flag_get(uint32_t flag); -/* clear the pending flags of SDIO */ -void sdio_flag_clear(uint32_t flag); -/* enable the SDIO interrupt */ -void sdio_interrupt_enable(uint32_t int_flag); -/* disable the SDIO interrupt */ -void sdio_interrupt_disable(uint32_t int_flag); -/* get the interrupt flags state of SDIO */ -FlagStatus sdio_interrupt_flag_get(uint32_t int_flag); -/* clear the interrupt pending flags of SDIO */ -void sdio_interrupt_flag_clear(uint32_t int_flag); - -/* SD I/O card functions */ -/* enable the read wait mode(SD I/O only) */ -void sdio_readwait_enable(void); -/* disable the read wait mode(SD I/O only) */ -void sdio_readwait_disable(void); -/* enable the function that stop the read wait process(SD I/O only) */ -void sdio_stop_readwait_enable(void); -/* disable the function that stop the read wait process(SD I/O only) */ -void sdio_stop_readwait_disable(void); -/* set the read wait type(SD I/O only) */ -void sdio_readwait_type_set(uint32_t readwait_type); -/* enable the SD I/O mode specific operation(SD I/O only) */ -void sdio_operation_enable(void); -/* disable the SD I/O mode specific operation(SD I/O only) */ -void sdio_operation_disable(void); -/* enable the SD I/O suspend operation(SD I/O only) */ -void sdio_suspend_enable(void); -/* disable the SD I/O suspend operation(SD I/O only) */ -void sdio_suspend_disable(void); - -/* CE-ATA functions */ -/* enable the CE-ATA command(CE-ATA only) */ -void sdio_ceata_command_enable(void); -/* disable the CE-ATA command(CE-ATA only) */ -void sdio_ceata_command_disable(void); -/* enable the CE-ATA interrupt(CE-ATA only) */ -void sdio_ceata_interrupt_enable(void); -/* disable the CE-ATA interrupt(CE-ATA only) */ -void sdio_ceata_interrupt_disable(void); -/* enable the CE-ATA command completion signal(CE-ATA only) */ -void sdio_ceata_command_completion_enable(void); -/* disable the CE-ATA command completion signal(CE-ATA only) */ -void sdio_ceata_command_completion_disable(void); - -#endif /* GD32F30X_SDIO_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_spi.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_spi.h deleted file mode 100644 index 6e95509..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_spi.h +++ /dev/null @@ -1,365 +0,0 @@ -/*! - \file gd32f30x_spi.h - \brief definitions for the SPI - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_SPI_H -#define GD32F30X_SPI_H - -#include "gd32f30x.h" - -/* SPIx(x=0,1,2) definitions */ -#define SPI0 (SPI_BASE + 0x0000F800U) -#define SPI1 SPI_BASE -#define SPI2 (SPI_BASE + 0x00000400U) - -/* SPI registers definitions */ -#define SPI_CTL0(spix) REG32((spix) + 0x00U) /*!< SPI control register 0 */ -#define SPI_CTL1(spix) REG32((spix) + 0x04U) /*!< SPI control register 1*/ -#define SPI_STAT(spix) REG32((spix) + 0x08U) /*!< SPI status register */ -#define SPI_DATA(spix) REG32((spix) + 0x0CU) /*!< SPI data register */ -#define SPI_CRCPOLY(spix) REG32((spix) + 0x10U) /*!< SPI CRC polynomial register */ -#define SPI_RCRC(spix) REG32((spix) + 0x14U) /*!< SPI receive CRC register */ -#define SPI_TCRC(spix) REG32((spix) + 0x18U) /*!< SPI transmit CRC register */ -#define SPI_I2SCTL(spix) REG32((spix) + 0x1CU) /*!< SPI I2S control register */ -#define SPI_I2SPSC(spix) REG32((spix) + 0x20U) /*!< SPI I2S clock prescaler register */ -#define SPI_QCTL(spix) REG32((spix) + 0x80U) /*!< SPI quad mode control register(only SPI0) */ - -/* bits definitions */ -/* SPI_CTL0 */ -#define SPI_CTL0_CKPH BIT(0) /*!< clock phase selection*/ -#define SPI_CTL0_CKPL BIT(1) /*!< clock polarity selection */ -#define SPI_CTL0_MSTMOD BIT(2) /*!< master mode enable */ -#define SPI_CTL0_PSC BITS(3,5) /*!< master clock prescaler selection */ -#define SPI_CTL0_SPIEN BIT(6) /*!< SPI enable*/ -#define SPI_CTL0_LF BIT(7) /*!< LSB first mode */ -#define SPI_CTL0_SWNSS BIT(8) /*!< NSS pin selection in NSS software mode */ -#define SPI_CTL0_SWNSSEN BIT(9) /*!< NSS software mode selection */ -#define SPI_CTL0_RO BIT(10) /*!< receive only */ -#define SPI_CTL0_FF16 BIT(11) /*!< data frame size */ -#define SPI_CTL0_CRCNT BIT(12) /*!< CRC next transfer */ -#define SPI_CTL0_CRCEN BIT(13) /*!< CRC calculation enable */ -#define SPI_CTL0_BDOEN BIT(14) /*!< bidirectional transmit output enable*/ -#define SPI_CTL0_BDEN BIT(15) /*!< bidirectional enable */ - -/* SPI_CTL1 */ -#define SPI_CTL1_DMAREN BIT(0) /*!< receive buffer dma enable */ -#define SPI_CTL1_DMATEN BIT(1) /*!< transmit buffer dma enable */ -#define SPI_CTL1_NSSDRV BIT(2) /*!< drive NSS output */ -#define SPI_CTL1_NSSP BIT(3) /*!< SPI NSS pulse mode enable */ -#define SPI_CTL1_TMOD BIT(4) /*!< SPI TI mode enable */ -#define SPI_CTL1_ERRIE BIT(5) /*!< errors interrupt enable */ -#define SPI_CTL1_RBNEIE BIT(6) /*!< receive buffer not empty interrupt enable */ -#define SPI_CTL1_TBEIE BIT(7) /*!< transmit buffer empty interrupt enable */ - -/* SPI_STAT */ -#define SPI_STAT_RBNE BIT(0) /*!< receive buffer not empty */ -#define SPI_STAT_TBE BIT(1) /*!< transmit buffer empty */ -#define SPI_STAT_I2SCH BIT(2) /*!< I2S channel side */ -#define SPI_STAT_TXURERR BIT(3) /*!< I2S transmission underrun error bit */ -#define SPI_STAT_CRCERR BIT(4) /*!< SPI CRC error bit */ -#define SPI_STAT_CONFERR BIT(5) /*!< SPI configuration error bit */ -#define SPI_STAT_RXORERR BIT(6) /*!< SPI reception overrun error bit */ -#define SPI_STAT_TRANS BIT(7) /*!< transmitting on-going bit */ -#define SPI_STAT_FERR BIT(8) /*!< format error bit */ - -/* SPI_DATA */ -#define SPI_DATA_DATA BITS(0,15) /*!< data transfer register */ - -/* SPI_CRCPOLY */ -#define SPI_CRCPOLY_CPR BITS(0,15) /*!< CRC polynomial register */ - -/* SPI_RCRC */ -#define SPI_RCRC_RCR BITS(0,15) /*!< RX CRC register */ - -/* SPI_TCRC */ -#define SPI_TCRC_TCR BITS(0,15) /*!< TX CRC register */ - -/* SPI_I2SCTL */ -#define SPI_I2SCTL_CHLEN BIT(0) /*!< channel length */ -#define SPI_I2SCTL_DTLEN BITS(1,2) /*!< data length */ -#define SPI_I2SCTL_CKPL BIT(3) /*!< idle state clock polarity */ -#define SPI_I2SCTL_I2SSTD BITS(4,5) /*!< I2S standard selection */ -#define SPI_I2SCTL_PCMSMOD BIT(7) /*!< PCM frame synchronization mode */ -#define SPI_I2SCTL_I2SOPMOD BITS(8,9) /*!< I2S operation mode */ -#define SPI_I2SCTL_I2SEN BIT(10) /*!< I2S enable */ -#define SPI_I2SCTL_I2SSEL BIT(11) /*!< I2S mode selection */ - -/* SPI_I2SPSC */ -#define SPI_I2SPSC_DIV BITS(0,7) /*!< dividing factor for the prescaler */ -#define SPI_I2SPSC_OF BIT(8) /*!< odd factor for the prescaler */ -#define SPI_I2SPSC_MCKOEN BIT(9) /*!< I2S MCK output enable */ - -/* SPI_QCTL(only for SPI0) */ -#define SPI_QCTL_QMOD BIT(0) /*!< quad-SPI mode enable */ -#define SPI_QCTL_QRD BIT(1) /*!< quad-SPI mode read select */ -#define SPI_QCTL_IO23_DRV BIT(2) /*!< drive SPI_IO2 and SPI_IO3 enable */ - -/* constants definitions */ -/* SPI and I2S parameter struct definitions */ -typedef struct -{ - uint32_t device_mode; /*!< SPI master or slave */ - uint32_t trans_mode; /*!< SPI transtype */ - uint32_t frame_size; /*!< SPI frame size */ - uint32_t nss; /*!< SPI NSS control by handware or software */ - uint32_t endian; /*!< SPI big endian or little endian */ - uint32_t clock_polarity_phase; /*!< SPI clock phase and polarity */ - uint32_t prescale; /*!< SPI prescale factor */ -}spi_parameter_struct; - -/* SPI mode definitions */ -#define SPI_MASTER (SPI_CTL0_MSTMOD | SPI_CTL0_SWNSS) /*!< SPI as master */ -#define SPI_SLAVE ((uint32_t)0x00000000U) /*!< SPI as slave */ - -/* SPI bidirectional transfer direction */ -#define SPI_BIDIRECTIONAL_TRANSMIT SPI_CTL0_BDOEN /*!< SPI work in transmit-only mode */ -#define SPI_BIDIRECTIONAL_RECEIVE (~SPI_CTL0_BDOEN) /*!< SPI work in receive-only mode */ - -/* SPI transmit type */ -#define SPI_TRANSMODE_FULLDUPLEX ((uint32_t)0x00000000U) /*!< SPI receive and send data at fullduplex communication */ -#define SPI_TRANSMODE_RECEIVEONLY SPI_CTL0_RO /*!< SPI only receive data */ -#define SPI_TRANSMODE_BDRECEIVE SPI_CTL0_BDEN /*!< bidirectional receive data */ -#define SPI_TRANSMODE_BDTRANSMIT (SPI_CTL0_BDEN | SPI_CTL0_BDOEN) /*!< bidirectional transmit data*/ - -/* SPI frame size */ -#define SPI_FRAMESIZE_16BIT SPI_CTL0_FF16 /*!< SPI frame size is 16 bits */ -#define SPI_FRAMESIZE_8BIT ((uint32_t)0x00000000U) /*!< SPI frame size is 8 bits */ - -/* SPI NSS control mode */ -#define SPI_NSS_SOFT SPI_CTL0_SWNSSEN /*!< SPI NSS control by sofrware */ -#define SPI_NSS_HARD ((uint32_t)0x00000000U) /*!< SPI NSS control by hardware */ - -/* SPI transmit way */ -#define SPI_ENDIAN_MSB ((uint32_t)0x00000000U) /*!< SPI transmit way is big endian: transmit MSB first */ -#define SPI_ENDIAN_LSB SPI_CTL0_LF /*!< SPI transmit way is little endian: transmit LSB first */ - -/* SPI clock phase and polarity */ -#define SPI_CK_PL_LOW_PH_1EDGE ((uint32_t)0x00000000U) /*!< SPI clock polarity is low level and phase is first edge */ -#define SPI_CK_PL_HIGH_PH_1EDGE SPI_CTL0_CKPL /*!< SPI clock polarity is high level and phase is first edge */ -#define SPI_CK_PL_LOW_PH_2EDGE SPI_CTL0_CKPH /*!< SPI clock polarity is low level and phase is second edge */ -#define SPI_CK_PL_HIGH_PH_2EDGE (SPI_CTL0_CKPL | SPI_CTL0_CKPH) /*!< SPI clock polarity is high level and phase is second edge */ - -/* SPI clock prescale factor */ -#define CTL0_PSC(regval) (BITS(3,5) & ((uint32_t)(regval) << 3)) -#define SPI_PSC_2 CTL0_PSC(0) /*!< SPI clock prescale factor is 2 */ -#define SPI_PSC_4 CTL0_PSC(1) /*!< SPI clock prescale factor is 4 */ -#define SPI_PSC_8 CTL0_PSC(2) /*!< SPI clock prescale factor is 8 */ -#define SPI_PSC_16 CTL0_PSC(3) /*!< SPI clock prescale factor is 16 */ -#define SPI_PSC_32 CTL0_PSC(4) /*!< SPI clock prescale factor is 32 */ -#define SPI_PSC_64 CTL0_PSC(5) /*!< SPI clock prescale factor is 64 */ -#define SPI_PSC_128 CTL0_PSC(6) /*!< SPI clock prescale factor is 128 */ -#define SPI_PSC_256 CTL0_PSC(7) /*!< SPI clock prescale factor is 256 */ - -/* I2S audio sample rate */ -#define I2S_AUDIOSAMPLE_8K ((uint32_t)8000U) /*!< I2S audio sample rate is 8KHz */ -#define I2S_AUDIOSAMPLE_11K ((uint32_t)11025U) /*!< I2S audio sample rate is 11KHz */ -#define I2S_AUDIOSAMPLE_16K ((uint32_t)16000U) /*!< I2S audio sample rate is 16KHz */ -#define I2S_AUDIOSAMPLE_22K ((uint32_t)22050U) /*!< I2S audio sample rate is 22KHz */ -#define I2S_AUDIOSAMPLE_32K ((uint32_t)32000U) /*!< I2S audio sample rate is 32KHz */ -#define I2S_AUDIOSAMPLE_44K ((uint32_t)44100U) /*!< I2S audio sample rate is 44KHz */ -#define I2S_AUDIOSAMPLE_48K ((uint32_t)48000U) /*!< I2S audio sample rate is 48KHz */ -#define I2S_AUDIOSAMPLE_96K ((uint32_t)96000U) /*!< I2S audio sample rate is 96KHz */ -#define I2S_AUDIOSAMPLE_192K ((uint32_t)192000U) /*!< I2S audio sample rate is 192KHz */ - -/* I2S frame format */ -#define I2SCTL_DTLEN(regval) (BITS(1,2) & ((uint32_t)(regval) << 1)) -#define I2S_FRAMEFORMAT_DT16B_CH16B I2SCTL_DTLEN(0) /*!< I2S data length is 16 bit and channel length is 16 bit */ -#define I2S_FRAMEFORMAT_DT16B_CH32B (I2SCTL_DTLEN(0) | SPI_I2SCTL_CHLEN) /*!< I2S data length is 16 bit and channel length is 32 bit */ -#define I2S_FRAMEFORMAT_DT24B_CH32B (I2SCTL_DTLEN(1) | SPI_I2SCTL_CHLEN) /*!< I2S data length is 24 bit and channel length is 32 bit */ -#define I2S_FRAMEFORMAT_DT32B_CH32B (I2SCTL_DTLEN(2) | SPI_I2SCTL_CHLEN) /*!< I2S data length is 32 bit and channel length is 32 bit */ - -/* I2S master clock output */ -#define I2S_MCKOUT_DISABLE ((uint32_t)0x00000000U) /*!< I2S master clock output disable */ -#define I2S_MCKOUT_ENABLE SPI_I2SPSC_MCKOEN /*!< I2S master clock output enable */ - -/* I2S operation mode */ -#define I2SCTL_I2SOPMOD(regval) (BITS(8,9) & ((uint32_t)(regval) << 8)) -#define I2S_MODE_SLAVETX I2SCTL_I2SOPMOD(0) /*!< I2S slave transmit mode */ -#define I2S_MODE_SLAVERX I2SCTL_I2SOPMOD(1) /*!< I2S slave receive mode */ -#define I2S_MODE_MASTERTX I2SCTL_I2SOPMOD(2) /*!< I2S master transmit mode */ -#define I2S_MODE_MASTERRX I2SCTL_I2SOPMOD(3) /*!< I2S master receive mode */ - -/* I2S standard */ -#define I2SCTL_I2SSTD(regval) (BITS(4,5) & ((uint32_t)(regval) << 4)) -#define I2S_STD_PHILLIPS I2SCTL_I2SSTD(0) /*!< I2S phillips standard */ -#define I2S_STD_MSB I2SCTL_I2SSTD(1) /*!< I2S MSB standard */ -#define I2S_STD_LSB I2SCTL_I2SSTD(2) /*!< I2S LSB standard */ -#define I2S_STD_PCMSHORT I2SCTL_I2SSTD(3) /*!< I2S PCM short standard */ -#define I2S_STD_PCMLONG (I2SCTL_I2SSTD(3) | SPI_I2SCTL_PCMSMOD) /*!< I2S PCM long standard */ - -/* I2S clock polarity */ -#define I2S_CKPL_LOW ((uint32_t)0x00000000U) /*!< I2S clock polarity low level */ -#define I2S_CKPL_HIGH SPI_I2SCTL_CKPL /*!< I2S clock polarity high level */ - -/* SPI DMA constants definitions */ -#define SPI_DMA_TRANSMIT ((uint8_t)0x00U) /*!< SPI transmit data use DMA */ -#define SPI_DMA_RECEIVE ((uint8_t)0x01U) /*!< SPI receive data use DMA */ - -/* SPI CRC constants definitions */ -#define SPI_CRC_TX ((uint8_t)0x00U) /*!< SPI transmit CRC value */ -#define SPI_CRC_RX ((uint8_t)0x01U) /*!< SPI receive CRC value */ - -/* SPI/I2S interrupt enable/disable constants definitions */ -#define SPI_I2S_INT_TBE ((uint8_t)0x00U) /*!< transmit buffer empty interrupt */ -#define SPI_I2S_INT_RBNE ((uint8_t)0x01U) /*!< receive buffer not empty interrupt */ -#define SPI_I2S_INT_ERR ((uint8_t)0x02U) /*!< error interrupt */ - -/* SPI/I2S interrupt flag constants definitions */ -#define SPI_I2S_INT_FLAG_TBE ((uint8_t)0x00U) /*!< transmit buffer empty interrupt flag */ -#define SPI_I2S_INT_FLAG_RBNE ((uint8_t)0x01U) /*!< receive buffer not empty interrupt flag */ -#define SPI_I2S_INT_FLAG_RXORERR ((uint8_t)0x02U) /*!< overrun interrupt flag */ -#define SPI_INT_FLAG_CONFERR ((uint8_t)0x03U) /*!< config error interrupt flag */ -#define SPI_INT_FLAG_CRCERR ((uint8_t)0x04U) /*!< CRC error interrupt flag */ -#define I2S_INT_FLAG_TXURERR ((uint8_t)0x05U) /*!< underrun error interrupt flag */ -#define SPI_I2S_INT_FLAG_FERR ((uint8_t)0x06U) /*!< format error interrupt flag */ - -/* SPI/I2S flag definitions */ -#define SPI_FLAG_RBNE SPI_STAT_RBNE /*!< receive buffer not empty flag */ -#define SPI_FLAG_TBE SPI_STAT_TBE /*!< transmit buffer empty flag */ -#define SPI_FLAG_CRCERR SPI_STAT_CRCERR /*!< CRC error flag */ -#define SPI_FLAG_CONFERR SPI_STAT_CONFERR /*!< mode config error flag */ -#define SPI_FLAG_RXORERR SPI_STAT_RXORERR /*!< receive overrun error flag */ -#define SPI_FLAG_TRANS SPI_STAT_TRANS /*!< transmit on-going flag */ -#define SPI_FLAG_FERR SPI_STAT_FERR /*!< format error flag */ -#define I2S_FLAG_RBNE SPI_STAT_RBNE /*!< receive buffer not empty flag */ -#define I2S_FLAG_TBE SPI_STAT_TBE /*!< transmit buffer empty flag */ -#define I2S_FLAG_CH SPI_STAT_I2SCH /*!< channel side flag */ -#define I2S_FLAG_TXURERR SPI_STAT_TXURERR /*!< underrun error flag */ -#define I2S_FLAG_RXORERR SPI_STAT_RXORERR /*!< overrun error flag */ -#define I2S_FLAG_TRANS SPI_STAT_TRANS /*!< transmit on-going flag */ -#define I2S_FLAG_FERR SPI_STAT_FERR /*!< format error flag */ - -/* function declarations */ -/* SPI/I2S deinitialization and initialization functions */ -/* reset SPI and I2S */ -void spi_i2s_deinit(uint32_t spi_periph); -/* initialize the parameters of SPI struct with the default values */ -void spi_struct_para_init(spi_parameter_struct* spi_struct); -/* initialize SPI parameter */ -void spi_init(uint32_t spi_periph, spi_parameter_struct* spi_struct); -/* enable SPI */ -void spi_enable(uint32_t spi_periph); -/* disable SPI */ -void spi_disable(uint32_t spi_periph); - -/* initialize I2S parameter */ -void i2s_init(uint32_t spi_periph, uint32_t i2s_mode, uint32_t i2s_standard, uint32_t i2s_ckpl); -/* configure I2S prescaler */ -void i2s_psc_config(uint32_t spi_periph, uint32_t i2s_audiosample, uint32_t i2s_frameformat, uint32_t i2s_mckout); -/* enable I2S */ -void i2s_enable(uint32_t spi_periph); -/* disable I2S */ -void i2s_disable(uint32_t spi_periph); - -/* NSS functions */ -/* enable SPI NSS output */ -void spi_nss_output_enable(uint32_t spi_periph); -/* disable SPI NSS output */ -void spi_nss_output_disable(uint32_t spi_periph); -/* SPI NSS pin high level in software mode */ -void spi_nss_internal_high(uint32_t spi_periph); -/* SPI NSS pin low level in software mode */ -void spi_nss_internal_low(uint32_t spi_periph); - -/* SPI DMA functions */ -/* enable SPI DMA */ -void spi_dma_enable(uint32_t spi_periph, uint8_t dma); -/* disable SPI DMA */ -void spi_dma_disable(uint32_t spi_periph, uint8_t dma); - -/* SPI/I2S transfer configure functions */ -/* configure SPI/I2S data frame format */ -void spi_i2s_data_frame_format_config(uint32_t spi_periph, uint16_t frame_format); -/* SPI transmit data */ -void spi_i2s_data_transmit(uint32_t spi_periph, uint16_t data); -/* SPI receive data */ -uint16_t spi_i2s_data_receive(uint32_t spi_periph); -/* configure SPI bidirectional transfer direction */ -void spi_bidirectional_transfer_config(uint32_t spi_periph, uint32_t transfer_direction); - -/* SPI CRC functions */ -/* set SPI CRC polynomial */ -void spi_crc_polynomial_set(uint32_t spi_periph, uint16_t crc_poly); -/* get SPI CRC polynomial */ -uint16_t spi_crc_polynomial_get(uint32_t spi_periph); -/* turn on SPI CRC function */ -void spi_crc_on(uint32_t spi_periph); -/* turn off SPI CRC function */ -void spi_crc_off(uint32_t spi_periph); -/* SPI next data is CRC value */ -void spi_crc_next(uint32_t spi_periph); -/* get SPI CRC send value or receive value */ -uint16_t spi_crc_get(uint32_t spi_periph, uint8_t crc); - -/* SPI TI mode functions */ -/* enable SPI TI mode */ -void spi_ti_mode_enable(uint32_t spi_periph); -/* disable SPI TI mode */ -void spi_ti_mode_disable(uint32_t spi_periph); - -/* SPI NSS pulse mode functions */ -/* enable SPI NSS pulse mode */ -void spi_nssp_mode_enable(uint32_t spi_periph); -/* disable SPI NSS pulse mode */ -void spi_nssp_mode_disable(uint32_t spi_periph); - -/* quad wire SPI functions */ -/* enable quad wire SPI */ -void qspi_enable(uint32_t spi_periph); -/* disable quad wire SPI */ -void qspi_disable(uint32_t spi_periph); -/* enable quad wire SPI write */ -void qspi_write_enable(uint32_t spi_periph); -/* enable quad wire SPI read */ -void qspi_read_enable(uint32_t spi_periph); -/* enable quad wire SPI_IO2 and SPI_IO3 pin output */ -void qspi_io23_output_enable(uint32_t spi_periph); -/* disable quad wire SPI_IO2 and SPI_IO3 pin output */ -void qspi_io23_output_disable(uint32_t spi_periph); - -/* flag and interrupt functions */ -/* enable SPI and I2S interrupt */ -void spi_i2s_interrupt_enable(uint32_t spi_periph, uint8_t interrupt); -/* disable SPI and I2S interrupt */ -void spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt); -/* get SPI and I2S interrupt status */ -FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt); -/* get SPI and I2S flag status */ -FlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag); -/* clear SPI CRC error flag status */ -void spi_crc_error_clear(uint32_t spi_periph); - -#endif /* GD32F30X_SPI_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_timer.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_timer.h deleted file mode 100644 index 56867e3..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_timer.h +++ /dev/null @@ -1,752 +0,0 @@ -/*! - \file gd32f30x_timer.h - \brief definitions for the TIMER - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_TIMER_H -#define GD32F30X_TIMER_H - -#include "gd32f30x.h" - -/* TIMERx(x=0..13) definitions */ -#define TIMER0 (TIMER_BASE + 0x00012C00U) -#define TIMER1 (TIMER_BASE + 0x00000000U) -#define TIMER2 (TIMER_BASE + 0x00000400U) -#define TIMER3 (TIMER_BASE + 0x00000800U) -#define TIMER4 (TIMER_BASE + 0x00000C00U) -#define TIMER5 (TIMER_BASE + 0x00001000U) -#define TIMER6 (TIMER_BASE + 0x00001400U) -#define TIMER7 (TIMER_BASE + 0x00013400U) -#define TIMER8 (TIMER_BASE + 0x00014C00U) -#define TIMER9 (TIMER_BASE + 0x00015000U) -#define TIMER10 (TIMER_BASE + 0x00015400U) -#define TIMER11 (TIMER_BASE + 0x00001800U) -#define TIMER12 (TIMER_BASE + 0x00001C00U) -#define TIMER13 (TIMER_BASE + 0x00002000U) - -/* registers definitions */ -#define TIMER_CTL0(timerx) REG32((timerx) + 0x00U) /*!< TIMER control register 0 */ -#define TIMER_CTL1(timerx) REG32((timerx) + 0x04U) /*!< TIMER control register 1 */ -#define TIMER_SMCFG(timerx) REG32((timerx) + 0x08U) /*!< TIMER slave mode configuration register */ -#define TIMER_DMAINTEN(timerx) REG32((timerx) + 0x0CU) /*!< TIMER DMA and interrupt enable register */ -#define TIMER_INTF(timerx) REG32((timerx) + 0x10U) /*!< TIMER interrupt flag register */ -#define TIMER_SWEVG(timerx) REG32((timerx) + 0x14U) /*!< TIMER software event generation register */ -#define TIMER_CHCTL0(timerx) REG32((timerx) + 0x18U) /*!< TIMER channel control register 0 */ -#define TIMER_CHCTL1(timerx) REG32((timerx) + 0x1CU) /*!< TIMER channel control register 1 */ -#define TIMER_CHCTL2(timerx) REG32((timerx) + 0x20U) /*!< TIMER channel control register 2 */ -#define TIMER_CNT(timerx) REG32((timerx) + 0x24U) /*!< TIMER counter register */ -#define TIMER_PSC(timerx) REG32((timerx) + 0x28U) /*!< TIMER prescaler register */ -#define TIMER_CAR(timerx) REG32((timerx) + 0x2CU) /*!< TIMER counter auto reload register */ -#define TIMER_CREP(timerx) REG32((timerx) + 0x30U) /*!< TIMER counter repetition register */ -#define TIMER_CH0CV(timerx) REG32((timerx) + 0x34U) /*!< TIMER channel 0 capture/compare value register */ -#define TIMER_CH1CV(timerx) REG32((timerx) + 0x38U) /*!< TIMER channel 1 capture/compare value register */ -#define TIMER_CH2CV(timerx) REG32((timerx) + 0x3CU) /*!< TIMER channel 2 capture/compare value register */ -#define TIMER_CH3CV(timerx) REG32((timerx) + 0x40U) /*!< TIMER channel 3 capture/compare value register */ -#define TIMER_CCHP(timerx) REG32((timerx) + 0x44U) /*!< TIMER complementary channel protection register */ -#define TIMER_DMACFG(timerx) REG32((timerx) + 0x48U) /*!< TIMER DMA configuration register */ -#define TIMER_DMATB(timerx) REG32((timerx) + 0x4CU) /*!< TIMER DMA transfer buffer register */ -#define TIMER_IRMP(timerx) REG32((timerx) + 0x50U) /*!< TIMER channel input remap register */ -#define TIMER_CFG(timerx) REG32((timerx) + 0xFCU) /*!< TIMER configuration register */ - -/* bits definitions */ -/* TIMER_CTL0 */ -#define TIMER_CTL0_CEN BIT(0) /*!< TIMER counter enable */ -#define TIMER_CTL0_UPDIS BIT(1) /*!< update disable */ -#define TIMER_CTL0_UPS BIT(2) /*!< update source */ -#define TIMER_CTL0_SPM BIT(3) /*!< single pulse mode */ -#define TIMER_CTL0_DIR BIT(4) /*!< timer counter direction */ -#define TIMER_CTL0_CAM BITS(5,6) /*!< center-aligned mode selection */ -#define TIMER_CTL0_ARSE BIT(7) /*!< auto-reload shadow enable */ -#define TIMER_CTL0_CKDIV BITS(8,9) /*!< clock division */ - -/* TIMER_CTL1 */ -#define TIMER_CTL1_CCSE BIT(0) /*!< commutation control shadow enable */ -#define TIMER_CTL1_CCUC BIT(2) /*!< commutation control shadow register update control */ -#define TIMER_CTL1_DMAS BIT(3) /*!< DMA request source selection */ -#define TIMER_CTL1_MMC BITS(4,6) /*!< master mode control */ -#define TIMER_CTL1_TI0S BIT(7) /*!< channel 0 trigger input selection(hall mode selection) */ -#define TIMER_CTL1_ISO0 BIT(8) /*!< idle state of channel 0 output */ -#define TIMER_CTL1_ISO0N BIT(9) /*!< idle state of channel 0 complementary output */ -#define TIMER_CTL1_ISO1 BIT(10) /*!< idle state of channel 1 output */ -#define TIMER_CTL1_ISO1N BIT(11) /*!< idle state of channel 1 complementary output */ -#define TIMER_CTL1_ISO2 BIT(12) /*!< idle state of channel 2 output */ -#define TIMER_CTL1_ISO2N BIT(13) /*!< idle state of channel 2 complementary output */ -#define TIMER_CTL1_ISO3 BIT(14) /*!< idle state of channel 3 output */ - -/* TIMER_SMCFG */ -#define TIMER_SMCFG_SMC BITS(0,2) /*!< slave mode control */ -#define TIMER_SMCFG_TRGS BITS(4,6) /*!< trigger selection */ -#define TIMER_SMCFG_MSM BIT(7) /*!< master-slave mode */ -#define TIMER_SMCFG_ETFC BITS(8,11) /*!< external trigger filter control */ -#define TIMER_SMCFG_ETPSC BITS(12,13) /*!< external trigger prescaler */ -#define TIMER_SMCFG_SMC1 BIT(14) /*!< part of SMC for enable external clock mode 1 */ -#define TIMER_SMCFG_ETP BIT(15) /*!< external trigger polarity */ - -/* TIMER_DMAINTEN */ -#define TIMER_DMAINTEN_UPIE BIT(0) /*!< update interrupt enable */ -#define TIMER_DMAINTEN_CH0IE BIT(1) /*!< channel 0 capture/compare interrupt enable */ -#define TIMER_DMAINTEN_CH1IE BIT(2) /*!< channel 1 capture/compare interrupt enable */ -#define TIMER_DMAINTEN_CH2IE BIT(3) /*!< channel 2 capture/compare interrupt enable */ -#define TIMER_DMAINTEN_CH3IE BIT(4) /*!< channel 3 capture/compare interrupt enable */ -#define TIMER_DMAINTEN_CMTIE BIT(5) /*!< commutation interrupt request enable */ -#define TIMER_DMAINTEN_TRGIE BIT(6) /*!< trigger interrupt enable */ -#define TIMER_DMAINTEN_BRKIE BIT(7) /*!< break interrupt enable */ -#define TIMER_DMAINTEN_UPDEN BIT(8) /*!< update DMA request enable */ -#define TIMER_DMAINTEN_CH0DEN BIT(9) /*!< channel 0 DMA request enable */ -#define TIMER_DMAINTEN_CH1DEN BIT(10) /*!< channel 1 DMA request enable */ -#define TIMER_DMAINTEN_CH2DEN BIT(11) /*!< channel 2 DMA request enable */ -#define TIMER_DMAINTEN_CH3DEN BIT(12) /*!< channel 3 DMA request enable */ -#define TIMER_DMAINTEN_CMTDEN BIT(13) /*!< commutation DMA request enable */ -#define TIMER_DMAINTEN_TRGDEN BIT(14) /*!< trigger DMA request enable */ - -/* TIMER_INTF */ -#define TIMER_INTF_UPIF BIT(0) /*!< update interrupt flag */ -#define TIMER_INTF_CH0IF BIT(1) /*!< channel 0 capture/compare interrupt flag */ -#define TIMER_INTF_CH1IF BIT(2) /*!< channel 1 capture/compare interrupt flag */ -#define TIMER_INTF_CH2IF BIT(3) /*!< channel 2 capture/compare interrupt flag */ -#define TIMER_INTF_CH3IF BIT(4) /*!< channel 3 capture/compare interrupt flag */ -#define TIMER_INTF_CMTIF BIT(5) /*!< channel commutation interrupt flag */ -#define TIMER_INTF_TRGIF BIT(6) /*!< trigger interrupt flag */ -#define TIMER_INTF_BRKIF BIT(7) /*!< break interrupt flag */ -#define TIMER_INTF_CH0OF BIT(9) /*!< channel 0 overcapture flag */ -#define TIMER_INTF_CH1OF BIT(10) /*!< channel 1 overcapture flag */ -#define TIMER_INTF_CH2OF BIT(11) /*!< channel 2 overcapture flag */ -#define TIMER_INTF_CH3OF BIT(12) /*!< channel 3 overcapture flag */ - -/* TIMER_SWEVG */ -#define TIMER_SWEVG_UPG BIT(0) /*!< update event generate */ -#define TIMER_SWEVG_CH0G BIT(1) /*!< channel 0 capture or compare event generation */ -#define TIMER_SWEVG_CH1G BIT(2) /*!< channel 1 capture or compare event generation */ -#define TIMER_SWEVG_CH2G BIT(3) /*!< channel 2 capture or compare event generation */ -#define TIMER_SWEVG_CH3G BIT(4) /*!< channel 3 capture or compare event generation */ -#define TIMER_SWEVG_CMTG BIT(5) /*!< channel commutation event generation */ -#define TIMER_SWEVG_TRGG BIT(6) /*!< trigger event generation */ -#define TIMER_SWEVG_BRKG BIT(7) /*!< break event generation */ - -/* TIMER_CHCTL0 */ -/* output compare mode */ -#define TIMER_CHCTL0_CH0MS BITS(0,1) /*!< channel 0 mode selection */ -#define TIMER_CHCTL0_CH0COMFEN BIT(2) /*!< channel 0 output compare fast enable */ -#define TIMER_CHCTL0_CH0COMSEN BIT(3) /*!< channel 0 output compare shadow enable */ -#define TIMER_CHCTL0_CH0COMCTL BITS(4,6) /*!< channel 0 output compare mode */ -#define TIMER_CHCTL0_CH0COMCEN BIT(7) /*!< channel 0 output compare clear enable */ -#define TIMER_CHCTL0_CH1MS BITS(8,9) /*!< channel 1 mode selection */ -#define TIMER_CHCTL0_CH1COMFEN BIT(10) /*!< channel 1 output compare fast enable */ -#define TIMER_CHCTL0_CH1COMSEN BIT(11) /*!< channel 1 output compare shadow enable */ -#define TIMER_CHCTL0_CH1COMCTL BITS(12,14) /*!< channel 1 output compare mode */ -#define TIMER_CHCTL0_CH1COMCEN BIT(15) /*!< channel 1 output compare clear enable */ -/* input capture mode */ -#define TIMER_CHCTL0_CH0CAPPSC BITS(2,3) /*!< channel 0 input capture prescaler */ -#define TIMER_CHCTL0_CH0CAPFLT BITS(4,7) /*!< channel 0 input capture filter control */ -#define TIMER_CHCTL0_CH1CAPPSC BITS(10,11) /*!< channel 1 input capture prescaler */ -#define TIMER_CHCTL0_CH1CAPFLT BITS(12,15) /*!< channel 1 input capture filter control */ - -/* TIMER_CHCTL1 */ -/* output compare mode */ -#define TIMER_CHCTL1_CH2MS BITS(0,1) /*!< channel 2 mode selection */ -#define TIMER_CHCTL1_CH2COMFEN BIT(2) /*!< channel 2 output compare fast enable */ -#define TIMER_CHCTL1_CH2COMSEN BIT(3) /*!< channel 2 output compare shadow enable */ -#define TIMER_CHCTL1_CH2COMCTL BITS(4,6) /*!< channel 2 output compare mode */ -#define TIMER_CHCTL1_CH2COMCEN BIT(7) /*!< channel 2 output compare clear enable */ -#define TIMER_CHCTL1_CH3MS BITS(8,9) /*!< channel 3 mode selection */ -#define TIMER_CHCTL1_CH3COMFEN BIT(10) /*!< channel 3 output compare fast enable */ -#define TIMER_CHCTL1_CH3COMSEN BIT(11) /*!< channel 3 output compare shadow enable */ -#define TIMER_CHCTL1_CH3COMCTL BITS(12,14) /*!< channel 3 output compare mode */ -#define TIMER_CHCTL1_CH3COMCEN BIT(15) /*!< channel 3 output compare clear enable */ -/* input capture mode */ -#define TIMER_CHCTL1_CH2CAPPSC BITS(2,3) /*!< channel 2 input capture prescaler */ -#define TIMER_CHCTL1_CH2CAPFLT BITS(4,7) /*!< channel 2 input capture filter control */ -#define TIMER_CHCTL1_CH3CAPPSC BITS(10,11) /*!< channel 3 input capture prescaler */ -#define TIMER_CHCTL1_CH3CAPFLT BITS(12,15) /*!< channel 3 input capture filter control */ - -/* TIMER_CHCTL2 */ -#define TIMER_CHCTL2_CH0EN BIT(0) /*!< channel 0 capture/compare function enable */ -#define TIMER_CHCTL2_CH0P BIT(1) /*!< channel 0 capture/compare function polarity */ -#define TIMER_CHCTL2_CH0NEN BIT(2) /*!< channel 0 complementary output enable */ -#define TIMER_CHCTL2_CH0NP BIT(3) /*!< channel 0 complementary output polarity */ -#define TIMER_CHCTL2_CH1EN BIT(4) /*!< channel 1 capture/compare function enable */ -#define TIMER_CHCTL2_CH1P BIT(5) /*!< channel 1 capture/compare function polarity */ -#define TIMER_CHCTL2_CH1NEN BIT(6) /*!< channel 1 complementary output enable */ -#define TIMER_CHCTL2_CH1NP BIT(7) /*!< channel 1 complementary output polarity */ -#define TIMER_CHCTL2_CH2EN BIT(8) /*!< channel 2 capture/compare function enable */ -#define TIMER_CHCTL2_CH2P BIT(9) /*!< channel 2 capture/compare function polarity */ -#define TIMER_CHCTL2_CH2NEN BIT(10) /*!< channel 2 complementary output enable */ -#define TIMER_CHCTL2_CH2NP BIT(11) /*!< channel 2 complementary output polarity */ -#define TIMER_CHCTL2_CH3EN BIT(12) /*!< channel 3 capture/compare function enable */ -#define TIMER_CHCTL2_CH3P BIT(13) /*!< channel 3 capture/compare function polarity */ - -/* TIMER_CNT */ -#define TIMER_CNT_CNT BITS(0,15) /*!< 16 bit timer counter */ - -/* TIMER_PSC */ -#define TIMER_PSC_PSC BITS(0,15) /*!< prescaler value of the counter clock */ - -/* TIMER_CAR */ -#define TIMER_CAR_CARL BITS(0,15) /*!< 16 bit counter auto reload value */ - -/* TIMER_CREP */ -#define TIMER_CREP_CREP BITS(0,7) /*!< counter repetition value */ - -/* TIMER_CH0CV */ -#define TIMER_CH0CV_CH0VAL BITS(0,15) /*!< 16 bit capture/compare value of channel 0 */ - -/* TIMER_CH1CV */ -#define TIMER_CH1CV_CH1VAL BITS(0,15) /*!< 16 bit capture/compare value of channel 1 */ - -/* TIMER_CH2CV */ -#define TIMER_CH2CV_CH2VAL BITS(0,15) /*!< 16 bit capture/compare value of channel 2 */ - -/* TIMER_CH3CV */ -#define TIMER_CH3CV_CH3VAL BITS(0,15) /*!< 16 bit capture/compare value of channel 3 */ - -/* TIMER_CCHP */ -#define TIMER_CCHP_DTCFG BITS(0,7) /*!< dead time configure */ -#define TIMER_CCHP_PROT BITS(8,9) /*!< complementary register protect control */ -#define TIMER_CCHP_IOS BIT(10) /*!< idle mode off-state configure */ -#define TIMER_CCHP_ROS BIT(11) /*!< run mode off-state configure */ -#define TIMER_CCHP_BRKEN BIT(12) /*!< break enable */ -#define TIMER_CCHP_BRKP BIT(13) /*!< break polarity */ -#define TIMER_CCHP_OAEN BIT(14) /*!< output automatic enable */ -#define TIMER_CCHP_POEN BIT(15) /*!< primary output enable */ - -/* TIMER_DMACFG */ -#define TIMER_DMACFG_DMATA BITS(0,4) /*!< DMA transfer access start address */ -#define TIMER_DMACFG_DMATC BITS(8,12) /*!< DMA transfer count */ - -/* TIMER_DMATB */ -#define TIMER_DMATB_DMATB BITS(0,15) /*!< DMA transfer buffer address */ - -/* TIMER_IRMP */ -#define TIMER10_IRMP_ITI1_RMP BITS(0,1) /*!< TIMER10 internal trigger input 1 remap */ - -/* TIMER_CFG */ -#define TIMER_CFG_OUTSEL BIT(0) /*!< the output value selection */ -#define TIMER_CFG_CHVSEL BIT(1) /*!< write CHxVAL register selection */ - -/* constants definitions */ -/* TIMER init parameter struct definitions*/ -typedef struct -{ - uint16_t prescaler; /*!< prescaler value */ - uint16_t alignedmode; /*!< aligned mode */ - uint16_t counterdirection; /*!< counter direction */ - uint16_t clockdivision; /*!< clock division value */ - uint32_t period; /*!< period value */ - uint8_t repetitioncounter; /*!< the counter repetition value */ -}timer_parameter_struct; - -/* break parameter struct definitions*/ -typedef struct -{ - uint16_t runoffstate; /*!< run mode off-state */ - uint16_t ideloffstate; /*!< idle mode off-state */ - uint16_t deadtime; /*!< dead time */ - uint16_t breakpolarity; /*!< break polarity */ - uint16_t outputautostate; /*!< output automatic enable */ - uint16_t protectmode; /*!< complementary register protect control */ - uint16_t breakstate; /*!< break enable */ -}timer_break_parameter_struct; - -/* channel output parameter struct definitions */ -typedef struct -{ - uint16_t outputstate; /*!< channel output state */ - uint16_t outputnstate; /*!< channel complementary output state */ - uint16_t ocpolarity; /*!< channel output polarity */ - uint16_t ocnpolarity; /*!< channel complementary output polarity */ - uint16_t ocidlestate; /*!< idle state of channel output */ - uint16_t ocnidlestate; /*!< idle state of channel complementary output */ -}timer_oc_parameter_struct; - -/* channel input parameter struct definitions */ -typedef struct -{ - uint16_t icpolarity; /*!< channel input polarity */ - uint16_t icselection; /*!< channel input mode selection */ - uint16_t icprescaler; /*!< channel input capture prescaler */ - uint16_t icfilter; /*!< channel input capture filter control */ -}timer_ic_parameter_struct; - -/* TIMER interrupt enable or disable */ -#define TIMER_INT_UP TIMER_DMAINTEN_UPIE /*!< update interrupt */ -#define TIMER_INT_CH0 TIMER_DMAINTEN_CH0IE /*!< channel 0 interrupt */ -#define TIMER_INT_CH1 TIMER_DMAINTEN_CH1IE /*!< channel 1 interrupt */ -#define TIMER_INT_CH2 TIMER_DMAINTEN_CH2IE /*!< channel 2 interrupt */ -#define TIMER_INT_CH3 TIMER_DMAINTEN_CH3IE /*!< channel 3 interrupt */ -#define TIMER_INT_CMT TIMER_DMAINTEN_CMTIE /*!< channel commutation interrupt flag */ -#define TIMER_INT_TRG TIMER_DMAINTEN_TRGIE /*!< trigger interrupt */ -#define TIMER_INT_BRK TIMER_DMAINTEN_BRKIE /*!< break interrupt */ - -/* TIMER flag */ -#define TIMER_FLAG_UP TIMER_INTF_UPIF /*!< update flag */ -#define TIMER_FLAG_CH0 TIMER_INTF_CH0IF /*!< channel 0 flag */ -#define TIMER_FLAG_CH1 TIMER_INTF_CH1IF /*!< channel 1 flag */ -#define TIMER_FLAG_CH2 TIMER_INTF_CH2IF /*!< channel 2 flag */ -#define TIMER_FLAG_CH3 TIMER_INTF_CH3IF /*!< channel 3 flag */ -#define TIMER_FLAG_CMT TIMER_INTF_CMTIF /*!< channel commutation flag */ -#define TIMER_FLAG_TRG TIMER_INTF_TRGIF /*!< trigger flag */ -#define TIMER_FLAG_BRK TIMER_INTF_BRKIF /*!< break flag */ -#define TIMER_FLAG_CH0O TIMER_INTF_CH0OF /*!< channel 0 overcapture flag */ -#define TIMER_FLAG_CH1O TIMER_INTF_CH1OF /*!< channel 1 overcapture flag */ -#define TIMER_FLAG_CH2O TIMER_INTF_CH2OF /*!< channel 2 overcapture flag */ -#define TIMER_FLAG_CH3O TIMER_INTF_CH3OF /*!< channel 3 overcapture flag */ - -/* TIMER interrupt flag */ -#define TIMER_INT_FLAG_UP TIMER_INTF_UPIF /*!< update interrupt flag */ -#define TIMER_INT_FLAG_CH0 TIMER_INTF_CH0IF /*!< channel 0 interrupt flag */ -#define TIMER_INT_FLAG_CH1 TIMER_INTF_CH1IF /*!< channel 1 interrupt flag */ -#define TIMER_INT_FLAG_CH2 TIMER_INTF_CH2IF /*!< channel 2 interrupt flag */ -#define TIMER_INT_FLAG_CH3 TIMER_INTF_CH3IF /*!< channel 3 interrupt flag */ -#define TIMER_INT_FLAG_CMT TIMER_INTF_CMTIF /*!< channel commutation interrupt flag */ -#define TIMER_INT_FLAG_TRG TIMER_INTF_TRGIF /*!< trigger interrupt flag */ -#define TIMER_INT_FLAG_BRK TIMER_INTF_BRKIF - - - -/* TIMER DMA source enable */ -#define TIMER_DMA_UPD ((uint16_t)TIMER_DMAINTEN_UPDEN) /*!< update DMA enable */ -#define TIMER_DMA_CH0D ((uint16_t)TIMER_DMAINTEN_CH0DEN) /*!< channel 0 DMA enable */ -#define TIMER_DMA_CH1D ((uint16_t)TIMER_DMAINTEN_CH1DEN) /*!< channel 1 DMA enable */ -#define TIMER_DMA_CH2D ((uint16_t)TIMER_DMAINTEN_CH2DEN) /*!< channel 2 DMA enable */ -#define TIMER_DMA_CH3D ((uint16_t)TIMER_DMAINTEN_CH3DEN) /*!< channel 3 DMA enable */ -#define TIMER_DMA_CMTD ((uint16_t)TIMER_DMAINTEN_CMTDEN) /*!< commutation DMA request enable */ -#define TIMER_DMA_TRGD ((uint16_t)TIMER_DMAINTEN_TRGDEN) /*!< trigger DMA enable */ - -/* channel DMA request source selection */ -#define TIMER_DMAREQUEST_UPDATEEVENT ((uint8_t)0x00U) /*!< DMA request of channel y is sent when update event occurs */ -#define TIMER_DMAREQUEST_CHANNELEVENT ((uint8_t)0x01U) /*!< DMA request of channel y is sent when channel y event occurs */ - -/* DMA access base address */ -#define DMACFG_DMATA(regval) (BITS(0, 4) & ((uint32_t)(regval) << 0U)) -#define TIMER_DMACFG_DMATA_CTL0 DMACFG_DMATA(0) /*!< DMA transfer address is TIMER_CTL0 */ -#define TIMER_DMACFG_DMATA_CTL1 DMACFG_DMATA(1) /*!< DMA transfer address is TIMER_CTL1 */ -#define TIMER_DMACFG_DMATA_SMCFG DMACFG_DMATA(2) /*!< DMA transfer address is TIMER_SMCFG */ -#define TIMER_DMACFG_DMATA_DMAINTEN DMACFG_DMATA(3) /*!< DMA transfer address is TIMER_DMAINTEN */ -#define TIMER_DMACFG_DMATA_INTF DMACFG_DMATA(4) /*!< DMA transfer address is TIMER_INTF */ -#define TIMER_DMACFG_DMATA_SWEVG DMACFG_DMATA(5) /*!< DMA transfer address is TIMER_SWEVG */ -#define TIMER_DMACFG_DMATA_CHCTL0 DMACFG_DMATA(6) /*!< DMA transfer address is TIMER_CHCTL0 */ -#define TIMER_DMACFG_DMATA_CHCTL1 DMACFG_DMATA(7) /*!< DMA transfer address is TIMER_CHCTL1 */ -#define TIMER_DMACFG_DMATA_CHCTL2 DMACFG_DMATA(8) /*!< DMA transfer address is TIMER_CHCTL2 */ -#define TIMER_DMACFG_DMATA_CNT DMACFG_DMATA(9) /*!< DMA transfer address is TIMER_CNT */ -#define TIMER_DMACFG_DMATA_PSC DMACFG_DMATA(10) /*!< DMA transfer address is TIMER_PSC */ -#define TIMER_DMACFG_DMATA_CAR DMACFG_DMATA(11) /*!< DMA transfer address is TIMER_CAR */ -#define TIMER_DMACFG_DMATA_CREP DMACFG_DMATA(12) /*!< DMA transfer address is TIMER_CREP */ -#define TIMER_DMACFG_DMATA_CH0CV DMACFG_DMATA(13) /*!< DMA transfer address is TIMER_CH0CV */ -#define TIMER_DMACFG_DMATA_CH1CV DMACFG_DMATA(14) /*!< DMA transfer address is TIMER_CH1CV */ -#define TIMER_DMACFG_DMATA_CH2CV DMACFG_DMATA(15) /*!< DMA transfer address is TIMER_CH2CV */ -#define TIMER_DMACFG_DMATA_CH3CV DMACFG_DMATA(16) /*!< DMA transfer address is TIMER_CH3CV */ -#define TIMER_DMACFG_DMATA_CCHP DMACFG_DMATA(17) /*!< DMA transfer address is TIMER_CCHP */ -#define TIMER_DMACFG_DMATA_DMACFG DMACFG_DMATA(18) /*!< DMA transfer address is TIMER_DMACFG */ -#define TIMER_DMACFG_DMATA_DMATB DMACFG_DMATA(19) /*!< DMA transfer address is TIMER_DMATB */ - -/* DMA access burst length */ -#define DMACFG_DMATC(regval) (BITS(8, 12) & ((uint32_t)(regval) << 8U)) -#define TIMER_DMACFG_DMATC_1TRANSFER DMACFG_DMATC(0) /*!< DMA transfer 1 time */ -#define TIMER_DMACFG_DMATC_2TRANSFER DMACFG_DMATC(1) /*!< DMA transfer 2 times */ -#define TIMER_DMACFG_DMATC_3TRANSFER DMACFG_DMATC(2) /*!< DMA transfer 3 times */ -#define TIMER_DMACFG_DMATC_4TRANSFER DMACFG_DMATC(3) /*!< DMA transfer 4 times */ -#define TIMER_DMACFG_DMATC_5TRANSFER DMACFG_DMATC(4) /*!< DMA transfer 5 times */ -#define TIMER_DMACFG_DMATC_6TRANSFER DMACFG_DMATC(5) /*!< DMA transfer 6 times */ -#define TIMER_DMACFG_DMATC_7TRANSFER DMACFG_DMATC(6) /*!< DMA transfer 7 times */ -#define TIMER_DMACFG_DMATC_8TRANSFER DMACFG_DMATC(7) /*!< DMA transfer 8 times */ -#define TIMER_DMACFG_DMATC_9TRANSFER DMACFG_DMATC(8) /*!< DMA transfer 9 times */ -#define TIMER_DMACFG_DMATC_10TRANSFER DMACFG_DMATC(9) /*!< DMA transfer 10 times */ -#define TIMER_DMACFG_DMATC_11TRANSFER DMACFG_DMATC(10) /*!< DMA transfer 11 times */ -#define TIMER_DMACFG_DMATC_12TRANSFER DMACFG_DMATC(11) /*!< DMA transfer 12 times */ -#define TIMER_DMACFG_DMATC_13TRANSFER DMACFG_DMATC(12) /*!< DMA transfer 13 times */ -#define TIMER_DMACFG_DMATC_14TRANSFER DMACFG_DMATC(13) /*!< DMA transfer 14 times */ -#define TIMER_DMACFG_DMATC_15TRANSFER DMACFG_DMATC(14) /*!< DMA transfer 15 times */ -#define TIMER_DMACFG_DMATC_16TRANSFER DMACFG_DMATC(15) /*!< DMA transfer 16 times */ -#define TIMER_DMACFG_DMATC_17TRANSFER DMACFG_DMATC(16) /*!< DMA transfer 17 times */ -#define TIMER_DMACFG_DMATC_18TRANSFER DMACFG_DMATC(17) /*!< DMA transfer 18 times */ - -/* TIMER software event generation source */ -#define TIMER_EVENT_SRC_UPG ((uint16_t)0x0001U) /*!< update event generation */ -#define TIMER_EVENT_SRC_CH0G ((uint16_t)0x0002U) /*!< channel 0 capture or compare event generation */ -#define TIMER_EVENT_SRC_CH1G ((uint16_t)0x0004U) /*!< channel 1 capture or compare event generation */ -#define TIMER_EVENT_SRC_CH2G ((uint16_t)0x0008U) /*!< channel 2 capture or compare event generation */ -#define TIMER_EVENT_SRC_CH3G ((uint16_t)0x0010U) /*!< channel 3 capture or compare event generation */ -#define TIMER_EVENT_SRC_CMTG ((uint16_t)0x0020U) /*!< channel commutation event generation */ -#define TIMER_EVENT_SRC_TRGG ((uint16_t)0x0040U) /*!< trigger event generation */ -#define TIMER_EVENT_SRC_BRKG ((uint16_t)0x0080U) /*!< break event generation */ - -/* center-aligned mode selection */ -#define CTL0_CAM(regval) ((uint16_t)(BITS(5, 6) & ((uint32_t)(regval) << 5U))) -#define TIMER_COUNTER_EDGE CTL0_CAM(0) /*!< edge-aligned mode */ -#define TIMER_COUNTER_CENTER_DOWN CTL0_CAM(1) /*!< center-aligned and counting down assert mode */ -#define TIMER_COUNTER_CENTER_UP CTL0_CAM(2) /*!< center-aligned and counting up assert mode */ -#define TIMER_COUNTER_CENTER_BOTH CTL0_CAM(3) /*!< center-aligned and counting up/down assert mode */ - -/* TIMER prescaler reload mode */ -#define TIMER_PSC_RELOAD_NOW ((uint32_t)0x00000000U) /*!< the prescaler is loaded right now */ -#define TIMER_PSC_RELOAD_UPDATE ((uint32_t)0x00000001U) /*!< the prescaler is loaded at the next update event */ - -/* count direction */ -#define TIMER_COUNTER_UP ((uint16_t)0x0000U) /*!< counter up direction */ -#define TIMER_COUNTER_DOWN ((uint16_t)TIMER_CTL0_DIR) /*!< counter down direction */ - -/* specify division ratio between TIMER clock and dead-time and sampling clock */ -#define CTL0_CKDIV(regval) ((uint16_t)(BITS(8, 9) & ((uint32_t)(regval) << 8U))) -#define TIMER_CKDIV_DIV1 CTL0_CKDIV(0) /*!< clock division value is 1,fDTS=fTIMER_CK */ -#define TIMER_CKDIV_DIV2 CTL0_CKDIV(1) /*!< clock division value is 2,fDTS= fTIMER_CK/2 */ -#define TIMER_CKDIV_DIV4 CTL0_CKDIV(2) /*!< clock division value is 4, fDTS= fTIMER_CK/4 */ - -/* single pulse mode */ -#define TIMER_SP_MODE_SINGLE ((uint32_t)0x00000000U) /*!< single pulse mode */ -#define TIMER_SP_MODE_REPETITIVE ((uint32_t)0x00000001U) /*!< repetitive pulse mode */ - -/* update source */ -#define TIMER_UPDATE_SRC_REGULAR ((uint32_t)0x00000000U) /*!< update generate only by counter overflow/underflow */ -#define TIMER_UPDATE_SRC_GLOBAL ((uint32_t)0x00000001U) /*!< update generate by setting of UPG bit or the counter overflow/underflow,or the slave mode controller trigger */ - -/* run mode off-state configure */ -#define TIMER_ROS_STATE_ENABLE ((uint16_t)TIMER_CCHP_ROS) /*!< when POEN bit is set, the channel output signals (CHx_O/CHx_ON) are enabled, with relationship to CHxEN/CHxNEN bits */ -#define TIMER_ROS_STATE_DISABLE ((uint16_t)0x0000U) /*!< when POEN bit is set, the channel output signals (CHx_O/CHx_ON) are disabled */ - -/* idle mode off-state configure */ -#define TIMER_IOS_STATE_ENABLE ((uint16_t)TIMER_CCHP_IOS) /*!< when POEN bit is reset, he channel output signals (CHx_O/CHx_ON) are enabled, with relationship to CHxEN/CHxNEN bits */ -#define TIMER_IOS_STATE_DISABLE ((uint16_t)0x0000U) /*!< when POEN bit is reset, the channel output signals (CHx_O/CHx_ON) are disabled */ - -/* break input polarity */ -#define TIMER_BREAK_POLARITY_LOW ((uint16_t)0x0000U) /*!< break input polarity is low */ -#define TIMER_BREAK_POLARITY_HIGH ((uint16_t)TIMER_CCHP_BRKP) /*!< break input polarity is high */ - -/* output automatic enable */ -#define TIMER_OUTAUTO_ENABLE ((uint16_t)TIMER_CCHP_OAEN) /*!< output automatic enable */ -#define TIMER_OUTAUTO_DISABLE ((uint16_t)0x0000U) /*!< output automatic disable */ - -/* complementary register protect control */ -#define CCHP_PROT(regval) ((uint16_t)(BITS(8, 9) & ((uint32_t)(regval) << 8U))) -#define TIMER_CCHP_PROT_OFF CCHP_PROT(0) /*!< protect disable */ -#define TIMER_CCHP_PROT_0 CCHP_PROT(1) /*!< PROT mode 0 */ -#define TIMER_CCHP_PROT_1 CCHP_PROT(2) /*!< PROT mode 1 */ -#define TIMER_CCHP_PROT_2 CCHP_PROT(3) /*!< PROT mode 2 */ - -/* break input enable */ -#define TIMER_BREAK_ENABLE ((uint16_t)TIMER_CCHP_BRKEN) /*!< break input enable */ -#define TIMER_BREAK_DISABLE ((uint16_t)0x0000U) /*!< break input disable */ - -/* TIMER channel n(n=0,1,2,3) */ -#define TIMER_CH_0 ((uint16_t)0x0000U) /*!< TIMER channel 0(TIMERx(x=0..4,7..13)) */ -#define TIMER_CH_1 ((uint16_t)0x0001U) /*!< TIMER channel 1(TIMERx(x=0..4,7,8,11)) */ -#define TIMER_CH_2 ((uint16_t)0x0002U) /*!< TIMER channel 2(TIMERx(x=0..4,7)) */ -#define TIMER_CH_3 ((uint16_t)0x0003U) /*!< TIMER channel 3(TIMERx(x=0..4,7)) */ - -/* channel enable state*/ -#define TIMER_CCX_ENABLE ((uint32_t)0x00000001U) /*!< channel enable */ -#define TIMER_CCX_DISABLE ((uint32_t)0x00000000U) /*!< channel disable */ - -/* channel complementary output enable state*/ -#define TIMER_CCXN_ENABLE ((uint16_t)0x0004U) /*!< channel complementary enable */ -#define TIMER_CCXN_DISABLE ((uint16_t)0x0000U) /*!< channel complementary disable */ - -/* channel output polarity */ -#define TIMER_OC_POLARITY_HIGH ((uint16_t)0x0000U) /*!< channel output polarity is high */ -#define TIMER_OC_POLARITY_LOW ((uint16_t)0x0002U) /*!< channel output polarity is low */ - -/* channel complementary output polarity */ -#define TIMER_OCN_POLARITY_HIGH ((uint16_t)0x0000U) /*!< channel complementary output polarity is high */ -#define TIMER_OCN_POLARITY_LOW ((uint16_t)0x0008U) /*!< channel complementary output polarity is low */ - -/* idle state of channel output */ -#define TIMER_OC_IDLE_STATE_HIGH ((uint16_t)0x0100) /*!< idle state of channel output is high */ -#define TIMER_OC_IDLE_STATE_LOW ((uint16_t)0x0000) /*!< idle state of channel output is low */ - -/* idle state of channel complementary output */ -#define TIMER_OCN_IDLE_STATE_HIGH ((uint16_t)0x0200U) /*!< idle state of channel complementary output is high */ -#define TIMER_OCN_IDLE_STATE_LOW ((uint16_t)0x0000U) /*!< idle state of channel complementary output is low */ - -/* channel output compare mode */ -#define TIMER_OC_MODE_TIMING ((uint16_t)0x0000U) /*!< timing mode */ -#define TIMER_OC_MODE_ACTIVE ((uint16_t)0x0010U) /*!< active mode */ -#define TIMER_OC_MODE_INACTIVE ((uint16_t)0x0020U) /*!< inactive mode */ -#define TIMER_OC_MODE_TOGGLE ((uint16_t)0x0030U) /*!< toggle mode */ -#define TIMER_OC_MODE_LOW ((uint16_t)0x0040U) /*!< force low mode */ -#define TIMER_OC_MODE_HIGH ((uint16_t)0x0050U) /*!< force high mode */ -#define TIMER_OC_MODE_PWM0 ((uint16_t)0x0060U) /*!< PWM0 mode */ -#define TIMER_OC_MODE_PWM1 ((uint16_t)0x0070U) /*!< PWM1 mode*/ - -/* channel output compare shadow enable */ -#define TIMER_OC_SHADOW_ENABLE ((uint16_t)0x0008U) /*!< channel output shadow state enable */ -#define TIMER_OC_SHADOW_DISABLE ((uint16_t)0x0000U) /*!< channel output shadow state disable */ - -/* channel output compare fast enable */ -#define TIMER_OC_FAST_ENABLE ((uint16_t)0x0004) /*!< channel output fast function enable */ -#define TIMER_OC_FAST_DISABLE ((uint16_t)0x0000) /*!< channel output fast function disable */ - -/* channel output compare clear enable */ -#define TIMER_OC_CLEAR_ENABLE ((uint16_t)0x0080U) /*!< channel output clear function enable */ -#define TIMER_OC_CLEAR_DISABLE ((uint16_t)0x0000U) /*!< channel output clear function disable */ - -/* channel control shadow register update control */ -#define TIMER_UPDATECTL_CCU ((uint32_t)0x00000000U) /*!< the shadow registers are updated when CMTG bit is set */ -#define TIMER_UPDATECTL_CCUTRI ((uint32_t)0x00000001U) /*!< the shadow registers update by when CMTG bit is set or an rising edge of TRGI occurs */ - -/* channel input capture polarity */ -#define TIMER_IC_POLARITY_RISING ((uint16_t)0x0000U) /*!< input capture rising edge */ -#define TIMER_IC_POLARITY_FALLING ((uint16_t)0x0002U) /*!< input capture falling edge */ - -/* TIMER input capture selection */ -#define TIMER_IC_SELECTION_DIRECTTI ((uint16_t)0x0001U) /*!< channel y is configured as input and icy is mapped on CIy */ -#define TIMER_IC_SELECTION_INDIRECTTI ((uint16_t)0x0002U) /*!< channel y is configured as input and icy is mapped on opposite input */ -#define TIMER_IC_SELECTION_ITS ((uint16_t)0x0003U) /*!< channel y is configured as input and icy is mapped on ITS */ - -/* channel input capture prescaler */ -#define TIMER_IC_PSC_DIV1 ((uint16_t)0x0000U) /*!< no prescaler */ -#define TIMER_IC_PSC_DIV2 ((uint16_t)0x0004U) /*!< divided by 2 */ -#define TIMER_IC_PSC_DIV4 ((uint16_t)0x0008U) /*!< divided by 4*/ -#define TIMER_IC_PSC_DIV8 ((uint16_t)0x000CU) /*!< divided by 8 */ - -/* trigger selection */ -#define SMCFG_TRGSEL(regval) (BITS(4, 6) & ((uint32_t)(regval) << 4U)) -#define TIMER_SMCFG_TRGSEL_ITI0 SMCFG_TRGSEL(0) /*!< internal trigger 0 */ -#define TIMER_SMCFG_TRGSEL_ITI1 SMCFG_TRGSEL(1) /*!< internal trigger 1 */ -#define TIMER_SMCFG_TRGSEL_ITI2 SMCFG_TRGSEL(2) /*!< internal trigger 2 */ -#define TIMER_SMCFG_TRGSEL_ITI3 SMCFG_TRGSEL(3) /*!< internal trigger 3 */ -#define TIMER_SMCFG_TRGSEL_CI0F_ED SMCFG_TRGSEL(4) /*!< TI0 Edge Detector */ -#define TIMER_SMCFG_TRGSEL_CI0FE0 SMCFG_TRGSEL(5) /*!< filtered TIMER input 0 */ -#define TIMER_SMCFG_TRGSEL_CI1FE1 SMCFG_TRGSEL(6) /*!< filtered TIMER input 1 */ -#define TIMER_SMCFG_TRGSEL_ETIFP SMCFG_TRGSEL(7) /*!< external trigger */ - -/* master mode control */ -#define CTL1_MMC(regval) (BITS(4, 6) & ((uint32_t)(regval) << 4U)) -#define TIMER_TRI_OUT_SRC_RESET CTL1_MMC(0) /*!< the UPG bit as trigger output */ -#define TIMER_TRI_OUT_SRC_ENABLE CTL1_MMC(1) /*!< the counter enable signal TIMER_CTL0_CEN as trigger output */ -#define TIMER_TRI_OUT_SRC_UPDATE CTL1_MMC(2) /*!< update event as trigger output */ -#define TIMER_TRI_OUT_SRC_CH0 CTL1_MMC(3) /*!< a capture or a compare match occurred in channal0 as trigger output TRGO */ -#define TIMER_TRI_OUT_SRC_O0CPRE CTL1_MMC(4) /*!< O0CPRE as trigger output */ -#define TIMER_TRI_OUT_SRC_O1CPRE CTL1_MMC(5) /*!< O1CPRE as trigger output */ -#define TIMER_TRI_OUT_SRC_O2CPRE CTL1_MMC(6) /*!< O2CPRE as trigger output */ -#define TIMER_TRI_OUT_SRC_O3CPRE CTL1_MMC(7) /*!< O3CPRE as trigger output */ - -/* slave mode control */ -#define SMCFG_SMC(regval) (BITS(0, 2) & ((uint32_t)(regval) << 0U)) -#define TIMER_SLAVE_MODE_DISABLE SMCFG_SMC(0) /*!< slave mode disable */ -#define TIMER_ENCODER_MODE0 SMCFG_SMC(1) /*!< encoder mode 0 */ -#define TIMER_ENCODER_MODE1 SMCFG_SMC(2) /*!< encoder mode 1 */ -#define TIMER_ENCODER_MODE2 SMCFG_SMC(3) /*!< encoder mode 2 */ -#define TIMER_SLAVE_MODE_RESTART SMCFG_SMC(4) /*!< restart mode */ -#define TIMER_SLAVE_MODE_PAUSE SMCFG_SMC(5) /*!< pause mode */ -#define TIMER_SLAVE_MODE_EVENT SMCFG_SMC(6) /*!< event mode */ -#define TIMER_SLAVE_MODE_EXTERNAL0 SMCFG_SMC(7) /*!< external clock mode 0 */ - -/* master slave mode selection */ -#define TIMER_MASTER_SLAVE_MODE_ENABLE ((uint32_t)0x00000000U) /*!< master slave mode enable */ -#define TIMER_MASTER_SLAVE_MODE_DISABLE ((uint32_t)0x00000001U) /*!< master slave mode disable */ - -/* external trigger prescaler */ -#define SMCFG_ETPSC(regval) (BITS(12, 13) & ((uint32_t)(regval) << 12U)) -#define TIMER_EXT_TRI_PSC_OFF SMCFG_ETPSC(0) /*!< no divided */ -#define TIMER_EXT_TRI_PSC_DIV2 SMCFG_ETPSC(1) /*!< divided by 2 */ -#define TIMER_EXT_TRI_PSC_DIV4 SMCFG_ETPSC(2) /*!< divided by 4 */ -#define TIMER_EXT_TRI_PSC_DIV8 SMCFG_ETPSC(3) /*!< divided by 8 */ - -/* external trigger polarity */ -#define TIMER_ETP_FALLING TIMER_SMCFG_ETP /*!< active low or falling edge active */ -#define TIMER_ETP_RISING ((uint32_t)0x00000000U) /*!< active high or rising edge active */ - -/* channel 0 trigger input selection */ -#define TIMER_HALLINTERFACE_ENABLE ((uint32_t)0x00000000U) /*!< TIMER hall sensor mode enable */ -#define TIMER_HALLINTERFACE_DISABLE ((uint32_t)0x00000001U) /*!< TIMER hall sensor mode disable */ - -/* TIMERx(x=0,1,2,13,14,15,16) write cc register selection */ -#define TIMER_CHVSEL_ENABLE ((uint16_t)0x0002U) /*!< write CHxVAL register selection enable */ -#define TIMER_CHVSEL_DISABLE ((uint16_t)0x0000U) /*!< write CHxVAL register selection disable */ - -/* the output value selection */ -#define TIMER_OUTSEL_ENABLE ((uint16_t)0x0001U) /*!< output value selection enable */ -#define TIMER_OUTSEL_DISABLE ((uint16_t)0x0000U) /*!< output value selection disable */ - - -/* function declarations */ -/* TIMER timebase */ -/* deinit a TIMER */ -void timer_deinit(uint32_t timer_periph); -/* initialize TIMER init parameter struct */ -void timer_struct_para_init(timer_parameter_struct* initpara); -/* initialize TIMER counter */ -void timer_init(uint32_t timer_periph, timer_parameter_struct* initpara); -/* enable a TIMER */ -void timer_enable(uint32_t timer_periph); -/* disable a TIMER */ -void timer_disable(uint32_t timer_periph); -/* enable the auto reload shadow function */ -void timer_auto_reload_shadow_enable(uint32_t timer_periph); -/* disable the auto reload shadow function */ -void timer_auto_reload_shadow_disable(uint32_t timer_periph); -/* enable the update event */ -void timer_update_event_enable(uint32_t timer_periph); -/* disable the update event */ -void timer_update_event_disable(uint32_t timer_periph); -/* set TIMER counter alignment mode */ -void timer_counter_alignment(uint32_t timer_periph, uint16_t aligned); -/* set TIMER counter up direction */ -void timer_counter_up_direction(uint32_t timer_periph); -/* set TIMER counter down direction */ -void timer_counter_down_direction(uint32_t timer_periph); -/* configure TIMER prescaler */ -void timer_prescaler_config(uint32_t timer_periph, uint16_t prescaler, uint8_t pscreload); -/* configure TIMER repetition register value */ -void timer_repetition_value_config(uint32_t timer_periph, uint16_t repetition); -/* configure TIMER autoreload register value */ -void timer_autoreload_value_config(uint32_t timer_periph, uint16_t autoreload); -/* configure TIMER counter register value */ -void timer_counter_value_config(uint32_t timer_periph , uint16_t counter); -/* read TIMER counter value */ -uint32_t timer_counter_read(uint32_t timer_periph); -/* read TIMER prescaler value */ -uint16_t timer_prescaler_read(uint32_t timer_periph); -/* configure TIMER single pulse mode */ -void timer_single_pulse_mode_config(uint32_t timer_periph, uint32_t spmode); -/* configure TIMER update source */ -void timer_update_source_config(uint32_t timer_periph, uint32_t update); - -/* TIMER interrupt and flag*/ -/* enable the TIMER interrupt */ -void timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt); -/* disable the TIMER interrupt */ -void timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt); -/* get timer interrupt flag */ -FlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt); -/* clear TIMER interrupt flag */ -void timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt); -/* get TIMER flags */ -FlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag); -/* clear TIMER flags */ -void timer_flag_clear(uint32_t timer_periph, uint32_t flag); - -/* timer DMA and event*/ -/* enable the TIMER DMA */ -void timer_dma_enable(uint32_t timer_periph, uint16_t dma); -/* disable the TIMER DMA */ -void timer_dma_disable(uint32_t timer_periph, uint16_t dma); -/* channel DMA request source selection */ -void timer_channel_dma_request_source_select(uint32_t timer_periph, uint8_t dma_request); -/* configure the TIMER DMA transfer */ -void timer_dma_transfer_config(uint32_t timer_periph,uint32_t dma_baseaddr, uint32_t dma_lenth); -/* software generate events */ -void timer_event_software_generate(uint32_t timer_periph, uint16_t event); - -/* TIMER channel complementary protection */ -/* initialize TIMER break parameter struct */ -void timer_break_struct_para_init(timer_break_parameter_struct* breakpara); -/* configure TIMER break function */ -void timer_break_config(uint32_t timer_periph, timer_break_parameter_struct* breakpara); -/* enable TIMER break function */ -void timer_break_enable(uint32_t timer_periph); -/* disable TIMER break function */ -void timer_break_disable(uint32_t timer_periph); -/* enable TIMER output automatic function */ -void timer_automatic_output_enable(uint32_t timer_periph); -/* disable TIMER output automatic function */ -void timer_automatic_output_disable(uint32_t timer_periph); -/* enable or disable TIMER primary output function */ -void timer_primary_output_config(uint32_t timer_periph, ControlStatus newvalue); -/* enable or disable channel capture/compare control shadow register */ -void timer_channel_control_shadow_config(uint32_t timer_periph, ControlStatus newvalue); -/* configure TIMER channel control shadow register update control */ -void timer_channel_control_shadow_update_config(uint32_t timer_periph, uint8_t ccuctl); - -/* TIMER channel output */ -/* initialize TIMER channel output parameter struct */ -void timer_channel_output_struct_para_init(timer_oc_parameter_struct* ocpara); -/* configure TIMER channel output function */ -void timer_channel_output_config(uint32_t timer_periph,uint16_t channel, timer_oc_parameter_struct* ocpara); -/* configure TIMER channel output compare mode */ -void timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel,uint16_t ocmode); -/* configure TIMER channel output pulse value */ -void timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t channel, uint32_t pulse); -/* configure TIMER channel output shadow function */ -void timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, uint16_t ocshadow); -/* configure TIMER channel output fast function */ -void timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, uint16_t ocfast); -/* configure TIMER channel output clear function */ -void timer_channel_output_clear_config(uint32_t timer_periph,uint16_t channel,uint16_t occlear); -/* configure TIMER channel output polarity */ -void timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocpolarity); -/* configure TIMER channel complementary output polarity */ -void timer_channel_complementary_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnpolarity); -/* configure TIMER channel enable state */ -void timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state); -/* configure TIMER channel complementary output enable state */ -void timer_channel_complementary_output_state_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnstate); - -/* TIMER channel input */ -/* initialize TIMER channel input parameter struct */ -void timer_channel_input_struct_para_init(timer_ic_parameter_struct* icpara); -/* configure TIMER input capture parameter */ -void timer_input_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpara); -/* configure TIMER channel input capture prescaler value */ -void timer_channel_input_capture_prescaler_config(uint32_t timer_periph, uint16_t channel, uint16_t prescaler); -/* read TIMER channel capture compare register value */ -uint32_t timer_channel_capture_value_register_read(uint32_t timer_periph, uint16_t channel); -/* configure TIMER input pwm capture function */ -void timer_input_pwm_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpwm); -/* configure TIMER hall sensor mode */ -void timer_hall_mode_config(uint32_t timer_periph, uint32_t hallmode); - -/* TIMER master and slave */ -/* select TIMER input trigger source */ -void timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger); -/* select TIMER master mode output trigger source */ -void timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t outrigger); -/* select TIMER slave mode */ -void timer_slave_mode_select(uint32_t timer_periph,uint32_t slavemode); -/* configure TIMER master slave mode */ -void timer_master_slave_mode_config(uint32_t timer_periph, uint32_t masterslave); -/* configure TIMER external trigger input */ -void timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter); -/* configure TIMER quadrature decoder mode */ -void timer_quadrature_decoder_mode_config(uint32_t timer_periph, uint32_t decomode, uint16_t ic0polarity, uint16_t ic1polarity); -/* configure TIMER internal clock mode */ -void timer_internal_clock_config(uint32_t timer_periph); -/* configure TIMER the internal trigger as external clock input */ -void timer_internal_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t intrigger); -/* configure TIMER the external trigger as external clock input */ -void timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t extrigger, uint16_t extpolarity,uint32_t extfilter); -/* configure TIMER the external clock mode 0 */ -void timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter); -/* configure TIMER the external clock mode 1 */ -void timer_external_clock_mode1_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter); -/* disable TIMER the external clock mode 1 */ -void timer_external_clock_mode1_disable(uint32_t timer_periph); - -/* TIMER configure */ -/* configure TIMER write CHxVAL register selection */ -void timer_write_chxval_register_config(uint32_t timer_periph, uint16_t ccsel); -/* configure TIMER output value selection */ -void timer_output_value_selection_config(uint32_t timer_periph, uint16_t outsel); - -#endif /* GD32F30X_TIMER_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_usart.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_usart.h deleted file mode 100644 index 198a0cf..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_usart.h +++ /dev/null @@ -1,444 +0,0 @@ -/*! - \file gd32f30x_usart.h - \brief definitions for the USART - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_USART_H -#define GD32F30X_USART_H - -#include "gd32f30x.h" - -/* USARTx(x=0,1,2)/UARTx(x=3,4) definitions */ -#define USART1 USART_BASE /*!< USART1 base address */ -#define USART2 (USART_BASE+0x00000400U) /*!< USART2 base address */ -#define UART3 (USART_BASE+0x00000800U) /*!< UART3 base address */ -#define UART4 (USART_BASE+0x00000C00U) /*!< UART4 base address */ -#define USART0 (USART_BASE+0x0000F400U) /*!< USART0 base address */ - -/* registers definitions */ -#define USART_STAT0(usartx) REG32((usartx) + 0x00U) /*!< USART status register 0 */ -#define USART_DATA(usartx) REG32((usartx) + 0x04U) /*!< USART data register */ -#define USART_BAUD(usartx) REG32((usartx) + 0x08U) /*!< USART baud rate register */ -#define USART_CTL0(usartx) REG32((usartx) + 0x0CU) /*!< USART control register 0 */ -#define USART_CTL1(usartx) REG32((usartx) + 0x10U) /*!< USART control register 1 */ -#define USART_CTL2(usartx) REG32((usartx) + 0x14U) /*!< USART control register 2 */ -#define USART_GP(usartx) REG32((usartx) + 0x18U) /*!< USART guard time and prescaler register */ -#define USART_CTL3(usartx) REG32((usartx) + 0x80U) /*!< USART control register 3 */ -#define USART_RT(usartx) REG32((usartx) + 0x84U) /*!< USART receiver timeout register */ -#define USART_STAT1(usartx) REG32((usartx) + 0x88U) /*!< USART status register 1 */ - -/* bits definitions */ -/* USARTx_STAT0 */ -#define USART_STAT0_PERR BIT(0) /*!< parity error flag */ -#define USART_STAT0_FERR BIT(1) /*!< frame error flag */ -#define USART_STAT0_NERR BIT(2) /*!< noise error flag */ -#define USART_STAT0_ORERR BIT(3) /*!< overrun error */ -#define USART_STAT0_IDLEF BIT(4) /*!< IDLE frame detected flag */ -#define USART_STAT0_RBNE BIT(5) /*!< read data buffer not empty */ -#define USART_STAT0_TC BIT(6) /*!< transmission complete */ -#define USART_STAT0_TBE BIT(7) /*!< transmit data buffer empty */ -#define USART_STAT0_LBDF BIT(8) /*!< LIN break detected flag */ -#define USART_STAT0_CTSF BIT(9) /*!< CTS change flag */ - -/* USARTx_DATA */ -#define USART_DATA_DATA BITS(0,8) /*!< transmit or read data value */ - -/* USARTx_BAUD */ -#define USART_BAUD_FRADIV BITS(0,3) /*!< fraction part of baud-rate divider */ -#define USART_BAUD_INTDIV BITS(4,15) /*!< integer part of baud-rate divider */ - -/* USARTx_CTL0 */ -#define USART_CTL0_SBKCMD BIT(0) /*!< send break command */ -#define USART_CTL0_RWU BIT(1) /*!< receiver wakeup from mute mode */ -#define USART_CTL0_REN BIT(2) /*!< receiver enable */ -#define USART_CTL0_TEN BIT(3) /*!< transmitter enable */ -#define USART_CTL0_IDLEIE BIT(4) /*!< idle line detected interrupt enable */ -#define USART_CTL0_RBNEIE BIT(5) /*!< read data buffer not empty interrupt and overrun error interrupt enable */ -#define USART_CTL0_TCIE BIT(6) /*!< transmission complete interrupt enable */ -#define USART_CTL0_TBEIE BIT(7) /*!< transmitter buffer empty interrupt enable */ -#define USART_CTL0_PERRIE BIT(8) /*!< parity error interrupt enable */ -#define USART_CTL0_PM BIT(9) /*!< parity mode */ -#define USART_CTL0_PCEN BIT(10) /*!< parity check function enable */ -#define USART_CTL0_WM BIT(11) /*!< wakeup method in mute mode */ -#define USART_CTL0_WL BIT(12) /*!< word length */ -#define USART_CTL0_UEN BIT(13) /*!< USART enable */ - -/* USARTx_CTL1 */ -#define USART_CTL1_ADDR BITS(0,3) /*!< address of USART */ -#define USART_CTL1_LBLEN BIT(5) /*!< LIN break frame length */ -#define USART_CTL1_LBDIE BIT(6) /*!< LIN break detected interrupt eanble */ -#define USART_CTL1_CLEN BIT(8) /*!< CK length */ -#define USART_CTL1_CPH BIT(9) /*!< CK phase */ -#define USART_CTL1_CPL BIT(10) /*!< CK polarity */ -#define USART_CTL1_CKEN BIT(11) /*!< CK pin enable */ -#define USART_CTL1_STB BITS(12,13) /*!< STOP bits length */ -#define USART_CTL1_LMEN BIT(14) /*!< LIN mode enable */ - -/* USARTx_CTL2 */ -#define USART_CTL2_ERRIE BIT(0) /*!< error interrupt enable */ -#define USART_CTL2_IREN BIT(1) /*!< IrDA mode enable */ -#define USART_CTL2_IRLP BIT(2) /*!< IrDA low-power */ -#define USART_CTL2_HDEN BIT(3) /*!< half-duplex enable */ -#define USART_CTL2_NKEN BIT(4) /*!< NACK enable in smartcard mode */ -#define USART_CTL2_SCEN BIT(5) /*!< smartcard mode enable */ -#define USART_CTL2_DENR BIT(6) /*!< DMA request enable for reception */ -#define USART_CTL2_DENT BIT(7) /*!< DMA request enable for transmission */ -#define USART_CTL2_RTSEN BIT(8) /*!< RTS enable */ -#define USART_CTL2_CTSEN BIT(9) /*!< CTS enable */ -#define USART_CTL2_CTSIE BIT(10) /*!< CTS interrupt enable */ - -/* USARTx_GP */ -#define USART_GP_PSC BITS(0,7) /*!< prescaler value for dividing the system clock */ -#define USART_GP_GUAT BITS(8,15) /*!< guard time value in smartcard mode */ - -/* USARTx_CTL3 */ -#define USART_CTL3_RTEN BIT(0) /*!< receiver timeout enable */ -#define USART_CTL3_SCRTNUM BITS(1,3) /*!< smartcard auto-retry number */ -#define USART_CTL3_RTIE BIT(4) /*!< interrupt enable bit of receive timeout event */ -#define USART_CTL3_EBIE BIT(5) /*!< interrupt enable bit of end of block event */ -#define USART_CTL3_RINV BIT(8) /*!< RX pin level inversion */ -#define USART_CTL3_TINV BIT(9) /*!< TX pin level inversion */ -#define USART_CTL3_DINV BIT(10) /*!< data bit level inversion */ -#define USART_CTL3_MSBF BIT(11) /*!< most significant bit first */ - -/* USARTx_RT */ -#define USART_RT_RT BITS(0,23) /*!< receiver timeout threshold */ -#define USART_RT_BL BITS(24,31) /*!< block length */ - -/* USARTx_STAT1 */ -#define USART_STAT1_RTF BIT(11) /*!< receiver timeout flag */ -#define USART_STAT1_EBF BIT(12) /*!< end of block flag */ -#define USART_STAT1_BSY BIT(16) /*!< busy flag */ - -/* constants definitions */ -/* define the USART bit position and its register index offset */ -#define USART_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) -#define USART_REG_VAL(usartx, offset) (REG32((usartx) + (((uint32_t)(offset) & 0xFFFFU) >> 6))) -#define USART_BIT_POS(val) ((uint32_t)(val) & 0x1FU) -#define USART_REGIDX_BIT2(regidx, bitpos, regidx2, bitpos2) (((uint32_t)(regidx2) << 22) | (uint32_t)((bitpos2) << 16)\ - | (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))) -#define USART_REG_VAL2(usartx, offset) (REG32((usartx) + ((uint32_t)(offset) >> 22))) -#define USART_BIT_POS2(val) (((uint32_t)(val) & 0x1F0000U) >> 16) - -/* register offset */ -#define USART_STAT0_REG_OFFSET 0x00U /*!< STAT0 register offset */ -#define USART_STAT1_REG_OFFSET 0x88U /*!< STAT1 register offset */ -#define USART_CTL0_REG_OFFSET 0x0CU /*!< CTL0 register offset */ -#define USART_CTL1_REG_OFFSET 0x10U /*!< CTL1 register offset */ -#define USART_CTL2_REG_OFFSET 0x14U /*!< CTL2 register offset */ -#define USART_CTL3_REG_OFFSET 0x80U /*!< CTL3 register offset */ - -/* USART flags */ -typedef enum -{ - /* flags in STAT0 register */ - USART_FLAG_CTS = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 9U), /*!< CTS change flag */ - USART_FLAG_LBD = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 8U), /*!< LIN break detected flag */ - USART_FLAG_TBE = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 7U), /*!< transmit data buffer empty */ - USART_FLAG_TC = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 6U), /*!< transmission complete */ - USART_FLAG_RBNE = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 5U), /*!< read data buffer not empty */ - USART_FLAG_IDLE = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 4U), /*!< IDLE frame detected flag */ - USART_FLAG_ORERR = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 3U), /*!< overrun error */ - USART_FLAG_NERR = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 2U), /*!< noise error flag */ - USART_FLAG_FERR = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 1U), /*!< frame error flag */ - USART_FLAG_PERR = USART_REGIDX_BIT(USART_STAT0_REG_OFFSET, 0U), /*!< parity error flag */ - /* flags in STAT1 register */ - USART_FLAG_BSY = USART_REGIDX_BIT(USART_STAT1_REG_OFFSET, 16U), /*!< busy flag */ - USART_FLAG_EB = USART_REGIDX_BIT(USART_STAT1_REG_OFFSET, 12U), /*!< end of block flag */ - USART_FLAG_RT = USART_REGIDX_BIT(USART_STAT1_REG_OFFSET, 11U), /*!< receiver timeout flag */ -}usart_flag_enum; - -/* USART interrupt flags */ -typedef enum -{ - /* interrupt flags in CTL0 register */ - USART_INT_FLAG_PERR = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 8U, USART_STAT0_REG_OFFSET, 0U), /*!< parity error interrupt and flag */ - USART_INT_FLAG_TBE = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 7U, USART_STAT0_REG_OFFSET, 7U), /*!< transmitter buffer empty interrupt and flag */ - USART_INT_FLAG_TC = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 6U, USART_STAT0_REG_OFFSET, 6U), /*!< transmission complete interrupt and flag */ - USART_INT_FLAG_RBNE = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 5U, USART_STAT0_REG_OFFSET, 5U), /*!< read data buffer not empty interrupt and flag */ - USART_INT_FLAG_RBNE_ORERR = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 5U, USART_STAT0_REG_OFFSET, 3U), /*!< read data buffer not empty interrupt and overrun error flag */ - USART_INT_FLAG_IDLE = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 4U, USART_STAT0_REG_OFFSET, 4U), /*!< IDLE line detected interrupt and flag */ - /* interrupt flags in CTL1 register */ - USART_INT_FLAG_LBD = USART_REGIDX_BIT2(USART_CTL1_REG_OFFSET, 6U, USART_STAT0_REG_OFFSET, 8U), /*!< LIN break detected interrupt and flag */ - /* interrupt flags in CTL2 register */ - USART_INT_FLAG_CTS = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 10U, USART_STAT0_REG_OFFSET, 9U), /*!< CTS interrupt and flag */ - USART_INT_FLAG_ERR_ORERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT0_REG_OFFSET, 3U), /*!< error interrupt and overrun error */ - USART_INT_FLAG_ERR_NERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT0_REG_OFFSET, 2U), /*!< error interrupt and noise error flag */ - USART_INT_FLAG_ERR_FERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT0_REG_OFFSET, 1U), /*!< error interrupt and frame error flag */ - /* interrupt flags in CTL3 register */ - USART_INT_FLAG_EB = USART_REGIDX_BIT2(USART_CTL3_REG_OFFSET, 5U, USART_STAT1_REG_OFFSET, 12U), /*!< interrupt enable bit of end of block event and flag */ - USART_INT_FLAG_RT = USART_REGIDX_BIT2(USART_CTL3_REG_OFFSET, 4U, USART_STAT1_REG_OFFSET, 11U), /*!< interrupt enable bit of receive timeout event and flag */ -}usart_interrupt_flag_enum; - -/* USART interrupt enable or disable */ -typedef enum -{ - /* interrupt in CTL0 register */ - USART_INT_PERR = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 8U), /*!< parity error interrupt */ - USART_INT_TBE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 7U), /*!< transmitter buffer empty interrupt */ - USART_INT_TC = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 6U), /*!< transmission complete interrupt */ - USART_INT_RBNE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 5U), /*!< read data buffer not empty interrupt and overrun error interrupt */ - USART_INT_IDLE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 4U), /*!< IDLE line detected interrupt */ - /* interrupt in CTL1 register */ - USART_INT_LBD = USART_REGIDX_BIT(USART_CTL1_REG_OFFSET, 6U), /*!< LIN break detected interrupt */ - /* interrupt in CTL2 register */ - USART_INT_CTS = USART_REGIDX_BIT(USART_CTL2_REG_OFFSET, 10U), /*!< CTS interrupt */ - USART_INT_ERR = USART_REGIDX_BIT(USART_CTL2_REG_OFFSET, 0U), /*!< error interrupt */ - /* interrupt in CTL3 register */ - USART_INT_EB = USART_REGIDX_BIT(USART_CTL3_REG_OFFSET, 5U), /*!< end of block interrupt */ - USART_INT_RT = USART_REGIDX_BIT(USART_CTL3_REG_OFFSET, 4U), /*!< receive timeout interrupt */ -}usart_interrupt_enum; - -/* USART invert configure */ -typedef enum -{ - /* data bit level inversion */ - USART_DINV_ENABLE, /*!< data bit level inversion */ - USART_DINV_DISABLE, /*!< data bit level not inversion */ - /* TX pin level inversion */ - USART_TXPIN_ENABLE, /*!< TX pin level inversion */ - USART_TXPIN_DISABLE, /*!< TX pin level not inversion */ - /* RX pin level inversion */ - USART_RXPIN_ENABLE, /*!< RX pin level inversion */ - USART_RXPIN_DISABLE, /*!< RX pin level not inversion */ -}usart_invert_enum; - -/* USART receiver configure */ -#define CTL0_REN(regval) (BIT(2) & ((uint32_t)(regval) << 2)) -#define USART_RECEIVE_ENABLE CTL0_REN(1) /*!< enable receiver */ -#define USART_RECEIVE_DISABLE CTL0_REN(0) /*!< disable receiver */ - -/* USART transmitter configure */ -#define CTL0_TEN(regval) (BIT(3) & ((uint32_t)(regval) << 3)) -#define USART_TRANSMIT_ENABLE CTL0_TEN(1) /*!< enable transmitter */ -#define USART_TRANSMIT_DISABLE CTL0_TEN(0) /*!< disable transmitter */ - -/* USART parity bits definitions */ -#define CTL0_PM(regval) (BITS(9,10) & ((uint32_t)(regval) << 9)) -#define USART_PM_NONE CTL0_PM(0) /*!< no parity */ -#define USART_PM_EVEN CTL0_PM(2) /*!< even parity */ -#define USART_PM_ODD CTL0_PM(3) /*!< odd parity */ - -/* USART wakeup method in mute mode */ -#define CTL0_WM(regval) (BIT(11) & ((uint32_t)(regval) << 11)) -#define USART_WM_IDLE CTL0_WM(0) /*!< idle line */ -#define USART_WM_ADDR CTL0_WM(1) /*!< address match */ - -/* USART word length definitions */ -#define CTL0_WL(regval) (BIT(12) & ((uint32_t)(regval) << 12)) -#define USART_WL_8BIT CTL0_WL(0) /*!< 8 bits */ -#define USART_WL_9BIT CTL0_WL(1) /*!< 9 bits */ - -/* USART stop bits definitions */ -#define CTL1_STB(regval) (BITS(12,13) & ((uint32_t)(regval) << 12)) -#define USART_STB_1BIT CTL1_STB(0) /*!< 1 bit */ -#define USART_STB_0_5BIT CTL1_STB(1) /*!< 0.5 bit */ -#define USART_STB_2BIT CTL1_STB(2) /*!< 2 bits */ -#define USART_STB_1_5BIT CTL1_STB(3) /*!< 1.5 bits */ - -/* USART LIN break frame length */ -#define CTL1_LBLEN(regval) (BIT(5) & ((uint32_t)(regval) << 5)) -#define USART_LBLEN_10B CTL1_LBLEN(0) /*!< 10 bits */ -#define USART_LBLEN_11B CTL1_LBLEN(1) /*!< 11 bits */ - -/* USART CK length */ -#define CTL1_CLEN(regval) (BIT(8) & ((uint32_t)(regval) << 8)) -#define USART_CLEN_NONE CTL1_CLEN(0) /*!< there are 7 CK pulses for an 8 bit frame and 8 CK pulses for a 9 bit frame */ -#define USART_CLEN_EN CTL1_CLEN(1) /*!< there are 8 CK pulses for an 8 bit frame and 9 CK pulses for a 9 bit frame */ - -/* USART clock phase */ -#define CTL1_CPH(regval) (BIT(9) & ((uint32_t)(regval) << 9)) -#define USART_CPH_1CK CTL1_CPH(0) /*!< first clock transition is the first data capture edge */ -#define USART_CPH_2CK CTL1_CPH(1) /*!< second clock transition is the first data capture edge */ - -/* USART clock polarity */ -#define CTL1_CPL(regval) (BIT(10) & ((uint32_t)(regval) << 10)) -#define USART_CPL_LOW CTL1_CPL(0) /*!< steady low value on CK pin */ -#define USART_CPL_HIGH CTL1_CPL(1) /*!< steady high value on CK pin */ - -/* USART DMA request for receive configure */ -#define CLT2_DENR(regval) (BIT(6) & ((uint32_t)(regval) << 6)) -#define USART_DENR_ENABLE CLT2_DENR(1) /*!< DMA request enable for reception */ -#define USART_DENR_DISABLE CLT2_DENR(0) /*!< DMA request disable for reception */ - -/* USART DMA request for transmission configure */ -#define CLT2_DENT(regval) (BIT(7) & ((uint32_t)(regval) << 7)) -#define USART_DENT_ENABLE CLT2_DENT(1) /*!< DMA request enable for transmission */ -#define USART_DENT_DISABLE CLT2_DENT(0) /*!< DMA request disable for transmission */ - -/* USART RTS configure */ -#define CLT2_RTSEN(regval) (BIT(8) & ((uint32_t)(regval) << 8)) -#define USART_RTS_ENABLE CLT2_RTSEN(1) /*!< RTS enable */ -#define USART_RTS_DISABLE CLT2_RTSEN(0) /*!< RTS disable */ - -/* USART CTS configure */ -#define CLT2_CTSEN(regval) (BIT(9) & ((uint32_t)(regval) << 9)) -#define USART_CTS_ENABLE CLT2_CTSEN(1) /*!< CTS enable */ -#define USART_CTS_DISABLE CLT2_CTSEN(0) /*!< CTS disable */ - -/* USART IrDA low-power enable */ -#define CTL2_IRLP(regval) (BIT(2) & ((uint32_t)(regval) << 2)) -#define USART_IRLP_LOW CTL2_IRLP(1) /*!< low-power */ -#define USART_IRLP_NORMAL CTL2_IRLP(0) /*!< normal */ - -/* USART data is transmitted/received with the LSB/MSB first */ -#define CTL3_MSBF(regval) (BIT(11) & ((uint32_t)(regval) << 11)) -#define USART_MSBF_LSB CTL3_MSBF(0) /*!< LSB first */ -#define USART_MSBF_MSB CTL3_MSBF(1) /*!< MSB first */ - -/* function declarations */ -/* initialization functions */ -/* reset USART */ -void usart_deinit(uint32_t usart_periph); -/* configure USART baud rate value */ -void usart_baudrate_set(uint32_t usart_periph, uint32_t baudval); -/* configure USART parity function */ -void usart_parity_config(uint32_t usart_periph, uint32_t paritycfg); -/* configure USART word length */ -void usart_word_length_set(uint32_t usart_periph, uint32_t wlen); -/* configure USART stop bit length */ -void usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen); -/* enable USART */ -void usart_enable(uint32_t usart_periph); -/* disable USART */ -void usart_disable(uint32_t usart_periph); -/* configure USART transmitter */ -void usart_transmit_config(uint32_t usart_periph, uint32_t txconfig); -/* configure USART receiver */ -void usart_receive_config(uint32_t usart_periph, uint32_t rxconfig); - -/* USART normal mode communication */ -/* data is transmitted/received with the LSB/MSB first */ -void usart_data_first_config(uint32_t usart_periph, uint32_t msbf); -/* configure USART inverted */ -void usart_invert_config(uint32_t usart_periph, usart_invert_enum invertpara); -/* enable receiver timeout */ -void usart_receiver_timeout_enable(uint32_t usart_periph); -/* disable receiver timeout */ -void usart_receiver_timeout_disable(uint32_t usart_periph); -/* configure receiver timeout threshold */ -void usart_receiver_timeout_threshold_config(uint32_t usart_periph, uint32_t rtimeout); -/* USART transmit data function */ -void usart_data_transmit(uint32_t usart_periph, uint32_t data); -/* USART receive data function */ -uint16_t usart_data_receive(uint32_t usart_periph); - -/* multi-processor communication */ -/* configure address of the USART */ -void usart_address_config(uint32_t usart_periph, uint8_t addr); -/* enable mute mode */ -void usart_mute_mode_enable(uint32_t usart_periph); -/* disable mute mode */ -void usart_mute_mode_disable(uint32_t usart_periph); -/* configure wakeup method in mute mode */ -void usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmethod); - -/* LIN mode communication */ -/* enable LIN mode */ -void usart_lin_mode_enable(uint32_t usart_periph); -/* disable LIN mode */ -void usart_lin_mode_disable(uint32_t usart_periph); -/* LIN break detection length */ -void usart_lin_break_detection_length_config(uint32_t usart_periph, uint32_t lblen); -/* send break frame */ -void usart_send_break(uint32_t usart_periph); - -/* half-duplex communication */ -/* enable half-duplex mode */ -void usart_halfduplex_enable(uint32_t usart_periph); -/* disable half-duplex mode */ -void usart_halfduplex_disable(uint32_t usart_periph); - -/* synchronous communication */ -/* enable CK pin in synchronous mode */ -void usart_synchronous_clock_enable(uint32_t usart_periph); -/* disable CK pin in synchronous mode */ -void usart_synchronous_clock_disable(uint32_t usart_periph); -/* configure usart synchronous mode parameters */ -void usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl); - -/* smartcard communication */ -/* configure guard time value in smartcard mode */ -void usart_guard_time_config(uint32_t usart_periph,uint32_t guat); -/* enable smartcard mode */ -void usart_smartcard_mode_enable(uint32_t usart_periph); -/* disable smartcard mode */ -void usart_smartcard_mode_disable(uint32_t usart_periph); -/* enable NACK in smartcard mode */ -void usart_smartcard_mode_nack_enable(uint32_t usart_periph); -/* disable NACK in smartcard mode */ -void usart_smartcard_mode_nack_disable(uint32_t usart_periph); -/* configure smartcard auto-retry number */ -void usart_smartcard_autoretry_config(uint32_t usart_periph, uint32_t scrtnum); -/* configure block length */ -void usart_block_length_config(uint32_t usart_periph, uint32_t bl); - -/* IrDA communication */ -/* enable IrDA mode */ -void usart_irda_mode_enable(uint32_t usart_periph); -/* disable IrDA mode */ -void usart_irda_mode_disable(uint32_t usart_periph); -/* configure the peripheral clock prescaler */ -void usart_prescaler_config(uint32_t usart_periph, uint8_t psc); -/* configure IrDA low-power */ -void usart_irda_lowpower_config(uint32_t usart_periph, uint32_t irlp); - -/* hardware flow communication */ -/* configure hardware flow control RTS */ -void usart_hardware_flow_rts_config(uint32_t usart_periph, uint32_t rtsconfig); -/* configure hardware flow control CTS */ -void usart_hardware_flow_cts_config(uint32_t usart_periph, uint32_t ctsconfig); - -/* DMA communication */ -/* configure USART DMA for reception */ -void usart_dma_receive_config(uint32_t usart_periph, uint32_t dmacmd); -/* configure USART DMA for transmission */ -void usart_dma_transmit_config(uint32_t usart_periph, uint32_t dmacmd); - -/* flag & interrupt functions */ -/* get flag in STAT0/STAT1 register */ -FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag); -/* clear flag in STAT0/STAT1 register */ -void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag); -/* enable USART interrupt */ -void usart_interrupt_enable(uint32_t usart_periph, usart_interrupt_enum interrupt); -/* disable USART interrupt */ -void usart_interrupt_disable(uint32_t usart_periph, usart_interrupt_enum interrupt); -/* get USART interrupt and flag status */ -FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, usart_interrupt_flag_enum int_flag); -/* clear interrupt flag in STAT0/STAT1 register */ -void usart_interrupt_flag_clear(uint32_t usart_periph, usart_interrupt_flag_enum int_flag); - -#endif /* GD32F30x_USART_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_wwdgt.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_wwdgt.h deleted file mode 100644 index ec9022a..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Include/gd32f30x_wwdgt.h +++ /dev/null @@ -1,90 +0,0 @@ -/*! - \file gd32f30x_wwdgt.h - \brief definitions for the WWDGT - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - - -#ifndef GD32F30X_WWDGT_H -#define GD32F30X_WWDGT_H - -#include "gd32f30x.h" - -/* WWDGT definitions */ -#define WWDGT WWDGT_BASE - -/* registers definitions */ -#define WWDGT_CTL REG32((WWDGT) + 0x00U) /*!< WWDGT control register */ -#define WWDGT_CFG REG32((WWDGT) + 0x04U) /*!< WWDGT configuration register */ -#define WWDGT_STAT REG32((WWDGT) + 0x08U) /*!< WWDGT status register */ - -/* bits definitions */ -/* WWDGT_CTL */ -#define WWDGT_CTL_CNT BITS(0,6) /*!< WWDGT counter value */ -#define WWDGT_CTL_WDGTEN BIT(7) /*!< WWDGT counter enable */ - -/* WWDGT_CFG */ -#define WWDGT_CFG_WIN BITS(0,6) /*!< WWDGT counter window value */ -#define WWDGT_CFG_PSC BITS(7,8) /*!< WWDGT prescaler divider value */ -#define WWDGT_CFG_EWIE BIT(9) /*!< early wakeup interrupt enable */ - -/* WWDGT_STAT */ -#define WWDGT_STAT_EWIF BIT(0) /*!< early wakeup interrupt flag */ - -/* constants definitions */ -#define CFG_PSC(regval) (BITS(7,8) & ((uint32_t)(regval) << 7)) /*!< write value to WWDGT_CFG_PSC bit field */ -#define WWDGT_CFG_PSC_DIV1 CFG_PSC(0) /*!< the time base of WWDGT = (PCLK1/4096)/1 */ -#define WWDGT_CFG_PSC_DIV2 CFG_PSC(1) /*!< the time base of WWDGT = (PCLK1/4096)/2 */ -#define WWDGT_CFG_PSC_DIV4 CFG_PSC(2) /*!< the time base of WWDGT = (PCLK1/4096)/4 */ -#define WWDGT_CFG_PSC_DIV8 CFG_PSC(3) /*!< the time base of WWDGT = (PCLK1/4096)/8 */ - -/* function declarations */ -/* reset the window watchdog timer configuration */ -void wwdgt_deinit(void); -/* start the window watchdog timer counter */ -void wwdgt_enable(void); - -/* configure the window watchdog timer counter value */ -void wwdgt_counter_update(uint16_t counter_value); -/* configure counter value, window value, and prescaler divider value */ -void wwdgt_config(uint16_t counter, uint16_t window, uint32_t prescaler); - -/* enable early wakeup interrupt of WWDGT */ -void wwdgt_interrupt_enable(void); -/* check early wakeup interrupt state of WWDGT */ -FlagStatus wwdgt_flag_get(void); -/* clear early wakeup interrupt state of WWDGT */ -void wwdgt_flag_clear(void); - -#endif /* GD32F30X_WWDGT_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_adc.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_adc.c deleted file mode 100644 index 2a8c536..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_adc.c +++ /dev/null @@ -1,941 +0,0 @@ -/*! - \file gd32f30x_adc.c - \brief ADC driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_adc.h" - -/*! - \brief reset ADC - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[out] none - \retval none -*/ -void adc_deinit(uint32_t adc_periph) -{ - switch(adc_periph){ - case ADC0: - rcu_periph_reset_enable(RCU_ADC0RST); - rcu_periph_reset_disable(RCU_ADC0RST); - break; - case ADC1: - rcu_periph_reset_enable(RCU_ADC1RST); - rcu_periph_reset_disable(RCU_ADC1RST); - break; -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - case ADC2: - rcu_periph_reset_enable(RCU_ADC2RST); - rcu_periph_reset_disable(RCU_ADC2RST); - break; -#endif - default: - break; - } -} - -/*! - \brief enable ADC interface - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[out] none - \retval none -*/ -void adc_enable(uint32_t adc_periph) -{ - if(RESET == (ADC_CTL1(adc_periph) & ADC_CTL1_ADCON)){ - ADC_CTL1(adc_periph) |= (uint32_t)ADC_CTL1_ADCON; - } -} - -/*! - \brief disable ADC interface - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[out] none - \retval none -*/ -void adc_disable(uint32_t adc_periph) -{ - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ADCON); -} - -/*! - \brief ADC calibration and reset calibration - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[out] none - \retval none -*/ -void adc_calibration_enable(uint32_t adc_periph) -{ - /* reset the selected ADC calibration registers */ - ADC_CTL1(adc_periph) |= (uint32_t) ADC_CTL1_RSTCLB; - /* check the RSTCLB bit state */ - while((ADC_CTL1(adc_periph) & ADC_CTL1_RSTCLB)){ - } - /* enable ADC calibration process */ - ADC_CTL1(adc_periph) |= ADC_CTL1_CLB; - /* check the CLB bit state */ - while((ADC_CTL1(adc_periph) & ADC_CTL1_CLB)){ - } -} - -/*! - \brief enable DMA request - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[out] none - \retval none -*/ -void adc_dma_mode_enable(uint32_t adc_periph) -{ - ADC_CTL1(adc_periph) |= (uint32_t)(ADC_CTL1_DMA); -} - -/*! - \brief disable DMA request - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[out] none - \retval none -*/ -void adc_dma_mode_disable(uint32_t adc_periph) -{ - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DMA); -} - -/*! - \brief enable the temperature sensor and Vrefint channel - \param[in] none - \param[out] none - \retval none -*/ -void adc_tempsensor_vrefint_enable(void) -{ - /* enable the temperature sensor and Vrefint channel */ - ADC_CTL1(ADC0) |= ADC_CTL1_TSVREN; -} - -/*! - \brief disable the temperature sensor and Vrefint channel - \param[in] none - \param[out] none - \retval none -*/ -void adc_tempsensor_vrefint_disable(void) -{ - /* disable the temperature sensor and Vrefint channel */ - ADC_CTL1(ADC0) &= ~ADC_CTL1_TSVREN; -} - -/*! - \brief configure ADC resolution - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] resolution: ADC resolution - only one among these parameters can be selected - \arg ADC_RESOLUTION_12B: 12-bit ADC resolution - \arg ADC_RESOLUTION_10B: 10-bit ADC resolution - \arg ADC_RESOLUTION_8B: 8-bit ADC resolution - \arg ADC_RESOLUTION_6B: 6-bit ADC resolution - \param[out] none - \retval none -*/ -void adc_resolution_config(uint32_t adc_periph , uint32_t resolution) -{ - ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)ADC_OVSAMPCTL_DRES); - ADC_OVSAMPCTL(adc_periph) |= (uint32_t)resolution; -} - -/*! - \brief configure ADC discontinuous mode - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_channel_group: select the channel group - only one among these parameters can be selected - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \arg ADC_CHANNEL_DISCON_DISABLE: disable discontinuous mode of regular & inserted channel - \param[in] length: number of conversions in discontinuous mode,the number can be 1..8 - for regular channel ,the number has no effect for inserted channel - \param[out] none - \retval none -*/ -void adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length) -{ - ADC_CTL0(adc_periph) &= ~((uint32_t)( ADC_CTL0_DISRC | ADC_CTL0_DISIC )); - switch(adc_channel_group){ - case ADC_REGULAR_CHANNEL: - /* config the number of conversions in discontinuous mode */ - ADC_CTL0(adc_periph) &= ~((uint32_t)ADC_CTL0_DISNUM); - ADC_CTL0(adc_periph) |= CTL0_DISNUM(((uint32_t)length - 1U)); - - ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISRC; - break; - case ADC_INSERTED_CHANNEL: - ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISIC; - break; - case ADC_CHANNEL_DISCON_DISABLE: - default: - break; - } -} - -/*! - \brief configure the ADC sync mode - \param[in] mode: ADC mode - only one among these parameters can be selected - \arg ADC_MODE_FREE: all the ADCs work independently - \arg ADC_DAUL_REGULAL_PARALLEL_INSERTED_PARALLEL: ADC0 and ADC1 work in combined regular parallel + inserted parallel mode - \arg ADC_DAUL_REGULAL_PARALLEL_INSERTED_ROTATION: ADC0 and ADC1 work in combined regular parallel + trigger rotation mode - \arg ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in combined inserted parallel + follow-up fast mode - \arg ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in combined inserted parallel + follow-up slow mode - \arg ADC_DAUL_INSERTED_PARALLEL: ADC0 and ADC1 work in inserted parallel mode only - \arg ADC_DAUL_REGULAL_PARALLEL: ADC0 and ADC1 work in regular parallel mode only - \arg ADC_DAUL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in follow-up fast mode only - \arg ADC_DAUL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in follow-up slow mode only - \arg ADC_DAUL_INSERTED_TRRIGGER_ROTATION: ADC0 and ADC1 work in trigger rotation mode only - \param[out] none - \retval none -*/ -void adc_mode_config(uint32_t mode) -{ - ADC_CTL0(ADC0) &= ~(ADC_CTL0_SYNCM); - ADC_CTL0(ADC0) |= mode; -} - -/*! - \brief enable or disable ADC special function - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] function: the function to config - one or more parameters can be selected below - \arg ADC_SCAN_MODE: scan mode select - \arg ADC_INSERTED_CHANNEL_AUTO: inserted channel group convert automatically - \arg ADC_CONTINUOUS_MODE: continuous mode select - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void adc_special_function_config(uint32_t adc_periph , uint32_t function , ControlStatus newvalue) -{ - if(newvalue){ - if(0U != (function & ADC_SCAN_MODE)){ - ADC_CTL0(adc_periph) |= ADC_SCAN_MODE; - } - if(0U != (function & ADC_INSERTED_CHANNEL_AUTO)){ - ADC_CTL0(adc_periph) |= ADC_INSERTED_CHANNEL_AUTO; - } - if(0U != (function & ADC_CONTINUOUS_MODE)){ - ADC_CTL1(adc_periph) |= ADC_CONTINUOUS_MODE; - } - }else{ - if(0U != (function & ADC_SCAN_MODE)){ - ADC_CTL0(adc_periph) &= ~ADC_SCAN_MODE; - } - if(0U != (function & ADC_INSERTED_CHANNEL_AUTO)){ - ADC_CTL0(adc_periph) &= ~ADC_INSERTED_CHANNEL_AUTO; - } - if(0U != (function & ADC_CONTINUOUS_MODE)){ - ADC_CTL1(adc_periph) &= ~ADC_CONTINUOUS_MODE; - } - } -} - -/*! - \brief configure ADC data alignment - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] data_alignment: data alignment select - only one parameter can be selected - \arg ADC_DATAALIGN_RIGHT: LSB alignment - \arg ADC_DATAALIGN_LEFT: MSB alignment - \param[out] none - \retval none -*/ -void adc_data_alignment_config(uint32_t adc_periph , uint32_t data_alignment) -{ - if(ADC_DATAALIGN_RIGHT != data_alignment){ - ADC_CTL1(adc_periph) |= ADC_CTL1_DAL; - }else{ - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DAL); - } -} - -/*! - \brief configure the length of regular channel group or inserted channel group - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_channel_group: select the channel group - only one parameter can be selected - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \param[in] length: the length of the channel - regular channel 1-16 - inserted channel 1-4 - \param[out] none - \retval none -*/ -void adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t length) -{ - switch(adc_channel_group){ - case ADC_REGULAR_CHANNEL: - ADC_RSQ0(adc_periph) &= ~((uint32_t)ADC_RSQ0_RL); - ADC_RSQ0(adc_periph) |= RSQ0_RL((uint32_t)(length-1U)); - - break; - case ADC_INSERTED_CHANNEL: - ADC_ISQ(adc_periph) &= ~((uint32_t)ADC_ISQ_IL); - ADC_ISQ(adc_periph) |= ISQ_IL((uint32_t)(length-1U)); - - break; - default: - break; - } -} - -/*! - \brief configure ADC regular channel - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] rank: the regular group sequence rank,this parameter must be between 0 to 15 - \param[in] adc_channel: the selected ADC channel - only one among these parameters can be selected - \arg ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx - \param[in] sample_time: the sample time value - only one parameter can be selected - \arg ADC_SAMPLETIME_1POINT5: 1.5 cycles - \arg ADC_SAMPLETIME_7POINT5: 7.5 cycles - \arg ADC_SAMPLETIME_13POINT5: 13.5 cycles - \arg ADC_SAMPLETIME_28POINT5: 28.5 cycles - \arg ADC_SAMPLETIME_41POINT5: 41.5 cycles - \arg ADC_SAMPLETIME_55POINT5: 55.5 cycles - \arg ADC_SAMPLETIME_71POINT5: 71.5 cycles - \arg ADC_SAMPLETIME_239POINT5: 239.5 cycles - \param[out] none - \retval none -*/ -void adc_regular_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time) -{ - uint32_t rsq,sampt; - - /* ADC regular sequence config */ - if(rank < 6U){ - rsq = ADC_RSQ2(adc_periph); - rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (5U*rank))); - rsq |= ((uint32_t)adc_channel << (5U*rank)); - ADC_RSQ2(adc_periph) = rsq; - }else if(rank < 12U){ - rsq = ADC_RSQ1(adc_periph); - rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (5U*(rank-6U)))); - rsq |= ((uint32_t)adc_channel << (5U*(rank-6U))); - ADC_RSQ1(adc_periph) = rsq; - }else if(rank < 16U){ - rsq = ADC_RSQ0(adc_periph); - rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (5U*(rank-12U)))); - rsq |= ((uint32_t)adc_channel << (5U*(rank-12U))); - ADC_RSQ0(adc_periph) = rsq; - }else{ - } - - /* ADC sampling time config */ - if(adc_channel < 10U){ - sampt = ADC_SAMPT1(adc_periph); - sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (3U*adc_channel))); - sampt |= (uint32_t)(sample_time << (3U*adc_channel)); - ADC_SAMPT1(adc_periph) = sampt; - }else if(adc_channel < 18U){ - sampt = ADC_SAMPT0(adc_periph); - sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (3U*(adc_channel-10U)))); - sampt |= (uint32_t)(sample_time << (3U*(adc_channel-10U))); - ADC_SAMPT0(adc_periph) = sampt; - }else{ - } -} - -/*! - \brief configure ADC inserted channel - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] rank: the inserted group sequencer rank,this parameter must be between 0 to 3 - \param[in] adc_channel: the selected ADC channel - only one among these parameters can be selected - \arg ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx - \param[in] sample_time: The sample time value - only one parameter can be selected - \arg ADC_SAMPLETIME_1POINT5: 1.5 cycles - \arg ADC_SAMPLETIME_7POINT5: 7.5 cycles - \arg ADC_SAMPLETIME_13POINT5: 13.5 cycles - \arg ADC_SAMPLETIME_28POINT5: 28.5 cycles - \arg ADC_SAMPLETIME_41POINT5: 41.5 cycles - \arg ADC_SAMPLETIME_55POINT5: 55.5 cycles - \arg ADC_SAMPLETIME_71POINT5: 71.5 cycles - \arg ADC_SAMPLETIME_239POINT5: 239.5 cycles - \param[out] none - \retval none -*/ -void adc_inserted_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time) -{ - uint8_t inserted_length; - uint32_t isq,sampt; - - inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph) , 20U , 21U); - - isq = ADC_ISQ(adc_periph); - isq &= ~((uint32_t)(ADC_ISQ_ISQN << (5U * ((3 + rank) - inserted_length)))); - isq |= ((uint32_t)adc_channel << (5U * ((3 + rank) - inserted_length))); - ADC_ISQ(adc_periph) = isq; - - /* ADC sampling time config */ - if(adc_channel < 10U){ - sampt = ADC_SAMPT1(adc_periph); - sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (3U*adc_channel))); - sampt |= (uint32_t) sample_time << (3U*adc_channel); - ADC_SAMPT1(adc_periph) = sampt; - }else if(adc_channel < 18U){ - sampt = ADC_SAMPT0(adc_periph); - sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (3U*(adc_channel-10U)))); - sampt |= ((uint32_t)sample_time << (3U*(adc_channel-10U))); - ADC_SAMPT0(adc_periph) = sampt; - }else{ - } -} - -/*! - \brief configure ADC inserted channel offset - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] inserted_channel : insert channel select - only one parameter can be selected - \arg ADC_INSERTED_CHANNEL_0: inserted channel0 - \arg ADC_INSERTED_CHANNEL_1: inserted channel1 - \arg ADC_INSERTED_CHANNEL_2: inserted channel2 - \arg ADC_INSERTED_CHANNEL_3: inserted channel3 - \param[in] offset : the offset data - \param[out] none - \retval none -*/ -void adc_inserted_channel_offset_config(uint32_t adc_periph , uint8_t inserted_channel , uint16_t offset) -{ - uint8_t inserted_length; - uint32_t num = 0U; - - inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph) , 20U , 21U); - num = 3U - (inserted_length - inserted_channel); - - if(num <= 3U){ - /* calculate the offset of the register */ - num = num * 4U; - /* config the offset of the selected channels */ - REG32((adc_periph) + 0x14U + num) = IOFFX_IOFF((uint32_t)offset); - } -} - -/*! - \brief enable ADC external trigger - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_channel_group: select the channel group - one or more parameters can be selected - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void adc_external_trigger_config(uint32_t adc_periph, uint8_t adc_channel_group, ControlStatus newvalue) -{ - if(newvalue){ - if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ - ADC_CTL1(adc_periph) |= ADC_CTL1_ETERC; - } - if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ - ADC_CTL1(adc_periph) |= ADC_CTL1_ETEIC; - } - }else{ - if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ - ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETERC; - } - if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ - ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETEIC; - } - } -} - -/*! - \brief configure ADC external trigger source - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_channel_group: select the channel group - only one parameter can be selected - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \param[in] external_trigger_source: regular or inserted group trigger source - only one parameter can be selected - for regular channel: - \arg ADC0_1_EXTTRIG_REGULAR_T0_CH0: timer 0 CC0 event select - \arg ADC0_1_EXTTRIG_REGULAR_T0_CH1: timer 0 CC1 event select - \arg ADC0_1_EXTTRIG_REGULAR_T0_CH2: timer 0 CC2 event select - \arg ADC0_1_EXTTRIG_REGULAR_T1_CH1: timer 1 CC1 event select - \arg ADC0_1_EXTTRIG_REGULAR_T2_TRGO: timer 2 TRGO event select - \arg ADC0_1_EXTTRIG_REGULAR_T3_CH3: timer 3 CC3 event select - \arg ADC0_1_EXTTRIG_REGULAR_T7_TRGO: timer 7 TRGO event select - \arg ADC0_1_EXTTRIG_REGULAR_EXTI_11 : external interrupt line 11 - \arg ADC2_EXTTRIG_REGULAR_T2_CH0: timer 2 CC0 event select - \arg ADC2_EXTTRIG_REGULAR_T1_CH2: timer 1 CC2 event select - \arg ADC2_EXTTRIG_REGULAR_T0_CH2: timer 0 CC2 event select - \arg ADC2_EXTTRIG_REGULAR_T7_CH0: timer 7 CC0 event select - \arg ADC2_EXTTRIG_REGULAR_T7_TRGO: timer 7 TRGO event select - \arg ADC2_EXTTRIG_REGULAR_T4_CH0: timer 4 CC0 event select - \arg ADC2_EXTTRIG_REGULAR_T4_CH2: timer 4 CC2 event select - \arg ADC0_1_2_EXTTRIG_REGULAR_NONE: software trigger - for inserted channel: - \arg ADC0_1_EXTTRIG_INSERTED_T0_TRGO: timer 0 TRGO event select - \arg ADC0_1_EXTTRIG_INSERTED_T0_CH3: timer 0 CC3 event select - \arg ADC0_1_EXTTRIG_INSERTED_T1_TRGO: timer 1 TRGO event select - \arg ADC0_1_EXTTRIG_INSERTED_T1_CH0: timer 1 CC0 event select - \arg ADC0_1_EXTTRIG_INSERTED_T2_CH3: timer 2 CC3 event select - \arg ADC0_1_EXTTRIG_INSERTED_T3_TRGO: timer 3 TRGO event select - \arg ADC0_1_EXTTRIG_INSERTED_EXTI_15: external interrupt line 15 - \arg ADC0_1_EXTTRIG_INSERTED_T7_CH3: timer 7 CC3 event select - \arg ADC2_EXTTRIG_INSERTED_T0_TRGO: timer 0 TRGO event select - \arg ADC2_EXTTRIG_INSERTED_T0_CH3: timer 0 CC3 event select - \arg ADC2_EXTTRIG_INSERTED_T3_CH2: timer 3 CC2 event select - \arg ADC2_EXTTRIG_INSERTED_T7_CH1: timer 7 CC1 event select - \arg ADC2_EXTTRIG_INSERTED_T7_CH3: timer 7 CC3 event select - \arg ADC2_EXTTRIG_INSERTED_T4_TRGO: timer 4 TRGO event select - \arg ADC2_EXTTRIG_INSERTED_T4_CH3: timer 4 CC3 event select - \arg ADC0_1_2_EXTTRIG_INSERTED_NONE: software trigger - \param[out] none - \retval none -*/ -void adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t external_trigger_source) -{ - switch(adc_channel_group){ - case ADC_REGULAR_CHANNEL: - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSRC); - ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source; - break; - case ADC_INSERTED_CHANNEL: - ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSIC); - ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source; - break; - default: - break; - } -} - -/*! - \brief enable ADC software trigger - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_channel_group: select the channel group - one or more parameters can be selected - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \param[out] none - \retval none -*/ -void adc_software_trigger_enable(uint32_t adc_periph , uint8_t adc_channel_group) -{ - if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ - ADC_CTL1(adc_periph) |= ADC_CTL1_SWRCST; - } - if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ - ADC_CTL1(adc_periph) |= ADC_CTL1_SWICST; - } -} - -/*! - \brief read ADC regular group data register - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] none - \param[out] none - \retval the conversion value -*/ -uint16_t adc_regular_data_read(uint32_t adc_periph) -{ - return (uint16_t)(ADC_RDATA(adc_periph)); -} - -/*! - \brief read ADC inserted group data register - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] inserted_channel : insert channel select - only one parameter can be selected - \arg ADC_INSERTED_CHANNEL_0: inserted Channel0 - \arg ADC_INSERTED_CHANNEL_1: inserted channel1 - \arg ADC_INSERTED_CHANNEL_2: inserted Channel2 - \arg ADC_INSERTED_CHANNEL_3: inserted Channel3 - \param[out] none - \retval the conversion value -*/ -uint16_t adc_inserted_data_read(uint32_t adc_periph , uint8_t inserted_channel) -{ - uint32_t idata; - /* read the data of the selected channel */ - switch(inserted_channel){ - case ADC_INSERTED_CHANNEL_0: - idata = ADC_IDATA0(adc_periph); - break; - case ADC_INSERTED_CHANNEL_1: - idata = ADC_IDATA1(adc_periph); - break; - case ADC_INSERTED_CHANNEL_2: - idata = ADC_IDATA2(adc_periph); - break; - case ADC_INSERTED_CHANNEL_3: - idata = ADC_IDATA3(adc_periph); - break; - default: - idata = 0U; - break; - } - return (uint16_t)idata; -} - -/*! - \brief read the last ADC0 and ADC1 conversion result data in sync mode - \param[in] none - \param[out] none - \retval the conversion value -*/ -uint32_t adc_sync_mode_convert_value_read(void) -{ - /* return conversion value */ - return ADC_RDATA(ADC0); -} - -/*! - \brief get the ADC flag bits - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_flag: the adc flag bits - only one parameter can be selected - \arg ADC_FLAG_WDE: analog watchdog event flag - \arg ADC_FLAG_EOC: end of group conversion flag - \arg ADC_FLAG_EOIC: end of inserted group conversion flag - \arg ADC_FLAG_STIC: start flag of inserted channel group - \arg ADC_FLAG_STRC: start flag of regular channel group - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus adc_flag_get(uint32_t adc_periph , uint32_t adc_flag) -{ - FlagStatus reval = RESET; - if(ADC_STAT(adc_periph) & adc_flag){ - reval = SET; - } - return reval; -} - -/*! - \brief clear the ADC flag bits - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_flag: the adc flag bits - one or more parameters can be selected - \arg ADC_FLAG_WDE: analog watchdog event flag - \arg ADC_FLAG_EOC: end of group conversion flag - \arg ADC_FLAG_EOIC: end of inserted group conversion flag - \arg ADC_FLAG_STIC: start flag of inserted channel group - \arg ADC_FLAG_STRC: start flag of regular channel group - \param[out] none - \retval none -*/ -void adc_flag_clear(uint32_t adc_periph , uint32_t adc_flag) -{ - ADC_STAT(adc_periph) &= ~((uint32_t)adc_flag); -} - -/*! - \brief get the ADC interrupt bits - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_interrupt: the adc interrupt bits - only oneparameter can be selected - \arg ADC_INT_FLAG_WDE: analog watchdog interrupt - \arg ADC_INT_FLAG_EOC: end of group conversion interrupt - \arg ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus adc_interrupt_flag_get(uint32_t adc_periph , uint32_t adc_interrupt) -{ - FlagStatus interrupt_flag = RESET; - uint32_t state; - /* check the interrupt bits */ - switch(adc_interrupt){ - case ADC_INT_FLAG_WDE: - state = ADC_STAT(adc_periph) & ADC_STAT_WDE; - if((ADC_CTL0(adc_periph) & ADC_CTL0_WDEIE) && state){ - interrupt_flag = SET; - } - break; - case ADC_INT_FLAG_EOC: - state = ADC_STAT(adc_periph) & ADC_STAT_EOC; - if((ADC_CTL0(adc_periph) & ADC_CTL0_EOCIE) && state){ - interrupt_flag = SET; - } - break; - case ADC_INT_FLAG_EOIC: - state = ADC_STAT(adc_periph) & ADC_STAT_EOIC; - if((ADC_CTL0(adc_periph) & ADC_CTL0_EOICIE) && state){ - interrupt_flag = SET; - } - break; - default: - break; - } - return interrupt_flag; -} - -/*! - \brief clear the ADC flag - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_interrupt: the adc status flag - one or more parameters can be selected - \arg ADC_INT_FLAG_WDE: analog watchdog interrupt - \arg ADC_INT_FLAG_EOC: end of group conversion interrupt - \arg ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt - \param[out] none - \retval none -*/ -void adc_interrupt_flag_clear(uint32_t adc_periph , uint32_t adc_interrupt) -{ - ADC_STAT(adc_periph) &= ~((uint32_t)adc_interrupt); -} - -/*! - \brief enable ADC interrupt - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_interrupt: the adc interrupt - one or more parameters can be selected - \arg ADC_INT_WDE: analog watchdog interrupt flag - \arg ADC_INT_EOC: end of group conversion interrupt flag - \arg ADC_INT_EOIC: end of inserted group conversion interrupt flag - \param[out] none - \retval none -*/ -void adc_interrupt_enable(uint32_t adc_periph , uint32_t adc_interrupt) -{ - if(0U != (adc_interrupt & ADC_INT_WDE)){ - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_WDEIE; - } - - if(0U != (adc_interrupt & ADC_INT_EOC)){ - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_EOCIE; - } - - if(0U != (adc_interrupt & ADC_INT_EOIC)){ - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_EOICIE; - } -} - -/*! - \brief disable ADC interrupt - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_interrupt: the adc interrupt flag - one or more parameters can be selected - \arg ADC_INT_WDE: analog watchdog interrupt flag - \arg ADC_INT_EOC: end of group conversion interrupt flag - \arg ADC_INT_EOIC: end of inserted group conversion interrupt flag - \param[out] none - \retval none -*/ -void adc_interrupt_disable(uint32_t adc_periph, uint32_t adc_interrupt) -{ - if(0U != (adc_interrupt & ADC_INT_WDE)){ - ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_WDEIE; - } - - if(0U != (adc_interrupt & ADC_INT_EOC)){ - ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_EOCIE; - } - - if(0U != (adc_interrupt & ADC_INT_EOIC)){ - ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_EOICIE; - } -} - -/*! - \brief configure ADC analog watchdog single channel - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_channel: the selected ADC channel - only one among these parameters can be selected - \arg ADC_CHANNEL_x: ADC Channelx(x=0..17)(x=16 and x=17 are only for ADC0) - \param[out] none - \retval none -*/ -void adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel) -{ - ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); - - ADC_CTL0(adc_periph) |= (uint32_t)adc_channel; - ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC); -} - -/*! - \brief configure ADC analog watchdog group channel - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] adc_channel_group: the channel group use analog watchdog - only one parameter can be selected - \arg ADC_REGULAR_CHANNEL: regular channel group - \arg ADC_INSERTED_CHANNEL: inserted channel group - \arg ADC_REGULAR_INSERTED_CHANNEL: both regular and inserted group - \param[out] none - \retval none -*/ -void adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group) -{ - ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC); - /* select the group */ - switch(adc_channel_group){ - case ADC_REGULAR_CHANNEL: - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_RWDEN; - break; - case ADC_INSERTED_CHANNEL: - ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_IWDEN; - break; - case ADC_REGULAR_INSERTED_CHANNEL: - ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN); - break; - default: - break; - } -} - -/*! - \brief disable ADC analog watchdog - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[out] none - \retval none -*/ -void adc_watchdog_disable(uint32_t adc_periph) -{ - ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); -} - -/*! - \brief configure ADC analog watchdog threshold - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] low_threshold: analog watchdog low threshold,0..4095 - \param[in] high_threshold: analog watchdog high threshold,0..4095 - \param[out] none - \retval none -*/ -void adc_watchdog_threshold_config(uint32_t adc_periph , uint16_t low_threshold , uint16_t high_threshold) -{ - ADC_WDLT(adc_periph) = (uint32_t)WDLT_WDLT(low_threshold); - ADC_WDHT(adc_periph) = (uint32_t)WDHT_WDHT(high_threshold); -} - -/*! - \brief configure ADC oversample mode - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[in] mode: ADC oversampling mode - only oneparameter can be selected - \arg ADC_OVERSAMPLING_ALL_CONVERT: all oversampled conversions for a channel are done consecutively after a trigger - \arg ADC_OVERSAMPLING_ONE_CONVERT: each oversampled conversion for a channel needs a trigger - \param[in] shift: ADC oversampling shift - only oneparameter can be selected - \arg ADC_OVERSAMPLING_SHIFT_NONE: no oversampling shift - \arg ADC_OVERSAMPLING_SHIFT_1B: 1-bit oversampling shift - \arg ADC_OVERSAMPLING_SHIFT_2B: 2-bit oversampling shift - \arg ADC_OVERSAMPLING_SHIFT_3B: 3-bit oversampling shift - \arg ADC_OVERSAMPLING_SHIFT_4B: 3-bit oversampling shift - \arg ADC_OVERSAMPLING_SHIFT_5B: 5-bit oversampling shift - \arg ADC_OVERSAMPLING_SHIFT_6B: 6-bit oversampling shift - \arg ADC_OVERSAMPLING_SHIFT_7B: 7-bit oversampling shift - \arg ADC_OVERSAMPLING_SHIFT_8B: 8-bit oversampling shift - \param[in] ratio: ADC oversampling ratio - only oneparameter can be selected - \arg ADC_OVERSAMPLING_RATIO_MUL2: oversampling ratio multiple 2 - \arg ADC_OVERSAMPLING_RATIO_MUL4: oversampling ratio multiple 4 - \arg ADC_OVERSAMPLING_RATIO_MUL8: oversampling ratio multiple 8 - \arg ADC_OVERSAMPLING_RATIO_MUL16: oversampling ratio multiple 16 - \arg ADC_OVERSAMPLING_RATIO_MUL32: oversampling ratio multiple 32 - \arg ADC_OVERSAMPLING_RATIO_MUL64: oversampling ratio multiple 64 - \arg ADC_OVERSAMPLING_RATIO_MUL128: oversampling ratio multiple 128 - \arg ADC_OVERSAMPLING_RATIO_MUL256: oversampling ratio multiple 256 - \param[out] none - \retval none -*/ -void adc_oversample_mode_config(uint32_t adc_periph, uint32_t mode, uint16_t shift, uint8_t ratio) -{ - if(ADC_OVERSAMPLING_ONE_CONVERT == mode){ - ADC_OVSAMPCTL(adc_periph) |= (uint32_t)ADC_OVSAMPCTL_TOVS; - }else{ - ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)ADC_OVSAMPCTL_TOVS); - } - /* config the shift and ratio */ - ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)(ADC_OVSAMPCTL_OVSR | ADC_OVSAMPCTL_OVSS)); - ADC_OVSAMPCTL(adc_periph) |= ((uint32_t)shift | (uint32_t)ratio); -} - -/*! - \brief enable ADC oversample mode - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[out] none - \retval none -*/ -void adc_oversample_mode_enable(uint32_t adc_periph) -{ - ADC_OVSAMPCTL(adc_periph) |= ADC_OVSAMPCTL_OVSEN; -} - -/*! - \brief disable ADC oversample mode - \param[in] adc_periph: ADCx,x=0,1,2 - only one among these parameters can be selected - \param[out] none - \retval none -*/ -void adc_oversample_mode_disable(uint32_t adc_periph) -{ - ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)ADC_OVSAMPCTL_OVSEN); -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_bkp.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_bkp.c deleted file mode 100644 index f437c95..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_bkp.c +++ /dev/null @@ -1,328 +0,0 @@ -/*! - \file gd32f30x_bkp.c - \brief BKP driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_bkp.h" - -#define TAMPER_FLAG_SHIFT ((uint8_t)8U) - -/*! - \brief reset BKP registers - \param[in] none - \param[out] none - \retval none -*/ -void bkp_deinit(void) -{ - /* reset BKP domain register*/ - rcu_bkp_reset_enable(); - rcu_bkp_reset_disable(); -} - -/*! - \brief write BKP data register - \param[in] register_number: refer to bkp_data_register_enum, only one parameter can be selected - \arg BKP_DATA_x(x = 0..41): bkp data register number x - \param[in] data: the data to be write in BKP data register - \param[out] none - \retval none -*/ -void bkp_write_data(bkp_data_register_enum register_number, uint16_t data) -{ - if((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)){ - BKP_DATA10_41(register_number-1U) = data; - }else if((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)){ - BKP_DATA0_9(register_number-1U) = data; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief read BKP data register - \param[in] register_number: refer to bkp_data_register_enum, only one parameter can be selected - \arg BKP_DATA_x(x = 0..41): bkp data register number x - \param[out] none - \retval data of BKP data register -*/ -uint16_t bkp_read_data(bkp_data_register_enum register_number) -{ - uint16_t data = 0U; - - /* get the data from the BKP data register */ - if((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)){ - data = BKP_DATA10_41(register_number-1U); - }else if((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)){ - data = BKP_DATA0_9(register_number-1U); - }else{ - /* illegal parameters */ - } - return data; -} - -/*! - \brief enable RTC clock calibration output - \param[in] none - \param[out] none - \retval none -*/ -void bkp_rtc_calibration_output_enable(void) -{ - BKP_OCTL |= (uint16_t)BKP_OCTL_COEN; -} - -/*! - \brief disable RTC clock calibration output - \param[in] none - \param[out] none - \retval none -*/ -void bkp_rtc_calibration_output_disable(void) -{ - BKP_OCTL &= (uint16_t)~BKP_OCTL_COEN; -} - -/*! - \brief enable RTC alarm or second signal output - \param[in] none - \param[out] none - \retval none -*/ -void bkp_rtc_signal_output_enable(void) -{ - BKP_OCTL |= (uint16_t)BKP_OCTL_ASOEN; -} - -/*! - \brief disable RTC alarm or second signal output - \param[in] none - \param[out] none - \retval none -*/ -void bkp_rtc_signal_output_disable(void) -{ - BKP_OCTL &= (uint16_t)~BKP_OCTL_ASOEN; -} - -/*! - \brief select RTC output - \param[in] outputsel: RTC output selection - \arg RTC_OUTPUT_ALARM_PULSE: RTC alarm pulse is selected as the RTC output - \arg RTC_OUTPUT_SECOND_PULSE: RTC second pulse is selected as the RTC output - \param[out] none - \retval none -*/ -void bkp_rtc_output_select(uint16_t outputsel) -{ - uint16_t ctl = 0U; - - ctl = BKP_OCTL; - ctl &= (uint16_t)~BKP_OCTL_ROSEL; - ctl |= outputsel; - BKP_OCTL = ctl; -} - -/*! - \brief select RTC clock output - \param[in] clocksel: RTC clock output selection - \arg RTC_CLOCK_DIV_64: RTC clock div 64 - \arg RTC_CLOCK_DIV_1: RTC clock - \param[out] none - \retval none -*/ -void bkp_rtc_clock_output_select(uint16_t clocksel) -{ - uint16_t ctl = 0U; - - ctl = BKP_OCTL; - ctl &= (uint16_t)~BKP_OCTL_CCOSEL; - ctl |= clocksel; - BKP_OCTL = ctl; -} - -/*! - \brief RTC clock calibration direction - \param[in] direction: RTC clock calibration direction - \arg RTC_CLOCK_SLOWED_DOWN: RTC clock slow down - \arg RTC_CLOCK_SPEED_UP: RTC clock speed up - \param[out] none - \retval none -*/ -void bkp_rtc_clock_calibration_direction(uint16_t direction) -{ - uint16_t ctl = 0U; - - ctl = BKP_OCTL; - ctl &= (uint16_t)~BKP_OCTL_CALDIR; - ctl |= direction; - BKP_OCTL = ctl; -} - -/*! - \brief set RTC clock calibration value - \param[in] value: RTC clock calibration value - \arg 0x00 - 0x7F - \param[out] none - \retval none -*/ -void bkp_rtc_calibration_value_set(uint8_t value) -{ - uint16_t ctl; - - ctl = BKP_OCTL; - ctl &= (uint16_t)OCTL_RCCV(0); - ctl |= (uint16_t)OCTL_RCCV(value); - BKP_OCTL = ctl; -} - -/*! - \brief enable tamper detection - \param[in] none - \param[out] none - \retval none -*/ -void bkp_tamper_detection_enable(void) -{ - BKP_TPCTL |= (uint16_t)BKP_TPCTL_TPEN; -} - -/*! - \brief disable tamper detection - \param[in] none - \param[out] none - \retval none -*/ -void bkp_tamper_detection_disable(void) -{ - BKP_TPCTL &= (uint16_t)~BKP_TPCTL_TPEN; -} - -/*! - \brief set tamper pin active level - \param[in] level: tamper active level - \arg TAMPER_PIN_ACTIVE_HIGH: the tamper pin is active high - \arg TAMPER_PIN_ACTIVE_LOW: the tamper pin is active low - \param[out] none - \retval none -*/ -void bkp_tamper_active_level_set(uint16_t level) -{ - uint16_t ctl = 0U; - - ctl = BKP_TPCTL; - ctl &= (uint16_t)~BKP_TPCTL_TPAL; - ctl |= level; - BKP_TPCTL = ctl; -} - -/*! - \brief enable tamper interrupt - \param[in] none - \param[out] none - \retval none -*/ -void bkp_tamper_interrupt_enable(void) -{ - BKP_TPCS |= (uint16_t)BKP_TPCS_TPIE; -} - -/*! - \brief disable tamper interrupt - \param[in] none - \param[out] none - \retval none -*/ -void bkp_tamper_interrupt_disable(void) -{ - BKP_TPCS &= (uint16_t)~BKP_TPCS_TPIE; -} - -/*! - \brief get bkp flag state - \param[in] flag - \arg BKP_FLAG_TAMPER: tamper event flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus bkp_flag_get(uint16_t flag) -{ - if(RESET != (BKP_TPCS & flag)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear bkp flag state - \param[in] flag - \arg BKP_FLAG_TAMPER: tamper event flag - \param[out] none - \retval none -*/ -void bkp_flag_clear(uint16_t flag) -{ - BKP_TPCS |= (uint16_t)(flag >> TAMPER_FLAG_SHIFT); -} - -/*! - \brief get bkp interrupt flag state - \param[in] flag - \arg BKP_INT_FLAG_TAMPER: tamper interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus bkp_interrupt_flag_get(uint16_t flag) -{ - if(RESET != (BKP_TPCS & flag)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear bkp interrupt flag state - \param[in] flag - \arg BKP_INT_FLAG_TAMPER: tamper interrupt flag - \param[out] none - \retval none -*/ -void bkp_interrupt_flag_clear(uint16_t flag) -{ - BKP_TPCS |= (uint16_t)(flag >> TAMPER_FLAG_SHIFT); -} - diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_can.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_can.c deleted file mode 100644 index 280fe94..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_can.c +++ /dev/null @@ -1,1042 +0,0 @@ -/*! - \file gd32f30x_can.c - \brief CAN driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2019-11-27, V2.0.1, firmware for GD32F30x - \version 2020-03-02, V2.0.2, firmware for GD32F30x - \version 2020-07-14, V2.0.3, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_can.h" -#include - -#define CAN_ERROR_HANDLE(s) do{}while(1) - -/*! - \brief deinitialize CAN - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[out] none - \retval none -*/ -void can_deinit(uint32_t can_periph) -{ -#ifdef GD32F30X_CL - if(CAN0 == can_periph){ - rcu_periph_reset_enable(RCU_CAN0RST); - rcu_periph_reset_disable(RCU_CAN0RST); - }else{ - rcu_periph_reset_enable(RCU_CAN1RST); - rcu_periph_reset_disable(RCU_CAN1RST); - } -#else - if(CAN0 == can_periph){ - rcu_periph_reset_enable(RCU_CAN0RST); - rcu_periph_reset_disable(RCU_CAN0RST); - } -#endif -} - -/*! - \brief initialize CAN parameter struct with a default value - \param[in] type: the type of CAN parameter struct - only one parameter can be selected which is shown as below: - \arg CAN_INIT_STRUCT: the CAN initial struct - \arg CAN_FILTER_STRUCT: the CAN filter struct - \arg CAN_TX_MESSAGE_STRUCT: the CAN TX message struct - \arg CAN_RX_MESSAGE_STRUCT: the CAN RX message struct - \param[in] p_struct: the pointer of the specific struct - \param[out] none - \retval none -*/ -void can_struct_para_init(can_struct_type_enum type, void* p_struct) -{ - uint8_t i; - - if(NULL == p_struct){ - CAN_ERROR_HANDLE("struct parameter can not be NULL \r\n"); - } - - /* get type of the struct */ - switch(type){ - /* used for can_init() */ - case CAN_INIT_STRUCT: - ((can_parameter_struct*)p_struct)->auto_bus_off_recovery = DISABLE; - ((can_parameter_struct*)p_struct)->no_auto_retrans = DISABLE; - ((can_parameter_struct*)p_struct)->auto_wake_up = DISABLE; - ((can_parameter_struct*)p_struct)->prescaler = 0x03FFU; - ((can_parameter_struct*)p_struct)->rec_fifo_overwrite = DISABLE; - ((can_parameter_struct*)p_struct)->resync_jump_width = CAN_BT_SJW_1TQ; - ((can_parameter_struct*)p_struct)->time_segment_1 = CAN_BT_BS1_3TQ; - ((can_parameter_struct*)p_struct)->time_segment_2 = CAN_BT_BS2_1TQ; - ((can_parameter_struct*)p_struct)->time_triggered = DISABLE; - ((can_parameter_struct*)p_struct)->trans_fifo_order = DISABLE; - ((can_parameter_struct*)p_struct)->working_mode = CAN_NORMAL_MODE; - - break; - /* used for can_filter_init() */ - case CAN_FILTER_STRUCT: - ((can_filter_parameter_struct*)p_struct)->filter_bits = CAN_FILTERBITS_32BIT; - ((can_filter_parameter_struct*)p_struct)->filter_enable = DISABLE; - ((can_filter_parameter_struct*)p_struct)->filter_fifo_number = CAN_FIFO0; - ((can_filter_parameter_struct*)p_struct)->filter_list_high = 0x0000U; - ((can_filter_parameter_struct*)p_struct)->filter_list_low = 0x0000U; - ((can_filter_parameter_struct*)p_struct)->filter_mask_high = 0x0000U; - ((can_filter_parameter_struct*)p_struct)->filter_mask_low = 0x0000U; - ((can_filter_parameter_struct*)p_struct)->filter_mode = CAN_FILTERMODE_MASK; - ((can_filter_parameter_struct*)p_struct)->filter_number = 0U; - - break; - /* used for can_message_transmit() */ - case CAN_TX_MESSAGE_STRUCT: - for(i = 0U; i < 8U; i++){ - ((can_trasnmit_message_struct*)p_struct)->tx_data[i] = 0U; - } - - ((can_trasnmit_message_struct*)p_struct)->tx_dlen = 0u; - ((can_trasnmit_message_struct*)p_struct)->tx_efid = 0U; - ((can_trasnmit_message_struct*)p_struct)->tx_ff = (uint8_t)CAN_FF_STANDARD; - ((can_trasnmit_message_struct*)p_struct)->tx_ft = (uint8_t)CAN_FT_DATA; - ((can_trasnmit_message_struct*)p_struct)->tx_sfid = 0U; - - break; - /* used for can_message_receive() */ - case CAN_RX_MESSAGE_STRUCT: - for(i = 0U; i < 8U; i++){ - ((can_receive_message_struct*)p_struct)->rx_data[i] = 0U; - } - - ((can_receive_message_struct*)p_struct)->rx_dlen = 0U; - ((can_receive_message_struct*)p_struct)->rx_efid = 0U; - ((can_receive_message_struct*)p_struct)->rx_ff = (uint8_t)CAN_FF_STANDARD; - ((can_receive_message_struct*)p_struct)->rx_fi = 0U; - ((can_receive_message_struct*)p_struct)->rx_ft = (uint8_t)CAN_FT_DATA; - ((can_receive_message_struct*)p_struct)->rx_sfid = 0U; - - break; - - default: - CAN_ERROR_HANDLE("parameter is invalid \r\n"); - } -} - -/*! - \brief initialize CAN - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] can_parameter_init: parameters for CAN initializtion - \arg working_mode: CAN_NORMAL_MODE, CAN_LOOPBACK_MODE, CAN_SILENT_MODE, CAN_SILENT_LOOPBACK_MODE - \arg resync_jump_width: CAN_BT_SJW_xTQ(x=1, 2, 3, 4) - \arg time_segment_1: CAN_BT_BS1_xTQ(1..16) - \arg time_segment_2: CAN_BT_BS2_xTQ(1..8) - \arg time_triggered: ENABLE or DISABLE - \arg auto_bus_off_recovery: ENABLE or DISABLE - \arg auto_wake_up: ENABLE or DISABLE - \arg no_auto_retrans: ENABLE or DISABLE - \arg rec_fifo_overwrite: ENABLE or DISABLE - \arg trans_fifo_order: ENABLE or DISABLE - \arg prescaler: 0x0001 - 0x0400 - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus can_init(uint32_t can_periph, can_parameter_struct* can_parameter_init) -{ - uint32_t timeout = CAN_TIMEOUT; - ErrStatus flag = ERROR; - - /* disable sleep mode */ - CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; - /* enable initialize mode */ - CAN_CTL(can_periph) |= CAN_CTL_IWMOD; - /* wait ACK */ - while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)){ - timeout--; - } - /* check initialize working success */ - if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)){ - flag = ERROR; - }else{ - /* set the bit timing register */ - CAN_BT(can_periph) = (BT_MODE((uint32_t)can_parameter_init->working_mode) | \ - BT_SJW((uint32_t)can_parameter_init->resync_jump_width) | \ - BT_BS1((uint32_t)can_parameter_init->time_segment_1) | \ - BT_BS2((uint32_t)can_parameter_init->time_segment_2) | \ - BT_BAUDPSC(((uint32_t)(can_parameter_init->prescaler) - 1U))); - - /* time trigger communication mode */ - if(ENABLE == can_parameter_init->time_triggered){ - CAN_CTL(can_periph) |= CAN_CTL_TTC; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_TTC; - } - /* automatic bus-off managment */ - if(ENABLE == can_parameter_init->auto_bus_off_recovery){ - CAN_CTL(can_periph) |= CAN_CTL_ABOR; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_ABOR; - } - /* automatic wakeup mode */ - if(ENABLE == can_parameter_init->auto_wake_up){ - CAN_CTL(can_periph) |= CAN_CTL_AWU; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_AWU; - } - /* automatic retransmission mode disable */ - if(ENABLE == can_parameter_init->no_auto_retrans){ - CAN_CTL(can_periph) |= CAN_CTL_ARD; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_ARD; - } - /* receive fifo overwrite mode */ - if(ENABLE == can_parameter_init->rec_fifo_overwrite){ - CAN_CTL(can_periph) |= CAN_CTL_RFOD; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_RFOD; - } - /* transmit fifo order */ - if(ENABLE == can_parameter_init->trans_fifo_order){ - CAN_CTL(can_periph) |= CAN_CTL_TFO; - }else{ - CAN_CTL(can_periph) &= ~CAN_CTL_TFO; - } - /* disable initialize mode */ - CAN_CTL(can_periph) &= ~CAN_CTL_IWMOD; - timeout = CAN_TIMEOUT; - /* wait the ACK */ - while((CAN_STAT_IWS == (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)){ - timeout--; - } - /* check exit initialize mode */ - if(0U != timeout){ - flag = SUCCESS; - } - } - return flag; -} - -/*! - \brief initialize CAN filter - \param[in] can_filter_parameter_init: struct for CAN filter initialization - \arg filter_list_high: 0x0000 - 0xFFFF - \arg filter_list_low: 0x0000 - 0xFFFF - \arg filter_mask_high: 0x0000 - 0xFFFF - \arg filter_mask_low: 0x0000 - 0xFFFF - \arg filter_fifo_number: CAN_FIFO0, CAN_FIFO1 - \arg filter_number: 0 - 27 - \arg filter_mode: CAN_FILTERMODE_MASK, CAN_FILTERMODE_LIST - \arg filter_bits: CAN_FILTERBITS_32BIT, CAN_FILTERBITS_16BIT - \arg filter_enable: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void can_filter_init(can_filter_parameter_struct* can_filter_parameter_init) -{ - uint32_t val = 0U; - - val = ((uint32_t)1) << (can_filter_parameter_init->filter_number); - /* filter lock disable */ - CAN_FCTL(CAN0) |= CAN_FCTL_FLD; - /* disable filter */ - CAN_FW(CAN0) &= ~(uint32_t)val; - - /* filter 16 bits */ - if(CAN_FILTERBITS_16BIT == can_filter_parameter_init->filter_bits){ - /* set filter 16 bits */ - CAN_FSCFG(CAN0) &= ~(uint32_t)val; - /* first 16 bits list and first 16 bits mask or first 16 bits list and second 16 bits list */ - CAN_FDATA0(CAN0, can_filter_parameter_init->filter_number) = \ - FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_low) & CAN_FILTER_MASK_16BITS) | \ - FDATA_MASK_LOW((can_filter_parameter_init->filter_list_low) & CAN_FILTER_MASK_16BITS); - /* second 16 bits list and second 16 bits mask or third 16 bits list and fourth 16 bits list */ - CAN_FDATA1(CAN0, can_filter_parameter_init->filter_number) = \ - FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_high) & CAN_FILTER_MASK_16BITS) | \ - FDATA_MASK_LOW((can_filter_parameter_init->filter_list_high) & CAN_FILTER_MASK_16BITS); - } - /* filter 32 bits */ - if(CAN_FILTERBITS_32BIT == can_filter_parameter_init->filter_bits){ - /* set filter 32 bits */ - CAN_FSCFG(CAN0) |= (uint32_t)val; - /* 32 bits list or first 32 bits list */ - CAN_FDATA0(CAN0, can_filter_parameter_init->filter_number) = \ - FDATA_MASK_HIGH((can_filter_parameter_init->filter_list_high) & CAN_FILTER_MASK_16BITS) | - FDATA_MASK_LOW((can_filter_parameter_init->filter_list_low) & CAN_FILTER_MASK_16BITS); - /* 32 bits mask or second 32 bits list */ - CAN_FDATA1(CAN0, can_filter_parameter_init->filter_number) = \ - FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_high) & CAN_FILTER_MASK_16BITS) | - FDATA_MASK_LOW((can_filter_parameter_init->filter_mask_low) & CAN_FILTER_MASK_16BITS); - } - - /* filter mode */ - if(CAN_FILTERMODE_MASK == can_filter_parameter_init->filter_mode){ - /* mask mode */ - CAN_FMCFG(CAN0) &= ~(uint32_t)val; - }else{ - /* list mode */ - CAN_FMCFG(CAN0) |= (uint32_t)val; - } - - /* filter FIFO */ - if(CAN_FIFO0 == (can_filter_parameter_init->filter_fifo_number)){ - /* FIFO0 */ - CAN_FAFIFO(CAN0) &= ~(uint32_t)val; - }else{ - /* FIFO1 */ - CAN_FAFIFO(CAN0) |= (uint32_t)val; - } - - /* filter working */ - if(ENABLE == can_filter_parameter_init->filter_enable){ - - CAN_FW(CAN0) |= (uint32_t)val; - } - - /* filter lock enable */ - CAN_FCTL(CAN0) &= ~CAN_FCTL_FLD; -} - -/*! - \brief set CAN1 fliter start bank number - \param[in] start_bank: CAN1 start bank number - only one parameter can be selected which is shown as below: - \arg (1..27) - \param[out] none - \retval none -*/ -void can1_filter_start_bank(uint8_t start_bank) -{ - /* filter lock disable */ - CAN_FCTL(CAN0) |= CAN_FCTL_FLD; - /* set CAN1 filter start number */ - CAN_FCTL(CAN0) &= ~(uint32_t)CAN_FCTL_HBC1F; - CAN_FCTL(CAN0) |= FCTL_HBC1F(start_bank); - /* filter lock enaable */ - CAN_FCTL(CAN0) &= ~CAN_FCTL_FLD; -} - -/*! - \brief enable CAN debug freeze - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[out] none - \retval none -*/ -void can_debug_freeze_enable(uint32_t can_periph) -{ - CAN_CTL(can_periph) |= CAN_CTL_DFZ; -#ifdef GD32F30X_CL - if(CAN0 == can_periph){ - dbg_periph_enable(DBG_CAN0_HOLD); - }else{ - dbg_periph_enable(DBG_CAN1_HOLD); - } -#else - if(CAN0 == can_periph){ - dbg_periph_enable(DBG_CAN0_HOLD); - } -#endif -} - -/*! - \brief disable CAN debug freeze - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[out] none - \retval none -*/ -void can_debug_freeze_disable(uint32_t can_periph) -{ - CAN_CTL(can_periph) &= ~CAN_CTL_DFZ; -#ifdef GD32F30X_CL - if(CAN0 == can_periph){ - dbg_periph_disable(DBG_CAN0_HOLD); - }else{ - dbg_periph_disable(DBG_CAN1_HOLD); - } -#else - if(CAN0 == can_periph){ - dbg_periph_enable(DBG_CAN0_HOLD); - } -#endif -} - -/*! - \brief enable CAN time trigger mode - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[out] none - \retval none -*/ -void can_time_trigger_mode_enable(uint32_t can_periph) -{ - uint8_t mailbox_number; - - /* enable the tcc mode */ - CAN_CTL(can_periph) |= CAN_CTL_TTC; - /* enable time stamp */ - for(mailbox_number = 0U; mailbox_number < 3U; mailbox_number++){ - CAN_TMP(can_periph, mailbox_number) |= CAN_TMP_TSEN; - } -} - -/*! - \brief disable CAN time trigger mode - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[out] none - \retval none -*/ -void can_time_trigger_mode_disable(uint32_t can_periph) -{ - uint8_t mailbox_number; - - /* disable the TCC mode */ - CAN_CTL(can_periph) &= ~CAN_CTL_TTC; - /* reset TSEN bits */ - for(mailbox_number = 0U; mailbox_number < 3U; mailbox_number++){ - CAN_TMP(can_periph, mailbox_number) &= ~CAN_TMP_TSEN; - } -} - -/*! - \brief transmit CAN message - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] transmit_message: struct for CAN transmit message - \arg tx_sfid: 0x00000000 - 0x000007FF - \arg tx_efid: 0x00000000 - 0x1FFFFFFF - \arg tx_ff: CAN_FF_STANDARD, CAN_FF_EXTENDED - \arg tx_ft: CAN_FT_DATA, CAN_FT_REMOTE - \arg tx_dlen: 0 - 8 - \arg tx_data[]: 0x00 - 0xFF - \param[out] none - \retval mailbox_number -*/ -uint8_t can_message_transmit(uint32_t can_periph, can_trasnmit_message_struct* transmit_message) -{ - uint8_t mailbox_number = CAN_MAILBOX0; - - /* select one empty mailbox */ - if(CAN_TSTAT_TME0 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME0)){ - mailbox_number = CAN_MAILBOX0; - }else if(CAN_TSTAT_TME1 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME1)){ - mailbox_number = CAN_MAILBOX1; - }else if(CAN_TSTAT_TME2 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME2)){ - mailbox_number = CAN_MAILBOX2; - }else{ - mailbox_number = CAN_NOMAILBOX; - } - /* return no mailbox empty */ - if(CAN_NOMAILBOX == mailbox_number){ - return CAN_NOMAILBOX; - } - - CAN_TMI(can_periph, mailbox_number) &= CAN_TMI_TEN; - if(CAN_FF_STANDARD == transmit_message->tx_ff){ - /* set transmit mailbox standard identifier */ - CAN_TMI(can_periph, mailbox_number) |= (uint32_t)(TMI_SFID(transmit_message->tx_sfid) | \ - transmit_message->tx_ft); - }else{ - /* set transmit mailbox extended identifier */ - CAN_TMI(can_periph, mailbox_number) |= (uint32_t)(TMI_EFID(transmit_message->tx_efid) | \ - transmit_message->tx_ff | \ - transmit_message->tx_ft); - } - /* set the data length */ - CAN_TMP(can_periph, mailbox_number) &= ~CAN_TMP_DLENC; - CAN_TMP(can_periph, mailbox_number) |= transmit_message->tx_dlen; - /* set the data */ - CAN_TMDATA0(can_periph, mailbox_number) = TMDATA0_DB3(transmit_message->tx_data[3]) | \ - TMDATA0_DB2(transmit_message->tx_data[2]) | \ - TMDATA0_DB1(transmit_message->tx_data[1]) | \ - TMDATA0_DB0(transmit_message->tx_data[0]); - CAN_TMDATA1(can_periph, mailbox_number) = TMDATA1_DB7(transmit_message->tx_data[7]) | \ - TMDATA1_DB6(transmit_message->tx_data[6]) | \ - TMDATA1_DB5(transmit_message->tx_data[5]) | \ - TMDATA1_DB4(transmit_message->tx_data[4]); - /* enable transmission */ - CAN_TMI(can_periph, mailbox_number) |= CAN_TMI_TEN; - - return mailbox_number; -} - -/*! - \brief get CAN transmit state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] mailbox_number - only one parameter can be selected which is shown as below: - \arg CAN_MAILBOX(x=0,1,2) - \param[out] none - \retval can_transmit_state_enum -*/ -can_transmit_state_enum can_transmit_states(uint32_t can_periph, uint8_t mailbox_number) -{ - can_transmit_state_enum state = CAN_TRANSMIT_FAILED; - uint32_t val = 0U; - - /* check selected mailbox state */ - switch(mailbox_number){ - /* mailbox0 */ - case CAN_MAILBOX0: - val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF0 | CAN_TSTAT_MTFNERR0 | CAN_TSTAT_TME0); - break; - /* mailbox1 */ - case CAN_MAILBOX1: - val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF1 | CAN_TSTAT_MTFNERR1 | CAN_TSTAT_TME1); - break; - /* mailbox2 */ - case CAN_MAILBOX2: - val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF2 | CAN_TSTAT_MTFNERR2 | CAN_TSTAT_TME2); - break; - default: - val = CAN_TRANSMIT_FAILED; - break; - } - - switch(val){ - /* transmit pending */ - case (CAN_STATE_PENDING): - state = CAN_TRANSMIT_PENDING; - break; - /* mailbox0 transmit succeeded */ - case (CAN_TSTAT_MTF0 | CAN_TSTAT_MTFNERR0 | CAN_TSTAT_TME0): - state = CAN_TRANSMIT_OK; - break; - /* mailbox1 transmit succeeded */ - case (CAN_TSTAT_MTF1 | CAN_TSTAT_MTFNERR1 | CAN_TSTAT_TME1): - state = CAN_TRANSMIT_OK; - break; - /* mailbox2 transmit succeeded */ - case (CAN_TSTAT_MTF2 | CAN_TSTAT_MTFNERR2 | CAN_TSTAT_TME2): - state = CAN_TRANSMIT_OK; - break; - /* transmit failed */ - default: - state = CAN_TRANSMIT_FAILED; - break; - } - return state; -} - -/*! - \brief stop CAN transmission - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] mailbox_number - only one parameter can be selected which is shown as below: - \arg CAN_MAILBOXx(x=0,1,2) - \param[out] none - \retval none -*/ -void can_transmission_stop(uint32_t can_periph, uint8_t mailbox_number) -{ - if(CAN_MAILBOX0 == mailbox_number){ - CAN_TSTAT(can_periph) |= CAN_TSTAT_MST0; - while(CAN_TSTAT_MST0 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST0)){ - } - }else if(CAN_MAILBOX1 == mailbox_number){ - CAN_TSTAT(can_periph) |= CAN_TSTAT_MST1; - while(CAN_TSTAT_MST1 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST1)){ - } - }else if(CAN_MAILBOX2 == mailbox_number){ - CAN_TSTAT(can_periph) |= CAN_TSTAT_MST2; - while(CAN_TSTAT_MST2 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST2)){ - } - }else{ - /* illegal parameters */ - } -} - -/*! - \brief CAN receive message - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] fifo_number - \arg CAN_FIFOx(x=0,1) - \param[out] receive_message: struct for CAN receive message - \arg rx_sfid: 0x00000000 - 0x000007FF - \arg rx_efid: 0x00000000 - 0x1FFFFFFF - \arg rx_ff: CAN_FF_STANDARD, CAN_FF_EXTENDED - \arg rx_ft: CAN_FT_DATA, CAN_FT_REMOTE - \arg rx_dlen: 0 - 8 - \arg rx_data[]: 0x00 - 0xFF - \arg rx_fi: 0 - 27 - \retval none -*/ -void can_message_receive(uint32_t can_periph, uint8_t fifo_number, can_receive_message_struct* receive_message) -{ - /* get the frame format */ - receive_message->rx_ff = (uint8_t)(CAN_RFIFOMI_FF & CAN_RFIFOMI(can_periph, fifo_number)); - if(CAN_FF_STANDARD == receive_message->rx_ff){ - /* get standard identifier */ - receive_message->rx_sfid = (uint32_t)(GET_RFIFOMI_SFID(CAN_RFIFOMI(can_periph, fifo_number))); - }else{ - /* get extended identifier */ - receive_message->rx_efid = (uint32_t)(GET_RFIFOMI_EFID(CAN_RFIFOMI(can_periph, fifo_number))); - } - - /* get frame type */ - receive_message->rx_ft = (uint8_t)(CAN_RFIFOMI_FT & CAN_RFIFOMI(can_periph, fifo_number)); - /* filtering index */ - receive_message->rx_fi = (uint8_t)(GET_RFIFOMP_FI(CAN_RFIFOMP(can_periph, fifo_number))); - /* get recevie data length */ - receive_message->rx_dlen = (uint8_t)(GET_RFIFOMP_DLENC(CAN_RFIFOMP(can_periph, fifo_number))); - - /* receive data */ - receive_message -> rx_data[0] = (uint8_t)(GET_RFIFOMDATA0_DB0(CAN_RFIFOMDATA0(can_periph, fifo_number))); - receive_message -> rx_data[1] = (uint8_t)(GET_RFIFOMDATA0_DB1(CAN_RFIFOMDATA0(can_periph, fifo_number))); - receive_message -> rx_data[2] = (uint8_t)(GET_RFIFOMDATA0_DB2(CAN_RFIFOMDATA0(can_periph, fifo_number))); - receive_message -> rx_data[3] = (uint8_t)(GET_RFIFOMDATA0_DB3(CAN_RFIFOMDATA0(can_periph, fifo_number))); - receive_message -> rx_data[4] = (uint8_t)(GET_RFIFOMDATA1_DB4(CAN_RFIFOMDATA1(can_periph, fifo_number))); - receive_message -> rx_data[5] = (uint8_t)(GET_RFIFOMDATA1_DB5(CAN_RFIFOMDATA1(can_periph, fifo_number))); - receive_message -> rx_data[6] = (uint8_t)(GET_RFIFOMDATA1_DB6(CAN_RFIFOMDATA1(can_periph, fifo_number))); - receive_message -> rx_data[7] = (uint8_t)(GET_RFIFOMDATA1_DB7(CAN_RFIFOMDATA1(can_periph, fifo_number))); - - /* release FIFO */ - if(CAN_FIFO0 == fifo_number){ - CAN_RFIFO0(can_periph) |= CAN_RFIFO0_RFD0; - }else{ - CAN_RFIFO1(can_periph) |= CAN_RFIFO1_RFD1; - } -} - -/*! - \brief release FIFO0 - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] fifo_number - only one parameter can be selected which is shown as below: - \arg CAN_FIFOx(x=0,1) - \param[out] none - \retval none -*/ -void can_fifo_release(uint32_t can_periph, uint8_t fifo_number) -{ - if(CAN_FIFO0 == fifo_number){ - CAN_RFIFO0(can_periph) |= CAN_RFIFO0_RFD0; - }else if(CAN_FIFO1 == fifo_number){ - CAN_RFIFO1(can_periph) |= CAN_RFIFO1_RFD1; - }else{ - /* illegal parameters */ - CAN_ERROR_HANDLE("CAN FIFO NUM is invalid \r\n"); - } -} - -/*! - \brief CAN receive message length - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] fifo_number - only one parameter can be selected which is shown as below: - \arg CAN_FIFOx(x=0,1) - \param[out] none - \retval message length -*/ -uint8_t can_receive_message_length_get(uint32_t can_periph, uint8_t fifo_number) -{ - uint8_t val = 0U; - - if(CAN_FIFO0 == fifo_number){ - /* FIFO0 */ - val = (uint8_t)(CAN_RFIFO0(can_periph) & CAN_RFIF_RFL_MASK); - }else if(CAN_FIFO1 == fifo_number){ - /* FIFO1 */ - val = (uint8_t)(CAN_RFIFO1(can_periph) & CAN_RFIF_RFL_MASK); - }else{ - /* illegal parameters */ - } - return val; -} - -/*! - \brief set CAN working mode - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] can_working_mode - only one parameter can be selected which is shown as below: - \arg CAN_MODE_INITIALIZE - \arg CAN_MODE_NORMAL - \arg CAN_MODE_SLEEP - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus can_working_mode_set(uint32_t can_periph, uint8_t working_mode) -{ - ErrStatus flag = ERROR; - /* timeout for IWS or also for SLPWS bits */ - uint32_t timeout = CAN_TIMEOUT; - - if(CAN_MODE_INITIALIZE == working_mode){ - /* disable sleep mode */ - CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_SLPWMOD); - /* set initialize mode */ - CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_IWMOD; - /* wait the acknowledge */ - while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)){ - timeout--; - } - if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)){ - flag = ERROR; - }else{ - flag = SUCCESS; - } - }else if(CAN_MODE_NORMAL == working_mode){ - /* enter normal mode */ - CAN_CTL(can_periph) &= ~(uint32_t)(CAN_CTL_SLPWMOD | CAN_CTL_IWMOD); - /* wait the acknowledge */ - while((0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) && (0U != timeout)){ - timeout--; - } - if(0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))){ - flag = ERROR; - }else{ - flag = SUCCESS; - } - }else if(CAN_MODE_SLEEP == working_mode){ - /* disable initialize mode */ - CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_IWMOD); - /* set sleep mode */ - CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_SLPWMOD; - /* wait the acknowledge */ - while((CAN_STAT_SLPWS != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) && (0U != timeout)){ - timeout--; - } - if(CAN_STAT_SLPWS != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)){ - flag = ERROR; - }else{ - flag = SUCCESS; - } - }else{ - flag = ERROR; - } - return flag; -} - -/*! - \brief wake up CAN - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus can_wakeup(uint32_t can_periph) -{ - ErrStatus flag = ERROR; - uint32_t timeout = CAN_TIMEOUT; - - /* wakeup */ - CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; - - while((0U != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) && (0x00U != timeout)){ - timeout--; - } - /* check state */ - if(0U != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)){ - flag = ERROR; - }else{ - flag = SUCCESS; - } - return flag; -} - -/*! - \brief get CAN error type - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[out] none - \retval can_error_enum - \arg CAN_ERROR_NONE: no error - \arg CAN_ERROR_FILL: fill error - \arg CAN_ERROR_FORMATE: format error - \arg CAN_ERROR_ACK: ACK error - \arg CAN_ERROR_BITRECESSIVE: bit recessive - \arg CAN_ERROR_BITDOMINANTER: bit dominant error - \arg CAN_ERROR_CRC: CRC error - \arg CAN_ERROR_SOFTWARECFG: software configure -*/ -can_error_enum can_error_get(uint32_t can_periph) -{ - can_error_enum error; - error = CAN_ERROR_NONE; - - /* get error type */ - error = (can_error_enum)(GET_ERR_ERRN(CAN_ERR(can_periph))); - return error; -} - -/*! - \brief get CAN receive error number - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[out] none - \retval error number -*/ -uint8_t can_receive_error_number_get(uint32_t can_periph) -{ - uint8_t val; - - /* get error count */ - val = (uint8_t)(GET_ERR_RECNT(CAN_ERR(can_periph))); - return val; -} - -/*! - \brief get CAN transmit error number - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[out] none - \retval error number -*/ -uint8_t can_transmit_error_number_get(uint32_t can_periph) -{ - uint8_t val; - - val = (uint8_t)(GET_ERR_TECNT(CAN_ERR(can_periph))); - return val; -} - -/*! - \brief enable CAN interrupt - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] interrupt - one or more parameters can be selected which are shown as below: - \arg CAN_INT_TME: transmit mailbox empty interrupt enable - \arg CAN_INT_RFNE0: receive FIFO0 not empty interrupt enable - \arg CAN_INT_RFF0: receive FIFO0 full interrupt enable - \arg CAN_INT_RFO0: receive FIFO0 overfull interrupt enable - \arg CAN_INT_RFNE1: receive FIFO1 not empty interrupt enable - \arg CAN_INT_RFF1: receive FIFO1 full interrupt enable - \arg CAN_INT_RFO1: receive FIFO1 overfull interrupt enable - \arg CAN_INT_WERR: warning error interrupt enable - \arg CAN_INT_PERR: passive error interrupt enable - \arg CAN_INT_BO: bus-off interrupt enable - \arg CAN_INT_ERRN: error number interrupt enable - \arg CAN_INT_ERR: error interrupt enable - \arg CAN_INT_WU: wakeup interrupt enable - \arg CAN_INT_SLPW: sleep working interrupt enable - \param[out] none - \retval none -*/ -void can_interrupt_enable(uint32_t can_periph, uint32_t interrupt) -{ - CAN_INTEN(can_periph) |= interrupt; -} - -/*! - \brief disable CAN interrupt - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] interrupt - one or more parameters can be selected which are shown as below: - \arg CAN_INT_TME: transmit mailbox empty interrupt enable - \arg CAN_INT_RFNE0: receive FIFO0 not empty interrupt enable - \arg CAN_INT_RFF0: receive FIFO0 full interrupt enable - \arg CAN_INT_RFO0: receive FIFO0 overfull interrupt enable - \arg CAN_INT_RFNE1: receive FIFO1 not empty interrupt enable - \arg CAN_INT_RFF1: receive FIFO1 full interrupt enable - \arg CAN_INT_RFO1: receive FIFO1 overfull interrupt enable - \arg CAN_INT_WERR: warning error interrupt enable - \arg CAN_INT_PERR: passive error interrupt enable - \arg CAN_INT_BO: bus-off interrupt enable - \arg CAN_INT_ERRN: error number interrupt enable - \arg CAN_INT_ERR: error interrupt enable - \arg CAN_INT_WU: wakeup interrupt enable - \arg CAN_INT_SLPW: sleep working interrupt enable - \param[out] none - \retval none -*/ -void can_interrupt_disable(uint32_t can_periph, uint32_t interrupt) -{ - CAN_INTEN(can_periph) &= ~interrupt; -} - -/*! - \brief get CAN flag state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] flag: CAN flags, refer to can_flag_enum - only one parameter can be selected which is shown as below: - \arg CAN_FLAG_RXL: RX level - \arg CAN_FLAG_LASTRX: last sample value of RX pin - \arg CAN_FLAG_RS: receiving state - \arg CAN_FLAG_TS: transmitting state - \arg CAN_FLAG_SLPIF: status change flag of entering sleep working mode - \arg CAN_FLAG_WUIF: status change flag of wakeup from sleep working mode - \arg CAN_FLAG_ERRIF: error flag - \arg CAN_FLAG_SLPWS: sleep working state - \arg CAN_FLAG_IWS: initial working state - \arg CAN_FLAG_TMLS2: transmit mailbox 2 last sending in Tx FIFO - \arg CAN_FLAG_TMLS1: transmit mailbox 1 last sending in Tx FIFO - \arg CAN_FLAG_TMLS0: transmit mailbox 0 last sending in Tx FIFO - \arg CAN_FLAG_TME2: transmit mailbox 2 empty - \arg CAN_FLAG_TME1: transmit mailbox 1 empty - \arg CAN_FLAG_TME0: transmit mailbox 0 empty - \arg CAN_FLAG_MTE2: mailbox 2 transmit error - \arg CAN_FLAG_MTE1: mailbox 1 transmit error - \arg CAN_FLAG_MTE0: mailbox 0 transmit error - \arg CAN_FLAG_MAL2: mailbox 2 arbitration lost - \arg CAN_FLAG_MAL1: mailbox 1 arbitration lost - \arg CAN_FLAG_MAL0: mailbox 0 arbitration lost - \arg CAN_FLAG_MTFNERR2: mailbox 2 transmit finished with no error - \arg CAN_FLAG_MTFNERR1: mailbox 1 transmit finished with no error - \arg CAN_FLAG_MTFNERR0: mailbox 0 transmit finished with no error - \arg CAN_FLAG_MTF2: mailbox 2 transmit finished - \arg CAN_FLAG_MTF1: mailbox 1 transmit finished - \arg CAN_FLAG_MTF0: mailbox 0 transmit finished - \arg CAN_FLAG_RFO0: receive FIFO0 overfull - \arg CAN_FLAG_RFF0: receive FIFO0 full - \arg CAN_FLAG_RFO1: receive FIFO1 overfull - \arg CAN_FLAG_RFF1: receive FIFO1 full - \arg CAN_FLAG_BOERR: bus-off error - \arg CAN_FLAG_PERR: passive error - \arg CAN_FLAG_WERR: warning error - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus can_flag_get(uint32_t can_periph, can_flag_enum flag) -{ - /* get flag and interrupt enable state */ - if(RESET != (CAN_REG_VAL(can_periph, flag) & BIT(CAN_BIT_POS(flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear CAN flag state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] flag: CAN flags, refer to can_flag_enum - only one parameter can be selected which is shown as below: - \arg CAN_FLAG_SLPIF: status change flag of entering sleep working mode - \arg CAN_FLAG_WUIF: status change flag of wakeup from sleep working mode - \arg CAN_FLAG_ERRIF: error flag - \arg CAN_FLAG_MTE2: mailbox 2 transmit error - \arg CAN_FLAG_MTE1: mailbox 1 transmit error - \arg CAN_FLAG_MTE0: mailbox 0 transmit error - \arg CAN_FLAG_MAL2: mailbox 2 arbitration lost - \arg CAN_FLAG_MAL1: mailbox 1 arbitration lost - \arg CAN_FLAG_MAL0: mailbox 0 arbitration lost - \arg CAN_FLAG_MTFNERR2: mailbox 2 transmit finished with no error - \arg CAN_FLAG_MTFNERR1: mailbox 1 transmit finished with no error - \arg CAN_FLAG_MTFNERR0: mailbox 0 transmit finished with no error - \arg CAN_FLAG_MTF2: mailbox 2 transmit finished - \arg CAN_FLAG_MTF1: mailbox 1 transmit finished - \arg CAN_FLAG_MTF0: mailbox 0 transmit finished - \arg CAN_FLAG_RFO0: receive FIFO0 overfull - \arg CAN_FLAG_RFF0: receive FIFO0 full - \arg CAN_FLAG_RFO1: receive FIFO1 overfull - \arg CAN_FLAG_RFF1: receive FIFO1 full - \param[out] none - \retval none -*/ -void can_flag_clear(uint32_t can_periph, can_flag_enum flag) -{ - CAN_REG_VAL(can_periph, flag) = BIT(CAN_BIT_POS(flag)); -} - -/*! - \brief get CAN interrupt flag state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] flag: CAN interrupt flags, refer to can_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg CAN_INT_FLAG_SLPIF: status change interrupt flag of sleep working mode entering - \arg CAN_INT_FLAG_WUIF: status change interrupt flag of wakeup from sleep working mode - \arg CAN_INT_FLAG_ERRIF: error interrupt flag - \arg CAN_INT_FLAG_MTF2: mailbox 2 transmit finished interrupt flag - \arg CAN_INT_FLAG_MTF1: mailbox 1 transmit finished interrupt flag - \arg CAN_INT_FLAG_MTF0: mailbox 0 transmit finished interrupt flag - \arg CAN_INT_FLAG_RFO0: receive FIFO0 overfull interrupt flag - \arg CAN_INT_FLAG_RFF0: receive FIFO0 full interrupt flag - \arg CAN_INT_FLAG_RFL0: receive FIFO0 not empty interrupt flag - \arg CAN_INT_FLAG_RFO1: receive FIFO1 overfull interrupt flag - \arg CAN_INT_FLAG_RFF1: receive FIFO1 full interrupt flag - \arg CAN_INT_FLAG_RFL1: receive FIFO1 not empty interrupt flag - \arg CAN_INT_FLAG_ERRN: error number interrupt flag - \arg CAN_INT_FLAG_BOERR: bus-off error interrupt flag - \arg CAN_INT_FLAG_PERR: passive error interrupt flag - \arg CAN_INT_FLAG_WERR: warning error interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus can_interrupt_flag_get(uint32_t can_periph, can_interrupt_flag_enum flag) -{ - uint32_t ret1 = RESET; - uint32_t ret2 = RESET; - - /* get the staus of interrupt flag */ - if (flag == CAN_INT_FLAG_RFF0) { - ret1 = can_receive_message_length_get(can_periph, CAN_FIFO0); - } else if (flag == CAN_INT_FLAG_RFF1) { - ret1 = can_receive_message_length_get(can_periph, CAN_FIFO1); - } else if (flag == CAN_INT_FLAG_ERRN) { - ret1 = can_error_get(can_periph); - } else { - ret1 = CAN_REG_VALS(can_periph, flag) & BIT(CAN_BIT_POS0(flag)); - } - /* get the staus of interrupt enale bit */ - ret2 = CAN_INTEN(can_periph) & BIT(CAN_BIT_POS1(flag)); - if(ret1 && ret2){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear CAN interrupt flag state - \param[in] can_periph - \arg CANx(x=0,1),the CAN1 only for GD32F30X_CL - \param[in] flag: CAN interrupt flags, refer to can_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg CAN_INT_FLAG_SLPIF: status change interrupt flag of sleep working mode entering - \arg CAN_INT_FLAG_WUIF: status change interrupt flag of wakeup from sleep working mode - \arg CAN_INT_FLAG_ERRIF: error interrupt flag - \arg CAN_INT_FLAG_MTF2: mailbox 2 transmit finished interrupt flag - \arg CAN_INT_FLAG_MTF1: mailbox 1 transmit finished interrupt flag - \arg CAN_INT_FLAG_MTF0: mailbox 0 transmit finished interrupt flag - \arg CAN_INT_FLAG_RFO0: receive FIFO0 overfull interrupt flag - \arg CAN_INT_FLAG_RFF0: receive FIFO0 full interrupt flag - \arg CAN_INT_FLAG_RFO1: receive FIFO1 overfull interrupt flag - \arg CAN_INT_FLAG_RFF1: receive FIFO1 full interrupt flag - \param[out] none - \retval none -*/ -void can_interrupt_flag_clear(uint32_t can_periph, can_interrupt_flag_enum flag) -{ - CAN_REG_VALS(can_periph, flag) = BIT(CAN_BIT_POS0(flag)); -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_crc.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_crc.c deleted file mode 100644 index 1072748..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_crc.c +++ /dev/null @@ -1,130 +0,0 @@ -/*! - \file gd32f30x_crc.c - \brief CRC driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_crc.h" - -#define CRC_DATA_RESET_VALUE ((uint32_t)0xFFFFFFFFU) -#define CRC_FDATA_RESET_VALUE ((uint32_t)0x00000000U) - -/*! - \brief deinit CRC calculation unit - \param[in] none - \param[out] none - \retval none -*/ -void crc_deinit(void) -{ - CRC_DATA = CRC_DATA_RESET_VALUE; - CRC_FDATA = CRC_FDATA_RESET_VALUE; - CRC_CTL = (uint32_t)CRC_CTL_RST; -} - -/*! - \brief reset data register(CRC_DATA) to the value of 0xFFFFFFFF - \param[in] none - \param[out] none - \retval none -*/ -void crc_data_register_reset(void) -{ - CRC_CTL |= (uint32_t)CRC_CTL_RST; -} - -/*! - \brief read the value of the data register - \param[in] none - \param[out] none - \retval 32-bit value of the data register -*/ -uint32_t crc_data_register_read(void) -{ - uint32_t data; - data = CRC_DATA; - return (data); -} - -/*! - \brief read the value of the free data register - \param[in] none - \param[out] none - \retval 8-bit value of the free data register -*/ -uint8_t crc_free_data_register_read(void) -{ - uint8_t fdata; - fdata = (uint8_t)CRC_FDATA; - return (fdata); -} - -/*! - \brief write data to the free data register - \param[in] free_data: specified 8-bit data - \param[out] none - \retval none -*/ -void crc_free_data_register_write(uint8_t free_data) -{ - CRC_FDATA = (uint32_t)free_data; -} - -/*! - \brief calculate the CRC value of a 32-bit data - \param[in] sdata: specified 32-bit data - \param[out] none - \retval 32-bit value calculated by CRC -*/ -uint32_t crc_single_data_calculate(uint32_t sdata) -{ - CRC_DATA = sdata; - return (CRC_DATA); -} - -/*! - \brief calculate the CRC value of an array of 32-bit values - \param[in] array: pointer to an array of 32-bit values - \param[in] size: size of the array - \param[out] none - \retval 32-bit value calculated by CRC -*/ -uint32_t crc_block_data_calculate(const uint32_t *array, uint32_t size) -{ - uint32_t index; - for(index = 0U; index < size; index++){ - CRC_DATA = *(array+index); - } - return (CRC_DATA); -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_ctc.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_ctc.c deleted file mode 100644 index 038429a..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_ctc.c +++ /dev/null @@ -1,393 +0,0 @@ -/*! - \file gd32f30x_ctc.c - \brief CTC driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_ctc.h" - -#define CTC_FLAG_MASK ((uint32_t)0x00000700U) - -/* CTC register bit offset */ -#define CTC_TRIMVALUE_OFFSET ((uint32_t)8U) -#define CTC_TRIM_VALUE_OFFSET ((uint32_t)8U) -#define CTC_REFCAP_OFFSET ((uint32_t)16U) -#define CTC_LIMIT_VALUE_OFFSET ((uint32_t)16U) - -/*! - \brief reset CTC clock trim controller - \param[in] none - \param[out] none - \retval none -*/ -void ctc_deinit(void) -{ - /* reset CTC */ - rcu_periph_reset_enable(RCU_CTCRST); - rcu_periph_reset_disable(RCU_CTCRST); -} - - - -/*! - \brief enable CTC trim counter - \param[in] none - \param[out] none - \retval none -*/ -void ctc_counter_enable(void) -{ - CTC_CTL0 |= (uint32_t)CTC_CTL0_CNTEN; -} - -/*! - \brief disable CTC trim counter - \param[in] none - \param[out] none - \retval none -*/ -void ctc_counter_disable(void) -{ - CTC_CTL0 &= (uint32_t)(~CTC_CTL0_CNTEN); -} - -/*! - \brief configure the IRC48M trim value - \param[in] ctc_trim_value: 8-bit IRC48M trim value - \arg 0x00 - 0x3F - \param[out] none - \retval none -*/ -void ctc_irc48m_trim_value_config(uint8_t trim_value) -{ - /* clear TRIMVALUE bits */ - CTC_CTL0 &= (~(uint32_t)CTC_CTL0_TRIMVALUE); - /* set TRIMVALUE bits */ - CTC_CTL0 |= ((uint32_t)trim_value << CTC_TRIM_VALUE_OFFSET); -} - -/*! - \brief generate software reference source sync pulse - \param[in] none - \param[out] none - \retval none -*/ -void ctc_software_refsource_pulse_generate(void) -{ - CTC_CTL0 |= (uint32_t)CTC_CTL0_SWREFPUL; -} - -/*! - \brief configure hardware automatically trim mode - \param[in] hardmode: - only one parameter can be selected which is shown as below: - \arg CTC_HARDWARE_TRIM_MODE_ENABLE: hardware automatically trim mode enable - \arg CTC_HARDWARE_TRIM_MODE_DISABLE: hardware automatically trim mode disable - \param[out] none - \retval none -*/ -void ctc_hardware_trim_mode_config(uint32_t hardmode) -{ - CTC_CTL0 &= (uint32_t)(~CTC_CTL0_AUTOTRIM); - CTC_CTL0 |= (uint32_t)hardmode; -} -/*! - \brief configure reference signal source polarity - \param[in] polarity: - only one parameter can be selected which is shown as below: - \arg CTC_REFSOURCE_POLARITY_FALLING: reference signal source polarity is falling edge - \arg CTC_REFSOURCE_POLARITY_RISING: reference signal source polarity is rising edge - \param[out] none - \retval none -*/ -void ctc_refsource_polarity_config(uint32_t polarity) -{ - CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFPOL); - CTC_CTL1 |= (uint32_t)polarity; -} - -/*! - \brief select reference signal source - \param[in] refs: - only one parameter can be selected which is shown as below: - \arg CTC_REFSOURCE_GPIO: GPIO is selected - \arg CTC_REFSOURCE_LXTAL: LXTAL is selected - \arg CTC_REFSOURCE_USBSOF: USBD_SOF or USBFS_SOF is selected - \param[out] none - \retval none -*/ -void ctc_refsource_signal_select(uint32_t refs) -{ - CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFSEL); - CTC_CTL1 |= (uint32_t)refs; -} - -/*! - \brief configure reference signal source prescaler - \param[in] prescaler: - only one parameter can be selected which is shown as below: - \arg CTC_REFSOURCE_PSC_OFF: reference signal not divided - \arg CTC_REFSOURCE_PSC_DIV2: reference signal divided by 2 - \arg CTC_REFSOURCE_PSC_DIV4: reference signal divided by 4 - \arg CTC_REFSOURCE_PSC_DIV8: reference signal divided by 8 - \arg CTC_REFSOURCE_PSC_DIV16: reference signal divided by 16 - \arg CTC_REFSOURCE_PSC_DIV32: reference signal divided by 32 - \arg CTC_REFSOURCE_PSC_DIV64: reference signal divided by 64 - \arg CTC_REFSOURCE_PSC_DIV128: reference signal divided by 128 - \param[out] none - \retval none -*/ -void ctc_refsource_prescaler_config(uint32_t prescaler) -{ - CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFPSC); - CTC_CTL1 |= (uint32_t)prescaler; -} - -/*! - \brief configure clock trim base limit value - \param[in] limit_value: 8-bit clock trim base limit value - \arg 0x00 - 0xFF - \param[out] none - \retval none -*/ -void ctc_clock_limit_value_config(uint8_t limit_value) -{ - CTC_CTL1 &= (uint32_t)(~CTC_CTL1_CKLIM); - CTC_CTL1 |= (uint32_t)((uint32_t)limit_value << CTC_LIMIT_VALUE_OFFSET); -} - -/*! - \brief configure CTC counter reload value - \param[in] reload_value: 16-bit CTC counter reload value - \arg 0x0000 - 0xFFFF - \param[out] none - \retval none -*/ -void ctc_counter_reload_value_config(uint16_t reload_value) -{ - CTC_CTL1 &= (uint32_t)(~CTC_CTL1_RLVALUE); - CTC_CTL1 |= (uint32_t)reload_value; -} - -/*! - \brief read CTC counter capture value when reference sync pulse occurred - \param[in] none - \param[out] none - \retval the 16-bit CTC counter capture value -*/ -uint16_t ctc_counter_capture_value_read(void) -{ - uint16_t capture_value = 0U; - capture_value = (uint16_t)((CTC_STAT & CTC_STAT_REFCAP)>> CTC_REFCAP_OFFSET); - return (capture_value); -} - -/*! - \brief read CTC trim counter direction when reference sync pulse occurred - \param[in] none - \param[out] none - \retval FlagStatus: SET or RESET - \arg SET: CTC trim counter direction is down-counting - \arg RESET: CTC trim counter direction is up-counting -*/ -FlagStatus ctc_counter_direction_read(void) -{ - if(RESET != (CTC_STAT & CTC_STAT_REFDIR)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief read CTC counter reload value - \param[in] none - \param[out] none - \retval the 16-bit CTC counter reload value -*/ -uint16_t ctc_counter_reload_value_read(void) -{ - uint16_t reload_value = 0U; - reload_value = (uint16_t)(CTC_CTL1 & CTC_CTL1_RLVALUE); - return (reload_value); -} - -/*! - \brief read the IRC48M trim value - \param[in] none - \param[out] none - \retval the 8-bit IRC48M trim value -*/ -uint8_t ctc_irc48m_trim_value_read(void) -{ - uint8_t trim_value = 0U; - trim_value = (uint8_t)((CTC_CTL0 & CTC_CTL0_TRIMVALUE) >> CTC_TRIMVALUE_OFFSET); - return (trim_value); -} - -/*! - \brief enable the CTC interrupt - \param[in] interrupt: CTC interrupt enable - one or more parameters can be selected which are shown as below: - \arg CTC_INT_CKOK: clock trim OK interrupt enable - \arg CTC_INT_CKWARN: clock trim warning interrupt enable - \arg CTC_INT_ERR: error interrupt enable - \arg CTC_INT_EREF: expect reference interrupt enable - \param[out] none - \retval none -*/ -void ctc_interrupt_enable(uint32_t interrupt) -{ - CTC_CTL0 |= (uint32_t)interrupt; -} - -/*! - \brief disable the CTC interrupt - \param[in] interrupt: CTC interrupt enable source - one or more parameters can be selected which are shown as below: - \arg CTC_INT_CKOK: clock trim OK interrupt enable - \arg CTC_INT_CKWARN: clock trim warning interrupt enable - \arg CTC_INT_ERR: error interrupt enable - \arg CTC_INT_EREF: expect reference interrupt enable - \param[out] none - \retval none -*/ -void ctc_interrupt_disable(uint32_t interrupt) -{ - CTC_CTL0 &= (uint32_t)(~interrupt); -} - -/*! - \brief get CTC interrupt flag - \param[in] int_flag: the CTC interrupt flag - only one parameter can be selected which is shown as below: - \arg CTC_INT_FLAG_CKOK: clock trim OK interrupt - \arg CTC_INT_FLAG_CKWARN: clock trim warning interrupt - \arg CTC_INT_FLAG_ERR: error interrupt - \arg CTC_INT_FLAG_EREF: expect reference interrupt - \arg CTC_INT_FLAG_CKERR: clock trim error bit interrupt - \arg CTC_INT_FLAG_REFMISS: reference sync pulse miss interrupt - \arg CTC_INT_FLAG_TRIMERR: trim value error interrupt - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus ctc_interrupt_flag_get(uint32_t int_flag) -{ - uint32_t interrupt_flag = 0U, intenable = 0U; - - /* check whether the interrupt is enabled */ - if(RESET != (int_flag & CTC_FLAG_MASK)){ - intenable = CTC_CTL0 & CTC_CTL0_ERRIE; - }else{ - intenable = CTC_CTL0 & int_flag; - } - - /* get interrupt flag status */ - interrupt_flag = CTC_STAT & int_flag; - - if(interrupt_flag && intenable){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear CTC interrupt flag - \param[in] int_flag: the CTC interrupt flag - only one parameter can be selected which is shown as below: - \arg CTC_INT_FLAG_CKOK: clock trim OK interrupt - \arg CTC_INT_FLAG_CKWARN: clock trim warning interrupt - \arg CTC_INT_FLAG_ERR: error interrupt - \arg CTC_INT_FLAG_EREF: expect reference interrupt - \arg CTC_INT_FLAG_CKERR: clock trim error bit interrupt - \arg CTC_INT_FLAG_REFMISS: reference sync pulse miss interrupt - \arg CTC_INT_FLAG_TRIMERR: trim value error interrupt - \param[out] none - \retval none -*/ -void ctc_interrupt_flag_clear(uint32_t int_flag) -{ - if(RESET != (int_flag & CTC_FLAG_MASK)){ - CTC_INTC |= CTC_INTC_ERRIC; - }else{ - CTC_INTC |= int_flag; - } -} - -/*! - \brief get CTC flag - \param[in] flag: the CTC flag - only one parameter can be selected which is shown as below: - \arg CTC_FLAG_CKOK: clock trim OK flag - \arg CTC_FLAG_CKWARN: clock trim warning flag - \arg CTC_FLAG_ERR: error flag - \arg CTC_FLAG_EREF: expect reference flag - \arg CTC_FLAG_CKERR: clock trim error bit - \arg CTC_FLAG_REFMISS: reference sync pulse miss - \arg CTC_FLAG_TRIMERR: trim value error bit - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus ctc_flag_get(uint32_t flag) -{ - if(RESET != (CTC_STAT & flag)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear CTC flag - \param[in] flag: the CTC flag - only one parameter can be selected which is shown as below: - \arg CTC_FLAG_CKOK: clock trim OK flag - \arg CTC_FLAG_CKWARN: clock trim warning flag - \arg CTC_FLAG_ERR: error flag - \arg CTC_FLAG_EREF: expect reference flag - \arg CTC_FLAG_CKERR: clock trim error bit - \arg CTC_FLAG_REFMISS: reference sync pulse miss - \arg CTC_FLAG_TRIMERR: trim value error bit - \param[out] none - \retval none -*/ -void ctc_flag_clear(uint32_t flag) -{ - if(RESET != (flag & CTC_FLAG_MASK)){ - CTC_INTC |= CTC_INTC_ERRIC; - }else{ - CTC_INTC |= flag; - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dac.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dac.c deleted file mode 100644 index 0a8c6df..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dac.c +++ /dev/null @@ -1,541 +0,0 @@ -/*! - \file gd32f30x_dac.c - \brief DAC driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_dac.h" - -/* DAC register bit offset */ -#define DAC1_REG_OFFSET ((uint32_t)16U) -#define DH_12BIT_OFFSET ((uint32_t)16U) -#define DH_8BIT_OFFSET ((uint32_t)8U) - -/*! - \brief deinitialize DAC - \param[in] none - \param[out] none - \retval none -*/ -void dac_deinit(void) -{ - rcu_periph_reset_enable(RCU_DACRST); - rcu_periph_reset_disable(RCU_DACRST); -} - -/*! - \brief enable DAC - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval none -*/ -void dac_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL |= DAC_CTL_DEN0; - }else{ - DAC_CTL |= DAC_CTL_DEN1; - } -} - -/*! - \brief disable DAC - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval none -*/ -void dac_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL &= ~DAC_CTL_DEN0; - }else{ - DAC_CTL &= ~DAC_CTL_DEN1; - } -} - -/*! - \brief enable DAC DMA function - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval none -*/ -void dac_dma_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL |= DAC_CTL_DDMAEN0; - }else{ - DAC_CTL |= DAC_CTL_DDMAEN1; - } -} - -/*! - \brief disable DAC DMA function - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval none -*/ -void dac_dma_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL &= ~DAC_CTL_DDMAEN0; - }else{ - DAC_CTL &= ~DAC_CTL_DDMAEN1; - } -} - -/*! - \brief enable DAC output buffer - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval none -*/ -void dac_output_buffer_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL &= ~DAC_CTL_DBOFF0; - }else{ - DAC_CTL &= ~DAC_CTL_DBOFF1; - } -} - -/*! - \brief disable DAC output buffer - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval none -*/ -void dac_output_buffer_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL |= DAC_CTL_DBOFF0; - }else{ - DAC_CTL |= DAC_CTL_DBOFF1; - } -} - -/*! - \brief get DAC output value - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval DAC output data -*/ -uint16_t dac_output_value_get(uint32_t dac_periph) -{ - uint16_t data = 0U; - if(DAC0 == dac_periph){ - /* store the DAC0 output value */ - data = (uint16_t)DAC0_DO; - }else{ - /* store the DAC1 output value */ - data = (uint16_t)DAC1_DO; - } - return data; -} - -/*! - \brief set the DAC specified data holding register value - \param[in] dac_periph: DACx(x = 0,1) - \param[in] dac_align: data alignment - only one parameter can be selected which is shown as below: - \arg DAC_ALIGN_8B_R: data right 8 bit alignment - \arg DAC_ALIGN_12B_R: data right 12 bit alignment - \arg DAC_ALIGN_12B_L: data left 12 bit alignment - \param[in] data: data to be loaded - \param[out] none - \retval none -*/ -void dac_data_set(uint32_t dac_periph, uint32_t dac_align, uint16_t data) -{ - if(DAC0 == dac_periph){ - switch(dac_align){ - /* data right 12 bit alignment */ - case DAC_ALIGN_12B_R: - DAC0_R12DH = data; - break; - /* data left 12 bit alignment */ - case DAC_ALIGN_12B_L: - DAC0_L12DH = data; - break; - /* data right 8 bit alignment */ - case DAC_ALIGN_8B_R: - DAC0_R8DH = data; - break; - default: - break; - } - }else{ - switch(dac_align){ - /* data right 12 bit alignment */ - case DAC_ALIGN_12B_R: - DAC1_R12DH = data; - break; - /* data left 12 bit alignment */ - case DAC_ALIGN_12B_L: - DAC1_L12DH = data; - break; - /* data right 8 bit alignment */ - case DAC_ALIGN_8B_R: - DAC1_R8DH = data; - break; - default: - break; - } - } -} - -/*! - \brief enable DAC trigger - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval none -*/ -void dac_trigger_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL |= DAC_CTL_DTEN0; - }else{ - DAC_CTL |= DAC_CTL_DTEN1; - } -} - -/*! - \brief disable DAC trigger - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval none -*/ -void dac_trigger_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_CTL &= ~DAC_CTL_DTEN0; - }else{ - DAC_CTL &= ~DAC_CTL_DTEN1; - } -} - -/*! - \brief set DAC trigger source - \param[in] dac_periph: DACx(x = 0,1) - \param[in] triggersource: external triggers of DAC - only one parameter can be selected which is shown as below: - \arg DAC_TRIGGER_T1_TRGO: TIMER1 TRGO - \arg DAC_TRIGGER_T2_TRGO: TIMER2 TRGO (for GD32F30X_CL) - \arg DAC_TRIGGER_T3_TRGO: TIMER3 TRGO - \arg DAC_TRIGGER_T4_TRGO: TIMER4 TRGO - \arg DAC_TRIGGER_T5_TRGO: TIMER5 TRGO - \arg DAC_TRIGGER_T6_TRGO: TIMER6 TRGO - \arg DAC_TRIGGER_T7_TRGO: TIMER7 TRGO (for GD32F30X_HD and GD32F30X_XD) - \arg DAC_TRIGGER_EXTI_9: EXTI interrupt line9 event - \arg DAC_TRIGGER_SOFTWARE: software trigger - \param[out] none - \retval none -*/ -void dac_trigger_source_config(uint32_t dac_periph,uint32_t triggersource) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 trigger source */ - DAC_CTL &= ~DAC_CTL_DTSEL0; - DAC_CTL |= triggersource; - }else{ - /* configure DAC1 trigger source */ - DAC_CTL &= ~DAC_CTL_DTSEL1; - DAC_CTL |= (triggersource << DAC1_REG_OFFSET); - } -} - -/*! - \brief enable DAC software trigger - \param[in] dac_periph: DACx(x = 0,1) - \retval none -*/ -void dac_software_trigger_enable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_SWT |= DAC_SWT_SWTR0; - }else{ - DAC_SWT |= DAC_SWT_SWTR1; - } -} - -/*! - \brief disable DAC software trigger - \param[in] dac_periph: DACx(x = 0,1) - \param[out] none - \retval none -*/ -void dac_software_trigger_disable(uint32_t dac_periph) -{ - if(DAC0 == dac_periph){ - DAC_SWT &= ~DAC_SWT_SWTR0; - }else{ - DAC_SWT &= ~DAC_SWT_SWTR1; - } -} - -/*! - \brief configure DAC wave mode - \param[in] dac_periph: DACx(x = 0,1) - \param[in] wave_mode: noise wave mode - only one parameter can be selected which is shown as below: - \arg DAC_WAVE_DISABLE: wave disable - \arg DAC_WAVE_MODE_LFSR: LFSR noise mode - \arg DAC_WAVE_MODE_TRIANGLE: triangle noise mode - \param[out] none - \retval none -*/ -void dac_wave_mode_config(uint32_t dac_periph, uint32_t wave_mode) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 wave mode */ - DAC_CTL &= ~DAC_CTL_DWM0; - DAC_CTL |= wave_mode; - }else{ - /* configure DAC1 wave mode */ - DAC_CTL &= ~DAC_CTL_DWM1; - DAC_CTL |= (wave_mode << DAC1_REG_OFFSET); - } -} - -/*! - \brief configure DAC wave bit width - \param[in] dac_periph: DACx(x = 0,1) - \param[in] bit_width: noise wave bit width - only one parameter can be selected which is shown as below: - \arg DAC_WAVE_BIT_WIDTH_1: bit width of the wave signal is 1 - \arg DAC_WAVE_BIT_WIDTH_2: bit width of the wave signal is 2 - \arg DAC_WAVE_BIT_WIDTH_3: bit width of the wave signal is 3 - \arg DAC_WAVE_BIT_WIDTH_4: bit width of the wave signal is 4 - \arg DAC_WAVE_BIT_WIDTH_5: bit width of the wave signal is 5 - \arg DAC_WAVE_BIT_WIDTH_6: bit width of the wave signal is 6 - \arg DAC_WAVE_BIT_WIDTH_7: bit width of the wave signal is 7 - \arg DAC_WAVE_BIT_WIDTH_8: bit width of the wave signal is 8 - \arg DAC_WAVE_BIT_WIDTH_9: bit width of the wave signal is 9 - \arg DAC_WAVE_BIT_WIDTH_10: bit width of the wave signal is 10 - \arg DAC_WAVE_BIT_WIDTH_11: bit width of the wave signal is 11 - \arg DAC_WAVE_BIT_WIDTH_12: bit width of the wave signal is 12 - \param[out] none - \retval none -*/ -void dac_wave_bit_width_config(uint32_t dac_periph, uint32_t bit_width) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 wave bit width */ - DAC_CTL &= ~DAC_CTL_DWBW0; - DAC_CTL |= bit_width; - }else{ - /* configure DAC1 wave bit width */ - DAC_CTL &= ~DAC_CTL_DWBW1; - DAC_CTL |= (bit_width << DAC1_REG_OFFSET); - } -} - -/*! - \brief configure DAC LFSR noise mode - \param[in] dac_periph: DACx(x = 0,1) - \param[in] unmask_bits: unmask LFSR bits in DAC LFSR noise mode - only one parameter can be selected which is shown as below: - \arg DAC_LFSR_BIT0: unmask the LFSR bit0 - \arg DAC_LFSR_BITS1_0: unmask the LFSR bits[1:0] - \arg DAC_LFSR_BITS2_0: unmask the LFSR bits[2:0] - \arg DAC_LFSR_BITS3_0: unmask the LFSR bits[3:0] - \arg DAC_LFSR_BITS4_0: unmask the LFSR bits[4:0] - \arg DAC_LFSR_BITS5_0: unmask the LFSR bits[5:0] - \arg DAC_LFSR_BITS6_0: unmask the LFSR bits[6:0] - \arg DAC_LFSR_BITS7_0: unmask the LFSR bits[7:0] - \arg DAC_LFSR_BITS8_0: unmask the LFSR bits[8:0] - \arg DAC_LFSR_BITS9_0: unmask the LFSR bits[9:0] - \arg DAC_LFSR_BITS10_0: unmask the LFSR bits[10:0] - \arg DAC_LFSR_BITS11_0: unmask the LFSR bits[11:0] - \param[out] none - \retval none -*/ -void dac_lfsr_noise_config(uint32_t dac_periph, uint32_t unmask_bits) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 LFSR noise mode */ - DAC_CTL &= ~DAC_CTL_DWBW0; - DAC_CTL |= unmask_bits; - }else{ - /* configure DAC1 LFSR noise mode */ - DAC_CTL &= ~DAC_CTL_DWBW1; - DAC_CTL |= (unmask_bits << DAC1_REG_OFFSET); - } -} - -/*! - \brief configure DAC triangle noise mode - \param[in] dac_periph: DACx(x = 0,1) - \param[in] amplitude: triangle amplitude in DAC triangle noise mode - only one parameter can be selected which is shown as below: - \arg DAC_TRIANGLE_AMPLITUDE_1: triangle amplitude is 1 - \arg DAC_TRIANGLE_AMPLITUDE_3: triangle amplitude is 3 - \arg DAC_TRIANGLE_AMPLITUDE_7: triangle amplitude is 7 - \arg DAC_TRIANGLE_AMPLITUDE_15: triangle amplitude is 15 - \arg DAC_TRIANGLE_AMPLITUDE_31: triangle amplitude is 31 - \arg DAC_TRIANGLE_AMPLITUDE_63: triangle amplitude is 63 - \arg DAC_TRIANGLE_AMPLITUDE_127: triangle amplitude is 127 - \arg DAC_TRIANGLE_AMPLITUDE_255: triangle amplitude is 255 - \arg DAC_TRIANGLE_AMPLITUDE_511: triangle amplitude is 511 - \arg DAC_TRIANGLE_AMPLITUDE_1023: triangle amplitude is 1023 - \arg DAC_TRIANGLE_AMPLITUDE_2047: triangle amplitude is 2047 - \arg DAC_TRIANGLE_AMPLITUDE_4095: triangle amplitude is 4095 - \param[out] none - \retval none -*/ -void dac_triangle_noise_config(uint32_t dac_periph, uint32_t amplitude) -{ - if(DAC0 == dac_periph){ - /* configure DAC0 triangle noise mode */ - DAC_CTL &= ~DAC_CTL_DWBW0; - DAC_CTL |= amplitude; - }else{ - /* configure DAC1 triangle noise mode */ - DAC_CTL &= ~DAC_CTL_DWBW1; - DAC_CTL |= (amplitude << DAC1_REG_OFFSET); - } -} - -/*! - \brief enable DAC concurrent mode - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_enable(void) -{ - uint32_t ctl = 0U; - ctl = DAC_CTL_DEN0 | DAC_CTL_DEN1; - DAC_CTL |= (ctl); -} - -/*! - \brief disable DAC concurrent mode - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_disable(void) -{ - uint32_t ctl = 0U; - ctl = DAC_CTL_DEN0 | DAC_CTL_DEN1; - DAC_CTL &= (~ctl); -} - -/*! - \brief enable DAC concurrent software trigger function - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_software_trigger_enable(void) -{ - uint32_t swt = 0U; - swt = DAC_SWT_SWTR0 | DAC_SWT_SWTR1; - DAC_SWT |= (swt); -} - -/*! - \brief disable DAC concurrent software trigger function - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_software_trigger_disable(void) -{ - uint32_t swt = 0U; - swt = DAC_SWT_SWTR0 | DAC_SWT_SWTR1; - DAC_SWT &= (~swt); -} - -/*! - \brief enable DAC concurrent buffer function - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_output_buffer_enable(void) -{ - uint32_t ctl = 0U; - ctl = DAC_CTL_DBOFF0 | DAC_CTL_DBOFF1; - DAC_CTL &= (~ctl); -} - -/*! - \brief disable DAC concurrent buffer function - \param[in] none - \param[out] none - \retval none -*/ -void dac_concurrent_output_buffer_disable(void) -{ - uint32_t ctl = 0U; - ctl = DAC_CTL_DBOFF0 | DAC_CTL_DBOFF1; - DAC_CTL |= (ctl); -} - -/*! - \brief set DAC concurrent mode data holding register value - \param[in] dac_align: data alignment - only one parameter can be selected which is shown as below: - \arg DAC_ALIGN_8B_R: data right 8b alignment - \arg DAC_ALIGN_12B_R: data right 12b alignment - \arg DAC_ALIGN_12B_L: data left 12b alignment - \param[in] data0: data to be loaded - \param[in] data1: data to be loaded - \param[out] none - \retval none -*/ -void dac_concurrent_data_set(uint32_t dac_align, uint16_t data0, uint16_t data1) -{ - uint32_t data = 0U; - switch(dac_align){ - /* data right 12b alignment */ - case DAC_ALIGN_12B_R: - data = ((uint32_t)data1 << DH_12BIT_OFFSET) | data0; - DACC_R12DH = data; - break; - /* data left 12b alignment */ - case DAC_ALIGN_12B_L: - data = ((uint32_t)data1 << DH_12BIT_OFFSET) | data0; - DACC_L12DH = data; - break; - /* data right 8b alignment */ - case DAC_ALIGN_8B_R: - data = ((uint32_t)data1 << DH_8BIT_OFFSET) | data0; - DACC_R8DH = data; - break; - default: - break; - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dbg.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dbg.c deleted file mode 100644 index b0c4f5a..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dbg.c +++ /dev/null @@ -1,164 +0,0 @@ -/*! - \file gd32f30x_dbg.c - \brief DBG driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_dbg.h" - -#define DBG_RESET_VAL 0x00000000U - -/*! - \brief deinitialize the DBG - \param[in] none - \param[out] none - \retval none -*/ -void dbg_deinit(void) -{ - DBG_CTL0 = DBG_RESET_VAL; -} - -/*! - \brief read DBG_ID code register - \param[in] none - \param[out] none - \retval DBG_ID code -*/ -uint32_t dbg_id_get(void) -{ - return DBG_ID; -} - -/*! - \brief enable low power behavior when the mcu is in debug mode - \param[in] dbg_low_power: - this parameter can be any combination of the following values: - \arg DBG_LOW_POWER_SLEEP: keep debugger connection during sleep mode - \arg DBG_LOW_POWER_DEEPSLEEP: keep debugger connection during deepsleep mode - \arg DBG_LOW_POWER_STANDBY: keep debugger connection during standby mode - \param[out] none - \retval none -*/ -void dbg_low_power_enable(uint32_t dbg_low_power) -{ - DBG_CTL0 |= dbg_low_power; -} - -/*! - \brief disable low power behavior when the mcu is in debug mode - \param[in] dbg_low_power: - this parameter can be any combination of the following values: - \arg DBG_LOW_POWER_SLEEP: donot keep debugger connection during sleep mode - \arg DBG_LOW_POWER_DEEPSLEEP: donot keep debugger connection during deepsleep mode - \arg DBG_LOW_POWER_STANDBY: donot keep debugger connection during standby mode - \param[out] none - \retval none -*/ -void dbg_low_power_disable(uint32_t dbg_low_power) -{ - DBG_CTL0 &= ~dbg_low_power; -} - -/*! - \brief enable peripheral behavior when the mcu is in debug mode - \param[in] dbg_periph: refer to dbg_periph_enum - only one parameter can be selected which is shown as below: - \arg DBG_FWDGT_HOLD : debug FWDGT kept when core is halted - \arg DBG_WWDGT_HOLD : debug WWDGT kept when core is halted - \arg DBG_CANx_HOLD (x=0,1,CAN1 is only available for CL series): hold CANx counter when core is halted - \arg DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted - \arg DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are not available for HD series): hold TIMERx counter when core is halted - \param[out] none - \retval none -*/ -void dbg_periph_enable(dbg_periph_enum dbg_periph) -{ - DBG_REG_VAL(dbg_periph) |= BIT(DBG_BIT_POS(dbg_periph)); -} - -/*! - \brief disable peripheral behavior when the mcu is in debug mode - \param[in] dbg_periph: refer to dbg_periph_enum - only one parameter can be selected which is shown as below: - \arg DBG_FWDGT_HOLD : debug FWDGT kept when core is halted - \arg DBG_WWDGT_HOLD : debug WWDGT kept when core is halted - \arg DBG_CANx_HOLD (x=0,1,CAN1 is only available for CL series): hold CAN0 counter when core is halted - \arg DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted - \arg DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are not available for HD series): hold TIMERx counter when core is halted - \param[out] none - \retval none -*/ -void dbg_periph_disable(dbg_periph_enum dbg_periph) -{ - DBG_REG_VAL(dbg_periph) &= ~BIT(DBG_BIT_POS(dbg_periph)); -} - -/*! - \brief enable trace pin assignment - \param[in] none - \param[out] none - \retval none -*/ -void dbg_trace_pin_enable(void) -{ - DBG_CTL0 |= DBG_CTL0_TRACE_IOEN; -} - -/*! - \brief disable trace pin assignment - \param[in] none - \param[out] none - \retval none -*/ -void dbg_trace_pin_disable(void) -{ - DBG_CTL0 &= ~DBG_CTL0_TRACE_IOEN; -} - -/*! - \brief trace pin mode selection - \param[in] trace_mode: - \arg TRACE_MODE_ASYNC: trace pin used for async mode - \arg TRACE_MODE_SYNC_DATASIZE_1: trace pin used for sync mode and data size is 1 - \arg TRACE_MODE_SYNC_DATASIZE_2: trace pin used for sync mode and data size is 2 - \arg TRACE_MODE_SYNC_DATASIZE_4: trace pin used for sync mode and data size is 4 - \param[out] none - \retval none -*/ -void dbg_trace_pin_mode_set(uint32_t trace_mode) -{ - DBG_CTL0 &= ~DBG_CTL0_TRACE_MODE; - DBG_CTL0 |= trace_mode; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dma.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dma.c deleted file mode 100644 index 683e8ea..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_dma.c +++ /dev/null @@ -1,735 +0,0 @@ -/*! - \file gd32f30x_dma.c - \brief DMA driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_dma.h" -#include - -#define DMA_WRONG_HANDLE while(1){} - -/* check whether peripheral matches channels or not */ -static ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx); - -/*! - \brief deinitialize DMA a channel registers - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel is deinitialized - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_deinit(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* disable DMA a channel */ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN; - /* reset DMA channel registers */ - DMA_CHCTL(dma_periph, channelx) = DMA_CHCTL_RESET_VALUE; - DMA_CHCNT(dma_periph, channelx) = DMA_CHCNT_RESET_VALUE; - DMA_CHPADDR(dma_periph, channelx) = DMA_CHPADDR_RESET_VALUE; - DMA_CHMADDR(dma_periph, channelx) = DMA_CHMADDR_RESET_VALUE; - DMA_INTC(dma_periph) |= DMA_FLAG_ADD(DMA_CHINTF_RESET_VALUE, channelx); -} - -/*! - \brief initialize the parameters of DMA struct with the default values - \param[in] init_struct: the initialization data needed to initialize DMA channel - \param[out] none - \retval none -*/ -void dma_struct_para_init(dma_parameter_struct* init_struct) -{ - if(NULL == init_struct){ - DMA_WRONG_HANDLE - } - - /* set the DMA struct with the default values */ - init_struct->periph_addr = 0U; - init_struct->periph_width = 0U; - init_struct->periph_inc = DMA_PERIPH_INCREASE_DISABLE; - init_struct->memory_addr = 0U; - init_struct->memory_width = 0U; - init_struct->memory_inc = DMA_MEMORY_INCREASE_DISABLE; - init_struct->number = 0U; - init_struct->direction = DMA_PERIPHERAL_TO_MEMORY; - init_struct->priority = DMA_PRIORITY_LOW; -} - -/*! - \brief initialize DMA channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel is initialized - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] init_struct: the data needed to initialize DMA channel - periph_addr: peripheral base address - periph_width: DMA_PERIPHERAL_WIDTH_8BIT, DMA_PERIPHERAL_WIDTH_16BIT, DMA_PERIPHERAL_WIDTH_32BIT - periph_inc: DMA_PERIPH_INCREASE_ENABLE, DMA_PERIPH_INCREASE_DISABLE - memory_addr: memory base address - memory_width: DMA_MEMORY_WIDTH_8BIT, DMA_MEMORY_WIDTH_16BIT, DMA_MEMORY_WIDTH_32BIT - memory_inc: DMA_MEMORY_INCREASE_ENABLE, DMA_MEMORY_INCREASE_DISABLE - direction: DMA_PERIPHERAL_TO_MEMORY, DMA_MEMORY_TO_PERIPHERAL - number: the number of remaining data to be transferred by the DMA - priority: DMA_PRIORITY_LOW, DMA_PRIORITY_MEDIUM, DMA_PRIORITY_HIGH, DMA_PRIORITY_ULTRA_HIGH - \param[out] none - \retval none -*/ -void dma_init(uint32_t dma_periph, dma_channel_enum channelx, dma_parameter_struct* init_struct) -{ - uint32_t ctl; - - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* configure peripheral base address */ - DMA_CHPADDR(dma_periph, channelx) = init_struct->periph_addr; - - /* configure memory base address */ - DMA_CHMADDR(dma_periph, channelx) = init_struct->memory_addr; - - /* configure the number of remaining data to be transferred */ - DMA_CHCNT(dma_periph, channelx) = (init_struct->number & DMA_CHANNEL_CNT_MASK); - - /* configure peripheral transfer width,memory transfer width and priority */ - ctl = DMA_CHCTL(dma_periph, channelx); - ctl &= ~(DMA_CHXCTL_PWIDTH | DMA_CHXCTL_MWIDTH | DMA_CHXCTL_PRIO); - ctl |= (init_struct->periph_width | init_struct->memory_width | init_struct->priority); - DMA_CHCTL(dma_periph, channelx) = ctl; - - /* configure peripheral increasing mode */ - if(DMA_PERIPH_INCREASE_ENABLE == init_struct->periph_inc){ - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA; - }else{ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA; - } - - /* configure memory increasing mode */ - if(DMA_MEMORY_INCREASE_ENABLE == init_struct->memory_inc){ - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA; - }else{ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA; - } - - /* configure the direction of data transfer */ - if(DMA_PERIPHERAL_TO_MEMORY == init_struct->direction){ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR; - }else{ - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR; - } -} - -/*! - \brief enable DMA circulation mode - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_circulation_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CMEN; -} - -/*! - \brief disable DMA circulation mode - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_circulation_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CMEN; -} - -/*! - \brief enable memory to memory mode - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_memory_to_memory_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_M2M; -} - -/*! - \brief disable memory to memory mode - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_memory_to_memory_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_M2M; -} - -/*! - \brief enable DMA channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_channel_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CHEN; -} - -/*! - \brief disable DMA channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_channel_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN; -} - -/*! - \brief set DMA peripheral base address - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to set peripheral base address - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] address: peripheral base address - \param[out] none - \retval none -*/ -void dma_periph_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHPADDR(dma_periph, channelx) = address; -} - -/*! - \brief set DMA memory base address - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to set memory base address - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] address: memory base address - \param[out] none - \retval none -*/ -void dma_memory_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHMADDR(dma_periph, channelx) = address; -} - -/*! - \brief set the number of remaining data to be transferred by the DMA - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to set number - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] number: the number of remaining data to be transferred by the DMA - \param[out] none - \retval none -*/ -void dma_transfer_number_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t number) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCNT(dma_periph, channelx) = (number & DMA_CHANNEL_CNT_MASK); -} - -/*! - \brief get the number of remaining data to be transferred by the DMA - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to set number - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval uint32_t: the number of remaining data to be transferred by the DMA -*/ -uint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - return (uint32_t)DMA_CHCNT(dma_periph, channelx); -} - -/*! - \brief configure priority level of DMA channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] priority: priority Level of this channel - only one parameter can be selected which is shown as below: - \arg DMA_PRIORITY_LOW: low priority - \arg DMA_PRIORITY_MEDIUM: medium priority - \arg DMA_PRIORITY_HIGH: high priority - \arg DMA_PRIORITY_ULTRA_HIGH: ultra high priority - \param[out] none - \retval none -*/ -void dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t priority) -{ - uint32_t ctl; - - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* acquire DMA_CHxCTL register */ - ctl = DMA_CHCTL(dma_periph, channelx); - /* assign regiser */ - ctl &= ~DMA_CHXCTL_PRIO; - ctl |= priority; - DMA_CHCTL(dma_periph, channelx) = ctl; -} - -/*! - \brief configure transfer data size of memory - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] mwidth: transfer data width of memory - only one parameter can be selected which is shown as below: - \arg DMA_MEMORY_WIDTH_8BIT: transfer data width of memory is 8-bit - \arg DMA_MEMORY_WIDTH_16BIT: transfer data width of memory is 16-bit - \arg DMA_MEMORY_WIDTH_32BIT: transfer data width of memory is 32-bit - \param[out] none - \retval none -*/ -void dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t mwidth) -{ - uint32_t ctl; - - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* acquire DMA_CHxCTL register */ - ctl = DMA_CHCTL(dma_periph, channelx); - /* assign regiser */ - ctl &= ~DMA_CHXCTL_MWIDTH; - ctl |= mwidth; - DMA_CHCTL(dma_periph, channelx) = ctl; -} - -/*! - \brief configure transfer data size of peripheral - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] pwidth: transfer data width of peripheral - only one parameter can be selected which is shown as below: - \arg DMA_PERIPHERAL_WIDTH_8BIT: transfer data width of peripheral is 8-bit - \arg DMA_PERIPHERAL_WIDTH_16BIT: transfer data width of peripheral is 16-bit - \arg DMA_PERIPHERAL_WIDTH_32BIT: transfer data width of peripheral is 32-bit - \param[out] none - \retval none -*/ -void dma_periph_width_config (uint32_t dma_periph, dma_channel_enum channelx, uint32_t pwidth) -{ - uint32_t ctl; - - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - /* acquire DMA_CHxCTL register */ - ctl = DMA_CHCTL(dma_periph, channelx); - /* assign regiser */ - ctl &= ~DMA_CHXCTL_PWIDTH; - ctl |= pwidth; - DMA_CHCTL(dma_periph, channelx) = ctl; -} - -/*! - \brief enable next address increasement algorithm of memory - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_memory_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA; -} - -/*! - \brief disable next address increasement algorithm of memory - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_memory_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA; -} - -/*! - \brief enable next address increasement algorithm of peripheral - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_periph_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA; -} - -/*! - \brief disable next address increasement algorithm of peripheral - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[out] none - \retval none -*/ -void dma_periph_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA; -} - -/*! - \brief configure the direction of data transfer on the channel - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] direction: specify the direction of data transfer - only one parameter can be selected which is shown as below: - \arg DMA_PERIPHERAL_TO_MEMORY: read from peripheral and write to memory - \arg DMA_MEMORY_TO_PERIPHERAL: read from memory and write to peripheral - \param[out] none - \retval none -*/ -void dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t direction) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - if(DMA_PERIPHERAL_TO_MEMORY == direction){ - DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR; - } else { - DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR; - } -} - -/*! - \brief check DMA flag is set or not - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to get flag - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] flag: specify get which flag - only one parameter can be selected which is shown as below: - \arg DMA_FLAG_G: global interrupt flag of channel - \arg DMA_FLAG_FTF: full transfer finish flag of channel - \arg DMA_FLAG_HTF: half transfer finish flag of channel - \arg DMA_FLAG_ERR: error flag of channel - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) -{ - FlagStatus reval; - - if(RESET != (DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx))){ - reval = SET; - }else{ - reval = RESET; - } - - return reval; -} - -/*! - \brief clear DMA a channel flag - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to clear flag - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] flag: specify get which flag - only one parameter can be selected which is shown as below: - \arg DMA_FLAG_G: global interrupt flag of channel - \arg DMA_FLAG_FTF: full transfer finish flag of channel - \arg DMA_FLAG_HTF: half transfer finish flag of channel - \arg DMA_FLAG_ERR: error flag of channel - \param[out] none - \retval none -*/ -void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) -{ - DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); -} - -/*! - \brief check DMA flag and interrupt enable bit is set or not - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to get flag - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] flag: specify get which flag - only one parameter can be selected which is shown as below: - \arg DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel - \arg DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel - \arg DMA_INT_FLAG_ERR: error interrupt flag of channel - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) -{ - uint32_t interrupt_enable = 0U, interrupt_flag = 0U; - - switch(flag){ - case DMA_INT_FLAG_FTF: - interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); - interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_FTFIE; - break; - case DMA_INT_FLAG_HTF: - interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); - interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_HTFIE; - break; - case DMA_INT_FLAG_ERR: - interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); - interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_ERRIE; - break; - default: - DMA_WRONG_HANDLE - } - - if(interrupt_flag && interrupt_enable){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear DMA a channel flag - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel to clear flag - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] flag: specify get which flag - only one parameter can be selected which is shown as below: - \arg DMA_INT_FLAG_G: global interrupt flag of channel - \arg DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel - \arg DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel - \arg DMA_INT_FLAG_ERR: error interrupt flag of channel - \param[out] none - \retval none -*/ -void dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) -{ - DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); -} - -/*! - \brief enable DMA interrupt - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] source: specify which interrupt to enbale - one or more parameters can be selected which are shown as below - \arg DMA_INT_FTF: channel full transfer finish interrupt - \arg DMA_INT_HTF: channel half transfer finish interrupt - \arg DMA_INT_ERR: channel error interrupt - \param[out] none - \retval none -*/ -void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) |= source; -} - -/*! - \brief disable DMA interrupt - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) - \param[in] source: specify which interrupt to disbale - one or more parameters can be selected which are shown as below - \arg DMA_INT_FTF: channel full transfer finish interrupt - \arg DMA_INT_HTF: channel half transfer finish interrupt - \arg DMA_INT_ERR: channel error interrupt - \param[out] none - \retval none -*/ -void dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) -{ - if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ - DMA_WRONG_HANDLE - } - - DMA_CHCTL(dma_periph, channelx) &= ~source; -} - -/*! - \brief check whether peripheral and channels match - \param[in] dma_periph: DMAx(x=0,1) - \arg DMAx(x=0,1) - \param[in] channelx: specify which DMA channel - only one parameter can be selected which is shown as below: - \arg DMA_CHx(x=0..6) - \param[out] none - \retval none -*/ -static ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx) -{ - ErrStatus val = SUCCESS; - - if(DMA1 == dma_periph){ - /* for DMA1, the channel is from DMA_CH0 to DMA_CH4 */ - if(channelx > DMA_CH4){ - val = ERROR; - } - } - - return val; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_enet.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_enet.c deleted file mode 100644 index 12b2f90..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_enet.c +++ /dev/null @@ -1,3678 +0,0 @@ -/*! - \file gd32f30x_enet.c - \brief ENET driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-04-02, V2.0.1, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_enet.h" -#include - -#ifdef GD32F30X_CL - -#if defined (__CC_ARM) /*!< ARM compiler */ -__align(4) -enet_descriptors_struct rxdesc_tab[ENET_RXBUF_NUM]; /*!< ENET RxDMA descriptor */ -__align(4) -enet_descriptors_struct txdesc_tab[ENET_TXBUF_NUM]; /*!< ENET TxDMA descriptor */ -__align(4) -uint8_t rx_buff[ENET_RXBUF_NUM][ENET_RXBUF_SIZE]; /*!< ENET receive buffer */ -__align(4) -uint8_t tx_buff[ENET_TXBUF_NUM][ENET_TXBUF_SIZE]; /*!< ENET transmit buffer */ - -#elif defined ( __ICCARM__ ) /*!< IAR compiler */ -#pragma data_alignment=4 -enet_descriptors_struct rxdesc_tab[ENET_RXBUF_NUM]; /*!< ENET RxDMA descriptor */ -#pragma data_alignment=4 -enet_descriptors_struct txdesc_tab[ENET_TXBUF_NUM]; /*!< ENET TxDMA descriptor */ -#pragma data_alignment=4 -uint8_t rx_buff[ENET_RXBUF_NUM][ENET_RXBUF_SIZE]; /*!< ENET receive buffer */ -#pragma data_alignment=4 -uint8_t tx_buff[ENET_TXBUF_NUM][ENET_TXBUF_SIZE]; /*!< ENET transmit buffer */ - -#elif defined (__GNUC__) /* GNU Compiler */ -enet_descriptors_struct rxdesc_tab[ENET_RXBUF_NUM] __attribute__ ((aligned (4))); /*!< ENET RxDMA descriptor */ -enet_descriptors_struct txdesc_tab[ENET_TXBUF_NUM] __attribute__ ((aligned (4))); /*!< ENET TxDMA descriptor */ -uint8_t rx_buff[ENET_RXBUF_NUM][ENET_RXBUF_SIZE] __attribute__ ((aligned (4))); /*!< ENET receive buffer */ -uint8_t tx_buff[ENET_TXBUF_NUM][ENET_TXBUF_SIZE] __attribute__ ((aligned (4))); /*!< ENET transmit buffer */ - -#endif /* __CC_ARM */ - -/* global transmit and receive descriptors pointers */ -enet_descriptors_struct *dma_current_txdesc; -enet_descriptors_struct *dma_current_rxdesc; - -/* structure pointer of ptp descriptor for normal mode */ -enet_descriptors_struct *dma_current_ptp_txdesc = NULL; -enet_descriptors_struct *dma_current_ptp_rxdesc = NULL; - -/* init structure parameters for ENET initialization */ -static enet_initpara_struct enet_initpara ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - -static uint32_t enet_unknow_err = 0U; -/* array of register offset for debug information get */ -static const uint16_t enet_reg_tab[] = { -0x0000, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x001C, 0x0028, 0x002C, 0x0034, -0x0038, 0x003C, 0x0040, 0x0044, 0x0048, 0x004C, 0x0050, 0x0054, 0x0058, 0x005C, 0x1080, - -0x0100, 0x0104, 0x0108, 0x010C, 0x0110, 0x014C, 0x0150, 0x0168, 0x0194, 0x0198, 0x01C4, - -0x0700, 0x0704,0x0708, 0x070C, 0x0710, 0x0714, 0x0718, 0x071C, 0x0720, 0x0728, 0x072C, - -0x1000, 0x1004, 0x1008, 0x100C, 0x1010, 0x1014, 0x1018, 0x101C, 0x1020, 0x1024, 0x1048, -0x104C, 0x1050, 0x1054}; - -/* initialize ENET peripheral with generally concerned parameters, call it by enet_init() */ -static void enet_default_init(void); - -#ifndef USE_DELAY -/* insert a delay time */ -static void enet_delay(uint32_t ncount); -#endif /* USE_DELAY */ - -/*! - \brief deinitialize the ENET, and reset structure parameters for ENET initialization - \param[in] none - \param[out] none - \retval none -*/ -void enet_deinit(void) -{ - rcu_periph_reset_enable(RCU_ENETRST); - rcu_periph_reset_disable(RCU_ENETRST); - enet_initpara_reset(); -} - -/*! - \brief configure the parameters which are usually less cared for initialization - note -- this function must be called before enet_init(), otherwise - configuration will be no effect - \param[in] option: different function option, which is related to several parameters, - only one parameter can be selected which is shown as below, refer to enet_option_enum - \arg FORWARD_OPTION: choose to configure the frame forward related parameters - \arg DMABUS_OPTION: choose to configure the DMA bus mode related parameters - \arg DMA_MAXBURST_OPTION: choose to configure the DMA max burst related parameters - \arg DMA_ARBITRATION_OPTION: choose to configure the DMA arbitration related parameters - \arg STORE_OPTION: choose to configure the store forward mode related parameters - \arg DMA_OPTION: choose to configure the DMA descriptor related parameters - \arg VLAN_OPTION: choose to configure vlan related parameters - \arg FLOWCTL_OPTION: choose to configure flow control related parameters - \arg HASHH_OPTION: choose to configure hash high - \arg HASHL_OPTION: choose to configure hash low - \arg FILTER_OPTION: choose to configure frame filter related parameters - \arg HALFDUPLEX_OPTION: choose to configure halfduplex mode related parameters - \arg TIMER_OPTION: choose to configure time counter related parameters - \arg INTERFRAMEGAP_OPTION: choose to configure the inter frame gap related parameters - \param[in] para: the related parameters according to the option - all the related parameters should be configured which are shown as below - FORWARD_OPTION related parameters: - - ENET_AUTO_PADCRC_DROP_ENABLE/ ENET_AUTO_PADCRC_DROP_DISABLE ; - - ENET_TYPEFRAME_CRC_DROP_ENABLE/ ENET_TYPEFRAME_CRC_DROP_DISABLE ; - - ENET_FORWARD_ERRFRAMES_ENABLE/ ENET_FORWARD_ERRFRAMES_DISABLE ; - - ENET_FORWARD_UNDERSZ_GOODFRAMES_ENABLE/ ENET_FORWARD_UNDERSZ_GOODFRAMES_DISABLE . - DMABUS_OPTION related parameters: - - ENET_ADDRESS_ALIGN_ENABLE/ ENET_ADDRESS_ALIGN_DISABLE ; - - ENET_FIXED_BURST_ENABLE/ ENET_FIXED_BURST_DISABLE ; - - ENET_MIXED_BURST_ENABLE/ ENET_MIXED_BURST_DISABLE ; - DMA_MAXBURST_OPTION related parameters: - - ENET_RXDP_1BEAT/ ENET_RXDP_2BEAT/ ENET_RXDP_4BEAT/ - ENET_RXDP_8BEAT/ ENET_RXDP_16BEAT/ ENET_RXDP_32BEAT/ - ENET_RXDP_4xPGBL_4BEAT/ ENET_RXDP_4xPGBL_8BEAT/ - ENET_RXDP_4xPGBL_16BEAT/ ENET_RXDP_4xPGBL_32BEAT/ - ENET_RXDP_4xPGBL_64BEAT/ ENET_RXDP_4xPGBL_128BEAT ; - - ENET_PGBL_1BEAT/ ENET_PGBL_2BEAT/ ENET_PGBL_4BEAT/ - ENET_PGBL_8BEAT/ ENET_PGBL_16BEAT/ ENET_PGBL_32BEAT/ - ENET_PGBL_4xPGBL_4BEAT/ ENET_PGBL_4xPGBL_8BEAT/ - ENET_PGBL_4xPGBL_16BEAT/ ENET_PGBL_4xPGBL_32BEAT/ - ENET_PGBL_4xPGBL_64BEAT/ ENET_PGBL_4xPGBL_128BEAT ; - - ENET_RXTX_DIFFERENT_PGBL/ ENET_RXTX_SAME_PGBL ; - DMA_ARBITRATION_OPTION related parameters: - - ENET_ARBITRATION_RXPRIORTX - - ENET_ARBITRATION_RXTX_1_1/ ENET_ARBITRATION_RXTX_2_1/ - ENET_ARBITRATION_RXTX_3_1/ ENET_ARBITRATION_RXTX_4_1/. - STORE_OPTION related parameters: - - ENET_RX_MODE_STOREFORWARD/ ENET_RX_MODE_CUTTHROUGH ; - - ENET_TX_MODE_STOREFORWARD/ ENET_TX_MODE_CUTTHROUGH ; - - ENET_RX_THRESHOLD_64BYTES/ ENET_RX_THRESHOLD_32BYTES/ - ENET_RX_THRESHOLD_96BYTES/ ENET_RX_THRESHOLD_128BYTES ; - - ENET_TX_THRESHOLD_64BYTES/ ENET_TX_THRESHOLD_128BYTES/ - ENET_TX_THRESHOLD_192BYTES/ ENET_TX_THRESHOLD_256BYTES/ - ENET_TX_THRESHOLD_40BYTES/ ENET_TX_THRESHOLD_32BYTES/ - ENET_TX_THRESHOLD_24BYTES/ ENET_TX_THRESHOLD_16BYTES . - DMA_OPTION related parameters: - - ENET_FLUSH_RXFRAME_ENABLE/ ENET_FLUSH_RXFRAME_DISABLE ; - - ENET_SECONDFRAME_OPT_ENABLE/ ENET_SECONDFRAME_OPT_DISABLE ; - - ENET_ENHANCED_DESCRIPTOR/ ENET_NORMAL_DESCRIPTOR . - VLAN_OPTION related parameters: - - ENET_VLANTAGCOMPARISON_12BIT/ ENET_VLANTAGCOMPARISON_16BIT ; - - MAC_VLT_VLTI(regval) . - FLOWCTL_OPTION related parameters: - - MAC_FCTL_PTM(regval) ; - - ENET_ZERO_QUANTA_PAUSE_ENABLE/ ENET_ZERO_QUANTA_PAUSE_DISABLE ; - - ENET_PAUSETIME_MINUS4/ ENET_PAUSETIME_MINUS28/ - ENET_PAUSETIME_MINUS144/ENET_PAUSETIME_MINUS256 ; - - ENET_MAC0_AND_UNIQUE_ADDRESS_PAUSEDETECT/ ENET_UNIQUE_PAUSEDETECT ; - - ENET_RX_FLOWCONTROL_ENABLE/ ENET_RX_FLOWCONTROL_DISABLE ; - - ENET_TX_FLOWCONTROL_ENABLE/ ENET_TX_FLOWCONTROL_DISABLE . - HASHH_OPTION related parameters: - - 0x0~0xFFFF FFFFU - HASHL_OPTION related parameters: - - 0x0~0xFFFF FFFFU - FILTER_OPTION related parameters: - - ENET_SRC_FILTER_NORMAL_ENABLE/ ENET_SRC_FILTER_INVERSE_ENABLE/ - ENET_SRC_FILTER_DISABLE ; - - ENET_DEST_FILTER_INVERSE_ENABLE/ ENET_DEST_FILTER_INVERSE_DISABLE ; - - ENET_MULTICAST_FILTER_HASH_OR_PERFECT/ ENET_MULTICAST_FILTER_HASH/ - ENET_MULTICAST_FILTER_PERFECT/ ENET_MULTICAST_FILTER_NONE ; - - ENET_UNICAST_FILTER_EITHER/ ENET_UNICAST_FILTER_HASH/ - ENET_UNICAST_FILTER_PERFECT ; - - ENET_PCFRM_PREVENT_ALL/ ENET_PCFRM_PREVENT_PAUSEFRAME/ - ENET_PCFRM_FORWARD_ALL/ ENET_PCFRM_FORWARD_FILTERED . - HALFDUPLEX_OPTION related parameters: - - ENET_CARRIERSENSE_ENABLE/ ENET_CARRIERSENSE_DISABLE ; - - ENET_RECEIVEOWN_ENABLE/ ENET_RECEIVEOWN_DISABLE ; - - ENET_RETRYTRANSMISSION_ENABLE/ ENET_RETRYTRANSMISSION_DISABLE ; - - ENET_BACKOFFLIMIT_10/ ENET_BACKOFFLIMIT_8/ - ENET_BACKOFFLIMIT_4/ ENET_BACKOFFLIMIT_1 ; - - ENET_DEFERRALCHECK_ENABLE/ ENET_DEFERRALCHECK_DISABLE . - TIMER_OPTION related parameters: - - ENET_WATCHDOG_ENABLE/ ENET_WATCHDOG_DISABLE ; - - ENET_JABBER_ENABLE/ ENET_JABBER_DISABLE ; - INTERFRAMEGAP_OPTION related parameters: - - ENET_INTERFRAMEGAP_96BIT/ ENET_INTERFRAMEGAP_88BIT/ - ENET_INTERFRAMEGAP_80BIT/ ENET_INTERFRAMEGAP_72BIT/ - ENET_INTERFRAMEGAP_64BIT/ ENET_INTERFRAMEGAP_56BIT/ - ENET_INTERFRAMEGAP_48BIT/ ENET_INTERFRAMEGAP_40BIT . - \param[out] none - \retval none -*/ -void enet_initpara_config(enet_option_enum option, uint32_t para) -{ - switch(option){ - case FORWARD_OPTION: - /* choose to configure forward_frame, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)FORWARD_OPTION; - enet_initpara.forward_frame = para; - break; - case DMABUS_OPTION: - /* choose to configure dmabus_mode, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)DMABUS_OPTION; - enet_initpara.dmabus_mode = para; - break; - case DMA_MAXBURST_OPTION: - /* choose to configure dma_maxburst, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)DMA_MAXBURST_OPTION; - enet_initpara.dma_maxburst = para; - break; - case DMA_ARBITRATION_OPTION: - /* choose to configure dma_arbitration, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)DMA_ARBITRATION_OPTION; - enet_initpara.dma_arbitration = para; - break; - case STORE_OPTION: - /* choose to configure store_forward_mode, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)STORE_OPTION; - enet_initpara.store_forward_mode = para; - break; - case DMA_OPTION: - /* choose to configure dma_function, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)DMA_OPTION; - -#ifndef SELECT_DESCRIPTORS_ENHANCED_MODE - para &= ~ENET_ENHANCED_DESCRIPTOR; -#endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */ - - enet_initpara.dma_function = para; - break; - case VLAN_OPTION: - /* choose to configure vlan_config, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)VLAN_OPTION; - enet_initpara.vlan_config = para; - break; - case FLOWCTL_OPTION: - /* choose to configure flow_control, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)FLOWCTL_OPTION; - enet_initpara.flow_control = para; - break; - case HASHH_OPTION: - /* choose to configure hashtable_high, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)HASHH_OPTION; - enet_initpara.hashtable_high = para; - break; - case HASHL_OPTION: - /* choose to configure hashtable_low, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)HASHL_OPTION; - enet_initpara.hashtable_low = para; - break; - case FILTER_OPTION: - /* choose to configure framesfilter_mode, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)FILTER_OPTION; - enet_initpara.framesfilter_mode = para; - break; - case HALFDUPLEX_OPTION: - /* choose to configure halfduplex_param, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)HALFDUPLEX_OPTION; - enet_initpara.halfduplex_param = para; - break; - case TIMER_OPTION: - /* choose to configure timer_config, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)TIMER_OPTION; - enet_initpara.timer_config = para; - break; - case INTERFRAMEGAP_OPTION: - /* choose to configure interframegap, and save the configuration parameters */ - enet_initpara.option_enable |= (uint32_t)INTERFRAMEGAP_OPTION; - enet_initpara.interframegap = para; - break; - default: - break; - } -} - -/*! - \brief initialize ENET peripheral with generally concerned parameters and the less cared - parameters - \param[in] mediamode: PHY mode and mac loopback configurations, only one parameter can be selected - which is shown as below, refer to enet_mediamode_enum - \arg ENET_AUTO_NEGOTIATION: PHY auto negotiation - \arg ENET_100M_FULLDUPLEX: 100Mbit/s, full-duplex - \arg ENET_100M_HALFDUPLEX: 100Mbit/s, half-duplex - \arg ENET_10M_FULLDUPLEX: 10Mbit/s, full-duplex - \arg ENET_10M_HALFDUPLEX: 10Mbit/s, half-duplex - \arg ENET_LOOPBACKMODE: MAC in loopback mode at the MII - \param[in] checksum: IP frame checksum offload function, only one parameter can be selected - which is shown as below, refer to enet_mediamode_enum - \arg ENET_NO_AUTOCHECKSUM: disable IP frame checksum function - \arg ENET_AUTOCHECKSUM_DROP_FAILFRAMES: enable IP frame checksum function - \arg ENET_AUTOCHECKSUM_ACCEPT_FAILFRAMES: enable IP frame checksum function, and the received frame - with only payload error but no other errors will not be dropped - \param[in] recept: frame filter function, only one parameter can be selected - which is shown as below, refer to enet_frmrecept_enum - \arg ENET_PROMISCUOUS_MODE: promiscuous mode enabled - \arg ENET_RECEIVEALL: all received frame are forwarded to application - \arg ENET_BROADCAST_FRAMES_PASS: the address filters pass all received broadcast frames - \arg ENET_BROADCAST_FRAMES_DROP: the address filters filter all incoming broadcast frames - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_init(enet_mediamode_enum mediamode, enet_chksumconf_enum checksum, enet_frmrecept_enum recept) -{ - uint32_t reg_value=0U, reg_temp = 0U, temp = 0U; - uint32_t media_temp = 0U; - uint32_t timeout = 0U; - uint16_t phy_value = 0U; - ErrStatus phy_state= ERROR, enet_state = ERROR; - - /* PHY interface configuration, configure SMI clock and reset PHY chip */ - if(ERROR == enet_phy_config()){ - _ENET_DELAY_(PHY_RESETDELAY); - if(ERROR == enet_phy_config()){ - return enet_state; - } - } - /* initialize ENET peripheral with generally concerned parameters */ - enet_default_init(); - - /* 1st, configure mediamode */ - media_temp = (uint32_t)mediamode; - /* if is PHY auto negotiation */ - if((uint32_t)ENET_AUTO_NEGOTIATION == media_temp){ - /* wait for PHY_LINKED_STATUS bit be set */ - do{ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BSR, &phy_value); - phy_value &= PHY_LINKED_STATUS; - timeout++; - }while((RESET == phy_value) && (timeout < PHY_READ_TO)); - /* return ERROR due to timeout */ - if(PHY_READ_TO == timeout){ - return enet_state; - } - /* reset timeout counter */ - timeout = 0U; - - /* enable auto-negotiation */ - phy_value = PHY_AUTONEGOTIATION; - phy_state = enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &phy_value); - if(!phy_state){ - /* return ERROR due to write timeout */ - return enet_state; - } - - /* wait for the PHY_AUTONEGO_COMPLETE bit be set */ - do{ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BSR, &phy_value); - phy_value &= PHY_AUTONEGO_COMPLETE; - timeout++; - }while((RESET == phy_value) && (timeout < (uint32_t)PHY_READ_TO)); - /* return ERROR due to timeout */ - if(PHY_READ_TO == timeout){ - return enet_state; - } - /* reset timeout counter */ - timeout = 0U; - - /* read the result of the auto-negotiation */ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_SR, &phy_value); - /* configure the duplex mode of MAC following the auto-negotiation result */ - if((uint16_t)RESET != (phy_value & PHY_DUPLEX_STATUS)){ - media_temp = ENET_MODE_FULLDUPLEX; - }else{ - media_temp = ENET_MODE_HALFDUPLEX; - } - /* configure the communication speed of MAC following the auto-negotiation result */ - if((uint16_t)RESET !=(phy_value & PHY_SPEED_STATUS)){ - media_temp |= ENET_SPEEDMODE_10M; - }else{ - media_temp |= ENET_SPEEDMODE_100M; - } - }else{ - phy_value = (uint16_t)((media_temp & ENET_MAC_CFG_DPM) >> 3); - phy_value |= (uint16_t)((media_temp & ENET_MAC_CFG_SPD) >> 1); - phy_state = enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &phy_value); - if(!phy_state){ - /* return ERROR due to write timeout */ - return enet_state; - } - /* PHY configuration need some time */ - _ENET_DELAY_(PHY_CONFIGDELAY); - } - /* after configuring the PHY, use mediamode to configure registers */ - reg_value = ENET_MAC_CFG; - /* configure ENET_MAC_CFG register */ - reg_value &= (~(ENET_MAC_CFG_SPD |ENET_MAC_CFG_DPM |ENET_MAC_CFG_LBM)); - reg_value |= media_temp; - ENET_MAC_CFG = reg_value; - - - /* 2st, configure checksum */ - if(RESET != ((uint32_t)checksum & ENET_CHECKSUMOFFLOAD_ENABLE)){ - ENET_MAC_CFG |= ENET_CHECKSUMOFFLOAD_ENABLE; - - reg_value = ENET_DMA_CTL; - /* configure ENET_DMA_CTL register */ - reg_value &= ~ENET_DMA_CTL_DTCERFD; - reg_value |= ((uint32_t)checksum & ENET_DMA_CTL_DTCERFD); - ENET_DMA_CTL = reg_value; - } - - /* 3rd, configure recept */ - ENET_MAC_FRMF |= (uint32_t)recept; - - /* 4th, configure different function options */ - /* configure forward_frame related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)FORWARD_OPTION)){ - reg_temp = enet_initpara.forward_frame; - - reg_value = ENET_MAC_CFG; - temp = reg_temp; - /* configure ENET_MAC_CFG register */ - reg_value &= (~(ENET_MAC_CFG_TFCD |ENET_MAC_CFG_APCD)); - temp &= (ENET_MAC_CFG_TFCD | ENET_MAC_CFG_APCD); - reg_value |= temp; - ENET_MAC_CFG = reg_value; - - reg_value = ENET_DMA_CTL; - temp = reg_temp; - /* configure ENET_DMA_CTL register */ - reg_value &= (~(ENET_DMA_CTL_FERF |ENET_DMA_CTL_FUF)); - temp &= ((ENET_DMA_CTL_FERF | ENET_DMA_CTL_FUF)<<2); - reg_value |= (temp >> 2); - ENET_DMA_CTL = reg_value; - } - - /* configure dmabus_mode related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)DMABUS_OPTION)){ - temp = enet_initpara.dmabus_mode; - - reg_value = ENET_DMA_BCTL; - /* configure ENET_DMA_BCTL register */ - reg_value &= ~(ENET_DMA_BCTL_AA | ENET_DMA_BCTL_FB \ - |ENET_DMA_BCTL_FPBL | ENET_DMA_BCTL_MB); - reg_value |= temp; - ENET_DMA_BCTL = reg_value; - } - - /* configure dma_maxburst related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)DMA_MAXBURST_OPTION)){ - temp = enet_initpara.dma_maxburst; - - reg_value = ENET_DMA_BCTL; - /* configure ENET_DMA_BCTL register */ - reg_value &= ~(ENET_DMA_BCTL_RXDP| ENET_DMA_BCTL_PGBL | ENET_DMA_BCTL_UIP); - reg_value |= temp; - ENET_DMA_BCTL = reg_value; - } - - /* configure dma_arbitration related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)DMA_ARBITRATION_OPTION)){ - temp = enet_initpara.dma_arbitration; - - reg_value = ENET_DMA_BCTL; - /* configure ENET_DMA_BCTL register */ - reg_value &= ~(ENET_DMA_BCTL_RTPR | ENET_DMA_BCTL_DAB); - reg_value |= temp; - ENET_DMA_BCTL = reg_value; - } - - /* configure store_forward_mode related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)STORE_OPTION)){ - temp = enet_initpara.store_forward_mode; - - reg_value = ENET_DMA_CTL; - /* configure ENET_DMA_CTL register */ - reg_value &= ~(ENET_DMA_CTL_RSFD | ENET_DMA_CTL_TSFD| ENET_DMA_CTL_RTHC| ENET_DMA_CTL_TTHC); - reg_value |= temp; - ENET_DMA_CTL = reg_value; - } - - /* configure dma_function related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)DMA_OPTION)){ - reg_temp = enet_initpara.dma_function; - - reg_value = ENET_DMA_CTL; - temp = reg_temp; - /* configure ENET_DMA_CTL register */ - reg_value &= (~(ENET_DMA_CTL_DAFRF |ENET_DMA_CTL_OSF)); - temp &= (ENET_DMA_CTL_DAFRF | ENET_DMA_CTL_OSF); - reg_value |= temp; - ENET_DMA_CTL = reg_value; - - reg_value = ENET_DMA_BCTL; - temp = reg_temp; - /* configure ENET_DMA_BCTL register */ - reg_value &= (~ENET_DMA_BCTL_DFM); - temp &= ENET_DMA_BCTL_DFM; - reg_value |= temp; - ENET_DMA_BCTL = reg_value; - } - - /* configure vlan_config related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)VLAN_OPTION)){ - reg_temp = enet_initpara.vlan_config; - - reg_value = ENET_MAC_VLT; - /* configure ENET_MAC_VLT register */ - reg_value &= ~(ENET_MAC_VLT_VLTI | ENET_MAC_VLT_VLTC); - reg_value |= reg_temp; - ENET_MAC_VLT = reg_value; - } - - /* configure flow_control related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)FLOWCTL_OPTION)){ - reg_temp = enet_initpara.flow_control; - - reg_value = ENET_MAC_FCTL; - temp = reg_temp; - /* configure ENET_MAC_FCTL register */ - reg_value &= ~(ENET_MAC_FCTL_PTM |ENET_MAC_FCTL_DZQP |ENET_MAC_FCTL_PLTS \ - | ENET_MAC_FCTL_UPFDT |ENET_MAC_FCTL_RFCEN |ENET_MAC_FCTL_TFCEN); - temp &= (ENET_MAC_FCTL_PTM |ENET_MAC_FCTL_DZQP |ENET_MAC_FCTL_PLTS \ - | ENET_MAC_FCTL_UPFDT |ENET_MAC_FCTL_RFCEN |ENET_MAC_FCTL_TFCEN); - reg_value |= temp; - ENET_MAC_FCTL = reg_value; - - reg_value = ENET_MAC_FCTH; - temp = reg_temp; - /* configure ENET_MAC_FCTH register */ - reg_value &= ~(ENET_MAC_FCTH_RFA |ENET_MAC_FCTH_RFD); - temp &= ((ENET_MAC_FCTH_RFA | ENET_MAC_FCTH_RFD )<<8); - reg_value |= (temp >> 8); - ENET_MAC_FCTH = reg_value; - } - - /* configure hashtable_high related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)HASHH_OPTION)){ - ENET_MAC_HLH = enet_initpara.hashtable_high; - } - - /* configure hashtable_low related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)HASHL_OPTION)){ - ENET_MAC_HLL = enet_initpara.hashtable_low; - } - - /* configure framesfilter_mode related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)FILTER_OPTION)){ - reg_temp = enet_initpara.framesfilter_mode; - - reg_value = ENET_MAC_FRMF; - /* configure ENET_MAC_FRMF register */ - reg_value &= ~(ENET_MAC_FRMF_SAFLT | ENET_MAC_FRMF_SAIFLT | ENET_MAC_FRMF_DAIFLT \ - | ENET_MAC_FRMF_HMF | ENET_MAC_FRMF_HPFLT | ENET_MAC_FRMF_MFD \ - | ENET_MAC_FRMF_HUF | ENET_MAC_FRMF_PCFRM); - reg_value |= reg_temp; - ENET_MAC_FRMF = reg_value; - } - - /* configure halfduplex_param related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)HALFDUPLEX_OPTION)){ - reg_temp = enet_initpara.halfduplex_param; - - reg_value = ENET_MAC_CFG; - /* configure ENET_MAC_CFG register */ - reg_value &= ~(ENET_MAC_CFG_CSD | ENET_MAC_CFG_ROD | ENET_MAC_CFG_RTD \ - | ENET_MAC_CFG_BOL | ENET_MAC_CFG_DFC); - reg_value |= reg_temp; - ENET_MAC_CFG = reg_value; - } - - /* configure timer_config related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)TIMER_OPTION)){ - reg_temp = enet_initpara.timer_config; - - reg_value = ENET_MAC_CFG; - /* configure ENET_MAC_CFG register */ - reg_value &= ~(ENET_MAC_CFG_WDD | ENET_MAC_CFG_JBD); - reg_value |= reg_temp; - ENET_MAC_CFG = reg_value; - } - - /* configure interframegap related registers */ - if(RESET != (enet_initpara.option_enable & (uint32_t)INTERFRAMEGAP_OPTION)){ - reg_temp = enet_initpara.interframegap; - - reg_value = ENET_MAC_CFG; - /* configure ENET_MAC_CFG register */ - reg_value &= ~ENET_MAC_CFG_IGBS; - reg_value |= reg_temp; - ENET_MAC_CFG = reg_value; - } - - enet_state = SUCCESS; - return enet_state; -} - -/*! - \brief reset all core internal registers located in CLK_TX and CLK_RX - \param[in] none - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_software_reset(void) -{ - uint32_t timeout = 0U; - ErrStatus enet_state = ERROR; - uint32_t dma_flag; - - /* reset all core internal registers located in CLK_TX and CLK_RX */ - ENET_DMA_BCTL |= ENET_DMA_BCTL_SWR; - - /* wait for reset operation complete */ - do{ - dma_flag = (ENET_DMA_BCTL & ENET_DMA_BCTL_SWR); - timeout++; - }while((RESET != dma_flag) && (ENET_DELAY_TO != timeout)); - - /* reset operation complete */ - if(RESET == (ENET_DMA_BCTL & ENET_DMA_BCTL_SWR)){ - enet_state = SUCCESS; - } - - return enet_state; -} - -/*! - \brief check receive frame valid and return frame size - \param[in] none - \param[out] none - \retval size of received frame: 0x0 - 0x3FFF -*/ -uint32_t enet_rxframe_size_get(void) -{ - uint32_t size = 0U; - uint32_t status; - - /* get rdes0 information of current RxDMA descriptor */ - status = dma_current_rxdesc->status; - - /* if the desciptor is owned by DMA */ - if((uint32_t)RESET != (status & ENET_RDES0_DAV)){ - return 0U; - } - - /* if has any error, or the frame uses two or more descriptors */ - if((((uint32_t)RESET) != (status & ENET_RDES0_ERRS)) || - (((uint32_t)RESET) == (status & ENET_RDES0_LDES)) || - (((uint32_t)RESET) == (status & ENET_RDES0_FDES))){ - /* drop current receive frame */ - enet_rxframe_drop(); - - return 1U; - } -#ifdef SELECT_DESCRIPTORS_ENHANCED_MODE - /* if is an ethernet-type frame, and IP frame payload error occurred */ - if(((uint32_t)RESET) != (dma_current_rxdesc->status & ENET_RDES0_FRMT) && - ((uint32_t)RESET) != (dma_current_rxdesc->extended_status & ENET_RDES4_IPPLDERR)){ - /* drop current receive frame */ - enet_rxframe_drop(); - - return 1U; - } -#else - /* if is an ethernet-type frame, and IP frame payload error occurred */ - if((((uint32_t)RESET) != (status & ENET_RDES0_FRMT)) && - (((uint32_t)RESET) != (status & ENET_RDES0_PCERR))){ - /* drop current receive frame */ - enet_rxframe_drop(); - - return 1U; - } -#endif - /* if CPU owns current descriptor, no error occured, the frame uses only one descriptor */ - if((((uint32_t)RESET) == (status & ENET_RDES0_DAV)) && - (((uint32_t)RESET) == (status & ENET_RDES0_ERRS)) && - (((uint32_t)RESET) != (status & ENET_RDES0_LDES)) && - (((uint32_t)RESET) != (status & ENET_RDES0_FDES))){ - /* get the size of the received data including CRC */ - size = GET_RDES0_FRML(status); - /* substract the CRC size */ - size = size - 4U; - - /* if is a type frame, and CRC is not included in forwarding frame */ - if((RESET != (ENET_MAC_CFG & ENET_MAC_CFG_TFCD)) && (RESET != (status & ENET_RDES0_FRMT))){ - size = size + 4U; - } - }else{ - enet_unknow_err++; - enet_rxframe_drop(); - - return 1U; - } - - /* return packet size */ - return size; -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in chain mode - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[out] none - \retval none -*/ -void enet_descriptors_chain_init(enet_dmadirection_enum direction) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc, *desc_tab; - uint8_t *buf; - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* select chain mode */ - desc_status = ENET_TDES0_TCHM; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* select receive chained mode and set buffer1 size */ - desc_bufsize = ENET_RDES1_RCHM | (uint32_t)ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - } - dma_current_ptp_rxdesc = NULL; - dma_current_ptp_txdesc = NULL; - - /* configure each descriptor */ - for(num=0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* if is not the last descriptor */ - if(num < (count - 1U)){ - /* configure the next descriptor address */ - desc->buffer2_next_desc_addr = (uint32_t)(desc_tab + num + 1U); - }else{ - /* when it is the last descriptor, the next descriptor address - equals to first descriptor address in descriptor table */ - desc->buffer2_next_desc_addr = (uint32_t) desc_tab; - } - } -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in ring mode - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[out] none - \retval none -*/ -void enet_descriptors_ring_init(enet_dmadirection_enum direction) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc; - enet_descriptors_struct *desc_tab; - uint8_t *buf; - - /* configure descriptor skip length */ - ENET_DMA_BCTL &= ~ENET_DMA_BCTL_DPSL; - ENET_DMA_BCTL |= DMA_BCTL_DPSL(0); - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* set buffer1 size */ - desc_bufsize = ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - } - dma_current_ptp_rxdesc = NULL; - dma_current_ptp_txdesc = NULL; - - /* configure each descriptor */ - for(num=0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* when it is the last descriptor */ - if(num == (count - 1U)){ - if (ENET_DMA_TX == direction){ - /* configure transmit end of ring mode */ - desc->status |= ENET_TDES0_TERM; - }else{ - /* configure receive end of ring mode */ - desc->control_buffer_size |= ENET_RDES1_RERM; - } - } - } -} - -/*! - \brief handle current received frame data to application buffer - \param[in] bufsize: the size of buffer which is the parameter in function - \param[out] buffer: pointer to the received frame data - note -- if the input is NULL, user should copy data in application by himself - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_frame_receive(uint8_t *buffer, uint32_t bufsize) -{ - uint32_t offset = 0U, size = 0U; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_DAV)){ - return ERROR; - } - - - /* if buffer pointer is null, indicates that users has copied data in application */ - if(NULL != buffer){ - /* if no error occurs, and the frame uses only one descriptor */ - if((((uint32_t)RESET) == (dma_current_rxdesc->status & ENET_RDES0_ERRS)) && - (((uint32_t)RESET) != (dma_current_rxdesc->status & ENET_RDES0_LDES)) && - (((uint32_t)RESET) != (dma_current_rxdesc->status & ENET_RDES0_FDES))){ - /* get the frame length except CRC */ - size = GET_RDES0_FRML(dma_current_rxdesc->status); - size = size - 4U; - - /* if is a type frame, and CRC is not included in forwarding frame */ - if((RESET != (ENET_MAC_CFG & ENET_MAC_CFG_TFCD)) && (RESET != (dma_current_rxdesc->status & ENET_RDES0_FRMT))){ - size = size + 4U; - } - - /* to avoid situation that the frame size exceeds the buffer length */ - if(size > bufsize){ - return ERROR; - } - - /* copy data from Rx buffer to application buffer */ - for(offset = 0U; offsetbuffer1_addr) + offset)); - } - - }else{ - /* return ERROR */ - return ERROR; - } - } - /* enable reception, descriptor is owned by DMA */ - dma_current_rxdesc->status = ENET_RDES0_DAV; - - /* check Rx buffer unavailable flag status */ - if ((uint32_t)RESET != (ENET_DMA_STAT & ENET_DMA_STAT_RBU)){ - /* clear RBU flag */ - ENET_DMA_STAT = ENET_DMA_STAT_RBU; - /* resume DMA reception by writing to the RPEN register*/ - ENET_DMA_RPEN = 0U; - } - - /* update the current RxDMA descriptor pointer to the next decriptor in RxDMA decriptor table */ - /* chained mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RCHM)){ - dma_current_rxdesc = (enet_descriptors_struct*) (dma_current_rxdesc->buffer2_next_desc_addr); - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_rxdesc = (enet_descriptors_struct*) (ENET_DMA_RDTADDR); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_rxdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_rxdesc + ETH_DMARXDESC_SIZE + (GET_DMA_BCTL_DPSL(ENET_DMA_BCTL))); - } - } - - return SUCCESS; -} - -/*! - \brief handle application buffer data to transmit it - \param[in] buffer: pointer to the frame data to be transmitted, - note -- if the input is NULL, user should handle the data in application by himself - \param[in] length: the length of frame data to be transmitted - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_frame_transmit(uint8_t *buffer, uint32_t length) -{ - uint32_t offset = 0U; - uint32_t dma_tbu_flag, dma_tu_flag; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_DAV)){ - return ERROR; - } - - /* only frame length no more than ENET_MAX_FRAME_SIZE is allowed */ - if(length > ENET_MAX_FRAME_SIZE){ - return ERROR; - } - - /* if buffer pointer is null, indicates that users has handled data in application */ - if(NULL != buffer){ - /* copy frame data from application buffer to Tx buffer */ - for(offset = 0U; offset < length; offset++){ - (*(__IO uint8_t *) (uint32_t)((dma_current_txdesc->buffer1_addr) + offset)) = (*(buffer + offset)); - } - } - - /* set the frame length */ - dma_current_txdesc->control_buffer_size = length; - /* set the segment of frame, frame is transmitted in one descriptor */ - dma_current_txdesc->status |= ENET_TDES0_LSG | ENET_TDES0_FSG; - /* enable the DMA transmission */ - dma_current_txdesc->status |= ENET_TDES0_DAV; - - /* check Tx buffer unavailable flag status */ - dma_tbu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TBU); - dma_tu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TU); - - if ((RESET != dma_tbu_flag) || (RESET != dma_tu_flag)){ - /* clear TBU and TU flag */ - ENET_DMA_STAT = (dma_tbu_flag | dma_tu_flag); - /* resume DMA transmission by writing to the TPEN register*/ - ENET_DMA_TPEN = 0U; - } - - /* update the current TxDMA descriptor pointer to the next decriptor in TxDMA decriptor table*/ - /* chained mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TCHM)){ - dma_current_txdesc = (enet_descriptors_struct*) (dma_current_txdesc->buffer2_next_desc_addr); - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_txdesc = (enet_descriptors_struct*) (ENET_DMA_TDTADDR); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_txdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_txdesc + ETH_DMATXDESC_SIZE + (GET_DMA_BCTL_DPSL(ENET_DMA_BCTL))); - } - } - - return SUCCESS; -} - -/*! - \brief configure the transmit IP frame checksum offload calculation and insertion - \param[in] desc: the descriptor pointer which users want to configure - \param[in] checksum: IP frame checksum configuration - only one parameter can be selected which is shown as below - \arg ENET_CHECKSUM_DISABLE: checksum insertion disabled - \arg ENET_CHECKSUM_IPV4HEADER: only IP header checksum calculation and insertion are enabled - \arg ENET_CHECKSUM_TCPUDPICMP_SEGMENT: TCP/UDP/ICMP checksum insertion calculated but pseudo-header - \arg ENET_CHECKSUM_TCPUDPICMP_FULL: TCP/UDP/ICMP checksum insertion fully calculated - \param[out] none - \retval ErrStatus: ERROR, SUCCESS -*/ -ErrStatus enet_transmit_checksum_config(enet_descriptors_struct *desc, uint32_t checksum) -{ - if(NULL != desc){ - desc->status &= ~ENET_TDES0_CM; - desc->status |= checksum; - return SUCCESS; - }else{ - return ERROR; - } -} - -/*! - \brief ENET Tx and Rx function enable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_enable(void) -{ - enet_tx_enable(); - enet_rx_enable(); -} - -/*! - \brief ENET Tx and Rx function disable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_disable(void) -{ - enet_tx_disable(); - enet_rx_disable(); -} - -/*! - \brief configure MAC address - \param[in] mac_addr: select which MAC address will be set, - only one parameter can be selected which is shown as below - \arg ENET_MAC_ADDRESS0: set MAC address 0 filter - \arg ENET_MAC_ADDRESS1: set MAC address 1 filter - \arg ENET_MAC_ADDRESS2: set MAC address 2 filter - \arg ENET_MAC_ADDRESS3: set MAC address 3 filter - \param[in] paddr: the buffer pointer which stores the MAC address - (little-ending store, such as MAC address is aa:bb:cc:dd:ee:22, the buffer is {22, ee, dd, cc, bb, aa}) - \param[out] none - \retval none -*/ -void enet_mac_address_set(enet_macaddress_enum mac_addr, uint8_t paddr[]) -{ - REG32(ENET_ADDRH_BASE + (uint32_t)mac_addr) = ENET_SET_MACADDRH(paddr); - REG32(ENET_ADDRL_BASE + (uint32_t)mac_addr) = ENET_SET_MACADDRL(paddr); -} - -/*! - \brief get MAC address - \param[in] mac_addr: select which MAC address will be get, - only one parameter can be selected which is shown as below - \arg ENET_MAC_ADDRESS0: get MAC address 0 filter - \arg ENET_MAC_ADDRESS1: get MAC address 1 filter - \arg ENET_MAC_ADDRESS2: get MAC address 2 filter - \arg ENET_MAC_ADDRESS3: get MAC address 3 filter - \param[out] paddr: the buffer pointer which is stored the MAC address - (little-ending store, such as mac address is aa:bb:cc:dd:ee:22, the buffer is {22, ee, dd, cc, bb, aa}) - \param[in] bufsize: refer to the size of the buffer which stores the MAC address - \arg 6 - 255 - \retval ErrStatus: ERROR, SUCCESS -*/ -ErrStatus enet_mac_address_get(enet_macaddress_enum mac_addr, uint8_t paddr[], uint8_t bufsize) -{ - if(bufsize < 6U){ - return ERROR; - } - paddr[0] = ENET_GET_MACADDR(mac_addr, 0U); - paddr[1] = ENET_GET_MACADDR(mac_addr, 1U); - paddr[2] = ENET_GET_MACADDR(mac_addr, 2U); - paddr[3] = ENET_GET_MACADDR(mac_addr, 3U); - paddr[4] = ENET_GET_MACADDR(mac_addr, 4U); - paddr[5] = ENET_GET_MACADDR(mac_addr, 5U); - return SUCCESS; -} - -/*! - \brief get the ENET MAC/MSC/PTP/DMA status flag - \param[in] enet_flag: ENET status flag, refer to enet_flag_enum, - only one parameter can be selected which is shown as below - \arg ENET_MAC_FLAG_MPKR: magic packet received flag - \arg ENET_MAC_FLAG_WUFR: wakeup frame received flag - \arg ENET_MAC_FLAG_FLOWCONTROL: flow control status flag - \arg ENET_MAC_FLAG_WUM: WUM status flag - \arg ENET_MAC_FLAG_MSC: MSC status flag - \arg ENET_MAC_FLAG_MSCR: MSC receive status flag - \arg ENET_MAC_FLAG_MSCT: MSC transmit status flag - \arg ENET_MAC_FLAG_TMST: time stamp trigger status flag - \arg ENET_PTP_FLAG_TSSCO: timestamp second counter overflow flag - \arg ENET_PTP_FLAG_TTM: target time match flag - \arg ENET_MSC_FLAG_RFCE: received frames CRC error flag - \arg ENET_MSC_FLAG_RFAE: received frames alignment error flag - \arg ENET_MSC_FLAG_RGUF: received good unicast frames flag - \arg ENET_MSC_FLAG_TGFSC: transmitted good frames single collision flag - \arg ENET_MSC_FLAG_TGFMSC: transmitted good frames more single collision flag - \arg ENET_MSC_FLAG_TGF: transmitted good frames flag - \arg ENET_DMA_FLAG_TS: transmit status flag - \arg ENET_DMA_FLAG_TPS: transmit process stopped status flag - \arg ENET_DMA_FLAG_TBU: transmit buffer unavailable status flag - \arg ENET_DMA_FLAG_TJT: transmit jabber timeout status flag - \arg ENET_DMA_FLAG_RO: receive overflow status flag - \arg ENET_DMA_FLAG_TU: transmit underflow status flag - \arg ENET_DMA_FLAG_RS: receive status flag - \arg ENET_DMA_FLAG_RBU: receive buffer unavailable status flag - \arg ENET_DMA_FLAG_RPS: receive process stopped status flag - \arg ENET_DMA_FLAG_RWT: receive watchdog timeout status flag - \arg ENET_DMA_FLAG_ET: early transmit status flag - \arg ENET_DMA_FLAG_FBE: fatal bus error status flag - \arg ENET_DMA_FLAG_ER: early receive status flag - \arg ENET_DMA_FLAG_AI: abnormal interrupt summary flag - \arg ENET_DMA_FLAG_NI: normal interrupt summary flag - \arg ENET_DMA_FLAG_EB_DMA_ERROR: DMA error flag - \arg ENET_DMA_FLAG_EB_TRANSFER_ERROR: transfer error flag - \arg ENET_DMA_FLAG_EB_ACCESS_ERROR: access error flag - \arg ENET_DMA_FLAG_MSC: MSC status flag - \arg ENET_DMA_FLAG_WUM: WUM status flag - \arg ENET_DMA_FLAG_TST: timestamp trigger status flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus enet_flag_get(enet_flag_enum enet_flag) -{ - if(RESET != (ENET_REG_VAL(enet_flag) & BIT(ENET_BIT_POS(enet_flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear the ENET DMA status flag - \param[in] enet_flag: ENET DMA flag clear, refer to enet_flag_clear_enum - only one parameter can be selected which is shown as below - \arg ENET_DMA_FLAG_TS_CLR: transmit status flag clear - \arg ENET_DMA_FLAG_TPS_CLR: transmit process stopped status flag clear - \arg ENET_DMA_FLAG_TBU_CLR: transmit buffer unavailable status flag clear - \arg ENET_DMA_FLAG_TJT_CLR: transmit jabber timeout status flag clear - \arg ENET_DMA_FLAG_RO_CLR: receive overflow status flag clear - \arg ENET_DMA_FLAG_TU_CLR: transmit underflow status flag clear - \arg ENET_DMA_FLAG_RS_CLR: receive status flag clear - \arg ENET_DMA_FLAG_RBU_CLR: receive buffer unavailable status flag clear - \arg ENET_DMA_FLAG_RPS_CLR: receive process stopped status flag clear - \arg ENET_DMA_FLAG_RWT_CLR: receive watchdog timeout status flag clear - \arg ENET_DMA_FLAG_ET_CLR: early transmit status flag clear - \arg ENET_DMA_FLAG_FBE_CLR: fatal bus error status flag clear - \arg ENET_DMA_FLAG_ER_CLR: early receive status flag clear - \arg ENET_DMA_FLAG_AI_CLR: abnormal interrupt summary flag clear - \arg ENET_DMA_FLAG_NI_CLR: normal interrupt summary flag clear - \param[out] none - \retval none -*/ -void enet_flag_clear(enet_flag_clear_enum enet_flag) -{ - /* write 1 to the corresponding bit in ENET_DMA_STAT, to clear it */ - ENET_REG_VAL(enet_flag) = BIT(ENET_BIT_POS(enet_flag)); -} - -/*! - \brief enable ENET MAC/MSC/DMA interrupt - \param[in] enet_int: ENET interrupt, - only one parameter can be selected which is shown as below - \arg ENET_MAC_INT_WUMIM: WUM interrupt mask - \arg ENET_MAC_INT_TMSTIM: timestamp trigger interrupt mask - \arg ENET_MSC_INT_RFCEIM: received frame CRC error interrupt mask - \arg ENET_MSC_INT_RFAEIM: received frames alignment error interrupt mask - \arg ENET_MSC_INT_RGUFIM: received good unicast frames interrupt mask - \arg ENET_MSC_INT_TGFSCIM: transmitted good frames single collision interrupt mask - \arg ENET_MSC_INT_TGFMSCIM: transmitted good frames more single collision interrupt mask - \arg ENET_MSC_INT_TGFIM: transmitted good frames interrupt mask - \arg ENET_DMA_INT_TIE: transmit interrupt enable - \arg ENET_DMA_INT_TPSIE: transmit process stopped interrupt enable - \arg ENET_DMA_INT_TBUIE: transmit buffer unavailable interrupt enable - \arg ENET_DMA_INT_TJTIE: transmit jabber timeout interrupt enable - \arg ENET_DMA_INT_ROIE: receive overflow interrupt enable - \arg ENET_DMA_INT_TUIE: transmit underflow interrupt enable - \arg ENET_DMA_INT_RIE: receive interrupt enable - \arg ENET_DMA_INT_RBUIE: receive buffer unavailable interrupt enable - \arg ENET_DMA_INT_RPSIE: receive process stopped interrupt enable - \arg ENET_DMA_INT_RWTIE: receive watchdog timeout interrupt enable - \arg ENET_DMA_INT_ETIE: early transmit interrupt enable - \arg ENET_DMA_INT_FBEIE: fatal bus error interrupt enable - \arg ENET_DMA_INT_ERIE: early receive interrupt enable - \arg ENET_DMA_INT_AIE: abnormal interrupt summary enable - \arg ENET_DMA_INT_NIE: normal interrupt summary enable - \param[out] none - \retval none -*/ -void enet_interrupt_enable(enet_int_enum enet_int) -{ - if(DMA_INTEN_REG_OFFSET == ((uint32_t)enet_int >> 6)){ - /* ENET_DMA_INTEN register interrupt */ - ENET_REG_VAL(enet_int) |= BIT(ENET_BIT_POS(enet_int)); - }else{ - /* other INTMSK register interrupt */ - ENET_REG_VAL(enet_int) &= ~BIT(ENET_BIT_POS(enet_int)); - } -} - -/*! - \brief disable ENET MAC/MSC/DMA interrupt - \param[in] enet_int: ENET interrupt, - only one parameter can be selected which is shown as below - \arg ENET_MAC_INT_WUMIM: WUM interrupt mask - \arg ENET_MAC_INT_TMSTIM: timestamp trigger interrupt mask - \arg ENET_MSC_INT_RFCEIM: received frame CRC error interrupt mask - \arg ENET_MSC_INT_RFAEIM: received frames alignment error interrupt mask - \arg ENET_MSC_INT_RGUFIM: received good unicast frames interrupt mask - \arg ENET_MSC_INT_TGFSCIM: transmitted good frames single collision interrupt mask - \arg ENET_MSC_INT_TGFMSCIM: transmitted good frames more single collision interrupt mask - \arg ENET_MSC_INT_TGFIM: transmitted good frames interrupt mask - \arg ENET_DMA_INT_TIE: transmit interrupt enable - \arg ENET_DMA_INT_TPSIE: transmit process stopped interrupt enable - \arg ENET_DMA_INT_TBUIE: transmit buffer unavailable interrupt enable - \arg ENET_DMA_INT_TJTIE: transmit jabber timeout interrupt enable - \arg ENET_DMA_INT_ROIE: receive overflow interrupt enable - \arg ENET_DMA_INT_TUIE: transmit underflow interrupt enable - \arg ENET_DMA_INT_RIE: receive interrupt enable - \arg ENET_DMA_INT_RBUIE: receive buffer unavailable interrupt enable - \arg ENET_DMA_INT_RPSIE: receive process stopped interrupt enable - \arg ENET_DMA_INT_RWTIE: receive watchdog timeout interrupt enable - \arg ENET_DMA_INT_ETIE: early transmit interrupt enable - \arg ENET_DMA_INT_FBEIE: fatal bus error interrupt enable - \arg ENET_DMA_INT_ERIE: early receive interrupt enable - \arg ENET_DMA_INT_AIE: abnormal interrupt summary enable - \arg ENET_DMA_INT_NIE: normal interrupt summary enable - \param[out] none - \retval none -*/ -void enet_interrupt_disable(enet_int_enum enet_int) -{ - if(DMA_INTEN_REG_OFFSET == ((uint32_t)enet_int >> 6)){ - /* ENET_DMA_INTEN register interrupt */ - ENET_REG_VAL(enet_int) &= ~BIT(ENET_BIT_POS(enet_int)); - }else{ - /* other INTMSK register interrupt */ - ENET_REG_VAL(enet_int) |= BIT(ENET_BIT_POS(enet_int)); - } -} - -/*! - \brief get ENET MAC/MSC/DMA interrupt flag - \param[in] int_flag: ENET interrupt flag, - only one parameter can be selected which is shown as below - \arg ENET_MAC_INT_FLAG_WUM: WUM status flag - \arg ENET_MAC_INT_FLAG_MSC: MSC status flag - \arg ENET_MAC_INT_FLAG_MSCR: MSC receive status flag - \arg ENET_MAC_INT_FLAG_MSCT: MSC transmit status flag - \arg ENET_MAC_INT_FLAG_TMST: time stamp trigger status flag - \arg ENET_MSC_INT_FLAG_RFCE: received frames CRC error flag - \arg ENET_MSC_INT_FLAG_RFAE: received frames alignment error flag - \arg ENET_MSC_INT_FLAG_RGUF: received good unicast frames flag - \arg ENET_MSC_INT_FLAG_TGFSC: transmitted good frames single collision flag - \arg ENET_MSC_INT_FLAG_TGFMSC: transmitted good frames more single collision flag - \arg ENET_MSC_INT_FLAG_TGF: transmitted good frames flag - \arg ENET_DMA_INT_FLAG_TS: transmit status flag - \arg ENET_DMA_INT_FLAG_TPS: transmit process stopped status flag - \arg ENET_DMA_INT_FLAG_TBU: transmit buffer unavailable status flag - \arg ENET_DMA_INT_FLAG_TJT: transmit jabber timeout status flag - \arg ENET_DMA_INT_FLAG_RO: receive overflow status flag - \arg ENET_DMA_INT_FLAG_TU: transmit underflow status flag - \arg ENET_DMA_INT_FLAG_RS: receive status flag - \arg ENET_DMA_INT_FLAG_RBU: receive buffer unavailable status flag - \arg ENET_DMA_INT_FLAG_RPS: receive process stopped status flag - \arg ENET_DMA_INT_FLAG_RWT: receive watchdog timeout status flag - \arg ENET_DMA_INT_FLAG_ET: early transmit status flag - \arg ENET_DMA_INT_FLAG_FBE: fatal bus error status flag - \arg ENET_DMA_INT_FLAG_ER: early receive status flag - \arg ENET_DMA_INT_FLAG_AI: abnormal interrupt summary flag - \arg ENET_DMA_INT_FLAG_NI: normal interrupt summary flag - \arg ENET_DMA_INT_FLAG_MSC: MSC status flag - \arg ENET_DMA_INT_FLAG_WUM: WUM status flag - \arg ENET_DMA_INT_FLAG_TST: timestamp trigger status flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus enet_interrupt_flag_get(enet_int_flag_enum int_flag) -{ - if(RESET != (ENET_REG_VAL(int_flag) & BIT(ENET_BIT_POS(int_flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear ENET DMA interrupt flag - \param[in] int_flag_clear: clear ENET interrupt flag, - only one parameter can be selected which is shown as below - \arg ENET_DMA_INT_FLAG_TS_CLR: transmit status flag - \arg ENET_DMA_INT_FLAG_TPS_CLR: transmit process stopped status flag - \arg ENET_DMA_INT_FLAG_TBU_CLR: transmit buffer unavailable status flag - \arg ENET_DMA_INT_FLAG_TJT_CLR: transmit jabber timeout status flag - \arg ENET_DMA_INT_FLAG_RO_CLR: receive overflow status flag - \arg ENET_DMA_INT_FLAG_TU_CLR: transmit underflow status flag - \arg ENET_DMA_INT_FLAG_RS_CLR: receive status flag - \arg ENET_DMA_INT_FLAG_RBU_CLR: receive buffer unavailable status flag - \arg ENET_DMA_INT_FLAG_RPS_CLR: receive process stopped status flag - \arg ENET_DMA_INT_FLAG_RWT_CLR: receive watchdog timeout status flag - \arg ENET_DMA_INT_FLAG_ET_CLR: early transmit status flag - \arg ENET_DMA_INT_FLAG_FBE_CLR: fatal bus error status flag - \arg ENET_DMA_INT_FLAG_ER_CLR: early receive status flag - \arg ENET_DMA_INT_FLAG_AI_CLR: abnormal interrupt summary flag - \arg ENET_DMA_INT_FLAG_NI_CLR: normal interrupt summary flag - \param[out] none - \retval none -*/ -void enet_interrupt_flag_clear(enet_int_flag_clear_enum int_flag_clear) -{ - /* write 1 to the corresponding bit in ENET_DMA_STAT, to clear it */ - ENET_REG_VAL(int_flag_clear) = BIT(ENET_BIT_POS(int_flag_clear)); -} - -/*! - \brief ENET Tx function enable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_tx_enable(void) -{ - ENET_MAC_CFG |= ENET_MAC_CFG_TEN; - enet_txfifo_flush(); - ENET_DMA_CTL |= ENET_DMA_CTL_STE; -} - -/*! - \brief ENET Tx function disable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_tx_disable(void) -{ - ENET_DMA_CTL &= ~ENET_DMA_CTL_STE; - enet_txfifo_flush(); - ENET_MAC_CFG &= ~ENET_MAC_CFG_TEN; -} - -/*! - \brief ENET Rx function enable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_rx_enable(void) -{ - ENET_MAC_CFG |= ENET_MAC_CFG_REN; - ENET_DMA_CTL |= ENET_DMA_CTL_SRE; -} - -/*! - \brief ENET Rx function disable (include MAC and DMA module) - \param[in] none - \param[out] none - \retval none -*/ -void enet_rx_disable(void) -{ - ENET_DMA_CTL &= ~ENET_DMA_CTL_SRE; - ENET_MAC_CFG &= ~ENET_MAC_CFG_REN; -} - -/*! - \brief put registers value into the application buffer - \param[in] type: register type which will be get, refer to enet_registers_type_enum, - only one parameter can be selected which is shown as below - \arg ALL_MAC_REG: get the registers within the offset scope between ENET_MAC_CFG and ENET_MAC_FCTH - \arg ALL_MSC_REG: get the registers within the offset scope between ENET_MSC_CTL and ENET_MSC_RGUFCNT - \arg ALL_PTP_REG: get the registers within the offset scope between ENET_PTP_TSCTL and ENET_PTP_PPSCTL - \arg ALL_DMA_REG: get the registers within the offset scope between ENET_DMA_BCTL and ENET_DMA_CRBADDR - \param[in] num: the number of registers that the user want to get - \param[out] preg: the application buffer pointer for storing the register value - \retval none -*/ -void enet_registers_get(enet_registers_type_enum type, uint32_t *preg, uint32_t num) -{ - uint32_t offset = 0U, max = 0U, limit = 0U; - - offset = (uint32_t)type; - max = (uint32_t)type + num; - limit = sizeof(enet_reg_tab)/sizeof(uint16_t); - - /* prevent element in this array is out of range */ - if(max > limit){ - max = limit; - } - - for(; offset < max; offset++){ - /* get value of the corresponding register */ - *preg = REG32((ENET) + enet_reg_tab[offset]); - preg++; - } -} - -/*! - \brief get the enet debug status from the debug register - \param[in] mac_debug: enet debug status, - only one parameter can be selected which is shown as below - \arg ENET_MAC_RECEIVER_NOT_IDLE: MAC receiver is not in idle state - \arg ENET_RX_ASYNCHRONOUS_FIFO_STATE: Rx asynchronous FIFO status - \arg ENET_RXFIFO_WRITING: RxFIFO is doing write operation - \arg ENET_RXFIFO_READ_STATUS: RxFIFO read operation status - \arg ENET_RXFIFO_STATE: RxFIFO state - \arg ENET_MAC_TRANSMITTER_NOT_IDLE: MAC transmitter is not in idle state - \arg ENET_MAC_TRANSMITTER_STATUS: status of MAC transmitter - \arg ENET_PAUSE_CONDITION_STATUS: pause condition status - \arg ENET_TXFIFO_READ_STATUS: TxFIFO read operation status - \arg ENET_TXFIFO_WRITING: TxFIFO is doing write operation - \arg ENET_TXFIFO_NOT_EMPTY: TxFIFO is not empty - \arg ENET_TXFIFO_FULL: TxFIFO is full - \param[out] none - \retval value of the status users want to get -*/ -uint32_t enet_debug_status_get(uint32_t mac_debug) -{ - uint32_t temp_state = 0U; - - switch(mac_debug){ - case ENET_RX_ASYNCHRONOUS_FIFO_STATE: - temp_state = GET_MAC_DBG_RXAFS(ENET_MAC_DBG); - break; - case ENET_RXFIFO_READ_STATUS: - temp_state = GET_MAC_DBG_RXFRS(ENET_MAC_DBG); - break; - case ENET_RXFIFO_STATE: - temp_state = GET_MAC_DBG_RXFS(ENET_MAC_DBG); - break; - case ENET_MAC_TRANSMITTER_STATUS: - temp_state = GET_MAC_DBG_SOMT(ENET_MAC_DBG); - break; - case ENET_TXFIFO_READ_STATUS: - temp_state = GET_MAC_DBG_TXFRS(ENET_MAC_DBG); - break; - default: - if(RESET != (ENET_MAC_DBG & mac_debug)){ - temp_state = 0x1U; - } - break; - } - return temp_state; -} - -/*! - \brief enable the MAC address filter - \param[in] mac_addr: select which MAC address will be enable - \arg ENET_MAC_ADDRESS1: enable MAC address 1 filter - \arg ENET_MAC_ADDRESS2: enable MAC address 2 filter - \arg ENET_MAC_ADDRESS3: enable MAC address 3 filter - \param[out] none - \retval none -*/ -void enet_address_filter_enable(enet_macaddress_enum mac_addr) -{ - REG32(ENET_ADDRH_BASE + mac_addr) |= ENET_MAC_ADDR1H_AFE; -} - -/*! - \brief disable the MAC address filter - \param[in] mac_addr: select which MAC address will be disable, - only one parameter can be selected which is shown as below - \arg ENET_MAC_ADDRESS1: disable MAC address 1 filter - \arg ENET_MAC_ADDRESS2: disable MAC address 2 filter - \arg ENET_MAC_ADDRESS3: disable MAC address 3 filter - \param[out] none - \retval none -*/ -void enet_address_filter_disable(enet_macaddress_enum mac_addr) -{ - REG32(ENET_ADDRH_BASE + mac_addr) &= ~ENET_MAC_ADDR1H_AFE; -} - -/*! - \brief configure the MAC address filter - \param[in] mac_addr: select which MAC address will be configured, - only one parameter can be selected which is shown as below - \arg ENET_MAC_ADDRESS1: configure MAC address 1 filter - \arg ENET_MAC_ADDRESS2: configure MAC address 2 filter - \arg ENET_MAC_ADDRESS3: configure MAC address 3 filter - \param[in] addr_mask: select which MAC address bytes will be mask, - one or more parameters can be selected which are shown as below - \arg ENET_ADDRESS_MASK_BYTE0: mask ENET_MAC_ADDR1L[7:0] bits - \arg ENET_ADDRESS_MASK_BYTE1: mask ENET_MAC_ADDR1L[15:8] bits - \arg ENET_ADDRESS_MASK_BYTE2: mask ENET_MAC_ADDR1L[23:16] bits - \arg ENET_ADDRESS_MASK_BYTE3: mask ENET_MAC_ADDR1L [31:24] bits - \arg ENET_ADDRESS_MASK_BYTE4: mask ENET_MAC_ADDR1H [7:0] bits - \arg ENET_ADDRESS_MASK_BYTE5: mask ENET_MAC_ADDR1H [15:8] bits - \param[in] filter_type: select which MAC address filter type will be selected, - only one parameter can be selected which is shown as below - \arg ENET_ADDRESS_FILTER_SA: The MAC address is used to compared with the SA field of the received frame - \arg ENET_ADDRESS_FILTER_DA: The MAC address is used to compared with the DA field of the received frame - \param[out] none - \retval none -*/ -void enet_address_filter_config(enet_macaddress_enum mac_addr, uint32_t addr_mask, uint32_t filter_type) -{ - uint32_t reg; - - /* get the address filter register value which is to be configured */ - reg = REG32(ENET_ADDRH_BASE + mac_addr); - - /* clear and configure the address filter register */ - reg &= ~(ENET_MAC_ADDR1H_MB | ENET_MAC_ADDR1H_SAF); - reg |= (addr_mask | filter_type); - REG32(ENET_ADDRH_BASE + mac_addr) = reg; -} - -/*! - \brief PHY interface configuration (configure SMI clock and reset PHY chip) - \param[in] none - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_phy_config(void) -{ - uint32_t ahbclk; - uint32_t reg; - uint16_t phy_value; - ErrStatus enet_state = ERROR; - - /* clear the previous MDC clock */ - reg = ENET_MAC_PHY_CTL; - reg &= ~ENET_MAC_PHY_CTL_CLR; - - /* get the HCLK frequency */ - ahbclk = rcu_clock_freq_get(CK_AHB); - - /* configure MDC clock according to HCLK frequency range */ - if(ENET_RANGE(ahbclk, 20000000U, 35000000U)){ - reg |= ENET_MDC_HCLK_DIV16; - }else if(ENET_RANGE(ahbclk, 35000000U, 60000000U)){ - reg |= ENET_MDC_HCLK_DIV26; - }else if(ENET_RANGE(ahbclk, 60000000U, 100000000U)){ - reg |= ENET_MDC_HCLK_DIV42; - }else if((ENET_RANGE(ahbclk, 100000000U, 168000000U))||(168000000U == ahbclk)){ - reg |= ENET_MDC_HCLK_DIV62; - }else{ - return enet_state; - } - ENET_MAC_PHY_CTL = reg; - - /* reset PHY */ - phy_value = PHY_RESET; - if(ERROR == (enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &phy_value))){ - return enet_state; - } - /* PHY reset need some time */ - _ENET_DELAY_(ENET_DELAY_TO); - - /* check whether PHY reset is complete */ - if(ERROR == (enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BCR, &phy_value))){ - return enet_state; - } - - /* PHY reset complete */ - if(RESET == (phy_value & PHY_RESET)){ - enet_state = SUCCESS; - } - - return enet_state; -} - -/*! - \brief write to / read from a PHY register - \param[in] direction: only one parameter can be selected which is shown as below - \arg ENET_PHY_WRITE: write data to phy register - \arg ENET_PHY_READ: read data from phy register - \param[in] phy_address: 0x0 - 0x1F - \param[in] phy_reg: 0x0 - 0x1F - \param[in] pvalue: the value will be written to the PHY register in ENET_PHY_WRITE direction - \param[out] pvalue: the value will be read from the PHY register in ENET_PHY_READ direction - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_phy_write_read(enet_phydirection_enum direction, uint16_t phy_address, uint16_t phy_reg, uint16_t *pvalue) -{ - uint32_t reg, phy_flag; - uint32_t timeout = 0U; - ErrStatus enet_state = ERROR; - - /* configure ENET_MAC_PHY_CTL with write/read operation */ - reg = ENET_MAC_PHY_CTL; - reg &= ~(ENET_MAC_PHY_CTL_PB | ENET_MAC_PHY_CTL_PW | ENET_MAC_PHY_CTL_PR | ENET_MAC_PHY_CTL_PA); - reg |= (direction | MAC_PHY_CTL_PR(phy_reg) | MAC_PHY_CTL_PA(phy_address) | ENET_MAC_PHY_CTL_PB); - - /* if do the write operation, write value to the register */ - if(ENET_PHY_WRITE == direction){ - ENET_MAC_PHY_DATA = *pvalue; - } - - /* do PHY write/read operation, and wait the operation complete */ - ENET_MAC_PHY_CTL = reg; - do{ - phy_flag = (ENET_MAC_PHY_CTL & ENET_MAC_PHY_CTL_PB); - timeout++; - } - while((RESET != phy_flag) && (ENET_DELAY_TO != timeout)); - - /* write/read operation complete */ - if(RESET == (ENET_MAC_PHY_CTL & ENET_MAC_PHY_CTL_PB)){ - enet_state = SUCCESS; - } - - /* if do the read operation, get value from the register */ - if(ENET_PHY_READ == direction){ - *pvalue = (uint16_t)ENET_MAC_PHY_DATA; - } - - return enet_state; -} - -/*! - \brief enable the loopback function of PHY chip - \param[in] none - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_phyloopback_enable(void) -{ - uint16_t temp_phy = 0U; - ErrStatus phy_state = ERROR; - - /* get the PHY configuration to update it */ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BCR, &temp_phy); - - /* enable the PHY loopback mode */ - temp_phy |= PHY_LOOPBACK; - - /* update the PHY control register with the new configuration */ - phy_state = enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &temp_phy); - - return phy_state; -} - -/*! - \brief disable the loopback function of PHY chip - \param[in] none - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_phyloopback_disable(void) -{ - uint16_t temp_phy = 0U; - ErrStatus phy_state = ERROR; - - /* get the PHY configuration to update it */ - enet_phy_write_read(ENET_PHY_READ, PHY_ADDRESS, PHY_REG_BCR, &temp_phy); - - /* disable the PHY loopback mode */ - temp_phy &= (uint16_t)~PHY_LOOPBACK; - - /* update the PHY control register with the new configuration */ - phy_state = enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, PHY_REG_BCR, &temp_phy); - - return phy_state; -} - -/*! - \brief enable ENET forward feature - \param[in] feature: the feature of ENET forward mode, - one or more parameters can be selected which are shown as below - \arg ENET_AUTO_PADCRC_DROP: the function of the MAC strips the Pad/FCS field on received frames - \arg ENET_TYPEFRAME_CRC_DROP: the function that FCS field(last 4 bytes) of frame will be dropped before forwarding - \arg ENET_FORWARD_ERRFRAMES: the function that all frame received with error except runt error are forwarded to memory - \arg ENET_FORWARD_UNDERSZ_GOODFRAMES: the function that forwarding undersized good frames - \param[out] none - \retval none -*/ -void enet_forward_feature_enable(uint32_t feature) -{ - uint32_t mask; - - mask = (feature & (~(ENET_FORWARD_ERRFRAMES | ENET_FORWARD_UNDERSZ_GOODFRAMES))); - ENET_MAC_CFG |= mask; - - mask = (feature & (~(ENET_AUTO_PADCRC_DROP | ENET_TYPEFRAME_CRC_DROP))); - ENET_DMA_CTL |= (mask >> 2); -} - -/*! - \brief disable ENET forward feature - \param[in] feature: the feature of ENET forward mode, - one or more parameters can be selected which are shown as below - \arg ENET_AUTO_PADCRC_DROP: the automatic zero-quanta generation function - \arg ENET_TYPEFRAME_CRC_DROP: the flow control operation in the MAC - \arg ENET_FORWARD_ERRFRAMES: decoding function for the received pause frame and process it - \arg ENET_FORWARD_UNDERSZ_GOODFRAMES: back pressure operation in the MAC(only use in half-dulex mode) - \param[out] none - \retval none -*/ -void enet_forward_feature_disable(uint32_t feature) -{ - uint32_t mask; - - mask = (feature & (~(ENET_FORWARD_ERRFRAMES | ENET_FORWARD_UNDERSZ_GOODFRAMES))); - ENET_MAC_CFG &= ~mask; - - mask = (feature & (~(ENET_AUTO_PADCRC_DROP | ENET_TYPEFRAME_CRC_DROP))); - ENET_DMA_CTL &= ~(mask >> 2); -} - -/*! - \brief enable ENET fliter feature - \param[in] feature: the feature of ENET fliter mode, - one or more parameters can be selected which are shown as below - \arg ENET_SRC_FILTER: filter source address function - \arg ENET_SRC_FILTER_INVERSE: inverse source address filtering result function - \arg ENET_DEST_FILTER_INVERSE: inverse DA filtering result function - \arg ENET_MULTICAST_FILTER_PASS: pass all multicast frames function - \arg ENET_MULTICAST_FILTER_HASH_MODE: HASH multicast filter function - \arg ENET_UNICAST_FILTER_HASH_MODE: HASH unicast filter function - \arg ENET_FILTER_MODE_EITHER: HASH or perfect filter function - \param[out] none - \retval none -*/ -void enet_fliter_feature_enable(uint32_t feature) -{ - ENET_MAC_FRMF |= feature; -} - -/*! - \brief disable ENET fliter feature - \param[in] feature: the feature of ENET fliter mode, - one or more parameters can be selected which are shown as below - \arg ENET_SRC_FILTER: filter source address function - \arg ENET_SRC_FILTER_INVERSE: inverse source address filtering result function - \arg ENET_DEST_FILTER_INVERSE: inverse DA filtering result function - \arg ENET_MULTICAST_FILTER_PASS: pass all multicast frames function - \arg ENET_MULTICAST_FILTER_HASH_MODE: HASH multicast filter function - \arg ENET_UNICAST_FILTER_HASH_MODE: HASH unicast filter function - \arg ENET_FILTER_MODE_EITHER: HASH or perfect filter function - \param[out] none - \retval none -*/ -void enet_fliter_feature_disable(uint32_t feature) -{ - ENET_MAC_FRMF &= ~feature; -} - -/*! - \brief generate the pause frame, ENET will send pause frame after enable transmit flow control - this function only use in full-dulex mode - \param[in] none - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_pauseframe_generate(void) -{ - ErrStatus enet_state =ERROR; - uint32_t temp = 0U; - - /* in full-duplex mode, must make sure this bit is 0 before writing register */ - temp = ENET_MAC_FCTL & ENET_MAC_FCTL_FLCBBKPA; - if(RESET == temp){ - ENET_MAC_FCTL |= ENET_MAC_FCTL_FLCBBKPA; - enet_state = SUCCESS; - } - return enet_state; -} - -/*! - \brief configure the pause frame detect type - \param[in] detect: pause frame detect type, - only one parameter can be selected which is shown as below - \arg ENET_MAC0_AND_UNIQUE_ADDRESS_PAUSEDETECT: besides the unique multicast address, MAC can also - use the MAC0 address to detecting pause frame - \arg ENET_UNIQUE_PAUSEDETECT: only the unique multicast address for pause frame which is specified - in IEEE802.3 can be detected - \param[out] none - \retval none -*/ -void enet_pauseframe_detect_config(uint32_t detect) -{ - ENET_MAC_FCTL &= ~ENET_MAC_FCTL_UPFDT; - ENET_MAC_FCTL |= detect; -} - -/*! - \brief configure the pause frame parameters - \param[in] pausetime: pause time in transmit pause control frame - \param[in] pause_threshold: the threshold of the pause timer for retransmitting frames automatically, - this value must make sure to be less than configured pause time, only one parameter can be - selected which is shown as below - \arg ENET_PAUSETIME_MINUS4: pause time minus 4 slot times - \arg ENET_PAUSETIME_MINUS28: pause time minus 28 slot times - \arg ENET_PAUSETIME_MINUS144: pause time minus 144 slot times - \arg ENET_PAUSETIME_MINUS256: pause time minus 256 slot times - \param[out] none - \retval none -*/ -void enet_pauseframe_config(uint32_t pausetime, uint32_t pause_threshold) -{ - ENET_MAC_FCTL &= ~(ENET_MAC_FCTL_PTM | ENET_MAC_FCTL_PLTS); - ENET_MAC_FCTL |= (MAC_FCTL_PTM(pausetime) | pause_threshold); -} - -/*! - \brief configure the threshold of the flow control(deactive and active threshold) - \param[in] deactive: the threshold of the deactive flow control, this value - should always be less than active flow control value, only one - parameter can be selected which is shown as below - \arg ENET_DEACTIVE_THRESHOLD_256BYTES: threshold level is 256 bytes - \arg ENET_DEACTIVE_THRESHOLD_512BYTES: threshold level is 512 bytes - \arg ENET_DEACTIVE_THRESHOLD_768BYTES: threshold level is 768 bytes - \arg ENET_DEACTIVE_THRESHOLD_1024BYTES: threshold level is 1024 bytes - \arg ENET_DEACTIVE_THRESHOLD_1280BYTES: threshold level is 1280 bytes - \arg ENET_DEACTIVE_THRESHOLD_1536BYTES: threshold level is 1536 bytes - \arg ENET_DEACTIVE_THRESHOLD_1792BYTES: threshold level is 1792 bytes - \param[in] active: the threshold of the active flow control, only one parameter - can be selected which is shown as below - \arg ENET_ACTIVE_THRESHOLD_256BYTES: threshold level is 256 bytes - \arg ENET_ACTIVE_THRESHOLD_512BYTES: threshold level is 512 bytes - \arg ENET_ACTIVE_THRESHOLD_768BYTES: threshold level is 768 bytes - \arg ENET_ACTIVE_THRESHOLD_1024BYTES: threshold level is 1024 bytes - \arg ENET_ACTIVE_THRESHOLD_1280BYTES: threshold level is 1280 bytes - \arg ENET_ACTIVE_THRESHOLD_1536BYTES: threshold level is 1536 bytes - \arg ENET_ACTIVE_THRESHOLD_1792BYTES: threshold level is 1792 bytes - \param[out] none - \retval none -*/ -void enet_flowcontrol_threshold_config(uint32_t deactive, uint32_t active) -{ - ENET_MAC_FCTH = ((deactive | active) >> 8); -} - -/*! - \brief enable ENET flow control feature - \param[in] feature: the feature of ENET flow control mode - one or more parameters can be selected which are shown as below - \arg ENET_ZERO_QUANTA_PAUSE: the automatic zero-quanta generation function - \arg ENET_TX_FLOWCONTROL: the flow control operation in the MAC - \arg ENET_RX_FLOWCONTROL: decoding function for the received pause frame and process it - \arg ENET_BACK_PRESSURE: back pressure operation in the MAC(only use in half-dulex mode) - \param[out] none - \retval none -*/ -void enet_flowcontrol_feature_enable(uint32_t feature) -{ - if(RESET != (feature & ENET_ZERO_QUANTA_PAUSE)){ - ENET_MAC_FCTL &= ~ENET_ZERO_QUANTA_PAUSE; - } - feature &= ~ENET_ZERO_QUANTA_PAUSE; - ENET_MAC_FCTL |= feature; -} - -/*! - \brief disable ENET flow control feature - \param[in] feature: the feature of ENET flow control mode - one or more parameters can be selected which are shown as below - \arg ENET_ZERO_QUANTA_PAUSE: the automatic zero-quanta generation function - \arg ENET_TX_FLOWCONTROL: the flow control operation in the MAC - \arg ENET_RX_FLOWCONTROL: decoding function for the received pause frame and process it - \arg ENET_BACK_PRESSURE: back pressure operation in the MAC(only use in half-dulex mode) - \param[out] none - \retval none -*/ -void enet_flowcontrol_feature_disable(uint32_t feature) -{ - if(RESET != (feature & ENET_ZERO_QUANTA_PAUSE)){ - ENET_MAC_FCTL |= ENET_ZERO_QUANTA_PAUSE; - } - feature &= ~ENET_ZERO_QUANTA_PAUSE; - ENET_MAC_FCTL &= ~feature; -} - -/*! - \brief get the dma transmit/receive process state - \param[in] direction: choose the direction of dma process which users want to check, - refer to enet_dmadirection_enum, only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: dma transmit process - \arg ENET_DMA_RX: dma receive process - \param[out] none - \retval state of dma process, the value range shows below: - ENET_RX_STATE_STOPPED, ENET_RX_STATE_FETCHING, ENET_RX_STATE_WAITING, - ENET_RX_STATE_SUSPENDED, ENET_RX_STATE_CLOSING, ENET_RX_STATE_QUEUING, - ENET_TX_STATE_STOPPED, ENET_TX_STATE_FETCHING, ENET_TX_STATE_WAITING, - ENET_TX_STATE_READING, ENET_TX_STATE_SUSPENDED, ENET_TX_STATE_CLOSING -*/ -uint32_t enet_dmaprocess_state_get(enet_dmadirection_enum direction) -{ - uint32_t reval; - reval = (uint32_t)(ENET_DMA_STAT & (uint32_t)direction); - return reval; -} - -/*! - \brief poll the DMA transmission/reception enable by writing any value to the - ENET_DMA_TPEN/ENET_DMA_RPEN register, this will make the DMA to resume transmission/reception - \param[in] direction: choose the direction of DMA process which users want to resume, - refer to enet_dmadirection_enum, only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA transmit process - \arg ENET_DMA_RX: DMA receive process - \param[out] none - \retval none -*/ -void enet_dmaprocess_resume(enet_dmadirection_enum direction) -{ - if(ENET_DMA_TX == direction){ - ENET_DMA_TPEN = 0U; - }else{ - ENET_DMA_RPEN = 0U; - } -} - -/*! - \brief check and recover the Rx process - \param[in] none - \param[out] none - \retval none -*/ -void enet_rxprocess_check_recovery(void) -{ - uint32_t status; - - /* get DAV information of current RxDMA descriptor */ - status = dma_current_rxdesc->status; - status &= ENET_RDES0_DAV; - - /* if current descriptor is owned by DMA, but the descriptor address mismatches with - receive descriptor address pointer updated by RxDMA controller */ - if((ENET_DMA_CRDADDR != ((uint32_t)dma_current_rxdesc)) && - (ENET_RDES0_DAV == status)){ - dma_current_rxdesc = (enet_descriptors_struct*)ENET_DMA_CRDADDR; - } -} - -/*! - \brief flush the ENET transmit FIFO, and wait until the flush operation completes - \param[in] none - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus enet_txfifo_flush(void) -{ - uint32_t flush_state; - uint32_t timeout = 0U; - ErrStatus enet_state = ERROR; - - /* set the FTF bit for flushing transmit FIFO */ - ENET_DMA_CTL |= ENET_DMA_CTL_FTF; - /* wait until the flush operation completes */ - do{ - flush_state = ENET_DMA_CTL & ENET_DMA_CTL_FTF; - timeout++; - }while((RESET != flush_state) && (timeout < ENET_DELAY_TO)); - /* return ERROR due to timeout */ - if(RESET == flush_state){ - enet_state = SUCCESS; - } - - return enet_state; -} - -/*! - \brief get the transmit/receive address of current descriptor, or current buffer, or descriptor table - \param[in] addr_get: choose the address which users want to get, refer to enet_desc_reg_enum, - only one parameter can be selected which is shown as below - \arg ENET_RX_DESC_TABLE: the start address of the receive descriptor table - \arg ENET_RX_CURRENT_DESC: the start descriptor address of the current receive descriptor read by - the RxDMA controller - \arg ENET_RX_CURRENT_BUFFER: the current receive buffer address being read by the RxDMA controller - \arg ENET_TX_DESC_TABLE: the start address of the transmit descriptor table - \arg ENET_TX_CURRENT_DESC: the start descriptor address of the current transmit descriptor read by - the TxDMA controller - \arg ENET_TX_CURRENT_BUFFER: the current transmit buffer address being read by the TxDMA controller - \param[out] none - \retval address value -*/ -uint32_t enet_current_desc_address_get(enet_desc_reg_enum addr_get) -{ - uint32_t reval = 0U; - - reval = REG32((ENET) +(uint32_t)addr_get); - return reval; -} - -/*! - \brief get the Tx or Rx descriptor information - \param[in] desc: the descriptor pointer which users want to get information - \param[in] info_get: the descriptor information type which is selected, - only one parameter can be selected which is shown as below - \arg RXDESC_BUFFER_1_SIZE: receive buffer 1 size - \arg RXDESC_BUFFER_2_SIZE: receive buffer 2 size - \arg RXDESC_FRAME_LENGTH: the byte length of the received frame that was transferred to the buffer - \arg TXDESC_COLLISION_COUNT: the number of collisions occurred before the frame was transmitted - \arg RXDESC_BUFFER_1_ADDR: the buffer1 address of the Rx frame - \arg TXDESC_BUFFER_1_ADDR: the buffer1 address of the Tx frame - \param[out] none - \retval descriptor information, if value is 0xFFFFFFFFU, means the false input parameter -*/ -uint32_t enet_desc_information_get(enet_descriptors_struct *desc, enet_descstate_enum info_get) -{ - uint32_t reval = 0xFFFFFFFFU; - - switch(info_get){ - case RXDESC_BUFFER_1_SIZE: - reval = GET_RDES1_RB1S(desc->control_buffer_size); - break; - case RXDESC_BUFFER_2_SIZE: - reval = GET_RDES1_RB2S(desc->control_buffer_size); - break; - case RXDESC_FRAME_LENGTH: - reval = GET_RDES0_FRML(desc->status); - if(reval > 4U){ - reval = reval - 4U; - - /* if is a type frame, and CRC is not included in forwarding frame */ - if((RESET != (ENET_MAC_CFG & ENET_MAC_CFG_TFCD)) && (RESET != (desc->status & ENET_RDES0_FRMT))){ - reval = reval + 4U; - } - }else{ - reval = 0U; - } - - break; - case RXDESC_BUFFER_1_ADDR: - reval = desc->buffer1_addr; - break; - case TXDESC_BUFFER_1_ADDR: - reval = desc->buffer1_addr; - break; - case TXDESC_COLLISION_COUNT: - reval = GET_TDES0_COCNT(desc->status); - break; - default: - break; - } - return reval; -} - -/*! - \brief get the number of missed frames during receiving - \param[in] none - \param[out] rxfifo_drop: pointer to the number of frames dropped by RxFIFO - \param[out] rxdma_drop: pointer to the number of frames missed by the RxDMA controller - \retval none -*/ -void enet_missed_frame_counter_get(uint32_t *rxfifo_drop, uint32_t *rxdma_drop) -{ - uint32_t temp_counter = 0U; - - temp_counter = ENET_DMA_MFBOCNT; - *rxfifo_drop = GET_DMA_MFBOCNT_MSFA(temp_counter); - *rxdma_drop = GET_DMA_MFBOCNT_MSFC(temp_counter); -} - -/*! - \brief get the bit flag of ENET DMA descriptor - \param[in] desc: the descriptor pointer which users want to get flag - \param[in] desc_flag: the bit flag of ENET DMA descriptor, - only one parameter can be selected which is shown as below - \arg ENET_TDES0_DB: deferred - \arg ENET_TDES0_UFE: underflow error - \arg ENET_TDES0_EXD: excessive deferral - \arg ENET_TDES0_VFRM: VLAN frame - \arg ENET_TDES0_ECO: excessive collision - \arg ENET_TDES0_LCO: late collision - \arg ENET_TDES0_NCA: no carrier - \arg ENET_TDES0_LCA: loss of carrier - \arg ENET_TDES0_IPPE: IP payload error - \arg ENET_TDES0_FRMF: frame flushed - \arg ENET_TDES0_JT: jabber timeout - \arg ENET_TDES0_ES: error summary - \arg ENET_TDES0_IPHE: IP header error - \arg ENET_TDES0_TTMSS: transmit timestamp status - \arg ENET_TDES0_TCHM: the second address chained mode - \arg ENET_TDES0_TERM: transmit end of ring mode - \arg ENET_TDES0_TTSEN: transmit timestamp function enable - \arg ENET_TDES0_DPAD: disable adding pad - \arg ENET_TDES0_DCRC: disable CRC - \arg ENET_TDES0_FSG: first segment - \arg ENET_TDES0_LSG: last segment - \arg ENET_TDES0_INTC: interrupt on completion - \arg ENET_TDES0_DAV: DAV bit - - \arg ENET_RDES0_PCERR: payload checksum error - \arg ENET_RDES0_EXSV: extended status valid - \arg ENET_RDES0_CERR: CRC error - \arg ENET_RDES0_DBERR: dribble bit error - \arg ENET_RDES0_RERR: receive error - \arg ENET_RDES0_RWDT: receive watchdog timeout - \arg ENET_RDES0_FRMT: frame type - \arg ENET_RDES0_LCO: late collision - \arg ENET_RDES0_IPHERR: IP frame header error - \arg ENET_RDES0_TSV: timestamp valid - \arg ENET_RDES0_LDES: last descriptor - \arg ENET_RDES0_FDES: first descriptor - \arg ENET_RDES0_VTAG: VLAN tag - \arg ENET_RDES0_OERR: overflow error - \arg ENET_RDES0_LERR: length error - \arg ENET_RDES0_SAFF: SA filter fail - \arg ENET_RDES0_DERR: descriptor error - \arg ENET_RDES0_ERRS: error summary - \arg ENET_RDES0_DAFF: destination address filter fail - \arg ENET_RDES0_DAV: descriptor available - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus enet_desc_flag_get(enet_descriptors_struct *desc, uint32_t desc_flag) -{ - FlagStatus enet_flag = RESET; - - if ((uint32_t)RESET != (desc->status & desc_flag)){ - enet_flag = SET; - } - - return enet_flag; -} - -/*! - \brief set the bit flag of ENET DMA descriptor - \param[in] desc: the descriptor pointer which users want to set flag - \param[in] desc_flag: the bit flag of ENET DMA descriptor, - only one parameter can be selected which is shown as below - \arg ENET_TDES0_VFRM: VLAN frame - \arg ENET_TDES0_FRMF: frame flushed - \arg ENET_TDES0_TCHM: the second address chained mode - \arg ENET_TDES0_TERM: transmit end of ring mode - \arg ENET_TDES0_TTSEN: transmit timestamp function enable - \arg ENET_TDES0_DPAD: disable adding pad - \arg ENET_TDES0_DCRC: disable CRC - \arg ENET_TDES0_FSG: first segment - \arg ENET_TDES0_LSG: last segment - \arg ENET_TDES0_INTC: interrupt on completion - \arg ENET_TDES0_DAV: DAV bit - \arg ENET_RDES0_DAV: descriptor available - \param[out] none - \retval none -*/ -void enet_desc_flag_set(enet_descriptors_struct *desc, uint32_t desc_flag) -{ - desc->status |= desc_flag; -} - -/*! - \brief clear the bit flag of ENET DMA descriptor - \param[in] desc: the descriptor pointer which users want to clear flag - \param[in] desc_flag: the bit flag of ENET DMA descriptor, - only one parameter can be selected which is shown as below - \arg ENET_TDES0_VFRM: VLAN frame - \arg ENET_TDES0_FRMF: frame flushed - \arg ENET_TDES0_TCHM: the second address chained mode - \arg ENET_TDES0_TERM: transmit end of ring mode - \arg ENET_TDES0_TTSEN: transmit timestamp function enable - \arg ENET_TDES0_DPAD: disable adding pad - \arg ENET_TDES0_DCRC: disable CRC - \arg ENET_TDES0_FSG: first segment - \arg ENET_TDES0_LSG: last segment - \arg ENET_TDES0_INTC: interrupt on completion - \arg ENET_TDES0_DAV: DAV bit - \arg ENET_RDES0_DAV: descriptor available - \param[out] none - \retval none -*/ -void enet_desc_flag_clear(enet_descriptors_struct *desc, uint32_t desc_flag) -{ - desc->status &= ~desc_flag; -} - -/*! - \brief when receiving completed, set RS bit in ENET_DMA_STAT register will immediately set - \param[in] desc: the descriptor pointer which users want to configure - \param[out] none - \retval none -*/ -void enet_rx_desc_immediate_receive_complete_interrupt(enet_descriptors_struct *desc) -{ - desc->control_buffer_size &= ~ENET_RDES1_DINTC; -} - -/*! - \brief when receiving completed, set RS bit in ENET_DMA_STAT register will is set after a configurable delay time - \param[in] desc: the descriptor pointer which users want to configure - \param[in] delay_time: delay a time of 256*delay_time HCLK, this value must be between 0 and 0xFF - \param[out] none - \retval none -*/ -void enet_rx_desc_delay_receive_complete_interrupt(enet_descriptors_struct *desc, uint32_t delay_time) -{ - desc->control_buffer_size |= ENET_RDES1_DINTC; - ENET_DMA_RSWDC = DMA_RSWDC_WDCFRS(delay_time); -} - -/*! - \brief drop current receive frame - \param[in] none - \param[out] none - \retval none -*/ -void enet_rxframe_drop(void) -{ - /* enable reception, descriptor is owned by DMA */ - dma_current_rxdesc->status = ENET_RDES0_DAV; - - /* chained mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RCHM)){ - if(NULL != dma_current_ptp_rxdesc){ - dma_current_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->buffer2_next_desc_addr); - /* if it is the last ptp descriptor */ - if(0U != dma_current_ptp_rxdesc->status){ - /* pointer back to the first ptp descriptor address in the desc_ptptab list address */ - dma_current_ptp_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->status); - }else{ - /* ponter to the next ptp descriptor */ - dma_current_ptp_rxdesc++; - } - }else{ - dma_current_rxdesc = (enet_descriptors_struct*) (dma_current_rxdesc->buffer2_next_desc_addr); - } - - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_rxdesc = (enet_descriptors_struct*) (ENET_DMA_RDTADDR); - if(NULL != dma_current_ptp_rxdesc){ - dma_current_ptp_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->status); - } - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_rxdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_rxdesc + ETH_DMARXDESC_SIZE + GET_DMA_BCTL_DPSL(ENET_DMA_BCTL)); - if(NULL != dma_current_ptp_rxdesc){ - dma_current_ptp_rxdesc++; - } - } - } -} - -/*! - \brief enable DMA feature - \param[in] feature: the feature of DMA mode, - one or more parameters can be selected which are shown as below - \arg ENET_NO_FLUSH_RXFRAME: RxDMA does not flushes frames function - \arg ENET_SECONDFRAME_OPT: TxDMA controller operate on second frame function - \param[out] none - \retval none -*/ -void enet_dma_feature_enable(uint32_t feature) -{ - ENET_DMA_CTL |= feature; -} - -/*! - \brief disable DMA feature - \param[in] feature: the feature of DMA mode, - one or more parameters can be selected which are shown as below - \arg ENET_NO_FLUSH_RXFRAME: RxDMA does not flushes frames function - \arg ENET_SECONDFRAME_OPT: TxDMA controller operate on second frame function - \param[out] none - \retval none -*/ -void enet_dma_feature_disable(uint32_t feature) -{ - ENET_DMA_CTL &= ~feature; -} - -#ifdef SELECT_DESCRIPTORS_ENHANCED_MODE -/*! - \brief get the bit of extended status flag in ENET DMA descriptor - \param[in] desc: the descriptor pointer which users want to get the extended status flag - \param[in] desc_status: the extended status want to get, - only one parameter can be selected which is shown as below - \arg ENET_RDES4_IPPLDT: IP frame payload type - \arg ENET_RDES4_IPHERR: IP frame header error - \arg ENET_RDES4_IPPLDERR: IP frame payload error - \arg ENET_RDES4_IPCKSB: IP frame checksum bypassed - \arg ENET_RDES4_IPF4: IP frame in version 4 - \arg ENET_RDES4_IPF6: IP frame in version 6 - \arg ENET_RDES4_PTPMT: PTP message type - \arg ENET_RDES4_PTPOEF: PTP on ethernet frame - \arg ENET_RDES4_PTPVF: PTP version format - \param[out] none - \retval value of extended status -*/ -uint32_t enet_rx_desc_enhanced_status_get(enet_descriptors_struct *desc, uint32_t desc_status) -{ - uint32_t reval = 0xFFFFFFFFU; - - switch (desc_status){ - case ENET_RDES4_IPPLDT: - reval = GET_RDES4_IPPLDT(desc->extended_status); - break; - case ENET_RDES4_PTPMT: - reval = GET_RDES4_PTPMT(desc->extended_status); - break; - default: - if ((uint32_t)RESET != (desc->extended_status & desc_status)){ - reval = 1U; - }else{ - reval = 0U; - } - } - - return reval; -} - -/*! - \brief configure descriptor to work in enhanced mode - \param[in] none - \param[out] none - \retval none -*/ -void enet_desc_select_enhanced_mode(void) -{ - ENET_DMA_BCTL |= ENET_DMA_BCTL_DFM; -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in enhanced chain mode with ptp function - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[out] none - \retval none -*/ -void enet_ptp_enhanced_descriptors_chain_init(enet_dmadirection_enum direction) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc, *desc_tab; - uint8_t *buf; - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* select chain mode, and enable transmit timestamp function */ - desc_status = ENET_TDES0_TCHM | ENET_TDES0_TTSEN; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* select receive chained mode and set buffer1 size */ - desc_bufsize = ENET_RDES1_RCHM | (uint32_t)ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - } - - /* configuration each descriptor */ - for(num = 0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* if is not the last descriptor */ - if(num < (count - 1U)){ - /* configure the next descriptor address */ - desc->buffer2_next_desc_addr = (uint32_t)(desc_tab + num + 1U); - }else{ - /* when it is the last descriptor, the next descriptor address - equals to first descriptor address in descriptor table */ - desc->buffer2_next_desc_addr = (uint32_t)desc_tab; - } - } -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in enhanced ring mode with ptp function - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[out] none - \retval none -*/ -void enet_ptp_enhanced_descriptors_ring_init(enet_dmadirection_enum direction) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc; - enet_descriptors_struct *desc_tab; - uint8_t *buf; - - /* configure descriptor skip length */ - ENET_DMA_BCTL &= ~ENET_DMA_BCTL_DPSL; - ENET_DMA_BCTL |= DMA_BCTL_DPSL(0); - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* select ring mode, and enable transmit timestamp function */ - desc_status = ENET_TDES0_TTSEN; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* set buffer1 size */ - desc_bufsize = ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - } - - /* configure each descriptor */ - for(num=0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* when it is the last descriptor */ - if(num == (count - 1U)){ - if (ENET_DMA_TX == direction){ - /* configure transmit end of ring mode */ - desc->status |= ENET_TDES0_TERM; - }else{ - /* configure receive end of ring mode */ - desc->control_buffer_size |= ENET_RDES1_RERM; - } - } - } -} - -/*! - \brief receive a packet data with timestamp values to application buffer, when the DMA is in enhanced mode - \param[in] bufsize: the size of buffer which is the parameter in function - \param[out] buffer: pointer to the application buffer - note -- if the input is NULL, user should copy data in application by himself - \param[out] timestamp: pointer to the table which stores the timestamp high and low - note -- if the input is NULL, timestamp is ignored - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_ptpframe_receive_enhanced_mode(uint8_t *buffer, uint32_t bufsize, uint32_t timestamp[]) -{ - uint32_t offset = 0U, size = 0U; - uint32_t timeout = 0U; - uint32_t rdes0_tsv_flag; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_DAV)){ - return ERROR; - } - - /* if buffer pointer is null, indicates that users has copied data in application */ - if(NULL != buffer){ - /* if no error occurs, and the frame uses only one descriptor */ - if(((uint32_t)RESET == (dma_current_rxdesc->status & ENET_RDES0_ERRS)) && - ((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_LDES)) && - ((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_FDES))){ - /* get the frame length except CRC */ - size = GET_RDES0_FRML(dma_current_rxdesc->status) - 4U; - - /* if is a type frame, and CRC is not included in forwarding frame */ - if((RESET != (ENET_MAC_CFG & ENET_MAC_CFG_TFCD)) && (RESET != (dma_current_rxdesc->status & ENET_RDES0_FRMT))){ - size = size + 4U; - } - - /* to avoid situation that the frame size exceeds the buffer length */ - if(size > bufsize){ - return ERROR; - } - - /* copy data from Rx buffer to application buffer */ - for(offset = 0; offset < size; offset++){ - (*(buffer + offset)) = (*(__IO uint8_t *)((dma_current_rxdesc->buffer1_addr) + offset)); - } - }else{ - return ERROR; - } - } - - /* if timestamp pointer is null, indicates that users don't care timestamp in application */ - if(NULL != timestamp){ - /* wait for ENET_RDES0_TSV flag to be set, the timestamp value is taken and - write to the RDES6 and RDES7 */ - do{ - rdes0_tsv_flag = (dma_current_rxdesc->status & ENET_RDES0_TSV); - timeout++; - }while ((RESET == rdes0_tsv_flag) && (timeout < ENET_DELAY_TO)); - - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - return ERROR; - } - - /* clear the ENET_RDES0_TSV flag */ - dma_current_rxdesc->status &= ~ENET_RDES0_TSV; - /* get the timestamp value of the received frame */ - timestamp[0] = dma_current_rxdesc->timestamp_low; - timestamp[1] = dma_current_rxdesc->timestamp_high; - } - - /* enable reception, descriptor is owned by DMA */ - dma_current_rxdesc->status = ENET_RDES0_DAV; - - /* check Rx buffer unavailable flag status */ - if ((uint32_t)RESET != (ENET_DMA_STAT & ENET_DMA_STAT_RBU)){ - /* Clear RBU flag */ - ENET_DMA_STAT = ENET_DMA_STAT_RBU; - /* resume DMA reception by writing to the RPEN register*/ - ENET_DMA_RPEN = 0; - } - - /* update the current RxDMA descriptor pointer to the next decriptor in RxDMA decriptor table */ - /* chained mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RCHM)){ - dma_current_rxdesc = (enet_descriptors_struct*) (dma_current_rxdesc->buffer2_next_desc_addr); - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_rxdesc = (enet_descriptors_struct*) (ENET_DMA_RDTADDR); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_rxdesc = (enet_descriptors_struct*) ((uint32_t)dma_current_rxdesc + ETH_DMARXDESC_SIZE + GET_DMA_BCTL_DPSL(ENET_DMA_BCTL)); - } - } - - return SUCCESS; -} - -/*! - \brief send data with timestamp values in application buffer as a transmit packet, when the DMA is in enhanced mode - \param[in] buffer: pointer on the application buffer - note -- if the input is NULL, user should copy data in application by himself - \param[in] length: the length of frame data to be transmitted - \param[out] timestamp: pointer to the table which stores the timestamp high and low - note -- if the input is NULL, timestamp is ignored - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_ptpframe_transmit_enhanced_mode(uint8_t *buffer, uint32_t length, uint32_t timestamp[]) -{ - uint32_t offset = 0; - uint32_t dma_tbu_flag, dma_tu_flag; - uint32_t tdes0_ttmss_flag; - uint32_t timeout = 0; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_DAV)){ - return ERROR; - } - - /* only frame length no more than ENET_MAX_FRAME_SIZE is allowed */ - if(length > ENET_MAX_FRAME_SIZE){ - return ERROR; - } - - /* if buffer pointer is null, indicates that users has handled data in application */ - if(NULL != buffer){ - /* copy frame data from application buffer to Tx buffer */ - for(offset = 0; offset < length; offset++){ - (*(__IO uint8_t *)((dma_current_txdesc->buffer1_addr) + offset)) = (*(buffer + offset)); - } - } - /* set the frame length */ - dma_current_txdesc->control_buffer_size = length; - /* set the segment of frame, frame is transmitted in one descriptor */ - dma_current_txdesc->status |= ENET_TDES0_LSG | ENET_TDES0_FSG; - /* enable the DMA transmission */ - dma_current_txdesc->status |= ENET_TDES0_DAV; - - /* check Tx buffer unavailable flag status */ - dma_tbu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TBU); - dma_tu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TU); - - if ((RESET != dma_tbu_flag) || (RESET != dma_tu_flag)){ - /* Clear TBU and TU flag */ - ENET_DMA_STAT = (dma_tbu_flag | dma_tu_flag); - /* resume DMA transmission by writing to the TPEN register*/ - ENET_DMA_TPEN = 0; - } - - /* if timestamp pointer is null, indicates that users don't care timestamp in application */ - if(NULL != timestamp){ - /* wait for ENET_TDES0_TTMSS flag to be set, a timestamp was captured */ - do{ - tdes0_ttmss_flag = (dma_current_txdesc->status & ENET_TDES0_TTMSS); - timeout++; - }while((RESET == tdes0_ttmss_flag) && (timeout < ENET_DELAY_TO)); - - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - return ERROR; - } - - /* clear the ENET_TDES0_TTMSS flag */ - dma_current_txdesc->status &= ~ENET_TDES0_TTMSS; - /* get the timestamp value of the transmit frame */ - timestamp[0] = dma_current_txdesc->timestamp_low; - timestamp[1] = dma_current_txdesc->timestamp_high; - } - - /* update the current TxDMA descriptor pointer to the next decriptor in TxDMA decriptor table*/ - /* chained mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TCHM)){ - dma_current_txdesc = (enet_descriptors_struct*) (dma_current_txdesc->buffer2_next_desc_addr); - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_txdesc = (enet_descriptors_struct*) (ENET_DMA_TDTADDR); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_txdesc = (enet_descriptors_struct*) ((uint32_t)dma_current_txdesc + ETH_DMATXDESC_SIZE + GET_DMA_BCTL_DPSL(ENET_DMA_BCTL)); - } - } - - return SUCCESS; -} - -#else - -/*! - \brief configure descriptor to work in normal mode - \param[in] none - \param[out] none - \retval none -*/ -void enet_desc_select_normal_mode(void) -{ - ENET_DMA_BCTL &= ~ENET_DMA_BCTL_DFM; -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in normal chain mode with PTP function - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[in] desc_ptptab: pointer to the first descriptor address of PTP Rx descriptor table - \param[out] none - \retval none -*/ -void enet_ptp_normal_descriptors_chain_init(enet_dmadirection_enum direction, enet_descriptors_struct *desc_ptptab) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc, *desc_tab; - uint8_t *buf; - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* select chain mode, and enable transmit timestamp function */ - desc_status = ENET_TDES0_TCHM | ENET_TDES0_TTSEN; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - dma_current_ptp_txdesc = desc_ptptab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* select receive chained mode and set buffer1 size */ - desc_bufsize = ENET_RDES1_RCHM | (uint32_t)ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - dma_current_ptp_rxdesc = desc_ptptab; - } - - /* configure each descriptor */ - for(num = 0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* if is not the last descriptor */ - if(num < (count - 1U)){ - /* configure the next descriptor address */ - desc->buffer2_next_desc_addr = (uint32_t)(desc_tab + num + 1U); - }else{ - /* when it is the last descriptor, the next descriptor address - equals to first descriptor address in descriptor table */ - desc->buffer2_next_desc_addr = (uint32_t)desc_tab; - } - /* set desc_ptptab equal to desc_tab */ - (&desc_ptptab[num])->buffer1_addr = desc->buffer1_addr; - (&desc_ptptab[num])->buffer2_next_desc_addr = desc->buffer2_next_desc_addr; - } - /* when it is the last ptp descriptor, preserve the first descriptor - address of desc_ptptab in ptp descriptor status */ - (&desc_ptptab[num-1U])->status = (uint32_t)desc_ptptab; -} - -/*! - \brief initialize the DMA Tx/Rx descriptors's parameters in normal ring mode with PTP function - \param[in] direction: the descriptors which users want to init, refer to enet_dmadirection_enum, - only one parameter can be selected which is shown as below - \arg ENET_DMA_TX: DMA Tx descriptors - \arg ENET_DMA_RX: DMA Rx descriptors - \param[in] desc_ptptab: pointer to the first descriptor address of PTP Rx descriptor table - \param[out] none - \retval none -*/ -void enet_ptp_normal_descriptors_ring_init(enet_dmadirection_enum direction, enet_descriptors_struct *desc_ptptab) -{ - uint32_t num = 0U, count = 0U, maxsize = 0U; - uint32_t desc_status = 0U, desc_bufsize = 0U; - enet_descriptors_struct *desc, *desc_tab; - uint8_t *buf; - - /* configure descriptor skip length */ - ENET_DMA_BCTL &= ~ENET_DMA_BCTL_DPSL; - ENET_DMA_BCTL |= DMA_BCTL_DPSL(0); - - /* if want to initialize DMA Tx descriptors */ - if (ENET_DMA_TX == direction){ - /* save a copy of the DMA Tx descriptors */ - desc_tab = txdesc_tab; - buf = &tx_buff[0][0]; - count = ENET_TXBUF_NUM; - maxsize = ENET_TXBUF_SIZE; - - /* select ring mode, and enable transmit timestamp function */ - desc_status = ENET_TDES0_TTSEN; - - /* configure DMA Tx descriptor table address register */ - ENET_DMA_TDTADDR = (uint32_t)desc_tab; - dma_current_txdesc = desc_tab; - dma_current_ptp_txdesc = desc_ptptab; - }else{ - /* if want to initialize DMA Rx descriptors */ - /* save a copy of the DMA Rx descriptors */ - desc_tab = rxdesc_tab; - buf = &rx_buff[0][0]; - count = ENET_RXBUF_NUM; - maxsize = ENET_RXBUF_SIZE; - - /* enable receiving */ - desc_status = ENET_RDES0_DAV; - /* select receive ring mode and set buffer1 size */ - desc_bufsize = (uint32_t)ENET_RXBUF_SIZE; - - /* configure DMA Rx descriptor table address register */ - ENET_DMA_RDTADDR = (uint32_t)desc_tab; - dma_current_rxdesc = desc_tab; - dma_current_ptp_rxdesc = desc_ptptab; - } - - /* configure each descriptor */ - for(num = 0U; num < count; num++){ - /* get the pointer to the next descriptor of the descriptor table */ - desc = desc_tab + num; - - /* configure descriptors */ - desc->status = desc_status; - desc->control_buffer_size = desc_bufsize; - desc->buffer1_addr = (uint32_t)(&buf[num * maxsize]); - - /* when it is the last descriptor */ - if(num == (count - 1U)){ - if (ENET_DMA_TX == direction){ - /* configure transmit end of ring mode */ - desc->status |= ENET_TDES0_TERM; - }else{ - /* configure receive end of ring mode */ - desc->control_buffer_size |= ENET_RDES1_RERM; - } - } - /* set desc_ptptab equal to desc_tab */ - (&desc_ptptab[num])->buffer1_addr = desc->buffer1_addr; - (&desc_ptptab[num])->buffer2_next_desc_addr = desc->buffer2_next_desc_addr; - } - /* when it is the last ptp descriptor, preserve the first descriptor - address of desc_ptptab in ptp descriptor status */ - (&desc_ptptab[num-1U])->status = (uint32_t)desc_ptptab; -} - -/*! - \brief receive a packet data with timestamp values to application buffer, when the DMA is in normal mode - \param[in] bufsize: the size of buffer which is the parameter in function - \param[out] timestamp: pointer to the table which stores the timestamp high and low - \param[out] buffer: pointer to the application buffer - note -- if the input is NULL, user should copy data in application by himself - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_ptpframe_receive_normal_mode(uint8_t *buffer, uint32_t bufsize, uint32_t timestamp[]) -{ - uint32_t offset = 0U, size = 0U; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_DAV)){ - return ERROR; - } - - /* if buffer pointer is null, indicates that users has copied data in application */ - if(NULL != buffer){ - /* if no error occurs, and the frame uses only one descriptor */ - if(((uint32_t)RESET == (dma_current_rxdesc->status & ENET_RDES0_ERRS)) && - ((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_LDES)) && - ((uint32_t)RESET != (dma_current_rxdesc->status & ENET_RDES0_FDES))){ - - /* get the frame length except CRC */ - size = GET_RDES0_FRML(dma_current_rxdesc->status) - 4U; - /* if is a type frame, and CRC is not included in forwarding frame */ - if((RESET != (ENET_MAC_CFG & ENET_MAC_CFG_TFCD)) && (RESET != (dma_current_rxdesc->status & ENET_RDES0_FRMT))){ - size = size + 4U; - } - - /* to avoid situation that the frame size exceeds the buffer length */ - if(size > bufsize){ - return ERROR; - } - - /* copy data from Rx buffer to application buffer */ - for(offset = 0U; offset < size; offset++){ - (*(buffer + offset)) = (*(__IO uint8_t *)(uint32_t)((dma_current_ptp_rxdesc->buffer1_addr) + offset)); - } - - }else{ - return ERROR; - } - } - /* copy timestamp value from Rx descriptor to application array */ - timestamp[0] = dma_current_rxdesc->buffer1_addr; - timestamp[1] = dma_current_rxdesc->buffer2_next_desc_addr; - - dma_current_rxdesc->buffer1_addr = dma_current_ptp_rxdesc ->buffer1_addr ; - dma_current_rxdesc->buffer2_next_desc_addr = dma_current_ptp_rxdesc ->buffer2_next_desc_addr; - - /* enable reception, descriptor is owned by DMA */ - dma_current_rxdesc->status = ENET_RDES0_DAV; - - /* check Rx buffer unavailable flag status */ - if ((uint32_t)RESET != (ENET_DMA_STAT & ENET_DMA_STAT_RBU)){ - /* clear RBU flag */ - ENET_DMA_STAT = ENET_DMA_STAT_RBU; - /* resume DMA reception by writing to the RPEN register*/ - ENET_DMA_RPEN = 0U; - } - - - /* update the current RxDMA descriptor pointer to the next decriptor in RxDMA decriptor table */ - /* chained mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RCHM)){ - dma_current_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->buffer2_next_desc_addr); - /* if it is the last ptp descriptor */ - if(0U != dma_current_ptp_rxdesc->status){ - /* pointer back to the first ptp descriptor address in the desc_ptptab list address */ - dma_current_ptp_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->status); - }else{ - /* ponter to the next ptp descriptor */ - dma_current_ptp_rxdesc++; - } - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_rxdesc->control_buffer_size & ENET_RDES1_RERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_rxdesc = (enet_descriptors_struct*) (ENET_DMA_RDTADDR); - /* RDES2 and RDES3 will not be covered by buffer address, so do not need to preserve a new table, - use the same table with RxDMA descriptor */ - dma_current_ptp_rxdesc = (enet_descriptors_struct*) (dma_current_ptp_rxdesc->status); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_rxdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_rxdesc + ETH_DMARXDESC_SIZE + GET_DMA_BCTL_DPSL(ENET_DMA_BCTL)); - dma_current_ptp_rxdesc ++; - } - } - - return SUCCESS; -} - -/*! - \brief send data with timestamp values in application buffer as a transmit packet, when the DMA is in normal mode - \param[in] buffer: pointer on the application buffer - note -- if the input is NULL, user should copy data in application by himself - \param[in] length: the length of frame data to be transmitted - \param[out] timestamp: pointer to the table which stores the timestamp high and low - note -- if the input is NULL, timestamp is ignored - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_ptpframe_transmit_normal_mode(uint8_t *buffer, uint32_t length, uint32_t timestamp[]) -{ - uint32_t offset = 0U, timeout = 0U; - uint32_t dma_tbu_flag, dma_tu_flag, tdes0_ttmss_flag; - - /* the descriptor is busy due to own by the DMA */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_DAV)){ - return ERROR; - } - - /* only frame length no more than ENET_MAX_FRAME_SIZE is allowed */ - if(length > ENET_MAX_FRAME_SIZE){ - return ERROR; - } - - /* if buffer pointer is null, indicates that users has handled data in application */ - if(NULL != buffer){ - /* copy frame data from application buffer to Tx buffer */ - for(offset = 0U; offset < length; offset++){ - (*(__IO uint8_t *) (uint32_t)((dma_current_ptp_txdesc->buffer1_addr) + offset)) = (*(buffer + offset)); - } - } - /* set the frame length */ - dma_current_txdesc->control_buffer_size = (length & (uint32_t)0x1FFF); - /* set the segment of frame, frame is transmitted in one descriptor */ - dma_current_txdesc->status |= ENET_TDES0_LSG | ENET_TDES0_FSG; - /* enable the DMA transmission */ - dma_current_txdesc->status |= ENET_TDES0_DAV; - - /* check Tx buffer unavailable flag status */ - dma_tbu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TBU); - dma_tu_flag = (ENET_DMA_STAT & ENET_DMA_STAT_TU); - - if((RESET != dma_tbu_flag) || (RESET != dma_tu_flag)){ - /* clear TBU and TU flag */ - ENET_DMA_STAT = (dma_tbu_flag | dma_tu_flag); - /* resume DMA transmission by writing to the TPEN register*/ - ENET_DMA_TPEN = 0U; - } - - /* if timestamp pointer is null, indicates that users don't care timestamp in application */ - if(NULL != timestamp){ - /* wait for ENET_TDES0_TTMSS flag to be set, a timestamp was captured */ - do{ - tdes0_ttmss_flag = (dma_current_txdesc->status & ENET_TDES0_TTMSS); - timeout++; - }while((RESET == tdes0_ttmss_flag) && (timeout < ENET_DELAY_TO)); - - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - return ERROR; - } - - /* clear the ENET_TDES0_TTMSS flag */ - dma_current_txdesc->status &= ~ENET_TDES0_TTMSS; - /* get the timestamp value of the transmit frame */ - timestamp[0] = dma_current_txdesc->buffer1_addr; - timestamp[1] = dma_current_txdesc->buffer2_next_desc_addr; - } - dma_current_txdesc->buffer1_addr = dma_current_ptp_txdesc ->buffer1_addr ; - dma_current_txdesc->buffer2_next_desc_addr = dma_current_ptp_txdesc ->buffer2_next_desc_addr; - - /* update the current TxDMA descriptor pointer to the next decriptor in TxDMA decriptor table */ - /* chained mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TCHM)){ - dma_current_txdesc = (enet_descriptors_struct*) (dma_current_ptp_txdesc->buffer2_next_desc_addr); - /* if it is the last ptp descriptor */ - if(0U != dma_current_ptp_txdesc->status){ - /* pointer back to the first ptp descriptor address in the desc_ptptab list address */ - dma_current_ptp_txdesc = (enet_descriptors_struct*) (dma_current_ptp_txdesc->status); - }else{ - /* ponter to the next ptp descriptor */ - dma_current_ptp_txdesc++; - } - }else{ - /* ring mode */ - if((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_TERM)){ - /* if is the last descriptor in table, the next descriptor is the table header */ - dma_current_txdesc = (enet_descriptors_struct*) (ENET_DMA_TDTADDR); - /* TDES2 and TDES3 will not be covered by buffer address, so do not need to preserve a new table, - use the same table with TxDMA descriptor */ - dma_current_ptp_txdesc = (enet_descriptors_struct*) (dma_current_ptp_txdesc->status); - }else{ - /* the next descriptor is the current address, add the descriptor size, and descriptor skip length */ - dma_current_txdesc = (enet_descriptors_struct*) (uint32_t)((uint32_t)dma_current_txdesc + ETH_DMATXDESC_SIZE + GET_DMA_BCTL_DPSL(ENET_DMA_BCTL)); - dma_current_ptp_txdesc ++; - } - } - return SUCCESS; -} - -#endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */ - -/*! - \brief wakeup frame filter register pointer reset - \param[in] none - \param[out] none - \retval none -*/ -void enet_wum_filter_register_pointer_reset(void) -{ - ENET_MAC_WUM |= ENET_MAC_WUM_WUFFRPR; -} - -/*! - \brief set the remote wakeup frame registers - \param[in] pdata: pointer to buffer data which is written to remote wakeup frame registers (8 words total) - \param[out] none - \retval none -*/ -void enet_wum_filter_config(uint32_t pdata[]) -{ - uint32_t num = 0U; - - /* configure ENET_MAC_RWFF register */ - for(num = 0U; num < ETH_WAKEUP_REGISTER_LENGTH; num++){ - ENET_MAC_RWFF = pdata[num]; - } -} - -/*! - \brief enable wakeup management features - \param[in] feature: one or more parameters can be selected which are shown as below - \arg ENET_WUM_POWER_DOWN: power down mode - \arg ENET_WUM_MAGIC_PACKET_FRAME: enable a wakeup event due to magic packet reception - \arg ENET_WUM_WAKE_UP_FRAME: enable a wakeup event due to wakeup frame reception - \arg ENET_WUM_GLOBAL_UNICAST: any received unicast frame passed filter is considered to be a wakeup frame - \param[out] none - \retval none -*/ -void enet_wum_feature_enable(uint32_t feature) -{ - ENET_MAC_WUM |= feature; -} - -/*! - \brief disable wakeup management features - \param[in] feature: one or more parameters can be selected which are shown as below - \arg ENET_WUM_MAGIC_PACKET_FRAME: enable a wakeup event due to magic packet reception - \arg ENET_WUM_WAKE_UP_FRAME: enable a wakeup event due to wakeup frame reception - \arg ENET_WUM_GLOBAL_UNICAST: any received unicast frame passed filter is considered to be a wakeup frame - \param[out] none - \retval none -*/ -void enet_wum_feature_disable(uint32_t feature) -{ - ENET_MAC_WUM &= (~feature); -} - -/*! - \brief reset the MAC statistics counters - \param[in] none - \param[out] none - \retval none -*/ -void enet_msc_counters_reset(void) -{ - /* reset all counters */ - ENET_MSC_CTL |= ENET_MSC_CTL_CTR; -} - -/*! - \brief enable the MAC statistics counter features - \param[in] feature: one or more parameters can be selected which are shown as below - \arg ENET_MSC_COUNTER_STOP_ROLLOVER: counter stop rollover - \arg ENET_MSC_RESET_ON_READ: reset on read - \arg ENET_MSC_COUNTERS_FREEZE: MSC counter freeze - \param[out] none - \retval none -*/ -void enet_msc_feature_enable(uint32_t feature) -{ - ENET_MSC_CTL |= feature; -} - -/*! - \brief disable the MAC statistics counter features - \param[in] feature: one or more parameters can be selected which are shown as below - \arg ENET_MSC_COUNTER_STOP_ROLLOVER: counter stop rollover - \arg ENET_MSC_RESET_ON_READ: reset on read - \arg ENET_MSC_COUNTERS_FREEZE: MSC counter freeze - \param[out] none - \retval none -*/ -void enet_msc_feature_disable(uint32_t feature) -{ - ENET_MSC_CTL &= (~feature); -} - -/*! - \brief configure MAC statistics counters preset mode - \param[in] mode: MSC counters preset mode, refer to enet_msc_preset_enum, - only one parameter can be selected which is shown as below - \arg ENET_MSC_PRESET_NONE: do not preset MSC counter - \arg ENET_MSC_PRESET_HALF: preset all MSC counters to almost-half(0x7FFF FFF0) value - \arg ENET_MSC_PRESET_FULL: preset all MSC counters to almost-full(0xFFFF FFF0) value - \param[out] none - \retval none -*/ -void enet_msc_counters_preset_config(enet_msc_preset_enum mode) -{ - ENET_MSC_CTL &= ENET_MSC_PRESET_MASK; - ENET_MSC_CTL |= (uint32_t)mode; -} - -/*! - \brief get MAC statistics counter - \param[in] counter: MSC counters which is selected, refer to enet_msc_counter_enum, - only one parameter can be selected which is shown as below - \arg ENET_MSC_TX_SCCNT: MSC transmitted good frames after a single collision counter - \arg ENET_MSC_TX_MSCCNT: MSC transmitted good frames after more than a single collision counter - \arg ENET_MSC_TX_TGFCNT: MSC transmitted good frames counter - \arg ENET_MSC_RX_RFCECNT: MSC received frames with CRC error counter - \arg ENET_MSC_RX_RFAECNT: MSC received frames with alignment error counter - \arg ENET_MSC_RX_RGUFCNT: MSC received good unicast frames counter - \param[out] none - \retval the MSC counter value -*/ -uint32_t enet_msc_counters_get(enet_msc_counter_enum counter) -{ - uint32_t reval; - - reval = REG32((ENET + (uint32_t)counter)); - - return reval; -} - -/*! - \brief change subsecond to nanosecond - \param[in] subsecond: subsecond value - \param[out] none - \retval the nanosecond value -*/ -uint32_t enet_ptp_subsecond_2_nanosecond(uint32_t subsecond) -{ - uint64_t val = subsecond * 1000000000Ull; - val >>= 31; - return (uint32_t)val; -} - -/*! - \brief change nanosecond to subsecond - \param[in] nanosecond: nanosecond value - \param[out] none - \retval the subsecond value -*/ -uint32_t enet_ptp_nanosecond_2_subsecond(uint32_t nanosecond) -{ - uint64_t val = nanosecond * 0x80000000Ull; - val /= 1000000000U; - return (uint32_t)val; -} - -/*! - \brief enable the PTP features - \param[in] feature: the feature of ENET PTP mode - one or more parameters can be selected which are shown as below - \arg ENET_RXTX_TIMESTAMP: timestamp function for transmit and receive frames - \arg ENET_PTP_TIMESTAMP_INT: timestamp interrupt trigger - \arg ENET_ALL_RX_TIMESTAMP: all received frames are taken snapshot - \arg ENET_NONTYPE_FRAME_SNAPSHOT: take snapshot when received non type frame - \arg ENET_IPV6_FRAME_SNAPSHOT: take snapshot for IPv6 frame - \arg ENET_IPV4_FRAME_SNAPSHOT: take snapshot for IPv4 frame - \arg ENET_PTP_FRAME_USE_MACADDRESS_FILTER: use MAC address1-3 to filter the PTP frame - \param[out] none - \retval none -*/ -void enet_ptp_feature_enable(uint32_t feature) -{ - ENET_PTP_TSCTL |= feature; -} - -/*! - \brief disable the PTP features - \param[in] feature: the feature of ENET PTP mode - one or more parameters can be selected which are shown as below - \arg ENET_RXTX_TIMESTAMP: timestamp function for transmit and receive frames - \arg ENET_PTP_TIMESTAMP_INT: timestamp interrupt trigger - \arg ENET_ALL_RX_TIMESTAMP: all received frames are taken snapshot - \arg ENET_NONTYPE_FRAME_SNAPSHOT: take snapshot when received non type frame - \arg ENET_IPV6_FRAME_SNAPSHOT: take snapshot for IPv6 frame - \arg ENET_IPV4_FRAME_SNAPSHOT: take snapshot for IPv4 frame - \arg ENET_PTP_FRAME_USE_MACADDRESS_FILTER: use MAC address1-3 to filter the PTP frame - \param[out] none - \retval none -*/ -void enet_ptp_feature_disable(uint32_t feature) -{ - ENET_PTP_TSCTL &= ~feature; -} - -/*! - \brief configure the PTP timestamp function - \param[in] func: only one parameter can be selected which is shown as below - \arg ENET_CKNT_ORDINARY: type of ordinary clock node type for timestamp - \arg ENET_CKNT_BOUNDARY: type of boundary clock node type for timestamp - \arg ENET_CKNT_END_TO_END: type of end-to-end transparent clock node type for timestamp - \arg ENET_CKNT_PEER_TO_PEER: type of peer-to-peer transparent clock node type for timestamp - \arg ENET_PTP_ADDEND_UPDATE: addend register update - \arg ENET_PTP_SYSTIME_UPDATE: timestamp update - \arg ENET_PTP_SYSTIME_INIT: timestamp initialize - \arg ENET_PTP_FINEMODE: the system timestamp uses the fine method for updating - \arg ENET_PTP_COARSEMODE: the system timestamp uses the coarse method for updating - \arg ENET_SUBSECOND_DIGITAL_ROLLOVER: digital rollover mode - \arg ENET_SUBSECOND_BINARY_ROLLOVER: binary rollover mode - \arg ENET_SNOOPING_PTP_VERSION_2: version 2 - \arg ENET_SNOOPING_PTP_VERSION_1: version 1 - \arg ENET_EVENT_TYPE_MESSAGES_SNAPSHOT: only event type messages are taken snapshot - \arg ENET_ALL_TYPE_MESSAGES_SNAPSHOT: all type messages are taken snapshot except announce, - management and signaling message - \arg ENET_MASTER_NODE_MESSAGE_SNAPSHOT: snapshot is only take for master node message - \arg ENET_SLAVE_NODE_MESSAGE_SNAPSHOT: snapshot is only taken for slave node message - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus enet_ptp_timestamp_function_config(enet_ptp_function_enum func) -{ - uint32_t temp_config = 0U, temp_state = 0U; - uint32_t timeout = 0U; - ErrStatus enet_state = SUCCESS; - - switch(func){ - case ENET_CKNT_ORDINARY: - case ENET_CKNT_BOUNDARY: - case ENET_CKNT_END_TO_END: - case ENET_CKNT_PEER_TO_PEER: - ENET_PTP_TSCTL &= ~ENET_PTP_TSCTL_CKNT; - ENET_PTP_TSCTL |= (uint32_t)func; - break; - case ENET_PTP_ADDEND_UPDATE: - /* this bit must be read as zero before application set it */ - do{ - temp_state = ENET_PTP_TSCTL & ENET_PTP_TSCTL_TMSARU; - timeout++; - }while((RESET != temp_state) && (timeout < ENET_DELAY_TO)); - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - enet_state = ERROR; - }else{ - ENET_PTP_TSCTL |= ENET_PTP_TSCTL_TMSARU; - } - break; - case ENET_PTP_SYSTIME_UPDATE: - /* both the TMSSTU and TMSSTI bits must be read as zero before application set this bit */ - do{ - temp_state = ENET_PTP_TSCTL & (ENET_PTP_TSCTL_TMSSTU | ENET_PTP_TSCTL_TMSSTI); - timeout++; - }while((RESET != temp_state) && (timeout < ENET_DELAY_TO)); - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - enet_state = ERROR; - }else{ - ENET_PTP_TSCTL |= ENET_PTP_TSCTL_TMSSTU; - } - break; - case ENET_PTP_SYSTIME_INIT: - /* this bit must be read as zero before application set it */ - do{ - temp_state = ENET_PTP_TSCTL & ENET_PTP_TSCTL_TMSSTI; - timeout++; - }while((RESET != temp_state) && (timeout < ENET_DELAY_TO)); - /* return ERROR due to timeout */ - if(ENET_DELAY_TO == timeout){ - enet_state = ERROR; - }else{ - ENET_PTP_TSCTL |= ENET_PTP_TSCTL_TMSSTI; - } - break; - default: - temp_config = (uint32_t)func & (~BIT(31)); - if(RESET != ((uint32_t)func & BIT(31))){ - ENET_PTP_TSCTL |= temp_config; - }else{ - ENET_PTP_TSCTL &= ~temp_config; - } - break; - } - - return enet_state; -} - -/*! - \brief configure system time subsecond increment value - \param[in] subsecond: the value will be added to the subsecond value of system time, - this value must be between 0 and 0xFF - \param[out] none - \retval none -*/ -void enet_ptp_subsecond_increment_config(uint32_t subsecond) -{ - ENET_PTP_SSINC = PTP_SSINC_STMSSI(subsecond); -} - -/*! - \brief adjusting the clock frequency only in fine update mode - \param[in] add: the value will be added to the accumulator register to achieve time synchronization - \param[out] none - \retval none -*/ -void enet_ptp_timestamp_addend_config(uint32_t add) -{ - ENET_PTP_TSADDEND = add; -} - -/*! - \brief initialize or add/subtract to second of the system time - \param[in] sign: timestamp update positive or negative sign, - only one parameter can be selected which is shown as below - \arg ENET_PTP_ADD_TO_TIME: timestamp update value is added to system time - \arg ENET_PTP_SUBSTRACT_FROM_TIME: timestamp update value is subtracted from system time - \param[in] second: initializing or adding/subtracting to second of the system time - \param[in] subsecond: the current subsecond of the system time - with 0.46 ns accuracy if required accuracy is 20 ns - \param[out] none - \retval none -*/ -void enet_ptp_timestamp_update_config(uint32_t sign, uint32_t second, uint32_t subsecond) -{ - ENET_PTP_TSUH = second; - ENET_PTP_TSUL = sign | PTP_TSUL_TMSUSS(subsecond); -} - -/*! - \brief configure the expected target time - \param[in] second: the expected target second time - \param[in] nanosecond: the expected target nanosecond time (signed) - \param[out] none - \retval none -*/ -void enet_ptp_expected_time_config(uint32_t second, uint32_t nanosecond) -{ - ENET_PTP_ETH = second; - ENET_PTP_ETL = nanosecond; -} - -/*! - \brief get the current system time - \param[in] none - \param[out] systime_struct: pointer to a enet_ptp_systime_struct structure which contains - parameters of PTP system time - members of the structure and the member values are shown as below: - second: 0x0 - 0xFFFF FFFF - nanosecond: 0x0 - 0x7FFF FFFF * 10^9 / 2^31 - sign: ENET_PTP_TIME_POSITIVE, ENET_PTP_TIME_NEGATIVE - \retval none -*/ -void enet_ptp_system_time_get(enet_ptp_systime_struct *systime_struct) -{ - uint32_t temp_sec = 0U, temp_subs = 0U; - - /* get the value of sysytem time registers */ - temp_sec = (uint32_t)ENET_PTP_TSH; - temp_subs = (uint32_t)ENET_PTP_TSL; - - /* get sysytem time and construct the enet_ptp_systime_struct structure */ - systime_struct->second = temp_sec; - systime_struct->nanosecond = GET_PTP_TSL_STMSS(temp_subs); - systime_struct->nanosecond = enet_ptp_subsecond_2_nanosecond(systime_struct->nanosecond); - systime_struct->sign = GET_PTP_TSL_STS(temp_subs); -} - -/*! - \brief configure the PPS output frequency - \param[in] freq: PPS output frequency, - only one parameter can be selected which is shown as below - \arg ENET_PPSOFC_1HZ: PPS output 1Hz frequency - \arg ENET_PPSOFC_2HZ: PPS output 2Hz frequency - \arg ENET_PPSOFC_4HZ: PPS output 4Hz frequency - \arg ENET_PPSOFC_8HZ: PPS output 8Hz frequency - \arg ENET_PPSOFC_16HZ: PPS output 16Hz frequency - \arg ENET_PPSOFC_32HZ: PPS output 32Hz frequency - \arg ENET_PPSOFC_64HZ: PPS output 64Hz frequency - \arg ENET_PPSOFC_128HZ: PPS output 128Hz frequency - \arg ENET_PPSOFC_256HZ: PPS output 256Hz frequency - \arg ENET_PPSOFC_512HZ: PPS output 512Hz frequency - \arg ENET_PPSOFC_1024HZ: PPS output 1024Hz frequency - \arg ENET_PPSOFC_2048HZ: PPS output 2048Hz frequency - \arg ENET_PPSOFC_4096HZ: PPS output 4096Hz frequency - \arg ENET_PPSOFC_8192HZ: PPS output 8192Hz frequency - \arg ENET_PPSOFC_16384HZ: PPS output 16384Hz frequency - \arg ENET_PPSOFC_32768HZ: PPS output 32768Hz frequency - \param[out] none - \retval none -*/ -void enet_ptp_pps_output_frequency_config(uint32_t freq) -{ - ENET_PTP_PPSCTL = freq; -} - -/*! - \brief configure and start PTP timestamp counter - \param[in] updatemethod: method for updating - \arg ENET_PTP_FINEMODE: fine correction method - \arg ENET_PTP_COARSEMODE: coarse correction method - \param[in] init_sec: second value for initializing system time - \param[in] init_subsec: subsecond value for initializing system time - \param[in] carry_cfg: the value to be added to the accumulator register (in fine method is used) - \param[in] accuracy_cfg: the value to be added to the subsecond value of system time - \param[out] none - \retval none -*/ -void enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg) -{ - /* mask the timestamp trigger interrupt */ - enet_interrupt_disable(ENET_MAC_INT_TMSTIM); - - /* enable timestamp */ - enet_ptp_feature_enable(ENET_ALL_RX_TIMESTAMP | ENET_RXTX_TIMESTAMP); - - /* configure system time subsecond increment based on the PTP clock frequency */ - enet_ptp_subsecond_increment_config(accuracy_cfg); - - if(ENET_PTP_FINEMODE == updatemethod){ - /* fine correction method: configure the timestamp addend, then update */ - enet_ptp_timestamp_addend_config(carry_cfg); - enet_ptp_timestamp_function_config(ENET_PTP_ADDEND_UPDATE); - /* wait until update is completed */ - while(SET == enet_ptp_flag_get((uint32_t)ENET_PTP_ADDEND_UPDATE)){ - } - } - - /* choose the fine correction method */ - enet_ptp_timestamp_function_config((enet_ptp_function_enum)updatemethod); - - /* initialize the system time */ - enet_ptp_timestamp_update_config(ENET_PTP_ADD_TO_TIME, init_sec, init_subsec); - enet_ptp_timestamp_function_config(ENET_PTP_SYSTIME_INIT); - -#ifdef SELECT_DESCRIPTORS_ENHANCED_MODE - enet_desc_select_enhanced_mode(); -#endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */ -} - -/*! - \brief adjust frequency in fine method by configure addend register - \param[in] carry_cfg: the value to be added to the accumulator register - \param[out] none - \retval none -*/ -void enet_ptp_finecorrection_adjfreq(int32_t carry_cfg) -{ - /* re-configure the timestamp addend, then update */ - enet_ptp_timestamp_addend_config((uint32_t)carry_cfg); - enet_ptp_timestamp_function_config(ENET_PTP_ADDEND_UPDATE); -} - -/*! - \brief update system time in coarse method - \param[in] systime_struct: : pointer to a enet_ptp_systime_struct structure which contains - parameters of PTP system time - members of the structure and the member values are shown as below: - second: 0x0 - 0xFFFF FFFF - nanosecond: 0x0 - 0x7FFF FFFF * 10^9 / 2^31 - sign: ENET_PTP_TIME_POSITIVE, ENET_PTP_TIME_NEGATIVE - \param[out] none - \retval none -*/ -void enet_ptp_coarsecorrection_systime_update(enet_ptp_systime_struct *systime_struct) -{ - uint32_t subsecond_val; - uint32_t carry_cfg; - - subsecond_val = enet_ptp_nanosecond_2_subsecond(systime_struct->nanosecond); - - /* save the carry_cfg value */ - carry_cfg = ENET_PTP_TSADDEND_TMSA; - - /* update the system time */ - enet_ptp_timestamp_update_config(systime_struct->sign, systime_struct->second, subsecond_val); - enet_ptp_timestamp_function_config(ENET_PTP_SYSTIME_UPDATE); - - /* wait until the update is completed */ - while(SET == enet_ptp_flag_get((uint32_t)ENET_PTP_SYSTIME_UPDATE)){ - } - - /* write back the carry_cfg value, then update */ - enet_ptp_timestamp_addend_config(carry_cfg); - enet_ptp_timestamp_function_config(ENET_PTP_ADDEND_UPDATE); -} - -/*! - \brief set system time in fine method - \param[in] systime_struct: : pointer to a enet_ptp_systime_struct structure which contains - parameters of PTP system time - members of the structure and the member values are shown as below: - second: 0x0 - 0xFFFF FFFF - nanosecond: 0x0 - 0x7FFF FFFF * 10^9 / 2^31 - sign: ENET_PTP_TIME_POSITIVE, ENET_PTP_TIME_NEGATIVE - \param[out] none - \retval none -*/ -void enet_ptp_finecorrection_settime(enet_ptp_systime_struct * systime_struct) -{ - uint32_t subsecond_val; - - subsecond_val = enet_ptp_nanosecond_2_subsecond(systime_struct->nanosecond); - - /* initialize the system time */ - enet_ptp_timestamp_update_config(systime_struct->sign, systime_struct->second, subsecond_val); - enet_ptp_timestamp_function_config(ENET_PTP_SYSTIME_INIT); - - /* wait until the system time initialzation finished */ - while(SET == enet_ptp_flag_get((uint32_t)ENET_PTP_SYSTIME_INIT)){ - } -} - -/*! - \brief get the ptp flag status - \param[in] flag: ptp flag status to be checked - \arg ENET_PTP_ADDEND_UPDATE: addend register update - \arg ENET_PTP_SYSTIME_UPDATE: timestamp update - \arg ENET_PTP_SYSTIME_INIT: timestamp initialize - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus enet_ptp_flag_get(uint32_t flag) -{ - FlagStatus bitstatus = RESET; - - if ((uint32_t)RESET != (ENET_PTP_TSCTL & flag)){ - bitstatus = SET; - } - - return bitstatus; -} - -/*! - \brief reset the ENET initpara struct, call it before using enet_initpara_config() - \param[in] none - \param[out] none - \retval none -*/ -void enet_initpara_reset(void) -{ - enet_initpara.option_enable = 0U; - enet_initpara.forward_frame = 0U; - enet_initpara.dmabus_mode = 0U; - enet_initpara.dma_maxburst = 0U; - enet_initpara.dma_arbitration = 0U; - enet_initpara.store_forward_mode = 0U; - enet_initpara.dma_function = 0U; - enet_initpara.vlan_config = 0U; - enet_initpara.flow_control = 0U; - enet_initpara.hashtable_high = 0U; - enet_initpara.hashtable_low = 0U; - enet_initpara.framesfilter_mode = 0U; - enet_initpara.halfduplex_param = 0U; - enet_initpara.timer_config = 0U; - enet_initpara.interframegap = 0U; -} - -/*! - \brief initialize ENET peripheral with generally concerned parameters, call it by enet_init() - \param[in] none - \param[out] none - \retval none -*/ -static void enet_default_init(void) -{ - uint32_t reg_value = 0U; - - /* MAC */ - /* configure ENET_MAC_CFG register */ - reg_value = ENET_MAC_CFG; - reg_value &= MAC_CFG_MASK; - reg_value |= ENET_WATCHDOG_ENABLE | ENET_JABBER_ENABLE | ENET_INTERFRAMEGAP_96BIT \ - | ENET_SPEEDMODE_10M |ENET_MODE_HALFDUPLEX | ENET_LOOPBACKMODE_DISABLE \ - | ENET_CARRIERSENSE_ENABLE | ENET_RECEIVEOWN_ENABLE \ - | ENET_RETRYTRANSMISSION_ENABLE | ENET_BACKOFFLIMIT_10 \ - | ENET_DEFERRALCHECK_DISABLE \ - | ENET_TYPEFRAME_CRC_DROP_DISABLE \ - | ENET_AUTO_PADCRC_DROP_DISABLE \ - | ENET_CHECKSUMOFFLOAD_DISABLE; - ENET_MAC_CFG = reg_value; - - /* configure ENET_MAC_FRMF register */ - ENET_MAC_FRMF = ENET_SRC_FILTER_DISABLE |ENET_DEST_FILTER_INVERSE_DISABLE \ - |ENET_MULTICAST_FILTER_PERFECT |ENET_UNICAST_FILTER_PERFECT \ - |ENET_PCFRM_PREVENT_ALL |ENET_BROADCASTFRAMES_ENABLE \ - |ENET_PROMISCUOUS_DISABLE |ENET_RX_FILTER_ENABLE; - - /* configure ENET_MAC_HLH, ENET_MAC_HLL register */ - ENET_MAC_HLH = 0x0U; - - ENET_MAC_HLL = 0x0U; - - /* configure ENET_MAC_FCTL, ENET_MAC_FCTH register */ - reg_value = ENET_MAC_FCTL; - reg_value &= MAC_FCTL_MASK; - reg_value |= MAC_FCTL_PTM(0) |ENET_ZERO_QUANTA_PAUSE_DISABLE \ - |ENET_PAUSETIME_MINUS4 |ENET_UNIQUE_PAUSEDETECT \ - |ENET_RX_FLOWCONTROL_DISABLE |ENET_TX_FLOWCONTROL_DISABLE; - ENET_MAC_FCTL = reg_value; - - ENET_MAC_FCTH = ENET_DEACTIVE_THRESHOLD_512BYTES |ENET_ACTIVE_THRESHOLD_1536BYTES; - - /* configure ENET_MAC_VLT register */ - ENET_MAC_VLT = ENET_VLANTAGCOMPARISON_16BIT |MAC_VLT_VLTI(0); - - /* DMA */ - /* configure ENET_DMA_CTL register */ - reg_value = ENET_DMA_CTL; - reg_value &= DMA_CTL_MASK; - reg_value |= ENET_TCPIP_CKSUMERROR_DROP |ENET_RX_MODE_STOREFORWARD \ - |ENET_FLUSH_RXFRAME_ENABLE |ENET_TX_MODE_STOREFORWARD \ - |ENET_TX_THRESHOLD_64BYTES |ENET_RX_THRESHOLD_64BYTES \ - |ENET_FORWARD_ERRFRAMES_DISABLE |ENET_FORWARD_UNDERSZ_GOODFRAMES_DISABLE \ - |ENET_SECONDFRAME_OPT_DISABLE; - ENET_DMA_CTL = reg_value; - - /* configure ENET_DMA_BCTL register */ - reg_value = ENET_DMA_BCTL; - reg_value &= DMA_BCTL_MASK; - reg_value = ENET_ADDRESS_ALIGN_ENABLE |ENET_ARBITRATION_RXTX_2_1 \ - |ENET_RXDP_32BEAT |ENET_PGBL_32BEAT |ENET_RXTX_DIFFERENT_PGBL \ - |ENET_FIXED_BURST_ENABLE |ENET_MIXED_BURST_DISABLE \ - |ENET_NORMAL_DESCRIPTOR; - ENET_DMA_BCTL = reg_value; -} - -#ifndef USE_DELAY -/*! - \brief insert a delay time - \param[in] ncount: specifies the delay time length - \param[out] none - \param[out] none -*/ -static void enet_delay(uint32_t ncount) -{ - __IO uint32_t delay_time = 0U; - - for(delay_time = ncount; delay_time != 0U; delay_time--){ - } -} -#endif /* USE_DELAY */ - -#endif /* GD32F30X_CL */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_exmc.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_exmc.c deleted file mode 100644 index 769b99f..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_exmc.c +++ /dev/null @@ -1,677 +0,0 @@ -/*! - \file gd32f30x_exmc.c - \brief EXMC driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_exmc.h" - -/* EXMC bank0 register reset value */ -#define BANK0_SNCTL_REGION0_RESET ((uint32_t)0x000030DBU) -#define BANK0_SNCTL_REGION1_2_3_RESET ((uint32_t)0x000030D2U) -#define BANK0_SNTCFG_RESET ((uint32_t)0x0FFFFFFFU) -#define BANK0_SNWTCFG_RESET ((uint32_t)0x0FFFFFFFU) - -/* EXMC bank1/2 register reset mask */ -#define BANK1_2_NPCTL_RESET ((uint32_t)0x00000018U) -#define BANK1_2_NPINTEN_RESET ((uint32_t)0x00000042U) -#define BANK1_2_NPCTCFG_RESET ((uint32_t)0xFCFCFCFCU) -#define BANK1_2_NPATCFG_RESET ((uint32_t)0xFCFCFCFCU) - -/* EXMC bank3 register reset mask */ -#define BANK3_NPCTL_RESET ((uint32_t)0x00000018U) -#define BANK3_NPINTEN_RESET ((uint32_t)0x00000043U) -#define BANK3_NPCTCFG_RESET ((uint32_t)0xFCFCFCFCU) -#define BANK3_NPATCFG_RESET ((uint32_t)0xFCFCFCFCU) -#define BANK3_PIOTCFG3_RESET ((uint32_t)0xFCFCFCFCU) - -/* EXMC register bit offset */ -#define SNCTL_NRMUX_OFFSET ((uint32_t)1U) -#define SNCTL_SBRSTEN_OFFSET ((uint32_t)8U) -#define SNCTL_WRAPEN_OFFSET ((uint32_t)10U) -#define SNCTL_WREN_OFFSET ((uint32_t)12U) -#define SNCTL_NRWTEN_OFFSET ((uint32_t)13U) -#define SNCTL_EXMODEN_OFFSET ((uint32_t)14U) -#define SNCTL_ASYNCWAIT_OFFSET ((uint32_t)15U) - -#define SNTCFG_AHLD_OFFSET ((uint32_t)4U) -#define SNTCFG_DSET_OFFSET ((uint32_t)8U) -#define SNTCFG_BUSLAT_OFFSET ((uint32_t)16U) - -#define SNWTCFG_WAHLD_OFFSET ((uint32_t)4U) -#define SNWTCFG_WDSET_OFFSET ((uint32_t)8U) -#define SNWTCFG_WBUSLAT_OFFSET ((uint32_t)16U) - -#define NPCTL_NDWTEN_OFFSET ((uint32_t)1U) -#define NPCTL_ECCEN_OFFSET ((uint32_t)6U) - -#define NPCTCFG_COMWAIT_OFFSET ((uint32_t)8U) -#define NPCTCFG_COMHLD_OFFSET ((uint32_t)16U) -#define NPCTCFG_COMHIZ_OFFSET ((uint32_t)24U) - -#define NPATCFG_ATTWAIT_OFFSET ((uint32_t)8U) -#define NPATCFG_ATTHLD_OFFSET ((uint32_t)16U) -#define NPATCFG_ATTHIZ_OFFSET ((uint32_t)24U) - -#define PIOTCFG_IOWAIT_OFFSET ((uint32_t)8U) -#define PIOTCFG_IOHLD_OFFSET ((uint32_t)16U) -#define PIOTCFG_IOHIZ_OFFSET ((uint32_t)24U) - -#define INTEN_INTS_OFFSET ((uint32_t)3U) - -/*! - \brief deinitialize EXMC NOR/SRAM region - \param[in] exmc_norsram_region: select the region of bank0 - only one parameter can be selected which is shown as below: - \arg EXMC_BANK0_NORSRAM_REGIONx(x=0..3) - \param[out] none - \retval none -*/ -void exmc_norsram_deinit(uint32_t exmc_norsram_region) -{ - /* reset the registers */ - if(EXMC_BANK0_NORSRAM_REGION0 == exmc_norsram_region){ - EXMC_SNCTL(exmc_norsram_region) = BANK0_SNCTL_REGION0_RESET; - }else{ - EXMC_SNCTL(exmc_norsram_region) = BANK0_SNCTL_REGION1_2_3_RESET; - } - EXMC_SNTCFG(exmc_norsram_region) = BANK0_SNTCFG_RESET; - EXMC_SNWTCFG(exmc_norsram_region) = BANK0_SNWTCFG_RESET; -} - -/*! - \brief initialize exmc_norsram_parameter_struct with the default values - \param[in] none - \param[out] exmc_norsram_init_struct: the initialized struct exmc_norsram_parameter_struct pointer - \retval none -*/ -void exmc_norsram_struct_para_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct) -{ - /* configure the structure with default values */ - exmc_norsram_init_struct->norsram_region = EXMC_BANK0_NORSRAM_REGION0; - exmc_norsram_init_struct->address_data_mux = ENABLE; - exmc_norsram_init_struct->memory_type = EXMC_MEMORY_TYPE_SRAM; - exmc_norsram_init_struct->databus_width = EXMC_NOR_DATABUS_WIDTH_8B; - exmc_norsram_init_struct->burst_mode = DISABLE; - exmc_norsram_init_struct->nwait_polarity = EXMC_NWAIT_POLARITY_LOW; - exmc_norsram_init_struct->wrap_burst_mode = DISABLE; - exmc_norsram_init_struct->nwait_config = EXMC_NWAIT_CONFIG_BEFORE; - exmc_norsram_init_struct->memory_write = ENABLE; - exmc_norsram_init_struct->nwait_signal = ENABLE; - exmc_norsram_init_struct->extended_mode = DISABLE; - exmc_norsram_init_struct->asyn_wait = DISABLE; - exmc_norsram_init_struct->write_mode = EXMC_ASYN_WRITE; - - /* read/write timing configure */ - exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime = 0xFU; - exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime = 0xFU; - exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime = 0xFFU; - exmc_norsram_init_struct->read_write_timing->bus_latency = 0xFU; - exmc_norsram_init_struct->read_write_timing->syn_clk_division = EXMC_SYN_CLOCK_RATIO_16_CLK; - exmc_norsram_init_struct->read_write_timing->syn_data_latency = EXMC_DATALAT_17_CLK; - exmc_norsram_init_struct->read_write_timing->asyn_access_mode = EXMC_ACCESS_MODE_A; - - /* write timing configure, when extended mode is used */ - exmc_norsram_init_struct->write_timing->asyn_address_setuptime = 0xFU; - exmc_norsram_init_struct->write_timing->asyn_address_holdtime = 0xFU; - exmc_norsram_init_struct->write_timing->asyn_data_setuptime = 0xFFU; - exmc_norsram_init_struct->write_timing->bus_latency = 0xFU; - exmc_norsram_init_struct->write_timing->asyn_access_mode = EXMC_ACCESS_MODE_A; -} - -/*! - \brief initialize EXMC NOR/SRAM region - \param[in] exmc_norsram_parameter_struct: configure the EXMC NOR/SRAM parameter - norsram_region: EXMC_BANK0_NORSRAM_REGIONx,x=0..3 - write_mode: EXMC_ASYN_WRITE,EXMC_SYN_WRITE - extended_mode: ENABLE or DISABLE - asyn_wait: ENABLE or DISABLE - nwait_signal: ENABLE or DISABLE - memory_write: ENABLE or DISABLE - nwait_config: EXMC_NWAIT_CONFIG_BEFORE,EXMC_NWAIT_CONFIG_DURING - wrap_burst_mode: ENABLE or DISABLE - nwait_polarity: EXMC_NWAIT_POLARITY_LOW,EXMC_NWAIT_POLARITY_HIGH - burst_mode: ENABLE or DISABLE - databus_width: EXMC_NOR_DATABUS_WIDTH_8B,EXMC_NOR_DATABUS_WIDTH_16B - memory_type: EXMC_MEMORY_TYPE_SRAM,EXMC_MEMORY_TYPE_PSRAM,EXMC_MEMORY_TYPE_NOR - address_data_mux: ENABLE or DISABLE - read_write_timing: struct exmc_norsram_timing_parameter_struct set the time - write_timing: struct exmc_norsram_timing_parameter_struct set the time - \param[out] none - \retval none -*/ -void exmc_norsram_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct) -{ - uint32_t snctl = 0x00000000U,sntcfg = 0x00000000U,snwtcfg = 0x00000000U; - - /* get the register value */ - snctl = EXMC_SNCTL(exmc_norsram_init_struct->norsram_region); - - /* clear relative bits */ - snctl &= ((uint32_t)~(EXMC_SNCTL_NRMUX | EXMC_SNCTL_NRTP | EXMC_SNCTL_NRW | EXMC_SNCTL_SBRSTEN | - EXMC_SNCTL_NREN | EXMC_SNCTL_NRWTPOL | EXMC_SNCTL_WRAPEN | EXMC_SNCTL_NRWTCFG | - EXMC_SNCTL_WREN | EXMC_SNCTL_NRWTEN | EXMC_SNCTL_EXMODEN | EXMC_SNCTL_ASYNCWAIT | - EXMC_SNCTL_SYNCWR )); - - snctl |= (uint32_t)(exmc_norsram_init_struct->address_data_mux << SNCTL_NRMUX_OFFSET) | - exmc_norsram_init_struct->memory_type | - exmc_norsram_init_struct->databus_width | - (exmc_norsram_init_struct->burst_mode << SNCTL_SBRSTEN_OFFSET) | - exmc_norsram_init_struct->nwait_polarity | - (exmc_norsram_init_struct->wrap_burst_mode << SNCTL_WRAPEN_OFFSET) | - exmc_norsram_init_struct->nwait_config | - (exmc_norsram_init_struct->memory_write << SNCTL_WREN_OFFSET) | - (exmc_norsram_init_struct->nwait_signal << SNCTL_NRWTEN_OFFSET) | - (exmc_norsram_init_struct->extended_mode << SNCTL_EXMODEN_OFFSET) | - (exmc_norsram_init_struct->asyn_wait << SNCTL_ASYNCWAIT_OFFSET) | - exmc_norsram_init_struct->write_mode; - - sntcfg = (uint32_t)((exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime - 1U ) & EXMC_SNTCFG_ASET )| - (((exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime - 1U ) << SNTCFG_AHLD_OFFSET ) & EXMC_SNTCFG_AHLD ) | - (((exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime - 1U ) << SNTCFG_DSET_OFFSET ) & EXMC_SNTCFG_DSET ) | - (((exmc_norsram_init_struct->read_write_timing->bus_latency - 1U ) << SNTCFG_BUSLAT_OFFSET ) & EXMC_SNTCFG_BUSLAT )| - exmc_norsram_init_struct->read_write_timing->syn_clk_division | - exmc_norsram_init_struct->read_write_timing->syn_data_latency | - exmc_norsram_init_struct->read_write_timing->asyn_access_mode; - - /* nor flash access enable */ - if(EXMC_MEMORY_TYPE_NOR == exmc_norsram_init_struct->memory_type){ - snctl |= (uint32_t)EXMC_SNCTL_NREN; - } - - /* extended mode configure */ - if(ENABLE == exmc_norsram_init_struct->extended_mode){ - snwtcfg = (uint32_t)((exmc_norsram_init_struct->write_timing->asyn_address_setuptime - 1U) & EXMC_SNWTCFG_WASET ) | - (((exmc_norsram_init_struct->write_timing->asyn_address_holdtime -1U ) << SNWTCFG_WAHLD_OFFSET ) & EXMC_SNWTCFG_WAHLD )| - (((exmc_norsram_init_struct->write_timing->asyn_data_setuptime -1U ) << SNWTCFG_WDSET_OFFSET ) & EXMC_SNWTCFG_WDSET )| - (((exmc_norsram_init_struct->write_timing->bus_latency - 1U ) << SNWTCFG_WBUSLAT_OFFSET ) & EXMC_SNWTCFG_WBUSLAT ) | - exmc_norsram_init_struct->write_timing->asyn_access_mode; - }else{ - snwtcfg = BANK0_SNWTCFG_RESET; - } - - /* configure the registers */ - EXMC_SNCTL(exmc_norsram_init_struct->norsram_region) = snctl; - EXMC_SNTCFG(exmc_norsram_init_struct->norsram_region) = sntcfg; - EXMC_SNWTCFG(exmc_norsram_init_struct->norsram_region) = snwtcfg; -} - -/*! - \brief enable EXMC NOR/PSRAM bank region - \param[in] exmc_norsram_region: specifie the region of NOR/PSRAM bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK0_NORSRAM_REGIONx(x=0..3) - \param[out] none - \retval none -*/ -void exmc_norsram_enable(uint32_t exmc_norsram_region) -{ - EXMC_SNCTL(exmc_norsram_region) |= (uint32_t)EXMC_SNCTL_NRBKEN; -} - -/*! - \brief disable EXMC NOR/PSRAM bank region - \param[in] exmc_norsram_region: specifie the region of NOR/PSRAM Bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK0_NORSRAM_REGIONx(x=0..3) - \param[out] none - \retval none -*/ -void exmc_norsram_disable(uint32_t exmc_norsram_region) -{ - EXMC_SNCTL(exmc_norsram_region) &= ~(uint32_t)EXMC_SNCTL_NRBKEN; -} - -/*! - \brief deinitialize EXMC NAND bank - \param[in] exmc_nand_bank: select the bank of NAND - only one parameter can be selected which is shown as below: - \arg EXMC_BANKx_NAND(x=1..2) - \param[out] none - \retval none -*/ -void exmc_nand_deinit(uint32_t exmc_nand_bank) -{ - /* EXMC_BANK1_NAND or EXMC_BANK2_NAND */ - EXMC_NPCTL(exmc_nand_bank) = BANK1_2_NPCTL_RESET; - EXMC_NPINTEN(exmc_nand_bank) = BANK1_2_NPINTEN_RESET; - EXMC_NPCTCFG(exmc_nand_bank) = BANK1_2_NPCTCFG_RESET; - EXMC_NPATCFG(exmc_nand_bank) = BANK1_2_NPATCFG_RESET; -} - -/*! - \brief initialize exmc_norsram_parameter_struct with the default values - \param[in] none - \param[out] the initialized struct exmc_norsram_parameter_struct pointer - \retval none -*/ -void exmc_nand_struct_para_init(exmc_nand_parameter_struct* exmc_nand_init_struct) -{ - /* configure the structure with default values */ - exmc_nand_init_struct->nand_bank = EXMC_BANK1_NAND; - exmc_nand_init_struct->wait_feature = DISABLE; - exmc_nand_init_struct->databus_width = EXMC_NAND_DATABUS_WIDTH_8B; - exmc_nand_init_struct->ecc_logic = DISABLE; - exmc_nand_init_struct->ecc_size = EXMC_ECC_SIZE_256BYTES; - exmc_nand_init_struct->ctr_latency = 0x0U; - exmc_nand_init_struct->atr_latency = 0x0U; - exmc_nand_init_struct->common_space_timing->setuptime = 0xFCU; - exmc_nand_init_struct->common_space_timing->waittime = 0xFCU; - exmc_nand_init_struct->common_space_timing->holdtime = 0xFCU; - exmc_nand_init_struct->common_space_timing->databus_hiztime = 0xFCU; - exmc_nand_init_struct->attribute_space_timing->setuptime = 0xFCU; - exmc_nand_init_struct->attribute_space_timing->waittime = 0xFCU; - exmc_nand_init_struct->attribute_space_timing->holdtime = 0xFCU; - exmc_nand_init_struct->attribute_space_timing->databus_hiztime = 0xFCU; -} - -/*! - \brief initialize EXMC NAND bank - \param[in] exmc_nand_parameter_struct: configure the EXMC NAND parameter - nand_bank: EXMC_BANK1_NAND,EXMC_BANK2_NAND - ecc_size: EXMC_ECC_SIZE_xBYTES,x=256,512,1024,2048,4096 - atr_latency: EXMC_ALE_RE_DELAY_x_HCLK,x=1..16 - ctr_latency: EXMC_CLE_RE_DELAY_x_HCLK,x=1..16 - ecc_logic: ENABLE or DISABLE - databus_width: EXMC_NAND_DATABUS_WIDTH_8B,EXMC_NAND_DATABUS_WIDTH_16B - wait_feature: ENABLE or DISABLE - common_space_timing: struct exmc_nand_pccard_timing_parameter_struct set the time - attribute_space_timing: struct exmc_nand_pccard_timing_parameter_struct set the time - \param[out] none - \retval none -*/ -void exmc_nand_init(exmc_nand_parameter_struct* exmc_nand_init_struct) -{ - uint32_t npctl = 0x00000000U, npctcfg = 0x00000000U, npatcfg = 0x00000000U; - - npctl = (uint32_t)(exmc_nand_init_struct->wait_feature << NPCTL_NDWTEN_OFFSET)| - EXMC_NPCTL_NDTP | - exmc_nand_init_struct->databus_width | - (exmc_nand_init_struct->ecc_logic << NPCTL_ECCEN_OFFSET)| - exmc_nand_init_struct->ecc_size | - exmc_nand_init_struct->ctr_latency | - exmc_nand_init_struct->atr_latency; - - npctcfg = (uint32_t)((exmc_nand_init_struct->common_space_timing->setuptime - 1U) & EXMC_NPCTCFG_COMSET ) | - (((exmc_nand_init_struct->common_space_timing->waittime - 1U) << NPCTCFG_COMWAIT_OFFSET) & EXMC_NPCTCFG_COMWAIT ) | - ((exmc_nand_init_struct->common_space_timing->holdtime << NPCTCFG_COMHLD_OFFSET) & EXMC_NPCTCFG_COMHLD ) | - (((exmc_nand_init_struct->common_space_timing->databus_hiztime - 1U) << NPCTCFG_COMHIZ_OFFSET) & EXMC_NPCTCFG_COMHIZ ); - - npatcfg = (uint32_t)((exmc_nand_init_struct->attribute_space_timing->setuptime - 1U) & EXMC_NPATCFG_ATTSET ) | - (((exmc_nand_init_struct->attribute_space_timing->waittime - 1U) << NPATCFG_ATTWAIT_OFFSET) & EXMC_NPATCFG_ATTWAIT ) | - ((exmc_nand_init_struct->attribute_space_timing->holdtime << NPATCFG_ATTHLD_OFFSET) & EXMC_NPATCFG_ATTHLD ) | - (((exmc_nand_init_struct->attribute_space_timing->databus_hiztime -1U) << NPATCFG_ATTHIZ_OFFSET) & EXMC_NPATCFG_ATTHIZ ); - - /* EXMC_BANK1_NAND or EXMC_BANK2_NAND initialize */ - EXMC_NPCTL(exmc_nand_init_struct->nand_bank) = npctl; - EXMC_NPCTCFG(exmc_nand_init_struct->nand_bank) = npctcfg; - EXMC_NPATCFG(exmc_nand_init_struct->nand_bank) = npatcfg; -} - -/*! - \brief enable NAND bank - \param[in] exmc_nand_bank: specifie the NAND bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANKx_NAND(x=1,2) - \param[out] none - \retval none -*/ -void exmc_nand_enable(uint32_t exmc_nand_bank) -{ - EXMC_NPCTL(exmc_nand_bank) |= EXMC_NPCTL_NDBKEN; -} - -/*! - \brief disable NAND bank - \param[in] exmc_nand_bank: specifie the NAND bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANKx_NAND(x=1,2) - \param[out] none - \retval none -*/ -void exmc_nand_disable(uint32_t exmc_nand_bank) -{ - EXMC_NPCTL(exmc_nand_bank) &= (~EXMC_NPCTL_NDBKEN); -} - -/*! - \brief deinitialize EXMC PC card bank - \param[in] none - \param[out] none - \retval none -*/ -void exmc_pccard_deinit(void) -{ - /* EXMC_BANK3_PCCARD */ - EXMC_NPCTL3 = BANK3_NPCTL_RESET; - EXMC_NPINTEN3 = BANK3_NPINTEN_RESET; - EXMC_NPCTCFG3 = BANK3_NPCTCFG_RESET; - EXMC_NPATCFG3 = BANK3_NPATCFG_RESET; - EXMC_PIOTCFG3 = BANK3_PIOTCFG3_RESET; -} - -/*! - \brief initialize exmc_pccard_parameter_struct parameter with the default values - \param[in] none - \param[out] the initialized struct exmc_pccard_parameter_struct pointer - \retval none -*/ -void exmc_pccard_struct_para_init(exmc_pccard_parameter_struct* exmc_pccard_init_struct) -{ - /* configure the structure with default values */ - exmc_pccard_init_struct->wait_feature = DISABLE; - exmc_pccard_init_struct->ctr_latency = 0x0U; - exmc_pccard_init_struct->atr_latency = 0x0U; - exmc_pccard_init_struct->common_space_timing->setuptime = 0xFCU; - exmc_pccard_init_struct->common_space_timing->waittime = 0xFCU; - exmc_pccard_init_struct->common_space_timing->holdtime = 0xFCU; - exmc_pccard_init_struct->common_space_timing->databus_hiztime = 0xFCU; - exmc_pccard_init_struct->attribute_space_timing->setuptime = 0xFCU; - exmc_pccard_init_struct->attribute_space_timing->waittime = 0xFCU; - exmc_pccard_init_struct->attribute_space_timing->holdtime = 0xFCU; - exmc_pccard_init_struct->attribute_space_timing->databus_hiztime = 0xFCU; - exmc_pccard_init_struct->io_space_timing->setuptime = 0xFCU; - exmc_pccard_init_struct->io_space_timing->waittime = 0xFCU; - exmc_pccard_init_struct->io_space_timing->holdtime = 0xFCU; - exmc_pccard_init_struct->io_space_timing->databus_hiztime = 0xFCU; -} - -/*! - \brief initialize EXMC PC card bank - \param[in] exmc_pccard_parameter_struct: configure the EXMC NAND parameter - atr_latency: EXMC_ALE_RE_DELAY_x_HCLK,x=1..16 - ctr_latency: EXMC_CLE_RE_DELAY_x_HCLK,x=1..16 - wait_feature: ENABLE or DISABLE - common_space_timing: struct exmc_nand_pccard_timing_parameter_struct set the time - attribute_space_timing: struct exmc_nand_pccard_timing_parameter_struct set the time - io_space_timing: exmc_nand_pccard_timing_parameter_struct set the time - \param[out] none - \retval none -*/ -void exmc_pccard_init(exmc_pccard_parameter_struct* exmc_pccard_init_struct) -{ - /* configure the EXMC bank3 PC card control register */ - EXMC_NPCTL3 = (uint32_t)(exmc_pccard_init_struct->wait_feature << NPCTL_NDWTEN_OFFSET) | - EXMC_NAND_DATABUS_WIDTH_16B | - exmc_pccard_init_struct->ctr_latency | - exmc_pccard_init_struct->atr_latency ; - - /* configure the EXMC bank3 PC card common space timing configuration register */ - EXMC_NPCTCFG3 = (uint32_t)((exmc_pccard_init_struct->common_space_timing->setuptime - 1U)& EXMC_NPCTCFG_COMSET ) | - (((exmc_pccard_init_struct->common_space_timing->waittime - 1U) << NPCTCFG_COMWAIT_OFFSET) & EXMC_NPCTCFG_COMWAIT ) | - ((exmc_pccard_init_struct->common_space_timing->holdtime << NPCTCFG_COMHLD_OFFSET) & EXMC_NPCTCFG_COMHLD ) | - (((exmc_pccard_init_struct->common_space_timing->databus_hiztime - 1U) << NPCTCFG_COMHIZ_OFFSET) & EXMC_NPCTCFG_COMHIZ ); - - /* configure the EXMC bank3 PC card attribute space timing configuration register */ - EXMC_NPATCFG3 = (uint32_t)((exmc_pccard_init_struct->attribute_space_timing->setuptime - 1U) & EXMC_NPATCFG_ATTSET ) | - (((exmc_pccard_init_struct->attribute_space_timing->waittime - 1U) << NPATCFG_ATTWAIT_OFFSET) & EXMC_NPATCFG_ATTWAIT ) | - ((exmc_pccard_init_struct->attribute_space_timing->holdtime << NPATCFG_ATTHLD_OFFSET) & EXMC_NPATCFG_ATTHLD )| - (((exmc_pccard_init_struct->attribute_space_timing->databus_hiztime -1U) << NPATCFG_ATTHIZ_OFFSET) & EXMC_NPATCFG_ATTHIZ ); - - /* configure the EXMC bank3 PC card io space timing configuration register */ - EXMC_PIOTCFG3 = (uint32_t)((exmc_pccard_init_struct->io_space_timing->setuptime - 1U) & EXMC_PIOTCFG3_IOSET ) | - (((exmc_pccard_init_struct->io_space_timing->waittime - 1U) << PIOTCFG_IOWAIT_OFFSET) & EXMC_PIOTCFG3_IOWAIT ) | - ((exmc_pccard_init_struct->io_space_timing->holdtime << PIOTCFG_IOHLD_OFFSET) & EXMC_PIOTCFG3_IOHLD )| - ((exmc_pccard_init_struct->io_space_timing->databus_hiztime << PIOTCFG_IOHIZ_OFFSET) & EXMC_PIOTCFG3_IOHIZ ); -} - -/*! - \brief enable PC Card Bank - \param[in] none - \param[out] none - \retval none -*/ -void exmc_pccard_enable(void) -{ - EXMC_NPCTL3 |= EXMC_NPCTL_NDBKEN; -} - -/*! - \brief disable PC Card Bank - \param[in] none - \param[out] none - \retval none -*/ -void exmc_pccard_disable(void) -{ - EXMC_NPCTL3 &= (~EXMC_NPCTL_NDBKEN); -} - -/*! - \brief configure CRAM page size - \param[in] exmc_norsram_region: specifie the region of NOR/PSRAM bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK0_NORSRAM_REGIONx(x=0..3) - \param[in] page_size: CRAM page size - only one parameter can be selected which is shown as below: - \arg EXMC_CRAM_AUTO_SPLIT: the clock is generated only during synchronous access - \arg EXMC_CRAM_PAGE_SIZE_128_BYTES: page size is 128 bytes - \arg EXMC_CRAM_PAGE_SIZE_256_BYTES: page size is 256 bytes - \arg EXMC_CRAM_PAGE_SIZE_512_BYTES: page size is 512 bytes - \arg EXMC_CRAM_PAGE_SIZE_1024_BYTES: page size is 1024 bytes - \param[out] none - \retval none -*/ -void exmc_norsram_page_size_config(uint32_t exmc_norsram_region, uint32_t page_size) -{ - /* reset the bits */ - EXMC_SNCTL(exmc_norsram_region) &= ~EXMC_SNCTL_CPS; - - /* set the CPS bits */ - EXMC_SNCTL(exmc_norsram_region) |= page_size; -} - -/*! - \brief enable or disable the EXMC NAND ECC function - \param[in] exmc_nand_bank: specifie the NAND bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANKx_NAND(x=1,2) - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void exmc_nand_ecc_config(uint32_t exmc_nand_bank, ControlStatus newvalue) -{ - if (ENABLE == newvalue){ - /* enable the selected NAND bank ECC function */ - EXMC_NPCTL(exmc_nand_bank) |= EXMC_NPCTL_ECCEN; - }else{ - /* disable the selected NAND bank ECC function */ - EXMC_NPCTL(exmc_nand_bank) &= (~EXMC_NPCTL_ECCEN); - } -} - -/*! - \brief get the EXMC ECC value - \param[in] exmc_nand_bank: specifie the NAND bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANKx_NAND(x=1,2) - \param[out] none - \retval the error correction code(ECC) value -*/ -uint32_t exmc_ecc_get(uint32_t exmc_nand_bank) -{ - return (EXMC_NECC(exmc_nand_bank)); -} - -/*! - \brief enable EXMC interrupt - \param[in] exmc_bank: specifies the NAND bank,PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] interrupt: EXMC interrupt flag - only one parameter can be selected which are shown as below: - \arg EXMC_NAND_PCCARD_INT_FLAG_RISE: rising edge interrupt and flag - \arg EXMC_NAND_PCCARD_INT_FLAG_LEVEL: high-level interrupt and flag - \arg EXMC_NAND_PCCARD_INT_FLAG_FALL: falling edge interrupt and flag - \param[out] none - \retval none -*/ -void exmc_interrupt_enable(uint32_t exmc_bank,uint32_t interrupt) -{ - /* NAND bank1,bank2 or PC card bank3 */ - EXMC_NPINTEN(exmc_bank) |= interrupt; -} - -/*! - \brief disable EXMC interrupt - \param[in] exmc_bank: specifies the NAND bank , PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] interrupt: EXMC interrupt flag - only one parameter can be selected which are shown as below: - \arg EXMC_NAND_PCCARD_INT_FLAG_RISE: rising edge interrupt and flag - \arg EXMC_NAND_PCCARD_INT_FLAG_LEVEL: high-level interrupt and flag - \arg EXMC_NAND_PCCARD_INT_FLAG_FALL: falling edge interrupt and flag - \param[out] none - \retval none -*/ -void exmc_interrupt_disable(uint32_t exmc_bank,uint32_t interrupt) -{ - /* NAND bank1,bank2 or PC card bank3 */ - EXMC_NPINTEN(exmc_bank) &= (~interrupt); -} - -/*! - \brief get EXMC flag status - \param[in] exmc_bank: specifies the NAND bank , PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC Card bank - \param[in] flag: EXMC status and flag - only one parameter can be selected which are shown as below: - \arg EXMC_NAND_PCCARD_FLAG_RISE: interrupt rising edge status - \arg EXMC_NAND_PCCARD_FLAG_LEVEL: interrupt high-level status - \arg EXMC_NAND_PCCARD_FLAG_FALL: interrupt falling edge status - \arg EXMC_NAND_PCCARD_FLAG_FIFOE: FIFO empty flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus exmc_flag_get(uint32_t exmc_bank,uint32_t flag) -{ - uint32_t status = 0x00000000U; - - /* NAND bank1,bank2 or PC card bank3 */ - status = EXMC_NPINTEN(exmc_bank); - - if ((status & flag) != (uint32_t)flag ){ - /* flag is reset */ - return RESET; - }else{ - /* flag is set */ - return SET; - } -} - -/*! - \brief clear EXMC flag status - \param[in] exmc_bank: specifie the NAND bank , PCCARD bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] flag: EXMC status and flag - only one parameter can be selected which are shown as below: - \arg EXMC_NAND_PCCARD_FLAG_RISE: interrupt rising edge status - \arg EXMC_NAND_PCCARD_FLAG_LEVEL: interrupt high-level status - \arg EXMC_NAND_PCCARD_FLAG_FALL: interrupt falling edge status - \arg EXMC_NAND_PCCARD_FLAG_FIFOE: FIFO empty flag - \param[out] none - \retval none -*/ -void exmc_flag_clear(uint32_t exmc_bank,uint32_t flag) -{ - /* NAND bank1,bank2 or PC card bank3 */ - EXMC_NPINTEN(exmc_bank) &= (~flag); -} - -/*! - \brief get EXMC interrupt flag - \param[in] exmc_bank: specifies the NAND bank , PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] interrupt: EXMC interrupt flag - only one parameter can be selected which are shown as below: - \arg EXMC_NAND_PCCARD_INT_FLAG_RISE: rising edge interrupt and flag - \arg EXMC_NAND_PCCARD_INT_FLAG_LEVEL: high-level interrupt and flag - \arg EXMC_NAND_PCCARD_INT_FLAG_FALL: falling edge interrupt and flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus exmc_interrupt_flag_get(uint32_t exmc_bank,uint32_t interrupt) -{ - uint32_t status = 0x00000000U,interrupt_enable = 0x00000000U,interrupt_state = 0x00000000U; - - /* NAND bank1,bank2 or PC card bank3 */ - status = EXMC_NPINTEN(exmc_bank); - interrupt_state = (status & (interrupt >> INTEN_INTS_OFFSET)); - - interrupt_enable = (status & interrupt); - - if ((interrupt_enable) && (interrupt_state)){ - /* interrupt flag is set */ - return SET; - }else{ - /* interrupt flag is reset */ - return RESET; - } -} - -/*! - \brief clear EXMC interrupt flag - \param[in] exmc_bank: specifies the NAND bank , PC card bank - only one parameter can be selected which is shown as below: - \arg EXMC_BANK1_NAND: the NAND bank1 - \arg EXMC_BANK2_NAND: the NAND bank2 - \arg EXMC_BANK3_PCCARD: the PC card bank - \param[in] interrupt: EXMC interrupt flag - only one parameter can be selected which are shown as below: - \arg EXMC_NAND_PCCARD_INT_FLAG_RISE: rising edge interrupt and flag - \arg EXMC_NAND_PCCARD_INT_FLAG_LEVEL: high-level interrupt and flag - \arg EXMC_NAND_PCCARD_INT_FLAG_FALL: falling edge interrupt and flag - \param[out] none - \retval none -*/ -void exmc_interrupt_flag_clear(uint32_t exmc_bank,uint32_t interrupt) -{ - /* NAND bank1,bank2 or PC card bank3 */ - EXMC_NPINTEN(exmc_bank) &= ~(interrupt >> INTEN_INTS_OFFSET); -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_exti.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_exti.c deleted file mode 100644 index b027a52..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_exti.c +++ /dev/null @@ -1,253 +0,0 @@ -/*! - \file gd32f30x_exti.c - \brief EXTI driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_exti.h" - -/*! - \brief deinitialize the EXTI - \param[in] none - \param[out] none - \retval none -*/ -void exti_deinit(void) -{ - /* reset the value of all the EXTI registers */ - EXTI_INTEN = (uint32_t)0x00000000U; - EXTI_EVEN = (uint32_t)0x00000000U; - EXTI_RTEN = (uint32_t)0x00000000U; - EXTI_FTEN = (uint32_t)0x00000000U; - EXTI_SWIEV = (uint32_t)0x00000000U; -} - -/*! - \brief initialize the EXTI - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[in] mode: interrupt or event mode, refer to exti_mode_enum - only one parameter can be selected which is shown as below: - \arg EXTI_INTERRUPT: interrupt mode - \arg EXTI_EVENT: event mode - \param[in] trig_type: interrupt trigger type, refer to exti_trig_type_enum - only one parameter can be selected which is shown as below: - \arg EXTI_TRIG_RISING: rising edge trigger - \arg EXTI_TRIG_FALLING: falling trigger - \arg EXTI_TRIG_BOTH: rising and falling trigger - \param[out] none - \retval none -*/ -void exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type) -{ - /* reset the EXTI line x */ - EXTI_INTEN &= ~(uint32_t)linex; - EXTI_EVEN &= ~(uint32_t)linex; - EXTI_RTEN &= ~(uint32_t)linex; - EXTI_FTEN &= ~(uint32_t)linex; - - /* set the EXTI mode and enable the interrupts or events from EXTI line x */ - switch(mode){ - case EXTI_INTERRUPT: - EXTI_INTEN |= (uint32_t)linex; - break; - case EXTI_EVENT: - EXTI_EVEN |= (uint32_t)linex; - break; - default: - break; - } - - /* set the EXTI trigger type */ - switch(trig_type){ - case EXTI_TRIG_RISING: - EXTI_RTEN |= (uint32_t)linex; - EXTI_FTEN &= ~(uint32_t)linex; - break; - case EXTI_TRIG_FALLING: - EXTI_RTEN &= ~(uint32_t)linex; - EXTI_FTEN |= (uint32_t)linex; - break; - case EXTI_TRIG_BOTH: - EXTI_RTEN |= (uint32_t)linex; - EXTI_FTEN |= (uint32_t)linex; - break; - default: - break; - } -} - -/*! - \brief enable the interrupts from EXTI line x - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_interrupt_enable(exti_line_enum linex) -{ - EXTI_INTEN |= (uint32_t)linex; -} - -/*! - \brief enable the events from EXTI line x - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_event_enable(exti_line_enum linex) -{ - EXTI_EVEN |= (uint32_t)linex; -} - -/*! - \brief disable the interrupt from EXTI line x - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_interrupt_disable(exti_line_enum linex) -{ - EXTI_INTEN &= ~(uint32_t)linex; -} - -/*! - \brief disable the events from EXTI line x - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_event_disable(exti_line_enum linex) -{ - EXTI_EVEN &= ~(uint32_t)linex; -} - -/*! - \brief get EXTI lines flag - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval FlagStatus: status of flag (RESET or SET) -*/ -FlagStatus exti_flag_get(exti_line_enum linex) -{ - if(RESET != (EXTI_PD & (uint32_t)linex)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear EXTI lines pending flag - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_flag_clear(exti_line_enum linex) -{ - EXTI_PD = (uint32_t)linex; -} - -/*! - \brief get EXTI lines flag when the interrupt flag is set - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval FlagStatus: status of flag (RESET or SET) -*/ -FlagStatus exti_interrupt_flag_get(exti_line_enum linex) -{ - uint32_t flag_left, flag_right; - - flag_left = EXTI_PD & (uint32_t)linex; - flag_right = EXTI_INTEN & (uint32_t)linex; - - if((RESET != flag_left) && (RESET != flag_right)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear EXTI lines pending flag - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_interrupt_flag_clear(exti_line_enum linex) -{ - EXTI_PD = (uint32_t)linex; -} - -/*! - \brief enable EXTI software interrupt event - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_software_interrupt_enable(exti_line_enum linex) -{ - EXTI_SWIEV |= (uint32_t)linex; -} - -/*! - \brief disable EXTI software interrupt event - \param[in] linex: EXTI line number, refer to exti_line_enum - only one parameter can be selected which is shown as below: - \arg EXTI_x (x=0..19): EXTI line x - \param[out] none - \retval none -*/ -void exti_software_interrupt_disable(exti_line_enum linex) -{ - EXTI_SWIEV &= ~(uint32_t)linex; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_fmc.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_fmc.c deleted file mode 100644 index bce9e99..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_fmc.c +++ /dev/null @@ -1,1009 +0,0 @@ -/*! - \file gd32f30x_fmc.c - \brief FMC driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - - -#include "gd32f30x_fmc.h" - -/*! - \brief set the wait state counter value - \param[in] wscnt:wait state counter value - \arg WS_WSCNT_0: FMC 0 wait - \arg WS_WSCNT_1: FMC 1 wait - \arg WS_WSCNT_2: FMC 2 wait - \param[out] none - \retval none -*/ -void fmc_wscnt_set(uint32_t wscnt) -{ - uint32_t reg; - - reg = FMC_WS; - /* set the wait state counter value */ - reg &= ~FMC_WS_WSCNT; - FMC_WS = (reg | wscnt); -} - -/*! - \brief unlock the main FMC operation - \param[in] none - \param[out] none - \retval none -*/ -void fmc_unlock(void) -{ - if((RESET != (FMC_CTL0 & FMC_CTL0_LK))){ - /* write the FMC unlock key */ - FMC_KEY0 = UNLOCK_KEY0; - FMC_KEY0 = UNLOCK_KEY1; - } - if(FMC_BANK0_SIZE < FMC_SIZE){ - /* write the FMC unlock key */ - if(RESET != (FMC_CTL1 & FMC_CTL1_LK)){ - FMC_KEY1 = UNLOCK_KEY0; - FMC_KEY1 = UNLOCK_KEY1; - } - } -} - -/*! - \brief unlock the FMC bank0 operation - this function can be used for all GD32F30x devices. - for GD32F30x with flash more than 512KB, this function unlocks bank0. - for GD32F30x with flash no more than 512KB and it is equivalent to fmc_unlock function. - \param[in] none - \param[out] none - \retval none -*/ -void fmc_bank0_unlock(void) -{ - if((RESET != (FMC_CTL0 & FMC_CTL0_LK))){ - /* write the FMC unlock key */ - FMC_KEY0 = UNLOCK_KEY0; - FMC_KEY0 = UNLOCK_KEY1; - } -} - -/*! - \brief unlock the FMC bank1 operation - this function can be used for GD32F30x with flash more than 512KB. - \param[in] none - \param[out] none - \retval none -*/ -void fmc_bank1_unlock(void) -{ - if((RESET != (FMC_CTL1 & FMC_CTL1_LK))){ - /* write the FMC unlock key */ - FMC_KEY1 = UNLOCK_KEY0; - FMC_KEY1 = UNLOCK_KEY1; - } -} - -/*! - \brief lock the main FMC operation - \param[in] none - \param[out] none - \retval none -*/ -void fmc_lock(void) -{ - /* set the LK bit */ - FMC_CTL0 |= FMC_CTL0_LK; - - if(FMC_BANK0_SIZE < FMC_SIZE){ - /* set the LK bit */ - FMC_CTL1 |= FMC_CTL1_LK; - } -} - -/*! - \brief lock the FMC bank0 operation - this function can be used for all GD32F30X devices. - for GD32F30x with flash more than 512KB, this function locks bank0. - for GD32F30x with flash no more than 512KB and it is equivalent to fmc_lock function. - \param[in] none - \param[out] none - \retval none -*/ -void fmc_bank0_lock(void) -{ - /* set the LK bit*/ - FMC_CTL0 |= FMC_CTL0_LK; -} - -/*! - \brief lock the FMC bank1 operation - this function can be used for GD32F30x with flash more than 512KB. - \param[in] none - \param[out] none - \retval none -*/ -void fmc_bank1_lock(void) -{ - /* set the LK bit*/ - FMC_CTL1 |= FMC_CTL1_LK; -} - -/*! - \brief erase page - \param[in] page_address: the page address to be erased. - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_page_erase(uint32_t page_address) -{ - fmc_state_enum fmc_state; - - if(FMC_BANK0_SIZE < FMC_SIZE){ - if(FMC_BANK0_END_ADDRESS > page_address){ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* if the last operation is completed, start page erase */ - if(FMC_READY == fmc_state){ - FMC_CTL0 |= FMC_CTL0_PER; - FMC_ADDR0 = page_address; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PER bit */ - FMC_CTL0 &= ~FMC_CTL0_PER; - } - }else{ - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* if the last operation is completed, start page erase */ - if(FMC_READY == fmc_state){ - FMC_CTL1 |= FMC_CTL1_PER; - FMC_ADDR1 = page_address; - if(FMC_OBSTAT & FMC_OBSTAT_SPC){ - FMC_ADDR0 = page_address; - } - FMC_CTL1 |= FMC_CTL1_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PER bit */ - FMC_CTL1 &= ~FMC_CTL1_PER; - } - } - }else{ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* if the last operation is completed, start page erase */ - if(FMC_READY == fmc_state){ - FMC_CTL0 |= FMC_CTL0_PER; - FMC_ADDR0 = page_address; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PER bit */ - FMC_CTL0 &= ~FMC_CTL0_PER; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief erase whole chip - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_mass_erase(void) -{ - fmc_state_enum fmc_state; - if(FMC_BANK0_SIZE < FMC_SIZE){ - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - if(FMC_READY == fmc_state){ - /* start whole chip erase */ - FMC_CTL0 |= FMC_CTL0_MER; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - if(FMC_READY != fmc_state){ - return fmc_state; - } - /* reset the MER bit */ - FMC_CTL0 &= ~FMC_CTL0_MER; - } - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - if(FMC_READY == fmc_state){ - /* start whole chip erase */ - FMC_CTL1 |= FMC_CTL1_MER; - FMC_CTL1 |= FMC_CTL1_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the MER bit */ - FMC_CTL1 &= ~FMC_CTL1_MER; - } - }else{ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - if(FMC_READY == fmc_state){ - /* start whole chip erase */ - FMC_CTL0 |= FMC_CTL0_MER; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the MER bit */ - FMC_CTL0 &= ~FMC_CTL0_MER; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief erase bank0 - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank0_erase(void) -{ - fmc_state_enum fmc_state = FMC_READY; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* start FMC bank0 erase */ - FMC_CTL0 |= FMC_CTL0_MER; - FMC_CTL0 |= FMC_CTL0_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the MER bit */ - FMC_CTL0 &= ~FMC_CTL0_MER; - } - /* return the fmc state */ - return fmc_state; -} - -/*! - \brief erase bank1 - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank1_erase(void) -{ - fmc_state_enum fmc_state = FMC_READY; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* start FMC bank1 erase */ - FMC_CTL1 |= FMC_CTL1_MER; - FMC_CTL1 |= FMC_CTL1_START; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the MER bit */ - FMC_CTL1 &= ~FMC_CTL1_MER; - } - /* return the fmc state */ - return fmc_state; -} - -/*! - \brief program a word at the corresponding address - \param[in] address: address to program - \param[in] data: word to program - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_word_program(uint32_t address, uint32_t data) -{ - fmc_state_enum fmc_state = FMC_READY; - if(FMC_BANK0_SIZE < FMC_SIZE){ - if(FMC_BANK0_END_ADDRESS > address){ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG32(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - }else{ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL1 |= FMC_CTL1_PG; - REG32(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL1 &= ~FMC_CTL1_PG; - } - } - }else{ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG32(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief program a half word at the corresponding address - \param[in] address: address to program - \param[in] data: halfword to program - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_halfword_program(uint32_t address, uint16_t data) -{ - fmc_state_enum fmc_state = FMC_READY; - if(FMC_BANK0_SIZE < FMC_SIZE){ - if(FMC_BANK0_END_ADDRESS > address){ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG16(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - }else{ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL1 |= FMC_CTL1_PG; - REG16(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL1 &= ~FMC_CTL1_PG; - } - } - }else{ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG16(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief program a word at the corresponding address without erasing - \param[in] address: address to program - \param[in] data: word to program - \param[out] none - \retval fmc_state -*/ -fmc_state_enum fmc_word_reprogram(uint32_t address, uint32_t data) -{ - fmc_state_enum fmc_state = FMC_READY; - if(FMC_BANK0_SIZE < FMC_SIZE){ - if(FMC_BANK0_END_ADDRESS > address){ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - FMC_WSEN |= FMC_WSEN_BPEN; - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG32(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - }else{ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - FMC_WSEN |= FMC_WSEN_BPEN; - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL1 |= FMC_CTL1_PG; - REG32(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank1_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL1 &= ~FMC_CTL1_PG; - } - } - }else{ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - FMC_WSEN |= FMC_WSEN_BPEN; - if(FMC_READY == fmc_state){ - /* set the PG bit to start program */ - FMC_CTL0 |= FMC_CTL0_PG; - REG32(address) = data; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - /* reset the PG bit */ - FMC_CTL0 &= ~FMC_CTL0_PG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief unlock the option byte operation - \param[in] none - \param[out] none - \retval none -*/ -void ob_unlock(void) -{ - if(RESET == (FMC_CTL0 & FMC_CTL0_OBWEN)){ - /* write the FMC key */ - FMC_OBKEY = UNLOCK_KEY0; - FMC_OBKEY = UNLOCK_KEY1; - } -} - -/*! - \brief lock the option byte operation - \param[in] none - \param[out] none - \retval none -*/ -void ob_lock(void) -{ - /* reset the OBWEN bit */ - FMC_CTL0 &= ~FMC_CTL0_OBWEN; -} - -/*! - \brief erase the FMC option byte - unlock the FMC_CTL0 and option byte before calling this function - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_erase(void) -{ - uint16_t temp_spc = FMC_NSPC; - - fmc_state_enum fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - /* check the option byte security protection value */ - if(RESET != ob_spc_get()){ - temp_spc = FMC_USPC; - } - - if(FMC_READY == fmc_state){ - - /* start erase the option byte */ - FMC_CTL0 |= FMC_CTL0_OBER; - FMC_CTL0 |= FMC_CTL0_START; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* reset the OBER bit */ - FMC_CTL0 &= ~FMC_CTL0_OBER; - /* set the OBPG bit */ - FMC_CTL0 |= FMC_CTL0_OBPG; - /* no security protection */ - OB_SPC = (uint16_t)temp_spc; - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - }else{ - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief enable write protection - \param[in] ob_wp: specify sector to be write protected - \arg OB_WPx(x=0..31): write protect specify sector - \arg OB_WP_ALL: write protect all sector - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_write_protection_enable(uint32_t ob_wp) -{ - uint16_t temp_wp0, temp_wp1, temp_wp2, temp_wp3; - - fmc_state_enum fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - ob_wp = (uint32_t)(~ob_wp); - temp_wp0 = (uint16_t)(ob_wp & OB_WP0_WP0); - temp_wp1 = (uint16_t)((ob_wp & OB_WP1_WP1) >> 8U); - temp_wp2 = (uint16_t)((ob_wp & OB_WP2_WP2) >> 16U); - temp_wp3 = (uint16_t)((ob_wp & OB_WP3_WP3) >> 24U); - - if(FMC_READY == fmc_state){ - - /* set the OBPG bit*/ - FMC_CTL0 |= FMC_CTL0_OBPG; - - if(0xFFU != temp_wp0){ - OB_WP0 = temp_wp0; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - } - if((FMC_READY == fmc_state) && (0xFFU != temp_wp1)){ - OB_WP1 = temp_wp1; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - } - if((FMC_READY == fmc_state) && (0xFFU != temp_wp2)){ - OB_WP2 = temp_wp2; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - } - if((FMC_READY == fmc_state) && (0xFFU != temp_wp3)){ - OB_WP3 = temp_wp3; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - } - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief configure security protection - \param[in] ob_spc: specify security protection - \arg FMC_NSPC: no security protection - \arg FMC_USPC: under security protection - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_security_protection_config(uint8_t ob_spc) -{ - fmc_state_enum fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - FMC_CTL0 |= FMC_CTL0_OBER; - FMC_CTL0 |= FMC_CTL0_START; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* reset the OBER bit */ - FMC_CTL0 &= ~FMC_CTL0_OBER; - - /* start the option byte program */ - FMC_CTL0 |= FMC_CTL0_OBPG; - - OB_SPC = (uint16_t)ob_spc; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - }else{ - if(FMC_TOERR != fmc_state){ - /* reset the OBER bit */ - FMC_CTL0 &= ~FMC_CTL0_OBER; - } - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief program the FMC user option byte - \param[in] ob_fwdgt: option byte watchdog value - \arg OB_FWDGT_SW: software free watchdog - \arg OB_FWDGT_HW: hardware free watchdog - \param[in] ob_deepsleep: option byte deepsleep reset value - \arg OB_DEEPSLEEP_NRST: no reset when entering deepsleep mode - \arg OB_DEEPSLEEP_RST: generate a reset instead of entering deepsleep mode - \param[in] ob_stdby:option byte standby reset value - \arg OB_STDBY_NRST: no reset when entering standby mode - \arg OB_STDBY_RST: generate a reset instead of entering standby mode - \param[in] ob_boot: specifies the option byte boot bank value - \arg OB_BOOT_B0: boot from bank0 - \arg OB_BOOT_B1: boot from bank1 or bank0 if bank1 is void - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_user_write(uint8_t ob_fwdgt, uint8_t ob_deepsleep, uint8_t ob_stdby, uint8_t ob_boot) -{ - fmc_state_enum fmc_state = FMC_READY; - uint8_t temp; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the OBPG bit*/ - FMC_CTL0 |= FMC_CTL0_OBPG; - - temp = ((uint8_t)((uint8_t)((uint8_t)(ob_boot | ob_fwdgt) | ob_deepsleep) | ob_stdby) | OB_USER_MASK); - OB_USER = (uint16_t)temp; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief program option bytes data - \param[in] address: the option bytes address to be programmed - \param[in] data: the byte to be programmed - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum ob_data_program(uint32_t address, uint8_t data) -{ - fmc_state_enum fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_READY == fmc_state){ - /* set the OBPG bit */ - FMC_CTL0 |= FMC_CTL0_OBPG; - REG16(address) = data; - - /* wait for the FMC ready */ - fmc_state = fmc_bank0_ready_wait(FMC_TIMEOUT_COUNT); - - if(FMC_TOERR != fmc_state){ - /* reset the OBPG bit */ - FMC_CTL0 &= ~FMC_CTL0_OBPG; - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief get the FMC user option byte - \param[in] none - \param[out] none - \retval the FMC user option byte values -*/ -uint8_t ob_user_get(void) -{ - /* return the FMC user option byte value */ - return (uint8_t)(FMC_OBSTAT >> 2U); -} - -/*! - \brief get OB_DATA in register FMC_OBSTAT - \param[in] none - \param[out] none - \retval ob_data -*/ -uint16_t ob_data_get(void) -{ - return (uint16_t)(FMC_OBSTAT >> 10U); -} - -/*! - \brief get the FMC option byte write protection - \param[in] none - \param[out] none - \retval the FMC write protection option byte value -*/ -uint32_t ob_write_protection_get(void) -{ - /* return the FMC write protection option byte value */ - return FMC_WP; -} - -/*! - \brief get the FMC option byte security protection - \param[in] none - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus ob_spc_get(void) -{ - FlagStatus spc_state = RESET; - - if(RESET != (FMC_OBSTAT & FMC_OBSTAT_SPC)){ - spc_state = SET; - }else{ - spc_state = RESET; - } - return spc_state; -} - -/*! - \brief enable FMC interrupt - \param[in] interrupt: the FMC interrupt source - \arg FMC_INT_BANK0_END: FMC bank0 end of program interrupt - \arg FMC_INT_BANK0_ERR: FMC bank0 error interrupt - \arg FMC_INT_BANK1_END: FMC bank1 end of program interrupt - \arg FMC_INT_BANK1_ERR: FMC bank1 error interrupt - \param[out] none - \retval none -*/ -void fmc_interrupt_enable(uint32_t interrupt) -{ - FMC_REG_VAL(interrupt) |= BIT(FMC_BIT_POS(interrupt)); -} - -/*! - \brief disable FMC interrupt - \param[in] interrupt: the FMC interrupt source - \arg FMC_INT_BANK0_END: FMC bank0 end of program interrupt - \arg FMC_INT_BANK0_ERR: FMC bank0 error interrupt - \arg FMC_INT_BANK1_END: FMC bank1 end of program interrupt - \arg FMC_INT_BANK1_ERR: FMC bank1 error interrupt - \param[out] none - \retval none -*/ -void fmc_interrupt_disable(uint32_t interrupt) -{ - FMC_REG_VAL(interrupt) &= ~BIT(FMC_BIT_POS(interrupt)); -} - -/*! - \brief check flag is set or not - \param[in] flag: check FMC flag - only one parameter can be selected which is shown as below: - \arg FMC_FLAG_BANK0_BUSY: FMC bank0 busy flag bit - \arg FMC_FLAG_BANK0_PGERR: FMC bank0 operation error flag bit - \arg FMC_FLAG_BANK0_WPERR: FMC bank0 erase/program protection error flag bit - \arg FMC_FLAG_BANK0_END: FMC bank0 end of operation flag bit - \arg FMC_FLAG_OBERR: FMC option bytes read error flag bit - \arg FMC_FLAG_BANK1_BUSY: FMC bank1 busy flag bit - \arg FMC_FLAG_BANK1_PGERR: FMC bank1 operation error flag bit - \arg FMC_FLAG_BANK1_WPERR: FMC bank1 erase/program protection error flag bit - \arg FMC_FLAG_BANK1_END: FMC bank1 end of operation flag bit - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus fmc_flag_get(uint32_t flag) -{ - if(RESET != (FMC_REG_VAL(flag) & BIT(FMC_BIT_POS(flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear the FMC flag - \param[in] flag: clear FMC flag - only one parameter can be selected which is shown as below: - \arg FMC_FLAG_BANK0_PGERR: FMC bank0 operation error flag bit - \arg FMC_FLAG_BANK0_WPERR: FMC bank0 erase/program protection error flag bit - \arg FMC_FLAG_BANK0_END: FMC bank0 end of operation flag bit - \arg FMC_FLAG_BANK1_PGERR: FMC bank1 operation error flag bit - \arg FMC_FLAG_BANK1_WPERR: FMC bank1 erase/program protection error flag bit - \arg FMC_FLAG_BANK1_END: FMC bank1 end of operation flag bit - \param[out] none - \retval none -*/ -void fmc_flag_clear(uint32_t flag) -{ - FMC_REG_VAL(flag) |= BIT(FMC_BIT_POS(flag)); -} - -/*! - \brief get FMC interrupt flag state - \param[in] flag: FMC interrupt flags, refer to fmc_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg FMC_INT_FLAG_BANK0_PGERR: FMC bank0 operation error interrupt flag bit - \arg FMC_INT_FLAG_BANK0_WPERR: FMC bank0 erase/program protection error interrupt flag bit - \arg FMC_INT_FLAG_BANK0_END: FMC bank0 end of operation interrupt flag bit - \arg FMC_INT_FLAG_BANK1_PGERR: FMC bank1 operation error interrupt flag bit - \arg FMC_INT_FLAG_BANK1_WPERR: FMC bank1 erase/program protection error interrupt flag bit - \arg FMC_INT_FLAG_BANK1_END: FMC bank1 end of operation interrupt flag bit - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus fmc_interrupt_flag_get(fmc_interrupt_flag_enum flag) -{ - FlagStatus ret1 = RESET; - FlagStatus ret2 = RESET; - - if(FMC_STAT0_REG_OFFSET == FMC_REG_OFFSET_GET(flag)){ - /* get the staus of interrupt flag */ - ret1 = (FlagStatus)(FMC_REG_VALS(flag) & BIT(FMC_BIT_POS0(flag))); - /* get the staus of interrupt enale bit */ - ret2 = (FlagStatus)(FMC_CTL0 & BIT(FMC_BIT_POS1(flag))); - }else{ - /* get the staus of interrupt flag */ - ret1 = (FlagStatus)(FMC_REG_VALS(flag) & BIT(FMC_BIT_POS0(flag))); - /* get the staus of interrupt enale bit */ - ret2 = (FlagStatus)(FMC_CTL1 & BIT(FMC_BIT_POS1(flag))); - } - - if(ret1 && ret2){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear FMC interrupt flag state - \param[in] flag: FMC interrupt flags, refer to can_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg FMC_INT_FLAG_BANK0_PGERR: FMC bank0 operation error interrupt flag bit - \arg FMC_INT_FLAG_BANK0_WPERR: FMC bank0 erase/program protection error interrupt flag bit - \arg FMC_INT_FLAG_BANK0_END: FMC bank0 end of operation interrupt flag bit - \arg FMC_INT_FLAG_BANK1_PGERR: FMC bank1 operation error interrupt flag bit - \arg FMC_INT_FLAG_BANK1_WPERR: FMC bank1 erase/program protection error interrupt flag bit - \arg FMC_INT_FLAG_BANK1_END: FMC bank1 end of operation interrupt flag bit - \param[out] none - \retval none -*/ -void fmc_interrupt_flag_clear(fmc_interrupt_flag_enum flag) -{ - FMC_REG_VALS(flag) |= BIT(FMC_BIT_POS0(flag)); -} - -/*! - \brief get the FMC bank0 state - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank0_state_get(void) -{ - fmc_state_enum fmc_state = FMC_READY; - - if((uint32_t)0x00U != (FMC_STAT0 & FMC_STAT0_BUSY)){ - fmc_state = FMC_BUSY; - }else{ - if((uint32_t)0x00U != (FMC_STAT0 & FMC_STAT0_WPERR)){ - fmc_state = FMC_WPERR; - }else{ - if((uint32_t)0x00U != (FMC_STAT0 & (FMC_STAT0_PGERR))){ - fmc_state = FMC_PGERR; - } - } - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief get the FMC bank1 state - \param[in] none - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank1_state_get(void) -{ - fmc_state_enum fmc_state = FMC_READY; - - if((uint32_t)0x00U != (FMC_STAT1 & FMC_STAT1_BUSY)){ - fmc_state = FMC_BUSY; - }else{ - if((uint32_t)0x00U != (FMC_STAT1 & FMC_STAT1_WPERR)){ - fmc_state = FMC_WPERR; - }else{ - if((uint32_t)0x00U != (FMC_STAT1 & FMC_STAT1_PGERR)){ - fmc_state = FMC_PGERR; - } - } - } - - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief check whether FMC bank0 is ready or not - \param[in] timeout: count of loop - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank0_ready_wait(uint32_t timeout) -{ - fmc_state_enum fmc_state = FMC_BUSY; - - /* wait for FMC ready */ - do{ - /* get FMC state */ - fmc_state = fmc_bank0_state_get(); - timeout--; - }while((FMC_BUSY == fmc_state) && (0x00U != timeout)); - - if(FMC_BUSY == fmc_state){ - fmc_state = FMC_TOERR; - } - /* return the FMC state */ - return fmc_state; -} - -/*! - \brief check whether FMC bank1 is ready or not - \param[in] timeout: count of loop - \param[out] none - \retval state of FMC, refer to fmc_state_enum -*/ -fmc_state_enum fmc_bank1_ready_wait(uint32_t timeout) -{ - fmc_state_enum fmc_state = FMC_BUSY; - - /* wait for FMC ready */ - do{ - /* get FMC state */ - fmc_state = fmc_bank1_state_get(); - timeout--; - }while((FMC_BUSY == fmc_state) && (0x00U != timeout)); - - if(FMC_BUSY == fmc_state){ - fmc_state = FMC_TOERR; - } - /* return the FMC state */ - return fmc_state; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_fwdgt.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_fwdgt.c deleted file mode 100644 index c5e1aee..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_fwdgt.c +++ /dev/null @@ -1,158 +0,0 @@ -/*! - \file gd32f30x_fwdgt.c - \brief FWDGT driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_fwdgt.h" - -/* write value to FWDGT_CTL_CMD bit field */ -#define CTL_CMD(regval) (BITS(0,15) & ((uint32_t)(regval) << 0)) -/* write value to FWDGT_RLD_RLD bit field */ -#define RLD_RLD(regval) (BITS(0,11) & ((uint32_t)(regval) << 0)) - -/*! - \brief enable write access to FWDGT_PSC and FWDGT_RLD - \param[in] none - \param[out] none - \retval none -*/ -void fwdgt_write_enable(void) -{ - FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; -} - -/*! - \brief disable write access to FWDGT_PSC and FWDGT_RLD - \param[in] none - \param[out] none - \retval none -*/ -void fwdgt_write_disable(void) -{ - FWDGT_CTL = FWDGT_WRITEACCESS_DISABLE; -} - -/*! - \brief start the free watchdog timer counter - \param[in] none - \param[out] none - \retval none -*/ -void fwdgt_enable(void) -{ - FWDGT_CTL = FWDGT_KEY_ENABLE; -} - -/*! - \brief reload the counter of FWDGT - \param[in] none - \param[out] none - \retval none -*/ -void fwdgt_counter_reload(void) -{ - FWDGT_CTL = FWDGT_KEY_RELOAD; -} - -/*! - \brief configure counter reload value, and prescaler divider value - \param[in] reload_value: specify reload value(0x0000 - 0x0FFF) - \param[in] prescaler_div: FWDGT prescaler value - only one parameter can be selected which is shown as below: - \arg FWDGT_PSC_DIV4: FWDGT prescaler set to 4 - \arg FWDGT_PSC_DIV8: FWDGT prescaler set to 8 - \arg FWDGT_PSC_DIV16: FWDGT prescaler set to 16 - \arg FWDGT_PSC_DIV32: FWDGT prescaler set to 32 - \arg FWDGT_PSC_DIV64: FWDGT prescaler set to 64 - \arg FWDGT_PSC_DIV128: FWDGT prescaler set to 128 - \arg FWDGT_PSC_DIV256: FWDGT prescaler set to 256 - \param[out] none - \retval ErrStatus: ERROR or SUCCESS -*/ -ErrStatus fwdgt_config(uint16_t reload_value, uint8_t prescaler_div) -{ - uint32_t timeout = FWDGT_PSC_TIMEOUT; - uint32_t flag_status = RESET; - - /* enable write access to FWDGT_PSC,and FWDGT_RLD */ - FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; - - /* wait until the PUD flag to be reset */ - do{ - flag_status = FWDGT_STAT & FWDGT_STAT_PUD; - }while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); - - if ((uint32_t)RESET != flag_status){ - return ERROR; - } - - /* configure FWDGT */ - FWDGT_PSC = (uint32_t)prescaler_div; - - timeout = FWDGT_RLD_TIMEOUT; - /* wait until the RUD flag to be reset */ - do{ - flag_status = FWDGT_STAT & FWDGT_STAT_RUD; - }while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); - - if ((uint32_t)RESET != flag_status){ - return ERROR; - } - - FWDGT_RLD = RLD_RLD(reload_value); - - /* reload the counter */ - FWDGT_CTL = FWDGT_KEY_RELOAD; - - return SUCCESS; -} - -/*! - \brief get flag state of FWDGT - \param[in] flag: flag to get - only one parameter can be selected which is shown as below: - \arg FWDGT_FLAG_PUD: a write operation to FWDGT_PSC register is on going - \arg FWDGT_FLAG_RUD: a write operation to FWDGT_RLD register is on going - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus fwdgt_flag_get(uint16_t flag) -{ - if(RESET != (FWDGT_STAT & flag)){ - return SET; - } - - return RESET; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_gpio.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_gpio.c deleted file mode 100644 index 98df185..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_gpio.c +++ /dev/null @@ -1,583 +0,0 @@ -/*! - \file gd32f30x_gpio.c - \brief GPIO driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_gpio.h" - -#define AFIO_EXTI_SOURCE_MASK ((uint8_t)0x03U) /*!< AFIO exti source selection mask*/ -#define AFIO_EXTI_SOURCE_FIELDS ((uint8_t)0x04U) /*!< select AFIO exti source registers */ -#define LSB_16BIT_MASK ((uint16_t)0xFFFFU) /*!< LSB 16-bit mask */ -#define PCF_POSITION_MASK ((uint32_t)0x000F0000U) /*!< AFIO_PCF register position mask */ -#define PCF_SWJCFG_MASK ((uint32_t)0xF8FFFFFFU) /*!< AFIO_PCF register SWJCFG mask */ -#define PCF_LOCATION1_MASK ((uint32_t)0x00200000U) /*!< AFIO_PCF register location1 mask */ -#define PCF_LOCATION2_MASK ((uint32_t)0x00100000U) /*!< AFIO_PCF register location2 mask */ -#define AFIO_PCF1_FIELDS ((uint32_t)0x80000000U) /*!< select AFIO_PCF1 register */ -#define GPIO_OUTPUT_PORT_OFFSET ((uint32_t)4U) /*!< GPIO event output port offset*/ - -/*! - \brief reset GPIO port - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[out] none - \retval none -*/ -void gpio_deinit(uint32_t gpio_periph) -{ - switch(gpio_periph){ - case GPIOA: - /* reset GPIOA */ - rcu_periph_reset_enable(RCU_GPIOARST); - rcu_periph_reset_disable(RCU_GPIOARST); - break; - case GPIOB: - /* reset GPIOB */ - rcu_periph_reset_enable(RCU_GPIOBRST); - rcu_periph_reset_disable(RCU_GPIOBRST); - break; - case GPIOC: - /* reset GPIOC */ - rcu_periph_reset_enable(RCU_GPIOCRST); - rcu_periph_reset_disable(RCU_GPIOCRST); - break; - case GPIOD: - /* reset GPIOD */ - rcu_periph_reset_enable(RCU_GPIODRST); - rcu_periph_reset_disable(RCU_GPIODRST); - break; - case GPIOE: - /* reset GPIOE */ - rcu_periph_reset_enable(RCU_GPIOERST); - rcu_periph_reset_disable(RCU_GPIOERST); - break; - case GPIOF: - /* reset GPIOF */ - rcu_periph_reset_enable(RCU_GPIOFRST); - rcu_periph_reset_disable(RCU_GPIOFRST); - break; - case GPIOG: - /* reset GPIOG */ - rcu_periph_reset_enable(RCU_GPIOGRST); - rcu_periph_reset_disable(RCU_GPIOGRST); - break; - default: - break; - } -} - -/*! - \brief reset alternate function I/O(AFIO) - \param[in] none - \param[out] none - \retval none -*/ -void gpio_afio_deinit(void) -{ - rcu_periph_reset_enable(RCU_AFRST); - rcu_periph_reset_disable(RCU_AFRST); -} - -/*! - \brief GPIO parameter initialization - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] mode: gpio pin mode - only one parameter can be selected which is shown as below: - \arg GPIO_MODE_AIN: analog input mode - \arg GPIO_MODE_IN_FLOATING: floating input mode - \arg GPIO_MODE_IPD: pull-down input mode - \arg GPIO_MODE_IPU: pull-up input mode - \arg GPIO_MODE_OUT_OD: GPIO output with open-drain - \arg GPIO_MODE_OUT_PP: GPIO output with push-pull - \arg GPIO_MODE_AF_OD: AFIO output with open-drain - \arg GPIO_MODE_AF_PP: AFIO output with push-pull - \param[in] speed: gpio output max speed value - only one parameter can be selected which is shown as below: - \arg GPIO_OSPEED_10MHZ: output max speed 10MHz - \arg GPIO_OSPEED_2MHZ: output max speed 2MHz - \arg GPIO_OSPEED_50MHZ: output max speed 50MHz - \arg GPIO_OSPEED_MAX: output max speed more than 50MHz - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval none -*/ -void gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin) -{ - uint16_t i; - uint32_t temp_mode = 0U; - uint32_t reg = 0U; - - /* GPIO mode configuration */ - temp_mode = (uint32_t)(mode & ((uint32_t)0x0FU)); - - /* GPIO speed configuration */ - if(((uint32_t)0x00U) != ((uint32_t)mode & ((uint32_t)0x10U))){ - /* output mode max speed */ - if(GPIO_OSPEED_MAX == (uint32_t)speed){ - temp_mode |= (uint32_t)0x03U; - /* set the corresponding SPD bit */ - GPIOx_SPD(gpio_periph) |= (uint32_t)pin ; - }else{ - /* output mode max speed:10MHz,2MHz,50MHz */ - temp_mode |= (uint32_t)speed; - } - } - - /* configure the eight low port pins with GPIO_CTL0 */ - for(i = 0U;i < 8U;i++){ - if((1U << i) & pin){ - reg = GPIO_CTL0(gpio_periph); - - /* clear the specified pin mode bits */ - reg &= ~GPIO_MODE_MASK(i); - /* set the specified pin mode bits */ - reg |= GPIO_MODE_SET(i, temp_mode); - - /* set IPD or IPU */ - if(GPIO_MODE_IPD == mode){ - /* reset the corresponding OCTL bit */ - GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin); - }else{ - /* set the corresponding OCTL bit */ - if(GPIO_MODE_IPU == mode){ - GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin); - } - } - /* set GPIO_CTL0 register */ - GPIO_CTL0(gpio_periph) = reg; - } - } - /* configure the eight high port pins with GPIO_CTL1 */ - for(i = 8U;i < 16U;i++){ - if((1U << i) & pin){ - reg = GPIO_CTL1(gpio_periph); - - /* clear the specified pin mode bits */ - reg &= ~GPIO_MODE_MASK(i - 8U); - /* set the specified pin mode bits */ - reg |= GPIO_MODE_SET(i - 8U, temp_mode); - - /* set IPD or IPU */ - if(GPIO_MODE_IPD == mode){ - /* reset the corresponding OCTL bit */ - GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin); - }else{ - /* set the corresponding OCTL bit */ - if(GPIO_MODE_IPU == mode){ - GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin); - } - } - /* set GPIO_CTL1 register */ - GPIO_CTL1(gpio_periph) = reg; - } - } -} - -/*! - \brief set GPIO pin - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval none -*/ -void gpio_bit_set(uint32_t gpio_periph,uint32_t pin) -{ - GPIO_BOP(gpio_periph) = (uint32_t)pin; -} - -/*! - \brief reset GPIO pin - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval none -*/ -void gpio_bit_reset(uint32_t gpio_periph,uint32_t pin) -{ - GPIO_BC(gpio_periph) = (uint32_t)pin; -} - -/*! - \brief write data to the specified GPIO pin - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[in] bit_value: SET or RESET - \arg RESET: clear the port pin - \arg SET: set the port pin - \param[out] none - \retval none -*/ -void gpio_bit_write(uint32_t gpio_periph,uint32_t pin,bit_status bit_value) -{ - if(RESET != bit_value){ - GPIO_BOP(gpio_periph) = (uint32_t)pin; - }else{ - GPIO_BC(gpio_periph) = (uint32_t)pin; - } -} - -/*! - \brief write data to the specified GPIO port - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] data: specify the value to be written to the port output data register - \param[out] none - \retval none -*/ -void gpio_port_write(uint32_t gpio_periph,uint16_t data) -{ - GPIO_OCTL(gpio_periph) = (uint32_t)data; -} - -/*! - \brief get GPIO pin input status - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - only one parameter can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval input status of gpio pin: SET or RESET -*/ -FlagStatus gpio_input_bit_get(uint32_t gpio_periph,uint32_t pin) -{ - if((uint32_t)RESET != (GPIO_ISTAT(gpio_periph)&(pin))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief get GPIO port input status - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[out] none - \retval input status of gpio all pins -*/ -uint16_t gpio_input_port_get(uint32_t gpio_periph) -{ - return (uint16_t)(GPIO_ISTAT(gpio_periph)); -} - -/*! - \brief get GPIO pin output status - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - only one parameter can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval output status of gpio pin: SET or RESET -*/ -FlagStatus gpio_output_bit_get(uint32_t gpio_periph,uint32_t pin) -{ - if((uint32_t)RESET !=(GPIO_OCTL(gpio_periph)&(pin))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief get GPIO port output status - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[out] none - \retval output status of gpio all pins -*/ -uint16_t gpio_output_port_get(uint32_t gpio_periph) -{ - return ((uint16_t)GPIO_OCTL(gpio_periph)); -} - -/*! - \brief configure GPIO pin remap - \param[in] gpio_remap: select the pin to remap - only one parameter can be selected which are shown as below: - \arg GPIO_SPI0_REMAP: SPI0 remapping - \arg GPIO_I2C0_REMAP: I2C0 remapping - \arg GPIO_USART0_REMAP: USART0 remapping - \arg GPIO_USART1_REMAP: USART1 remapping - \arg GPIO_USART2_PARTIAL_REMAP: USART2 partial remapping - \arg GPIO_USART2_FULL_REMAP: USART2 full remapping - \arg GPIO_TIMER0_PARTIAL_REMAP: TIMER0 partial remapping - \arg GPIO_TIMER0_FULL_REMAP: TIMER0 full remapping - \arg GPIO_TIMER1_PARTIAL_REMAP0: TIMER1 partial remapping - \arg GPIO_TIMER1_PARTIAL_REMAP1: TIMER1 partial remapping - \arg GPIO_TIMER1_FULL_REMAP: TIMER1 full remapping - \arg GPIO_TIMER2_PARTIAL_REMAP: TIMER2 partial remapping - \arg GPIO_TIMER2_FULL_REMAP: TIMER2 full remapping - \arg GPIO_TIMER3_REMAP: TIMER3 remapping - \arg GPIO_CAN_PARTIAL_REMAP: CAN partial remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) - \arg GPIO_CAN_FULL_REMAP: CAN full remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) - \arg GPIO_CAN0_PARTIAL_REMAP: CAN0 partial remapping(only for GD32F30X_CL devices) - \arg GPIO_CAN0_FULL_REMAP: CAN0 full remapping(only for GD32F30X_CL devices) - \arg GPIO_PD01_REMAP: PD01 remapping - \arg GPIO_TIMER4CH3_IREMAP: TIMER4 channel3 internal remapping - \arg GPIO_ADC0_ETRGINS_REMAP: ADC0 external trigger inserted conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) - \arg GPIO_ADC0_ETRGREG_REMAP: ADC0 external trigger regular conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) - \arg GPIO_ADC1_ETRGINS_REMAP: ADC1 external trigger inserted conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) - \arg GPIO_ADC1_ETRGREG_REMAP: ADC1 external trigger regular conversion remapping(only for GD32F30X_HD devices and GD32F30X_XD devices) - \arg GPIO_ENET_REMAP: ENET remapping(only for GD32F30X_CL devices) - \arg GPIO_CAN1_REMAP: CAN1 remapping(only for GD32F30X_CL devices) - \arg GPIO_SWJ_NONJTRST_REMAP: full SWJ(JTAG-DP + SW-DP),but without NJTRST - \arg GPIO_SWJ_SWDPENABLE_REMAP: JTAG-DP disabled and SW-DP enabled - \arg GPIO_SWJ_DISABLE_REMAP: JTAG-DP disabled and SW-DP disabled - \arg GPIO_SPI2_REMAP: SPI2 remapping - \arg GPIO_TIMER1ITR0_REMAP: TIMER1 internal trigger 0 remapping(only for GD32F30X_CL devices) - \arg GPIO_PTP_PPS_REMAP: ethernet PTP PPS remapping(only for GD32F30X_CL devices) - \arg GPIO_TIMER8_REMAP: TIMER8 remapping - \arg GPIO_TIMER9_REMAP: TIMER9 remapping - \arg GPIO_TIMER10_REMAP: TIMER10 remapping - \arg GPIO_TIMER12_REMAP: TIMER12 remapping - \arg GPIO_TIMER13_REMAP: TIMER13 remapping - \arg GPIO_EXMC_NADV_REMAP: EXMC_NADV connect/disconnect - \arg GPIO_CTC_REMAP0: CTC remapping(PD15) - \arg GPIO_CTC_REMAP1: CTC remapping(PF0) - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue) -{ - uint32_t remap1 = 0U, remap2 = 0U, temp_reg = 0U, temp_mask = 0U; - - if(((uint32_t)0x80000000U) == (remap & 0x80000000U)){ - /* get AFIO_PCF1 regiter value */ - temp_reg = AFIO_PCF1; - }else{ - /* get AFIO_PCF0 regiter value */ - temp_reg = AFIO_PCF0; - } - - temp_mask = (remap & PCF_POSITION_MASK) >> 0x10U; - remap1 = remap & LSB_16BIT_MASK; - - /* judge pin remap type */ - if((PCF_LOCATION1_MASK | PCF_LOCATION2_MASK) == (remap & (PCF_LOCATION1_MASK | PCF_LOCATION2_MASK))){ - temp_reg &= PCF_SWJCFG_MASK; - AFIO_PCF0 &= PCF_SWJCFG_MASK; - }else if(PCF_LOCATION2_MASK == (remap & PCF_LOCATION2_MASK)){ - remap2 = ((uint32_t)0x03U) << temp_mask; - temp_reg &= ~remap2; - temp_reg |= ~PCF_SWJCFG_MASK; - }else{ - temp_reg &= ~(remap1 << ((remap >> 0x15U)*0x10U)); - temp_reg |= ~PCF_SWJCFG_MASK; - } - - /* set pin remap value */ - if(DISABLE != newvalue){ - temp_reg |= (remap1 << ((remap >> 0x15U)*0x10U)); - } - - if(AFIO_PCF1_FIELDS == (remap & AFIO_PCF1_FIELDS)){ - /* set AFIO_PCF1 regiter value */ - AFIO_PCF1 = temp_reg; - }else{ - /* set AFIO_PCF0 regiter value */ - AFIO_PCF0 = temp_reg; - } -} - -#ifdef GD32F30X_CL -/*! - \brief select ethernet MII or RMII PHY - \param[in] enet_sel: ethernet MII or RMII PHY selection - \arg GPIO_ENET_PHY_MII: configure ethernet MAC for connection with an MII PHY - \arg GPIO_ENET_PHY_RMII: configure ethernet MAC for connection with an RMII PHY - \param[out] none - \retval none -*/ -void gpio_ethernet_phy_select(uint32_t enet_sel) -{ - /* clear AFIO_PCF0_ENET_PHY_SEL bit */ - AFIO_PCF0 &= (uint32_t)(~AFIO_PCF0_ENET_PHY_SEL); - - /* select MII or RMII PHY */ - AFIO_PCF0 |= (uint32_t)enet_sel; -} -#endif /* GD32F30X_CL */ - -/*! - \brief select GPIO pin exti sources - \param[in] output_port: gpio event output port - only one parameter can be selected which are shown as below: - \arg GPIO_PORT_SOURCE_GPIOA: output port source A - \arg GPIO_PORT_SOURCE_GPIOB: output port source B - \arg GPIO_PORT_SOURCE_GPIOC: output port source C - \arg GPIO_PORT_SOURCE_GPIOD: output port source D - \arg GPIO_PORT_SOURCE_GPIOE: output port source E - \arg GPIO_PORT_SOURCE_GPIOF: output port source F - \arg GPIO_PORT_SOURCE_GPIOG: output port source G - \param[in] output_pin: GPIO output pin source - only one parameter can be selected which are shown as below: - \arg GPIO_PIN_SOURCE_x(x=0..15) - \param[out] none - \retval none -*/ -void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin) -{ - uint32_t source = 0U; - source = ((uint32_t)0x0FU) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK)); - - /* select EXTI sources */ - if(GPIO_PIN_SOURCE_4 > output_pin){ - /* select EXTI0/EXTI1/EXTI2/EXTI3 */ - AFIO_EXTISS0 &= ~source; - AFIO_EXTISS0 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); - }else if(GPIO_PIN_SOURCE_8 > output_pin){ - /* select EXTI4/EXTI5/EXTI6/EXTI7 */ - AFIO_EXTISS1 &= ~source; - AFIO_EXTISS1 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); - }else if(GPIO_PIN_SOURCE_12 > output_pin){ - /* select EXTI8/EXTI9/EXTI10/EXTI11 */ - AFIO_EXTISS2 &= ~source; - AFIO_EXTISS2 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); - }else{ - /* select EXTI12/EXTI13/EXTI14/EXTI15 */ - AFIO_EXTISS3 &= ~source; - AFIO_EXTISS3 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); - } -} - -/*! - \brief configure GPIO pin event output - \param[in] output_port: gpio event output port - only one parameter can be selected which are shown as below: - \arg GPIO_EVENT_PORT_GPIOA: event output port A - \arg GPIO_EVENT_PORT_GPIOB: event output port B - \arg GPIO_EVENT_PORT_GPIOC: event output port C - \arg GPIO_EVENT_PORT_GPIOD: event output port D - \arg GPIO_EVENT_PORT_GPIOE: event output port E - \param[in] output_pin: GPIO event output pin - only one parameter can be selected which are shown as below: - \arg GPIO_EVENT_PIN_x(x=0..15) - \param[out] none - \retval none -*/ -void gpio_event_output_config(uint8_t output_port, uint8_t output_pin) -{ - uint32_t reg = 0U; - reg = AFIO_EC; - - /* clear AFIO_EC_PORT and AFIO_EC_PIN bits */ - reg &= (uint32_t)(~(AFIO_EC_PORT|AFIO_EC_PIN)); - - reg |= (uint32_t)((uint32_t)output_port << GPIO_OUTPUT_PORT_OFFSET); - reg |= (uint32_t)output_pin; - - AFIO_EC = reg; -} - -/*! - \brief enable GPIO pin event output - \param[in] none - \param[out] none - \retval none -*/ -void gpio_event_output_enable(void) -{ - AFIO_EC |= AFIO_EC_EOE; -} - -/*! - \brief disable GPIO pin event output - \param[in] none - \param[out] none - \retval none -*/ -void gpio_event_output_disable(void) -{ - AFIO_EC &= (uint32_t)(~AFIO_EC_EOE); -} - -/*! - \brief lock GPIO pin - \param[in] gpio_periph: GPIOx(x = A,B,C,D,E,F,G) - \param[in] pin: GPIO pin - one or more parameters can be selected which are shown as below: - \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL - \param[out] none - \retval none -*/ -void gpio_pin_lock(uint32_t gpio_periph,uint32_t pin) -{ - uint32_t lock = 0x00010000U; - lock |= pin; - - /* lock key writing sequence: write 1 -> write 0 -> write 1 -> read 0 -> read 1 */ - GPIO_LOCK(gpio_periph) = (uint32_t)lock; - GPIO_LOCK(gpio_periph) = (uint32_t)pin; - GPIO_LOCK(gpio_periph) = (uint32_t)lock; - lock = GPIO_LOCK(gpio_periph); - lock = GPIO_LOCK(gpio_periph); -} - -/*! - \brief configure the I/O compensation cell - \param[in] compensation: specifies the I/O compensation cell mode - only one parameter can be selected which are shown as below: - \arg GPIO_COMPENSATION_ENABLE: I/O compensation cell is enabled - \arg GPIO_COMPENSATION_DISABLE: I/O compensation cell is disabled - \param[out] none - \retval none -*/ -void gpio_compensation_config(uint32_t compensation) -{ - uint32_t reg; - reg = AFIO_CPSCTL; - - /* reset the AFIO_CPSCTL_CPS_EN bit and set according to gpio_compensation */ - reg &= ~AFIO_CPSCTL_CPS_EN; - AFIO_CPSCTL = (reg | compensation); -} - -/*! - \brief check the I/O compensation cell is ready or not - \param[in] none - \param[out] none - \retval FlagStatus: SET or RESET - */ -FlagStatus gpio_compensation_flag_get(void) -{ - if(((uint32_t)RESET) != (AFIO_CPSCTL & AFIO_CPSCTL_CPS_RDY)){ - return SET; - }else{ - return RESET; - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_i2c.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_i2c.c deleted file mode 100644 index b2f7103..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_i2c.c +++ /dev/null @@ -1,737 +0,0 @@ -/*! - \file gd32f30x_i2c.c - \brief I2C driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2019-04-16, V2.0.1, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_i2c.h" - -#define I2C_ERROR_HANDLE(s) do{}while(1) - -#define I2CCLK_MAX ((uint32_t)0x0000003CU) /*!< i2cclk maximum value */ -#define I2CCLK_MIN ((uint32_t)0x00000002U) /*!< i2cclk minimum value */ -#define I2C_FLAG_MASK ((uint32_t)0x0000FFFFU) /*!< i2c flag mask */ -#define I2C_ADDRESS_MASK ((uint32_t)0x000003FFU) /*!< i2c address mask */ -#define I2C_ADDRESS2_MASK ((uint32_t)0x000000FEU) /*!< the second i2c address mask */ - -/* I2C register bit offset */ -#define STAT1_PECV_OFFSET ((uint32_t)8U) /* bit offset of PECV in I2C_STAT1 */ - -/*! - \brief reset I2C - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_deinit(uint32_t i2c_periph) -{ - switch(i2c_periph){ - case I2C0: - /* reset I2C0 */ - rcu_periph_reset_enable(RCU_I2C0RST); - rcu_periph_reset_disable(RCU_I2C0RST); - break; - case I2C1: - /* reset I2C1 */ - rcu_periph_reset_enable(RCU_I2C1RST); - rcu_periph_reset_disable(RCU_I2C1RST); - break; - default: - break; - } -} - -/*! - \brief configure I2C clock - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] clkspeed: I2C clock speed, supports standard mode (up to 100 kHz), fast mode (up to 400 kHz) - and fast mode plus (up to 1MHz) - \param[in] dutycyc: duty cycle in fast mode or fast mode plus - only one parameter can be selected which is shown as below: - \arg I2C_DTCY_2: T_low/T_high=2 - \arg I2C_DTCY_16_9: T_low/T_high=16/9 - \param[out] none - \retval none -*/ -void i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc) -{ - uint32_t pclk1, clkc, freq, risetime; - uint32_t temp; - - /* check the clkspeed value */ - if(0U == clkspeed){ - I2C_ERROR_HANDLE("the parameter can not be 0 \r\n"); - } - - pclk1 = rcu_clock_freq_get(CK_APB1); - /* I2C peripheral clock frequency */ - freq = (uint32_t)(pclk1/1000000U); - if(freq >= I2CCLK_MAX){ - freq = I2CCLK_MAX; - } - temp = I2C_CTL1(i2c_periph); - temp &= ~I2C_CTL1_I2CCLK; - temp |= freq; - - I2C_CTL1(i2c_periph) = temp; - - if(100000U >= clkspeed){ - /* the maximum SCL rise time is 1000ns in standard mode */ - risetime = (uint32_t)((pclk1/1000000U)+1U); - if(risetime >= I2CCLK_MAX){ - I2C_RT(i2c_periph) = I2CCLK_MAX; - }else if(risetime <= I2CCLK_MIN){ - I2C_RT(i2c_periph) = I2CCLK_MIN; - }else{ - I2C_RT(i2c_periph) = risetime; - } - clkc = (uint32_t)(pclk1/(clkspeed*2U)); - if(clkc < 0x04U){ - /* the CLKC in standard mode minmum value is 4 */ - clkc = 0x04U; - } - I2C_CKCFG(i2c_periph) |= (I2C_CKCFG_CLKC & clkc); - - }else if(400000U >= clkspeed){ - /* the maximum SCL rise time is 300ns in fast mode */ - I2C_RT(i2c_periph) = (uint32_t)(((freq*(uint32_t)300U)/(uint32_t)1000U)+(uint32_t)1U); - if(I2C_DTCY_2 == dutycyc){ - /* I2C duty cycle is 2 */ - clkc = (uint32_t)(pclk1/(clkspeed*3U)); - I2C_CKCFG(i2c_periph) &= ~I2C_CKCFG_DTCY; - }else{ - /* I2C duty cycle is 16/9 */ - clkc = (uint32_t)(pclk1/(clkspeed*25U)); - I2C_CKCFG(i2c_periph) |= I2C_CKCFG_DTCY; - } - if(0U == (clkc & I2C_CKCFG_CLKC)){ - /* the CLKC in fast mode minmum value is 1 */ - clkc |= 0x0001U; - } - I2C_CKCFG(i2c_periph) |= I2C_CKCFG_FAST; - I2C_CKCFG(i2c_periph) |= clkc; - }else{ - /* fast mode plus, the maximum SCL rise time is 120ns */ - I2C_RT(i2c_periph) = (uint32_t)(((freq*(uint32_t)120U)/(uint32_t)1000U)+(uint32_t)1U); - if(I2C_DTCY_2 == dutycyc){ - /* I2C duty cycle is 2 */ - clkc = (uint32_t)(pclk1/(clkspeed*3U)); - I2C_CKCFG(i2c_periph) &= ~I2C_CKCFG_DTCY; - }else{ - /* I2C duty cycle is 16/9 */ - clkc = (uint32_t)(pclk1/(clkspeed*25U)); - I2C_CKCFG(i2c_periph) |= I2C_CKCFG_DTCY; - } - /* enable fast mode */ - I2C_CKCFG(i2c_periph) |= I2C_CKCFG_FAST; - I2C_CKCFG(i2c_periph) |= clkc; - /* enable I2C fast mode plus */ - I2C_FMPCFG(i2c_periph) = I2C_FMPCFG_FMPEN; - } -} - -/*! - \brief configure I2C address - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] mode: - only one parameter can be selected which is shown as below: - \arg I2C_I2CMODE_ENABLE: I2C mode - \arg I2C_SMBUSMODE_ENABLE: SMBus mode - \param[in] addformat: 7bits or 10bits - only one parameter can be selected which is shown as below: - \arg I2C_ADDFORMAT_7BITS: 7bits - \arg I2C_ADDFORMAT_10BITS: 10bits - \param[in] addr: I2C address - \param[out] none - \retval none -*/ -void i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr) -{ - /* SMBus/I2C mode selected */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_SMBEN); - ctl |= mode; - I2C_CTL0(i2c_periph) = ctl; - /* configure address */ - addr = addr & I2C_ADDRESS_MASK; - I2C_SADDR0(i2c_periph) = (addformat | addr); -} - -/*! - \brief SMBus type selection - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] type: - only one parameter can be selected which is shown as below: - \arg I2C_SMBUS_DEVICE: device - \arg I2C_SMBUS_HOST: host - \param[out] none - \retval none -*/ -void i2c_smbus_type_config(uint32_t i2c_periph, uint32_t type) -{ - if(I2C_SMBUS_HOST == type){ - I2C_CTL0(i2c_periph) |= I2C_CTL0_SMBSEL; - }else{ - I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_SMBSEL); - } -} - -/*! - \brief whether or not to send an ACK - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] ack: - only one parameter can be selected which is shown as below: - \arg I2C_ACK_ENABLE: ACK will be sent - \arg I2C_ACK_DISABLE: ACK will not be sent - \param[out] none - \retval none -*/ -void i2c_ack_config(uint32_t i2c_periph, uint32_t ack) -{ - if(I2C_ACK_ENABLE == ack){ - I2C_CTL0(i2c_periph) |= I2C_CTL0_ACKEN; - }else{ - I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_ACKEN); - } -} - -/*! - \brief configure I2C POAP position - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] pos: - only one parameter can be selected which is shown as below: - \arg I2C_ACKPOS_CURRENT: whether to send ACK or not for the current - \arg I2C_ACKPOS_NEXT: whether to send ACK or not for the next byte - \param[out] none - \retval none -*/ -void i2c_ackpos_config(uint32_t i2c_periph, uint32_t pos) -{ - /* configure I2C POAP position */ - if(I2C_ACKPOS_NEXT == pos){ - I2C_CTL0(i2c_periph) |= I2C_CTL0_POAP; - }else{ - I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_POAP); - } -} - -/*! - \brief master sends slave address - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] addr: slave address - \param[in] trandirection: transmitter or receiver - only one parameter can be selected which is shown as below: - \arg I2C_TRANSMITTER: transmitter - \arg I2C_RECEIVER: receiver - \param[out] none - \retval none -*/ -void i2c_master_addressing(uint32_t i2c_periph, uint32_t addr, uint32_t trandirection) -{ - /* master is a transmitter or a receiver */ - if(I2C_TRANSMITTER == trandirection){ - addr = addr & I2C_TRANSMITTER; - }else{ - addr = addr | I2C_RECEIVER; - } - /* send slave address */ - I2C_DATA(i2c_periph) = addr; -} - -/*! - \brief enable dual-address mode - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] dualaddr: the second address in dual-address mode - \param[out] none - \retval none -*/ -void i2c_dualaddr_enable(uint32_t i2c_periph, uint32_t dualaddr) -{ - /* configure address */ - dualaddr = dualaddr & I2C_ADDRESS2_MASK; - I2C_SADDR1(i2c_periph) = (I2C_SADDR1_DUADEN | dualaddr); -} - -/*! - \brief disable dual-address mode - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_dualaddr_disable(uint32_t i2c_periph) -{ - I2C_SADDR1(i2c_periph) &= ~(I2C_SADDR1_DUADEN); -} - -/*! - \brief enable I2C - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_enable(uint32_t i2c_periph) -{ - I2C_CTL0(i2c_periph) |= I2C_CTL0_I2CEN; -} - -/*! - \brief disable I2C - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_disable(uint32_t i2c_periph) -{ - I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_I2CEN); -} - -/*! - \brief generate a START condition on I2C bus - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_start_on_bus(uint32_t i2c_periph) -{ - I2C_CTL0(i2c_periph) |= I2C_CTL0_START; -} - -/*! - \brief generate a STOP condition on I2C bus - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval none -*/ -void i2c_stop_on_bus(uint32_t i2c_periph) -{ - I2C_CTL0(i2c_periph) |= I2C_CTL0_STOP; -} - -/*! - \brief I2C transmit data function - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] data: data of transmission - \param[out] none - \retval none -*/ -void i2c_data_transmit(uint32_t i2c_periph, uint8_t data) -{ - I2C_DATA(i2c_periph) = DATA_TRANS(data); -} - -/*! - \brief I2C receive data function - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval data of received -*/ -uint8_t i2c_data_receive(uint32_t i2c_periph) -{ - return (uint8_t)DATA_RECV(I2C_DATA(i2c_periph)); -} - -/*! - \brief enable I2C DMA mode - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] dmastate: - only one parameter can be selected which is shown as below: - \arg I2C_DMA_ON: DMA mode enable - \arg I2C_DMA_OFF: DMA mode disable - \param[out] none - \retval none -*/ -void i2c_dma_enable(uint32_t i2c_periph, uint32_t dmastate) -{ - /* configure I2C DMA function */ - uint32_t ctl = 0U; - - ctl = I2C_CTL1(i2c_periph); - ctl &= ~(I2C_CTL1_DMAON); - ctl |= dmastate; - I2C_CTL1(i2c_periph) = ctl; -} - -/*! - \brief configure whether next DMA EOT is DMA last transfer or not - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] dmalast: - only one parameter can be selected which is shown as below: - \arg I2C_DMALST_ON: next DMA EOT is the last transfer - \arg I2C_DMALST_OFF: next DMA EOT is not the last transfer - \param[out] none - \retval none -*/ -void i2c_dma_last_transfer_config(uint32_t i2c_periph, uint32_t dmalast) -{ - /* configure DMA last transfer */ - uint32_t ctl = 0U; - - ctl = I2C_CTL1(i2c_periph); - ctl &= ~(I2C_CTL1_DMALST); - ctl |= dmalast; - I2C_CTL1(i2c_periph) = ctl; -} - -/*! - \brief whether to stretch SCL low when data is not ready in slave mode - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] stretchpara: - only one parameter can be selected which is shown as below: - \arg I2C_SCLSTRETCH_ENABLE: SCL stretching is enabled - \arg I2C_SCLSTRETCH_DISABLE: SCL stretching is disabled - \param[out] none - \retval none -*/ -void i2c_stretch_scl_low_config(uint32_t i2c_periph, uint32_t stretchpara) -{ - /* configure I2C SCL strerching enable or disable */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_SS); - ctl |= stretchpara; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief whether or not to response to a general call - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] gcallpara: - only one parameter can be selected which is shown as below: - \arg I2C_GCEN_ENABLE: slave will response to a general call - \arg I2C_GCEN_DISABLE: slave will not response to a general call - \param[out] none - \retval none -*/ -void i2c_slave_response_to_gcall_config(uint32_t i2c_periph, uint32_t gcallpara) -{ - /* configure slave response to a general call enable or disable */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_GCEN); - ctl |= gcallpara; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief software reset I2C - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] sreset: - only one parameter can be selected which is shown as below: - \arg I2C_SRESET_SET: I2C is under reset - \arg I2C_SRESET_RESET: I2C is not under reset - \param[out] none - \retval none -*/ -void i2c_software_reset_config(uint32_t i2c_periph, uint32_t sreset) -{ - /* modify CTL0 and configure software reset I2C state */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_SRESET); - ctl |= sreset; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief I2C PEC calculation on or off - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] pecpara: - only one parameter can be selected which is shown as below: - \arg I2C_PEC_ENABLE: PEC calculation on - \arg I2C_PEC_DISABLE: PEC calculation off - \param[out] none - \retval none -*/ -void i2c_pec_enable(uint32_t i2c_periph, uint32_t pecstate) -{ - /* on/off PEC calculation */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_PECEN); - ctl |= pecstate; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief I2C whether to transfer PEC value - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] pecpara: - only one parameter can be selected which is shown as below: - \arg I2C_PECTRANS_ENABLE: transfer PEC - \arg I2C_PECTRANS_DISABLE: not transfer PEC - \param[out] none - \retval none -*/ -void i2c_pec_transfer_enable(uint32_t i2c_periph, uint32_t pecpara) -{ - /* whether to transfer PEC */ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_PECTRANS); - ctl |= pecpara; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief get packet error checking value - \param[in] i2c_periph: I2Cx(x=0,1) - \param[out] none - \retval PEC value -*/ -uint8_t i2c_pec_value_get(uint32_t i2c_periph) -{ - return (uint8_t)((I2C_STAT1(i2c_periph) & I2C_STAT1_PECV)>>STAT1_PECV_OFFSET); -} - -/*! - \brief I2C issue alert through SMBA pin - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] smbuspara: - only one parameter can be selected which is shown as below: - \arg I2C_SALTSEND_ENABLE: issue alert through SMBA pin - \arg I2C_SALTSEND_DISABLE: not issue alert through SMBA pin - \param[out] none - \retval none -*/ -void i2c_smbus_issue_alert(uint32_t i2c_periph, uint32_t smbuspara) -{ - /* issue alert through SMBA pin configure*/ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_SALT); - ctl |= smbuspara; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief enable or disable I2C ARP protocol in SMBus switch - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] smbuspara: - only one parameter can be selected which is shown as below: - \arg I2C_ARP_ENABLE: enable ARP - \arg I2C_ARP_DISABLE: disable ARP - \param[out] none - \retval none -*/ -void i2c_smbus_arp_enable(uint32_t i2c_periph, uint32_t arpstate) -{ - /* enable or disable I2C ARP protocol*/ - uint32_t ctl = 0U; - - ctl = I2C_CTL0(i2c_periph); - ctl &= ~(I2C_CTL0_ARPEN); - ctl |= arpstate; - I2C_CTL0(i2c_periph) = ctl; -} - -/*! - \brief check I2C flag is set or not - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] flag: I2C flags, refer to i2c_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_FLAG_SBSEND: start condition send out - \arg I2C_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode - \arg I2C_FLAG_BTC: byte transmission finishes - \arg I2C_FLAG_ADD10SEND: header of 10-bit address is sent in master mode - \arg I2C_FLAG_STPDET: stop condition detected in slave mode - \arg I2C_FLAG_RBNE: I2C_DATA is not Empty during receiving - \arg I2C_FLAG_TBE: I2C_DATA is empty during transmitting - \arg I2C_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus - \arg I2C_FLAG_LOSTARB: arbitration lost in master mode - \arg I2C_FLAG_AERR: acknowledge error - \arg I2C_FLAG_OUERR: overrun or underrun situation occurs in slave mode - \arg I2C_FLAG_PECERR: PEC error when receiving data - \arg I2C_FLAG_SMBTO: timeout signal in SMBus mode - \arg I2C_FLAG_SMBALT: SMBus alert status - \arg I2C_FLAG_MASTER: a flag indicating whether I2C block is in master or slave mode - \arg I2C_FLAG_I2CBSY: busy flag - \arg I2C_FLAG_TRS: whether the I2C is a transmitter or a receiver - \arg I2C_FLAG_RXGC: general call address (00h) received - \arg I2C_FLAG_DEFSMB: default address of SMBus device - \arg I2C_FLAG_HSTSMB: SMBus host header detected in slave mode - \arg I2C_FLAG_DUMOD: dual flag in slave mode indicating which address is matched in dual-address mode - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag) -{ - if(RESET != (I2C_REG_VAL(i2c_periph, flag) & BIT(I2C_BIT_POS(flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear I2C flag - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] flag: I2C flags, refer to i2c_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_FLAG_SMBALT: SMBus Alert status - \arg I2C_FLAG_SMBTO: timeout signal in SMBus mode - \arg I2C_FLAG_PECERR: PEC error when receiving data - \arg I2C_FLAG_OUERR: over-run or under-run situation occurs in slave mode - \arg I2C_FLAG_AERR: acknowledge error - \arg I2C_FLAG_LOSTARB: arbitration lost in master mode - \arg I2C_FLAG_BERR: a bus error - \arg I2C_FLAG_ADDSEND: cleared by reading I2C_STAT0 and reading I2C_STAT1 - \param[out] none - \retval none -*/ -void i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag) -{ - if(I2C_FLAG_ADDSEND == flag){ - /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */ - I2C_STAT0(i2c_periph); - I2C_STAT1(i2c_periph); - }else{ - I2C_REG_VAL(i2c_periph, flag) &= ~BIT(I2C_BIT_POS(flag)); - } -} - -/*! - \brief enable I2C interrupt - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] interrupt: I2C interrupts, refer to i2c_interrupt_enum - only one parameter can be selected which is shown as below: - \arg I2C_INT_ERR: error interrupt enable - \arg I2C_INT_EV: event interrupt enable - \arg I2C_INT_BUF: buffer interrupt enable - \param[out] none - \retval none -*/ -void i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) -{ - I2C_REG_VAL(i2c_periph, interrupt) |= BIT(I2C_BIT_POS(interrupt)); -} - -/*! - \brief disable I2C interrupt - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] interrupt: I2C interrupts, refer to i2c_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_INT_ERR: error interrupt enable - \arg I2C_INT_EV: event interrupt enable - \arg I2C_INT_BUF: buffer interrupt enable - \param[out] none - \retval none -*/ -void i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) -{ - I2C_REG_VAL(i2c_periph, interrupt) &= ~BIT(I2C_BIT_POS(interrupt)); -} - -/*! - \brief check I2C interrupt flag - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] int_flag: I2C interrupt flags, refer to i2c_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_INT_FLAG_SBSEND: start condition sent out in master mode interrupt flag - \arg I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag - \arg I2C_INT_FLAG_BTC: byte transmission finishes - \arg I2C_INT_FLAG_ADD10SEND: header of 10-bit address is sent in master mode interrupt flag - \arg I2C_INT_FLAG_STPDET: etop condition detected in slave mode interrupt flag - \arg I2C_INT_FLAG_RBNE: I2C_DATA is not Empty during receiving interrupt flag - \arg I2C_INT_FLAG_TBE: I2C_DATA is empty during transmitting interrupt flag - \arg I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag - \arg I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag - \arg I2C_INT_FLAG_AERR: acknowledge error interrupt flag - \arg I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag - \arg I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag - \arg I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag - \arg I2C_INT_FLAG_SMBALT: SMBus Alert status interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) -{ - uint32_t intenable = 0U, flagstatus = 0U, bufie; - - /* check BUFIE */ - bufie = I2C_CTL1(i2c_periph)&I2C_CTL1_BUFIE; - - /* get the interrupt enable bit status */ - intenable = (I2C_REG_VAL(i2c_periph, int_flag) & BIT(I2C_BIT_POS(int_flag))); - /* get the corresponding flag bit status */ - flagstatus = (I2C_REG_VAL2(i2c_periph, int_flag) & BIT(I2C_BIT_POS2(int_flag))); - - if((I2C_INT_FLAG_RBNE == int_flag) || (I2C_INT_FLAG_TBE == int_flag)){ - if(intenable && bufie){ - intenable = 1U; - }else{ - intenable = 0U; - } - } - if((0U != flagstatus) && (0U != intenable)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear I2C interrupt flag - \param[in] i2c_periph: I2Cx(x=0,1) - \param[in] intflag: I2C interrupt flags, refer to i2c_interrupt_flag_enum - only one parameter can be selected which is shown as below: - \arg I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag - \arg I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag - \arg I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag - \arg I2C_INT_FLAG_AERR: acknowledge error interrupt flag - \arg I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag - \arg I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag - \arg I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag - \arg I2C_INT_FLAG_SMBALT: SMBus Alert status interrupt flag - \param[out] none - \retval none -*/ -void i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) -{ - if(I2C_INT_FLAG_ADDSEND == int_flag){ - /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */ - I2C_STAT0(i2c_periph); - I2C_STAT1(i2c_periph); - }else{ - I2C_REG_VAL2(i2c_periph, int_flag) &= ~BIT(I2C_BIT_POS2(int_flag)); - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_misc.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_misc.c deleted file mode 100644 index 8dc0204..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_misc.c +++ /dev/null @@ -1,175 +0,0 @@ -/*! - \file gd32f30x_misc.c - \brief MISC driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_misc.h" - -/*! - \brief set the priority group - \param[in] nvic_prigroup: the NVIC priority group - \arg NVIC_PRIGROUP_PRE0_SUB4:0 bits for pre-emption priority 4 bits for subpriority - \arg NVIC_PRIGROUP_PRE1_SUB3:1 bits for pre-emption priority 3 bits for subpriority - \arg NVIC_PRIGROUP_PRE2_SUB2:2 bits for pre-emption priority 2 bits for subpriority - \arg NVIC_PRIGROUP_PRE3_SUB1:3 bits for pre-emption priority 1 bits for subpriority - \arg NVIC_PRIGROUP_PRE4_SUB0:4 bits for pre-emption priority 0 bits for subpriority - \param[out] none - \retval none -*/ -void nvic_priority_group_set(uint32_t nvic_prigroup) -{ - /* set the priority group value */ - SCB->AIRCR = NVIC_AIRCR_VECTKEY_MASK | nvic_prigroup; -} - -/*! - \brief enable NVIC request - \param[in] nvic_irq: the NVIC interrupt request, detailed in IRQn_Type - \param[in] nvic_irq_pre_priority: the pre-emption priority needed to set - \param[in] nvic_irq_sub_priority: the subpriority needed to set - \param[out] none - \retval none -*/ -void nvic_irq_enable(uint8_t nvic_irq, uint8_t nvic_irq_pre_priority, - uint8_t nvic_irq_sub_priority) -{ - uint32_t temp_priority = 0x00U, temp_pre = 0x00U, temp_sub = 0x00U; - /* use the priority group value to get the temp_pre and the temp_sub */ - if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE0_SUB4){ - temp_pre=0U; - temp_sub=0x4U; - }else if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE1_SUB3){ - temp_pre=1U; - temp_sub=0x3U; - }else if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE2_SUB2){ - temp_pre=2U; - temp_sub=0x2U; - }else if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE3_SUB1){ - temp_pre=3U; - temp_sub=0x1U; - }else if(((SCB->AIRCR) & (uint32_t)0x700U)==NVIC_PRIGROUP_PRE4_SUB0){ - temp_pre=4U; - temp_sub=0x0U; - }else{ - nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); - temp_pre=2U; - temp_sub=0x2U; - } - /* get the temp_priority to fill the NVIC->IP register */ - temp_priority = (uint32_t)nvic_irq_pre_priority << (0x4U - temp_pre); - temp_priority |= nvic_irq_sub_priority &(0x0FU >> (0x4U - temp_sub)); - temp_priority = temp_priority << 0x04U; - NVIC->IP[nvic_irq] = (uint8_t)temp_priority; - /* enable the selected IRQ */ - NVIC->ISER[nvic_irq >> 0x05U] = (uint32_t)0x01U << (nvic_irq & (uint8_t)0x1FU); -} - -/*! - \brief disable NVIC request - \param[in] nvic_irq: the NVIC interrupt request, detailed in IRQn_Type - \param[out] none - \retval none -*/ -void nvic_irq_disable(uint8_t nvic_irq) -{ - /* disable the selected IRQ.*/ - NVIC->ICER[nvic_irq >> 0x05] = (uint32_t)0x01 << (nvic_irq & (uint8_t)0x1F); -} - -/*! - \brief set the NVIC vector table base address - \param[in] nvic_vict_tab: the RAM or FLASH base address - \arg NVIC_VECTTAB_RAM: RAM base address - \are NVIC_VECTTAB_FLASH: Flash base address - \param[in] offset: Vector Table offset - \param[out] none - \retval none -*/ -void nvic_vector_table_set(uint32_t nvic_vict_tab, uint32_t offset) -{ - SCB->VTOR = nvic_vict_tab | (offset & NVIC_VECTTAB_OFFSET_MASK); -} - -/*! - \brief set the state of the low power mode - \param[in] lowpower_mode: the low power mode state - \arg SCB_LPM_SLEEP_EXIT_ISR: if chose this para, the system always enter low power - mode by exiting from ISR - \arg SCB_LPM_DEEPSLEEP: if chose this para, the system will enter the DEEPSLEEP mode - \arg SCB_LPM_WAKE_BY_ALL_INT: if chose this para, the lowpower mode can be woke up - by all the enable and disable interrupts - \param[out] none - \retval none -*/ -void system_lowpower_set(uint8_t lowpower_mode) -{ - SCB->SCR |= (uint32_t)lowpower_mode; -} - -/*! - \brief reset the state of the low power mode - \param[in] lowpower_mode: the low power mode state - \arg SCB_LPM_SLEEP_EXIT_ISR: if chose this para, the system will exit low power - mode by exiting from ISR - \arg SCB_LPM_DEEPSLEEP: if chose this para, the system will enter the SLEEP mode - \arg SCB_LPM_WAKE_BY_ALL_INT: if chose this para, the lowpower mode only can be - woke up by the enable interrupts - \param[out] none - \retval none -*/ -void system_lowpower_reset(uint8_t lowpower_mode) -{ - SCB->SCR &= (~(uint32_t)lowpower_mode); -} - -/*! - \brief set the systick clock source - \param[in] systick_clksource: the systick clock source needed to choose - \arg SYSTICK_CLKSOURCE_HCLK: systick clock source is from HCLK - \arg SYSTICK_CLKSOURCE_HCLK_DIV8: systick clock source is from HCLK/8 - \param[out] none - \retval none -*/ - -void systick_clksource_set(uint32_t systick_clksource) -{ - if(SYSTICK_CLKSOURCE_HCLK == systick_clksource ){ - /* set the systick clock source from HCLK */ - SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; - }else{ - /* set the systick clock source from HCLK/8 */ - SysTick->CTRL &= SYSTICK_CLKSOURCE_HCLK_DIV8; - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_pmu.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_pmu.c deleted file mode 100644 index 1c1281c..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_pmu.c +++ /dev/null @@ -1,386 +0,0 @@ -/*! - \file gd32f30x_pmu.c - \brief PMU driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - - -#include "gd32f30x_pmu.h" - -/*! - \brief reset PMU register - \param[in] none - \param[out] none - \retval none -*/ -void pmu_deinit(void) -{ - /* reset PMU */ - rcu_periph_reset_enable(RCU_PMURST); - rcu_periph_reset_disable(RCU_PMURST); -} - -/*! - \brief select low voltage detector threshold - \param[in] lvdt_n: - \arg PMU_LVDT_0: voltage threshold is 2.1V - \arg PMU_LVDT_1: voltage threshold is 2.3V - \arg PMU_LVDT_2: voltage threshold is 2.4V - \arg PMU_LVDT_3: voltage threshold is 2.6V - \arg PMU_LVDT_4: voltage threshold is 2.7V - \arg PMU_LVDT_5: voltage threshold is 2.9V - \arg PMU_LVDT_6: voltage threshold is 3.0V - \arg PMU_LVDT_7: voltage threshold is 3.1V - \param[out] none - \retval none -*/ -void pmu_lvd_select(uint32_t lvdt_n) -{ - /* disable LVD */ - PMU_CTL &= ~PMU_CTL_LVDEN; - /* clear LVDT bits */ - PMU_CTL &= ~PMU_CTL_LVDT; - /* set LVDT bits according to lvdt_n */ - PMU_CTL |= lvdt_n; - /* enable LVD */ - PMU_CTL |= PMU_CTL_LVDEN; -} - -/*! - \brief select LDO output voltage - this bit set by software when the main PLL closed, before closing PLL, change the system clock to IRC16M or HXTAL - \param[in] ldo_output: - \arg PMU_LDOVS_LOW: LDO output voltage low mode - \arg PMU_LDOVS_MID: LDO output voltage mid mode - \arg PMU_LDOVS_HIGH: LDO output voltage high mode - \param[out] none - \retval none -*/ -void pmu_ldo_output_select(uint32_t ldo_output) -{ - PMU_CTL &= ~PMU_CTL_LDOVS; - PMU_CTL |= ldo_output; -} - -/*! - \brief disable PMU lvd - \param[in] none - \param[out] none - \retval none -*/ -void pmu_lvd_disable(void) -{ - /* disable LVD */ - PMU_CTL &= ~PMU_CTL_LVDEN; -} - -/*! - \brief switch high-driver mode - this bit set by software only when IRC16M or HXTAL used as system clock - \param[in] highdr_switch: - \arg PMU_HIGHDR_SWITCH_NONE: disable high-driver mode switch - \arg PMU_HIGHDR_SWITCH_EN: enable high-driver mode switch - \param[out] none - \retval none -*/ -void pmu_highdriver_switch_select(uint32_t highdr_switch) -{ - /* wait for HDRF flag set */ - while(SET != pmu_flag_get(PMU_FLAG_HDRF)){ - } - PMU_CTL &= ~PMU_CTL_HDS; - PMU_CTL |= highdr_switch; -} - -/*! - \brief enable high-driver mode - this bit set by software only when IRC16M or HXTAL used as system clock - \param[in] none - \param[out] none - \retval none -*/ -void pmu_highdriver_mode_enable(void) -{ - PMU_CTL |= PMU_CTL_HDEN; -} - -/*! - \brief disable high-driver mode - \param[in] none - \param[out] none - \retval none -*/ -void pmu_highdriver_mode_disable(void) -{ - PMU_CTL &= ~PMU_CTL_HDEN; -} - -/*! - \brief enable low-driver mode in deep-sleep mode - \param[in] none - \param[out] none - \retval none -*/ -void pmu_lowdriver_mode_enable(void) -{ - PMU_CTL |= PMU_CTL_LDEN; -} - -/*! - \brief disable low-driver mode in deep-sleep mode - \param[in] none - \param[out] none - \retval none -*/ -void pmu_lowdriver_mode_disable(void) -{ - PMU_CTL &= ~PMU_CTL_LDEN; -} - -/*! - \brief driver mode when use low power LDO - \param[in] mode: - \arg PMU_NORMALDR_LOWPWR: normal driver when use low power LDO - \arg PMU_LOWDR_LOWPWR: low-driver mode enabled when LDEN is 11 and use low power LDO - \param[out] none - \retval none -*/ -void pmu_lowpower_driver_config(uint32_t mode) -{ - PMU_CTL &= ~PMU_CTL_LDLP; - PMU_CTL |= mode; -} - -/*! - \brief driver mode when use normal power LDO - \param[in] mode: - \arg PMU_NORMALDR_NORMALPWR: normal driver when use normal power LDO - \arg PMU_LOWDR_NORMALPWR: low-driver mode enabled when LDEN is 11 and use normal power LDO - \param[out] none - \retval none -*/ -void pmu_normalpower_driver_config(uint32_t mode) -{ - PMU_CTL &= ~PMU_CTL_LDNP; - PMU_CTL |= mode; -} - -/*! - \brief PMU work at sleep mode - \param[in] sleepmodecmd: - \arg WFI_CMD: use WFI command - \arg WFE_CMD: use WFE command - \param[out] none - \retval none -*/ -void pmu_to_sleepmode(uint8_t sleepmodecmd) -{ - /* clear sleepdeep bit of Cortex-M4 system control register */ - SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); - - /* select WFI or WFE command to enter sleep mode */ - if(WFI_CMD == sleepmodecmd){ - __WFI(); - }else{ - __WFE(); - } -} - -/*! - \brief PMU work at deepsleep mode - \param[in] ldo - \arg PMU_LDO_NORMAL: LDO normal work when pmu enter deepsleep mode - \arg PMU_LDO_LOWPOWER: LDO work at low power mode when pmu enter deepsleep mode - \param[in] deepsleepmodecmd: - \arg WFI_CMD: use WFI command - \arg WFE_CMD: use WFE command - \param[out] none - \retval none -*/ -void pmu_to_deepsleepmode(uint32_t ldo,uint8_t deepsleepmodecmd) -{ - static uint32_t reg_snap[ 4 ]; - /* clear stbmod and ldolp bits */ - PMU_CTL &= ~((uint32_t)(PMU_CTL_STBMOD | PMU_CTL_LDOLP)); - - /* set ldolp bit according to pmu_ldo */ - PMU_CTL |= ldo; - - /* set sleepdeep bit of Cortex-M4 system control register */ - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - - reg_snap[ 0 ] = REG32( 0xE000E010U ); - reg_snap[ 1 ] = REG32( 0xE000E100U ); - reg_snap[ 2 ] = REG32( 0xE000E104U ); - reg_snap[ 3 ] = REG32( 0xE000E108U ); - - REG32( 0xE000E010U ) &= 0x00010004U; - REG32( 0xE000E180U ) = 0XFF7FF83DU; - REG32( 0xE000E184U ) = 0XBFFFF8FFU; - REG32( 0xE000E188U ) = 0xFFFFFFFFU; - - /* select WFI or WFE command to enter deepsleep mode */ - if(WFI_CMD == deepsleepmodecmd){ - __WFI(); - }else{ - __SEV(); - __WFE(); - __WFE(); - } - - REG32( 0xE000E010U ) = reg_snap[ 0 ] ; - REG32( 0xE000E100U ) = reg_snap[ 1 ] ; - REG32( 0xE000E104U ) = reg_snap[ 2 ] ; - REG32( 0xE000E108U ) = reg_snap[ 3 ] ; - - /* reset sleepdeep bit of Cortex-M4 system control register */ - SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); -} - -/*! - \brief pmu work at standby mode - \param[in] standbymodecmd: - \arg WFI_CMD: use WFI command - \arg WFE_CMD: use WFE command - \param[out] none - \retval none -*/ -void pmu_to_standbymode(uint8_t standbymodecmd) -{ - /* set sleepdeep bit of Cortex-M4 system control register */ - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - - /* set stbmod bit */ - PMU_CTL |= PMU_CTL_STBMOD; - - /* reset wakeup flag */ - PMU_CTL |= PMU_CTL_WURST; - - /* select WFI or WFE command to enter standby mode */ - if(WFI_CMD == standbymodecmd){ - __WFI(); - }else{ - __WFE(); - } -} - -/*! - \brief enable backup domain write - \param[in] none - \param[out] none - \retval none -*/ -void pmu_backup_write_enable(void) -{ - PMU_CTL |= PMU_CTL_BKPWEN; -} - -/*! - \brief disable backup domain write - \param[in] none - \param[out] none - \retval none -*/ -void pmu_backup_write_disable(void) -{ - PMU_CTL &= ~PMU_CTL_BKPWEN; -} - -/*! - \brief enable wakeup pin - \param[in] none - \param[out] none - \retval none -*/ -void pmu_wakeup_pin_enable(void) -{ - PMU_CS |= PMU_CS_WUPEN; -} - -/*! - \brief disable wakeup pin - \param[in] none - \param[out] none - \retval none -*/ -void pmu_wakeup_pin_disable(void) -{ - PMU_CS &= ~PMU_CS_WUPEN; -} - -/*! - \brief clear flag bit - \param[in] flag_reset: - \arg PMU_FLAG_RESET_WAKEUP: reset wakeup flag - \arg PMU_FLAG_RESET_STANDBY: reset standby flag - \param[out] none - \retval none -*/ -void pmu_flag_clear(uint32_t flag_reset) -{ - switch(flag_reset){ - case PMU_FLAG_RESET_WAKEUP: - /* reset wakeup flag */ - PMU_CTL |= PMU_CTL_WURST; - break; - case PMU_FLAG_RESET_STANDBY: - /* reset standby flag */ - PMU_CTL |= PMU_CTL_STBRST; - break; - default : - break; - } -} - -/*! - \brief get flag state - \param[in] flag: - \arg PMU_FLAG_WAKEUP: wakeup flag - \arg PMU_FLAG_STANDBY: standby flag - \arg PMU_FLAG_LVD: lvd flag - \arg PMU_FLAG_LDOVSRF: LDO voltage select ready flag - \arg PMU_FLAG_HDRF: high-driver ready flag - \arg PMU_FLAG_HDSRF: high-driver switch ready flag - \arg PMU_FLAG_LDRF: low-driver mode ready flag - \param[out] none - \retval FlagStatus SET or RESET -*/ -FlagStatus pmu_flag_get(uint32_t flag) -{ - if(PMU_CS & flag){ - return SET; - }else{ - return RESET; - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_rcu.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_rcu.c deleted file mode 100644 index 6fb856c..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_rcu.c +++ /dev/null @@ -1,1326 +0,0 @@ -/*! - \file gd32f30x_rcu.c - \brief RCU driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_rcu.h" - -/* define clock source */ -#define SEL_IRC8M ((uint16_t)0U) /* IRC8M is selected as CK_SYS */ -#define SEL_HXTAL ((uint16_t)1U) /* HXTAL is selected as CK_SYS */ -#define SEL_PLL ((uint16_t)2U) /* PLL is selected as CK_SYS */ - -/* define startup timeout count */ -#define OSC_STARTUP_TIMEOUT ((uint32_t)0x000FFFFFU) -#define LXTAL_STARTUP_TIMEOUT ((uint32_t)0x03FFFFFFU) - -/* ADC clock prescaler offset */ -#define RCU_ADC_PSC_OFFSET ((uint32_t)14U) - -/* RCU IRC8M adjust value mask and offset*/ -#define RCU_IRC8M_ADJUST_MASK ((uint8_t)0x1FU) -#define RCU_IRC8M_ADJUST_OFFSET ((uint32_t)3U) - -/* RCU PLL1 clock multiplication factor offset */ -#define RCU_CFG1_PLL1MF_OFFSET ((uint32_t)8U) -/* RCU PREDV1 division factor offset*/ -#define RCU_CFG1_PREDV1_OFFSET ((uint32_t)4U) - - -/*! - \brief deinitialize the RCU - \param[in] none - \param[out] none - \retval none -*/ -void rcu_deinit(void) -{ - /* enable IRC8M */ - RCU_CTL |= RCU_CTL_IRC8MEN; - rcu_osci_stab_wait(RCU_IRC8M); - - /* reset CFG0 register */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - RCU_CFG0 &= ~(RCU_CFG0_SCS | RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC | - RCU_CFG0_ADCPSC | RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0 | RCU_CFG0_PLLMF | - RCU_CFG0_USBDPSC | RCU_CFG0_CKOUT0SEL | RCU_CFG0_PLLMF_4 | RCU_CFG0_ADCPSC_2 | RCU_CFG0_PLLMF_5 | RCU_CFG0_USBDPSC_2); -#elif defined(GD32F30X_CL) - RCU_CFG0 &= ~(RCU_CFG0_SCS | RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC | - RCU_CFG0_ADCPSC | RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0_LSB | RCU_CFG0_PLLMF | - RCU_CFG0_USBFSPSC | RCU_CFG0_CKOUT0SEL | RCU_CFG0_ADCPSC_2 | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5 | RCU_CFG0_USBFSPSC_2); -#endif /* GD32F30X_HD and GD32F30X_XD */ - /* reset CTL register */ - RCU_CTL &= ~(RCU_CTL_HXTALEN | RCU_CTL_CKMEN | RCU_CTL_PLLEN); - RCU_CTL &= ~RCU_CTL_HXTALBPS; -#ifdef GD32F30X_CL - RCU_CTL &= ~(RCU_CTL_PLL1EN | RCU_CTL_PLL2EN); -#endif /* GD32F30X_CL */ - - /* reset INT and CFG1 register */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - RCU_INT = 0x009f0000U; - RCU_CFG1 &= ~(RCU_CFG1_ADCPSC_3 | RCU_CFG1_PLLPRESEL); -#elif defined(GD32F30X_CL) - RCU_INT = 0x00ff0000U; - RCU_CFG1 &= ~(RCU_CFG1_PREDV0 | RCU_CFG1_PREDV1 | RCU_CFG1_PLL1MF | RCU_CFG1_PLL2MF | - RCU_CFG1_PREDV0SEL | RCU_CFG1_I2S1SEL | RCU_CFG1_I2S2SEL | RCU_CFG1_ADCPSC_3 | - RCU_CFG1_PLLPRESEL | RCU_CFG1_PLL2MF_4); -#endif /* GD32F30X_HD and GD32F30X_XD */ -} - -/*! - \brief enable the peripherals clock - \param[in] periph: RCU peripherals, refer to rcu_periph_enum - only one parameter can be selected which is shown as below: - \arg RCU_GPIOx (x=A,B,C,D,E,F,G): GPIO ports clock - \arg RCU_AF : alternate function clock - \arg RCU_CRC: CRC clock - \arg RCU_DMAx (x=0,1): DMA clock - \arg RCU_ENET: ENET clock(CL series available) - \arg RCU_ENETTX: ENETTX clock(CL series available) - \arg RCU_ENETRX: ENETRX clock(CL series available) - \arg RCU_USBD: USBD clock(HD,XD series available) - \arg RCU_USBFS: USBFS clock(CL series available) - \arg RCU_EXMC: EXMC clock - \arg RCU_TIMERx (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are not available for HD series): TIMER clock - \arg RCU_WWDGT: WWDGT clock - \arg RCU_SPIx (x=0,1,2): SPI clock - \arg RCU_USARTx (x=0,1,2): USART clock - \arg RCU_UARTx (x=3,4): UART clock - \arg RCU_I2Cx (x=0,1): I2C clock - \arg RCU_CANx (x=0,1,CAN1 is only available for CL series): CAN clock - \arg RCU_PMU: PMU clock - \arg RCU_DAC: DAC clock - \arg RCU_RTC: RTC clock - \arg RCU_ADCx (x=0,1,2,ADC2 is not available for CL series): ADC clock - \arg RCU_SDIO: SDIO clock(not available for CL series) - \arg RCU_CTC: CTC clock - \arg RCU_BKPI: BKP interface clock - \param[out] none - \retval none -*/ -void rcu_periph_clock_enable(rcu_periph_enum periph) -{ - RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); -} - -/*! - \brief disable the peripherals clock - \param[in] periph: RCU peripherals, refer to rcu_periph_enum - only one parameter can be selected which is shown as below: - \arg RCU_GPIOx (x=A,B,C,D,E,F,G): GPIO ports clock - \arg RCU_AF: alternate function clock - \arg RCU_CRC: CRC clock - \arg RCU_DMAx (x=0,1): DMA clock - \arg RCU_ENET: ENET clock(CL series available) - \arg RCU_ENETTX: ENETTX clock(CL series available) - \arg RCU_ENETRX: ENETRX clock(CL series available) - \arg RCU_USBD: USBD clock(HD,XD series available) - \arg RCU_USBFS: USBFS clock(CL series available) - \arg RCU_EXMC: EXMC clock - \arg RCU_TIMERx (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are not available for HD series): TIMER clock - \arg RCU_WWDGT: WWDGT clock - \arg RCU_SPIx (x=0,1,2): SPI clock - \arg RCU_USARTx (x=0,1,2): USART clock - \arg RCU_UARTx (x=3,4): UART clock - \arg RCU_I2Cx (x=0,1): I2C clock - \arg RCU_CANx (x=0,1,CAN1 is only available for CL series): CAN clock - \arg RCU_PMU: PMU clock - \arg RCU_DAC: DAC clock - \arg RCU_RTC: RTC clock - \arg RCU_ADCx (x=0,1,2,ADC2 is not available for CL series): ADC clock - \arg RCU_SDIO: SDIO clock(not available for CL series) - \arg RCU_CTC: CTC clock - \arg RCU_BKPI: BKP interface clock - \param[out] none - \retval none -*/ -void rcu_periph_clock_disable(rcu_periph_enum periph) -{ - RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); -} - -/*! - \brief enable the peripherals clock when sleep mode - \param[in] periph: RCU peripherals, refer to rcu_periph_sleep_enum - only one parameter can be selected which is shown as below: - \arg RCU_FMC_SLP: FMC clock - \arg RCU_SRAM_SLP: SRAM clock - \param[out] none - \retval none -*/ -void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph) -{ - RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); -} - -/*! - \brief disable the peripherals clock when sleep mode - \param[in] periph: RCU peripherals, refer to rcu_periph_sleep_enum - only one parameter can be selected which is shown as below: - \arg RCU_FMC_SLP: FMC clock - \arg RCU_SRAM_SLP: SRAM clock - \param[out] none - \retval none -*/ -void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph) -{ - RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); -} - -/*! - \brief reset the peripherals - \param[in] periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum - only one parameter can be selected which is shown as below: - \arg RCU_GPIOxRST (x=A,B,C,D,E,F,G): reset GPIO ports - \arg RCU_AFRST : reset alternate function clock - \arg RCU_ENETRST: reset ENET(CL series available) - \arg RCU_USBDRST: reset USBD(HD,XD series available) - \arg RCU_USBFSRST: reset USBFS(CL series available) - \arg RCU_TIMERxRST (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are not available for HD series): reset TIMER - \arg RCU_WWDGTRST: reset WWDGT - \arg RCU_SPIxRST (x=0,1,2): reset SPI - \arg RCU_USARTxRST (x=0,1,2): reset USART - \arg RCU_UARTxRST (x=3,4): reset UART - \arg RCU_I2CxRST (x=0,1): reset I2C - \arg RCU_CANxRST (x=0,1,CAN1 is only available for CL series): reset CAN - \arg RCU_PMURST: reset PMU - \arg RCU_DACRST: reset DAC - \arg RCU_ADCRST (x=0,1,2,ADC2 is not available for CL series): reset ADC - \arg RCU_CTCRST: reset CTC - \arg RCU_BKPIRST: reset BKPI - \param[out] none - \retval none -*/ -void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset) -{ - RCU_REG_VAL(periph_reset) |= BIT(RCU_BIT_POS(periph_reset)); -} - -/*! - \brief disable reset the peripheral - \param[in] periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum - only one parameter can be selected which is shown as below: - \arg RCU_GPIOxRST (x=A,B,C,D,E,F,G): reset GPIO ports - \arg RCU_AFRST : reset alternate function clock - \arg RCU_ENETRST: reset ENET(CL series available) - \arg RCU_USBDRST: reset USBD(HD,XD series available) - \arg RCU_USBFSRST: reset USBFS(CL series available) - \arg RCU_TIMERxRST (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are not available for HD series): reset TIMER - \arg RCU_WWDGTRST: reset WWDGT - \arg RCU_SPIxRST (x=0,1,2): reset SPI - \arg RCU_USARTxRST (x=0,1,2): reset USART - \arg RCU_UARTxRST (x=3,4): reset UART - \arg RCU_I2CxRST (x=0,1): reset I2C - \arg RCU_CANxRST (x=0,1,CAN1 is only available for CL series): reset CAN - \arg RCU_PMURST: reset PMU - \arg RCU_DACRST: reset DAC - \arg RCU_ADCRST (x=0,1,2,ADC2 is not available for CL series): reset ADC - \arg RCU_CTCRST: reset CTC - \arg RCU_BKPIRST: reset BKPI - \param[out] none - \retval none -*/ -void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset) -{ - RCU_REG_VAL(periph_reset) &= ~BIT(RCU_BIT_POS(periph_reset)); -} - -/*! - \brief reset the BKP domain - \param[in] none - \param[out] none - \retval none -*/ -void rcu_bkp_reset_enable(void) -{ - RCU_BDCTL |= RCU_BDCTL_BKPRST; -} - -/*! - \brief disable the BKP domain reset - \param[in] none - \param[out] none - \retval none -*/ -void rcu_bkp_reset_disable(void) -{ - RCU_BDCTL &= ~RCU_BDCTL_BKPRST; -} - -/*! - \brief configure the system clock source - \param[in] ck_sys: system clock source select - only one parameter can be selected which is shown as below: - \arg RCU_CKSYSSRC_IRC8M: select CK_IRC8M as the CK_SYS source - \arg RCU_CKSYSSRC_HXTAL: select CK_HXTAL as the CK_SYS source - \arg RCU_CKSYSSRC_PLL: select CK_PLL as the CK_SYS source - \param[out] none - \retval none -*/ -void rcu_system_clock_source_config(uint32_t ck_sys) -{ - uint32_t reg; - - reg = RCU_CFG0; - /* reset the SCS bits and set according to ck_sys */ - reg &= ~RCU_CFG0_SCS; - RCU_CFG0 = (reg | ck_sys); -} - -/*! - \brief get the system clock source - \param[in] none - \param[out] none - \retval which clock is selected as CK_SYS source - \arg RCU_SCSS_IRC8M: CK_IRC8M is selected as the CK_SYS source - \arg RCU_SCSS_HXTAL: CK_HXTAL is selected as the CK_SYS source - \arg RCU_SCSS_PLL: CK_PLL is selected as the CK_SYS source -*/ -uint32_t rcu_system_clock_source_get(void) -{ - return (RCU_CFG0 & RCU_CFG0_SCSS); -} - -/*! - \brief configure the AHB clock prescaler selection - \param[in] ck_ahb: AHB clock prescaler selection - only one parameter can be selected which is shown as below: - \arg RCU_AHB_CKSYS_DIVx, x=1, 2, 4, 8, 16, 64, 128, 256, 512 - \param[out] none - \retval none -*/ -void rcu_ahb_clock_config(uint32_t ck_ahb) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* reset the AHBPSC bits and set according to ck_ahb */ - reg &= ~RCU_CFG0_AHBPSC; - RCU_CFG0 = (reg | ck_ahb); -} - -/*! - \brief configure the APB1 clock prescaler selection - \param[in] ck_apb1: APB1 clock prescaler selection - only one parameter can be selected which is shown as below: - \arg RCU_APB1_CKAHB_DIV1: select CK_AHB as CK_APB1 - \arg RCU_APB1_CKAHB_DIV2: select CK_AHB/2 as CK_APB1 - \arg RCU_APB1_CKAHB_DIV4: select CK_AHB/4 as CK_APB1 - \arg RCU_APB1_CKAHB_DIV8: select CK_AHB/8 as CK_APB1 - \arg RCU_APB1_CKAHB_DIV16: select CK_AHB/16 as CK_APB1 - \param[out] none - \retval none -*/ -void rcu_apb1_clock_config(uint32_t ck_apb1) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* reset the APB1PSC and set according to ck_apb1 */ - reg &= ~RCU_CFG0_APB1PSC; - RCU_CFG0 = (reg | ck_apb1); -} - -/*! - \brief configure the APB2 clock prescaler selection - \param[in] ck_apb2: APB2 clock prescaler selection - only one parameter can be selected which is shown as below: - \arg RCU_APB2_CKAHB_DIV1: select CK_AHB as CK_APB2 - \arg RCU_APB2_CKAHB_DIV2: select CK_AHB/2 as CK_APB2 - \arg RCU_APB2_CKAHB_DIV4: select CK_AHB/4 as CK_APB2 - \arg RCU_APB2_CKAHB_DIV8: select CK_AHB/8 as CK_APB2 - \arg RCU_APB2_CKAHB_DIV16: select CK_AHB/16 as CK_APB2 - \param[out] none - \retval none -*/ -void rcu_apb2_clock_config(uint32_t ck_apb2) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* reset the APB2PSC and set according to ck_apb2 */ - reg &= ~RCU_CFG0_APB2PSC; - RCU_CFG0 = (reg | ck_apb2); -} - -/*! - \brief configure the CK_OUT0 clock source - \param[in] ckout0_src: CK_OUT0 clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_CKOUT0SRC_NONE: no clock selected - \arg RCU_CKOUT0SRC_CKSYS: system clock selected - \arg RCU_CKOUT0SRC_IRC8M: high speed 8M internal oscillator clock selected - \arg RCU_CKOUT0SRC_HXTAL: HXTAL selected - \arg RCU_CKOUT0SRC_CKPLL_DIV2: CK_PLL/2 selected - \arg RCU_CKOUT0SRC_CKPLL1: CK_PLL1 selected - \arg RCU_CKOUT0SRC_CKPLL2_DIV2: CK_PLL2/2 selected - \arg RCU_CKOUT0SRC_EXT1: EXT1 selected - \arg RCU_CKOUT0SRC_CKPLL2: PLL selected - \param[out] none - \retval none -*/ -void rcu_ckout0_config(uint32_t ckout0_src) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* reset the CKOUT0SRC, set according to ckout0_src */ - reg &= ~RCU_CFG0_CKOUT0SEL; - RCU_CFG0 = (reg | ckout0_src); -} - -/*! - \brief configure the main PLL clock - \param[in] pll_src: PLL clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_PLLSRC_IRC8M_DIV2: IRC8M/2 clock selected as source clock of PLL - \arg RCU_PLLSRC_HXTAL_IRC48M: HXTAL or IRC48M selected as source clock of PLL - \param[in] pll_mul: PLL clock multiplication factor - only one parameter can be selected which is shown as below: - \arg RCU_PLL_MULx (XD series x = 2..63, CL series x = 2..14, 16..63, 6.5) - \param[out] none - \retval none -*/ -void rcu_pll_config(uint32_t pll_src, uint32_t pll_mul) -{ - uint32_t reg = 0U; - - reg = RCU_CFG0; - - /* PLL clock source and multiplication factor configuration */ - reg &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); - reg |= (pll_src | pll_mul); - - RCU_CFG0 = reg; -} - -/*! - \brief configure the PLL clock source preselection - \param[in] pll_presel: PLL clock source preselection - only one parameter can be selected which is shown as below: - \arg RCU_PLLPRESRC_HXTAL: HXTAL selected as PLL source clock - \arg RCU_PLLPRESRC_IRC48M: CK_PLL selected as PREDV0 input source clock - \param[out] none - \retval none -*/ -void rcu_pllpresel_config(uint32_t pll_presel) -{ - uint32_t reg = 0U; - - reg = RCU_CFG1; - - /* PLL clock source preselection */ - reg &= ~RCU_CFG1_PLLPRESEL; - reg |= pll_presel; - - RCU_CFG1 = reg; -} - -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) -/*! - \brief configure the PREDV0 division factor - \param[in] predv0_div: PREDV0 division factor - \arg RCU_PREDV0_DIVx, x = 1,2 - \param[out] none - \retval none -*/ -void rcu_predv0_config(uint32_t predv0_div) -{ - uint32_t reg = 0U; - - reg = RCU_CFG0; - /* reset PREDV0 bit */ - reg &= ~RCU_CFG0_PREDV0; - if(RCU_PREDV0_DIV2 == predv0_div){ - /* set the PREDV0 bit */ - reg |= RCU_CFG0_PREDV0; - } - - RCU_CFG0 = reg; -} -#elif defined(GD32F30X_CL) -/*! - \brief configure the PREDV0 division factor and clock source - \param[in] predv0_source: PREDV0 input clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_PREDV0SRC_HXTAL_IRC48M: HXTAL or IRC48M selected as PREDV0 input source clock - \arg RCU_PREDV0SRC_CKPLL1: CK_PLL1 selected as PREDV0 input source clock - \param[in] predv0_div: PREDV0 division factor - only one parameter can be selected which is shown as below: - \arg RCU_PREDV0_DIVx, x = 1..16 - \param[out] none - \retval none -*/ -void rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div) -{ - uint32_t reg = 0U; - - reg = RCU_CFG1; - /* reset PREDV0SEL and PREDV0 bits */ - reg &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PREDV0); - /* set the PREDV0SEL and PREDV0 division factor */ - reg |= (predv0_source | predv0_div); - - RCU_CFG1 = reg; -} - -/*! - \brief configure the PREDV1 division factor - \param[in] predv1_div: PREDV1 division factor - only one parameter can be selected which is shown as below: - \arg RCU_PREDV1_DIVx, x = 1..16 - \param[out] none - \retval none -*/ -void rcu_predv1_config(uint32_t predv1_div) -{ - uint32_t reg = 0U; - - reg = RCU_CFG1; - /* reset the PREDV1 bits */ - reg &= ~RCU_CFG1_PREDV1; - /* set the PREDV1 division factor */ - reg |= predv1_div; - - RCU_CFG1 = reg; -} - -/*! - \brief configure the PLL1 clock - \param[in] pll_mul: PLL clock multiplication factor - only one parameter can be selected which is shown as below: - \arg RCU_PLL1_MULx (x = 8..14,16,20) - \param[out] none - \retval none -*/ -void rcu_pll1_config(uint32_t pll_mul) -{ - RCU_CFG1 &= ~RCU_CFG1_PLL1MF; - RCU_CFG1 |= pll_mul; -} - -/*! - \brief configure the PLL2 clock - \param[in] pll_mul: PLL clock multiplication factor - only one parameter can be selected which is shown as below: - \arg RCU_PLL2_MULx (x = 8..14,16,20,18..32,40) - \param[out] none - \retval none -*/ -void rcu_pll2_config(uint32_t pll_mul) -{ - RCU_CFG1 &= ~RCU_CFG1_PLL2MF; - RCU_CFG1 |= pll_mul; -} -#endif /* GD32F30X_HD and GD32F30X_XD */ - -/*! - \brief configure the ADC prescaler factor - \param[in] adc_psc: ADC prescaler factor - only one parameter can be selected which is shown as below: - \arg RCU_CKADC_CKAPB2_DIV2: ADC prescaler select CK_APB2/2 - \arg RCU_CKADC_CKAPB2_DIV4: ADC prescaler select CK_APB2/4 - \arg RCU_CKADC_CKAPB2_DIV6: ADC prescaler select CK_APB2/6 - \arg RCU_CKADC_CKAPB2_DIV8: ADC prescaler select CK_APB2/8 - \arg RCU_CKADC_CKAPB2_DIV12: ADC prescaler select CK_APB2/12 - \arg RCU_CKADC_CKAPB2_DIV16: ADC prescaler select CK_APB2/16 - \arg RCU_CKADC_CKAHB_DIV5: ADC prescaler select CK_AHB/5 - \arg RCU_CKADC_CKAHB_DIV6: ADC prescaler select CK_AHB/6 - \arg RCU_CKADC_CKAHB_DIV10: ADC prescaler select CK_AHB/10 - \arg RCU_CKADC_CKAHB_DIV20: ADC prescaler select CK_AHB/20 - \param[out] none - \retval none -*/ -void rcu_adc_clock_config(uint32_t adc_psc) -{ - uint32_t reg0,reg1; - - /* reset the ADCPSC bits */ - reg0 = RCU_CFG0; - reg0 &= ~(RCU_CFG0_ADCPSC_2 | RCU_CFG0_ADCPSC); - reg1 = RCU_CFG1; - reg1 &= ~RCU_CFG1_ADCPSC_3; - - /* set the ADC prescaler factor */ - switch(adc_psc){ - case RCU_CKADC_CKAPB2_DIV2: - case RCU_CKADC_CKAPB2_DIV4: - case RCU_CKADC_CKAPB2_DIV6: - case RCU_CKADC_CKAPB2_DIV8: - reg0 |= (adc_psc << RCU_ADC_PSC_OFFSET); - break; - - case RCU_CKADC_CKAPB2_DIV12: - case RCU_CKADC_CKAPB2_DIV16: - adc_psc &= ~BIT(2); - reg0 |= ((adc_psc << RCU_ADC_PSC_OFFSET) | RCU_CFG0_ADCPSC_2); - break; - - case RCU_CKADC_CKAHB_DIV5: - case RCU_CKADC_CKAHB_DIV6: - case RCU_CKADC_CKAHB_DIV10: - case RCU_CKADC_CKAHB_DIV20: - adc_psc &= ~BITS(2,3); - reg0 |= (adc_psc << RCU_ADC_PSC_OFFSET); - reg1 |= RCU_CFG1_ADCPSC_3; - break; - - default: - break; - } - - /* set the register */ - RCU_CFG0 = reg0; - RCU_CFG1 = reg1; -} - -/*! - \brief configure the USBD/USBFS prescaler factor - \param[in] usb_psc: USB prescaler factor - only one parameter can be selected which is shown as below: - \arg RCU_CKUSB_CKPLL_DIV1_5: USBD/USBFS prescaler select CK_PLL/1.5 - \arg RCU_CKUSB_CKPLL_DIV1: USBD/USBFS prescaler select CK_PLL/1 - \arg RCU_CKUSB_CKPLL_DIV2_5: USBD/USBFS prescaler select CK_PLL/2.5 - \arg RCU_CKUSB_CKPLL_DIV2: USBD/USBFS prescaler select CK_PLL/2 - \arg RCU_CKUSB_CKPLL_DIV3: USBD/USBFS prescaler select CK_PLL/3 - \arg RCU_CKUSB_CKPLL_DIV3_5: USBD/USBFS prescaler select CK_PLL/3.5 - \arg RCU_CKUSB_CKPLL_DIV4: USBD/USBFS prescaler select CK_PLL/4 - \param[out] none - \retval none -*/ -void rcu_usb_clock_config(uint32_t usb_psc) -{ - uint32_t reg; - - reg = RCU_CFG0; - - /* configure the USBD/USBFS prescaler factor */ -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - reg &= ~RCU_CFG0_USBDPSC; -#elif defined(GD32F30X_CL) - reg &= ~RCU_CFG0_USBFSPSC; -#endif /* GD32F30X_HD and GD32F30X_XD */ - - RCU_CFG0 = (reg | usb_psc); -} - -/*! - \brief configure the RTC clock source selection - \param[in] rtc_clock_source: RTC clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_RTCSRC_NONE: no clock selected - \arg RCU_RTCSRC_LXTAL: CK_LXTAL selected as RTC source clock - \arg RCU_RTCSRC_IRC40K: CK_IRC40K selected as RTC source clock - \arg RCU_RTCSRC_HXTAL_DIV_128: CK_HXTAL/128 selected as RTC source clock - \param[out] none - \retval none -*/ -void rcu_rtc_clock_config(uint32_t rtc_clock_source) -{ - uint32_t reg; - - reg = RCU_BDCTL; - /* reset the RTCSRC bits and set according to rtc_clock_source */ - reg &= ~RCU_BDCTL_RTCSRC; - RCU_BDCTL = (reg | rtc_clock_source); -} - -#ifdef GD32F30X_CL -/*! - \brief configure the I2S1 clock source selection - \param[in] i2s_clock_source: I2S1 clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_I2S1SRC_CKSYS: System clock selected as I2S1 source clock - \arg RCU_I2S1SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S1 source clock - \param[out] none - \retval none -*/ -void rcu_i2s1_clock_config(uint32_t i2s_clock_source) -{ - uint32_t reg; - - reg = RCU_CFG1; - /* reset the I2S1SEL bit and set according to i2s_clock_source */ - reg &= ~RCU_CFG1_I2S1SEL; - RCU_CFG1 = (reg | i2s_clock_source); -} - -/*! - \brief configure the I2S2 clock source selection - \param[in] i2s_clock_source: I2S2 clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_I2S2SRC_CKSYS: system clock selected as I2S2 source clock - \arg RCU_I2S2SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S2 source clock - \param[out] none - \retval none -*/ -void rcu_i2s2_clock_config(uint32_t i2s_clock_source) -{ - uint32_t reg; - - reg = RCU_CFG1; - /* reset the I2S2SEL bit and set according to i2s_clock_source */ - reg &= ~RCU_CFG1_I2S2SEL; - RCU_CFG1 = (reg | i2s_clock_source); -} -#endif /* GD32F30X_CL */ - -/*! - \brief configure the CK48M clock source selection - \param[in] ck48m_clock_source: CK48M clock source selection - only one parameter can be selected which is shown as below: - \arg RCU_CK48MSRC_CKPLL: CK_PLL selected as CK48M source clock - \arg RCU_CK48MSRC_IRC48M: CK_IRC48M selected as CK48M source clock - \param[out] none - \retval none -*/ -void rcu_ck48m_clock_config(uint32_t ck48m_clock_source) -{ - uint32_t reg; - - reg = RCU_ADDCTL; - /* reset the CK48MSEL bit and set according to ck48m_clock_source */ - reg &= ~RCU_ADDCTL_CK48MSEL; - RCU_ADDCTL = (reg | ck48m_clock_source); -} - -/*! - \brief get the clock stabilization and periphral reset flags - \param[in] flag: the clock stabilization and periphral reset flags, refer to rcu_flag_enum - only one parameter can be selected which is shown as below: - \arg RCU_FLAG_IRC8MSTB: IRC8M stabilization flag - \arg RCU_FLAG_HXTALSTB: HXTAL stabilization flag - \arg RCU_FLAG_PLLSTB: PLL stabilization flag - \arg RCU_FLAG_PLL1STB: PLL1 stabilization flag(CL series only) - \arg RCU_FLAG_PLL2STB: PLL2 stabilization flag(CL series only) - \arg RCU_FLAG_LXTALSTB: LXTAL stabilization flag - \arg RCU_FLAG_IRC40KSTB: IRC40K stabilization flag - \arg RCU_FLAG_IRC48MSTB: IRC48M stabilization flag - \arg RCU_FLAG_EPRST: external PIN reset flag - \arg RCU_FLAG_PORRST: power reset flag - \arg RCU_FLAG_SWRST: software reset flag - \arg RCU_FLAG_FWDGTRST: free watchdog timer reset flag - \arg RCU_FLAG_WWDGTRST: window watchdog timer reset flag - \arg RCU_FLAG_LPRST: low-power reset flag - \param[out] none - \retval none -*/ -FlagStatus rcu_flag_get(rcu_flag_enum flag) -{ - /* get the rcu flag */ - if(RESET != (RCU_REG_VAL(flag) & BIT(RCU_BIT_POS(flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear all the reset flag - \param[in] none - \param[out] none - \retval none -*/ -void rcu_all_reset_flag_clear(void) -{ - RCU_RSTSCK |= RCU_RSTSCK_RSTFC; -} - -/*! - \brief get the clock stabilization interrupt and ckm flags - \param[in] int_flag: interrupt and ckm flags, refer to rcu_int_flag_enum - only one parameter can be selected which is shown as below: - \arg RCU_INT_FLAG_IRC40KSTB: IRC40K stabilization interrupt flag - \arg RCU_INT_FLAG_LXTALSTB: LXTAL stabilization interrupt flag - \arg RCU_INT_FLAG_IRC8MSTB: IRC8M stabilization interrupt flag - \arg RCU_INT_FLAG_HXTALSTB: HXTAL stabilization interrupt flag - \arg RCU_INT_FLAG_PLLSTB: PLL stabilization interrupt flag - \arg RCU_INT_FLAG_PLL1STB: PLL1 stabilization interrupt flag(CL series only) - \arg RCU_INT_FLAG_PLL2STB: PLL2 stabilization interrupt flag(CL series only) - \arg RCU_INT_FLAG_CKM: HXTAL clock stuck interrupt flag - \arg RCU_INT_FLAG_IRC48MSTB: IRC48M stabilization interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag) -{ - /* get the rcu interrupt flag */ - if(RESET != (RCU_REG_VAL(int_flag) & BIT(RCU_BIT_POS(int_flag)))){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear the interrupt flags - \param[in] int_flag: clock stabilization and stuck interrupt flags clear, refer to rcu_int_flag_clear_enum - only one parameter can be selected which is shown as below: - \arg RCU_INT_FLAG_IRC40KSTB_CLR: IRC40K stabilization interrupt flag clear - \arg RCU_INT_FLAG_LXTALSTB_CLR: LXTAL stabilization interrupt flag clear - \arg RCU_INT_FLAG_IRC8MSTB_CLR: IRC8M stabilization interrupt flag clear - \arg RCU_INT_FLAG_HXTALSTB_CLR: HXTAL stabilization interrupt flag clear - \arg RCU_INT_FLAG_PLLSTB_CLR: PLL stabilization interrupt flag clear - \arg RCU_INT_FLAG_PLL1STB_CLR: PLL1 stabilization interrupt flag clear(CL series only) - \arg RCU_INT_FLAG_PLL2STB_CLR: PLL2 stabilization interrupt flag clear(CL series only) - \arg RCU_INT_FLAG_CKM_CLR: clock stuck interrupt flag clear - \arg RCU_INT_FLAG_IRC48MSTB_CLR: IRC48M stabilization interrupt flag clear - \param[out] none - \retval none -*/ -void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag) -{ - RCU_REG_VAL(int_flag) |= BIT(RCU_BIT_POS(int_flag)); -} - -/*! - \brief enable the stabilization interrupt - \param[in] interrupt clock stabilization interrupt, refer to rcu_int_enum - only one parameter can be selected which is shown as below: - \arg RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable - \arg RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable - \arg RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable - \arg RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable - \arg RCU_INT_PLLSTB: PLL stabilization interrupt enable - \arg RCU_INT_PLL1STB: PLL1 stabilization interrupt enable(CL series only) - \arg RCU_INT_PLL2STB: PLL2 stabilization interrupt enable(CL series only) - \arg RCU_INT_IRC48MSTB: IRC48M stabilization interrupt enable - \param[out] none - \retval none -*/ -void rcu_interrupt_enable(rcu_int_enum interrupt) -{ - RCU_REG_VAL(interrupt) |= BIT(RCU_BIT_POS(interrupt)); -} - -/*! - \brief disable the stabilization interrupt - \param[in] interrupt clock stabilization interrupt, refer to rcu_int_enum - only one parameter can be selected which is shown as below: - \arg RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable - \arg RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable - \arg RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable - \arg RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable - \arg RCU_INT_PLLSTB: PLL stabilization interrupt enable - \arg RCU_INT_PLL1STB: PLL1 stabilization interrupt enable(CL series only) - \arg RCU_INT_PLL2STB: PLL2 stabilization interrupt enable(CL series only) - \arg RCU_INT_IRC48MSTB: IRC48M stabilization interrupt enable - \param[out] none - \retval none -*/ -void rcu_interrupt_disable(rcu_int_enum interrupt) -{ - RCU_REG_VAL(interrupt) &= ~BIT(RCU_BIT_POS(interrupt)); -} - -/*! - \brief configure the LXTAL drive capability - \param[in] lxtal_dricap: drive capability of LXTAL - only one parameter can be selected which is shown as below: - \arg RCU_LXTAL_LOWDRI: lower driving capability - \arg RCU_LXTAL_MED_LOWDRI: medium low driving capability - \arg RCU_LXTAL_MED_HIGHDRI: medium high driving capability - \arg RCU_LXTAL_HIGHDRI: higher driving capability - \param[out] none - \retval none -*/ -void rcu_lxtal_drive_capability_config(uint32_t lxtal_dricap) -{ - uint32_t reg; - - reg = RCU_BDCTL; - - /* reset the LXTALDRI bits and set according to lxtal_dricap */ - reg &= ~RCU_BDCTL_LXTALDRI; - RCU_BDCTL = (reg | lxtal_dricap); -} - -/*! - \brief wait for oscillator stabilization flags is SET or oscillator startup is timeout - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) - \arg RCU_IRC48M: internal 48M RC oscillators(IRC48M) - \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) - \arg RCU_PLL_CK: phase locked loop(PLL) - \arg RCU_PLL1_CK: phase locked loop 1(CL series only) - \arg RCU_PLL2_CK: phase locked loop 2(CL series only) - \param[out] none - \retval ErrStatus: SUCCESS or ERROR -*/ -ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci) -{ - uint32_t stb_cnt = 0U; - ErrStatus reval = ERROR; - FlagStatus osci_stat = RESET; - - switch(osci){ - /* wait HXTAL stable */ - case RCU_HXTAL: - while((RESET == osci_stat) && (HXTAL_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_HXTALSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_HXTALSTB)){ - reval = SUCCESS; - } - break; - - /* wait LXTAL stable */ - case RCU_LXTAL: - while((RESET == osci_stat) && (LXTAL_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_LXTALSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_LXTALSTB)){ - reval = SUCCESS; - } - break; - - /* wait IRC8M stable */ - case RCU_IRC8M: - while((RESET == osci_stat) && (IRC8M_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_IRC8MSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_IRC8MSTB)){ - reval = SUCCESS; - } - break; - - /* wait IRC48M stable */ - case RCU_IRC48M: - while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_IRC48MSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if (RESET != rcu_flag_get(RCU_FLAG_IRC48MSTB)){ - reval = SUCCESS; - } - break; - - /* wait IRC40K stable */ - case RCU_IRC40K: - while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_IRC40KSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_IRC40KSTB)){ - reval = SUCCESS; - } - break; - - /* wait PLL stable */ - case RCU_PLL_CK: - while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_PLLSTB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_PLLSTB)){ - reval = SUCCESS; - } - break; - -#ifdef GD32F30X_CL - /* wait PLL1 stable */ - case RCU_PLL1_CK: - while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_PLL1STB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_PLL1STB)){ - reval = SUCCESS; - } - break; - /* wait PLL2 stable */ - case RCU_PLL2_CK: - while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ - osci_stat = rcu_flag_get(RCU_FLAG_PLL2STB); - stb_cnt++; - } - - /* check whether flag is set or not */ - if(RESET != rcu_flag_get(RCU_FLAG_PLL2STB)){ - reval = SUCCESS; - } - break; -#endif /* GD32F30X_CL */ - - default: - break; - } - - /* return value */ - return reval; -} - -/*! - \brief turn on the oscillator - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) - \arg RCU_IRC48M: internal 48M RC oscillators(IRC48M) - \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) - \arg RCU_PLL_CK: phase locked loop(PLL) - \arg RCU_PLL1_CK: phase locked loop 1(CL series only) - \arg RCU_PLL2_CK: phase locked loop 2(CL series only) - \param[out] none - \retval none -*/ -void rcu_osci_on(rcu_osci_type_enum osci) -{ - RCU_REG_VAL(osci) |= BIT(RCU_BIT_POS(osci)); -} - -/*! - \brief turn off the oscillator - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) - \arg RCU_IRC48M: internal 48M RC oscillators(IRC48M) - \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) - \arg RCU_PLL_CK: phase locked loop(PLL) - \arg RCU_PLL1_CK: phase locked loop 1(CL series only) - \arg RCU_PLL2_CK: phase locked loop 2(CL series only) - \param[out] none - \retval none -*/ -void rcu_osci_off(rcu_osci_type_enum osci) -{ - RCU_REG_VAL(osci) &= ~BIT(RCU_BIT_POS(osci)); -} - -/*! - \brief enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \param[out] none - \retval none -*/ -void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci) -{ - uint32_t reg; - - switch(osci){ - /* enable HXTAL to bypass mode */ - case RCU_HXTAL: - reg = RCU_CTL; - RCU_CTL &= ~RCU_CTL_HXTALEN; - RCU_CTL = (reg | RCU_CTL_HXTALBPS); - break; - /* enable LXTAL to bypass mode */ - case RCU_LXTAL: - reg = RCU_BDCTL; - RCU_BDCTL &= ~RCU_BDCTL_LXTALEN; - RCU_BDCTL = (reg | RCU_BDCTL_LXTALBPS); - break; - case RCU_IRC8M: - case RCU_IRC48M: - case RCU_IRC40K: - case RCU_PLL_CK: -#ifdef GD32F30X_CL - case RCU_PLL1_CK: - case RCU_PLL2_CK: -#endif /* GD32F30X_CL */ - break; - default: - break; - } -} - -/*! - \brief disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it - \param[in] osci: oscillator types, refer to rcu_osci_type_enum - only one parameter can be selected which is shown as below: - \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) - \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) - \param[out] none - \retval none -*/ -void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci) -{ - uint32_t reg; - - switch(osci){ - /* disable HXTAL to bypass mode */ - case RCU_HXTAL: - reg = RCU_CTL; - RCU_CTL &= ~RCU_CTL_HXTALEN; - RCU_CTL = (reg & ~RCU_CTL_HXTALBPS); - break; - /* disable LXTAL to bypass mode */ - case RCU_LXTAL: - reg = RCU_BDCTL; - RCU_BDCTL &= ~RCU_BDCTL_LXTALEN; - RCU_BDCTL = (reg & ~RCU_BDCTL_LXTALBPS); - break; - case RCU_IRC8M: - case RCU_IRC48M: - case RCU_IRC40K: - case RCU_PLL_CK: -#ifdef GD32F30X_CL - case RCU_PLL1_CK: - case RCU_PLL2_CK: -#endif /* GD32F30X_CL */ - break; - default: - break; - } -} - -/*! - \brief enable the HXTAL clock monitor - \param[in] none - \param[out] none - \retval none -*/ - -void rcu_hxtal_clock_monitor_enable(void) -{ - RCU_CTL |= RCU_CTL_CKMEN; -} - -/*! - \brief disable the HXTAL clock monitor - \param[in] none - \param[out] none - \retval none -*/ -void rcu_hxtal_clock_monitor_disable(void) -{ - RCU_CTL &= ~RCU_CTL_CKMEN; -} - -/*! - \brief set the IRC8M adjust value - \param[in] irc8m_adjval: IRC8M adjust value, must be between 0 and 0x1F - \arg 0x00 - 0x1F - \param[out] none - \retval none -*/ -void rcu_irc8m_adjust_value_set(uint32_t irc8m_adjval) -{ - uint32_t reg; - - reg = RCU_CTL; - /* reset the IRC8MADJ bits and set according to irc8m_adjval */ - reg &= ~RCU_CTL_IRC8MADJ; - RCU_CTL = (reg | ((irc8m_adjval & RCU_IRC8M_ADJUST_MASK) << RCU_IRC8M_ADJUST_OFFSET)); -} - -/*! - \brief deep-sleep mode voltage select - \param[in] dsvol: deep sleep mode voltage - only one parameter can be selected which is shown as below: - \arg RCU_DEEPSLEEP_V_1_0: the core voltage is 1.0V - \arg RCU_DEEPSLEEP_V_0_9: the core voltage is 0.9V - \arg RCU_DEEPSLEEP_V_0_8: the core voltage is 0.8V - \arg RCU_DEEPSLEEP_V_0_7: the core voltage is 0.7V - \param[out] none - \retval none -*/ -void rcu_deepsleep_voltage_set(uint32_t dsvol) -{ - dsvol &= RCU_DSV_DSLPVS; - RCU_DSV = dsvol; -} - -/*! - \brief get the system clock, bus and peripheral clock frequency - \param[in] clock: the clock frequency which to get - only one parameter can be selected which is shown as below: - \arg CK_SYS: system clock frequency - \arg CK_AHB: AHB clock frequency - \arg CK_APB1: APB1 clock frequency - \arg CK_APB2: APB2 clock frequency - \param[out] none - \retval clock frequency of system, AHB, APB1, APB2 -*/ -uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock) -{ - uint32_t sws, ck_freq = 0U; - uint32_t cksys_freq, ahb_freq, apb1_freq, apb2_freq; - uint32_t pllsel, pllpresel, predv0sel, pllmf,ck_src, idx, clk_exp; -#ifdef GD32F30X_CL - uint32_t predv0, predv1, pll1mf; -#endif /* GD32F30X_CL */ - - /* exponent of AHB, APB1 and APB2 clock divider */ - uint8_t ahb_exp[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - uint8_t apb1_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4}; - uint8_t apb2_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4}; - - sws = GET_BITS(RCU_CFG0, 2, 3); - switch(sws){ - /* IRC8M is selected as CK_SYS */ - case SEL_IRC8M: - cksys_freq = IRC8M_VALUE; - break; - /* HXTAL is selected as CK_SYS */ - case SEL_HXTAL: - cksys_freq = HXTAL_VALUE; - break; - /* PLL is selected as CK_SYS */ - case SEL_PLL: - /* PLL clock source selection, HXTAL, IRC48M or IRC8M/2 */ - pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL); - - if(RCU_PLLSRC_HXTAL_IRC48M == pllsel) { - /* PLL clock source is HXTAL or IRC48M */ - pllpresel = (RCU_CFG1 & RCU_CFG1_PLLPRESEL); - - if(RCU_PLLPRESRC_HXTAL == pllpresel){ - /* PLL clock source is HXTAL */ - ck_src = HXTAL_VALUE; - }else{ - /* PLL clock source is IRC48 */ - ck_src = IRC48M_VALUE; - } - -#if (defined(GD32F30X_HD) || defined(GD32F30X_XD)) - predv0sel = (RCU_CFG0 & RCU_CFG0_PREDV0); - /* PREDV0 input source clock divided by 2 */ - if(RCU_CFG0_PREDV0 == predv0sel){ - ck_src = HXTAL_VALUE/2U; - } -#elif defined(GD32F30X_CL) - predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL); - /* source clock use PLL1 */ - if(RCU_PREDV0SRC_CKPLL1 == predv0sel){ - predv1 = ((RCU_CFG1 & RCU_CFG1_PREDV1) >> RCU_CFG1_PREDV1_OFFSET) + 1U; - pll1mf = (uint32_t)((RCU_CFG1 & RCU_CFG1_PLL1MF) >> RCU_CFG1_PLL1MF_OFFSET) + 2U; - if(17U == pll1mf){ - pll1mf = 20U; - } - ck_src = (ck_src/predv1)*pll1mf; - } - predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U; - ck_src /= predv0; -#endif /* GD32F30X_HD and GD32F30X_XD */ - }else{ - /* PLL clock source is IRC8M/2 */ - ck_src = IRC8M_VALUE/2U; - } - - /* PLL multiplication factor */ - pllmf = GET_BITS(RCU_CFG0, 18, 21); - if((RCU_CFG0 & RCU_CFG0_PLLMF_4)){ - pllmf |= 0x10U; - } - if((RCU_CFG0 & RCU_CFG0_PLLMF_5)){ - pllmf |= 0x20U; - } - if(pllmf < 15U){ - pllmf += 2U; - }else if((pllmf >= 15U) && (pllmf <= 62U)){ - pllmf += 1U; - }else{ - pllmf = 63U; - } - cksys_freq = ck_src*pllmf; - #ifdef GD32F30X_CL - if(15U == pllmf){ - cksys_freq = ck_src*6U + ck_src/2U; - } - #endif /* GD32F30X_CL */ - - break; - /* IRC8M is selected as CK_SYS */ - default: - cksys_freq = IRC8M_VALUE; - break; - } - - /* calculate AHB clock frequency */ - idx = GET_BITS(RCU_CFG0, 4, 7); - clk_exp = ahb_exp[idx]; - ahb_freq = cksys_freq >> clk_exp; - - /* calculate APB1 clock frequency */ - idx = GET_BITS(RCU_CFG0, 8, 10); - clk_exp = apb1_exp[idx]; - apb1_freq = ahb_freq >> clk_exp; - - /* calculate APB2 clock frequency */ - idx = GET_BITS(RCU_CFG0, 11, 13); - clk_exp = apb2_exp[idx]; - apb2_freq = ahb_freq >> clk_exp; - - /* return the clocks frequency */ - switch(clock){ - case CK_SYS: - ck_freq = cksys_freq; - break; - case CK_AHB: - ck_freq = ahb_freq; - break; - case CK_APB1: - ck_freq = apb1_freq; - break; - case CK_APB2: - ck_freq = apb2_freq; - break; - default: - break; - } - return ck_freq; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_rtc.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_rtc.c deleted file mode 100644 index b6e323b..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_rtc.c +++ /dev/null @@ -1,230 +0,0 @@ -/*! - \file gd32f30x_rtc.c - \brief RTC driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - - -#include "gd32f30x_rtc.h" - -/*! - \brief enable RTC interrupt - \param[in] interrupt: specify which interrupt to enbale - \arg RTC_INT_SECOND: second interrupt - \arg RTC_INT_ALARM: alarm interrupt - \arg RTC_INT_OVERFLOW: overflow interrupt - \param[out] none - \retval none -*/ -void rtc_interrupt_enable(uint32_t interrupt) -{ - RTC_INTEN |= interrupt; -} - -/*! - \brief disable RTC interrupt - \param[in] interrupt: specify which interrupt to disbale - \arg RTC_INT_SECOND: second interrupt - \arg RTC_INT_ALARM: alarm interrupt - \arg RTC_INT_OVERFLOW: overflow interrupt - \param[out] none - \retval none -*/ -void rtc_interrupt_disable(uint32_t interrupt) -{ - RTC_INTEN &= ~interrupt; -} - -/*! - \brief enter RTC configuration mode - \param[in] none - \param[out] none - \retval none -*/ -void rtc_configuration_mode_enter(void) -{ - RTC_CTL |= RTC_CTL_CMF; -} - -/*! - \brief exit RTC configuration mode - \param[in] none - \param[out] none - \retval none -*/ -void rtc_configuration_mode_exit(void) -{ - RTC_CTL &= ~RTC_CTL_CMF; -} - -/*! - \brief wait RTC last write operation finished flag set - \param[in] none - \param[out] none - \retval none -*/ -void rtc_lwoff_wait(void) -{ - /* loop until LWOFF flag is set */ - while (RESET == (RTC_CTL & RTC_CTL_LWOFF)){ - } -} - -/*! - \brief wait RTC registers synchronized flag set - \param[in] none - \param[out] none - \retval none -*/ -void rtc_register_sync_wait(void) -{ - /* clear RSYNF flag */ - RTC_CTL &= ~RTC_CTL_RSYNF; - /* loop until RSYNF flag is set */ - while (RESET == (RTC_CTL & RTC_CTL_RSYNF)){ - } -} - -/*! - \brief get RTC counter value - \param[in] none - \param[out] none - \retval RTC counter value -*/ -uint32_t rtc_counter_get(void) -{ - uint32_t temp = 0x0U; - temp = RTC_CNTL; - temp |= (RTC_CNTH << 16); - return temp; -} - -/*! - \brief set RTC counter value - \param[in] cnt: RTC counter value - \param[out] none - \retval none -*/ -void rtc_counter_set(uint32_t cnt) -{ - rtc_configuration_mode_enter(); - /* set the RTC counter high bits */ - RTC_CNTH = cnt >> 16; - /* set the RTC counter low bits */ - RTC_CNTL = (cnt & RTC_LOW_VALUE); - rtc_configuration_mode_exit(); -} - -/*! - \brief set RTC prescaler value - \param[in] psc: RTC prescaler value - \param[out] none - \retval none -*/ -void rtc_prescaler_set(uint32_t psc) -{ - rtc_configuration_mode_enter(); - /* set the RTC prescaler high bits */ - RTC_PSCH = (psc & RTC_HIGH_VALUE) >> 16; - /* set the RTC prescaler low bits */ - RTC_PSCL = (psc & RTC_LOW_VALUE); - rtc_configuration_mode_exit(); -} - -/*! - \brief set RTC alarm value - \param[in] alarm: RTC alarm value - \param[out] none - \retval none -*/ -void rtc_alarm_config(uint32_t alarm) -{ - rtc_configuration_mode_enter(); - /* set the alarm high bits */ - RTC_ALRMH = alarm >> 16; - /* set the alarm low bits */ - RTC_ALRML = (alarm & RTC_LOW_VALUE); - rtc_configuration_mode_exit(); -} - -/*! - \brief get RTC divider value - \param[in] none - \param[out] none - \retval RTC divider value -*/ -uint32_t rtc_divider_get(void) -{ - uint32_t temp = 0x00U; - temp = (RTC_DIVH & RTC_DIVH_DIV) << 16; - temp |= RTC_DIVL; - return temp; -} - -/*! - \brief get RTC flag status - \param[in] flag: specify which flag status to get - \arg RTC_FLAG_SECOND: second interrupt flag - \arg RTC_FLAG_ALARM: alarm interrupt flag - \arg RTC_FLAG_OVERFLOW: overflow interrupt flag - \arg RTC_FLAG_RSYN: registers synchronized flag - \arg RTC_FLAG_LWOF: last write operation finished flag - \param[out] none - \retval SET or RESET -*/ -FlagStatus rtc_flag_get(uint32_t flag) -{ - if(RESET != (RTC_CTL & flag)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear RTC flag status - \param[in] flag: specify which flag status to clear - \arg RTC_FLAG_SECOND: second interrupt flag - \arg RTC_FLAG_ALARM: alarm interrupt flag - \arg RTC_FLAG_OVERFLOW: overflow interrupt flag - \arg RTC_FLAG_RSYN: registers synchronized flag - \param[out] none - \retval none -*/ -void rtc_flag_clear(uint32_t flag) -{ - /* clear RTC flag */ - RTC_CTL &= ~flag; -} - diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_sdio.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_sdio.c deleted file mode 100644 index ab95caf..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_sdio.c +++ /dev/null @@ -1,809 +0,0 @@ -/*! - \file gd32f30x_sdio.c - \brief SDIO driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_sdio.h" - -#define DEFAULT_RESET_VALUE 0x00000000U - -/*! - \brief deinitialize the SDIO - \param[in] none - \param[out] none - \retval none -*/ -void sdio_deinit(void) -{ - SDIO_PWRCTL = DEFAULT_RESET_VALUE; - SDIO_CLKCTL = DEFAULT_RESET_VALUE; - SDIO_CMDAGMT = DEFAULT_RESET_VALUE; - SDIO_CMDCTL = DEFAULT_RESET_VALUE; - SDIO_DATATO = DEFAULT_RESET_VALUE; - SDIO_DATALEN = DEFAULT_RESET_VALUE; - SDIO_DATACTL = DEFAULT_RESET_VALUE; - SDIO_INTC = DEFAULT_RESET_VALUE; - SDIO_INTEN = DEFAULT_RESET_VALUE; -} - -/*! - \brief configure the SDIO clock - \param[in] clock_edge: SDIO_CLK clock edge - only one parameter can be selected which is shown as below: - \arg SDIO_SDIOCLKEDGE_RISING: select the rising edge of the SDIOCLK to generate SDIO_CLK - \arg SDIO_SDIOCLKEDGE_FALLING: select the falling edge of the SDIOCLK to generate SDIO_CLK - \param[in] clock_bypass: clock bypass - only one parameter can be selected which is shown as below: - \arg SDIO_CLOCKBYPASS_ENABLE: clock bypass - \arg SDIO_CLOCKBYPASS_DISABLE: no bypass - \param[in] clock_powersave: SDIO_CLK clock dynamic switch on/off for power saving - only one parameter can be selected which is shown as below: - \arg SDIO_CLOCKPWRSAVE_ENABLE: SDIO_CLK closed when bus is idle - \arg SDIO_CLOCKPWRSAVE_DISABLE: SDIO_CLK clock is always on - \param[in] clock_division: clock division, less than 512 - \param[out] none - \retval none -*/ -void sdio_clock_config(uint32_t clock_edge, uint32_t clock_bypass, uint32_t clock_powersave, uint16_t clock_division) -{ - uint32_t clock_config = 0U; - clock_config = SDIO_CLKCTL; - /* reset the CLKEDGE, CLKBYP, CLKPWRSAV, DIV */ - clock_config &= ~(SDIO_CLKCTL_CLKEDGE | SDIO_CLKCTL_CLKBYP | SDIO_CLKCTL_CLKPWRSAV | SDIO_CLKCTL_DIV8 | SDIO_CLKCTL_DIV); - /* if the clock division is greater or equal to 256, set the DIV[8] */ - if(clock_division >= 256U){ - clock_config |= SDIO_CLKCTL_DIV8; - clock_division -= 256U; - } - /* configure the SDIO_CLKCTL according to the parameters */ - clock_config |= (clock_edge | clock_bypass | clock_powersave | clock_division); - SDIO_CLKCTL = clock_config; -} - -/*! - \brief enable hardware clock control - \param[in] none - \param[out] none - \retval none -*/ -void sdio_hardware_clock_enable(void) -{ - SDIO_CLKCTL |= SDIO_CLKCTL_HWCLKEN; -} - -/*! - \brief disable hardware clock control - \param[in] none - \param[out] none - \retval none -*/ -void sdio_hardware_clock_disable(void) -{ - SDIO_CLKCTL &= ~SDIO_CLKCTL_HWCLKEN; -} - -/*! - \brief set different SDIO card bus mode - \param[in] bus_mode: SDIO card bus mode - only one parameter can be selected which is shown as below: - \arg SDIO_BUSMODE_1BIT: 1-bit SDIO card bus mode - \arg SDIO_BUSMODE_4BIT: 4-bit SDIO card bus mode - \arg SDIO_BUSMODE_8BIT: 8-bit SDIO card bus mode - \param[out] none - \retval none -*/ -void sdio_bus_mode_set(uint32_t bus_mode) -{ - /* reset the SDIO card bus mode bits and set according to bus_mode */ - SDIO_CLKCTL &= ~SDIO_CLKCTL_BUSMODE; - SDIO_CLKCTL |= bus_mode; -} - -/*! - \brief set the SDIO power state - \param[in] power_state: SDIO power state - only one parameter can be selected which is shown as below: - \arg SDIO_POWER_ON: SDIO power on - \arg SDIO_POWER_OFF: SDIO power off - \param[out] none - \retval none -*/ -void sdio_power_state_set(uint32_t power_state) -{ - SDIO_PWRCTL = power_state; -} - -/*! - \brief get the SDIO power state - \param[in] none - \param[out] none - \retval SDIO power state - \arg SDIO_POWER_ON: SDIO power on - \arg SDIO_POWER_OFF: SDIO power off -*/ -uint32_t sdio_power_state_get(void) -{ - return SDIO_PWRCTL; -} - -/*! - \brief enable SDIO_CLK clock output - \param[in] none - \param[out] none - \retval none -*/ -void sdio_clock_enable(void) -{ - SDIO_CLKCTL |= SDIO_CLKCTL_CLKEN; -} - -/*! - \brief disable SDIO_CLK clock output - \param[in] none - \param[out] none - \retval none -*/ -void sdio_clock_disable(void) -{ - SDIO_CLKCTL &= ~SDIO_CLKCTL_CLKEN; -} - -/*! - \brief configure the command and response - \param[in] cmd_index: command index, refer to the related specifications - \param[in] cmd_argument: command argument, refer to the related specifications - \param[in] response_type: response type - only one parameter can be selected which is shown as below: - \arg SDIO_RESPONSETYPE_NO: no response - \arg SDIO_RESPONSETYPE_SHORT: short response - \arg SDIO_RESPONSETYPE_LONG: long response - \param[out] none - \retval none -*/ -void sdio_command_response_config(uint32_t cmd_index, uint32_t cmd_argument, uint32_t response_type) -{ - uint32_t cmd_config = 0U; - /* reset the command index, command argument and response type */ - SDIO_CMDAGMT &= ~SDIO_CMDAGMT_CMDAGMT; - SDIO_CMDAGMT = cmd_argument; - cmd_config = SDIO_CMDCTL; - cmd_config &= ~(SDIO_CMDCTL_CMDIDX | SDIO_CMDCTL_CMDRESP); - /* configure SDIO_CMDCTL and SDIO_CMDAGMT according to the parameters */ - cmd_config |= (cmd_index | response_type); - SDIO_CMDCTL = cmd_config; -} - -/*! - \brief set the command state machine wait type - \param[in] wait_type: wait type - only one parameter can be selected which is shown as below: - \arg SDIO_WAITTYPE_NO: not wait interrupt - \arg SDIO_WAITTYPE_INTERRUPT: wait interrupt - \arg SDIO_WAITTYPE_DATAEND: wait the end of data transfer - \param[out] none - \retval none -*/ -void sdio_wait_type_set(uint32_t wait_type) -{ - /* reset INTWAIT and WAITDEND */ - SDIO_CMDCTL &= ~(SDIO_CMDCTL_INTWAIT | SDIO_CMDCTL_WAITDEND); - /* set the wait type according to wait_type */ - SDIO_CMDCTL |= wait_type; -} - -/*! - \brief enable the CSM(command state machine) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_csm_enable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_CSMEN; -} - -/*! - \brief disable the CSM(command state machine) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_csm_disable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_CSMEN; -} - -/*! - \brief get the last response command index - \param[in] none - \param[out] none - \retval last response command index -*/ -uint8_t sdio_command_index_get(void) -{ - return (uint8_t)SDIO_RSPCMDIDX; -} - -/*! - \brief get the response for the last received command - \param[in] responsex: SDIO response - only one parameter can be selected which is shown as below: - \arg SDIO_RESPONSE0: card response[31:0]/card response[127:96] - \arg SDIO_RESPONSE1: card response[95:64] - \arg SDIO_RESPONSE2: card response[63:32] - \arg SDIO_RESPONSE3: card response[31:1], plus bit 0 - \param[out] none - \retval response for the last received command -*/ -uint32_t sdio_response_get(uint32_t responsex) -{ - uint32_t resp_content = 0U; - switch(responsex){ - case SDIO_RESPONSE0: - resp_content = SDIO_RESP0; - break; - case SDIO_RESPONSE1: - resp_content = SDIO_RESP1; - break; - case SDIO_RESPONSE2: - resp_content = SDIO_RESP2; - break; - case SDIO_RESPONSE3: - resp_content = SDIO_RESP3; - break; - default: - break; - } - return resp_content; -} - -/*! - \brief configure the data timeout, data length and data block size - \param[in] data_timeout: data timeout period in card bus clock periods - \param[in] data_length: number of data bytes to be transferred - \param[in] data_blocksize: size of data block for block transfer - only one parameter can be selected which is shown as below: - \arg SDIO_DATABLOCKSIZE_1BYTE: block size = 1 byte - \arg SDIO_DATABLOCKSIZE_2BYTES: block size = 2 bytes - \arg SDIO_DATABLOCKSIZE_4BYTES: block size = 4 bytes - \arg SDIO_DATABLOCKSIZE_8BYTES: block size = 8 bytes - \arg SDIO_DATABLOCKSIZE_16BYTES: block size = 16 bytes - \arg SDIO_DATABLOCKSIZE_32BYTES: block size = 32 bytes - \arg SDIO_DATABLOCKSIZE_64BYTES: block size = 64 bytes - \arg SDIO_DATABLOCKSIZE_128BYTES: block size = 128 bytes - \arg SDIO_DATABLOCKSIZE_256BYTES: block size = 256 bytes - \arg SDIO_DATABLOCKSIZE_512BYTES: block size = 512 bytes - \arg SDIO_DATABLOCKSIZE_1024BYTES: block size = 1024 bytes - \arg SDIO_DATABLOCKSIZE_2048BYTES: block size = 2048 bytes - \arg SDIO_DATABLOCKSIZE_4096BYTES: block size = 4096 bytes - \arg SDIO_DATABLOCKSIZE_8192BYTES: block size = 8192 bytes - \arg SDIO_DATABLOCKSIZE_16384BYTES: block size = 16384 bytes - \param[out] none - \retval none -*/ -void sdio_data_config(uint32_t data_timeout, uint32_t data_length, uint32_t data_blocksize) -{ - /* reset data timeout, data length and data block size */ - SDIO_DATATO &= ~SDIO_DATATO_DATATO; - SDIO_DATALEN &= ~SDIO_DATALEN_DATALEN; - SDIO_DATACTL &= ~SDIO_DATACTL_BLKSZ; - /* configure the related parameters of data */ - SDIO_DATATO = data_timeout; - SDIO_DATALEN = data_length; - SDIO_DATACTL |= data_blocksize; -} - -/*! - \brief configure the data transfer mode and direction - \param[in] transfer_mode: mode of data transfer - only one parameter can be selected which is shown as below: - \arg SDIO_TRANSMODE_BLOCK: block transfer - \arg SDIO_TRANSMODE_STREAM: stream transfer or SDIO multibyte transfer - \param[in] transfer_direction: data transfer direction, read or write - only one parameter can be selected which is shown as below: - \arg SDIO_TRANSDIRECTION_TOCARD: write data to card - \arg SDIO_TRANSDIRECTION_TOSDIO: read data from card - \param[out] none - \retval none -*/ -void sdio_data_transfer_config(uint32_t transfer_mode, uint32_t transfer_direction) -{ - uint32_t data_trans = 0U; - /* reset the data transfer mode, transfer direction and set according to the parameters */ - data_trans = SDIO_DATACTL; - data_trans &= ~(SDIO_DATACTL_TRANSMOD | SDIO_DATACTL_DATADIR); - data_trans |= (transfer_mode | transfer_direction); - SDIO_DATACTL = data_trans; -} - -/*! - \brief enable the DSM(data state machine) for data transfer - \param[in] none - \param[out] none - \retval none -*/ -void sdio_dsm_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_DATAEN; -} - -/*! - \brief disable the DSM(data state machine) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_dsm_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_DATAEN; -} - -/*! - \brief write data(one word) to the transmit FIFO - \param[in] data: 32-bit data write to card - \param[out] none - \retval none -*/ -void sdio_data_write(uint32_t data) -{ - SDIO_FIFO = data; -} - -/*! - \brief read data(one word) from the receive FIFO - \param[in] none - \param[out] none - \retval received data -*/ -uint32_t sdio_data_read(void) -{ - return SDIO_FIFO; -} - -/*! - \brief get the number of remaining data bytes to be transferred to card - \param[in] none - \param[out] none - \retval number of remaining data bytes to be transferred -*/ -uint32_t sdio_data_counter_get(void) -{ - return SDIO_DATACNT; -} - -/*! - \brief get the number of words remaining to be written or read from FIFO - \param[in] none - \param[out] none - \retval remaining number of words -*/ -uint32_t sdio_fifo_counter_get(void) -{ - return SDIO_FIFOCNT; -} - -/*! - \brief enable the DMA request for SDIO - \param[in] none - \param[out] none - \retval none -*/ -void sdio_dma_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_DMAEN; -} - -/*! - \brief disable the DMA request for SDIO - \param[in] none - \param[out] none - \retval none -*/ -void sdio_dma_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_DMAEN; -} - -/*! - \brief get the flags state of SDIO - \param[in] flag: flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_FLAG_CCRCERR: command response received (CRC check failed) flag - \arg SDIO_FLAG_DTCRCERR: data block sent/received (CRC check failed) flag - \arg SDIO_FLAG_CMDTMOUT: command response timeout flag - \arg SDIO_FLAG_DTTMOUT: data timeout flag - \arg SDIO_FLAG_TXURE: transmit FIFO underrun error occurs flag - \arg SDIO_FLAG_RXORE: received FIFO overrun error occurs flag - \arg SDIO_FLAG_CMDRECV: command response received (CRC check passed) flag - \arg SDIO_FLAG_CMDSEND: command sent (no response required) flag - \arg SDIO_FLAG_DTEND: data end (data counter, SDIO_DATACNT, is zero) flag - \arg SDIO_FLAG_STBITE: start bit error in the bus flag - \arg SDIO_FLAG_DTBLKEND: data block sent/received (CRC check passed) flag - \arg SDIO_FLAG_CMDRUN: command transmission in progress flag - \arg SDIO_FLAG_TXRUN: data transmission in progress flag - \arg SDIO_FLAG_RXRUN: data reception in progress flag - \arg SDIO_FLAG_TFH: transmit FIFO is half empty flag: at least 8 words can be written into the FIFO - \arg SDIO_FLAG_RFH: receive FIFO is half full flag: at least 8 words can be read in the FIFO - \arg SDIO_FLAG_TFF: transmit FIFO is full flag - \arg SDIO_FLAG_RFF: receive FIFO is full flag - \arg SDIO_FLAG_TFE: transmit FIFO is empty flag - \arg SDIO_FLAG_RFE: receive FIFO is empty flag - \arg SDIO_FLAG_TXDTVAL: data is valid in transmit FIFO flag - \arg SDIO_FLAG_RXDTVAL: data is valid in receive FIFO flag - \arg SDIO_FLAG_SDIOINT: SD I/O interrupt received flag - \arg SDIO_FLAG_ATAEND: CE-ATA command completion signal received (only for CMD61) flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus sdio_flag_get(uint32_t flag) -{ - if(RESET != (SDIO_STAT & flag)){ - return SET; - } - return RESET; -} - -/*! - \brief clear the pending flags of SDIO - \param[in] flag: flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_FLAG_CCRCERR: command response received (CRC check failed) flag - \arg SDIO_FLAG_DTCRCERR: data block sent/received (CRC check failed) flag - \arg SDIO_FLAG_CMDTMOUT: command response timeout flag - \arg SDIO_FLAG_DTTMOUT: data timeout flag - \arg SDIO_FLAG_TXURE: transmit FIFO underrun error occurs flag - \arg SDIO_FLAG_RXORE: received FIFO overrun error occurs flag - \arg SDIO_FLAG_CMDRECV: command response received (CRC check passed) flag - \arg SDIO_FLAG_CMDSEND: command sent (no response required) flag - \arg SDIO_FLAG_DTEND: data end (data counter, SDIO_DATACNT, is zero) flag - \arg SDIO_FLAG_STBITE: start bit error in the bus flag - \arg SDIO_FLAG_DTBLKEND: data block sent/received (CRC check passed) flag - \arg SDIO_FLAG_SDIOINT: SD I/O interrupt received flag - \arg SDIO_FLAG_ATAEND: CE-ATA command completion signal received (only for CMD61) flag - \param[out] none - \retval none -*/ -void sdio_flag_clear(uint32_t flag) -{ - SDIO_INTC = flag; -} - -/*! - \brief enable the SDIO interrupt - \param[in] int_flag: interrupt flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_INT_CCRCERR: SDIO CCRCERR interrupt - \arg SDIO_INT_DTCRCERR: SDIO DTCRCERR interrupt - \arg SDIO_INT_CMDTMOUT: SDIO CMDTMOUT interrupt - \arg SDIO_INT_DTTMOUT: SDIO DTTMOUT interrupt - \arg SDIO_INT_TXURE: SDIO TXURE interrupt - \arg SDIO_INT_RXORE: SDIO RXORE interrupt - \arg SDIO_INT_CMDRECV: SDIO CMDRECV interrupt - \arg SDIO_INT_CMDSEND: SDIO CMDSEND interrupt - \arg SDIO_INT_DTEND: SDIO DTEND interrupt - \arg SDIO_INT_STBITE: SDIO STBITE interrupt - \arg SDIO_INT_DTBLKEND: SDIO DTBLKEND interrupt - \arg SDIO_INT_CMDRUN: SDIO CMDRUN interrupt - \arg SDIO_INT_TXRUN: SDIO TXRUN interrupt - \arg SDIO_INT_RXRUN: SDIO RXRUN interrupt - \arg SDIO_INT_TFH: SDIO TFH interrupt - \arg SDIO_INT_RFH: SDIO RFH interrupt - \arg SDIO_INT_TFF: SDIO TFF interrupt - \arg SDIO_INT_RFF: SDIO RFF interrupt - \arg SDIO_INT_TFE: SDIO TFE interrupt - \arg SDIO_INT_RFE: SDIO RFE interrupt - \arg SDIO_INT_TXDTVAL: SDIO TXDTVAL interrupt - \arg SDIO_INT_RXDTVAL: SDIO RXDTVAL interrupt - \arg SDIO_INT_SDIOINT: SDIO SDIOINT interrupt - \arg SDIO_INT_ATAEND: SDIO ATAEND interrupt - \param[out] none - \retval none -*/ -void sdio_interrupt_enable(uint32_t int_flag) -{ - SDIO_INTEN |= int_flag; -} - -/*! - \brief disable the SDIO interrupt - \param[in] int_flag: interrupt flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_INT_CCRCERR: SDIO CCRCERR interrupt - \arg SDIO_INT_DTCRCERR: SDIO DTCRCERR interrupt - \arg SDIO_INT_CMDTMOUT: SDIO CMDTMOUT interrupt - \arg SDIO_INT_DTTMOUT: SDIO DTTMOUT interrupt - \arg SDIO_INT_TXURE: SDIO TXURE interrupt - \arg SDIO_INT_RXORE: SDIO RXORE interrupt - \arg SDIO_INT_CMDRECV: SDIO CMDRECV interrupt - \arg SDIO_INT_CMDSEND: SDIO CMDSEND interrupt - \arg SDIO_INT_DTEND: SDIO DTEND interrupt - \arg SDIO_INT_STBITE: SDIO STBITE interrupt - \arg SDIO_INT_DTBLKEND: SDIO DTBLKEND interrupt - \arg SDIO_INT_CMDRUN: SDIO CMDRUN interrupt - \arg SDIO_INT_TXRUN: SDIO TXRUN interrupt - \arg SDIO_INT_RXRUN: SDIO RXRUN interrupt - \arg SDIO_INT_TFH: SDIO TFH interrupt - \arg SDIO_INT_RFH: SDIO RFH interrupt - \arg SDIO_INT_TFF: SDIO TFF interrupt - \arg SDIO_INT_RFF: SDIO RFF interrupt - \arg SDIO_INT_TFE: SDIO TFE interrupt - \arg SDIO_INT_RFE: SDIO RFE interrupt - \arg SDIO_INT_TXDTVAL: SDIO TXDTVAL interrupt - \arg SDIO_INT_RXDTVAL: SDIO RXDTVAL interrupt - \arg SDIO_INT_SDIOINT: SDIO SDIOINT interrupt - \arg SDIO_INT_ATAEND: SDIO ATAEND interrupt - \param[out] none - \retval none -*/ -void sdio_interrupt_disable(uint32_t int_flag) -{ - SDIO_INTEN &= ~int_flag; -} - -/*! - \brief get the interrupt flags state of SDIO - \param[in] int_flag: interrupt flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_INT_FLAG_CCRCERR: SDIO CCRCERR interrupt flag - \arg SDIO_INT_FLAG_DTCRCERR: SDIO DTCRCERR interrupt flag - \arg SDIO_INT_FLAG_CMDTMOUT: SDIO CMDTMOUT interrupt flag - \arg SDIO_INT_FLAG_DTTMOUT: SDIO DTTMOUT interrupt flag - \arg SDIO_INT_FLAG_TXURE: SDIO TXURE interrupt flag - \arg SDIO_INT_FLAG_RXORE: SDIO RXORE interrupt flag - \arg SDIO_INT_FLAG_CMDRECV: SDIO CMDRECV interrupt flag - \arg SDIO_INT_FLAG_CMDSEND: SDIO CMDSEND interrupt flag - \arg SDIO_INT_FLAG_DTEND: SDIO DTEND interrupt flag - \arg SDIO_INT_FLAG_STBITE: SDIO STBITE interrupt flag - \arg SDIO_INT_FLAG_DTBLKEND: SDIO DTBLKEND interrupt flag - \arg SDIO_INT_FLAG_CMDRUN: SDIO CMDRUN interrupt flag - \arg SDIO_INT_FLAG_TXRUN: SDIO TXRUN interrupt flag - \arg SDIO_INT_FLAG_RXRUN: SDIO RXRUN interrupt flag - \arg SDIO_INT_FLAG_TFH: SDIO TFH interrupt flag - \arg SDIO_INT_FLAG_RFH: SDIO RFH interrupt flag - \arg SDIO_INT_FLAG_TFF: SDIO TFF interrupt flag - \arg SDIO_INT_FLAG_RFF: SDIO RFF interrupt flag - \arg SDIO_INT_FLAG_TFE: SDIO TFE interrupt flag - \arg SDIO_INT_FLAG_RFE: SDIO RFE interrupt flag - \arg SDIO_INT_FLAG_TXDTVAL: SDIO TXDTVAL interrupt flag - \arg SDIO_INT_FLAG_RXDTVAL: SDIO RXDTVAL interrupt flag - \arg SDIO_INT_FLAG_SDIOINT: SDIO SDIOINT interrupt flag - \arg SDIO_INT_FLAG_ATAEND: SDIO ATAEND interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus sdio_interrupt_flag_get(uint32_t int_flag) -{ - if(RESET != (SDIO_STAT & int_flag)){ - return SET; - } - return RESET; -} - -/*! - \brief clear the interrupt pending flags of SDIO - \param[in] int_flag: interrupt flags state of SDIO - one or more parameters can be selected which are shown as below: - \arg SDIO_INT_FLAG_CCRCERR: command response received (CRC check failed) flag - \arg SDIO_INT_FLAG_DTCRCERR: data block sent/received (CRC check failed) flag - \arg SDIO_INT_FLAG_CMDTMOUT: command response timeout flag - \arg SDIO_INT_FLAG_DTTMOUT: data timeout flag - \arg SDIO_INT_FLAG_TXURE: transmit FIFO underrun error occurs flag - \arg SDIO_INT_FLAG_RXORE: received FIFO overrun error occurs flag - \arg SDIO_INT_FLAG_CMDRECV: command response received (CRC check passed) flag - \arg SDIO_INT_FLAG_CMDSEND: command sent (no response required) flag - \arg SDIO_INT_FLAG_DTEND: data end (data counter, SDIO_DATACNT, is zero) flag - \arg SDIO_INT_FLAG_STBITE: start bit error in the bus flag - \arg SDIO_INT_FLAG_DTBLKEND: data block sent/received (CRC check passed) flag - \arg SDIO_INT_FLAG_SDIOINT: SD I/O interrupt received flag - \arg SDIO_INT_FLAG_ATAEND: CE-ATA command completion signal received (only for CMD61) flag - \param[out] none - \retval none -*/ -void sdio_interrupt_flag_clear(uint32_t int_flag) -{ - SDIO_INTC = int_flag; -} - -/*! - \brief enable the read wait mode(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_readwait_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_RWEN; -} - -/*! - \brief disable the read wait mode(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_readwait_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_RWEN; -} - -/*! - \brief enable the function that stop the read wait process(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_stop_readwait_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_RWSTOP; -} - -/*! - \brief disable the function that stop the read wait process(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_stop_readwait_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_RWSTOP; -} - -/*! - \brief set the read wait type(SD I/O only) - \param[in] readwait_type: SD I/O read wait type - only one parameter can be selected which is shown as below: - \arg SDIO_READWAITTYPE_CLK: read wait control by stopping SDIO_CLK - \arg SDIO_READWAITTYPE_DAT2: read wait control using SDIO_DAT[2] - \param[out] none - \retval none -*/ -void sdio_readwait_type_set(uint32_t readwait_type) -{ - if(SDIO_READWAITTYPE_CLK == readwait_type){ - SDIO_DATACTL |= SDIO_DATACTL_RWTYPE; - }else{ - SDIO_DATACTL &= ~SDIO_DATACTL_RWTYPE; - } -} - -/*! - \brief enable the SD I/O mode specific operation(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_operation_enable(void) -{ - SDIO_DATACTL |= SDIO_DATACTL_IOEN; -} - -/*! - \brief disable the SD I/O mode specific operation(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_operation_disable(void) -{ - SDIO_DATACTL &= ~SDIO_DATACTL_IOEN; -} - -/*! - \brief enable the SD I/O suspend operation(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_suspend_enable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_SUSPEND; -} - -/*! - \brief disable the SD I/O suspend operation(SD I/O only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_suspend_disable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_SUSPEND; -} - -/*! - \brief enable the CE-ATA command(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_command_enable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_ATAEN; -} - -/*! - \brief disable the CE-ATA command(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_command_disable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_ATAEN; -} - -/*! - \brief enable the CE-ATA interrupt(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_interrupt_enable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_NINTEN; -} - -/*! - \brief disable the CE-ATA interrupt(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_interrupt_disable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_NINTEN; -} - -/*! - \brief enable the CE-ATA command completion signal(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_command_completion_enable(void) -{ - SDIO_CMDCTL |= SDIO_CMDCTL_ENCMDC; -} - -/*! - \brief disable the CE-ATA command completion signal(CE-ATA only) - \param[in] none - \param[out] none - \retval none -*/ -void sdio_ceata_command_completion_disable(void) -{ - SDIO_CMDCTL &= ~SDIO_CMDCTL_ENCMDC; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_spi.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_spi.c deleted file mode 100644 index 12e6fda..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_spi.c +++ /dev/null @@ -1,862 +0,0 @@ -/*! - \file gd32f30x_spi.c - \brief SPI driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_spi.h" - -#define SPI_ERROR_HANDLE(s) do{}while(1) - -/* SPI/I2S parameter initialization mask */ -#define SPI_INIT_MASK ((uint32_t)0x00003040U) /*!< SPI parameter initialization mask */ -#define I2S_INIT_MASK ((uint32_t)0x0000F047U) /*!< I2S parameter initialization mask */ - -/* default value */ -#define SPI_I2SPSC_DEFAULT_VALUE ((uint32_t)0x00000002U) /*!< default value of SPI_I2SPSC register */ - -/* I2S clock source selection, multiplication and division mask */ -#define I2S1_CLOCK_SEL ((uint32_t)0x00020000U) /*!< I2S1 clock source selection */ -#define I2S2_CLOCK_SEL ((uint32_t)0x00040000U) /*!< I2S2 clock source selection */ -#define I2S_CLOCK_MUL_MASK ((uint32_t)0x0000F000U) /*!< I2S clock multiplication mask */ -#define I2S_CLOCK_DIV_MASK ((uint32_t)0x000000F0U) /*!< I2S clock division mask */ - -/*! - \brief reset SPI and I2S - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_i2s_deinit(uint32_t spi_periph) -{ - switch(spi_periph){ - case SPI0: - /* reset SPI0 */ - rcu_periph_reset_enable(RCU_SPI0RST); - rcu_periph_reset_disable(RCU_SPI0RST); - break; - case SPI1: - /* reset SPI1 and I2S1 */ - rcu_periph_reset_enable(RCU_SPI1RST); - rcu_periph_reset_disable(RCU_SPI1RST); - break; - case SPI2: - /* reset SPI2 and I2S2 */ - rcu_periph_reset_enable(RCU_SPI2RST); - rcu_periph_reset_disable(RCU_SPI2RST); - break; - default : - break; - } -} - -/*! - \brief initialize the parameters of SPI struct with default values - \param[in] none - \param[out] spi_parameter_struct: the initialized struct spi_parameter_struct pointer - \retval none -*/ -void spi_struct_para_init(spi_parameter_struct *spi_struct) -{ - /* configure the structure with default value */ - spi_struct->device_mode = SPI_SLAVE; - spi_struct->trans_mode = SPI_TRANSMODE_FULLDUPLEX; - spi_struct->frame_size = SPI_FRAMESIZE_8BIT; - spi_struct->nss = SPI_NSS_HARD; - spi_struct->clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE; - spi_struct->prescale = SPI_PSC_2; - spi_struct->endian = SPI_ENDIAN_MSB; -} - -/*! - \brief initialize SPI parameter - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] spi_struct: SPI parameter initialization stuct members of the structure - and the member values are shown as below: - device_mode: SPI_MASTER, SPI_SLAVE - trans_mode: SPI_TRANSMODE_FULLDUPLEX, SPI_TRANSMODE_RECEIVEONLY, - SPI_TRANSMODE_BDRECEIVE, SPI_TRANSMODE_BDTRANSMIT - frame_size: SPI_FRAMESIZE_16BIT, SPI_FRAMESIZE_8BIT - nss: SPI_NSS_SOFT, SPI_NSS_HARD - endian: SPI_ENDIAN_MSB, SPI_ENDIAN_LSB - clock_polarity_phase: SPI_CK_PL_LOW_PH_1EDGE, SPI_CK_PL_HIGH_PH_1EDGE - SPI_CK_PL_LOW_PH_2EDGE, SPI_CK_PL_HIGH_PH_2EDGE - prescale: SPI_PSC_n (n=2,4,8,16,32,64,128,256) - \param[out] none - \retval none -*/ -void spi_init(uint32_t spi_periph, spi_parameter_struct* spi_struct) -{ - uint32_t reg = 0U; - reg = SPI_CTL0(spi_periph); - reg &= SPI_INIT_MASK; - - /* select SPI as master or slave */ - reg |= spi_struct->device_mode; - /* select SPI transfer mode */ - reg |= spi_struct->trans_mode; - /* select SPI frame size */ - reg |= spi_struct->frame_size; - /* select SPI NSS use hardware or software */ - reg |= spi_struct->nss; - /* select SPI LSB or MSB */ - reg |= spi_struct->endian; - /* select SPI polarity and phase */ - reg |= spi_struct->clock_polarity_phase; - /* select SPI prescale to adjust transmit speed */ - reg |= spi_struct->prescale; - - /* write to SPI_CTL0 register */ - SPI_CTL0(spi_periph) = (uint32_t)reg; - - SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SSEL); -} - -/*! - \brief enable SPI - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_enable(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SPIEN; -} - -/*! - \brief disable SPI - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_disable(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SPIEN); -} - -/*! - \brief initialize I2S parameter - \param[in] spi_periph: SPIx(x=1,2) - \param[in] i2s_mode: I2S operation mode - only one parameter can be selected which is shown as below: - \arg I2S_MODE_SLAVETX: I2S slave transmit mode - \arg I2S_MODE_SLAVERX: I2S slave receive mode - \arg I2S_MODE_MASTERTX: I2S master transmit mode - \arg I2S_MODE_MASTERRX: I2S master receive mode - \param[in] i2s_standard: I2S standard - only one parameter can be selected which is shown as below: - \arg I2S_STD_PHILLIPS: I2S phillips standard - \arg I2S_STD_MSB: I2S MSB standard - \arg I2S_STD_LSB: I2S LSB standard - \arg I2S_STD_PCMSHORT: I2S PCM short standard - \arg I2S_STD_PCMLONG: I2S PCM long standard - \param[in] i2s_ckpl: I2S idle state clock polarity - only one parameter can be selected which is shown as below: - \arg I2S_CKPL_LOW: I2S clock polarity low level - \arg I2S_CKPL_HIGH: I2S clock polarity high level - \param[out] none - \retval none -*/ -void i2s_init(uint32_t spi_periph, uint32_t i2s_mode, uint32_t i2s_standard, uint32_t i2s_ckpl) -{ - uint32_t reg= 0U; - reg = SPI_I2SCTL(spi_periph); - reg &= I2S_INIT_MASK; - - /* enable I2S mode */ - reg |= (uint32_t)SPI_I2SCTL_I2SSEL; - /* select I2S mode */ - reg |= (uint32_t)i2s_mode; - /* select I2S standard */ - reg |= (uint32_t)i2s_standard; - /* select I2S polarity */ - reg |= (uint32_t)i2s_ckpl; - - /* write to SPI_I2SCTL register */ - SPI_I2SCTL(spi_periph) = (uint32_t)reg; -} - -/*! - \brief configure I2S prescaler - \param[in] spi_periph: SPIx(x=1,2) - \param[in] i2s_audiosample: I2S audio sample rate - only one parameter can be selected which is shown as below: - \arg I2S_AUDIOSAMPLE_8K: audio sample rate is 8KHz - \arg I2S_AUDIOSAMPLE_11K: audio sample rate is 11KHz - \arg I2S_AUDIOSAMPLE_16K: audio sample rate is 16KHz - \arg I2S_AUDIOSAMPLE_22K: audio sample rate is 22KHz - \arg I2S_AUDIOSAMPLE_32K: audio sample rate is 32KHz - \arg I2S_AUDIOSAMPLE_44K: audio sample rate is 44KHz - \arg I2S_AUDIOSAMPLE_48K: audio sample rate is 48KHz - \arg I2S_AUDIOSAMPLE_96K: audio sample rate is 96KHz - \arg I2S_AUDIOSAMPLE_192K: audio sample rate is 192KHz - \param[in] i2s_frameformat: I2S data length and channel length - only one parameter can be selected which is shown as below: - \arg I2S_FRAMEFORMAT_DT16B_CH16B: I2S data length is 16 bit and channel length is 16 bit - \arg I2S_FRAMEFORMAT_DT16B_CH32B: I2S data length is 16 bit and channel length is 32 bit - \arg I2S_FRAMEFORMAT_DT24B_CH32B: I2S data length is 24 bit and channel length is 32 bit - \arg I2S_FRAMEFORMAT_DT32B_CH32B: I2S data length is 32 bit and channel length is 32 bit - \param[in] i2s_mckout: I2S master clock output - only one parameter can be selected which is shown as below: - \arg I2S_MCKOUT_ENABLE: I2S master clock output enable - \arg I2S_MCKOUT_DISABLE: I2S master clock output disable - \param[out] none - \retval none -*/ -void i2s_psc_config(uint32_t spi_periph, uint32_t i2s_audiosample, uint32_t i2s_frameformat, uint32_t i2s_mckout) -{ - uint32_t i2sdiv = 2U, i2sof = 0U; - uint32_t clks = 0U; - uint32_t i2sclock = 0U; - -#ifdef GD32F30X_CL - uint32_t pll2mf_4 = 0U; -#endif /* GD32F30X_CL */ - - /* judge whether the audiosample is 0 */ - if(0U == i2s_audiosample){ - SPI_ERROR_HANDLE("the parameter can not be 0 \r\n"); - } - /* deinit SPI_I2SPSC register */ - SPI_I2SPSC(spi_periph) = SPI_I2SPSC_DEFAULT_VALUE; - -#ifdef GD32F30X_CL - /* get the I2S clock source */ - if(((uint32_t)spi_periph) == SPI1){ - /* I2S1 clock source selection */ - clks = I2S1_CLOCK_SEL; - }else{ - /* I2S2 clock source selection */ - clks = I2S2_CLOCK_SEL; - } - - if(0U != (RCU_CFG1 & clks)){ - /* get RCU PLL2 clock multiplication factor */ - clks = (uint32_t)((RCU_CFG1 & I2S_CLOCK_MUL_MASK) >> 12U); - - pll2mf_4 = RCU_CFG1 & RCU_CFG1_PLL2MF_4; - - if( 0U == pll2mf_4){ - if((clks > 5U) && (clks < 15U)){ - /* multiplier is between 8 and 16 */ - clks += 2U; - }else{ - if(15U == clks){ - /* multiplier is 20 */ - clks = 20U; - } - } - }else{ - if(clks < 15U){ - /* multiplier is between 18 and 32 */ - clks += 18U; - }else{ - if(15U == clks){ - /* multiplier is 40 */ - clks = 40U; - } - } - } - - /* get the PREDV1 value */ - i2sclock = (uint32_t)(((RCU_CFG1 & I2S_CLOCK_DIV_MASK) >> 4U) + 1U); - /* calculate i2sclock based on PLL2 and PREDV1 */ - i2sclock = (uint32_t)((HXTAL_VALUE / i2sclock) * clks * 2U); - }else{ - /* get system clock */ - i2sclock = rcu_clock_freq_get(CK_SYS); - } -#else - /* get system clock */ - i2sclock = rcu_clock_freq_get(CK_SYS); -#endif /* GD32F30X_CL */ - - /* config the prescaler depending on the mclk output state, the frame format and audio sample rate */ - if(I2S_MCKOUT_ENABLE == i2s_mckout){ - clks = (uint32_t)(((i2sclock / 256U) * 10U) / i2s_audiosample); - }else{ - if(I2S_FRAMEFORMAT_DT16B_CH16B == i2s_frameformat){ - clks = (uint32_t)(((i2sclock / 32U) *10U ) / i2s_audiosample); - }else{ - clks = (uint32_t)(((i2sclock / 64U) *10U ) / i2s_audiosample); - } - } - - /* remove the floating point */ - clks = (clks + 5U) / 10U; - i2sof = (clks & 0x00000001U); - i2sdiv = ((clks - i2sof) / 2U); - i2sof = (i2sof << 8U); - - /* set the default values */ - if((i2sdiv < 2U) || (i2sdiv > 255U)){ - i2sdiv = 2U; - i2sof = 0U; - } - - /* configure SPI_I2SPSC */ - SPI_I2SPSC(spi_periph) = (uint32_t)(i2sdiv | i2sof | i2s_mckout); - - /* clear SPI_I2SCTL_DTLEN and SPI_I2SCTL_CHLEN bits */ - SPI_I2SCTL(spi_periph) &= (uint32_t)(~(SPI_I2SCTL_DTLEN | SPI_I2SCTL_CHLEN)); - /* configure data frame format */ - SPI_I2SCTL(spi_periph) |= (uint32_t)i2s_frameformat; -} - -/*! - \brief enable I2S - \param[in] spi_periph: SPIx(x=1,2) - \param[out] none - \retval none -*/ -void i2s_enable(uint32_t spi_periph) -{ - SPI_I2SCTL(spi_periph) |= (uint32_t)SPI_I2SCTL_I2SEN; -} - -/*! - \brief disable I2S - \param[in] spi_periph: SPIx(x=1,2) - \param[out] none - \retval none -*/ -void i2s_disable(uint32_t spi_periph) -{ - SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SEN); -} - -/*! - \brief enable SPI NSS output - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nss_output_enable(uint32_t spi_periph) -{ - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSDRV; -} - -/*! - \brief disable SPI NSS output - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nss_output_disable(uint32_t spi_periph) -{ - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_NSSDRV); -} - -/*! - \brief SPI NSS pin high level in software mode - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nss_internal_high(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SWNSS; -} - -/*! - \brief SPI NSS pin low level in software mode - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nss_internal_low(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SWNSS); -} - -/*! - \brief enable SPI DMA send or receive - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] dma: SPI DMA mode - only one parameter can be selected which is shown as below: - \arg SPI_DMA_TRANSMIT: SPI transmit data use DMA - \arg SPI_DMA_RECEIVE: SPI receive data use DMA - \param[out] none - \retval none -*/ -void spi_dma_enable(uint32_t spi_periph, uint8_t dma) -{ - if(SPI_DMA_TRANSMIT == dma){ - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMATEN; - }else{ - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMAREN; - } -} - -/*! - \brief disable SPI DMA send or receive - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] dma: SPI DMA mode - only one parameter can be selected which is shown as below: - \arg SPI_DMA_TRANSMIT: SPI transmit data use DMA - \arg SPI_DMA_RECEIVE: SPI receive data use DMA - \param[out] none - \retval none -*/ -void spi_dma_disable(uint32_t spi_periph, uint8_t dma) -{ - if(SPI_DMA_TRANSMIT == dma){ - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMATEN); - }else{ - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMAREN); - } -} - -/*! - \brief configure SPI/I2S data frame format - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] frame_format: SPI frame size - only one parameter can be selected which is shown as below: - \arg SPI_FRAMESIZE_16BIT: SPI frame size is 16 bits - \arg SPI_FRAMESIZE_8BIT: SPI frame size is 8 bits - \param[out] none - \retval none -*/ -void spi_i2s_data_frame_format_config(uint32_t spi_periph, uint16_t frame_format) -{ - /* clear SPI_CTL0_FF16 bit */ - SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_FF16); - /* confige SPI_CTL0_FF16 bit */ - SPI_CTL0(spi_periph) |= (uint32_t)frame_format; -} - -/*! - \brief SPI transmit data - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] data: 16-bit data - \param[out] none - \retval none -*/ -void spi_i2s_data_transmit(uint32_t spi_periph, uint16_t data) -{ - SPI_DATA(spi_periph) = (uint32_t)data; -} - -/*! - \brief SPI receive data - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval 16-bit data -*/ -uint16_t spi_i2s_data_receive(uint32_t spi_periph) -{ - return ((uint16_t)SPI_DATA(spi_periph)); -} - -/*! - \brief configure SPI bidirectional transfer direction - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] transfer_direction: SPI transfer direction - only one parameter can be selected which is shown as below: - \arg SPI_BIDIRECTIONAL_TRANSMIT: SPI work in transmit-only mode - \arg SPI_BIDIRECTIONAL_RECEIVE: SPI work in receive-only mode - \retval none -*/ -void spi_bidirectional_transfer_config(uint32_t spi_periph, uint32_t transfer_direction) -{ - if(SPI_BIDIRECTIONAL_TRANSMIT == transfer_direction){ - /* set the transmit only mode */ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_BIDIRECTIONAL_TRANSMIT; - }else{ - /* set the receive only mode */ - SPI_CTL0(spi_periph) &= SPI_BIDIRECTIONAL_RECEIVE; - } -} - -/*! - \brief set SPI CRC polynomial - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] crc_poly: CRC polynomial value - \param[out] none - \retval none -*/ -void spi_crc_polynomial_set(uint32_t spi_periph,uint16_t crc_poly) -{ - /* enable SPI CRC */ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCEN; - - /* set SPI CRC polynomial */ - SPI_CRCPOLY(spi_periph) = (uint32_t)crc_poly; -} - -/*! - \brief get SPI CRC polynomial - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval 16-bit CRC polynomial -*/ -uint16_t spi_crc_polynomial_get(uint32_t spi_periph) -{ - return ((uint16_t)SPI_CRCPOLY(spi_periph)); -} - -/*! - \brief turn on CRC function - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_crc_on(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCEN; -} - -/*! - \brief turn off CRC function - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_crc_off(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_CRCEN); -} - -/*! - \brief SPI next data is CRC value - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_crc_next(uint32_t spi_periph) -{ - SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCNT; -} - -/*! - \brief get SPI CRC send value or receive value - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] crc: SPI crc value - only one parameter can be selected which is shown as below: - \arg SPI_CRC_TX: get transmit crc value - \arg SPI_CRC_RX: get receive crc value - \param[out] none - \retval 16-bit CRC value -*/ -uint16_t spi_crc_get(uint32_t spi_periph,uint8_t crc) -{ - if(SPI_CRC_TX == crc){ - return ((uint16_t)(SPI_TCRC(spi_periph))); - }else{ - return ((uint16_t)(SPI_RCRC(spi_periph))); - } -} - -/*! - \brief enable SPI TI mode - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_ti_mode_enable(uint32_t spi_periph) -{ - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_TMOD; -} - -/*! - \brief disable SPI TI mode - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_ti_mode_disable(uint32_t spi_periph) -{ - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_TMOD); -} - -/*! - \brief enable SPI NSS pulse mode - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nssp_mode_enable(uint32_t spi_periph) -{ - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSP; -} - -/*! - \brief disable SPI NSS pulse mode - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_nssp_mode_disable(uint32_t spi_periph) -{ - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_NSSP); -} - -/*! - \brief enable quad wire SPI - \param[in] spi_periph: SPIx(only x=0) - \param[out] none - \retval none -*/ -void qspi_enable(uint32_t spi_periph) -{ - SPI_QCTL(spi_periph) |= (uint32_t)SPI_QCTL_QMOD; -} - -/*! - \brief disable quad wire SPI - \param[in] spi_periph: SPIx(only x=0) - \param[out] none - \retval none -*/ -void qspi_disable(uint32_t spi_periph) -{ - SPI_QCTL(spi_periph) &= (uint32_t)(~SPI_QCTL_QMOD); -} - -/*! - \brief enable quad wire SPI write - \param[in] spi_periph: SPIx(only x=0) - \param[out] none - \retval none -*/ -void qspi_write_enable(uint32_t spi_periph) -{ - SPI_QCTL(spi_periph) &= (uint32_t)(~SPI_QCTL_QRD); -} - -/*! - \brief enable quad wire SPI read - \param[in] spi_periph: SPIx(only x=0) - \param[out] none - \retval none -*/ -void qspi_read_enable(uint32_t spi_periph) -{ - SPI_QCTL(spi_periph) |= (uint32_t)SPI_QCTL_QRD; -} - -/*! - \brief enable SPI_IO2 and SPI_IO3 pin output - \param[in] spi_periph: SPIx(only x=0) - \param[out] none - \retval none -*/ -void qspi_io23_output_enable(uint32_t spi_periph) -{ - SPI_QCTL(spi_periph) |= (uint32_t)SPI_QCTL_IO23_DRV; -} - - /*! - \brief disable SPI_IO2 and SPI_IO3 pin output - \param[in] spi_periph: SPIx(only x=0) - \param[out] none - \retval none -*/ - void qspi_io23_output_disable(uint32_t spi_periph) -{ - SPI_QCTL(spi_periph) &= (uint32_t)(~SPI_QCTL_IO23_DRV); -} - -/*! - \brief enable SPI and I2S interrupt - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] interrupt: SPI/I2S interrupt - only one parameter can be selected which is shown as below: - \arg SPI_I2S_INT_TBE: transmit buffer empty interrupt - \arg SPI_I2S_INT_RBNE: receive buffer not empty interrupt - \arg SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error, - transmission underrun error and format error interrupt - \param[out] none - \retval none -*/ -void spi_i2s_interrupt_enable(uint32_t spi_periph, uint8_t interrupt) -{ - switch(interrupt){ - /* SPI/I2S transmit buffer empty interrupt */ - case SPI_I2S_INT_TBE: - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_TBEIE; - break; - /* SPI/I2S receive buffer not empty interrupt */ - case SPI_I2S_INT_RBNE: - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_RBNEIE; - break; - /* SPI/I2S error */ - case SPI_I2S_INT_ERR: - SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_ERRIE; - break; - default: - break; - } -} - -/*! - \brief disable SPI and I2S interrupt - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] interrupt: SPI/I2S interrupt - only one parameter can be selected which is shown as below: - \arg SPI_I2S_INT_TBE: transmit buffer empty interrupt - \arg SPI_I2S_INT_RBNE: receive buffer not empty interrupt - \arg SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error, - transmission underrun error and format error interrupt - \param[out] none - \retval none -*/ -void spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt) -{ - switch(interrupt){ - /* SPI/I2S transmit buffer empty interrupt */ - case SPI_I2S_INT_TBE: - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_TBEIE); - break; - /* SPI/I2S receive buffer not empty interrupt */ - case SPI_I2S_INT_RBNE: - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_RBNEIE); - break; - /* SPI/I2S error */ - case SPI_I2S_INT_ERR: - SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_ERRIE); - break; - default : - break; - } -} - -/*! - \brief get SPI and I2S interrupt flag status - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] interrupt: SPI/I2S interrupt flag status - only one parameter can be selected which is shown as below: - \arg SPI_I2S_INT_FLAG_TBE: transmit buffer empty interrupt flag - \arg SPI_I2S_INT_FLAG_RBNE: receive buffer not empty interrupt flag - \arg SPI_I2S_INT_FLAG_RXORERR: overrun interrupt flag - \arg SPI_INT_FLAG_CONFERR: config error interrupt flag - \arg SPI_INT_FLAG_CRCERR: CRC error interrupt flag - \arg I2S_INT_FLAG_TXURERR: underrun error interrupt flag - \arg SPI_I2S_INT_FLAG_FERR: format error interrupt flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt) -{ - uint32_t reg1 = SPI_STAT(spi_periph); - uint32_t reg2 = SPI_CTL1(spi_periph); - - switch(interrupt){ - /* SPI/I2S transmit buffer empty interrupt */ - case SPI_I2S_INT_FLAG_TBE: - reg1 = reg1 & SPI_STAT_TBE; - reg2 = reg2 & SPI_CTL1_TBEIE; - break; - /* SPI/I2S receive buffer not empty interrupt */ - case SPI_I2S_INT_FLAG_RBNE: - reg1 = reg1 & SPI_STAT_RBNE; - reg2 = reg2 & SPI_CTL1_RBNEIE; - break; - /* SPI/I2S overrun interrupt */ - case SPI_I2S_INT_FLAG_RXORERR: - reg1 = reg1 & SPI_STAT_RXORERR; - reg2 = reg2 & SPI_CTL1_ERRIE; - break; - /* SPI config error interrupt */ - case SPI_INT_FLAG_CONFERR: - reg1 = reg1 & SPI_STAT_CONFERR; - reg2 = reg2 & SPI_CTL1_ERRIE; - break; - /* SPI CRC error interrupt */ - case SPI_INT_FLAG_CRCERR: - reg1 = reg1 & SPI_STAT_CRCERR; - reg2 = reg2 & SPI_CTL1_ERRIE; - break; - /* I2S underrun error interrupt */ - case I2S_INT_FLAG_TXURERR: - reg1 = reg1 & SPI_STAT_TXURERR; - reg2 = reg2 & SPI_CTL1_ERRIE; - break; - /* SPI/I2S format error interrupt */ - case SPI_I2S_INT_FLAG_FERR: - reg1 = reg1 & SPI_STAT_FERR; - reg2 = reg2 & SPI_CTL1_ERRIE; - break; - default : - break; - } - /*get SPI/I2S interrupt flag status */ - if(reg1 && reg2){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief get SPI and I2S flag status - \param[in] spi_periph: SPIx(x=0,1,2) - \param[in] flag: SPI/I2S flag status - only one parameter can be selected which is shown as below: - \arg SPI_FLAG_TBE: transmit buffer empty flag - \arg SPI_FLAG_RBNE: receive buffer not empty flag - \arg SPI_FLAG_TRANS: transmit on-going flag - \arg SPI_FLAG_RXORERR: receive overrun error flag - \arg SPI_FLAG_CONFERR: mode config error flag - \arg SPI_FLAG_CRCERR: CRC error flag - \arg SPI_FLAG_FERR: format error flag - \arg I2S_FLAG_TBE: transmit buffer empty flag - \arg I2S_FLAG_RBNE: receive buffer not empty flag - \arg I2S_FLAG_TRANS: transmit on-going flag - \arg I2S_FLAG_RXORERR: overrun error flag - \arg I2S_FLAG_TXURERR: underrun error flag - \arg I2S_FLAG_CH: channel side flag - \arg I2S_FLAG_FERR: format error flag - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag) -{ - if(SPI_STAT(spi_periph) & flag){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear SPI CRC error flag status - \param[in] spi_periph: SPIx(x=0,1,2) - \param[out] none - \retval none -*/ -void spi_crc_error_clear(uint32_t spi_periph) -{ - SPI_STAT(spi_periph) &= (uint32_t)(~SPI_FLAG_CRCERR); -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_timer.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_timer.c deleted file mode 100644 index 456062f..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_timer.c +++ /dev/null @@ -1,2042 +0,0 @@ -/*! - \file gd32f30x_timer.c - \brief TIMER driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_timer.h" - -/*! - \brief deinit a TIMER - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_deinit(uint32_t timer_periph) -{ - switch(timer_periph){ - case TIMER0: - /* reset TIMER0 */ - rcu_periph_reset_enable(RCU_TIMER0RST); - rcu_periph_reset_disable(RCU_TIMER0RST); - break; - case TIMER1: - /* reset TIMER1 */ - rcu_periph_reset_enable(RCU_TIMER1RST); - rcu_periph_reset_disable(RCU_TIMER1RST); - break; - case TIMER2: - /* reset TIMER2 */ - rcu_periph_reset_enable(RCU_TIMER2RST); - rcu_periph_reset_disable(RCU_TIMER2RST); - break; - case TIMER3: - /* reset TIMER3 */ - rcu_periph_reset_enable(RCU_TIMER3RST); - rcu_periph_reset_disable(RCU_TIMER3RST); - break; - case TIMER4: - /* reset TIMER4 */ - rcu_periph_reset_enable(RCU_TIMER4RST); - rcu_periph_reset_disable(RCU_TIMER4RST); - break; - case TIMER5: - /* reset TIMER5 */ - rcu_periph_reset_enable(RCU_TIMER5RST); - rcu_periph_reset_disable(RCU_TIMER5RST); - break; - case TIMER6: - /* reset TIMER6 */ - rcu_periph_reset_enable(RCU_TIMER6RST); - rcu_periph_reset_disable(RCU_TIMER6RST); - break; - case TIMER7: - /* reset TIMER7 */ - rcu_periph_reset_enable(RCU_TIMER7RST); - rcu_periph_reset_disable(RCU_TIMER7RST); - break; -#ifndef GD32F30X_HD - case TIMER8: - /* reset TIMER8 */ - rcu_periph_reset_enable(RCU_TIMER8RST); - rcu_periph_reset_disable(RCU_TIMER8RST); - break; - case TIMER9: - /* reset TIMER9 */ - rcu_periph_reset_enable(RCU_TIMER9RST); - rcu_periph_reset_disable(RCU_TIMER9RST); - break; - case TIMER10: - /* reset TIMER10 */ - rcu_periph_reset_enable(RCU_TIMER10RST); - rcu_periph_reset_disable(RCU_TIMER10RST); - break; - case TIMER11: - /* reset TIMER11 */ - rcu_periph_reset_enable(RCU_TIMER11RST); - rcu_periph_reset_disable(RCU_TIMER11RST); - break; - case TIMER12: - /* reset TIMER12 */ - rcu_periph_reset_enable(RCU_TIMER12RST); - rcu_periph_reset_disable(RCU_TIMER12RST); - break; - case TIMER13: - /* reset TIMER13 */ - rcu_periph_reset_enable(RCU_TIMER13RST); - rcu_periph_reset_disable(RCU_TIMER13RST); - break; -#endif /* GD32F30X_HD */ - default: - break; - } -} - -/*! - \brief initialize TIMER init parameter struct with a default value - \param[in] initpara: init parameter struct - \param[out] none - \retval none -*/ -void timer_struct_para_init(timer_parameter_struct* initpara) -{ - /* initialize the init parameter struct member with the default value */ - initpara->prescaler = 0U; - initpara->alignedmode = TIMER_COUNTER_EDGE; - initpara->counterdirection = TIMER_COUNTER_UP; - initpara->period = 65535U; - initpara->clockdivision = TIMER_CKDIV_DIV1; - initpara->repetitioncounter = 0U; -} - -/*! - \brief initialize TIMER counter - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] initpara: init parameter struct - prescaler: prescaler value of the counter clock, 0~65535 - alignedmode: TIMER_COUNTER_EDGE, TIMER_COUNTER_CENTER_DOWN, TIMER_COUNTER_CENTER_UP, TIMER_COUNTER_CENTER_BOTH - counterdirection: TIMER_COUNTER_UP, TIMER_COUNTER_DOWN - period: counter auto reload value, 0~65535 - clockdivision: TIMER_CKDIV_DIV1, TIMER_CKDIV_DIV2, TIMER_CKDIV_DIV4 - repetitioncounter: counter repetition value, 0~255 - \param[out] none - \retval none -*/ -void timer_init(uint32_t timer_periph, timer_parameter_struct* initpara) -{ - /* configure the counter prescaler value */ - TIMER_PSC(timer_periph) = (uint16_t)initpara->prescaler; - - /* configure the counter direction and aligned mode */ - if((TIMER0 == timer_periph) || (TIMER1 == timer_periph) || (TIMER2 == timer_periph) - || (TIMER3 == timer_periph) || (TIMER4 == timer_periph) || (TIMER7 == timer_periph)){ - TIMER_CTL0(timer_periph) &= ~(uint32_t)(TIMER_CTL0_DIR|TIMER_CTL0_CAM); - TIMER_CTL0(timer_periph) |= (uint32_t)initpara->alignedmode; - TIMER_CTL0(timer_periph) |= (uint32_t)initpara->counterdirection; - } - - /* configure the autoreload value */ - TIMER_CAR(timer_periph) = (uint32_t)initpara->period; - - if((TIMER5 != timer_periph) && (TIMER6 != timer_periph)){ - /* reset the CKDIV bit */ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_CKDIV; - TIMER_CTL0(timer_periph) |= (uint32_t)initpara->clockdivision; - } - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* configure the repetition counter value */ - TIMER_CREP(timer_periph) = (uint32_t)initpara->repetitioncounter; - } - - /* generate an update event */ - TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG; -} - -/*! - \brief enable a TIMER - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_enable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_CEN; -} - -/*! - \brief disable a TIMER - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_disable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_CEN; -} - -/*! - \brief enable the auto reload shadow function - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_auto_reload_shadow_enable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_ARSE; -} - -/*! - \brief disable the auto reload shadow function - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_auto_reload_shadow_disable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_ARSE; -} - -/*! - \brief enable the update event - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_update_event_enable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPDIS; -} - -/*! - \brief disable the update event - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval none -*/ -void timer_update_event_disable(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) |= (uint32_t) TIMER_CTL0_UPDIS; -} - -/*! - \brief set TIMER counter alignment mode - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] aligned: - only one parameter can be selected which is shown as below: - \arg TIMER_COUNTER_EDGE: edge-aligned mode - \arg TIMER_COUNTER_CENTER_DOWN: center-aligned and counting down assert mode - \arg TIMER_COUNTER_CENTER_UP: center-aligned and counting up assert mode - \arg TIMER_COUNTER_CENTER_BOTH: center-aligned and counting up/down assert mode - \param[out] none - \retval none -*/ -void timer_counter_alignment(uint32_t timer_periph, uint16_t aligned) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_CAM; - TIMER_CTL0(timer_periph) |= (uint32_t)aligned; -} - -/*! - \brief set TIMER counter up direction - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_counter_up_direction(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_DIR; -} - -/*! - \brief set TIMER counter down direction - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_counter_down_direction(uint32_t timer_periph) -{ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_DIR; -} - -/*! - \brief configure TIMER prescaler - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] prescaler: prescaler value,0~65535 - \param[in] pscreload: prescaler reload mode - only one parameter can be selected which is shown as below: - \arg TIMER_PSC_RELOAD_NOW: the prescaler is loaded right now - \arg TIMER_PSC_RELOAD_UPDATE: the prescaler is loaded at the next update event - \param[out] none - \retval none -*/ -void timer_prescaler_config(uint32_t timer_periph, uint16_t prescaler, uint8_t pscreload) -{ - TIMER_PSC(timer_periph) = (uint32_t)prescaler; - - if(TIMER_PSC_RELOAD_NOW == pscreload){ - TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG; - } -} - -/*! - \brief configure TIMER repetition register value - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] repetition: the counter repetition value,0~255 - \param[out] none - \retval none -*/ -void timer_repetition_value_config(uint32_t timer_periph, uint16_t repetition) -{ - TIMER_CREP(timer_periph) = (uint32_t)repetition; -} - -/*! - \brief configure TIMER autoreload register value - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] autoreload: the counter auto-reload value,0~65535 - \param[out] none - \retval none -*/ -void timer_autoreload_value_config(uint32_t timer_periph, uint16_t autoreload) -{ - TIMER_CAR(timer_periph) = (uint32_t)autoreload; -} - -/*! - \brief configure TIMER counter register value - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] counter: the counter value,0~65535 - \param[out] none - \retval none -*/ -void timer_counter_value_config(uint32_t timer_periph, uint16_t counter) -{ - TIMER_CNT(timer_periph) = (uint32_t)counter; -} - -/*! - \brief read TIMER counter value - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval counter value -*/ -uint32_t timer_counter_read(uint32_t timer_periph) -{ - uint32_t count_value = 0U; - count_value = TIMER_CNT(timer_periph); - return (count_value); -} - -/*! - \brief read TIMER prescaler value - \param[in] timer_periph: TIMERx(x=0..13) - \param[out] none - \retval prescaler register value -*/ -uint16_t timer_prescaler_read(uint32_t timer_periph) -{ - uint16_t prescaler_value = 0U; - prescaler_value = (uint16_t)(TIMER_PSC(timer_periph)); - return (prescaler_value); -} - -/*! - \brief configure TIMER single pulse mode - \param[in] timer_periph: TIMERx(x=0..8,11) - \param[in] spmode: - only one parameter can be selected which is shown as below: - \arg TIMER_SP_MODE_SINGLE: single pulse mode - \arg TIMER_SP_MODE_REPETITIVE: repetitive pulse mode - \param[out] none - \retval none -*/ -void timer_single_pulse_mode_config(uint32_t timer_periph, uint32_t spmode) -{ - if(TIMER_SP_MODE_SINGLE == spmode){ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_SPM; - }else if(TIMER_SP_MODE_REPETITIVE == spmode){ - TIMER_CTL0(timer_periph) &= ~((uint32_t)TIMER_CTL0_SPM); - }else{ - /* illegal parameters */ - } -} - -/*! - \brief configure TIMER update source - \param[in] timer_periph: TIMERx(x=0..13) - \param[in] update: - only one parameter can be selected which is shown as below: - \arg TIMER_UPDATE_SRC_GLOBAL: update generate by setting of UPG bit or the counter overflow/underflow,or the slave mode controller trigger - \arg TIMER_UPDATE_SRC_REGULAR: update generate only by counter overflow/underflow - \param[out] none - \retval none -*/ -void timer_update_source_config(uint32_t timer_periph, uint32_t update) -{ - if(TIMER_UPDATE_SRC_REGULAR == update){ - TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_UPS; - }else if(TIMER_UPDATE_SRC_GLOBAL == update){ - TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPS; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief enable the TIMER interrupt - \param[in] timer_periph: please refer to the following parameters - \param[in] interrupt: timer interrupt enable source - only one parameter can be selected which is shown as below: - \arg TIMER_INT_UP: update interrupt enable, TIMERx(x=0..13) - \arg TIMER_INT_CH0: channel 0 interrupt enable, TIMERx(x=0..4,7..13) - \arg TIMER_INT_CH1: channel 1 interrupt enable, TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_CH2: channel 2 interrupt enable, TIMERx(x=0..4,7) - \arg TIMER_INT_CH3: channel 3 interrupt enable , TIMERx(x=0..4,7) - \arg TIMER_INT_CMT: commutation interrupt enable, TIMERx(x=0,7) - \arg TIMER_INT_TRG: trigger interrupt enable, TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_BRK: break interrupt enable, TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt) -{ - TIMER_DMAINTEN(timer_periph) |= (uint32_t) interrupt; -} - -/*! - \brief disable the TIMER interrupt - \param[in] timer_periph: please refer to the following parameters - \param[in] interrupt: timer interrupt source disable - only one parameter can be selected which is shown as below: - \arg TIMER_INT_UP: update interrupt disable, TIMERx(x=0..13) - \arg TIMER_INT_CH0: channel 0 interrupt disable, TIMERx(x=0..4,7..13) - \arg TIMER_INT_CH1: channel 1 interrupt disable, TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_CH2: channel 2 interrupt disable, TIMERx(x=0..4,7) - \arg TIMER_INT_CH3: channel 3 interrupt disable , TIMERx(x=0..4,7) - \arg TIMER_INT_CMT: commutation interrupt disable, TIMERx(x=0,7) - \arg TIMER_INT_TRG: trigger interrupt disable, TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_BRK: break interrupt disable, TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt) -{ - TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)interrupt); -} - -/*! - \brief get timer interrupt flag - \param[in] timer_periph: please refer to the following parameters - \param[in] interrupt: the timer interrupt bits - only one parameter can be selected which is shown as below: - \arg TIMER_INT_FLAG_UP: update interrupt flag,TIMERx(x=0..13) - \arg TIMER_INT_FLAG_CH0: channel 0 interrupt flag,TIMERx(x=0..4,7..13) - \arg TIMER_INT_FLAG_CH1: channel 1 interrupt flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_FLAG_CH2: channel 2 interrupt flag,TIMERx(x=0..4,7) - \arg TIMER_INT_FLAG_CH3: channel 3 interrupt flag,TIMERx(x=0..4,7) - \arg TIMER_INT_FLAG_CMT: channel commutation interrupt flag,TIMERx(x=0,7) - \arg TIMER_INT_FLAG_TRG: trigger interrupt flag,TIMERx(x=0,7,8,11) - \arg TIMER_INT_FLAG_BRK: break interrupt flag,TIMERx(x=0,7) - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt) -{ - uint32_t val; - val = (TIMER_DMAINTEN(timer_periph) & interrupt); - if((RESET != (TIMER_INTF(timer_periph) & interrupt) ) && (RESET != val)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear TIMER interrupt flag - \param[in] timer_periph: please refer to the following parameters - \param[in] interrupt: the timer interrupt bits - only one parameter can be selected which is shown as below: - \arg TIMER_INT_FLAG_UP: update interrupt flag,TIMERx(x=0..13) - \arg TIMER_INT_FLAG_CH0: channel 0 interrupt flag,TIMERx(x=0..4,7..13) - \arg TIMER_INT_FLAG_CH1: channel 1 interrupt flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_INT_FLAG_CH2: channel 2 interrupt flag,TIMERx(x=0..4,7) - \arg TIMER_INT_FLAG_CH3: channel 3 interrupt flag,TIMERx(x=0..4,7) - \arg TIMER_INT_FLAG_CMT: channel commutation interrupt flag,TIMERx(x=0,7) - \arg TIMER_INT_FLAG_TRG: trigger interrupt flag,TIMERx(x=0,7,8,11) - \arg TIMER_INT_FLAG_BRK: break interrupt flag,TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt) -{ - TIMER_INTF(timer_periph) = (~(uint32_t)interrupt); -} - -/*! - \brief get TIMER flags - \param[in] timer_periph: please refer to the following parameters - \param[in] flag: the timer interrupt flags - only one parameter can be selected which is shown as below: - \arg TIMER_FLAG_UP: update flag,TIMERx(x=0..13) - \arg TIMER_FLAG_CH0: channel 0 flag,TIMERx(x=0..4,7..13) - \arg TIMER_FLAG_CH1: channel 1 flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_FLAG_CH2: channel 2 flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CH3: channel 3 flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CMT: channel control update flag,TIMERx(x=0,7) - \arg TIMER_FLAG_TRG: trigger flag,TIMERx(x=0,7,8,11) - \arg TIMER_FLAG_BRK: break flag,TIMERx(x=0,7) - \arg TIMER_FLAG_CH0O: channel 0 overcapture flag,TIMERx(x=0..4,7..11) - \arg TIMER_FLAG_CH1O: channel 1 overcapture flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_FLAG_CH2O: channel 2 overcapture flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CH3O: channel 3 overcapture flag,TIMERx(x=0..4,7) - \param[out] none - \retval FlagStatus: SET or RESET -*/ -FlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag) -{ - if(RESET != (TIMER_INTF(timer_periph) & flag)){ - return SET; - }else{ - return RESET; - } -} - -/*! - \brief clear TIMER flags - \param[in] timer_periph: please refer to the following parameters - \param[in] flag: the timer interrupt flags - only one parameter can be selected which is shown as below: - \arg TIMER_FLAG_UP: update flag,TIMERx(x=0..13) - \arg TIMER_FLAG_CH0: channel 0 flag,TIMERx(x=0..4,7..13) - \arg TIMER_FLAG_CH1: channel 1 flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_FLAG_CH2: channel 2 flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CH3: channel 3 flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CMT: channel control update flag,TIMERx(x=0,7) - \arg TIMER_FLAG_TRG: trigger flag,TIMERx(x=0,7,8,11) - \arg TIMER_FLAG_BRK: break flag,TIMERx(x=0,7) - \arg TIMER_FLAG_CH0O: channel 0 overcapture flag,TIMERx(x=0..4,7..11) - \arg TIMER_FLAG_CH1O: channel 1 overcapture flag,TIMERx(x=0..4,7,8,11) - \arg TIMER_FLAG_CH2O: channel 2 overcapture flag,TIMERx(x=0..4,7) - \arg TIMER_FLAG_CH3O: channel 3 overcapture flag,TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_flag_clear(uint32_t timer_periph, uint32_t flag) -{ - TIMER_INTF(timer_periph) = (~(uint32_t)flag); -} - -/*! - \brief enable the TIMER DMA - \param[in] timer_periph: please refer to the following parameters - \param[in] dma: specify which DMA to enable - only one parameter can be selected which is shown as below: - \arg TIMER_DMA_UPD: update DMA enable,TIMERx(x=0..7) - \arg TIMER_DMA_CH0D: channel 0 DMA enable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH1D: channel 1 DMA enable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH2D: channel 2 DMA enable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH3D: channel 3 DMA enable,TIMERx(x=0..4,7) - \arg TIMER_DMA_CMTD: commutation DMA request enable,TIMERx(x=0,7) - \arg TIMER_DMA_TRGD: trigger DMA enable,TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_dma_enable(uint32_t timer_periph, uint16_t dma) -{ - TIMER_DMAINTEN(timer_periph) |= (uint32_t) dma; -} - -/*! - \brief disable the TIMER DMA - \param[in] timer_periph: please refer to the following parameters - \param[in] dma: specify which DMA to enable - one or more parameters can be selected which are shown as below: - \arg TIMER_DMA_UPD: update DMA ,TIMERx(x=0..7) - \arg TIMER_DMA_CH0D: channel 0 DMA request,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH1D: channel 1 DMA request,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH2D: channel 2 DMA request,TIMERx(x=0..4,7) - \arg TIMER_DMA_CH3D: channel 3 DMA request,TIMERx(x=0..4,7) - \arg TIMER_DMA_CMTD: commutation DMA request ,TIMERx(x=0,7) - \arg TIMER_DMA_TRGD: trigger DMA request,TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_dma_disable(uint32_t timer_periph, uint16_t dma) -{ - TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)(dma)); -} - -/*! - \brief channel DMA request source selection - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] dma_request: channel DMA request source selection - only one parameter can be selected which is shown as below: - \arg TIMER_DMAREQUEST_CHANNELEVENT: DMA request of channel y is sent when channel y event occurs - \arg TIMER_DMAREQUEST_UPDATEEVENT: DMA request of channel y is sent when update event occurs - \param[out] none - \retval none -*/ -void timer_channel_dma_request_source_select(uint32_t timer_periph, uint8_t dma_request) -{ - if(TIMER_DMAREQUEST_UPDATEEVENT == dma_request){ - TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_DMAS; - }else if(TIMER_DMAREQUEST_CHANNELEVENT == dma_request){ - TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_DMAS; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief configure the TIMER DMA transfer - \param[in] timer_periph: please refer to the following parameters - \param[in] dma_baseaddr: - only one parameter can be selected which is shown as below: - \arg TIMER_DMACFG_DMATA_CTL0: DMA transfer address is TIMER_CTL0,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CTL1: DMA transfer address is TIMER_CTL1,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_SMCFG: DMA transfer address is TIMER_SMCFG,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_DMAINTEN: DMA transfer address is TIMER_DMAINTEN,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_INTF: DMA transfer address is TIMER_INTF,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_SWEVG: DMA transfer address is TIMER_SWEVG,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CHCTL0: DMA transfer address is TIMER_CHCTL0,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CHCTL1: DMA transfer address is TIMER_CHCTL1,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CHCTL2: DMA transfer address is TIMER_CHCTL2,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CNT: DMA transfer address is TIMER_CNT,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_PSC: DMA transfer address is TIMER_PSC,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CAR: DMA transfer address is TIMER_CAR,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CREP: DMA transfer address is TIMER_CREP,TIMERx(x=0,7) - \arg TIMER_DMACFG_DMATA_CH0CV: DMA transfer address is TIMER_CH0CV,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CH1CV: DMA transfer address is TIMER_CH1CV,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CH2CV: DMA transfer address is TIMER_CH2CV,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CH3CV: DMA transfer address is TIMER_CH3CV,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_CCHP: DMA transfer address is TIMER_CCHP,TIMERx(x=0,7) - \arg TIMER_DMACFG_DMATA_DMACFG: DMA transfer address is TIMER_DMACFG,TIMERx(x=0..4,7) - \arg TIMER_DMACFG_DMATA_DMATB: DMA transfer address is TIMER_DMATB,TIMERx(x=0..4,7) - \param[in] dma_lenth: - only one parameter can be selected which is shown as below: - \arg TIMER_DMACFG_DMATC_xTRANSFER(x=1..18): DMA transfer x time - \param[out] none - \retval none -*/ -void timer_dma_transfer_config(uint32_t timer_periph, uint32_t dma_baseaddr, uint32_t dma_lenth) -{ - TIMER_DMACFG(timer_periph) &= (~(uint32_t)(TIMER_DMACFG_DMATA | TIMER_DMACFG_DMATC)); - TIMER_DMACFG(timer_periph) |= (uint32_t)(dma_baseaddr | dma_lenth); -} - -/*! - \brief software generate events - \param[in] timer_periph: please refer to the following parameters - \param[in] event: the timer software event generation sources - one or more parameters can be selected which are shown as below: - \arg TIMER_EVENT_SRC_UPG: update event,TIMERx(x=0..13) - \arg TIMER_EVENT_SRC_CH0G: channel 0 capture or compare event generation,TIMERx(x=0..4,7..13) - \arg TIMER_EVENT_SRC_CH1G: channel 1 capture or compare event generation,TIMERx(x=0..4,7,8,11) - \arg TIMER_EVENT_SRC_CH2G: channel 2 capture or compare event generation,TIMERx(x=0..4,7) - \arg TIMER_EVENT_SRC_CH3G: channel 3 capture or compare event generation,TIMERx(x=0..4,7) - \arg TIMER_EVENT_SRC_CMTG: channel commutation event generation,TIMERx(x=0,7) - \arg TIMER_EVENT_SRC_TRGG: trigger event generation,TIMERx(x=0..4,7,8,11) - \arg TIMER_EVENT_SRC_BRKG: break event generation,TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_event_software_generate(uint32_t timer_periph, uint16_t event) -{ - TIMER_SWEVG(timer_periph) |= (uint32_t)event; -} - -/*! - \brief initialize TIMER break parameter struct with a default value - \param[in] breakpara: TIMER break parameter struct - \param[out] none - \retval none -*/ -void timer_break_struct_para_init(timer_break_parameter_struct* breakpara) -{ - /* initialize the break parameter struct member with the default value */ - breakpara->runoffstate = TIMER_ROS_STATE_DISABLE; - breakpara->ideloffstate = TIMER_IOS_STATE_DISABLE; - breakpara->deadtime = 0U; - breakpara->breakpolarity = TIMER_BREAK_POLARITY_LOW; - breakpara->outputautostate = TIMER_OUTAUTO_DISABLE; - breakpara->protectmode = TIMER_CCHP_PROT_OFF; - breakpara->breakstate = TIMER_BREAK_DISABLE; -} - -/*! - \brief configure TIMER break function - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] breakpara: TIMER break parameter struct - runoffstate: TIMER_ROS_STATE_ENABLE,TIMER_ROS_STATE_DISABLE - ideloffstate: TIMER_IOS_STATE_ENABLE,TIMER_IOS_STATE_DISABLE - deadtime: 0~255 - breakpolarity: TIMER_BREAK_POLARITY_LOW,TIMER_BREAK_POLARITY_HIGH - outputautostate: TIMER_OUTAUTO_ENABLE,TIMER_OUTAUTO_DISABLE - protectmode: TIMER_CCHP_PROT_OFF,TIMER_CCHP_PROT_0,TIMER_CCHP_PROT_1,TIMER_CCHP_PROT_2 - breakstate: TIMER_BREAK_ENABLE,TIMER_BREAK_DISABLE - \param[out] none - \retval none -*/ -void timer_break_config(uint32_t timer_periph, timer_break_parameter_struct* breakpara) -{ - TIMER_CCHP(timer_periph) = (uint32_t)(((uint32_t)(breakpara->runoffstate))| - ((uint32_t)(breakpara->ideloffstate))| - ((uint32_t)(breakpara->deadtime))| - ((uint32_t)(breakpara->breakpolarity))| - ((uint32_t)(breakpara->outputautostate)) | - ((uint32_t)(breakpara->protectmode))| - ((uint32_t)(breakpara->breakstate))) ; -} - -/*! - \brief enable TIMER break function - \param[in] timer_periph: TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_break_enable(uint32_t timer_periph) -{ - TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_BRKEN; -} - -/*! - \brief disable TIMER break function - \param[in] timer_periph: TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_break_disable(uint32_t timer_periph) -{ - TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_BRKEN; -} - -/*! - \brief enable TIMER output automatic function - \param[in] timer_periph: TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_automatic_output_enable(uint32_t timer_periph) -{ - TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_OAEN; -} - -/*! - \brief disable TIMER output automatic function - \param[in] timer_periph: TIMERx(x=0,7) - \param[out] none - \retval none -*/ -void timer_automatic_output_disable(uint32_t timer_periph) -{ - TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_OAEN; -} - -/*! - \brief configure TIMER primary output function - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void timer_primary_output_config(uint32_t timer_periph, ControlStatus newvalue) -{ - if(ENABLE == newvalue){ - TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_POEN; - }else{ - TIMER_CCHP(timer_periph) &= (~(uint32_t)TIMER_CCHP_POEN); - } -} - -/*! - \brief enable or disable channel capture/compare control shadow register - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] newvalue: ENABLE or DISABLE - \param[out] none - \retval none -*/ -void timer_channel_control_shadow_config(uint32_t timer_periph, ControlStatus newvalue) -{ - if(ENABLE == newvalue){ - TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCSE; - }else{ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCSE); - } -} - -/*! - \brief configure TIMER channel control shadow register update control - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] ccuctl: channel control shadow register update control - only one parameter can be selected which is shown as below: - \arg TIMER_UPDATECTL_CCU: the shadow registers update by when CMTG bit is set - \arg TIMER_UPDATECTL_CCUTRI: the shadow registers update by when CMTG bit is set or an rising edge of TRGI occurs - \param[out] none - \retval none -*/ -void timer_channel_control_shadow_update_config(uint32_t timer_periph, uint8_t ccuctl) -{ - if(TIMER_UPDATECTL_CCU == ccuctl){ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCUC); - }else if(TIMER_UPDATECTL_CCUTRI == ccuctl){ - TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCUC; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief initialize TIMER channel output parameter struct with a default value - \param[in] ocpara: TIMER channel n output parameter struct - \param[out] none - \retval none -*/ -void timer_channel_output_struct_para_init(timer_oc_parameter_struct* ocpara) -{ - /* initialize the channel output parameter struct member with the default value */ - ocpara->outputstate = (uint16_t)TIMER_CCX_DISABLE; - ocpara->outputnstate = TIMER_CCXN_DISABLE; - ocpara->ocpolarity = TIMER_OC_POLARITY_HIGH; - ocpara->ocnpolarity = TIMER_OCN_POLARITY_HIGH; - ocpara->ocidlestate = TIMER_OC_IDLE_STATE_LOW; - ocpara->ocnidlestate = TIMER_OCN_IDLE_STATE_LOW; -} - -/*! - \brief configure TIMER channel output function - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) - \param[in] ocpara: TIMER channeln output parameter struct - outputstate: TIMER_CCX_ENABLE,TIMER_CCX_DISABLE - outputnstate: TIMER_CCXN_ENABLE,TIMER_CCXN_DISABLE - ocpolarity: TIMER_OC_POLARITY_HIGH,TIMER_OC_POLARITY_LOW - ocnpolarity: TIMER_OCN_POLARITY_HIGH,TIMER_OCN_POLARITY_LOW - ocidlestate: TIMER_OC_IDLE_STATE_LOW,TIMER_OC_IDLE_STATE_HIGH - ocnidlestate: TIMER_OCN_IDLE_STATE_LOW,TIMER_OCN_IDLE_STATE_HIGH - \param[out] none - \retval none -*/ -void timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_oc_parameter_struct* ocpara) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH0MS; - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputstate; - /* reset the CH0P bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P); - /* set the CH0P bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocpolarity; - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* reset the CH0NEN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN); - /* set the CH0NEN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputnstate; - /* reset the CH0NP bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP); - /* set the CH0NP bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocnpolarity; - /* reset the ISO0 bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0); - /* set the ISO0 bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocidlestate; - /* reset the ISO0N bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0N); - /* set the ISO0N bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocnidlestate; - } - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH1MS; - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpara->outputstate << 4U); - /* reset the CH1P bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P); - /* set the CH1P bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 4U); - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* reset the CH1NEN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN); - /* set the CH1NEN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate) << 4U); - /* reset the CH1NP bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP); - /* set the CH1NP bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity) << 4U); - /* reset the ISO1 bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1); - /* set the ISO1 bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 2U); - /* reset the ISO1N bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1N); - /* set the ISO1N bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate) << 2U); - } - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - /* reset the CH2EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); - TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH2MS; - /* set the CH2EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpara->outputstate << 8U); - /* reset the CH2P bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P); - /* set the CH2P bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 8U); - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* reset the CH2NEN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN); - /* set the CH2NEN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate) << 8U); - /* reset the CH2NP bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP); - /* set the CH2NP bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity) << 8U); - /* reset the ISO2 bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2); - /* set the ISO2 bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 4U); - /* reset the ISO2N bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2N); - /* set the ISO2N bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate) << 4U); - } - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - /* reset the CH3EN bit */ - TIMER_CHCTL2(timer_periph) &=(~(uint32_t)TIMER_CHCTL2_CH3EN); - TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH3MS; - /* set the CH3EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpara->outputstate << 12U); - /* reset the CH3P bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P); - /* set the CH3P bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 12U); - - if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ - /* reset the ISO3 bit */ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO3); - /* set the ISO3 bit */ - TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 6U); - } - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output compare mode - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] ocmode: channel output compare mode - only one parameter can be selected which is shown as below: - \arg TIMER_OC_MODE_TIMING: timing mode - \arg TIMER_OC_MODE_ACTIVE: active mode - \arg TIMER_OC_MODE_INACTIVE: inactive mode - \arg TIMER_OC_MODE_TOGGLE: toggle mode - \arg TIMER_OC_MODE_LOW: force low mode - \arg TIMER_OC_MODE_HIGH: force high mode - \arg TIMER_OC_MODE_PWM0: PWM0 mode - \arg TIMER_OC_MODE_PWM1: PWM1 mode - \param[out] none - \retval none -*/ -void timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel, uint16_t ocmode) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCTL); - TIMER_CHCTL0(timer_periph) |= (uint32_t)ocmode; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCTL); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocmode) << 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCTL); - TIMER_CHCTL1(timer_periph) |= (uint32_t)ocmode; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCTL); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocmode) << 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output pulse value - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] pulse: channel output pulse value,0~65535 - \param[out] none - \retval none -*/ -void timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t channel, uint32_t pulse) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CH0CV(timer_periph) = (uint32_t)pulse; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CH1CV(timer_periph) = (uint32_t)pulse; - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CH2CV(timer_periph) = (uint32_t)pulse; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CH3CV(timer_periph) = (uint32_t)pulse; - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output shadow function - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] ocshadow: channel output shadow state - only one parameter can be selected which is shown as below: - \arg TIMER_OC_SHADOW_ENABLE: channel output shadow state enable - \arg TIMER_OC_SHADOW_DISABLE: channel output shadow state disable - \param[out] none - \retval none -*/ -void timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, uint16_t ocshadow) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMSEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)ocshadow; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMSEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMSEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)ocshadow; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMSEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output fast function - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] ocfast: channel output fast function - only one parameter can be selected which is shown as below: - \arg TIMER_OC_FAST_ENABLE: channel output fast function enable - \arg TIMER_OC_FAST_DISABLE: channel output fast function disable - \param[out] none - \retval none -*/ -void timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, uint16_t ocfast) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMFEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)ocfast; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMFEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMFEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)ocfast; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMFEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output clear function - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0 - \arg TIMER_CH_1: TIMER channel1 - \arg TIMER_CH_2: TIMER channel2 - \arg TIMER_CH_3: TIMER channel3 - \param[in] occlear: channel output clear function - only one parameter can be selected which is shown as below: - \arg TIMER_OC_CLEAR_ENABLE: channel output clear function enable - \arg TIMER_OC_CLEAR_DISABLE: channel output clear function disable - \param[out] none - \retval none -*/ -void timer_channel_output_clear_config(uint32_t timer_periph, uint16_t channel, uint16_t occlear) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)occlear; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCEN); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)occlear; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCEN); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel output polarity - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] ocpolarity: channel output polarity - only one parameter can be selected which is shown as below: - \arg TIMER_OC_POLARITY_HIGH: channel output polarity is high - \arg TIMER_OC_POLARITY_LOW: channel output polarity is low - \param[out] none - \retval none -*/ -void timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocpolarity) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P); - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpolarity; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 4U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 8U); - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 12U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel complementary output polarity - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0,7)) - \param[in] ocnpolarity: channel complementary output polarity - only one parameter can be selected which is shown as below: - \arg TIMER_OCN_POLARITY_HIGH: channel complementary output polarity is high - \arg TIMER_OCN_POLARITY_LOW: channel complementary output polarity is low - \param[out] none - \retval none -*/ -void timer_channel_complementary_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnpolarity) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP); - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnpolarity; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 4U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 8U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel enable state - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] state: TIMER channel enable state - only one parameter can be selected which is shown as below: - \arg TIMER_CCX_ENABLE: channel enable - \arg TIMER_CCX_DISABLE: channel disable - \param[out] none - \retval none -*/ -void timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)state; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 4U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 8U); - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 12U); - break; - default: - break; - } -} - -/*! - \brief configure TIMER channel complementary output enable state - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0,7)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0,7)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0,7)) - \param[in] ocnstate: TIMER channel complementary output enable state - only one parameter can be selected which is shown as below: - \arg TIMER_CCXN_ENABLE: channel complementary enable - \arg TIMER_CCXN_DISABLE: channel complementary disable - \param[out] none - \retval none -*/ -void timer_channel_complementary_output_state_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnstate) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnstate; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 4U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 8U); - break; - default: - break; - } -} - -/*! - \brief initialize TIMER channel input parameter struct with a default value - \param[in] icpara: TIMER channel intput parameter struct - \param[out] none - \retval none -*/ -void timer_channel_input_struct_para_init(timer_ic_parameter_struct* icpara) -{ - /* initialize the channel input parameter struct member with the default value */ - icpara->icpolarity = TIMER_IC_POLARITY_RISING; - icpara->icselection = TIMER_IC_SELECTION_DIRECTTI; - icpara->icprescaler = TIMER_IC_PSC_DIV1; - icpara->icfilter = 0U; -} - -/*! - \brief configure TIMER input capture parameter - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] icpara: TIMER channel intput parameter struct - icpolarity: TIMER_IC_POLARITY_RISING,TIMER_IC_POLARITY_FALLING - icselection: TIMER_IC_SELECTION_DIRECTTI,TIMER_IC_SELECTION_INDIRECTTI,TIMER_IC_SELECTION_ITS - icprescaler: TIMER_IC_PSC_DIV1,TIMER_IC_PSC_DIV2,TIMER_IC_PSC_DIV4,TIMER_IC_PSC_DIV8 - icfilter: 0~15 - \param[out] none - \retval none -*/ -void timer_input_capture_config(uint32_t timer_periph,uint16_t channel, timer_ic_parameter_struct* icpara) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - - /* reset the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); - TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpara->icpolarity); - /* reset the CH0MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); - TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpara->icselection); - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U); - - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; - break; - - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - - /* reset the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 4U); - /* reset the CH1MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U); - /* reset the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U); - - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - /* reset the CH2EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); - - /* reset the CH2P and CH2NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH2P|TIMER_CHCTL2_CH2NP)); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 8U); - - /* reset the CH2MS bit */ - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2MS); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection)); - - /* reset the CH2CAPFLT bit */ - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPFLT); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U); - - /* set the CH2EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH2EN; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - /* reset the CH3EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN); - - /* reset the CH3P bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH3P)); - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 12U); - - /* reset the CH3MS bit */ - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3MS); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U); - - /* reset the CH3CAPFLT bit */ - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPFLT); - TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U); - - /* set the CH3EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH3EN; - break; - default: - break; - } - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph, channel, (uint16_t)(icpara->icprescaler)); -} - -/*! - \brief configure TIMER channel input capture prescaler value - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[in] prescaler: channel input capture prescaler value - only one parameter can be selected which is shown as below: - \arg TIMER_IC_PSC_DIV1: no prescaler - \arg TIMER_IC_PSC_DIV2: divided by 2 - \arg TIMER_IC_PSC_DIV4: divided by 4 - \arg TIMER_IC_PSC_DIV8: divided by 8 - \param[out] none - \retval none -*/ -void timer_channel_input_capture_prescaler_config(uint32_t timer_periph, uint16_t channel, uint16_t prescaler) -{ - switch(channel){ - /* configure TIMER_CH_0 */ - case TIMER_CH_0: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPPSC); - TIMER_CHCTL0(timer_periph) |= (uint32_t)prescaler; - break; - /* configure TIMER_CH_1 */ - case TIMER_CH_1: - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPPSC); - TIMER_CHCTL0(timer_periph) |= ((uint32_t)prescaler << 8U); - break; - /* configure TIMER_CH_2 */ - case TIMER_CH_2: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPPSC); - TIMER_CHCTL1(timer_periph) |= (uint32_t)prescaler; - break; - /* configure TIMER_CH_3 */ - case TIMER_CH_3: - TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPPSC); - TIMER_CHCTL1(timer_periph) |= ((uint32_t)prescaler << 8U); - break; - default: - break; - } -} - -/*! - \brief read TIMER channel capture compare register value - \param[in] timer_periph: please refer to the following parameters - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0(TIMERx(x=0..4,7..13)) - \arg TIMER_CH_1: TIMER channel1(TIMERx(x=0..4,7,8,11)) - \arg TIMER_CH_2: TIMER channel2(TIMERx(x=0..4,7)) - \arg TIMER_CH_3: TIMER channel3(TIMERx(x=0..4,7)) - \param[out] none - \retval channel capture compare register value -*/ -uint32_t timer_channel_capture_value_register_read(uint32_t timer_periph, uint16_t channel) -{ - uint32_t count_value = 0U; - - switch(channel){ - /* read TIMER channel 0 capture compare register value */ - case TIMER_CH_0: - count_value = TIMER_CH0CV(timer_periph); - break; - /* read TIMER channel 1 capture compare register value */ - case TIMER_CH_1: - count_value = TIMER_CH1CV(timer_periph); - break; - /* read TIMER channel 2 capture compare register value */ - case TIMER_CH_2: - count_value = TIMER_CH2CV(timer_periph); - break; - /* read TIMER channel 3 capture compare register value */ - case TIMER_CH_3: - count_value = TIMER_CH3CV(timer_periph); - break; - default: - break; - } - return (count_value); -} - -/*! - \brief configure TIMER input pwm capture function - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] channel: - only one parameter can be selected which is shown as below: - \arg TIMER_CH_0: TIMER channel0 - \arg TIMER_CH_1: TIMER channel1 - \param[in] icpwm:TIMER channel intput pwm parameter struct - icpolarity: TIMER_IC_POLARITY_RISING,TIMER_IC_POLARITY_FALLING - icselection: TIMER_IC_SELECTION_DIRECTTI,TIMER_IC_SELECTION_INDIRECTTI - icprescaler: TIMER_IC_PSC_DIV1,TIMER_IC_PSC_DIV2,TIMER_IC_PSC_DIV4,TIMER_IC_PSC_DIV8 - icfilter: 0~15 - \param[out] none - \retval none -*/ -void timer_input_pwm_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpwm) -{ - uint16_t icpolarity = 0x0U; - uint16_t icselection = 0x0U; - - /* Set channel input polarity */ - if(TIMER_IC_POLARITY_RISING == icpwm->icpolarity){ - icpolarity = TIMER_IC_POLARITY_FALLING; - }else{ - icpolarity = TIMER_IC_POLARITY_RISING; - } - - /* Set channel input mode selection */ - if(TIMER_IC_SELECTION_DIRECTTI == icpwm->icselection){ - icselection = TIMER_IC_SELECTION_INDIRECTTI; - }else{ - icselection = TIMER_IC_SELECTION_DIRECTTI; - } - - if(TIMER_CH_0 == channel){ - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - /* reset the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P|TIMER_CHCTL2_CH0NP)); - /* set the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpwm->icpolarity); - /* reset the CH0MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); - /* set the CH0MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpwm->icselection); - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); - /* set the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U); - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph,TIMER_CH_0,(uint16_t)(icpwm->icprescaler)); - - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - /* reset the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P|TIMER_CHCTL2_CH1NP)); - /* set the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)icpolarity << 4U); - /* reset the CH1MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); - /* set the CH1MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)icselection << 8U); - /* reset the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); - /* set the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter) << 12U); - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph,TIMER_CH_1,(uint16_t)(icpwm->icprescaler)); - }else{ - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - /* reset the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P|TIMER_CHCTL2_CH1NP)); - /* set the CH1P and CH1NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icpolarity) << 4U); - /* reset the CH1MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); - /* set the CH1MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icselection) << 8U); - /* reset the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); - /* set the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter) << 12U); - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_1, (uint16_t)(icpwm->icprescaler)); - - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - /* reset the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P|TIMER_CHCTL2_CH0NP)); - /* set the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)icpolarity; - /* reset the CH0MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); - /* set the CH0MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)icselection; - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); - /* set the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U); - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; - /* configure TIMER channel input capture prescaler value */ - timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_0, (uint16_t)(icpwm->icprescaler)); - } -} - -/*! - \brief configure TIMER hall sensor mode - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] hallmode: - only one parameter can be selected which is shown as below: - \arg TIMER_HALLINTERFACE_ENABLE: TIMER hall sensor mode enable - \arg TIMER_HALLINTERFACE_DISABLE: TIMER hall sensor mode disable - \param[out] none - \retval none -*/ -void timer_hall_mode_config(uint32_t timer_periph, uint32_t hallmode) -{ - if(TIMER_HALLINTERFACE_ENABLE == hallmode){ - TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_TI0S; - }else if(TIMER_HALLINTERFACE_DISABLE == hallmode){ - TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_TI0S; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief select TIMER input trigger source - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] intrigger: - only one parameter can be selected which is shown as below: - \arg TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0 - \arg TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1 - \arg TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2 - \arg TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3 - \arg TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector - \arg TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0 - \arg TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1 - \arg TIMER_SMCFG_TRGSEL_ETIFP: external trigger(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger) -{ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_TRGS); - TIMER_SMCFG(timer_periph) |= (uint32_t)intrigger; -} - -/*! - \brief select TIMER master mode output trigger source - \param[in] timer_periph: TIMERx(x=0..7) - \param[in] outrigger: - only one parameter can be selected which is shown as below: - \arg TIMER_TRI_OUT_SRC_RESET: the UPG bit as trigger output - \arg TIMER_TRI_OUT_SRC_ENABLE: the counter enable signal TIMER_CTL0_CEN as trigger output - \arg TIMER_TRI_OUT_SRC_UPDATE: update event as trigger output - \arg TIMER_TRI_OUT_SRC_CH0: a capture or a compare match occurred in channal0 as trigger output TRGO - \arg TIMER_TRI_OUT_SRC_O0CPRE: O0CPRE as trigger output - \arg TIMER_TRI_OUT_SRC_O1CPRE: O1CPRE as trigger output - \arg TIMER_TRI_OUT_SRC_O2CPRE: O2CPRE as trigger output - \arg TIMER_TRI_OUT_SRC_O3CPRE: O3CPRE as trigger output - \param[out] none - \retval none -*/ -void timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t outrigger) -{ - TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_MMC); - TIMER_CTL1(timer_periph) |= (uint32_t)outrigger; -} - -/*! - \brief select TIMER slave mode - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] slavemode: - only one parameter can be selected which is shown as below: - \arg TIMER_SLAVE_MODE_DISABLE: slave mode disable - \arg TIMER_ENCODER_MODE0: encoder mode 0 - \arg TIMER_ENCODER_MODE1: encoder mode 1 - \arg TIMER_ENCODER_MODE2: encoder mode 2 - \arg TIMER_SLAVE_MODE_RESTART: restart mode - \arg TIMER_SLAVE_MODE_PAUSE: pause mode - \arg TIMER_SLAVE_MODE_EVENT: event mode - \arg TIMER_SLAVE_MODE_EXTERNAL0: external clock mode 0. - \param[out] none - \retval none -*/ - -void timer_slave_mode_select(uint32_t timer_periph, uint32_t slavemode) -{ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); - - TIMER_SMCFG(timer_periph) |= (uint32_t)slavemode; -} - -/*! - \brief configure TIMER master slave mode - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] masterslave: - only one parameter can be selected which is shown as below: - \arg TIMER_MASTER_SLAVE_MODE_ENABLE: master slave mode enable - \arg TIMER_MASTER_SLAVE_MODE_DISABLE: master slave mode disable - \param[out] none - \retval none -*/ -void timer_master_slave_mode_config(uint32_t timer_periph, uint32_t masterslave) -{ - if(TIMER_MASTER_SLAVE_MODE_ENABLE == masterslave){ - TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_MSM; - }else if(TIMER_MASTER_SLAVE_MODE_DISABLE == masterslave){ - TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_MSM; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief configure TIMER external trigger input - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] extprescaler: - only one parameter can be selected which is shown as below: - \arg TIMER_EXT_TRI_PSC_OFF: no divided - \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 - \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 - \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 - \param[in] extpolarity: - only one parameter can be selected which is shown as below: - \arg TIMER_ETP_FALLING: active low or falling edge active - \arg TIMER_ETP_RISING: active high or rising edge active - \param[in] extfilter: a value between 0 and 15 - \param[out] none - \retval none -*/ -void timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, - uint32_t extpolarity, uint32_t extfilter) -{ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_ETP | TIMER_SMCFG_ETPSC | TIMER_SMCFG_ETFC)); - TIMER_SMCFG(timer_periph) |= (uint32_t)(extprescaler | extpolarity); - TIMER_SMCFG(timer_periph) |= (uint32_t)(extfilter << 8U); -} - -/*! - \brief configure TIMER quadrature decoder mode - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] decomode: - only one parameter can be selected which is shown as below: - \arg TIMER_ENCODER_MODE0: counter counts on CI0FE0 edge depending on CI1FE1 level - \arg TIMER_ENCODER_MODE1: counter counts on CI1FE1 edge depending on CI0FE0 level - \arg TIMER_ENCODER_MODE2: counter counts on both CI0FE0 and CI1FE1 edges depending on the level of the other input - \param[in] ic0polarity: - only one parameter can be selected which is shown as below: - \arg TIMER_IC_POLARITY_RISING: capture rising edge - \arg TIMER_IC_POLARITY_FALLING: capture falling edge - \param[in] ic1polarity: - only one parameter can be selected which is shown as below: - \arg TIMER_IC_POLARITY_RISING: capture rising edge - \arg TIMER_IC_POLARITY_FALLING: capture falling edge - \param[out] none - \retval none -*/ -void timer_quadrature_decoder_mode_config(uint32_t timer_periph, uint32_t decomode, - uint16_t ic0polarity, uint16_t ic1polarity) -{ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); - TIMER_SMCFG(timer_periph) |= (uint32_t)decomode; - - TIMER_CHCTL0(timer_periph) &= (uint32_t)(((~(uint32_t)TIMER_CHCTL0_CH0MS))&((~(uint32_t)TIMER_CHCTL0_CH1MS))); - TIMER_CHCTL0(timer_periph) |= (uint32_t)(TIMER_IC_SELECTION_DIRECTTI|((uint32_t)TIMER_IC_SELECTION_DIRECTTI << 8U)); - - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P|TIMER_CHCTL2_CH0NP)); - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P|TIMER_CHCTL2_CH1NP)); - TIMER_CHCTL2(timer_periph) |= ((uint32_t)ic0polarity|((uint32_t)ic1polarity << 4U)); -} - -/*! - \brief configure TIMER internal clock mode - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[out] none - \retval none -*/ -void timer_internal_clock_config(uint32_t timer_periph) -{ - TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC; -} - -/*! - \brief configure TIMER the internal trigger as external clock input - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] intrigger: - only one parameter can be selected which is shown as below: - \arg TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0 - \arg TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1 - \arg TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2 - \arg TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3 - \param[out] none - \retval none -*/ -void timer_internal_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t intrigger) -{ - timer_input_trigger_source_select(timer_periph, intrigger); - TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC; - TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0; -} - -/*! - \brief configure TIMER the external trigger as external clock input - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] extrigger: - only one parameter can be selected which is shown as below: - \arg TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector - \arg TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0 - \arg TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1 - \param[in] extpolarity: - only one parameter can be selected which is shown as below: - \arg TIMER_IC_POLARITY_RISING: active high or rising edge active - \arg TIMER_IC_POLARITY_FALLING: active low or falling edge active - \param[in] extfilter: a value between 0 and 15 - \param[out] none - \retval none -*/ -void timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t extrigger, - uint16_t extpolarity, uint32_t extfilter) -{ - if(TIMER_SMCFG_TRGSEL_CI1FE1 == extrigger){ - /* reset the CH1EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); - /* reset the CH1NP bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P|TIMER_CHCTL2_CH1NP)); - /* set the CH1NP bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)extpolarity << 4U); - /* reset the CH1MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); - /* set the CH1MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)TIMER_IC_SELECTION_DIRECTTI << 8U); - /* reset the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); - /* set the CH1CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 12U); - /* set the CH1EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; - }else{ - /* reset the CH0EN bit */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); - /* reset the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P|TIMER_CHCTL2_CH0NP)); - /* set the CH0P and CH0NP bits */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)extpolarity; - /* reset the CH0MS bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); - /* set the CH0MS bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)TIMER_IC_SELECTION_DIRECTTI; - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); - /* reset the CH0CAPFLT bit */ - TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 4U); - /* set the CH0EN bit */ - TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; - } - /* select TIMER input trigger source */ - timer_input_trigger_source_select(timer_periph,extrigger); - /* reset the SMC bit */ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); - /* set the SMC bit */ - TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0; -} - -/*! - \brief configure TIMER the external clock mode0 - \param[in] timer_periph: TIMERx(x=0..4,7,8,11) - \param[in] extprescaler: - only one parameter can be selected which is shown as below: - \arg TIMER_EXT_TRI_PSC_OFF: no divided - \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 - \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 - \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 - \param[in] extpolarity: - only one parameter can be selected which is shown as below: - \arg TIMER_ETP_FALLING: active low or falling edge active - \arg TIMER_ETP_RISING: active high or rising edge active - \param[in] extfilter: a value between 0 and 15 - \param[out] none - \retval none -*/ -void timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extprescaler, - uint32_t extpolarity, uint32_t extfilter) -{ - /* configure TIMER external trigger input */ - timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter); - - /* reset the SMC bit,TRGS bit */ - TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_SMC | TIMER_SMCFG_TRGS)); - /* set the SMC bit,TRGS bit */ - TIMER_SMCFG(timer_periph) |= (uint32_t)(TIMER_SLAVE_MODE_EXTERNAL0 | TIMER_SMCFG_TRGSEL_ETIFP); -} - -/*! - \brief configure TIMER the external clock mode1 - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[in] extprescaler: - only one parameter can be selected which is shown as below: - \arg TIMER_EXT_TRI_PSC_OFF: no divided - \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 - \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 - \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 - \param[in] extpolarity: - only one parameter can be selected which is shown as below: - \arg TIMER_ETP_FALLING: active low or falling edge active - \arg TIMER_ETP_RISING: active high or rising edge active - \param[in] extfilter: a value between 0 and 15 - \param[out] none - \retval none -*/ -void timer_external_clock_mode1_config(uint32_t timer_periph, uint32_t extprescaler, - uint32_t extpolarity, uint32_t extfilter) -{ - /* configure TIMER external trigger input */ - timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter); - - TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_SMC1; -} - -/*! - \brief disable TIMER the external clock mode1 - \param[in] timer_periph: TIMERx(x=0..4,7) - \param[out] none - \retval none -*/ -void timer_external_clock_mode1_disable(uint32_t timer_periph) -{ - TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC1; -} - -/*! - \brief configure TIMER write CHxVAL register selection - \param[in] timer_periph: TIMERx(x=0..4,7..13) - \param[in] ccsel: - only one parameter can be selected which is shown as below: - \arg TIMER_CHVSEL_DISABLE: no effect - \arg TIMER_CHVSEL_ENABLE: when write the CHxVAL register, if the write value is same as the CHxVAL value, the write access is ignored - \param[out] none - \retval none -*/ -void timer_write_chxval_register_config(uint32_t timer_periph, uint16_t ccsel) -{ - if(TIMER_CHVSEL_ENABLE == ccsel){ - TIMER_CFG(timer_periph) |= (uint32_t)TIMER_CFG_CHVSEL; - }else if(TIMER_CHVSEL_DISABLE == ccsel){ - TIMER_CFG(timer_periph) &= ~(uint32_t)TIMER_CFG_CHVSEL; - }else{ - /* illegal parameters */ - } -} - -/*! - \brief configure TIMER output value selection - \param[in] timer_periph: TIMERx(x=0,7) - \param[in] outsel: - only one parameter can be selected which is shown as below: - \arg TIMER_OUTSEL_DISABLE: no effect - \arg TIMER_OUTSEL_ENABLE: if POEN and IOS is 0, the output disabled - \param[out] none - \retval none -*/ -void timer_output_value_selection_config(uint32_t timer_periph, uint16_t outsel) -{ - if(TIMER_OUTSEL_ENABLE == outsel){ - TIMER_CFG(timer_periph) |= (uint32_t)TIMER_CFG_OUTSEL; - }else if(TIMER_OUTSEL_DISABLE == outsel){ - TIMER_CFG(timer_periph) &= ~(uint32_t)TIMER_CFG_OUTSEL; - }else{ - /* illegal parameters */ - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_usart.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_usart.c deleted file mode 100644 index 719f565..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_standard_peripheral/Source/gd32f30x_usart.c +++ /dev/null @@ -1,909 +0,0 @@ -/*! - \file gd32f30x_usart.c - \brief USART driver - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x - \version 2020-09-30, V2.1.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_usart.h" - -/* USART register bit offset */ -#define GP_GUAT_OFFSET ((uint32_t)8U) /* bit offset of GUAT in USART_GP */ -#define CTL3_SCRTNUM_OFFSET ((uint32_t)1U) /* bit offset of SCRTNUM in USART_CTL3 */ -#define RT_BL_OFFSET ((uint32_t)24U) /* bit offset of BL in USART_RT */ - -/*! - \brief reset USART/UART - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_deinit(uint32_t usart_periph) -{ - switch(usart_periph){ - case USART0: - /* reset USART0 */ - rcu_periph_reset_enable(RCU_USART0RST); - rcu_periph_reset_disable(RCU_USART0RST); - break; - case USART1: - /* reset USART1 */ - rcu_periph_reset_enable(RCU_USART1RST); - rcu_periph_reset_disable(RCU_USART1RST); - break; - case USART2: - /* reset USART2 */ - rcu_periph_reset_enable(RCU_USART2RST); - rcu_periph_reset_disable(RCU_USART2RST); - break; - case UART3: - /* reset UART3 */ - rcu_periph_reset_enable(RCU_UART3RST); - rcu_periph_reset_disable(RCU_UART3RST); - break; - case UART4: - /* reset UART4 */ - rcu_periph_reset_enable(RCU_UART4RST); - rcu_periph_reset_disable(RCU_UART4RST); - break; - default: - break; - } -} - -/*! - \brief configure USART baud rate value - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] baudval: baud rate value - \param[out] none - \retval none -*/ -void usart_baudrate_set(uint32_t usart_periph, uint32_t baudval) -{ - uint32_t uclk=0U, intdiv=0U, fradiv=0U, udiv=0U; - switch(usart_periph){ - /* get clock frequency */ - case USART0: - /* get USART0 clock */ - uclk = rcu_clock_freq_get(CK_APB2); - break; - case USART1: - /* get USART1 clock */ - uclk = rcu_clock_freq_get(CK_APB1); - break; - case USART2: - /* get USART2 clock */ - uclk = rcu_clock_freq_get(CK_APB1); - break; - case UART3: - /* get UART3 clock */ - uclk = rcu_clock_freq_get(CK_APB1); - break; - case UART4: - /* get UART4 clock */ - uclk = rcu_clock_freq_get(CK_APB1); - break; - default: - break; - } - /* oversampling by 16, configure the value of USART_BAUD */ - udiv = (uclk+baudval/2U)/baudval; - intdiv = udiv & 0xfff0U; - fradiv = udiv & 0xfU; - USART_BAUD(usart_periph) = ((USART_BAUD_FRADIV | USART_BAUD_INTDIV) & (intdiv | fradiv)); -} - -/*! - \brief configure USART parity - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] paritycfg: configure USART parity - only one parameter can be selected which is shown as below: - \arg USART_PM_NONE: no parity - \arg USART_PM_ODD: odd parity - \arg USART_PM_EVEN: even parity - \param[out] none - \retval none -*/ -void usart_parity_config(uint32_t usart_periph, uint32_t paritycfg) -{ - /* clear USART_CTL0 PM,PCEN bits */ - USART_CTL0(usart_periph) &= ~(USART_CTL0_PM | USART_CTL0_PCEN); - /* configure USART parity mode */ - USART_CTL0(usart_periph) |= paritycfg ; -} - -/*! - \brief configure USART word length - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] wlen: USART word length configure - only one parameter can be selected which is shown as below: - \arg USART_WL_8BIT: 8 bits - \arg USART_WL_9BIT: 9 bits - \param[out] none - \retval none -*/ -void usart_word_length_set(uint32_t usart_periph, uint32_t wlen) -{ - /* clear USART_CTL0 WL bit */ - USART_CTL0(usart_periph) &= ~USART_CTL0_WL; - /* configure USART word length */ - USART_CTL0(usart_periph) |= wlen; -} - -/*! - \brief configure USART stop bit length - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] stblen: USART stop bit configure - only one parameter can be selected which is shown as below: - \arg USART_STB_1BIT: 1 bit - \arg USART_STB_0_5BIT: 0.5 bit, not available for UARTx(x=3,4) - \arg USART_STB_2BIT: 2 bits - \arg USART_STB_1_5BIT: 1.5 bits, not available for UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen) -{ - /* clear USART_CTL1 STB bits */ - USART_CTL1(usart_periph) &= ~USART_CTL1_STB; - /* configure USART stop bits */ - USART_CTL1(usart_periph) |= stblen; -} - -/*! - \brief enable USART - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_enable(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) |= USART_CTL0_UEN; -} - -/*! - \brief disable USART - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_disable(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) &= ~(USART_CTL0_UEN); -} - -/*! - \brief configure USART transmitter - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] txconfig: enable or disable USART transmitter - only one parameter can be selected which is shown as below: - \arg USART_TRANSMIT_ENABLE: enable USART transmission - \arg USART_TRANSMIT_DISABLE: enable USART transmission - \param[out] none - \retval none -*/ -void usart_transmit_config(uint32_t usart_periph, uint32_t txconfig) -{ - uint32_t ctl = 0U; - - ctl = USART_CTL0(usart_periph); - ctl &= ~USART_CTL0_TEN; - ctl |= txconfig; - /* configure transfer mode */ - USART_CTL0(usart_periph) = ctl; -} - -/*! - \brief configure USART receiver - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] rxconfig: enable or disable USART receiver - only one parameter can be selected which is shown as below: - \arg USART_RECEIVE_ENABLE: enable USART reception - \arg USART_RECEIVE_DISABLE: disable USART reception - \param[out] none - \retval none -*/ -void usart_receive_config(uint32_t usart_periph, uint32_t rxconfig) -{ - uint32_t ctl = 0U; - - ctl = USART_CTL0(usart_periph); - ctl &= ~USART_CTL0_REN; - ctl |= rxconfig; - /* configure transfer mode */ - USART_CTL0(usart_periph) = ctl; -} - -/*! - \brief data is transmitted/received with the LSB/MSB first - \param[in] usart_periph: USARTx(x=0,1,2) - \param[in] msbf: LSB/MSB - only one parameter can be selected which is shown as below: - \arg USART_MSBF_LSB: LSB first - \arg USART_MSBF_MSB: MSB first - \param[out] none - \retval none -*/ -void usart_data_first_config(uint32_t usart_periph, uint32_t msbf) -{ - USART_CTL3(usart_periph) &= ~(USART_CTL3_MSBF); - USART_CTL3(usart_periph) |= msbf; -} - -/*! - \brief configure USART inversion - \param[in] usart_periph: USARTx(x=0,1,2) - \param[in] invertpara: refer to enum usart_invert_enum - only one parameter can be selected which is shown as below: - \arg USART_DINV_ENABLE: data bit level inversion - \arg USART_DINV_DISABLE: data bit level not inversion - \arg USART_TXPIN_ENABLE: TX pin level inversion - \arg USART_TXPIN_DISABLE: TX pin level not inversion - \arg USART_RXPIN_ENABLE: RX pin level inversion - \arg USART_RXPIN_DISABLE: RX pin level not inversion - \param[out] none - \retval none -*/ -void usart_invert_config(uint32_t usart_periph, usart_invert_enum invertpara) -{ - /* inverted or not the specified siginal */ - switch(invertpara){ - case USART_DINV_ENABLE: - /* data bit level inversion */ - USART_CTL3(usart_periph) |= USART_CTL3_DINV; - break; - case USART_TXPIN_ENABLE: - /* TX pin level inversion */ - USART_CTL3(usart_periph) |= USART_CTL3_TINV; - break; - case USART_RXPIN_ENABLE: - /* RX pin level inversion */ - USART_CTL3(usart_periph) |= USART_CTL3_RINV; - break; - case USART_DINV_DISABLE: - /* data bit level not inversion */ - USART_CTL3(usart_periph) &= ~(USART_CTL3_DINV); - break; - case USART_TXPIN_DISABLE: - /* TX pin level not inversion */ - USART_CTL3(usart_periph) &= ~(USART_CTL3_TINV); - break; - case USART_RXPIN_DISABLE: - /* RX pin level not inversion */ - USART_CTL3(usart_periph) &= ~(USART_CTL3_RINV); - break; - default: - break; - } -} - -/*! - \brief enable receiver timeout of USART - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_receiver_timeout_enable(uint32_t usart_periph) -{ - USART_CTL3(usart_periph) |= USART_CTL3_RTEN; -} - -/*! - \brief disable receiver timeout of USART - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_receiver_timeout_disable(uint32_t usart_periph) -{ - USART_CTL3(usart_periph) &= ~(USART_CTL3_RTEN); -} - -/*! - \brief set the receiver timeout threshold of USART - \param[in] usart_periph: USARTx(x=0,1,2) - \param[in] rtimeout: 0-0xFFFFFF - \param[out] none - \retval none -*/ -void usart_receiver_timeout_threshold_config(uint32_t usart_periph, uint32_t rtimeout) -{ - USART_RT(usart_periph) &= ~(USART_RT_RT); - USART_RT(usart_periph) |= rtimeout; -} - -/*! - \brief USART transmit data function - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] data: data of transmission - \param[out] none - \retval none -*/ -void usart_data_transmit(uint32_t usart_periph, uint32_t data) -{ - USART_DATA(usart_periph) = ((uint16_t)USART_DATA_DATA & data); -} - -/*! - \brief USART receive data function - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval data of received -*/ -uint16_t usart_data_receive(uint32_t usart_periph) -{ - return (uint16_t)(GET_BITS(USART_DATA(usart_periph), 0U, 8U)); -} - -/*! - \brief configure the address of the USART in wake up by address match mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] addr: address of USART/UART - \param[out] none - \retval none -*/ -void usart_address_config(uint32_t usart_periph, uint8_t addr) -{ - USART_CTL1(usart_periph) &= ~(USART_CTL1_ADDR); - USART_CTL1(usart_periph) |= (USART_CTL1_ADDR & addr); -} - -/*! - \brief receiver in mute mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_mute_mode_enable(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) |= USART_CTL0_RWU; -} - -/*! - \brief receiver in active mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_mute_mode_disable(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) &= ~(USART_CTL0_RWU); -} - -/*! - \brief configure wakeup method in mute mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] wmethod: two methods be used to enter or exit the mute mode - only one parameter can be selected which is shown as below: - \arg USART_WM_IDLE: idle line - \arg USART_WM_ADDR: address mask - \param[out] none - \retval none -*/ -void usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmethod) -{ - USART_CTL0(usart_periph) &= ~(USART_CTL0_WM); - USART_CTL0(usart_periph) |= wmethod; -} - -/*! - \brief enable LIN mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_lin_mode_enable(uint32_t usart_periph) -{ - USART_CTL1(usart_periph) |= USART_CTL1_LMEN; -} - -/*! - \brief disable LIN mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_lin_mode_disable(uint32_t usart_periph) -{ - USART_CTL1(usart_periph) &= ~(USART_CTL1_LMEN); -} - -/*! - \brief configure lin break frame length - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[in] lblen: lin break frame length - only one parameter can be selected which is shown as below: - \arg USART_LBLEN_10B: 10 bits - \arg USART_LBLEN_11B: 11 bits - \param[out] none - \retval none -*/ -void usart_lin_break_detection_length_config(uint32_t usart_periph, uint32_t lblen) -{ - USART_CTL1(usart_periph) &= ~(USART_CTL1_LBLEN); - USART_CTL1(usart_periph) |= (USART_CTL1_LBLEN & lblen); -} - -/*! - \brief send break frame - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_send_break(uint32_t usart_periph) -{ - USART_CTL0(usart_periph) |= USART_CTL0_SBKCMD; -} - -/*! - \brief enable half duplex mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_halfduplex_enable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) |= USART_CTL2_HDEN; -} - -/*! - \brief disable half duplex mode - \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) - \param[out] none - \retval none -*/ -void usart_halfduplex_disable(uint32_t usart_periph) -{ - USART_CTL2(usart_periph) &= ~(USART_CTL2_HDEN); -} - -/*! - \brief enable CK pin in synchronous mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_synchronous_clock_enable(uint32_t usart_periph) -{ - USART_CTL1(usart_periph) |= USART_CTL1_CKEN; -} - -/*! - \brief disable CK pin in synchronous mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[out] none - \retval none -*/ -void usart_synchronous_clock_disable(uint32_t usart_periph) -{ - USART_CTL1(usart_periph) &= ~(USART_CTL1_CKEN); -} - -/*! - \brief configure USART synchronous mode parameters - \param[in] usart_periph: USARTx(x=0,1,2) - \param[in] clen: CK length - only one parameter can be selected which is shown as below: - \arg USART_CLEN_NONE: there are 7 CK pulses for an 8 bit frame and 8 CK pulses for a 9 bit frame - \arg USART_CLEN_EN: there are 8 CK pulses for an 8 bit frame and 9 CK pulses for a 9 bit frame - \param[in] cph: clock phase - only one parameter can be selected which is shown as below: - \arg USART_CPH_1CK: first clock transition is the first data capture edge - \arg USART_CPH_2CK: second clock transition is the first data capture edge - \param[in] cpl: clock polarity - only one parameter can be selected which is shown as below: - \arg USART_CPL_LOW: steady low value on CK pin - \arg USART_CPL_HIGH: steady high value on CK pin - \param[out] none - \retval none -*/ -void usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl) -{ - uint32_t ctl = 0U; - - /* read USART_CTL1 register */ - ctl = USART_CTL1(usart_periph); - ctl &= ~(USART_CTL1_CLEN | USART_CTL1_CPH | USART_CTL1_CPL); - /* set CK length, CK phase, CK polarity */ - ctl |= (USART_CTL1_CLEN & clen) | (USART_CTL1_CPH & cph) | (USART_CTL1_CPL & cpl); - - USART_CTL1(usart_periph) = ctl; -} - -/*! - \brief configure guard time value in smartcard mode - \param[in] usart_periph: USARTx(x=0,1,2) - \param[in] guat: guard time value, 0-0xFF - \param[out] none - \retval none -*/ -void usart_guard_time_config(uint32_t usart_periph,uint32_t guat) -{ - USART_GP(usart_periph) &= ~(USART_GP_GUAT); - USART_GP(usart_periph) |= (USART_GP_GUAT & ((guat)<> 8);(uint8_t)((x) >> 16) - -/* audio_freq * data_size (2 bytes) * num_channels (stereo: 2) */ -#define DEFAULT_OUT_BIT_RESOLUTION 16U -#define DEFAULT_OUT_CHANNEL_NBR 2U /* mono = 1, stereo = 2 */ -#define AUDIO_OUT_PACKET (uint32_t)(((USBD_AUDIO_FREQ_16K * \ - (DEFAULT_OUT_BIT_RESOLUTION / 8U) *\ - DEFAULT_OUT_CHANNEL_NBR) / 1000U)) - -/* number of sub-packets in the audio transfer buffer. you can modify this value but always make sure - that it is an even number and higher than 3 */ -#define OUT_PACKET_NUM 4U - -/* total size of the audio transfer buffer */ -#define OUT_BUF_MARGIN 4U -#define TOTAL_OUT_BUF_SIZE ((uint32_t)((AUDIO_OUT_PACKET + OUT_BUF_MARGIN) * OUT_PACKET_NUM)) - -#define AUDIO_CONFIG_DESC_SET_LEN 109U -#define AUDIO_INTERFACE_DESC_SIZE 9U - -#define USB_AUDIO_DESC_SIZ 0x09U -#define AUDIO_STANDARD_EP_DESC_SIZE 0x09U -#define AUDIO_STREAMING_EP_DESC_SIZE 0x07U - -/* audio interface class code */ -#define USB_CLASS_AUDIO 0x01U - -/* audio interface subclass codes */ -#define AUDIO_SUBCLASS_CONTROL 0x01U -#define AUDIO_SUBCLASS_AUDIOSTREAMING 0x02U -#define AUDIO_SUBCLASS_MIDISTREAMING 0x03U - -/* audio interface protocol codes */ -#define AUDIO_PROTOCOL_UNDEFINED 0x00U -#define AUDIO_STREAMING_GENERAL 0x01U -#define AUDIO_STREAMING_FORMAT_TYPE 0x02U - -/* audio class-specific descriptor types */ -#define AUDIO_DESCTYPE_UNDEFINED 0x20U -#define AUDIO_DESCTYPE_DEVICE 0x21U -#define AUDIO_DESCTYPE_CONFIGURATION 0x22U -#define AUDIO_DESCTYPE_STRING 0x23U -#define AUDIO_DESCTYPE_INTERFACE 0x24U -#define AUDIO_DESCTYPE_ENDPOINT 0x25U - -/* audio control interface descriptor subtypes */ -#define AUDIO_CONTROL_HEADER 0x01U -#define AUDIO_CONTROL_INPUT_TERMINAL 0x02U -#define AUDIO_CONTROL_OUTPUT_TERMINAL 0x03U -#define AUDIO_CONTROL_MIXER_UNIT 0x04U -#define AUDIO_CONTROL_SELECTOR_UNIT 0x05U -#define AUDIO_CONTROL_FEATURE_UNIT 0x06U -#define AUDIO_CONTROL_PROCESSING_UNIT 0x07U -#define AUDIO_CONTROL_EXTENSION_UNIT 0x08U - -#define AUDIO_INPUT_TERMINAL_DESC_SIZE 0x0CU -#define AUDIO_OUTPUT_TERMINAL_DESC_SIZE 0x09U -#define AUDIO_STREAMING_INTERFACE_DESC_SIZE 0x07U - -#define AUDIO_CONTROL_MUTE 0x0001U - -#define AUDIO_FORMAT_TYPE_I 0x01U -#define AUDIO_FORMAT_TYPE_III 0x03U - -#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01U -#define AUDIO_ENDPOINT_GENERAL 0x01U - -#define AUDIO_REQ_GET_CUR 0x81U -#define AUDIO_REQ_SET_CUR 0x01U - -#define AUDIO_OUT_STREAMING_CTRL 0x02U - -#define PACKET_SIZE(freq) (((freq) * 2U) * 2U / 1000U) - -#define AUDIO_PACKET_SIZE(frq) (uint8_t)(PACKET_SIZE(frq) & 0xFFU), \ - (uint8_t)((PACKET_SIZE(frq) >> 8U) & 0xFFU) - -#define SAMPLE_FREQ(frq) (uint8_t)(frq), (uint8_t)((frq) >> 8U), \ - (uint8_t)((frq) >> 16U) - - -#pragma pack(1) - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< header descriptor subtype */ - uint16_t bcdADC; /*!< audio device class specification release number in binary-coded decimal */ - uint16_t wTotalLength; /*!< total number of bytes */ - uint8_t bInCollection; /*!< the number of the streaming interfaces */ - uint8_t baInterfaceNr; /*!< interface number of the streaming interfaces */ -} usb_desc_AC_itf; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< AS_GENERAL descriptor subtype */ - uint8_t bTerminalLink; /*!< the terminal ID */ - uint8_t bDelay; /*!< delay introduced by the data path */ - uint16_t wFormatTag; /*!< the audio data format */ -} usb_desc_AS_itf; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< INPUT_TERMINAL descriptor subtype. */ - uint8_t bTerminalID; /*!< constant uniquely identifying the terminal within the audio function */ - uint16_t wTerminalType; /*!< constant characterizing the type of terminal */ - uint8_t bAssocTerminal; /*!< ID of the output terminal */ - uint8_t bNrChannels; /*!< number of logical output channels */ - uint16_t wChannelConfig; /*!< describes the spatial location of the logical channels */ - uint8_t iChannelNames; /*!< index of a string descriptor */ - uint8_t iTerminal; /*!< index of a string descriptor */ -} usb_desc_input_terminal; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< OUTPUT_TERMINAL descriptor subtype */ - uint8_t bTerminalID; /*!< constant uniquely identifying the terminal within the audio function */ - uint16_t wTerminalType; /*!< constant characterizing the type of terminal */ - uint8_t bAssocTerminal; /*!< constant, identifying the input terminal to which this output terminal is associated */ - uint8_t bSourceID; /*!< ID of the unit or terminal */ - uint8_t iTerminal; /*!< index of a string descriptor */ -} usb_desc_output_terminal; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< FEATURE_UNIT descriptor subtype */ - uint8_t bUnitID; /*!< constant uniquely identifying the unit within the audio function */ - uint8_t bSourceID; /*!< ID of the unit or terminal */ - uint8_t bControlSize; /*!< size in bytes of an element of the bmaControls() array */ - uint8_t bmaControls0; /*!< a bit set to 1 indicates that the mentioned control is supported for master channel 0 */ - uint8_t bmaControls1; /*!< a bit set to 1 indicates that the mentioned control is supported for logical channel 1 */ - uint8_t iFeature; /*!< index of a string descriptor */ -} usb_desc_mono_feature_unit; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< FEATURE_UNIT descriptor subtype */ - uint8_t bUnitID; /*!< constant uniquely identifying the unit within the audio function */ - uint8_t bSourceID; /*!< ID of the unit or terminal */ - uint8_t bControlSize; /*!< size in bytes of an element of the bmaControls() array */ - uint16_t bmaControls0; /*!< a bit set to 1 indicates that the mentioned control is supported for master channel 0 */ - uint16_t bmaControls1; /*!< a bit set to 1 indicates that the mentioned control is supported for logical channel 1 */ - uint16_t bmaControls2; /*!< a bit set to 1 indicates that the mentioned control is supported for logical channel 2 */ - uint8_t iFeature; /*!< index of a string descriptor */ -} usb_desc_stereo_feature_unit; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< FORMAT_TYPE descriptor subtype */ - uint8_t bFormatType; /*!< constant identifying the format type */ - uint8_t bNrChannels; /*!< indicates the number of physical channels in the audio data stream */ - uint8_t bSubFrameSize; /*!< the number of bytes occupied by one audio sub-frame */ - uint8_t bBitResolution; /*!< the number of effectively used bits from the available bits in an audio sub-frame */ - uint8_t bSamFreqType; /*!< indicates how the sampling frequency can be programmed */ - uint8_t bSamFreq[3]; /*!< sampling frequency ns in Hz for this isochronous data endpoint */ -} usb_desc_format_type; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bEndpointAddress; /*!< the address of the endpoint */ - uint8_t bmAttributes; /*!< transfer type and synchronization type */ - uint16_t wMaxPacketSize; /*!< maximum packet size this endpoint is capable of sending or receiving */ - uint8_t bInterval; /*!< left to the designer's discretion */ - uint8_t bRefresh; /*!< reset to 0 */ - uint8_t bSynchAddress; /*!< reset to 0 */ -} usb_desc_std_ep; - -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bDescriptorSubtype; /*!< EP_GENERAL descriptor subtype */ - uint8_t bmAttributes; /*!< transfer type and synchronization type */ - uint8_t bLockDelayUnits; /*!< indicates the units used for the wLockDelay field */ - uint16_t wLockDelay; /*!< indicates the time it takes this endpoint to reliably lock its internal clock recovery circuitry */ -} usb_desc_AS_ep; - -#pragma pack() - -/* USB configuration descriptor structure */ -typedef struct -{ - usb_desc_config config; - usb_desc_itf std_itf; - usb_desc_AC_itf ac_itf; - usb_desc_input_terminal in_terminal; - usb_desc_mono_feature_unit feature_unit; - usb_desc_output_terminal out_terminal; - usb_desc_itf std_as_itf_zeroband; - usb_desc_itf std_as_itf_opera; - usb_desc_AS_itf as_itf; - usb_desc_format_type format_typeI; - usb_desc_std_ep std_endpoint; - usb_desc_AS_ep as_endpoint; -} usb_desc_config_set; - -typedef struct -{ - /* main buffer for audio data out transfers and its relative pointers */ - uint8_t isoc_out_buff[TOTAL_OUT_BUF_SIZE * 2U]; - uint8_t* isoc_out_wrptr; - uint8_t* isoc_out_rdptr; - - /* main buffer for audio control requests transfers and its relative variables */ - uint8_t audioctl[64]; - uint8_t audioctl_unit; - uint32_t audioctl_len; - - uint32_t play_flag; -} usbd_audio_handler; - -extern usb_desc audio_desc; -extern usb_class audio_class; - -#endif /* __AUDIO_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Include/audio_out_itf.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Include/audio_out_itf.h deleted file mode 100644 index f7d50aa..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Include/audio_out_itf.h +++ /dev/null @@ -1,76 +0,0 @@ -/*! - \file audio_out_itf.h - \brief audio OUT (playback) interface header file - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __AUDIO_OUT_ITF_H -#define __AUDIO_OUT_ITF_H - -#include "usbd_conf.h" - -/* audio commands enumeration */ -typedef enum -{ - AUDIO_CMD_PLAY = 1U, - AUDIO_CMD_PAUSE, - AUDIO_CMD_STOP, -}audio_cmd_enum; - -/* mute commands */ -#define AUDIO_MUTE 0x01U -#define AUDIO_UNMUTE 0x00U - -/* functions return value */ -#define AUDIO_OK 0x00U -#define AUDIO_FAIL 0xFFU - -/* audio machine states */ -#define AUDIO_STATE_INACTIVE 0x00U -#define AUDIO_STATE_ACTIVE 0x01U -#define AUDIO_STATE_PLAYING 0x02U -#define AUDIO_STATE_PAUSED 0x03U -#define AUDIO_STATE_STOPPED 0x04U -#define AUDIO_STATE_ERROR 0x05U - -typedef struct { - uint8_t (*audio_init) (uint32_t audio_freq, uint32_t volume, uint32_t options); - uint8_t (*audio_deinit) (uint32_t options); - uint8_t (*audio_cmd) (uint8_t* pbuf, uint32_t size, uint8_t cmd); - uint8_t (*audio_volume_ctl) (uint8_t vol); - uint8_t (*audio_mute_ctl) (uint8_t cmd); - uint8_t (*audio_periodic_tc) (uint8_t cmd); - uint8_t (*audio_state_get) (void); -} audio_fops_struct; - -extern audio_fops_struct audio_out_fops; - -#endif /* __AUDIO_OUT_ITF_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Source/audio_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Source/audio_core.c deleted file mode 100644 index 0cad6ac..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Source/audio_core.c +++ /dev/null @@ -1,549 +0,0 @@ -/*! - \file audio_core.c - \brief USB audio device class core functions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "audio_out_itf.h" -#include "audio_core.h" -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x9574U - -/* local function prototypes ('static') */ -static uint8_t usbd_audio_sof (usb_dev *udev); -static uint8_t audio_init (usb_dev *udev, uint8_t config_index); -static uint8_t audio_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t audio_req_handler (usb_dev *udev, usb_req *req); -static uint8_t audio_ctlx_out (usb_dev *udev); -static void audio_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class audio_class = { - .init = audio_init, - .deinit = audio_deinit, - .req_process = audio_req_handler, - .ctlx_out = audio_ctlx_out, - .data_out = audio_data_out -}; - -usbd_int_cb_struct usb_inthandler = -{ - usbd_audio_sof, -}; - -/* note:it should use the c99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev audio_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -/* USB device configuration descriptor */ -usb_desc_config_set audio_config_set = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = AUDIO_CONFIG_DESC_SET_LEN, - .bNumInterfaces = 0x02U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0xC0U, - .bMaxPower = 0x32U - }, - - .std_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x00U, - .bInterfaceClass = USB_CLASS_AUDIO, - .bInterfaceSubClass = AUDIO_SUBCLASS_CONTROL, - .bInterfaceProtocol = AUDIO_PROTOCOL_UNDEFINED, - .iInterface = 0x00U - }, - - .ac_itf = - { - .header = - { - .bLength = sizeof(usb_desc_AC_itf), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = 0x01U, - .bcdADC = 0x0100U, - .wTotalLength = 0x0027U, - .bInCollection = 0x01U, - .baInterfaceNr = 0x01U - }, - - .in_terminal = - { - .header = - { - .bLength = sizeof(usb_desc_input_terminal), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = 0x02U, - .bTerminalID = 0x01U, - .wTerminalType = 0x0101U, - .bAssocTerminal = 0x00U, - .bNrChannels = 0x01U, - .wChannelConfig = 0x0000U, - .iChannelNames = 0x00U, - .iTerminal = 0x00U - }, - - .feature_unit = - { - .header = - { - .bLength = sizeof(usb_desc_mono_feature_unit), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = AUDIO_CONTROL_FEATURE_UNIT, - .bUnitID = AUDIO_OUT_STREAMING_CTRL, - .bSourceID = 0x01U, - .bControlSize = 0x01U, - .bmaControls0 = AUDIO_CONTROL_MUTE, - .bmaControls1 = 0x00U, - .iFeature = 0x00U - }, - - .out_terminal = - { - .header = - { - .bLength = sizeof(usb_desc_output_terminal), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = AUDIO_CONTROL_OUTPUT_TERMINAL, - .bTerminalID = 0x03U, - .wTerminalType = 0x0301U, - .bAssocTerminal = 0x00U, - .bSourceID = 0x02U, - .iTerminal = 0x00U - }, - - .std_as_itf_zeroband = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x01U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x00U, - .bInterfaceClass = USB_CLASS_AUDIO, - .bInterfaceSubClass = AUDIO_SUBCLASS_AUDIOSTREAMING, - .bInterfaceProtocol = AUDIO_PROTOCOL_UNDEFINED, - .iInterface = 0x00U - }, - - .std_as_itf_opera = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x01U, - .bAlternateSetting = 0x01U, - .bNumEndpoints = 0x01U, - .bInterfaceClass = USB_CLASS_AUDIO, - .bInterfaceSubClass = AUDIO_SUBCLASS_AUDIOSTREAMING, - .bInterfaceProtocol = AUDIO_PROTOCOL_UNDEFINED, - .iInterface = 0x00U - }, - - .as_itf = - { - .header = - { - .bLength = sizeof(usb_desc_AS_itf), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = AUDIO_STREAMING_GENERAL, - .bTerminalLink = 0x01U, - .bDelay = 0x01U, - .wFormatTag = 0x0001U, - }, - - .format_typeI = - { - .header = - { - .bLength = sizeof(usb_desc_format_type), - .bDescriptorType = AUDIO_DESCTYPE_INTERFACE - }, - .bDescriptorSubtype = AUDIO_STREAMING_FORMAT_TYPE, - .bFormatType = AUDIO_FORMAT_TYPE_III, - .bNrChannels = 0x02U, - .bSubFrameSize = 0x02U, - .bBitResolution = 0x10U, - .bSamFreqType = 0x01U, - .bSamFreq[0] = (uint8_t)USBD_AUDIO_FREQ_16K, - .bSamFreq[1] = USBD_AUDIO_FREQ_16K >> 8, - .bSamFreq[2] = USBD_AUDIO_FREQ_16K >> 16 - }, - - .std_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_std_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = AUDIO_OUT_EP, - .bmAttributes = USB_ENDPOINT_TYPE_ISOCHRONOUS, - .wMaxPacketSize = PACKET_SIZE(USBD_AUDIO_FREQ_16K), - .bInterval = 0x01U, - .bRefresh = 0x00U, - .bSynchAddress = 0x00U - }, - - .as_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_AS_ep), - .bDescriptorType = AUDIO_DESCTYPE_ENDPOINT - }, - .bDescriptorSubtype = AUDIO_ENDPOINT_GENERAL, - .bmAttributes = 0x00U, - .bLockDelayUnits = 0x00U, - .wLockDelay = 0x0000U, - } -}; - -/* USB language ID descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(14U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'A', 'u', 'd', 'i', 'o'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor */ -static uint8_t* usbd_audio_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc audio_desc = { - .dev_desc = (uint8_t *)&audio_dev_desc, - .config_desc = (uint8_t *)&audio_config_set, - .strings = usbd_audio_strings -}; - - -/*! - \brief initialize the audio device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t audio_init (usb_dev *udev, uint8_t config_index) -{ - usb_desc_std_ep std_ep = audio_config_set.std_endpoint; - - static usbd_audio_handler audio_handler; - - memset((void *)&audio_handler, 0, sizeof(usbd_audio_handler)); - - usb_desc_ep ep = { - .header = std_ep.header, - .bEndpointAddress = std_ep.bEndpointAddress, - .bmAttributes = std_ep.bmAttributes, - .wMaxPacketSize = std_ep.wMaxPacketSize, - .bInterval = std_ep.bInterval - }; - - /* initialize RX endpoint */ - usbd_ep_init(udev, EP_BUF_DBL, AUDIO_BUF_ADDR, &ep); - - usbd_int_fops = &usb_inthandler; - - audio_handler.isoc_out_rdptr = audio_handler.isoc_out_buff; - audio_handler.isoc_out_wrptr = audio_handler.isoc_out_buff; - - /* initialize the audio output hardware layer */ - if (USBD_OK != audio_out_fops.audio_init(USBD_AUDIO_FREQ_16K, DEFAULT_VOLUME, 0U)) { - return USBD_FAIL; - } - - udev->ep_transc[AUDIO_OUT_EP][TRANSC_OUT] = audio_class.data_out; - - /* prepare out endpoint to receive audio data */ - usbd_ep_recev (udev, AUDIO_OUT_EP, (uint8_t*)audio_handler.isoc_out_buff, (uint16_t)AUDIO_OUT_PACKET); - - udev->class_data[USBD_AUDIO_INTERFACE] = (void *)&audio_handler; - - return USBD_OK; -} - -/*! - \brief de-initialize the audio device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t audio_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize audio endpoints */ - usbd_ep_deinit(udev, AUDIO_OUT_EP); - - /* deinitialize the audio output hardware layer */ - if (USBD_OK != audio_out_fops.audio_deinit(0U)) { - return USBD_FAIL; - } - - return USBD_OK; -} - -/*! - \brief handle the audio class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t audio_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - usbd_audio_handler *audio = (usbd_audio_handler *)udev->class_data[USBD_AUDIO_INTERFACE]; - - switch (req->bRequest) { - case AUDIO_REQ_GET_CUR: - usb_transc_config(&udev->transc_in[0], audio->audioctl, req->wLength, 0U); - - status = REQ_SUPP; - break; - - case AUDIO_REQ_SET_CUR: - if (req->wLength) { - usb_transc_config(&udev->transc_out[0], audio->audioctl, req->wLength, 0U); - - udev->class_core->req_cmd = AUDIO_REQ_SET_CUR; - - audio->audioctl_len = req->wLength; - audio->audioctl_unit = BYTE_HIGH(req->wIndex); - - status = REQ_SUPP; - } - break; - - default: - break; - } - - return status; -} - -/*! - \brief handles the audio out data stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval USB device operation status -*/ -static void audio_data_out (usb_dev *udev, uint8_t ep_num) -{ - usbd_audio_handler *audio = (usbd_audio_handler *)udev->class_data[USBD_AUDIO_INTERFACE]; - - if (AUDIO_OUT_EP == ep_num) { - /* increment the Buffer pointer or roll it back when all buffers are full */ - if (audio->isoc_out_wrptr >= (audio->isoc_out_buff + (AUDIO_OUT_PACKET * OUT_PACKET_NUM))) { - /* all buffers are full: roll back */ - audio->isoc_out_wrptr = audio->isoc_out_buff; - } else { - /* increment the buffer pointer */ - audio->isoc_out_wrptr += AUDIO_OUT_PACKET; - } - - /* prepare out endpoint to receive next audio packet */ - usbd_ep_recev (udev, AUDIO_OUT_EP, (uint8_t*)(audio->isoc_out_wrptr), (uint16_t)AUDIO_OUT_PACKET); - - /* trigger the start of streaming only when half buffer is full */ - if ((0U == audio->play_flag) && (audio->isoc_out_wrptr >= (audio->isoc_out_buff + ((AUDIO_OUT_PACKET * OUT_PACKET_NUM) / 2U)))) { - /* enable start of streaming */ - audio->play_flag = 1U; - } - } -} - -/*! - \brief handles audio control request data - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -static uint8_t audio_ctlx_out (usb_dev *udev) -{ - usbd_audio_handler *audio = (usbd_audio_handler *)udev->class_data[USBD_AUDIO_INTERFACE]; - - /* check if an audio_control request has been issued */ - if (AUDIO_REQ_SET_CUR == udev->class_core->req_cmd) { - /* in this driver, to simplify code, only SET_CUR request is managed */ - - /* check for which addressed unit the audio_control request has been issued */ - if (AUDIO_OUT_STREAMING_CTRL == audio->audioctl_unit) { - /* in this driver, to simplify code, only one unit is manage */ - - /* call the audio interface mute function */ - audio_out_fops.audio_mute_ctl(audio->audioctl[0]); - - /* reset the audioctl_cmd variable to prevent re-entering this function */ - udev->class_core->req_cmd = 0U; - - audio->audioctl_len = 0U; - } - } - - return USBD_OK; -} - -/*! - \brief handles the SOF event (data buffer update and synchronization) - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -static uint8_t usbd_audio_sof (usb_dev *udev) -{ - usbd_audio_handler *audio = (usbd_audio_handler *)udev->class_data[USBD_AUDIO_INTERFACE]; - - /* check if there are available data in stream buffer. - in this function, a single variable (play_flag) is used to avoid software delays. - the play operation must be executed as soon as possible after the SOF detection. */ - if (audio->play_flag) { - /* start playing received packet */ - audio_out_fops.audio_cmd((uint8_t*)(audio->isoc_out_rdptr), /* samples buffer pointer */ - AUDIO_OUT_PACKET, /* number of samples in Bytes */ - AUDIO_CMD_PLAY); /* command to be processed */ - - /* increment the Buffer pointer or roll it back when all buffers all full */ - if (audio->isoc_out_rdptr >= (audio->isoc_out_buff + (AUDIO_OUT_PACKET * OUT_PACKET_NUM))) { - /* roll back to the start of buffer */ - audio->isoc_out_rdptr = audio->isoc_out_buff; - } else { - /* increment to the next sub-buffer */ - audio->isoc_out_rdptr += AUDIO_OUT_PACKET; - } - - /* if all available buffers have been consumed, stop playing */ - if (audio->isoc_out_rdptr == audio->isoc_out_wrptr) { - /* pause the audio stream */ - audio_out_fops.audio_cmd((uint8_t*)(audio->isoc_out_buff), /* samples buffer pointer */ - AUDIO_OUT_PACKET, /* number of samples in Bytes */ - AUDIO_CMD_PAUSE); /* command to be processed */ - - /* stop entering play loop */ - audio->play_flag = 0U; - - /* reset buffer pointers */ - audio->isoc_out_rdptr = audio->isoc_out_buff; - audio->isoc_out_wrptr = audio->isoc_out_buff; - } - } - - return USBD_OK; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Source/audio_out_itf.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Source/audio_out_itf.c deleted file mode 100644 index f96925e..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/audio/Source/audio_out_itf.c +++ /dev/null @@ -1,242 +0,0 @@ -/*! - \file audio_out_itf.c - \brief audio OUT (playback) interface functions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "audio_core.h" -#include "audio_out_itf.h" - -/* local function prototypes ('static') */ -static uint8_t init (uint32_t audio_freq, uint32_t volume, uint32_t options); -static uint8_t deinit (uint32_t options); -static uint8_t audio_cmd (uint8_t* pbuf, uint32_t size, uint8_t cmd); -static uint8_t volume_ctl (uint8_t vol); -static uint8_t mute_ctl (uint8_t cmd); -static uint8_t periodic_tc (uint8_t cmd); -static uint8_t get_state (void); - -audio_fops_struct audio_out_fops = -{ - init, - deinit, - audio_cmd, - volume_ctl, - mute_ctl, - periodic_tc, - get_state -}; - -static uint8_t audio_state = AUDIO_STATE_INACTIVE; - -/*! - \brief initialize and configures all required resources for audio play function - \param[in] audio_freq: statrt_up audio frequency - \param[in] volume: start_up volume to be set - \param[in] options: specific options passed to low layer function - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t init (uint32_t audio_freq, uint32_t volume, uint32_t options) -{ - static uint32_t initialized = 0U; - - /* check if the low layer has already been initialized */ - if (0U == initialized) { - /* call low layer function */ - if (0U != eval_audio_init(OUTPUT_DEVICE_AUTO, volume, audio_freq)) { - audio_state = AUDIO_STATE_ERROR; - - return AUDIO_FAIL; - } - - /* set the initialization flag to prevent reinitializing the interface again */ - initialized = 1U; - } - - /* update the audio state machine */ - audio_state = AUDIO_STATE_ACTIVE; - - return AUDIO_OK; -} - -/*! - \brief free all resources used by low layer and stops audio-play function - \param[in] options: specific options passed to low layer function - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t deinit (uint32_t options) -{ - /* update the audio state machine */ - audio_state = AUDIO_STATE_INACTIVE; - - return AUDIO_OK; -} - -/*! - \brief play, stop, pause or resume current file - \param[in] pbuf: address from which file should be played - \param[in] size: size of the current buffer/file - \param[in] cmd: command to be executed, can be: - \arg AUDIO_CMD_PLAY - \arg AUDIO_CMD_PAUSE - \arg AUDIO_CMD_RESUME - \arg AUDIO_CMD_STOP - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t audio_cmd (uint8_t* pbuf, uint32_t size, uint8_t cmd) -{ - uint8_t status = AUDIO_OK; - - /* check the current state */ - if ((AUDIO_STATE_INACTIVE == audio_state) || (AUDIO_STATE_ERROR == audio_state)) { - audio_state = AUDIO_STATE_ERROR; - - return AUDIO_FAIL; - } - - switch (cmd) { - /* process the play command */ - case AUDIO_CMD_PLAY: - /* if current state is active or stopped */ - if ((AUDIO_STATE_ACTIVE == audio_state) || \ - (AUDIO_STATE_STOPPED == audio_state) || \ - (AUDIO_STATE_PLAYING == audio_state)) { - audio_mal_play((uint32_t)pbuf, (size / 2U)); - audio_state = AUDIO_STATE_PLAYING; - } else if (AUDIO_STATE_PAUSED == audio_state) { - if (eval_audio_pause_resume(AUDIO_RESUME, (uint32_t)pbuf, (size / 2U))) { - audio_state = AUDIO_STATE_ERROR; - - status = AUDIO_FAIL; - } else { - audio_state = AUDIO_STATE_PLAYING; - } - } else { - status = AUDIO_FAIL; - } - break; - - /* process the stop command */ - case AUDIO_CMD_STOP: - if (AUDIO_STATE_PLAYING != audio_state) { - /* unsupported command */ - status = AUDIO_FAIL; - } else if (eval_audio_stop(CODEC_PDWN_SW)) { - audio_state = AUDIO_STATE_ERROR; - - status = AUDIO_FAIL; - } else { - audio_state = AUDIO_STATE_STOPPED; - } - break; - - /* process the pause command */ - case AUDIO_CMD_PAUSE: - if (AUDIO_STATE_PLAYING != audio_state) { - /* unsupported command */ - status = AUDIO_FAIL; - } else if (eval_audio_pause_resume(AUDIO_PAUSE, (uint32_t)pbuf, (size / 2U))) { - audio_state = AUDIO_STATE_ERROR; - - status = AUDIO_FAIL; - } else { - audio_state = AUDIO_STATE_PAUSED; - } - break; - - /* unsupported command */ - default: - break; - } - - return status; -} - -/*! - \brief set the volume level - \param[in] vol: volume level to be set in % (from 0% to 100%) - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t volume_ctl (uint8_t vol) -{ - /* call low layer volume setting function */ - if (eval_audio_volume_ctl(vol)) { - audio_state = AUDIO_STATE_ERROR; - - return AUDIO_FAIL; - } - - return AUDIO_OK; -} - -/*! - \brief mute or unmute the audio current output - \param[in] cmd: can be 0 to unmute, or 1 to mute - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t mute_ctl (uint8_t cmd) -{ - /* call low layer mute setting function */ - if (eval_audio_mute((uint32_t)cmd)) { - audio_state = AUDIO_STATE_ERROR; - - return AUDIO_FAIL; - } - - return AUDIO_OK; -} - -/*! - \brief periodic transfer control - \param[in] cmd: command - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t periodic_tc (uint8_t cmd) -{ - return AUDIO_OK; -} - -/*! - \brief return the current state of the audio machine - \param[in] none - \param[out] none - \retval AUDIO_OK if all operations succeed, otherwise, AUDIO_FAIL. -*/ -static uint8_t get_state (void) -{ - return audio_state; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/cdc/Include/cdc_acm_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/cdc/Include/cdc_acm_core.h deleted file mode 100644 index c0bac07..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/cdc/Include/cdc_acm_core.h +++ /dev/null @@ -1,163 +0,0 @@ -/*! - \file cdc_acm_core.h - \brief the header file of cdc acm driver - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __CDC_ACM_CORE_H -#define __CDC_ACM_CORE_H - -#include "usbd_enum.h" - -/* communications device class code */ -#define USB_CLASS_CDC 0x02U - -/* CDC subclass code */ -#define USB_CDC_SUBCLASS_DLCM 0x01U -#define USB_CDC_SUBCLASS_ACM 0x02U - -/* communications interface class control protocol codes */ -#define USB_CDC_PROTOCOL_NONE 0x00U -#define USB_CDC_PROTOCOL_AT 0x01U - -/* data interface class code */ -#define USB_CLASS_DATA 0x0AU - -#define USB_DESCTYPE_CDC_ACM 0x21U -#define USB_DESCTYPE_CS_INTERFACE 0x24U - -#define USB_CDC_ACM_CONFIG_DESC_SIZE 0x43U - -/* class-specific notification codes for PSTN subclasses */ -#define USB_CDC_NOTIFY_SERIAL_STATE 0x20U - -/* class-specific request codes */ -#define SEND_ENCAPSULATED_COMMAND 0x00U -#define GET_ENCAPSULATED_RESPONSE 0x01U -#define SET_COMM_FEATURE 0x02U -#define GET_COMM_FEATURE 0x03U -#define CLEAR_COMM_FEATURE 0x04U -#define SET_LINE_CODING 0x20U -#define GET_LINE_CODING 0x21U -#define SET_CONTROL_LINE_STATE 0x22U -#define SEND_BREAK 0x23U -#define NO_CMD 0xFFU - -#pragma pack(1) - -/* CDC ACM line coding struct */ -typedef struct { - uint32_t dwDTERate; /*!< data terminal rate */ - uint8_t bCharFormat; /*!< stop bits */ - uint8_t bParityType; /*!< parity */ - uint8_t bDataBits; /*!< data bits */ -} acm_line; - -/* notification structure */ -typedef struct { - uint8_t bmRequestType; /*!< type of request */ - uint8_t bNotification; /*!< communication interface class notifications */ - uint16_t wValue; /*!< value of notification */ - uint16_t wIndex; /*!< index of interface */ - uint16_t wLength; /*!< length of notification data */ -} acm_notification; - -/* header function struct */ -typedef struct { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint8_t bDescriptorSubtype; /*!< bDescriptorSubtype: header function descriptor */ - uint16_t bcdCDC; /*!< bcdCDC: low byte of spec release number (CDC1.10) */ -} usb_desc_header_func; - -/* call managment function struct */ -typedef struct { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint8_t bDescriptorSubtype; /*!< bDescriptorSubtype: call management function descriptor */ - uint8_t bmCapabilities; /*!< bmCapabilities: D0 is reset, D1 is ignored */ - uint8_t bDataInterface; /*!< bDataInterface: 1 interface used for call management */ -} usb_desc_call_managment_func; - -/* acm function struct */ -typedef struct { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint8_t bDescriptorSubtype; /*!< bDescriptorSubtype: abstract control management descriptor */ - uint8_t bmCapabilities; /*!< bmCapabilities: D1 */ -} usb_desc_acm_func; - -/* union function struct */ -typedef struct { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint8_t bDescriptorSubtype; /*!< bDescriptorSubtype: union function descriptor */ - uint8_t bMasterInterface; /*!< bMasterInterface: communication class interface */ - uint8_t bSlaveInterface0; /*!< bSlaveInterface0: data class interface */ -} usb_desc_union_func; - -#pragma pack() -/* configuration descriptor struct */ -typedef struct { - usb_desc_config config; - usb_desc_itf cmd_itf; - usb_desc_header_func cdc_header; - usb_desc_call_managment_func cdc_call_managment; - usb_desc_acm_func cdc_acm; - usb_desc_union_func cdc_union; - usb_desc_ep cdc_cmd_endpoint; - usb_desc_itf cdc_data_interface; - usb_desc_ep cdc_out_endpoint; - usb_desc_ep cdc_in_endpoint; -} usb_cdc_desc_config_set; - -#define USB_CDC_RX_LEN 64U - -typedef struct { - uint8_t pre_packet_send; - uint8_t packet_sent; - uint8_t packet_receive; - - uint8_t data[USB_CDC_RX_LEN]; - - uint32_t receive_length; - - acm_line line_coding; -} usb_cdc_handler; - -extern usb_desc cdc_desc; -extern usb_class cdc_class; - -/* function declarations */ -/* receive CDC ACM data */ -void cdc_acm_data_receive(usb_dev *udev); -/* send CDC ACM data */ -void cdc_acm_data_send(usb_dev *udev); -/* check cdc acm is ready for data transfer */ -uint8_t cdc_acm_check_ready(usb_dev *udev); - -#endif /* __CDC_ACM_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/cdc/Source/cdc_acm_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/cdc/Source/cdc_acm_core.c deleted file mode 100644 index 04738ce..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/cdc/Source/cdc_acm_core.c +++ /dev/null @@ -1,510 +0,0 @@ -/*! - \file cdc_acm_core.c - \brief CDC ACM driver - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "cdc_acm_core.h" - -#define USBD_VID 0x28E9U -#define USBD_PID 0x018AU - -/* note:it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev cdc_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV, - }, - .bcdUSB = 0x0200U, - .bDeviceClass = USB_CLASS_CDC, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM, -}; - -/* USB device configuration descriptor */ -usb_cdc_desc_config_set cdc_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG, - }, - .wTotalLength = USB_CDC_ACM_CONFIG_DESC_SIZE, - .bNumInterfaces = 0x02U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0x80U, - .bMaxPower = 0x32U - }, - - .cmd_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x01U, - .bInterfaceClass = USB_CLASS_CDC, - .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM, - .bInterfaceProtocol = USB_CDC_PROTOCOL_AT, - .iInterface = 0x00U - }, - - .cdc_header = - { - .header = - { - .bLength = sizeof(usb_desc_header_func), - .bDescriptorType = USB_DESCTYPE_CS_INTERFACE - }, - .bDescriptorSubtype = 0x00U, - .bcdCDC = 0x0110U - }, - - .cdc_call_managment = - { - .header = - { - .bLength = sizeof(usb_desc_call_managment_func), - .bDescriptorType = USB_DESCTYPE_CS_INTERFACE - }, - .bDescriptorSubtype = 0x01U, - .bmCapabilities = 0x00U, - .bDataInterface = 0x01U - }, - - .cdc_acm = - { - .header = - { - .bLength = sizeof(usb_desc_acm_func), - .bDescriptorType = USB_DESCTYPE_CS_INTERFACE - }, - .bDescriptorSubtype = 0x02U, - .bmCapabilities = 0x02U, - }, - - .cdc_union = - { - .header = - { - .bLength = sizeof(usb_desc_union_func), - .bDescriptorType = USB_DESCTYPE_CS_INTERFACE - }, - .bDescriptorSubtype = 0x06U, - .bMasterInterface = 0x00U, - .bSlaveInterface0 = 0x01U, - }, - - .cdc_cmd_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP, - }, - .bEndpointAddress = CDC_CMD_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = CDC_ACM_CMD_PACKET_SIZE, - .bInterval = 0x0AU - }, - - .cdc_data_interface = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF, - }, - .bInterfaceNumber = 0x01U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_CLASS_DATA, - .bInterfaceSubClass = 0x00U, - .bInterfaceProtocol = USB_CDC_PROTOCOL_NONE, - .iInterface = 0x00U - }, - - .cdc_out_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP, - }, - .bEndpointAddress = CDC_OUT_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = CDC_ACM_DATA_PACKET_SIZE, - .bInterval = 0x00U - }, - - .cdc_in_endpoint = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = CDC_IN_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = CDC_ACM_DATA_PACKET_SIZE, - .bInterval = 0x00U - } -}; - -/* USB language ID descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'C', 'D', 'C', '_', 'A', 'C', 'M'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor set */ -uint8_t* usbd_cdc_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc cdc_desc = { - .dev_desc = (uint8_t *)&cdc_dev_desc, - .config_desc = (uint8_t *)&cdc_config_desc, - .strings = usbd_cdc_strings -}; - -/* local function prototypes ('static') */ -static uint8_t cdc_acm_init (usb_dev *udev, uint8_t config_index); -static uint8_t cdc_acm_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t cdc_acm_req_handler (usb_dev *udev, usb_req *req); -static uint8_t cdc_acm_ctlx_out (usb_dev *udev); -static void cdc_acm_data_in (usb_dev *udev, uint8_t ep_num); -static void cdc_acm_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class cdc_class = { - .req_cmd = NO_CMD, - - .init = cdc_acm_init, - .deinit = cdc_acm_deinit, - .req_process = cdc_acm_req_handler, - .ctlx_out = cdc_acm_ctlx_out, - .data_in = cdc_acm_data_in, - .data_out = cdc_acm_data_out -}; - -/*! - \brief receive CDC ACM data - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -void cdc_acm_data_receive(usb_dev *udev) -{ - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - cdc->packet_receive = 0U; - cdc->pre_packet_send = 0U; - - usbd_ep_recev(udev, CDC_OUT_EP, (uint8_t*)(cdc->data), USB_CDC_RX_LEN); -} - -/*! - \brief send CDC ACM data - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -void cdc_acm_data_send (usb_dev *udev) -{ - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - uint32_t data_len = cdc->receive_length; - - if ((0U != data_len) && (1U == cdc->packet_sent)) { - cdc->packet_sent = 0U; - usbd_ep_send(udev, CDC_IN_EP, (uint8_t*)(cdc->data), (uint16_t)data_len); - cdc->receive_length = 0U; - } -} - -/*! - \brief check cdc acm is ready for data transfer - \param[in] udev: pointer to USB device instance - \param[out] none - \retval 0 if CDC is ready, 5 otherwise -*/ -uint8_t cdc_acm_check_ready(usb_dev *udev) -{ - if (udev->class_data[CDC_COM_INTERFACE] != NULL) { - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - if ((1U == cdc->packet_receive) && (1U == cdc->pre_packet_send)) { - return 0U; - } - } - - return 5U; -} - -/*! - \brief initialize the CDC ACM device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t cdc_acm_init (usb_dev *udev, uint8_t config_index) -{ - static usb_cdc_handler cdc_handler; - - /* initialize the data endpoints */ - usbd_ep_init(udev, EP_BUF_SNG, BULK_TX_ADDR, &(cdc_config_desc.cdc_in_endpoint)); - usbd_ep_init(udev, EP_BUF_SNG, BULK_RX_ADDR, &(cdc_config_desc.cdc_out_endpoint)); - - /* initialize the command endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, INT_TX_ADDR, &(cdc_config_desc.cdc_cmd_endpoint)); - - udev->ep_transc[EP_ID(CDC_IN_EP)][TRANSC_IN] = cdc_class.data_in; - udev->ep_transc[CDC_OUT_EP][TRANSC_OUT] = cdc_class.data_out; - - /* initialize cdc handler structure */ - cdc_handler.packet_receive = 0U; - cdc_handler.packet_sent = 1U; - cdc_handler.pre_packet_send = 1U; - cdc_handler.receive_length = 0U; - - cdc_handler.line_coding = (acm_line){ - .dwDTERate = 115200U, - .bCharFormat = 0U, - .bParityType = 0U, - .bDataBits = 0x08U - }; - - udev->class_data[CDC_COM_INTERFACE] = (void *)&cdc_handler; - - return USBD_OK; -} - -/*! - \brief de-initialize the CDC ACM device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t cdc_acm_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize the data endpoints */ - usbd_ep_deinit(udev, CDC_IN_EP); - usbd_ep_deinit(udev, CDC_OUT_EP); - - /* deinitialize the command endpoint */ - usbd_ep_deinit(udev, CDC_CMD_EP); - - return USBD_OK; -} - -/*! - \brief command data received on control endpoint - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -static uint8_t cdc_acm_ctlx_out (usb_dev *udev) -{ - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - if (NO_CMD != udev->class_core->req_cmd) { - cdc->packet_receive = 1U; - cdc->pre_packet_send = 1U; - - udev->class_core->req_cmd = NO_CMD; - } - - return USBD_OK; -} - - -/*! - \brief handle CDC ACM data in transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval USB device operation status -*/ -static void cdc_acm_data_in (usb_dev *udev, uint8_t ep_num) -{ - usb_transc *transc = &udev->transc_in[ep_num]; - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - if (transc->xfer_count == transc->max_len) { - usbd_ep_send(udev, EP_ID(ep_num), NULL, 0U); - } else { - cdc->packet_sent = 1U; - cdc->pre_packet_send = 1U; - } -} - -/*! - \brief handle CDC ACM data out transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval USB device operation status -*/ -static void cdc_acm_data_out (usb_dev *udev, uint8_t ep_num) -{ - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - cdc->packet_receive = 1U; - - cdc->receive_length = udev->transc_out[ep_num].xfer_count; -} - -/*! - \brief handle the CDC ACM class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t cdc_acm_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP, noti_buf[10] = {0U}; - usb_cdc_handler *cdc = (usb_cdc_handler *)udev->class_data[CDC_COM_INTERFACE]; - - acm_notification *notif = (void *)noti_buf; - - switch (req->bRequest) { - case SEND_ENCAPSULATED_COMMAND: - break; - - case GET_ENCAPSULATED_RESPONSE: - break; - - case SET_COMM_FEATURE: - break; - - case GET_COMM_FEATURE: - break; - - case CLEAR_COMM_FEATURE: - break; - - case SET_LINE_CODING: - /* set the value of the current command to be processed */ - udev->class_core->req_cmd = req->bRequest; - - usb_transc_config(&udev->transc_out[0U], (uint8_t *)&cdc->line_coding, req->wLength, 0U); - - status = REQ_SUPP; - break; - - case GET_LINE_CODING: - usb_transc_config(&udev->transc_in[0U], (uint8_t *)&cdc->line_coding, 7U, 0U); - - status = REQ_SUPP; - break; - - case SET_CONTROL_LINE_STATE: - notif->bmRequestType = 0xA1U; - notif->bNotification = USB_CDC_NOTIFY_SERIAL_STATE; - notif->wIndex = 0U; - notif->wValue = 0U; - notif->wLength = 2U; - noti_buf[8] = (uint8_t)req->wValue & 3U; - noti_buf[9] = 0U; - - status = REQ_SUPP; - break; - - case SEND_BREAK: - break; - - default: - break; - } - - return status; -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/dfu/Include/dfu_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/dfu/Include/dfu_core.h deleted file mode 100644 index 81650b3..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/dfu/Include/dfu_core.h +++ /dev/null @@ -1,179 +0,0 @@ -/*! - \file dfu_core.h - \brief the header file of USB DFU device class core functions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __DFU_CORE_H -#define __DFU_CORE_H - -#include "usbd_enum.h" - -/* DFU class code */ -#define USB_DFU_CLASS 0xFEU - -/* DFU subclass code */ -#define USB_DFU_SUBCLASS_UPGRADE 0x01U - -/* DFU protocol code */ -#define USB_DFU_PROTOCL_RUNTIME 0x01U -#define USB_DFU_PROTOCL_DFU 0x02U - -/* manifestation state */ -#define MANIFEST_COMPLETE 0x00U -#define MANIFEST_IN_PROGRESS 0x01U - -/* DFU attributes code */ -#define USB_DFU_CAN_DOWNLOAD 0x01U -#define USB_DFU_CAN_UPLOAD 0x02U -#define USB_DFU_MANIFEST_TOLERANT 0x04U -#define USB_DFU_WILL_DETACH 0x08U - -/* special commands with download request */ -#define GET_COMMANDS 0x00U -#define SET_ADDRESS_POINTER 0x21U -#define ERASE 0x41U - -/* memory operation command */ -#define CMD_ERASE 0U -#define CMD_WRITE 1U - -#define _BYTE1(x) (uint8_t)((x) & 0xFFU) /*!< addressing cycle 1st byte */ -#define _BYTE2(x) (uint8_t)(((x) & 0xFF00U) >> 8U) /*!< addressing cycle 2nd byte */ -#define _BYTE3(x) (uint8_t)(((x) & 0xFF0000U) >> 16U) /*!< addressing cycle 3rd byte */ - -#define SET_POLLING_TIMEOUT(x) do { \ - dfu->bwPollTimeout0 = _BYTE1(x);\ - dfu->bwPollTimeout1 = _BYTE2(x);\ - dfu->bwPollTimeout2 = _BYTE3(x);\ - } while(0) - -#define FLASH_ERASE_TIMEOUT 60U -#define FLASH_WRITE_TIMEOUT 80U - -/* bit detach capable = bit 3 in bmAttributes field */ -#define DFU_DETACH_MASK (uint8_t)(0x10U) -#define USB_DFU_CONFIG_DESC_SIZE (18U + (9U * USBD_ITF_MAX_NUM)) -#define DFU_DESC_TYPE 0x21U - -/* DFU device state enumeration */ -typedef enum { - STATE_APP_IDLE = 0x00U, - STATE_APP_DETACH, - STATE_DFU_IDLE, - STATE_DFU_DNLOAD_SYNC, - STATE_DFU_DNBUSY, - STATE_DFU_DNLOAD_IDLE, - STATE_DFU_MANIFEST_SYNC, - STATE_DFU_MANIFEST, - STATE_DFU_MANIFEST_WAIT_RESET, - STATE_DFU_UPLOAD_IDLE, - STATE_DFU_ERROR -} dfu_state; - -/* DFU device status enumeration */ -typedef enum { - STATUS_OK = 0x00U, - STATUS_ERR_TARGET, - STATUS_ERR_FILE, - STATUS_ERR_WRITE, - STATUS_ERR_ERASE, - STATUS_ERR_CHECK_ERASED, - STATUS_ERR_PROG, - STATUS_ERR_VERIFY, - STATUS_ERR_ADDRESS, - STATUS_ERR_NOTDONE, - STATUS_ERR_FIRMWARE, - STATUS_ERR_VENDOR, - STATUS_ERR_USBR, - STATUS_ERR_POR, - STATUS_ERR_UNKNOWN, - STATUS_ERR_STALLEDPKT -} dfu_status; - -/* DFU class-specific requests enumeration */ -typedef enum { - DFU_DETACH = 0U, - DFU_DNLOAD, - DFU_UPLOAD, - DFU_GETSTATUS, - DFU_CLRSTATUS, - DFU_GETSTATE, - DFU_ABORT, - DFU_REQ_MAX -} dfu_requests; - -#pragma pack(1) - -/* USB DFU function descriptor struct */ -typedef struct -{ - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bmAttributes; /*!< DFU attributes */ - uint16_t wDetachTimeOut; /*!< time, in milliseconds, that the device will wait after receipt of the DFU_DETACH request. If */ - uint16_t wTransferSize; /*!< maximum number of bytes that the device can accept per control-write transaction */ - uint16_t bcdDFUVersion; /*!< numeric expression identifying the version of the DFU specification release. */ -} usb_desc_dfu_func; - -#pragma pack() - -/* USB configuration descriptor struct */ -typedef struct -{ - usb_desc_config config; - usb_desc_itf dfu_itf; - usb_desc_dfu_func dfu_func; -} usb_dfu_desc_config_set; - -/* USB DFU handler struct */ -typedef struct -{ - uint8_t bStatus; - uint8_t bwPollTimeout0; - uint8_t bwPollTimeout1; - uint8_t bwPollTimeout2; - uint8_t bState; - uint8_t iString; - - uint8_t manifest_state; - uint16_t data_len; - uint16_t block_num; - uint32_t base_addr; - - uint8_t buf[TRANSFER_SIZE]; -} usbd_dfu_handler; - -typedef void (*app_func) (void); - -extern usb_desc dfu_desc; -extern usb_class dfu_class; - -#endif /* __DFU_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/dfu/Source/dfu_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/dfu/Source/dfu_core.c deleted file mode 100644 index 158f11f..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/dfu/Source/dfu_core.c +++ /dev/null @@ -1,674 +0,0 @@ -/*! - \file dfu_core.c - \brief USB DFU device class core functions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "dfu_core.h" -#include "systick.h" - -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x0189U - -/* local function prototypes ('static') */ -static uint8_t dfu_init (usb_dev *udev, uint8_t config_index); -static uint8_t dfu_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t dfu_req_handler (usb_dev *udev, usb_req *req); -static uint8_t dfu_ctlx_in (usb_dev *udev); - -/* DFU requests management functions */ -static void dfu_detach (usb_dev *udev, usb_req *req); -static void dfu_dnload (usb_dev *udev, usb_req *req); -static void dfu_upload (usb_dev *udev, usb_req *req); -static void dfu_getstatus (usb_dev *udev, usb_req *req); -static void dfu_clrstatus (usb_dev *udev, usb_req *req); -static void dfu_getstate (usb_dev *udev, usb_req *req); -static void dfu_abort (usb_dev *udev, usb_req *req); -static void dfu_mode_leave (usb_dev *udev); -static uint8_t dfu_getstatus_complete (usb_dev *udev); - -static void (*dfu_request_process[])(usb_dev *udev, usb_req *req) = -{ - [DFU_DETACH] = dfu_detach, - [DFU_DNLOAD] = dfu_dnload, - [DFU_UPLOAD] = dfu_upload, - [DFU_GETSTATUS] = dfu_getstatus, - [DFU_CLRSTATUS] = dfu_clrstatus, - [DFU_GETSTATE] = dfu_getstate, - [DFU_ABORT] = dfu_abort -}; - -/* note:it should use the c99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev dfu_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -/* USB device configuration descriptor */ -usb_dfu_desc_config_set dfu_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_DFU_CONFIG_DESC_SIZE, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0x80U, - .bMaxPower = 0x32U - }, - - .dfu_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x00U, - .bInterfaceClass = USB_DFU_CLASS, - .bInterfaceSubClass = USB_DFU_SUBCLASS_UPGRADE, - .bInterfaceProtocol = USB_DFU_PROTOCL_DFU, - .iInterface = 0x00U - }, - - .dfu_func = - { - .header = - { - .bLength = sizeof(usb_desc_dfu_func), - .bDescriptorType = DFU_DESC_TYPE - }, - .bmAttributes = USB_DFU_CAN_DOWNLOAD | USB_DFU_CAN_UPLOAD | USB_DFU_WILL_DETACH, - .wDetachTimeOut = 0x00FFU, - .wTransferSize = TRANSFER_SIZE, - .bcdDFUVersion = 0x011AU, - }, -}; - -/* USB language ID descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'D', 'F', 'U'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(2U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB config string */ -static usb_desc_str config_string = -{ - .header = - { - .bLength = USB_STRING_LEN(15U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', ' ', 'U', 'S', 'B', ' ', 'C', 'O', 'N', 'F', 'I', 'G'} -}; - -static usb_desc_str interface_string = -{ - .header = - { - .bLength = USB_STRING_LEN(15U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'@', 'I', 'n', 't', 'e', 'r', 'n', 'a', 'l', 'F', 'l', 'a', 's', 'h', ' ', '/', '0', 'x', '0', '8', '0', '0', - '0', '0', '0', '0', '/', '1', '6', '*', '0', '0', '1', 'K', 'a', ',', '4', '8', '*', '0', '0', '1', 'K', 'g'} -}; - -uint8_t* usbd_dfu_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string, - [STR_IDX_CONFIG] = (uint8_t *)&config_string, - [STR_IDX_ITF] = (uint8_t *)&interface_string -}; - -usb_desc dfu_desc = { - .dev_desc = (uint8_t *)&dfu_dev_desc, - .config_desc = (uint8_t *)&dfu_config_desc, - .strings = usbd_dfu_strings -}; - -usb_class dfu_class = { - .init = dfu_init, - .deinit = dfu_deinit, - .req_process = dfu_req_handler, - .ctlx_in = dfu_ctlx_in -}; - -/*! - \brief initialize the USB DFU device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t dfu_init (usb_dev *udev, uint8_t config_index) -{ - static usbd_dfu_handler dfu_handler; - - /* unlock the internal flash */ - fmc_unlock(); - - systick_config(); - - memset((void *)&dfu_handler, 0, sizeof(usbd_dfu_handler)); - - dfu_handler.base_addr = APP_LOADED_ADDR; - dfu_handler.manifest_state = MANIFEST_COMPLETE; - dfu_handler.bState = STATE_DFU_IDLE; - dfu_handler.bStatus = STATUS_OK; - - udev->class_data[USBD_DFU_INTERFACE] = (void *)&dfu_handler; - - return USBD_OK; -} - -/*! - \brief de-initialize the USB DFU device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t dfu_deinit (usb_dev *udev, uint8_t config_index) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - /* restore device default state */ - memset(udev->class_data[USBD_DFU_INTERFACE], 0, sizeof(usbd_dfu_handler)); - - dfu->bState = STATE_DFU_IDLE; - dfu->bStatus = STATUS_OK; - - /* lock the internal flash */ - fmc_lock(); - - return USBD_OK; -} - -/*! - \brief handle the USB DFU class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t dfu_req_handler (usb_dev *udev, usb_req *req) -{ - if (req->bRequest < DFU_REQ_MAX) { - dfu_request_process[req->bRequest](udev, req); - } else { - return USBD_FAIL; - } - - return USBD_OK; -} - -/*! - \brief handle data stage - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status -*/ -static uint8_t dfu_ctlx_in (usb_dev *udev) -{ - dfu_getstatus_complete(udev); - - return USBD_OK; -} - -/*! - \brief handle data in stage in control endpoint 0 - \param[in] udev: pointer to USB device instance - \param[out] none - \retval USB device operation status - */ -static uint8_t dfu_getstatus_complete (usb_dev *udev) -{ - uint32_t addr; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - if (STATE_DFU_DNBUSY == dfu->bState) { - /* decode the special command */ - if (0U == dfu->block_num) { - if (1U == dfu->data_len){ - if (GET_COMMANDS == dfu->buf[0]) { - /* no operation */ - } - } else if (5U == dfu->data_len) { - if (SET_ADDRESS_POINTER == dfu->buf[0]) { - /* set flash operation address */ - dfu->base_addr = *(uint32_t *)(dfu->buf + 1U); - } else if (ERASE == dfu->buf[0]) { - dfu->base_addr = *(uint32_t *)(dfu->buf + 1U); - - fmc_page_erase(dfu->base_addr); - } else { - /* no operation */ - } - } else { - /* no operation */ - } - } else if (dfu->block_num > 1U) { /* regular download command */ - /* preform the write operation */ - uint32_t idx = 0U; - - /* decode the required address */ - addr = (dfu->block_num - 2U) * TRANSFER_SIZE + dfu->base_addr; - - if (dfu->data_len & 0x03U) { /* not an aligned data */ - for (idx = dfu->data_len; idx < ((dfu->data_len & 0xFFFCU) + 4U); idx++) { - dfu->buf[idx] = 0xFFU; - } - } - - /* data received are word multiple */ - for (idx = 0U; idx < dfu->data_len; idx += 4U) { - fmc_word_program(addr, *(uint32_t *)(dfu->buf + idx)); - - addr += 4U; - } - - dfu->block_num = 0U; - } else { - /* no operation */ - } - - dfu->data_len = 0U; - - /* update the device state and poll timeout */ - dfu->bState = STATE_DFU_DNLOAD_SYNC; - - return USBD_OK; - } else if (STATE_DFU_MANIFEST == dfu->bState) { /* manifestation in progress */ - /* start leaving DFU mode */ - dfu_mode_leave(udev); - } else { - /* no operation */ - } - - return USBD_OK; -} - -/*! - \brief handle the DFU_DETACH request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none. -*/ -static void dfu_detach(usb_dev *udev, usb_req *req) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - switch (dfu->bState) { - case STATE_DFU_IDLE: - case STATE_DFU_DNLOAD_SYNC: - case STATE_DFU_DNLOAD_IDLE: - case STATE_DFU_MANIFEST_SYNC: - case STATE_DFU_UPLOAD_IDLE: - dfu->bStatus = STATUS_OK; - dfu->bState = STATE_DFU_IDLE; - dfu->iString = 0U; /* iString */ - - dfu->block_num = 0U; - dfu->data_len = 0U; - break; - - default: - break; - } - - /* check the detach capability in the DFU functional descriptor */ - if (dfu_config_desc.dfu_func.wDetachTimeOut & DFU_DETACH_MASK) { - usbd_disconnect(udev); - - usbd_connect(udev); - } else { - /* wait for the period of time specified in detach request */ - delay_1ms(4U); - } -} - -/*! - \brief handle the DFU_DNLOAD request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_dnload(usb_dev *udev, usb_req *req) -{ - usb_transc *transc = &udev->transc_out[0]; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - switch (dfu->bState) { - case STATE_DFU_IDLE: - case STATE_DFU_DNLOAD_IDLE: - if (req->wLength > 0U) { - /* update the global length and block number */ - dfu->block_num = req->wValue; - dfu->data_len = req->wLength; - - dfu->bState = STATE_DFU_DNLOAD_SYNC; - - transc->xfer_len = dfu->data_len; - transc->xfer_buf = dfu->buf; - transc->xfer_count = 0U; - } else { - dfu->manifest_state = MANIFEST_IN_PROGRESS; - dfu->bState = STATE_DFU_MANIFEST_SYNC; - } - break; - - default: - break; - } -} - -/*! - \brief handles the DFU UPLOAD request. - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_upload (usb_dev *udev, usb_req *req) -{ - uint8_t *phy_addr = NULL; - uint32_t addr = 0U; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - if(req->wLength <= 0U) { - dfu->bState = STATE_DFU_IDLE; - - return; - } - - usb_transc *transc = &udev->transc_in[0]; - - switch (dfu->bState) { - case STATE_DFU_IDLE: - case STATE_DFU_UPLOAD_IDLE: - /* update the global length and block number */ - dfu->block_num = req->wValue; - dfu->data_len = req->wLength; - - /* DFU get command */ - if (0U == dfu->block_num) { - /* update the state machine */ - dfu->bState = (dfu->data_len > 3U) ? STATE_DFU_IDLE : STATE_DFU_UPLOAD_IDLE; - - /* store the values of all supported commands */ - dfu->buf[0] = GET_COMMANDS; - dfu->buf[1] = SET_ADDRESS_POINTER; - dfu->buf[2] = ERASE; - - /* send the status data over EP0 */ - transc->xfer_buf = &(dfu->buf[0]); - transc->xfer_len = 3U; - } else if (dfu->block_num > 1U) { - dfu->bState = STATE_DFU_UPLOAD_IDLE; - - /* change is accelerated */ - addr = (dfu->block_num - 2U) * TRANSFER_SIZE + dfu->base_addr; - - /* return the physical address where data are stored */ - phy_addr = (uint8_t *)(addr); - - /* send the status data over EP0 */ - transc->xfer_buf = phy_addr; - transc->xfer_len = dfu->data_len; - } else { - dfu->bState = STATUS_ERR_STALLEDPKT; - } - break; - - default: - dfu->data_len = 0U; - dfu->block_num = 0U; - break; - } -} - -/*! - \brief handle the DFU_GETSTATUS request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_getstatus (usb_dev *udev, usb_req *req) -{ - usb_transc *transc = &udev->transc_in[0]; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - switch (dfu->bState) { - case STATE_DFU_DNLOAD_SYNC: - if (0U != dfu->data_len) { - dfu->bState = STATE_DFU_DNBUSY; - - if (0U == dfu->block_num) { - if (ERASE == dfu->buf[0]) { - SET_POLLING_TIMEOUT(FLASH_ERASE_TIMEOUT); - } else { - SET_POLLING_TIMEOUT(FLASH_WRITE_TIMEOUT); - } - } - } else { - dfu->bState = STATE_DFU_DNLOAD_IDLE; - } - break; - - case STATE_DFU_MANIFEST_SYNC: - if (MANIFEST_IN_PROGRESS == dfu->manifest_state) { - dfu->bState = STATE_DFU_MANIFEST; - dfu->bwPollTimeout0 = 1U; - } else if ((MANIFEST_COMPLETE == dfu->manifest_state) && \ - (dfu_config_desc.dfu_func.bmAttributes & 0x04U)){ - dfu->bState = STATE_DFU_IDLE; - dfu->bwPollTimeout0 = 0U; - } else { - /* no operation */ - } - break; - - default: - break; - } - - /* send the status data of DFU interface to host over EP0 */ - transc->xfer_buf = (uint8_t *)&(dfu->bStatus); - transc->xfer_len = 6U; -} - -/*! - \brief handle the DFU_CLRSTATUS request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_clrstatus (usb_dev *udev, usb_req *req) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - if (STATE_DFU_ERROR == dfu->bState) { - dfu->bStatus = STATUS_OK; - dfu->bState = STATE_DFU_IDLE; - } else { - /* state error */ - dfu->bStatus = STATUS_ERR_UNKNOWN; - dfu->bState = STATE_DFU_ERROR; - } - - dfu->iString = 0U; /* iString: index = 0 */ -} - -/*! - \brief handle the DFU_GETSTATE request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_getstate (usb_dev *udev, usb_req *req) -{ - usb_transc *transc = &udev->transc_in[0]; - - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - /* send the current state of the DFU interface to host */ - transc->xfer_buf = &(dfu->bState); - transc->xfer_len = 1U; -} - -/*! - \brief handle the DFU_ABORT request - \param[in] udev: pointer to USB device instance - \param[in] req: DFU class request - \param[out] none - \retval none -*/ -static void dfu_abort (usb_dev *udev, usb_req *req) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - switch (dfu->bState){ - case STATE_DFU_IDLE: - case STATE_DFU_DNLOAD_SYNC: - case STATE_DFU_DNLOAD_IDLE: - case STATE_DFU_MANIFEST_SYNC: - case STATE_DFU_UPLOAD_IDLE: - dfu->bStatus = STATUS_OK; - dfu->bState = STATE_DFU_IDLE; - dfu->iString = 0U; /* iString: index = 0 */ - - dfu->block_num = 0U; - dfu->data_len = 0U; - break; - - default: - break; - } -} - -/*! - \brief leave DFU mode and reset device to jump to user loaded code - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void dfu_mode_leave (usb_dev *udev) -{ - usbd_dfu_handler *dfu = (usbd_dfu_handler *)udev->class_data[USBD_DFU_INTERFACE]; - - dfu->manifest_state = MANIFEST_COMPLETE; - - if (dfu_config_desc.dfu_func.bmAttributes & 0x04U) { - dfu->bState = STATE_DFU_MANIFEST_SYNC; - } else { - dfu->bState = STATE_DFU_MANIFEST_WAIT_RESET; - - /* lock the internal flash */ - fmc_lock(); - - /* generate system reset to allow jumping to the user code */ - NVIC_SystemReset(); - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/custom_hid_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/custom_hid_core.h deleted file mode 100644 index 002fdbd..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/custom_hid_core.h +++ /dev/null @@ -1,67 +0,0 @@ -/*! - \file custom_hid_core.h - \brief definitions for HID core - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __CUSTOM_HID_CORE_H -#define __CUSTOM_HID_CORE_H - -#include "usbd_enum.h" -#include "usb_hid.h" - -#define DESC_LEN_REPORT 96U -#define DESC_LEN_CONFIG 41U - -#define MAX_PERIPH_NUM 4U - -typedef struct { - uint8_t data[2]; - - uint8_t reportID; - uint8_t idlestate; - uint8_t protocol; -} custom_hid_handler; - -typedef struct { - void (*periph_config[MAX_PERIPH_NUM])(void); -} hid_fop_handler; - -extern usb_desc custom_hid_desc; -extern usb_class custom_hid_class; - -/* function declarations */ -/* register HID interface operation functions */ -uint8_t custom_hid_itfop_register (usb_dev *udev, hid_fop_handler *hid_fop); -/* send custom HID report */ -uint8_t custom_hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len); - -#endif /* __CUSTOM_HID_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/standard_hid_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/standard_hid_core.h deleted file mode 100644 index 49af721..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/standard_hid_core.h +++ /dev/null @@ -1,66 +0,0 @@ -/*! - \file standard_hid_core.h - \brief definitions for HID core - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __STANDARD_HID_CORE_H -#define __STANDARD_HID_CORE_H - -#include "usbd_enum.h" -#include "usb_hid.h" - -#define USB_HID_CONFIG_DESC_LEN 0x22U -#define USB_HID_REPORT_DESC_LEN 0x29U - -typedef struct { - uint32_t protocol; - uint32_t idle_state; - - uint8_t data[HID_IN_PACKET]; - __IO uint8_t prev_transfer_complete; -} standard_hid_handler; - -typedef struct { - void (*hid_itf_config) (void); - void (*hid_itf_data_process) (usb_dev *udev); -} hid_fop_handler; - -extern usb_desc hid_desc; -extern usb_class hid_class; - -/* function declarations */ -/* register HID interface operation functions */ -uint8_t hid_itfop_register (usb_dev *udev, hid_fop_handler *hid_fop); -/* send HID report */ -uint8_t hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len); - -#endif /* __STANDARD_HID_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/std_hid_mouse_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/std_hid_mouse_core.h deleted file mode 100644 index 895645d..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/std_hid_mouse_core.h +++ /dev/null @@ -1,69 +0,0 @@ -/*! - \file std_hid_mouse_core.h - \brief definitions for HID mouse core - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __STD_HID_MOUSE_CORE_H -#define __STD_HID_MOUSE_CORE_H - -#include "usbd_enum.h" -#include "usb_hid.h" - -#define USB_HID_CONFIG_DESC_LEN 0x22U -#define USB_HID_REPORT_DESC_LEN 0x34U - -#define MOUSE_LEFT_BUTTON 0x01U -#define MOUSE_RIGHT_BUTTON 0x02U - -typedef struct { - uint32_t protocol; - uint32_t idle_state; - - uint8_t data[HID_IN_PACKET]; - __IO uint8_t prev_transfer_complete; -} standard_mice_handler; - -typedef struct { - void (*mice_itf_config) (void); - void (*mice_itf_data_process) (usb_dev *udev); -} mice_fop_handler; - -extern usb_desc hid_mouse_desc; -extern usb_class hid_class; - -/* function declarations */ -/* register HID interface operation functions */ -uint8_t hid_itfop_register (usb_dev *udev, mice_fop_handler *hid_fop); -/* send mouse report */ -uint8_t hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len); - -#endif /* __STD_HID_MOUSE_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/usb_hid.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/usb_hid.h deleted file mode 100644 index 1bc77d1..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Include/usb_hid.h +++ /dev/null @@ -1,83 +0,0 @@ -/*! - \file usb_hid.h - \brief definitions for the USB HID class - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USB_HID_H -#define __USB_HID_H - -#include "usb_ch9_std.h" - -#define USB_HID_CLASS 0x03U - -#define USB_DESCTYPE_HID 0x21U -#define USB_DESCTYPE_REPORT 0x22U - -/* HID subclass code */ -#define USB_HID_SUBCLASS_BOOT_ITF 0x01U - -/* HID protocol codes */ -#define USB_HID_PROTOCOL_KEYBOARD 0x01U -#define USB_HID_PROTOCOL_MOUSE 0x02U - -#define GET_REPORT 0x01U -#define GET_IDLE 0x02U -#define GET_PROTOCOL 0x03U -#define SET_REPORT 0x09U -#define SET_IDLE 0x0AU -#define SET_PROTOCOL 0x0BU - -#pragma pack(1) - -typedef struct -{ - usb_desc_header header; /*!< regular descriptor header containing the descriptor's type and length */ - - uint16_t bcdHID; /*!< BCD encoded version that the HID descriptor and device complies to */ - uint8_t bCountryCode; /*!< country code of the localized device, or zero if universal */ - uint8_t bNumDescriptors; /*!< total number of HID report descriptors for the interface */ - uint8_t bDescriptorType; /*!< type of HID report */ - uint16_t wDescriptorLength; /*!< length of the associated HID report descriptor, in bytes */ -} usb_desc_hid; - -#pragma pack() - -typedef struct -{ - usb_desc_config config; - usb_desc_itf hid_itf; - usb_desc_hid hid_vendor; - usb_desc_ep hid_epin; - usb_desc_ep hid_epout; -} usb_hid_desc_config_set; - -#endif /* __USB_HID_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/custom_hid_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/custom_hid_core.c deleted file mode 100644 index 759f644..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/custom_hid_core.c +++ /dev/null @@ -1,503 +0,0 @@ -/*! - \file custom_hid_core.c - \brief custom HID class driver - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "custom_hid_core.h" -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x128AU - -/* Note:it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev custom_hid_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV, - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM, -}; - -usb_hid_desc_config_set custom_hid_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = DESC_LEN_CONFIG, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0x80U, - .bMaxPower = 0x32U - }, - - .hid_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_HID_CLASS, - .bInterfaceSubClass = 0x00U, - .bInterfaceProtocol = 0x00U, - .iInterface = 0x00U - }, - - .hid_vendor = - { - .header = - { - .bLength = sizeof(usb_desc_hid), - .bDescriptorType = USB_DESCTYPE_HID - }, - .bcdHID = 0x0111U, - .bCountryCode = 0x00U, - .bNumDescriptors = 0x01U, - .bDescriptorType = USB_DESCTYPE_REPORT, - .wDescriptorLength = DESC_LEN_REPORT, - }, - - .hid_epin = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = CUSTOMHID_IN_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = CUSTOMHID_IN_PACKET, - .bInterval = 0x20U - }, - - .hid_epout = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = CUSTOMHID_OUT_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = CUSTOMHID_OUT_PACKET, - .bInterval = 0x20U - } -}; - -/* USB language ID descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(14U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'C', 'u', 's', 't', 'o', 'm', 'H', 'I', 'D'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor set */ -uint8_t* usbd_hid_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc custom_hid_desc = { - .dev_desc = (uint8_t *)&custom_hid_dev_desc, - .config_desc = (uint8_t *)&custom_hid_config_desc, - .strings = usbd_hid_strings -}; - -/* local function prototypes ('static') */ -static uint8_t custom_hid_init (usb_dev *udev, uint8_t config_index); -static uint8_t custom_hid_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t custom_hid_req_handler (usb_dev *udev, usb_req *req); -static void custom_hid_data_in (usb_dev *udev, uint8_t ep_num); -static void custom_hid_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class custom_hid_class = { - .req_cmd = 0xFFU, - - .init = custom_hid_init, - .deinit = custom_hid_deinit, - .req_process = custom_hid_req_handler, - .data_in = custom_hid_data_in, - .data_out = custom_hid_data_out -}; - -const uint8_t customhid_report_descriptor[DESC_LEN_REPORT] = -{ - 0x06, 0x00, 0xFF, /* USAGE_PAGE (Vendor Defined: 0xFF00) */ - 0x09, 0x00, /* USAGE (Custom Device) */ - 0xa1, 0x01, /* COLLECTION (Application) */ - - /* led 1 */ - 0x85, 0x11, /* REPORT_ID (0x11) */ - 0x09, 0x01, /* USAGE (LED 1) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* led 2 */ - 0x85, 0x12, /* REPORT_ID (0x12) */ - 0x09, 0x02, /* USAGE (LED 2) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* led 3 */ - 0x85, 0x13, /* REPORT_ID (0x13) */ - 0x09, 0x03, /* USAGE (LED 3) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* led 4 */ - 0x85, 0x14, /* REPORT_ID (0x14) */ - 0x09, 0x04, /* USAGE (LED 4) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* wakeup key */ - 0x85, 0x15, /* REPORT_ID (0x15) */ - 0x09, 0x05, /* USAGE (Push Button) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x01, /* REPORT_SIZE (1) */ - 0x81, 0x02, /* INPUT (Data,Var,Abs,Vol) */ - - 0x75, 0x07, /* REPORT_SIZE (7) */ - 0x81, 0x03, /* INPUT (Cnst,Var,Abs,Vol) */ - - /* tamper key */ - 0x85, 0x16, /* REPORT_ID (0x16) */ - 0x09, 0x06, /* USAGE (Push Button) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x75, 0x01, /* REPORT_SIZE (1) */ - 0x81, 0x02, /* INPUT (Data,Var,Abs,Vol) */ - - 0x75, 0x07, /* REPORT_SIZE (7) */ - 0x81, 0x03, /* INPUT (Cnst,Var,Abs,Vol) */ - - 0xc0 /* END_COLLECTION */ -}; - -/*! - \brief register HID interface operation functions - \param[in] udev: pointer to USB device instance - \param[in] hid_fop: HID operation functions structure - \param[out] none - \retval USB device operation status -*/ -uint8_t custom_hid_itfop_register (usb_dev *udev, hid_fop_handler *hid_fop) -{ - if (NULL != hid_fop) { - udev->user_data = hid_fop; - - return USBD_OK; - } - - return USBD_FAIL; -} - -/*! - \brief send custom HID report - \param[in] udev: pointer to USB device instance - \param[in] report: pointer to HID report - \param[in] len: data length - \param[out] none - \retval USB device operation status -*/ -uint8_t custom_hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len) -{ - usbd_ep_send (udev, CUSTOMHID_IN_EP, report, len); - - return USBD_OK; -} - -/*! - \brief initialize the HID device - \param[in] pudev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t custom_hid_init (usb_dev *udev, uint8_t config_index) -{ - static custom_hid_handler hid_handler; - - memset((void *)&hid_handler, 0, sizeof(custom_hid_handler)); - - /* initialize the data endpoints */ - usbd_ep_init(udev, EP_BUF_SNG, HID_TX_ADDR, &(custom_hid_config_desc.hid_epin)); - usbd_ep_init(udev, EP_BUF_SNG, HID_RX_ADDR, &(custom_hid_config_desc.hid_epout)); - - usbd_ep_recev (udev, CUSTOMHID_OUT_EP, hid_handler.data, 2U); - - udev->ep_transc[EP_ID(CUSTOMHID_IN_EP)][TRANSC_IN] = custom_hid_class.data_in; - udev->ep_transc[EP_ID(CUSTOMHID_OUT_EP)][TRANSC_OUT] = custom_hid_class.data_out; - - udev->class_data[CUSTOM_HID_INTERFACE] = (void *)&hid_handler; - - if (udev->user_data != NULL) { - for (uint8_t i = 0U; i < MAX_PERIPH_NUM; i++) { - if (((hid_fop_handler *)udev->user_data)->periph_config[i] != NULL) { - ((hid_fop_handler *)udev->user_data)->periph_config[i](); - } - } - } - - return USBD_OK; -} - -/*! - \brief de-initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t custom_hid_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize HID endpoints */ - usbd_ep_deinit(udev, CUSTOMHID_IN_EP); - usbd_ep_deinit(udev, CUSTOMHID_OUT_EP); - - return USBD_OK; -} - -/*! - \brief handle the HID class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t custom_hid_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - custom_hid_handler *hid = (custom_hid_handler *)udev->class_data[CUSTOM_HID_INTERFACE]; - - switch (req->bRequest) { - case USB_GET_DESCRIPTOR: - if (USB_DESCTYPE_REPORT == (req->wValue >> 8)) { - usb_transc_config(&udev->transc_in[0], - (uint8_t *)customhid_report_descriptor, - USB_MIN(DESC_LEN_REPORT, req->wLength), - 0U); - - status = REQ_SUPP; - } - break; - - case GET_REPORT: - if (2U == req->wLength) { - usb_transc_config(&udev->transc_in[0], hid->data, 2U, 0U); - - status = REQ_SUPP; - } - break; - - case GET_IDLE: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&hid->idlestate, 1U, 0U); - - status = REQ_SUPP; - break; - - case GET_PROTOCOL: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&hid->protocol, 1U, 0U); - - status = REQ_SUPP; - break; - - case SET_REPORT: - hid->reportID = (uint8_t)(req->wValue); - - usb_transc_config(&udev->transc_out[0], hid->data, req->wLength, 0U); - - status = REQ_SUPP; - break; - - case SET_IDLE: - hid->idlestate = (uint8_t)(req->wValue >> 8); - - status = REQ_SUPP; - break; - - case SET_PROTOCOL: - hid->protocol = (uint8_t)(req->wValue); - - status = REQ_SUPP; - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle custom HID data in transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void custom_hid_data_in (usb_dev *udev, uint8_t ep_num) -{ - return; -} - -/*! - \brief handle custom HID data out transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void custom_hid_data_out (usb_dev *udev, uint8_t ep_num) -{ - custom_hid_handler *hid = (custom_hid_handler *)udev->class_data[CUSTOM_HID_INTERFACE]; - - if (CUSTOMHID_OUT_EP == ep_num){ - - switch (hid->data[0]){ - case 0x11: - if (RESET != hid->data[1]) { - /* turn on led1 */ - gd_eval_led_on(LED5); - } else { - gd_eval_led_off(LED5); - } - break; - case 0x12: - if (RESET != hid->data[1]) { - gd_eval_led_on(LED2); - } else { - gd_eval_led_off(LED2); - } - break; - case 0x13: - if (RESET != hid->data[1]) { - gd_eval_led_on(LED3); - } else { - gd_eval_led_off(LED3); - } - break; - case 0x14: - if (RESET != hid->data[1]) { - gd_eval_led_on(LED4); - } else { - gd_eval_led_off(LED4); - } - break; - default: - /* turn off all leds */ - gd_eval_led_off(LED5); - gd_eval_led_off(LED2); - gd_eval_led_off(LED3); - gd_eval_led_off(LED4); - break; - } - - usbd_ep_recev(udev, CUSTOMHID_IN_EP, hid->data, 2U); - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/standard_hid_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/standard_hid_core.c deleted file mode 100644 index 5dc6690..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/standard_hid_core.c +++ /dev/null @@ -1,420 +0,0 @@ -/*! - \file standard_hid_core.c - \brief HID class driver - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "standard_hid_core.h" - -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x0380U - -/* Note:it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev hid_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, -#ifdef LPM_ENABLED - .bcdUSB = 0x0201U, -#else - .bcdUSB = 0x0200U, -#endif /* LPM_ENABLED */ - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -#ifdef LPM_ENABLED - -/* BOS descriptor */ -uint8_t USBD_BOSDesc[USB_BOS_DESC_LEN] = -{ - 0x05, - USB_DESCTYPE_BOS, - 0x0C, - 0x00, - 0x01, /* 1 device capability descriptor */ - - /* device capability*/ - 0x07, - USB_DEVICE_CAPABITY, - 0x02, - 0x06, /* LPM capability bit set */ - 0x00, - 0x00, - 0x00 -}; - -#endif /* LPM_ENABLED */ - -usb_hid_desc_config_set hid_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_HID_CONFIG_DESC_LEN, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0xA0U, - .bMaxPower = 0x32U - }, - - .hid_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x01U, - .bInterfaceClass = USB_HID_CLASS, - .bInterfaceSubClass = USB_HID_SUBCLASS_BOOT_ITF, - .bInterfaceProtocol = USB_HID_PROTOCOL_KEYBOARD, - .iInterface = 0x00U - }, - - .hid_vendor = - { - .header = - { - .bLength = sizeof(usb_desc_hid), - .bDescriptorType = USB_DESCTYPE_HID - }, - .bcdHID = 0x0111U, - .bCountryCode = 0x00U, - .bNumDescriptors = 0x01U, - .bDescriptorType = USB_DESCTYPE_REPORT, - .wDescriptorLength = USB_HID_REPORT_DESC_LEN, - }, - - .hid_epin = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = HID_IN_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = HID_IN_PACKET, - .bInterval = 0x40U - } -}; - -/* USB language ID Descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(17U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'K', 'e', 'y', 'b', 'o', 'a', 'r', 'd'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -uint8_t* usbd_hid_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc hid_desc = { -#ifdef LPM_ENABLED - .bos_desc = (uint8_t *)&USBD_BOSDesc, -#endif /* LPM_ENABLED */ - .dev_desc = (uint8_t *)&hid_dev_desc, - .config_desc = (uint8_t *)&hid_config_desc, - .strings = usbd_hid_strings -}; - -/* local function prototypes ('static') */ -static uint8_t hid_init (usb_dev *udev, uint8_t config_index); -static uint8_t hid_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t hid_req_handler (usb_dev *udev, usb_req *req); -static void hid_data_in_handler (usb_dev *udev, uint8_t ep_num); - -usb_class hid_class = { - .init = hid_init, - .deinit = hid_deinit, - .req_process = hid_req_handler, - .data_in = hid_data_in_handler -}; - -const uint8_t hid_report_desc[USB_HID_REPORT_DESC_LEN] = -{ - 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ - 0x09, 0x06, /* USAGE (Keyboard) */ - 0xa1, 0x01, /* COLLECTION (Application) */ - - 0x05, 0x07, /* USAGE_PAGE (Keyboard/Keypad) */ - 0x19, 0xe0, /* USAGE_MINIMUM (Keyboard LeftControl) */ - 0x29, 0xe7, /* USAGE_MAXIMUM (Keyboard Right GUI) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x95, 0x08, /* REPORT_COUNT (8) */ - 0x75, 0x01, /* REPORT_SIZE (1) */ - 0x81, 0x02, /* INPUT (Data,Var,Abs) */ - - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x81, 0x03, /* INPUT (Cnst,Var,Abs) */ - - 0x95, 0x06, /* REPORT_COUNT (6) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x25, 0xFF, /* LOGICAL_MAXIMUM (255) */ - 0x19, 0x00, /* USAGE_MINIMUM (Reserved (no event indicated)) */ - 0x29, 0x65, /* USAGE_MAXIMUM (Keyboard Application) */ - 0x81, 0x00, /* INPUT (Data,Ary,Abs) */ - - 0xc0 /* END_COLLECTION */ -}; - -/*! - \brief register HID interface operation functions - \param[in] udev: pointer to USB device instance - \param[in] hid_fop: HID operation functions structure - \param[out] none - \retval USB device operation status -*/ -uint8_t hid_itfop_register (usb_dev *udev, hid_fop_handler *hid_fop) -{ - if (NULL != hid_fop) { - udev->user_data = (void *)hid_fop; - - return USBD_OK; - } - - return USBD_FAIL; -} - -/*! - \brief send keyboard report - \param[in] udev: pointer to USB device instance - \param[in] report: pointer to HID report - \param[in] len: data length - \param[out] none - \retval USB device operation status -*/ -uint8_t hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len) -{ - standard_hid_handler *hid = (standard_hid_handler *)udev->class_data[USBD_HID_INTERFACE]; - - /* check if USB is configured */ - hid->prev_transfer_complete = 0U; - - usbd_ep_send(udev, HID_IN_EP, report, len); - - return USBD_OK; -} - -/*! - \brief initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t hid_init (usb_dev *udev, uint8_t config_index) -{ - static standard_hid_handler hid_handler; - - memset((void *)&hid_handler, 0, sizeof(standard_hid_handler)); - - /* initialize Tx endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, INT_TX_ADDR, &(hid_config_desc.hid_epin)); - - udev->ep_transc[EP_ID(HID_IN_EP)][TRANSC_IN] = hid_class.data_in; - - hid_handler.prev_transfer_complete = 1U; - - udev->class_data[USBD_HID_INTERFACE] = (void *)&hid_handler; - - if (NULL != udev->user_data) { - ((hid_fop_handler *)udev->user_data)->hid_itf_config(); - } - - return USBD_OK; -} - -/*! - \brief de-initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t hid_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize HID endpoints */ - usbd_ep_deinit (udev, HID_IN_EP); - - return USBD_OK; -} - -/*! - \brief handle the HID class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t hid_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - standard_hid_handler *hid = (standard_hid_handler *)udev->class_data[USBD_HID_INTERFACE]; - - switch (req->bRequest) { - case GET_REPORT: - /* no use for this driver */ - break; - - case GET_IDLE: - usb_transc_config(&udev->transc_in[0U], (uint8_t *)&hid->idle_state, 1U, 0U); - - status = REQ_SUPP; - break; - - case GET_PROTOCOL: - usb_transc_config(&udev->transc_in[0U], (uint8_t *)&hid->protocol, 1U, 0U); - - status = REQ_SUPP; - break; - - case SET_REPORT: - /* no use for this driver */ - break; - - case SET_IDLE: - hid->idle_state = (uint8_t)(req->wValue >> 8); - - status = REQ_SUPP; - break; - - case SET_PROTOCOL: - hid->protocol = (uint8_t)(req->wValue); - - status = REQ_SUPP; - break; - - case USB_GET_DESCRIPTOR: - if (USB_DESCTYPE_REPORT == (req->wValue >> 8)) { - usb_transc_config(&udev->transc_in[0U], - (uint8_t *)hid_report_desc, - USB_MIN(USB_HID_REPORT_DESC_LEN, req->wLength), - 0U); - - status = REQ_SUPP; - } - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle data stage in DATA IN transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint identifier - \param[out] none - \retval none -*/ -static void hid_data_in_handler (usb_dev *udev, uint8_t ep_num) -{ - standard_hid_handler *hid = (standard_hid_handler *)udev->class_data[USBD_HID_INTERFACE]; - - if (hid->data[2]) { - hid->data[2] = 0x00U; - - usbd_ep_send(udev, HID_IN_EP, hid->data, HID_IN_PACKET); - } else { - hid->prev_transfer_complete = 1U; - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/std_hid_mouse_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/std_hid_mouse_core.c deleted file mode 100644 index 9dfc18d..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/hid/Source/std_hid_mouse_core.c +++ /dev/null @@ -1,425 +0,0 @@ -/*! - \file std_hid_mouse_core.c - \brief HID class driver - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "std_hid_mouse_core.h" - -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x0381U - -/* Note:it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev hid_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, -#ifdef LPM_ENABLED - .bcdUSB = 0x0201U, -#else - .bcdUSB = 0x0200U, -#endif /* LPM_ENABLED */ - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -#ifdef LPM_ENABLED - -/* BOS descriptor */ -uint8_t USBD_BOSDesc[USB_BOS_DESC_LEN] = -{ - 0x05, - USB_DESCTYPE_BOS, - 0x0C, - 0x00, - 0x01, /* 1 device capability descriptor */ - - /* device capability*/ - 0x07, - USB_DEVICE_CAPABITY, - 0x02, - 0x06, /* LPM capability bit set */ - 0x00, - 0x00, - 0x00 -}; - -#endif /* LPM_ENABLED */ - -usb_hid_desc_config_set hid_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_HID_CONFIG_DESC_LEN, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0xA0U, - .bMaxPower = 0x32U - }, - - .hid_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x01U, - .bInterfaceClass = USB_HID_CLASS, - .bInterfaceSubClass = USB_HID_SUBCLASS_BOOT_ITF, - .bInterfaceProtocol = USB_HID_PROTOCOL_MOUSE, - .iInterface = 0x00U - }, - - .hid_vendor = - { - .header = - { - .bLength = sizeof(usb_desc_hid), - .bDescriptorType = USB_DESCTYPE_HID - }, - .bcdHID = 0x0111U, - .bCountryCode = 0x00U, - .bNumDescriptors = 0x01U, - .bDescriptorType = USB_DESCTYPE_REPORT, - .wDescriptorLength = USB_HID_REPORT_DESC_LEN, - }, - - .hid_epin = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = HID_IN_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = HID_IN_PACKET, - .bInterval = 0x40U - } -}; - -/* USB language ID Descriptor */ -usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(14U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'M', 'o', 'u', 's', 'e'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -static uint8_t* usbd_hid_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc hid_mouse_desc = { - .dev_desc = (uint8_t *)&hid_dev_desc, - .config_desc = (uint8_t *)&hid_config_desc, - .strings = usbd_hid_strings -}; - -static uint8_t hid_init (usb_dev *udev, uint8_t config_index); -static uint8_t hid_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t hid_req_handler (usb_dev *udev, usb_req *req); - -static void hid_data_in_handler (usb_dev *udev, uint8_t ep_num); - -usb_class hid_class = { - .init = hid_init, - .deinit = hid_deinit, - .req_process = hid_req_handler, - .data_in = hid_data_in_handler -}; - -const uint8_t hid_report_desc[USB_HID_REPORT_DESC_LEN] = -{ - 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ - 0x09, 0x02, /* USAGE (Mouse) */ - 0xa1, 0x01, /* COLLECTION (Application) */ - 0x09, 0x01, /* USAGE (Pointer) */ - - 0xa1, 0x00, /* COLLECTION (Physical) */ - 0x05, 0x09, /* USAGE_PAGE (Button) */ - 0x19, 0x01, /* USAGE_MINIMUM (1) */ - 0x29, 0x03, /* USAGE_MAXIMUM (3) */ - - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ - 0x95, 0x03, /* REPORT_COUNT (3) */ - 0x75, 0x01, /* REPORT_SIZE (1) */ - 0x81, 0x02, /* INPUT (Data,Var,Abs) */ - - 0x95, 0x01, /* REPORT_COUNT (1) */ - 0x75, 0x05, /* REPORT_SIZE (5) */ - 0x81, 0x01, /* INPUT (Cnst,Var,Abs) */ - - 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ - 0x09, 0x30, /* USAGE (X) */ - 0x09, 0x31, /* USAGE (Y) */ - 0x09, 0x38, /* USAGE (Wheel) */ - - 0x15, 0x81, /* LOGICAL_MINIMUM (-127) */ - 0x25, 0x7F, /* LOGICAL_MAXIMUM (127) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x03, /* REPORT_COUNT (3) */ - 0x81, 0x06, /* INPUT (Data,Var,Rel) */ - 0xc0, /* END_COLLECTION */ - 0xc0 /* END_COLLECTION */ -}; - -/*! - \brief register HID interface operation functions - \param[in] udev: pointer to USB device instance - \param[in] hid_fop: HID operation functions structure - \param[out] none - \retval USB device operation status -*/ -uint8_t hid_itfop_register (usb_dev *udev, mice_fop_handler *hid_fop) -{ - if (NULL != hid_fop) { - udev->user_data = (void *)hid_fop; - - return USBD_OK; - } - - return USBD_FAIL; -} - -/*! - \brief send mouse report - \param[in] udev: pointer to USB device instance - \param[in] report: pointer to HID report - \param[in] len: data length - \param[out] none - \retval USB device operation status -*/ -uint8_t hid_report_send (usb_dev *udev, uint8_t *report, uint16_t len) -{ - standard_mice_handler *hid = (standard_mice_handler *)udev->class_data[USBD_HID_INTERFACE]; - - if(udev->cur_status == USBD_CONFIGURED){ - if(1U == hid->prev_transfer_complete){ - hid->prev_transfer_complete = 0U; - usbd_ep_send(udev, HID_IN_EP, report, len); - } - } - - return USBD_OK; -} - -/*! - \brief initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t hid_init (usb_dev *udev, uint8_t config_index) -{ - static standard_mice_handler mice_handler; - - memset((void *)&mice_handler, 0, sizeof(standard_mice_handler)); - - /* initialize Tx endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, INT_TX_ADDR, &(hid_config_desc.hid_epin)); - - udev->ep_transc[EP_ID(HID_IN_EP)][TRANSC_IN] = hid_class.data_in; - - mice_handler.prev_transfer_complete = 1U; - - udev->class_data[USBD_HID_INTERFACE] = (void *)&mice_handler; - - if (NULL != udev->user_data) { - ((mice_fop_handler *)(udev->user_data))->mice_itf_config(); - } - - return USBD_OK; -} - -/*! - \brief de-initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t hid_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize HID endpoints */ - usbd_ep_deinit (udev, HID_IN_EP); - - return USBD_OK; -} - -/*! - \brief handle the HID class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t hid_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - standard_mice_handler *hid = (standard_mice_handler *)udev->class_data[USBD_HID_INTERFACE]; - - switch (req->bRequest) { - case GET_REPORT: - /* no use for this driver */ - break; - - case GET_IDLE: - usb_transc_config(&udev->transc_in[0U], (uint8_t *)&hid->idle_state, 1U, 0U); - - status = REQ_SUPP; - break; - - case GET_PROTOCOL: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&hid->protocol, 1U, 0U); - - status = REQ_SUPP; - break; - - case SET_REPORT: - /* no use for this driver */ - break; - - case SET_IDLE: - hid->idle_state = (uint8_t)(req->wValue >> 8); - - status = REQ_SUPP; - break; - - case SET_PROTOCOL: - hid->protocol = (uint8_t)(req->wValue); - - status = REQ_SUPP; - break; - - case USB_GET_DESCRIPTOR: - if (USB_DESCTYPE_REPORT == (req->wValue >> 8)) { - usb_transc_config(&udev->transc_in[0U], - (uint8_t *)hid_report_desc, - USB_MIN(USB_HID_REPORT_DESC_LEN, req->wLength), - 0U); - - status = REQ_SUPP; - } - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle data stage in DATA IN transaction - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint identifier - \param[out] none - \retval none -*/ -static void hid_data_in_handler (usb_dev *udev, uint8_t ep_num) -{ - standard_mice_handler *hid = (standard_mice_handler *)udev->class_data[USBD_HID_INTERFACE]; - - if(hid->data[0] == 0U){ - hid->prev_transfer_complete = 1U; - }else{ - hid->data[0] = 0U; - usbd_ep_send(udev, HID_IN_EP, hid->data, HID_IN_PACKET); - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/iap/Include/usb_iap_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/iap/Include/usb_iap_core.h deleted file mode 100644 index 417d702..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/iap/Include/usb_iap_core.h +++ /dev/null @@ -1,82 +0,0 @@ -/*! - \file usb_iap_core.h - \brief the header file of IAP driver - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USB_IAP_CORE_H -#define __USB_IAP_CORE_H - -#include "usbd_enum.h" -#include "usb_hid.h" - -#define USB_DESC_LEN_IAP_REPORT 35U -#define USB_DESC_LEN_IAP_CONFIG_SET 41U - -/* special commands with download request */ -#define IAP_OPTION_BYTE 0x01U -#define IAP_ERASE 0x02U -#define IAP_DNLOAD 0x03U -#define IAP_LEAVE 0x04U -#define IAP_GETBIN_ADDRESS 0x05U - -typedef void (*app_func) (void); - -typedef struct -{ - uint8_t report_buf[IAP_OUT_PACKET + 1U]; - uint8_t option_byte[IAP_IN_PACKET]; - - /* state machine variables */ - uint8_t dev_status[IAP_IN_PACKET]; - uint8_t bin_addr[IAP_IN_PACKET]; - - uint8_t reportID; - uint8_t flag; - - uint32_t protocol; - uint32_t idlestate; - - uint16_t transfer_times; - uint16_t page_count; - uint16_t lps; /* last packet size */ - uint32_t file_length; - uint32_t base_address; -} usbd_iap_handler; - -extern usb_desc iap_desc; -extern usb_class iap_class; - -/* function declarations */ -/* send IAP report */ -uint8_t iap_report_send(usb_dev *udev, uint8_t *report, uint16_t len); - -#endif /* __USB_IAP_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/iap/Source/usb_iap_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/iap/Source/usb_iap_core.c deleted file mode 100644 index e0ff54b..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/iap/Source/usb_iap_core.c +++ /dev/null @@ -1,594 +0,0 @@ -/*! - \file usb_iap_core.c - \brief IAP driver - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "usb_iap_core.h" -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x028BU - -/* Note:it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev iap_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -usb_hid_desc_config_set iap_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_DESC_LEN_IAP_CONFIG_SET, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0x80U, - .bMaxPower = 0x32U - }, - - .hid_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_HID_CLASS, - .bInterfaceSubClass = 0x00U, - .bInterfaceProtocol = 0x01U, - .iInterface = 0x00U - }, - - .hid_vendor = - { - .header = - { - .bLength = sizeof(usb_desc_hid), - .bDescriptorType = USB_DESCTYPE_HID - }, - .bcdHID = 0x0111U, - .bCountryCode = 0x00U, - .bNumDescriptors = 0x01U, - .bDescriptorType = USB_DESCTYPE_REPORT, - .wDescriptorLength = USB_DESC_LEN_IAP_REPORT, - }, - - .hid_epin = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = IAP_IN_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = IAP_IN_PACKET, - .bInterval = 0x01U - }, - - .hid_epout = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = IAP_OUT_EP, - .bmAttributes = USB_EP_ATTR_INT, - .wMaxPacketSize = IAP_OUT_PACKET, - .bInterval = 0x01U - } -}; - -/* USB language ID Descriptor */ -usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'I', 'A', 'P'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(2U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -uint8_t* usbd_iap_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc iap_desc = { - .dev_desc = (uint8_t *)&iap_dev_desc, - .config_desc = (uint8_t *)&iap_config_desc, - .strings = usbd_iap_strings -}; - -/* local function prototypes ('static') */ -static uint8_t iap_init (usb_dev *udev, uint8_t config_index); -static uint8_t iap_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t iap_req_handler (usb_dev *udev, usb_req *req); -static void iap_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class iap_class = { - .init = iap_init, - .deinit = iap_deinit, - .req_process = iap_req_handler, - .data_out = iap_data_out -}; - -/* USB custom HID device report descriptor */ -const uint8_t iap_report_desc[USB_DESC_LEN_IAP_REPORT] = -{ - 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ - 0x09, 0x00, /* USAGE (Custom Device) */ - 0xa1, 0x01, /* COLLECTION (Application) */ - - /* IAP command and data */ - 0x85, 0x01, /* REPORT_ID (0x01) */ - 0x09, 0x01, /* USAGE (IAP command) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0xff, /* LOGICAL_MAXIMUM (255) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x3f, /* REPORT_COUNT (63) */ - 0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */ - - /* device status and option byte */ - 0x85, 0x02, /* REPORT_ID (0x02) */ - 0x09, 0x02, /* USAGE (Status and option byte) */ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ - 0x25, 0xff, /* LOGICAL_MAXIMUM (255) */ - 0x75, 0x08, /* REPORT_SIZE (8) */ - 0x95, 0x10, /* REPORT_COUNT (16) */ - 0x81, 0x82, /* INPUT (Data,Var,Abs,Vol) */ - - 0xc0 /* END_COLLECTION */ -}; - -/* IAP requests management functions */ -static void iap_req_erase (usb_dev *udev); -static void iap_req_dnload (usb_dev *udev); -static void iap_req_optionbyte(usb_dev *udev); -static void iap_req_leave (usb_dev *udev); -static void iap_address_send (usb_dev *udev); -static void iap_data_write (uint8_t *data, uint32_t addr, uint32_t len); - -/*! - \brief initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t iap_init (usb_dev *udev, uint8_t config_index) -{ - static usbd_iap_handler iap_handler; - - /* initialize Tx endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, INT_TX_ADDR, &(iap_config_desc.hid_epin)); - - /* initialize Rx endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, INT_RX_ADDR, &(iap_config_desc.hid_epout)); - - /* unlock the internal flash */ - fmc_unlock(); - - memset((void *)&iap_handler, 0, sizeof(usbd_iap_handler)); - - /* prepare receive Data */ - usbd_ep_recev(udev, IAP_OUT_EP, iap_handler.report_buf, IAP_OUT_PACKET); - - udev->ep_transc[EP_ID(IAP_OUT_EP)][TRANSC_OUT] = iap_class.data_out; - - iap_handler.base_address = APP_LOADED_ADDR; - - udev->class_data[USBD_IAP_INTERFACE] = (void *)&iap_handler; - - return USBD_OK; -} - -/*! - \brief de-initialize the HID device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t iap_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize HID endpoints */ - usbd_ep_deinit (udev, IAP_IN_EP); - usbd_ep_deinit (udev, IAP_OUT_EP); - - /* lock the internal flash */ - fmc_lock(); - - return USBD_OK; -} - -/*! - \brief handle the HID class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t iap_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - switch (req->bRequest) { - case GET_REPORT: - /* no use for this driver */ - break; - - case GET_IDLE: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&iap->idlestate, 1U, 0U); - - status = REQ_SUPP; - break; - - case GET_PROTOCOL: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&iap->protocol, 1U, 0U); - - status = REQ_SUPP; - break; - - case SET_REPORT: - iap->reportID = (uint8_t)(req->wValue); - - usb_transc_config(&udev->transc_out[0], iap->report_buf, req->wLength, 0U); - - status = REQ_SUPP; - break; - - case SET_IDLE: - iap->idlestate = (uint8_t)(req->wValue >> 8); - - status = REQ_SUPP; - break; - - case SET_PROTOCOL: - iap->protocol = (uint8_t)(req->wValue); - - status = REQ_SUPP; - break; - - case USB_GET_DESCRIPTOR: - if (USB_DESCTYPE_REPORT == (req->wValue >> 8)) { - usb_transc_config(&udev->transc_in[0], - (uint8_t *)iap_report_desc, - USB_MIN(USB_DESC_LEN_IAP_REPORT, req->wLength), - 0U); - - return REQ_SUPP; - } - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle data out stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void iap_data_out (usb_dev *udev ,uint8_t ep_num) -{ - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - if (0x01U == iap->report_buf[0]) { - switch(iap->report_buf[1]) { - case IAP_DNLOAD: - iap_req_dnload(udev); - break; - - case IAP_ERASE: - iap_req_erase(udev); - break; - - case IAP_OPTION_BYTE: - iap_req_optionbyte(udev); - break; - - case IAP_LEAVE: - iap_req_leave(udev); - break; - - case IAP_GETBIN_ADDRESS: - iap_address_send(udev); - break; - - default: - break; - } - } - - usbd_ep_recev(udev, IAP_OUT_EP, iap->report_buf, IAP_OUT_PACKET); -} - -/*! - \brief send iap report - \param[in] udev: pointer to USB device instance - \param[in] report: pointer to HID report - \param[in] len: data length - \param[out] none - \retval USB device operation status -*/ -uint8_t iap_report_send (usb_dev *udev, uint8_t *report, uint16_t len) -{ - usbd_ep_send (udev, IAP_IN_EP, report, len); - - return USBD_OK; -} - -/*! - \brief handle the IAP_DNLOAD request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_req_dnload (usb_dev *udev) -{ - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - if (0U != iap->transfer_times) { - if (1U == iap->transfer_times) { - if (0U == iap->lps) { - iap_data_write(&iap->report_buf[2], iap->base_address, TRANSFER_SIZE); - } else { - iap_data_write(&iap->report_buf[2], iap->base_address, iap->file_length % TRANSFER_SIZE); - iap->lps = 0U; - } - - iap->dev_status[0] = 0x02U; - iap->dev_status[1] = 0x02U; - iap_report_send (udev, iap->dev_status, IAP_IN_PACKET); - } else { - iap_data_write(&iap->report_buf[2], iap->base_address, TRANSFER_SIZE); - - iap->base_address += TRANSFER_SIZE; - } - - iap->transfer_times--; - } -} - -/*! - \brief handle the IAP_ERASE request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_req_erase (usb_dev *udev) -{ - uint32_t i, addr = 0U; - - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - /* get base address to erase */ - iap->base_address = iap->report_buf[2]; - iap->base_address |= (uint32_t)iap->report_buf[3] << 8; - iap->base_address |= (uint32_t)iap->report_buf[4] << 16; - iap->base_address |= (uint32_t)iap->report_buf[5] << 24; - - iap->page_count = iap->report_buf[6]; - - /* get file length */ - iap->file_length = iap->report_buf[7]; - iap->file_length |= (uint32_t)iap->report_buf[8] << 8; - iap->file_length |= (uint32_t)iap->report_buf[9] << 16; - iap->file_length |= (uint32_t)iap->report_buf[10] << 24; - - /* compute last packet size and transfer times */ - iap->lps = iap->file_length % TRANSFER_SIZE; - if (0U == iap->lps) { - iap->transfer_times = (uint16_t)iap->file_length / TRANSFER_SIZE; - } else { - iap->transfer_times = (uint16_t)iap->file_length / TRANSFER_SIZE + 1U; - } - - /* check if the address is in protected area */ - if (IS_PROTECTED_AREA(iap->base_address)) { - return; - } - - addr = iap->base_address; - - for (i = 0U; i < iap->page_count; i ++) { - /* call the standard flash erase-page function */ - fmc_page_erase(addr); - - addr += PAGE_SIZE; - } - - iap->dev_status[0] = 0x02U; - iap->dev_status[1] = 0x01U; - - usbd_ep_send(udev, IAP_IN_EP, iap->dev_status, IAP_IN_PACKET); -} - -/*! - \brief handle the IAP_OPTION_BYTE request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_req_optionbyte (usb_dev *udev) -{ - uint8_t i = 0U; - uint32_t address = 0x1FFFF800U; - - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - iap->option_byte[0] = 0x02U; - - for (i = 1U; i < 17U; i++) { - iap->option_byte[i] = *(uint8_t *)address; - address++; - } - - iap_report_send(udev, iap->option_byte, IAP_IN_PACKET); -} - -/*! - \brief handle the IAP_LEAVE request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_req_leave (usb_dev *udev) -{ - /* lock the internal flash */ - fmc_lock(); - - /* generate system reset to allow jumping to the user code */ - NVIC_SystemReset(); -} - -/*! - \brief handle the IAP_SEND_ADDRESS request - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void iap_address_send(usb_dev *udev) -{ - usbd_iap_handler *iap = (usbd_iap_handler *)udev->class_data[USBD_IAP_INTERFACE]; - - iap->bin_addr[0] = 0x02U; - - iap->bin_addr[1] = (uint8_t)(APP_LOADED_ADDR); - iap->bin_addr[2] = (uint8_t)(APP_LOADED_ADDR >> 8); - iap->bin_addr[3] = (uint8_t)(APP_LOADED_ADDR >> 16); - iap->bin_addr[4] = (uint8_t)(APP_LOADED_ADDR >> 24); - - iap_report_send (udev, iap->bin_addr, IAP_IN_PACKET); -} - -/*! - \brief write data to sectors of memory - \param[in] data: data to be written - \param[in] addr: sector address/code - \param[in] len: length of data to be written (in bytes) - \param[out] none - \retval MAL_OK if all operations are OK, MAL_FAIL else -*/ -static void iap_data_write (uint8_t *data, uint32_t addr, uint32_t len) -{ - uint32_t index = 0U; - - /* check if the address is in protected area */ - if (IS_PROTECTED_AREA(addr)) { - return; - } - - if (len & 0x03U) {/* not an aligned data */ - for (index = len; index < ((len & 0xFFFCU) + 4U); index++) { - data[index] = 0xFFU; - } - } - - /* data received are word multiple */ - for (index = 0U; index < len; index += 4U) { - fmc_word_program(addr, *(uint32_t *)(data + index)); - addr += 4U; - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_bbb_scsi.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_bbb_scsi.h deleted file mode 100644 index 178f058..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_bbb_scsi.h +++ /dev/null @@ -1,132 +0,0 @@ -/*! - \file msc_bbb_scsi.h - \brief the header file of the msc_bbb_scsi.c - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __MSC_BBB_SCSI_H -#define __MSC_BBB_SCSI_H - -#include "usbd_enum.h" - -/* signature of command block wrapper (CBW) */ -#define BBB_CBW_SIGNATURE 0x43425355U -#define BBB_CBW_LENGTH 31U - -/* signature of command status wrapper (CSW) */ -#define BBB_CSW_SIGNATURE 0x53425355U -#define BBB_CSW_LENGTH 13U - -#define SCSI_CMD_LENGTH 16U - -/* transport stage define */ -enum msc_stage { - MSC_STAGE_CMD = 0U, - MSC_STAGE_DATA_IN, - MSC_STAGE_DATA_OUT, - MSC_STAGE_STATUS -}; - -/* SCSI command define */ -#define INQUIRY 0x12U -#define READ_FORMAT_CAPACITIES 0x23U -#define READ_CAPACITY 0x25U -#define READ_10 0x28U -#define WRITE_10 0x2AU -#define REQUEST_SENSE 0x03U -#define TEST_UNIT_READY 0x00U -#define SCSI_MODE_SENSE6 0x1AU -#define SCSI_READ_TOC_DATA 0x43U -#define SCSI_ALLOW_MEDIUM_REMOVAL 0x1EU -#define SCSI_START_STOP_UNIT 0x1BU - -/* the array length define */ -#define DATA_LEN_DISK_INQUIRY 36U -#define DATA_LEN_FORMAT_CAPACITIES 12U -#define DATA_LEN_READ_CAPACITIES 8U -#define DATA_LEN_REQUEST_SENSE 18U -#define DATA_LEN_SENSE6 8U - -typedef struct { - uint32_t dCBWSignature; /*!< signature of a CBW */ - uint32_t dCBWTag; /*!< a command block tag sent by the host */ - uint32_t dCBWDataTransferLength; /*!< the number of bytes of data stage */ - uint8_t bmCBWFlags; /*!< maybe ignored or include direction */ - uint8_t bCBWLUN; /*!< the device logical unit number (LUN) */ - uint8_t bCBWCBLength; /*!< the valid length of the CBWCB in bytes */ - uint8_t CBWCB[16]; /*!< the command block to be executed by the device */ -} msc_bbb_cbw; - -typedef struct { - uint32_t dCSWSignature; /*!< signature of a CSW */ - uint32_t dCSWTag; /*!< must be same as CBW */ - uint32_t dCSWDataResidue; /*!< the difference between the amount of data and the actual amount */ - uint8_t bCSWStatus; /*!< indicates the success or failure of the command */ -} msc_bbb_csw; - -typedef struct -{ - /* the array to store the data from or to host in read10 or write10 command */ - uint8_t bbb_data[MSC_MEDIA_PACKET_SIZE]; - - /* the array to store the SCSI command */ - uint8_t scsi_cmd[SCSI_CMD_LENGTH]; - - /* the global data to store the transport stage in BBB protocol */ - uint8_t bbb_transport_stage; - - /* the data that need to return the host when the command is not valid */ - uint8_t error_data; - - uint8_t usbd_msc_maxlun; - - msc_bbb_cbw bbb_cbw; - msc_bbb_csw bbb_csw; - - uint32_t data_len; - - uint32_t block_addr; - uint32_t block_len; - uint32_t disk_pop; - - /* USB mass storage read capacities data */ - uint8_t read_capa_data[DATA_LEN_READ_CAPACITIES]; -} usbd_msc_handler; - -/* function declarations */ -/* parse the SCSI commands from the CBW */ -void scsi_command_parse (usb_dev *udev); -/* report array to host */ -void bbb_report_array_to_host (usb_dev *udev, uint8_t *data, uint32_t report_len); -/* process the SCSI command */ -void process_scsi_command (uint8_t lun, usb_dev *udev); - -#endif /* __MSC_BBB_SCSI_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_core.h deleted file mode 100644 index 1d3eb58..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_core.h +++ /dev/null @@ -1,86 +0,0 @@ -/*! - \file msc_core.h - \brief the header file of USB MSC device class core functions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __MSC_CORE_H -#define __MSC_CORE_H - -#include "usbd_core.h" -#include "msc_bbb_scsi.h" - -/* mass storage device class code */ -#define USB_CLASS_MSC 0x08U - -/* mass storage subclass code */ -#define USB_MSC_SUBCLASS_RBC 0x01U -#define USB_MSC_SUBCLASS_ATAPI 0x02U -#define USB_MSC_SUBCLASS_UFI 0x04U -#define USB_MSC_SUBCLASS_SCSI 0x06U -#define USB_MSC_SUBCLASS_LOCKABLE 0x07U -#define USB_MSC_SUBCLASS_IEEE1667 0x08U - -/* mass storage interface class control protocol codes */ -#define USB_MSC_PROTOCOL_CBI 0x00U -#define USB_MSC_PROTOCOL_CBI_ALT 0x01U -#define USB_MSC_PROTOCOL_BBB 0x50U - -/* mass storage request codes */ -#define USB_MSC_REQ_CODES_ADSC 0x00U -#define USB_MSC_REQ_CODES_GET 0xFCU -#define USB_MSC_REQ_CODES_PUT 0xFDU -#define USB_MSC_REQ_CODES_GML 0xFEU -#define USB_MSC_REQ_CODES_BOMSR 0xFFU - -/* mass storage class-specific request codes */ -#define BBB_GET_MAX_LUN 0xFEU -#define BBB_RESET 0xFFU - -#define MSC_EPIN_SIZE MSC_DATA_PACKET_SIZE -#define MSC_EPOUT_SIZE MSC_DATA_PACKET_SIZE - -#define USB_MSC_CONFIG_DESC_LEN 32U - -/* USB configuration descriptor structure */ -typedef struct -{ - usb_desc_config config; - - usb_desc_itf msc_itf; - usb_desc_ep msc_epin; - usb_desc_ep msc_epout; -} usb_msc_desc_config_set; - -extern usb_desc msc_desc; -extern usb_class msc_class; - -#endif /* __MSC_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_mem.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_mem.h deleted file mode 100644 index 8d10a16..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Include/msc_mem.h +++ /dev/null @@ -1,60 +0,0 @@ -/*! - \file msc_mem.h - \brief the header file of msc_mem.c - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __MSC_MEM_H -#define __MSC_MEM_H - -#include "usbd_conf.h" - -#define USBD_STD_INQUIRY_LENGTH 36U -#define USBD_STD_READ_TOC_CMD_LENGTH 20U - -typedef struct -{ - int8_t (*mem_init) (uint8_t lun); - int8_t (*mem_ready) (uint8_t lun); - int8_t (*mem_protected) (uint8_t lun); - int8_t (*mem_read) (uint8_t lun, uint8_t *buf, uint32_t block_addr, uint16_t block_len); - int8_t (*mem_write) (uint8_t lun, uint8_t *buf, uint32_t block_addr, uint16_t block_len); - int8_t (*mem_maxlun) (void); - - uint8_t *mem_toc_data; - uint8_t *mem_inquiry_data[MEM_LUN_NUM]; - uint32_t mem_block_size[MEM_LUN_NUM]; - uint32_t mem_block_len[MEM_LUN_NUM]; -} usbd_mem_cb; - -extern usbd_mem_cb *usbd_mem_fops; - -#endif /* __MSC_MEM_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Source/msc_bbb_scsi.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Source/msc_bbb_scsi.c deleted file mode 100644 index ef72204..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Source/msc_bbb_scsi.c +++ /dev/null @@ -1,420 +0,0 @@ -/*! - \file bbb_scsi_driver.c - \brief USB BBB and SCSI protocol driver functions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "msc_bbb_scsi.h" -#include "msc_mem.h" - -/* USB mass storage format capacities data */ -uint8_t format_capa_data[DATA_LEN_FORMAT_CAPACITIES] = -{ - 0x00, - 0x00, - 0x00, /* reserved */ - 0x08, /* capacity list length */ - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, /* bit0-bit1:descriptor code */ - 0x00, - 0x00, - 0x00 -}; - -/* USB mass storage request sense data */ -uint8_t request_sense_data[DATA_LEN_REQUEST_SENSE] = -{ - 0x70, /* bit0-bit6:error code (70h), bit7:valid */ - 0x00, /* reserved */ - 0x05, /* bit0-bit3:sense key */ - 0x00, 0x00, 0x00, 0x00, /* information (MSB) */ - 0x0A, /* additional sense length (10) */ - 0x00, 0x00, 0x00, 0x00, /* reserved */ - 0x20, /* additional sense code (mandatory) */ - 0x00, /* additional sense code qualifier (mandatory) */ - 0x00, 0x00, 0x00, 0x00 /* reserved */ -}; - -/* USB mass storage sense 6 data */ -uint8_t sense6_data[DATA_LEN_SENSE6] = -{ - 0x03, /* mode data length */ - 0x00, /* medium type */ - 0x00, /* device specific parameter, bit7: 0(write and read), 1(read only) */ - 0x00, /* block descriptor length */ - 0x00, /* reserved */ - 0x00, /* reserved */ - 0x00, /* reserved */ - 0x00 /* reserved */ -}; - -/* local function prototypes ('static') */ -static void bbb_set_csw (usb_dev *udev, uint32_t csw_tag, uint32_t csw_data_residue, uint8_t csw_status); - -/*! - \brief parse the SCSI commands from the CBW - \param[in] none - \param[out] none - \retval none -*/ -void scsi_command_parse (usb_dev *udev) -{ - uint8_t i; - - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - for(i = 0U; i < SCSI_CMD_LENGTH; i++){ - msc->scsi_cmd[i] = msc->bbb_cbw.CBWCB[i]; - } -} - -/*! - \brief set the CSW structure - \param[in] csw_tag: signature that helps identify this data packet as a csw - \param[in] csw_data_residue: the device shall set this field to the value received in the cbwtag of the associated bbb_cbw - \param[in] csw_status: for data-out: the difference between the receive data and dCBWDataTransferLength - for data-in: the difference between the transmit data and dCBWDataTransferLength - \param[out] none - \retval none -*/ -static void bbb_set_csw (usb_dev *udev, uint32_t csw_tag, uint32_t csw_data_residue, uint8_t csw_status) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - msc->bbb_csw = (msc_bbb_csw) { - .dCSWSignature = BBB_CSW_SIGNATURE, - .dCSWTag = csw_tag, - .dCSWDataResidue = csw_data_residue, - .bCSWStatus = csw_status - }; -} - -/*! - \brief report array to host - \param[in] udev: pointer to device instance - \param[in] data: pointer to the send array - \param[in] report_len: the report length - \param[out] none - \retval none -*/ -void bbb_report_array_to_host (usb_dev *udev, uint8_t *data, uint32_t report_len) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - switch (msc->bbb_transport_stage) { - case MSC_STAGE_CMD: - msc->bbb_transport_stage = MSC_STAGE_DATA_IN; - - msc->data_len = msc->bbb_cbw.dCBWDataTransferLength; - - if(msc->data_len > report_len){ - msc->data_len = report_len; - } - usbd_ep_send (udev, MSC_IN_EP, data, (uint16_t)msc->data_len); - break; - - case MSC_STAGE_DATA_IN: - bbb_set_csw(udev, msc->bbb_cbw.dCBWTag, msc->bbb_cbw.dCBWDataTransferLength - msc->data_len, 0U); - - msc->data_len = BBB_CSW_LENGTH; - - msc->bbb_transport_stage = MSC_STAGE_STATUS; - - usbd_ep_send (udev, MSC_IN_EP, (uint8_t *)&msc->bbb_csw, (uint16_t)msc->data_len); - break; - - case MSC_STAGE_STATUS: - msc->bbb_transport_stage = MSC_STAGE_CMD; - - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - break; - - default: - break; - } -} - -/*! - \brief process the scsi command - \param[in] lun: logical block number - \param[in] udev: pointer to device instance - \param[out] none - \retval none -*/ -void process_scsi_command (uint8_t lun, usb_dev *udev) -{ - uint32_t l_csw_data_residue = 0U; - - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - switch(msc->scsi_cmd[0]){ - /* process the INQUIRY command */ - case INQUIRY: - bbb_report_array_to_host(udev, usbd_mem_fops->mem_inquiry_data[lun], DATA_LEN_DISK_INQUIRY); - break; - - /* process the TEST_UNIT_READY command */ - case TEST_UNIT_READY: - if(msc->disk_pop == 1U){ - gpio_bit_reset(USB_PULLUP, USB_PULLUP_PIN); - } - - if (MSC_STAGE_CMD == msc->bbb_transport_stage) { - msc->bbb_transport_stage = MSC_STAGE_STATUS; - - bbb_set_csw(udev, msc->bbb_cbw.dCBWTag, 0U, 0U); - - usbd_ep_send (udev, MSC_IN_EP, (uint8_t *)&msc->bbb_csw, BBB_CSW_LENGTH); - } else { - msc->bbb_transport_stage = MSC_STAGE_CMD; - - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - } - break; - - /* process the SCSI_START_STOP_UNIT command */ - case SCSI_START_STOP_UNIT: - msc->disk_pop = 1U; - - if (MSC_STAGE_CMD == msc->bbb_transport_stage) { - msc->bbb_transport_stage = MSC_STAGE_STATUS; - - bbb_set_csw(udev, msc->bbb_cbw.dCBWTag, 0U, 0U); - - usbd_ep_send (udev, MSC_IN_EP, (uint8_t *)&msc->bbb_csw, BBB_CSW_LENGTH); - } else { - msc->bbb_transport_stage = MSC_STAGE_CMD; - - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - } - break; - /* process the SCSI_ALLOW_MEDIUM_REMOVAL command */ - case SCSI_ALLOW_MEDIUM_REMOVAL: - if (MSC_STAGE_CMD == msc->bbb_transport_stage) { - msc->bbb_transport_stage = MSC_STAGE_STATUS; - - bbb_set_csw(udev, msc->bbb_cbw.dCBWTag, 0U, 0U); - - usbd_ep_send (udev, MSC_IN_EP, (uint8_t *)&msc->bbb_csw, BBB_CSW_LENGTH); - } else { - msc->bbb_transport_stage = MSC_STAGE_CMD; - - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - } - break; - - /* process the READ_FORMAT_CAPACITIES command */ - case READ_FORMAT_CAPACITIES: - format_capa_data[4] = (uint8_t)((usbd_mem_fops->mem_block_len[lun] - 1U) >> 24); - format_capa_data[5] = (uint8_t)((usbd_mem_fops->mem_block_len[lun] - 1U) >> 16); - format_capa_data[6] = (uint8_t)((usbd_mem_fops->mem_block_len[lun] - 1U) >> 8); - format_capa_data[7] = (uint8_t)((usbd_mem_fops->mem_block_len[lun] - 1U) >> 0); - - format_capa_data[9] = (uint8_t)((usbd_mem_fops->mem_block_size[lun]) >> 16); - format_capa_data[10] = (uint8_t)((usbd_mem_fops->mem_block_size[lun]) >> 8); - format_capa_data[11] = (uint8_t)((usbd_mem_fops->mem_block_size[lun]) >> 0); - - bbb_report_array_to_host(udev, format_capa_data, DATA_LEN_FORMAT_CAPACITIES); - break; - - /* process the READ_CAPACITY command */ - case READ_CAPACITY: - msc->read_capa_data[0] = (uint8_t)((usbd_mem_fops->mem_block_len[lun] - 1U) >> 24); - msc->read_capa_data[1] = (uint8_t)((usbd_mem_fops->mem_block_len[lun] - 1U) >> 16); - msc->read_capa_data[2] = (uint8_t)((usbd_mem_fops->mem_block_len[lun] - 1U) >> 8); - msc->read_capa_data[3] = (uint8_t)((usbd_mem_fops->mem_block_len[lun] - 1U) >> 0); - - msc->read_capa_data[4] = (uint8_t)((usbd_mem_fops->mem_block_size[lun]) >> 24); - msc->read_capa_data[5] = (uint8_t)((usbd_mem_fops->mem_block_size[lun]) >> 16); - msc->read_capa_data[6] = (uint8_t)((usbd_mem_fops->mem_block_size[lun]) >> 8); - msc->read_capa_data[7] = (uint8_t)((usbd_mem_fops->mem_block_size[lun]) >> 0); - - bbb_report_array_to_host(udev, msc->read_capa_data, DATA_LEN_READ_CAPACITIES); - break; - - /* process the READ_10 command */ - case READ_10: - /* read the first block */ - if (MSC_STAGE_CMD == msc->bbb_transport_stage) { - msc->bbb_transport_stage = MSC_STAGE_DATA_IN; - - msc->block_addr = ((uint32_t)msc->scsi_cmd[2] << 24) | \ - ((uint32_t)msc->scsi_cmd[3] << 16) | \ - ((uint32_t)msc->scsi_cmd[4] << 8) | \ - (uint32_t)msc->scsi_cmd[5]; - msc->block_len = ((uint32_t)msc->scsi_cmd[7] << 8) | (uint32_t)msc->scsi_cmd[8]; - msc->block_addr *= usbd_mem_fops->mem_block_size[lun]; - msc->block_len *= usbd_mem_fops->mem_block_size[lun]; - - usbd_mem_fops->mem_read(lun, msc->bbb_data, msc->block_addr, 1U); - - usbd_ep_send (udev, MSC_IN_EP, msc->bbb_data, (uint16_t)usbd_mem_fops->mem_block_size[lun]); - - msc->block_addr += usbd_mem_fops->mem_block_size[lun]; - msc->block_len -= usbd_mem_fops->mem_block_size[lun]; - } else if (MSC_STAGE_DATA_IN == msc->bbb_transport_stage){ - /* end of the read, send bbb_csw to host */ - if (0U == msc->block_len) { - msc->bbb_transport_stage = MSC_STAGE_STATUS; - - l_csw_data_residue = msc->bbb_cbw.dCBWDataTransferLength - \ - (((uint32_t)msc->scsi_cmd[7] << 8) | (uint32_t)msc->scsi_cmd[8]) * usbd_mem_fops->mem_block_size[lun]; - - bbb_set_csw(udev, msc->bbb_cbw.dCBWTag, l_csw_data_residue, 0U); - - usbd_ep_send (udev, MSC_IN_EP, (uint8_t *)&msc->bbb_csw, BBB_CSW_LENGTH); - /* read the nest block */ - } else { - usbd_mem_fops->mem_read(lun, msc->bbb_data, msc->block_addr, 1U); - - usbd_ep_send (udev, MSC_IN_EP, msc->bbb_data, (uint16_t)usbd_mem_fops->mem_block_size[lun]); - - msc->block_addr += usbd_mem_fops->mem_block_size[lun]; - msc->block_len -= usbd_mem_fops->mem_block_size[lun]; - } - /* enter the MSC_STAGE_CMD */ - } else if (MSC_STAGE_STATUS == msc->bbb_transport_stage) { - msc->bbb_transport_stage = MSC_STAGE_CMD; - - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - } else { - /* no operation */ - } - break; - - /* process the WRITE_10 command */ - case WRITE_10: - /* write the first block */ - if (MSC_STAGE_CMD == msc->bbb_transport_stage) { - msc->bbb_transport_stage = MSC_STAGE_DATA_OUT; - - msc->block_addr = ((uint32_t)msc->scsi_cmd[2] << 24) | \ - ((uint32_t)msc->scsi_cmd[3] << 16) | \ - ((uint32_t)msc->scsi_cmd[4] << 8) | \ - (uint32_t)msc->scsi_cmd[5]; - msc->block_len = ((uint32_t)msc->scsi_cmd[7] << 8) | (uint32_t)msc->scsi_cmd[8]; - msc->block_addr *= usbd_mem_fops->mem_block_size[lun]; - msc->block_len *= usbd_mem_fops->mem_block_size[lun]; - - usbd_ep_recev (udev, MSC_OUT_EP, msc->bbb_data, (uint16_t)usbd_mem_fops->mem_block_size[lun]); - } else if (MSC_STAGE_DATA_OUT == msc->bbb_transport_stage) { - usbd_mem_fops->mem_write(lun, msc->bbb_data, msc->block_addr, 1U); - - msc->block_addr += usbd_mem_fops->mem_block_size[lun]; - msc->block_len -= usbd_mem_fops->mem_block_size[lun]; - - /* end of the write, send bbb_csw to host */ - if (0U == msc->block_len) { - msc->bbb_transport_stage = MSC_STAGE_STATUS; - - l_csw_data_residue = msc->bbb_cbw.dCBWDataTransferLength - \ - (((uint32_t)msc->scsi_cmd[7] << 8) | (uint32_t)msc->scsi_cmd[8]) * usbd_mem_fops->mem_block_size[lun]; - - bbb_set_csw(udev, msc->bbb_cbw.dCBWTag, l_csw_data_residue, 0U); - - usbd_ep_send (udev, MSC_IN_EP, (uint8_t *)&msc->bbb_csw, BBB_CSW_LENGTH); - /* receive the next block data */ - } else { - usbd_ep_recev (udev, MSC_OUT_EP, msc->bbb_data, (uint16_t)usbd_mem_fops->mem_block_size[lun]); - } - /* enter the MSC_STAGE_CMD */ - } else if (MSC_STAGE_STATUS == msc->bbb_transport_stage) { - msc->bbb_transport_stage = MSC_STAGE_CMD; - - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - } else { - /* no operation */ - } - break; - - /* process the REQUEST_SENSE command */ - case REQUEST_SENSE: - bbb_report_array_to_host(udev, request_sense_data, DATA_LEN_REQUEST_SENSE); - break; - - /* process the SCSI_MODE_SENSE6 command */ - case SCSI_MODE_SENSE6: - bbb_report_array_to_host(udev, sense6_data, DATA_LEN_SENSE6); - break; - - /* process the SCSI_READ_TOC_DATA command */ - case SCSI_READ_TOC_DATA: - bbb_report_array_to_host(udev, usbd_mem_fops->mem_toc_data, 20U); - break; - - /* default process: the SCSI command is not valid */ - default: - /* if the data stage is DATA_IN, return the error_data to host in MSC_STAGE_DATA_IN */ - if (0x80U & msc->bbb_cbw.bmCBWFlags) { - if (MSC_STAGE_CMD == msc->bbb_transport_stage){ - msc->bbb_transport_stage = MSC_STAGE_DATA_IN; - - msc->data_len = 1U; - - usbd_ep_send (udev, MSC_IN_EP, &msc->error_data, 1U); - } else if (MSC_STAGE_DATA_IN == msc->bbb_transport_stage){ - msc->bbb_transport_stage = MSC_STAGE_STATUS; - - bbb_set_csw(udev, msc->bbb_cbw.dCBWTag, msc->bbb_cbw.dCBWDataTransferLength - 1U, 1U); - - usbd_ep_send (udev, MSC_IN_EP, (uint8_t *)&msc->bbb_csw, BBB_CSW_LENGTH); - } else if (MSC_STAGE_STATUS == msc->bbb_transport_stage){ - msc->bbb_transport_stage = MSC_STAGE_CMD; - - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - } else { - /* no operation */ - } - - /* if the data stage is DATA_OUT, return the bbb_csw to host immediately */ - } else{ - if (MSC_STAGE_CMD == msc->bbb_transport_stage) { - msc->data_len = 0U; - - bbb_set_csw(udev, msc->bbb_cbw.dCBWTag, msc->bbb_cbw.dCBWDataTransferLength, 1U); - - usbd_ep_send (udev, MSC_IN_EP, (uint8_t *)&msc->bbb_csw, BBB_CSW_LENGTH); - - msc->bbb_transport_stage = MSC_STAGE_STATUS; - } else if (MSC_STAGE_STATUS == msc->bbb_transport_stage) { - msc->bbb_transport_stage = MSC_STAGE_CMD; - - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - } else { - /* no operation */ - } - } - break; - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Source/msc_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Source/msc_core.c deleted file mode 100644 index d19ffd3..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/msc/Source/msc_core.c +++ /dev/null @@ -1,338 +0,0 @@ -/*! - \file msc_core.c - \brief USB MSC device class core functions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "msc_core.h" -#include "msc_mem.h" -#include "usbd_transc.h" -#include - -#define USBD_VID 0x28E9U -#define USBD_PID 0x0989U - -/* note: it should use the C99 standard when compiling the below codes */ -/* USB standard device descriptor */ -usb_desc_dev msc_dev_desc = -{ - .header = { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT , - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM -}; - -/* USB device configuration descriptor */ -usb_msc_desc_config_set msc_config_desc = -{ - .config = - { - .header = { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_MSC_CONFIG_DESC_LEN, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0xC0U, - .bMaxPower = 0x32U - }, - - .msc_itf = - { - .header = { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_CLASS_MSC, - .bInterfaceSubClass = USB_MSC_SUBCLASS_SCSI, - .bInterfaceProtocol = USB_MSC_PROTOCOL_BBB, - .iInterface = 0x00U - }, - - .msc_epin = - { - .header = { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = MSC_IN_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = MSC_EPIN_SIZE, - .bInterval = 0x00U - }, - - .msc_epout = - { - .header = { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = MSC_OUT_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = MSC_EPOUT_SIZE, - .bInterval = 0x00U - } -}; - -/* USB language ID descriptor */ -usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'M', 'S', 'C'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor */ -uint8_t* usbd_msc_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc msc_desc = { - .dev_desc = (uint8_t *)&msc_dev_desc, - .config_desc = (uint8_t *)&msc_config_desc, - .strings = usbd_msc_strings -}; - -/* local function prototypes ('static') */ -static uint8_t msc_init (usb_dev *udev, uint8_t config_index); -static uint8_t msc_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t msc_req_handler (usb_dev *udev, usb_req *req); -static void msc_data_in_handler (usb_dev *udev, uint8_t ep_num); -static void msc_data_out_handler (usb_dev *udev, uint8_t ep_num); - -usb_class msc_class = { - .init = msc_init, - .deinit = msc_deinit, - .req_process = msc_req_handler, - .data_in = msc_data_in_handler, - .data_out = msc_data_out_handler -}; - -/*! - \brief initialize the MSC device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t msc_init (usb_dev *udev, uint8_t config_index) -{ - uint8_t i = 0U; - - static usbd_msc_handler msc_handler; - - memset((void *)&msc_handler, 0, sizeof(usbd_msc_handler)); - - /* initialize Tx endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, BULK_TX_ADDR, &(msc_config_desc.msc_epin)); - - /* initialize Rx endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, BULK_RX_ADDR, &(msc_config_desc.msc_epout)); - - udev->ep_transc[EP_ID(MSC_IN_EP)][TRANSC_IN] = msc_class.data_in; - udev->ep_transc[MSC_OUT_EP][TRANSC_OUT] = msc_class.data_out; - - for (i = 0U; i < MEM_LUN_NUM; i ++) { - usbd_mem_fops->mem_init(i); - } - - msc_handler.bbb_transport_stage = MSC_STAGE_CMD; - - /* prepare endpoint to receive first bbb_cbw */ - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc_handler.bbb_cbw, BBB_CBW_LENGTH); - - udev->class_data[USBD_MSC_INTERFACE] = (void *)&msc_handler; - - return USBD_OK; -} - -/*! - \brief de-initialize the MSC device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t msc_deinit (usb_dev *udev, uint8_t config_index) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - /* deinitialize MSC endpoints */ - usbd_ep_deinit (udev, MSC_IN_EP); - usbd_ep_deinit (udev, MSC_OUT_EP); - - msc->bbb_transport_stage = MSC_STAGE_CMD; - - /* prepare endpoint to receive first bbb_cbw */ - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - - return USBD_OK; -} - -/*! - \brief handle the MSC class-specific and standard requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t msc_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - switch (req->bRequest) { - case BBB_GET_MAX_LUN: - msc->usbd_msc_maxlun = (uint8_t)usbd_mem_fops->mem_maxlun(); - - msc->bbb_transport_stage = MSC_STAGE_CMD; - - usb_transc_config(&udev->transc_in[0], &msc->usbd_msc_maxlun, 1U, 0U); - - status = REQ_SUPP; - break; - - case BBB_RESET: - msc->bbb_transport_stage = MSC_STAGE_CMD; - - /* prepare endpoint to receive first bbb_cbw */ - usbd_ep_recev (udev, MSC_OUT_EP, (uint8_t *)&msc->bbb_cbw, BBB_CBW_LENGTH); - - status = REQ_SUPP; - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle data stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: the endpoint ID - \param[out] none - \retval none -*/ -static void msc_data_in_handler (usb_dev *udev, uint8_t ep_num) -{ - usb_transc *transc = &udev->transc_in[ep_num]; - - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - if (transc->xfer_len) { - usbd_ep_send (udev, ep_num, transc->xfer_buf, transc->xfer_len); - } else { - if (MSC_STAGE_CMD != msc->bbb_transport_stage) { - process_scsi_command(msc->bbb_cbw.bCBWLUN, udev); - } - } -} - -/*! - \brief handle data out stage - \param[in] udev: pointer to USB device instance - \param[in] ep_num: the endpoint ID - \param[out] none - \retval none -*/ -static void msc_data_out_handler (usb_dev *udev, uint8_t ep_num) -{ - usbd_msc_handler *msc = (usbd_msc_handler *)udev->class_data[USBD_MSC_INTERFACE]; - - if (MSC_STAGE_CMD == msc->bbb_transport_stage){ - scsi_command_parse(udev); - - process_scsi_command(msc->bbb_cbw.bCBWLUN, udev); - } else if (MSC_STAGE_DATA_OUT == msc->bbb_transport_stage) { - process_scsi_command(msc->bbb_cbw.bCBWLUN, udev); - } else { - /* no operation */ - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/printer/Include/printer_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/printer/Include/printer_core.h deleted file mode 100644 index f6f76a9..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/printer/Include/printer_core.h +++ /dev/null @@ -1,73 +0,0 @@ -/*! - \file printer_core.h - \brief the header file of USB printer device class core functions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __PRINTER_CORE_H -#define __PRINTER_CORE_H - -#include "usbd_enum.h" - -/* USB printing device class code */ -#define USB_CLASS_PRINTER 0x07U - -/* printing device subclass code */ -#define USB_SUBCLASS_PRINTER 0x01U - -/* printing device protocol code */ -#define PROTOCOL_UNIDIRECTIONAL_ITF 0x01U -#define PROTOCOL_BI_DIRECTIONAL_ITF 0x02U -#define PROTOCOL_1284_4_ITF 0x03U -#define PROTOCOL_VENDOR 0xFFU - -#define DEVICE_ID_LEN 103U - -#define USB_PRINTER_CONFIG_DESC_LEN 32U - -/* printing device specific-class request */ -#define GET_DEVICE_ID 0x00U -#define GET_PORT_STATUS 0x01U -#define SOFT_RESET 0x02U - -/* USB configuration descriptor structure */ -typedef struct -{ - usb_desc_config config; - usb_desc_itf printer_itf; - usb_desc_ep printer_epin; - usb_desc_ep printer_epout; -} usb_printer_desc_config_set; - -extern usb_desc printer_desc; -extern usb_class printer_class; - -#endif /* __PRINTER_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/printer/Source/printer_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/printer/Source/printer_core.c deleted file mode 100644 index 871806e..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/class/device/printer/Source/printer_core.c +++ /dev/null @@ -1,310 +0,0 @@ -/*! - \file printer_core.c - \brief USB printer device class core functions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_transc.h" -#include "printer_core.h" - -#define USBD_VID 0x28E9U -#define USBD_PID 0x028DU - -/* printer port status: paper not empty/selected/no error */ -static uint8_t g_port_status = 0x18U; -uint8_t g_printer_data_buf[PRINTER_OUT_PACKET]; - -uint8_t Printer_DEVICE_ID[DEVICE_ID_LEN] = -{ - 0x00, 0x67, - 'M', 'A', 'N', 'U', 'F', 'A', 'C', 'T', 'U', 'R', 'E', 'R', ':', - 'G', 'I', 'G', 'A', ' ', 'D', 'E', 'V', 'I', 'C', 'E', '-', ';', - 'C', 'O', 'M', 'M', 'A', 'N', 'D', ' ', 'S', 'E', 'T', ':', - 'P', 'C', 'L', ',', 'M', 'P', 'L', ';', - 'M', 'O', 'D', 'E', 'L', ':', - 'L', 'a', 's', 'e', 'r', 'B', 'e', 'a', 'm', '?', ';', - 'C', 'O', 'M', 'M', 'E', 'N', 'T', ':', - 'G', 'o', 'o', 'd', ' ', '!', ';', - 'A', 'C', 'T', 'I', 'V', 'E', ' ', 'C', 'O', 'M', 'M', 'A', 'N', 'D', ' ', 'S', 'E', 'T', ':', - 'P', 'C', 'L', ';' -}; - -/* USB standard device descriptor */ -usb_desc_dev printer_dev_desc = -{ - .header = - { - .bLength = USB_DEV_DESC_LEN, - .bDescriptorType = USB_DESCTYPE_DEV, - }, - .bcdUSB = 0x0200U, - .bDeviceClass = 0x00U, - .bDeviceSubClass = 0x00U, - .bDeviceProtocol = 0x00U, - .bMaxPacketSize0 = USBD_EP0_MAX_SIZE, - .idVendor = USBD_VID, - .idProduct = USBD_PID, - .bcdDevice = 0x0100U, - .iManufacturer = STR_IDX_MFC, - .iProduct = STR_IDX_PRODUCT, - .iSerialNumber = STR_IDX_SERIAL, - .bNumberConfigurations = USBD_CFG_MAX_NUM, -}; - -/* USB device configuration descriptor */ -usb_printer_desc_config_set printer_config_desc = -{ - .config = - { - .header = - { - .bLength = sizeof(usb_desc_config), - .bDescriptorType = USB_DESCTYPE_CONFIG - }, - .wTotalLength = USB_PRINTER_CONFIG_DESC_LEN, - .bNumInterfaces = 0x01U, - .bConfigurationValue = 0x01U, - .iConfiguration = 0x00U, - .bmAttributes = 0xA0U, - .bMaxPower = 0x32U - }, - - .printer_itf = - { - .header = - { - .bLength = sizeof(usb_desc_itf), - .bDescriptorType = USB_DESCTYPE_ITF - }, - .bInterfaceNumber = 0x00U, - .bAlternateSetting = 0x00U, - .bNumEndpoints = 0x02U, - .bInterfaceClass = USB_CLASS_PRINTER, - .bInterfaceSubClass = USB_SUBCLASS_PRINTER, - .bInterfaceProtocol = PROTOCOL_BI_DIRECTIONAL_ITF, - .iInterface = 0x00U - }, - - .printer_epin = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = PRINTER_IN_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = PRINTER_IN_PACKET, - .bInterval = 0x00U - }, - - .printer_epout = - { - .header = - { - .bLength = sizeof(usb_desc_ep), - .bDescriptorType = USB_DESCTYPE_EP - }, - .bEndpointAddress = PRINTER_OUT_EP, - .bmAttributes = USB_EP_ATTR_BULK, - .wMaxPacketSize = PRINTER_OUT_PACKET, - .bInterval = 0x00U - }, -}; - -/* USB language ID Descriptor */ -static usb_desc_LANGID usbd_language_id_desc = -{ - .header = - { - .bLength = sizeof(usb_desc_LANGID), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .wLANGID = ENG_LANGID -}; - -/* USB manufacture string */ -static usb_desc_str manufacturer_string = -{ - .header = - { - .bLength = USB_STRING_LEN(10U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'i', 'g', 'a', 'D', 'e', 'v', 'i', 'c', 'e'} -}; - -/* USB product string */ -static usb_desc_str product_string = -{ - .header = - { - .bLength = USB_STRING_LEN(16U), - .bDescriptorType = USB_DESCTYPE_STR, - }, - .unicode_string = {'G', 'D', '3', '2', '-', 'U', 'S', 'B', '_', 'P', 'r', 'i', 'n', 't', 'e', 'r'} -}; - -/* USBD serial string */ -static usb_desc_str serial_string = -{ - .header = - { - .bLength = USB_STRING_LEN(12U), - .bDescriptorType = USB_DESCTYPE_STR, - } -}; - -/* USB string descriptor */ -static uint8_t* usbd_msc_strings[] = -{ - [STR_IDX_LANGID] = (uint8_t *)&usbd_language_id_desc, - [STR_IDX_MFC] = (uint8_t *)&manufacturer_string, - [STR_IDX_PRODUCT] = (uint8_t *)&product_string, - [STR_IDX_SERIAL] = (uint8_t *)&serial_string -}; - -usb_desc printer_desc = { - .dev_desc = (uint8_t *)&printer_dev_desc, - .config_desc = (uint8_t *)&printer_config_desc, - .strings = usbd_msc_strings -}; - -/* local function prototypes ('static') */ -static uint8_t printer_init (usb_dev *udev, uint8_t config_index); -static uint8_t printer_deinit (usb_dev *udev, uint8_t config_index); -static uint8_t printer_req_handler (usb_dev *udev, usb_req *req); -static void printer_data_in (usb_dev *udev, uint8_t ep_num); -static void printer_data_out (usb_dev *udev, uint8_t ep_num); - -usb_class printer_class = { - .init = printer_init, - .deinit = printer_deinit, - .req_process = printer_req_handler, - .data_in = printer_data_in, - .data_out = printer_data_out -}; -/*! - \brief initialize the printer device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t printer_init (usb_dev *udev, uint8_t config_index) -{ - /* initialize the data Tx/Rx endpoint */ - usbd_ep_init(udev, EP_BUF_SNG, BULK_TX_ADDR, &(printer_config_desc.printer_epin)); - usbd_ep_init(udev, EP_BUF_SNG, BULK_RX_ADDR, &(printer_config_desc.printer_epout)); - - udev->ep_transc[EP_ID(PRINTER_IN_EP)][TRANSC_IN] = printer_class.data_in; - udev->ep_transc[PRINTER_OUT_EP][TRANSC_OUT] = printer_class.data_out; - - /* prepare to receive data */ - usbd_ep_recev(udev, PRINTER_OUT_EP, g_printer_data_buf, PRINTER_OUT_PACKET); - - return USBD_OK; -} - -/*! - \brief de-initialize the printer device - \param[in] udev: pointer to USB device instance - \param[in] config_index: configuration index - \param[out] none - \retval USB device operation status -*/ -static uint8_t printer_deinit (usb_dev *udev, uint8_t config_index) -{ - /* deinitialize the data Tx/Rx endpoint */ - usbd_ep_deinit(udev, PRINTER_IN_EP); - usbd_ep_deinit(udev, PRINTER_OUT_EP); - - return USBD_OK; -} - -/*! - \brief handle the printer class-specific requests - \param[in] udev: pointer to USB device instance - \param[in] req: device class-specific request - \param[out] none - \retval USB device operation status -*/ -static uint8_t printer_req_handler (usb_dev *udev, usb_req *req) -{ - uint8_t status = REQ_NOTSUPP; - - switch (req->bRequest) { - case GET_DEVICE_ID: - usb_transc_config(&udev->transc_in[0], Printer_DEVICE_ID, DEVICE_ID_LEN, 0U); - - status = REQ_SUPP; - break; - - case GET_PORT_STATUS: - usb_transc_config(&udev->transc_in[0], (uint8_t *)&g_port_status, 1U, 0U); - - status = REQ_SUPP; - break; - - case SOFT_RESET: - usbd_ep_recev(udev, PRINTER_OUT_EP, g_printer_data_buf, PRINTER_OUT_PACKET); - - status = REQ_SUPP; - break; - - default: - break; - } - - return status; -} - -/*! - \brief handle printer data - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void printer_data_in (usb_dev *udev, uint8_t ep_num) -{ -} - -/*! - \brief handle printer data - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint number - \param[out] none - \retval none -*/ -static void printer_data_out (usb_dev *udev, uint8_t ep_num) -{ -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usb_ch9_std.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usb_ch9_std.h deleted file mode 100644 index 153413d..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usb_ch9_std.h +++ /dev/null @@ -1,212 +0,0 @@ -/*! - \file usb_ch9_std.h - \brief USB 2.0 standard defines - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USB_CH9_STD_H -#define __USB_CH9_STD_H - -#include "usbd_conf.h" - -#define USB_DEV_QUALIFIER_DESC_LEN 0x0AU /*!< USB device qualifier descriptor length */ -#define USB_DEV_DESC_LEN 0x12U /*!< USB device descriptor length */ -#define USB_CFG_DESC_LEN 0x09U /*!< USB configuration descriptor length */ -#define USB_ITF_DESC_LEN 0x09U /*!< USB interface descriptor length */ -#define USB_EP_DESC_LEN 0x07U /*!< USB endpoint descriptor length */ -#define USB_BOS_DESC_LEN 0x0CU /*!< USB BOS descriptor length */ -#define USB_OTG_DESC_LEN 0x03U /*!< USB device OTG descriptor length */ -#define USB_SETUP_PACKET_LEN 0x08U /*!< USB SETUP packet length */ -#define USB_DEVICE_CAPABITY 0x10U /*!< USB device capabity */ - - -/* bit 7 of bmRequestType: data phase transfer direction */ -#define USB_TRX_MASK 0x80U /*!< USB transfer direction mask */ -#define USB_TRX_OUT 0x00U /*!< USB transfer OUT direction */ -#define USB_TRX_IN 0x80U /*!< USB transfer IN direction */ - -/* bit 6..5 of bmRequestType: request type */ -#define USB_REQTYPE_STRD 0x00U /*!< USB standard request */ -#define USB_REQTYPE_CLASS 0x20U /*!< USB class request */ -#define USB_REQTYPE_VENDOR 0x40U /*!< USB vendor request */ -#define USB_REQTYPE_MASK 0x60U /*!< USB request mask */ - -#define USBD_BUS_POWERED 0x00U /*!< USB bus power supply */ -#define USBD_SELF_POWERED 0x01U /*!< USB self power supply */ - -#define USB_STATUS_REMOTE_WAKEUP 2U /*!< USB is in remote wakeup status */ -#define USB_STATUS_SELF_POWERED 1U /*!< USB is in self powered status */ - -/* bit 4..0 of bmRequestType: recipient type */ -enum _usb_recp_type { - USB_RECPTYPE_DEV = 0x0U, /*!< USB device request type */ - USB_RECPTYPE_ITF = 0x1U, /*!< USB interface request type */ - USB_RECPTYPE_EP = 0x2U, /*!< USB endpoint request type */ - USB_RECPTYPE_MASK = 0x3U /*!< USB request type mask */ -}; - -/* bRequest value */ -enum _usb_request { - USB_GET_STATUS = 0x0U, /*!< USB get status request */ - USB_CLEAR_FEATURE = 0x1U, /*!< USB clear feature request */ - USB_RESERVED2 = 0x2U, /*!< USB reserved2 */ - USB_SET_FEATURE = 0x3U, /*!< USB set feature request */ - USB_RESERVED4 = 0x4U, /*!< USB reserved4 */ - USB_SET_ADDRESS = 0x5U, /*!< USB set address request */ - USB_GET_DESCRIPTOR = 0x6U, /*!< USB get descriptor request */ - USB_SET_DESCRIPTOR = 0x7U, /*!< USB set descriptor request */ - USB_GET_CONFIGURATION = 0x8U, /*!< USB get configuration request */ - USB_SET_CONFIGURATION = 0x9U, /*!< USB set configuration request */ - USB_GET_INTERFACE = 0xAU, /*!< USB get interface request */ - USB_SET_INTERFACE = 0xBU, /*!< USB set interface request */ - USB_SYNCH_FRAME = 0xCU /*!< USB synchronized frame request */ -}; - -/* descriptor types of USB specifications */ -enum _usb_desctype { - USB_DESCTYPE_DEV = 0x1U, /*!< USB device descriptor type */ - USB_DESCTYPE_CONFIG = 0x2U, /*!< USB configuration descriptor type */ - USB_DESCTYPE_STR = 0x3U, /*!< USB string descriptor type */ - USB_DESCTYPE_ITF = 0x4U, /*!< USB interface descriptor type */ - USB_DESCTYPE_EP = 0x5U, /*!< USB endpoint descriptor type */ - USB_DESCTYPE_DEV_QUALIFIER = 0x6U, /*!< USB device qualifier descriptor type */ - USB_DESCTYPE_OTHER_SPD_CONFIG = 0x7U, /*!< USB other speed configuration descriptor type */ - USB_DESCTYPE_ITF_POWER = 0x8U, /*!< USB interface power descriptor type */ - USB_DESCTYPE_BOS = 0xFU /*!< USB BOS descriptor type */ -}; - -/* USB endpoint descriptor bmAttributes bit definitions */ -/* bits 1..0 : transfer type */ -enum _usbx_type { - USB_EP_ATTR_CTL = 0x0U, /*!< USB endpoint control attributes*/ - USB_EP_ATTR_ISO = 0x1U, /*!< USB endpoint isochronous attributes*/ - USB_EP_ATTR_BULK = 0x2U, /*!< USB endpoint bulk attributes*/ - USB_EP_ATTR_INT = 0x3U /*!< USB endpoint interrupt attributes*/ -}; - -/* bits 3..2 : Sync type (only if ISOCHRONOUS) */ -#define USB_EP_ATTR_NOSYNC 0x00U /*!< USB endpoint no SYNC attributes*/ -#define USB_EP_ATTR_ASYNC 0x04U /*!< USB endpoint ASYNC attributes*/ -#define USB_EP_ATTR_ADAPTIVE 0x08U /*!< USB endpoint adaptive attributes*/ -#define USB_EP_ATTR_SYNC 0x0CU /*!< USB endpoint SYNC attributes*/ -#define USB_EP_ATTR_SYNCTYPE 0x0CU /*!< USB endpoint SYNC type attributes*/ - -/* bits 5..4 : usage type (only if ISOCHRONOUS) */ -#define USB_EP_ATTR_DATA 0x00U /*!< USB endpoint data attributes*/ -#define USB_EP_ATTR_FEEDBACK 0x10U /*!< USB endpoint feedback attributes*/ -#define USB_EP_ATTR_IMPLICIT_FEEDBACK_DATA 0x20U /*!< USB endpoint implicit feedback attributes*/ -#define USB_EP_ATTR_USAGETYPE 0x30U /*!< USB endpoint usage type attributes*/ - -#pragma pack(1) - -/* USB standard device request structure */ -typedef struct _usb_req { - uint8_t bmRequestType; /*!< type of request */ - uint8_t bRequest; /*!< request of setup packet */ - uint16_t wValue; /*!< value of setup packet */ - uint16_t wIndex; /*!< index of setup packet */ - uint16_t wLength; /*!< length of setup packet */ -} usb_req; - -/* USB setup packet definition */ -typedef union _usb_setup { - uint8_t data[8]; /*!< USB setup data */ - - usb_req req; /*!< USB setup request */ -} usb_setup; - -/* USB descriptor definition */ -typedef struct _usb_desc_header { - uint8_t bLength; /*!< size of the descriptor */ - uint8_t bDescriptorType; /*!< type of the descriptor */ -} usb_desc_header; - -typedef struct _usb_desc_dev { - usb_desc_header header; /*!< descriptor header, including type and size */ - uint16_t bcdUSB; /*!< BCD of the supported USB specification */ - uint8_t bDeviceClass; /*!< USB device class */ - uint8_t bDeviceSubClass; /*!< USB device subclass */ - uint8_t bDeviceProtocol; /*!< USB device protocol */ - uint8_t bMaxPacketSize0; /*!< size of the control (address 0) endpoint's bank in bytes */ - uint16_t idVendor; /*!< vendor ID for the USB product */ - uint16_t idProduct; /*!< unique product ID for the USB product */ - uint16_t bcdDevice; /*!< product release (version) number */ - uint8_t iManufacturer; /*!< string index for the manufacturer's name */ - uint8_t iProduct; /*!< string index for the product name/details */ - uint8_t iSerialNumber; /*!< string index for the product's globally unique hexadecimal serial number */ - uint8_t bNumberConfigurations; /*!< total number of configurations supported by the device */ -} usb_desc_dev; - -typedef struct _usb_desc_config { - usb_desc_header header; /*!< descriptor header, including type and size */ - uint16_t wTotalLength; /*!< size of the configuration descriptor header, and all sub descriptors inside the configuration */ - uint8_t bNumInterfaces; /*!< total number of interfaces in the configuration */ - uint8_t bConfigurationValue; /*!< configuration index of the current configuration */ - uint8_t iConfiguration; /*!< index of a string descriptor describing the configuration */ - uint8_t bmAttributes; /*!< configuration attributes */ - uint8_t bMaxPower; /*!< maximum power consumption of the device while in the current configuration */ -} usb_desc_config; - -typedef struct _usb_desc_itf { - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bInterfaceNumber; /*!< index of the interface in the current configuration */ - uint8_t bAlternateSetting; /*!< alternate setting for the interface number */ - uint8_t bNumEndpoints; /*!< total number of endpoints in the interface */ - uint8_t bInterfaceClass; /*!< interface class ID */ - uint8_t bInterfaceSubClass; /*!< interface subclass ID */ - uint8_t bInterfaceProtocol; /*!< interface protocol ID */ - uint8_t iInterface; /*!< index of the string descriptor describing the interface */ -} usb_desc_itf; - -typedef struct _usb_desc_ep { - usb_desc_header header; /*!< descriptor header, including type and size */ - uint8_t bEndpointAddress; /*!< logical address of the endpoint */ - uint8_t bmAttributes; /*!< endpoint attribute */ - uint16_t wMaxPacketSize; /*!< size of the endpoint bank, in bytes */ - uint8_t bInterval; /*!< polling interval in milliseconds for the endpoint if it is an INTERRUPT or ISOCHRONOUS type */ -} usb_desc_ep; - -typedef struct _usb_desc_LANGID { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint16_t wLANGID; /*!< LANGID code */ -} usb_desc_LANGID; - -typedef struct _usb_desc_str { - usb_desc_header header; /*!< descriptor header, including type and size. */ - uint16_t unicode_string[64]; /*!< unicode string data */ -} usb_desc_str; - -#pragma pack() - -/* compute string descriptor length */ -#define USB_STRING_LEN(unicode_chars) (sizeof(usb_desc_header) + ((unicode_chars) << 1)) - -#endif /* __USB_CH9_STD_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_core.h deleted file mode 100644 index 096b22f..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_core.h +++ /dev/null @@ -1,332 +0,0 @@ -/*! - \file usbd_core.h - \brief USB device driver core - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_CORE_H -#define __USBD_CORE_H - -#include "usb_ch9_std.h" - -/* endpoints definitions */ -#define EP_IN(x) ((uint8_t)(0x80U | (x))) -#define EP_OUT(x) ((uint8_t)(x)) - -#define EP_DIR(x) ((uint8_t)((x) >> 7U)) -#define EP_ID(x) ((uint8_t)((x) & 0x7FU)) - -/* USB device endpoint0 max packet size */ -#define USBD_EP0_MAX_SIZE 64U - -#define USBD_TRANSC_COUNT 3U - -/* USB device operation status */ -enum usbd_status { - USBD_UNCONNECTED = 0U, /*!< USB device unconnected status */ - USBD_DEFAULT, /*!< USB device default status */ - USBD_ADDRESSED, /*!< USB device addressed status */ - USBD_CONFIGURED, /*!< USB device configured status */ - USBD_SUSPENDED, /*!< USB device suspended status */ - USBD_CONNECTED /*!< USB device connected status */ -}; - -/* USB device operation state */ -enum usbd_state { - USBD_OK = 0U, /*!< USB device OK state */ - USBD_BUSY, /*!< USB device busy state */ - USBD_FAIL /*!< USB device fail state */ -}; - -/* USB device transaction type */ -enum usbd_transc { - TRANSC_SETUP = 0U, /*!< SETUP transaction */ - TRANSC_OUT, /*!< OUT transaction */ - TRANSC_IN, /*!< IN transaction */ - TRANSC_UNKNOWN /*!< unknown transaction */ -}; - -/* USB device endpoint buffer type */ -enum usbd_ep_kind { - EP_BUF_SNG = 0U, /*!< single buffer endpoint type value */ - EP_BUF_DBL /*!< double buffer endpoint type value */ -}; - -/* USB device transaction struct */ -typedef struct { - uint8_t max_len; /*!< packet max length */ - uint8_t ep_stall; /*!< endpoint STALL */ - - uint8_t *xfer_buf; /*!< transfer buffer */ - uint16_t xfer_len; /*!< transfer length */ - uint16_t xfer_count; /*!< transfer count */ -} usb_transc; - -/* USB device basic struct */ -typedef struct { - uint8_t max_ep_count; /*!< endpoint max count */ - uint8_t twin_buf; /*!< double buffer */ - uint16_t ram_size; /*!< ram size */ -} usb_basic; - -/* USB descriptor */ -typedef struct { - uint8_t *dev_desc; /*!< device descriptor */ - uint8_t *config_desc; /*!< configure descriptor */ - uint8_t *bos_desc; /*!< bos descriptor */ - uint8_t **strings; /*!< strings descriptor */ -} usb_desc; - -/* USB power management */ -typedef struct { - uint8_t power_mode; /*!< power mode */ - uint8_t power_low; /*!< power low */ - uint8_t esof_count; /*!< ESOF count */ - uint8_t suspend_enabled; /*!< suspend enabled flag */ - uint8_t remote_wakeup; /*!< remote wakeup */ - uint8_t remote_wakeup_on; /*!< remote wakeup enable */ - uint8_t lpm_enable; /*!< LPM enable */ -} usb_pm; - -/* USB LPM management */ -typedef struct { - uint32_t besl; /*!< besl */ - uint32_t L1_resume; /*!< L1 resume */ - uint32_t L1_remote_wakeup; /*!< L1 remote wakeup */ -} usb_lpm; - -/* USB control information */ -typedef struct { - usb_req req; /*!< USB request */ - uint8_t ctl_zlp; /*!< control zero length packet */ -} usb_control; - -typedef struct _usb_dev usb_dev; -typedef struct _usb_handler usb_handler; -typedef void (*usb_ep_transc) (usb_dev *usbd_dev, uint8_t ep_num); - -/* USB class struct */ -typedef struct { - uint8_t req_cmd; - uint8_t req_altset; - - uint8_t (*init) (usb_dev *udev, uint8_t config_index); - uint8_t (*deinit) (usb_dev *udev, uint8_t config_index); - - uint8_t (*req_process) (usb_dev *udev, usb_req *req); - - uint8_t (*ctlx_in) (usb_dev *udev); - uint8_t (*ctlx_out) (usb_dev *udev); - - void (*data_in) (usb_dev *udev, uint8_t ep_num); - void (*data_out) (usb_dev *udev, uint8_t ep_num); -} usb_class; - -/* USB core driver struct */ -struct _usb_dev { - /* basic parameters */ - uint8_t config; - uint8_t dev_addr; - - __IO uint8_t cur_status; - __IO uint8_t backup_status; - - usb_pm pm; -#ifdef LPM_ENABLED - usb_lpm lpm; -#endif /* LPM_ENABLED */ - usb_control control; - - usb_transc transc_out[EP_COUNT]; - usb_transc transc_in[EP_COUNT]; - - usb_ep_transc ep_transc[EP_COUNT][USBD_TRANSC_COUNT]; - - /* device class */ - usb_desc *desc; - usb_class *class_core; - usb_handler *drv_handler; - - void *class_data[USBD_ITF_MAX_NUM]; - void *user_data; - void *data; -}; - -typedef struct -{ - uint8_t (*SOF) (usb_dev *udev); /*!< SOF ISR callback */ -} usbd_int_cb_struct; - -/* USB handler struct */ -struct _usb_handler { - void (*init) (void); - void (*deinit) (void); - - void (*dp_pullup) (FlagStatus status); - void (*set_addr) (usb_dev *udev); - void (*suspend) (void); - void (*suspend_leave) (void); - void (*resume) (usb_dev *udev); - - void (*ep_reset) (usb_dev *udev); - void (*ep_setup) (usb_dev *udev, uint8_t buf_kind, uint32_t buf_addr, const usb_desc_ep *ep_desc); - void (*ep_disable) (usb_dev *udev, uint8_t ep_addr); - void (*ep_rx_enable) (usb_dev *udev, uint8_t ep_num); - void (*ep_write) (uint8_t *fifo, uint8_t ep_num, uint16_t bytes); - uint16_t (*ep_read) (uint8_t *fifo, uint8_t ep_num, uint8_t buf_kind); - void (*ep_stall_set) (usb_dev *udev, uint8_t ep_addr); - void (*ep_stall_clear) (usb_dev *udev, uint8_t ep_addr); - uint8_t (*ep_status_get) (usb_dev *udev, uint8_t ep_addr); -}; - -extern usbd_int_cb_struct *usbd_int_fops; - -/* static inline function definitions */ -/*! - \brief device connect - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_connect (usb_dev *udev) -{ - udev->drv_handler->dp_pullup(SET); - - udev->cur_status = (uint8_t)USBD_CONNECTED; -} - -/*! - \brief device disconnect - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_disconnect (usb_dev *udev) -{ - udev->drv_handler->dp_pullup(RESET); - - udev->cur_status = (uint8_t)USBD_UNCONNECTED; -} - -/*! - \brief device core register configure when stop device - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_core_deinit (usb_dev *udev) -{ - udev->drv_handler->deinit(); -} - -/*! - \brief initialize endpoint - \param[in] udev: pointer to USB core instance - \param[in] buf_kind: endpoint buffer kind - \param[in] buf_addr: buffer addresss - \param[in] ep_desc: pointer to endpoint descriptor - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_ep_init (usb_dev *udev, uint8_t buf_kind, uint32_t buf_addr, const usb_desc_ep *ep_desc) -{ - udev->drv_handler->ep_setup(udev, buf_kind, buf_addr, ep_desc); -} - -/*! - \brief configure the endpoint when it is disabled - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_ep_deinit (usb_dev *udev, uint8_t ep_addr) -{ - udev->drv_handler->ep_disable(udev, ep_addr); -} - -/*! - \brief set an endpoint to STALL status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_ep_stall (usb_dev *udev, uint8_t ep_addr) -{ - udev->drv_handler->ep_stall_set(udev, ep_addr); -} - -/*! - \brief clear endpoint stalled status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_ep_clear_stall (usb_dev *udev, uint8_t ep_addr) -{ - udev->drv_handler->ep_stall_clear(udev, ep_addr); -} - -/*! - \brief get endpoint status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -__STATIC_INLINE uint8_t usbd_ep_status_get (usb_dev *udev, uint8_t ep_addr) -{ - return udev->drv_handler->ep_status_get(udev, ep_addr); -} - -/* function declarations */ -/* initialize USBD */ -void usbd_init(usb_dev *udev, usb_desc *desc, usb_class *usbc); -/* endpoint prepare to transmit data */ -void usbd_ep_send (usb_dev *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len); -/* endpoint prepare to receive data */ -void usbd_ep_recev (usb_dev *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len); - -#endif /* __USBD_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_enum.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_enum.h deleted file mode 100644 index 2f1349a..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_enum.h +++ /dev/null @@ -1,111 +0,0 @@ -/*! - \file usbd_enum.h - \brief USB enumeration definitions - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_ENUM_H -#define __USBD_ENUM_H - -#include "usbd_core.h" -#include "usb_ch9_std.h" - -#ifndef NULL - #define NULL 0U -#endif - -/* request state enumeration */ -typedef enum _usb_reqsta -{ - REQ_SUPP = 0x0U, /* supported request */ - REQ_NOTSUPP = 0x1U /* unsupported request */ -} usb_reqsta; - -/* string descriptor index enumeration */ -enum _str_index -{ - STR_IDX_LANGID = 0x0U, /* language ID string index */ - STR_IDX_MFC = 0x1U, /* manufacturer string index */ - STR_IDX_PRODUCT = 0x2U, /* product string index */ - STR_IDX_SERIAL = 0x3U, /* serial string index */ - STR_IDX_CONFIG = 0x4U, /* configuration string index */ - STR_IDX_ITF = 0x5U, /* interface string index */ - STR_IDX_MAX = 0x6U /* string index max value */ -}; - -/* PWR status enumeration */ -typedef enum -{ - USB_PWRSTA_SELF_POWERED = 0x1U, /* USB is in self powered status */ - USB_PWRSTA_REMOTE_WAKEUP = 0x2U, /* USB is in remote wakeup status */ -} usb_pwrsta; - -/* usb endpoint feature enumeration */ -typedef enum -{ - USB_FEATURE_EP_HALT = 0x0U, /* USB has endpoint halt feature */ - USB_FEATURE_REMOTE_WAKEUP = 0x1U, /* USB has endpoint remote wakeup feature */ - USB_FEATURE_TEST_MODE = 0x2U /* USB has endpoint test mode feature */ -} usb_feature; - -#define ENG_LANGID 0x0409U /* english language ID */ -#define CHN_LANGID 0x0804U /* chinese language ID */ - -/* device unique ID */ -#define DEVICE_ID1 (0x1FFFF7E8U) /* device ID1 */ -#define DEVICE_ID2 (0x1FFFF7ECU) /* device ID2 */ -#define DEVICE_ID3 (0x1FFFF7F0U) /* device ID3 */ - -#define DEVICE_ID (0x40022100U) /* device ID information */ - -//#define USB_SERIAL_STRING_SIZE 0x1AU - -/* USB device exported macros */ -#define BYTE_SWAP(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \ - (uint16_t)(((uint16_t)(*(((uint8_t *)(addr)) + 1U))) << 8U)) -#define BYTE_LOW(x) ((uint8_t)((x) & 0x00FFU)) -#define BYTE_HIGH(x) ((uint8_t)(((x) & 0xFF00U) >> 8U)) - -#define USB_MIN(a, b) (((a) < (b)) ? (a) : (b)) - -#define CTL_EP(ep) (((ep) == 0x00U) || ((ep) == 0x80U)) - -/* function declarations */ -/* handle USB standard device request */ -usb_reqsta usbd_standard_request (usb_dev *udev, usb_req *req); -/* handle device class request */ -usb_reqsta usbd_class_request (usb_dev *udev, usb_req *req); -/* handle USB vendor request */ -usb_reqsta usbd_vendor_request (usb_dev *udev, usb_req *req); -/* get serial string */ -void serial_string_get (uint16_t *unicode_str); - -#endif /* __USBD_ENUM_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_pwr.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_pwr.h deleted file mode 100644 index 0ca8a2d..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_pwr.h +++ /dev/null @@ -1,67 +0,0 @@ -/*! - \file usbd_pwr.h - \brief USB device power management functions prototype - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_PWR_H -#define __USBD_PWR_H - -#include "usbd_core.h" - -/* static inline function definitions */ -/*! - \brief first operation of USB wakeup is to wakeup MCU - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void resume_mcu (usb_dev *udev) -{ - udev->drv_handler->suspend_leave(); -} - -/*! - \brief set USB device to suspend mode - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -__STATIC_INLINE void usbd_to_suspend (usb_dev *udev) -{ - udev->drv_handler->suspend(); -} - -/* function declarations */ -/* start to remote wakeup */ -void usbd_remote_wakeup_active (usb_dev *udev); - -#endif /* __USBD_PWR_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_transc.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_transc.h deleted file mode 100644 index 30699a5..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Include/usbd_transc.h +++ /dev/null @@ -1,63 +0,0 @@ -/*! - \file usbd_transc.h - \brief USBD transaction - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USB_TRANSC_H -#define __USB_TRANSC_H - -#include "usbd_core.h" - -/*! - \brief USB transaction configure - \param[in] udev: pointer to USB device instance - \param[in] buf: transfer data buffer - \param[in] len: transfer data length - \param[out] none - \retval none -*/ -__STATIC_INLINE void usb_transc_config (usb_transc *transc, uint8_t *buf, uint16_t len, uint16_t count) -{ - transc->xfer_buf = buf; - transc->xfer_len = len; - transc->xfer_count = count; -} - -/* function declarations */ -/* process USB SETUP transaction */ -void _usb_setup_transc (usb_dev *udev, uint8_t ep_num); -/* process USB OUT transaction */ -void _usb_out0_transc (usb_dev *udev, uint8_t ep_num); -/* process USB IN transaction */ -void _usb_in0_transc (usb_dev *udev, uint8_t ep_num); - -#endif /* __USB_TRANSC_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_core.c deleted file mode 100644 index b464f2b..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_core.c +++ /dev/null @@ -1,129 +0,0 @@ -/*! - \file usbd_core.c - \brief USB device driver - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_core.h" -#include "usbd_enum.h" -#include "usbd_transc.h" -#include "usbd_lld_core.h" - -usbd_int_cb_struct *usbd_int_fops = NULL; - -/*! - \brief configure USB device initialization - \param[in] udev: pointer to USB core instance - \param[in] core: endpoint address - \param[in] usbc: USB class - \param[in] usbha: USB handler - \param[out] none - \retval none -*/ -void usbd_init (usb_dev *udev, usb_desc *desc, usb_class *usbc) -{ - /* configure USBD core basic attributes */ - usbd_core.basic.max_ep_count = 8U; - usbd_core.basic.twin_buf = 1U; - usbd_core.basic.ram_size = 512U; - - usbd_core.dev = udev; - - udev->desc = desc; - udev->class_core = usbc; - udev->drv_handler = &usbd_drv_handler; - - udev->ep_transc[0][TRANSC_SETUP] = _usb_setup_transc; - udev->ep_transc[0][TRANSC_OUT] = _usb_out0_transc; - udev->ep_transc[0][TRANSC_IN] = _usb_in0_transc; - - /* configure power management */ - udev->pm.power_mode = (udev->desc->config_desc[7] & 0x40U) >> 5; - - /* enable USB suspend */ - udev->pm.suspend_enabled = 1U; - - /* USB low level initialization */ - udev->drv_handler->init(); - - /* create serial string */ - serial_string_get((uint16_t *)udev->desc->strings[STR_IDX_SERIAL]); -} - -/*! - \brief endpoint prepare to receive data - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[in] pbuf: user buffer address pointer - \param[in] buf_len: buffer length - \param[out] none - \retval none -*/ -void usbd_ep_recev (usb_dev *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len) -{ - /* configure the transaction level parameters */ - usb_transc *transc = &udev->transc_out[EP_ID(ep_addr)]; - - usb_transc_config(transc, pbuf, buf_len, 0U); - - /* enable endpoint to receive */ - udev->drv_handler->ep_rx_enable(udev, ep_addr); -} - -/*! - \brief endpoint prepare to transmit data - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[in] pbuf: transmit buffer address pointer - \param[in] buf_len: buffer length - \param[out] none - \retval none -*/ -void usbd_ep_send (usb_dev *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len) -{ - uint8_t ep_num = EP_ID(ep_addr); - - usb_transc *transc = &udev->transc_in[ep_num]; - - uint16_t len = USB_MIN(buf_len, transc->max_len); - - /* configure the transaction level parameters */ - - udev->drv_handler->ep_write(pbuf, ep_num, len); - - usb_transc_config(transc, pbuf + len, buf_len - len, len); -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_enum.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_enum.c deleted file mode 100644 index 2bac171..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_enum.c +++ /dev/null @@ -1,735 +0,0 @@ -/*! - \file usbd_enum.c - \brief USB enumeration function - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_enum.h" -#include "usbd_transc.h" - -/* USB enumeration handle functions */ -static usb_reqsta _usb_std_getstatus (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_clearfeature (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setfeature (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setaddress (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_getdescriptor (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setdescriptor (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_getconfiguration (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setconfiguration (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_reserved (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_getinterface (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_setinterface (usb_dev *udev, usb_req *req); -static usb_reqsta _usb_std_synchframe (usb_dev *udev, usb_req *req); -static uint8_t* _usb_dev_desc_get (usb_dev *udev, uint8_t index, uint16_t *len); -static uint8_t* _usb_config_desc_get (usb_dev *udev, uint8_t index, uint16_t *len); -static uint8_t* _usb_str_desc_get (usb_dev *udev, uint8_t index, uint16_t *len); -static uint8_t* _usb_bos_desc_get (usb_dev *udev, uint8_t index, uint16_t *len); -static void int_to_unicode (uint32_t value, uint8_t *pbuf, uint8_t len); - -/* standard device request handler */ -static usb_reqsta (*_std_dev_req[]) (usb_dev *udev, usb_req *req) = { - [USB_GET_STATUS] = _usb_std_getstatus, - [USB_CLEAR_FEATURE] = _usb_std_clearfeature, - [USB_RESERVED2] = _usb_std_reserved, - [USB_SET_FEATURE] = _usb_std_setfeature, - [USB_RESERVED4] = _usb_std_reserved, - [USB_SET_ADDRESS] = _usb_std_setaddress, - [USB_GET_DESCRIPTOR] = _usb_std_getdescriptor, - [USB_SET_DESCRIPTOR] = _usb_std_setdescriptor, - [USB_GET_CONFIGURATION] = _usb_std_getconfiguration, - [USB_SET_CONFIGURATION] = _usb_std_setconfiguration, - [USB_GET_INTERFACE] = _usb_std_getinterface, - [USB_SET_INTERFACE] = _usb_std_setinterface, - [USB_SYNCH_FRAME] = _usb_std_synchframe, -}; - -/* get standard descriptor handler */ -static uint8_t* (*std_desc_get[])(usb_dev *udev, uint8_t index, uint16_t *len) = { - [USB_DESCTYPE_DEV - 1U] = _usb_dev_desc_get, - [USB_DESCTYPE_CONFIG - 1U] = _usb_config_desc_get, - [USB_DESCTYPE_STR - 1U] = _usb_str_desc_get -}; - -/*! - \brief handle USB standard device request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device operation cur_status -*/ -usb_reqsta usbd_standard_request (usb_dev *udev, usb_req *req) -{ - /* call device request handle function */ - return (*_std_dev_req[req->bRequest]) (udev, req); -} - -/*! - \brief handle USB device class request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device class request - \param[out] none - \retval USB device request status -*/ -usb_reqsta usbd_class_request (usb_dev *udev, usb_req *req) -{ - if ((uint8_t)USBD_CONFIGURED == udev->cur_status) { - if (BYTE_LOW(req->wIndex) < USBD_ITF_MAX_NUM) { - /* call device class handle function */ - return (usb_reqsta)udev->class_core->req_process(udev, req); - } - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB vendor request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB vendor request - \param[out] none - \retval USB device request status -*/ -usb_reqsta usbd_vendor_request (usb_dev *udev, usb_req *req) -{ - (void)udev; - (void)req; - - /* added by user */ - - return REQ_NOTSUPP; -} - -/*! - \brief no operation, just for reserved - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_reserved (usb_dev *udev, usb_req *req) -{ - (void)udev; - (void)req; - - /* no operation */ - return REQ_NOTSUPP; -} - -/*! - \brief get the device descriptor - \param[in] udev: pointer to USB device instance - \param[in] index: no use - \param[out] len: data length pointer - \retval descriptor buffer pointer -*/ -static uint8_t* _usb_dev_desc_get (usb_dev *udev, uint8_t index, uint16_t *len) -{ - (void)index; - - *len = udev->desc->dev_desc[0]; - - return udev->desc->dev_desc; -} - -/*! - \brief get the configuration descriptor - \brief[in] udev: pointer to USB device instance - \brief[in] index: no use - \param[out] len: data length pointer - \retval descriptor buffer pointer -*/ -static uint8_t* _usb_config_desc_get (usb_dev *udev, uint8_t index, uint16_t *len) -{ - (void)index; - - *len = udev->desc->config_desc[2]; - - return udev->desc->config_desc; -} - -/*! - \brief get the BOS descriptor - \brief[in] udev: pointer to USB device instance - \brief[in] index: no use - \param[out] len: data length pointer - \retval descriptor buffer pointer -*/ -static uint8_t* _usb_bos_desc_get (usb_dev *udev, uint8_t index, uint16_t *len) -{ - (void)index; - - *len = (uint16_t)udev->desc->bos_desc[2] | (uint16_t)((uint16_t)udev->desc->bos_desc[3] << 8); - - return udev->desc->bos_desc; -} - -/*! - \brief get string descriptor - \param[in] udev: pointer to USB device instance - \param[in] index: string descriptor index - \param[out] len: pointer to string length - \retval string descriptor -*/ -static uint8_t* _usb_str_desc_get (usb_dev *udev, uint8_t index, uint16_t *len) -{ - uint8_t* desc = udev->desc->strings[index]; - - *len = desc[0]; - - return desc; -} - -/*! - \brief handle Get_Status request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_getstatus (usb_dev *udev, usb_req *req) -{ - uint8_t recp = BYTE_LOW(req->wIndex); - - usb_reqsta req_status = REQ_NOTSUPP; - - static uint8_t status[2] = {0U}; - - switch(req->bmRequestType & USB_RECPTYPE_MASK) { - /* handle device get status request */ - case USB_RECPTYPE_DEV: - switch (udev->cur_status) { - case USBD_ADDRESSED: - case USBD_CONFIGURED: - if (udev->pm.power_mode) { - status[0] = USB_STATUS_SELF_POWERED; - } else { - status[0] = 0U; - } - - if (udev->pm.remote_wakeup) { - status[0] |= USB_STATUS_REMOTE_WAKEUP; - } else { - status[0] = 0U; - } - - req_status = REQ_SUPP; - break; - - default: - break; - } - break; - /* handle interface get status request */ - case USB_RECPTYPE_ITF: - if (((uint8_t)USBD_CONFIGURED == udev->cur_status) && (recp < USBD_ITF_MAX_NUM)) { - req_status = REQ_SUPP; - } - break; - /* handle endpoint get status request */ - case USB_RECPTYPE_EP: - if ((uint8_t)USBD_CONFIGURED == udev->cur_status) { - if (0x80U == (recp & 0x80U)) { - status[0] = udev->transc_in[EP_ID(recp)].ep_stall; - } else { - status[0] = udev->transc_out[recp].ep_stall; - } - req_status = REQ_SUPP; - } - break; - - default: - break; - } - - if (REQ_SUPP == req_status) { - usb_transc_config(&udev->transc_in[0], status, 2U, 2U); - } - - return req_status; -} - -/*! - \brief handle USB Clear_Feature request - \param[in] udev: pointer to USB device instance - \param[in] req: USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_clearfeature (usb_dev *udev, usb_req *req) -{ - uint8_t ep = 0U; - - switch (req->bmRequestType & (uint8_t)USB_RECPTYPE_MASK) { - case USB_RECPTYPE_DEV: - switch (udev->cur_status) { - case USBD_ADDRESSED: - case USBD_CONFIGURED: - /* clear device remote wakeup feature */ - if ((uint16_t)USB_FEATURE_REMOTE_WAKEUP == req->wValue) { - udev->pm.remote_wakeup = 0U; - - return REQ_SUPP; - } - break; - - default: - break; - } - break; - - case USB_RECPTYPE_EP: - /* get endpoint address */ - ep = BYTE_LOW(req->wIndex); - - if ((uint8_t)USBD_CONFIGURED == udev->cur_status) { - /* clear endpoint halt feature */ - if (((uint16_t)USB_FEATURE_EP_HALT == req->wValue) && (!CTL_EP(ep))) { - usbd_ep_clear_stall(udev, ep); - - return REQ_SUPP; - } - } - break; - - case USB_RECPTYPE_ITF: - break; - - default: - break; - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB Set_Feature request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_setfeature (usb_dev *udev, usb_req *req) -{ - uint8_t ep = 0U; - - switch (req->bmRequestType & (uint8_t)USB_RECPTYPE_MASK) { - case USB_RECPTYPE_DEV: - switch (udev->cur_status) { - case USBD_ADDRESSED: - case USBD_CONFIGURED: - /* set device remote wakeup feature */ - if ((uint16_t)USB_FEATURE_REMOTE_WAKEUP == req->wValue) { - udev->pm.remote_wakeup = 1U; - - return REQ_SUPP; - } - break; - - default: - break; - } - break; - - case USB_RECPTYPE_EP: - /* get endpoint address */ - ep = BYTE_LOW(req->wIndex); - - if ((uint8_t)USBD_CONFIGURED == udev->cur_status) { - /* set endpoint halt feature */ - if (((uint8_t)USB_FEATURE_EP_HALT == req->wValue) && (!CTL_EP(ep))) { - usbd_ep_stall(udev, ep); - - return REQ_SUPP; - } - } - break; - - case USB_RECPTYPE_ITF: - break; - - default: - break; - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB Set_Address request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_setaddress (usb_dev *udev, usb_req *req) -{ - if ((0U == req->wIndex) && (0U == req->wLength)) { - udev->dev_addr = (uint8_t)(req->wValue) & 0x7FU; - - if (udev->cur_status != (uint8_t)USBD_CONFIGURED) { - if (udev->dev_addr) { - udev->cur_status = (uint8_t)USBD_ADDRESSED; - } else { - udev->cur_status = (uint8_t)USBD_DEFAULT; - } - - return REQ_SUPP; - } - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB Get_Descriptor request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_getdescriptor (usb_dev *udev, usb_req *req) -{ - uint8_t desc_type = 0U; - uint8_t desc_index = 0U; - - usb_reqsta status = REQ_NOTSUPP; - - usb_transc *transc = &udev->transc_in[0]; - - switch (req->bmRequestType & USB_RECPTYPE_MASK) { - case USB_RECPTYPE_DEV: - desc_type = BYTE_HIGH(req->wValue); - desc_index = BYTE_LOW(req->wValue); - - switch (desc_type) { - case USB_DESCTYPE_DEV: - transc->xfer_buf = std_desc_get[desc_type - 1U](udev, desc_index, &transc->xfer_len); - if (64U == req->wLength) { - transc->xfer_len = 8U; - } - break; - - case USB_DESCTYPE_CONFIG: - transc->xfer_buf = std_desc_get[desc_type - 1U](udev, desc_index, &transc->xfer_len); - break; - - case USB_DESCTYPE_STR: - if (desc_index < STR_IDX_MAX) { - transc->xfer_buf = std_desc_get[desc_type - 1U](udev, desc_index, &transc->xfer_len); - } - break; - - case USB_DESCTYPE_ITF: - case USB_DESCTYPE_EP: - case USB_DESCTYPE_DEV_QUALIFIER: - case USB_DESCTYPE_OTHER_SPD_CONFIG: - case USB_DESCTYPE_ITF_POWER: - break; - - case USB_DESCTYPE_BOS: - transc->xfer_buf = _usb_bos_desc_get(udev, desc_index, &transc->xfer_len); - break; - - default: - break; - } - break; - - case USB_RECPTYPE_ITF: - /* get device class special descriptor */ - status = (usb_reqsta)(udev->class_core->req_process(udev, req)); - break; - - case USB_RECPTYPE_EP: - break; - - default: - break; - } - - if ((transc->xfer_len) && (req->wLength)) { - transc->xfer_len = USB_MIN(transc->xfer_len, req->wLength); - - if ((transc->xfer_len < udev->control.req.wLength) && - (0U == transc->xfer_len % transc->max_len)) { - udev->control.ctl_zlp = 1U; - } - - status = REQ_SUPP; - } - - return status; -} - -/*! - \brief handle USB Set_Descriptor request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_setdescriptor (usb_dev *udev, usb_req *req) -{ - (void)udev; - (void)req; - - /* no handle */ - return REQ_SUPP; -} - -/*! - \brief handle USB Get_Configuration request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_getconfiguration (usb_dev *udev, usb_req *req) -{ - (void)req; - - usb_reqsta req_status = REQ_NOTSUPP; - - switch (udev->cur_status) { - case USBD_ADDRESSED: - if (0U == udev->config) { - req_status = REQ_SUPP; - } - break; - - case USBD_CONFIGURED: - if (udev->config) { - req_status = REQ_SUPP; - } - break; - - default: - break; - } - - if (REQ_SUPP == req_status) { - usb_transc_config(&udev->transc_in[0], &(udev->config), 1U, 1U); - } - - return req_status; -} - -/*! - \brief handle USB Set_Configuration request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device operation cur_status -*/ -static usb_reqsta _usb_std_setconfiguration (usb_dev *udev, usb_req *req) -{ - static uint8_t config; - usb_reqsta status = REQ_NOTSUPP; - - config = (uint8_t)(req->wValue); - - if (config <= USBD_CFG_MAX_NUM) { - switch (udev->cur_status) { - case USBD_ADDRESSED: - if (config){ - (void)udev->class_core->init(udev, config); - - udev->config = config; - udev->cur_status = (uint8_t)USBD_CONFIGURED; - } - status = REQ_SUPP; - break; - - case USBD_CONFIGURED: - if (0U == config) { - (void)udev->class_core->deinit(udev, config); - - udev->config = config; - udev->cur_status = (uint8_t)USBD_ADDRESSED; - } else if (config != udev->config) { - /* clear old configuration */ - (void)udev->class_core->deinit(udev, udev->config); - - /* set new configuration */ - udev->config = config; - - (void)udev->class_core->init(udev, config); - } else { - /* no operation */ - } - status = REQ_SUPP; - break; - - case USBD_DEFAULT: - break; - - default: - break; - } - } - - return status; -} - -/*! - \brief handle USB Get_Interface request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_getinterface (usb_dev *udev, usb_req *req) -{ - switch (udev->cur_status) { - case USBD_DEFAULT: - break; - - case USBD_ADDRESSED: - break; - - case USBD_CONFIGURED: - if (BYTE_LOW(req->wIndex) < USBD_ITF_MAX_NUM) { - usb_transc_config(&udev->transc_in[0], &(udev->class_core->req_altset), 1U, 1U); - - return REQ_SUPP; - } - break; - - default: - break; - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB Set_Interface request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_setinterface (usb_dev *udev, usb_req *req) -{ - switch (udev->cur_status) { - case USBD_DEFAULT: - break; - - case USBD_ADDRESSED: - break; - - case USBD_CONFIGURED: - if (BYTE_LOW(req->wIndex) < USBD_ITF_MAX_NUM) { - udev->class_core->req_altset = (uint8_t)req->wValue; - - return REQ_SUPP; - } - break; - - default: - break; - } - - return REQ_NOTSUPP; -} - -/*! - \brief handle USB SynchFrame request - \param[in] udev: pointer to USB device instance - \param[in] req: pointer to USB device request - \param[out] none - \retval USB device request status -*/ -static usb_reqsta _usb_std_synchframe (usb_dev *udev, usb_req *req) -{ - (void)udev; - (void)req; - - /* no handle */ - return REQ_SUPP; -} - -/*! - \brief convert hex 32bits value into unicode char - \param[in] value: Hex 32bits value - \param[in] pbuf: buffer pointer to store unicode char - \param[in] len: value length - \param[out] none - \retval none -*/ -static void int_to_unicode (uint32_t value, uint8_t *pbuf, uint8_t len) -{ - uint8_t index = 0U; - - for (index = 0U; index < len; index++) { - if ((value >> 28U) < 0x0AU) { - pbuf[2U * index] = (uint8_t)((value >> 28) + '0'); - } else { - pbuf[2U * index] = (uint8_t)((value >> 28) + 'A' - 10U); - } - - value = value << 4U; - - pbuf[2U * index + 1U] = 0U; - } -} - -/*! - \brief convert hex 32bits value into unicode char - \param[in] none - \param[out] none - \retval none -*/ -void serial_string_get (uint16_t *unicode_str) -{ - if (6U != (unicode_str[0] & 0x00FFU)) { - uint32_t DeviceSerial0, DeviceSerial1, DeviceSerial2; - - DeviceSerial0 = *(uint32_t*)DEVICE_ID1; - DeviceSerial1 = *(uint32_t*)DEVICE_ID2; - DeviceSerial2 = *(uint32_t*)DEVICE_ID3; - - DeviceSerial0 += DeviceSerial2; - - if (0U != DeviceSerial0) { - int_to_unicode(DeviceSerial0, (uint8_t*)&(unicode_str[1]), 8U); - int_to_unicode(DeviceSerial1, (uint8_t*)&(unicode_str[9]), 4U); - } - } else { - uint32_t device_serial = *(uint32_t*)DEVICE_ID; - - if (0U != device_serial) { - unicode_str[1] = (uint16_t)(device_serial & 0x0000FFFFU); - unicode_str[2] = (uint16_t)((device_serial & 0xFFFF0000U) >> 16U); - - } - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_pwr.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_pwr.c deleted file mode 100644 index 6be6b66..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_pwr.c +++ /dev/null @@ -1,60 +0,0 @@ -/*! - \file usbd_pwr.c - \brief USB device power management driver - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_pwr.h" - -/*! - \brief start to remote wakeup - \param[in] udev: pointer to USB core instance - \param[out] none - \retval none -*/ -void usbd_remote_wakeup_active(usb_dev *udev) -{ - resume_mcu(udev); - -#ifdef LPM_ENABLED - if(1 == udev->lpm.L1_remote_wakeup){ - udev->drv_handler->resume(udev); - - udev->lpm.L1_resume = 1U; - } -#endif /* LPM_ENABLED */ - - if(1U == udev->pm.remote_wakeup){ - udev->pm.remote_wakeup_on = 1U; - udev->pm.esof_count = 15U; - udev->drv_handler->resume(udev); - } -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_transc.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_transc.c deleted file mode 100644 index 8837c08..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/device/Source/usbd_transc.c +++ /dev/null @@ -1,207 +0,0 @@ -/*! - \file usbd_transc.c - \brief USBD transaction function - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_enum.h" -#include "usbd_transc.h" - -/* local function prototypes ('static') */ -static inline void usb_stall_transc (usb_dev *udev); -static inline void usb_ctl_status_in (usb_dev *udev); -static inline void usb_ctl_data_in (usb_dev *udev); -static inline void usb_ctl_out (usb_dev *udev); -static inline void usb_0len_packet_send (usb_dev *udev); - -/*! - \brief USB setup stage processing - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -void _usb_setup_transc (usb_dev *udev, uint8_t ep_num) -{ - (void)ep_num; - - usb_reqsta reqstat = REQ_NOTSUPP; - - uint16_t count = udev->drv_handler->ep_read((uint8_t *)(&udev->control.req), 0U, (uint8_t)EP_BUF_SNG); - - if (count != USB_SETUP_PACKET_LEN) { - usb_stall_transc(udev); - - return; - } - - switch (udev->control.req.bmRequestType & USB_REQTYPE_MASK) { - /* standard device request */ - case USB_REQTYPE_STRD: - reqstat = usbd_standard_request(udev, &udev->control.req); - break; - - /* device class request */ - case USB_REQTYPE_CLASS: - reqstat = usbd_class_request(udev, &udev->control.req); - break; - - /* vendor defined request */ - case USB_REQTYPE_VENDOR: - reqstat = usbd_vendor_request(udev, &udev->control.req); - break; - - default: - break; - } - - if (REQ_SUPP == reqstat) { - if (0U == udev->control.req.wLength) { - /* USB control transfer status in stage */ - usb_ctl_status_in(udev); - } else { - if (udev->control.req.bmRequestType & 0x80U) { - usb_ctl_data_in(udev); - } else { - /* USB control transfer data out stage */ - usb_ctl_out(udev); - } - } - } else { - usb_stall_transc(udev); - } -} - -/*! - \brief data out stage processing - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint identifier(0..7) - \param[out] none - \retval none -*/ -void _usb_out0_transc (usb_dev *udev, uint8_t ep_num) -{ - if (((uint8_t)USBD_CONFIGURED == udev->cur_status) && (udev->class_core->ctlx_out != NULL)) { - /* device class handle */ - (void)udev->class_core->ctlx_out(udev); - } - - usb_transc_config(&udev->transc_out[ep_num], NULL, 0U, 0U); - - /* enter the control transaction status in stage */ - usb_ctl_status_in(udev); -} - -/*! - \brief data in stage processing - \param[in] udev: pointer to USB device instance - \param[in] ep_num: endpoint identifier(0..7) - \param[out] none - \retval none -*/ -void _usb_in0_transc (usb_dev *udev, uint8_t ep_num) -{ - (void)ep_num; - - if (udev->control.ctl_zlp) { - /* send 0 length packet */ - usb_0len_packet_send(udev); - - udev->control.ctl_zlp = 0U; - } - - if (((uint8_t)USBD_CONFIGURED == udev->cur_status) && (udev->class_core->ctlx_in != NULL)) { - (void)udev->class_core->ctlx_in(udev); - } - - /* USB control transfer status out stage */ - usb_ctl_out(udev); - - if (0U != udev->dev_addr) { - udev->drv_handler->set_addr(udev); - - udev->dev_addr = 0U; - } -} - -/*! - \brief USB stalled transaction - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_stall_transc (usb_dev *udev) -{ - usbd_ep_stall(udev, 0x0U); -} - -/*! - \brief USB control transaction status in stage - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_ctl_status_in (usb_dev *udev) -{ - udev->drv_handler->ep_write(udev->transc_in[0].xfer_buf, 0U, 0U); -} - -/*! - \brief USB control transaction data in stage - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_ctl_data_in (usb_dev *udev) -{ - usbd_ep_send(udev, 0U, udev->transc_in[0].xfer_buf, udev->transc_in[0].xfer_len); -} - -/*! - \brief USB control transaction data out & status out stage - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_ctl_out (usb_dev *udev) -{ - udev->drv_handler->ep_rx_enable(udev, 0U); -} - -/*! - \brief USB send 0 length data packet - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static inline void usb_0len_packet_send (usb_dev *udev) -{ - udev->drv_handler->ep_write(udev->transc_in[0].xfer_buf, 0U, 0U); -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_core.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_core.h deleted file mode 100644 index 165b541..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_core.h +++ /dev/null @@ -1,73 +0,0 @@ -/*! - \file usbd_lld_core.h - \brief USB device low level driver core - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_LLD_CORE_H -#define __USBD_LLD_CORE_H - -#include "usbd_lld_regs.h" -#include "usbd_core.h" - -/* double buffer endpoint direction enumeration */ -enum dbuf_ep_dir -{ - DBUF_EP_IN, /*!< double buffer in direction */ - DBUF_EP_OUT, /*!< double buffer out direction */ - DBUF_EP_ERR, /*!< double buffer error direction */ -}; - -/* USBD endpoint ram struct */ -typedef struct -{ - __IO uint32_t tx_addr; /*!< transmission address */ - __IO uint32_t tx_count; /*!< transmission count */ - __IO uint32_t rx_addr; /*!< reception address */ - __IO uint32_t rx_count; /*!< reception count */ -} usbd_ep_ram; - -extern struct _usb_handler usbd_drv_handler; - -/* USB core driver struct */ -typedef struct -{ - usb_basic basic; - usb_dev *dev; -} usb_core_drv; - -extern usb_core_drv usbd_core; - -/* function declarations */ -/* free buffer used from application by toggling the SW_BUF byte */ -void user_buffer_free (uint8_t ep_num, uint8_t dir); - -#endif /* __USBD_LLD_CORE_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_int.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_int.h deleted file mode 100644 index 2c0eece..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_int.h +++ /dev/null @@ -1,48 +0,0 @@ -/*! - \file usbd_lld_int.h - \brief USB device low level interrupt handler - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_LLD_INT_H -#define __USBD_LLD_INT_H - -#include "usbd_core.h" -#include "usbd_enum.h" -#include "usbd_pwr.h" - -/* function declarations */ -/* USB device interrupt service routine */ -void usbd_isr (void); -/* handle USB high priority successful transfer event */ -void usbd_int_hpst (usb_dev *udev); - -#endif /* __USBD_LLD_INT_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_regs.h b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_regs.h deleted file mode 100644 index 30a7f77..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Include/usbd_lld_regs.h +++ /dev/null @@ -1,227 +0,0 @@ -/*! - \file usbd_lld_regs.h - \brief USB device low level registers - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef __USBD_LLD_REGS_H -#define __USBD_LLD_REGS_H - -#include "usbd_conf.h" - -/* USB device registers base address */ -#define USBD USBD_BASE -#define USBD_RAM USBD_RAM_BASE - -/* registers definitions */ -/* common registers */ -#define USBD_CTL (REG32(USBD + 0x40U)) /*!< control register */ -#define USBD_INTF (REG32(USBD + 0x44U)) /*!< interrupt flag register */ -#define USBD_STAT (REG32(USBD + 0x48U)) /*!< status register */ -#define USBD_DADDR (REG32(USBD + 0x4CU)) /*!< device address register */ -#define USBD_BADDR (REG32(USBD + 0x50U)) /*!< buffer address register */ -#define USBD_LPMCS (REG32(USBD + 0x54U)) /*!< USBD LPM control and status register */ - -/* endpoint control and status register */ -#define USBD_EPxCS(ep_num) (REG32(USBD + (ep_num) * 4U)) /*!< endpoint x control and status register address */ - -/* bits definitions */ -/* USBD_CTL */ -#define CTL_STIE BIT(15) /*!< successful transfer interrupt enable mask */ -#define CTL_PMOUIE BIT(14) /*!< packet memory overrun/underrun interrupt enable mask */ -#define CTL_ERRIE BIT(13) /*!< error interrupt enable mask */ -#define CTL_WKUPIE BIT(12) /*!< wakeup interrupt enable mask */ -#define CTL_SPSIE BIT(11) /*!< suspend state interrupt enable mask */ -#define CTL_RSTIE BIT(10) /*!< reset interrupt enable mask */ -#define CTL_SOFIE BIT(9) /*!< start of frame interrupt enable mask */ -#define CTL_ESOFIE BIT(8) /*!< expected start of frame interrupt enable mask */ -#define CTL_L1REQIE BIT(7) /*!< LPM L1 state request interrupt enable */ -#define CTL_L1RSREQ BIT(5) /*!< LPM L1 resume request */ -#define CTL_RSREQ BIT(4) /*!< resume request */ -#define CTL_SETSPS BIT(3) /*!< set suspend state */ -#define CTL_LOWM BIT(2) /*!< low-power mode at suspend state */ -#define CTL_CLOSE BIT(1) /*!< goes to close state */ -#define CTL_SETRST BIT(0) /*!< set USB reset */ - -#ifdef LPM_ENABLED -#define USBD_INTEN BITS(7, 15) /*!< USBD interrupt enable bits */ -#else -#define USBD_INTEN BITS(8, 15) /*!< USBD interrupt enable bits */ -#endif -/* USBD_INTF */ -#define INTF_STIF BIT(15) /*!< successful transfer interrupt flag (read only bit) */ -#define INTF_PMOUIF BIT(14) /*!< packet memory overrun/underrun interrupt flag (clear-only bit) */ -#define INTF_ERRIF BIT(13) /*!< error interrupt flag (clear-only bit) */ -#define INTF_WKUPIF BIT(12) /*!< wakeup interrupt flag (clear-only bit) */ -#define INTF_SPSIF BIT(11) /*!< suspend state interrupt flag (clear-only bit) */ -#define INTF_RSTIF BIT(10) /*!< reset interrupt flag (clear-only bit) */ -#define INTF_SOFIF BIT(9) /*!< start of frame interrupt flag (clear-only bit) */ -#define INTF_ESOFIF BIT(8) /*!< expected start of frame interrupt flag(clear-only bit) */ -#define INTF_L1REQ BIT(7) /*!< LPM L1 transaction is successfully received and acknowledged */ -#define INTF_DIR BIT(4) /*!< direction of transaction (read-only bit) */ -#define INTF_EPNUM BITS(0, 3) /*!< endpoint number (read-only bit) */ - -/* USBD_STAT */ -#define STAT_RXDP BIT(15) /*!< data plus line status */ -#define STAT_RXDM BIT(14) /*!< data minus line status */ -#define STAT_LOCK BIT(13) /*!< locked the USB */ -#define STAT_SOFLN BITS(11, 12) /*!< SOF lost number */ -#define STAT_FCNT BITS(0, 10) /*!< frame number count */ - -/* USBD_DADDR */ -#define DADDR_USBEN BIT(7) /*!< USB module enable */ -#define DADDR_USBADDR BITS(0, 6) /*!< USB device address */ - -/* USBD_EPxCS */ -#define EPxCS_RX_ST BIT(15) /*!< endpoint reception successful transferred */ -#define EPxCS_RX_DTG BIT(14) /*!< endpoint reception data PID toggle */ -#define EPxCS_RX_STA BITS(12, 13) /*!< endpoint reception status bits */ -#define EPxCS_SETUP BIT(11) /*!< endpoint setup transaction completed */ -#define EPxCS_CTL BITS(9, 10) /*!< endpoint type control */ -#define EPxCS_KCTL BIT(8) /*!< endpoint kind control */ -#define EPxCS_TX_ST BIT(7) /*!< endpoint transmission successful transfer */ -#define EPxCS_TX_DTG BIT(6) /*!< endpoint transmission data toggle */ -#define EPxCS_TX_STA BITS(4, 5) /*!< endpoint transmission transfers status bits */ -#define EPxCS_AR BITS(0, 3) /*!< endpoint address */ - -/* USBD_LPMCS */ -#define LPMCS_BLSTAT BITS(4, 7) /*!< bLinkState value */ -#define LPMCS_REMWK BIT(3) /*!< bRemoteWake value */ -#define LPMCS_LPMACK BIT(1) /*!< LPM token acknowledge enable */ -#define LPMCS_LPMEN BIT(0) /*!< LPM support enable */ - -/* constants definitions */ -/* endpoint control and status register mask (no toggle fields) */ -#define EPCS_MASK (EPxCS_RX_ST | EPxCS_SETUP | \ - EPxCS_CTL | EPxCS_KCTL | EPxCS_TX_ST | EPxCS_AR) - -/* EPxCS_CTL[1:0] endpoint type control */ -#define ENDP_TYPE(regval) (EPxCS_CTL & ((regval) << 9U)) - -#define EP_BULK ENDP_TYPE(0U) /* bulk transfers */ -#define EP_CONTROL ENDP_TYPE(1U) /* control transfers */ -#define EP_ISO ENDP_TYPE(2U) /* isochronous transfers */ -#define EP_INTERRUPT ENDP_TYPE(3U) /* interrupt transfers */ -#define EP_CTL_MASK (~EPxCS_CTL & EPCS_MASK) - -/* endpoint kind control mask */ -#define EPKCTL_MASK (~EPxCS_KCTL & EPCS_MASK) - -/* EPxCS_TX_STA[1:0] status for Tx transfer */ -#define ENDP_TXSTAT(regval) (EPxCS_TX_STA & ((regval) << 4U)) - -#define EPTX_DISABLED ENDP_TXSTAT(0U) /* transmission state is disabled */ -#define EPTX_STALL ENDP_TXSTAT(1U) /* transmission state is STALL */ -#define EPTX_NAK ENDP_TXSTAT(2U) /* transmission state is NAK */ -#define EPTX_VALID ENDP_TXSTAT(3U) /* transmission state is enabled */ -#define EPTX_DTGMASK (EPxCS_TX_STA | EPCS_MASK) - -/* EPxCS_RX_STA[1:0] status for Rx transfer */ -#define ENDP_RXSTAT(regval) (EPxCS_RX_STA & ((regval) << 12U)) - -#define EPRX_DISABLED ENDP_RXSTAT(0U) /* reception state is disabled */ -#define EPRX_STALL ENDP_RXSTAT(1U) /* reception state is STALL */ -#define EPRX_NAK ENDP_RXSTAT(2U) /* reception state is NAK */ -#define EPRX_VALID ENDP_RXSTAT(3U) /* reception state is enabled */ -#define EPRX_DTGMASK (EPxCS_RX_STA | EPCS_MASK) - -/* endpoint receive/transmission counter register bit definitions */ -#define EPRCNT_BLKSIZ BIT(15) /* reception data block size */ -#define EPRCNT_BLKNUM BITS(10, 14) /* reception data block number */ -#define EPRCNT_CNT BITS(0, 9) /* reception data count */ - -#define EPTCNT_CNT BITS(0, 9) /* transmisson data count */ - -/* interrupt flag clear bits */ -#define CLR(x) (USBD_INTF = ~INTF_##x) - -/* endpoint receive/transmission counter register bit offset */ -#define BLKSIZE_OFFSET (0x01U) -#define BLKNUM_OFFSET (0x05U) -#define RXCNT_OFFSET (0x0AU) - -#define TXCNT_OFFSET (0x0AU) - -#define BLKSIZE32_MASK (0x1fU) -#define BLKSIZE2_MASK (0x01U) - -#define BLKSIZE32_OFFSETMASK (0x05U) -#define BLKSIZE2_OFFSETMASK (0x01U) - -/* USBD operation macros */ - -/* Tx or Rx transfer status setting (bits EPTX_STA[1:0]) */ - -#define USBD_EP_TX_STAT_SET(ep, stat) do {\ - USBD_EPxCS(ep) = (USBD_EPxCS(ep) & (uint16_t)EPTX_DTGMASK) ^ (stat); \ -} while(0) - -#define USBD_EP_RX_STAT_SET(ep, stat) do {\ - USBD_EPxCS(ep) = (USBD_EPxCS(ep) & (uint16_t)EPRX_DTGMASK) ^ (stat); \ -} while(0) - -/* clear bit EPxCS_RX_ST/EPxCS_TX_ST in the endpoint control and status register */ - -#define USBD_EP_TX_ST_CLEAR(ep) do {\ - USBD_EPxCS(ep) &= ~EPxCS_TX_ST & (uint16_t)EPCS_MASK; \ -} while(0) - -#define USBD_EP_RX_ST_CLEAR(ep) do {\ - USBD_EPxCS(ep) &= ~EPxCS_RX_ST & (uint16_t)EPCS_MASK; \ -} while(0) - -/* toggle EPxCS_RX_DTG or EPxCS_TX_DTG bit in the endpoint control and status register */ - -#define USBD_TX_DTG_TOGGLE(ep) do {\ - USBD_EPxCS(ep) = EPxCS_TX_DTG | (USBD_EPxCS(ep) & EPCS_MASK); \ -} while(0) - -#define USBD_RX_DTG_TOGGLE(ep) do {\ - USBD_EPxCS(ep) = EPxCS_RX_DTG | (USBD_EPxCS(ep) & EPCS_MASK); \ -} while(0) - -/* clear EPxCS_RX_DTG or EPxCS_TX_DTG bit in the endpoint control and status register */ - -#define USBD_TX_DTG_CLEAR(ep) do {\ - if ((USBD_EPxCS(ep_num) & EPxCS_TX_DTG) != 0U) {\ - USBD_TX_DTG_TOGGLE(ep);\ - } \ -} while(0) - -#define USBD_RX_DTG_CLEAR(ep) do {\ - if ((USBD_EPxCS(ep_num) & EPxCS_RX_DTG) != 0U) {\ - USBD_RX_DTG_TOGGLE(ep);\ - } \ -} while(0) - -#define USBD_EP_DBL_BUF_SET(ep) (USBD_EPxCS(ep) = (USBD_EPxCS(ep) | EPxCS_KCTL) & EPCS_MASK) - -#endif /* __USBD_LLD_REGS_H */ diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Source/usbd_lld_core.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Source/usbd_lld_core.c deleted file mode 100644 index 13dfb34..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Source/usbd_lld_core.c +++ /dev/null @@ -1,641 +0,0 @@ -/*! - \file usbd_lld_core.c - \brief USB device low level driver core - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_lld_core.h" -#include "usbd_enum.h" - -#define USB_EPTYPE_MASK 0x03U - -#if defined (__CC_ARM) /* ARM Compiler */ -static usbd_ep_ram btable_ep[EP_COUNT]__attribute__((at(USBD_RAM + BTABLE_OFFSET))); -#elif defined (__ICCARM__) /* IAR Compiler */ - __no_init usbd_ep_ram btable_ep[EP_COUNT] @(USBD_RAM + BTABLE_OFFSET); -#elif defined (__GNUC__) /* GNU GCC Compiler */ - usbd_ep_ram *btable_ep = (usbd_ep_ram *)(USBD_RAM + BTABLE_OFFSET); -#endif - -usb_core_drv usbd_core; - -static const uint32_t ep_type[] = { - [USB_EP_ATTR_CTL] = EP_CONTROL, - [USB_EP_ATTR_BULK] = EP_BULK, - [USB_EP_ATTR_INT] = EP_INTERRUPT, - [USB_EP_ATTR_ISO] = EP_ISO -}; - -/* local function prototypes ('static') */ -static void usbd_dp_pullup (FlagStatus status); -static void usbd_core_reset (void); -static void usbd_core_stop (void); -static void usbd_address_set (usb_dev *udev); -static void usbd_ep_reset (usb_dev *udev); -static void usbd_ep_setup (usb_dev *udev, uint8_t buf_kind, uint32_t buf_addr, const usb_desc_ep *ep_desc); -static void usbd_ep_rx_enable (usb_dev *udev, uint8_t ep_addr); -static void usbd_ep_disable (usb_dev *udev, uint8_t ep_addr); -static void usbd_ep_stall_set (usb_dev *udev, uint8_t ep_addr); -static void usbd_ep_stall_clear (usb_dev *udev, uint8_t ep_addr); -static void usbd_ep_data_write (uint8_t *user_fifo, uint8_t ep_num, uint16_t bytes); -static uint16_t usbd_ep_data_read (uint8_t *user_fifo, uint8_t ep_num, uint8_t buf_kind); -static void usbd_resume (usb_dev *udev); -static void usbd_suspend (void); -static void usbd_leave_suspend (void); -static uint8_t usbd_ep_status (usb_dev *udev, uint8_t ep_addr); - -struct _usb_handler usbd_drv_handler = { - .dp_pullup = usbd_dp_pullup, - .init = usbd_core_reset, - .deinit = usbd_core_stop, - .suspend = usbd_suspend, - .suspend_leave = usbd_leave_suspend, - .resume = usbd_resume, - .set_addr = usbd_address_set, - .ep_reset = usbd_ep_reset, - .ep_disable = usbd_ep_disable, - .ep_setup = usbd_ep_setup, - .ep_rx_enable = usbd_ep_rx_enable, - .ep_write = usbd_ep_data_write, - .ep_read = usbd_ep_data_read, - .ep_stall_set = usbd_ep_stall_set, - .ep_stall_clear = usbd_ep_stall_clear, - .ep_status_get = usbd_ep_status -}; - -/*! - \brief free buffer used from application by toggling the SW_BUF byte - \param[in] ep_num: endpoint identifier (0..7) - \param[in] dir: endpoint direction which can be OUT(0) or IN(1) - \param[out] none - \retval None -*/ -void user_buffer_free (uint8_t ep_num, uint8_t dir) -{ - if ((uint8_t)DBUF_EP_OUT == dir) { - USBD_TX_DTG_TOGGLE(ep_num); - } else if ((uint8_t)DBUF_EP_IN == dir) { - USBD_RX_DTG_TOGGLE(ep_num); - } else { - /* no operation */ - } -} - -/*! - \brief set the status of pull-up pin - \param[in] status: SET or RESET - \param[out] none - \retval none -*/ -static void usbd_dp_pullup (FlagStatus status) -{ - if (SET == status) { - gpio_bit_set(USB_PULLUP, USB_PULLUP_PIN); - } else { - gpio_bit_reset(USB_PULLUP, USB_PULLUP_PIN); - } -} - -/*! - \brief device core register initialization - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_core_reset (void) -{ - /* reset the CLOSE bit */ - USBD_CTL = CTL_SETRST; - - /* may be need wait some time(tSTARTUP) */ - - /* clear SETRST bit in USBD_CTL register */ - USBD_CTL = 0U; - - /* clear all pending interrupts */ - USBD_INTF = 0U; - - /* set descriptors table offset in USB dedicated SRAM */ - USBD_BADDR = BTABLE_OFFSET & 0xFFF8U; - -#ifdef LPM_ENABLED - /* enable L1REQ interrupt */ - USBD_CTL = CTL_L1REQIE; - - USBD_LPMCS = LPMCS_LPMACK | LPMCS_LPMEN; -#endif /* LPM_ENABLED */ - - /* enable all interrupts mask bits */ - USBD_CTL |= CTL_STIE | CTL_WKUPIE | CTL_SPSIE | CTL_SOFIE | CTL_ESOFIE | CTL_RSTIE; -} - -/*! - \brief device core register configure when stop device - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_core_stop (void) -{ - /* disable all interrupts and set USB reset */ - USBD_CTL = CTL_SETRST; - - /* clear all interrupt flags */ - USBD_INTF = 0U; - - /* close device */ - USBD_CTL = CTL_SETRST | CTL_CLOSE; -} - -/*! - \brief set device address - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void usbd_address_set (usb_dev *udev) -{ - USBD_DADDR = DADDR_USBEN | udev->dev_addr; -} - -/*! - \brief handle USB reset event - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void usbd_ep_reset (usb_dev *udev) -{ - uint8_t i = 0U; - - usb_transc *transc = &udev->transc_in[0]; - - btable_ep[0].tx_addr = EP0_TX_ADDR; - btable_ep[0].tx_count = 0U; - - transc->max_len = USBD_EP0_MAX_SIZE; - - transc = &udev->transc_out[0]; - - btable_ep[0].rx_addr = EP0_RX_ADDR; - - transc->max_len = USBD_EP0_MAX_SIZE; - - if (transc->max_len > 62U) { - btable_ep[0].rx_count = ((uint16_t)((uint16_t)transc->max_len << 5) - 1U) | 0x8000U; - } else { - btable_ep[0].rx_count = ((transc->max_len + 1U) & ~1U) << 9U; - } - - /* reset non-control endpoints */ - for (i = 1U; i < EP_COUNT; i++) { - USBD_EPxCS(i) = (USBD_EPxCS(i) & EPCS_MASK) | i; - } - - /* clear endpoint 0 register */ - USBD_EPxCS(0U)= (uint16_t)(USBD_EPxCS(0U)); - - USBD_EPxCS(0U) = EP_CONTROL | EPRX_VALID | EPTX_NAK; - - /* set device address as default address 0 */ - USBD_DADDR = DADDR_USBEN; - - udev->cur_status = (uint8_t)USBD_DEFAULT; -} - -/*! - \brief endpoint initialization - \param[in] udev: pointer to USB core instance - \param[in] buf_kind: endpoint buffer kind - \param[in] buf_addr: endpoint buffer address - \param[in] ep_desc: pointer to endpoint descriptor - \param[out] none - \retval none -*/ -static void usbd_ep_setup (usb_dev *udev, uint8_t buf_kind, uint32_t buf_addr, const usb_desc_ep *ep_desc) -{ - uint8_t ep_addr = ep_desc->bEndpointAddress; - uint8_t ep_num = EP_ID(ep_addr); - uint16_t max_len = ep_desc->wMaxPacketSize; - - usb_transc *transc = NULL; - - /* set the endpoint type */ - USBD_EPxCS(ep_num) = ep_type[ep_desc->bmAttributes & USB_EPTYPE_MASK] | ep_num; - - if (EP_DIR(ep_addr)) { - transc = &udev->transc_in[ep_num]; - - transc->max_len = (uint8_t)max_len; - - if ((uint8_t)EP_BUF_SNG == buf_kind) { - btable_ep[ep_num].tx_addr = buf_addr; - - /* configure the endpoint status as NAK status */ - USBD_EP_TX_STAT_SET(ep_num, EPTX_NAK); - } else if ((uint8_t)EP_BUF_DBL == buf_kind) { - USBD_EP_DBL_BUF_SET(ep_num); - - btable_ep[ep_num].tx_addr = buf_addr & 0xFFFFU; - btable_ep[ep_num].rx_addr = (buf_addr & 0xFFFF0000U) >> 16U; - - USBD_EP_TX_STAT_SET(ep_num, EPTX_VALID); - USBD_EP_RX_STAT_SET(ep_num, EPRX_DISABLED); - } else { - /* error operation */ - } - } else { - transc = &udev->transc_out[ep_num]; - - transc->max_len = (uint8_t)max_len; - - if ((uint8_t)EP_BUF_SNG == buf_kind) { - btable_ep[ep_num].rx_addr = buf_addr; - } else if ((uint8_t)EP_BUF_DBL == buf_kind) { - USBD_EP_DBL_BUF_SET(ep_num); - - USBD_TX_DTG_TOGGLE(ep_num); - - btable_ep[ep_num].tx_addr = buf_addr & 0xFFFFU; - btable_ep[ep_num].rx_addr = (buf_addr & 0xFFFF0000U) >> 16U; - - if (max_len > 62U) { - btable_ep[ep_num].tx_count = (((uint32_t)max_len << 5) - 1U) | 0x8000U; - } else { - btable_ep[ep_num].tx_count = ((max_len + 1U) & ~1U) << 9U; - } - } else { - /* error operation */ - } - - if (max_len > 62U) { - btable_ep[ep_num].rx_count = (((uint32_t)max_len << 5U) - 1U) | 0x8000U; - } else { - btable_ep[ep_num].rx_count = ((max_len + 1U) & ~1U) << 9U; - } - - if ((uint8_t)EP_BUF_SNG == buf_kind) { - /* configure the endpoint status as NAK status */ - USBD_EP_RX_STAT_SET(ep_num, EPRX_NAK); - } else if ((uint8_t)EP_BUF_DBL == buf_kind) { - USBD_EP_RX_STAT_SET(ep_num, EPRX_DISABLED); - USBD_EP_TX_STAT_SET(ep_num, EPTX_NAK); - } else { - /* error operation */ - } - } -} - -/*! - \brief configure the endpoint when it is disabled - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -static void usbd_ep_disable (usb_dev *udev, uint8_t ep_addr) -{ - (void)udev; - - uint8_t ep_num = EP_ID(ep_addr); - - if (EP_DIR(ep_addr)) { - USBD_TX_DTG_CLEAR(ep_num); - - /* configure the endpoint status as DISABLED */ - USBD_EP_TX_STAT_SET(ep_num, EPTX_DISABLED); - } else { - USBD_RX_DTG_CLEAR(ep_num); - - /* configure the endpoint status as DISABLED */ - USBD_EP_RX_STAT_SET(ep_num, EPRX_DISABLED); - } -} - -/*! - \brief enable endpoint to receive - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -static void usbd_ep_rx_enable (usb_dev *udev, uint8_t ep_addr) -{ - (void)udev; - - /* enable endpoint to receive */ - USBD_EP_RX_STAT_SET(EP_ID(ep_addr), EPRX_VALID); -} - -/*! - \brief set an endpoint to STALL status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -static void usbd_ep_stall_set (usb_dev *udev, uint8_t ep_addr) -{ - uint8_t ep_num = EP_ID(ep_addr); - - if (0U == ep_num) { - USBD_EP_TX_STAT_SET(0U, EPTX_STALL); - USBD_EP_RX_STAT_SET(0U, EPRX_STALL); - } else { - if (EP_DIR(ep_addr)) { - udev->transc_in[ep_num].ep_stall = 1U; - - USBD_EP_TX_STAT_SET(ep_num, EPTX_STALL); - } else { - udev->transc_out[ep_num].ep_stall = 1U; - - USBD_EP_RX_STAT_SET(ep_num, EPRX_STALL); - } - } -} - -/*! - \brief clear endpoint stalled status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval none -*/ -static void usbd_ep_stall_clear (usb_dev *udev, uint8_t ep_addr) -{ - uint8_t ep_num = EP_ID(ep_addr); - - if (EP_DIR(ep_addr)) { - /* clear endpoint data toggle bit */ - USBD_TX_DTG_CLEAR(ep_num); - - udev->transc_in[ep_num].ep_stall = 0U; - - /* clear endpoint stall status */ - USBD_EP_TX_STAT_SET(ep_num, EPTX_VALID); - } else { - /* clear endpoint data toggle bit */ - USBD_RX_DTG_CLEAR(ep_num); - - udev->transc_out[ep_num].ep_stall = 0U; - - /* clear endpoint stall status */ - USBD_EP_RX_STAT_SET(ep_num, EPRX_VALID); - } -} - -/*! - \brief get the endpoint status - \param[in] udev: pointer to USB core instance - \param[in] ep_addr: endpoint address - in this parameter: - bit0..bit6: endpoint number (0..7) - bit7: endpoint direction which can be IN(1) or OUT(0) - \param[out] none - \retval endpoint status -*/ -static uint8_t usbd_ep_status (usb_dev *udev, uint8_t ep_addr) -{ - (void)udev; - - uint32_t epcs = USBD_EPxCS(EP_ID(ep_addr)); - - if (EP_DIR(ep_addr)) { - return (uint8_t)(epcs & EPxCS_TX_STA); - } else { - return (uint8_t)(epcs & EPxCS_RX_STA); - } -} - -/*! - \brief write data from user FIFO to USB RAM - \param[in] user_fifo: pointer to user FIFO - \param[in] ep_num: endpoint number - \param[in] bytes: the bytes count of the write data - \param[out] none - \retval none -*/ -static void usbd_ep_data_write (uint8_t *user_fifo, uint8_t ep_num, uint16_t bytes) -{ - if (0U != bytes) { - uint32_t n; - uint32_t *write_addr = (uint32_t *)(btable_ep[ep_num].tx_addr * 2U + USBD_RAM); - - for (n = 0U; n < (bytes + 1U) / 2U; n++) { - *write_addr++ = *((uint16_t*)user_fifo); - user_fifo += 2U; - } - } - - btable_ep[ep_num].tx_count = bytes; - - USBD_EP_TX_STAT_SET(ep_num, EPTX_VALID); -} - -/*! - \brief read data from USBRAM to user FIFO - \param[in] user_fifo: pointer to user FIFO - \param[in] ep_num: endpoint number - \param[in] buf_kind: endpoint buffer kind - \param[out] none - \retval none -*/ -static uint16_t usbd_ep_data_read (uint8_t *user_fifo, uint8_t ep_num, uint8_t buf_kind) -{ - uint16_t n = 0U, bytes = 0U; - uint32_t *read_addr = NULL; - - if ((uint8_t)EP_BUF_SNG == buf_kind) { - bytes = (uint16_t)(btable_ep[ep_num].rx_count & EPRCNT_CNT); - - read_addr = (uint32_t *)(btable_ep[ep_num].rx_addr * 2U + USBD_RAM); - } else if ((uint8_t)EP_BUF_DBL == buf_kind) { - if (USBD_EPxCS(ep_num) & EPxCS_TX_DTG) { - bytes = (uint16_t)(btable_ep[ep_num].tx_count & EPRCNT_CNT); - - read_addr = (uint32_t *)(btable_ep[ep_num].tx_addr * 2U + USBD_RAM); - } else { - bytes = (uint16_t)(btable_ep[ep_num].rx_count & EPRCNT_CNT); - - read_addr = (uint32_t *)(btable_ep[ep_num].rx_addr * 2U + USBD_RAM); - } - } else { - return 0U; - } - - for (n = 0U; n < (bytes + 1U) / 2U; n++) { - *((uint16_t*)user_fifo) = (uint16_t)*read_addr++; - user_fifo += 2U; - } - - return bytes; -} - -#ifdef USBD_LOWPWR_MODE_ENABLE - -/*! - \brief restore system clocks and power while exiting from suspend mode - \param[in] none - \param[out] none - \retval none -*/ -static void lowpower_mode_exit (void) -{ - /* restore system clock */ - -#ifdef LPM_ENABLED - /* enable IRC8M */ - rcu_osci_on(RCU_IRC8M); - - /* wait till IRC8M is ready */ - while (RESET == rcu_flag_get(RCU_FLAG_IRC8MSTB)) { - } -#else - /* enable HXTAL */ - rcu_osci_on(RCU_HXTAL); - - /* wait till HXTAL is ready */ - while(RESET == rcu_flag_get(RCU_FLAG_HXTALSTB)) { - } -#endif - - /* enable PLL */ - rcu_osci_on(RCU_PLL_CK); - - /* wait till PLL is ready */ - while(RESET == rcu_flag_get(RCU_FLAG_PLLSTB)) { - } - - /* select PLL as system clock source */ - rcu_system_clock_source_config(RCU_CKSYSSRC_PLL); - - /* wait till PLL is used as system clock source */ - while(0x08U != rcu_system_clock_source_get()) { - } - - /* low power sleep on exit disabled */ - system_lowpower_reset(SCB_LPM_DEEPSLEEP); - -#ifdef USE_IRC48M - /* enable IRC48M clock */ - rcu_osci_on(RCU_IRC48M); - - /* wait till IRC48M is ready */ - while (SUCCESS != rcu_osci_stab_wait(RCU_IRC48M)) { - } - - rcu_ck48m_clock_config(RCU_CK48MSRC_IRC48M); -#endif -} - -#endif /* USBD_LOWPWR_MODE_ENABLE */ - -/*! - \brief resume the USB device - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_resume (usb_dev *udev) -{ -#ifdef LPM_ENABLED - if(1 == udev->lpm.L1_remote_wakeup){ - USBD_CTL |= CTL_L1RSREQ; - } -#endif /* LPM_ENABLED */ - - if(1U == usbd_core.dev->pm.remote_wakeup){ - /* make USB resume */ - USBD_CTL |= CTL_RSREQ; - } -} - -/*! - \brief set USB device to leave mode - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_leave_suspend (void) -{ - /* clear low_power mode bit in USBD_CTL */ - USBD_CTL &= ~CTL_LOWM; - -#ifdef USBD_LOWPWR_MODE_ENABLE - - /* restore normal operations */ - lowpower_mode_exit(); - -#endif /* USBD_LOWPWR_MODE_ENABLE */ - - /* clear SETSPS bit */ - USBD_CTL &= ~CTL_SETSPS; -} - -/*! - \brief set USB device to enter suspend mode - \param[in] none - \param[out] none - \retval none -*/ -static void usbd_suspend (void) -{ - /* set USB module to suspend and low-power mode */ - USBD_CTL |= CTL_SETSPS | CTL_LOWM; - -#ifdef USBD_LOWPWR_MODE_ENABLE - - /* check wakeup flag is set */ - if (0U == (USBD_INTF & INTF_WKUPIF)) { - /* enter DEEP_SLEEP mode with LDO in low power mode */ - pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD); - } else { - /* clear wakeup interrupt flag */ - CLR(WKUPIF); - - /* clear set_suspend flag */ - USBD_CTL &= ~CTL_SETSPS; - } - -#endif /* USBD_LOWPWR_MODE_ENABLE */ -} diff --git a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Source/usbd_lld_int.c b/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Source/usbd_lld_int.c deleted file mode 100644 index c547c33..0000000 --- a/Example/EpaperModuleTest_GD32F303/GD32/GD32F30x_usbd_library/usbd/Source/usbd_lld_int.c +++ /dev/null @@ -1,276 +0,0 @@ - /*! - \file usbd_lld_int.c - \brief USB device low level interrupt routines - - \version 2020-08-01, V3.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2020, GigaDevice Semiconductor Inc. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "usbd_lld_int.h" -#include "usbd_lld_core.h" - -/* local function prototypes ('static') */ -static void usbd_int_suspend (usb_dev *udev); - -/*! - \brief handle USB high priority successful transfer event - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -void usbd_int_hpst (usb_dev *udev) -{ - __IO uint16_t int_status = 0U; - - /* wait till interrupts are not pending */ - while ((int_status = (uint16_t)USBD_INTF) & (uint16_t)INTF_STIF) { - /* get endpoint number */ - uint8_t ep_num = (uint8_t)(int_status & INTF_EPNUM); - - uint8_t transc_num = (uint8_t)TRANSC_UNKNOWN; - - if (int_status & INTF_DIR) { - if (USBD_EPxCS(ep_num) & EPxCS_RX_ST) { - uint16_t count = 0U; - - usb_transc *transc = &udev->transc_out[ep_num]; - - /* clear successful receive interrupt flag */ - USBD_EP_RX_ST_CLEAR(ep_num); - - count = udev->drv_handler->ep_read (transc->xfer_buf, ep_num, (uint8_t)EP_BUF_DBL); - - user_buffer_free(ep_num, (uint8_t)DBUF_EP_OUT); - - transc->xfer_buf += count; - transc->xfer_count += count; - transc->xfer_len -= count; - - if ((0U == transc->xfer_len) || (count < transc->max_len)) { - USBD_EP_RX_STAT_SET(ep_num, EPRX_NAK); - - transc_num = (uint8_t)TRANSC_OUT; - } - } - } else { - /* handle the in direction transaction */ - if (USBD_EPxCS(ep_num) & EPxCS_TX_ST) { - /* clear successful transmit interrupt flag */ - USBD_EP_TX_ST_CLEAR(ep_num); - - transc_num = (uint8_t)TRANSC_IN; - } - } - - if ((uint8_t)TRANSC_UNKNOWN != transc_num) { - udev->ep_transc[ep_num][transc_num](udev, ep_num); - } - } -} - -/*! - \brief USB interrupt events service routine - \param[in] none - \param[out] none - \retval none -*/ -void usbd_isr (void) -{ - __IO uint16_t int_status = (uint16_t)USBD_INTF; - __IO uint16_t int_flag = (uint16_t)(USBD_INTF & (USBD_CTL & USBD_INTEN)); - - usb_dev *udev = usbd_core.dev; - - if (INTF_STIF & int_flag) { - /* wait till interrupts are not pending */ - while ((int_status = (uint16_t)USBD_INTF) & (uint16_t)INTF_STIF) { - /* get endpoint number */ - uint8_t ep_num = (uint8_t)(int_status & INTF_EPNUM); - - if (int_status & INTF_DIR) { - /* handle the USB OUT direction transaction */ - if (USBD_EPxCS(ep_num) & EPxCS_RX_ST) { - /* clear successful receive interrupt flag */ - USBD_EP_RX_ST_CLEAR(ep_num); - - if (USBD_EPxCS(ep_num) & EPxCS_SETUP) { - - if (ep_num == 0U) { - udev->ep_transc[ep_num][TRANSC_SETUP](udev, ep_num); - } else { - return; - } - } else { - usb_transc *transc = &udev->transc_out[ep_num]; - - uint16_t count = udev->drv_handler->ep_read (transc->xfer_buf, ep_num, (uint8_t)EP_BUF_SNG); - - transc->xfer_buf += count; - transc->xfer_count += count; - - if ((transc->xfer_count >= transc->xfer_len) || (count < transc->max_len)) { - if (udev->ep_transc[ep_num][TRANSC_OUT]) { - udev->ep_transc[ep_num][TRANSC_OUT](udev, ep_num); - } - } else { - udev->drv_handler->ep_rx_enable(udev, ep_num); - } - } - } - } else { - /* handle the USB IN direction transaction */ - if (USBD_EPxCS(ep_num) & EPxCS_TX_ST) { - /* clear successful transmit interrupt flag */ - USBD_EP_TX_ST_CLEAR(ep_num); - - usb_transc *transc = &udev->transc_in[ep_num]; - - if (transc->xfer_len == 0U) { - if (udev->ep_transc[ep_num][TRANSC_IN]) { - udev->ep_transc[ep_num][TRANSC_IN](udev, ep_num); - } - } else { - usbd_ep_send(udev, ep_num, transc->xfer_buf, transc->xfer_len); - } - } - } - } - } - - if (INTF_WKUPIF & int_flag) { - /* clear wakeup interrupt flag in INTF */ - CLR(WKUPIF); - - /* restore the old cur_status */ - udev->cur_status = udev->backup_status; - -#ifdef LPM_ENABLED - if ((0U == udev->pm.remote_wakeup_on) && (0U == udev->lpm.L1_resume)) { - resume_mcu(udev); - } else if (1U == udev->pm.remote_wakeup_on) { - /* no operation */ - } else { - udev->lpm.L1_resume = 0U; - } - - /* clear L1 remote wakeup flag */ - udev->lpm.L1_remote_wakeup = 0U; -#else - if (0U == udev->pm.remote_wakeup_on) { - resume_mcu(udev); - } -#endif /* LPM_ENABLED */ - } - - if (INTF_SPSIF & int_flag) { - if(!(USBD_CTL & CTL_RSREQ)) { - usbd_int_suspend (udev); - - /* clear of suspend interrupt flag bit must be done after setting of CTLR_SETSPS */ - CLR(SPSIF); - } - } - - if (INTF_SOFIF & int_flag) { - /* clear SOF interrupt flag in INTF */ - CLR(SOFIF); - - /* if necessary, user can add code here */ - if (NULL != usbd_int_fops) { - (void)usbd_int_fops->SOF(udev); - } - } - - if (INTF_ESOFIF & int_flag) { - /* clear ESOF interrupt flag in INTF */ - CLR(ESOFIF); - - /* control resume time by ESOFs */ - if (udev->pm.esof_count > 0U) { - if (0U == --udev->pm.esof_count) { - if (udev->pm.remote_wakeup_on) { - USBD_CTL &= ~CTL_RSREQ; - - udev->pm.remote_wakeup_on = 0U; - } else { - USBD_CTL |= CTL_RSREQ; - - udev->pm.esof_count = 3U; - udev->pm.remote_wakeup_on = 1U; - } - } - } - } - - if (INTF_RSTIF & int_flag) { - /* clear reset interrupt flag in INTF */ - CLR(RSTIF); - - udev->drv_handler->ep_reset(udev); - } - -#ifdef LPM_ENABLED - if (INTF_L1REQ & int_flag) { - /* clear L1 ST bit in LPM INTF */ - USBD_INTF = CLR(L1REQ); - - /* read BESL field from subendpoint0 register which corresponds to HIRD parameter in LPM spec */ - udev->lpm.besl = (USBD_LPMCS & LPMCS_BLSTAT) >> 4; - - /* read BREMOTEWAKE bit from subendpoint0 register which corresponding to bRemoteWake bit in LPM request */ - udev->lpm.L1_remote_wakeup = (USBD_LPMCS & LPMCS_REMWK) >> 3; - - /* process USB device core layer suspend routine */ - usbd_int_suspend(udev); - } -#endif /* LPM_ENABLED */ -} - -/*! - \brief handle USB suspend event - \param[in] udev: pointer to USB device instance - \param[out] none - \retval none -*/ -static void usbd_int_suspend (usb_dev *udev) -{ - /* store the device current status */ - udev->backup_status = udev->cur_status; - - /* set device in suspended state */ - udev->cur_status = (uint8_t)USBD_SUSPENDED; - - /* usb enter in suspend mode and mcu system in low power mode */ - if (udev->pm.suspend_enabled) { - usbd_to_suspend(udev); - } else { - /* if not possible then resume after xx ms */ - udev->pm.esof_count = 3U; - } -} diff --git a/Example/EpaperModuleTest_GD32F303/Inc/gd32f30x_it.h b/Example/EpaperModuleTest_GD32F303/Inc/gd32f30x_it.h deleted file mode 100644 index 88eef90..0000000 --- a/Example/EpaperModuleTest_GD32F303/Inc/gd32f30x_it.h +++ /dev/null @@ -1,64 +0,0 @@ -/*! - \file gd32f30x_it.h - \brief the header file of the ISR - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2018, GigaDevice Semiconductor Inc. - - All rights reserved. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_IT_H -#define GD32F30X_IT_H - -#include "gd32f30x.h" - -/* function declarations */ -/* this function handles NMI exception */ -void NMI_Handler(void); -/* this function handles HardFault exception */ -void HardFault_Handler(void); -/* this function handles MemManage exception */ -void MemManage_Handler(void); -/* this function handles BusFault exception */ -void BusFault_Handler(void); -/* this function handles UsageFault exception */ -void UsageFault_Handler(void); -/* this function handles SVC exception */ -void SVC_Handler(void); -/* this function handles DebugMon exception */ -void DebugMon_Handler(void); -/* this function handles PendSV exception */ -void PendSV_Handler(void); -/* this function handles SysTick exception */ -void SysTick_Handler(void); - -#endif /* GD32F30X_IT_H */ diff --git a/Example/EpaperModuleTest_GD32F303/Inc/gd32f30x_libopt.h b/Example/EpaperModuleTest_GD32F303/Inc/gd32f30x_libopt.h deleted file mode 100644 index 33bb10d..0000000 --- a/Example/EpaperModuleTest_GD32F303/Inc/gd32f30x_libopt.h +++ /dev/null @@ -1,67 +0,0 @@ -/*! - \file gd32f30x_libopt.h - \brief library optional for gd32f30x - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2018, GigaDevice Semiconductor Inc. - - All rights reserved. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef GD32F30X_LIBOPT_H -#define GD32F30X_LIBOPT_H - -#include "gd32f30x_rcu.h" -#include "gd32f30x_adc.h" -#include "gd32f30x_can.h" -#include "gd32f30x_crc.h" -#include "gd32f30x_ctc.h" -#include "gd32f30x_dac.h" -#include "gd32f30x_dbg.h" -#include "gd32f30x_dma.h" -#include "gd32f30x_exti.h" -#include "gd32f30x_fmc.h" -#include "gd32f30x_fwdgt.h" -#include "gd32f30x_gpio.h" -#include "gd32f30x_i2c.h" -#include "gd32f30x_pmu.h" -#include "gd32f30x_bkp.h" -#include "gd32f30x_rtc.h" -#include "gd32f30x_sdio.h" -#include "gd32f30x_spi.h" -#include "gd32f30x_timer.h" -#include "gd32f30x_usart.h" -#include "gd32f30x_wwdgt.h" -#include "gd32f30x_misc.h" -#include "gd32f30x_enet.h" -#include "gd32f30x_exmc.h" - -#endif /* GD32F30X_LIBOPT_H */ diff --git a/Example/EpaperModuleTest_GD32F303/Inc/gpio.h b/Example/EpaperModuleTest_GD32F303/Inc/gpio.h deleted file mode 100644 index 23fb9f9..0000000 --- a/Example/EpaperModuleTest_GD32F303/Inc/gpio.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef gpio_H -#define gpio_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "gd32f30x.h" - -#define KEY_RCU RCU_GPIOA -#define KEY_PORT GPIOA -#define KEY_PIN GPIO_PIN_0 - -#define LED_PB2_RCU RCU_GPIOB -#define LED_PB2_PORT GPIOB -#define LED_PB2_PIN GPIO_PIN_2 - -void gpio_config(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_GD32F303/Inc/systick.h b/Example/EpaperModuleTest_GD32F303/Inc/systick.h deleted file mode 100644 index 7722ee6..0000000 --- a/Example/EpaperModuleTest_GD32F303/Inc/systick.h +++ /dev/null @@ -1,66 +0,0 @@ -/*! - \file systick.h - \brief the header file of systick - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2018, GigaDevice Semiconductor Inc. - - All rights reserved. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#ifndef SYS_TICK_H -#define SYS_TICK_H - -#include - -#define SysTick_Freq (1000U) // Hz -#define SysTick_Tick (1000U / SysTick_Freq) - -/* configure systick */ -void systick_config(void); -/* delay a time in milliseconds */ -void delay(uint32_t count); -/* delay a time in milliseconds with low power */ -void delay_lp(uint32_t count); -/* delay decrement */ -void delay_decrement(void); -/* get system tick */ -uint32_t get_tick(void); -/* suspend system tick */ -void systick_DisableIRQ(void); -/* resume system tick */ -void systick_EnableIRQ(void); - -void systick_Disable(void); -void systick_Enable(void); -void systick_deinit(void); - -#endif /* SYS_TICK_H */ diff --git a/Example/EpaperModuleTest_GD32F303/Inc/usart.h b/Example/EpaperModuleTest_GD32F303/Inc/usart.h deleted file mode 100644 index c8105e8..0000000 --- a/Example/EpaperModuleTest_GD32F303/Inc/usart.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef usart_H -#define usart_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "gd32f30x.h" -#include - -void usart0_config(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/EpaperModuleTest_GD32F303.uvoptx b/Example/EpaperModuleTest_GD32F303/MDK-ARM/EpaperModuleTest_GD32F303.uvoptx deleted file mode 100644 index eefae98..0000000 --- a/Example/EpaperModuleTest_GD32F303/MDK-ARM/EpaperModuleTest_GD32F303.uvoptx +++ /dev/null @@ -1,826 +0,0 @@ - - - - 1.0 - -

    ### uVision Project, (C) Keil Software
    - - - *.c - *.s*; *.src; *.a* - *.obj; *.o - *.lib - *.txt; *.h; *.inc; *.md - *.plm - *.cpp - 0 - - - - 0 - 0 - - - - template HID_IAP - 0x4 - ARM-ADS - - 120000000 - - 1 - 1 - 0 - 1 - 0 - - - 1 - 65535 - 0 - 0 - 0 - - - 79 - 66 - 8 - .\Listings\ - - - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - - - 1 - 0 - 0 - - 255 - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 4 - - - - - - - - - - - Segger\JL2CM3.dll - - - - 0 - JL2CM3 - -U59708888 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM) - - - 0 - CMSIS_AGDI - -X"WeAct CMSIS-DAP" -U0001A0000000 -O206 -S6 -C0 -P00000000 -N00("Unknown device") -D00(F9F40677) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM) - - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - DLGUARM - - - - 0 - ST-LINKIII-KEIL_SWO - -U50FF6C064882574926410187 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM) - - - 0 - UL2CM3 - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM)) - - - - - 0 - 0 - 33 - 1 -
    134231304
    - 0 - 0 - 0 - 0 - 0 - 1 - ..\Src\main.c - - \\template_HID_IAP\../Src/main.c\33 -
    -
    - - 0 - - - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - 0 - 0 - 0 - - - - - - - - -
    -
    - - - template - 0x4 - ARM-ADS - - 120000000 - - 1 - 1 - 0 - 1 - 0 - - - 1 - 65535 - 0 - 0 - 0 - - - 79 - 66 - 8 - .\Listings\ - - - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - - - 1 - 0 - 1 - - 255 - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 4 - - - - - - - - - - - Segger\JL2CM3.dll - - - - 0 - JL2CM3 - -U59423694 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM) - - - 0 - CMSIS_AGDI - -X"WeAct CMSIS-DAP" -U0001A0000000 -O206 -S6 -C0 -P00000000 -N00("Unknown device") -D00(F9F40677) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM) - - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - ST-LINKIII-KEIL_SWO - -U50FF6C064882574926410187 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM) - - - 0 - UL2CM3 - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM)) - - - - - 0 - - - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - 0 - 0 - 0 - - - - - - - - - - - - - APP - 0 - 0 - 0 - 0 - - 1 - 1 - 1 - 0 - 0 - 0 - ..\Src\gd32f30x_it.c - gd32f30x_it.c - 0 - 0 - - - 1 - 2 - 1 - 0 - 0 - 0 - ..\Src\main.c - main.c - 0 - 0 - - - 1 - 3 - 1 - 0 - 0 - 0 - ..\Src\gpio.c - gpio.c - 0 - 0 - - - 1 - 4 - 1 - 0 - 0 - 0 - ..\Src\systick.c - systick.c - 0 - 0 - - - 1 - 5 - 1 - 0 - 0 - 0 - ..\Src\usart.c - usart.c - 0 - 0 - - - - - GD32F30x_Peripherals - 0 - 0 - 0 - 0 - - 2 - 6 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_adc.c - gd32f30x_adc.c - 0 - 0 - - - 2 - 7 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_bkp.c - gd32f30x_bkp.c - 0 - 0 - - - 2 - 8 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_can.c - gd32f30x_can.c - 0 - 0 - - - 2 - 9 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_crc.c - gd32f30x_crc.c - 0 - 0 - - - 2 - 10 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_ctc.c - gd32f30x_ctc.c - 0 - 0 - - - 2 - 11 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_dac.c - gd32f30x_dac.c - 0 - 0 - - - 2 - 12 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_dbg.c - gd32f30x_dbg.c - 0 - 0 - - - 2 - 13 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_dma.c - gd32f30x_dma.c - 0 - 0 - - - 2 - 14 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_enet.c - gd32f30x_enet.c - 0 - 0 - - - 2 - 15 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_exmc.c - gd32f30x_exmc.c - 0 - 0 - - - 2 - 16 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_exti.c - gd32f30x_exti.c - 0 - 0 - - - 2 - 17 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_fmc.c - gd32f30x_fmc.c - 0 - 0 - - - 2 - 18 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_fwdgt.c - gd32f30x_fwdgt.c - 0 - 0 - - - 2 - 19 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_gpio.c - gd32f30x_gpio.c - 0 - 0 - - - 2 - 20 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_i2c.c - gd32f30x_i2c.c - 0 - 0 - - - 2 - 21 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_misc.c - gd32f30x_misc.c - 0 - 0 - - - 2 - 22 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_pmu.c - gd32f30x_pmu.c - 0 - 0 - - - 2 - 23 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_rcu.c - gd32f30x_rcu.c - 0 - 0 - - - 2 - 24 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_rtc.c - gd32f30x_rtc.c - 0 - 0 - - - 2 - 25 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_sdio.c - gd32f30x_sdio.c - 0 - 0 - - - 2 - 26 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_spi.c - gd32f30x_spi.c - 0 - 0 - - - 2 - 27 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_timer.c - gd32f30x_timer.c - 0 - 0 - - - 2 - 28 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_usart.c - gd32f30x_usart.c - 0 - 0 - - - 2 - 29 - 1 - 0 - 0 - 0 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_wwdgt.c - gd32f30x_wwdgt.c - 0 - 0 - - - - - Startup - 0 - 0 - 0 - 0 - - 3 - 30 - 2 - 0 - 0 - 0 - ..\GD32\CMSIS\GD\GD32F30x\Source\ARM\startup_gd32f30x_hd.s - startup_gd32f30x_hd.s - 0 - 0 - - - - - CMSIS - 0 - 0 - 0 - 0 - - 4 - 31 - 1 - 0 - 0 - 0 - ..\GD32\CMSIS\GD\GD32F30x\Source\system_gd32f30x.c - system_gd32f30x.c - 0 - 0 - - - - - Epaper - 0 - 0 - 0 - 0 - - 5 - 32 - 1 - 0 - 0 - 0 - ..\Epaper\epaper.c - epaper.c - 0 - 0 - - - - diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/EpaperModuleTest_GD32F303.uvprojx b/Example/EpaperModuleTest_GD32F303/MDK-ARM/EpaperModuleTest_GD32F303.uvprojx deleted file mode 100644 index 9bcafe8..0000000 --- a/Example/EpaperModuleTest_GD32F303/MDK-ARM/EpaperModuleTest_GD32F303.uvprojx +++ /dev/null @@ -1,1148 +0,0 @@ - - - - 2.1 - -
    ### uVision Project, (C) Keil Software
    - - - - template HID_IAP - 0x4 - ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC - 0 - - - GD32F303CC - GigaDevice - GigaDevice.GD32F30x_DFP.2.1.0 - http://gd32mcu.com/data/documents/pack/ - IRAM(0x20000000,0x0C000) IROM(0x08000000,0x040000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE - - - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM)) - 0 - $$Device:GD32F303CC$Device\Include\gd32f30x.h - - - - - - - - - - $$Device:GD32F303CC$SVD\GD32F30x_HD.svd - 0 - 0 - - - - - - - 0 - 0 - 0 - 0 - 1 - - .\GD32 HID_IAP\ - EpaperModuleTest_GD32F303-HID_IAP - 1 - 0 - 1 - 1 - 1 - .\Listings\ - 1 - 0 - 0 - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - 0 - - - - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - SARMCM3.DLL - -REMAP -MPU - DCM.DLL - -pCM4 - SARMCM3.DLL - -MPU - TCM.DLL - -pCM4 - - - - 1 - 0 - 0 - 0 - 16 - - - - - 1 - 0 - 0 - 1 - 1 - -1 - - 1 - BIN\UL2CM3.DLL - - - - - - 0 - - - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - "Cortex-M4" - - 0 - 0 - 0 - 1 - 1 - 0 - 0 - 2 - 0 - 0 - 0 - 0 - 8 - 1 - 0 - 0 - 0 - 3 - 3 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0xc000 - - - 1 - 0x8000000 - 0x40000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8002000 - 0x40000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0xc000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 4 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 2 - 0 - 0 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - - - USE_STDPERIPH_DRIVER,GD32F30X_HD,HID_IAP - - ..\GD32\CMSIS;..\GD32\CMSIS\GD\GD32F30x\Include;..\GD32\GD32F30x_standard_peripheral\Include;..\Inc;..\Epaper - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 4 - - - - - - - - - 1 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - - - - - - - - - - - - APP - - - gd32f30x_it.c - 1 - ..\Src\gd32f30x_it.c - - - main.c - 1 - ..\Src\main.c - - - gpio.c - 1 - ..\Src\gpio.c - - - systick.c - 1 - ..\Src\systick.c - - - usart.c - 1 - ..\Src\usart.c - - - - - GD32F30x_Peripherals - - - gd32f30x_adc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_adc.c - - - gd32f30x_bkp.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_bkp.c - - - gd32f30x_can.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_can.c - - - gd32f30x_crc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_crc.c - - - gd32f30x_ctc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_ctc.c - - - gd32f30x_dac.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_dac.c - - - gd32f30x_dbg.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_dbg.c - - - gd32f30x_dma.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_dma.c - - - gd32f30x_enet.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_enet.c - - - gd32f30x_exmc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_exmc.c - - - gd32f30x_exti.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_exti.c - - - gd32f30x_fmc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_fmc.c - - - gd32f30x_fwdgt.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_fwdgt.c - - - gd32f30x_gpio.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_gpio.c - - - gd32f30x_i2c.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_i2c.c - - - gd32f30x_misc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_misc.c - - - gd32f30x_pmu.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_pmu.c - - - gd32f30x_rcu.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_rcu.c - - - gd32f30x_rtc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_rtc.c - - - gd32f30x_sdio.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_sdio.c - - - gd32f30x_spi.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_spi.c - - - gd32f30x_timer.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_timer.c - - - gd32f30x_usart.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_usart.c - - - gd32f30x_wwdgt.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_wwdgt.c - - - - - Startup - - - startup_gd32f30x_hd.s - 2 - ..\GD32\CMSIS\GD\GD32F30x\Source\ARM\startup_gd32f30x_hd.s - - - - - CMSIS - - - system_gd32f30x.c - 1 - ..\GD32\CMSIS\GD\GD32F30x\Source\system_gd32f30x.c - - - - - Epaper - - - epaper.c - 1 - ..\Epaper\epaper.c - - - - - - - template - 0x4 - ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC - 0 - - - GD32F303CC - GigaDevice - GigaDevice.GD32F30x_DFP.2.1.0 - http://gd32mcu.com/data/documents/pack/ - IRAM(0x20000000,0x0C000) IROM(0x08000000,0x040000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE - - - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_HD -FS08000000 -FL010000 -FP0($$Device:GD32F303CC$Flash\GD32F30x_HD.FLM)) - 0 - $$Device:GD32F303CC$Device\Include\gd32f30x.h - - - - - - - - - - $$Device:GD32F303CC$SVD\GD32F30x_HD.svd - 0 - 0 - - - - - - - 0 - 0 - 0 - 0 - 1 - - .\GD32\ - EpaperModuleTest_GD32F303 - 1 - 0 - 1 - 1 - 1 - .\Listings\ - 1 - 0 - 0 - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - - - 0 - 0 - 0 - 0 - - 0 - - - - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - SARMCM3.DLL - -REMAP -MPU - DCM.DLL - -pCM4 - SARMCM3.DLL - -MPU - TCM.DLL - -pCM4 - - - - 1 - 0 - 0 - 0 - 16 - - - - - 1 - 0 - 0 - 1 - 1 - -1 - - 1 - BIN\UL2CM3.DLL - - - - - - 0 - - - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - "Cortex-M4" - - 0 - 0 - 0 - 1 - 1 - 0 - 0 - 2 - 0 - 0 - 0 - 0 - 8 - 1 - 0 - 0 - 0 - 3 - 3 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0xc000 - - - 1 - 0x8000000 - 0x40000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8000000 - 0x40000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0xc000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 4 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 2 - 0 - 0 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - - - USE_STDPERIPH_DRIVER,GD32F30X_HD - - ..\GD32\CMSIS;..\GD32\CMSIS\GD\GD32F30x\Include;..\GD32\GD32F30x_standard_peripheral\Include;..\Inc;..\Epaper - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 4 - - - - - - - - - 1 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - - - - - - - - - - - - APP - - - gd32f30x_it.c - 1 - ..\Src\gd32f30x_it.c - - - main.c - 1 - ..\Src\main.c - - - gpio.c - 1 - ..\Src\gpio.c - - - systick.c - 1 - ..\Src\systick.c - - - usart.c - 1 - ..\Src\usart.c - - - - - GD32F30x_Peripherals - - - gd32f30x_adc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_adc.c - - - gd32f30x_bkp.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_bkp.c - - - gd32f30x_can.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_can.c - - - gd32f30x_crc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_crc.c - - - gd32f30x_ctc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_ctc.c - - - gd32f30x_dac.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_dac.c - - - gd32f30x_dbg.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_dbg.c - - - gd32f30x_dma.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_dma.c - - - gd32f30x_enet.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_enet.c - - - gd32f30x_exmc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_exmc.c - - - gd32f30x_exti.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_exti.c - - - gd32f30x_fmc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_fmc.c - - - gd32f30x_fwdgt.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_fwdgt.c - - - gd32f30x_gpio.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_gpio.c - - - gd32f30x_i2c.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_i2c.c - - - gd32f30x_misc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_misc.c - - - gd32f30x_pmu.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_pmu.c - - - gd32f30x_rcu.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_rcu.c - - - gd32f30x_rtc.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_rtc.c - - - gd32f30x_sdio.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_sdio.c - - - gd32f30x_spi.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_spi.c - - - gd32f30x_timer.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_timer.c - - - gd32f30x_usart.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_usart.c - - - gd32f30x_wwdgt.c - 1 - ..\GD32\GD32F30x_standard_peripheral\Source\gd32f30x_wwdgt.c - - - - - Startup - - - startup_gd32f30x_hd.s - 2 - ..\GD32\CMSIS\GD\GD32F30x\Source\ARM\startup_gd32f30x_hd.s - - - - - CMSIS - - - system_gd32f30x.c - 1 - ..\GD32\CMSIS\GD\GD32F30x\Source\system_gd32f30x.c - - - - - Epaper - - - epaper.c - 1 - ..\Epaper\epaper.c - - - - - - - - - - - - - - - - - EpaperModuleTest_GD32F303 - 1 - - - - -
    diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/EventRecorderStub.scvd b/Example/EpaperModuleTest_GD32F303/MDK-ARM/EventRecorderStub.scvd deleted file mode 100644 index 2956b29..0000000 --- a/Example/EpaperModuleTest_GD32F303/MDK-ARM/EventRecorderStub.scvd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32 HID_IAP/EpaperModuleTest_GD32F303-HID_IAP.axf b/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32 HID_IAP/EpaperModuleTest_GD32F303-HID_IAP.axf deleted file mode 100644 index 896dc96ed6358f1a4ff517cc87684bbde4e145af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254656 zcmeFa3t&{$oj-o=z4N$91~Pd;fH1jvAR!`#mjNl@&v z&48%jqXx7sKDtuZZnf>UNTsE_S_f-eYjryj>AH$_Y~4i?Ylnws2qE+Pe9yV_NQm~a z-QWM`e>pJsp6~N~&-Z-KlG|HZaxld$xtXTrONB|nydn9+uRD!L6x^$(8E`Es&$2ysQj$*|D|z;^6QKqp zc=xy;cJFkX+}qst!fC-Gx5HiO&UdrW*|T--&$|6ncRQ>{(%jh`7d(5})b#_BS_4SZ zSRM=g``O6@Ea@7DW_$dkWO)17QukbUvD@W-_Px-fmz@}?@wvD4E6ks2akJjM5OWlS zSjC|MnLX(+zG`>pxqIC??i9D|2HtLURR(5G_{HgD_S4hJE9GAMRH@fqbmJR8J)Obq zXMEGx-aT&ZDOT|6fRfxikdh+pz25CVX_q~)_WrXb_XM}ceZ56L zvp=nNNB{AzsV;kfJ+$@*(nC^lO~1J|>lmBXG$2bg@T&~?l@rX#avUG}(&o7@g}(2c zRraF}_mPcfj|*N-&tTa%IJE4?K4ge1WVv}D*v0ndxoi4^-G>GkYZ@>}Cyw71Vy+vG zZ-d`fA180Zmj*+Km6Ipg1F$^>esg*HCBx?fwV>S)famHDpH5yiyZrG}rx!>M>^mm| z&X62ud};8b;yUBYkj}~F?3{AVj^wW;m-lb0uk63=y2sC%+vKm@n`}I1zP+aZ{@I3e zmin1S`Rg_Prqz}Glde2Cpc*#~m@Ris+%vJVf7@hd|842tIwwm%97vH`2AJW}39f$2 z{Lg2X59D~>aIbV92kmF4GYmETDf3u6~p9_(_XFetqgJI!k zir=%SV`zn5$K|MFMW!2dOhz3Yo_?dO1?u}Hd3xYyr<1Rf-O#R}W(>8x7SWMKHT%|p zNwrSzi?$ns&QOAdB~ zB)QHyb-=``2h^3;fn?@@e^A~E7V0_#OKYhu?5860sXZQY%G@4rrTx@=*F(<7PR)19 z$7-D{wD=GU6(1@&Xt3RMk{JwdLVLO0*)kwWnYJ!qjBnt_@Wh?-u%^M?J5U2T>Zf=QxLf^Jl2E4 zM)eJQj^iYg$cIy1QlA!*n3YDI6*S_cJ@wSkwo`I&|B&yLHm}zm89Wd%xKrKse)z0E zMWV4sb!7z7+;#mDn-X}D_w&f$_aa93MBdMxkl7odmXI_*UQIXZ)K7>X(B5! zy}?4MjGYW>zHsJrjIlh&GQE}bkA;$c!dS-A?fa!R#~H6AHKr{^E`(XM(Sf^9ax}8M z@{hE&Y&U!Oh8%YP{m!8yj>f}lr8ae0nq6wFIg=}GYn0mZ&iL}AMtQ#!TKAKke_%mo zmF+ z;Fh1n6dn5Fu;z~P-e1C0IjFvvo~s^a#Y27EdQA#ShtqRe@j1YZc@LVajcz$lb4#J~ z=ULI&z$~{0k9zG==(T4VW2G3M4;rd{oa24s=(Fnh%T7cZw(n_GWPR?lOnBJ-TCtjx5%Qc-T;n*%A#p3~6Jk`cS6YiiyOm+sz=w#+*E5@I?d2(H3q z|0oqneI1AZd2iZ7{u6Aj|Ag!`(OCTGuTC=d_Hl!o<=K~2WjhB99*iN@^kC3z4$N~e zcH7-mh>07|``o+S1Y6xx05_jEA+B1iY<7PiER^0l!3zEbV}a?7$l$8;PWN)~tUPZF zMh5*l^vrn!VvOY%EsqR-W<+_tCKM@=+-CIh8Ot@yZ;`=0!;!)45i90cHaq#vWQ+lk z!Rv;VhfC&7UDaa4h#{ZqYspa_df{Z6l3AXHIY$Xd`KoI|Uvf}&83Gu6LTM>!y`9JZ zaUjLG(KaD?Lxtfjcttjzl#GU;@&@Is5~Sa-;vCQqSS!t zSas3lKpP~!P?Xtc2zD1)179pk?VAvU{>)@teVG!j_RP*L+nsWs;X_~M%{e5!t|%pt zacp(bErFzCtY~wfqUfW5yXZ`yvS@1G{qJN4n~N3(T8eHBv=*iJ-TjWYs4JizTVHfC z&|cIL*hCf?)ca*j&^d*iuv%sC7?%u(xt!PW?MCoR&RuQBptw-|Jy!HQ+v> zQ9Wr;-R}_GKl$(pR{PO$%1`i}IzGW0I-VUiOuH8_)9wvRYyfK_C5W2-D@9C`8Eq)Z zuT2Ohos^_q?jJi--`G|Wesfwl$;xJ(=~H$5Hs_Fz`>0RZTj$<4kYvttm%1lo9pf7+ zDrW;pMsu({sJ=5HI4vxt2#bGwQc4WCspUHWW*JcHG%4(;LautDLkVx-4G~<{J%1FU`L< zY|x~9CHOnD6wvYqkMDM0hf-M3nkPz0(R0-P>P)s<395)|l;2C1$i+r(1Its2)qpz2 z0ww4>U?^sN{sWLm$~PAuowvnXY!18?X8wCZR?C|H6pJx1F=*GVP=n}IiYZW10IN#w z4I4E%f47@Gd|OCW>iScZC*J+^sURu>xriypJ=v3y(JlM-C~ z*xBPZxY5egH-n1h zXq@jW;4=hEv}o+H2bbDdFPrt@F*PXfl^?8ivn^FQ@@}EwUonS%=cJT!^4JaUuuv;x zsVA_ao--4^H)Vej&3gASmQ*CMlDYHdFIafRm8FZC);71auA|W*j&nF&Vw3$+iks{?MeIbtvPH!O8U`25>sCD zpNuRf`6ma=OzL$8rOVkH(oA0FTU2JLJ6`6~dYNoDY5TF;x+l+^`Wky^S%vb(ZnqSC z5_-^!QjKp}A3|PQxu#^+nZO~e$*d<0SSd<*WSKR{ij-rwl|MOvz8rMqR8_FIcA<~b zOeXbG4dhLFO3GvnY?$x$>rw#Ct1ymfUH@1FV!aWVh%5|ykU3B zy_W$pqc_QWBZGx!OXkYG=CCx~f=I9+5>6c>&Oi3uYMZcE^`f;y8ncHgm^my@NPEIR z%|Bi4&DhJfu%{$MWRfK9l?H-0$$O=8Wv_jz-8MEd*MyDb#Gn0CH0FXzK|(}UgFY>Y zNJ}-p$@Z?sTx8ul`9W(qg-OB54^pJ|R!VzQ5QTOd%}`RWp>Iwset(PzC2#)rm@zmx zHbQO8kx?5NwK;Pv8vFn7UzZ{NF2zT~2WvqGX7d>~_hk1@gW)w}aFJWn_G2_|v7J52 zBYRt%r`P?WA{{N6$%5KUa33`W9T@vYb0@de<)k!Pz23@gSb?cnU2SViG7rB-kby&0 zfV`FI#>YPNrAxC?0`e@iZ`+M|XY6U)nq^$K-7%+zs4G@=c+x%GnH-q<)b=*#8DIML#$D!#M?pWs z97#dK=IdAmSZHyOlr$>|UNJ#W-kBgU+uGm}u08KeW8O!{<+i(AGGG~d2kC9eP8N_f z+IiS<;|r&yRXc91n)b^aX<(a_JL6vacU|(3bTSVfH5VoqtFKD!GFBE3*uUYr-=5-9 zno6EcFCKpNa9i?KiTIy3mON{yN``gb{N%>uHrbVo@)$Fq-Y=Pz0I!WqwIRDvo3vPM zYtsU>QgKp!JDrWojLK1-U+V;S7IBAU34NOLp!P8yEFm4P64MOU|(wk-;D6a#JDacli%Q2193s?1x-71lhA^BZJ?HVD7_{7~H7Lby$Bc7kyBF&Z?7bO#8?#;`Kb3Sw#2xmayLFFDBal9&DTzy!pnDaf9a&KV3@ZT1}B zflF6q-nGN|(d$(?yAF8n+Ufk@^%B&7O)k?eI}xtQb?$J0jEROu*Itj4WV*=+XK z%hNCe&U>jsdKIl0v|`WiPzA#t$^Gs*Qyh5GOU9ZuJN)#3JJo#br3&nZK6pua@_@v0 zhkQc^fqnnYLlwq=irIBeIdI{3k3aif_`WKe-L~t1?*I$c9zxj;pZl#7W)IC87WdL0 zTY?4dtMH^}ceAfV2A_(w^`K{mxhN z>|?%na3!BeRVwfEl=mLYt}bx@*RE;1e)H4}_h;v9+%+}u^qlE|AAWdekF`&6tM0tJ zX0$n6(!dc3(OA4;je?cAhCLN)Ky$U#d!N02YL)Ho0|UpiF_+(VplzxYOmP<>?>q3$ z@g1%W;1KOFTw~9HpUzh0+Gq4?AhggY;R!|8}Kt}z$dYpX<@Z7WKIvH zJd_b+du^cDL9t6GkF&iw9O^$ltqS{?11#B+fSeeS?N zA5bqpb_CBr)XHbo*(m{OFIH1*|3H1Ju`lJM%HD#-pq;~B9s8WycfjZNR2)G24c{l_ z|NC*qsymtLZ)NIx>zTS{15@c)*PgR|e+`}-b{wdpb>;(mQ2%A_@3>d%H9o?Oy;k?- zi0Vs%se9Qa)^L(HYD3t3X~4R-l-o-4@vlcV;_0$S{UO;p=Z{BPa-_YFAIO`!vckaa zlO7ps-O(d#FZB`DYkY90^W`Iae*)J2=D78t*RYEjcG%om=p6>P`O%c%eC(;CUw$nz zcnQ3s&M^lJ1J|-02a30_;!q#O>EqKMKQMTlkM}pxc>l;DhQ3Lw3xd9Kh%th_2mPmi zVLUra`j0tg^}tl>I0OzR2$2I3$q#4c5KJnDO<<;BM@2{3mvK&h%lf!ss3ud}27y zoy8HigT6PnZ2wg6z+@ES|`Q zh5X&RJocnk7~F>sP~DzAZ_cCp2Yhczb9?#T6MVFkwMFMzN0YZQ`6&rk%F$RYM&^oP zF=9J#R~lL9Gs99|GW`1euvDPr7v-tQFAuBL20&tTF4xyvhP=q&YtJ#cg!`YyQtQDf z)p=RUv}J6cGY`8Ela~9lCkJ*qvje@({Jxqqj&3!0w{vpfeqes^p}iv;IA=GF$~NrC zQT~0Xxm|kntm%eQLnmR?~mGC27bKp4qRO4Y)7uH>*Xn)WA}F)Zp_smWLF> zRM+#(!Q<{G7Bn^a!_2oa2ho1nu_NjXp=VN{lJuxgoYd5$A$53WzXiI~;p%>~rD&E6 zU2;GUM&%8DlDA$KL_ZDP=4(^!Vjbv@k3xs^K=7TV5N7iO$K3eK_6WJKZMNMvw2 zu#1MJnUTTYjhNgE-3RuK46ZnT2-jujpT)KE{0q32pMMeSxEGNtJ1?QPJU%43e+j7c zybS2;IyCn@=3%TQB=<|86`y|@*O})dgMYx<%Xbblq55>eQ2rP5US9eN{2duQGA!U< z>hQ0If4&rU3`bz&;$c?!!cvT6hA%=Uk3T2eef~MnU*+^mhksH9YBtLwx{7|a_56>j zehB*TP|cYkPh{}W&;daI%DFR#vkQLk7-n{jJrEiE(RpjZ(~nKpq5XgkJvL8=o;?3g zklM$k&Yt`6H{>Tq29H8o{&uC#vG+X21Qlg3?JfxAuLm|VxMX;5)z={R6ReRUgY4Yf z;b$Jh=Kwx?*mIG=1tU*5lm8VUOwqYx1EF z?8$Hc;jZM85B#|AO1@*M?*nb>4?ajrwwKKPfFU{L&wk6-g|OWAa(?T%&AnP5|zOKK$C$Z?{dMI0X) zB0oHHo_zM>^LL_VTSge7Fzc-A_=M!^S{=>ZT3z?%mi7+K)zR6iIXjv<%^e#-KuV-FZD?=Z;_Ynh>Pn#Ba?34qIMZd_&2ySJO-L4UnT%<5 zw{~^6Zgg$9@v0eA40A1Sa4dCd?Oj?N_BiLp5JdMl=f&U(ZRP7Gn=^O5Hj0_C^46~Q^_yB-H0P~aV$FG-+PmAdc?(OlE!y09 z^E6bbW5ed|_Kr;;UVXK;v~|OV4(+;*&J8Vdh+X6BWX!RgFgsD3u!lc$`wx^q^x!T# zW4=Z8ZLJzA4%?f$H^a{@P2EkrQZRI#*3!DZv$eHLbG2^hYTw)i6~y1!x~{debyIVz zc5}yu?xyt#QVZwIU$^mEO_ZhL9Zlk(osjqDy?eU$S9{tsk5Y4cjcIZ-#D3Sy!NSBOJFZ~QF zllmTXhWn(pT?%_`*0djL7w@e{lb7MW z>ra2g*aFpiaN^RMGhe)kwe3H5GGw>yKk4g9d$lGMENpCQot%ob=*Zyv*x%dNWY)AM z+N<>1jd>%3zdJN?oW@0P;u&3PB5#m>+B=jRBZH9ukEK>MVST#WsrF?CcRSMqPkp$dM($HEOI|g?23E2C=RQ1H^HHc%>X#YTnK;?7 zuhILgtbIVST#fztXCluXKCQx6-pUNTX?}j{l&rnZjDY!A+A?3Z1uNgFefCr7<*C8D zoGF0=(4G!>;sP_GEDdit?58q##AWh`dt@XUal3wkh>Pl{UAC1xb_aG_S(_Bfm8CqK zIndXX&$s2%XytkyHc(#G^Rdo$F>}!a7d>#%0~bB;|D*?eJaNZwvG+2rVwm~q-opVO8{v0S7D5eyhvr=1Mux+F z(&Qf|h8{EFB9X9<<3htE) z1M!cW%xEE=c)&z~GKn)wW&{&(S0j~`<>pRgCAcHy3OZ9bRJH_R2UY@zu`JhylaL5R zLX-iKg9C(m(lrV`s7y60M2Sj+9}na)$=qDhP*#?}0)2^CLFWvkO~_5CF8*+-Y&g6X(2>5>O$YynIROV1^nnRL{`F!uty~oadRVw8)iL(d&lSFq#TvsbSS2rBV&*dIrhjSqKq+yn-db2 zo=9S`$I%SyYMq{7)yHelE#@L5pbPWcSQ>OkRii{vTwJq&@x2@gYINc#fw(wPV@2t# zy6QNSa&ZY8ckad9MGsu`z(o&S^Z@sO7jyqsv00hDWXaW6+iU=a!z`QUuSR}2q`Qi? zLW6!EzX{YR3C6Yj1Cq^#oh>XWM!sYt1>vBsKyZvqHkiiuNK7mXn2Gcb(ku#APWyiddgDGvBk*Y<6>DccsN=ZEy7|FwDd8X?;{?4 zk>b~P+oJ43Je3l*0;5S^7U)cz2YG%k6B4mS6W`+u(+cr#lyqD8Ov2m44G@Un5S) zQo^?jk!6}yHOTDhl~omZJLBxJ8fT@xtWxx^h}k>(#j+gn^$%H%B$Jd^tAM?tcS~9 z?Ql5qSr0Bb9OGa;Nl8f(yV_Az^+nbL1ACyM2ii2d1Ka66Ty>8fiS@`9xrg-_RBI3T z9geHHtO@y*d7npq$}Bf?qm;Q!l6vqcQ3jzhmaEydT;xlUZ_ZRRo0(bls%D1jR=60M z!q}=}{6o186mF0u*}$kkIEAuItFN!$!g`jLmzT2A@^XC71=poLtQ7ccrhX|&l3DiS zk3Wt&ss_UroO}Cwh}wNS{vPVB_<}Ii2$-#gY*4py9@10Fh6@V|vspGS!yK=&rO>G{ zLs_|9V@vFIZ7a)x{W-{&*q5;KB2t&LZ{NPHth}YZx}3WlK2J=;9FXa1fyZ=GZ{V50 zGrdf~KNL7peh*V*vn(P1`u=Jku=sMWzx3VGATscPtd5>?!iW~(4%tB41@IDMy^Z0< zUP9xeX~UYP=W#<48Z=5Aj$MRFzQ!Dx8DI_G*%=H_ib6@L%I%jGaAof(hkF#@Wu_Vm z3t!iH?E7~P`$!N>OW?v6bbPq5aJFC1TMX~!pzWx->~-)&Wy$fV0F;u|V$(qwqyc7( zS6lP!tHP)-%;r4I zALR#LLj(zf(0}*sYt)!IIXM|#COu>_{%h}2LEL@_0Duj!%`of>YMS7I0I>j&@nzT` zWXTN*LpH7l_V~FCl8#qXli^#kGf4R4RQ#@&UDKjPHSXJ|ky7%N7Dko}Lze!Fx?n?&1ijSdZW%|5n45yPrlz(Jz3x zFwwX`X?_V^triphQ;sLQe+&J`&}N|j_(7AM!zwXmYmq$6CLuM%g4Ch%aul0D?DPV( z>v^CS~i-4+3miN&u)jqq*OFCQ9^XV9#byg zXCeT}x1UN$NVE%u6vLE|ks|pTvkj~<+r)`MtE%FQsw~y2X;wJOY8Ca@v@%TtzZY>q zH7F@6%+G_45_RX!rMPEnnwCa&@oQYdjDfAJ5FHP6nx3cR33|}Fb0_&DHBG>!s`_Fn z=nSW5DS5$7`g8L0@@T$~+Qa7N=cnMlwM6zmD+xe7+u_q0e8Gt&)D}l2WjfJh78~8h(H$9LCuZqQk$WE{rjV>&GCF zUB=x@_EK|GdsAuT4_-d}LGI^t43wpw8qiUHH~{*YVkyyhd!hcURO9WH&F!TICJwSs z)CcPoq+F(M*~u7haC7NI=m$9rCZ;UGI&g`C9~Wx#`P#Botz@>M%r4Q?(ia80u8+(i zajo={JPrOt!T`(r0j;L6HqggdM1ZN(kNzVDS_UHdiw0YH>~IS#+{qL8`9Q&0`GwHP zOexII&o9$pDhFAa9=}`^^ofAAG?MW7c7_FPB^N;42W&3H^D_tx!GYOKqZR_5(|wHH z_`m}X+}}v9;Qa8vaG`JSUgC=LGlB7g4HW`E7tqQI<;&0<6dsBE;G)F62W!fZB@nQ# zpFqIT_ThAZzQ{L3{}cv_`s|BvW)gt;c^X3lGD7(+63UTx(wg&z~HA6(!M=9a#9r}DxQ)Y_byZMCMDCs=8W^xack$~pej z#TP75b(f7q;&sQN9zI7I)RLetu0x892mo`|=wmm2fp@N3wg!{+Ug=1BrnD!Atb@1awfk}6l{brxhBXX4;l1#G8l=wN3YnOf1I72T~gBa>)Xg?l?oF^ z`>A3Y_hD{XBZg|t%45iq6Dvw+i(j$%7y~YBGC{H=^u^VqA|37}r{l46dqOyiMMF$2 z&+Le$(Rik>BVt%-J04>J(GG;J6Sbl`mXH$__y@n0VbNbrCYbEEH=^=(@C-+!&_w0% zh=P$F@uQ}tS<{jXd~(BfEp$`zZFSizd%`}Hl$}cjvW(mus}>AGi5@=@-fwtti1>>7 zS+uFv802M50we3CTt>3r1AO}(BpD7 z2B~xQ(BvS>qK5~Kbd+Ro{k2LkY(valLSCVbm}5vBi?m7JT4{L{LSn`f#Q}_=T(b zL_KL~8B4aV&*OC`SzQl;HWW}Xpy+y(RP@AXU$#?&nNuy)mm7oI(AO=ozU*s+64aZ5 zL!#n^k9am}6VZtz>K@@)Fp^FhS}?en8Df+(X~9Mf1d4axRvKcE%(*#cx^q3mrr~3b zgoC+};UKw*UMW93-M|Riw}4Yt%Y#LdR9z1LPsQ$ zjqN~7I0P`4H|m&$06IrF8?{`*M`b0|LM}|$n-kiC;T-VbdMdT*Bqk@}f8Kkjn?Xq=LOulxX3gl7OHe#{!}k~r_k_E#1?0W?*Z1Cg@2(d~=a_n- zS_WQs5zNt$#>PaWu8J6L1aUVGrhJQWQ_bfQpS|O?!7@ffA=9$32MI$bk8K{8|xv$(EO2*s)`WB?oyM#YWncRJ{-SiH-zC zyxj$aa0OSwl0fhb(_+=YuOgt;+_5ocuq+vVfw32sSa<|UsWy6a9hD5k@$S~)9lovL zG1JnGUq&+-a<;zfU%(p`u9+mJlu;~9l!diA73KFGzVd>ifQN<`&TPddBN7cjX&8TE z%b~Eal1N2=Bn~}cVHM3L4ou_a(RHJ&xc`x_YY1U)EQ{i^O?ZsLW{OrawnIiaa1X)Z zVi6zW*i^KLf%in($-!vWuxiz+&G=S zlM0m?%D4AOKA+t++gjw_=A)s)Y7LY`N&@M;>**^yl*~7mD7<#OyJRLk_`Zuge|Zpr z@u-6+V-IJcqs}HNo$fUA(B`|jIgt+6$?*|hSPVDg%5jT4zR%t=+!N~S;i4Ox~i4odm z5h)Uh=Hv*UVu?357akBv47EI;J5~+Be62MeVO(4or!BqOxTLX2-&h2}^!|Mud^8+J zk#IDUesf?{BKc7W4iMHXj}jJTjYWM-`6Pb!o%$Cn?UcRVbe#vKozfTQ1s2Z+~!jC~h>cfzuRsmN>f1&lodIDs{uoj8-P0i`^4 zIrPhUpeWcw$*P)!(Y%nQq+Fe%K+>2dDe4S0!#GV%lhP$CW(d=06b9-zg6Lq3is0uH z;(!Z+LPK&Ql0;IXh$x385y9AmC`il`qX2D!>qW(NTjMBVPP>FrjnWOMnxdv)Lpp=9 zl*ue&ikbsr7SBvzY*GqHWCCN8Q<%tP6As&#w3R(IN}r4Qf12Q+Y!2ZmGd+dT%{Bp= zt0t8upNprT)ee`HjV6$>gto`g!dyZ+;>ZLg_z4&1XaZLPv@4F* zl>k{j9Zs8zc%*o$5CCKDICgdF^{LmPmX!h(1(%Yts9aSXAj6g=fGA?Q0P%|tlu^_r zmIY{>GPKx=ID)`yvOuSZsi6#Go=H4HMUyhNQh?OdwUfCfii6OL1c+xjmR?gxhN-<`S~a?JC(o&9W)WpC;&le z5&+@XEt*0Ax^fsezD`V|?7E)gjS-e7sl1cxDC?HDS z809D0CQ?ZKv4dxz!yByuIr}C7lv$Pl=oCQCB(ke33NY5akoVxti@8T{{tUx|G`l5D zqOq2-Elcza9L*##q{T;Ic@Bg`ToJtlADU*Arp}Gc&6hH1>%{a44DW*^vusvWgKAVw zsu?T0BsE!0FHtn$?9FQdbh0JBdhny>X&8pJ{UTF z8K2}Yvrjf}lg-;@^KG(uhitxGHs2we|C%!XZ`I>}-dF!$wa5RhHvjL()t~N%e|cPu z?PH>Ud{XRQ*e?@h#*dRvmbq|Dp*Fct=1pKGdQ{gwl(m%W z;&o}HszhmxpxHPrW^YVxHuQcrF82kJqcX^b-nlp#f_xNy1pXpDQ8+jc&m}rc^;-it zJpukQ;MxTKtX)<@j4Q`VGQiiVUi(w0P@R_cZ&Gua#W8(rznTwo$Ces zTjUes)S1yOw<3%s8Ia*#c?t4MM2Kp21j+M349WRS~+YOlPh{j7>0!(GU2VIHr zQww_3*Z757wlptJC)fiRVq71=wPWD=G4Qox;MHT`&yIoDjDbHt25uY!uT6ky?9tE` z--dnBvCe?8miiui*+S2ia#+`;;%3T;WWCv&d#f!gu>EB}G>+4rAehf2l ze2tF1*;g{Ph1(J%Y+l_Y^?o@UXM^ujw<@^_?Z~jC*+3;KGIC{uu zRL+)CrtahPt_$@zGj5XI$r-m`+$a9`!LJrEbrXE;%;?;ae0$Oz>Ye7Drd`In40kJE zmK+)0j^vD+!H%C;7yS3kV(Jrch%;jx{f>;!D`zDX;EJ`*udYksF;8W+Ans^P!Fc7& z_~H)JmyPa>zk5N9uSDMgx*mTzy?PYA1@kGj6DKD4kbF$?cF@V6W9ighMBf8?bo|u} zm_IOPTml-!NIl>^fXOe3aX|V=_9vjNMV{LE0zU!2MCa4;nd;>J?7qyNf=ZK0UgM)e;NnevT#`7izI-(qE# z%n<#D{IwJQXdDCg0w!M*o&5DQ;OKgZ;8y`_3G`Ed3jx#kK=etMM8_t+hKt4E0^lD3 z&v!$9jG%(`lsyBMuH{e%}7tSfULfh=cFDkccS87FT zH@9zS(H31%GE1xP=-2?}&W$dYcEf^}`ByA#`5bEgUZsRT{RImolm3Iy&23GccnxIi zYU}9i#`_^7N@Uo-*wC?Qy+#-Cs+%{B<~GL=QL#8i$j9NhA`eKV4c#pL9wwD)1kJsI zz=xT%h=cRz5%@ThuHxVo3kduUlNM{9%~9DyOuAZtLim?VDig4fev?Ud0Sj^bF)|0& z*07`Gi+?yqPN`_@_5_n2(-qHdFTO;V~o-JLNWrrvV8tLesRw)+0xL}-L$C%zs25w zpA2vJw&8cfH>|1ByTtmI`SaFsCU5)SvSYZfTElK#X+%=v~{LDIj23}w<6F;Xe zetLaPIex%=L;I#1*Hmn2+UVWTx+alIzsuf0^+8qUuUS#P{4(@dw&4Z59Khnc_)aCq z*3x=&dvj~U#*UU&X1xKPkPDctyR&Ii*C?F9wyv{jV{1cK`xj$;s%=wOS5(MiYu(h+ z-n1zSTW!r7I+|~6@OEry>TK`6wZYrg)D;uWw9#+XH#cpFVX~R0%iG@IZK7iE8|rX; zC+f`7@eQhbC0ZWyFJX;sC)bL)syeh*tidj5oKI21y!RQ2y>}(vR=u8FRl9N%ld`Vq z*tDXl>&B+F8(OP2bvJNqXV!|=jUAo0u4vkX-=g1$fmqjafMr!*TQ0IvR=s0|r=nIsa#n4jqs>$|$6+&@u|CE1ob4sTVMD6jCoJ zbrf=;DBU^=d4)ixWjV@SB@KG9=~=7loaGHmJq<3$H6;!8s|8brKv(PN+SR)0nOU5z zcC{{^CE$wdq7IzIYrn8zkg+Fve^YHJK$GeBJV>8;XVbSH?YcX%rJ> znH@!p^3-Kf>?lvop;p$dxg6F++ovR}uDq&7*f3W}>Jc=LYN|`j&sv3w>aJYC0iA21 zkkPAkg@E+Px{|_e?wDXN9fj1rwP+MlFZ8NW$oWw{dcljChkAEI{jJ_smVSbn9+Z`g z9Vt>~c~zamSzUp@xsq9NjmSyNQ*ko}oVsrO^^7i-{sp7y8}j8ISI4IA&W;VEuuC$2 z3LUi-brtobf!`qR-q5r@%J)5^=`pz|7^28be5m4 zN}h%WT9kLUZ;COck6S<{0bSit(~2F3x#cG0x-I=D5;b2IG}c zT#U2y2L|JkB(kl&3n9}5>qIr08XCZa6$TS9TQp!W-YIbfovlr%3s$4NDpc#v*7d9~ z{c{pW7IKLVt((?&x1ol;M&p+yQv;Q83zmniqb0cnTl9US@hcZFHFVtE+DQ&6?Kc`9 zmbjU>G_`ksqM>WL+c&m$Y=+&m#AS;jM&lhaH(NZgatHs^Wc;bZk=`ae;We~$Hr?Xs zK#tdl8fUeagQBIbPXt^Y8#+3%wX?%)j2O}yJRP^-_#u@QZB{0PHn9XBa{8L6N4aGb zxH}>CvHkFG`277pJkHTJ%hUK2pOiCgRU5GsW$8CjpRrxn-hv?D;Vu^#Y)f0)*SDc* z$is4hNsz@FH;PnsrqS4Bn{c}>X|dIIU}C}}h0runXmZ{fM_F|}iMVvVZ+a>`fbdGj`8tzw>AE3!nAsIyQGUV{3~4 zIjx51zUD-pU73=WJb#
      _grsOjZZ?1-QSgtp;ZrZ$&r4KRbpd@D;H$@G^ zKq)-Ji!!QFBV%~-f(gHk#`F^71Q#=z6w?KG?h}(yF^)@V5Y7Nyxq!}HXEG>;3nm_y)nlR=BS z9czx(&d$x=?!*RAW$9OFfald{)06l(z9+XE&55m1?_x$%B7!^GXiP+L4;l@LC~}=~ zRCANhjLFfUrSd7tjBFGJA!XDOyhaga(4r9)ubK#}U5fNu)apc1G`~urX$1+)S)8yY^(iVkH#K0B^HVfGy?~9^9XK!iH+Ytsb#$EhX_Y=dEf{xxx{BtfeCz#qV5Vfp z3&;Q79Msvo`BSuJ%P~o;9^1hghfH!NZJ*MXC+}@KFc)KtkyBi?)Wt=f_N16m6##8Y z@h(due9I6*%*=&2I1f4!!1)-|62Ju*0TaN5=*bD-73k>#oPpT~ubAA^_)dPZcvx z6M$#MDrU?P`Emz5G+pGeTMhG6;YP|&Tg3AYHymZ+*-B4UjRTH}Lm19D*^% zIE1m-6o;VG9EU2=Oah{vV`fZ>0jOQF0K_&gTq{7@K*f}uK)aF|CkRk%qQdb4q9${!Rt<0Cz;>S`S;8tSS&sG^7(+P3E~mVJrRT^m|ky}AyMB7F!Q zXHrCLirA{H!(h)03E{;tQUYc^$H)no1stO!U>0(WApvs*#~1~MM;k|AwM2nU0mtEq zF?b$_Qw1!-j$_giFoGvt$58NbmW((;n3gFJ6oQ-~D+Y^FC+PwRL{6V9V2VW!PZ2PM zBZsF67!k?A904LIIXGRHt{336Qav0wkty+r#O5(CnRe>vBt5}6R`0(wNvu@=>#=>jBK=Sf|@agD(WX_nPX_EqaaKkLx|N=kSC3;YctM*bn0O} zXqNtn8o!@lRzl-pdWDCC8D`8es~FBclyviKAj>VggApQLNHWsL}}R zdP8>z*U3_>+#GHSMt#w3xDE6shg-_~30g>W5>XYfifD!r4X))Z1+V^ThU(~QZg1$u zTPWQZ+mfVvjdI50nNlYH`h4B>c3^Ia&&fiQ*uGfT*?N<% z>cb@It9V#Lvizm%_Y2N?toOEee2Ny4TVBV(Y#jFRti=|2mw0byy#*_2>E|*w1rNpj z@fVx}`OYt$p&uP)7JHG56JK2?RZi`N!&~cu-nY3^!UTH<&cUh0(=%3`a z6%R@(UVTwjTjvrR?Ktc3JOLZntZ(CCWSzI8tAU)t51LrP1O%M`6A~NOavd!FRUlO6 z5$ue%Lz|S#8XDYH*sk&LD_*im8z$dGrQnbpOSj{j)B>V+4hbNh>IIk&BsiK{o7T2R zrM3vE7>>)1MRE;<#O6AFE^+Mhkk}(_?&xf7Xx_NsQxvB=a1eGFZ+MH}k_~zEmZ`P# z=2o0i<-3z;5QEj4S6LAU4VF09+&J27%v%|UBtzb{36PTKN`U0N&n7@p-ZcpjzWf@J z4Y_Ms`cam9iy$zM!&6tQzbF5kBt0rC#otp5c~y0_aml2~akCPPpA3bE6|Qi*6jxXk zSNJ_i`YsgiH2!%C&3~3R3~F9|+&0OaSCs(De=}D-Y~(dNl2EfP@tWv6HK(_xjimN0%H2O{+tef?l$pK|5=Xv(^Yd#eQiy(-bN#`bQA@@ zr|!s6o;Ibo86-2aRn=A0vh+(8gp~3tlXyipnc3)|LhZE`utre| ze3EiLK|%;%i0K4vpQL=v94o>D32dkr_+;h#<_pT0hhwEAA}cS&L|i0tm_!uicNdDx zXX*b=B8qZ8CgN~HMLIiu7}T;!w~GlXRz1sk?iE zA$M~rLj&b*o_htRQd92c`SVB@LWEwq7Qb%wY09G$(pRfeE*x8ft>5&ony9P&XoB#} z+on+!`i=<^CfVw#i-~Acf;#8KI3xPlQ84bvvDH&IAx3|WvTLGHnZO8RM!@(27^A-S zO;--+j5%?Q=ub1v&^X;zb)Bv;j6628(W*+pF!C#68f?lLT|;qP1G-l`X|UO0IT>RAJxf4)zZaI+SbkRFy*maRxYmu1COY9Dr{Lc%1`R3g8$AFgy_@ z$N{*8fOk27suS=Y2T(l%-p{qUs%S_fAjAP(<_rgPnJ@=*nc-a4o!(*cRMoH0qjI-N zI%-sk-^o}rDvn&&yIl0DTtt$~Qx$_$TgB=)4L!ZOqQVoSTH&NsF(}jKuBk4Mf!Q_> z@9WeDb8N1f6&_emC1|!4j=JSKP-t_ny2e#sRfD}gPAyWtnl79@y1%3($py2y8q}NA zU~GUI9as=kqa#X{w=PrzS}oKp;cDP9Qe)?8bf7$@Mn^1F9?!VI8qgkunrf~Fz9uyu zu0{vyV`_B7YUU}wu3m41jjHsNNhyA2GQy<}lV+{Zz-+EKU{D^(6y;)6OBglMlCgfp zNFn-;TwqmR(D|;2^P!rHz?W&O^F;etNK!t~8Mh~BL`~KvD+OmHo0|`(6kI+NfM|!= z0f3M0MA>Olevl=s`Y53%ppM^yl6y?H`r4|>O6vc_{oZt&yUJaohwS_4hV_nmCx$N+ z%7b{i;+u4VZ_$%JB#Ywgx&riRQir;cF!k#C=uiloZOY5Ku1n&6Ku2_>@P6&8c2upP zbBkyz%%kWegrFS&{tBVfT|R~IVD@UbIJwH0H<%Ykm*>$ ziC7@pX+0OS-t8%m&HEPHifi4qyrmG69N-OwAjD%;tjsMI>4_wz_?uI$w(|HwfZ58i zyQ%9n5J2-a)lP-y^|4znz*OeKvk*V%uGisxi*#SI(rvY2!n%n@x!Ntx&Fj|TOj-Jp z36iwrz%=QfQzr3cPF-uar?b6-zP?b|*|FK%jxQkL92Xtb8ii*#!?hj{q8m2rUuVEK zHWI|@H+sc_mMuOpO*))1l`F3tPdV2;_JkN)a!-!*if&WICjMoB+LdI91<&#PXg*uA zKSz2)XDM&*8kcAB`#Dm7Lh1B{jZNzzuOC%Q(08E;_fMBTN^nbpY=RhD^2~H;yG3}< zMf+Oxb%JOiiHwWSOqX_BVxDj`cemf%`e)d&_9}0f&wq~O?{lS>bjgZM&G^2{ z1;Q6LY_zdkTQ_=Rv7m=Q-R8A14P*WFF#!PdC{51xZv6{1YZA1@v200ip7dY3Kg(N3 z8y&SxMB2D2s-D31NDjLqlKyJUZ!6xL0~GP1jMV=X_cieK}3H&6P- zgsIf$>JSz#IOLt;{-fED#bkj zIf|rid~v2L(MCezKO1wVkj}8vxht@LicSV}W533S{hGhU$$;;Sb28vk{bWG$xF-Xw zwErbeu9bc$OC8DUTe};`gE*vj3g?WlNs0jla3^340rhfA?4K zv3*VZ6z;LT@Za2HdttmiHX#4!_ShERmjAK4PoKE?wD?E)fB6>N2Y=lb+(QL_{ubQ9 zg7NnZ`SB)oobMivI_Koxys7z9bkwO3-z>Dx#eV2sS(-Psp@H_U^ph+4e(2cUtLy1| z_v`ha*$`W%l7}tnlclmrICPdMuWzM_U*urp3ogD}k*f8A=?Ky%mdY8#rkaN>{+S|O zuS?Qts85vS3^B=wBCXRU>2S~|O0Fh`nB*@EQkO32sq=iIAbu&UxwWecKO53~Bme3? zUh72lEa^2$K1uf%SEP594sXpm668|4%RWib;@=qYlT^AzEB=HSr@CbXq!p#=d^A|l@btIlMm8z5yS$+V%fk!0Fwt%lN0VYHi_DHH_+L_|ac zL_k0RMMP9YK}B{IWf2eo6_Hg@P(ctu5mEo2&$-LHZ%GO*_4jX?w3)nj)_c!AcYXJr zyYJ7(dM_IFju4fAWekDkvs%V zzgOYG0nW%$(QtI6$cFK6wu*g_An|WfkLoZj=Oc8%Q~veLYf>oc%=_1_SX~=gg=jjf zB@zf9C@fyObWLIrAT?g0$x(Hq=i(Ih0wbW#`5uwWhn6fJ8Cr!M!58zv4?n^3(=m1q zUa@*J>c6`1=m9%(<6=qNo=E-K+wQ@HM@v3$ul{SU!~_@kHb^7h;^rD>h~a@5LUC@7A;vI|iXh5APdVGO~8fV8Sz$%)JT&vrhjWkr?8B_H`;`$=w!DAaEVseTj)j z;bf{yff;gwom`Lmf%hveZ^3R0(KK@d-pK?b1f#@1IjxXgh^MdEd%)WzKrLLMu8SmF zhwaIVZccXK2z}$dXE)&RDQp>K#PVSn@+o-vW7dz7-cw^jWmFki!(APoA$$gTAJWBf zG;A<*gtF2>yk2rBx`7X(I2e^!3JyEZX~W$GDkO&A4E}xz z?RaL&yE<$~dBE-&vh!#Yv4rF3Vm(@`2SQxyHS>OnZ@pb`KcGF@8|XA%djnVfVlv4@`7ioN==c1@{(EE)0dvQ0s@~y9$bzVWJsd7d4_TT z`5#g+=?+&Ydra9fe1b<0$8e8l`97i*Okfp(Gjl^9!c^nZ#4VCYG}Y5)ebX=S(Jya@xwvT{E# zagkm;TZBm)L5uV{9_`851G-s!#%#|02#+D+F+~G7`)bxjN$*r;PqqMft=co_uhV*Z zhBXeRH#4li1HP~Z1P77#(V{hsQ8-`lsytN&=W5}*1=xu;;_*;-!A_;ez5gKmqXF## zd#KOEEyE{Rzj)kL(>VCVr;}JTmiaeAh~tEZr3fY@5rt&(;2GLEbP9hyahSCU9b*e9 zf7;_&e2;`p_PajmeO1LU9>OsUI?l48I0IRKUnt~q-`$?q`K9EsXm<91kiGErzV4+~ zeg*&x@UIh0GoWq6TxKyqZXrI!y2E4Jmh$D7)000!{V|{`VX%WA2EgmfE_oWizW|`~ zG_lG3V0j2%@5^3VTMIVXLfRA_Lzl$yV-L_Kk9!v(>jw0Mtv_7b+5+m&?a1q&@NGuC zkJ2;VN03(o;<1aX&IVu_F61+2%V;y`?>pld!;_KcSszP!AChL&jht>Ms>u0}KL|cf z8)6Hw1CMfCi0?DB!$*_e2OK*v+`MN9E}$6*k>SLh#vQhlIXjQM`~v2vizdJhCnvpj zvBS`+n(9Ri`bp$_0gqK8*ao^`JWZ_oNd4GC+5{dAdLzCsz#gTiy*Hr=FreMh%^o}r z0IzR5)h0ZFpDmyr+#mCoE`HJTqs`w6Su~&m^1Maml}E!a#PiC@U6(J0UfiY<(1DN7vZ~H<@MY2VGTNCOUo;d zf_^`~SE{^zo<6KWm)N{I&ql{?#`^$PFCJc!t2NJPo|c%n1G<=W>c&A#GZeTbM{tvX zpE$$^Pivl$n7Frq7cIBoTw4p4l)41mwT9q1ANl}Ro!%#qOFp6@pjj=DvBzpiYhvPY z0_ii5w#3BG3gj+<$k`@5)h01<(zZslkbp9Qb8t$pI_%WY6I>+<$405sQY{z3^N8v&XQmn^LI;R(PER#B z!WR;Ub5yM;0u~Wyj#IT5Lf=P>K2+6+A?zT+P520dAn;%!3WKtX)k-3eMv7A09;2ckb?ekbSWk_2?w+pU^6oopqSyibb z!3-~*n3%;Lpd4_cMb*(vu?*qeKMmg$RR>)ga<;e z-~zRw8;G~@u>`A81s`**#I1Z5z1Dn|{yKv1jkM=)k~ly{+jETyV^h8vDFh0&%mamPz>QuC$58>O4 z;oGc}Qr>%XwLf_ATAU|}gHG{0JmDFtws_-RMld-LQ%=?LQvq4HcFA%*Iy{QEn9VI6 zI!xi`1F&G(n#C3XYJ2^DAn|$4`7ryl{o%v+u`Irm^jb}qHmH`#4gPl6C&q=-SWM<; zqubWa>&&lv^YCDNcgGlMzXy}v?U@Pk2q8DD&gSsPTZVE+7z(>)hV&sr$|KteRHH49 z1m20;$Y^UU5Q)T`jcr>uFZ-Sj+n$N<1+ed|+mhbhsf@92Xsl%@t8w-{ia<5e;wG8* z;})Oh*Oo0$gdJ(6$q2AN>++;`wkNhUeUw3;8fU;SD~r7fWBtv`|5&#tU_ItU+6*K8 z!#{HZe-#S3um^R-t#ciOz{Nn5@d-z;{i&H8@Q zTPXHaHma>&yk@a}C~N4Ri!7pUN^}>uS!brI`xDGF|@Gf=97}*Bm zy*{ykNhM;tHzkv&^`(BOFHRaEp}#F&zFdy#(WkcQmm>`EY7_}S8$G_;yz1s%?bxdYTkY~j*y`4# zcg+}OtEEeH{WL2-hVXdUNktG?3>pLxkPa1ZHY(8evp_deS4 z#-w*lQf#SKb+zkZ!#=~EV}Fk(=I+NKmn1Rql58UJeeI5~H5)F6S&qZEYZut?hNSm9 zFKR!^FfVabndt zJZR=;qiwf(#pX0txeD#!?fACA1hcM6dO!0r$N&RsIGg_s(JrvjkcBTO4-Rg64%xIXfu3(pI_3lQeP;MTqM0=dCf9qGCkF%k!ZcxmIy zEuO3E_1rI+!r16%yPH{AOh!4p8Q&du#YE=Oq<2Mff|Lc$zFfU_q{c%_{q;se`~c0b zifnMr&}tm|KpUsA4`m2tsP3KxO`Y||*P4yT!@e}#*|hN^N$*T;HPqis@V0ld=;Te)@tZ7dRnD%Ji zkyp1ce|=jb@d3c(6Su#N6VT4q=5^TQkIgdJ38UBI2iGiKz9_u^V>7eusjw@JcQ$Q% zQ__3fu`L%1_&iOMToh~DI|8=7+Su{<*O-qk-3Ko`qaB#=7TEElDepvWNA)nwU>}J! zVG&zz^h=p+YjeCEUOhO7@fq(Y^WL_-9`5+UGoMQgsGbhTEh$Q`IySUiyz$R0HZy;I z4$is|Wie$pl*6}^-VD`LEY&NX20cKVMw;N$0L6!c;*DB=T6*vyo6#`%nOtJ*i}*f9 zlUUjh7AL#zpm@=_^V|{V+vL)>}0ls)U zY`Nc4N$>RZ1ZzuwtZJynV*gjfoE-+}oAX@&MFvw7yoGB9We*5Li z+95pHQ7tkYrtQ1Y!j%T!$D9D;F=f_8nfecFmGOJ2y6L z=NXH-X8yGS#+dmh#MP0mTInlPL9BjlwJR5(3~1El80*h^Ch0w#5;ap9J>{LFY(BJdcyJ9v-Wlr| zn;ZIqF|TX$TM5KQX{_mRc=laGqlGBw*@O-+Ua=YrcYF~>dHja}#eP1mb@|}RLq@Qw zK`Dm-vuJ2oKZ0FEPQ8F9<@Fltd#`TBE_HnGV|hK9^sY)u9WlkE3}>4tL;Zj$3AeO% z!luA_H6%lvDFx1N{ssy1+30nR&8u%X67A8c_^$gu*c;0l7b<(pKDEWmhYne}0-=1Y zy$$sgV_MhV{R9RXmG5@|A)iBETWt@=G>_n$Xo77YPkR6M)VOB#;F2M9yUTE>1!IR> z>l*q)!%3{HuFasQ*Zp7d-L*Rw(%?Ry@j^^X43nUvNfYjS^FBA8)-Kc ze~MNA7uIG|UR(Z2-+U6^{r7~;5C`*gWizhl3=ggx#^a~M)(kGgCUiUdHXKhVlWp`G z#pdN>=b>L>k8>sMbxqP+rn)9HlLuqtKWnmCr7)B)(bJI0z`p5ix7W?#Ypss5pW&Ex z-@Q~F?NY;E{kn<4?hf-rY&O%{>=_u(Sr_B^7@OPMj#Kc~!U^~eyd8Gg-dbq3 z4V5A2(z)I-*e-33c|HhBqDSL=WOLQq0N4g^PpoRj#fvKA$oF$wLf&^l z&EE^($?rsQKks=bOLVdI>gC zV3v{a3`v{LcW8XUc5n0Z_1%%@eeu1V`9>6yiq7|PoHb-{bC6*~8DGojEgX^#;eKE( zE48}!suMadO5V0NLV`llUifojVu<`mbofnFc$T5aSnr)2teSv2H8%ub}H(pG?vibSm@#t1g z!gn2PS9;2$qZrUdu+qWwAg>S60wb|wH&0)A0B`B+h_>}6`pW4ze9<iz|%4+@2d)JMQgN-P+`@_S;t zgon3228Iu>E$4;@i4-#b#MA&yr+52#{rX;S`19tSnA+i^sqyAIaaFAM z=KW?ookG>hE+`EPQpuGtT-ikDS*cUH@QMytm*eX_*$O4PM(TJ_T1##Dv5*v?Tb9F+8cmDTpV1) z10ziRtPjZk5H~nVaJ=Cy0_gA(V!t<5~AF3ol5Vd6X*ni z%6S>JgAY$k+y*93r?9mjv_p<3smNxgWreR-_6tKS?2WVi5Tc`UcEBo#&Git`bu5q zFKsFLJ_z;vV0;Id@0UDpai)KG@gal3KzW{_xANA)qy30#&| zE?I<#J{C5(dNGDw7y#j;uMee+!PQHbty(#PqpfjcmPZavAXJ0ppn?oEwc$6F!0LZP z-9d?<^_B|Xd)C8;q{k`b$^0i9`ksUYTri(+$kyz@PfP|(Jcrrym zUE3HTcw#}ebdo1Or@a)8hW0X((%Wv2>!T;7UzeGTyHsX}%%sVHe0Zny)|oe?wC z^%30doca(DsjViZC#8;{kgZbVGdra|GAT1z)9;d6m3f;Wh~6c&0)NLNkq}CD3Ww@l zk(eDbyW(=|)CYIUyfHH=>A@b#S6;C_c+4^c;uvPyW2@BGZ%?OF>oPk*SE~RrqIG=g zFv38&jr?wvI)cARFGF8Z>z1!rHxDOygA-KoqjqTnbRe+L*HcW)HSrC=d1b>yz; zR7#~L&4NnriSIjTl2m3!dMwG)sUw*xO*KCA2Bcko(_3Y>2WH)_>G7!vnVpc+BZZKe z8Yktn7440GQ}LzfamcEaMoyLAjx4{eSbp28@=K@22}2gdCXL!=|Vq_+Lf|{$#Jt5dHH=xH|6yTfLu|-{ zWs&3`ArC68keJ#Cc|463K6-<)iI(7=bo7~|>T z((Yuo&!+cE9Yu#mo!J&wwDF#BgI&|F=cR|T*vX{h@(oJ|4+@1K93u)ly&;``D{ffM zDON6&8>#`a&4gjWGSf0So!U`VnRMo@KpZV)#`2ZKrBWZ>HJ#oOCAc$S%K)Qy?3|gr zJ^Uec{7;e& zr-gy(i0h;m*vk6X?HiVcWAKOqX}~d-tRt_>NM}P^Wp+VUSvfLjJEX%H3ztS$vK8wI zx}8i*dKV_@^=$OhZ=`w0;$B!R8!pmezIQj|gLg}P8QHM>@W4pq2ggX#511U>p>;7u zn~_@0c9wZ^zsa=dt!|iJ9>xewC#bU2lG#Gwn@pkp_idP5o^J@bI08}HFtIKYo*ctA z;IR#p$&&&h^Q(|44P0h&>gl6VbSZ4sk`hckCAXhdw`jzqt>dq2Gv<~Mw8Xbs-{ zx^yngp--nX*|fKVsb3rD3q0Tt`8=2TL={S7xFqAIbmqo6={kGEbnzfF z==y=Hi;Wn*yR$GdZJ9~q-*7@S|q)VL0deifgS;lUO5fDScv zc4nPOggZ;E%f;EL^mVF!9e~@o`Kgnbmnm4!UwH}+`rE&t{=wCcLf?z2Q0A?uUvI(h zuK2}_M*i(GnO!uX7@u)c^cKz;lS#Id>Y3%Mo;IE-gS34!gS73yE+CB*q<2eUEIJO= zol~uC(D&@dHd{^MUe7TglbHn;vn3fjutDH8n-%tp_)RfuoKWK)te8XK8t~|~Koy;r zc_TX;Py07V&(_*yw2AzM^$8S3Q zJc0uHA5{ZgG~`;ZT9epxdU;X<^gfM_o4v|pWZBNSHnnaZVgTLu$LZeG_GYAi=)NAh zS>Bnfw)aKwhE!tH*_%P~;aQB_`8l^Cyh?40)yS5G0p($^J8a8B!>N`9 zwplH<*;Kk2MjX2D;j)8YuQ#nu#wUl)&p9;<`8;Ej=93}5q4S@pRcyt?Bk7gycY7`b zY@gWyK&QTM+OlVOY^3V}rb|AmD(kl9>`iJD2APKL{oEQX)3P)d%iCxgu@nCUt1RoR zdI$Ga^h*^R6FFv`VEAUVf|rd$;&w`nLxITJ7cV)p#!C4lz{gL@?1A;`!{izeEMum} zy$N~3x-*D|cf#fCn0Dl6x5?51VdZB#tVxYattNOInf$*oz3qj!hmH17!*(E++h$H#044p?B~xl$Y9?6DPG? zJ5Cx)5Bz|SFy#|?bvUoa$pYD?Xa@rJX7pm@;6*;N;nE;_JLtUX)%L%DPDTQT&KvM( z0vVN|EDbmL4H$C6US=T;-tZhLw@KY54>3TXESkxx)ofvcO|kJwRu|C)ZgP7u>Mj%> zYer**|A9`1sfEtROuPBN(8;i_(E0J8&f{NgzfiGVS@lucjEV}KKc`OkV(Ms4ZBVpa zHy%en35~fq=XjO+WgRC~Cxp>Okq~wo)SlUc%`)4*M?jEDyo!4D+gVyK18^eWh|uY! z$L)v|;1Mb2p=>rXJHq#Okd_AUwQN?{RN&E9IyC~+q&HyF#%Fx;ybbNnWc6r@El?`+ zHui8prm-#$5-ceSI|my(LJHMvZ}RBR=Uye-2J^_!j7Z0ox&m=E&(e?_*kFxvno7N zQ++$TL^|g-^56}AzYTm{D!c-7F?Sa}r<4VXZCMjQJA}vkT5TEV=Ygu>nSv`3QgI*Z*{>n{T?->IR#=tsg zI?cp#I`tkT(@v*SZ^=x@J^x`Kl3L7X=X#LlOs~|a4T3h^*g?h7)6Esb&!IGb%4U*d z2dqqNivCx<7q4|PbQ5%5sXR608(A+Iw;S4m5HNKFha2PN z35oRculo2m;7<&z1bv9Ug!(SC52PoP!xs|}?1DnSFIgC2$)YJ>1E$t{z=a-vYqdqj z^z;@7PlT=2n#!iC3k>;yL|v=8&$R50z}yij6(7K3f0b6GG?RH7C`V8noVabBc{`jF z>3h}3kOA8=C=Y#8hEVKbI3tuv+#6FzvyqZzTc+ctP3n^jUxRe~N4ojc*2*U_#WVBC zkOuB{}TXy+MR1$xgAy(l&{ zFWt1h!$2j_`GgwwPY{ErWl*iI!_Pc6mCYIa1L?R!Pe1e!8SbGPc=&EXe0K)^#;u#$ z4Xb=d(|MYqF3s{L>wtO|T#S>G-+R&A!J*}~!=|=QUBu@!_~!GAI)+v*!dmN)-AFo& zQ(0HJYo<#jZHVd@KQ{}diSs^2_<%$2$mWm>b9fHLM^o~+8w<(m={BF}>veCnhh*Rt z>p4hq%0qBggZ=i%LS|w*$qaCa$+Yr; zT1x&V@erO{1l3bQ>0{Q3jurSDSBCP~s=)?cltG}F&3m@8B?jMl z1{KvXK1Dj2`jkv=SjyN7CyoSpb3l50Cb?cSsVmtvTd4{^usd+o$dM|Fr9#E3) z`of0TgzxEV*+{wG{E2j`u?}0q_4-F#@dcfhg~>PKVV|6CipC^S5>HOZv}7iY;acVC z!;=K`jBNi!7ma^e`~aCweRfzqNS}x?2X}=cee_&a{&97@C@&H$!ppELR%@>Z&*oA$ z_m#Z0;%{8uoc7DsO~1l}$9q8df4+WxcWa1!;P*1yCDTme*IHY9f_`xr`a{j7?$F>- zrcpf>_<7(z!%+LE3S+H@W{WJ_{*>2+9@;3UQd#1_HO(d zsal%IB8>9b`%S~Q6RQ<(lGT|sela(|TNrE)#_*X(D)oMX&=PTR=Pjs0TPYl-W4uNV zxEW=PXu}3L0C$s>5Awf{_uHpd?VA3eyh$)5ax>V>g4YA2Tc^-TY4o^wLXAr-j%IdK zn}D%$B#JYccM*v1O7;$WV5GH2W`88|s7Xzk0>B60i|nM+Z^j;57#I(lXl7bBBmKH; zrk5t+^IKD-plL?FtAGg_8iuV>zvUc=S&?*TvmtYDCQa%RbU~c9v%NSH-jYh}9_KTr z|M8uK?G@t(z%67o(F{G9Q9K{Rmloi_gC)Weqs#D~UtY7sb&07l)iI*K5T_rtCQzp% zwJ6f7Gktvb9}PDGsd~sPHnF}9rM?wbtH&f$&vW^1jBE`B%JvVZN*YeU-@5Gz6H<3O zk8L7?DUNMLY}K!s+6|pfbAXyF?`x?v9sfU0liiFEPLcSEO4G;w$7#|{UyPaPzyELS z#D|MAtBJMKbFfe<@kAp#H6CZXZvP6q9oLs&GN)PBy^FgmQoT25M$YVJOt=Na)LgZi zFBYP6iSuJa2nz97@sB>qcV}F_UuG__F;5TUk#?yEYV5}M79)L{X`f75RE!8vvKip3 z=xDvw7@3V7e1)xydI$2A$zr?$v?SQ}?#cSchRWe<(vZW4d>bW)@6tog(;F-2AZ|XL zkow)m%HiwXkn_upmBUwwA?MbOmBTlVAqN}B)tGog%Zu;t!p<#54m}I?0X}q8;!IwQ z#W$Has*S(gRD|n&`Fpmy-krY}sB4a0<@^9&l73YSRWMe;;du=5w;M-k5V z3FjNaX}CB^2nT%ZfWc;QaRI)`#A*1eK3V)+fG=Q7yZyWlS6-r=#m@zDxe$NtCy?J6 z03(mP80>bq$l>cHY`Tcb2&lpzg|*oumd1iU{wQoeq2@Cl7hd8({wS=?6DcMLwvRsw zOIz6w)0$@4oGGRA2izjHQw;u4T&S0?=d;(i9bY8;xA-BYlZR!vRfO|Mc!6N&U4kFQ zGtcL-IhzQqQs`S8Ac-U7B`OB(N$C;gi~Cx;7opt- zx`Ds;Lw|w&NTjdg4gkDJeX0i`61lzXSVcT)t^Bp((=7GKA&33p{~ zC-+gAs%<9a&Wd6pe{tw>B>hwZC*Tj!A?s3tFN;3J9Pl@%uJPCZFl&&-A6EOAbo;V& zsgI2-bxL$((I7FhSQ09IDpkzFCHMl~#NSKRH3iv^Ydc+<0X&mUx$cK99EQExbWA&S z@V84{kL7QlhU3S6m@j2V17fa}^Bri4In)5{5aA&&a}gqB0zz#94HVP|fTT3UOTrK@ zHAH!1^ePauYd;&q%QB1fSpXe#BeNYX1Et^QfdXg@C#M8a zeUz8bP}wU`p!}%!<&?oYV|8SsI!G8wAKSl(4gy1TOrEu8Gj3>4{{-{vqkA%EA^7YO?awIyXBUgtet)x6A6*Dk3{2czXi2_gF` zw+fV7xLu%N*0!)MDNSs|3)bauc4FEq%8uAoXB#N{At+8CVN^#~r8@rZt!eqYuZH8t zen@ZlUcwEovlb~hAAg*p9n0Sn)HVM4A7(RXR~Fz7_=fCCaLA`vYnTrAW778jM;PK* zrN$@6q_$3tNo|7=>`WtLTP16?Vqc-Nx2Ia0lZ7=bti7*TCMY#7ImX)>G`0EJmRv63 zP2lyMY;J0E!h0RBd*^0x`FdU!%jMp3wk6?h%e!)KwY^%bH50v^1DM&Ioe9t+2h=j7 zIg2mO{BeM}>CIVu6W$I4=6kz(%eDD)O4VYvd0l5`!h3@c?&xaIBN^+OLA|37E*A?~ z|4xV!-p+(bjw_{w#To0SWt(Q~neg5i0Jr1_Z^;3%OAs+_-3%b60r92)BGC;(M1skg%Fd(>*Ba(+g4wn=_! z^V+-mixBXCwc4D4YI|30J0AukVM<(aKCRk-_QJ( zIu~R=eAuexI0$k1VAjab4(*dALB4Z#bN0x0%XRylj#_>$6J99I%k7h0wrWk&(7T)W z8QNEpvd_@l-@fNQGP$4+?*Y3sRr*TG)oOFvdkS5}rr|xaOILmPsKXD1vL@R2?IbDn zl&ZDv_6khVWKysvbJE=0+T7OM54tI(T%{3RXLH+h(!ERM}#$annk6o)wuV$tJG1OS1eaby*=5f&C{Bj+u9P|ZbY?rl(ID*-L-re zr`f{sR<0U3bj_;6k?6O<^{RzZFU*$js$>&McrPXOR1)4h%q774_VjmkCA@d@hYiLd z%9s0!J=vCN3Gd6EJc`dYp;9PzC=?KMe1*tWYeynjz<~ZL(SvK&M9_c%{dKQa>h0|4 zgbTN@{rCp&yW}2al<+R&eUIFuC=%YcypH}(G#%NdsnR}N;dS;RnK1D{)+RdPec$UW zbrpNsyNiO!O+_xQ_qu8$D^{;uydvu&6W&c;wHxgOBnaK@Ua_|`+w=~)^4(sgSe#p{ z6st7LJ?bvsFU{<|>aN&R$f9Mwp9$?K^{_6YWFGL8>3eD>z0=q>J*dFF{na4+Aq7Vh zZsF3(-H<+Ha0CZ#uW8yd%c~}1^+(b?tC5H$duDmrv}8(F6@+TY=u`iPKBp<=`_;Qp ze7)sjE#KW%n^T)z>?xK@dAQhYzyXqdD8|WP4`fESjNY6$ib{V633AQISSf}8wJrv# z1n;{qJZsPFk#MA_Y6^zTF5r60)#5-6tuW0BSRZObr5jv}hgT%L1JTO%bd`FF01T~M zjsutzUYUk(ua@!#h4@Z5JIJ9Jsnt6B`fL3abWkmc)YYhZscSs+&DVNk#-y(E(qrHf zqT86NP=t>a+Iy-n)>A;0vbJ@_Q98poF7IhTdo48KJwqxN@LaNI9@12)mdZ$2wN$9} zts16NJs&}I4}XC9ZRzan@5;hZF^sUpd8tYsjdx!^M3uVxx{BS!o+^e76q|zwe!dP~ zOE<#n3W19A9TD@|%Ow~C0}-A^tG3(J-s3xcDXo;F><3e@mV4B5{I)~oL6F7EK*^Pug2kw+^{`dX2|`z z@RstGat$Hl>1k+hL~tucbKi)?is%+!a11vjf79m`vGa`J+>C^Gc^ooUZh#kJza8ex zcWJ+yp75@SLpBhrc_H>YA~ll%4}9KvsB|n>Bf15m ze;AJz*-m@JiY@*Yk^u!b`4Y;-YPGkcy`t+iJo(3Q$k>Djcp>&?pOZS<^VQNkB^Ooi zmRMxNMEe3D{HMY{uZjsywWF)Ivr|kBPrf~Z@P&5bC!A>AtCzSeF%2f8%gsGE*+14z6Wu}{cv4^coh*LQ1WOG8S1^ ztj`R=PYZ9J*{{xR?<&n!efCU@(W02J$S@n^J!`o-I_Gqv!`1@fz<-ND#Yqe>Lge$7 zkF&+*TD7dqi4yvI3@T1!fDs~JuzdYJD$_C0_1Z^3k~$ilTC$=qyJHdMV6t=b|4{jU+1H+41Oj1wnoYKgZ!_ z>MQfCY;-{9#$w||2e={m^A2x!FV+Qn*?mf~QRTi6kBt`{WQXhv9B$=oMl@>Mg|WzZ z$pK~v{*uFM3d4wo=Uh|=9WOj20OBup_>K1(@hHl#)IrCK4+((yuR8q3XN`E2=B0Je z@!~@QApRS|pYL>9QCyn&`(?3Mk)QLG2c<8hDm1>6D!VPgS;OISAjV$4q){OV+|3AM*N2{sIbHc zBShZh^PvN(=I4k&RJk8V5V7KXCJ4LP=PAsuR?F>noO(+X6D!VPgS^{(u8z5Sx{t#B zX$TxE$uL079X|b>_O7ZfRFvtR5k#ygp9#W#2cDH`PF|I@MJ|X|diwE@Nv$wGR+m78 zqfVMiQ&$YsJZ_|*9l>%>p;YPZ?NsK(So(>0Y%ujAKEe*!e~NH-_T|;E4>kVJ@z_SP z4Lf8%73J>jQUe-v%zuf;Hk7T|A^VvKH=a+;$BMtHRe!BZ&`5(L1WNuEkxczXNKUj zEN@qDJD%GYzo&hY#=`*1M<(e zA~0RRL&_dJVN(9jZtsFvY^-I1+>rdm5N~B}alRy+z2BGOkoDynUWom2h_hPk=~jzd z5PNYf@)a56zI3VDU90wCKvXWx<0Eim?O#VRMzU&w;~0_R2NWNcFfg1^>xemYhz|zA zZstXhLk}SjTk7hX#Y+ZpFtdIJ#oGNy98#xky6zr~%pf}?|JE|ku2wqDx?2mZ`MU^4 zWVSlFMIs$8Nc+9zsaE>d3=S_@ynIj$h@RjNakw~V^ZNlPJzEBF~OA<2WJmdk$Z3wVdypt2(M2=JHp?;IvTv z(7_k#@Ivaxd5W zL-wsccUPs~6^$0@wm4)R$pLN%zTM}QO@fZ-7EEUDh)35E9+Cj@KlAyE1Fo^T#C%sA zvX1BgHw549^XB_XZmLm3?ukRz5gg!#;9vN>(21&N+=GLIU&bNp2o7*V@O?gSU%t}L zeJZANg5&)<7F$PjkRP&t<8!kwtm?@<2ObYZQCg}Vd)UUp;e^PCd_Fk3kqDP~ID)8? zN}mnl9`(8Uda+*1J&|lA(Lnq*2Bk&n@s>@Z%L<{71v#&L++myZ(oUx8GO&QX%PEl49XQKJ%+m{9j?0sf;_HIc6*Rs1MfiTAXt8kxJ4>g{89})s>^IZZ7cY z$5Xpc|-gML@yXK?%j~5|)#D zW~-t=gZ{aC_y#HhLZIW^pbT4Lx)z^T2dyXI8m%%#YXQK zg)7}0hck({Pi^A)k@nk!z0wEK)d9YAA>|9XKaC)?Q0<$P7-ECCJB6#0PZl~ydRDEh zjI3HM5;4{OSsc!!R8?OJjWR>-&wbu%-kH&G5BJ@1xH@tJ%#eGp&)Ye|#I7D(s%j}l zS8=#Has$ke`zwccd1+HzswdT9h0xz+y~#nch#Fhb&Qg^x3}*>F(vtE<89Vv$j~hRyt{D)0xDq*7;Z zbB!widUZl9kVAX-cpbc!?>KE|oD3xXk0A*MV+~-*samc9DC^rOO=B%78_qPSm({}?1$xNr zr#&nMO1@=;R2TFWYn8PJSC3e2UGLkmNG(1nJ*L;qTNz*B2iU z0R{Jr?Z%sKqPbKq&NdG?I1#=#iZXI_y5m?O^Ortj!I6m$_E%9%J&_J4ME=@mtQ7Ii z72jOfgT4D>P$E<}7&ehEBSbzZd{XE67#3S9%$ybj{fAe15|PM}ImD4`;JXL6!xQ{_1lCv-xZU zVe;u@lhS-PhmhM#y`?XB$xO8}PZtqU8UOLA`4%l}6d!N=HwdmHMRP#RvE!_0Z5ZU` zI2Rb36`=+D@jhi8U#g1Y*(FMk`3oY1B@+m82we1V3|6~xV zO%QNhT2gaB%%>a%yZ(kfOChipWL7|ZyJ;RsI@M?K>n&ddJ}rWX&6v*wVP6}^H<_{9 z4O8;=3N~Jgg}CwN>k*7AErtuyE^~Ogd}&DAHzSyMX_gDpzUA;>-*&m6cCNts-;QG9 z#rbTIccsJC(P_lN8NL%i#7nbG5cWNXr@Pw-L(_Iu1Q9RHGC|nY4$mB$GE~=VB8Yfl zmI=bHb9nIn3wAoFGQ~6HC?;N<&jxunI$U_=UA5tGkROEM@v;mHB>l+YKtVhE$#05c z;-&d)kax4;(!Gm$#}F%gx5S`CqP&Lc^fKC!gAyS7r&>UPudlVwkrq+rjkkvp(S*7@ z5Ot@^QP8b9JmqI0cpX8C19E=u(swSDQspy`yF>6gauf&T-0RYp?L3GN@_!LUi8MX0 zSH_a;Sw0B7Pq@10b(Wjal+@N>sR{>g98z0>DVEx8!p`g04XH$p-QPh)4dg-RZyafr zLszXCsU0@BWMtJEtq*2-pe{u{T@g9Z^N=g$gKHP#n7}owR;dX>4h`GGb?|j{1Z6)hrh2#!=Y6Z%9>7QLH@Z zeB6;%SheS@X#u|I{ZWBe;f2(HIGk7-S==Knfe41&7viz?Lx`il;K=g2}| zHVWWhakzStU1rEVeS98=fEET1UVBKbATM|pI%d1C-G8PYfl*+G^z{Wn&u1fIDws=f z3r0onRzu%#W+Nier>C!BRY6%$cXq5KM3KQ#gw}^b`CLP)^(l0uLF2hGvKY8bzo^d{ z#Ci2e8td}qK+zXsq{vnY)x@EWoL`rsu^KA{S}u%{!S`pB5==$DSdXBw4kH69E{c(W z>7^M}vMcyMuK`7 zP>meX%3axjq_G}H5LA87m6I=Hz6xiVzfzCz;dEEkBdDV#Bm*k0j*}o!2jOeT$~E=y zqJe{Twd&$Db4H1l0wveGLW;{j=2$6w@7lI%x6~(DpCTg%if)UQqL&%iuKlzg z!TOXa8BlRYM8dp0LQ5j>1NQ98SQmbFXCtCUs)Dkh?yfjVd;vgfgDd>J0m*uF`GTP8 zo;W#pgU6_XJKWoVWId{UK~VL}I5`aHV|1aP`&A>F^(b>hLEEq6B<1JKHOk-@_ctI} zk1k&jR6P(Ur>8fM0J(NG`oTst>rv*2g0_d_Bz1QiU1*9PsZX&UO;!x_{5DPsLo@n& zdExZGYfQBseF1UM`SkcozEWdU6$Te9B2p>8{arvkGoBk^Tof=0_1E#-ZRw&Arc5m(YiCBuIq_`a5#f zp%W1lQqUAHfPya`BO0ZCPnwU|vU}~Bwe(2PKPg8@I%+;%O9uW$lVH;5cP%ZQzL#`@ z_Fs~05K8I|m7f)myhMwGf_66qwhVy(H_Z+_jc@R_Ab|f5Z4W$4z~F6Z0RLaV06^vU zzJ}I^FwtN*ZfmYp$62~CQ(5|>q<}Ee88Maz5Dw4omi)2JiP^QhpFxDQ~712TpKsL1Fsv|nAxLoO(pW_Xk1e?Y~~pbn}yim zsBpB=xTd3VO&I}91uD{S&%iIfE%C)9w53AXNTC=$jm9vn^OO7>#SH z;x>=QHH`)*&0>-_8rQU==7+KkOmRlznlcxG>siTvMLD z;k%WZ6Xr0Dq#n-m*Db2P3g-kI@3mNu}IPo&!4(YU5694czq zXk1g}5~FcVN8_662(00NiKB5%vwW9Bg_j+TYs&pQqj61jZySlwIvUqh)f5SmIvUp$ zb!9ZJsS_3z_85(8$^f^a=%}#EXk1e#Br5DN8rKx>Wy-3f8=jO=F-GH>Iy(mV&TDxz zuBnbxD(C%;#x+$t14iST*2)Z<>W3&DjcYpmfozjrOys-nDpc!eT+`9GrV>z_Ay3UZ zs`N2t6S?-4(YU7B(YU6gaZR1*r@FT2xMHj(HqdM|PAW$Aqj60~{IE6>csGM$kemW(YU68*N*+*V=7K_ z9_L1N^v|{tAxGny*72^WHQ5vEgW3Q@9To1V`hVj>a_|jcXbc*L0^^jZu4R`EKqxWqecb zhhD8VxN<@IZ+4+Ihv=>Ywf;(bxyl5m_DqiPrpRqeRzVpOHsQTPZgSZsANY2L`o#xv zgZnYtcxOLkw8jz4Pz3KHL0cR_UJ*2l?B*DXPOYO=X=ga==BBm7i`R^-+cS%(`K>wR zRNtx)#7t3}qAs*o+buSZxQ)b9O~(2Q4T)!vc$y;4SGyV~BTwS#mbj&nWCTqH@eE6x zYe+0=aFHKown7xud5j zn5n>Yx|nKS;L`w~9e{TzhUq}eaS>e|1*K#LFeMk0uT~UhCNNzJL#M3q54BX9nx~Mf zSK&I^`wO+sa(kgP&tRFSJ_n0opT)LKX<_Os3QeD^RXXP8y9<&58n^18%JcgLPSf_g z@M4d^Y1nxV94`h7oGF;^z-iQyG6k(V;Gk$!jbg$UIH+n~BWTx!E~3M*(6H}uFmw~m zL>nz~QQeX>n)SUdIIq*(!py(V!OT|-EzG=b^u%8CyOd3s`GXw#ej|vvUt$q0s&&;R zN8C~e*M$>cmCcy@!2qVRjqO`*ngw)NlmK*h^{_KHSPI92QjChIjDY( zgXl4-ruJb6Q88snTaGvgNK)0Ep0qZIsETqr(qRswT&-yBH1gpN1{G9e=t}E?7+qrG zOCMIK**K=FBJBffF7+H~5wrW-MSZ1dhN_nzvEo{5WmB7I%40kSgCLRBo_=vp6wnmf z=U5kCuIhBqK*zb5Vu!}iLLYT8Wo)DqOEAC3yBMB4E*R$bV=ks(Fp}RBTvT_ZLp5Vk zeLkU4XqwA9!_8B2O!rAXrbC>x(v)kP(n=@!ltxK+0X|3GDFIZ`sG%KJ3l>89Xrj*rO_Vb>iZ>F6pUS}E4d-cQHC8}5)p|QS5g!}|1sx*(IrtWy zw&de6KEc*ojh8+lfNstMeZG$labxV3@GkJtxuEctHlQ!`(P#()y2<^tr?vL5h?Qs1 zol!n}1boC`S*EnuGg@xBm@k&*74`0&td+)k_ty|jp;X~HtSNN;<_c34ae01=2t&rs1C|4Sn5#BvhJaPCij>wO*9WcU5zEO3+gd<`jKZ z-6jzoElz9Ha>;5NBP)xtFLo(xOJqrCk*`|yGN$lbLyLML@kGVfL?3`ekSw)W2RwyHZOBZ$Q72 zMg8A#C<6Kw3H4t^pUc%s<*vS<`bI6Gv`F9A!pUlUP79*$t6g+YZ@Ig@i+-mmsQNmp zZmn^=8&v%=+WqUbbTZevD$;6bQ51cHiv|rfYc$dpS(mHeJwm%Gha0So5hSNHsdcXA z=1#r5_6}fLvIdRyI9y`A&H%E8-mKTP5CiqiO~b2){ADzC<1eD+G+9esGFb;|B^k$E zb;)D_sEuT@AXiVRESXIerR98IZ`Xo)0@ZriG*XuH<$PT-N#1mlRU45>@@9~%l&ioj zb>&F{XKF%B1M3myWGQWL5+2w1^jw$or@V!Csks;@vjq#R%=d#XggaB_PKzn`s>vBs zKifh(J6onHIBVb>3rB(UsL478I9N4v5n8;gR2*Ot9fe+l;7oX~gD`OBw@1TUYK880 zvrNG>^|}Z%8)u^WECN|Bl-2Z@i8|0lsAUa~J<1krOMnTgSg^lt!UR<<+*uuC3G`b; zHLwIWKsYND-d53TluZ8u3kJC|DWD52l+LUChiQM0g;xjq0}G^!ECyv@R!*6L_xgz5 z9=j0BEWFQR$^-stEAvpZ7?}b{vgk+$S-2I%rHCa2M;1V35px+)ND(VO&i|4X9~P}LZ&z0hzUbdac#s_L=W*Ek4> ztyHD*RhrtQnhiVHzI=DZ)J+;=#KD2Hw@)LvP{d`JwL!e`W+wHpAPPtCs*8jdE4tyS$nlXU9;hz~BS#)g`Y@hrI1n`^DP zmF85z;e2SEV5<5cY20*kb)}?loNwt*_VptsndWn4h8jCc1*|;g ztEJu^M13`rPG6)n5nODE66-l~wn;K72@q-|;A|mR(s~i@13Q$v3jKXu#ew?i`CN!c zi|_5}THq(A+>0@Lh_ItzQo=OqbQF7VczcA<=1+QZON!MRhZSXrEPO$j@!+7lSSc+m z)>@`-&7Y19k%(D+Iu*% zs!#b9my#nWn}M!QjI9NmpIhsb`9zI#nPOpf1E=|#!@)_0&te6$h9|tQJA|03kS-^p zUAj3q=G>t(0u`ZOMABwBMZ{hmC3Lx7-oU8AEaNmuJH}qR{-j1$S-vG|SS$tfc#Vffu!bjHrQS+=H|kk!#$4AaFshXS)U^@1mX-ivOG|TZYCj}i7p0sQ zq@1Q@ULT>%h z8O+g4lcOI+C|hO*6N-DC(w~qPrCyU>FXV{q{^~oTEN$H^x}*i^8buRC;X4xHU#bu8k_AGO#wMDqcv&Z80*y9V-Jih?Q}N$Y7`0 zk6i0T)Vhu5oi4Rr6J=Y1gs~c{z8B|}lZ@qo9~l*diiE?1`b8ouN_Q(w?6;%~tqz!S zurgT`_k_sGQ8Kn0_xfb22agfQX5<%Px)^zERPH04&L9R%q3m(wR6l!dTu}M7C;}_m zj}n==`z;Z>m!L-G>Ngh8P9=zEZXU3Bj@;(-;;B}Uh*^2iCF<(!nQa{y zv`h&W%LAUHM}c5{L|EA|$f87DuX)s`lQl8zF|?oRryi3=74sT@?4yLukZnGyk@>wP zG9!%uO$!^MCxk{u&1R6}iuj{NqgnOQZpOs$!L?`JyF}TRuFo1d>;a=N+G)(Cg}E^f(_) zue8jP(U1B_%#$sSH625{<9)1|Fk2E0!1HpSsD2(#@QLE{_;H^gCXe>4bbpWD?7mX3 zzZl57_H2^?1IvNvSPGqv94XL{#>mj=nA+Z1>do?xEPW=tnL>*uvAOAx)kCZN)k}TnFJJC$C|ep( zN{!q{C`+=2Szo9u6YeXdz0lu4sH_vdTPQnv`|1;_bmFLDqj|Cs1xG7~kXLz-W-ursSBMMLx2-FkNe$F(t>;yw}HpQ6pQM)&8P` z46+5KH$ySPZeUyNW5A|Ss`L)_QQd`^ib<8;5+4I5jZ&qz)JLJnwKu5Z8}w1&GB{Iy z%X};twMUo&Jj6$m)nIiA9_nMkYWzYM;gF9ctHJ6re7}zctM&|2h#&BgWHne_ipza0 zSha6pLzfie3Li;UgVp7@(#L|;c!w^?RX&oe8f!{&jbNoUuE}39u?+Nw!zeM6JXakF zqr?od%VTXACE3Jy9m}g>lw_lcs~(4kQIbq-FTggzFiJh);IhXNVU)OO6J7g5VU)OH zldQ{zQQ~k-bowL1DCJd6vPti#2vQq_et&cXsZ1izTRsv&Dx=6Vmt(vLR@tS6hB-Eh zRi=@Z`r{RrJ!Fl4{KETK2;-OC2_cMMbRQ34{E|B{gz*dR6CsRWZYPB>ezAQrgz-!5 zXFewm#T!nj5D=`hYIu~Wl1r@&4NoZ}TQ&wjx9L6X$eEpI- zD**S)>Ffa9FQv}~;C>mM6M*|AbZ!9dm(O_txL-P-55WDh`9c8hm(2MAxL+<81mJF| zTo}YSW%9)!#wn361u;%}TolAOrSat;#wm-7eN4Wrib6Ive#M3Bbg?zL#D(iru_^hg z3)g94J94QDS1HPI?c{4NT%||4_piHfRTS8#$t7@U8|X9nvMLJM`g@rRS4ELyYw=AN zu8KmskIP-SE{Ysm&~F70D#tQ3_;vuHy^mSGB7jhNmI1?+0ffqQD>MC_07B(jb}3(_ z5qV_JuMgjMpnh$*+JX9Y;Ti|(*Mw^ws9z7RbD(}LxZZ*Kb>IdE>eql99jNdBKX9PF z_y5p=y1xG-7w&leO)lK=`yab-$LoLM!X2N#*@ZhEf184HLR0IS>s$M$0l07P+XHal z;&%k#zRm9pz@&$CalzXxZuP60nQ-beMo!=8XcT_tY=}H_dAT zv!CKLho)NUE|wiFl_oV4J3UO}C^CC1J`<)1=rU8YGs0Bdr*D!h1Ln^<6nQ+zwrK1d zX`Lbi<1-x+)DGGI8*p{vY4pqB5PtvrqsLuTOfE&(7!bFqiB7XJ4oLwM&T6>*0+q( zc%_5$Eu&O^$HDoA(JH^|AbryqmETubF1FRgk!Lt%Oq*XFCYb3E&_}Kb6Cl^V-?ELm zHbUV#68-492!&f|>C)Fb6vct=e66RwFi)B}nLXd&pz~F1Ei)AnRk~%0)cPMP618lI zU1{9aY}?5nMUdsf0>LtQwxA)zZP>OJDwOrzVBOn>|f!{n@>; zO)K$E6r|kdNWl}?xqxSzcy1nF>~csG-W?8QJNk#fQzBW9ztf>8_24N=Z#&)w#PYi& zLqGqM#nhjlGWB>oX-Y#& zD39V>AB#}MIoAmhsyOfZc!Vm>y-ti!#rfAKB2=*sc2blqWPS0lPe#c?<`)+`IZ76? zzxddvqGX{05GOk&N){>s@v_r=GJj#;Ilr^Uko_Y2l^`k zXZb*X8Q^Rm=&u2M&IkGn0O$BXfA)W_4|J#g=Q&_!-v4`eN<;DDVO|M?EsneJcU zfStMig+92wONUa>??POZ;uCol!$gmXU-`beFDoJL%sM25Q|$Vi^WpBDAH=_N{zotuYJq9*ALgvd_ouPPyWUK=n_IBw2LoB`k&L>pY%czGKo(!Zc;$km5U)^z zv~M>~6n9bki3(H)Nz|1ASq&1^K#(NrJB}b6cIR5k^v%AhxC=a#DpS8CRo|^I%yc3z zOPIVg`@Mj$23c&7D#_wij-d59Lwhubrt+&dc>}T5)KBW)D+Jqz1UBe4`Ja^rzVr=r|h(?zQ0Z_2gj)voUC6x_Wz&-Tn)GyG25i1qR zZ}7x$H~3N-SgoE2G1(85h?vF4my^L5Hk-vCg(UmSi?2ws&t@gxWF?0eIA5mZFq@V9 zh)^E9@3uSY>_zQI#3x z<&}xUs}EM(t-d(@vcoHr)#k{$P0RAvfttjaG%!;2))jdj*)FHFx7?34Rl&*B9 z&IQ*fQPJ*oq?m=tmn%inL&`54DR%Yp<%%&3kn>Adj>+-MmZKRU=U1*A)6%_cIhp}- z?o)E?dTCs_$D7%*K+3O`6gvtE^>H(rTRNOp%pERC2X}vnJ=Ci;V3$VlcbdJo8x^5~ zRZavN*Kgs7R|M8`5jHi3e0{I@NL*GYj%qpI?{Cq@O_l&|&rW#Fyu?;0z3r4pe~)d8 zAUkK9{j(M;Q{f!3cvT?GD$5pHLC~3?`kZ8bZ{qQI$?WLGtt2id z!uKJzP?;BEZ57siiA02@sOr2deY{)aqo&P^@clF%){QYBHOE(l=S3kRs@W3BQKY+(SIZ|^GUxQ=*iGZkXrWAJkZs_o{D zcX^J#D1fmF`K0B&0aORxu#%_$e1`EpgUZh}sh54hcne?UtFOywk6nY^+124b4h3Y9umX*{&c)^|mNPFteLliR z7uXOe1Gng%wjZ)sebTeQ4d*sN8m?b1~H5lessb$8a(+JWqdI>xg&jJhBi?+3H&w%9H@nU7>Po#ra86(S)TIe#xS3nlzUAxyWK|qBNHI`Le~@L}@HDbg{+i zL@As+vHyz2(S901oBv1Ev1l6UX92YEPqzfL)Lj7rwFYAeXs){h1W3Mg^pZeY>^BC@bgSp^HV4eW z15vy$0Qd)^_*SEz8F(m)Z!>tN|KTWps=+h)k3{j)44&!#LjXU2eqlCeK&ta$J$pQW zhkb4CWVg)|VYHt)O8;X3E!Oq<={SFi68IA6J%0`oV8zCoM>@eLBY0~bsdi5V@LY{E z*^_?ZFJZJzp6s)ICV*xuZMkXuX9H-g0rkNMzJve?Vu_MQ-WvkijSW59|zgljlfhIM=$!X zgX8llM07nGx*v&HHsDHWEa!dt}#sD zrvexbmziaj!zlrbNdpu9=>Wz=zh>c_8o(5_G-m0v0LG+^C3boMgA=zT1JaRV~sJS@%oO7 zW!t4$rRn-^2x&4T4cApJlI@n^q>-<7k!-aLlDWO!MY7E@Napnh7l{_j;F!@HT^!mg zgJU*-BsiIb)@0D7k#we;!Z?gORsRFzkHbhaGomZ~B#bPSOXRFHwN7EF-t6GZ)qJHa zqb{>2^_C!3r$}aSw>l`8z_iOUdc0k50Aa$chvrUZ?ucUD?A+<1A)`}|1DV>Nxws;g zs^PwD=e)~B{(tR#3w&fnm42m%$Ef2fiYvIRHV|;onKs>dkIY{(nG6$W0wI|h5aV7t z-JMK3o$j_D^I%ayc?r^FCV)guDc8VL5J6Zh_c@~RdsJw z_3b2dm|rxc^GniSov$AEoVw>$)vbFjHuVHjGRr-tbolT@&vQM&1E*&81MqAf_&PqMzDN{;Ae1BHY7J9l??Aw5}^-QfClX%&2bfEm_G)GUs z&;oxtL>GzY!wG5@LiYSaI73;Sj`Bs#PzxM%yArnJ&d*cJmrMd2G35HJq60a80bP5s zX!DAN-akQ?$bt8ZnNqg65nCP2bs=LhbFn61X;=o>Kaum}6r5Ig{ZkjnaRZ7E0>N{v z_D?M!mEeeN5e0!ijYROUj)=m?pS}P+hSuV0a$+F}SA41t`n7XnCnYZVTwje0>vOp1 zbA>fBj!1uwUt^6N%Tu`YFF-mu3hOwqu!f8G0$P%?(s7##SM3GTO0-ZqZUbp8 zt9}D{vHJ5|IF1eBbZD8-FB*?`pzJRMV!LHnVuJXRKx{S(>qiiNNw!NapgF3em9+XT zVGJ6^X6{U#TS_l$=4L%faQfBm|W+NIZVO zqLxLW>`WTz<;q$bMXxhyq@k;7X&lPVRKMhwKI9-dcRuBYsVA$R=qUVxmH<5 zE?+vP;dRXVw&A#6Uy~IfKa4{rGK`}NCF@)lLetGrG-~$sAvCQmMWa@KJ%pxBq-b=7 z`bG%Nw~^w}Rpdrr3A9Si~z^Yicf^G#sB^YFdU408I~d8-0GBOYvJ9TKjsXyLaVPtQ&{>ZW(Icu zJn+Xwf-h?1eW;G;_JI%aw(Enjd)wwP6(wY5`DeX4%()s+bDMkM=4w$Zmzp}*Yf-1|V ztKcJ+*isi?|9)-BZH1A>{?n3MD&t3*{>zeEO5@vOk6Cg{ZM^RKTT71J)ZBF3mO92f zP#${ye~Sw55lZD7{*PN!?5hr?@_6Y9lS*e>D3y0I{m!Cd6G14I$2z~asPJ2%RDOZX zc8iLA)}d71)Agi9g@+EM@~cChvZ&U%Xmuc%_-Ts@j}}@gzxm}Ei(1cG=vXNBS&LiO zTx_rZwYc@{g${>upEJ3w^$dp22k!G0x1Pn&5yAa~#jR&DEUSR~g2nZ1)*jMp|7cNt zn>ke0!iyHwx0yp_CH%>v`ZjZ@tb;#WRNrO}l~wSPMfFYQP+0@V?n2iE^c3>Kt-i$^ zD)-vsOlq5NFo(*$_7fJ>x0gfZ%fKfss&6ib%Dwh@i(1cGve%wqaqF6k?RBEXt!FRU zYfrMc^$aF^?a3Cmp2cLZJ;mbIGnwqQr&?U!W^K4s*LvGendElgYBglm#Az1Uw_6RF z`|jx$*|%H`nS1Z2EwXRB8Z!6aGc2-iyc#n1;4>|qeZIx6Z$;Us zKf4PS`sMx;fAHyVEWwV6UHA$nInEGL?t`g6grt{4ViAO!)4K*mV2VUejHbId4a|aR zGC!M-!YPkNm|qMfTIJDD^GjhgXw6s4F?K_d<;$U2Xb>KriA{c4SSFk{ z;aOO9S4idiyNg`?BWlBB3qkUsmMc}gc#yk=<}UIri!}WR$|dz*VRr=8dBjx{Fi4PqLr8k?Z4I zN)*+bZvgQcDJM~pq>!5o)&QP54`))ByxCz=1n`hTsZ)N-pw^*Lr@TcSqr3s-9N{#c z%=$O3M&_0lSL?%kLyHgZyC#JXJZf?1z`kd4=$=Un;tR>uWLXd$(yb;*PIPgGd$bm3 zap|~jryh-GXm}T%b66DjqQ2pHn0p6TC3E|$W`1#Gv>!MO?m<3-j_HREgQsCWgAV9U zhrtsupFxLlm&0IZ<}>Id`H{om$(YZev*X7OgXgh6gHDT|I1HZ4`V2Z1?sgbFpY<6u zW4*^=$T_V~p;_xsT?)@@eG1Q9?{ztjUP-a{xg1-wJcGU8<=DFAS?mKY$JQ>-WFK@n zwto43>@SSI7I*sEG*-}m8B~Gyk*Vc#rIk3JLI3VBOr6Aeh5tVshN+P_FY`a-Fid^K zd7H|^4#U(&oWq^|%3+wgh;!7_M;wOP*W!z*ul?F#n0+nIk*EICVVHd_&Y@6$<1nng z7Uz(t|K(E5z6PDqDg56q$I&bGwf}KBwr07nJ?e67-Ev=h%;nhH<-Yb?mt*Uf``Qz# zudQ7hAFy9P$#0aO>`oUCOn)cqKz5qqY30k($UMKde zB}FmFwZ5BZH)?x-(>qLuTSc@5Ct&=Q9T+YfM)$5YlcJR4ipKP<`v@DFxgYHu-c0x|H z!q_}6Jk@5)iB=e!C%~Vw*>a*4#^xFDX*OHVm&4dR1wP$o%L#KBo9Dovw%KyV9L8o} zbB4{9Q|2%>&w|gi+4Zf1UI+7>Wz#1y58LN#i>?+J!`dQGymM@NeRIm0@VPd@Du5t_&-kuI`V){t7fZj(eF;;Il*mq{Wgadil((}ISJX&vv$3X2E}&()uWGSPOoI(tsz6} z)(`SlRZNdngW?_hMy6HxfVx`NPFtJo()fLExI+le061L(wUnU3A<3AuLcF|=3Ok%C zY*|xV8V6wjVMI<`YZ}y==M~TVRY*k)X}M^IJ*=zH7OPQDK#-Y84=c)Oe_xsk@T?25j|#dDjx`_ z*yuM6YJ%eP;dSj(6gt#P{_ew`*E`ULeNP*re2+XXnl^dfz#x|EY3Cvy|3pg8^A6e2 zkJzt6^e!B1HI3rN?u6%U$mG+7k~h4qye^yC)LY1pWyhl}qABlrtE>_hTo{S$wBVx1 zf}Iw8F0#{3v>lqC`AnwMCG50&*W%5ET(XkQWunz=zCxWn`mO^w?iY9b#mqx%u~EA3 z;CP3`HTkIHhv&l<>b`@!>SROsy6{|IiO^PiyynO7iN;szgX<4G5Cl@>s1n(d36MDuo_;?j|ZE_g@aLN`+Bgx8leXzLP+v)d2HDO>6*x) zD?%u7I%JeZlz)w^Tyby+r>~`@O}`lO+6X_q&99TPw9DZ&;Gn3W>m#(m(Oa>8IHWXo zEQ*Nep|pvmE|Fdk#U*|tf}Kl~lo%&)~x}RV}zB!rT8REwxR( zRqNmIezD1qt6ed_i&9stoV3t(by(k%)SyR(w^zTF^wtQ)C7JBVI#e6JAHhEN$(gDN zw?(k;e^O?r((COJJOwa0Q`LS)ghCWd*3MpKfjeciSD$M1Z?|LJg|lfL-d2sL|D%iT zQ^BXI`c>4{NvWyntdgw`0tuxH8Uuo*65qg`XDm0Xd+PSaF&H9ru zyA|`k2p-~^v`q3U)c@~~;E}FLnG_|0m=8qy4k7<5RT|b%->E!EJ$04#QMQBO!(X+k zPaV{Phax-gL@(T1Aex$9=XvEy8katABgTJ=Jg;YHpchZr>rqd%y#>9y4OiVadlZua z+etkS^bVx#u2Q^SZ+QKxRsBbJUNn~zO@HelmJi;9o>;tf$+iQcTci8#8{H3Cq?2| zsDyTGlRLJF66j!%($U`DinQZ6jgAIsZHex-?vBnxcY75NAhLvxhO6?867Onj>*$1| z?riOB>27b2cks&JNlhr*Tib`OVyf@tAlcF4DS;$hnWqMXY3lU!Acs6`R_&*QRCVl1 z!)F8nr2tdWX9iMV2~zjHi^KJO4r|QUfmZvuMzXE^^9)It2|i=U{WeTxh|hAnSNV1@ z`yV>Rg}zwX!;xR)%fqemIbS|aqkP`apt_>bnZMx6lwwQ+T;dButaGU^^c6F?alR~d zsr2G@_R9jPYKe6&d?gTv+3E5??6+nrGhIsuFt~1rodv#1ZR4)4pN=-F^qwPdCzR{p z3=mN1vLzI*001Ycay!1OHC&VSJGmTs0A5F~_$bJ5%^{td`FC;6T!Eb-%o9{O%l%Dg z=*s?8tK6e|AQ0Gx_lu_C{)4@qb%!Fl17~u&gzA9N(r$`lMoTH`ywGuULeE-P^Osn z(wSUxn>aZV zE@hHvM6!|;n~>sBleUzym5fX~vo_5uY|fO#S5@{c$!tXy_*<1yEuyrHcuB!xl15?a zQgX{+0pCawVljRr;+S_%V0KDsg^QC74O7vL_{|Tu{xAHTq$KS zuA$F#Q54lyC^JE7?_wOs?gk-~ zuVhN-&6#33hd=ZR3}*iw7kAy55C<9TY(6Wy!rm-?^ut0dG{i;^q(Y)h+P*1_RLV%> z%L98J>M)g`EnrlysydEKIUe;=_qZJ>SxzN9EYoy|hct>OfS&bHM@yGj1U54hZSjQI z7ijg-o8qEfeo2Uf<(F3R0r{m(Y{Hj5yk%>U`o8!C5T9TuRcUvx%~BmtBL$0nmCQuH zZl&xPmu{8E`aeFQw@}LT<_ak&0iV6`8xc4EBT7c;e*&tOu}hetPJGj`E zH3yRh(OJL*)DDBg=Z`lWtk*jBnt5xw<7M$fo@fs9el? z*+kh^i#$zFJ5h+WsM4g>Dn_0RKRZc?HiK)lUv}?Br$`<9g=uR_#g3dR#DPZsa-~#F zRp9VS$)J1g&8azQ&>2E3 zQ56$0nag>6IglC&9F1&e?#w_ZOi!m&*+vJDCEswC5G#$6aJUoSz|vd1c=jZ8 zL!FX+(7A!Ws2!?sd6))U8vK~^0(Nnt>QxG!?SiDiZ}^N5>(JsCp_%;VY|7gVhm6Jc z3N_X5W|F(;eAyp~OD~c4irGAlZ6aATySF^Q&c8sOgg&=WtrV-cDB{AX&qQgq7ysE| zX7eslc7mfW6kgulyd?Vd5=ma`iL@7fBVwn2!Dz!Q$v;`7zdY?? z*|YsZjJ_uO#4Vqfu8KNjdUV{&6}EWA!WQ^?!w|CB;*y~IB++%)83lbzp22G`Mc+k> zs63yf^%Ubq-~7ek3?@psFjm=;EM?%cvg6}+&F!3HuP@8P)P-iY;$oCf=KLJxLba5# z{Ftoj(#wRX7_F(vXmos;V~@*)xW>ql&6hK!N+#{4HYW4=OwQ~eOSo}&Twx!vCgw8v z@yfGNYy1)UPCw*y3g3WmJ@8<%%qp zN4nF^(y#hrmdRGMd|QtG%vKl&t1i~dCOI0Zu^SE(;uh$FW+LGG?(#p(eb$kFPkx7#(TzrSLHP^TSyH1SS)vV0k1{aHk2WynKisT2N{^lkK6KN3{3KT!j@MIO!CJK%*SV7lD}YJl8e@$ zJd*#7fl0o*fl2;$1CzYjz$8D=z$8D&z$9O5V3H3SnB+$qnB+$pnB+MFle}nPk{@kg zk{@eel7Fr}I9`%pX<(AyVqlWrYG9H-Wnhv&Z(x!y?6k{YWMGoN$-tC<4+E3@7z301 zSOb%MtjjKctAR;A(rwF+GBC+MY+x$CXke1RZJC`vYG9HdX<*8Klz~b9F$0tQcmtFC zR0EUzOaqhrQ3I3w83S|u@3q^PHZaLc2io$j1}6EL2Bz}QH89KHXXn4PC%`1X#=w;S z1_P7)E(4SNZUdA2Q3Lbw8JOg6TM^Vp@@4~*yv4vIZ!<8--_&d8Z!<8--)~^bKWJc* zj~STcIRlgY69y*v$p$9*j}1)n`wUF-AFj09_wNQK`5t|?d@lo&{6qs&`DYrKqB*zz5Pl!P-TTY(aW7pA0sqv% z8Q}X2Ov{E382EJHpBebGz%Lm1O5hg_j8Ulgvw>;Ups$xy|0BTqL+yJ~1N*j z*B|09f&%pULilaK`urfgH!x<$(StBbU4Wncfk|HyH;FhfK2g&10_dw#Vfxnu{62iy z33B{0rm?*KP0-IKC5re+e8#rU**-4DpqJr}oj>zrJ1(rrD;xJ`uhNSovW}8kmmf31I!9_W#Mjufs~y#mawCd3yru5AomS;BH{; zPl?|HyhQb1!iPD0y2qeDRNkGy7aI2b4e*TyhEaqbPf&S#0iUVH7laQ0zSzJA13zHk z9Ps}d_@lsoHt=b{i`4jn%DWtR#K1QL>+uT7e*yeyL;gJQuME5gbrkiX<2&5JXFK>F z2QS)L=a&6_je}2g@b?`ocCqun&%sAK_?r%X26(%1Jg?i;F7N#gKEc7?cW{#$xl<{m zj~)kq)WP3!@E;u9^%}c9Wd~p9;3pj%f32N=0$5+q$-W;0KG*2~X8`N#Ims^q*4J;s zUjcrtx*ik$Ht_BSz7IHR;KzaWhxGC8*J&j6Gv?qgIr!JW`ua}wz2L~Z7un@ifc5pB z_$N8?+Z^143y{A46Mqk2eLW}K3aqc+gjW+**Gs~q!20@3_@lu3dQAAAfc1xt{{aW@ z_BUE8^>LVkPj~QL4&L<*!S$W$+a369qkT(&&o}ULV12zO{vhx}hWvxTi`4a=|BrZozee>bn`3=FiPYCj4E6WvRG6 z5np|%zLy-FcoXVX^H<9MKH#XK-wy!q4SYGupz9@F&vple+$3GkJ_5P^Q28f1_yXX& zjPkDl*7Id-)7)E@S_I)IIy0t zQGOb)jiCP_8TOXrwOcY`;Ty4fMDjC8pgv^(tAO=-5XoQsr-8#`9r|8eoVt6l0OZ6BQQ<72rqDgHLquSq{F?!IwGsItSn4 z;JY0BGY3E6;KqdSDuh(ueR~B**xa{Ml|1j8{mm{14$a;JCtX0)DT9`+(aG z`QgCb1}-}I7zcmK!Jh%{G4fvp+-KmM9efvXKjd^m?}PUJ0yw4kgdcbCiw@omi(4jt zKL`Im2OsX>qJvLy@E06>lY{Sb@DmQ+1$S@F_PxWw%N+cE2Y=APMF$_};IkckiG#0m z@a+zMz`>6>_(cc50pn8h`1Wyd+`%gy`~e4VbnsROpX}iC9ekOCZ*=h84*so!cfvZU zc|3bM_}va(?%+cmoOE#6!6!KQvkt!A!9Q{EZyfxrgLjGA$Fqln-{s%~9elWh%ML!- z!508e;QZZR;J!wrNqiCb9OL}|n!-zz{8r%aKt8JQ{lI&x@e$?!mBK6F^9VlyoWl5r zmhA|?0Gu`O!o7tk0RKkG-vT_0@z6sG?*klH;~UBkUn!CXhVK$*0pm30@()!QkZ}_D zddSgj80Qt%@}q(8g*>X{Cn>Du=K?{Mcz!xh1kAUw1 zrtu8re+c+q1OFcQegik{BgBISelzgT4g3z^KN>g&{3io11AYmZt}j&I`+;}H_-Rn# z^}tCrz9RWX;0!Pgn+cZ`24sAUgHLqu*$%z{_ym-Pf1LkPg>`vfb?}W2zTLq;0lo_5 z(fE+s_iNyrjP^eZ{4GPiXkQ_I1g!0`7x0t7SO($zao~$E|I_l-z&8PRDETPyflpL; z0{Ej?f2V0V)qfK3S-`YRMfhys&jaiHR|7u?998mrfS&`V>m~7j1^g1QKAtClUyt=` zZJ*bmqkRZiw|7tADliQ*D1STf8Nfpd9|rsgFfEIcya4F8<|M$R2V6ERj z0)GT}nd0xVzYtddYk##H@a@3p#;pH$06zwtP&fv>H`e!c{sV!Nz`Fmg06qbD7sX!# zd=~Id3Lgo49in0Z$nCRNzy9_3@ksd=9YI*A>7Q0PFJ^b5U`>!M_vuVPM@K?*o24 z)_?W+`WWzk03WE@_dM|5_XX$Qu8W0O3VftKKH#%}4^enA@MFLW6+RI7Nnq_C`hojb z1?}GeJPfS;cLq2Mto3y?aMi$P0@MBEi?Qxc^NkCD@%)mHzW_|@my2O9l3xk@=(t!| zfr1Es9e5-s7H;2J;#+{%mc+sl+!rDF4}mZHxL9~plf*v(UU;1BZzR7Dco6tl93SDI z1K$md#W=D^ED-B}i~EWwszZGXaC0dg!&7NFerBe*0w`j!k&)q2 zYGh83W$?>^G10O9yRJ2<6e!7iwp*&*i<@0a?RrOm4`|#yG{_ zyiNHi0G9mAVXzSIC!fZaRP|^HcKqhh!}uWqqm#i9vKG$m$IuGPtn&I@QD#-Ptlb2! z1RLce1NM^uQWn1JU&_=*c?H~O9hA1}NbM&fB*}PC!$_cqG9;|`jDwV#PY=kHdJk+U zX`Sa2q_qB11`V5WbW^cWGx}K@>p-cbI=^3j2lBHvSaYf2uA9PFf z4cF{vZLsFi@kV4{{+4boW~Q$;49QJ3bI-{*t84c5JNqTwEp z@$)uXcO~1X%JI~h%G+4oV~roSpS8i7x1`4#HuqSNxv|=VF~iI6YxW2ucy>|^If5rH zRe~C{D8!FZ`rpl`I8~za5U5J6d5pB-6Fi$}xTpJB8&mp3w%l;lDsMIx{s3;n+Q4JK zjh=flYc^K%@(Ha7&T%7`RLfdv@BA$mhZJBikV&HQH=k zANs2P@=wx|&e~X4EvNOI;^kKzHQ@&uHZ200WJ-;8b|Z6RD%SHpH2>w>S7%m}Mb8R2p%YzYbEZJm z68a{R(9pX~aDr&)vb7D(*)1OiAI!^`rEUo>qc2|#Zsy*B;r?N?z;A?}6(fM+2uI1S z7CnEKyD=Rr3&gPQT_Y&C@j4N!U@Rk=H@EP*gFGBrB$XKys!JWAMS{$PU!u{M>b9gd z3$MGNn0^YoA=epDrgVo0=rZAL+*(QI_;Km5bn5VQ!Q_g?N%khEQ*;6U|shcDjmKWF;cr69;B;6Lk=Nwo2h3e@D(JJ|uOIBE(nlSTy8ai3!)8e9a{sG%BZV3s+~f%;ePn97yvXjvZfSkY40SRzd)RJf+% zp@KvwLM?e-4k1lEU!`?QXbUX?xw`5Jdg=*Q)Dx_#BZ!ALAC>pj8lNK47T$xaZzefW zW*6i1taNsBwv132VX{foOV*QFT*YHho2w&1U3Da5*{zVI(xucyF_(cwsl$hLW(p`v zzjeyV6tlU)cr^nt);TEx0(B2`C$F4JRuG^iS3u~wRH3-7CNYn2dNqkhXG(}52M@oZ zn$4wqDu@O%TCHTt&CTmp4|x5 z2n^%TKu_~vUvtm0wTZ;~wQX^{#ysA9#Im*Vc=Iq)hLJLil>WZHKKwnrdHrzT@P>}& zj}5O|)4OJ+gq?t^*ESzIJlNCQ*F1FSV1IMpik_}!#B3Zo6tQ%hhx!idYNmkyUCn(x zEBZH6XGZ_`s^yHAM~I8k_-6mSO#0ta!8e4eOY!=>KEu<#EI8}O{4^SLz)vXGK<*+F z6b864v(=Xd9wFFLqY#w`@jrBSKfRiFB!Mc725&(Cs) zqd@@-zIlClG{ECKL;M%x`%OZ93r;je@seW{r_VS86_rOz`g^e`u&5++8V z`4+G5aD*H;NSruygq0DI&hfrddHc9F^_FrdAr2E*jpjtNv6Ns{NePx_D8Z?DU4OgRZI(iDBU8NjP_%nJB*6)oP1p*10?sk>FKCMgzHct4W+!W2Z^*J0 zb1Y+Viq!=;#pZI11^pAI54<7^#|_ z7`6K_YIk9ndoY|G80P+qVQ2RRuwE5dUmN!-n0a|#Tur+?FX4Ynb#<%nev&^uLk>Mt zLzdtx@@Sy{Th@@nT|0>fyLOU4)O8me94wa`c)v*P9s^De-C@8I87z&yhHo_>iCWs? zuXVN=gv#tq21GHo82FGj7!atpy?|uq<^sa?wid9g&c*_g)!$YSdgE2@b#X)I`9bom zIGP$&)fS<0GbtpM(QHRobq{UxU++zN&mUHO4xtJ4Re<{aKk_$O@TCj{0 zr2C6FL6W(IW2UMF93x3D-`Gid@y1S7OE;7lEZk_M^@RVlXhX?r$%eiL3pR{`<(dG} zVvXDYJs-+gstna`8UC);(D^%?LVYvu?{SiIcaPI*?(La7w|I0Oe$%Vw z##89cA5ILr^+N*Z#t$Wh-S#okxrbtTNyh1|5vcRtxB;Q>D%dOHeyR+@tf9XI&IvSS zr!Sa5*-?*aA(z5eDidg^tiX%s{vIy5lx{83%Otx&Dor*=0(C4B_$`yrS(=xL?!vr^ z9GTD|BwLNR;T#v7V}{Fb6fZo870z+O@h3qM!&~W38)ih~SmD8%1%(}MZeEcrXWX>4 zS&GX|9!p1}G@?+-Yg!Nu92X8u$0!ym$G1di${;Ld5QCgvZj`N1RM;|Y>lU=PllHIT za}d@gbARzjPMy&db#zX3gdD^6u`|I1*FE z>T)Ouw<4Afv|&#mZlobKmn~P8$41uTA67-nYQ=w`kgn!3>oQm`rMnfl?b5n*bw8#T zJ%iY6N%`ctzI-2flPRi%)5xCOI<^n;tFc%E1(Z`2Du6Vwyj-1_fZ}*nVu}1)Dd46? zc}X>oabJ`Sz;pvdBT6cuEdL+JxrU^iIdoN+ z81qI;g)QaGq$Ws};M1YP+Q$xX@#GEsuU=;(4}W@IrhT++Zh4uR+Wr-GFM%!U_!TD1 zJCyzvv*1uz_ogS233B+YW`nX@kwxk_6wR6U zDYN2JwE9iA;-`^kp*5;ku~U(UKP``vNF=)E*5G8Owtt1)NnndQzJv+$j$~FG3G3eU zA~Hb^PI!UzRqRF7@lVT*w2r0b*c@lZ)_;Zlh+&O7jzlu%J;|(i5~+OCm8cXRj_5!R zxHUlJ$ADunfh47d1o^#&c?EV_Bs6g(WHyk;bA*0 z2Sp(uUcHODzFt`k({fO4U7am+Z2qJ#Rx|7iukiS%);4v9K^Ae|LCvm%;*c`xHqy&? zP@J15W4=)-Qp~)A!mEa%hG{vd_O|pKo0+{*ePKsADBm_yIVd8|JE+-pP-KI~M^K#G zaZm^-HSeH2imNp}2i2KqnX4lxR>EK26wkNKlnx3;oOe*O?4V$S88|4)?KmienVEM` zUW(K(tr1j5_nh4&$V&JNbWqwhQ#vRR=N;56J1E#-1`djH+YXAtQ_edmJg7EZ2i4g+ zS7&%L>$H z+h$4!1tZQos9APU6eYiL2SvH~Ha&90YXBQ)-&WOn!||Nb(+C1c)8c~TG4n(1LFYR-BodS}WEdczL$QrxcT z%=Org^ImF}y%fKCr{TerdUKEErSLwT8T8Af8_7l|{FO!h;P(nmZ!Fc(JvLWY%%v9o z^5%Pib*3Ck(fgt1z0_=bDSAoQ47?P-iCJ=N@bDmFsnqbix*TtTO|@6HdYJXXWBd{jqbu1@-9*cEn^hw@D`m4hPU zynmWq|3o%u+&yt_p7aH``1l>&^B&5RdYG1rY8#!iK5C}DVMjTsz&cZTDQ3>Qso8Z? zY=p-Bl+11pqwv<0`C-&nkJT_OAJrM}oU1qZX4n^Yl#B9hGnI!T;=F^JT?a)rXxu+> zZhP?@?^K$1P+L7#!}J_fXUAN1P&4ccJIX=%wwcO75pmu@&8~wY8#L~qIJe`V=!x?A z)$$UlVOkEVqjk>4wPPhT-WPV5gVMH{(m{bZ@1SPcLBR$ya8Q)nc2MQ?tNV=w`dJXE zhiSQ}_Rhpy9Yf8uH|!`M6qC=llz)GRwF*kA_!iE`V+s7iJsQ<`^CTRo+S={c!**IeBg zHRJxUqui8XpQ#*`q|Upl*>zRY3XMA}mEU$(>ZLx7FGeKi$isU|5z}&49j#q+bxbwm z{;;Fmm0_Q$+?AxxyQ|rCSJDcNyDOF7c2`^EqX+ZuN-1Jm?y9YO&Tc!OaevrR?#i&w zRPIVr=iSxpx+`gg#@&_5&+e*RNtPU<$1` zS{=v#t)y1gUQsU^2ov2 z@#Mi6;=dnk<*LDvL@XX_8Bvn{d@5H>XV4fNKsqy)&1aVH<9P%9y+ent?O!42 z{mPjMU#Tq^i&Fx)>3*X4V!5%ng+nq2VznPRf|s$K%r3YeBxYR!zzF}I`- z|1ZWH=>|>WgcN1o_soj#QQFror;i=Th)$&;W#5q3KXm9oTnrtKFFp7Y{0%Aqp1%bP2dB6i}x zLcA9LiMK%FXfx{DOUdY;$)oy-2YK`$@Yd~14EfP*dov)Fr$5BIb!UwN+1^Mpc{_a= z$Nk1yUd-Wj9WBJ}Kd$91b9if4H;G%`TgzMJ@D?54B$n(^%R9{BbzRsbjvWkItiK)Q z@NRfKBHG_jTV4@Kksw)Y|6@dKf2RjxY(JYXI|E5(y~jViKwKEmeBS>7i-?s$ diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32 HID_IAP/EpaperModuleTest_GD32F303-HID_IAP.hex b/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32 HID_IAP/EpaperModuleTest_GD32F303-HID_IAP.hex deleted file mode 100644 index e6a98c2..0000000 --- a/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32 HID_IAP/EpaperModuleTest_GD32F303-HID_IAP.hex +++ /dev/null @@ -1,1604 +0,0 @@ -:020000040800F2 -:102000007023002049210008D9260008D5260008A1 -:10201000D7260008D126000861270008000000002C -:10202000000000000000000000000000FD26000885 -:10203000D326000800000000FB260008FF26000849 -:102040006321000863210008632100086321000860 -:102050006321000863210008632100086321000850 -:102060006321000863210008632100086321000840 -:102070006321000863210008632100086321000830 -:102080006321000863210008632100086321000820 -:102090006321000863210008632100086321000810 -:1020A0006321000863210008632100086321000800 -:1020B00063210008632100086321000863210008F0 -:1020C00063210008632100086321000863210008E0 -:1020D00063210008632100086321000863210008D0 -:1020E00063210008632100086321000863210008C0 -:1020F00063210008632100086321000863210008B0 -:10210000632100086321000863210008632100089F -:10211000632100086321000863210008632100088F -:10212000632100086321000863210008632100087F -:10213000DFF810D000F02CFA00480047953C00086A -:10214000AFF3008070230020064880470648004710 -:10215000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE757 -:10216000FEE7FEE7052700083121000800F00042E5 -:1021700030F000400AD0C10D01F56071C0F31600C7 -:1021800042EA0151C208400711437047002001464E -:10219000704730B50B46014600202022012409E09B -:1021A00021FA02F59D4205D303FA02F5491B04FA10 -:1021B00002F52844151EA2F10102F1DC30BD2DE923 -:1021C000F05F0546002092469B46884606468146BB -:1021D00040241BE0284641464746224600F0F9F9D4 -:1021E00053465A46C01A914110D31146184622460A -:1021F00000F0E0F92D1A67EB01084F462246012056 -:10220000002100F0D7F917EB00094E41201EA4F180 -:102210000104DFDC484631462A464346BDE8F09FCC -:102220002DE9FE4F804681EA0300C00F0C46009066 -:1022300021F0004123F00045B8EB0200A94105D28E -:102240004046214690461C460B46024623F000407D -:10225000104347D0270DC7F30A00C3F30A51029079 -:10226000401A019040286BDAC3F3130040F4801B3E -:102270000098924620B10023D2EB030A63EB0B0BCC -:1022800001985946C0F14002504600F093F90646C5 -:102290000D4650465946019A00F0ABF910EB080084 -:1022A0006141002487EA115284EAE7731A4340D05F -:1022B000009A62B3019A012A4FEA075215DC001B0B -:1022C00061EB02014FF0004202EA0752CDE9004201 -:1022D000001C41F5801132462B4600F0ABF903B0EB -:1022E000BDE8F08F40462146F9E7001B61EB020193 -:1022F000001C41F5801300185B412018A2F500175F -:1023000047EB030140EAD570B6196D4111E06D0845 -:102310004FEA360645EAC0754FEA0752001B61EBEB -:102320000201001C41F5801149084FEA30000019F4 -:10233000514132462B4603B0BDE8F04F00F06BB977 -:102340000098012240000023D0EB020263EBE0730F -:10235000009821464FEAE074B8EB000061EB0401FD -:10236000E9E783F000435BE781F0004158E72DE99E -:10237000FE4F81EA030404F0004421F00041009480 -:102380004FF0000B23F0004350EA01045ED052EA04 -:1023900003045BD0C3F30A54C1F30A552C44A4F2DE -:1023A000F3340194A0FB0254C1F3130141F48011F2 -:1023B000C3F3130343F4801301FB024400FB034EF9 -:1023C000840A970A44EA815447EA8357A4FB0768C2 -:1023D00002958D0A05FB07854FEA932C04FB0C54EC -:1023E0002705029D4FEA065847EA1637B5EB080560 -:1023F0006EEB070C870E920E47EA811742EA8312B2 -:10240000A7FB0201B6EB0B0164EB00042B0D43EAC2 -:102410000C335E1844EB1C50DA465146E7FB0201D0 -:10242000C5F313044FEA0B3343EA14534FEA043263 -:10243000019C43EA0603A4F10C040294009CCDE93C -:1024400000B400F0F7F803B0BDE8F08F00200146BB -:10245000F9E72DE9F04D81EA030404F0004B21F087 -:10246000004514464FF0000A23F0004150EA0502EF -:1024700020D054EA01021DD0C5F30A570246C5F325 -:102480001303C1F31300C1F30A5640F4801543F45B -:102490008013A7EB0608101BD64608F2FD3873EB35 -:1024A000050002D308F1010801E092185B41B8F180 -:1024B000000F03DA00200146BDE8F08D00204FF444 -:1024C0008011064684460EE0171B73EB050705D303 -:1024D000121B63EB050306434CEA010C49084FEA63 -:1024E000300092185B4150EA0107EDD152EA030037 -:1024F00012D082EA040083EA0501084305D0101BCC -:10250000AB4106D20122002306E000224FF0004337 -:1025100002E06FF0010253101AEB06004CEB085179 -:1025200010EB0A0041EB0B01BDE8F04D00F073B871 -:10253000C1F30A52C1F3130140F2FF3341F4801199 -:102540009A4202DA00200146704740F233439A4231 -:10255000A2F2334202DC524200F03BB800F02AB84B -:1025600030B5041E71F1000404DB4FF0004440421A -:1025700064EB0101141E73F1000405DB1C464FF0EF -:102580000043524263EB0403994208BF904230BDBE -:10259000064C074D06E0E06840F0010394E80700B0 -:1025A00098471034AC42F6D3FFF7C6FDD08300083D -:1025B000F0830008202A04DB203A00FA02F1002010 -:1025C00070479140C2F1200320FA03F31943904071 -:1025D0007047202A04DB203A21FA02F000217047DC -:1025E00021FA02F3D040C2F120029140084319467B -:1025F0007047202A06DBCB17203A41FA02F043EA63 -:10260000E07306E041FA02F3D040C2F120029140AB -:1026100008431946704710B5141E73F1000408DA18 -:10262000401C41F1000192185B411A4301D120F096 -:10263000010010BD2DE9F04D92469B4611B1B1FA53 -:1026400081F202E0B0FA80F220329046FFF7B2FF4A -:1026500004460F4640EA0A0041EA0B0153465A4637 -:10266000084313D0114653EA010019D0C8F14002C3 -:102670005046FFF7AEFF05460E46504659464246C5 -:10268000FFF798FF084305D0012004E020463946B3 -:10269000BDE8F08D0020054346EAE0762C43374341 -:1026A0000A986305E40AA0EB08000022FD0A44EA48 -:1026B00047540A3002D500200146E9E70105101908 -:1026C0006941DDE9084500196941BDE8F04DA2E71F -:1026D000FEE77047FEE7FEE770470907090E00288E -:1026E00006DA00F00F0000F1E02080F8141D7047BA -:1026F00000F1E02080F8001470477047704700F048 -:1027000009BE0000134882B0016841F47001016005 -:102710001148016841F001010160416841F0800108 -:102720004160002144F620620091009B5B1C0093F5 -:102730009342FAD34160C1620168084A11400160C6 -:102740004FF41F018160016821F48021016002B013 -:1027500001F066BE88ED00E000100240FFFFF6FECB -:10276000FEE700000FB4054B10B503A9044A029818 -:1027700000F00CF910BC5DF814FB0000613A000891 -:10278000180000200FB4084B10B504A902AA039842 -:1027900000F0FCF8044602A9002000F07AFC204674 -:1027A00010BC5DF814FB00009330000802E008C87C -:1027B000121F08C1002AFAD170477047002001E0BB -:1027C00001C1121F002AFBD17047000070B5074CF1 -:1027D00005460221204601F0FDFD0028F9D02946DA -:1027E0002046BDE8704001F0D4BD00000038004034 -:1027F00010B5044C8021204601F0ECFD0028F9D1F1 -:1028000010BD0000003800402DE9FF5F82B00021BC -:10281000DDE90430020DDDF840B0034318D044F682 -:102820001050A2F2FF3242431514119801281FD014 -:10283000A5EB0B00401C5FEA000A4FF000064E4F6C -:10284000DFF83891B046504615D5CAF1000413E0C0 -:10285000119801244AA3012801D16FEA0B010298C3 -:10286000119AC0E90031C0E9024206B0BDE8F09F0C -:10287000CBF10000DFE704460021404A491842EB53 -:102880000450CDE9001012E0E00707D032463B4685 -:1028900040464946FFF76BFD8046894632463B4637 -:1028A00010461946FFF763FD06460F466410002CDC -:1028B000EAD1DDE90401DDE90023BAF1000F06DA0F -:1028C000FFF755FD42464B46FFF751FD05E0FFF788 -:1028D000C0FD42464B46FFF7BCFD04460E460022B3 -:1028E000284BFFF73DFE03D84FF0FF30014607E0CD -:1028F0000022254B20463146FFF792FCFFF718FED9 -:10290000102409E0002C0ADB0A220023FFF757FC01 -:10291000039B30321A55641E50EA0102F2D1641C46 -:10292000039AC4F111031444119A012A03D001221D -:1029300008430DD10AE0084304D000204FF0110BEA -:10294000119072E7A3EB0B056D1E0DE05B4504DDF6 -:102950004FF0000205F1010504E003DA4FF0000238 -:10296000A5F10105002AECD002981199C0E90231C5 -:10297000C0E9004579E70000000014400000F03F86 -:10298000300000000000F0430000E03F2DE9FF4F61 -:1029900095B09A46884606460025EEE1252877D16F -:1029A00000242746F94A0121039400E0044316F865 -:1029B000013F203B01FA03F01042F7D130782A287A -:1029C00011D06FF02F033078A0F13002092A16D809 -:1029D000039A44F0020402EB820203EB4202104429 -:1029E000761C0390EFE758F8042B0392002A03DAD1 -:1029F000504244F40054039044F00204761C3078B2 -:102A00002E2816D116F8010F44F004042A280DD000 -:102A10006FF02F023078A0F13003092B09D807EBB3 -:102A2000870302EB4303C718761CF3E758F8047BCF -:102A3000761C30786C280FD006DC4C2817D068281C -:102A40000DD06A2814D104E0742810D07A280FD150 -:102A50000DE044F400140AE044F4801401E044F46E -:102A600040147278824202D104F58014761C761CE0 -:102A7000307866280BD013DC582877D009DC002882 -:102A800075D04528F6D04628F4D047281AD193E1CE -:102A900018E0632835D0642879D0652812D18BE1FD -:102AA000702873D008DC6728F1D069286FD06E28B1 -:102AB0000DD06F2806D1ACE073282CD0752874D0C7 -:102AC000782853D05246179990476D1C54E1C4F3AF -:102AD0000250022809D003280DD0D8F8001004288D -:102AE0000DD00D6008F1040846E1D8F80010EA178F -:102AF000C1E90052F6E7D8F800100D80F2E70D703A -:102B0000F0E718F8041B8DF8001000208DF8010084 -:102B1000EB46012003E058F804BB4FF0FF3061079B -:102B20004FF0000102D40DE009F101018946B942DC -:102B30000FDA8145F8DB1BF809100029F4D108E011 -:102B400009F1010189468142FADB1BF809100029CD -:102B5000F6D103985346A0EB090721463846179A49 -:102B600000F080FA284400EB090507E044E008E1A2 -:102B70000DE01BF8010B524617999047B9F1010976 -:102B8000F7D2534621463846179AF2E039E00A2137 -:102B9000C4F302524FF0000B0091022A06D058F8FD -:102BA000040BC117032A09D00AE023E008F107004B -:102BB00020F00702F2E80201904605E000B2C117DA -:102BC000042A01D140B2C117002906DA0A460021C1 -:102BD000404261EB02012D2202E0220504D52B22A6 -:102BE0008DF80420012203E0E20701D02022F7E75C -:102BF000914657E00A2100E010214FF0000B0091B0 -:102C00000BE010214FF0000B44F004040827009162 -:102C100003E008204FF0000B0090C4F30252022A98 -:102C200005D058F8040B0021032A08D008E008F169 -:102C3000070020F00702F2E80201904603E080B2AC -:102C4000042A00D1C0B24FF0000922072AD53278F9 -:102C5000702A07D0DDF800C08CF0100C5CEA0B0C79 -:102C600005D00EE040228DF80420012208E050EA51 -:102C7000010306D030238DF804308DF805200222A0 -:102C80009146009B83F0080353EA0B030AD150EAF4 -:102C9000010201D1620705D530228DF804204FF0E2 -:102CA00001097F1E3278582A04D039A20C920CAA4E -:102CB00002920BE03BA2F9E75B46009AFFF77FFA2E -:102CC0000C9B9B5C029A521E0292137050EA010206 -:102CD000F2D1029804A9081A00F1200B600702D56E -:102CE00024F4803400E001275F4502DDA7EB0B00F0 -:102CF00000E0002000EB0B01009003984944401ACB -:102D00000390E00306D453462146179A039800F037 -:102D1000A9F90544002706E001A85246C05D1799AD -:102D200090476D1C7F1C4F45F6DBE0030CD55346E6 -:102D30002146179A039800F095F9054404E03020E5 -:102D40005246179990476D1C0099481E0090002923 -:102D5000F5DC08E00298029952460078491C02917D -:102D6000179990476D1CBBF10001ABF1010BF1DC31 -:102D70005BE100F065F90544761C307800287FF4AB -:102D80000DAE19B02846BDE8F08F000009280100FB -:102D900030313233343536373839616263646566D1 -:102DA0000000000030313233343536373839414293 -:102DB0004344454600000000600700D4062708F1A0 -:102DC000070020F00700F0E80223804603F0004CE3 -:102DD0005FEA0C0001D097A009E0200501D596A07C -:102DE00005E0E00701D095A001E0AFF24C001390A0 -:102DF000307823F0004365280CD006DC452809D044 -:102E000046281DD047287FD13BE0662818D0672888 -:102E10007AD136E00021112F01DB112000E0781C6F -:102E2000CDE9000104A90CA8FFF7EEFCDDE90D01D6 -:102E30000C9A4FF0000B07F10109109200914EE03F -:102E40004FF000400097CDE9011004A90CA8FFF74E -:102E5000DBFCDDE90D020C9B0F994FF0000B914656 -:102E60001093009211B9791C00EB0109B7EB09002E -:102E700003D4C0F1FF3B07F10109A9EB0700019062 -:102E800042E0012F00DA01270021112F01DD11207E -:102E900000E03846CDE9000104A90CA8FFF7B4FC16 -:102EA000DDE90D010C9A00914FF0000BB94610922C -:102EB00021070FD4009A4A4503DA914601E0A9F1AF -:102EC0000109B9F1010F05DD109AA9F10101515C69 -:102ED0003029F4D0B84202DA10F1040F03DA0121EC -:102EE000CDE9011010E0002803DC8344A9EB0001C8 -:102EF00002E0411C494500DD8946A0EB0B00401C67 -:102F000001904FF000400290200705D401984845F9 -:102F100002DB4FF0FF30019000208DF84B0002984B -:102F20000DF14B07B0F1004F25D002200C902B2063 -:102F30000D90029800280CDA404202902D200D904E -:102F400007E00A210298FFF724F93031029007F8D0 -:102F5000011D0C99481E0C900029F2DC02980028F3 -:102F6000EFD1791E0D980870307800F0200040F005 -:102F7000450007F8020D11A8C01BC01D0290139850 -:102F8000007800B1012000EB0901019801EBE0712C -:102F9000029801440398401A401E0390E00306D4AF -:102FA00053462146179A039800F05CF8054413989D -:102FB000007818B15246179990476D1CE00323D54D -:102FC00053462146179A039800F04CF805441BE03D -:102FD000BBF1000F07DB0098584504DD10981799E6 -:102FE00010F80B0001E017993020524690470198E5 -:102FF0000BF1010B401E05F10105019004D12E20BB -:103000005246179990476D1CB9F10001A9F10109C9 -:10301000DEDC05E017F8010B5246179990476D1C4E -:103020000299481E02900029F4DC53462146179A63 -:1030300003989EE62D0000002B00000020000000F9 -:103040002DE9F041044600251E461746880404D4A5 -:1030500005E039462020B0476D1C641EF9D528468E -:10306000BDE8F0812DE9F041044600251E4690465A -:10307000C80301D5302700E02027880404D505E0E7 -:1030800041463846B0476D1C641EF9D52846BDE858 -:10309000F0810A68531C0B6010707047816841F022 -:1030A0000801816081680907FCD4816841F004014E -:1030B000816081684907FCD470471205A2F580122F -:1030C00001290BD0022908D1816B21F440118163C1 -:1030D00002F44011826B114381637047C16A21F48D -:1030E0007001C16202F47001C26A1143C16270478B -:1030F00010B540F2096001F01DF9012001F068F8F7 -:103100001D4C01221102204600F0C1F800220221CC -:10311000204600F0BCF84FF4E0420221204600F0C7 -:103120005AF8002000F09AF80021204600F026F816 -:10313000022211462046FFF7C0FF0723102200217C -:10314000204600F063F8072311220121204600F0F9 -:103150005DF801220221204600F022F800F0C0F8BC -:10316000204600F015F8012000F0CAF82046BDE81E -:103170001040FFF793BF0000002401400029816840 -:1031800002D041F4006101E021F4006181607047E8 -:103190008168C90703D1816841F0010181607047EE -:1031A000002A4FEAC1720AD01AB1826842F4801232 -:1031B000826089070ED5816841F4004109E01AB1A7 -:1031C000826822F480128260890703D5816821F425 -:1031D000004181607047012909D0022906D1816828 -:1031E00021F4E0418160816811438160704781680A -:1031F00021F46021F6E702688A43026070470246C4 -:10320000002012680A4200D00120704730B5846B5C -:10321000C4F30155846B491BC91C01EB81011F25B7 -:103220008D40AC4302FA01F12143816307240A2A4D -:1032300008D2016902EB42029440A14393400B4340 -:10324000036130BD122AFCD2C1680A3A02EB420285 -:103250009440A14393400B43C36030BD04490A68C6 -:1032600022F470220A600A6802430A607047000074 -:1032700004240140CA0703D0826842F480028260BD -:10328000890703D5816841F4001181607047002AE5 -:103290004FEAC15211D0002A03DA426842F4807228 -:1032A00042604A0503D5426842F480624260890761 -:1032B00015D5816841F0020110E0002A03DA426866 -:1032C00022F4807242604A0503D5426822F480628B -:1032D0004260890703D5816821F00201816070474F -:1032E0000248016841F40001016070470824014070 -:1032F00002494A6802434A6070470000002004E027 -:1033000003490A6810440A688242FCD370470000EF -:103310001000002002480168491C0160704700004D -:103320001000002070B5054D29680C1802E000203F -:1033300000F042FF2868A042F9D370BD10000020C1 -:1033400000224FF48051014800F0A4BB000C014062 -:1033500001221103014800F09DBB0000000C014058 -:1033600000224FF48041014800F094BB000C014062 -:1033700001229103014800F08DBB0000000C0140C8 -:103380002DE9F04700258A468146FA264FF01008BD -:103390002946284600F0ECFA242000F041FBFFF714 -:1033A000CFFF00275FF0000419F80500FFF70EFAC1 -:1033B000641C6D1CB442F7D37F1C4745F2D3FFF762 -:1033C00017FAFFF7C5FF0021084600F0D1FA2620C2 -:1033D00000F026FB0025FFF7B3FF00275FF0000495 -:1033E0001AF80500C043C0B2FFF7F0F9641C6D1C69 -:1033F000B442F5D37F1C4745F0D3FFF7F9F9FFF747 -:10340000A7FFBDE8F04700F0D0BA10B50446102081 -:1034100000F006FB2046BDE8104000F0E5BA10B50C -:1034200000F096FA3220FFF76BFF00F099FA322095 -:10343000FFF766FF00F0C7FA002858D1122000F00D -:10344000EFFA00F0C0FA002851D1012000F0E8FAAC -:10345000272000F0C9FA012000F0C6FA012000F090 -:10346000C3FA112000F0DCFA012000F0BDFA44207C -:1034700000F0D6FA002000F0B7FA0F2000F0B4FAFE -:10348000452000F0CDFA272000F0AEFA012000F030 -:10349000ABFA002000F0A8FA002000F0A5FA3C20CA -:1034A00000F0BEFA052000F09FFA212000F0B8FAE3 -:1034B000002000F099FA802000F096FA182000F021 -:1034C000AFFA802000F090FA4E2000F0A9FA002018 -:1034D00000F08AFA4F2000F0A3FA272000F084FAC7 -:1034E000012000F081FA00F06EFA002800D00120DF -:1034F00010BD000010B588B040F2026000F01AFF65 -:1035000040F2036000F016FF4FF4C06000F012FFBD -:10351000234C4FF4807303221021204600F022FB3D -:103520004FF4004303224821204600F01BFB1D4CB2 -:103530004FF4804303221021204600F013FB4FF488 -:10354000204303221821204600F00CFBA314032281 -:103550001021204600F006FB40F20E7000F0EAFE5B -:10356000114C204600F018FF684600F04FFF4FF462 -:10357000404001904FF4827000900320002105909C -:103580006015CDE902101820049106906946204686 -:1035900000F025FF204600F0F7FE08B010BD000047 -:1035A00000080140000C01400038004010B54FF405 -:1035B0000041034800F029FB002800D0012010BD85 -:1035C0000008014030B500210A4AC3B20DE00020D6 -:1035D00006E000BF01FB04041568401C80B22B55B7 -:1035E000148A8442F6D8491C89B2508A8842EED89F -:1035F00030BD00005C1F00202DE9F84F1F469146AA -:1036000082468846151A01D5A0EB09057C1A002CC4 -:1036100000DDCC1B4FF0FF32CA4501D2012000E093 -:1036200010460090B84500D2012293462E1941461B -:1036300050460A9A00F018F8B4EB460F07DCCA456A -:1036400010D0009926440AEB01001FFA80FAB5EB6E -:10365000460FECDBB84505D008EB0B002E441FFAF3 -:1036600080F8E4E7BDE8F88F491E401E89B280B2B9 -:1036700000F052B82DE9F8418046DDE907501E46BA -:1036800017460C4648B90CE023463A4619464046D0 -:103690000095FFF7B1FF641CA4B2B442F4D3BDE8B7 -:1036A000F8810B4640460095FFF7A6FF4246334699 -:1036B000214610460095FFF79FFF3A4623463146C4 -:1036C00010460095FFF798FF3346424619463846A4 -:1036D0000095FFF791FFE2E730B50B4C039D2060AA -:1036E00021816281A5814D074FEAD10000D0401CA5 -:1036F00020826282E38123B1B42B02D0A180E280D8 -:1037000030BDA280E18030BD5C1F0020014908600F -:10371000704700005C1F002070B5184C2346E689F6 -:103720001B89D6B125465A2E6D891AD0B42E1DD0CC -:10373000B6F5877F10D103460846218A25684143A4 -:1037400001EBD3018020002A6C5C03F0070220FA11 -:1037500002F010D02043685470BD591A491E8BB234 -:10376000EBE7181A401E83B2681A01E00B46281ACC -:10377000401E80B2E1E784436C5470BD5C1F0020A2 -:103780002DE9FC4F401C1FFA80F9491C1C468DB2E4 -:10379000A9EB0400AB46CDF80490FA285FDC082CB6 -:1037A0000ED0600700D0012000EBD400610810FBB0 -:1037B00001F080B28246203A90B2009000204BE0A7 -:1037C0000620F7E7082C12D00C2C17D0102C1AD09A -:1037D000182C44D10098244900EBC00001EB800173 -:1037E000002711F80860F00712D00B9A13E0009838 -:1037F0001E4900EB400001EB4001F1E700981C4935 -:1038000000EB4000EAE71B49009801EB0011E7E7F5 -:103810000B9830B3002229464846FFF725FF6D1C60 -:103820007F1C7608BFB2ADB2082FDCD309F10100CE -:103830001FFA80F9082C0BD00198A9EB0000B0EB1F -:10384000540F05D10BF10800DDF804901FFA80FB3E -:1038500008F101005D4680B280465045B2D3BDE814 -:10386000FC8F0122D7E700004C720008C0650008F9 -:10387000E86700085C6C00082DE9FF4F401C82B02F -:103880004FF0000984B2491CCDE9009492468DB2F4 -:103890004A46AB46580700D0012000EBD300059004 -:1038A00010462FE0002026E00F98002610F809703F -:1038B00009F101001FFA80F9F8072BD0109838B3EE -:1038C000002229462046FFF7CFFE6D1C761C7F089C -:1038D000B6B2ADB2082EEFD3641C0198A4B2211A7F -:1038E000514504D10BF10800019C1FFA80FB08F13F -:1038F00001005D4680B280465045D5D30098401CFB -:1039000080B2009005998842CCD306B0BDE8F08F14 -:103910000122D6E7109AD4E72DE9F8411E46154654 -:1039200088460446079F0BE03346414620460097F1 -:10393000FFF726FF6D1C082E07D004EB560084B25B -:103940002A78002AF0D1BDE8F881A41DA4B2F7E7D7 -:1039500000224FF48071014800F09CB8000801403B -:1039600001221102014800F095B800000008014052 -:1039700070B5C0F3C705F92901D92E2403E0A1F2DF -:103980002711484284B24E2000F04AF8284600F041 -:103990002BF84F2000F044F8E0B200F025F8C4F313 -:1039A0000020BDE8704000F01FB810B5222000F0E4 -:1039B00037F8F72000F018F8202000F031F8BDE8C3 -:1039C0001040AFF3008070B5002444F6206506E097 -:1039D000641CAC424FF0010005D8FFF791FCFFF7E3 -:1039E000E5FD0028F4D170BD10B50446FFF7A8FC32 -:1039F00021460A4C204600F0CCFC0221204600F073 -:103A0000E9FC0028F9D08021204600F0E3FC0028E2 -:103A1000F9D1BDE81040FFF79BBC00000038004022 -:103A200010B50446FFF79CFCFFF78AFC21460B4CBF -:103A3000204600F0AEFC0221204600F0CBFC00281E -:103A4000F9D08021204600F0C5FC0028F9D1FFF70D -:103A50007FFCBDE81040FFF78BBC00000038004041 -:103A600070B5074D0446C1B2284600F0BDFD0721E0 -:103A7000284600F0EEFD0028F9D0204670BD000079 -:103A80000038014001480068704700001000002025 -:103A9000416170470AB101617047416170470000A0 -:103AA00010B54FF4C06000F045FC40F2026000F039 -:103AB00041FC40F2036000F03DFC01210A4800F0A7 -:103AC000AFF8012303222821084800F04BF8084CE6 -:103AD000042303221021204600F044F82046BDE8CC -:103AE00010400421FFF7D4BF00023000000801405D -:103AF000000C014010B5194C2115031B4A00A042CF -:103B000021D009DC164BC01817D0884218D090423B -:103B100022D14FF4417408E08B4217D0934218D061 -:103B2000B3F5406F18D14FF44274204600F01EFCEC -:103B30002046BDE8104000F00BBC40F20234F4E730 -:103B400040F20334F1E740F20534EEE740F2063488 -:103B5000EBE740F20734E8E710BD00000014014035 -:103B600000F8FEBF2DE9F04301F00F04CD0602D5A9 -:103B7000042A19D0144300254FF00F095FF0010209 -:103B800002FA05F61E401AD007684FEA850C09FABA -:103B90000CF827EA080704FA0CF848EA070828296D -:103BA00008D0482908D008E0C26B44F003041A4347 -:103BB000C263E0E7466100E00661C0F800806D1C6A -:103BC000ADB2082DDCD3082502FA05F61E4016D04A -:103BD00047684FEA8508A8F1200809FA08FC27EA97 -:103BE0000C0704FA08FC4CEA070C282902D04829E3 -:103BF00002D002E0466100E00661C0F804C06D1C1E -:103C0000ADB2102DE0D3BDE8F0838068084000D04D -:103C100001207047C068084000D0012070470000B4 -:103C2000F0B5144C002801DAE36900E06368420D46 -:103C3000120185B2C0F301579540C0F30346032F2C -:103C400005D0C2020AD50322B240934307E023F015 -:103C5000E062636823F0E063636002E0AB4343F03B -:103C6000E06201B12A43002801DAE261F0BD62603E -:103C7000F0BD0000000001400168054A1140B1F1AB -:103C8000005F04D14168006880F3088808477047E6 -:103C90000000FE2F88B04FF40051880300F082FA34 -:103CA00000F0C0FA0720FFF723FB00F017FCFFF736 -:103CB000F7FEFFF71DFA00F039FC0127FFF7E2FEDF -:103CC00006463546B2A0FEF74DFDB8A0FEF74AFD08 -:103CD000BDA0FEF747FDC4A0FEF744FDC84801683B -:103CE000C8A0FEF73FFD012000F0A4FA0146C9A0DC -:103CF000FEF738FD022000F09DFA0146C9A0FEF74C -:103D000031FD032000F096FA0146CAA0FEF72AFD15 -:103D1000CCA0FEF727FDFFF7EDFBFFF780FB4FF090 -:103D2000FF08B423FA227A21CC48CDF80080FFF7AF -:103D3000D3FCB423FA227A21C948CDF80080FFF7DA -:103D4000CBFCC648FFF7E2FCFF20FFF73BFC00245A -:103D5000C448CDE900047A23FA2221462046FFF721 -:103D60008BFDBF48FFF7D2FCFF20FFF72BFCBE49BD -:103D7000CDE9001800217A23FA220846FFF77CFDDE -:103D8000B749B648FFF7FCFA4FF4FA50FFF7B8FA14 -:103D9000B248FFF7BBFCFF20FFF714FC1823B3A2C7 -:103DA00000210A200094FFF7B7FD1023B4A21D21C3 -:103DB0000A200094FFF7B0FD1023B8A232210A2098 -:103DC0000094FFF7A9FDA648FFF7A0FCFF20FFF72E -:103DD000F9FBB9A102A8FEF7D5FC182302AA4721D6 -:103DE0000A200094FFF798FD4FF00108CDE9004844 -:103DF0007423F02267210A20FFF73CFC984997487A -:103E0000FFF7BEFA0120FFF700FBDFF8BCA2DFF8E6 -:103E1000BCB2DFF8BC9200BFFFF734FEA8420AD95B -:103E2000FFF730FE00F5FA75012F4FF004015846F8 -:103E300015D0FFF72DFEFFF725FEB0420ED9FFF794 -:103E400021FE00F10A0601214846FFF7DEFE0128A7 -:103E50009AF8001050466DD001290CD094E0FFF77D -:103E6000D9FE012801D0012200E000220421584699 -:103E7000FFF710FEDFE78AF80040012F01D001278D -:103E800000E0002793A0FEF76DFC02219748FFF7A2 -:103E9000F1F902E00120FFF745FA02219348FFF70C -:103EA000AEF90028F6D002219048FFF7A4F98F4818 -:103EB0003C30006840F6E4414843000B00EE100A35 -:103EC000B8EE400ADFED8A0A30EEC00ADFED890A5B -:103ED000864880EE201AB3EE090A403031EE000A1F -:103EE0008AED020A0068484300EE900AF8EE600A84 -:103EF0009FED811A10EE100A60EE810ACAED030AE6 -:103F0000FEF734F941EC100B7CA053EC102BFEF7BC -:103F100029FCDAF80C00FEF729F941EC100B83A01C -:103F200053EC102BFEF71EFC39A0FEF71BFCCAF861 -:103F3000044029E009B980F800804168491CCAF8AA -:103F40000410322920D38448006878B183A0FEF79A -:103F500009FCBFF34F8F8048001D0168864A01F4B9 -:103F6000E06111430160BFF34F8FFEE783A0FEF7CE -:103F7000F9FB00F0D3FA5846FFF7BCFD4846FFF7BF -:103F8000B9FD8748FFF778FE002000F015F943E7F8 -:103F90000D0A57654163742053747564696F20433B -:103FA0006F726520426F6172640D0A00776561630C -:103FB0007473747564696F2E74616F62616F2E63C0 -:103FC0006F6D0D0A0000000077656163747374758E -:103FD00064696F2E616C69657870726573732E63A6 -:103FE0006F6D0D0A00000000777777772E77656197 -:103FF00063742D74632E636E0D0A0D0A00000000B9 -:104000001400002053797374656D436C6B3A25641A -:104010000D0A0000434B5F4148422069732025642C -:104020000D0A0000434B5F41504231206973202547 -:10403000640D0A00434B5F415042322069732025D2 -:10404000640D0A00457061706572204D6F64756C77 -:104050006520546573740D0A000000001C000020E8 -:10406000BC0F00208046000820560008322E313355 -:1040700020457061706572204D6F64756C6500003D -:1040800044657369676E65642042792057654163B2 -:10409000742053747564696F000000007769746858 -:1040A00020323530207820313232207265736F6CC7 -:1040B0007574696F6E0000003E3E2048656C6C6F41 -:1040C00020576F726C642E0000000020000C01402D -:1040D0000008014048656C6C6F2C57654163742083 -:1040E00053747564696F0D0A0000000000240140DC -:1040F00000C0B2449A998940000080395468652014 -:1041000074656D7065726174757265206461746147 -:104110002069732025322E316620646567726565DB -:10412000732043656C736975730D0A0054686520CC -:104130007265666572656E636520766F6C74616723 -:104140006520646174612069732025352E33666DA6 -:1041500056200D0A0000000008ED00E0456E746571 -:10416000722049415020426F6F746C6F61646572B8 -:10417000202E2E2E0D0A00000400FA05456E7465EF -:10418000722073797374656D2049535020426F6FAC -:10419000746C6F61646572202E2E2E0D0A00000073 -:1041A00000F0FF1F024A11400143024801607047BE -:1041B00080FFFF1F08ED00E004490A6822F00402B6 -:1041C0000A6008B120BF704730BF704710ED00E0B3 -:1041D000124A10B55168124B1940D36A0C2823F0CB -:1041E000005317D2DFE800F0060606061609160986 -:1041F0001010101041EA80310CE020F0040041EA78 -:10420000803040F0805105E020F00C0041EA803120 -:1042100043F000535160D36210BD00000010024013 -:10422000FF3FFFEF0248416A41F0807141627047F1 -:104230000010024070B537A588B02ECD8DE82E0055 -:1042400035A20446D2E90012CDE9041232A20020C0 -:10425000D2E90012CDE90612324A5168324BC1F35D -:10426000810119B1012901D0022901D019462BE0A1 -:10427000516801F480352D49B5F5803F0AD1D56AE2 -:1042800015F0804F00D02A4B556805F40035B5F580 -:10429000003F00D10B4651685568C1F383412D01A1 -:1042A00001D541F0100155686D0001D541F02001A4 -:1042B0000F2901D2891C06E0A1F10F052F2D01D88D -:1042C000491C00E03F2159435368C3F303131DF811 -:1042D000035021FA05F3556804AEC5F30225526870 -:1042E000755D23FA05F5C2F3C22206AEB25C23FA6D -:1042F00002F244B1012C08D0022C08D0032C00D1CA -:10430000104608B070BD0846FBE71846F9E7284696 -:10431000F7E70000000000000000000001020304B5 -:10432000060708090010024000127A0000093D004B -:10433000006CDC02054901EB90110A6800F01F03D4 -:104340000120984002430A607047000000100240BC -:10435000054901EB90110A6800F01F030120984005 -:1043600082430A607047000000100240054901EBDB -:1043700090110A6800F01F030120984002430A6070 -:104380007047000000100240016841F040010160E8 -:104390007047C160704700000D4910B5401808D043 -:1043A000B0F5806F08D0B0F5784F0FD14FF443745B -:1043B00004E040F20E4401E040F20F442046FFF7D3 -:1043C000D5FF2046BDE81040FFF7C2BF10BD00007A -:1043D00000C8FFBF8068084000D001207047026815 -:1043E00002F441530A681A434B6813438A681A431C -:1043F000CB6813430A691A434B698969134319430C -:104400000160C16921F40061C16170470021016050 -:1044100041608160C160416181610161704700005C -:104420002A480021026842F4803202604FF6FF738E -:104430000268491C12F4003F01D19942F8D1016889 -:10444000890300D4FEE7C16941F08051C161204970 -:104450000A6842F440420A60426842604268426030 -:10446000426842F480624260426822F44032426014 -:10447000426842F4403242604268164B1A40426041 -:104480004268154B1A434260026842F08072026033 -:1044900002689201FCD50A6842F480320A604A68D8 -:1044A000D203FCD50A6842F400320A604A689203DB -:1044B000FCD5416821F003014160416841F00201EF -:1044C000416041680907FCD57047000000100240B8 -:1044D00000700040FFFFC3B70000340870B50E48FD -:1044E0004FF47A710068B0FBF1F0401EB0F1807FAC -:1044F00011D24FF0E024606165170F212846FEF7C6 -:10450000ECF80020A061072020612846BDE870403B -:104510000521FEF7E2B8FEE7140000204FF0E0208E -:1045200000210161416181617047000010B540F2D6 -:104530000260FFF7FFFE40F20E60FFF7FBFE124C39 -:104540004FF40073032218212046FFF70BFB2315BD -:10455000032204212046FFF705FB0C4C204600F007 -:1045600047F84FF4E131204600F012F804212046CC -:1045700000F07AF80821204600F07CF82046BDE8DB -:10458000104000F061B80000000801400038014010 -:1045900070B5134B04460D460020E11A1A159C42D3 -:1045A0001BD005DC0F49611817D0914208D114E0E7 -:1045B000914212D0B1F56C4F02D10320FFF73AFEC1 -:1045C00000EB5500B0FBF5F14FF6F07201EA020086 -:1045D00001F00F010843A06070BD0220EEE700006B -:1045E000004C004000BCFFBFC1F3080141607047B0 -:1045F000134B10B5C21A1915984213D007DC114A93 -:1046000080180CD088421AD140F212440FE08A423E -:104610000BD0B2F56C4F12D140F20E3407E040F2ED -:10462000114404E040F2134401E040F214442046F7 -:10463000FFF79CFE2046BDE81040FFF789BE10BD85 -:10464000004C004000BCFFBFC16841F40051C16094 -:10465000704700EB9110006801F01F0201219140AA -:10466000084000D001207047C26822F004020A43CB -:10467000C2607047C26822F008020A43C2607047F5 -:10468000000000000000000000000000000000002A -:10469000000000000000000000000000000000001A -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000000FA -:1046C00000000000000000000000000000000000EA -:1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000000000000A9 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:104790000000000000000000000000000000000019 -:1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:104840000000000000000000000000000000000068 -:104850000000000000000000000000000000000058 -:104860000000000000000000000000000000000048 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 -:1048C00000000000000000000000000000000000E8 -:1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 -:104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:104950000000000000000000000000000000000057 -:104960000000000000000000000000000000000047 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000000000000000000000000017 -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000000000000D7 -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A50000000000000000000000000000000000056 -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B60000000000000000000000000000000000045 -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B90000000000000000000000000000000000015 -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 -:104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000000000000000D5 -:104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C20000000000000000000808080808080000084 -:104C3000000000C0E0E0E0E0C0C0000000000000B4 -:104C40000000000000000000000000000000000064 -:104C50000000000000000000000000000000000054 -:104C6000000000000000000000007EFEFEFEFEFED0 -:104C7000FE00000080FEFEFEFEFEFEFEFC000000C8 -:104C800000FCFEFEFEFEFE3E0000000000000000F4 -:104C90008080808080800000000000000000000014 -:104CA000000080F8FEFEFEFEFEFEFEFEF08000002C -:104CB0000000000000000000000000808080808074 -:104CC00080000000000000F8F8F8F8F8F8F800009C -:104CD0000000000000000000000000000000E0F004 -:104CE000F8FCFCFEFE7E7E3E3E7E7EFEFCFC7830C6 -:104CF00000000000F8F8F8F8F8F8F80000000000EC -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000008080808093 -:104D20008000FFFFFFFFFFFFFF000000030F1F1FBA -:104D30001F1F0F0F00000000000000000080808097 -:104D40008080808000000000000000000000000063 -:104D50000000000000000000000000000000000053 -:104D600000000000003FFFFFFFFFFFFC00C0FFFF4F -:104D7000FFFF7FFFFFFFFFFF8000FEFFFFFFFFFF42 -:104D80000F000000F0F8FEFEFFFF7F1F0F0F1FFF58 -:104D9000FFFFFEFCF8C000000000C0FCFFFFFFFFAB -:104DA0007F071FFFFFFFFFFFF88000000000C0F03B -:104DB000FCFEFFFFFF7F1F1F1F1F3F3F3F0E041F13 -:104DC0001FFFFFFFFFFFFFFF1F1F1F1F000000004F -:104DD00000000000000000001F7FFFFFFFFFFFFC3E -:104DE000F8F8F0F0E0E0C1C08000001F1F1FFFFFD7 -:104DF000FFFFFFFFFF1F1F1F0F000000FFFFFFFF50 -:104E0000FFFF00000000FFFFFFFFFFFFFF000000AB -:104E1000C0F8FCFEFFFFFF7F1F1F1F3FFFFFFFFFCC -:104E2000FFFFFF00000000FFFFFFFFFFFFFF00008C -:104E300000C0F8FCFEFFFFFF3F1F1F1F3FFFFFFFEB -:104E4000FEFCF8E000000000000000000000000090 -:104E50000000000000000000000000000000000052 -:104E60000FFFFFFFFFFFFCFFFFFFFF1F0001FFFF22 -:104E7000FFFFFFFEFFFFFFFFFF070000001EFFFF19 -:104E8000FFFFFFFFDF1F1F1F1F1F1F9F9F1F1F1FF2 -:104E90000000E0FEFFFFFFFFFFFFFCFCFCFDFFFF4B -:104EA000FFFFFFFFFCC00000FFFFFFFFFFFFFF80D1 -:104EB0000000000000800000000000FFFFFFFFFF77 -:104EC000FFFF0000000000000000000000000000E4 -:104ED000000080C0C0800101030303070FFFFFFF34 -:104EE000FFFFFFFF70000000FFFFFFFFFFFFFF005D -:104EF000000000000000FFFFFFFFFFFF0000008038 -:104F0000FFFFFFFFFFFFFF000000FFFFFFFFFFFFAE -:104F1000FF8000000000FFFFFFFFFFFFFF00000019 -:104F200000FFFFFFFFFFFFFF000000FFFFFFFFFF8D -:104F3000FFFF8000000000FFFFFFFFFFFFFF0000FA -:104F40000000000000000000000000000000000061 -:104F50000000000000000000000000073F3F3F3F4E -:104F60003F3F3F3F0F000000003F3F3F3F3F3F3F7D -:104F70003F3F01000000000001070F1F1F3F3F3FA0 -:104F80003E3E3E3E3F3F1F1F0E00303E3F3F3F3FF5 -:104F90003F1F01000000000000033F3F3F3F3F3F35 -:104FA0003C000003070F1F3F3F3F3F3E3E3F3F3F58 -:104FB0001F1E080000030F1F3F3F3F3F3F3E3F3F84 -:104FC0001C18000000000000000000070F1F1F3F1A -:104FD0003F3F3F3E3E3F3F3F3F1F1F0F0703000045 -:104FE0000000070F1F3F3F3F3F3E3F3F3F1C000079 -:104FF0000F1F3F3F3F3F3F3E3F1F1F3F3F3F3F3F52 -:105000003F00000000070F1F3F3F3F3F3F3E3F1F55 -:105010001F3F3F3F3F3F3F000000003F3F3F3F3FBC -:105020003F3F0000000003070F1F3F3F3F3F3E3E52 -:105030003F3F3F1F1F0F0300000000000000000063 -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 -:105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E00000000000000000000000000000000000C0 -:1050F00000000000000000000000000000000000B0 -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:10515000000000000000000000000000000000004F -:10516000000000000000000000000000000000003F -:10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000000BF -:1051F00000000000000000000000000000000000AF -:10520000000000000000000000000000000000009E -:10521000000000000000000000000000000000008E -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E -:10525000000000000000000000000000000000004E -:10526000000000000000000000000000000000003E -:10527000000000000000000000000000000000002E -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000000BE -:1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C -:10546000000000000000000000000000000000003C -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:10575000C0C0C0C0C0000080C0C0C0C08000000089 -:105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E000000000C0C0C0C0C0C00000000000000039 -:1057F000000000000000000000C0C0C0C0C00000E9 -:105800000000000000000000000000000000000098 -:10581000000000000000000000000000000C1E1F3F -:105820001F0F0F9FFFFFFEFEF800000000000000AA -:1058300038787C7E3EFFFFFFFFFF00040E1E1F8FA7 -:105840008F8FFFFFFFFEFC000000737F3F1F0F00E4 -:1058500000317B7F3F1F070000000000000000FFB9 -:10586000FFFFFFFF8787878787070000F0F0F0F0D2 -:10587000F0F070F8F8F0F0E0800030F0F0F07878B8 -:10588000F8F0F0F0E0800000F0F0F0F0F0F070F8E8 -:10589000F8F0F0E0800080E0F0F0F0F878F0F0F060 -:1058A000E0C00000F0F0F0F0F0F0F0F0F0100000D8 -:1058B0000000000000FFFFFFFFFFFFFEC0E0FFFF52 -:1058C000FFFFFFFFFF000080C0E0F0F0F078F8F08D -:1058D000F0F0E0C00000C0E0F0F0F8F870FFFFFF6B -:1058E000FFFFFF0000F0F0F0F0F000F0F0F0F0F05B -:1058F000F00000FFFFFFFFFF000080C0E0F0F0F8C5 -:1059000078F8F0F0F0E080000000000000000000F7 -:105910000000000000000080C0F0F8FCFEFFBF9F08 -:1059200087838000C0C0C0C0C0800000000000FFAE -:10593000FFFFFFFF0080C0C0C0C78787CFFFFFFF0A -:10594000FEF8000000000000000000000000000061 -:10595000000000000000000000FFFFFFFFFF87873E -:10596000878787800000FFFFFFFFFF8080E1FFFF48 -:10597000FFFF7F40F8FCFCFEFE9ECFFFFFFFFFFF16 -:105980000000FFFFFFFFFF8080E1FFFFFFFF7F00C0 -:10599000FFFFFFFFFFDC9C9D9FDFDF9F1F00FFFFDE -:1059A000FFFFFF0301000000000000000000FFFFF8 -:1059B000FFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFCDA -:1059C000007FFFFFFFFFE18080FFFFFFFFFF1C085C -:1059D000FFFFFFFFFF8080FFFFFFFFFFFF0000FFD3 -:1059E000FFFFFFFF80FFFFFFFFFFFF0000FFFFFF44 -:1059F000FFFF80007FFFFFFFFFDC9C9C9FDFDF9F9E -:105A00001F00000000000000000000000000000077 -:105A10000007070707070707070707070700030728 -:105A2000070707030000000000070707070700013A -:105A3000030307070707070707030100000000002B -:105A40000000000000000000000000000000000056 -:105A500000000007070707070707070707070000F9 -:105A6000FFFFFFFFFF07070707070301000003070A -:105A7000070707070703070707070000FFFFFFFFE8 -:105A8000FF070707070703010000000103070707D7 -:105A900007070707030300000707070707000000C1 -:105AA00000000000000000000707070707000101D1 -:105AB00001010100000707070707000001030707AE -:105AC000070707070703030000000103070707078D -:105AD0000707070707070700000307070707070768 -:105AE0000707070707000003070707070707000165 -:105AF000030707070707070703030000000000006C -:105B00000000000000000000000000000000000095 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 -:105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000000000000000000A5 -:105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 -:105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 -:105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000000000000C2 -:105EE00000000000000000000000000000000000B2 -:105EF00000000000000000000000000000000000A2 -:105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F70000000000000000000000000000000000021 -:105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000000008F -:106110000000000070F0F8FC7CFEFEFEFEFE0018A1 -:106120003C3C3E3E1E1EFEFEFEFCF800183C3E3E81 -:106130001E1E3EFEFEFCFCF000000000000000E021 -:10614000E0E0E0E0C080E0E0E0E0E000000000002F -:1061500000183C3C3E3E1E1EFEFEFEFCF80000FE0B -:10616000FEFEFEFE9E9E9E9E1E1E0000E0F8FCFEB1 -:10617000FE7E1E3EFEFEFCF8E00000000000000077 -:1061800000FEFEFEFEFEFE0E0E0E0E0E0E000000C7 -:10619000000000000000000000FEFEFEFEFE000009 -:1061A0000000000000FEFEFEFEFE000000FEFEFEFF -:1061B000FEFEFEFCE000FEFEFEFEFE0000FEFEFE19 -:1061C000FEFEC0E0F8FCFEFE3E1E060000000000E1 -:1061D00000000000000000000000000000000000BF -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:10620000000000000000000000000000000000008E -:10621000000000FFFFFFFFFF000080C0E0F0FCFE79 -:106220007F3F1F0F03000080E0F0F8FCFF7F3F0F6F -:1062300007010000000000000000C1E7FFFFFFFFB2 -:10624000FFFFF7C1000000000000000080C0E0F088 -:10625000FCFE7F3F1F0F0300008787878707078F9C -:10626000FFFFFFFFFC007FFFFFFFFFC00080FFFF7D -:10627000FFFFFF0000000000000000FFFFFFFFFF26 -:10628000FF0F0F0F0F0F00001E1E1E1E1E1E1E1ED4 -:106290001E0000FFFFFFFFFF00000000000000FFE6 -:1062A000FFFFFFFF000000FFFFFFFFFF3FFFFFFFBB -:1062B000FFFFFFFFFF0000FFFFFFFFFF1F7FFFFF4C -:1062C000FFF8E0C000000000000000000000000037 -:1062D00000000000000000000000000000000000BE -:1062E00000000000000000000000000000000000AE -:1062F000000000000000000000000000000000009E -:10630000000000000000000000000000000F0F0F60 -:106310000F0F00000F0F0F0F0F0F0F0F0F0F0F07B3 -:106320000F0F0F0F0F0F0F0F0F0F0F0F00000000B9 -:1063300000000C0F0F0F0F0F0101070F0F0F0F0CB5 -:106340000000000000000F0F0F0F0F0F0F0F0F0FB7 -:106350000F070307070F0F0F0F0F0F0F07030100A2 -:106360000003070F0F0F0F0F0F0F070300000000B0 -:1063700000000000000F0F0F0F0F0F0F0F0F0F0F78 -:106380000F0000000000000000000000000F0F0FD1 -:106390000F0F0F0F0F0F0F0F000F0F0F0F0F00003A -:1063A000000F0F0F0F0F00010F0F0F0F0F0F0F0038 -:1063B000000F0F0F0F0F000001030F0F0F0F0F0C37 -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000009D -:10640000000000000000000000000000000000008C -:10641000000000000000000000000000000000007C -:10642000000000000000000000000000000000006C -:10643000000000000000000000000000000000005C -:10644000000000000000000000000000000000004C -:10645000000000000000000000000000000000003C -:10646000000000000000000000000000000000002C -:10647000000000000000000000000000000000001C -:10648000000000000000000000000000000000000C -:1064900000000000000000000000000000000000FC -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C -:10650000000000000000000000000000000000008B -:10651000000000000000000000000000000000007B -:10652000000000000000000000000000000000006B -:10653000000000000000000000000000000000005B -:10654000000000000000000000000000000000004B -:10655000000000000000000000000000000000003B -:10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB -:1065C0000000000000000000002F00000000070095 -:1065D000070000147F147F1400242A7F2A1200620F -:1065E00064081323003649552250000005030000BB -:1065F00000001C224100000041221C000014083E43 -:1066000008140008083E0808000000A06000000808 -:10661000080808080000606000000020100804025C -:10662000003E5149453E0000427F4000004261511A -:106630004946002141454B31001814127F100027B4 -:1066400045454539003C4A49493000017109050377 -:1066500000364949493600064949291E00003636A8 -:10666000000000005636000000081422410000140B -:1066700014141414000041221408000201510906E8 -:1066800000324959513E007C1211127C007F494969 -:106690004936003E41414122007F4141221C007F9A -:1066A00049494941007F09090901003E4149497AA8 -:1066B000007F0808087F0000417F41000020404122 -:1066C0003F01007F08142241007F40404040007F8E -:1066D000020C027F007F0408107F003E4141413ED2 -:1066E000007F09090906003E4151215E007F09191A -:1066F00029460046494949310001017F0101003F17 -:106700004040403F001F2040201F003F4038403F96 -:1067100000631408146300070870080700615149FA -:10672000454300007F41410000552A552A5500008D -:1067300041417F000004020102040040404040400B -:10674000000001020400002054545478007F4844A3 -:10675000443800384444442000384444487F0038DA -:106760005454541800087E0901020018A4A4A47C03 -:10677000007F080404780000447D400000408084CD -:106780007D00007F102844000000417F4000007C15 -:1067900004180478007C0804047800384444443821 -:1067A00000FC242424180018242418FC007C08046D -:1067B000040800485454542000043F444020003C46 -:1067C0004040207C001C2040201C003C4030403CCD -:1067D000004428102844001CA0A0A07C004464545D -:1067E0004C441414141414140000000000000000A1 -:1067F000000000000000FC0000000000020000009B -:10680000000C020C020000000000000090D0BCD080 -:10681000BC900003000300001824FE448C00030217 -:10682000070201001824D8B04C80000300010201C7 -:10683000C038E438E000010202010202080600004C -:106840000000000000000000000000F8040200004A -:1068500000010204000204F800000004020100002C -:106860009060F86090000000010000002020FC20F3 -:1068700020000000010000000000000000000806E9 -:106880000000000020202020200000000000000068 -:106890000000000000000002000000000080601CFA -:1068A0000200040300000000F8040404F8000102E0 -:1068B000020201000008FC000000000203020000C8 -:1068C000188444241800030202020200080424244D -:1068D000D80001020202010040B088FC80000000E4 -:1068E000000302003C242424C4000102020201002F -:1068F000F824242CC0000102020201000C04E41C54 -:106900000400000003000000D8242424D800010261 -:106910000202010038444444F8000003020201006E -:106920000000100000000000020000000000200035 -:106930000000000006000000002050880402000053 -:106940000000010290909090900000000000000074 -:106950000002048850200002010000001804C42432 -:106960001800000002000000F804E494F80001029E -:106970000202020000E09CF080000203000003021B -:1069800004FC2424D800020302020100F8040404D9 -:106990000C0001020202010004FC0404F8000203DE -:1069A0000202010004FC24740C0002030202030032 -:1069B00004FC24740C00020302000000F0080444EC -:1069C000CC4000010202010004FC2020FC04020370 -:1069D000000003020404FC0404000202030202009B -:1069E000000404FC040406040403000004FC24D096 -:1069F0000C0402030200030204FC04000000020372 -:106A000002020203FC3CC03CFC0003000300030044 -:106A100004FC30C4FC04020302000300F804040474 -:106A2000F80001020202010004FC24241800020301 -:106A300002000000F8848404F80001020207050047 -:106A400004FC246498000203020003021824244476 -:106A50008C000302020201000C04FC040C00000282 -:106A60000302000004FC0000FC040001020201001B -:106A7000047C80E01C040000030000001CE03CE0FB -:106A80001C00000300030000049C609C040002033F -:106A900000030200041CE01C0400000203020000CA -:106AA0000C84641C04000203020203000000FE02C6 -:106AB0000200000007040400000E30C000000000C7 -:106AC00000010200000202FE0000000404070000B2 -:106AD00000040204000000000000000000000000AC -:106AE0000000080808080808000002000000000074 -:106AF000000000000040A0A0C0000001020203024C -:106B000004FC2020C00000030202010000C020207D -:106B1000600000010202020000C02024FC0000010D -:106B20000202030200C0A0A0C00000010202020095 -:106B30000020F82424040002030202000040A0A068 -:106B4000602000070A0A0A0404FC2020C000020397 -:106B5000020003020020E400000000020302000023 -:106B6000000020E4000008080807000004FC80E0A2 -:106B700020200203020003020404FC0000000202C1 -:106B800003020200E020E020C00003000300030035 -:106B900020E02020C00002030200030200C02020E9 -:106BA000C00000010202010020E02020C000080F08 -:106BB0000A02010000C02020E0000001020A0F08C4 -:106BC00020E0402020000203020000000060A0A09E -:106BD00020000002020203000020F8200000000054 -:106BE0000102020020E00020E00000010202030296 -:106BF00020E0208060200000030100006080E08031 -:106C00006000000300030000206080602000020399 -:106C10000003020020E02080602008080701000037 -:106C20000020A0602000000203020200000020DE1D -:106C30000200000000070400000000FF0000000048 -:106C4000000F00000002DE2000000004070000002A -:106C50000201020404020000000000000000000025 -:106C6000000000000000000000000000000000F82C -:106C700000000000000000333000000000100C068F -:106C8000100C0600000000000000000040C078402A -:106C9000C0784000043F04043F040400007088FCF6 -:106CA00008300000001820FF211E0000F008F0004E -:106CB000E018000000211C031E211E0000F00888BF -:106CC000700000001E2123241927211010160E0029 -:106CD000000000000000000000000000000000E0D4 -:106CE00018040200000000071820400000020418E9 -:106CF000E00000000040201807000000404080F045 -:106D0000804040000202010F01020200000000F07A -:106D1000000000000101011F01010100000000004E -:106D20000000000080B070000000000000000000C3 -:106D3000000000000001010101010101000000004C -:106D400000000000003030000000000000000000E3 -:106D500080601804006018060100000000E01008C0 -:106D60000810E000000F102020100F00001010F895 -:106D7000000000000020203F2020000000700808D4 -:106D80000888700000302824222130000030088854 -:106D9000884830000018202020110E000000C0207C -:106DA00010F8000000070424243F240000F808889D -:106DB000880808000019212020110E0000E010882A -:106DC00088180000000F112020110E00003808085C -:106DD000C83808000000003F00000000007088086C -:106DE00008887000001C222121221C0000E01008ED -:106DF0000810E0000000312222110F00000000C046 -:106E0000C0000000000000303000000000000080E2 -:106E100000000000000080600000000000008040D2 -:106E200020100800000102040810200040404040EB -:106E3000404040000404040404040400000810203E -:106E40004080000000201008040201000070480883 -:106E50000808F0000000003036010000C030C828EB -:106E6000E810E0000718272423140B000000C038A6 -:106E7000E0000000203C23020227382008F8888820 -:106E800088700000203F202020110E00C03008082C -:106E900008083800071820202010080008F8080803 -:106EA0000810E000203F202020100F0008F88888FC -:106EB000E8081000203F20202320180008F88888C8 -:106EC000E8081000203F200003000000C030080840 -:106ED0000838000007182020221E020008F80800C9 -:106EE0000008F808203F210101213F20000808F890 -:106EF000080800000020203F2020000000000808B3 -:106F0000F8080800C08080807F00000008F888C072 -:106F100028180800203F20012638200008F8080023 -:106F200000000000203F20202020300008F8F8005A -:106F3000F8F80800203F003F003F200008F830C06C -:106F40000008F808203F200007183F00E01008085C -:106F50000810E0000F10202020100F0008F808088B -:106F60000808F000203F210101010000E01008089E -:106F70000810E0000F18242438504F0008F88888C3 -:106F800088887000203F2000030C302000708808A3 -:106F9000080838000038202121221C00180808F8B1 -:106FA000080818000000203F2000000008F8080032 -:106FB0000008F808001F202020201F000878880003 -:106FC00000C83808000007380E010000F80800F873 -:106FD0000008F800033C0700073C0300081868801D -:106FE0008068180820302C03032C30200838C80093 -:106FF000C83808000000203F2000000010080808E2 -:10700000C83808002038262120201800000000FE83 -:10701000020202000000007F40404000000C30C02F -:1070200000000000000000010638C000000202025B -:10703000FE000000004040407F000000000004020D -:107040000202040000000000000000000000000038 -:107050000000000080808080808080800002020428 -:107060000000000000000000000000000000808020 -:10707000808000000019242222223F2008F800808E -:1070800080000000003F112020110E000000008051 -:1070900080800000000E11202020110000000080E0 -:1070A0008088F800000E112020103F200000808012 -:1070B00080800000001F222222221300008080F026 -:1070C000888888180020203F202000000000808051 -:1070D00080808000006B94949493600008F8008096 -:1070E00080800000203F210000203F2000809898F1 -:1070F000000000000020203F202000000000008051 -:107100009898000000C08080807F000008F8000090 -:1071100080808000203F24022D302000000808F8E5 -:10712000000000000020203F2020000080808080A0 -:1071300080808000203F20003F20003F8080008032 -:1071400080800000203F210000203F200000808040 -:1071500080800000001F202020201F0080800080F1 -:107160008000000080FFA12020110E0000000080A0 -:1071700080808000000E112020A0FF808080800091 -:107180008080800020203F212000010000008080BE -:10719000808080000033242424241900008080E0B3 -:1071A000808000000000001F202000008080000080 -:1071B00000808000001F202020103F208080800061 -:1071C0000080808000010E30080601008080008071 -:1071D000008080800F300C030C300F000080800096 -:1071E000808080000020312E0E31200080808000C1 -:1071F0000080808080818E70180601000080808071 -:10720000808080000021302C22213000000000000E -:10721000807C020200000000003F404000000000AF -:10722000FF00000000000000FF0000000002027CE0 -:10723000800000000040403F000000000006010107 -:107240000202040400000000000000000000000032 -:10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E -:107270000000000000F0F0F000000000000000003E -:1072800000017F010000000000000000001C1C1C29 -:107290000000000000008060301C8C60301C0C007E -:1072A00000000000000000000000000000000000DE -:1072B0000000000000000000000000E000000000EE -:1072C00000E000000086E69F86868686E69F8600B0 -:1072D00000011F01010101011F010100000080C028 -:1072E0006020F820E0C00000000003070C18FF70C9 -:1072F000E18100000000070F10107F100F07000051 -:107300008060206080000000E02000000F3020300E -:107310009F70DC371030C0000000100E030007180B -:10732000101807000000C02020E0C000000000008E -:1073300080E01F38E88703C43C040000070F1810E2 -:10734000100B070D1010080000808C4C3800000056 -:10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:10737000000080E0300804000000000000FEFF0173 -:1073800000000000000000000000030F1820400073 -:1073900000040830E0800000000000000000000051 -:1073A00001FFFE0000000000004020180F03000055 -:1073B00000000000000000000000C000000000000D -:1073C000004266663C18FF183C66664200000000FA -:1073D000000003000000000000000000000080002A -:1073E00000000000001010101010FF1010101010FE -:1073F000000000000000030000000000000000008A -:10740000000000000000000000000000000000007C -:107410000000000000808C4C3800000000000000DC -:10742000000000000000000000000000001010102C -:1074300010101010101010000000000000000000DC -:10744000000000000000000000000000000000003C -:1074500000000000000000000000000000001C1CF4 -:107460001C00000000000000000000000000000000 -:10747000E0380C000000000080701C0300000000D9 -:107480000060380E0100000000000000000080C015 -:1074900060202060C080000000FEFF0100000000AE -:1074A00001FFFE000001070E181010180E07010062 -:1074B0000000808080C0E0000000000000000000AC -:1074C00000FFFF000000000000001010101F1F1040 -:1074D000101000000080402020202060C0800000AC -:1074E00000030300804020381F070000001C1A1909 -:1074F00018181818181F00000080C020202060C035 -:1075000080000000000303001010182FE780000027 -:1075100000070F10101010180F07000000000000E7 -:107520000000C0E0F000000000C0B088868180FF4D -:10753000FF808000000000000010101F1F101000CE -:107540000000E060606060606060000000003F106C -:1075500008080818F0E0000000070B101010101CBD -:107560000F030000000080C040202020E0C0000089 -:1075700000FCFF211008080818F0E0000001070CCB -:1075800018101010080F03000000C0E06060606079 -:1075900060E06000000003000000E0180700000049 -:1075A00000000000001F1F00000000000080C060FD -:1075B0002020202060C080000087EF2C1818303079 -:1075C00068CF830000070F0810101010180F070075 -:1075D0000000C0C020202020C0800000001F3F60AD -:1075E0004040402010FFFE0000000C1C101010084E -:1075F0000F03000000000000000000000000000079 -:1076000000000000000E0E0E000000000000000050 -:10761000001C1C1C00000000000000000000000016 -:107620000000000000000000000C0C000000000042 -:1076300000000000005838000000000000000000BA -:10764000000000804020100000001028448201004B -:10765000000000000000000000000102040810000B -:10766000000000000000000000000000008484848E -:10767000848484848484840000000000000000006E -:10768000000000000000102040800000000000000A -:1076900000000000000001824428100000001008D3 -:1076A000040201000000000000C020201010101093 -:1076B00030E0C0000003030000F010080C070300D6 -:1076C000000000001C1C1C0000000000000000C0A6 -:1076D000406020202040C00000FCFF01F00E03C1EC -:1076E000FE03807F0001070E08111110110904022A -:1076F0000000000080E0E000000000000000807C4E -:107700004340477FF880000010181F100000000061 -:10771000131F1C1020E0E02020202060C08000000B -:1077200000FFFF10101010182FE78000101F1F100F -:1077300010101010180F0700000080C040202020FB -:107740002060E00000FCFF010000000000000100DC -:107750000001070E181010100804030020E0E020BC -:1077600020202040C080000000FFFF00000000003B -:1077700001FFFE00101F1F10101018080E07010057 -:1077800020E0E020202020202060800000FFFF106B -:107790001010107C00000000101F1F10101010109F -:1077A0001018060020E0E0202020202060608000EB -:1077B00000FFFF101010107C00000100101F1F10B0 -:1077C0000000000000000000000080C060202020B9 -:1077D00040E0000000FCFF0100004040C0C140400C -:1077E0000001070E181010100F0F000020E0E0201D -:1077F0000000000020E0E02000FFFF10101010103B -:1078000010FFFF00101F1F1000000000101F1F10AE -:107810000000202020E0E0202020000000000000E8 -:1078200000FFFF000000000000001010101F1F10DC -:107830001010000000000000202020E0E0202020A8 -:1078400000000000000000FFFF0000000060E0807A -:107850008080C07F3F00000020E0E020000020A0EA -:107860006020200000FFFF30187CE3C00000000013 -:10787000101F1F10000001131F1C181020E0E02033 -:10788000000000000000000000FFFF0000000000FA -:1078900000000000101F1F1010101010101806001C -:1078A00020E0E0E000000000E0E0E02000FF013F19 -:1078B000FEC0E01E01FFFF00101F1000031F0300A9 -:1078C000101F1F1020E0E0C0000000000020E0209A -:1078D00000FF0003071C78E08000FF00101F10006D -:1078E00000000000030F1F00000080C06020206027 -:1078F000C080000000FEFF010000000000FFFE004D -:107900000001070E181010180C07010020E0E020FD -:107910002020202060C0800000FFFF2020202020A9 -:10792000301F0F00101F1F1000000000000000009B -:10793000000080C060202060C080000000FEFF01C9 -:107940000000000000FFFE000001070E1111133CB3 -:107950007C67210020E0E0202020202060C0800003 -:1079600000FFFF101030F0D0080F0700101F1F108D -:10797000000000030F1C10100080C0602020202099 -:107980004040E00000070F0C1818303060E0810024 -:10799000001F0C0810101010180F07008060202026 -:1079A00020E0E020202060800100000000FFFF00B8 -:1079B0000000000100000000101F1F100000000068 -:1079C00020E0E020000000000020E02000FFFF0099 -:1079D000000000000000FF0000070F18101010103A -:1079E000100807002060E0E02000000020E0602098 -:1079F0000000077FF88000807C030000000000008A -:107A0000071F1C070000000020E0E02000E0E0204D -:107A10000020E0200007FFF8E01FFFFCE01F00004F -:107A20000000031F0300011F03000000002060E0AE -:107A3000A0000020E0602000000000038F7CF8C65A -:107A4000010000000010181E130001171F1810007D -:107A50002060E0E02000000020E06020000001073E -:107A60003EF8E0180700000000000010101F1F1073 -:107A70001000000000806020202020A0E0E0200016 -:107A800000000000C0F03E0F0300000000101C1FAB -:107A900017101010101806000000000000FC04046D -:107AA000040404000000000000FF000000000000CB -:107AB00000000000007F404040404000000010E017 -:107AC000000000000000000000000000031C6080B7 -:107AD0000000000000000000000000030C708000A7 -:107AE00000000404040404FC000000000000000086 -:107AF000000000FF00000000000040404040407FC8 -:107B00000000000000000010080C040C0810000029 -:107B10000000000000000000000000000000000065 -:107B20000000000000000000000000000000000055 -:107B30000000000000000000000000000000000045 -:107B40008080808080808080808080800000000431 -:107B50000408080000000000000000000000000011 -:107B60000000000000000000000000000000000015 -:107B7000000000000000000000000000000098D895 -:107B800044642424FCF80000000F1F181010100893 -:107B90001F1F10180020E0F000000000000000008F -:107BA0000000FFFF180804040CF8F00000001F0F8D -:107BB00018101010180F0300000000000000000053 -:107BC0000000000000E0F8180404043C3800000045 -:107BD00000030F0C10101010080600000000000039 -:107BE00000000020E0F0000000E0F81C040404089D -:107BF000FFFF000000030F18101010081F0F0800EF -:107C00000000000000000000000000000000E0F89C -:107C1000484444444C7870000000030F0C181010C6 -:107C2000100804000000000080C0602020E0C000B8 -:107C300000040404FFFF040404040000000010100A -:107C40001F1F1010100000000000000000000000C6 -:107C500000000000000070F88C04048CF874040C20 -:107C6000007076CF8D8D8D89C87870000020E0F08F -:107C700000000000000000000000FFFF08040404F2 -:107C8000FCF8000000101F1F100000101F1F100044 -:107C9000000000000060600000000000000004041C -:107CA00004FCFC000000000000001010101F1F105A -:107CB00010100000000000000000006060000000E4 -:107CC00000000000040404FCFC0000000000C0C030 -:107CD0008080C07F3F0000000020E0F00000000036 -:107CE000000000000000FFFF80C0F41C040400003E -:107CF00000101F1F1100031F1C1010000000202087 -:107D000020E0F000000000000000000000FFFF0085 -:107D10000000000000001010101F1F1010100000C5 -:107D200000000000000000000000000004FCFC084F -:107D300004FCFC0804FCFC00101F1F10001F1F1097 -:107D4000001F1F10000000000000000000000000E5 -:107D50000004FCFC08080404FCF8000000101F1FCD -:107D6000100000101F1F10000000000000000000A5 -:107D70000000000000E0F0180C04040C18F0E00013 -:107D800000030F0C101010100C0F03000000000077 -:107D900000000000000000000004FCFC08040404D3 -:107DA0000CF8F0000080FFFF889010101C0F0300FB -:107DB00000000000000000000000000000E0F81CCF -:107DC00004040408F8FC000000030F181010908849 -:107DD000FFFF800000000000000000000000000025 -:107DE000040404FCFC100804040C0C001010101F08 -:107DF0001F10101000000000000000000000000034 -:107E00000000000000003078CCC48484840C1C0086 -:107E100000001E1810101011190F060000000000BD -:107E200000C000000000000000040404FFFF040480 -:107E300004000000000000000F1F1010100C0000D4 -:107E40000000000000000000000000000004FCFE34 -:107E500000000004FCFE000000000F1F18101008B6 -:107E60001F0F0800000000000000000000000000DC -:107E700000040C3CFCC40000C43C0C0400000000E6 -:107E8000010F1E0E010000000000000000000000B5 -:107E900000000000043CFCC400E47CFC84807C0402 -:107EA0000000071F070000071F0700000000000078 -:107EB00000000000000000000004041C7CE4C0344A -:107EC0001C0404000010101C1601131F1C181000C5 -:107ED00000000000000000000000000000040C3C56 -:107EE000FCC400C43C0404000000C080C1370E0183 -:107EF0000000000000000000000000000000000082 -:107F000000001C0404C4F47C1C0400000000101CCD -:107F10001F17111010180E0000000000000000F8DC -:107F20000C04000000000000001028EF000000001A -:107F3000000000000000003F604000000000000062 -:107F40000000FF0000000000000000000000FF0033 -:107F500000000000000000000000FF000000000022 -:107F60000000040CF8000000000000000000000009 -:107F7000EF28100000000000000040603F000000FB -:107F8000000000000018060202040810202030083B -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000F010101010FFA2 -:107FB00010101010F000000000000F04040404FF73 -:107FC000040404040F0000004040405F55555575FF -:107FD0005555555F404040000040200F09498979C0 -:107FE0000909090F2040000000FE02424ACA4A4A1D -:107FF000CA4A4A4202FE000000FF40504C43404043 -:108000004F50505C40FF00000000F888888888FFCF -:1080100088888888F800000000001F080808087F8A -:10802000888888889F80F00080828282828282E2B3 -:10803000A2928A8682808000000000000040807F3B -:108040000000000000000000101010FF10900888D1 -:108050008888FF88888808000444827F01808040E7 -:10806000432C1028468180000010101010D030FFE3 -:1080700030D0121C1010000010080402010000FF94 -:10808000000001020408100004040484E43C2724D6 -:10809000242424E40404040004020100FF09090963 -:1080A0000949897F0000000000FE225A8600FE92E6 -:1080B00092929292FE00000000FF04080700FF4029 -:1080C00020030C142241400000804020180680004C -:1080D0000718204080000000010020702826212081 -:1080E00020243860000101000010129292929292B6 -:1080F00092121202FE0000000000003F101010104B -:108100003F0040807F000000000000C08080808031 -:10811000808080FC84808080808080C0C0000000DF -:10812000000000FF7F404040404040FF4040404052 -:10813000404040FF7F000000000000000000000001 -:108140000000007F70000000000000000000000040 -:10815000000000000000000000000000000000FC23 -:10816000F800000000000000000000000000000017 -:1081700000000000FFFE020202020202020202FFF1 -:10818000FF020202020202020202FF0300000000DC -:10819000000000001F1F040404040404040404FF7E -:1081A000FF0404040404040404041F00000000008D -:1081B0000000000000000000000000000000007F40 -:1081C0003F00000000000000000000000000000070 -:1081D000000000000000000000000000000000009F -:1081E00000000000000000000000000000F8F8F0AF -:1081F000F0702000000000000000000000000000FF -:10820000000000000000000000000000000000006E -:1082100000000000000000008000000000000000DE -:1082200000000000000000000000000000FFFFFF51 -:10823000FF0000000000000000000000000000003F -:10824000000000008080000000000000000000002E -:10825000000000000000000000FFFFFE060606060A -:1082600006060606060606060606060606FFFFFFC3 -:10827000FF060606060606060606060606060606A5 -:10828000060606FFFFFFFF070200000000000000D7 -:10829000000000000000000000FFFFFF00000000E1 -:1082A00000000000000000000000000000FFFFFFD1 -:1082B000FF000000000000000000000000000000BF -:1082C000000000FFFFFFFF000000000000000000B2 -:1082D000000000000000000000FFFFFF1818181841 -:1082E00018181818181818181818181818FFFFFF59 -:1082F000FF18181818181818181818181818181817 -:10830000181818FFFFFFFF00000000000000000029 -:108310000000000000000000020101000000000059 -:1083200000000000000000000000000000FFFFFF50 -:10833000FF0000000000000000000000000000003E -:10834000000000010100000000000000000000002B -:10835000000000000000000000000000000000001D -:1083600000000000000000000000000000FFFFFF10 -:10837000FF000000000000000000000000000000FE -:1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD -:1083A000000000000000000000000000001F1F0F80 -:1083B0000F000000000000000000000000000000AE -:1083C00000000000000000000000000000000000AD -:1083D000F0830008000000201C000000AC2700080B -:1083E0000C8400081C00002054230000BC27000857 -:1083F000000000000000000000000000000000007D -:0C84000000000000000E27070000000034 -:04000005080021319D -:00000001FF diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/EpaperModuleTest_GD32F303.axf b/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/EpaperModuleTest_GD32F303.axf deleted file mode 100644 index 1b38cfc2656e44aaff3cf163e267d6fcb7e1a0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249016 zcmeFa3t&{$wKu-cV`feskjV=IgvrT62@x^8GzizsBbg8gW=Mjf(k3AZBno7j1jSx% z84wk$wn6PJTJM!w+iKg}B9(iw)fy~qt$ht5{j6dgZ@onmwZlU*gpm3F*52pLOhUAe z+xz`Lzt016X0PX7YwfikXP+}CTPth4k|Z(nkXbP!XpY3RoEH>UhL6mcWj@n^FJ^X@ z#x@r+y&Cl2S($bWpZ|r=5qz3$Of&VE-{*lpiVwl(@Eygc1+xDyeO`~)gDgC2h%I4N zPvtW0d#71|VrX3wsIme#a^k{&7Q~X;fQ6a6G|ZgI!9x?I_nSV`cX|?Y_e(3D)10<+ zkH3oPlGk5VdLYFsd6}*kNJUAZ{2}@Me{oxmD)_FRrs7;&k?nZoq$Hm_Ui!?XZ-*N# z;Jw%T74J^3)w|8>ESeT7_PV@P-U2TRpFLaez24h5b+^lYG~JuSaiO!9PF*)3X|;eP zo#nIe|2jK)fF)h+(jAYUl+@RcFY(UtmUunhXWj}weCgXGwE^$8eued=rFvO!eweum z!>sb)fXp6uSzdH{^S!;^TyKh3_5$y;d#ZvnCj9JlGW+rAcIHW6dsB zbZ38h-H!ef-BUfzAbW7l_oWA=lG=V-UG{M{t$9F}Y7ti%@UPxxZkFqMKaf7xdkOS? z`>e7LK75gEJbOa$a(X7qxxuC9Jn}x9Ts5Fb&i-Tmf1k3!l^)ul)%IU*t?cjHMEVmX z(yKu!Wo*g{7wP7DYgzcFr`R5;z{yx)a6pz@214CzPrkRdKh$$@fU)KQReJlxZDHoQ z;lwt?ZPf{iCSs|oVOBwrWcS1N6vWNr>zC9|2kSt)A&AH|96Fu6a#qEor%un8?%#V( z2AnCm&IHmCN5yj{kSU#$E7&>Z>K(~nPOj+R)=<@d+qI9Lv$e}#x+mFk&USlk|9!L6 zbEyq8Eb_n9_FGp~^-sFuz<_4iIABY?bK<=dtNOQ1cK6?w@y&Cx^zQ>HQtJRyFPY%! zPo4MaoQi>5-z(k~-V>nxL179Na< zI8*+fg^%IohL6kOV`Y{XJ|@FQm#^O<>%oS8NuD13$?4>4WiPZV@QlIRYmgn;d| zteSn=Z@t>7^JU!w7A7CnPD+{-x)*JB@FYu9UZHx>uJ>QC1{`aZI|^$selz)L#zOHdgM@N zSd#1QQwOZ9WkJ{rwx6JMFS2<73^E~K&90 zA5u^ zM(q`6uInU|D27u#(h)r@F*}Vq%W1?(f8vRuZKveWzM;S=eQvKeI=DZodegkle#ERl zMWV4s^JE6oz4iSPn-YAU_w(rBccT{XMBdNckl7QZmXLHcq|;9E%XRRUq2s%{Z&b}q=~H9 z`U(rDF?KSf2O?S1F~;%|%ko#zKNe2<5o4K4w(pbLU1$7~)Revir7&jECKtW~lBS{W)MrzlVraPsk+B135wkD}P|4blXYLfR!;iez$e3ylo zU3NyJAB>EgU@YxP%QE``<#BbXyoZHT&)T2f`da6wrqw zs#ks-Q*`*V!@Aexz0b}xIix+Gk*6JEB|}HJ^|}<24rS!Al5>C=^B=I)SiEw+?v=uW z=UMUD;7qTMi29vU_}9-c#>y~0A5d!ooa2wgal~%mFMT`OxP2eXf9-9xRG#o!#JNxL z3dstTWKtQ_!lP`d;Ns!W%}o)HS!Y{9wS zMP8@38aZ*(`G9wqmtebh3gDLWR^(Nyoz3b$0t=PTy@^5Ef<=}J~bI_4ZDC>3a)2}hDcnnw*{^a-b@r1y56 z_}V~zlDXoK1>?R${V+zc6$-#C=+*q7-L=E*6+k>AiPCGIo1pQgbI0v#MoSj)+o432=BkKEstebO5dTnt^ zF!T7T;#-1A$64{FU}fw|UP$q)2aZOCnSs^)!z;Qq;n-ez?loS^cAz^M}x{NWQh5p~)ZFu3_+mX)C&YOwv@n#M4-e{4XA0Xbmso?aBjwO! zr6ehs94ZWHCv8j*+vHPk$x^S^5@P!gO;$^!BTjs?nbud5saLsaMRaL_94fG=$1W+j zC!*?7ffD*pn-tUw22bqvUW-~-$eu51Nij;){@M(-TM22%Yt-LMmdGU*ZUf6#O0=Lh z#sVc2*sqqbBYpcJkyKzSIW~8*zr+@NEyDWl4%<^#_ot*Dn z^qz=CmkV}#*;j50Yf628ijsVUdYyD+jm>hbl*`nHrKGKnxtmv&sKJGgq~4qQE&1M* z(4t4qp18rw9*hod9ZLPmS60gp);Z*RGyS5^%6rtuwW;i+p3-EKj}@H>%x58KMq{P? z+BY$FVPw`B=5yAo?5VDBPE~qCiuEOGgUJul===CtO9h)@4M~sHdHX&k@@i{tZRH2A zhLqG}alS8sPYspoX6~^EmN-~1oB956EhO)eAE@)P&DFW`ZlU3am_xsPQc5{_{DwDJ zxDB$@6Ik)qGZVf$WnVGPdS7HLsaRsAbLP&Qzu@vK$`&@SX=!a+OQS;^=W=^0D!qhj zvay$}GmMO2;kV?%fL95#n#TTACI!E|Hz}lBq+|cQ*MgB%3Vvy?6#Cw&8kX5xy15W* zj<(`d^x#VL6mRi#^t`P{7KPRp=LFXkfA+}bA(o$hne=M9&O)1WF*-}?VuRWHe{~-Ubg${5FjV}@~_^O?1Jl6;*wLplJ)@c?e^O5WA~;%b!#pgkdppm zAc-k2^_`3^BKgM$Y)tBPhosBcE7A;J=WA4FnKxeNlSZ9vH)(syYri+&mi7{RaA~FT z%5JX|dK`Mti_$Ew*&jq%TCuux=9%C@tjX*rRjd@He6q|QV#Uhw+bSL(Kwl2Ia;q!Z zYrD`#X(p3;$pg7pw^?42_AIHCu};HG(MzMjGA8etaB`V#-$_<`QBc-XdoR%^^kNP# zPJPAcmU}M+WJ7O~_e2Ma&X&%RduSmm<7V#v>mM&g{#}BPjt|y?F3jc^IlPm-J5}{1OK722*Y{yG zZgreJ#xr|coTu0OydoVdoxwu-3~(Q_gj^W=Msp{(*XO1*+5P^iZCHV6SY2&vPqGca zM3Bm%YC!&~49g?$2Qs9YDM5Lrc4XU4`DdKz+gfCtx8IcR+1BE(I&@<`)^vx~$T&ZD zW4hoE z7^hqukqgqXrouWSYAduC2y9ElR+wHOagI+#BtuI~a2;-n7d$ z@fhf5m@6qn*a8Eq01GWHl9Fa7Au3kr$v+bUW?MTV!nNn0Y0CfLgxr3YM+Pio?;xW+ z+0BBIPCE}fZaREgTDjw<>S;gEl?Jv+c^BQ|{EkN+l1}C$qPC*s675B)L&nPDe&<&` z_c>EMN^|Km870Fn9%@g%G7SS2wFGy}mZkIjDsE;ufe!pN-g4`RKydk^c zO?u4Ry7VBeRNUlmm%C}HMLEXHYuw<@Cho8-p-*!jcpu|Ine*^SfQK~7w4Oi1u%7o< zX{cMSUJ6^5a$6X#ITYAvuSjm+?jAl$_SuovBvYMB5(4%guq>b1o|+?vC>It-i`)0Q z&mQ$ZL%g_ZJQG+UEn(q*{~=42oX94Hpzr+{G{CspM9p!g;`By^~ zDF1PYBJ{JNG@K6)RpR^_m--Rs`5~ts<4!4bDol$Shy(aJf+}UkJg^) z!*_19um>02dxm+Gf+ZaKhjY`33RqAVfT{z^;ndmZzLsTDiqAPuP4u(y znUVAwif2Kz9p~#%i_?i2<;-?J))&}Yv-CD)|LSeoo};U~t-T!>Iav6zD4nIKwvS(X zX~+@E6Mk(5Yg`I)W!bryN1&G;VEM^Qf4qMJ^3NJ#&r0W1HM`xJ8`yuz%B;I~xIcKg zI(OH8-(5T1@4Z}#7&PTE{nEE1wRzs%-tD-W$et=4!-~|hWh$G+Ui;-V%y4sGsFYqr zONQ*&(>qwnum^IVclHz)uH=#*WZ|61lLOu~+wm7FvD^8;#TCf|63ZJ33>^UWomUT5 zT7nv8&)F5gMczE|%v+H!Ry&-IUHb$3S-9>X>UIUZuf1*a(X5c_UGh|FsL*>QuH>9v z_ND0H6VcY(NB2MJK64b3+foedH==IuJgmcD5qKVsUg<5wb((L% zfnCxXBY`(?rkF_8 z8t>Co_8-WpDfIqv*R)-~ec~eT^|LqZni_m^_VnPtzklae`w_*fdGqhOsNLm}298R| z$ddJ|6|B51=gwuJ@k(j}NHq+umPA)ZU@u#^c(oiNPit9u<=LsnlLO54LO zwnviurVSC>B|-b1GHxr)x4#+LfUC!?+P{;nv;TCoHCNj6=>GhvD=JlPpY+gJ>y8~| zd#I1FUdsbJ-M>7__a9*GZ%^1Cd@V5OO2S7dPamEB=>EYId_4aQjpsi)$j~=w^+3>n9Au1O`+?}-yV1FNbnr#& zFQB8L^s8aHn(@(Aj8FapeW!nB`Rb_|={0T|+m=OW%%2sZv8^%^LLa&~a`-gUY3BxG z*FpP%0#M2#gE&u#=s3@f&`N^tJ@^l>qUsNvmDW&e?swd{USgJ)ql5RO?w7H@bLNO2 z;{lER(ZO#G=X;a+X!ZQC%ty5U8m2v>0588zW%xmXNm40eu@Vg^q<=LYngFhT0@1le2z>9sW z<*N74eu~1^&)f3p`?q}mO81ietPF8p!rIOG*wyT>N`6AZnM&lJ7~L-&7Nh=5d@D^X ze9^F!pNzKoUPLNX3X1bJ8d)P+jS9#Z|BW@7njal}=~*V1@;0RL*nVJ2O@6jAZ7DK4 zA3GJ3mi6UK4(@d41bf{DM{3WwdbH5z-IIg&0rUO$ot-(rxqE12w_?|h;=sbEe+YZ# zpE&_*=AXpbGXFiCt@8(Pw#|R*1RwviF!o1Ap2a%ABZbq{Us>g2YRQyfmWN$b8%|4V z#BQ`aWck41oEo&X*Y@9@nlzLenbEJ=RD3V#w`s*Qwcrwbw9s=mRfH9Fs^__u&sCg{%0Ypp=Yc=|AXqMKp)0hCOUX2)*C~<=->gY-4>ktKJee*a?x|F zD5r4$Bj~?6)%Ml%_QLN!GB;m94+8p+N2VLledoUcxx2XBAI=^8s{Gi<;BSU=3gvHA z864ZsW0cTf$C94HaKSoYG3E{Lss1wL4stu*9(p};@DY6W<8v>2Hah4WdCZ;syXfHJ z5%&JjCh4+TT#2pnW(T8#3la4>Bm3MFLA`W@olLe$`82omk4VM1YO?#h8-miz)ZqQ0 z=-__=Ct(kjg;;@_zY1KrBd?#hE5e-8Wx(UAkj=OkQC^2J=AU8Bz*#v&aVZ~?^X~=x z*ja|XLOK77DF5r(FDzMH%G#YDyy;rv!G6_y_T+=_Ig?+1cUN-hdwt0dzq@nl?MwRJ zlajyxUQ)8NwDi3|@?G!B$*djR@AW1}-fIF+V5%K*P48_>e&Jmud1P?*S=T%Elz-e? z|Bn5Vk-@^@S0bql-yFN$z~&4ugpJw5FGN)5%uv!(0rW8!t``8?=g!oR-iDEC^Ap>_ zqYOWLy7r4(m$2zl`|V4mGoj{mkJLoCkrPBejm-Vo5XIs7^Axk6oWBE}?HFOmyQH(8 z6BClJZF9Bs==D9DT01&*PiI$~?(S^vYMqeGZfR?7>FMT#**(pjYnnS}w{&g*0Y@UO zd3{IQW`9>(cXtB)mRoL_&6zIkX_?)!aYC|?%VJEgzqPxkZG&h1O;=t-)iBSpM%NOz z-qEecVV`?W3_*0Cdu|M_^f&w4y7c9pt((@j=?!h&Jwmq*-F<0H@41+1b7#+)r;lQU z%^f}M`rHMj`euF3+_^do?p(jAr=xQt{HbW`?pU|6tyOp5swYN-e7))_eM#H;^_}{) zon7l&XA?^2>uJozoG>duPK3);(?OyE`^@Lk017wXJRIYTMY-rr+GTzNdLzg4BZ9^VV*-Mi+HyxEEBp zu?HckcKOhHojvP2n_B_So;{m5R5oN0^llz`y}EupHioOQJbpbLR^{X-?Fs!^T(9F} zhyIME_5&;0GnP$p9=$QO82fwmlV5!OEzCqXCM8Wuvg2^|2j--P^stIMbAeK4IIzM3 zD3zc&9!RWcI=Y6>M|Rw|Dv$n2UgEmZ6%KsHg*_9xm*qcj#n*T4oBgYM-kQx8JfeDE ze4Azb>TNY+?juYWWoyRVr7PO!E<1F3n>6JKX{Ll72q`$ldr4?TyL2Y7;L_>??+410 zj~u%(I~=HG!IEVw+bw6oU~K(y*-|YH^rk1bvv8gw>3f{!eg^T4rENF%I>w_V%3)_B?BqKWhxm2LglgMp@EMfUF z?Y_*Fn`%FZcFP#uGS0Aa>Bs}_$PuZ1m%?5eIdP~1`LW_qvyL4U_Zg=8=7;aZ zxUu`=oXc^>_oQW0odjnuo9b~lp^k8%OUC!T((p0T5}2FZw6y(2ML>*0_X2XY=Z6)^ z#qY_={2M!h$H-RRPJV`atv~(`#^!7O0~43jp84!&So^+nC&Nz1zLSBi=`YrXLq$!^ zZIjcmwj3Eeg+0B!%{E_j_}0OZ6EyyT6W8rhGev{+(|)1c6djC?pbhYS zZX^SH1PnU}v?~xDEIe13tzb5z^7M15e2rX%{lhor&{{AfLKNJ|jcELPi?QBh;b!A{ zf!4PE1DVTIJo&=(H>OU_e#kv7XgQu%-Hi3-Znt(ME41645q#qP^|kU51+(FmBWz$L z+js8$leHg&yQF@ZVcm$Q8TK~$pON+VD3@!nC;xQx*+Zu_#L8cliMz|sO`Vdx$DJ9p z9Zz2x$VtUYcIpx5sf>!W&|U77;C^V&06cNN4Oy0sI~&eZnLOjNc*Z?6VrJZ~A0gvR z{j{^Tg6HnQZaZt2!g;ckkLL`GHR5ya1vFZDo`Vfk){Jtjvwc$dBm$pA;FAb^5`q6C zBM{&RH?1#(qp$C;HS=>L{D4?MltzY0#V`l1GPNbtW1s>NgMB0%FuC}5B5On(qv!xa z;m9y5_}u5Ny6SVE8yOznTuK}t!aP=(374bd098rL!;ywZ$c#f+5HP_H{VwM!hFKqd zZ{jtgUFgIIBtmzPge^YVy@gD}Kl z9(h|idN>jZheM%5eF4V6!Ev0K>J<=47yE*uX(j1$^S(4)h{!{-HkxG!d5fY&3=f*9qPgj1leFCa;ZqS!>; z(WoEP(aZt@IuOSjr2wglV-t!W!a)4v9yYWPKX}5JK)J-3B^#0nxT|oKm*?e8WTp7V zktgU(;ZXTvq#alZAja}M2cCXJA`+q;h+N#{G7dwd;DgFEn?e**8vMC<{xFXOA(iyuMI~EHGT53{ zEwhkaUcIuwhaZ#iX(6}31x{B1CYvnnDlLm?IMeUM_BP>;8Xb5l0YyBUp{X*vYDIM= zR)6lTPMn%oRO7i-SLL!fEGH{ttDViLtgKwf7B8)?E@jeZl2F6t)z#IPGi!DAOb26^ zUk*L&8aiuPRBsj?RC|`jWNAf`mCdcbZpBq>OGbLe7PghkUgdJR3fNYhayiDuwk9Pd zN$e_Db@gZ2Rv5Sy8n!~4?sQ?g-pW;Pb>d)KAaLuHv#*lvm_`8s#Z7 zz08YR<}gXxDoLyyLgg$^cj|d4m!aH}rDe4+o95SS4DMEX7@5M@$`brTy)IO)%95-y zst`e;BGVfh8aA`7ODZbLSXo5{p0B}q$yQbdd=Aq-mn6w7=g~(Wg^!x5ZpJ?OKS9(P z*zr$LZ^uK&d!v0*8 zOPz~ZMKP(%-Me@17FN;PP*cG}j+iGN!yJ(5oQjAUq~74u!KZtff`6!Rq~dO-$TnF* z`Q?2z0budKZ(rG)Wg!$00a>#eg5oQJY!Ts*)d)(65@Wqhk)~ckELkeBuol4<;qNjHMk~FRVYQJq*UYf%L=%1c2pod3h*-1)S{x74Ibydox=eV1k+-K z@UVf86cx?tGs>yzo4IH^a+kdf9#fVA4+o%>thVFBm@r7^W$w1_+sXZfu3kDgg&5VH zJ{`G@Vvc$kwh7sY`sV$@erO6kgi9qE)he=z_I(*;s*8NY6T#d^b(s7Wc<}V3^0LBW zW#|oSYQ-;|Bp?Bg=&FWJ5@s?9qZJ6SsuV@Y2Ju@kM1<-k&xu7=h8OoO9_GzX`b!U! z9`KBcIoX**{E&+5*df}&W+9!edpKT^k)%9l$evVGkjg8ddT|-48g_08ged3~^W4zl z5Jn-MZ|Xx$55Z=X(c-zBg;$okqZRCACrONuN6ZHA*u>I46e-_Oi#&pos?s%!O5HK> z;6ob5G?Fw9=ia@2Bnh@(+tg316UY(Rutn>(qTo|(SU-$z30ocqGsA&p>0!>Ez^(I1#_zNDG z3?A&h6FavP!0&k!Z9K$LP;tS6kNkTbXC8hU8AZPU=E8%<1v=)H(%GJB#eXXC!`Zi) z{$prU=|3Je**UBcV~!rp$7~YT!Yo7`DnD0o2*gf5Ku3OI(UckacKf7>Tu;I&lp~C> z<>*e>spf=;=+tx29L(tqgab||0w$%Qp@|Zv6Mj*ahYuC`5!gqyBpe{p5yO;{k>Ut6 z<*2MF$I6KzyQbmcSC(eibvpuOw+sJuyTK$I{e@!{kaAC`83~~_OLkx z1?l{%x37;gGSh>A04Xi#2sp6_pv=L9sv}`d&f%ZV4Jx9|^XDQ08Qe7*1Ua%Yb$Q%;a%P!8>5lK>fk^S9!B!qS+yaYm@&o*Qpx~_hL}(PI6crQ{l!;cUr(fN))K70oboRO(CbW3ywA<)-^ zc`($6BDU#LbE5t?wo%!ZX18y(r(qJntk)C(CZuB+E!9gO_8-5(&ePsLQ9-Y^^O>R# z6K)^4z#qyhd+Sc+@M3svOUtp_Q*0CLG)4yQt|{Xjf9@0rm1;)FMxt@wv1!QXC{-&B z1>!oS=!gI?XN}(0>l1kQ+O>;wqB)D#u5}9pjfCbA5CwXu#2)2mfk@;rc@w@r%ona9 zK}~|l_{CU*#>k;E(WU`^t}vpB4_yYG+DmWh3jj1?!~K_R6A|g0iF`qVjO_~<{P>ER z84A1d@^AtU(-sb)M^OkY%cBWDcj}ZJI`W98FUG>a1NE1k2mnv10f2Ht9DO04tbO}- z-mwka(Sd+Ki`q~QHHm}JZu>w*TffvRR|bgwcKEn9gIESKfr7TDS8YO3jT` zCA7uQ6DP(OP8T+r;7d*Di>pRuI>Jjq$7SdCgme~*hIk!R+7UZOXO?EHf|Hu7^TUV&qSh_ZyxZBEQTyi#FApLcA`L#o&YgJXc}3 zf<-sik+JX-p(I{NRsxL3iu$im+NImK4nTxlq%jdq6tf2=< z8xCq1P(*xT4tk>5mz~sLwzO30%T1we=YJdvXa46!uf%SQPg*g``L4qINXjlQWKMjss?TQm~Niw=h7ZM_8dnhlP2fo*vHf**{+Jj# za-JX9xxgXHrfUSz>Xa`}u-HyGlw9f{u|rAq6UcQ8$FMv&1aTc(4Lk-D6@gFS`U{Il z_}Bpv{4if!GyG-ZdtR<+Eh-wORc0EZht@(mV?8UT9HAo`&B1nHY9tIWk5(KQ=Z(fQ zD+xt%;3a;}gF{J6r4T0U%?WLxNG^CZoQo)Pg}#v}uGw#M`uYCl)AiI!Zi( zn2l7--{X5l?4_H3d3eW;9jUn}JE+yur=%Huu#f0Cpoq7-fRL`>N>~yIo?%+7s{AYx zTFV=oV`}Q+;lqp_UYyD^NJ?|irR%6eC5|_@4DSeR0gsKAZu~TwNzL8zX5W0?s0hs@ zF{O-RVWKXq)v2n!z@aNHs0w&!IDBRcHW_iy0F;gn7F!NQgq1`p{u6N+2NqUlF>zoT zuZ*s1vf}$sd|g8bXH&U}&#~e%3Y#f<>DUfwa^O3RfQvA}a5Rw3CC;ta0Va zm7DNsL>UM@Evb6ft+;cNrUS&4y?f~kOXBB!s6v9O_HGN% zP+_+ROQWU14BqvOl^ts4n@f~lJKkJ8gD!mEM48__h{AaIAnF(?xc&|{axWeHiYTgL zW{Wy?B^5W8oS5Emfn*KficM@uN%+}l@x}SNUR2hE4L#JK!Da8w$l&h7>T)uvJnjU> z4t^l-_|ew~CLB>Q-8iFs#&9~LF{cH6D@L{tJNPg#mKdd77I8$QW=W352KBr=L_i#3 zsO9Cnv1$nBYpwAJ55mv|!1L|Bvwdx5-6IWzVcmy>7LSkCd`@#V+o9S=L|;kNM@ zfOE$2iS6P{z_UP{C$WT|xZp4^xW@56k@+ty(@tGMfncWh;i07KIDLoSS-KMM#{;~o zkg=!7d50<3uva$2W?CZUv&%5n$@xGl*yG8ro`l(^h^3@lm7+kiC0$aqi?mG3G%a1q zknEVjtfNtwNa6^hgV7Yh&qv~b2ZBOFaw3vMQcQ%&k(!8LY=Q|A^F$M%O?soMxNdtK zMa=0JGx8`yg=>nIf(`RbDpDbH=h}pa_fw4&`Adv}-O-^B=kV80ZuhLfgRFggj z>yv4MgNnI?r^56UMqiEz&|E#KED5ViQACTFxcQjj^GzTnWkO0SR2QUiGYhZaUqu#t zQS>jO0%I4`mkez)cmZx<#v{VaOjHcF(1ImYq{1Zv$Jne)_;G0_Okr#`c6QliM46u| z_)7&q5_3#EV{3~gbIu;m<`D*(-x&IOjES-)apqhHkXe^3*;4XWR<~J z7Dowj9knhTjU?2Saa7eLLM)0Sgdk&!N23_~hd81NA-O6J#!Yo1WaXm?WGtbbakMa( zkghl~K?(Y@do+P70ooHs8%ltzn2w;$K|WGGRSJMHZydWS?YgvU;boOTncxyqX3AB^ z0Wxf90*ES>2@t<{p@O0f|=5tMQ(kw7uX9A2}Zxmtl4WdX4t3{EqPnn!l z=ci3zRvLkg252RqNdSV!RvkMb zOLG_5(S%Q;FEaN9_bnw&)-LcxgD+Y@*0#yoc3Hbk)^^C+?Xq@|}W$hkW`+}@}5r&Rm$4AA>7LaY*WZQPxcAIS5A=_@3ZFk7Fzom}ic_<8ctG8c|1)Fv0o{CWSyIP^>O`Iqr7 zeHue(Tq5|TG4OB4z`-$alQ9OF^21~3FOGqS65vwI&m(|Uqke)P!n^HhmZRMpg2QYsGuh!^1Ez-niGC3LZ^8lFL|5i!;7FG6hw+Z%B`6zmO(a%i(1JyH zUl6Bl*`eO9+yTAUC4=E7KmE0bmYd|u{m}6kbYPC*a0D>R6l0}XM-gBuyE0>XIPYrM zlLZu3H)22k78@`{{Z?f2TZo~p}th``%rde{?iWSc0?|L zcQ0g#*OdJ&U_Aluf$Y=-cm#BsdrbZh0AuYNgTvsb7@E0|GmU9$0h?_~ZT4$-3e$lr z!j8jE(7%DQJM-2Zw%e_DSngDJD!bw~QoNo-oXvcrcpLnDBR$&bg6_=^jfh7}O^iQuL&aD@R=%!z&&@=H;6i+tyDWOq)1 zXh+Int{3p{QBKGgcV>^=mYli8MLBH7>~83%HZk;FW5$ePPI?*of|(Db_eJo}2HK== z0h}0*I{=&UBl+hIx>?_w$W_V@qrMiiJ~NkhfPOXT33kWoT6}T5E{bJ4V6wx^kJSk< z)qNbg67$6ix*6-8$cH6ToKCP0Fu6?n2(B9gH;jR=83V5x17AM|UOfi>^cc8l47?@* zrZFK4ZSgJGW{z!m2+@pXD_uvD-Nfgd5|0zXrGU*i5$sPGdkDthH;V2XL&uoP>1Mrm zXNw#*`dKWOUc&SBWS@a|W!@~;WqvL`hUKC!T^XlePuFN+e!Kt~vyYklZy^q(cWfPx zLJ#G)fnSzrdk<)|Hb}_lm8R`F@Z{fW#O31AJZJ*p-z zr@BkI3!_UX=l$99KYs!7Ap5AF9-L&>8y|;FS_HJ#(e=gT9!1+y{~kMjQ-68~a#qkN zmuNg)0+^Q#_+`lYQFdqEyd&v$?GD?W)}5AJ>Rrm`#TZC2BDn^mej10Zw_EN|?^JdY z2aR1sZ<@@sKXN^rK2lEvk42VozR`LpW~65o=zBT6`$9eL%+JW)=qz;@TA6SE#O5{AnKi8|fU65KY%Szo?!yN<7~PZa3g!L;ps=Z*n`v(|;4! zZ?az_B`3CAs+aTL$!OZT)nKVV}0Yz3+63Y z?W$W&ACG6XyJO?(*|S%7Y;0M-skLo&cTa1_#-7>j%+tBS-?_1EW6za381ee94gQYx zc=OYO*`=53oBVjoRGWTg$NE-%;pL?>^@h&Q^t{&XyvY9;?%QO_9%Ry00u;hO zXHvOTXT1;{;C9A%!(xm$e1nF3CNg5OGOn4I$_uHL}bjm zs}r#?8*3A>F-v`-uC=D22*t`cN~i?xnm8_I=CyHL%*s_pB{6*n&J77Tp%BQ`3CNg< zpGrW+Ec`UD#^2Lrv{aj5G7wO;mNRT<-fXnpjrqLo3aH?Z%SM!Fp#_o>K#`rYH#_n!Y zDAm!nv9+UlqY2v`E$cg5Zff**u5a$@=()Ag-`?CE6U}naJNsIi*T*n9%-8MjX!JKz zHF%#K0^S8*SqA<<$vyOgC0tix<8*BMc$U{!*Q1qU4Rt}Id<+_->?(<6VKtBuOs=k5 zv5`sHS9fk)-rRjt^P2T-)f;;nIkqc%dE180u3MKkZ^ZlfHelct_?~R{rfzTZru7EA zDSKr%7!oiyXV+ijXy~$J?C9z261XkdJ~UtbH3IrvHeQq1(1F(D z6>rVH_S%Z71_7|_nrkXVQOa&`E%#N{2}sVaYw(DolI>k?6xHlH&&o!RNwH*Cu4L@x%n^W%19JtSabTVRk~lD50Lj@E%Uz|7p7!RA8{5_!ic&@)4TY(rkcQ$3qmV`g z6GtJ9iqb|Q7l_*JqmY*iWO}x%!c*F4RGX2#vff?MxWw1!aa~>7*sw}4WeRkSfv#I+ zn4Xo*+3Hpq;@JYOyw(ihB<}r!#)U%9YM$I=sgIbVX?=u^{ zkjh4VMF@(kuE7Y!MFKKt7YoR+Wd@JJ97Ne@iDI5@E{rW3geNmafUjLe} zmzWrnWtNE;6{$;2?5If1rdBqrxeV5r?NgdvUr}8vY?vb?jSQMgo*EMKvRA@UBb4(w zU~nxEGKO213&_Z;Wub#=9MoNuMaQ(0fn@Ry5xm0evX z>#r@=ugSEg^^KmJ>$_T3Z|ZLD>Y3g0_gjbl4^6jzEYrg!Sl((%BQ28Gw{7NY*v8h* zO&H%t;Z2kpXI+aIs`ju=H+Ocl##X|T)B%tH(5!VZ@CX7oC zGtfU7C(xBfpw)2$T|$9Q&q$V(u$-}m{`wIsurDSYKNn=&EG>LUvCOfy`CA)X+txSV ziie_#?90Hhp&L(6JfT=F=QOO78oS$i=#i;~&nuQiF(e2E`nY0o3Oy|`)>De5(!|9% z?@%pEIkqLP^dZ$!YvN*@Wj|Fd4M}8MM>n#l8`g2VrRK&)Fk!L51k4r=sFsH%Ya{XA zf|XudBfVdkJ45brfGxbsV)@1eOpTp4w{?+YWk0c4z9aGKZfWl5`N#@a_jGJ%>)eF; zX|>80{?20gp~UTv8Ncv7i{&da$BFAu9=y+6EsrK5X|37Q(Y&4$e`d8jBZ%Aw(}fJb zRJ{RKhFM*uu}-ECUL!&EJeG!p7FF=39K7DDfari>~r> zP&Ds#iGZhbePs{yOmq(n@OyMm=?iI@gAmesaV z82oJqYa*h~eKmM2iKyxdT8*oTsM3}3>zHT)Q#DFLw!mF}qrjao` zMZs!QY|N-JPVg|RRk2=x=P|Kb6wA1jMiC6ql?&)RbXHYSFQ8E4Sgopd0fE}lnrunB zfPlc6Rncp~#u`s#-UL==k;kR-)&LcoJtF!s#}RI;MUMqMhDXq?svZwJ))Z}BU7P$p zi4DMH=@)2#A82ONllVBXr?6XWiLKG#VHRs5f(P1SNks7oTGT`oh0ZdnxhZCrWHV{0 ze#$Zn8-+niS@ZUgi8^vrUvB1WdEpaokWbH9h|5{agM{G?p|2XrIvGF?o-mx(ynR8Ji zHa|ZG^HCPY_)^?&{CmttzZ&P7YPoSuHEZ1YXfDn91@_NluA!q0Hy;0cb52*wrjNmz zY`qolDY*hO&OWQ0Mcb*g1^2FM!W=Y0eWr%csY8u0Qp8SCJF)3P9L*Oi~*=4O#poS11&uP1U16| zX|Ie~GUE{H&k_*rLNZHs41khJ1|RlanPsv7Xjhe4rU<~j%va4U(*)pKzLHsTMY+O- z2u&Ad>|Vn>O@xuk(-!iw%Zor+d9lh@UF$+%;t<9(B@RJIjYBZT5{EGMTH_FO+Tu_Z znn^&klgunhF#z5r3qWl9BD4ae4OL9h3A8JiWr6^Ca6z3YK-#y2XIADzx*NBzi~$Vy zR^C+EJ!9|fZw2jYU6$4;`boctUHou``i6XrZ9q*)w+!VQ0SC7G+ zsR`-DF;W6%9>>TDnE4!|Bw!YBjGBPCoMS8k!?TSeusWi|riA10#27r6!)XE*X~!|? z2^hhXVPGivI7?<6Axz5>2ueZDkR5|Xt& zlpLIHNH+*@TA7iKoXC`TMskE4N4Pmci6evp%;6LxN@8Ii=6MrQ$wjahFcDskz-qxn zRB;3rbA+HY<#19A77<7mut-+Ufi)^gP`+|FHG$&_j+r1ZB5OHjqQFq%au~n!PRu^O z&tqiY-HLQjl{0ru6xqjD;?;GYvgP#+Zfqv=x;b*mss>jLN2bS-z8Zm=5=YgTd=^QJ z1*XdRrOQa%A|=I{QPX@;l_kA2j;{1^v!^C-`fBSqZdwAa{#uU8O+b0+MjOXYPr%0W z+>wB-5w+wciQptG$?-?(euJPKOA|qfEhoub!wWWsl;HLlN-UZdc?=~MQVXtxsF7n8 z8F96!WAL73%Q5hcK_&#zI#2jQyJ!jio1T*8bYn?4EZIKsT? z1T|xftm&JeW{#l>{{$^-3=KXC!sIc8n4f|?X{@g;cow9~Nb5h@q(8yqHxtZCXgsX+ z&2XDOV$z5s<4u+vN17gC3W+1lhDwd2VrF6jNib2Y%HPnW5!m&j5fHAErP#SS+!T!Z zqT6sA=*|wel=l;~kmw}B6|jnIh7paPWh@1c0MH!M+1=97*n_)LMl5bklJ2p{nGa=2 zS@>&w_1EDtn^6gWw~uY;4&u|6`D!_#qJcCGPN+9Fx_2y0z5Sb#q&5sreWY9!s?6 zS5?MAH8svPCyusR@>j$mNzK0|0aEfk36PwBeF7xqU!4HqN3n0oYTg?B@kf?-iy$zc z%U54#+$UctNe|0P$u|@=zq-CIE}1krZdQWvlcDe_g)9856jxXsSNIJ{`VJHZEPt6o z+g}t7Rm*RP+a}ras}n%^?-r{2EZnnSBzU$t?pZ*_5TlfQ0M9o1>Z%hPBrm_-S6^9^ zV4@@6>+`r05Yxwv=XAt#mzCH0bvYhSPwmwWb+t7{8+{;4$53%d+mWk$$C}ZkN;c-G zuCJ_P8HEb^w(?`ExWzV^Ip{%!x@#&cN?Ar3Xu9%ROu$0|4T@42kd*fmB!mElmK#Ca zD=A;J#j5Z@0vqLp0a^K`?SeYyvW$mFL{^@QiFiolDH2hXS1uHp$1;9HB8u{UOvL4e z$U7vWD)(rjmMh|(%x4+03K3O#T+3LiN`I2zypLt%0U59=eTKwsmbl0QmN6gHu+355 zPz~ix#G1>*&VLWT&+EJTnre>`Uxy-{l+}_aQ|^`=9^cC93YPH$3yqo89&`yv(@nZ- z8t`BTFKZ4LCVT@(b<~?hyTfA^vy_*T$kr6*s9yqGe*qOaD8}>^IXqrdcd=thtUSw6 z5i6HEmM{0ZjC$rf+_7?*!xdv%to$e$)?)Z{_`Kj<0K=V7f+G2_#NnziiZ#kxoKs<> z7sy7?ead-`R4JjTt{xzpl>1XeGXR~CP`g0uL4Aq-dxg!6ro$EB|&>YSH3(U!>37k2y893b~CN7|mD*rYqkv7<1zq(Vy~c z&^X;ueXXG}f-*L%(fmr`Fv`ng8XU?yhK7>326V4x(%^8^h+I<&_vJZiC^<>PlX=Ql z(}aDaJJ>%%=wP11S6u-O#2MrOx*h>9aR9L;;AIY6A%No?!0<$r5C;$z0^Z~RTqocy z4!}JE-pO-#s%c0gAj|%wD}6Dl9YIr{BQm9$X)gWS|#>v$fKt)WAfmotElzD+QpzVg58mBgZwmKT>s;jD~{}cCH(;ePwZ>^EC@1PqtxEkCTzECMo;^|7n(3a5B=t=LA zMR9gR0s1tlgKs2Ey}H313SqNDIXp>Nc5yro=!gqbc)#}4xT=@abBkyz%%kWegrFS; zj(9Xrxoxr#$Fjly zHPWugpc-H?^DXz`RsnxH^d~7&P*X~dPRUWCIl}jZWa1F#CbT@o>GgbOxveILBV8Z$gjdFFH-J90puiRttGeMFTe`}ibZz+@b zGN-<+$Jf=-Nk3bt>gwF&@4yd^j0eC*;TfL6T89hJ^_z^JG2j;(31ST!{9-}N7QHb| zI+QY%E3X<)IgjbsC%o9=9l6r444W!9@*e}#tsqN=@opOaXg*u~Sg!Pn!BWxDJuc6p zH*=-_gxcwc8XMO^-gwk3LEnWYe15w0K|)v(WD~^L;wPs|+fzmKJhYERKPNCNNn~8~ z&U9&aYAh12mY$BA+x`MO7Jb7ZJsFoX0c%3m?ieDO^n~0gxA?G`Tx^j33UdPS6&|vc)^|r9T?+tY{l;w0IKH ztSDw`LgKNajGcD>m^uYAp*r><+4@%-Tfnn-@niW?#4s7l$ey+hb^HNUyyfe7zVx#R zQ>o9@BP~4i=(6Y-!j+cx3*yKY-B%#JGGPkur)@25ND@Pgx^F_35-6>P2HvmPqGt=F zcZHazy{+Y@j}T%D&lE^|O@rf|5_>8M2`eo08{HZkRo^X?9-c7OTqolRc>V|!j{xNO z;vPSo=}xqfkoZ6L*+6=Rot~!x`^VtU|6%OY_^?m&_qg-_wQ=tJ7aDi|<#F%)YqZ}b zu1Cw>m8H()b!|P36gfPW%)^_I5@xvn@7Nz3z5yG3b3WN0`(%IYll`$z_QyWiANyo~ zEPm06%cf8E$3EE~`(%IYll`$z_QyWiAERBcPxiF_?hn+-3aT+}N|bEh^o(q5JEgo?56Id-?|I{H!l zI^%U3Vrx|LvBf`^rSeI5s4P+5*fJGw-eBVkF1k&TYK)5MQKOHnl{1JW3wAPTMhk!m(auqSeB%f8KZbQ;nkC(b~!uTP=8?aj1y1Vgukd~YH zPwa8~#?-TTr$q`#M!dKpqlmoh^3QHmD*+JaY385S-7GZrn!PyWX>XVDj} z(l<>lc>alQK>r!vI_RBGaesbpm7a|GV=53nVMChpiuT97fKif*?y^ZorD-Db+^%{& zk6!(eRlD(OE+~mteb^?2%&KDwMAd5yUQzW}$wj*~>0Q%nuWMyZ!=Lq=zo=@I{fmFD zNkeA!2}*GQJDfL=Tu^U>M3*5BQdkVZd9k{*(cG%|#ZiaDR~ zd$i2LZOPJurolX8%zFWpd$ANTaxVst&0yRkcoO^E3D0!WJ%SC$u#dqFf`_nCy$7$T z{X5(sz~Al?Z@n?z{P>aYxrwq5eb0^ZJ6XJ>P3xdphyf z96x_k2i-VmZf)&itAS~x5{4SlC$9ci1uxdYi*vp#5pjJ-OLI?0C!X~ESGuu7$LMx5 z-leljqh7o2R)y@S-eu@ z#TcECpt+a(n0+(;64kdr=}34P$&Uc9!W(7iX*%h;g6lC9Q}J#>Y;^Y|lNfEX zOvpU5nM@!mA|fIpAd4cK3W$gZh%CxOSws{>L`(= z{x>q6^z^-T&iPK&sZ;B%Tg9!g+hM~?X}?ob-fzc*d|Murdxq_N+CnVgIJQ`gR_XzW zYqdt+FSS|ZZY{qI?-!wITgqi8 zv+qcGPlxyF>Ka-NGaGigRlv;8F~BwRZ-v9R>uo~!Z!h7kW9Bn(zff-gCfW932Ix(| zBw!^2mZ7rZVwMGRgW8HW?YJ2jXkE7KC~OZWA<5GR_FK5X4QZx8aXp#^N@Q`jsIX>u zcyL*@YY-ijAF8~39zP)AGiD^#|IA00g9c0ybpF%JV@o6x#A8C%9FBk@FIM3q$BPf( zVozK!#UtB~d0fIX_-;hnXP=Pt9&`P7{oqQ}6hqvjF5wx@0i=6Kg-J8FO4)&}+X(gn z9w~7zzIV_Lmn6NPyLOP5XA_>`IhGc1nxr4#e&K+s7Qcb(fd#tJIc&^A6ed0T`=YYb zqLFPU9?P)^?R_6sY|VZs>0RyG33Ewnhc*sk(?i4d5KZOQPv^nDLvH=_AqF@#S{3)k zn613l#(X=ktu-g`wj?_#$|&q#%DOn)Xk^=$?e->oacoXv_V<$BxvqUz4<4lpqhY%Z zW^fB*6S8H<+0k$h-n&~GZpQ$3XF~3K?%MzNxaY^&6L%!m={$<&F?>&?9q&nccc}e0 zmkq67E4!f@dV%(k{UFgdWUu{JKLA}v23(AQ0c}!Q{WpL7fU&6D4@_X^hL`Kfs<-a+ z<{hw5Pq&?bVEK$4*}lmmfR4j=D$c9w{6umaG=e7R5hQWV9thYE_Fgju7vpiU+lfiT zFdaclX5o)lnIN{P(G zu*Jd0CB56!hRZ`Z210M{Y&dw@-Frg&JonwfCD@5cBfC!EQEjX7Jq;URbe@^~4t(AO zH6YRL&wEFsJsAMUB7D7@ywvJb5dg{=Nm7;|bU7)v_>}*Ma>7FYTYRy#N}}_mBN&;}LvEaJ|SQ0FyYvZ6j^*uy+KK zY=VwP($#0v$W9}VLPW(j_AaJzlh=kcnjkipYu<%`J56F=9NB5*k&rv1Pt-6TZNN*O zcZS+6-rcL-uxvt-hwO-DXVjGVjPUgDj@iNO*>$1?e4Pi1c}u zsML@6`4b)|dJN_bo@e@xPkIYv>U(HSRkeJEd@Pc?fJaa<*xwY0dyQhwP5fYlmw6ty zdI7$lMmyH|xVH<6xCy!*X_gIz22arY+lt35mKf+hnB7Gmg_b!#j+mJ>R zH0eJjjeK@{5Wc%$dI7$A1=47O8vaw#cnH#WD876afi#|tG@77;{4`!_$4_HN;2Mdw zi`OsBRU2nEPESmjj-~=z$WBN1Uj;Yi7~CPj2hFs>(;H_dCM=ZTs}Aymb1hArzLVe! z+8EsNf%jsD?-&Vru~&zH=QIgfbeIllPE5E+LM}ETEr|)&Nyt7W@GRIc>>uqjVF_{} zo!Y087`vdlVra?Wy46^?gM|Xp!%3%h!4tE!a*hj6?nz8Ia7VHqzGotfd}^_I#qs`s z+SwvJ_Pv7d3e5J+zAov#H=|zL@01AvL+yj>?tDRVH!$|#y8!d3dt=|oUq~9xjrE}zfJdWaljitXpTf}hkfINfH82c2oZ)7>3`1bx5)ul7 zvYOXNVjztoB>}OB)FZFzOpTFpLS*~Cuq?jAXv7ZwdD1&IGu}C72d@ucewJJI8osM= zJ)}6)Y1FC+J;-2go1K`zGdjMHTW1zm_WbSR{4GDBXRuPo{72gMp|@g{6~52HwzF?b zdXFSC%5t3MsSfj?>s6cpH+)aV+jcT0%Jj?-A0sAlD<71v*N2bNKUd(3(O6>keMuaA zqwTm(ZO>EHr-6Bfv4IwgI_Y5yUbj(m%QM-75wvLO@JhE4eBIcUHXX(nPoEOA@5ibZ zV^`yvzF`gLvUtOu!rUjZ!ywZHgu$-{}Dh7makjv2Y}nZeo5uQ>&9o7yW=hJSbXn6U+3VTCcV2d<7N6jw_cqcV*5>o z^K#maJZ`V)rwmlRCbsOi;x^K2;wlKt=4@$QFf#0V0&IE`zFpY7e)g?N@7`3#*frE= zGMt;@?7AanUUZL%%V}N$4?YdA4;vm0`_VeL(1w>Lar(E|(6l{l+PCT z(MN{Au?#0LpVETKIQGzwQtl?RP=?kOXQ&M((463L^=^2Kg+Ol0>U1XY;@+0^(MN_I zX~UiHy^D7IdeU1cc2u_Egy>@Zz|-)Z7-zoEA&{RfZgWS5%}$2z-HLC=uCUoxlioXR zRj1or!*P|dmfLnbp{<2u?q$x3mXr4@Uj2BQM^P@_>^ZB}b*u7unX;NbZP~jM=_%dZgAO=jW%ErI94rJ?2O&|bxYOFEdX0I#J6{tkVWX}RtGoY zWgOn6E*PU$kG>(XfKer3r^(6W>3yjiG-Vr57-J#51Ej-KKMjy_igYMQE8tyO!qUzD zv;Axr_}M=AR^Ehid12D~M><14TfB0m91)~Xhtn^880Il}@W#&;_tQp3S-fqp#Mm8R zqdRD$?B94~o*^Bvb>tqKq3v~yL4xrJs|Sv9zBXe|ynpl#pH zP~@GuI}~>{=Bi#VwtYM7N|WJeoy5TpB)zk=ZHHDzO>219#+vq=fN4*tZQAgAm#==T zH$wdOdMp~h72hs&Zuo-c^PZ|Z=&-VSKH(Xb%VSOYM8Kp!;~iynP4dKB6N&F4Og?dI zhF;b4=n-PmYhh0s?JnB%+ez_I%&^Nd{bg9 z%kd$5!G13!y%V+l)B_Sjok=4_D$ma`RK3{8y7VO8u3tMih`s^uSMuJkTNmJNk>12+ zKpHeF=~c#trWm(;UVDW2?=GNbJ) zq22+;gb6Gz+p_tykzqsHZ#;YtbNz{ff1mWuNRRhzX#1Lm>u_T+cW(P!6KKu&aRf#B zo8!HO>jvd{KUbJ>2^&9K{0w?z*cr(kdn&%i!_Kqu4Eoz+#8=m^Sw4K!Vw}N_UFnWE z!YS*9|9WFw*W$l1f!L~Q_3FWu)gyTLpc=T|t?jzS?fl5F>(Ai7EaVf=N1Xjq(z{UE zb#Noz+h4tSrEk~uYc{M~ilgq;F>Ia@<6^%^z0iaeRuULv-aSaGfv#%d?ZAQ0iq}W| zaRF>kV_rb}Z%TR(r^K%#7BYr6`~_oU*RMZe0%HvSUebcI3j@m1*p1@#VQbdYi}3B+ z7q-4Q#r=d>R}ZaTKe&$DxEZS%TO0oKjagk=?}g=CLs-;`xfTwocHk}1G>8g)nv&}m zuUfkjHPp~5eR%1;2*uhgt##$#>LZ3R>p+y7L0L4kUO$doL`l3WBXd106R(pt^@a(F zu}|YW{=bkpD+m>h6(>3t^92s<_Xdq^|Zr;X<#Kt6Z_;PudV zIU4oOY4~1FJ7e16LS<)Jd$f4v&=IRwVfz-}&W8JVV^Y`7S1>RrsQmU^W7ET5A2wwl z>a8er3hlit5P)lXSFxO523>2e&b!2PU!s~Y}W;;fp+^28w{qU`xN`GVCr-mBN2 zEnf3AGWsm6!&l?`B5nNTr1uA9V@@0Rb~QY^(1dnE;cd88pM72*{zzYZ65rt|uod=l z#GV{%r8v*BesJ~rHS4NJt{YsAg~I+Q*+?9sOtr;x2qVL%&PRL0mShv{bWPG*u9_TF zgG;a|n%k%4zg{P0k?jZjq-*z6WwA@_W^84sN5|Rfbl+B+P$ZqT zHav?#7F~~kIg~6`l79f-llMpZpYXh0)JpP3zalaW*f3Q-6N2^5NJ{JRm`=Y4-)E6l zePG1FpGtaT(#!D(XlcUR>Gp(SxrZ6PbVUL|&){;O2^-PJSnkYefZ+A*4qNc^G`^wy z#~QQ|a$ff@GMIhDcld4Cjo>Nog_((j37UWf^J^y0N+f3SB8!WCaiKm>j^s3BwqWcY z_&$m>&;FC=os3o2D#NhXpL#-ISh{qIM|658Vb>7MT#RjbyGrlU%(6jjor=UR#RGZt zk`ta`Ib5eV)NZnzj~t)g2WdSB-(#6x>{w9N>0OEQTMTU&3B}IO8@QVTM^B%@{lEq} zDqilr%J}y4lUE-Arw7u0_l1tH|T#0YT zJ5YcA-lJofAii+4gdXGdjiGOhjkcX5r%c_0HwMO|&ipjeIr}6WSm#%nX1>XAJc?vv z-^WI@7mq;bC49YU>DAr1PYf>LUwrPuSGSqmyJBROlLe}pxExuVPT}c$Hj#+&;Sutr z_BJ^0cs!|XX+*|8=6Nagq}JrBA@7bil<+w%>cb=C+_CGi8sPjr;lMfD{W~q?HKZAT z^!~n|FdQ97>bw0H4?ytxywpeav0xJu3x+Yho!IGl>}|7RVEs|mm0TDgyC%$kIypes z(5v0NetoYOym|AUPVW3da_2n~W6woI7WDDlunOi?^R^jEr%+X77j&){qQXtHpkx#6 zpGvLn!h5&+I-O{3b@AG=9R6nLM%k1B&BKFu8KzKHMTO!Hqn?>H|L+KtFFERU)r$BpktRzBa0^xlu}vpSzQW+GcN zd4}hCmFSr9?#N0r^O(MS5ISib^7Aadp*ft9mEOZqj+fwjJk$HE z=Pl0kug76e!41GX!|o{@9=rLWG&L^J|Gj_#iXp?aU*W3aKs#urJnK9SH{yG2Gq2T0a58nq>}?U6E*FnaMZ7tnV8;j zGOmxAnBE~X33sW?&Y6jm5c0uY)7xd51uWCa1?wPH&SsCNnX!8|dRQd*knR!ZogCQtHFF+b#705K`MrOixU`pCH?$w$1FC z`tZceB+b8jYE9;?LLhnf)GGYl7Lf!f#R(48dm=KsWcI}6cB%L6nt4-ZV$y>>l&`#M zd+_*N0OELE+GCs4cKfH(sg0Rkp{rQ}GNN_c)R7DW=l1fuP3rypO?nynih6hWRqN*A zvp~erwA7u->@EsEMC0!aqvP&PV!0G7@IX5NUn>u-9S%w$kD?wQ^;H9oT|QhKy7GEw6spSGdB@oyTwgdT^aN^ay-{_Vp2 z+lKkKqsqT@YMcmU!HitM-)%B)$KTyj)y)3*O{d->ckjmEvGf_Tcqw4wcU)?CVloNa z9SsjoC0@1dcs3@$aEz?Vw@fAv)GVB2MtWzZXuK#&({nQu_vN3d{FA}ow3lhtd3Vd^ z>F438(2t{4CGTMJJtr}jHUfM`YAh8YUzjN~VC}tNd)zYc&GL6I-jn)fQgMx9B=ig- z3OmxCJFBvh&it1RLY|>4(H~gCm<0MCCQ~-YhCEOdQT`*+pyCR|)E40JG*0;F#BhOp%bqj&6$1h zVreDfJZTa%WG2BurM~b`e$xl0wt>|^ngsuosKaStU^?PPX$7|N{p*6wi^H*aJc2mj zm_wG49Wv6`&{mn5A$X9VBC1|a<=ntCkm zS+)oPkCig8a`WQIvj7pt8&w=r(t5FcrI4A7z%Fzp{7PO^r_p!#=IP@he9(uZ`RGeb zIn6*5INxMir3uqNn^UfNs2y~iCpu^*0}bmYQ>ZTnHV>EQ#Q_&b$}vBsb|W;=S)-!3 z1N(u^!{$kB$l33Cu#1O^kMQau&0NMU?Swi{sz&~rMDdr^rTZJcHoW!t49)OrjC4Aa zO?x{_+BVb2c;Fh+@-3!~m40SY>bYZJvlJfJizlc4Dz~S4ywj#+Jv_X5w&X!((04iY zp?Ig!m6JYQIE)qe&~yp)qCV4Uc^gnS z-{*Kp7cjq|F>wjs5OBD}+u+Y>U?0AD@#P^{0K`%}>(BJH-Pi~d94gSEQElRi&C|h? zrl12yP+1+cOpG2~yC6MhZ=Nn5>;zp8CLCSpoMrIchnbOS$xOt5b-^2^4rOXrzw9t( zCO_P%7G*@oNk?TeYtPAQ@F&--JJBye zocDuKQD2-daXlS>Yqmpmi>{q}-K>(Xc7TO;zw9$aCZ1J0qx_u99$urm#n;H1g`0lE zU_bI}78*{~EU?X5vCY=f&8?rI`#w%L*mAvfb#hN>=sd?MSxD!nw`w}MJu`Iv1Eq?! zn0O?;()~{6M8)LH&Ip8Sn)1GN^PXEABVG?NUh+{zS=TjZZ&jOM+Y0JF*e$^_OiOcO zzlEj|JMmAj$g<3?L{Uv8UPHfB`ynF5EEC+47q#G(;}E%BQ{&j+9tG3zlEZq;>hosX ziJ5&d*M6j2BLq{f>2YsHnlMKWruDnxatFp8>Dhad)IgY-+6nV#<5FuGyuHjoyeYlo zF6r&rMZy>gk1cisdFP2T6}TH%SXH4w3VYx>{RY;&+h_KjoF2z2j}wjBIow0JLRDP7?edbSvB)6La-^8 zR>@4Ln$LR8>##uFxx*?He#G>~3SzIVtCL%kLg%BV-u&Ot$t^vh^W#CC>bbycSoYPv zp1SOFXH4k)33b93Q^#;4J#H67 z36E7V9%S*&>;fO$SxP*@H?VlK$l`HXIyDT^#5ZE_#OH$Yj1J|0l6suQnjn>VD_a^6 z)0oQ#3#R%+oQ?i2K%tt+Yy#}KW~-%3m{IBTe7HQD`+5cbqxy2na z6*~qZkJ;%8+h3LGt!97jp@;NuqJGr@L%qxQ`cjFlrjwh`Amf~wN7q*1f7?uWf(^1v64TpVfzr!$<4rE)iaIWf@yc%Lrl}3Ri%#{*h|Od=VkW5 z{gHH6%+|ptF5jy0;p^;(&m$aDvPqQeL1&ij%Jx#8#7NuAyv4Y^Q5S>)Q}1W9zpXsE zki2}&`=J4U;xtk$?RBA$`4u$dHBHuBZz2r$dJwi_;f(Re9pDQQ4-GlDS@=K?`hPZ!O4p)Rot zb|s1Gae&i1HAq|U?GZcW`YMD0Vk zalIdxR}Uy;f9$_GHsQPf8XGa!i#ZWb)em7!^|JmEmwiE}WoGhid)OzZtBEm5q98#`=j8^t3GJMf1rD13w_9Q=eI{9yU)ve}Jnz5x>JF&-RInpYf;Q>-;zo;2AyfR#3K#@0Z18O*d0xRkW7fLEJ016Cx);C0Xg5|<*<8TA(<)5+;1nl$lF76JFm7L+b9|aV!TF) z;&PBNq7zHf5V*I@c~Jg6yq}y}vuFB!^4`Ia;AXI#1TPavgHF(iX_P}eBgQ4BMKgP= zWx|*<62+O!I~a)XYPLQ5Vj6Pa%pr*6hbA^;3J5+FUnDx6-UCZ)k!n2ZVcOYU$Vh3I zrT0?d{2gznfJ8F?@y!Md%~0)ZlR9w&Ly#1Shc+q_w+DGrm!g4Fbl~~L zxlaJx0lNpF@t|g84wH%JQ}{Cdtc*;qaoUUb{PLPPuJcRvrH&Q-g)Q+_*ZI>)zUz-h z;dV32`oXs%&$q!W^_XPp$DFnsB$&*p&UK6Hu1b_7a2O@MayGqYO9kv@xn?b2LL3uZ zPiXwuFdC1QboWWR+vC#x3Of{77^fqHxJx-u{X)Lu7-`G=zLJTw>;nN#R#SW(9d)4Edqmg4XQ_4N4E@3s_& zuY3dNXIqNH*NuVmgDu73Tgkw|B4X9XZEk+?U0>L_$>7klP#)kzA4;6Xi?R476CY~f zFBkRT`XK(Et*-as?*;0beLDHH;V&o7yu>_1#-*Yq5_qvbQ4#9=Mfg#S^DX0i!#Eum zCkf+#r4ATs78e)bn@pUJzv`34&jt7*jB)orJK)Mol(P7_KrR>Jum1_8cP4_7#@!8d zCtT$4^%8!(NXkf1nLmo^Cy!Jb3;Ot@sQnBzpKWpBB@W|{qWWnf$9SRk@kdcv z+uxzM?k8M<2&(evn}C8ezheRhQH4`aEx|2fkmc`kb&bF3a}a)1Vwe{BY>U5L_#%QV znUn~{Rk_V!{87|^e^VY2;tyLJCqHqAh)87QcW-q)fxr9eaQyfmrUQAvACg0{aP%lD zW9xsYN7Ze-nu;$>FoC~1LvUq33M*jO9Y77)l}JF5xU(SOdMtlgAQ@|q4PfzyRZ&d5ZC)HP${e_S~hNyfk@;)2l*$An%N4tuTn78Aflzs(fr9!Fp#3IL7ReZrrG}_% zj9wMQ{B2R!@@uLj1o&-(Tx+{K)5S{AD1s$j8T}9K%rO2M zxAlp**csnQe(iw3kmlE#Z&IAz2~oYF`k(|3B!|-SVYCj$*BRO{yiJ0912ZU8YcOa_ z%HfvE#*9&vXETNVM+F7ap@RB+7F;lIH@8lptY5EPf*V+u{WAZ2_+DSvkD5tnfWSudBN<0-m&~`SJ(2pT!-Vw|HSwv^CIHI3=H`&YuKorV(MKL z6o@a?vK*NY?G{tDtDr#QnLtE@KN-0UPFcvt_z{Ccd7_LFh?e3C z;7y01n?~HmMOkJ4VeFhX;2UapauO84WzwBCoiwOn8s$T4vp|R1V+B-Z^RB$iuRNrHL64BQ#tP#!Qi+ha?2 z#+&eJvXLZm!vNNY-4{+|X`)8Y`OhJaKd``Uuxwvn&+F8oa?9MjGPjy~vSAP+T{;OK; z7^t*%WgFzj4{xYe%L~fY-g3U0@0y#%t;j)QhEOWSZV-C&bE{3c#_nogSC_%rfG5Mv zx$5u~n5|KLAT_I8?9wq{_Vg#b0~n%o(;^5tkRd=~2Ig>oP$}O}qjk0~$bRt1H7jvY z;>y9S!OspIm?cBLeNJQc=y%F>Ye!o(KbH|Nbk55im|ebRUBl2j8xI^hNTPD!(Ej^R zIZy^1EED^}E)C_rPUWxFj@F(+SFvIJlM*u2!ene=WK{-s_jlDuS-WPQW|?8v8qAH2?L>yx(Y9XF)-w~U*ii=S zuB$6hhfJzgxi-72v#mO>SSok+_GG6uPH${%X+fzcskN;$TjkMbE7#*xTR7h8HNz{` ztvL#jek)wBQt0f3+45cGY$6HoB~nirWzAe7_@JKtuC9dlPX4ggIYRkzU$H0KG(F*c z$&)1m*#;B}B@TrW1RY-{am|L|2o+%O1>l_c?<&I;~VD!8}55)A*f3P(HOhf7s?bNYzE zVVsq{u3<`+R}IGMkED6VBMD2VWO>=JbZS;*gsRBsQ~!lFtRZFn>K(|w-cqre?{2Af zROb|XilxpxTx<@)5hUwnjFZ70NQ|joJK{LX{cU8(H6mf1F$^emF`)|hpo8F9Q?f_H zk)o;z49qUjdP|k!Kozwx&5E!-l!kIQq!zDVmGBNjE!)%8*;7Qo(CU>qh&kbvX!zDj zXWo#oITOw>ayW*o)%L#rYJVB6TvH--1BxCtWkg&5ZEwt&)Qw(x3|vBV8&egE@UcQ` zPX)&M6G)v|zjnp3QtNTt;8O_g^+OZh)8ujko=x`5L!8Q$&JrS4=`2+H)~u&fJr^N# zuYWJo+tl9P-<5@-VgzA{^Hb$KD(}92Ky`NabrrjdJr#6A2%Cckey#>xqZ{y=AW-oI z2V!1psS^fJ@QC&WF*F0MqHU2KS)g9zNVb;p?3m;${cuahoYl=2YcbTq52HZImmG|~ z)>5UXSKwinOQIBm8?}iQ1?HuWWT`l>lXbD6!W>_TqZ!<=JzQbnUM{ko`Esd>ZSd)7 zsBZ+g8C}9FVyOb%WPxL(f&4WqE3oqnaBgP8yDE+tiyM#y?A2k(e3$mS842&2IAR@G zEeqJ|LXs6fws4AX#1U)58d<1}H*>v9cG{$3n0HsS$Uz}{{psk1d->71uhK?`a;40{jtclVhm71i<+;@EiMpP)^GR3&@^%oHX;t- zd!xc^?tJk3YS3R^fq{XNpE@A)k=CAKxvW&6%=|2tDhiw$Nku*&4de$L*}hWeoKkOp zp8%smdN7VAursWw6|5@?)L%N17|fK4s5wf-!vq+9{ZI{Ze3U}~fd924&&)(6U_FS# z_J?aS#H)yaK*?`H7?KD{0et+ovBcWozA%7)FS2DgV!1f4w}*vZV9^#n7DEbyMg#%5 z$;xq{&Jnw@^%F6qSV&h8kbexy_4X78Fo2XULBe}7mRJ+k3Iq5lk`s94G0JRYYZt4F(3%Y=X^Pi78|RTk}@Z9=x;HkILLq? zAfNZ;`g>HO4JaC?f5Z~wU_-(He!wbbYAkd}9M~`U(mfdSq3Nh} zlnNNdnNslYTJ$*lCZ_-I-_QG*_jA3^~BCmnelFW1`D#oR5b3Zn^i|H-u&;x&XZ zpyE^q!6eXC0;m5}ZI*a7Q5+~b-9a%abrqo?oKc%4UQrYWiazb27^iX-p#}O(ZI*aN zQ5-1xtb>A93S->4XoplKiNbewJUL!LP#)mtI?{}Nd7h7r2I#z4YCLp68pxk>WV?GY zFWAfGQ=*L`_xX5gJakYT*cUj`%GnGwO5268#CYU@Fo3`4$ePSB(D0m#Ymno?LjZuk z#F01NYv7TUU#>xphYtY&{wt2W@mT|p+`Oy?IUYU)0Qf6JKHu)tqPR5U_bX$mg3SjI zZpS$W0`ON^0FyKg4}bZ3EYU}|Jw?F|$^-ivD{j)Iv0;~MV~Mq}gYv-srigdYEQMlQ z|D57H<>eg4UmrsYn>!*2%p0s+dv7VPtKw!v_FEB3ES{AD+KpC*eNc>dRIXvr8KuO+ zIby*3jz|@l;^F{ipU~G3Kvd$l#*o5@5kWxSX64WTRq`DIh$8pB2q6~E3IXhPD^r+X zsgzp%e(D`jN-Ufs2E041RNGuV+(+jAFcch%WCQ^7Bg@~>+Evk+iafnLLWqU3LIC?6 zWLB#&c}3BmDRHN*I5O$Gr+nKXr_CJfX(ZctEE15Yp+Up^=Xh#eY%LD#rz6sMJ~baR z{-#v@r6xl?4GsvD{568nonMg09J0yZXKOOlQ{sR?$w}$5J}5h1DRp7qy}zf@-qot6 zoj7Un$yy8n9W^na;*=0V*W7Y%KWa2d2D0MRTJ+i)TnK15Er`JWkuehr>FM#*n&^%= zu+I!iW6;pnRl;)u<2vWZ66@fHFo6FB9|FS#Jf!Tw6DH;VZ1ygQrN&w&C=KL`LbBz##rYC( zwtioXBi6<>vVi?kNU~Dw=~k0lfW0J^_^J%@K)SQiU9I$?LsaUV$4B7C+7Cu423gg> zae|2PLrM-)80gNZdBhwV#9sx2-NXx!!w-;$eeTM-#Y+cqsI-0t#nSyq98t$@hHf4V zW>6f+zx9RZRLbpU-mMAN{9S}1n9WXV5lKf1XutPmD&@X)gX@9m-0k7JkE+%1W14MCD1i6NXU&R!{KpARs=|Y_9e;-dh!MeHQ`ec zLL8PO1hBvOGI;c%r%X`(o(ToV0r>)edDiDgb{ibz#_3H%-S$kqQJPyi= z0O=%Of(2`E^{}a!J{cjzVL3toyEX%7u1aqKea(C?mQb+K;*-Veq9noddzx{Qfc&N- z*IOy&`{t^KDu=QB^)WOJsvkO7P)8Q1H@K1*rBv|PK}8i6-?!q3HE|tj0N?1!qDz)H zkH;}jc2f+kCajeO>MgEhU#Z83bZZ6jD=;Qmp`_I0u{gYTI-4X{tfkW6%4Lxg34 z`jm*m;|QmJ^tkEi7*Y&sL>8!j6;UbF#Pu&U^0PI_G3dUie*p|=_`5)$P9nbk(df^| zkYbP{vOs-7L|KOt*8FPR7h{Pr$VSfmsu=%U#APVsj%SYDhCXV8HC~gGZvLDhCrO^#QhM{uC$dPuY<9JpLavc>e1QeVd zL@0K5Vmi5Jj>-yD=;zd;*HIAwfsXTn7=DiFQha_5vew`fJ73bjP{r^2+f=YNzcnwD z6U8!SZ1jpzxYF%$G!uFMsZG2*;(n)ym-_%+8Q_~6lE1+HVT7PTwQmwJBnG&F%*M;OCC5JRek>WBjLms%2I-^#k7BRW?LB+BAL z5keebKn!rdwo=8_?fEr&V2SR?!%<2NKt~XWzZE%-)aJlJ&95#7zl$YCagCVyRYl-2 z6{XJh-o`3t0QBsHSRjY`?(rIQjqf;ZdmIKL|3nC33FZKnuGyfi!olnxYI4-m62O6; zCmj^5!wIGYP2Hbr&}-=kVL-!EA%s8-WR>~TH96{O3E)7_GeMM`DmX~OU&92AYNoxV zm`gSw@*)Pb=Ym42?T2&!EgW7COr!wzd{9U=@Tk@P5e}~hW}5RCMW_?&HQO-A%9)ug zQ=tD|_enK5>S+n!K+nkz3Mw4y+^2*I8a3?Pk`2bW zKNS@6o%^(Kcs(%V+-C%ZeCIwh99|F1IQLm1WIVGm?A)KNLDtYQ&K-b&At z6iclI9gqk1#g23zCKN0-nyxR!5^F&R!~y+fN4k4xb=!vJ; z>+ia=_lp>kfa(gvkEAOI$X|(^lzBde#gYm$rbS2p*RjMfY>Y5~AF;Bs{M*2y()djb zDHhZf1my3m9MGI~1&>Auv2a!hV2_JTsi%ac1b&92-q{om7bvbGP$MQ9GAISGKPsWN zRy=jXG>T*jO6`-OU=1~ci~9n2t{~w4Y~^gl1xJ4>93D<)i9o&xkp5yNg2{X)LNMuc zl1Vfx2Ds;xR4YcCt$0AB-*rJL`CFJ^(1Pg<2mk6sH{f%ze*{7!X(Wi^2Eq%L z*DP9tpbU3%STax|(#L!P#!Hr)Z_%U=?F1!%`xaDk9;>ea0-N0CJ;f44~ma|+^%f1l%PXrJS{d!gK?Gp`Py-bB`dVv;)QB=}yemwIM%0x7)ZMN`LD%N+ zlplw}YXB(;;QYkpZ(k_6%4Z(;hQe#$C<)-)@A8-YaS$Km|1?SxG(E0Y#**auasYfl zq`K#|ml{!(RM%mu3I~K7QC)>0mRfDX#_PelT%yKb-$6xn@SyXT4qAD|nsvj~BL|lb zuUV({!7LBeUl7M{Fkwbbk)r zhSm=cYM+BM{J9=aEq!rd(DxS~tBHkb`G)m)9?;#YdO$2s&(vawR}@8ol4pY$9evP5 z_h7a1Tnw!aw2=ks-yKOzjV$hwnm~Yo`+PjL7IY8*=>K%&+lLogY-GR-akN^SPN9PajpxN+apN-mqCQ6u=htSbugl^<(dT1O zWT}Lz;!sAuP?Mv+8XpB(E{wt8`!h-jh9Vc$VyLgfU_iyiF$fr5nqDQFf-lu(sjtT3 zK+%^YDA-Y`r?n4TH()vo@zhu6LP6UV zF-YZ#-CN+wTJ-u_36@y?hk{daEy%xQ`1_J>N*Tf*GmjPAJ5w+a4by(`_ae$!e zn=Veigz+kzW&Ud2!-vydUyGrJmJkM1+z^K#yAHzFkd$xLqKgK0*43M3zhpyjq$4C8*-s1q+S z)@FG*Jq8DgZjVLbd)I!gc1LZNms4bLpyFdJJ?ykpFPgM{L>h6g{;tK#;8(iThby!|Tmj!~V`{Ho$29Hq%ceuX}%gd;; zKv4CwI2>;1V|1aN`*}T{mr>?GLED3INcoPrMj8C#7j;-(MwbPGs)yomdV2HNaMz!W z{#8Ammr>?GLEFP|NZs8=7pkI1YID4dCLacRejA6vtr_iFUO4^l>T|t}z5pC_KDBK* zU#@aj6>ctA#7?FB_IH8w^tN0G0r4sP3PRt#K z#$o|mo|56&ZO!YZitI;if9{{z*rd3g+g7$djAKD81n6%_Rhy1P5Tu|vo(BhCJjQO6 z`aNkrV$1F~CF}DeLjNF+u(VYzT_c13PZMGC=yxrBK7B9o1n&zHZ7@pg4VO&{SYD*X z!9lwl20sr#{};^;I*o7Wenx=)5^WDUbHLF3+yMRGHUq$ATVKO#Ll|iY9Jd|ks^ctO zn58WJQE~u`di;$sW)yjCbi4hG2WZF5p>&p9JT44ltSE-HoU&%@990dPpa&sI=W9PDoXQAh}BH&W~*@A(S1@!_etfBVrt_f z{WcE#;%eEiOt#8YB!A~objL>bN##52qx+-=_BzcrVG?3=pH#IE^yogR(alb?7&MOV zliF6bTjK_XOr!gxa(he6pverl-UrnkD6$(9rel%?jn(KrsiXU(s#mk&45Ry`9)#%u zvs0|u=nqS;I3o%BjP8>vo5$nL-ALskk6w+%*zHxX_rhqS`=s(T59?NHOrV!h!9Jt= zq>k>BT2cjy^A3TThv-(TaG243Qn3Y!u8~LgNtK6X7*db!lgcVqwwC2{dB6D?-6xfe zPjC;`(S1^7Bh_FhCTOD3eNxpfssS6h`@D|slghSQFLW`_2Jx(PBuLk1b$ zC)HoxGP+NyUJfhI!!dn@XWe$NJ-Sb-zk{k<3DZ`i`=sj4RZ+o??vpyYPpW?RVRWBV zb$9~ba2nkwb#$LpE*+EI44mCgv!nZ@Dw}Y7RlN(UG_U?!jK0+z4mJHhx=-rpKB}-3VV$1lZy8|W!BN%?v%T1jP8@_tQg=sw58E~ zQuWTKa(>|GKB;PD!00}y)e^U1wOgK!?vuLyz1apmnaFqN)z+`0`=pNUlPVh>a0^v4 zk1B19S(m1LWptm^?C3tJqx+;fyQ%8ZqL**7nD`slM)zGsuYPo&)X{xX^(!Z%`=r*~ za1{k*bf47GeNyorI=1ptd#%DHM)ye#Zcv<;vvXxHRcVH5>$)?&-=`vupWSkV%!u(S1_ID%fpR z?|@p*<1Cjl-snE5de?emL%jp)%h+&qpH#RHCj>|LNgdrMb#$N9=sv05uGK1c0j}n| zx#pDnn|il;)#~8t#XR0+`Qi;LhpR*D-j}sOL+`^2BVbuJv_8V)hk1 z&S7`gfogxbwN#;k)Rg2HZ>rojWmPD*giUyFlbc+&!3OTnt$y*rzQO$%9lX6C7|n4E zGZn)-$j}nUkXHPI6_<{3V7Q$1vCnhfTdK69=vv&4CpVxH4i zmsMhXfREc;k9np<;y}e*s?=qbC>*3%nIm;mH&bG9h~>ty!`PQQ+tyiWz)rqit4qQ5 z!HUuZ3N}iob4s39dkiH9O5UY#_iZKA3{t@*br!mc?V_m#q@qhIwe=K*G7Xe=mr}_~ z_;iHN352&Pff*olxP-2@f>JUQlunnDuap&K7ARecLZ__q54DsV8mCgKSJB#9`wP|f zQfr}eo}n^LeGV1fG@sfswTZDWD>8kuT5g-0?=DCJXxxfJD$VbgaGJK?4KMacI1M|` z3CD}P63!URcfx7ZPGt&Ob-*FfsG7uxEpSMcye81D3td8+5ust<UpXQ z6C?dzhuGC^#F(3_eM+us%}-Tp917OUsB}`(+5n-ePhw4bzRw|a6to1@uX6}JCf3xx z-XWAtUecDs4gpB2xYLt11PK*UPDeV@A(Sd*t(`_b%AufuY6@LxW00bAOnm8siZlnu zbd{xkV9BMPqkY1h{#H?6ZkVac<%fN^=4#25CYthC&!J#b$4XDXxF<4bD(&+TmtLyq zc+fz{xs+m?rqDtkbtxq*d=pDBy~n#0o;)rTruSnmrC=zM-VcezbfV^VxRp-HHk zOFF@gQ*(^>NtV(kPFilrwM=cMlboVS(p*5!!8Uel&_BO{tsyp-5*c#pue}h3ZNto-U0tv zHYPfCxnT09s>J4WYICv4MJUpn!%rZ=4JyTo3S*M$#zjHbwH2axwv8fOj_SRXyBVt^_t7=z|IF=%ECp3~@+ zQfp7S8@{a;{3vw7F$#YRGX>&6F2>;>Dh_?!fhd$4W=%zXRND}<7>$2w4Sn6!9&DYf z)B}mQFIZY}9_o6r4rr`iUbM8{Lcu4oD*LyJ&ir6>8c+e&jthv8JT|E+_xaf513e{$ z3LHk}BbLTf*?k(#bbL~xHoq%i05sY4G>RX5%%FBvXTotbYL{p{!O~{AG-~_=H8!Dt z-4;-3x(Rg>Dr!&C(2%b-X>5hYq<+$&Hddzv=v02PL(c`M%$ZXhYEwv>*>jqTx^%b# zk#Cq*$6V8xKc{PGk*zj0w$WZqRRzVEpAlqe3NSG0pHa%$a|`O8Sx5Iw>OMUS#{J(`8dzO_H|U7@^e*!^MIkw^BrQ&B~s-VjLNWA z)+>`Jun@h#$L*?i_0Bg+m0Mou5IZ{ObXY32UYyK#RdSfs?yt+ulVYvPho518Fkdpp!&-!xUCB{c10?~ueuyz^=d$TrBW}Q z)?o5q*1x`{(IFd1y~1MhuW~p7>JFUE`qsmvyvjH9BMi`V|)SU*~WH^eYzX zzn(sqt9F*U`hx1~)r3+b{f`ExsPQ=sMBO*I+M=l3sB9MO($n5U&_~HljzMLTcsYGL~kb9I&)>1r6!(4aF%Ao zFt8S5PNvchAmd?m@YIak!DM4*RP%HD)QF$%GTRN-1AYV_;s=c$XTBaWGr(1IzP!%4L5DSqz3dL*{m$QtDNMGsb?7AKKpD zG+l+W1a|o0$dDd2SVsp3vt}+q!^=#?p+2Fl&}#@B3D0#1CYx#||0 z(}afep>cw#YJ;S5)790{(o9K+)Gz=$T?EQqt@Cicr5)_+M@%xz=gbT>wsjUT^O&!6 z_V!?xRx{|dkWxi(vL(u_$H>_RNvK3XxDkP~g_Pbn=xRsbTB!NC)jkm99Ogky)0ni&_@*9D9v;eg+hl z&Z~VwizTptUgHyHS^{ggYkdNmWgm;x+jTyr+0nvw;Tt|>x}%2e!Z&?NQ_fMuhT(dj zl$+*gVs-c}50zjQPr5pL%dOogXVsZ=U8g{=Ryt7Mj_@@#1sI!}8gtY7fp}w-b9#_- zy2iXI!kNnjICHtiX`=n+2xoJUvpJ_RZ;5cWv;;6)T6pL!;`yB@XE5n4ChfOIIA;Y@ zG|QyuyAjT&S;2_nUdQzNRLE1TdssIR84VqW{%?7aP zo_Ew_Z_c3_2=VKBO@~U04U8YeVB}h;GKzt@IaTmN7_@8g zBx=pd^KO@0&xx`wLBv>$Rojd6%E`w3z>o9_LRrG@LG3J&8KrxbCbnDBgjNPjKKPi- ziu*!rr6?Qgjr%Q|YQbaRSdIKN%ol^lO639a=>(#~6iOa@PPLQQ!U>fJMG-_%CwF#r zb@r8=6?U~~{FnAdg zOqK^cNB06D`iO|KVUS6QnqKo8%O`VU+GA)x)lNMsl`6(Hw(q0BW>$x%$de9e`@PR( zdKv+qCRRk7ghzVKrjz4BJmHg(uTkkIg^Xl#&1jXQkpPcWb$<%*$Ur8*B+>YDfQe&~ z08frl{Y!wSy{mOj4UNx48EdHhYYe9z*F^O{tC*2c(Vf>rqX1(wBl=v3Q4OvFd@>>N zH_2sMP9;VU&jO6ns{K70O&LrDIHyzfKZR4^B*}Cfe*noxAPn$L=Tnh$dUn@uJTnw|scwGe}x}I`8=WgkD!Op~qP= zz0wz!gnrZ#F;4brEa~Xl9dD^-!0fZ=06Z_ZOtsT^f@O+NCPIxIeneI zb~2E6t=R?%3`_^2k(Z+PHj>c3#&DPgdnDy!InV*2N4<| zqlu*USPmVJ963;t#$f1pOlxiL?9K9zOnoN2S;C7dv9aNZwL@#{?4`c5)0YPr&Zat? zQX&r&&Q6)btPLvDga-+0FZ9;|m3hK<3TInyUu{M;k9n|S%-7+QSk4x{uHO9II-F{) z9XU5*YNk+|vsogU7t0p&dL^Y8+gh+7)V_RsV}vd-Dk|xLN@uwoWs#_~J1k8R6p6ze zhb0$gQ6}neSehd&5|>V4L0ltRnncT?LeHc3Rp|;NsQKC+u`fNV+FfY$r;<<@dM$-y zMas!aojyzIE;K2Mnh-k7QXr&B(`Cs}$&$JYIVGfKg36WxAx&z+BpACf6-(?cG%GQ) zpsU}~AZUnsec(Jx>@Kuu!Rb?*I2fC6X%I9-EMVfK(10a&7p5t}9M<|UHVZ5bf`*t= z3xO6|Vs}C2e`O_5ZW;vNWoZyJ#OYIWjLsrU>@LjE8fQ+;F*fhEGze;9bE8^cbhsfl zA@^n~LD&sqi!B9Wnxt}Xi6wOxW+@?+drK_^LYky>IQsNEw>RzvY$+ zLG2MH1COvoiW;iU!4;MYQR5dn3x_O`qK2yT@V_k;qS`Y|Ccf7aDQc)X7gt&;M73{V zL6>CXDodoOq3V2GZK)77-k~#cjU`f4Q%z2;6ROn4RrxC>mX7}VFiFfL&sB%RBr$`m z^4Jh2Nixx2$MkBLB*|#ttjAGdl0*~B3$RQuOj1ucIPLNNFiG6Bfv)|5FiBjoLFQ${ zByqR~I{ndMlJcqsS)})&2vHk^et%4as7xZyTRt2iDx=6Vmt(yMRoSJ9hWSX8s!Ss@ z^~WnJTgWQ^*v$J_h+^~Zgb>AM-N!=|n{y|IC^q9h5u(_9J1Io5+4jj0#pc?{A&Skk zQ$iG*XQzfJZkBy2OmlMVv@p%du+zgdC%?`J)12HoGfZ>x>MTV=AEk<~&8g1@!figC z9SFC%bWR}L=Fz!z7(W5d2xxQo~C< zxy%h$G0Ji7AAs{;h>eN6H-0fI`ibQrD;5LBX@nds{R1eI!8rF^|6-*nz!yV7R%?)?_{(Ek?G~!5N@sh<3PBz`#phhYx$o9!maJ^4TM|k-xmnC_P;+6?&iQxgA^wZeio!Sx$yHK z#mR>Uf)pnw9t={Py!b_cGM7E!2C062r3e^GayV%->DPg9n@JA`!fhr!5(u}M^qWAq z&7|K3!fht~E)Z@r>Cr&A&7|K4!fhr!76`YQ^mriL&7@61ijzrC1Sw7?{UJzkGU<;& zijzrC1}RP^J>{ukaK75tDR19!5d?d&Pg?@#uH~^}%T!jTfAJ|r%+)Yg*>;?qG=pWl zFNURMSd-q}+9zbzj;A=}&RpIlvtN0tLzb1!E(4p0PlXw{WZo!Xd`}BAaM8SGFzYE! zcX%qD-NlllrQD!KVrPVT97Ser#hGEAfG#sM`*fI#>-0^OrNjIgha-;%**+QTMw+Ke z$M`IV1!cvFOoMcdKkLvXNiBGYg=LOb5wq-UhpV*!>lZ7fIh{RatFb`_?&rku@#O*s zkFDdmLB6IqJa!Pyi{lI8Nr&Nlhp#;U&}zPYj`BDT44Ht>xeQo{=tL;T2wkY?MNAvP z{mM#MIr2r8goWgq)FN{xU$ms0Pr?wF9(l2)HTyIUtT|ZwvL&|oM5XRhOPc1Bl)A52 z(sZAs)m>(3Gkls+cZDU+^odH{m6kNiCnL$ij_D!<_nt!a$P|4~#X%(dcN5q=POuRW(p#TbkkHR^|vY(HEoDhXzmDZJ%c*qsNfI88<;3$I7gN&lNGxYCry3PlcKA27rqs`Tca53A=W=lh;;&(*=|Ltj!Lwne89}BQtSFufGtCS#Ndf;`m}yp!X%>pr0g^VtB(?26zA*&aN^+JRzWcDJtUW{;s>@IH)|66fk zn1IEbQUXJ16t_AyB`uW06-uM{)kh*+p)`tP9T(vWrBOWVqYRF#0XcMe|;jt73*LpMcG2u7Z3Ynlr3a_aj}!5Y$5xLkDU@_ z3uS;f*{M;sP!5Qfoo?Ce#K0Lg(9Q~+X#?$)z^84Xoe%ho4YZR1XW2kI6YyCZXr}?r zwt;pI;2axhCjid1fp+wNo(*(|{^vWv&ba?`POvlR|GX3IjQGFc1Utk13!GqQtbd^m zZtc=rDd=}0E>7`@yxPM=_laNqy1FkZ5O-u90^tz5_ToHw+42$xM2~huAg^EnJtao^G z)jsUj)QJ}})Idr#s?9mQG_eV5e$bJ{8p){p%Hray16X_sY=P zB-V+QB=LF&=;fTDHJUZ6M|* z987l(FXZuDb+59q!QzNUR|p%RV5S`v$4v^A6BU!tY{h)!+kE8k1m`P64vYE7-wPpI<*y3aiuuU5 zD`Yk{*tO))N~w%DK4lIngxqW$NwVBDPk7(K2fM?9mFE|*3o>_kd3A7j^}&bxfrZmA zJG?rq76+FT7dlhsf^(E8X!koPW@7S{ zqG*1g{M145XD?qVj1d6N&s-dn;#Z8L1%UH&7su3euNX%Q0OtXPI#FFPgCuCZ+rV*4Dke%7bTP&h{_UKI$7 z%5+CFiLHHYIaC~B1{oE$XojXJgIZTRO&B`bFsY6D30tY+UgD-^XQvwlQMyE6hQW{0 zMgL6F+X~U7s|B~SNJiAk*mNeSJ|~GkfOI@wGAnvCRF1s(^!fdkTwq0@4BVtw+J3;NB5nTb z_IzgbK}#tW3-i>Jhdhcs+ETi@y5)6yJVL@^S3aElkWcI{w-tPSIladA7@sV!7B*^? zYPmGke%NO~gu2_SYVJT*L>=q-H1xUvjrW6@ck-C^BbKNH)$D?-e>%?6bfmPTEQ0#1 zQ2Bxq+_t50E^@L{?IA$xp6ye+=wz12#Gd05#p5lJ>jKX8iQ=A?$Xq$kC(`b|MlK;c z-zUKhbxi2EpYy|QJk=rx`tIj_svl29{IiDjOMI%1l%mNK`!D-6+D{W` z^Y02lw;flCH8WtuW!1sm0R~Rh_+%RC z#{sg)&+r*&se1wpY7WL{ptK? zM1LYc7VBDhI?f-W3>Jaj^T!|qW^8=(NF(@UgzlS1irt?Abk4?^Mt{FNajdHYIolujJ@yFFC~aZfs1YY4oChJ2bwJs-##e9Ghh8 zht2^a!l8#IF$Kptq%yXd&?M;{d{WWSZH8QHyC$)~oa|EiS~Z0cJS9M3cbQ3MKAak$ zm^d)vp9)aS?$^wm(*l&DMq`pr4^T|pm}6%IC^#WYV!*VX=~7t7X&S4zPlsrJjxf2O zafzya)1p$no#m2QyBQ)4@>!Rt>NZ2BRnB(Fs%A4}n&w=W%zDibX`L?`A|k76HBDxu zFOE=sVNkymp*Cw-M*5NnwMA1I=PyU7(=?S)zBEFeuBnXkl`d6kGEEdqe$Az_9y3G& zUlk(y$sz97U81VPj4Ykv>Im7Fre|CeAhZ55!t{-6!&GAosl2XpsjR!Ss8n6w2oX(! zq~f~XC9>W!k~H!SE|ImCAu_c$xkT1khRC$u>=IF985$FMi%Ua&WoS(1cZDW{(5iI0 zG?C79TbPD^r)qyd{9c%7Mn-g{?}v$nQYR(L4b4-TtG7G!QYBw5Nw3SSNxdUT)iIJ0 z+z%WQOknC|={?>hGz4M5th?q;Vty2*y2-iQB?F^f_X8Q*AG@?7m8$N(Ea$w(C1O#J zr7~N7;!?}=Es^g;;Qm>tm^;AyL08{Ae?ZEd{fp4l)B$$gXqnk4Bei>T++hssS47w>*Ovv#mw!N6NdCj)o|Cm9PjrZ3Mt{Ymr0!tm;c_C*qv%xT6 zYFKTse}c%P2)?52^-oHvegoj`M)0y%`zKR02~r#+aTEBHNkR=9B60ipQ&R94&c#I} zF%g6opXy-Wpd?mOqRAJ15gO*_(CCZ82u*gRKhxJ3p<{XqO@9jEtSAEMz{DCF?-Zw` z0^xW}g;qPIs>uKaQ*{{DQ`!G(?^^)lD$4yQ+ZKwTf>s1Y-9o^kZOG<)tF>Qt^!nit_S-ig175 zH#6tV%$^Nl6Y4e1wn_Fk-)~;u%=ymDoH^fAM8Z-UCg-!LpIT8Gsb1$%lnN16*D$@F zg{zkK`x?4$WIy>Npa-3XpowDq_Z*IawIk2f;XFP~dLTFa_lKwhl=3@47d!JQ5*6Z%Qx^$w(c zK_IqEh9xG5KO2b6VqyIV!i!|N=YJlSUf4qLRk0 z>`WdFT&}F-v0porN2d1+mAqEGk#FToW1Xv2%gE(Rr)hW{vwGXG->)ypj1V7v6v9ArGX>BPQmHNveG~GmsMt7*MgwXspQarkge9cz^t>RA8_Yv1 zF2if5htWNT8dGoc^Pl_kLtuXL@XgQ&dMBS9f%kCU8X7_Gm$W1BcFx;EBj`<$b_Cwp z`K{0h==sJ?+xO_o`!~NG9wWR^ya)JpJBIA@dSjwpCVo71M;Jdmecl;-XBgk#ylH2^ zn}qKQi_qje>Xgma$h$ee%MoaWR^N$Uq@}-SMqu;L1Ap8k_@+kIhf?c?57T?+;2S?5 zFhvxAfwq#hTG1eD#nW&d&x0y;64<20iBWHVKwhOB;9jHrjANW@lugxxx)NURYWTEa zTPRbbOYtzeGA>=~51Z05brhDPfEwQ?x%CzY&_zO#Hsf+J_zqI7G!boGkvgDS^ z_?4z#TXIWj{CMm!OKz!+*Ij>S$+4T7i;l-q$C(x7q1W#%Dy&B+l^^&&Zc(wXI+V)e zr9YTdy4pgiyp!pV78RQaLa98~dBUQ?ZiQ0$0GTH(D)w22Qh86;Qx+8#I+V&shdgaj zt!vThKxpD;EGjHoXsUej%bzT2wbnw%Lb89hxK*2r+v_hDw_1Cl!y(f?nL(m^c1qf&3=nHRPMDWnba1)!5k|0+V@*jzr7qP z-v&;$sD5)fRPME>Sk!8*C423u7Po41aeIBh;#O-f*=s*&ajP|$?6s#^+-fZ*d+moT zZnY+pz4mmA>$h18Zq=36_QNK*)o-;5GHc=ti|n^s1)2NqnHJe^xe7A(-j7&hzwIi> z+<(uq$bREhkhuqMwa9+!Rgk$4f7BxT%~wI@Ui>kO?6+S9nfvkC7TIsW3NrWPb1ZW8 z7L-iES2|ChzC-iWeCpKGzJx1#LRpV|ov{c`__Klt=FmSD%k zPJ9QG9A^kA_rX*jLek-oSOnqXbRC8yFhwFGM$=tf24=!En*3}i(W22H>B2Btlan5e zFh3Vcw9=!Y=0#yNXw6s4adtrw<@2FYXb>JAiJSc5ut>OU!lSV2E|bdlcNe+(hu4Pj z7J}qUEtji&@gjF4&0XXvi!}WR(k1m@;qZ9fNNOt}(&+n2hiI&P1wx8 ztX{lz9?qmLd4t0w58xq*Qm4GppjM$#r@TegQ9gijYB+&6v%b#R$k?*Q)%q|$(BkTS z!=!M*(x0)n5(Zv<+(OR6vrFwmvdNkgl;azx6waD*9 z^@ihN?(LkFjP0+Q`N>hE-Qh5}2l))D)13~3r(r&WDs-2_;E9;eplaOhFxZ&+47y0Z z<1lzK<}>K(_^!j?d92T%%i?QoYtq%to2@(!t+|6 z!ZX(&xEx2Xq}cmhj;&dq!QSt3Y~AuK_5qh;YnNxT54s#%zx+J*M@Cc8U6Hmtyuc=!`Dm-?$t{ zuhiFm>vC+(a$kGY<=DFAzV?{Qv9-&6?RPH6)-U(9Kd8R8YE`V)K7Nua*4#^wp| zhi$f;XoazP27HFimhHcx@iwApgP9LDB3@JDR6oH2*7+18w8v*naIjLoy)tv0)Q z>!8=6c|K~>$7vpJpO0B|wZIrw7J1>FZPTkar<@6&W7Dg*r<@9Z+@h<+v(UnDi(aJZ zv_}aOD>=OhduYZ_{yy)}={pA-oE!rM5B@JUNWP3STGrj&H?Ru7 zJPgI*n#f3zZnBqGkQ%+kCW$P>6(OV!lSD@1$`De!Ng_M(MJCBTSx^;E@Is$2vZ}7O z*@mW^&0V76>}8z0T(?9{Le_MyTCKf7@e@Gx>LZHNB^fw1qZ!9yp9q(iZX0GtTHur!T`dMoVZpL zsJW@Vjcy+6Ja5Ia=BDM%jW|bS5bqQB_ux>(HFzz9-lgni2XlCyOAQVvBfIRpe!d`7^ktD1-Gi)mWlR@Zx%d|L0J)n}mf^sK3uFTHV!aAN zF|Ul^1gn9S{CcoiFH}Zd?W@81LWEwF2qDSW<*{WCq^lxFEDfQ=sLDu-C|`^$Te>2I z)7{wEq7R0=I>Ik+^Knv^cGJZ+M-U?`Z~@R8^2zyiunzsx^&sN ziMFb0eN$3{9vNOXDtU8)7{lHOi@s?opQj&(P#ra_!mjko`!3+zk5r>gvw*Vb{VssP`O&<3&b zm`y6t??>pRCr!1kFh75#se2=InxslJl!@HAugcB(<1rU2=6w;o#5Hc3WL2pD-ygv% zUE?yzO9U|=h;$!L_E)Mjtf0P8d60VQa&4n*1H;u{zPwviYSvF9b7s?ld$UAc-L9Tj zEG2R4^VVbhx0~m6_V;$-4SPN6iMBSPcemiK`&y5DGGIHY=Yigaka;S^>+%LxFJIoX z*7Ks7jHuhwgD)SPgx<7Z^TI6$MmI%TR+8-GaLAJpj<8fJ{}%W9KM22H_ha-qfz=L>h|+!3`m=~ zmvwio8i{ur@9HHQy~x`p~HlvV_%!|R3j;YC=v$7}z<7!Ys(k1TQ4J%TWvpr8dO zG;VGmkslO(BP4AtEb(h+QWSFp)Gaa}IMj_bwc}(Zl?^cEf{_1Ixgew|*3#b6(cIR8 z;Nw&l2oADX+|<W4CYpjh|{ytcTw7pf` z=qjfAP78t^Eq*AFge&v(fG|Owo*BfD)n?UxBnVY?R~kMm5GVzhiryMXeI-cUcP$9l z_t~s5Uk6(4=NQ4Z@;`1!!kXX{hTJd1i#5cjxZKPAb};)NI>k0$tlGnopXbZNTjkTf ze1eVg89##RibiL?z?Uh-m<{k*Ul`Il7y3e9G2=JR=cO){Ufj-paUfMCv95(n0&!S7 zT^fk}(!5wRT}>6}8|-Iefv-~Ac&h7%ql_xNb1j~PavmH30!m$$gxnPX;38FK$2YZx zY0`EllR*!_apa1RgbdRh(y5t$H|NY5*b%}kL7Ai6Ux$J&>sh|st=$8Gz^>kp>IQmN zc%6esz`FxSa=PV@Eji+vJ>?e=9^K7`%1}(?w{=H#t?XnCi^!uIkTUc4zG*nd7Gi;=O_T3DG2!|g`m}fkmo4`U4}yfb57Au zj8Ikl1o@ta;FCBwNLGixpTmR1b@<5~9%SKnOUeVs{K}r7^7p$A-{iR^KgjW^@k2S> z+>xszs_Y{2C4ANQUs{zC;_Y=pM8tEu3USXYAx;EJ<&$1Am5FZ=+Y~CKie52Q5??eh z!Vq%1<|ml&Z~&$JX%&!=3G5V+$pcFHJ}Mwx^oGmDEn+#aM+MkaNS9JxGG2;{4V7VD zZeyw-PFImP#nUAj{WcXM6aS$?Z|m56EpTn3K2CJlv}RI1gX8~h!DFOgjBYa zDxk}!^2H2((K#8+ej_Kh5G^#@V5hTb*%juqxSncZh>ea*iA3=e5%pvEQ$Z@EWaG<< z)n{$xr*jzktE@J2D*3Vymm`&%f#StPlZUmOHt~Q)u_mBD_^7S1gUij#rj}Tfcq8Jj zJa$7&ERtWE#Jl8|W^tta(jv~rmu?)z)kl3FY57XsBt!>fzeflb0!yi}9$h%uAI_mB z0O4mop(|HNb!Bpi4G0lpK7Jx%+i^k+f%RvgauHXcH@O5%KKtvM&TA zx-7j?A)YOcDUHZ$>(KWJvDQkikV>S|8&h6_S1CDB*|*O<(WUD2OzvB_08gGIM5C2# zDjOfRuBqtBLY!hzhT~;iQZQO%7wIF@y6_Y?tz^n?*ZnxV`%aZbdj_bOPkZU6qOBHL zgM}XyVi~eDX_bnR*FgR>Ar=~3qx`a0Z~Ktcv7eZ3O{v&NP8XuZh+ixf%83%$%y`f% z=X2@zIzv{_PYI-B71wZ#^f_ z7nMULE~{yC8iliTFwbDLnc4du#WU;de( zOT^I~*uVt+MqS|-pg*e4;FGkT8o1DFFAT0qq7-u@rA_fd3U(+xI%?;r zl`%WWLN460OYItKVkVUxEv>KQUw)ZveO(#0H1SM&G&_d-rOB5i5?9C}iRKscsRV{s z-bgu%!9y-<#*lZ6!)f}= z$4^A;{$(Ma#J4-}Q^d_43795bHlO%PK;r2FC<$06^bSPRg?SPz8aGfhqBjchC?b6eKWrl_7+a4N;yRQdg`fW@kLAhQ#`Cfe zQX>x^JdQ?QkAx#)?oC3Rg9N?wwr?zaAylf9vJK(?zXQBu^Dl{2{hV6 z!)Pxiei(oz@k9Wc#T-x-t%Zkd)Z<8f{?nsw=te6r+CE717vS_llcFTNl-{( z2#k+xsCmekEGv~=J;U`@#seK%)kUaedAyt{SwxxRL%0fb;g^<+m9%=K5)pUb9;DZs z8taW`NzG=yl6NaQlg@W#ypXI+PuAduJA)b=-rHlPgbbYz6i=VI@=u+>l||!6AMXx~ zp@)x2eyD*-j**=u$7IOIBu^Tc;^Tf{$uFN1V3J>BV2VGuvn^j|V3HqeV2Xc=fk}Rm zfk}S3fl2;51C#to1Cu;5*Uo>gfl0n`7h8UYfk}S)D{c981}1sS?za3;19SR&*z)5H zO!Dk&YFv;I+V3OAxnB<2TnB<2VnB=Pr zO!7Vhll*7{lYE_lNuDt<$@2y#`LPBj`H2Q5xtJH!m*lezO!DsZD5N3tbs{B^m;q~Is=n@`Chhst$|5? z$lkX6Py>_v-3F%o`wUF-tbs{hGBC;ae1o0-J_aWF8Us`OAp?{A0t1u$Vgr->N&}Pp z8UvGjw>R4P?`2?;pI~5$f0}_w{)v6;_}dIj@@ouC@vk#5$+x}5j(_?50F(R{15^B4 z4NUTf4NUS!4NUS^?Hi;=^1Td9@_GZ4e1U;UzSDko`~?Ok`8y3v@s}BxR9OCi%SvCi%k#CV9&N zcKU}HnC`D72O}toAABM(wZUh$cJOEV=Bl@<>!0#J){&p-;7XV2 zz8@0)EwHvvgy|`R?yrPrVbZ4iCt<2T>dy6}`p+Y|!c_mgf%S*#_cjMF20q28Zzph6 z^nI0*%)#Gx@NRQ-Y}vmK zbMOZoe4B&CPImlvIrvxyf7QW%0)En{&#pV$>Al;*r#kpH2iK{QIHf}R=ydS$4!+UB ze{*ohE_Qi}4!*|0PdPaD3OoK7u)beY`kpMTisdZ*A$*L3 z&jsH677?YJ9Niy3E#-6R84u-mAu!Fi>yZfIOBI%B)`=@6pCP6HTL-`4HE2gQ-=+9( z1)gWz=s<5&#waO z`5(!@1-#CX-w&+kcO?HM@QH>TwoyE4;8$RPrRQ_Re;u%%zY*RKSkKo8$AI2Mv50@O1`04_MFFh<`1xo}UrE6Ijp32>%RN&%X%&mH28tM)*}w zexsT{5q>kUo{te;2(0H{ggb!se2Z{5@P$VFe&AaSJPiDZfs4R;K1T6R2G;X0!Zdzc zhyICR^glU%o7X1hUV_CalAjGh{h*lpNyzK)kNOYRPoww)c|?2~a*b&`a~UP1KGc8i z0M_eKl-@5L`EUQt@Z8s7Jw)!$ z+ULg(CVQmU_b7k2J)Z%e+LMM=B;RdMxqhhe{syN0;>K@<98Y)s_^#Z=hl7treBVC1 zau<)j2>(PSrv$_5=ce~b@b&uWMEF;~M82EfU5J0Ep`S;9^@rMvu0K54^yd?E=pljn zkeu4@V}`!M!{%RP{ zuL0Avjc`5i4TgLPu>R~GdFq9y9Xxw)EycVN@>e-{F9*NP!7UDcr-N5Ic#VTo4#vI8 z|4?~OaPVmkKG(q)IQR+&U+3Uk9ej_2A9nDg4*rvacX@+feAefi9o+2TcRIM&!AChb z?%)j$CVQ?wq`&`k*D&Jcid>}B5ZRtbu z4k>4Qzel7_ER}M;J_z>#!=^EQ4e(J8jsv$E@*?nJ1E1mGa~=G72VV``X~e$+xZA)F zIrvfF9>}SH`=We*0Zu4B;khuzCf>`ziyYkP;G-Q}bnqDt{+xqva`1x=e$v6aVCR8Z z-hCbX4hOGs@Q8yqIrt0*pXcB!9elHc?{V<29Q?F{=U|*_)@LsVzum#_ba1bO*EzWC z;8PrYj)O0B@HGy;)xi%q_;CmCgmqQ3eo+UvI(UVH-{as74nE$&XF2#Y4*rURzwhAR zJ6J^R^6%l`eI4B5;N=cp>)@h;&vNjE4!#z6443TzLI|=qUkApw$B?k0^NzcmU&}pDO%L;FucU zP6Eveh2VB z4E%23e;RlV@C(2+|DgOvfahTR)Ti)!f#Yg?Me{9fSmF#pr?B=GgXZAyLu@qs^}@P~kp$ND`@%PIfQ0)G^EcZIJ6{tU2=e<$#R zz)>at1Mpvg>4Kv8&jG&xtn0H2I@T+({;k_*f8b+)b$MHX%fK}3p!i1up9S2n@EGtf zfN7bPEV8Ts-r1Md$^!)W5)4BQE<)4Ln^NQ3_%aNLkT z0{mV>{sizzz#}TXe*ixQtkZw({^*a`Z*ZrQ?*n{4Fs;W?{tJN5#C`#-?-tz*Qzdi?i9m zf$2FMwf`%Dub3aS|C@nt1Ae#4uNio6JkQtqUIlz0@K2T8BfMW=&o%*f8+a>l+`tzD z9}ld{|0UoL0&D%;0emK~zP=v;kPb1o1cea33;3!-#M~$6NPIu=`AfyzAv{+h`Oko# zJ3`D|S10i!z(YsM{zUS}fG-3-5%nSbN8tK?j5kz%&j8S-{0b76JUV(Jfz`uKneRvb0DERkadMwqID`RuApBe2J4l+|H-C%Ab z_PJ^sbU+URpb+w!G>|Iw71BApx41=A1f(0}8u~k}!U|Te@*4wqy4Jv)T^*abq z??&*hZohcEPdq4`hUo^mIXvCKA^t{kibu}3FDw|H z3=JW3;n=?auCT}|uHO}9RMnQ18}gN4y?lMaek(!Bs7>)ckn;wDl&MYo3b^lGs6F9T zr1o1Gl4QIzVg%3&A`(`6-$F{wHyLC|wULz73jQ>szNJX zX|4GJPdC-v)BUKmDSa$mtU2o-Zf$wv_2F8tF&Q=8Q1J$G%}szepKC3QjGAr;eTiEI zhrJ3eMb7KwGBE5NY)iu3+taUphltduvUYvwyZ1}K7z;XTZQY`n)Ki<6o^=qn#=P@2 zn|*jcKnKEH2VM~TA-#5qz~g`Iv_X-`Rf2DaG|_h{Arn%TiKG>73~Fv#_(Mq*YVGVs z9{$R$u^_xrZaik(v zgp=mG^Kn?pp`jH2mBmnDeo(r>b;?u`B3&}28_2D~Cr` zAlyZa~OHFV`N&Ymt;xQ1;RFNRBDw2`(W=ImrLSihRNufol!-sWda&${SRnkf2)0y08 zIR!D+K*>1+bq{nWub7CJ;7BHui^H?nbvvBiQ5qNB>0H<}hD=aOiGs(^pyw(ht zOQ~Xg{ou-8uVS>Bg!u7_voWwAB_1Nhb3S>M-P z-+Az=rl!@aT4Fd}JyyT=;8n3${QyD+5Hf&}p6>2${64CF^+5N)nzs5A1_lr7I&7JQ z?SLy+)gLj?*V)xw-+x43Pkr~&&W?KclI%YMK7Q-_yN~Rsr-KMO>bpCa_H3lijQ;PH zizzP)ZyklvjsA5R_rE2AZ}5(n;I(~yg(rPkaMh3aVKh*IolvHM%tb0l3~+sFvo8%S zLfQ`_r!!`hj4#Oq>7Y$?4w+0)o=hf4CzHt;oU-vf$X|CGJ44l%tdjc7T%r^t71VQV zxRl!zlrQUZfp^$?Ak*sn%q634pi|J!i&~J8 z9zQkW-zGRosi4E<}DXBf}I&`I}a z&M^083^+S8fb~kk>PnYf!OY9^Vrtsuc}@PeM8{(F-4F7oXNaL^YKRhiMH~(EU#m6b zaMupv!LA+T4|Ux|3J1$23f@anx&MHJLw6srL^^e&ui@JeNTQa*_-mCd2%$220|HTu z?FT-j%?AXkZ9O2Fx$%H-wQUD1tFq~UWYxDEgg%s&ds|#5fWEswYe`4}TB=a%KXR=? z0Y6+V1yOL=LJ)=XNQ=KHSIPWcEdkMYa{(y8{_>9mCJVaNEJoGhK;$ajl@C1;ScYMT)J95*I zzZr=)LYMpYkb|5jf*e-yJkZ?j#iRC$$5o+^j5sjt zfe{Iu$3+wr_OQqZXEpneiYf%^$~PWc=w}i3I=UY!T|jH-FPw7#P1@-Trck!eWm?50 zSDZ@O8Y+GBlDogdOD@1$OZzg&E|3b7#gRbOMFPKM5;_a|GSFSl_nlV;KFawU`zM#* z$TxZ5mz;f)<5v@TCvT=-Etm?8Vrd79737w=zJ6)Em~z8brO6pMnJVoa)9{QbZ)SlD za@;X64$ZBcmvMsa5CFs;5s7q>MY7#+;zG6zR7%Fd*-8>0WOCE4887&}IE z7RKO)e?xT9A~ZNo55N~p91HQn7O%7=pIV|ZeSCSuk}^UskS z0`V2Ui(AHqbD1K(ZHB8*{7I(aW4&0;W42r@E?K;|IflSQzPtqb!DEX>y)D=$h=*xmP%*5jW{}K z2#rENU0p*<)7c?B=zvm(Soy<4>%C14nTgZKyiH>-iJy3h>5sfL{>G6!H742)rRpK? z-PHZa@oo`2^!-OvScc3AF=hQ!cicsb)WSd7lNRTabbEq3_aZsg#i*8iGN+PKIEtoW zpZMr3ux3%$^E{KgI zDH;lKyC%HvG8=Egqz_<0W}fEMMwT|>2JlwCo39jYiwE= z!!cdpOt`l3e4@An&s4A~wJBHF5Pai|Hl~xQ=u~w8*rl#6X{K6}Y^DHF)WwVO8)t6d zVMCG51;M6k%3Rhqfv=<4a&%Fyf!m^@L6WIFoD0JMR5TZLnQ%RDrTscb7ac(=t5j=r zQICEe&QDNXOwVDJ_1ZktlTBpG&{hyfi*Tc;+zD;b0c1RB?(n@^S)RUlVncCgMS3*8 zEVVJ6Ncs7B%a->IH8sQ<8i$m`PjMN};Z+Oa(M15O*YxlS$m%5IB`{_PSEXC)ty~6# zRd(ad#%xRBdaOogdCQ5cCrU6pSO(EW`!-tTb6L)IF7>&2}`Q>-~L zy{yJ$n|x}_h2I3Wo#5aZ1F`hwHV~|5!!k$=gFth$9dInXwNqyM55AHcW&cL=y>lfYFX;C3t1DVPY!~9r4&STY*ru|5saxpb_lBgAAXs z4llcPkcu{Jg9>2F;IC8Sf#Z&6Ane*tXe`mz9Ghli30n#OYI9+ireaiKiD!(*%Wga@ zeJdNn51GbYs15fzVH+HBVX(t3Zu;uv+E2vbjI<@EtG$_I515(>Oht>>qZCU#V{f*f zyKOa=EiS5@>;Uv8XK-6U144T)#0&Gxf4 zr0<$XHyoJwIE|_JG+XBl2Dy{#0#j{pRFhOQI1tYmob70E zpzqoZ4n=kh4!I`WaSaaFej)}Z-qbc-?ad^6z!cjX-6B=&4T)#$&Gxf5r0<&T4M#TD zZ^#?z4s2|w_7gESsl~0+b@^tJJz%PhjcSo<#s=aUW3wHN4fI{Rv7yM8v4N-I9oX1V z?I&VvV(qEMmT9)zRv+U)eyS(Y1*Y2Cs3xgqZ6KbpHrvtKK;N}n8;a~qrP#mtB)VJt z-+S>!R)0b!r!CPsT}{qpJHZs&9KTVj7#)_+Se@->by(pwn;jXO?2f-&$R`Wzz*dJ2 zR+!j8r#apQMD3 zG}h^8PflN}Gr3MM)ngqx=Y|@ks?~vf#_DWOs{@7CKGu=P7MWIujuYB(jSkm-LN=!@ zF>T*&m}D22Vw0nrq>9BM@r=RQeg=p1U9-L6$TYPwCRg$du^rgt@S!jh8|bu5J2x)= z9DCB;V5-fI-z?P(4-;lg&vrCD^7y1$r&#*1LfiaI)@?}q-+M*b_gC`bKBQU`)6IvJ zZ+s@(38vWg_>EG<^ss!!@@zlL!wRo?)FWeCgC07;bH^R>aP22F%W7>OnXcP(CfNn1 z*yQLYsbX zj^8L%j1J3Ztj_kcI;`-T&5n$14Rh$o?j6_YaP22#a~j){)AiMdNp^uLHaWUUs#qKn z&lsHTXK+a0HQO7G>ejjI1d3{I@Qt#P`p98bC%OtH-gnx%@>k%Sq$v;FLj)OgL7M@4sLSn3##+Gq6f zfA2*dRsV^ZpXStbH9wQ?22*T)f@Y~=ek5VW{A@q-BQ;*L`BBjw^Rr2AJl|o>kE;KK z%uh>e$8xHnIq&(Cu=UAF&cLiw z=Fu5DtyAVV7g8g*#KTTSpWvzL&MU}a6-Y)WdDi)&d?A%gjij@wCHor3o)2^nc1C0S zqWqQ|C!s@`be>>p%vaw|=#7c~ zqwu8@UmB9B;qs^#A095GHfl6dh>xW-NM}cK`a4D=et0IA(7|KzgvrX6hqFkaC>n}e z#!B&F{4EvuZ#Gv#{6ubSER`)Gc)b#!banV?k)@oAKXb)uA=YjdVrL;vq=1QjC>{FQ zNk*7UY5sgr0{T5$eSHP~5^t8o(Rs)(D!=n@lSlazFN*&yRIdG)!oPIcUJFF&=@0R4 zoug48n~xxq_w3O^4DDXYYjAjj8-%$0u1em)4o|e#iO1hj$y@I59xv31Q}(Ll9qI7$ zAFdPk^aUl>-_|+2Lm!TardL;{mq$<}2o|N^M?`*s5W6AleMpS-Ow~tI>$bo*As%_{ zEV21O{>r~}z9#~qPxzmqC9}jnJ__3R0|?V`NW2-m*=GbqEjtTAst>U6xI1QvZ2`?s G<9`8r^(^-Q diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/EpaperModuleTest_GD32F303.hex b/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/EpaperModuleTest_GD32F303.hex deleted file mode 100644 index 3db70fc..0000000 --- a/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/EpaperModuleTest_GD32F303.hex +++ /dev/null @@ -1,1363 +0,0 @@ -:020000040800F2 -:100000007823002049010008D9060008D506000819 -:10001000D7060008D10600086107000800000000AC -:10002000000000000000000000000000FD060008C5 -:10003000D306000800000000FB060008FF060008C9 -:100040006301000863010008630100086301000800 -:1000500063010008630100086301000863010008F0 -:1000600063010008630100086301000863010008E0 -:1000700063010008630100086301000863010008D0 -:1000800063010008630100086301000863010008C0 -:1000900063010008630100086301000863010008B0 -:1000A00063010008630100086301000863010008A0 -:1000B0006301000863010008630100086301000890 -:1000C0006301000863010008630100086301000880 -:1000D0006301000863010008630100086301000870 -:1000E0006301000863010008630100086301000860 -:1000F0006301000863010008630100086301000850 -:10010000630100086301000863010008630100083F -:10011000630100086301000863010008630100082F -:10012000630100086301000863010008630100081F -:10013000DFF810D000F02CFA00480047B91C000886 -:10014000AFF3008078230020064880470648004728 -:10015000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE777 -:10016000FEE7FEE7050700083101000800F0004245 -:1001700030F000400AD0C10D01F56071C0F31600E7 -:1001800042EA0151C208400711437047002001466E -:10019000704730B50B46014600202022012409E0BB -:1001A00021FA02F59D4205D303FA02F5491B04FA30 -:1001B00002F52844151EA2F10102F1DC30BD2DE943 -:1001C000F05F0546002092469B46884606468146DB -:1001D00040241BE0284641464746224600F0F9F9F4 -:1001E00053465A46C01A914110D31146184622462A -:1001F00000F0E0F92D1A67EB01084F462246012076 -:10020000002100F0D7F917EB00094E41201EA4F1A0 -:100210000104DFDC484631462A464346BDE8F09FEC -:100220002DE9FE4F804681EA0300C00F0C46009086 -:1002300021F0004123F00045B8EB0200A94105D2AE -:100240004046214690461C460B46024623F000409D -:10025000104347D0270DC7F30A00C3F30A51029099 -:10026000401A019040286BDAC3F3130040F4801B5E -:100270000098924620B10023D2EB030A63EB0B0BEC -:1002800001985946C0F14002504600F093F90646E5 -:100290000D4650465946019A00F0ABF910EB0800A4 -:1002A0006141002487EA115284EAE7731A4340D07F -:1002B000009A62B3019A012A4FEA075215DC001B2B -:1002C00061EB02014FF0004202EA0752CDE9004221 -:1002D000001C41F5801132462B4600F0ABF903B00B -:1002E000BDE8F08F40462146F9E7001B61EB0201B3 -:1002F000001C41F5801300185B412018A2F500177F -:1003000047EB030140EAD570B6196D4111E06D0865 -:100310004FEA360645EAC0754FEA0752001B61EB0B -:100320000201001C41F5801149084FEA3000001914 -:10033000514132462B4603B0BDE8F04F00F06BB997 -:100340000098012240000023D0EB020263EBE0732F -:10035000009821464FEAE074B8EB000061EB04011D -:10036000E9E783F000435BE781F0004158E72DE9BE -:10037000FE4F81EA030404F0004421F000410094A0 -:100380004FF0000B23F0004350EA01045ED052EA24 -:1003900003045BD0C3F30A54C1F30A552C44A4F2FE -:1003A000F3340194A0FB0254C1F3130141F4801112 -:1003B000C3F3130343F4801301FB024400FB034E19 -:1003C000840A970A44EA815447EA8357A4FB0768E2 -:1003D00002958D0A05FB07854FEA932C04FB0C540C -:1003E0002705029D4FEA065847EA1637B5EB080580 -:1003F0006EEB070C870E920E47EA811742EA8312D2 -:10040000A7FB0201B6EB0B0164EB00042B0D43EAE2 -:100410000C335E1844EB1C50DA465146E7FB0201F0 -:10042000C5F313044FEA0B3343EA14534FEA043283 -:10043000019C43EA0603A4F10C040294009CCDE95C -:1004400000B400F0F7F803B0BDE8F08F00200146DB -:10045000F9E72DE9F04D81EA030404F0004B21F0A7 -:10046000004514464FF0000A23F0004150EA05020F -:1004700020D054EA01021DD0C5F30A570246C5F345 -:100480001303C1F31300C1F30A5640F4801543F47B -:100490008013A7EB0608101BD64608F2FD3873EB55 -:1004A000050002D308F1010801E092185B41B8F1A0 -:1004B000000F03DA00200146BDE8F08D00204FF464 -:1004C0008011064684460EE0171B73EB050705D323 -:1004D000121B63EB050306434CEA010C49084FEA83 -:1004E000300092185B4150EA0107EDD152EA030057 -:1004F00012D082EA040083EA0501084305D0101BEC -:10050000AB4106D20122002306E000224FF0004357 -:1005100002E06FF0010253101AEB06004CEB085199 -:1005200010EB0A0041EB0B01BDE8F04D00F073B891 -:10053000C1F30A52C1F3130140F2FF3341F48011B9 -:100540009A4202DA00200146704740F233439A4251 -:10055000A2F2334202DC524200F03BB800F02AB86B -:1005600030B5041E71F1000404DB4FF0004440423A -:1005700064EB0101141E73F1000405DB1C464FF00F -:100580000043524263EB0403994208BF904230BDDE -:10059000064C074D06E0E06840F0010394E80700D0 -:1005A00098471034AC42F6D3FFF7C6FDC05400089C -:1005B000E0540008202A04DB203A00FA02F100206F -:1005C00070479140C2F1200320FA03F31943904091 -:1005D0007047202A04DB203A21FA02F000217047FC -:1005E00021FA02F3D040C2F120029140084319469B -:1005F0007047202A06DBCB17203A41FA02F043EA83 -:10060000E07306E041FA02F3D040C2F120029140CB -:1006100008431946704710B5141E73F1000408DA38 -:10062000401C41F1000192185B411A4301D120F0B6 -:10063000010010BD2DE9F04D92469B4611B1B1FA73 -:1006400081F202E0B0FA80F220329046FFF7B2FF6A -:1006500004460F4640EA0A0041EA0B0153465A4657 -:10066000084313D0114653EA010019D0C8F14002E3 -:100670005046FFF7AEFF05460E46504659464246E5 -:10068000FFF798FF084305D0012004E020463946D3 -:10069000BDE8F08D0020054346EAE0762C43374361 -:1006A0000A986305E40AA0EB08000022FD0A44EA68 -:1006B00047540A3002D500200146E9E70105101928 -:1006C0006941DDE9084500196941BDE8F04DA2E73F -:1006D000FEE77047FEE7FEE770470907090E0028AE -:1006E00006DA00F00F0000F1E02080F8141D7047DA -:1006F00000F1E02080F8001470477047704700F068 -:1007000009BE0000134882B0016841F47001016025 -:100710001148016841F001010160416841F0800128 -:100720004160002144F620620091009B5B1C009315 -:100730009342FAD34160C1620168084A11400160E6 -:100740004FF41F018160016821F48021016002B033 -:1007500001F060BE88ED00E000100240FFFFF6FEF1 -:10076000FEE700000FB4054B10B503A9044A029838 -:1007700000F00CF910BC5DF814FB0000851A0008AD -:100780001C0000200FB4084B10B504A902AA03985E -:1007900000F0FCF8044602A9002000F07AFC204694 -:1007A00010BC5DF814FB00009310000802E008C8BC -:1007B000121F08C1002AFAD170477047002001E0DB -:1007C00001C1121F002AFBD17047000070B5074C11 -:1007D00005460221204601F0F7FD0028F9D0294600 -:1007E0002046BDE8704001F0CEBD0000003800405A -:1007F00010B5044C8021204601F0E6FD0028F9D117 -:1008000010BD0000003800402DE9FF5F82B00021DC -:10081000DDE90430020DDDF840B0034318D044F6A2 -:100820001050A2F2FF3242431514119801281FD034 -:10083000A5EB0B00401C5FEA000A4FF000064E4F8C -:10084000DFF83891B046504615D5CAF1000413E0E0 -:10085000119801244AA3012801D16FEA0B010298E3 -:10086000119AC0E90031C0E9024206B0BDE8F09F2C -:10087000CBF10000DFE704460021404A491842EB73 -:100880000450CDE9001012E0E00707D032463B46A5 -:1008900040464946FFF76BFD8046894632463B4657 -:1008A00010461946FFF763FD06460F466410002CFC -:1008B000EAD1DDE90401DDE90023BAF1000F06DA2F -:1008C000FFF755FD42464B46FFF751FD05E0FFF7A8 -:1008D000C0FD42464B46FFF7BCFD04460E460022D3 -:1008E000284BFFF73DFE03D84FF0FF30014607E0ED -:1008F0000022254B20463146FFF792FCFFF718FEF9 -:10090000102409E0002C0ADB0A220023FFF757FC21 -:10091000039B30321A55641E50EA0102F2D1641C66 -:10092000039AC4F111031444119A012A03D001223D -:1009300008430DD10AE0084304D000204FF0110B0A -:10094000119072E7A3EB0B056D1E0DE05B4504DD16 -:100950004FF0000205F1010504E003DA4FF0000258 -:10096000A5F10105002AECD002981199C0E90231E5 -:10097000C0E9004579E70000000014400000F03FA6 -:10098000300000000000F0430000E03F2DE9FF4F81 -:1009900095B09A46884606460025EEE1252877D18F -:1009A00000242746F94A0121039400E0044316F885 -:1009B000013F203B01FA03F01042F7D130782A289A -:1009C00011D06FF02F033078A0F13002092A16D829 -:1009D000039A44F0020402EB820203EB4202104449 -:1009E000761C0390EFE758F8042B0392002A03DAF1 -:1009F000504244F40054039044F00204761C3078D2 -:100A00002E2816D116F8010F44F004042A280DD020 -:100A10006FF02F023078A0F13003092B09D807EBD3 -:100A2000870302EB4303C718761CF3E758F8047BEF -:100A3000761C30786C280FD006DC4C2817D068283C -:100A40000DD06A2814D104E0742810D07A280FD170 -:100A50000DE044F400140AE044F4801401E044F48E -:100A600040147278824202D104F58014761C761C00 -:100A7000307866280BD013DC582877D009DC0028A2 -:100A800075D04528F6D04628F4D047281AD193E1EE -:100A900018E0632835D0642879D0652812D18BE11D -:100AA000702873D008DC6728F1D069286FD06E28D1 -:100AB0000DD06F2806D1ACE073282CD0752874D0E7 -:100AC000782853D05246179990476D1C54E1C4F3CF -:100AD0000250022809D003280DD0D8F800100428AD -:100AE0000DD00D6008F1040846E1D8F80010EA17AF -:100AF000C1E90052F6E7D8F800100D80F2E70D705A -:100B0000F0E718F8041B8DF8001000208DF80100A4 -:100B1000EB46012003E058F804BB4FF0FF306107BB -:100B20004FF0000102D40DE009F101018946B942FC -:100B30000FDA8145F8DB1BF809100029F4D108E031 -:100B400009F1010189468142FADB1BF809100029ED -:100B5000F6D103985346A0EB090721463846179A69 -:100B600000F080FA284400EB090507E044E008E1C2 -:100B70000DE01BF8010B524617999047B9F1010996 -:100B8000F7D2534621463846179AF2E039E00A2157 -:100B9000C4F302524FF0000B0091022A06D058F81D -:100BA000040BC117032A09D00AE023E008F107006B -:100BB00020F00702F2E80201904605E000B2C117FA -:100BC000042A01D140B2C117002906DA0A460021E1 -:100BD000404261EB02012D2202E0220504D52B22C6 -:100BE0008DF80420012203E0E20701D02022F7E77C -:100BF000914657E00A2100E010214FF0000B0091D0 -:100C00000BE010214FF0000B44F004040827009182 -:100C100003E008204FF0000B0090C4F30252022AB8 -:100C200005D058F8040B0021032A08D008E008F189 -:100C3000070020F00702F2E80201904603E080B2CC -:100C4000042A00D1C0B24FF0000922072AD5327819 -:100C5000702A07D0DDF800C08CF0100C5CEA0B0C99 -:100C600005D00EE040228DF80420012208E050EA71 -:100C7000010306D030238DF804308DF805200222C0 -:100C80009146009B83F0080353EA0B030AD150EA14 -:100C9000010201D1620705D530228DF804204FF002 -:100CA00001097F1E3278582A04D039A20C920CAA6E -:100CB00002920BE03BA2F9E75B46009AFFF77FFA4E -:100CC0000C9B9B5C029A521E0292137050EA010226 -:100CD000F2D1029804A9081A00F1200B600702D58E -:100CE00024F4803400E001275F4502DDA7EB0B0010 -:100CF00000E0002000EB0B01009003984944401AEB -:100D00000390E00306D453462146179A039800F057 -:100D1000A9F90544002706E001A85246C05D1799CD -:100D200090476D1C7F1C4F45F6DBE0030CD5534606 -:100D30002146179A039800F095F9054404E0302005 -:100D40005246179990476D1C0099481E0090002943 -:100D5000F5DC08E00298029952460078491C02919D -:100D6000179990476D1CBBF10001ABF1010BF1DC51 -:100D70005BE100F065F90544761C307800287FF4CB -:100D80000DAE19B02846BDE8F08F0000092801001B -:100D900030313233343536373839616263646566F1 -:100DA00000000000303132333435363738394142B3 -:100DB0004344454600000000600700D4062708F1C0 -:100DC000070020F00700F0E80223804603F0004C03 -:100DD0005FEA0C0001D097A009E0200501D596A09C -:100DE00005E0E00701D095A001E0AFF24C001390C0 -:100DF000307823F0004365280CD006DC452809D064 -:100E000046281DD047287FD13BE0662818D06728A8 -:100E10007AD136E00021112F01DB112000E0781C8F -:100E2000CDE9000104A90CA8FFF7EEFCDDE90D01F6 -:100E30000C9A4FF0000B07F10109109200914EE05F -:100E40004FF000400097CDE9011004A90CA8FFF76E -:100E5000DBFCDDE90D020C9B0F994FF0000B914676 -:100E60001093009211B9791C00EB0109B7EB09004E -:100E700003D4C0F1FF3B07F10109A9EB0700019082 -:100E800042E0012F00DA01270021112F01DD11209E -:100E900000E03846CDE9000104A90CA8FFF7B4FC36 -:100EA000DDE90D010C9A00914FF0000BB94610924C -:100EB00021070FD4009A4A4503DA914601E0A9F1CF -:100EC0000109B9F1010F05DD109AA9F10101515C89 -:100ED0003029F4D0B84202DA10F1040F03DA01210C -:100EE000CDE9011010E0002803DC8344A9EB0001E8 -:100EF00002E0411C494500DD8946A0EB0B00401C87 -:100F000001904FF000400290200705D40198484519 -:100F100002DB4FF0FF30019000208DF84B0002986B -:100F20000DF14B07B0F1004F25D002200C902B2083 -:100F30000D90029800280CDA404202902D200D906E -:100F400007E00A210298FFF724F93031029007F8F0 -:100F5000011D0C99481E0C900029F2DC0298002813 -:100F6000EFD1791E0D980870307800F0200040F025 -:100F7000450007F8020D11A8C01BC01D0290139870 -:100F8000007800B1012000EB0901019801EBE0714C -:100F9000029801440398401A401E0390E00306D4CF -:100FA00053462146179A039800F05CF805441398BD -:100FB000007818B15246179990476D1CE00323D56D -:100FC00053462146179A039800F04CF805441BE05D -:100FD000BBF1000F07DB0098584504DD1098179906 -:100FE00010F80B0001E01799302052469047019805 -:100FF0000BF1010B401E05F10105019004D12E20DB -:101000005246179990476D1CB9F10001A9F10109E9 -:10101000DEDC05E017F8010B5246179990476D1C6E -:101020000299481E02900029F4DC53462146179A83 -:1010300003989EE62D0000002B0000002000000019 -:101040002DE9F041044600251E461746880404D4C5 -:1010500005E039462020B0476D1C641EF9D52846AE -:10106000BDE8F0812DE9F041044600251E4690467A -:10107000C80301D5302700E02027880404D505E007 -:1010800041463846B0476D1C641EF9D52846BDE878 -:10109000F0810A68531C0B6010707047816841F042 -:1010A0000801816081680907FCD4816841F004016E -:1010B000816081684907FCD470471205A2F580124F -:1010C00001290BD0022908D1816B21F440118163E1 -:1010D00002F44011826B114381637047C16A21F4AD -:1010E0007001C16202F47001C26A1143C1627047AB -:1010F00010B540F2096001F017F9012001F062F823 -:101100001D4C01221102204600F0C1F800220221EC -:10111000204600F0BCF84FF4E0420221204600F0E7 -:101120005AF8002000F09AF80021204600F026F836 -:10113000022211462046FFF7C0FF0723102200219C -:10114000204600F063F8072311220121204600F019 -:101150005DF801220221204600F022F800F0C0F8DC -:10116000204600F015F8012000F0CAF82046BDE83E -:101170001040FFF793BF0000002401400029816860 -:1011800002D041F4006101E021F400618160704708 -:101190008168C90703D1816841F00101816070470E -:1011A000002A4FEAC1720AD01AB1826842F4801252 -:1011B000826089070ED5816841F4004109E01AB1C7 -:1011C000826822F480128260890703D5816821F445 -:1011D000004181607047012909D0022906D1816848 -:1011E00021F4E0418160816811438160704781682A -:1011F00021F46021F6E702688A43026070470246E4 -:10120000002012680A4200D00120704730B5846B7C -:10121000C4F30155846B491BC91C01EB81011F25D7 -:101220008D40AC4302FA01F12143816307240A2A6D -:1012300008D2016902EB42029440A14393400B4360 -:10124000036130BD122AFCD2C1680A3A02EB4202A5 -:101250009440A14393400B43C36030BD04490A68E6 -:1012600022F470220A600A6802430A607047000094 -:1012700004240140CA0703D0826842F480028260DD -:10128000890703D5816841F4001181607047002A05 -:101290004FEAC15211D0002A03DA426842F4807248 -:1012A00042604A0503D5426842F480624260890781 -:1012B00015D5816841F0020110E0002A03DA426886 -:1012C00022F4807242604A0503D5426822F48062AB -:1012D0004260890703D5816821F00201816070476F -:1012E0000248016841F40001016070470824014090 -:1012F00002494A6802434A6070470000002004E047 -:1013000003490A6810440A688242FCD3704700000F -:101310001000002002480168491C0160704700006D -:101320001000002070B5054D29680C1802E000205F -:1013300000F03CFF2868A042F9D370BD10000020E7 -:1013400000224FF48051014800F0B6BB000C014070 -:1013500001221103014800F0AFBB0000000C014066 -:1013600000224FF48041014800F0A6BB000C014070 -:1013700001229103014800F09FBB0000000C0140D6 -:101380002DE9F047002589460446FA274FF010085A -:101390002946284600F0EEFA242000F03FFB3901F0 -:1013A000204600F05BFB0021084600F0E3FA26200F -:1013B00000F034FBFFF7C4FF0026002419F80500F5 -:1013C000C043C0B2FFF702FA641C6D1CBC42F5D3E7 -:1013D000761C4645F1D3FFF70BFAFFF7B9FFBDE8DE -:1013E000F04700F0DFBA000010B50446102000F00E -:1013F00015FB204600F0F6FA01490120087010BDE7 -:1014000018000020324810B5007808B100F0A0FAAA -:1014100000F0D6FA002858D1122000F0FFFA00F0B0 -:10142000CFFA002851D1012000F0F8FA272000F06F -:10143000D9FA012000F0D6FA012000F0D3FA1120E9 -:1014400000F0ECFA012000F0CDFA442000F0E6FABA -:10145000002000F0C7FA0F2000F0C4FA452000F089 -:10146000DDFA272000F0BEFA012000F0BBFA0020D0 -:1014700000F0B8FA002000F0B5FA3C2000F0CEFAF7 -:10148000052000F0AFFA212000F0C8FA002000F09B -:10149000A9FA802000F0A6FA182000F0BFFA8020F8 -:1014A00000F0A0FA4E2000F0B9FA002000F09AFAFD -:1014B0004F2000F0B3FA272000F094FA012000F04A -:1014C00091FA00F07DFA002800D0012010BD000044 -:1014D0001800002010B588B040F2026000F024FF30 -:1014E00040F2036000F020FF4FF4C06000F01CFFEA -:1014F000234C4FF4807303221021204600F044FB5C -:101500004FF4004303224821204600F03DFB1D4CD0 -:101510004FF4804303221021204600F035FB4FF4A6 -:10152000204303221821204600F02EFBA31403229F -:101530001021204600F028FB40F20E7000F0F4FE6F -:10154000114C204600F022FF684600F059FF4FF48E -:10155000404001904FF482700090032000210590DC -:101560006015CDE9021018200491069069462046C6 -:1015700000F02FFF204600F001FF08B010BD000072 -:1015800000080140000C01400038004010B54FF445 -:101590000041034800F04BFB002800D0012010BDA3 -:1015A0000008014030B500210A4AC3B20DE0002016 -:1015B00006E000BF01FB04041568401C80B22B55F7 -:1015C000148A8442F6D8491C89B2508A8842EED8DF -:1015D00030BD0000601F00202DE9F84F1F469146E6 -:1015E00082468846151A01D5A0EB09057C1A002C05 -:1015F00000DDCC1B4FF0FF32CA4501D2012000E0D4 -:1016000010460090B84500D2012293462E1941465B -:1016100050460A9A00F018F8B4EB460F07DCCA45AA -:1016200010D0009926440AEB01001FFA80FAB5EBAE -:10163000460FECDBB84505D008EB0B002E441FFA33 -:1016400080F8E4E7BDE8F88F491E401E89B280B2F9 -:1016500000F052B82DE9F8418046DDE907501E46FA -:1016600017460C4648B90CE023463A461946404610 -:101670000095FFF7B1FF641CA4B2B442F4D3BDE8F7 -:10168000F8810B4640460095FFF7A6FF42463346D9 -:10169000214610460095FFF79FFF3A462346314604 -:1016A00010460095FFF798FF3346424619463846E4 -:1016B0000095FFF791FFE2E730B50B4C039D2060EA -:1016C00021816281A5814D074FEAD10000D0401CE5 -:1016D00020826282E38123B1B42B02D0A180E28018 -:1016E00030BDA280E18030BD601F0020014908604C -:1016F00070470000601F002070B5184C2346E68933 -:101700001B89D6B125465A2E6D891AD0B42E1DD00C -:10171000B6F5877F10D103460846218A25684143E4 -:1017200001EBD3018020002A6C5C03F0070220FA51 -:1017300002F010D02043685470BD591A491E8BB274 -:10174000EBE7181A401E83B2681A01E00B46281A0C -:10175000401E80B2E1E784436C5470BD601F0020DE -:101760002DE9FC4F401C1FFA80F9491C1C468DB224 -:10177000A9EB0400AB46CDF80490FA285FDC082CF6 -:101780000ED0600700D0012000EBD400610810FBF0 -:1017900001F080B28246203A90B2009000204BE0E7 -:1017A0000620F7E7082C12D00C2C17D0102C1AD0DA -:1017B000182C44D10098244900EBC00001EB8001B3 -:1017C000002711F80860F00712D00B9A13E0009878 -:1017D0001E4900EB400001EB4001F1E700981C4975 -:1017E00000EB4000EAE71B49009801EB0011E7E736 -:1017F0000B9830B3002229464846FFF725FF6D1CA1 -:101800007F1C7608BFB2ADB2082FDCD309F101000E -:101810001FFA80F9082C0BD00198A9EB0000B0EB5F -:10182000540F05D10BF10800DDF804901FFA80FB7E -:1018300008F101005D4680B280465045B2D3BDE854 -:10184000FC8F0122D7E70000A042000814360008F0 -:101850003C380008B03C00082DE9FF4F401C82B026 -:101860004FF0000984B2491CCDE9009492468DB234 -:101870004A46AB46580700D0012000EBD300059044 -:1018800010462FE0002026E00F98002610F809707F -:1018900009F101001FFA80F9F8072BD0109838B32E -:1018A000002229462046FFF7CFFE6D1C761C7F08DC -:1018B000B6B2ADB2082EEFD3641C0198A4B2211ABF -:1018C000514504D10BF10800019C1FFA80FB08F17F -:1018D00001005D4680B280465045D5D30098401C3B -:1018E00080B2009005998842CCD306B0BDE8F08F55 -:1018F0000122D6E7109AD4E72DE9F8411E46154695 -:1019000088460446079F0BE0334641462046009731 -:10191000FFF726FF6D1C082E07D004EB560084B29B -:101920002A78002AF0D1BDE8F881A41DA4B2F7E717 -:1019300000224FF48071014800F0BEB80008014059 -:1019400001221102014800F0B7B800000008014070 -:1019500010B5FFF7EDFF3220FFF7D2FCFFF7F0FFE5 -:101960003220FFF7CDFC02490020087010BD0000B6 -:101970001800002070B5C0F3C705A1F227114C4232 -:101980004E2000F04BF8284600F02CF84F2000F0D5 -:1019900045F8E0B200F026F8C4F30020BDE870403E -:1019A00000F020B810B5222000F038F8F72000F041 -:1019B00019F8202000F032F8BDE81040AFF30080A5 -:1019C00070B5002449F6404506E0641CAC424FF077 -:1019D000010005D8FFF794FCFFF7D8FD0028F4D1EB -:1019E00070BD000010B50446FFF7AAFC21460A4C62 -:1019F000204600F0C8FC0221204600F0E5FC00284B -:101A0000F9D08021204600F0DFFC0028F9D1BDE8A4 -:101A10001040FFF79DBC00000038004010B50446A0 -:101A2000FFF79EFCFFF78CFC21460B4C204600F094 -:101A3000AAFC0221204600F0C7FC0028F9D0802132 -:101A4000204600F0C1FC0028F9D1FFF781FCBDE879 -:101A50001040FFF78DBC00000038004070B50D4607 -:101A60000646FFF76DFC002403E0305DFEF7AEFE96 -:101A7000641CAC42F9D3FEF7BBFEBDE87040FFF733 -:101A800067BC000070B5074D0446C1B2284600F09F -:101A9000A5FD0721284600F0D6FD0028F9D02046F4 -:101AA00070BD000000380140014800687047000028 -:101AB00010000020416170470AB101617047416127 -:101AC0007047000010B54FF4C06000F02DFC40F2EC -:101AD000026000F029FC40F2036000F025FC0121C7 -:101AE0000A4800F0AFF8012303222821084800F03B -:101AF0004BF8084C042303221021204600F044F840 -:101B00002046BDE810400421FFF7D4BF000230009A -:101B100000080140000C014010B5194C2115031BB1 -:101B20004A00A04221D009DC164BC01817D08842C9 -:101B300018D0904222D14FF4417408E08B4217D064 -:101B4000934218D0B3F5406F18D14FF44274204639 -:101B500000F006FC2046BDE8104000F0F3BB40F268 -:101B60000234F4E740F20334F1E740F20534EEE7E3 -:101B700040F20634EBE740F20734E8E710BD00001E -:101B80000014014000F8FEBF2DE9F04301F00F04FE -:101B9000CD0602D5042A19D0144300254FF00F09B1 -:101BA0005FF0010202FA05F61E401AD007684FEAFC -:101BB000850C09FA0CF827EA080704FA0CF848EA39 -:101BC0000708282908D0482908D008E0C26B44F04B -:101BD00003041A43C263E0E7466100E00661C0F80F -:101BE00000806D1CADB2082DDCD3082502FA05F685 -:101BF0001E4016D047684FEA8508A8F1200809FA68 -:101C000008FC27EA0C0704FA08FC4CEA070C282910 -:101C100002D0482902D002E0466100E00661C0F827 -:101C200004C06D1CADB2102DE0D3BDE8F083806818 -:101C3000084000D001207047C068084000D0012053 -:101C400070470000F0B5144C002801DAE36900E0A9 -:101C50006368420D120185B2C0F301579540C0F38D -:101C60000346032F05D0C2020AD50322B240934394 -:101C700007E023F0E062636823F0E063636002E062 -:101C8000AB4343F0E06201B12A43002801DAE2618C -:101C9000F0BD6260F0BD0000000001400168054A2F -:101CA0001140B1F1005F04D14168006880F30888F9 -:101CB000084770470000FE2F88B000F0ADFA0720FB -:101CC000FFF716FB00F004FCFFF7FCFEFFF710FA2D -:101CD00000F026FC0127FFF7E7FE06463546AFA0D9 -:101CE000FEF740FDB4A0FEF73DFDBAA0FEF73AFDB9 -:101CF000C0A0FEF737FDC5480168C5A0FEF732FD5C -:101D0000012000F091FA0146C5A0FEF72BFD02204C -:101D100000F08AFA0146C6A0FEF724FD032000F079 -:101D200083FA0146C6A0FEF71DFDC9A0FEF71AFD05 -:101D3000FFF7D0FBFFF766FBFF24B423FA227A21DA -:101D4000C9480094FFF7B8FCB423FA227A21C748A7 -:101D50000094FFF7B1FCC448FFF7C8FCFF20FFF771 -:101D600021FCC248FFF7C2FCFF20FFF71BFCC04864 -:101D7000CDE9000400217A23FA220846FFF76CFD22 -:101D8000BA49B948FFF7FCFA0120FFF72DFB4FF4E1 -:101D9000FA50FFF7B5FAFFF735FBB348FFF7A6FC9B -:101DA000FF20FFF7FFFB00241823B2A221460A20E0 -:101DB0000094FFF7A1FD1023B3A232210A20009462 -:101DC000FFF79AFD1023B7A21D210A200094FFF708 -:101DD00093FDA648FFF78AFCFF20FFF7E3FBB8A1BD -:101DE00002A8FEF7CFFC182302AA47210A2000947C -:101DF000FFF782FD4FF00108CDE900487423F0227F -:101E000067210A20FFF726FC98499748FFF7B8FAA0 -:101E10000120FFF7E9FADFF8B8A2DFF8B8B2DFF87F -:101E2000B89200BFFFF740FEA8420AD9FFF73CFE78 -:101E300000F5FA75012F4FF00401584615D0FFF751 -:101E400039FEFFF731FEB0420ED9FFF72DFE00F14B -:101E50000A0601214846FFF7EAFE01289AF8001019 -:101E600050466DD001290CD094E0FFF7E5FE012823 -:101E700001D0012200E0002204215846FFF71CFE99 -:101E8000DFE78AF80040012F01D0012700E000279A -:101E900092A0FEF767FC02219648FFF7EBF902E0FB -:101EA0000120FFF73FFA02219248FFF7A8F9002826 -:101EB000F6D002218F48FFF79EF98E483C3000682B -:101EC00040F6E4414843000B00EE100AB8EE400A29 -:101ED000DFED890A30EEC00A9FED881A8548C0EE12 -:101EE000010AB3EE090A403030EE800A8AED020A98 -:101EF0000068484300EE900AF8EE600A9FED801AF1 -:101F000010EE100A60EE810ACAED030AFEF72EF900 -:101F100041EC100B7BA053EC102BFEF723FCDAF8FE -:101F20000C00FEF723F941EC100B82A053EC102BB0 -:101F3000FEF718FC39A0FEF715FCCAF8044029E0AA -:101F400009B980F800804168491CCAF80410322998 -:101F500020D38348006878B182A0FEF703FCBFF36A -:101F60004F8F7F48001D0168854A01F4E0611143ED -:101F70000160BFF34F8FFEE782A0FEF7F3FB00F096 -:101F8000C7FA5846FFF7C8FD4846FFF7C5FD864823 -:101F9000FFF784FE002000F009F943E70D0A5765BA -:101FA0004163742053747564696F20436F726520B8 -:101FB000426F6172640D0A007765616374737475B2 -:101FC00064696F2E74616F62616F2E636F6D0D0AAD -:101FD00000000000776561637473747564696F2E27 -:101FE000616C69657870726573732E636F6D0D0A2D -:101FF00000000000777777772E77656163742D7422 -:10200000632E636E0D0A0D0A00000000140000200C -:1020100053797374656D436C6B3A25640D0A000047 -:10202000434B5F4148422069732025640D0A00003C -:10203000434B5F415042312069732025640D0A00F3 -:10204000434B5F415042322069732025640D0A00E2 -:10205000457061706572204D6F64756C65205465C4 -:1020600073740D0A0000000020000020C00F002043 -:1020700074260008322E313320457061706572205D -:102080004D6F64756C650000776974682032353077 -:10209000207820313232207265736F6C7574696FED -:1020A0006E00000044657369676E656420427920A4 -:1020B00057654163742053747564696F00000000B4 -:1020C0003E3E2048656C6C6F20576F726C642E002A -:1020D00000000020000C01400008014048656C6CC5 -:1020E0006F2C57654163742053747564696F0D0AD2 -:1020F000000000000024014000C0B2449A998940C9 -:10210000000080395468652074656D706572617473 -:1021100075726520646174612069732025322E31E7 -:102120006620646567726565732043656C736975C5 -:10213000730D0A00546865207265666572656E638A -:102140006520766F6C7461676520646174612069D5 -:10215000732025352E33666D56200D0A00000000D1 -:1021600008ED00E0456E7465722049415020426FD1 -:102170006F746C6F61646572202E2E2E0D0A000044 -:102180000400FA05456E7465722073797374656D89 -:102190002049535020426F6F746C6F6164657220E8 -:1021A0002E2E2E0D0A00000000F0FF1F04490A68C1 -:1021B00022F004020A6008B120BF704730BF7047A8 -:1021C00010ED00E0124A10B55168124B1940D36A65 -:1021D0000C2823F0005317D2DFE800F006060606AD -:1021E000160916091010101041EA80310CE020F099 -:1021F000040041EA803040F0805105E020F00C00FE -:1022000041EA803143F000535160D36210BD0000B9 -:1022100000100240FF3FFFEF0248416A41F0807129 -:10222000416270470010024070B537A588B02ECDCE -:102230008DE82E0035A20446D2E90012CDE9041241 -:1022400032A20020D2E90012CDE90612324A5168CA -:10225000324BC1F3810119B1012901D0022901D00A -:1022600019462BE0516801F480352D49B5F5803FC2 -:102270000AD1D56A15F0804F00D02A4B556805F475 -:102280000035B5F5003F00D10B4651685568C1F3E4 -:1022900083412D0101D541F0100155686D0001D534 -:1022A00041F020010F2901D2891C06E0A1F10F05A0 -:1022B0002F2D01D8491C00E03F2159435368C3F337 -:1022C00003131DF8035021FA05F3556804AEC5F356 -:1022D00002255268755D23FA05F5C2F3C22206AEE7 -:1022E000B25C23FA02F244B1012C08D0022C08D0CF -:1022F000032C00D1104608B070BD0846FBE7184615 -:10230000F9E72846F7E700000000000000000000A1 -:1023100001020304060708090010024000127A00B7 -:1023200000093D00006CDC02054901EB90110A68D0 -:1023300000F01F030120984002430A60704700002C -:1023400000100240054901EB90110A6800F01F03DC -:102350000120984082430A6070470000001002404C -:10236000054901EB90110A6800F01F030120984015 -:1023700002430A607047000000100240016841F00B -:10238000400101607047C160704700000D4910B501 -:10239000401808D0B0F5806F08D0B0F5784F0FD155 -:1023A0004FF4437404E040F20E4401E040F20F4465 -:1023B0002046FFF7D5FF2046BDE81040FFF7C2BF1B -:1023C00010BD000000C8FFBF8068084000D0012099 -:1023D0007047026802F441530A681A434B6813437A -:1023E0008A681A43CB6813430A691A434B6989699F -:1023F000134319430160C16921F40061C161704751 -:102400000021016041608160C160416181610161C1 -:10241000704700002A480021026842F480320260BE -:102420004FF6FF730268491C12F4003F01D1994234 -:10243000F8D10168890300D4FEE7C16941F08051F9 -:10244000C16120490A6842F440420A604268426021 -:1024500042684260426842F480624260426822F40C -:1024600040324260426842F4403242604268164B59 -:102470001A4042604268154B1A434260026842F0BB -:102480008072026002689201FCD50A6842F48032D0 -:102490000A604A68D203FCD50A6842F400320A6036 -:1024A0004A689203FCD5416821F00301416041680C -:1024B00041F00201416041680907FCD57047000006 -:1024C0000010024000700040FFFFC3B70000340856 -:1024D00070B50E484FF47A710068B0FBF1F0401E01 -:1024E000B0F1807F11D24FF0E024606165170F21B9 -:1024F0002846FEF7F2F80020A06107202061284658 -:10250000BDE870400521FEF7E8B8FEE714000020A2 -:102510004FF0E020002101614161816170470000BE -:1025200010B540F20260FFF7FFFE40F20E60FFF7C9 -:10253000FBFE124C4FF40073032218212046FFF7D4 -:1025400023FB2315032204212046FFF71DFB0C4C1F -:10255000204600F047F84FF4E131204600F012F831 -:102560000421204600F07AF80821204600F07CF88B -:102570002046BDE8104000F061B8000000080140AE -:102580000038014070B5134B04460D460020E11A97 -:102590001A159C421BD005DC0F49611817D09142D7 -:1025A00008D114E0914212D0B1F56C4F02D1032052 -:1025B000FFF73AFE00EB5500B0FBF5F14FF6F07275 -:1025C00001EA020001F00F010843A06070BD022083 -:1025D000EEE70000004C004000BCFFBFC1F3080163 -:1025E00041607047134B10B5C21A1915984213D0A9 -:1025F00007DC114A80180CD088421AD140F21244EC -:102600000FE08A420BD0B2F56C4F12D140F20E347B -:1026100007E040F2114404E040F2134401E040F2CC -:1026200014442046FFF79CFE2046BDE81040FFF70B -:1026300089BE10BD004C004000BCFFBFC16841F422 -:102640000051C160704700EB9110006801F01F025B -:1026500001219140084000D001207047C26822F05B -:1026600004020A43C2607047C26822F008020A43AB -:10267000C260704700000000000000000000000081 -:10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000003A -:1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E00000000000000000000000000000000000EA -:1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 -:1027100000000000000000000000000000000000B9 -:1027200000000000000000000000000000000000A9 -:102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:102760000000000000000000000000000000000069 -:102770000000000000000000000000000000000059 -:102780000000000000000000000000000000000049 -:102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000000000029 -:1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 -:1027D00000000000000000000000000000000000F9 -:1027E00000000000000000000000000000000000E9 -:1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 -:1028200000000000000000000000000000000000A8 -:102830000000000000000000000000000000000098 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:102890000000000000000000000000000000000038 -:1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000000000000000018 -:1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000000000000D8 -:1029000000000000000000000000000000000000C7 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 -:102930000000000000000000000000000000000097 -:102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 -:102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 -:102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 -:1029A0000000000000000000000000000000000027 -:1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 -:1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 -:102A000000000000000000000000000000000000C6 -:102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 -:102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000000086 -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 -:102A80000000000000000000000000000000000046 -:102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 -:102B000000000000000000000000000000000000C5 -:102B100000000000000000000000000000000000B5 -:102B200000000000000000000000000000000000A5 -:102B30000000000000000000000000000000000095 -:102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 -:102B80000000000000000000000000000000000045 -:102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 -:102C000000000000000000000000000000000000C4 -:102C100000000000000000000000000080808080B4 -:102C200080800000000000C0E0E0E0E0C0C00000E4 -:102C30000000000000000000000000000000000094 -:102C40000000000000000000000000000000000084 -:102C500000000000000000000000000000007EFEF8 -:102C6000FEFEFEFEFE00000080FEFEFEFEFEFEFEFC -:102C7000FC00000000FCFEFEFEFEFE3E0000000028 -:102C80000000000080808080808000000000000044 -:102C900000000000000080F8FEFEFEFEFEFEFEFECC -:102CA000F080000000000000000000000000008034 -:102CB0008080808080000000000000F8F8F8F8F8BC -:102CC000F8F8000000000000000000000000000014 -:102CD0000000E0F0F8FCFCFEFE7E7E3E3E7E7EFEC6 -:102CE000FCFC783000000000F8F8F8F8F8F8F8007C -:102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000000000000C3 -:102D1000808080808000FFFFFFFFFFFFFF0000003A -:102D2000030F1F1F1F1F0F0F0000000000000000F7 -:102D30000080808080808080000000000000000013 -:102D40000000000000000000000000000000000083 -:102D50000000000000000000003FFFFFFFFFFFFC3D -:102D600000C0FFFFFFFF7FFFFFFFFFFF8000FEFFB0 -:102D7000FFFFFFFF0F000000F0F8FEFEFFFF7F1FC8 -:102D80000F0F1FFFFFFFFEFCF8C000000000C0FC9B -:102D9000FFFFFFFF7F071FFFFFFFFFFFF88000001F -:102DA0000000C0F0FCFEFFFFFF7F1F1F1F1F3F3F03 -:102DB0003F0E041F1FFFFFFFFFFFFFFF1F1F1F1F0F -:102DC0000000000000000000000000001F7FFFFF67 -:102DD000FFFFFFFCF8F8F0F0E0E0C1C08000001F4A -:102DE0001F1FFFFFFFFFFFFFFF1F1F1F0F00000040 -:102DF000FFFFFFFFFFFF00000000FFFFFFFFFFFFDF -:102E0000FF000000C0F8FCFEFFFFFF7F1F1F1F3FF9 -:102E1000FFFFFFFFFFFFFF00000000FFFFFFFFFFBE -:102E2000FFFF000000C0F8FCFEFFFFFF3F1F1F1F59 -:102E30003FFFFFFFFEFCF8E0000000000000000084 -:102E40000000000000000000000000000000000082 -:102E5000000000000FFFFFFFFFFFFCFFFFFFFF1F51 -:102E60000001FFFFFFFFFFFEFFFFFFFFFF07000066 -:102E7000001EFFFFFFFFFFFFDF1F1F1F1F1F1F9F02 -:102E80009F1F1F1F0000E0FEFFFFFFFFFFFFFCFC76 -:102E9000FCFDFFFFFFFFFFFFFCC00000FFFFFFFF87 -:102EA000FFFFFF800000000000800000000000FF26 -:102EB000FFFFFFFFFFFF0000000000000000000018 -:102EC00000000000000080C0C08001010303030770 -:102ED0000FFFFFFFFFFFFFFF70000000FFFFFFFF7E -:102EE000FFFFFF00000000000000FFFFFFFFFFFFEB -:102EF00000000080FFFFFFFFFFFFFF000000FFFF5B -:102F0000FFFFFFFFFF8000000000FFFFFFFFFFFF4C -:102F1000FF00000000FFFFFFFFFFFFFF000000FFBA -:102F2000FFFFFFFFFFFF8000000000FFFFFFFFFF2C -:102F3000FFFF000000000000000000000000000093 -:102F4000000000000000000000000000000000077A -:102F50003F3F3F3F3F3F3F3F0F000000003F3F3FAD -:102F60003F3F3F3F3F3F01000000000001070F1FB0 -:102F70001F3F3F3F3E3E3E3E3F3F1F1F0E00303E45 -:102F80003F3F3F3F3F1F01000000000000033F3F65 -:102F90003F3F3F3F3C000003070F1F3F3F3F3F3E87 -:102FA0003E3F3F3F1F1E080000030F1F3F3F3F3FB4 -:102FB0003F3E3F3F1C1800000000000000000007DB -:102FC0000F1F1F3F3F3F3F3E3E3F3F3F3F1F1F0FF3 -:102FD000070300000000070F1F3F3F3F3F3E3F3FFA -:102FE0003F1C00000F1F3F3F3F3F3F3E3F1F1F3F23 -:102FF0003F3F3F3F3F00000000070F1F3F3F3F3F65 -:103000003F3E3F1F1F3F3F3F3F3F3F000000003F0D -:103010003F3F3F3F3F3F0000000003070F1F3F3F80 -:103020003F3F3E3E3F3F3F1F1F0F03000000000099 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 -:103090000000000000000000000000000000000030 -:1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:10361000000000000000000000000000002F00007B -:1036200000000700070000147F147F1400242A7F85 -:103630002A12006264081323003649552250000004 -:103640000503000000001C224100000041221C0074 -:103650000014083E08140008083E0808000000A0F6 -:1036600060000008080808080000606000000020F2 -:1036700010080402003E5149453E0000427F4000D0 -:10368000004261514946002141454B310018141256 -:103690007F10002745454539003C4A494930000123 -:1036A0007109050300364949493600064949291E72 -:1036B00000003636000000005636000000081422D4 -:1036C00041000014141414140000412214080002D4 -:1036D0000151090600324959513E007C1211127CF9 -:1036E000007F49494936003E41414122007F414126 -:1036F000221C007F49494941007F09090901003E18 -:103700004149497A007F0808087F0000417F410055 -:10371000002040413F01007F08142241007F4040CB -:103720004040007F020C027F007F0408107F003EB3 -:103730004141413E007F09090906003E4151215E99 -:10374000007F091929460046494949310001017F96 -:103750000101003F4040403F001F2040201F003F2C -:103760004038403F006314081463000708700807DE -:1037700000615149454300007F41410000552A55F1 -:103780002A55000041417F0000040201020400406C -:10379000404040400000010204000020545454788E -:1037A000007F4844443800384444442000384444AE -:1037B000487F00385454541800087E09010200184C -:1037C000A4A4A47C007F080404780000447D400089 -:1037D000004080847D00007F102844000000417F6D -:1037E0004000007C04180478007C08040478003849 -:1037F0004444443800FC242424180018242418FCD1 -:10380000007C0804040800485454542000043F4439 -:103810004020003C4040207C001C2040201C003CFC -:103820004030403C004428102844001CA0A0A07C4C -:10383000004464544C441414141414140000000084 -:1038400000000000000000000000FC00000000007C -:1038500002000000000C020C02000000000000004A -:1038600090D0BCD0BC900003000300001824FE449C -:103870008C000302070201001824D8B04C8000031A -:1038800000010201C038E438E00001020201020236 -:10389000080600000000000000000000000000F822 -:1038A0000402000000010204000204F80000000409 -:1038B000020100009060F86090000000010000002C -:1038C0002020FC202000000001000000000000007B -:1038D000000008060000000020202020200000003A -:1038E00000000000000000000000000200000000D6 -:1038F0000080601C0200040300000000F8040404BF -:10390000F8000102020201000008FC0000000002B1 -:10391000030200001884442418000302020202007B -:1039200008042424D80001020202010040B088FCEF -:1039300080000000000302003C242424C400010293 -:1039400002020100F824242CC0000102020201003E -:103950000C04E41C0400000003000000D82424240C -:10396000D80001020202010038444444F800000378 -:103970000202010000001000000000000200000030 -:103980000000200000000000060000000020508819 -:10399000040200000000010290909090900000004E -:1039A0000000000000020488502000020100000016 -:1039B0001804C4241800000002000000F804E49475 -:1039C000F80001020202020000E09CF08000020305 -:1039D0000000030204FC2424D800020302020100B8 -:1039E000F80404040C0001020202010004FC0404B7 -:1039F000F80002030202010004FC24740C0002031C -:103A00000202030004FC24740C0002030200000004 -:103A1000F0080444CC4000010202010004FC202014 -:103A2000FC040203000003020404FC04040002027C -:103A300003020200000404FC040406040403000062 -:103A400004FC24D00C0402030200030204FC040062 -:103A50000000020302020203FC3CC03CFC00030025 -:103A60000300030004FC30C4FC0402030200030052 -:103A7000F8040404F80001020202010004FC2424FA -:103A80001800020302000000F8848404F800010218 -:103A90000207050004FC24649800020302000302EC -:103AA000182424448C000302020201000C04FC04CC -:103AB0000C0000020302000004FC0000FC040001F2 -:103AC00002020100047C80E01C04000003000000EE -:103AD0001CE03CE01C00000300030000049C609C10 -:103AE0000400020300030200041CE01C04000002A6 -:103AF000030200000C84641C0400020302020300A1 -:103B00000000FE020200000007040400000E30C0A6 -:103B10000000000000010200000202FE000000049C -:103B20000407000000040204000000000000000080 -:103B30000000000000000808080808080000020053 -:103B400000000000000000000040A0A0C000000134 -:103B50000202030204FC2020C00000030202010054 -:103B600000C02020600000010202020000C02024EA -:103B7000FC0000010202030200C0A0A0C00000017E -:103B8000020202000020F8242404000203020200C2 -:103B90000040A0A0602000070A0A0A0404FC2020BC -:103BA000C0000203020003020020E4000000000243 -:103BB00003020000000020E40000080808070000DD -:103BC00004FC80E020200203020003020404FC0045 -:103BD0000000020203020200E020E020C000030017 -:103BE0000300030020E02020C000020302000302C3 -:103BF00000C02020C00000010202010020E02020BF -:103C0000C000080F0A02010000C02020E0000001EF -:103C1000020A0F0820E040202000020302000000FA -:103C20000060A0A020000002020203000020F82093 -:103C3000000000000102020020E00020E00000017E -:103C40000202030220E02080602000000301000047 -:103C50006080E0806000000300030000206080605E -:103C6000200002030003020020E0208060200808FA -:103C7000070100000020A0602000000203020200F3 -:103C8000000020DE0200000000070400000000FF2A -:103C900000000000000F00000002DE200000000411 -:103CA00007000000020102040402000000000000FE -:103CB0000000000000000000000000000000000004 -:103CC000000000F800000000000000333000000099 -:103CD00000100C06100C06000000000000000000A0 -:103CE00040C07840C0784000043F04043F04040012 -:103CF000007088FC08300000001820FF211E000022 -:103D0000F008F000E018000000211C031E211E0036 -:103D100000F00888700000001E21232419272110BC -:103D200010160E000000000000000000000000005F -:103D3000000000E018040200000000071820400006 -:103D400000020418E00000000040201807000000F6 -:103D5000404080F0804040000202010F010202005A -:103D6000000000F0000000000101011F010101003E -:103D7000000000000000000080B0700000000000A3 -:103D8000000000000000000000010101010101012C -:103D900000000000000000000030300000000000C3 -:103DA0000000000080601804006018060100000098 -:103DB00000E010080810E000000F102020100F0095 -:103DC000001010F8000000000020203F202000001C -:103DD0000070080808887000003028242221300074 -:103DE00000300888884830000018202020110E007C -:103DF0000000C02010F8000000070424243F240025 -:103E000000F80888880808000019212020110E00F9 -:103E100000E0108888180000000F112020110E000B -:103E200000380808C83808000000003F0000000003 -:103E30000070880808887000001C222121221C00C4 -:103E400000E010080810E0000000312222110F00ED -:103E5000000000C0C0000000000000303000000082 -:103E600000000080000000000000806000000000F2 -:103E7000000080402010080000010204081020000B -:103E80004040404040404000040404040404040056 -:103E900000081020408000000020100804020100EB -:103EA000007048080808F0000000003036010000EB -:103EB000C030C828E810E0000718272423140B009E -:103EC0000000C038E0000000203C23020227382018 -:103ED00008F8888888700000203F202020110E00FC -:103EE000C0300808080838000718202020100800F3 -:103EF00008F808080810E000203F202020100F00DC -:103F000008F88888E8081000203F202023201800A7 -:103F100008F88888E8081000203F2000030000000F -:103F2000C03008080838000007182020221E0200B0 -:103F300008F808000008F808203F210101213F206F -:103F4000000808F8080800000020203F202000009A -:103F500000000808F8080800C08080807F0000008A -:103F600008F888C028180800203F200126382000C3 -:103F700008F8080000000000203F2020202030002A -:103F800008F8F800F8F80800203F003F003F200044 -:103F900008F830C00008F808203F200007183F004C -:103FA000E01008080810E0000F10202020100F007B -:103FB00008F808080808F000203F2101010100006E -:103FC000E01008080810E0000F18242438504F00B3 -:103FD00008F8888888887000203F2000030C302073 -:103FE00000708808080838000038202121221C00B1 -:103FF000180808F8080818000000203F20000000FA -:1040000008F808000008F808001F202020201F00E2 -:104010000878880000C83808000007380E01000042 -:10402000F80800F80008F800033C0700073C03000C -:10403000081868808068180820302C03032C302072 -:104040000838C800C83808000000203F20000000E1 -:1040500010080808C8380800203826212020180039 -:10406000000000FE020202000000007F404040000D -:10407000000C30C000000000000000010638C00045 -:1040800000020202FE000000004040407F000000ED -:104090000000040202020400000000000000000012 -:1040A0000000000000000000808080808080808010 -:1040B00000020204000000000000000000000000F8 -:1040C00000008080808000000019242222223F20EE -:1040D00008F8008080000000003F112020110E0031 -:1040E0000000008080800000000E112020201100C0 -:1040F000000000808088F800000E112020103F2072 -:104100000000808080800000001F222222221300F5 -:10411000008080F0888888180020203F2020000040 -:104120000000808080808000006B949494936000F5 -:1041300008F8008080800000203F210000203F2000 -:1041400000809898000000000020203F2020000000 -:10415000000000809898000000C08080807F0000F0 -:1041600008F8000080808000203F24022D302000CD -:10417000000808F8000000000020203F2020000078 -:104180008080808080808000203F20003F20003F92 -:104190008080008080800000203F210000203F20A0 -:1041A0000000808080800000001F202020201F0051 -:1041B000808000808000000080FFA12020110E0080 -:1041C0000000008080808000000E112020A0FF8071 -:1041D000808080008080800020203F21200001001E -:1041E0000000808080808000003324242424190073 -:1041F000008080E0808000000000001F2020000080 -:104200008080000000808000001F202020103F20C0 -:10421000808080000080808000010E300806010050 -:1042200080800080008080800F300C030C300F00F5 -:1042300000808000808080000020312E0E31200020 -:10424000808080000080808080818E701806010050 -:1042500000808080808080000021302C222130006E -:1042600000000000807C020200000000003F40408F -:1042700000000000FF00000000000000FF00000040 -:104280000002027C800000000040403F000000006F -:10429000000601010202040400000000000000000A -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C000000000000000000000F0F0F0000000001E -:1042D0000000000000017F0100000000000000005D -:1042E000001C1C1C0000000000008060301C8C6062 -:1042F000301C0C0000000000000000000000000066 -:10430000000000000000000000000000000000E0CD -:104310000000000000E000000086E69F868686869A -:10432000E69F860000011F01010101011F0101003C -:10433000000080C06020F820E0C0000000000307FB -:104340000C18FF70E18100000000070F10107F10B3 -:104350000F0700008060206080000000E020000067 -:104360000F3020309F70DC371030C0000000100E7E -:1043700003000718101807000000C02020E0C0004C -:104380000000000080E01F38E88703C43C04000000 -:10439000070F1810100B070D1010080000808C4C30 -:1043A00038000000000000000000000000000000D5 -:1043B00000000000000000000000000000000000FD -:1043C00000000000000080E0300804000000000051 -:1043D00000FEFF0100000000000000000000030FCD -:1043E0001820400000040830E080000000000000B9 -:1043F0000000000001FFFE00000000000040201847 -:104400000F03000000000000000000000000C000DA -:1044100000000000004266663C18FF183C666642D9 -:104420000000000000000300000000000000000089 -:104430000000800000000000001010101010FF109D -:104440001010101000000000000003000000000029 -:10445000000000000000000000000000000000005C -:10446000000000000000000000808C4C38000000BC -:10447000000000000000000000000000000000003C -:10448000001010101010101010101000000000008C -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000001C1C1C0000000000000000000000A8 -:1044C00000000000E0380C000000000080701C03B9 -:1044D000000000000060380E010000000000000035 -:1044E000000080C060202060C080000000FEFF014E -:1044F0000000000001FFFE000001070E1810101858 -:104500000E0701000000808080C0E0000000000075 -:104510000000000000FFFF0000000000000010107D -:10452000101F1F101010000000804020202020606D -:10453000C080000000030300804020381F070000F7 -:10454000001C1A1918181818181F00000080C02025 -:10455000202060C080000000000303001010182F0E -:10456000E780000000070F10101010180F07000060 -:10457000000000000000C0E0F000000000C0B088B3 -:10458000868180FFFF808000000000000010101F67 -:104590001F1010000000E06060606060606000005C -:1045A00000003F1008080818F0E0000000070B109A -:1045B0001010101C0F030000000080C040202020BD -:1045C000E0C0000000FCFF211008080818F0E0001F -:1045D0000001070C18101010080F03000000C0E0C5 -:1045E0006060606060E06000000003000000E018B0 -:1045F0000700000000000000001F1F000000000076 -:104600000080C0602020202060C080000087EF2C48 -:104610001818303068CF830000070F0810101010F2 -:10462000180F07000000C0C020202020C08000001C -:10463000001F3F604040402010FFFE0000000C1CA7 -:10464000101010080F030000000000000000000020 -:104650000000000000000000000E0E0E0000000030 -:1046600000000000001C1C1C0000000000000000F6 -:10467000000000000000000000000000000C0C0022 -:10468000000000000000000000583800000000009A -:1046900000000000000000804020100000001028F2 -:1046A0004482010000000000000000000000010240 -:1046B00004081000000000000000000000000000DE -:1046C00000848484848484848484840000000000C2 -:1046D00000000000000000000000102040800000EA -:1046E00000000000000000000000018244281000CB -:1046F00000001008040201000000000000C020209B -:104700001010101030E0C0000003030000F010088B -:104710000C070300000000001C1C1C00000000002F -:10472000000000C0406020202040C00000FCFF01CD -:10473000F00E03C1FE03807F0001070E0811111067 -:10474000110904020000000080E0E0000000000009 -:104750000000807C4340477FF880000010181F1045 -:1047600000000000131F1C1020E0E020202020602B -:10477000C080000000FFFF10101010182FE780000D -:10478000101F1F1010101010180F0700000080C01D -:10479000402020202060E00000FCFF01000000001D -:1047A000000001000001070E18101010080403009B -:1047B00020E0E02020202040C080000000FFFF001B -:1047C0000000000001FFFE00101F1F10101018084D -:1047D0000E07010020E0E020202020202060800043 -:1047E00000FFFF101010107C00000000101F1F10B1 -:1047F000101010101018060020E0E02020202020CB -:104800006060800000FFFF101010107C00000100AD -:10481000101F1F100000000000000000000080C0FA -:104820006020202040E0000000FCFF01000040402C -:10483000C0C140400001070E181010100F0F0000FB -:1048400020E0E0200000000020E0E02000FFFF105A -:104850001010101010FFFF00101F1F1000000000AC -:10486000101F1F100000202020E0E020202000006A -:104870000000000000FFFF0000000000000010101A -:10488000101F1F101010000000000000202020E06A -:10489000E020202000000000000000FFFF000000DA -:1048A0000060E0808080C07F3F00000020E0E020CA -:1048B000000020A06020200000FFFF30187CE3C033 -:1048C00000000000101F1F10000001131F1C181013 -:1048D00020E0E020000000000000000000FFFF00DA -:1048E0000000000000000000101F1F10101010102A -:1048F0001018060020E0E0E000000000E0E0E0200A -:1049000000FF013FFEC0E01E01FFFF00101F10006E -:10491000031F0300101F1F1020E0E0C00000000074 -:104920000020E02000FF0003071C78E08000FF006B -:10493000101F100000000000030F1F00000080C0C7 -:1049400060202060C080000000FEFF010000000029 -:1049500000FFFE000001070E181010180C070100E0 -:1049600020E0E0202020202060C0800000FFFF2009 -:1049700020202020301F0F00101F1F1000000000FB -:1049800000000000000080C060202060C0800000A7 -:1049900000FEFF010000000000FFFE000001070E06 -:1049A0001111133C7C67210020E0E0202020202012 -:1049B00060C0800000FFFF101030F0D0080F07002B -:1049C000101F1F10000000030F1C10100080C0609B -:1049D000202020204040E00000070F0C1818303045 -:1049E00060E08100001F0C0810101010180F070065 -:1049F0008060202020E0E020202060800100000076 -:104A000000FFFF000000000100000000101F1F1049 -:104A10000000000020E0E020000000000020E02076 -:104A200000FFFF00000000000000FF0000070F185B -:104A300010101010100807002060E0E020000000B7 -:104A400020E060200000077FF88000807C030000E9 -:104A500000000000071F1C070000000020E0E0200D -:104A600000E0E0200020E0200007FFF8E01FFFFC4E -:104A7000E01F00000000031F0300011F03000000EF -:104A8000002060E0A0000020E060200000000003A3 -:104A90008F7CF8C6010000000010181E13000117DB -:104AA0001F1810002060E0E02000000020E06020DF -:104AB000000001073EF8E0180700000000000010A9 -:104AC000101F1F101000000000806020202020A078 -:104AD000E0E0200000000000C0F03E0F03000000F6 -:104AE00000101C1F17101010101806000000000006 -:104AF00000FC0404040404000000000000FF0000A7 -:104B00000000000000000000007F404040404000E6 -:104B1000000010E0000000000000000000000000A5 -:104B2000031C608000000000000000000000000383 -:104B30000C70800000000404040404FC0000000069 -:104B400000000000000000FF0000000000004040E6 -:104B50004040407F0000000000000010080C040CE2 -:104B6000081000000000000000000000000000002D -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B90000000000080808080808080808080808015 -:104BA00000000004040808000000000000000000ED -:104BB00000000000000000000000000000000000F5 -:104BC00000000000000000000000000000000000E5 -:104BD000000098D844642424FCF80000000F1F183B -:104BE000101010081F1F10180020E0F00000000037 -:104BF000000000000000FFFF180804040CF8F0009B -:104C000000001F0F18101010180F03000000000004 -:104C1000000000000000000000E0F8180404043C5C -:104C20003800000000030F0C1010101008060000E0 -:104C30000000000000000020E0F0000000E0F81C90 -:104C400004040408FFFF000000030F1810101008F0 -:104C50001F0F08000000000000000000000000001E -:104C60000000E0F8484444444C7870000000030F12 -:104C70000C181010100804000000000080C0602014 -:104C800020E0C00000040404FFFF0404040400004A -:104C9000000010101F1F1010100000000000000086 -:104CA0000000000000000000000070F88C04048C7C -:104CB000F874040C007076CF8D8D8D89C8787000E3 -:104CC0000020E0F000000000000000000000FFFFF6 -:104CD00008040404FCF8000000101F1F100000105E -:104CE0001F1F1000000000000060600000000000B6 -:104CF0000000040404FCFC00000000000000101090 -:104D0000101F1F10101000000000000000000060C5 -:104D10006000000000000000040404FCFC0000002F -:104D20000000C0C08080C07F3F0000000020E0F095 -:104D300000000000000000000000FFFF80C0F41C25 -:104D40000404000000101F1F1100031F1C1010009E -:104D50000000202020E0F000000000000000000023 -:104D600000FFFF000000000000001010101F1F10C7 -:104D70001010000000000000000000000000000013 -:104D800004FCFC0804FCFC0804FCFC00101F1F10C1 -:104D9000001F1F10001F1F10000000000000000077 -:104DA000000000000004FCFC08080404FCF80000FB -:104DB00000101F1F100000101F1F10000000000037 -:104DC000000000000000000000E0F0180C04040CDB -:104DD00018F0E00000030F0C101010100C0F03006F -:104DE0000000000000000000000000000004FCFCC7 -:104DF000080404040CF8F0000080FFFF88901010F5 -:104E00001C0F030000000000000000000000000074 -:104E100000E0F81C04040408F8FC000000030F186C -:104E200010109088FFFF80000000000000000000CC -:104E300000000000040404FCFC100804040C0C0036 -:104E40001010101F1F1010100000000000000000C4 -:104E5000000000000000000000003078CCC4848412 -:104E6000840C1C0000001E1810101011190F0600F1 -:104E70000000000000C00000000000000004040466 -:104E8000FFFF040404000000000000000F1F1010CA -:104E9000100C0000000000000000000000000000F6 -:104EA0000004FCFE00000004FCFE000000000F1FD8 -:104EB000181010081F0F080000000000000000007C -:104EC0000000000000040C3CFCC40000C43C0C04C6 -:104ED00000000000010F1E0E010000000000000095 -:104EE0000000000000000000043CFCC400E47CFC66 -:104EF00084807C040000071F070000071F070000D4 -:104F00000000000000000000000000000004041C7D -:104F10007CE4C0341C0404000010101C1601131F94 -:104F20001C1810000000000000000000000000003D -:104F300000040C3CFCC400C43C0404000000C0801D -:104F4000C1370E010000000000000000000000005A -:104F50000000000000001C0404C4F47C1C040000D9 -:104F60000000101C1F17111010180E000000000088 -:104F7000000000F80C04000000000000001028EF02 -:104F800000000000000000000000003F6040000042 -:104F9000000000000000FF00000000000000000012 -:104FA0000000FF0000000000000000000000FF0003 -:104FB000000000000000040CF800000000000000E9 -:104FC00000000000EF28100000000000000040601A -:104FD0003F00000000000000001806020204081054 -:104FE0002020300800000000000000000000000049 -:104FF0000000000000000000000000000000F010B1 -:10500000101010FF10101010F000000000000F042E -:10501000040404FF040404040F0000004040405F47 -:10502000555555755555555F404040000040200F7F -:10503000094989790909090F2040000000FE024250 -:105040004ACA4A4ACA4A4A4202FE000000FF405089 -:105050004C4340404F50505C40FF00000000F88837 -:10506000888888FF88888888F800000000001F086A -:105070000808087F888888889F80F0008082828264 -:10508000828282E2A2928A868280800000000000F2 -:105090000040807F0000000000000000101010FFA2 -:1050A000109008888888FF88888808000444827FD8 -:1050B00001808040432C1028468180000010101091 -:1050C00010D030FF30D0121C101000001008040265 -:1050D000010000FF00000102040810000404048421 -:1050E000E43C2724242424E40404040004020100F2 -:1050F000FF0909090949897F0000000000FE225AC2 -:105100008600FE9292929292FE00000000FF040838 -:105110000700FF4020030C14224140000080402083 -:105120001806800007182040800000000100207051 -:10513000282621202024386000010100001012924E -:105140009292929292121202FE0000000000003F22 -:10515000101010103F0040807F000000000000C0D1 -:1051600080808080808080FC84808080808080C07F -:10517000C0000000000000FF7F404040404040FF72 -:1051800040404040404040FF7F00000000000000E1 -:10519000000000000000007F700000000000000020 -:1051A00000000000000000000000000000000000FF -:1051B000000000FCF80000000000000000000000FB -:1051C0000000000000000000FFFE020202020202D6 -:1051D000020202FFFF020202020202020202FF03B7 -:1051E00000000000000000001F1F04040404040469 -:1051F000040404FFFF0404040404040404041F0062 -:10520000000000000000000000000000000000009E -:105210000000007F3F0000000000000000000000D0 -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:1052400000F8F8F0F07020000000000000000000FE -:10525000000000000000000000000000000000004E -:1052600000000000000000000000000080000000BE -:10527000000000000000000000000000000000002E -:1052800000FFFFFFFF000000000000000000000022 -:10529000000000000000000080800000000000000E -:1052A00000000000000000000000000000FFFFFE02 -:1052B000060606060606060606060606060606068E -:1052C00006FFFFFFFF06060606060606060606069A -:1052D00006060606060606FFFFFFFF07020000009F -:1052E00000000000000000000000000000FFFFFFC1 -:1052F00000000000000000000000000000000000AE -:1053000000FFFFFFFF0000000000000000000000A1 -:1053100000000000000000FFFFFFFF000000000091 -:1053200000000000000000000000000000FFFFFF80 -:1053300018181818181818181818181818181818ED -:1053400018FFFFFFFF181818181818181818181841 -:1053500018181818181818FFFFFFFF0000000000A9 -:105360000000000000000000000000000201010039 -:10537000000000000000000000000000000000002D -:1053800000FFFFFFFF000000000000000000000021 -:10539000000000000000000101000000000000000B -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000FFFFFFFF0000000000000000000000E1 -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000001F1F0F0F000000000000000000000040 -:10541000000000000000000000000000000000008C -:10542000000000000040000000000000000000003C -:1054300080800000000000000000000040400000EC -:1054400000000000000000000080000000000000DC -:10545000000000000000000000000000000000004C -:105460000A0000000000020100000000000001002E -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B0000000000022222222222200000000000020 -:1054C000E05400080000002020000000AC070008A5 -:1054D000005500082000002058230000BC070008E9 -:1054E00000000000000000000000000000000000BC -:1054F00000000000000E270701000000000000006F -:0400000508000131BD -:00000001FF diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/template.axf b/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/template.axf deleted file mode 100644 index 9236dfe8d13827d10c2cc2496615110a9f68780f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251020 zcmeFa3t&{$oj-o=V`gq1kjV=IgvrfA2@x?o)F9N%Bbg8gCL}>oX_Jry5(P3Q!D5${ z0a3w64QRJ$?MkhESlt$>>}soPuy$)7wiA)ARjlK#zk-R6;h`Bq%=|vzbMBp)glHe@ z{{HKKxsZF$_j$hOd%owK?>+bCW=naMSCS-V9x^Lr1kI6{_HLiTl3!Ms%$Q|9(}6E! zc9z0?`An|_{SQ{A9mdbUPdd%y`z#qa7!Dn!d;HMd~|C@f^4BG=NG;4@0 zW)*j5GwnwwnV)=UUF@&00ylE>?0**clKOy!n7cT{oQZ*h6QmCtZ|FTaiMjiw<3^dy;FC&?1xglSsWKUec{x#1Cmw^ zNYYs@3;p})$pb9m3YYG9uYOV)H;!lCPAMKjzaR%4}tA8v#AQe^j+iEk9uxU*LvQ!Pf%79;bhq+m{>qCF)T<-;N|pmmUXR5&wBVnHo0Ozk(~X9eg8aVy(=}iUaRiE#9H3pyOH$A zNu*YSQq0(t114SWa*y=lBAXard}|? z)1N%=OIc+D*)^|umwS(b_VbhJYIT3oJWqc{U3I@YS9;LXZ&e;So~+9Eu?OMtCs}AP zEc{IIdm3#FEi>A<6m2Ze@S=^0Xrrs9-y-XQ`hH2C9{Bmm#H(a4v@2*CLu;=@bYxP? zzBgdi?9+bl)lPg|(luaV@*(ZGq)EZu=(DGevlQhust5ggH`A-(5vzB*cVckzH1OIi zhtj4s4_Fkdr>b8{7JWu?@UHE>K6sa<1-A98?3R9uq`?SYg)|aI`mTwKRJlN@x zgB>ABuCq@au(GNFZMl6Qk-6X>)VGX)GTPPp!LoKvnK{YtQw# zi=VYt*_K&@!8T_|QtmruV|yy>^B;GAbSN_TZy!ItnrXkmk6xs{u3yH6*>@@2vqZudli6@4(o{)q4hWsb=xjo*<;Qol}P4PPW z;j{iEiRK>7lO9O**7ZwlO5jC4&Le|Aj99!A`8an&W>18ALekZs?py3A`a)vAQ(8HL0eS8k~RV3IF zCbB~7Yb=z)*zut54`)or9Lq~A!&gE7SSaCN8B1ThZJ*TUI^~n3#?-|qg|Lb?x^VSN zu11zy_L07t?PA}!Hk;jhuY2f_tMTA!sZCpw>XaI*PvuBk8>P0~Q~q43QQjwoUU_!M zdo0N8vNIC-Xk_FlV<}Hsmf8;}kE%=LJuH-b+WyQJ!x?87yLu|qvKZ4-p432BAC-Tg zfIb{nz4D`2qC;O9*1ab0y>_O_LG8t~9PJ=08tUWL>rzlUn3lte&H!f2cfeL<@yfZn zR|;MKF)KVBnCaEwQJ+%^xu0c>m0*58pjP=g$2G*!XE*Q{z7uKKwvXk$@s3(7Pk1Bj z+^2Z50%afBYaTuknd|msW~Ap%p^dr}|heTU8IeMfd%X)b=~*T)%q^Qh`&xy~h(S?&R~26Ko#Ef}=f z0&~3!y-sf>V&eLb{ob8kg6-ZZfSW(IBCcBOY*v3CER^1OhvokSbAk1>$l!{P-QK0( zS^lvl7#Zv}pl3c-5o0W`aA{=l3nR*_)uBkSm@(uNeJ$C_11}s;RWiy_vF0cNDNplE=t~T09yNg3CzP6$ z+S7UT+XG3K^^OU_Ys=L);1$_&T(YP^u7530Ym?*YD&v-946>%77*_pyQ*-qTB@T;)C%R6UczQmMXB8d5@b_h4V~ zrlP{sKu72zrFhfcxVGFS{{Y>G|O3%CLHYvYQntuhqEA zPO*BWhq!LcF5Wb|a8e(%rj&(LwWx3cX_L7&CENsFd?9T@6|A~ ztGG^R)Q+o~_br0^Cm(!=)qZr8$`kx2j!y7}j%J0`X?Fu=`rToP4In2{f@tYaDPo#z z=tD_^=aV*JDYi`Pc!ga-9rZMqdsL%op2< z#y?b8#s(5BwqRLMduu{)T3AXF7C(JlN*H{(4%rEDo(L`oCg!3AwWu?R?UIYE0oajr zaI#XA5J(K>2esoiriX0uiDR z-}oNpF3ik2!+Oqols%PY&Z$aIP_e#3eK7d}ntdNVZ7E|jtU>Afwcg$@in!X6U0wds z>p>;?aE$M3;8TOex*2=y{>2W~!)AVXL<`D$R zjW+g*b%qfUEOboH_j{EPt7_;^W>VnmdlQ1XMLPTsdo7q*rNGzrO2HqUsAB0o#hdbx zbF>yFV+5CDq<9ObW8`h=TNqqZm=#!C_?5m(f-E=nBI)&1odq{#V|JF*N0YxF8GL{E zjdvzU$q!I;*buq)-E7wtK|oIS^_Sj}?1Jlc;*yiUk#axr?eg01WxG?KzA2jxND2Qk zkie8zdXGmIlKi6sHYWABgVIIpHE9N~^9`!A#2c&gNuy4-i?luMweQZgrM$u(SW>RM zw#zF8AB7%_q7=&;_6Jawmai(Fc`EP}ax(jI6`7)xOP1M#tWY^}OWC6X7|TIdc4awx zV<*Natz=RUwLtFCZI)N0J&Vg_EbzZk1Z@sPevppBN9#=AmHfDf ztO9*n5RsN*d!6lBiM7bSXY&2_a1xV(lkcZU?WvIVBq0i&4qBn49<^_FG=85(gpxP^ zc*GK%9G#)oXUk}fjMkhwV#fYI{^>%*-v#*5@q=8@h1L8#hj+4fhpN6}2`=#J`aaCY zEsoQNd1P;m@$`6KRHVbjGgwfc0q(<=pbK-~Xzs+ey6mJzyU$m#6&aX@>}qRUf^GN} zf>aJw0`gU)Sswn-pC-*r3dl3HzOC2io^qycZI*G~c73X6YqPK7;B~pk=?<=zaen@~ zRL{ZHz6$#R=ZSwuy&9 zKgC=LLBi%4SOr*UagmfXGXY+)LQn3gATV3o;1RAp_f%u~!$!De$6|kVDfT{z^;#BR- zw=+zNe8zcVqK}1Ej-*!63~<{>8_v(77N-*{&Z%uaykqwvXSNX^0_;BYy7&Yg`Iq>AW-1)_`7ofaNAG`Pu#nh)-*fJtv(})yy_$ zwtxQxD>Clb?*8c2%Iux{Ywpk5v^UD$k zB$hMeA36Z+yRSc0ZV6~uU1yg87k>Nbv&X{sR63lFo%{X!S*Z3Y)a~+n-+0GXL#sxz zck$E7!F=y!xYKib+1Db2PefX>AKCw;`_v&wZcQ?<-;KDv^N^>(BJeyExy+l7`#1sZ ziOlo5Az#92yCVN_6uYQZ$~X1K+^ws(erM}4TXlaQV*zKjzHRlk|J<7Y#FH1ufp7W$ z!(aUD!~VB$CZ9-^8Xxmi_8rKo%J=?h=d_)_f8spvHM7_6oEms?_VmC%e|Y;Ad!ORf zyt#Lr*XHs_1BWC;W6`=*3NmvYdn)#T?rE#{J$v=kO2?i12aaZ8Ex%=d+f*r-RA^Kss+L;YMovzHz_TIh!(E*h`=6xxw_6!v^9MNV?3^dv(ZrQ*qtVy$< zkwX6c+r0W^J^PVu>Pv%GeekF@D=m;bYjVIoYib~CR#_k0Q&7nUdYLrfm)MNdu+|u| zr3I26NDs0-4p5w+IHlu9*`90;^&g#9iG9ogmU{GP(w^cUv%Hz!#aQFci>%Myl6|B0 z-2Q*suU&NH5blAfmrrZ6k^<5mWK(S4Kz)j(FX_0(-hjoRoxxrm`=Zys-|wv{-;e$q zzDLUY_oECG1k)ZYW7-Q|rj;yZ8r|zUv$yT5#+}3V{gsqw-nSd=U*dhtyV7X!A!g~Z zdoMy%pC3%w!_K#d6MUu(VcP`(`<@bRE3L=B8(ELL%PrbJldZEqIMk9Y?RjK>?$qVw zDz{I1aIAHQ53xNoMp%#K{vGb$9OC;Eu=e*y?GLgWa7|eORL~t49VOAI|kA@|o!J zVVTcX*ACPEke`=VP#Nu@+~lEWV6WIGg4|wc`YL3TxU6o-ej!fwQZ5@Ayk%I(-($#Q zFKU_UJ-DCRcG1VST)H;$Jt^Jm<9kl<(PGwSuCcBrUq#{*63$ejIa2X?r#0zK}$zUou1ZY_AHdvf4jV1E3evm*;QcQ?((J<&Ds?|%w= z=ASwWYvv!v*)soqoUQW*aJJ1qc9hTA8JMrbBhO)N_eh}>^(Cu(SS^|o$ndc9szWIW z4cK9phb$jCoKpj~w(9;{lM{xL!!!Cdn~Lk=ew$V}QwuD{j~0CX`m&IsPW3$B96ai6 zVnJ(DZ#t`*6L!Y-+BeuhUd-mrS_J0s1A3?3b^dN1}q zw0C6i%8w(1*@(>_oxxhAJ()k0_m$j-7QY0~Leg!hQJd^*)$Gbq6IQ^R8o=Q-&ST4~ujDW{JzN2yn=oetEAF6>3L$?CzA0};{ z;jH{yAI93Nv-={0fBM*-fBVDJ4d_ikcRW1TfL{H06Qq8}r3#1d{FeOvkwNw2tbF+g z6$ZyIKE~+PQ1{~Q{7~LnV3BhTUtie{x%ZI8LDZ;?P_1U zp|wSK-=tsF>T2%R>$*3#w0DsFm)pDB^tl%o>znjBbLZ-vtz8}KHg>mnYyj=@%k{;r z>(+JXS9Nr*Yne^#I?oBQu5iMvcx}QSet+4!zwCkgcRCsKFQ{*8)w^5Q!}g}`jh(G} zOH+4~-rl932SeBBEv;)iTU)zyPwTp__KjUoLHwPqYg#*7H#E2EH+HP+Zdw~Bb@A+Z zYt~<>i@NBn;h9JIhHki~(p96oJ36}8bu_gAoIQIs(N#8N5%jK`x?qT2SvMXVCZ0$R zzi$kwa$=+Qg#H}vOYvie{as?RY*@8u>t8?7Ges^55XX-T*zb@g2DI zJ3IExe(COGv)RQDtKOI2VQDYDqo&P$nCYTyO`E%9dE4Bj2TyL5raU3dlyIjl1*Ui} z2rh4vPWdmsu=2o%{?f$0!`Eeo{M9T_v~)$AE)f-*5J2}r&un!P(s#@hXT1*d+OSLc2Y^79#(2{hb$*ow5dP* z`APY_+O~~f%pbCR`25M|^Q=GIzbb!7K2i3BG)oJ}_)%uDKD$@j=X+N3o;jL@=dy*~ z!J`y9;*exTwc4}76;zOy~uGX>-NV0$k1RSr@{fv0n>#;uJ9 z8(mFXn<&p1Y4OiZY+Taz zvLYbHq1}L7ZMh*ua`9)6GQVQy>oD2M`^m@fOz~&`!q|MxcVOb;>Qi62fwk>Bb3Ej9 z>^tt?lKOIWC|J3Enqp4QrUzYY?oW>%Lwjrrv;w) za9y?Br(lJ-Y=jN0VEfK|c)a?fP^Z){GvrcuYQMM9_pGeHPqAEuz2|2l&mBCe!B@VD zbUa0Ue(IFWJ?`{??MUhpe^xTGyQzK76KQ2B!8_bZf&I{)26*Cp8=@?=OvO2!M_dMv zxCe3XE%Ml%|B8q+_0ta0avr+_yX>q@3gyUBE}o|wdDHW4c{E#jo`(%o){L?kY3I)8 zJaEnf=R9!E1OHP!;O7Uot~ZFIxA(8L^yU$MK+G>nBg3R(m;;xa+T!XlQ2wyNJ`(bq zT>Ki(8WzVWI)Gp(Jd6r%zWMUYZ@zhCcz9DWaeM;vSYalb91#boN=gonl$0o=u)rUM zKdDg4RSdIUx^CfspN;SyPdc)BgN@Liw8A_pz7+`IX zGZ?qTx13I5-@66S{Cb^bk(yGeM6G4-bDV=)=8H3;nzvaTde~$Hbld zy}f=(QWV7|>W)NwppIr15YYY@-YEG=RSX+f`~(K#ANR1Khxow*#so?w&MeswOu$`^ zqqH<9XCf=c6-SPsGlfH?ix75TC4d-9a~ycf4}nOCQXsOkqIDY@1s_zV*c76f(%{Dp zcvLbchcuLy#<4(OJXX*-!)Oz7Qn=!1#pep=JaEnf=R9!E1Lr*Ozug19bRe&wi~oOy zGsu*))AezYV+>AqP`djNvb>S7K`Pm_`R2=cCdAZozOc{?3Ih4|s)DXE_o1KP9+>1inFA4~HGfevpXTCYh1U>8b_oNS~w$kj)X0{VMN zLTG~oLE*4ZkPQV!^+s}Mh=ijC7^;nnzZZ87Ba!DGy8RYEbLIzgcWnW-VHD`Q;7=fZ;I9;^oUx9u66y;^@jH4TM?d*OB3%N#t-ZS9`g`8ZZ4{Df4VWrA=rC;I7jd%1mH9RvURdWS2^)Agl10sNTsEW{251v0PZWw;8OLrY zJxdMaJV1-9WQdqB5*dy$>W^wZSNPxRfs3f&HvD55Tkww+6m2O=W2;-V^n7+n<%+x- zeAI;JyxDm!aJura8JwYAu4OO{XZl{r-bTElL`Cr(Yv zEAji2uJWaGSXM^b7CW0!US7U{Em~4pSUe>m6es3Fl%MyOw4$fTmn7pN;+#9 zRBr|yRC|WTWNCSVmCdcZdimvSb6RTJX10aPUhZ0eG6B;#fgJ$k(1>uY>TSdw}9W}x}3{eQC^<=C6uSk^fE7MnZqP$ z3vMM!Aymq8bf=z!atX@K8Cpg&vuQrf#?ahy41x4(y|)4%=iq27*P zex()xvsujobu;H7Jtb_opr9a&W#Kf;@fuqUojOxX%bYq}2yVO=-MxZn^PbUHX3JqeTi zjoC6&VGW+ysVbDBQc|jM`(*`OS=-Ct9tC)rX=*{is|JsA-;QBF34&=6T=;^44;K{7 z>NU#A>f71qJ8CX_6+EUaIUWswQnFfXItYVwz>M)`>oq%gd!eg`4o<;IR(I6sh;0()_f?dsE@~rwGnKbd9j5jQJb1d3d0Ao6GIWMC zwd^-e5|Dt0cU40t2{W05(F+7vRq`Ta1NbHhJVNzS%ZWu+h8OiN8s^VJT zbFwpw_^B=1w~M~8Sx9Hg9*$RJ1SyXhvL_i8U~%FCD!L2R2|G9YgXDDbd3JD75VH`E zH}%2B2VpbH=<#gM!ex`Uw}2f*Y8o4%7BL%I$0io{qDb+ETI3OwR27pSqK+CCckn3< za~eq+hjZ`VUXp}b@*B$B|EyQn8#x}ly?O!6<~*#|u*y<+{1Fxkd!nb5+ zkno8qnjUoOx>;4@-n}|0C12@b6uB^D>Az?T^!s5mQ=q2NAM`gG{?{7`E&MNdU@~~{ zb{w&DI|2NWd(p;S903*i2!7;0>Ns=v)66Kw1u$nHG%wIGub9sEWGntti6741P4pjA zn@a!jv5p`6^B6V@Bwt><`+zvk!!b4n#lFUoq}1y7+aR^ zgq>D<=l+nucG(WGQxCx5H6(yJ)|zm+CtBeTWNcL2+S0UM_SLYddx<#x+aV^;Bw0 zug)cGnAl1SFz`U9<#|f3pa<w{7xhR6ggN>b@+=P7-;-JSle}{A8b5RK#P5g(V!3s7GDCe zxA?`vV`#rEYeqqSMiS7yB|)6^MftKkqeR!jJ9dzHL`JBN<@$-$3;G{r)XLLtk%U zmPY!e^Gm=^^2AQ|>BWG&%0z$~Uy4*}2Ve#Wl9@4ox)Z6sH4e)wOw(7$I7amDzV z!1RI*4FW$G&`S&C3(*}E9`XF(qJw)6)|8@1AYem3fq>2a;dFrh$hXA!6b6d+?2T|{ z5`g)+IztCCLisT}A{i-|LST^V;~EL%EJ8p0;U@&0q>05EW*n68&+ktuPDVIkd=mmc zOrJA*;v8L+f$(qrs*lf5R3>_E@hm?7kowIc04OsC$Rc#Y!LPEs*-rrF%yd{KOq;68 z%YV%Yk7}aqNW-J$>}*U@bod*Kv+u&sr{3NMIV+uS`_n_W;lLS@N>jH)XAu0ojaUbR zy(r?@LvmKc_tsV_+fwZIE%p>F0$BAL{lEluOrynm@k72Nm)d#Q+b1d*)pov8^kTv7 z1sC{(IVHz#S6*0zR@+jt?Dizv1Ut=<{=2G5ILDtm`Gdup;j)oPtnGNIhp$npRvh%l zbV!jA0btD<{n|~hz`NJ1S(FvYTC`@3TOepAG!MTh&@X-1Bm687@jNDP-1U>%!ZpOH zi4z&W812v~Ianh4)bGm{Ml|xN%b-(#>5aX9fQD~)`z6~%csgq$Pe>54y+MN?7upTt z2kgqp!3hACEgV7*9`pb#;g2MD-4orHz=Xbvuut^US}g3?*z|qL<&t*4vr|8*%3clYN|aoLFJ1ZwrioA z4*zD4vtmowkD9V_s6v*WlWo_7K`1feC&I@K4-OGurk_Qh>Wx8O7s+Ds!G9jBFkC^> z&Gk5WUl?&p@htRYX%x=}4{GyMEK?IVlP0q+dzLlI(>RJp;ylDF4iOyAARx4zCh6XT zn8OWwXpfcZB3^zKbzxeFMD0oD_yT%duErn@&MmY!h`Q+JK_?x>S)2c} z7igm{32x5fekL40qV=5B_8`%NWP3y^9qA1^@ER%f*qM@paSNMKS1<9PQt)7+&)yXD zqd+`#;B`ry&z@TtjSFLLNsj9aK5;}MXd<#cywf23!c~2$p48OzMVr^=^0t$#p$9=5 z3TT*63_VH;Mxr^Eoz!8rlw=yqjlr!L>&elv>~Dk;w3~uMqUwc@c+s?p=tL52kMJTG zNheJ$m|ScOG0K_rV51HK#k+qqO))rZIoUS4ay`VRDwgZ#HA%Ho&Q^zC%7#!g& zv~m%jm6eoaa$(%woX{2wXM+dthd>Qd4PIBuSX+Z(>|mBvZSrv@u{a6;^U*`Y3`!yq z@+nxbYMM(fL9xRZzDrf_3U^}*$amxK?!No(oiCEkG3`RLRNi(G%w|YqW1`VeMGR)w z!Q#=Cjl+<)WLi?c>N>UNiGz4LgKE@=Y-m~iBc-W#DKVmGy9<0rzD0UD7 z8a8gbOs-%kD;ZtN69uEcl1C?Z@H16r^t(S2+0heCCQL2V@4QdLcVNi-uod?1e?iJc6VY2i>}kI#l9#d-L#i|7P&mD0Snf(M)Rg=C^z2^G=0p zCW$3w6bln|Ay=oWdi@74J*z60VH`-T%wqh+ zG+r4)*JQ=@1D@9q!r54A;;Bb+|hd4F`J)-iFNIN;0%^Fs$ zSg{d54JZSlrzBMFya`WEQgnd0vv)7~)e`#e=DVd4XHAvI>8!4)S>@zr^Ua6|?MMiF zbCAkvTL^y0A7cJ({P>TDci(Z_HoqSVaX9I&SsdK99u3^2LSt&#wk?w1@AS;F7kan) zX{xZ>1I3ZzKpG!v;&7d3Kw^8N~4@T}j4+B`215+#p%~xMLGrQW8E-RCs=_t{0RvVnYx0r*YZcX=%Lqu)35?DvdP) za|b^Vcl_w>1rrXuvB!^yxHu!xMhp5D%xs@@@M&NyF+#g6;)q1dk{sbnEb->#zysnC zQ!Ov&j8#K0&$Y%QjEf87ZA+g%E@>>%KNdkSJ%1kuZ-&Dt5?+m@Zw`z)NPZN81BA87 zql86WV^N<_KgplPO1%7DFaAWF@vtZp_AGgsVrJ|yE+>z!v7F<>zmG zx;#mNR!gd+Xy<9^mT6k5lqT7+LRd$mFj2=4L7B<6`GK%3x3RWaT67>bxv&u7%4G!;!#v?Odur&Ey%8HG&IvO&z`g$ayJN&<;Y zU~F;{6NN0oVf&J{vZtE#IavRv2@Wb|6P^mwlNenb6QH?rQb_{FwJ4%DOx%2|pt&ZH zlr$kJ8LIPAxS9Ev@=JjQ7xMmjRAB6Uy2#KrgBQ>&tSCg7nU0FlEc9Rz6{&E6z%e!} z9qqU<9i}ig8#|}$BBIPs7W~BmAc;99p0T;<64^H|oe>{Cs6YkAE}jj^%TgAmEJ#tb z(&WlX!Z(+UMhoPnF=U0oR}w=BaUHcT7>y*|i&Ff8mqHQ3BG#)#60XlqU3&`0w z2%t215r9qsWKSZyx=etv?u+>d-nfu^^u{kR+(@%8r%E)}GPY@vQGlbFB&M|33@p!v zkccay7vqPP8KtRneRJ~#Oxip#Z34sdAju}%6iwAEnpLwQvrEttwIo}zhEx}p@q^X} z%6$J;9c7UH33Sj}{mAvh8oFc0{?%CrqUS|9_`E;4H z=M?Ibvt|B#`^7x;8;to^@i)_G4xxF8;8(`LzaIk!#=won9AwH5kDdJ6CwNafBUV6Qc9}tKFH%6!+iUWVEnlaq^V*)BpXP7 z0bnY}>EW`gP-g~cNCu*C7e_?476Ufg(nw7)X)8f{40P543hi}aXqFpX(crXOnGD!^%R@K*uX#_?~4KJu-}{}brD z1Tfjzi~5qmUxTtM{qMIcx5BG&yn7)_yr%5$0qb#aH)N;A!6TrX{vz8x0*u@@Djxzr z`PYnvcj2QofKC5VfBx2;#B|^aa7Vvt8q>auvOE2z?Y3L3w^?picPKk!Hj=+~K!+J` zROelQTSyHG5w_PK0W3?;r8@Ka$^P(9QaOgIJ~bFzRbI>oeng9q3np z9%py7t^$0k(yWVoSp%5tFypB#4yL+afUfv>nGL$>>m7)P#rPYCCY|6Kz!2m52(BFi z*N=g(90RW$179-+UNr{((ipgL47@rHrnzPqzWf2~Gv_wEH_4R2}n02s{+0rcGu%{VVk5aeQpvG~3~T zy|0WTlL$QV7`iIr?R*&eD3%S{(s(=DKojkY)6*G{MB!x^XaRT7=P_Dem*tl+N{Y;YvHy;>x;_0fIgye8ZSpN zK;t4Aa=16*@j~-r8|ok$%^d`XA?rigoqpr?gj==SY`0r?Sazy+D0hmvjM`6p-H@aD zX+E{yYPn6lUD-h#rXD})`4gva{8T+z@Eh4WRuB1%>e+7CmXZ%w#OyWO_Ky3=xpdZ+SL$(8QwNKC&G?D%ZB;J+(@Y2SxK z-09=!ccp(xIW3_APqcS_eN_^Vd8(@gaYu6s<|}vlSGHTfYVoH3-3wxVCHi*IjrcR@ zRio%FSU*MEAspvJ@-fLfK_`E5;W#?=7twcvZqA9iirZt%8RvsWF;WkBH(>Hhd>oKI zlKofER-;V)e3qYpUu5v9$!??YP|kv#v8$H23%<9 z-vIb+ZpV1~ujl&BzO7Zox;AS3h{%+$H|qb@uYVh@yVxSe5BX~c{LwfD?g31`COY}+ zNx)`)MDWXi^*H(ozy*M5ejxfJ*P=X~HF1kZSO(xmb8fBVIYWTysy;6D!4 z?zwE$($@BM4L4pq@8VUi+GX_P@vL&UZ&)>Z_Nw*`&FeO{w65yvZfW1pJ-dy0I@bF- zHneW&zDx(BPGI{we8KqQ*~ORW8-4g#m5$Ms2K)$3`u!5p}IG4TURK#85&da974~Q8TZK;i6WqG%AVe zgLAHp!wH2zu8KoOP5fdUGHT(Mcs0K6PNSz<1(Sh*sx_QpebXkR@2<<`eP6P!d2{*6JFj?CLsxgxhL)zzmIizhyxrG^?}D#eRcQ=~wJr1JuHj6+ z_Rn%)crRPUzf>+hdp>7XO(#C1-rU_KuosHYrHfCiud3@<)BWY9&em1&So+?21GNK9 zn73+K+0qL!QrWr}u%=y%M*|T#+tJc`V|#OJ!}^YvR%X8z9+2~yqr0R8j+ zw7#{WtNklcKFzVAtIHHhcC>D2X>ZzK!gfdVx{l`S8+;w>nmXINZ))(hHFZTrGaNpA zvc0)!T@;hWYPx*w4ZbF-2H!=8!#mMdmWDqlc{lxH5Ap(RfR61S&$7D8I`mSsqt5D- z&q0SA`+~&gUy7$ufyBz%z5o(4%a*x{8$4}I8#c7A zGZZC_LK+H_Mt};(?gHdf-=88IZS;OL* z29N8C;)eQ_f+<~~s|T4?+Jj;xJn`&YW*9qQf0&7&BEg-{J(*tZ2eH0u%p8Ig47X?SbFD5O#8WuuVu zOg%=$3t0_~?uPoCe61|)EoQx6R?>$PrHr!5I+weu9Dk1_qx=d{l2}dojhJxiy7AXA zx>(w3i}hRbMKzv|4c(m`>qcQ0rT;WZ%BU@`E3YRF`~q?Bx~8=z-*+w6hvmZbqu?vA zt*x%*d@DSj^13>PzcgD@-q~rg{?=mswoEx~&FHncuCsa7#;&H$?%Bqlp)XDCpR?Q z*wnDDy$k8FqoJY6$I^-=tl%s!jY%~P4U~L$w{M6trQtCz5hvix=)K>#^;9Gdt6KSA zZ227cl~MvaJ`2B^4*jQb9D1SQP<32~rjbLH!?Jx5uE?AN zmWGzrbxk+n4WR=2Qn0S?!mAGdpjaH7hGeLrtF@cnA6oEFiX}ga1i?TbR4j!;Pji&@ z-xbS+CN9P~pjhT|Y;#QMR@HK;iHmZUJf>O}C6I0HT?myfSSOm%)X)GXWE4!mY{7r3 zmfIz+ptH3JZNZsmLg?QTO0cUUZ6m8=a^$Cr@?wvLwM z5^TZuES9gG#njMoV{0clq~t#=mTySh%r7^!cYms(tGe6Qw{~oV-IU6*1%npLZ8A4o z+>mky|I}*vnZl92Cfva_v~)Ioxuydp-XiLpl|BxNp1L|7@N}%}=)~5|u+|$FCWJPyI3IHQD$}FfG74Nj#6EHSeTMhf|4s86ZJ#`epQ3l<3`ga9q?|0R zoyLmes`eIiJ`Zy_Uv(^QZC~4lE+Nm#`Bp&|xvYuQ45rc8M2B#=}>DgPp;ohM0&OzGvA3a0#0PP>#(fiH8+7N)!|r&V&y|KS+C%c{ID zVBu^&0w-~1l??0dMnj*Xqo*lOZ``l`Xaz5X1mNsps>$0mLzYtqc0kFyq)8*5R) zxNA`n`M8@;M+|^Zh z`FL=COp!DA{YHbg%7r_ldSsgk@t7)i8B5aQG4*bw!M0Ht{GC2)JfhZp1$Zp+sLC?R zp4E6%buBVomZZevuHdLqHhDQpis!=pHBXS^EO*yk%`Eo3c&>6cvm}qg)YdagQXZ?} z-PEuK>32ixhK=i4+6g8dkmU3?t)_vP5QRs0RTj-OGKwcJSn(}0X4DuXc$n3ySkJ<9 zpI9x5Wn4;wa0ckgS#<6?tE#AHQK)mQR#iKTK>cVM^$?r)cf$-016$?*JxCzeWfAL^Hdd#K-YHx!q!m z?~Qs7vsmL1+|d?GJc@hJqQ;}hb(T@xO+K?Enn6qTQA5$ zgw<9>`XgHPR)QJ5WtCT4*m`oci!y?`Lq2H1nl# z)}v*{dNga?^=K}wM|t);vDVO0f(M2FwKb=+dE@6GC(E`2e`ZEMXyN1k?83mwZ zlEH_4Qf8Sf0NMp*mMH>oFRiI$mT3a0S+;^%vPHSf1rJRZW$ZS?JWaTf%F`C`vdarc zS$VOdrn1@v$HXAaX-W)&kQ#$vj3owP?zP4s=(NS43UrfzXy=z%5~2WFmnZ)?=vb^sA412wNg_5yY}M9ba%XB>cyWvrhndGQavWwp$0%`_ zi#bM(!(75K7J=c>#u3PlD6lEuI6N^5&*gB6fJNAGOlllP@T3_S3O>$~9zzJzG6aG` zkTYaPVNvTOLjZxu>5~OavB=>m0;X`}@H7DIfy-h1{&IZu@%<(v`tDMsr&Kw8=R^^GJQJ_1 z^^`2Dt9N7bm)Fgai&xgWsyH$=hODU)s3|d2mC0w3#9UyioL{_@#4S=nj2Sh}7gbqO zi(}~W8gBN~IL?~tT8^6*hpW4aqq5^rUV1RbvD4$Qu{d|cVXH(fISIl!aVa_e;P~(0 zl*1{)DbaM2%r#oU#*pHgJ%$qXrbQk@iMrH+J0a@iXhnu!E$SG&XX!Fbd}EMtPPEPw zZJ}MXxc21Oq&Lx?gQ??4^7b@%s%miyGlp!oNl?cT=3OVKX=7x~wh3zb7^-NWpk<7q zp^bttc?==iPC=eDwyn*0ccaq?>kn+w2Wauzac0GJ9x{E?-DVrHXvC1QE=!Cd%@$z^ zi6PC7N{*qTW?}(}Gf`yaZ)ws9?0VU72-nGy?A#n~3TAyVY`6{dB!*kc#|e5!3=+{4 zu!?Ag5e=TDED4Y7X^rXVYHn}n##1E27dItHcU$E22Q#D$&(emvt8tsnsN`DAM>v&g z+;bROC5m%#Uo13BAG*qQkP9OHYYfJ8x`lDK=mG!E1!}+=}uTs3ym_=ETr8OYZU*B&oSq z#z9K1Ck~QxuZe@C+$-WB{4(k>S8`(DoO3L)CKYW41}Q+{!pm{>)r; zuZ6el*KsY|6l2Mj{`6E|QD0kKW%SWUvUC^~2es|l%H!6wMpd#gM`c}kElbN+Ft(MSS;Zr^$;?47 z7Svu@URKP~N{e7~f87$+eFFtuC<+FnVy#}=)k1`^mP&-cs9_iSg? zF_)!1NFuWGd{o3kB2SZuqP%vt$UK(zI}%Zp52GS3H$>hg5mmWc6SZ6#Ysq|;CaVxp zl}EL-HLCQ1gvQsfv>YJ)R;AaFxWy6^xtOKR2Q_4K)YVr)c_XoA8$18q`~hsu6<1bz z4F5V5>A0*GJ(+ZuBVvf4Su=Uqak%eMZUxCBpHFXy{7Dvmo9A(jRv18dXugj=szQY|YmpEKe zrbWuXCc;`wpN<+YcrS+GPAEZ<+OXK+Dl>{z$}!HVFwzTT1L!r%#~i6rKv7-YKsGA( zC5dhTIxe7gg4PWW;eJl|bce)JIb(O)la`t~kK1tQ&8l?2q7>~+PFDVCXu`)G;xrwC zCUS4RVVml3dFqk!3jZ>w+7Q$BJBt)lm7k@LWCZj76t5nUHSTi zv>Hvyfn%$&wVU=;D-E?DO%R@W(>kg_-?k#cBu70BF%fObs|M%97$e5mOJLld?Wm_= zLX5rH%GQZOWgH`n`3Q_JfYJ1|f4cGmgE2d%5#uSx2947ll~)-W!zg338r`qt52L&+ zs==YWYiKBnX~6JmA`K2lm54PZe_xKHih`3gJei|>D@E8hdVu`{gr3TA)Kr#1191j8 zfT2ggD;$7t33!zQmkQtr2QWPmCCCA|g@Cs?fTk00j00#M0q^EGJe4%15fI{lA#;iY zhD?|PhRkpd>rPv1t*NYEW<=#qt900+6#XH6)u=e~T93-W0|XNsR0x?yeqEo)K^wx zZ;w+8m9M4=XOA8)N`jm}i>pDqNe$)(s4;-~Q8fmlL^*u68qk(N%_6P_9wRkQuEqe$ zqG}ApV&%c~v#bGa7t~a7HSjg5so`o2pgyX`K&)gnWmnZ3ozSXDPgs?rCnqCZ>ab|m z3JuKRi24z(dN-yoRLX;Rx)L_D#q~5s(tBi4jNMRxF-_{wHWH>$U2jf> zu-T!!FiBW;e#{RThzpYVxb{@JDwolFhUhD-qZlNFpdAK|cqB);WwH=QT4A~yqjeL+ zzn|kME5A~#h)Vv89IC&%rd$~En;ceCUsGvxZGVFFGn-QMX4Wi+$wITdX(%nCwO8;; zsT*tE=F*1OR$OKr*g3wzWdw2tCq=<5g9;~7*kv131Jn(w5q1Rz)c^}w&9WLiD&TK( z{ya$vXiCwcDOpM+OSC<%8{qWrWHKEooQMUoo$|S;_1>DY=(?ZmSazkimiH85k^{V> z5QMm$iq`2%mcE~$6n%55-BA`x1el`?yP1Ywl>l0=sdXAWZ_M3tK9({M?t%D==|&sg zPL}RTRJ!dBELbZPNyc3o-e}W_}`oT2mpOPl=G^eh$yQZ_fgMQ7RqO)V8 zuN}W2g!i!MMXOPGhIg>m;s$ixM&s8G@Ea9zV)g5NBB5mq-JOq$A-SB$5e>mK`t z7hAMFTYAZ`seA)}dB1i!Su%`o!tht=*`n`fORpI$W$j(#@+^EiTk4Oioqn-m!&=B2 zubRc_JKKair%NBjxg}0EPK+&ja=NrFS$NMw`&jh)zgbB<{9ejg!e@7^+1ahF>wVE!FhZbixVcIf|ri{Gv-&yp4p!fBIe4`28As=bYZB z0{iFS$$vNYX--}6**y9G_Bc=e^NlC}^0-g_HQMhIZ=#jFCrcfPYg@Y;$a8qZn7cPF zBusbz|6_mb@oVwR&Bf>T$Ik7Ko!cKfw?B4nf9%};SnQ?~w@v5v$Ik7Ko!cKfw?B4n zf9%};80~_c+aLSixj(jOuVehpj8ECiSoqrCyr*`L{yE%Jd*;8mr}oTvdul-b_wA`I zJd^v0yG@_E*|hLSd4K(u+n@fnEw|nIfBBZ%Kjn|VM<`xn`o!5V=_I^V7B6pX znTjuEu<->K-l9lVM#c21(WlnR8N?=94O{rEB3*4r(pyiTD#;n5l7ou0#*n0!fId}n zB{4)LpHrnSL$ao>=2Hdn#j57kt}cAeqxpLNEB1JNW9nJ7!y@@5!(UvHF+@6i)oVzQ zOBpWvG(`)4Yr!X?42zci8H<+TSN_K}XW>0o>3gOYy#GWGp#MzU+UXljvG)AZDm@u( zkEuYk2^-R!SM)y~M~sqOc!y0oBux{M=XTZMee}vtt=f%GX+cS>>KANM(5yPDKvccj z;1yMmm0Y+}lio91?RBlFs{ga?<{y?CW&fgIYSNHdeVh_uz#95ARb1=OmS1>Vf^?^B zbf6b+$9#G;uJLs>$A!^P5~K%ZBa94Tqhih{+C5rk!PZ3S0n=a}G3K)XioIxv7_k?H z$3`%o5j=VJGlKPqu+PB*f+}oOzk1PU@_+z;lS+K0#`sd>r+$|v!ani4G|C^0&!{|v zPYwK^Sb4#Z73p5tdfmqLzJ~4&eC5W+ztlkw4w_n8I@u~<8mNS+MvRFo{!zh)aPXm< zuS-N+*WTRJ-QIyWeg6?MbcFE}_b#sS?VHu>eV>E%>Ou6}Q+UKM&Nm-kV9I~~U-sSv zz^$tKAJ0pg&_dBl%PK-d92{v(q%llSiDoOACz_uTc} zcW$uV-Kl^Y{Ik9Ko4Jy_pY3cm3qObB&F>H0@zQ1QuE@sRk7j~zW<6gnaQ%7Y;OO$P z4eLfyfuUrsm0OmL`uC{RDEFmrRIWtsus8#Ob@dIVro9;_KV1rB)N?{|1MY|4shBpFAKB4B2_q zg=oMtY|$FE)DI!P)>?VL+-YrB+z)FD4u-ppmEH(e&wwAq?J(;_LFqnNa=tZRJs~E7@3%FS*u(d+rKNH;E{+YL4n{xr~4_E$K**c_5qjM_4<#WsU)-m0^(*^t> z-YY_vww&8d=H8MCZi(u;cXTz>Y{+R=AvHh20AJ0&77DA^n*_JF7xUIr^BK5bq8)!p zvAvrC+WD6RtYp9nG*;ZivRH1=TJfeEH^al7D^?r{4{s8ZK7DwfC5!!#b~2RLqgxR+kL6f14TqhTdGRt_ z6nL=@E_TNSKHfWi<1z0%)?hn)S0L|mPe=zh`1ZSgWF=aPQSp)%7|LPfdsKx$*^h`zl`hQ#k$iu zXwni?COzx>w9?bk@vSEwpK&z4`(vlp+M8 z28W5%uc2GuH)Mtc{~q~?s!XGw?#d-1n!kXe;w$xYovr2P@#DM?Ce&U_UUl^JxTb{C|YiMaTHo1@-VKzK25> z2Yfjld{+7R9mTN(+7GdzI1^cZOT;Dd;2lBGeQtUgnw7mEWFLHk%Yw}6^$5U#{Axj3 z5!ylIa*F^Q=QhMT!sE&Y;S{3hr1YmzPfXBNP}CteA|M#dFaIHa??yoP2SgWlfaS;d z1{VccttIH3m3F-yj_KQoyw3es5WGX0N8fX}p{OCpqi)c8oL0a%&p(eS ztl)bu^Z(Bvc$=4hx>*kl!THQSLu5E`n<@VBK8NNJj-SBXasE`~|M+y!Dfu5=Q&+u$ zfgeJC7xTCv23vUeL%dAuji)0{j9nM51@d;FN767u>#kw+eBinBN;AFJ|sCw@%O@c&944@Ul0;(LqA z?{9AMgXbzN+2kJVcJvFT& zAu|uwAswk{BNB3%gvgm3JcT7S?N8Gf>(bp*`GALqE=x`8MzO$iJ3g4{rc#ml?*H1^ z5j;-2hVLbKA~N^tG{%1Fwd@|55F7M5nCA}Xr*{EiKfa5xUUml#-%g*tG1Yxl`W{>| zm~w&-;^Ys0xM1YX@&4EJ#$(AZeg)RmU_ab*aA_`l>;+7HRsHadW6M^mBg{$rAhft7 zbXL&65yFRuhlnFnwfHF70~3C={@4!uujy~CGBf($DDucom3KHB##2hEca!j-Ig`2& z#xyB-#{Bc#V0qNNVXZy5rGEH|*R0>DdZ)n{zJwUg@wB2CfJb1H)8;r&i!k&pMD(GaMhwFaX1H;OU;qXlLZCDv zyEUyO22v?f6Oam15BOYC>H+^WJRdiDX2N(mvF|mnL~DZYRWOAEev%GO%}w==QNi|b ztWVMh`8RQQ_US3GOUY-uFH+mfrM_H-B5KP6= zXF_B8as=aZ>JB zo~hb=8bX$ASiVw^@{ZvxW?w5tk5Kp`1T4l;?=}F`_WG>=@p-}6Ec>ZlVY4@}3_hO@ z+D%tAqL!l#ek=5nV6s^(-tx2AZRhwnYw8Nj!>+}58utAjaCbVmH8)k3=nL!B*${5r zWGHung0PEZR3CDqEU=S-YShG@{WZ9ajhgrb7pugZ+ZK!uy{?8%*Wr6I^g8#O>EMn` z&geBVW-^quB)uNPKs93GrjfVe7N3?Eh7MOif7DJ24&LWpk`B%eM2DvDG4N?gin~Z@ z>UkKWj}Loe9exnsG3p8<^dptI$tsk=u1QkVuS}phq2Z8SQmNYzNVl8bU=lB8ZQdAt zeCUxn{0F{Mu{&$-7t_HK(WBB$eeJS!%k)D{L-%-+`letBl%LJ+bH|6y#-OiD@ja0` z`&>GBgKO$^pKB;~g<@iT$B@=mDz!q^tf)EJL;c+6(>!W$`6jPfb*@`gEXtDA>{%<` zoSM3&7OkeeJT>_*`0lwg`rO}53ND|rHIL-+4$@J*E_+f#dpI>G6sc(^?wLwe@C>Bx zc2|+~GLQs|*B`0hrc5na{T~3159@6H8JqF23 zmaRRc;Dz0fu*GXvuEZXB-AeFoEzcHl0qaIq9MS3mmV#o{p^BWTTfc6(x|xYcmyYr+ z4Q6C1M!NNpjdGbJ?nQJw&6%eLapw|LAICFOhDk$iU zfDVUs~t z>f&Yj)Z{1eo%~Yh=o{(aYm=0YRxH=`(X7ZALhe>mZ>lc?4PI84juLN#ishou#1l4N z@-yd!VP`YZ_IKfX6Lok^Iyg2hI#jEw+SIV|oNlvIfg!#SdK~phQqzX>snl1s`Mpqd zHy?U?3%+x9h3>wR4t^8Fb!P^=hW6HE)&0t-F16WXweeARr$KLf;d>c%hq2lTA>FC& z)acI8KJIjvnsy#eI+}t9xBP6j&epCP4`Yur(bippZys5ndqq07c>e#BPXo zg>FV|`0`bF^_7pM+qB9ye_c;-Nc9G%@E)%(>0=D`$C~mx5QI4vxOI=QSZ=T#L%NTp^hQ93Me1JO?XKgQ zs$K&;%#^`qKi?ZCWiS=`-vQr~cf+9hr|ICz^i(MWoZq*0!&sdMFS@lVLwr8fu8L}8 z-RN34u%~Xn%TSb^y8ANj8mv{lP;{GyUa7LFyF<74q=U1xZbw(gRcmPPO;l|b+c}(S zA8oAK6rRLy-WYtG*zL*K7=9MMCquV$Z%+qL1*+|!!O9l-RA5MUqVi(aIuufA7w^cc zTat5LnM%DDVe(1ZGxVIE^^X&so=AP-J2elTUY8Dj@9C5iP&{KXB!?&J^z@KU-(~c7 z^b5o$m%bFcMo{06rT+ez4o=kiQx8ZCdSRmKreJ%8ezA>h>60W{zjkB*xmC0g;H%9uZ z33LzjE;cGmVRPB$+1~ijA@w&Ews+twFf96QIyfUc)#}iVH4W9RMq~bNvK%)0h;E%4 z9|K)%yg4;kvTj74_j8BY{aVwT{S111=y?n}J{8}apy#=G27TQmvDNi!4jnsk8P3>- z_p!qc^Xj^x-_t19*La@^giE5;t4CJW598r-YU27jVEk-$KR-V7`eWEHEBPRv7tH;4 zI=DdTbz~#nTVK6wrPb^DH5=9~$5H0$n61FD9c(n|tM}t3FhRX15o;h_wZccL0yzAI z(SDo{-BX$OQ~wX9gZnaK*D(zl#T)u7jE;T9KVbqB6#o-q;njtkl%`Xu3tt$zW;?wU z-_tN3ntNd;_?Xi5=xQ8wPj_8LYev_Gelm8p#X7%J7>G@+SZm>w3h$078ZAVHE@kNY zWvkY%L<=>#N*_*n079`hOUJr$Wc6WVSaqP3R{>c%x?VqyTS`v6Kf{r*d|n`Z>b2A0 z+Xvs?y--dMq=ReHQYTFDD23Uk$WWheO2DrXzc7J@*=y;)N6cuSI{pd*^)kxa`dp(tKh!G>e)~~VpQtud1q{-lRZdya;O=V-R1zu z=U^y!v*se>L#G_0+>h_r|3RnsrGtM3YMiomWcet%(?j7npZh)XVSqRm5#Y=VD)Nfj;Frdg2FjgS9`uN z?2)$k5WZJYSMb?)hSC++S=NuNUcY8t{fKoVhhn3!oh2KN%ap1%dktZH*wlIGZ`hNx z>WpCYWS+R z{u}hcBwhW>>gqxC5MJNF^LWS08)cKRll%~TZ`}v^|3eV$q;`_G+J?vwOv8&}{7ehC zJL4&@!&s6$0^g2TVN=wkEZ^-u;6v$PQua_h0$QF5w!1lHNcKl=;pIDppts<1&uJ~_ z4-fU$GynvHyFwTIJb-Vc{Kv^E?b%Sr{rH{+mCXHJ5M_-Ix5kHqtdy>{c| z-07d?u*!<>POpZCjE95I%}J$9&?U&;nr|cEN4&Tl7dNO3Bfk%g=R7}!H_CIU-6tZ? zbN?I!Cu4WHDlqu;Q%^z+$pbpa<2t`H-~nYfeDBfuU7lMp0#~5O>~d^8z-%BD7!r8v zmQQ4SFuu-G-xGP=AKyJ+gYt!EhN{l*N}NMtu&H=E1D=dG(31sciLb`}@CG^ZT<(L~ z)b8`rhrAB%3L$A9e1nDAk&U>g-v)+vAZ#|nho`G>DlW2@Xng4{h1|Rd-_xkKFQtQ$ z(pxGpz=08^4MmkUnCm`AltYe5RL(r3v@c3{4q;e$nH=;ur6u$eDs@`CY{$vD zQYT|KKtwRjB6+o|oI zf^VC{hu0rjU&)OD;x%E>73pEBOz(CJhV;GO@D?n*BE7>u)0e#rZyX~biwAiwR1NE@ zMb|uMGpIuO#Xairi1wA-1vjgtC&qzNxh?mPjdpy3uC)1hLQw{>firw%RHBvs_+N5b?#!30x1KQReCJx%` zs5w8XTIX6O6!qul5=sXMfeD2Vuir}O(;W=un$QRqJ9xs@cGsf8nv9ARtmXQU-bp5* zQzcY2+X)QK{xCg!#(kbS-+LP0Tbbv-2ElPbF5-D8 zFeHO2%i}-KcObua;X4BZ5SH`CT+9tqU}#pTOef6w#+PlgjA^?|nP<#%SLb|xRDppv z>N0*DwjEus8CP}rVASJ7@V$`veLM)3<%ZTTJ8UHE>?<%-C+lpFf7`wtWlY%%EyWbKMWaVR*Bo5hWpwjZ9tYwMPS5#$gP2D4~K zv2@%t?yyAA1}lUQhs8GKLsI4K_+nqRr;1Ctqf0+#W#xtyBgl@QaMNWWdHc_nD517i;?I*{!$FW~XPj+CDpV`|MVkcjcz%b^$&mw+H@i zBUDp5W@O%tyInHx0Fc>gdUkr|C<@ssvvqFg%)6)OW@!3dGi!3M6oBxqnN|3^H4+J- zWT$XMy*m=KQ*L)$Zj*WY&bgQ7rl$j|_vfq+9*GKpI5L&`$hIPuoe|HgakF*iXo&_7 z4j7gWaY_mD?W3#@&&Hskxn@=%a-Y??4?a?Y@Fq1;dn zkZmRmi-x(j8QIKEs>)<@uK@5aDKnO@BrcPA=kD3;PAI`$5OyfSXdS!cW^508$Q(UA z^OBu`z09Qf*iB0_57R?3anv5tJYxo8$jyL(N_!EY{$^jF*$P?%Gz0c0Nr%xw!8F8; z(&BGr?d#S}OT)2v9Dp?7m^#*x7v-d5p{{bfBCD(%IkX+pIZTF0qubbu^#ol^t}VMO z6ZK+TqH&>mC*xjNEE_JeQNA}c<%4xgeHq)d{P18nlT(uRq4k?`~+wgGC5^*Q%x zJShw^KMR@Cz~yFS9)1^!E`yCsQi7R3%k4+hEgCUt>-g*IjJe~z`Hfy1T7#QkpUw~S z=+S%Tv%wCger=*H@Src`^IYZ=RVa(0k&KbDx!qtHsKzkaf2h&P_L=ueWS8`i37D z8!>$MWMSkwa?|l&UGRpvLtnkKHD{!NX3c(_Ek&MxIJ886fV4?DZlZ1QU?QY#e_i#m z2cj7bq!UK@l{PKE2eJ*%WahB=#11x54iDLZoOY2jY17klu#)qd%}oyvi$Qw!-rV%? zKo-c^b92+fLr)-QcblH;q`ba}znG=P=5o(8Q4G%|Wg6UoMZ1RQ#CK$sJt#m;lf4-x z65-EC8**_bDt(=*UvI>1(p=O_%(E1%=c+t?1O4q^Q2$`+$Dr@UR4Dff)UTK0cX#}9 zs>Xl2&R`dfP>jzwDSA04Zs|1JNwsG3yr+%lUm$H?$RTYzunWi{1=&3^7>iCpb>~!T zTl779Aa!~Q_hOC#nan&;%$8*Azy^WWY*yGW;y1&raq^6Nuwo8@YlO$IB~;M`xtFrD zL4MU7i%;6HR`P6ZNf$AXk-)mh*s^tFv4bRZnamGTlQW+Pf?ammC6n8EH+)`(Z|2xw zXQ$aK7Px^PZ#-! z|5s|Di-ugstJbQvT)gxsk9hGAIbg3c16j6nt}PumovtJ9pC!e;rS(k@<%s(R#Le=~ z<+Z*qgf(PRTTb6}@(uI)IUAp>naym+I?U-y?(M9QnH{7BV&&x*<$?qP%^We^mdzzw zIGuEdjg)jq8;P+TlgH(p9wdnKJ0^6B3{19X>$$y}T*)sv8Z>fmg^hI@s$Xc!HXOx|Di$JWO*|fIB#>ke14zi)JAJ~?Kic>8M zbhB1;v!&vun`Fd&Czl;uz235M(*H8zJjbh9$mf|`G@o>3j5z;}TE$jOERt5~f4ApC z!1lQv5a`wSEnD_<2aI&x%XG;{Rb}1QoV`VLLg%`O`vAWN%d{-Zh4BumM)br#;VR2I zyAoA3lX@QQQuz)&_rrzcVgh#Iz$nd(4m)2rEC^VNGgEW-WuamC650voF~xyDf)Em@{G7 ze;2?zOqb=gT|mO73KdewL)Y0Cv*q13x7YUBDQxn%7${RPF)`uK?Z&jQh2Fs-l$Y6t z6DPG?J4G7H0Q?9aW6G!U>PTKqkp;3X(GG<4O)sv2D7Ce~|Ipbu_*Mw*~E*j@poCcyHs>Mn5ycqb=3PvTLGoZYvMKVE5a?)}`X9 zU@ofe%IAf$Q1BAg1kjG+kvbRMw?_v%LlzRY$8t40)$ER$m8i$lD02#)pif5?K&Q!x zOAEeOJaK~flntn5-N~^A@-zg!A=>t<(xRIqKY5F$g|32-mQT5~Z~%|m%T-D);03weaDN2N6{~g7&1G9O zJ$&^W>A9bCN_L4-JQ&QfU)fgblPGChS+|(72ik&2VCE=x`&-MC3h4u%_i<>*p6JpC z@xk*C>buMWke*xtUrYqB^9cREWMPaYi>81Lm|AxM7kd0{)K(SK(_0Ld2wkhSjV)Cd z=$-(Hx=wYUS=pt4IUG_dHh{LqF84}Mj-fa>f!ZebDi|ly_q>ngLb|1c7}}-` zq1eN4W+s!VmuB9@iH0nnG95QbKQ8tOGmYLT@ED+(W$DWC*iJuqf z2r@^|Twxbd-fCTPOO-cWm>?g2V%NR1uH65PcAgGE5bv21ubm%mS=*sg4aE5%`?KlU zsiN?#464<2^x4Cf(m5SgARRwY>5vr?Wj3mThwYZccIV)4()y*{By|DU8C_XFVpjXCrF>q3Z?U+vYjpKeta*;w&713Sy5kyu?Q(^r4c^U? z=SYz>aoR)g6fo$W*c@_!49|o3h)5ngV?kFvW#*H0z5cBBatuG`c<2`bru33*TE?Du z&V~z=^klK?bZ({^5JN8qi|jp{&sVl z=qOF)gj$*Llp|>sIMPgwL%4{bgqXbXSFW7uOqsswbGTtqJ!5A}buo`y`o2 zrBUs6#zy7Cq=(9JFpG4ny7k=R;yd(+KBIjk6<^qBS(tn)911Jwrf5BQ7wuiu_v~LnEoRqZdFv?>OJR9F`tU|m@R$a3A#h4#& zG$4-bBtBEfWZudkv@jwPRbwlKVVcEj^oiW;p@D} zC09c58}UVUvf16RhZV}hgB+@mgMpm%*Rok%s`|y-P^7?!md}?lR-b_izg6a^oZB!f zk`AplWNtUoWG+G1!s$5MfuqHi_Dr$`)33O~XFJ4q=26_-1Yw61%qX5e;Y$s0K*18B zin*-CdwzM%5@&LNtFh9t5`QTvezY3iSRbo z^KUN8O$sva3!n$Lu6&xL;RO6`Sf8HVGxufV^wgrNaLjg)tvRGN^q?2o2MY(=H%egEY&>E<3q6H65A_y3Ka`0!3Dvv2m# zv8(l!1eJNsweC^X;7xa?=j3_vi1~>UvN9p0BPs zW|L1B{&Ha~NG&ulE)|wa;icSEP0&RcD{I0T#!{HgJ$6CrNvR%f^p22D#)gLDuUjMZ;-O-rcEd+YoRnE zm5Q*|bHXVWs5or40QeTD(8UZjp8_smf##OKH25Gj=m#-<+Sa1MC{RBLeN9xJN?u4F zgQQ*YSrh0eO~=bi8UTubsgci4_^VQDmCK^u3*SfvR7DG=fdVBBywK)04VUt1#osP` zJ*#2lD(IlM;PMbbt>X5?Et$M{_rR@Us4`-fEb0dS+7Imo`XiA-L#iY{isp^@VfG@W zq|ia~k^=FPNQq%|_LIhy%_o!SYmilK8ooiw+9K}cE&oVb_Yta40#$vqDj*}(@2P-6 zjKb8R6V!E{zbEN%{Me5&frI!%I7nIBC&|_lG{_%z7eOjy$;>C?;V%`7>uLODC&O^_ zq3{>si!3v>gd@3EXeeJQD5h5v9}N-Llle=7^y9-V?oHdqD=M7S{ACiN)JhA3{89R> z;mUseeBOmnO0uBbd*!`{B4AANVPWL)_3WDAzRd09J}y(W&7|B#QB3164p)t(pOL@_ z_(M3NT}p7WXhX~ae+%jwf8B>!gDn2A+9#yj$Cz10Og82EADVD9?D?i++8GCbd)4)1{toJJ{MZlkrSxcmm@8#` z2bp4yG(bDVc*x6KL0|pBi-Um?IwsHRvlTbgCx1KCwfveU2|@Own|FJU3%?B^OoQR??drOfzjx?x z{{B*j<3~QX;V;9H#JlkGV|95CetxDd@5K+9ygYmzw+!|Ma9^@Pb~JDyf|Lw9aybh@ zDh6BB3lVe%zTTLjfLkWZixGFG4W^z{fy-LVLqTNn>n-} z6%@*c3L3N|xM10CYMVe_TMsYB4YbQKnEf!!GfakWCqb1GerQr&6~J9eF@(~rfw zL7~hugGdN}a&j3eVGa-CX-W{o!Eq!%c?2cc5rZRTqLdLzmZA#faW)wJJmNMf$*TAd z;^4Fe-$=hxkf4xUX5H)4i6I*1Q9jf*D|DnkR)VVR-j$WvCX`$=g`q<9Ky`_~_LHE$ zet;4EF~14=Qw0_(rD?(((qBhh9y1XyOIk`qM@n2sM~v=S=svH6G54%~5xEI@+zwQ+ zy1~GRE~v3+{4C)ZF9RdI%ub9hp`KE)jDx=m)%9flF45umu^-YXUGj>Nf|C*1kE%>E z&r@ltSqK+?TwQXnnwRwhI)@+7{I%rHPJs!MYsHPC|P{ z*)hH9Yy+|%1|`MEFh)mHWpw;~ou=jQ{yH2#_CtEZcOhKcFD zhuIA4l?Av1z7f4LIAT+*HB5*9F=_k%V;ForWwuUF%50OFl-U-p#F<9=e@fTu<-t<- zK!2@1KM!r#u+G79g+ZAq=}Eyhps6p)w-pMhU@EWY=L@r1Q^AXPJ+L5;%NO&qT&WCH z@@=W$CA_N))H-YBdMn}Wyny{$^ZOxax);+cc+3KU2s=#XA#NR*b3^MTyUja%DX!uN(H+xL~>m1SyG;}ady6C&fclu zrJ>-q0>j%10Co)nvp3EGFdM+jLO`KoV_PBLQs@A(JCRbkJXr0;pL*Xwsoa)tLGs!F zN{YfD_yD%=jRH{Rl6eKRzE{28Qz_2r%eTl+ePL(sP#FULuU?-&TiU- zi>vj4YO!AIU69AE@PT7rL2Bhb00YGZ^|nH5UwyE**T~s`eT40W`q2vdKMO5pFecXx|Y#5w7!0He@V*gM_=`-yHSav;$iop?3w8V|lJxZV)aremRj8uHq+oC6q_wrZwWDk4jmub6;|A zPgi|mxl-*J=+Dn;o!#2n(UA)FAk^8_ldtpWsFmw+`Y8-=^_sE6*R44ciGC$auU6_A zfZB?^)qE-q>!qarYASfOxkT{({X@OIso)L#VS{m)vgN^Yf4*&YD!3?+$LaYNR0_q8 z2qg${e1_nf4P!ABVSqnNcx2tW7>qE$mj(5nf$pwum~b20kI(bISME_pso-+n_sczs zA{Bfw=o;!q(~)nPCGEqNLH7WX2^A0LZK6}bSA*`J-g19uUs;gCEac*bptnA@YVGP} ztMWdW3T_H&eP|~jLFjG`$^+f`mRHl1?+B{p@`8G`T%%g` zt>2&JS%3tV@15sm%kr6dRS>EnqfPxE`ka=Gv#Zyl_y#KFda4m!9yJ9+W-qXT zO07IxM=MOVB5V+~q1p$oW$Ra^f`ib?_V@Pmmk}_!dL<6*O$8MyzO&X-G!T3s;j9~v zVys^89vrFSewbpl`k|m^3MKeUP05laRQLs!C4-}xp zBiZLCU`Dh`wv+7fLh7eH&dy4aV~S#J2xiHYv$^?nBZ5Zqqf!vbMV^eo&PuI+K*U2Y z7snAJH?9-M3YnL9oR#vz9=63I73%nG5@zH^_2Dx^?q$N;Q><3%aG_31Lwh5F+cBE^ zd?G5M+nnG8Zb<%u;}x+Bjo`wZRB%NSm?$^I3$b5{au$2F-R+wSu1o@(h}FChdv%1f zW>X8J_;M21SghfN*lVJkHnp?RQ6zy)#Jbde&2jcrD}$ACxo=QckM>k>T_Tz&ILwU% z-w@`7J@oX?6MNtk;KoF>p=8Gm$=`6i3sLDH7xntNnm2aL%a}sv*To(oyA(uLM0bf@0LWcX`-C~2>-tDFRWpLQ|sy- z==1lMoSEI7 z6@F&}{Fx&#Vi3vQo)FqdXMed`RZ*bM{5TPn2)q_aB|gLr$@h4?gO#3nm4Tr_5sU`u zr%9NI-PfsFiS=0__2(WZCNq^XT8>KjAQ23^zPACKoaBfAi2tR>&%#6_;4FwU?)w@N zBu5bwf=GT9ks+Co9KgnZod`A-ZkZwYx58V6Ay&%^2l`p*MJ)Ql-z7j%p)p2?e9-Z6 zj?MYB(e)n^phS^ABSiiw%s0?q9>xSxh6JhLp+vBuSjP;(4-0RR*{?0=?CqJS`t1EM zMvEg+kx@3td(?7ubmN9iQ28D|7bTXPKI>HXw|F+!ynDe3QsLijG zFpD#_;6IJ8a>h~cs_Ke-V>atu)! zh~iXFg2|vC35@JjdApY~hU+nf;QCyn&`{jwK z$mX*Hf8d-T0^+Z50!-Glc-YGq6G1E8jTA+8m>;sQbnGTyS~m1@RU+6(c9hhtF8cT}li z(iuk*#d&Oy_YL7HF~{X$tUh6^Ap+5ee=`A!N{lf=1{C} zQIunXu-|}ZwVIRHWNncPqSgK(JY-TUj1M#<5aFnkrqVPNgJ^zlq@W$aa!;wJIxx_! z)QPe5gUM((^&&pT4%vT*6fh| zNQ@iLrxszw-_)wVHY8{kgC_)$JQkDDS6p1g8nP+h#~Ttfi^LOxNKVRD^&!i}TBR53 z?nC{x?%qzd?8HTj4>lqQ#nDg(qBtcYp?5)bUdZv2p=8Gl!5_7}y#t+iZeNxkU3Je+1VymwN^NJV zH6M`y`R7^@c!XWYv#Sc86ByGuFA;1aKOzJ2KWRl^x`2n2{dmHp?4RA<`H5(vX2RT% z{HX|UbwPQNB%Hn9r<1_Oat$xUUKHW1mHYeD;ugeSoCrQAh1`?vsrA)sgBTE1dKU5# zxY71c1tFJHED zL==dg;CD$_lE^SCq&{dltBVHAj31+vKSaZmwCGqM=}(peLjxlTrSVWSJV}ycfuz4! zj_Tt6q7j9b@ZlJcB+Fxhu)kU!Jo?Z}Ca8apMuL+BSq6xC+|r}CjU1HZ6VdP_L5>BI zo)V6pMU{GI4Xs8`$&N?<9!H|mqHK`&wBo`O@=mPnc9s@fdH;$dF?kU-$U8PigYM~r z0iu&A&#T~>v3s8Po@6v8H-R0pj~DJm%^g9}tgRlr>SngmP>)ejw

      Y^Sf%RQFv*ZQri$W+-G@yRb?EPe@M#-BuhZiM~#mXhboU}0%U(Y$14!i`P1n*RW5pr{BlJuxevt7 zPHOKYCH^GMtX2O!i(g%vt0=`wNx9$x|LLv;VpM1hM#4-qy2wIvR$KgOt1O2u||j|d|3uluqwf(v!JYYWjnGmnRhW$)XB@Yc9Q+`&kW$N4=q{=aui6R<(0o#Wt{ z525zfc2$0*0J_=!p)%{aDjc*>SfI}5<8Qg_sXmk+!0_HW_+`Nk>R~wHQ{^1(wj5XD zvMRvK;wL?dm1W4NlhHhev=i;;sMP`Bqb5kgZ|2yzK83`b1n=xncxY`b`Rbcr;N#^p zcWUXE*(YJ_E)PXmlK5SE0WZ7cJ$Ufz0WJ3=WR%-~D7F$6qsH!BQKmf!`TS^50g9bn z2UHqP#W@bVsIl%*G(w>#gsw=%^%WJxSQ>X(?{(@bga?n#K^qpG%QU^Rx90YIoz!U} znAUz{fgR6p_wwS&#SAqM(c{#CLRz6+ze;5SjDm2vQ}lbNrVv*+=c};lBDps2cMubK4uGu9FJM zjx&oq?r&;*J|nP^ZQ}Fq;Z~?wp28jIBOlW`ZP7gBPm{7T1fs$oE zZEfyn?O3IEtnKG-bZeQP266}L%QmVN*4}VBJx&*VKxbjJD&*f%Yt<<4PnRn5f_Sr0 z(!$S!(w7$lUc-%P@=|u)d((@X`fYcAvHuX?F!sZrM1tn|V128u^ufkvyBMMVs#Mzr zs{&GiWFmO;;c!J|zcz87I=kccvp4!m|<&lHQAc_wnU@iSyN}2 zS80$jtITK*3BQh+oMxn?coCA6p5;nGEe~%Ua*34^rK1b-_rUZQ?K6&>L59o#)YBGnms>nvDx~g zLoIV8szxEB0KX)Q^!$JsGuF*$*>zc~N!8Ft>jMsmtZ0`M4tu5cPeC)nUxE_QLS~6Q zB(;13RD2H4{fF(%Q8_#o*hD{NPa|WHFQtkGyXu;8WuZgBO+IVd;Ng8N1F-S}dg_GS z`t#zn1jvg?%xu0e{Lwd^a$1Jq&v4k*$P=8@Fl|x2EB~xZ2My>mCCa|crxM>C?u>h8 zAaZc7i?=&y`6}UgxErmgG(8;>FRqTsfl|~=d^RmRo+AaeCXz${k{FLjCRaV#Oufbs zEz73-{^oyJ>*7u=kSy?+MAe4!$EO+nm^SvarxV2)3ztpp`!)cNXYlq#)JG3$kG3BZ zVQpk6t6~f9f<9TM9$aYSqrlsv;%Bb_ewTm1UMkEvR@^x85L%yI=Vm{%S+q}8_i?uu zs~6Enbk5s0hz}6CrM}c|Lcc0c%(L4hw_q|kV|hw_8fD$Czey(YA_6)7v#@69M~jCE z(J7!<)*}z%-izZzwJ2wz_l*Hu{~h44^F-xn-5hnt4AsETlN%scPL+B>ny}|Tt6S%^ zoSLmSv_bjPr0gf#gV(*9m^>exm&dvP3+A(~mSb7X0-g4}tZhH??U18wF+k~xw8>-9 zS4N)uW0IRoK)COE4Bpnh%zu1?XM5}$Kc|Z8I5qE`L`b%L$uN6d( zD62+3h%Q_*AaVHaE(m++1CdDTcVvXG2f&T0! zrsdvV4`Vi^hLC?RejBXqO zVa=Oe2}jbzz#x43DZ$8)gn0VM-EkcDGJTpOMv>wW{N!ClKsAW;^eJbN&ud?_oEUQB z@x{P`&UoAh=5^Ym!u5%AF&A_!ULrMwsmhqzfhRO{EK;RHJJCr;q2nSqXF8ePj^`rW zUX@zUj$MXt*rKM%#3G1fK#-+qL|seWu8dWb#{#cm;{0#)W2aWdIgMSNnSDcA5An9> z!2Cb?-#7fSd~~@+VugQWH=^Jpj}XIqfy~JtZ|~h*R&IV~14V_i>>5|}=s7AMR4u1% z4NoP1sq952qKt$EQzIQ2ME&2;^z{?7JIvG1(n`8s#q#Nm%~1AwoUpZ@f0xpfao$WkL(_-h&p&N?+Jf5cwQN0~8eV1rNRQYg zyyog#oFF&(vYOeA%e;~{NcWlvFMc=UuqjE z?iunT_><4A&f>gn*Nuz%vbmRAxVmKGWJpc0(>GK^8sOt3^|wp z7#6C}t?-cJK@`b9Pdd(XCo{U$A2O0g7@}YDH!e`q;-&(6%;aYi(^Ew}%oNcBDzEN> zqO9uo6iMMMACqO`wMI>;!`j=b@1JOMI!LHm5^0FDZ+Cw%c!qTUNldK$oamy8v~m4b z*uIvU@&e9oUu(Pux0VxD_P$7(^twCZVpW(~8zrFcd7WuGx4*7EIy1-9*Lp)KzQT-< zC9AEv0M~P0Z7AI1Icdnn*4zepJ&7bpJ))^L59%X2%jsZ9K#d5fnCS2iMZ1G4%2bE^ zj@ci9WNVCeC+b+>6}V1C@>#~oMe(otni-*zo?B4Nm)HCXaUZ-VjW3L4m@HLx7N1Tp zmr;NczxZ^k*LN8a27xrdiSjt5OB6=pPU&_wlKh{s3%BfGx=9o-*B}%UvWR<4->V=6# zMLCguKjbg+h`L`t+o)1`@0+8eU>p>w7#ui>>-bHh+10zRpYw)MfwFMzd0g2HVcLo=x0N(JWoeT&uQny)v_HhDH=Pw%`9c2bHdJs(9Bz{2 zjC=rb_X&{zLAP2nI_BC=|z*xvO}7N+QR5JFttD`A5Kds-I#{8dioiUvWR=|Olis=!+K zX+!<_NH(TS$!*-3wT#EqOSx~4?dL!L2qWy3++8X01!=ck;rKbe*ABS8!xmijhI4S6 zawV6vZPJB}OliMkk1=40;n*`>_Z-u)XIk!3GC!&)w-)>B65m|%i}v^Wby~M0)axE8Hu#7&R#4&-Nv9S+kBUF}a%FL;6fPVS*lkH;p z9P4_-hK0!O&YPYh3=lsj4c)Rqd}@%A1+>4^7k%0`e%+(m@~+!UnrQ`RYn}NoE*;l% zMyB1@y_?xsbF(e%L=XP%V8F&MDKzbfC)_tcV=Apd`WqFclz3tk(}#Cu=$BdL{23D* z2fqw@@@3W&AxpZmpyYH>lU5}srzdeDj%&f9QPxE`)5$on6e^2xhaUtoF2n-9hMMF^ z20S<|H_&jgsxX!)81OVV5*5p!vipa^sBCN>=khfJ{9iK4lv6oz7X&PN{ELQ?06yE% z8!PHLhS0~(C{nv%#=v#KL41NlL(7=;G9`bn%Z(tRU@w@Sy~3{T@+_16f`g25L5kcC zuIIEq|KWL{$6?$$m0cB=}<#EFkUE_QXL&oTGLQ9DlszahyzRkJvH(XDVI$-;! zGyP5cKeac8?5WK`RFf&OnJ+Qtm2jlRrX!4ro6{2ObetBt-j#S~6j7L$;TrX!SDS#o zv08=EggSfq=GAk9hL96+*65jbP%EaujeFi2;j77sCenG?MxcUqw{^I$R>E2+(G6kX zMTaR|o(y|tZVOZZqcb}CAM$i~DhITmg9h^D=vyTk06SQ<)C{)%BDyU=^h;dR`Iad) zrdI%uz5;|0;O9xRj^{CDQOQpQIORQhM}d{T@_eRKHhan*MYMehCKc5R#CKNsA(YW* zvTXodjjr}9M(1~%y#O(BUPA;7i&+MXLdy^%L6FAKrZ@${#F$Hta*IkT+*Ao3Y?|Rg z_y^))X@aSrk)oPu*M3}$n>v%I_??nCZGuNU4@RGFSYwQKR?D3;(CZ&2<@CVqT7V96DMqAMojlNW};{Rl%8yC~Q> z*>eq2f!qjP>AmeV6NSM~Q#N}mkBpf?R_jQjKGh9EfhYPC**Hcs zW!H0o3F3V?DhjKm^=?s9PyV75#q?%>oV*bN09x2t4NTtGSIr-NGN9;-Qc^jnU{xX7 z(L#khi(E3M>dR+@uJRX+^x;QCFIXKF)NbJ9IR*A?QwAiCi7tUx(aq-))>=!Wt#~=E z1*(&I71!@gg&p#HDc~FV%U~(rpyRyll#Ds{a8PA0d&x0ddU{j{YQ`>lsZ5IA3hUqQ zTr!p8Lue)Tu$?UAe>LFNv80A|K(+p!4kWq48!TQE6Y=2s%PQQw>h*>sebdob@G9vk z^}=4jUx0R#A98)Gsp)IwuK=kJR=$36W5m&QUG$e^D12ftZx@k(rSfv1Gnhm-YW8qX zlo6TX4_T^uBOf424TsWrrn{2IaCq0EY#w%neV+)=Rh9c7kE;JpeBmCSi`}KN1Tbex zDFP?T3(ydwwp({*t}nr?H7Og)+8BM*OW#pb+M7X&)<7W@X2WYuca1mnAdFCkNwsUe9Cw;VbZe5r2gsnDYKRjLz!|c% z=*strii%~3{!Y^zTjdnCJT+TkK4-I>I_KdRll+XN?S}?6Q0Ls8{gm_Lvrz@PmIqpd ze_OdR;T^vQPOx`8ZZ+Lo`VahXJ@o?8*nUjoVYO32;kFZo{CuoLynlrqEXH-MK`@Ez zk|{iDu)os>Z#IX?;_wMV^>C2tnVfx+wB)V~a9XqBAwj!60y2MMb!T{F$?yx{O9!4c zdWLDjykb#Cjy@Y|sGpB|R=u~X$ai*CWsUgJX-VRNLumbqRDDwSR~HgyYfFDCo@1cLpg=@F$VBqJ=+$K4P5g&i$N6(a*sUxyQKcy|j}4{@vi0?=zg5gFPED&L9% zyFL2JDVgElUK7i{P1hAAVK4m}jz>z?Z=}+ZtQHHKEv0}!8a2~{MrE@N+D`2NUwQ}A z(FJ_)RvyZq=;zUgde1d)Z3IAzu3rp{r_5Ul|Evjz6-^fFCw5ySJB{M@l3;Eo*QfJ> znB$WZ*Exepm{SymE!Xja7jWvJ=qR|X{i95hDT$2o+2(24*Y7O)~0 zZ^o*#L1C2d^P)HF_MFP2=70(g_AQ{ytj3l}bavU`dq-x@{RCX`Wd6rfJ|qVwL(6XP zJN}tmrjHv;q#{ZMT_@}E&7D0keDRm}xp~oo9`@ty$dp;m0b3tmK~sYPepIubq6+ysIjm*3t`xgYuvD^CtQ_R7>)Ydtv~EESw>Mg5jEtQl?R*mqO)e z702%efRcY97sTTMu0X@KR-CJt#wDIEtL*?$AyxK>sbZ3UyFlg0 zQ3IWj+N6=`aJ)-(cnUTa(52os$mL;11QzubA+*&Y>a|id+rXwcb|pTyhTxys-z%dx zKl0m54DCzP3s3T}njEia5)Qi-r|@jS{qT(-t{=e)&vn0=BK_W9FHG5LW3xbij_6RDUktqNL4&1N%&)9@YDA_xr-yqnJXwK4M5!LJtXen)y8h(aA7Q4Yx7V6n1@$+T8Wf**q-BMe{o@-}- z@;(H!&FluEji$uvKq|WBPI*11P3jLe)-f9D?=5#EZ zf&Z)?*eA703z#2OF~umjV?qcc~iF%TNJ65BpY%E}d*$OnqukmHf zCbqkR`H)W{=bAC8@`3O{h{;IH53+^wSN>6I$`u3m3{DN+=j^g=eyGDQ^I>$Uz=Zco z=HD`Xfs921ezr~sMn?RghucP=5V!~y%n6et7f0HJU zu0_*Z2eXZH&X!_^okB?BbXS=+jj?C!E#-8yb!6CU?n!1(B>L=;<*HSs@%!cDIYh!= zuy($wTCIfS{N8tgG2_{wxo4MDF-xG?%nN6->!Sr?b-FE=Qe30h3Rb!LoK~2XQov`B z?umZZS9;E0yssXij#Akd^ra7Cq&q9&-IBx;b)D^7ujKzrE{-b(2PRNYkKH_=%h z4QPUp@%y!^=SH=YhqEl9;slZ#ceQtpRBu9K!S}ey5B^$EUNpdEYF-hfer1Y2??*1! zItHXYTcHoTQ%noBsq9(P$@qg+*{1Csxkjnk4l`3e_P6Y8WnWdwfxk`3QOSNefmkZW zz*Iz}49i!U42`woc8Ti32Ok}wpwKq+Dmz0%oYCZE$&Rlq7dV^c^u!;7yLMTI@zi_U z(ujY)>~ixXNX8G!)u>Tzjy)ruMv}vH!Ll}|_h90acjm~_MBd7h@NoQijFQCR#8%*Nv9+Agyu8V?4tMgGTF>>N;r&sgzQ}%Ib>1je@*$+=C7w`!on)h=CTyky8H^ z{7Fwf1vYO3&pDRLOrf?uk(w%{Yxn#5#RJWs1z(J_Ab55C;*k)~m2FZ&8n3ocmw+g@ zt|zgoOG?T|Rsf?V^H&sSHo!QHN!c~bjV3tIJ79myhn3;OeyiPeVPXZy_I2JT zNpOXUD3aiw9=;uhU(v;0Y84LtWltDactDYETjs9ube!CYq?&t=H4d6F^oXZoD7(C6 zn9iW>bwttWje^HfYHLFmB6o?{9%2P9qW*|box&QxlC&*l=5LtS*?5u>8{uat1m;Db zE7Hq@o|SMO*fb;CBVSP@h=h68W`QWFRuBeQyq}DAc6JYg2O99SHKpz+ONQ|4ogte zb#9%h`*VVia!0xFMr`s<$H{nH0W?zDub;=$p-zh+R&{$b6^}M~aIxO< zEniUMQVHTKa^;opu)0}0uGPm5T&uih9N#G}G+ikX+FViMsC)rJOAvHy?Dz5yt9|99 zxZ8EUhRK<}J7==&8*2yzJ?FJ@9Wol za0hH@_?DI$C)UAsZ!WKmEX@x4fCHW*Z1*fZulwhGsG}qg0zZf~X&APdjT({-c$jE9 zRcO;Ym3$T3+(@o6fBs07Ce)=$)68S&9nBwfXbi~|(xaT;MW7c2vdHox&H4ba?1JpR zbRM?|>hqT>{i7-)As3G?fyZPS*xCOcSFH+OGH6I5SQJ_Ea!cpL3Y@pE={8|OWluG5 zc%k_L(x@W=nz%HuWX__K7QApoY6XvrB0&V=VIuLsu<7uFl>hU zNm=JrK=Dt1oD;lZ%{FTz$+*SP!>XDu^)UM3Tfh)|!UXvaCE%qH4(k6eKwtE41^Via zGyehh1e&cDph~VbfOs%)umz}`uT74e$Njs0YysTQ?O~yn!G4AfpR$)9FHeEWV?s=_ zK0;gE9HDIkX&l7@sT|v=W9!hU_CI&3vqU5{3(Oe)1z>$(#pA~qzFKhu8Or7e-q+7lN?NA&kV}~FmYt{NAbMSB!w&(SqzCGDz&Qi=^QfVlg z{e+WSk%4sPv`YwZo`y@rrHQprKO{>iXxt;f@~=pjW}rQ;bggS-xz;$_)04~2~U@SdtE#cX@C&=;!;Fk%^)*J+Ev1yaLODKQ(-DSZN8poq&hWauF z3AWIU7AOYPFR>-`B+t_KvnZQ=atfUJ3{ViB_8fS2Eyo0l{M0T!#hjcStpbX#aJy4S zC2{$d;!Ww<#@8LiO2?;$MYDxy$7@UBBB#>*uVZpqz2_*A=!*5)kM4<5`fHsMjD;wqk&t8g z1<^&R4@Bj&5KL=@lY^lhsft{6Ej)XRdIGU!+qDTNiszhQkTl+6aG!10?K!H#{!suV zwbF~9R2WA;+?P=iBq3QU+Tn3)OkJ484ubhPZnPcw0GSGLr(LfXn+{bOY80zIs*U>i zTEQ2`(tzbZm^GVGym_P0%$GcYxj}u{>Kk)2d*4UIGn8Y_H8-adRB`1xDOY=)g1cH< zpa=WH--JlM=SRtvxAF&mGrV{LtmCb;8qK2lr!>_LV zRNkhZI^!<-L9~D(EXlkk3%?mbIT3{0O`R9BY$ZM(q&I>A!I4y&JMpdAHII72$0#p; ztXmS-3KDyU6VBKB*u}w;lOX|CULsMB-dd9JD_O4{U)nc}pbPO3G%WTh)}$JMSf(=KUeOpM<)69#wxO^p)Bx zj2`~w3LzrqYIgr$%cv(AW7e*ol}s0Xbn63y!b_`%%I-0^WIxwmOx+7rb=g{zwIfeU28W;X(^90qa*v0+nLRrG`E1kXx)&LzRz? z0&$)ne+9G+VioR)-w$~|3w1TUpmx7y9+*9>OS?ZMG^}R@Lnczm2HU^s;*q|!4FbXuVSmf>7>*TB~mgq+%l|qNMI`ayj=#Y>x7?3XBIGqNx?R{1jV) zuct!QwNz1drpb=*vj7HFNN+4>lSYqj2qo8v{ke9p^Mud0JH zK*Nj4Qq`dyc*cjBWsaxmeU>iy=kaW=YW>eA>A%(?$zG}7vk4n#XP1qOyq*q?#aHLl z9uZiC|6*IZv}w0LmrSTmtF)RKklhk;1!-wvy&#G%8NgN@xr7{b$td6z@pG$(vCF%Y z3ZsZi2ExHNrkC$t9uC+!z+6kl7r!nY9m8!`2_-}qb5JCI8KS)bj;=Q>PUdzhq^!~O zVV^ZS<8nENvgr{1pm&Y~co`2hWnIO7y*hZAMd`Y#$| z{4LnQc-hh7kkGJj^?*RLzpBga+8tbmf;dIBHC#jxRiGB{zWgm+ae(r~t=^2NS4uF$ z8N=~5*QHf*Z6nA|b3;HcuSifcGInyBe?iEfk+bv8r}3+;OG_UrE*Q{_YrK z!oqPaPpspqttl@eGtrrXMWgDT)FLzb0JjtRPsaa8)LTZi(Y@c_Sa5=Cu|Ton4n+eL zC=_q8;8NUOi$l@iZY9tH1%kVK(LyOfi@UoN`s926{%bw2W->35S(%x0=GvcY?_-PV zi$(EIT&{9>C(_Az9(Q^^$p(S$xv&!1aYkx8Q#}EM(hbZJy5FI50pz9GwDeuoI~%o% z1lvy>_Tu>vx=?vnw8tN6j7pU?rnS?!P{t^}?7hlqOi}9&#VsWg@1%B=b_b+$aR}qW z4!GhAxFH%~c@{pZO~k|;QLhinyTY+Jzqi~=TyQ{Zbw=CzqFNa-cMm*@>W}?|?_Tt}G_>Bhanu@aXE4O-U#sceyZDw$^WpaA8d z*H5_aQ)k>Uodm|jLSVchIx_Ba40m+JCL=j_08TrbROCuCON0OPQVT77Tg+QXJX8fK}udS*H_U&tA9tT6qo_^OqAz4tBf`6<+UYEQ%#_7qdU zQR~(108)g9Q~F8yi|*MJrH1z>Fd(}*qsot+>o<#?S{kz%tBfvM$0J(L)(u*nkDEth zEoxFb#=x!PvQ;+s(&~Gsy3YsylT4it*_Qi&OHxQTzfQ~Cv1byWK_^5ZwAYq_HD+Bj zT;!C2G1By@Zs}x$Hu3I}q6E>T1)#CmWN8CAZ6$ng6bOGf65V6W{b)oZ%_^b1T1Wpb5_odqLVs ztlS`RF8;kHBJDdyn5?{V0=Zo5?1RCqtq=82Y^4-gMe2{J<|Z8xX*ikF{e8qRo~Rm< z3qE<}P3&@9Mi^5ckpq!I5SmoYvL4m^3Nh+#Jg0bMb_BOdI=*-$_lVw^Oz%3~9(o#5 zDb0WNs?Gz!`@XhG1y`gbRGTF!*-^uPv+==r{=29N=d=@YA1%C53)e5=7uIrEd1szr zsAD3|cyGmUCQ;oy%FE2lYfD9wdtop>UI?vhSMZH;=X5NTj8q=qG=%mEgMZ>Lf4pv? z1a>jYmXQjP4nH#4>gBuBh9P}yYzu1Ckq_Vhcy7=4J^XAYJ)r( z4RZw9$VioExQW)ebc^1g>mvSst?AegbK#&GM%h_-OF(gT90e$WX2Daqei>6lkXZw0 z3g;3SBFI|tK|{tB405^w=pdL?81#`h4AF(U#dD5|L2!%j{s#{#VHNV8n#es|jR@jq zsByG~>OMsXRl>w*Wv`1Y_Gf~ZNG@=1Wy) z^5t9R_fo81ADEM{wL}CG!-5)E%o)PoW+R5Jk+C)H|Fso8bb6Xeruml`S-9&|{LK@8 z;mwlk&T+a#Tt<{KqfMGMOW`7yVPV7P$XkykjFdpXRLOQb9pqz15k+Ei#86wfm79(W zkVeIx3T{%INn4g1$S_mPwbPk~vwPkek_V%!me&4>EYA@7sveBCNzskwx6L+fy}1ib zz=3v_1W)orQ7e4HPUp^r0DSvI9RIsAI>xzoW!v>G zmkmBLlQoxWBiI7?XRZ7dIpi?yDLrG~q<5pJ-R$FX5vcy4G>?7QlmK8Be(*3T@_2Z< zMN9Cf;K|Zk4fA)|poW!I_GCRubd~HI@*lv7>RfU%H6G9*7`G2W^F{BpiW(sq{Ga}Z zs3@&>iV8^M;*&Lh)wGB-U2u%R!_$_ z>XPO(`A$#mundohtuz=R?-(UWvPq1Aj1o3nPL(=eqLYFRDT+oeyA_mqqC+*n5&!CL zhTs0+jB)!f?VuK0_|Jy)?~KRzCy1bo{~h23b-BP{#dtPY#TH*}e_2#;?cN6rVe_f5WtS+mJu3+MuCBpgO~-zgj%@ zR7yp`#>t!jNldT(lMjns?06*d-=vz0Cio{nxqHM`_3iUbFTBQVQF}X&9FqK%^de{h zrw1hkB7T_r6n!M_Mm1}`ixJezAu*@1-wH&)BiWdYyDvkKL1h*N=zHek5(A!prAGWd z0i?duf~#3jS`UaKl3&RA7`^`PX9eWSMrmCOCUm!EQ<4ssV@#>|~d6>V(3e8%<|`4QDv`_5#Q=>dIbwO@90V`uJ$U$73H;5aR0L^>~s8XR%Xml?JKryANqLwfZXBl_nGYO_Q<2p)(M zrynNNi(1ZbmWN(&cVuxYuS`;_4%UbWo0-Zw#_egWh8n#?aYq*p4HAdTKGBHaeO3{3 zEMHq9#duN85_^atGDX&SKMx-qBuDhC^wEbDfyCZ}om^q62yL=gR4Q5sYw7S3hEj}M zRmC3(DVz8yXAs%x1h0=2*B-psZ{wI=&b39n^rwWfT#_o%1me7%zqFTyASHB;KD^wY(waOVSxBYytSUt?~{Rg6k6Z=%WCNp9G?Q37^)GSaol`jXdP z9`2u`9W7j=Ed$#HT&Ay9W6)(wDB>pJ`aX-f|c8njwz>+SE=VMr#?O z_rz&bCIK^#6qE>OO-n3|;h~`i;w@l7bs&!2ircCp#p_5hJLQ@b%4?z%;L&q!#Fj~m z=T;1fw@epGJ7Wt9glL^wtHC%#O5aT!S>5T%TB2ED8Gs9ZqQIyp^r$9%bf@V^8Gu2y z{H#zmu#cJOBE|)y-Cd~Fin(ix!ZWM6k6xbG6U|MFz8o%R3#TlYLqEx*qg2)o4GWUy z?;0f>DwV!rc9;ZG-M~5eOnWT}cEnRz%x z_t3V^m-K!3gL8X!gf`SSF`AfI%X~heMh_Rtx2V3}cvDBAM>-@}Nt}k3c=iE4Majx1 zd${sHat4lyun@S_7{5!jY{zM8tb4gEUL^nGY7!NLpX`sYtq+#|MOi1B185;>TKp@0 zYJTt9hmn6NrQb{xAbdHIC?$Vu&C=Mr`WQX9s3!1+N%ENJDGKVHfy%ss2(@@uv2b_z zj_Sc1t(#gClE}E&Y*etL$>@0oRQ*F=u+~?i$NgIMl*SL;lPz{KHsYm{(UMpwBc$jd zLN1I^=n`9 zC-~xNMxqaeUKKiqEz6@;2ukbW<*%+sX=Os+T2zY*wGUym2i6e+*BQX{^Qj*17$IPFGtR%7!T~$9b4}sbI8>G}WYS^Hn_dR^UbAHM zO97&k5q4J>7xa(4dwJP*bXnmhzPlai{)`kJ3RX~l zh|5(hUxVtTz9rFffzmx9-nUY_Un3hM=V(D6ke?>}xQlWGBkU&+@r044pbBw`ag0QF z^;OKs+zyfhQ2Xg0*@_riNlLRMDVzYPDnf;Nb*}97x1y;Bw@Yd+noXwVFIpOv^EB(5 z!685Q^TX{E`1l!$R>qA-4$6L^KY{9TR7WeCWo`H(UYeo@>0wuPji2*izFna#vn+9y zw)Es@FFQr{1+urZ!69gkcNpIC!Gv|gW_hVD#vv=Fygdzrt^_x>$-91N90+w#nR4u$ zsr=+15{&7TW%Xd&f05?`f5KnkFHvKh*Jyjk)s51sIs3yjTK}&GXaVV^?TUC6Zlu+B zGAfo|v?mtHj=n$7a)gy5tDEatKyt%rC}+s>zLAjem37??Mq7#CJ2Nq4UdCVYt>5bq zA_#5BFTDKvE=7cLzFZyAjX5cz3aJ@=O@==%>mceSCkscBVHS~C(KDooxCM-vyPShf z@y+BL_6>`It}w~OZuH!+EN~Y!A4W`=ODm)E>v+5za2KIKhH`IHpRa>80_!VXe_M)h zbnEAUxMo7!aw}`a^tuwFTIE+cqnK6u~DD_aD9me|g zFgO1o6n^U(MoRn;BbOP@qtz);CTEDzF}6i5#>g8w#v~(pS=zSmW(^O^Q`8Q$AzaDW zUnn5GD0uVpbaO1=UrkAjht?Mp641zd+`4LpWDrdZvA#tSDio83xndBuJ`XSbM!og6 zAET*(tqe^{W@8mqDq$n{BF*_c-~Y$q-Oba9>PNhX`A-DK%YX4V$~DZCAIQ-oIuyDn zFuv-F{hBFmvRQM$%9SxYQXoZS2BEbg*K71%cQ*F)lA|T*=jEdx4K@4dmunvEi?Q;v zm^D2AjNd^Sh>N57Se&AHbrU1%Or@duP4Zb--#gF-sO6lRo&V<9XP z+233(NJ7b=g#q#%0v^AgkMmVc@MMX7Ndo^?s|)p7qC;p;h-3W3jz2+Y-;j`aZ;6Av zm2$}Hd|@V~g@lWAufs`OWj0xd+uT&iOTBWu z_n-OO5it0l|Eafra4|-*3s;lH%YWut&c%~=s5938xh_iW0*;>~`wAe@_3750a}!v9 z=Zk{=bm&bFcf^sF^PQX?LS3iCgVA%QZ|j#-hy|XRJe%xm+AvFdY2dK;pF+z0%_7SO zexgRDnE&D!JRpCNEJWrTkhV~^UJ!eGz}liC>z3yAeG&mL5?Q8~o}5WD`&mBT(3Fm- zYDwbb(@UMG#a7wI>1Jiz!NTg74GM)Io@+W~2-DJz{=p%Pa5imk;c^5&@= z{R|--f35ZtDB67NAr`hmcHW-*@Hb_T1tpQ{JD>BCvDlYu5N)Ixff8N$^xR5Au@LCR zob#Y!xq^uOD?y&F5yf=H-<9HD=zh2JXMi*i)54r03dD7u`qCK&Jy-LXAo&?=~nFsB4 zeT9$J;%uGdY-L3lvw&WLBXmM|Jf)fF>%SqfknLO7niYx4H4~D>YQpC3)ue8Y9UrM2 zgsENqJxcvs)6kCbd+WRv!s+|8k3?UIN}JvUL~yX|$CK|YKRVK@P5-Q=>jdt{^7M2S zAdu2fJ*Loxo|fP-`Y$>FmEW(F!L~liteR#`UU*8u-<(11_&hyTAFML{W)>n5LomJk zfHu8xo_vAYK<2F1#uP|{mLA-~XdxMOhwmnW3bjG5HvWGbQF!j`!TOZBq|vtc<^q!a zs1XhPw?WxLZaj=EaM~FP%tCp&++SCh4m)J1$`z%tWbitrNmDmKe!WVPkK!H+<^R{YN#>d1Jk&I zBeRii7ifuN9e~!+f}W-ky|tyR*v@=;&!_%+3|gK*KohnvKIB`~dQ7kzn7M=L1?nw#94H-@)@R z1i6q2?Ax}VwFF3z+*F_L1D7n}r%ORAf+y@ceFiPpp(2)|ZyV+Sg;(A|%+qf^iD`%J zy_AtZQnz%oz4bzDuK*C&)Hh48wwFhSxS-Dn&>L}DWz z%FQ*18$?+5Q!z(8vX597ntw=aHE#k2QmUAIC6Y&8n(wl$E;t;wYK&#&1w<@ItuCkr z8vh4|-hWFdxhbJZT{ zf-tnsKO3lqFB&3)2}J9ILXH?pRkn&C;o2-WYAcNF(}P7P05aQ$+3BO9&G-m*e++|^ zg!Ei6MTF&gP0vSBkkTid=y0RZiSB_JH8YPXPI&8Ia)j{90us9sJosm2qshm3Zof%6 z-D+@*y99FuDmwV-{)K{Y67k$n61!GW!eP{dDn9OYgjYWoh&lkxKm%H%j4(!0z;bMk zms{OOt4Uv=&pQBw#y;8+(zi*0;dM}BUXO_!S>hXnm{Fi zGkbOg?8X~1o3!G!LtEgsZl;%0T_^$Ny@zEg!l4~$@1Izq z3G&xeJhr_pgZVusH*C;={bHKmt}(!$m$TQ(h)ncd?1mhq?`k*{kge9|Y=+bBgFHpN z6VL{1`>f*nKgqi)$l$c7ARn1u`!LNAxG^-)W#LY_-gSBa_+A4(3Rxa=|dm2&2QwI`a*1hFa}A@Buc7fdr_vzDu*mser-yz^fc3U`qMvWcnVXvwzV05)x~x`d)K&B#-Y>J3(=p>-<#uA1?7MJiPUQBk7;ql$ znaWq(dVg|~Rs*RI+-`t$IV2+_iLpjV-9jX1o+$>_Z*eaaXc_YYy01JG?F&H-xE%x2 zsqi`Ty9sq<&W(6hOubK^V_Of|jLX{opAOu8N%PeSJ*3X)jq~{G+$t}VRA~vBeb6O_ zQP^{1LIE7gKF9tmxLGbHNFPfWb$QrrDG9V0GRUE}3HoScY+DPrK-~(vbwC_PZ{Lum zT$&j(XpV%f2grTE=MBQo-Tf2xJym@jn;!r{yh2oDYTA{&!$qnR>W0cuZOjD};XXx4 z``A?lrIbyr#;OYcVj-VG7|cJ*bN>w{P+M$VK&=aJ(Mz0UFuQ2?hkof<%k%Fok+tz& z*^SpBS--({w@NI{1t;qLTdbNTIVS_Y_&o9~+|X-mF_ApbN08Z$mg`aj;uyi%(qRH1 z;~)T^EAO%ExXTqa7$31@C(lq?$%qDMu7;s_jIz~foXX+uCM;Yd7`5&iW}?W7LkeRM zLp&>DMTX_*gxj2u3a5%b7u#?XkT8Lghx|5(tgZSt4-YSkf3K>*UbVYZl{ ze&&&?af}T0m!i zX^Tw<$H>iKSHrEJf)EJ({M35H?5qZPo6V=<=fvA zoaVRaIPI3bSG2>z!~6IDNo~g5fKv!wCu;|r%p3DI?6bmkq4D{Pq!N>|E{`mEetd)a0WBW9NJWVOt-WO3pY#q`FOM3xxa3!G`%snP_ z08J5u8L#kyFC~zW%5EeHU*R|`nF&*ICVL)NL8R}vWv1wH!GBscPu^Y1mV#ItA|Aey z&ntgqiZp4>;%k?@L#;5w+opy^6$pfeaksN0Qb^T->wLaV1Jdj+rf%_rs+~s zb5y*4%>{4j%3KEaYL`ffi8uE!&hH9iiatb+=5EO?B%}XT%bFT) zAcI+_&G^@Y37jn{i0l&%3Db@(X9UAP5<0coqT@tt;dSXE)SM7|4xuN6T~4Of)4n{Q z1Wlruh5@}li;LAzA#Sj8Jzo@`DH4{6M+|Surba^zMI(Mmf|l1_$$(>?SZG5N;{^^$ zw3|L+kJ5wE0TJ)*spP`@KZb97b`8fnAX2#%RPGC<3qX6z!viW;3;U+Z@m=#b6O2r` zI94v7Dd^APz>m=*Ewi6NV3VDK1FYe{&FjF*U*G-EPp+3fS^;hPvGy!s*Ft5|4RP}) zs`LRayr%z}9av32Rj-ykkT4%|QDy(`=3PU7Idz90Y1ujPy@31dbXzBBg@2&P5UdTG zVzkpUb#hszbw4A;NRNYhARlxA6mbUBm*=BIv(&Qcff)RUNLhQ*6r8gTdN*9!A1hC! zn2ud;f~q?FrqALn#gO5n)X1ABL5zG^bJxi|Z-AUGH<^JerMUupI$>OymYa&BGC7|| zaM~qvK{@UlHgQT3?7QLZ$3NB_yrnyh+b>z(M^5TD`u(4^P2TMwONw`n16geT>6GZ1 zx&9_fg*!gvKy{!*Ovtq-#rPajx>ZJ$SJ~5XYOnEGQ_gV~vP`}=Q2^w7{q^S48hR)q z2$SR0{;R^;kARq!K9xG{W`%_)+73s@-Znih10N3Tztmj*Lx+E)>%J5l1NHP9q}8cR z+{<}#S3@mv{Onf7tZE)|SYUsj@UIiNs9(!%nr-T390a>SlMCTbk2N7VfqJ~7;&qU9v{p*ZN4%5 z%n}Pr8%S0TaS~!W^?oTPBj1R3TDc~|6W8ixR1-+~z3P4A{HepD*%&D%L{9rFnv@r{ z<6Cuejc7~=PiF#mGbb0GeJQ2%_Go5f>Tz=`xzS7)1K*HUbW3%NiC|Aoi~JVptA=6!vr&b@THxCu#@gGUZYXrGpCWDv@krz9mbT}M`)AM z!NvwsUdxq_0B2~$*-QU`b9@rWL=ft(A?Bie-~dWHP)GQ((D@?T=9_QvzlFUW@?_!M zu%qx}=G2Dlys==+((~hmd+s#M{7bPD3=}^GRMz&K`51{(2s@;XxNP&%Q}ZSjIK$Zc z(c7%9eg~(IG*$-|)4NH)D*mEXg{;&k*`A@`kC?K<7TOGMe?PlPEG3jepdiA{eOehu zsW4m1e#TeKJ(an$Ugz~xe_bY7?GJ}0D~>GD^|;_Dd9QqMEvCE2wmvJyU zA`gRP=}&CA(E)Uj<_Gq1-rqJwf8T^F1r1_<$yVP4p?5&{O}5l4e)l+iz8#{#tuEr^ zb}-oX?+M5!Tz<>hHD>v4v{9mkVIFklD?kTy=Nct*fSFAz*S`F=NwNCLQ}&5cXvR`} z1fW_V!<1Aom9BP&gR+cc6kaeX@j05~W@NC^ zLMeIxTc*4DDbauT&?DHAsP+n&I@D6v?_SL`jMD$)&+&L?^Ob6hCVS%kk!}D(N^bOY zTjO|Pc@{&f0x-Dua|)GKKw95;=4UTD*RWRDeoq+&bgFMvE*5}wk8DgC14~OE z*Cyp;= z+KUKfo;CwU4lO4=DaUNYgEua0UD}2lGZ`F=j>5*1g0jc44li$%#{>dmy1QgH^1KP% z^3Q4ti)j|0B{hD2?-am_i_WshPzp%>x!}6Q@a!i3ouzl1pv!RM^LF>V?dnTbY;mpN zCo)j@_w87BTzZQFZcg_Frwi+WuLIq|vD42ZIwWc5um4^pom!LXrCi{;urbAdHZ+u` z;b`GH4D6}9n1J-+p5%&uH@MY??L39pP44{N^B8wqtzOTl^DFtOOQKYu$Ix2JL-jk4 zFzZJA@Wz0iZugAB9dZOB7y-ccL!NVY)n2HuEXN#0f}mPiZbyg`tUdOE<#-B44Na*m;x~S> z4oA}6QaEBDz?5r5I=&KhK(t zwdujF1H-M;v-4*R4-DXcej4zp9eVe)!n6ck88)=bTpLr@*K#KExnj9TG37Xf_;aSP zK<>7bdArEVg<`6MzZ#J zM6KLCSng2&NIYdal*C=`w9lJOJz$(DVs~NL<)o)!uZRj^1)e1Nt%Czl0twk}0Q-_h zfm#9?{#WdLWU8MKD@lXt8$&wa>CdTB@3N)@i6kZmCA7bYHd@j#yAj4`G21=&Vv_ zUXYag7_k>8SYiqN&S>v$L~4j{Rhu-rX-cdi9uINbP8=QJ%nkQZ=}hwz15v zycRG2ijp?@FOfE1Art-fnPE#vLkewLKZi*)ja{!j>^hOn(r8jhyXmKm?F06tyx4|> zc;jWq_xxdcwtFFp1p&2(C=v@e?sg`zjzRDkv1LI@Qb#Nv&mjq6%Smb+d`)Jsl*ja` zX)yU*3!7<|2t0x>laQw$m6fO$F=C04Jt&_eB8GMe{b$Hl3pDOXDaofXN0d%B+W`RQD4P^N&Oe7=rJY?_ zN4Wb6_C2)#&-eDo{5JS9d}D>RBk(ncxjR@{La|u-5P8Q?p`J*=>`g@Qa)!2@1Z=oinvAH&Vm=jUK zN$=@FCxUp@)VB&?&tp)Xym9e<50J^AZQTp{dh{2G|26}@#aTzK{#{5+!%O(taj8p0 zdWBs|l18nOTSaZ7AI?6^JmfXj1|&DS@f~nl%vjRTFpSx!iE7CXaxk7%jmP3reSJ3~ zujjh7!GfPu2b_4}E){=MrY~b_v|{fJ%(c|a>+z?1{Z)9uWfHu#$b@Z;kvxXYlu4|> z!+Z-J8$l_y!2iDk^kUzb%x2BUi=)nHV-9Y*DmO{3BT zP3cD<8%uQz+yHuhgga>$^oPMX(uN*LVufCOjZ#}{ZQMt``&j)V5?6j>$~<=qVb4dtn%tm}=7j$ew1ugocx+*_ z^e1Xw2#S&bRs3xRQc&5+kl~xSs&j!^154I#7C_oI#B4fg7gwCBdzc6LuHSfWDPL!yD753tu!bJPf{SUO(Nz8;j~tOVv1rUd`0{ z`o3^f`^R1zEXrdaQi5=ScSwG-Oa4Q?Y2$Xc&XBqL8r!3j*oh~!q1mTrLin%6li65Z z8jo1iO-$)hC2u-8-eZ#xgrSxq^I_?b_IUPx-x`o*@p;ytp)PN6#R+G(wd*zF{5F6} z%tWv&z-r1 z>QUtWIg9mCtkmTAedyQw^FTIR9xu1j2Lj#2_?5+!Z+xNYBMS}bVO=_c9{m>-yqX)J zK&Mcwv&gwzP=sG?##hP1bxtuI5|m{XiNMs~{tl6kEfG?CP);g8ITSV(;yRN_x2hWZ z@l#7k6@5m^P-UZa2>%U+1)QaHNuNoK4j%FFX4!#bHq$S*ylH`FV?-jW%>Sn5<7EK5 zxd$E#8LCg2ovpYql(uV-*JDxbIc5L7b=4JDslj1 zwck9XmAeDjy=sS}UR8!@R|F7Iyu+iz1@fPzOCTuXqII(To*Emy0fn56!TDop;^1Z$ zCuoIPcA9%<*|R+?QO^7Obg3Y=~azPinz!Xjo#~I zFFkZ=HvUB^#llFNlaSge4}OiID^7aj9g-sYT5d7>P>=c~b#;d0sP#Nr%U>cg1#v$r z!QM$%^qxrZ=olH<8S=LHz@u1&riiRtdcWcwno9cd&(c_-qF=sPORtdg-0>dgnEbxs zLtjVO!j0k+ElNU?Qqj_eJgv3o?+9)>h7WeIRGt;$1D;uV@oq_ncT$A2x~#sb+$amL z0Rhe!?8F~_pLUq^X>VB~Jds7Y6-(N3@&UoCDPqbQ>{6Nb$hvqXc7u?b5%7ZWs_YTa zFPMjMq7_*l-mq(5{e|7onq;(CQ;m*#pM950j$w8$tn zn?}glIlemFr?|)>q2u{{Upvh8HPPl~seYTE7wgqOkNHmTUhCY%mXooMd@^NzhF(fC z^F9__ywGMKK!@8@CbA>GgV_a+>wM_pf&<}KkUq;h3^1dt?|i{@3dF)5yry?I z&t&5z7#L|$P38|{#Yzr%N$rExN}YNaVxr!MX9&hoNFW=Yj`3IS4Wiut89kz5!fagT z`CEYA6@#na57jPq4Sq+kbrxc2tthFhxV2dv=9ZHptt_`y{}C)5>0fyF?vVaMJUiMm z6xu@EDvd4YwXr_9;Z4|T=8xz@;S^-j3jlJ5b7R&Ttl18lY%0NP(m4^o8JgaAlo3qE z?a#EJ&=?(%%k%oGv!D<5*A#4Ab&Tcr-61aWfLS`y7O|J^Jp%3v@q-d#YL|Fv9E3?; zVSeVVo?tk)C;82s6}*agj_9Js0fyBUawSQZ=ABkUSDUo# zm8yQ1ZvJB8xIBCx{D@rl8vK>*^ zAO|$V+V*q*YucmR^o#MjVz(GSpazB;;H8@j!GgGb!n3AaX^-JV3tiOK|C}5`>guBnJ<~A}zqwgUhO^mh_MPGCa|(!GTN*^$c;{FUlHf=J|H5R%<-4 zYKt-}8fG5DYD%t1n78N!((D`A>UUcc??g4U78mDZssxHW7bR5~N{+C7MR*zCi~#aJ z`hQaI9(h=&_y0PJGg|Z77m+@fM7}UF(K_KLaGLwT^dn+ULxH-c8}s)+D5K;Zo#Cj#Mr6}8jfWE`K{k&W<{bR zZVm!`C;X-~4RxaN5C`~b*qB$|i`&z%>8CN@-rwMz9`I_DvVPA(ivl@qxawa!*jZ$_ zEzX}BCaKprM5~^LGD94$srXznAb7U6k`igY2IgK0q}3$M9@Qt=$u}PGz7itorTXi zGlFu8+|hwBm)&Fw6T&Zucvak&^8EYTVy}lvTu^^xG-&WCB)Zu(;=XpF{=$NVVG=7I zBH*+N5!;ozV;7W`x?y=k$Zu9QOmoZ36Dr*k6ObZyykkx4=V|mFI78kUUdQeysX?4+ zUzp&LD!gEG5umv4j>@qpr2WmL$Em(hL0rj%l@h8;owz8W%t>jpOQFbqpT@-Z8C`_{ zWw~2Xe_4^eF}Vh#lD+5`1gqR**#3!srW&<9Oy`K-3LaV1OVNw@m>ZZBRmJ$PPSHOL zPkD+Yxd!Wn7M5N7D%dWZ4t7G;zDHcv{~Q0&N7nADJF?}xC9@?hRWfOqupr{^`-5XU9V@wyZ#8cwJMCJ+s&+Lc zZdVzoV4QvZ7|7A`EaXcPzhNPRlTfm&NFQoReBW{D=zii8^2JOZ!SE;|fBP_?t!~NZ z(!~vl=m1upKy<}v%1=Oxmjd!{112?{jQHeZ;4ujk&<42w@G?;x3>1V9_fNOChk4YeR zKIR*n(fUNPvWF@<)mE;q9RJGp-PZ3zDWv0NPB9m>{gxar_C&QX!wX3gAF!=ik*~hO za-S!NRXQ%o^O>rPeV~~4bZHnw_9-H~w{Q83Wb;!!?IlL_3!;S@CGyJ&rRdLm`mGa{ zjQTTxEy&tvCRxP`Qqsk&R6CPAF5|>vnuX?{SQ<7{xndL?mp-~km^EX6a;C+%Yi7cg zIUGvA>j8@k#A>BX^_v#s&Gk!-cvqsBloSHO>sR&0$fGm{N} z0-fdYiIb=iW>dJ(4KH*_Utu*ckicB#<Rub=h39Oez2 z#Epi-tUISh%^Dy#U_^;EMVM|Y zl}=Goj)sXrm3;a4t_{aJ3SM$j8^(R!5$6D#ulyFeY%2*C^8f~OGkw_f-IAkHf*WZhLC<-qB#9DmXS>TY|w={boBy!!78DKU*(A(#Ynq zPrbKp<+TOE`_f*c*G_F`j^2+^KX7+MgFe6$%WjW0%}Ji&POv}dU13A=dAtOB06P{$ z)f_6P$_yx0#65tp58?-#2hLG`p>-0o59v zkp1yr<8%49B(k0@u1(C1^O*3fc-k~(N?Gwd>SEe={2Rm+jPtC7kZWR4G!`L# z4u=Es;w~o+8g$&<;oNi`ktsj?SNRbFzp(%58t9ljrz71-9B0fNC0}9j)gmpd)7WcUz5W&Vn)6z7XqaSk{C{*`Thxz3+1 z<+<`x3B(2R>YD!oopRh@lumlIzWJ$~PeZ@b75nv%q%rf)EX8Yj(Ng@97Vmb{DYs3X-R8dvH8y3~8CqyT{7>2b1xBF+n7tK!;_0fL~lx;3-0NWS;Nl~q95Bj+UO-2-UkJCi> z0ww;e%v&9j3hIY3o$MVV?Aooc6h8rO874|;1)k(EZLh(iEoOI0?QUE?o*m~p;hYV} z3n$}`qc_9yTa!q=c$oP|>ZgS18paFX5I0IDY-8*%`20oVM9ky7Sp&LClaN4aW; zv5=2J4?52tIrWod){|xVhUlyAl*^fKMIWt82gJq8fB*NVaN`KA<(jLX-{Ote2SvZ@ zZCP@`C5hN+UF%p7?a#AhADrx>{uo1>08phma$y=irc7oI3?aG!WVU2KJ~G}kh737? ziGHIo)c_RK-^Jw3V-%NmMf=rH?Jbkw?>OM|W$_X%VJk?d%WXBXkI>ye4qT^wedOLM zz~Jv&ZnztE{!9BP*H8cC;W$Pc5J(6)XbI!KWPg{$F{lA|44*-rwRe$8V9(4}fjU#V z6&^j6M6=i5OQpdLeyFUjzQK9Z^Mtm3fV!pT+)GvHQqenz#XieVk`(_C5XC)4k{F~*9f zhs=K=;vE@YvQPRn`{nkqICr?HtAM(hq{k0-xi$PovquYNCkK(?ioqK%;ZrtKkI%3C z55*WVm@cSodxfe_zr;T}47853l!ZIpqp(P$uyp)r5~|+$=p9ps|NG(3N7ML`DzX>e zY9V!os4VDw7P_sG%lIpNqtPMjVpQ-_^Y@=AHMNC`tnQ=_G;u;;F(@jH2dR}mn3#3v z=-*Um-%<^A9uwV1oDm$2;U*DC9o-&D(d50n0XW60Fy<}31-#jMMF>&fR}|6~EJ;Q# z+UMMMXIzBdXIjdt&U_t034Ksea5fXx{#Thy<3wAm`TOH*gyiu~Q2VY}W@+~LiwL|O zFHs+F&MbF)LRh#b+Wkb)Hk@%F?I{^$R?Z7O z-)4YCR@}0q2{N&WMN}0FhT;bA5N$A3ZR4SQ^flHyTyo}&25EE0w4`T6|1u{lT(G}X*!8Z94JYCBm zee$^+SiUy-<-6v&^oMClEzt{}-yxq*vXZDW#pzu~Jw-mZIPa7uSUfs+DeW=i5e7^d zv1YYdaBPKd3uS+t?{_j7XM5FLSN41Ks_`!Z9^d6Gi4SzY_(IcI7%+4Hm8DCl+MxL0Md@^D>?#Z^At~dvRPKjEb=$U+0 z1YS=U;>ockjY!E%F*#F9I)Wo#WY8zK)Ze2zn9`v`Ds&FVM&wu9&R+>3kj~MLH(T4z z@KT~kDLrcB)NVHRsZM-Hvi#e&{$-`o)|E5g@O_MV&M{95#>L0ga~((Ha4F3@s!Z#k z(7Mk&{DpF2Ys+1Dq&~kLICj*D|LW!^1s~X_lxqhaSd#!(1U< zGBb`YoL+?1|EAW9lhN!VNTO*tVt5&=P!bw+c^J8cu~-N%R5}y0Aat;_wW2Kt+0mmA zZ7Ri_qMcN`a7_OMkV2mq_RaX>x1eJ+Wg?!^NhLN}+kiS=Bl zt0u^6S>bJ;zN*9lHm;_6u0K-{-nP*}0DDd7mCy;OD`IA*CAcb*z%R?pIXZG3;L3lL~3?0 z+%!t}A_kR!7h#|(rFYrt1%4~!Todnpjp@?Ur3?{*jN8KV@~xPJX41evQby;L%~3ew zHmx1q5}T{894^W894u{tDtJ2`opA!P9t%DLdnNb}*sWj4@ZAJ!E&>y;WHr^IM+T{C z^_-}ars4_ltb>XCScQicgeYkBrbERPLmxiC$k!QtH0u68_TD-y%C37GMo>@?Fi<)N z2?Yk}Mr!DmMrrAg9$G1h0S1sxDd~`u6aPU3K@u<4Z+O%OIIj%h5J5D`u**v+@pR$mQZ{1IEs`M8T=YKRy?TL)2?Xa*r)N)9y zIrn=VdT8P0dq5r|Te@MO@9(gSbGn9d z-O+Zm&y3v@F)#`HWc#odCW#8V?}=}xDB5wIQn;$0I0}f^u;n)186~c@I`J4{pKy#= zC%v}(U?WX(P8|B+%*19=w~<{`9I7SOzwvYX20JwDI?ay9b)(^fVT524ZP(OWjAhDa zLR3H5NFZM3Fn=!cpB;?P_`BynzE+74r^wztBUyINjsN;Y<_Wga8$e@|IdtQ?EY25S zKLlUm$#hDmC#xn6eNAi;)e+R zrRN-*9K~~$QN-Tv`cG}un}VPQ2eL2Pz0)2(K)il@{FJ4WM)Y%0>roV&%-9BVtBL>< zj;hdoH~6a~qP>=$FVGrBYYH9WvI!}DHG*+=$mvUI!d3pM;m;ejB8QzmlO!KfHuw{2 zY-T^gnDSiAzLg`Bsi!6QTk8Y840+l4lRRPWhB!>YuRyW;PoMEqW5vD1YdPB{Z#Io9ihhyASZsg*2>$auU-U^i|b@=Ryl%(!~8 z#P^v_p?v4)%FH{%XqRS_=$&|J+bZE0<2|G+NE;dV?cVrgioi8Fv+J>BNYzxFYjU@+ zV{w6~##a2VJZ1qy%i$_X^v^8wNXn(Mo@&Ajd2JLet2GFpF!XM_DIhmFH)wYSl%zqJZKg22PJdgvK>bDn!Q*+cXGbB^b4Lh+} zs1eBK}K-uPdD2;a=CZ}i*@3@DKWfqls-SdE%Wt9 z#)?Oe%JjPtu8a_=JS08){Fyn6Z#q`>0+U|h=cnlI`Tn%&*u9^_qD|kR%2RqtuK{|E3w!Fv=@&`Z4OE1#(($n?VQGmr9 zWH+$>Gh-hllBK5|#TCfm<`RR zd?D(qQ#^HRHO(%|x3=muA=G`cml3#@GXfpOj9?FcRyc_bX}4jwEw1N76o{-dE>t&{ zyV(N>)gbqZDCp2G8S{ExWvsvds)H_W^{Fpun~CzI()ElU6ZZqKu9V)&Xn?%?SLPlO zx$D8-DvM9X6m}n=c`RlIXio8dSRCKleZmkFm^!&IZO%4TZv ztGs>(TCV?0*P5WKYG17}f{&6wP02xJg;K@%mP%LK&7;!0apEmE&nK*7le)9^3FIi< zqF$+js@_eor_i}2OxQaNpFGVqG4Q=MC8s_yPJd|Ny;ayzYJMwFc>iP5T@?X^u59~+ z%A&camKn_cf((tm%Ja3~Fk)c9A{|Qd`WvuFpK83@Wmj&%zs=olnuo;aZT5EVS5#vB ziX!oEyI!uv>Vk{rlvxPJ;UpNc;*;XTSj^#Ke;M3m@nuo=VW}IeGJRBL5<(rZhQ&*` z@N5Sa-nUP(t|n{b_d`r#(#-z!?r`i1)~oZn8M$O1>KTp4*7UaZChUosZ17r2_Tni# zlnSoPLP8CvCQGWB2#v5nQ8RBDu;V?#%aR<=X^7nv$~78wuMZAd#*7o9EH&ypBQ76F zLD9ZcWwq_3mE%yYqNh7-h9;q&UIPEF(TbbIARNJQ_6 zx4|<<0gae#AX*Yf^${^xo&B4a~U9|TzC@9~XQ!scd zV~DvNVlf5t`Z=CpG6g^8y%T8wVKQe0#i|oM<+}dL5h!kpWJ%2Zyx2*rXB!8*QqX*h95F^ zS-ANNdd})uW)~+ykdvvDsuVuJ?m9^|dhQxsgK-MgMqKX`HDF&rzAT3|o=LZNkKt0j zb`i}OuR)D-4r?Z?nGenE@tn2s-gwuBi1b1Caa?h{Rp!`d+J^?T@A1;7>dPMo<%|e* z%;BrQj7X@d_{?hegIf+(?(+uNsI(d_G``)9Cj9b95x;G$peSrZ4SRO6DUL{M59*0x z%&i#cX5;+YID3nqlAZCKy?nN-2O1j zp48^)kz$JVjIefY7=_OC>ZJZpLB7&QDhD^Qx}HZkbQU*$4k_P!TC$+u+=zNGWHv^w zj1>E9W;-zct?LPT8cF|Q&nABC{WvK2y?j3AxNaYaJA@Iy_c$<@x$I zY|4D=~*$IQK8pv@V7?qDCDCa^L-B*!_-s_`!W8t z+ti}6W0zD=MxIFe&?H;mZ(l(C7EOz@4VWTUZC^Mx`X^cW2ehBz);WpgVi{UcrW`l| zyDwZ@sru2_AMjGvt3;WRi|_No5HS$`flmAhogXmEiAMe==&Q_Z@rRl(3a)KjA*7H|{EJ`d%v4G&C)*DmRpg zcJHfxbbp%9+NV2^>5dZa`~d6P_VasokFI4O`_b;~gBwdPsk-u8H7~>*VT5ci@1(`Q z>$L24Q|N=v^70!C@RB_gs`7xje{UZSM%>@Z2q49YoS*B;=U9K%?%4TmhT`(%Mz(n% zf;b1xHYc`rdcy8&JV9yqBQSSH+LBZ{!7%WtTtBb)+OZvtYcMD_t^W&;%*0HHEXd7{ z%Y@9b^=X9?d`W88zNe_s>g>xq^_;I?4$U7NG8*ne6+4hL`JpwUD`mDg;mjquv)hqo zlRh^!a2Do2cWj#YNS#)*Qpv_$LwRw<8!JH$69#u1&AaBF{>*oTsAS_YDAaYs>j>~!PyVjnL!&;uqk z9lVN|*9f;LvjK+Zq2(o_7 zx!&F+XmN6FM(Iq`vnl3P+rCh|S*#|rlk$_8${Q_nxU~MBwL8{LZ};x5WGLI~D;T{1 zPJj6ptBclf<9<{J{k#@rE4;`N=+IJ?``CMnVEbvqGd3R~dvolZ9f`0X#Z7FEA>?%9 zA5VZ_f##OuXd_|F*vIM@p6R`H;15JZ&zPCQwN;ve)l`5ZuQsvIt}MWJL5ghB*0-1> z%Hh_S!MDl2J&p|k(-9LAS}O7**7U~mA-aPEj+$`+eh66zXqgG;_<^P@aPmP)=g8LR z7n{z_2A%PWUDdg$_sI`w=P$`s=-oFVbVaRv6Rb%qO?CZRMr;iEy9e73A&AgY)ljyKSaT`?7F6k7q+fqHrjZ4a z&O{!cOu2w$#08#=bV~R6h((zt|JbEB0|R=^U4D{95rt zsC^E9eC#Nm>JWsLZL1n_Pi^nBuN0e#izE#cUFAD2BP6%xCo5Q-F+vA*J zn&_&3s~sQLicdO~sNpagmE%ry;vp0nf6;PwEpDa*Ei#0#%${T#{XE;;^G)PSRb_Rg zh5OiB6B{C6LA9wGLFh!8N5WF_BUvOX(s71hg}LDwso}FkS)3)!VS|uV*6oc`;9o8a zJU=_*51Rtiq4$Sg`GJF1kW260hfPk?vfiBFC*V0MF6?w#t*j=WZkC{pNZo!YRmW$1 zwL;)7lk6W_D-G+*`cw|9hFh|D@O|}0ug9GcRk6$3mJUr3IWZh{gKew96KwOkr+j^1 z^xT`=vaxMX4VOrkW<_T6%4~Q(e9;g3>|ME=Tzj}nvUpFTHt2PqYpml8H-o>tw|rFM zhn%8>wg&!$xOT`i`sV97?^r(<2VBeJdqa-=?FSPcEC}FeY-8w)S>!bDKm}w|R!mPG zf@HGJIoS&6MDfC6fsHZXdZX%TyRy*-KZKml&edmk4L=nNaRaK?= z$tRTiClDJ9IDXiii-YK;AlVX5@FPCSm+_8b#8Dk2nq|RUQWZt%AuL{_Ogw$CPXUr~ zkWev6f(1O8?nTU@0>`LyPlIU20EsEBeRGBwk5?%Wc6W?%6Y2$;@x)Tv5ec8|)sA+e z@WO5Kv6cDh+F3!!a1s2&b={k{I3y!fE#yU{b#D_#joqtMuDEj-S|z{3V0leYvhVSP zyrY_h>qko6YvlpeElv!mC>BFsg#q@w0Q02>kjZ*8U^)p7J6(v5Sz?}OJKgw4WrLNv|wq4DI#yw zdjs|z`JdR1i@Of#8>{wDlW&*jk#H$d7)bUp*c;W$DLj=x5iJ=d)Aa~aRa^2-V1B)x zO3?ps?T*`XR*i`QAeMPz#*u{p*6L(Il+wi%;ZQiUy66-ue9p}F!&A|GMwmb~f)ryp zc9DCLw39W~DgJI(Ile)?|CCYVM+s0`7M=`ecxHQM27FOQMal*Y^6gUrUx!tiat$pG z$ynbnk4*EJF@~~qFD5m_su~JO9S@{5k9VEJPI z5+W8m()ljYEg*WaIaoiW55{({TU%P=#=_g$K5$vY(6?Hs>u)AXkMM}PH5ac2tI!#36}v6oYrl8Q}!mfrAL@E)sqruKXzrFZc?>!L>Y)mk+1`k{5$!= zCQ3n8D&vxT`@}g{`-Ux`CbpxJ7R94$zPvU^ZR`_v4Mt@%1u{m>`FF7i=I*c6Pi!Ml zv`5ii@p(@swx0&F(#=)j>WVhqeaPdCo*(dB5O&Vl3B7u7c zMkMD}J|k`z?hN+Fi_6}HmK-o79A4_ z9Gm?R=XDtes~l1TF6khgo6a-urVZt7n*66-ngc62fE{U;?{UJ}E^9Py_7z3kYMKKw zi4c$(*qt~G#s4+!PL-L5xLdg0?Eu8lgVt3<&7&b1UiKlGBhgl)Q<60iMXcC*$uBA0 z__;!xMoexMZwKO%*$UiOrN2Gk6W56&7^)Iv0+{7XQ19KMb*HRbO-5e6`A#wPUovyb z+cTx;w>uW*bQQZ{r+NW=rj4C~Vw(oAkX#}FJ&h)eKqGwPfr>~wH&CPX@ zwB>(g?y6i$#7>~_IpFvq!6Xe9uC+JO1Fv%-fRh>`G=wa&!rkBN+7-h*$qW#Anspx^ z7Oc+aGTh$wC3V$Ni@=Lm@e5RW1s^}$in{vCCkDP8!auc&!Fe@MC-8?g4&LE8o zR-n{7(5rAy*o1A4Sau(&^m$NhDxX`p_Z=WnsDl1C!H&D5c@E*iED9g1K631&!Y%xd z`egKtCrtw)B7F5or5=%dn;T%Fe_wU8wPfe>APh|ryX_D##Bn%v8(Q0nX%d^Z!)@H} zhLc?E`{W`QBJ{# zy7Mp~0(rV0wn3a#;Nw02eC>KH<~c!i-Sc`}oVAryvNg8MTJ?p~5IRS-FEjlvC?I5Y zjoC7rk?^$KDeFnI8CO&7T_K6Y7dZT>&a0clvOASoWI^8L>PGEZ(sI{0EjRp+Fv zsJW^Sul3i}sXs&IJ_EUAyfbSUuN1UEUPl(DHr6fes(a2!*+~4<Kkt~J{#yX-|zvA+WGe>zz)k;xiJ~yT^Et;eTDFO?nXRWhu zmsCK3QXs?!4Fh_~m<5h#*__1$Xt2d~lPzF=?ZIufzpFmd*f(gd8e71Ze zf_b(&$)`S_GkuA3v~<`XYwD}eg;vMg7SBCM@MXlTq|}Fk0`x=JRgMmM_XdiZ}>uig8pS zkUK6UDW^1I&P&qZiC+@wE6HvvrQ$}pKv=+&U#Hhi#=8>5EvHyAL$W#>AGfsM4#U~_PiPxv~yp*D39k@<$HyWotf=KG@ zD}UclG&|WT38HyX^@AuqhAQ2JNyw#2BoCDDoeWfyayjIv*}0*~6NDV+meeEsX+7ef z&zePL?VTycci29WUpjVyb8;DUbK!=f>d2)e;in6xJE2>a&hu6BzAZ0UH@3pZ<>BR}VW;`^QAmge ztm0^IqHg9)qX$-zgwTMWo4GsFyuil=OSwBst2-Mxo6!gffu$v7741#U6pfs$X*hw> zYJc7+**n@A+0bzPdiUJX$j-^Z$kEKsnTGr7jfeE zSX-bwnceS_ ze@b0R^?xq)AMwE^Ml?_VyX=*i|NF8)es(ra4vzmW!^6w>k5UR|cIM6&G{E5p&sE z<|JY%Y;{4(cA2JZr;?@i7@xW;kGvsrztm?S0%AVxaJ=Dl@{^l@OaFo|-N)nPAdm=O zlrUbjpHXeS%aVRLEd{EJn&d)8aYUXy_-KNSX1r|oY-?60t0Xj`YlQvi-Z2mWDe|kC za1A^I;kS~Aztg}UL-oXP&)bujDCqd#9%-_e$4Ls=-yy;=nfX4-raAVEfm|?13M(0e z{|Gof{qjioavhseIPAd<{M+y95-EnB@b8-{7LwJXDzKBmS6cz)4~GJ2RV2HNX?L&iYFt%hke!N#4EpT8h5ia>$5r!O;tu&rv-SPp|i$tW6% zf_A2;?M*lA4}*6`TQ;PyBDr>jNmcto`9U`=?vSl#%j634?{62!2reHVCQ!~eut zeAR4ogeGQ&+gN92qBw|^)QCt8beNh_o(uUrE}X4*6tykNpNTC?f4?*gzo|q_ax@%T zaZ`h9Yw!kB;hlo21s8*CjOR3uz$AD@(bh}^ceBA_j5-p-R4@E!NH;BxS7oq2A^f7> z2$-BH`y4tu&>_CkSFSzwk&5fjDOH^6+)_jRb$(?oKdxJQdwWU zwKk0P_%@NW^x(CU5Kp_@PE5XYSB!4VhNN#8;lmOJ*qZI2(0O+CX!94^E7&V*pqtx zR%#bt=N*!a9t-}wiFm1!+)-^84wdm!*RyGAo99udZ;58f_*38HV)SMZXEYH!6!v|= z{JbuXE9}mFqJ_Q>#+$C)U38ULHNcIYtItn6)TYd$-|$qN;40qMmxz zQ?0>W5vvR_&dHxu3ubBhl1Wgngjuwyq8^kX2cK}0io2qIv}N`cnZ1fD?+4pgCHjj= zOX0XBcP8E|-X&-2VlplhoQlmT<2g~l+V>Kg`Wp9yYm}5UpzctwKe~ zhFNIu>Ek!#1=2eHwcCTtVJdMj(PQw-UR%*qA<88S@d@d3@&cb7L#NB;GS0gcYNIC~ zj4g996Ts&TF?BJjvhkzcCF1cm^U4?UyG|mzqDBvD)>X?MD1Ut1<5qmgU?$1(`7Xf+4e}5AI&+yz5jX9~lT4;Jw5fZZH~n}V$#J(bvMPnJeABxy zJY`?mVVjh7`J5DeIAZ4Mn4(`=^1y+r=R4d6X@15T3N3DJs<4WAQuylA6U|NYgq&ay z_4~tVg^eNx`=g6%weMG(l6k8dRLWXTl~|8mWO!VKvr|7y$Fi}I@v)~R&GQ`_7H@I@ zcj@%Kx%E<)!Vxy(#EI|jw+;)`Q6j>DRH`?Akb5E();l)u<13EUWkrwx*tUms>~YE~ zH=~w(fj0swdjZIY$}*~l0qU!##L7m1vcJSfu#)-Jhu+fH7@^aU&&IYGI9|^|ePIRM zLLb)F8*CRajakvlSEIPoMoQm{o7>%h=X<-^?wh`ggg`9fq zQb&fLtvP$#qe&@Hw`PZ@OoXV!-ID^HB*A53t9^Xzgn92%FT=Z$gO-tO&!TQ!*nTIV zXdUv*8n?gQ4A#Ul<8zR;#Z89Y-nIN@C87`i@`fj1VN^TtO_S5Owu_GuGyXxdH)Jd~ zRLRr%+FRlBF6>NmM}fFB<`CgwmbW(VCvOff`J{vg}p(`8_;U@o|p~iWQb!jB+(qNpP+pAJ92gs z>TCbVTP(2r-s%qp$?D=GgnI!Gc{>(8ZhwfZ+c?_{l#q5%$)3998Jue09td!sjkXP0Bi@~ zKTb4yzuAD=6_-*pGqp4lw|A$}V+XSFadFUa^K%0U|D-rPy!`(!5&uJvfEv_YjGce+ z9$DMpVoTWD*gL8_7?}WE=(m{Cjz&-*r?{oFlZu(6guShUz1Whq-rMZPO%~M`JF5uh$NKC;0Aul}a{QUnbP1*c%?HUFKhF{cW;l@o|;M2d)zX<$` zz`qFmi@?7K{ENW92>gq{zX<$`z`qFmi@?7K{ENW<)d=`a`D5L?>Y>=B!4c^B|J8l{ zw{!m@@Gk=YBJeK)|03{z2?F!15e&|a|5J#i+&P@J)oJFYr3NZP7 z5^{Bz@_#&=c>0u`kLy2C8-E8;Y|b=Cvvoq}%@Z9*zbefQD|`pSU2k|^<5=FhQADdg zOBSjfCgvZWb%W+k^h5o=XgWmhjq$nmf28KvH)iw0v%N^_Aub)M3re9)W zVC>|4dviqeQ>%E#XMalk*!RixU+I2$-4_dB3=Ed-or?{7yc@Gz!o&?BE6uX+d84Y( zm(e$W*AfpuUwVasA)__>Y|JW6%|pOl1K-z@j95bM(Qly)Yd6!Su`pV=mW&a*&pCt{ z8o~>jsm*>w3CRAgfrRcfcmxB3T}kualLgU24}W zHqF!>aP0+Ym?AEB6lib#NpA_8zO$EERF`8OS{Mk&>xkmC?mXyM|C5X%$D%E+r1WSR z{>TXRQW*7JBik1VjPUPgH?z?LF_?<#-A4?{8g0{(mVY?tH~5o^F*_j~LUC6%Eiyd~ zoErcqmZxhYPPhmG)am!r;^g)qk?IpHf_^7XI^rGnaQ`zbDE(ilxojztO}rnX6qHFB zpTmVS4NoL?vZH=O0c4s$6c-@+p;(>#My4nJ1oV-ArD)Fy7b5yQLGrCK8m6mu*}l10 ze=42++6yEdpCikGLRhKK{sy9qNCOqTogxi+;I~Hjn&TgG;68`1+9gN_1^BKJvV{r# zS~pzPM-$IpG2o3xM4`av(3}|QzhKE$kMf#62*t1U^E7I`o3n{XY z2=6w8=xLZitW5f9Fbe*s-aE^e$IZUY`X@G))h;B*tIcOI_ty5kN}*GM@IYJ>1k6g- z_Ad?KDwLy>iY6{oCDG9qw~LiyOO~##g02~%f?qGyq&F44xJXLPu8H_F?tZ$dve`0@ z>KnmuX>SwTt;0fP1J()IlH=s6FQo&k>FqDZ8n(jF>bnOTH4`9C^Ck@yhO1sbo^B{@EPL6-hY z=j63QlS^qzMGy0Q(fdo0T0CP4Wdc!e<2;5D)AZ=ZB5}t+o(k5se8@X*D^-(QEdUlVkI}lPP9}h_B*m;_f+HPqAk9=Dkz^(8&X>$DymucM)+KtAXDJjHYde=DG2 z<-u(=s=Av-rg{8=!G|M#mdI-5BcS(kWEIQ$zmw zusZ+_W{8XEuT?=i|4J7Wi+tcYbtd#>F@D(FB_W40*#HU#nC_*k$vhu&tUA3oZO zu9)TG5Ef0gSE1tn2-BwzZ!jl69?k}&iv<0V&LWN+&?qfXc*@ETe9jsKh}aS|oUZ#p z4EhhNn~$!9Hzb|q!rcf!2Ae~WF&>vzgc#(Xqr%249KP8J8g|<;epL-`MG)`rBM1#H zUulXSXCgD~BuS2A+&+D#wWs_`MIQmmxeR}j095OH*lpki7Ut3W(yggr4HETATIDP% zSX+z?Db3AC6dV$ z>D-+Kvzs7J>zcqh0giGQ5yZz!x54Ev_meUNLANGDa`E~>I92djF2@@S&}^PR?%(f; z&g1YA2t(2s1Q$eTT~lXIS?5E}94;it>Ql_~rzMJ?i(z@ANJNkj`cxx(2esW`iK26y z6F|2yYdmm9BJ%Uv|6%Xanx}!tSpkkPUYP#Zx6PV*By~lAg5|^ha&boh*a?#mpUZc{ zSrzYldqDk2MEa$YBl+?EB_brzo-*;`8_}P}iGU6WT`Gb;IaRbjy42mG1|k4c@oYeW z@SME%(oulF{d)Y|D&a!bpz-_3(wac7{#RmdK6)SoT zBhGwmz#+|=r)HQ)1kB=Z^>acZl7}H|8`Xd~eLEJq4N5CD$y-qT7jm3)Apy5yDii(~aGPbB2*PC4ap?7!|+xN22 zh_qYTJF{a9m4ISa6uNd>g9?GlQMi?V`QKfLF%@&TLN-iaUz1#Cs{2MYe9q^D!+VPN z!2~2tbo)TG_755vD#{rXG19KHyxw!JysN}k)}Z9`^HHw)Pk;Qp&%aAwE^3^Z`aM~Te1M17`H?(lXW~YW zC8*i=``YA06Q*ymYk#Rq`T*o2ulXkc{9gZMz^hByKf~A(BvMMZ3~#xqI=Xm$&C>-R z!1ut=#u_QpW%&p6iN0VXU^ajE{-ux=h;bNFqD(H!|JTq>4MH%TvZW(i5s8)XjbVt| zwi)4H(~}J<8x|{#Sw1u@ZG_^=nnJ{vfQ3n>l6ayW|LSga7VLWNF<`(47-+}eV;Q4~nT4@(ep-XDuK6hz7xRseGx3I7`&NAHaq zxKG}pz+Z#3DMNDWjo0J%GLf`_@GMKvcpfY}BV`(Rl--x^+zlRA&2fE@>hVhJnXv!yRQx7>36$! z|01)8Ik3&_(1vJ!+ial<>E|T*um+(k+{@s>!V3?5PnmSuAL9MWSt3Rt8{Edxv6g!7X|CEeJ7D7L@*;I#||IfJnv#N^caFBc0m5mbD$di-4m$m|V_5i-a z=Oa!F{tqJXzI9@&T%PpF{Wm@mk&XTNEik!sQ^ezH?VG>sLcb?~2mL5gp}&I%FqlKp zjeY6^$<&9orpYb5Fn}TK@*5CQ*|i>v^vt!SeOFy*^S&*7D3XWC``A00ws6Au_ayJ| zbQmcEHBIKXC#$=12{!D-FojEXJU{+8d{2e|-<|m3PiM!cJWwY?X$j?~{-TM-|CS<> z$5Ch4C$pLdjR_2_q)tN;`N(N1INN+--^~WS(h?Cw<&&;cPDuA(tqLO%X2oNWG)BN` zBmuJ@0*_#4%st%FAE7Ud8~B7e_T>K6B4IPoA`V=nGfKmz{LZg_*QNn}^E6r6AcxV^ zGjR+O^xR2x->dV=%`Zn@{v;+!I?RRpe86$gAYXP`P-ji?-S=3vA35uNvvpheOyrX> zwd4uCgl2iW_^;~bJ#wqymp{kgu_vQ>rI>AqTec{-Jz%1`By!D!UC;RT^2SWYq)3X_ zzVYhL(Eq-cO1QP|?v-a6CpyKe>Q8q(N!P*%m}2`tF0c@j$Xj~gp%?38kvTWew!``4 zP%K-S!}Nh3%kPPk%~G8F_@Ez{0-7I9wWdxX#)Z&xmwRA$rbET639hEXM3UE|Pny&I zK9YopSaZVv7T-kUc6@2e(Bp(BirroE{)NV+~+L!Dr&O z7$-29iw^G_mfH~mpqv%%K4r7#0=p{n)C9wjrfloYaOq#m?&)c0!dJ>{>ee*%0$7U8 zvcbo5_Vi&$A4(B)?cLDfw~GjFnf-v|aXw!sS1&g9$=bKCrxEeau++VGSLW;|C|`=! zmOinx5&4KlBx+s+A|KsI6>=m4jQ%AcXJO4l5C$NcUkG3{7^?o20^1L6KW^YwxM#rYKi?J~=3h+X-7x zt5NA(7Pq;XTp$Zq94=I|(su%uC^>@D#%oylP3IuWSzlG}F#{K;15ZVEyn7MDxdIQh zmM!Y~f)NTz&R>!hBOS2Sv z3@M?()EwqGeFg(On*%wDg0relA5T7BBnS0)9dPxXpWDj;>p#G)0$W+?9wFbXhWbtS zU&D&aQ1Bf^0+3+(+A*PbC0xS$bWI)@fQ^Kdx!b9$ozHPJc=1Y{r@hG;CV3WuzA(-; zIu+cHkRF+_mL{*+MUq!3W zpMN*-V)GWkn3nw0b_nGl#Ako4@Sw+rlDyFpSS^gB*f~&nIT-pADZ32bX~Koc4V)5B zQqxYy`pTevy-UjVo|i(wX|R@hEf|l*sI7UGEm^Ngburue8`o{yenr96hZUbM#5!!z zqQP)VU^W5h^*nm^IUHE2y^;g(X)B&2Zt|Cd&r>K z2;RL@e{n0_7kSEfry_K4*j;pG3g`l`)M>c}3|hz`KB~z3E3!uWA|PXXRQ^6wWXc?* z&vLz0i#{^tG8c|7N_%5o6Y`bE8c?4%F>bFUbMCv(`GmyiSW$OT8!ukR#R+*~e_2G; zl&rag1JYDRJdiQN!%(qpf(sbeBU~?Nr7H~^1K0}+|Y`2ykXs_-+U2@a8*c3v8efAm;c3IlHkaYX&`igVSnUSV2IfGQI9+Nx*q1r|om zfU`Fn1tAfM%DZQIq9CPi{Cz|bd&SwR8^-i7n}PI)==Up;sSTp#@0EUfD>Dr2m#=2E z_ldevL+qvcX_)JuE_{7BTj(VzmXz?ae#FQUs+2SMNJ|c@S{%Xf&I)?oo zTgD}C(C*^S=N#&wEgMRNj^|G#uWpl&W94fj)bKP9+Q@*{_zk#t9@xE7@Qt|NP@MsC zt+)(!YwcmGZr_c35VTW#NqWvDY1ZS(Pkt3%XJp!`yzR%bmPn016sZ{5iZba1(@iPzZNTx1Jt{g#YdnWn=J-c?EG1Jr z#3HL)H6N9-P=8uzl8Ds2H1h)6eRDZGR(y}^=xlcjMlOYx-B zQggzS<#gF(*s|Zt>PfABFjkwSPI97L6S9fcR`!${N|5lq%_B@A_r)Mi*4rlVx~V0KA{r7G$7L6PdE> z3RiBGnb7xGl1@H|8D?Sk({VyS>GwTowGNziJ2xNqoonfIBj9!-qs@E$70WhRqw@*g zH=FvM0jE)ZG)tYHD~9tVu-V~a0sI01OwDAYpiJr zt%U%&f$62S;NYPt#Htw@p@;{Z7@%T!?(xLW{v2dDM{zyb6dpUntyoG~6|HJnC9how zk+u_`=Q4kSnK#I(G=DAmI9C3pKHsZ-?{Oh5W=_&Z)^q=!#Gqe#<{JBwo{i}|v#6ta zfqn?mVY8%x$!|@la~jdzZwpH2=?5`3yg-GuvZMLyVP|&6RL9Ndo5b}$4~OGhWinL$ zgFsQ)5pV~3Cq(_lLjI2(jrkzPw91Rq4y7h&y>_jw!xOPTc)9KYm^ebRbEE^@rr zZYQ;gN|p|rX;~S>B%J8^_TuMB!FcSn$GOvcj+nuzAyGu7CDC@lFGMt>sHjW8=cKHy ze-H@-5ZN&}&Fu!u?l73XD9tzW=&4qEaQs0i+>2@sB2pSJ&88>QS43wZd0vDslMS10 z=SCu0Cro-vS;CaT-djNT=hGqu4ewXexuScs+U*SYEtaU32b7~)$F&-B_cK`>OVnO* zSkS)lS4f5|lvrJD5YW8vaIFnHV64Kt42qEz zLFwZbpyuTF(jtwl^jdqzMY*<8BZNpleI(+AeiqEDl>JhBVWYdtNzZ5tL}fOg7Mxy^ zsCQTJcx4cq(jWOCP_&CbohGo<_h(W|KRniHv^t;w2g$FC@H)Xsjd^A6E&nnZh;nbE8+FEUgXDg zLeYu*!}t$4o_w}?fU zds^uPB)>}SaL*ECQoZL0_>Q9@@1y0?IBAjdvZ%9*jTOZL1Tnr5YF`dmJ(5CE!-RO9 zgK$)hr~=)p)|E4eaUIzJ-KahSwEJE-FBF-;^lZ+oJyqN)7KkHV}#FZUB7(4gvBPB8Jj+*)IKlYm(M& zK$Dh7_-a5sX*SAmvV|yX?(^%?7kSXy1m6i3$6fA^2#gNPJ3=aVkHa2}Ya0wjW0^VIPZ(re6%4#Y#do0}^C zu^^nRXZlK=?8O&Cjom;S8EMTNrvD>QL%&>b#gJedWsYc-{>3#$I1k4waxfV%^-Lj4 z%g@^P5yU&{9R<4R)6!;X>a?cHGE3#xCd)7lSvSy#L z*F+dgV;u~?`-{%$d7k(8{`1zqzW06I*ZR4Z`ySmq`Ie?HmxtScC)#hkULd?Lll%crQ`s{=hwLQ+BS7cAn* z?0vXIq~oQb)CRLtPK5#oT-)MKhSn-Q*4a_)b-V=>i;v{Bcf~$1cdUk}7(Uq`7-~Mb){;>) zZM6sgQ6MX3<~s6%-jD>BSLG7B!Cjy$Y z3X+xYMeKj@O1U9}R{7Uzx`0=_Xk}o>Al0@5t*{4_M#lANs)3@9ikJWV-%X$H=34k| z(?}#CGF}kudog;p$zFL>bE5Z$N$a^}0`_Rd*c^Y_tAS_Mz`7mmj~(fuK5fQb=IMr` zU%u+*rIHzqnwp$DwPb5|c3vQ?@)7k$4V7+BL6YnrP|3{0%&~9d zcP16K_vg8B2+^+QETirVo$|aOEKYbYI46whWg5|p-Zfxmw~WIv)br-vNq`rY~bWXE5R{5T0uCG!FurUK?y^gma=?0R8zwQpZEq)HX`75-XZ# z^;tggT#vMP&~6^5s#)`Szfm`u7hn=QF^+&cv(o$W6{Z6)DMt&m8Q$6JvCi)mxkE&f z3gob9T&R_lI3&sQ-pMrS_=iZx)vnh{NjZR#!~b6ag=Bw8&4koiaa{@vd9_VqQ-TtcH78L>QNFS;WG6z;Gd z3yVX2r8_$|w3+J1=j(RF5}|4Pb2^NF$kO&GGo27XtuesSmbNuL=Ui4k`e8n;fHn4R{rb)y009^K7PhwbTk*Ut%U6mJ=aumnAb|>2QtL`lrZwd zlxSo#{#M+1+?uT4t)Y;6L=^n;e4_nXfyei4l?F95y8SpLo=2&z9n z5dr-#dPB0QJa6OdhHh!>G@$v+2OeBh6KJ3fVTQ3P?Fo_7Rsa>V&9WN3FnDD~Av+v~Q4cCg}hO97h-XP8^Ly&LAun~eyYD@Rgfb~1l*88sN= zFxApSK#)l}G(4~m%KX!Wwec@`ABGi74(2)|#*!LmI1LtK_FpS_i;p>^AgcRHv3=&O zQGMO9*b;}bg#0SC3-P1YFo>SSHgt`#L37TC-etdDp+bfazCXajq!TWQ(SQ6^B(oNj0rFf2u>5@IkTWTlW2kf_&B?{? z51En^(?JDY!`~==KmUFx*}QUz+MhRl7v>hMybp&^95#{EaO-uAN0LVTRn{UB!%Ty{ z%y25?!qf5ywUT9##{trN^5G>j+9XOCOe@%g%J=H#K7LBey0SFpcaSxl!^*S4eM>>kN6bS6aRP!apncFBn4qav3kHJ)OshZEO0 z*!GYv!wfu1rjd>xd8a67q^FtHV(@*2j^NmMR91kzCi1&aIsDAna!kRcPKsY;hGm>) zho5qvS8DUiH}#_fgo5NqkIb#8OYY{a5`ICC&)v&gfO|9SM%PC>UR{LAOh&DoR$YCd z1oVmKb`RbyGyLqTHNvhR9XIv(GU=|j!)xg z)3;E(%s1ZhW%X~X1M7|YhgP5@n^mVdvjW$DyEjLv$ zpyW?!dCw@PVS9zh-je3{8{~|LCAvO-tBbVWkOlU~`NIY`uWnT09)8IqCS*lw=1vb7 zURdie%SV#dcHmUwm>83FuY?(H@6=Y`odbc=CgpIxWI~X>Qu)!Gl<944^C7Qi{a|J- zoO^w2y5AAf8TOTxH8)_){=+A)j!2J2d%m-9C&edB87`h5QTv7w_or7k7|ad001=%% zm0eZL?Vj@9JiqF^?os~!MM^Sgsqkt?WicxP^UO^`nOlp@|x{iYbUB-D~qjRuk<+pP7qFI zFTeStH>l}pv)qJY*U10~zJrMmtFAndy=MSyMJ4yCtHkNnZxu+t4J*!%8wuvi)-f1r zn=acg#Or=%3EvRmeL&;B$XQk!*Q>13wlv`NRy09-Hb>D45jcx)%wYY|0ceOwfSYxM zhvVr_>^$D;N?F3o$H`Z^WcYjv4aag#vpCc|LWi7AuT49&J@XQITu^4KfA<8C2?n%% zN@J4ea+w*8dc=WdRhUi8;i0j?sC=PT~1>HI^NufpdUyg5fYSA;bJ z-ZXR%M;ov~AR4goy7f7eJnYs8Sr@BX6>*Hr!2+)~BtvN?aHYTd0-$K`=L>pbOfHPr zESsA*70PQ_6wwl*Dza2p_O-aYITEsbUQb#{sF@$bZ4sz{0GfwN%_B-=IW*^p^_Qr@ znC@Ay0wR2vC>TP~b7wc3P|aYSst@eT*`Zz6ovP74*4INm@)YG@TcE-*I`XB`gGyeN z1M>op7sHc0;kKkhU_mx}DNq>fDjLx@o}9Dr7Aho4M9A6Za9X@2(DPLGnoanpgEiqf zb_V&h7QuH|2B^j8B_QhVkH&{pTDw!pe(;`7^v+>o{x?g+UBU7~!2!Q$><(zzkLtRgtkFAeFoU=qou{6`SCf7JI9EUjhzdgn_b|LPmZU^pDkb!dirxMa|$uOND`&x`WgF% z$Q|E`h+Tq|0!vy!NWWB4%sYD*ON7b0!k6CS`<{R)hXjSh(lqR|qkaX%{Bst~8cFdy zuPO`WLG?W(16uoG$roU;HS)Ey*X+R@=)7sONv{OCsILX>`-;MzDM4My&+5#@-TaIb zD0|Rb_`=g64av}PXZ^7FdNI_j2WSFm=;c#*STGobDCQqn37x7|FMx0v+awxN@&%sV zxn)7G9cqybT6LgtC#ve%UN;NZuhI^O1c`z~%y1sxZ8SqZM79 zgf&f^miO%)uj?-+tii`C(I0X)Sh~iF2(L53v zUPX254dcqbJvhW#MQqjtK%EBP`=fBQXJ@(3U#9P~M8GT&U3GQlNV_9xqx0{ccxu8p zvh(ANiD0UzH|SXQZ+4~FLtb+ku>lNpyH;HI0A^6G1S-XpEjY|J9LD`l_>I4BmuH!R zd8&sQRtT3j1e))5pWnpGMMbZ6G<7B6Xfumg(Hw$YvB&2#!&B9Mg>C50sPKNmtFb7X zsp7djmmTeBk}&Q>WhW@XwV)jpA65R>Nw6a}14u^4Yje>;FzANEJah2rT`K#&A}uEW zTsX3>=({4v|Lt?vk@2lK+A&bCLYlw~Y|LR4IeG)v%V*n;jPmbJKEKpyuK}1K35t>b zCmx`>nXPEPFKCe>=IFtmdK!{sz4B#lutnNFw(wbcY=53ir5~7OF>FImUWV1}<=9&P zul-1XDLfPB@;st)9&xv=_tM9C(jB;T27klYWj)LNdeNMvpxlI=@PgGHZq?kUc5IjM zzuu>@1pV2=zcR2pOPvl|pyRL^4U73U@U=V8k&zF}# zXCP~MK%PZg|B8*DB!tqd5A(*p1anNiE3?lhz;mpHDu-m;C#WixNrdg)x51s2gyw2; zD422W{{Q>vF=&hAJ`_wu5uguh#- z?Pbwl>t$YOhQay!h;=b&a_+~`9!1A1~%% zF6{%CHb2bH|A%t|xDy7gnxBlpoNt<>YrTfB!-SN9f)JQ#ql;v}D80yUP!v8pmjvG! z8a;O9*N(*5eL)M*hX;DdvwU``b;6|iXyN!UP$_hlIv(KpYPSgNM!4t+m(~B}#fh?Q zw6a<4oCqZ<;IUm*AN*x_zQkxWCs0wg64+m8UDoBX*%OWtqnm??gZKWCS)$9s(g^P} z^9)WLP1y}oN#@1TVs6^q!XGVBRRnTB5sN%<#{~?MCT)%kKJ;fUjc4U5qV(niGA}z3jvoBZ>c{0#!otN9m3J zeh3BtlehUI#X`)MDyNCt^fCxMv&SZL1;A|PR=O=vId4zb^L}sIcJs*nqsZl}Lt(tE z;uq^m`KE9~DaZ4O@P-L*Frj?2b^^EL#Hp2EX?4~5b5&dNO;t!w!6fXLW1Pw&#Sf}` zZt;1MpY?)@JJGt07|R!w+;{&d$pSMNt>2rs{||l_PdRLkMALy2y|)B2mvSia>!`rgMyLO zM5-YkFOq#2BF6o5&3+t4@tMAKVS$*Vi}Cz)I^5$^IOb z%$xPEU!k84C^dv}@hSTH8A_zpPoJxmkL^~EOSM0nzk9&OzjMVXZCyKW!VJ3S&UT>p z?d3K#0lp4e?4fGwe;!c)coR1oCzWiX9IiDkbqmb4G~KNhC^rA=NJ&a1tJl(BA!h7R zyq5rEu0jCC&5&0+e{KcZBfdEfY;Wh(>t5R*93kNgWp#}^t(Yo z_e_vpL76v8U0)^`Oq0?x-xKJfC%UWQN-f+q3`K_BwY69B$(nzZ=8DMX=5*tfI{qC!vgun}u1)!~iL=!5xmz|r@vOs-1oC=z$&suxYhYtr+Rd6T%yyrhW zU41oEMh7~m{(mb-j?z)4Tsc9_WU!j+rAEc!J&0zDuvMc2E+zJrvu5E_mCxjP%0N)9 zoV?IO_IsL$1gv|~eO!9u#?8gEK-t&*RySItXM2(z6#vCD!JK*CtWCZc!xL&+Jk98L z!M`;JQ1i8c3PAe+&E^v?MxTA8xDhVef2qez4>?3OZs5b%9H)u4IN?hqXo3KGZ!P8D z3@Ef)ma>h{Cpzu)RDm2u3X&u?(}wQPChU2hP*wfDe)g7)$dGtXN$BlI)whS&FQ)jn zZ0emvZeO2OsFVD%&UWm!UHH;yvBWrh%% z`j6J#JQ(IbCSV8e`tzESl5UrWc1h*QS-bkV0vEv&EL~&l;dh_lkHbfH5}KO*-%rrfW#si7tI_+;?zm=fy_w*a28+80(E~iq!)nD>rXiACgT| z3h0kX_tO|UCF)_q3ALcu{s543ePNqC;z`lT_~tzMtEfXBz+ZG%5Db^Y!cEF+z=f)* zu3&}uoscbC0lwz^0V`gewC(-ax{&Rpm7_UP;8F6rY$MjZ4%+k%k!@R$+X*__v7P87 z?Cy~~V)QBd$DQ7F-;an)=z5UE*PUkzI($G6MoB#r06M$HU;@LqPj8LJF8?~i<$=M* zf?#@VL;T|WThn=0epF~!B4jQ2@|o)_E+j5=*U0+WU#JXjyc%Bz3Zz?{^*ZE{dBj-3 zL4cY4L`ytjlt0noS9A|DD!fXvn(8>+FBsa5LVyDNvj_7q>plqcH>k+He@rD;*6C%O zUT3RYv-EXX9ckS`a3Y#>%Q#^b95@W!tBc1P;OL><05)_R3X_Jux9zjyu18_~Sw`_2 zzFP#0)~~zn09(X1Wp5O@E}KeTZbA1;?ArwClkcm@?`yKg!f-BuWm8WYNVJ#BpfQWW zrtp=&E-tr;yP=a8Ssux+DzsLaf)w{M6aiQZq8JR)^!~htLMlT!OA^5-2FZwXc#RA; zgO1(>PHF=a!)*1jvGUHX4YHa7ExR>s^n+ECdf7Ap`N;%Q!3D8^bZ#di?|3ARY+$Yb z0NZ{6A5z;VW$mYmj?1=#Ho2~{Nq>VKLRsyBBTVKzPY1fQ_4fl%`=v+%GigiRRYz

      pOd>(T(o&YF}p1rF)v+>gL0n-Fo-=#e`I?zwUd7`ifvSwGU4&~^<%KkSOcmEYYGzXy za>^NZDneXktzdz!xmK0-QkmRzGxoo?cnfX;OlrV>)19Xcvt@&U2p6#dZ937aC>yT8Fb&m6iZjv>E$>LdN1{O;p&mU z;$EyK=y=cHLwPk#8J15xMd-;>sIhL+L%#pXr(jSQR~u~f-z`C&IilA%F_giM^9G2~ z|94&6oD4kg|Dt5;?wo=n5u7(a8eVc zc8iV|1PmA#qczvB-Cg+ymjEXSZg>19l-Y*Boujo$>N>CPuYRt)oIdes@8c_n4EAo( zZywZfl6Le+6O>kYZF zy?LaaCRER&O6X2IjP^EzWD(?i8{+AFqLS{GQgEa&qp;$WyY#J*iKuZ>(^95I-8Vk> z5k)#`zL8UEel);!yH8-Mb>-@|br&|Y2{yDd25p2=cg7fRKpQ1(Nk zARtwf{8pKspDcaG-O(n`Ljspn!ercM+CXlaM@;+VQ*6_G+uONhB+5Zv4uoO0!H+B1 z6Ei=nm(!Y_F6@DoNPKq@jIVorI~M=M-4_?_^7UK}|FUNsT)RTs z$ZCK-b8{C!aQkpa@`?N}sbskHLo!iDvM+HGP@+T;;e3N`bz^a~B zE+oSH-%f-9;Kh_pAYfk;XoOIwSG?oJ<|YDu&@P@S{Bp9)l!Ah@1t-T%Jemh{WVO8` znkL3fJSKKIeJvdRrkAfZV1-Cvk8zTNR<}Ja&rt#b#X2fIBl$RNSEQG)1)j^Vb@L#T&)c{i|dJeU$=nO zTdV1ODR$P|M%G&%CV4lHlbz@1F32qGsXw7ji?V02!(fJY9VV;j0#I=rAQ5;}?m7^m zs`S5F%g}I682McMvgt7pziYx74xyFqGb0IM15(yZ{%^IDY8^C>0-KhqYSf7_gNkA; zI$HhcMD-S%1*fW8QS33!>lcJG&y+>F*l}l!X_IK^x^EN#MrO6q^fZFMEpEAQZtxUDMSCISL_8Xyn2LPDtUL4z?z| zH&hcz(%2b!(Ck6~I}6j@0@@{GzWbBr>^SY(4cL%bX>NHz%`dy}Y8yk9qe|FlYC}F` zC(s-&Pre(ifjc`_Nezo&_kuPFg|7PbyjsI){?0YYWZCy0RI!eo5;;4hl4;d#QU!N| z7-Lg&b0dn9%^CKmhHjh8e7rCvdrw9X>Ocd^1a_z{^=4jzG%kbSspA@>@u>0=`{Lba z`l~)V-?}tRd-t_#ggHSX!tcucjc@)T)Uh|KFv$u9%r#}j2TgKgg4;#jcn-Wp7T|)a zO7tGwXBGbFO-a$?V|B%S;pQ`_+x|J;yII|)8EQ#YW~3Y!fY3j%q^Y=7tFX&3E>O9I z&2ZlR{XhGeZn7%Kw zVm<^bv&rp7SU{l>T)rO(?nf=gmf1%~}ESbxt*-CLSGcIJfh@_(|04~5y&!2pEc%K+x;b7mXgn|;XOMX+W$?2$T zfIxt@NA0SU$E=TzKlcZTp?GLvwgvux7_0j*rWAfg$|s?3Wa%+#@o~lKc!l>Ose;v0 z!K$xVsgGZw3E&s~@QdHzYm3P!)@U=(b(2*_#DM2aW1(4>39G||H5$Jz)g&Gzjg zVR(8qOsDaUCu6Vb_&`jYyp=)>M5*4%fEeLY!b-G@UbAIkSst;SG{X;dzQN1~wea}w z%CF?6)JZw@;N_p-#usx>MsAf<^4jP~=8vJ-YiO94du{B{OvF>3z6E$|>4&&j4$AtS z$+)LPE|AYIoCJ*|S}XcSeUl$FvZqNU%M1izq}(%O#(&8Db5&gA;?c;rZwSJp{Q1P# z2xRcBjRU*&qcs)_PW&blh;+7W@M^?i94+eKKV)VTcvy{Bf7876KfGg8MZN;U6KHMZ z(>-^AXhljS@GPCZ_CJ4UQbh*S&A28 zS+SpxsJLBcJ8LA<^~J3PYOF*5z%}OLN4`h~3!0?)jl21p%Sk8y=Rmx7X~!>v8#`dG zZ00v+b$ZWcsHShon^$AA^vhOh{De4u6cntCm2(^8x=P0rwHj_X#%NGgNQrCwxktb; z8J?gL-t~I?hdn4&Y!HMz9srVK$6A|4F@^!GIB^z*nTIfrf>8;wRr2eF3o#oRC&;&N z??UJ$fIJIOBEsT~EVBez?@603^oOdfgzA4@Ug)lB5p%4{DlSa~Ge`*(^JbecA)x?I z*O*q>i~Xu=isquq;M)I3^K@1br&_$>YtD+NmOn1nHriW0T(DbftXMHw8(DkP*u2_T z!F{3di(WHTKzQv(;%32^jjdBpNASwtCeV84&01R-sX(cBI9!`za}(VlNpt}1{qu_y zA8smA#?oDJTPc3oZq>~2_+l=8Aq%{qfE*zn49DMZ*vNDN5B!Cu4sK;nhRQP#4|d~d z!L4gS6oBgY;b=#u%31nj3(q=FoQ5<4a48R7EVjNx(goT_`hF+Sw>NXWnEev z4s-SRq8pd%J5YQHj458(aB%Aq)NiZizDxOg%Cr&5uq>d=-1>fv^TkVrx&LOj*EBvghcF@5rC&AGo_a81hpj5S373unZtowB zd;LNz_zfxgqfX{5yTd>281R6=w*%$xmMS@b`vT>-4RvRG`h*w|{@(-`OiU+QHdkSLz@yM#8N$_#e&buch%%q;D8I5v&{kORW-UX1yU@HKh^kqAQGQ2DwCU3Cz z;f^xVXIHLNPHyad1n`*jKRhl%I_4iBS^JJQe;>M;l{f!pOaF-3V8tqYZTWy64q*dY zG27XWj#NKVxpK4o_NewFLqX=uXE^k(o&A<7mEn5Z1A4`+@Q?qg4mQabY$s+aSVy@B z!9`EI1Ao79f_X{aevZ2c&Qz^#|?AMvlUrHZTST|04_9}Ay;!=W;EK3%Z`cuq_;tlClDkU_`&B$-;%Ife%~L%qK8@O+sVnK#*{SJB(wM1o#%&lgg%D$E z`LOFSy8P55#S!F^_2lJ|#5c-*+E6AIU!MC_GC11*tOaX=IxZd7ob7z}d0PLyk?II% z!VbQS9D8`H0Q6>{9C$P6=q553FD7_)OU3nmm^Ou($IT5#g6A>Xz^oIz#}l{@aR1Q40gf;P)q9&i;b`T|#vS3=UCt8^-hxSt=k-R;X?~gG;`MU3tm^7pEuaSr zp?&xu>?#G`+Il@C-Po|T{#y;FKnruoAA7mZ%ddadz0?kb0V*!hhO!X_9*!gh<7)R= z3`7dpw&x+m7mDu}5WkCR7-=l=_=>!@emBlj`u>xGr`b{-h!_w3o)Fh-ZQ#in*iKRj`9?nQHEW@3`Dfz`X< zh5l}Vd!OPDIm{nfO7z7{h3s7wNsBY!o z>(P9%gx)vR^(11Ko=D2XvvrC`wRI zmG;@Ru_RY+WuL4NJb&K*>XO};gU8gK`*gIo zxU+5b=Wc!BVxlnWCG~(mM1#C^`=N#z%Cs;v~!U3X*g`V)d%8 ziQ7*<37!bTN*@G|6C-|Ja|h@7L`DM^75?IQUUJ|)t9Rp;2GTOR5?9A3tZna~yW3{c zksQ1P(>FllZLJ3&Pn(0M#-N?|l< zn^;3g&RMXvGR+JgZ`LzQ?X& zd9noVy*LzM;?4B?@Uu-5<+a9IfSW9L=$X`^=X*0x!DK|!U9Te0Y$$p}<}w5aMw&L`2?AWUKx!g^P?K(3{t`pW=FD`v=Ca zzpTijiC=z?i+E7j`*_+=7>h8L%KZAsW$ncEx^BYh+i*+O*V$YG)?^=gY6fF+##wGW zDT5b^eG2;nN~86WjN=@FFc}OPT{C$DpI}BI7vd#H%RH|j87>veX}d?im+=G>R@DC{ z5fyuis;RjW?&zk|vFsF(f1eChxD{C!d0r8pn!yTCmlkXPOC(+Lv<|AST4?!5xAx4Z z9aF1ybi{(a%)4KrljG4LK&n!=JX4Z7=wc%NjVyT<{BEs$ z-{J~s$V1C5<`izW^jnwHpvRKjd=l9H;`2K+TpfB+1_LVa3)7t>q96t_P;4p_Rw(^m zYA$J;fYJ3hY+{c0ucM!Z$($){i|^)8er%oe$AXi!j%hM?>-4ppj=A`dB&WqmRo|G9 zZem(7$s%s35qn5Mj+MVx&Rfs|pkXMGxB!+%0%Hbl?uIm<3=-z%<%6Y-IPXK3r#GSt zl8#%j&#$|WkDKT9$6^NX`NiS^p|Uz{hc&Gi6^ABZH|FQ+2Us&nzFoaJPO@7q?tI^3 z8TDr5Iw1o$_!CyXLr@Buw(JMIExrgI!Q+R?Sdr04j*kdEbHspgHi^SV;p$i&x_tKC z@sUsS!+k$KasZF@>6fw5v9uDsnqjN=&Nows#BN~U`|OT6LOjzaV&6Kp+yWo}@M@?J zWoPYLRG08ldufYh-^(~B$?O6xmL_HP(=rs27fu|#Y5~T}fJ>CbAhzxMjBc_d3sT4t z3tx$logV{iJSrnsTqq2aNuc7o_<~};NI0TL<;WoHi#m~r>IZiwS^qI1=gI6|Y)LWF zw%}yf=-?)v!BG@*Iyy|+ZaI%;-CC3LRB?aVR%t3jW6QHuUi-p*!%%ae({5=x`XyBw zkm0KPh*%oXgf8bL5p(!qT)GC;?O06XiTcCk=`+oDoso`MF-NScCh`WdRfT6WQ1L_) z(wo7~L){Inzjlra{LoMGGhaB;H?5jEN%dTvOm{Oy=N~HvrO&}+1aYTff-tM}UmFWIppmJ? zeU6M({={9~eM4+fzcW@I8}e}+PKQg1~2YQH2Ab4NhHYgOLl zc5^VH^mNhiSFNr+rPw>1euXye&&P^Mt9Blry%(~siH^#t`o!{ji!Zz2+fT&$;o7$< z&lRku*ga@-gRui9D<2G?0f`ChqmcDab{%Qg)TtN?`$<;6fd2pjZ|K!Ai*N$Z4O|F4 zAdV=p8NFrrVU+WC&GLOt?J2$8XtvFxJFfy9HR<3X1-3bSkM?{|#Ru1`Ugr{=ofqrq z11znOJu;50-8>yVpBc_2qxAKI9^^nXUI55o+I)vrFJX?b={yc&s_B{|*fk_iRJmM7 zIyyfk5o?xy^Bj#ab5YlLgMGPmM(9S`uM3h`6V1wdDQ$ic9ia9|v0GdDdUEbl0F|;z z@ts;tx$4`ShxZBVLY1bIO8aa--1!F1J17j4>LkEG-4aKcj`diK^ie@rak3kQd~lne zc8Fhe1JYyS9Oaz6>0FWYo^_w41pr8$VcOmZUYn*RKIDTU6ujd@a%^QWUm)+BEwM`fZfOp&`40XO(I|)@=K%V0!8<7A z9g#IjI_EQPA|3H0;wXjuu(7LOP`2Enfjf+S{gehEcKnt5{7_q7UeZ$XaMY=MOS+d| z%x{OBQ#~^tSyrs>K5yH)pS$}-6Sc}OH#sN4mYUa}ejBnK76;l<9m)7e^u}H@w?K#v z<1NWIB}2}4RJ;bI{jb6#;ta#5XD8xFdYQKKv*x36QO+h1ha>0h{LiXVKi;@1IivPI zd6lFkA49CC4qYMi6}8^9w2XS6RCSg8SgD|?=4~6?HmSTB^_)5=C=A+eN4TkM z?s{Xjk9;xd98$CKM8+pkOVCJ^t|wt>zWe{)!K~b?SB9Nnk+yl&y!!HC3Q{c)9)?J6 zbL}R`_kOV@o$hT{1;+a1xjkz7W6x$Q4?WeqfK?ZbywA2IWkyc5$v7)#(VQWarB*Bm zINbZ<&I#b1HF-d96$2pblE_@)Wc*Oy)vaO8wyI!be~&JhQ-5McuHR@bc?hnc zlp#85NALFHkjh1MU?0DqXNWffLe*mo^R8PKz zjpan_u#PUQH;hf8Og+sxIVUC1@?<(MR%eIv`r3)X-C9a)-6=!|xjEkL<;6{%a*F%vp;oAkpQ&Ym} zNxnJnUVi9H;maKOp{~(RFI2pf6VlInL^SYhc5XpseQwi@aU1r-V$L#iX?)%CU_S+> z+#x}JrrLId738~AP{@-cA`FQt%g!aE`9e8)il>w_+a8k)Y20@P^n8IfmsU;>S%_^&A+^Iy+}b#N{3_cu{)X-mcY5phy4cvhbdU`%Q3f zW;>gXS%CFT9mV+{OZlu4)ZCTEru#dr`SKe&-D>#gT=MV|15?fRpxfo;$Ltr9DEHJ~ zvGxH3Tf{*jk06d-eFXv$g4GS2q;2=gY*o{7n2aP`AJr3uKjZYBDr;u36mU1;!8pWO z;aHiN^rOwXk#AR*`C@&km?Og(B4xfgPjMx0JE_jb5_+?l zqfcX%AY`2FT@|)=@~5QDRA}t5L`~pQA7m7k`I<;Z6CJ|ULBO9x?n1X--E=D$gcKH1 zX9^Nld@Mr>BF(}}%<+b;Qy~@uJlQMBGn@~B6e?5J%I%jf+bXR=Xw~QuvH6l%us39& ztvycZl@7rKwZs`kVSpw-O@ymP#S7$r|4NVQVHnJ;YnvB!}t9 zZHop440?84j=K@hPLMD?j0i7^U3)!m+mpxyOR?o02*4ZzY^_}arGt@&Sj_QQ_`MJi z$nerXmy%2^Y|p+P{tSUq-nM^0X=$jUOIYhT-gXHpZB<@;L=1rJ2z0HyE70S~J{yY| zBN+o0{^;!%wTOiVv~yEr`TWD*aL*tRo=4RB0)IXt?h$|%_&&AfUZ8*Z26%s=i8BWv z7)|ZflGbf!)Id7WuZL`PC2imrHaG`*Qf&m{=MRCSZYk+&D-I{2Lp;LL(w<v3&a5x@*S-^pn%)+p z{PEn7q(LsK`IG$lTWH)iTE;AAWG+-WYSx9T^Y8`ku|S|cEFwK$A@@8v0CENa*am8z z4!=pWz0U`Td&uX*Q*|n2K-ab)8Q9-*Q!^wpoPsclOq?hz(z`uA zu89+>@ioz8SqVft0c>pPsz)~JDPW)6z(#pugKjH`?%B-G>$$bnyBWopU_$Rqg;3uT zu3LM)d+;qbk*Khd4Xl6Qy6+LO*6q=69{>X=kHaV5p_R1l97fH`YJnULzM*X!6m9_& z$|>ss+{;5E=Cv~U0b(;5IL=+u0}42f=Aa0<{(+bPj0tZYxWE1pTcsC7nAHbvGI|wH z_(|Tc^>@!+ips6gl|Ofrh+q&yd5@i|tKA)i>7prRQ1tK$ZK}@0((pmQeplo$a70ZK z4!MYJD%|BYao8nt8vpmlhGgxLdog~Eelggv`)e-fz z+}#jC>3V+%&{0g>(~_t-*WzQq&Y*ne5>h;@iIX2@5KmZ{zVcILlLJ-QL|0JvyuG^8 zyvERSKM5_6IR2cArr~Wkl$lg}I}^%H4zq*8XW;7@MGzivp;fu|BJoJ*u*F6 z^Ae47+xIvMRAkuewdIO%LLblXL3;-g)PSat(FG9oO257iBCenQH6`s1s0la9Kt(ir z3;8dPdV!DV?U;S73TjseYir40xz%g0uKQ7t>yyFQ7mCj<9!ncwbyYB@)+SI-)iZGO zKa7^wR^V%H)^6`+fZ<3yz<@GvsOKBjp^5PZyOVaibowsv|U%_Ou z+#sAlJG=g)AGRq1DnYUvLi=fX90&~pa?goX{)SQ=e@0vQU3rV8{YfImGArY=Cwtz}zGAPwu_j@CO?%mduWI+Sr1oq4EyJ(b%LRfYfHKi>yDm-A3J*JmT zWg{P1OlICPVNA~X7`3IiEqO>TAKu;Bn!DnrY*sU|6!@bly0xvrNj6szN&zal<%fJW zMR{NO;pVo97)10|!jVt2Y9z(uT1ZF0dVc6o)V8jEJHU7yg=si`rN>4HaK1JzA7!+f zmS2y4p}h5CW~xtN)EyoCFwXgk_56fxW=eU8-R@WJH?56jr=C3VX#EhBQzGMByDTd) zMSs8tMdQKi@;Sdquv8A%Bq6;SZN39&bUa{1iszlBLbnkA{47y(Yc{B0L=s)sX)9k$ z%$UVK+Uum@&aI7HuC+M5*~z{U-ms>w`S_rVhGSjg4-{){7rM7e*uC$~gs_>7+TJ~K z%G`IQfaO@+s``cf0RWjZQyg|%WOzkYlm{o&q4%v69&D><8?OUp{m;UlhBKMDP@AmMql->YsK)WDv6Je6wHRNBW=-j#4cVug|8pMF^h8A9o(e_DFg5I_=7sjKGbfn|;F0i7@g0YFve_-<1Ov&JzZmb}l z_R^wTuLZVEMdxQ$X28om2fw`Nvs95V4QUs)=+|wMHr1BReO(4ulT&cA%X^7ZJd%es-x=xVO6)Jnr$ze z_^^;iIIW7>M9ngw&Sn+-4?~-QQy5bIivs)_MdhaoTepeDV1{|YILCO}9}R5-;j2_W z5&N2zoQY`nn`i9w)~YVb54mlP7PmSmFwstL!n(#mTlJ~!-5C>oq1ymhwM;nwKk3a4 z&|D)CB}hbg!P+Gypd;Wvc&~WAi^~2}yb+)Ya{Aw6V*Re~*1VWc~um06{J;Gx8Y7MYI9YME?_kbY5F{57yP+gy_G77aCS zx+q}O_WFyzl5c64!3WckJ&K>ZlbPc}GErDsDVF9(z*`atq2ND=KMxVJiC>~bc6H_6 zrCB*Yl^C9icWT#)yzfsL!PSISOWAr^SWilivPf&}&>^N<+K*N`a6LvmDT(4U;Zohq zM38l8WSKhbi?nls2xa!Yc?x}LVFSz$TNKl$!^ zr1=AdHOJj470svThU2dkzo&Xrt zFNgr@NWCq(Hu2n*A>b%R!Rx0nsNzWJmP;7pXpqP<6_h2F)3ub%$W_Wu+1O993B(3< zQjqiplGL{pD@f)$t_2n>Y=&LC1}I!Yo_9Q#*d^uV>OxU52Km_uxa&y1=H9`wKiF3% z@XSC?c^f3@!2}8N;@OY2d#6=VTtMxWwnI^{r*4t@exR%e!Ia z4jDq9C)7rxhNfoY6ren-K9tXTY6BMV^}JHvWGD&rY75Ix1MH~>GRZpjezytjZLU7{ zgCqO@PR(!Ri?xYZ=c)Rv!0QXz`aMk&9!;GJ%_$WUi$_Y#$qbLf2W(W+-}_e(^3BL^ zb)C&`+QFN8XK#TGk135lpI_Ywk&%SdO=CK74#v!W=psZU(8547Io44n@UL;sA#hY- zo<+gq()k6H1Sh~*pflOe{eC9?f2_S{Sd+{1KO9BHjvX-wVo($il-}bx9s{C)0)n9{ zCDN-PHJ}J81PE2SN|oMw69ht6dgv%cI)>ho|K17cIp5#&^1*jrSLU9bot>TXnc0fH znTf6K_WPDGCdZ7G<++_gqWpR*n(4KAS@Vre@9N~O&sI-Pgkt0{`)muAZbD{Q{ifrmvMT>-73Zd^u2P(32UxAo=p7R}j0 zh#5l>w9DE?xz>eazI~iS!ZJ)xPoO@~r7%Q^ejnqyjf-nvDasI4YC8=5vJKCzv>w>q8M42{e(`M7w>kwWv& zoSOL{BO^#8w4C%0s+}kRnzO`*xdAz#^(G?;?s||99*C3B1S^yH zmn@_2MvGBp`4=NGw!X2|Pp8)};^C9@&PJpJZ&ywlIVLM5lkTJ|1He;YWH!wSkJX8x z7I)lKm+T;a_iW3$(gs~1wL>bvfCPelN=QZD|zG?5P#`j&s1jQ1n<@PByuzO4lE`xN@H7y zQFV8q@LA>#QY+a$JK`NKrSO76KliMyK{d@mXZQU2cg3CzMM^xo?d6Qb2gT)U)T^RTWg>HF z+Xj60PVtfZ{|966&;W6lCkr2NbiQiM_^l!5YJa&}-oVX;E>)`>kZ&o?aPuM1^W=4G z7uQQ4&(ZF=eL)}6*F$PQ%JT2FI^-ajM+m&Us5hKODM|1kdKnolRaeJ3>BI#|G7W@Q zeDvV9rZ7Oyd@=t9aGbN@sa&S<-ZyVjOPd6t8N}&14yq~hBy@->HQ5_&$c?V)g z?Sq33>Z5dwy++#-97q+Wxv;5rFHw=1nQRjUM-U3xUiS?DRyZ@;k7QM>n!YWVyZ-%q z>soqF7Dtsh|41q8^R=;Ps1L+2keJZXCwCax+x@z70Y z*evqEv`O1}=qetLH|UP11)iQaTGdxB!V9PTa47;pfoG#+g-C|LsI8HD=RT*B+`LS4 zmudMo^Hw+px)_Jtnk&@X?(&dr2@;auK9SiU=}&S?U|YtH78;H}FbrEB4obbfZ&pMP zXZ+pC(f0CvAXSVFB;Q0~!78C=wEN->exS%#kD7Q`s=0hZSE&vqg#&4GZK(~RK2Fwx z?j88b;?YuPsuTEjz0E8r{Rn-URC&Qf`ed7u;PLdR`)JDMmUu6=jU1zhv>xr(^>Qfi zb8BEOOO>`UAeg1iQL#qmMjobw>s`R{ra zs1EKGCjUL~pc_-692ykA?{u%0@|{2X2*`;HXhgsC3K(BIgzCd#LhFj3V@s?FDp$iuzoiYH>j z9K}ke-&LOx(Z#IHHO>$4JVk)-+&BEQCRhyS8NUqxCV&Dmo9?*DNHvtoj4xk`0=cFK z^{9Bp&QD{>m}IA+C+eU=5rY}=ZiOpRh01fd?j`Q+->=5eXzXYMeKS%QLnj=mYFkj} z=D&NvT~*lJT6nIpdmzma`sn<91-}b+BsQ0o;_`J32T3L1GnV~C_p?`JX2sUe8tfKhF@matrni^fl#H;E2=|or*KV6^!(~05*R|XQU5)i@2GbN zEIi=FkD%(~PXMv^?8o5UdZY*B=)tXrcN|Q0!6J&lB21u*z525Zk%0KQc}xK$jqa0W z|HJv}k0NT$r($`}@M^>Ypam0udgSml|JqHAKB7ufPC;Wa#cUUJfBsIhyavV*d8+JP z-oMq1TmXC#kWI^wM2kp`Uk7w<7R4u4s08>vyD!8CVwr;5Et8#)JLM#MjpwUPgdXA~ zNa_jKpew2J`c2V{35R+Cx z3kIeJ>9qVR_py{ksA*SJWDozCPf~OT^&rBU*-leQj6P=9>8)ezzJ8k6*0J~+5>Egv zia0?e90`xs>PAB;@Og7>b;h-d)UrH-Zjd6y08D3@ctPBjlGh)i1E5Tc?{@Oqbt6z!tW`ia&A zRY0m(3aMoa<%rQdNEO#A7FiD)^kQd-52SRvpY}UY6H3tUVOOs1g>5H36@nI1ch0^J28ts74g)&l={<(Vp#>scJ$^O2!0##e}7AH8ahl5>`Nc! zi?m5CO_I=$hf-T(DBIWi0=s1LU8rgU#eURk1oAYf5KCNS73o78xA?3wHN{}S-as2k z{cTXI_0Dgrz;Am2){9ytjQ!0sDbQ)?5l5P&_$;Q~rx_PaO-Mq&b!`b^S>N%**eB5a zmv=%VNqT}htul@orIQvlo*|-Tcbk)-R~gfD)&n zH{ij$BQq4X%X|u9r7owq*?)=krH#GG!fPU>7 z&Lt_k6Vye2%`TGMPCosv1cUqx$&Ew4KtYI4ycPnFAo&}h^b_=JkX4S8uG?Pr_(`zr zYyWe0fsXwpWQEG@O#}E3rs^A|(8cFdAU9qKZukLV#7nozd##Sg*S;)RpViu2W>(|l)_lmLvMv&0nDN+Imxy-odBR`x; z*i7V;`0C~OF*@m{624LzN-r7|HSGK;#b8F}mf2bFl8z@pWrsB4I0!VANo!%-vn*Lk zcmOTcD;v++v2&$Qo9MN<$33}xX+<#$&$x21M6V?`zn&JV(IuFS7?7}4yJ7F!`m^wM z>bzjx%t?!@&uPbCiH*jlAMmUp2zct)d;@hi;|&nuW8C`?6hjpkb6cqlsi|%wO0IAn zjVwPP8%)A>?1qUDdQG&RNSH^)!4=99nuGAq?c1bCXPIzU7JWW6D$J{5=Udn zYs32GT|mYG=aNafESi-n)85;biZaJhq_`$Us?RMyL#6OG%~tIa^FEntZz+F%+akeKymt z!=ltL92C6zS|s9R6v@%uW(2bq+ZIzttrlfp!)t#dHH`_@X{tw-VLJQ z_Ejtx9{fwP#7g;Q+Ow$Pzfzi=dZyRHX9tvw+ECm_xp>Mn70l_Q#>4D6&4rz~+VY{q z^6aNY*Bu$`2Qr9C9|Ex0d;o;UOo!q?qb$hOT%C(-=37R~6!b(M8c@0#BVs;wDDIP# zGbse%w|QTI4M|>cPS{RbtnUIK5WThX^j-6MY6x|=`<>HCW6unX>?Id?8@TeyoRl%a z{mBdNDa2P5%3F5cr5XUK34@*Cl03iTAy9yakih+1OQ`iH6C+dgDePv|oUuSQw>z-&fIg_T8Mr z%8TZweNm#xdq*WLL0iy^_*CEXghy54;r#Oz%JLo9+U|yY=N6z96-u0v=XN;R1e{>5 zf#UL)Ow4ssm1GvaH~vUVlC3&0Z;S!8v#XqNB4zIlL3p9Pyj8Lhts7+P9e_5RB4M5B zh74o>`4%=gaR4n>|MW=8_3Ky#&U9-;8YZ!@%tmg)c6e1=A;jpMpd&fz)B4<5$F=Dd zYKi8~MB)7Qp{VnW>X5Vq?Iut_N9Z*`@TvroLgxkIW`Tz|LMfeoAe1#>`~(0ao+O>G z^i=8s1tn@Mt`4|Kw^RF+i2n)jP zZ(!NaqC;>glq>?c*Zl(el45C@ojGlQ!1Jf{GQ$!MC8R!C@J_;fW?u?u8Ngc{k&Kg< zJskYv1;dfTZxuXCjmQn1l|ime(kFAM@;n4ufo=|`8QeY}2Ho2!)GxClyo?3T148aG z^#wlCvnQqcN=lSA=juRsa{3n`?+(je#8f$-Er7d?p0GMV^1i_}6CzRUb7?{jE$M!P3cLe|oce?_ziDUK?$QnGdZ$ zhG>H5@;nGxV7({Q-8iCzXEi;2K_eIxm|hf^KE|Md>4;r86AkoopR;8nf!^ofo#y5% z13($A;4Bq8U$Fc$5=I>9SxAkP|IW<*<-OkzH2XRb+Kq6<%BFA-Dnx9Fn+R?J~%oYu$Zpjo@wZC4KQKx zVe!I_<6`*&a@|6;GJx-f*h&dDIem^ zJp1XJsYNP1pUuG~m`HQ%d$kKpg3qGdwwS^<&Ycc0F4aLXu$CoR^>pLmR&oW%VO&~t zf|Un3*Ii*Xb_J?6_Gz@VZPIWGOK9r%3vW?3Xz_^IK@qk*K#hYSMOyE%xrmL$2Fz_z)_LbWP>E(<7M4l_25nmO9C13 zAOGJF4nA!%uPZF#Bk1tH`Y88SWfJmvrzm#fOqZ&Bj~7|>)h*Xd63FdsWa|tXYn|>c zaPxGUE`}}`aLLZw(R}7FtN&~P{V04$+aGInt9+A@tl~uhWZXMz=Yb+LrSZom$mV=i z_zPq{7Fq8ay`BDKn+(-%X;_QdYZToxt_Xp+Y0j5MF{I}k>?vmgyKKDTHQ|bPD9M#< z6_4yws}~nB(>|W6{r0l8WfGm#W=)z!0k94S6}w)lJ(-Zs2f*k2rFztIj-`>1)rk8m z>_Em+FE-gpN8vMF0#q#u#IfHZ({sbZr|uD-jeYWH$u3aUw+X#odxD6He?*S8~9dg!C$w2vm_k9ZIXLBekZvCfyI#rfc( zS6B)kN?iwVJ_8!$g5@IR)@j#B&Dal>2XY?Rm-L@dImFp02Xqj8uyO*t_7hMfuz9wf znH=>n9o^qNrvW}Ea(lv%ynSI921j-Dm(a|>E*>H$9Gx`&wb(s8x^>OEbaEi}%8x`N zR*)IW+0@8+C}okE+9@UI$^kl_u0oz-3kqhd^7il4x+h1XF_!5yXNas9rg?euY936K zd3G(v?(wuSTxEK0SNUjVz2Q)~(}Eoj`2KYIA~SY7J#gi2%jCAYRRJtJsDgz9WC__9 zpa$~*V)Xu2+c%o~1PbJ!hYt$84M|A0UENAo59VI>5_F2HErplG-^kQecWaEdt$m>tGnt{UZh~%!M!bvnUHKMN*;a2@$aKjg z;4=tGf&ahNuiEmz-*qD)*>`o{zuKkDWP9%PX*i20wH#-=kCG+yaqLo1n@`wyzZaKz zCi$>LME1DOB5%ghrO1A;VAtXad!A?-;)~_U1Um8s(jQ9YM34A`U@^|0Cyl$b1WQgC z!#pG32hL*^1<}v?1K-t!+*~Hoa@X6a2T+q#AxmF^sZZP^mWEd!9Em|SQPphvO@-i0 zPq%)jhPLQJZ)S@AczrEw&u{_>)q&S^yX0-MBrCYRL9j- zYie3$K_g3DWB&0&#*TejxtN0jTOff=yQ>yQ2&_hAn; zfctB21BAR%cvctn;j?G1W}t)Yb<)RnD2g?L^M1!~?F-CjXYCGstD)WTLTLqp3MN|& z4U$7Bt6#GLOuLH*UI#K0k$Wy^V(Vvz4@aVl>+NegwUr)@vfmnGEi=xn)9pXX>U#5W zcCj+QLV;sya+>x~MSsd5l)?ac)9f9FIA{!^X$&#g*5ws`_8iq@EVSn&6%jzUgw<0a zt9$kfz+-rcZ#bxKJuf9J=-PGesMG1=5o*2D-wJJsGI@a%$4jun^#$F?z+?o+Ia zo7MU;VQtC_?TBvHmZ#2nAOD+{JI-emU{m;whplt_4x+kYL7W<9zo@ds`)%}L3>3p;V-jh|f8 zw~l+QN|abw@BCQ1g2;xlK)*m=ReaLr^V7r6@`45QlJ;_BPzd0jtgz;i?C7T=O`bUm zQSa@jN6@{!gEz4ORm-arn^#Ty00Q^1iAz^FxTxdw# zPb}$v*d$R{U0XjjvF3LT-VrbruA;?Sd^v+RQu81$M`uN+y~n+d9=8Y5P%m!O!wLNC zc4F`4F35Q!eWhL!z+AYw17!HcNMtgucrOAOYk+Xn5|1qb=zQJb3g7rnA%N-B6!M=L zrDPqbaG+bz-O5akqE@}c4)tBs?=mp|**#;-sjCY_O#XGs01YSc_-Nx z>mBdlAk{k$C79Vt+cYUQEWDZpIW48E+*G951&PXgO^A!U($ z+n-pncZK{-dz;U!dWaTgkY)rnb~}w}teX%-Bn-#RmMp7m10l@7ea=o1z7KPC0Wwx# zJyp`{00_QUnz*sUV-<|L5kG0>oVyv-Sqs1^CnrjTY{dY`*6D95@Y=-&P~xPl07@(i zC!B>F4-Ob*g4KSFSvlIrWeDv}r*o+7)sbBToU~9)!8Z%P zSVwtv3U)zfvV8V=6;_P2kekp2NWywKB`bE6^e|OPSv2Rzp&IwqiCRx0!Bbidf>s;r zazMr$3oNOJI`3#!UX8^GZJha&x``Oq00PzdDf+T}B~q z_@-}7CZ|tkUBB1zW$im#9=BmhUrDglzIu!DQ zl;=;|?QH5Us<;YGKWDbJf^ubB%yAt3fCB*q%G>!yy6as^6`;UrO} zrjFvj7Yu#mJG=J1oCk^=H^W=4d$+AEa*F{`x^O~CVRY$Yc_xX)O; zh%76}MBMYEm>z$f;kwRkZc}(S}fR+4Z{{4lzhzFyAsVz&5g0g#9}2Q^-=J)@;pw+ zGd}kwW^va=c-_4pP! zJbVMRoz}F=s5D^4fl;kHJfL@Ya0^-l?I3^#n=VMEEm_LaI&a3&m8N}@;uj4-K{ygr zPN^vzYw($eBy1*>6M@0rB`v<*7Rll@{5l+h)0gZscbqSe~9B#69b9~>oQ zwj_5v1B5Zn+rvs0KLEb|UMnAfl767)L(xI1c)JR>8x&3tvS>kW(~pavMXFdS^BWL+ zi&{mb?3cWYf#Y(uo1WkIzVvpL<+=4dI=Jmg5lozh=}H_(?RtH=3HLrq;#=R5g3aZ?On zo{OzN#qkDAlG<8x$KeJdp-%#w||o zf!3^eqhm;RyQmJAF&``y%-;blJ$HzcPTLMNk+pMx4x=iKPQxEMxqwbrNv^fj{20JB z{9^hcy_HUvg*V}*tmwnQz!6B1=lf(C)VJl0eKD9Vwl_T;488e+C#PMtFEbhWYYB-S zkA^7yD9N&?Qt}}&A*9>P0mNeZ8YSNV222r^(id4@^bRFkh*E+wjin!f5|%<%l!p?4 zQURbe=VS)T`;gRs^6&Gm;N1&&;-%POU`C5z+)J5CkrgIxD@$J?gE4%1y8BtA%adp; zFR*GKC5MV4+5uiy+5oC9k_;)S^txjLi0PvheG~0(8TY&+2h%~QY$PPht|)bkn!(ValPATq=LQ6@@89k1PbQ|f%5iCnBNlVVP8~5JOqcFgC>WZ? zX{wqer62+a-m>*~$2tN@>B>1@!FHacC_&(M4k-3J3GmP$_$zmojRKxjCuh{B1-qxZ z>n(8e^MO>=M7W^z-1F6i{H;f@61ycbhd+hSpWi@e#dJ!|&lM!>tdG#ED`uomqHQ@9!-#aSw0Tikr5z2cQ` z(MFbx;?TPNp-I!=ak_lkZw*^fSV}e7Wp-%&&LNWi89TB6vG3cP_dxgl|EChsvsG8_h_u| z<)%TkiW1xEr1PzQQPu@~F{cZbx5@DY&At^kLQoa0;HKFybfXcb(J?{HXolv|Z2 z1Cg2CA3b<6HRz(U=Q_Gw5tl%E0@3I=UAD%*bqll+vRr_4bmbFGNz6DwuQ^lVhl$Z_ zuZf8}V4TEV6?hx=oV_Rq>+{}ROzpb&jhJVHV4pO|o*Wg{Ki>ohmU0GHhcV_EUc1oO z-M!oH=fkPS;p*j-(f%pbnjG1=_pSZv>E+MwC`nF)i!XWS+8QcL9y;1uK{UAM-wh0> ztNmq3i@`NRav^ArRPcpt`GzuynyVpua1tfpMCF=xlaczd1b~2H2fh`?A3<`<*L1Xf z-*Q$oEKf_wKf#Z3^`J#j)J^%VzYtL*J6-o(M2Yf3)a40ENA;_yqt6#OzpHBZGBqa@l9g2L5Bx=gtC0ZA}1

      V=(FDS`Z76N7> z7pP)+K}EQrf^Z|Cz;pDdMVdwYQ6gOZS=B^t`k5%!%-io{i8U?8cXNR~`lKcK;JnmuMd%ziIM(ww!Lcq; zxD-uArj=*QLajU6Dhrj(vM0i$6&oRDOlizmv^=`OLI!A&y0$usKJ(B&!#CxzkGSqX zQaBQ6ivGI%s8&UYO$gh@E+>3VvlCl(wFm7M z%3KCEy6sT)-F9K}!(=xRCFf`jc8Y_Zwo{<*gY@NBEppQ(H2z19I;ecrPpK|xi}ps| zaz4~^cA-2^(T9?$4sbN-81D03NY;83$(w||L@y#QBBMkBBT0f^6^jAJ<9@Pl){-D=XOEes}3&{1VDaxAY$hKI3uO$YJ?F zKKah7#-Q<}$X$LRePyn+gmceg zsfjCPS5%x)R(Ys2UJ{jHGV9HMhR0>vYBy%01%R*g#Yq-PZuwxJy1ynTB;UF`5rJz? zi>Kd~2*6ZISaLU@T;58nup|KEH>cGnw&urY5P*y5K@kbPYGBAawWEIPJ(*Ovz54 z$3T0dTNZ|!!y>pcoX=4jh(-_z&UloTq~=WY2Mp&rxS&tajNb?t$FM!~fSTzp8YU7- zzvGFbRVP!C?%N3hl|bAG3kmy}zFUJ^CFer&LPiGh_2vzLU>g$z-2T$6i&%ngJ^fklMSkKO` zFX)p^El-|lq|9Gx_*+);>Zi_J&x9G|vs+>d%PoVYA|=(s`3mD>%Y#o_nT$D~>kN*e z*KFa6DA^Fe$7OpeAKmO4i`iMpATvedg9Y^cTgS$-rgt#+Cx8iOLHJdzV6Z(k<8P!5 zq>uRi>BoUmKH+tgt@AnxneXqmEzwnJ2AmMd=0^^%rSodBDx5p3IfcCLwvjebSBxbu zGgKw-FL(BsGbt#^4B9h*j#(G#2+LQ04_AK%;IBI1##dD`c;DW*o)+(Ui*|xOfdcwk z0``22L2(CwIq|xX*Ty|Vw!nLe0Os@qz?>EU%*kbIsSCiIX6!%`q6#D-NDaJ{`@#U` zlmK8(yybKA7ac%%*c#Rlgoda%HcFRufM#)o*#=SSqJT{|A4^*OmQt&h%&Pr z6bzl~k-blDr+#|pHk@|nK*UXUlj+Skbq(#%(+XkdJI@JXI*097S_ZcQ!Y|6dPHDUds6S7K2Oh6-7g@+oy8o$9%zdXySh$-q-8=KYRMkF9lqfGL` zL1%9T?y_c|a!og2222XA8IOLOg(slST?Ik=C3xMnQHlvHBm8E4oZyLUzCOWp4)lVy zMrgQP7-MHrVVOat;MUdt(Z?TCvIv3sEhSBnmNiC`(}h30b@@M?)(x?^(UFG(e)rF= zb8TTa=*)Yc-?vDknS*tsDk4Gg1ZW;3_~8!sJ#DR))A!aiz$)k=xSZE@xN~o8opf{q z@D1pGqqdeQfGiR~X4TTUI`09(!M_W%=*1nju2EWg=yjo%TS58H zH#`MHmh8;icSYqC@;5({ivYZ*=wC!HZ5Z|oSr|q_3k`QPM zfjXl+z<9|a6hDvIHQi~x4abXc^xO|j3;<%TRfvP&i3($o4lrR~38wtmRdIRu@sLi5 zd)&7J;3a5_mHM^tzwbA!FIZSRR;meh)mlBhHTH>jse`p9?4BtDlnU2d{s?BQ8u311@~yTTxthx9tNFonB}hu$V^SI0AN%2zf%!+ zgif?#C1Blu89%`&-*N>YMa+zU4cYjxZQYmPnoX+i|5VlE0mIbB5BJ-TfdT z85{LLSk0-%V9}J|7SaBessHTrfAJ6*#A5x22R9?yzzjEdhjt%U|GhU6ppbws6!YH= zVz@+=f+_F(!(G9?S&t#gP7|#983Tb1zR$7}X!nf9Ozi-es5%3e=^7z9iAmUi-|H zv6hq|H=5C|SyY(Y`=4MvP!BOYI70D*`6UXDH4HDjGd zJU*|!PF86~@}`HDU`vgC%)k^)3Ecp-F6=qG-oS300W+{qu0gcZe$P*%=e3KPquIE^?!3?(U1r4lM{1Y|f z0nUHy#_wwWBzP zJ*tScGC^&okk-Rgy!(CZF(%5FjDxK;D`MqB+i?#dtXg+1xM#2O12phA+tpVMG#|PZ zJyQXu41sn^{^drLl!T#O13-ykJ9{^qKa{z)N`H^+E%H|Ccz}_{AI7siw)dfev z?zL$0RB8?jG%wxV{o(!af_8qX%gmOhQCK1Z|jdJ)5 z@*0=6A`@(CPH_wWbf%-K<5^l_0-c-E`2xq)9Myp|gG!4jv0m{>??3)0_&{y*^~npSy|{QsoI?zdUCJU=cES%FKK_xNw-M;rd!uW4 zo%F>-@4dIh=b)9a$gE=P#Pr%^-!K28W#a-wnM6Md@+hpalPQnMDm}9<`i_44pu^C) zDPuE-;r1p6amuta1GnBlFJ^$9u2;k{X}(gt1@*l70Wa%wKaW0VlyI1tz$6aDu^Fv2 zMf+>Q@{gkNWjxzSC1z#g1t-TN)Ed3>H^J^jN>P+ctl^;Z>~|i|ML7WHF1AKFxvN51 zk}c6KAAa^l*aOs5Dt&yo(Pb0o;gY5#3DM!GJ;7~lZa2N+<@u6u*~0ml8A-3VO`^q7 zpZed44f~xGOcDj#)j+e?ZCsKKN6RfjX}(KM9yC$l*Nv@DP|Wwj0v6rhdkp4GoB`wBn$PX?NLfEL@ZoN1sajz~ zGYH=#9Q_|eG7CP$n$xrRRzyTrAC|aVwPL3ztTxA&0dZtZ;|LTF34b{9$cH$}e9TFT zG0n!i9Y_ck_<;l3Kk)qd zJ=vSMYcZ5gI;DrhcMR;Veob~0*IKBw$EUKj`KW!Hw>~}4$0qmA*{n+cp4i=h<$O#f zo9AN`7Vr}f{7gZ84-OTFw}14f@hPM~h^==)0K^GKQKu(WLoaU8+uH}?`ex{`DMTV6 z@}&Pt9g4g{S&nwN2PW{W7E{)RC5g)WcLx3)AC1#UM;vC z0${J&+FbfziY1s)VDWyF!n8~01|_uJng})IyUM0VrNuXb3MoVSpPT4YDm4a<&iB8S zjmJFf?SaM!Dux0va_PJV5X{R5>Qaru&sBJh(sj852$zDfxf(eE;J7L?NtBg6uKJ)f zsow?2!#HWCC*Z1N;UCR0plS}@WdtOP^3|#fjfok!4eas7yN#%LPxgFHLn9ckAA`mj zAR8%d$59eeyV!(1f}4VU2zzv=e)b<*sP45Rn}Al`Ke8Dq=xhp(ywj&2YyMB2wH~5v zim4aky)_W$6tB?5;0QWazQ0yK%@0cYVGJ5f;0s!*Tf-#nR8651%^?&dFRY??4>ij? zN#nfjie&a5&V7vgcN0UuXrk6pfy`kzr(E~Nb2U`y=NKTOC-`mulCtP^AGxgWBmm|S zaWb!hriGc@@n)0|^ns|q$rJ(%W=_i)w>wgmc>KPD&L1Ua?kW<@;(t@@y@3iRK5YC9-6$I)SQ6LX6GYTrjDGHq+cTBd}!U`@>OQ!edIuPVQCVAERyZ@mR_kZa$ z*3$!o4c`uwmdIV!;Cy_AhABDRA-s0&MO{J&>%DT`gd_94b&E2)+>|yp)3ISR}j|` zO>Oan-Rw@5-n`1soOCK+|8H~ZW32i1e|fR*u32PN9lKLUZws|MsC!b8TI?m5C22`2 zGshMtk7Mf(b8zajSN`_eeyD|9`d?;@dft&<)>GCKuxomq*Uo^}o!kE+7??_~fciaP zFtt*LFVTEema@Cv{65}5g)h}Nv(NIi3V+-gQyN?^w7l8=t6aSj7cG5p@Z83auV5PP z_b)$GjMD)+g@$B15Tb$|11>K3lUtAOXK-4_x+{uZ{2hbbG4H2r3=n+Cr?audXES`Q zEqZlerU*CGzn9(HEinA-Iw{~muI32cc$370&qj)*&TkFj9HF$FqLQvCrrEp;aS5$| zcH}6{V6Zm)?&`Z|s@oP3^qJuHivT8`qc_SP-T`A;(ktDt8`|U_xg5>leXEV{qaiL} z;G#SG8by~@@SN|YUd0g~7iGkLb54wD&^gS#WH1WdkRQREpl$jy7(-QNwJUmRejc#!*5y@?bUXQNve#Zsg2|>m+9A zg=Gc74DcAwH<9@?24=CmZ_?F$7#+D>3pT<^n{psX`))qHQhB)Uk`jKiQp&1x9P*dJp2`we(~sL zH~rD`y+32jX4^pbc|erViI3Hkdz4nph^B())EfB5wH`lpRXtB%w&ZrJR%rcc=!W}*`Bq5+&RyU;MTu6Rv{>ow@Z;CZ zTQdGRDJWnRN}F@OXB|`9zi4CgDT@;&&A(8giT4+|H^kJYGy{E z!K?OR4`EZW2|Us?F5_sj)ed-d`c7$}@v6~D6LwoC@B2T(Zsnm0`zD;o;j8>}Zx$&u zBy-+<4x5DQW9^7Yeu_BH@0-fHnS=LJ+{6x28FMu*+L$pSFrDaGpRrzoCm4oC?iy#h zGZxo|N_*~Yh|oUee@Xm4m=##hp^ zL7KAbou+6*jv3H~7qmSy$#YrK_@i!46IOY6AE*zGmqOyzE}KrLtb@neS}2=?lnpEe zdf?+Oe<4=1 z4ar(^9RIW1n|Fmj;x?0eV}6-*Nqp=jaMI0>6(l91Iu z`JZq$?#$}G;->7ej1+6AMGUlX*V6W-wv#vV&%OjdDq0pIrE8tfwI7P}-D5i94A@r9 z#k-~DkzTUAvF{=Hd!_ZFg3GPsSs<#c>MdfX?A#a0(jZ3x{t8|c52krUu)Rqg6j3d= z3=1YQSw!JevTRP9j)2xNIMD^Xf`NO*j;A`3k>-^6r;||+21D(pT;Cex%hI$EJLtxo??ziA>gvbS95B&I3M8niSrm;VqYC93~@B@e5QYN5& z0vN1$ayCDi4I`7gd-P-|rFiab+)-A&9-yIhR^aS3+CN2zPS$e`{=$nC;rhyD*K&(I z@zGg%c-(jj{DV;I4NA8|nIYn_+%F_F7X>5;ul8@*3XUAMkJpy+S}O;ZbbS7=`13%T z-1#=qIe0XKDZ8|$)2O55iSZn~Li)4C8Rsg3!Z*{AZ&N^xIK=Z<%z9)Vp*I<1AaXDZ zKB`r{j>Ltv~#&5NY-+%10yz&#XUMEO7#pho2Giz(-4w zH3Oli+jQ46m-K-2zJJG3=WW4U`3tGi2}p{$Ft?I!;9YOm>nj^R{X zi8w|xFcD`HG2QJDZ-^M?{!Yn;W+%X45fxMgIwmz$iEp9k+g0~?F!0SlyImMp90RQ8 zJ67;)pL#s@Rk8yAx}{hSZrVkgY~0lS!#$vv;4IxDYUZvv+s^h47ljz>c6bkn{{svh zjd;o|mFd@!R>K+Nl=$K&kN+?&*$Qma$YBJs$rNFi_Uvct=r~dI@y7L@#WUFJc?K9Gylx9S_`K7dGK|N$x4oe#T%q!xkw!aJw)K~EqbSC+Zyz4{ zty?RB(5+>4w$K4yh;&^R%4&e9PoFgKv-DLl)dTNz{v>)FP2U=k-X{G3kmd)M?KbH| z8flBNOLS2b@!7YR{*cZG=k)uH?6*$mP-ZjZk(VkndtGC=RWsgwZRDe+5AVm;C`_O{ZIORq06Uje9 zn)wQZ-X+As;_usk?Euh_{-ovrp43KGYX&I#K{S#L+BhOOFq9Q-Uj2+uQIO zY(x8ZY(4EX=k`&Li{ZF9CBOHy7n2kr2f7tUgUzCWfDkh^N6isjs8+t7w=P*5V$A0n zi{d3sa`6fa1Rr1g@p{l; zpQ2BEQfotmPNcDs>7m>bfbCV%?3;Dj0yfv#hDlfYojpzIgCNnc_jQ~1`mBJ)Oy@;TA~=7BBo!+r&Pmn(}i}>o7eV{D@&hT%v3xAyqjS4 zqRL&y2vrHv^tgBrVYbagd$WQKcYXa=GI&_gBOh=6QCG6IM3?e84(IOmhJvQKN_@o| zrQpuBY8IYU?LD3SI>>07F@{G#H;$91`#<9D6|B15I;Z#Z)^jyDdZtW=xeG;>b7B>d zs}v#yNRZCeHY5at<#LcQwB^c7&4whgVW8J?wT)Eov8g1{tfbx33P_ssn7K2idOBY3 zOeJpN98Vb|z`K>=qmLtJ2j7VH5)?>;Y}QM@+@|ar4>x_)sq*vt+HbB5{5eQ|k(xKi zk3Q|AnYC}!6<0==s`GT9gv#uCzDwgUIl=T+1iob>L_UeIe0(+spNg67N7*tx9NsUk z6{lwNdHg3faL^fi;L#={c!&V}>9uL?Uo<^TYEW--a_iVjp9w z6S(F(y4H}0YmAV-Y>q%SAX=U=7cKS36y&Y)UZ9eZiIZgbdG>5_6v z-b$}#+j$A`W!!DN?y;uE(i{--03Isp+X&u)4VI1?6>%8M#ot`rW@hBuz`n(#Ls?CL znJ?SSuSXD03I=&z9ja`x}CWrUmbqH=@{ia&6;QSB)cy2k3^XJYw<|;0;-t7g9DYuvDE&@W{5bAQ!bgVMJT(LcJsS*7RV zD^geIXj0tY{%((r=&j~8gP)_7bcHc?LM=L#AzU-9xxaPNzXWH3RM_wv1Mk+Ry^A0H zV9JE_H9>4JERjq{ZriNgPX|}G#A~bo?Z5;sYoAYBYN#cB^I&`m#utC<4Z~a?ZV0lS zC_22O=Kh7aX{#t6y6}?K;o>Lp!P5EqP6I&CTcz&9?Hy)V$F0Hp$nfv1_o;%suDxN- z(6zp$yY^HUku!gD_NQbM|GW87*|*g*hP}iuwfcJ zSfe%m4O~V1Pd6__zY#joeTL#qGjDZ0Shs@C^a~Br@ZJxvgsnWyo<@Ck=T+^An-bYk zp}WuFg$oJK#+h<1@H1k`LeD3?=3G|#e;VgXh~@`detlW=>u=UWHOrr;bMS71`r$F9 z*UoN4rTz$=xUwmFW?>#Y)5-e<`H8v$ov`IWwzMU60_j@~xkhL+zi!lye_PN?=XccY zHe8gl$;*f(u{>YQd>f%6qk@zG-iUZ~U}ZyTIrP45$?JJ(bT>j7exT$GC4;sW(H<_3Y2CJ^z*(qM3o4*1B$lXnX7YLLa=t?(-UJMDxn- z&y*`@ObPps#^APQOv&0@<4pIa)%3NB{-Wyyw%Q%(n9pvGh(3A?E~@+-z81fEH7p6| zR6a{KCgnqBjQ0nsd#ck~c{-a5IB*vCH($~WZH*x%^}AYm2sf+g^qfTi#Xz)0XE!6~ zS}P8|BkW5L;cJV6V0$H-KX@VS8T#(DqAsIrVjk;#$al(gelBhb{9Sra{P{5{(#Y4p z;Rlr8V4Y}O??0WYyaF9Xlh8aBZbrd(i4W_`ZEn%;sAAn9sDUvjy?vNr&6j`TIgA|o5WGiJIijZ}*pfEJn7E4mezJ$p-B{Cvw_7Dcy8S5}+ zzR&wTRG&ND&+qr~w>i%_=Q-y*=e(YCp0~_YEok=wf8Sp}e>Cjv7d?#|YithaAK0L8`5#kS6!~9=y^cH>i(y(6d7pel|v^ z>$R&rGoU3vuh+1#xhLI!RS>s#(DMpc?!Dr#>r@-A=2-5U?1-~jp$Wb3$#k1XkuT9`4Q+Wxk9Qd#oW9^f1Dj zckJ^IWgTMQRbV@SAkqbdhazBVmsLIT3mmlbo2y@CrFSF|DIK%0BOoz&v`+ORe%)1Da~faTtqA^~*dc zPyN(Wz*`kfms;j0$d|5q6)-R_&wHpK*f(uugu^s_$(+IauGT9y!!ly;(Q|s^27uG{xeP(0Rd2RKY zxhsLWiquPfjt+F2oS?ZgYrPjQ|2z?Udi^=<#M()A7;^MJu_El#e0N+=x5!8W$XWha z*DC-cHS0B{{XB7 z*1@bXj9FO&RVJm?&M^+KhCA0HU*g%aBI^2bQ~^xy+slAhrr+h6RE0I1itw1$e+Jug zmF!P@W(ON;W?PRA2FQZP8>*M#Erv{Keg5|JX^|19Cxw8)eF50-Fu`{v0WVe@*{n*t z(Kp;hmZoE!;c%j5y@GiJ|TvjNhYwBiL^hH5PWnyw52GuW$~4L3IXds;QV>k;AU$aNEUZY)vCZUFQnoQdiRrGh-sO+ zHdFOBN%dGE)?b?63l*l&VP%En68Bzs*X-DT73A$Zu35K}_7a@0^YbddPw3+is5}q$ z1h=624@@kFaKYFn<=!+dt(_w1Vi_}0zwH{rX2~bzhq#e3GNJoHf+VJIg2s>=#=7t2 z8hUv(?-~Qx)59~gyD*^RBWhdw(tVwN+W-QQ*Pk?6Bj2s^LE}h`_*#4FR`!*sTna&? z69LfP=Hh{LLR_OI=X$gilmH%h zz}5*Re3C3GSvyYI%efjLU40ZcbaUGR^RihvQyl}b@N=zf*AI*heYw9N^1<^8lAu`L zX)w6tsMd33MERSEz(3~9DnSFry^XUXMI{nsE+EuTw5yq|o6^#N84!P79J}j_sc)@p zo>LW9CtzTy?*U)y{WY$%->bDDik3<*ldmy@Q`X#g5P_sviMLlq8(sUW{O7_(H`#c>TfVu5+8yGXEGv7!~%bPiV?@ z2c&VPTz%JxI$0kPmoRYOYjXVWpDG0QHjs!D6ayrlEC@pnAh59sH^-jGZOM8LETgDD zX`)89JHQJffmCLa_}g=MT>HBa9DP9yc@55i(1$Xd7thf?KueuU?Rlq@N{*%=ZDJvyM?=EbGd|PSAxQ(|i_?RMr^Wr& zlQoCC1Na~g`c^q`>x!)V4FLn1Hj_Y@^+eJuZi6tOg_8ctNloeQfU#|WfXa#%9x*b- zUO+{2&sw9ZU({H#V0i!%fi1BaTE#>6NPg85neJA)m{ySM9jcyP&_%Jev6FiP(rLSo zR8&`t?)@cp=7RGNG6Z2x#yJ@9FmoO=Z=xNxtpPdHTScX=;pwzi?kvN<6bDtd8&l?c9 zF#*IV$PRMB#s}CO*c3C<=ZZu`>UJr0w{8{JiXe=8iq5H|My{!)F>Ue6z!tfazv_T; z7-OM(kOyTK3kkx_@L>vaYRp&HEaAw_oGh_Rv62p*RQ}FQSt2eI@$)WBNh+Vdh?bFJ z<{5CzD!`C^T*SRE6xE~u802OIG3m&S;dSj^9kI{JlDiZu<4_OiuxE+njmOVxPKR|b zMcgPMP;MlBo!a`VP^4TCZz`kJq=1)PcbU?HzK{UktZL{oxGJ7&h(;Kd^;b^sh?$7T zY)!e`&F?;O1|$I8rqnvL{c45*+c-e9qqR>32!??YlV>X1lgG*yR^;xS~?RL|&a z+~|d70PqSK=y$4rGQFgf7iqqmulkvS+O6E9I2p%ynQZynOP>YkZZyi;C83I-%e718;AmKV<(d|B z9@#Cay=3kW;sWNQ&4!w{vXA13@{SKcO1Y^`HewUwoylz(&bN;i)-xwiALq*Ir|1}| zsv?Xk`qgK5#5lzIDiv&(@ZUw>+kObFkP;CRmW%IyX|Ty<1U{I2(v~?6Yx%#NpqS~G-(faAVFxa01=je{3X^{Y`Z<*E{xrtsKjQYngUs+-(>a&PC7p95r~V* z!5dY`wUZJaoA${q1=}#lfP2@xxbeRp`q!8q8c@-Y#oCIAiD(Bs$5l6@UnT#;!5!Ko z(Dep*M9U7wZa9nI6EU}7ljbR!*&K*jm$Lp1yv02migueXSSFU$f!iXJw=;*PYxqwm zy2s@AZxV_+dNXvHrzOT_L~CPh-CK&UsLHHVYy{Yacu6V22a3CZ5cg_TfetCfC+-1u4}3NM@VLjFT)i^xizDTEcbe`Rz+2G&)ihX) zrmd}skehzw=@d8MGf7HXr@oYja zuM2g{^9L3bx?m{bBCAU3g0lF`U$D}H^fZ)->#kj~+xt_=UT)j`fa7^XNv(V{@ivlrJI)pk; zICS8v++cnO$)u;ZCNA&mIdG$9F)Mk2pSMsw2memD92E`c>h~MEE~n`_t!sAAN;8`^ z1J)hto7NiU-}Mx@-M}{QLR3a0y2SIdAt>3OoJX+R${pu6xS-~jF+H4vXR9qk#ld9$ zu8+Nv#(nb_GJb%}LqO)?3K?(@p{3ih+dk$vf}Q7PHsC}K3+`mslnT_tN~&%#u}EwB zmBK=)-sne_iO=d_1O6s<#_?Dq3(LZmB*f#s#Lpf8&|8->Mo{qPCy10ANIKVe@1q}w znvmGuof$jdY-pfwmd4YuL675FJ@uowUAdm(Oji!1oym@6xf=+#9L?x9bY68jd3Y>P zpd`a5L~}R#6VlRtCr0qy`l%3Gn5_Y;iR@;P!ar<_TlFMW&Kz|rk#iWSGQWpCw#yo6 z$=^d*n!bavh#ox}f;+kEZu3l5+ zt|)LA*KadkXd0}zCq0PB&g52@tn-*|MAs;mI?N9OC?ice1l%q9%ep@Zj+OH?T@xp< z13ga0_sCwB1B~766@Xq4Vq*(xbps0W~7tQOApBF!lkQ@7( z*y6AQgA~vL0KviC8V=N@nnz0~D5@zr zcnMRPL|kg@#IrlVT;-H-jU@~Pq6Z(ipI8DB<=j5{A*hLu?U?D<%jUPuw%~tjkZXT# zuQbox_jFNgpCfI#9~r?&v#V2(Hk+Z}Y|ilnInhrUi5nG5^|gh1f2 zn|lRDA@SLAtTOWaTuj0Ju1W&mw)&R^i?m1A2RtpsN8@d0mwhY%AbR6ocQfC{T>O$m zBl=?=p6D6SCrq4Axm!&{-kXdSC8~}X}#~h|WryBH^oa=AI)sP{sORldEzW@D# zv6naGGC(exAySzS$W8u=ae=?6)$yX7}-b2WRp3OyQ)k^Ug0kF z)}b3t>`cP#CV=COEv5`bhGW#x=nH$mo8bE%bL>pQ`y&%yJBP_AOz z(KVIGMo{%{sCBX`Y2w*cT;m^UUs{vTWqf2#E(f1e2ifMB5D-~^D#RTY`BN^z$hOJ! zcCLw?=%c;+qUE|DZ#42wn_LF&ncZ@}WWdP$g$%_CVc?Z~{O(ZUzX)yx!2EiM;5)V{ zEf1LBhX0LV)eWo9py7kvja&c%vi4?q^?7II!`<~A1LtoxwGP&yFMKxLbs%JSK@5<5 zZ5e73mVAGGmwlQpmKmM>nA>be%`Kg0Sb^;Djm;$|j79g>tg56%KfG}>weF~@!&B9I z-79e_2=yZva4q=V1)TSrxEQUl$(xya6z1wJGY=o$%cZd4^|x&3W+eE!`iU~hZOEcU zC)C!t#&B$Q9GPW!Wg`oGqg{jOd$=^9ttkfQ6dSS}MTHpj34ChsAocZsZcnMg2ks;3 zZe}~Fa;k{OZZ5@|Qcib(s}mOji93xC)+m$`HmF!5`|$~`;WC_NMGJ#q`VO=w96z5% zGHmZi%N@>u6Nl=pTs6@X)xKgxy#=~}SdsLl^Gn$h%U7fFaf-zWq5{T$ckOOht2quB zjLu8~3~HBQ;UtzVigQWdTI|LD%AvCX)tNW|l`zb<>5U&M!q*dcMPfi>1n{-Uit`3@2C>S zBL4q3XB{7&BFzzP^L1#GdotOFLN*caf}(3p!+pjDn40Dpgu(y5vA*587oozDIJ@}W zaB|?N7lK+P03i6Z(mnL!7y#0Gy~O=_pNmlp(~Ev2nSJtqleUVTc(rF$+N5uvZ}`ek zqOg&weiK|Dp=+?gQBmN&ISUT3DSr#UhZp)U3yIrPBy&k)VR=I$R9YKlgpB{`5DbE7 zH-FF4y&F0BG0Y3aYztE$F6Vv59hkkE(>wDs{>w_(OKm^o-s{e|zACQTw;-aJ|03;lh_fq0x^K`w9tY8loP7Vgr2Dqh;R z!vC>vcZ}ky;$iEza1Noi5oy1WI#7GLDfK^N>PbH&j5s^*i5LK6z5Az^c#=sYvAEL)1#YST zeYA2bxTN61RUNnV09-Q9Uhk&JEhj6aK@33i7 zUs(;_@&(4Or2sJ*+}gEY*ct;kT$W2iC(wGN&EzFKgbu%Hk#QIiyXXvv0-)yK7 zQe;9!|JGWQ|He7-xi%cLhGTQ_j9^YsVL}_0`D{UgiD)@l*%1n&0TlmlMR!0|W>XMp99bJ9Q@xTsBYWuigsz^un0oP66hm<7nu7#f|=h_aut~ zZcLeq!@nG{aUc|YF=ZcA_~*HXGcyx~QwiM(BXhy6;_}=@AX!M&1Yl-#9^^rZTN&JN zzLxoX&Lu^EIReA7=mLHH>m4y0pz}vB@rU`mxzC7%jq#%9fB6er)2gPyl@rMt((-lj zsczN-y(q7^tc+W5YKJHE~6AP$uf%i%${%{EP z7n-_azkP*)`GxQW6n1iA|BX-UN9!P$ep|GVAq?wl|5(#!!%j`m--1X~eBbmOs%PM| zQe)|DC~EmBvHK9CPr8)8o5=00nx2{`_CUZb@VgFl_GQce2;f`kv+zyY)|apzMFhs~ z%^jE<_Jv@b73;@ZPgE^P?NU6>Zy;4Mso-dUaZ{%)q^!m~C2J&OmY7gh$)Cmrg+8CS zKt?RAt4B<$gJ{xzL-RGxGw#a5+5BgrGdCDVMwB-*UDKdP!PIkJbKzBi)DJEvkJI$Q zcVb|y0(Lg4l`vT=OJ8F5nNy7s=07gB&=I34}FkWFpXtQg>)}}cu)~Xp9(=02t1OJBE)de zPldi=+A9A)L1)x{oDJa*7(3vz;d^?K3Bnb$s_^OW&AYU0?bLchQs_Y+y;U4EJnP^U z#7wD(xDr=}VvhjfxPS?;B&o7yl>vDy(sacX3QBhv2maWs{W}<^;Ba22?^Y}`4q6$& zaRp{ZopW1vE=0sxFvO(wJq9qHhJ@0xsX7nW096dx5+kVX@~u+^jo@{(LW)LvV8x-{ z1Li3PAP;9IL5=@GkS>!w;i-Dbw#-X$muwfe7q2Rs0Q$e0*qokJF&VI@zMu~?qDm(V1V7E^Av$DQoej`wBLgxEloy>{6PV9XBKw! zU8!3j5GpEA@{8ga^6>DT=nB`f3*NkYSyGmpoQxxIg>+pzMqZtU)m8i^5`xv2*4*EoiJrEP)E=$d^f!01jRj23Ai@(Xa6$&*I=Jc&VD|9t|n z6$CJ{VfF0SZ?MNH1NDGNwIM@!ZxC&JJz8&lK)(a_QtL+zo-NmGH!2mk^qUXn$Yl3w zHgyKi^>i+ucSg9)hnQmRkP~#P6x>0#C>hG1d4>1}ea!_&UO^U#W_B>VV2RGXe$lzh z3piR#-Q(>h#sHZKE!4#n-K3UviyPmnsFE&Sj&io%w)F9#v0n~~REQdGLMul;Y**{b zB@1zt7<_#2?;MEjN*Q(pHk=}zUqvyA8PnbLs(|yLTc0=j;;o_OmfdOV30)>7_6mGv zJ$$u|=-@3#kA6JpK@MR^5@aYd$sb5^9}qJ!+$`Gid%)<0wbiO`G6EaZ78{LV6R*U# zDSz;&Zv&r7zk-doZdD1n7sAOBD zD+R!j6!8#G>}{efMLt^>@9^7or+SHNV4cQ_WX!_OxIR}%HKQbKdRA$US^pDC3}%i2XwdBa%kCF`9At>{PwCQJh$2Grid?p-&o zUE4MFV{7Lh#Vrdk7P~K;K)Bt6inK@j=_zn;__zPLysFXrP?H-Y#ttoM>FYJR-iB2= zKc1*cDY|rTZt3E-^>YE63U%%`-AzI`b^5yw-UBUGG1xszL&T)wZgfeUpc{g!cgp+A zJgxfXj7H)~mRRygl-|KyHby3UG6Fyfpn*C>KYRPwd{*DXPsk6!doRyk5ZHBn7EsR- z17NjL??S6Q_?%iu47oAganSg22dM&F!sMrKGY8>|Jfnhe17kuf6&vWja)s03ca|87 zDbYa!o;xXChH^DRzhn=*!fE*r+vF~b03dQ+gkn9iKtQ2luRS!X=qm&bjz;EWISR=n zq+d7asXhzqe{(W&|Asc~8SbFxOBrY!v?rG#u>`cywzBOagXR%TW59iNJQfCS;o9 zJqbli10xdieC{Vhu1jjWDfN$Q-)9L#a%ETzI8){M(sjPPZ-&kNEplqtB(pZ$UZvk=#oYw2yMrQx=zV(bh@ zu)AVqi1$pw1eUQB!qd69QBXA{Shs7OUOy3)Mkrb>5PlTDY*G&x=}g7-pF4Z#JA4HB zw-F1#8MjHbWv*`fhA8`#6JJfE=cBBVA>Oxg@yK?#dzYQyY};(=1zuoMQt%#(qm`Zy z5vG1X(LQu9;JS}~K?kdyEjYT^Ps#7;5Mwa~G8Y2}4`E#@i+^^x4g>*00sn!PTeITo zz>nZzUJL4sDvG?(>n2QPRIq>DytTl#Q5<{El_n8k-8v#0v{r}NL$n9OFFKCDCwzsMQ zaZ?Xru)vf|M1~TU01vFDv7pPU+04)GIjCJojPs_V+4EDnttxaj|0K0S?Ofe}s zj)+UleCrH-gYz_a3iAE(g?4JAx%Ft&sDg z@1xe1Jay;^qU7LJ*H7o@e?jvvPnKLF6T}adRTS6XN=`63O#4e$tqc9v;>AjW6ee-Ln?we7 zdfyeXLK1G;ArUWselVr_e97P&y>PfW(_+YF z91Ns=_tyu>qoOM!pBt@5#(NR2vV^>gXKC|rOV{;XW6qxqy+F0RQa6Iejvw{1hv`Sr z9K2AY;`{Liv~p7lZnQ)=VFi%;nTOx$C0>9~E*<0LL4XQ$L@xFS+_VP319Qj6bCkSWB z#kk!$9IWho>LnV%?7YlvIbu62*PpO?DCU|;@pZ{SCbS0tD2cJY(~GjX%TL=u%Qd^~ z;?O4@f4qwSu2pmar1P>r()nf{#%8!&J(ygaZje%YKmen|DLwXkC;(w_sA3YKv)2+q z{oG<|-x;;-eI+5b>wT#tWn55&H7(M<554&h{`9_>w4^o-hKIPEu;lcZEq#Abe)S5F zm@^NWI&F{@x%lZ1q?jU0;UG^#{a{w_(G;Yozz-E%)bKEVqZg;G+|C}OKH9W#z0-HW zrK|0~*46fJ!~h=f!N{~`M!DwW^rd(lttdv74hG2=^=pGCmJ_hozx1htKr67^h+WhI z;Ia{hd`~jFXwuEI<-Tx70*j48cwrtS%DWRx8+~UuaqfVu@XZ6fXL>p`=)EOBZ}>Dk z3fjg^-b~ML-IB|Vc9El2u-ki;l}=~|4ma&@6N^(mne0FQO|`L<6iON#GD0i1@w4g< zjEdI4x{IuXv8RY1y4zk-JT;M9B@=TTx=v&+=2Rj{*#JgbaVf200uv;H_vD8O)M;+? z_zPvDjNMZgJw#T5`1sTt8j+ELRbdAM%Mi5m?L{xq1vV+#|2L{Y2Dbt6hymkM7mwzg z8f{1ky7dafn&~I*VD!T_Wzo#SIw&O^!No5zJqez)8@aG42L5OUl*uBt%D zHvn%`^t(gG-8a9wf@nM1ecV=ITzOnLSfTiG4`SY^qN#&4)?H3qIQTVY5OldL6jwPs zkaQd@Q2!nIt7X`2F!{FaKgpM-MCmvc|J8VFVA=KarLo6^Tt$1&C(}ntyaojUj={;z z`v?FQZEq{)Q1!fqWjgBQLRRw>n(8ix%=4ItYrhIKIO=-Bl0q5w56u_9%X{9~FLkcE z!~L**k?5jGm&wkHe%P;be9OhO#&tx6!6xuJ!qd0+`b$YUtg(K!42y(WR{t8o0Z)&z z$5hgrMBVe}-diC<+KGHk27N=I;x+w@N~d;$(fv_}yycKLl8!5o%P)|`+ZPKGS0OI< z+%2T+B{K_VH@DfC3+E9Au4&^u?GHHPN=9#}Nxbr=x08}NLO8PN#R5a(OJTkSg33pht0 zo_l(>X+FCJS{N1sj1t5^8D7Z`GCH*Gqa)))JJ4+*_`s7Ic>_c4ULL*m#lBoEX#QELYYR0z z-OJ5%L?Hnmg4HK4F&uf6ylL3Dj}MoCOv<@oC-qcA1w<&g#AskaI^B|Xba)(N+yNySL|p&cP-b0 z)QY0oPEu9i1H!f1imDG7dw`DV2D^lTItKizG2fx&96@uSQFZD!r@ zYV?luNy=S2ZMfFYK*P_JH!O8Nu zoA$XPuw?maDBwwbckyp{T0dpl2C4tuZrsb0Q7}(YfTzgk4z^65VlIwjN`!Ei%Qq^g z+fX~IS}>L-Ks_L}-5ccDj<)y38@XB3fOjMW>YLG#tyB#p^tf)ttErAYSNfF1?%7+R zAgxEyy5>vfX9`*>k)q?QRic>+jYk$@L(V!=t>18_%vs!KQ+UuVo$Tp0nQVq)waB!Z%2=`>2OveV7;H%l1NT$xMgoRX-A z$Ht5j6}`OFy;_bw8kW}A2^9E{Hyj3VnI)mW(mLo~2M)Atc=K_&<=_`IeP+;&yyV=1 zK@#W{)>sFN@;5>e(HQd56Rm|Ef1h`>jV(FEQl(6urpdy+agu5t=ilgsfrO#;SpU#S zNVAvk`>u-jIxTm(n|if4^67b#Jf z+<+mAaFEFu@>L8bk;SM%8=k}sNPTAa<{n;4+n$)EIXd#a$#f3qn}J>IB8=#@+?D8l zD=-le{o=Zvg1%giJNJB+#e0E?*_x_PTDrH=q70u`oNypo5IYz^xs8(9nYe=t(*Xj$ zGOiN94K8yRSaQl|7is!%k6fL;$Ei2x{GF_F#wssqywSP1Jm!BvD89YZEV=Q0l*8AM z`O}&gj^@Rr>^3YeSh|=!;5uKBE_qN+z0>lAy`paywvwKdiu05!g|R2boMlDh+o|yo z7ZbO6l(Lt;8safED-~CL4U1%rRl)ZeGB9E&Z=+?U_uzVPa9);&-KNN3zx(}iz0F1d zgyP%Wym`RBWJx$_e5xzsLdh-wX|K@p@F5!doamC`Vh;p0R-!~8 zB)+c^)eeGb7k3l-m6wz)Qrj&*a5Xmn$PU;l%CU)XECF4D(i+>3awm*&A8T$p?JRfs z)R|kdkDLg2E#X!ZHT%voFi#7*xlr~YU^Rb!9s%re)N|Zd4nEM|HTc#;zgs4owkA}D zuO2;cp5n=JgUhD#fME#B*=~*8X!;oJ&H>JlEdyW*6h>1*AE1n^Ph)3pKG6r}ZMm3dO1wcEE@e@4`gA>iu z`_@<1@=HT%i0aF)%PV_DA-T>XRq>N7(gUoc>;m;t*FA=ay9I<@F zSrp?g6yTSLj3ovwjxn96`$E!@_5R@*VZp%@iV4rod5DBb<_$@;w{8IG$P(TpLz2?C z0lex!H%2t5$Pws+wIhY?ultM!Sd*u7T&3DhKQ&3fZ9d;+ zlG%M+chFPeuA6%epTgY(ykj+}gv{R|>-kJXT173Io1>f-j!ISddhY8X@H50aQ~j zKM;W;I5xJtoR&Sdvx2H4W$~xem4$<7Ihvp+Ud@wu za$Yj~vZR*BDNsd)Oje!pmf%(?n!tUW4xeZk3pID*4Jq+9P9_Dj+MsqB1D@7kQ*1!* zC;_kO9!#BZ-#lP7M35$h`c2xG^iL*mm>mSj&gRoOY`cG7X#Lr*Dk_E$Fv zpjxz)yfhX*^Tqe7lUSR7d<=TA&?o8G*v4}#_uBdjfr9BFimzbt`(LAD1)v{PqQwGh zz9c?S^|FK52krvHimxH^1<>Q81+rS*oZeV;LQlC}}yUn}8#E2F$aPtY4t9{1q z^g6V+2nh+^p*$4inLh<>-HtGAmQ%~DU_k(e^L%8-)T<58p9SDd4t%Nq3pgVz&A8%d zC0w01Tyxv5t z7X**FV{-AnZWgR!-ChuYH}Kn&cIijCC!YKq=K;`_f8M2@!e^a{{@^ab?M6E(cgwGh zTWp}E^gI-g+0tJX-!@2j&JOo+4>REwkDDzK#BIBj#CD4)2la5pcWQzjUg&|eU#?>x zs?)UK(j5%NuBkR;Kl^h$WOa_9?)#yj)Fnkft$Qvk>xVvI+-9zyQ0#4x68Fpcm0*rz zeoHZrp`st&S)j7M&$H-q_xEzkbKo%+P-V&f==wNzdI|;a$2;yE;eTvT?Yo`Z6~D)_ z6aYP7YHCozu6#~m#>8rBC%V~7q>#gIP&yZHc~gP04izN!o4XaC)LyJ3yeW;gwI`Z4 zXn^gV6FFc305e$&b5WOX@$)AFO$4ghRTgu$q51jVz2%@3fGft@e?t*$`Q;26Lk zXf!rZt5;*y0)G}ar^*<6V4{PKFj0uTLrnHY0ej^E(#K*<;_4DwycSzf-Xa^3aXW&1 z6U5k&95IY+Rvt(0GYnwhMe|iL$uMOIj0Ci6ym$zi(qwL0D^4six#Z-6YUoxj<)d1C z0Tofj+z+6aHuI-d5fxb1$yWJVLPaOHz%*&HBm69jnS)kI)Okpm@2qqDFWA1+OWIHX zHOT-tl)wG2=?RB&vt5KmW#jkjHZMoZ_~F6)ng@RyC0~KCl6)6b_>@~QWj{Lk{xu{1AfiXt_+tRM2`MhxWVEpv0vYU)J%oEH@hR zqrGiKgU+;~DQPSv!n;qsSa=-M=VipaB%FM#^aWk(r0R|OSK1chuPsk%&PplA4%cva zFGvt)A7%MsH6JJStB?saTH_S_Steq5WMYyA|dAR6|nHleNc~7H9Y*=h|bpb zRT>lQu9RSH( zr#U&^_{N|$;;~|g;^A+>wz~T*5pvY5%!jLn0d_Uy2XF&$Ta*KAXD8YbkF2>rlc5d@ zxYtW=nop@ep!krzAeVb)0*2f{>@G%8q!#SEQP8lkj6J>JX>LJHzxAe(_tj_Q$X{Pe z^!jt~wycI(0*7&OYb?3v4C2A z8)QdIa`bQQVLE`(1}ihvR?8G!A$=aSaFEKO8vkWN>nt^>A zp$aAtP=9^`Z%3Gun|(MoFAbfT1^M{dp?kS_KGqUc97$K*2C0tp>N)QSgkA8p4_ti< zu4qoYLYZ$9anX=yCtYtUybK;g9`X_O^CFz&11%(R>o69oti~w%fME?^(p^aU`y*VB z`TM!?rUQ{*bCa&m9$#CBzE+nl8rithsYF7v8z9Mj&v0kVqHgpMgw~O+22XFcliSDjh$XBDhz3CF& zW3dck(X|;a2WwVdH3Aq}WQOI0x4Te&&04LAU6F4OS-(#Aq5iSBt82sZHuw6!uJ!pM zTs$I2c?0K4U9?T^kMo|3RLg&Q>h$(gPb~1^I;qb$C##hz+}$XizpZZL#O5(Yo-^P7 zK}t(e%82ty!o6-&$1+pwKjQ8yZjf^2wUmt&+-kQn5 z75Vv01Ob0#iLiL~mSy9F&g{|XhY_Wuu)yAAUY<@5p@tTl{%q~{HC9M#V=V;r%{;jO z-(3jCP1!Q_sapFWWj!2!;i=YkBBlaS_n7QGUm8=nJbtL~ka>Ugc??1>9&1~E&sApm zn(hOS5r2HnKMLHVK{BDuP$Q1H2I%T$TZ&|O!Up?5^OJwL*cZ2=RTgLX?ze@p2U-TV zx05=S-3H%}bOg8UD|$0DpR((3WPVu81{X9!eFVZ5GGBsw5ueT~>`5rF`WzJQSNXJK zSh35e#^Ou*zVS1gm$qgKb2ZmmM0q<~=pm>zcUx*ZNZ+_06~5cSFuAhyPUFalab7O8 z<3SewJcSs?;ai>Fm~f5*Mz5!Dt(6bU@_71II%4!=yN8rH`&lrRP&-Wmqmjbqt7hltdQ$PE0JX6WQLu+5^ zbL(*miBq58LO0FocAIpsjCAEjn|KBC(8NngyMpgry_$F@rXJk@H3duAS%cmhpLCiq zyuW`t{iL^Vbb4U^g@vVzlZf61`fV*HDRLgPlvlm0=oi{s&t_3@p5#4lYu!oDun3O+qiK$ZOX}7 zd$3!FpZ)y`Bb`)^UVZO5Wq?XtiGmdVb{~Tmt~m6hh}&&aj)-)3EPTO~(pQD+y{Kev z(FhPBBk=hyG-@836$cq>|OhIm%`eea}wFo z`+?+Pnu{+s2PSnOMciVOA^|jzNp^62l?$^lqn%|wOTbUJpcmEsp0L`NIz_+^THCCI zYJJY=#(8R&->kQjR9f+vdS%UvxPUa9VqDOrm-99Bb<-)PbxTL^9v8DYxJ*hTEm&+d zi4uo_X}wxC4R_xQx1{FtfN6wzi^y27#aNI<(u#1~(Nf1*FgNmZT$r)wWMi1e{?3Qhy2{HJ3V$0gke7S;ww2 zvYq6kYv_cK8#dbboA|^Q8OF$g5Bh{?IF!uYYE%i&5_VaYL3-E$Sy7^zl8*ChCs8uC zqsLkI^P(YL8ir1`%fot@o_a;tf2DQ|SVO*SRvqxwsYheuhxIzpH3oalC(J4pB615# zn>o{}G}kF4;9fX;fwUa-5(FDV{$>XJRSA;mTrV8Od#55tue%3J&CLL*o_KI&Bnt;A z&Xo^x*w`W+T!)&gxjCozMHU$tY&_^KR{xqs$(c`R{sIuaop6BLJ9TTL>(OGhBq#ro zwy@9`b!^{;CSG*cQZlY6T=i8Bz8?fkZq7;N$Rbk%+tllFzGM7NpH>+C>4>(Uuyi;= zt$`zyBS-%AxWUG>D92PAf`*j`WW|jbYCvx(b|? z?XI5ieIgDqHFQ-!M&VLzY&iISiIEGBkT-Rqqe8h@vU?XQO2(PO=TM2f&B+q7_NddD z@6lI>_!`#Y{wJO0r6vUW8W?s|dv=n=%SmC3n@}qEuI96ZuT0&pv%#+#s?t|CI$SnI z7PR%+SH8rK&>DDVyw5h5aC>j|V95m7vini+hjlWIV2iP->$rW!+dR_Ug=sP0=3f&u zt1(E9e`-GrSR>nFSq%ByZCZsOq}RD2*fE6MwI5bWR9~pw((*<)SFFmWgS4T=3A`q4 zr^O<~Yc%}>j0brzBMpD?5fYi_T9PH?1j%~W`Z45>7RG+j^!8_yvs=U4-@NI&W*;nGnt1)f_0Jqm=OAMW zLI`~@%;22ZC1pX`_~y$S$P5=nn$Y_;7+v}COUFB5Pc;`eyMgC#S28!Y;Yh}xP?Gh| zkC|lYIqd!+ub^wZ4brLnpd?1HgSpdkdJdD}-YQ+vKNF!HWRxn*yE=2jn>+k}@UDI- zrJZzhO^U`3se`5J6km2fbk+Egcs$!i4Y>dqV6&@*qr#`zegA}+K6)7oMTKUUAyk`w z2l`c9*43BY@@7|<{-X-o`JssyX6o{ckE#W?#MxETo>*}xHIOMHN*pP09!ExPCAvA74yco3|G>NXPBw7T_)6)y;Vl!MF}>&asgJ z)suyv9`1|MA9A}0$AyD01%niiZhs)`YvGA-BOrzn?RAF;TUvc!ha!PVDDGc`GN4bx zLY;kTx^*n=_>)T}F9*$?$FD1SNSQ(*w?(LA`rEA2bV_-l*d`5>!=VNTzPbV?sjPeW zTxigJML(u=Z8-78J&EHOlRWk-sft!fNBTytG(MyBoaGs#^@qinLhUlQQ2Hs9%wEQE z2sZWE@!7$D&OqR-ct%4?9vo>NUqhK&^h`XD-hC*&cv(`vyRmG(n7kyDvyYuM(#Qxh zZoqW%U{AHuaghIExfZE>et1)5`dpTlL^a`K?aQ+Rn3mAYzbOQsv>$l))L4u$Mv3p!hAe*$Frd z$Rx<_TM>H^@#zqTy#GfK`n3cd1pynr;mMVQa;i+BVx>xEz;5h5H?G6f)yT^znb5IS zO)Fu@S_0=zAmm)&IxMCVD+sU4&s_JF?17)_9*@D0)1H1xk6HWMjh_={B*6+g4R3sF zY*+G61<5)S@W+_m^lLJksX^tq2C3)EF$AyEW!sd^{rDj8If9tgEN_t7#-I(Y1yE~+ zIF$WnUZI9qLO&okp#5Sx+HF+a1cBzw2U+u@l73V?6iOeeA$Z-~0qLhzNU_Y5?P{(0 zEEaNXQDqlI)gTA|-tui}duG0()R_q^pUJH65%67z8kUNJtt6E38mdQ*6@}3bT;2Gz z#puada54|L+}dYOejuTYy`GXMBegv2w@hL&>fM!CGf2yO8r13G*}h8Oai8}QB{iHB z6dy}wx4cxmfMEA{_-|Bz?fWO}HTYN6>Pz5PF+YEGTapqAraEF(KN9f%oocAP{ekfo zxnJHm_?mv`VmTk#7Rji5NHJT#!6xZF)4UHd$$UQkQ#<8G#Y2jcYsUQRfBM1CvesuK zMW74(lI>y#e7YD9ZPsLReo1Yof&G|GR;LK%*zYWw?XP}RDSWWS!bQi3+v1SrmWFwY zZ$S}pgc-?KLwqIRZfHhfr|g;E{yx1D8vsdfCInk%^L71GpO7t$U$=0mZ9)<~X=4g; zCXXC&aT-tM=`I8^Ui9|@NKtFyE182Z+EdzF^8vhRboxn0j|nKq)n7dVtzP~3p^4Iu zzxC#0S+okc?{pr3P1nUjk%+DX&sL(p3f>BoO71o{*9H7vvdScu3b z@FfB7xlgs`?t+aoTe{WRksc#uU!fZM6_L;AInKg^#jM%-`cW;gBJabBtg=bLDWY!o zCmt#eOB(iaP=lPbeTQ!2Z&Nz6WLlyEw1L;)sw*=U)S1&x7rpm2YClfyTGadU6JTqITKYhjq!sk*j9WE1&`EwWbY3bpb~##I}S`H@82pN8QqHv347aR{pN ze5_qSH_b%rYv}_aUqvv2b5ZU$oQky#jqeB8*~Vxlr!)jm{))9O4+YHGHZ z$^pN}6qMT|lYO2-`V1bm{7qGHP=tYp*LQ3uZKy;N&LY@z_Op~hnK`sXWoYRQ*2odT zkgp&^`yGSwl(=Q+zuulk7>K!%^>n+?uQDEEjy~9s?tOfs#bV5;rzKOCrHb%rBBS84 zPjVFUw?BLb^JtqAg%3xFj+QjPZn3w)Ac+gKnCD2I%Ee z@PfyxnRQaNZWFP~#y`UCv2a@AacFH#IHsG8s*9tVhQ!Xsh*&eB!V5d||N8A|@OL=l z7*rX)%Yx1H%+cC@O9iFGq;u{Fw~75B2haD+@xJ=G@=xfEt%oA85n}l0(E|bl4(9FX zM=r@5YhB#WYd_u9PP&_$a!S`?$8XmpJ!DwGYkrmo<85P^!)=-&Hpv&X5N*$Mu{`}U z-YqYGIr@Iq<>X4NGE}9s=7&+t={pAO0xE?)YZP)-+DVn;4P_Dn*rm{E&nZ*JShxS@ zuihY~{7tpAN0*NL2NF0IA@?%GCl2`ExC!#`!YB00Ukyw0JcmaESHHWIIxcy$ow2 z;_8(kzg;1iN1p$WuP={_d3zs!yRK{3z1Emi3_?`4Ns7rfZOE2HT1fj;LTR1hN~lp& zNJ@nglC(>!7EMBww3jlKq-CbPrkUS!-tTd*`^op$ANRhTd7tMz=bYy}`*}`ESz@?h zHD_C)P0M~<---;6GOE^W(G)e7j`b+)4HkIQV0h-};fzAdnBGdvB1E!0gP7`yFP5P2*GwkB}~_`3^4gM!xhKz?+v#%xtJ+g zge1c&YQLDwoMHwO|1jf*_(Q#4e^_43@WnrT)+he3&yu{TI7;Th4~OheG^M}%uhimqphm)O5nrK-~NBj0n5F@zn4PKoPNXCi@r5% zY?cdkE2z^yo_Xj--qpvDkk-^Qv8^@wXLavinon9GszS!SiJQWlzxwP$`LnK394{bt z0@=^$a2a>Q|DjB)7xTlFaD-d-&)z3`wSwBH8qEs*{O96NP&QwRRu6IConz_pRWsEL zUye6X3ipJp1D?49yGSZ;!T!r)seQjfag6ei7cA&sHkLV09`d^lh+;<_SFj#3zW8ox z9f@Rxepk>&JS6XzaysV_mrBP+D~j3#qm@0qm8(HgDXcC(-mb?z4{@724dIDIJm{yb ztqBmlLFWIn`OQT;=%na&l`s(r**)d_2V%4Am?!=RG`JAkjB^OB}ZVTtB z7I6H4!jW6_AkhGTxa59SZCWfb*WZP!bP@C=r2$MYvn#d zEmSh(=^bawb;etqrj`W+=z)K(hx288D4eZlYTEseyB(HjmQygrc z>mJRpRcqi}tk^S2=aU`TrkLy};Q&=fKTo}ROxnv$55j}H0`|W!RM0Y(cw$|y>k5jg)Qq0Dl`6td z(W-~`n%+red%dpt7?AxU$&25$wmaZPQ>asvGt)32i*mR`+xc$qwNp#;H13R9)z7K? zaDBvCXrr&QVyd_gJ^A~`8w^&*--U{_j{tigIeWA3%GGqq;JSCWzG@je_GwBCP3a=} zG6an#K;8bb4d)syB_=DGq%7YL3n;;ikeO(iMAh znPR3@Le2bHo7;4rO1I5vc$luibvja!-?8WCz%1Mn75*&`;GP}TOJ<+QE_euUE*YFA zRgIi%CK;|Qcx3FPdg7j(M^QO>b0f)3BA78%oBF1s1JZlyv>*S z1W^(Om0$E$^8s2K>{5v-clXJ7|H-#{m+JfVdfHdtF?%`B?r3u=yr}V05S9sy*aVh~ znQ4{D%2@G^443x{FVt}E-dSNu_LiV}x`f(C3P^7o!XKPWUAN4&G{|uC+&A4>gMycO zWsX^Y_mKFeA>&iO2K>F7G4+$DvToM0k*4&{z62&C({-Tnjt+YzEq*NtK zPB+ZGTDfb>z{lm8Bp1OTZ**ip=UvXzTn?O{F&hn0Pm3dHqb1Dy?S1swfyP_>HJ*N? z%@BEV>Zwxa%A>NiZOO$A4LffZR(2Q;*Yw(0FRkkEy%GkSuSrtLX4RTXs7*|2Ny?f7a zfczR2h&$BZIbU~)J>ENfEVcmx@1qFYo@EnlPcYVezBtA1V9%#RB$aM&0M%^Y>skzs zhWo7AhDgOUNIr$KJ@4{3I$iet1r`5I5n#^e%bY^g`8LG=>F&!7m)et6jx}$c4jb&L zdZLEYGw%>Q%Aw#FV_arP8cNrto{kpi5fk@10_WfyDOecx;61Gc)RLNi-JK?3f@nj8 zpfKHRo8{mz;X zfmw%iEXm-j^R(hdIje}N{Z6ZeqKLcjADai$;V?cCq~a(z^!$-Z`aXVcEhRzu%qn}b zpRt}PNhM?3vJ8(r;}oEO6v(+l*6uhCD zL;p8-g6YMjb|Oyi_Us_Z#p*zy^ZjnG8%bz2$)O~TArc14>3Zr>BxJU@cO+MUD?Z9I@wgYAJ1?C2C(X#UY%KYMA$%7l zBvfW>s^P@DaGU5{m$GvL(TpT^kkJPJ-RM1!i9ZeE@`a@glS!=K*zGR8+4T%(LY$rZ zONOIsAY5j#zr$MJG0+so$r{{*Lb3m<6JSZVB2TMH%@KRDeb!?e#~O|f<7}w*470!u zscij*JNyC2WAAJJG1T!)w1l-#tf9v|AZw;VM`co7@mR3e1kuI_EM$=fRddoKcxpCk zLoq#HdEdfiL^mL9!^NKv3Gqu0S(AgNlkHQ=X$s{s3U)24I}eW~PB6(aPKX_EvlB_#J zRN7^x>g@O~4%`{~dyJ$52NFRszy00m)ec=?9?Fm`-N0FN^)T62?fIEJL6NQ}|4>6l zZ?rKf%9)JbO^;IIKZnOc;X1hBzuf-!*Ni2|TWU?owhB$WqoOF|76}ys-Zt*veV^jE zm00hk`kfOQ{N#xYqv4S`jN$JUqCy#uQM0Me`|`C-xo3 zrxp2a3dsH&A!W3%9e>4KV#^0Re7POWJVc@?EEV&bKFB6L@Wb1VL6rC+@|b_LGQa-( z;HT&NC4seuen7WTd)i+Y8L%m(wr4?Xr-2q+x3m@lcQPLivrW0uW@8i`%^M&JGUahngd>i{IT=W~7X_3u7$ z|4lT(=5QDX(JEe^4a(;%8c3}}@*d~CitH?Q^&A;}^W+6vgvm zpTXN*s`g}Mr&&7AZhOXpIH)Mvii0@i6TPBstE_XWe#K-oG63kM@SRRQt)SIUYhlYD zi(JQ$a))TIX>9G={Ze~&j@=vxSnHt8S=Ijjh^=sdHbdsiLq)r<1G{EqA1D@Py`NdF znfP(G(Qj#VuIVYrl!-A4EAx~xj9nbp!j>9KGnN{{SsMUc&i+f|(+XKyNkAE`0IURAwP)Ei66VX>z9i@;LH0UfM)lxYk)LZv9DOPyS!j^ zJ?&jp@UvNKyD3ZI!XHDxi!SJ?wuuAIF%;RLQk=7Tu^vb^n96r-{ z+@iqx(N()PclFwFd0z@sC%Uz@YPw!H94n?t=dke1-Y=>Dn&;r#X~Pjn2%OQqB9%ggJAoUV$PjezEzz?f@17Ot*|W;HXI3>QW~wJ^YT{$K&OI&C`|_OE zW2Er=1c8MuEFW|7JJp;o5TMvOBQl^TusCX(jL?OYRyw)uE!k$H-0Bo|a>2G`CZ+aa z%{E3Pm1q{%a4g+`KM0Rz*&N+K()kN6a2Xg#tGEx2qjQ7$n%Sm4g6@u+bh5l)r!@g- zsu8%>3=fS3w41}IM8|Nhv!TzOkp9Qo-(KIM@QZKrIgNRKR^;p_tNb#O?B*HUd)ud) zkPKR>Yi)j8Hris41ut8G)BNNZR$6&g(25fLOt$LJD%6={&^R@YW_dqlU5Z6WDNQ)c z2p;4ke+bSNrhR;?H>DB@8 zoL%eg=f^8%U%zKX4%$7=Tf&$G293)`Zy&f+3MEt>y#s~g?>QtRFh0Lfh*X9oP#`Wx zYTcJtlNGySKP0h>A29R0<5-62tc*ShM*qijhS4|Ch@x@(u~euzr#mchd8T)J`$X#C zOK%y^!DqJho+BOELm}BH8)4$ulUVssP>8NCm|TeAHI^?wb%dmHTJ?m)0oVrHrz|xI zKuk5XH~g=qoeJ?5K(*P|;Q_ElnO8yQt2rsZ00$|)4hYPY!VwXR0vD_#@yBf{2f`HAhoe<+=(nYF9kp(AF$MJm5md& zSSonAw=y<#Kd#S)@SI^+=o=M8ACR2_3MC`4w8`)$$Q#lSc&|!lD$p4P3j~XgILGBUIo5Gb`U7 z(k~~+NVX-V?XO&y4KEZI5&B{HU(Men$c3F2Lli&7n)FWIyedTcmvdJAKwAzc{`2L%MAMIp<2F8sD0IuCLjP6gtE=9e^sj4N`9(ZtNE5feA5B1spORYzjdl&GMKHGyJ*Gzq?B|-2D&S4=;~AYJxk&Nv z2paTNb9$%^G~7Oc+WG|j+7ch-M=oO^*TED;pyb>ldbNtGF}7_P7dk<$)%ZcwE<)G9LQF%L`S4^ zm(R>X3M(k#m5#9iT#1nCgEd@(4zbMdKmu~y{fe91x7k^Mg;?|hO~d~S&G$D%wJ3{O zYN{nU&Mw+4j<)b)rZohkvlnRoo?T@E9*5#Za)NrW9+TmX`&Utsto1!|Jd1I&A_p!W z4HzTanOlZ*y8vEJJpailN2&^g@!B{Gs935CmT@T@#gm01dm!VaK&5YBo4kFxtmRV4 z{!+Kx)kS0E93=lsbR$?-q9A=)k(9iyIqn#|Yai41jk zL;nY68-{fGcxR}Fwa?gKkk79`tcp$NHrDKhl@vP)21#4WB7Y*ecRh(RS^X0K#2~Qc zfg&{&7YE}vnVo!R7Co}6D8HdQSavhHHgYTp%r0g`A`-BJ(nNiVB0={avx(rpJ3*<7QhFbv+tt#^NYOd+HHB}yo8Lir_6IznMr z_AC=#Vst*gYMbdVwR}-_g)&1J&ak*%&&n8V@{w!Mkv3R7#zlz|B5HuATf;K`X9nUg^5>XJjcqF&wb-nXhHo00kk9*y2lN9~Ude`=e2JbCOPQqmL7 zLJ0x3CFSqBt*<`^a{T7J=h~)SC{Z(uB`8qz{9rl5 z)m%zRtFuRH58MZJt^c=dhRCzXHy?Jv}^bl<&Nr`G{Xsy~a(D---ox8-?UHJJEFMEpX zVBm!8op&4a!YgTeHZLk{<#y^imT0MyR2Xt4gkPAkA5nq9*kyQjQ4s9`pevdA@Jt}> zm9!N+7o;mWbaElQybAYMVAnrKil6`#q|}a;_$DetCFs`j`xis|n)YY+oyt_=FNros_ zIPx6EAW$`P`r!;sLkHzgsxMCHBwsFjow@T!en8&$j`6_9Qo&W(>*p=s2%Lz`defXBgp zrH|LHoE`N`ph{@fk1a)t&hSr1^zZ>;G)x+cI8qF6-*7(nltHr4x($9AFT^Y+^OPLi zvnaE_rS}UK_L@&ci3C{r5heel8RLUpESGNh{P2v!qtQoO9VA_z+0G$6W(M{ioqLnP zQ@Jo<&sY+j#1@@GP##vfTw24Jx-RzA-YX-4_2o}IQVy6AF@@TjkXPslCSq@h=`T(a zTo9NA3xe&99f~)+lWeqkB(Z)?r-3+VK!;~tSC1X`@(ocMKJ0setvzpsS>|?~s_+}v z>{`VU06U!|Hht`*)t?LekR_l_Z;595ILpRJ9}@_lIG=I5Nf_gfN7q8Fvf+wspV^b7le8 z%&J&;uW)7?&$M~$k@R0J3PjFhe>=}9&(BSqdHR;=$Sj95s@H!^G1)}YrOY{+zT9^g zLs8)ui!^~xU4^EUw$c^_27^Yk+PVfQ_-;;#`vm@j(s_}JpQr2SO0^H&P5gyh=pb2y zm*w+6>AARc?}LDZb<^i;oQ`{iW*fzN(IX$8&}+MUVk!01%^z|aRGw707fsx_#P$XX zbkReg>Q{$uXdaE%7KE*@Xk5PtdFT(EOTK1JKD)48t7Ksr`>>4SDIuP!eXg6`UBBxIICvRKMsEe4iMXwG&)uL?D^DvYFwI04#oM zzw^kGLyMj7w=Ii4f^*s2n6tK|6&;7QTzhYgkj)LolIFw1LT|K-CVEp_7PC_1O-G&u zZ;4*{qxUva+XBPwt^?1bNMl1H=yre#+PuR>2?d(z6LczPMCz-P z-4-tkdfbe6J9Qu4)G%mW8uxr(X_xsr`!j8-F24}MyNg7J5r%J^LysD=78UmZC6jCy z`%N36$#v=YGRx90;ReG6A9w{(DAU*zq6KlEV56DuGJ>PKxM^eMTGBF6Ad12$6}m9> zrPthSWzR|p4$}x@-0wA(k7h~XhuXk_X9*76TloX^IzhvkFWqK3M^vx zP`DzRwbh=08Lu@=hG?3x`S= z!hH=HyoM}flGQUrqdLm>^m;e}vjU{m$5>?;t5}2=V)RW2rX;9wL*~+?Q`x+6P}y;Z z7{fAGunJynbU1pB&n=4f=;=JI%L3+8=qJ;V&0q*e8T#lU7SI3W8evI_qC~_Yrz1U0 zpk&(0wiz*~y>%Yw4wq%_+<4?_x&ELe+&z^wTxa)qTV7R^FxV4vz_cphfO z0?6Zc@;o?j50aT~)8Ab1v4FR{x_2J4Ah`(dYeR*XUH`Q;F;al&E@*1Z+kKbdjkt5I z@VfYDxv@v8t+3x-7fZBJ--sx7rUVn>#!_^zkl z)7ka@i|h5B@n(tDoSjdc<1LT~z0{?0KdF*7_YlSIRv_r>9bne?*Y6*4lZb~AGKqG$+gu*jM`)jB}MY={H&}2rxYA9w4_)`@# zx|@6y>xD91StFhIvx=q)+OH76wNdDK90659YylD-E{ke@Fl22vb9u9;z6=VnI^nM$@v zhjoh?-pBbJ>8->?&Y{gAvd=KnYM;6YQ95I z&doOu-WyM)oB5cU(IN4HyPrBG?~{bwzmZ_32S=m^+*EzKz`1dOl*YnpPGc-QwF_F` z$=1?3Fq$3C+mI*P@nhk}OC@{1ruF9^#)98?|6~QMtz7LSAO3ChRFJn zU>)a>6QasHH3g!&F3*9H29c0tpTQH3bTt@lO|AIQ5#AuQKMEGtjPCBnyn%YRuKvR_ z<_S9%e(q=3i@JFqEXh+DM(bzOJ~^eA(GK<9_n-U|)_00TCP)TIRV)ObYi`%tyR1raiw5t<&ATKeDq#%YaSoHO+#!si+t zjGauq1&^t|y8t9Xof51LD@o)*VwI_ak`;jJv!jp(I_nxF%+N_L&-PEp!!~Wl{(xtP zz`OJ)9XY~BpV)hL8)s91MH+!qA6VpY4QDbHyw|LE33Tq`|ACw-@I%+ao*jko-iZN5 z6@_mWQq6gdD^&R0Aiy5?U06s|MQCeHtiS4Fbc*b?`KMA8)guEyaU7Y&<8lGx( zD28ykR}G-6fb=4qGV&la8SBXN@yJcpRFo!7`2`N^hGdKYgb5X11eTtr&u;xM1pOLL zeR}hSijgE%w1!_AlnnTvoFeSGtcZ*vQr};~CGeelE>jW~{WAl|v+!cu=(Fe4!)f}d z*a50`pt}Y-J#zs+6CG+A3Uq zPlS{O`^e;_Ub&np_RjyghL0)HgsphjTW^!tQ^RJ_&E#?OBEJ#B_NnQlhtuj748L3CBBIaYTh1w`(ZH0b!B{4;D> zk%)=>r!~(|W@pPn*Z%?&Jo>0-DBN) z-YQcey+gOS<->iAfvyI{T7FLnRa7JwKHF}nC{PYX^ULY=6XeFLyua`Pp4cJ?dBQy1 z`*bty8_EY<2M(W>G{{OGtGFrY3gwXd)v^M#%guLLtA@^+r5dlh3%x3>x(b(3&ADB}*`#yV6}NTf8md8{O8J0I z-u2>j!v5q}R*x(a$Ljkg`-WtYwGc4}c8{C%I9eJ%4#YYXb;MuNQO$IFvr@7`Rpl3* zt%kyp|0H5E-uc--olE+wIe{T&P33p$H=ED#jR^}KyNu7S33Sz=^IjF0uH%uK1AbzK z(jtb=Es9+${7tt@I&sRYWZgaDutvKT+1Mozva;gwf;8BZWuom!Y=8XjFB+|D7_C$E zX^l;-A1=-o6z5X-pFkz;$z9FpemN18gbNhD-Kz(CM{q+D)M{G@BU#~&{IVGnx%&ikhsdH&F2?!}%P!xXMR`7J@2bv>F6$2xM(m<={kVz6` zo2>s)r{I1HbvlCM)w1Jn1Ck;K8jg`U*Of9JI?h( z;CwqZ(kkQ8`=Mi=`x(lQ6Av5etuxZ*WL`ae(PoV&h1${bw!hd=S#6=kVpx=iS3$F^ zdLdrZ=vXDbQlJDSQ)gFdslnA++cA+M3@)_9BMl6cppUc^oGT}mZgXu3j+P6ukJXHu z<;7m795Ti+jpa5oHiB4SE>hHfKzb9~$B z6tTezNofs?=H375VE&6lJ%6FiM55L92u}UHrDx_ze}~EzDIedun9oTwk~VOhd8FzW z$U~;d3Y6LIs8>mwVSk8J6pv3lp}lpZTBWI^%jqH7XtA*{VL)LxQ8dzyT$g`KY&kd7 z9Hg7|Wr2%X(R@qGUoEDdaN<$`%Son5rq$m}W=rAogAL!43$e5KU*$@cWVa=N#yQ{8 z<`)1XejAbr0)Vm~7C;c@=qD&-gfobbuT>-@`sdQ>KSDM5No2*behus_N0g7!>J6h< zT!J|~s?oG31!sl*4TWXGG7iw;pxOOc-+v=u*vBQJ)3czX5?ov)mSz9IpH_vtr_#CF zN2dKk$iC(>&LBar0Q4rNklxX$StrIN5 zZYVqw24kvLYhJ?@A@h1=2s1S7x=pYB6E5MUNdJOOmKTeZkfsOzYZctC4nAG>o)%UK zNhs$Dd*tVvfY|!QBJv#gJmSYn^B1B=#XxpZa&ar-=PSP0dthXG@b$CP;Gew!38^@Z z>`FfdZ-sZz+zlB|436^nbtlW7m2%?3JX2 zWjjFMi)#EE`bI-m4ela8T+0;-yF@~`R#i^BHry6C^B1`EH#4dcE_dJsd7RizXZ^7! zmy@2~SveHtQD#f3a${zix3Dv5by0p@^wH!r>tQ;9Z;n z6#ceQVWM^brza*omg0EO;yGkFchHW7X}s&2HqpssJkq(+q1r&Us77t=sN6yu5KuUs0(kZv1x#hzIl18%VTknJ+?Y$i))f87jNd^y3E7rCJ#SH)fde%}Fon zIwDzu(KtSbGu2zEngap0-qZvNRPez}Ci1E7AP8~}v4(e=^}yR}LC4_w>_Gg4pwY7qrcs{>W_b|JLc-wA^{?4$nb=x zri%BN@9LGx9ytwCF&5S9?S-~<;<-KyrXs>0R+ZK};O`;-DO+5@J)r@cd_fqumeDB6X=RUC=q zXocWnCt4vh$fNA4`wS~k*oj2kP;0nIIFK!R1@@&#IFc&r(va~uGt!zWs)5>WAM|_v zu`khkL74)6v0`R#X@|&ju+iJkZ&?(}Fxk@lcXIX*rdiJjZ+^U$>hPyeq-aJV47lVIVk6@~v-^ z@1L}nXA4un+;>^y0hCY58|H`5V z9fe|*^o_yy^er2@0@$=?cvjL$qiGI*pT(zpPrtpmhenzZL+;H*mFa|W=&Ge zgzE7PZlT~&kS@WoeYjn41z8_owMoIxzdF3S?M81Hh|1YTO0yuP-G^t|GVuNzlGtgY zQ4Tzml2-%o$J~;I!T{Lb)WOrJzS#RPxMKIA!*|2LktfA(oV;PTS}2Z&RxRwEm)MUy z(&e*Qt3G#W^dq`>*JB9P=P>5$e3`e^km9fxK`6K{dPykUUy=^s`{;O zbV)0GLmTg+x^Y;!5A_LB&3Lei9VmC%h07j-to?f0(@c$Z84Il^k>^!&o^NPXy*yL| zWPgCV51nMDO_QH3jJfx5IfylsDgf6sKOXA3I3LQ_RCCH}*7w!i1!h{Dtz)}$o=;C~ zaKqL&yFjf89lnB(YdDW#jgH=8B&7obG~Q*Gq~}eeo57uvgrb@&71DF?2zc&9enTQ+^gb;?>Y zpQEDe@(7Ht6i7Z=f4=C@g^_RrDp9Lto*rM*0P!6Kt|mz(b)5?Ep>EP0N$tWqVKIGqnAaaT(2U?GkvqW{4XIrk6lIE`tv~$t>{Vb!GItYc38lcI!ws z7BtPXIk22==Jdel<-yH0HR+U+uc_;5>^pqnJ%;ix#TjQBd%v2Ros(YSE2V#?eB--P z+S-dyLPDi3F%pqyXi8Aip;Kds4 zPtEoi?W-sWr)E>UN@?a6S0$fhJd19)q0EJy+il7{1BFLanhx8?H|p=FBa$&6Tz&n6 z6}cvr-KZ>o3g7$ACf(C8nt$@_YL3W_j#3(t=MlLmKWNAt%XB^4&Y;4Ko$Fm%n}dvv zLbh3vPp@~CHrQXYj@y*X4pIo+Bj+ontS!ZFSi8X<5J-vjxqH4X*96$RBs#Z_6-fvwU8mj0id2k>${t-er_=?i77W6zk2$ z%W&C`UXs&pudp62vZp3bBZt641L5EHIqop!?zk88>eNk2zoiP z^)2n%;pcXHaZL!k+SqHI%W1>O&2&j#5qZFtoY%E)7$@Jn{BRWAl2u)i#I^^=GUSx> zgLp7Zb8MDi4Ca-`=!<%zsbKqPWQ#_-8eCfM1R1$n;j^khF`MFOlL?Ol0pXnk-$MiB9vX{=D}rFabG+l* z0r;w%9H81Xc>i-wq+TiQn%jXFTgq1(r`SlVa6ROFe_vob_?5$W%2INy)zHK@L|?EK zB|ek}?IEQldkTBP!>J5m0R*<%qJlj86T>$|@7?a0;8`^5fMn@$E3$Jcn@q7%NnyYB zE9>Sv6$Y=f5SF~?%N7;yzVpO`9UbmD?A9<+|6tpG$;tTv8pH27AHrpjWXZvJ7Mo!p z&Dv^80&7JzXAkUff@G%8D!BdB=NA&y3`GhZG{6QX)M(=e#94h83G>n77on|%3Zw)kWrAvd`Q94AV7O>1+JN!1qJfk2|hsnDa$2EPgN(AzM zNa3g4hC|yGw5Utbbjf=?FBfi$lA_Sb4DPD~jQGL(I1Czsp;19Y`H>m1pD2#koo_15 z{2KjOZNH>S+ll*#gGe3~j6;5e02JtXaR0!gC{}Hj@WZU+j@16Q!K>(I*#p;=W=bBX zKkV-i^_6)21rqCxC8}Gu>`%rY0DyUBniYAx4KT4s)dNR>Z8dCIVqdf5zLKMx6*)aC z1PD|;0AF@@afegr>FSV_(YFXnt5xtiwkT_i^fiTQ8Nb*EP_6m&TZAFQI6jkNk^^VjbveK zgQ%{JA^7;nN!Uhh=xq>=?w)+e`ef2+gH$#;Fw@(Pocjv#dT(@OWRD1{&|)*|7FZ)7 z-W`V?fvdRB{)KU4(8ujrXxK^n)TOH=KNoa4jKh(ge3>eZBU|&}0YX+QUC)d(-;+08 zSzZv}s+q?6zK@D#xL(<|vF*On+E9F;`8@9(2wSHov55-DHfE+vxuw*tjDwd7`7Nq* zJhe7QR?)5<-3c96m<4Hc-l#9Iw_1abx8e#_4j=CXos_2PXGjW(eY(De<1u2_SwXvG z?9xMjy?&KeEUVV@qZeC!?%H8Y%hYU>#3g*#Z2~Lg$6(Umx^Rb_0*Kfg@x%5pn<|EAD`3iq0g?c@dV_V%@(_DO2#Pp3z!1zb7vxUNNa zu@`&tmOpT*D$8rt0B|O{)Ab^^Iqr8hIy!NN)bsYI=`#$xXDr;}j>Ov*M=l4Pxz6?< zzh!sHmDB1Si&uY0KH=S0RpLnz6m{*8)B;6$-*AC_S%Lp!&MIjPKWg8b{QLp5`Z~JV z_3;yD)PhJUytYu)^w?2|B~zW~3n5pI!zS0HC-pZB9Izp$exfJFQJsy$GgETI1y3)s zcYL7Dw7IIjXJ+sO1W^4@lSBXj%sH|e)mEC_`J(+PaK=_0dm_5WR72O-BYFv}5 z5*Ag5Oo0hg_DdE`yU1R$ZH@s62VvJ#f`eE|H;dQ~69g2Hf|3f|oAR%mD7;qZLEo@r z0a#U$N&)bUh?e)t1ZjMs)C$6v1LI*Xyn`&guSsm3cF;alPc`L#3bVB)JEuIgAq_R4 z1VPg!nUly`{!0?h;T>%YWLBb%^kX%E^>gSLlg6rr%vpR4l}C%Uf+Z8w@K4_q$gGA> zF}fKD07&AsCRfa){gxDcaTOD%a0V}02Y!ASN?8kO-d13(=q!Y%8pB|klhx_?35vQ* zJpp8*o}9#vho5Z@kkYQ-%RJjD??)954)wGeTc*AX+dT61zMtLb(<_~DJ84s{Cbkk6 z+{-luYmmR{+Y((XMXFl6pq71%RMj`tHu3D2tm=FEl2woVzn_{8 zP zj@tWv`%&X+=d7MPv2pFSEcpRSg1qSxY{h%TNj@$SN};L_N>IV4^c!eLg9q+9C)txr z!ZydSYJ0A6%RzXJ)4Yf%FJcQXdLMkt{0lCX+(cQA#E-aOiO}Xv+>d^Y2lVkDOYxpp z@t((dh4_z+K#fQj2+c+k)qeqg9P65NA3#rRycnzsQe}RZ-HH|l%aw>mzimg05<+oY zBkKoPS(0O{Ay|lX6j<<_4Ll9JTn410=-8Bk<-G6%4XVW;#BZYEna7$W9wR8nV1z@E z@AzS}pRJ2V5<3d+&g#HX#jNlRbhtm5h$6n~a^N~DucbYWt$6i#vA*$cQt(+))v`+n zZB1bVr6YRw*ld4{Mxr z4eV8EtxlRi07vb>yka_*J_$V zDd*>3R|}KyUv<#0A7~0QfBtostS|?Mtc8B9peY>UbK0lp>?%R3jU*f2!=ii{H&_nl zM@zEB;Y{%HJXPbrnr3p%V*9_7xZb3j1t_RnC$SI2!TUl@N2Jr9{(ejF5*>LmPU=dT zgFPr~&HtJw-7Ie^WL|vAp*Y6hU3zQy<@4s7NA2E$Php%aZggYje=&YXaq!Ypkt5dU zHUOtsP!GsCUg(fX+T3>FuVboCMvYx$EaE(l;`{=ciwMQpP*&{N{Zw|1DHnV~a_Mm^ zUlxzYz*K@CZ|MsRP%Y6(P}}JY3+@S5$-r?1-xE6Xi}S-TBLM2v9Ic9O$Pw_}b$8pY z?f`t&@WZ5;jO7TQd%NHwsRgb{$kfy9rjSz&ZN?v$mNs32y~njd=3bu03HZ>&6D(zK zsAq8I>-%}xg9VBP6`!umk^?;?C3*Ek3F+^3G>SL7qKBClE`>TnRX`Ztk{6A4Hiyoj zv!sI$6+mS46<<4|;b+&8_ww(FUC+NvD zc8nGm0v>Av z1a;-QFTh_H5~#^uf_)?~dEBIn+@3i*T5QRptJSyYWK*W0_%2c0l`Y!f{>O<2pvTU{ zR^pn2tP8Ku0{WP&s+nNo_ov-~2hV%UZbC8&!z$Iu(_=r~tiq=P)TnVx2qnOGYyVfB$N+CC0Z%R7$ z{jc0ubAKC9Z6t8}>zJZvZFiiC;zu}ID{$r9KV-0MJ$(IsJER;M*TjP9@^oId#oz#v z6_JheYyc5LFmUz?&Z8WUuVyPmZdoHowC94Wi_u^gRYh~k9Bk>f-{5Qe4sj3lEF2Fr zdEsG%M@%(ixv}1FH5`p<0(wIntF|`+%}@;3Kv0ALJGJ-Tb=Nbn7A>QbgH}FY*Kz1J zS`7P1q6MJ8F2VLnd zNfK28Q`kP8Lr>vwaDwm?(v&Zg3MT{W^48z@qk9DOjX+^O(k{cvz>s_fsqQW5GvHRIX(!yCD49BJjt$R z+-uy1i?HNr*u#g97pGM1K=6{-kTsTdHu70xzf^=0P8}=%WMC6P*^yow0_roJqCqmS zAhnS#I#jR&xXQHGdvM)G0P@imp0aV?{`?APLTOIAkh4_f;5K9LOngZdQ4Qn7?}5z73#gG zBy7AAZZ=`bSE)A;LVBNQzN^6_=`A|k5k*xnJN=5TS~D-e23B2VJlkkfjkKqpSQx6; zHI=l$ID7qe%k)$#Ua9SUok?|F^KCmhI$d~^ZI=E1AW3EM9izb%Z{um$eVq9BW)6Nq zC2SAgD=Va?Xf0OGJeMs~leu6njsEU%1=TR`Bp2TM%KnS;p>3R4o;vInELw<`V2$gX zwEmN-qi;I9l^n0OcO{+Q3|hky%zrJuq~B*U4#LJTwS5oo?00*+Pne&xIk;1&5{eQP zC9$S4_~V$MIs-Mqo%U#SM=>JRJ&*J8Y4&dE;9NO}6hZu#$C}tf79u?C(-mqWVsM#W z-d-mS8Jq4d!_@Wh{ReHW5;;AV3{J~Qdb_Aqv9 zrvQ1A;4cEIC&2%1?Gr4=|BXf9hA$HIh#A74SnIp|Cl#4_@V6Wf%3&As{ZJ$o{;uK% zCt0eFJcKkh~{>|b@WeJgK*)Sx9MKS5}5x+d}Sk-cpgH(_}_*| ziS%UbJ8mFgSFXsQ_%s%If-bqj?|1ArzM-;OyzOY!k)kq=DUGk1|KmZtc(wYIOQ5?> z#@6GDt6tp{jc*t@?J;!;0tq7lhR~En7S7kL_$~!smLa2Y-snnB#(E?0jdIV|MFfYn zfRh<}fh%9?c1^8lQ?W${0h|sF4rGBQF>A4^$~h!35jPN)5XVq(PTa79=wd8DdKUc2 zF2oy_?-YcJ8zvA9nu3So2HYu!U7baBz1ZX5q7*XalG=ed=$s4Ju@VA-(>eSRKZUE~a zeWB14jpD-a2Z@^SUv&-McqF9ZC&Da&C`CL{H{gsC=PV*_ut?khwW^_AX_vsAIQ}Ne zM8jbLir>MX32t0tl3IcYaRaXMV6?f^PW%IGC2pW$ujW#DM1%DMM0ePOzo-L5!#8}Z zv1PNU!{RRDhPhOnfi)hG4YJq)sLptZ`z-%x6=l5e-*~Va?}J zXA%ulh+!A!>+ZxsF!vJ+wvm_k7v2zoySI=B`Xa$ZmJ_^AQ(fRMZXo!jCQa~A+_$ zA=vV5f?MJS+^K@Wp^X$b5W--&jv#|*xQr(NVA`{(XNff?&M0$Rfdop!1`7KVKjxs; zd?Cmdg~y;h;tX#VL8T^ph=v)w)8Yn#aYroR-4{2AsdO!G{Ctdg;n)j@7lGYVfj%QN ziLP6C>)?mnGrJe>3;@`>2!Zr*r6*Vj{^^Zck($U@T0xwK7X>925X4-+bIv2QsV1uk z7_L0>0*vXq>ljqkhp9;J!PzB9{)j&?S&u|7_7p7uEk34(^QbZ7FwIZG(UBGj@P5ND zy}0^@J>MtDhYlO|>2a??{TeTO5PaBt;w(S8EK>~}o~-8EI}YJ_hFH8xSOrw-HMbjKeHf zcqut*O3%+a5B-+lu_{a{YH$c3lCD5H6PgZ`mgpk`>A~M|o+DP=nUi>@7lCUY?>&Ve zn9H-M3xC57pRp%LqpN$+5q!&tFHD+4mHiFFnf_i$oad_l)>OCyQzw`>IJuDY@xL^v z^%u4my$ph3UId+iiedCSvPcl!m=f54eldR>mfZH&Vz9wrO2IghfqwBf84QV^5rPQN z;3VuJ;V2>08?bq)TYtl@1|5Oy16Ld%F)s{Ql+inF;y2p&0WCt5m*ozSgzA z=!^DICzyOh{S2pfEzjByU0>;1YNM-$%|Z12;- zwpp0}qwdaqpo(ER1fyh@7L-I_%2!rV9CI7CuA_#JL}}3ZI&Jzt&XS^ei92x<{aJ$_=&tl9?bxJh5#M> z(VpifU}pIfcfw@-XW*D(tR{`anEEyM9SBdP=EC3irJh#_Nz_3wJ4-pwn?wVl{9u-= zJwu5GH(ayD-tQCaMJ`MXgM@T6*jEM5r^FW_;s$xo7eqr0G0L<*sh)71)=*e1qCHl zL<6D4G8gCjfsBSfBA^87M!rNX-T;1Jw3895cV^e;KxIv7@?R;G>@dX|iK?#}?%|wHE1y>gM zfmDaTTjB+~S|ITiZ;&K3P$nok;s#?o0^PMhsh-33_h7fO()0&PYi;D>bcaHL<7N3u=Q7Ens6BJ3Edexa#^Ms8gfK7 zT{9fHnom_{G~CU&wT|tbppxL6vb4k2%6-m;h&8L!OBZo6??%x(%mND9+BzRUefQ?| zWs%SSWAEMLq5Rs$(Yq5B(m@f$FjJx&BBzo=GKeCFPzoVA%UNkmsgz92D5aeGrX)q_ zAQ1`~DH2jB(ntp>LopfbYu)$seV+Gup7-7Rw?F%@{duQPpE2uR>sr^k&g)w1UMo?2 zGat+O7&QFkKr4fEr8@5c)|3H_p<;d-pc3j&FGQ{{5rd$bb^ z!yE}q(LIMZk4PP;5o+IUz*8a$tce#G@?~4&SI%Ikh%^CqhU0w6?=j#E~Q)@|_zPQN${ndi#=5 z3v9hWa^~=SDCoD593d#@s5BBT4=;!r6t+A?&Jyo*4PpN2O1<$Zs0GF#q|t2~k4JzI z5rEi1+k}I-sYak>rDjM>LSGY^K5SIkumB&~Yk@vTDHsy7())z{!=h9Ti}4!w2|EMV zY8yTznh@b6R;FNBNfZdE(|KABZPdW9>qO9ny<=tJ_n2U-2!jZ^*rN)Bbq`m1v^l0ZGiBi6Ime)P7)llMx6*|oLKf{zJvrS zI7gUaZ0{<=nYiP>A{grfc9IDW!h&E5eHVAZRvZK|C54F*-vtMu3zwdt2g%7_+x9D?BT-gz&GJdA;=}ybm&=CYTnd?=ospxmwVv2A6DygTMqJ zR`VVyp#t?aM5myOF*r<7V&;p1E@tCc5KE~TcDJ|hDr!;bB;deIZnHfqaFY;lU@q^F zGAdA?PQV0Rbi$KWD~Jgg(nV*SILZS0dOU5!FRP%R7rB*TrlC1To{n zKo>i4JS7N4Lb|w*fGH3i(8W?5abhtX>kj5#aztp6h@cr;Vo$^H=xw8bI41Q;?l}1x z1XwinD&9gZjI0GCo5PESjR6oe3uGR2k%EH=BVse8i}-u%*k*yeD)rXh#z7E~F9y0e zO9cmU7!OXcb315Ta1i|hGe1`jt?R?9?}S;xV$R6D#tTXX1Jh^9p=Esxixkw*KbzHw z7mNsMxTIut;RPMU$go{!vwH9XKLRZ*@TqtRK2!%{sF(<+wgkbfB$DA6-HW>bk2>9E z5lpO<=9S>-!(d{_E=vO@d98p8y34*iuIYfb=#?5$s z8D5|(5QKh3!=E@81!$E%6{jIQ-9iWs(1o}kToIn6c&OC zf_yEk2h>}~;UI{qDdaG@)7)_o0xO<|^u~Pp$FWMYDcb0M*hz(W6HS66SRq^d7G40?yy7(q>l=vzBF%zfL3P%*@fw1#53A>Rck$=TrukasSlKJ;u7uck zVtWF~>qe5-TA*^bIlLy+edXYtFY;%5nN{Je(0j~5SzATi3M|=9`;Gbz7R_L>Yv8RH zCdWR&Q~#j7IZk!Wy2eV>jZo{l6E0oUMM)Izz2px!E}=XtsJR18bPjy0r#dYxxy!ij zY%W{MNUUYx8B~luN>&MCj zvD^%J0m!sg?mBgT87$>k1aY+B-Jqk@gYhpj`0`JPC}cr}0&h za=4wT%V+2IM0=hTzuVSrxiH!SC7~gUOsT+i+{t`lw33tgy;0rL#4@ zF2Xuj6@turnJNbL<0+~RocVaZ7;{_B(?arFxeSWNhuDjWU7W@$G#~mCWd>nE+q%@1biWVxEI5&(tePl$8by07`xq$FqigUFuND^c-d_w zcTXJw;+uGv5%q&bAF~4^p24`@T_D3_Z^7ejyl?2S`Wh%Y094QX_KWgG%AF%OG5kSf z(Ch)e0|j`eT!9C(Pr~WyT=Ce6M#-L}untuiig4-rW6~=V%lt`g39(1a1YmdbHltuo zJ^j{WcD+!@jZw3xH7+uG8>M*Ldq+RNe``4Y+wh%zNeaHI0H?s!e@9U&{gCK9>bsds z&$a~0$-O)Kjq)8K{L(Kpx5u61_4Gc+-#>p@oSdCNo>VIEQ}e#8l%)o)l$UG`Jfl!| zfD6124ezwqPV{dv+4b}D`<%E~ajPwh-pquN5`xWtRn=VKVmSmDMJE&RqYC_B~ zP^EYS+5iBbA1<_cNOd+=SFvkbetf7Ji+Zx{X0prAJ>M3I|Ijs_Pkk5eM#vhrnir1z z_zSxXP@@8|3^Rj?Y?XeLUk#cU&pG$pWa`&Kb@h?g9Jst2OT!ZkH@fj?Ee{buJ zL=l0}x;%BRRGVq}^|!tprpm0+xN4Uyh=H*Jss>EWW+cO^O-%!d`x2r)na9 z_=oDmg?sDORffzR(efIcA(_&J`|8r;F4EDX>fC-Hmz(Sx%B`>Os9WY!GiLzUn*`WX z`~d{^ewKPs-j!(2zI?JBocinNGx;Un;{ICPEM*_#3n8O+-|QMA(QNOyZ*i(xn*m(s zY~f_Dlc{8G&p`H(LxIim!ZlnGzi4A;@(R@_Og0xjoZufB9r8x~V( z`EP|P)@p?Kc=8=BWu*u!WhBqbK)&^6vU*YEH*Ib!^D+BfZf~w*!uPSa0^uA;b{&8! zSkRX@RD*K+wVCNhs ztvAj|%qIj^`DsuzJg4XXc9mY-_$*;B(@Yy3f@Pc~`>sSlfE<1SPJkBPOLmg@_YY~# zOEb_m?-y%bm!@Sd!)czltYQ!iO}1o>hD)hfczBMwM&JmTg}bN}i#X#tj=sCXQTK(f z0^?kkz5#Hf-)&O_m^`fyLWwlD5LL#i-N*CErFWUCjF=C11Qd3|cv>jMWmSKfY1&T< z_w0k0P2T*xBZxGQFBrzNV>e((~RKfoUGhCu# zZIQRk;z^Y+q2b7CW0iZkJLKW}+!0H1{^C1~PMt)4zhuSlLpt9s5KB++mL0n=9;$Tz zfY(_2)HP&TVi)`U?yjq_SvO%K`baR&C#SpSqF!$OEL-!Z%Ge!Xp@YHtGC@Quy0QW} z8v3O#uc)+`C^_*u>a8FU5q<5#RwRs=lrzl%$xH2rqwQK^ZPbCES6$(Jli2-HBPU(Q zQ;!qtomV<%;5m?(84z>3?>E+7PtAH^(8l^x$?*4>f74j!Z@gbVRJ|o z=xA2D$0z9a;Khh?1sU_=eDZg6n!~=g1*fd6XAt$&D$t>W^l8C9p3bei@^3J%3vzS8 zt9T2MN{DWjaej3N4raL^x3yRsU%du%vz5j~NRz+(+7J-HdD0zFr2XO zpBb9jSyvS_V#p}Mbjf+&_FsPFpg!j3COnZ_`Hb7K3|e0;Y!tbBm)YT0%xhx_)rb&3`YdAfOrc`6qf<4R^NZcToqp{_X68TZlDK zjIPGDTmcVZ`t~Z9;aTG&nB)Gq%~wWV9p-&MTZ70C?MekJSXg6k@m6^7B1^l-Ab_&+ zZ$K-#>y)7UlLbzbg}Gk2__i}B3f{M$d23&K6*Ibp_5x1prna9a0UeK`?a^ffXnTWIIMv8 zPX3T~jN|AC)ozLec<#%C0^TLsEIu)-+#b|^G#c0eE^DFu5!i|s_ zW&<72eTckT3vT~NiWPlGaN447L}-oel8%Oh+W1x0S)L9upYOIGy7Y4J<)4AKaU4-T zEZCv3%@=OUnh{hY={wm;o%pH)cmMV2b6sPr#CBa3L;V|x@s6UbR@n=8mc6B3QS?DQW8fV5Xh7fB-h)$tiw_rX zS8Fi<5$CcmnAKb+B;7u>D;5EYEI75wZA6_5w{r2~T@Tz`xill6TxE9o>mRwo?maE6 z1fb{A^T{84%WcNS_QEN>F}+u#E^4FBuxWK_kJ0lqZH?`v;egX~ZEjU)K9_yau*O4{ z_r53ZBj=?#URCI{E84!Peq+MX?1|=Wh3!X}#U1Q=!Vi;RtxXU1kU5t zhgq&D`SxaVIH^{&#qJu*D` zgW=F3&XRCNx~KTI5Tera?yoI6@a@$)xE<4n19t(2wCfjbl>&BKSwF!$)V;^|MHQom z{mF`r!QeIlj zl;beRvQlInI2HuN%1Z86O@Mex{(@QN6E#YbG?jL>jXDwLc5D^pC^6)lPP910iYaV( zjXH4sHTG?I1+Jpv^QQfdE0bcz$kpo&0{+o&w=UNb%@>X>3L;xubJ>MQJ!qQENq(|fX68;(T4B4gJu?@MZte z9_wSy5UFc$;P@EB>xl$wt#}ToQQZF9jQ&)!%-NDGYqjG3A&0WXRBcd@O#Pw`AHCL< zlywyw$2!y$2-b9Wb45^Yl4`G+w93}}SD`|q@)2f7JG&v8^Eq0c2lF%S6aCJnv@z2o z#Nd~>(k`OGAOCWPY1kTQxQASqRB<5dnu7IGRR;g;!h-6kpIo+@_s67)Sl?Ff&X3Ji zrMZ*4CzE1Ah}A?awC;NgbSY(-mru@`5oA5J1_JJN(}UECo=wO_dq}6`e{l`Rmc-|A%3kUeESw}6#!d=4-gDNq0Ck-3JDSsYw_{}nXZxTy_i9JSok{nUmC^5P zqB(YxKWn?x=EXMTr*{6$mpQy%oS9A##MF^pg@R&#?>jLXx@)_wDO~tf>~QM9U1lzG zh;2NJFdW?*Xf;4!ql2JAY)@xV_ z)B)z2Z-BHb8on`?ib{eDvJ*4`k!?aiy+Fl<#K_kMZrLdaC|PF8l%TnU6jv5- zWl(Z zY~bcii)ZR^*(n=Bmbnvwz%Z+;6cDgU&<{B?me021!7B*S6%G#g_AvnZE17uy^qPLi z#|_;2+AMNn=jx>No5}dLGZ@Vl+D|m7rCfGL=0U#RWA?!zw#DqayMKddX9slwq!qgZ zWc4iMqkH457f=T>&1CN<+oR1~&~`QN8%h#}ub{|1{LS=++hF>bibpwDl>bhz3eDw zJlgZ9Id_8cXAlm(c)#|+v9iwckOo%TaJi?#w5(~-fW7&ze#*!f`DKJvP(RF{gJ917 z;Go>C zOZJpJ$S93?tPj&E|SKs)|DcX}?f!sX)xw*AWWyyAaU%tHT+JVfCnf6Q-kvh9l zbK8Z4D}qYtH6m5UHL>@1_q@HNTy)sM`^t9c!W!oxf?>3IP&8!6{AgR#W3%gS+rzU- zT$<3cN~2?+Le636Q4B;t$*51$lY?RCVK^XhK7ZBxd({NhChRL`-;uh)?H0fC*gnU>yy-MLV`T( zyuwI3)ND3VNop1W?%rM|q@7~3)l8$p%Hq}W zKV@5jLIT|Vp;Q+ywGVL*3=MV<@d^xsGCfpgU?4V|q~>J3+tgul6fI|4Es;i@m;OeeX)zVhi!TGUaLlCM3rFvRgBrV<5h)Gsnf!<+zNvl_@ z!w;&Df0$PYNsa0cT-)g70SqIM{UZZW=_@(C8umYWdNp2X>Nu?E>wOs+IXL{>+Tv%u z+SAR?wwkL6)y27OU2DUfI#a0RgN=~(6Lu$iX1wuHk|}9HWlm<^h7eV?vzPN`IX$a> zY~RS1cs703*8?A=mG5(gLS`uJIN4)=MBPRVlax{(#u@sj>p#5J)Z zG@<3ci`^Q$^uLOo7ApHsVn9`0oYazZW}%!vEave-b-{?0?_-KZ~8V z?my!ykOB>@|Hne0Z2w{;Ow%T~&T%HEcd7!WG&ZgNKk`dc^Pl)7&_x@t5zvzjq2zz$ z*eoO{JQ&#u6FX2(uLvIxFI%$>BsKW;59WA8Bd+`xJwWi09+(6LhJn!tCG8*vXN#m^ zvzMoj``?1EyGDbgrKbfC{@Gk;>;60a|APwRrVa1MKPbd5*xduH3W26sh|6o|~1E)+WYcq0AM(OLsP%)NZP_d>ZI7=iz+ZGS7ImZsjn>fX0UtC44W zoIR1}EgX~$fBx_1e<|?46!>2X{4WLme@+2|Y5b#0)&FBO{_o!Z|HyZNi~T=$U3PdJ zPxwvbdjDhK__r(5)ma0c5P94`!CX{&|J#ltietv>_vLBH-?K*s2F`nLc(igw)YSD@ z5H^xf>3v|!{F!?xpY+TQB$~wqxb+*;XR1e9<2LtZ$avfPj=`PT zU*6r-aCF!<{F`}(*EGrRk~6(u8Y_zJL~nb{T)>*%Ylg8^erKTxXxrlt?oXyh>rnRR z&BW?VC%?i(>{EUFQHv;ht9E(ejt@(kEX^?|MZPNu=56A(h0c$seKjs~r`|QlQh0PWr)=@5@N+WLJfRYE(jzny;-xb;V}) zy|+icCYyTJ{dj$qI`#C5-*W!2K$Q67wNoIR`Q1&Kbs~1maH4II$$}zf<$?(~GGJiR zVbA+pgID;WXr7q7DayZ0X)@hEA>nfo=SliG4bukkq?0K@&PrUH7>4L%H4^{VE6Q|I zw~@tl;y4A~+m8v=)y&g)lXms;bc@euUs1Ns(M*}Np>^H!HitMTSZT==7kPekbj6d1 zpEkQOo<+X@{rE7aQ=+8VU!s}PijwH`cSl;-F-t>esm~Ttyu;c4N+F&e+%mBi;vuJy zxq4~HmSp{ob8LyU=nXyRbMO_07Z=jCH13-;__Io9)O9Fn1aF|8=M;Pw)g}^;M=HXR~}MP}wL*qlFz}=b1{1CYv7nPIF1N z$8%8oZ$~m#tv9_glQkLOQlrH6txu`Y5n$E7o&43D*}R$Cnze;edqzv6X-_P_KI@dl z4swd{pT5Rg*_@?Z?~2j7b4%km$D~VK6ZC&RxzLe(#cE)|pTYOrlkG0E?SjhE-o89t z7oKZ2F*3zYDI|cwFEg4W7TKJu*424>S>((=xc<7z?5M~-*q=}l&AS}l8(^23K8JO? zSUw=3^QFAn^&p}i*3rL%+!n#6ya_m%vP7Ik_81>O`p9l}+hulAEH6d4&BTBBNBVnX zTLEjh(j}`+mp2BkyufMs%+#S;T~L@D?7dLe$C02&>eS_QwQVD4l5&q)FmdWvzMVp3 zT_8ds-B`nc(fQ#t`_b|eRrA2u;;VR?<>8xrs;U)paZyJPspJ~<)fokkxIc_LqE*C^ zNLy~6Io?#DrQx06A|M8~?ZgeHo*m~rsf0hwZjyEmPDuQlN4BkOWn0g~Bt2*H*Uik6 z0$`OPTeUQlO$VeYIsPhj$riv1kkfRkP*B5Bg|K|05MLew-eO z#Y^7^6?HsmCdcMb35=ipMZI#JDXA2)iy@jdg#e@9!j{X-dZSxG%`CsZek(bD{pt{7 zfpnfz*}+()Z8{O$@tK*mzRJ3|m7SI9)AX6S@}0gwtY5aUofWAQy84BTJ;kp4C=&+% zv+3Edx2XkxOVhm;_EFd7z}wV05hcqc8Hrs7|L*xxva~bz1XJWN!L~|$P@VTm+;~mv zr1S!2ebCkM+pZIEN9w2CWp-rw5;!GO_Gl2wR&mbeQYWg^XiH>YT^X-Rkd8K7(%ZsL zYcXFNwuymG3Y03+D`Xx<8o1P!EZM^TO3H)%xnnO!lB6x-bCCA0%?0A@@XHA$ z*ONk9AJ>E7Giq#M&(M0QbGMa!I1jPfh}XjImgYqos-#If&y%D;9qj4ZLMk=>uFouA zPI&V53hKMe1zJT?wx}zca(ykXag>v#E4j9`^O>~s=$%y$jxwa3rz#=CvBKpZ6n$n6 z747&9!~e`IeP=V4jpv+)y)7B~>4!agwKN`yLHE5uvI3jpnHkWX)DwwaisR8KO!4ZLAEb zH`^HLT8f3gBHtdcCLlh4A|34%@|i9Co~aVaxUOlwM|U;8l(y~a?_qW|u&`&CZS7iK z^68HV`Y&o_3nK;n(S7eOwZSiJ$j@`Damc_4X5@wPD`GeEfnf$SyI^q;`*rgwH8pfU zGRt?Uua;2GUIFH;c(K}aHVdBK*uH zvP-JM_g$9EtnVMV($On)%_n}{)51B7g>PRiXsuP~ z!m!UQ=FUHvHKR^=omcUP6g8DYv-~*jCdvBRb$1pNeLT%>^Ya{C2a6A|KO{W>sQ7E-J? zhwMys8G6`%k)Rf4bGo&wt$Z)*YY}Hq(lLU4TOzHDDtj+OR`1-h+Q`UwVc^3k9``>hte|?#FczG@->e4 zZnJQFt{Srn{k@+B>ezDRw=(ow=2J58M6!{?mzgZhh6H|0sDmt1!rVbRE9uVq27odFl(wcgb9K)f_FZ zjeRmfhP|f7#vu*~`u%of*Uek@rnJbTT*BV1!6_~s@`hcbu$S@uTJw)SEXTNG6()$l zq>J^Wv|Ni_Vh{Gzk6dRKE?0CEwE9FXU!L}t39bD3SR30hCA5`d=T&#ndrmA`K*fxN zrft@6NL{l3eQVy z&>IR$NJj0|GnO@uandVN??4aH^R&4BAs?Sm=iw^#aYu{H$f@Ltj%zQZqqR)A5RAdA z`;uqm)O0Qpwh&umg{vjTwZT=Fu1`1HfA`q) zDzmvlH5^5bMv4(Pn4z?{pU)!nUYyAAn?!@kRCP|m971}brj(30=G5kYvCMrFD z>lXD2xZIzgnX}9)Ueo^+Gs~!3sw>SL4K21LSsDB;q)qg^xxEf&0rqm!F0%00yS9qo zy|dyfSU0H!QsYvTq|F+9EkrB2wm&%eCk@&$-!qDz?Cv&e?2;Y3ak*4IVmBwD$r@bK zs2}oRSOD9GEQiiCUl$~{{83V7#kgC)WwT|ZJ3y2fFQek78B5;SAkAy6m}o!xO^f@n z?M`2!!Tl)&Lv!v%GW742hp!L*{L8hCt#WCs2w%g=X|-iot$RQSgU?-iat5(MdRgdO z^EO;;>G~nB*drB#XGHY;IDa+0wZk=vRSyV>KB=^u-)T#3B=Fct)aPiwVxO$gd^N3h zcXv~Fp}v0Wvn6W}k}rf`%JStr6UCRBI#1uD0(qO)do{#9nfMr!Jj$3T|8-mEUE*@I(HO=cQY6KyY~ z%BFNbQ;yb0!hu{Y$sy7bj zQN?3-p1VQ~*^KNaoqPEjQzy&!x^Uo`eRW7`u=CFH3}N|o~4g_a{3$yiNbo%Da-&hqt69F*ons$Q&F)gV%E$Y z>eLqt5qcz>OzFk%^c=P!cr%M58HwvhUZ!QCUpA-4_rK+Pzq>U1$thetTskhbFxFQM ziFZA`X}2)FWXgH)?hxpm21Qs?31LUHyMpMI_Djz$A=+XdFJG}ANknH%5w3D$QSR>_ z{wg*z)(1VwUJb6c+u}s%ZntZc`(DG36r_QD@G-KCxCW<+cRS5@DJJvGa4!?M$$^|w zUD;|8{K1)s6EV*ho{UZnq;VSv(OXZ+V`_SIU&_y-Km?wUuJ?d=iTr^1zpJ6X`LPNr z>g>g_J6a+AE!89MqWxA0(T4foF65dubRIo&Y4S^-TITxF14P7Uq}<`hd2YAhU-a;Y zW%E$Q^@p{ea;25JgWet=JClD7e% zx6`^NpE#;ob+xXI2qRq0%l2KctIP8*;a#<$nq|&p?}5kNpTu7=X#L5d#G>svvI!$b zebKZep;#|d#*(pXqYofNL)e+G3}B?sWaS=snm(C0{(MO4{#B}~^g;h=duSFYkAXQ+ zycy|15J5cC)eB|DD-w|^sf41%OE%#DD;QR3Yi{_(TTJ+RRvC}M9J=9#(~)g$7jW6442_MlG<0;3{YaD zAy9`U#7tyqyH;~es?pN<-H+dnr-Z)m0P%#`e)WUb^RJprO~*Z8_0yOyZvN9G>N99b>ygXz1xD<7$!%MotqPu4M$#9gLaNzaO%)k@OQeu73C_3u*WTPh7wGN)8(egWsE~GS|{kGJJoBcMkpg@4L2nhs!%axIQGQDM^cKj?SmU=#AIEC-XoB#|af|qfV0Ee5zIR z%i37+6v3Js=$BvxenIth)NSE8%OClJv;53#QbRlEu<4s#$amy3easwjZj;<$mVhUw zFsZW|rrO)c%{04?aQxXPryfMs^zxI>$GS$J9?dJ=KFK$2moD)izP&)uXzguFgtxf2 zMetwLKT4Ua=)HyEqW?QzTF)Cdk=Y9mK&DHJ`^ZUDUz&f$+F*+v*)fUGj~8hN?L4{C zdh;l941Quc#^lbRFof*h#{)_l-i)%Dam}&bKH{M7l8lKT6wOFnUB8^YWU~A^ zGybS?$d&|`VbjlgVAm+P(!EHDQPOZ{=u>91@`LtdP|SDb2BLs|r6IY}(f2nU&Q*?jFC|~Nj`KyLWbbf_3Zb$;XKrDxYh_p2%uo06Na)mk zKumg0_N?O+XmMBEoBjn4(&z3X-G*A=LYn<8aVr?Ms@&+~b!Ojgne3^vfE-5FJslqY zxT(R4j*BM|Qg%nxK#xeOyf`%a4zi)Brf`qPB_im#ak4Rys2D~nUoEKkVD!P?6`Ob0 zX=!MOY`TspzJ^l1GS&H?^f%yyT7uUrHm|YFY+>TkrKnEC+^hxl*O?0%hxl=ka{cG0 zd*B|7-qK^T`<7P7^(h9UFmG1O6>eTG(0S6`(F7-d#*$Ts`WF9acU$N(^0J!nwRts) z)w}&TFX!v-oN=~%O`DQN-zU^ZvVDyHsuC(Nq9dg{Rf6z5Hs?k|oI)6#veT?Bg2!~K z9g}Der!;+EiyG`-&?Wj6(kHvSAIP2yM#@D*{&Oh?QmL-wzS>GNZ^OL9p4=uv%@wNK z9`EtxTw-SFYlSp@5(htMhf6(sS^0ujPGkt~4ty{B`LmD~{Q|<)^2L-~*Xt^m45iks z=Som6b>V@@9TkK5+wA{)t^N6_R!nNixDz>PI&NEj&C3#&DPT?xe=XekdKWoTdVJLD zTgs>6WoQK7P6Wl>1#2Oq{jUE|oQ3)hMp^WJ&*63Gl@9uo>Ud+V5RboO*~&RRDcRC^ zRssXI%U-4azJmL|8zOiUhvNBBZzACsR32IoH9RaipZ^pRM`er_eSxUNg3D0 zYjUYuD$Z*H^_#4fxF2ylTX}y}$mx_QQq=^cs`l{LMv)Au@z?T%6MdCX7<(D=zKX1F zpxuSl!8C^GVq7eaRp(Yr^~z_qIRy6tQh z4}2-$QM~I}eERORvV8Q6KTJuM&Dz!ZY(GuhO5=Bx8X>9I7iNvkK6{NSTd==7fihZG ztELL`t+xFK=A03YfO4PN(eE~n5NWw^O^o5hvx z?l(r9zQ3&e!(AdrM&CC$qi~tPT^w(WWDqfjn|VyBUlO6fg(nLmZrGCZ-o70_IEwR9 z?1XiMm>oH^1k2b{bi=F-=AX^Yl@fq|sQ z_<289?P9XOCgAXm3VXh~1Q9d(-wV2We?!a+0AHkyu4q%iqb_=2b>IC4JpG6b%a_*> ziUm?Px0V=0_P)Vcrxp-(BWgx;1a6niPKXCu5iWJFX-t5} zc>;|EJ$5oWL?`yD21Tn=h~noxA~Hinaf?#p0I>EiU&%g&8M;_U63Y#ju($pL^SL)Bq6#MxM#s=AjjmE1?&a={eef z3fHI@WH4PUwL&W9e5N23rA z^2tqr`14SP0hHMuw{|~b2fqKlMZ%G}r(lb0`~0p)D~uUhMU{~Cd#SHAUt01J&)_H;;I&MT%KD>l=bk5&-ir8d>_{acr7 z5wWznvO)CL>tB31-^;Izzjs}D^=b(sID4f*#Mb-!{W!%2{QRj4wH%=gTU>Ki^(ji8 zSK6wg;kM?_d9vu#bhgUDyVI@rTqEUKz!;LZ#N_@Z3}cEmW?1!TFMbV*-iaxhT4Rtz5pj>B4zGj;jRlK;eZcrSp539ZLVu@Agzlz+wgr zQT<@If7!|BHMeK60HakBSvj9l!8;YDJgVyBKROawFb{z`r&4a#qzRaM8ZHpF=kD+k zLA5*QyZ&W_x^&=PvcOMZJ~JvhLl~-2PTr|yq8V=G{J|-+w|u$5{C@C<?U`3IKY1k!x0WI&@~6XK&0sO(X;ERYxk`-?opze}`ke+i}?vvIViU^Wv}3Pt)Uo zo~(sW^=$7E%a>rEYGysT3hOnNJLM#Yk}j>EQ(*6He#{yL=ND>jxIj7!q9w|f8T1;In(RLUPgj4b%zgLp7{&$M8Y)L<&H@0 zfR*|JRke3nj7oZ)nAnO2u=G}XzY&JCN-~R{Jr@m0MFY}}gAQ*u2Yh^H`}hPf!AYTf(g;kj7At`> zi}iDtNk~J)wp-90*xq{a(^q<=d2bC@+H4K2Sqr3xz`)Zcv(Vq#)uf1jUJ+$_W*l!c zupt3joK7WJ9P_9xN8+b$5;Js2BM<1?ckL=O{*#|Mo}B&A<0pRF3e;H7(KJE-eCY3< zC-N>PU?toxj+)ZN zd}aF&9u@Wlapr&cK7rG7?P_Mb?a~UgfLeKc^xm{^WLl+3=7F6@tKNj`Ruw~-eAO)G z^`S3_^#SbQv)?|(ajG7z8_kFWQ?+u?LRk4SFnA3)AbCkyaTJTR_`nD5=Ooni=`MS? z@_z5&df_h);3S%nlL%YkkgP9$%qNaht?8{fUbn5rA`?iLJj$AO7Y#-_g<`%%r%J`R z=!kT5=sKj%5VSoxB!s&EmZlrhC)d>cT-_mAG<_M;e&EJ?BN@bv<;z4_9oRu?6IuK2bfg_)|Orc;;c8=QOR5{i(K_ zB_PduY*b^~L&UZHx4&vp^2-A`dWbM<=Vp0jn;;R6|0TkD-olPUQpPwLr13%#jmz4@ ztXMi42fe7KP3n^~m`hWnVdu1?==sdhJxZ-%AWUy+a-}{YH}Fyu=5wo%RkOK0I&<0* zgkSm2*tVz-#Yr9abAM@}PL(BH-RNWl-rJWG)0`D=on@dmyK4(>S-#ECbp+S(>m-tc z;1uZ+_S^9fDS9b@*2a_KYL&<)=Xe*$ltc+5wqG@g37I0)x&zLA=}?;ucKp$1Urwrp zOs5*^Y4+T%9rV>`c(9bu7}9oHirO4s;JTge1EqSO+;tuo9}BzTm z+j$~#<*WNQF*`+Ls1~Q?TrRBVgg-k!Sxj}fn7E0NT$wswzoiU>$2M^mTzqcCUKiqYv~fX4IMEXI6_ z_O%k~L^hI?&K&A;or8847_LWzG5V<*MG4X@0kLJ#OxRqdJPXUScOiF88Y5QTuiNSW zE7J+l>)r`9MWgLMU$G6NCWVo!?_RE@QPqiT%*|~v+EZ9a`SxF-4m{l)04jH5)NN}2 zMi}ttH0cr@1R(Wf;j&8HcVw2F+}vQX2vF`$9o;gu9|dqwEiF0|p)4gSXF(Um2bjm? z= z(FTT|HBb*Ty3~_DGdT-?KGHHLJ=B=H9OgvXK7$t1X9~!bnDOgt+E%g}ioqEP-{p-Y z2(oyNK1-TW_d^9Ze6afLToMYNUTU^6R{3(D!&_63!yy@=s5h22IVK=V(GgzO5D7)i z26XJ`)%#T1*MEHkZj^@g+7JXwRi6x%1^8=gBE_@U2n2He$JhplA#E;>ewrd-P7K)j zF~2c-F5Iv(KWiO*H!}1f7#`~nM2xuMb(2P4O~Ebw=QpckGKveonr+j6KTNi=KDBrn zmJQSHX)6dKX#GJ^Ld{?w=I}3g9ImMq%T~bgaM967MRS7jo_Zl0NdZM>4H@vk z*#bh&l`r3peZ!61Kl|Xm4Ln!LZmX47On~hsS044?-?ImNQ#nef;GMo%*}gHZz>+ehkR2IyS)GL zkMRdrs81UBgR!n{=0ieQWnhoV^cQ-7E@ykYbXr-!@*LvvI-U6#-KA&cbR(ecLva+^ z-fE|572P56endEsP3{MR^N6k)5ymYrXS-n^RkrJvuP1FF4=y;N4h~M~&iN?K!!5%- zb6OLd<;US&*v5FaN8Nmj{U-3Gss`&Y7hIkq4$_14Ij!u4%~~sBI=~pa#)M+`QD8Xy z;Wz)8cjG_{+i5NIx9)hM7=}C1Euu7c{sTJ7DcF>ZwqWXL`u4fH`^H1Xf*tn*B~Tut zr`k*ix52C}oIGY*JUtHFXwh*sQ7jZ$%JFkUn*&fi-vwQZu#W;ZPQ{FRd#a{ZDuDHx z{P9j;z0fK%-M2<@27RG`H_&hHXeM^^6k$qmFs}2ldjbUkFb+MMQ!A+p+t`tYD{#rg zkv%a=$M7H>>Yxvtx?DSmIrr8@0i1t|TN7h$cZcn1^}VKo~aiomMEY?9kQXo-wp2i=0~OD>jm* z^R&mG%^=Rw9Q49SxZn0Z>B~_v-9l^xOg-K>6-yJ?5^y2rF>|p$HWA1(b5IK|B@@^@ z_+8es4l}wAQ{t=`qE}94J4|P{#!QFXR|!>cdCzF1J=U29*Jf9%O-`9DFt9FP7;UjA zB|?|3E*zio^iT07;DXzUQ3pdK9|0FE(SV;Vs^AE(NJc&1Uhm7Pk$>^dSRSVT!Iu2p za@kH=ZR|eW++N{maevPZhUq%w#m*QQ)xlhJa=cqUvWqH>hZsMfA55A+q4!m=l=XgcBBPuJpE+CPms+< z(=-Sg%vU^@lwY3Eh7Bs4>5 z>&Lz!Gt*&6Lz7QrX26Y_^L>|QJNzw?Fmik0z32WOc|*0@%PHp_A>t0ig8&PpDULmk zpRo1+kkHY`OR`tuAY|VaNZz%9I@y|oBB5x}68B6%E+;-~2@ygz7IdIx4{+6OA2591 zCD?noG$(8HjIL25%vWQF-~O!)M&3PV-(wknYwruj=nP#9B_48uQ1f(5Pz zx(y%v8i+NZK<~NS!D3t+U`v2O*(6#&OPE*jNvIpmW(1Oi7S-p<(@MlD(G&_SIzUuO zaP^y}E(k0D%^f|CZ!jwyfz%uLCYOFS+6l4B&G>*rUZJTyMCfV-Q_kgqB4^;JH*dkG zoTN*mXS6U#jRF-q3aPu6%&av-u@x)9)o$9&(>NkuH{2hmJh`PQZ!KI1fuPasK@neU z8&2GNW(<9Zsv01ubh|Kmc@372#OKF4LfpH`J-*8+LUz24^jVq(#|_P`I3?tE64G(+ zVMZgKZwa4)()^7$oWj=T2QTK?j+JsM{@|A=2o>+u~4?|yK5#?mYvUB9V zwyV~7Cy+Q0@x(L`33NGPtlSSZS`Z&bEu)2t8p(p)Hd$?4#8EoT;|g2o+yz4wvsKh+ zPe2R1@i3>@!KU*HALosJ2J42J_qod4#fv{g67GWhGp9=lid8Z#W?z z7OQ&IF?nAg;tP`V1gCQL0_Kl_iNUSMZULL<5jBNJryPH2i#B`KXDxOLSS6I{>)BrF zk8)yfkGsy8HaGu}bad2ubJ_>-@(g1Y&1v}zp*p6_i~iNAFi1#eFH^_fx5E^?%(&<; zpF=9kVR6fR1x(!6sL%#QjO5SfG2`3fI9oOsJ}V@lPyEPe+ec3 zf|$92H${KxZZwz$J#A&!=_|LSqfeJvyjr*LefbZkb-s`Crtd17j1*%nelisW#v;40 z*)5(7eU}+^;hT#NMb8{QS{n%o>Z%B0e+XDkTS@xvyW7c0Pkwos9=RSSG!^aGD-t7~ ztE!3gtjuTg{36iKC{M^&(epYKtp?npdZ3-2H} zM4{RB?70=!W@N*@z?)k>lF|YoqxbQIYvWWKGNgx9ypx~lEke0jwLMd=!rFqrJP3sQEQ928yV3|X3))q!W7%=U8t*=>=2E5{)`S%32S z*u&ddAIOm-NlA|t(}Z0|dp@992>oMqp~IBDXP~L$hUCsIj8*Ai*~X5$UY-gu;{4Yp z(~P+zyC(InGLI4)%PI3KHqOY7hH<8}$H69Y5k=FfMz(_|?Xb0g*w~5LESc}SL-#if zNkm7%TL9i?7Qn{Z`6pb{roMoUoUa{r8i#zzY~KP0U`R_;ET56B1CWZ-jkz~VEHVv- zcO9^S#c+5+ngOPklKkj7$+;!|S&-rIfUvLU=&>mn^e-_Zdj~wL-I%;;DD>lB)MG(# zp_;V|@-@j)PLr9F<>|5tZk9&cAsrF+7t2;u-DC~zPQi6FUWxMz?d zgg}@{Oc*5+0tpZZ35Lrg5Q0N%2aym!v~ha2V}mlOOiJPaB=B1NwIX68&~nobsK`Zx zK#cEOwQJR>swCsvtM~OE`SkX?UA`XIOl-U2 zsZExgbM|g;T0<+^?XDQcS3QAd5A0Fea{AaS4?Mm3os(Y0?hnHIGp{eb6|efmm&)7U zk8Q}gSIs(oqm}i+x4iD69pACyFAqGl=Wnmr^RgLZN=IzF;@(Y`VAt%6oBVdt$bN^M zf)d7}?_9MOqQ7Ouw>DX_mj31J;cspBwQWjg9klLCZz;X)y<@L@%gi578LU#Z?0ws; z`0OT>>D@i;g4@4w(IZ=*aKb-bzw28u9b$|5oWn~e9(wgh-tf|tn?88gy0i9f|Ky(E zH=4)&{VA$Y+`8+SQ{OQ7mY+O!=@ut_|K!Dg-fzEC-thE(v@M0hQ@=b6Kf9sv{l?kD z8}E!&(PT7;QZD%V?f$UU2LVq%0xF|}4-fBkXz4K1`!?>lb^r3_(tntyo~7HYICT?( zR%B>D{PBcs$DFz+O-BbF{+q}Dxpdpkludqd%NO=Kxb(}L;A5p}OI}&COKFa23;W2@ zS#RIyz=nBz*(xrFl2CckK#{p?c@UbkrL z(iSL1KKEJE?hD*LXaCYT6a{bjSG;k{f1b5w%z>*Bp*zBfpE+XPTky0YHUDiZ?%tSk zF06>&@#6{4m9WNys3-@Y^PbYzuOjhoo4M}nH`1CCobA2Mit9ICas=gqr8^&(@SD;X z&o+JiPv+f>qV9hA<%`Y6;C{bu*Pjt7%-`|YZeb|UP zWxEyAH(qkQc_R{xd8MBYkba**(o!#-^?7=HXu{%oo0UFC>R59B1Ghd>`r^(+^rtt! zvhDVzzfOVkm+swW#XC1P4UQ$GDchY^`l+eK{_gN~@7mG?lSxl-1DyHcm9IRo9R(2H z_uvB)?kg=Z#n`isUH73kl-&ul>wwmz~BrGfn@i!1&2jVr!cS~5s_I`xdT zH*Zlo(VXn~>J1a|#kix*@Ihz z?|%C!>xVWf{hN{S$~D*EgMGW2;p5hywo&O15t{fZBkmVAJebKpDH zUW#EVcb0zssTD(|B^C4ZacgTBrX7#cvCHvs<0U^Z!&|L=ZnM(czd*y+uYP*4v~q7l z=D_v%9`YV0y6zi(bo%zAuj;|voCdktT+ zUFn$;z2upHTld69rFZ@ly?f@TR-9B?GS(>Pq2XJ%Ej@FwdF0A<-@qf7l~9qpcH(qg z=xP-8^2l#rUpnt%qWPwYN0pXbM>cro$&nK&LrSi*&eXfZa!JFR`gMx`$r`_)!Gjc$Q8^lmuadDu~) z-rFTtu9>=7X~|MEeBAm|FnlBpzc4&uQ*Vp<3xDjuJpU#jk^M--Go&6(<2xEW8=~s z^T$&b!|6U@-uB?gojc=`S){-Ebvv)aq(HLZQ!2k=r~A&Diw?k-2kCWR-*d%Z#+0Uz z2@c$S?Il~623n+qrE5O6e`)15^u)O9X1xRqG}^m$-RCziecFKKf3CT4ztYN2&=bEL zH}P5Pb1TnYI|lDCo!`G$ed|T|Pz$m5m+RLp*u2!*j9&e%hp)M?wB$#|T|TsKCWhZm z!#l0o`hwDu$rQ5Bygahkj`$o4z5A7MD;^zF`XqIWEO~k4*>~dJWEwtZ!o)}5Tx5c0 zemwGF3?ECwKY7=R2gj6tLP+_{Wh47y__OBeJtqDTPm^VysgJz)j?yz`$~&e!@q1%R zC(;w2oUr2FF{QgH?$4XK_WM|xyr1;9`3*Z`@90UIS~I^;OA)gzi)i{F(e=Kl7V~HeSNdisk=k6CG*z&7M8w=BLApy6TdvB0Jl>cYq!Pw z4j?iwu6q8=Qt1fu#I6%RKc+N}=AeP^t((7D>5GJ+aI?*8rP8*f%TK&(#izy;Zg%Q^ zYd^OoF14k1e0cRWbMU1~GWFZ1EZ%A3(od-)W@TyQM{h4Jc_Xp+A0s#8j|b2n7mZws zKYpJ6c+kk{_~TFLkM}BxuQR$B7U^o~E?FzZh2zz}epdf&QF;)yBr#5>j;iYUI09OT4z zPnbmcDhUwz@=qN5jYv*(!7A6An>Up?{Zzkl$- z)rVa@^BwQ_!s_Mt#@6u5185|<{?JulJ?RcK2!Cn+Z|#Y1yv<)W>j7x+v0V@P?pe!! zefFG>ZgkIAj{5566H6=0#)w~i&(Nx+N8d5|>iOI5a>AU|e|=^1(yE6So({A8{>fc# zuCM;;;2pC*_H$tF;yqWOSaH^#zue^wH_f?khwXp2?8cksy!uXH#~$V%-nG*%M}BC| zRXc3|=Vds-aNa3v&xI51`@-K&d}_CwA76FlbUKUl*~1p&gvd{iz5mX~Ubp;$bB0gc zapa)uj+(UvuH#$tu?i{=YhHZcSIQ^dKIM})QD?<7w;2|HF*5s`r!2eWxUq*$rFAea z**p%f-hAzsj~_e?na}xOUbXqr)yt8m{_#^J>(H_Z^S<-p;ZJRM$z@xf@cgn{uXy#h z|N3txt^4$}#cu)mL$5mKl~@1$=0h)d!}5;~-f{fW@14BkiuHfq`Nm_fx(=@&_`YOcxU#e1H!*7>8{UeZ>ar@*yuU_!d9dlNn zeCgdwkDNaI+!s#y{);bNH1YaNUw+R=Csi+>iRtg!o$1lzpW5ZQId}bLkCR4z@#n3c z{oyuiAG>Jcv48#B1844g6RBm(cdz&eHkNL=ZSwkczxmm{YreT)*^?)Xz36MWfOpsD z7ME9CUVVPnWwWlv@^Z-!hR=kR|9->Js*Bz?_pUoWw%g0!|G|APUOemS`H$~%)lSRN zK(yrc;U*p#f8UHbFCDt;UI*-U&+}V7wa@VE8N7uiZ?pDKTmKykrn+=qX; z`*Y)~%YXgw`fvUF=eN1%-YH+5KK$P}Tf9+e`?bG*Luuvf&N%$q&wXh4BjZOtckUHG zpMs5+dmo;F@ZRk9v4^aG^~`g=wC0=VF8l1AQx>mz;jq%F)7CzK-?T2o9R(MjbHdoK z9ewRI^5U;brG&)3ho2Y_(a zIk#N(k563qpXGa=d;ak)j~lzV268Ne(2lJ?))Lp`Lc1^9lw6iVb7d2H2=WP~MmKD-byKK+QZhrc?#x#;T4_MATU(8U9be)JG!X73o@ z90s0*VBYVR_n+`zFRc3071LgOe22CF{_@y!Uj5j7AWQ2r>;AfFsr;>}SFd~N2djoo zymZ(5Xy>l<(<3atPRB;;m?fVYxe5kF_IUQ3c~@UXv-LF(FGSKXh5FRKGWZ{NLIant zy#Xfr^v_q#zk1!sP0t@nPyOebJ@+YQd#XOMZmyg6X|t-qf!_MxqpZ##YXTRXHzo+a)u zpZ^P9ftK4FAJ}@z`nT1l&K!HulN0bSN9{9lE};3C!>^wC$&nxZYWKmBzwfo*gqyE@ z^r4^s^~Nc52=l1DC!U5Uj(vKE&rFzq&6#(7X@|AzPP=;MYd4R5@e3<|LPvyG{(ktk zdzDHvo;!Z*p>JG%-;CkE?{LW%AHvRD>6t6nT?o1to;~M<30GgXe$A{$&K|z$gy&D0 zU4Q=my1S3I)5RZVj{Vpc%Rf4Pl2W1(UP~HO?zdYvTu{VEh)yNLpZ@ql~8N=|Cl_!qehv}pC_32}8 zeBwiME?Iinx2GJl<8DoJHsO@yfSP zTYA|oQ`Z0e^Y=~~`TOMMFRwWGfBpN8BQG!f+QWlLSMagfHAu%XRZM@=ZeO_k;=}Iv z;Dwi-wC^F`diCDz&Kdq&`J}rJ|MMlg-7#tDOlabF@0z$TvhI1)#@_gw@<}%ze*E*x zo|`fJ)@u&^Gt_+a$e*ry^lulfI`f7rro2W=llKpAz9+J<9lkl`sdI^uq0heYl5b8~ zzvcsve`wC{fBWJeCV%F8fBDM7U$1}UOSk^AdO&^y?JEvQanC!#Vzk&_Pv*GZQi=iH(uQRS6^O*seQ?JN2sZOr?Zb8 zd*cTujokIezdifNk-yq@)yXF;fA%LkoHXIE?>@GNc|B0;(|G;i_w8^`{dLPHy>|BS zlauavV#c*}^69Md#0f}Ymwt6{QTvExPkwIK6EJYg;b=lW~Cq2iG1B_3d@R*ROr#e^0vOh^3$1`>+cSH%7i-_+_L&w>*wR zMCWg|dMPeNS@yphtEayD6~puNwY%eYCtq;$wU5l7bjJsmKKZ8IUTdztf5#Eh+@))p z_~{>icIT9*K7Qtdr!M{8&b!^(Tz&Az{#ZEeg%59ytnQcJyyEJa|Fre;qh}0%xBNu? z$p3!N@K*4E#=}z&MfShVH?D2|=CR5RyS}{1>ZM1I{P4M#Cw>EBA_dz4i;AVEUOn@{ zH!T14^x`o^{Nf6-#Bbd9`-KNy`{-_`l+PJj zwc>_fzVD5?9)u={T7Z(sh$pw-v32A5KkPbJyOPzrLo~htN9>!Nr4O}*l?(em^ayIFy<_d(RR#0S^wyYt`c4b#XhxY_D$D zX!*Af|6jb4b#TDH`?a_p`G59GR&&2I)azf#Y5*qpN>&3htUz14Unj-VLDcyKL&`wc0?rUTr}7O1ar4 zwH`C~;-PZIgI`P(Mg}wHNpr;P3un(bebK!0hRPF;m{A@#Ys$O@b52;eXwJ-W1ACWu zoji4NW!IVG_Z=TbQpKBMk}9p$>fnlOQYp8{D3&Yh4}N4;Jj|f?jl$KmNs}uBDqnuk zbk~;T%S>;Poc<-=nS50heN}0i^t7&eFj;YMplbA0Y0$mIg~F=#PGnzUX3TrxC<=oa zRkm_mo6I;k029KDl}4k(7CE*>S@y1KfE>nDjpaCg z6+l$4*9whQ>m7|Lo?q?F^I^!E=3hB}Uu`$Qmi4b%wZoR;_|={rzc!%h3oae#U3GlJ z7%ulW9#%Cs(Hs1#DUNT(@*N)@R#QDJxQIN36xC+6T*n3PE%;+)prf&x;`(MRpD`G+ zt{4)rmZ7g^4Qv6x5N^1u-x(4^A|lOLK3mXNT{mQw;~U1{VZ_*g$C%>y=CcnyGNwVk z`A~%S9^J#5h)6Od^cxsbaeecZ3GaoYKm`mrs2H-I<@ilRBpH&}@(c;26^1lp`E0?E zm`gOqaxlMY7=s~=zB+~ks7c0p#(aRb##oN)*O0%sOs6wN))mh;WBCe$9UB@~IezbR z)#|`RU2%Iemd_Q;*wD?GgZKqs1>!e7z7(&o_YC+A)rx~TesA(s@_R}t2097rpyKyt zEMH+TV^cBXV2;8&pJ3mviz=OGoWDt9`FsIhkqE1tWqH4uC>72W?{D_z{RL;5EzO7LJQ0&#Hi!?h z8J#scw&V}D`I|fbH}x`h!^oB@UwPh--5un(yR!FG||7j*SS?S-Z2nV+tS9hL~Rr$uy<5zY`P#(h8%nq|f|; zt1m%feC&clAfF~L|{fqpaAD`T4Tx3iod+gx>|u%t0BCfkbdo3VVx zC?>W2opv7X!;n?GZ0k&w*i{s;Z^rW3A`q*q@QS^`0H@QAuP~zlEBjZL0%PbATVLX+c>r6<$w9-OI?B9F@M-6#uUTrPCN}LJ!9Zua zteCoNthTsVI|^^Gr#4?!%%^WhRT|k7>k^au40K?lQqh9I40^8|g)_vbUJ|KPvgQDa zPn9<<3VN*S8s2n^X2k(EG3&@|jNYnVgqkw0uxM{H!Q`n&=$vKE1K4C5L}kHn*7P~k z;s7cR=DblYdIVri+a#{!)pzT_HB4uQIj_E3(F(l9U@z_l<|^7oO9ikHh^YezF~>G- zbZT%F0I|qAiosr))AnU6d6izHIbJ-~IuofW>&6b(bFG&&r|mUX&{C17xj{HU;d4H7 zN?KIuvEDmv68W48ahSYwnX};A^uX5?c!lORBp|djw}NaxlQ}?Fp*hdzw8C$t=gKc> zPMz$tYQHt|IqWGK<_0~@X~o}4kJVpe){1IYV19;1YxSag1HTdhl;AX zta7k%Ic)wI<{F)aUj+?FiaL8y&z!$Umo_W5dJD~Y$&ywRu9(4InNyLZ zo)r%itX#gRdl;-0hATZ*hE1@lGb<=&Dh~V^#nn4Ie-*7fTnzTAIBi$H0+PAR*_qWV z;8jdLIF5&&i^K?4b=J?T5*wr1^t|SwoK_~T^jIf0MpY;MyizfEqkiQgRDIsGbgAcJ zF-={nQ3rFQfm-DY<~)xxwc*&PJr|6LIWKp zN};`?RgR0n9%EIV^Yd!Qq&VJn_GT`vc3kPXcudo(QroNKRgVp8)~5av-;|1DhwHI^ zY;3B|_<1E{!<&WQs^@Q74H<2>A!z1Is_KN_$e$YQoLcqfRIQ9$>A8*!o2v7DBR>>u zrc~*a6Dp=^ENr>~nUXr)=M|H&CsuU(qkpLBp|4g=uJl+=#s-AyZF$9HESH(HYQ;-L zOyxM%TF>R=BdWSZ^UBEqZythZ_2f#A1!Y8ORiEpTZD-^mK5ssPnEJ8MTW?!RhBw{Y zvLeCbtN5_J?c&8 zEhiSLC_B0Z>VSv6TCKU#bFuj-H4^fQ%_v4X&T3vHXyxWg&-Lb`uvpOY%Dj3r@rK@G>tO^NBA0jqXtOI zoZ%O4a}aQeUq@Oi273vEX(-|<1_j{t%v)zF#T2OVMuR=_rX{@9ys|Ut4HH{DT>&mN z-g;dqKyO+gAfXF|)NP7(mX1w*y(u*YU(viWlaeP7iO&0sb*D8nOW$p z*Eo1@LT7oUXSjA93L~q&>ulO2u%<#=Uf~(wtg@!f2*`|kn-Rd8YS6s0 zGv?bmRAjW)*=49|Rp(+bUu%=6PS+XBnhq#0vL$D)k)Udd%dw~RTydVB(pg>*kf#;f zMuDf1zYErS4Fa&HdRkt&8Envnpa~c=x|!|W+|=4Tajj$9%Vgk#oken0D=`;?`Fevz z)pbi=eHj^Dhchq#*6PdEp6kog_15QVUVWL;4yQGrH*Iau^Z8@&rdu?7HsCG5!A^mr zs+E_E!JaItu3GYn%M_y;XIgQ&+H-Mvx_H2K})x5GY#VEH}cpXPot*l%O=Iad>RrfsdipmtDDrZ_8^mslQG1}7e z$?T%C%9~bHuJ%||HoU1ZnpalF0;i5@iiuILJG+WmLN2S!U{4m+y4$LGMPrhVQF*$4MxXAd2{r=sT~jP^>RjXtc+)bYo=+-+H+A*W%$gCfp*M(~A!E^|w|dcv z%GDmvDo>s|;~>@9@@mT1&l|LxMHTPbn5tG&E(Y_RZQ3NTrt2-Qs0^Ly%xRI(b5WU? z(>0gXct=KcU4fliT2-qm7lZklBcrPRmRD3Jy}8Q;z0EAGs9ZIJ`K*yq6T1v~Rb}!x zl{sx%=((y)%&D5oDl1byP^XeNkgihm)>m3tx!U6aW-_X}(SQy3(E+XsJT4mtSpmJ^#y$`tGHZ6$Y{*LQ6zK4V7}f8 z<}{2WnvNRBq`i@{!*(~X*wC>iGH>PAGWchsq-RhNsweBLHcJx-hKYgx7B zDyFv1rEHzOt(sO_E(Y^Cn>OhMB6*96)%HRt7B-GUAbET{gYCYGJ zPt?=gT3$UFD;&}nL7C5)=J`DyVurp{zt20tj1>fFEappDCD(ecCZDM1khQ$y%g~tX zd-7vaJHA{qgFX3}mZj0XQ=_NeHR!CvnHQB>HM!PfH5pNvNYauuzM47IJbl!UA=KiM zp4&Oee?ux4%YOsKqGzZL;2|~DmgZJ%jcnQpG?-z@_FdnCzF-3d>;Dt$z(+=pNGDEGFkb`<{>V0_3o3&8dp9K zefwmxmX*&#-#(eFS>^N4w@)UkQ~5mf?UTtWR5lNB(W!TzOjeundFb0GlXazh9{Tpl zWc?_ghrWF>StrWpp>Ll|7KE~Sh|d)E?vu&7Pd*QQ`(*OaU_K9h`((0?lg~rnKA9}n zLl|R$20S=-Vfg$Mo`f=-VfgRg-)k`t`|rvN)2< z1J?6>uCvf1+V>m!^~rj&*paV?etoi@tZC%)(63L{lPBZydFb0GlU0gr9^wOUJ>z6O zS&hi&p>Ll|o@mSGp>Ll|))(@5=-Vf8w57kDoO)b5=-nTZRfB9jnCd}4`%!caa-VvL z%K{sqhko}b>BFi0O40BBB;7FCFAshDWW1^0yDgIY`Pn`hZ{KeK4}JS&eC}%lc<9?F z;{#qBz(e0Y86V`@03Q1G$@mkIz4Op_9jD%R9f!Wg)Ms?Zw|s7Z9{Tpl_^{Om@X)tU z#)qmlfQP<)GQOL$cOLq#5_Fc!R$H##-z!rV`WPI#r19<4$C*$Kiz4Op_9jD%R9jD%R9j6{2 z*VzC)^o^78U5^{UL*G6bAHUfE9{Tpl_>@iWJoH`1srOySsrOySsmG^gHb4)3`(%7L zW&?QW+b84e6*qu~zI`%2?9ww2gMHU=aL%I7d6N#h^*8g<_geKg3>GI{M(qNnFVXh< zhE)EL&qFFM^52l!Bh7z9DlYQhklG{7e?uxR^52lEC1t-Mxo@BUhQ56=xo@A(L*G7` z?Bmbpp>Ll|_Uz~L(6>(}yYusT=-Vfg`}Wy9B=_y}-_SQsCim_0dFUG_ll%7hJoJr| z$$k5L9{R?~;D7$>gnR`8@QElgZoB@_FbRC-HHaKJ%#L zzJ0b7$$k6$H}vh3$$k5L9{TplLc_?%U_{&^Jyd z_wDm}=o=@K`}Wy9B=_y}-_SQsCim_0dFUG_ljkq;dFUG_ljkq;dFUG_ljkq;dFU4> z8_9k9Tpn;kZl5bP-2dD68~XLhM)Lecz8?DZ$wu=0MLrMx`eY+{{vw};zI`%z{vw-) zzUw%RzUw%R_`^c3rj{>7zjJpZzUFBIc<6WTZkSu1v~vgfdgyoVZY0lNWb@E>9jB2z zf055a-#D2(f055a-#(ceSI!+^b{vulseb;ds$@3TaJoN38$@3TaJoN38$@3Ta zJoN38$@3T4JoH`1Y4lykX(Z2Io|?%`HO5R`mW+?uHcVT<}EsZsNCSM8caB9cJS9}vlq?9qYbma zj61<695eUgp>oT>J^gi3+3bfzw}lt4+9skyVa1CM}V~xr9FaDQ)gF9OXst^pf>kibdko3+*t55(vLy9oJ#aIIyiu62w zZfG~?{dli=e@Zd5tR+dUV)(DD7-J5r3EFEEn(&v!fhI^YmWZ@q%tX?W21pvK0g`~s zYPh7|5ckkXlg99z`7LP#<0M&V@`Skw8a=7_uTCl}3fb36d;s1wcflNE)JD)AA4;Wg zO3p{ps7_e-y^wMM$5zWEHuP7=7Hc1DS(Zb#{2W5CRjYW)sN%Kk`-IVsYQt>42UJ-* z#`hcitq9VMsa_t8m&KFcJm6s!Y~Q2nDj;52m2a?)jemcKpH0ejY65t}@Rv(GY%;7N0+ zpu{CXkg_PLSvH=f$Z!P`mYP4kG=mygnnb8sCQ)eC=>Q}&{|Jg?l0-A1S=L!k5hogbu}~x2GKnfG2W;rZb+^Y-f@*+cvS!8jeRN5rl;!VKvJ-fE22K zbO)SPLbL33Ry7S=4Y2%a>A3d)l*j<5nzG;8%|HS0J6 z3C*E``em9#s97dqeU^0q5}JPm1x`r;drQ+Oq{ zS|4VxNNJg4)$-MuZcLx65WhQOk@fLk>Br8PR?Ey4#8;h+2GbzqlL@uVm~N%%M5O6f z71DGEA|hj6uV|UQ(Q284CZT1{vaK&WZA>bg4pzYzy}i5m*rZUj%*M1@X0AX+bu#+* zJTjq{nT*vk>jGpnPznmzx-TczYNl}A@nv2Yq!7c@nCWrL7qbbzG$#wn;t9SqEjwct zT6SE4j0Q|W?YujgK+BFyA&t|;q%v=n1^5>f*mW|AbsMjREMl0`jz)|6ikR0mR?Ch} z@TECfP_|F-rD~aTC#&U7D4WL8IAnq|n%&8ST4pj<%M2ipM)jFAFkyL^*cfY?qQB?I z955-g;JCFsF^k|yb+9yw8J<+_TH$P7!RtcWC*!@O(7TAR4i!F)P_<0MiqQ#2e47!k z6DCZ<5z#R3mPpL&P3yg;ub_+f^4gKTmw6$*^=F`(uoLAQjYkpN)RA<=PMUgV|#*fcYAm~uQqa9(7F zf|F;by$ZW{W{wM#>kMd>+X>hTFKt2^^uXve0_8dyh37ggkQ}O$q_d()F)B1LKNb7s zO6%Fc=8?IQp;Lz-jSTt%nD_RYEam#DTP{V2b@##=D zW!7COIt~>JkM<&ympvibG$h4j%@#$9EC;K#wI?kn=^@!PO2uT&`aMCGcQx3UEIf?K z*&i}O3T6%Sx3t=8d?Q?G~LOD z;J{fz;kvH6T1e~4U?9tBOQ_^D9{EZpPd0#=l9n;al4aqEtTyolC$GCpYc_~eWLbDi zwv#qgIK>O49R;;GZ-BI2mCS)^$+GYyt?E)VI65qmlDkUFfojRJ@I+R1seF{`hK9VM z#h%QdPSbV7q9gJY=N zJY*vH@2Xr5&ccnH;6zq)qo8jqEh&)=6DW?x0*B2Zd{0^rnbdvp;Lv`WEV)uwvK*XN zS{9z9Rb7b&M@Ob^&~J|Vdy=vqh@|RDnW#iNs;PkCz_e1b&>+d49J&%cKf09NAm3aj z;7RGB5xZ1KG7pWq!98!ra*VRjB&D@$Kr-lZOS@1vsPE+CCLwh~6G_c|g0{FcNgd`3 z<2fmbhUPCpfX_CQg7L(*?v?N(*C|2Fy4z7+! zlMJvuCK)C~MhG%3k<@0g;Ew1t$pG~tk}QgaAXcU!sku*ZIYpXefO;{>aJgoLU@0{S z3U0GVlMGUXn55O7mC^}Kiq#M)xVE}il7+t*uB}+=-ga<7Mo0sFo~d0|E=DluaUj@v zRDd3Pt#xA70|Zw$wu5h;DopYAia&KbV6`~QED;UWh0+LQ1m`81O2aDGgB*2BJNRyD zAO|(U2Fh)9W)yQ*2idHcQJDMGjN-Z^EmK|wsP1V8SAi%@S-}J7?qf_^^ zgO9bQX#}%YOd~`grxYTop-^zUNSb7TLJ>(05ROk@O3j7L^Xj}=nAd7DK%tmqh(fM~ zout%ID7be#EoCrO$0RxW3V(4z6G;t)f(uX5B!fvTCdoc&NwUx&scv4UTekzn29sD! zl4H}7WTAD+G`N77{Ghg*%K{TP`HElmTQ{U?b%|mv-Wg65>twk6|dLr zX_(UHHRm(No*kBmhT=2D1EbRj?HS;CM+-zlft^C`G!64^QL=2go^msHwz%$?m^)ho zoF!O`Gml_O+r=(k--Rhfxg7&qs^`k;pJ*l^Y7q2DHj$mWYPxRrEkwxm*_YVIgvo7SGFA zoK&@a=~i$9PzXIFhe@my<+AS;p3C!M%5yvI)P#o}9*HT{tGZ(q3htsFTnIu)RVdf7 zL^L$7G7qGc%QQmeMoz+7AR3yJq?@u0=9*kfDwn5x>$!X|E2&(LQ5#OoBQd3Um3e(y zaIMY1m?7`Hgzkw4M}AIp^jzR0Wj1mc0 zFxMHm1f`<~VoLR@?pURD`WJ$Dp35u|4b`h?Fl|7l5h^!y64$6rG*l<)4m~DiSCq@X zXO+wGkx(w@LPfUF(F2&$cC1?_T}unj&He%AIs;nIWtNDB20iKKY~xi-BUCN}x%FJu z0@2W%B;B2DXqd%`RIckBE|kkjUJ4dm1G8m{c_gMZuS)lG7fflG>kL>Z*Re!2G_Nub zqz%Xo|ABHHjY1Bm1<=s;pj+w2Y$J!>@!#U?)MBn{o=$l#$EanBvt(jQ^D6WDwBTCH ze<4T*792}NL-nfe(8Dx>=!l%eX@O{{PLhTmWFvG=KDCfAcW{w3)_XZdQVQlcwF>qo z9NusBs{*ayim!0Oag3=R%!afc%xpmcyyF?tp$BwB#&kk2W;#|LFB-LN>Q-=Fm@bbo zq=X4x3Rp$EcHxAgIjgrA%qu9$7kS?_P=I-TcLl%;L`!-hP{*4cTSQ0mv~*MUAS;^b zgdQC_j?)Iw(I6?^mF?&x78tI}yzppVx}@;9(@t%2U}Ip?2N>gBtx(bA^4%2;MMyJ~idH?1 z2D>XjT?{ybT17KkqyW{^=z%;sp`tlswem2M;1n; zu}8RXnd(#*YTAx>@p@fw!<04!czqf*ZHv1VT=W+jkX~w{!e$n}r0jbZ9{8^*NjZM3 zr0mErG3WH5iRpc5NqM#py{ZGcHC}y$FHK_(N$OASo}|2|VQuREnvm4>6I)4rrZh)0 z?@LRnPV44g#3Em)agr8Dn(ojZBuV|b)t8iK$HJz((IU~vipDl2BWm!IZrCok(A?Fj z4=?3>Efg)C3ZXLX-_S)DSkVPka2Dn2COeLQH`hJ+$CG`PFf>_}@L$>ZuIy>hvNFJ7 zTSPQ2kSY)p`9_VWs!$qwp>BQbF8n`ql~>E$4@o|0HN_EbHRWGwR%0*@Rgpkk@7%a= z7=~6$j{oY&v871!S^^S$RV;u#?K-gBOSW3(ib|&jI0WLHmLnj4G^ zX5=a;?{eck$*RBVmiTVr>>0Hg0!(fS9s637Mja zz6(>Da-GGj0U4`_h6cWd=h0~d%5^jfMIF=&-*T_fqa4kye;gyWHz(!eSBYMnq$%yCLFj(3<@xy%yL(4Z%{4>e6A z$o(7*>m;lNqG630Dz`iIB-X^d$815i(+gf4ijQG|cYkeq?|3ApG^{eOPg|VV!=dN0 z0Sj1gED;S2db;$ZBQk1CBUCQaD3t58Kr}SyF>%ovlcj!qJ<9Gv~ zJ(uGnfw{b`ZavrWNK9$TRF@8Q@+!4Z<_u_+%PbKM4SKq?r28~N12T|XWQG&Jbx z(t}Pk62&;zfn9hm*9uae>pGh)Q_LeVrD0WONu2Zn*dXtS>h3wL)ZkW=P>kMd>>xZmW zLJ+cDI@Ns|f#*6Jg>s!1pj^h^kVbdtp=L#YiR)zy<|B{O-NKCvFiG#_IJJyy>IbIT; z?Dh^UW6URcfc>QJFlCkN3*IrHRjwDl451;7G#rsv zF&6s~(xG9M>qR2ta!4Z$MMOi#;Wk&K3mk68?d`&IIZiE8-c}+{N+DBe+%in5%4N{C z%Jo8);W?y{h9I9ts9dID6}QOSXerb)FSNvZJ6D z=M9jytCBfTEm;<0I)^ShAJ2~8w5H0p9exj(0NgZfTBP9^NN6B;BLe?wd5A(0OARxB?uV!#b)kl&_p zz!;5tDmyoFwZrE2HaE?r7RlW3V!fDW7@Audk3+7=wYzX-Gl@XiZZ%UtguAqyXlO}N z@G0}K%t{6Y@|pd*0Ow;G9F11l9t`oBq)@ExFvKJSgT^E|8ZAi=f_T;mNz(J9YchbK zh$OcITI0FCc2cYcLFqfJf+?pKVoC#~bbEW< zzbz~9CBSqJWH5=vBsm?hQnJuQQUj%QpLd|xFg7Dwa%@_XEHshSAjd@6 z=u!sRfs@kGU@3`)2012DbsDsEH{#d~vvc08&7E-;4!FTA1qa;g#c;rCA*QSnLXV;c zx-ey(I1t=HP7ycUS4VKb@DtE54~$MDh|QP=rvz5lzF1lwWYjb|$-spi$$~~8mIgWL zc5QQ0fp1T*WXX+kY)=k`L}`NC%NUd_BSzO&38AjZyLG{73j>ZOitlabGuEEW670#i z8`7W$MyCi0Ynq06w=7w5qZ}*Op@7=$+vfH%t6aw;39bQ?d3_hA zROK@CSmiQHL_xgHW}?b?OhX*o==E6U}dD~f8|)0RRaZY^Ww zGLIy<{c~vXG!l{LYV8~y0~X44ED;SY`7sZ45nMGOhn!U|Yk_EJ(35W0HU>0_l~gV_ z$XUA(T5y!8M6+ny8PF=%4_OU*((T%X;F@wBjY1Bm1<1kp z8#sw+qf5(SaxF!p~bi1}u zu678Z%{_-K2Wx?7XwZ{x*ETdvx~?dfea|YF<0GM5ZX08!SP#UM{c~t>dVN~C+@K%e zp);UWF0({5H0VjUYZrp6p36XPJ(smWG&JZ*w`&_3CS{k(<>ogF3*4iYf(33BW92fB z#FU0r=Jjdi@*#jgxz2!vave)VLxUdk!00rBRLs#RlP$21DuAY^P{rNC^|%{Kksrcu9CNcZ{*3 znNMQO{y7NYbT4;@F>L~J2DOT2wm^sBGo(WgbXT;xxNvl=qP@suTn_1^A&DI)vB2OS zI94>rPD;@nzm_qJUF6X`DTRztXm(csFERp8a|X4FX10iq22EWqAa@GTBFE9O@-UJR z9Sxqk+&a#55{nJ)gDVt`JprD|bWP)daQnq^N~~!Kl_Ahw)x6{gRm~Om{YLLQW%9f z1w*V<)IiS)XV!?6f>xIKJW{^GJyJ#}%QKM%DMs(ewrRw|dMB}AiWhUz#OmgNO{$yq z%bc;d6KBeT&yvuUU^r948$V*JvaY=VXON8)kVY(@j2}V@87Dq@x~CqJPQfocLBAMX zI)6{tBg;zkrBmPwzaX{iWa!2tBbA+vJGaQ-XFQ>@dHL@t^Kx@rF(G@Lk^&U;vLw22 zriT)H5xrK$s&qTIxm?LlKYW3?Q;yNv{XHo#;|-g_=S&5+bjNqWnJTc;D+z2#g#MfE z=r*tQ(||x=1|e%hyg;u=;51^TFYyBZ z5n{Q&3kzF|awj9ObCBoeh!c8c+J&{**V7}t)(RWFHjPNgBIxiTtqkygX2W*0tGwu0 zbCnm^Y2v^1=f=U_nU26K7{}Nv`0rLp4W6%xIQMU_8sw0Pgh}Jv|64bC!EzkptQ`Kk zRSur$;PD{4Poxg|jp8yXdob=YN&b6>BwGmX#4#L^q~9nc3s)-K0j>deGJie<|BJ|@ zo4v?gnm&NkeP7`&LJOG{UU@QtcnTxl)aj{9TRYr5n4UW2y~+SL7cyFNTc1ao6=m}P zZpx!z=Ex7#)TPzku%e=s(*cw5(2JcRB12Ckt>J2iVOr-QCDzmgI(^@J!J75xNCRw7Rx~q4 zWYp=(G%TiF4Z$O-;fP=+!_u%mh>VpiQZ&h*CZn&yD>zVqpCN}}sNgQZv`2FfAE&a8 zRbov=u`X@!1Rb0QM2cp6T17j?h>Z2_Py^KsM(m`)nQx)y(X+7F8Mr2fk>e4mulL-~=$XIEdK8TEpP+dCZiHu$@grYfg*rPdg zk{Io}(3!Q)w%s7dN8|%UBkgKh(GZNWJz3Gr7&O4%9g(3YMkf;~n#r&>Q&BG6dEa4ARl2jU zRk~x2NU5lm?zk7ELZv%WR_RVJL`p@jbf>)|Wk`tHZDoM_ADz-UtkRy&@y+aUmQL)c zh-YYYcRzjQ=9ns+!yJT z&S8~SI>$J($Ltb&D*B~6_MIkxg39ua8$&rm;eJWleqpbVG(qflw=a{5lped17r$)# zh!p9eJE_!alKUlD>D;QAh8J!$WO#9!Ax)_0m+s_uO6L`2m>9cL4A#>fb3{r-vUCT( zAQdS+awVr1BBdgk(SxpZNRz~K?xA!F=a5QzIX53Vg)^(fnu>geMi2zkL&RDd z?Z^ihzatGWUbCW^F(RX)R=T^NY9)?L7(B7tIDHTqHTUXrA3Kpr;WqbHvZA@IF%2Qy zl*k_KSS8lfT+Pr(`+yFl+*rz(?HD66DpI98{f(lTOr+@8ZM^to$wId=^6S!=%MiTU ziFZF)Wq=zkS<`$ES6b6tVRf2jUP%QitfhPYgS#Q%+QBVlV2&43)~&e#lV(V*jTpZm zQ+H7V!xTvQ7vm_T7^*C$I6V<*6}r+V0s<*1UGa}aDx^7>nY5RJa9~8nr(fhr?H`X+ zNJn`BccYTR+0`S`X}Iz);UL?ZV0TCGJ_X>h22XhD;{yv_Pa)^hzHa5Tr+un&a5o+G&AETf0Y6 z=cAc_gk4d1gl0|)L|R3&^qB!6b@$-nwoIpR)&h}MlQZ*+(cP>&eshziBg+~9S+;qk z>^vl+!16EGP?XIv%y#yWjBOr~reBOMarbG18#0~59*VKOBeG=q(aCn7GQwt;$^bX5 z5{zhF$#{aSJ~~+f&+dxmW=$tC<2aF45iEU{An-F<%M4o#NWX@JP8=#@TC5Re^3T8>+mmZc}MDsq|Y zdo$dNGUDXq$nBU;S`W3@<0Jd#7kSK7pqh!J&{#& zuk_J^z_y90foOPj7`Mw6Mmvl zfeUz2fi-@l`R*_V3^99tq2}GPeE+Z^Ywa9KOTQRBZWCl#sVpr?r=d`R zTRNHay=j$-YfQHQ$$iObfaF$PH#M;g;+Jh7 z#&7zf_(0kKtt45FUv@K=p2(_bWjd8dmo}L0C0UM5Cd<+jSrx5J7xL(2g9%WQ<=ADi zEIpA`(JOsXe4ykoc3A?R06QU7U^91A8{4YLWPUNav_Y29k(Q-nX-PU2nbO_zg9w%Y zGCKFHfez;l3>h4m$>fz=VHq-vCQ{j$cTXLyz8*i5> zA&O_mDm1{}AEK9`(S_`XbzpEM{@@*d$ePf zSW|PZbjQ7MH9kQRc{JOT70rwh85N<@-SYvNNYPA&70vn}GAcr)yXOs=#6gV;cN8;p za0_qRqq+0eDVkX&)~r8-K4561T}?fxQE~RPigt_<85N<-6Qh#}7467aMLT^E87o;N z4Oux&#;gn!kLE67r)UnHv`2FcGi#l_%7)r;UokYgu%<$XvnMN>86yp-c~|;AdgE$* zSzM%OhJKcYvr3R*BSebsj!UQyHj$vkvStZugRbsm1-e`btTMMCs zyQg{GFtl&FQ{H)cYGK3O!%pcu1t#HzyKSA)nO)L^ihhPhcTJ!t zSsv7=IQv>p=YC>>7Y@lt6U2TVsZi;Tl=XC{7b0aPj7X8yyOT;Sa=4S&DV@VAt#poY zX3twqa@<7h(R?=wd%Dtjf?=gIbI=5PeME|$$Riagok_7&UIxkriAbf949m7)=g;5S z<;G!FIJeZMp~bZ!Fl)>zX+cH4bjLl8S9Pj1kp|eVtZXmV+1n!x&=b0{eKO(X$vxYQ zULE<1on5CNlFmvRl1+Eh2hxT6){ZPI(U(rm$Bf!_>AKtqSK(%1XJ4LulL5s&zKmjy zRnmZpV(Dgjb72@);X=hbH=@^CTStmbBNj<)+{I=n-u*@u*C1{)6!-VE#2j4K7y)Z4 z!lfJQjl_C(;uK2~TYE^B z=Px{St1ZgF?lb3}U*?IB{&v*tOBP-*RGu(n-hwmd&!rL5d3NU9qZiHrOUIo**W-%+ zSngaKcg*Z_>5Ub&Pq`RnA&;1S;p`cwFPeAW5IwK%6$GvG#j8&)kDE1R-hw$NEL=2a zJpItv2!n^sJM*mh`0vp4xu*}Ae=%x)f85Fw^u*67Pw?27aKw!AxHB$TaQe`^g$v4# z%*=7;K@W#7m^1g{y~`JY?y(DrgPG$m9Xe~?`TLwdcRnbRs*V{ti`WXDAK1Hm8l+q} zfBybw%$|S#+?nI|ow;b{f(vIaDlfR;TzdTc^8RJ>qBG|fZ?VJPYwVBCSh%P>bDa4p z{Sdz!*tfjE{Bb|`HaoJ{UNgrNp-buimGK|?*}1caPB$#ZBo)TZd-pC6ExLetrnk&H z104A8*+0+-6LVDQHyK*8#57IO8|Xi$Et)&~9HTq>+vP;*^2^7Ug?atSpsRTUhw+rX zcX|HYGln4f!t?enFCveE2^S6xEj)LFElwQw^dFLr3^srE`9lZKL%8o>es^UbSo?qa zKRzMj;fB)xJe@KVf(stL;6hNDIc~w+i^@mO9$GZ-;_AUO$M18-qJ`&9UpO>-Xf7g% zd}i;mi#z=DyagA|T{JXv9AY6u2}G_FF7rSS%9~f-FC)^*^C))8mu670j}S5XBU$VN z7tA&hUC6o5(4yH3&Icps79#D#Fb#nFnGso}kJz4yF-Tiw5|L%x% zJ&Uy!#Kz9^1 z@pOtE@kXJ@(itS3IgYTVe8B$Y4;a0|?=HIxp}qy^{C;{p7e z$;T(3h1jZ5tJG1D&-|@AI2a};7cZK7##UPlP|{k*|GNKRdyMW|qkk*@Q>7M9`cHX5 zF@`>?CS~&B7>=xCu@a3nsV^}ei+_uMAEeyce-3}HQ!ijVMk~;0Y>>Jy{IP1IRi{?e zc#KxE(U`fuEgqv@|7gr?5k+H7D)mKUEovBy$LK^(G}fj~nQ*Lat|g1cD%5lskI~7C zXsk+m5z$zU3O3Ogst{t#TsIy)XO2uqV`f`C8f#LMRW#P3?(%qyR-DmTo3>$tG1Qx> z#U&a;>$e<>{iWK(C9kobo7jAa`D;qQ!f(wNLL$26c7kZklN)^CXjFpJ5kCQ9gd8itI%F~G*+c1glMcL;<8z-(P^~kIrA08Xv|z2 z7mb-_;CM{LWwY9h@v7Rawy1m<{kBbAq2UJa)Up~q*QPUd;aGiuZWoBgOs7CJrs#m~ znG(OP(e6<6Tk|2`Xw2NH8jYDFF7X(h9gfDDRNackTGW*kjkTqX>gKy`;d6rnR7;4) zD%2AajaBKiKs+XOifK^b0j?tydckdK@_ptsQADF5ZG`(MB#jpJ8b-fuD?GQQPN8}c z`wi1<7QU}hl{}+iQ`iViV)A|FqtVg(lvqF=O}n56O!BZClLKh$1?-7V?6L zM)**(LPfpkxvHE8n>9Ki6Fpax^H$S*NillPT$>n;nZD6ztSNEgmjJbJDr=kBI5 zH@3`IF~Z-r%n93gOyXp#D*dljqlVJxw<7PXHe2S)S^C}e%qGw8}dZKbGs7f%2i|_a*l6Tsh$ziXxFISAsVYwvvo9PKDiQ)NuJvci6!`M zvE&&B5j0u~&uxLvsIgEtNWcqRL*xwM{*{;csgLB0p%=21FhUucDH7 z^xGqd(TfT2l#s`|$gpJU3BHz~(d049f zRE+(vfn-38wZ+`s!p4QrebXF+40YcGc*gI;LR9!)Q|1D#W?igPT1}k(6z?;)yF_$N z>rFJ)lsMD`l8g7XWqdT-GCnXV3qQbQChUfZLHHGbSNK({Ce{@#1iyTr`EE`qTgzNe z5{<#Yv20MFd|yk>QLQ%Jw-dduE$68AfY?uLA&n4zg>43*t9DIdXS*i#+^$PKx8<6+ z)t37L7?b|oZc2Y{x8%IqZi`$LhXn-B7!$bB#%CB~9kj8%7W*1JP2^k{6Z<(xy#>$h z0dui-U?Z4A&BXiJ_k<;C%f-2;JjSQ-dyYFDbl|FG&7{s$M5 zJY%aR_UAUXpkjY+SIh~GP%o9H$hq2R!x8qV$Xo!+8L@YWRkHMrs=4PQq+2z;KG9fJ z;4`vLfzRz~UF=6-Ow6n8s<|CGqG1lWMPo7_!m>=n2fSY3P`la|I7Hza;~K`q{zeP#?i@XG5GA`?KK5rux74cEW zLMqZTJVW{h_B(~HFrCLX!cL3u1Hir5)54gjVIV`NBaDH~+jS%+a!jmO+jUH~;yEC+ z925Ckdk}q=@pE)3g&dQ3ifv3m17$=Z2lhoJ4JcL6FrSAGb$~AuNE&jDh|E^3liRpJ zSJG(7Ic2aV@^S1KiSqoIL8;GB@LOQqq-pD94UyT(UkLQOYU8_5tdSpwv2Nmih>5F3ZW|`KSB;9 z9D)WWOkod9G?E5p>e!ZT^TE~7uK*>IhU^1qx3Rz!?`z69Z)5jCJckTWj>U0~!red| z=NJ?H5i}OZImVE%g)}fGa()_%;~Zo4IL}>o$P3m6kv;HSHI8$P)#5m(u{h2#R*&NxW9GZ_5na(+ zf#<~DA;wVjitUEfC-Pl9*NWqu#^U)LW1{Z{*|X?5p|Lp5F(&qvF;{wV`|2{zk%CAXC<+U@4H@T1i-ljIJwoWJ){=3K zed>q?CNdNbLb_WJ567!!K{$OPhj5CpWSCD53} zp?XE)5YjrK=XzD*klb4bje4AK(3r#_v|vaYVtt994?zz4e`pTzsjf!|P9 zSkg&3ni7Wwu`?g~Gv0@t5IGj-8#QD(5{GbqrjP?Ezo5}Tu`Q;7d!PhHU>Pdpz!sFG zfue|bpZUr`s28-eN*ZXc5WmIdwHQOgfEW{XUFb#Bwrj|qB@Q)3T?5aFeLaj-V;sVm z==-8E8Rt#0$BpL(Wt^jxN!X)lF8&GihlUlQD>Q!yU11AU=nCaQNkd>KW*+l-@{leH z&@TtNe^c|s0sMoJnr8RyuTk~GBrA9gIoK057U$~Z?YLCPWODflfq z3u0ZhQOOZw*hz}Uu!|((9AhHR(Rn1|9Ns7L4UCC=12^T1I7iwp@(qlMe1pD$8_R+0 zUaTuHCgL1zBVsqTA9zZn_=NOA~B+#gd`5dh- zBF-@;;vAh(Vm`;JQN%gMM4V%JB;uS7F-tjGBF?d6F5(=#5$6?bBMBNP-3fc3 zwMY0awl?GVz>-eHd8JwxaZY6+NyB_ECBRthP>48(*+iUUOw8wyOw8wKM-p+4F%joj zhKl*T0`CyILWw}gfm(vl6>14WSEwb#cvZo6oun}+;~cdFNkjAm*06Mzab81XWQ;?o zB}h3$k1*aR>f+ek5PgCeGv99sZHZcfpn+O~kOSM^LRY9I2wm0dGR{#;kTlG95F=hh zy$n2yvjy~U5}-$9Rf^ z8L|hhjubQE85>nqx=+`a18YB7?`bq!qMrfV-U8dv(jns#+seY%(B2gBf>k^KE93=Z zq8^GdndhLA5ZBM~oY+6bSSwzyA}9yqUUrO0*{~xMpCiC?HTtZSuRn~*e4~O}pdvlv zIcQ7#79DY7Owko;1W{ca6<1Mr#uz*+ejlb}!3$Cv5pPHd1%Jq?h25HB|DLM9aqj|9 zQq*-ZCiiKuy%zT<5yHkjvlvtS0DJ3#zn1V_{8sD(*DArntX2$N>fgf7p8! zG_a(LaSbb%xaSy6ujc!Hp-z!@#<7LnU6Bvb_HOKdRZNXS4tTVXqbAOs)WC9#;~2v= zf3Z$ciWdCQtS6pp#XUtR3W}p>@~~ZiasbjC->6m7^H|*93huu zq8^V50S@QJav;xmxwJC$CNSAQ-n=waYh1Tq9+hz=7X03#$rQJtShkT zri_W)n@+DvIgq}@F^I*Gm_0o@v4TUpLib{83li6-;HAn8H30VkeNvzLT_0-pJQpIjLEzX zWl51=)nvaT09N8;4QnQ0BdnRk7}iX}Mp!e+G1&`I!{-4+93h31W9F-$VN9dAD0DB+ zw8B8*EKdy`1OgMWHKL567#;fo>J`G4O^K6~BFX0@PNJ1l;tNzSd@>czez zph@Tt<#VxDii}_6Yv^zgI>iyTxc3~Z1vGg@Hb*%=KD&giDm2fC=P)sdF=#=IA*mK) z=F=8I>|@s=?x6==afS_Ja!psK%0Wy6lcV4dvw+|arIXlq>i|mmoXnB1J1OPG_PBT- z98iwQy$4iH#eM{BfeKzQ1<3b_9#IK_*;yf*p3ysR2{v#!bZ4=K#s{hD73nWJgiQKs$+SvwJCIu zl7k$>rmy&|>^H;lRWVm!=T(l;;i~w3IDjO_P`DD$DY1oRqwss#yIMm=Bk{Q{?qR`m z*gTBrA|({{DBPT-jEOUaNC@jf4xAztwnR&jm>bc7A!?O_=mU*?h>kwQIzY#mz-M%> zihWzOEyXnq1e>e{;`EHb=RrWC6%e8Jlyl&2d~qtjoZi*k8kmOtFr_ zOeX44=#~=u=zv7AUyNNiQ4>Z-x!5nE)-B;LKyo1)_VwZz#41nv8j>WTD;s)8 z&j?@nTXAm%l2h43Itb7ax<_aUp3&+eWJ5VL##6MVNgqc!KE`%h3dQ(>l9KdslnjNQ zv6UoGOMev7yQK1)Hzaifz>(0oequ6}eQ^vZ#shS1N*b7F1P%0q2;JkThkT!$laZo} z`~_K#*gr*yUiuL3K8fQJEfdm4nBIi0Q0k5266F-J*1*w2=|h8x&9M(B--lv!>>CKy z7@u(yNPKo3O{KD59+h%|8#tLJ_BYU}CU6&Dqmj6Q=}6cOZ5e{UCc3C%IRG2N53n>9 z@?t$B{Gf?LsN#KSb{1nepeM$}T`#ztP~7o>G1+H{C7rYfj#0&U-)PDG7j%`1wKLQw za!i!fq!?&xL(~>>_^ACZq5tdsEQzF6ID~Duw^Sbwyr+v`Od>o%>?H32jxv zU(m86;saK@o$IYOB(nX5@aj>dT{yV{i<`ZdwSYz?D3vaJFVV0eGq?|Q$GXM rveQssoHP4?(Vwti<~e_8_M)NUYIIZ%a9(DsEq34ikf~F)+T#BJttUdf literal 0 HcmV?d00001 diff --git a/Hardware/WeAct-EpaperModule-4.2 SchDoc.pdf b/Hardware/WeAct-EpaperModule-4.2_3.7 SchDoc.pdf similarity index 100% rename from Hardware/WeAct-EpaperModule-4.2 SchDoc.pdf rename to Hardware/WeAct-EpaperModule-4.2_3.7 SchDoc.pdf diff --git a/Images/5.png b/Images/5.png new file mode 100644 index 0000000000000000000000000000000000000000..f6655565d38aa28d200c85677741c7de81cb3abf GIT binary patch literal 119804 zcmcF~bySq?);CB=qjV!F4T3PVO1FYE(hY-zbV^Hy(ujnh(jnag3<}ac^Z-MTLk-P$ zd(Qiu_c{N(>#Xu9U@BF$( zRb#+aWh)hZ#N?N|H#{8ZQ>SXTba@`!(Qm&T_?nINua{0zCZ0dWU+-91FLT0P-23bG z)rTTJHs-%xD(yuUFBSfJ?J$;Be9rjmokH=)7kyv;x-w=`ia<&6ug{8?UI_90>kCd2 z|I_txivD$z4ieNYJ8Dh#*K^&Qt9mK?f4$~I8p^*GO!0?0GH>1cmjE$)_TT>P(|2lr z6X^f5tpE00%H4n8R;_B%W17DeS@ZDb;R|zVLeeu^C z_x?w_|2Mn*ezXd;ko(xS~Fnw0Q(g3!$u*k$EnRq*~(Y-oa`~c8UihQ;u+3_Vl_O;%f z(WWNfwKce^ibl^aii`*wKQau@?Gs-5KNpk}ZiI$I;kLV*ntZQnlTVDCRkSqww%sfw zhicOn$!SW%O93JXf2$JI2{{ zaH_7(U7Yau>FJ|Q?z)n1cGTb{n)tZk5qB_mOo+e!*LOa^Qqj<|MD_Sx3Bje(`Es>^ zi?-)3-Ec`6mGV2VR8-V@McGyz++W<=ovE-K3&RP#8Vk6(f}H8XtH1bIbesS zb}+He92|yXL^PlnT`jq^r}Bw~0V9xi+8SM=L}71Pa3XQaP3mG52{%!Yc*j7=^B|Jl zrJQbMVy+@E-kqm%`m>Uw+V-8oOSi{47gV@$zt}hkU;6Vv|6< ze{oC?$~@RNw#p{E!|=pA7(WWC`EBN%D*N+SbsQP_A!l#7^Fw+v^4qk#n7j7fGZszo zE?KpwvcCRV(TITv@vI?X83_^681CG2N~Ck=lesu93V>}|JWC#su+%ccZ!#5CanmdB z?eLc;Sq{49Fb{n6Zi+W!tW`TiOXA3Mjr{&y+&ckiKgQyJCP!DQG*N)QSv`kcI<7Yf zwWPO26J=Kwj2m4wi{68tJ=tvg{Aa)TOlo7ijGT>fzQ-Q-YYq%J42H5rk0N8(wr9UG zy1U}};b7|XnfLIH$o+V)y~M>pUeaO!sN7Rl2~d zpSyycUE>^a67apFtw2LkzTMF(2EBizXNO#?ZjxE3{h9Usfz?geK`}Vmn_U8|4_@jn zW$qZ{z4c3Hlt@v`cve8R>P7>r71AW15Or@^%q&se6{F4d8MDpxozJQtaZr25JY8wj z*A#sV2qK5wB}$q2Cx>K+=Nn|DA#&@N$ne-*zSWG==a2E3vjNX`+ovtV0UeWH=8jsf zy-^y*hxzREN+8UC4y0)pftAQ()h*^y``V5dK*kMD@|~FB)g-77yOjUPd>GbUVEyou zM_xbeL9YZ3TF_?WYm0ji@kP9TQZEF|RJa&6CN`a&#X=Q!>5V&Bzk*?BfwIQ+PQMn> zvIAd4Mjmi1v6s${K&+ALzcTWntCKw%e@+x0Jq))~uGieP?Ss@oP|SN@E~!{P*{oyP zr0ZR?>8fAfCL}B!9q}2Zd^Sp8$jx%k5w315`o?wCP};4ssi`zpG!X=O#8@k{&4@7b z-44R@C;PMP{k#OtT=B&GkgJb{J%LPDoluoyP-dfpgtpvG$b#Rlc}>rQ1v5e16gBP6 z<)je=)WA4)1i`j)bnkAITP6tu30{=tibpFqH{W`=&rYQH0; z&8tH~rlj2`azTF_Pq-4h3ej^@hQeZY1xLr2CoB<;#vq2vRe4(o3j>h{N^iy!$)A+X)d7oL{w;JBmC4jLtn%sZXK+3V$Fd9!9JS1tDrWz`vdcj7mz3dnC@tL2L$$!mSI5v_5b;Wvuf{AfiES?Qs5cLjaP z%`H%1ek)r)?4X>+nSko|!;iF_xX|Ov?2P#CJfkng#V5dHwH0ICywj2cI*5RyF6B*y zb`%8K*No|k#aStc4(brzpZ*ypC1N<(IXz$r28TcCk>icpJ`EdGp8Ffrhx-QR$;p}6 z3RxdL3P)tZi~m^tFFKMRFO>B`=|A6gc9tMd3Q z7)C+0KGBNAF!MWlHSgm9iM1`0Ko@tfZ@NIYUv7K>c3{%H0StEo`Tp*f+FER-C#Dzc zf}T90z`_`V#IXaNn3I-MI4(Oo`^p=M8oq}^Bet+p7c~MgRG+=M2pYZoRt*txeon;j zC>~)Rl;^!~k}BbY@3R!h*tqN|SMdA`YoN?a&~Wn;-R*z4F(r2te&G2wyINda6MPuP z&4-U#XyWoioZ$ENL9J9pq$ z>u2&|Z;Ss?S+BF$WOD}RCn5S}dS0Qgzg>cKf~AdQC<5?n5@4#M`!W1Hc<{D%Sp-K#Oj#kc3tNQsNHG>3&I36hDG@3*qb zw@>BWT4kbNPHlBK2mT}BYyGv4`VEPHt*WNA8uJ#brW^zCzOp^5WF*m8um*R@JX61u z526l}i8|(Y2fw}Y3bQpj3k;?cb?uv)S&o4?T1E0RXmNEv2@Sac6S<0uz8*_u3i7{4 zgnf#t`&0Q#oSj``CV~pNWCEC!Kn(p2{0yJf-4ShXouTXt&B&FXmo(2LBKXrRgnGBe z5c?;QnPG1+7F+B_OEgVb1|aBLtVWow*fnFW7GC3$J2mmR2^@V{%~z&>`JFE=HT8b> z_nltNMpL}^jl^#E@1C8b+kN0}&!7UY0D&yG*KjWDqj%m~ge7zwe-;edRyV&G&*&hj zta|=%AlKZ^{l|tuN^WZZw+}{vs5vM*C#NM1F3vfQssB00F}-N~T569Za#_eF@H5Ao zt%WpofzJ1Zg{&ArcA0eoK@W|XYLtmpfKG-8QRgmyN`al6CtYhXY!}IynHZt>1p1B6 z_-8GJ7A$;)dYYREIiv(F;1 zi6AV3f=OjJ9*=(+d-WoD3l0zw&y967W|+byz>`1TzkiQGmY>|!xE$Db;g#bsT}Y|S zAQ9o`i6A4w-3g2jKUXI%IxX>xeO<4Ldi(r%hw)7sT!xd2v_F0N38Xo{e>LAt?KCLrk(GUZAUx{ zcwM6T%<9os#{{9!??z?3RNe%UJ#Y4ANuoWG7585oiQ&KFu6JELOv1?}3P0JM!5nRN zHZawS*8c}|l@i3|5{Vxv&t6)*g3*z6NNYEz>IPyc(c4Y;h3lLyVS;mdiz$F`9B=zU z4{uh?S-%27GRMqAL}jAtahP zI1%Fo$-yZOEN z`36NNC!M*bQ>vV^Gi<;Q=wTN%*wzI8VAWvZ=6=+=_54Dr^q+C-6HxX(H@n|rc`Zo< zdDuzVIid|>SSnLK_FapK)9z^){D$R{vv1OvevK&bJmjsFqo6$h@dLGrjuvtnJLG3* z82EKkBLh_imFJ7!n+tIv(qM~$+`SVpU36$+ZB14y6S2Q&?z7MUrW5`B`xKVuw_BkK zoUJg}K86dQfwd5M*J)ZZnYODd)9o3wh|j#k2`Td~Zz%sZ07zZIbL{LTYiyz)n)myt;=ofbkdBZ#t7%DdP%cXw|UdRE;&ATUEMfl!7rXbIAmCAy1?6^Od7 zYLnQuPL#Z$xsnY@fWaCx%fx8gPM7dBZcluSzdP2!pj7wf7)ioFU(S7|^3&c%62fNd zwg!cWfU0anTI6lcYo@`qK3+htYbT)J{)@iSuCkXdJdFz;f+F@ewKKP}QIH2=PvtCE z)&?uTow+Rt5fcy`;v+XapP4&yN8;d6jzENn=Dqgfi76;4$%qaX;fxNg%sGF`@c~)g zmoF8}%mk=LYt#+Ot8pq-gj#}N-qm3=Arv1D?m>ippR4`&^`qi`y!ZArR_F(HYMtc# zMg(5!q7_W6#BsDTh)YWfVKq)yB7#6LpLze}0$hvb%a#?wXb6z|$Ggg0zMOw*!&(4Y zT|t}MyWe~cDezfl^9{a&T*(GdX}2G9_9-e#pAWRJBQ{sulmzZ+M28P5n?vt~N3WtU zg?|l9%0Pq+TO62@Zg(+Lb=xkFKF_iN@&6_~acv>4s%ztvj0C6oI%*I<@);3>bZ(ts z6GPIBI#9?Z$@!8>dDQWm#kExTP(c#6qM6TvhP4CHQwB{kkL5}%i#T(GPK}!07Weip z`UkVJ25gR?EoUle44dM0hzdiROoY`-s2E6qTwwr_9|Fyl$Pxw5XGTO|tEs6y(W(bw1%ydp7zNECS#?z&!~s z<2Mm?mis*8<2lF=p;zk-Ue`>rJIxmBI`JvQlRxNPU(c+n2DBxf;YeZ zLpqYkown3gi0Hec?Dfsfl(agwTADP*^W(8MnZ7c%A)Y&A&!Z~HwCwko3Zg8ZC!6=i zZm4sUJjwsa$a^COs6_1b{4+CGlCO>xyWT4_E-+3xA6{4kxC+E2s+lJH%DArmPZ(1e zOpl%(!o?}Vd)MrV7;p7KIyEkb++HvEEC)@wb|O12X{5YeCWG2f=bhu3WF&WjYGl8I zp6eD&mmA3|DJczILgQ&6XDB!t=BuD!_2b7myykNAxjlMCFVTSZBx=es(Gkk*^OL8YRmcOl>9RG=-zUcxSUMO zIz4G_6G45B?W-|$HEghvWp2CX1gco{IjCIuwLjAmDfz&!MJ)h*{49oz6?{l|Cjvr7 z6fv7p*Y3Y!uh`SQ5l4Nv6Q`|Xm`vL6YcqjfMeUIgBMDFunj6Og$wITUkB4V1AZb)t zxtx(|O@93`1)aEK;^2nWM3mRwY>KjJuK4|!^vL3ZCuE(=CC+Hbz{sHWM3iQ4U%((w z5m+tus`#^bv2D&Y#ri&rvlo?X72Eyf`4v8?kDc}Ji;F2zb##CHS~`WU-FsphC@p|T zL4gaDM2UH=wSiNd<8)%Z+t~S})tbOxcCcyw%#xfo#?PWo474E+DJ))18$Z*(+bDjR z9Sxzv3`wS{FkU(7uW{%mAi8Oi{(f%lVmDVGw5RgKg$7q2MAX1|;?Yn%n*_~y5(UJx`46}M~(d^TB zg9{(;Q17j5q{jmz+(O71oW27e$R`&L`lKSS6D%}(paz*4)yQ-#U#o4V{yT5xst^FP<_(X*35OI8x zkzdPl)EFBg?mU)ytfc9%R7P zaNFv~S|6WTee!9Zq}%p~kkvF*=CzalRg`b$$pkXD!{gq*B)SVhh&+8)?I=0h5-coI zGQuwW00>tPhXhx4c5h;t4TaD?`g|txPT_JR@3-aOK~_ICRfo3TO18K-naKY5VFm=m zXA=|JmIJ?2+HQWvy{A^SBP6WVBgOB#6| z3Dh_d6T{7Sc^Nk6xR}=8A(k!R{okd}N0)hn4d%s~Ub#wlwUq1C?~X=dDw7}v1v@x| zxwH6lJXEy6p_bXb8JhMZOJ)E{tK@MSnK9OGV15oqN zN~|-q;yVuX0fb(<;CT$QT_7Zl z>J)OGHl-8Oz+&nAlx%Wy>J#fSaK)dNn`=rG4WyOPQlww)kGRsavS=SSxsVr~UsPK{ ztPY$FEaAf>FNNrMzf|ms1;Bo9WLO$A`jVX)x&I`pVG!jj-OI)Pdrd_92nqezyP?HFK{RPRjp4m%;=rRm zcGF6^l0UVU_;9#*W%*&Fvkxw@3>DY!@rk50l&>3&7(Nq^K(48)idz&Axvb)GcwAig z2+M0(rYt36v{kGozq~l!^#ozz5`VT6C`dtEjt;A{sT;g;KP9uBBKAr|QtaB&iVhExDPJe6>^$>^i z6u|{4!_Ts+kSDS{@?8ZP-E zU-f*TBKDN*+V+5Br1P6SfeycNgcXoGe${$3@3od;Btj#6XrlpP5f;uGzrPirpv@Fu z$(m;@{+We_^ZCo4D;@1ye!d~D9Xodpk347}xv*W zNh(C<4+j?_rH{KhY2HiB?O)L8KT8`5o+tZx z23LORS|-OOBe=jfWHJjz$pu~=-16|SJ3kiqle_%xvKCBTD&`h9^;Y^Y&Hw#{j?R!` zQ59lmP;k!n^>c_&wTtidhCQw58*C_3$bEj}#s}h3^Z;-X_)J<*7JZ*oCYXlA;Lhsv z#pMvdgh;4RJtEpE+1X)W<@ptx`d=2aWAd~0!Wqn+x0QQ1E6FVfqq$$g6@r6=zUeT0aqCe3nm*GFmn;*KL1TkNKv1d452r|Rw~KXRhi z63R8a+_qU3?W(pihjaWv) zA&s15L}w2VO(+!Xq9z)Z0{|3f_&P~;WOcD+e7l;-X81ho@_-g{1ZTEADj|NeJsoGT zd>+QBNhiEFOYXNnHN%bHm55PX!s)S)3~`)o!Y54%$TG`&MB}}uT5f*HfH0TN26CK7 zs63x$^rrg)(!}w%cf-p7Rye)keRR<5UZGnYb%r4~{qX zdX$XG|4@!W&gEhI1ygsDNQdRImpB}^Bm0K!whc}v>Al_0Th*zq`k5KpgRy=I#7&IQ z@znc=kQJ|9fxYdeGEyv3Yet5~gem1#PtYV<_rHU5D;B=cOB+Oph}qz4#7I!Q}K5}z~be-qc_GSkky zJYZ6PVTo^6)wq`XdpiTr@srcjUxDXyHo1xNNGypz`S{S#kR+Iycb$)#Un8Efr1Dj3 zgBEnj#L0wMGVsjJEMWh8kYxIWK)|J#?D_9JnR%$?BB?11YYt67c<6J^eTS5k1rC;$nAE0$v`_}|)aRg~`qw37 z1k6ol>z4*LpII|tidMM*%>g@%%GF@~4hvbmTeF7CAZPv24oKmfwrQoxYr&AwSYuVo z?39^D3=Q3(g=<17ys-K94%fzL=*LTDO*+n68`S-qqhmH~`R>f+{NiF8ToR@z@-w$X z=$V>&4LGNKir4776|HL{ebUU}5VGSAq-!@JZocsmcD=(?6ktG

      2#3ZAYEAR_T%P zu6Th`8{|}c#+uIpS#!iIN{!U;0Q$nu*PT}b=?OUlzm^hVaNE9d#T08AExO09`tC&0 zub|(eiv|LP;gcBo+g|;hB%Ed9HCua8{0fAgkZ3vZf0d zN9>;XIG@NQ^fiDJc zPew$wK;O8TGO(P*FNsYWew8nKo^3)aDC171K7i+Xxj4pa)VZqpIor|wt_d8QH}77? zdhdVxO+E#(N-fZ-@#)tK<6v-#+XbX&_vNG1t6L`X$Lw6O9inNj8s+==qj zjHTMZrUkFK^##|=vvJ>#ftGjdKl)(S*=Zqi1Z5uxJittXLJA|}{MN=o-1ig2)83EM z4A$aDS7ah0wCrtg)y#(NnEZBB)A{3u)Oh58pndY4LF!PUC%vyxSC)&R!M&Lx{-^By zGN?oS@9Gk#F^{pZF~f<&UAmtK#2f8WK4L)^$4(=Dv(=UaO1Ib)PCptdavWim^50=W z9phL+bSd)6RyvPfYiAC$lgeqPDRD0ZUM?H9xiRfdm-laY!#$b}n=Brn7yP)m^8M*# z{7FBlPEhr7ags?eHwqJxmrk(D2`25EG*r7SjRZb&d~|+}1N4(sIFwZJQTXpny{?G? zCe8Eb&xh2tWu7^yT}!+oie9aM;COX3f9f*3Q=~{PnA30}L=;Y?DeW@H)V2S}A#?45 zZG^9t=`qo4^^`V?!&rx2U|%deMT!lkDDc~5K_J|>Dx6K=DzY$aK1q;*L>SeF0=iV0 z6T>aZKC+kTQmv!Ps2V;Y4kyyfrK0v@Z%A-Mnp8y?|G|Q|5yNK zG$aA6+t72(Ozo87nD8L?s^&=w4$yxL+jdJGYvGQhG7W++gLcElD5*0Obl?ujOPNpR zma{E{x=NYb69yGO^ohDi>G1Ce1S~!6Orqqa^7LJPd(0@5>1zSG-~-4!?n~G@^rFR% zN9m#}&S97?b8RWuf@jyV-s?8x*e&RT=mbr9Z5zr9H&Fb9UUJaKRc}Hc=sq?Gx5~&$`K6wbxDAD2M?5h@>R$)dP(Q zfct|fh8Ys$Hrr2+_;&c#+|e;qcSJg)Ncm&D?f#{cY0Q;u)zy{NB2}DiBsUMy8cONT zz>}|$6Wd+zxjHcn{C7;8?NTWLx7U1{IiKC3%g|c?DUaz&GfD}rH?4-C5KQ!95SM+f zCqO9he!$;OiF)_W77>v`#YYmY`qYf6875Z!&{K>#_?YAT{Jd#!m;+FtW9Cw(des#n z{yP)}#rxlrMd;Mj>}RSk#+YQH!(UuWOvnsOapW%OeSfHsuf^;f8}y1Qn8!TkF01v@ zqGC}YPDfT&)=;K!(R@%q(TKxF(B6+Gj+Rr#R)(zy1G1awOP}Un>6-LKOC5GovF$Pp zDgJ%9YxfzXPrF`8-wYiQ$+qDcm4s@v0aFBCGAYLI|F8seNeE5y^K5>Yf{y%?A-8{^xD=cB)>s*<*nNw zQZirOmh9Y!3g+W|H2;AI_jlj59^~f67unukS~%R&Nt9(x5YDh$c|#M?L)BfaDP)nB z!@M%BoKfo`k6*V0x>F@}Ux}+<>TV=I-=M{z4{TuR-pWp$$zE-~p=g0cG8fYYSAh^a zC%eaiBDDuPC`lM4ciX)oK-zuVl({$inU`M&ZdhX}l_OTZygviMFE?+DLiAtf?14>$ ziLgosUu+mg-OGyIMqdI5X+JIyGyq(d02zXkaizXGoM5mEMsv(8dT39=-y9^hy2_nU%te=pA=n#!||gbv$mK%ehw}sVhvzL{cN9?axn?7TECSU zw_*0I3W)(-Qw^XKm~M;OZxnHBUI5_P-1bpBZG{_~o^;L92372E{VCEFjOs1|9hlKw zjIXK!*(Es<&oCJhXFa?52YcRtKs%YM5n&IghI2F@zT__E+f6WQM%I8~01A}yKKJMJ zFM9W8Q&ElA3NI`%0UZ5Ux=rvihhq7wy3|i{8ab!?s?M{?ibn|jxg-cSWI;~EfC%!b zX;#_Fib4Ogc0S)=k5M#EbouklBZ20KhW*x+grnNveY%dkM_IXh`vIbaP$43h!OiX4 z){GFjQ|$0dZ^U6))nKy8y=RD8i5^T z?o4>xaiseX98?33WfuK^whHX%-YYcT$8RXN-U09 zUg$n=^gKZfW7?aUF#+h4o@)|SSpPTCMZJeoK;Grrac-xSK&Q9gQC`l+sg*kbV4u4b zVoJM$*+5y0OSDiE=TamIX-nQTkFb`6BsvOXW8_=Y_oCPA1PqU`h z>FJk7`-}<;)3lS_S_d=l7rd-f%`!|&*}u(OypaIqz!Wk^ZKmWD-Y+e6b9)9pb)geg z=@TLXI`Z87Cr6vNOYAfRYu?Q&DjJ`@d`h+eF&L!)P@6FKS5}3=k&zbAO^PV(A`JvhAwG zlx21)oP{gp5!7S~v?t9P>@EjJ1X*0<%Z}N5EFbct?h(8l1OsjO?kM%DHvCXQxuA^4 zWf{n^zD&n#&?~Ln%7G1ekf|5WvV~A6SeYkRS9ihoR=QIPs7 z-<6L!cX6;HAXETpAc?EeEZE_J&hng??}Bi!9}QFd8Bw*fxgM>zl;iyUM~@h6Y%40a z_?tya2m9uz<2NTo1bdO_8k;fco9iTD;Q&+lbx2!O0^QNT8Gf$MPoM?9^E0#cwoms~ zJe^!yCfe*e@e@#+)cBZc&$zZXZKk)Xs)D=ZZ<{{k+XvHoarSlqUVLk@k(n#co8%VV zmDeQ06xNLa@O@T*uUgN79>hts7Mi*yCP^Xb2hCs85ANmLS(s3jehj(?Ns`KHb#2M* z3ESEooJlH9C1|1skuNOAIN=b*~F6?Z_v2i z&+j(EB4O~7`Y#dHV7Pa)TR&b!RSzYwSANXI*>p{Z%x6M_FCyzi$qt&}&P z_;R2~k#dsV;rb8Z#tJ@T%B?oPBde%-uWga}R-f0L8kx_nZNc^KNsLn78JA0bIhV-J zPJQcdJ0m9|8SitSDZSqw`*0%LCKu9x;0Rd$MydYpR2BeS<@wRS?Sn}f`K;v(`yT{U z?w}t%TAceqPP&vZvAPCCxRqMM;X-BPQrqcI^|r&FiOi^XFnG79=KcHRJWSLiCP3Dx zkKgyRw2qR3N_aD|wQ28L=V+O(Nl%xEU`LmHNM{_b1uxK&{lUaWPl#F7q@1Lz#&7sVZ5vsIz=khqA>T=8)f< zQI6GiQ^qYm4)PM z$D7@;jHrZhhnWUSNRmt>Z)InKvw$qlV6DU0x5sGNLn3pH;0*JS>>sD#9AVPYJ8~R- zVx@UO_qG$VpX)eTXJX#LjANXG(FX1FOQU-M_fivXKUk}xE99Bf?*J2Xch_RNK+pg!{R}fNN&{10s#m1D{bhnOBQSFFej(xo zS5lJb@QB{tSm<1XrjDB0_iLOxn1LNSKw3s3(78tE@0E~CE_=BaCyg3yFBbc))z`h>Zmo3&=w>?n`^l2VH{@^%KGUYTMe14k730R28@T@I}uB_9+ z&W_W_$Y_0IL$A!W0-Qg#)E*!Lp077Pv8<3j7%Nhqak|W#isnA2-IsK`>1#z_s9dL| zwdX}`C-B^~J6eO~U)=ke&{KGa>Fm;+n{Nod#{0V1Wae}Mjf|E+txx!_ZgZV&lrrDN z4KqwXQMS!?v@r5kjC44k8DrC4na^=8S`KAXIiz#pCK6ul`w8nLJ_+ZvU`MwNd9@mQ)Z#pPah2 zo|Erk)c6BBneR#K=}12;*?`~iB-3w@;0OQRM;>kfI8};sp{`B~dV^uG_}f5ZV(@$8 zLc+v$;VWojFBW>qn_n~MF}x#0P8GfmI;A4$270qBd1hx*Tp=a0S?MkgMjp=8HmIHW`IH+nNf?m#wCC;GDAvg>ibt8>Pr_ zOpS?kB>D!hAoh-1Z-Tzh&olFrpjeK?Y`O<>`Bwt+N({<~%Di*O16FA!@dWzbI*>CP zp-2e8azRZ;Q2VVHL`xi9sXM}IL@G=g*;+@nbqeu{`0l*|38qbhVdFKPTqQTZMfN4% zbR!#8P?@s|-`*1(#<@LKS-%zxu~Fze4ZPi_n06g0^@NJWUyhi(r^py@QWa5CSD&pu zcsX71N{_>oD&=Ab*WkXLsq^0R{Tu_>6Mu57Bv{|XNJkIxOoH91pxhej9 zXE1!gl54Een(Lr*muhXznM5#8iz`QLv({anBs?nd)1*Pq-dyK+trxvMzxhy-NXaT1 z2S9+y9hM3o>y`%gSIJ#Rh!6K}9J;ZDiD%G1LR<|kqUC@t)m2=%-e8SOTnbmdqWcS! zK4f4a^GZR;LjM|$XY)l>NRjQ}G!e6K zCNPR*w>Yn-FWUq4RUR`>CmCs7qRgpdS3I8yG`i$Ne=pxnV;v zZ|C)+IKNIomhauJFXQIL=H_6Ajkb6|YM@n09zAi-sHuCqSD@9wt7QejY&XVJB%`YO zmCwBWZBCVJl8!mII`uC^yU&s}0BUY6wKDUj3#|7{B(B|lyk_>3^57;3wam;UF|4t; z2fW)_d`$*x*f<)MgTAbHJa_MZdEy2!=vQ6K@Rba=(F&hB^AMki$uCp<3 zpLQXWjGxjuGNz0)+>cw>bKx6Y+dwcS9lO+lb8%f3Yu^#?Hl}v6C1HyPUaVeb^KrL}QUZ$$5S)iPM12Dcy zO})CgudWM99n!`~fDW0XBlog)PS3^nGB+jXVjk9$3`X2RQvFZUq{5-eI0c{b>!Y@% z&nF2@{pQXA>LGUHWzxr@l;yOPPSx%w$xRWx#{AZ=>HZMeX}pKtm79IfwT+_&oc%}a zE7=8C>e&a5yHp53Y6Vu%x)|<9z8ulIF}f%?mwcycJO6n-Q;}2|7-Y!wOy|tJjGSZ%$v=mS_e>B(Th?OG_w&?dU zcb_*x%t-cL04c}WI>e`N$sj`*3!s+2&jrRUWP7uxc>T}`_)}&@a4ir{s?+01f*i4F z*Re#v6}~jelI=|I-pbbF^*+A<*iygGq0CA_=1-?)Dz7f}C!7uD06*v)sC^22dFtAl z@jl_F>Q5}2=qA10c%B0Ig_n_V<05tU7J8!Oa0-!Dv}ADpSo&uD1;9hBpROv{lOy?a zDu39gEmBIkl|i^ep(WU;sC?Eij}JbK$=*j zWOwJvja%PU$p+=$${x{}G$>Fhg2=AhNF>GB`=lI~W+5ZG4Q^0MFba=v=_*iUah_}Z z^D9}v?;*NA~U5KPC;FQ zY0`jaSXc8te)Bsa4>6?64Rm%|rk#1QVdH`j8#J3aq2`nF%Uh#GSr?2qbQv%UzdAz-x z^xaus$Mj_cFkOp8yF*Vh#tXgZrI$d{<)%@TBqAQq?R9j}fFhKN}wjz&P<*zFfy z*1ILdDM3xFW#rLe!GDS*=C*Sl{`vYo1LL0bgkAioXQFCJ);~*`QFFxuNS(&Pgc*~Q zlgFBAlx6)%u|z&#PG9SN`%FSig^=Rz3X52g1x~Tx(fq+DrhYqAFOBlP3k;LqTV2t=S7Tcy({eFiL?HT zmoM)s6{kLaF!qOR`X^){J8sNP1-OjL3;=dTmK4HXKyv?~asAIOa_Tu?@UP5J!cf8H zH839xU?meL)dzgW^_f3A?Xnvkew}BS{xYv>%lws7n|X7@VCJ`q-&0_baCzL{U0)>! zFW@ro5z>_PM?3~nLCrz^l)g}4ZcsLaJChTrO#s5N3V1X*b*)flC$7Dfk5}U;Jpq_W zO}%$5HCkxv3{V~10~UyA#ZouasitRpdI4(jD%ox=Ya||!$s*DBh|W;HZ2|2+JEfbh z*5E$pXV>D}at;rvU%AV?YCS2C&o~7*4wR;T`;-wC0}`tS=2{PmUInzE_hJVfS8&6g z=I9yaoNXSF`fkrbXIuQ_+oiZ(3i*>|$p-mP%4SGu=Os;9zp-x*Kvyr{=YP(Y}af>Wq1y z@or5ixmUVgVhC+9Z6w3smhoey||X!2;tkJQMc=7aI00f(7vpr@19p-g1A zu4+H}a8A=IH!f~ivSLk`-b39`^j19h!cr38Wk~X7RImsvy#oI<4ay)xehPrH+X?cq z6g6iQ`=)7^fQyt%*(L4R-R2yBo%>#Rr&k&&mX$F1`>2+LpeZWlIw|>c{Lfwby@47^ zO1W`k%wSr`*_BD$Y#}NoeBxZ#lLHx8lVu_}_+=s!FenhiP|gt{P0G&dp`svw6xTOp z>hY$pxk(Dgw8>$_5)fJmD7~alv3~iQm6{~_n<+zf$vZG)t@a!I=TtmU`pY^$783&` zt>b&n_i&)dLm4w%MQ?wHQXL>dgUUp!01#Z}3@ccl&nU){F4Jxu^k=p)6U6YiGl>`y zb9lLzwDb|+|2C8Hg#>RfEAeGZ;Xy>p^qjIwRA&k5ochL9EOy@LXT1UH=@Q6OU@m2@ z@Enw@weay9{2^(VczHsbmX`f`vs9iIP-mAJ2w=eyr5l)DmB*^=(<+oG!Mx7$%>6dJ zVl;4;&&5J}dII$;4SV_w%oJT+Ny=ux91KJU9^ZYFpnXG*=3@K0d%k>!K2Mw4bX$HUAzZyW+g;=bGT-uX?Gq4@}ifY)v8VCQA8HXzIwYb2T-c?dkF|)d`eF^c{r& z#QRdzkISmMLZ&~Z#WndC25BWiP+e_pp}v}aM@0kgxV?>y0r`l3ilkyzOJgu24CnU0sH;_JxPFY#rD|HIN*M@9X8U*7^05mdSnB$QS<^@F5@ z(w))_-7$y=NQ+39(kb2D4Z_d^3@{8x3`5rt&*l4j{$MQ^f~a%nyze=C@7FnU|NMGH zC`(sP)bHH&{BT2!+xsh>oelNC%{$5ndj8C&d){Qhr>D3KzTh`?m^hbw(GH*Yo^Ixq z$_B}>3E{s6)uu1#n@=>;uuU!3Q`ecn-_WA&1u&@1c#BzrP3b5oxrG-#>v5YY{0=%H z-HD8MZu_VGH|89Kb9QlZw#N@u0dFzPD-v;aUrETOee-q8h3l)l47WuIs<`b($_e53 z@?wXn1$R46E#>4q-X>4*UC_j?v03h z=9YA@#CAVb>jjRewMcQXlhIB&WycB=wHM^6;}KACRqfXLpSQ(T_wYE+-QPbOK{Avw z^tC!{d>gbL|LsQOlT9 z67yrTo$rxzW$o+Zs4bzZpOvBSzpcj?jfPaDqxgB1@Ibn7-gj%*4qow~717(_bx?mi z{xL$#nnZXOeq-Mtx;`LOmR$Fx;e4yQSDX+AXWYPq}C{FrxmoS+>&V|2j$}4Cne)d)fG5Nt&{bm=Ec(%9!1hw zN=(rzattqoa}=R&qG|x~<)9CyO1M0F?fD`*A9n+yKAxG1;%3lUje=>f6x#*2#Y+ zi?eu@5+zs@TpZFuOy2!Bu9^{KP35_Od!w6LnNi`|Cj`K(cjs2+HbP(~kMHZmNPixx z==Qfu>GH%|=J|QfX=k@0M#wS9LQ(NzZ*sn9dx`A9_XIBep=1r)M1doh`Sb>(ng;PQ z*RiKzVZMsjYc4A*C+#1k-(9WV3AhDDIwsqfg5xDFOvOF@p0L6z+S<;3&r5;akBy%P zNl}4R(Y=FlS_YkcNR@1pPS>6KEwcT6cc4ME4yO;N8bRA@+IgPw@SVVpRqS5_D#7WK-x;ZZFJzh}Jt z-R#_ABQc#(=JW3zhFB za}t@CgsAXBHuzm|6s8kH4LgN@%dUUDCA4({yLQQ^xxYh0s7ZL~PDspt?NO|;=|T7? z>*)Hc9AebUCb@@RsrVAplwtLd=V)gkWnyB&CSYwuT#7w>O6us1D24x;JAbYp@7nFa z;Bki~<2z8Jp%(~Hg>L305enk$gR~OH3`Lq8=54=zS6NS|1JASOJwY8_Z`=Q#*9|UO zqg-c>Togh2cVd?O`_CT(9bPVH5;CX-Fn?G$G%&a|Fu>bCcjG{Y$YGXV7zixwv&F1Qcsl<1QDf?%UQ=H+mMmgyilYNNkCB6IEXf2*uVU|LN7{xx~NQzH+7d=H8QZ2^+G3`$?ix@)7j29-I3T zvq{z>ateRyKSKQ^Z%1{vS=hRNc1!UUQVcv5ip}<9o%MSA<=Mkdwv-)%&Moo^yFcQ! z{6$lwFoy2#q+Y(|;1IG{BZ_*@su!i+yu02??*2cp0VqeInV6Kp*4{;BHj?K{C)4%l zU=s>YF~fAfi`yLV9xYwxH@V7T-)Odhcy4X|Ncb|MQch8k<#9z(332*2rA*qe^HXj2 zE1xx2kqt>lp1aXB3N|+Q*WOE*RTTPGCxb-0TDjj@rdwQ6u>5~IsOu3hH1RkWoSC7B zv*A&ren+3x=?bzKlN(-WuE7fHu|k~Emfd@g#;I2Jx+?v!7E{H#Bb%uA?m9;fASTq= z4`zxLu4BG;p!CXG*+)t?HdO6zj=DoVv{0L)AK28VGrCpnrex@9BP8*p)-LVix(&)*@Eh#CnDNzZ=dM>C>sND*$@c3fw1~wbFg*7GWzR;&lBWc9qiBwMW zp&B)`(Ct3(XB1yf^?ZIS1r8vNo&Y4r%SgwCnAO-To5%BY@-Pwf^@(t$ z*`na)_QRJQEBhzL#g49%1E|AISm^*HoUH3=X|<|yq;#eQ{6tUjMM?Be?3*_F*M0PE z$2c0$;3zsT(+Oi&(D|qOp6h({UwlW%uN?B$w<6qj#I|2v3g#rLlb z8aYkNVQ8QzWJiqQ-@~(0Bo?!eT^Z+54(WfR=-7A+NdFeKI0mkbL=JijbJ~FbDpk&IbCCNRJ5S7cYYNi{g3L^O8u& z$xMT!?6ea!kVqw1c7Fb6BmeXC`qnEsU}ZDgfqpY)>uca=2WiQZ0U?lRt1(A9H?ncC zF*kpd5;G*KpM~>y;LDmxPT%_dJ+jk!$-VJ7pZ+W(?aNr8V)3u?CROM4u)#ET84svp zy>_#_ho)K|g)NmYhp3iE&n7oj$!1lqM3&nF8S_!dV%6^+XnJ0n8x(vu7|p)An2FJ_ zw}t;U+eY?kKUzQ^PiQAS^46x0@Sx67as3^(&?Qz1(xB%o?)x1mYL{ZjFw0!@I$#gAD z%cU7q1(+Z|a8g88WA^ri4*M=(h<_ zQ0{$si@*O6V3iiv=@~WDpG>{-=ci@C@#+R+z(of&QUKhTE5-?-=dB~tyXNIK^LYNe zdv6a9^ZIBo`UZo;8Z8pN%$nLmdvZZ+bl`NxxP&GO+I?_vSa9QAQ7f?*Iq-bNdFQL^8ia_u!~x5AZ{T zPU{_PhXY%lw3dGKsMbKHmy33V;}fX==ekp?a1y$65>P=iK4Q~r*zSm$y6Aa&<$%9K*G>ww%63a`Ow;HcFFYYx$_?UrS;JIE*x+1v1d z%gH;ds#2|O$0*e=U&Pb6Owy#+H9vd?XBmNv=Ldw7FX}|+#N)pCq_O&j;WLmV_Dm5x z1Pbr(l8}a2Cu$zlFfxWv!Fbp>UW)zg{5F6-F7rk`{nPUABL771-O9kiSqbeuWooyl z#KF*(K?npcKjUaRXQG&855c+h1u%hBur-5Id6kvLT>0zD-|sf5I0D6FrJdJe=uaN zc)3Zu16`8O^*xtZcC70m;_}NOix$7+(5oRWV`5G5YP}qqM?hELFET)zO#2}8s0fp< zGe+~q$miNtaQkH+T$m!Fy6o}AM_wv+#i3C|bGM?q76cpKLI02kUEDNk1({^NSa2Xb z#5!}g7Lks39T8s*bj zT8Mn?v3I6_hnB9YY92-padr1(z=z34@5u1?X=Cyt{cv*a96M$s@p!%FV+#=qkaj|EGUH?Hb<@TA z_AdS*RhuSc$>VbdT%A`ECc1`X#TAXLaWlAPa ziSri>c{G#X=9_NSO0-1GcQ7dD$rnft)yy-{>UP7brS8;9)FUb13CEMB z4Y_Rs4}!cYQORNwO z2Xu-wcM-J`$b##ZUN3UPo{1z$Smo#w;2`mxHk%9jaGwz4{~Qd4a4Ri`e|ZgBG+oX; z6gxS+1gXP3;F8u}PA2!@BbaF@`M$*^9GOQ)`~E-GSJTmFc%{wPk7_TGZ}$(}c~RGI zGUzcV?wh-cjqVVe=4Wkt(Bw}Rir5xXElmGj9{CL^{_H-UE$=qxP$iMIzdrrT#Cr%U z5XZSjtTeS5$6-|S++uXpFDKV991sGl=VayOc~b;5>0JyLqw?XF4hY@G_9q3a^9!W^ zwhCoSTR0L=WaBK(PJZu0ZgJ{X-~OgU+f@0vb%z|Glv4f8D+6KFXtCay?7eSUd2sSu z-vHsycqGqbwRf3HJ7oBwtxi^Vo!&F|oXPnLlUw)oq05rytLCOZnoOsxyaBvBG=|QTU z8pg*%0HR0iJ;e9#{hQ5`9Bnz5u#BYXi(g?>gmJ)YgG|6AjPNElaDlLdHJ>a;h@B~3 zIl=j3rfauXN_`P1cH9K+mriBD_d)S%a1?sy>&r;Ih)tGJN{*@a#vwxZuxsgiumgVG z`gmp3a-_V`J{WN?_hm(y&y=(NNNG;H(Gn1T2QShox*7R-A0P!3cwXA5Z?SMK4imvz zO^%Bx!CW+tq4XYsV`JO0^NQ;f&2P%!fZna8ofH|D`TnebQkq^5>y)ml~qdatE?|6_c(KK#t~h-ziULmWF?0|DWyaL^MX zl#>)=EjTIpR;~8kSC^bIfU%=~^VqZ52ei`ewbN&*(Sdq>3eAMz!86sk(JJ z!F-CID_Q>|IQKre+DZd0%%xXRHs_8)AgPK1*$WDA+S6Zh^uaB$SC#o&Se0xE>%`4m z+1__ho$t}sZ-nfSM7o~yEK1`GcJL={*8h1Yr%Vlt6~pxhk{>ar@>M+p=gn$%LTXLb zF%kEH6QO1?XFHFv90J$XF1Bs+h?#^W#Kx_E?cfYpt&HhBx4p@SLZ9tXp`-Rllzb1Yjv3lEtzAX^v~5r8dq)@!W=T@*khj zm6F42Lcyqmgy2cW_cuWOgc`jV)~f+MS4UK;ogD)wXIkBxaI~ z-5>)%>Yz`j9HIT9;Rp8~`6TH)5t5`aRWDk`IpSsqut6Wo%|CrDI;A8+`AzGrC-s|iQY@k$>b zLtHoKLStkfu~feWp^pspM5=v;RL+!b??0;hmX2~o7 z@4@6RsubI`+E5E|YFt=dvtMr(G;BvhX<>Xo9|Cv*eXbL_+5q5^1|hLeYnN9K0o$lV zPXK7OEx-zSfZe9w^E7A_lld<*gcujh2%W$G*lfd`R9c`^r%H4}K_t4HRyT;TF%wvm ziP^i}%gcv~1T{HpQseMDZhY;>*Dt#YtW=_m8P<`dp*GVxOHkXRJ`kCCiechkl3 z|G+2vhKVYiArEW?;`e*<~}7(DQEmS<_qQ?enwxzUTJ=;?aD$ z$F$-2-&-Ufk+}EKQhckvOcqPQOnmp>tY}mUH_P6xq=VVwoS3pG_P@nT#Pzpum)%pB zYb3l>!endhk-p2|g1*yEC<*y_|0t0Q46$Q|40bCvYK)YLe0r0^ype-WPwEoxhjbFq z^8NrQ80S$=t%^@$zC4T?yk}k#J2Y7TY<|T&L|YapClJ7kNu_qU1}2|B=GzGSUku#Q z35YWqpqqp^s4Sr@>DS{M>6V5LxGmAiq+*9ByucZM=QaA=I4h#mVsgMg)sRwVSgWfrz(2u+;EEjmxH=VDb+M3kqeF*9(#;FT^cE{fhj69C5Ox}XKME(3{C14OroGr_DY-8cP z-9+8_z+t6-vJSdtb#(@fcT1pnFl_eK+jpP*c?oU=;6aSe8yOew*|TT+_+RSuS*FFy z5+^>f&We8d#KqoqZy!IfZh=tYedqikhWTEn0Iu<@vCi&f^ejbNCwJ*ubw4%0K7QN` zSI?M=zX3A15d%Bt^D$e1qQD59WU@Qe$7)ymJ|Gf1zH?oNrUKs8_J(TP*#>@k&={sQ znCg7crCJMDSwzJ*UUjcM+B!W8u?Fr_DVw{3;AX|7A`;WsdlA zi3pIVisbbWZv#@C-1{hGSoo;pb ze1Tlc`-r&ANyuPz=lNqpIxu%(#eUS>gI^r$irpd}K{FyD(MxO^z2M0(#?x2q#Q=1dL^e`~2OOB>r=XDYu);;pLe60o~*@2t$LYnmBhbjs& zmRqBeA<;Zw=5w@3%1;xa!I>NvN6Jruo-ERO#I#tgt&!fCoJqgs6o-wNs=B3Nkh?IL z(OJR#&`kM-1ETz4UYeJow8OCfyc6<@W=`U!%eX84HQ$EVf`vJ6VkUu~YE)wTXtqxN zh)3()rs&u~)bXeB0On0&TjlQwh%2Jji+$=0ze6r!#PwJDJpcYA;M@NR zQ(i``i!8g=gPhKvy3e8EDqR%}%#(xuhMq}{82_*7;th`IoGdv7_Ye9cONG=|3f2YE z_QwKOd!7u?uI|Az_iZbXlS zf;UozblNTED$6+TvK67#5kH*5);DT)HXcXgM(~sS#n^9Y5hOh}S-8^TGbCoLMLgim zXVO8kO1pkvMcD7SE$P);`KgST_5OHqr*}va?iDWBQ{Wm#Gp)g1E5_0aOOvdk#&Qkt z(*0L>0SKGBPM=H6kQ)I#dXb>-b=S+QUR(1%Af)sS=9q``>2ql}cuFWww?NT$9Pmt& zEY}8C+vq$(_MQZlY83!8U*-V>23Gx@2L3fb$psS+i)u<1>72I;ekL7LS4wPmp@CoT zu^OISmCi3@+!U!y9KS}G5eXw{Y-92lquB_`*A)CV>ecX*PcMCyE~RCo=?stui2@Ma z2{SE1vBAzst5Fv~m;hgwyAv3HX+K=}kG=M8w&1zhlix!KXk>#D7*dlPK#%BDKF*N4 z8>Z&(qt^|@&TmCnVL)0-quU>2^EM}yhT4d(kr9 z1eR5pzT*P$hINwTA1b5-wt*Y9IDxHTc+Mn+NqESVy zJv0BX6vN}}=LA4yL;cZXF%6Nr;5(3&$?y@YU38I*7C*sNQaswd1%PHZ}y-wt`w!sAGNCnP~CW(M;V{uWHI=_vc$;BferoIcm zK+=d>ot?QItLS@OqP64ShKwvE?Vsg&BK3csUVwCc=pTc*fQ@c?wq+2;STFUMA066| zEOVX32Nj0#C^{F%Lg$}VU73<>9CDiweh+@Qa&lI;Td_sqcAVpO#W2jL1k{~w9wkFB z4}~;(2OTo&jdF4Zu5}_^lDLUK6|N2sbp+0W-p&``1|$C(41H+-_tpwMx5*xtlbib^ zCgvlmCM|DD>iJAD&GVj3UJ-}Iru^P?F|SuQ-ZbwEJ^OlQi;S^>6AVqm6iMOE%lSwR z@x}uPaJH?1j96)n!T*^{giD)`b*r%;R@QyE0o$s|R|jORNYcUz2X#Wx%BkXr2Bi$> z-4k0jDhNNu83Okxo|G^ZPY8@0CHK>nLrub|a|H`|DN1NEcLsSU1&mAkf7iV9DK>7& z&OW^rA+tKVv{bkQR8tz^ZMmL{ODJ$X4J7*PSc16wyz>zbNbESR;Uu^mMb;jG^ysVe zIXz+I#h~Z$WbFf-K;Mfi>aK3lK5)fCWR323)*6*t9KGVI-xOK&IWXV%SlwSa4M{p3 zhgI1v#A_ige;8RPFs!@8oikdtRDeaLM@#g}hLPp{= znJ-lQ=Fa4mz??mmfxnmLBg6 zM~$;p`6Z)qT>QIr1k^G$OI2n=TxIFpI70jThp_1NFlbseDL&4|L=GNhr1#UafBYg_ z42ivlQ|PttsABpO^=o}o90yUntm+bql0n{zii$)rFXxHEv2wFs&3PlQ>nxc_)9sn^ zPoF;V*v;_BL{NN0IhCJ>Pg(5cSv})bFa4D!WpJpnHC?Uh=4lpYK%V8B}CSu6Q z-(nwFU94f=RQxtFGL2C~*h_N2gDbCb$YPMp2;~;P(W|?7+FXUaj=C*p%AlOKTAb?} zvY7RMNEH+SlA%zR*U??ixtY5qpy_9{@5wDpZvhExDR|7%>CDJJ_pPo}%bDHNme0|| zqe6Hg8%w$DBg+Xo2$#-(m7sRnCJCc$udqXAcC%HXM2o3%h^s))U3xPLv2E>mj-l0h zC2H+j3(`Sy?j?{Ui5;t90)5^RD#7s1(w~$+OC#mcKN3?rW?2cqFm?dz&@==*>$45k zcZsjD1i*Gpv@Q7I-DY&y2fkbGp40H@AX*mPzcz4?FqVC}Jt#z@3~*rqpGy_u{2)Oc zCdD7_lLuwHUx^MTaAtvypl+UvC)Ezo6c*e)kp;7yW%Rs@*YosmU$4fWr!&*-P9qo9-1k{~gCqJ-`_zd-C4s#l5>NeIagN2bE)v zcaJ!I#KjG{9aJuehz&h|fb|QylJgZEbqjQc8GMm4zt`rWm&|qIZlZZy9Bj+!cvsQS zE`3Zz#ol#{U5;zJaSK(AsA+(#QXxdzv`V3O?rTn?NYCX7f}Wp334{s3s1YQRVr~+= zVHY>29)J()z(?UcnG&Q&7bbvefBxag2N_XK8=IFm#a;J-sLe#aOj$hecn#fhU$1JL7ha-z+ z^z_x+n9LkHmm?1S+51M3M*gjo39z6I$KAD}(E~6OZ08#aldyRZ>eO`7GZ?426l4TV z1stHnPpy+Fj?h4e2+5c(1P*j8k zK=fj)4{`N9W+_4N(j?h;_xK(NvI)a$UjgJ>SvmXpl=#(>IEBS0s;ky(FLthk_kJ?c zpXe(Gb3Gf~@ug2J9M#3Yg^_tv1-D1h3WK!=dFDj~sUr*DeC?=rRxR2+_G}oV9b|5z)YKkP;4-a?_5iXt z4gbnan7{wYa6+}WK1A_q3G%05XD#fr6|CpcjSV0lE?~P@q5FNJN%}n)rDbY1DyN79 z9n*?x`3wQZ_37q8G;ndfm_|6SzirjU{>d$vcBjIQG`Ma(dHpW!3OyYmwl@*xKYb`3 zeJrs#gDOjWyNPkJ&}zCllbF`ab3?sJPso%FIE^yEPdV=6fUdrj!T!C?NIF=qn6?k} z5|4aM{swC#F2K?NKO@9=DDC7W4XJROA}m5@0U|;J?22}9u7^}b4we)$I+MQds{Fvr zxM&<5{1H@x!Jybe7y$(SN8sr1vg4BD1#jA49s)7ZBR6-UG$Ho}?NZ<3wAxar-fDTU zwPw*@Ck?N3H@*8(@3MF7cv5F_*`Km#5=uW}6<9M&3bacRs9Emdz%KRj3`_2JDHLQ) zQ}_B{nmZ3hqt??-SjIjHlF_&cDH5CtXcNX=kG5Fff6R zB}ZAq$M81yx~)UcTZ;bOKAmi~(_N6Tr- zu`#l4?HhdegE+=vPrZ;?!rEA`fV{wf$}4eHAR^!o1Ah{^!3n5V$TqX7u=VtxdOT zIz4@($ESKcdY{~ZR$K3MOe=p3$b|o`@skArMDj{ObI?se=G^itN_UzGElqy@vID#_ zu=uI*P|}pA^=hA~wdX$9v!^od=*7w@wV8(x_r1=7@+kN|3B8FVg#!Lj)cJe}z0aKt z=%M|P-^qr@y%zX4;@HPUFFX5~2DgGCP#5ZW+mzAo zkk?~lifIkndc9){9@f_I7AAl@|90NOCV4f2VfqZ%s{3G5iLBocFkeTEYAGn#+=X7A z$<}n;|6mr`X!7Xo?g_$gxaVjKY?~-_YDHlebzp0pSrYb>VL6JP8^Yt`Fk$r2!ApCO zdT|=J!@m4cH}KDk@Hu=7U|Ugn#g^M6nATb&|F|NDI%&0?lS(PuFFyeP`gdOxM-_?r zx$mkwQ84WsyZ_%u)cVR=I_8-;yoJP&gm5&7%z19ud}&|U>a?aHOih=`&gEZ?f?IxX zH1mnuRPW^BQRHqN(os?U!d@YiZt|1>_w;yc)O{x{k&Z!2prJK=x` z*ah}ogIyUl5&76Ez!YbbV_0G(sRHoSKb~R~qzK*4sH@Wf4mg)j$pD=##mrCt?^eb$ z0eyuZCUKwmE$6H$sn%Uj5r;;*5aa7{=#=Lux97uAt2M0zSxSR^^UB1)ybPzmjxwM8 zvw!qKL`9?f-`kh$>_xgNV*{odY*V?WRW$*t|HiVC1RdzidZS7--UtDQFDQ3cFU`Uy zjjFhi-$)~59vZxU{Tc*`iEbi@ygxYw!Pm%u{+*L;WN@&^txv>j{}VvKZdHAYZR_xA z?IoxfcqDoJ)uz@B4PIp=^l~GF>hAx%yuP5cX>?@GiLGsMOZ;(4$zCM^JHlRX`ZZ&Z zEzc)je7xJz@#P}%w!ztD?4r-s=Mn}(Sf)Z;8uS=vRaU1iUu<_FF6aPSdQ7umPsEz~ zD(nQ2OmV>5=uMyIwIlt}Vbp5+nML3IiBs`eQoxk}H(t{g_i8_-EbB=YrnN+H^&F@v zc`>;N4-6(S+etMtZMnAbc5s-j0vpAY{=i1Vzis=W$aCD%$mj?|cnB&LuIm@*0?kdN z;`}aoxn?wU)V(xpCwnOYh2*GiAF{=_xZq3kPV=FFQlR6^%c6)$^Vo0dq~avi>_M4V zeZCvbZK$uslY^&lh~Uzmr)jWiu62dm7TNd@+U=gwmRABbv^}WL8Bl|p>YZgzjBztF z4xsHqIaf&7J~}~oNgZ)|;A^m7LEfO4_f0Q3cjL~5oF?iCBzNBZ;;^d8QWP$QsS$jp zy|>-hq3oV-no&cWMCD+Hbocou`cDp*){UbX`)D;eT)DlXxbFo1ig&vrx&nP`;&H@W zytJw+e(-H+>7bZA2e`5N72NJaLLDy!!4rI)Dy!uGOu)r-yrCJ8n$`55GBm%vBOgj9 zVBarUH9jKp*XT5Gg3>beqZxyi+Wp#t6X>)=Tguf&)s|=BJCe9C3To#yQuT>0kWqDv0HU1k1(bh2D zX+9i@*RNwiO>;g&CAge#INKMi zoTu{$a$i~Ek^|&y3dAW56$66_OEqrkCY-!}v;Jqn)|V3?{AQb+q~g}o5`PYDSQ>#) zc8m5FQawH;&F^pP^*ciIIBv4Qb_PONo9p&Dp9B|Ix(j!G81OvvxDE7DXmGV{*7Ovc z>j0FN9MD0jr%Oxj%RcJ71@Eb_`|tOg*~6oM*bDcof`Ci#{UF7!~6HXB<7Y6#)UlUWMHnoE$UoRf4JHDG~;_0 zuolr-|6pajV_r1s!_xsZURU@i7>q&`J>*Hsl?UmhttoS~GaT$C(vl#!>nNI5XE1iX zsD8$7`UVi{$1P!P43F_2uSYU*J&PItVfv;0jdb)D;J=hsktDz)Av(a;490=(lNOm@ zJFyPZhd_JQ^){19b9oRLLMsci;FN=WS7x9vp3};haOP!CdBgCbyaXa8&wH^RDG0hS z)+BLT?=y>-FjIz#UDbszA3OQ_*x69EXItfVK6!M-)x`KZpqM=(NLkI^gxGC91o*{* zIZZX0%37?!8Va=s+Tojz$+L2weX#*^b91!jsW#o`ozSKxF>nfv%$-mTfy$_s9d;;BAksA~L5;AZKVCD-pbKwg*5@xtByRcZD5PK+_x>c4yNOD8;D-?zKk z7o->5@H+-FdfUkqyqd9?==BGA5sX}1Ey^0Hvb5qqe#f1U$i$BQxeK(2X3fdA^0{YS z07PD!s5ZlnIT_fpUrU=dT0m8u4`53Qs7P<}$~FOx;4IahhS_e>M7d+!JgbBLy!&(w zQl74$^)->rxIY6H*#+yoZUxgCO>k{)8CSJqyyT-L!~^RMjM*XvHyFz0@$)kLp3pb( z-yW>EAMynRlpXKu+v5?+emXJ*+vKu}jq)I}T>py8f_k^wc?iI(1f02lTG1l*jo1u6 zck1WNjq(Z#%V2lRvt}nV;E+5spK^`oia7l4(ZIND#zxV#?D}*UPv~;{p_33TAgmhL zU-x!$Bx2bCE)bPDCb-*==TPPa!@ZD@45r)&wE;&n5XdKe1Lomgm`E+KQmq_94gMy; z$ctS0H1;Tu^GVR3!)7J4Jo2q;p|1RV5@o;Zsb{HZXW zya97pRs95biNs3NhaL!5&d6lGEVb#Kn8_ayYNG;rn8}K}?MK!a??K1UAIYGa_|oi} zIkka4ej47b2$ksc=Cj@zf7oxS-Zbd-#gqK*?%soKwdjMsPL=JcutWdt@#mkUqDSPb ztP(p$0@AESbjmpB{eN*pRx;7QOp5bX)Qb-Sx5!SFW`!)4;WH4%^*r(Cb~>vz`}en; z{RU=T0(g_%g(5#IgqmDgE)Z{fX0LfOZFsnzQ6{{4RhqUX$Q4TOzHk@eLk>6R7A0XW{TKD$H5LPX5f7B8`4XlU;dv(2)jE%o$0>1 zL-=>2CFBv&`Uh@+c*sSV7IMCrMG0R|EI^-p_$cna@p~H|S9tzX{89{%v=d`!Sd*U}Ang?j@(vJ)q zPef87UPc;>HTTp^gclOC**jf5~h49?Zygn=@UKC>vJn`!$WTzBTuS%&rgX8#XDk$5mj^vMDKwzL!bz1i;}yw;wDCW>Q@ zjGTTn6X#&hb6$vs&fDD>p+4McrNr^V8g2@QjqiPiu9Q81ks_+@`f6k$a4terrA?pU{rk(RN?+K{lNg}`i*<>HCoPZa}R`TENBQhtf`aeEnRR3%v#U?-k(=u1;yW33yHaW^=W@ZAvG16K3F*UVp zC+^38)qNcIqu-qF_b;MRmw8xYZuC8EAPFdTac(lYw zJut)7=eg%d71~Ki9mFvE@ElrYdPjO)7Iv}u)4!f!on5{~g)T>u(-mks3Mk#pd;MkI@cJiG z#O;xV4O`fkLF=r#e70@(unp-aS1&DS42u;9=X>)I!zD<%_~j!?-{Z@R%f&10|M0V( zhJNkJ_Kq8hC1j2lI(WV{UEG0o$4i(7)6XeW&G4U7^H5ADsP(z}2JiD=@(NousIQ~o zJ8nMxDLbdacHKQ$!1iO_nFx(CSM#RGh!9r4#%}HdTD$t$OOfE$cxk|)4@Gk(kwqG_m6q_)ikj@d9{g6Lvp#-nX~&U3b^ts4(#-z?_&mJ7z(%PeayOo#{*rvF1BAW01Fh&sa}YFxLk`_ni;wu*)G7 z&U>V*sMX!cJj^b3wAE$gEP=;tj)02ay61s7mS-)GSM0P4NkHk%oU~B@HoC>nWU~;^ zIKOzGz+pO7CI3#gcf7_-u;)tX2P?hbz1C6V-KE!Z*6`qO`9dP@S3d&Q4ZaRrATI^e z*Gr;XQAg|azgV-oee38iGCOv*+RT;|M#d1an~@qw(CWKR#A9*+brtmTU#0{>zHd|6QI7&cite|emHkEw6_9DmBZdqgd;wiA;639Q5h z{{gIvQ2%?%S|rzvr;L9ZSMRtQNKHZrsKmZj53akMmFazph*&|fVvsOQPq`a#M>efK zRbS}Fv|h9!N5y1o>6+^?zk3sRdrSXC$)$Ut?$+4PwFMH14;_q(OC9_asKU7F*L$JC z*)CsS?BF4gxZIVpP{hXS?X&=eQz|md0J0}^ueB2 zldEL8pq@Z6GvlitmWJLzKEVjZ-Y9haPLJN1%Ql8UXiKc+;t+D4?u^T+Iyc_pqDSYo z%4_Jk;ibu`r-)p&SVa$-AMJPBX`3zd?JUIhbAz$Tq~L;lv_#&)KrGSs23x$1f=1BX zaK0xSSuW5*bmqd(E;EK~qSe4g% zI`0d4;4W|yaoZX|a<{belc!3Xm|Vr23dueH(HZuJP2dAWqj5AP{Z012TVBqWh6v_<;Bhil!%o_b9n!M%OBYU6K`S7k1qjV1;U z|Nigo>4L}qeOM8wKRSjBoqTy88Wz>L>} zRCs*H7fRu|Bh6cMvE~OQ!u04ZtqnCErPUBZOSlSF3PWv zSo$umVmm5Ci$sG2M?+&!T2pr{)DW;0jzu#KV0_zzcwxGpF}BFLj2}R7`g~ zQ@{Rrk{^}%kI{BsI&9hZa~Qq;2*^Iz`x`~N!| za?h{t-21N19r~1k2|`|&TkhShdPOA}OfM5=A&lsM31=Ohw$08tIP>NU`^Sj6<5&`QX2$1MHY<+$1~M!6+j3Y+s5T>+D>1 zmoS7jZ%|{S1+nZ};o45aa&g5JEpf^KC}n0h&51Q43G7<$sFoUKWE^*9U2HKY4#L3- zA-Avh&O%CE{wr+(Z=JLlro~RAJJV+z7t1pHNze`+kD*S9_pplTz8kbZHu;UmnslB& zpOU(rnPtWsVaLeG^p|h=mCw^VBsfabV{U1Ct(R}FTEu!3uTr=cd`ub3a1?*@O*W*| ze#Ng4I-x7`dpoUo!LY-pyi~*!Xot`gRUv z?}puB6L`9kRew?6{|PgEYv79IB^z7e$T{a(mkhjcJFl#5xa36QbMEX+BP%iNu+kjn z?R_jBv?GokZO0ihNfvIy!E!H#-RC&$dSlup%PNuJek!q={)6cq{94NqxexPrioY+5S{F!vD=d?XIfnj31? zTPE2z<}Tmq3VdT?_rnADuTLI5_9E`Ww_!Xwm8LH&(_EefN#mr>7SRF(({f{mzvWdb zr5(IJMU>9-N0ou-&0|Bj(Zji?t=(?1ENb?3?uS+rvmNhK%Bes40~?lUviA18;p>;3 zNq6y_1`6_A=B)j8Jr!;?u}&{K3lh>Eqby=$;zxoK3<3cPh;U|Gnb9?{u1-jkOD_VB zMz!=BWveCpQKUFv0x)3N!^&qd7vzuGK2v?W5(RvQTiwC;Wx|5R?muW4^@$e#SVa(! z+YyZJ{*+A~4EfDAbvLKbQAi{Anm>KZp*dQDm1t?K(ZTq9b?@Cf>G4c+>b0Td0hKI? z^}49Evz1Ok?N$rnT%K={(Rqe}Li5bh`8ErwQ$!@sit#La-L?l#DcRrNpWk_UkI~pd zml-{SrsIrIRJ< zCI0iSx$=$8Cr>^Rv8qzU{r{(lT$Cyep?3YJ+w@TsZ^M5IM4T?U$@pJBz#fzCE!wKM zEJ|xRZ^Q|{@;G*-amQQmIcAo47FuiMmm~?Llm@+n-CRYQfoRQ#Qm9nJ(ZAte&&c;c zzq5zVcbIMQy4(0#_3S*wVW!FCQK{s~eUJI;d+SENr0nq=&pF*#Mkewjh0A#NETIB2$O3%xK(qG0TjmDyZn@fL zzq+y&69wsyWa=FT-h$iVWJ4-XruKtAXU#+&JyO~s2z|O0i&bQ6L!wa1!{OuiM!6W=Tt&YaVy}2Y=&UNqlUVZ%O zym9awSFy!Rn}jnfyG!8<1OZ2$l9m7WZrD6^*4vl(<&^9_!#x+NN&MynL{Wc^6f_#` zs11Ftkz@mQa43N*gV+5fkJn>+Q+>;;CL6j;9!q%GV@f2=jRHuTHdg~I|`E*y#0xsxDUHOSd{xg1&w|ZrpkupVDx8;W@SCn;%;F18MiR|$H#-+EE1x668Tk}%Z^0KoG- zEV6t;*~;tYYK+M_HM9ULMy0~1A!|`2L=bVu$H4Zee%0gl^0?buzFE>r`xRI_A;TK| z8Lh61)!Im0`OZHX`aUKo%kyRc;$C!xgjaiQ=dtlc82Ml(UyB^e>7DE))-7XrXGs|H zOLCjnnIj+hd*o0zRi7p$_0Qikdkp50@xlGSa@603LjrCHp7QUf1G361PP6une^^o1 z(!W?_ETR{^#QwhaS;p=Kd|b~%N5i&W&k5!ES~`c`c1hGS3H5OB2gzM&nVMT?i?1mb z|A~!5^S8q6NCOcsHSm~n&AILEjq5Ol5f9!`0=LkuZptI$)2%b zJaly9d2unGDjO-du$(oA_%fI^&F4_L7gp>D1?FF?wa%P45r^dwX{D&yheO{}pvNG; zpFv9`EUdN?kb(V2UG*t{%mhY5=g9fulRXD_4{n;gj%C;9kFgIT?ebZq|MYRnRPJj+ zCLpNyi?mo`-R)RnK{*=EGL{yFG>DTvqdjHzysKm&wr`#xwDy%@5LF2iv?!^dXXf37 z+wJ7?_b-HQE&Ow}$9+XizQpGZNd-bm55aCNOM)LOf)&ycCJGgVirz`js8}OTMk=I3 zJ~TCK>}h?ElqRKTN{MR4>->u~fFp2es_U~)ChmKM+QIl92XP4ZnqC1N$}*Z63br!9 zSQLf6HCXG&ClDM>!Sl8aF?uNIt9w2yiFw1O-fxdUiI;pw8FG9@M-_&rizr?cEFPACM@J~C zSd(CW6SiA5r&?rB9Z0T8IQWYw7;F$)W(IjN=9c=W%2JEf7^uJM7RFSYQl2c??qnzh zj;xC?wIJ%RRPrzhEA66v5Jm(|BhZk&>4-AGn`+>E0f9vrc$Bf2-AZ`m+jkZ-un9LfPZ+ks6HIaC2PeFHrBl=9p+my?X2 z&{ZdE1Vs(55e$!F4dC_caF4^UkN!J0Hzv*1zW+Bgon|-QUt>0#!lCDpvNH1#EbZ&vxF|WWF*%(%!TQw zE)&@9y?y~yO=+&H`A!E5hkbGf0zLhO8TNUF3Y0lHhMbP0?h+n&V4hWi>#Zj&%9DCt z&z!9|r;3VmG09@OR$({6g3D=x=*9xz~x(zr|$=3iir6Py`q zfaX$2WH(a_25qH-b`#~QS?j>1ywn1}k!_ULX=i+!I<&-r$Q(iY804w}v*U#_9`hy_1r>GIT$E7JQ@w1kZq^mLhh*&`c7J%!fR;c- zBRE!i5{M?_yV8<-TgJ*ZO2NAKFbeTjQH2XKfQXQo_S)7jaQ)2Vp=y_UIo(1e_0#Qx zwVk13eQAx0m{8VNs!Ip&coU2lT|Lu=dUEXL-w_=g9YcRaNlZI|A$m-OP!{b;aHs+& zNowUzs+NQmU)Ygwlpk3ZDX$gbb|Sr<-w=b;?cR?Ee4{#biWNen>rXfX$A&)LtB5~U z6yFAJAtuRFBMt>AI6+p0&~*d1{;b!MdZ{kn+RV35!njTIXWvTwBev8~72}QnXJBO% znErDs)Q!(a0U{$(Y3_L#q^7EBmZ(JR_lNb3Tw#RjKFhm)5m+vvP9KVOKa(g>VUsQS z#>K|2t^8U@vueG$C$nii^HI{Q}-+D<7q=z4=qvWwXWh*$0!E z;=z*M<9x5TJbixVmp(q|5(#wbm|Uk+Tx{eEotvi8JbDC`Ty0Em#^E4a+quv$baGMi z5kofHKVf&(2D`$bQD&8uKonA}5`Kcon-26`7#%MLe0VQghF2KF`dLzV+L{U~wbZJu zS<4s623!TtZa9qv1;BDt&SURgEC800)%aI(>-3B+PK~wg`pG#D-hE)W4q3}Fm^dqQoAovD9A)O1C$O9UFJ4uw5t+kmi~q8u`a#Gm-bulXTA zn9(QBHEN}>v;_b0dN|>#PAX`lh60!&c{_uG!PPcs9|KO+@#IRt@_Qt-l^+T=3SuQw z3!L{vAQUF~Zscw2^@h%H+qDCI%PBYbbUmfG%3S3lrdxw)Jt?ZRk=M(XB%%s0=)5cT z*_~Q~H7lXP@4xiJ>3aw|ej6PqU#dAZ)u19rocLpjpW|OdFwT51o*;{PvlH}#QC2}E zh_IMT+uQXp*MiU`eVdp-RLSdOSk8O=^^LA}+x4^Q`}czXLF>OfxRR2IlS}Yvao8Gl z-Px`=h`oWONW%?ddR&n3lQ7M=^!vMSijFBHd`hGIzj>D6H9^EtZLA2uk-^oDY`!_+ zNE>C3>5)x6S>wq(*?8z|Fqolx+q$B}UaBPqs8=^f15s{IXJZ>%M#>dJB1Dbr++U70 zf;-K78SkAA9C%0CPC&e3V)}gDzeoI$n2g3aaD(v^UXZ;DdF>jSTBqk88?pc86>{+M z$O)gv*{E_wbb2kqH*gaAPxIsSt8QnCJIQ<^_PU|nP8-K1c|)1$@`1f6of@RQBDhd8KMY&wXK$#l5MoJO!6k*>Mv2}sg+OvHT)4~xq z!tWO6s_PzR{(~LXsDl8GFy)flY%uz_i6oE3)@h5H-K6B)C2r|nxEaIC30L`9Y@1<- zNuzgkm3RJZQ;SVV_+sAT{~u`w`tJlssvGwk-rEW3n&XL}#0+-`$U?Bb8}_IR<9vO$7K6TeggM{czP$-TOY%#jTY zwewh|I}R^n;&rYL5JO}Oy;Fll#W?$B)l{|*qpO(!KxQmRiF)b(R9IuKCWo{5 zL7gaa;h-hN#sB|yo9ssCJHBwK<-cr(9C8fP(?)aA_}dcu`Xp28tcKEEmj|M&<&9lU zxY>1pqy2H7(7F*(vmp+9Q@~)j3P@Fz0l`zayTu3ngDcf&%YP2(w+nWzn9%hN&=m-Ee(ZT* zPnodBufH1G21f;4%iZ}JG+U%kW?5|N=&ce9N)nefhMF!%TJI5VB<=rjzBivl$h9aOmJf6=B3h=9;R3D`Noz=9J8&UMX!k>aQ%E5nskAj&TyoxmYcBJligA zuS!s#?}NM*%j*Yz5XdGSD&KBOkZg&kpMvA_y0gf;;SF$zkY%|BKphbv(_Rq)$AKuSk(cZ$gIT$TD6MLDJaQLLCsi{p4|84@2S#fL@c4m^O zR0+G&&bTZdiYjP>jDV?`PhKI(^U&C@FAPY0`!feFQx(hY<%GNE2d*@`O~1i{+#x47 zm&u6-f2zDoN6Fu&daQBL{*wk{YWO)T00Te>DW72>-R7)>&2~r(SzrI`z=S}rLvMh5 zOrtkGZ6duOj1}18C{x_`L}#m^6YFI^&77%jzOy}eylcwQrLWVXm}+wg~l$u<)C zk^(aF)>UR3S-u8Fdeh}f&j7;NHHz)oDGS;tX9I3wI$QMMc{-S!O;;C^7hI0l!BQ6n zhDCh0`;`k}hw6mqR%=(eFgoUUz&$DP_Wdyi=$=l8zF&QJ_|sJ-V1M@z<%k#_OODas z7N2$39HNk$4<(gE^Wvq;Tb`SQ@SPUnP~@@7f20_vN@Op~`j%5=y{*e@<67I&)!qHC z&%5rl$20Tfu)_DWTjF@U#vR2=mtl;l%B_XSsxg8Liw#_Qr^B&0o+D3)PDKkZ1;DyH zg&yD|D(4RuTt-CNF<42;pod^X>u7MST$%uF`8yIgDZRO)Trske38!`KeQH6wxcsFK zd1L7xt(@roMHtHjFfXIa}v-OUdOu!of25COOlmJ5QZw)L3qu^#^{VZql zH`6zZ3b_Mv-NFwtN)#3C2I99*1}%xfb&WrZU zUUnKR?6IcN+T!$luTyxAd}F7qdF)3zN5(4cm6tqr0skqi;XWm`;orFaTh1!B7hqu& z-D-)@0oiHn0om6>t!XU_4?8G0J^~fIPozF=nMFJ5kGWSKpjjfwuN8SMF1@+1P21Q- z{82a}Ay7a8cD@6p#(Srq5S`wVc$LYE-kFGR7miknNzn+e7s;>|#LF-y zICq)4FoezL6_ihPY>X+3YQb)w&zVRI(GS+}M4^;gXKKH{-gadj{BG z+h28#L`SP+PG@+(dC|#A^=Xijg8iLrojxA?w4O6La0W-W_2LbyrB!=Rh~Gb?rt^2@ z33Y4JmEUCR9QR;8u@gWDk@_@md9Pjt>v*C2$~*zPTDLf^>VlWZ3<6IWAfV82JkuAj zC|~@!B9r(xGROsD8ovXOseONhKQvp6@gTv|ENy`RlXEqX|6o{BECD-S@^Sws9^LHg zV5w|z>HP9@gn2XS|NN0Njeo1;j>T5a1!>uOl)9^_tKqGx8b3m(g* z&uC%0-6nM`-s7CDL??3T{zHK;M9g^4{_=G7QaVfzsTo#J$_~=e)31f;bJ)Y!5~rOn zV*|n=;!zlv5)jnI%lQ$3tu@+URg5R8h#!yA;I=>`Y;+?UpLfpsdh%=>vTQR=u)SuttLH|2v5jBsP9+3VO<|wzAzL9{2s#*0eL5t zw*w!B)=SUm*FZVJxjREU-oDm}Q_0gc0C1eKEa^=(y>Gyf_L7R8#^~ZNc^dye-n~iN zKXD8#&+sbeQN4?mR&BHnk892iU-RXogwv4=X)3$T>Uy2tN6>r#Kny zl&TRqxtM3y`}9RK5l0l?BO=&=4lZ_97|+PMj%Vp(J_3#d|IG$jW9CfAdefEBX`o)& zI{J=u*{Er~{hrkBWePMlp)nxYcZ8hg*JbbMIf~3nICuB1t}dpt<9<#8XWA$Qg%yy4 zI9v{6j}-~<`6*%dWQy}NKXOMN7R+qABJN$4jn&cvW< zQ^zY=HTyZ-fc}B`-ku9f^Cc*16ANtAc_uM+sKB}8dt~HxOj9}F8TyXjToXOhbBcCw z=3Kcm!g=8V9=cLssGao;!?dR3Zw zPJXs+cM{JrzEv*=rru{XF*YS(cwmGtvU7K%dpnbyshB_R@j4XA(AT7MP8RX&afXa; zSg8Kuo^w|ZS2C~ut9ON{I@8Glt`wA+KJ1>ZrVbDJ+se_I13yLtLTE|-{r$Zt!f(*q zmL*_Y)WCu!?9QekR-iX>yI4)nc=MO);GHSFOUR*s7LP3HjjeJ#mF5_EtHqT&+&?6Q zS6Hb^N@w4(7PgB&L$FN#9DM!{f>0D6q?qlmV7<9j1V2Z3&}N-dkWIrrn)aPfZ@eQp zsQM4OWWJhN>4)|2az>7FuTomO!a7tx?fy1MAM8`d*7JU3TK9R1=4c;E~Xf8f_k-%BB4qaq00pUC~;yQ;x?3CO=D{T&Ue<;OD( z_}+JDh^_MS^WAC5Fz|zS^o|Xr^|!%>3~ajpgHZb)NkMERR^WRu)Vn`jn1Y8Jiaf?d z&u*y!!r;JmVidU zBpZ;J=^hQjojweu%35i^y>SmJO7Sn(q7Dzs0kQ4cQ>E%*)H28@VWHs;RUDRRU{it$ zV^vhe0{cPdbaIp}M&C;(aANfB#AGrb)s2CLF*3@J&@h+NO-kE<_n>Wm``Tb#2a%+2 zF0P;QxK-FGoNUEF+a&-1SOSa>74|Ox17g*Q`}#UP@r7US`s?g0^MA8<6_~hKvP-Sr zoMd0;x&*Gbs;{bMovFj5K0Yb_l?Y5B8F)>9Vq(3pEz%}m;`@&ZQtQ>`$NFF)rU-kD zD1D%OPBZuAP}7GoS4{d&*%{&FQtHjaa1^5KcFeLSh zVJnxi@u9SWeK&7i$bY2c8WhaPeo(5-x%mSZU7ypJ3J|B%h}c+CK@#S1Kl7xYjsNX7 zqNd6sT^i#A*ZS()w33phU3=@kL8eb+Q$v>|appW|KPmI3?O1gJwFIExZ$xnlzk-Eg zW)`yIPwu>tfcS|r+I%*;67&&&c)9$TVm4elRft%v#T=1t;QJl!QuS0>4{?*33n+Np zlc(3S0r@gKmH9Y&5YV<>MfG})-Ywa_$(k$sg%Bplv_K_3>zX@aImtkG=fg~=p@TT_ zt*-Jgs2_0J!lbc{3~s)RYm6v|d;j6!oY`#keIJn|QA zM-OQ)RejPJ*^WDgCAyEV;Cd8kM)H;3L?Heyt1rJ-*Swj@usbVe%qaNWOAb~cpNq4V z%x}GlsGu4HL3Lkp%np(4GdZLew@ZFNut;)>`2Gtc@^))pqJjII$YS&a5u^e`I`KId z2>XRnPkM_Hpo=p8RiS=3g#$A#^L58S(#4gYo0L>3!nd%VXA{hhhU%GWp2a;uq(^0& zJ3GM6g%GN7SZh7xeaRFW8PGbDI-@Raq&coEClS+MGols)Xtpf3|5R zUakfBV!@Aj!H*G}1R_#d^F2qF(nhPV(6MdEV@2A-jDM)N7*N~o1dWX@SJ}1Mf;;^y zDQu5CBx5&U^fOO^Y+wUF4#lyUnM3`(@5pf3-00BPKrf-K z#HZ`AuYBud`J?x^hqYZtX^>oPSy;siV>#-6@b88K-=ULIFU_D{Q2~Ba8+IN{m&Q+$2C^@OmFFYjm z4p&{j*u%HsqabzeT)pr};__w&3;$ovXYgQ!o%478ZHS#Asp zI(vGVwSPi6UhdsndH7){vol3?U>2Y#sQ8qy8VwY%3nx?lW0}ROx@6<3!ri75B@ol1 z;rU|6eY`)!+XkcG7n3^r5wxQ#S2vZjhcAFAKt)Ul=Da{YC0lG$9UcZOt`0AAEG;U% z#qRlup#||jUSSD;y?$ul1T(ViG^jhBjIYe&jqBd=XA%PiO{a|rDwz}%DlGRK9D7nh zXlm=#^?gHJ+i2wU{Cv`RIXf03{VF<19QIZ zl5kM|kSLdZ1@ogGTv@hP9aFFx3&$fKn9r0Uqv#1sIluA7F_}b<5Jm)XNhcm&Ggf#p zV`Gr5%~g&!pcg8nB|Uh}+-9CdgB8`?Uc{t%(h}dIpb{+~Lccik%bW~723^~JD1y~$ zAy7{|>Z9}Y@Lm(vtHOcLa&q)QWYO2*UOmc&4?01xo%snknEUtdNB1vQU5Fc)Uj>oF z%N2h3uFl6E)3Ku{2p;Pa;1<~EzOFC5>O!=I*hh}C{e?O#K}ktT+b}htePlVRbm~P3 zX#>}6^VKa1pqfAQYKM7WE`0)|Sv~+5_z!?v@DF(8)mx27fNEY%{iWm50WM@?o5^^M zn7~(fgeGXr*F?tnZIQhsyYRqu5cP&H{Qk-TaK zF4$+QsSJ_Fg=j-0hd-PS8pOcEh!sI4jWegpyY^|a(ne}xKX0ilKXL=@a2;c~TJMrdW z`xxg8Cb>Y~9Umxyzx0((PDTJ|JD57B*GuWbcHbdRWFeBx6gK50!G<|QQ0QBN?}GLE z#in&flq;I$^o5Z4uxtCd9gVFNx1lGaW!N ztq*H}NcS()@bC3r?{O<~SkAVN9d-XuO0`?NHaMPSg?xx$6!JwM?XW&hCYvv--3F8^aDZ9^=OXID)pd6BOL!s*=~5U z%Iq;Miz;Qjkr2E965P!Vh;#}hYJoCfJ}-$SIFtw;I9BXExo&Efny+r6(k80VpJiW7 zRlbhozd2&`e!T@cz3#1;x%{IwS3%h1Y$VuK8>ht@(CPWH5=_Z(H~7J9zl? zhoGBOVJm<=Z!#L4ZIoB&FeK~hFfyc8={Rp90}DF>>>^?!k1L+g3rn?Zsw@kd4#qL3 zMdpHkH#;8pp&wbThBrdj8_re>>yHvV)xkS8&2Z$`^SS>Z-*V0m*eI@?$z0B)jwUi& zq1ekplTN>FXaCeMoh8uwaRyhs)cQh3V8GH z(b;PX%;L2sWFc&PetlEpL$WkbY~*m9^9rBd8XQI_9Dbpjzz`$T+({BQ z=NlVu2tB>f7Eyo%!4TeU#g>$BKTKyD>)E`UMs54?q~k@7w%~#a*uk6!>Gmw~%&zKAWBSC#QRUw20J?XQQx+(-Wy{x+yJ)j1W&uip)A4MoHy0Nha)NWRbp7w6*fk5-HjmR0 zFpKT~1oEM+%mZToT#8iSd>POncmT-<&N7+2e)J^fo2ICbdI|*EEe7WKa}_|4joixr z*cAumr38*hZ(I2-|J?vSp-g8_KQN6Ao1{&MP0skc)S>}YNS*r^(JdS(MQOo0z@bXW z??Q}#kWg9fJ1Fsr|D5mSbZCdjJ#9be1&MZno);S;N$Vrttc%7{Ap5H)G<5S+p94@| zB_*K}XFtERTU(HV-(C7;DP`EFQda*LMvrp$L#T6S!<1~ z^LEuwkQOzr22rA0f;4@T?%VEMQoV3%JK7Z7jT1f1jbliF!Enr%arLW(AMUqQ_^I%+WGG`jrkjJ-H7R5@3nhOrUdzK927E{pjLby%-~A4WI4(aDYUWD zY}=B|qz@H!_^43Be8M6Mp>qtqBGk^!cX+rRun7N>%C9%(-THS}gjAtcaPhO>sFYr! zw;u5z)tG{c>}xXY)icF<%TFhd1fm76(Y|!~{v3(ut*qu}gI_!nEuvRYc|#+Nk{M)C z%~QVgOqt4~QrDOcJ7sO;*ey%m`{T2j{~dB&z+Px;eULZpLa7_e7TrZYS!uqXrTf+rd{>C@gR)EUTZ;FcI@^Gw(Xal$39f`&7dgNH|wu&RKC&# zPYghkyFuPAj>kk_ z1c2VIrE(wy;V+2_Z^84-M(=rlGyU?}kZry9UVT&BM2)IRK?=MSlik0kzv)q=q z3j3!?A;)&%iKvLBkbdz!^z%k1+7c-PL*W81AepVJUVE=$803`vh(+C1RyLpF4I09q z%HE{`_MP{tAf5QqoC9=RjH1>km55R@x#?b_5ScuZNc6jk9IdT~VGJ%>27(VlXNpLk2SGj*^ z$@3da&{jXv+cqc~Ik~QiEV-*5lWk;@;=b-7d%CCXUQ~H86;)SnL;ZGg6;4lfs3?C5 zmrF_E;}5_#|6ggeN=%I#VpxvanA|2Z-OIBNk@>_sp+X+^3Ls~d4mq~D6tb4iR+ouj z8VSzBqtXqg7{x+&a(9;l^W#DtjA;2rEv)Owb^*%CY3 z{z=v;_w__V?3%$at^@iZkL%{)v@Qt?S^D=rNnj$|L$0>?Ek|Qp3;pOD4lxzk zf6Y|a{~A%Q*SBrmZ~b`c|E00iZ=~@zpRAF6O6G_QzSy^)WaC(=q*l;8{(bI9>yPktv-mhgGpJR|*E?*K&l?X_K@cTt_#> z{*ASRs#I-#)9DnQFs15Emd>O}g-I^{3kMv-wK_H{dH8iN2AIQ+9*V3lws^u$x z9R%lIijp@~cRa&YsxVh+kNKCl;@9*PSJjg1q0cLpLfM@E1fswhFkUS$U^0?~XXSaT zvHf%2Wq9zHGw=h9i)sBakVWqx}MdQGr&6HK+yv zdU|asBZ1b7HN8Y&!2PjrDOFVtLWi|#xW0x9W;bS-G8mmP59eGzl6}2@^9A?Y_;0?u zbHj(ZN!HIc9~MFs&>QsEDF9HfGjsTk+hwo+b74Tj1rR)CHs$U%+hd94wXf?nA zy<@vQsEAmnc0wxGZB{&$Hor{arEp$oyAGs3>+gTUMmAce_42^y>OM1tZEq-xh~A!_ zQSDcsN_PvQ5k%*%7UFN5dCy>4^ zPrvqqN5!w!KlI?W5lF^0|HxtK$CzC?8Zm#kS~%AB9y`~tZXTd25J-K)Q#sF#=_^jDSy zTNt=l{rsAUk7KHYffGP5WF+v7CfUAB8Za{}QcoZzo|Hta4!IJn*Dkh+vg_-U@-6F523*N*9F zp2UFJN7CbT=CwD1^o#$EtE4NBHYGjYtu^A??aZ3vBH;-ZtNaXuf=2q*q++iXzjt7V zf8*1%?ShN%?n4sRadfbvyM6 z{*KMRZoD?Pm&D)vg#!nIo9b~YrsV^~`_K1gC&NU)$U-_J3~ozxAqq0YVdkM-G3e|I zVM4;fA6xD+!bi42m0 z%7lquL4>_Q<1EV#hlZJA(o&(s9#~au>$p)b`||nw-}64E{F6}F;kl_{=@c#3%rORq z0H~;u^3=2(i>3d%arUSc{b+J~v;tJ%^5;F!~yVj<50eB`>{8(P;CGAv*`hS{RW)>0r}x#RMGG2SU9)&Sn-l?DsSR6jfdVSi%BuoON}Ho{?d_D7VC#bRN#K zt59Bt?Fs;PnB##dC!rl%J9u$-X*e^LEOp7-`WAHTblXb`AYLIL^>I9E-nzQ z*m*dXeTd^IAKO!~2I@D<5&r%B`EQi3?m4KXq;*%H!U>y{l=Q}D!_@2aLS81h$se!+ z4_tVt%jSO>?czxzeqoiF3@x4&R1~5@oWz3Ep!`7QddexOe`u93pQtZ({u8)TmnnV% z0zR_ma_KY_YjXl#2I3V>;=yOT`Tfl)&Y`lJ`<*C8>ymB0=hHBKOiQ(zh(ya2l;!** z?`u!LFDi97kuktrIKV5Og88Qe@}BmW(JJpaOsQeNy%+7|;9Z&>ym&sR&g#>90vhIV zB}*F>zr7qamT?zVsWyQRl{r_B$gKj!$JFi9pj|;iRtGI`!!jFZ3Faoy1W9)G$bw;- zHZhop8?8uFoA*7<)MoSAT&npjl+9Q6Islx*amg7yx3wj-NU@XXHa6Kg_A*vh|D4TO zEp|I&ccP7f`B1)2h@5I9@tmz$!>ex;vZ-*=_+Uxkt%8)BZH%v(S3_S{t{V{CKCOzB z4kEPPHQg_3`hZU2SKnN&#OsuTxVUsc8f=j;5vSp)vjtvWHux?tU3vdOnCwsP*>5cY zf4p17ReNAoB>0!X$tx3?birQw-njJipn-g5$G@3Qe2=1g9A;gM9C|&?$*>*Y9dfopDxYGON;@kf`sRHGL1 z^4WRkxb^ho^sc1;UX( zU#OLii0|4fPW#R%SGsLrTMH2A|Q&kNhMtsYmruAQ%D= zYR)Yz9TH+=e*Y+r>j7QVHqk8-(Tho>+=x^HUHt-Rg9>(oW;!DXZ*=(M$c?AL>FT0z z&+9lE?O?D71qnpX^Otvg;=9=Ts%bt`Ut6C%ME^a27GHxp$onxZxqX^WD;^v64jzPQ z$TA{Vjr147i_M_|0*6S@h#km2B1w8A{=4*PV3iN>pjZ%4k;G*mxo`0)475eOUcI$ujl%^I z`_~WKid13o7{_*;H^%2`h$N$|SUPoZ+rZam$Z~`iveN^#Z8Tf@^kFzX6bfxVxi{QN z={Xp5dKMDT{XQOCIb&GeM?ZdJ8CnAUJ0+WX^EeO%te%Wvjcf}7_s|t?F-4pcq2icK z#D!0^%@1psh=QsRKwVw;#UDBvd@BPJR7La6iviE3_Rp#7x1wRe1=t8WYb^+B5HVU7 zO$>3#6i;i>vAMhvPdY;?v64Bn&(~#DvQeszzl2lAsoDd~)s0f%gE{brnnJEA3S*OF zq@0}IvZuZ)+SoQ-KbPA)FTZo^JVc!sfb4{cI~iTH%N3X#-15~EuxrcVcbsRxs2T%- zzJ|&q9axB3Y!7~T6}7JNXaX^UyRQ%lmIX7Rk&8!PhoHtJSB+E7(H|ITOU<9wFbzV# z+pXGha&4ZoybQX(=e25#G8sy(a+o!+AhggzCASgS=Qu8I(2sY-DqT#{aO`|~0q}{i z&*qB>fX2}eXghOxCu~#1=`4=i54V|*6`zYM`r4eAdYM7XD)h1(w72I6Foyc!{fjr< z?K?>`Suu*7ifD+br`l3Ns2ygq1_ovu7ND1g>ux{P;!tbSk^PB>_j0pqWYn7)>l0ew zXy1e#{efVm%nQLbWrS!T%fak@kTUVW1G8y3@fjvd;Y0W6KnUE3SkdfcTj;2y8rTNb z{MS8}`%;I&celKV#v^D4PZjpJp~ONnIZJ~Eny?QuL8&S6dQEJjQJIPCh!k;3onGjS zS^SKYZG;-)o-EMgohn_J!5dM{G+YdUYF!_KlqNutxlF_X?y`=qHMzL?? z>X&2hZ~$qT)H`}5oCoap;1iD01~aW3INn_TkcXCN zBy@UT|6pVpVL8+H1Zy(~z52=oP7ixy`{caSRc$YK!fkt2ZJDm_a1TpbB;3scXxYs- zm!8h9AaZ-2Qj8X?tQQ_9_p_TyN7C-Mt4#yA_><2f4OOYa3dy3c4Q)TC?%vSq2&BE& zu95*>249|GQh?Vmd-kw?sZf^!kX2haQ9sx?f;;xP$736QG6SdVzVBu;d8}dPDE=FF zMcJUWVH(~lnUhmZS%fE~IWNdYs)RC$12!A8%5Sw3bBsjkTBYB9M@HZ&g z#A}Ws3@9Rj{44Y(ZsDq&$g(~|KLse$H1w6Ks-jA~T83})_>H1!{6UMS;$-ff=Uv-( zpPHYQ(GxNtoD;NF496`e2Jz-AU=^8jOij|Ulg*f4QSws5?d)Xks!3p;ApEzpMx?V( zWd3qtTh9|ZxZhj!yeR2&rDkHPnyM-< z&U_JpNA7sC*$HT}$SKsurpBt=kyyP$G7KdnxR{t~zsnmPwI>^)J;nNMSEfy+i^k}U zn?Bo@uJ6Dq@UP;NMm&06NZe_0?5mJYAtM#Qvb$q^>nliw<(FErQhtF3N{KnhXOL4e=M|q=A#-#f-~RXDD1m z#sd?Y`56hn83+rZ59Pb+K>qzYTjl;!*@-#EeR}x{XbK_{(u^Ob<^bQiMm3e6_`R5{ zz?(~2tCFujEs9?h1>O^Q02*AK7<^nT`Gb;RA-Y!1CVv+P^Jm+xbIJx3)QWK+Jla%yj0!)FXI9&|pa3*8Q@8P>d3it}d zPSVmTvMp#^=C}|1T(Jk4PAEsxW>8mQgGusN7SaH#Yj;1YKvybZH&!gnceIWf=bkxE zkj4Ldk=j^&ki_x1yvbZ$U&x2i;Ogs7OhobtDhqHbYz`l042G}l7Yu0;P1uuTeAbCs z+tDX^Po2BZ4X8$$BNE^!e}-pI&qeBD8V&K8s_a=U7Jg3Dq(iVb)Eq8URe-P*@oguN z6=};2I*N&ALGj4DgQ%!x2;=}@S6~jbi7RLBOu{k@GO&+;xkJ%EG*e9(ckkW6nJ%Xy zE1{|yhK$09`dSr`f$_oSpl;rp>*kA~DjSe`+tlHA{sW$pUz6a$n-No#gf72NwJ{ty zlJVkafI>0wGbJBxQDb1e;d%1ciTlt5fjr&t8U9f!Jct@fghXE zirF?20=01CUA5Fq4Hohe#z4B*t8yK&0q!IxcMn}%JwQ>ytkJ{*G%Z~P^L9N0sb=E+?r6h^n#LWbU{bqB;TKuOmc8HEM`tfz(tm2N zy7=|Ihb&7FN#9`l>sAL}USS9aZ|yE=5**+o5=EsF&j0>-9P&qm0uF5^gAu73`AeB_?mj~ zo1Ja;zADm2P6zvH9a^^y?E8-&d0AO+IuVz*6!c-L2D#^k{11AX9FHiwGYyvU`xg5~ zzN`*4-y3_Op-R?(xq^zE3dSygmP7|kxfVs&nq`o4egF&vuU+9k7y=@)^}t&b1EO@7 z$^X7-QE_;(#USjVog!Z~b!8viw<{N#Vy)N=R3%sQm-X)uc;)WojHxN(p6>a~#5V!K zi_Z}c(7({iuRQnwJ%I%fNl}J-_b)1;6N~R9p?b?HzNx>)-<@p_zP-fv(B^U8)$Q-2 zaVmw*;8W!@I*(s})tgk*{{NUd3!tjH_U)^Hbb~YqA}Jx=9n#$;T~g95AxMiL9deL5 zNOv9@B}L-UDc#-hEuQE7-uFM_Fpk3@XYak%zSn(U*YA2amttjYtu@1@3-NV})>3{8 z!b#s@8@{!)wmuw=X8drf$4@|K0PH-a0ZqPxkeK&*t*&%V?5qZHU2S8;lN=hqk_S64(h!9gKx zf0H9zFE`RFngz|cK(zTWe6|LoWm#bMr6X7$$tHpsB>lCAn}wqFXKPJ|*M5fnofHFl znSBP?0lk~nS-nwCfkSclR_2IOirK>|E-r749eD>e^f~>1S&7^SJbBSdr2-7MU@rZ( z=Z}Nm)vj)q?=Ak*>_A5JiG4btSp$PDtGz9wYW~s$0-2XzLZp9Nwn9d}?BX;Ghm-Ol z87>zq!FftHR0e>Z5(>lbpIxsJQyOtLN}3=TXUZF-dM%ICBrp0@|D&dhv|70!c{|md z)eAbhr2ewTplzpy1kR_K3Vw!9fFMXC#n5Y03(SBFZvvQquAKQ&F7?dpQPc4}OP{0s zlZ-!?PX$rHQYd#%z5vVi2UT1+URlJJ&yDDW~#$@ZI-mQKm1qQ(&FeyLSmeAT;) zODwW|t@T=%A-}1Qs=yI%Rh?gI9KQo%i$hVAyWQLRj^TyO{YOorRIh4T7VY(|tgIw? z5RQj6V+eqvq}p#vp<(t)+Y(4Eft)#JD_~mcbyyV6RKtIMqtGE^Ga=PeTFc?oHn`Zi7Cj=*A_e2qysDOb%!ntIP+6tg+}7M745DOnPyrGWn;|LPjv74P5f0?Oq9amfv$LW9{-$%40t zTi`9Gy;b}t;N>_vsjkCZb5PuZf6PF1^?QHqhid%+uJ-tWsX9`maK1SC$U5^FChx8T z=7#YSGO?6)no6CNZ(vc8u{r()tUvT?KaUOgTJ5N#+g+$6@E9LC-noLfS}iHOWeg(zf(jELA9Mfd3MV=6J=R)Hof9fkRZ>JTO&Bu z<=R#yedy@3ERKk%xto7RNIL7)dpqes+Uu#DW10R8u%PIen9=~L>|l4D>fp9M)#Cf! z-_CPUh;??rD-x@S)v^m?!`+a2ztGd6E0*Q%uxDD?aBNd)&o^kDE{_ zf9Jk;BJw_QPui+NN`)IU91E6Q+Use4xy&!*Gwkehx*cbmHkmo}HuRlK#VV4=RBvat_T#bgu8f}9|z$5Q!{oAl8MGu6Q*veRp)3BP4L zD2@;EuXA`Op}2ssXvEyXP{h=Z6~!QMGshteFay zSb5VElQ&wY(n}je>ri}|xxG%ZBE8I%HC9F}W{&l>wNQtBH)--y$Vodb*LXuI;LKy* z-1TGsFm9+e{JxYL5|)T>Ks1z2L2#`saysyyW^&USbL~3*#iNv)bt;Ue!`j;{6{VA% zIqc^Qu}Oc56g=;EPbx!rhJY#}YIGGXG9{1ZEf|pAs!$OVyj9`9RWw^!PUXKXd%p`! z(+ST{I+v?9Q-z1lRBV=2k1}^ zhKVqsN#ffNRtQ;#o?KXdAKwvJfLJn@5_@p2^xP1idAV(RNW}O*kW}R^8sB~i2}c=2 zjZt{>-6-4R9Hv5Z$~)b8I&(i?47a{9PnLI!4nc+8D~Bsn z04nz1Ca2c!B9Pi;HlQN30Q>2qVuAmyUBm;WjMhVZ;x(iwP--Qc>Cta-ZU!yZ7?&IL*pTWC^t#ylk^gTS#&;&EIud)cNDO?k=K-Tk{DP}JCe%{DR; z(b(x(0E{TEceq=}IBs}-cL! zrHuhzF;5KKH;-IUBixS!rcIa}4Kj5NDja}tp;N}#ajyBW+=s2^M~`?w|5}V`u1>MQ z87TTFIe&!$Szpg@eZD%K8W<43D#YOgRhbE<&$WZzgUeN$>j9$rF<^xP3>qW6*6IH7 z31$Qnh7lZuPGzAMk?4;bN}T6GdB8AVXC`@Y?;H3Ix7`35q##YV@J`$xEc)rk#)m1| zHA)M22z(WuqLm1?TdH)6$&Th#g2BCf)f2XxuQA|(4p%IBrYjbX4aY%?t#owb%<%l> z2Ik%MS@jpMn6is|vwT_jJT@!v$8Pia>tjba;I&Yz*F4Y+jN5M~3AyWS zDiiw1EYZ%T^p3}7DxXC%%=m#Fwe#zZ^-L0G^}F#f&LRHnh?RhL63D5vlmPMRB{Bn= zq2LYWkbpIcjtSrMF0VJ`*5{Opl1o3t*Ar^!)4i+m6LiZ^cLm(6hN2nY%~U_8R^;GN z-<&ECWlmurA2zRJs1Hi|8%FMJdSZ(9{O8Bqd; z2g01Kw^s;HmUCX~Lx*09luKvQNGr^(_d~>(&kd|7wWjl#)HG2ILMnNz-n(~mDPq8a zO1*7neNad?1>by%>CT_QVF0Ei>S@7<9E6PMi~O!>WJQ9Ur?Dz;d-7KgSVNx+bhKxk zWCE)|^hG^`vOp0LNs-=;Tt6+yr2*^*Gp{JQ=r}1g4EBC0mvJ}bSlkKgwv!|>>p<1e z-Y*MUUr)v|0dtjj?&{BvQ|=V7+N&R11NYtF4;VetcFDvua9jm5lhN<8)=&)|iETeB zT*MTJAH|UQfUlfPG$rP{x#rh4`6qW|Z0|=_JKq#ZRJ$euQN)9}Wurp9QBSV=7=alo2p0z8%+iFO|`&CkjG zNio|c)7g=7RnJPwi+=O*r-D8cU~k&)OeM&+_^>KIVE!(S&$Dsze}Q7X$4NAnR@8~A zaj@r#yT4)SkE?E@DSbf}e+uTd_GpW>sJec^0leO%Vy5KE9+*fAnMAU~u^0R@Eu+>B zSK|Wz6rVE|J`VQ)jECad-4p?rS1nf=^6w0VM3vH_pkl-Gw-G9e4-!#ewX_Yq6}PY; zu-9fOP|LO0df8oWeyt6nN%KvYc@fhbJNH9+lnl!4F3sMfFLl#XncdB%-tbuo_15eM z4{u{qQYpa!u8FcZiRHOF9IKQnfGxZAoaxaoC9(=@6`619Ij2)xm$wkNHdx=Do?m_&Q6I072L}&H`$&NA2I&0` zYHW`IjvOvcVnC@@8a-=TtFR?a=?H@esxA*br*~i}{Yl4wh5SuJwfu4NC2xR97B|&W z736?WO(ad{B4l5wGb*1Eq#b-o`1_qdNhqUTPQ=wDoT)uZX+Wgp`PNf+eM;T}=NrSg zF)AU!-{YSeY%cO~L&(+4Ul3%`a%EGZtBs+%2448y=H39r^+{tXa=_oG%S>qzNJes?hFgU|t$&d+KX z-I$N!hqKH^4r?o~(F`?{0B}(k$Y$4phezmpn7Y3Tzc7P*IIw2PfTi#(TG#DCo4VoD z@c;*WbDq_LJw^WVfiQIG2`s+YXf&$kV^*jM4_w_dmh_*B{W5B%6Js!drMv(6X69F$ zYxofu1&y?7Sc~}Xc$c>RZj5bMZZw!mu1W@bp`wc#_31Y6@&j9_Kdc6<)5jpM!yn1G zvXbL%&Ek=LIDSz()G~_y_J=F~IfVHkVL@)@>o3l-=JqUMlD}5_dEycTB%8Jau zp$|0UjSVmG=?BJnXS)jaTL%Eu!h3Ufcw>H>ma^&ED&S^~(;h|ul)fsujm}tUrB&}Q zNx6*ZY5E@UCx0~RT!%jAxbfdffjKx3S_+@f1_Bi*(nHkI4NV9)^E0sRe1z({yy}*I z>Bq696L59LnO0*X=QFKrrAPsak-49_!?0f+{G1@x3*!2}Y_bGpSl8da7Gk7qahr_%tJHvYjDI;)%kCf{jASUel#5;!jFuz2 zo|xO9=2`MFbG|uM8h$zyZV%|Mmz3o|2Lmb8PXI=9n<9bpOLevCFl45VN24JqQhZQo zB!t2Aeu9r23#6QO)-42d3hp<{0z=iQf4I07cc|JY@N8#X5uV=os(K0@GDm(D*<qUL~(3+;dJDl2VMT4^-K^_#|p59t?+fb(6q4!iFf#>9_>c3Xt-gCYCjoGGJs zQQ4Ye;{$?x^$mubT4;lv)I$nGnc`;DPCW^`|0xFq`q2NU@ z0W7Wlp{ZM97k$3qRq#$%q&20~h#*PxIm5``u0STG{SQWZKyg=ty zCVY1+c*Vj*ptI}CP{8mn=71RBQNC^P zOxE}_1Nc$UoauVvW9urg>k$wF3yhG*zLL=8k?-vJ2KqxeD-(B<*dIP80qQwvBswf2 zP)&k5nDRLjU7A5DsRSs-BBG;dSR9ZMhMPWtKB)I$#C3|GtB4T@_T2kXG;rhtMh+<# zUen}o+|C12&$bg-&*28T6VPyZudXJi02nT3fpRXWl=N%u`sV-_9lDCH3-fpZyF1|4 zYx3k=D{um0o}BOXpOzsH@f?J>zpl88r!pG=jxB)FNN3YUUGy&Xj&~bg^0z^D-wNO) zM(?9ty>1)AQ}}n;z$4d{r?a4F==a2_`GDBgRxnlAl?mu&p!o&}M2KR`+2AONaHvn@x6_TH@|qxD*t_2HB2~=dkACFbIQJbMOdEiI%lTdi5$h zD1d;lY`Ak)@7U`gV*QPZ(&{0yW3J0e7?*9v&l~=GU@3aY;WhEQVXd3HWlt-0UC|=? zl2FC_y-ZToT(g2&)8HF#P(Gvf?dG&&Y09^h_BTdKqa$1tqwJuEVgB=Da=Gn_&qRs7 zvd=WD+gun9Fi1w^PX*5;icHRA`$tB(jMT|0M9vv=X?3q09}fqY)XW=?YAWxg2In)S zNZ{bFTFj1dr>s>Z(wYbYr+#R|*45I(J3$~15}pez%UUu~9vib?!HHmeQnrZLfRuYW zM+08o!H_sXz>@B&C1I_FA#%U`KE5)iULlehHC`*C2{|N+m8xf*s+G{g$Whs&=KAZO z#**k~|A5TD%YZuN4v%DYInD&Op1d!Mn~l@CwHlRrwXU0?%&gDA%NxD~Hw<1vPFJF) z`7;EZ20z!S0>u0vglfm@RItMt6;W!%PmzDvKlWAsN~o9tc_Z0oX^YNGw6u+rt(Gr5 z7n}(ha0pjv0!>&AcuVLVta(u7Sd(6541Q~!dt5%HNt2r)pAq+x(a3$gZv7k>VWbta?KTjEKo9{(fe7{K? z*0vvrT8{Xki&jU~LUjZ*vY9mKZwdKWnUo7CJmp^V8hKOao9@=lm9pcso-tZly1HAV^$sM_R76_Lmrvi6YR~+&9Bx4ALdGR3}!UzrhX3fnQbhN zf_yHI8bR_0+!>5cIq%!^1w1`r$9bPqei^?DETqe8XKASkx$m=qTtCb$ASp6mH!p!J zjx>z$Qm+w~w|SfQq~;*x_oD$P`~UZku2sOX2os0%oIn8k)&U7o*hH=Qoz_ z=8}C_nly?IdLQy*R=oD^sw$?q6cGhIR>$Os-6y#yn^(C=xj#w63CtjwH~jt-`QD-S zX_Sxu@}A@7t0m-vBm2t3Q+lgRvJZsrlQtvjVE$<~QL3-TYz98L8zv=X;`Xos$=XBEqiHqk`r`I{De|{7e`Y(`U}52rZ3>`MhUX3> zb~?g=4w?0uyUl9!i9>%}o*iktnkDZ&u)1FCgup+=j^K1auSxLj(WiPiETL~Ker9Bp z_HCCGs#%v~KQe-kb63sLMmgB zKiIE>FaU;0lIVm?dq2OoSqpn=P10Wp@=`uRnCL)&K|{0x_zHN zwUU{2Z3>`V*S1SdulM|xSIp~|0}HCymA_PwQOH<* zpY8}t9v1Oyl5we)Tz3Q;R|vO=LS3;uISZk*!VLUlPO<^(+;~JT;LyAU4kr$WKNpg8 z(ZMgD^uDA$+TMt-5xC=y07mQwmK7Ah5%<_4pBx_MnJwq2xZ_Kdo9>cg;2W}Do09ws zG|4lw{QbCurFn7* zJ({P&Th4qJD{&P!;LG?>gEoqS>%kS1EC&;sg_Xrqs!DHR8`px+& zUU1k2{<&5yuU3i7L2&*B*(Hp?a$cf_gP8}`w9v_4^jCU(aiG9Uj8awt@}i`YABhK% zu?KmOEx-ZNYx0p+eg5$8;B@hHFyfJ8bIbd#Lc$IcZm?=)&hdR8iY;K%Cnm6z94wHJ zQ|f2Go~f6!tlM%vE`&NTJg7hy6WA&}#*f-s^Pir>HzU8fBv=3#>B9tuiGu#0+ezy# zE)#cWP(I}_$tNW71KeTqcfp{y*DLR@{Vs^$%uY&;6OcBF9Sw&3=e4Dk)J*f>Ivn0m zJHHptBhf(ad8PsNp6lX4(@S#L8ASZmkhc)NhZzBh}5GXrFf*dD&#p9a& z<2UgZn}Pd6lEi?wuvcFsfhXq|h9gJyGnQ?SJwOTazs^=(xGR7csTA~gf2cy{T-<3N zuT`;~vx2Rq{%KT-ndzaY#WAsD`FeD#Gp94?`nZ_RK77c?-sWYX(?bN(dj{N}`=tMp zBtNL1doR@>%Gv>gKSQM5cs1s_2vvTG9;nVVl++kF^=TG0O++AnxRfHJq8Jz$P|!^C zuuJ3@n&uoI-ZQ;afnO$5ChdBlq#7TV27BBJ{@m1a0`Iu8n;Tc75^|1u3M`!Ap8O78 z7dkBKqZUe3(Ahry)xLf?c&j>$6ermE@(4fAAjN5vG-?qrr`0{f zHZS?|S|C%vb7hG>yFhlB(vbUv=Gjp8pwYRgrnvwN3jMn?Cu#Uj$hN2m#DyHsbfuo~ zZPHrZ3x~+=0gkK3ocesRnT`)DRUoG|tn68fNXW44F#Sn`^&Dj|r69bB!%XuZs1>*- zp`YVHDkM-45`@+dC%Z>N9sdN^|)-gWfU$#_KuSn3|!N^ZQM+X z*td=^Hv;@Tm3LeKg)$HZxmD_HBT#;KhLZRx$)cdF6L*SuXTs$d^JM7YJ+^W>F8lM! zHB+<@NXN~4|01Y_V=UPy!3JqPjaw)V0U-&BX-Qn<1mmlN9EK!TQVNY$D_6M)vbrYP zgCP_l!BT&VTpC0P+#n9*aT6ygY1!k!b*hm@2SJ}xk<{~fKOjVb4E%!mKvFu8)@b%K~V0 z2f#k+x-tk$qy<5qVjL1s%tAv8X%JTykb2leeTbxyrcydEBFmxB+(In6+XQLF(DJh!t~`@O-ZxCIj*k0| zhpXPrJ$vXX&#robz~$bVGT1L)s(=rh;7m8h*>E0TaIqbiZ97_<`I0GIY6sdu#PCt9 zjkx~@m$ExbHx}YRouWz&1lqfj11LGa0T@&<OJ~*oBm>sp!e^>`GO$H@J(BTUK532RB3K>{gmkiHfYVAlEx(UH4VdQBcCc}V2ySM z;n1-P-mp8q*tE4Zotbn;Fw%I0kHhe(oN@0mEEC8)KMf3IHs74l?&ch(WKP+{07kO+?V8ag&Id2m~WHF*9BSewt)@vVY5P z!T57Qwr)@O(tg4Z#IpwVZZCad4#&l(_{cD)oWhWA8k3h2w95^`OQ@-1je%jF5LY}I zWYSfs!GNX-M2pf!q8~qTw`J4`Yx6Oh@}_Ka)cE8)&2V;sbzhV7q#|A*5~4|YMck-#;V6Iny6^;Pa_$DrHKawQ@&dRQH-?I)Da*h zlp3Il9nJg0xEIg$af_{r*zHi$lc*CT&C*g@@yyK44iX8L-V3M_AcfBX!e?vW)mL=A zCOhx9WU74*R3d2F2#{PiHwyXL>w6NM$Vi%3xJ^6^09&%f_l^l!x9_A7v@!o(8Q>BS z{Qpbv1%$FL=lc-M6PnEo$e~mBM|BWc#D%pJkQvSLpf>E6iS<8wG@)s1BVm=52x!u zkP2}yj9m$lPNMLG-MEex2#pDY1e-84pHH9{+D&=0{2X3C-VZ2{PRIIT+%g^6rm2AQ zSiITodds=-9iI`kFD+ueEyUJx1=Qni!iJ(ume>eeJr%5x!9XYTpX(sYtxo=M(*Bhr z&XDw0(;Xq3aEin&37bCh>WPek&*0v1hZrt3#HJ=5nuuBorBKtD$xWPOAgj91>ew4_ zV})JO-DL^j7NEr>q-&@fDvnyQfXO~BGjkLQCLr@B3HxW_qU4xDUL1t;qib&>=4?E! z8OC6(`?IM8#6dA+^v8!fqMWW**@o`7C9}5&oEQF-&jvC-vMVu9*PRrc9OHO75kJMn zjc-2aDFE_@#~*A-L1cq|oo#=V$~+kZ|MMs5NeivD7tJD(Xf0rV%fR{yL=%35LZzgo z0o$un>L^Wn^XZSYJma$PU_Z_sdTu&pS-68~OiQfR$^B62fA-27!Ow7O!uX=ohwH*W zfWrBC{)Y|)5-A>|9njaktY*^2R2VgHDXqw7eCzYW%?ZT!U;x(=YzM8qv~6M3y27FV zX%b6nZ+ZHjj22-}G(|56pOZBO$$Kg!pbtAQ21FJ6uyYZBKJQp^Ry+6CQYFk@l~5U{ z$)&jo%2q#A{f5%d*SCK5r`Xfv0UmW6H#e9EpY7u2o$c{0Yv}?O<{z$49wQWfU?-i_ z#${rn%U>Amn9|T&ax<-)iTLyh0%|V5!=+-N;-I!6&-?UQ(`Tu;CMOXmm`;h*<=80h z3z$64>S=FKtGkEC|C5C_r>vQ~AkOOY3s8 zY53Q4W^De)xZGDYc-Nl(c*U|Z|9!vQy?hh&?>2%F?4l_dDqK7$Vf%DI>RdKCd!h(J3iReS~9Akb)o=Q?PABBx=Ba2WOa{T~qcIn`l_+eY@wv-R8qBa%E?j z>`J*3_j#!-Xi%uyXOo{G_YAbA1a&JcD8B*FbdiPizUkI?(Sz%o)t*<^Fb`LcCSeTN zHR@9g(hi7sRsC_hHUDaKd-L6_B*x`J!|eMSaW}VdOCnGTu<`^Y8+!%S2v#xl^-E*= z^>8b#pPR^-rUf&Job}TFFLCdt|MTX*kI#FC_QvcyE5$q)H&dKDj@&%bx%H9_@les{ z-=J8b%Aem~0VL(nKoNe!QDA|YCm&cK!t;)GxlCw~FgH(XL=mdyqdlD;235h^jxAJL zY8PwA=MC%e>m=thHUQnwx^RrZj%hOw)r;X@8W*9W_NnWb-8rT~tvd{@>V9?1EBJ}Y|s$iJnhy6%FwCB#N+F#6k4 zjODCm3xoV~v~fIXcY>b4QiubxugTpZ3?FP$q?qOALXC(O9s*!5pl!QQ_{vZ3lzW>lEexNG+ej8O6k~$t{coT+cfHmQ zGZFr-yaIn3Hv?pxSZlwM=Y==?sosH(uG59ra%(zMDv@nk&)&dE2uCcG$!qpy`%hJ7 zv}(8JY5%7LT3>Zk9)m=Whq(jT2rrZIeej>N9sg5R|5Xj83f?@%`sSlH#^G{=td#mn zoLkZDJI-H={qFr^9Ev=R*Un>3AK<_3ZdnQ$(6GXD4X0~xf}8!XL3C~*G!i%8st|;Y z8JXcxm}4^)fZ3Dg=ixO>`^N`fKlIZZv9ORoNVrtAt*WzQ1TA2*CI|PvIJjstMbJXZ z#-^bmP{aqU&NJgUKo+v){%SSHM$oo>s`~e_X`_8hrfsn42UB7c(=R3r&R%`B!$VA^ zZUKmINBg_h%&5GC0_@_%#M`ZbLOfDR>yZ(H5_5?Qb6L10lUpOP43NDkY{ zOt&+)8iyK)jAiQf=$Bl4!Fk7?m9!0i7&Zvu=L8ZsDlo*PH{dN@4JivS-BDQp@|5** z%M~AxE^GwQca%tjxGFU*w<_nh!JkzF!v81>AGq zj+N&OV>fc9WwrQ>+((Od_4MS-oP0w~Ug8BC(%_d%S3N$br&-H>Zi7E2KFFz4{-5VX z+~V&;y50@%MO_|F)Q4-oqLDAgQ#OnkQ0TJTRK--LHj6qpm-K>^nuASaSRu7LOn^X| znx^ApKPoQns*-mo;{)Njcvz@SFxx+_umeL*oSKFvl2C!D+_F<(FYw3`W3+AaJ*1E+ zt<=0~%4Vh&eMF7aB;W|EiPNLP+6fh8-LmNz1(Nl;ZwzFc2YfI8mV$5~4#f)}{WU$_ z-*8u1RWUT5A^e$$Og>-i zC)7LTIhM&B`rlaGMv*9fi^E4-uH8iD^72?5g4EBje34K>UsZ-@c6sc0%~ZaebI%ej z-SzsJ)J(D7e61dl*Hm4)Qx>p(Lm;izQ_;DLZ6&Qn@X{aRu-07xFKW?grEtrJPfLzS z^{Kjjm*U{CwJB5)AQvRSI$oUfbQ!DYKfIkM?KfUdfrLY%@>bGIedk}8YJK1#2 z;^u>{iM-A31kAig!Ou}m@p__fU{F|A+`X0Sq;=k)l((OdncmxV(-CWW zSQII{!jn-Wv7VS4!`g3UNqTdkGBZ_GW~m8fF`|-)Cl_(P#q=@`Y@9$Q@1=&l#oPDU zN4^-m51`^T?)5@@9UhWHNd=xWX|=@HR?nre<mh935XIWLNe5dVU$7(a&b~( zN=n=X+3q5}*=_=&w^R3(4#zTg2iqn`HT$>0v$I029>=GD*HzYf*lw_=`0>4W+MD!X zXWWVucJ|Q19}L^>j%rFEPJ2i4*avUmG&LbzWhgXQvLCf%xIxk!_1DQJ-DuP)YrBnO z?Z?vOM`|)Fo*ySt2D_7C>6@e0)VDz`$@&nrq*q2g!P2r7wsZX(ko(8>**#PHMNl)% zhfho(&Htom=@i^k$zO+^D6~n>wz;`9!onuZ@f3ri_q!vK&+G;D_@A+f)WpE3H@q!zABZ}_`8a=3fBWcFS;gi|UoQnSJHD!l8%vd@*|Q9jZPWY*zy zvOCWOA*XqCtX(81o31qKJVrhhRN0SqAvpT?sf|Y8HR&ogF%3_LQa-FgrYBUG{8?zf zWOTPw0*vr?=82?HehzXRB9Bzd;V=4#zsM7s~Y&5ITC^qEf9#6xE=l(MG;r>JMP8pMV#R8D;woRtOabSuPevk zV_p(GiQjk*kas5hQE>uU`!|cSA%cY#*N>JdHFbE)0~Z|K%rDGdQ6skQzpmFGY#(uJ z(Ky{(eB;9dRrgVEFZ^dijfA+VCJ;YttuGXaP-($6We`(Nim%-E5qK)7Z#c?j*t@hY zdO=#Za1|IL`c1?ut3UtL2`AP9V>>`5J<(1eGCn_8?LSv_Q({mUta?Z^xzdH$eONa= zI(LYbG#<4SZ2jlS%-Z43eq*C47^-W7Gx==U?P)R&4i-u13%$-ps@0#l|NSu!w%w6q$Ykjwwmh@?!D{oxmS_#;=;2Y%1QLuL7h?MC9TkrH+Fr$!U*L4;TW zzHE9P7|4D7Hnydf&#T0)T2&NW$xQ_;!Z68ud))m(Kd4ShJ^$4Gt|J~NZ2~r&rOFp_ z9Byg&gB&3E9Ow;klsq7pnigIVW<1f)D$s zF-e%X@(`lFKIGyq=Y#U7`!g23FnWx${h7G!#+%ax?1L63zj)-mJLJ^(yRkPOX7+gHk7GqYY*)QoN9#P_#HE6TdspB10Jp! zmvyj)dM~mD+!Vu(im(ma_c9HFzV(f{?@;!ZY|Fs0cJZLa#gi3>{H(?h zeEky_3yF2!Kv+Ty*#Zp#8uj<@uk+)1sR!=g&9z&Loa;Ty@WI?^O@#`VRa(Po(CF8( z8yPkBx!jDN3rD<=B<3TgiQV7c^ly|$eV>9iV~onRWQyaIj;>AO^zc}k&jv-lKSD<< z|8eL40)XkBsOlJmSbqH3H$=HBN%Gmom3?@8$>*le>pN5y>{~tP)QCieevBGXN0YF+ z#OQ&6SUM>bh7?0FcO~x15~Lf(f-E^2%9ZA*`Svjg%`+B*cDBGHquO`#KkEW-6rQn) zL@wN%7&M<9Roz_Q(Wib+?=K0w;EoeIFyZQ4o-SVKUUzJbkfm&lv$+))xoluFpFs^c zYbkrbZ4^fx`c_@-aXyI@x4QiM_pW-CJA9$}BlD5Q@^Y5l0cT(L_S~Fk8*x&!iK!wK zp3>xgAaRY8CiYHA0y{i4rTt?>Z3e~m#BMKr9`!UE84#LCGM}{}lC>T(#$NLlOEVn9 zO}K^8ATRNoUi8U&d7C8B{HJ{#5)!a4CaPJ@pz@R&po?i)B2`Rin^ioM_t@RgUArQK zwIvpH=emE2gpl`S>76nd@RT4tXBG@6saku&p65jhN*-0dfl71j=r!s}^OC!wgc~=_l9z2|{Yy$Gal<)^q zL}I45o*`#_4jwzw(s6q{P`<)(Mo>OoSMZZ*kNvjPtp54ZwDpK-3Y|F zgoT7hB#K*>vXX};H{)s8<<#aJ@AmTQnjHC=ov-LCvVqC@4q?PrLAY30F0W%7PxY) zo5PO1;7N3-%bc}tHpA1pAOEK7P>879%i&aE!|G{N5_xBbbkwiDUs9v)Xa$Pqo#|!j z`aU1FMNjzyuKTHS$)1wr|B_ws#RYY_Rw?Z8nSO4}o6V||4Z_*WgQ(g2Y(cM^9N){f zUJHU{lP|PC3E4ZuM`S5c!#gA%7CI!}hBv>Fo(d4T%(1`dU@=({T)2Krb-C!?Wmb|= zeWZAIk)F-bV8e90KKzoNH#^f{VYw4-C?>5(VV&Vh8dl_(&$gy+7T{*Yt&rQO(!#rJ>={-tO?e1ao3jpb7hHcp&(HRX?&GuaWAPSRD&^@lS0 z`e`Flm7m8XKV@aRwI*6v5&Nw*P7P#L;q<2TL&NW*=BlaSF1qixxCe~hb2Kb#Q3jkn z3cOygvaq6as{Y$Asq_``+vfA{2!BG())XsSF27t2Xobb1$;d`H&=-~z<@nvtv%U+o^aw!Y1WPGpN zWtke>E^8Iq*!|CIKb)mKC1(}i`FGUMp5)3CFPj$vNDEA<{(Q{9kLw%~NNt#( z+pxAcYBG39Lh?&e3A3)muG)bsEb+PUcgM%#?4)jaIJg(@G0=|j5)y4TZN zBFX)ILrdQ^h8IHWVGLau( z<38(kTceq{Z{DBJ%fLJ*-5n$^mix{LRrKZzu3PO!Vz8jEQr!@N$|f4O@7;VbtKpRe z^5t$eW=xh-%vIj54^jLGxMS2e$gMAxr0tYIVVG(OQ87MO?mPQ>cHP>gZ{WSR*~@pl zb9}jL0zbUkS{M6Z=~41~tQy?n>dLDc6bTeVc(;d8>vaP2uc26%d*S;YH1{&n-CI|s zQKYQIH@)31@7@uS6MaW0U0?QQjb%PG)3QkmXPu=rKoya65JkKQt=9G{LUxV*;~zWn zBFMrf;9g0@b9*tSY+(?SKVYvvMO#m8DCB%zZanCyIw_8a_wZx|`*^ya&H0z5&g;OD zFVuobJz-C4-|355%pmZcM!S*>!T;0;Wag*pk?+NcYkLft22v%eO$@_TfJou0TYWqz zvbwIK%xxI=uu+(NZ)M3jT2ij>@ML=}{tadsU}N!ueeMY=yG=$WwdxbHw`67y{~7 z%%O>RO7IFUOv&>Rt|01=rNv#s!dP?H<-XDS)pSwQZ3D8)@wmJ2;)-n=NjkH}w$utX!*`TUhce6(pOXL{%yDZrq>CnqAdS4k~w zCY}Tq_sv>cm}613x(fK|zqY(=3Saz0VCkkf&`-51sfy(~j$C|IM)M2HIc$ zG*E=V6s6a(ITbu_=Ydy&1F3b77O)$k;1w{`bn)J5I6W>=BrX3ib$ekrsg8#uaD*m_ z$`h|3(;G{VzX63>*X1T6!{yA|!on&zF~j+&C?oJtFjc@oAa>>RC;IyPA|mhOQ=Q2g zd%;obq2-L@`SvfC%qbiW0DadU@mj zh{qBWhXekW#IzLG-`jgIv1s=n8sN3^YM5mK+{RMNzh9kFVeN8CrYYq^!aZId>Z z=Ge{=;e9|3c;bi5T`EH&4>fZmZaJK`GY+`hq@I~?@thmNg1ckf#)LGr*$3^HQ%sFI`V!2ffA^WB+$Hpp5I zb_!Uv8iH-8(>(JFYLyqB-7(W+>Uy69QIZnmTqNB7I3-lktq&mHu|Mab#v@&*Rb@j zW%wH}?DtoB+i%X2BVE;R+YaOP{|-?|<#)m``Rw ztGg+(Vy&)$jw8s$hI7IjM3^=7U7xNy&a&VMSG3G3+CTVb#OwBt#Y%AlSW5qw{7E^j zY$?k!e*m6KyYG;+80$ptygty`0gpZ0mu8ej9D~~G!piJ@^Psby3dMzW#Lxx+VOm*h zTJ`;6nVyvxU3z?Yov`S`bdy|uidZ;Wp$@(g4}MqzP95Fi)pify4rjePAqid+KL$x= z8nz3?s}CMg-ffk`3Vr{uVXkYD_$_F-El>v!_QRJZ)-c4vWcKW|=rNSB1Em*b`~8L71U&$zML ze3(fz{mLhAGGre384>VQEpz>aO^o_E4-(wLzod-=%Pj;?P!lLKB3C*>r5S!0#0?u2 zn=gZE23{^`drO7Zc_)>=vFLFy-*S0sm;=_)IDG24~QhV9YC)L-|D&RJ@ zz_C($>DuVEzOR-ooPFuqJ=T{_4AdW{^HxdYH~8*B@bsQD;2pN-mB^Hb+w6ELhn$-L zohp!r;jzW}iwmh}YFpOBQrzo@c+UwGi*gEc{pQ&V^(ij)ShqI>qkM_{@S-`YW3eBp z9_gA2Q%Gf0MO9uR9V)Md)=8s^%ey0*jvu)eQP^0+w1mFekY3}5t9`biMW?^p_>Bx^ z{AV~na`jE9Y3rz@U1H3f>R(huWbS9nUmC>J$(nB(KP#GZ(h{Q6Up@!;r@-)hDW1e{ zI`X@@01T4?3EfUx;*?_6>*WOr!0)&7>3ux|7mOQ4t@XFs&q?COCp@1vM}9D($;`Fq zWYXv9;;gK$U7bLESSWT71a8_i_5HaXq+aLzF=W zfLa$+y^jm5;MhQAv83NsKSk#kM+g!Yq5ItLDVfXnr2GaB%k%s=%5yJU zQsAsh@Em8RZ+b&7*~D-EH6IUXRaDpRp5-|@)KJgfcl}sZ&kH!{H8VFpOiVG;x!5_)axhd++hey4M~T@pBl$J}V4 z8$egM^#waAb)p133vmBmIeLNf0zoD*AHwOmS6`lQ%d0t{c!t@(GRj}yc)dep;(qzV zX`wSo-#jR!>LroWTys*)J>p-d{mZ)jlLH-1x7qgX^IGbMQ1koi;BlmYgFleuT;Mqr zAjGL?g3$yjKcx<=hGdg{fA-xbT+&v?jEV>W$7|%1Q^Iw2S-Y{-!;7Q3rBo2a^ej%_ zQSjd>a?WUf%^)h83|~A67JFO^JP0_rT%n4&b5uM}78CR_d1!4j^Jp)s0lUX2S%rs#)^m5U4{(*8}-FF0D;hlE0F5G0U}eOlNHW zP1cG3RNemJEd=m^T_{dV;^)8m->h+u2_LVSr7IKtDr-vkW-5A1S>%&`w9fhmqtSAm5G_I)Q6`_C3)Ek>%KmV`E4%AjU<*pN z*Imv`zB|huw@atp_YFO3d;7Ou9Dz17^!EJl*Fz|uqryVOaCA{afA)y~(@#k%|BvWZ zh&=|G1TUp3u}pYT_H&8I{3?s|54z1YJ_&!G6=ENGy@RL&;(N^eEQrdmAK^{Zq0gq8 z+jb)pXi9%gnkJsC#d6XIQcpF0uff%09%0Xapy@uQ|B9AYd46BNL|Ef$D0KoKVm+3~ z*J7SNR#2MQVsyFvrwhn1d;$V1^Uktk$xaFc->~)tP$d7Zxcgo==qGh61|CX(^58j{ zNRrs;lXf7+$4Igodq+!S(QzF#PCCek^INT(pg+D{2`SBfyxtq$Or00Go(=p{S$=cv z$UK30)Pk?3ExAfYrO-KURt?g^;@zH@#(Vn+%|jLM8# zl8WM1Z*nAMK`OJxd!-2Ir*>JynEX&LwqY4N@-pj>S$gG%a^ry49f}^&2Q<;1UA2aZ zDF&--eXF>%$uv$_wm)jA15kFr3PKbv!#E80_fB61j4JDEW&E)tX+vX|&x`Em3-hr; ztjYNJr^grHClI{~J4QBLiNG!r$7Qhl8@}V|^ez0bz?figh@H;%BNZAY%;U85*XbKS z-)0|QCEweH0nKsdmE|JPxvo-INaaZET}iJGYViKAY;zP zD4jvU$NB*A!e8GxzRlB;yW_Kx({1KaG8BL} zDGkgwHzu!MRz~1X_ACFg`*O>tKxy<58!d5CQAN4=cNzEI`1IS;(h?8cIjH;>nhP<) z8b;B&4L)_nsd>?E3?vD1^pY~#h&h3t@`Py_CHAk1Xal^N5*{4p9qweX`+3CmJhW$^ zq{vXNk%{&zo5abg=2@!iU3h+gJ9oOdH}-^HI?amOW0Ac?nT@3#)!RPp$S{B1IPTon zsc(2eXm6J%e|Ugky$}N`1xYPk)FDJo252n_fkGrE&4sh>2C+`Bn)DH?7SUR^wQIj? zBZ#t+tgk&1t)Ot=lzjBeFPu|_i1Y728B5HCmlnW*nHlMl1&3wDZYpQ+_iVHCr^n07 z3%oX?WG6watV2;X{=C4|^i;dHc^rY;Kq+tgw5+ix$2QN`SE=Q4rOO9<(3{ZO?Y+>G zu5opFW}SxCC%^hTd67e!^p{DphvwKeOw#P9`QwGG#A5{KIv!mPcTx_zJRl@XZna1T z0VafXp1#bRHqvXlaHiT12B56;F@`LBw?KkS7tA;OV&<~G(wla;@$+Z^nH%-9A1=P7 zo^0Y71KDL7*#OEfBP(l^mJq6XlhAI7j?hutl+d|dHiqVC$&5gve?>3}d-%9|0Q)uB zs0^S4$|@rlTmA*Ml(wE6rN_ZvOjF6ls0pTIm(mZex*e%RoA&xO?1n93yANq>#u7Wi z2a{dY>$Q9KKuOK3PHb~sKr>ik!jY;2 z5feN_5iSLJGj>VLFXr&%h;HAhK2a?jX|4}kn-7uIYeGyuYu}wnXnHkic0S*)k-%h1Vv5~xv&j2Ir z{IHFX+`fG+0o(Q~0UC?>DRSTf(Vlsd1uUlu9scBbxTutTmm-xKmlrn_a_9(MkIx)h z(8&ASSgg6ap`#%Sr4OeQR{NX%YprwuczF(!Lx^@rn8_;n3qlE|IHlC;ONgt)j!9=Q zs5sEymn>3=_6D0V9uqY#;ZANmQJFVMo31p0(Q2G{P<2I^Dt><*jIFK0$NtyKdEt+j zGX)7|D-W7pms}60Z`3UPpjdef4{6oSBy+`!>GJqn}rRUp%Dl2P>C*gcMLc3&U%WDhSzoZ~{c41@{&2GF0 zB`@b?ixxth_4QI1x`4{fxakMFT12KC1wXZx&E%h*{Tu@)p}MZUzOD$-hmzDME(?C1 z1fUrm37qsUL?C5;zPwIs`$l7R+xe9-$TaBukJq}3T=;+bkE}c$Kf$VMq6^orPRpaw zs|EIO93|A%1?fwh^0$gC4E}aJ5*z>-#P^a`3N570(N{vKPWFqQOj`VfIN$R+0?z^{ zKbAVq-eTypN#szDQ%aAlTM0Dwina?UPcd94Lt>!!HVa^w?2`xQw!8;%V%=2K~#xAuXNW9p=jF z%2i0uz2W?DKCtfhM^+Mm*i^TBe$~hFyI+DLpu!|*<_Bf)%2;lzn^Zsh)J=bf`1QeJ ztr)P3z=}t;pA&zKkO|wfddP#D2Q$mDW{IpEV*c<1cj7RTiUa2i>}drV=3Hqb&@aPe z2d*$sV4OELItWnnEOm~G%fJplkHc8&y6aS#LDSr<+5&U)0D#apJAa^px-PfXK>{fO zI7~natURj#ab+ zIs^$-j(90jR+}wYX0mnB1Y6z=30r=+Cogn*HwRKdfWy%!!I|1CS7di#}jt^r&M1HZX$VcB0lZ~&W|eP z3Ue&U7P~tjj9*h8$B8J9#1@4wq)e;Pk=Kkm) zvdSz@4YD%-BxG;?h5rVhBdaXw3sZ)eJ$^SaEmf=g+PiREwB1lw)ZSVb+7b=i%&cc^ z5~SqUJa%p+(RJ$UIKLC5Jy>8Q*Jz%yG=b6EVb*&oDO4+}k{*AD78PswRh*sav&v{o zH|m3L=;sVG+YD0Dj_7@4G|FvM?wLxFMh{L+n1?=)Rz36cywGc(HU$o)h$MVWw*+8|QXXjc=Xq8<;-7WaA1 z`>nIwb|fpA=dGmS z1!fr3TT+rB@8v}lp%V+Ly&F-Z|E})6$k3rJc&mIR1~L6!0oi7oUzBrpR!?x)dcVC1 z><`m1f_xCRV&rMRd~?`WO==yCTF9w#j%m z$PA^{zTL7qmh=;8%)!_9oWQg0AI;@?JA955rm&U~W508}CJBqSggbAxvKK+Hu<#mO zotT)L>j6o%mX@&l(vF*{T-S+7e8nluaiqQkpAmxjOFTQtzb(|FB@_F!N` zi}{v=GmWRA(YRay0wviMicOl=Ss$2^7vx(P;`tcohT$58X3}Mi~@#SEr-u zSQrSE3fVJ@Ec%1)029VDK;hK@FH7a`zn8Xl^$5_&=N8>;VI8{i@>`zFe@#Ko!zr_*(bLN_neMz= zaUf8Wr?KERzePcWMl*|VJ6f%)v}=*cSZ2S15pqH)PzU?GuZ(HRB*-flXqn@ampM38 zOps!<{XsM|irNq${cRrZkaK+3<_O>Q_x3r9UAI};T2d@cC-%LHR|I<|G|Cx+XQ*PX zj0SgGu|7bb#I@8>fQ!)IB}H@F*IUUjple<4ElabDFD)P?-vus*_y_TM+_VI3C`(5;xbdqG(+C&}gk+t-^VZ*Omx zAuobc-*hjK<1474#l$pTuz0-ppdH_Q&Zi%tp?%K}n-CscYk!7rjLG`{>m|P##o)Xj zl~W02RFQC|gmgGdH_dMmT;lSOrY*1ERU0aqUziHN{n28h?p#fSo_Xk%{`o@mg<}6W zcie}ucQ6lbOr>AOUl?Tm{c@*x&BD-qye@>@Ldm3Y;@a;Pia6{*qg^29@~S0H#SfsJ z;1AhW=A#8;79WpzF+}2xu{Vo03>aWApQHi50ygWJIVI+d z#m9Dz>bI=7o#OPoO^+7GG+2sLSy_8kDZ>}ULbH1MaPk86j10+w_1)V3K--A03=Ch_ zL5_IQ)A7a5$`@`xzN^^EJ!M^ydKYAHp{^CGQS;*mnJ&2>e}6^^~3vTGAfBLLNFZ+KU(KkhU0n+ENxb5_^mLsNIaY)~#z_V!ffeKlj^`XxpXFuAu+EqxtS4 zlwmlnRa{aQF|YdOBTHH$p}IPioStqP!C~ndk53;G%9)6hi;I#+Zr;KetCHZ?LztyG zm;EQB;nHQOTfLwsLgim&`AFO2Q82b!@E~0H)1OIU6S9SQbEda6fS(o}X|-fp*17k? zi^^y!-DFccn*o!8NzFItiVGs6sy}^x(pPX0nfAY{G(>~AU?>tOznGR1TRmx++CB^M zVgEVYofw8%eX|GcmVNV0nc3>B)-^Dq(oY~Rwf^iL);*Rt`SR`pr{2x@K@JHpDw;*u zX8}U%KER>_X^1b$$jJBvi#ZhPpvhRTSav8@p)g%ZHJWPWL} zxSS*zjGDo~pbfo|D@Brn!}jGAX<{#M&0b_$eFZ1G33+7>XU1MN8D~o~=O{80GV=0< zp%XBEGv~_gThz9R8WP&Az+Gq=Xz)z0iXnc+Ci{{Ma~O)uHv^q8(2pHQ0^{~JKa+8- zjy#-$NvWLNe_-y~SH9qjoCF1pn<&5josd<)8hG~IPYC^ucHp0QW1~HJK>bWj9hFZv z8;l|BzXEK0POwIMgZM(AZ?`WPpJOS{=VwFcr6g$q{IqH7qkKfsx>j$=2lCK6<>YV6 zX5Fr?llx7dLgO#G_*ERz$8w6E_#D>&T{plmgc*54ptOtX;WRm$YYM&~s#3Nbj!OfZmxRmp{kb%GBVm-@%za&?s*;!&Mc^tgi}Xlv zxU_Daei(x3;@G3167Gr`S6Z^L{=&uWZc@HqcHAQ~9>Wa!7=Ol4K}tCX5z!^u+K0{snj)U`eq4O#YgD(#U1& zpk29KY3EQi-?RF7DpTjFN*-wa2QsA;ODm@P(Il~hUKB=CdAN8NW=f~~!O+1!;C5H^ zB3RWvcxJ|44hb%oj2An_RD7b7>i>+=`nReWn&tNXwRoYn!ooF21#h{P|LpX=$)*RAN=wAw`kAvwt-m4SX`0#eLP2J`KbkR@teVZ)7nE^dulq^ zz>a6}`6sR++1cz$O%~8Eu$@X_%dEw5A_9qK%fsRmB1fCgg{I`z=f#cSB1u_%I z5&@z@Jt+Nq_Ktt2Ra60hnkck^2O@GfN zg0iWZmBRCr%mJhdFIn9FAL5kEcrp`53u~0h@Fn0fvA>^}aOGrsyR~$TSg9C$%+T1r ze0U3d4Ipsw0>*fT( z5h7(qI|*0z#DtqC|HDHA;89r|O)-pySFT*-Zyq1PZfpTc=^js{wZJSs?)^rx9H&{ zI9t?*KR&&u*wZ^+P?A22R6Fe7>+lJ3?V*fLF;bi=y80ddY{30A5NDWgoS%{kLy>T?)~Xr#Kb%0 z7%q^hrUPRiD(zvxvF4=9WnqiFDrgw;ssxvgP^C{JxUqGlVp`ERmZ)8L8mHz9-LI>jIOU_U77` z3XA3y1=(&Ls5$LltJFt-keHE3ySyuK?1EkGTnTIh$tj`B{5BXG*RHR?YXrn?s`f`0 zj_!k{z=se$edFXt9&T3Ao0IOYQjo#r$vtI=l%6*>Q{E?(f&9)!h)Nsq=h{c-PfJ;6 zH`JWcyK_Xj0GuotY(3pFlQQ4=ksxQ@+?dYQS>x@CF|dC3CJBH@HRR{I`z1&ZAs2MJ z8j9bRhTHi}0aokyyz{&Dl>bwSrg~b?Ty3$gVaP7#{&JV)YrrD;ZfG+y);U2Vtm-|a ze=Ba^!0*o-y^mB3Pnp+4v1vpJz!`9AJG4#85Kw`??;eUlxv49NW&Zk(moUrAGR~O^ zzok40JGxv-Qv#cDl~>3)V#teY7CD9*^sNSxu&>JM6XHX<<7*e-=aR5%4zeUQ9$xx@ zy<|b&YA%hUE%$DOD4;+eZssYro^R}hk#=fWT4K~839dGR;MhS|P5CtFQ~xOXn;0T3 zE)8{97<`q&aebZ5b1p>&DloU`obxT46EMC0DO(vw)Zb$2M2<0QWP>*TwFhGOEIp6_ zg?7;kVGew$T0blSGK?@ufQh*Eqc)v!L9&e5F7gTLY??Zp9 z>TvMpjb^5Um5298@-#%?rOr$S_kB(8^}Zf-Hmv_%b|IPubRol4%=_2cSmV?G{%r?E zO#-5fIQhwYy_9mybAat#UI%yHy?7OS+g)GZd2NzksB7ws^$0#pr~#Nl$RPy>z*A(; zehR~ioto2xp9hN6!}^NWsEBS24d=RoSY`o4Ahx^zb|zg!mSIM$yPsj^Tuaw5@9e(w zHp2Gi+%-tTVYRO4D>gsoyLTz>3P?-+Q4rgS%0`$8q~Qb&k)VwOXdp zSLX!^W*EdnQ$ho{L>OSD>t{Ue!EdCCk#MHmDS^D;M6BZ#1>E;pE5r90uI=0|?=yB6q zRfD$meF@mELjxbV9IC4;YnTUKMffAl?~36pLFf;GetFV89>sU>G^%}Pk~QjTg~(b> zr+=SFo=g%6Up2OLiMiZz>>Ydf4o^*YLWW$15|$h=S6QbMuL8!FCdpD*ygF&%!lVqL z9^ri33lH?f^6Y;m9_k#%$QOW~$0>D-MvF&zxQd*&9f~$DWDice9iehUq16t?|J#E6 zrq}6tu}F$ppbJa?Pc31@iJ$jOaSh;^DrxO%xA7X1bV~-TXBK}B+D$bs7h0TD+LyB( z&D6<>Q_~JKZWM1jBVrZr5gAqp&Fu`U)=iW~jSfpqvCILTyHitL!?DBG2Z3E@K+L29 zA4`h&^(J*w%hpQH*rnsFbSq|O10YP&c6Jf@myyvVIbH4nzo_HU3l*Q^9k1M~p-)Hc z``*AZ4}y|gn&Xyz$JZa`kAoLT(eXn#4BJ=Hgo6?EOfR91aJgGNKiDS>6)iE|zUoKG&q|)~p zyb`3Bx8y`K;{>|B+W=QDm}X;O>G?w^@LQp-#KNwn)1kINfkXI}e6PspR8D^OjpK1E zYep?!I2-WLCXFqT>Fq&-tT&o_SZ7!@fbz$2=~vaW)W5JzacK82cXVqUR%-TPz7;TR*n!94s~@mF4&!Y`rjB0F#Vz zWoG0#TZp<*SM>$^(n{&~3ZY%G?j{{1 zPFyj`d-UXIvo%5PT5+b6ORyo{vBMwFjr8;cZ1a84A!TTaQ*-9PA&yE$x-PD)E88X{ zTG}L{sG?IVU-SATDKZJS-rU_Txy&d-h~;}!ARH(<-`INq@rQ>DE8jrdgtw3k`}s+Ftoy?)YK5l z1Z_&ktu)RcJWU50Pab+;HuNkS&aoAk&R)WOM@8jpN7RG3H~%8nM@U3`8r*YBMPM+T z1`$4eIfi}O-*UMn#>C4sKT?p{#d?L0h4fDXZ)Wt8L1 zoI6z0j-ef7|7m{CRnxFt;{8*7)58@doUDv=)^BljP58ja+4C8LqwCXOs%+5lH7a%2 z=@#u=S`mfWe-l}jVLK1jaTlRM=Y29OnC?Q1I9SC{Su}{kH9E@cuY1nD6>>$iJ7&M^ z?LWvrnIyA z^~pPDZ%D4Z@JbwgZq{NMwd-(u`AkU`Y1k`VF_5GfJN`IiR#AHGSMuL3gx z_N2f@a9dJzRhlDZplsUW048|qRs0u9`ih!ok6i#eN6P-_zCiwN(o@50;gLRqdddnB>adIn4H*I^T5^wrT!%K}Mcu6@&;6>Lal)-5gjQ2{Z-0zQQAgciq?g=b)VF?fJ{$LG^~6zzR{oKVb|}!tk79=O`8gO z;#vfVw>o!qCoGgZlieB+zckJ8nNeO=BFs z1F4iC=xuxA6<(5FPke7g6$ z?0X^`8$H^N=mks6+|ZVJDUW-fAE2V^o18y1U+I8BiYHl0jd4w|po!1j&+J>TD>hBw zNv|`wJ;uIwrbXR)RWkQ$cA)`<+AME-4bhA10fUQjTyw~Pud^ax?K1Cf(O`d0kpRKl z&kTC`jKw;AU&LGt(htn%EMRX{JHcv@AeSeHq`m_9A)E}|DZRh4oJpd0&Uj^Bj;i>d zaxc8l!@y~RZfcu`yA-qtER89Y(|s3p@^Ou^AH<=eLdV<% zj;j7}Eo3QOezM0A$5X)do*Zs8as!>16GUV8shxjw%I-3S?M{;H(gsAi-{0`1^eAHM zdmY<728sP5;ZF%d0!-5YxACo1k$N~5BA$6A<`A1;GzQ$wg?1`1T|U48cUE1u-u<|k z=lOU2>B{Clz%8&-;U+QjXV^A#LkAqSO^yh?<$(Kftv^IeUq`rZL$GJmw*Sejo)kcp zZ65j<0ycC6&u>{dujW5gccj|p45OFld%$}b)1xj-*ylRh7u8Fk!MJ*;)fph%tlK)GvmJ0hHO2~1JI z$AT|JF2sQ$T%b&$DpD@>tR4V!V^3Se_AqOv1|;6asGYdH@6lW~W9Q&NntJb@_V!D2 z4X$m^J>Axr`L8O)Bh7txz}mOk+_b!WEF9I;*f`~HJ_2kZ4469u@Vx@_Y!P7B!{f|C ze;frmvaaQ{bn~A~lJHas7|CJL=;+2K6ATJ$bsNAt4m4Dm5(({1PkVZer5wkh`-41L z&-~-{`x#+??5p)1DXZ{(1;l2g+3}_k$v`h#R(L{OnZ|3;6qsXuo8z_qzL2`*;I$p2 z&B;`p3E?p+Qn$;Jf_fPhk6PJUuMJ&E?}iktcl>IW0m6sFJm<{8r~?h6q0`Yf$w0!5 zxqg_%XQIXvv4pfV<}%>X?4KHMxYV19ck%3$Oi{(a&4sS8j)SY?mVAa4zaY4-zx9qA zjNZ}jZ65bys7y`DA_<`=F4|x#! zUcidycURcGjdVBf6V^@#Pd&1Lk2z06XS^5n_`Jv!sX=$2sTPio)4ef>ISHN3 zZXUWQYQ%mjm*-`A*8Kw=gS#M7HmC1~+W|8qxDzIlk3r04HWVta8ujMOqCPlkFDzBL ze2h6uBu+UQBU2bum!<0a1u*kz0ayl=73V?-LZY7gr+Jq*ImlwhJQa0luE|j`9eVn! zGoWlVgMWk8-1WFuUNsHtCTCEz)wR&c+&(=JYa@U>PT#>P&iGDKIx4X-_AgaYg&Eo5QqFZHZ;dW&bfl zOG#Cf0(q{%DbXW_3QCVgF8;$^EI$j3guZ|yGK3NMMPu6(M+7ZBY+ocx!k)4FduSb8 ziBDZNSwJZ&WOR=-d?9m=AXC6nB67kfH-Fo2$N#Ym$ZT3c0JmQDmsSDZ$^5|h{ic(Bdy&L(rq47Mu;;Bc@ZP%$ZB~ef7`cva)a;Jv4hT`!S2hIOjpwM%S=PS^A?RIJ1z~hN|8LCZa?ew~SyW-Tp2bfmsFisZ6 z6r%U~6{GrA`Xj>f?b|9hrzr5e_R!TaJvrR>ED7#*q~uR-AOHErZr)nytouIxb5o=rOJ) zh9pwS_-BA=czKfzo3_uY^8=zrU$>k!Xu_ld16hB}5FIQxL`8zbOfI`|8iPPAWre)K zy>vrYhtdQRyLmW)FiVxwoED3FExqG)DE6^!7j7ayclv=?NZqbn_MQ$(v3BUbvczd# z`$$$=$Z@~1D0%yKG>=SKBq6ySN}msquGA}+?8up|{O*(o|0CnRc^g*8kLR#xZbSwv za0NxM37l+Tl!{$DVUdyjc@{P0c%3Dm9%-^Zsih$#X;NQ*dIUW6r_igR zpJ=ov;t2_+KEmdAw+X%nbI|LP8Il!0ppZa--%;`>KtbBs)vTWlbFRLmMzCp0_){lw zt%!cGcDG}0L8>P*O;=+b8^9fKTSa!Y?2p7EBqY=_B46J~)@0-rL|wE=JY2Gq!yQwO z$_ld%*!`2>*1z2|wuIC3Q_%H>FrL!((*z+$_r)s{Xzvf>n}2cUD^SUMY(dx=mY%r3 zBtwS)!K=%q{658(EaP%q;mcmRfNk6B`8~z1I88TnHbq6VesU7dK;Xe%=ZheWH%kdS zRuwoN*{syZo}64O*roHOuzmqeWy?t&1wkOa5K{%Q0Ah^$9?RCYYXQQ1;O#%ok7*s* ziQI9bc@<3bYt6{T_e@sfXe#d_C#Ck%0U751B{021kwfb}*A)MQ;1JE;3q!PT#8iKg zmv9$w~(T>VlN%@XDRc(erOt zQqi81n4eO~6r$O79ny{UY?wa9Cp7BtZKt4_!1_`d8;5})K=WT;b&hf%0tm(yQNee` zrfQL7vUE~AXuJ5oltU9M*H!JJ_kTH4h9ua3w*P#nVnh&{!H$=C-mB>uUQ~y!UzWTDw5eTc76!1zS(y1<^Z?a0C&5{a zkb$AR5PsnYZ9EclZ!B&9kvzftR&!tBDO*TyI=*NUng;)*tV;BDJ6b@v4UJg-XtrPz zXj_j$pN_A%SfshGE-l;jmV(Cz27U3y`e_-y(S5)wD8g{P(*&B;4DVnkXnb|vI7MT=5thn8Weou80-v++rr z7Wapoy(%Mgdimx@D#LrIYB-sKQa$@3p`DDDJJ+AQK<<&dw?_M|jU8{|Pkwq7xVZ|? zhCA`F#hO}El^qdaMnF$WLgZvgoI@P(rQ@o9CZm8!eFZ`CyRonSFQbdBD3_8UlrzVrGX^LR69YtUxL!r9XtNyL;lhSPINq$hq#TDQ(+ z(Ia}kjP)!AzqWs&<)nP-dnncD9^v&yC%1w}8i zg|&FTmi=dU-4$8X%x;g?;S9VfMMm|1$zg=nXcc=vzLoYAUmQ3qEMRv^aOL)c9TzQh z4e@yHCB`X~AjjkBX?hY3@4?ZOdGqG)Sp13~Rh}&{+?Sv;7KqbxH(>PkD(Lmp_~2-M zJX6zPJZX51o|t6DPhR}NHT@n0M&3SGLqSH4@Nu6Pg@YqDFiI1J>vgvx3fmZfJu>E@ z&duRfVZT2)3B!5u!B8aWE0CB_

      yxw_qb3rMj)kaQ+ELV80`Djc&;`d*FxyAw`_Iu0pr-a|I5;1 zmQ_LqG?)wZDX&kTel}174UZjprXhLvaj`u)m`aXFSlBa1B|sAG#HbiOrd)mds|V*= zIqZh6nkqQ-s}d4kgPr}7ri}urxg7XFQziNsG?GPsa|&^NBPf`>%WHEMcl^ky9;Ytm z2@C$G-}rKh510&I>hNy5sF45bk`#SGxoC$zKou-PVt#{%UpH1R;Y(I#@5Pq<-E>UU zk!3V#eS-gQww|=hRZxi&=~xsWyY`L}9@3v~>Ji43;R2Nl+>m_{Ii7QF508_;kfcl+ ztAm$F;1gUW+!gS*xhbBTX^<_K#TouyF0xa=7TnJ4Wt}DO`36Kwi!V&(_bZ#V6K8oym$WJgw_A6U)H1*PcepXm`Wj?5vpx#SvZZYR!nf%C60!~Aq67| z@jGLk{@3+gpBedV#xgaTDgKM=zMw(F_jhD$(^1gu4-mbQywBN***{WJwfC&U zarccSY>1qm=YpRw5c*BI!0qe}-D>Gb2L4)9@U3t@;;3I53fIty%Mx)~ z&hHHg>P!grNVhtdC=_Q}84 zeZPwb5KEpwGStjJ9ujUbma9E3=ZP?9O>tnk5zFB!?LkJ|`;^oGM5!!QL zwA@&*OIo8XkxVg|P%(cX;o%c~c8i#*jt7RTGxj=&3T!bx{_mG_@EzGyylJ%VIqKW1 z#aM|_z+YU!yZ~v5<4npA7N4z2a9@!Ue?%NYv=+2fJeo80%^`9s(MSh!p-fa=QC|;m z=dgOLm$FDI>qN%aFNj|mi#?1Ncf!oDe$K1MrKAdm;*q}$M!LwcY(~r(ssKKyq}Nq6 zYp#88h6qE@;0WfFQT_(@Um6-OF)U~@5O>1#3@ZRO;1MVWQyjn;(%Ga5>Q7Sq+`LRUG0LB-6s}pnPx^6wnBQh4z_B?(8)%7;+Srsq#z`AA(t>**2mws3&S{CZ`9*{-7@32MfXe(JLR z&=AGHjlt(LuM##G4D^8w-~?ZijETWzy8WjV-JP;a2Pg&rxVb&YL{;Poak)B}9~+Q7 zCo+Mo79Y2h!Zc^+P3gkl5Ib7WH`}Y_iV!Wd433Ogjb`zW{4n&|u$fTqlto|Z^MX&$MRUD;{ka~qtNeR|-2=%3lxyYd*^%`xNfJG^m z7MGzHv2*m?Y`c_c#M3YUeX@+@G_93`Y1)jJw6YQ#bNoTj`eyrA!rmN zdCgs;_2sPb$v}m@{FtP9eio~FK9en>66nnSS_S*N=iIB=u2Y9^wdkIv#ZJLwsMzmU zz}RI(edl5((Di7h{52q24-e^6QNnrr__$Z@Qitkywpgs!0=Usu0OX7Zc&jeB`=}SS z^uMUL`p?7FXgX!L1q5w8`jpGRwI7H{HPTe4+zC>b97qLJP<2}{e0Ec^9ImqwaB)TY z$>Z6VmL@h$h#T7xju~R@5H9m#09|H%)*y!h+D{T>JjLX-tpA6K=*WfRYS9E}A^1J!`k4`tgT~=6xrV?@we|Uh2?+(q@mH!W}n$fUp z>Wr?Udw!RqDA%OK8YPbh_!)o%_i#+Nmfc<-L`m2lMN{zr1GIA!0^mVgczVz1J5P6) zK0ZyU<}9Wcl^w4kbT(F>QLEpfJvU$|)1B$-sXl97sv|?KHQ7NONk#c8c2^G>&hL=%Fp-Rg%BX#yno(Va&UFr^4ygf zGVP3q!ap15DzSS@2h%_+VDwp7N@gVK=-;c0B2KkJe-scw8>iAjAwyE^Ck%-P50N>V zK7NV?mM z7Z(-`qG)~^WeMTo$igtZSQ$Q-B#G&sOdK!QOc}2GLZ4CKRtCGe1*HH=h7XWk@;}bj z-RURql2usKX)0gPZ=9T3A1~q3TnEj!$GD^51fKD}ARTuz%D{{CqiBr>Mj`7=5zSrM zTBh#wXAX;=HO6|JKI1j7I<1Zj|Li<_t&4C;Cu05OW#quua$A>WZuG`W868kN>s`Jz zR39z_g7J*zufQ_?Re|N0GZzpEBj1BXp#*o+e5aBZPYk7KS3)IOqz{xm{u5XN=vRdN z;V zXGV`)BS9f@zb`TN&0>%)oM2&2Yg(q)8_oTGfG|qC`&A*bu%S7j@NZjQTVAAMo?Nkbi z!rzfF|BaeW!rzNK?a5HmQ%T4z!pXi)viLE4q+<#>_i|jJ3kVP2o{0(~VGOVMu&(j* zI*&2B3;fR&c{3(2A};&q1r#Zer4-~_d~}R~;kV$^qzbrOBGArI$GlL_qVVSp1)@4e zcm(QhpsPX@VcOw5BRknqZ z;{!!3=%YGZ7&Pta5NzysWncF6z0w@y>34^fO*f_et)9qAGrYnyENF1qPxdh9fCd7z zDRg4mXjC4QGxW(%=X{0&z)$Kiz-*<+qewo*oY`h=V}V<@t0zQ zsa@0nOyPSw!)nes?`>smpKh#bG&@gN4zJ7H`*mo zp~r36Z-2NfIFx;`KjyBJdR3PHP}`Iau@0OVu^l7#0@4a=Pp|T}_`$=&@Yc--zb)sh zBBQPS&?Ux9CzkQsZ!Z?UQlv}8V;uWjNOM+0d2$F%3=mN|Oe)I6_-y&^T|M+>>XK2m z9Bt9^;(?GvWd)DyXoLUOXWwtVI0!lE;Y$906m$UkT?PP^i|-C3rOTUU6y<#wKPDlL z=FIuYcgus^^#>z=zfTVA`LDe*7gmn>xZ$)RE?%eAM;gEB?t9&|Zw{t87W_a_mrIXT z6a|T?OCEIEGk1X!PbIc9SXKY3z$}ZdaP*g& z9NqJw?&QEZP>_>CKq3%nByG1bxi9{&{b7;=dYK0|1iP({;YbQ%Bxi%3 zyRtjZdWgN|mFY(KB6CA4NM_zn7EO>%W%XtSCmNV#@v%7XEOc^%_+sKBFEA*W0w|(f z{jb>tj8nYOR3J3`9HTp!5Ec6FjoH~|ZJJMxMOBMTVJ&T(tsEgkd2<}stpGB3z2zL$ zk_8mODbFm_SR8PC1l3<^PVFZh66GroBd^)m9wv{yApH}DIH2c`ST~+>Hi(Cs1n~TR zcyTxXH2BKy?-{o0H!;d;@hM*woXdb>>N@E!Y`NK9J0}vaQ}pojoNZlOnGZ>*mH%GK zu%%mUaqrQ*i5u@lGjVK;?{qAi{NeRZk|PT92beqGHVg8d&!`n5k+ zF|+;`HGI$@$02`o9u6N!k$+G!Jml^gN5S2P+Mi$N{1p_$*ah<;g=FIEION|u@`^Lx z3cI%z7a-F+GJ)xdA~xrN)ItVj@J+7X(?3T7BJwm^gb!0y!rom+9t+Xv0-u~*qaetf z)A;D=FU-O(P3grC6=$LYY(oP~#5r@Z`9xXAS=&n;YvQJjkiOD7)50uW64Wr2ZAtJ$ z-RuPu%L>xga!}r}UzUCdN?<+LE2to$sRY-vnF-e;+al|oJ77o;f?!ZXmVYoW`_LA6nj6) z(QFn!p#oM4%0K~cq@cRE&WLbi)KkX3wp@nodvXeqHf3}cSAeiMWqMMrS8?@U=8t#{ zY)Y!tQ3J^?Qz}Nv4*Gb)(l)N{MqU_bEG56Now+ocg8OxgNGO#Jv7unqA!O{Cmv&)q ztnyfYJ|ydN#HAA)kfMJSDpXLhKoa!|IQwAszNF@NK6@%iJ+Y%N_1V=2@~aUE9R(Ck=>2pNWiyMT1Q#){$Y^^X2?3}b!Vx?sMD#NEXU zWX{P&rwtr(pkOHSiG!aMwFg3M;B~A@=%Y}6k)uDC1b{>lziL6S3@%8)PVXy;fV6Z?mw67ry8+PWlQFC<>Muy8~X$xrK*PPgg#T~cZz~7S6ru8NtGr_hb&KyUgaAWr%>QVh?uiGB}k5Ja+Ozd)5DIL z6qBg^J3Sm0eL)3VCiJTVPXT7P92w_n+0ZW*8+X z_-O4Bzy`;YLe~Vt0LA?6ib52J^MB$kx%d1k&YAsh+1I;D9=C@P-hdy6+^KaoGs=ve zn;so&qXR=%$bU{>=qwjz!dJ~t6+!^$NKXQ4HZolC%Lm~c1C8Wg6fk~&6d(CRzUCOs zx0n!wMj-a)f0(=BG8Mv{YaJnrae%kpZNkrggBF+#IOE(d<3;1C3E*0d1IZC0m4~8L zBdU6QIsnH7W!Ilx)sUi#9;r}&;R_%_O8FWRb1GFC?(#p5Vwxgwm=~@dL|;@9;V_qL z0=Az*j5^B%-|2gZ?ZVqi1QQesZ^!$0Rc*Qp}Fo3pLr3)$cx&YQyws-KE!7EL<6nml0kY?m&4jC>HC0ZN|s z|GSgK+ey7U5f@@ojPMbbB1d*@=Ad6CFz_Rk;+Et~%bnAb02t`T6RI*R>4e7u z&VDm7Pj{Zj8nLXP(R6;4*pX4}N!KR1bh09E%q5=%r|AOk>g(-Q6>Z$&qNevlsU8U{ z!pc4_*2gHDfUPKj(C~1^hzP~mij_a7ZHl+5^XMZLee#yZC$pxOTAO70y?zv-1stD+ ze=q1x{j|2SP8F|BUss??;bbi=!u(Xxjj)Rwn5Eoy?MHvp{oPT3B>?m$V3LRZ1q9&h z0wxN_X!^`7lsVwt+r=MX)yb`?3GJU9>9W&~=2!Ze)f>f7%!%DU9+yd!qNUC6aROh# z$x&I(twNk1^|esn@Yj{V^Jk|B=f(a>eqJ4z35(#{jeGJxcm9#*8Ar?}itit?QNxbQg72QE`#!eR~3&>97k>8F+hz4Q7}7xeVt6XQzK^ zrJ_N#U%m2d{Lq >T@GddDbi}Poq3zpR-e5I8W6H|-Y%UUDr*HR;N z5h`)8cYuBI&qK^^FEebduZMVG5(l|>VvM}HQl7NJ8!$D>Fgrk^>x?v?ES4)~`8m0< zA}k(ts&?GGfKl((f~t*z75Avr-{?~y)t9tzlWzno8%v48jS(<7XVvX{(#A{C-Xwk$ zDhEXsQOaxjM*G~bOJ*DKuwT1Sq?YfHSxN^+M`4BkqUW7O#|dQC+%JWg$eMoN9U4w{ zMXF!`f$C$JKS%_Oqolx266@;0Nsxi-KuqvQQK1H`&i-fz_-tp)Ull6LanP-@L5#!v z^QZtrVu4fnWr9Rr=A*acuCy&r#IXzCFI`Agl+4`%Z>#STFtR`qkcfja+QY{r!0JGa^d@;v5wXM@ft}3K8a)O{3R7~{}F7olxBAt_+G6H6w*_Me8ndzBeV$U zHUKatsi_x4+O!9B-Ke1v)y5ZbjZT*zwjYp~7na5WK!VhQqhp$dPd^ygZqG(Oqr$o@ z1br2`hYcV)LRD+7kf+LvLxKIArm;+l=@KW0H!k-xYqPFoR&0*M@VmZ=0cZaGC8ze- zpPTFY0`UU}FJHEiN_3Kv8%@@8wppe`6h)t%ekD}DFuEPdg*9T{aL;U&c^SRoxJ zz~`g^%6m?;>Mcfm);B52`hG;|l_&zJ~{u}F^; zh6ElJ+eHf1eBP;+W(`mun=Edj`sE5H(l`H&>%&M91uoz>PXv<1q5zOxUGmYkY}%Cj z{6w&Dv?Aip0XZiCQK`PJB2ZUM2Z@oTMbN#+Lr6d((UTK@vNW+X@41$%uf(Jry5|U) zlQQeFj^{#VMrd|X;V?o^I(tPC#JMM%c{v#KmWK?^x>5buYo<|S$(3!(c_Ss+Kw563fs20fjdwxE-92w8oJ-NO1v)_ij zpJb-U2<5Y;{6sNOaxq6jjTA%V;DlPaeu|)I#&Xe;>yzFfgA4*>)|&~3Fio#2;ILwJ zT*2F?Q9{~|1NFj?O}D$7v2 zrVRSu;JeJ4X?RcWP)BhXC$~0PvoyT6g@*r>)5#rks8o%^NYr+>W|}HARi47%2-$Ns zfC)+cX?I=oFr2C-u{^ZfG{ZCB;vx`a{!uk&C1}jWsuukan?Lgy<&eo(SGcw~4}r?Ci=ts4n)iAxu!F% zs-7Lz3IA7sxk&#SM$Ij&b!&};rl;rG&){2Oy4BM3jGD`HT9N?l&>@#)cEgKW{K=91 z3Q%@Tm7O)#s`z7cDz#nBXyJ5fXnyL?;ot$7v%>b(E#Jb@D%yxgiqy^AwAvK-gJv;V9k@5Q zM)qGHr?18X`|XA&(_n%0odl}0Nj)R8u$G3>(4B|2^1g)$J1bC z`nLLBeHeL!MXNdZEGj*P2=ny&MS{#90BmJ3x?Rp&^4WfUv#qKDhiO;5zs7o{-0`-4 z>So}1^*X*NwC&`nka)sA`d->n_LeR0NpDisROyHW0LBUS+c|RpbQb^!X*z&COL?-T z@Smt4zCvXWh;mQ^gt=10Y4=uC8;Az9!b!Bhp0+S z9v5IrqYvU(TYvSq5Ytd11$)XICa28+Mskiz`E9JXE<%{e+ z<^-nWp91=sUdli8Y{=*|f1M*_luI_PMu@dt0?va%PH1u3sD!EwK)mITlPZAd&$v@1095nA=D!qH$lC(Q7x8$<2vXE(vNxT+jYo)V}py~+< zn@eINj@H(*0R-xZ9+-fftvwf2qvz#>YIC4R2M~Y5P1EqZ#N3vM?#C(lrA>)CjhQP8 za0n@uyn!{OlgOi>+XwV@d928}HDn(vhZZ6|mX9wzw$$64*mVF0?qkPIS04b{inulp zXXoYH!LTtU#-^V@$vDqnQh<0V$8DORvM$E&tbK(6A>GN1~-0V-93mh zAA-qS?7Iuj5961`vOr>?R)}~89uPUrDrm@qh^1=}+kOVb11&Bmd6s&T{o@`}8 zgg*N~*JayL8_}V?C1s|wTGaT%f@&0_#b~Q{@X)`Z`()fF2@Fx#6egU4PMbGpq=#f~ z=ru14Sy@@$x9x6?>}A&wSQmgakFd=Z$hm$kO0*Lyll zdUzP~4n+o+^)LG=DIGSHdHSXE#;=u_a_G}{oWR~)@r?c}PeJ4Xn3&YKkTYl!E5Op{ z`YM{4rYGjK|pFX=F^*5EIQe-01TkHha}2t1FS3Ir-&He7ftiJ-#mIZ~_WW`NE7JsMqPewbpHNwf>Nf;XinEQL zR+5snS?i2AUoz5{p5RS~ZWA1zpNe++^S#1f>Hr7>`YCXr5p_orV#y5-%K_-T`F*(Y z^n>_$rPiAc5cX^pLF#|XkD`&C9rjk5k$@W zHp-kUzpS-tnWQ8o73RbjhWQnZwmC$UDX%E>YY{4`W2Gg@wQGwdX~bkVT#~hR_i{Y9 z(jZjLlBe@BA&J@S75ww@j^3S>$yi34M#289*Xr558!N~aq{(P=s6ig^hnbC*C7glW zy7dDkCccg7SCOB$ZXh8q-J8r$V!_EK-&*$|=I-2|0FWjgKgA!9i{C#zO_=k|+^VO! zN{KUmQgF&@9lG6fOfkFGH~Cm^MTuZ~WMR=9kTBJZ&`l&|<5*HN0`yE28Mz}FL~-wO zssV7K{nc$3htmJwH4OR%fV{+$CLn`%{}|Ku!NAgW#)#sx( zIl~D>Ig|o9c4m4;pbJkc$8$fF`X?+FGF-W_;_g$lGff5^HUAU1u-nkD(>De#QY1YNK%lv_tO5CV5DVUSKYrKb(3%I|gMPr0NzxsTI=K}6*v@3(2MhgnOirO;k|+c_y)nC4~WK?dJgG6pI* z?AJcz;X#vaM9XpJDY`KVnV68f?XCbwZsK=8Bq|N-3ha@%Ug6O17v>`rR~Ipi%p~J8 zS2d-)Uww+KT9a;oN^?($xtVVo_LOm-C}RxjFP9JbwvEkU#y)6IbE)9a0QM^s0M!A^ zx8t+t<$)Q}0WbMY9UH(8bwIx)Zwdg)5_Imb^6_{qucBI=HWCE6cu%;}&hG4$9jAHQ z0JIalg(_ zB&VS46>X-@H_4Q_JIrou$*XY} zOO_&?wk&EB({cP`F(LJsBB`Zeex4g6*UB3QwphbnX;QG_E zlt4;ZR=?~c1L>_BSp=&O`DEy$owbg!vSL|B-17VnWEDq1hexlLmh<^xABCfiILyxg z_<$c}@aZBB@q>|XreB+(Dnz(+e&oPoY*jseH^IN(s`QzBmot8(zyYgTS|jREEz}D9 zNxi^x$=VV_$|T!9?OI1vSB{8*QSYlr_XQ=EEIA8{hkpNp7vQcn12taPZKHyB`S0X! z!Et1nF#zU<6F?UpA47@Q5+xm?Kf_Y_+j*+r?|0BRsK_^(`rJ!`3_s7(W*A-NTPQy+ zAGsygVv@KB=;VV5GR_tNff;`Eu-@AYnIfcs)7`K|3`s~4X+)YAOu@=b+j&C-kSwGi z1Dmk3nne0Ryxl+T00csG6B!OcfY&j9IqMG8DaX_vDEa`$T=1Z$L=&Ki@j24q8ld8+ z+6++Uwyv}+75)fhrSEsK{te>eyS1M5Lcg#ppy#^)HHsc-3tpQFG z=ERgLpm8=BdjsP-ZSw2#14I4o05&v&AsCWJcyo*$+dLpvb6)LDf)KjbsILqFIiLY> z-S>BEuYcUI^j68Ej~RwO-88+pwB3meYgKU`H2>!Ln7hPo^TVa1a;tt+HEqgt829`F zAjx?b{$PyI`#I=6X|VBpJ0$DMXVd|hdJ4#!8-$)Mc5%ADyNP4ELb8S=6*e)XnR|Ve zt3#&*9#yozhnzjfx_`=Sr)Khe;Mw||hc5HUX3y8ddMC*z%n+L*B^s2nKKc98!*jp- zByLkYCQlNQ_kAu<{6k9m+lX)iz>=7fVIK?XT0*mUmO7J$O-wzYqr2 z2o>O}klt(Cby3gPkMOy?wvk3_-~9DLmrrF{=VDQ|dh2*=kC6A-@QEE=TJXx4cx=X{ z*u`)h{WK_mBXQW&uwl22bc_O@M%JA<@o{RLy-U` zQ#-K6ID^dX#yY(J(%96;CY=zkKz*S>+LVe@==(q+oAS4U0DPj{q4jHQI?IQ`{BZw~ zgnK2@maND$3H-dCIBsF7nzxR&r^u+y_A7zc3@c65=zuT8U(Z%l{LR_v=lkfKkLM%P zd+bmtn_9FlpH_6dU6Ph{1{1XHL*l}WDCy_z5ZEK(IDa7){6ft6uquT_f}j%_5)vH` zU&lB~z^uj@M?wBmg_mTKSfAj)kD3iVC)z_K6HRPnWy30q&1+@3e@{bzfo1iR5Pz)D z3BqTuOcRT+6uZx=nekvgwx3RqJDOx}V(2K^mmVvglu3Y3eZJKYT_}yudXX9@6vZ)N z#+bPtl@W1HjnDD|zUiGG`^%`!EGy!yRh}kRZaiT?ei|LAV_-AI^$$j$SX9koHrgknDF>Yt za9-uOpcX3{RtlN>KuBnKnd4Udr$nryAW^quxlG>d(94=X&7*{RDzVIuNVT*?T#kZq zTEC(X|7JtXdN~U5d;kOcaZ8H-@pHmR^yqfxOl1Za=|D8efB}n11K#4rfw$Mmn~sXG zaI4JJbRZm7{$fp)Y6g3%Y(a;x&s|&xNMROCGDu3Ap){{iqFOP?cvhl7<>cZpkR$3q zd%(CUNBwYe=SxB&`j)U1n5k zN0{I{(!_@NBza31ys@+oOIGHvaQa$C zhto$c*72~1N!4{QmDf42kXK=6G2sLfSY{Q78&t@}@FMn_gYrj2E%-t7m>H@Q507>1 zS~Sh=Po)Vi&met|q;55V?l|0AgOaK$g)zRjc9|*4R0HMOrQ#Is;*!a$1?QmbILfQ* z-+DxG#&J{TNkb-k4e0KC;%8reoVZCz(|@1wusH%WO3hHIBYH22h|joqaCnd~XWe1* z#{Fg>h|RZJ+(x5zz9w__SYZBK(P(;^3n>GGpHrcnNUxTqB4ON1E`?i!sO`;J-|Z&& z?EAqU;isoV*`rs(Zy9zktyNEuVC##MOWf2SU>NS#xGo^T2CQw4w&jBGBX{+T8Wzye ztm3w7%Np1YDQy~f(6OXn@KcP6-gV+ZiIUsvGCx#E!_V0teRI((_WG0 zt#!G^x@W&SamU}o#r&wCj@#3=5?C;$>KQ&_x|I#8PYkr2ST%1#{=w`^yJcdkxd@MD z2;Xm=2+WUrs1r#(zW-MBtgZZ$yqmsGV4-&Ds)v>b{|c@~Qc6ZK(-x)Ew}132a?0cN zFYpSQo$4RbspvO;+g9eZ%J{ral`hu1wZ+CN1B{&6%9N2>^?I$_r_t8y50vs6i8O;l zDw>{(<~Yd&HE(^){(U$Ivk6<%?GbYWW3bQc78+UR5op zXY-P!z|{Y!5WRB;18YXb$W5nWD$Z;_zmH2i?1$SMJ2>xbBgx(w=7M8&TO5w|YRt_Q znQh9^Ca8bwn`CAdnRV)KOb147zRT_xrpRr!ebttr!o|zX3MK?>nF2U)^FMX@E>4P& zwsefD7R@^>1e~D)j((VNKQc2&yLE1ld7vlngBEDN<9d#%LiJd^#T zxAF;0&}RMasm}XGiq7YRT(rM$z+7c8%MaqGLfaOSJQ!c99y`wE6&|!fa!v7UxRR(_ zQ~UjP1FO|;nl4&6V6?C-EhE_UCJ=zyuQpJ+Xj|7~Z;r3342mtW78~eR}`ZT$=8+IyD&BN`U@9w{p(DJf0dw*R95{lI4vf3-z_9Y&;gev^;2TujiEC%- z+S=i-J9@8C03RiNWrG_36n*Agw2X4lhJs3bwrJSy7jAA%f%{IM(z3E}TlB_)>xw58 z3O(VtFT6WnXgLcfV>eH&-v#nRZo=cWQS|Qj(n<5nZEy2MA6E&`lR4%%pccpAF~h%5 z>O6Fw5x2&=ef7X7rJKT_G zflM8Eb`hDC_7zGeRkMt_WHo!)w|r9QyFgwJyF>VqWS?Bat<9EflZ|rMqbT3{NPHe4 z=`)X_R4qV@#&sPl#h-3YQnNO?e>=TCi%L4#yU$9Q*2!pTzd*H1+v|Aiu}SL1ui4VD zv3=X>ihe7nzniRPMIc=krzD!Q!&p zJBFPcfHJLDEMY~JCz<2p({c_=q|yg@DngXasMy)t&2*wnbNl&-cg5`w2~0e2(xHw&lz$VoCV(0=D3_7TNjREEw?t^wwFg~?gW?Cg%ftq z=WIlR`P>%%JKL5L`a3|TZ9EOs zuFprlSxsHatJ6aju>Dbllbv2Is!G~Iqw&WWuB1W%H^4+z+C%F1O%ow1J`auy2%b3dI!&)P1N+8hU$%T#!NFZ2`K zbw5^yqPgS+P=?~4HpsJTaspd{na=7Il>f-iPT$`D>R}#nSu?~P`&(W#@Z-wLyV=a@ zPDt{oHJ?IkTCv7?{W3#AtEO{}{*ZpaoDQ)amQm7t9~gV+Ke5$+Rcp|##+5#LYR&xv zW@le?rgAO-a0jxKR7#NMxR3BzS8W(dolluDGVG=A9_AY%`R?a|jd~v--G(dX<^%5-Gv3A zl}elIqe@1-<-Nv(I`~Gx;#6|Qj75Dh`;`r%$zI{k8%* zSx<5OEV)glmT_qtF^==YiI?#&eo1f1$r=+MC3EvYRMh2_C0j77$<$NTV(b&c!b^L) zAyTo3lY+#oI^4|P-#BRD50p;rn^?CV-5#H@GT~umwJi33PPp%1RML>skycd{RS6c# z@6=UpsGF~6bv8fwiYKtS{>ta$db)Fz_5h?hu6%w&-^Bti(&BtFXXAa96B;IM@*Ah7 zRMVb9G7@q@g)&t(G}8GfSm4>FT<;Awo9c&kFLthuYcqSQ$(f0n@Ca=KL)-K6;$;__lM- z)uVrD<>g?u>TFM9ls}y(b?x{9FlX-c6lQ)22H3IiZC9gTPF7NLE4@wt&PG1%>gtJD zvcjoiJ`cphxejlkV8orlog6s6AE%;>i-A(op>#%Yk(rJ<9Q6fm`Mp?m+@RenJew98 zOGaG$b(7n%$p;6s+UGhfk$Rpg7xl1&ctE;Gub1tBHO0Kt?hg1Wothk7RGX(kv+Bup zd>?_(jkWB$q@&(kd8a+_qC_{;>8s}=AtR+WyKdl1e*>(aFLcz_m%Q7@Yer4@BqZeL1r>F5w%;ag&#haU52sou+-mB8cC4+) z0*?=(Y@Y2NWQ1R^y!lW(wl{S!wdZ&Zs-V{?$pp=8RH21}@1qo9p9lkG6o|YT^Pu{Z z)vWAGdce+xSvM)utH;llzy4u%8#{<=GAP}&k0Pv5fr`Xu5n`#xWRT=`VHZ%aQ{SMT z8nsGw0=6XD%C)vFv?0q~w8GKx9%>eJETYQT%`o549>5kwq;lrVp3!*xwH>+)iV{%i zh@X}#J%z)1c5dkFhK|=e@FoQ8k2S0)V5J=U+mHr#LSqY`Yt-8AoY(PR9^@+z@zx%K z|I`~%%FO;bCW$SZNg(Z)fhkKee&AqnUnV(_eWW$uhdds|GS9|{CGu&Chb%Q zXrZ){m-^%Sk!Rn{6~3)--3-#A%{E10Erjc&Xw_vT<|Eo zKB9QxeudWAygZZr?EVfym@3>TdAI6);dw#3t;HzXr^cPpC-5f_Of4?>Z(!2Qcb5Yb zqiGvMS>6Shv`nB884))3N66plak}h}y%re-xyAM`*hE2#2MY$MuBAxC$gJ1SVb>5?G8;}3Q`rY_F+>cXBEWiQnwq z1xeW7M-I}z9shHAh_nj(>^kV7Tc@wJ?7p{0E2O$*N7eoDdqlr(I=_dm#5|kfw8qfo zLELQeCSHjWIW;vGx#bct=JKgzIOd9du;CUe?NQ|R@s#w~s}ck6mB1jMd(nac_+rk5 zM(T^w6pwL-dTvv-0Uo6KS2F}c%*zzujfUXwn)(s-oLW*!nyvBK*)y(TfQd+tIK2V; zkrAa|3+LLVJ48maMIm?Kw6dT7$XLcVV-wMTJiIT!Xq-CV=$fBr0-4BwsZ+&E^sFsu zrx+X<-`VeTUQJ2Ysq3H91r96>(U*&dH>SY&b*58!-`SRF}B zOfa3e>ukZsrIg6YNXfxkE;U{{{;i7fec$9&LjnvCFeb#g49vTmR(Ab*lNCM?U7~)wvG88z+@us8XVC zM_qB&rYW8GOdOV8E3$J7@QB>c^MJ}x-_0AO^Tf%|1EI%wE=nXgm^&u)3NE*LVBs=q znru3g*6dj8#U4>bsiei2qV!T-KAv>riRRT}=~_Yl;k@mWq>R)g!JW76dk!M;+sc3a zymuRuD*`d;>tDlWt5E+5Zug+uWvwQ_o~Y7O9q>U;D3+GefC(RIHi)6nC8G|{OWBBlosy1JdF`n%(@`bPz1-Iy>WF6TxuV`$8&4_Z+uF#B zON!l#=StQ7E+U_`rdR?0U10ys=9xDJj0rHADw;~m$9bZF1z18-u@&LUT)9(=GjS`xzDH*r_r6oRCk^G}VXl-VJ7Dc!51^44`C2cv%Dq4% zPL8AGa+fs49*Q&-vsBClMX5v0Vx;k{STb_k9fn)%;&Tv+u)5Zi+L~$$=v{a{I%|4F z5)D)b95UqpFfdgeRf_HYm+6o`*T$u7p`8iDY4K40)YQE7dO`$Bw zq%1a9RW-eErqd(f@JopVMNMYNH<$ytGsui5$0bt)oYm^iBC;lJ>mhqtr-=NBlNT8g z?Or!4Q;w0-z2O7p#GP&L;#n)aHtU{W7gEw=mQ4ud*e@i@>=7NdjZd%Q+m6jCD|+fW z9V6CLLVJjUXJ+iz3ZH4fkWp~0f8OUqgU$J^Ub~c)x8Q+YOUl&HLPw!2qEP5?hyXA0 zF;Po^f*corxn-&*En{M>CXGoy%cQB1>Umq5fZTO?HO7eI??QJFA@HJt9@jY?wI9Id zAe$#$YIsh)6kL{{^y9{`G6V`u)SJhoCrRZ!OH~t`+a%vU_|p#UjisNQSDgAoA+?kU z)^;gZ%s1YfHc->F7=M$KleD_KaE}EXLRy2H>!ZD3$QZi_{?xwT(|V=fyXClnRK<@` zksB(otRn@cQ0t@&^K$;-g^rd1D{1M_?uyDAcc(`c-MC5~Cyea<17)|zwahn-CH6`i z`&7WA4^vH;%bAQdEZ2MSHCdTH_$^W&77^BTkkC81{-XgMUe?t2r$s;5ql?eo>@*d_T~WP_ zuGxa=X_rxi~G>t^DW-cVgGCECD*ij8@Dr=_>sC#mH}zsegU~lT}yelSU9XU z!@Gya>qBpQ0+sn2N>w$%;0}#9Tm-N?HJO0m!TUjBwnA3^_hNBD7+5+m_zb|)Ay&o% zIjzQ9MWIh%`@E33D0y~&XXdS3_{ObP?#;%u^0vesz&AGg*l6l3o=g$`;+B<^NJ+2X zPCO0WfOZ?eKdb<{{Smw@!b0u)R!Ra8*ZGkJwyMRNj_AxEI`{VW(r}T}jaLA^mhX!R z5S?!3bVV~M8f|T|S&aJCx4sZ=_`B%Z+&&!4jWq>n0tGE5`Z2R zJ#WnNaIu<--pE}ffJDUMA4Jup_qq8PkrxfPJMH z&{=50mlASEXh8cRO!FYX9C@23NwawRd%^+FWRv_(WA;6&AT!gGsN!S$FyqJTdZN(u2N}=rOs|-FxrT=^#Kt9pH&0r1^RHML03`Hz!wk?fwO?i z+S^aH*9Uo$JtsiwfI5NiWb&ebl$Gbs01uK4Sc4>1)J+o;IkTY+oE2nbNsTr(-ea1@ccj!eX)BU! zU>#y)2w=G`f6G+fxes+X9;$W*o%6}MQNK$(-(y6tp&KQRI}9m8T+Lp$t#ujBfCt;xK#a4QeE$mlYVZvV zjGz}C$Qx@Dh#){DUS~Y1G*1GjreI*7!QMwI!+&-GuFneIuyFyty#CsD%%2eYp8+5b zOnhb_!2Vxt-vQOswyuknZ2{aHu~21OP!JHL2naz@kP?s*kP;#wy-8?N5=0TUD4>+k zr1t&l}^tamKyxy)_07h9qmvHP@Vf`M&S}*GS0U zmp|kG+oMC5dVhbZIHk;sKZzLRZvVbwpCetVL@q#Pjw3e-VrUkIF>EK2KKk2^kEmN&RLyaBvP2ed}P zn(oBYF+73Y7Orr&jeqqu3}Vu==$P?y)qOe+Hd14WYAyw1wg)yiuJY$OXc9^(KC};Z zH*sAGbsTtPU59RD{$Or?{6HXzu0!s0wvWV|C3pEz(-j|7=+%3z%xrrC{xk~zA+&@MLk7d*pL1-ulqJflUV<}RIWmh1}op_ze8_wcqX%2XD z392nH)Fw52FT;`Rv*#x0+rnh9yRja8MU$K- z&s!aL-smKYE`V_RS{c}k#$#PI@KMmXe8i)S18h`{zR0e5T{t{padGikoEz=v%TBXk zkp6g!2@ZAt+(A?8*He+oE~fnV7Zpfqolu zV~Ib?$)rff!l-BYE=W4rGc}yocfZY`9jRK>RO4u=z5NAUftv)Zrh(p5`uWbJqJUSx zI2nE3@wj@8q6?6Hb<5=@K3w-_{nIkt#LSMwtN;a6gTj0;(pX`1O z7vv0AzBCxo4n{GG3=nx3TX~!j()@OkRX`)wY(b~`y28CK`kb}@EGSJV9-5UED^I$n znb3nN>(0Y$!}MM#FaYKT9kFufLDsfX%H5qOmv$I#l9)tKHASy1)NV9|&A8c&$~81g z9es7=ILkmUGcRG0GBLpT#H_ngP?(MmGI(~Mw`F(&_gQR*Gfv9K^wL>Jn}!hem4Vl=_Cd2=Op5bj(2dqG z1T0Dcnk27;pbgNqy&IW;{Vp6{5{Kde<>fBE8Z&_2tdYv!dvyMtNb{^)>*tG8VK10S zj{tv{Og3CSL3ShNUG!d$ryJzN(l`L9(%}@nK*`0G>St+k4=%!lik-HY*CV6b7M?#? zlIO3p5dapQ`Eb_pcTRBZ`-3CG{s`T5t;EkawPM6O3O~g}=AF>BvYEh9o#tfrJb>Cg zk_W^Yyf*PyLb&C6)_s4v_E~kE$~g{&b`=LSH?i_K=-%?4+?N5V3D1*G&b#e@v`aP1 zdpt=@Zpo<-_vMlGjSM{4ng~LPh}|%}-1weNZ_Jc6E(Tj7@(E&X$a~lAL9>+M>%b?N zQ=N&dCzLm|5dc~Gk3)a?NqU=e`dKGMdL1me2)Waq9C?NLr)h4Ju_Y2Y& zg(v~qQb4qu18D26oXgH4;8BB589t7PD=yhUp*4Ga0)@K(3wutGZaXWL!=k&?qYLt^i5Y> zs%dk%oN_LOb7Qv<03#+yi>baYVkW6Ts5v#%{M7|($bkx~!ZB@qV_nZsJLP(rdSD&j zI#ah;Ht(@+uhuqfGaEjY`Wg0-IQe5d!M`b_vPT*-CVF*=8W5lWCNO+T z9}o0X8X*_tO;y+k%6&N#bf28s5V4_k+l}9YWn=FY`E)V z4&E?s%^(xaXnoXA+`-1gfnkpA0;jldfD;@U4KM(>t2LBRfZi=;<%Z+}MQNHTYOSml z;&or7ta6af&@~-iX3=}q#P6=65=3lV2nO(h=ZRHK21Ry864@TWI_&Hi^Rz$)yjI}E z(X?MwpFg(8s9;e1HMMwn!+R{?Uftx2q;Kg`cm*JBvE2PxhXRPsP@xDt(!Dt_udd<# zw(It0%Qeby@|v}QZr^&j-5qJhHU;R!4UobpnC{}zsrHQMf>3tDC)=tMekoc=%^827 zlMK3k@)#R&yq8kw^skmXLOc+JH zhMFbEN!tepLbf93Zhlpz?+^>@_XM~YVH-~{$fRU7f!(|~*wy1l_lONV-G$NZ-6jTY z?oAx%v`xH#MvK7h))TvzLorRdIJjJ??Q}&+>k>q)Q|f_q*dYSqW+#fA=Q zHAj?GTSH8#*6@ifh04DXVZWQ0b|oV{Gl+qXKK8s^jGq zTk1S~X2(|=N4xGu3ecBzds=Xnn@`5uB%U$}oCCj&%}Z2esr_naSEENhaJZJVMc{CI zrW^EUq-uDL(@IwN1~Mr2Q~ej!G}HzFzk9zi4yxM5Fi3fa3||BLniK1K?#T!Y;C*w` z?eNcEzfWr##}4!!J@aO!pU-tAzMaQSxY`y=YGC^|!c5B0d~V0#c4Cmkd*+ys}c zSduld8r?M?0sgg(6F;q_?Nk;X5#hG0lVeJ4aHY<%hb<0v?cbA9jc9t`?b?R1pCPTS z@6m`<(?iLgi;f#IM@X!?)*S>sQ!nG`Kx-k*-Y)vQt^DrLYih$PTBvVR=*EpN!#?*b ziMZ_S>sJK?a;lcX(ezOSIj7)mDuO;IBXb2Bf9pQpZx$ZHDR<9G6fcl&UL0hnb>^yS zw0e9}vH<;=Q;f^GG9e+K>~qA5;)aUJvi^`7m+LSSH~#c+?eJg#w!0f=YQ$T{##W~o zZvsKw9;3^N?@CHL+D>mqBva)0*tn_32< zyXUdmz2qfrN7)wk|0xMB=2SyVJVzP)2rB`maggLPpju94YcJK?9rxXn$Kdut8rBE& zelMH96MJL?&CNu*8F&S396V}G*fR5qEum4EI_q~(S?V~P-r9N++<17@#RrsAu=}e2Hv)H^7(Zc8PzP!#BMG04l1D&k|R*FX3)Bl zl!s8D#9>4#G$kbog~L0%JWR5@9O+CW4Uv5u8S|!S1H&9tu^ml-O6Wpk^FvlnpcIl$ z$3wS)2Vb~o3sgb6?j;5fAKs$`V3RzrfNL~`^7i8CqmV_7gB$W|A$WZc{Xq2A61jq$ zX^X|;^qqMu-#$GXzIddMk^JySv=?V`p#YFz*|>|U^bBx=;lPreoMtP)3bQoX#T-?~ zuAW;4fjL%8F4d@52Dk+Sy~xU8rwN7%B1mZbbDla_yWqu`^?{A~jGeQ`=XD>zbdo<4 z0cL%Ze+8)BB%QTMH`jG+9`SK-a1=s)pcS~?l?Cvg3%M(QId-|2;6iV%|ABfJd#40rv_Ei5>AcrGV(3G_*Du(RirGqw6cq=of-*A-y~gqB;2 z&ssB|l;xzJ`c8ElJ?A)F_0Tf94aDqcIcD`OEi=%xcl6$r*UUiPNi#|V3tlt{1x283 z-hR?-#B8^mC5Zm zej;n=Mf6I|swr$Y{k-XmhtAd8!BbOH&x(d;DDmri(2hiTbvm_=&wk+u0wbiLE@|5G zS?)@_abQP=nscQ2-u7UJr$V|Pb&$_?yna{wbj$oki&I$}P!wzgN{)PWsjNwMZc4lBQLlSGZ{# zVRR*F;%;*4AICvxJHj0s+USJIvD4?`XoS;GW-}@5v`cZ|;8BVkGMBwvg)mJp^-o!SkqiN5aT3 zsR^KRAiX~xT5ZwhozO0i{g#f#h;-JC7|WA@ZFlW_rAV-O4d@{tjwpxkIoNc0*3i>F zcS%;Q{y4M!qlO684{5x**#jPr9uyj~z7fidbpmdr;1jA6JZi0C`|Q_a7D2)Uz>ERw zvldYdyo2H~+lB`!zGK-fFcf%E`=BhU`w#`@s7y zC7(XUB<>H;dlti_v2SHA9Rgk$AV-rI15?7=6lj}%=YYpankni`)Rm% zDP6o7KT!zm-}_d1tj{0Ao?F12fcn z^7NNdY=nqutUs0MSCho%b4@Opr1pjq?gp598%Ku8%emzmG&fh1we z)&4;_QP$;811Vu(o6)G$7Eey|l_TDM#QP#hwvAenR;hF3PDtuZ+hAuw<>ZlT_H2oj2M^ zl^(w4GD!ezF1`!#9(zEfH?w2hjiqsp9!U?+cb4U_Fun8;zv7&)g+MKi25UX)-+gsh zeuIp-F7~D1m#Q_&2~qLj_PnUJwra-dG{@V4oZ>LIwZcZNgk0n3vCP)sld+jO>FE!u zw?^7zku&MN;)U)T%bvLvSkErylT7mLhi<&|o{hHO>i0ZI8WW?rr6fPb0~;zN_9cuF zty^ZSRMSnNab9VipM)bj21;998$O7fjUrKZ%WNl8hp|{J#x_n(V=31Faqzlx?!2J< zZFK-@ColR|uX_Fg=8EvO%?%3Ox%h=E$omL$2`Ze|AhNQfz*fz^vWHn6%p7CQOi;%m z%#D!h)l&!^;0rUT#qz7dL)*e!_XhxW;@12Xn{d^q`BobeF#qwUNkz^EKh_u#U1&xe zfF^#$iW^#UQe2@12C$OFAtx&Qa4k%XmboNlTbKGh_?-)>!P6kS0;?R@aScCFFf?Q% zT)oO4g~7Dk8u5&9)Resw3vC4mZcFe{DpX2yo|vK)R=h3xaVb{ z?(Oc2%|wW~NOgR2eLXeJ?LAGf1ejd&=V4G(!ohbwcN8<8s~(;E%-Oot`u1s<-hj>8 zGTZfQBUkYg2!ys>ocHqV`N#ojHP?CJ$mP~2=>YyENv7tA3{7G$jS7yXLza6mPMec= z;37bAf4shOS_OHtiy@;}vCKzagLLWSUo`n%4p2qS0?y^@iG^*BBMNtZIN;QM=U(Pr zLkP5ps~XscUVWqgC&02ZD*(;4Qe~Xh7^)kYZrKIN+6j2Epk`UiqrMuMHPTPey5QVe zEMPOYRWw_@KGAT!%-9b-uN9syHhs-*CtD1gn8` zo==4NCLL{&m|c6}wt9q;Q`I}cPYIAR$U8^81L@9Ckd;*ijs)(ZYS9S#9J)-;R<1wv zb~Zc3TNjXo+dDDPFV*n6zA`-gomtrpQPH9$p=x@qroEOrB&*&n&3UzkA=+TS%EBja zii!vyt;S38Rr3uEg4|5PZ!NqQ36KtE%IZq7E1W~Z)!4zrH##x?DTsxymA!kXWwU(; z^-9n$jCX|3gD+9J&c@_^k_SF%Kw(0A)UDCFiw&~>)3pQ=Xl6rQGHhLnPF7k)*JBFA!=)-wzqUA=;vXi>2#p`njhnjb2y7F?(S*yIhS4COEZK^Fd@}0SvYFi}; zS53o+mPT1!2tRle<8QPQzj@H5hWD@dsR_?z(ijiNlV z=Eas?tDTPCIW*K%Uv)OD(bM6+BOO10K3kZCw!P@zBoNALw~m^T^2V*r zCw!EtE%aUbS@!|8G+Nz&9NRuV&GeEA@q&wFjrH^(AB|L*B{-A@#y`a$-_-ipagk`| z#~F{-by+*1rcS?kVQUY{qwqp8JhEFr6?cnrf$8PSeZ`Xxf=Q$c-oa6>FBGT{$PY&s8! z7}~L*6reM}OrDg=hZC04l|tZxHwJ|8^pfq>5u7wep6d^Vq?WF}xa3JDMs#xX`UN;` z@?^f@E>1J4odBY4R+;V06265e-Cwf-yj&D8z#w0qY&-lITN)}W)Z3GO>6%`sA#|1k}C#iq~0&+y`}4gyPZk4V>r->4*V6p#JR zoV!}#%=4+W9~2K>QDqIPJ^&Cro08(mO^-mchz?WwvE8^Z{o^$^rD>TUBA-FZ%5A=I z@{F7^pFUidZ5tS<$FBQ9dQDlI!Ih9I~p+n9OwQQ!+q*1YMt&VsizBVNtYR zaX_MFe;71i4skBGT^4jSsuVo){8*5g4((222&Lz%Pw^EXY3P1=lYDwD$aR}hm&eQL zvAyvefZ|zcL98}Sm@WP;XuQ0Z>$#gw1av)vPH^lSsa^lsGp!`ZpVd`Uw=T0ZzNVTR zwy-sDw7wlIZ2hV)8X(qg<&Mek4S$D8ejGk0QbG8`p@NvyF@mN(!=Wh<2m$OZq)HQM zY#{=ZECKj$5CIl06%@~yKZ-FLvI)n5QZxIB6(0XmF!82d4WXaSOxi$X-z>U?-&xO+h`D*JhJo)d=XN{v<@3+ zhygkY-wf_>_;H?4|cDRTX~U*K=)CGPc}TBisDVN65SVR>=_;JmP}c*9&djGDtNC$ z<0ZA^6mr;D0o=y#Zw11Pm9KkXj{=1g2nNhR)rqD0bHdJ+4l2fLBi!fy_9XJn!8Edb z46`f}b=J7PF;zfqPryEvmK4@S?DXn-&xb_cJY@T|%M%zQN$;fxZEN%Gh?}t|KN+iHHu^7t ziKjsJ1I#U^g$u$$SRB(vc^rou7u*&?EBX4lL?K)@)8Fe~edsQoyyHov+cdkpnppjG zOxnJ01m^EPIZlRCAc9$a90y}1lOxXClETYrxuHjx629GX0NfEa2m3**7xbKCuxZcl zkeTZse)rIbjMGKVLHl+9q>2_bSQy*wRgA)#T>xO`qj0_FE0KaiLb5*|0a=qJD2gJ% z8C6M@ZrW&7izcnpr+q+zs^^ySXnnBd!9_6WVM0Dq?@4;FmhV(g5?>AQ9>|N)G{WC8@fkuNO zzj+m?d-H3MKVM0n0Ya$3_vG_70JJkhKpei=uz;=c+Y(UWmAElG-)RK1Kn56X#fy|= zD3P?s*3Nn~jiz(kjaJ3gpkGtkw6I@QJ3m(DtP?REshMQCj7{=e4*=-?5Y{3+b1*2a z($m-c#2v2F?Yvlk{RQX^NyQXB{ZbgjIyeBeZwO57v+6jdagOi=teUG5VPG)sx90*J z2BmKphWRba0fl)2DEd4pXQJrZ^u@{Z_0-fJsV|>P373JvJekLz3v#-W@skO124^ljo>-;W zFMU0+uKEicPdr&p+!r|tbhF@z2%m2FkX5At>N&Bkk&V!pGdqKh;N*IGf8r_O>CfE1 z;e8scbfK29C%X`jlWI^`RTU5k*ED0Xf~w4H-2Jt6mn}hb^2fLBqm2bge$}2;5x=?c zXXm;(n7lHd9+Bc2$_O|2s+I($D2W4_ANrn;VXob)(9;>qRP_|R%ey@Olx!Q=kqN32BK@ZR zLhnS-`?K!>*^Eo7W1Wys zO3K57Tv=`B>(Z$40(^P^Lr31((d1#m$p@s@mgH4njW(PsVDz=kcbrm}9;T^;f>!-r z!^<9CcX^4F@{Bm2KAJy&3@(tE*A4R1L7&x{0#c04E)8vIX>Gr{B0uukBB_Q>bhfV( zR*y>T!OteZFMqA9ZY-AmX4gIb^GivSBl!Smzi@WkJ&AL6omvhiCYANyOVM)%J}f1a zuS_qcZb2=dvGy;r>0h6(Rj_1f?Pk}aMIBJ>5&9F~9ss7%h!!2@-WOgu6RbHvc)w+) zw(cYE?fgB7gNOaHDu9s((!zku&h0s!b$Ps8{mU16s!N~5c0&{coV!PRax%q$h}% zR%my1dAM9ja(txrMOyW-B8EI>^A><6waim>dV5Ruw+!5Okx?rZ6!g{2h093==v%&7 zeHox|Fx)(qNBsRZu@^uVJ5S2S(WuxecZG|}H1PIo7=bz>O;?^5f!S?PCD-?i#?Lb) z3#6r8f1VEvOH@>*K5bVx3XbbVCHXy(iid;91*~@vPHnM9iI(>B%z z0HAmpJPjEhR{4W((r&nH6MOxFejxBSo0luc{1W7BDx#ARgB_o8p^t#o*f0M7Ay8+IM~`6Yc-|QUQkrXz|AePW^HgH3T(7Y+ty_d z@(+LR>au;y?~N7DoTueez`8X7!}nV-D4F208e8O)K_X4F9-OnSIBiq|pIY z2syHNmYrRw<*}=h#x68RE9pf!w?g&afV~l|$F3arUK)oN^*vu~elFo%L3P?OX%YQm zVs0ho=0Ir&c{bF_SDT5HaKY#7SN#|?ejklTs@uWHQ3JSxM-#L;_6j{C!OFDB#O{K( z5!Yf&JWdG+RAkVeu&#S>Z;i)y&@|DJ_q04a=thszyUsl)ixKs6gY!SPSO5 zVzZ1_s!IX9Xc>oXpMY+&0WY)OkNqEwAz=k4gaK0sI7; zi#^N5m5aVXTXaUUD6v*TdBarBi=53VOx5WT6GPtN24ojl3}Rwms9An{p2Wf#56kpz zLMMFBoiarRn74sb;UT7vDW1o86`d{OGXMC4x){PHWxr2K8S%Vs;9OOx0s72+x@&M> zJ-#CobYX`X7zl~XBzB90WmUEK)RST^(E9KPK~5E09$Q_c+~rZqqI1nwdd-3KgaOnY z=830i{;D(YZUCME4jM9I+=aG0={ri$*t?pN?!6-f`^_{zst=Eh?_+UtQ&Qou0~j(` zk6UmoZmGel=onf9k0>cALEcFSejCDAqWR^nnQi~|MiBqh_^*|$ck;~sxo_xbO8JNxtI?Cb`6Rm~ zE$~rzXrgd`QncvcKnItbEIkr{x{tjKW7X8vE#uHEpczPiznkS|SO3?wh^=OWnsl>^ zIoR-G_cm}Z#mZXrr6y1=AK9mxah*vKh!MO+oI?!O)=mK6k*4Q*emvFXa-n5(G5tZ! zxS#bK4=4JAEUkq8@9)mf+z`@LwawXAND2(&&iMB2$`)Tt#)*img&q~&-sE-(*rSop zR_{ukiFqMh0}Qdxb+K|p0qeu746*1-`(VJ+yF*J#o%Wxc?@A)1-_Vt`UpY(!f$Er4 zj(%@lnt(gF7qxfqKsB%li1{M2H2Z#}G)Oo+@_VSdt~T=7C0@Up9ycT4)0-|XbNY%)#Eg??I6?bmzd37p}PE>kBkk*36fofFb zS)tW$E*Hfm>{sq)WLewo{5%wlnaPPdD5P5Co9+T386x+Pk}?UT8DGWGsMR=s1@6Cx z|DNa+ePf}yjy6()de@ntkOR!A{Yc($#dPAHq?DXe=6(8m$*XW&UN4t(O`4?N?qi@c z$+S=j6;x2r1W|luiz7dyn@0oibpi!tMg&3$r?^}8HLV03**T^_Zk1M5*f(XVR;cdp z(@-HqN9b#344Tp-#u00nP#&4oZ;=whHI6xjL8lF%Q1^m@vyO_4_7KlmKv)3^7451B zvaajtp?q@bMOo`JTl%)`Lu(bwp_MZpDs4RM`HNV=1c;|*5OSOR;{Y{M=92|*#o1t_ z5NKdfIl)k}$|?ey$j-icF+L`Hb5jHQNgNoy8oeHX(=>eph_Tw6WAngQpqEE0jolUS zI=y@Ln?onm+Ll1jc)`owt^(}D8-LGLjM)W)l(O+|L$_EV$J^?&~MY1&N14E zfa8oUNe#>Z+SDuFpO{g`=uE} zB>vLwgHMypSwH?Q*9YtH)-TWb>(c-BB>$c3J+ksF`_Bh__J8znLSM@){By%`3jWvL z3%Y*spA&BO|7W)T-HkT!1DfL>7J`YS!)pGkXaY>)$3WbFuE>8`F#oc)?!@?

      &ZLjJRZk7*$oL;L$Qt*QortV4pzFYRJ2y#NWdCOb-a-JEys!2FflcC zn~xN4N&*|m4RJ&8cN}jw2FAW**yzoPXamtZCFa|czy_j2+z@<+<1G&M_^Cz>xiblDAUMPg z!FM}e#EGhB%!7l2A18qg1c$gG_#VeQSgdw(pNi?6V0b@GL>q_>^F#K}9XI>Jnx5Qq z;Bjvp(o*%r;_OLO7 z?U^EQJntK^QK1GNewBUO*|q8@tm9>g&XHpG^jqOG$PQk zc+H(vndHVuK_njv%joT2&}QmATE5eg(I!RW34ru7!u%4s6uaaB9pZ-@5;Tb;EC$hh zBrFBZmx~0Q<5>;hCQXEGPHRQ$>LW{hUU4lPE$$5XZS;8Mef9Ek3US ztYh%1o#nI_s``Crs~Yy^cNS%FqFlv_jovW|Q@S|`Gl{oPZIbzs_U{RMbr7O!!+hyN z$`^9K9|N>dZJU%BVS~8agsYoR7P`m!*Q~CNtywD)G1dNI5@u4WsxO7cnIZQ_j<;6y zW;EQxeMb`3KyHW`a_@4y-D6Db+L0BimSS|3gf);GVuswGc)TlnRu8UQbC^-=Jqb`F zsU9nY{#h9tiJ+Z`aVJQVwagc?_qJWlamc6B#OEDnv!Ukzigqc*|5959^8s1Epa6#BpVJ6kV zqgDHRG`yKG)15ypOg-4I*@a0~!K`GN3jMDJuokV?Ihf}}5lHQ^lZ{5&5{>&k4R9Sp z#JFQJ5W{;T5<*3ZHwH0=Ye>;7mXI98bAl%&Vwm{?$8intMsY-BAchY_B!p5R#(h#l zie|Bd(taZ526X$r|@*(eP%%jB%e4X0pcp;b?d>VaB-6 z5+-Artx@CtXaiV_PB89}2q^MnT7s-O_N`f=9t)r@o*M&_gofB4?i0d=6)QXk>8~u2 zHEPxHpyT>v5*U{n=Z4@5Jl?*}{-P%tiTzX}+DLSWAF?m>xCgPI;AErgx+oEBBs#py)Pw# zT6|b~lpUh43UT)>d+VBYRybzES2utgiw}uF1b0sE!<%jrb5Er_&phDZMEI^aWaR2} zC$U22j~!#llZg)YCvl{aNRJaDf9e>kWxR96H`n!G?`H{+2-OXSO{C8Vk-rc=sq=gc zi!BvqPK$y5FB8G2*aT(>zTff6_HQE=jmEDMphTfQBSikj@j;rmui$|gkSNYELD=tw zr_x`+Rsvh#Xm=irhKnffB2Y6XDl*IkVSiFgU7dL9hGi5f6x7;>BEeeJzTDgwlIJr* z++Q4@Yq((O4@bkJ*{o2IWr3u>I*xEQAB_PfpI$a8&9On;6N;-7v&~LCAky!;pq4xt z1&p+CK0}O<_mpEBR_`0|x!B)Bp|Lzth@ysse>z&TX$^{cIuxqYq8nf-KuO3T%Ly|6 z?Wp+{Eo&4XZ~P}5+(3%vfSC78v7)tNkeB29z{IQwE!dBDltq;W3=-ex2PU!$E!f}h zD7zFpiseK>~_PHyt9gp*PS-y5*uRcLjpRB`hBdpmzimp@D56Api1YWJw9=XlhhWp)+I1t#N7s+8v8%%mHlt}2 zVUjS!_eW1w71@f#2NU>HGnz*6B?&`(fA(Z`)~h{zrTV&&!$#MSjcA*LG5n<&O{4gd zgdx7aT3KzZREKU@kLLk>ooWQc`t)ccg5-$eQV_}GVHxuW5fjaW&B_xASQF8P7gGP` zabjs?S--RdA{cU?N=6%r4hw+ve|Y@eV@sTD6u>`|utt)7X2?Bb>mm;5ER7tp;jns1 zUhph+>Qo|8OG$6M-GlHx`6=J`xjC#ax10FsgdD8v2H_nh{BSdiolTDl7}pot-EN zUSzNoq2oiLoYR!*nIiP0A;xnPWYKY%eo>z@i1QkgG>^;4K}4TOkRn?pR1=3f^2vr2 z&7-kW5X%J#GWhEC@xHpfa#?fRkAC%s4+?NXq+5G^qH6xcogdI z9E9rz_>*JJhwWX`l&D#35n+h%(ga!D(t#bbYAT4a+UJ_lG>^^~h1foyAgNk&z6CCC zgg1}Hh(HWiBuFp?Nka)Hzmq2<_8~}c!{ww$uq@c zb(wO9#A~JFi(f1Oi=w$}BYu|4~@Jx{?8HnNsF$oKca4iYP57@IW zV_n$UZOw?9MHQBX=x$Gv#1{Z`Y%ql%H6eM1xSSwFb!UBu#2BHA$f+loFGJXZ<3t;fg&8_+STY^ zG^2Tj$UISq?Y<;QeSIb_G)4C}rg(;!tQf@e>m(_3&FJ>>!svg~oa!0k3yDLV4{u#9 zR_pYtLg#{Icq-+0s29*9TXQ3f4*^loU$^FNOCN%pP6a)>H6NRKkn)vEfsc79_Xt|c zCAd5#!Q)$-*G&~{llCh5&unc|R8MRzt`Cz)kO~p>By!cI6A>0t(iBgDf-fG!8>N0v znvdA>`|O>!^hnU(DMv`U>JHbEf&arKm^AubOG~HkC7q!Crz9JMl6phsvI3H)sc}$H z?}osZ0q}oO?ZByggWG}t{%`6YI7`6bwlskM#}xpmT<>dWT?i8mhU2#3T6L19OZzEJ zzn2scMmi(L@<77-x8bT!l7#MdCE-L;KmzHE1j_>n*KSJ{REF{XbT`&1=}&Jl%wbk% z=PZ8dDOdT*^?Ye(Uc>{rbCWVVZZ#>h)8t9YlXTZ2977rWJm{$o%5y73>iHmsW6f@Q z>NUQ11Nhc@)F32|uZPhke3NYRK1Vz72~I6Mj;aALt1`sc~ngc}yB7{G@i(oon3C zlxf0GD&1RR1x;4KwI5V}qR3%P6vrY9I;#mksS|!u)vMVsh6z8Z`(t^)c#1WS{;>6m zE0WO9gr8J#9*;M7V~vYEdNms3uvfj_3#Co?N#$uC&aBj&KyRahekS~+PWVZ!s0zh( zhtSGH+|?=!X2MS@T%hO{dBRVsJS@YMdcsdCn^& z4`RY9n(&jVyr_nB$c! z9**TJJnMFo?Fm1r)`P0w2vb)Rep0n_RWz^@eo`m=r0RDcCj6wT!xQ+1(}bVY2|uaa zIwsx>Ja4D@2|uYyCv>l>y`W0>YTshCTJtE>^8bXN)CoVSF+Zyqf=u{H_5H0vArpR5 zb(5m!H*8X@OU?;Dsdxv+xj=2ADMzH*-w8jd%DpOT*o2={WfBv9QYZYRYLBi_2aFSb zQuBN_M7gV-@RQ2@I}?6Vb#EK<_&VVyRn-)6x;o(}6?J98Ppao;75bR)lS+rV5pS!| z%Y>g)&&4YAG2tf_?|I6qqwnsNUN$EDq^UC$>grC$2KdIvAfG$+cI;!+BW?!1Nl?gwo`3XO%6Mj-X zZ>qYs=7ci*r;;c@ut8wby#1L+t_e8FV<| zCl%(y1;GhFsS|!uC;X(w{iFsv*X#5GTrc)<&nf+z2HyE%Ay(fi7sO0ahoUZZ);cYkMBG8*StescrKZGlNIY8+7i+!E zlTjq`zLvPHnPfOk2JswATxd!xY2Hr}&l_w?Dk*-QmD}Eoc#b6E^@_MsYf36f*k6&d zM4IMqj-=v1M~!2L;g>t#)l+MMC*PpcN8mnKA#Fh5D4oVBWnS+$NC8OEN9cW9F|`9K z`A|=(x7;l;bpR^+P^GKCEXXV%-9Az)O89Jq&kKcjDTaLk%=dxbu9Avm4v-!nDb}hA z*$+ssLTHqA{$VWDme!f%8c?=tIsN9+dRTd3NI8{63hnM>$oQhrOh2uqD31ZW&cnQDH;}L@h~44oNx1Zcqm*a znOPk5fdwYb%;Z}=q+08usA@}FVP+c>{WcHm?K5mF&D9nu)Sdbn)fx}Mei@Zd#mLv9I@lswqqAa?ArDNmX}R(uOcllgMdEM|eP`R@Jdn z$wzt!DyT+iN*lw7E-|sCcPeNej_ImO`@ovZc#gKfyrE8szS=TJ)ysEVaqabrsZCVn zv4Mxcsbj5wNX!!jG?V&ykB?VsIvrHdaXwP+(g-#5ULUDoM$2;Hg8rz$G+-C2c zKRWM0njSLGbTWBnvF-zBt~vD3^&?{t7#l)_qA+B8!S%iP71=v~zyXMDZ%F=#mW*W9 z@ls;T5zAIGf!4RZ3LqyA-U0ntE+sm5g>d#}s>~L2ZVQRoMJV!Hz)vW{Eh@(fg))iy zX;Gq^>Iz9b+a;08GJ}?;+H(0d%7TWFKC0-Pu!;&sN6AX!@N-BMEY@(IW>#Yblv916 zyBq$zp-|AlL!XDY@w6p}V|;?GvKp5@Aq2M;0e{lL5pIm#Qo;ESE`)`*bpXD=!Dt9V zag+PuK*!q8B370`b4K~>6|xb7vP`M5N3`5ZxmfO5Sk}93@>Uw_-CrX#rJgF!DR)F{ zj~-VkKob>CL3@)Fv@-=yXz8^|XMeR1wyie&DCrc(Bs>`<3Z;QmOvB$*8V379NvO8$ zHxunqV@2%8Wc)+NFxXe`hwEGwJtR@?KOI(Hh_+s|1B}hf(+(Rbl`O=j>^~|wi^9oi zK?B%0EdarJY+5z$i{Rt~BPAsja+sL+IE<&VTa0QtJ}pUG)EiO&y6k2#iXFVqNbRl9 zf#GPWy%OUI4%^Si7~=;RV;jcTU7;w=Fri6CCEAm;Xz=X5Pvc%9YuOr**zFYv(mJ@e)}l(Alz zF80<6Sk>>Zgma3%s$r9ejuxjiYPn>!jggf_*%$j1wk5J8)W~OT^fIP!E%LriqTiR% zU+RRrwouEiNn`jqpCTH)nh;;EqL)EyIQ!3NUtiGD!5hlGlEv&_;ZcO5S0v2-l`4K2 z8i(V5Mnk(wO9yW#ekF_XU+qzZ;#VY${~Fp{q25#J9Sld`tR<8d>8n~eS&hwUL5%xa zAMPKh^mX>q?lc9XzMfIH*E!w|NBu0?{TsA&GS_>n(rRc?6n&!)gN89{7-_=^N#S+5 zD&G6Et8%!(+8Bf6lqR*#)!N#vm)Bkmq%Ch?tjFOJ>vbj|Z|Kc>T^kWZ-`cW%?WkKu zQ#WoAt)R);8j{I6P&>&u?rKOT3qTztlLfg(k;;teW|N7B4FmZ?r&H zX}|!S2`}&f6VCkh>+rUEsjt&4Q!q^fK450!Ow^zSkmXWEO^=zVgM2_OYjEsQvB90fMvL9SGa&?PpM#;fdyX@8Rq zuMH1{7D$&`1Z7}WPMLu>J7A#SF2phmZ?Q;a*sZoQ4|R*k6hM+iLps=oTR~ikSkB|^+@9>}jRlTYHcY48n#RaB5F%9n`#MY{QkV!h@ zf42*+sK$md9~;=DVBj;NrqmlrjMgq=DAQl1T~EsMAsI$KmZULYqJ7$t@{X zYdltzA+qoZVa9`lzH+r^Nx9xOn=>j)#zvTn7z}VkGFNP<@lOdgTEu#Fpxcur#l{4G z+7j^0-^QxCSm>}Vr>C=@Bdf-gpYbU^H_J+ryOY1ugUIG0KjPkj#z_ z9(s#(ej`p9&U%N*`!{2h`-O9~pUKg;Vw7$Bg%gT?FBRg5qjOO=}_shA>+FVG724xGA;vabE@J+ zWPC3{2DlStKnIC3ejqZ~X$~RRdJ(l@<9VA;t=B}^mLOrQ#;WhddF3QydEiGz1(71* z@St&#$coY(Dkk<@(uLNBO*vSZEQ&iLWR*A>+l{*%nd-q4#IYHSd1-nYo`?B6cs~7?~>^CyWM%LfENDB%gPo_+!LX@)^^*@AC z#7UNEICcWbM<5Kas66pXwRk4w& z`JyF}TRuFo1d>;a^N!C?Xmt%UdYpr4m6lmD`d$ZOo@_DJbPVl|cc_^#TM`|B=jD#5 zaUM@_M9F!4zavPojUh1sx2sF+BB z0SGPXwWPqHK0!uNQM3|5&5u)Hup=_s2z4h?=yViFfrd0ehEB(<&hDOpJpahjXDZlF zXwf9Lwj8#0bd6iR)OT+A@^yx?tqG;n$kz*HkE~%f7Anhx`wQs+;%_2U)(PJrlwAXZ zjS1B{<^hVZ*o00}Iala<2Z{@tP^!Ilq}+(5nNnlQc1dJWG+Qp}os^<%r@@k-gT?OF z7%nL)EAHW1Pqi8+k)(8cByBM%l7@L6Ng+z2R5afsX^)XeT6%;8X^q9wCb7Ix@FGTE zwce-%wO-pV`lV&n`%0~LDG8Nfz#)VcRFIuIgAVE|wJAg`2p!}QFllJEY#FLJsIOE| zOll>l>JTt#s11u?9LCff*jH*-Y-U5(ki)=eK)pY3p#%F$9h!0W%r;KO7C8)z2E+y? zE(#4hu&*>rF&41bhpAcYFfbahpf&<6abRCb)_-LuP+=Ar-{deb8gTZ^0+X}UfqkWY zb&PXn7MPkhI}D5(Y;RTjiw-tm8%l4EVuaqnw#*@5(~v5?Lmbps+D|d5(p&BjFlk7Y z-U?@)(=QCoy5z{4C!R)gviJlvsRHFlwkaMXchHK;Dbw>lK8 z+A>TbzRiJTHK;Ddl@0}~whe6Pl44xtK(ZQCm*Z-Og4I}uF32?wB&$YENv;!ATI0I> z6&1@se|;1ZHOX_;u_z>JkX;@dqL5@0<8>^rMj^>Y3s*gkj6#x3Y%jnz!6>AjaB$h< zs3;_6+CtNQM-&oMY>{=@C?p2gLZd%A3Ms2MRoX!q~yHYwQ6zA5244yR+WMH~D?@J>cdyPP*)qS^+H`;_?j2$YQlA1sH+Fpd!eot+~9?}I&h;G>T1B( zy-;WW-|#}6^?%a~^=U`BJ3`@3`*()Io&N6%h5IFN zcNp=?;KyOaD}|qg5w9HX2_s%f{4|VsW%08RvVbGu7HNKdp#V%JIh}Nc^vh7VE2R5E z;jWPG4~4rz`c)|071FOm;jWN=6AE{Q^gt-w71D1*;jWN=7YcWU^!re_Uq}yz5wDQ` z5JtR0`ePXJ3h7T_#4DtS!iZN$4+m-*T&xfF$lEvE1i?}4BM#u&wLDhrn90WUuNEm| zt%jw_zT@PynJnXdF>Ecvp7g%XL4nyip5nnhg`y90TzRSo%T8yXfL+9gq6FMBZz5oN zPm2<8)4V1y`zcQMXlgxu<%$WY_`78x3U)Wao99e9X^ZH_J?7TMVzRc8s>FV`ybditv_ z#uk~lpOZw#mkT_3>>WQArfW-*#{t5*NpxX(GGI8*qpL1@W4+itPgxu%hRndneFAJm z^b%BHf-X>a8Oug6zp7$ZhWsf9VI#SQI%Lh{(+(QG)$E0@}#eq6Emb zvs<=N*TpD&L!upBAEWRqElv6ckD@%>SFHDUmKI7gC$r}pJ-ArI)-qEOQKj2vO0EB< zB2mkR*pJtdO$_}e^+o_;(<8R*2@ zfLMN)Wa#IAvY7fqpK{Rb?NJm3S=YTiL@^YS(IFH+@+kPsoKF+Hi11<*vUf*>XmBu0 zBBkJsq36kaAyTUY4Ig+BEC>rboEtgAp@uP44l2B}|@=Wrc5LF>YBo8Hj8X}q% z7bQ;we-@(Z>x?{06%G7C(eTwIz8Q#jDrq)&zT@diJx=*$BBj|*rHfCpa9<)Np7;1N zB_H=EQie;aRr2zyM9RpMU&+w}ic<1Y9T>th#fDk>Z8B+6o_?21nv|*ECzB@S>cM2v zq-^~mnH0~re67lZ+dn3gMrxWox&5;u)y0omiGBXQJgESGi4wJiiKNgUjuPPw0AG@n z_ajjvc@hH*0VWNH6P&^SOniD3H z3jSo2XumMgew6gLC=mwvq3m^%>Zur2MCV$xYG5RfVphjyq=)jTB6$?MdQXfhl1DMD<6=~iJc?z#H%1l7 zqnOt5F{(%&#kSrTqe?Qa6Jk_J*7g1vRg!s~7^6zEuMfni5)JI6I9WvdVqqVQlSR}o zCU$b1ETVt0u~Xt?kpd7SJ2g%gDFLyv(;b;x7&yZPx>bP>yFj-jaHb1%>j58efo?J2 zEEnij0zT>j-7>)0F3_z3oZ|xB0>H;ypqu@l>jM3$|9M`pH}C(r7wk>?Kj8&?GyYF{ z!QOQLd@tCW>tEo4JA1V&1^q6>g&97PS3XSinE1KxtGh@E@n_Z%A)I12-kc{dTVCu5 z(X-u%kY}-h@iU%~I@R`q-kR8kJwF)8Vvl6pd}VX-mqN1m62@~E zB!zgT5~OXrd7`+B+9fJf9VAg#g=95JR1-mxsH;6eIGoPcl(_h1jSUh*#t72?%awJBd2@X)O(vF7X1|^jZSjar|=+qTx z$%vJTK636RkB8Au9W(5|Oa@_-rzmz-F`ft%zi|y!f0XJ2or%CM!9*!1*jC zN7=08Z$~7%$e)vB$7UtptR%Cuf!C5Z)+$xJ@hNLi5y|b&kfg{>_k{Nytgu_0uce%Wryb`tHYD^JuS|-j>++}mZKRU=O?}#)6zX_ zIhp}-?oo2=dTCO*C#%`AK*~>*6gvuv^l@`q+q%3~%pWdE2lulGd!$!u!Y+;AZ#4Tr zA1Xo>tDHQpUTTEeN*r3xO$84mkU!HaK2blamEw@wqK%t81Gqgq6}0jaTcPx}Q-W@f zZJU7I^UVHPi^^2EKoqYEL|J9Iqn%*qU{?VRN0dNjg&mrpEl!~J)y@)v`CVAlM*9R; zs<@Z5snyxpCW1IF3E0=jkK+>m9O7N2c-Ga1+x-Y5X;nC#2}fU$%)gE}9xs_4y||Uc z6-4;!iI%DhBdqPhx<5g9Sc*qol%~g4^^?+jm$Ld9$zE^O@B<9a1Tm7OEu=c@%rJLwbArZ5}41tpkmN9zKVWRLP8K<%Dw(Ow#v1DV-#EGQQ5K<*3pm<7c= z9mrBS*Mii$jgec(&a)8AP^W~3`*9oY(y2B%&~`szQJYQ$^2y*QEojrJU1~6k=Udb! zRHMw}1s2sQ)flt*DT}!zDR0733qNgPn_1~M>Q4jI`L_hnJxIN?o81KMhdQ_^gkeIWG3N5yVXVtwl=+=7Rx}t3^5!sBG8kKk zTf$h`V5|b)4P!Q)RND8#*gV5Wm3=>iabjXns_fP%DlNUVeN?~?LaNtDE$v1ShVZ-X*hq36F3R9o_ zgQ|VgtkS%l<-=^<3`m81)CX1DW?*XNY#&xFn}MmCkNGg$H3L#RpEe*8t6MboV`zs)ndZ;L&{-N~k}rv&vo*>zU+$yQl4(#h`2``?9(eNeSwhL=Y1r5J3vX&G0BV76a|nYM9N6gA3_#_MVyW!t4$rRn-|1T-0vhU*$1 zWV>ZJspM;Ykgb*hncEwDkZqO$nb#YA5G|I$n9;BM7}_g?F`M5KOeUdq8FXoo#&lB@ z!?;uRKLEcS14xZVN|C`W^mv2AgI8! z%QAYrRWJl$!mNkpUS@s}NB!*F=EIQDt;c~(?GJsd%t+O6U$%4J?t|FW<4_jMk9@Sc z$bl@EJAANPcko&?%jQlWHv<5L%QWRKAMbVPl3B_x1?2JoCi*h@Q4d?Cle*7=7!MCt z%4Q}fa{nSI)()_K&^x%$PDoj@e-%tE9l+~G$DBUHN{e~aM>)i|vwA6^$KtRp18VE> zIF3oYG92S5|8IuIOu&!=I~`&t@l-N_o`tYH|DH^tOPslU+EC~P4nD3#*@^MX)bc+* z0UBc9rdBZ{$7k60V$tS#bG`pQBT*dhuN_%8y7q8vb@bPTyv58GLx81W04a-N}`hFDseuaA=@24Qs#)9VasE%*C+x^ERf`2_f&(*p|R_*hmr zuyz!An$AU}#?R8l4fVNMStMCdUHt#G_bqU86;=8*od5yRMPwB;yEZVeL6dR1=gl8} zW-^(OkqitolMr>-OHX&tq)ktEZ$I*2kqwH72oiZH|242GEFcDq3adg8AAm2`1>~u# zqKhj&Ku~<3Ap4zDRrgj^-ySACLw22+3zNQIov&V}>YiIwx9+(^FvD^sF6t*o7xfOC z!PD!2L8I3zYz9n9Ag9aeqkj3^0@7Mm?E>;*^~X4I)D7-*XqnJY8n1UC?T-gyyJT2m zg7~UHY!(aaM-W~k%Ow}k9M#cETJ4hYR)%XiZN!Elg!;(IWK5P$rAXzwu9^h@an!(y zM0bKuRFmLJ&LGk4;QDG3oXQy_9>0IGnnkYcOd9EBXElwy*O@fZ&<)izc4cSsXy9^V zHIMz;nLIMRpQ`4y;f;JNUmELtMzxGwzI2*~*D-6i4g3B2tjq}U(KysZM&qbNsda7& zq3Pl%8WsEI5SrGOqEV^;Erh0t73>Hf#%JYIJEn zY)V^9DVgy{OsTpQWn8k}-!-LeW?Zt_-!rA^79r!(wf>)`w8M-`mHxgdRoAwROIP*} zOlg-Hm#*g@no{&1qr!AAeAE)F8>&p3?t(wE#Fo1F{`X@`ZYzv5_FtCVQW?L}^b<>N zDUBbG{mhbEYU6d+pIdV5rsksKvDBGnMS1A;3yTWt5lZC;{=c-S*jF7&Qx+BbtV5~1r|W5p3JV=d^{NXDx26Cd0A{xPP>`ew($0^x8jJRKLv}Dr@06i|V(TLuDmAZ&Cd=bEvF?KU-A4 z%^WJL;0257Hs*UltG#5eeXqr>)nKyMo@a4uwV3R+@3XkInoRcE z^DVC5X05nYS6kcno8&gX)vCy>i3=>U-)>c8?zj_+=05yEi|jXF6`6bS#TMCbzbZ2K<4Y{E-+)zQ?#Y*0vfT>Zmq!(A`ISYQegx@~`fqS}yly156%c9keWOD(R=xrv4a7g?5REmkfJkHVT@KOj zCTa*BuxX6`g?)`jLU?%NXoa5Q)b5jP=WgNr_>mHM_2vgayhh4Flq4zSR)f`#x6Z?v z)FpR2O!5F8k|=e`+YD+A8g3?p27Y z=SnLvzJmVKVVF9J@e2R<9fqlq7%%hxz+ssBi19X+A36+E8!>iw`l!P&brEB)r$2HS zW?zdfp}zKGhhg@$7<-=jFNb0FwHUiXeavB4eJ#c=QGeo6%)SPl(Ix!fF2~U;^|hb6 z99y&8*B*B{wr;tv{mkXq+U36XbC+Z5m;2fis;{kC6YIA>KgnN|pX^B&4@{qwc_2DX z@wD<~YScWxvgBIzQci~8DNF7vUJ}R-JZ%%S+9iRkz^`qB*105byZpvxXpJidwaPO# zL+e{H$h7{}W@v3I2AS61*$k~~#URuAdy9cpBza3w3^J{M+!w>lxVfN;>sE!}0lME- zpg49xx=E^i7n0-g=XD9naj~ zTI+0^5VRH%xV7G8GlJG)2DR3^ZAQ>q%%Ijf$7Ter#SCh#_t=b}wU|Mzb*{xQT8kOf zTJN?@?n=L0= zVQiiOUtqK4d^wEGQ{W42wwy4Bv3U;s0h=vn%wcS{H5b`zIb{xG^DKC~&92=#=yhnG z58CuenupuxVvDX87{kgUFT6`^dhO`I7EeyBlHJVO)lrXW9 z)0?n|X8h#uT8A#TAnB(%+{xu;Cp=BxFWBJZ7$|t~f3ZRGCpn{)y}biNYw(YUp*UO< z87b0Dc4rl-+3PY%WFc+{A$6K0G7>k2kUC5f*@;gxN$$yls(6AI`h1a9^%$=yh)!v}^37~rQ5yk0|416_YaCq$iZ&k(gSQRMN&TbD@;Q)2D z%$>G2*{SjO-tdGFoPKaR`>QEIhJ%tZX@>ZC9VK=uW!QXTb!zN{0fZ4bajhy)OT43< zZXTz5-U%yP;;UMk@g0$2yiYvXhmRtz!)qDzE@eMEn8Wj2YT(4A)S-ymPb&$S=gRQ1fJlLJ^ymjeZ zDqr-5ww8u7$&Eev+*oEj+AJD!p0~PbXnA>G$q1Ge=>4H?=b6K8Pla!F2035TJGkQWjJQ(5}5$KSg(Rm%o`*4 zg4NJ!em&T%7b>H!_O)PrDnc(xgplOx^4PKm(yqwKD?%tSsxs0d%BLeMSDX;S>1}Rq z)gOlZOoU(F=Fdr4+GY0|Fi@1x%@Nw*=&e{g6p|Vn7Da^jP};;&lSm(k;uJp@!Oo>g zQjC#0DC^G?v86_e?0Q8JZ;kNV2&#Z~dF4yjl($TDcLZx&lQQEDjPskW-GYJC~s7n{6ZZHoC7q`G3|q=~kv zYJF8wgB}@PUj0?lJ0j$lWU`vIt1{df!9MrNnW_kPMX>LGQf7zJ>(?T93t)1l%KhsR za#1i@IeSzKd`o(J^{Gbxc01PHxSEFXwQ9WmA6;T!3O-fkue`QSN>v5;c7!&FO~#C? zMDLBzOHZ0=U15IyN>lem=xdTH(NHFG=e{a8>rck)Qq21!c!_J$G|8$^|9>EYSGp!; zl9vc#J{ajeiR`abX;?vhqw)~-)K%I>*#?HIziL&ls?>rXMD|%oAKY6Y8X8{ad8Kj+ zw?1zJ#(xKTUiV;s58klXqn>D6GkSL`?z*q?$R`7~lX@QL?FczUg?K&Q(Arh2`qq11 zG@BI-ulC@}2VX*uFWItm>oL(S(IbzHZWRr$QNc3Q;6%5gu7~=G(S6VJdWU+t2YNjZ z;}cE{u@K57F!H1O-(jA&R)yD!N+qb&ioe*y1B#PQ;IErz^SSXT{UaKV^k@u7o4Hr^ z_N*C-ipWtIu|PE^4T*-O`V>klfz#>r!~5_utlZEV|z+OSP-TLT49Wf0Qd*4BcsvpI}v zgRs_kS8G>$N4%@8f)@~3Lbc(n{6>j&wzjr+z)*LzbToIhwZ+NZVV}i>_j- z@4O(`(c=38Nw_l44+vA#>4iZIS#4JB2ZB&lcctNr0)bM1sp##2)K`Mkeb16`eP6;F z^L3!reyI^`EB`V>64nGCGUR?4UaTQL!sTA&w}aXL&?$EKV$~jw{0d(l-YQr6@+mgT z$NUJYD;k~osQ^ckwa!0;d&3!F-AW}R2`U`rfd&+GW#6h*ZtWfn1a|el+c4C3g4aEK zGQ2x*B&S<`&ypjq*;9T5;oExIP#KDe{IucJp4Hu~VG(&;15)Ob8o-2Op7|>ck*>0f zzrp$g>{*D7e@021GW?0O+UfQ1JZ}rs{2T?KGX){fQwUlu2>COGpv!PbV9qJ}wg^?l zPmu3<2tJ#GgJgC1yEr^ZT!+7#!-FjRZb^CIGrzJYsQmq|!#8&BaVPEyK>M z4)gMx(nWEtioQ9KDa!xD>F5vinu>0~*P8_&uT$Yk$$s}OgC{T;*&N=xiDnVclbYF#iQ#GKXwxqLMBS~C*x)7_Yh`IFUAm6{`d{YUV zn97t2)D7wQ8)obr6(VXRMY-imOpw~!l@j7WgOJXZ(?#^=bfJ{RKlBLR!Q7jJhgpb;rJHTe{LQlS!?#bqps34BR z@fQ(G&k$k+tlt7vN?0fJ#e@qeG_E`Yt!ERN8OgBSDLZ)VpQTegjl0WV}qgWUEEiVD~vftVEV3ty(eiVi4yF zvDDxi<(J)i>3gM){ls)@O2wAX6Qb3KUn&KEQvG5rsI+rN=hTYjMsjVfazCbC(NZwFE%fuWJ*Ono5G3DZ+a zmA26VWXjiFB*bw>%JLmwaKS@f9?HtOZFX%)6S@3PnBFXzVkrv}GBG!KdBM37k{{oOU z@ZlY@xB7_~{YSR*!Yifup-z?>9rv>N&0ZnD8TQ*yt}OO({}ObG1iAwon4sUNEBvGA zk0=qP=aaOanz+!9e=N8viBigsl{Y7fY1pC6__&>O8^>6Fm8_;tG`$5km|P<3$0+41 z#iV7MWL96gT8OMsnyQFKXO=ORUL(YHMvP3ZlrEOjDKEJpk;|pCW(Qfyg}eV+yT+QB zP3OkT8>;!oeL}Xrt_)k6L^d;?o4}3Jj0aOiY#=P8uZxe^{aZ7Qb6XsBj%fnzw%>KlXJLMbOv?orrg zDuzLprgGb->|z)M8mUCYE?hUeq3bpHQ;T%sZTcLSnaF66E*8a^3=-+YXhtsR@x9yg z{1A%quQrL|(GkU8MC{xp#4mC7HT>~Cvf0$iq0G7b(?T4AM7|9)hRZjJUm@hxwDU7U zJPvdh{@837y+<1V#a%)a5PKE=(CNK09^FxVb<4`)n%nhCA&z~y5Pie_-r$xMm9a4l zq3Jjrf4D{8B*arV`v(3>7!Du-)9A|v-g0w5;z#G z{1+LR%a5?*A8lZgFEud5 zUtwU9uQo8r|K7kPPZ^lx*BhARy9`Y7YmN-cL-NlXnB>nGnB;#jFv&+7?f6*(ll&F~ zQ~Wy&O!CD?+3_0Mm$@(DtW`KM4mFeU8w-^Mz&%kNm z`wdJ>eGeM=Lg0rDj47u0qk(qCScO|gC9}(UKtnWXBZw1!&hVWg$ zy8jWT)qCCF2vdDf7cMW==Wzp5eVzc;2kG;92fr*L#O2C9QF?~~>x1}jaBvr}wwJ{3 z241B4FX2-h{&oj{3wVdoo{s_FVqi3i(BlP4Z!z$8HGUv`4Dd${d;;);2F?Qi&cN>k z{P|qZkUqK{{7who z=HO=?+_}G9o|1!aa`4j*jvZjfp8(ePYii%KfG;rm|3$$1eogW#fc5>E@F##H>V8Z3 zi@*mO_<;G$An*p8YY#>{s`)6z z|2yF44E=TkKM#C8QlR@I-M?{eEMeyLts6>BK&*etN9Y) zS3voz4UD=8J>MevQeZv5BHRW1af81K_=^T!2mGjk$AR_yi{jJxYy|xe!RTLde70ky zSac9pgGj!a1nQvnz6@Be?~wdPNB-HrFnmACn=<#jgb)572p35mp|T-|`~-HA+qiP9?oG_ABI`}aM z|K7m|V4P~!?=S~1b#S+X2ONC5g9{Gc=HTrP{J8&&KUS9;5_hS zO8z|X5XM74Q22nuVGq^#hT@L-Fqd{*Hkk0)D{2 zKLdWqz<&aM#K8L_!lUw z{fzQ|2KWX%zt?---Aek-un|9=5zfR9!2 zp9H=NSlg>-fo}&!x8?fncQo1)IIi%kfiZ^m<2M4o6-gsaW6b8`e+E7bSogPj3b^G22d;{=XRDM4NZa6&9C%p#qO5h(T`Kt(Hy;a+*Hv%s+ z@Jir51CIcwfpz)Ef%CvxKko#t0PE}b0^m;@{40QO1=j6-4e-x^_4RoxFs|`M$Eost z6ZlzReSJRyyg$~*-=^yaJOO-?!hZz56Ik1aS1f`30@n86b-+g*6_kGo@SA{j{X2kr zfpz~|1AK~sM}g^i@kg=FPxFh7z|XY?xC~6|l}pe*BtHxIj#Xk&844nN9&qQ0V$oCk zNPIEyl2gQ@5j^)G`3~T7{$4CPy+PuS0YB!+{zdX@fR~;w7Hva)34aoJC$LcY?IJuX z=MM)#eh2W~27Uy1k&x>*Pk>QZUhg6N6fpXdkHs;;dJxI?2gbD)mGxgB4hG)+ zR{>rOtk-W}8NvE3aN$T1MR8Hy1$dZ|YQmdhS$>bDu?#4hnnp&3ipi0Y@l;EEjC>1a z%1ucMrcgUD(^R$fFw<1E|1r~4y`wPGRJ|K9(`4=_%rrT>Ei+9+#+FGS=}pJqf|zLv z*)ZwXhW4Wd)lewYWb8%FG?^P;GfljMwQ00e5>41H3%3LGGF=n@+gBRE?){SBe}^*@ z>7INA+jafS)MnoxzaRjWBo9GD>GD7^lgAr*TSZksrb)g%sD6zN!8!z+e=|+~rsPbM zN?&h*4g%CW0=#$GFCOi84$7tw(xbO0)Xrd^%X_N>vWA%^xuH7K#3BCXYl=rsspP-x znhHL6aw%*nRj+$s$8Huqj5qlkoeT{jbK%&&U#qalDz4uZWmMIc)tlIrV1wN9Z|~%n zvhZE|Ql>V#E8xDXptMy(YQM=KNydv7MgYB3Az`g|6r|ML{Vzjmy>OwVHQq0f(%Nqc z)ZL7u8w>R|qaU@t4wOu&>wC{TkRP?qoQrjL-K36MXU^sNbJkJo%Q=;(J7+&?ojH$= z*W1JJP86cThK9WxRd<(9O(g0rkd9iPD$=>Mx;5{4pAX{JnfI27x_dy{k6Ulvy++#uH`f?A(413=6dNASvH{R6~y7jY$=t1}zHl zYmolA`4*-MbY9|Ap;fPe)_s9z;&u0QKWcqSpU9Nz&N_%&U*34-w%%(@M$I%;y|r6+ z6X0#(dJ7|?W|~4@d{)6>uTM*n^9r^M40~_clE` zTa;3I?y%=s2XX7nyHK~;hsOYPAk2&4Ilv#%Yc~Qs{@0EU6p7pm_;yGWeK!m;A!V6J zTJ`FG-AxN;BI#nio!y9BpNjST4#nT|_SKQqq|mdRJ?KDJ*&HcQwS;~XNoeR@1~?8Z zblSQN%~>p0gDbNKv(e4L?Q+l6;70E0AL<)I3H(Cn*)N1?{@KZGUQq7W7N8$AqB-2MOFXVax z(v;>9&QvD64O_~IEWg$q7Eay2w~&CP92rUTuPlZN^Mf)?u4|&I5b2mG(?s5R-~~w! z9TX%#B2tD|*i9KZBM4;55sqYr`LvM|bwyL!+Qp0#DECSdNtZ^_U4j|nyA5&!rH>>x zH1J1cN_@XQW}xY3$PQQDf~-LJT4JY2ZlHF+7fn6+EO}OH!~yrBd`n5AjlAbION3(LycB@3f|tsSXUZkv1*afM2Fyk=Ei4eoP-}ASl7jcq zai3!a8eBNQsG=HSV3yb)f%>Ucr&75xT9S1hD_9B}i>K&<3fELDR1oignT}!Z{mS9y4K`gxZ$h^0@@yQ!({!O_1rV|q-HZe}mN@X@>N^ofr zCYwaP)Os?Ct9T4*vo$2htA=DOvjvi5s+gQ8WYcI->hNKmnVh-OUyXFqg-kX-UP(iY z^-S_qK-~k~$txujWjIpF=Hd1&nJ;Xu3e3TkT~**2=_0(h!NRYoWU{I5GQ75oR?6v8 zW8?7Zey?w+dsAy;Z{tAY%El8LS2PYacJ%f)u3I&bX=#M_$xzq@gux3T-! zHSze`HLWpxLOj;E{@69KSmO{vh7dA@kiOpDUi^D%^$zXAKRX*mL4a2|EB+ zuW3AaXrQ~Nw{h^~fxgDx72TbU@RvAvGW^&!4)&hX*+|azI~#kuSM+V7&W!%=RZ3|u z2X7U{@lF19nefk&!5Q4dC3&4*U*RcV7F_jXei#ipU?-GmAajup5(C_j-r`FGi;(fd z$mxn1CF@JFK{{v?okKPolqZ`F(#dA?2B%`22l?x6V`r%Pl2uZlnNOC3q=I@*jF$78 zgYxBkPEd$~ABNj|lKhnDDiqUj#*tG#ICNl;b}4g4nmpe4d|bEwIecg3(1+m}4Bm6# zr$a~g!z(#Q5~#u`@aAMWKQZdZ-keF5Hxw{j^h2ODe2)RFV#ymqfdUwudA&Ilz~d)C z{4d7$8-+RxE;L2)5@X~e&$t2=l}AhZyikxn!DK3Y(Rm(RyTPn`r45yGD!)1B!BY5N3og|`@*C+t^@6|gW_ zMTD1ed@EEwCuugxrl4jFD^D{W(;1<^xw0Ksz_?ruc z;>c^fr5p-~p$V))bD&vR3b3-I0829z;N(2q*XDJZsgTchqb&G@09tmiI%u5}6su+- z$YQNox6+Knp9qH6eIqye5JPu1QJioC4G#OXH}Qb2tf7HEt3`kg(?vwAzX}R%3C9)de`j>aZNr z5n7cF-I1%x*5TEvN{44xWi7sOWR;QvtU|6GLWtFQImD_yhgj9;&rhr#@YrMwuQyA` zqBTl1xZX(`U#&RxM7xag6CH;BwaYJzXJP21`>#p{11THfxn~fNg;)mkHR9&qI7T*7 zMonSZ7JyO(Hv%mwS_p%72DzLWNKUFaE^1PUuc6nahKTCFYsdGQbpPnIxo~a>9aEdq@=wGWfsupmJ zAiaEJ2kFHdJ5(**P++idqmkB=TC|~HwPZu5!GaB=V7VrMv{)lI`uLlTc$ZM{49|zs z=P5(AD~8Y28akhIQ>ZiZIUWZ&Pw_ac>KUH7LyJe}RgaiLAMHxbaV%{BpO@KdqSijAJbas}tmhxUq3XqLg;S)?~>0HQ6TZ8`AI#Deqo^&u!cy zF!3Vqr0j7L&LRUxk%6ag`h-xXOnzER*qBXwYiU0!j^$W?kZ0=Op8P~1pMxnnHVRRc zAU@VtjJ7p3w@2lr7sYp2M`^Vs+ST5COmsM(&mJ4as5+a;ZH&IXHPzDI96L>P7boC< zeq(gmGBiBg=Hmnt#bTnk)hll;q>tAtrwE7N*6esOQP@BnTK=Jr0AiL&^Ubk50&$9e zOIs&K^Vt&4w!lv&eo`6u6fac@m>ri&$9HwL#1NP)RE~#w@W^3Ve=GL*;ei=Kvzb!) z_@>-!xXBmO(?HRDI-nn)(v?ge_sKz5lETYlwLvW~|fc zUbt)-T$odTNAuCjT8i#1@I_uCudo=Bl0)HiN(#r(H0;nFT><7AJ<9KA)g5dp^|Gby z?X7V{4)1EX+Z>NY#Z9f=(13>(MiBk(MfJ9JAXD$&G?u0T&GBP-tVJDAt*k;U)!MqO zWm;-VlqUGnY#U3QCZHw4xPZvfEB#hoNV1->_U8D~7(OEf&Xg;gC?reA<9P^Hls4y! z8-p{>Xj3MYj?Ps3!^ZUVNR!i+Vv_@iqIPxRUwk+M4+={3aSLpIrp#q+lQOsOb|Wj9qG#@ zvlVD7h@(ZY`PDm;EjoaVCm&bhyjK~Xfkbj+Y2<{=cw%LGQzn`A^Yd1&8W@Q;#hRK& zl*CVQCB74@7O|tt0M@SS<1h58FZCV|TZV8|y7k`bl|Wb_H@@k+a*63U>YBjoIiCJbfrrY8(V=nv_u;;K^xdcL59y;g_qnaNJSfFK?SIxg7zSQr-gIRK=`Y) zT>GimiLQ>(=Gis5uyydiJ;Sg|Q#H-7#Pi1EB{v?HzLgE(CrFbn)P{S1FdmAKAAvcy zu<7fPYd;lZGdk-QIBgyLpD{MNMeHGpRoHoBv-gY*yBU#>M)us;aAXW_{MIAaA#>N* zaP6mLY}(SvSvspdcaH@8`UB;MmFT!YTnrFMPmbf*KcenvSn=GCu9yA8>;ZmrUX>}lo>%>OkT3k9Fjy zf-I{;-|(46hfDlrFXwRWr($zDX77WlY4(5_HaWUQYFHc+&l{Y*XK+a0b=w<`Y)-7? zN4w^*x#6#{Ol^?UoSdx>tESxxX4>TVty0VAFk#;8>_xL9KUY-m^h$pm&{)%vZ`;@Z z4$WWqKu1=8DkGiI=Jae`)0u7`m|?r)w@D4N!}58nv-hkHE4=Q}j*Lx{tKe-a`dsGR z9qw@Lr($!uI$CDyHo$52fEhM9x{9pX&456rN=@!O<^!D0El#o2onhZSD8$&s<`Ar5^Td+r(?uKkp3PFKflUC)_j z513(-qg$kg#Ub&$!P$EThxA>yz2V5_5C@+onZw40Yd+o;Nmo z(bz!W^&1*KKlS zYXL>zgrcI7&ky;i9;(3F!7Yz>dUBA7d$mS5IoS8@$ z=dig^^`DBtNya*7tHGIeFPLGI6SPVVqaz9PW@qo29jWoU4UdX$njZCCjrynZiNEak z98~?MVtP8-VzbrsOuHA%u;~d}rH1K|gn84m_e_t}c-^K)MK?{)X1Tk3&YB)o|EZXs z1U@i5OP#7uyBEx`=?Pk;hUt-ndDFA^Opnxf-KIxHhv~uBz>DQd!SnszZb(gY)@6Mz z9zC(!`ds{$VtNdhci896r}%kv_w%SB6-Y&=`O)%agKht4VI}@=iLYvD-ZG*-`&AVQW=Et8 ziNai5D%16zik0bVZJ%YExOMISw~dP~N0m)cf_YQ&lA98xX=Oor*&K}MK(Y{g^bUG` zgD3aL#Neqo>BdP@Dm_{m_Y$L{#q=hP#)^rFv<8{nSYDrFK;nmI^GO{%kw}`XLS;0E z1WKZ*v~{AK7{zb7$iKOK8S#_(iHUTsjNlDQfWkH4uT_?E5q=guJ}Sg<=L)f(5ZfqV zst2V*fBVV^izv;zk(NFds*?loOS}aVM+KfdELJl5F?p0f@gR>b25?m9o}_6iHQCGsye*_f+9h%xapaQ*!6cp9Eh+o5+glR^|#=U zbgYlm;sv7h7>xp*Z9@?HgnwM#yCAgP&~+?5-vr){_xsU&*+mF4^BuSsynyEO{s&FA Bd~E;# diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/template.hex b/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/template.hex deleted file mode 100644 index 81bf660..0000000 --- a/Example/EpaperModuleTest_GD32F303/MDK-ARM/GD32/template.hex +++ /dev/null @@ -1,1586 +0,0 @@ -:020000040800F2 -:100000007023002049010008D9060008D506000821 -:10001000D7060008D10600086107000800000000AC -:10002000000000000000000000000000FD060008C5 -:10003000D306000800000000FB060008FF060008C9 -:100040006301000863010008630100086301000800 -:1000500063010008630100086301000863010008F0 -:1000600063010008630100086301000863010008E0 -:1000700063010008630100086301000863010008D0 -:1000800063010008630100086301000863010008C0 -:1000900063010008630100086301000863010008B0 -:1000A00063010008630100086301000863010008A0 -:1000B0006301000863010008630100086301000890 -:1000C0006301000863010008630100086301000880 -:1000D0006301000863010008630100086301000870 -:1000E0006301000863010008630100086301000860 -:1000F0006301000863010008630100086301000850 -:10010000630100086301000863010008630100083F -:10011000630100086301000863010008630100082F -:10012000630100086301000863010008630100081F -:10013000DFF810D000F02CFA004800478D1C0008B2 -:10014000AFF3008070230020064880470648004730 -:10015000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE777 -:10016000FEE7FEE7050700083101000800F0004245 -:1001700030F000400AD0C10D01F56071C0F31600E7 -:1001800042EA0151C208400711437047002001466E -:10019000704730B50B46014600202022012409E0BB -:1001A00021FA02F59D4205D303FA02F5491B04FA30 -:1001B00002F52844151EA2F10102F1DC30BD2DE943 -:1001C000F05F0546002092469B46884606468146DB -:1001D00040241BE0284641464746224600F0F9F9F4 -:1001E00053465A46C01A914110D31146184622462A -:1001F00000F0E0F92D1A67EB01084F462246012076 -:10020000002100F0D7F917EB00094E41201EA4F1A0 -:100210000104DFDC484631462A464346BDE8F09FEC -:100220002DE9FE4F804681EA0300C00F0C46009086 -:1002300021F0004123F00045B8EB0200A94105D2AE -:100240004046214690461C460B46024623F000409D -:10025000104347D0270DC7F30A00C3F30A51029099 -:10026000401A019040286BDAC3F3130040F4801B5E -:100270000098924620B10023D2EB030A63EB0B0BEC -:1002800001985946C0F14002504600F093F90646E5 -:100290000D4650465946019A00F0ABF910EB0800A4 -:1002A0006141002487EA115284EAE7731A4340D07F -:1002B000009A62B3019A012A4FEA075215DC001B2B -:1002C00061EB02014FF0004202EA0752CDE9004221 -:1002D000001C41F5801132462B4600F0ABF903B00B -:1002E000BDE8F08F40462146F9E7001B61EB0201B3 -:1002F000001C41F5801300185B412018A2F500177F -:1003000047EB030140EAD570B6196D4111E06D0865 -:100310004FEA360645EAC0754FEA0752001B61EB0B -:100320000201001C41F5801149084FEA3000001914 -:10033000514132462B4603B0BDE8F04F00F06BB997 -:100340000098012240000023D0EB020263EBE0732F -:10035000009821464FEAE074B8EB000061EB04011D -:10036000E9E783F000435BE781F0004158E72DE9BE -:10037000FE4F81EA030404F0004421F000410094A0 -:100380004FF0000B23F0004350EA01045ED052EA24 -:1003900003045BD0C3F30A54C1F30A552C44A4F2FE -:1003A000F3340194A0FB0254C1F3130141F4801112 -:1003B000C3F3130343F4801301FB024400FB034E19 -:1003C000840A970A44EA815447EA8357A4FB0768E2 -:1003D00002958D0A05FB07854FEA932C04FB0C540C -:1003E0002705029D4FEA065847EA1637B5EB080580 -:1003F0006EEB070C870E920E47EA811742EA8312D2 -:10040000A7FB0201B6EB0B0164EB00042B0D43EAE2 -:100410000C335E1844EB1C50DA465146E7FB0201F0 -:10042000C5F313044FEA0B3343EA14534FEA043283 -:10043000019C43EA0603A4F10C040294009CCDE95C -:1004400000B400F0F7F803B0BDE8F08F00200146DB -:10045000F9E72DE9F04D81EA030404F0004B21F0A7 -:10046000004514464FF0000A23F0004150EA05020F -:1004700020D054EA01021DD0C5F30A570246C5F345 -:100480001303C1F31300C1F30A5640F4801543F47B -:100490008013A7EB0608101BD64608F2FD3873EB55 -:1004A000050002D308F1010801E092185B41B8F1A0 -:1004B000000F03DA00200146BDE8F08D00204FF464 -:1004C0008011064684460EE0171B73EB050705D323 -:1004D000121B63EB050306434CEA010C49084FEA83 -:1004E000300092185B4150EA0107EDD152EA030057 -:1004F00012D082EA040083EA0501084305D0101BEC -:10050000AB4106D20122002306E000224FF0004357 -:1005100002E06FF0010253101AEB06004CEB085199 -:1005200010EB0A0041EB0B01BDE8F04D00F073B891 -:10053000C1F30A52C1F3130140F2FF3341F48011B9 -:100540009A4202DA00200146704740F233439A4251 -:10055000A2F2334202DC524200F03BB800F02AB86B -:1005600030B5041E71F1000404DB4FF0004440423A -:1005700064EB0101141E73F1000405DB1C464FF00F -:100580000043524263EB0403994208BF904230BDDE -:10059000064C074D06E0E06840F0010394E80700D0 -:1005A00098471034AC42F6D3FFF7C6FDAC620008A2 -:1005B000CC620008202A04DB203A00FA02F1002075 -:1005C00070479140C2F1200320FA03F31943904091 -:1005D0007047202A04DB203A21FA02F000217047FC -:1005E00021FA02F3D040C2F120029140084319469B -:1005F0007047202A06DBCB17203A41FA02F043EA83 -:10060000E07306E041FA02F3D040C2F120029140CB -:1006100008431946704710B5141E73F1000408DA38 -:10062000401C41F1000192185B411A4301D120F0B6 -:10063000010010BD2DE9F04D92469B4611B1B1FA73 -:1006400081F202E0B0FA80F220329046FFF7B2FF6A -:1006500004460F4640EA0A0041EA0B0153465A4657 -:10066000084313D0114653EA010019D0C8F14002E3 -:100670005046FFF7AEFF05460E46504659464246E5 -:10068000FFF798FF084305D0012004E020463946D3 -:10069000BDE8F08D0020054346EAE0762C43374361 -:1006A0000A986305E40AA0EB08000022FD0A44EA68 -:1006B00047540A3002D500200146E9E70105101928 -:1006C0006941DDE9084500196941BDE8F04DA2E73F -:1006D000FEE77047FEE7FEE770470907090E0028AE -:1006E00006DA00F00F0000F1E02080F8141D7047DA -:1006F00000F1E02080F8001470477047704700F068 -:1007000009BE0000134882B0016841F47001016025 -:100710001148016841F001010160416841F0800128 -:100720004160002144F620620091009B5B1C009315 -:100730009342FAD34160C1620168084A11400160E6 -:100740004FF41F018160016821F48021016002B033 -:1007500001F0D4BD88ED00E000100240FFFFF6FE7E -:10076000FEE700000FB4054B10B503A9044A029838 -:1007700000F00CF910BC5DF814FB0000591A0008D9 -:10078000180000200FB4084B10B504A902AA039862 -:1007900000F0FCF8044602A9002000F07AFC204694 -:1007A00010BC5DF814FB00009310000802E008C8BC -:1007B000121F08C1002AFAD170477047002001E0DB -:1007C00001C1121F002AFBD17047000070B5074C11 -:1007D00005460221204601F06BFD0028F9D029468C -:1007E0002046BDE8704001F042BD000000380040E6 -:1007F00010B5044C8021204601F05AFD0028F9D1A3 -:1008000010BD0000003800402DE9FF5F82B00021DC -:10081000DDE90430020DDDF840B0034318D044F6A2 -:100820001050A2F2FF3242431514119801281FD034 -:10083000A5EB0B00401C5FEA000A4FF000064E4F8C -:10084000DFF83891B046504615D5CAF1000413E0E0 -:10085000119801244AA3012801D16FEA0B010298E3 -:10086000119AC0E90031C0E9024206B0BDE8F09F2C -:10087000CBF10000DFE704460021404A491842EB73 -:100880000450CDE9001012E0E00707D032463B46A5 -:1008900040464946FFF76BFD8046894632463B4657 -:1008A00010461946FFF763FD06460F466410002CFC -:1008B000EAD1DDE90401DDE90023BAF1000F06DA2F -:1008C000FFF755FD42464B46FFF751FD05E0FFF7A8 -:1008D000C0FD42464B46FFF7BCFD04460E460022D3 -:1008E000284BFFF73DFE03D84FF0FF30014607E0ED -:1008F0000022254B20463146FFF792FCFFF718FEF9 -:10090000102409E0002C0ADB0A220023FFF757FC21 -:10091000039B30321A55641E50EA0102F2D1641C66 -:10092000039AC4F111031444119A012A03D001223D -:1009300008430DD10AE0084304D000204FF0110B0A -:10094000119072E7A3EB0B056D1E0DE05B4504DD16 -:100950004FF0000205F1010504E003DA4FF0000258 -:10096000A5F10105002AECD002981199C0E90231E5 -:10097000C0E9004579E70000000014400000F03FA6 -:10098000300000000000F0430000E03F2DE9FF4F81 -:1009900095B09A46884606460025EEE1252877D18F -:1009A00000242746F94A0121039400E0044316F885 -:1009B000013F203B01FA03F01042F7D130782A289A -:1009C00011D06FF02F033078A0F13002092A16D829 -:1009D000039A44F0020402EB820203EB4202104449 -:1009E000761C0390EFE758F8042B0392002A03DAF1 -:1009F000504244F40054039044F00204761C3078D2 -:100A00002E2816D116F8010F44F004042A280DD020 -:100A10006FF02F023078A0F13003092B09D807EBD3 -:100A2000870302EB4303C718761CF3E758F8047BEF -:100A3000761C30786C280FD006DC4C2817D068283C -:100A40000DD06A2814D104E0742810D07A280FD170 -:100A50000DE044F400140AE044F4801401E044F48E -:100A600040147278824202D104F58014761C761C00 -:100A7000307866280BD013DC582877D009DC0028A2 -:100A800075D04528F6D04628F4D047281AD193E1EE -:100A900018E0632835D0642879D0652812D18BE11D -:100AA000702873D008DC6728F1D069286FD06E28D1 -:100AB0000DD06F2806D1ACE073282CD0752874D0E7 -:100AC000782853D05246179990476D1C54E1C4F3CF -:100AD0000250022809D003280DD0D8F800100428AD -:100AE0000DD00D6008F1040846E1D8F80010EA17AF -:100AF000C1E90052F6E7D8F800100D80F2E70D705A -:100B0000F0E718F8041B8DF8001000208DF80100A4 -:100B1000EB46012003E058F804BB4FF0FF306107BB -:100B20004FF0000102D40DE009F101018946B942FC -:100B30000FDA8145F8DB1BF809100029F4D108E031 -:100B400009F1010189468142FADB1BF809100029ED -:100B5000F6D103985346A0EB090721463846179A69 -:100B600000F080FA284400EB090507E044E008E1C2 -:100B70000DE01BF8010B524617999047B9F1010996 -:100B8000F7D2534621463846179AF2E039E00A2157 -:100B9000C4F302524FF0000B0091022A06D058F81D -:100BA000040BC117032A09D00AE023E008F107006B -:100BB00020F00702F2E80201904605E000B2C117FA -:100BC000042A01D140B2C117002906DA0A460021E1 -:100BD000404261EB02012D2202E0220504D52B22C6 -:100BE0008DF80420012203E0E20701D02022F7E77C -:100BF000914657E00A2100E010214FF0000B0091D0 -:100C00000BE010214FF0000B44F004040827009182 -:100C100003E008204FF0000B0090C4F30252022AB8 -:100C200005D058F8040B0021032A08D008E008F189 -:100C3000070020F00702F2E80201904603E080B2CC -:100C4000042A00D1C0B24FF0000922072AD5327819 -:100C5000702A07D0DDF800C08CF0100C5CEA0B0C99 -:100C600005D00EE040228DF80420012208E050EA71 -:100C7000010306D030238DF804308DF805200222C0 -:100C80009146009B83F0080353EA0B030AD150EA14 -:100C9000010201D1620705D530228DF804204FF002 -:100CA00001097F1E3278582A04D039A20C920CAA6E -:100CB00002920BE03BA2F9E75B46009AFFF77FFA4E -:100CC0000C9B9B5C029A521E0292137050EA010226 -:100CD000F2D1029804A9081A00F1200B600702D58E -:100CE00024F4803400E001275F4502DDA7EB0B0010 -:100CF00000E0002000EB0B01009003984944401AEB -:100D00000390E00306D453462146179A039800F057 -:100D1000A9F90544002706E001A85246C05D1799CD -:100D200090476D1C7F1C4F45F6DBE0030CD5534606 -:100D30002146179A039800F095F9054404E0302005 -:100D40005246179990476D1C0099481E0090002943 -:100D5000F5DC08E00298029952460078491C02919D -:100D6000179990476D1CBBF10001ABF1010BF1DC51 -:100D70005BE100F065F90544761C307800287FF4CB -:100D80000DAE19B02846BDE8F08F0000092801001B -:100D900030313233343536373839616263646566F1 -:100DA00000000000303132333435363738394142B3 -:100DB0004344454600000000600700D4062708F1C0 -:100DC000070020F00700F0E80223804603F0004C03 -:100DD0005FEA0C0001D097A009E0200501D596A09C -:100DE00005E0E00701D095A001E0AFF24C001390C0 -:100DF000307823F0004365280CD006DC452809D064 -:100E000046281DD047287FD13BE0662818D06728A8 -:100E10007AD136E00021112F01DB112000E0781C8F -:100E2000CDE9000104A90CA8FFF7EEFCDDE90D01F6 -:100E30000C9A4FF0000B07F10109109200914EE05F -:100E40004FF000400097CDE9011004A90CA8FFF76E -:100E5000DBFCDDE90D020C9B0F994FF0000B914676 -:100E60001093009211B9791C00EB0109B7EB09004E -:100E700003D4C0F1FF3B07F10109A9EB0700019082 -:100E800042E0012F00DA01270021112F01DD11209E -:100E900000E03846CDE9000104A90CA8FFF7B4FC36 -:100EA000DDE90D010C9A00914FF0000BB94610924C -:100EB00021070FD4009A4A4503DA914601E0A9F1CF -:100EC0000109B9F1010F05DD109AA9F10101515C89 -:100ED0003029F4D0B84202DA10F1040F03DA01210C -:100EE000CDE9011010E0002803DC8344A9EB0001E8 -:100EF00002E0411C494500DD8946A0EB0B00401C87 -:100F000001904FF000400290200705D40198484519 -:100F100002DB4FF0FF30019000208DF84B0002986B -:100F20000DF14B07B0F1004F25D002200C902B2083 -:100F30000D90029800280CDA404202902D200D906E -:100F400007E00A210298FFF724F93031029007F8F0 -:100F5000011D0C99481E0C900029F2DC0298002813 -:100F6000EFD1791E0D980870307800F0200040F025 -:100F7000450007F8020D11A8C01BC01D0290139870 -:100F8000007800B1012000EB0901019801EBE0714C -:100F9000029801440398401A401E0390E00306D4CF -:100FA00053462146179A039800F05CF805441398BD -:100FB000007818B15246179990476D1CE00323D56D -:100FC00053462146179A039800F04CF805441BE05D -:100FD000BBF1000F07DB0098584504DD1098179906 -:100FE00010F80B0001E01799302052469047019805 -:100FF0000BF1010B401E05F10105019004D12E20DB -:101000005246179990476D1CB9F10001A9F10109E9 -:10101000DEDC05E017F8010B5246179990476D1C6E -:101020000299481E02900029F4DC53462146179A83 -:1010300003989EE62D0000002B0000002000000019 -:101040002DE9F041044600251E461746880404D4C5 -:1010500005E039462020B0476D1C641EF9D52846AE -:10106000BDE8F0812DE9F041044600251E4690467A -:10107000C80301D5302700E02027880404D505E007 -:1010800041463846B0476D1C641EF9D52846BDE878 -:10109000F0810A68531C0B6010707047816841F042 -:1010A0000801816081680907FCD4816841F004016E -:1010B000816081684907FCD470471205A2F580124F -:1010C00001290BD0022908D1816B21F440118163E1 -:1010D00002F44011826B114381637047C16A21F4AD -:1010E0007001C16202F47001C26A1143C1627047AB -:1010F00010B540F2096001F08BF8012000F0D6FF36 -:101100001D4C01221102204600F0C1F800220221EC -:10111000204600F0BCF84FF4E0420221204600F0E7 -:101120005AF8002000F09AF80021204600F026F836 -:10113000022211462046FFF7C0FF0723102200219C -:10114000204600F063F8072311220121204600F019 -:101150005DF801220221204600F022F800F0C0F8DC -:10116000204600F015F8012000F0CAF82046BDE83E -:101170001040FFF793BF0000002401400029816860 -:1011800002D041F4006101E021F400618160704708 -:101190008168C90703D1816841F00101816070470E -:1011A000002A4FEAC1720AD01AB1826842F4801252 -:1011B000826089070ED5816841F4004109E01AB1C7 -:1011C000826822F480128260890703D5816821F445 -:1011D000004181607047012909D0022906D1816848 -:1011E00021F4E0418160816811438160704781682A -:1011F00021F46021F6E702688A43026070470246E4 -:10120000002012680A4200D00120704730B5846B7C -:10121000C4F30155846B491BC91C01EB81011F25D7 -:101220008D40AC4302FA01F12143816307240A2A6D -:1012300008D2016902EB42029440A14393400B4360 -:10124000036130BD122AFCD2C1680A3A02EB4202A5 -:101250009440A14393400B43C36030BD04490A68E6 -:1012600022F470220A600A6802430A607047000094 -:1012700004240140CA0703D0826842F480028260DD -:10128000890703D5816841F4001181607047002A05 -:101290004FEAC15211D0002A03DA426842F4807248 -:1012A00042604A0503D5426842F480624260890781 -:1012B00015D5816841F0020110E0002A03DA426886 -:1012C00022F4807242604A0503D5426822F48062AB -:1012D0004260890703D5816821F00201816070476F -:1012E0000248016841F40001016070470824014090 -:1012F00002494A6802434A6070470000002004E047 -:1013000003490A6810440A688242FCD3704700000F -:101310001000002002480168491C0160704700006D -:101320001000002070B5054D29680C1802E000205F -:1013300000F0B0FE2868A042F9D370BD1000002074 -:1013400000224FF48051014800F0A0BB000C014086 -:1013500001221103014800F099BB0000000C01407C -:1013600000224FF48041014800F090BB000C014086 -:1013700001229103014800F089BB0000000C0140EC -:101380002DE9F04700258A468146FA264FF01008DD -:101390002946284600F0E8FA242000F03DFBFFF73C -:1013A000CFFF00275FF0000419F80500FFF70EFAE1 -:1013B000641C6D1CB442F7D37F1C4745F2D3FFF782 -:1013C00017FAFFF7C5FF0021084600F0CDFA2620E6 -:1013D00000F022FB0025FFF7B3FF00275FF00004B9 -:1013E0001AF80500C043C0B2FFF7F0F9641C6D1C89 -:1013F000B442F5D37F1C4745F0D3FFF7F9F9FFF767 -:10140000A7FFBDE8F04700F0CCBA10B504461020A5 -:1014100000F002FB2046BDE8104000F0E1BA10B534 -:1014200000F092FA3220FFF76BFF00F095FA3220BD -:10143000FFF766FF00F0C3FA002858D1122000F031 -:10144000EBFA00F0BCFA002851D1012000F0E4FAD8 -:10145000272000F0C5FA012000F0C2FA012000F0B8 -:10146000BFFA112000F0D8FA012000F0B9FA4420A8 -:1014700000F0D2FA002000F0B3FA0F2000F0B0FA2A -:10148000452000F0C9FA272000F0AAFA012000F058 -:10149000A7FA002000F0A4FA002000F0A1FA3C20F6 -:1014A00000F0BAFA052000F09BFA212000F0B4FA0F -:1014B000002000F095FA802000F092FA182000F049 -:1014C000ABFA802000F08CFA4E2000F0A5FA002044 -:1014D00000F086FA4F2000F09FFA272000F080FAF3 -:1014E000012000F07DFA00F06AFA002800D0012007 -:1014F00010BD000010B588B040F2026000F088FE18 -:1015000040F2036000F084FE4FF4C06000F080FE03 -:10151000234C4FF4807303221021204600F01EFB61 -:101520004FF4004303224821204600F017FB1D4CD6 -:101530004FF4804303221021204600F00FFB4FF4AC -:10154000204303221821204600F008FBA3140322A5 -:101550001021204600F002FB40F20E7000F058FE11 -:10156000114C204600F086FE684600F0BDFE4FF4A8 -:10157000404001904FF482700090032000210590BC -:101580006015CDE9021018200491069069462046A6 -:1015900000F093FE204600F065FE08B010BD00008C -:1015A00000080140000C01400038004010B54FF425 -:1015B0000041034800F025FB002800D0012010BDA9 -:1015C0000008014030B500210A4AC3B20DE00020F6 -:1015D00006E000BF01FB04041568401C80B22B55D7 -:1015E000148A8442F6D8491C89B2508A8842EED8BF -:1015F00030BD00005C1F00202DE9F84F1F469146CA -:1016000082468846151A01D5A0EB09057C1A002CE4 -:1016100000DDCC1B4FF0FF32CA4501D2012000E0B3 -:1016200010460090B84500D2012293462E1941463B -:1016300050460A9A00F018F8B4EB460F07DCCA458A -:1016400010D0009926440AEB01001FFA80FAB5EB8E -:10165000460FECDBB84505D008EB0B002E441FFA13 -:1016600080F8E4E7BDE8F88F491E401E89B280B2D9 -:1016700000F052B82DE9F8418046DDE907501E46DA -:1016800017460C4648B90CE023463A4619464046F0 -:101690000095FFF7B1FF641CA4B2B442F4D3BDE8D7 -:1016A000F8810B4640460095FFF7A6FF42463346B9 -:1016B000214610460095FFF79FFF3A4623463146E4 -:1016C00010460095FFF798FF3346424619463846C4 -:1016D0000095FFF791FFE2E730B50B4C039D2060CA -:1016E00021816281A5814D074FEAD10000D0401CC5 -:1016F00020826282E38123B1B42B02D0A180E280F8 -:1017000030BDA280E18030BD5C1F0020014908602F -:10171000704700005C1F002070B5184C2346E68916 -:101720001B89D6B125465A2E6D891AD0B42E1DD0EC -:10173000B6F5877F10D103460846218A25684143C4 -:1017400001EBD3018020002A6C5C03F0070220FA31 -:1017500002F010D02043685470BD591A491E8BB254 -:10176000EBE7181A401E83B2681A01E00B46281AEC -:10177000401E80B2E1E784436C5470BD5C1F0020C2 -:101780002DE9FC4F401C1FFA80F9491C1C468DB204 -:10179000A9EB0400AB46CDF80490FA285FDC082CD6 -:1017A0000ED0600700D0012000EBD400610810FBD0 -:1017B00001F080B28246203A90B2009000204BE0C7 -:1017C0000620F7E7082C12D00C2C17D0102C1AD0BA -:1017D000182C44D10098244900EBC00001EB800193 -:1017E000002711F80860F00712D00B9A13E0009858 -:1017F0001E4900EB400001EB4001F1E700981C4955 -:1018000000EB4000EAE71B49009801EB0011E7E715 -:101810000B9830B3002229464846FFF725FF6D1C80 -:101820007F1C7608BFB2ADB2082FDCD309F10100EE -:101830001FFA80F9082C0BD00198A9EB0000B0EB3F -:10184000540F05D10BF10800DDF804901FFA80FB5E -:1018500008F101005D4680B280465045B2D3BDE834 -:10186000FC8F0122D7E70000285100089C440008A3 -:10187000C4460008384B00082DE9FF4F401C82B0D9 -:101880004FF0000984B2491CCDE9009492468DB214 -:101890004A46AB46580700D0012000EBD300059024 -:1018A00010462FE0002026E00F98002610F809705F -:1018B00009F101001FFA80F9F8072BD0109838B30E -:1018C000002229462046FFF7CFFE6D1C761C7F08BC -:1018D000B6B2ADB2082EEFD3641C0198A4B2211A9F -:1018E000514504D10BF10800019C1FFA80FB08F15F -:1018F00001005D4680B280465045D5D30098401C1B -:1019000080B2009005998842CCD306B0BDE8F08F34 -:101910000122D6E7109AD4E72DE9F8411E46144675 -:1019200088460546079F09E033464146284600970A -:10193000FFF726FF05EB560085B2641C2278002ACB -:10194000F2D1BDE8F881000000224FF48071014817 -:1019500000F09CB80008014001221102014800F08B -:1019600095B800000008014070B5C0F3C705F9291B -:1019700001D92E2403E0A1F22711484284B24E205F -:1019800000F04AF8284600F02BF84F2000F044F809 -:10199000E0B200F025F8C4F30020BDE8704000F08C -:1019A0001FB810B5222000F037F8F72000F018F823 -:1019B000202000F031F8BDE81040AFF3008070B592 -:1019C000002444F6206506E0641CAC424FF00100A0 -:1019D00005D8FFF795FCFFF7E9FD0028F4D170BDAD -:1019E00010B50446FFF7ACFC21460A4C204600F037 -:1019F0003EFC0221204600F05BFC0028F9D080214B -:101A0000204600F055FC0028F9D1BDE81040FFF752 -:101A10009FBC00000038004010B50446FFF7A0FC52 -:101A2000FFF78EFC21460B4C204600F020FC0221E3 -:101A3000204600F03DFC0028F9D08021204600F02F -:101A400037FC0028F9D1FFF783FCBDE81040FFF711 -:101A50008FBC00000038004070B5074D0446C1B28D -:101A6000284600F02FFD0721284600F060FD0028E1 -:101A7000F9D0204670BD00000038014001480068E0 -:101A80007047000010000020416170470AB10161F9 -:101A9000704741617047000010B54FF4C06000F01E -:101AA000B7FB40F2026000F0B3FB40F2036000F0CD -:101AB000AFFB01210A4800F0AFF8012303222821DF -:101AC000084800F04BF8084C04230322102120465C -:101AD00000F044F82046BDE810400421FFF7D4BFD1 -:101AE0000002300000080140000C014010B5194C04 -:101AF0002115031B4A00A04221D009DC164BC01857 -:101B000017D0884218D0904222D14FF4417408E097 -:101B10008B4217D0934218D0B3F5406F18D14FF4D1 -:101B20004274204600F090FB2046BDE8104000F0D3 -:101B30007DBB40F20234F4E740F20334F1E740F2B7 -:101B40000534EEE740F20634EBE740F20734E8E70D -:101B500010BD00000014014000F8FEBF2DE9F04365 -:101B600001F00F04CD0602D5042A19D01443002534 -:101B70004FF00F095FF0010202FA05F61E401AD07D -:101B800007684FEA850C09FA0CF827EA080704FAF7 -:101B90000CF848EA0708282908D0482908D008E0A6 -:101BA000C26B44F003041A43C263E0E7466100E0FD -:101BB0000661C0F800806D1CADB2082DDCD308258D -:101BC00002FA05F61E4016D047684FEA8508A8F1CC -:101BD000200809FA08FC27EA0C0704FA08FC4CEA7A -:101BE000070C282902D0482902D002E0466100E013 -:101BF0000661C0F804C06D1CADB2102DE0D3BDE885 -:101C0000F0838068084000D001207047C068084019 -:101C100000D0012070470000F0B5144C002801DA14 -:101C2000E36900E06368420D120185B2C0F3015719 -:101C30009540C0F30346032F05D0C2020AD5032204 -:101C4000B240934307E023F0E062636823F0E0636F -:101C5000636002E0AB4343F0E06201B12A43002835 -:101C600001DAE261F0BD6260F0BD000000000140F9 -:101C70000168054A1140B1F1005F04D14168006874 -:101C800080F30888084770470000FE2F88B000F0F6 -:101C900037FA0720FFF72CFB00F08EFBFFF7FCFE66 -:101CA000FFF726FA00F0B0FB0127FFF7E7FE064634 -:101CB00035469FA0FEF756FDFFF71CFCFFF7AFFB74 -:101CC0004FF0FF08B423FA227A219F48CDF8008014 -:101CD000FFF702FDB423FA227A219C48CDF8008058 -:101CE000FFF7FAFC9848FFF711FDFF20FFF76AFCA9 -:101CF00000249748CDE900047A23FA2221462046A1 -:101D0000FFF7BAFD9148FFF701FDFF20FFF75AFCEE -:101D10009049CDE9001800217A23FA220846FFF7FE -:101D2000ABFD8A498848FFF72BFB4FF4FA50FFF7C9 -:101D3000E7FA8548FFF7EAFCFF20FFF743FC18238A -:101D400085A200210A200094FFF7E6FD102387A258 -:101D50001D210A200094FFF7DFFD10238AA2322103 -:101D60000A200094FFF7D8FD7848FFF7CFFCFF204A -:101D7000FFF728FC8BA102A8FEF704FD182302AA96 -:101D800047210A200094FFF7C7FD4FF00108CDE975 -:101D900000487423F02267210A20FFF76BFC6B498F -:101DA0006948FFF7EDFA0120FFF72FFBDFF804A2E7 -:101DB000DFF804B2DFF80492FFF760FEA8420AD908 -:101DC000FFF75CFE00F5FA75012F4FF0040158464D -:101DD00015D0FFF759FEFFF751FEB0420ED9FFF7BD -:101DE0004DFE00F10A0601214846FFF70AFF0128CF -:101DF0009AF8001050466DD001290CD094E0FFF7FE -:101E000005FF012801D0012200E0002204215846EC -:101E1000FFF73CFEDFE78AF80040012F01D00127E1 -:101E200000E0002766A0FEF79DFC02216A48FFF74C -:101E300021FA02E00120FFF775FA02216648FFF758 -:101E4000DEF90028F6D002216348FFF7D4F9624892 -:101E50003C30006840F6E4414843000B00EE100AB5 -:101E6000B8EE400ADFED5D0A30EEC00ADFED5C0A35 -:101E7000594880EE201AB3EE090A403031EE000ACC -:101E80008AED020A0068484300EE900AF8EE600A04 -:101E90009FED541A10EE100A60EE810ACAED030A93 -:101EA000FEF764F941EC100B4FA053EC102BFEF73A -:101EB00059FCDAF80C00FEF759F941EC100B56A06A -:101EC00053EC102BFEF74EFC5EA0FEF74BFCCAF85D -:101ED000044029E009B980F800804168491CCAF82B -:101EE0000410322920D35848006878B157A0FEF773 -:101EF00039FCBFF34F8F5448001D01685A4A01F462 -:101F0000E06111430160BFF34F8FFEE757A0FEF77A -:101F100029FC00F071FA5846FFF7E8FD4846FFF744 -:101F2000E5FD5B48FFF7A4FE002000F0B3F843E7AF -:101F3000457061706572204D6F64756C65205465E5 -:101F400073740D0A000000001C000020BC0F00206C -:101F50005C250008FC340008322E313320457061C6 -:101F6000706572204D6F64756C650000446573691F -:101F7000676E65642042792057654163742053740D -:101F80007564696F0000000077697468203235302D -:101F9000207820313232207265736F6C7574696FEE -:101FA0006E0000003E3E2048656C6C6F20576F72DB -:101FB0006C642E0000000020000C0140000801406D -:101FC00048656C6C6F2C576541637420537475645D -:101FD000696F0D0A000000000024014000C0B244F7 -:101FE0009A998940000080395468652074656D7045 -:101FF0006572617475726520646174612069732013 -:1020000025322E31662064656772656573204365ED -:102010006C736975730D0A00546865207265666596 -:1020200072656E636520766F6C74616765206461AC -:1020300074612069732025352E33666D56200D0A94 -:10204000000000000D0A000008ED00E0456E746518 -:10205000722049415020426F6F746C6F61646572E9 -:10206000202E2E2E0D0A00000400FA05456E746520 -:10207000722073797374656D2049535020426F6FDD -:10208000746C6F61646572202E2E2E0D0A000000A4 -:1020900000F0FF1F04490A6822F004020A6008B138 -:1020A00020BF704730BF704710ED00E0124A10B5F6 -:1020B0005168124B1940D36A0C2823F0005317D2F1 -:1020C000DFE800F0060606061609160910101010C3 -:1020D00041EA80310CE020F0040041EA803040F019 -:1020E000805105E020F00C0041EA803143F00053BC -:1020F0005160D36210BD000000100240FF3FFFEFAF -:102100000248416A41F0807141627047001002400C -:1021100070B537A588B02ECD8DE82E0035A20446C7 -:10212000D2E90012CDE9041232A20020D2E9001255 -:10213000CDE90612324A5168324BC1F3810119B11F -:10214000012901D0022901D019462BE0516801F480 -:1021500080352D49B5F5803F0AD1D56A15F0804FFD -:1021600000D02A4B556805F40035B5F5003F00D185 -:102170000B4651685568C1F383412D0101D541F0EB -:10218000100155686D0001D541F020010F2901D2E1 -:10219000891C06E0A1F10F052F2D01D8491C00E094 -:1021A0003F2159435368C3F303131DF8035021FA29 -:1021B00005F3556804AEC5F302255268755D23FA30 -:1021C00005F5C2F3C22206AEB25C23FA02F244B1B4 -:1021D000012C08D0022C08D0032C00D1104608B0E6 -:1021E00070BD0846FBE71846F9E72846F7E7000008 -:1021F00000000000000000000102030406070809B7 -:102200000010024000127A0000093D00006CDC0260 -:10221000054901EB90110A6800F01F030120984066 -:1022200002430A607047000000100240054901EBBC -:1022300090110A6800F01F030120984082430A6051 -:102240007047000000100240054901EB90110A6838 -:1022500000F01F030120984002430A60704700000D -:1022600000100240016841F0400101607047C16008 -:10227000704700000D4910B5401808D0B0F5806FC8 -:1022800008D0B0F5784F0FD14FF4437404E040F21A -:102290000E4401E040F20F442046FFF7D5FF2046F0 -:1022A000BDE81040FFF7C2BF10BD000000C8FFBF6F -:1022B0008068084000D001207047026802F4415352 -:1022C0000A681A434B6813438A681A43CB6813435E -:1022D0000A691A434B698969134319430160C1694B -:1022E00021F40061C161704700210160416081609B -:1022F000C160416181610161704700002A4800218D -:10230000026842F4803202604FF6FF730268491C93 -:1023100012F4003F01D19942F8D10168890300D439 -:10232000FEE7C16941F08051C16120490A6842F469 -:1023300040420A604268426042684260426842F439 -:1023400080624260426822F440324260426842F455 -:10235000403242604268164B1A4042604268154B58 -:102360001A434260026842F0807202600268920181 -:10237000FCD50A6842F480320A604A68D203FCD570 -:102380000A6842F400320A604A689203FCD5416848 -:1023900021F003014160416841F002014160416860 -:1023A0000907FCD570470000001002400070004093 -:1023B000FFFFC3B70000340870B50E484FF47A71C0 -:1023C0000068B0FBF1F0401EB0F1807F11D24FF0F9 -:1023D000E024606165170F212846FEF77EF9002092 -:1023E000A061072020612846BDE870400521FEF766 -:1023F00074B9FEE7140000204FF0E02000210161D5 -:10240000416181617047000010B540F20260FFF742 -:10241000FFFE40F20E60FFF7FBFE124C4FF400731C -:10242000032218212046FFF799FB231503220421DC -:102430002046FFF793FB0C4C204600F047F84FF482 -:10244000E131204600F012F80421204600F07AF82D -:102450000821204600F07CF82046BDE8104000F03E -:1024600061B80000000801400038014070B5134B0E -:1024700004460D460020E11A1A159C421BD005DCCB -:102480000F49611817D0914208D114E0914212D03F -:10249000B1F56C4F02D10320FFF73AFE00EB550077 -:1024A000B0FBF5F14FF6F07201EA020001F00F0106 -:1024B0000843A06070BD0220EEE70000004C004021 -:1024C00000BCFFBFC1F3080141607047134B10B55A -:1024D000C21A1915984213D007DC114A80180CD083 -:1024E00088421AD140F212440FE08A420BD0B2F572 -:1024F0006C4F12D140F20E3407E040F2114404E078 -:1025000040F2134401E040F214442046FFF79CFEE1 -:102510002046BDE81040FFF789BE10BD004C0040CA -:1025200000BCFFBFC16841F40051C160704700EBBF -:102530009110006801F01F0201219140084000D075 -:1025400001207047C26822F004020A43C26070474B -:10255000C26822F008020A43C2607047000000000F -:10256000000000000000000000000000000000006B -:10257000000000000000000000000000000000005B -:10258000000000000000000000000000000000004B -:10259000000000000000000000000000000000003B -:1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B -:1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000000000EB -:1025F00000000000000000000000000000000000DB -:1026000000000000000000000000000000000000CA -:1026100000000000000000000000000000000000BA -:1026200000000000000000000000000000000000AA -:10263000000000000000000000000000000000009A -:10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:10266000000000000000000000000000000000006A -:10267000000000000000000000000000000000005A -:10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000003A -:1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E00000000000000000000000000000000000EA -:1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 -:1027100000000000000000000000000000000000B9 -:1027200000000000000000000000000000000000A9 -:102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:102760000000000000000000000000000000000069 -:102770000000000000000000000000000000000059 -:102780000000000000000000000000000000000049 -:102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000000000029 -:1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 -:1027D00000000000000000000000000000000000F9 -:1027E00000000000000000000000000000000000E9 -:1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 -:1028200000000000000000000000000000000000A8 -:102830000000000000000000000000000000000098 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:102890000000000000000000000000000000000038 -:1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000000000000000018 -:1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000000000000D8 -:1029000000000000000000000000000000000000C7 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 -:102930000000000000000000000000000000000097 -:102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 -:102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 -:102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 -:1029A0000000000000000000000000000000000027 -:1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 -:1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 -:102A000000000000000000000000000000000000C6 -:102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 -:102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000000086 -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 -:102A80000000000000000000000000000000000046 -:102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 -:102B0000000000008080808080800000000000C005 -:102B1000E0E0E0E0C0C000000000000000000000B5 -:102B200000000000000000000000000000000000A5 -:102B30000000000000000000000000000000000095 -:102B40000000000000007EFEFEFEFEFEFE00000013 -:102B500080FEFEFEFEFEFEFEFC00000000FCFEFE0F -:102B6000FEFEFE3E0000000000000000808080802D -:102B7000808000000000000000000000000080F8DD -:102B8000FEFEFEFEFEFEFEFEF080000000000000E5 -:102B90000000000000000080808080808000000035 -:102BA000000000F8F8F8F8F8F8F80000000000005D -:102BB00000000000000000000000E0F0F8FCFCFE57 -:102BC000FE7E7E3E3E7E7EFEFCFC783000000000F5 -:102BD000F8F8F8F8F8F8F80000000000000000002D -:102BE00000000000000000000000000000000000E5 -:102BF0000000000000000000808080808000FFFF57 -:102C0000FFFFFFFFFF000000030F1F1F1F1F0F0F1D -:102C10000000000000000000008080808080808034 -:102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 -:102C4000003FFFFFFFFFFFFC00C0FFFFFFFF7FFF14 -:102C5000FFFFFFFF8000FEFFFFFFFFFF0F000000F0 -:102C6000F0F8FEFEFFFF7F1F0F0F1FFFFFFFFEFCB0 -:102C7000F8C000000000C0FCFFFFFFFF7F071FFF40 -:102C8000FFFFFFFFF88000000000C0F0FCFEFFFF28 -:102C9000FF7F1F1F1F1F3F3F3F0E041F1FFFFFFF30 -:102CA000FFFFFFFF1F1F1F1F0000000000000000AC -:102CB000000000001F7FFFFFFFFFFFFCF8F8F0F0AF -:102CC000E0E0C1C08000001F1F1FFFFFFFFFFFFFEC -:102CD000FF1F1F1F0F000000FFFFFFFFFFFF00008F -:102CE0000000FFFFFFFFFFFFFF000000C0F8FCFE39 -:102CF000FFFFFF7F1F1F1F3FFFFFFFFFFFFFFF00C3 -:102D0000000000FFFFFFFFFFFFFF000000C0F8FC16 -:102D1000FEFFFFFF3F1F1F1F3FFFFFFFFEFCF8E00E -:102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000FFFFFFF87 -:102D4000FFFFFCFFFFFFFF1F0001FFFFFFFFFFFE74 -:102D5000FFFFFFFFFF070000001EFFFFFFFFFFFF59 -:102D6000DF1F1F1F1F1F1F9F9F1F1F1F0000E0FE51 -:102D7000FFFFFFFFFFFFFCFCFCFDFFFFFFFFFFFF6E -:102D8000FCC00000FFFFFFFFFFFFFF80000000000E -:102D900000800000000000FFFFFFFFFFFFFF0000BA -:102DA000000000000000000000000000000080C0E3 -:102DB000C0800101030303070FFFFFFFFFFFFFFFB9 -:102DC00070000000FFFFFFFFFFFFFF00000000009A -:102DD0000000FFFFFFFFFFFF00000080FFFFFFFF7D -:102DE000FFFFFF000000FFFFFFFFFFFFFF8000006D -:102DF0000000FFFFFFFFFFFFFF00000000FFFFFFDD -:102E0000FFFFFFFF000000FFFFFFFFFFFFFF80004D -:102E1000000000FFFFFFFFFFFFFF000000000000B9 -:102E200000000000000000000000000000000000A2 -:102E300000000000000000073F3F3F3F3F3F3F3F93 -:102E40000F000000003F3F3F3F3F3F3F3F3F01003B -:102E50000000000001070F1F1F3F3F3F3E3E3E3E68 -:102E60003F3F1F1F0E00303E3F3F3F3F3F1F0100CF -:102E70000000000000033F3F3F3F3F3F3C00000396 -:102E8000070F1F3F3F3F3F3E3E3F3F3F1F1E080093 -:102E900000030F1F3F3F3F3F3F3E3F3F1C180000D6 -:102EA00000000000000000070F1F1F3F3F3F3F3E94 -:102EB0003E3F3F3F3F1F1F0F070300000000070F6B -:102EC0001F3F3F3F3F3E3F3F3F1C00000F1F3F3F24 -:102ED0003F3F3F3E3F1F1F3F3F3F3F3F3F00000000 -:102EE00000070F1F3F3F3F3F3F3E3F1F1F3F3F3FFA -:102EF0003F3F3F000000003F3F3F3F3F3F3F00005C -:102F0000000003070F1F3F3F3F3F3E3E3F3F3F1F35 -:102F10001F0F030000000000000000000000000080 -:102F200000000000000000000000000000000000A1 -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000000071 -:102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 -:102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 -:1030100000000000000000000000000000000000B0 -:1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 -:103090000000000000000000000000000000000030 -:1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000C0C0C0C09A -:10363000C0000080C0C0C0C08000000000000000CA -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A000000000000000000000000000000000001A -:1036B000000000000000000000000000000000C04A -:1036C000C0C0C0C0C000000000000000000000003A -:1036D0000000000000C0C0C0C0C00000000000002A -:1036E00000000000000000000000000000000000DA -:1036F0000000000000000000000C1E1F1F0F0F9FA5 -:10370000FFFFFEFEF80000000000000038787C7E1D -:103710003EFFFFFFFFFF00040E1E1F8F8F8FFFFF76 -:10372000FFFEFC000000737F3F1F0F0000317B7F16 -:103730003F1F070000000000000000FFFFFFFFFF29 -:103740008787878787070000F0F0F0F0F0F070F8C7 -:10375000F8F0F0E0800030F0F0F07878F8F0F0F079 -:10376000E0800000F0F0F0F0F0F070F8F8F0F0E039 -:10377000800080E0F0F0F0F878F0F0F0E0C00000B9 -:10378000F0F0F0F0F0F0F0F0F010000000000000B9 -:1037900000FFFFFFFFFFFFFEC0E0FFFFFFFFFFFF97 -:1037A000FF000080C0E0F0F0F078F8F0F0F0E0C04A -:1037B0000000C0E0F0F0F8F870FFFFFFFFFFFF002F -:1037C00000F0F0F0F0F000F0F0F0F0F0F00000FFAA -:1037D000FFFFFFFF000080C0E0F0F0F878F8F0F0A5 -:1037E000F0E0800000000000000000000000000089 -:1037F00000000080C0F0F8FCFEFFBF9F87838000C0 -:10380000C0C0C0C0C0800000000000FFFFFFFFFF7D -:103810000080C0C0C0C78787CFFFFFFFFEF8000051 -:103820000000000000000000000000000000000098 -:103830000000000000FFFFFFFFFF8787878787806A -:103840000000FFFFFFFFFF8080E1FFFFFFFF7F40E1 -:10385000F8FCFCFEFE9ECFFFFFFFFFFF0000FFFF16 -:10386000FFFFFF8080E1FFFFFFFF7F00FFFFFFFF03 -:10387000FFDC9C9D9FDFDF9F1F00FFFFFFFFFF031B -:1038800001000000000000000000FFFFFFFFFF0F2D -:10389000FFFFFFFFFFFF0FFFFFFFFFFC007FFFFFAA -:1038A000FFFFE18080FFFFFFFFFF1C08FFFFFFFF1E -:1038B000FF8080FFFFFFFFFFFF0000FFFFFFFFFF14 -:1038C00080FFFFFFFFFFFF0000FFFFFFFFFF800003 -:1038D0007FFFFFFFFFDC9C9C9FDFDF9F1F0000003E -:1038E00000000000000000000000000000070707C3 -:1038F0000707070707070707070003070707070367 -:10390000000000000007070707070001030307077F -:103910000707070707030100000000000000000080 -:103920000000000000000000000000000000000790 -:10393000070707070707070707070000FFFFFFFF45 -:10394000FF0707070707030100000307070707072B -:103950000703070707070000FFFFFFFFFF07070731 -:103960000707030100000001030707070707070710 -:10397000030300000707070707000000000000001E -:10398000000000000707070707000101010101000F -:1039900000070707070700000103070707070707D6 -:1039A00007030300000001030707070707070707CE -:1039B00007070700000307070707070707070707A9 -:1039C00007000003070707070707000103070707AA -:1039D00007070707030300000000000000000000C5 -:1039E00000000000000000000000000000000000D7 -:1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00070F0F8FC7CFEFEFEFEFE00183C3C3E3EEF -:104000001E1EFEFEFEFCF800183C3E3E1E1E3EFE3E -:10401000FEFCFCF000000000000000E0E0E0E0E05A -:10402000C080E0E0E0E0E0000000000000183C3C60 -:104030003E3E1E1EFEFEFEFCF80000FEFEFEFEFEE4 -:104040009E9E9E9E1E1E0000E0F8FCFEFE7E1E3E12 -:10405000FEFEFCF8E00000000000000000FEFEFE96 -:10406000FEFEFE0E0E0E0E0E0E0000000000000002 -:104070000000000000FEFEFEFEFE0000000000004A -:1040800000FEFEFEFEFE000000FEFEFEFEFEFEFC4A -:10409000E000FEFEFEFEFE0000FEFEFEFEFEC0E0B4 -:1040A000F8FCFEFE3E1E06000000000000000000BE -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 -:1040E000000000000000000000000000000000FFD1 -:1040F000FFFFFFFF000080C0E0F0FCFE7F3F1F0FCE -:1041000003000080E0F0F8FCFF7F3F0F0701000094 -:10411000000000000000C1E7FFFFFFFFFFFFF7C145 -:10412000000000000000000080C0E0F0FCFE7F3FC7 -:104130001F0F0300008787878707078FFFFFFFFF99 -:10414000FC007FFFFFFFFFC00080FFFFFFFFFF00BD -:1041500000000000000000FFFFFFFFFFFF0F0F0F38 -:104160000F0F00001E1E1E1E1E1E1E1E1E0000FF24 -:10417000FFFFFFFF00000000000000FFFFFFFFFF48 -:10418000000000FFFFFFFFFF3FFFFFFFFFFFFFFFFC -:10419000FF0000FFFFFFFFFF1F7FFFFFFFF8E0C0F2 -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E0000000000000000000000F0F0F0F0F000084 -:1041F0000F0F0F0F0F0F0F0F0F0F0F070F0F0F0FD7 -:104200000F0F0F0F0F0F0F0F0000000000000C0F1B -:104210000F0F0F0F0101070F0F0F0F0C0000000011 -:1042200000000F0F0F0F0F0F0F0F0F0F0F070307D8 -:10423000070F0F0F0F0F0F0F070301000003070FEA -:104240000F0F0F0F0F0F070300000000000000000A -:10425000000F0F0F0F0F0F0F0F0F0F0F0F000000AA -:104260000000000000000000000F0F0F0F0F0F0FE5 -:104270000F0F0F0F000F0F0F0F0F0000000F0F0F8A -:104280000F0F00010F0F0F0F0F0F0F00000F0F0F79 -:104290000F0F000001030F0F0F0F0F0C00000000A5 -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:10434000000000000000000000000000000000006D -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C -:1044A00000000000002F00000000070007000014BB -:1044B0007F147F1400242A7F2A12006264081323C9 -:1044C00000364955225000000503000000001C2260 -:1044D0004100000041221C000014083E081400089E -:1044E000083E0808000000A060000008080808084E -:1044F000000060600000002010080402003E5149E6 -:10450000453E0000427F4000004261514946002183 -:1045100041454B31001814127F100027454545399D -:10452000003C4A49493000017109050300364949F8 -:10453000493600064949291E0000363600000000B1 -:1045400056360000000814224100001414141414FC -:1045500000004122140800020151090600324959A5 -:10456000513E007C1211127C007F49494936003EC1 -:1045700041414122007F4141221C007F494949417C -:10458000007F09090901003E4149497A007F080876 -:10459000087F0000417F4100002040413F01007F33 -:1045A00008142241007F40404040007F020C027FFF -:1045B000007F0408107F003E4141413E007F090911 -:1045C0000906003E4151215E007F09192946004637 -:1045D000494949310001017F0101003F4040403F0E -:1045E000001F2040201F003F4038403F0063140858 -:1045F0001463000708700807006151494543000033 -:104600007F41410000552A552A55000041417F0055 -:10461000000402010204004040404040000001024A -:104620000400002054545478007F48444438003833 -:104630004444442000384444487F003854545418BB -:1046400000087E0901020018A4A4A47C007F0804CD -:1046500004780000447D4000004080847D00007F9D -:10466000102844000000417F4000007C04180478BA -:10467000007C0804047800384444443800FC2424B6 -:1046800024180018242418FC007C0804040800489E -:104690005454542000043F444020003C4040207CBF -:1046A000001C2040201C003C4030403C00442810AE -:1046B0002844001CA0A0A07C004464544C44141462 -:1046C000141414140000000000000000000000009A -:1046D0000000FC000000000002000000000C020CC2 -:1046E000020000000000000090D0BCD0BC9000038D -:1046F000000300001824FE448C000302070201009E -:104700001824D8B04C80000300010201C038E438FE -:10471000E0000102020102020806000000000000A1 -:1047200000000000000000F8040200000001020484 -:10473000000204F800000004020100009060F8602C -:1047400090000000010000002020FC20200000005C -:10475000010000000000000000000806000000004A -:1047600020202020200000000000000000000000A9 -:1047700000000002000000000080601C0200040332 -:1047800000000000F8040404F80001020202010025 -:104790000008FC000000000203020000188444240A -:1047A000180003020202020008042424D8000102B7 -:1047B0000202010040B088FC8000000000030200FB -:1047C0003C242424C400010202020100F824242C09 -:1047D000C0000102020201000C04E41C04000000FD -:1047E00003000000D8242424D800010202020100A2 -:1047F00038444444F80000030202010000001000A5 -:104800000000000002000000000020000000000086 -:104810000600000000205088040200000000010291 -:10482000909090909000000000000000000204882A -:1048300050200002010000001804C42418000000E9 -:1048400002000000F804E494F800010202020200F1 -:1048500000E09CF0800002030000030204FC24241A -:10486000D800020302020100F80404040C00010253 -:104870000202010004FC0404F80002030202010029 -:1048800004FC24740C0002030202030004FC2474E0 -:104890000C00020302000000F0080444CC400001B8 -:1048A0000202010004FC2020FC04020300000302B9 -:1048B0000404FC040400020203020200000404FCDD -:1048C000040406040403000004FC24D00C040203C6 -:1048D0000200030204FC04000000020302020203BF -:1048E000FC3CC03CFC0003000300030004FC30C49B -:1048F000FC04020302000300F8040404F8000102AF -:104900000202010004FC242418000203020000003B -:10491000F8848404F80001020207050004FC246402 -:104920009800020302000302182424448C000302AE -:10493000020201000C04FC040C000002030200004F -:1049400004FC0000FC04000102020100047C80E081 -:104950001C040000030000001CE03CE01C000003FD -:1049600000030000049C609C04000203000302009A -:10497000041CE01C04000002030200000C84641C00 -:1049800004000203020203000000FE020200000015 -:1049900007040400000E30C0000000000001020007 -:1049A000000202FE000000040407000000040204EC -:1049B00000000000000000000000000000000808E7 -:1049C00008080808000002000000000000000000C5 -:1049D0000040A0A0C00000010202030204FC20204D -:1049E000C00000030202010000C02020600000019E -:1049F0000202020000C02024FC00000102020302A7 -:104A000000C0A0A0C0000001020202000020F824A3 -:104A100024040002030202000040A0A0602000075E -:104A20000A0A0A0404FC2020C00002030200030258 -:104A30000020E4000000000203020000000020E467 -:104A4000000008080807000004FC80E020200203A2 -:104A5000020003020404FC00000002020302020040 -:104A6000E020E020C00003000300030020E020203D -:104A7000C00002030200030200C02020C0000001A9 -:104A80000202010020E02020C000080F0A020100FD -:104A900000C02020E0000001020A0F0820E04020B2 -:104AA00020000203020000000060A0A0200000021D -:104AB000020203000020F8200000000001020200B2 -:104AC00020E00020E00000010202030220E020803C -:104AD00060200000030100006080E08060000003AF -:104AE0000003000020608060200002030003020039 -:104AF00020E0208060200808070100000020A0605E -:104B00002000000203020200000020DE020000007C -:104B100000070400000000FF00000000000F00007C -:104B20000002DE2000000004070000000201020471 -:104B3000040200000000000000000000000000006F -:104B40000000000000000000000000F8000000006D -:104B5000000000333000000000100C06100C0600AE -:104B6000000000000000000040C07840C078400015 -:104B7000043F04043F040400007088FC0830000077 -:104B8000001820FF211E0000F008F000E0180000CF -:104B900000211C031E211E0000F008887000000088 -:104BA0001E2123241927211010160E0000000000DA -:104BB0000000000000000000000000E018040200F7 -:104BC000000000071820400000020418E000000068 -:104BD0000040201807000000404080F08040400066 -:104BE0000202010F01020200000000F000000000BC -:104BF0000101011F01010100000000000000000090 -:104C000080B0700000000000000000000000000004 -:104C1000000101010101010100000000000000008D -:104C20000030300000000000000000008060180428 -:104C3000006018060100000000E010080810E00005 -:104C4000000F102020100F00001010F800000000CE -:104C50000020203F20200000007008080888700015 -:104C60000030282422213000003008888848300095 -:104C70000018202020110E000000C02010F80000B5 -:104C800000070424243F240000F80888880808004E -:104C90000019212020110E0000E010888818000063 -:104CA000000F112020110E0000380808C838080035 -:104CB0000000003F000000000070880808887000B5 -:104CC000001C222121221C0000E010080810E00036 -:104CD0000000312222110F00000000C0C0000000BF -:104CE00000000030300000000000008000000000E4 -:104CF00000008060000000000000804020100800DC -:104D000000010204081020004040404040404000A4 -:104D1000040404040404040000081020408000007F -:104D20000020100804020100007048080808F00084 -:104D30000000003036010000C030C828E810E00054 -:104D40000718272423140B000000C038E0000000DF -:104D5000203C23020227382008F888888870000049 -:104D6000203F202020110E00C0300808080838001D -:104D7000071820202010080008F808080810E00094 -:104D8000203F202020100F0008F88888E808100035 -:104D9000203F20202320180008F88888E808100009 -:104DA000203F200003000000C03008080838000041 -:104DB00007182020221E020008F808000008F80842 -:104DC000203F210101213F20000808F808080000C9 -:104DD0000020203F2020000000000808F8080800FC -:104DE000C08080807F00000008F888C02818080074 -:104DF000203F20012638200008F8080000000000AD -:104E0000203F20202020300008F8F800F8F80800A3 -:104E1000203F003F003F200008F830C00008F8089D -:104E2000203F200007183F00E01008080810E000AD -:104E30000F10202020100F0008F808080808F000C4 -:104E4000203F210101010000E01008080810E000E7 -:104E50000F18242438504F0008F88888888870007C -:104E6000203F2000030C302000708808080838001C -:104E70000038202121221C00180808F80808180012 -:104E80000000203F2000000008F808000008F80893 -:104E9000001F202020201F000878880000C8380844 -:104EA000000007380E010000F80800F80008F800BC -:104EB000033C0700073C0300081868808068180856 -:104EC00020302C03032C30200838C800C8380800D4 -:104ED0000000203F2000000010080808C838080023 -:104EE0002038262120201800000000FE02020200C7 -:104EF0000000007F40404000000C30C00000000077 -:104F0000000000010638C00000020202FE0000009E -:104F1000004040407F000000000004020202040044 -:104F20000000000000000000000000000000000081 -:104F30008080808080808080000202040000000069 -:104F40000000000000000000000080808080000061 -:104F50000019242222223F2008F80080800000004F -:104F6000003F112020110E00000000808080000012 -:104F7000000E112020201100000000808088F80021 -:104F8000000E112020103F20000080808080000053 -:104F9000001F222222221300008080F088888818B7 -:104FA0000020203F202000000000808080808000C2 -:104FB000006B94949493600008F800808080000057 -:104FC000203F210000203F20008098980000000032 -:104FD0000020203F20200000000000809898000062 -:104FE00000C08080807F000008F800008080800082 -:104FF000203F24022D302000000808F800000000A7 -:105000000020203F20200000808080808080800061 -:10501000203F20003F20003F8080008080800000F3 -:10502000203F210000203F20000080808080000081 -:10503000001F202020201F008080008080000000B2 -:1050400080FFA12020110E000000008080808000E1 -:10505000000E112020A0FF808080800080808000D2 -:1050600020203F21200001000000808080808000FF -:105070000033242424241900008080E08080000074 -:105080000000001F202000008080000000808000C1 -:10509000001F202020103F20808080000080808022 -:1050A00000010E30080601008080008000808080B2 -:1050B0000F300C030C300F000080800080808000D7 -:1050C0000020312E0E312000808080000080808002 -:1050D00080818E70180601000080808080808000B2 -:1050E0000021302C2221300000000000807C0202D0 -:1050F00000000000003F404000000000FF000000F2 -:1051000000000000FF0000000002027C80000000A0 -:105110000040403F000000000006010102020404BC -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:1051500000F0F0F0000000000000000000017F01FE -:105160000000000000000000001C1C1C00000000EB -:1051700000008060301C8C60301C0C0000000000BF -:10518000000000000000000000000000000000001F -:1051900000000000000000E00000000000E000004F -:1051A0000086E69F86868686E69F860000011F01B0 -:1051B000010101011F010100000080C06020F820F2 -:1051C000E0C00000000003070C18FF70E181000040 -:1051D0000000070F10107F100F0700008060206094 -:1051E00080000000E02000000F3020309F70DC378E -:1051F0001030C0000000100E030007181018070040 -:105200000000C02020E0C0000000000080E01F3847 -:10521000E88703C43C040000070F1810100B070DAB -:105220001010080000808C4C3800000000000000C6 -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000080E0FE -:10525000300804000000000000FEFF010000000014 -:10526000000000000000030F182040000004083078 -:10527000E0800000000000000000000001FFFE00D0 -:1052800000000000004020180F0300000000000094 -:10529000000000000000C000000000000042666640 -:1052A0003C18FF183C666642000000000000030046 -:1052B000000000000000000000008000000000006E -:1052C000001010101010FF1010101010000000003F -:1052D00000000300000000000000000000000000CB -:1052E00000000000000000000000000000000000BE -:1052F00000808C4C3800000000000000000000001E -:10530000000000000000000000101010101010102D -:10531000101010000000000000000000000000005D -:10532000000000000000000000000000000000007D -:10533000000000000000000000001C1C1C00000019 -:10534000000000000000000000000000E0380C0039 -:105350000000000080701C03000000000060380E98 -:105360000100000000000000000080C060202060FC -:10537000C080000000FEFF010000000001FFFE00F1 -:105380000001070E181010180E07010000008080A1 -:1053900080C0E000000000000000000000FFFF00EF -:1053A0000000000000001010101F1F10101000005F -:1053B0000080402020202060C08000000003030007 -:1053C000804020381F070000001C1A1918181818F0 -:1053D000181F00000080C020202060C08000000056 -:1053E000000303001010182FE780000000070F10C3 -:1053F000101010180F070000000000000000C0E0AF -:10540000F000000000C0B088868180FFFF8080002F -:10541000000000000010101F1F1010000000E060CE -:10542000606060606060000000003F1008080818BD -:10543000F0E0000000070B101010101C0F0300001C -:10544000000080C040202020E0C0000000FCFF21C0 -:105450001008080818F0E0000001070C18101010E0 -:10546000080F03000000C0E06060606060E0600062 -:10547000000003000000E01807000000000000002A -:10548000001F1F00000000000080C06020202020BE -:1054900060C080000087EF2C1818303068CF830080 -:1054A00000070F0810101010180F07000000C0C0F0 -:1054B00020202020C0800000001F3F60404040208E -:1054C00010FFFE0000000C1C101010080F0300005D -:1054D00000000000000000000000000000000000CC -:1054E000000E0E0E0000000000000000001C1C1C3E -:1054F00000000000000000000000000000000000AC -:1055000000000000000C0C00000000000000000083 -:10551000005838000000000000000000000000807B -:10552000402010000000102844820100000000000C -:10553000000000000000010204081000000000004C -:1055400000000000000000000084848484848484BF -:1055500084848400000000000000000000000000BF -:10556000000010204080000000000000000000004B -:10557000000001824428100000001008040201000D -:105580000000000000C020201010101030E0C0000B -:105590000003030000F010080C07030000000000E7 -:1055A0001C1C1C0000000000000000C04060202007 -:1055B0002040C00000FCFF01F00E03C1FE03807F0D -:1055C0000001070E0811111011090402000000006B -:1055D00080E0E000000000000000807C4340477F46 -:1055E000F880000010181F1000000000131F1C108E -:1055F00020E0E02020202060C080000000FFFF109D -:10560000101010182FE78000101F1F10101010101E -:10561000180F0700000080C0402020202060E0001C -:1056200000FCFF0100000000000001000001070E67 -:10563000181010100804030020E0E0202020204073 -:10564000C080000000FFFF000000000001FFFE001E -:10565000101F1F10101018080E07010020E0E02096 -:10566000202020202060800000FFFF101010107C00 -:1056700000000000101F1F1010101010101806005E -:1056800020E0E020202020206060800000FFFF104C -:105690001010107C00000100101F1F1000000000FF -:1056A00000000000000080C06020202040E00000DA -:1056B00000FCFF0100004040C0C140400001070E57 -:1056C000181010100F0F000020E0E0200000000074 -:1056D00020E0E02000FFFF101010101010FFFF006E -:1056E000101F1F1000000000101F1F1000002020BE -:1056F00020E0E020202000000000000000FFFF006C -:105700000000000000001010101F1F1010100000FB -:1057100000000000202020E0E02020200000000009 -:10572000000000FFFF0000000060E0808080C07F7C -:105730003F00000020E0E020000020A060202000CA -:1057400000FFFF30187CE3C000000000101F1F1096 -:10575000000001131F1C181020E0E02000000000D2 -:105760000000000000FFFF0000000000000000003B -:10577000101F1F10101010101018060020E0E0E09D -:1057800000000000E0E0E02000FF013FFEC0E01E5E -:1057900001FFFF00101F1000031F0300101F1F1048 -:1057A00020E0E0C0000000000020E02000FF000337 -:1057B000071C78E08000FF00101F100000000000B0 -:1057C000030F1F00000080C060202060C080000028 -:1057D00000FEFF010000000000FFFE000001070EB8 -:1057E000181010180C07010020E0E02020202020D5 -:1057F00060C0800000FFFF2020202020301F0F000D -:10580000101F1F100000000000000000000080C0FA -:1058100060202060C080000000FEFF01000000004A -:1058200000FFFE000001070E1111133C7C672100F0 -:1058300020E0E0202020202060C0800000FFFF103A -:105840001030F0D0080F0700101F1F1000000003D9 -:105850000F1C10100080C060202020204040E0007D -:1058600000070F0C1818303060E08100001F0C0892 -:1058700010101010180F07008060202020E0E0209A -:10588000202060800100000000FFFF0000000001F8 -:1058900000000000101F1F100000000020E0E020AA -:1058A000000000000020E02000FFFF0000000000DA -:1058B0000000FF0000070F1810101010100807005C -:1058C0002060E0E02000000020E060200000077F72 -:1058D000F88000807C03000000000000071F1C0708 -:1058E0000000000020E0E02000E0E0200020E020B8 -:1058F0000007FFF8E01FFFFCE01F00000000031F8F -:105900000300011F03000000002060E0A000002051 -:10591000E0602000000000038F7CF8C6010000005A -:105920000010181E130001171F1810002060E0E07F -:105930002000000020E06020000001073EF8E01891 -:105940000700000000000010101F1F1010000000D2 -:1059500000806020202020A0E0E020000000000067 -:10596000C0F03E0F0300000000101C1F17101010A5 -:10597000101806000000000000FC040404040400E9 -:105980000000000000FF0000000000000000000018 -:10599000007F404040404000000010E00000000058 -:1059A0000000000000000000031C608000000000F8 -:1059B00000000000000000030C70800000000404E0 -:1059C000040404FC0000000000000000000000FFD0 -:1059D00000000000000040404040407F0000000008 -:1059E00000000010080C040C08100000000000006B -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000008080808086 -:105A2000808080808080808000000004040808005E -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000098D844642424E6 -:105A6000FCF80000000F1F18101010081F1F10185E -:105A70000020E0F000000000000000000000FFFF38 -:105A8000180804040CF8F00000001F0F1810101084 -:105A9000180F0300000000000000000000000000DC -:105AA00000E0F8180404043C3800000000030F0C68 -:105AB0001010101008060000000000000000002078 -:105AC000E0F0000000E0F81C04040408FFFF000000 -:105AD00000030F18101010081F0F0800000000002E -:105AE00000000000000000000000E0F848444444CA -:105AF0004C7870000000030F0C1810101008040000 -:105B00000000000080C0602020E0C0000004040409 -:105B1000FFFF040404040000000010101F1F1010F9 -:105B20001000000000000000000000000000000065 -:105B3000000070F88C04048CF874040C007076CFAC -:105B40008D8D8D89C87870000020E0F00000000085 -:105B5000000000000000FFFF08040404FCF800003F -:105B600000101F1F100000101F1F10000000000079 -:105B700000606000000000000000040404FCFC0061 -:105B80000000000000001010101F1F101010000077 -:105B90000000000000000060600000000000000045 -:105BA000040404FCFC0000000000C0C08080C07F32 -:105BB0003F0000000020E0F00000000000000000B6 -:105BC0000000FFFF80C0F41C0404000000101F1F31 -:105BD0001100031F1C1010000000202020E0F00026 -:105BE000000000000000000000FFFF0000000000B7 -:105BF00000001010101F1F10101000000000000007 -:105C0000000000000000000004FCFC0804FCFC088C -:105C100004FCFC00101F1F10001F1F10001F1F108E -:105C20000000000000000000000000000004FCFC78 -:105C300008080404FCF8000000101F1F10000010EA -:105C40001F1F100000000000000000000000000006 -:105C500000E0F0180C04040C18F0E00000030F0C36 -:105C6000101010100C0F03000000000000000000D6 -:105C7000000000000004FCFC080404040CF8F00020 -:105C80000080FFFF889010101C0F03000000000030 -:105C9000000000000000000000E0F81C04040408FC -:105CA000F8FC000000030F1810109088FFFF800020 -:105CB000000000000000000000000000040404FCDC -:105CC000FC100804040C0C001010101F1F10101002 -:105CD00000000000000000000000000000000000C4 -:105CE00000003078CCC48484840C1C0000001E1892 -:105CF00010101011190F06000000000000C0000075 -:105D00000000000000040404FFFF0404040000007D -:105D1000000000000F1F1010100C00000000000019 -:105D200000000000000000000004FCFE0000000471 -:105D3000FCFE000000000F1F181010081F0F0800C5 -:105D400000000000000000000000000000040C3C07 -:105D5000FCC40000C43C0C0400000000010F1E0E37 -:105D60000100000000000000000000000000000032 -:105D7000043CFCC400E47CFC84807C040000071F1D -:105D8000070000071F0700000000000000000000DF -:105D9000000000000004041C7CE4C0341C04040067 -:105DA0000010101C1601131F1C181000000000002A -:105DB000000000000000000000040C3CFCC400C413 -:105DC0003C0404000000C080C1370E010000000048 -:105DD00000000000000000000000000000001C04A3 -:105DE00004C4F47C1C0400000000101C1F171110D8 -:105DF00010180E0000000000000000F80C04000065 -:105E000000000000001028EF00000000000000006B -:105E10000000003F60400000000000000000FF00A4 -:105E200000000000000000000000FF000000000073 -:105E3000000000000000FF00000000000000040C53 -:105E4000F80000000000000000000000EF28100033 -:105E500000000000000040603F0000000000000063 -:105E6000001806020204081020203008000000007C -:105E70000000000000000000000000000000000022 -:105E8000000000000000F010101010FF10101010A3 -:105E9000F000000000000F04040404FF04040404E4 -:105EA0000F0000004040405F555555755555555FF2 -:105EB000404040000040200F094989790909090F35 -:105EC0002040000000FE02424ACA4A4ACA4A4A42E8 -:105ED00002FE000000FF40504C4340404F50505CD9 -:105EE00040FF00000000F888888888FF888888883C -:105EF000F800000000001F080808087F88888888CC -:105F00009F80F00080828282828282E2A2928A86D0 -:105F100082808000000000000040807F00000000C0 -:105F200000000000101010FF109008888888FF887B -:105F3000888808000444827F01808040432C102818 -:105F4000468180000010101010D030FF30D0121C9D -:105F50001010000010080402010000FF0000010200 -:105F60000408100004040484E43C2724242424E4CA -:105F70000404040004020100FF0909090949897F9A -:105F80000000000000FE225A8600FE929292929239 -:105F9000FE00000000FF04080700FF4020030C146F -:105FA0002241400000804020180680000718204051 -:105FB0008000000001002070282621202024386065 -:105FC000000101000010129292929292921212021B -:105FD000FE0000000000003F101010103F00408045 -:105FE0007F000000000000C080808080808080FCF6 -:105FF00084808080808080C0C0000000000000FF9E -:106000007F404040404040FF40404040404040FFD3 -:106010007F00000000000000000000000000007F82 -:106020007000000000000000000000000000000000 -:106030000000000000000000000000FCF80000006C -:106040000000000000000000000000000000000050 -:10605000FFFE020202020202020202FFFF0202022D -:10606000020202020202FF03000000000000000022 -:106070001F1F040404040404040404FFFF040404B4 -:106080000404040404041F000000000000000000D9 -:1060900000000000000000000000007F3F00000042 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C000000000000000000000F8F8F0F070200070 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F0000000000080000000000000000000000020 -:10610000000000000000000000FFFFFFFF00000093 -:10611000000000000000000000000000000000007F -:10612000808000000000000000000000000000006F -:106130000000000000FFFFFE060606060606060633 -:10614000060606060606060606FFFFFFFF0606060B -:10615000060606060606060606060606060606FFE6 -:10616000FFFFFF0702000000000000000000000029 -:106170000000000000FFFFFF000000000000000022 -:10618000000000000000000000FFFFFFFF00000013 -:10619000000000000000000000000000000000FF00 -:1061A000FFFFFF00000000000000000000000000F2 -:1061B0000000000000FFFFFF181818181818181822 -:1061C000181818181818181818FFFFFFFF181818B3 -:1061D000181818181818181818181818181818FF58 -:1061E000FFFFFF00000000000000000000000000B2 -:1061F000000000000201010000000000000000009B -:10620000000000000000000000FFFFFFFF00000092 -:10621000000000000000000000000000000000017D -:10622000010000000000000000000000000000006D -:10623000000000000000000000000000000000005E -:10624000000000000000000000FFFFFFFF00000052 -:10625000000000000000000000000000000000003E -:10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:106280000000000000000000001F1F0F0F000000B2 -:1062900000000000000000000000000000000000FE -:1062A000000000000000000000000000CC620008B8 -:1062B000000000201C000000AC070008E862000895 -:1062C0001C00002054230000BC0700080000000050 -:1062D00000000000000000000000000000000000BE -:0862E000000E2707000000007A -:0400000508000131BD -:00000001FF diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/JLinkSettings.ini b/Example/EpaperModuleTest_GD32F303/MDK-ARM/JLinkSettings.ini deleted file mode 100644 index 39b6d05..0000000 --- a/Example/EpaperModuleTest_GD32F303/MDK-ARM/JLinkSettings.ini +++ /dev/null @@ -1,39 +0,0 @@ -[BREAKPOINTS] -ForceImpTypeAny = 0 -ShowInfoWin = 1 -EnableFlashBP = 2 -BPDuringExecution = 0 -[CFI] -CFISize = 0x00 -CFIAddr = 0x00 -[CPU] -MonModeVTableAddr = 0xFFFFFFFF -MonModeDebug = 0 -MaxNumAPs = 0 -LowPowerHandlingMode = 0 -OverrideMemMap = 0 -AllowSimulation = 1 -ScriptFile="" -[FLASH] -CacheExcludeSize = 0x00 -CacheExcludeAddr = 0x00 -MinNumBytesFlashDL = 0 -SkipProgOnCRCMatch = 1 -VerifyDownload = 1 -AllowCaching = 1 -EnableFlashDL = 2 -Override = 0 -Device="ARM7" -[GENERAL] -WorkRAMSize = 0x00 -WorkRAMAddr = 0x00 -RAMUsageLimit = 0x00 -[SWO] -SWOLogFile="" -[MEM] -RdOverrideOrMask = 0x00 -RdOverrideAndMask = 0xFFFFFFFF -RdOverrideAddr = 0xFFFFFFFF -WrOverrideOrMask = 0x00 -WrOverrideAndMask = 0xFFFFFFFF -WrOverrideAddr = 0xFFFFFFFF diff --git a/Example/EpaperModuleTest_GD32F303/MDK-ARM/RTE/_template/RTE_Components.h b/Example/EpaperModuleTest_GD32F303/MDK-ARM/RTE/_template/RTE_Components.h deleted file mode 100644 index b27b38c..0000000 --- a/Example/EpaperModuleTest_GD32F303/MDK-ARM/RTE/_template/RTE_Components.h +++ /dev/null @@ -1,21 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'template' - * Target: 'template' - */ - -#ifndef RTE_COMPONENTS_H -#define RTE_COMPONENTS_H - - -/* - * Define the Device Header File: - */ -#define CMSIS_device_header "gd32f30x.h" - - - -#endif /* RTE_COMPONENTS_H */ diff --git a/Example/EpaperModuleTest_GD32F303/Src/gd32f30x_it.c b/Example/EpaperModuleTest_GD32F303/Src/gd32f30x_it.c deleted file mode 100644 index 391de8a..0000000 --- a/Example/EpaperModuleTest_GD32F303/Src/gd32f30x_it.c +++ /dev/null @@ -1,143 +0,0 @@ -/*! - \file gd32f30x_it.c - \brief interrupt service routines - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2018, GigaDevice Semiconductor Inc. - - All rights reserved. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x_it.h" -#include "systick.h" - -/*! - \brief this function handles NMI exception - \param[in] none - \param[out] none - \retval none -*/ -void NMI_Handler(void) -{ -} - -/*! - \brief this function handles HardFault exception - \param[in] none - \param[out] none - \retval none -*/ -void HardFault_Handler(void) -{ - /* if Hard Fault exception occurs, go to infinite loop */ - while (1){ - } -} - -/*! - \brief this function handles MemManage exception - \param[in] none - \param[out] none - \retval none -*/ -void MemManage_Handler(void) -{ - /* if Memory Manage exception occurs, go to infinite loop */ - while (1){ - } -} - -/*! - \brief this function handles BusFault exception - \param[in] none - \param[out] none - \retval none -*/ -void BusFault_Handler(void) -{ - /* if Bus Fault exception occurs, go to infinite loop */ - while (1){ - } -} - -/*! - \brief this function handles UsageFault exception - \param[in] none - \param[out] none - \retval none -*/ -void UsageFault_Handler(void) -{ - /* if Usage Fault exception occurs, go to infinite loop */ - while (1){ - } -} - -/*! - \brief this function handles SVC exception - \param[in] none - \param[out] none - \retval none -*/ -void SVC_Handler(void) -{ -} - -/*! - \brief this function handles DebugMon exception - \param[in] none - \param[out] none - \retval none -*/ -void DebugMon_Handler(void) -{ -} - -/*! - \brief this function handles PendSV exception - \param[in] none - \param[out] none - \retval none -*/ -void PendSV_Handler(void) -{ -} - -/*! - \brief this function handles SysTick exception - \param[in] none - \param[out] none - \retval none -*/ -void SysTick_Handler(void) -{ - delay_decrement(); -} diff --git a/Example/EpaperModuleTest_GD32F303/Src/gpio.c b/Example/EpaperModuleTest_GD32F303/Src/gpio.c deleted file mode 100644 index 493557e..0000000 --- a/Example/EpaperModuleTest_GD32F303/Src/gpio.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "gpio.h" - -void gpio_config(void) -{ - /* enable clock */ - rcu_periph_clock_enable(RCU_AF); - - rcu_periph_clock_enable(KEY_RCU); - rcu_periph_clock_enable(LED_PB2_RCU); - - /* JTAG-DP disabled and SW-DP enabled */ - gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE); - - /* configure button pin as input */ - gpio_init(KEY_PORT, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, KEY_PIN); - /* configure led pin as output */ - gpio_init(LED_PB2_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED_PB2_PIN); - gpio_bit_reset(LED_PB2_PORT,LED_PB2_PIN); -} diff --git a/Example/EpaperModuleTest_GD32F303/Src/main.c b/Example/EpaperModuleTest_GD32F303/Src/main.c deleted file mode 100644 index 7e517fb..0000000 --- a/Example/EpaperModuleTest_GD32F303/Src/main.c +++ /dev/null @@ -1,379 +0,0 @@ -/*--------------------------------------- -- WeAct Studio Official Link -- taobao: weactstudio.taobao.com -- aliexpress: weactstudio.aliexpress.com -- github: github.com/WeActTC -- gitee: gitee.com/WeAct-TC -- blog: www.weact-tc.cn ----------------------------------------*/ - -#include "gd32f30x.h" -#include - -#include "systick.h" -#include "usart.h" -#include "gpio.h" - -float temperature; -float vref_value; - -void adc_config(void); -void jump_to_app(uint32_t addr); - -#include "epaper.h" -#include "bmp.h" - -// define for White Black Red Epaper Module -//#define EPD_BWR - -uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; -#ifdef EPD_BWR -uint8_t image_red[EPD_W_BUFF_SIZE * EPD_H]; -#endif - -/*! - \brief main function - \param[in] none - \param[out] none - \retval none -*/ -int main(void) -{ - uint8_t text[20]; - -#ifdef HID_IAP - /* Soft :GD32 MCU HID IAP Programmer, Bootloader Size :8KB */ - /* if use HID bootloader ,set ROM start addr 0x8002000 && set vector */ - /* if not use HID bootloader ,set ROM start addr 0x8000000 && Comment out the following code */ - // nvic_vector_table_set(NVIC_VECTTAB_FLASH,0x2000); - nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x2000); -#endif - - rcu_all_reset_flag_clear(); - - dbg_low_power_enable(DBG_LOW_POWER_SLEEP | DBG_LOW_POWER_DEEPSLEEP | DBG_LOW_POWER_STANDBY); - - systick_config(); - - gpio_config(); - - adc_config(); - - usart0_config(); - - FlagStatus sw_led = SET; - - uint32_t tick1, tick2; - tick1 = tick2 = get_tick(); - - printf("\r\nWeAct Studio Core Board\r\n"); - printf("weactstudio.taobao.com\r\n"); - printf("weactstudio.aliexpress.com\r\n"); - printf("wwww.weact-tc.cn\r\n\r\n"); - printf("SystemClk:%d\r\n", SystemCoreClock); - printf("CK_AHB is %d\r\n", rcu_clock_freq_get(CK_AHB)); - printf("CK_APB1 is %d\r\n", rcu_clock_freq_get(CK_APB1)); - printf("CK_APB2 is %d\r\n", rcu_clock_freq_get(CK_APB2)); - - printf("Epaper Module Test\r\n"); - - epd_io_init(); - - epd_init(); - -#ifdef EPD_BWR - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); - #else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #endif - - epd_display(image_bw, image_red); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(8000); - - epd_init(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - - epd_paint_selectimage(image_red); - epd_paint_clear(EPD_COLOR_WHITE); - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); - -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"GD32F303CCT6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_RED); -#else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_RED, 1); -#endif - - epd_display(image_bw, image_red); - -#else - #ifdef EPD_42 - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); -#else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - #endif - - epd_paint_selectimage(image_bw); - - #ifdef EPD_154 - epd_paint_clear(EPD_COLOR_WHITE); - epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); - #else - epd_paint_clear(EPD_COLOR_WHITE); - #ifdef EPD_42 - epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); - #else - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); -#endif - #endif - - epd_displayBW(image_bw); - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - delay(5000); - - epd_init_partial(); - - epd_paint_selectimage(image_bw); - epd_paint_clear(EPD_COLOR_WHITE); -#ifdef EPD_154 - epd_paint_showString(10, 0, (uint8_t *)&"1.54 Inch", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 23, (uint8_t *)&"Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 48, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showString(10, 60, (uint8_t *)&"with 200 x 200 resolution", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); - epd_paint_showPicture((EPD_H - 200) / 2,130,200,64,gImage_5,EPD_COLOR_WHITE); -#endif -#ifdef EPD_213 - epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_29 - epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#ifdef EPD_42 - epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); - epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); -#endif -#if 1 - epd_paint_showString(10,100,(uint8_t *)&"GD32F303CCT6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); -#else - epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); -#endif - - sprintf((char *)&text, ">> Partial Mode"); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(1000); - - for (uint32_t i = 123; i < 8 * 123; i += 123) - { - sprintf((char *)&text, ">> Num=%d ", i); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - - epd_displayBW_partial(image_bw); - - delay(100); - } - - sprintf((char *)&text, ">> Hello World."); - epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); - epd_displayBW_partial(image_bw); - - delay(1000); - - epd_update(); -#endif - - epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); - - while (1) - { - - if (get_tick() > tick1) - { - tick1 = get_tick() + 500 / SysTick_Tick; - - if (sw_led == SET) - { - /* toggle LED */ - gpio_bit_write(LED_PB2_PORT, LED_PB2_PIN, (gpio_output_bit_get(LED_PB2_PORT, LED_PB2_PIN)) == SET ? RESET : SET); - } - else - { - gpio_bit_reset(LED_PB2_PORT, LED_PB2_PIN); - } - } - - if (get_tick() > tick2) - { - tick2 = get_tick() + 10 / SysTick_Tick; - - static uint32_t PressTimeCount = 0; - - static FlagStatus IsPress = RESET; - if (gpio_input_bit_get(KEY_PORT, KEY_PIN) != SET) - { - if (IsPress == SET) - { - IsPress = RESET; - - /* KEY click */ - sw_led = sw_led == SET ? RESET : SET; - printf("Hello,WeAct Studio\r\n"); - - /* ADC software trigger enable */ - adc_software_trigger_enable(ADC0, ADC_INSERTED_CHANNEL); - /* delay a time in milliseconds */ - - while (adc_flag_get(ADC0, ADC_FLAG_EOC) == RESET) - { - delay_lp(1); - } - adc_flag_clear(ADC0, ADC_FLAG_EOC); - - /* value convert */ - temperature = (1430.f - ADC_IDATA0(ADC0) * 3300 / 4096) / 4.3f + 25; - vref_value = (ADC_IDATA1(ADC0) * 3300 / 4096.f); - - /* value print */ - printf("The temperature data is %2.1f degrees Celsius\r\n", temperature); - printf("The reference voltage data is %5.3fmV \r\n", vref_value); - printf("\r\n"); - - PressTimeCount = 0; - } - } - else - { - if (IsPress == RESET) - { - IsPress = SET; - } - PressTimeCount++; - - /*0.5s KEY long press */ - if (PressTimeCount >= 50) - { - /* long press , system reset and enter the IAP bootloader */ - if (SCB->VTOR != 0) - { - printf("Enter IAP Bootloader ...\r\n"); - NVIC_SystemReset(); - } - else - { - printf("Enter system ISP Bootloader ...\r\n"); - -#define ISP_ADDR ((uint32_t)0x1FFFF000) - - systick_deinit(); - gpio_deinit(LED_PB2_PORT); - gpio_deinit(KEY_PORT); - jump_to_app(ISP_ADDR); - } - } - } - } - pmu_to_sleepmode(WFI_CMD); - } -} - -/*! - \brief configure the ADC peripheral - \param[in] none - \param[out] none - \retval none -*/ -void adc_config(void) -{ - /* enable ADC clock */ - rcu_periph_clock_enable(RCU_ADC0); - /* config ADC clock */ - rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4); - - /* ADC SCAN function enable */ - adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE); - adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, DISABLE); - /* ADC trigger config */ - adc_external_trigger_source_config(ADC0, ADC_INSERTED_CHANNEL, ADC0_1_2_EXTTRIG_INSERTED_NONE); - /* ADC mode config */ - adc_mode_config(ADC_MODE_FREE); - /* ADC data alignment config */ - adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT); - /* ADC channel length config */ - adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 2); - - /* ADC temperature sensor channel config */ - adc_inserted_channel_config(ADC0, 0, ADC_CHANNEL_16, ADC_SAMPLETIME_239POINT5); - /* ADC internal reference voltage channel config */ - adc_inserted_channel_config(ADC0, 1, ADC_CHANNEL_17, ADC_SAMPLETIME_239POINT5); - - adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE); - - /* ADC temperature and Vrefint enable */ - adc_tempsensor_vrefint_enable(); - - /* enable ADC interface */ - adc_enable(ADC0); - delay(1); - /* ADC calibration and reset calibration */ - adc_calibration_enable(ADC0); -} - -void jump_to_app(uint32_t addr) -{ - uint32_t app_address; - void *(*application)(void); - - /* test if user code is programmed starting from address */ - if (((*(__IO uint32_t *)addr) & 0x2FFE0000) == 0x20000000) - { - app_address = *(__IO uint32_t *)(addr + 4); - application = (void *(*)(void))app_address; - - /* initialize user application's stack pointer */ - __set_MSP(*(__IO uint32_t *)addr); - - /* jump to application */ - application(); - } -} diff --git a/Example/EpaperModuleTest_GD32F303/Src/systick.c b/Example/EpaperModuleTest_GD32F303/Src/systick.c deleted file mode 100644 index c947065..0000000 --- a/Example/EpaperModuleTest_GD32F303/Src/systick.c +++ /dev/null @@ -1,145 +0,0 @@ -/*! - \file systick.c - \brief the systick configuration file - - \version 2017-02-10, V1.0.0, firmware for GD32F30x - \version 2018-10-10, V1.1.0, firmware for GD32F30x - \version 2018-12-25, V2.0.0, firmware for GD32F30x -*/ - -/* - Copyright (c) 2018, GigaDevice Semiconductor Inc. - - All rights reserved. - - 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 the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, 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. -*/ - -#include "gd32f30x.h" -#include "systick.h" - -volatile static uint32_t tick = 0; - -/*! - \brief configure systick - \param[in] none - \param[out] none - \retval none -*/ -void systick_config(void) -{ - /* setup systick timer for (SysTick_Freq) Hz interrupts */ - if (SysTick_Config(SystemCoreClock / SysTick_Freq)){ - /* capture error */ - while (1){ - } - } - /* configure the systick handler priority */ - NVIC_SetPriority(SysTick_IRQn, 0x05U); -} - -/*! - \brief delay a time in milliseconds - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay(uint32_t count) -{ - uint32_t utick; - utick = count + get_tick(); - - while(get_tick() < utick){ - } -} - -/*! - \brief delay a time in milliseconds with low power - \param[in] count: count in milliseconds - \param[out] none - \retval none -*/ -void delay_lp(uint32_t count) -{ - uint32_t utick; - utick = count + get_tick(); - - while(get_tick() < utick){ - pmu_to_sleepmode(WFI_CMD); - } -} - -/*! - \brief delay decrement - \param[in] none - \param[out] none - \retval none -*/ -void delay_decrement(void) -{ - tick++; -} - -/*! - \brief get systick tick - \param[in] none - \param[out] none - \retval none -*/ - -uint32_t get_tick(void) -{ - return tick; -} - -void systick_DisableIRQ(void) -{ - /* Disable SysTick Interrupt */ - SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; -} - -void systick_EnableIRQ(void) -{ - /* Enable SysTick Interrupt */ - SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; -} - -void systick_Disable(void) -{ - /* Disable SysTick */ - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; -} - -void systick_Enable(void) -{ - /* Enable SysTick */ - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; -} - -void systick_deinit(void) -{ - SysTick->CTRL = 0; - SysTick->LOAD = 0; - SysTick->VAL = 0; -} diff --git a/Example/EpaperModuleTest_GD32F303/Src/usart.c b/Example/EpaperModuleTest_GD32F303/Src/usart.c deleted file mode 100644 index 2917a51..0000000 --- a/Example/EpaperModuleTest_GD32F303/Src/usart.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "usart.h" - -/* for MicroLIB */ -int fputc(int ch, FILE *f) -{ - /* Place your implementation of fputc here */ - /* e.g. write a character to the USART3 and Loop until the end of transmission */ - usart_data_transmit(USART0, (uint8_t)ch); - while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); - return ch; -} - -/* for GNU */ -int _write (int fd, char *pBuffer, int size) -{ - for (int i = 0; i < size; i++) - { - usart_data_transmit(USART0, (uint8_t)pBuffer[i]); - while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); - } - return size; -} - -void usart0_config(void) -{ - /* enable GPIO clock */ - rcu_periph_clock_enable(RCU_GPIOA); - - /* enable USART clock */ - rcu_periph_clock_enable(RCU_USART0); - - /* connect port to USARTx_Tx */ - gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); - - /* connect port to USARTx_Rx */ - gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10); - - /* USART configure */ - usart_deinit(USART0); - usart_baudrate_set(USART0, 115200U); - usart_receive_config(USART0, USART_RECEIVE_ENABLE); - usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); - usart_enable(USART0); -} - diff --git a/Example/EpaperModuleTest_RaspberryPi/Makefile b/Example/EpaperModuleTest_RaspberryPi/Makefile new file mode 100644 index 0000000..0c810c0 --- /dev/null +++ b/Example/EpaperModuleTest_RaspberryPi/Makefile @@ -0,0 +1,49 @@ +# Compiler settings +CC = gcc +CFLAGS = -Wall -Wextra -g -O2 -ffunction-sections -fdata-sections +LDFLAGS = -Wl,--gc-sections +LIBS = -lwiringPi -lm + +# Directory settings +SRC_DIR = . +EPAPER_LIB_DIR = ./epaper +BUILD_DIR = ./build +BIN_DIR = ./bin + +# Target settings +TARGET = $(BIN_DIR)/epd +EPD_TYPE = NULL # Can be set to EPD420_BW etc. +DEBUG_FLAG = -DDEBUG + +# Auto detect source files +SRCS = $(wildcard $(SRC_DIR)/*.c) $(wildcard $(EPAPER_LIB_DIR)/*.c) +OBJS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(SRCS)) + +# Create all required directories +BUILD_SUBDIRS = $(sort $(dir $(OBJS))) +$(shell mkdir -p $(BUILD_SUBDIRS) $(BIN_DIR)) + +# Default target +all: $(TARGET) + +# Linking target +$(TARGET): $(OBJS) + @echo "EPD_TYPE: $(EPD_TYPE)" + @echo "Linking to generate executable file: $@" + $(CC) $(LDFLAGS) $^ -o $@ $(LIBS) + @echo "Executable file generated at: $@" + +# Compilation rules +$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c + @echo "Compiling source file: $<" + $(CC) $(CFLAGS) -D$(EPD_TYPE) $(DEBUG_FLAG) -I$(EPAPER_LIB_DIR) -c $< -o $@ + +$(BUILD_DIR)/%.o: $(EPAPER_LIB_DIR)/%.c + @echo "Compiling source file: $<" + $(CC) $(CFLAGS) -D$(EPD_TYPE) $(DEBUG_FLAG) -I$(EPAPER_LIB_DIR) -c $< -o $@ + +# Cleanup +clean: + rm -rf $(BUILD_DIR) $(BIN_DIR) + +.PHONY: all clean \ No newline at end of file diff --git a/Example/EpaperModuleTest_RaspberryPi/README.md b/Example/EpaperModuleTest_RaspberryPi/README.md new file mode 100644 index 0000000..df74bdb --- /dev/null +++ b/Example/EpaperModuleTest_RaspberryPi/README.md @@ -0,0 +1,32 @@ +## How to build +``` +# connect epaper module +# res pin -> Pin 11 +# busy pin -> Pin 18 +# d/c pin -> Pin 22 +# cs pin -> Pin 24 +# sck/scl pin -> Pin 23 +# mosi/sda pin -> Pin 19 + +# enable spi +sudo raspi-config +# Interfacing Options -> SPI -> Yes + +# reboot +sudo reboot + +# install wiringpi +git clone https://github.com/WiringPi/WiringPi +cd WiringPi +./build + +# build epaper example +make clean +# 4.2 Inch Epaper Module Black/White/Red +make EPD_TYPE=EPD420_BWR +# 4.2 Inch Epaper Module Black/White +make EPD_TYPE=EPD420_BW + +# run epaper example +./bin/epd +``` \ No newline at end of file diff --git a/Example/EpaperModuleTest_CH32F103/Epaper/bmp.h b/Example/EpaperModuleTest_RaspberryPi/epaper/bmp.h similarity index 99% rename from Example/EpaperModuleTest_CH32F103/Epaper/bmp.h rename to Example/EpaperModuleTest_RaspberryPi/epaper/bmp.h index bd22f80..6580138 100644 --- a/Example/EpaperModuleTest_CH32F103/Epaper/bmp.h +++ b/Example/EpaperModuleTest_RaspberryPi/epaper/bmp.h @@ -7,6 +7,7 @@ extern "C" #endif ////////////////array///////////////////////////////////////////////////////////////////////////////////// +// w=250,h=122 const unsigned char gImage_1[4000] = { /* 0X01,0X01,0XFA,0X00,0X7A,0X00, */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -259,6 +260,8 @@ const unsigned char gImage_1[4000] = { /* 0X01,0X01,0XFA,0X00,0X7A,0X00, */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; + +// w=250,h=122 const unsigned char gImage_2[4000]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x3E,0x7E,0x7E,0xFE,0xFC,0xFC,0x78,0x30,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xF0,0xF8,0xFE,0xFE,0xFF,0xFF,0x7F,0x1F,0x0F,0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0x7F,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x0E,0x04,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC1,0xC0,0x80,0x00,0x00,0x1F,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -267,6 +270,7 @@ const unsigned char gImage_2[4000]={ 0x00,0x00,0x00,0x00, }; +// w=250,h=122 const unsigned char gImage_3[4000]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x1F,0x1F,0x0F,0x0F,0x9F,0xFF,0xFF,0xFE,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x78,0x7C,0x7E,0x3E,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x04,0x0E,0x1E,0x1F,0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x73,0x7F,0x3F,0x1F,0x0F,0x00,0x00,0x31,0x7B,0x7F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x07,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x30,0xF0,0xF0,0xF0,0x78,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0xF8,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0xF8,0x78,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xC0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF0,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0x70,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0x78,0xF8,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFE,0xFF,0xBF,0x9F,0x87,0x83,0x80,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0xC0,0xC0,0xC0,0xC7,0x87,0x87,0xCF,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87,0x87,0x87,0x87,0x80,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x40,0xF8,0xFC,0xFC,0xFE,0xFE,0x9E,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9D,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE1,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x1C,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDC,0x9C,0x9C,0x9F,0xDF,0xDF,0x9F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x03,0x07,0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x07,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -275,6 +279,7 @@ const unsigned char gImage_3[4000]={ 0x00,0x00,0x00,0x00, }; +// w=250,h=122 const unsigned char gImage_4[4000]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, diff --git a/Example/EpaperModuleTest_RaspberryPi/epaper/epaper.c b/Example/EpaperModuleTest_RaspberryPi/epaper/epaper.c new file mode 100644 index 0000000..b0ef257 --- /dev/null +++ b/Example/EpaperModuleTest_RaspberryPi/epaper/epaper.c @@ -0,0 +1,1193 @@ +/*--------------------------------------- +- WeAct Studio Official Link +- taobao: weactstudio.taobao.com +- aliexpress: weactstudio.aliexpress.com +- github: github.com/WeActTC +- gitee: gitee.com/WeAct-TC +- blog: www.weact-tc.cn +---------------------------------------*/ + +#include "epaper.h" +#include "epdfont.h" + +#include +#include + +// epaper module +// res pin -> Pin 11 +// busy pin -> Pin 18 +// d/c pin -> Pin 22 +// cs pin -> Pin 24 +// sck/scl pin -> Pin 23 +// mosi/sda pin -> Pin 19 + +#define RES_PIN 17 // Pin 11 +#define DC_PIN 25 // Pin 22 +#define CS_PIN 8 // Pin 14 +#define BUSY_PIN 24 // Pin 18 +#define SPI_CHANNEL 0 // SPI Channel + +uint16_t EPD_H; +uint16_t EPD_W; + +EPD_PAINT EPD_Paint; + +uint8_t epd_type = 0; + +static uint8_t _hibernating = 1; + +static uint8_t old_data[30 * 416] = {0}; + +static const unsigned char lut_partial[] = +{ + 0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x40,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0A, + 0x0,0x0,0x0,0x0,0x0,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x22, + 0x22,0x22,0x22,0x22,0x22,0x0,0x0,0x0, +}; + +void epd_delay(uint16_t ms) +{ + delay(ms); +} + +// 修改GPIO控制函数 +void epd_res_set() +{ + digitalWrite(RES_PIN, HIGH); +} + +void epd_res_reset() +{ + digitalWrite(RES_PIN, LOW); +} + +void epd_dc_set() +{ + digitalWrite(DC_PIN, HIGH); +} + +void epd_dc_reset() +{ + digitalWrite(DC_PIN, LOW); +} + +void epd_cs_set() +{ + // digitalWrite(CS_PIN, HIGH); +} + +void epd_cs_reset() +{ + // digitalWrite(CS_PIN, LOW); +} + +uint8_t epd_is_busy() +{ + if (epd_type == EPD370_UC8253) + { + return digitalRead(BUSY_PIN) ? 0 : 1; + } + else + { + return digitalRead(BUSY_PIN) ? 1 : 0; + } +} + +void epd_io_init(void) +{ + // wiringPiSetup(); + if (wiringPiSetupGpio() < 0) + { // use BCM2835 Pin number table + printf("set wiringPi lib failed!\r\n"); + return; + } + else + { + printf("set wiringPi lib success!\r\n"); + } + + int mode = epd_type == EPD370_UC8253 ? 0 : 3; + if (wiringPiSPISetupMode(SPI_CHANNEL, 1000000, mode) < 0) + { + printf("spi setup failed!\r\n"); + return; + } + else + { + printf("spi setup success!\r\n"); + } + + // epd_cs_set(); + epd_dc_set(); + epd_res_set(); + + pinMode(RES_PIN, OUTPUT); + pinMode(DC_PIN, OUTPUT); + // pinMode(CS_PIN, OUTPUT); + pinMode(BUSY_PIN, INPUT); +} + +void epd_io_deinit(void) +{ + pinMode(RES_PIN, PM_OFF); + pinMode(DC_PIN, PM_OFF); + // pinMode(CS_PIN, PM_OFF); + pinMode(BUSY_PIN, PM_OFF); + wiringPiSPIClose(SPI_CHANNEL); +} + +// 修改SPI数据传输函数 +void epd_write_reg(uint8_t reg) +{ + epd_dc_reset(); + epd_cs_reset(); + + wiringPiSPIDataRW(SPI_CHANNEL, ®, 1); + + epd_cs_set(); + epd_dc_set(); +} + +void epd_write_data(uint8_t data) +{ + epd_cs_reset(); + + wiringPiSPIDataRW(SPI_CHANNEL, &data, 1); + + epd_cs_set(); +} + +void _epd_write_data(uint8_t *data, uint32_t len) +{ + uint8_t *dummy = malloc(len); + memcpy(dummy, data, len); + if(dummy) { + uint32_t chunk_size = 4096; + if(chunk_size == 0 || chunk_size > len) { + chunk_size = len; // 如果块大小为0或大于总长度,则一次性传输 + } + + uint32_t remaining = len; + uint32_t offset = 0; + + while(remaining > 0) { + uint32_t current_chunk = (remaining > chunk_size) ? chunk_size : remaining; + wiringPiSPIDataRW(SPI_CHANNEL, dummy + offset, current_chunk); + offset += current_chunk; + remaining -= current_chunk; + } + + free(dummy); + } +} + +uint8_t epd_wait_busy() +{ + uint32_t timeout = 0; + while (epd_is_busy()) + { + timeout++; + if (timeout > 40000) + { + return 1; + } + epd_delay(1); + } + return 0; +} + +void epd_reset(void) +{ + epd_res_reset(); + epd_delay(50); + epd_res_set(); + epd_delay(50); + _hibernating = 0; +} + +void epd_set_panel(uint8_t type, uint16_t width, uint16_t height) +{ + epd_type = type; + EPD_H = height; + EPD_W = width; + + printf("EPD_H: %d, EPD_W: %d, epd_type: %d\n", EPD_H, EPD_W, epd_type); +} + +uint8_t epd_init(void) +{ + if (_hibernating) + epd_reset(); + + if (epd_wait_busy()) + return 1; + + if (epd_type == EPD370_UC8253) + { + epd_write_reg(0x04); + + if (epd_wait_busy()) + return 1; + + epd_write_reg(0x00); + epd_write_data(0x1F); + epd_write_data(0x0D); + + epd_write_reg(0x50); // VCOM AND DATA INTERVAL SETTING + epd_write_data(0x97); // WBmode:VBDF 17|D7 VBDW 97 VBDB 57 + return 0; + } + + epd_write_reg(0x12); // SWRESET + + epd_delay(100); + + if (epd_wait_busy()) + return 1; + + if (epd_type == EPD213_219 || epd_type == EPD154) + { + epd_write_reg(0x01); // Driver output control + if (epd_type == EPD213_219) + { + epd_write_data(0x27); + epd_write_data(0x01); + epd_write_data(0x01); + } + else + { + epd_write_data(0xC7); + epd_write_data(0x00); + epd_write_data(0x01); + } + + epd_write_reg(0x11); // data entry mode + epd_write_data(0x01); + + if (epd_type == EPD154) + { + epd_write_reg(0x44); // set Ram-X address start/end position + epd_write_data(0x00); + epd_write_data(0x18); + + epd_write_reg(0x45); // set Ram-Y address start/end position + epd_write_data(0xC7); + epd_write_data(0x00); + epd_write_data(0x00); + epd_write_data(0x00); + } + else + { + epd_write_reg(0x44); // set Ram-X address start/end position + epd_write_data(0x00); + epd_write_data(0x0F); // 0x0F-->(15+1)*8=128 + + epd_write_reg(0x45); // set Ram-Y address start/end position + epd_write_data(0x27); // 0x127-->(295+1)=296 + epd_write_data(0x01); + epd_write_data(0x00); + epd_write_data(0x00); + } + + epd_write_reg(0x3C); // BorderWavefrom + epd_write_data(0x05); + + if (epd_type == EPD213_219) + { + epd_write_reg(0x21); // Display update control + epd_write_data(0x00); + epd_write_data(0x80); + } + } + else if (epd_type == EPD420) + { + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x40); + epd_write_data(0x00); + epd_write_reg(0x01); // Set MUX as 300 + epd_write_data(0x2B); + epd_write_data(0x01); + epd_write_data(0x00); + epd_write_reg(0x3C); // BorderWavefrom + epd_write_data(0x01); + epd_write_reg(0x11); // data entry mode + epd_write_data(0x03); // X-mode + epd_address_set(0, 0, EPD_W - 1, EPD_H - 1); + } + + epd_write_reg(0x18); // Read built-in temperature sensor + epd_write_data(0x80); + + epd_setpos(0, 0); + + if (epd_power_on()) + return 1; + + return 0; +} + +uint8_t epd_init_fast(void) +{ + if (epd_init()) + return 1; + + if (epd_type == EPD370_UC8253) + { + epd_write_reg(0xE0); + epd_write_data(0x02); + + epd_write_reg(0xE5); + epd_write_data(0x5F); //0x5F--1.5s + } + else + { + epd_write_reg(0x22); // Load temperature value + epd_write_data(0xB1); + epd_write_reg(0x20); + if (epd_wait_busy()) + return 1; + + epd_write_reg(0x1A); // Write to temperature register + epd_write_data(0x6E); + + epd_write_reg(0x22); // Load temperature value + epd_write_data(0x91); + epd_write_reg(0x20); + if (epd_wait_busy()) + return 1; + } + + return 0; +} + +uint8_t epd_init_partial(void) +{ + if (epd_init()) + return 1; + + if (epd_type == EPD213_219) + { + epd_write_reg(0x32); + epd_cs_reset(); + _epd_write_data((uint8_t *)&lut_partial, sizeof(lut_partial)); + epd_cs_set(); + } + else if (epd_type == EPD420) + { + epd_write_reg(0x3C); // BorderWavefrom + epd_write_data(0x80); + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + } + else if (epd_type == EPD370_UC8253) + { + epd_write_reg(0xE0); + epd_write_data(0x02); + + epd_write_reg(0xE5); + epd_write_data(0x6E); + + epd_write_reg(0x50); + epd_write_data(0xD7); + } + + return 0; +} + +void epd_enter_deepsleepmode(uint8_t mode) +{ + epd_power_off(); + if (epd_type == EPD370_UC8253) + { + epd_write_reg(0X07); // deep sleep + epd_write_data(0xA5); + } + else + { + epd_write_reg(0x10); + epd_write_data(mode); + } + + _hibernating = 1; +} + +uint8_t epd_power_on(void) +{ + if (epd_type == EPD370_UC8253) + { + epd_write_reg(0x04); + return epd_wait_busy(); + } + else if (epd_type == EPD420) + { + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xe0); + } + else + { + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xf8); + } + epd_write_reg(0x20); // Activate Display Update Sequence + + return epd_wait_busy(); +} + +uint8_t epd_power_off(void) +{ + if (epd_type == EPD370_UC8253) + { + epd_write_reg(0x02); + } + else + { + epd_write_reg(0x22); // Display Update Control + epd_write_data(0x83); + epd_write_reg(0x20); // Activate Display Update Sequence + } + + return epd_wait_busy(); +} + +void epd_init_internalTempSensor(void) +{ + if (epd_type != EPD370_UC8253) + { + epd_write_reg(0x18); + epd_write_data(0x80); + + epd_write_reg(0x1A); + epd_write_data(0x7F); + // epd_write_data(0xF0); + } +} + +void epd_update(void) +{ + if (epd_type == EPD370_UC8253) + { + epd_write_reg(0x12); + epd_delay(1); + epd_wait_busy(); + return; + } + else if (epd_type == EPD154) + { + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xF4); + } + else if (epd_type == EPD420) + { + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xF7); + } + else + { + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xF7); + } + epd_write_reg(0x20); // Activate Display Update Sequence + + epd_wait_busy(); +} + +void epd_update_fast(void) +{ + if (epd_type == EPD370_UC8253) + { + epd_update(); + return; + } + else{ + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xC7); + } + epd_write_reg(0x20); // Activate Display Update Sequence + + epd_wait_busy(); +} + +void epd_update_partial(void) +{ + if (epd_type == EPD370_UC8253) + { + epd_update(); + return; + } + else if (epd_type == EPD154) + { + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xFC); + } + else if (epd_type == EPD420) + { + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xFF); + } + else + { + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xCC); + } + epd_write_reg(0x20); // Activate Display Update Sequence + + epd_wait_busy(); +} + +void epd_address_set(uint16_t x_start, uint16_t y_start, uint16_t x_end, uint16_t y_end) +{ + if (epd_type == EPD370_UC8253) + { + epd_write_reg(0x90); // SET_RAM_X_ADDRESS_START_END_POSITION + epd_write_data((x_start >> 3) & 0xFF); + epd_write_data((x_end >> 3) & 0xFF); + epd_write_data(y_start & 0xFF); + epd_write_data((y_start >> 8) & 0xFF); + epd_write_data(y_end & 0xFF); + epd_write_data((y_end >> 8) & 0xFF); + epd_write_data(0x01); + } + else + { + epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION + epd_write_data((x_start >> 3) & 0xFF); + epd_write_data((x_end >> 3) & 0xFF); + + epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION + epd_write_data(y_start & 0xFF); + epd_write_data((y_start >> 8) & 0xFF); + epd_write_data(y_end & 0xFF); + epd_write_data((y_end >> 8) & 0xFF); + } +} + +void epd_setpos(uint16_t x, uint16_t y) +{ + uint8_t _x; + uint16_t _y = 0; + + _x = x / 8; + + if (epd_type == EPD154) + _y = 199 - y; + else if (epd_type == EPD213_219) + _y = 295 - y; + else if (epd_type == EPD420) + _y = y; + else if (epd_type == EPD370_UC8253) + _y = y; + + if (epd_type == EPD370_UC8253) + { + epd_write_reg(0x65); + epd_write_data(_x); + epd_write_data(_y >> 8 & 0x01); + epd_write_data(_y & 0xff); + } + else + { + epd_write_reg(0x4E); // set RAM x address count to 0; + epd_write_data(_x); + epd_write_reg(0x4F); // set RAM y address count to 0x127; + epd_write_data(_y & 0xff); + epd_write_data(_y >> 8 & 0x01); + } +} + +void epd_write_imagedata(uint8_t *Image1, uint32_t length) +{ + epd_cs_reset(); + _epd_write_data(Image1,length); + epd_cs_set(); +} + +void epd_write_imagedata_invert(uint8_t *Image1, uint32_t length) +{ + uint8_t *dummy = malloc(length); + for (uint32_t j = 0; j < length; j++) + { + dummy[j] = ~Image1[j]; + } + + epd_cs_reset(); + _epd_write_data(dummy, length); + epd_cs_set(); + + free(dummy); +} + +void epd_write_imagedata2(uint8_t data, uint32_t length) +{ + uint8_t *dummy = malloc(length); + memset(dummy, data, length); + + epd_cs_reset(); + _epd_write_data(dummy, length); + epd_cs_set(); + + free(dummy); +} + +void epd_display(uint8_t *Image1, uint8_t *Image2) +{ + if (epd_type == EPD370_UC8253) + { + return; + } + + uint32_t Width, Height; + uint32_t length; + Width = EPD_H; + Height = EPD_W_BUFF_SIZE; + length = Width * Height; + + epd_setpos(0, 0); + + epd_write_reg(0x24); + epd_write_imagedata(Image1, length); + + epd_setpos(0, 0); + + epd_write_reg(0x26); + epd_write_imagedata_invert(Image2, length); + + if (epd_type == EPD420) + { + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + } + + epd_update(); +} + +void epd_displayBW(uint8_t *Image) +{ + uint32_t Width, Height; + + Width = EPD_H; + Height = EPD_W_BUFF_SIZE; + uint32_t length = Width * Height; + + if (epd_type == EPD370_UC8253) + { + // epd_address_set(0, 0, EPD_W - 1, EPD_H - 1); + + epd_write_reg(0x10); + epd_write_imagedata(old_data, length); + + epd_write_reg(0x13); + epd_write_imagedata(Image, length); + memcpy(old_data, Image, length); + + epd_update(); + return; + } + + epd_setpos(0, 0); + epd_write_reg(0x26); + epd_write_imagedata(Image, length); + + epd_setpos(0, 0); + epd_write_reg(0x24); + epd_write_imagedata(Image, length); + + epd_update(); +} + +void epd_displayBW_fast(uint8_t *Image) +{ + uint32_t Width, Height; + + Width = EPD_H; + Height = EPD_W_BUFF_SIZE; + uint32_t length = Width * Height; + + if (epd_type == EPD370_UC8253) + { + // epd_address_set(0, 0, EPD_W - 1, EPD_H - 1); + + epd_write_reg(0x10); + epd_write_imagedata(old_data, length); + + epd_write_reg(0x13); + epd_write_imagedata(Image, length); + memcpy(old_data, Image, length); + + epd_update(); + return; + } + + epd_setpos(0, 0); + epd_write_reg(0x26); + epd_write_imagedata(Image, length); + + epd_setpos(0, 0); + epd_write_reg(0x24); + epd_write_imagedata(Image, length); + + epd_update_fast(); +} + +void epd_displayBW_partial(uint8_t *Image) +{ + + if (epd_type == EPD370_UC8253) + { + epd_displayBW(Image); + return; + } + + uint32_t Width, Height; + + Width = EPD_H; + Height = EPD_W_BUFF_SIZE; + + epd_setpos(0, 0); + epd_write_reg(0x24); + epd_write_imagedata(Image, Width * Height); + + epd_update_partial(); + + epd_setpos(0, 0); + epd_write_reg(0x26); + epd_write_imagedata(Image, Width * Height); +} + +void epd_displayRED(uint8_t *Image) +{ + uint32_t Width, Height; + + Width = EPD_H; + Height = EPD_W_BUFF_SIZE; + + epd_setpos(0, 0); + + epd_write_reg(0x26); + epd_write_imagedata(Image, Width * Height); + + if (epd_type == EPD420) + { + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + } + + epd_update(); +} + +void epd_displayRED_invert(uint8_t *Image) +{ + uint32_t Width, Height; + + Width = EPD_H; + Height = EPD_W_BUFF_SIZE; + + epd_setpos(0, 0); + + epd_write_reg(0x26); + epd_write_imagedata_invert(Image, Width * Height); + + if (epd_type == EPD420) + { + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + } + + epd_update(); +} + +void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color) +{ + EPD_Paint.Image = 0x00; + EPD_Paint.Image = image; + + EPD_Paint.WidthMemory = Width; + EPD_Paint.HeightMemory = Height; + EPD_Paint.Color = Color; + EPD_Paint.WidthByte = (Width % 8 == 0) ? (Width / 8) : (Width / 8 + 1); + EPD_Paint.HeightByte = Height; + EPD_Paint.Rotate = Rotate; + if (Rotate == EPD_ROTATE_0 || Rotate == EPD_ROTATE_180) + { + + EPD_Paint.Width = Height; + EPD_Paint.Height = Width; + } + else + { + EPD_Paint.Width = Width; + EPD_Paint.Height = Height; + } +} + +void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) +{ + uint16_t X, Y; + uint32_t Addr; + uint8_t Rdata; + switch (EPD_Paint.Rotate) + { + case 0: + + X = EPD_Paint.WidthMemory - Ypoint - 1; + Y = Xpoint; + break; + case 90: + X = EPD_Paint.WidthMemory - Xpoint - 1; + Y = EPD_Paint.HeightMemory - Ypoint - 1; + break; + case 180: + X = Ypoint; + Y = EPD_Paint.HeightMemory - Xpoint - 1; + break; + case 270: + X = Xpoint; + Y = Ypoint; + break; + default: + return; + } + Addr = X / 8 + Y * EPD_Paint.WidthByte; + Rdata = EPD_Paint.Image[Addr]; + if (Color == EPD_COLOR_BLACK) + { + EPD_Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8)); + } + else + EPD_Paint.Image[Addr] = Rdata | (0x80 >> (X % 8)); +} + +void epd_paint_clear(uint16_t color) +{ + uint16_t X, Y; + uint32_t Addr; + + for (Y = 0; Y < EPD_Paint.HeightByte; Y++) + { + for (X = 0; X < EPD_Paint.WidthByte; X++) + { // 8 pixel = 1 byte + Addr = X + Y * EPD_Paint.WidthByte; + EPD_Paint.Image[Addr] = color; + } + } +} + +void epd_paint_selectimage(uint8_t *image) +{ + EPD_Paint.Image = image; +} + +void epd_paint_drawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color) +{ + epd_paint_setpixel(Xpoint - 1, Ypoint - 1, Color); +} + +void epd_paint_drawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color) +{ + uint16_t Xpoint, Ypoint; + int32_t dx, dy; + int32_t XAddway, YAddway; + int32_t Esp; + char Dotted_Len; + Xpoint = Xstart; + Ypoint = Ystart; + dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend; + dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend; + + XAddway = Xstart < Xend ? 1 : -1; + YAddway = Ystart < Yend ? 1 : -1; + + Esp = dx + dy; + Dotted_Len = 0; + + for (;;) + { + Dotted_Len++; + epd_paint_drawPoint(Xpoint, Ypoint, Color); + if (2 * Esp >= dy) + { + if (Xpoint == Xend) + break; + Esp += dy; + Xpoint += XAddway; + } + if (2 * Esp <= dx) + { + if (Ypoint == Yend) + break; + Esp += dx; + Ypoint += YAddway; + } + } +} + +void epd_paint_drawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, uint8_t mode) +{ + uint16_t i; + if (mode) + { + for (i = Ystart; i < Yend; i++) + { + epd_paint_drawLine(Xstart, i, Xend, i, Color); + } + } + else + { + epd_paint_drawLine(Xstart, Ystart, Xend, Ystart, Color); + epd_paint_drawLine(Xstart, Ystart, Xstart, Yend, Color); + epd_paint_drawLine(Xend, Yend, Xend, Ystart, Color); + epd_paint_drawLine(Xend, Yend, Xstart, Yend, Color); + } +} + +void epd_paint_drawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, uint8_t mode) +{ + int16_t f = 1 - Radius; + int16_t ddF_x = 1; + int16_t ddF_y = -2 * Radius; + int16_t x = 0; + int16_t y = Radius; + + if (mode) + { + // 实心圆 - 绘制填充线 + epd_paint_drawLine(X_Center - Radius, Y_Center, X_Center + Radius, Y_Center, Color); + } + else + { + // 空心圆 - 绘制8个对称点 + epd_paint_drawPoint(X_Center, Y_Center + Radius, Color); + epd_paint_drawPoint(X_Center, Y_Center - Radius, Color); + epd_paint_drawPoint(X_Center + Radius, Y_Center, Color); + epd_paint_drawPoint(X_Center - Radius, Y_Center, Color); + } + + while (x < y) + { + if (f >= 0) + { + y--; + ddF_y += 2; + f += ddF_y; + } + x++; + ddF_x += 2; + f += ddF_x; + + if (mode) + { + // 实心圆 - 绘制填充线 + epd_paint_drawLine(X_Center - x, Y_Center + y, X_Center + x, Y_Center + y, Color); + epd_paint_drawLine(X_Center - x, Y_Center - y, X_Center + x, Y_Center - y, Color); + epd_paint_drawLine(X_Center - y, Y_Center + x, X_Center + y, Y_Center + x, Color); + epd_paint_drawLine(X_Center - y, Y_Center - x, X_Center + y, Y_Center - x, Color); + } + else + { + // 空心圆 - 绘制8个对称点 + epd_paint_drawPoint(X_Center + x, Y_Center + y, Color); + epd_paint_drawPoint(X_Center - x, Y_Center + y, Color); + epd_paint_drawPoint(X_Center + x, Y_Center - y, Color); + epd_paint_drawPoint(X_Center - x, Y_Center - y, Color); + epd_paint_drawPoint(X_Center + y, Y_Center + x, Color); + epd_paint_drawPoint(X_Center - y, Y_Center + x, Color); + epd_paint_drawPoint(X_Center + y, Y_Center - x, Color); + epd_paint_drawPoint(X_Center - y, Y_Center - x, Color); + } + } +} + +void epd_paint_showChar(uint16_t x, uint16_t y, uint16_t chr, uint16_t size1, uint16_t color) +{ + uint16_t i, m, temp, size2, chr1; + uint16_t x0, y0; + x += 1, y += 1, x0 = x, y0 = y; + + if (x >= EPD_H || y >= EPD_W) + return; + if (x + size1 > EPD_H || y + 8 > EPD_W) + return; + + if (size1 == 8) + size2 = 6; + else + size2 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * (size1 / 2); + + chr1 = chr - ' '; + for (i = 0; i < size2; i++) + { + if (size1 == 8) + { + temp = asc2_0806[chr1][i]; + } + else if (size1 == 12) + { + temp = asc2_1206[chr1][i]; + } + else if (size1 == 16) + { + temp = asc2_1608[chr1][i]; + } + else if (size1 == 24) + { + temp = asc2_2412[chr1][i]; + } + else + return; + + for (m = 0; m < 8; m++) + { + if (y + m >= EPD_W) + break; + if (temp & 0x01) + epd_paint_drawPoint(x, y + m, color); + else + epd_paint_drawPoint(x, y + m, !color); + temp >>= 1; + } + x++; + if ((size1 != 8) && ((x - x0) == size1 / 2)) + { + x = x0; + y0 = y0 + 8; + } + y = y0; + } +} + +void epd_paint_showString(uint16_t x, uint16_t y, uint8_t *chr, uint16_t size1, uint16_t color) +{ + while (*chr != '\0') + { + epd_paint_showChar(x, y, *chr, size1, color); + chr++; + if (size1 == 8) + { + x += 6; + if (x > EPD_H - 6) + break; + } + else + { + x += size1 / 2; + if (x > EPD_H - size1 / 2) + break; + } + } +} + +// m^n +static uint32_t _Pow(uint16_t m, uint16_t n) +{ + uint32_t result = 1; + while (n--) + { + result *= m; + } + return result; +} + +void epd_paint_showNum(uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint16_t size1, uint16_t color) +{ + uint8_t t, temp, m = 0; + if (size1 == 8) + m = 2; + for (t = 0; t < len; t++) + { + temp = (num / _Pow(10, len - t - 1)) % 10; + if (temp == 0) + { + epd_paint_showChar(x + (size1 / 2 + m) * t, y, '0', size1, color); + } + else + { + epd_paint_showChar(x + (size1 / 2 + m) * t, y, temp + '0', size1, color); + } + } +} + +void epd_paint_showChinese(uint16_t x, uint16_t y, uint16_t num, uint16_t size1, uint16_t color) +{ + uint16_t m, temp; + uint16_t x0, y0; + uint16_t i, size3 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * size1; + x += 1, y += 1, x0 = x, y0 = y; + for (i = 0; i < size3; i++) + { + if (size1 == 16) + { + temp = Hzk1[num][i]; + } // 16*16 + else if (size1 == 24) + { + temp = Hzk2[num][i]; + } // 24*24 + else if (size1 == 32) + { + temp = Hzk3[num][i]; + } // 32*32 + else if (size1 == 64) + { + temp = Hzk4[num][i]; + } // 64*64 + else + return; + for (m = 0; m < 8; m++) + { + if (temp & 0x01) + epd_paint_drawPoint(x, y, color); + else + epd_paint_drawPoint(x, y, !color); + temp >>= 1; + y++; + } + x++; + if ((x - x0) == size1) + { + x = x0; + y0 = y0 + 8; + } + y = y0; + } +} + +void epd_paint_showPicture(uint16_t x, uint16_t y, uint16_t sizex, uint16_t sizey, const uint8_t BMP[], uint16_t Color) +{ + uint16_t j = 0; + uint16_t i, n = 0, temp = 0, m = 0; + uint16_t x0 = 0, y0 = 0; + x += 1, y += 1, x0 = x, y0 = y; + sizey = sizey / 8 + ((sizey % 8) ? 1 : 0); + for (n = 0; n < sizey; n++) + { + for (i = 0; i < sizex; i++) + { + temp = BMP[j]; + j++; + for (m = 0; m < 8; m++) + { + if (temp & 0x01) + epd_paint_drawPoint(x, y, !Color); + else + epd_paint_drawPoint(x, y, Color); + temp >>= 1; + y++; + } + x++; + if ((x - x0) == sizex) + { + x = x0; + y0 = y0 + 8; + } + y = y0; + } + } +} diff --git a/Example/EpaperModuleTest_APM32F103/Epaper/epaper.h b/Example/EpaperModuleTest_RaspberryPi/epaper/epaper.h similarity index 70% rename from Example/EpaperModuleTest_APM32F103/Epaper/epaper.h rename to Example/EpaperModuleTest_RaspberryPi/epaper/epaper.h index f51fd3a..a00fa10 100644 --- a/Example/EpaperModuleTest_APM32F103/Epaper/epaper.h +++ b/Example/EpaperModuleTest_RaspberryPi/epaper/epaper.h @@ -1,41 +1,41 @@ -#ifndef __EPAPER_H -#define __EPAPER_H +#ifndef EPAPER_H +#define EPAPER_H #ifdef __cplusplus extern "C" { #endif -#include "apm32f10x.h" +#include +#include +#include +#include -//#define EPD_42 -//#define EPD_29 -//#define EPD_213 -//#define EPD_154 + ////#define EPD_29 + // #define EPD_213 + // + // #if (!defined EPD_29) && (!defined EPD_213) + // #error EPD Type Undefine + // #endif + // + // #ifdef EPD_29 + // #define EPD_W 128 + // #define EPD_H 296 + // #endif + // + // #ifdef EPD_213 + // #define EPD_W 122 + // #define EPD_H 250 + // #endif -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) -#error EPD Type Undefine -#endif +#define EPD213_219 0 +#define EPD154 1 +#define EPD420 2 +#define EPD370_UC8253 3 -#ifdef EPD_29 -#define EPD_W 128 -#define EPD_H 296 -#endif - -#ifdef EPD_213 -#define EPD_W 122 -#define EPD_H 250 -#endif - -#ifdef EPD_154 -#define EPD_W 200 -#define EPD_H 200 -#endif - -#ifdef EPD_42 -#define EPD_W 400 -#define EPD_H 300 -#endif + extern uint16_t EPD_H; + extern uint16_t EPD_W; + extern uint8_t epd_type; #define EPD_OK 0 #define EPD_ERROR 1 @@ -58,6 +58,7 @@ extern "C" #define EPD_DEEPSLEEP_MODE2 (0x03) #define EPD_W_BUFF_SIZE ((EPD_W % 8 == 0) ? (EPD_W / 8) : (EPD_W / 8 + 1)) + typedef struct { uint8_t *Image; @@ -73,21 +74,29 @@ extern "C" extern EPD_PAINT EPD_Paint; void epd_io_init(void); + void epd_io_deinit(void); + void epd_write_reg(uint8_t reg); + void epd_write_imagedata(uint8_t *Image1, uint32_t length); + void epd_set_panel(uint8_t type, uint16_t width, uint16_t height); uint8_t epd_init(void); + uint8_t epd_init_fast(void); uint8_t epd_init_partial(void); void epd_enter_deepsleepmode(uint8_t mode); uint8_t epd_power_on(void); - uint8_t epd_power_off(void); + uint8_t epd_power_off(void); void epd_init_internalTempSensor(void); void epd_update(void); + void epd_update_fast(void); void epd_update_partial(void); - void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); + void epd_address_set(uint16_t x_start, uint16_t y_start, uint16_t x_end, uint16_t y_end); void epd_setpos(uint16_t x, uint16_t y); void epd_display(uint8_t *Image1, uint8_t *Image2); void epd_displayBW(uint8_t *Image); + void epd_displayBW_fast(uint8_t *Image); void epd_displayBW_partial(uint8_t *Image); void epd_displayRED(uint8_t *Image); - + void epd_displayRED_invert(uint8_t *Image); + void epd_paint_newimage(uint8_t *image, uint16_t Width, uint16_t Height, uint16_t Rotate, uint16_t Color); void epd_paint_setpixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color); void epd_paint_selectimage(uint8_t *image); diff --git a/Example/EpaperModuleTest_CH32V103/User/Epaper/epdfont.h b/Example/EpaperModuleTest_RaspberryPi/epaper/epdfont.h similarity index 99% rename from Example/EpaperModuleTest_CH32V103/User/Epaper/epdfont.h rename to Example/EpaperModuleTest_RaspberryPi/epaper/epdfont.h index 3d4913b..fba64d3 100644 --- a/Example/EpaperModuleTest_CH32V103/User/Epaper/epdfont.h +++ b/Example/EpaperModuleTest_RaspberryPi/epaper/epdfont.h @@ -1,5 +1,5 @@ -#ifndef __EPDFONT_H -#define __EPDFONT_H +#ifndef EPDFONT_H +#define EPDFONT_H #ifdef __cplusplus extern "C" { diff --git a/Example/EpaperModuleTest_RaspberryPi/main.c b/Example/EpaperModuleTest_RaspberryPi/main.c new file mode 100644 index 0000000..c6bf41c --- /dev/null +++ b/Example/EpaperModuleTest_RaspberryPi/main.c @@ -0,0 +1,538 @@ +#include "epaper.h" +#include "bmp.h" +#include +#include + +void Handler(int signo) +{ + // System Exit + printf("\r\nHandler:exit %d\r\n", signo); + epd_io_deinit(); + exit(0); +} + +struct +{ + uint8_t image_bw[50 * 300]; + uint8_t image_red[50 * 300]; +} display_buf; + +void init_154bw(void) +{ + uint8_t text[20]; + + epd_set_panel(EPD154, 200, 200); + + epd_io_init(); + + epd_paint_newimage(display_buf.image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + epd_paint_selectimage(display_buf.image_bw); + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); + sprintf((char *)&text, "Full Refresh"); + epd_paint_showString(10, 10, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_init(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(2000); + + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); + sprintf((char *)&text, "Fast Refresh"); + epd_paint_showString(10, 10, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_init_fast(); + epd_displayBW_fast(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(2000); + + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showString(10, 0, (uint8_t *)&"1.54 Inch", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 23, (uint8_t *)&"Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 48, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); + epd_paint_showString(10, 60, (uint8_t *)&"with 200 x 200 resolution", EPD_FONT_SIZE12x6, EPD_COLOR_BLACK); + epd_paint_showPicture((EPD_H - 200) / 2,130,200,64,gImage_5,EPD_COLOR_WHITE); + sprintf((char *)&text, "Partial Mode"); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_init_partial(); + epd_displayBW_partial(display_buf.image_bw); + + delay(1000); + for (uint32_t i = 123; i < 8 * 123; i += 123) + { + sprintf((char *)&text, ">> Num=%d ", i); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_displayBW_partial(display_buf.image_bw); + + delay(100); + } + + sprintf((char *)&text, ">> Hello World."); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_displayBW_partial(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(1000); + + epd_init(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); +} + +void init_213bw(void) +{ + uint8_t text[20]; + + epd_set_panel(EPD213_219, 122, 250); + + epd_io_init(); + + epd_paint_newimage(display_buf.image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + epd_paint_selectimage(display_buf.image_bw); + + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + sprintf((char *)&text, "Full Refresh"); + epd_paint_showString(10, 10, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_init(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(2000); + + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + sprintf((char *)&text, "Fast Refresh"); + epd_paint_showString(10, 10, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_init_fast(); + epd_displayBW_fast(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(2000); + + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_drawRectangle(10, EPD_W - 20, EPD_H - 10, EPD_W - 6, EPD_COLOR_BLACK, 1); + sprintf((char *)&text, "Partial Refresh"); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_init_partial(); + epd_displayBW_partial(display_buf.image_bw); + + delay(1000); + for (uint32_t i = 123; i < 8 * 123; i += 123) + { + sprintf((char *)&text, ">> Num=%d ", i); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_displayBW_partial(display_buf.image_bw); + + delay(100); + } + + sprintf((char *)&text, ">> Hello World."); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_displayBW_partial(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(1000); + + epd_init(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); +} + +void init_213bwr(void) +{ + uint8_t text[20]; + + epd_set_panel(EPD213_219, 122, 250); + + epd_io_init(); + + epd_paint_newimage(display_buf.image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + + epd_paint_selectimage(display_buf.image_bw); + epd_paint_clear(EPD_COLOR_WHITE); + + epd_paint_selectimage(display_buf.image_red); + epd_paint_clear(EPD_COLOR_WHITE); + + epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + + epd_init(); + epd_display(display_buf.image_bw, display_buf.image_red); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(3000); + + epd_paint_selectimage(display_buf.image_bw); + epd_paint_clear(EPD_COLOR_WHITE); + + epd_paint_showString(10, 0, (uint8_t *)&"2.13 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 250 x 122 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + + epd_paint_selectimage(display_buf.image_red); + epd_paint_clear(EPD_COLOR_WHITE); + + sprintf((char *)&text, ">> Hello World."); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); + epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_RED, 1); + + epd_init(); + epd_display(display_buf.image_bw, display_buf.image_red); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); +} + +void init_290bw(void) +{ + uint8_t text[20]; + + epd_set_panel(EPD213_219, 128, 296); + + epd_io_init(); + + epd_paint_newimage(display_buf.image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + epd_paint_selectimage(display_buf.image_bw); + + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + sprintf((char *)&text, "Full Refresh"); + epd_paint_showString(10, 10, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_init(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(2000); + + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + sprintf((char *)&text, "Fast Refresh"); + epd_paint_showString(10, 10, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_init_fast(); + epd_displayBW_fast(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(2000); + + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_drawRectangle(10, EPD_W - 20, EPD_H - 10, EPD_W - 6, EPD_COLOR_BLACK, 1); + sprintf((char *)&text, "Partial Refresh"); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_init_partial(); + epd_displayBW_partial(display_buf.image_bw); + + delay(1000); + for (uint32_t i = 123; i < 8 * 123; i += 123) + { + sprintf((char *)&text, ">> Num=%d ", i); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_displayBW_partial(display_buf.image_bw); + + delay(100); + } + + sprintf((char *)&text, ">> Hello World."); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_displayBW_partial(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(1000); + + epd_init(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); +} + +void init_290bwr(void) +{ + uint8_t text[20]; + + epd_set_panel(EPD213_219, 128, 296); + + epd_io_init(); + + epd_paint_newimage(display_buf.image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + + epd_paint_selectimage(display_buf.image_bw); + epd_paint_clear(EPD_COLOR_WHITE); + + epd_paint_selectimage(display_buf.image_red); + epd_paint_clear(EPD_COLOR_WHITE); + + epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + + epd_init(); + epd_display(display_buf.image_bw, display_buf.image_red); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(3000); + + epd_paint_selectimage(display_buf.image_bw); + epd_paint_clear(EPD_COLOR_WHITE); + + epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + + epd_paint_selectimage(display_buf.image_red); + epd_paint_clear(EPD_COLOR_WHITE); + + sprintf((char *)&text, ">> Hello World."); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); + epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_RED, 1); + + epd_init(); + epd_display(display_buf.image_bw, display_buf.image_red); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); +} + +void init_370bw(void) +{ + uint8_t text[20]; + + epd_set_panel(EPD370_UC8253, 240, 416); + + epd_io_init(); + + epd_paint_newimage(display_buf.image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + + epd_paint_selectimage(display_buf.image_bw); + epd_paint_clear(EPD_COLOR_WHITE); + + // Full refresh + epd_paint_showString(10, 0, (uint8_t *)&"Full Refresh", + EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_drawCircle(300, 100, 25, EPD_COLOR_BLACK, 0); + epd_paint_drawCircle(300, 150, 25, EPD_COLOR_BLACK, 1); + + epd_paint_showPicture(10, 50, 250, 122, gImage_4, EPD_COLOR_BLACK); + + epd_init(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(3000); + + // Fast refresh + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showString(10, 0, (uint8_t *)&"Fast Refresh", + EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_drawCircle(300, 100, 25, EPD_COLOR_BLACK, 0); + epd_paint_drawCircle(300, 150, 25, EPD_COLOR_BLACK, 1); + + epd_paint_showPicture(10, 50, 250, 122, gImage_4, EPD_COLOR_BLACK); + + epd_init_fast(); + epd_displayBW_fast(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + delay(3000); + + // Partial refresh + epd_paint_clear(EPD_COLOR_WHITE); + + epd_init_fast(); + epd_displayBW_fast(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + epd_paint_showString(10, 0, (uint8_t *)&"Partial Refresh", + EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + for (uint32_t i = 123; i < 8 * 123; i += 123) + { + sprintf((char *)&text, ">> Num=%d ", i); + epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_init_partial(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + delay(100); + } + + delay(3000); + + // Full refresh + epd_paint_clear(EPD_COLOR_WHITE); + + epd_paint_showString(10, 0, (uint8_t *)&"3.7 Inch Epaper Module", + EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 48, (uint8_t *)&"with 240 x 416 resolution", + EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", + EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + + sprintf((char *)&text, ">> Hello World."); + epd_paint_showString(10, 66, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_paint_drawRectangle(10, 93, EPD_H - 10, 102, EPD_COLOR_BLACK, 1); + epd_paint_showString(10, 104, (uint8_t *)&"weactstudio.taobao.com", + EPD_FONT_SIZE8x6, EPD_COLOR_BLACK); + epd_paint_showString(10, 114, (uint8_t *)&"weactstudio.aliexpress.com", + EPD_FONT_SIZE8x6, EPD_COLOR_BLACK); + epd_init(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); +} + +void init_420bw(void) +{ + uint8_t text[20]; + + epd_set_panel(EPD420, 400, 300); + + epd_io_init(); + + epd_paint_newimage(display_buf.image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + epd_paint_selectimage(display_buf.image_bw); + + // Fast Refresh + epd_paint_clear(EPD_COLOR_WHITE); + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", + EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 48, (uint8_t *)&"with 400 x 300 resolution", + EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", + EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + sprintf((char *)&text, "Fast Refresh"); + epd_paint_showString(10, 66, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_paint_drawRectangle(10, 93, EPD_H - 10, 102, EPD_COLOR_BLACK, 1); + epd_paint_showString(10, 104, (uint8_t *)&"weactstudio.taobao.com", + EPD_FONT_SIZE8x6, EPD_COLOR_BLACK); + epd_paint_showString(10, 114, (uint8_t *)&"weactstudio.aliexpress.com", + EPD_FONT_SIZE8x6, EPD_COLOR_BLACK); + + epd_init_fast(); + epd_displayBW_fast(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + delay(1000); + + // Partial Refresh + sprintf((char *)&text, "Partial Refresh"); + epd_paint_showString(10, 66, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_init_partial(); + epd_displayBW_partial(display_buf.image_bw); + delay(1000); + for (uint32_t i = 123; i < 8 * 123; i += 123) + { + sprintf((char *)&text, ">> Num=%d ", i); + epd_paint_showString(10, 66, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + + epd_displayBW_partial(display_buf.image_bw); + + delay(100); + } + + sprintf((char *)&text, ">> Hello World."); + epd_paint_showString(10, 66, text, EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_displayBW_partial(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); + + // Full Refresh + epd_paint_drawCircle(300, 150 + 122 / 3, 25, EPD_COLOR_BLACK, 0); + epd_paint_drawCircle(300, 200 + 122 / 3, 25, EPD_COLOR_BLACK, 1); + + epd_paint_showPicture(10, 150, 250, 122, gImage_4, EPD_COLOR_BLACK); + + epd_init(); + epd_displayBW(display_buf.image_bw); + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); +} + +void init_420bwr(void) +{ + uint8_t text[20]; + + epd_set_panel(EPD420, 400, 300); + + epd_io_init(); + + epd_init(); + + epd_paint_newimage(display_buf.image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + + epd_paint_selectimage(display_buf.image_bw); + epd_paint_clear(EPD_COLOR_WHITE); + + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", + EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 48, (uint8_t *)&"with 400 x 300 resolution", + EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", + EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + + epd_paint_drawCircle(300, 150 + 122 / 3, 25, EPD_COLOR_BLACK, 0); + epd_paint_drawCircle(300, 200 + 122 / 3, 25, EPD_COLOR_BLACK, 1); + + epd_paint_showPicture(10, 150, 250, 122, gImage_4, EPD_COLOR_BLACK); + + epd_paint_selectimage(display_buf.image_red); + epd_paint_clear(EPD_COLOR_WHITE); + + sprintf((char *)&text, ">> Hello World."); + epd_paint_showString(10, 66, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); + + epd_paint_drawRectangle(10, 93, EPD_H - 10, 102, EPD_COLOR_RED, 1); + epd_paint_showString(10, 104, (uint8_t *)&"weactstudio.taobao.com", + EPD_FONT_SIZE8x6, EPD_COLOR_RED); + epd_paint_showString(10, 114, (uint8_t *)&"weactstudio.aliexpress.com", + EPD_FONT_SIZE8x6, EPD_COLOR_RED); + + epd_paint_showPicture(10, 150, 250, 122, gImage_4, EPD_COLOR_WHITE); + + epd_display(display_buf.image_bw, display_buf.image_red); + + epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); +} + +int main(void) +{ + // Exception handling:ctrl + c + signal(SIGINT, Handler); + + printf("Hello World!\n"); + printf("Hello WeAct Studio!\n"); + +#if defined(EPD154_BW) + init_154bw(); +#elif defined(EPD213_BW) + init_213bw(); +#elif defined(EPD213_BWR) + init_213bwr(); +#elif defined(EPD290_BW) + init_290bw(); +#elif defined(EPD290_BWR) + init_290bwr(); +#elif defined(EPD370_BW) + init_370bw(); +#elif defined(EPD420_BW) + init_420bw(); +#elif defined(EPD420_BWR) + init_420bwr(); +#else +#error "EPD_TYPE is not defined, example: make EPD_TYPE=EPD420_BWR " +#endif + + printf("epd io deinit.\n"); + epd_io_deinit(); + return 0; +} \ No newline at end of file diff --git a/Hardware/WeAct-EpaperModule-3.7 Board 3D.step b/Hardware/WeAct-EpaperModule-3.7 Board 3D.step new file mode 100644 index 0000000..34b168c --- /dev/null +++ b/Hardware/WeAct-EpaperModule-3.7 Board 3D.step @@ -0,0 +1,76700 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('Open CASCADE Model'),'2;1'); +FILE_NAME('Open CASCADE Shape Model','2025-07-30T11:18:04',('Author'),( + 'Open CASCADE'),'Open CASCADE STEP processor 7.5','Open CASCADE 7.5' + ,'Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('international standard', + 'automotive_design',2000,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('PCB','PCB','',(#8)); +#8 = PRODUCT_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = SHAPE_REPRESENTATION('',(#11,#15,#19,#23,#27,#31,#35,#39,#43,#47, + #51,#55,#59,#63,#67,#71,#75,#79,#83,#87,#91,#95,#99,#103,#107,#111, + #115,#119,#123,#127,#131,#135,#139,#143,#147,#151,#155,#159,#163), + #167); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = AXIS2_PLACEMENT_3D('',#16,#17,#18); +#16 = CARTESIAN_POINT('',(0.,0.,0.)); +#17 = DIRECTION('',(0.,0.,1.)); +#18 = DIRECTION('',(1.,0.,-0.)); +#19 = AXIS2_PLACEMENT_3D('',#20,#21,#22); +#20 = CARTESIAN_POINT('',(0.,0.,0.)); +#21 = DIRECTION('',(0.,0.,1.)); +#22 = DIRECTION('',(1.,0.,-0.)); +#23 = AXIS2_PLACEMENT_3D('',#24,#25,#26); +#24 = CARTESIAN_POINT('',(0.,0.,0.)); +#25 = DIRECTION('',(0.,0.,1.)); +#26 = DIRECTION('',(1.,0.,-0.)); +#27 = AXIS2_PLACEMENT_3D('',#28,#29,#30); +#28 = CARTESIAN_POINT('',(0.,0.,0.)); +#29 = DIRECTION('',(0.,0.,1.)); +#30 = DIRECTION('',(1.,0.,-0.)); +#31 = AXIS2_PLACEMENT_3D('',#32,#33,#34); +#32 = CARTESIAN_POINT('',(0.,0.,0.)); +#33 = DIRECTION('',(0.,0.,1.)); +#34 = DIRECTION('',(1.,0.,-0.)); +#35 = AXIS2_PLACEMENT_3D('',#36,#37,#38); +#36 = CARTESIAN_POINT('',(0.,0.,0.)); +#37 = DIRECTION('',(0.,0.,1.)); +#38 = DIRECTION('',(1.,0.,-0.)); +#39 = AXIS2_PLACEMENT_3D('',#40,#41,#42); +#40 = CARTESIAN_POINT('',(0.,0.,0.)); +#41 = DIRECTION('',(0.,0.,1.)); +#42 = DIRECTION('',(1.,0.,-0.)); +#43 = AXIS2_PLACEMENT_3D('',#44,#45,#46); +#44 = CARTESIAN_POINT('',(0.,0.,0.)); +#45 = DIRECTION('',(0.,0.,1.)); +#46 = DIRECTION('',(1.,0.,-0.)); +#47 = AXIS2_PLACEMENT_3D('',#48,#49,#50); +#48 = CARTESIAN_POINT('',(0.,0.,0.)); +#49 = DIRECTION('',(0.,0.,1.)); +#50 = DIRECTION('',(1.,0.,-0.)); +#51 = AXIS2_PLACEMENT_3D('',#52,#53,#54); +#52 = CARTESIAN_POINT('',(0.,0.,0.)); +#53 = DIRECTION('',(0.,0.,1.)); +#54 = DIRECTION('',(1.,0.,-0.)); +#55 = AXIS2_PLACEMENT_3D('',#56,#57,#58); +#56 = CARTESIAN_POINT('',(0.,0.,0.)); +#57 = DIRECTION('',(0.,0.,1.)); +#58 = DIRECTION('',(1.,0.,-0.)); +#59 = AXIS2_PLACEMENT_3D('',#60,#61,#62); +#60 = CARTESIAN_POINT('',(0.,0.,0.)); +#61 = DIRECTION('',(0.,0.,1.)); +#62 = DIRECTION('',(1.,0.,-0.)); +#63 = AXIS2_PLACEMENT_3D('',#64,#65,#66); +#64 = CARTESIAN_POINT('',(0.,0.,0.)); +#65 = DIRECTION('',(0.,0.,1.)); +#66 = DIRECTION('',(1.,0.,-0.)); +#67 = AXIS2_PLACEMENT_3D('',#68,#69,#70); +#68 = CARTESIAN_POINT('',(0.,0.,0.)); +#69 = DIRECTION('',(0.,0.,1.)); +#70 = DIRECTION('',(1.,0.,-0.)); +#71 = AXIS2_PLACEMENT_3D('',#72,#73,#74); +#72 = CARTESIAN_POINT('',(0.,0.,0.)); +#73 = DIRECTION('',(0.,0.,1.)); +#74 = DIRECTION('',(1.,0.,-0.)); +#75 = AXIS2_PLACEMENT_3D('',#76,#77,#78); +#76 = CARTESIAN_POINT('',(0.,0.,0.)); +#77 = DIRECTION('',(0.,0.,1.)); +#78 = DIRECTION('',(1.,0.,-0.)); +#79 = AXIS2_PLACEMENT_3D('',#80,#81,#82); +#80 = CARTESIAN_POINT('',(0.,0.,0.)); +#81 = DIRECTION('',(0.,0.,1.)); +#82 = DIRECTION('',(1.,0.,-0.)); +#83 = AXIS2_PLACEMENT_3D('',#84,#85,#86); +#84 = CARTESIAN_POINT('',(0.,0.,0.)); +#85 = DIRECTION('',(0.,0.,1.)); +#86 = DIRECTION('',(1.,0.,-0.)); +#87 = AXIS2_PLACEMENT_3D('',#88,#89,#90); +#88 = CARTESIAN_POINT('',(0.,0.,0.)); +#89 = DIRECTION('',(0.,0.,1.)); +#90 = DIRECTION('',(1.,0.,-0.)); +#91 = AXIS2_PLACEMENT_3D('',#92,#93,#94); +#92 = CARTESIAN_POINT('',(0.,0.,0.)); +#93 = DIRECTION('',(0.,0.,1.)); +#94 = DIRECTION('',(1.,0.,-0.)); +#95 = AXIS2_PLACEMENT_3D('',#96,#97,#98); +#96 = CARTESIAN_POINT('',(0.,0.,0.)); +#97 = DIRECTION('',(0.,0.,1.)); +#98 = DIRECTION('',(1.,0.,-0.)); +#99 = AXIS2_PLACEMENT_3D('',#100,#101,#102); +#100 = CARTESIAN_POINT('',(0.,0.,0.)); +#101 = DIRECTION('',(0.,0.,1.)); +#102 = DIRECTION('',(1.,0.,-0.)); +#103 = AXIS2_PLACEMENT_3D('',#104,#105,#106); +#104 = CARTESIAN_POINT('',(0.,0.,0.)); +#105 = DIRECTION('',(0.,0.,1.)); +#106 = DIRECTION('',(1.,0.,-0.)); +#107 = AXIS2_PLACEMENT_3D('',#108,#109,#110); +#108 = CARTESIAN_POINT('',(0.,0.,0.)); +#109 = DIRECTION('',(0.,0.,1.)); +#110 = DIRECTION('',(1.,0.,-0.)); +#111 = AXIS2_PLACEMENT_3D('',#112,#113,#114); +#112 = CARTESIAN_POINT('',(0.,0.,0.)); +#113 = DIRECTION('',(0.,0.,1.)); +#114 = DIRECTION('',(1.,0.,-0.)); +#115 = AXIS2_PLACEMENT_3D('',#116,#117,#118); +#116 = CARTESIAN_POINT('',(0.,0.,0.)); +#117 = DIRECTION('',(0.,0.,1.)); +#118 = DIRECTION('',(1.,0.,-0.)); +#119 = AXIS2_PLACEMENT_3D('',#120,#121,#122); +#120 = CARTESIAN_POINT('',(0.,0.,0.)); +#121 = DIRECTION('',(0.,0.,1.)); +#122 = DIRECTION('',(1.,0.,-0.)); +#123 = AXIS2_PLACEMENT_3D('',#124,#125,#126); +#124 = CARTESIAN_POINT('',(0.,0.,0.)); +#125 = DIRECTION('',(0.,0.,1.)); +#126 = DIRECTION('',(1.,0.,-0.)); +#127 = AXIS2_PLACEMENT_3D('',#128,#129,#130); +#128 = CARTESIAN_POINT('',(0.,0.,0.)); +#129 = DIRECTION('',(0.,0.,1.)); +#130 = DIRECTION('',(1.,0.,-0.)); +#131 = AXIS2_PLACEMENT_3D('',#132,#133,#134); +#132 = CARTESIAN_POINT('',(0.,0.,0.)); +#133 = DIRECTION('',(0.,0.,1.)); +#134 = DIRECTION('',(1.,0.,-0.)); +#135 = AXIS2_PLACEMENT_3D('',#136,#137,#138); +#136 = CARTESIAN_POINT('',(0.,0.,0.)); +#137 = DIRECTION('',(0.,0.,1.)); +#138 = DIRECTION('',(1.,0.,-0.)); +#139 = AXIS2_PLACEMENT_3D('',#140,#141,#142); +#140 = CARTESIAN_POINT('',(0.,0.,0.)); +#141 = DIRECTION('',(0.,0.,1.)); +#142 = DIRECTION('',(1.,0.,-0.)); +#143 = AXIS2_PLACEMENT_3D('',#144,#145,#146); +#144 = CARTESIAN_POINT('',(0.,0.,0.)); +#145 = DIRECTION('',(0.,0.,1.)); +#146 = DIRECTION('',(1.,0.,-0.)); +#147 = AXIS2_PLACEMENT_3D('',#148,#149,#150); +#148 = CARTESIAN_POINT('',(0.,0.,0.)); +#149 = DIRECTION('',(0.,0.,1.)); +#150 = DIRECTION('',(1.,0.,-0.)); +#151 = AXIS2_PLACEMENT_3D('',#152,#153,#154); +#152 = CARTESIAN_POINT('',(0.,0.,0.)); +#153 = DIRECTION('',(0.,0.,1.)); +#154 = DIRECTION('',(1.,0.,-0.)); +#155 = AXIS2_PLACEMENT_3D('',#156,#157,#158); +#156 = CARTESIAN_POINT('',(0.,0.,0.)); +#157 = DIRECTION('',(0.,0.,1.)); +#158 = DIRECTION('',(1.,0.,-0.)); +#159 = AXIS2_PLACEMENT_3D('',#160,#161,#162); +#160 = CARTESIAN_POINT('',(0.,0.,0.)); +#161 = DIRECTION('',(0.,0.,1.)); +#162 = DIRECTION('',(1.,0.,-0.)); +#163 = AXIS2_PLACEMENT_3D('',#164,#165,#166); +#164 = CARTESIAN_POINT('',(0.,0.,0.)); +#165 = DIRECTION('',(0.,0.,1.)); +#166 = DIRECTION('',(1.,0.,-0.)); +#167 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#171)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#168,#169,#170)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#168 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#169 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#170 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#171 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(5.E-07),#168, + 'distance_accuracy_value','confusion accuracy'); +#172 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +#173 = SHAPE_DEFINITION_REPRESENTATION(#174,#180); +#174 = PRODUCT_DEFINITION_SHAPE('','',#175); +#175 = PRODUCT_DEFINITION('design','',#176,#179); +#176 = PRODUCT_DEFINITION_FORMATION('','',#177); +#177 = PRODUCT('Board','Board','',(#178)); +#178 = PRODUCT_CONTEXT('',#2,'mechanical'); +#179 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#180 = SHAPE_REPRESENTATION('',(#11,#181),#185); +#181 = AXIS2_PLACEMENT_3D('',#182,#183,#184); +#182 = CARTESIAN_POINT('',(0.,0.,-1.69143934)); +#183 = DIRECTION('',(0.,0.,1.)); +#184 = DIRECTION('',(1.,0.,-0.)); +#185 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#189)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#186,#187,#188)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#186 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#187 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#188 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#189 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#186, + 'distance_accuracy_value','confusion accuracy'); +#190 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#191),#1089); +#191 = MANIFOLD_SOLID_BREP('',#192); +#192 = CLOSED_SHELL('',(#193,#233,#266,#297,#330,#361,#394,#425,#449, + #482,#524,#555,#588,#610,#643,#676,#709,#742,#775,#808,#841,#874, + #907,#940,#973,#1031)); +#193 = ADVANCED_FACE('',(#194),#228,.T.); +#194 = FACE_BOUND('',#195,.T.); +#195 = EDGE_LOOP('',(#196,#206,#214,#222)); +#196 = ORIENTED_EDGE('',*,*,#197,.T.); +#197 = EDGE_CURVE('',#198,#200,#202,.T.); +#198 = VERTEX_POINT('',#199); +#199 = CARTESIAN_POINT('',(216.444,153.262,0.)); +#200 = VERTEX_POINT('',#201); +#201 = CARTESIAN_POINT('',(216.444,153.262,1.69143934)); +#202 = LINE('',#203,#204); +#203 = CARTESIAN_POINT('',(216.444,153.262,0.)); +#204 = VECTOR('',#205,1.); +#205 = DIRECTION('',(0.,0.,1.)); +#206 = ORIENTED_EDGE('',*,*,#207,.T.); +#207 = EDGE_CURVE('',#200,#208,#210,.T.); +#208 = VERTEX_POINT('',#209); +#209 = CARTESIAN_POINT('',(216.444,201.462,1.69143934)); +#210 = LINE('',#211,#212); +#211 = CARTESIAN_POINT('',(216.444,153.262,1.69143934)); +#212 = VECTOR('',#213,1.); +#213 = DIRECTION('',(0.,1.,0.)); +#214 = ORIENTED_EDGE('',*,*,#215,.F.); +#215 = EDGE_CURVE('',#216,#208,#218,.T.); +#216 = VERTEX_POINT('',#217); +#217 = CARTESIAN_POINT('',(216.444,201.462,0.)); +#218 = LINE('',#219,#220); +#219 = CARTESIAN_POINT('',(216.444,201.462,0.)); +#220 = VECTOR('',#221,1.); +#221 = DIRECTION('',(0.,0.,1.)); +#222 = ORIENTED_EDGE('',*,*,#223,.F.); +#223 = EDGE_CURVE('',#198,#216,#224,.T.); +#224 = LINE('',#225,#226); +#225 = CARTESIAN_POINT('',(216.444,153.262,0.)); +#226 = VECTOR('',#227,1.); +#227 = DIRECTION('',(0.,1.,0.)); +#228 = PLANE('',#229); +#229 = AXIS2_PLACEMENT_3D('',#230,#231,#232); +#230 = CARTESIAN_POINT('',(216.444,153.262,0.)); +#231 = DIRECTION('',(-1.,0.,0.)); +#232 = DIRECTION('',(0.,1.,0.)); +#233 = ADVANCED_FACE('',(#234),#261,.T.); +#234 = FACE_BOUND('',#235,.T.); +#235 = EDGE_LOOP('',(#236,#237,#246,#254)); +#236 = ORIENTED_EDGE('',*,*,#215,.T.); +#237 = ORIENTED_EDGE('',*,*,#238,.T.); +#238 = EDGE_CURVE('',#208,#239,#241,.T.); +#239 = VERTEX_POINT('',#240); +#240 = CARTESIAN_POINT('',(219.244,204.262,1.69143934)); +#241 = CIRCLE('',#242,2.79965519365); +#242 = AXIS2_PLACEMENT_3D('',#243,#244,#245); +#243 = CARTESIAN_POINT('',(219.24365517241,201.46234482758,1.69143934)); +#244 = DIRECTION('',(0.,0.,-1.)); +#245 = DIRECTION('',(-0.999999992415,-1.231678768772E-04,-0.)); +#246 = ORIENTED_EDGE('',*,*,#247,.F.); +#247 = EDGE_CURVE('',#248,#239,#250,.T.); +#248 = VERTEX_POINT('',#249); +#249 = CARTESIAN_POINT('',(219.244,204.262,0.)); +#250 = LINE('',#251,#252); +#251 = CARTESIAN_POINT('',(219.244,204.262,0.)); +#252 = VECTOR('',#253,1.); +#253 = DIRECTION('',(0.,0.,1.)); +#254 = ORIENTED_EDGE('',*,*,#255,.F.); +#255 = EDGE_CURVE('',#216,#248,#256,.T.); +#256 = CIRCLE('',#257,2.79965519365); +#257 = AXIS2_PLACEMENT_3D('',#258,#259,#260); +#258 = CARTESIAN_POINT('',(219.24365517241,201.46234482758,0.)); +#259 = DIRECTION('',(0.,0.,-1.)); +#260 = DIRECTION('',(-0.999999992415,-1.231678768772E-04,-0.)); +#261 = CYLINDRICAL_SURFACE('',#262,2.79965519365); +#262 = AXIS2_PLACEMENT_3D('',#263,#264,#265); +#263 = CARTESIAN_POINT('',(219.24365517241,201.46234482758,0.)); +#264 = DIRECTION('',(0.,0.,-1.)); +#265 = DIRECTION('',(-0.999999992415,-1.231678768772E-04,-0.)); +#266 = ADVANCED_FACE('',(#267),#292,.T.); +#267 = FACE_BOUND('',#268,.T.); +#268 = EDGE_LOOP('',(#269,#270,#278,#286)); +#269 = ORIENTED_EDGE('',*,*,#247,.T.); +#270 = ORIENTED_EDGE('',*,*,#271,.T.); +#271 = EDGE_CURVE('',#239,#272,#274,.T.); +#272 = VERTEX_POINT('',#273); +#273 = CARTESIAN_POINT('',(319.434,204.262,1.69143934)); +#274 = LINE('',#275,#276); +#275 = CARTESIAN_POINT('',(219.244,204.262,1.69143934)); +#276 = VECTOR('',#277,1.); +#277 = DIRECTION('',(1.,0.,0.)); +#278 = ORIENTED_EDGE('',*,*,#279,.F.); +#279 = EDGE_CURVE('',#280,#272,#282,.T.); +#280 = VERTEX_POINT('',#281); +#281 = CARTESIAN_POINT('',(319.434,204.262,0.)); +#282 = LINE('',#283,#284); +#283 = CARTESIAN_POINT('',(319.434,204.262,0.)); +#284 = VECTOR('',#285,1.); +#285 = DIRECTION('',(0.,0.,1.)); +#286 = ORIENTED_EDGE('',*,*,#287,.F.); +#287 = EDGE_CURVE('',#248,#280,#288,.T.); +#288 = LINE('',#289,#290); +#289 = CARTESIAN_POINT('',(219.244,204.262,0.)); +#290 = VECTOR('',#291,1.); +#291 = DIRECTION('',(1.,0.,0.)); +#292 = PLANE('',#293); +#293 = AXIS2_PLACEMENT_3D('',#294,#295,#296); +#294 = CARTESIAN_POINT('',(219.244,204.262,0.)); +#295 = DIRECTION('',(0.,1.,0.)); +#296 = DIRECTION('',(1.,0.,0.)); +#297 = ADVANCED_FACE('',(#298),#325,.T.); +#298 = FACE_BOUND('',#299,.T.); +#299 = EDGE_LOOP('',(#300,#301,#310,#318)); +#300 = ORIENTED_EDGE('',*,*,#279,.T.); +#301 = ORIENTED_EDGE('',*,*,#302,.T.); +#302 = EDGE_CURVE('',#272,#303,#305,.T.); +#303 = VERTEX_POINT('',#304); +#304 = CARTESIAN_POINT('',(322.234,201.462,1.69143934)); +#305 = CIRCLE('',#306,2.79965519365); +#306 = AXIS2_PLACEMENT_3D('',#307,#308,#309); +#307 = CARTESIAN_POINT('',(319.43434482758,201.46234482758,1.69143934)); +#308 = DIRECTION('',(0.,0.,-1.)); +#309 = DIRECTION('',(-1.23167876867E-04,0.999999992415,0.)); +#310 = ORIENTED_EDGE('',*,*,#311,.F.); +#311 = EDGE_CURVE('',#312,#303,#314,.T.); +#312 = VERTEX_POINT('',#313); +#313 = CARTESIAN_POINT('',(322.234,201.462,0.)); +#314 = LINE('',#315,#316); +#315 = CARTESIAN_POINT('',(322.234,201.462,0.)); +#316 = VECTOR('',#317,1.); +#317 = DIRECTION('',(0.,0.,1.)); +#318 = ORIENTED_EDGE('',*,*,#319,.F.); +#319 = EDGE_CURVE('',#280,#312,#320,.T.); +#320 = CIRCLE('',#321,2.79965519365); +#321 = AXIS2_PLACEMENT_3D('',#322,#323,#324); +#322 = CARTESIAN_POINT('',(319.43434482758,201.46234482758,0.)); +#323 = DIRECTION('',(0.,0.,-1.)); +#324 = DIRECTION('',(-1.23167876867E-04,0.999999992415,0.)); +#325 = CYLINDRICAL_SURFACE('',#326,2.79965519365); +#326 = AXIS2_PLACEMENT_3D('',#327,#328,#329); +#327 = CARTESIAN_POINT('',(319.43434482758,201.46234482758,0.)); +#328 = DIRECTION('',(0.,0.,-1.)); +#329 = DIRECTION('',(-1.23167876867E-04,0.999999992415,0.)); +#330 = ADVANCED_FACE('',(#331),#356,.T.); +#331 = FACE_BOUND('',#332,.T.); +#332 = EDGE_LOOP('',(#333,#334,#342,#350)); +#333 = ORIENTED_EDGE('',*,*,#311,.T.); +#334 = ORIENTED_EDGE('',*,*,#335,.T.); +#335 = EDGE_CURVE('',#303,#336,#338,.T.); +#336 = VERTEX_POINT('',#337); +#337 = CARTESIAN_POINT('',(322.234,153.262,1.69143934)); +#338 = LINE('',#339,#340); +#339 = CARTESIAN_POINT('',(322.234,201.462,1.69143934)); +#340 = VECTOR('',#341,1.); +#341 = DIRECTION('',(0.,-1.,0.)); +#342 = ORIENTED_EDGE('',*,*,#343,.F.); +#343 = EDGE_CURVE('',#344,#336,#346,.T.); +#344 = VERTEX_POINT('',#345); +#345 = CARTESIAN_POINT('',(322.234,153.262,0.)); +#346 = LINE('',#347,#348); +#347 = CARTESIAN_POINT('',(322.234,153.262,0.)); +#348 = VECTOR('',#349,1.); +#349 = DIRECTION('',(0.,0.,1.)); +#350 = ORIENTED_EDGE('',*,*,#351,.F.); +#351 = EDGE_CURVE('',#312,#344,#352,.T.); +#352 = LINE('',#353,#354); +#353 = CARTESIAN_POINT('',(322.234,201.462,0.)); +#354 = VECTOR('',#355,1.); +#355 = DIRECTION('',(0.,-1.,0.)); +#356 = PLANE('',#357); +#357 = AXIS2_PLACEMENT_3D('',#358,#359,#360); +#358 = CARTESIAN_POINT('',(322.234,201.462,0.)); +#359 = DIRECTION('',(1.,0.,-0.)); +#360 = DIRECTION('',(0.,-1.,0.)); +#361 = ADVANCED_FACE('',(#362),#389,.T.); +#362 = FACE_BOUND('',#363,.T.); +#363 = EDGE_LOOP('',(#364,#365,#374,#382)); +#364 = ORIENTED_EDGE('',*,*,#343,.T.); +#365 = ORIENTED_EDGE('',*,*,#366,.T.); +#366 = EDGE_CURVE('',#336,#367,#369,.T.); +#367 = VERTEX_POINT('',#368); +#368 = CARTESIAN_POINT('',(319.434,150.462,1.69143934)); +#369 = CIRCLE('',#370,2.801363144262); +#370 = AXIS2_PLACEMENT_3D('',#371,#372,#373); +#371 = CARTESIAN_POINT('',(319.43263718723,153.26336281277,1.69143934)); +#372 = DIRECTION('',(0.,0.,-1.)); +#373 = DIRECTION('',(0.999999881668,-4.864820087188E-04,0.)); +#374 = ORIENTED_EDGE('',*,*,#375,.F.); +#375 = EDGE_CURVE('',#376,#367,#378,.T.); +#376 = VERTEX_POINT('',#377); +#377 = CARTESIAN_POINT('',(319.434,150.462,0.)); +#378 = LINE('',#379,#380); +#379 = CARTESIAN_POINT('',(319.434,150.462,0.)); +#380 = VECTOR('',#381,1.); +#381 = DIRECTION('',(0.,0.,1.)); +#382 = ORIENTED_EDGE('',*,*,#383,.F.); +#383 = EDGE_CURVE('',#344,#376,#384,.T.); +#384 = CIRCLE('',#385,2.801363144262); +#385 = AXIS2_PLACEMENT_3D('',#386,#387,#388); +#386 = CARTESIAN_POINT('',(319.43263718723,153.26336281277,0.)); +#387 = DIRECTION('',(0.,0.,-1.)); +#388 = DIRECTION('',(0.999999881668,-4.864820087188E-04,0.)); +#389 = CYLINDRICAL_SURFACE('',#390,2.801363144262); +#390 = AXIS2_PLACEMENT_3D('',#391,#392,#393); +#391 = CARTESIAN_POINT('',(319.43263718723,153.26336281277,0.)); +#392 = DIRECTION('',(0.,0.,-1.)); +#393 = DIRECTION('',(0.999999881668,-4.864820087188E-04,0.)); +#394 = ADVANCED_FACE('',(#395),#420,.T.); +#395 = FACE_BOUND('',#396,.T.); +#396 = EDGE_LOOP('',(#397,#398,#406,#414)); +#397 = ORIENTED_EDGE('',*,*,#375,.T.); +#398 = ORIENTED_EDGE('',*,*,#399,.T.); +#399 = EDGE_CURVE('',#367,#400,#402,.T.); +#400 = VERTEX_POINT('',#401); +#401 = CARTESIAN_POINT('',(219.244,150.462,1.69143934)); +#402 = LINE('',#403,#404); +#403 = CARTESIAN_POINT('',(319.434,150.462,1.69143934)); +#404 = VECTOR('',#405,1.); +#405 = DIRECTION('',(-1.,0.,0.)); +#406 = ORIENTED_EDGE('',*,*,#407,.F.); +#407 = EDGE_CURVE('',#408,#400,#410,.T.); +#408 = VERTEX_POINT('',#409); +#409 = CARTESIAN_POINT('',(219.244,150.462,0.)); +#410 = LINE('',#411,#412); +#411 = CARTESIAN_POINT('',(219.244,150.462,0.)); +#412 = VECTOR('',#413,1.); +#413 = DIRECTION('',(0.,0.,1.)); +#414 = ORIENTED_EDGE('',*,*,#415,.F.); +#415 = EDGE_CURVE('',#376,#408,#416,.T.); +#416 = LINE('',#417,#418); +#417 = CARTESIAN_POINT('',(319.434,150.462,0.)); +#418 = VECTOR('',#419,1.); +#419 = DIRECTION('',(-1.,0.,0.)); +#420 = PLANE('',#421); +#421 = AXIS2_PLACEMENT_3D('',#422,#423,#424); +#422 = CARTESIAN_POINT('',(319.434,150.462,0.)); +#423 = DIRECTION('',(0.,-1.,0.)); +#424 = DIRECTION('',(-1.,0.,0.)); +#425 = ADVANCED_FACE('',(#426),#444,.T.); +#426 = FACE_BOUND('',#427,.T.); +#427 = EDGE_LOOP('',(#428,#429,#436,#437)); +#428 = ORIENTED_EDGE('',*,*,#407,.T.); +#429 = ORIENTED_EDGE('',*,*,#430,.T.); +#430 = EDGE_CURVE('',#400,#200,#431,.T.); +#431 = CIRCLE('',#432,2.801363144262); +#432 = AXIS2_PLACEMENT_3D('',#433,#434,#435); +#433 = CARTESIAN_POINT('',(219.24536281277,153.26336281277,1.69143934)); +#434 = DIRECTION('',(0.,0.,-1.)); +#435 = DIRECTION('',(-4.864820087492E-04,-0.999999881668,-0.)); +#436 = ORIENTED_EDGE('',*,*,#197,.F.); +#437 = ORIENTED_EDGE('',*,*,#438,.F.); +#438 = EDGE_CURVE('',#408,#198,#439,.T.); +#439 = CIRCLE('',#440,2.801363144262); +#440 = AXIS2_PLACEMENT_3D('',#441,#442,#443); +#441 = CARTESIAN_POINT('',(219.24536281277,153.26336281277,0.)); +#442 = DIRECTION('',(0.,0.,-1.)); +#443 = DIRECTION('',(-4.864820087492E-04,-0.999999881668,-0.)); +#444 = CYLINDRICAL_SURFACE('',#445,2.801363144262); +#445 = AXIS2_PLACEMENT_3D('',#446,#447,#448); +#446 = CARTESIAN_POINT('',(219.24536281277,153.26336281277,0.)); +#447 = DIRECTION('',(0.,0.,-1.)); +#448 = DIRECTION('',(-4.864820087492E-04,-0.999999881668,-0.)); +#449 = ADVANCED_FACE('',(#450),#477,.F.); +#450 = FACE_BOUND('',#451,.T.); +#451 = EDGE_LOOP('',(#452,#462,#469,#470)); +#452 = ORIENTED_EDGE('',*,*,#453,.T.); +#453 = EDGE_CURVE('',#454,#456,#458,.T.); +#454 = VERTEX_POINT('',#455); +#455 = CARTESIAN_POINT('',(220.844,153.262,0.)); +#456 = VERTEX_POINT('',#457); +#457 = CARTESIAN_POINT('',(220.844,153.262,1.69143934)); +#458 = LINE('',#459,#460); +#459 = CARTESIAN_POINT('',(220.844,153.262,0.)); +#460 = VECTOR('',#461,1.); +#461 = DIRECTION('',(0.,0.,1.)); +#462 = ORIENTED_EDGE('',*,*,#463,.T.); +#463 = EDGE_CURVE('',#456,#456,#464,.T.); +#464 = CIRCLE('',#465,1.6); +#465 = AXIS2_PLACEMENT_3D('',#466,#467,#468); +#466 = CARTESIAN_POINT('',(219.244,153.262,1.69143934)); +#467 = DIRECTION('',(0.,0.,1.)); +#468 = DIRECTION('',(1.,0.,-0.)); +#469 = ORIENTED_EDGE('',*,*,#453,.F.); +#470 = ORIENTED_EDGE('',*,*,#471,.F.); +#471 = EDGE_CURVE('',#454,#454,#472,.T.); +#472 = CIRCLE('',#473,1.6); +#473 = AXIS2_PLACEMENT_3D('',#474,#475,#476); +#474 = CARTESIAN_POINT('',(219.244,153.262,0.)); +#475 = DIRECTION('',(0.,0.,1.)); +#476 = DIRECTION('',(1.,0.,-0.)); +#477 = CYLINDRICAL_SURFACE('',#478,1.6); +#478 = AXIS2_PLACEMENT_3D('',#479,#480,#481); +#479 = CARTESIAN_POINT('',(219.244,153.262,0.)); +#480 = DIRECTION('',(-0.,-0.,-1.)); +#481 = DIRECTION('',(1.,0.,-0.)); +#482 = ADVANCED_FACE('',(#483),#519,.F.); +#483 = FACE_BOUND('',#484,.F.); +#484 = EDGE_LOOP('',(#485,#495,#504,#512)); +#485 = ORIENTED_EDGE('',*,*,#486,.T.); +#486 = EDGE_CURVE('',#487,#489,#491,.T.); +#487 = VERTEX_POINT('',#488); +#488 = CARTESIAN_POINT('',(318.919,171.623,0.)); +#489 = VERTEX_POINT('',#490); +#490 = CARTESIAN_POINT('',(318.919,171.623,1.69143934)); +#491 = LINE('',#492,#493); +#492 = CARTESIAN_POINT('',(318.919,171.623,0.)); +#493 = VECTOR('',#494,1.); +#494 = DIRECTION('',(0.,0.,1.)); +#495 = ORIENTED_EDGE('',*,*,#496,.T.); +#496 = EDGE_CURVE('',#489,#497,#499,.T.); +#497 = VERTEX_POINT('',#498); +#498 = CARTESIAN_POINT('',(315.919,171.623,1.69143934)); +#499 = CIRCLE('',#500,1.5); +#500 = AXIS2_PLACEMENT_3D('',#501,#502,#503); +#501 = CARTESIAN_POINT('',(317.419,171.623,1.69143934)); +#502 = DIRECTION('',(0.,0.,-1.)); +#503 = DIRECTION('',(1.,0.,0.)); +#504 = ORIENTED_EDGE('',*,*,#505,.F.); +#505 = EDGE_CURVE('',#506,#497,#508,.T.); +#506 = VERTEX_POINT('',#507); +#507 = CARTESIAN_POINT('',(315.919,171.623,0.)); +#508 = LINE('',#509,#510); +#509 = CARTESIAN_POINT('',(315.919,171.623,0.)); +#510 = VECTOR('',#511,1.); +#511 = DIRECTION('',(0.,0.,1.)); +#512 = ORIENTED_EDGE('',*,*,#513,.F.); +#513 = EDGE_CURVE('',#487,#506,#514,.T.); +#514 = CIRCLE('',#515,1.5); +#515 = AXIS2_PLACEMENT_3D('',#516,#517,#518); +#516 = CARTESIAN_POINT('',(317.419,171.623,0.)); +#517 = DIRECTION('',(0.,0.,-1.)); +#518 = DIRECTION('',(1.,0.,0.)); +#519 = CYLINDRICAL_SURFACE('',#520,1.5); +#520 = AXIS2_PLACEMENT_3D('',#521,#522,#523); +#521 = CARTESIAN_POINT('',(317.419,171.623,0.)); +#522 = DIRECTION('',(0.,0.,-1.)); +#523 = DIRECTION('',(1.,0.,0.)); +#524 = ADVANCED_FACE('',(#525),#550,.F.); +#525 = FACE_BOUND('',#526,.F.); +#526 = EDGE_LOOP('',(#527,#537,#543,#544)); +#527 = ORIENTED_EDGE('',*,*,#528,.T.); +#528 = EDGE_CURVE('',#529,#531,#533,.T.); +#529 = VERTEX_POINT('',#530); +#530 = CARTESIAN_POINT('',(318.919,184.023,0.)); +#531 = VERTEX_POINT('',#532); +#532 = CARTESIAN_POINT('',(318.919,184.023,1.69143934)); +#533 = LINE('',#534,#535); +#534 = CARTESIAN_POINT('',(318.919,184.023,0.)); +#535 = VECTOR('',#536,1.); +#536 = DIRECTION('',(0.,0.,1.)); +#537 = ORIENTED_EDGE('',*,*,#538,.T.); +#538 = EDGE_CURVE('',#531,#489,#539,.T.); +#539 = LINE('',#540,#541); +#540 = CARTESIAN_POINT('',(318.919,184.023,1.69143934)); +#541 = VECTOR('',#542,1.); +#542 = DIRECTION('',(0.,-1.,0.)); +#543 = ORIENTED_EDGE('',*,*,#486,.F.); +#544 = ORIENTED_EDGE('',*,*,#545,.F.); +#545 = EDGE_CURVE('',#529,#487,#546,.T.); +#546 = LINE('',#547,#548); +#547 = CARTESIAN_POINT('',(318.919,184.023,0.)); +#548 = VECTOR('',#549,1.); +#549 = DIRECTION('',(0.,-1.,0.)); +#550 = PLANE('',#551); +#551 = AXIS2_PLACEMENT_3D('',#552,#553,#554); +#552 = CARTESIAN_POINT('',(318.919,184.023,0.)); +#553 = DIRECTION('',(1.,0.,-0.)); +#554 = DIRECTION('',(0.,-1.,0.)); +#555 = ADVANCED_FACE('',(#556),#583,.F.); +#556 = FACE_BOUND('',#557,.F.); +#557 = EDGE_LOOP('',(#558,#568,#575,#576)); +#558 = ORIENTED_EDGE('',*,*,#559,.T.); +#559 = EDGE_CURVE('',#560,#562,#564,.T.); +#560 = VERTEX_POINT('',#561); +#561 = CARTESIAN_POINT('',(315.919,184.023,0.)); +#562 = VERTEX_POINT('',#563); +#563 = CARTESIAN_POINT('',(315.919,184.023,1.69143934)); +#564 = LINE('',#565,#566); +#565 = CARTESIAN_POINT('',(315.919,184.023,0.)); +#566 = VECTOR('',#567,1.); +#567 = DIRECTION('',(0.,0.,1.)); +#568 = ORIENTED_EDGE('',*,*,#569,.T.); +#569 = EDGE_CURVE('',#562,#531,#570,.T.); +#570 = CIRCLE('',#571,1.5); +#571 = AXIS2_PLACEMENT_3D('',#572,#573,#574); +#572 = CARTESIAN_POINT('',(317.419,184.023,1.69143934)); +#573 = DIRECTION('',(0.,0.,-1.)); +#574 = DIRECTION('',(-1.,0.,0.)); +#575 = ORIENTED_EDGE('',*,*,#528,.F.); +#576 = ORIENTED_EDGE('',*,*,#577,.F.); +#577 = EDGE_CURVE('',#560,#529,#578,.T.); +#578 = CIRCLE('',#579,1.5); +#579 = AXIS2_PLACEMENT_3D('',#580,#581,#582); +#580 = CARTESIAN_POINT('',(317.419,184.023,0.)); +#581 = DIRECTION('',(0.,0.,-1.)); +#582 = DIRECTION('',(-1.,0.,0.)); +#583 = CYLINDRICAL_SURFACE('',#584,1.5); +#584 = AXIS2_PLACEMENT_3D('',#585,#586,#587); +#585 = CARTESIAN_POINT('',(317.419,184.023,0.)); +#586 = DIRECTION('',(0.,0.,-1.)); +#587 = DIRECTION('',(-1.,0.,0.)); +#588 = ADVANCED_FACE('',(#589),#605,.F.); +#589 = FACE_BOUND('',#590,.F.); +#590 = EDGE_LOOP('',(#591,#592,#598,#599)); +#591 = ORIENTED_EDGE('',*,*,#505,.T.); +#592 = ORIENTED_EDGE('',*,*,#593,.T.); +#593 = EDGE_CURVE('',#497,#562,#594,.T.); +#594 = LINE('',#595,#596); +#595 = CARTESIAN_POINT('',(315.919,171.623,1.69143934)); +#596 = VECTOR('',#597,1.); +#597 = DIRECTION('',(0.,1.,0.)); +#598 = ORIENTED_EDGE('',*,*,#559,.F.); +#599 = ORIENTED_EDGE('',*,*,#600,.F.); +#600 = EDGE_CURVE('',#506,#560,#601,.T.); +#601 = LINE('',#602,#603); +#602 = CARTESIAN_POINT('',(315.919,171.623,0.)); +#603 = VECTOR('',#604,1.); +#604 = DIRECTION('',(0.,1.,0.)); +#605 = PLANE('',#606); +#606 = AXIS2_PLACEMENT_3D('',#607,#608,#609); +#607 = CARTESIAN_POINT('',(315.919,171.623,0.)); +#608 = DIRECTION('',(-1.,0.,0.)); +#609 = DIRECTION('',(0.,1.,0.)); +#610 = ADVANCED_FACE('',(#611),#638,.F.); +#611 = FACE_BOUND('',#612,.T.); +#612 = EDGE_LOOP('',(#613,#623,#630,#631)); +#613 = ORIENTED_EDGE('',*,*,#614,.T.); +#614 = EDGE_CURVE('',#615,#617,#619,.T.); +#615 = VERTEX_POINT('',#616); +#616 = CARTESIAN_POINT('',(318.17,188.342,0.)); +#617 = VERTEX_POINT('',#618); +#618 = CARTESIAN_POINT('',(318.17,188.342,1.69143934)); +#619 = LINE('',#620,#621); +#620 = CARTESIAN_POINT('',(318.17,188.342,0.)); +#621 = VECTOR('',#622,1.); +#622 = DIRECTION('',(0.,0.,1.)); +#623 = ORIENTED_EDGE('',*,*,#624,.T.); +#624 = EDGE_CURVE('',#617,#617,#625,.T.); +#625 = CIRCLE('',#626,0.406); +#626 = AXIS2_PLACEMENT_3D('',#627,#628,#629); +#627 = CARTESIAN_POINT('',(317.764,188.342,1.69143934)); +#628 = DIRECTION('',(0.,0.,1.)); +#629 = DIRECTION('',(1.,0.,-0.)); +#630 = ORIENTED_EDGE('',*,*,#614,.F.); +#631 = ORIENTED_EDGE('',*,*,#632,.F.); +#632 = EDGE_CURVE('',#615,#615,#633,.T.); +#633 = CIRCLE('',#634,0.406); +#634 = AXIS2_PLACEMENT_3D('',#635,#636,#637); +#635 = CARTESIAN_POINT('',(317.764,188.342,0.)); +#636 = DIRECTION('',(0.,0.,1.)); +#637 = DIRECTION('',(1.,0.,-0.)); +#638 = CYLINDRICAL_SURFACE('',#639,0.406); +#639 = AXIS2_PLACEMENT_3D('',#640,#641,#642); +#640 = CARTESIAN_POINT('',(317.764,188.342,0.)); +#641 = DIRECTION('',(-0.,-0.,-1.)); +#642 = DIRECTION('',(1.,0.,-0.)); +#643 = ADVANCED_FACE('',(#644),#671,.F.); +#644 = FACE_BOUND('',#645,.T.); +#645 = EDGE_LOOP('',(#646,#656,#663,#664)); +#646 = ORIENTED_EDGE('',*,*,#647,.T.); +#647 = EDGE_CURVE('',#648,#650,#652,.T.); +#648 = VERTEX_POINT('',#649); +#649 = CARTESIAN_POINT('',(220.844,201.462,0.)); +#650 = VERTEX_POINT('',#651); +#651 = CARTESIAN_POINT('',(220.844,201.462,1.69143934)); +#652 = LINE('',#653,#654); +#653 = CARTESIAN_POINT('',(220.844,201.462,0.)); +#654 = VECTOR('',#655,1.); +#655 = DIRECTION('',(0.,0.,1.)); +#656 = ORIENTED_EDGE('',*,*,#657,.T.); +#657 = EDGE_CURVE('',#650,#650,#658,.T.); +#658 = CIRCLE('',#659,1.6); +#659 = AXIS2_PLACEMENT_3D('',#660,#661,#662); +#660 = CARTESIAN_POINT('',(219.244,201.462,1.69143934)); +#661 = DIRECTION('',(0.,0.,1.)); +#662 = DIRECTION('',(1.,0.,-0.)); +#663 = ORIENTED_EDGE('',*,*,#647,.F.); +#664 = ORIENTED_EDGE('',*,*,#665,.F.); +#665 = EDGE_CURVE('',#648,#648,#666,.T.); +#666 = CIRCLE('',#667,1.6); +#667 = AXIS2_PLACEMENT_3D('',#668,#669,#670); +#668 = CARTESIAN_POINT('',(219.244,201.462,0.)); +#669 = DIRECTION('',(0.,0.,1.)); +#670 = DIRECTION('',(1.,0.,-0.)); +#671 = CYLINDRICAL_SURFACE('',#672,1.6); +#672 = AXIS2_PLACEMENT_3D('',#673,#674,#675); +#673 = CARTESIAN_POINT('',(219.244,201.462,0.)); +#674 = DIRECTION('',(-0.,-0.,-1.)); +#675 = DIRECTION('',(1.,0.,-0.)); +#676 = ADVANCED_FACE('',(#677),#704,.F.); +#677 = FACE_BOUND('',#678,.T.); +#678 = EDGE_LOOP('',(#679,#689,#696,#697)); +#679 = ORIENTED_EDGE('',*,*,#680,.T.); +#680 = EDGE_CURVE('',#681,#683,#685,.T.); +#681 = VERTEX_POINT('',#682); +#682 = CARTESIAN_POINT('',(318.17,193.422,0.)); +#683 = VERTEX_POINT('',#684); +#684 = CARTESIAN_POINT('',(318.17,193.422,1.69143934)); +#685 = LINE('',#686,#687); +#686 = CARTESIAN_POINT('',(318.17,193.422,0.)); +#687 = VECTOR('',#688,1.); +#688 = DIRECTION('',(0.,0.,1.)); +#689 = ORIENTED_EDGE('',*,*,#690,.T.); +#690 = EDGE_CURVE('',#683,#683,#691,.T.); +#691 = CIRCLE('',#692,0.406); +#692 = AXIS2_PLACEMENT_3D('',#693,#694,#695); +#693 = CARTESIAN_POINT('',(317.764,193.422,1.69143934)); +#694 = DIRECTION('',(0.,0.,1.)); +#695 = DIRECTION('',(1.,0.,-0.)); +#696 = ORIENTED_EDGE('',*,*,#680,.F.); +#697 = ORIENTED_EDGE('',*,*,#698,.F.); +#698 = EDGE_CURVE('',#681,#681,#699,.T.); +#699 = CIRCLE('',#700,0.406); +#700 = AXIS2_PLACEMENT_3D('',#701,#702,#703); +#701 = CARTESIAN_POINT('',(317.764,193.422,0.)); +#702 = DIRECTION('',(0.,0.,1.)); +#703 = DIRECTION('',(1.,0.,-0.)); +#704 = CYLINDRICAL_SURFACE('',#705,0.406); +#705 = AXIS2_PLACEMENT_3D('',#706,#707,#708); +#706 = CARTESIAN_POINT('',(317.764,193.422,0.)); +#707 = DIRECTION('',(-0.,-0.,-1.)); +#708 = DIRECTION('',(1.,0.,-0.)); +#709 = ADVANCED_FACE('',(#710),#737,.F.); +#710 = FACE_BOUND('',#711,.T.); +#711 = EDGE_LOOP('',(#712,#722,#729,#730)); +#712 = ORIENTED_EDGE('',*,*,#713,.T.); +#713 = EDGE_CURVE('',#714,#716,#718,.T.); +#714 = VERTEX_POINT('',#715); +#715 = CARTESIAN_POINT('',(318.17,195.962,0.)); +#716 = VERTEX_POINT('',#717); +#717 = CARTESIAN_POINT('',(318.17,195.962,1.69143934)); +#718 = LINE('',#719,#720); +#719 = CARTESIAN_POINT('',(318.17,195.962,0.)); +#720 = VECTOR('',#721,1.); +#721 = DIRECTION('',(0.,0.,1.)); +#722 = ORIENTED_EDGE('',*,*,#723,.T.); +#723 = EDGE_CURVE('',#716,#716,#724,.T.); +#724 = CIRCLE('',#725,0.406); +#725 = AXIS2_PLACEMENT_3D('',#726,#727,#728); +#726 = CARTESIAN_POINT('',(317.764,195.962,1.69143934)); +#727 = DIRECTION('',(0.,0.,1.)); +#728 = DIRECTION('',(1.,0.,-0.)); +#729 = ORIENTED_EDGE('',*,*,#713,.F.); +#730 = ORIENTED_EDGE('',*,*,#731,.F.); +#731 = EDGE_CURVE('',#714,#714,#732,.T.); +#732 = CIRCLE('',#733,0.406); +#733 = AXIS2_PLACEMENT_3D('',#734,#735,#736); +#734 = CARTESIAN_POINT('',(317.764,195.962,0.)); +#735 = DIRECTION('',(0.,0.,1.)); +#736 = DIRECTION('',(1.,0.,-0.)); +#737 = CYLINDRICAL_SURFACE('',#738,0.406); +#738 = AXIS2_PLACEMENT_3D('',#739,#740,#741); +#739 = CARTESIAN_POINT('',(317.764,195.962,0.)); +#740 = DIRECTION('',(-0.,-0.,-1.)); +#741 = DIRECTION('',(1.,0.,-0.)); +#742 = ADVANCED_FACE('',(#743),#770,.F.); +#743 = FACE_BOUND('',#744,.T.); +#744 = EDGE_LOOP('',(#745,#755,#762,#763)); +#745 = ORIENTED_EDGE('',*,*,#746,.T.); +#746 = EDGE_CURVE('',#747,#749,#751,.T.); +#747 = VERTEX_POINT('',#748); +#748 = CARTESIAN_POINT('',(318.17,190.882,0.)); +#749 = VERTEX_POINT('',#750); +#750 = CARTESIAN_POINT('',(318.17,190.882,1.69143934)); +#751 = LINE('',#752,#753); +#752 = CARTESIAN_POINT('',(318.17,190.882,0.)); +#753 = VECTOR('',#754,1.); +#754 = DIRECTION('',(0.,0.,1.)); +#755 = ORIENTED_EDGE('',*,*,#756,.T.); +#756 = EDGE_CURVE('',#749,#749,#757,.T.); +#757 = CIRCLE('',#758,0.406); +#758 = AXIS2_PLACEMENT_3D('',#759,#760,#761); +#759 = CARTESIAN_POINT('',(317.764,190.882,1.69143934)); +#760 = DIRECTION('',(0.,0.,1.)); +#761 = DIRECTION('',(1.,0.,-0.)); +#762 = ORIENTED_EDGE('',*,*,#746,.F.); +#763 = ORIENTED_EDGE('',*,*,#764,.F.); +#764 = EDGE_CURVE('',#747,#747,#765,.T.); +#765 = CIRCLE('',#766,0.406); +#766 = AXIS2_PLACEMENT_3D('',#767,#768,#769); +#767 = CARTESIAN_POINT('',(317.764,190.882,0.)); +#768 = DIRECTION('',(0.,0.,1.)); +#769 = DIRECTION('',(1.,0.,-0.)); +#770 = CYLINDRICAL_SURFACE('',#771,0.406); +#771 = AXIS2_PLACEMENT_3D('',#772,#773,#774); +#772 = CARTESIAN_POINT('',(317.764,190.882,0.)); +#773 = DIRECTION('',(-0.,-0.,-1.)); +#774 = DIRECTION('',(1.,0.,-0.)); +#775 = ADVANCED_FACE('',(#776),#803,.F.); +#776 = FACE_BOUND('',#777,.T.); +#777 = EDGE_LOOP('',(#778,#788,#795,#796)); +#778 = ORIENTED_EDGE('',*,*,#779,.T.); +#779 = EDGE_CURVE('',#780,#782,#784,.T.); +#780 = VERTEX_POINT('',#781); +#781 = CARTESIAN_POINT('',(321.034,153.262,0.)); +#782 = VERTEX_POINT('',#783); +#783 = CARTESIAN_POINT('',(321.034,153.262,1.69143934)); +#784 = LINE('',#785,#786); +#785 = CARTESIAN_POINT('',(321.034,153.262,0.)); +#786 = VECTOR('',#787,1.); +#787 = DIRECTION('',(0.,0.,1.)); +#788 = ORIENTED_EDGE('',*,*,#789,.T.); +#789 = EDGE_CURVE('',#782,#782,#790,.T.); +#790 = CIRCLE('',#791,1.6); +#791 = AXIS2_PLACEMENT_3D('',#792,#793,#794); +#792 = CARTESIAN_POINT('',(319.434,153.262,1.69143934)); +#793 = DIRECTION('',(0.,0.,1.)); +#794 = DIRECTION('',(1.,0.,-0.)); +#795 = ORIENTED_EDGE('',*,*,#779,.F.); +#796 = ORIENTED_EDGE('',*,*,#797,.F.); +#797 = EDGE_CURVE('',#780,#780,#798,.T.); +#798 = CIRCLE('',#799,1.6); +#799 = AXIS2_PLACEMENT_3D('',#800,#801,#802); +#800 = CARTESIAN_POINT('',(319.434,153.262,0.)); +#801 = DIRECTION('',(0.,0.,1.)); +#802 = DIRECTION('',(1.,0.,-0.)); +#803 = CYLINDRICAL_SURFACE('',#804,1.6); +#804 = AXIS2_PLACEMENT_3D('',#805,#806,#807); +#805 = CARTESIAN_POINT('',(319.434,153.262,0.)); +#806 = DIRECTION('',(-0.,-0.,-1.)); +#807 = DIRECTION('',(1.,0.,-0.)); +#808 = ADVANCED_FACE('',(#809),#836,.F.); +#809 = FACE_BOUND('',#810,.T.); +#810 = EDGE_LOOP('',(#811,#821,#828,#829)); +#811 = ORIENTED_EDGE('',*,*,#812,.T.); +#812 = EDGE_CURVE('',#813,#815,#817,.T.); +#813 = VERTEX_POINT('',#814); +#814 = CARTESIAN_POINT('',(320.71,188.342,0.)); +#815 = VERTEX_POINT('',#816); +#816 = CARTESIAN_POINT('',(320.71,188.342,1.69143934)); +#817 = LINE('',#818,#819); +#818 = CARTESIAN_POINT('',(320.71,188.342,0.)); +#819 = VECTOR('',#820,1.); +#820 = DIRECTION('',(0.,0.,1.)); +#821 = ORIENTED_EDGE('',*,*,#822,.T.); +#822 = EDGE_CURVE('',#815,#815,#823,.T.); +#823 = CIRCLE('',#824,0.406); +#824 = AXIS2_PLACEMENT_3D('',#825,#826,#827); +#825 = CARTESIAN_POINT('',(320.304,188.342,1.69143934)); +#826 = DIRECTION('',(0.,0.,1.)); +#827 = DIRECTION('',(1.,0.,-0.)); +#828 = ORIENTED_EDGE('',*,*,#812,.F.); +#829 = ORIENTED_EDGE('',*,*,#830,.F.); +#830 = EDGE_CURVE('',#813,#813,#831,.T.); +#831 = CIRCLE('',#832,0.406); +#832 = AXIS2_PLACEMENT_3D('',#833,#834,#835); +#833 = CARTESIAN_POINT('',(320.304,188.342,0.)); +#834 = DIRECTION('',(0.,0.,1.)); +#835 = DIRECTION('',(1.,0.,-0.)); +#836 = CYLINDRICAL_SURFACE('',#837,0.406); +#837 = AXIS2_PLACEMENT_3D('',#838,#839,#840); +#838 = CARTESIAN_POINT('',(320.304,188.342,0.)); +#839 = DIRECTION('',(-0.,-0.,-1.)); +#840 = DIRECTION('',(1.,0.,-0.)); +#841 = ADVANCED_FACE('',(#842),#869,.F.); +#842 = FACE_BOUND('',#843,.T.); +#843 = EDGE_LOOP('',(#844,#854,#861,#862)); +#844 = ORIENTED_EDGE('',*,*,#845,.T.); +#845 = EDGE_CURVE('',#846,#848,#850,.T.); +#846 = VERTEX_POINT('',#847); +#847 = CARTESIAN_POINT('',(320.71,190.882,0.)); +#848 = VERTEX_POINT('',#849); +#849 = CARTESIAN_POINT('',(320.71,190.882,1.69143934)); +#850 = LINE('',#851,#852); +#851 = CARTESIAN_POINT('',(320.71,190.882,0.)); +#852 = VECTOR('',#853,1.); +#853 = DIRECTION('',(0.,0.,1.)); +#854 = ORIENTED_EDGE('',*,*,#855,.T.); +#855 = EDGE_CURVE('',#848,#848,#856,.T.); +#856 = CIRCLE('',#857,0.406); +#857 = AXIS2_PLACEMENT_3D('',#858,#859,#860); +#858 = CARTESIAN_POINT('',(320.304,190.882,1.69143934)); +#859 = DIRECTION('',(0.,0.,1.)); +#860 = DIRECTION('',(1.,0.,-0.)); +#861 = ORIENTED_EDGE('',*,*,#845,.F.); +#862 = ORIENTED_EDGE('',*,*,#863,.F.); +#863 = EDGE_CURVE('',#846,#846,#864,.T.); +#864 = CIRCLE('',#865,0.406); +#865 = AXIS2_PLACEMENT_3D('',#866,#867,#868); +#866 = CARTESIAN_POINT('',(320.304,190.882,0.)); +#867 = DIRECTION('',(0.,0.,1.)); +#868 = DIRECTION('',(1.,0.,-0.)); +#869 = CYLINDRICAL_SURFACE('',#870,0.406); +#870 = AXIS2_PLACEMENT_3D('',#871,#872,#873); +#871 = CARTESIAN_POINT('',(320.304,190.882,0.)); +#872 = DIRECTION('',(-0.,-0.,-1.)); +#873 = DIRECTION('',(1.,0.,-0.)); +#874 = ADVANCED_FACE('',(#875),#902,.F.); +#875 = FACE_BOUND('',#876,.T.); +#876 = EDGE_LOOP('',(#877,#887,#894,#895)); +#877 = ORIENTED_EDGE('',*,*,#878,.T.); +#878 = EDGE_CURVE('',#879,#881,#883,.T.); +#879 = VERTEX_POINT('',#880); +#880 = CARTESIAN_POINT('',(320.71,193.422,0.)); +#881 = VERTEX_POINT('',#882); +#882 = CARTESIAN_POINT('',(320.71,193.422,1.69143934)); +#883 = LINE('',#884,#885); +#884 = CARTESIAN_POINT('',(320.71,193.422,0.)); +#885 = VECTOR('',#886,1.); +#886 = DIRECTION('',(0.,0.,1.)); +#887 = ORIENTED_EDGE('',*,*,#888,.T.); +#888 = EDGE_CURVE('',#881,#881,#889,.T.); +#889 = CIRCLE('',#890,0.406); +#890 = AXIS2_PLACEMENT_3D('',#891,#892,#893); +#891 = CARTESIAN_POINT('',(320.304,193.422,1.69143934)); +#892 = DIRECTION('',(0.,0.,1.)); +#893 = DIRECTION('',(1.,0.,-0.)); +#894 = ORIENTED_EDGE('',*,*,#878,.F.); +#895 = ORIENTED_EDGE('',*,*,#896,.F.); +#896 = EDGE_CURVE('',#879,#879,#897,.T.); +#897 = CIRCLE('',#898,0.406); +#898 = AXIS2_PLACEMENT_3D('',#899,#900,#901); +#899 = CARTESIAN_POINT('',(320.304,193.422,0.)); +#900 = DIRECTION('',(0.,0.,1.)); +#901 = DIRECTION('',(1.,0.,-0.)); +#902 = CYLINDRICAL_SURFACE('',#903,0.406); +#903 = AXIS2_PLACEMENT_3D('',#904,#905,#906); +#904 = CARTESIAN_POINT('',(320.304,193.422,0.)); +#905 = DIRECTION('',(-0.,-0.,-1.)); +#906 = DIRECTION('',(1.,0.,-0.)); +#907 = ADVANCED_FACE('',(#908),#935,.F.); +#908 = FACE_BOUND('',#909,.T.); +#909 = EDGE_LOOP('',(#910,#920,#927,#928)); +#910 = ORIENTED_EDGE('',*,*,#911,.T.); +#911 = EDGE_CURVE('',#912,#914,#916,.T.); +#912 = VERTEX_POINT('',#913); +#913 = CARTESIAN_POINT('',(320.71,195.962,0.)); +#914 = VERTEX_POINT('',#915); +#915 = CARTESIAN_POINT('',(320.71,195.962,1.69143934)); +#916 = LINE('',#917,#918); +#917 = CARTESIAN_POINT('',(320.71,195.962,0.)); +#918 = VECTOR('',#919,1.); +#919 = DIRECTION('',(0.,0.,1.)); +#920 = ORIENTED_EDGE('',*,*,#921,.T.); +#921 = EDGE_CURVE('',#914,#914,#922,.T.); +#922 = CIRCLE('',#923,0.406); +#923 = AXIS2_PLACEMENT_3D('',#924,#925,#926); +#924 = CARTESIAN_POINT('',(320.304,195.962,1.69143934)); +#925 = DIRECTION('',(0.,0.,1.)); +#926 = DIRECTION('',(1.,0.,-0.)); +#927 = ORIENTED_EDGE('',*,*,#911,.F.); +#928 = ORIENTED_EDGE('',*,*,#929,.F.); +#929 = EDGE_CURVE('',#912,#912,#930,.T.); +#930 = CIRCLE('',#931,0.406); +#931 = AXIS2_PLACEMENT_3D('',#932,#933,#934); +#932 = CARTESIAN_POINT('',(320.304,195.962,0.)); +#933 = DIRECTION('',(0.,0.,1.)); +#934 = DIRECTION('',(1.,0.,-0.)); +#935 = CYLINDRICAL_SURFACE('',#936,0.406); +#936 = AXIS2_PLACEMENT_3D('',#937,#938,#939); +#937 = CARTESIAN_POINT('',(320.304,195.962,0.)); +#938 = DIRECTION('',(-0.,-0.,-1.)); +#939 = DIRECTION('',(1.,0.,-0.)); +#940 = ADVANCED_FACE('',(#941),#968,.F.); +#941 = FACE_BOUND('',#942,.T.); +#942 = EDGE_LOOP('',(#943,#953,#960,#961)); +#943 = ORIENTED_EDGE('',*,*,#944,.T.); +#944 = EDGE_CURVE('',#945,#947,#949,.T.); +#945 = VERTEX_POINT('',#946); +#946 = CARTESIAN_POINT('',(321.034,201.462,0.)); +#947 = VERTEX_POINT('',#948); +#948 = CARTESIAN_POINT('',(321.034,201.462,1.69143934)); +#949 = LINE('',#950,#951); +#950 = CARTESIAN_POINT('',(321.034,201.462,0.)); +#951 = VECTOR('',#952,1.); +#952 = DIRECTION('',(0.,0.,1.)); +#953 = ORIENTED_EDGE('',*,*,#954,.T.); +#954 = EDGE_CURVE('',#947,#947,#955,.T.); +#955 = CIRCLE('',#956,1.6); +#956 = AXIS2_PLACEMENT_3D('',#957,#958,#959); +#957 = CARTESIAN_POINT('',(319.434,201.462,1.69143934)); +#958 = DIRECTION('',(0.,0.,1.)); +#959 = DIRECTION('',(1.,0.,-0.)); +#960 = ORIENTED_EDGE('',*,*,#944,.F.); +#961 = ORIENTED_EDGE('',*,*,#962,.F.); +#962 = EDGE_CURVE('',#945,#945,#963,.T.); +#963 = CIRCLE('',#964,1.6); +#964 = AXIS2_PLACEMENT_3D('',#965,#966,#967); +#965 = CARTESIAN_POINT('',(319.434,201.462,0.)); +#966 = DIRECTION('',(0.,0.,1.)); +#967 = DIRECTION('',(1.,0.,-0.)); +#968 = CYLINDRICAL_SURFACE('',#969,1.6); +#969 = AXIS2_PLACEMENT_3D('',#970,#971,#972); +#970 = CARTESIAN_POINT('',(319.434,201.462,0.)); +#971 = DIRECTION('',(-0.,-0.,-1.)); +#972 = DIRECTION('',(1.,0.,-0.)); +#973 = ADVANCED_FACE('',(#974,#984,#987,#993,#996,#999,#1002,#1005,#1008 + ,#1011,#1014,#1017,#1020,#1023),#1026,.T.); +#974 = FACE_BOUND('',#975,.T.); +#975 = EDGE_LOOP('',(#976,#977,#978,#979,#980,#981,#982,#983)); +#976 = ORIENTED_EDGE('',*,*,#223,.T.); +#977 = ORIENTED_EDGE('',*,*,#255,.T.); +#978 = ORIENTED_EDGE('',*,*,#287,.T.); +#979 = ORIENTED_EDGE('',*,*,#319,.T.); +#980 = ORIENTED_EDGE('',*,*,#351,.T.); +#981 = ORIENTED_EDGE('',*,*,#383,.T.); +#982 = ORIENTED_EDGE('',*,*,#415,.T.); +#983 = ORIENTED_EDGE('',*,*,#438,.T.); +#984 = FACE_BOUND('',#985,.T.); +#985 = EDGE_LOOP('',(#986)); +#986 = ORIENTED_EDGE('',*,*,#471,.T.); +#987 = FACE_BOUND('',#988,.T.); +#988 = EDGE_LOOP('',(#989,#990,#991,#992)); +#989 = ORIENTED_EDGE('',*,*,#513,.F.); +#990 = ORIENTED_EDGE('',*,*,#545,.F.); +#991 = ORIENTED_EDGE('',*,*,#577,.F.); +#992 = ORIENTED_EDGE('',*,*,#600,.F.); +#993 = FACE_BOUND('',#994,.T.); +#994 = EDGE_LOOP('',(#995)); +#995 = ORIENTED_EDGE('',*,*,#632,.T.); +#996 = FACE_BOUND('',#997,.T.); +#997 = EDGE_LOOP('',(#998)); +#998 = ORIENTED_EDGE('',*,*,#665,.T.); +#999 = FACE_BOUND('',#1000,.T.); +#1000 = EDGE_LOOP('',(#1001)); +#1001 = ORIENTED_EDGE('',*,*,#698,.T.); +#1002 = FACE_BOUND('',#1003,.T.); +#1003 = EDGE_LOOP('',(#1004)); +#1004 = ORIENTED_EDGE('',*,*,#731,.T.); +#1005 = FACE_BOUND('',#1006,.T.); +#1006 = EDGE_LOOP('',(#1007)); +#1007 = ORIENTED_EDGE('',*,*,#764,.T.); +#1008 = FACE_BOUND('',#1009,.T.); +#1009 = EDGE_LOOP('',(#1010)); +#1010 = ORIENTED_EDGE('',*,*,#797,.T.); +#1011 = FACE_BOUND('',#1012,.T.); +#1012 = EDGE_LOOP('',(#1013)); +#1013 = ORIENTED_EDGE('',*,*,#830,.T.); +#1014 = FACE_BOUND('',#1015,.T.); +#1015 = EDGE_LOOP('',(#1016)); +#1016 = ORIENTED_EDGE('',*,*,#863,.T.); +#1017 = FACE_BOUND('',#1018,.T.); +#1018 = EDGE_LOOP('',(#1019)); +#1019 = ORIENTED_EDGE('',*,*,#896,.T.); +#1020 = FACE_BOUND('',#1021,.T.); +#1021 = EDGE_LOOP('',(#1022)); +#1022 = ORIENTED_EDGE('',*,*,#929,.T.); +#1023 = FACE_BOUND('',#1024,.T.); +#1024 = EDGE_LOOP('',(#1025)); +#1025 = ORIENTED_EDGE('',*,*,#962,.T.); +#1026 = PLANE('',#1027); +#1027 = AXIS2_PLACEMENT_3D('',#1028,#1029,#1030); +#1028 = CARTESIAN_POINT('',(269.339,177.36211444203,0.)); +#1029 = DIRECTION('',(-0.,-0.,-1.)); +#1030 = DIRECTION('',(-1.,0.,0.)); +#1031 = ADVANCED_FACE('',(#1032,#1042,#1045,#1051,#1054,#1057,#1060, + #1063,#1066,#1069,#1072,#1075,#1078,#1081),#1084,.F.); +#1032 = FACE_BOUND('',#1033,.F.); +#1033 = EDGE_LOOP('',(#1034,#1035,#1036,#1037,#1038,#1039,#1040,#1041)); +#1034 = ORIENTED_EDGE('',*,*,#207,.T.); +#1035 = ORIENTED_EDGE('',*,*,#238,.T.); +#1036 = ORIENTED_EDGE('',*,*,#271,.T.); +#1037 = ORIENTED_EDGE('',*,*,#302,.T.); +#1038 = ORIENTED_EDGE('',*,*,#335,.T.); +#1039 = ORIENTED_EDGE('',*,*,#366,.T.); +#1040 = ORIENTED_EDGE('',*,*,#399,.T.); +#1041 = ORIENTED_EDGE('',*,*,#430,.T.); +#1042 = FACE_BOUND('',#1043,.F.); +#1043 = EDGE_LOOP('',(#1044)); +#1044 = ORIENTED_EDGE('',*,*,#463,.T.); +#1045 = FACE_BOUND('',#1046,.F.); +#1046 = EDGE_LOOP('',(#1047,#1048,#1049,#1050)); +#1047 = ORIENTED_EDGE('',*,*,#496,.F.); +#1048 = ORIENTED_EDGE('',*,*,#538,.F.); +#1049 = ORIENTED_EDGE('',*,*,#569,.F.); +#1050 = ORIENTED_EDGE('',*,*,#593,.F.); +#1051 = FACE_BOUND('',#1052,.F.); +#1052 = EDGE_LOOP('',(#1053)); +#1053 = ORIENTED_EDGE('',*,*,#624,.T.); +#1054 = FACE_BOUND('',#1055,.F.); +#1055 = EDGE_LOOP('',(#1056)); +#1056 = ORIENTED_EDGE('',*,*,#657,.T.); +#1057 = FACE_BOUND('',#1058,.F.); +#1058 = EDGE_LOOP('',(#1059)); +#1059 = ORIENTED_EDGE('',*,*,#690,.T.); +#1060 = FACE_BOUND('',#1061,.F.); +#1061 = EDGE_LOOP('',(#1062)); +#1062 = ORIENTED_EDGE('',*,*,#723,.T.); +#1063 = FACE_BOUND('',#1064,.F.); +#1064 = EDGE_LOOP('',(#1065)); +#1065 = ORIENTED_EDGE('',*,*,#756,.T.); +#1066 = FACE_BOUND('',#1067,.F.); +#1067 = EDGE_LOOP('',(#1068)); +#1068 = ORIENTED_EDGE('',*,*,#789,.T.); +#1069 = FACE_BOUND('',#1070,.F.); +#1070 = EDGE_LOOP('',(#1071)); +#1071 = ORIENTED_EDGE('',*,*,#822,.T.); +#1072 = FACE_BOUND('',#1073,.F.); +#1073 = EDGE_LOOP('',(#1074)); +#1074 = ORIENTED_EDGE('',*,*,#855,.T.); +#1075 = FACE_BOUND('',#1076,.F.); +#1076 = EDGE_LOOP('',(#1077)); +#1077 = ORIENTED_EDGE('',*,*,#888,.T.); +#1078 = FACE_BOUND('',#1079,.F.); +#1079 = EDGE_LOOP('',(#1080)); +#1080 = ORIENTED_EDGE('',*,*,#921,.T.); +#1081 = FACE_BOUND('',#1082,.F.); +#1082 = EDGE_LOOP('',(#1083)); +#1083 = ORIENTED_EDGE('',*,*,#954,.T.); +#1084 = PLANE('',#1085); +#1085 = AXIS2_PLACEMENT_3D('',#1086,#1087,#1088); +#1086 = CARTESIAN_POINT('',(269.339,177.36211444203,1.69143934)); +#1087 = DIRECTION('',(-0.,-0.,-1.)); +#1088 = DIRECTION('',(-1.,0.,0.)); +#1089 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1093)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1090,#1091,#1092)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#1090 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1091 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1092 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1093 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1090, + 'distance_accuracy_value','confusion accuracy'); +#1094 = SHAPE_DEFINITION_REPRESENTATION(#1095,#190); +#1095 = PRODUCT_DEFINITION_SHAPE('','',#1096); +#1096 = PRODUCT_DEFINITION('design','',#1097,#1100); +#1097 = PRODUCT_DEFINITION_FORMATION('','',#1098); +#1098 = PRODUCT('Open CASCADE STEP translator 7.5 1.1.1', + 'Open CASCADE STEP translator 7.5 1.1.1','',(#1099)); +#1099 = PRODUCT_CONTEXT('',#2,'mechanical'); +#1100 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1101 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1102,#1104); +#1102 = ( REPRESENTATION_RELATIONSHIP('','',#190,#180) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1103) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#1103 = ITEM_DEFINED_TRANSFORMATION('','',#11,#181); +#1104 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1105); +#1105 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','','',#175,#1096,$); +#1106 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1098)); +#1107 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1108,#1110); +#1108 = ( REPRESENTATION_RELATIONSHIP('','',#180,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1109) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#1109 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15); +#1110 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1111); +#1111 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','','',#5,#175,$); +#1112 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#177)); +#1113 = SHAPE_DEFINITION_REPRESENTATION(#1114,#1120); +#1114 = PRODUCT_DEFINITION_SHAPE('','',#1115); +#1115 = PRODUCT_DEFINITION('design','',#1116,#1119); +#1116 = PRODUCT_DEFINITION_FORMATION('','',#1117); +#1117 = PRODUCT('SB5','SB5','',(#1118)); +#1118 = PRODUCT_CONTEXT('',#2,'mechanical'); +#1119 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1120 = SHAPE_REPRESENTATION('',(#11,#1121,#1125),#1129); +#1121 = AXIS2_PLACEMENT_3D('',#1122,#1123,#1124); +#1122 = CARTESIAN_POINT('',(288.71588134765,174.54328918457,0.)); +#1123 = DIRECTION('',(1.748455531469E-07,-1.,-4.371138828674E-08)); +#1124 = DIRECTION('',(1.,1.748455531469E-07,0.)); +#1125 = AXIS2_PLACEMENT_3D('',#1126,#1127,#1128); +#1126 = CARTESIAN_POINT('',(288.71578979492,174.54321289062,0.)); +#1127 = DIRECTION('',(0.,0.,1.)); +#1128 = DIRECTION('',(1.,0.,0.)); +#1129 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1133)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1130,#1131,#1132)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#1130 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1131 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1132 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1133 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1130, + 'distance_accuracy_value','confusion accuracy'); +#1134 = SHAPE_REPRESENTATION('',(#11,#1135,#1285,#1699,#2113),#6502); +#1135 = MANIFOLD_SOLID_BREP('',#1136); +#1136 = CLOSED_SHELL('',(#1137,#1177,#1208,#1239,#1261,#1273)); +#1137 = ADVANCED_FACE('',(#1138),#1172,.F.); +#1138 = FACE_BOUND('',#1139,.T.); +#1139 = EDGE_LOOP('',(#1140,#1150,#1158,#1166)); +#1140 = ORIENTED_EDGE('',*,*,#1141,.T.); +#1141 = EDGE_CURVE('',#1142,#1144,#1146,.T.); +#1142 = VERTEX_POINT('',#1143); +#1143 = CARTESIAN_POINT('',(-0.8,0.5,-0.4)); +#1144 = VERTEX_POINT('',#1145); +#1145 = CARTESIAN_POINT('',(-0.8,5.E-02,-0.4)); +#1146 = LINE('',#1147,#1148); +#1147 = CARTESIAN_POINT('',(-0.8,0.5,-0.4)); +#1148 = VECTOR('',#1149,1.); +#1149 = DIRECTION('',(-0.,-1.,-0.)); +#1150 = ORIENTED_EDGE('',*,*,#1151,.T.); +#1151 = EDGE_CURVE('',#1144,#1152,#1154,.T.); +#1152 = VERTEX_POINT('',#1153); +#1153 = CARTESIAN_POINT('',(-0.8,5.E-02,0.4)); +#1154 = LINE('',#1155,#1156); +#1155 = CARTESIAN_POINT('',(-0.8,5.E-02,-0.4)); +#1156 = VECTOR('',#1157,1.); +#1157 = DIRECTION('',(-0.,-0.,1.)); +#1158 = ORIENTED_EDGE('',*,*,#1159,.F.); +#1159 = EDGE_CURVE('',#1160,#1152,#1162,.T.); +#1160 = VERTEX_POINT('',#1161); +#1161 = CARTESIAN_POINT('',(-0.8,0.5,0.4)); +#1162 = LINE('',#1163,#1164); +#1163 = CARTESIAN_POINT('',(-0.8,0.5,0.4)); +#1164 = VECTOR('',#1165,1.); +#1165 = DIRECTION('',(-0.,-1.,-0.)); +#1166 = ORIENTED_EDGE('',*,*,#1167,.F.); +#1167 = EDGE_CURVE('',#1142,#1160,#1168,.T.); +#1168 = LINE('',#1169,#1170); +#1169 = CARTESIAN_POINT('',(-0.8,0.5,-0.4)); +#1170 = VECTOR('',#1171,1.); +#1171 = DIRECTION('',(1.355252715607E-16,0.,1.)); +#1172 = PLANE('',#1173); +#1173 = AXIS2_PLACEMENT_3D('',#1174,#1175,#1176); +#1174 = CARTESIAN_POINT('',(-0.8,0.5,-0.4)); +#1175 = DIRECTION('',(1.,0.,-1.355252715607E-16)); +#1176 = DIRECTION('',(-1.355252715607E-16,0.,-1.)); +#1177 = ADVANCED_FACE('',(#1178),#1203,.F.); +#1178 = FACE_BOUND('',#1179,.T.); +#1179 = EDGE_LOOP('',(#1180,#1181,#1189,#1197)); +#1180 = ORIENTED_EDGE('',*,*,#1159,.T.); +#1181 = ORIENTED_EDGE('',*,*,#1182,.F.); +#1182 = EDGE_CURVE('',#1183,#1152,#1185,.T.); +#1183 = VERTEX_POINT('',#1184); +#1184 = CARTESIAN_POINT('',(0.8,5.E-02,0.4)); +#1185 = LINE('',#1186,#1187); +#1186 = CARTESIAN_POINT('',(-0.8,5.E-02,0.4)); +#1187 = VECTOR('',#1188,1.); +#1188 = DIRECTION('',(-1.,-4.235164736272E-18,-0.)); +#1189 = ORIENTED_EDGE('',*,*,#1190,.F.); +#1190 = EDGE_CURVE('',#1191,#1183,#1193,.T.); +#1191 = VERTEX_POINT('',#1192); +#1192 = CARTESIAN_POINT('',(0.8,0.5,0.4)); +#1193 = LINE('',#1194,#1195); +#1194 = CARTESIAN_POINT('',(0.8,0.5,0.4)); +#1195 = VECTOR('',#1196,1.); +#1196 = DIRECTION('',(-0.,-1.,-0.)); +#1197 = ORIENTED_EDGE('',*,*,#1198,.F.); +#1198 = EDGE_CURVE('',#1160,#1191,#1199,.T.); +#1199 = LINE('',#1200,#1201); +#1200 = CARTESIAN_POINT('',(0.8,0.5,0.4)); +#1201 = VECTOR('',#1202,1.); +#1202 = DIRECTION('',(1.,-0.,-1.355252715607E-16)); +#1203 = PLANE('',#1204); +#1204 = AXIS2_PLACEMENT_3D('',#1205,#1206,#1207); +#1205 = CARTESIAN_POINT('',(0.8,0.5,0.4)); +#1206 = DIRECTION('',(-1.355252715607E-16,0.,-1.)); +#1207 = DIRECTION('',(-1.,0.,1.355252715607E-16)); +#1208 = ADVANCED_FACE('',(#1209),#1234,.F.); +#1209 = FACE_BOUND('',#1210,.T.); +#1210 = EDGE_LOOP('',(#1211,#1212,#1220,#1228)); +#1211 = ORIENTED_EDGE('',*,*,#1190,.T.); +#1212 = ORIENTED_EDGE('',*,*,#1213,.F.); +#1213 = EDGE_CURVE('',#1214,#1183,#1216,.T.); +#1214 = VERTEX_POINT('',#1215); +#1215 = CARTESIAN_POINT('',(0.8,5.E-02,-0.4)); +#1216 = LINE('',#1217,#1218); +#1217 = CARTESIAN_POINT('',(0.8,5.E-02,-0.4)); +#1218 = VECTOR('',#1219,1.); +#1219 = DIRECTION('',(-0.,-0.,1.)); +#1220 = ORIENTED_EDGE('',*,*,#1221,.F.); +#1221 = EDGE_CURVE('',#1222,#1214,#1224,.T.); +#1222 = VERTEX_POINT('',#1223); +#1223 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1224 = LINE('',#1225,#1226); +#1225 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1226 = VECTOR('',#1227,1.); +#1227 = DIRECTION('',(-0.,-1.,-0.)); +#1228 = ORIENTED_EDGE('',*,*,#1229,.F.); +#1229 = EDGE_CURVE('',#1191,#1222,#1230,.T.); +#1230 = LINE('',#1231,#1232); +#1231 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1232 = VECTOR('',#1233,1.); +#1233 = DIRECTION('',(-1.355252715607E-16,-0.,-1.)); +#1234 = PLANE('',#1235); +#1235 = AXIS2_PLACEMENT_3D('',#1236,#1237,#1238); +#1236 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1237 = DIRECTION('',(-1.,0.,1.355252715607E-16)); +#1238 = DIRECTION('',(1.355252715607E-16,0.,1.)); +#1239 = ADVANCED_FACE('',(#1240),#1256,.F.); +#1240 = FACE_BOUND('',#1241,.T.); +#1241 = EDGE_LOOP('',(#1242,#1243,#1249,#1250)); +#1242 = ORIENTED_EDGE('',*,*,#1221,.T.); +#1243 = ORIENTED_EDGE('',*,*,#1244,.T.); +#1244 = EDGE_CURVE('',#1214,#1144,#1245,.T.); +#1245 = LINE('',#1246,#1247); +#1246 = CARTESIAN_POINT('',(-0.8,5.E-02,-0.4)); +#1247 = VECTOR('',#1248,1.); +#1248 = DIRECTION('',(-1.,-4.235164736272E-18,-0.)); +#1249 = ORIENTED_EDGE('',*,*,#1141,.F.); +#1250 = ORIENTED_EDGE('',*,*,#1251,.F.); +#1251 = EDGE_CURVE('',#1222,#1142,#1252,.T.); +#1252 = LINE('',#1253,#1254); +#1253 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1254 = VECTOR('',#1255,1.); +#1255 = DIRECTION('',(-1.,0.,1.355252715607E-16)); +#1256 = PLANE('',#1257); +#1257 = AXIS2_PLACEMENT_3D('',#1258,#1259,#1260); +#1258 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1259 = DIRECTION('',(1.355252715607E-16,-0.,1.)); +#1260 = DIRECTION('',(1.,0.,-1.355252715607E-16)); +#1261 = ADVANCED_FACE('',(#1262),#1268,.F.); +#1262 = FACE_BOUND('',#1263,.T.); +#1263 = EDGE_LOOP('',(#1264,#1265,#1266,#1267)); +#1264 = ORIENTED_EDGE('',*,*,#1167,.T.); +#1265 = ORIENTED_EDGE('',*,*,#1198,.T.); +#1266 = ORIENTED_EDGE('',*,*,#1229,.T.); +#1267 = ORIENTED_EDGE('',*,*,#1251,.T.); +#1268 = PLANE('',#1269); +#1269 = AXIS2_PLACEMENT_3D('',#1270,#1271,#1272); +#1270 = CARTESIAN_POINT('',(-0.8,0.5,0.4)); +#1271 = DIRECTION('',(0.,-1.,0.)); +#1272 = DIRECTION('',(0.,-0.,-1.)); +#1273 = ADVANCED_FACE('',(#1274),#1280,.F.); +#1274 = FACE_BOUND('',#1275,.T.); +#1275 = EDGE_LOOP('',(#1276,#1277,#1278,#1279)); +#1276 = ORIENTED_EDGE('',*,*,#1182,.T.); +#1277 = ORIENTED_EDGE('',*,*,#1151,.F.); +#1278 = ORIENTED_EDGE('',*,*,#1244,.F.); +#1279 = ORIENTED_EDGE('',*,*,#1213,.T.); +#1280 = PLANE('',#1281); +#1281 = AXIS2_PLACEMENT_3D('',#1282,#1283,#1284); +#1282 = CARTESIAN_POINT('',(-0.8,5.E-02,-0.4)); +#1283 = DIRECTION('',(-4.235164736272E-18,1.,0.)); +#1284 = DIRECTION('',(-1.,-4.235164736272E-18,0.)); +#1285 = MANIFOLD_SOLID_BREP('',#1286); +#1286 = CLOSED_SHELL('',(#1287,#1327,#1367,#1398,#1429,#1492,#1525,#1581 + ,#1607,#1629,#1641,#1658,#1670,#1687)); +#1287 = ADVANCED_FACE('',(#1288),#1322,.F.); +#1288 = FACE_BOUND('',#1289,.T.); +#1289 = EDGE_LOOP('',(#1290,#1300,#1308,#1316)); +#1290 = ORIENTED_EDGE('',*,*,#1291,.F.); +#1291 = EDGE_CURVE('',#1292,#1294,#1296,.T.); +#1292 = VERTEX_POINT('',#1293); +#1293 = CARTESIAN_POINT('',(-0.55,5.E-02,-0.4)); +#1294 = VERTEX_POINT('',#1295); +#1295 = CARTESIAN_POINT('',(-0.55,5.E-02,0.4)); +#1296 = LINE('',#1297,#1298); +#1297 = CARTESIAN_POINT('',(-0.55,5.E-02,-0.4)); +#1298 = VECTOR('',#1299,1.); +#1299 = DIRECTION('',(0.,0.,1.)); +#1300 = ORIENTED_EDGE('',*,*,#1301,.F.); +#1301 = EDGE_CURVE('',#1302,#1292,#1304,.T.); +#1302 = VERTEX_POINT('',#1303); +#1303 = CARTESIAN_POINT('',(-0.8,5.E-02,-0.4)); +#1304 = LINE('',#1305,#1306); +#1305 = CARTESIAN_POINT('',(-0.8,5.E-02,-0.4)); +#1306 = VECTOR('',#1307,1.); +#1307 = DIRECTION('',(1.,0.,0.)); +#1308 = ORIENTED_EDGE('',*,*,#1309,.F.); +#1309 = EDGE_CURVE('',#1310,#1302,#1312,.T.); +#1310 = VERTEX_POINT('',#1311); +#1311 = CARTESIAN_POINT('',(-0.8,5.E-02,0.4)); +#1312 = LINE('',#1313,#1314); +#1313 = CARTESIAN_POINT('',(-0.8,5.E-02,-0.4)); +#1314 = VECTOR('',#1315,1.); +#1315 = DIRECTION('',(0.,0.,-1.)); +#1316 = ORIENTED_EDGE('',*,*,#1317,.T.); +#1317 = EDGE_CURVE('',#1310,#1294,#1318,.T.); +#1318 = LINE('',#1319,#1320); +#1319 = CARTESIAN_POINT('',(-0.8,5.E-02,0.4)); +#1320 = VECTOR('',#1321,1.); +#1321 = DIRECTION('',(1.,0.,0.)); +#1322 = PLANE('',#1323); +#1323 = AXIS2_PLACEMENT_3D('',#1324,#1325,#1326); +#1324 = CARTESIAN_POINT('',(-0.8,5.E-02,-0.4)); +#1325 = DIRECTION('',(0.,-1.,0.)); +#1326 = DIRECTION('',(0.,-0.,-1.)); +#1327 = ADVANCED_FACE('',(#1328),#1362,.F.); +#1328 = FACE_BOUND('',#1329,.T.); +#1329 = EDGE_LOOP('',(#1330,#1340,#1348,#1356)); +#1330 = ORIENTED_EDGE('',*,*,#1331,.F.); +#1331 = EDGE_CURVE('',#1332,#1334,#1336,.T.); +#1332 = VERTEX_POINT('',#1333); +#1333 = CARTESIAN_POINT('',(-0.55,0.,0.4)); +#1334 = VERTEX_POINT('',#1335); +#1335 = CARTESIAN_POINT('',(-0.55,2.168404344971E-16,-0.4)); +#1336 = LINE('',#1337,#1338); +#1337 = CARTESIAN_POINT('',(-0.55,2.168404344971E-16,0.4)); +#1338 = VECTOR('',#1339,1.); +#1339 = DIRECTION('',(0.,0.,-1.)); +#1340 = ORIENTED_EDGE('',*,*,#1341,.F.); +#1341 = EDGE_CURVE('',#1342,#1332,#1344,.T.); +#1342 = VERTEX_POINT('',#1343); +#1343 = CARTESIAN_POINT('',(-0.85,0.,0.4)); +#1344 = LINE('',#1345,#1346); +#1345 = CARTESIAN_POINT('',(-0.85,0.,0.4)); +#1346 = VECTOR('',#1347,1.); +#1347 = DIRECTION('',(1.,0.,0.)); +#1348 = ORIENTED_EDGE('',*,*,#1349,.F.); +#1349 = EDGE_CURVE('',#1350,#1342,#1352,.T.); +#1350 = VERTEX_POINT('',#1351); +#1351 = CARTESIAN_POINT('',(-0.85,2.168404344971E-16,-0.4)); +#1352 = LINE('',#1353,#1354); +#1353 = CARTESIAN_POINT('',(-0.85,2.168404344971E-16,0.4)); +#1354 = VECTOR('',#1355,1.); +#1355 = DIRECTION('',(0.,0.,1.)); +#1356 = ORIENTED_EDGE('',*,*,#1357,.T.); +#1357 = EDGE_CURVE('',#1350,#1334,#1358,.T.); +#1358 = LINE('',#1359,#1360); +#1359 = CARTESIAN_POINT('',(-0.85,2.168404344971E-16,-0.4)); +#1360 = VECTOR('',#1361,1.); +#1361 = DIRECTION('',(1.,0.,0.)); +#1362 = PLANE('',#1363); +#1363 = AXIS2_PLACEMENT_3D('',#1364,#1365,#1366); +#1364 = CARTESIAN_POINT('',(-0.85,2.168404344971E-16,0.4)); +#1365 = DIRECTION('',(0.,1.,0.)); +#1366 = DIRECTION('',(0.,-0.,1.)); +#1367 = ADVANCED_FACE('',(#1368),#1393,.T.); +#1368 = FACE_BOUND('',#1369,.T.); +#1369 = EDGE_LOOP('',(#1370,#1378,#1379,#1387)); +#1370 = ORIENTED_EDGE('',*,*,#1371,.T.); +#1371 = EDGE_CURVE('',#1372,#1310,#1374,.T.); +#1372 = VERTEX_POINT('',#1373); +#1373 = CARTESIAN_POINT('',(-0.8,0.5,0.4)); +#1374 = LINE('',#1375,#1376); +#1375 = CARTESIAN_POINT('',(-0.8,0.5,0.4)); +#1376 = VECTOR('',#1377,1.); +#1377 = DIRECTION('',(1.971276677246E-16,-1.,0.)); +#1378 = ORIENTED_EDGE('',*,*,#1309,.T.); +#1379 = ORIENTED_EDGE('',*,*,#1380,.F.); +#1380 = EDGE_CURVE('',#1381,#1302,#1383,.T.); +#1381 = VERTEX_POINT('',#1382); +#1382 = CARTESIAN_POINT('',(-0.8,0.5,-0.4)); +#1383 = LINE('',#1384,#1385); +#1384 = CARTESIAN_POINT('',(-0.8,0.5,-0.4)); +#1385 = VECTOR('',#1386,1.); +#1386 = DIRECTION('',(1.971276677246E-16,-1.,0.)); +#1387 = ORIENTED_EDGE('',*,*,#1388,.T.); +#1388 = EDGE_CURVE('',#1381,#1372,#1389,.T.); +#1389 = LINE('',#1390,#1391); +#1390 = CARTESIAN_POINT('',(-0.8,0.5,-0.4)); +#1391 = VECTOR('',#1392,1.); +#1392 = DIRECTION('',(0.,0.,1.)); +#1393 = PLANE('',#1394); +#1394 = AXIS2_PLACEMENT_3D('',#1395,#1396,#1397); +#1395 = CARTESIAN_POINT('',(-0.8,0.5,-0.4)); +#1396 = DIRECTION('',(1.,1.971276677246E-16,-0.)); +#1397 = DIRECTION('',(-1.971276677246E-16,1.,0.)); +#1398 = ADVANCED_FACE('',(#1399),#1424,.T.); +#1399 = FACE_BOUND('',#1400,.T.); +#1400 = EDGE_LOOP('',(#1401,#1409,#1410,#1418)); +#1401 = ORIENTED_EDGE('',*,*,#1402,.T.); +#1402 = EDGE_CURVE('',#1403,#1350,#1405,.T.); +#1403 = VERTEX_POINT('',#1404); +#1404 = CARTESIAN_POINT('',(-0.85,0.55,-0.4)); +#1405 = LINE('',#1406,#1407); +#1406 = CARTESIAN_POINT('',(-0.85,0.55,-0.4)); +#1407 = VECTOR('',#1408,1.); +#1408 = DIRECTION('',(1.971276677246E-16,-1.,0.)); +#1409 = ORIENTED_EDGE('',*,*,#1349,.T.); +#1410 = ORIENTED_EDGE('',*,*,#1411,.F.); +#1411 = EDGE_CURVE('',#1412,#1342,#1414,.T.); +#1412 = VERTEX_POINT('',#1413); +#1413 = CARTESIAN_POINT('',(-0.85,0.55,0.4)); +#1414 = LINE('',#1415,#1416); +#1415 = CARTESIAN_POINT('',(-0.85,0.55,0.4)); +#1416 = VECTOR('',#1417,1.); +#1417 = DIRECTION('',(1.971276677246E-16,-1.,0.)); +#1418 = ORIENTED_EDGE('',*,*,#1419,.T.); +#1419 = EDGE_CURVE('',#1412,#1403,#1420,.T.); +#1420 = LINE('',#1421,#1422); +#1421 = CARTESIAN_POINT('',(-0.85,0.55,0.4)); +#1422 = VECTOR('',#1423,1.); +#1423 = DIRECTION('',(0.,0.,-1.)); +#1424 = PLANE('',#1425); +#1425 = AXIS2_PLACEMENT_3D('',#1426,#1427,#1428); +#1426 = CARTESIAN_POINT('',(-0.85,0.55,0.4)); +#1427 = DIRECTION('',(-1.,-1.971276677246E-16,0.)); +#1428 = DIRECTION('',(1.971276677246E-16,-1.,0.)); +#1429 = ADVANCED_FACE('',(#1430),#1487,.F.); +#1430 = FACE_BOUND('',#1431,.T.); +#1431 = EDGE_LOOP('',(#1432,#1442,#1450,#1458,#1464,#1465,#1473,#1481)); +#1432 = ORIENTED_EDGE('',*,*,#1433,.T.); +#1433 = EDGE_CURVE('',#1434,#1436,#1438,.T.); +#1434 = VERTEX_POINT('',#1435); +#1435 = CARTESIAN_POINT('',(-0.55,0.5,-0.25)); +#1436 = VERTEX_POINT('',#1437); +#1437 = CARTESIAN_POINT('',(-0.55,0.5,0.25)); +#1438 = LINE('',#1439,#1440); +#1439 = CARTESIAN_POINT('',(-0.55,0.5,-0.4)); +#1440 = VECTOR('',#1441,1.); +#1441 = DIRECTION('',(0.,0.,1.)); +#1442 = ORIENTED_EDGE('',*,*,#1443,.F.); +#1443 = EDGE_CURVE('',#1444,#1436,#1446,.T.); +#1444 = VERTEX_POINT('',#1445); +#1445 = CARTESIAN_POINT('',(-0.675,0.5,0.25)); +#1446 = LINE('',#1447,#1448); +#1447 = CARTESIAN_POINT('',(-0.55,0.5,0.25)); +#1448 = VECTOR('',#1449,1.); +#1449 = DIRECTION('',(1.,3.614007241618E-16,5.77761333104E-47)); +#1450 = ORIENTED_EDGE('',*,*,#1451,.F.); +#1451 = EDGE_CURVE('',#1452,#1444,#1454,.T.); +#1452 = VERTEX_POINT('',#1453); +#1453 = CARTESIAN_POINT('',(-0.675,0.5,0.4)); +#1454 = LINE('',#1455,#1456); +#1455 = CARTESIAN_POINT('',(-0.675,0.5,0.4)); +#1456 = VECTOR('',#1457,1.); +#1457 = DIRECTION('',(0.,0.,-1.)); +#1458 = ORIENTED_EDGE('',*,*,#1459,.F.); +#1459 = EDGE_CURVE('',#1372,#1452,#1460,.T.); +#1460 = LINE('',#1461,#1462); +#1461 = CARTESIAN_POINT('',(-1.626560977094,0.5,0.4)); +#1462 = VECTOR('',#1463,1.); +#1463 = DIRECTION('',(1.,3.614007241618E-16,-0.)); +#1464 = ORIENTED_EDGE('',*,*,#1388,.F.); +#1465 = ORIENTED_EDGE('',*,*,#1466,.T.); +#1466 = EDGE_CURVE('',#1381,#1467,#1469,.T.); +#1467 = VERTEX_POINT('',#1468); +#1468 = CARTESIAN_POINT('',(-0.675,0.5,-0.4)); +#1469 = LINE('',#1470,#1471); +#1470 = CARTESIAN_POINT('',(-1.626560977094,0.5,-0.4)); +#1471 = VECTOR('',#1472,1.); +#1472 = DIRECTION('',(1.,3.614007241618E-16,-0.)); +#1473 = ORIENTED_EDGE('',*,*,#1474,.F.); +#1474 = EDGE_CURVE('',#1475,#1467,#1477,.T.); +#1475 = VERTEX_POINT('',#1476); +#1476 = CARTESIAN_POINT('',(-0.675,0.5,-0.25)); +#1477 = LINE('',#1478,#1479); +#1478 = CARTESIAN_POINT('',(-0.675,0.5,-0.4)); +#1479 = VECTOR('',#1480,1.); +#1480 = DIRECTION('',(0.,0.,-1.)); +#1481 = ORIENTED_EDGE('',*,*,#1482,.F.); +#1482 = EDGE_CURVE('',#1434,#1475,#1483,.T.); +#1483 = LINE('',#1484,#1485); +#1484 = CARTESIAN_POINT('',(-0.55,0.5,-0.25)); +#1485 = VECTOR('',#1486,1.); +#1486 = DIRECTION('',(-1.,-3.614007241618E-16,-5.77761333104E-47)); +#1487 = PLANE('',#1488); +#1488 = AXIS2_PLACEMENT_3D('',#1489,#1490,#1491); +#1489 = CARTESIAN_POINT('',(-1.626560977094,0.5,-0.4)); +#1490 = DIRECTION('',(-3.614007241618E-16,1.,0.)); +#1491 = DIRECTION('',(-1.,-3.614007241618E-16,0.)); +#1492 = ADVANCED_FACE('',(#1493),#1520,.F.); +#1493 = FACE_BOUND('',#1494,.T.); +#1494 = EDGE_LOOP('',(#1495,#1503,#1509,#1510,#1511,#1512,#1518,#1519)); +#1495 = ORIENTED_EDGE('',*,*,#1496,.T.); +#1496 = EDGE_CURVE('',#1403,#1497,#1499,.T.); +#1497 = VERTEX_POINT('',#1498); +#1498 = CARTESIAN_POINT('',(-0.675,0.55,-0.4)); +#1499 = LINE('',#1500,#1501); +#1500 = CARTESIAN_POINT('',(-1.626560977094,0.55,-0.4)); +#1501 = VECTOR('',#1502,1.); +#1502 = DIRECTION('',(1.,3.614007241618E-16,-0.)); +#1503 = ORIENTED_EDGE('',*,*,#1504,.F.); +#1504 = EDGE_CURVE('',#1467,#1497,#1505,.T.); +#1505 = LINE('',#1506,#1507); +#1506 = CARTESIAN_POINT('',(-0.675,-1.E-03,-0.4)); +#1507 = VECTOR('',#1508,1.); +#1508 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#1509 = ORIENTED_EDGE('',*,*,#1466,.F.); +#1510 = ORIENTED_EDGE('',*,*,#1380,.T.); +#1511 = ORIENTED_EDGE('',*,*,#1301,.T.); +#1512 = ORIENTED_EDGE('',*,*,#1513,.F.); +#1513 = EDGE_CURVE('',#1334,#1292,#1514,.T.); +#1514 = LINE('',#1515,#1516); +#1515 = CARTESIAN_POINT('',(-0.55,0.275,-0.4)); +#1516 = VECTOR('',#1517,1.); +#1517 = DIRECTION('',(0.,1.,1.084202172486E-15)); +#1518 = ORIENTED_EDGE('',*,*,#1357,.F.); +#1519 = ORIENTED_EDGE('',*,*,#1402,.F.); +#1520 = PLANE('',#1521); +#1521 = AXIS2_PLACEMENT_3D('',#1522,#1523,#1524); +#1522 = CARTESIAN_POINT('',(-1.626560977094,0.55,-0.4)); +#1523 = DIRECTION('',(-3.918314502741E-31,1.084202172486E-15,1.)); +#1524 = DIRECTION('',(0.,-1.,1.084202172486E-15)); +#1525 = ADVANCED_FACE('',(#1526),#1576,.F.); +#1526 = FACE_BOUND('',#1527,.T.); +#1527 = EDGE_LOOP('',(#1528,#1538,#1546,#1554,#1562,#1568,#1569,#1570)); +#1528 = ORIENTED_EDGE('',*,*,#1529,.F.); +#1529 = EDGE_CURVE('',#1530,#1532,#1534,.T.); +#1530 = VERTEX_POINT('',#1531); +#1531 = CARTESIAN_POINT('',(-0.675,0.55,0.25)); +#1532 = VERTEX_POINT('',#1533); +#1533 = CARTESIAN_POINT('',(-0.675,0.55,0.4)); +#1534 = LINE('',#1535,#1536); +#1535 = CARTESIAN_POINT('',(-0.675,0.55,0.4)); +#1536 = VECTOR('',#1537,1.); +#1537 = DIRECTION('',(-0.,-0.,1.)); +#1538 = ORIENTED_EDGE('',*,*,#1539,.F.); +#1539 = EDGE_CURVE('',#1540,#1530,#1542,.T.); +#1540 = VERTEX_POINT('',#1541); +#1541 = CARTESIAN_POINT('',(-0.55,0.55,0.25)); +#1542 = LINE('',#1543,#1544); +#1543 = CARTESIAN_POINT('',(-0.55,0.55,0.25)); +#1544 = VECTOR('',#1545,1.); +#1545 = DIRECTION('',(-1.,8.673617379884E-16,0.)); +#1546 = ORIENTED_EDGE('',*,*,#1547,.T.); +#1547 = EDGE_CURVE('',#1540,#1548,#1550,.T.); +#1548 = VERTEX_POINT('',#1549); +#1549 = CARTESIAN_POINT('',(-0.55,0.55,-0.25)); +#1550 = LINE('',#1551,#1552); +#1551 = CARTESIAN_POINT('',(-0.55,0.55,0.4)); +#1552 = VECTOR('',#1553,1.); +#1553 = DIRECTION('',(0.,0.,-1.)); +#1554 = ORIENTED_EDGE('',*,*,#1555,.F.); +#1555 = EDGE_CURVE('',#1556,#1548,#1558,.T.); +#1556 = VERTEX_POINT('',#1557); +#1557 = CARTESIAN_POINT('',(-0.675,0.55,-0.25)); +#1558 = LINE('',#1559,#1560); +#1559 = CARTESIAN_POINT('',(-0.55,0.55,-0.25)); +#1560 = VECTOR('',#1561,1.); +#1561 = DIRECTION('',(1.,-8.673617379884E-16,-0.)); +#1562 = ORIENTED_EDGE('',*,*,#1563,.F.); +#1563 = EDGE_CURVE('',#1497,#1556,#1564,.T.); +#1564 = LINE('',#1565,#1566); +#1565 = CARTESIAN_POINT('',(-0.675,0.55,-0.4)); +#1566 = VECTOR('',#1567,1.); +#1567 = DIRECTION('',(0.,0.,1.)); +#1568 = ORIENTED_EDGE('',*,*,#1496,.F.); +#1569 = ORIENTED_EDGE('',*,*,#1419,.F.); +#1570 = ORIENTED_EDGE('',*,*,#1571,.T.); +#1571 = EDGE_CURVE('',#1412,#1532,#1572,.T.); +#1572 = LINE('',#1573,#1574); +#1573 = CARTESIAN_POINT('',(-1.626560977094,0.55,0.4)); +#1574 = VECTOR('',#1575,1.); +#1575 = DIRECTION('',(1.,3.614007241618E-16,-0.)); +#1576 = PLANE('',#1577); +#1577 = AXIS2_PLACEMENT_3D('',#1578,#1579,#1580); +#1578 = CARTESIAN_POINT('',(-1.626560977094,0.55,0.4)); +#1579 = DIRECTION('',(3.614007241618E-16,-1.,0.)); +#1580 = DIRECTION('',(1.,3.614007241618E-16,0.)); +#1581 = ADVANCED_FACE('',(#1582),#1602,.F.); +#1582 = FACE_BOUND('',#1583,.T.); +#1583 = EDGE_LOOP('',(#1584,#1585,#1591,#1592,#1593,#1594,#1600,#1601)); +#1584 = ORIENTED_EDGE('',*,*,#1459,.T.); +#1585 = ORIENTED_EDGE('',*,*,#1586,.T.); +#1586 = EDGE_CURVE('',#1452,#1532,#1587,.T.); +#1587 = LINE('',#1588,#1589); +#1588 = CARTESIAN_POINT('',(-0.675,-1.E-03,0.4)); +#1589 = VECTOR('',#1590,1.); +#1590 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#1591 = ORIENTED_EDGE('',*,*,#1571,.F.); +#1592 = ORIENTED_EDGE('',*,*,#1411,.T.); +#1593 = ORIENTED_EDGE('',*,*,#1341,.T.); +#1594 = ORIENTED_EDGE('',*,*,#1595,.F.); +#1595 = EDGE_CURVE('',#1294,#1332,#1596,.T.); +#1596 = LINE('',#1597,#1598); +#1597 = CARTESIAN_POINT('',(-0.55,0.275,0.4)); +#1598 = VECTOR('',#1599,1.); +#1599 = DIRECTION('',(0.,-1.,0.)); +#1600 = ORIENTED_EDGE('',*,*,#1317,.F.); +#1601 = ORIENTED_EDGE('',*,*,#1371,.F.); +#1602 = PLANE('',#1603); +#1603 = AXIS2_PLACEMENT_3D('',#1604,#1605,#1606); +#1604 = CARTESIAN_POINT('',(-1.626560977094,0.5,0.4)); +#1605 = DIRECTION('',(0.,0.,-1.)); +#1606 = DIRECTION('',(-1.,0.,0.)); +#1607 = ADVANCED_FACE('',(#1608),#1624,.F.); +#1608 = FACE_BOUND('',#1609,.T.); +#1609 = EDGE_LOOP('',(#1610,#1611,#1617,#1618)); +#1610 = ORIENTED_EDGE('',*,*,#1547,.F.); +#1611 = ORIENTED_EDGE('',*,*,#1612,.F.); +#1612 = EDGE_CURVE('',#1436,#1540,#1613,.T.); +#1613 = LINE('',#1614,#1615); +#1614 = CARTESIAN_POINT('',(-0.55,-1.E-03,0.25)); +#1615 = VECTOR('',#1616,1.); +#1616 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#1617 = ORIENTED_EDGE('',*,*,#1433,.F.); +#1618 = ORIENTED_EDGE('',*,*,#1619,.T.); +#1619 = EDGE_CURVE('',#1434,#1548,#1620,.T.); +#1620 = LINE('',#1621,#1622); +#1621 = CARTESIAN_POINT('',(-0.55,-1.E-03,-0.25)); +#1622 = VECTOR('',#1623,1.); +#1623 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#1624 = PLANE('',#1625); +#1625 = AXIS2_PLACEMENT_3D('',#1626,#1627,#1628); +#1626 = CARTESIAN_POINT('',(-0.55,0.55,0.4)); +#1627 = DIRECTION('',(-1.,0.,0.)); +#1628 = DIRECTION('',(0.,0.,1.)); +#1629 = ADVANCED_FACE('',(#1630),#1636,.T.); +#1630 = FACE_BOUND('',#1631,.T.); +#1631 = EDGE_LOOP('',(#1632,#1633,#1634,#1635)); +#1632 = ORIENTED_EDGE('',*,*,#1595,.T.); +#1633 = ORIENTED_EDGE('',*,*,#1331,.T.); +#1634 = ORIENTED_EDGE('',*,*,#1513,.T.); +#1635 = ORIENTED_EDGE('',*,*,#1291,.T.); +#1636 = PLANE('',#1637); +#1637 = AXIS2_PLACEMENT_3D('',#1638,#1639,#1640); +#1638 = CARTESIAN_POINT('',(-0.55,2.5E-02,-1.626303258728E-16)); +#1639 = DIRECTION('',(1.,0.,0.)); +#1640 = DIRECTION('',(0.,0.,-1.)); +#1641 = ADVANCED_FACE('',(#1642),#1653,.F.); +#1642 = FACE_BOUND('',#1643,.T.); +#1643 = EDGE_LOOP('',(#1644,#1645,#1646,#1647)); +#1644 = ORIENTED_EDGE('',*,*,#1474,.T.); +#1645 = ORIENTED_EDGE('',*,*,#1504,.T.); +#1646 = ORIENTED_EDGE('',*,*,#1563,.T.); +#1647 = ORIENTED_EDGE('',*,*,#1648,.F.); +#1648 = EDGE_CURVE('',#1475,#1556,#1649,.T.); +#1649 = LINE('',#1650,#1651); +#1650 = CARTESIAN_POINT('',(-0.675,-1.E-03,-0.25)); +#1651 = VECTOR('',#1652,1.); +#1652 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#1653 = PLANE('',#1654); +#1654 = AXIS2_PLACEMENT_3D('',#1655,#1656,#1657); +#1655 = CARTESIAN_POINT('',(-0.675,-1.E-03,-0.4)); +#1656 = DIRECTION('',(-1.,2.710505431214E-16,0.)); +#1657 = DIRECTION('',(-2.710505431214E-16,-1.,0.)); +#1658 = ADVANCED_FACE('',(#1659),#1665,.F.); +#1659 = FACE_BOUND('',#1660,.T.); +#1660 = EDGE_LOOP('',(#1661,#1662,#1663,#1664)); +#1661 = ORIENTED_EDGE('',*,*,#1482,.T.); +#1662 = ORIENTED_EDGE('',*,*,#1648,.T.); +#1663 = ORIENTED_EDGE('',*,*,#1555,.T.); +#1664 = ORIENTED_EDGE('',*,*,#1619,.F.); +#1665 = PLANE('',#1666); +#1666 = AXIS2_PLACEMENT_3D('',#1667,#1668,#1669); +#1667 = CARTESIAN_POINT('',(-0.55,-1.E-03,-0.25)); +#1668 = DIRECTION('',(-4.078315292499E-47,-4.701977403289E-32,1.)); +#1669 = DIRECTION('',(0.,-1.,-4.701977403289E-32)); +#1670 = ADVANCED_FACE('',(#1671),#1682,.F.); +#1671 = FACE_BOUND('',#1672,.T.); +#1672 = EDGE_LOOP('',(#1673,#1674,#1675,#1676)); +#1673 = ORIENTED_EDGE('',*,*,#1443,.T.); +#1674 = ORIENTED_EDGE('',*,*,#1612,.T.); +#1675 = ORIENTED_EDGE('',*,*,#1539,.T.); +#1676 = ORIENTED_EDGE('',*,*,#1677,.F.); +#1677 = EDGE_CURVE('',#1444,#1530,#1678,.T.); +#1678 = LINE('',#1679,#1680); +#1679 = CARTESIAN_POINT('',(-0.675,-1.E-03,0.25)); +#1680 = VECTOR('',#1681,1.); +#1681 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#1682 = PLANE('',#1683); +#1683 = AXIS2_PLACEMENT_3D('',#1684,#1685,#1686); +#1684 = CARTESIAN_POINT('',(-0.55,-1.E-03,0.25)); +#1685 = DIRECTION('',(4.078315292499E-47,4.701977403289E-32,-1.)); +#1686 = DIRECTION('',(0.,1.,4.701977403289E-32)); +#1687 = ADVANCED_FACE('',(#1688),#1694,.F.); +#1688 = FACE_BOUND('',#1689,.T.); +#1689 = EDGE_LOOP('',(#1690,#1691,#1692,#1693)); +#1690 = ORIENTED_EDGE('',*,*,#1451,.T.); +#1691 = ORIENTED_EDGE('',*,*,#1677,.T.); +#1692 = ORIENTED_EDGE('',*,*,#1529,.T.); +#1693 = ORIENTED_EDGE('',*,*,#1586,.F.); +#1694 = PLANE('',#1695); +#1695 = AXIS2_PLACEMENT_3D('',#1696,#1697,#1698); +#1696 = CARTESIAN_POINT('',(-0.675,-1.E-03,0.4)); +#1697 = DIRECTION('',(-1.,2.710505431214E-16,0.)); +#1698 = DIRECTION('',(-2.710505431214E-16,-1.,0.)); +#1699 = MANIFOLD_SOLID_BREP('',#1700); +#1700 = CLOSED_SHELL('',(#1701,#1741,#1781,#1812,#1843,#1906,#1939,#1995 + ,#2021,#2043,#2055,#2072,#2084,#2101)); +#1701 = ADVANCED_FACE('',(#1702),#1736,.F.); +#1702 = FACE_BOUND('',#1703,.T.); +#1703 = EDGE_LOOP('',(#1704,#1714,#1722,#1730)); +#1704 = ORIENTED_EDGE('',*,*,#1705,.T.); +#1705 = EDGE_CURVE('',#1706,#1708,#1710,.T.); +#1706 = VERTEX_POINT('',#1707); +#1707 = CARTESIAN_POINT('',(0.55,5.E-02,-0.4)); +#1708 = VERTEX_POINT('',#1709); +#1709 = CARTESIAN_POINT('',(0.55,5.E-02,0.4)); +#1710 = LINE('',#1711,#1712); +#1711 = CARTESIAN_POINT('',(0.55,5.E-02,-0.4)); +#1712 = VECTOR('',#1713,1.); +#1713 = DIRECTION('',(2.282530889443E-16,0.,1.)); +#1714 = ORIENTED_EDGE('',*,*,#1715,.F.); +#1715 = EDGE_CURVE('',#1716,#1708,#1718,.T.); +#1716 = VERTEX_POINT('',#1717); +#1717 = CARTESIAN_POINT('',(0.8,5.E-02,0.4)); +#1718 = LINE('',#1719,#1720); +#1719 = CARTESIAN_POINT('',(0.8,5.E-02,0.4)); +#1720 = VECTOR('',#1721,1.); +#1721 = DIRECTION('',(-1.,0.,2.282530889443E-16)); +#1722 = ORIENTED_EDGE('',*,*,#1723,.T.); +#1723 = EDGE_CURVE('',#1716,#1724,#1726,.T.); +#1724 = VERTEX_POINT('',#1725); +#1725 = CARTESIAN_POINT('',(0.8,5.E-02,-0.4)); +#1726 = LINE('',#1727,#1728); +#1727 = CARTESIAN_POINT('',(0.8,5.E-02,-0.4)); +#1728 = VECTOR('',#1729,1.); +#1729 = DIRECTION('',(-2.282530889443E-16,0.,-1.)); +#1730 = ORIENTED_EDGE('',*,*,#1731,.T.); +#1731 = EDGE_CURVE('',#1724,#1706,#1732,.T.); +#1732 = LINE('',#1733,#1734); +#1733 = CARTESIAN_POINT('',(0.8,5.E-02,-0.4)); +#1734 = VECTOR('',#1735,1.); +#1735 = DIRECTION('',(-1.,0.,2.282530889443E-16)); +#1736 = PLANE('',#1737); +#1737 = AXIS2_PLACEMENT_3D('',#1738,#1739,#1740); +#1738 = CARTESIAN_POINT('',(0.8,5.E-02,-0.4)); +#1739 = DIRECTION('',(0.,-1.,-0.)); +#1740 = DIRECTION('',(-2.282530889443E-16,0.,-1.)); +#1741 = ADVANCED_FACE('',(#1742),#1776,.F.); +#1742 = FACE_BOUND('',#1743,.T.); +#1743 = EDGE_LOOP('',(#1744,#1754,#1762,#1770)); +#1744 = ORIENTED_EDGE('',*,*,#1745,.T.); +#1745 = EDGE_CURVE('',#1746,#1748,#1750,.T.); +#1746 = VERTEX_POINT('',#1747); +#1747 = CARTESIAN_POINT('',(0.55,0.,0.4)); +#1748 = VERTEX_POINT('',#1749); +#1749 = CARTESIAN_POINT('',(0.55,2.168404344971E-16,-0.4)); +#1750 = LINE('',#1751,#1752); +#1751 = CARTESIAN_POINT('',(0.55,2.168404344971E-16,0.4)); +#1752 = VECTOR('',#1753,1.); +#1753 = DIRECTION('',(-2.282530889443E-16,0.,-1.)); +#1754 = ORIENTED_EDGE('',*,*,#1755,.F.); +#1755 = EDGE_CURVE('',#1756,#1748,#1758,.T.); +#1756 = VERTEX_POINT('',#1757); +#1757 = CARTESIAN_POINT('',(0.85,2.168404344971E-16,-0.4)); +#1758 = LINE('',#1759,#1760); +#1759 = CARTESIAN_POINT('',(0.85,2.168404344971E-16,-0.4)); +#1760 = VECTOR('',#1761,1.); +#1761 = DIRECTION('',(-1.,0.,2.282530889443E-16)); +#1762 = ORIENTED_EDGE('',*,*,#1763,.T.); +#1763 = EDGE_CURVE('',#1756,#1764,#1766,.T.); +#1764 = VERTEX_POINT('',#1765); +#1765 = CARTESIAN_POINT('',(0.85,0.,0.4)); +#1766 = LINE('',#1767,#1768); +#1767 = CARTESIAN_POINT('',(0.85,2.168404344971E-16,0.4)); +#1768 = VECTOR('',#1769,1.); +#1769 = DIRECTION('',(2.282530889443E-16,0.,1.)); +#1770 = ORIENTED_EDGE('',*,*,#1771,.T.); +#1771 = EDGE_CURVE('',#1764,#1746,#1772,.T.); +#1772 = LINE('',#1773,#1774); +#1773 = CARTESIAN_POINT('',(0.85,0.,0.4)); +#1774 = VECTOR('',#1775,1.); +#1775 = DIRECTION('',(-1.,0.,2.282530889443E-16)); +#1776 = PLANE('',#1777); +#1777 = AXIS2_PLACEMENT_3D('',#1778,#1779,#1780); +#1778 = CARTESIAN_POINT('',(0.85,2.168404344971E-16,0.4)); +#1779 = DIRECTION('',(-0.,1.,0.)); +#1780 = DIRECTION('',(2.282530889443E-16,0.,1.)); +#1781 = ADVANCED_FACE('',(#1782),#1807,.T.); +#1782 = FACE_BOUND('',#1783,.T.); +#1783 = EDGE_LOOP('',(#1784,#1792,#1800,#1806)); +#1784 = ORIENTED_EDGE('',*,*,#1785,.F.); +#1785 = EDGE_CURVE('',#1786,#1716,#1788,.T.); +#1786 = VERTEX_POINT('',#1787); +#1787 = CARTESIAN_POINT('',(0.8,0.5,0.4)); +#1788 = LINE('',#1789,#1790); +#1789 = CARTESIAN_POINT('',(0.8,0.5,0.4)); +#1790 = VECTOR('',#1791,1.); +#1791 = DIRECTION('',(-1.971276677246E-16,-1.,4.499499907454E-32)); +#1792 = ORIENTED_EDGE('',*,*,#1793,.F.); +#1793 = EDGE_CURVE('',#1794,#1786,#1796,.T.); +#1794 = VERTEX_POINT('',#1795); +#1795 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1796 = LINE('',#1797,#1798); +#1797 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1798 = VECTOR('',#1799,1.); +#1799 = DIRECTION('',(2.282530889443E-16,0.,1.)); +#1800 = ORIENTED_EDGE('',*,*,#1801,.T.); +#1801 = EDGE_CURVE('',#1794,#1724,#1802,.T.); +#1802 = LINE('',#1803,#1804); +#1803 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1804 = VECTOR('',#1805,1.); +#1805 = DIRECTION('',(-1.971276677246E-16,-1.,4.499499907454E-32)); +#1806 = ORIENTED_EDGE('',*,*,#1723,.F.); +#1807 = PLANE('',#1808); +#1808 = AXIS2_PLACEMENT_3D('',#1809,#1810,#1811); +#1809 = CARTESIAN_POINT('',(0.8,0.5,-0.4)); +#1810 = DIRECTION('',(-1.,1.971276677246E-16,2.282530889443E-16)); +#1811 = DIRECTION('',(1.971276677246E-16,1.,-4.499499907454E-32)); +#1812 = ADVANCED_FACE('',(#1813),#1838,.T.); +#1813 = FACE_BOUND('',#1814,.T.); +#1814 = EDGE_LOOP('',(#1815,#1823,#1831,#1837)); +#1815 = ORIENTED_EDGE('',*,*,#1816,.F.); +#1816 = EDGE_CURVE('',#1817,#1756,#1819,.T.); +#1817 = VERTEX_POINT('',#1818); +#1818 = CARTESIAN_POINT('',(0.85,0.55,-0.4)); +#1819 = LINE('',#1820,#1821); +#1820 = CARTESIAN_POINT('',(0.85,0.55,-0.4)); +#1821 = VECTOR('',#1822,1.); +#1822 = DIRECTION('',(-1.971276677246E-16,-1.,4.499499907454E-32)); +#1823 = ORIENTED_EDGE('',*,*,#1824,.F.); +#1824 = EDGE_CURVE('',#1825,#1817,#1827,.T.); +#1825 = VERTEX_POINT('',#1826); +#1826 = CARTESIAN_POINT('',(0.85,0.55,0.4)); +#1827 = LINE('',#1828,#1829); +#1828 = CARTESIAN_POINT('',(0.85,0.55,0.4)); +#1829 = VECTOR('',#1830,1.); +#1830 = DIRECTION('',(-2.282530889443E-16,0.,-1.)); +#1831 = ORIENTED_EDGE('',*,*,#1832,.T.); +#1832 = EDGE_CURVE('',#1825,#1764,#1833,.T.); +#1833 = LINE('',#1834,#1835); +#1834 = CARTESIAN_POINT('',(0.85,0.55,0.4)); +#1835 = VECTOR('',#1836,1.); +#1836 = DIRECTION('',(-1.971276677246E-16,-1.,4.499499907454E-32)); +#1837 = ORIENTED_EDGE('',*,*,#1763,.F.); +#1838 = PLANE('',#1839); +#1839 = AXIS2_PLACEMENT_3D('',#1840,#1841,#1842); +#1840 = CARTESIAN_POINT('',(0.85,0.55,0.4)); +#1841 = DIRECTION('',(1.,-1.971276677246E-16,-2.282530889443E-16)); +#1842 = DIRECTION('',(-1.971276677246E-16,-1.,4.499499907454E-32)); +#1843 = ADVANCED_FACE('',(#1844),#1901,.F.); +#1844 = FACE_BOUND('',#1845,.T.); +#1845 = EDGE_LOOP('',(#1846,#1856,#1864,#1872,#1878,#1879,#1887,#1895)); +#1846 = ORIENTED_EDGE('',*,*,#1847,.F.); +#1847 = EDGE_CURVE('',#1848,#1850,#1852,.T.); +#1848 = VERTEX_POINT('',#1849); +#1849 = CARTESIAN_POINT('',(0.55,0.5,-0.25)); +#1850 = VERTEX_POINT('',#1851); +#1851 = CARTESIAN_POINT('',(0.55,0.5,0.25)); +#1852 = LINE('',#1853,#1854); +#1853 = CARTESIAN_POINT('',(0.55,0.5,-0.4)); +#1854 = VECTOR('',#1855,1.); +#1855 = DIRECTION('',(2.282530889443E-16,0.,1.)); +#1856 = ORIENTED_EDGE('',*,*,#1857,.F.); +#1857 = EDGE_CURVE('',#1858,#1848,#1860,.T.); +#1858 = VERTEX_POINT('',#1859); +#1859 = CARTESIAN_POINT('',(0.675,0.5,-0.25)); +#1860 = LINE('',#1861,#1862); +#1861 = CARTESIAN_POINT('',(0.55,0.5,-0.25)); +#1862 = VECTOR('',#1863,1.); +#1863 = DIRECTION('',(-1.,3.614007241618E-16,-2.379017253958E-47)); +#1864 = ORIENTED_EDGE('',*,*,#1865,.F.); +#1865 = EDGE_CURVE('',#1866,#1858,#1868,.T.); +#1866 = VERTEX_POINT('',#1867); +#1867 = CARTESIAN_POINT('',(0.675,0.5,-0.4)); +#1868 = LINE('',#1869,#1870); +#1869 = CARTESIAN_POINT('',(0.675,0.5,-0.4)); +#1870 = VECTOR('',#1871,1.); +#1871 = DIRECTION('',(2.235918471765E-47,8.249083163665E-32,1.)); +#1872 = ORIENTED_EDGE('',*,*,#1873,.F.); +#1873 = EDGE_CURVE('',#1794,#1866,#1874,.T.); +#1874 = LINE('',#1875,#1876); +#1875 = CARTESIAN_POINT('',(1.626560977094,0.5,-0.4)); +#1876 = VECTOR('',#1877,1.); +#1877 = DIRECTION('',(-1.,3.614007241618E-16,2.282530889443E-16)); +#1878 = ORIENTED_EDGE('',*,*,#1793,.T.); +#1879 = ORIENTED_EDGE('',*,*,#1880,.T.); +#1880 = EDGE_CURVE('',#1786,#1881,#1883,.T.); +#1881 = VERTEX_POINT('',#1882); +#1882 = CARTESIAN_POINT('',(0.675,0.5,0.4)); +#1883 = LINE('',#1884,#1885); +#1884 = CARTESIAN_POINT('',(1.626560977094,0.5,0.4)); +#1885 = VECTOR('',#1886,1.); +#1886 = DIRECTION('',(-1.,3.614007241618E-16,2.282530889443E-16)); +#1887 = ORIENTED_EDGE('',*,*,#1888,.F.); +#1888 = EDGE_CURVE('',#1889,#1881,#1891,.T.); +#1889 = VERTEX_POINT('',#1890); +#1890 = CARTESIAN_POINT('',(0.675,0.5,0.25)); +#1891 = LINE('',#1892,#1893); +#1892 = CARTESIAN_POINT('',(0.675,0.5,0.4)); +#1893 = VECTOR('',#1894,1.); +#1894 = DIRECTION('',(2.235918471765E-47,8.249083163665E-32,1.)); +#1895 = ORIENTED_EDGE('',*,*,#1896,.F.); +#1896 = EDGE_CURVE('',#1850,#1889,#1897,.T.); +#1897 = LINE('',#1898,#1899); +#1898 = CARTESIAN_POINT('',(0.55,0.5,0.25)); +#1899 = VECTOR('',#1900,1.); +#1900 = DIRECTION('',(1.,-3.614007241618E-16,2.379017253958E-47)); +#1901 = PLANE('',#1902); +#1902 = AXIS2_PLACEMENT_3D('',#1903,#1904,#1905); +#1903 = CARTESIAN_POINT('',(1.626560977094,0.5,-0.4)); +#1904 = DIRECTION('',(3.614007241618E-16,1.,-8.249083163665E-32)); +#1905 = DIRECTION('',(1.,-3.614007241618E-16,-2.282530889443E-16)); +#1906 = ADVANCED_FACE('',(#1907),#1934,.F.); +#1907 = FACE_BOUND('',#1908,.T.); +#1908 = EDGE_LOOP('',(#1909,#1910,#1918,#1924,#1925,#1926,#1932,#1933)); +#1909 = ORIENTED_EDGE('',*,*,#1873,.T.); +#1910 = ORIENTED_EDGE('',*,*,#1911,.T.); +#1911 = EDGE_CURVE('',#1866,#1912,#1914,.T.); +#1912 = VERTEX_POINT('',#1913); +#1913 = CARTESIAN_POINT('',(0.675,0.55,-0.4)); +#1914 = LINE('',#1915,#1916); +#1915 = CARTESIAN_POINT('',(0.675,-1.E-03,-0.4)); +#1916 = VECTOR('',#1917,1.); +#1917 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#1918 = ORIENTED_EDGE('',*,*,#1919,.F.); +#1919 = EDGE_CURVE('',#1817,#1912,#1920,.T.); +#1920 = LINE('',#1921,#1922); +#1921 = CARTESIAN_POINT('',(1.626560977094,0.55,-0.4)); +#1922 = VECTOR('',#1923,1.); +#1923 = DIRECTION('',(-1.,3.614007241618E-16,2.282530889443E-16)); +#1924 = ORIENTED_EDGE('',*,*,#1816,.T.); +#1925 = ORIENTED_EDGE('',*,*,#1755,.T.); +#1926 = ORIENTED_EDGE('',*,*,#1927,.T.); +#1927 = EDGE_CURVE('',#1748,#1706,#1928,.T.); +#1928 = LINE('',#1929,#1930); +#1929 = CARTESIAN_POINT('',(0.55,0.275,-0.4)); +#1930 = VECTOR('',#1931,1.); +#1931 = DIRECTION('',(2.4747249491E-31,1.,1.084202172486E-15)); +#1932 = ORIENTED_EDGE('',*,*,#1731,.F.); +#1933 = ORIENTED_EDGE('',*,*,#1801,.F.); +#1934 = PLANE('',#1935); +#1935 = AXIS2_PLACEMENT_3D('',#1936,#1937,#1938); +#1936 = CARTESIAN_POINT('',(1.626560977094,0.55,-0.4)); +#1937 = DIRECTION('',(2.282530889443E-16,1.084202172486E-15,1.)); +#1938 = DIRECTION('',(2.4747249491E-31,-1.,1.084202172486E-15)); +#1939 = ADVANCED_FACE('',(#1940),#1990,.F.); +#1940 = FACE_BOUND('',#1941,.T.); +#1941 = EDGE_LOOP('',(#1942,#1950,#1958,#1966,#1974,#1982,#1988,#1989)); +#1942 = ORIENTED_EDGE('',*,*,#1943,.F.); +#1943 = EDGE_CURVE('',#1944,#1912,#1946,.T.); +#1944 = VERTEX_POINT('',#1945); +#1945 = CARTESIAN_POINT('',(0.675,0.55,-0.25)); +#1946 = LINE('',#1947,#1948); +#1947 = CARTESIAN_POINT('',(0.675,0.55,-0.4)); +#1948 = VECTOR('',#1949,1.); +#1949 = DIRECTION('',(-0.,-0.,-1.)); +#1950 = ORIENTED_EDGE('',*,*,#1951,.F.); +#1951 = EDGE_CURVE('',#1952,#1944,#1954,.T.); +#1952 = VERTEX_POINT('',#1953); +#1953 = CARTESIAN_POINT('',(0.55,0.55,-0.25)); +#1954 = LINE('',#1955,#1956); +#1955 = CARTESIAN_POINT('',(0.55,0.55,-0.25)); +#1956 = VECTOR('',#1957,1.); +#1957 = DIRECTION('',(1.,-8.673617379884E-16,0.)); +#1958 = ORIENTED_EDGE('',*,*,#1959,.F.); +#1959 = EDGE_CURVE('',#1960,#1952,#1962,.T.); +#1960 = VERTEX_POINT('',#1961); +#1961 = CARTESIAN_POINT('',(0.55,0.55,0.25)); +#1962 = LINE('',#1963,#1964); +#1963 = CARTESIAN_POINT('',(0.55,0.55,0.4)); +#1964 = VECTOR('',#1965,1.); +#1965 = DIRECTION('',(-2.282530889443E-16,0.,-1.)); +#1966 = ORIENTED_EDGE('',*,*,#1967,.F.); +#1967 = EDGE_CURVE('',#1968,#1960,#1970,.T.); +#1968 = VERTEX_POINT('',#1969); +#1969 = CARTESIAN_POINT('',(0.675,0.55,0.25)); +#1970 = LINE('',#1971,#1972); +#1971 = CARTESIAN_POINT('',(0.55,0.55,0.25)); +#1972 = VECTOR('',#1973,1.); +#1973 = DIRECTION('',(-1.,8.673617379884E-16,-0.)); +#1974 = ORIENTED_EDGE('',*,*,#1975,.F.); +#1975 = EDGE_CURVE('',#1976,#1968,#1978,.T.); +#1976 = VERTEX_POINT('',#1977); +#1977 = CARTESIAN_POINT('',(0.675,0.55,0.4)); +#1978 = LINE('',#1979,#1980); +#1979 = CARTESIAN_POINT('',(0.675,0.55,0.4)); +#1980 = VECTOR('',#1981,1.); +#1981 = DIRECTION('',(0.,0.,-1.)); +#1982 = ORIENTED_EDGE('',*,*,#1983,.F.); +#1983 = EDGE_CURVE('',#1825,#1976,#1984,.T.); +#1984 = LINE('',#1985,#1986); +#1985 = CARTESIAN_POINT('',(1.626560977094,0.55,0.4)); +#1986 = VECTOR('',#1987,1.); +#1987 = DIRECTION('',(-1.,3.614007241618E-16,2.282530889443E-16)); +#1988 = ORIENTED_EDGE('',*,*,#1824,.T.); +#1989 = ORIENTED_EDGE('',*,*,#1919,.T.); +#1990 = PLANE('',#1991); +#1991 = AXIS2_PLACEMENT_3D('',#1992,#1993,#1994); +#1992 = CARTESIAN_POINT('',(1.626560977094,0.55,0.4)); +#1993 = DIRECTION('',(-3.614007241618E-16,-1.,8.249083163665E-32)); +#1994 = DIRECTION('',(-1.,3.614007241618E-16,2.282530889443E-16)); +#1995 = ADVANCED_FACE('',(#1996),#2016,.F.); +#1996 = FACE_BOUND('',#1997,.T.); +#1997 = EDGE_LOOP('',(#1998,#1999,#2005,#2006,#2007,#2008,#2014,#2015)); +#1998 = ORIENTED_EDGE('',*,*,#1983,.T.); +#1999 = ORIENTED_EDGE('',*,*,#2000,.F.); +#2000 = EDGE_CURVE('',#1881,#1976,#2001,.T.); +#2001 = LINE('',#2002,#2003); +#2002 = CARTESIAN_POINT('',(0.675,-1.E-03,0.4)); +#2003 = VECTOR('',#2004,1.); +#2004 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#2005 = ORIENTED_EDGE('',*,*,#1880,.F.); +#2006 = ORIENTED_EDGE('',*,*,#1785,.T.); +#2007 = ORIENTED_EDGE('',*,*,#1715,.T.); +#2008 = ORIENTED_EDGE('',*,*,#2009,.T.); +#2009 = EDGE_CURVE('',#1708,#1746,#2010,.T.); +#2010 = LINE('',#2011,#2012); +#2011 = CARTESIAN_POINT('',(0.55,0.275,0.4)); +#2012 = VECTOR('',#2013,1.); +#2013 = DIRECTION('',(0.,-1.,0.)); +#2014 = ORIENTED_EDGE('',*,*,#1771,.F.); +#2015 = ORIENTED_EDGE('',*,*,#1832,.F.); +#2016 = PLANE('',#2017); +#2017 = AXIS2_PLACEMENT_3D('',#2018,#2019,#2020); +#2018 = CARTESIAN_POINT('',(1.626560977094,0.5,0.4)); +#2019 = DIRECTION('',(-2.282530889443E-16,0.,-1.)); +#2020 = DIRECTION('',(1.,0.,-2.282530889443E-16)); +#2021 = ADVANCED_FACE('',(#2022),#2038,.F.); +#2022 = FACE_BOUND('',#2023,.T.); +#2023 = EDGE_LOOP('',(#2024,#2025,#2031,#2032)); +#2024 = ORIENTED_EDGE('',*,*,#1959,.T.); +#2025 = ORIENTED_EDGE('',*,*,#2026,.F.); +#2026 = EDGE_CURVE('',#1848,#1952,#2027,.T.); +#2027 = LINE('',#2028,#2029); +#2028 = CARTESIAN_POINT('',(0.55,-1.E-03,-0.25)); +#2029 = VECTOR('',#2030,1.); +#2030 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#2031 = ORIENTED_EDGE('',*,*,#1847,.T.); +#2032 = ORIENTED_EDGE('',*,*,#2033,.T.); +#2033 = EDGE_CURVE('',#1850,#1960,#2034,.T.); +#2034 = LINE('',#2035,#2036); +#2035 = CARTESIAN_POINT('',(0.55,-1.E-03,0.25)); +#2036 = VECTOR('',#2037,1.); +#2037 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#2038 = PLANE('',#2039); +#2039 = AXIS2_PLACEMENT_3D('',#2040,#2041,#2042); +#2040 = CARTESIAN_POINT('',(0.55,0.55,0.4)); +#2041 = DIRECTION('',(1.,0.,-2.282530889443E-16)); +#2042 = DIRECTION('',(2.282530889443E-16,0.,1.)); +#2043 = ADVANCED_FACE('',(#2044),#2050,.T.); +#2044 = FACE_BOUND('',#2045,.T.); +#2045 = EDGE_LOOP('',(#2046,#2047,#2048,#2049)); +#2046 = ORIENTED_EDGE('',*,*,#2009,.F.); +#2047 = ORIENTED_EDGE('',*,*,#1705,.F.); +#2048 = ORIENTED_EDGE('',*,*,#1927,.F.); +#2049 = ORIENTED_EDGE('',*,*,#1745,.F.); +#2050 = PLANE('',#2051); +#2051 = AXIS2_PLACEMENT_3D('',#2052,#2053,#2054); +#2052 = CARTESIAN_POINT('',(0.55,2.5E-02,-2.881695247922E-16)); +#2053 = DIRECTION('',(-1.,0.,2.282530889443E-16)); +#2054 = DIRECTION('',(-2.282530889443E-16,0.,-1.)); +#2055 = ADVANCED_FACE('',(#2056),#2067,.F.); +#2056 = FACE_BOUND('',#2057,.T.); +#2057 = EDGE_LOOP('',(#2058,#2059,#2060,#2061)); +#2058 = ORIENTED_EDGE('',*,*,#1888,.T.); +#2059 = ORIENTED_EDGE('',*,*,#2000,.T.); +#2060 = ORIENTED_EDGE('',*,*,#1975,.T.); +#2061 = ORIENTED_EDGE('',*,*,#2062,.F.); +#2062 = EDGE_CURVE('',#1889,#1968,#2063,.T.); +#2063 = LINE('',#2064,#2065); +#2064 = CARTESIAN_POINT('',(0.675,-1.E-03,0.25)); +#2065 = VECTOR('',#2066,1.); +#2066 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#2067 = PLANE('',#2068); +#2068 = AXIS2_PLACEMENT_3D('',#2069,#2070,#2071); +#2069 = CARTESIAN_POINT('',(0.675,-1.E-03,0.4)); +#2070 = DIRECTION('',(1.,-2.710505431214E-16,0.)); +#2071 = DIRECTION('',(2.710505431214E-16,1.,0.)); +#2072 = ADVANCED_FACE('',(#2073),#2079,.F.); +#2073 = FACE_BOUND('',#2074,.T.); +#2074 = EDGE_LOOP('',(#2075,#2076,#2077,#2078)); +#2075 = ORIENTED_EDGE('',*,*,#1896,.T.); +#2076 = ORIENTED_EDGE('',*,*,#2062,.T.); +#2077 = ORIENTED_EDGE('',*,*,#1967,.T.); +#2078 = ORIENTED_EDGE('',*,*,#2033,.F.); +#2079 = PLANE('',#2080); +#2080 = AXIS2_PLACEMENT_3D('',#2081,#2082,#2083); +#2081 = CARTESIAN_POINT('',(0.55,-1.E-03,0.25)); +#2082 = DIRECTION('',(4.078315292499E-47,4.701977403289E-32,-1.)); +#2083 = DIRECTION('',(0.,1.,4.701977403289E-32)); +#2084 = ADVANCED_FACE('',(#2085),#2096,.F.); +#2085 = FACE_BOUND('',#2086,.T.); +#2086 = EDGE_LOOP('',(#2087,#2088,#2089,#2090)); +#2087 = ORIENTED_EDGE('',*,*,#1857,.T.); +#2088 = ORIENTED_EDGE('',*,*,#2026,.T.); +#2089 = ORIENTED_EDGE('',*,*,#1951,.T.); +#2090 = ORIENTED_EDGE('',*,*,#2091,.F.); +#2091 = EDGE_CURVE('',#1858,#1944,#2092,.T.); +#2092 = LINE('',#2093,#2094); +#2093 = CARTESIAN_POINT('',(0.675,-1.E-03,-0.25)); +#2094 = VECTOR('',#2095,1.); +#2095 = DIRECTION('',(2.710505431214E-16,1.,4.701977403289E-32)); +#2096 = PLANE('',#2097); +#2097 = AXIS2_PLACEMENT_3D('',#2098,#2099,#2100); +#2098 = CARTESIAN_POINT('',(0.55,-1.E-03,-0.25)); +#2099 = DIRECTION('',(-4.078315292499E-47,-4.701977403289E-32,1.)); +#2100 = DIRECTION('',(0.,-1.,-4.701977403289E-32)); +#2101 = ADVANCED_FACE('',(#2102),#2108,.F.); +#2102 = FACE_BOUND('',#2103,.T.); +#2103 = EDGE_LOOP('',(#2104,#2105,#2106,#2107)); +#2104 = ORIENTED_EDGE('',*,*,#1865,.T.); +#2105 = ORIENTED_EDGE('',*,*,#2091,.T.); +#2106 = ORIENTED_EDGE('',*,*,#1943,.T.); +#2107 = ORIENTED_EDGE('',*,*,#1911,.F.); +#2108 = PLANE('',#2109); +#2109 = AXIS2_PLACEMENT_3D('',#2110,#2111,#2112); +#2110 = CARTESIAN_POINT('',(0.675,-1.E-03,-0.4)); +#2111 = DIRECTION('',(1.,-2.710505431214E-16,0.)); +#2112 = DIRECTION('',(2.710505431214E-16,1.,0.)); +#2113 = MANIFOLD_SOLID_BREP('',#2114); +#2114 = CLOSED_SHELL('',(#2115,#2837,#2868,#2899,#2921,#2933,#2945,#3203 + ,#3275,#3342,#3409,#3471,#3564,#3650,#3712,#3762,#3841,#3854,#4078, + #4100,#4143,#4186,#4229,#4280,#4303,#4320,#4332,#4413,#4487,#4561, + #4628,#4640,#4898,#4970,#5037,#5104,#5166,#5259,#5345,#5407,#5457, + #5536,#5549,#5618,#5692,#5754,#5778,#5852,#5926,#5976,#6026,#6050, + #6124,#6186,#6236,#6274,#6324,#6386,#6460,#6477)); +#2115 = ADVANCED_FACE('',(#2116,#2418,#2548,#2678,#2712),#2832,.F.); +#2116 = FACE_BOUND('',#2117,.T.); +#2117 = EDGE_LOOP('',(#2118,#2144,#2164,#2172,#2196,#2216,#2232,#2244, + #2260,#2280,#2304,#2312,#2328,#2344,#2368,#2392,#2400)); +#2118 = ORIENTED_EDGE('',*,*,#2119,.T.); +#2119 = EDGE_CURVE('',#2120,#2122,#2124,.T.); +#2120 = VERTEX_POINT('',#2121); +#2121 = CARTESIAN_POINT('',(0.478273426848,0.55,-0.106928921418)); +#2122 = VERTEX_POINT('',#2123); +#2123 = CARTESIAN_POINT('',(0.407880798643,0.55,-0.161826757956)); +#2124 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2125,#2126,#2127,#2128,#2129, + #2130,#2131,#2132,#2133,#2134,#2135,#2136,#2137,#2138,#2139,#2140, + #2141,#2142,#2143),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,5.527454908753E-02,0.109966093882,0.163247442852, + 0.218076185482,0.273300874374,0.330909300011,0.390994523365, + 0.454175953431,0.518861540849,0.583310532011,0.648516681864, + 0.715030887097,0.782502072854,0.852322685077,0.924928489784,1.), + .UNSPECIFIED.); +#2125 = CARTESIAN_POINT('',(0.478273426848,0.55,-0.106928921418)); +#2126 = CARTESIAN_POINT('',(0.478231985752,0.55,-0.108756695932)); +#2127 = CARTESIAN_POINT('',(0.478149540656,0.55,-0.112392966641)); +#2128 = CARTESIAN_POINT('',(0.477109812878,0.55,-0.11770547351)); +#2129 = CARTESIAN_POINT('',(0.47554740878,0.55,-0.122855568103)); +#2130 = CARTESIAN_POINT('',(0.473399435849,0.55,-0.127821349128)); +#2131 = CARTESIAN_POINT('',(0.470524415978,0.55,-0.132568376518)); +#2132 = CARTESIAN_POINT('',(0.467083817326,0.55,-0.137137121412)); +#2133 = CARTESIAN_POINT('',(0.462987007298,0.55,-0.141501499313)); +#2134 = CARTESIAN_POINT('',(0.458292462597,0.55,-0.145569531268)); +#2135 = CARTESIAN_POINT('',(0.4532512821,0.55,-0.149446454985)); +#2136 = CARTESIAN_POINT('',(0.447726304595,0.55,-0.152737818683)); +#2137 = CARTESIAN_POINT('',(0.441884117124,0.55,-0.15555232489)); +#2138 = CARTESIAN_POINT('',(0.435718251639,0.55,-0.157873275101)); +#2139 = CARTESIAN_POINT('',(0.429208698607,0.55,-0.159619203922)); +#2140 = CARTESIAN_POINT('',(0.422386042842,0.55,-0.160872788062)); +#2141 = CARTESIAN_POINT('',(0.41523727449,0.55,-0.161656553536)); +#2142 = CARTESIAN_POINT('',(0.41036010129,0.55,-0.161769395126)); +#2143 = CARTESIAN_POINT('',(0.407880798643,0.55,-0.161826757956)); +#2144 = ORIENTED_EDGE('',*,*,#2145,.T.); +#2145 = EDGE_CURVE('',#2122,#2146,#2148,.T.); +#2146 = VERTEX_POINT('',#2147); +#2147 = CARTESIAN_POINT('',(0.334683683258,0.55,-0.10798060411)); +#2148 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2149,#2150,#2151,#2152,#2153, + #2154,#2155,#2156,#2157,#2158,#2159,#2160,#2161,#2162,#2163), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0.,0.122711942366, + 0.239684964017,0.351815855256,0.463766132862,0.520817793161, + 0.579448291448,0.64060414512,0.705297511806,0.773633880713, + 0.844669381886,0.920056508021,1.),.UNSPECIFIED.); +#2149 = CARTESIAN_POINT('',(0.407880798643,0.55,-0.161826757956)); +#2150 = CARTESIAN_POINT('',(0.403895631842,0.55,-0.161687621756)); +#2151 = CARTESIAN_POINT('',(0.396111674204,0.55,-0.161415856396)); +#2152 = CARTESIAN_POINT('',(0.384890182513,0.55,-0.159035555051)); +#2153 = CARTESIAN_POINT('',(0.374458249113,0.55,-0.155237746702)); +#2154 = CARTESIAN_POINT('',(0.366484382454,0.55,-0.150704444758)); +#2155 = CARTESIAN_POINT('',(0.360596125038,0.55,-0.146229401373)); +#2156 = CARTESIAN_POINT('',(0.356388431218,0.55,-0.142321162736)); +#2157 = CARTESIAN_POINT('',(0.352256380178,0.55,-0.13797788037)); +#2158 = CARTESIAN_POINT('',(0.348471812493,0.55,-0.132932042842)); +#2159 = CARTESIAN_POINT('',(0.344644414825,0.55,-0.127525363823)); +#2160 = CARTESIAN_POINT('',(0.341159958672,0.55,-0.121482995669)); +#2161 = CARTESIAN_POINT('',(0.337773989447,0.55,-0.114962556239)); +#2162 = CARTESIAN_POINT('',(0.335733734485,0.55,-0.110352992784)); +#2163 = CARTESIAN_POINT('',(0.334683683258,0.55,-0.10798060411)); +#2164 = ORIENTED_EDGE('',*,*,#2165,.T.); +#2165 = EDGE_CURVE('',#2146,#2166,#2168,.T.); +#2166 = VERTEX_POINT('',#2167); +#2167 = CARTESIAN_POINT('',(0.303273426848,0.55,-0.10798060411)); +#2168 = LINE('',#2169,#2170); +#2169 = CARTESIAN_POINT('',(0.334683683258,0.55,-0.10798060411)); +#2170 = VECTOR('',#2171,1.); +#2171 = DIRECTION('',(-1.,0.,0.)); +#2172 = ORIENTED_EDGE('',*,*,#2173,.T.); +#2173 = EDGE_CURVE('',#2166,#2174,#2176,.T.); +#2174 = VERTEX_POINT('',#2175); +#2175 = CARTESIAN_POINT('',(0.407460125566,0.55,-0.197724193853)); +#2176 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2177,#2178,#2179,#2180,#2181, + #2182,#2183,#2184,#2185,#2186,#2187,#2188,#2189,#2190,#2191,#2192, + #2193,#2194,#2195),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,7.262534608344E-02,0.141976611326,0.208984928419, + 0.273956870364,0.336889347397,0.398744953495,0.460115885279, + 0.52082492259,0.580994458632,0.640151927601,0.698622450756, + 0.757271080927,0.816426694005,0.876254048203,0.937165293063,1.), + .UNSPECIFIED.); +#2177 = CARTESIAN_POINT('',(0.303273426848,0.55,-0.10798060411)); +#2178 = CARTESIAN_POINT('',(0.304124381916,0.55,-0.111503852507)); +#2179 = CARTESIAN_POINT('',(0.305787929472,0.55,-0.118391514946)); +#2180 = CARTESIAN_POINT('',(0.309257686819,0.55,-0.128232241031)); +#2181 = CARTESIAN_POINT('',(0.313037612338,0.55,-0.13754459317)); +#2182 = CARTESIAN_POINT('',(0.317576522795,0.55,-0.14615420054)); +#2183 = CARTESIAN_POINT('',(0.322527398217,0.55,-0.154234090813)); +#2184 = CARTESIAN_POINT('',(0.328199670371,0.55,-0.16160100326)); +#2185 = CARTESIAN_POINT('',(0.334331642627,0.55,-0.168442299807)); +#2186 = CARTESIAN_POINT('',(0.341114137557,0.55,-0.174513623562)); +#2187 = CARTESIAN_POINT('',(0.348227003722,0.55,-0.180011396483)); +#2188 = CARTESIAN_POINT('',(0.355770465697,0.55,-0.184698902217)); +#2189 = CARTESIAN_POINT('',(0.363592755064,0.55,-0.188731317504)); +#2190 = CARTESIAN_POINT('',(0.371748068359,0.55,-0.192053340691)); +#2191 = CARTESIAN_POINT('',(0.380260685528,0.55,-0.194555893058)); +#2192 = CARTESIAN_POINT('',(0.38905364786,0.55,-0.196371573617)); +#2193 = CARTESIAN_POINT('',(0.398149997871,0.55,-0.197550685038)); +#2194 = CARTESIAN_POINT('',(0.404324756931,0.55,-0.197665761347)); +#2195 = CARTESIAN_POINT('',(0.407460125566,0.55,-0.197724193853)); +#2196 = ORIENTED_EDGE('',*,*,#2197,.T.); +#2197 = EDGE_CURVE('',#2174,#2198,#2200,.T.); +#2198 = VERTEX_POINT('',#2199); +#2199 = CARTESIAN_POINT('',(0.509683683258,0.55,-0.106788697059)); +#2200 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2201,#2202,#2203,#2204,#2205, + #2206,#2207,#2208,#2209,#2210,#2211,#2212,#2213,#2214,#2215), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 9.025424934268E-02,0.178539791529,0.266093033854,0.354630977957, + 0.441886153351,0.525746915164,0.608113633604,0.690197272828, + 0.77082148433,0.848326181255,0.924011740025,1.),.UNSPECIFIED.); +#2201 = CARTESIAN_POINT('',(0.407460125566,0.55,-0.197724193853)); +#2202 = CARTESIAN_POINT('',(0.412028399773,0.55,-0.197586270829)); +#2203 = CARTESIAN_POINT('',(0.421065300868,0.55,-0.197313433281)); +#2204 = CARTESIAN_POINT('',(0.434341605563,0.55,-0.194821989634)); +#2205 = CARTESIAN_POINT('',(0.447144287473,0.55,-0.190879476398)); +#2206 = CARTESIAN_POINT('',(0.459333212255,0.55,-0.185432103684)); +#2207 = CARTESIAN_POINT('',(0.470655055514,0.55,-0.178713372368)); +#2208 = CARTESIAN_POINT('',(0.480728674189,0.55,-0.170716898679)); +#2209 = CARTESIAN_POINT('',(0.489417525269,0.55,-0.16159696853)); +#2210 = CARTESIAN_POINT('',(0.496706963035,0.55,-0.151523712098)); +#2211 = CARTESIAN_POINT('',(0.502414462941,0.55,-0.140758161159)); +#2212 = CARTESIAN_POINT('',(0.506623100289,0.55,-0.129678145445)); +#2213 = CARTESIAN_POINT('',(0.509185268389,0.55,-0.118309948306)); +#2214 = CARTESIAN_POINT('',(0.50951732407,0.55,-0.110634220388)); +#2215 = CARTESIAN_POINT('',(0.509683683258,0.55,-0.106788697059)); +#2216 = ORIENTED_EDGE('',*,*,#2217,.T.); +#2217 = EDGE_CURVE('',#2198,#2218,#2220,.T.); +#2218 = VERTEX_POINT('',#2219); +#2219 = CARTESIAN_POINT('',(0.468808282617,0.55,-3.478348872524E-02)); +#2220 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2221,#2222,#2223,#2224,#2225, + #2226,#2227,#2228,#2229,#2230,#2231),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.128067548596,0.250608318868,0.370630165915, + 0.49007224673,0.610374764155,0.734313069912,0.863216504245,1.), + .UNSPECIFIED.); +#2221 = CARTESIAN_POINT('',(0.509683683258,0.55,-0.106788697059)); +#2222 = CARTESIAN_POINT('',(0.509567324153,0.55,-0.103088017588)); +#2223 = CARTESIAN_POINT('',(0.509339627442,0.55,-9.58463621417E-02)); +#2224 = CARTESIAN_POINT('',(0.507406256886,0.55,-8.527421242788E-02)); +#2225 = CARTESIAN_POINT('',(0.504152630598,0.55,-7.531005239966E-02)); +#2226 = CARTESIAN_POINT('',(0.499645654341,0.55,-6.591193618731E-02)); +#2227 = CARTESIAN_POINT('',(0.493811499317,0.55,-5.7139452205E-02)); +#2228 = CARTESIAN_POINT('',(0.486744229628,0.55,-4.897286311895E-02)); +#2229 = CARTESIAN_POINT('',(0.47839396345,0.55,-4.137594730613E-02)); +#2230 = CARTESIAN_POINT('',(0.472066069648,0.55,-3.702400000858E-02)); +#2231 = CARTESIAN_POINT('',(0.468808282617,0.55,-3.478348872524E-02)); +#2232 = ORIENTED_EDGE('',*,*,#2233,.T.); +#2233 = EDGE_CURVE('',#2218,#2234,#2236,.T.); +#2234 = VERTEX_POINT('',#2235); +#2235 = CARTESIAN_POINT('',(0.50673897172,0.55,-4.915700263697E-03)); +#2236 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2237,#2238,#2239,#2240,#2241, + #2242,#2243),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0.,0.253879600327, + 0.503008917278,0.75029108069,1.),.UNSPECIFIED.); +#2237 = CARTESIAN_POINT('',(0.468808282617,0.55,-3.478348872524E-02)); +#2238 = CARTESIAN_POINT('',(0.472531458074,0.55,-3.298567157109E-02)); +#2239 = CARTESIAN_POINT('',(0.479908145501,0.55,-2.942367581007E-02)); +#2240 = CARTESIAN_POINT('',(0.489963198454,0.55,-2.243810005834E-02)); +#2241 = CARTESIAN_POINT('',(0.49909098599,0.55,-1.437246532295E-02)); +#2242 = CARTESIAN_POINT('',(0.504181357891,0.55,-8.078200031596E-03)); +#2243 = CARTESIAN_POINT('',(0.50673897172,0.55,-4.915700263697E-03)); +#2244 = ORIENTED_EDGE('',*,*,#2245,.T.); +#2245 = EDGE_CURVE('',#2234,#2246,#2248,.T.); +#2246 = VERTEX_POINT('',#2247); +#2247 = CARTESIAN_POINT('',(0.527632401207,0.55,5.727380294143E-02)); +#2248 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2249,#2250,#2251,#2252,#2253, + #2254,#2255,#2256,#2257,#2258,#2259),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.128135509797,0.254172711902,0.378111645139, + 0.501712263007,0.623986309368,0.747095613618,0.87287463665,1.), + .UNSPECIFIED.); +#2249 = CARTESIAN_POINT('',(0.50673897172,0.55,-4.915700263697E-03)); +#2250 = CARTESIAN_POINT('',(0.508423105955,0.55,-2.609925102831E-03)); +#2251 = CARTESIAN_POINT('',(0.511763795561,0.55,1.963866554147E-03)); +#2252 = CARTESIAN_POINT('',(0.515887348937,0.55,9.317509142551E-03)); +#2253 = CARTESIAN_POINT('',(0.519628260367,0.55,1.675265807076E-02)); +#2254 = CARTESIAN_POINT('',(0.5225432823,0.55,2.446859867336E-02)); +#2255 = CARTESIAN_POINT('',(0.524800668983,0.55,3.237590004318E-02)); +#2256 = CARTESIAN_POINT('',(0.526414272207,0.55,4.048813964901E-02)); +#2257 = CARTESIAN_POINT('',(0.527416686296,0.55,4.881194189145E-02)); +#2258 = CARTESIAN_POINT('',(0.527560241497,0.55,5.444318991349E-02)); +#2259 = CARTESIAN_POINT('',(0.527632401207,0.55,5.727380294143E-02)); +#2260 = ORIENTED_EDGE('',*,*,#2261,.T.); +#2261 = EDGE_CURVE('',#2246,#2262,#2264,.T.); +#2262 = VERTEX_POINT('',#2263); +#2263 = CARTESIAN_POINT('',(0.406548667233,0.55,0.170224524095)); +#2264 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2265,#2266,#2267,#2268,#2269, + #2270,#2271,#2272,#2273,#2274,#2275,#2276,#2277,#2278,#2279), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 7.964825118023E-02,0.158921676418,0.239619494737,0.322609429819, + 0.406034636618,0.487602095492,0.569684626596,0.653036145009, + 0.737435717722,0.822477815856,0.909747655118,1.),.UNSPECIFIED.); +#2265 = CARTESIAN_POINT('',(0.527632401207,0.55,5.727380294143E-02)); +#2266 = CARTESIAN_POINT('',(0.527452949855,0.55,6.217477506016E-02)); +#2267 = CARTESIAN_POINT('',(0.527094891652,0.55,7.195365524453E-02)); +#2268 = CARTESIAN_POINT('',(0.523894484221,0.55,8.640112740787E-02)); +#2269 = CARTESIAN_POINT('',(0.518933160152,0.55,0.100523677635)); +#2270 = CARTESIAN_POINT('',(0.511887466555,0.55,0.11403116156)); +#2271 = CARTESIAN_POINT('',(0.503300715672,0.55,0.12666919966)); +#2272 = CARTESIAN_POINT('',(0.493084983255,0.55,0.137976830564)); +#2273 = CARTESIAN_POINT('',(0.481356342414,0.55,0.147696690997)); +#2274 = CARTESIAN_POINT('',(0.468275777529,0.55,0.155817713803)); +#2275 = CARTESIAN_POINT('',(0.45410406468,0.55,0.162309506022)); +#2276 = CARTESIAN_POINT('',(0.43894650548,0.55,0.166815250307)); +#2277 = CARTESIAN_POINT('',(0.423021500084,0.55,0.169749850274)); +#2278 = CARTESIAN_POINT('',(0.412100770329,0.55,0.170064537163)); +#2279 = CARTESIAN_POINT('',(0.406548667233,0.55,0.170224524095)); +#2280 = ORIENTED_EDGE('',*,*,#2281,.T.); +#2281 = EDGE_CURVE('',#2262,#2282,#2284,.T.); +#2282 = VERTEX_POINT('',#2283); +#2283 = CARTESIAN_POINT('',(0.289811888386,0.55,6.701939589015E-02)); +#2284 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2285,#2286,#2287,#2288,#2289, + #2290,#2291,#2292,#2293,#2294,#2295,#2296,#2297,#2298,#2299,#2300, + #2301,#2302,#2303),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.55411703374E-02,0.128963167783,0.190377136189, + 0.250092361669,0.308548432459,0.366397963055,0.424542189267, + 0.483169996423,0.542243399831,0.601739352017,0.66250600225, + 0.724855513449,0.789127829281,0.856346399879,0.926295234987,1.), + .UNSPECIFIED.); +#2285 = CARTESIAN_POINT('',(0.406548667233,0.55,0.170224524095)); +#2286 = CARTESIAN_POINT('',(0.402806737204,0.55,0.170137702769)); +#2287 = CARTESIAN_POINT('',(0.395443866697,0.55,0.169966867352)); +#2288 = CARTESIAN_POINT('',(0.384619516859,0.55,0.168799007232)); +#2289 = CARTESIAN_POINT('',(0.374287346922,0.55,0.166666006708)); +#2290 = CARTESIAN_POINT('',(0.364433387136,0.55,0.163795676172)); +#2291 = CARTESIAN_POINT('',(0.355048883497,0.55,0.160156501964)); +#2292 = CARTESIAN_POINT('',(0.346162472979,0.55,0.155624632161)); +#2293 = CARTESIAN_POINT('',(0.337719483627,0.55,0.150293481956)); +#2294 = CARTESIAN_POINT('',(0.329799588513,0.55,0.144100123176)); +#2295 = CARTESIAN_POINT('',(0.322403731742,0.55,0.1371719892)); +#2296 = CARTESIAN_POINT('',(0.315728459319,0.55,0.129386088203)); +#2297 = CARTESIAN_POINT('',(0.309662480025,0.55,0.120886347811)); +#2298 = CARTESIAN_POINT('',(0.304368216154,0.55,0.111574042191)); +#2299 = CARTESIAN_POINT('',(0.299604520892,0.55,0.101569516463)); +#2300 = CARTESIAN_POINT('',(0.295686425228,0.55,9.074466662527E-02)); +#2301 = CARTESIAN_POINT('',(0.292237868364,0.55,7.919626442637E-02)); +#2302 = CARTESIAN_POINT('',(0.290634521939,0.55,7.114849040879E-02)); +#2303 = CARTESIAN_POINT('',(0.289811888386,0.55,6.701939589015E-02)); +#2304 = ORIENTED_EDGE('',*,*,#2305,.T.); +#2305 = EDGE_CURVE('',#2282,#2306,#2308,.T.); +#2306 = VERTEX_POINT('',#2307); +#2307 = CARTESIAN_POINT('',(0.321222144797,0.55,6.701939589015E-02)); +#2308 = LINE('',#2309,#2310); +#2309 = CARTESIAN_POINT('',(0.289811888386,0.55,6.701939589015E-02)); +#2310 = VECTOR('',#2311,1.); +#2311 = DIRECTION('',(1.,0.,0.)); +#2312 = ORIENTED_EDGE('',*,*,#2313,.T.); +#2313 = EDGE_CURVE('',#2306,#2314,#2316,.T.); +#2314 = VERTEX_POINT('',#2315); +#2315 = CARTESIAN_POINT('',(0.348636006976,0.55,0.115396799736)); +#2316 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2317,#2318,#2319,#2320,#2321, + #2322,#2323,#2324,#2325,#2326,#2327),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.149770386032,0.291316409995,0.425966373105, + 0.55215957397,0.671527413524,0.786121628692,0.89532507307,1.), + .UNSPECIFIED.); +#2317 = CARTESIAN_POINT('',(0.321222144797,0.55,6.701939589015E-02)); +#2318 = CARTESIAN_POINT('',(0.322040473941,0.55,6.971429721701E-02)); +#2319 = CARTESIAN_POINT('',(0.323632195206,0.55,7.495611437882E-02)); +#2320 = CARTESIAN_POINT('',(0.32634162501,0.55,8.250014494631E-02)); +#2321 = CARTESIAN_POINT('',(0.329428452217,0.55,8.941595026879E-02)); +#2322 = CARTESIAN_POINT('',(0.332739908081,0.55,9.575426246659E-02)); +#2323 = CARTESIAN_POINT('',(0.336217752683,0.55,0.101577502713)); +#2324 = CARTESIAN_POINT('',(0.340109245197,0.55,0.106731689616)); +#2325 = CARTESIAN_POINT('',(0.344126159711,0.55,0.111443209837)); +#2326 = CARTESIAN_POINT('',(0.347154095046,0.55,0.114097671031)); +#2327 = CARTESIAN_POINT('',(0.348636006976,0.55,0.115396799736)); +#2328 = ORIENTED_EDGE('',*,*,#2329,.T.); +#2329 = EDGE_CURVE('',#2314,#2330,#2332,.T.); +#2330 = VERTEX_POINT('',#2331); +#2331 = CARTESIAN_POINT('',(0.407109564668,0.55,0.134327088198)); +#2332 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2333,#2334,#2335,#2336,#2337, + #2338,#2339,#2340,#2341,#2342,#2343),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.118271304836,0.236177533084,0.355662932949, + 0.475904164671,0.600127341711,0.728608116155,0.861313475674,1.), + .UNSPECIFIED.); +#2333 = CARTESIAN_POINT('',(0.348636006976,0.55,0.115396799736)); +#2334 = CARTESIAN_POINT('',(0.350595664629,0.55,0.116907633125)); +#2335 = CARTESIAN_POINT('',(0.354508930917,0.55,0.119924636303)); +#2336 = CARTESIAN_POINT('',(0.360885754027,0.55,0.123774799157)); +#2337 = CARTESIAN_POINT('',(0.367592242635,0.55,0.127110901691)); +#2338 = CARTESIAN_POINT('',(0.374773710057,0.55,0.129659271262)); +#2339 = CARTESIAN_POINT('',(0.382275187103,0.55,0.131817037341)); +#2340 = CARTESIAN_POINT('',(0.390217923626,0.55,0.133229089254)); +#2341 = CARTESIAN_POINT('',(0.398531845337,0.55,0.134197906389)); +#2342 = CARTESIAN_POINT('',(0.404208621685,0.55,0.134283399538)); +#2343 = CARTESIAN_POINT('',(0.407109564668,0.55,0.134327088198)); +#2344 = ORIENTED_EDGE('',*,*,#2345,.T.); +#2345 = EDGE_CURVE('',#2330,#2346,#2348,.T.); +#2346 = VERTEX_POINT('',#2347); +#2347 = CARTESIAN_POINT('',(0.496222144797,0.55,6.028862665938E-02)); +#2348 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2349,#2350,#2351,#2352,#2353, + #2354,#2355,#2356,#2357,#2358,#2359,#2360,#2361,#2362,#2363,#2364, + #2365,#2366,#2367),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,7.607173695556E-02,0.148751714575,0.218402793846, + 0.285759581062,0.350598023675,0.414964044598,0.478069338572, + 0.541760676007,0.604349858539,0.664075021071,0.72146362308, + 0.777587128236,0.832644446927,0.887843511068,0.943460342652,1.), + .UNSPECIFIED.); +#2349 = CARTESIAN_POINT('',(0.407109564668,0.55,0.134327088198)); +#2350 = CARTESIAN_POINT('',(0.410384914933,0.55,0.134265497673)); +#2351 = CARTESIAN_POINT('',(0.416789579625,0.55,0.134145062719)); +#2352 = CARTESIAN_POINT('',(0.426135065558,0.55,0.133037492034)); +#2353 = CARTESIAN_POINT('',(0.435025810315,0.55,0.13142445069)); +#2354 = CARTESIAN_POINT('',(0.443363102892,0.55,0.128933152408)); +#2355 = CARTESIAN_POINT('',(0.451256153627,0.55,0.125855067262)); +#2356 = CARTESIAN_POINT('',(0.458594318589,0.55,0.121990226719)); +#2357 = CARTESIAN_POINT('',(0.465473929208,0.55,0.117455754555)); +#2358 = CARTESIAN_POINT('',(0.471806869751,0.55,0.112301838691)); +#2359 = CARTESIAN_POINT('',(0.477501420502,0.55,0.106659689183)); +#2360 = CARTESIAN_POINT('',(0.482515371826,0.55,0.100758382072)); +#2361 = CARTESIAN_POINT('',(0.486777837974,0.55,9.462279912081E-02)); +#2362 = CARTESIAN_POINT('',(0.490216195793,0.55,8.821898702914E-02)); +#2363 = CARTESIAN_POINT('',(0.492931250823,0.55,8.157346414113E-02)); +#2364 = CARTESIAN_POINT('',(0.49477957088,0.55,7.466758120569E-02)); +#2365 = CARTESIAN_POINT('',(0.496064722393,0.55,6.755785458528E-02)); +#2366 = CARTESIAN_POINT('',(0.49616938361,0.55,6.272495769112E-02)); +#2367 = CARTESIAN_POINT('',(0.496222144797,0.55,6.028862665938E-02)); +#2368 = ORIENTED_EDGE('',*,*,#2369,.T.); +#2369 = EDGE_CURVE('',#2346,#2370,#2372,.T.); +#2370 = VERTEX_POINT('',#2371); +#2371 = CARTESIAN_POINT('',(0.388529837104,0.55,-1.374983487908E-02)); +#2372 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2373,#2374,#2375,#2376,#2377, + #2378,#2379,#2380,#2381,#2382,#2383,#2384,#2385,#2386,#2387,#2388, + #2389,#2390,#2391),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.690918560566E-02,0.133485440423,0.20103511657, + 0.271234340019,0.342879984162,0.41383612961,0.485976621974, + 0.560229557256,0.599884180752,0.644054839643,0.691891931584, + 0.744687524474,0.80149177517,0.86285769822,0.929328379395,1.), + .UNSPECIFIED.); +#2373 = CARTESIAN_POINT('',(0.496222144797,0.55,6.028862665938E-02)); +#2374 = CARTESIAN_POINT('',(0.496069114644,0.55,5.702749277238E-02)); +#2375 = CARTESIAN_POINT('',(0.495763815796,0.55,5.052145194637E-02)); +#2376 = CARTESIAN_POINT('',(0.493432957851,0.55,4.094969451912E-02)); +#2377 = CARTESIAN_POINT('',(0.489599071431,0.55,3.172735327521E-02)); +#2378 = CARTESIAN_POINT('',(0.4842318203,0.55,2.301177426942E-02)); +#2379 = CARTESIAN_POINT('',(0.477698247435,0.55,1.493418411597E-02)); +#2380 = CARTESIAN_POINT('',(0.470061756749,0.55,7.727035868167E-03)); +#2381 = CARTESIAN_POINT('',(0.461258933912,0.55,1.780026761058E-03)); +#2382 = CARTESIAN_POINT('',(0.453156947009,0.55,-2.32883887881E-03)); +#2383 = CARTESIAN_POINT('',(0.445980431358,0.55,-5.132546397187E-03)); +#2384 = CARTESIAN_POINT('',(0.439838892914,0.55,-7.000042842113E-03)); +#2385 = CARTESIAN_POINT('',(0.432963232576,0.55,-8.581408409722E-03)); +#2386 = CARTESIAN_POINT('',(0.425436597689,0.55,-1.005263556219E-02)); +#2387 = CARTESIAN_POINT('',(0.417202276044,0.55,-1.130477037738E-02)); +#2388 = CARTESIAN_POINT('',(0.408269232247,0.55,-1.234895195172E-02)); +#2389 = CARTESIAN_POINT('',(0.398635656086,0.55,-1.318445604617E-02)); +#2390 = CARTESIAN_POINT('',(0.3919665395,0.55,-1.355756557432E-02)); +#2391 = CARTESIAN_POINT('',(0.388529837104,0.55,-1.374983487908E-02)); +#2392 = ORIENTED_EDGE('',*,*,#2393,.T.); +#2393 = EDGE_CURVE('',#2370,#2394,#2396,.T.); +#2394 = VERTEX_POINT('',#2395); +#2395 = CARTESIAN_POINT('',(0.388529837104,0.55,-4.964727077652E-02)); +#2396 = LINE('',#2397,#2398); +#2397 = CARTESIAN_POINT('',(0.388529837104,0.55,-1.374983487908E-02)); +#2398 = VECTOR('',#2399,1.); +#2399 = DIRECTION('',(0.,0.,-1.)); +#2400 = ORIENTED_EDGE('',*,*,#2401,.T.); +#2401 = EDGE_CURVE('',#2394,#2120,#2402,.T.); +#2402 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2403,#2404,#2405,#2406,#2407, + #2408,#2409,#2410,#2411,#2412,#2413,#2414,#2415,#2416,#2417), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0.,0.110165553211, + 0.215787256175,0.318027434909,0.417573954166,0.511650487647, + 0.596162097103,0.672934533485,0.74366955735,0.810677001065, + 0.874058962314,0.936696301919,1.),.UNSPECIFIED.); +#2403 = CARTESIAN_POINT('',(0.388529837104,0.55,-4.964727077652E-02)); +#2404 = CARTESIAN_POINT('',(0.392859953676,0.55,-4.972075114864E-02)); +#2405 = CARTESIAN_POINT('',(0.401341588332,0.55,-4.986468114691E-02)); +#2406 = CARTESIAN_POINT('',(0.413731018808,0.55,-5.160548218641E-02)); +#2407 = CARTESIAN_POINT('',(0.425578350022,0.55,-5.401354499199E-02)); +#2408 = CARTESIAN_POINT('',(0.436621024222,0.55,-5.770206421902E-02)); +#2409 = CARTESIAN_POINT('',(0.446685895557,0.55,-6.198609390495E-02)); +#2410 = CARTESIAN_POINT('',(0.455417855765,0.55,-6.697131485653E-02)); +#2411 = CARTESIAN_POINT('',(0.462694570492,0.55,-7.25127897812E-02)); +#2412 = CARTESIAN_POINT('',(0.468480677642,0.55,-7.869605071543E-02)); +#2413 = CARTESIAN_POINT('',(0.472833600506,0.55,-8.532755546377E-02)); +#2414 = CARTESIAN_POINT('',(0.476016280249,0.55,-9.223922123252E-02)); +#2415 = CARTESIAN_POINT('',(0.477896312873,0.55,-9.949162732615E-02)); +#2416 = CARTESIAN_POINT('',(0.478147279565,0.55,-0.104441094119)); +#2417 = CARTESIAN_POINT('',(0.478273426848,0.55,-0.106928921418)); +#2418 = FACE_BOUND('',#2419,.T.); +#2419 = EDGE_LOOP('',(#2420,#2454,#2486,#2518)); +#2420 = ORIENTED_EDGE('',*,*,#2421,.T.); +#2421 = EDGE_CURVE('',#2422,#2424,#2426,.T.); +#2422 = VERTEX_POINT('',#2423); +#2423 = CARTESIAN_POINT('',(0.258401631976,0.55,-1.360961052011E-02)); +#2424 = VERTEX_POINT('',#2425); +#2425 = CARTESIAN_POINT('',(0.13759834672,0.55,0.170224524095)); +#2426 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2427,#2428,#2429,#2430,#2431, + #2432,#2433,#2434,#2435,#2436,#2437,#2438,#2439,#2440,#2441,#2442, + #2443,#2444,#2445,#2446,#2447,#2448,#2449,#2450,#2451,#2452,#2453), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,6.506328961728E-02,0.126773166467,0.185515763226, + 0.240764679168,0.292979796024,0.34225037278,0.388919286186, + 0.432775664058,0.474628432631,0.514774690638,0.553605893498, + 0.591426406431,0.628028119946,0.66380363411,0.698984336132, + 0.733591489307,0.767628469151,0.801208347787,0.834263839727, + 0.866980694729,0.899719741518,0.932701912499,0.966175883433,1.), + .UNSPECIFIED.); +#2427 = CARTESIAN_POINT('',(0.258401631976,0.55,-1.360961052011E-02)); +#2428 = CARTESIAN_POINT('',(0.258336473522,0.55,-8.257219726017E-03)); +#2429 = CARTESIAN_POINT('',(0.258209514931,0.55,2.171695459866E-03)); +#2430 = CARTESIAN_POINT('',(0.257551644254,0.55,1.742479299185E-02)); +#2431 = CARTESIAN_POINT('',(0.256255781136,0.55,3.18245973217E-02)); +#2432 = CARTESIAN_POINT('',(0.254634782305,0.55,4.540564356757E-02)); +#2433 = CARTESIAN_POINT('',(0.252389686008,0.55,5.811140545087E-02)); +#2434 = CARTESIAN_POINT('',(0.249629169383,0.55,6.998585029766E-02)); +#2435 = CARTESIAN_POINT('',(0.2465641371,0.55,8.10802574642E-02)); +#2436 = CARTESIAN_POINT('',(0.242780657689,0.55,9.13037386252E-02)); +#2437 = CARTESIAN_POINT('',(0.238639586655,0.55,0.100798910912)); +#2438 = CARTESIAN_POINT('',(0.234134067037,0.55,0.109665625745)); +#2439 = CARTESIAN_POINT('',(0.229307084429,0.55,0.117982255013)); +#2440 = CARTESIAN_POINT('',(0.224048209928,0.55,0.125682229706)); +#2441 = CARTESIAN_POINT('',(0.218442868609,0.55,0.132820095413)); +#2442 = CARTESIAN_POINT('',(0.212371089729,0.55,0.139269857678)); +#2443 = CARTESIAN_POINT('',(0.206004031219,0.55,0.145186924874)); +#2444 = CARTESIAN_POINT('',(0.199262789636,0.55,0.150452087621)); +#2445 = CARTESIAN_POINT('',(0.192221634513,0.55,0.155060568084)); +#2446 = CARTESIAN_POINT('',(0.18502572682,0.55,0.159181953123)); +#2447 = CARTESIAN_POINT('',(0.177547388485,0.55,0.162505222628)); +#2448 = CARTESIAN_POINT('',(0.169956093212,0.55,0.165358726726)); +#2449 = CARTESIAN_POINT('',(0.162143256601,0.55,0.167538771914)); +#2450 = CARTESIAN_POINT('',(0.154118617532,0.55,0.169046157467)); +#2451 = CARTESIAN_POINT('',(0.145922993939,0.55,0.170103342312)); +#2452 = CARTESIAN_POINT('',(0.140382837431,0.55,0.1701839903)); +#2453 = CARTESIAN_POINT('',(0.13759834672,0.55,0.170224524095)); +#2454 = ORIENTED_EDGE('',*,*,#2455,.T.); +#2455 = EDGE_CURVE('',#2424,#2456,#2458,.T.); +#2456 = VERTEX_POINT('',#2457); +#2457 = CARTESIAN_POINT('',(2.058111915558E-02,0.55,-1.360961052011E-02) + ); +#2458 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2459,#2460,#2461,#2462,#2463, + #2464,#2465,#2466,#2467,#2468,#2469,#2470,#2471,#2472,#2473,#2474, + #2475,#2476,#2477,#2478,#2479,#2480,#2481,#2482,#2483,#2484,#2485), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,3.378714634699E-02,6.662165772429E-02,9.928487809597E-02, + 0.131361165043,0.163585187595,0.196103926987,0.228902254324, + 0.262158055905,0.295991222258,0.330217845725,0.365059825892, + 0.40095073734,0.437620382077,0.475707529437,0.515380691625, + 0.556413541493,0.599764829873,0.646424155584,0.696431444518, + 0.749781517802,0.806573306976,0.867435531565,0.931886753251,1.), + .UNSPECIFIED.); +#2459 = CARTESIAN_POINT('',(0.13759834672,0.55,0.170224524095)); +#2460 = CARTESIAN_POINT('',(0.134837935321,0.55,0.170177888549)); +#2461 = CARTESIAN_POINT('',(0.129394942845,0.55,0.170085932356)); +#2462 = CARTESIAN_POINT('',(0.121329700301,0.55,0.169134559207)); +#2463 = CARTESIAN_POINT('',(0.113501455957,0.55,0.167605008886)); +#2464 = CARTESIAN_POINT('',(0.105871580553,0.55,0.165463348476)); +#2465 = CARTESIAN_POINT('',(9.840092904454E-02,0.55,0.162841864845)); +#2466 = CARTESIAN_POINT('',(9.119130037896E-02,0.55,0.159426496485)); +#2467 = CARTESIAN_POINT('',(8.416253200989E-02,0.55,0.155493089589)); +#2468 = CARTESIAN_POINT('',(7.733337640808E-02,0.55,0.151013547445)); +#2469 = CARTESIAN_POINT('',(7.08321603041E-02,0.55,0.145881379132)); +#2470 = CARTESIAN_POINT('',(6.462229977272E-02,0.55,0.140204950264)); +#2471 = CARTESIAN_POINT('',(5.885979786302E-02,0.55,0.133842609134)); +#2472 = CARTESIAN_POINT('',(5.349638830129E-02,0.55,0.126894816823)); +#2473 = CARTESIAN_POINT('',(4.839897948171E-02,0.55,0.11942549259)); +#2474 = CARTESIAN_POINT('',(4.371004214979E-02,0.55,0.111332655285)); +#2475 = CARTESIAN_POINT('',(3.937295674298E-02,0.55,0.102648394236)); +#2476 = CARTESIAN_POINT('',(3.540860767613E-02,0.55,9.331660316894E-02) + ); +#2477 = CARTESIAN_POINT('',(3.189374132464E-02,0.55,8.320111038296E-02) + ); +#2478 = CARTESIAN_POINT('',(2.87889705133E-02,0.55,7.218619253271E-02)); +#2479 = CARTESIAN_POINT('',(2.633755476629E-02,0.55,6.01746289213E-02)); +#2480 = CARTESIAN_POINT('',(2.4239259233E-02,0.55,4.726289221077E-02)); +#2481 = CARTESIAN_POINT('',(2.254682092865E-02,0.55,3.339549917218E-02) + ); +#2482 = CARTESIAN_POINT('',(2.139138839682E-02,0.55,1.856492135349E-02) + ); +#2483 = CARTESIAN_POINT('',(2.067725689324E-02,0.55,2.780400460877E-03) + ); +#2484 = CARTESIAN_POINT('',(2.061374985123E-02,0.55,-8.046576970783E-03) + ); +#2485 = CARTESIAN_POINT('',(2.058111915558E-02,0.55,-1.360961052011E-02) + ); +#2486 = ORIENTED_EDGE('',*,*,#2487,.T.); +#2487 = EDGE_CURVE('',#2456,#2488,#2490,.T.); +#2488 = VERTEX_POINT('',#2489); +#2489 = CARTESIAN_POINT('',(0.13759834672,0.55,-0.197724193853)); +#2490 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2491,#2492,#2493,#2494,#2495, + #2496,#2497,#2498,#2499,#2500,#2501,#2502,#2503,#2504,#2505,#2506, + #2507,#2508,#2509,#2510,#2511,#2512,#2513,#2514,#2515,#2516,#2517), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,6.859462225874E-02,0.133246042443,0.194312586468, + 0.251279223117,0.304513439256,0.354234906653,0.400480588774, + 0.443410754938,0.484014868616,0.523252300773,0.561042372728, + 0.597900239364,0.633518488856,0.66831435117,0.702495671286, + 0.736685353513,0.770293169361,0.803437255019,0.835912951666, + 0.868460245789,0.900846538243,0.933466524631,0.966257575298,1.), + .UNSPECIFIED.); +#2491 = CARTESIAN_POINT('',(2.058111915558E-02,0.55,-1.360961052011E-02) + ); +#2492 = CARTESIAN_POINT('',(2.061392097133E-02,0.55,-1.921934929353E-02) + ); +#2493 = CARTESIAN_POINT('',(2.067763897121E-02,0.55,-3.011634771828E-02) + ); +#2494 = CARTESIAN_POINT('',(2.138648106544E-02,0.55,-4.599481192496E-02) + ); +#2495 = CARTESIAN_POINT('',(2.256401529675E-02,0.55,-6.089084082448E-02) + ); +#2496 = CARTESIAN_POINT('',(2.417775258178E-02,0.55,-7.480514742832E-02) + ); +#2497 = CARTESIAN_POINT('',(2.614155060414E-02,0.55,-8.774132388009E-02) + ); +#2498 = CARTESIAN_POINT('',(2.876309926427E-02,0.55,-9.966479959372E-02) + ); +#2499 = CARTESIAN_POINT('',(3.174437952577E-02,0.55,-0.110630760255)); +#2500 = CARTESIAN_POINT('',(3.519962410682E-02,0.55,-0.120674965103)); +#2501 = CARTESIAN_POINT('',(3.909840300865E-02,0.55,-0.129932735405)); +#2502 = CARTESIAN_POINT('',(4.334182908086E-02,0.55,-0.138575255534)); +#2503 = CARTESIAN_POINT('',(4.809830852322E-02,0.55,-0.146589448768)); +#2504 = CARTESIAN_POINT('',(5.309599981593E-02,0.55,-0.15410322781)); +#2505 = CARTESIAN_POINT('',(5.853720697871E-02,0.55,-0.160993597289)); +#2506 = CARTESIAN_POINT('',(6.426708602543E-02,0.55,-0.167357863541)); +#2507 = CARTESIAN_POINT('',(7.050927365215E-02,0.55,-0.173048938588)); +#2508 = CARTESIAN_POINT('',(7.705157447949E-02,0.55,-0.178233568826)); +#2509 = CARTESIAN_POINT('',(8.395322091866E-02,0.55,-0.182778515993)); +#2510 = CARTESIAN_POINT('',(9.101748753298E-02,0.55,-0.186781789855)); +#2511 = CARTESIAN_POINT('',(9.829299811858E-02,0.55,-0.190201776581)); +#2512 = CARTESIAN_POINT('',(0.105799616408,0.55,-0.192890820167)); +#2513 = CARTESIAN_POINT('',(0.113469872197,0.55,-0.195111904844)); +#2514 = CARTESIAN_POINT('',(0.121330578866,0.55,-0.196630799609)); +#2515 = CARTESIAN_POINT('',(0.12939471526,0.55,-0.197586490458)); +#2516 = CARTESIAN_POINT('',(0.13483785874,0.55,-0.197677857232)); +#2517 = CARTESIAN_POINT('',(0.13759834672,0.55,-0.197724193853)); +#2518 = ORIENTED_EDGE('',*,*,#2519,.T.); +#2519 = EDGE_CURVE('',#2488,#2422,#2520,.T.); +#2520 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2521,#2522,#2523,#2524,#2525, + #2526,#2527,#2528,#2529,#2530,#2531,#2532,#2533,#2534,#2535,#2536, + #2537,#2538,#2539,#2540,#2541,#2542,#2543,#2544,#2545,#2546,#2547), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,3.378811616271E-02,6.719393237388E-02,9.986241085683E-02, + 0.132566612126,0.165151173255,0.197913187356,0.231319003567, + 0.265083278267,0.299255308758,0.334398566505,0.369942823509, + 0.4062835607,0.444063819699,0.482997706873,0.523354446613, + 0.565536589604,0.609612924066,0.656390811376,0.705885494936, + 0.758324500262,0.813831782941,0.872794559039,0.93472222954,1.), + .UNSPECIFIED.); +#2521 = CARTESIAN_POINT('',(0.13759834672,0.55,-0.197724193853)); +#2522 = CARTESIAN_POINT('',(0.140381894568,0.55,-0.197675412336)); +#2523 = CARTESIAN_POINT('',(0.145917495458,0.55,-0.197578401245)); +#2524 = CARTESIAN_POINT('',(0.154101532982,0.55,-0.196646006992)); +#2525 = CARTESIAN_POINT('',(0.162096501154,0.55,-0.195098894682)); +#2526 = CARTESIAN_POINT('',(0.169868315024,0.55,-0.192906797224)); +#2527 = CARTESIAN_POINT('',(0.177480813671,0.55,-0.190187229558)); +#2528 = CARTESIAN_POINT('',(0.184874454435,0.55,-0.186778517847)); +#2529 = CARTESIAN_POINT('',(0.1920951626,0.55,-0.182810631113)); +#2530 = CARTESIAN_POINT('',(0.199028191352,0.55,-0.178148243382)); +#2531 = CARTESIAN_POINT('',(0.205749652886,0.55,-0.172950015762)); +#2532 = CARTESIAN_POINT('',(0.212094449183,0.55,-0.167073748882)); +#2533 = CARTESIAN_POINT('',(0.218063157773,0.55,-0.160578776955)); +#2534 = CARTESIAN_POINT('',(0.223730688312,0.55,-0.153534590567)); +#2535 = CARTESIAN_POINT('',(0.228936248032,0.55,-0.145806082083)); +#2536 = CARTESIAN_POINT('',(0.233893591255,0.55,-0.137527671102)); +#2537 = CARTESIAN_POINT('',(0.238330794845,0.55,-0.128554584622)); +#2538 = CARTESIAN_POINT('',(0.242604262363,0.55,-0.119036537838)); +#2539 = CARTESIAN_POINT('',(0.246292961037,0.55,-0.108710171958)); +#2540 = CARTESIAN_POINT('',(0.249619585564,0.55,-9.763369590579E-02)); +#2541 = CARTESIAN_POINT('',(0.252307482422,0.55,-8.567627722045E-02)); +#2542 = CARTESIAN_POINT('',(0.254546409656,0.55,-7.290065269094E-02)); +#2543 = CARTESIAN_POINT('',(0.25628089925,0.55,-5.925990436693E-02)); +#2544 = CARTESIAN_POINT('',(0.257544163458,0.55,-4.478327281575E-02)); +#2545 = CARTESIAN_POINT('',(0.258211471962,0.55,-2.946123375167E-02)); +#2546 = CARTESIAN_POINT('',(0.258337142083,0.55,-1.898544883396E-02)); +#2547 = CARTESIAN_POINT('',(0.258401631976,0.55,-1.360961052011E-02)); +#2548 = FACE_BOUND('',#2549,.T.); +#2549 = EDGE_LOOP('',(#2550,#2584,#2616,#2648)); +#2550 = ORIENTED_EDGE('',*,*,#2551,.T.); +#2551 = EDGE_CURVE('',#2552,#2554,#2556,.T.); +#2552 = VERTEX_POINT('',#2553); +#2553 = CARTESIAN_POINT('',(-0.280059906485,0.55,-1.360961052011E-02)); +#2554 = VERTEX_POINT('',#2555); +#2555 = CARTESIAN_POINT('',(-0.400863191742,0.55,0.170224524095)); +#2556 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2557,#2558,#2559,#2560,#2561, + #2562,#2563,#2564,#2565,#2566,#2567,#2568,#2569,#2570,#2571,#2572, + #2573,#2574,#2575,#2576,#2577,#2578,#2579,#2580,#2581,#2582,#2583), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,6.506328961728E-02,0.126773166467,0.185515763226, + 0.240764679168,0.292979796024,0.34225037278,0.388919286186, + 0.432775664058,0.474628432631,0.514774690638,0.553605893498, + 0.591426406431,0.628028119946,0.66380363411,0.698984336132, + 0.733591489307,0.767628469151,0.801208347787,0.834263839727, + 0.866980694729,0.899719741518,0.932701912499,0.966175883433,1.), + .UNSPECIFIED.); +#2557 = CARTESIAN_POINT('',(-0.280059906485,0.55,-1.360961052011E-02)); +#2558 = CARTESIAN_POINT('',(-0.28012506494,0.55,-8.257219726017E-03)); +#2559 = CARTESIAN_POINT('',(-0.280252023531,0.55,2.171695459866E-03)); +#2560 = CARTESIAN_POINT('',(-0.280909894208,0.55,1.742479299185E-02)); +#2561 = CARTESIAN_POINT('',(-0.282205757326,0.55,3.18245973217E-02)); +#2562 = CARTESIAN_POINT('',(-0.283826756157,0.55,4.540564356757E-02)); +#2563 = CARTESIAN_POINT('',(-0.286071852454,0.55,5.811140545087E-02)); +#2564 = CARTESIAN_POINT('',(-0.288832369079,0.55,6.998585029766E-02)); +#2565 = CARTESIAN_POINT('',(-0.291897401361,0.55,8.10802574642E-02)); +#2566 = CARTESIAN_POINT('',(-0.295680880772,0.55,9.13037386252E-02)); +#2567 = CARTESIAN_POINT('',(-0.299821951807,0.55,0.100798910912)); +#2568 = CARTESIAN_POINT('',(-0.304327471424,0.55,0.109665625745)); +#2569 = CARTESIAN_POINT('',(-0.309154454033,0.55,0.117982255013)); +#2570 = CARTESIAN_POINT('',(-0.314413328533,0.55,0.125682229706)); +#2571 = CARTESIAN_POINT('',(-0.320018669853,0.55,0.132820095413)); +#2572 = CARTESIAN_POINT('',(-0.326090448732,0.55,0.139269857678)); +#2573 = CARTESIAN_POINT('',(-0.332457507242,0.55,0.145186924874)); +#2574 = CARTESIAN_POINT('',(-0.339198748826,0.55,0.150452087621)); +#2575 = CARTESIAN_POINT('',(-0.346239903949,0.55,0.155060568084)); +#2576 = CARTESIAN_POINT('',(-0.353435811642,0.55,0.159181953123)); +#2577 = CARTESIAN_POINT('',(-0.360914149976,0.55,0.162505222628)); +#2578 = CARTESIAN_POINT('',(-0.368505445249,0.55,0.165358726726)); +#2579 = CARTESIAN_POINT('',(-0.376318281861,0.55,0.167538771914)); +#2580 = CARTESIAN_POINT('',(-0.38434292093,0.55,0.169046157467)); +#2581 = CARTESIAN_POINT('',(-0.392538544522,0.55,0.170103342312)); +#2582 = CARTESIAN_POINT('',(-0.398078701031,0.55,0.1701839903)); +#2583 = CARTESIAN_POINT('',(-0.400863191742,0.55,0.170224524095)); +#2584 = ORIENTED_EDGE('',*,*,#2585,.T.); +#2585 = EDGE_CURVE('',#2554,#2586,#2588,.T.); +#2586 = VERTEX_POINT('',#2587); +#2587 = CARTESIAN_POINT('',(-0.517880419306,0.55,-1.360961052011E-02)); +#2588 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2589,#2590,#2591,#2592,#2593, + #2594,#2595,#2596,#2597,#2598,#2599,#2600,#2601,#2602,#2603,#2604, + #2605,#2606,#2607,#2608,#2609,#2610,#2611,#2612,#2613,#2614,#2615), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,3.378714634699E-02,6.662165772429E-02,9.928487809597E-02, + 0.131361165043,0.163585187595,0.196103926987,0.228902254324, + 0.262158055905,0.295991222258,0.330217845725,0.365059825892, + 0.40095073734,0.437620382077,0.475707529437,0.515380691625, + 0.556413541493,0.599764829873,0.646424155584,0.696431444518, + 0.749781517802,0.806573306976,0.867435531565,0.931886753251,1.), + .UNSPECIFIED.); +#2589 = CARTESIAN_POINT('',(-0.400863191742,0.55,0.170224524095)); +#2590 = CARTESIAN_POINT('',(-0.40362360314,0.55,0.170177888549)); +#2591 = CARTESIAN_POINT('',(-0.409066595617,0.55,0.170085932356)); +#2592 = CARTESIAN_POINT('',(-0.417131838161,0.55,0.169134559207)); +#2593 = CARTESIAN_POINT('',(-0.424960082505,0.55,0.167605008886)); +#2594 = CARTESIAN_POINT('',(-0.432589957909,0.55,0.165463348476)); +#2595 = CARTESIAN_POINT('',(-0.440060609417,0.55,0.162841864845)); +#2596 = CARTESIAN_POINT('',(-0.447270238083,0.55,0.159426496485)); +#2597 = CARTESIAN_POINT('',(-0.454299006452,0.55,0.155493089589)); +#2598 = CARTESIAN_POINT('',(-0.461128162053,0.55,0.151013547445)); +#2599 = CARTESIAN_POINT('',(-0.467629378157,0.55,0.145881379132)); +#2600 = CARTESIAN_POINT('',(-0.473839238689,0.55,0.140204950264)); +#2601 = CARTESIAN_POINT('',(-0.479601740599,0.55,0.133842609134)); +#2602 = CARTESIAN_POINT('',(-0.48496515016,0.55,0.126894816823)); +#2603 = CARTESIAN_POINT('',(-0.49006255898,0.55,0.11942549259)); +#2604 = CARTESIAN_POINT('',(-0.494751496312,0.55,0.111332655285)); +#2605 = CARTESIAN_POINT('',(-0.499088581719,0.55,0.102648394236)); +#2606 = CARTESIAN_POINT('',(-0.503052930785,0.55,9.331660316894E-02)); +#2607 = CARTESIAN_POINT('',(-0.506567797137,0.55,8.320111038296E-02)); +#2608 = CARTESIAN_POINT('',(-0.509672567948,0.55,7.218619253271E-02)); +#2609 = CARTESIAN_POINT('',(-0.512123983695,0.55,6.01746289213E-02)); +#2610 = CARTESIAN_POINT('',(-0.514222279229,0.55,4.726289221077E-02)); +#2611 = CARTESIAN_POINT('',(-0.515914717533,0.55,3.339549917218E-02)); +#2612 = CARTESIAN_POINT('',(-0.517070150065,0.55,1.856492135349E-02)); +#2613 = CARTESIAN_POINT('',(-0.517784281568,0.55,2.780400460877E-03)); +#2614 = CARTESIAN_POINT('',(-0.51784778861,0.55,-8.046576970783E-03)); +#2615 = CARTESIAN_POINT('',(-0.517880419306,0.55,-1.360961052011E-02)); +#2616 = ORIENTED_EDGE('',*,*,#2617,.T.); +#2617 = EDGE_CURVE('',#2586,#2618,#2620,.T.); +#2618 = VERTEX_POINT('',#2619); +#2619 = CARTESIAN_POINT('',(-0.400863191742,0.55,-0.197724193853)); +#2620 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2621,#2622,#2623,#2624,#2625, + #2626,#2627,#2628,#2629,#2630,#2631,#2632,#2633,#2634,#2635,#2636, + #2637,#2638,#2639,#2640,#2641,#2642,#2643,#2644,#2645,#2646,#2647), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,6.859462225874E-02,0.133246042443,0.194312586468, + 0.251279223117,0.304513439256,0.354234906653,0.400480588774, + 0.443410754938,0.484014868616,0.523252300773,0.561042372728, + 0.597900239364,0.633518488856,0.66831435117,0.702495671286, + 0.736685353513,0.770293169361,0.803437255019,0.835912951666, + 0.868460245789,0.900846538243,0.933466524631,0.966257575298,1.), + .UNSPECIFIED.); +#2621 = CARTESIAN_POINT('',(-0.517880419306,0.55,-1.360961052011E-02)); +#2622 = CARTESIAN_POINT('',(-0.51784761749,0.55,-1.921934929353E-02)); +#2623 = CARTESIAN_POINT('',(-0.51778389949,0.55,-3.011634771828E-02)); +#2624 = CARTESIAN_POINT('',(-0.517075057396,0.55,-4.599481192496E-02)); +#2625 = CARTESIAN_POINT('',(-0.515897523165,0.55,-6.089084082448E-02)); +#2626 = CARTESIAN_POINT('',(-0.51428378588,0.55,-7.480514742832E-02)); +#2627 = CARTESIAN_POINT('',(-0.512319987857,0.55,-8.774132388009E-02)); +#2628 = CARTESIAN_POINT('',(-0.509698439197,0.55,-9.966479959372E-02)); +#2629 = CARTESIAN_POINT('',(-0.506717158936,0.55,-0.110630760255)); +#2630 = CARTESIAN_POINT('',(-0.503261914355,0.55,-0.120674965103)); +#2631 = CARTESIAN_POINT('',(-0.499363135453,0.55,-0.129932735405)); +#2632 = CARTESIAN_POINT('',(-0.495119709381,0.55,-0.138575255534)); +#2633 = CARTESIAN_POINT('',(-0.490363229938,0.55,-0.146589448768)); +#2634 = CARTESIAN_POINT('',(-0.485365538646,0.55,-0.15410322781)); +#2635 = CARTESIAN_POINT('',(-0.479924331483,0.55,-0.160993597289)); +#2636 = CARTESIAN_POINT('',(-0.474194452436,0.55,-0.167357863541)); +#2637 = CARTESIAN_POINT('',(-0.467952264809,0.55,-0.173048938588)); +#2638 = CARTESIAN_POINT('',(-0.461409963982,0.55,-0.178233568826)); +#2639 = CARTESIAN_POINT('',(-0.454508317543,0.55,-0.182778515993)); +#2640 = CARTESIAN_POINT('',(-0.447444050929,0.55,-0.186781789855)); +#2641 = CARTESIAN_POINT('',(-0.440168540343,0.55,-0.190201776581)); +#2642 = CARTESIAN_POINT('',(-0.432661922053,0.55,-0.192890820167)); +#2643 = CARTESIAN_POINT('',(-0.424991666264,0.55,-0.195111904844)); +#2644 = CARTESIAN_POINT('',(-0.417130959595,0.55,-0.196630799609)); +#2645 = CARTESIAN_POINT('',(-0.409066823201,0.55,-0.197586490458)); +#2646 = CARTESIAN_POINT('',(-0.403623679722,0.55,-0.197677857232)); +#2647 = CARTESIAN_POINT('',(-0.400863191742,0.55,-0.197724193853)); +#2648 = ORIENTED_EDGE('',*,*,#2649,.T.); +#2649 = EDGE_CURVE('',#2618,#2552,#2650,.T.); +#2650 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2651,#2652,#2653,#2654,#2655, + #2656,#2657,#2658,#2659,#2660,#2661,#2662,#2663,#2664,#2665,#2666, + #2667,#2668,#2669,#2670,#2671,#2672,#2673,#2674,#2675,#2676,#2677), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,3.378811616271E-02,6.719393237388E-02,9.986241085683E-02, + 0.132566612126,0.165151173255,0.197913187356,0.231319003567, + 0.265083278267,0.299255308758,0.334398566505,0.369942823509, + 0.4062835607,0.444063819699,0.482997706873,0.523354446613, + 0.565536589604,0.609612924066,0.656390811376,0.705885494936, + 0.758324500262,0.813831782941,0.872794559039,0.93472222954,1.), + .UNSPECIFIED.); +#2651 = CARTESIAN_POINT('',(-0.400863191742,0.55,-0.197724193853)); +#2652 = CARTESIAN_POINT('',(-0.398079643893,0.55,-0.197675412336)); +#2653 = CARTESIAN_POINT('',(-0.392544043004,0.55,-0.197578401245)); +#2654 = CARTESIAN_POINT('',(-0.384360005479,0.55,-0.196646006992)); +#2655 = CARTESIAN_POINT('',(-0.376365037308,0.55,-0.195098894682)); +#2656 = CARTESIAN_POINT('',(-0.368593223437,0.55,-0.192906797224)); +#2657 = CARTESIAN_POINT('',(-0.360980724791,0.55,-0.190187229558)); +#2658 = CARTESIAN_POINT('',(-0.353587084026,0.55,-0.186778517847)); +#2659 = CARTESIAN_POINT('',(-0.346366375862,0.55,-0.182810631113)); +#2660 = CARTESIAN_POINT('',(-0.33943334711,0.55,-0.178148243382)); +#2661 = CARTESIAN_POINT('',(-0.332711885575,0.55,-0.172950015762)); +#2662 = CARTESIAN_POINT('',(-0.326367089278,0.55,-0.167073748882)); +#2663 = CARTESIAN_POINT('',(-0.320398380688,0.55,-0.160578776955)); +#2664 = CARTESIAN_POINT('',(-0.31473085015,0.55,-0.153534590567)); +#2665 = CARTESIAN_POINT('',(-0.30952529043,0.55,-0.145806082083)); +#2666 = CARTESIAN_POINT('',(-0.304567947206,0.55,-0.137527671102)); +#2667 = CARTESIAN_POINT('',(-0.300130743616,0.55,-0.128554584622)); +#2668 = CARTESIAN_POINT('',(-0.295857276098,0.55,-0.119036537838)); +#2669 = CARTESIAN_POINT('',(-0.292168577424,0.55,-0.108710171958)); +#2670 = CARTESIAN_POINT('',(-0.288841952897,0.55,-9.763369590579E-02)); +#2671 = CARTESIAN_POINT('',(-0.28615405604,0.55,-8.567627722045E-02)); +#2672 = CARTESIAN_POINT('',(-0.283915128806,0.55,-7.290065269094E-02)); +#2673 = CARTESIAN_POINT('',(-0.282180639211,0.55,-5.925990436693E-02)); +#2674 = CARTESIAN_POINT('',(-0.280917375003,0.55,-4.478327281575E-02)); +#2675 = CARTESIAN_POINT('',(-0.280250066499,0.55,-2.946123375167E-02)); +#2676 = CARTESIAN_POINT('',(-0.280124396379,0.55,-1.898544883396E-02)); +#2677 = CARTESIAN_POINT('',(-0.280059906485,0.55,-1.360961052011E-02)); +#2678 = FACE_BOUND('',#2679,.T.); +#2679 = EDGE_LOOP('',(#2680,#2690,#2698,#2706)); +#2680 = ORIENTED_EDGE('',*,*,#2681,.F.); +#2681 = EDGE_CURVE('',#2682,#2684,#2686,.T.); +#2682 = VERTEX_POINT('',#2683); +#2683 = CARTESIAN_POINT('',(0.55,0.55,-0.4)); +#2684 = VERTEX_POINT('',#2685); +#2685 = CARTESIAN_POINT('',(0.55,0.55,0.4)); +#2686 = LINE('',#2687,#2688); +#2687 = CARTESIAN_POINT('',(0.55,0.55,0.4)); +#2688 = VECTOR('',#2689,1.); +#2689 = DIRECTION('',(2.282530889443E-16,-1.878171516282E-46,1.)); +#2690 = ORIENTED_EDGE('',*,*,#2691,.T.); +#2691 = EDGE_CURVE('',#2682,#2692,#2694,.T.); +#2692 = VERTEX_POINT('',#2693); +#2693 = CARTESIAN_POINT('',(-0.55,0.55,-0.4)); +#2694 = LINE('',#2695,#2696); +#2695 = CARTESIAN_POINT('',(1.351560977094,0.55,-0.4)); +#2696 = VECTOR('',#2697,1.); +#2697 = DIRECTION('',(-1.,3.761581922631E-31,-1.734723475977E-16)); +#2698 = ORIENTED_EDGE('',*,*,#2699,.T.); +#2699 = EDGE_CURVE('',#2692,#2700,#2702,.T.); +#2700 = VERTEX_POINT('',#2701); +#2701 = CARTESIAN_POINT('',(-0.55,0.55,0.4)); +#2702 = LINE('',#2703,#2704); +#2703 = CARTESIAN_POINT('',(-0.55,0.55,0.4)); +#2704 = VECTOR('',#2705,1.); +#2705 = DIRECTION('',(-2.710505431214E-16,-0.,1.)); +#2706 = ORIENTED_EDGE('',*,*,#2707,.F.); +#2707 = EDGE_CURVE('',#2684,#2700,#2708,.T.); +#2708 = LINE('',#2709,#2710); +#2709 = CARTESIAN_POINT('',(1.351560977094,0.55,0.4)); +#2710 = VECTOR('',#2711,1.); +#2711 = DIRECTION('',(-1.,3.761581922631E-31,-1.734723475977E-16)); +#2712 = FACE_BOUND('',#2713,.T.); +#2713 = EDGE_LOOP('',(#2714,#2736,#2744,#2752,#2760,#2770,#2794,#2814)); +#2714 = ORIENTED_EDGE('',*,*,#2715,.T.); +#2715 = EDGE_CURVE('',#2716,#2718,#2720,.T.); +#2716 = VERTEX_POINT('',#2717); +#2717 = CARTESIAN_POINT('',(-0.230700932126,0.55,6.365401127476E-02)); +#2718 = VERTEX_POINT('',#2719); +#2719 = CARTESIAN_POINT('',(-0.191578335973,0.55,-3.800864898165E-02)); +#2720 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2721,#2722,#2723,#2724,#2725, + #2726,#2727,#2728,#2729,#2730,#2731,#2732,#2733,#2734,#2735), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 9.781818961471E-02,0.199726053402,0.305276357478,0.415811490538, + 0.474472231144,0.537273879776,0.60365742056,0.67429886309, + 0.749834485316,0.828598476757,0.912377778158,1.),.UNSPECIFIED.); +#2721 = CARTESIAN_POINT('',(-0.230700932126,0.55,6.365401127476E-02)); +#2722 = CARTESIAN_POINT('',(-0.230582787626,0.55,6.004955295378E-02)); +#2723 = CARTESIAN_POINT('',(-0.230341559129,0.55,5.268993775401E-02)); +#2724 = CARTESIAN_POINT('',(-0.228657220095,0.55,4.154353495966E-02)); +#2725 = CARTESIAN_POINT('',(-0.225950740617,0.55,3.0138426787E-02)); +#2726 = CARTESIAN_POINT('',(-0.222919715982,0.55,2.046300742738E-02)); +#2727 = CARTESIAN_POINT('',(-0.219717154977,0.55,1.253685523142E-02)); +#2728 = CARTESIAN_POINT('',(-0.217051901018,0.55,6.146506168995E-03)); +#2729 = CARTESIAN_POINT('',(-0.213734501414,0.55,-4.296011544768E-04)); +#2730 = CARTESIAN_POINT('',(-0.210197163295,0.55,-7.416964752513E-03)); +#2731 = CARTESIAN_POINT('',(-0.206121476403,0.55,-1.463550802137E-02)); +#2732 = CARTESIAN_POINT('',(-0.201689911464,0.55,-2.22058749675E-02)); +#2733 = CARTESIAN_POINT('',(-0.196779946374,0.55,-3.00076677337E-02)); +#2734 = CARTESIAN_POINT('',(-0.193337930099,0.55,-3.530208725838E-02)); +#2735 = CARTESIAN_POINT('',(-0.191578335973,0.55,-3.800864898165E-02)); +#2736 = ORIENTED_EDGE('',*,*,#2737,.T.); +#2737 = EDGE_CURVE('',#2718,#2738,#2740,.T.); +#2738 = VERTEX_POINT('',#2739); +#2739 = CARTESIAN_POINT('',(-8.711118853673E-02,0.55,-0.197724193853)); +#2740 = LINE('',#2741,#2742); +#2741 = CARTESIAN_POINT('',(-0.191578335973,0.55,-3.800864898165E-02)); +#2742 = VECTOR('',#2743,1.); +#2743 = DIRECTION('',(0.547387929886,0.,-0.836878996161)); +#2744 = ORIENTED_EDGE('',*,*,#2745,.T.); +#2745 = EDGE_CURVE('',#2738,#2746,#2748,.T.); +#2746 = VERTEX_POINT('',#2747); +#2747 = CARTESIAN_POINT('',(-6.292248661365E-02,0.55,-0.178723793212)); +#2748 = LINE('',#2749,#2750); +#2749 = CARTESIAN_POINT('',(-8.711118853673E-02,0.55,-0.197724193853)); +#2750 = VECTOR('',#2751,1.); +#2751 = DIRECTION('',(0.786397428723,0.,0.617720878794)); +#2752 = ORIENTED_EDGE('',*,*,#2753,.T.); +#2753 = EDGE_CURVE('',#2746,#2754,#2756,.T.); +#2754 = VERTEX_POINT('',#2755); +#2755 = CARTESIAN_POINT('',(-0.155400451357,0.55,-3.730752718677E-02)); +#2756 = LINE('',#2757,#2758); +#2757 = CARTESIAN_POINT('',(-6.292248661365E-02,0.55,-0.178723793212)); +#2758 = VECTOR('',#2759,1.); +#2759 = DIRECTION('',(-0.547305260354,0.,0.836933063028)); +#2760 = ORIENTED_EDGE('',*,*,#2761,.T.); +#2761 = EDGE_CURVE('',#2754,#2762,#2764,.T.); +#2762 = VERTEX_POINT('',#2763); +#2763 = CARTESIAN_POINT('',(-0.119152454562,0.55,-4.067291180216E-02)); +#2764 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2765,#2766,#2767,#2768,#2769), + .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.512659336342,1.),.UNSPECIFIED.); +#2765 = CARTESIAN_POINT('',(-0.155400451357,0.55,-3.730752718677E-02)); +#2766 = CARTESIAN_POINT('',(-0.149243423659,0.55,-3.828891325213E-02)); +#2767 = CARTESIAN_POINT('',(-0.137233444981,0.55,-4.020321773425E-02)); +#2768 = CARTESIAN_POINT('',(-0.125076855129,0.55,-4.05190122791E-02)); +#2769 = CARTESIAN_POINT('',(-0.119152454562,0.55,-4.067291180216E-02)); +#2770 = ORIENTED_EDGE('',*,*,#2771,.T.); +#2771 = EDGE_CURVE('',#2762,#2772,#2774,.T.); +#2772 = VERTEX_POINT('',#2773); +#2773 = CARTESIAN_POINT('',(-1.531631674185E-02,0.55,6.302300165938E-02) + ); +#2774 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2775,#2776,#2777,#2778,#2779, + #2780,#2781,#2782,#2783,#2784,#2785,#2786,#2787,#2788,#2789,#2790, + #2791,#2792,#2793),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.523080374203E-02,0.128404896003,0.190067071596, + 0.250943365768,0.311545832852,0.372862802157,0.435023673856, + 0.499071724707,0.56309107505,0.62551010633,0.68668003593, + 0.747282503014,0.808563495216,0.870742103516,0.934340951506,1.), + .UNSPECIFIED.); +#2775 = CARTESIAN_POINT('',(-0.119152454562,0.55,-4.067291180216E-02)); +#2776 = CARTESIAN_POINT('',(-0.115595204929,0.55,-4.057730063258E-02)); +#2777 = CARTESIAN_POINT('',(-0.108592864883,0.55,-4.03890928905E-02)); +#2778 = CARTESIAN_POINT('',(-9.831218466586E-02,0.55,-3.894070782132E-02 + )); +#2779 = CARTESIAN_POINT('',(-8.843329106854E-02,0.55,-3.665819662896E-02 + )); +#2780 = CARTESIAN_POINT('',(-7.8997129843E-02,0.55,-3.333097103413E-02) + ); +#2781 = CARTESIAN_POINT('',(-6.996983165704E-02,0.55,-2.908073559791E-02 + )); +#2782 = CARTESIAN_POINT('',(-6.129959204619E-02,0.55,-2.398684856986E-02 + )); +#2783 = CARTESIAN_POINT('',(-5.314939103557E-02,0.55,-1.778628053418E-02 + )); +#2784 = CARTESIAN_POINT('',(-4.541427311438E-02,0.55,-1.085978495579E-02 + )); +#2785 = CARTESIAN_POINT('',(-3.839156337508E-02,0.55,-3.18808650628E-03) + ); +#2786 = CARTESIAN_POINT('',(-3.217395781933E-02,0.55,4.952047164325E-03) + ); +#2787 = CARTESIAN_POINT('',(-2.695127864592E-02,0.55,1.355213526414E-02) + ); +#2788 = CARTESIAN_POINT('',(-2.271388648446E-02,0.55,2.260782185748E-02) + ); +#2789 = CARTESIAN_POINT('',(-1.942339862467E-02,0.55,3.210514781353E-02) + ); +#2790 = CARTESIAN_POINT('',(-1.702463412031E-02,0.55,4.203196176237E-02) + ); +#2791 = CARTESIAN_POINT('',(-1.560667483833E-02,0.55,5.239510890838E-02) + ); +#2792 = CARTESIAN_POINT('',(-1.541412576682E-02,0.55,5.9442926435E-02)); +#2793 = CARTESIAN_POINT('',(-1.531631674185E-02,0.55,6.302300165938E-02) + ); +#2794 = ORIENTED_EDGE('',*,*,#2795,.T.); +#2795 = EDGE_CURVE('',#2772,#2796,#2798,.T.); +#2796 = VERTEX_POINT('',#2797); +#2797 = CARTESIAN_POINT('',(-0.124691316742,0.55,0.170224524095)); +#2798 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2799,#2800,#2801,#2802,#2803, + #2804,#2805,#2806,#2807,#2808,#2809,#2810,#2811,#2812,#2813), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 8.594794314413E-02,0.169125211881,0.250399107186,0.332289736139, + 0.413364287916,0.494172283371,0.576021735387,0.660756969254, + 0.745783125914,0.830043592975,0.914027545821,1.),.UNSPECIFIED.); +#2799 = CARTESIAN_POINT('',(-1.531631674185E-02,0.55,6.302300165938E-02) + ); +#2800 = CARTESIAN_POINT('',(-1.545862723027E-02,0.55,6.792097205406E-02) + ); +#2801 = CARTESIAN_POINT('',(-1.573866059264E-02,0.55,7.755901864928E-02) + ); +#2802 = CARTESIAN_POINT('',(-1.852904019471E-02,0.55,9.159668928973E-02) + ); +#2803 = CARTESIAN_POINT('',(-2.286500467024E-02,0.55,0.104969940843)); +#2804 = CARTESIAN_POINT('',(-2.906275751055E-02,0.55,0.11746525798)); +#2805 = CARTESIAN_POINT('',(-3.676099580893E-02,0.55,0.129065514938)); +#2806 = CARTESIAN_POINT('',(-4.614875507571E-02,0.55,0.13934406148)); +#2807 = CARTESIAN_POINT('',(-5.689310390911E-02,0.55,0.148511065212)); +#2808 = CARTESIAN_POINT('',(-6.904178372711E-02,0.55,0.156176727132)); +#2809 = CARTESIAN_POINT('',(-8.211608013875E-02,0.55,0.162437032234)); +#2810 = CARTESIAN_POINT('',(-9.585127988018E-02,0.55,0.166933556442)); +#2811 = CARTESIAN_POINT('',(-0.110113994514,0.55,0.169701903381)); +#2812 = CARTESIAN_POINT('',(-0.11979445532,0.55,0.170048963648)); +#2813 = CARTESIAN_POINT('',(-0.124691316742,0.55,0.170224524095)); +#2814 = ORIENTED_EDGE('',*,*,#2815,.T.); +#2815 = EDGE_CURVE('',#2796,#2716,#2816,.T.); +#2816 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2817,#2818,#2819,#2820,#2821, + #2822,#2823,#2824,#2825,#2826,#2827,#2828,#2829,#2830,#2831), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 8.433472199263E-02,0.167052318416,0.249566077241,0.332740481802, + 0.415914886363,0.49782800954,0.580372588608,0.664600121057, + 0.749466693113,0.83251023394,0.915639281668,1.),.UNSPECIFIED.); +#2817 = CARTESIAN_POINT('',(-0.124691316742,0.55,0.170224524095)); +#2818 = CARTESIAN_POINT('',(-0.129400986807,0.55,0.170071703521)); +#2819 = CARTESIAN_POINT('',(-0.138730018608,0.55,0.16976899272)); +#2820 = CARTESIAN_POINT('',(-0.152453298032,0.55,0.167072398932)); +#2821 = CARTESIAN_POINT('',(-0.165639599766,0.55,0.162701688656)); +#2822 = CARTESIAN_POINT('',(-0.178196537857,0.55,0.156680260801)); +#2823 = CARTESIAN_POINT('',(-0.189828599149,0.55,0.149074472506)); +#2824 = CARTESIAN_POINT('',(-0.200235162793,0.55,0.139918244593)); +#2825 = CARTESIAN_POINT('',(-0.209364340248,0.55,0.129407298086)); +#2826 = CARTESIAN_POINT('',(-0.216961802342,0.55,0.117543263358)); +#2827 = CARTESIAN_POINT('',(-0.222987675536,0.55,0.104794267608)); +#2828 = CARTESIAN_POINT('',(-0.227506668048,0.55,9.150055196899E-02)); +#2829 = CARTESIAN_POINT('',(-0.230146292371,0.55,7.771055379641E-02)); +#2830 = CARTESIAN_POINT('',(-0.230515148056,0.55,6.836243987776E-02)); +#2831 = CARTESIAN_POINT('',(-0.230700932126,0.55,6.365401127476E-02)); +#2832 = PLANE('',#2833); +#2833 = AXIS2_PLACEMENT_3D('',#2834,#2835,#2836); +#2834 = CARTESIAN_POINT('',(1.351560977094,0.55,0.4)); +#2835 = DIRECTION('',(-3.761581922631E-31,-1.,-1.019578823125E-46)); +#2836 = DIRECTION('',(1.,-3.761581922631E-31,0.)); +#2837 = ADVANCED_FACE('',(#2838),#2863,.F.); +#2838 = FACE_BOUND('',#2839,.T.); +#2839 = EDGE_LOOP('',(#2840,#2848,#2849,#2857)); +#2840 = ORIENTED_EDGE('',*,*,#2841,.F.); +#2841 = EDGE_CURVE('',#2684,#2842,#2844,.T.); +#2842 = VERTEX_POINT('',#2843); +#2843 = CARTESIAN_POINT('',(0.55,0.5,0.4)); +#2844 = LINE('',#2845,#2846); +#2845 = CARTESIAN_POINT('',(0.55,0.55,0.4)); +#2846 = VECTOR('',#2847,1.); +#2847 = DIRECTION('',(0.,-1.,0.)); +#2848 = ORIENTED_EDGE('',*,*,#2707,.T.); +#2849 = ORIENTED_EDGE('',*,*,#2850,.T.); +#2850 = EDGE_CURVE('',#2700,#2851,#2853,.T.); +#2851 = VERTEX_POINT('',#2852); +#2852 = CARTESIAN_POINT('',(-0.55,0.5,0.4)); +#2853 = LINE('',#2854,#2855); +#2854 = CARTESIAN_POINT('',(-0.55,0.55,0.4)); +#2855 = VECTOR('',#2856,1.); +#2856 = DIRECTION('',(0.,-1.,0.)); +#2857 = ORIENTED_EDGE('',*,*,#2858,.F.); +#2858 = EDGE_CURVE('',#2842,#2851,#2859,.T.); +#2859 = LINE('',#2860,#2861); +#2860 = CARTESIAN_POINT('',(1.351560977094,0.5,0.4)); +#2861 = VECTOR('',#2862,1.); +#2862 = DIRECTION('',(-1.,3.761581922631E-31,-1.734723475977E-16)); +#2863 = PLANE('',#2864); +#2864 = AXIS2_PLACEMENT_3D('',#2865,#2866,#2867); +#2865 = CARTESIAN_POINT('',(1.351560977094,0.55,0.4)); +#2866 = DIRECTION('',(1.734723475977E-16,0.,-1.)); +#2867 = DIRECTION('',(-1.,0.,-1.734723475977E-16)); +#2868 = ADVANCED_FACE('',(#2869),#2894,.F.); +#2869 = FACE_BOUND('',#2870,.T.); +#2870 = EDGE_LOOP('',(#2871,#2879,#2880,#2888)); +#2871 = ORIENTED_EDGE('',*,*,#2872,.F.); +#2872 = EDGE_CURVE('',#2842,#2873,#2875,.T.); +#2873 = VERTEX_POINT('',#2874); +#2874 = CARTESIAN_POINT('',(0.55,0.5,-0.4)); +#2875 = LINE('',#2876,#2877); +#2876 = CARTESIAN_POINT('',(0.55,0.5,0.4)); +#2877 = VECTOR('',#2878,1.); +#2878 = DIRECTION('',(-2.282530889443E-16,1.878171516282E-46,-1.)); +#2879 = ORIENTED_EDGE('',*,*,#2858,.T.); +#2880 = ORIENTED_EDGE('',*,*,#2881,.T.); +#2881 = EDGE_CURVE('',#2851,#2882,#2884,.T.); +#2882 = VERTEX_POINT('',#2883); +#2883 = CARTESIAN_POINT('',(-0.55,0.5,-0.4)); +#2884 = LINE('',#2885,#2886); +#2885 = CARTESIAN_POINT('',(-0.55,0.5,0.4)); +#2886 = VECTOR('',#2887,1.); +#2887 = DIRECTION('',(2.710505431214E-16,0.,-1.)); +#2888 = ORIENTED_EDGE('',*,*,#2889,.F.); +#2889 = EDGE_CURVE('',#2873,#2882,#2890,.T.); +#2890 = LINE('',#2891,#2892); +#2891 = CARTESIAN_POINT('',(1.351560977094,0.5,-0.4)); +#2892 = VECTOR('',#2893,1.); +#2893 = DIRECTION('',(-1.,3.761581922631E-31,-1.734723475977E-16)); +#2894 = PLANE('',#2895); +#2895 = AXIS2_PLACEMENT_3D('',#2896,#2897,#2898); +#2896 = CARTESIAN_POINT('',(1.351560977094,0.5,0.4)); +#2897 = DIRECTION('',(3.761581922631E-31,1.,1.019578823125E-46)); +#2898 = DIRECTION('',(-1.,3.761581922631E-31,0.)); +#2899 = ADVANCED_FACE('',(#2900),#2916,.F.); +#2900 = FACE_BOUND('',#2901,.T.); +#2901 = EDGE_LOOP('',(#2902,#2908,#2909,#2915)); +#2902 = ORIENTED_EDGE('',*,*,#2903,.F.); +#2903 = EDGE_CURVE('',#2873,#2682,#2904,.T.); +#2904 = LINE('',#2905,#2906); +#2905 = CARTESIAN_POINT('',(0.55,0.55,-0.4)); +#2906 = VECTOR('',#2907,1.); +#2907 = DIRECTION('',(0.,1.,0.)); +#2908 = ORIENTED_EDGE('',*,*,#2889,.T.); +#2909 = ORIENTED_EDGE('',*,*,#2910,.T.); +#2910 = EDGE_CURVE('',#2882,#2692,#2911,.T.); +#2911 = LINE('',#2912,#2913); +#2912 = CARTESIAN_POINT('',(-0.55,0.55,-0.4)); +#2913 = VECTOR('',#2914,1.); +#2914 = DIRECTION('',(-0.,1.,-0.)); +#2915 = ORIENTED_EDGE('',*,*,#2691,.F.); +#2916 = PLANE('',#2917); +#2917 = AXIS2_PLACEMENT_3D('',#2918,#2919,#2920); +#2918 = CARTESIAN_POINT('',(1.351560977094,0.55,-0.4)); +#2919 = DIRECTION('',(-1.734723475977E-16,0.,1.)); +#2920 = DIRECTION('',(1.,0.,1.734723475977E-16)); +#2921 = ADVANCED_FACE('',(#2922),#2928,.F.); +#2922 = FACE_BOUND('',#2923,.T.); +#2923 = EDGE_LOOP('',(#2924,#2925,#2926,#2927)); +#2924 = ORIENTED_EDGE('',*,*,#2850,.F.); +#2925 = ORIENTED_EDGE('',*,*,#2699,.F.); +#2926 = ORIENTED_EDGE('',*,*,#2910,.F.); +#2927 = ORIENTED_EDGE('',*,*,#2881,.F.); +#2928 = PLANE('',#2929); +#2929 = AXIS2_PLACEMENT_3D('',#2930,#2931,#2932); +#2930 = CARTESIAN_POINT('',(-0.55,0.5,0.4)); +#2931 = DIRECTION('',(1.,0.,2.710505431214E-16)); +#2932 = DIRECTION('',(2.710505431214E-16,0.,-1.)); +#2933 = ADVANCED_FACE('',(#2934),#2940,.T.); +#2934 = FACE_BOUND('',#2935,.T.); +#2935 = EDGE_LOOP('',(#2936,#2937,#2938,#2939)); +#2936 = ORIENTED_EDGE('',*,*,#2681,.T.); +#2937 = ORIENTED_EDGE('',*,*,#2841,.T.); +#2938 = ORIENTED_EDGE('',*,*,#2872,.T.); +#2939 = ORIENTED_EDGE('',*,*,#2903,.T.); +#2940 = PLANE('',#2941); +#2941 = AXIS2_PLACEMENT_3D('',#2942,#2943,#2944); +#2942 = CARTESIAN_POINT('',(0.55,0.55,0.4)); +#2943 = DIRECTION('',(1.,0.,-2.282530889443E-16)); +#2944 = DIRECTION('',(2.282530889443E-16,0.,1.)); +#2945 = ADVANCED_FACE('',(#2946,#3076),#3198,.T.); +#2946 = FACE_BOUND('',#2947,.T.); +#2947 = EDGE_LOOP('',(#2948,#2982,#3014,#3046)); +#2948 = ORIENTED_EDGE('',*,*,#2949,.F.); +#2949 = EDGE_CURVE('',#2950,#2952,#2954,.T.); +#2950 = VERTEX_POINT('',#2951); +#2951 = CARTESIAN_POINT('',(-0.400863191742,0.56,0.170224524095)); +#2952 = VERTEX_POINT('',#2953); +#2953 = CARTESIAN_POINT('',(-0.517880419306,0.56,-1.360961052011E-02)); +#2954 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2955,#2956,#2957,#2958,#2959, + #2960,#2961,#2962,#2963,#2964,#2965,#2966,#2967,#2968,#2969,#2970, + #2971,#2972,#2973,#2974,#2975,#2976,#2977,#2978,#2979,#2980,#2981), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,3.378714634699E-02,6.662165772429E-02,9.928487809597E-02, + 0.131361165043,0.163585187595,0.196103926987,0.228902254324, + 0.262158055905,0.295991222258,0.330217845725,0.365059825892, + 0.40095073734,0.437620382077,0.475707529437,0.515380691625, + 0.556413541493,0.599764829873,0.646424155584,0.696431444518, + 0.749781517802,0.806573306976,0.867435531565,0.931886753251,1.), + .UNSPECIFIED.); +#2955 = CARTESIAN_POINT('',(-0.400863191742,0.56,0.170224524095)); +#2956 = CARTESIAN_POINT('',(-0.40362360314,0.56,0.170177888549)); +#2957 = CARTESIAN_POINT('',(-0.409066595617,0.56,0.170085932356)); +#2958 = CARTESIAN_POINT('',(-0.417131838161,0.56,0.169134559207)); +#2959 = CARTESIAN_POINT('',(-0.424960082505,0.56,0.167605008886)); +#2960 = CARTESIAN_POINT('',(-0.432589957909,0.56,0.165463348476)); +#2961 = CARTESIAN_POINT('',(-0.440060609417,0.56,0.162841864845)); +#2962 = CARTESIAN_POINT('',(-0.447270238083,0.56,0.159426496485)); +#2963 = CARTESIAN_POINT('',(-0.454299006452,0.56,0.155493089589)); +#2964 = CARTESIAN_POINT('',(-0.461128162053,0.56,0.151013547445)); +#2965 = CARTESIAN_POINT('',(-0.467629378157,0.56,0.145881379132)); +#2966 = CARTESIAN_POINT('',(-0.473839238689,0.56,0.140204950264)); +#2967 = CARTESIAN_POINT('',(-0.479601740599,0.56,0.133842609134)); +#2968 = CARTESIAN_POINT('',(-0.48496515016,0.56,0.126894816823)); +#2969 = CARTESIAN_POINT('',(-0.49006255898,0.56,0.11942549259)); +#2970 = CARTESIAN_POINT('',(-0.494751496312,0.56,0.111332655285)); +#2971 = CARTESIAN_POINT('',(-0.499088581719,0.56,0.102648394236)); +#2972 = CARTESIAN_POINT('',(-0.503052930785,0.56,9.331660316894E-02)); +#2973 = CARTESIAN_POINT('',(-0.506567797137,0.56,8.320111038296E-02)); +#2974 = CARTESIAN_POINT('',(-0.509672567948,0.56,7.218619253271E-02)); +#2975 = CARTESIAN_POINT('',(-0.512123983695,0.56,6.01746289213E-02)); +#2976 = CARTESIAN_POINT('',(-0.514222279229,0.56,4.726289221077E-02)); +#2977 = CARTESIAN_POINT('',(-0.515914717533,0.56,3.339549917218E-02)); +#2978 = CARTESIAN_POINT('',(-0.517070150065,0.56,1.856492135349E-02)); +#2979 = CARTESIAN_POINT('',(-0.517784281568,0.56,2.780400460877E-03)); +#2980 = CARTESIAN_POINT('',(-0.51784778861,0.56,-8.046576970783E-03)); +#2981 = CARTESIAN_POINT('',(-0.517880419306,0.56,-1.360961052011E-02)); +#2982 = ORIENTED_EDGE('',*,*,#2983,.F.); +#2983 = EDGE_CURVE('',#2984,#2950,#2986,.T.); +#2984 = VERTEX_POINT('',#2985); +#2985 = CARTESIAN_POINT('',(-0.280059906485,0.56,-1.360961052011E-02)); +#2986 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#2987,#2988,#2989,#2990,#2991, + #2992,#2993,#2994,#2995,#2996,#2997,#2998,#2999,#3000,#3001,#3002, + #3003,#3004,#3005,#3006,#3007,#3008,#3009,#3010,#3011,#3012,#3013), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,6.506328961728E-02,0.126773166467,0.185515763226, + 0.240764679168,0.292979796024,0.34225037278,0.388919286186, + 0.432775664058,0.474628432631,0.514774690638,0.553605893498, + 0.591426406431,0.628028119946,0.66380363411,0.698984336132, + 0.733591489307,0.767628469151,0.801208347787,0.834263839727, + 0.866980694729,0.899719741518,0.932701912499,0.966175883433,1.), + .UNSPECIFIED.); +#2987 = CARTESIAN_POINT('',(-0.280059906485,0.56,-1.360961052011E-02)); +#2988 = CARTESIAN_POINT('',(-0.28012506494,0.56,-8.257219726017E-03)); +#2989 = CARTESIAN_POINT('',(-0.280252023531,0.56,2.171695459866E-03)); +#2990 = CARTESIAN_POINT('',(-0.280909894208,0.56,1.742479299185E-02)); +#2991 = CARTESIAN_POINT('',(-0.282205757326,0.56,3.18245973217E-02)); +#2992 = CARTESIAN_POINT('',(-0.283826756157,0.56,4.540564356757E-02)); +#2993 = CARTESIAN_POINT('',(-0.286071852454,0.56,5.811140545087E-02)); +#2994 = CARTESIAN_POINT('',(-0.288832369079,0.56,6.998585029766E-02)); +#2995 = CARTESIAN_POINT('',(-0.291897401361,0.56,8.10802574642E-02)); +#2996 = CARTESIAN_POINT('',(-0.295680880772,0.56,9.13037386252E-02)); +#2997 = CARTESIAN_POINT('',(-0.299821951807,0.56,0.100798910912)); +#2998 = CARTESIAN_POINT('',(-0.304327471424,0.56,0.109665625745)); +#2999 = CARTESIAN_POINT('',(-0.309154454033,0.56,0.117982255013)); +#3000 = CARTESIAN_POINT('',(-0.314413328533,0.56,0.125682229706)); +#3001 = CARTESIAN_POINT('',(-0.320018669853,0.56,0.132820095413)); +#3002 = CARTESIAN_POINT('',(-0.326090448732,0.56,0.139269857678)); +#3003 = CARTESIAN_POINT('',(-0.332457507242,0.56,0.145186924874)); +#3004 = CARTESIAN_POINT('',(-0.339198748826,0.56,0.150452087621)); +#3005 = CARTESIAN_POINT('',(-0.346239903949,0.56,0.155060568084)); +#3006 = CARTESIAN_POINT('',(-0.353435811642,0.56,0.159181953123)); +#3007 = CARTESIAN_POINT('',(-0.360914149976,0.56,0.162505222628)); +#3008 = CARTESIAN_POINT('',(-0.368505445249,0.56,0.165358726726)); +#3009 = CARTESIAN_POINT('',(-0.376318281861,0.56,0.167538771914)); +#3010 = CARTESIAN_POINT('',(-0.38434292093,0.56,0.169046157467)); +#3011 = CARTESIAN_POINT('',(-0.392538544522,0.56,0.170103342312)); +#3012 = CARTESIAN_POINT('',(-0.398078701031,0.56,0.1701839903)); +#3013 = CARTESIAN_POINT('',(-0.400863191742,0.56,0.170224524095)); +#3014 = ORIENTED_EDGE('',*,*,#3015,.F.); +#3015 = EDGE_CURVE('',#3016,#2984,#3018,.T.); +#3016 = VERTEX_POINT('',#3017); +#3017 = CARTESIAN_POINT('',(-0.400863191742,0.56,-0.197724193853)); +#3018 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3019,#3020,#3021,#3022,#3023, + #3024,#3025,#3026,#3027,#3028,#3029,#3030,#3031,#3032,#3033,#3034, + #3035,#3036,#3037,#3038,#3039,#3040,#3041,#3042,#3043,#3044,#3045), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,3.378811616271E-02,6.719393237388E-02,9.986241085683E-02, + 0.132566612126,0.165151173255,0.197913187356,0.231319003567, + 0.265083278267,0.299255308758,0.334398566505,0.369942823509, + 0.4062835607,0.444063819699,0.482997706873,0.523354446613, + 0.565536589604,0.609612924066,0.656390811376,0.705885494936, + 0.758324500262,0.813831782941,0.872794559039,0.93472222954,1.), + .UNSPECIFIED.); +#3019 = CARTESIAN_POINT('',(-0.400863191742,0.56,-0.197724193853)); +#3020 = CARTESIAN_POINT('',(-0.398079643893,0.56,-0.197675412336)); +#3021 = CARTESIAN_POINT('',(-0.392544043004,0.56,-0.197578401245)); +#3022 = CARTESIAN_POINT('',(-0.384360005479,0.56,-0.196646006992)); +#3023 = CARTESIAN_POINT('',(-0.376365037308,0.56,-0.195098894682)); +#3024 = CARTESIAN_POINT('',(-0.368593223437,0.56,-0.192906797224)); +#3025 = CARTESIAN_POINT('',(-0.360980724791,0.56,-0.190187229558)); +#3026 = CARTESIAN_POINT('',(-0.353587084026,0.56,-0.186778517847)); +#3027 = CARTESIAN_POINT('',(-0.346366375862,0.56,-0.182810631113)); +#3028 = CARTESIAN_POINT('',(-0.33943334711,0.56,-0.178148243382)); +#3029 = CARTESIAN_POINT('',(-0.332711885575,0.56,-0.172950015762)); +#3030 = CARTESIAN_POINT('',(-0.326367089278,0.56,-0.167073748882)); +#3031 = CARTESIAN_POINT('',(-0.320398380688,0.56,-0.160578776955)); +#3032 = CARTESIAN_POINT('',(-0.31473085015,0.56,-0.153534590567)); +#3033 = CARTESIAN_POINT('',(-0.30952529043,0.56,-0.145806082083)); +#3034 = CARTESIAN_POINT('',(-0.304567947206,0.56,-0.137527671102)); +#3035 = CARTESIAN_POINT('',(-0.300130743616,0.56,-0.128554584622)); +#3036 = CARTESIAN_POINT('',(-0.295857276098,0.56,-0.119036537838)); +#3037 = CARTESIAN_POINT('',(-0.292168577424,0.56,-0.108710171958)); +#3038 = CARTESIAN_POINT('',(-0.288841952897,0.56,-9.763369590579E-02)); +#3039 = CARTESIAN_POINT('',(-0.28615405604,0.56,-8.567627722045E-02)); +#3040 = CARTESIAN_POINT('',(-0.283915128806,0.56,-7.290065269094E-02)); +#3041 = CARTESIAN_POINT('',(-0.282180639211,0.56,-5.925990436693E-02)); +#3042 = CARTESIAN_POINT('',(-0.280917375003,0.56,-4.478327281575E-02)); +#3043 = CARTESIAN_POINT('',(-0.280250066499,0.56,-2.946123375167E-02)); +#3044 = CARTESIAN_POINT('',(-0.280124396379,0.56,-1.898544883396E-02)); +#3045 = CARTESIAN_POINT('',(-0.280059906485,0.56,-1.360961052011E-02)); +#3046 = ORIENTED_EDGE('',*,*,#3047,.F.); +#3047 = EDGE_CURVE('',#2952,#3016,#3048,.T.); +#3048 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3049,#3050,#3051,#3052,#3053, + #3054,#3055,#3056,#3057,#3058,#3059,#3060,#3061,#3062,#3063,#3064, + #3065,#3066,#3067,#3068,#3069,#3070,#3071,#3072,#3073,#3074,#3075), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,6.859462225874E-02,0.133246042443,0.194312586468, + 0.251279223117,0.304513439256,0.354234906653,0.400480588774, + 0.443410754938,0.484014868616,0.523252300773,0.561042372728, + 0.597900239364,0.633518488856,0.66831435117,0.702495671286, + 0.736685353513,0.770293169361,0.803437255019,0.835912951666, + 0.868460245789,0.900846538243,0.933466524631,0.966257575298,1.), + .UNSPECIFIED.); +#3049 = CARTESIAN_POINT('',(-0.517880419306,0.56,-1.360961052011E-02)); +#3050 = CARTESIAN_POINT('',(-0.51784761749,0.56,-1.921934929353E-02)); +#3051 = CARTESIAN_POINT('',(-0.51778389949,0.56,-3.011634771828E-02)); +#3052 = CARTESIAN_POINT('',(-0.517075057396,0.56,-4.599481192496E-02)); +#3053 = CARTESIAN_POINT('',(-0.515897523165,0.56,-6.089084082448E-02)); +#3054 = CARTESIAN_POINT('',(-0.51428378588,0.56,-7.480514742832E-02)); +#3055 = CARTESIAN_POINT('',(-0.512319987857,0.56,-8.774132388009E-02)); +#3056 = CARTESIAN_POINT('',(-0.509698439197,0.56,-9.966479959372E-02)); +#3057 = CARTESIAN_POINT('',(-0.506717158936,0.56,-0.110630760255)); +#3058 = CARTESIAN_POINT('',(-0.503261914355,0.56,-0.120674965103)); +#3059 = CARTESIAN_POINT('',(-0.499363135453,0.56,-0.129932735405)); +#3060 = CARTESIAN_POINT('',(-0.495119709381,0.56,-0.138575255534)); +#3061 = CARTESIAN_POINT('',(-0.490363229938,0.56,-0.146589448768)); +#3062 = CARTESIAN_POINT('',(-0.485365538646,0.56,-0.15410322781)); +#3063 = CARTESIAN_POINT('',(-0.479924331483,0.56,-0.160993597289)); +#3064 = CARTESIAN_POINT('',(-0.474194452436,0.56,-0.167357863541)); +#3065 = CARTESIAN_POINT('',(-0.467952264809,0.56,-0.173048938588)); +#3066 = CARTESIAN_POINT('',(-0.461409963982,0.56,-0.178233568826)); +#3067 = CARTESIAN_POINT('',(-0.454508317543,0.56,-0.182778515993)); +#3068 = CARTESIAN_POINT('',(-0.447444050929,0.56,-0.186781789855)); +#3069 = CARTESIAN_POINT('',(-0.440168540343,0.56,-0.190201776581)); +#3070 = CARTESIAN_POINT('',(-0.432661922053,0.56,-0.192890820167)); +#3071 = CARTESIAN_POINT('',(-0.424991666264,0.56,-0.195111904844)); +#3072 = CARTESIAN_POINT('',(-0.417130959595,0.56,-0.196630799609)); +#3073 = CARTESIAN_POINT('',(-0.409066823201,0.56,-0.197586490458)); +#3074 = CARTESIAN_POINT('',(-0.403623679722,0.56,-0.197677857232)); +#3075 = CARTESIAN_POINT('',(-0.400863191742,0.56,-0.197724193853)); +#3076 = FACE_BOUND('',#3077,.T.); +#3077 = EDGE_LOOP('',(#3078,#3108,#3136,#3164,#3180)); +#3078 = ORIENTED_EDGE('',*,*,#3079,.F.); +#3079 = EDGE_CURVE('',#3080,#3082,#3084,.T.); +#3080 = VERTEX_POINT('',#3081); +#3081 = CARTESIAN_POINT('',(-0.486470162896,0.56,-1.374983487908E-02)); +#3082 = VERTEX_POINT('',#3083); +#3083 = CARTESIAN_POINT('',(-0.39981150905,0.56,0.134327088198)); +#3084 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3085,#3086,#3087,#3088,#3089, + #3090,#3091,#3092,#3093,#3094,#3095,#3096,#3097,#3098,#3099,#3100, + #3101,#3102,#3103,#3104,#3105,#3106,#3107),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.295106587587E-02, + 0.141583694187,0.205926460171,0.265301357185,0.320597232714, + 0.371816503099,0.418789769709,0.461698728616,0.502133582104, + 0.540804315293,0.578180525328,0.614296865208,0.649678243265, + 0.68429946009,0.718358952772,0.752080864648,0.817652438602, + 0.879722076405,0.939965559731,1.),.UNSPECIFIED.); +#3085 = CARTESIAN_POINT('',(-0.486470162896,0.56,-1.374983487908E-02)); +#3086 = CARTESIAN_POINT('',(-0.486458218189,0.56,-9.074964998696E-03)); +#3087 = CARTESIAN_POINT('',(-0.486435035859,0.56,-1.960518780212E-06)); +#3088 = CARTESIAN_POINT('',(-0.485829415801,0.56,1.318236557881E-02)); +#3089 = CARTESIAN_POINT('',(-0.485004392601,0.56,2.547939846053E-02)); +#3090 = CARTESIAN_POINT('',(-0.483940262882,0.56,3.690475210704E-02)); +#3091 = CARTESIAN_POINT('',(-0.48235996803,0.56,4.741975335802E-02)); +#3092 = CARTESIAN_POINT('',(-0.480589289248,0.56,5.709672166454E-02)); +#3093 = CARTESIAN_POINT('',(-0.478434480286,0.56,6.588444537592E-02)); +#3094 = CARTESIAN_POINT('',(-0.475884978499,0.56,7.384322644637E-02)); +#3095 = CARTESIAN_POINT('',(-0.47298106881,0.56,8.110813329591E-02)); +#3096 = CARTESIAN_POINT('',(-0.469810482443,0.56,8.786825480864E-02)); +#3097 = CARTESIAN_POINT('',(-0.466404410153,0.56,9.420344845222E-02)); +#3098 = CARTESIAN_POINT('',(-0.462592495097,0.56,0.10005680929)); +#3099 = CARTESIAN_POINT('',(-0.458440988774,0.56,0.105447425697)); +#3100 = CARTESIAN_POINT('',(-0.454043662861,0.56,0.110470708929)); +#3101 = CARTESIAN_POINT('',(-0.449236404436,0.56,0.114950407063)); +#3102 = CARTESIAN_POINT('',(-0.442586030182,0.56,0.120323092566)); +#3103 = CARTESIAN_POINT('',(-0.433806382739,0.56,0.125875005939)); +#3104 = CARTESIAN_POINT('',(-0.422744337216,0.56,0.130709614922)); +#3105 = CARTESIAN_POINT('',(-0.411377492118,0.56,0.133747860565)); +#3106 = CARTESIAN_POINT('',(-0.403662367109,0.56,0.134134236161)); +#3107 = CARTESIAN_POINT('',(-0.39981150905,0.56,0.134327088198)); +#3108 = ORIENTED_EDGE('',*,*,#3109,.F.); +#3109 = EDGE_CURVE('',#3110,#3080,#3112,.T.); +#3110 = VERTEX_POINT('',#3111); +#3111 = CARTESIAN_POINT('',(-0.39981150905,0.56,-0.161826757956)); +#3112 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3113,#3114,#3115,#3116,#3117, + #3118,#3119,#3120,#3121,#3122,#3123,#3124,#3125,#3126,#3127,#3128, + #3129,#3130,#3131,#3132,#3133,#3134,#3135),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.038661931106E-02, + 0.120883248586,0.182754618625,0.247811029758,0.281299100043, + 0.315087624151,0.34970239555,0.384856581119,0.420966197226, + 0.458511188261,0.497174722127,0.537602047866,0.58050301842, + 0.627467540027,0.678388209559,0.733983220593,0.793746704551, + 0.857713672161,0.926697864361,1.),.UNSPECIFIED.); +#3113 = CARTESIAN_POINT('',(-0.39981150905,0.56,-0.161826757956)); +#3114 = CARTESIAN_POINT('',(-0.403682568258,0.56,-0.161623613291)); +#3115 = CARTESIAN_POINT('',(-0.411431738819,0.56,-0.161216953881)); +#3116 = CARTESIAN_POINT('',(-0.422876534291,0.56,-0.158347628522)); +#3117 = CARTESIAN_POINT('',(-0.433846969456,0.56,-0.153346331928)); +#3118 = CARTESIAN_POINT('',(-0.442571266924,0.56,-0.147851094681)); +#3119 = CARTESIAN_POINT('',(-0.449257645574,0.56,-0.142617263537)); +#3120 = CARTESIAN_POINT('',(-0.453965914912,0.56,-0.138078618131)); +#3121 = CARTESIAN_POINT('',(-0.458380532134,0.56,-0.133113992695)); +#3122 = CARTESIAN_POINT('',(-0.462447302147,0.56,-0.12767380121)); +#3123 = CARTESIAN_POINT('',(-0.466256230467,0.56,-0.121827264478)); +#3124 = CARTESIAN_POINT('',(-0.469754331724,0.56,-0.115528388005)); +#3125 = CARTESIAN_POINT('',(-0.472906064692,0.56,-0.108745251583)); +#3126 = CARTESIAN_POINT('',(-0.47581451831,0.56,-0.101483608041)); +#3127 = CARTESIAN_POINT('',(-0.478371797113,0.56,-9.352551359747E-02)); +#3128 = CARTESIAN_POINT('',(-0.480481193436,0.56,-8.474861423812E-02)); +#3129 = CARTESIAN_POINT('',(-0.482429898748,0.56,-7.51024250592E-02)); +#3130 = CARTESIAN_POINT('',(-0.483809425638,0.56,-6.453047426469E-02)); +#3131 = CARTESIAN_POINT('',(-0.485035801214,0.56,-5.310225892776E-02)); +#3132 = CARTESIAN_POINT('',(-0.485823936009,0.56,-4.077452710483E-02)); +#3133 = CARTESIAN_POINT('',(-0.486437061756,0.56,-2.756808906459E-02)); +#3134 = CARTESIAN_POINT('',(-0.486458908192,0.56,-1.844817321433E-02)); +#3135 = CARTESIAN_POINT('',(-0.486470162896,0.56,-1.374983487908E-02)); +#3136 = ORIENTED_EDGE('',*,*,#3137,.F.); +#3137 = EDGE_CURVE('',#3138,#3110,#3140,.T.); +#3138 = VERTEX_POINT('',#3139); +#3139 = CARTESIAN_POINT('',(-0.311470162896,0.56,-1.374983487908E-02)); +#3140 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3141,#3142,#3143,#3144,#3145, + #3146,#3147,#3148,#3149,#3150,#3151,#3152,#3153,#3154,#3155,#3156, + #3157,#3158,#3159,#3160,#3161,#3162,#3163),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.568119799064E-02, + 0.128486464174,0.188175130328,0.24510613067,0.299448424529, + 0.350822936009,0.399941680534,0.446671743632,0.491254533373, + 0.53337634427,0.573852754968,0.612526311719,0.649597136445, + 0.685532041554,0.720105786068,0.753837662974,0.818925416047, + 0.88049346165,0.940311333846,1.),.UNSPECIFIED.); +#3141 = CARTESIAN_POINT('',(-0.311470162896,0.56,-1.374983487908E-02)); +#3142 = CARTESIAN_POINT('',(-0.311525181819,0.56,-1.795659213089E-02)); +#3143 = CARTESIAN_POINT('',(-0.311632810595,0.56,-2.618590860894E-02)); +#3144 = CARTESIAN_POINT('',(-0.312044209365,0.56,-3.823772667516E-02)); +#3145 = CARTESIAN_POINT('',(-0.313106566814,0.56,-4.968450276607E-02)); +#3146 = CARTESIAN_POINT('',(-0.3142864787,0.56,-6.05755500325E-02)); +#3147 = CARTESIAN_POINT('',(-0.31602620081,0.56,-7.085058030295E-02)); +#3148 = CARTESIAN_POINT('',(-0.317901981498,0.56,-8.059561082858E-02)); +#3149 = CARTESIAN_POINT('',(-0.320422102727,0.56,-8.968991331052E-02)); +#3150 = CARTESIAN_POINT('',(-0.323114080224,0.56,-9.827587148168E-02)); +#3151 = CARTESIAN_POINT('',(-0.326195119777,0.56,-0.106255936932)); +#3152 = CARTESIAN_POINT('',(-0.329586693203,0.56,-0.113667315568)); +#3153 = CARTESIAN_POINT('',(-0.33320886908,0.56,-0.120545788044)); +#3154 = CARTESIAN_POINT('',(-0.337143093126,0.56,-0.126872482201)); +#3155 = CARTESIAN_POINT('',(-0.341342661432,0.56,-0.132675736492)); +#3156 = CARTESIAN_POINT('',(-0.345918416352,0.56,-0.137839195948)); +#3157 = CARTESIAN_POINT('',(-0.350688853633,0.56,-0.142522892759)); +#3158 = CARTESIAN_POINT('',(-0.357370572215,0.56,-0.147869149671)); +#3159 = CARTESIAN_POINT('',(-0.366118001195,0.56,-0.153320319219)); +#3160 = CARTESIAN_POINT('',(-0.37700256593,0.56,-0.158336895205)); +#3161 = CARTESIAN_POINT('',(-0.388329630355,0.56,-0.161217724468)); +#3162 = CARTESIAN_POINT('',(-0.395986975764,0.56,-0.161623893171)); +#3163 = CARTESIAN_POINT('',(-0.39981150905,0.56,-0.161826757956)); +#3164 = ORIENTED_EDGE('',*,*,#3165,.F.); +#3165 = EDGE_CURVE('',#3166,#3138,#3168,.T.); +#3166 = VERTEX_POINT('',#3167); +#3167 = CARTESIAN_POINT('',(-0.324721364819,0.56,7.424095037733E-02)); +#3168 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3169,#3170,#3171,#3172,#3173, + #3174,#3175,#3176,#3177,#3178,#3179),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.110588338595,0.224541754054,0.34250349405, + 0.464324098417,0.590756032702,0.722227475356,0.858842836209,1.), + .UNSPECIFIED.); +#3169 = CARTESIAN_POINT('',(-0.324721364819,0.56,7.424095037733E-02)); +#3170 = CARTESIAN_POINT('',(-0.323666188039,0.56,7.11179764307E-02)); +#3171 = CARTESIAN_POINT('',(-0.321523726656,0.56,6.477700000635E-02)); +#3172 = CARTESIAN_POINT('',(-0.318762549229,0.56,5.49406347983E-02)); +#3173 = CARTESIAN_POINT('',(-0.316588009309,0.56,4.462035840451E-02)); +#3174 = CARTESIAN_POINT('',(-0.314631672734,0.56,3.387784673266E-02)); +#3175 = CARTESIAN_POINT('',(-0.313296367144,0.56,2.263387663156E-02)); +#3176 = CARTESIAN_POINT('',(-0.312221585816,0.56,1.092323823999E-02)); +#3177 = CARTESIAN_POINT('',(-0.311588517122,0.56,-1.262897983555E-03)); +#3178 = CARTESIAN_POINT('',(-0.311510042015,0.56,-9.54239710308E-03)); +#3179 = CARTESIAN_POINT('',(-0.311470162896,0.56,-1.374983487908E-02)); +#3180 = ORIENTED_EDGE('',*,*,#3181,.F.); +#3181 = EDGE_CURVE('',#3082,#3166,#3182,.T.); +#3182 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3183,#3184,#3185,#3186,#3187, + #3188,#3189,#3190,#3191,#3192,#3193,#3194,#3195,#3196,#3197), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0.,0.112813400744, + 0.225393883921,0.339594814563,0.459675410225,0.521735190088, + 0.583925838739,0.648174144765,0.713881038113,0.781004454907, + 0.851450927557,0.924050692664,1.),.UNSPECIFIED.); +#3183 = CARTESIAN_POINT('',(-0.39981150905,0.56,0.134327088198)); +#3184 = CARTESIAN_POINT('',(-0.395935741884,0.56,0.134167310117)); +#3185 = CARTESIAN_POINT('',(-0.388192209566,0.56,0.133848083836)); +#3186 = CARTESIAN_POINT('',(-0.376878830051,0.56,0.130768210099)); +#3187 = CARTESIAN_POINT('',(-0.365895803043,0.56,0.126121256153)); +#3188 = CARTESIAN_POINT('',(-0.357288609015,0.56,0.120626505611)); +#3189 = CARTESIAN_POINT('',(-0.350740354665,0.56,0.115393672666)); +#3190 = CARTESIAN_POINT('',(-0.346048655654,0.56,0.110932207834)); +#3191 = CARTESIAN_POINT('',(-0.341742450811,0.56,0.105936621104)); +#3192 = CARTESIAN_POINT('',(-0.337658243325,0.56,0.100546691512)); +#3193 = CARTESIAN_POINT('',(-0.333912335758,0.56,9.465944309484E-02)); +#3194 = CARTESIAN_POINT('',(-0.330506021988,0.56,8.830318556823E-02)); +#3195 = CARTESIAN_POINT('',(-0.327397687234,0.56,8.146026777701E-02)); +#3196 = CARTESIAN_POINT('',(-0.325626782639,0.56,7.668329386543E-02)); +#3197 = CARTESIAN_POINT('',(-0.324721364819,0.56,7.424095037733E-02)); +#3198 = PLANE('',#3199); +#3199 = AXIS2_PLACEMENT_3D('',#3200,#3201,#3202); +#3200 = CARTESIAN_POINT('',(-0.497328656668,0.56,0.106108676337)); +#3201 = DIRECTION('',(-5.252061260554E-14,1.,7.839144960088E-13)); +#3202 = DIRECTION('',(0.,-7.839144960088E-13,1.)); +#3203 = ADVANCED_FACE('',(#3204),#3220,.T.); +#3204 = FACE_BOUND('',#3205,.T.); +#3205 = EDGE_LOOP('',(#3206,#3207,#3213,#3214)); +#3206 = ORIENTED_EDGE('',*,*,#2585,.F.); +#3207 = ORIENTED_EDGE('',*,*,#3208,.F.); +#3208 = EDGE_CURVE('',#2950,#2554,#3209,.T.); +#3209 = LINE('',#3210,#3211); +#3210 = CARTESIAN_POINT('',(-0.400863191742,0.56,0.170224524095)); +#3211 = VECTOR('',#3212,1.); +#3212 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#3213 = ORIENTED_EDGE('',*,*,#2949,.T.); +#3214 = ORIENTED_EDGE('',*,*,#3215,.T.); +#3215 = EDGE_CURVE('',#2952,#2586,#3216,.T.); +#3216 = LINE('',#3217,#3218); +#3217 = CARTESIAN_POINT('',(-0.517880419306,0.56,-1.360961052011E-02)); +#3218 = VECTOR('',#3219,1.); +#3219 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#3220 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#3221,#3222) + ,(#3223,#3224) + ,(#3225,#3226) + ,(#3227,#3228) + ,(#3229,#3230) + ,(#3231,#3232) + ,(#3233,#3234) + ,(#3235,#3236) + ,(#3237,#3238) + ,(#3239,#3240) + ,(#3241,#3242) + ,(#3243,#3244) + ,(#3245,#3246) + ,(#3247,#3248) + ,(#3249,#3250) + ,(#3251,#3252) + ,(#3253,#3254) + ,(#3255,#3256) + ,(#3257,#3258) + ,(#3259,#3260) + ,(#3261,#3262) + ,(#3263,#3264) + ,(#3265,#3266) + ,(#3267,#3268) + ,(#3269,#3270) + ,(#3271,#3272) + ,(#3273,#3274 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,4),(2,2),(0.,3.378714634699E-02,6.662165772429E-02, + 9.928487809597E-02,0.131361165043,0.163585187595,0.196103926987, + 0.228902254324,0.262158055905,0.295991222258,0.330217845725, + 0.365059825892,0.40095073734,0.437620382077,0.475707529437, + 0.515380691625,0.556413541493,0.599764829873,0.646424155584, + 0.696431444518,0.749781517802,0.806573306976,0.867435531565, + 0.931886753251,1.),(0.,1.),.UNSPECIFIED.); +#3221 = CARTESIAN_POINT('',(-0.400863191742,0.56,0.170224524095)); +#3222 = CARTESIAN_POINT('',(-0.400863191742,0.55,0.170224524095)); +#3223 = CARTESIAN_POINT('',(-0.40362360314,0.56,0.170177888549)); +#3224 = CARTESIAN_POINT('',(-0.40362360314,0.55,0.170177888549)); +#3225 = CARTESIAN_POINT('',(-0.409066595617,0.56,0.170085932356)); +#3226 = CARTESIAN_POINT('',(-0.409066595617,0.55,0.170085932356)); +#3227 = CARTESIAN_POINT('',(-0.417131838161,0.56,0.169134559207)); +#3228 = CARTESIAN_POINT('',(-0.417131838161,0.55,0.169134559207)); +#3229 = CARTESIAN_POINT('',(-0.424960082505,0.56,0.167605008886)); +#3230 = CARTESIAN_POINT('',(-0.424960082505,0.55,0.167605008886)); +#3231 = CARTESIAN_POINT('',(-0.432589957909,0.56,0.165463348476)); +#3232 = CARTESIAN_POINT('',(-0.432589957909,0.55,0.165463348476)); +#3233 = CARTESIAN_POINT('',(-0.440060609417,0.56,0.162841864845)); +#3234 = CARTESIAN_POINT('',(-0.440060609417,0.55,0.162841864845)); +#3235 = CARTESIAN_POINT('',(-0.447270238083,0.56,0.159426496485)); +#3236 = CARTESIAN_POINT('',(-0.447270238083,0.55,0.159426496485)); +#3237 = CARTESIAN_POINT('',(-0.454299006452,0.56,0.155493089589)); +#3238 = CARTESIAN_POINT('',(-0.454299006452,0.55,0.155493089589)); +#3239 = CARTESIAN_POINT('',(-0.461128162053,0.56,0.151013547445)); +#3240 = CARTESIAN_POINT('',(-0.461128162053,0.55,0.151013547445)); +#3241 = CARTESIAN_POINT('',(-0.467629378157,0.56,0.145881379132)); +#3242 = CARTESIAN_POINT('',(-0.467629378157,0.55,0.145881379132)); +#3243 = CARTESIAN_POINT('',(-0.473839238689,0.56,0.140204950264)); +#3244 = CARTESIAN_POINT('',(-0.473839238689,0.55,0.140204950264)); +#3245 = CARTESIAN_POINT('',(-0.479601740599,0.56,0.133842609134)); +#3246 = CARTESIAN_POINT('',(-0.479601740599,0.55,0.133842609134)); +#3247 = CARTESIAN_POINT('',(-0.48496515016,0.56,0.126894816823)); +#3248 = CARTESIAN_POINT('',(-0.48496515016,0.55,0.126894816823)); +#3249 = CARTESIAN_POINT('',(-0.49006255898,0.56,0.11942549259)); +#3250 = CARTESIAN_POINT('',(-0.49006255898,0.55,0.11942549259)); +#3251 = CARTESIAN_POINT('',(-0.494751496312,0.56,0.111332655285)); +#3252 = CARTESIAN_POINT('',(-0.494751496312,0.55,0.111332655285)); +#3253 = CARTESIAN_POINT('',(-0.499088581719,0.56,0.102648394236)); +#3254 = CARTESIAN_POINT('',(-0.499088581719,0.55,0.102648394236)); +#3255 = CARTESIAN_POINT('',(-0.503052930785,0.56,9.331660316894E-02)); +#3256 = CARTESIAN_POINT('',(-0.503052930785,0.55,9.331660316894E-02)); +#3257 = CARTESIAN_POINT('',(-0.506567797137,0.56,8.320111038296E-02)); +#3258 = CARTESIAN_POINT('',(-0.506567797137,0.55,8.320111038296E-02)); +#3259 = CARTESIAN_POINT('',(-0.509672567948,0.56,7.218619253271E-02)); +#3260 = CARTESIAN_POINT('',(-0.509672567948,0.55,7.218619253271E-02)); +#3261 = CARTESIAN_POINT('',(-0.512123983695,0.56,6.01746289213E-02)); +#3262 = CARTESIAN_POINT('',(-0.512123983695,0.55,6.01746289213E-02)); +#3263 = CARTESIAN_POINT('',(-0.514222279229,0.56,4.726289221077E-02)); +#3264 = CARTESIAN_POINT('',(-0.514222279229,0.55,4.726289221077E-02)); +#3265 = CARTESIAN_POINT('',(-0.515914717533,0.56,3.339549917218E-02)); +#3266 = CARTESIAN_POINT('',(-0.515914717533,0.55,3.339549917218E-02)); +#3267 = CARTESIAN_POINT('',(-0.517070150065,0.56,1.856492135349E-02)); +#3268 = CARTESIAN_POINT('',(-0.517070150065,0.55,1.856492135349E-02)); +#3269 = CARTESIAN_POINT('',(-0.517784281568,0.56,2.780400460877E-03)); +#3270 = CARTESIAN_POINT('',(-0.517784281568,0.55,2.780400460877E-03)); +#3271 = CARTESIAN_POINT('',(-0.51784778861,0.56,-8.046576970783E-03)); +#3272 = CARTESIAN_POINT('',(-0.51784778861,0.55,-8.046576970783E-03)); +#3273 = CARTESIAN_POINT('',(-0.517880419306,0.56,-1.360961052011E-02)); +#3274 = CARTESIAN_POINT('',(-0.517880419306,0.55,-1.360961052011E-02)); +#3275 = ADVANCED_FACE('',(#3276),#3287,.T.); +#3276 = FACE_BOUND('',#3277,.T.); +#3277 = EDGE_LOOP('',(#3278,#3279,#3285,#3286)); +#3278 = ORIENTED_EDGE('',*,*,#2551,.F.); +#3279 = ORIENTED_EDGE('',*,*,#3280,.F.); +#3280 = EDGE_CURVE('',#2984,#2552,#3281,.T.); +#3281 = LINE('',#3282,#3283); +#3282 = CARTESIAN_POINT('',(-0.280059906485,0.56,-1.360961052011E-02)); +#3283 = VECTOR('',#3284,1.); +#3284 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#3285 = ORIENTED_EDGE('',*,*,#2983,.T.); +#3286 = ORIENTED_EDGE('',*,*,#3208,.T.); +#3287 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#3288,#3289) + ,(#3290,#3291) + ,(#3292,#3293) + ,(#3294,#3295) + ,(#3296,#3297) + ,(#3298,#3299) + ,(#3300,#3301) + ,(#3302,#3303) + ,(#3304,#3305) + ,(#3306,#3307) + ,(#3308,#3309) + ,(#3310,#3311) + ,(#3312,#3313) + ,(#3314,#3315) + ,(#3316,#3317) + ,(#3318,#3319) + ,(#3320,#3321) + ,(#3322,#3323) + ,(#3324,#3325) + ,(#3326,#3327) + ,(#3328,#3329) + ,(#3330,#3331) + ,(#3332,#3333) + ,(#3334,#3335) + ,(#3336,#3337) + ,(#3338,#3339) + ,(#3340,#3341 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,4),(2,2),(0.,6.506328961728E-02,0.126773166467, + 0.185515763226,0.240764679168,0.292979796024,0.34225037278, + 0.388919286186,0.432775664058,0.474628432631,0.514774690638, + 0.553605893498,0.591426406431,0.628028119946,0.66380363411, + 0.698984336132,0.733591489307,0.767628469151,0.801208347787, + 0.834263839727,0.866980694729,0.899719741518,0.932701912499, + 0.966175883433,1.),(0.,1.),.UNSPECIFIED.); +#3288 = CARTESIAN_POINT('',(-0.280059906485,0.56,-1.360961052011E-02)); +#3289 = CARTESIAN_POINT('',(-0.280059906485,0.55,-1.360961052011E-02)); +#3290 = CARTESIAN_POINT('',(-0.28012506494,0.56,-8.257219726017E-03)); +#3291 = CARTESIAN_POINT('',(-0.28012506494,0.55,-8.257219726017E-03)); +#3292 = CARTESIAN_POINT('',(-0.280252023531,0.56,2.171695459866E-03)); +#3293 = CARTESIAN_POINT('',(-0.280252023531,0.55,2.171695459866E-03)); +#3294 = CARTESIAN_POINT('',(-0.280909894208,0.56,1.742479299185E-02)); +#3295 = CARTESIAN_POINT('',(-0.280909894208,0.55,1.742479299185E-02)); +#3296 = CARTESIAN_POINT('',(-0.282205757326,0.56,3.18245973217E-02)); +#3297 = CARTESIAN_POINT('',(-0.282205757326,0.55,3.18245973217E-02)); +#3298 = CARTESIAN_POINT('',(-0.283826756157,0.56,4.540564356757E-02)); +#3299 = CARTESIAN_POINT('',(-0.283826756157,0.55,4.540564356757E-02)); +#3300 = CARTESIAN_POINT('',(-0.286071852454,0.56,5.811140545087E-02)); +#3301 = CARTESIAN_POINT('',(-0.286071852454,0.55,5.811140545087E-02)); +#3302 = CARTESIAN_POINT('',(-0.288832369079,0.56,6.998585029766E-02)); +#3303 = CARTESIAN_POINT('',(-0.288832369079,0.55,6.998585029766E-02)); +#3304 = CARTESIAN_POINT('',(-0.291897401361,0.56,8.10802574642E-02)); +#3305 = CARTESIAN_POINT('',(-0.291897401361,0.55,8.10802574642E-02)); +#3306 = CARTESIAN_POINT('',(-0.295680880772,0.56,9.13037386252E-02)); +#3307 = CARTESIAN_POINT('',(-0.295680880772,0.55,9.13037386252E-02)); +#3308 = CARTESIAN_POINT('',(-0.299821951807,0.56,0.100798910912)); +#3309 = CARTESIAN_POINT('',(-0.299821951807,0.55,0.100798910912)); +#3310 = CARTESIAN_POINT('',(-0.304327471424,0.56,0.109665625745)); +#3311 = CARTESIAN_POINT('',(-0.304327471424,0.55,0.109665625745)); +#3312 = CARTESIAN_POINT('',(-0.309154454033,0.56,0.117982255013)); +#3313 = CARTESIAN_POINT('',(-0.309154454033,0.55,0.117982255013)); +#3314 = CARTESIAN_POINT('',(-0.314413328533,0.56,0.125682229706)); +#3315 = CARTESIAN_POINT('',(-0.314413328533,0.55,0.125682229706)); +#3316 = CARTESIAN_POINT('',(-0.320018669853,0.56,0.132820095413)); +#3317 = CARTESIAN_POINT('',(-0.320018669853,0.55,0.132820095413)); +#3318 = CARTESIAN_POINT('',(-0.326090448732,0.56,0.139269857678)); +#3319 = CARTESIAN_POINT('',(-0.326090448732,0.55,0.139269857678)); +#3320 = CARTESIAN_POINT('',(-0.332457507242,0.56,0.145186924874)); +#3321 = CARTESIAN_POINT('',(-0.332457507242,0.55,0.145186924874)); +#3322 = CARTESIAN_POINT('',(-0.339198748826,0.56,0.150452087621)); +#3323 = CARTESIAN_POINT('',(-0.339198748826,0.55,0.150452087621)); +#3324 = CARTESIAN_POINT('',(-0.346239903949,0.56,0.155060568084)); +#3325 = CARTESIAN_POINT('',(-0.346239903949,0.55,0.155060568084)); +#3326 = CARTESIAN_POINT('',(-0.353435811642,0.56,0.159181953123)); +#3327 = CARTESIAN_POINT('',(-0.353435811642,0.55,0.159181953123)); +#3328 = CARTESIAN_POINT('',(-0.360914149976,0.56,0.162505222628)); +#3329 = CARTESIAN_POINT('',(-0.360914149976,0.55,0.162505222628)); +#3330 = CARTESIAN_POINT('',(-0.368505445249,0.56,0.165358726726)); +#3331 = CARTESIAN_POINT('',(-0.368505445249,0.55,0.165358726726)); +#3332 = CARTESIAN_POINT('',(-0.376318281861,0.56,0.167538771914)); +#3333 = CARTESIAN_POINT('',(-0.376318281861,0.55,0.167538771914)); +#3334 = CARTESIAN_POINT('',(-0.38434292093,0.56,0.169046157467)); +#3335 = CARTESIAN_POINT('',(-0.38434292093,0.55,0.169046157467)); +#3336 = CARTESIAN_POINT('',(-0.392538544522,0.56,0.170103342312)); +#3337 = CARTESIAN_POINT('',(-0.392538544522,0.55,0.170103342312)); +#3338 = CARTESIAN_POINT('',(-0.398078701031,0.56,0.1701839903)); +#3339 = CARTESIAN_POINT('',(-0.398078701031,0.55,0.1701839903)); +#3340 = CARTESIAN_POINT('',(-0.400863191742,0.56,0.170224524095)); +#3341 = CARTESIAN_POINT('',(-0.400863191742,0.55,0.170224524095)); +#3342 = ADVANCED_FACE('',(#3343),#3354,.T.); +#3343 = FACE_BOUND('',#3344,.T.); +#3344 = EDGE_LOOP('',(#3345,#3346,#3352,#3353)); +#3345 = ORIENTED_EDGE('',*,*,#2649,.F.); +#3346 = ORIENTED_EDGE('',*,*,#3347,.F.); +#3347 = EDGE_CURVE('',#3016,#2618,#3348,.T.); +#3348 = LINE('',#3349,#3350); +#3349 = CARTESIAN_POINT('',(-0.400863191742,0.56,-0.197724193853)); +#3350 = VECTOR('',#3351,1.); +#3351 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#3352 = ORIENTED_EDGE('',*,*,#3015,.T.); +#3353 = ORIENTED_EDGE('',*,*,#3280,.T.); +#3354 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#3355,#3356) + ,(#3357,#3358) + ,(#3359,#3360) + ,(#3361,#3362) + ,(#3363,#3364) + ,(#3365,#3366) + ,(#3367,#3368) + ,(#3369,#3370) + ,(#3371,#3372) + ,(#3373,#3374) + ,(#3375,#3376) + ,(#3377,#3378) + ,(#3379,#3380) + ,(#3381,#3382) + ,(#3383,#3384) + ,(#3385,#3386) + ,(#3387,#3388) + ,(#3389,#3390) + ,(#3391,#3392) + ,(#3393,#3394) + ,(#3395,#3396) + ,(#3397,#3398) + ,(#3399,#3400) + ,(#3401,#3402) + ,(#3403,#3404) + ,(#3405,#3406) + ,(#3407,#3408 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,4),(2,2),(0.,3.378811616271E-02,6.719393237388E-02, + 9.986241085683E-02,0.132566612126,0.165151173255,0.197913187356, + 0.231319003567,0.265083278267,0.299255308758,0.334398566505, + 0.369942823509,0.4062835607,0.444063819699,0.482997706873, + 0.523354446613,0.565536589604,0.609612924066,0.656390811376, + 0.705885494936,0.758324500262,0.813831782941,0.872794559039, + 0.93472222954,1.),(0.,1.),.UNSPECIFIED.); +#3355 = CARTESIAN_POINT('',(-0.400863191742,0.56,-0.197724193853)); +#3356 = CARTESIAN_POINT('',(-0.400863191742,0.55,-0.197724193853)); +#3357 = CARTESIAN_POINT('',(-0.398079643893,0.56,-0.197675412336)); +#3358 = CARTESIAN_POINT('',(-0.398079643893,0.55,-0.197675412336)); +#3359 = CARTESIAN_POINT('',(-0.392544043004,0.56,-0.197578401245)); +#3360 = CARTESIAN_POINT('',(-0.392544043004,0.55,-0.197578401245)); +#3361 = CARTESIAN_POINT('',(-0.384360005479,0.56,-0.196646006992)); +#3362 = CARTESIAN_POINT('',(-0.384360005479,0.55,-0.196646006992)); +#3363 = CARTESIAN_POINT('',(-0.376365037308,0.56,-0.195098894682)); +#3364 = CARTESIAN_POINT('',(-0.376365037308,0.55,-0.195098894682)); +#3365 = CARTESIAN_POINT('',(-0.368593223437,0.56,-0.192906797224)); +#3366 = CARTESIAN_POINT('',(-0.368593223437,0.55,-0.192906797224)); +#3367 = CARTESIAN_POINT('',(-0.360980724791,0.56,-0.190187229558)); +#3368 = CARTESIAN_POINT('',(-0.360980724791,0.55,-0.190187229558)); +#3369 = CARTESIAN_POINT('',(-0.353587084026,0.56,-0.186778517847)); +#3370 = CARTESIAN_POINT('',(-0.353587084026,0.55,-0.186778517847)); +#3371 = CARTESIAN_POINT('',(-0.346366375862,0.56,-0.182810631113)); +#3372 = CARTESIAN_POINT('',(-0.346366375862,0.55,-0.182810631113)); +#3373 = CARTESIAN_POINT('',(-0.33943334711,0.56,-0.178148243382)); +#3374 = CARTESIAN_POINT('',(-0.33943334711,0.55,-0.178148243382)); +#3375 = CARTESIAN_POINT('',(-0.332711885575,0.56,-0.172950015762)); +#3376 = CARTESIAN_POINT('',(-0.332711885575,0.55,-0.172950015762)); +#3377 = CARTESIAN_POINT('',(-0.326367089278,0.56,-0.167073748882)); +#3378 = CARTESIAN_POINT('',(-0.326367089278,0.55,-0.167073748882)); +#3379 = CARTESIAN_POINT('',(-0.320398380688,0.56,-0.160578776955)); +#3380 = CARTESIAN_POINT('',(-0.320398380688,0.55,-0.160578776955)); +#3381 = CARTESIAN_POINT('',(-0.31473085015,0.56,-0.153534590567)); +#3382 = CARTESIAN_POINT('',(-0.31473085015,0.55,-0.153534590567)); +#3383 = CARTESIAN_POINT('',(-0.30952529043,0.56,-0.145806082083)); +#3384 = CARTESIAN_POINT('',(-0.30952529043,0.55,-0.145806082083)); +#3385 = CARTESIAN_POINT('',(-0.304567947206,0.56,-0.137527671102)); +#3386 = CARTESIAN_POINT('',(-0.304567947206,0.55,-0.137527671102)); +#3387 = CARTESIAN_POINT('',(-0.300130743616,0.56,-0.128554584622)); +#3388 = CARTESIAN_POINT('',(-0.300130743616,0.55,-0.128554584622)); +#3389 = CARTESIAN_POINT('',(-0.295857276098,0.56,-0.119036537838)); +#3390 = CARTESIAN_POINT('',(-0.295857276098,0.55,-0.119036537838)); +#3391 = CARTESIAN_POINT('',(-0.292168577424,0.56,-0.108710171958)); +#3392 = CARTESIAN_POINT('',(-0.292168577424,0.55,-0.108710171958)); +#3393 = CARTESIAN_POINT('',(-0.288841952897,0.56,-9.763369590579E-02)); +#3394 = CARTESIAN_POINT('',(-0.288841952897,0.55,-9.763369590579E-02)); +#3395 = CARTESIAN_POINT('',(-0.28615405604,0.56,-8.567627722045E-02)); +#3396 = CARTESIAN_POINT('',(-0.28615405604,0.55,-8.567627722045E-02)); +#3397 = CARTESIAN_POINT('',(-0.283915128806,0.56,-7.290065269094E-02)); +#3398 = CARTESIAN_POINT('',(-0.283915128806,0.55,-7.290065269094E-02)); +#3399 = CARTESIAN_POINT('',(-0.282180639211,0.56,-5.925990436693E-02)); +#3400 = CARTESIAN_POINT('',(-0.282180639211,0.55,-5.925990436693E-02)); +#3401 = CARTESIAN_POINT('',(-0.280917375003,0.56,-4.478327281575E-02)); +#3402 = CARTESIAN_POINT('',(-0.280917375003,0.55,-4.478327281575E-02)); +#3403 = CARTESIAN_POINT('',(-0.280250066499,0.56,-2.946123375167E-02)); +#3404 = CARTESIAN_POINT('',(-0.280250066499,0.55,-2.946123375167E-02)); +#3405 = CARTESIAN_POINT('',(-0.280124396379,0.56,-1.898544883396E-02)); +#3406 = CARTESIAN_POINT('',(-0.280124396379,0.55,-1.898544883396E-02)); +#3407 = CARTESIAN_POINT('',(-0.280059906485,0.56,-1.360961052011E-02)); +#3408 = CARTESIAN_POINT('',(-0.280059906485,0.55,-1.360961052011E-02)); +#3409 = ADVANCED_FACE('',(#3410),#3416,.T.); +#3410 = FACE_BOUND('',#3411,.T.); +#3411 = EDGE_LOOP('',(#3412,#3413,#3414,#3415)); +#3412 = ORIENTED_EDGE('',*,*,#2617,.F.); +#3413 = ORIENTED_EDGE('',*,*,#3215,.F.); +#3414 = ORIENTED_EDGE('',*,*,#3047,.T.); +#3415 = ORIENTED_EDGE('',*,*,#3347,.T.); +#3416 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#3417,#3418) + ,(#3419,#3420) + ,(#3421,#3422) + ,(#3423,#3424) + ,(#3425,#3426) + ,(#3427,#3428) + ,(#3429,#3430) + ,(#3431,#3432) + ,(#3433,#3434) + ,(#3435,#3436) + ,(#3437,#3438) + ,(#3439,#3440) + ,(#3441,#3442) + ,(#3443,#3444) + ,(#3445,#3446) + ,(#3447,#3448) + ,(#3449,#3450) + ,(#3451,#3452) + ,(#3453,#3454) + ,(#3455,#3456) + ,(#3457,#3458) + ,(#3459,#3460) + ,(#3461,#3462) + ,(#3463,#3464) + ,(#3465,#3466) + ,(#3467,#3468) + ,(#3469,#3470 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,4),(2,2),(0.,6.859462225874E-02,0.133246042443, + 0.194312586468,0.251279223117,0.304513439256,0.354234906653, + 0.400480588774,0.443410754938,0.484014868616,0.523252300773, + 0.561042372728,0.597900239364,0.633518488856,0.66831435117, + 0.702495671286,0.736685353513,0.770293169361,0.803437255019, + 0.835912951666,0.868460245789,0.900846538243,0.933466524631, + 0.966257575298,1.),(0.,1.),.UNSPECIFIED.); +#3417 = CARTESIAN_POINT('',(-0.517880419306,0.56,-1.360961052011E-02)); +#3418 = CARTESIAN_POINT('',(-0.517880419306,0.55,-1.360961052011E-02)); +#3419 = CARTESIAN_POINT('',(-0.51784761749,0.56,-1.921934929353E-02)); +#3420 = CARTESIAN_POINT('',(-0.51784761749,0.55,-1.921934929353E-02)); +#3421 = CARTESIAN_POINT('',(-0.51778389949,0.56,-3.011634771828E-02)); +#3422 = CARTESIAN_POINT('',(-0.51778389949,0.55,-3.011634771828E-02)); +#3423 = CARTESIAN_POINT('',(-0.517075057396,0.56,-4.599481192496E-02)); +#3424 = CARTESIAN_POINT('',(-0.517075057396,0.55,-4.599481192496E-02)); +#3425 = CARTESIAN_POINT('',(-0.515897523165,0.56,-6.089084082448E-02)); +#3426 = CARTESIAN_POINT('',(-0.515897523165,0.55,-6.089084082448E-02)); +#3427 = CARTESIAN_POINT('',(-0.51428378588,0.56,-7.480514742832E-02)); +#3428 = CARTESIAN_POINT('',(-0.51428378588,0.55,-7.480514742832E-02)); +#3429 = CARTESIAN_POINT('',(-0.512319987857,0.56,-8.774132388009E-02)); +#3430 = CARTESIAN_POINT('',(-0.512319987857,0.55,-8.774132388009E-02)); +#3431 = CARTESIAN_POINT('',(-0.509698439197,0.56,-9.966479959372E-02)); +#3432 = CARTESIAN_POINT('',(-0.509698439197,0.55,-9.966479959372E-02)); +#3433 = CARTESIAN_POINT('',(-0.506717158936,0.56,-0.110630760255)); +#3434 = CARTESIAN_POINT('',(-0.506717158936,0.55,-0.110630760255)); +#3435 = CARTESIAN_POINT('',(-0.503261914355,0.56,-0.120674965103)); +#3436 = CARTESIAN_POINT('',(-0.503261914355,0.55,-0.120674965103)); +#3437 = CARTESIAN_POINT('',(-0.499363135453,0.56,-0.129932735405)); +#3438 = CARTESIAN_POINT('',(-0.499363135453,0.55,-0.129932735405)); +#3439 = CARTESIAN_POINT('',(-0.495119709381,0.56,-0.138575255534)); +#3440 = CARTESIAN_POINT('',(-0.495119709381,0.55,-0.138575255534)); +#3441 = CARTESIAN_POINT('',(-0.490363229938,0.56,-0.146589448768)); +#3442 = CARTESIAN_POINT('',(-0.490363229938,0.55,-0.146589448768)); +#3443 = CARTESIAN_POINT('',(-0.485365538646,0.56,-0.15410322781)); +#3444 = CARTESIAN_POINT('',(-0.485365538646,0.55,-0.15410322781)); +#3445 = CARTESIAN_POINT('',(-0.479924331483,0.56,-0.160993597289)); +#3446 = CARTESIAN_POINT('',(-0.479924331483,0.55,-0.160993597289)); +#3447 = CARTESIAN_POINT('',(-0.474194452436,0.56,-0.167357863541)); +#3448 = CARTESIAN_POINT('',(-0.474194452436,0.55,-0.167357863541)); +#3449 = CARTESIAN_POINT('',(-0.467952264809,0.56,-0.173048938588)); +#3450 = CARTESIAN_POINT('',(-0.467952264809,0.55,-0.173048938588)); +#3451 = CARTESIAN_POINT('',(-0.461409963982,0.56,-0.178233568826)); +#3452 = CARTESIAN_POINT('',(-0.461409963982,0.55,-0.178233568826)); +#3453 = CARTESIAN_POINT('',(-0.454508317543,0.56,-0.182778515993)); +#3454 = CARTESIAN_POINT('',(-0.454508317543,0.55,-0.182778515993)); +#3455 = CARTESIAN_POINT('',(-0.447444050929,0.56,-0.186781789855)); +#3456 = CARTESIAN_POINT('',(-0.447444050929,0.55,-0.186781789855)); +#3457 = CARTESIAN_POINT('',(-0.440168540343,0.56,-0.190201776581)); +#3458 = CARTESIAN_POINT('',(-0.440168540343,0.55,-0.190201776581)); +#3459 = CARTESIAN_POINT('',(-0.432661922053,0.56,-0.192890820167)); +#3460 = CARTESIAN_POINT('',(-0.432661922053,0.55,-0.192890820167)); +#3461 = CARTESIAN_POINT('',(-0.424991666264,0.56,-0.195111904844)); +#3462 = CARTESIAN_POINT('',(-0.424991666264,0.55,-0.195111904844)); +#3463 = CARTESIAN_POINT('',(-0.417130959595,0.56,-0.196630799609)); +#3464 = CARTESIAN_POINT('',(-0.417130959595,0.55,-0.196630799609)); +#3465 = CARTESIAN_POINT('',(-0.409066823201,0.56,-0.197586490458)); +#3466 = CARTESIAN_POINT('',(-0.409066823201,0.55,-0.197586490458)); +#3467 = CARTESIAN_POINT('',(-0.403623679722,0.56,-0.197677857232)); +#3468 = CARTESIAN_POINT('',(-0.403623679722,0.55,-0.197677857232)); +#3469 = CARTESIAN_POINT('',(-0.400863191742,0.56,-0.197724193853)); +#3470 = CARTESIAN_POINT('',(-0.400863191742,0.55,-0.197724193853)); +#3471 = ADVANCED_FACE('',(#3472),#3517,.T.); +#3472 = FACE_BOUND('',#3473,.T.); +#3473 = EDGE_LOOP('',(#3474,#3504,#3510,#3511)); +#3474 = ORIENTED_EDGE('',*,*,#3475,.F.); +#3475 = EDGE_CURVE('',#3476,#3478,#3480,.T.); +#3476 = VERTEX_POINT('',#3477); +#3477 = CARTESIAN_POINT('',(-0.39981150905,0.55,-0.161826757956)); +#3478 = VERTEX_POINT('',#3479); +#3479 = CARTESIAN_POINT('',(-0.486470162896,0.55,-1.374983487908E-02)); +#3480 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3481,#3482,#3483,#3484,#3485, + #3486,#3487,#3488,#3489,#3490,#3491,#3492,#3493,#3494,#3495,#3496, + #3497,#3498,#3499,#3500,#3501,#3502,#3503),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.038661931106E-02, + 0.120883248586,0.182754618625,0.247811029758,0.281299100043, + 0.315087624151,0.34970239555,0.384856581119,0.420966197226, + 0.458511188261,0.497174722127,0.537602047866,0.58050301842, + 0.627467540027,0.678388209559,0.733983220593,0.793746704551, + 0.857713672161,0.926697864361,1.),.UNSPECIFIED.); +#3481 = CARTESIAN_POINT('',(-0.39981150905,0.55,-0.161826757956)); +#3482 = CARTESIAN_POINT('',(-0.403682568258,0.55,-0.161623613291)); +#3483 = CARTESIAN_POINT('',(-0.411431738819,0.55,-0.161216953881)); +#3484 = CARTESIAN_POINT('',(-0.422876534291,0.55,-0.158347628522)); +#3485 = CARTESIAN_POINT('',(-0.433846969456,0.55,-0.153346331928)); +#3486 = CARTESIAN_POINT('',(-0.442571266924,0.55,-0.147851094681)); +#3487 = CARTESIAN_POINT('',(-0.449257645574,0.55,-0.142617263537)); +#3488 = CARTESIAN_POINT('',(-0.453965914912,0.55,-0.138078618131)); +#3489 = CARTESIAN_POINT('',(-0.458380532134,0.55,-0.133113992695)); +#3490 = CARTESIAN_POINT('',(-0.462447302147,0.55,-0.12767380121)); +#3491 = CARTESIAN_POINT('',(-0.466256230467,0.55,-0.121827264478)); +#3492 = CARTESIAN_POINT('',(-0.469754331724,0.55,-0.115528388005)); +#3493 = CARTESIAN_POINT('',(-0.472906064692,0.55,-0.108745251583)); +#3494 = CARTESIAN_POINT('',(-0.47581451831,0.55,-0.101483608041)); +#3495 = CARTESIAN_POINT('',(-0.478371797113,0.55,-9.352551359747E-02)); +#3496 = CARTESIAN_POINT('',(-0.480481193436,0.55,-8.474861423812E-02)); +#3497 = CARTESIAN_POINT('',(-0.482429898748,0.55,-7.51024250592E-02)); +#3498 = CARTESIAN_POINT('',(-0.483809425638,0.55,-6.453047426469E-02)); +#3499 = CARTESIAN_POINT('',(-0.485035801214,0.55,-5.310225892776E-02)); +#3500 = CARTESIAN_POINT('',(-0.485823936009,0.55,-4.077452710483E-02)); +#3501 = CARTESIAN_POINT('',(-0.486437061756,0.55,-2.756808906459E-02)); +#3502 = CARTESIAN_POINT('',(-0.486458908192,0.55,-1.844817321433E-02)); +#3503 = CARTESIAN_POINT('',(-0.486470162896,0.55,-1.374983487908E-02)); +#3504 = ORIENTED_EDGE('',*,*,#3505,.F.); +#3505 = EDGE_CURVE('',#3110,#3476,#3506,.T.); +#3506 = LINE('',#3507,#3508); +#3507 = CARTESIAN_POINT('',(-0.39981150905,0.56,-0.161826757956)); +#3508 = VECTOR('',#3509,1.); +#3509 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#3510 = ORIENTED_EDGE('',*,*,#3109,.T.); +#3511 = ORIENTED_EDGE('',*,*,#3512,.T.); +#3512 = EDGE_CURVE('',#3080,#3478,#3513,.T.); +#3513 = LINE('',#3514,#3515); +#3514 = CARTESIAN_POINT('',(-0.486470162896,0.56,-1.374983487908E-02)); +#3515 = VECTOR('',#3516,1.); +#3516 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#3517 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#3518,#3519) + ,(#3520,#3521) + ,(#3522,#3523) + ,(#3524,#3525) + ,(#3526,#3527) + ,(#3528,#3529) + ,(#3530,#3531) + ,(#3532,#3533) + ,(#3534,#3535) + ,(#3536,#3537) + ,(#3538,#3539) + ,(#3540,#3541) + ,(#3542,#3543) + ,(#3544,#3545) + ,(#3546,#3547) + ,(#3548,#3549) + ,(#3550,#3551) + ,(#3552,#3553) + ,(#3554,#3555) + ,(#3556,#3557) + ,(#3558,#3559) + ,(#3560,#3561) + ,(#3562,#3563 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,4),(2,2),(0.,6.038661931106E-02,0.120883248586,0.182754618625, + 0.247811029758,0.281299100043,0.315087624151,0.34970239555, + 0.384856581119,0.420966197226,0.458511188261,0.497174722127, + 0.537602047866,0.58050301842,0.627467540027,0.678388209559, + 0.733983220593,0.793746704551,0.857713672161,0.926697864361,1.),(0., + 1.),.UNSPECIFIED.); +#3518 = CARTESIAN_POINT('',(-0.39981150905,0.56,-0.161826757956)); +#3519 = CARTESIAN_POINT('',(-0.39981150905,0.55,-0.161826757956)); +#3520 = CARTESIAN_POINT('',(-0.403682568258,0.56,-0.161623613291)); +#3521 = CARTESIAN_POINT('',(-0.403682568258,0.55,-0.161623613291)); +#3522 = CARTESIAN_POINT('',(-0.411431738819,0.56,-0.161216953881)); +#3523 = CARTESIAN_POINT('',(-0.411431738819,0.55,-0.161216953881)); +#3524 = CARTESIAN_POINT('',(-0.422876534291,0.56,-0.158347628522)); +#3525 = CARTESIAN_POINT('',(-0.422876534291,0.55,-0.158347628522)); +#3526 = CARTESIAN_POINT('',(-0.433846969456,0.56,-0.153346331928)); +#3527 = CARTESIAN_POINT('',(-0.433846969456,0.55,-0.153346331928)); +#3528 = CARTESIAN_POINT('',(-0.442571266924,0.56,-0.147851094681)); +#3529 = CARTESIAN_POINT('',(-0.442571266924,0.55,-0.147851094681)); +#3530 = CARTESIAN_POINT('',(-0.449257645574,0.56,-0.142617263537)); +#3531 = CARTESIAN_POINT('',(-0.449257645574,0.55,-0.142617263537)); +#3532 = CARTESIAN_POINT('',(-0.453965914912,0.56,-0.138078618131)); +#3533 = CARTESIAN_POINT('',(-0.453965914912,0.55,-0.138078618131)); +#3534 = CARTESIAN_POINT('',(-0.458380532134,0.56,-0.133113992695)); +#3535 = CARTESIAN_POINT('',(-0.458380532134,0.55,-0.133113992695)); +#3536 = CARTESIAN_POINT('',(-0.462447302147,0.56,-0.12767380121)); +#3537 = CARTESIAN_POINT('',(-0.462447302147,0.55,-0.12767380121)); +#3538 = CARTESIAN_POINT('',(-0.466256230467,0.56,-0.121827264478)); +#3539 = CARTESIAN_POINT('',(-0.466256230467,0.55,-0.121827264478)); +#3540 = CARTESIAN_POINT('',(-0.469754331724,0.56,-0.115528388005)); +#3541 = CARTESIAN_POINT('',(-0.469754331724,0.55,-0.115528388005)); +#3542 = CARTESIAN_POINT('',(-0.472906064692,0.56,-0.108745251583)); +#3543 = CARTESIAN_POINT('',(-0.472906064692,0.55,-0.108745251583)); +#3544 = CARTESIAN_POINT('',(-0.47581451831,0.56,-0.101483608041)); +#3545 = CARTESIAN_POINT('',(-0.47581451831,0.55,-0.101483608041)); +#3546 = CARTESIAN_POINT('',(-0.478371797113,0.56,-9.352551359747E-02)); +#3547 = CARTESIAN_POINT('',(-0.478371797113,0.55,-9.352551359747E-02)); +#3548 = CARTESIAN_POINT('',(-0.480481193436,0.56,-8.474861423812E-02)); +#3549 = CARTESIAN_POINT('',(-0.480481193436,0.55,-8.474861423812E-02)); +#3550 = CARTESIAN_POINT('',(-0.482429898748,0.56,-7.51024250592E-02)); +#3551 = CARTESIAN_POINT('',(-0.482429898748,0.55,-7.51024250592E-02)); +#3552 = CARTESIAN_POINT('',(-0.483809425638,0.56,-6.453047426469E-02)); +#3553 = CARTESIAN_POINT('',(-0.483809425638,0.55,-6.453047426469E-02)); +#3554 = CARTESIAN_POINT('',(-0.485035801214,0.56,-5.310225892776E-02)); +#3555 = CARTESIAN_POINT('',(-0.485035801214,0.55,-5.310225892776E-02)); +#3556 = CARTESIAN_POINT('',(-0.485823936009,0.56,-4.077452710483E-02)); +#3557 = CARTESIAN_POINT('',(-0.485823936009,0.55,-4.077452710483E-02)); +#3558 = CARTESIAN_POINT('',(-0.486437061756,0.56,-2.756808906459E-02)); +#3559 = CARTESIAN_POINT('',(-0.486437061756,0.55,-2.756808906459E-02)); +#3560 = CARTESIAN_POINT('',(-0.486458908192,0.56,-1.844817321433E-02)); +#3561 = CARTESIAN_POINT('',(-0.486458908192,0.55,-1.844817321433E-02)); +#3562 = CARTESIAN_POINT('',(-0.486470162896,0.56,-1.374983487908E-02)); +#3563 = CARTESIAN_POINT('',(-0.486470162896,0.55,-1.374983487908E-02)); +#3564 = ADVANCED_FACE('',(#3565),#3603,.T.); +#3565 = FACE_BOUND('',#3566,.T.); +#3566 = EDGE_LOOP('',(#3567,#3595,#3596,#3597)); +#3567 = ORIENTED_EDGE('',*,*,#3568,.F.); +#3568 = EDGE_CURVE('',#3478,#3569,#3571,.T.); +#3569 = VERTEX_POINT('',#3570); +#3570 = CARTESIAN_POINT('',(-0.39981150905,0.55,0.134327088198)); +#3571 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3572,#3573,#3574,#3575,#3576, + #3577,#3578,#3579,#3580,#3581,#3582,#3583,#3584,#3585,#3586,#3587, + #3588,#3589,#3590,#3591,#3592,#3593,#3594),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.295106587587E-02, + 0.141583694187,0.205926460171,0.265301357185,0.320597232714, + 0.371816503099,0.418789769709,0.461698728616,0.502133582104, + 0.540804315293,0.578180525328,0.614296865208,0.649678243265, + 0.68429946009,0.718358952772,0.752080864648,0.817652438602, + 0.879722076405,0.939965559731,1.),.UNSPECIFIED.); +#3572 = CARTESIAN_POINT('',(-0.486470162896,0.55,-1.374983487908E-02)); +#3573 = CARTESIAN_POINT('',(-0.486458218189,0.55,-9.074964998696E-03)); +#3574 = CARTESIAN_POINT('',(-0.486435035859,0.55,-1.960518780212E-06)); +#3575 = CARTESIAN_POINT('',(-0.485829415801,0.55,1.318236557881E-02)); +#3576 = CARTESIAN_POINT('',(-0.485004392601,0.55,2.547939846053E-02)); +#3577 = CARTESIAN_POINT('',(-0.483940262882,0.55,3.690475210704E-02)); +#3578 = CARTESIAN_POINT('',(-0.48235996803,0.55,4.741975335802E-02)); +#3579 = CARTESIAN_POINT('',(-0.480589289248,0.55,5.709672166454E-02)); +#3580 = CARTESIAN_POINT('',(-0.478434480286,0.55,6.588444537592E-02)); +#3581 = CARTESIAN_POINT('',(-0.475884978499,0.55,7.384322644637E-02)); +#3582 = CARTESIAN_POINT('',(-0.47298106881,0.55,8.110813329591E-02)); +#3583 = CARTESIAN_POINT('',(-0.469810482443,0.55,8.786825480864E-02)); +#3584 = CARTESIAN_POINT('',(-0.466404410153,0.55,9.420344845222E-02)); +#3585 = CARTESIAN_POINT('',(-0.462592495097,0.55,0.10005680929)); +#3586 = CARTESIAN_POINT('',(-0.458440988774,0.55,0.105447425697)); +#3587 = CARTESIAN_POINT('',(-0.454043662861,0.55,0.110470708929)); +#3588 = CARTESIAN_POINT('',(-0.449236404436,0.55,0.114950407063)); +#3589 = CARTESIAN_POINT('',(-0.442586030182,0.55,0.120323092566)); +#3590 = CARTESIAN_POINT('',(-0.433806382739,0.55,0.125875005939)); +#3591 = CARTESIAN_POINT('',(-0.422744337216,0.55,0.130709614922)); +#3592 = CARTESIAN_POINT('',(-0.411377492118,0.55,0.133747860565)); +#3593 = CARTESIAN_POINT('',(-0.403662367109,0.55,0.134134236161)); +#3594 = CARTESIAN_POINT('',(-0.39981150905,0.55,0.134327088198)); +#3595 = ORIENTED_EDGE('',*,*,#3512,.F.); +#3596 = ORIENTED_EDGE('',*,*,#3079,.T.); +#3597 = ORIENTED_EDGE('',*,*,#3598,.T.); +#3598 = EDGE_CURVE('',#3082,#3569,#3599,.T.); +#3599 = LINE('',#3600,#3601); +#3600 = CARTESIAN_POINT('',(-0.39981150905,0.56,0.134327088198)); +#3601 = VECTOR('',#3602,1.); +#3602 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#3603 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#3604,#3605) + ,(#3606,#3607) + ,(#3608,#3609) + ,(#3610,#3611) + ,(#3612,#3613) + ,(#3614,#3615) + ,(#3616,#3617) + ,(#3618,#3619) + ,(#3620,#3621) + ,(#3622,#3623) + ,(#3624,#3625) + ,(#3626,#3627) + ,(#3628,#3629) + ,(#3630,#3631) + ,(#3632,#3633) + ,(#3634,#3635) + ,(#3636,#3637) + ,(#3638,#3639) + ,(#3640,#3641) + ,(#3642,#3643) + ,(#3644,#3645) + ,(#3646,#3647) + ,(#3648,#3649 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,4),(2,2),(0.,7.295106587587E-02,0.141583694187,0.205926460171, + 0.265301357185,0.320597232714,0.371816503099,0.418789769709, + 0.461698728616,0.502133582104,0.540804315293,0.578180525328, + 0.614296865208,0.649678243265,0.68429946009,0.718358952772, + 0.752080864648,0.817652438602,0.879722076405,0.939965559731,1.),(0., + 1.),.UNSPECIFIED.); +#3604 = CARTESIAN_POINT('',(-0.486470162896,0.56,-1.374983487908E-02)); +#3605 = CARTESIAN_POINT('',(-0.486470162896,0.55,-1.374983487908E-02)); +#3606 = CARTESIAN_POINT('',(-0.486458218189,0.56,-9.074964998696E-03)); +#3607 = CARTESIAN_POINT('',(-0.486458218189,0.55,-9.074964998696E-03)); +#3608 = CARTESIAN_POINT('',(-0.486435035859,0.56,-1.960518780212E-06)); +#3609 = CARTESIAN_POINT('',(-0.486435035859,0.55,-1.960518780212E-06)); +#3610 = CARTESIAN_POINT('',(-0.485829415801,0.56,1.318236557881E-02)); +#3611 = CARTESIAN_POINT('',(-0.485829415801,0.55,1.318236557881E-02)); +#3612 = CARTESIAN_POINT('',(-0.485004392601,0.56,2.547939846053E-02)); +#3613 = CARTESIAN_POINT('',(-0.485004392601,0.55,2.547939846053E-02)); +#3614 = CARTESIAN_POINT('',(-0.483940262882,0.56,3.690475210704E-02)); +#3615 = CARTESIAN_POINT('',(-0.483940262882,0.55,3.690475210704E-02)); +#3616 = CARTESIAN_POINT('',(-0.48235996803,0.56,4.741975335802E-02)); +#3617 = CARTESIAN_POINT('',(-0.48235996803,0.55,4.741975335802E-02)); +#3618 = CARTESIAN_POINT('',(-0.480589289248,0.56,5.709672166454E-02)); +#3619 = CARTESIAN_POINT('',(-0.480589289248,0.55,5.709672166454E-02)); +#3620 = CARTESIAN_POINT('',(-0.478434480286,0.56,6.588444537592E-02)); +#3621 = CARTESIAN_POINT('',(-0.478434480286,0.55,6.588444537592E-02)); +#3622 = CARTESIAN_POINT('',(-0.475884978499,0.56,7.384322644637E-02)); +#3623 = CARTESIAN_POINT('',(-0.475884978499,0.55,7.384322644637E-02)); +#3624 = CARTESIAN_POINT('',(-0.47298106881,0.56,8.110813329591E-02)); +#3625 = CARTESIAN_POINT('',(-0.47298106881,0.55,8.110813329591E-02)); +#3626 = CARTESIAN_POINT('',(-0.469810482443,0.56,8.786825480864E-02)); +#3627 = CARTESIAN_POINT('',(-0.469810482443,0.55,8.786825480864E-02)); +#3628 = CARTESIAN_POINT('',(-0.466404410153,0.56,9.420344845222E-02)); +#3629 = CARTESIAN_POINT('',(-0.466404410153,0.55,9.420344845222E-02)); +#3630 = CARTESIAN_POINT('',(-0.462592495097,0.56,0.10005680929)); +#3631 = CARTESIAN_POINT('',(-0.462592495097,0.55,0.10005680929)); +#3632 = CARTESIAN_POINT('',(-0.458440988774,0.56,0.105447425697)); +#3633 = CARTESIAN_POINT('',(-0.458440988774,0.55,0.105447425697)); +#3634 = CARTESIAN_POINT('',(-0.454043662861,0.56,0.110470708929)); +#3635 = CARTESIAN_POINT('',(-0.454043662861,0.55,0.110470708929)); +#3636 = CARTESIAN_POINT('',(-0.449236404436,0.56,0.114950407063)); +#3637 = CARTESIAN_POINT('',(-0.449236404436,0.55,0.114950407063)); +#3638 = CARTESIAN_POINT('',(-0.442586030182,0.56,0.120323092566)); +#3639 = CARTESIAN_POINT('',(-0.442586030182,0.55,0.120323092566)); +#3640 = CARTESIAN_POINT('',(-0.433806382739,0.56,0.125875005939)); +#3641 = CARTESIAN_POINT('',(-0.433806382739,0.55,0.125875005939)); +#3642 = CARTESIAN_POINT('',(-0.422744337216,0.56,0.130709614922)); +#3643 = CARTESIAN_POINT('',(-0.422744337216,0.55,0.130709614922)); +#3644 = CARTESIAN_POINT('',(-0.411377492118,0.56,0.133747860565)); +#3645 = CARTESIAN_POINT('',(-0.411377492118,0.55,0.133747860565)); +#3646 = CARTESIAN_POINT('',(-0.403662367109,0.56,0.134134236161)); +#3647 = CARTESIAN_POINT('',(-0.403662367109,0.55,0.134134236161)); +#3648 = CARTESIAN_POINT('',(-0.39981150905,0.56,0.134327088198)); +#3649 = CARTESIAN_POINT('',(-0.39981150905,0.55,0.134327088198)); +#3650 = ADVANCED_FACE('',(#3651),#3681,.T.); +#3651 = FACE_BOUND('',#3652,.T.); +#3652 = EDGE_LOOP('',(#3653,#3673,#3674,#3675)); +#3653 = ORIENTED_EDGE('',*,*,#3654,.F.); +#3654 = EDGE_CURVE('',#3569,#3655,#3657,.T.); +#3655 = VERTEX_POINT('',#3656); +#3656 = CARTESIAN_POINT('',(-0.324721364819,0.55,7.424095037733E-02)); +#3657 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3658,#3659,#3660,#3661,#3662, + #3663,#3664,#3665,#3666,#3667,#3668,#3669,#3670,#3671,#3672), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0.,0.112813400744, + 0.225393883921,0.339594814563,0.459675410225,0.521735190088, + 0.583925838739,0.648174144765,0.713881038113,0.781004454907, + 0.851450927557,0.924050692664,1.),.UNSPECIFIED.); +#3658 = CARTESIAN_POINT('',(-0.39981150905,0.55,0.134327088198)); +#3659 = CARTESIAN_POINT('',(-0.395935741884,0.55,0.134167310117)); +#3660 = CARTESIAN_POINT('',(-0.388192209566,0.55,0.133848083836)); +#3661 = CARTESIAN_POINT('',(-0.376878830051,0.55,0.130768210099)); +#3662 = CARTESIAN_POINT('',(-0.365895803043,0.55,0.126121256153)); +#3663 = CARTESIAN_POINT('',(-0.357288609015,0.55,0.120626505611)); +#3664 = CARTESIAN_POINT('',(-0.350740354665,0.55,0.115393672666)); +#3665 = CARTESIAN_POINT('',(-0.346048655654,0.55,0.110932207834)); +#3666 = CARTESIAN_POINT('',(-0.341742450811,0.55,0.105936621104)); +#3667 = CARTESIAN_POINT('',(-0.337658243325,0.55,0.100546691512)); +#3668 = CARTESIAN_POINT('',(-0.333912335758,0.55,9.465944309484E-02)); +#3669 = CARTESIAN_POINT('',(-0.330506021988,0.55,8.830318556823E-02)); +#3670 = CARTESIAN_POINT('',(-0.327397687234,0.55,8.146026777701E-02)); +#3671 = CARTESIAN_POINT('',(-0.325626782639,0.55,7.668329386543E-02)); +#3672 = CARTESIAN_POINT('',(-0.324721364819,0.55,7.424095037733E-02)); +#3673 = ORIENTED_EDGE('',*,*,#3598,.F.); +#3674 = ORIENTED_EDGE('',*,*,#3181,.T.); +#3675 = ORIENTED_EDGE('',*,*,#3676,.T.); +#3676 = EDGE_CURVE('',#3166,#3655,#3677,.T.); +#3677 = LINE('',#3678,#3679); +#3678 = CARTESIAN_POINT('',(-0.324721364819,0.56,7.424095037733E-02)); +#3679 = VECTOR('',#3680,1.); +#3680 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#3681 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#3682,#3683) + ,(#3684,#3685) + ,(#3686,#3687) + ,(#3688,#3689) + ,(#3690,#3691) + ,(#3692,#3693) + ,(#3694,#3695) + ,(#3696,#3697) + ,(#3698,#3699) + ,(#3700,#3701) + ,(#3702,#3703) + ,(#3704,#3705) + ,(#3706,#3707) + ,(#3708,#3709) + ,(#3710,#3711 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(2,2),(0., + 0.112813400744,0.225393883921,0.339594814563,0.459675410225, + 0.521735190088,0.583925838739,0.648174144765,0.713881038113, + 0.781004454907,0.851450927557,0.924050692664,1.),(0.,1.), + .UNSPECIFIED.); +#3682 = CARTESIAN_POINT('',(-0.39981150905,0.56,0.134327088198)); +#3683 = CARTESIAN_POINT('',(-0.39981150905,0.55,0.134327088198)); +#3684 = CARTESIAN_POINT('',(-0.395935741884,0.56,0.134167310117)); +#3685 = CARTESIAN_POINT('',(-0.395935741884,0.55,0.134167310117)); +#3686 = CARTESIAN_POINT('',(-0.388192209566,0.56,0.133848083836)); +#3687 = CARTESIAN_POINT('',(-0.388192209566,0.55,0.133848083836)); +#3688 = CARTESIAN_POINT('',(-0.376878830051,0.56,0.130768210099)); +#3689 = CARTESIAN_POINT('',(-0.376878830051,0.55,0.130768210099)); +#3690 = CARTESIAN_POINT('',(-0.365895803043,0.56,0.126121256153)); +#3691 = CARTESIAN_POINT('',(-0.365895803043,0.55,0.126121256153)); +#3692 = CARTESIAN_POINT('',(-0.357288609015,0.56,0.120626505611)); +#3693 = CARTESIAN_POINT('',(-0.357288609015,0.55,0.120626505611)); +#3694 = CARTESIAN_POINT('',(-0.350740354665,0.56,0.115393672666)); +#3695 = CARTESIAN_POINT('',(-0.350740354665,0.55,0.115393672666)); +#3696 = CARTESIAN_POINT('',(-0.346048655654,0.56,0.110932207834)); +#3697 = CARTESIAN_POINT('',(-0.346048655654,0.55,0.110932207834)); +#3698 = CARTESIAN_POINT('',(-0.341742450811,0.56,0.105936621104)); +#3699 = CARTESIAN_POINT('',(-0.341742450811,0.55,0.105936621104)); +#3700 = CARTESIAN_POINT('',(-0.337658243325,0.56,0.100546691512)); +#3701 = CARTESIAN_POINT('',(-0.337658243325,0.55,0.100546691512)); +#3702 = CARTESIAN_POINT('',(-0.333912335758,0.56,9.465944309484E-02)); +#3703 = CARTESIAN_POINT('',(-0.333912335758,0.55,9.465944309484E-02)); +#3704 = CARTESIAN_POINT('',(-0.330506021988,0.56,8.830318556823E-02)); +#3705 = CARTESIAN_POINT('',(-0.330506021988,0.55,8.830318556823E-02)); +#3706 = CARTESIAN_POINT('',(-0.327397687234,0.56,8.146026777701E-02)); +#3707 = CARTESIAN_POINT('',(-0.327397687234,0.55,8.146026777701E-02)); +#3708 = CARTESIAN_POINT('',(-0.325626782639,0.56,7.668329386543E-02)); +#3709 = CARTESIAN_POINT('',(-0.325626782639,0.55,7.668329386543E-02)); +#3710 = CARTESIAN_POINT('',(-0.324721364819,0.56,7.424095037733E-02)); +#3711 = CARTESIAN_POINT('',(-0.324721364819,0.55,7.424095037733E-02)); +#3712 = ADVANCED_FACE('',(#3713),#3739,.T.); +#3713 = FACE_BOUND('',#3714,.T.); +#3714 = EDGE_LOOP('',(#3715,#3731,#3732,#3733)); +#3715 = ORIENTED_EDGE('',*,*,#3716,.F.); +#3716 = EDGE_CURVE('',#3655,#3717,#3719,.T.); +#3717 = VERTEX_POINT('',#3718); +#3718 = CARTESIAN_POINT('',(-0.311470162896,0.55,-1.374983487908E-02)); +#3719 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3720,#3721,#3722,#3723,#3724, + #3725,#3726,#3727,#3728,#3729,#3730),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.110588338595,0.224541754054,0.34250349405, + 0.464324098417,0.590756032702,0.722227475356,0.858842836209,1.), + .UNSPECIFIED.); +#3720 = CARTESIAN_POINT('',(-0.324721364819,0.55,7.424095037733E-02)); +#3721 = CARTESIAN_POINT('',(-0.323666188039,0.55,7.11179764307E-02)); +#3722 = CARTESIAN_POINT('',(-0.321523726656,0.55,6.477700000635E-02)); +#3723 = CARTESIAN_POINT('',(-0.318762549229,0.55,5.49406347983E-02)); +#3724 = CARTESIAN_POINT('',(-0.316588009309,0.55,4.462035840451E-02)); +#3725 = CARTESIAN_POINT('',(-0.314631672734,0.55,3.387784673266E-02)); +#3726 = CARTESIAN_POINT('',(-0.313296367144,0.55,2.263387663156E-02)); +#3727 = CARTESIAN_POINT('',(-0.312221585816,0.55,1.092323823999E-02)); +#3728 = CARTESIAN_POINT('',(-0.311588517122,0.55,-1.262897983555E-03)); +#3729 = CARTESIAN_POINT('',(-0.311510042015,0.55,-9.54239710308E-03)); +#3730 = CARTESIAN_POINT('',(-0.311470162896,0.55,-1.374983487908E-02)); +#3731 = ORIENTED_EDGE('',*,*,#3676,.F.); +#3732 = ORIENTED_EDGE('',*,*,#3165,.T.); +#3733 = ORIENTED_EDGE('',*,*,#3734,.T.); +#3734 = EDGE_CURVE('',#3138,#3717,#3735,.T.); +#3735 = LINE('',#3736,#3737); +#3736 = CARTESIAN_POINT('',(-0.311470162896,0.56,-1.374983487908E-02)); +#3737 = VECTOR('',#3738,1.); +#3738 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#3739 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#3740,#3741) + ,(#3742,#3743) + ,(#3744,#3745) + ,(#3746,#3747) + ,(#3748,#3749) + ,(#3750,#3751) + ,(#3752,#3753) + ,(#3754,#3755) + ,(#3756,#3757) + ,(#3758,#3759) + ,(#3760,#3761 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.110588338595,0.224541754054,0.34250349405,0.464324098417, + 0.590756032702,0.722227475356,0.858842836209,1.),(0.,1.), + .UNSPECIFIED.); +#3740 = CARTESIAN_POINT('',(-0.324721364819,0.56,7.424095037733E-02)); +#3741 = CARTESIAN_POINT('',(-0.324721364819,0.55,7.424095037733E-02)); +#3742 = CARTESIAN_POINT('',(-0.323666188039,0.56,7.11179764307E-02)); +#3743 = CARTESIAN_POINT('',(-0.323666188039,0.55,7.11179764307E-02)); +#3744 = CARTESIAN_POINT('',(-0.321523726656,0.56,6.477700000635E-02)); +#3745 = CARTESIAN_POINT('',(-0.321523726656,0.55,6.477700000635E-02)); +#3746 = CARTESIAN_POINT('',(-0.318762549229,0.56,5.49406347983E-02)); +#3747 = CARTESIAN_POINT('',(-0.318762549229,0.55,5.49406347983E-02)); +#3748 = CARTESIAN_POINT('',(-0.316588009309,0.56,4.462035840451E-02)); +#3749 = CARTESIAN_POINT('',(-0.316588009309,0.55,4.462035840451E-02)); +#3750 = CARTESIAN_POINT('',(-0.314631672734,0.56,3.387784673266E-02)); +#3751 = CARTESIAN_POINT('',(-0.314631672734,0.55,3.387784673266E-02)); +#3752 = CARTESIAN_POINT('',(-0.313296367144,0.56,2.263387663156E-02)); +#3753 = CARTESIAN_POINT('',(-0.313296367144,0.55,2.263387663156E-02)); +#3754 = CARTESIAN_POINT('',(-0.312221585816,0.56,1.092323823999E-02)); +#3755 = CARTESIAN_POINT('',(-0.312221585816,0.55,1.092323823999E-02)); +#3756 = CARTESIAN_POINT('',(-0.311588517122,0.56,-1.262897983555E-03)); +#3757 = CARTESIAN_POINT('',(-0.311588517122,0.55,-1.262897983555E-03)); +#3758 = CARTESIAN_POINT('',(-0.311510042015,0.56,-9.54239710308E-03)); +#3759 = CARTESIAN_POINT('',(-0.311510042015,0.55,-9.54239710308E-03)); +#3760 = CARTESIAN_POINT('',(-0.311470162896,0.56,-1.374983487908E-02)); +#3761 = CARTESIAN_POINT('',(-0.311470162896,0.55,-1.374983487908E-02)); +#3762 = ADVANCED_FACE('',(#3763),#3794,.T.); +#3763 = FACE_BOUND('',#3764,.T.); +#3764 = EDGE_LOOP('',(#3765,#3791,#3792,#3793)); +#3765 = ORIENTED_EDGE('',*,*,#3766,.F.); +#3766 = EDGE_CURVE('',#3717,#3476,#3767,.T.); +#3767 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3768,#3769,#3770,#3771,#3772, + #3773,#3774,#3775,#3776,#3777,#3778,#3779,#3780,#3781,#3782,#3783, + #3784,#3785,#3786,#3787,#3788,#3789,#3790),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.568119799064E-02, + 0.128486464174,0.188175130328,0.24510613067,0.299448424529, + 0.350822936009,0.399941680534,0.446671743632,0.491254533373, + 0.53337634427,0.573852754968,0.612526311719,0.649597136445, + 0.685532041554,0.720105786068,0.753837662974,0.818925416047, + 0.88049346165,0.940311333846,1.),.UNSPECIFIED.); +#3768 = CARTESIAN_POINT('',(-0.311470162896,0.55,-1.374983487908E-02)); +#3769 = CARTESIAN_POINT('',(-0.311525181819,0.55,-1.795659213089E-02)); +#3770 = CARTESIAN_POINT('',(-0.311632810595,0.55,-2.618590860894E-02)); +#3771 = CARTESIAN_POINT('',(-0.312044209365,0.55,-3.823772667516E-02)); +#3772 = CARTESIAN_POINT('',(-0.313106566814,0.55,-4.968450276607E-02)); +#3773 = CARTESIAN_POINT('',(-0.3142864787,0.55,-6.05755500325E-02)); +#3774 = CARTESIAN_POINT('',(-0.31602620081,0.55,-7.085058030295E-02)); +#3775 = CARTESIAN_POINT('',(-0.317901981498,0.55,-8.059561082858E-02)); +#3776 = CARTESIAN_POINT('',(-0.320422102727,0.55,-8.968991331052E-02)); +#3777 = CARTESIAN_POINT('',(-0.323114080224,0.55,-9.827587148168E-02)); +#3778 = CARTESIAN_POINT('',(-0.326195119777,0.55,-0.106255936932)); +#3779 = CARTESIAN_POINT('',(-0.329586693203,0.55,-0.113667315568)); +#3780 = CARTESIAN_POINT('',(-0.33320886908,0.55,-0.120545788044)); +#3781 = CARTESIAN_POINT('',(-0.337143093126,0.55,-0.126872482201)); +#3782 = CARTESIAN_POINT('',(-0.341342661432,0.55,-0.132675736492)); +#3783 = CARTESIAN_POINT('',(-0.345918416352,0.55,-0.137839195948)); +#3784 = CARTESIAN_POINT('',(-0.350688853633,0.55,-0.142522892759)); +#3785 = CARTESIAN_POINT('',(-0.357370572215,0.55,-0.147869149671)); +#3786 = CARTESIAN_POINT('',(-0.366118001195,0.55,-0.153320319219)); +#3787 = CARTESIAN_POINT('',(-0.37700256593,0.55,-0.158336895205)); +#3788 = CARTESIAN_POINT('',(-0.388329630355,0.55,-0.161217724468)); +#3789 = CARTESIAN_POINT('',(-0.395986975764,0.55,-0.161623893171)); +#3790 = CARTESIAN_POINT('',(-0.39981150905,0.55,-0.161826757956)); +#3791 = ORIENTED_EDGE('',*,*,#3734,.F.); +#3792 = ORIENTED_EDGE('',*,*,#3137,.T.); +#3793 = ORIENTED_EDGE('',*,*,#3505,.T.); +#3794 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#3795,#3796) + ,(#3797,#3798) + ,(#3799,#3800) + ,(#3801,#3802) + ,(#3803,#3804) + ,(#3805,#3806) + ,(#3807,#3808) + ,(#3809,#3810) + ,(#3811,#3812) + ,(#3813,#3814) + ,(#3815,#3816) + ,(#3817,#3818) + ,(#3819,#3820) + ,(#3821,#3822) + ,(#3823,#3824) + ,(#3825,#3826) + ,(#3827,#3828) + ,(#3829,#3830) + ,(#3831,#3832) + ,(#3833,#3834) + ,(#3835,#3836) + ,(#3837,#3838) + ,(#3839,#3840 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,4),(2,2),(0.,6.568119799064E-02,0.128486464174,0.188175130328, + 0.24510613067,0.299448424529,0.350822936009,0.399941680534, + 0.446671743632,0.491254533373,0.53337634427,0.573852754968, + 0.612526311719,0.649597136445,0.685532041554,0.720105786068, + 0.753837662974,0.818925416047,0.88049346165,0.940311333846,1.),(0., + 1.),.UNSPECIFIED.); +#3795 = CARTESIAN_POINT('',(-0.311470162896,0.56,-1.374983487908E-02)); +#3796 = CARTESIAN_POINT('',(-0.311470162896,0.55,-1.374983487908E-02)); +#3797 = CARTESIAN_POINT('',(-0.311525181819,0.56,-1.795659213089E-02)); +#3798 = CARTESIAN_POINT('',(-0.311525181819,0.55,-1.795659213089E-02)); +#3799 = CARTESIAN_POINT('',(-0.311632810595,0.56,-2.618590860894E-02)); +#3800 = CARTESIAN_POINT('',(-0.311632810595,0.55,-2.618590860894E-02)); +#3801 = CARTESIAN_POINT('',(-0.312044209365,0.56,-3.823772667516E-02)); +#3802 = CARTESIAN_POINT('',(-0.312044209365,0.55,-3.823772667516E-02)); +#3803 = CARTESIAN_POINT('',(-0.313106566814,0.56,-4.968450276607E-02)); +#3804 = CARTESIAN_POINT('',(-0.313106566814,0.55,-4.968450276607E-02)); +#3805 = CARTESIAN_POINT('',(-0.3142864787,0.56,-6.05755500325E-02)); +#3806 = CARTESIAN_POINT('',(-0.3142864787,0.55,-6.05755500325E-02)); +#3807 = CARTESIAN_POINT('',(-0.31602620081,0.56,-7.085058030295E-02)); +#3808 = CARTESIAN_POINT('',(-0.31602620081,0.55,-7.085058030295E-02)); +#3809 = CARTESIAN_POINT('',(-0.317901981498,0.56,-8.059561082858E-02)); +#3810 = CARTESIAN_POINT('',(-0.317901981498,0.55,-8.059561082858E-02)); +#3811 = CARTESIAN_POINT('',(-0.320422102727,0.56,-8.968991331052E-02)); +#3812 = CARTESIAN_POINT('',(-0.320422102727,0.55,-8.968991331052E-02)); +#3813 = CARTESIAN_POINT('',(-0.323114080224,0.56,-9.827587148168E-02)); +#3814 = CARTESIAN_POINT('',(-0.323114080224,0.55,-9.827587148168E-02)); +#3815 = CARTESIAN_POINT('',(-0.326195119777,0.56,-0.106255936932)); +#3816 = CARTESIAN_POINT('',(-0.326195119777,0.55,-0.106255936932)); +#3817 = CARTESIAN_POINT('',(-0.329586693203,0.56,-0.113667315568)); +#3818 = CARTESIAN_POINT('',(-0.329586693203,0.55,-0.113667315568)); +#3819 = CARTESIAN_POINT('',(-0.33320886908,0.56,-0.120545788044)); +#3820 = CARTESIAN_POINT('',(-0.33320886908,0.55,-0.120545788044)); +#3821 = CARTESIAN_POINT('',(-0.337143093126,0.56,-0.126872482201)); +#3822 = CARTESIAN_POINT('',(-0.337143093126,0.55,-0.126872482201)); +#3823 = CARTESIAN_POINT('',(-0.341342661432,0.56,-0.132675736492)); +#3824 = CARTESIAN_POINT('',(-0.341342661432,0.55,-0.132675736492)); +#3825 = CARTESIAN_POINT('',(-0.345918416352,0.56,-0.137839195948)); +#3826 = CARTESIAN_POINT('',(-0.345918416352,0.55,-0.137839195948)); +#3827 = CARTESIAN_POINT('',(-0.350688853633,0.56,-0.142522892759)); +#3828 = CARTESIAN_POINT('',(-0.350688853633,0.55,-0.142522892759)); +#3829 = CARTESIAN_POINT('',(-0.357370572215,0.56,-0.147869149671)); +#3830 = CARTESIAN_POINT('',(-0.357370572215,0.55,-0.147869149671)); +#3831 = CARTESIAN_POINT('',(-0.366118001195,0.56,-0.153320319219)); +#3832 = CARTESIAN_POINT('',(-0.366118001195,0.55,-0.153320319219)); +#3833 = CARTESIAN_POINT('',(-0.37700256593,0.56,-0.158336895205)); +#3834 = CARTESIAN_POINT('',(-0.37700256593,0.55,-0.158336895205)); +#3835 = CARTESIAN_POINT('',(-0.388329630355,0.56,-0.161217724468)); +#3836 = CARTESIAN_POINT('',(-0.388329630355,0.55,-0.161217724468)); +#3837 = CARTESIAN_POINT('',(-0.395986975764,0.56,-0.161623893171)); +#3838 = CARTESIAN_POINT('',(-0.395986975764,0.55,-0.161623893171)); +#3839 = CARTESIAN_POINT('',(-0.39981150905,0.56,-0.161826757956)); +#3840 = CARTESIAN_POINT('',(-0.39981150905,0.55,-0.161826757956)); +#3841 = ADVANCED_FACE('',(#3842),#3849,.F.); +#3842 = FACE_BOUND('',#3843,.T.); +#3843 = EDGE_LOOP('',(#3844,#3845,#3846,#3847,#3848)); +#3844 = ORIENTED_EDGE('',*,*,#3766,.T.); +#3845 = ORIENTED_EDGE('',*,*,#3475,.T.); +#3846 = ORIENTED_EDGE('',*,*,#3568,.T.); +#3847 = ORIENTED_EDGE('',*,*,#3654,.T.); +#3848 = ORIENTED_EDGE('',*,*,#3716,.T.); +#3849 = PLANE('',#3850); +#3850 = AXIS2_PLACEMENT_3D('',#3851,#3852,#3853); +#3851 = CARTESIAN_POINT('',(1.351560977094,0.55,0.4)); +#3852 = DIRECTION('',(-3.761581922631E-31,-1.,-1.019578823125E-46)); +#3853 = DIRECTION('',(1.,-3.761581922631E-31,0.)); +#3854 = ADVANCED_FACE('',(#3855,#3975),#4073,.T.); +#3855 = FACE_BOUND('',#3856,.T.); +#3856 = EDGE_LOOP('',(#3857,#3867,#3887,#3907,#3927,#3951,#3961,#3969)); +#3857 = ORIENTED_EDGE('',*,*,#3858,.F.); +#3858 = EDGE_CURVE('',#3859,#3861,#3863,.T.); +#3859 = VERTEX_POINT('',#3860); +#3860 = CARTESIAN_POINT('',(-0.191578335973,0.56,-3.800864898165E-02)); +#3861 = VERTEX_POINT('',#3862); +#3862 = CARTESIAN_POINT('',(-8.711118853673E-02,0.56,-0.197724193853)); +#3863 = LINE('',#3864,#3865); +#3864 = CARTESIAN_POINT('',(-0.191578335973,0.56,-3.800864898165E-02)); +#3865 = VECTOR('',#3866,1.); +#3866 = DIRECTION('',(0.547387929886,0.,-0.836878996161)); +#3867 = ORIENTED_EDGE('',*,*,#3868,.F.); +#3868 = EDGE_CURVE('',#3869,#3859,#3871,.T.); +#3869 = VERTEX_POINT('',#3870); +#3870 = CARTESIAN_POINT('',(-0.230700932126,0.56,6.365401127476E-02)); +#3871 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3872,#3873,#3874,#3875,#3876, + #3877,#3878,#3879,#3880,#3881,#3882,#3883,#3884,#3885,#3886), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 9.781818961471E-02,0.199726053402,0.305276357478,0.415811490538, + 0.474472231144,0.537273879776,0.60365742056,0.67429886309, + 0.749834485316,0.828598476757,0.912377778158,1.),.UNSPECIFIED.); +#3872 = CARTESIAN_POINT('',(-0.230700932126,0.56,6.365401127476E-02)); +#3873 = CARTESIAN_POINT('',(-0.230582787626,0.56,6.004955295378E-02)); +#3874 = CARTESIAN_POINT('',(-0.230341559129,0.56,5.268993775401E-02)); +#3875 = CARTESIAN_POINT('',(-0.228657220095,0.56,4.154353495966E-02)); +#3876 = CARTESIAN_POINT('',(-0.225950740617,0.56,3.0138426787E-02)); +#3877 = CARTESIAN_POINT('',(-0.222919715982,0.56,2.046300742738E-02)); +#3878 = CARTESIAN_POINT('',(-0.219717154977,0.56,1.253685523142E-02)); +#3879 = CARTESIAN_POINT('',(-0.217051901018,0.56,6.146506168995E-03)); +#3880 = CARTESIAN_POINT('',(-0.213734501414,0.56,-4.296011544768E-04)); +#3881 = CARTESIAN_POINT('',(-0.210197163295,0.56,-7.416964752513E-03)); +#3882 = CARTESIAN_POINT('',(-0.206121476403,0.56,-1.463550802137E-02)); +#3883 = CARTESIAN_POINT('',(-0.201689911464,0.56,-2.22058749675E-02)); +#3884 = CARTESIAN_POINT('',(-0.196779946374,0.56,-3.00076677337E-02)); +#3885 = CARTESIAN_POINT('',(-0.193337930099,0.56,-3.530208725838E-02)); +#3886 = CARTESIAN_POINT('',(-0.191578335973,0.56,-3.800864898165E-02)); +#3887 = ORIENTED_EDGE('',*,*,#3888,.F.); +#3888 = EDGE_CURVE('',#3889,#3869,#3891,.T.); +#3889 = VERTEX_POINT('',#3890); +#3890 = CARTESIAN_POINT('',(-0.124691316742,0.56,0.170224524095)); +#3891 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3892,#3893,#3894,#3895,#3896, + #3897,#3898,#3899,#3900,#3901,#3902,#3903,#3904,#3905,#3906), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 8.433472199263E-02,0.167052318416,0.249566077241,0.332740481802, + 0.415914886363,0.49782800954,0.580372588608,0.664600121057, + 0.749466693113,0.83251023394,0.915639281668,1.),.UNSPECIFIED.); +#3892 = CARTESIAN_POINT('',(-0.124691316742,0.56,0.170224524095)); +#3893 = CARTESIAN_POINT('',(-0.129400986807,0.56,0.170071703521)); +#3894 = CARTESIAN_POINT('',(-0.138730018608,0.56,0.16976899272)); +#3895 = CARTESIAN_POINT('',(-0.152453298032,0.56,0.167072398932)); +#3896 = CARTESIAN_POINT('',(-0.165639599766,0.56,0.162701688656)); +#3897 = CARTESIAN_POINT('',(-0.178196537857,0.56,0.156680260801)); +#3898 = CARTESIAN_POINT('',(-0.189828599149,0.56,0.149074472506)); +#3899 = CARTESIAN_POINT('',(-0.200235162793,0.56,0.139918244593)); +#3900 = CARTESIAN_POINT('',(-0.209364340248,0.56,0.129407298086)); +#3901 = CARTESIAN_POINT('',(-0.216961802342,0.56,0.117543263358)); +#3902 = CARTESIAN_POINT('',(-0.222987675536,0.56,0.104794267608)); +#3903 = CARTESIAN_POINT('',(-0.227506668048,0.56,9.150055196899E-02)); +#3904 = CARTESIAN_POINT('',(-0.230146292371,0.56,7.771055379641E-02)); +#3905 = CARTESIAN_POINT('',(-0.230515148056,0.56,6.836243987776E-02)); +#3906 = CARTESIAN_POINT('',(-0.230700932126,0.56,6.365401127476E-02)); +#3907 = ORIENTED_EDGE('',*,*,#3908,.F.); +#3908 = EDGE_CURVE('',#3909,#3889,#3911,.T.); +#3909 = VERTEX_POINT('',#3910); +#3910 = CARTESIAN_POINT('',(-1.531631674185E-02,0.56,6.302300165938E-02) + ); +#3911 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3912,#3913,#3914,#3915,#3916, + #3917,#3918,#3919,#3920,#3921,#3922,#3923,#3924,#3925,#3926), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 8.594794314413E-02,0.169125211881,0.250399107186,0.332289736139, + 0.413364287916,0.494172283371,0.576021735387,0.660756969254, + 0.745783125914,0.830043592975,0.914027545821,1.),.UNSPECIFIED.); +#3912 = CARTESIAN_POINT('',(-1.531631674185E-02,0.56,6.302300165938E-02) + ); +#3913 = CARTESIAN_POINT('',(-1.545862723027E-02,0.56,6.792097205406E-02) + ); +#3914 = CARTESIAN_POINT('',(-1.573866059264E-02,0.56,7.755901864928E-02) + ); +#3915 = CARTESIAN_POINT('',(-1.852904019471E-02,0.56,9.159668928973E-02) + ); +#3916 = CARTESIAN_POINT('',(-2.286500467024E-02,0.56,0.104969940843)); +#3917 = CARTESIAN_POINT('',(-2.906275751055E-02,0.56,0.11746525798)); +#3918 = CARTESIAN_POINT('',(-3.676099580893E-02,0.56,0.129065514938)); +#3919 = CARTESIAN_POINT('',(-4.614875507571E-02,0.56,0.13934406148)); +#3920 = CARTESIAN_POINT('',(-5.689310390911E-02,0.56,0.148511065212)); +#3921 = CARTESIAN_POINT('',(-6.904178372711E-02,0.56,0.156176727132)); +#3922 = CARTESIAN_POINT('',(-8.211608013875E-02,0.56,0.162437032234)); +#3923 = CARTESIAN_POINT('',(-9.585127988018E-02,0.56,0.166933556442)); +#3924 = CARTESIAN_POINT('',(-0.110113994514,0.56,0.169701903381)); +#3925 = CARTESIAN_POINT('',(-0.11979445532,0.56,0.170048963648)); +#3926 = CARTESIAN_POINT('',(-0.124691316742,0.56,0.170224524095)); +#3927 = ORIENTED_EDGE('',*,*,#3928,.F.); +#3928 = EDGE_CURVE('',#3929,#3909,#3931,.T.); +#3929 = VERTEX_POINT('',#3930); +#3930 = CARTESIAN_POINT('',(-0.119152454562,0.56,-4.067291180216E-02)); +#3931 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3932,#3933,#3934,#3935,#3936, + #3937,#3938,#3939,#3940,#3941,#3942,#3943,#3944,#3945,#3946,#3947, + #3948,#3949,#3950),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.523080374203E-02,0.128404896003,0.190067071596, + 0.250943365768,0.311545832852,0.372862802157,0.435023673856, + 0.499071724707,0.56309107505,0.62551010633,0.68668003593, + 0.747282503014,0.808563495216,0.870742103516,0.934340951506,1.), + .UNSPECIFIED.); +#3932 = CARTESIAN_POINT('',(-0.119152454562,0.56,-4.067291180216E-02)); +#3933 = CARTESIAN_POINT('',(-0.115595204929,0.56,-4.057730063258E-02)); +#3934 = CARTESIAN_POINT('',(-0.108592864883,0.56,-4.03890928905E-02)); +#3935 = CARTESIAN_POINT('',(-9.831218466586E-02,0.56,-3.894070782132E-02 + )); +#3936 = CARTESIAN_POINT('',(-8.843329106854E-02,0.56,-3.665819662896E-02 + )); +#3937 = CARTESIAN_POINT('',(-7.8997129843E-02,0.56,-3.333097103413E-02) + ); +#3938 = CARTESIAN_POINT('',(-6.996983165704E-02,0.56,-2.908073559791E-02 + )); +#3939 = CARTESIAN_POINT('',(-6.129959204619E-02,0.56,-2.398684856986E-02 + )); +#3940 = CARTESIAN_POINT('',(-5.314939103557E-02,0.56,-1.778628053418E-02 + )); +#3941 = CARTESIAN_POINT('',(-4.541427311438E-02,0.56,-1.085978495579E-02 + )); +#3942 = CARTESIAN_POINT('',(-3.839156337508E-02,0.56,-3.18808650628E-03) + ); +#3943 = CARTESIAN_POINT('',(-3.217395781933E-02,0.56,4.952047164325E-03) + ); +#3944 = CARTESIAN_POINT('',(-2.695127864592E-02,0.56,1.355213526414E-02) + ); +#3945 = CARTESIAN_POINT('',(-2.271388648446E-02,0.56,2.260782185748E-02) + ); +#3946 = CARTESIAN_POINT('',(-1.942339862467E-02,0.56,3.210514781353E-02) + ); +#3947 = CARTESIAN_POINT('',(-1.702463412031E-02,0.56,4.203196176237E-02) + ); +#3948 = CARTESIAN_POINT('',(-1.560667483833E-02,0.56,5.239510890838E-02) + ); +#3949 = CARTESIAN_POINT('',(-1.541412576682E-02,0.56,5.9442926435E-02)); +#3950 = CARTESIAN_POINT('',(-1.531631674185E-02,0.56,6.302300165938E-02) + ); +#3951 = ORIENTED_EDGE('',*,*,#3952,.F.); +#3952 = EDGE_CURVE('',#3953,#3929,#3955,.T.); +#3953 = VERTEX_POINT('',#3954); +#3954 = CARTESIAN_POINT('',(-0.155400451357,0.56,-3.730752718677E-02)); +#3955 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3956,#3957,#3958,#3959,#3960), + .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.512659336342,1.),.UNSPECIFIED.); +#3956 = CARTESIAN_POINT('',(-0.155400451357,0.56,-3.730752718677E-02)); +#3957 = CARTESIAN_POINT('',(-0.149243423659,0.56,-3.828891325213E-02)); +#3958 = CARTESIAN_POINT('',(-0.137233444981,0.56,-4.020321773425E-02)); +#3959 = CARTESIAN_POINT('',(-0.125076855129,0.56,-4.05190122791E-02)); +#3960 = CARTESIAN_POINT('',(-0.119152454562,0.56,-4.067291180216E-02)); +#3961 = ORIENTED_EDGE('',*,*,#3962,.F.); +#3962 = EDGE_CURVE('',#3963,#3953,#3965,.T.); +#3963 = VERTEX_POINT('',#3964); +#3964 = CARTESIAN_POINT('',(-6.292248661365E-02,0.56,-0.178723793212)); +#3965 = LINE('',#3966,#3967); +#3966 = CARTESIAN_POINT('',(-6.292248661365E-02,0.56,-0.178723793212)); +#3967 = VECTOR('',#3968,1.); +#3968 = DIRECTION('',(-0.547305260354,0.,0.836933063028)); +#3969 = ORIENTED_EDGE('',*,*,#3970,.F.); +#3970 = EDGE_CURVE('',#3861,#3963,#3971,.T.); +#3971 = LINE('',#3972,#3973); +#3972 = CARTESIAN_POINT('',(-8.711118853673E-02,0.56,-0.197724193853)); +#3973 = VECTOR('',#3974,1.); +#3974 = DIRECTION('',(0.786397428723,0.,0.617720878794)); +#3975 = FACE_BOUND('',#3976,.T.); +#3976 = EDGE_LOOP('',(#3977,#4003,#4027,#4051)); +#3977 = ORIENTED_EDGE('',*,*,#3978,.F.); +#3978 = EDGE_CURVE('',#3979,#3981,#3983,.T.); +#3979 = VERTEX_POINT('',#3980); +#3980 = CARTESIAN_POINT('',(-0.125742999434,0.56,-4.775475904722E-03)); +#3981 = VERTEX_POINT('',#3982); +#3982 = CARTESIAN_POINT('',(-0.199290675716,0.56,6.491603050553E-02)); +#3983 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#3984,#3985,#3986,#3987,#3988, + #3989,#3990,#3991,#3992,#3993,#3994,#3995,#3996,#3997,#3998,#3999, + #4000,#4001,#4002),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,7.059928943359E-02,0.137900921004,0.20319619781, + 0.26678972465,0.329106387221,0.390653545235,0.452653056934, + 0.5157480403,0.5779263408,0.638930011618,0.698350717642, + 0.757296037444,0.81639376735,0.876266909614,0.936817108906,1.), + .UNSPECIFIED.); +#3984 = CARTESIAN_POINT('',(-0.125742999434,0.56,-4.775475904722E-03)); +#3985 = CARTESIAN_POINT('',(-0.128409223917,0.56,-4.697671536463E-03)); +#3986 = CARTESIAN_POINT('',(-0.133617134858,0.56,-4.545697003474E-03)); +#3987 = CARTESIAN_POINT('',(-0.14125787633,0.56,-3.663171810976E-03)); +#3988 = CARTESIAN_POINT('',(-0.148489201475,0.56,-2.001265252898E-03)); +#3989 = CARTESIAN_POINT('',(-0.15540691484,0.56,1.153679433595E-04)); +#3990 = CARTESIAN_POINT('',(-0.16188168513,0.56,3.025673914924E-03)); +#3991 = CARTESIAN_POINT('',(-0.167960569115,0.56,6.560853810438E-03)); +#3992 = CARTESIAN_POINT('',(-0.173667074304,0.56,1.072297162511E-02)); +#3993 = CARTESIAN_POINT('',(-0.178941429477,0.56,1.545306273547E-02)); +#3994 = CARTESIAN_POINT('',(-0.183723395812,0.56,2.063186603418E-02)); +#3995 = CARTESIAN_POINT('',(-0.187841508889,0.56,2.617881825178E-02)); +#3996 = CARTESIAN_POINT('',(-0.191393748898,0.56,3.196023856236E-02)); +#3997 = CARTESIAN_POINT('',(-0.194281930786,0.56,3.802443278205E-02)); +#3998 = CARTESIAN_POINT('',(-0.196530938363,0.56,4.4369082741E-02)); +#3999 = CARTESIAN_POINT('',(-0.19815776345,0.56,5.096500767918E-02)); +#4000 = CARTESIAN_POINT('',(-0.199063138572,0.56,5.78564382918E-02)); +#4001 = CARTESIAN_POINT('',(-0.199213761723,0.56,6.252968856475E-02)); +#4002 = CARTESIAN_POINT('',(-0.199290675716,0.56,6.491603050553E-02)); +#4003 = ORIENTED_EDGE('',*,*,#4004,.F.); +#4004 = EDGE_CURVE('',#4005,#3979,#4007,.T.); +#4005 = VERTEX_POINT('',#4006); +#4006 = CARTESIAN_POINT('',(-4.672657315211E-02,0.56,6.491603050553E-02) + ); +#4007 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4008,#4009,#4010,#4011,#4012, + #4013,#4014,#4015,#4016,#4017,#4018,#4019,#4020,#4021,#4022,#4023, + #4024,#4025,#4026),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.113791491562E-02,0.119993843851,0.178225321508, + 0.236256420262,0.294929376955,0.35471574881,0.416729663924, + 0.480664408471,0.545831770211,0.609758105426,0.672971228474, + 0.736016869168,0.799839398192,0.864775356666,0.931087623273,1.), + .UNSPECIFIED.); +#4008 = CARTESIAN_POINT('',(-4.672657315211E-02,0.56,6.491603050553E-02) + ); +#4009 = CARTESIAN_POINT('',(-4.678160245161E-02,0.56,6.252657541381E-02) + ); +#4010 = CARTESIAN_POINT('',(-4.688960707003E-02,0.56,5.783685216169E-02) + ); +#4011 = CARTESIAN_POINT('',(-4.811120192819E-02,0.56,5.096809033808E-02) + ); +#4012 = CARTESIAN_POINT('',(-4.980543931421E-02,0.56,4.433556971592E-02) + ); +#4013 = CARTESIAN_POINT('',(-5.236374238518E-02,0.56,3.798097481259E-02) + ); +#4014 = CARTESIAN_POINT('',(-5.568739685922E-02,0.56,3.192938208853E-02) + ); +#4015 = CARTESIAN_POINT('',(-5.97357375623E-02,0.56,2.615022199688E-02) + ); +#4016 = CARTESIAN_POINT('',(-6.441899459334E-02,0.56,2.059918726654E-02) + ); +#4017 = CARTESIAN_POINT('',(-6.982874855266E-02,0.56,1.544290642903E-02) + ); +#4018 = CARTESIAN_POINT('',(-7.571777194776E-02,0.56,1.072819863532E-02) + ); +#4019 = CARTESIAN_POINT('',(-8.197933048506E-02,0.56,6.566242995512E-03) + ); +#4020 = CARTESIAN_POINT('',(-8.85301278549E-02,0.56,3.05374532848E-03)); +#4021 = CARTESIAN_POINT('',(-9.536352209922E-02,0.56,1.230351018118E-04) + ); +#4022 = CARTESIAN_POINT('',(-0.102557810364,0.56,-1.991912311346E-03)); +#4023 = CARTESIAN_POINT('',(-0.109996844283,0.56,-3.657236618179E-03)); +#4024 = CARTESIAN_POINT('',(-0.117775768547,0.56,-4.543438390761E-03)); +#4025 = CARTESIAN_POINT('',(-0.123053429379,0.56,-4.697144906395E-03)); +#4026 = CARTESIAN_POINT('',(-0.125742999434,0.56,-4.775475904722E-03)); +#4027 = ORIENTED_EDGE('',*,*,#4028,.F.); +#4028 = EDGE_CURVE('',#4029,#4005,#4031,.T.); +#4029 = VERTEX_POINT('',#4030); +#4030 = CARTESIAN_POINT('',(-0.123008624434,0.56,0.134327088198)); +#4031 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4032,#4033,#4034,#4035,#4036, + #4037,#4038,#4039,#4040,#4041,#4042,#4043,#4044,#4045,#4046,#4047, + #4048,#4049,#4050),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.796237149446E-02,0.133283402868,0.197835297757, + 0.260891986531,0.323376504483,0.386350075469,0.449637731052, + 0.514795326978,0.579239913241,0.641814177758,0.701358564786, + 0.760726765986,0.819222067924,0.878716169385,0.938147354053,1.), + .UNSPECIFIED.); +#4032 = CARTESIAN_POINT('',(-0.123008624434,0.56,0.134327088198)); +#4033 = CARTESIAN_POINT('',(-0.120412074583,0.56,0.134250178058)); +#4034 = CARTESIAN_POINT('',(-0.115319889123,0.56,0.134099346873)); +#4035 = CARTESIAN_POINT('',(-0.1078025431,0.56,0.133191379989)); +#4036 = CARTESIAN_POINT('',(-0.100594711236,0.56,0.131584915195)); +#4037 = CARTESIAN_POINT('',(-9.369006037673E-02,0.56,0.129303638169)); +#4038 = CARTESIAN_POINT('',(-8.703591727014E-02,0.56,0.12651827721)); +#4039 = CARTESIAN_POINT('',(-8.072544511912E-02,0.56,0.122995085236)); +#4040 = CARTESIAN_POINT('',(-7.472263576459E-02,0.56,0.118799473461)); +#4041 = CARTESIAN_POINT('',(-6.904657580986E-02,0.56,0.114087430638)); +#4042 = CARTESIAN_POINT('',(-6.378318197595E-02,0.56,0.108950145443)); +#4043 = CARTESIAN_POINT('',(-5.925545408874E-02,0.56,0.1034271732)); +#4044 = CARTESIAN_POINT('',(-5.538713076463E-02,0.56,9.765778366771E-02) + ); +#4045 = CARTESIAN_POINT('',(-5.224371205784E-02,0.56,9.163799467958E-02) + ); +#4046 = CARTESIAN_POINT('',(-4.973758292609E-02,0.56,8.532504591604E-02) + ); +#4047 = CARTESIAN_POINT('',(-4.802543620699E-02,0.56,7.875337352415E-02) + ); +#4048 = CARTESIAN_POINT('',(-4.691250731458E-02,0.56,7.191817092766E-02) + ); +#4049 = CARTESIAN_POINT('',(-4.678937069052E-02,0.56,6.728093847215E-02) + ); +#4050 = CARTESIAN_POINT('',(-4.672657315211E-02,0.56,6.491603050553E-02) + ); +#4051 = ORIENTED_EDGE('',*,*,#4052,.F.); +#4052 = EDGE_CURVE('',#3981,#4029,#4053,.T.); +#4053 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4054,#4055,#4056,#4057,#4058, + #4059,#4060,#4061,#4062,#4063,#4064,#4065,#4066,#4067,#4068,#4069, + #4070,#4071,#4072),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.184170298391E-02,0.121262373094,0.180745948865, + 0.239230901822,0.298307558788,0.358182797616,0.42035923078, + 0.484792415514,0.549938483767,0.61371827754,0.67668070725, + 0.739154170448,0.80219970324,0.866740177616,0.9320496524,1.), + .UNSPECIFIED.); +#4054 = CARTESIAN_POINT('',(-0.199290675716,0.56,6.491603050553E-02)); +#4055 = CARTESIAN_POINT('',(-0.199228039568,0.56,6.728102849383E-02)); +#4056 = CARTESIAN_POINT('',(-0.199105219407,0.56,7.191843746848E-02)); +#4057 = CARTESIAN_POINT('',(-0.19798998742,0.56,7.875235542542E-02)); +#4058 = CARTESIAN_POINT('',(-0.196286479187,0.56,8.532884626567E-02)); +#4059 = CARTESIAN_POINT('',(-0.193752439601,0.56,9.161400614408E-02)); +#4060 = CARTESIAN_POINT('',(-0.190729750785,0.56,9.770363794731E-02)); +#4061 = CARTESIAN_POINT('',(-0.186739218366,0.56,0.103377166494)); +#4062 = CARTESIAN_POINT('',(-0.182317539783,0.56,0.108979173504)); +#4063 = CARTESIAN_POINT('',(-0.177032146438,0.56,0.114079320646)); +#4064 = CARTESIAN_POINT('',(-0.17135981014,0.56,0.118824983064)); +#4065 = CARTESIAN_POINT('',(-0.165299689889,0.56,0.122973008416)); +#4066 = CARTESIAN_POINT('',(-0.158983693904,0.56,0.126521625756)); +#4067 = CARTESIAN_POINT('',(-0.152326551696,0.56,0.129302735517)); +#4068 = CARTESIAN_POINT('',(-0.145422713299,0.56,0.131585164202)); +#4069 = CARTESIAN_POINT('',(-0.138214657895,0.56,0.133191312128)); +#4070 = CARTESIAN_POINT('',(-0.130697372342,0.56,0.134099364728)); +#4071 = CARTESIAN_POINT('',(-0.12560517854,0.56,0.134250184088)); +#4072 = CARTESIAN_POINT('',(-0.123008624434,0.56,0.134327088198)); +#4073 = PLANE('',#4074); +#4074 = AXIS2_PLACEMENT_3D('',#4075,#4076,#4077); +#4075 = CARTESIAN_POINT('',(-0.137349735632,0.56,-3.978922461368E-02)); +#4076 = DIRECTION('',(1.065517730216E-14,1.,6.68485360611E-14)); +#4077 = DIRECTION('',(0.,-6.68485360611E-14,1.)); +#4078 = ADVANCED_FACE('',(#4079),#4095,.T.); +#4079 = FACE_BOUND('',#4080,.T.); +#4080 = EDGE_LOOP('',(#4081,#4082,#4088,#4089)); +#4081 = ORIENTED_EDGE('',*,*,#2737,.F.); +#4082 = ORIENTED_EDGE('',*,*,#4083,.F.); +#4083 = EDGE_CURVE('',#3859,#2718,#4084,.T.); +#4084 = LINE('',#4085,#4086); +#4085 = CARTESIAN_POINT('',(-0.191578335973,0.56,-3.800864898165E-02)); +#4086 = VECTOR('',#4087,1.); +#4087 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4088 = ORIENTED_EDGE('',*,*,#3858,.T.); +#4089 = ORIENTED_EDGE('',*,*,#4090,.T.); +#4090 = EDGE_CURVE('',#3861,#2738,#4091,.T.); +#4091 = LINE('',#4092,#4093); +#4092 = CARTESIAN_POINT('',(-8.711118853673E-02,0.56,-0.197724193853)); +#4093 = VECTOR('',#4094,1.); +#4094 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4095 = PLANE('',#4096); +#4096 = AXIS2_PLACEMENT_3D('',#4097,#4098,#4099); +#4097 = CARTESIAN_POINT('',(-0.191578335973,0.56,-3.800864898165E-02)); +#4098 = DIRECTION('',(-0.836878996161,3.147988903389E-31,-0.547387929886 + )); +#4099 = DIRECTION('',(-0.547387929886,0.,0.836878996161)); +#4100 = ADVANCED_FACE('',(#4101),#4112,.T.); +#4101 = FACE_BOUND('',#4102,.T.); +#4102 = EDGE_LOOP('',(#4103,#4104,#4110,#4111)); +#4103 = ORIENTED_EDGE('',*,*,#2715,.F.); +#4104 = ORIENTED_EDGE('',*,*,#4105,.F.); +#4105 = EDGE_CURVE('',#3869,#2716,#4106,.T.); +#4106 = LINE('',#4107,#4108); +#4107 = CARTESIAN_POINT('',(-0.230700932126,0.56,6.365401127476E-02)); +#4108 = VECTOR('',#4109,1.); +#4109 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4110 = ORIENTED_EDGE('',*,*,#3868,.T.); +#4111 = ORIENTED_EDGE('',*,*,#4083,.T.); +#4112 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4113,#4114) + ,(#4115,#4116) + ,(#4117,#4118) + ,(#4119,#4120) + ,(#4121,#4122) + ,(#4123,#4124) + ,(#4125,#4126) + ,(#4127,#4128) + ,(#4129,#4130) + ,(#4131,#4132) + ,(#4133,#4134) + ,(#4135,#4136) + ,(#4137,#4138) + ,(#4139,#4140) + ,(#4141,#4142 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(2,2),(0., + 9.781818961471E-02,0.199726053402,0.305276357478,0.415811490538, + 0.474472231144,0.537273879776,0.60365742056,0.67429886309, + 0.749834485316,0.828598476757,0.912377778158,1.),(0.,1.), + .UNSPECIFIED.); +#4113 = CARTESIAN_POINT('',(-0.230700932126,0.56,6.365401127476E-02)); +#4114 = CARTESIAN_POINT('',(-0.230700932126,0.55,6.365401127476E-02)); +#4115 = CARTESIAN_POINT('',(-0.230582787626,0.56,6.004955295378E-02)); +#4116 = CARTESIAN_POINT('',(-0.230582787626,0.55,6.004955295378E-02)); +#4117 = CARTESIAN_POINT('',(-0.230341559129,0.56,5.268993775401E-02)); +#4118 = CARTESIAN_POINT('',(-0.230341559129,0.55,5.268993775401E-02)); +#4119 = CARTESIAN_POINT('',(-0.228657220095,0.56,4.154353495966E-02)); +#4120 = CARTESIAN_POINT('',(-0.228657220095,0.55,4.154353495966E-02)); +#4121 = CARTESIAN_POINT('',(-0.225950740617,0.56,3.0138426787E-02)); +#4122 = CARTESIAN_POINT('',(-0.225950740617,0.55,3.0138426787E-02)); +#4123 = CARTESIAN_POINT('',(-0.222919715982,0.56,2.046300742738E-02)); +#4124 = CARTESIAN_POINT('',(-0.222919715982,0.55,2.046300742738E-02)); +#4125 = CARTESIAN_POINT('',(-0.219717154977,0.56,1.253685523142E-02)); +#4126 = CARTESIAN_POINT('',(-0.219717154977,0.55,1.253685523142E-02)); +#4127 = CARTESIAN_POINT('',(-0.217051901018,0.56,6.146506168995E-03)); +#4128 = CARTESIAN_POINT('',(-0.217051901018,0.55,6.146506168995E-03)); +#4129 = CARTESIAN_POINT('',(-0.213734501414,0.56,-4.296011544768E-04)); +#4130 = CARTESIAN_POINT('',(-0.213734501414,0.55,-4.296011544768E-04)); +#4131 = CARTESIAN_POINT('',(-0.210197163295,0.56,-7.416964752513E-03)); +#4132 = CARTESIAN_POINT('',(-0.210197163295,0.55,-7.416964752513E-03)); +#4133 = CARTESIAN_POINT('',(-0.206121476403,0.56,-1.463550802137E-02)); +#4134 = CARTESIAN_POINT('',(-0.206121476403,0.55,-1.463550802137E-02)); +#4135 = CARTESIAN_POINT('',(-0.201689911464,0.56,-2.22058749675E-02)); +#4136 = CARTESIAN_POINT('',(-0.201689911464,0.55,-2.22058749675E-02)); +#4137 = CARTESIAN_POINT('',(-0.196779946374,0.56,-3.00076677337E-02)); +#4138 = CARTESIAN_POINT('',(-0.196779946374,0.55,-3.00076677337E-02)); +#4139 = CARTESIAN_POINT('',(-0.193337930099,0.56,-3.530208725838E-02)); +#4140 = CARTESIAN_POINT('',(-0.193337930099,0.55,-3.530208725838E-02)); +#4141 = CARTESIAN_POINT('',(-0.191578335973,0.56,-3.800864898165E-02)); +#4142 = CARTESIAN_POINT('',(-0.191578335973,0.55,-3.800864898165E-02)); +#4143 = ADVANCED_FACE('',(#4144),#4155,.T.); +#4144 = FACE_BOUND('',#4145,.T.); +#4145 = EDGE_LOOP('',(#4146,#4147,#4153,#4154)); +#4146 = ORIENTED_EDGE('',*,*,#2815,.F.); +#4147 = ORIENTED_EDGE('',*,*,#4148,.F.); +#4148 = EDGE_CURVE('',#3889,#2796,#4149,.T.); +#4149 = LINE('',#4150,#4151); +#4150 = CARTESIAN_POINT('',(-0.124691316742,0.56,0.170224524095)); +#4151 = VECTOR('',#4152,1.); +#4152 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4153 = ORIENTED_EDGE('',*,*,#3888,.T.); +#4154 = ORIENTED_EDGE('',*,*,#4105,.T.); +#4155 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4156,#4157) + ,(#4158,#4159) + ,(#4160,#4161) + ,(#4162,#4163) + ,(#4164,#4165) + ,(#4166,#4167) + ,(#4168,#4169) + ,(#4170,#4171) + ,(#4172,#4173) + ,(#4174,#4175) + ,(#4176,#4177) + ,(#4178,#4179) + ,(#4180,#4181) + ,(#4182,#4183) + ,(#4184,#4185 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(2,2),(0., + 8.433472199263E-02,0.167052318416,0.249566077241,0.332740481802, + 0.415914886363,0.49782800954,0.580372588608,0.664600121057, + 0.749466693113,0.83251023394,0.915639281668,1.),(0.,1.), + .UNSPECIFIED.); +#4156 = CARTESIAN_POINT('',(-0.124691316742,0.56,0.170224524095)); +#4157 = CARTESIAN_POINT('',(-0.124691316742,0.55,0.170224524095)); +#4158 = CARTESIAN_POINT('',(-0.129400986807,0.56,0.170071703521)); +#4159 = CARTESIAN_POINT('',(-0.129400986807,0.55,0.170071703521)); +#4160 = CARTESIAN_POINT('',(-0.138730018608,0.56,0.16976899272)); +#4161 = CARTESIAN_POINT('',(-0.138730018608,0.55,0.16976899272)); +#4162 = CARTESIAN_POINT('',(-0.152453298032,0.56,0.167072398932)); +#4163 = CARTESIAN_POINT('',(-0.152453298032,0.55,0.167072398932)); +#4164 = CARTESIAN_POINT('',(-0.165639599766,0.56,0.162701688656)); +#4165 = CARTESIAN_POINT('',(-0.165639599766,0.55,0.162701688656)); +#4166 = CARTESIAN_POINT('',(-0.178196537857,0.56,0.156680260801)); +#4167 = CARTESIAN_POINT('',(-0.178196537857,0.55,0.156680260801)); +#4168 = CARTESIAN_POINT('',(-0.189828599149,0.56,0.149074472506)); +#4169 = CARTESIAN_POINT('',(-0.189828599149,0.55,0.149074472506)); +#4170 = CARTESIAN_POINT('',(-0.200235162793,0.56,0.139918244593)); +#4171 = CARTESIAN_POINT('',(-0.200235162793,0.55,0.139918244593)); +#4172 = CARTESIAN_POINT('',(-0.209364340248,0.56,0.129407298086)); +#4173 = CARTESIAN_POINT('',(-0.209364340248,0.55,0.129407298086)); +#4174 = CARTESIAN_POINT('',(-0.216961802342,0.56,0.117543263358)); +#4175 = CARTESIAN_POINT('',(-0.216961802342,0.55,0.117543263358)); +#4176 = CARTESIAN_POINT('',(-0.222987675536,0.56,0.104794267608)); +#4177 = CARTESIAN_POINT('',(-0.222987675536,0.55,0.104794267608)); +#4178 = CARTESIAN_POINT('',(-0.227506668048,0.56,9.150055196899E-02)); +#4179 = CARTESIAN_POINT('',(-0.227506668048,0.55,9.150055196899E-02)); +#4180 = CARTESIAN_POINT('',(-0.230146292371,0.56,7.771055379641E-02)); +#4181 = CARTESIAN_POINT('',(-0.230146292371,0.55,7.771055379641E-02)); +#4182 = CARTESIAN_POINT('',(-0.230515148056,0.56,6.836243987776E-02)); +#4183 = CARTESIAN_POINT('',(-0.230515148056,0.55,6.836243987776E-02)); +#4184 = CARTESIAN_POINT('',(-0.230700932126,0.56,6.365401127476E-02)); +#4185 = CARTESIAN_POINT('',(-0.230700932126,0.55,6.365401127476E-02)); +#4186 = ADVANCED_FACE('',(#4187),#4198,.T.); +#4187 = FACE_BOUND('',#4188,.T.); +#4188 = EDGE_LOOP('',(#4189,#4190,#4196,#4197)); +#4189 = ORIENTED_EDGE('',*,*,#2795,.F.); +#4190 = ORIENTED_EDGE('',*,*,#4191,.F.); +#4191 = EDGE_CURVE('',#3909,#2772,#4192,.T.); +#4192 = LINE('',#4193,#4194); +#4193 = CARTESIAN_POINT('',(-1.531631674185E-02,0.56,6.302300165938E-02) + ); +#4194 = VECTOR('',#4195,1.); +#4195 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4196 = ORIENTED_EDGE('',*,*,#3908,.T.); +#4197 = ORIENTED_EDGE('',*,*,#4148,.T.); +#4198 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4199,#4200) + ,(#4201,#4202) + ,(#4203,#4204) + ,(#4205,#4206) + ,(#4207,#4208) + ,(#4209,#4210) + ,(#4211,#4212) + ,(#4213,#4214) + ,(#4215,#4216) + ,(#4217,#4218) + ,(#4219,#4220) + ,(#4221,#4222) + ,(#4223,#4224) + ,(#4225,#4226) + ,(#4227,#4228 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(2,2),(0., + 8.594794314413E-02,0.169125211881,0.250399107186,0.332289736139, + 0.413364287916,0.494172283371,0.576021735387,0.660756969254, + 0.745783125914,0.830043592975,0.914027545821,1.),(0.,1.), + .UNSPECIFIED.); +#4199 = CARTESIAN_POINT('',(-1.531631674185E-02,0.56,6.302300165938E-02) + ); +#4200 = CARTESIAN_POINT('',(-1.531631674185E-02,0.55,6.302300165938E-02) + ); +#4201 = CARTESIAN_POINT('',(-1.545862723027E-02,0.56,6.792097205406E-02) + ); +#4202 = CARTESIAN_POINT('',(-1.545862723027E-02,0.55,6.792097205406E-02) + ); +#4203 = CARTESIAN_POINT('',(-1.573866059264E-02,0.56,7.755901864928E-02) + ); +#4204 = CARTESIAN_POINT('',(-1.573866059264E-02,0.55,7.755901864928E-02) + ); +#4205 = CARTESIAN_POINT('',(-1.852904019471E-02,0.56,9.159668928973E-02) + ); +#4206 = CARTESIAN_POINT('',(-1.852904019471E-02,0.55,9.159668928973E-02) + ); +#4207 = CARTESIAN_POINT('',(-2.286500467024E-02,0.56,0.104969940843)); +#4208 = CARTESIAN_POINT('',(-2.286500467024E-02,0.55,0.104969940843)); +#4209 = CARTESIAN_POINT('',(-2.906275751055E-02,0.56,0.11746525798)); +#4210 = CARTESIAN_POINT('',(-2.906275751055E-02,0.55,0.11746525798)); +#4211 = CARTESIAN_POINT('',(-3.676099580893E-02,0.56,0.129065514938)); +#4212 = CARTESIAN_POINT('',(-3.676099580893E-02,0.55,0.129065514938)); +#4213 = CARTESIAN_POINT('',(-4.614875507571E-02,0.56,0.13934406148)); +#4214 = CARTESIAN_POINT('',(-4.614875507571E-02,0.55,0.13934406148)); +#4215 = CARTESIAN_POINT('',(-5.689310390911E-02,0.56,0.148511065212)); +#4216 = CARTESIAN_POINT('',(-5.689310390911E-02,0.55,0.148511065212)); +#4217 = CARTESIAN_POINT('',(-6.904178372711E-02,0.56,0.156176727132)); +#4218 = CARTESIAN_POINT('',(-6.904178372711E-02,0.55,0.156176727132)); +#4219 = CARTESIAN_POINT('',(-8.211608013875E-02,0.56,0.162437032234)); +#4220 = CARTESIAN_POINT('',(-8.211608013875E-02,0.55,0.162437032234)); +#4221 = CARTESIAN_POINT('',(-9.585127988018E-02,0.56,0.166933556442)); +#4222 = CARTESIAN_POINT('',(-9.585127988018E-02,0.55,0.166933556442)); +#4223 = CARTESIAN_POINT('',(-0.110113994514,0.56,0.169701903381)); +#4224 = CARTESIAN_POINT('',(-0.110113994514,0.55,0.169701903381)); +#4225 = CARTESIAN_POINT('',(-0.11979445532,0.56,0.170048963648)); +#4226 = CARTESIAN_POINT('',(-0.11979445532,0.55,0.170048963648)); +#4227 = CARTESIAN_POINT('',(-0.124691316742,0.56,0.170224524095)); +#4228 = CARTESIAN_POINT('',(-0.124691316742,0.55,0.170224524095)); +#4229 = ADVANCED_FACE('',(#4230),#4241,.T.); +#4230 = FACE_BOUND('',#4231,.T.); +#4231 = EDGE_LOOP('',(#4232,#4233,#4239,#4240)); +#4232 = ORIENTED_EDGE('',*,*,#2771,.F.); +#4233 = ORIENTED_EDGE('',*,*,#4234,.F.); +#4234 = EDGE_CURVE('',#3929,#2762,#4235,.T.); +#4235 = LINE('',#4236,#4237); +#4236 = CARTESIAN_POINT('',(-0.119152454562,0.56,-4.067291180216E-02)); +#4237 = VECTOR('',#4238,1.); +#4238 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4239 = ORIENTED_EDGE('',*,*,#3928,.T.); +#4240 = ORIENTED_EDGE('',*,*,#4191,.T.); +#4241 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4242,#4243) + ,(#4244,#4245) + ,(#4246,#4247) + ,(#4248,#4249) + ,(#4250,#4251) + ,(#4252,#4253) + ,(#4254,#4255) + ,(#4256,#4257) + ,(#4258,#4259) + ,(#4260,#4261) + ,(#4262,#4263) + ,(#4264,#4265) + ,(#4266,#4267) + ,(#4268,#4269) + ,(#4270,#4271) + ,(#4272,#4273) + ,(#4274,#4275) + ,(#4276,#4277) + ,(#4278,#4279 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.523080374203E-02,0.128404896003,0.190067071596, + 0.250943365768,0.311545832852,0.372862802157,0.435023673856, + 0.499071724707,0.56309107505,0.62551010633,0.68668003593, + 0.747282503014,0.808563495216,0.870742103516,0.934340951506,1.),(0., + 1.),.UNSPECIFIED.); +#4242 = CARTESIAN_POINT('',(-0.119152454562,0.56,-4.067291180216E-02)); +#4243 = CARTESIAN_POINT('',(-0.119152454562,0.55,-4.067291180216E-02)); +#4244 = CARTESIAN_POINT('',(-0.115595204929,0.56,-4.057730063258E-02)); +#4245 = CARTESIAN_POINT('',(-0.115595204929,0.55,-4.057730063258E-02)); +#4246 = CARTESIAN_POINT('',(-0.108592864883,0.56,-4.03890928905E-02)); +#4247 = CARTESIAN_POINT('',(-0.108592864883,0.55,-4.03890928905E-02)); +#4248 = CARTESIAN_POINT('',(-9.831218466586E-02,0.56,-3.894070782132E-02 + )); +#4249 = CARTESIAN_POINT('',(-9.831218466586E-02,0.55,-3.894070782132E-02 + )); +#4250 = CARTESIAN_POINT('',(-8.843329106854E-02,0.56,-3.665819662896E-02 + )); +#4251 = CARTESIAN_POINT('',(-8.843329106854E-02,0.55,-3.665819662896E-02 + )); +#4252 = CARTESIAN_POINT('',(-7.8997129843E-02,0.56,-3.333097103413E-02) + ); +#4253 = CARTESIAN_POINT('',(-7.8997129843E-02,0.55,-3.333097103413E-02) + ); +#4254 = CARTESIAN_POINT('',(-6.996983165704E-02,0.56,-2.908073559791E-02 + )); +#4255 = CARTESIAN_POINT('',(-6.996983165704E-02,0.55,-2.908073559791E-02 + )); +#4256 = CARTESIAN_POINT('',(-6.129959204619E-02,0.56,-2.398684856986E-02 + )); +#4257 = CARTESIAN_POINT('',(-6.129959204619E-02,0.55,-2.398684856986E-02 + )); +#4258 = CARTESIAN_POINT('',(-5.314939103557E-02,0.56,-1.778628053418E-02 + )); +#4259 = CARTESIAN_POINT('',(-5.314939103557E-02,0.55,-1.778628053418E-02 + )); +#4260 = CARTESIAN_POINT('',(-4.541427311438E-02,0.56,-1.085978495579E-02 + )); +#4261 = CARTESIAN_POINT('',(-4.541427311438E-02,0.55,-1.085978495579E-02 + )); +#4262 = CARTESIAN_POINT('',(-3.839156337508E-02,0.56,-3.18808650628E-03) + ); +#4263 = CARTESIAN_POINT('',(-3.839156337508E-02,0.55,-3.18808650628E-03) + ); +#4264 = CARTESIAN_POINT('',(-3.217395781933E-02,0.56,4.952047164325E-03) + ); +#4265 = CARTESIAN_POINT('',(-3.217395781933E-02,0.55,4.952047164325E-03) + ); +#4266 = CARTESIAN_POINT('',(-2.695127864592E-02,0.56,1.355213526414E-02) + ); +#4267 = CARTESIAN_POINT('',(-2.695127864592E-02,0.55,1.355213526414E-02) + ); +#4268 = CARTESIAN_POINT('',(-2.271388648446E-02,0.56,2.260782185748E-02) + ); +#4269 = CARTESIAN_POINT('',(-2.271388648446E-02,0.55,2.260782185748E-02) + ); +#4270 = CARTESIAN_POINT('',(-1.942339862467E-02,0.56,3.210514781353E-02) + ); +#4271 = CARTESIAN_POINT('',(-1.942339862467E-02,0.55,3.210514781353E-02) + ); +#4272 = CARTESIAN_POINT('',(-1.702463412031E-02,0.56,4.203196176237E-02) + ); +#4273 = CARTESIAN_POINT('',(-1.702463412031E-02,0.55,4.203196176237E-02) + ); +#4274 = CARTESIAN_POINT('',(-1.560667483833E-02,0.56,5.239510890838E-02) + ); +#4275 = CARTESIAN_POINT('',(-1.560667483833E-02,0.55,5.239510890838E-02) + ); +#4276 = CARTESIAN_POINT('',(-1.541412576682E-02,0.56,5.9442926435E-02)); +#4277 = CARTESIAN_POINT('',(-1.541412576682E-02,0.55,5.9442926435E-02)); +#4278 = CARTESIAN_POINT('',(-1.531631674185E-02,0.56,6.302300165938E-02) + ); +#4279 = CARTESIAN_POINT('',(-1.531631674185E-02,0.55,6.302300165938E-02) + ); +#4280 = ADVANCED_FACE('',(#4281),#4292,.T.); +#4281 = FACE_BOUND('',#4282,.T.); +#4282 = EDGE_LOOP('',(#4283,#4284,#4290,#4291)); +#4283 = ORIENTED_EDGE('',*,*,#2761,.F.); +#4284 = ORIENTED_EDGE('',*,*,#4285,.F.); +#4285 = EDGE_CURVE('',#3953,#2754,#4286,.T.); +#4286 = LINE('',#4287,#4288); +#4287 = CARTESIAN_POINT('',(-0.155400451357,0.56,-3.730752718677E-02)); +#4288 = VECTOR('',#4289,1.); +#4289 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4290 = ORIENTED_EDGE('',*,*,#3952,.T.); +#4291 = ORIENTED_EDGE('',*,*,#4234,.T.); +#4292 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4293,#4294) + ,(#4295,#4296) + ,(#4297,#4298) + ,(#4299,#4300) + ,(#4301,#4302 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,4),(2,2),(0.,0.512659336342,1.),( + 0.,1.),.UNSPECIFIED.); +#4293 = CARTESIAN_POINT('',(-0.155400451357,0.56,-3.730752718677E-02)); +#4294 = CARTESIAN_POINT('',(-0.155400451357,0.55,-3.730752718677E-02)); +#4295 = CARTESIAN_POINT('',(-0.149243423659,0.56,-3.828891325213E-02)); +#4296 = CARTESIAN_POINT('',(-0.149243423659,0.55,-3.828891325213E-02)); +#4297 = CARTESIAN_POINT('',(-0.137233444981,0.56,-4.020321773425E-02)); +#4298 = CARTESIAN_POINT('',(-0.137233444981,0.55,-4.020321773425E-02)); +#4299 = CARTESIAN_POINT('',(-0.125076855129,0.56,-4.05190122791E-02)); +#4300 = CARTESIAN_POINT('',(-0.125076855129,0.55,-4.05190122791E-02)); +#4301 = CARTESIAN_POINT('',(-0.119152454562,0.56,-4.067291180216E-02)); +#4302 = CARTESIAN_POINT('',(-0.119152454562,0.55,-4.067291180216E-02)); +#4303 = ADVANCED_FACE('',(#4304),#4315,.T.); +#4304 = FACE_BOUND('',#4305,.T.); +#4305 = EDGE_LOOP('',(#4306,#4307,#4313,#4314)); +#4306 = ORIENTED_EDGE('',*,*,#2753,.F.); +#4307 = ORIENTED_EDGE('',*,*,#4308,.F.); +#4308 = EDGE_CURVE('',#3963,#2746,#4309,.T.); +#4309 = LINE('',#4310,#4311); +#4310 = CARTESIAN_POINT('',(-6.292248661365E-02,0.56,-0.178723793212)); +#4311 = VECTOR('',#4312,1.); +#4312 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4313 = ORIENTED_EDGE('',*,*,#3962,.T.); +#4314 = ORIENTED_EDGE('',*,*,#4285,.T.); +#4315 = PLANE('',#4316); +#4316 = AXIS2_PLACEMENT_3D('',#4317,#4318,#4319); +#4317 = CARTESIAN_POINT('',(-6.292248661365E-02,0.56,-0.178723793212)); +#4318 = DIRECTION('',(0.836933063028,-3.148192280338E-31,0.547305260354) + ); +#4319 = DIRECTION('',(0.547305260354,2.189528850508E-47,-0.836933063028) + ); +#4320 = ADVANCED_FACE('',(#4321),#4327,.T.); +#4321 = FACE_BOUND('',#4322,.T.); +#4322 = EDGE_LOOP('',(#4323,#4324,#4325,#4326)); +#4323 = ORIENTED_EDGE('',*,*,#2745,.F.); +#4324 = ORIENTED_EDGE('',*,*,#4090,.F.); +#4325 = ORIENTED_EDGE('',*,*,#3970,.T.); +#4326 = ORIENTED_EDGE('',*,*,#4308,.T.); +#4327 = PLANE('',#4328); +#4328 = AXIS2_PLACEMENT_3D('',#4329,#4330,#4331); +#4329 = CARTESIAN_POINT('',(-8.711118853673E-02,0.56,-0.197724193853)); +#4330 = DIRECTION('',(0.617720878794,-2.323607690903E-31,-0.786397428723 + )); +#4331 = DIRECTION('',(-0.786397428723,0.,-0.617720878794)); +#4332 = ADVANCED_FACE('',(#4333),#4374,.T.); +#4333 = FACE_BOUND('',#4334,.T.); +#4334 = EDGE_LOOP('',(#4335,#4361,#4367,#4368)); +#4335 = ORIENTED_EDGE('',*,*,#4336,.F.); +#4336 = EDGE_CURVE('',#4337,#4339,#4341,.T.); +#4337 = VERTEX_POINT('',#4338); +#4338 = CARTESIAN_POINT('',(-4.672657315211E-02,0.55,6.491603050553E-02) + ); +#4339 = VERTEX_POINT('',#4340); +#4340 = CARTESIAN_POINT('',(-0.125742999434,0.55,-4.775475904722E-03)); +#4341 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4342,#4343,#4344,#4345,#4346, + #4347,#4348,#4349,#4350,#4351,#4352,#4353,#4354,#4355,#4356,#4357, + #4358,#4359,#4360),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.113791491562E-02,0.119993843851,0.178225321508, + 0.236256420262,0.294929376955,0.35471574881,0.416729663924, + 0.480664408471,0.545831770211,0.609758105426,0.672971228474, + 0.736016869168,0.799839398192,0.864775356666,0.931087623273,1.), + .UNSPECIFIED.); +#4342 = CARTESIAN_POINT('',(-4.672657315211E-02,0.55,6.491603050553E-02) + ); +#4343 = CARTESIAN_POINT('',(-4.678160245161E-02,0.55,6.252657541381E-02) + ); +#4344 = CARTESIAN_POINT('',(-4.688960707003E-02,0.55,5.783685216169E-02) + ); +#4345 = CARTESIAN_POINT('',(-4.811120192819E-02,0.55,5.096809033808E-02) + ); +#4346 = CARTESIAN_POINT('',(-4.980543931421E-02,0.55,4.433556971592E-02) + ); +#4347 = CARTESIAN_POINT('',(-5.236374238518E-02,0.55,3.798097481259E-02) + ); +#4348 = CARTESIAN_POINT('',(-5.568739685922E-02,0.55,3.192938208853E-02) + ); +#4349 = CARTESIAN_POINT('',(-5.97357375623E-02,0.55,2.615022199688E-02) + ); +#4350 = CARTESIAN_POINT('',(-6.441899459334E-02,0.55,2.059918726654E-02) + ); +#4351 = CARTESIAN_POINT('',(-6.982874855266E-02,0.55,1.544290642903E-02) + ); +#4352 = CARTESIAN_POINT('',(-7.571777194776E-02,0.55,1.072819863532E-02) + ); +#4353 = CARTESIAN_POINT('',(-8.197933048506E-02,0.55,6.566242995512E-03) + ); +#4354 = CARTESIAN_POINT('',(-8.85301278549E-02,0.55,3.05374532848E-03)); +#4355 = CARTESIAN_POINT('',(-9.536352209922E-02,0.55,1.230351018118E-04) + ); +#4356 = CARTESIAN_POINT('',(-0.102557810364,0.55,-1.991912311346E-03)); +#4357 = CARTESIAN_POINT('',(-0.109996844283,0.55,-3.657236618179E-03)); +#4358 = CARTESIAN_POINT('',(-0.117775768547,0.55,-4.543438390761E-03)); +#4359 = CARTESIAN_POINT('',(-0.123053429379,0.55,-4.697144906395E-03)); +#4360 = CARTESIAN_POINT('',(-0.125742999434,0.55,-4.775475904722E-03)); +#4361 = ORIENTED_EDGE('',*,*,#4362,.F.); +#4362 = EDGE_CURVE('',#4005,#4337,#4363,.T.); +#4363 = LINE('',#4364,#4365); +#4364 = CARTESIAN_POINT('',(-4.672657315211E-02,0.56,6.491603050553E-02) + ); +#4365 = VECTOR('',#4366,1.); +#4366 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4367 = ORIENTED_EDGE('',*,*,#4004,.T.); +#4368 = ORIENTED_EDGE('',*,*,#4369,.T.); +#4369 = EDGE_CURVE('',#3979,#4339,#4370,.T.); +#4370 = LINE('',#4371,#4372); +#4371 = CARTESIAN_POINT('',(-0.125742999434,0.56,-4.775475904722E-03)); +#4372 = VECTOR('',#4373,1.); +#4373 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4374 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4375,#4376) + ,(#4377,#4378) + ,(#4379,#4380) + ,(#4381,#4382) + ,(#4383,#4384) + ,(#4385,#4386) + ,(#4387,#4388) + ,(#4389,#4390) + ,(#4391,#4392) + ,(#4393,#4394) + ,(#4395,#4396) + ,(#4397,#4398) + ,(#4399,#4400) + ,(#4401,#4402) + ,(#4403,#4404) + ,(#4405,#4406) + ,(#4407,#4408) + ,(#4409,#4410) + ,(#4411,#4412 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.113791491562E-02,0.119993843851,0.178225321508, + 0.236256420262,0.294929376955,0.35471574881,0.416729663924, + 0.480664408471,0.545831770211,0.609758105426,0.672971228474, + 0.736016869168,0.799839398192,0.864775356666,0.931087623273,1.),(0., + 1.),.UNSPECIFIED.); +#4375 = CARTESIAN_POINT('',(-4.672657315211E-02,0.56,6.491603050553E-02) + ); +#4376 = CARTESIAN_POINT('',(-4.672657315211E-02,0.55,6.491603050553E-02) + ); +#4377 = CARTESIAN_POINT('',(-4.678160245161E-02,0.56,6.252657541381E-02) + ); +#4378 = CARTESIAN_POINT('',(-4.678160245161E-02,0.55,6.252657541381E-02) + ); +#4379 = CARTESIAN_POINT('',(-4.688960707003E-02,0.56,5.783685216169E-02) + ); +#4380 = CARTESIAN_POINT('',(-4.688960707003E-02,0.55,5.783685216169E-02) + ); +#4381 = CARTESIAN_POINT('',(-4.811120192819E-02,0.56,5.096809033808E-02) + ); +#4382 = CARTESIAN_POINT('',(-4.811120192819E-02,0.55,5.096809033808E-02) + ); +#4383 = CARTESIAN_POINT('',(-4.980543931421E-02,0.56,4.433556971592E-02) + ); +#4384 = CARTESIAN_POINT('',(-4.980543931421E-02,0.55,4.433556971592E-02) + ); +#4385 = CARTESIAN_POINT('',(-5.236374238518E-02,0.56,3.798097481259E-02) + ); +#4386 = CARTESIAN_POINT('',(-5.236374238518E-02,0.55,3.798097481259E-02) + ); +#4387 = CARTESIAN_POINT('',(-5.568739685922E-02,0.56,3.192938208853E-02) + ); +#4388 = CARTESIAN_POINT('',(-5.568739685922E-02,0.55,3.192938208853E-02) + ); +#4389 = CARTESIAN_POINT('',(-5.97357375623E-02,0.56,2.615022199688E-02) + ); +#4390 = CARTESIAN_POINT('',(-5.97357375623E-02,0.55,2.615022199688E-02) + ); +#4391 = CARTESIAN_POINT('',(-6.441899459334E-02,0.56,2.059918726654E-02) + ); +#4392 = CARTESIAN_POINT('',(-6.441899459334E-02,0.55,2.059918726654E-02) + ); +#4393 = CARTESIAN_POINT('',(-6.982874855266E-02,0.56,1.544290642903E-02) + ); +#4394 = CARTESIAN_POINT('',(-6.982874855266E-02,0.55,1.544290642903E-02) + ); +#4395 = CARTESIAN_POINT('',(-7.571777194776E-02,0.56,1.072819863532E-02) + ); +#4396 = CARTESIAN_POINT('',(-7.571777194776E-02,0.55,1.072819863532E-02) + ); +#4397 = CARTESIAN_POINT('',(-8.197933048506E-02,0.56,6.566242995512E-03) + ); +#4398 = CARTESIAN_POINT('',(-8.197933048506E-02,0.55,6.566242995512E-03) + ); +#4399 = CARTESIAN_POINT('',(-8.85301278549E-02,0.56,3.05374532848E-03)); +#4400 = CARTESIAN_POINT('',(-8.85301278549E-02,0.55,3.05374532848E-03)); +#4401 = CARTESIAN_POINT('',(-9.536352209922E-02,0.56,1.230351018118E-04) + ); +#4402 = CARTESIAN_POINT('',(-9.536352209922E-02,0.55,1.230351018118E-04) + ); +#4403 = CARTESIAN_POINT('',(-0.102557810364,0.56,-1.991912311346E-03)); +#4404 = CARTESIAN_POINT('',(-0.102557810364,0.55,-1.991912311346E-03)); +#4405 = CARTESIAN_POINT('',(-0.109996844283,0.56,-3.657236618179E-03)); +#4406 = CARTESIAN_POINT('',(-0.109996844283,0.55,-3.657236618179E-03)); +#4407 = CARTESIAN_POINT('',(-0.117775768547,0.56,-4.543438390761E-03)); +#4408 = CARTESIAN_POINT('',(-0.117775768547,0.55,-4.543438390761E-03)); +#4409 = CARTESIAN_POINT('',(-0.123053429379,0.56,-4.697144906395E-03)); +#4410 = CARTESIAN_POINT('',(-0.123053429379,0.55,-4.697144906395E-03)); +#4411 = CARTESIAN_POINT('',(-0.125742999434,0.56,-4.775475904722E-03)); +#4412 = CARTESIAN_POINT('',(-0.125742999434,0.55,-4.775475904722E-03)); +#4413 = ADVANCED_FACE('',(#4414),#4448,.T.); +#4414 = FACE_BOUND('',#4415,.T.); +#4415 = EDGE_LOOP('',(#4416,#4440,#4441,#4442)); +#4416 = ORIENTED_EDGE('',*,*,#4417,.F.); +#4417 = EDGE_CURVE('',#4339,#4418,#4420,.T.); +#4418 = VERTEX_POINT('',#4419); +#4419 = CARTESIAN_POINT('',(-0.199290675716,0.55,6.491603050553E-02)); +#4420 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4421,#4422,#4423,#4424,#4425, + #4426,#4427,#4428,#4429,#4430,#4431,#4432,#4433,#4434,#4435,#4436, + #4437,#4438,#4439),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,7.059928943359E-02,0.137900921004,0.20319619781, + 0.26678972465,0.329106387221,0.390653545235,0.452653056934, + 0.5157480403,0.5779263408,0.638930011618,0.698350717642, + 0.757296037444,0.81639376735,0.876266909614,0.936817108906,1.), + .UNSPECIFIED.); +#4421 = CARTESIAN_POINT('',(-0.125742999434,0.55,-4.775475904722E-03)); +#4422 = CARTESIAN_POINT('',(-0.128409223917,0.55,-4.697671536463E-03)); +#4423 = CARTESIAN_POINT('',(-0.133617134858,0.55,-4.545697003474E-03)); +#4424 = CARTESIAN_POINT('',(-0.14125787633,0.55,-3.663171810976E-03)); +#4425 = CARTESIAN_POINT('',(-0.148489201475,0.55,-2.001265252898E-03)); +#4426 = CARTESIAN_POINT('',(-0.15540691484,0.55,1.153679433595E-04)); +#4427 = CARTESIAN_POINT('',(-0.16188168513,0.55,3.025673914924E-03)); +#4428 = CARTESIAN_POINT('',(-0.167960569115,0.55,6.560853810438E-03)); +#4429 = CARTESIAN_POINT('',(-0.173667074304,0.55,1.072297162511E-02)); +#4430 = CARTESIAN_POINT('',(-0.178941429477,0.55,1.545306273547E-02)); +#4431 = CARTESIAN_POINT('',(-0.183723395812,0.55,2.063186603418E-02)); +#4432 = CARTESIAN_POINT('',(-0.187841508889,0.55,2.617881825178E-02)); +#4433 = CARTESIAN_POINT('',(-0.191393748898,0.55,3.196023856236E-02)); +#4434 = CARTESIAN_POINT('',(-0.194281930786,0.55,3.802443278205E-02)); +#4435 = CARTESIAN_POINT('',(-0.196530938363,0.55,4.4369082741E-02)); +#4436 = CARTESIAN_POINT('',(-0.19815776345,0.55,5.096500767918E-02)); +#4437 = CARTESIAN_POINT('',(-0.199063138572,0.55,5.78564382918E-02)); +#4438 = CARTESIAN_POINT('',(-0.199213761723,0.55,6.252968856475E-02)); +#4439 = CARTESIAN_POINT('',(-0.199290675716,0.55,6.491603050553E-02)); +#4440 = ORIENTED_EDGE('',*,*,#4369,.F.); +#4441 = ORIENTED_EDGE('',*,*,#3978,.T.); +#4442 = ORIENTED_EDGE('',*,*,#4443,.T.); +#4443 = EDGE_CURVE('',#3981,#4418,#4444,.T.); +#4444 = LINE('',#4445,#4446); +#4445 = CARTESIAN_POINT('',(-0.199290675716,0.56,6.491603050553E-02)); +#4446 = VECTOR('',#4447,1.); +#4447 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4448 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4449,#4450) + ,(#4451,#4452) + ,(#4453,#4454) + ,(#4455,#4456) + ,(#4457,#4458) + ,(#4459,#4460) + ,(#4461,#4462) + ,(#4463,#4464) + ,(#4465,#4466) + ,(#4467,#4468) + ,(#4469,#4470) + ,(#4471,#4472) + ,(#4473,#4474) + ,(#4475,#4476) + ,(#4477,#4478) + ,(#4479,#4480) + ,(#4481,#4482) + ,(#4483,#4484) + ,(#4485,#4486 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,7.059928943359E-02,0.137900921004,0.20319619781,0.26678972465 + ,0.329106387221,0.390653545235,0.452653056934,0.5157480403, + 0.5779263408,0.638930011618,0.698350717642,0.757296037444, + 0.81639376735,0.876266909614,0.936817108906,1.),(0.,1.), + .UNSPECIFIED.); +#4449 = CARTESIAN_POINT('',(-0.125742999434,0.56,-4.775475904722E-03)); +#4450 = CARTESIAN_POINT('',(-0.125742999434,0.55,-4.775475904722E-03)); +#4451 = CARTESIAN_POINT('',(-0.128409223917,0.56,-4.697671536463E-03)); +#4452 = CARTESIAN_POINT('',(-0.128409223917,0.55,-4.697671536463E-03)); +#4453 = CARTESIAN_POINT('',(-0.133617134858,0.56,-4.545697003474E-03)); +#4454 = CARTESIAN_POINT('',(-0.133617134858,0.55,-4.545697003474E-03)); +#4455 = CARTESIAN_POINT('',(-0.14125787633,0.56,-3.663171810976E-03)); +#4456 = CARTESIAN_POINT('',(-0.14125787633,0.55,-3.663171810976E-03)); +#4457 = CARTESIAN_POINT('',(-0.148489201475,0.56,-2.001265252898E-03)); +#4458 = CARTESIAN_POINT('',(-0.148489201475,0.55,-2.001265252898E-03)); +#4459 = CARTESIAN_POINT('',(-0.15540691484,0.56,1.153679433595E-04)); +#4460 = CARTESIAN_POINT('',(-0.15540691484,0.55,1.153679433595E-04)); +#4461 = CARTESIAN_POINT('',(-0.16188168513,0.56,3.025673914924E-03)); +#4462 = CARTESIAN_POINT('',(-0.16188168513,0.55,3.025673914924E-03)); +#4463 = CARTESIAN_POINT('',(-0.167960569115,0.56,6.560853810438E-03)); +#4464 = CARTESIAN_POINT('',(-0.167960569115,0.55,6.560853810438E-03)); +#4465 = CARTESIAN_POINT('',(-0.173667074304,0.56,1.072297162511E-02)); +#4466 = CARTESIAN_POINT('',(-0.173667074304,0.55,1.072297162511E-02)); +#4467 = CARTESIAN_POINT('',(-0.178941429477,0.56,1.545306273547E-02)); +#4468 = CARTESIAN_POINT('',(-0.178941429477,0.55,1.545306273547E-02)); +#4469 = CARTESIAN_POINT('',(-0.183723395812,0.56,2.063186603418E-02)); +#4470 = CARTESIAN_POINT('',(-0.183723395812,0.55,2.063186603418E-02)); +#4471 = CARTESIAN_POINT('',(-0.187841508889,0.56,2.617881825178E-02)); +#4472 = CARTESIAN_POINT('',(-0.187841508889,0.55,2.617881825178E-02)); +#4473 = CARTESIAN_POINT('',(-0.191393748898,0.56,3.196023856236E-02)); +#4474 = CARTESIAN_POINT('',(-0.191393748898,0.55,3.196023856236E-02)); +#4475 = CARTESIAN_POINT('',(-0.194281930786,0.56,3.802443278205E-02)); +#4476 = CARTESIAN_POINT('',(-0.194281930786,0.55,3.802443278205E-02)); +#4477 = CARTESIAN_POINT('',(-0.196530938363,0.56,4.4369082741E-02)); +#4478 = CARTESIAN_POINT('',(-0.196530938363,0.55,4.4369082741E-02)); +#4479 = CARTESIAN_POINT('',(-0.19815776345,0.56,5.096500767918E-02)); +#4480 = CARTESIAN_POINT('',(-0.19815776345,0.55,5.096500767918E-02)); +#4481 = CARTESIAN_POINT('',(-0.199063138572,0.56,5.78564382918E-02)); +#4482 = CARTESIAN_POINT('',(-0.199063138572,0.55,5.78564382918E-02)); +#4483 = CARTESIAN_POINT('',(-0.199213761723,0.56,6.252968856475E-02)); +#4484 = CARTESIAN_POINT('',(-0.199213761723,0.55,6.252968856475E-02)); +#4485 = CARTESIAN_POINT('',(-0.199290675716,0.56,6.491603050553E-02)); +#4486 = CARTESIAN_POINT('',(-0.199290675716,0.55,6.491603050553E-02)); +#4487 = ADVANCED_FACE('',(#4488),#4522,.T.); +#4488 = FACE_BOUND('',#4489,.T.); +#4489 = EDGE_LOOP('',(#4490,#4514,#4515,#4516)); +#4490 = ORIENTED_EDGE('',*,*,#4491,.F.); +#4491 = EDGE_CURVE('',#4418,#4492,#4494,.T.); +#4492 = VERTEX_POINT('',#4493); +#4493 = CARTESIAN_POINT('',(-0.123008624434,0.55,0.134327088198)); +#4494 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4495,#4496,#4497,#4498,#4499, + #4500,#4501,#4502,#4503,#4504,#4505,#4506,#4507,#4508,#4509,#4510, + #4511,#4512,#4513),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.184170298391E-02,0.121262373094,0.180745948865, + 0.239230901822,0.298307558788,0.358182797616,0.42035923078, + 0.484792415514,0.549938483767,0.61371827754,0.67668070725, + 0.739154170448,0.80219970324,0.866740177616,0.9320496524,1.), + .UNSPECIFIED.); +#4495 = CARTESIAN_POINT('',(-0.199290675716,0.55,6.491603050553E-02)); +#4496 = CARTESIAN_POINT('',(-0.199228039568,0.55,6.728102849383E-02)); +#4497 = CARTESIAN_POINT('',(-0.199105219407,0.55,7.191843746848E-02)); +#4498 = CARTESIAN_POINT('',(-0.19798998742,0.55,7.875235542542E-02)); +#4499 = CARTESIAN_POINT('',(-0.196286479187,0.55,8.532884626567E-02)); +#4500 = CARTESIAN_POINT('',(-0.193752439601,0.55,9.161400614408E-02)); +#4501 = CARTESIAN_POINT('',(-0.190729750785,0.55,9.770363794731E-02)); +#4502 = CARTESIAN_POINT('',(-0.186739218366,0.55,0.103377166494)); +#4503 = CARTESIAN_POINT('',(-0.182317539783,0.55,0.108979173504)); +#4504 = CARTESIAN_POINT('',(-0.177032146438,0.55,0.114079320646)); +#4505 = CARTESIAN_POINT('',(-0.17135981014,0.55,0.118824983064)); +#4506 = CARTESIAN_POINT('',(-0.165299689889,0.55,0.122973008416)); +#4507 = CARTESIAN_POINT('',(-0.158983693904,0.55,0.126521625756)); +#4508 = CARTESIAN_POINT('',(-0.152326551696,0.55,0.129302735517)); +#4509 = CARTESIAN_POINT('',(-0.145422713299,0.55,0.131585164202)); +#4510 = CARTESIAN_POINT('',(-0.138214657895,0.55,0.133191312128)); +#4511 = CARTESIAN_POINT('',(-0.130697372342,0.55,0.134099364728)); +#4512 = CARTESIAN_POINT('',(-0.12560517854,0.55,0.134250184088)); +#4513 = CARTESIAN_POINT('',(-0.123008624434,0.55,0.134327088198)); +#4514 = ORIENTED_EDGE('',*,*,#4443,.F.); +#4515 = ORIENTED_EDGE('',*,*,#4052,.T.); +#4516 = ORIENTED_EDGE('',*,*,#4517,.T.); +#4517 = EDGE_CURVE('',#4029,#4492,#4518,.T.); +#4518 = LINE('',#4519,#4520); +#4519 = CARTESIAN_POINT('',(-0.123008624434,0.56,0.134327088198)); +#4520 = VECTOR('',#4521,1.); +#4521 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4522 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4523,#4524) + ,(#4525,#4526) + ,(#4527,#4528) + ,(#4529,#4530) + ,(#4531,#4532) + ,(#4533,#4534) + ,(#4535,#4536) + ,(#4537,#4538) + ,(#4539,#4540) + ,(#4541,#4542) + ,(#4543,#4544) + ,(#4545,#4546) + ,(#4547,#4548) + ,(#4549,#4550) + ,(#4551,#4552) + ,(#4553,#4554) + ,(#4555,#4556) + ,(#4557,#4558) + ,(#4559,#4560 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.184170298391E-02,0.121262373094,0.180745948865, + 0.239230901822,0.298307558788,0.358182797616,0.42035923078, + 0.484792415514,0.549938483767,0.61371827754,0.67668070725, + 0.739154170448,0.80219970324,0.866740177616,0.9320496524,1.),(0.,1.) + ,.UNSPECIFIED.); +#4523 = CARTESIAN_POINT('',(-0.199290675716,0.56,6.491603050553E-02)); +#4524 = CARTESIAN_POINT('',(-0.199290675716,0.55,6.491603050553E-02)); +#4525 = CARTESIAN_POINT('',(-0.199228039568,0.56,6.728102849383E-02)); +#4526 = CARTESIAN_POINT('',(-0.199228039568,0.55,6.728102849383E-02)); +#4527 = CARTESIAN_POINT('',(-0.199105219407,0.56,7.191843746848E-02)); +#4528 = CARTESIAN_POINT('',(-0.199105219407,0.55,7.191843746848E-02)); +#4529 = CARTESIAN_POINT('',(-0.19798998742,0.56,7.875235542542E-02)); +#4530 = CARTESIAN_POINT('',(-0.19798998742,0.55,7.875235542542E-02)); +#4531 = CARTESIAN_POINT('',(-0.196286479187,0.56,8.532884626567E-02)); +#4532 = CARTESIAN_POINT('',(-0.196286479187,0.55,8.532884626567E-02)); +#4533 = CARTESIAN_POINT('',(-0.193752439601,0.56,9.161400614408E-02)); +#4534 = CARTESIAN_POINT('',(-0.193752439601,0.55,9.161400614408E-02)); +#4535 = CARTESIAN_POINT('',(-0.190729750785,0.56,9.770363794731E-02)); +#4536 = CARTESIAN_POINT('',(-0.190729750785,0.55,9.770363794731E-02)); +#4537 = CARTESIAN_POINT('',(-0.186739218366,0.56,0.103377166494)); +#4538 = CARTESIAN_POINT('',(-0.186739218366,0.55,0.103377166494)); +#4539 = CARTESIAN_POINT('',(-0.182317539783,0.56,0.108979173504)); +#4540 = CARTESIAN_POINT('',(-0.182317539783,0.55,0.108979173504)); +#4541 = CARTESIAN_POINT('',(-0.177032146438,0.56,0.114079320646)); +#4542 = CARTESIAN_POINT('',(-0.177032146438,0.55,0.114079320646)); +#4543 = CARTESIAN_POINT('',(-0.17135981014,0.56,0.118824983064)); +#4544 = CARTESIAN_POINT('',(-0.17135981014,0.55,0.118824983064)); +#4545 = CARTESIAN_POINT('',(-0.165299689889,0.56,0.122973008416)); +#4546 = CARTESIAN_POINT('',(-0.165299689889,0.55,0.122973008416)); +#4547 = CARTESIAN_POINT('',(-0.158983693904,0.56,0.126521625756)); +#4548 = CARTESIAN_POINT('',(-0.158983693904,0.55,0.126521625756)); +#4549 = CARTESIAN_POINT('',(-0.152326551696,0.56,0.129302735517)); +#4550 = CARTESIAN_POINT('',(-0.152326551696,0.55,0.129302735517)); +#4551 = CARTESIAN_POINT('',(-0.145422713299,0.56,0.131585164202)); +#4552 = CARTESIAN_POINT('',(-0.145422713299,0.55,0.131585164202)); +#4553 = CARTESIAN_POINT('',(-0.138214657895,0.56,0.133191312128)); +#4554 = CARTESIAN_POINT('',(-0.138214657895,0.55,0.133191312128)); +#4555 = CARTESIAN_POINT('',(-0.130697372342,0.56,0.134099364728)); +#4556 = CARTESIAN_POINT('',(-0.130697372342,0.55,0.134099364728)); +#4557 = CARTESIAN_POINT('',(-0.12560517854,0.56,0.134250184088)); +#4558 = CARTESIAN_POINT('',(-0.12560517854,0.55,0.134250184088)); +#4559 = CARTESIAN_POINT('',(-0.123008624434,0.56,0.134327088198)); +#4560 = CARTESIAN_POINT('',(-0.123008624434,0.55,0.134327088198)); +#4561 = ADVANCED_FACE('',(#4562),#4589,.T.); +#4562 = FACE_BOUND('',#4563,.T.); +#4563 = EDGE_LOOP('',(#4564,#4586,#4587,#4588)); +#4564 = ORIENTED_EDGE('',*,*,#4565,.F.); +#4565 = EDGE_CURVE('',#4492,#4337,#4566,.T.); +#4566 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4567,#4568,#4569,#4570,#4571, + #4572,#4573,#4574,#4575,#4576,#4577,#4578,#4579,#4580,#4581,#4582, + #4583,#4584,#4585),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.796237149446E-02,0.133283402868,0.197835297757, + 0.260891986531,0.323376504483,0.386350075469,0.449637731052, + 0.514795326978,0.579239913241,0.641814177758,0.701358564786, + 0.760726765986,0.819222067924,0.878716169385,0.938147354053,1.), + .UNSPECIFIED.); +#4567 = CARTESIAN_POINT('',(-0.123008624434,0.55,0.134327088198)); +#4568 = CARTESIAN_POINT('',(-0.120412074583,0.55,0.134250178058)); +#4569 = CARTESIAN_POINT('',(-0.115319889123,0.55,0.134099346873)); +#4570 = CARTESIAN_POINT('',(-0.1078025431,0.55,0.133191379989)); +#4571 = CARTESIAN_POINT('',(-0.100594711236,0.55,0.131584915195)); +#4572 = CARTESIAN_POINT('',(-9.369006037673E-02,0.55,0.129303638169)); +#4573 = CARTESIAN_POINT('',(-8.703591727014E-02,0.55,0.12651827721)); +#4574 = CARTESIAN_POINT('',(-8.072544511912E-02,0.55,0.122995085236)); +#4575 = CARTESIAN_POINT('',(-7.472263576459E-02,0.55,0.118799473461)); +#4576 = CARTESIAN_POINT('',(-6.904657580986E-02,0.55,0.114087430638)); +#4577 = CARTESIAN_POINT('',(-6.378318197595E-02,0.55,0.108950145443)); +#4578 = CARTESIAN_POINT('',(-5.925545408874E-02,0.55,0.1034271732)); +#4579 = CARTESIAN_POINT('',(-5.538713076463E-02,0.55,9.765778366771E-02) + ); +#4580 = CARTESIAN_POINT('',(-5.224371205784E-02,0.55,9.163799467958E-02) + ); +#4581 = CARTESIAN_POINT('',(-4.973758292609E-02,0.55,8.532504591604E-02) + ); +#4582 = CARTESIAN_POINT('',(-4.802543620699E-02,0.55,7.875337352415E-02) + ); +#4583 = CARTESIAN_POINT('',(-4.691250731458E-02,0.55,7.191817092766E-02) + ); +#4584 = CARTESIAN_POINT('',(-4.678937069052E-02,0.55,6.728093847215E-02) + ); +#4585 = CARTESIAN_POINT('',(-4.672657315211E-02,0.55,6.491603050553E-02) + ); +#4586 = ORIENTED_EDGE('',*,*,#4517,.F.); +#4587 = ORIENTED_EDGE('',*,*,#4028,.T.); +#4588 = ORIENTED_EDGE('',*,*,#4362,.T.); +#4589 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4590,#4591) + ,(#4592,#4593) + ,(#4594,#4595) + ,(#4596,#4597) + ,(#4598,#4599) + ,(#4600,#4601) + ,(#4602,#4603) + ,(#4604,#4605) + ,(#4606,#4607) + ,(#4608,#4609) + ,(#4610,#4611) + ,(#4612,#4613) + ,(#4614,#4615) + ,(#4616,#4617) + ,(#4618,#4619) + ,(#4620,#4621) + ,(#4622,#4623) + ,(#4624,#4625) + ,(#4626,#4627 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.796237149446E-02,0.133283402868,0.197835297757, + 0.260891986531,0.323376504483,0.386350075469,0.449637731052, + 0.514795326978,0.579239913241,0.641814177758,0.701358564786, + 0.760726765986,0.819222067924,0.878716169385,0.938147354053,1.),(0., + 1.),.UNSPECIFIED.); +#4590 = CARTESIAN_POINT('',(-0.123008624434,0.56,0.134327088198)); +#4591 = CARTESIAN_POINT('',(-0.123008624434,0.55,0.134327088198)); +#4592 = CARTESIAN_POINT('',(-0.120412074583,0.56,0.134250178058)); +#4593 = CARTESIAN_POINT('',(-0.120412074583,0.55,0.134250178058)); +#4594 = CARTESIAN_POINT('',(-0.115319889123,0.56,0.134099346873)); +#4595 = CARTESIAN_POINT('',(-0.115319889123,0.55,0.134099346873)); +#4596 = CARTESIAN_POINT('',(-0.1078025431,0.56,0.133191379989)); +#4597 = CARTESIAN_POINT('',(-0.1078025431,0.55,0.133191379989)); +#4598 = CARTESIAN_POINT('',(-0.100594711236,0.56,0.131584915195)); +#4599 = CARTESIAN_POINT('',(-0.100594711236,0.55,0.131584915195)); +#4600 = CARTESIAN_POINT('',(-9.369006037673E-02,0.56,0.129303638169)); +#4601 = CARTESIAN_POINT('',(-9.369006037673E-02,0.55,0.129303638169)); +#4602 = CARTESIAN_POINT('',(-8.703591727014E-02,0.56,0.12651827721)); +#4603 = CARTESIAN_POINT('',(-8.703591727014E-02,0.55,0.12651827721)); +#4604 = CARTESIAN_POINT('',(-8.072544511912E-02,0.56,0.122995085236)); +#4605 = CARTESIAN_POINT('',(-8.072544511912E-02,0.55,0.122995085236)); +#4606 = CARTESIAN_POINT('',(-7.472263576459E-02,0.56,0.118799473461)); +#4607 = CARTESIAN_POINT('',(-7.472263576459E-02,0.55,0.118799473461)); +#4608 = CARTESIAN_POINT('',(-6.904657580986E-02,0.56,0.114087430638)); +#4609 = CARTESIAN_POINT('',(-6.904657580986E-02,0.55,0.114087430638)); +#4610 = CARTESIAN_POINT('',(-6.378318197595E-02,0.56,0.108950145443)); +#4611 = CARTESIAN_POINT('',(-6.378318197595E-02,0.55,0.108950145443)); +#4612 = CARTESIAN_POINT('',(-5.925545408874E-02,0.56,0.1034271732)); +#4613 = CARTESIAN_POINT('',(-5.925545408874E-02,0.55,0.1034271732)); +#4614 = CARTESIAN_POINT('',(-5.538713076463E-02,0.56,9.765778366771E-02) + ); +#4615 = CARTESIAN_POINT('',(-5.538713076463E-02,0.55,9.765778366771E-02) + ); +#4616 = CARTESIAN_POINT('',(-5.224371205784E-02,0.56,9.163799467958E-02) + ); +#4617 = CARTESIAN_POINT('',(-5.224371205784E-02,0.55,9.163799467958E-02) + ); +#4618 = CARTESIAN_POINT('',(-4.973758292609E-02,0.56,8.532504591604E-02) + ); +#4619 = CARTESIAN_POINT('',(-4.973758292609E-02,0.55,8.532504591604E-02) + ); +#4620 = CARTESIAN_POINT('',(-4.802543620699E-02,0.56,7.875337352415E-02) + ); +#4621 = CARTESIAN_POINT('',(-4.802543620699E-02,0.55,7.875337352415E-02) + ); +#4622 = CARTESIAN_POINT('',(-4.691250731458E-02,0.56,7.191817092766E-02) + ); +#4623 = CARTESIAN_POINT('',(-4.691250731458E-02,0.55,7.191817092766E-02) + ); +#4624 = CARTESIAN_POINT('',(-4.678937069052E-02,0.56,6.728093847215E-02) + ); +#4625 = CARTESIAN_POINT('',(-4.678937069052E-02,0.55,6.728093847215E-02) + ); +#4626 = CARTESIAN_POINT('',(-4.672657315211E-02,0.56,6.491603050553E-02) + ); +#4627 = CARTESIAN_POINT('',(-4.672657315211E-02,0.55,6.491603050553E-02) + ); +#4628 = ADVANCED_FACE('',(#4629),#4635,.F.); +#4629 = FACE_BOUND('',#4630,.T.); +#4630 = EDGE_LOOP('',(#4631,#4632,#4633,#4634)); +#4631 = ORIENTED_EDGE('',*,*,#4565,.T.); +#4632 = ORIENTED_EDGE('',*,*,#4336,.T.); +#4633 = ORIENTED_EDGE('',*,*,#4417,.T.); +#4634 = ORIENTED_EDGE('',*,*,#4491,.T.); +#4635 = PLANE('',#4636); +#4636 = AXIS2_PLACEMENT_3D('',#4637,#4638,#4639); +#4637 = CARTESIAN_POINT('',(1.351560977094,0.55,0.4)); +#4638 = DIRECTION('',(-3.761581922631E-31,-1.,-1.019578823125E-46)); +#4639 = DIRECTION('',(1.,-3.761581922631E-31,0.)); +#4640 = ADVANCED_FACE('',(#4641,#4771),#4893,.T.); +#4641 = FACE_BOUND('',#4642,.T.); +#4642 = EDGE_LOOP('',(#4643,#4677,#4709,#4741)); +#4643 = ORIENTED_EDGE('',*,*,#4644,.F.); +#4644 = EDGE_CURVE('',#4645,#4647,#4649,.T.); +#4645 = VERTEX_POINT('',#4646); +#4646 = CARTESIAN_POINT('',(0.13759834672,0.56,0.170224524095)); +#4647 = VERTEX_POINT('',#4648); +#4648 = CARTESIAN_POINT('',(2.058111915558E-02,0.56,-1.360961052011E-02) + ); +#4649 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4650,#4651,#4652,#4653,#4654, + #4655,#4656,#4657,#4658,#4659,#4660,#4661,#4662,#4663,#4664,#4665, + #4666,#4667,#4668,#4669,#4670,#4671,#4672,#4673,#4674,#4675,#4676), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,3.378714634699E-02,6.662165772429E-02,9.928487809597E-02, + 0.131361165043,0.163585187595,0.196103926987,0.228902254324, + 0.262158055905,0.295991222258,0.330217845725,0.365059825892, + 0.40095073734,0.437620382077,0.475707529437,0.515380691625, + 0.556413541493,0.599764829873,0.646424155584,0.696431444518, + 0.749781517802,0.806573306976,0.867435531565,0.931886753251,1.), + .UNSPECIFIED.); +#4650 = CARTESIAN_POINT('',(0.13759834672,0.56,0.170224524095)); +#4651 = CARTESIAN_POINT('',(0.134837935321,0.56,0.170177888549)); +#4652 = CARTESIAN_POINT('',(0.129394942845,0.56,0.170085932356)); +#4653 = CARTESIAN_POINT('',(0.121329700301,0.56,0.169134559207)); +#4654 = CARTESIAN_POINT('',(0.113501455957,0.56,0.167605008886)); +#4655 = CARTESIAN_POINT('',(0.105871580553,0.56,0.165463348476)); +#4656 = CARTESIAN_POINT('',(9.840092904454E-02,0.56,0.162841864845)); +#4657 = CARTESIAN_POINT('',(9.119130037896E-02,0.56,0.159426496485)); +#4658 = CARTESIAN_POINT('',(8.416253200989E-02,0.56,0.155493089589)); +#4659 = CARTESIAN_POINT('',(7.733337640808E-02,0.56,0.151013547445)); +#4660 = CARTESIAN_POINT('',(7.08321603041E-02,0.56,0.145881379132)); +#4661 = CARTESIAN_POINT('',(6.462229977272E-02,0.56,0.140204950264)); +#4662 = CARTESIAN_POINT('',(5.885979786302E-02,0.56,0.133842609134)); +#4663 = CARTESIAN_POINT('',(5.349638830129E-02,0.56,0.126894816823)); +#4664 = CARTESIAN_POINT('',(4.839897948171E-02,0.56,0.11942549259)); +#4665 = CARTESIAN_POINT('',(4.371004214979E-02,0.56,0.111332655285)); +#4666 = CARTESIAN_POINT('',(3.937295674298E-02,0.56,0.102648394236)); +#4667 = CARTESIAN_POINT('',(3.540860767613E-02,0.56,9.331660316894E-02) + ); +#4668 = CARTESIAN_POINT('',(3.189374132464E-02,0.56,8.320111038296E-02) + ); +#4669 = CARTESIAN_POINT('',(2.87889705133E-02,0.56,7.218619253271E-02)); +#4670 = CARTESIAN_POINT('',(2.633755476629E-02,0.56,6.01746289213E-02)); +#4671 = CARTESIAN_POINT('',(2.4239259233E-02,0.56,4.726289221077E-02)); +#4672 = CARTESIAN_POINT('',(2.254682092865E-02,0.56,3.339549917218E-02) + ); +#4673 = CARTESIAN_POINT('',(2.139138839682E-02,0.56,1.856492135349E-02) + ); +#4674 = CARTESIAN_POINT('',(2.067725689324E-02,0.56,2.780400460877E-03) + ); +#4675 = CARTESIAN_POINT('',(2.061374985123E-02,0.56,-8.046576970783E-03) + ); +#4676 = CARTESIAN_POINT('',(2.058111915558E-02,0.56,-1.360961052011E-02) + ); +#4677 = ORIENTED_EDGE('',*,*,#4678,.F.); +#4678 = EDGE_CURVE('',#4679,#4645,#4681,.T.); +#4679 = VERTEX_POINT('',#4680); +#4680 = CARTESIAN_POINT('',(0.258401631976,0.56,-1.360961052011E-02)); +#4681 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4682,#4683,#4684,#4685,#4686, + #4687,#4688,#4689,#4690,#4691,#4692,#4693,#4694,#4695,#4696,#4697, + #4698,#4699,#4700,#4701,#4702,#4703,#4704,#4705,#4706,#4707,#4708), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,6.506328961728E-02,0.126773166467,0.185515763226, + 0.240764679168,0.292979796024,0.34225037278,0.388919286186, + 0.432775664058,0.474628432631,0.514774690638,0.553605893498, + 0.591426406431,0.628028119946,0.66380363411,0.698984336132, + 0.733591489307,0.767628469151,0.801208347787,0.834263839727, + 0.866980694729,0.899719741518,0.932701912499,0.966175883433,1.), + .UNSPECIFIED.); +#4682 = CARTESIAN_POINT('',(0.258401631976,0.56,-1.360961052011E-02)); +#4683 = CARTESIAN_POINT('',(0.258336473522,0.56,-8.257219726017E-03)); +#4684 = CARTESIAN_POINT('',(0.258209514931,0.56,2.171695459866E-03)); +#4685 = CARTESIAN_POINT('',(0.257551644254,0.56,1.742479299185E-02)); +#4686 = CARTESIAN_POINT('',(0.256255781136,0.56,3.18245973217E-02)); +#4687 = CARTESIAN_POINT('',(0.254634782305,0.56,4.540564356757E-02)); +#4688 = CARTESIAN_POINT('',(0.252389686008,0.56,5.811140545087E-02)); +#4689 = CARTESIAN_POINT('',(0.249629169383,0.56,6.998585029766E-02)); +#4690 = CARTESIAN_POINT('',(0.2465641371,0.56,8.10802574642E-02)); +#4691 = CARTESIAN_POINT('',(0.242780657689,0.56,9.13037386252E-02)); +#4692 = CARTESIAN_POINT('',(0.238639586655,0.56,0.100798910912)); +#4693 = CARTESIAN_POINT('',(0.234134067037,0.56,0.109665625745)); +#4694 = CARTESIAN_POINT('',(0.229307084429,0.56,0.117982255013)); +#4695 = CARTESIAN_POINT('',(0.224048209928,0.56,0.125682229706)); +#4696 = CARTESIAN_POINT('',(0.218442868609,0.56,0.132820095413)); +#4697 = CARTESIAN_POINT('',(0.212371089729,0.56,0.139269857678)); +#4698 = CARTESIAN_POINT('',(0.206004031219,0.56,0.145186924874)); +#4699 = CARTESIAN_POINT('',(0.199262789636,0.56,0.150452087621)); +#4700 = CARTESIAN_POINT('',(0.192221634513,0.56,0.155060568084)); +#4701 = CARTESIAN_POINT('',(0.18502572682,0.56,0.159181953123)); +#4702 = CARTESIAN_POINT('',(0.177547388485,0.56,0.162505222628)); +#4703 = CARTESIAN_POINT('',(0.169956093212,0.56,0.165358726726)); +#4704 = CARTESIAN_POINT('',(0.162143256601,0.56,0.167538771914)); +#4705 = CARTESIAN_POINT('',(0.154118617532,0.56,0.169046157467)); +#4706 = CARTESIAN_POINT('',(0.145922993939,0.56,0.170103342312)); +#4707 = CARTESIAN_POINT('',(0.140382837431,0.56,0.1701839903)); +#4708 = CARTESIAN_POINT('',(0.13759834672,0.56,0.170224524095)); +#4709 = ORIENTED_EDGE('',*,*,#4710,.F.); +#4710 = EDGE_CURVE('',#4711,#4679,#4713,.T.); +#4711 = VERTEX_POINT('',#4712); +#4712 = CARTESIAN_POINT('',(0.13759834672,0.56,-0.197724193853)); +#4713 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4714,#4715,#4716,#4717,#4718, + #4719,#4720,#4721,#4722,#4723,#4724,#4725,#4726,#4727,#4728,#4729, + #4730,#4731,#4732,#4733,#4734,#4735,#4736,#4737,#4738,#4739,#4740), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,3.378811616271E-02,6.719393237388E-02,9.986241085683E-02, + 0.132566612126,0.165151173255,0.197913187356,0.231319003567, + 0.265083278267,0.299255308758,0.334398566505,0.369942823509, + 0.4062835607,0.444063819699,0.482997706873,0.523354446613, + 0.565536589604,0.609612924066,0.656390811376,0.705885494936, + 0.758324500262,0.813831782941,0.872794559039,0.93472222954,1.), + .UNSPECIFIED.); +#4714 = CARTESIAN_POINT('',(0.13759834672,0.56,-0.197724193853)); +#4715 = CARTESIAN_POINT('',(0.140381894568,0.56,-0.197675412336)); +#4716 = CARTESIAN_POINT('',(0.145917495458,0.56,-0.197578401245)); +#4717 = CARTESIAN_POINT('',(0.154101532982,0.56,-0.196646006992)); +#4718 = CARTESIAN_POINT('',(0.162096501154,0.56,-0.195098894682)); +#4719 = CARTESIAN_POINT('',(0.169868315024,0.56,-0.192906797224)); +#4720 = CARTESIAN_POINT('',(0.177480813671,0.56,-0.190187229558)); +#4721 = CARTESIAN_POINT('',(0.184874454435,0.56,-0.186778517847)); +#4722 = CARTESIAN_POINT('',(0.1920951626,0.56,-0.182810631113)); +#4723 = CARTESIAN_POINT('',(0.199028191352,0.56,-0.178148243382)); +#4724 = CARTESIAN_POINT('',(0.205749652886,0.56,-0.172950015762)); +#4725 = CARTESIAN_POINT('',(0.212094449183,0.56,-0.167073748882)); +#4726 = CARTESIAN_POINT('',(0.218063157773,0.56,-0.160578776955)); +#4727 = CARTESIAN_POINT('',(0.223730688312,0.56,-0.153534590567)); +#4728 = CARTESIAN_POINT('',(0.228936248032,0.56,-0.145806082083)); +#4729 = CARTESIAN_POINT('',(0.233893591255,0.56,-0.137527671102)); +#4730 = CARTESIAN_POINT('',(0.238330794845,0.56,-0.128554584622)); +#4731 = CARTESIAN_POINT('',(0.242604262363,0.56,-0.119036537838)); +#4732 = CARTESIAN_POINT('',(0.246292961037,0.56,-0.108710171958)); +#4733 = CARTESIAN_POINT('',(0.249619585564,0.56,-9.763369590579E-02)); +#4734 = CARTESIAN_POINT('',(0.252307482422,0.56,-8.567627722045E-02)); +#4735 = CARTESIAN_POINT('',(0.254546409656,0.56,-7.290065269094E-02)); +#4736 = CARTESIAN_POINT('',(0.25628089925,0.56,-5.925990436693E-02)); +#4737 = CARTESIAN_POINT('',(0.257544163458,0.56,-4.478327281575E-02)); +#4738 = CARTESIAN_POINT('',(0.258211471962,0.56,-2.946123375167E-02)); +#4739 = CARTESIAN_POINT('',(0.258337142083,0.56,-1.898544883396E-02)); +#4740 = CARTESIAN_POINT('',(0.258401631976,0.56,-1.360961052011E-02)); +#4741 = ORIENTED_EDGE('',*,*,#4742,.F.); +#4742 = EDGE_CURVE('',#4647,#4711,#4743,.T.); +#4743 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4744,#4745,#4746,#4747,#4748, + #4749,#4750,#4751,#4752,#4753,#4754,#4755,#4756,#4757,#4758,#4759, + #4760,#4761,#4762,#4763,#4764,#4765,#4766,#4767,#4768,#4769,#4770), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + ,4),(0.,6.859462225874E-02,0.133246042443,0.194312586468, + 0.251279223117,0.304513439256,0.354234906653,0.400480588774, + 0.443410754938,0.484014868616,0.523252300773,0.561042372728, + 0.597900239364,0.633518488856,0.66831435117,0.702495671286, + 0.736685353513,0.770293169361,0.803437255019,0.835912951666, + 0.868460245789,0.900846538243,0.933466524631,0.966257575298,1.), + .UNSPECIFIED.); +#4744 = CARTESIAN_POINT('',(2.058111915558E-02,0.56,-1.360961052011E-02) + ); +#4745 = CARTESIAN_POINT('',(2.061392097133E-02,0.56,-1.921934929353E-02) + ); +#4746 = CARTESIAN_POINT('',(2.067763897121E-02,0.56,-3.011634771828E-02) + ); +#4747 = CARTESIAN_POINT('',(2.138648106544E-02,0.56,-4.599481192496E-02) + ); +#4748 = CARTESIAN_POINT('',(2.256401529675E-02,0.56,-6.089084082448E-02) + ); +#4749 = CARTESIAN_POINT('',(2.417775258178E-02,0.56,-7.480514742832E-02) + ); +#4750 = CARTESIAN_POINT('',(2.614155060414E-02,0.56,-8.774132388009E-02) + ); +#4751 = CARTESIAN_POINT('',(2.876309926427E-02,0.56,-9.966479959372E-02) + ); +#4752 = CARTESIAN_POINT('',(3.174437952577E-02,0.56,-0.110630760255)); +#4753 = CARTESIAN_POINT('',(3.519962410682E-02,0.56,-0.120674965103)); +#4754 = CARTESIAN_POINT('',(3.909840300865E-02,0.56,-0.129932735405)); +#4755 = CARTESIAN_POINT('',(4.334182908086E-02,0.56,-0.138575255534)); +#4756 = CARTESIAN_POINT('',(4.809830852322E-02,0.56,-0.146589448768)); +#4757 = CARTESIAN_POINT('',(5.309599981593E-02,0.56,-0.15410322781)); +#4758 = CARTESIAN_POINT('',(5.853720697871E-02,0.56,-0.160993597289)); +#4759 = CARTESIAN_POINT('',(6.426708602543E-02,0.56,-0.167357863541)); +#4760 = CARTESIAN_POINT('',(7.050927365215E-02,0.56,-0.173048938588)); +#4761 = CARTESIAN_POINT('',(7.705157447949E-02,0.56,-0.178233568826)); +#4762 = CARTESIAN_POINT('',(8.395322091866E-02,0.56,-0.182778515993)); +#4763 = CARTESIAN_POINT('',(9.101748753298E-02,0.56,-0.186781789855)); +#4764 = CARTESIAN_POINT('',(9.829299811858E-02,0.56,-0.190201776581)); +#4765 = CARTESIAN_POINT('',(0.105799616408,0.56,-0.192890820167)); +#4766 = CARTESIAN_POINT('',(0.113469872197,0.56,-0.195111904844)); +#4767 = CARTESIAN_POINT('',(0.121330578866,0.56,-0.196630799609)); +#4768 = CARTESIAN_POINT('',(0.12939471526,0.56,-0.197586490458)); +#4769 = CARTESIAN_POINT('',(0.13483785874,0.56,-0.197677857232)); +#4770 = CARTESIAN_POINT('',(0.13759834672,0.56,-0.197724193853)); +#4771 = FACE_BOUND('',#4772,.T.); +#4772 = EDGE_LOOP('',(#4773,#4803,#4831,#4859,#4875)); +#4773 = ORIENTED_EDGE('',*,*,#4774,.F.); +#4774 = EDGE_CURVE('',#4775,#4777,#4779,.T.); +#4775 = VERTEX_POINT('',#4776); +#4776 = CARTESIAN_POINT('',(5.199137556584E-02,0.56,-1.374983487908E-02) + ); +#4777 = VERTEX_POINT('',#4778); +#4778 = CARTESIAN_POINT('',(0.138650029412,0.56,0.134327088198)); +#4779 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4780,#4781,#4782,#4783,#4784, + #4785,#4786,#4787,#4788,#4789,#4790,#4791,#4792,#4793,#4794,#4795, + #4796,#4797,#4798,#4799,#4800,#4801,#4802),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.295106587587E-02, + 0.141583694187,0.205926460171,0.265301357185,0.320597232714, + 0.371816503099,0.418789769709,0.461698728616,0.502133582104, + 0.540804315293,0.578180525328,0.614296865208,0.649678243265, + 0.68429946009,0.718358952772,0.752080864648,0.817652438602, + 0.879722076405,0.939965559731,1.),.UNSPECIFIED.); +#4780 = CARTESIAN_POINT('',(5.199137556584E-02,0.56,-1.374983487908E-02) + ); +#4781 = CARTESIAN_POINT('',(5.200332027259E-02,0.56,-9.074964998696E-03) + ); +#4782 = CARTESIAN_POINT('',(5.202650260293E-02,0.56,-1.960518780212E-06) + ); +#4783 = CARTESIAN_POINT('',(5.263212266065E-02,0.56,1.318236557881E-02) + ); +#4784 = CARTESIAN_POINT('',(5.34571458606E-02,0.56,2.547939846053E-02)); +#4785 = CARTESIAN_POINT('',(5.452127557912E-02,0.56,3.690475210704E-02) + ); +#4786 = CARTESIAN_POINT('',(5.610157043172E-02,0.56,4.741975335802E-02) + ); +#4787 = CARTESIAN_POINT('',(5.787224921349E-02,0.56,5.709672166454E-02) + ); +#4788 = CARTESIAN_POINT('',(6.002705817541E-02,0.56,6.588444537592E-02) + ); +#4789 = CARTESIAN_POINT('',(6.257655996211E-02,0.56,7.384322644637E-02) + ); +#4790 = CARTESIAN_POINT('',(6.548046965145E-02,0.56,8.110813329591E-02) + ); +#4791 = CARTESIAN_POINT('',(6.865105601846E-02,0.56,8.786825480864E-02) + ); +#4792 = CARTESIAN_POINT('',(7.205712830895E-02,0.56,9.420344845222E-02) + ); +#4793 = CARTESIAN_POINT('',(7.586904336425E-02,0.56,0.10005680929)); +#4794 = CARTESIAN_POINT('',(8.002054968715E-02,0.56,0.105447425697)); +#4795 = CARTESIAN_POINT('',(8.44178756009E-02,0.56,0.110470708929)); +#4796 = CARTESIAN_POINT('',(8.922513402511E-02,0.56,0.114950407063)); +#4797 = CARTESIAN_POINT('',(9.587550827943E-02,0.56,0.120323092566)); +#4798 = CARTESIAN_POINT('',(0.104655155722,0.56,0.125875005939)); +#4799 = CARTESIAN_POINT('',(0.115717201245,0.56,0.130709614922)); +#4800 = CARTESIAN_POINT('',(0.127084046343,0.56,0.133747860565)); +#4801 = CARTESIAN_POINT('',(0.134799171352,0.56,0.134134236161)); +#4802 = CARTESIAN_POINT('',(0.138650029412,0.56,0.134327088198)); +#4803 = ORIENTED_EDGE('',*,*,#4804,.F.); +#4804 = EDGE_CURVE('',#4805,#4775,#4807,.T.); +#4805 = VERTEX_POINT('',#4806); +#4806 = CARTESIAN_POINT('',(0.138650029412,0.56,-0.161826757956)); +#4807 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4808,#4809,#4810,#4811,#4812, + #4813,#4814,#4815,#4816,#4817,#4818,#4819,#4820,#4821,#4822,#4823, + #4824,#4825,#4826,#4827,#4828,#4829,#4830),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.038661931106E-02, + 0.120883248586,0.182754618625,0.247811029758,0.281299100043, + 0.315087624151,0.34970239555,0.384856581119,0.420966197226, + 0.458511188261,0.497174722127,0.537602047866,0.58050301842, + 0.627467540027,0.678388209559,0.733983220593,0.793746704551, + 0.857713672161,0.926697864361,1.),.UNSPECIFIED.); +#4808 = CARTESIAN_POINT('',(0.138650029412,0.56,-0.161826757956)); +#4809 = CARTESIAN_POINT('',(0.134778970203,0.56,-0.161623613291)); +#4810 = CARTESIAN_POINT('',(0.127029799643,0.56,-0.161216953881)); +#4811 = CARTESIAN_POINT('',(0.11558500417,0.56,-0.158347628522)); +#4812 = CARTESIAN_POINT('',(0.104614569006,0.56,-0.153346331928)); +#4813 = CARTESIAN_POINT('',(9.589027153801E-02,0.56,-0.147851094681)); +#4814 = CARTESIAN_POINT('',(8.920389288725E-02,0.56,-0.142617263537)); +#4815 = CARTESIAN_POINT('',(8.449562354957E-02,0.56,-0.138078618131)); +#4816 = CARTESIAN_POINT('',(8.008100632781E-02,0.56,-0.133113992695)); +#4817 = CARTESIAN_POINT('',(7.601423631404E-02,0.56,-0.12767380121)); +#4818 = CARTESIAN_POINT('',(7.220530799481E-02,0.56,-0.121827264478)); +#4819 = CARTESIAN_POINT('',(6.870720673724E-02,0.56,-0.115528388005)); +#4820 = CARTESIAN_POINT('',(6.555547376964E-02,0.56,-0.108745251583)); +#4821 = CARTESIAN_POINT('',(6.264702015162E-02,0.56,-0.101483608041)); +#4822 = CARTESIAN_POINT('',(6.0089741349E-02,0.56,-9.352551359747E-02)); +#4823 = CARTESIAN_POINT('',(5.7980345026E-02,0.56,-8.474861423812E-02)); +#4824 = CARTESIAN_POINT('',(5.603163971401E-02,0.56,-7.51024250592E-02) + ); +#4825 = CARTESIAN_POINT('',(5.465211282396E-02,0.56,-6.453047426469E-02) + ); +#4826 = CARTESIAN_POINT('',(5.342573724778E-02,0.56,-5.310225892776E-02) + ); +#4827 = CARTESIAN_POINT('',(5.263760245256E-02,0.56,-4.077452710483E-02) + ); +#4828 = CARTESIAN_POINT('',(5.202447670564E-02,0.56,-2.756808906459E-02) + ); +#4829 = CARTESIAN_POINT('',(5.200263026936E-02,0.56,-1.844817321433E-02) + ); +#4830 = CARTESIAN_POINT('',(5.199137556584E-02,0.56,-1.374983487908E-02) + ); +#4831 = ORIENTED_EDGE('',*,*,#4832,.F.); +#4832 = EDGE_CURVE('',#4833,#4805,#4835,.T.); +#4833 = VERTEX_POINT('',#4834); +#4834 = CARTESIAN_POINT('',(0.226991375566,0.56,-1.374983487908E-02)); +#4835 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4836,#4837,#4838,#4839,#4840, + #4841,#4842,#4843,#4844,#4845,#4846,#4847,#4848,#4849,#4850,#4851, + #4852,#4853,#4854,#4855,#4856,#4857,#4858),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.568119799064E-02, + 0.128486464174,0.188175130328,0.24510613067,0.299448424529, + 0.350822936009,0.399941680534,0.446671743632,0.491254533373, + 0.53337634427,0.573852754968,0.612526311719,0.649597136445, + 0.685532041554,0.720105786068,0.753837662974,0.818925416047, + 0.88049346165,0.940311333846,1.),.UNSPECIFIED.); +#4836 = CARTESIAN_POINT('',(0.226991375566,0.56,-1.374983487908E-02)); +#4837 = CARTESIAN_POINT('',(0.226936356643,0.56,-1.795659213089E-02)); +#4838 = CARTESIAN_POINT('',(0.226828727867,0.56,-2.618590860894E-02)); +#4839 = CARTESIAN_POINT('',(0.226417329097,0.56,-3.823772667516E-02)); +#4840 = CARTESIAN_POINT('',(0.225354971648,0.56,-4.968450276607E-02)); +#4841 = CARTESIAN_POINT('',(0.224175059761,0.56,-6.05755500325E-02)); +#4842 = CARTESIAN_POINT('',(0.222435337652,0.56,-7.085058030295E-02)); +#4843 = CARTESIAN_POINT('',(0.220559556964,0.56,-8.059561082858E-02)); +#4844 = CARTESIAN_POINT('',(0.218039435735,0.56,-8.968991331052E-02)); +#4845 = CARTESIAN_POINT('',(0.215347458238,0.56,-9.827587148168E-02)); +#4846 = CARTESIAN_POINT('',(0.212266418684,0.56,-0.106255936932)); +#4847 = CARTESIAN_POINT('',(0.208874845259,0.56,-0.113667315568)); +#4848 = CARTESIAN_POINT('',(0.205252669382,0.56,-0.120545788044)); +#4849 = CARTESIAN_POINT('',(0.201318445336,0.56,-0.126872482201)); +#4850 = CARTESIAN_POINT('',(0.197118877029,0.56,-0.132675736492)); +#4851 = CARTESIAN_POINT('',(0.19254312211,0.56,-0.137839195948)); +#4852 = CARTESIAN_POINT('',(0.187772684828,0.56,-0.142522892759)); +#4853 = CARTESIAN_POINT('',(0.181090966246,0.56,-0.147869149671)); +#4854 = CARTESIAN_POINT('',(0.172343537266,0.56,-0.153320319219)); +#4855 = CARTESIAN_POINT('',(0.161458972532,0.56,-0.158336895205)); +#4856 = CARTESIAN_POINT('',(0.150131908107,0.56,-0.161217724468)); +#4857 = CARTESIAN_POINT('',(0.142474562698,0.56,-0.161623893171)); +#4858 = CARTESIAN_POINT('',(0.138650029412,0.56,-0.161826757956)); +#4859 = ORIENTED_EDGE('',*,*,#4860,.F.); +#4860 = EDGE_CURVE('',#4861,#4833,#4863,.T.); +#4861 = VERTEX_POINT('',#4862); +#4862 = CARTESIAN_POINT('',(0.213740173643,0.56,7.424095037733E-02)); +#4863 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4864,#4865,#4866,#4867,#4868, + #4869,#4870,#4871,#4872,#4873,#4874),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.110588338595,0.224541754054,0.34250349405, + 0.464324098417,0.590756032702,0.722227475356,0.858842836209,1.), + .UNSPECIFIED.); +#4864 = CARTESIAN_POINT('',(0.213740173643,0.56,7.424095037733E-02)); +#4865 = CARTESIAN_POINT('',(0.214795350422,0.56,7.11179764307E-02)); +#4866 = CARTESIAN_POINT('',(0.216937811805,0.56,6.477700000635E-02)); +#4867 = CARTESIAN_POINT('',(0.219698989232,0.56,5.49406347983E-02)); +#4868 = CARTESIAN_POINT('',(0.221873529153,0.56,4.462035840451E-02)); +#4869 = CARTESIAN_POINT('',(0.223829865728,0.56,3.387784673266E-02)); +#4870 = CARTESIAN_POINT('',(0.225165171318,0.56,2.263387663156E-02)); +#4871 = CARTESIAN_POINT('',(0.226239952646,0.56,1.092323823999E-02)); +#4872 = CARTESIAN_POINT('',(0.22687302134,0.56,-1.262897983555E-03)); +#4873 = CARTESIAN_POINT('',(0.226951496447,0.56,-9.54239710308E-03)); +#4874 = CARTESIAN_POINT('',(0.226991375566,0.56,-1.374983487908E-02)); +#4875 = ORIENTED_EDGE('',*,*,#4876,.F.); +#4876 = EDGE_CURVE('',#4777,#4861,#4877,.T.); +#4877 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4878,#4879,#4880,#4881,#4882, + #4883,#4884,#4885,#4886,#4887,#4888,#4889,#4890,#4891,#4892), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0.,0.112813400744, + 0.225393883921,0.339594814563,0.459675410225,0.521735190088, + 0.583925838739,0.648174144765,0.713881038113,0.781004454907, + 0.851450927557,0.924050692664,1.),.UNSPECIFIED.); +#4878 = CARTESIAN_POINT('',(0.138650029412,0.56,0.134327088198)); +#4879 = CARTESIAN_POINT('',(0.142525796578,0.56,0.134167310117)); +#4880 = CARTESIAN_POINT('',(0.150269328896,0.56,0.133848083836)); +#4881 = CARTESIAN_POINT('',(0.16158270841,0.56,0.130768210099)); +#4882 = CARTESIAN_POINT('',(0.172565735419,0.56,0.126121256153)); +#4883 = CARTESIAN_POINT('',(0.181172929447,0.56,0.120626505611)); +#4884 = CARTESIAN_POINT('',(0.187721183797,0.56,0.115393672666)); +#4885 = CARTESIAN_POINT('',(0.192412882807,0.56,0.110932207834)); +#4886 = CARTESIAN_POINT('',(0.196719087651,0.56,0.105936621104)); +#4887 = CARTESIAN_POINT('',(0.200803295136,0.56,0.100546691512)); +#4888 = CARTESIAN_POINT('',(0.204549202704,0.56,9.465944309484E-02)); +#4889 = CARTESIAN_POINT('',(0.207955516473,0.56,8.830318556823E-02)); +#4890 = CARTESIAN_POINT('',(0.211063851228,0.56,8.146026777701E-02)); +#4891 = CARTESIAN_POINT('',(0.212834755823,0.56,7.668329386543E-02)); +#4892 = CARTESIAN_POINT('',(0.213740173643,0.56,7.424095037733E-02)); +#4893 = PLANE('',#4894); +#4894 = AXIS2_PLACEMENT_3D('',#4895,#4896,#4897); +#4895 = CARTESIAN_POINT('',(4.11328817936E-02,0.56,0.106108676337)); +#4896 = DIRECTION('',(2.247161780009E-15,1.,-1.330120806929E-13)); +#4897 = DIRECTION('',(0.,1.330120806929E-13,1.)); +#4898 = ADVANCED_FACE('',(#4899),#4915,.T.); +#4899 = FACE_BOUND('',#4900,.T.); +#4900 = EDGE_LOOP('',(#4901,#4902,#4908,#4909)); +#4901 = ORIENTED_EDGE('',*,*,#2455,.F.); +#4902 = ORIENTED_EDGE('',*,*,#4903,.F.); +#4903 = EDGE_CURVE('',#4645,#2424,#4904,.T.); +#4904 = LINE('',#4905,#4906); +#4905 = CARTESIAN_POINT('',(0.13759834672,0.56,0.170224524095)); +#4906 = VECTOR('',#4907,1.); +#4907 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4908 = ORIENTED_EDGE('',*,*,#4644,.T.); +#4909 = ORIENTED_EDGE('',*,*,#4910,.T.); +#4910 = EDGE_CURVE('',#4647,#2456,#4911,.T.); +#4911 = LINE('',#4912,#4913); +#4912 = CARTESIAN_POINT('',(2.058111915558E-02,0.56,-1.360961052011E-02) + ); +#4913 = VECTOR('',#4914,1.); +#4914 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4915 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4916,#4917) + ,(#4918,#4919) + ,(#4920,#4921) + ,(#4922,#4923) + ,(#4924,#4925) + ,(#4926,#4927) + ,(#4928,#4929) + ,(#4930,#4931) + ,(#4932,#4933) + ,(#4934,#4935) + ,(#4936,#4937) + ,(#4938,#4939) + ,(#4940,#4941) + ,(#4942,#4943) + ,(#4944,#4945) + ,(#4946,#4947) + ,(#4948,#4949) + ,(#4950,#4951) + ,(#4952,#4953) + ,(#4954,#4955) + ,(#4956,#4957) + ,(#4958,#4959) + ,(#4960,#4961) + ,(#4962,#4963) + ,(#4964,#4965) + ,(#4966,#4967) + ,(#4968,#4969 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,4),(2,2),(0.,3.378714634699E-02,6.662165772429E-02, + 9.928487809597E-02,0.131361165043,0.163585187595,0.196103926987, + 0.228902254324,0.262158055905,0.295991222258,0.330217845725, + 0.365059825892,0.40095073734,0.437620382077,0.475707529437, + 0.515380691625,0.556413541493,0.599764829873,0.646424155584, + 0.696431444518,0.749781517802,0.806573306976,0.867435531565, + 0.931886753251,1.),(0.,1.),.UNSPECIFIED.); +#4916 = CARTESIAN_POINT('',(0.13759834672,0.56,0.170224524095)); +#4917 = CARTESIAN_POINT('',(0.13759834672,0.55,0.170224524095)); +#4918 = CARTESIAN_POINT('',(0.134837935321,0.56,0.170177888549)); +#4919 = CARTESIAN_POINT('',(0.134837935321,0.55,0.170177888549)); +#4920 = CARTESIAN_POINT('',(0.129394942845,0.56,0.170085932356)); +#4921 = CARTESIAN_POINT('',(0.129394942845,0.55,0.170085932356)); +#4922 = CARTESIAN_POINT('',(0.121329700301,0.56,0.169134559207)); +#4923 = CARTESIAN_POINT('',(0.121329700301,0.55,0.169134559207)); +#4924 = CARTESIAN_POINT('',(0.113501455957,0.56,0.167605008886)); +#4925 = CARTESIAN_POINT('',(0.113501455957,0.55,0.167605008886)); +#4926 = CARTESIAN_POINT('',(0.105871580553,0.56,0.165463348476)); +#4927 = CARTESIAN_POINT('',(0.105871580553,0.55,0.165463348476)); +#4928 = CARTESIAN_POINT('',(9.840092904454E-02,0.56,0.162841864845)); +#4929 = CARTESIAN_POINT('',(9.840092904454E-02,0.55,0.162841864845)); +#4930 = CARTESIAN_POINT('',(9.119130037896E-02,0.56,0.159426496485)); +#4931 = CARTESIAN_POINT('',(9.119130037896E-02,0.55,0.159426496485)); +#4932 = CARTESIAN_POINT('',(8.416253200989E-02,0.56,0.155493089589)); +#4933 = CARTESIAN_POINT('',(8.416253200989E-02,0.55,0.155493089589)); +#4934 = CARTESIAN_POINT('',(7.733337640808E-02,0.56,0.151013547445)); +#4935 = CARTESIAN_POINT('',(7.733337640808E-02,0.55,0.151013547445)); +#4936 = CARTESIAN_POINT('',(7.08321603041E-02,0.56,0.145881379132)); +#4937 = CARTESIAN_POINT('',(7.08321603041E-02,0.55,0.145881379132)); +#4938 = CARTESIAN_POINT('',(6.462229977272E-02,0.56,0.140204950264)); +#4939 = CARTESIAN_POINT('',(6.462229977272E-02,0.55,0.140204950264)); +#4940 = CARTESIAN_POINT('',(5.885979786302E-02,0.56,0.133842609134)); +#4941 = CARTESIAN_POINT('',(5.885979786302E-02,0.55,0.133842609134)); +#4942 = CARTESIAN_POINT('',(5.349638830129E-02,0.56,0.126894816823)); +#4943 = CARTESIAN_POINT('',(5.349638830129E-02,0.55,0.126894816823)); +#4944 = CARTESIAN_POINT('',(4.839897948171E-02,0.56,0.11942549259)); +#4945 = CARTESIAN_POINT('',(4.839897948171E-02,0.55,0.11942549259)); +#4946 = CARTESIAN_POINT('',(4.371004214979E-02,0.56,0.111332655285)); +#4947 = CARTESIAN_POINT('',(4.371004214979E-02,0.55,0.111332655285)); +#4948 = CARTESIAN_POINT('',(3.937295674298E-02,0.56,0.102648394236)); +#4949 = CARTESIAN_POINT('',(3.937295674298E-02,0.55,0.102648394236)); +#4950 = CARTESIAN_POINT('',(3.540860767613E-02,0.56,9.331660316894E-02) + ); +#4951 = CARTESIAN_POINT('',(3.540860767613E-02,0.55,9.331660316894E-02) + ); +#4952 = CARTESIAN_POINT('',(3.189374132464E-02,0.56,8.320111038296E-02) + ); +#4953 = CARTESIAN_POINT('',(3.189374132464E-02,0.55,8.320111038296E-02) + ); +#4954 = CARTESIAN_POINT('',(2.87889705133E-02,0.56,7.218619253271E-02)); +#4955 = CARTESIAN_POINT('',(2.87889705133E-02,0.55,7.218619253271E-02)); +#4956 = CARTESIAN_POINT('',(2.633755476629E-02,0.56,6.01746289213E-02)); +#4957 = CARTESIAN_POINT('',(2.633755476629E-02,0.55,6.01746289213E-02)); +#4958 = CARTESIAN_POINT('',(2.4239259233E-02,0.56,4.726289221077E-02)); +#4959 = CARTESIAN_POINT('',(2.4239259233E-02,0.55,4.726289221077E-02)); +#4960 = CARTESIAN_POINT('',(2.254682092865E-02,0.56,3.339549917218E-02) + ); +#4961 = CARTESIAN_POINT('',(2.254682092865E-02,0.55,3.339549917218E-02) + ); +#4962 = CARTESIAN_POINT('',(2.139138839682E-02,0.56,1.856492135349E-02) + ); +#4963 = CARTESIAN_POINT('',(2.139138839682E-02,0.55,1.856492135349E-02) + ); +#4964 = CARTESIAN_POINT('',(2.067725689324E-02,0.56,2.780400460877E-03) + ); +#4965 = CARTESIAN_POINT('',(2.067725689324E-02,0.55,2.780400460877E-03) + ); +#4966 = CARTESIAN_POINT('',(2.061374985123E-02,0.56,-8.046576970783E-03) + ); +#4967 = CARTESIAN_POINT('',(2.061374985123E-02,0.55,-8.046576970783E-03) + ); +#4968 = CARTESIAN_POINT('',(2.058111915558E-02,0.56,-1.360961052011E-02) + ); +#4969 = CARTESIAN_POINT('',(2.058111915558E-02,0.55,-1.360961052011E-02) + ); +#4970 = ADVANCED_FACE('',(#4971),#4982,.T.); +#4971 = FACE_BOUND('',#4972,.T.); +#4972 = EDGE_LOOP('',(#4973,#4974,#4980,#4981)); +#4973 = ORIENTED_EDGE('',*,*,#2421,.F.); +#4974 = ORIENTED_EDGE('',*,*,#4975,.F.); +#4975 = EDGE_CURVE('',#4679,#2422,#4976,.T.); +#4976 = LINE('',#4977,#4978); +#4977 = CARTESIAN_POINT('',(0.258401631976,0.56,-1.360961052011E-02)); +#4978 = VECTOR('',#4979,1.); +#4979 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#4980 = ORIENTED_EDGE('',*,*,#4678,.T.); +#4981 = ORIENTED_EDGE('',*,*,#4903,.T.); +#4982 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#4983,#4984) + ,(#4985,#4986) + ,(#4987,#4988) + ,(#4989,#4990) + ,(#4991,#4992) + ,(#4993,#4994) + ,(#4995,#4996) + ,(#4997,#4998) + ,(#4999,#5000) + ,(#5001,#5002) + ,(#5003,#5004) + ,(#5005,#5006) + ,(#5007,#5008) + ,(#5009,#5010) + ,(#5011,#5012) + ,(#5013,#5014) + ,(#5015,#5016) + ,(#5017,#5018) + ,(#5019,#5020) + ,(#5021,#5022) + ,(#5023,#5024) + ,(#5025,#5026) + ,(#5027,#5028) + ,(#5029,#5030) + ,(#5031,#5032) + ,(#5033,#5034) + ,(#5035,#5036 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,4),(2,2),(0.,6.506328961728E-02,0.126773166467, + 0.185515763226,0.240764679168,0.292979796024,0.34225037278, + 0.388919286186,0.432775664058,0.474628432631,0.514774690638, + 0.553605893498,0.591426406431,0.628028119946,0.66380363411, + 0.698984336132,0.733591489307,0.767628469151,0.801208347787, + 0.834263839727,0.866980694729,0.899719741518,0.932701912499, + 0.966175883433,1.),(0.,1.),.UNSPECIFIED.); +#4983 = CARTESIAN_POINT('',(0.258401631976,0.56,-1.360961052011E-02)); +#4984 = CARTESIAN_POINT('',(0.258401631976,0.55,-1.360961052011E-02)); +#4985 = CARTESIAN_POINT('',(0.258336473522,0.56,-8.257219726017E-03)); +#4986 = CARTESIAN_POINT('',(0.258336473522,0.55,-8.257219726017E-03)); +#4987 = CARTESIAN_POINT('',(0.258209514931,0.56,2.171695459866E-03)); +#4988 = CARTESIAN_POINT('',(0.258209514931,0.55,2.171695459866E-03)); +#4989 = CARTESIAN_POINT('',(0.257551644254,0.56,1.742479299185E-02)); +#4990 = CARTESIAN_POINT('',(0.257551644254,0.55,1.742479299185E-02)); +#4991 = CARTESIAN_POINT('',(0.256255781136,0.56,3.18245973217E-02)); +#4992 = CARTESIAN_POINT('',(0.256255781136,0.55,3.18245973217E-02)); +#4993 = CARTESIAN_POINT('',(0.254634782305,0.56,4.540564356757E-02)); +#4994 = CARTESIAN_POINT('',(0.254634782305,0.55,4.540564356757E-02)); +#4995 = CARTESIAN_POINT('',(0.252389686008,0.56,5.811140545087E-02)); +#4996 = CARTESIAN_POINT('',(0.252389686008,0.55,5.811140545087E-02)); +#4997 = CARTESIAN_POINT('',(0.249629169383,0.56,6.998585029766E-02)); +#4998 = CARTESIAN_POINT('',(0.249629169383,0.55,6.998585029766E-02)); +#4999 = CARTESIAN_POINT('',(0.2465641371,0.56,8.10802574642E-02)); +#5000 = CARTESIAN_POINT('',(0.2465641371,0.55,8.10802574642E-02)); +#5001 = CARTESIAN_POINT('',(0.242780657689,0.56,9.13037386252E-02)); +#5002 = CARTESIAN_POINT('',(0.242780657689,0.55,9.13037386252E-02)); +#5003 = CARTESIAN_POINT('',(0.238639586655,0.56,0.100798910912)); +#5004 = CARTESIAN_POINT('',(0.238639586655,0.55,0.100798910912)); +#5005 = CARTESIAN_POINT('',(0.234134067037,0.56,0.109665625745)); +#5006 = CARTESIAN_POINT('',(0.234134067037,0.55,0.109665625745)); +#5007 = CARTESIAN_POINT('',(0.229307084429,0.56,0.117982255013)); +#5008 = CARTESIAN_POINT('',(0.229307084429,0.55,0.117982255013)); +#5009 = CARTESIAN_POINT('',(0.224048209928,0.56,0.125682229706)); +#5010 = CARTESIAN_POINT('',(0.224048209928,0.55,0.125682229706)); +#5011 = CARTESIAN_POINT('',(0.218442868609,0.56,0.132820095413)); +#5012 = CARTESIAN_POINT('',(0.218442868609,0.55,0.132820095413)); +#5013 = CARTESIAN_POINT('',(0.212371089729,0.56,0.139269857678)); +#5014 = CARTESIAN_POINT('',(0.212371089729,0.55,0.139269857678)); +#5015 = CARTESIAN_POINT('',(0.206004031219,0.56,0.145186924874)); +#5016 = CARTESIAN_POINT('',(0.206004031219,0.55,0.145186924874)); +#5017 = CARTESIAN_POINT('',(0.199262789636,0.56,0.150452087621)); +#5018 = CARTESIAN_POINT('',(0.199262789636,0.55,0.150452087621)); +#5019 = CARTESIAN_POINT('',(0.192221634513,0.56,0.155060568084)); +#5020 = CARTESIAN_POINT('',(0.192221634513,0.55,0.155060568084)); +#5021 = CARTESIAN_POINT('',(0.18502572682,0.56,0.159181953123)); +#5022 = CARTESIAN_POINT('',(0.18502572682,0.55,0.159181953123)); +#5023 = CARTESIAN_POINT('',(0.177547388485,0.56,0.162505222628)); +#5024 = CARTESIAN_POINT('',(0.177547388485,0.55,0.162505222628)); +#5025 = CARTESIAN_POINT('',(0.169956093212,0.56,0.165358726726)); +#5026 = CARTESIAN_POINT('',(0.169956093212,0.55,0.165358726726)); +#5027 = CARTESIAN_POINT('',(0.162143256601,0.56,0.167538771914)); +#5028 = CARTESIAN_POINT('',(0.162143256601,0.55,0.167538771914)); +#5029 = CARTESIAN_POINT('',(0.154118617532,0.56,0.169046157467)); +#5030 = CARTESIAN_POINT('',(0.154118617532,0.55,0.169046157467)); +#5031 = CARTESIAN_POINT('',(0.145922993939,0.56,0.170103342312)); +#5032 = CARTESIAN_POINT('',(0.145922993939,0.55,0.170103342312)); +#5033 = CARTESIAN_POINT('',(0.140382837431,0.56,0.1701839903)); +#5034 = CARTESIAN_POINT('',(0.140382837431,0.55,0.1701839903)); +#5035 = CARTESIAN_POINT('',(0.13759834672,0.56,0.170224524095)); +#5036 = CARTESIAN_POINT('',(0.13759834672,0.55,0.170224524095)); +#5037 = ADVANCED_FACE('',(#5038),#5049,.T.); +#5038 = FACE_BOUND('',#5039,.T.); +#5039 = EDGE_LOOP('',(#5040,#5041,#5047,#5048)); +#5040 = ORIENTED_EDGE('',*,*,#2519,.F.); +#5041 = ORIENTED_EDGE('',*,*,#5042,.F.); +#5042 = EDGE_CURVE('',#4711,#2488,#5043,.T.); +#5043 = LINE('',#5044,#5045); +#5044 = CARTESIAN_POINT('',(0.13759834672,0.56,-0.197724193853)); +#5045 = VECTOR('',#5046,1.); +#5046 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5047 = ORIENTED_EDGE('',*,*,#4710,.T.); +#5048 = ORIENTED_EDGE('',*,*,#4975,.T.); +#5049 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5050,#5051) + ,(#5052,#5053) + ,(#5054,#5055) + ,(#5056,#5057) + ,(#5058,#5059) + ,(#5060,#5061) + ,(#5062,#5063) + ,(#5064,#5065) + ,(#5066,#5067) + ,(#5068,#5069) + ,(#5070,#5071) + ,(#5072,#5073) + ,(#5074,#5075) + ,(#5076,#5077) + ,(#5078,#5079) + ,(#5080,#5081) + ,(#5082,#5083) + ,(#5084,#5085) + ,(#5086,#5087) + ,(#5088,#5089) + ,(#5090,#5091) + ,(#5092,#5093) + ,(#5094,#5095) + ,(#5096,#5097) + ,(#5098,#5099) + ,(#5100,#5101) + ,(#5102,#5103 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,4),(2,2),(0.,3.378811616271E-02,6.719393237388E-02, + 9.986241085683E-02,0.132566612126,0.165151173255,0.197913187356, + 0.231319003567,0.265083278267,0.299255308758,0.334398566505, + 0.369942823509,0.4062835607,0.444063819699,0.482997706873, + 0.523354446613,0.565536589604,0.609612924066,0.656390811376, + 0.705885494936,0.758324500262,0.813831782941,0.872794559039, + 0.93472222954,1.),(0.,1.),.UNSPECIFIED.); +#5050 = CARTESIAN_POINT('',(0.13759834672,0.56,-0.197724193853)); +#5051 = CARTESIAN_POINT('',(0.13759834672,0.55,-0.197724193853)); +#5052 = CARTESIAN_POINT('',(0.140381894568,0.56,-0.197675412336)); +#5053 = CARTESIAN_POINT('',(0.140381894568,0.55,-0.197675412336)); +#5054 = CARTESIAN_POINT('',(0.145917495458,0.56,-0.197578401245)); +#5055 = CARTESIAN_POINT('',(0.145917495458,0.55,-0.197578401245)); +#5056 = CARTESIAN_POINT('',(0.154101532982,0.56,-0.196646006992)); +#5057 = CARTESIAN_POINT('',(0.154101532982,0.55,-0.196646006992)); +#5058 = CARTESIAN_POINT('',(0.162096501154,0.56,-0.195098894682)); +#5059 = CARTESIAN_POINT('',(0.162096501154,0.55,-0.195098894682)); +#5060 = CARTESIAN_POINT('',(0.169868315024,0.56,-0.192906797224)); +#5061 = CARTESIAN_POINT('',(0.169868315024,0.55,-0.192906797224)); +#5062 = CARTESIAN_POINT('',(0.177480813671,0.56,-0.190187229558)); +#5063 = CARTESIAN_POINT('',(0.177480813671,0.55,-0.190187229558)); +#5064 = CARTESIAN_POINT('',(0.184874454435,0.56,-0.186778517847)); +#5065 = CARTESIAN_POINT('',(0.184874454435,0.55,-0.186778517847)); +#5066 = CARTESIAN_POINT('',(0.1920951626,0.56,-0.182810631113)); +#5067 = CARTESIAN_POINT('',(0.1920951626,0.55,-0.182810631113)); +#5068 = CARTESIAN_POINT('',(0.199028191352,0.56,-0.178148243382)); +#5069 = CARTESIAN_POINT('',(0.199028191352,0.55,-0.178148243382)); +#5070 = CARTESIAN_POINT('',(0.205749652886,0.56,-0.172950015762)); +#5071 = CARTESIAN_POINT('',(0.205749652886,0.55,-0.172950015762)); +#5072 = CARTESIAN_POINT('',(0.212094449183,0.56,-0.167073748882)); +#5073 = CARTESIAN_POINT('',(0.212094449183,0.55,-0.167073748882)); +#5074 = CARTESIAN_POINT('',(0.218063157773,0.56,-0.160578776955)); +#5075 = CARTESIAN_POINT('',(0.218063157773,0.55,-0.160578776955)); +#5076 = CARTESIAN_POINT('',(0.223730688312,0.56,-0.153534590567)); +#5077 = CARTESIAN_POINT('',(0.223730688312,0.55,-0.153534590567)); +#5078 = CARTESIAN_POINT('',(0.228936248032,0.56,-0.145806082083)); +#5079 = CARTESIAN_POINT('',(0.228936248032,0.55,-0.145806082083)); +#5080 = CARTESIAN_POINT('',(0.233893591255,0.56,-0.137527671102)); +#5081 = CARTESIAN_POINT('',(0.233893591255,0.55,-0.137527671102)); +#5082 = CARTESIAN_POINT('',(0.238330794845,0.56,-0.128554584622)); +#5083 = CARTESIAN_POINT('',(0.238330794845,0.55,-0.128554584622)); +#5084 = CARTESIAN_POINT('',(0.242604262363,0.56,-0.119036537838)); +#5085 = CARTESIAN_POINT('',(0.242604262363,0.55,-0.119036537838)); +#5086 = CARTESIAN_POINT('',(0.246292961037,0.56,-0.108710171958)); +#5087 = CARTESIAN_POINT('',(0.246292961037,0.55,-0.108710171958)); +#5088 = CARTESIAN_POINT('',(0.249619585564,0.56,-9.763369590579E-02)); +#5089 = CARTESIAN_POINT('',(0.249619585564,0.55,-9.763369590579E-02)); +#5090 = CARTESIAN_POINT('',(0.252307482422,0.56,-8.567627722045E-02)); +#5091 = CARTESIAN_POINT('',(0.252307482422,0.55,-8.567627722045E-02)); +#5092 = CARTESIAN_POINT('',(0.254546409656,0.56,-7.290065269094E-02)); +#5093 = CARTESIAN_POINT('',(0.254546409656,0.55,-7.290065269094E-02)); +#5094 = CARTESIAN_POINT('',(0.25628089925,0.56,-5.925990436693E-02)); +#5095 = CARTESIAN_POINT('',(0.25628089925,0.55,-5.925990436693E-02)); +#5096 = CARTESIAN_POINT('',(0.257544163458,0.56,-4.478327281575E-02)); +#5097 = CARTESIAN_POINT('',(0.257544163458,0.55,-4.478327281575E-02)); +#5098 = CARTESIAN_POINT('',(0.258211471962,0.56,-2.946123375167E-02)); +#5099 = CARTESIAN_POINT('',(0.258211471962,0.55,-2.946123375167E-02)); +#5100 = CARTESIAN_POINT('',(0.258337142083,0.56,-1.898544883396E-02)); +#5101 = CARTESIAN_POINT('',(0.258337142083,0.55,-1.898544883396E-02)); +#5102 = CARTESIAN_POINT('',(0.258401631976,0.56,-1.360961052011E-02)); +#5103 = CARTESIAN_POINT('',(0.258401631976,0.55,-1.360961052011E-02)); +#5104 = ADVANCED_FACE('',(#5105),#5111,.T.); +#5105 = FACE_BOUND('',#5106,.T.); +#5106 = EDGE_LOOP('',(#5107,#5108,#5109,#5110)); +#5107 = ORIENTED_EDGE('',*,*,#2487,.F.); +#5108 = ORIENTED_EDGE('',*,*,#4910,.F.); +#5109 = ORIENTED_EDGE('',*,*,#4742,.T.); +#5110 = ORIENTED_EDGE('',*,*,#5042,.T.); +#5111 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5112,#5113) + ,(#5114,#5115) + ,(#5116,#5117) + ,(#5118,#5119) + ,(#5120,#5121) + ,(#5122,#5123) + ,(#5124,#5125) + ,(#5126,#5127) + ,(#5128,#5129) + ,(#5130,#5131) + ,(#5132,#5133) + ,(#5134,#5135) + ,(#5136,#5137) + ,(#5138,#5139) + ,(#5140,#5141) + ,(#5142,#5143) + ,(#5144,#5145) + ,(#5146,#5147) + ,(#5148,#5149) + ,(#5150,#5151) + ,(#5152,#5153) + ,(#5154,#5155) + ,(#5156,#5157) + ,(#5158,#5159) + ,(#5160,#5161) + ,(#5162,#5163) + ,(#5164,#5165 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,4),(2,2),(0.,6.859462225874E-02,0.133246042443, + 0.194312586468,0.251279223117,0.304513439256,0.354234906653, + 0.400480588774,0.443410754938,0.484014868616,0.523252300773, + 0.561042372728,0.597900239364,0.633518488856,0.66831435117, + 0.702495671286,0.736685353513,0.770293169361,0.803437255019, + 0.835912951666,0.868460245789,0.900846538243,0.933466524631, + 0.966257575298,1.),(0.,1.),.UNSPECIFIED.); +#5112 = CARTESIAN_POINT('',(2.058111915558E-02,0.56,-1.360961052011E-02) + ); +#5113 = CARTESIAN_POINT('',(2.058111915558E-02,0.55,-1.360961052011E-02) + ); +#5114 = CARTESIAN_POINT('',(2.061392097133E-02,0.56,-1.921934929353E-02) + ); +#5115 = CARTESIAN_POINT('',(2.061392097133E-02,0.55,-1.921934929353E-02) + ); +#5116 = CARTESIAN_POINT('',(2.067763897121E-02,0.56,-3.011634771828E-02) + ); +#5117 = CARTESIAN_POINT('',(2.067763897121E-02,0.55,-3.011634771828E-02) + ); +#5118 = CARTESIAN_POINT('',(2.138648106544E-02,0.56,-4.599481192496E-02) + ); +#5119 = CARTESIAN_POINT('',(2.138648106544E-02,0.55,-4.599481192496E-02) + ); +#5120 = CARTESIAN_POINT('',(2.256401529675E-02,0.56,-6.089084082448E-02) + ); +#5121 = CARTESIAN_POINT('',(2.256401529675E-02,0.55,-6.089084082448E-02) + ); +#5122 = CARTESIAN_POINT('',(2.417775258178E-02,0.56,-7.480514742832E-02) + ); +#5123 = CARTESIAN_POINT('',(2.417775258178E-02,0.55,-7.480514742832E-02) + ); +#5124 = CARTESIAN_POINT('',(2.614155060414E-02,0.56,-8.774132388009E-02) + ); +#5125 = CARTESIAN_POINT('',(2.614155060414E-02,0.55,-8.774132388009E-02) + ); +#5126 = CARTESIAN_POINT('',(2.876309926427E-02,0.56,-9.966479959372E-02) + ); +#5127 = CARTESIAN_POINT('',(2.876309926427E-02,0.55,-9.966479959372E-02) + ); +#5128 = CARTESIAN_POINT('',(3.174437952577E-02,0.56,-0.110630760255)); +#5129 = CARTESIAN_POINT('',(3.174437952577E-02,0.55,-0.110630760255)); +#5130 = CARTESIAN_POINT('',(3.519962410682E-02,0.56,-0.120674965103)); +#5131 = CARTESIAN_POINT('',(3.519962410682E-02,0.55,-0.120674965103)); +#5132 = CARTESIAN_POINT('',(3.909840300865E-02,0.56,-0.129932735405)); +#5133 = CARTESIAN_POINT('',(3.909840300865E-02,0.55,-0.129932735405)); +#5134 = CARTESIAN_POINT('',(4.334182908086E-02,0.56,-0.138575255534)); +#5135 = CARTESIAN_POINT('',(4.334182908086E-02,0.55,-0.138575255534)); +#5136 = CARTESIAN_POINT('',(4.809830852322E-02,0.56,-0.146589448768)); +#5137 = CARTESIAN_POINT('',(4.809830852322E-02,0.55,-0.146589448768)); +#5138 = CARTESIAN_POINT('',(5.309599981593E-02,0.56,-0.15410322781)); +#5139 = CARTESIAN_POINT('',(5.309599981593E-02,0.55,-0.15410322781)); +#5140 = CARTESIAN_POINT('',(5.853720697871E-02,0.56,-0.160993597289)); +#5141 = CARTESIAN_POINT('',(5.853720697871E-02,0.55,-0.160993597289)); +#5142 = CARTESIAN_POINT('',(6.426708602543E-02,0.56,-0.167357863541)); +#5143 = CARTESIAN_POINT('',(6.426708602543E-02,0.55,-0.167357863541)); +#5144 = CARTESIAN_POINT('',(7.050927365215E-02,0.56,-0.173048938588)); +#5145 = CARTESIAN_POINT('',(7.050927365215E-02,0.55,-0.173048938588)); +#5146 = CARTESIAN_POINT('',(7.705157447949E-02,0.56,-0.178233568826)); +#5147 = CARTESIAN_POINT('',(7.705157447949E-02,0.55,-0.178233568826)); +#5148 = CARTESIAN_POINT('',(8.395322091866E-02,0.56,-0.182778515993)); +#5149 = CARTESIAN_POINT('',(8.395322091866E-02,0.55,-0.182778515993)); +#5150 = CARTESIAN_POINT('',(9.101748753298E-02,0.56,-0.186781789855)); +#5151 = CARTESIAN_POINT('',(9.101748753298E-02,0.55,-0.186781789855)); +#5152 = CARTESIAN_POINT('',(9.829299811858E-02,0.56,-0.190201776581)); +#5153 = CARTESIAN_POINT('',(9.829299811858E-02,0.55,-0.190201776581)); +#5154 = CARTESIAN_POINT('',(0.105799616408,0.56,-0.192890820167)); +#5155 = CARTESIAN_POINT('',(0.105799616408,0.55,-0.192890820167)); +#5156 = CARTESIAN_POINT('',(0.113469872197,0.56,-0.195111904844)); +#5157 = CARTESIAN_POINT('',(0.113469872197,0.55,-0.195111904844)); +#5158 = CARTESIAN_POINT('',(0.121330578866,0.56,-0.196630799609)); +#5159 = CARTESIAN_POINT('',(0.121330578866,0.55,-0.196630799609)); +#5160 = CARTESIAN_POINT('',(0.12939471526,0.56,-0.197586490458)); +#5161 = CARTESIAN_POINT('',(0.12939471526,0.55,-0.197586490458)); +#5162 = CARTESIAN_POINT('',(0.13483785874,0.56,-0.197677857232)); +#5163 = CARTESIAN_POINT('',(0.13483785874,0.55,-0.197677857232)); +#5164 = CARTESIAN_POINT('',(0.13759834672,0.56,-0.197724193853)); +#5165 = CARTESIAN_POINT('',(0.13759834672,0.55,-0.197724193853)); +#5166 = ADVANCED_FACE('',(#5167),#5212,.T.); +#5167 = FACE_BOUND('',#5168,.T.); +#5168 = EDGE_LOOP('',(#5169,#5199,#5205,#5206)); +#5169 = ORIENTED_EDGE('',*,*,#5170,.F.); +#5170 = EDGE_CURVE('',#5171,#5173,#5175,.T.); +#5171 = VERTEX_POINT('',#5172); +#5172 = CARTESIAN_POINT('',(0.138650029412,0.55,-0.161826757956)); +#5173 = VERTEX_POINT('',#5174); +#5174 = CARTESIAN_POINT('',(5.199137556584E-02,0.55,-1.374983487908E-02) + ); +#5175 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5176,#5177,#5178,#5179,#5180, + #5181,#5182,#5183,#5184,#5185,#5186,#5187,#5188,#5189,#5190,#5191, + #5192,#5193,#5194,#5195,#5196,#5197,#5198),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.038661931106E-02, + 0.120883248586,0.182754618625,0.247811029758,0.281299100043, + 0.315087624151,0.34970239555,0.384856581119,0.420966197226, + 0.458511188261,0.497174722127,0.537602047866,0.58050301842, + 0.627467540027,0.678388209559,0.733983220593,0.793746704551, + 0.857713672161,0.926697864361,1.),.UNSPECIFIED.); +#5176 = CARTESIAN_POINT('',(0.138650029412,0.55,-0.161826757956)); +#5177 = CARTESIAN_POINT('',(0.134778970203,0.55,-0.161623613291)); +#5178 = CARTESIAN_POINT('',(0.127029799643,0.55,-0.161216953881)); +#5179 = CARTESIAN_POINT('',(0.11558500417,0.55,-0.158347628522)); +#5180 = CARTESIAN_POINT('',(0.104614569006,0.55,-0.153346331928)); +#5181 = CARTESIAN_POINT('',(9.589027153801E-02,0.55,-0.147851094681)); +#5182 = CARTESIAN_POINT('',(8.920389288725E-02,0.55,-0.142617263537)); +#5183 = CARTESIAN_POINT('',(8.449562354957E-02,0.55,-0.138078618131)); +#5184 = CARTESIAN_POINT('',(8.008100632781E-02,0.55,-0.133113992695)); +#5185 = CARTESIAN_POINT('',(7.601423631404E-02,0.55,-0.12767380121)); +#5186 = CARTESIAN_POINT('',(7.220530799481E-02,0.55,-0.121827264478)); +#5187 = CARTESIAN_POINT('',(6.870720673724E-02,0.55,-0.115528388005)); +#5188 = CARTESIAN_POINT('',(6.555547376964E-02,0.55,-0.108745251583)); +#5189 = CARTESIAN_POINT('',(6.264702015162E-02,0.55,-0.101483608041)); +#5190 = CARTESIAN_POINT('',(6.0089741349E-02,0.55,-9.352551359747E-02)); +#5191 = CARTESIAN_POINT('',(5.7980345026E-02,0.55,-8.474861423812E-02)); +#5192 = CARTESIAN_POINT('',(5.603163971401E-02,0.55,-7.51024250592E-02) + ); +#5193 = CARTESIAN_POINT('',(5.465211282396E-02,0.55,-6.453047426469E-02) + ); +#5194 = CARTESIAN_POINT('',(5.342573724778E-02,0.55,-5.310225892776E-02) + ); +#5195 = CARTESIAN_POINT('',(5.263760245256E-02,0.55,-4.077452710483E-02) + ); +#5196 = CARTESIAN_POINT('',(5.202447670564E-02,0.55,-2.756808906459E-02) + ); +#5197 = CARTESIAN_POINT('',(5.200263026936E-02,0.55,-1.844817321433E-02) + ); +#5198 = CARTESIAN_POINT('',(5.199137556584E-02,0.55,-1.374983487908E-02) + ); +#5199 = ORIENTED_EDGE('',*,*,#5200,.F.); +#5200 = EDGE_CURVE('',#4805,#5171,#5201,.T.); +#5201 = LINE('',#5202,#5203); +#5202 = CARTESIAN_POINT('',(0.138650029412,0.56,-0.161826757956)); +#5203 = VECTOR('',#5204,1.); +#5204 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5205 = ORIENTED_EDGE('',*,*,#4804,.T.); +#5206 = ORIENTED_EDGE('',*,*,#5207,.T.); +#5207 = EDGE_CURVE('',#4775,#5173,#5208,.T.); +#5208 = LINE('',#5209,#5210); +#5209 = CARTESIAN_POINT('',(5.199137556584E-02,0.56,-1.374983487908E-02) + ); +#5210 = VECTOR('',#5211,1.); +#5211 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5212 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5213,#5214) + ,(#5215,#5216) + ,(#5217,#5218) + ,(#5219,#5220) + ,(#5221,#5222) + ,(#5223,#5224) + ,(#5225,#5226) + ,(#5227,#5228) + ,(#5229,#5230) + ,(#5231,#5232) + ,(#5233,#5234) + ,(#5235,#5236) + ,(#5237,#5238) + ,(#5239,#5240) + ,(#5241,#5242) + ,(#5243,#5244) + ,(#5245,#5246) + ,(#5247,#5248) + ,(#5249,#5250) + ,(#5251,#5252) + ,(#5253,#5254) + ,(#5255,#5256) + ,(#5257,#5258 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,4),(2,2),(0.,6.038661931106E-02,0.120883248586,0.182754618625, + 0.247811029758,0.281299100043,0.315087624151,0.34970239555, + 0.384856581119,0.420966197226,0.458511188261,0.497174722127, + 0.537602047866,0.58050301842,0.627467540027,0.678388209559, + 0.733983220593,0.793746704551,0.857713672161,0.926697864361,1.),(0., + 1.),.UNSPECIFIED.); +#5213 = CARTESIAN_POINT('',(0.138650029412,0.56,-0.161826757956)); +#5214 = CARTESIAN_POINT('',(0.138650029412,0.55,-0.161826757956)); +#5215 = CARTESIAN_POINT('',(0.134778970203,0.56,-0.161623613291)); +#5216 = CARTESIAN_POINT('',(0.134778970203,0.55,-0.161623613291)); +#5217 = CARTESIAN_POINT('',(0.127029799643,0.56,-0.161216953881)); +#5218 = CARTESIAN_POINT('',(0.127029799643,0.55,-0.161216953881)); +#5219 = CARTESIAN_POINT('',(0.11558500417,0.56,-0.158347628522)); +#5220 = CARTESIAN_POINT('',(0.11558500417,0.55,-0.158347628522)); +#5221 = CARTESIAN_POINT('',(0.104614569006,0.56,-0.153346331928)); +#5222 = CARTESIAN_POINT('',(0.104614569006,0.55,-0.153346331928)); +#5223 = CARTESIAN_POINT('',(9.589027153801E-02,0.56,-0.147851094681)); +#5224 = CARTESIAN_POINT('',(9.589027153801E-02,0.55,-0.147851094681)); +#5225 = CARTESIAN_POINT('',(8.920389288725E-02,0.56,-0.142617263537)); +#5226 = CARTESIAN_POINT('',(8.920389288725E-02,0.55,-0.142617263537)); +#5227 = CARTESIAN_POINT('',(8.449562354957E-02,0.56,-0.138078618131)); +#5228 = CARTESIAN_POINT('',(8.449562354957E-02,0.55,-0.138078618131)); +#5229 = CARTESIAN_POINT('',(8.008100632781E-02,0.56,-0.133113992695)); +#5230 = CARTESIAN_POINT('',(8.008100632781E-02,0.55,-0.133113992695)); +#5231 = CARTESIAN_POINT('',(7.601423631404E-02,0.56,-0.12767380121)); +#5232 = CARTESIAN_POINT('',(7.601423631404E-02,0.55,-0.12767380121)); +#5233 = CARTESIAN_POINT('',(7.220530799481E-02,0.56,-0.121827264478)); +#5234 = CARTESIAN_POINT('',(7.220530799481E-02,0.55,-0.121827264478)); +#5235 = CARTESIAN_POINT('',(6.870720673724E-02,0.56,-0.115528388005)); +#5236 = CARTESIAN_POINT('',(6.870720673724E-02,0.55,-0.115528388005)); +#5237 = CARTESIAN_POINT('',(6.555547376964E-02,0.56,-0.108745251583)); +#5238 = CARTESIAN_POINT('',(6.555547376964E-02,0.55,-0.108745251583)); +#5239 = CARTESIAN_POINT('',(6.264702015162E-02,0.56,-0.101483608041)); +#5240 = CARTESIAN_POINT('',(6.264702015162E-02,0.55,-0.101483608041)); +#5241 = CARTESIAN_POINT('',(6.0089741349E-02,0.56,-9.352551359747E-02)); +#5242 = CARTESIAN_POINT('',(6.0089741349E-02,0.55,-9.352551359747E-02)); +#5243 = CARTESIAN_POINT('',(5.7980345026E-02,0.56,-8.474861423812E-02)); +#5244 = CARTESIAN_POINT('',(5.7980345026E-02,0.55,-8.474861423812E-02)); +#5245 = CARTESIAN_POINT('',(5.603163971401E-02,0.56,-7.51024250592E-02) + ); +#5246 = CARTESIAN_POINT('',(5.603163971401E-02,0.55,-7.51024250592E-02) + ); +#5247 = CARTESIAN_POINT('',(5.465211282396E-02,0.56,-6.453047426469E-02) + ); +#5248 = CARTESIAN_POINT('',(5.465211282396E-02,0.55,-6.453047426469E-02) + ); +#5249 = CARTESIAN_POINT('',(5.342573724778E-02,0.56,-5.310225892776E-02) + ); +#5250 = CARTESIAN_POINT('',(5.342573724778E-02,0.55,-5.310225892776E-02) + ); +#5251 = CARTESIAN_POINT('',(5.263760245256E-02,0.56,-4.077452710483E-02) + ); +#5252 = CARTESIAN_POINT('',(5.263760245256E-02,0.55,-4.077452710483E-02) + ); +#5253 = CARTESIAN_POINT('',(5.202447670564E-02,0.56,-2.756808906459E-02) + ); +#5254 = CARTESIAN_POINT('',(5.202447670564E-02,0.55,-2.756808906459E-02) + ); +#5255 = CARTESIAN_POINT('',(5.200263026936E-02,0.56,-1.844817321433E-02) + ); +#5256 = CARTESIAN_POINT('',(5.200263026936E-02,0.55,-1.844817321433E-02) + ); +#5257 = CARTESIAN_POINT('',(5.199137556584E-02,0.56,-1.374983487908E-02) + ); +#5258 = CARTESIAN_POINT('',(5.199137556584E-02,0.55,-1.374983487908E-02) + ); +#5259 = ADVANCED_FACE('',(#5260),#5298,.T.); +#5260 = FACE_BOUND('',#5261,.T.); +#5261 = EDGE_LOOP('',(#5262,#5290,#5291,#5292)); +#5262 = ORIENTED_EDGE('',*,*,#5263,.F.); +#5263 = EDGE_CURVE('',#5173,#5264,#5266,.T.); +#5264 = VERTEX_POINT('',#5265); +#5265 = CARTESIAN_POINT('',(0.138650029412,0.55,0.134327088198)); +#5266 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5267,#5268,#5269,#5270,#5271, + #5272,#5273,#5274,#5275,#5276,#5277,#5278,#5279,#5280,#5281,#5282, + #5283,#5284,#5285,#5286,#5287,#5288,#5289),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.295106587587E-02, + 0.141583694187,0.205926460171,0.265301357185,0.320597232714, + 0.371816503099,0.418789769709,0.461698728616,0.502133582104, + 0.540804315293,0.578180525328,0.614296865208,0.649678243265, + 0.68429946009,0.718358952772,0.752080864648,0.817652438602, + 0.879722076405,0.939965559731,1.),.UNSPECIFIED.); +#5267 = CARTESIAN_POINT('',(5.199137556584E-02,0.55,-1.374983487908E-02) + ); +#5268 = CARTESIAN_POINT('',(5.200332027259E-02,0.55,-9.074964998696E-03) + ); +#5269 = CARTESIAN_POINT('',(5.202650260293E-02,0.55,-1.960518780212E-06) + ); +#5270 = CARTESIAN_POINT('',(5.263212266065E-02,0.55,1.318236557881E-02) + ); +#5271 = CARTESIAN_POINT('',(5.34571458606E-02,0.55,2.547939846053E-02)); +#5272 = CARTESIAN_POINT('',(5.452127557912E-02,0.55,3.690475210704E-02) + ); +#5273 = CARTESIAN_POINT('',(5.610157043172E-02,0.55,4.741975335802E-02) + ); +#5274 = CARTESIAN_POINT('',(5.787224921349E-02,0.55,5.709672166454E-02) + ); +#5275 = CARTESIAN_POINT('',(6.002705817541E-02,0.55,6.588444537592E-02) + ); +#5276 = CARTESIAN_POINT('',(6.257655996211E-02,0.55,7.384322644637E-02) + ); +#5277 = CARTESIAN_POINT('',(6.548046965145E-02,0.55,8.110813329591E-02) + ); +#5278 = CARTESIAN_POINT('',(6.865105601846E-02,0.55,8.786825480864E-02) + ); +#5279 = CARTESIAN_POINT('',(7.205712830895E-02,0.55,9.420344845222E-02) + ); +#5280 = CARTESIAN_POINT('',(7.586904336425E-02,0.55,0.10005680929)); +#5281 = CARTESIAN_POINT('',(8.002054968715E-02,0.55,0.105447425697)); +#5282 = CARTESIAN_POINT('',(8.44178756009E-02,0.55,0.110470708929)); +#5283 = CARTESIAN_POINT('',(8.922513402511E-02,0.55,0.114950407063)); +#5284 = CARTESIAN_POINT('',(9.587550827943E-02,0.55,0.120323092566)); +#5285 = CARTESIAN_POINT('',(0.104655155722,0.55,0.125875005939)); +#5286 = CARTESIAN_POINT('',(0.115717201245,0.55,0.130709614922)); +#5287 = CARTESIAN_POINT('',(0.127084046343,0.55,0.133747860565)); +#5288 = CARTESIAN_POINT('',(0.134799171352,0.55,0.134134236161)); +#5289 = CARTESIAN_POINT('',(0.138650029412,0.55,0.134327088198)); +#5290 = ORIENTED_EDGE('',*,*,#5207,.F.); +#5291 = ORIENTED_EDGE('',*,*,#4774,.T.); +#5292 = ORIENTED_EDGE('',*,*,#5293,.T.); +#5293 = EDGE_CURVE('',#4777,#5264,#5294,.T.); +#5294 = LINE('',#5295,#5296); +#5295 = CARTESIAN_POINT('',(0.138650029412,0.56,0.134327088198)); +#5296 = VECTOR('',#5297,1.); +#5297 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5298 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5299,#5300) + ,(#5301,#5302) + ,(#5303,#5304) + ,(#5305,#5306) + ,(#5307,#5308) + ,(#5309,#5310) + ,(#5311,#5312) + ,(#5313,#5314) + ,(#5315,#5316) + ,(#5317,#5318) + ,(#5319,#5320) + ,(#5321,#5322) + ,(#5323,#5324) + ,(#5325,#5326) + ,(#5327,#5328) + ,(#5329,#5330) + ,(#5331,#5332) + ,(#5333,#5334) + ,(#5335,#5336) + ,(#5337,#5338) + ,(#5339,#5340) + ,(#5341,#5342) + ,(#5343,#5344 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,4),(2,2),(0.,7.295106587587E-02,0.141583694187,0.205926460171, + 0.265301357185,0.320597232714,0.371816503099,0.418789769709, + 0.461698728616,0.502133582104,0.540804315293,0.578180525328, + 0.614296865208,0.649678243265,0.68429946009,0.718358952772, + 0.752080864648,0.817652438602,0.879722076405,0.939965559731,1.),(0., + 1.),.UNSPECIFIED.); +#5299 = CARTESIAN_POINT('',(5.199137556584E-02,0.56,-1.374983487908E-02) + ); +#5300 = CARTESIAN_POINT('',(5.199137556584E-02,0.55,-1.374983487908E-02) + ); +#5301 = CARTESIAN_POINT('',(5.200332027259E-02,0.56,-9.074964998696E-03) + ); +#5302 = CARTESIAN_POINT('',(5.200332027259E-02,0.55,-9.074964998696E-03) + ); +#5303 = CARTESIAN_POINT('',(5.202650260293E-02,0.56,-1.960518780212E-06) + ); +#5304 = CARTESIAN_POINT('',(5.202650260293E-02,0.55,-1.960518780212E-06) + ); +#5305 = CARTESIAN_POINT('',(5.263212266065E-02,0.56,1.318236557881E-02) + ); +#5306 = CARTESIAN_POINT('',(5.263212266065E-02,0.55,1.318236557881E-02) + ); +#5307 = CARTESIAN_POINT('',(5.34571458606E-02,0.56,2.547939846053E-02)); +#5308 = CARTESIAN_POINT('',(5.34571458606E-02,0.55,2.547939846053E-02)); +#5309 = CARTESIAN_POINT('',(5.452127557912E-02,0.56,3.690475210704E-02) + ); +#5310 = CARTESIAN_POINT('',(5.452127557912E-02,0.55,3.690475210704E-02) + ); +#5311 = CARTESIAN_POINT('',(5.610157043172E-02,0.56,4.741975335802E-02) + ); +#5312 = CARTESIAN_POINT('',(5.610157043172E-02,0.55,4.741975335802E-02) + ); +#5313 = CARTESIAN_POINT('',(5.787224921349E-02,0.56,5.709672166454E-02) + ); +#5314 = CARTESIAN_POINT('',(5.787224921349E-02,0.55,5.709672166454E-02) + ); +#5315 = CARTESIAN_POINT('',(6.002705817541E-02,0.56,6.588444537592E-02) + ); +#5316 = CARTESIAN_POINT('',(6.002705817541E-02,0.55,6.588444537592E-02) + ); +#5317 = CARTESIAN_POINT('',(6.257655996211E-02,0.56,7.384322644637E-02) + ); +#5318 = CARTESIAN_POINT('',(6.257655996211E-02,0.55,7.384322644637E-02) + ); +#5319 = CARTESIAN_POINT('',(6.548046965145E-02,0.56,8.110813329591E-02) + ); +#5320 = CARTESIAN_POINT('',(6.548046965145E-02,0.55,8.110813329591E-02) + ); +#5321 = CARTESIAN_POINT('',(6.865105601846E-02,0.56,8.786825480864E-02) + ); +#5322 = CARTESIAN_POINT('',(6.865105601846E-02,0.55,8.786825480864E-02) + ); +#5323 = CARTESIAN_POINT('',(7.205712830895E-02,0.56,9.420344845222E-02) + ); +#5324 = CARTESIAN_POINT('',(7.205712830895E-02,0.55,9.420344845222E-02) + ); +#5325 = CARTESIAN_POINT('',(7.586904336425E-02,0.56,0.10005680929)); +#5326 = CARTESIAN_POINT('',(7.586904336425E-02,0.55,0.10005680929)); +#5327 = CARTESIAN_POINT('',(8.002054968715E-02,0.56,0.105447425697)); +#5328 = CARTESIAN_POINT('',(8.002054968715E-02,0.55,0.105447425697)); +#5329 = CARTESIAN_POINT('',(8.44178756009E-02,0.56,0.110470708929)); +#5330 = CARTESIAN_POINT('',(8.44178756009E-02,0.55,0.110470708929)); +#5331 = CARTESIAN_POINT('',(8.922513402511E-02,0.56,0.114950407063)); +#5332 = CARTESIAN_POINT('',(8.922513402511E-02,0.55,0.114950407063)); +#5333 = CARTESIAN_POINT('',(9.587550827943E-02,0.56,0.120323092566)); +#5334 = CARTESIAN_POINT('',(9.587550827943E-02,0.55,0.120323092566)); +#5335 = CARTESIAN_POINT('',(0.104655155722,0.56,0.125875005939)); +#5336 = CARTESIAN_POINT('',(0.104655155722,0.55,0.125875005939)); +#5337 = CARTESIAN_POINT('',(0.115717201245,0.56,0.130709614922)); +#5338 = CARTESIAN_POINT('',(0.115717201245,0.55,0.130709614922)); +#5339 = CARTESIAN_POINT('',(0.127084046343,0.56,0.133747860565)); +#5340 = CARTESIAN_POINT('',(0.127084046343,0.55,0.133747860565)); +#5341 = CARTESIAN_POINT('',(0.134799171352,0.56,0.134134236161)); +#5342 = CARTESIAN_POINT('',(0.134799171352,0.55,0.134134236161)); +#5343 = CARTESIAN_POINT('',(0.138650029412,0.56,0.134327088198)); +#5344 = CARTESIAN_POINT('',(0.138650029412,0.55,0.134327088198)); +#5345 = ADVANCED_FACE('',(#5346),#5376,.T.); +#5346 = FACE_BOUND('',#5347,.T.); +#5347 = EDGE_LOOP('',(#5348,#5368,#5369,#5370)); +#5348 = ORIENTED_EDGE('',*,*,#5349,.F.); +#5349 = EDGE_CURVE('',#5264,#5350,#5352,.T.); +#5350 = VERTEX_POINT('',#5351); +#5351 = CARTESIAN_POINT('',(0.213740173643,0.55,7.424095037733E-02)); +#5352 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5353,#5354,#5355,#5356,#5357, + #5358,#5359,#5360,#5361,#5362,#5363,#5364,#5365,#5366,#5367), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0.,0.112813400744, + 0.225393883921,0.339594814563,0.459675410225,0.521735190088, + 0.583925838739,0.648174144765,0.713881038113,0.781004454907, + 0.851450927557,0.924050692664,1.),.UNSPECIFIED.); +#5353 = CARTESIAN_POINT('',(0.138650029412,0.55,0.134327088198)); +#5354 = CARTESIAN_POINT('',(0.142525796578,0.55,0.134167310117)); +#5355 = CARTESIAN_POINT('',(0.150269328896,0.55,0.133848083836)); +#5356 = CARTESIAN_POINT('',(0.16158270841,0.55,0.130768210099)); +#5357 = CARTESIAN_POINT('',(0.172565735419,0.55,0.126121256153)); +#5358 = CARTESIAN_POINT('',(0.181172929447,0.55,0.120626505611)); +#5359 = CARTESIAN_POINT('',(0.187721183797,0.55,0.115393672666)); +#5360 = CARTESIAN_POINT('',(0.192412882807,0.55,0.110932207834)); +#5361 = CARTESIAN_POINT('',(0.196719087651,0.55,0.105936621104)); +#5362 = CARTESIAN_POINT('',(0.200803295136,0.55,0.100546691512)); +#5363 = CARTESIAN_POINT('',(0.204549202704,0.55,9.465944309484E-02)); +#5364 = CARTESIAN_POINT('',(0.207955516473,0.55,8.830318556823E-02)); +#5365 = CARTESIAN_POINT('',(0.211063851228,0.55,8.146026777701E-02)); +#5366 = CARTESIAN_POINT('',(0.212834755823,0.55,7.668329386543E-02)); +#5367 = CARTESIAN_POINT('',(0.213740173643,0.55,7.424095037733E-02)); +#5368 = ORIENTED_EDGE('',*,*,#5293,.F.); +#5369 = ORIENTED_EDGE('',*,*,#4876,.T.); +#5370 = ORIENTED_EDGE('',*,*,#5371,.T.); +#5371 = EDGE_CURVE('',#4861,#5350,#5372,.T.); +#5372 = LINE('',#5373,#5374); +#5373 = CARTESIAN_POINT('',(0.213740173643,0.56,7.424095037733E-02)); +#5374 = VECTOR('',#5375,1.); +#5375 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5376 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5377,#5378) + ,(#5379,#5380) + ,(#5381,#5382) + ,(#5383,#5384) + ,(#5385,#5386) + ,(#5387,#5388) + ,(#5389,#5390) + ,(#5391,#5392) + ,(#5393,#5394) + ,(#5395,#5396) + ,(#5397,#5398) + ,(#5399,#5400) + ,(#5401,#5402) + ,(#5403,#5404) + ,(#5405,#5406 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(2,2),(0., + 0.112813400744,0.225393883921,0.339594814563,0.459675410225, + 0.521735190088,0.583925838739,0.648174144765,0.713881038113, + 0.781004454907,0.851450927557,0.924050692664,1.),(0.,1.), + .UNSPECIFIED.); +#5377 = CARTESIAN_POINT('',(0.138650029412,0.56,0.134327088198)); +#5378 = CARTESIAN_POINT('',(0.138650029412,0.55,0.134327088198)); +#5379 = CARTESIAN_POINT('',(0.142525796578,0.56,0.134167310117)); +#5380 = CARTESIAN_POINT('',(0.142525796578,0.55,0.134167310117)); +#5381 = CARTESIAN_POINT('',(0.150269328896,0.56,0.133848083836)); +#5382 = CARTESIAN_POINT('',(0.150269328896,0.55,0.133848083836)); +#5383 = CARTESIAN_POINT('',(0.16158270841,0.56,0.130768210099)); +#5384 = CARTESIAN_POINT('',(0.16158270841,0.55,0.130768210099)); +#5385 = CARTESIAN_POINT('',(0.172565735419,0.56,0.126121256153)); +#5386 = CARTESIAN_POINT('',(0.172565735419,0.55,0.126121256153)); +#5387 = CARTESIAN_POINT('',(0.181172929447,0.56,0.120626505611)); +#5388 = CARTESIAN_POINT('',(0.181172929447,0.55,0.120626505611)); +#5389 = CARTESIAN_POINT('',(0.187721183797,0.56,0.115393672666)); +#5390 = CARTESIAN_POINT('',(0.187721183797,0.55,0.115393672666)); +#5391 = CARTESIAN_POINT('',(0.192412882807,0.56,0.110932207834)); +#5392 = CARTESIAN_POINT('',(0.192412882807,0.55,0.110932207834)); +#5393 = CARTESIAN_POINT('',(0.196719087651,0.56,0.105936621104)); +#5394 = CARTESIAN_POINT('',(0.196719087651,0.55,0.105936621104)); +#5395 = CARTESIAN_POINT('',(0.200803295136,0.56,0.100546691512)); +#5396 = CARTESIAN_POINT('',(0.200803295136,0.55,0.100546691512)); +#5397 = CARTESIAN_POINT('',(0.204549202704,0.56,9.465944309484E-02)); +#5398 = CARTESIAN_POINT('',(0.204549202704,0.55,9.465944309484E-02)); +#5399 = CARTESIAN_POINT('',(0.207955516473,0.56,8.830318556823E-02)); +#5400 = CARTESIAN_POINT('',(0.207955516473,0.55,8.830318556823E-02)); +#5401 = CARTESIAN_POINT('',(0.211063851228,0.56,8.146026777701E-02)); +#5402 = CARTESIAN_POINT('',(0.211063851228,0.55,8.146026777701E-02)); +#5403 = CARTESIAN_POINT('',(0.212834755823,0.56,7.668329386543E-02)); +#5404 = CARTESIAN_POINT('',(0.212834755823,0.55,7.668329386543E-02)); +#5405 = CARTESIAN_POINT('',(0.213740173643,0.56,7.424095037733E-02)); +#5406 = CARTESIAN_POINT('',(0.213740173643,0.55,7.424095037733E-02)); +#5407 = ADVANCED_FACE('',(#5408),#5434,.T.); +#5408 = FACE_BOUND('',#5409,.T.); +#5409 = EDGE_LOOP('',(#5410,#5426,#5427,#5428)); +#5410 = ORIENTED_EDGE('',*,*,#5411,.F.); +#5411 = EDGE_CURVE('',#5350,#5412,#5414,.T.); +#5412 = VERTEX_POINT('',#5413); +#5413 = CARTESIAN_POINT('',(0.226991375566,0.55,-1.374983487908E-02)); +#5414 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5415,#5416,#5417,#5418,#5419, + #5420,#5421,#5422,#5423,#5424,#5425),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.110588338595,0.224541754054,0.34250349405, + 0.464324098417,0.590756032702,0.722227475356,0.858842836209,1.), + .UNSPECIFIED.); +#5415 = CARTESIAN_POINT('',(0.213740173643,0.55,7.424095037733E-02)); +#5416 = CARTESIAN_POINT('',(0.214795350422,0.55,7.11179764307E-02)); +#5417 = CARTESIAN_POINT('',(0.216937811805,0.55,6.477700000635E-02)); +#5418 = CARTESIAN_POINT('',(0.219698989232,0.55,5.49406347983E-02)); +#5419 = CARTESIAN_POINT('',(0.221873529153,0.55,4.462035840451E-02)); +#5420 = CARTESIAN_POINT('',(0.223829865728,0.55,3.387784673266E-02)); +#5421 = CARTESIAN_POINT('',(0.225165171318,0.55,2.263387663156E-02)); +#5422 = CARTESIAN_POINT('',(0.226239952646,0.55,1.092323823999E-02)); +#5423 = CARTESIAN_POINT('',(0.22687302134,0.55,-1.262897983555E-03)); +#5424 = CARTESIAN_POINT('',(0.226951496447,0.55,-9.54239710308E-03)); +#5425 = CARTESIAN_POINT('',(0.226991375566,0.55,-1.374983487908E-02)); +#5426 = ORIENTED_EDGE('',*,*,#5371,.F.); +#5427 = ORIENTED_EDGE('',*,*,#4860,.T.); +#5428 = ORIENTED_EDGE('',*,*,#5429,.T.); +#5429 = EDGE_CURVE('',#4833,#5412,#5430,.T.); +#5430 = LINE('',#5431,#5432); +#5431 = CARTESIAN_POINT('',(0.226991375566,0.56,-1.374983487908E-02)); +#5432 = VECTOR('',#5433,1.); +#5433 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5434 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5435,#5436) + ,(#5437,#5438) + ,(#5439,#5440) + ,(#5441,#5442) + ,(#5443,#5444) + ,(#5445,#5446) + ,(#5447,#5448) + ,(#5449,#5450) + ,(#5451,#5452) + ,(#5453,#5454) + ,(#5455,#5456 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.110588338595,0.224541754054,0.34250349405,0.464324098417, + 0.590756032702,0.722227475356,0.858842836209,1.),(0.,1.), + .UNSPECIFIED.); +#5435 = CARTESIAN_POINT('',(0.213740173643,0.56,7.424095037733E-02)); +#5436 = CARTESIAN_POINT('',(0.213740173643,0.55,7.424095037733E-02)); +#5437 = CARTESIAN_POINT('',(0.214795350422,0.56,7.11179764307E-02)); +#5438 = CARTESIAN_POINT('',(0.214795350422,0.55,7.11179764307E-02)); +#5439 = CARTESIAN_POINT('',(0.216937811805,0.56,6.477700000635E-02)); +#5440 = CARTESIAN_POINT('',(0.216937811805,0.55,6.477700000635E-02)); +#5441 = CARTESIAN_POINT('',(0.219698989232,0.56,5.49406347983E-02)); +#5442 = CARTESIAN_POINT('',(0.219698989232,0.55,5.49406347983E-02)); +#5443 = CARTESIAN_POINT('',(0.221873529153,0.56,4.462035840451E-02)); +#5444 = CARTESIAN_POINT('',(0.221873529153,0.55,4.462035840451E-02)); +#5445 = CARTESIAN_POINT('',(0.223829865728,0.56,3.387784673266E-02)); +#5446 = CARTESIAN_POINT('',(0.223829865728,0.55,3.387784673266E-02)); +#5447 = CARTESIAN_POINT('',(0.225165171318,0.56,2.263387663156E-02)); +#5448 = CARTESIAN_POINT('',(0.225165171318,0.55,2.263387663156E-02)); +#5449 = CARTESIAN_POINT('',(0.226239952646,0.56,1.092323823999E-02)); +#5450 = CARTESIAN_POINT('',(0.226239952646,0.55,1.092323823999E-02)); +#5451 = CARTESIAN_POINT('',(0.22687302134,0.56,-1.262897983555E-03)); +#5452 = CARTESIAN_POINT('',(0.22687302134,0.55,-1.262897983555E-03)); +#5453 = CARTESIAN_POINT('',(0.226951496447,0.56,-9.54239710308E-03)); +#5454 = CARTESIAN_POINT('',(0.226951496447,0.55,-9.54239710308E-03)); +#5455 = CARTESIAN_POINT('',(0.226991375566,0.56,-1.374983487908E-02)); +#5456 = CARTESIAN_POINT('',(0.226991375566,0.55,-1.374983487908E-02)); +#5457 = ADVANCED_FACE('',(#5458),#5489,.T.); +#5458 = FACE_BOUND('',#5459,.T.); +#5459 = EDGE_LOOP('',(#5460,#5486,#5487,#5488)); +#5460 = ORIENTED_EDGE('',*,*,#5461,.F.); +#5461 = EDGE_CURVE('',#5412,#5171,#5462,.T.); +#5462 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5463,#5464,#5465,#5466,#5467, + #5468,#5469,#5470,#5471,#5472,#5473,#5474,#5475,#5476,#5477,#5478, + #5479,#5480,#5481,#5482,#5483,#5484,#5485),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.568119799064E-02, + 0.128486464174,0.188175130328,0.24510613067,0.299448424529, + 0.350822936009,0.399941680534,0.446671743632,0.491254533373, + 0.53337634427,0.573852754968,0.612526311719,0.649597136445, + 0.685532041554,0.720105786068,0.753837662974,0.818925416047, + 0.88049346165,0.940311333846,1.),.UNSPECIFIED.); +#5463 = CARTESIAN_POINT('',(0.226991375566,0.55,-1.374983487908E-02)); +#5464 = CARTESIAN_POINT('',(0.226936356643,0.55,-1.795659213089E-02)); +#5465 = CARTESIAN_POINT('',(0.226828727867,0.55,-2.618590860894E-02)); +#5466 = CARTESIAN_POINT('',(0.226417329097,0.55,-3.823772667516E-02)); +#5467 = CARTESIAN_POINT('',(0.225354971648,0.55,-4.968450276607E-02)); +#5468 = CARTESIAN_POINT('',(0.224175059761,0.55,-6.05755500325E-02)); +#5469 = CARTESIAN_POINT('',(0.222435337652,0.55,-7.085058030295E-02)); +#5470 = CARTESIAN_POINT('',(0.220559556964,0.55,-8.059561082858E-02)); +#5471 = CARTESIAN_POINT('',(0.218039435735,0.55,-8.968991331052E-02)); +#5472 = CARTESIAN_POINT('',(0.215347458238,0.55,-9.827587148168E-02)); +#5473 = CARTESIAN_POINT('',(0.212266418684,0.55,-0.106255936932)); +#5474 = CARTESIAN_POINT('',(0.208874845259,0.55,-0.113667315568)); +#5475 = CARTESIAN_POINT('',(0.205252669382,0.55,-0.120545788044)); +#5476 = CARTESIAN_POINT('',(0.201318445336,0.55,-0.126872482201)); +#5477 = CARTESIAN_POINT('',(0.197118877029,0.55,-0.132675736492)); +#5478 = CARTESIAN_POINT('',(0.19254312211,0.55,-0.137839195948)); +#5479 = CARTESIAN_POINT('',(0.187772684828,0.55,-0.142522892759)); +#5480 = CARTESIAN_POINT('',(0.181090966246,0.55,-0.147869149671)); +#5481 = CARTESIAN_POINT('',(0.172343537266,0.55,-0.153320319219)); +#5482 = CARTESIAN_POINT('',(0.161458972532,0.55,-0.158336895205)); +#5483 = CARTESIAN_POINT('',(0.150131908107,0.55,-0.161217724468)); +#5484 = CARTESIAN_POINT('',(0.142474562698,0.55,-0.161623893171)); +#5485 = CARTESIAN_POINT('',(0.138650029412,0.55,-0.161826757956)); +#5486 = ORIENTED_EDGE('',*,*,#5429,.F.); +#5487 = ORIENTED_EDGE('',*,*,#4832,.T.); +#5488 = ORIENTED_EDGE('',*,*,#5200,.T.); +#5489 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5490,#5491) + ,(#5492,#5493) + ,(#5494,#5495) + ,(#5496,#5497) + ,(#5498,#5499) + ,(#5500,#5501) + ,(#5502,#5503) + ,(#5504,#5505) + ,(#5506,#5507) + ,(#5508,#5509) + ,(#5510,#5511) + ,(#5512,#5513) + ,(#5514,#5515) + ,(#5516,#5517) + ,(#5518,#5519) + ,(#5520,#5521) + ,(#5522,#5523) + ,(#5524,#5525) + ,(#5526,#5527) + ,(#5528,#5529) + ,(#5530,#5531) + ,(#5532,#5533) + ,(#5534,#5535 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,4),(2,2),(0.,6.568119799064E-02,0.128486464174,0.188175130328, + 0.24510613067,0.299448424529,0.350822936009,0.399941680534, + 0.446671743632,0.491254533373,0.53337634427,0.573852754968, + 0.612526311719,0.649597136445,0.685532041554,0.720105786068, + 0.753837662974,0.818925416047,0.88049346165,0.940311333846,1.),(0., + 1.),.UNSPECIFIED.); +#5490 = CARTESIAN_POINT('',(0.226991375566,0.56,-1.374983487908E-02)); +#5491 = CARTESIAN_POINT('',(0.226991375566,0.55,-1.374983487908E-02)); +#5492 = CARTESIAN_POINT('',(0.226936356643,0.56,-1.795659213089E-02)); +#5493 = CARTESIAN_POINT('',(0.226936356643,0.55,-1.795659213089E-02)); +#5494 = CARTESIAN_POINT('',(0.226828727867,0.56,-2.618590860894E-02)); +#5495 = CARTESIAN_POINT('',(0.226828727867,0.55,-2.618590860894E-02)); +#5496 = CARTESIAN_POINT('',(0.226417329097,0.56,-3.823772667516E-02)); +#5497 = CARTESIAN_POINT('',(0.226417329097,0.55,-3.823772667516E-02)); +#5498 = CARTESIAN_POINT('',(0.225354971648,0.56,-4.968450276607E-02)); +#5499 = CARTESIAN_POINT('',(0.225354971648,0.55,-4.968450276607E-02)); +#5500 = CARTESIAN_POINT('',(0.224175059761,0.56,-6.05755500325E-02)); +#5501 = CARTESIAN_POINT('',(0.224175059761,0.55,-6.05755500325E-02)); +#5502 = CARTESIAN_POINT('',(0.222435337652,0.56,-7.085058030295E-02)); +#5503 = CARTESIAN_POINT('',(0.222435337652,0.55,-7.085058030295E-02)); +#5504 = CARTESIAN_POINT('',(0.220559556964,0.56,-8.059561082858E-02)); +#5505 = CARTESIAN_POINT('',(0.220559556964,0.55,-8.059561082858E-02)); +#5506 = CARTESIAN_POINT('',(0.218039435735,0.56,-8.968991331052E-02)); +#5507 = CARTESIAN_POINT('',(0.218039435735,0.55,-8.968991331052E-02)); +#5508 = CARTESIAN_POINT('',(0.215347458238,0.56,-9.827587148168E-02)); +#5509 = CARTESIAN_POINT('',(0.215347458238,0.55,-9.827587148168E-02)); +#5510 = CARTESIAN_POINT('',(0.212266418684,0.56,-0.106255936932)); +#5511 = CARTESIAN_POINT('',(0.212266418684,0.55,-0.106255936932)); +#5512 = CARTESIAN_POINT('',(0.208874845259,0.56,-0.113667315568)); +#5513 = CARTESIAN_POINT('',(0.208874845259,0.55,-0.113667315568)); +#5514 = CARTESIAN_POINT('',(0.205252669382,0.56,-0.120545788044)); +#5515 = CARTESIAN_POINT('',(0.205252669382,0.55,-0.120545788044)); +#5516 = CARTESIAN_POINT('',(0.201318445336,0.56,-0.126872482201)); +#5517 = CARTESIAN_POINT('',(0.201318445336,0.55,-0.126872482201)); +#5518 = CARTESIAN_POINT('',(0.197118877029,0.56,-0.132675736492)); +#5519 = CARTESIAN_POINT('',(0.197118877029,0.55,-0.132675736492)); +#5520 = CARTESIAN_POINT('',(0.19254312211,0.56,-0.137839195948)); +#5521 = CARTESIAN_POINT('',(0.19254312211,0.55,-0.137839195948)); +#5522 = CARTESIAN_POINT('',(0.187772684828,0.56,-0.142522892759)); +#5523 = CARTESIAN_POINT('',(0.187772684828,0.55,-0.142522892759)); +#5524 = CARTESIAN_POINT('',(0.181090966246,0.56,-0.147869149671)); +#5525 = CARTESIAN_POINT('',(0.181090966246,0.55,-0.147869149671)); +#5526 = CARTESIAN_POINT('',(0.172343537266,0.56,-0.153320319219)); +#5527 = CARTESIAN_POINT('',(0.172343537266,0.55,-0.153320319219)); +#5528 = CARTESIAN_POINT('',(0.161458972532,0.56,-0.158336895205)); +#5529 = CARTESIAN_POINT('',(0.161458972532,0.55,-0.158336895205)); +#5530 = CARTESIAN_POINT('',(0.150131908107,0.56,-0.161217724468)); +#5531 = CARTESIAN_POINT('',(0.150131908107,0.55,-0.161217724468)); +#5532 = CARTESIAN_POINT('',(0.142474562698,0.56,-0.161623893171)); +#5533 = CARTESIAN_POINT('',(0.142474562698,0.55,-0.161623893171)); +#5534 = CARTESIAN_POINT('',(0.138650029412,0.56,-0.161826757956)); +#5535 = CARTESIAN_POINT('',(0.138650029412,0.55,-0.161826757956)); +#5536 = ADVANCED_FACE('',(#5537),#5544,.F.); +#5537 = FACE_BOUND('',#5538,.T.); +#5538 = EDGE_LOOP('',(#5539,#5540,#5541,#5542,#5543)); +#5539 = ORIENTED_EDGE('',*,*,#5461,.T.); +#5540 = ORIENTED_EDGE('',*,*,#5170,.T.); +#5541 = ORIENTED_EDGE('',*,*,#5263,.T.); +#5542 = ORIENTED_EDGE('',*,*,#5349,.T.); +#5543 = ORIENTED_EDGE('',*,*,#5411,.T.); +#5544 = PLANE('',#5545); +#5545 = AXIS2_PLACEMENT_3D('',#5546,#5547,#5548); +#5546 = CARTESIAN_POINT('',(1.351560977094,0.55,0.4)); +#5547 = DIRECTION('',(-3.761581922631E-31,-1.,-1.019578823125E-46)); +#5548 = DIRECTION('',(1.,-3.761581922631E-31,0.)); +#5549 = ADVANCED_FACE('',(#5550),#5587,.T.); +#5550 = FACE_BOUND('',#5551,.T.); +#5551 = EDGE_LOOP('',(#5552,#5553,#5561,#5581)); +#5552 = ORIENTED_EDGE('',*,*,#2145,.F.); +#5553 = ORIENTED_EDGE('',*,*,#5554,.F.); +#5554 = EDGE_CURVE('',#5555,#2122,#5557,.T.); +#5555 = VERTEX_POINT('',#5556); +#5556 = CARTESIAN_POINT('',(0.407880798643,0.56,-0.161826757956)); +#5557 = LINE('',#5558,#5559); +#5558 = CARTESIAN_POINT('',(0.407880798643,0.56,-0.161826757956)); +#5559 = VECTOR('',#5560,1.); +#5560 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5561 = ORIENTED_EDGE('',*,*,#5562,.T.); +#5562 = EDGE_CURVE('',#5555,#5563,#5565,.T.); +#5563 = VERTEX_POINT('',#5564); +#5564 = CARTESIAN_POINT('',(0.334683683258,0.56,-0.10798060411)); +#5565 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5566,#5567,#5568,#5569,#5570, + #5571,#5572,#5573,#5574,#5575,#5576,#5577,#5578,#5579,#5580), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0.,0.122711942366, + 0.239684964017,0.351815855256,0.463766132862,0.520817793161, + 0.579448291448,0.64060414512,0.705297511806,0.773633880713, + 0.844669381886,0.920056508021,1.),.UNSPECIFIED.); +#5566 = CARTESIAN_POINT('',(0.407880798643,0.56,-0.161826757956)); +#5567 = CARTESIAN_POINT('',(0.403895631842,0.56,-0.161687621756)); +#5568 = CARTESIAN_POINT('',(0.396111674204,0.56,-0.161415856396)); +#5569 = CARTESIAN_POINT('',(0.384890182513,0.56,-0.159035555051)); +#5570 = CARTESIAN_POINT('',(0.374458249113,0.56,-0.155237746702)); +#5571 = CARTESIAN_POINT('',(0.366484382454,0.56,-0.150704444758)); +#5572 = CARTESIAN_POINT('',(0.360596125038,0.56,-0.146229401373)); +#5573 = CARTESIAN_POINT('',(0.356388431218,0.56,-0.142321162736)); +#5574 = CARTESIAN_POINT('',(0.352256380178,0.56,-0.13797788037)); +#5575 = CARTESIAN_POINT('',(0.348471812493,0.56,-0.132932042842)); +#5576 = CARTESIAN_POINT('',(0.344644414825,0.56,-0.127525363823)); +#5577 = CARTESIAN_POINT('',(0.341159958672,0.56,-0.121482995669)); +#5578 = CARTESIAN_POINT('',(0.337773989447,0.56,-0.114962556239)); +#5579 = CARTESIAN_POINT('',(0.335733734485,0.56,-0.110352992784)); +#5580 = CARTESIAN_POINT('',(0.334683683258,0.56,-0.10798060411)); +#5581 = ORIENTED_EDGE('',*,*,#5582,.T.); +#5582 = EDGE_CURVE('',#5563,#2146,#5583,.T.); +#5583 = LINE('',#5584,#5585); +#5584 = CARTESIAN_POINT('',(0.334683683258,0.56,-0.10798060411)); +#5585 = VECTOR('',#5586,1.); +#5586 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5587 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5588,#5589) + ,(#5590,#5591) + ,(#5592,#5593) + ,(#5594,#5595) + ,(#5596,#5597) + ,(#5598,#5599) + ,(#5600,#5601) + ,(#5602,#5603) + ,(#5604,#5605) + ,(#5606,#5607) + ,(#5608,#5609) + ,(#5610,#5611) + ,(#5612,#5613) + ,(#5614,#5615) + ,(#5616,#5617 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(2,2),(0., + 0.122711942366,0.239684964017,0.351815855256,0.463766132862, + 0.520817793161,0.579448291448,0.64060414512,0.705297511806, + 0.773633880713,0.844669381886,0.920056508021,1.),(0.,1.), + .UNSPECIFIED.); +#5588 = CARTESIAN_POINT('',(0.407880798643,0.56,-0.161826757956)); +#5589 = CARTESIAN_POINT('',(0.407880798643,0.55,-0.161826757956)); +#5590 = CARTESIAN_POINT('',(0.403895631842,0.56,-0.161687621756)); +#5591 = CARTESIAN_POINT('',(0.403895631842,0.55,-0.161687621756)); +#5592 = CARTESIAN_POINT('',(0.396111674204,0.56,-0.161415856396)); +#5593 = CARTESIAN_POINT('',(0.396111674204,0.55,-0.161415856396)); +#5594 = CARTESIAN_POINT('',(0.384890182513,0.56,-0.159035555051)); +#5595 = CARTESIAN_POINT('',(0.384890182513,0.55,-0.159035555051)); +#5596 = CARTESIAN_POINT('',(0.374458249113,0.56,-0.155237746702)); +#5597 = CARTESIAN_POINT('',(0.374458249113,0.55,-0.155237746702)); +#5598 = CARTESIAN_POINT('',(0.366484382454,0.56,-0.150704444758)); +#5599 = CARTESIAN_POINT('',(0.366484382454,0.55,-0.150704444758)); +#5600 = CARTESIAN_POINT('',(0.360596125038,0.56,-0.146229401373)); +#5601 = CARTESIAN_POINT('',(0.360596125038,0.55,-0.146229401373)); +#5602 = CARTESIAN_POINT('',(0.356388431218,0.56,-0.142321162736)); +#5603 = CARTESIAN_POINT('',(0.356388431218,0.55,-0.142321162736)); +#5604 = CARTESIAN_POINT('',(0.352256380178,0.56,-0.13797788037)); +#5605 = CARTESIAN_POINT('',(0.352256380178,0.55,-0.13797788037)); +#5606 = CARTESIAN_POINT('',(0.348471812493,0.56,-0.132932042842)); +#5607 = CARTESIAN_POINT('',(0.348471812493,0.55,-0.132932042842)); +#5608 = CARTESIAN_POINT('',(0.344644414825,0.56,-0.127525363823)); +#5609 = CARTESIAN_POINT('',(0.344644414825,0.55,-0.127525363823)); +#5610 = CARTESIAN_POINT('',(0.341159958672,0.56,-0.121482995669)); +#5611 = CARTESIAN_POINT('',(0.341159958672,0.55,-0.121482995669)); +#5612 = CARTESIAN_POINT('',(0.337773989447,0.56,-0.114962556239)); +#5613 = CARTESIAN_POINT('',(0.337773989447,0.55,-0.114962556239)); +#5614 = CARTESIAN_POINT('',(0.335733734485,0.56,-0.110352992784)); +#5615 = CARTESIAN_POINT('',(0.335733734485,0.55,-0.110352992784)); +#5616 = CARTESIAN_POINT('',(0.334683683258,0.56,-0.10798060411)); +#5617 = CARTESIAN_POINT('',(0.334683683258,0.55,-0.10798060411)); +#5618 = ADVANCED_FACE('',(#5619),#5653,.T.); +#5619 = FACE_BOUND('',#5620,.T.); +#5620 = EDGE_LOOP('',(#5621,#5622,#5630,#5652)); +#5621 = ORIENTED_EDGE('',*,*,#2119,.F.); +#5622 = ORIENTED_EDGE('',*,*,#5623,.F.); +#5623 = EDGE_CURVE('',#5624,#2120,#5626,.T.); +#5624 = VERTEX_POINT('',#5625); +#5625 = CARTESIAN_POINT('',(0.478273426848,0.56,-0.106928921418)); +#5626 = LINE('',#5627,#5628); +#5627 = CARTESIAN_POINT('',(0.478273426848,0.56,-0.106928921418)); +#5628 = VECTOR('',#5629,1.); +#5629 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5630 = ORIENTED_EDGE('',*,*,#5631,.T.); +#5631 = EDGE_CURVE('',#5624,#5555,#5632,.T.); +#5632 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5633,#5634,#5635,#5636,#5637, + #5638,#5639,#5640,#5641,#5642,#5643,#5644,#5645,#5646,#5647,#5648, + #5649,#5650,#5651),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,5.527454908753E-02,0.109966093882,0.163247442852, + 0.218076185482,0.273300874374,0.330909300011,0.390994523365, + 0.454175953431,0.518861540849,0.583310532011,0.648516681864, + 0.715030887097,0.782502072854,0.852322685077,0.924928489784,1.), + .UNSPECIFIED.); +#5633 = CARTESIAN_POINT('',(0.478273426848,0.56,-0.106928921418)); +#5634 = CARTESIAN_POINT('',(0.478231985752,0.56,-0.108756695932)); +#5635 = CARTESIAN_POINT('',(0.478149540656,0.56,-0.112392966641)); +#5636 = CARTESIAN_POINT('',(0.477109812878,0.56,-0.11770547351)); +#5637 = CARTESIAN_POINT('',(0.47554740878,0.56,-0.122855568103)); +#5638 = CARTESIAN_POINT('',(0.473399435849,0.56,-0.127821349128)); +#5639 = CARTESIAN_POINT('',(0.470524415978,0.56,-0.132568376518)); +#5640 = CARTESIAN_POINT('',(0.467083817326,0.56,-0.137137121412)); +#5641 = CARTESIAN_POINT('',(0.462987007298,0.56,-0.141501499313)); +#5642 = CARTESIAN_POINT('',(0.458292462597,0.56,-0.145569531268)); +#5643 = CARTESIAN_POINT('',(0.4532512821,0.56,-0.149446454985)); +#5644 = CARTESIAN_POINT('',(0.447726304595,0.56,-0.152737818683)); +#5645 = CARTESIAN_POINT('',(0.441884117124,0.56,-0.15555232489)); +#5646 = CARTESIAN_POINT('',(0.435718251639,0.56,-0.157873275101)); +#5647 = CARTESIAN_POINT('',(0.429208698607,0.56,-0.159619203922)); +#5648 = CARTESIAN_POINT('',(0.422386042842,0.56,-0.160872788062)); +#5649 = CARTESIAN_POINT('',(0.41523727449,0.56,-0.161656553536)); +#5650 = CARTESIAN_POINT('',(0.41036010129,0.56,-0.161769395126)); +#5651 = CARTESIAN_POINT('',(0.407880798643,0.56,-0.161826757956)); +#5652 = ORIENTED_EDGE('',*,*,#5554,.T.); +#5653 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5654,#5655) + ,(#5656,#5657) + ,(#5658,#5659) + ,(#5660,#5661) + ,(#5662,#5663) + ,(#5664,#5665) + ,(#5666,#5667) + ,(#5668,#5669) + ,(#5670,#5671) + ,(#5672,#5673) + ,(#5674,#5675) + ,(#5676,#5677) + ,(#5678,#5679) + ,(#5680,#5681) + ,(#5682,#5683) + ,(#5684,#5685) + ,(#5686,#5687) + ,(#5688,#5689) + ,(#5690,#5691 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,5.527454908753E-02,0.109966093882,0.163247442852, + 0.218076185482,0.273300874374,0.330909300011,0.390994523365, + 0.454175953431,0.518861540849,0.583310532011,0.648516681864, + 0.715030887097,0.782502072854,0.852322685077,0.924928489784,1.),(0., + 1.),.UNSPECIFIED.); +#5654 = CARTESIAN_POINT('',(0.478273426848,0.56,-0.106928921418)); +#5655 = CARTESIAN_POINT('',(0.478273426848,0.55,-0.106928921418)); +#5656 = CARTESIAN_POINT('',(0.478231985752,0.56,-0.108756695932)); +#5657 = CARTESIAN_POINT('',(0.478231985752,0.55,-0.108756695932)); +#5658 = CARTESIAN_POINT('',(0.478149540656,0.56,-0.112392966641)); +#5659 = CARTESIAN_POINT('',(0.478149540656,0.55,-0.112392966641)); +#5660 = CARTESIAN_POINT('',(0.477109812878,0.56,-0.11770547351)); +#5661 = CARTESIAN_POINT('',(0.477109812878,0.55,-0.11770547351)); +#5662 = CARTESIAN_POINT('',(0.47554740878,0.56,-0.122855568103)); +#5663 = CARTESIAN_POINT('',(0.47554740878,0.55,-0.122855568103)); +#5664 = CARTESIAN_POINT('',(0.473399435849,0.56,-0.127821349128)); +#5665 = CARTESIAN_POINT('',(0.473399435849,0.55,-0.127821349128)); +#5666 = CARTESIAN_POINT('',(0.470524415978,0.56,-0.132568376518)); +#5667 = CARTESIAN_POINT('',(0.470524415978,0.55,-0.132568376518)); +#5668 = CARTESIAN_POINT('',(0.467083817326,0.56,-0.137137121412)); +#5669 = CARTESIAN_POINT('',(0.467083817326,0.55,-0.137137121412)); +#5670 = CARTESIAN_POINT('',(0.462987007298,0.56,-0.141501499313)); +#5671 = CARTESIAN_POINT('',(0.462987007298,0.55,-0.141501499313)); +#5672 = CARTESIAN_POINT('',(0.458292462597,0.56,-0.145569531268)); +#5673 = CARTESIAN_POINT('',(0.458292462597,0.55,-0.145569531268)); +#5674 = CARTESIAN_POINT('',(0.4532512821,0.56,-0.149446454985)); +#5675 = CARTESIAN_POINT('',(0.4532512821,0.55,-0.149446454985)); +#5676 = CARTESIAN_POINT('',(0.447726304595,0.56,-0.152737818683)); +#5677 = CARTESIAN_POINT('',(0.447726304595,0.55,-0.152737818683)); +#5678 = CARTESIAN_POINT('',(0.441884117124,0.56,-0.15555232489)); +#5679 = CARTESIAN_POINT('',(0.441884117124,0.55,-0.15555232489)); +#5680 = CARTESIAN_POINT('',(0.435718251639,0.56,-0.157873275101)); +#5681 = CARTESIAN_POINT('',(0.435718251639,0.55,-0.157873275101)); +#5682 = CARTESIAN_POINT('',(0.429208698607,0.56,-0.159619203922)); +#5683 = CARTESIAN_POINT('',(0.429208698607,0.55,-0.159619203922)); +#5684 = CARTESIAN_POINT('',(0.422386042842,0.56,-0.160872788062)); +#5685 = CARTESIAN_POINT('',(0.422386042842,0.55,-0.160872788062)); +#5686 = CARTESIAN_POINT('',(0.41523727449,0.56,-0.161656553536)); +#5687 = CARTESIAN_POINT('',(0.41523727449,0.55,-0.161656553536)); +#5688 = CARTESIAN_POINT('',(0.41036010129,0.56,-0.161769395126)); +#5689 = CARTESIAN_POINT('',(0.41036010129,0.55,-0.161769395126)); +#5690 = CARTESIAN_POINT('',(0.407880798643,0.56,-0.161826757956)); +#5691 = CARTESIAN_POINT('',(0.407880798643,0.55,-0.161826757956)); +#5692 = ADVANCED_FACE('',(#5693),#5723,.T.); +#5693 = FACE_BOUND('',#5694,.T.); +#5694 = EDGE_LOOP('',(#5695,#5696,#5704,#5722)); +#5695 = ORIENTED_EDGE('',*,*,#2401,.F.); +#5696 = ORIENTED_EDGE('',*,*,#5697,.F.); +#5697 = EDGE_CURVE('',#5698,#2394,#5700,.T.); +#5698 = VERTEX_POINT('',#5699); +#5699 = CARTESIAN_POINT('',(0.388529837104,0.56,-4.964727077652E-02)); +#5700 = LINE('',#5701,#5702); +#5701 = CARTESIAN_POINT('',(0.388529837104,0.56,-4.964727077652E-02)); +#5702 = VECTOR('',#5703,1.); +#5703 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5704 = ORIENTED_EDGE('',*,*,#5705,.T.); +#5705 = EDGE_CURVE('',#5698,#5624,#5706,.T.); +#5706 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5707,#5708,#5709,#5710,#5711, + #5712,#5713,#5714,#5715,#5716,#5717,#5718,#5719,#5720,#5721), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0.,0.110165553211, + 0.215787256175,0.318027434909,0.417573954166,0.511650487647, + 0.596162097103,0.672934533485,0.74366955735,0.810677001065, + 0.874058962314,0.936696301919,1.),.UNSPECIFIED.); +#5707 = CARTESIAN_POINT('',(0.388529837104,0.56,-4.964727077652E-02)); +#5708 = CARTESIAN_POINT('',(0.392859953676,0.56,-4.972075114864E-02)); +#5709 = CARTESIAN_POINT('',(0.401341588332,0.56,-4.986468114691E-02)); +#5710 = CARTESIAN_POINT('',(0.413731018808,0.56,-5.160548218641E-02)); +#5711 = CARTESIAN_POINT('',(0.425578350022,0.56,-5.401354499199E-02)); +#5712 = CARTESIAN_POINT('',(0.436621024222,0.56,-5.770206421902E-02)); +#5713 = CARTESIAN_POINT('',(0.446685895557,0.56,-6.198609390495E-02)); +#5714 = CARTESIAN_POINT('',(0.455417855765,0.56,-6.697131485653E-02)); +#5715 = CARTESIAN_POINT('',(0.462694570492,0.56,-7.25127897812E-02)); +#5716 = CARTESIAN_POINT('',(0.468480677642,0.56,-7.869605071543E-02)); +#5717 = CARTESIAN_POINT('',(0.472833600506,0.56,-8.532755546377E-02)); +#5718 = CARTESIAN_POINT('',(0.476016280249,0.56,-9.223922123252E-02)); +#5719 = CARTESIAN_POINT('',(0.477896312873,0.56,-9.949162732615E-02)); +#5720 = CARTESIAN_POINT('',(0.478147279565,0.56,-0.104441094119)); +#5721 = CARTESIAN_POINT('',(0.478273426848,0.56,-0.106928921418)); +#5722 = ORIENTED_EDGE('',*,*,#5623,.T.); +#5723 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5724,#5725) + ,(#5726,#5727) + ,(#5728,#5729) + ,(#5730,#5731) + ,(#5732,#5733) + ,(#5734,#5735) + ,(#5736,#5737) + ,(#5738,#5739) + ,(#5740,#5741) + ,(#5742,#5743) + ,(#5744,#5745) + ,(#5746,#5747) + ,(#5748,#5749) + ,(#5750,#5751) + ,(#5752,#5753 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(2,2),(0., + 0.110165553211,0.215787256175,0.318027434909,0.417573954166, + 0.511650487647,0.596162097103,0.672934533485,0.74366955735, + 0.810677001065,0.874058962314,0.936696301919,1.),(0.,1.), + .UNSPECIFIED.); +#5724 = CARTESIAN_POINT('',(0.388529837104,0.56,-4.964727077652E-02)); +#5725 = CARTESIAN_POINT('',(0.388529837104,0.55,-4.964727077652E-02)); +#5726 = CARTESIAN_POINT('',(0.392859953676,0.56,-4.972075114864E-02)); +#5727 = CARTESIAN_POINT('',(0.392859953676,0.55,-4.972075114864E-02)); +#5728 = CARTESIAN_POINT('',(0.401341588332,0.56,-4.986468114691E-02)); +#5729 = CARTESIAN_POINT('',(0.401341588332,0.55,-4.986468114691E-02)); +#5730 = CARTESIAN_POINT('',(0.413731018808,0.56,-5.160548218641E-02)); +#5731 = CARTESIAN_POINT('',(0.413731018808,0.55,-5.160548218641E-02)); +#5732 = CARTESIAN_POINT('',(0.425578350022,0.56,-5.401354499199E-02)); +#5733 = CARTESIAN_POINT('',(0.425578350022,0.55,-5.401354499199E-02)); +#5734 = CARTESIAN_POINT('',(0.436621024222,0.56,-5.770206421902E-02)); +#5735 = CARTESIAN_POINT('',(0.436621024222,0.55,-5.770206421902E-02)); +#5736 = CARTESIAN_POINT('',(0.446685895557,0.56,-6.198609390495E-02)); +#5737 = CARTESIAN_POINT('',(0.446685895557,0.55,-6.198609390495E-02)); +#5738 = CARTESIAN_POINT('',(0.455417855765,0.56,-6.697131485653E-02)); +#5739 = CARTESIAN_POINT('',(0.455417855765,0.55,-6.697131485653E-02)); +#5740 = CARTESIAN_POINT('',(0.462694570492,0.56,-7.25127897812E-02)); +#5741 = CARTESIAN_POINT('',(0.462694570492,0.55,-7.25127897812E-02)); +#5742 = CARTESIAN_POINT('',(0.468480677642,0.56,-7.869605071543E-02)); +#5743 = CARTESIAN_POINT('',(0.468480677642,0.55,-7.869605071543E-02)); +#5744 = CARTESIAN_POINT('',(0.472833600506,0.56,-8.532755546377E-02)); +#5745 = CARTESIAN_POINT('',(0.472833600506,0.55,-8.532755546377E-02)); +#5746 = CARTESIAN_POINT('',(0.476016280249,0.56,-9.223922123252E-02)); +#5747 = CARTESIAN_POINT('',(0.476016280249,0.55,-9.223922123252E-02)); +#5748 = CARTESIAN_POINT('',(0.477896312873,0.56,-9.949162732615E-02)); +#5749 = CARTESIAN_POINT('',(0.477896312873,0.55,-9.949162732615E-02)); +#5750 = CARTESIAN_POINT('',(0.478147279565,0.56,-0.104441094119)); +#5751 = CARTESIAN_POINT('',(0.478147279565,0.55,-0.104441094119)); +#5752 = CARTESIAN_POINT('',(0.478273426848,0.56,-0.106928921418)); +#5753 = CARTESIAN_POINT('',(0.478273426848,0.55,-0.106928921418)); +#5754 = ADVANCED_FACE('',(#5755),#5773,.T.); +#5755 = FACE_BOUND('',#5756,.T.); +#5756 = EDGE_LOOP('',(#5757,#5758,#5766,#5772)); +#5757 = ORIENTED_EDGE('',*,*,#2393,.F.); +#5758 = ORIENTED_EDGE('',*,*,#5759,.F.); +#5759 = EDGE_CURVE('',#5760,#2370,#5762,.T.); +#5760 = VERTEX_POINT('',#5761); +#5761 = CARTESIAN_POINT('',(0.388529837104,0.56,-1.374983487908E-02)); +#5762 = LINE('',#5763,#5764); +#5763 = CARTESIAN_POINT('',(0.388529837104,0.56,-1.374983487908E-02)); +#5764 = VECTOR('',#5765,1.); +#5765 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5766 = ORIENTED_EDGE('',*,*,#5767,.T.); +#5767 = EDGE_CURVE('',#5760,#5698,#5768,.T.); +#5768 = LINE('',#5769,#5770); +#5769 = CARTESIAN_POINT('',(0.388529837104,0.56,-1.374983487908E-02)); +#5770 = VECTOR('',#5771,1.); +#5771 = DIRECTION('',(0.,0.,-1.)); +#5772 = ORIENTED_EDGE('',*,*,#5697,.T.); +#5773 = PLANE('',#5774); +#5774 = AXIS2_PLACEMENT_3D('',#5775,#5776,#5777); +#5775 = CARTESIAN_POINT('',(0.388529837104,0.56,-1.374983487908E-02)); +#5776 = DIRECTION('',(-1.,3.761581922631E-31,0.)); +#5777 = DIRECTION('',(-3.761581922631E-31,-1.,0.)); +#5778 = ADVANCED_FACE('',(#5779),#5813,.T.); +#5779 = FACE_BOUND('',#5780,.T.); +#5780 = EDGE_LOOP('',(#5781,#5782,#5790,#5812)); +#5781 = ORIENTED_EDGE('',*,*,#2369,.F.); +#5782 = ORIENTED_EDGE('',*,*,#5783,.F.); +#5783 = EDGE_CURVE('',#5784,#2346,#5786,.T.); +#5784 = VERTEX_POINT('',#5785); +#5785 = CARTESIAN_POINT('',(0.496222144797,0.56,6.028862665938E-02)); +#5786 = LINE('',#5787,#5788); +#5787 = CARTESIAN_POINT('',(0.496222144797,0.56,6.028862665938E-02)); +#5788 = VECTOR('',#5789,1.); +#5789 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5790 = ORIENTED_EDGE('',*,*,#5791,.T.); +#5791 = EDGE_CURVE('',#5784,#5760,#5792,.T.); +#5792 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5793,#5794,#5795,#5796,#5797, + #5798,#5799,#5800,#5801,#5802,#5803,#5804,#5805,#5806,#5807,#5808, + #5809,#5810,#5811),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.690918560566E-02,0.133485440423,0.20103511657, + 0.271234340019,0.342879984162,0.41383612961,0.485976621974, + 0.560229557256,0.599884180752,0.644054839643,0.691891931584, + 0.744687524474,0.80149177517,0.86285769822,0.929328379395,1.), + .UNSPECIFIED.); +#5793 = CARTESIAN_POINT('',(0.496222144797,0.56,6.028862665938E-02)); +#5794 = CARTESIAN_POINT('',(0.496069114644,0.56,5.702749277238E-02)); +#5795 = CARTESIAN_POINT('',(0.495763815796,0.56,5.052145194637E-02)); +#5796 = CARTESIAN_POINT('',(0.493432957851,0.56,4.094969451912E-02)); +#5797 = CARTESIAN_POINT('',(0.489599071431,0.56,3.172735327521E-02)); +#5798 = CARTESIAN_POINT('',(0.4842318203,0.56,2.301177426942E-02)); +#5799 = CARTESIAN_POINT('',(0.477698247435,0.56,1.493418411597E-02)); +#5800 = CARTESIAN_POINT('',(0.470061756749,0.56,7.727035868167E-03)); +#5801 = CARTESIAN_POINT('',(0.461258933912,0.56,1.780026761058E-03)); +#5802 = CARTESIAN_POINT('',(0.453156947009,0.56,-2.32883887881E-03)); +#5803 = CARTESIAN_POINT('',(0.445980431358,0.56,-5.132546397187E-03)); +#5804 = CARTESIAN_POINT('',(0.439838892914,0.56,-7.000042842113E-03)); +#5805 = CARTESIAN_POINT('',(0.432963232576,0.56,-8.581408409722E-03)); +#5806 = CARTESIAN_POINT('',(0.425436597689,0.56,-1.005263556219E-02)); +#5807 = CARTESIAN_POINT('',(0.417202276044,0.56,-1.130477037738E-02)); +#5808 = CARTESIAN_POINT('',(0.408269232247,0.56,-1.234895195172E-02)); +#5809 = CARTESIAN_POINT('',(0.398635656086,0.56,-1.318445604617E-02)); +#5810 = CARTESIAN_POINT('',(0.3919665395,0.56,-1.355756557432E-02)); +#5811 = CARTESIAN_POINT('',(0.388529837104,0.56,-1.374983487908E-02)); +#5812 = ORIENTED_EDGE('',*,*,#5759,.T.); +#5813 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5814,#5815) + ,(#5816,#5817) + ,(#5818,#5819) + ,(#5820,#5821) + ,(#5822,#5823) + ,(#5824,#5825) + ,(#5826,#5827) + ,(#5828,#5829) + ,(#5830,#5831) + ,(#5832,#5833) + ,(#5834,#5835) + ,(#5836,#5837) + ,(#5838,#5839) + ,(#5840,#5841) + ,(#5842,#5843) + ,(#5844,#5845) + ,(#5846,#5847) + ,(#5848,#5849) + ,(#5850,#5851 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.690918560566E-02,0.133485440423,0.20103511657, + 0.271234340019,0.342879984162,0.41383612961,0.485976621974, + 0.560229557256,0.599884180752,0.644054839643,0.691891931584, + 0.744687524474,0.80149177517,0.86285769822,0.929328379395,1.),(0.,1. + ),.UNSPECIFIED.); +#5814 = CARTESIAN_POINT('',(0.496222144797,0.56,6.028862665938E-02)); +#5815 = CARTESIAN_POINT('',(0.496222144797,0.55,6.028862665938E-02)); +#5816 = CARTESIAN_POINT('',(0.496069114644,0.56,5.702749277238E-02)); +#5817 = CARTESIAN_POINT('',(0.496069114644,0.55,5.702749277238E-02)); +#5818 = CARTESIAN_POINT('',(0.495763815796,0.56,5.052145194637E-02)); +#5819 = CARTESIAN_POINT('',(0.495763815796,0.55,5.052145194637E-02)); +#5820 = CARTESIAN_POINT('',(0.493432957851,0.56,4.094969451912E-02)); +#5821 = CARTESIAN_POINT('',(0.493432957851,0.55,4.094969451912E-02)); +#5822 = CARTESIAN_POINT('',(0.489599071431,0.56,3.172735327521E-02)); +#5823 = CARTESIAN_POINT('',(0.489599071431,0.55,3.172735327521E-02)); +#5824 = CARTESIAN_POINT('',(0.4842318203,0.56,2.301177426942E-02)); +#5825 = CARTESIAN_POINT('',(0.4842318203,0.55,2.301177426942E-02)); +#5826 = CARTESIAN_POINT('',(0.477698247435,0.56,1.493418411597E-02)); +#5827 = CARTESIAN_POINT('',(0.477698247435,0.55,1.493418411597E-02)); +#5828 = CARTESIAN_POINT('',(0.470061756749,0.56,7.727035868167E-03)); +#5829 = CARTESIAN_POINT('',(0.470061756749,0.55,7.727035868167E-03)); +#5830 = CARTESIAN_POINT('',(0.461258933912,0.56,1.780026761058E-03)); +#5831 = CARTESIAN_POINT('',(0.461258933912,0.55,1.780026761058E-03)); +#5832 = CARTESIAN_POINT('',(0.453156947009,0.56,-2.32883887881E-03)); +#5833 = CARTESIAN_POINT('',(0.453156947009,0.55,-2.32883887881E-03)); +#5834 = CARTESIAN_POINT('',(0.445980431358,0.56,-5.132546397187E-03)); +#5835 = CARTESIAN_POINT('',(0.445980431358,0.55,-5.132546397187E-03)); +#5836 = CARTESIAN_POINT('',(0.439838892914,0.56,-7.000042842113E-03)); +#5837 = CARTESIAN_POINT('',(0.439838892914,0.55,-7.000042842113E-03)); +#5838 = CARTESIAN_POINT('',(0.432963232576,0.56,-8.581408409722E-03)); +#5839 = CARTESIAN_POINT('',(0.432963232576,0.55,-8.581408409722E-03)); +#5840 = CARTESIAN_POINT('',(0.425436597689,0.56,-1.005263556219E-02)); +#5841 = CARTESIAN_POINT('',(0.425436597689,0.55,-1.005263556219E-02)); +#5842 = CARTESIAN_POINT('',(0.417202276044,0.56,-1.130477037738E-02)); +#5843 = CARTESIAN_POINT('',(0.417202276044,0.55,-1.130477037738E-02)); +#5844 = CARTESIAN_POINT('',(0.408269232247,0.56,-1.234895195172E-02)); +#5845 = CARTESIAN_POINT('',(0.408269232247,0.55,-1.234895195172E-02)); +#5846 = CARTESIAN_POINT('',(0.398635656086,0.56,-1.318445604617E-02)); +#5847 = CARTESIAN_POINT('',(0.398635656086,0.55,-1.318445604617E-02)); +#5848 = CARTESIAN_POINT('',(0.3919665395,0.56,-1.355756557432E-02)); +#5849 = CARTESIAN_POINT('',(0.3919665395,0.55,-1.355756557432E-02)); +#5850 = CARTESIAN_POINT('',(0.388529837104,0.56,-1.374983487908E-02)); +#5851 = CARTESIAN_POINT('',(0.388529837104,0.55,-1.374983487908E-02)); +#5852 = ADVANCED_FACE('',(#5853),#5887,.T.); +#5853 = FACE_BOUND('',#5854,.T.); +#5854 = EDGE_LOOP('',(#5855,#5856,#5864,#5886)); +#5855 = ORIENTED_EDGE('',*,*,#2345,.F.); +#5856 = ORIENTED_EDGE('',*,*,#5857,.F.); +#5857 = EDGE_CURVE('',#5858,#2330,#5860,.T.); +#5858 = VERTEX_POINT('',#5859); +#5859 = CARTESIAN_POINT('',(0.407109564668,0.56,0.134327088198)); +#5860 = LINE('',#5861,#5862); +#5861 = CARTESIAN_POINT('',(0.407109564668,0.56,0.134327088198)); +#5862 = VECTOR('',#5863,1.); +#5863 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5864 = ORIENTED_EDGE('',*,*,#5865,.T.); +#5865 = EDGE_CURVE('',#5858,#5784,#5866,.T.); +#5866 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5867,#5868,#5869,#5870,#5871, + #5872,#5873,#5874,#5875,#5876,#5877,#5878,#5879,#5880,#5881,#5882, + #5883,#5884,#5885),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,7.607173695556E-02,0.148751714575,0.218402793846, + 0.285759581062,0.350598023675,0.414964044598,0.478069338572, + 0.541760676007,0.604349858539,0.664075021071,0.72146362308, + 0.777587128236,0.832644446927,0.887843511068,0.943460342652,1.), + .UNSPECIFIED.); +#5867 = CARTESIAN_POINT('',(0.407109564668,0.56,0.134327088198)); +#5868 = CARTESIAN_POINT('',(0.410384914933,0.56,0.134265497673)); +#5869 = CARTESIAN_POINT('',(0.416789579625,0.56,0.134145062719)); +#5870 = CARTESIAN_POINT('',(0.426135065558,0.56,0.133037492034)); +#5871 = CARTESIAN_POINT('',(0.435025810315,0.56,0.13142445069)); +#5872 = CARTESIAN_POINT('',(0.443363102892,0.56,0.128933152408)); +#5873 = CARTESIAN_POINT('',(0.451256153627,0.56,0.125855067262)); +#5874 = CARTESIAN_POINT('',(0.458594318589,0.56,0.121990226719)); +#5875 = CARTESIAN_POINT('',(0.465473929208,0.56,0.117455754555)); +#5876 = CARTESIAN_POINT('',(0.471806869751,0.56,0.112301838691)); +#5877 = CARTESIAN_POINT('',(0.477501420502,0.56,0.106659689183)); +#5878 = CARTESIAN_POINT('',(0.482515371826,0.56,0.100758382072)); +#5879 = CARTESIAN_POINT('',(0.486777837974,0.56,9.462279912081E-02)); +#5880 = CARTESIAN_POINT('',(0.490216195793,0.56,8.821898702914E-02)); +#5881 = CARTESIAN_POINT('',(0.492931250823,0.56,8.157346414113E-02)); +#5882 = CARTESIAN_POINT('',(0.49477957088,0.56,7.466758120569E-02)); +#5883 = CARTESIAN_POINT('',(0.496064722393,0.56,6.755785458528E-02)); +#5884 = CARTESIAN_POINT('',(0.49616938361,0.56,6.272495769112E-02)); +#5885 = CARTESIAN_POINT('',(0.496222144797,0.56,6.028862665938E-02)); +#5886 = ORIENTED_EDGE('',*,*,#5783,.T.); +#5887 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5888,#5889) + ,(#5890,#5891) + ,(#5892,#5893) + ,(#5894,#5895) + ,(#5896,#5897) + ,(#5898,#5899) + ,(#5900,#5901) + ,(#5902,#5903) + ,(#5904,#5905) + ,(#5906,#5907) + ,(#5908,#5909) + ,(#5910,#5911) + ,(#5912,#5913) + ,(#5914,#5915) + ,(#5916,#5917) + ,(#5918,#5919) + ,(#5920,#5921) + ,(#5922,#5923) + ,(#5924,#5925 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,7.607173695556E-02,0.148751714575,0.218402793846, + 0.285759581062,0.350598023675,0.414964044598,0.478069338572, + 0.541760676007,0.604349858539,0.664075021071,0.72146362308, + 0.777587128236,0.832644446927,0.887843511068,0.943460342652,1.),(0., + 1.),.UNSPECIFIED.); +#5888 = CARTESIAN_POINT('',(0.407109564668,0.56,0.134327088198)); +#5889 = CARTESIAN_POINT('',(0.407109564668,0.55,0.134327088198)); +#5890 = CARTESIAN_POINT('',(0.410384914933,0.56,0.134265497673)); +#5891 = CARTESIAN_POINT('',(0.410384914933,0.55,0.134265497673)); +#5892 = CARTESIAN_POINT('',(0.416789579625,0.56,0.134145062719)); +#5893 = CARTESIAN_POINT('',(0.416789579625,0.55,0.134145062719)); +#5894 = CARTESIAN_POINT('',(0.426135065558,0.56,0.133037492034)); +#5895 = CARTESIAN_POINT('',(0.426135065558,0.55,0.133037492034)); +#5896 = CARTESIAN_POINT('',(0.435025810315,0.56,0.13142445069)); +#5897 = CARTESIAN_POINT('',(0.435025810315,0.55,0.13142445069)); +#5898 = CARTESIAN_POINT('',(0.443363102892,0.56,0.128933152408)); +#5899 = CARTESIAN_POINT('',(0.443363102892,0.55,0.128933152408)); +#5900 = CARTESIAN_POINT('',(0.451256153627,0.56,0.125855067262)); +#5901 = CARTESIAN_POINT('',(0.451256153627,0.55,0.125855067262)); +#5902 = CARTESIAN_POINT('',(0.458594318589,0.56,0.121990226719)); +#5903 = CARTESIAN_POINT('',(0.458594318589,0.55,0.121990226719)); +#5904 = CARTESIAN_POINT('',(0.465473929208,0.56,0.117455754555)); +#5905 = CARTESIAN_POINT('',(0.465473929208,0.55,0.117455754555)); +#5906 = CARTESIAN_POINT('',(0.471806869751,0.56,0.112301838691)); +#5907 = CARTESIAN_POINT('',(0.471806869751,0.55,0.112301838691)); +#5908 = CARTESIAN_POINT('',(0.477501420502,0.56,0.106659689183)); +#5909 = CARTESIAN_POINT('',(0.477501420502,0.55,0.106659689183)); +#5910 = CARTESIAN_POINT('',(0.482515371826,0.56,0.100758382072)); +#5911 = CARTESIAN_POINT('',(0.482515371826,0.55,0.100758382072)); +#5912 = CARTESIAN_POINT('',(0.486777837974,0.56,9.462279912081E-02)); +#5913 = CARTESIAN_POINT('',(0.486777837974,0.55,9.462279912081E-02)); +#5914 = CARTESIAN_POINT('',(0.490216195793,0.56,8.821898702914E-02)); +#5915 = CARTESIAN_POINT('',(0.490216195793,0.55,8.821898702914E-02)); +#5916 = CARTESIAN_POINT('',(0.492931250823,0.56,8.157346414113E-02)); +#5917 = CARTESIAN_POINT('',(0.492931250823,0.55,8.157346414113E-02)); +#5918 = CARTESIAN_POINT('',(0.49477957088,0.56,7.466758120569E-02)); +#5919 = CARTESIAN_POINT('',(0.49477957088,0.55,7.466758120569E-02)); +#5920 = CARTESIAN_POINT('',(0.496064722393,0.56,6.755785458528E-02)); +#5921 = CARTESIAN_POINT('',(0.496064722393,0.55,6.755785458528E-02)); +#5922 = CARTESIAN_POINT('',(0.49616938361,0.56,6.272495769112E-02)); +#5923 = CARTESIAN_POINT('',(0.49616938361,0.55,6.272495769112E-02)); +#5924 = CARTESIAN_POINT('',(0.496222144797,0.56,6.028862665938E-02)); +#5925 = CARTESIAN_POINT('',(0.496222144797,0.55,6.028862665938E-02)); +#5926 = ADVANCED_FACE('',(#5927),#5953,.T.); +#5927 = FACE_BOUND('',#5928,.T.); +#5928 = EDGE_LOOP('',(#5929,#5930,#5938,#5952)); +#5929 = ORIENTED_EDGE('',*,*,#2329,.F.); +#5930 = ORIENTED_EDGE('',*,*,#5931,.F.); +#5931 = EDGE_CURVE('',#5932,#2314,#5934,.T.); +#5932 = VERTEX_POINT('',#5933); +#5933 = CARTESIAN_POINT('',(0.348636006976,0.56,0.115396799736)); +#5934 = LINE('',#5935,#5936); +#5935 = CARTESIAN_POINT('',(0.348636006976,0.56,0.115396799736)); +#5936 = VECTOR('',#5937,1.); +#5937 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5938 = ORIENTED_EDGE('',*,*,#5939,.T.); +#5939 = EDGE_CURVE('',#5932,#5858,#5940,.T.); +#5940 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5941,#5942,#5943,#5944,#5945, + #5946,#5947,#5948,#5949,#5950,#5951),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.118271304836,0.236177533084,0.355662932949, + 0.475904164671,0.600127341711,0.728608116155,0.861313475674,1.), + .UNSPECIFIED.); +#5941 = CARTESIAN_POINT('',(0.348636006976,0.56,0.115396799736)); +#5942 = CARTESIAN_POINT('',(0.350595664629,0.56,0.116907633125)); +#5943 = CARTESIAN_POINT('',(0.354508930917,0.56,0.119924636303)); +#5944 = CARTESIAN_POINT('',(0.360885754027,0.56,0.123774799157)); +#5945 = CARTESIAN_POINT('',(0.367592242635,0.56,0.127110901691)); +#5946 = CARTESIAN_POINT('',(0.374773710057,0.56,0.129659271262)); +#5947 = CARTESIAN_POINT('',(0.382275187103,0.56,0.131817037341)); +#5948 = CARTESIAN_POINT('',(0.390217923626,0.56,0.133229089254)); +#5949 = CARTESIAN_POINT('',(0.398531845337,0.56,0.134197906389)); +#5950 = CARTESIAN_POINT('',(0.404208621685,0.56,0.134283399538)); +#5951 = CARTESIAN_POINT('',(0.407109564668,0.56,0.134327088198)); +#5952 = ORIENTED_EDGE('',*,*,#5857,.T.); +#5953 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#5954,#5955) + ,(#5956,#5957) + ,(#5958,#5959) + ,(#5960,#5961) + ,(#5962,#5963) + ,(#5964,#5965) + ,(#5966,#5967) + ,(#5968,#5969) + ,(#5970,#5971) + ,(#5972,#5973) + ,(#5974,#5975 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.118271304836,0.236177533084,0.355662932949,0.475904164671, + 0.600127341711,0.728608116155,0.861313475674,1.),(0.,1.), + .UNSPECIFIED.); +#5954 = CARTESIAN_POINT('',(0.348636006976,0.56,0.115396799736)); +#5955 = CARTESIAN_POINT('',(0.348636006976,0.55,0.115396799736)); +#5956 = CARTESIAN_POINT('',(0.350595664629,0.56,0.116907633125)); +#5957 = CARTESIAN_POINT('',(0.350595664629,0.55,0.116907633125)); +#5958 = CARTESIAN_POINT('',(0.354508930917,0.56,0.119924636303)); +#5959 = CARTESIAN_POINT('',(0.354508930917,0.55,0.119924636303)); +#5960 = CARTESIAN_POINT('',(0.360885754027,0.56,0.123774799157)); +#5961 = CARTESIAN_POINT('',(0.360885754027,0.55,0.123774799157)); +#5962 = CARTESIAN_POINT('',(0.367592242635,0.56,0.127110901691)); +#5963 = CARTESIAN_POINT('',(0.367592242635,0.55,0.127110901691)); +#5964 = CARTESIAN_POINT('',(0.374773710057,0.56,0.129659271262)); +#5965 = CARTESIAN_POINT('',(0.374773710057,0.55,0.129659271262)); +#5966 = CARTESIAN_POINT('',(0.382275187103,0.56,0.131817037341)); +#5967 = CARTESIAN_POINT('',(0.382275187103,0.55,0.131817037341)); +#5968 = CARTESIAN_POINT('',(0.390217923626,0.56,0.133229089254)); +#5969 = CARTESIAN_POINT('',(0.390217923626,0.55,0.133229089254)); +#5970 = CARTESIAN_POINT('',(0.398531845337,0.56,0.134197906389)); +#5971 = CARTESIAN_POINT('',(0.398531845337,0.55,0.134197906389)); +#5972 = CARTESIAN_POINT('',(0.404208621685,0.56,0.134283399538)); +#5973 = CARTESIAN_POINT('',(0.404208621685,0.55,0.134283399538)); +#5974 = CARTESIAN_POINT('',(0.407109564668,0.56,0.134327088198)); +#5975 = CARTESIAN_POINT('',(0.407109564668,0.55,0.134327088198)); +#5976 = ADVANCED_FACE('',(#5977),#6003,.T.); +#5977 = FACE_BOUND('',#5978,.T.); +#5978 = EDGE_LOOP('',(#5979,#5980,#5988,#6002)); +#5979 = ORIENTED_EDGE('',*,*,#2313,.F.); +#5980 = ORIENTED_EDGE('',*,*,#5981,.F.); +#5981 = EDGE_CURVE('',#5982,#2306,#5984,.T.); +#5982 = VERTEX_POINT('',#5983); +#5983 = CARTESIAN_POINT('',(0.321222144797,0.56,6.701939589015E-02)); +#5984 = LINE('',#5985,#5986); +#5985 = CARTESIAN_POINT('',(0.321222144797,0.56,6.701939589015E-02)); +#5986 = VECTOR('',#5987,1.); +#5987 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#5988 = ORIENTED_EDGE('',*,*,#5989,.T.); +#5989 = EDGE_CURVE('',#5982,#5932,#5990,.T.); +#5990 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5991,#5992,#5993,#5994,#5995, + #5996,#5997,#5998,#5999,#6000,#6001),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.149770386032,0.291316409995,0.425966373105, + 0.55215957397,0.671527413524,0.786121628692,0.89532507307,1.), + .UNSPECIFIED.); +#5991 = CARTESIAN_POINT('',(0.321222144797,0.56,6.701939589015E-02)); +#5992 = CARTESIAN_POINT('',(0.322040473941,0.56,6.971429721701E-02)); +#5993 = CARTESIAN_POINT('',(0.323632195206,0.56,7.495611437882E-02)); +#5994 = CARTESIAN_POINT('',(0.32634162501,0.56,8.250014494631E-02)); +#5995 = CARTESIAN_POINT('',(0.329428452217,0.56,8.941595026879E-02)); +#5996 = CARTESIAN_POINT('',(0.332739908081,0.56,9.575426246659E-02)); +#5997 = CARTESIAN_POINT('',(0.336217752683,0.56,0.101577502713)); +#5998 = CARTESIAN_POINT('',(0.340109245197,0.56,0.106731689616)); +#5999 = CARTESIAN_POINT('',(0.344126159711,0.56,0.111443209837)); +#6000 = CARTESIAN_POINT('',(0.347154095046,0.56,0.114097671031)); +#6001 = CARTESIAN_POINT('',(0.348636006976,0.56,0.115396799736)); +#6002 = ORIENTED_EDGE('',*,*,#5931,.T.); +#6003 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#6004,#6005) + ,(#6006,#6007) + ,(#6008,#6009) + ,(#6010,#6011) + ,(#6012,#6013) + ,(#6014,#6015) + ,(#6016,#6017) + ,(#6018,#6019) + ,(#6020,#6021) + ,(#6022,#6023) + ,(#6024,#6025 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.149770386032,0.291316409995,0.425966373105,0.55215957397, + 0.671527413524,0.786121628692,0.89532507307,1.),(0.,1.), + .UNSPECIFIED.); +#6004 = CARTESIAN_POINT('',(0.321222144797,0.56,6.701939589015E-02)); +#6005 = CARTESIAN_POINT('',(0.321222144797,0.55,6.701939589015E-02)); +#6006 = CARTESIAN_POINT('',(0.322040473941,0.56,6.971429721701E-02)); +#6007 = CARTESIAN_POINT('',(0.322040473941,0.55,6.971429721701E-02)); +#6008 = CARTESIAN_POINT('',(0.323632195206,0.56,7.495611437882E-02)); +#6009 = CARTESIAN_POINT('',(0.323632195206,0.55,7.495611437882E-02)); +#6010 = CARTESIAN_POINT('',(0.32634162501,0.56,8.250014494631E-02)); +#6011 = CARTESIAN_POINT('',(0.32634162501,0.55,8.250014494631E-02)); +#6012 = CARTESIAN_POINT('',(0.329428452217,0.56,8.941595026879E-02)); +#6013 = CARTESIAN_POINT('',(0.329428452217,0.55,8.941595026879E-02)); +#6014 = CARTESIAN_POINT('',(0.332739908081,0.56,9.575426246659E-02)); +#6015 = CARTESIAN_POINT('',(0.332739908081,0.55,9.575426246659E-02)); +#6016 = CARTESIAN_POINT('',(0.336217752683,0.56,0.101577502713)); +#6017 = CARTESIAN_POINT('',(0.336217752683,0.55,0.101577502713)); +#6018 = CARTESIAN_POINT('',(0.340109245197,0.56,0.106731689616)); +#6019 = CARTESIAN_POINT('',(0.340109245197,0.55,0.106731689616)); +#6020 = CARTESIAN_POINT('',(0.344126159711,0.56,0.111443209837)); +#6021 = CARTESIAN_POINT('',(0.344126159711,0.55,0.111443209837)); +#6022 = CARTESIAN_POINT('',(0.347154095046,0.56,0.114097671031)); +#6023 = CARTESIAN_POINT('',(0.347154095046,0.55,0.114097671031)); +#6024 = CARTESIAN_POINT('',(0.348636006976,0.56,0.115396799736)); +#6025 = CARTESIAN_POINT('',(0.348636006976,0.55,0.115396799736)); +#6026 = ADVANCED_FACE('',(#6027),#6045,.T.); +#6027 = FACE_BOUND('',#6028,.T.); +#6028 = EDGE_LOOP('',(#6029,#6030,#6038,#6044)); +#6029 = ORIENTED_EDGE('',*,*,#2305,.F.); +#6030 = ORIENTED_EDGE('',*,*,#6031,.F.); +#6031 = EDGE_CURVE('',#6032,#2282,#6034,.T.); +#6032 = VERTEX_POINT('',#6033); +#6033 = CARTESIAN_POINT('',(0.289811888386,0.56,6.701939589015E-02)); +#6034 = LINE('',#6035,#6036); +#6035 = CARTESIAN_POINT('',(0.289811888386,0.56,6.701939589015E-02)); +#6036 = VECTOR('',#6037,1.); +#6037 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#6038 = ORIENTED_EDGE('',*,*,#6039,.T.); +#6039 = EDGE_CURVE('',#6032,#5982,#6040,.T.); +#6040 = LINE('',#6041,#6042); +#6041 = CARTESIAN_POINT('',(0.289811888386,0.56,6.701939589015E-02)); +#6042 = VECTOR('',#6043,1.); +#6043 = DIRECTION('',(1.,0.,0.)); +#6044 = ORIENTED_EDGE('',*,*,#5981,.T.); +#6045 = PLANE('',#6046); +#6046 = AXIS2_PLACEMENT_3D('',#6047,#6048,#6049); +#6047 = CARTESIAN_POINT('',(0.289811888386,0.56,6.701939589015E-02)); +#6048 = DIRECTION('',(0.,9.429630734102E-47,-1.)); +#6049 = DIRECTION('',(0.,1.,9.429630734102E-47)); +#6050 = ADVANCED_FACE('',(#6051),#6085,.T.); +#6051 = FACE_BOUND('',#6052,.T.); +#6052 = EDGE_LOOP('',(#6053,#6054,#6062,#6084)); +#6053 = ORIENTED_EDGE('',*,*,#2281,.F.); +#6054 = ORIENTED_EDGE('',*,*,#6055,.F.); +#6055 = EDGE_CURVE('',#6056,#2262,#6058,.T.); +#6056 = VERTEX_POINT('',#6057); +#6057 = CARTESIAN_POINT('',(0.406548667233,0.56,0.170224524095)); +#6058 = LINE('',#6059,#6060); +#6059 = CARTESIAN_POINT('',(0.406548667233,0.56,0.170224524095)); +#6060 = VECTOR('',#6061,1.); +#6061 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#6062 = ORIENTED_EDGE('',*,*,#6063,.T.); +#6063 = EDGE_CURVE('',#6056,#6032,#6064,.T.); +#6064 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#6065,#6066,#6067,#6068,#6069, + #6070,#6071,#6072,#6073,#6074,#6075,#6076,#6077,#6078,#6079,#6080, + #6081,#6082,#6083),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,6.55411703374E-02,0.128963167783,0.190377136189, + 0.250092361669,0.308548432459,0.366397963055,0.424542189267, + 0.483169996423,0.542243399831,0.601739352017,0.66250600225, + 0.724855513449,0.789127829281,0.856346399879,0.926295234987,1.), + .UNSPECIFIED.); +#6065 = CARTESIAN_POINT('',(0.406548667233,0.56,0.170224524095)); +#6066 = CARTESIAN_POINT('',(0.402806737204,0.56,0.170137702769)); +#6067 = CARTESIAN_POINT('',(0.395443866697,0.56,0.169966867352)); +#6068 = CARTESIAN_POINT('',(0.384619516859,0.56,0.168799007232)); +#6069 = CARTESIAN_POINT('',(0.374287346922,0.56,0.166666006708)); +#6070 = CARTESIAN_POINT('',(0.364433387136,0.56,0.163795676172)); +#6071 = CARTESIAN_POINT('',(0.355048883497,0.56,0.160156501964)); +#6072 = CARTESIAN_POINT('',(0.346162472979,0.56,0.155624632161)); +#6073 = CARTESIAN_POINT('',(0.337719483627,0.56,0.150293481956)); +#6074 = CARTESIAN_POINT('',(0.329799588513,0.56,0.144100123176)); +#6075 = CARTESIAN_POINT('',(0.322403731742,0.56,0.1371719892)); +#6076 = CARTESIAN_POINT('',(0.315728459319,0.56,0.129386088203)); +#6077 = CARTESIAN_POINT('',(0.309662480025,0.56,0.120886347811)); +#6078 = CARTESIAN_POINT('',(0.304368216154,0.56,0.111574042191)); +#6079 = CARTESIAN_POINT('',(0.299604520892,0.56,0.101569516463)); +#6080 = CARTESIAN_POINT('',(0.295686425228,0.56,9.074466662527E-02)); +#6081 = CARTESIAN_POINT('',(0.292237868364,0.56,7.919626442637E-02)); +#6082 = CARTESIAN_POINT('',(0.290634521939,0.56,7.114849040879E-02)); +#6083 = CARTESIAN_POINT('',(0.289811888386,0.56,6.701939589015E-02)); +#6084 = ORIENTED_EDGE('',*,*,#6031,.T.); +#6085 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#6086,#6087) + ,(#6088,#6089) + ,(#6090,#6091) + ,(#6092,#6093) + ,(#6094,#6095) + ,(#6096,#6097) + ,(#6098,#6099) + ,(#6100,#6101) + ,(#6102,#6103) + ,(#6104,#6105) + ,(#6106,#6107) + ,(#6108,#6109) + ,(#6110,#6111) + ,(#6112,#6113) + ,(#6114,#6115) + ,(#6116,#6117) + ,(#6118,#6119) + ,(#6120,#6121) + ,(#6122,#6123 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.55411703374E-02,0.128963167783,0.190377136189, + 0.250092361669,0.308548432459,0.366397963055,0.424542189267, + 0.483169996423,0.542243399831,0.601739352017,0.66250600225, + 0.724855513449,0.789127829281,0.856346399879,0.926295234987,1.),(0., + 1.),.UNSPECIFIED.); +#6086 = CARTESIAN_POINT('',(0.406548667233,0.56,0.170224524095)); +#6087 = CARTESIAN_POINT('',(0.406548667233,0.55,0.170224524095)); +#6088 = CARTESIAN_POINT('',(0.402806737204,0.56,0.170137702769)); +#6089 = CARTESIAN_POINT('',(0.402806737204,0.55,0.170137702769)); +#6090 = CARTESIAN_POINT('',(0.395443866697,0.56,0.169966867352)); +#6091 = CARTESIAN_POINT('',(0.395443866697,0.55,0.169966867352)); +#6092 = CARTESIAN_POINT('',(0.384619516859,0.56,0.168799007232)); +#6093 = CARTESIAN_POINT('',(0.384619516859,0.55,0.168799007232)); +#6094 = CARTESIAN_POINT('',(0.374287346922,0.56,0.166666006708)); +#6095 = CARTESIAN_POINT('',(0.374287346922,0.55,0.166666006708)); +#6096 = CARTESIAN_POINT('',(0.364433387136,0.56,0.163795676172)); +#6097 = CARTESIAN_POINT('',(0.364433387136,0.55,0.163795676172)); +#6098 = CARTESIAN_POINT('',(0.355048883497,0.56,0.160156501964)); +#6099 = CARTESIAN_POINT('',(0.355048883497,0.55,0.160156501964)); +#6100 = CARTESIAN_POINT('',(0.346162472979,0.56,0.155624632161)); +#6101 = CARTESIAN_POINT('',(0.346162472979,0.55,0.155624632161)); +#6102 = CARTESIAN_POINT('',(0.337719483627,0.56,0.150293481956)); +#6103 = CARTESIAN_POINT('',(0.337719483627,0.55,0.150293481956)); +#6104 = CARTESIAN_POINT('',(0.329799588513,0.56,0.144100123176)); +#6105 = CARTESIAN_POINT('',(0.329799588513,0.55,0.144100123176)); +#6106 = CARTESIAN_POINT('',(0.322403731742,0.56,0.1371719892)); +#6107 = CARTESIAN_POINT('',(0.322403731742,0.55,0.1371719892)); +#6108 = CARTESIAN_POINT('',(0.315728459319,0.56,0.129386088203)); +#6109 = CARTESIAN_POINT('',(0.315728459319,0.55,0.129386088203)); +#6110 = CARTESIAN_POINT('',(0.309662480025,0.56,0.120886347811)); +#6111 = CARTESIAN_POINT('',(0.309662480025,0.55,0.120886347811)); +#6112 = CARTESIAN_POINT('',(0.304368216154,0.56,0.111574042191)); +#6113 = CARTESIAN_POINT('',(0.304368216154,0.55,0.111574042191)); +#6114 = CARTESIAN_POINT('',(0.299604520892,0.56,0.101569516463)); +#6115 = CARTESIAN_POINT('',(0.299604520892,0.55,0.101569516463)); +#6116 = CARTESIAN_POINT('',(0.295686425228,0.56,9.074466662527E-02)); +#6117 = CARTESIAN_POINT('',(0.295686425228,0.55,9.074466662527E-02)); +#6118 = CARTESIAN_POINT('',(0.292237868364,0.56,7.919626442637E-02)); +#6119 = CARTESIAN_POINT('',(0.292237868364,0.55,7.919626442637E-02)); +#6120 = CARTESIAN_POINT('',(0.290634521939,0.56,7.114849040879E-02)); +#6121 = CARTESIAN_POINT('',(0.290634521939,0.55,7.114849040879E-02)); +#6122 = CARTESIAN_POINT('',(0.289811888386,0.56,6.701939589015E-02)); +#6123 = CARTESIAN_POINT('',(0.289811888386,0.55,6.701939589015E-02)); +#6124 = ADVANCED_FACE('',(#6125),#6155,.T.); +#6125 = FACE_BOUND('',#6126,.T.); +#6126 = EDGE_LOOP('',(#6127,#6128,#6136,#6154)); +#6127 = ORIENTED_EDGE('',*,*,#2261,.F.); +#6128 = ORIENTED_EDGE('',*,*,#6129,.F.); +#6129 = EDGE_CURVE('',#6130,#2246,#6132,.T.); +#6130 = VERTEX_POINT('',#6131); +#6131 = CARTESIAN_POINT('',(0.527632401207,0.56,5.727380294143E-02)); +#6132 = LINE('',#6133,#6134); +#6133 = CARTESIAN_POINT('',(0.527632401207,0.56,5.727380294143E-02)); +#6134 = VECTOR('',#6135,1.); +#6135 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#6136 = ORIENTED_EDGE('',*,*,#6137,.T.); +#6137 = EDGE_CURVE('',#6130,#6056,#6138,.T.); +#6138 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#6139,#6140,#6141,#6142,#6143, + #6144,#6145,#6146,#6147,#6148,#6149,#6150,#6151,#6152,#6153), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 7.964825118023E-02,0.158921676418,0.239619494737,0.322609429819, + 0.406034636618,0.487602095492,0.569684626596,0.653036145009, + 0.737435717722,0.822477815856,0.909747655118,1.),.UNSPECIFIED.); +#6139 = CARTESIAN_POINT('',(0.527632401207,0.56,5.727380294143E-02)); +#6140 = CARTESIAN_POINT('',(0.527452949855,0.56,6.217477506016E-02)); +#6141 = CARTESIAN_POINT('',(0.527094891652,0.56,7.195365524453E-02)); +#6142 = CARTESIAN_POINT('',(0.523894484221,0.56,8.640112740787E-02)); +#6143 = CARTESIAN_POINT('',(0.518933160152,0.56,0.100523677635)); +#6144 = CARTESIAN_POINT('',(0.511887466555,0.56,0.11403116156)); +#6145 = CARTESIAN_POINT('',(0.503300715672,0.56,0.12666919966)); +#6146 = CARTESIAN_POINT('',(0.493084983255,0.56,0.137976830564)); +#6147 = CARTESIAN_POINT('',(0.481356342414,0.56,0.147696690997)); +#6148 = CARTESIAN_POINT('',(0.468275777529,0.56,0.155817713803)); +#6149 = CARTESIAN_POINT('',(0.45410406468,0.56,0.162309506022)); +#6150 = CARTESIAN_POINT('',(0.43894650548,0.56,0.166815250307)); +#6151 = CARTESIAN_POINT('',(0.423021500084,0.56,0.169749850274)); +#6152 = CARTESIAN_POINT('',(0.412100770329,0.56,0.170064537163)); +#6153 = CARTESIAN_POINT('',(0.406548667233,0.56,0.170224524095)); +#6154 = ORIENTED_EDGE('',*,*,#6055,.T.); +#6155 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#6156,#6157) + ,(#6158,#6159) + ,(#6160,#6161) + ,(#6162,#6163) + ,(#6164,#6165) + ,(#6166,#6167) + ,(#6168,#6169) + ,(#6170,#6171) + ,(#6172,#6173) + ,(#6174,#6175) + ,(#6176,#6177) + ,(#6178,#6179) + ,(#6180,#6181) + ,(#6182,#6183) + ,(#6184,#6185 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(2,2),(0., + 7.964825118023E-02,0.158921676418,0.239619494737,0.322609429819, + 0.406034636618,0.487602095492,0.569684626596,0.653036145009, + 0.737435717722,0.822477815856,0.909747655118,1.),(0.,1.), + .UNSPECIFIED.); +#6156 = CARTESIAN_POINT('',(0.527632401207,0.56,5.727380294143E-02)); +#6157 = CARTESIAN_POINT('',(0.527632401207,0.55,5.727380294143E-02)); +#6158 = CARTESIAN_POINT('',(0.527452949855,0.56,6.217477506016E-02)); +#6159 = CARTESIAN_POINT('',(0.527452949855,0.55,6.217477506016E-02)); +#6160 = CARTESIAN_POINT('',(0.527094891652,0.56,7.195365524453E-02)); +#6161 = CARTESIAN_POINT('',(0.527094891652,0.55,7.195365524453E-02)); +#6162 = CARTESIAN_POINT('',(0.523894484221,0.56,8.640112740787E-02)); +#6163 = CARTESIAN_POINT('',(0.523894484221,0.55,8.640112740787E-02)); +#6164 = CARTESIAN_POINT('',(0.518933160152,0.56,0.100523677635)); +#6165 = CARTESIAN_POINT('',(0.518933160152,0.55,0.100523677635)); +#6166 = CARTESIAN_POINT('',(0.511887466555,0.56,0.11403116156)); +#6167 = CARTESIAN_POINT('',(0.511887466555,0.55,0.11403116156)); +#6168 = CARTESIAN_POINT('',(0.503300715672,0.56,0.12666919966)); +#6169 = CARTESIAN_POINT('',(0.503300715672,0.55,0.12666919966)); +#6170 = CARTESIAN_POINT('',(0.493084983255,0.56,0.137976830564)); +#6171 = CARTESIAN_POINT('',(0.493084983255,0.55,0.137976830564)); +#6172 = CARTESIAN_POINT('',(0.481356342414,0.56,0.147696690997)); +#6173 = CARTESIAN_POINT('',(0.481356342414,0.55,0.147696690997)); +#6174 = CARTESIAN_POINT('',(0.468275777529,0.56,0.155817713803)); +#6175 = CARTESIAN_POINT('',(0.468275777529,0.55,0.155817713803)); +#6176 = CARTESIAN_POINT('',(0.45410406468,0.56,0.162309506022)); +#6177 = CARTESIAN_POINT('',(0.45410406468,0.55,0.162309506022)); +#6178 = CARTESIAN_POINT('',(0.43894650548,0.56,0.166815250307)); +#6179 = CARTESIAN_POINT('',(0.43894650548,0.55,0.166815250307)); +#6180 = CARTESIAN_POINT('',(0.423021500084,0.56,0.169749850274)); +#6181 = CARTESIAN_POINT('',(0.423021500084,0.55,0.169749850274)); +#6182 = CARTESIAN_POINT('',(0.412100770329,0.56,0.170064537163)); +#6183 = CARTESIAN_POINT('',(0.412100770329,0.55,0.170064537163)); +#6184 = CARTESIAN_POINT('',(0.406548667233,0.56,0.170224524095)); +#6185 = CARTESIAN_POINT('',(0.406548667233,0.55,0.170224524095)); +#6186 = ADVANCED_FACE('',(#6187),#6213,.T.); +#6187 = FACE_BOUND('',#6188,.T.); +#6188 = EDGE_LOOP('',(#6189,#6190,#6198,#6212)); +#6189 = ORIENTED_EDGE('',*,*,#2245,.F.); +#6190 = ORIENTED_EDGE('',*,*,#6191,.F.); +#6191 = EDGE_CURVE('',#6192,#2234,#6194,.T.); +#6192 = VERTEX_POINT('',#6193); +#6193 = CARTESIAN_POINT('',(0.50673897172,0.56,-4.915700263697E-03)); +#6194 = LINE('',#6195,#6196); +#6195 = CARTESIAN_POINT('',(0.50673897172,0.56,-4.915700263697E-03)); +#6196 = VECTOR('',#6197,1.); +#6197 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#6198 = ORIENTED_EDGE('',*,*,#6199,.T.); +#6199 = EDGE_CURVE('',#6192,#6130,#6200,.T.); +#6200 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#6201,#6202,#6203,#6204,#6205, + #6206,#6207,#6208,#6209,#6210,#6211),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.128135509797,0.254172711902,0.378111645139, + 0.501712263007,0.623986309368,0.747095613618,0.87287463665,1.), + .UNSPECIFIED.); +#6201 = CARTESIAN_POINT('',(0.50673897172,0.56,-4.915700263697E-03)); +#6202 = CARTESIAN_POINT('',(0.508423105955,0.56,-2.609925102831E-03)); +#6203 = CARTESIAN_POINT('',(0.511763795561,0.56,1.963866554147E-03)); +#6204 = CARTESIAN_POINT('',(0.515887348937,0.56,9.317509142551E-03)); +#6205 = CARTESIAN_POINT('',(0.519628260367,0.56,1.675265807076E-02)); +#6206 = CARTESIAN_POINT('',(0.5225432823,0.56,2.446859867336E-02)); +#6207 = CARTESIAN_POINT('',(0.524800668983,0.56,3.237590004318E-02)); +#6208 = CARTESIAN_POINT('',(0.526414272207,0.56,4.048813964901E-02)); +#6209 = CARTESIAN_POINT('',(0.527416686296,0.56,4.881194189145E-02)); +#6210 = CARTESIAN_POINT('',(0.527560241497,0.56,5.444318991349E-02)); +#6211 = CARTESIAN_POINT('',(0.527632401207,0.56,5.727380294143E-02)); +#6212 = ORIENTED_EDGE('',*,*,#6129,.T.); +#6213 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#6214,#6215) + ,(#6216,#6217) + ,(#6218,#6219) + ,(#6220,#6221) + ,(#6222,#6223) + ,(#6224,#6225) + ,(#6226,#6227) + ,(#6228,#6229) + ,(#6230,#6231) + ,(#6232,#6233) + ,(#6234,#6235 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.128135509797,0.254172711902,0.378111645139,0.501712263007, + 0.623986309368,0.747095613618,0.87287463665,1.),(0.,1.), + .UNSPECIFIED.); +#6214 = CARTESIAN_POINT('',(0.50673897172,0.56,-4.915700263697E-03)); +#6215 = CARTESIAN_POINT('',(0.50673897172,0.55,-4.915700263697E-03)); +#6216 = CARTESIAN_POINT('',(0.508423105955,0.56,-2.609925102831E-03)); +#6217 = CARTESIAN_POINT('',(0.508423105955,0.55,-2.609925102831E-03)); +#6218 = CARTESIAN_POINT('',(0.511763795561,0.56,1.963866554147E-03)); +#6219 = CARTESIAN_POINT('',(0.511763795561,0.55,1.963866554147E-03)); +#6220 = CARTESIAN_POINT('',(0.515887348937,0.56,9.317509142551E-03)); +#6221 = CARTESIAN_POINT('',(0.515887348937,0.55,9.317509142551E-03)); +#6222 = CARTESIAN_POINT('',(0.519628260367,0.56,1.675265807076E-02)); +#6223 = CARTESIAN_POINT('',(0.519628260367,0.55,1.675265807076E-02)); +#6224 = CARTESIAN_POINT('',(0.5225432823,0.56,2.446859867336E-02)); +#6225 = CARTESIAN_POINT('',(0.5225432823,0.55,2.446859867336E-02)); +#6226 = CARTESIAN_POINT('',(0.524800668983,0.56,3.237590004318E-02)); +#6227 = CARTESIAN_POINT('',(0.524800668983,0.55,3.237590004318E-02)); +#6228 = CARTESIAN_POINT('',(0.526414272207,0.56,4.048813964901E-02)); +#6229 = CARTESIAN_POINT('',(0.526414272207,0.55,4.048813964901E-02)); +#6230 = CARTESIAN_POINT('',(0.527416686296,0.56,4.881194189145E-02)); +#6231 = CARTESIAN_POINT('',(0.527416686296,0.55,4.881194189145E-02)); +#6232 = CARTESIAN_POINT('',(0.527560241497,0.56,5.444318991349E-02)); +#6233 = CARTESIAN_POINT('',(0.527560241497,0.55,5.444318991349E-02)); +#6234 = CARTESIAN_POINT('',(0.527632401207,0.56,5.727380294143E-02)); +#6235 = CARTESIAN_POINT('',(0.527632401207,0.55,5.727380294143E-02)); +#6236 = ADVANCED_FACE('',(#6237),#6259,.T.); +#6237 = FACE_BOUND('',#6238,.T.); +#6238 = EDGE_LOOP('',(#6239,#6240,#6248,#6258)); +#6239 = ORIENTED_EDGE('',*,*,#2233,.F.); +#6240 = ORIENTED_EDGE('',*,*,#6241,.F.); +#6241 = EDGE_CURVE('',#6242,#2218,#6244,.T.); +#6242 = VERTEX_POINT('',#6243); +#6243 = CARTESIAN_POINT('',(0.468808282617,0.56,-3.478348872524E-02)); +#6244 = LINE('',#6245,#6246); +#6245 = CARTESIAN_POINT('',(0.468808282617,0.56,-3.478348872524E-02)); +#6246 = VECTOR('',#6247,1.); +#6247 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#6248 = ORIENTED_EDGE('',*,*,#6249,.T.); +#6249 = EDGE_CURVE('',#6242,#6192,#6250,.T.); +#6250 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#6251,#6252,#6253,#6254,#6255, + #6256,#6257),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0.,0.253879600327, + 0.503008917278,0.75029108069,1.),.UNSPECIFIED.); +#6251 = CARTESIAN_POINT('',(0.468808282617,0.56,-3.478348872524E-02)); +#6252 = CARTESIAN_POINT('',(0.472531458074,0.56,-3.298567157109E-02)); +#6253 = CARTESIAN_POINT('',(0.479908145501,0.56,-2.942367581007E-02)); +#6254 = CARTESIAN_POINT('',(0.489963198454,0.56,-2.243810005834E-02)); +#6255 = CARTESIAN_POINT('',(0.49909098599,0.56,-1.437246532295E-02)); +#6256 = CARTESIAN_POINT('',(0.504181357891,0.56,-8.078200031596E-03)); +#6257 = CARTESIAN_POINT('',(0.50673897172,0.56,-4.915700263697E-03)); +#6258 = ORIENTED_EDGE('',*,*,#6191,.T.); +#6259 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#6260,#6261) + ,(#6262,#6263) + ,(#6264,#6265) + ,(#6266,#6267) + ,(#6268,#6269) + ,(#6270,#6271) + ,(#6272,#6273 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,4),(2,2),(0.,0.253879600327, + 0.503008917278,0.75029108069,1.),(0.,1.),.UNSPECIFIED.); +#6260 = CARTESIAN_POINT('',(0.468808282617,0.56,-3.478348872524E-02)); +#6261 = CARTESIAN_POINT('',(0.468808282617,0.55,-3.478348872524E-02)); +#6262 = CARTESIAN_POINT('',(0.472531458074,0.56,-3.298567157109E-02)); +#6263 = CARTESIAN_POINT('',(0.472531458074,0.55,-3.298567157109E-02)); +#6264 = CARTESIAN_POINT('',(0.479908145501,0.56,-2.942367581007E-02)); +#6265 = CARTESIAN_POINT('',(0.479908145501,0.55,-2.942367581007E-02)); +#6266 = CARTESIAN_POINT('',(0.489963198454,0.56,-2.243810005834E-02)); +#6267 = CARTESIAN_POINT('',(0.489963198454,0.55,-2.243810005834E-02)); +#6268 = CARTESIAN_POINT('',(0.49909098599,0.56,-1.437246532295E-02)); +#6269 = CARTESIAN_POINT('',(0.49909098599,0.55,-1.437246532295E-02)); +#6270 = CARTESIAN_POINT('',(0.504181357891,0.56,-8.078200031596E-03)); +#6271 = CARTESIAN_POINT('',(0.504181357891,0.55,-8.078200031596E-03)); +#6272 = CARTESIAN_POINT('',(0.50673897172,0.56,-4.915700263697E-03)); +#6273 = CARTESIAN_POINT('',(0.50673897172,0.55,-4.915700263697E-03)); +#6274 = ADVANCED_FACE('',(#6275),#6301,.T.); +#6275 = FACE_BOUND('',#6276,.T.); +#6276 = EDGE_LOOP('',(#6277,#6278,#6286,#6300)); +#6277 = ORIENTED_EDGE('',*,*,#2217,.F.); +#6278 = ORIENTED_EDGE('',*,*,#6279,.F.); +#6279 = EDGE_CURVE('',#6280,#2198,#6282,.T.); +#6280 = VERTEX_POINT('',#6281); +#6281 = CARTESIAN_POINT('',(0.509683683258,0.56,-0.106788697059)); +#6282 = LINE('',#6283,#6284); +#6283 = CARTESIAN_POINT('',(0.509683683258,0.56,-0.106788697059)); +#6284 = VECTOR('',#6285,1.); +#6285 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#6286 = ORIENTED_EDGE('',*,*,#6287,.T.); +#6287 = EDGE_CURVE('',#6280,#6242,#6288,.T.); +#6288 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#6289,#6290,#6291,#6292,#6293, + #6294,#6295,#6296,#6297,#6298,#6299),.UNSPECIFIED.,.F.,.F.,(4,1,1,1, + 1,1,1,1,4),(0.,0.128067548596,0.250608318868,0.370630165915, + 0.49007224673,0.610374764155,0.734313069912,0.863216504245,1.), + .UNSPECIFIED.); +#6289 = CARTESIAN_POINT('',(0.509683683258,0.56,-0.106788697059)); +#6290 = CARTESIAN_POINT('',(0.509567324153,0.56,-0.103088017588)); +#6291 = CARTESIAN_POINT('',(0.509339627442,0.56,-9.58463621417E-02)); +#6292 = CARTESIAN_POINT('',(0.507406256886,0.56,-8.527421242788E-02)); +#6293 = CARTESIAN_POINT('',(0.504152630598,0.56,-7.531005239966E-02)); +#6294 = CARTESIAN_POINT('',(0.499645654341,0.56,-6.591193618731E-02)); +#6295 = CARTESIAN_POINT('',(0.493811499317,0.56,-5.7139452205E-02)); +#6296 = CARTESIAN_POINT('',(0.486744229628,0.56,-4.897286311895E-02)); +#6297 = CARTESIAN_POINT('',(0.47839396345,0.56,-4.137594730613E-02)); +#6298 = CARTESIAN_POINT('',(0.472066069648,0.56,-3.702400000858E-02)); +#6299 = CARTESIAN_POINT('',(0.468808282617,0.56,-3.478348872524E-02)); +#6300 = ORIENTED_EDGE('',*,*,#6241,.T.); +#6301 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#6302,#6303) + ,(#6304,#6305) + ,(#6306,#6307) + ,(#6308,#6309) + ,(#6310,#6311) + ,(#6312,#6313) + ,(#6314,#6315) + ,(#6316,#6317) + ,(#6318,#6319) + ,(#6320,#6321) + ,(#6322,#6323 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.128067548596,0.250608318868,0.370630165915,0.49007224673, + 0.610374764155,0.734313069912,0.863216504245,1.),(0.,1.), + .UNSPECIFIED.); +#6302 = CARTESIAN_POINT('',(0.509683683258,0.56,-0.106788697059)); +#6303 = CARTESIAN_POINT('',(0.509683683258,0.55,-0.106788697059)); +#6304 = CARTESIAN_POINT('',(0.509567324153,0.56,-0.103088017588)); +#6305 = CARTESIAN_POINT('',(0.509567324153,0.55,-0.103088017588)); +#6306 = CARTESIAN_POINT('',(0.509339627442,0.56,-9.58463621417E-02)); +#6307 = CARTESIAN_POINT('',(0.509339627442,0.55,-9.58463621417E-02)); +#6308 = CARTESIAN_POINT('',(0.507406256886,0.56,-8.527421242788E-02)); +#6309 = CARTESIAN_POINT('',(0.507406256886,0.55,-8.527421242788E-02)); +#6310 = CARTESIAN_POINT('',(0.504152630598,0.56,-7.531005239966E-02)); +#6311 = CARTESIAN_POINT('',(0.504152630598,0.55,-7.531005239966E-02)); +#6312 = CARTESIAN_POINT('',(0.499645654341,0.56,-6.591193618731E-02)); +#6313 = CARTESIAN_POINT('',(0.499645654341,0.55,-6.591193618731E-02)); +#6314 = CARTESIAN_POINT('',(0.493811499317,0.56,-5.7139452205E-02)); +#6315 = CARTESIAN_POINT('',(0.493811499317,0.55,-5.7139452205E-02)); +#6316 = CARTESIAN_POINT('',(0.486744229628,0.56,-4.897286311895E-02)); +#6317 = CARTESIAN_POINT('',(0.486744229628,0.55,-4.897286311895E-02)); +#6318 = CARTESIAN_POINT('',(0.47839396345,0.56,-4.137594730613E-02)); +#6319 = CARTESIAN_POINT('',(0.47839396345,0.55,-4.137594730613E-02)); +#6320 = CARTESIAN_POINT('',(0.472066069648,0.56,-3.702400000858E-02)); +#6321 = CARTESIAN_POINT('',(0.472066069648,0.55,-3.702400000858E-02)); +#6322 = CARTESIAN_POINT('',(0.468808282617,0.56,-3.478348872524E-02)); +#6323 = CARTESIAN_POINT('',(0.468808282617,0.55,-3.478348872524E-02)); +#6324 = ADVANCED_FACE('',(#6325),#6355,.T.); +#6325 = FACE_BOUND('',#6326,.T.); +#6326 = EDGE_LOOP('',(#6327,#6328,#6336,#6354)); +#6327 = ORIENTED_EDGE('',*,*,#2197,.F.); +#6328 = ORIENTED_EDGE('',*,*,#6329,.F.); +#6329 = EDGE_CURVE('',#6330,#2174,#6332,.T.); +#6330 = VERTEX_POINT('',#6331); +#6331 = CARTESIAN_POINT('',(0.407460125566,0.56,-0.197724193853)); +#6332 = LINE('',#6333,#6334); +#6333 = CARTESIAN_POINT('',(0.407460125566,0.56,-0.197724193853)); +#6334 = VECTOR('',#6335,1.); +#6335 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#6336 = ORIENTED_EDGE('',*,*,#6337,.T.); +#6337 = EDGE_CURVE('',#6330,#6280,#6338,.T.); +#6338 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#6339,#6340,#6341,#6342,#6343, + #6344,#6345,#6346,#6347,#6348,#6349,#6350,#6351,#6352,#6353), + .UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(0., + 9.025424934268E-02,0.178539791529,0.266093033854,0.354630977957, + 0.441886153351,0.525746915164,0.608113633604,0.690197272828, + 0.77082148433,0.848326181255,0.924011740025,1.),.UNSPECIFIED.); +#6339 = CARTESIAN_POINT('',(0.407460125566,0.56,-0.197724193853)); +#6340 = CARTESIAN_POINT('',(0.412028399773,0.56,-0.197586270829)); +#6341 = CARTESIAN_POINT('',(0.421065300868,0.56,-0.197313433281)); +#6342 = CARTESIAN_POINT('',(0.434341605563,0.56,-0.194821989634)); +#6343 = CARTESIAN_POINT('',(0.447144287473,0.56,-0.190879476398)); +#6344 = CARTESIAN_POINT('',(0.459333212255,0.56,-0.185432103684)); +#6345 = CARTESIAN_POINT('',(0.470655055514,0.56,-0.178713372368)); +#6346 = CARTESIAN_POINT('',(0.480728674189,0.56,-0.170716898679)); +#6347 = CARTESIAN_POINT('',(0.489417525269,0.56,-0.16159696853)); +#6348 = CARTESIAN_POINT('',(0.496706963035,0.56,-0.151523712098)); +#6349 = CARTESIAN_POINT('',(0.502414462941,0.56,-0.140758161159)); +#6350 = CARTESIAN_POINT('',(0.506623100289,0.56,-0.129678145445)); +#6351 = CARTESIAN_POINT('',(0.509185268389,0.56,-0.118309948306)); +#6352 = CARTESIAN_POINT('',(0.50951732407,0.56,-0.110634220388)); +#6353 = CARTESIAN_POINT('',(0.509683683258,0.56,-0.106788697059)); +#6354 = ORIENTED_EDGE('',*,*,#6279,.T.); +#6355 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#6356,#6357) + ,(#6358,#6359) + ,(#6360,#6361) + ,(#6362,#6363) + ,(#6364,#6365) + ,(#6366,#6367) + ,(#6368,#6369) + ,(#6370,#6371) + ,(#6372,#6373) + ,(#6374,#6375) + ,(#6376,#6377) + ,(#6378,#6379) + ,(#6380,#6381) + ,(#6382,#6383) + ,(#6384,#6385 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,4),(2,2),(0., + 9.025424934268E-02,0.178539791529,0.266093033854,0.354630977957, + 0.441886153351,0.525746915164,0.608113633604,0.690197272828, + 0.77082148433,0.848326181255,0.924011740025,1.),(0.,1.), + .UNSPECIFIED.); +#6356 = CARTESIAN_POINT('',(0.407460125566,0.56,-0.197724193853)); +#6357 = CARTESIAN_POINT('',(0.407460125566,0.55,-0.197724193853)); +#6358 = CARTESIAN_POINT('',(0.412028399773,0.56,-0.197586270829)); +#6359 = CARTESIAN_POINT('',(0.412028399773,0.55,-0.197586270829)); +#6360 = CARTESIAN_POINT('',(0.421065300868,0.56,-0.197313433281)); +#6361 = CARTESIAN_POINT('',(0.421065300868,0.55,-0.197313433281)); +#6362 = CARTESIAN_POINT('',(0.434341605563,0.56,-0.194821989634)); +#6363 = CARTESIAN_POINT('',(0.434341605563,0.55,-0.194821989634)); +#6364 = CARTESIAN_POINT('',(0.447144287473,0.56,-0.190879476398)); +#6365 = CARTESIAN_POINT('',(0.447144287473,0.55,-0.190879476398)); +#6366 = CARTESIAN_POINT('',(0.459333212255,0.56,-0.185432103684)); +#6367 = CARTESIAN_POINT('',(0.459333212255,0.55,-0.185432103684)); +#6368 = CARTESIAN_POINT('',(0.470655055514,0.56,-0.178713372368)); +#6369 = CARTESIAN_POINT('',(0.470655055514,0.55,-0.178713372368)); +#6370 = CARTESIAN_POINT('',(0.480728674189,0.56,-0.170716898679)); +#6371 = CARTESIAN_POINT('',(0.480728674189,0.55,-0.170716898679)); +#6372 = CARTESIAN_POINT('',(0.489417525269,0.56,-0.16159696853)); +#6373 = CARTESIAN_POINT('',(0.489417525269,0.55,-0.16159696853)); +#6374 = CARTESIAN_POINT('',(0.496706963035,0.56,-0.151523712098)); +#6375 = CARTESIAN_POINT('',(0.496706963035,0.55,-0.151523712098)); +#6376 = CARTESIAN_POINT('',(0.502414462941,0.56,-0.140758161159)); +#6377 = CARTESIAN_POINT('',(0.502414462941,0.55,-0.140758161159)); +#6378 = CARTESIAN_POINT('',(0.506623100289,0.56,-0.129678145445)); +#6379 = CARTESIAN_POINT('',(0.506623100289,0.55,-0.129678145445)); +#6380 = CARTESIAN_POINT('',(0.509185268389,0.56,-0.118309948306)); +#6381 = CARTESIAN_POINT('',(0.509185268389,0.55,-0.118309948306)); +#6382 = CARTESIAN_POINT('',(0.50951732407,0.56,-0.110634220388)); +#6383 = CARTESIAN_POINT('',(0.50951732407,0.55,-0.110634220388)); +#6384 = CARTESIAN_POINT('',(0.509683683258,0.56,-0.106788697059)); +#6385 = CARTESIAN_POINT('',(0.509683683258,0.55,-0.106788697059)); +#6386 = ADVANCED_FACE('',(#6387),#6421,.T.); +#6387 = FACE_BOUND('',#6388,.T.); +#6388 = EDGE_LOOP('',(#6389,#6390,#6398,#6420)); +#6389 = ORIENTED_EDGE('',*,*,#2173,.F.); +#6390 = ORIENTED_EDGE('',*,*,#6391,.F.); +#6391 = EDGE_CURVE('',#6392,#2166,#6394,.T.); +#6392 = VERTEX_POINT('',#6393); +#6393 = CARTESIAN_POINT('',(0.303273426848,0.56,-0.10798060411)); +#6394 = LINE('',#6395,#6396); +#6395 = CARTESIAN_POINT('',(0.303273426848,0.56,-0.10798060411)); +#6396 = VECTOR('',#6397,1.); +#6397 = DIRECTION('',(-3.761581922631E-31,-1.,-9.429630734102E-47)); +#6398 = ORIENTED_EDGE('',*,*,#6399,.T.); +#6399 = EDGE_CURVE('',#6392,#6330,#6400,.T.); +#6400 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#6401,#6402,#6403,#6404,#6405, + #6406,#6407,#6408,#6409,#6410,#6411,#6412,#6413,#6414,#6415,#6416, + #6417,#6418,#6419),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,4),(0.,7.262534608344E-02,0.141976611326,0.208984928419, + 0.273956870364,0.336889347397,0.398744953495,0.460115885279, + 0.52082492259,0.580994458632,0.640151927601,0.698622450756, + 0.757271080927,0.816426694005,0.876254048203,0.937165293063,1.), + .UNSPECIFIED.); +#6401 = CARTESIAN_POINT('',(0.303273426848,0.56,-0.10798060411)); +#6402 = CARTESIAN_POINT('',(0.304124381916,0.56,-0.111503852507)); +#6403 = CARTESIAN_POINT('',(0.305787929472,0.56,-0.118391514946)); +#6404 = CARTESIAN_POINT('',(0.309257686819,0.56,-0.128232241031)); +#6405 = CARTESIAN_POINT('',(0.313037612338,0.56,-0.13754459317)); +#6406 = CARTESIAN_POINT('',(0.317576522795,0.56,-0.14615420054)); +#6407 = CARTESIAN_POINT('',(0.322527398217,0.56,-0.154234090813)); +#6408 = CARTESIAN_POINT('',(0.328199670371,0.56,-0.16160100326)); +#6409 = CARTESIAN_POINT('',(0.334331642627,0.56,-0.168442299807)); +#6410 = CARTESIAN_POINT('',(0.341114137557,0.56,-0.174513623562)); +#6411 = CARTESIAN_POINT('',(0.348227003722,0.56,-0.180011396483)); +#6412 = CARTESIAN_POINT('',(0.355770465697,0.56,-0.184698902217)); +#6413 = CARTESIAN_POINT('',(0.363592755064,0.56,-0.188731317504)); +#6414 = CARTESIAN_POINT('',(0.371748068359,0.56,-0.192053340691)); +#6415 = CARTESIAN_POINT('',(0.380260685528,0.56,-0.194555893058)); +#6416 = CARTESIAN_POINT('',(0.38905364786,0.56,-0.196371573617)); +#6417 = CARTESIAN_POINT('',(0.398149997871,0.56,-0.197550685038)); +#6418 = CARTESIAN_POINT('',(0.404324756931,0.56,-0.197665761347)); +#6419 = CARTESIAN_POINT('',(0.407460125566,0.56,-0.197724193853)); +#6420 = ORIENTED_EDGE('',*,*,#6329,.T.); +#6421 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#6422,#6423) + ,(#6424,#6425) + ,(#6426,#6427) + ,(#6428,#6429) + ,(#6430,#6431) + ,(#6432,#6433) + ,(#6434,#6435) + ,(#6436,#6437) + ,(#6438,#6439) + ,(#6440,#6441) + ,(#6442,#6443) + ,(#6444,#6445) + ,(#6446,#6447) + ,(#6448,#6449) + ,(#6450,#6451) + ,(#6452,#6453) + ,(#6454,#6455) + ,(#6456,#6457) + ,(#6458,#6459 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,7.262534608344E-02,0.141976611326,0.208984928419, + 0.273956870364,0.336889347397,0.398744953495,0.460115885279, + 0.52082492259,0.580994458632,0.640151927601,0.698622450756, + 0.757271080927,0.816426694005,0.876254048203,0.937165293063,1.),(0., + 1.),.UNSPECIFIED.); +#6422 = CARTESIAN_POINT('',(0.303273426848,0.56,-0.10798060411)); +#6423 = CARTESIAN_POINT('',(0.303273426848,0.55,-0.10798060411)); +#6424 = CARTESIAN_POINT('',(0.304124381916,0.56,-0.111503852507)); +#6425 = CARTESIAN_POINT('',(0.304124381916,0.55,-0.111503852507)); +#6426 = CARTESIAN_POINT('',(0.305787929472,0.56,-0.118391514946)); +#6427 = CARTESIAN_POINT('',(0.305787929472,0.55,-0.118391514946)); +#6428 = CARTESIAN_POINT('',(0.309257686819,0.56,-0.128232241031)); +#6429 = CARTESIAN_POINT('',(0.309257686819,0.55,-0.128232241031)); +#6430 = CARTESIAN_POINT('',(0.313037612338,0.56,-0.13754459317)); +#6431 = CARTESIAN_POINT('',(0.313037612338,0.55,-0.13754459317)); +#6432 = CARTESIAN_POINT('',(0.317576522795,0.56,-0.14615420054)); +#6433 = CARTESIAN_POINT('',(0.317576522795,0.55,-0.14615420054)); +#6434 = CARTESIAN_POINT('',(0.322527398217,0.56,-0.154234090813)); +#6435 = CARTESIAN_POINT('',(0.322527398217,0.55,-0.154234090813)); +#6436 = CARTESIAN_POINT('',(0.328199670371,0.56,-0.16160100326)); +#6437 = CARTESIAN_POINT('',(0.328199670371,0.55,-0.16160100326)); +#6438 = CARTESIAN_POINT('',(0.334331642627,0.56,-0.168442299807)); +#6439 = CARTESIAN_POINT('',(0.334331642627,0.55,-0.168442299807)); +#6440 = CARTESIAN_POINT('',(0.341114137557,0.56,-0.174513623562)); +#6441 = CARTESIAN_POINT('',(0.341114137557,0.55,-0.174513623562)); +#6442 = CARTESIAN_POINT('',(0.348227003722,0.56,-0.180011396483)); +#6443 = CARTESIAN_POINT('',(0.348227003722,0.55,-0.180011396483)); +#6444 = CARTESIAN_POINT('',(0.355770465697,0.56,-0.184698902217)); +#6445 = CARTESIAN_POINT('',(0.355770465697,0.55,-0.184698902217)); +#6446 = CARTESIAN_POINT('',(0.363592755064,0.56,-0.188731317504)); +#6447 = CARTESIAN_POINT('',(0.363592755064,0.55,-0.188731317504)); +#6448 = CARTESIAN_POINT('',(0.371748068359,0.56,-0.192053340691)); +#6449 = CARTESIAN_POINT('',(0.371748068359,0.55,-0.192053340691)); +#6450 = CARTESIAN_POINT('',(0.380260685528,0.56,-0.194555893058)); +#6451 = CARTESIAN_POINT('',(0.380260685528,0.55,-0.194555893058)); +#6452 = CARTESIAN_POINT('',(0.38905364786,0.56,-0.196371573617)); +#6453 = CARTESIAN_POINT('',(0.38905364786,0.55,-0.196371573617)); +#6454 = CARTESIAN_POINT('',(0.398149997871,0.56,-0.197550685038)); +#6455 = CARTESIAN_POINT('',(0.398149997871,0.55,-0.197550685038)); +#6456 = CARTESIAN_POINT('',(0.404324756931,0.56,-0.197665761347)); +#6457 = CARTESIAN_POINT('',(0.404324756931,0.55,-0.197665761347)); +#6458 = CARTESIAN_POINT('',(0.407460125566,0.56,-0.197724193853)); +#6459 = CARTESIAN_POINT('',(0.407460125566,0.55,-0.197724193853)); +#6460 = ADVANCED_FACE('',(#6461),#6472,.T.); +#6461 = FACE_BOUND('',#6462,.T.); +#6462 = EDGE_LOOP('',(#6463,#6464,#6465,#6471)); +#6463 = ORIENTED_EDGE('',*,*,#2165,.F.); +#6464 = ORIENTED_EDGE('',*,*,#5582,.F.); +#6465 = ORIENTED_EDGE('',*,*,#6466,.T.); +#6466 = EDGE_CURVE('',#5563,#6392,#6467,.T.); +#6467 = LINE('',#6468,#6469); +#6468 = CARTESIAN_POINT('',(0.334683683258,0.56,-0.10798060411)); +#6469 = VECTOR('',#6470,1.); +#6470 = DIRECTION('',(-1.,0.,0.)); +#6471 = ORIENTED_EDGE('',*,*,#6391,.T.); +#6472 = PLANE('',#6473); +#6473 = AXIS2_PLACEMENT_3D('',#6474,#6475,#6476); +#6474 = CARTESIAN_POINT('',(0.334683683258,0.56,-0.10798060411)); +#6475 = DIRECTION('',(0.,-9.429630734102E-47,1.)); +#6476 = DIRECTION('',(0.,-1.,-9.429630734102E-47)); +#6477 = ADVANCED_FACE('',(#6478),#6497,.F.); +#6478 = FACE_BOUND('',#6479,.T.); +#6479 = EDGE_LOOP('',(#6480,#6481,#6482,#6483,#6484,#6485,#6486,#6487, + #6488,#6489,#6490,#6491,#6492,#6493,#6494,#6495,#6496)); +#6480 = ORIENTED_EDGE('',*,*,#5562,.F.); +#6481 = ORIENTED_EDGE('',*,*,#5631,.F.); +#6482 = ORIENTED_EDGE('',*,*,#5705,.F.); +#6483 = ORIENTED_EDGE('',*,*,#5767,.F.); +#6484 = ORIENTED_EDGE('',*,*,#5791,.F.); +#6485 = ORIENTED_EDGE('',*,*,#5865,.F.); +#6486 = ORIENTED_EDGE('',*,*,#5939,.F.); +#6487 = ORIENTED_EDGE('',*,*,#5989,.F.); +#6488 = ORIENTED_EDGE('',*,*,#6039,.F.); +#6489 = ORIENTED_EDGE('',*,*,#6063,.F.); +#6490 = ORIENTED_EDGE('',*,*,#6137,.F.); +#6491 = ORIENTED_EDGE('',*,*,#6199,.F.); +#6492 = ORIENTED_EDGE('',*,*,#6249,.F.); +#6493 = ORIENTED_EDGE('',*,*,#6287,.F.); +#6494 = ORIENTED_EDGE('',*,*,#6337,.F.); +#6495 = ORIENTED_EDGE('',*,*,#6399,.F.); +#6496 = ORIENTED_EDGE('',*,*,#6466,.F.); +#6497 = PLANE('',#6498); +#6498 = AXIS2_PLACEMENT_3D('',#6499,#6500,#6501); +#6499 = CARTESIAN_POINT('',(0.362269751406,0.56,-0.14746731004)); +#6500 = DIRECTION('',(-1.903592735075E-15,-1.,-5.452308279347E-14)); +#6501 = DIRECTION('',(0.,5.452308279347E-14,-1.)); +#6502 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6506)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6503,#6504,#6505)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6503 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6504 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6505 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6506 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6503, + 'distance_accuracy_value','confusion accuracy'); +#6507 = SHAPE_DEFINITION_REPRESENTATION(#6508,#1134); +#6508 = PRODUCT_DEFINITION_SHAPE('','',#6509); +#6509 = PRODUCT_DEFINITION('design','',#6510,#6513); +#6510 = PRODUCT_DEFINITION_FORMATION('','',#6511); +#6511 = PRODUCT('R0603','R0603','',(#6512)); +#6512 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6513 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6514 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6515,#6517); +#6515 = ( REPRESENTATION_RELATIONSHIP('','',#1134,#1120) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6516) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6516 = ITEM_DEFINED_TRANSFORMATION('','',#11,#1121); +#6517 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6518); +#6518 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('3','','',#1115,#6509,$); +#6519 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6511)); +#6520 = SHAPE_DEFINITION_REPRESENTATION(#6521,#6527); +#6521 = PRODUCT_DEFINITION_SHAPE('','',#6522); +#6522 = PRODUCT_DEFINITION('design','',#6523,#6526); +#6523 = PRODUCT_DEFINITION_FORMATION('','',#6524); +#6524 = PRODUCT('6699546560','6699546560','',(#6525)); +#6525 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6526 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6527 = SHAPE_REPRESENTATION('',(#11,#6528),#6532); +#6528 = AXIS2_PLACEMENT_3D('',#6529,#6530,#6531); +#6529 = CARTESIAN_POINT('',(0.,0.,0.)); +#6530 = DIRECTION('',(0.,0.,1.)); +#6531 = DIRECTION('',(1.,0.,0.)); +#6532 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6536)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6533,#6534,#6535)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6533 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6534 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6535 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6536 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6533, + 'distance_accuracy_value','confusion accuracy'); +#6537 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6538),#6688); +#6538 = MANIFOLD_SOLID_BREP('',#6539); +#6539 = CLOSED_SHELL('',(#6540,#6580,#6611,#6642,#6664,#6676)); +#6540 = ADVANCED_FACE('',(#6541),#6575,.T.); +#6541 = FACE_BOUND('',#6542,.T.); +#6542 = EDGE_LOOP('',(#6543,#6553,#6561,#6569)); +#6543 = ORIENTED_EDGE('',*,*,#6544,.T.); +#6544 = EDGE_CURVE('',#6545,#6547,#6549,.T.); +#6545 = VERTEX_POINT('',#6546); +#6546 = CARTESIAN_POINT('',(-0.90499946,-0.50499772,0.)); +#6547 = VERTEX_POINT('',#6548); +#6548 = CARTESIAN_POINT('',(-0.90499946,-0.50499772,0.499999)); +#6549 = LINE('',#6550,#6551); +#6550 = CARTESIAN_POINT('',(-0.90499946,-0.50499772,0.)); +#6551 = VECTOR('',#6552,1.); +#6552 = DIRECTION('',(0.,0.,1.)); +#6553 = ORIENTED_EDGE('',*,*,#6554,.T.); +#6554 = EDGE_CURVE('',#6547,#6555,#6557,.T.); +#6555 = VERTEX_POINT('',#6556); +#6556 = CARTESIAN_POINT('',(-0.90499946,0.50499772,0.499999)); +#6557 = LINE('',#6558,#6559); +#6558 = CARTESIAN_POINT('',(-0.90499946,-0.50499772,0.499999)); +#6559 = VECTOR('',#6560,1.); +#6560 = DIRECTION('',(0.,1.,0.)); +#6561 = ORIENTED_EDGE('',*,*,#6562,.F.); +#6562 = EDGE_CURVE('',#6563,#6555,#6565,.T.); +#6563 = VERTEX_POINT('',#6564); +#6564 = CARTESIAN_POINT('',(-0.90499946,0.50499772,0.)); +#6565 = LINE('',#6566,#6567); +#6566 = CARTESIAN_POINT('',(-0.90499946,0.50499772,0.)); +#6567 = VECTOR('',#6568,1.); +#6568 = DIRECTION('',(0.,0.,1.)); +#6569 = ORIENTED_EDGE('',*,*,#6570,.F.); +#6570 = EDGE_CURVE('',#6545,#6563,#6571,.T.); +#6571 = LINE('',#6572,#6573); +#6572 = CARTESIAN_POINT('',(-0.90499946,-0.50499772,0.)); +#6573 = VECTOR('',#6574,1.); +#6574 = DIRECTION('',(0.,1.,0.)); +#6575 = PLANE('',#6576); +#6576 = AXIS2_PLACEMENT_3D('',#6577,#6578,#6579); +#6577 = CARTESIAN_POINT('',(-0.90499946,-0.50499772,0.)); +#6578 = DIRECTION('',(-1.,0.,0.)); +#6579 = DIRECTION('',(0.,1.,0.)); +#6580 = ADVANCED_FACE('',(#6581),#6606,.T.); +#6581 = FACE_BOUND('',#6582,.T.); +#6582 = EDGE_LOOP('',(#6583,#6584,#6592,#6600)); +#6583 = ORIENTED_EDGE('',*,*,#6562,.T.); +#6584 = ORIENTED_EDGE('',*,*,#6585,.T.); +#6585 = EDGE_CURVE('',#6555,#6586,#6588,.T.); +#6586 = VERTEX_POINT('',#6587); +#6587 = CARTESIAN_POINT('',(0.90499946,0.50499772,0.499999)); +#6588 = LINE('',#6589,#6590); +#6589 = CARTESIAN_POINT('',(-0.90499946,0.50499772,0.499999)); +#6590 = VECTOR('',#6591,1.); +#6591 = DIRECTION('',(1.,0.,0.)); +#6592 = ORIENTED_EDGE('',*,*,#6593,.F.); +#6593 = EDGE_CURVE('',#6594,#6586,#6596,.T.); +#6594 = VERTEX_POINT('',#6595); +#6595 = CARTESIAN_POINT('',(0.90499946,0.50499772,0.)); +#6596 = LINE('',#6597,#6598); +#6597 = CARTESIAN_POINT('',(0.90499946,0.50499772,0.)); +#6598 = VECTOR('',#6599,1.); +#6599 = DIRECTION('',(0.,0.,1.)); +#6600 = ORIENTED_EDGE('',*,*,#6601,.F.); +#6601 = EDGE_CURVE('',#6563,#6594,#6602,.T.); +#6602 = LINE('',#6603,#6604); +#6603 = CARTESIAN_POINT('',(-0.90499946,0.50499772,0.)); +#6604 = VECTOR('',#6605,1.); +#6605 = DIRECTION('',(1.,0.,0.)); +#6606 = PLANE('',#6607); +#6607 = AXIS2_PLACEMENT_3D('',#6608,#6609,#6610); +#6608 = CARTESIAN_POINT('',(-0.90499946,0.50499772,0.)); +#6609 = DIRECTION('',(0.,1.,0.)); +#6610 = DIRECTION('',(1.,0.,0.)); +#6611 = ADVANCED_FACE('',(#6612),#6637,.T.); +#6612 = FACE_BOUND('',#6613,.T.); +#6613 = EDGE_LOOP('',(#6614,#6615,#6623,#6631)); +#6614 = ORIENTED_EDGE('',*,*,#6593,.T.); +#6615 = ORIENTED_EDGE('',*,*,#6616,.T.); +#6616 = EDGE_CURVE('',#6586,#6617,#6619,.T.); +#6617 = VERTEX_POINT('',#6618); +#6618 = CARTESIAN_POINT('',(0.90499946,-0.50499772,0.499999)); +#6619 = LINE('',#6620,#6621); +#6620 = CARTESIAN_POINT('',(0.90499946,0.50499772,0.499999)); +#6621 = VECTOR('',#6622,1.); +#6622 = DIRECTION('',(0.,-1.,0.)); +#6623 = ORIENTED_EDGE('',*,*,#6624,.F.); +#6624 = EDGE_CURVE('',#6625,#6617,#6627,.T.); +#6625 = VERTEX_POINT('',#6626); +#6626 = CARTESIAN_POINT('',(0.90499946,-0.50499772,0.)); +#6627 = LINE('',#6628,#6629); +#6628 = CARTESIAN_POINT('',(0.90499946,-0.50499772,0.)); +#6629 = VECTOR('',#6630,1.); +#6630 = DIRECTION('',(0.,0.,1.)); +#6631 = ORIENTED_EDGE('',*,*,#6632,.F.); +#6632 = EDGE_CURVE('',#6594,#6625,#6633,.T.); +#6633 = LINE('',#6634,#6635); +#6634 = CARTESIAN_POINT('',(0.90499946,0.50499772,0.)); +#6635 = VECTOR('',#6636,1.); +#6636 = DIRECTION('',(0.,-1.,0.)); +#6637 = PLANE('',#6638); +#6638 = AXIS2_PLACEMENT_3D('',#6639,#6640,#6641); +#6639 = CARTESIAN_POINT('',(0.90499946,0.50499772,0.)); +#6640 = DIRECTION('',(1.,0.,-0.)); +#6641 = DIRECTION('',(0.,-1.,0.)); +#6642 = ADVANCED_FACE('',(#6643),#6659,.T.); +#6643 = FACE_BOUND('',#6644,.T.); +#6644 = EDGE_LOOP('',(#6645,#6646,#6652,#6653)); +#6645 = ORIENTED_EDGE('',*,*,#6624,.T.); +#6646 = ORIENTED_EDGE('',*,*,#6647,.T.); +#6647 = EDGE_CURVE('',#6617,#6547,#6648,.T.); +#6648 = LINE('',#6649,#6650); +#6649 = CARTESIAN_POINT('',(0.90499946,-0.50499772,0.499999)); +#6650 = VECTOR('',#6651,1.); +#6651 = DIRECTION('',(-1.,0.,0.)); +#6652 = ORIENTED_EDGE('',*,*,#6544,.F.); +#6653 = ORIENTED_EDGE('',*,*,#6654,.F.); +#6654 = EDGE_CURVE('',#6625,#6545,#6655,.T.); +#6655 = LINE('',#6656,#6657); +#6656 = CARTESIAN_POINT('',(0.90499946,-0.50499772,0.)); +#6657 = VECTOR('',#6658,1.); +#6658 = DIRECTION('',(-1.,0.,0.)); +#6659 = PLANE('',#6660); +#6660 = AXIS2_PLACEMENT_3D('',#6661,#6662,#6663); +#6661 = CARTESIAN_POINT('',(0.90499946,-0.50499772,0.)); +#6662 = DIRECTION('',(0.,-1.,0.)); +#6663 = DIRECTION('',(-1.,0.,0.)); +#6664 = ADVANCED_FACE('',(#6665),#6671,.T.); +#6665 = FACE_BOUND('',#6666,.T.); +#6666 = EDGE_LOOP('',(#6667,#6668,#6669,#6670)); +#6667 = ORIENTED_EDGE('',*,*,#6570,.T.); +#6668 = ORIENTED_EDGE('',*,*,#6601,.T.); +#6669 = ORIENTED_EDGE('',*,*,#6632,.T.); +#6670 = ORIENTED_EDGE('',*,*,#6654,.T.); +#6671 = PLANE('',#6672); +#6672 = AXIS2_PLACEMENT_3D('',#6673,#6674,#6675); +#6673 = CARTESIAN_POINT('',(0.,1.421245792455E-14,0.)); +#6674 = DIRECTION('',(-0.,-0.,-1.)); +#6675 = DIRECTION('',(-1.,0.,0.)); +#6676 = ADVANCED_FACE('',(#6677),#6683,.F.); +#6677 = FACE_BOUND('',#6678,.F.); +#6678 = EDGE_LOOP('',(#6679,#6680,#6681,#6682)); +#6679 = ORIENTED_EDGE('',*,*,#6554,.T.); +#6680 = ORIENTED_EDGE('',*,*,#6585,.T.); +#6681 = ORIENTED_EDGE('',*,*,#6616,.T.); +#6682 = ORIENTED_EDGE('',*,*,#6647,.T.); +#6683 = PLANE('',#6684); +#6684 = AXIS2_PLACEMENT_3D('',#6685,#6686,#6687); +#6685 = CARTESIAN_POINT('',(0.,1.421245792455E-14,0.499999)); +#6686 = DIRECTION('',(-0.,-0.,-1.)); +#6687 = DIRECTION('',(-1.,0.,0.)); +#6688 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6692)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6689,#6690,#6691)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6689 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6690 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6691 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6692 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6689, + 'distance_accuracy_value','confusion accuracy'); +#6693 = SHAPE_DEFINITION_REPRESENTATION(#6694,#6537); +#6694 = PRODUCT_DEFINITION_SHAPE('','',#6695); +#6695 = PRODUCT_DEFINITION('design','',#6696,#6699); +#6696 = PRODUCT_DEFINITION_FORMATION('','',#6697); +#6697 = PRODUCT('Extruded','Extruded','',(#6698)); +#6698 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6699 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6700 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6701,#6703); +#6701 = ( REPRESENTATION_RELATIONSHIP('','',#6537,#6527) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6702) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6702 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6528); +#6703 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6704); +#6704 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('4','3','',#6522,#6695,$); +#6705 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6697)); +#6706 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6707,#6709); +#6707 = ( REPRESENTATION_RELATIONSHIP('','',#6527,#1120) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6708) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6708 = ITEM_DEFINED_TRANSFORMATION('','',#11,#1125); +#6709 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6710); +#6710 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('5','','',#1115,#6522,$); +#6711 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6524)); +#6712 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6713,#6715); +#6713 = ( REPRESENTATION_RELATIONSHIP('','',#1120,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6714) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6714 = ITEM_DEFINED_TRANSFORMATION('','',#11,#19); +#6715 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6716); +#6716 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('6','','',#5,#1115,$); +#6717 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1117)); +#6718 = SHAPE_DEFINITION_REPRESENTATION(#6719,#6725); +#6719 = PRODUCT_DEFINITION_SHAPE('','',#6720); +#6720 = PRODUCT_DEFINITION('design','',#6721,#6724); +#6721 = PRODUCT_DEFINITION_FORMATION('','',#6722); +#6722 = PRODUCT('SB4','SB4','',(#6723)); +#6723 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6724 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6725 = SHAPE_REPRESENTATION('',(#11,#6726,#6730),#6734); +#6726 = AXIS2_PLACEMENT_3D('',#6727,#6728,#6729); +#6727 = CARTESIAN_POINT('',(291.4748840332,174.54328918457,0.)); +#6728 = DIRECTION('',(1.748455531469E-07,-1.,-4.371138828674E-08)); +#6729 = DIRECTION('',(1.,1.748455531469E-07,0.)); +#6730 = AXIS2_PLACEMENT_3D('',#6731,#6732,#6733); +#6731 = CARTESIAN_POINT('',(291.47479248046,174.54321289062,0.)); +#6732 = DIRECTION('',(0.,0.,1.)); +#6733 = DIRECTION('',(1.,0.,0.)); +#6734 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6738)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6735,#6736,#6737)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6735 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6736 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6737 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6738 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6735, + 'distance_accuracy_value','confusion accuracy'); +#6739 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6740,#6742); +#6740 = ( REPRESENTATION_RELATIONSHIP('','',#1134,#6725) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6741) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6741 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6726); +#6742 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6743); +#6743 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('7','','',#6720,#6509,$); +#6744 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6745,#6747); +#6745 = ( REPRESENTATION_RELATIONSHIP('','',#6527,#6725) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6746) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6746 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6730); +#6747 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6748); +#6748 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('8','','',#6720,#6522,$); +#6749 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6750,#6752); +#6750 = ( REPRESENTATION_RELATIONSHIP('','',#6725,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6751) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6751 = ITEM_DEFINED_TRANSFORMATION('','',#11,#23); +#6752 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6753); +#6753 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('9','','',#5,#6720,$); +#6754 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6722)); +#6755 = SHAPE_DEFINITION_REPRESENTATION(#6756,#6762); +#6756 = PRODUCT_DEFINITION_SHAPE('','',#6757); +#6757 = PRODUCT_DEFINITION('design','',#6758,#6761); +#6758 = PRODUCT_DEFINITION_FORMATION('','',#6759); +#6759 = PRODUCT('SB3','SB3','',(#6760)); +#6760 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6761 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6762 = SHAPE_REPRESENTATION('',(#11,#6763,#6767),#6771); +#6763 = AXIS2_PLACEMENT_3D('',#6764,#6765,#6766); +#6764 = CARTESIAN_POINT('',(288.70788574218,175.86408996582,0.)); +#6765 = DIRECTION('',(1.748455531469E-07,-1.,-4.371138828674E-08)); +#6766 = DIRECTION('',(1.,1.748455531469E-07,0.)); +#6767 = AXIS2_PLACEMENT_3D('',#6768,#6769,#6770); +#6768 = CARTESIAN_POINT('',(288.70779418945,175.86401367187,0.)); +#6769 = DIRECTION('',(0.,0.,1.)); +#6770 = DIRECTION('',(1.,0.,0.)); +#6771 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6775)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6772,#6773,#6774)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6772 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6773 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6774 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6775 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6772, + 'distance_accuracy_value','confusion accuracy'); +#6776 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6777,#6779); +#6777 = ( REPRESENTATION_RELATIONSHIP('','',#1134,#6762) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6778) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6778 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6763); +#6779 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6780); +#6780 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('10','','',#6757,#6509,$); +#6781 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6782,#6784); +#6782 = ( REPRESENTATION_RELATIONSHIP('','',#6527,#6762) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6783) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6783 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6767); +#6784 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6785); +#6785 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('11','','',#6757,#6522,$); +#6786 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6787,#6789); +#6787 = ( REPRESENTATION_RELATIONSHIP('','',#6762,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6788) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6788 = ITEM_DEFINED_TRANSFORMATION('','',#11,#27); +#6789 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6790); +#6790 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('12','','',#5,#6757,$); +#6791 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6759)); +#6792 = SHAPE_DEFINITION_REPRESENTATION(#6793,#6799); +#6793 = PRODUCT_DEFINITION_SHAPE('','',#6794); +#6794 = PRODUCT_DEFINITION('design','',#6795,#6798); +#6795 = PRODUCT_DEFINITION_FORMATION('','',#6796); +#6796 = PRODUCT('SB2','SB2','',(#6797)); +#6797 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6798 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6799 = SHAPE_REPRESENTATION('',(#11,#6800,#6804),#6808); +#6800 = AXIS2_PLACEMENT_3D('',#6801,#6802,#6803); +#6801 = CARTESIAN_POINT('',(299.59130859375,181.46292114257,0.)); +#6802 = DIRECTION('',(-8.742277657348E-08,1.,-4.371138828674E-08)); +#6803 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#6804 = AXIS2_PLACEMENT_3D('',#6805,#6806,#6807); +#6805 = CARTESIAN_POINT('',(299.59140014648,181.46301269531,0.)); +#6806 = DIRECTION('',(0.,0.,1.)); +#6807 = DIRECTION('',(1.,0.,0.)); +#6808 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6812)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6809,#6810,#6811)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6809 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6810 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6811 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6812 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6809, + 'distance_accuracy_value','confusion accuracy'); +#6813 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6814,#6816); +#6814 = ( REPRESENTATION_RELATIONSHIP('','',#1134,#6799) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6815) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6815 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6800); +#6816 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6817); +#6817 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('13','','',#6794,#6509,$); +#6818 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6819,#6821); +#6819 = ( REPRESENTATION_RELATIONSHIP('','',#6527,#6799) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6820) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6820 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6804); +#6821 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6822); +#6822 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('14','','',#6794,#6522,$); +#6823 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6824,#6826); +#6824 = ( REPRESENTATION_RELATIONSHIP('','',#6799,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6825) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6825 = ITEM_DEFINED_TRANSFORMATION('','',#11,#31); +#6826 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6827); +#6827 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('15','','',#5,#6794,$); +#6828 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6796)); +#6829 = SHAPE_DEFINITION_REPRESENTATION(#6830,#6836); +#6830 = PRODUCT_DEFINITION_SHAPE('','',#6831); +#6831 = PRODUCT_DEFINITION('design','',#6832,#6835); +#6832 = PRODUCT_DEFINITION_FORMATION('','',#6833); +#6833 = PRODUCT('SB1','SB1','',(#6834)); +#6834 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6835 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6836 = SHAPE_REPRESENTATION('',(#11,#6837,#6841),#6845); +#6837 = AXIS2_PLACEMENT_3D('',#6838,#6839,#6840); +#6838 = CARTESIAN_POINT('',(299.59130859375,182.78372192382,0.)); +#6839 = DIRECTION('',(-8.742277657348E-08,1.,-4.371138828674E-08)); +#6840 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#6841 = AXIS2_PLACEMENT_3D('',#6842,#6843,#6844); +#6842 = CARTESIAN_POINT('',(299.59140014648,182.78379821777,0.)); +#6843 = DIRECTION('',(0.,0.,1.)); +#6844 = DIRECTION('',(1.,0.,0.)); +#6845 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6849)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6846,#6847,#6848)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6846 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6847 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6848 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6849 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6846, + 'distance_accuracy_value','confusion accuracy'); +#6850 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6851,#6853); +#6851 = ( REPRESENTATION_RELATIONSHIP('','',#1134,#6836) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6852) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6852 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6837); +#6853 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6854); +#6854 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('16','','',#6831,#6509,$); +#6855 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6856,#6858); +#6856 = ( REPRESENTATION_RELATIONSHIP('','',#6527,#6836) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6857) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6857 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6841); +#6858 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6859); +#6859 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('17','','',#6831,#6522,$); +#6860 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6861,#6863); +#6861 = ( REPRESENTATION_RELATIONSHIP('','',#6836,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6862) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6862 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35); +#6863 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6864); +#6864 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('18','','',#5,#6831,$); +#6865 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6833)); +#6866 = SHAPE_DEFINITION_REPRESENTATION(#6867,#6873); +#6867 = PRODUCT_DEFINITION_SHAPE('','',#6868); +#6868 = PRODUCT_DEFINITION('design','',#6869,#6872); +#6869 = PRODUCT_DEFINITION_FORMATION('','',#6870); +#6870 = PRODUCT('P1','P1','',(#6871)); +#6871 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6872 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6873 = SHAPE_REPRESENTATION('',(#11,#6874),#6878); +#6874 = AXIS2_PLACEMENT_3D('',#6875,#6876,#6877); +#6875 = CARTESIAN_POINT('',(319.0340270996,192.15232849121,0.)); +#6876 = DIRECTION('',(1.,1.19248806385E-08,1.19248806385E-08)); +#6877 = DIRECTION('',(1.19248806385E-08,-1.,9.880373850759E-33)); +#6878 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6882)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6879,#6880,#6881)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6879 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6880 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6881 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6882 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6879, + 'distance_accuracy_value','confusion accuracy'); +#6883 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6884),#12228); +#6884 = MANIFOLD_SOLID_BREP('',#6885); +#6885 = CLOSED_SHELL('',(#6886,#6926,#6965,#7004,#7052,#7074,#7105,#7141 + ,#7172,#7184,#7201,#7218,#7256,#7287,#7311,#7328,#7350,#7362,#7374, + #7399,#7416,#7456,#7495,#7534,#7582,#7604,#7635,#7671,#7702,#7714, + #7731,#7748,#7786,#7817,#7841,#7858,#7880,#7892,#7904,#7929,#7946, + #7986,#8025,#8064,#8112,#8134,#8165,#8201,#8232,#8244,#8261,#8278, + #8316,#8347,#8371,#8388,#8410,#8422,#8434,#8459,#8476,#8516,#8555, + #8594,#8642,#8664,#8695,#8731,#8762,#8774,#8791,#8808,#8846,#8877, + #8901,#8918,#8940,#8952,#8964,#8989,#9006,#9046,#9085,#9124,#9172, + #9194,#9225,#9261,#9292,#9304,#9321,#9338,#9376,#9407,#9431,#9448, + #9470,#9482,#9494,#9519,#9536,#9576,#9615,#9654,#9702,#9724,#9755, + #9791,#9822,#9834,#9851,#9868,#9906,#9937,#9961,#9978,#10000,#10012, + #10024,#10049,#10066,#10106,#10145,#10184,#10232,#10254,#10285, + #10321,#10352,#10364,#10381,#10398,#10436,#10467,#10491,#10508, + #10530,#10542,#10554,#10579,#10596,#10636,#10675,#10714,#10762, + #10784,#10815,#10851,#10882,#10894,#10911,#10928,#10966,#10997, + #11021,#11038,#11060,#11072,#11084,#11109,#11126,#11166,#11245, + #11276,#11325,#11437,#11468,#11499,#11530,#11561,#11585,#11602, + #11815,#11839,#11863,#11887,#11909,#11926,#11938,#11962,#11986, + #12010,#12032,#12049,#12061,#12083,#12100,#12112,#12136,#12160, + #12184,#12205)); +#6886 = ADVANCED_FACE('',(#6887),#6921,.T.); +#6887 = FACE_BOUND('',#6888,.T.); +#6888 = EDGE_LOOP('',(#6889,#6899,#6907,#6915)); +#6889 = ORIENTED_EDGE('',*,*,#6890,.F.); +#6890 = EDGE_CURVE('',#6891,#6893,#6895,.T.); +#6891 = VERTEX_POINT('',#6892); +#6892 = CARTESIAN_POINT('',(4.13,-2.5,1.59)); +#6893 = VERTEX_POINT('',#6894); +#6894 = CARTESIAN_POINT('',(4.13,-2.5,0.95)); +#6895 = LINE('',#6896,#6897); +#6896 = CARTESIAN_POINT('',(4.13,-2.5,0.635)); +#6897 = VECTOR('',#6898,1.); +#6898 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#6899 = ORIENTED_EDGE('',*,*,#6900,.F.); +#6900 = EDGE_CURVE('',#6901,#6891,#6903,.T.); +#6901 = VERTEX_POINT('',#6902); +#6902 = CARTESIAN_POINT('',(4.13,-7.95,1.59)); +#6903 = LINE('',#6904,#6905); +#6904 = CARTESIAN_POINT('',(4.13,2.45,1.59)); +#6905 = VECTOR('',#6906,1.); +#6906 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#6907 = ORIENTED_EDGE('',*,*,#6908,.T.); +#6908 = EDGE_CURVE('',#6901,#6909,#6911,.T.); +#6909 = VERTEX_POINT('',#6910); +#6910 = CARTESIAN_POINT('',(4.13,-7.95,0.95)); +#6911 = LINE('',#6912,#6913); +#6912 = CARTESIAN_POINT('',(4.13,-7.95,1.77)); +#6913 = VECTOR('',#6914,1.); +#6914 = DIRECTION('',(-3.749151804555E-33,-1.224606353822E-16,-1.)); +#6915 = ORIENTED_EDGE('',*,*,#6916,.F.); +#6916 = EDGE_CURVE('',#6893,#6909,#6917,.T.); +#6917 = LINE('',#6918,#6919); +#6918 = CARTESIAN_POINT('',(4.13,-7.95,0.95)); +#6919 = VECTOR('',#6920,1.); +#6920 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#6921 = PLANE('',#6922); +#6922 = AXIS2_PLACEMENT_3D('',#6923,#6924,#6925); +#6923 = CARTESIAN_POINT('',(4.13,-2.75,1.27)); +#6924 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#6925 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#6926 = ADVANCED_FACE('',(#6927),#6960,.T.); +#6927 = FACE_BOUND('',#6928,.T.); +#6928 = EDGE_LOOP('',(#6929,#6937,#6945,#6953,#6959)); +#6929 = ORIENTED_EDGE('',*,*,#6930,.F.); +#6930 = EDGE_CURVE('',#6931,#6891,#6933,.T.); +#6931 = VERTEX_POINT('',#6932); +#6932 = CARTESIAN_POINT('',(3.49,-2.5,1.59)); +#6933 = LINE('',#6934,#6935); +#6934 = CARTESIAN_POINT('',(-0.16,-2.5,1.59)); +#6935 = VECTOR('',#6936,1.); +#6936 = DIRECTION('',(1.,-4.402532809476E-49,-7.190119168882E-33)); +#6937 = ORIENTED_EDGE('',*,*,#6938,.T.); +#6938 = EDGE_CURVE('',#6931,#6939,#6941,.T.); +#6939 = VERTEX_POINT('',#6940); +#6940 = CARTESIAN_POINT('',(3.49,-7.95,1.59)); +#6941 = LINE('',#6942,#6943); +#6942 = CARTESIAN_POINT('',(3.49,2.45,1.59)); +#6943 = VECTOR('',#6944,1.); +#6944 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#6945 = ORIENTED_EDGE('',*,*,#6946,.T.); +#6946 = EDGE_CURVE('',#6939,#6947,#6949,.T.); +#6947 = VERTEX_POINT('',#6948); +#6948 = CARTESIAN_POINT('',(4.12972288734,-7.95,1.59)); +#6949 = LINE('',#6950,#6951); +#6950 = CARTESIAN_POINT('',(3.49,-7.95,1.59)); +#6951 = VECTOR('',#6952,1.); +#6952 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#6953 = ORIENTED_EDGE('',*,*,#6954,.T.); +#6954 = EDGE_CURVE('',#6947,#6901,#6955,.T.); +#6955 = LINE('',#6956,#6957); +#6956 = CARTESIAN_POINT('',(3.49,-7.95,1.59)); +#6957 = VECTOR('',#6958,1.); +#6958 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#6959 = ORIENTED_EDGE('',*,*,#6900,.T.); +#6960 = PLANE('',#6961); +#6961 = AXIS2_PLACEMENT_3D('',#6962,#6963,#6964); +#6962 = CARTESIAN_POINT('',(3.49,-7.95,1.59)); +#6963 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#6964 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#6965 = ADVANCED_FACE('',(#6966),#6999,.T.); +#6966 = FACE_BOUND('',#6967,.T.); +#6967 = EDGE_LOOP('',(#6968,#6976,#6977,#6985,#6993)); +#6968 = ORIENTED_EDGE('',*,*,#6969,.F.); +#6969 = EDGE_CURVE('',#6893,#6970,#6972,.T.); +#6970 = VERTEX_POINT('',#6971); +#6971 = CARTESIAN_POINT('',(3.49,-2.5,0.95)); +#6972 = LINE('',#6973,#6974); +#6973 = CARTESIAN_POINT('',(-0.16,-2.5,0.95)); +#6974 = VECTOR('',#6975,1.); +#6975 = DIRECTION('',(-1.,0.,0.)); +#6976 = ORIENTED_EDGE('',*,*,#6916,.T.); +#6977 = ORIENTED_EDGE('',*,*,#6978,.F.); +#6978 = EDGE_CURVE('',#6979,#6909,#6981,.T.); +#6979 = VERTEX_POINT('',#6980); +#6980 = CARTESIAN_POINT('',(4.12972288734,-7.95,0.95)); +#6981 = LINE('',#6982,#6983); +#6982 = CARTESIAN_POINT('',(3.49,-7.95,0.95)); +#6983 = VECTOR('',#6984,1.); +#6984 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#6985 = ORIENTED_EDGE('',*,*,#6986,.F.); +#6986 = EDGE_CURVE('',#6987,#6979,#6989,.T.); +#6987 = VERTEX_POINT('',#6988); +#6988 = CARTESIAN_POINT('',(3.49,-7.95,0.95)); +#6989 = LINE('',#6990,#6991); +#6990 = CARTESIAN_POINT('',(3.49,-7.95,0.95)); +#6991 = VECTOR('',#6992,1.); +#6992 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#6993 = ORIENTED_EDGE('',*,*,#6994,.T.); +#6994 = EDGE_CURVE('',#6987,#6970,#6995,.T.); +#6995 = LINE('',#6996,#6997); +#6996 = CARTESIAN_POINT('',(3.49,-7.95,0.95)); +#6997 = VECTOR('',#6998,1.); +#6998 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#6999 = PLANE('',#7000); +#7000 = AXIS2_PLACEMENT_3D('',#7001,#7002,#7003); +#7001 = CARTESIAN_POINT('',(3.49,2.45,0.95)); +#7002 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7003 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7004 = ADVANCED_FACE('',(#7005),#7047,.T.); +#7005 = FACE_BOUND('',#7006,.T.); +#7006 = EDGE_LOOP('',(#7007,#7017,#7025,#7033,#7041)); +#7007 = ORIENTED_EDGE('',*,*,#7008,.F.); +#7008 = EDGE_CURVE('',#7009,#7011,#7013,.T.); +#7009 = VERTEX_POINT('',#7010); +#7010 = CARTESIAN_POINT('',(3.49,-0.7,0.95)); +#7011 = VERTEX_POINT('',#7012); +#7012 = CARTESIAN_POINT('',(4.13,-0.7,0.95)); +#7013 = LINE('',#7014,#7015); +#7014 = CARTESIAN_POINT('',(0.475,-0.7,0.95)); +#7015 = VECTOR('',#7016,1.); +#7016 = DIRECTION('',(1.,0.,0.)); +#7017 = ORIENTED_EDGE('',*,*,#7018,.T.); +#7018 = EDGE_CURVE('',#7009,#7019,#7021,.T.); +#7019 = VERTEX_POINT('',#7020); +#7020 = CARTESIAN_POINT('',(3.49,2.45,0.95)); +#7021 = LINE('',#7022,#7023); +#7022 = CARTESIAN_POINT('',(3.49,-7.95,0.95)); +#7023 = VECTOR('',#7024,1.); +#7024 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7025 = ORIENTED_EDGE('',*,*,#7026,.T.); +#7026 = EDGE_CURVE('',#7019,#7027,#7029,.T.); +#7027 = VERTEX_POINT('',#7028); +#7028 = CARTESIAN_POINT('',(4.12972288734,2.45,0.95)); +#7029 = LINE('',#7030,#7031); +#7030 = CARTESIAN_POINT('',(3.49,2.45,0.95)); +#7031 = VECTOR('',#7032,1.); +#7032 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7033 = ORIENTED_EDGE('',*,*,#7034,.T.); +#7034 = EDGE_CURVE('',#7027,#7035,#7037,.T.); +#7035 = VERTEX_POINT('',#7036); +#7036 = CARTESIAN_POINT('',(4.13,2.45,0.95)); +#7037 = LINE('',#7038,#7039); +#7038 = CARTESIAN_POINT('',(3.49,2.45,0.95)); +#7039 = VECTOR('',#7040,1.); +#7040 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7041 = ORIENTED_EDGE('',*,*,#7042,.T.); +#7042 = EDGE_CURVE('',#7035,#7011,#7043,.T.); +#7043 = LINE('',#7044,#7045); +#7044 = CARTESIAN_POINT('',(4.13,-7.95,0.95)); +#7045 = VECTOR('',#7046,1.); +#7046 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#7047 = PLANE('',#7048); +#7048 = AXIS2_PLACEMENT_3D('',#7049,#7050,#7051); +#7049 = CARTESIAN_POINT('',(3.49,2.45,0.95)); +#7050 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7051 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7052 = ADVANCED_FACE('',(#7053),#7069,.F.); +#7053 = FACE_BOUND('',#7054,.T.); +#7054 = EDGE_LOOP('',(#7055,#7061,#7062,#7068)); +#7055 = ORIENTED_EDGE('',*,*,#7056,.F.); +#7056 = EDGE_CURVE('',#6970,#6931,#7057,.T.); +#7057 = LINE('',#7058,#7059); +#7058 = CARTESIAN_POINT('',(3.49,-2.5,0.635)); +#7059 = VECTOR('',#7060,1.); +#7060 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#7061 = ORIENTED_EDGE('',*,*,#6994,.F.); +#7062 = ORIENTED_EDGE('',*,*,#7063,.T.); +#7063 = EDGE_CURVE('',#6987,#6939,#7064,.T.); +#7064 = LINE('',#7065,#7066); +#7065 = CARTESIAN_POINT('',(3.49,-7.949999999999,1.77)); +#7066 = VECTOR('',#7067,1.); +#7067 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#7068 = ORIENTED_EDGE('',*,*,#6938,.F.); +#7069 = PLANE('',#7070); +#7070 = AXIS2_PLACEMENT_3D('',#7071,#7072,#7073); +#7071 = CARTESIAN_POINT('',(3.49,-2.75,1.27)); +#7072 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7073 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7074 = ADVANCED_FACE('',(#7075),#7100,.F.); +#7075 = FACE_BOUND('',#7076,.T.); +#7076 = EDGE_LOOP('',(#7077,#7085,#7093,#7099)); +#7077 = ORIENTED_EDGE('',*,*,#7078,.F.); +#7078 = EDGE_CURVE('',#7079,#7009,#7081,.T.); +#7079 = VERTEX_POINT('',#7080); +#7080 = CARTESIAN_POINT('',(3.49,-0.7,1.59)); +#7081 = LINE('',#7082,#7083); +#7082 = CARTESIAN_POINT('',(3.49,-0.7,0.635)); +#7083 = VECTOR('',#7084,1.); +#7084 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7085 = ORIENTED_EDGE('',*,*,#7086,.F.); +#7086 = EDGE_CURVE('',#7087,#7079,#7089,.T.); +#7087 = VERTEX_POINT('',#7088); +#7088 = CARTESIAN_POINT('',(3.49,2.45,1.59)); +#7089 = LINE('',#7090,#7091); +#7090 = CARTESIAN_POINT('',(3.49,2.45,1.59)); +#7091 = VECTOR('',#7092,1.); +#7092 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#7093 = ORIENTED_EDGE('',*,*,#7094,.T.); +#7094 = EDGE_CURVE('',#7087,#7019,#7095,.T.); +#7095 = LINE('',#7096,#7097); +#7096 = CARTESIAN_POINT('',(3.49,2.449999999999,0.77)); +#7097 = VECTOR('',#7098,1.); +#7098 = DIRECTION('',(3.749151804555E-33,1.232595164408E-32,-1.)); +#7099 = ORIENTED_EDGE('',*,*,#7018,.F.); +#7100 = PLANE('',#7101); +#7101 = AXIS2_PLACEMENT_3D('',#7102,#7103,#7104); +#7102 = CARTESIAN_POINT('',(3.49,-2.75,1.27)); +#7103 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7104 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7105 = ADVANCED_FACE('',(#7106),#7136,.F.); +#7106 = FACE_BOUND('',#7107,.T.); +#7107 = EDGE_LOOP('',(#7108,#7116,#7122,#7130)); +#7108 = ORIENTED_EDGE('',*,*,#7109,.F.); +#7109 = EDGE_CURVE('',#6979,#7110,#7112,.T.); +#7110 = VERTEX_POINT('',#7111); +#7111 = CARTESIAN_POINT('',(3.970000000003,-8.5,1.11)); +#7112 = LINE('',#7113,#7114); +#7113 = CARTESIAN_POINT('',(4.058947877482,-8.193711192998, + 1.020897801599)); +#7114 = VECTOR('',#7115,1.); +#7115 = DIRECTION('',(-0.268598772191,-0.92491018143,0.269064780052)); +#7116 = ORIENTED_EDGE('',*,*,#7117,.F.); +#7117 = EDGE_CURVE('',#6947,#6979,#7118,.T.); +#7118 = LINE('',#7119,#7120); +#7119 = CARTESIAN_POINT('',(4.12972288734,-7.95,2.27)); +#7120 = VECTOR('',#7121,1.); +#7121 = DIRECTION('',(0.,-1.224606353822E-16,-1.)); +#7122 = ORIENTED_EDGE('',*,*,#7123,.F.); +#7123 = EDGE_CURVE('',#7124,#6947,#7126,.T.); +#7124 = VERTEX_POINT('',#7125); +#7125 = CARTESIAN_POINT('',(3.970000000003,-8.5,1.43)); +#7126 = LINE('',#7127,#7128); +#7127 = CARTESIAN_POINT('',(4.057118531221,-8.200010480847, + 1.517269678299)); +#7128 = VECTOR('',#7129,1.); +#7129 = DIRECTION('',(0.268598772191,0.92491018143,0.269064780052)); +#7130 = ORIENTED_EDGE('',*,*,#7131,.F.); +#7131 = EDGE_CURVE('',#7110,#7124,#7132,.T.); +#7132 = LINE('',#7133,#7134); +#7133 = CARTESIAN_POINT('',(3.970000000003,-8.5,1.69)); +#7134 = VECTOR('',#7135,1.); +#7135 = DIRECTION('',(-1.778160569846E-17,6.123031769112E-17,1.)); +#7136 = PLANE('',#7137); +#7137 = AXIS2_PLACEMENT_3D('',#7138,#7139,#7140); +#7138 = CARTESIAN_POINT('',(4.12972288734,-7.95,2.27)); +#7139 = DIRECTION('',(-0.960324967172,0.278883411887,-3.415223981728E-17 + )); +#7140 = DIRECTION('',(0.278883411887,0.960324967172,-1.176020056533E-16) + ); +#7141 = ADVANCED_FACE('',(#7142),#7167,.F.); +#7142 = FACE_BOUND('',#7143,.T.); +#7143 = EDGE_LOOP('',(#7144,#7152,#7153,#7161)); +#7144 = ORIENTED_EDGE('',*,*,#7145,.F.); +#7145 = EDGE_CURVE('',#6939,#7146,#7148,.T.); +#7146 = VERTEX_POINT('',#7147); +#7147 = CARTESIAN_POINT('',(3.649999999997,-8.5,1.43)); +#7148 = LINE('',#7149,#7150); +#7149 = CARTESIAN_POINT('',(3.613811139381,-8.375600791632, + 1.466188860616)); +#7150 = VECTOR('',#7151,1.); +#7151 = DIRECTION('',(0.269031078557,-0.924794332561,-0.269031078563)); +#7152 = ORIENTED_EDGE('',*,*,#7063,.F.); +#7153 = ORIENTED_EDGE('',*,*,#7154,.F.); +#7154 = EDGE_CURVE('',#7155,#6987,#7157,.T.); +#7155 = VERTEX_POINT('',#7156); +#7156 = CARTESIAN_POINT('',(3.649999999997,-8.5,1.11)); +#7157 = LINE('',#7158,#7159); +#7158 = CARTESIAN_POINT('',(3.611979078312,-8.369303081708, + 1.071979078315)); +#7159 = VECTOR('',#7160,1.); +#7160 = DIRECTION('',(-0.269031078557,0.924794332561,-0.269031078563)); +#7161 = ORIENTED_EDGE('',*,*,#7162,.F.); +#7162 = EDGE_CURVE('',#7146,#7155,#7163,.T.); +#7163 = LINE('',#7164,#7165); +#7164 = CARTESIAN_POINT('',(3.649999999997,-8.5,1.69)); +#7165 = VECTOR('',#7166,1.); +#7166 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7167 = PLANE('',#7168); +#7168 = AXIS2_PLACEMENT_3D('',#7169,#7170,#7171); +#7169 = CARTESIAN_POINT('',(3.649999999997,-8.5,2.27)); +#7170 = DIRECTION('',(0.960195296605,0.279329540824,-3.420687305034E-17) + ); +#7171 = DIRECTION('',(0.279329540824,-0.960195296605,1.175861261133E-16) + ); +#7172 = ADVANCED_FACE('',(#7173),#7179,.F.); +#7173 = FACE_BOUND('',#7174,.T.); +#7174 = EDGE_LOOP('',(#7175,#7176,#7177,#7178)); +#7175 = ORIENTED_EDGE('',*,*,#6978,.T.); +#7176 = ORIENTED_EDGE('',*,*,#6908,.F.); +#7177 = ORIENTED_EDGE('',*,*,#6954,.F.); +#7178 = ORIENTED_EDGE('',*,*,#7117,.T.); +#7179 = PLANE('',#7180); +#7180 = AXIS2_PLACEMENT_3D('',#7181,#7182,#7183); +#7181 = CARTESIAN_POINT('',(4.587543330904,-7.95,2.27)); +#7182 = DIRECTION('',(0.,1.,-1.224606353822E-16)); +#7183 = DIRECTION('',(1.,0.,0.)); +#7184 = ADVANCED_FACE('',(#7185),#7196,.T.); +#7185 = FACE_BOUND('',#7186,.T.); +#7186 = EDGE_LOOP('',(#7187,#7188,#7189,#7190)); +#7187 = ORIENTED_EDGE('',*,*,#7154,.T.); +#7188 = ORIENTED_EDGE('',*,*,#6986,.T.); +#7189 = ORIENTED_EDGE('',*,*,#7109,.T.); +#7190 = ORIENTED_EDGE('',*,*,#7191,.F.); +#7191 = EDGE_CURVE('',#7155,#7110,#7192,.T.); +#7192 = LINE('',#7193,#7194); +#7193 = CARTESIAN_POINT('',(3.49,-8.5,1.11)); +#7194 = VECTOR('',#7195,1.); +#7195 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7196 = PLANE('',#7197); +#7197 = AXIS2_PLACEMENT_3D('',#7198,#7199,#7200); +#7198 = CARTESIAN_POINT('',(3.49,-7.95,0.95)); +#7199 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,-0.960195296604 + )); +#7200 = DIRECTION('',(5.879306305656E-17,0.960195296604,-0.27932954083) + ); +#7201 = ADVANCED_FACE('',(#7202),#7213,.T.); +#7202 = FACE_BOUND('',#7203,.T.); +#7203 = EDGE_LOOP('',(#7204,#7205,#7206,#7207)); +#7204 = ORIENTED_EDGE('',*,*,#7162,.T.); +#7205 = ORIENTED_EDGE('',*,*,#7191,.T.); +#7206 = ORIENTED_EDGE('',*,*,#7131,.T.); +#7207 = ORIENTED_EDGE('',*,*,#7208,.F.); +#7208 = EDGE_CURVE('',#7146,#7124,#7209,.T.); +#7209 = LINE('',#7210,#7211); +#7210 = CARTESIAN_POINT('',(3.49,-8.5,1.43)); +#7211 = VECTOR('',#7212,1.); +#7212 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7213 = PLANE('',#7214); +#7214 = AXIS2_PLACEMENT_3D('',#7215,#7216,#7217); +#7215 = CARTESIAN_POINT('',(3.49,-8.5,1.11)); +#7216 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#7217 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7218 = ADVANCED_FACE('',(#7219),#7251,.F.); +#7219 = FACE_BOUND('',#7220,.T.); +#7220 = EDGE_LOOP('',(#7221,#7231,#7237,#7245)); +#7221 = ORIENTED_EDGE('',*,*,#7222,.F.); +#7222 = EDGE_CURVE('',#7223,#7225,#7227,.T.); +#7223 = VERTEX_POINT('',#7224); +#7224 = CARTESIAN_POINT('',(4.12972288734,2.45,1.59)); +#7225 = VERTEX_POINT('',#7226); +#7226 = CARTESIAN_POINT('',(3.970000000003,3.,1.43)); +#7227 = LINE('',#7228,#7229); +#7228 = CARTESIAN_POINT('',(4.058947877482,2.693711192998,1.519102198401 + )); +#7229 = VECTOR('',#7230,1.); +#7230 = DIRECTION('',(-0.268598772191,0.92491018143,-0.269064780052)); +#7231 = ORIENTED_EDGE('',*,*,#7232,.F.); +#7232 = EDGE_CURVE('',#7027,#7223,#7233,.T.); +#7233 = LINE('',#7234,#7235); +#7234 = CARTESIAN_POINT('',(4.12972288734,2.45,0.27)); +#7235 = VECTOR('',#7236,1.); +#7236 = DIRECTION('',(0.,0.,1.)); +#7237 = ORIENTED_EDGE('',*,*,#7238,.F.); +#7238 = EDGE_CURVE('',#7239,#7027,#7241,.T.); +#7239 = VERTEX_POINT('',#7240); +#7240 = CARTESIAN_POINT('',(3.970000000003,3.,1.11)); +#7241 = LINE('',#7242,#7243); +#7242 = CARTESIAN_POINT('',(4.057118531221,2.700010480847,1.022730321701 + )); +#7243 = VECTOR('',#7244,1.); +#7244 = DIRECTION('',(0.268598772191,-0.92491018143,-0.269064780052)); +#7245 = ORIENTED_EDGE('',*,*,#7246,.F.); +#7246 = EDGE_CURVE('',#7225,#7239,#7247,.T.); +#7247 = LINE('',#7248,#7249); +#7248 = CARTESIAN_POINT('',(3.970000000003,3.,0.85)); +#7249 = VECTOR('',#7250,1.); +#7250 = DIRECTION('',(3.556321139691E-17,-1.224606353822E-16,-1.)); +#7251 = PLANE('',#7252); +#7252 = AXIS2_PLACEMENT_3D('',#7253,#7254,#7255); +#7253 = CARTESIAN_POINT('',(4.12972288734,2.45,0.27)); +#7254 = DIRECTION('',(-0.960324967172,-0.278883411887,0.)); +#7255 = DIRECTION('',(0.278883411887,-0.960324967172,0.)); +#7256 = ADVANCED_FACE('',(#7257),#7282,.F.); +#7257 = FACE_BOUND('',#7258,.T.); +#7258 = EDGE_LOOP('',(#7259,#7267,#7275,#7281)); +#7259 = ORIENTED_EDGE('',*,*,#7260,.F.); +#7260 = EDGE_CURVE('',#7261,#7087,#7263,.T.); +#7261 = VERTEX_POINT('',#7262); +#7262 = CARTESIAN_POINT('',(3.649999999997,3.,1.43)); +#7263 = LINE('',#7264,#7265); +#7264 = CARTESIAN_POINT('',(3.611979078312,2.869303081708,1.468020921685 + )); +#7265 = VECTOR('',#7266,1.); +#7266 = DIRECTION('',(-0.269031078557,-0.924794332561,0.269031078563)); +#7267 = ORIENTED_EDGE('',*,*,#7268,.F.); +#7268 = EDGE_CURVE('',#7269,#7261,#7271,.T.); +#7269 = VERTEX_POINT('',#7270); +#7270 = CARTESIAN_POINT('',(3.649999999997,3.,1.11)); +#7271 = LINE('',#7272,#7273); +#7272 = CARTESIAN_POINT('',(3.649999999997,3.,0.85)); +#7273 = VECTOR('',#7274,1.); +#7274 = DIRECTION('',(0.,1.224606353822E-16,1.)); +#7275 = ORIENTED_EDGE('',*,*,#7276,.F.); +#7276 = EDGE_CURVE('',#7019,#7269,#7277,.T.); +#7277 = LINE('',#7278,#7279); +#7278 = CARTESIAN_POINT('',(3.613811139381,2.875600791632,1.073811139384 + )); +#7279 = VECTOR('',#7280,1.); +#7280 = DIRECTION('',(0.269031078557,0.924794332561,0.269031078563)); +#7281 = ORIENTED_EDGE('',*,*,#7094,.F.); +#7282 = PLANE('',#7283); +#7283 = AXIS2_PLACEMENT_3D('',#7284,#7285,#7286); +#7284 = CARTESIAN_POINT('',(3.649999999997,3.,0.27)); +#7285 = DIRECTION('',(0.960195296605,-0.279329540824,0.)); +#7286 = DIRECTION('',(0.279329540824,0.960195296605,0.)); +#7287 = ADVANCED_FACE('',(#7288),#7306,.F.); +#7288 = FACE_BOUND('',#7289,.T.); +#7289 = EDGE_LOOP('',(#7290,#7298,#7304,#7305)); +#7290 = ORIENTED_EDGE('',*,*,#7291,.T.); +#7291 = EDGE_CURVE('',#7223,#7292,#7294,.T.); +#7292 = VERTEX_POINT('',#7293); +#7293 = CARTESIAN_POINT('',(4.13,2.45,1.59)); +#7294 = LINE('',#7295,#7296); +#7295 = CARTESIAN_POINT('',(3.49,2.45,1.59)); +#7296 = VECTOR('',#7297,1.); +#7297 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7298 = ORIENTED_EDGE('',*,*,#7299,.F.); +#7299 = EDGE_CURVE('',#7035,#7292,#7300,.T.); +#7300 = LINE('',#7301,#7302); +#7301 = CARTESIAN_POINT('',(4.13,2.45,0.77)); +#7302 = VECTOR('',#7303,1.); +#7303 = DIRECTION('',(-3.749151804555E-33,0.,1.)); +#7304 = ORIENTED_EDGE('',*,*,#7034,.F.); +#7305 = ORIENTED_EDGE('',*,*,#7232,.T.); +#7306 = PLANE('',#7307); +#7307 = AXIS2_PLACEMENT_3D('',#7308,#7309,#7310); +#7308 = CARTESIAN_POINT('',(4.587543330904,2.45,0.27)); +#7309 = DIRECTION('',(0.,-1.,0.)); +#7310 = DIRECTION('',(1.,0.,0.)); +#7311 = ADVANCED_FACE('',(#7312),#7323,.T.); +#7312 = FACE_BOUND('',#7313,.T.); +#7313 = EDGE_LOOP('',(#7314,#7315,#7321,#7322)); +#7314 = ORIENTED_EDGE('',*,*,#7276,.T.); +#7315 = ORIENTED_EDGE('',*,*,#7316,.T.); +#7316 = EDGE_CURVE('',#7269,#7239,#7317,.T.); +#7317 = LINE('',#7318,#7319); +#7318 = CARTESIAN_POINT('',(3.49,3.,1.11)); +#7319 = VECTOR('',#7320,1.); +#7320 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7321 = ORIENTED_EDGE('',*,*,#7238,.T.); +#7322 = ORIENTED_EDGE('',*,*,#7026,.F.); +#7323 = PLANE('',#7324); +#7324 = AXIS2_PLACEMENT_3D('',#7325,#7326,#7327); +#7325 = CARTESIAN_POINT('',(3.49,3.,1.11)); +#7326 = DIRECTION('',(1.710343652554E-17,0.27932954083,-0.960195296604) + ); +#7327 = DIRECTION('',(5.879306305656E-17,0.960195296604,0.27932954083)); +#7328 = ADVANCED_FACE('',(#7329),#7345,.T.); +#7329 = FACE_BOUND('',#7330,.T.); +#7330 = EDGE_LOOP('',(#7331,#7332,#7338,#7339)); +#7331 = ORIENTED_EDGE('',*,*,#7260,.T.); +#7332 = ORIENTED_EDGE('',*,*,#7333,.T.); +#7333 = EDGE_CURVE('',#7087,#7223,#7334,.T.); +#7334 = LINE('',#7335,#7336); +#7335 = CARTESIAN_POINT('',(3.49,2.45,1.59)); +#7336 = VECTOR('',#7337,1.); +#7337 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7338 = ORIENTED_EDGE('',*,*,#7222,.T.); +#7339 = ORIENTED_EDGE('',*,*,#7340,.F.); +#7340 = EDGE_CURVE('',#7261,#7225,#7341,.T.); +#7341 = LINE('',#7342,#7343); +#7342 = CARTESIAN_POINT('',(3.49,3.,1.43)); +#7343 = VECTOR('',#7344,1.); +#7344 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7345 = PLANE('',#7346); +#7346 = AXIS2_PLACEMENT_3D('',#7347,#7348,#7349); +#7347 = CARTESIAN_POINT('',(3.49,2.45,1.59)); +#7348 = DIRECTION('',(1.710343652554E-17,0.27932954083,0.960195296604)); +#7349 = DIRECTION('',(-5.879306305656E-17,-0.960195296604,0.27932954083) + ); +#7350 = ADVANCED_FACE('',(#7351),#7357,.T.); +#7351 = FACE_BOUND('',#7352,.T.); +#7352 = EDGE_LOOP('',(#7353,#7354,#7355,#7356)); +#7353 = ORIENTED_EDGE('',*,*,#7268,.T.); +#7354 = ORIENTED_EDGE('',*,*,#7340,.T.); +#7355 = ORIENTED_EDGE('',*,*,#7246,.T.); +#7356 = ORIENTED_EDGE('',*,*,#7316,.F.); +#7357 = PLANE('',#7358); +#7358 = AXIS2_PLACEMENT_3D('',#7359,#7360,#7361); +#7359 = CARTESIAN_POINT('',(3.49,3.,1.43)); +#7360 = DIRECTION('',(6.123031769112E-17,1.,-1.224606353822E-16)); +#7361 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#7362 = ADVANCED_FACE('',(#7363),#7369,.T.); +#7363 = FACE_BOUND('',#7364,.T.); +#7364 = EDGE_LOOP('',(#7365,#7366,#7367,#7368)); +#7365 = ORIENTED_EDGE('',*,*,#7145,.T.); +#7366 = ORIENTED_EDGE('',*,*,#7208,.T.); +#7367 = ORIENTED_EDGE('',*,*,#7123,.T.); +#7368 = ORIENTED_EDGE('',*,*,#6946,.F.); +#7369 = PLANE('',#7370); +#7370 = AXIS2_PLACEMENT_3D('',#7371,#7372,#7373); +#7371 = CARTESIAN_POINT('',(3.49,-8.5,1.43)); +#7372 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,0.960195296604) + ); +#7373 = DIRECTION('',(-5.879306305655E-17,-0.960195296604,-0.27932954083 + )); +#7374 = ADVANCED_FACE('',(#7375),#7394,.T.); +#7375 = FACE_BOUND('',#7376,.T.); +#7376 = EDGE_LOOP('',(#7377,#7385,#7391,#7392,#7393)); +#7377 = ORIENTED_EDGE('',*,*,#7378,.F.); +#7378 = EDGE_CURVE('',#7379,#7079,#7381,.T.); +#7379 = VERTEX_POINT('',#7380); +#7380 = CARTESIAN_POINT('',(4.13,-0.7,1.59)); +#7381 = LINE('',#7382,#7383); +#7382 = CARTESIAN_POINT('',(0.475,-0.7,1.59)); +#7383 = VECTOR('',#7384,1.); +#7384 = DIRECTION('',(-1.,4.402532809476E-49,7.190119168882E-33)); +#7385 = ORIENTED_EDGE('',*,*,#7386,.T.); +#7386 = EDGE_CURVE('',#7379,#7292,#7387,.T.); +#7387 = LINE('',#7388,#7389); +#7388 = CARTESIAN_POINT('',(4.13,2.45,1.59)); +#7389 = VECTOR('',#7390,1.); +#7390 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#7391 = ORIENTED_EDGE('',*,*,#7291,.F.); +#7392 = ORIENTED_EDGE('',*,*,#7333,.F.); +#7393 = ORIENTED_EDGE('',*,*,#7086,.T.); +#7394 = PLANE('',#7395); +#7395 = AXIS2_PLACEMENT_3D('',#7396,#7397,#7398); +#7396 = CARTESIAN_POINT('',(3.49,-7.95,1.59)); +#7397 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#7398 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#7399 = ADVANCED_FACE('',(#7400),#7411,.T.); +#7400 = FACE_BOUND('',#7401,.T.); +#7401 = EDGE_LOOP('',(#7402,#7408,#7409,#7410)); +#7402 = ORIENTED_EDGE('',*,*,#7403,.F.); +#7403 = EDGE_CURVE('',#7011,#7379,#7404,.T.); +#7404 = LINE('',#7405,#7406); +#7405 = CARTESIAN_POINT('',(4.13,-0.7,0.635)); +#7406 = VECTOR('',#7407,1.); +#7407 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#7408 = ORIENTED_EDGE('',*,*,#7042,.F.); +#7409 = ORIENTED_EDGE('',*,*,#7299,.T.); +#7410 = ORIENTED_EDGE('',*,*,#7386,.F.); +#7411 = PLANE('',#7412); +#7412 = AXIS2_PLACEMENT_3D('',#7413,#7414,#7415); +#7413 = CARTESIAN_POINT('',(4.13,-2.75,1.27)); +#7414 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7415 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7416 = ADVANCED_FACE('',(#7417),#7451,.T.); +#7417 = FACE_BOUND('',#7418,.T.); +#7418 = EDGE_LOOP('',(#7419,#7429,#7437,#7445)); +#7419 = ORIENTED_EDGE('',*,*,#7420,.F.); +#7420 = EDGE_CURVE('',#7421,#7423,#7425,.T.); +#7421 = VERTEX_POINT('',#7422); +#7422 = CARTESIAN_POINT('',(1.59,-2.5,1.59)); +#7423 = VERTEX_POINT('',#7424); +#7424 = CARTESIAN_POINT('',(1.59,-2.5,0.95)); +#7425 = LINE('',#7426,#7427); +#7426 = CARTESIAN_POINT('',(1.59,-2.5,0.635)); +#7427 = VECTOR('',#7428,1.); +#7428 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7429 = ORIENTED_EDGE('',*,*,#7430,.F.); +#7430 = EDGE_CURVE('',#7431,#7421,#7433,.T.); +#7431 = VERTEX_POINT('',#7432); +#7432 = CARTESIAN_POINT('',(1.59,-7.95,1.59)); +#7433 = LINE('',#7434,#7435); +#7434 = CARTESIAN_POINT('',(1.59,2.45,1.59)); +#7435 = VECTOR('',#7436,1.); +#7436 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#7437 = ORIENTED_EDGE('',*,*,#7438,.T.); +#7438 = EDGE_CURVE('',#7431,#7439,#7441,.T.); +#7439 = VERTEX_POINT('',#7440); +#7440 = CARTESIAN_POINT('',(1.59,-7.95,0.95)); +#7441 = LINE('',#7442,#7443); +#7442 = CARTESIAN_POINT('',(1.59,-7.95,1.77)); +#7443 = VECTOR('',#7444,1.); +#7444 = DIRECTION('',(-3.749151804555E-33,-1.224606353822E-16,-1.)); +#7445 = ORIENTED_EDGE('',*,*,#7446,.F.); +#7446 = EDGE_CURVE('',#7423,#7439,#7447,.T.); +#7447 = LINE('',#7448,#7449); +#7448 = CARTESIAN_POINT('',(1.59,-7.95,0.95)); +#7449 = VECTOR('',#7450,1.); +#7450 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#7451 = PLANE('',#7452); +#7452 = AXIS2_PLACEMENT_3D('',#7453,#7454,#7455); +#7453 = CARTESIAN_POINT('',(1.59,-2.75,1.27)); +#7454 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7455 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7456 = ADVANCED_FACE('',(#7457),#7490,.T.); +#7457 = FACE_BOUND('',#7458,.T.); +#7458 = EDGE_LOOP('',(#7459,#7467,#7475,#7483,#7489)); +#7459 = ORIENTED_EDGE('',*,*,#7460,.F.); +#7460 = EDGE_CURVE('',#7461,#7421,#7463,.T.); +#7461 = VERTEX_POINT('',#7462); +#7462 = CARTESIAN_POINT('',(0.95,-2.5,1.59)); +#7463 = LINE('',#7464,#7465); +#7464 = CARTESIAN_POINT('',(-1.43,-2.5,1.59)); +#7465 = VECTOR('',#7466,1.); +#7466 = DIRECTION('',(1.,-4.402532809476E-49,-7.190119168882E-33)); +#7467 = ORIENTED_EDGE('',*,*,#7468,.T.); +#7468 = EDGE_CURVE('',#7461,#7469,#7471,.T.); +#7469 = VERTEX_POINT('',#7470); +#7470 = CARTESIAN_POINT('',(0.95,-7.95,1.59)); +#7471 = LINE('',#7472,#7473); +#7472 = CARTESIAN_POINT('',(0.95,2.45,1.59)); +#7473 = VECTOR('',#7474,1.); +#7474 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#7475 = ORIENTED_EDGE('',*,*,#7476,.T.); +#7476 = EDGE_CURVE('',#7469,#7477,#7479,.T.); +#7477 = VERTEX_POINT('',#7478); +#7478 = CARTESIAN_POINT('',(1.58972288734,-7.95,1.59)); +#7479 = LINE('',#7480,#7481); +#7480 = CARTESIAN_POINT('',(0.95,-7.95,1.59)); +#7481 = VECTOR('',#7482,1.); +#7482 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7483 = ORIENTED_EDGE('',*,*,#7484,.T.); +#7484 = EDGE_CURVE('',#7477,#7431,#7485,.T.); +#7485 = LINE('',#7486,#7487); +#7486 = CARTESIAN_POINT('',(0.95,-7.95,1.59)); +#7487 = VECTOR('',#7488,1.); +#7488 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7489 = ORIENTED_EDGE('',*,*,#7430,.T.); +#7490 = PLANE('',#7491); +#7491 = AXIS2_PLACEMENT_3D('',#7492,#7493,#7494); +#7492 = CARTESIAN_POINT('',(0.95,-7.95,1.59)); +#7493 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#7494 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#7495 = ADVANCED_FACE('',(#7496),#7529,.T.); +#7496 = FACE_BOUND('',#7497,.T.); +#7497 = EDGE_LOOP('',(#7498,#7506,#7507,#7515,#7523)); +#7498 = ORIENTED_EDGE('',*,*,#7499,.F.); +#7499 = EDGE_CURVE('',#7423,#7500,#7502,.T.); +#7500 = VERTEX_POINT('',#7501); +#7501 = CARTESIAN_POINT('',(0.95,-2.5,0.95)); +#7502 = LINE('',#7503,#7504); +#7503 = CARTESIAN_POINT('',(-1.43,-2.5,0.95)); +#7504 = VECTOR('',#7505,1.); +#7505 = DIRECTION('',(-1.,0.,0.)); +#7506 = ORIENTED_EDGE('',*,*,#7446,.T.); +#7507 = ORIENTED_EDGE('',*,*,#7508,.F.); +#7508 = EDGE_CURVE('',#7509,#7439,#7511,.T.); +#7509 = VERTEX_POINT('',#7510); +#7510 = CARTESIAN_POINT('',(1.58972288734,-7.95,0.95)); +#7511 = LINE('',#7512,#7513); +#7512 = CARTESIAN_POINT('',(0.95,-7.95,0.95)); +#7513 = VECTOR('',#7514,1.); +#7514 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7515 = ORIENTED_EDGE('',*,*,#7516,.F.); +#7516 = EDGE_CURVE('',#7517,#7509,#7519,.T.); +#7517 = VERTEX_POINT('',#7518); +#7518 = CARTESIAN_POINT('',(0.95,-7.95,0.95)); +#7519 = LINE('',#7520,#7521); +#7520 = CARTESIAN_POINT('',(0.95,-7.95,0.95)); +#7521 = VECTOR('',#7522,1.); +#7522 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7523 = ORIENTED_EDGE('',*,*,#7524,.T.); +#7524 = EDGE_CURVE('',#7517,#7500,#7525,.T.); +#7525 = LINE('',#7526,#7527); +#7526 = CARTESIAN_POINT('',(0.95,-7.95,0.95)); +#7527 = VECTOR('',#7528,1.); +#7528 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7529 = PLANE('',#7530); +#7530 = AXIS2_PLACEMENT_3D('',#7531,#7532,#7533); +#7531 = CARTESIAN_POINT('',(0.95,2.45,0.95)); +#7532 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7533 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7534 = ADVANCED_FACE('',(#7535),#7577,.T.); +#7535 = FACE_BOUND('',#7536,.T.); +#7536 = EDGE_LOOP('',(#7537,#7547,#7555,#7563,#7571)); +#7537 = ORIENTED_EDGE('',*,*,#7538,.F.); +#7538 = EDGE_CURVE('',#7539,#7541,#7543,.T.); +#7539 = VERTEX_POINT('',#7540); +#7540 = CARTESIAN_POINT('',(0.95,-0.7,0.95)); +#7541 = VERTEX_POINT('',#7542); +#7542 = CARTESIAN_POINT('',(1.59,-0.7,0.95)); +#7543 = LINE('',#7544,#7545); +#7544 = CARTESIAN_POINT('',(-0.795,-0.7,0.95)); +#7545 = VECTOR('',#7546,1.); +#7546 = DIRECTION('',(1.,0.,0.)); +#7547 = ORIENTED_EDGE('',*,*,#7548,.T.); +#7548 = EDGE_CURVE('',#7539,#7549,#7551,.T.); +#7549 = VERTEX_POINT('',#7550); +#7550 = CARTESIAN_POINT('',(0.95,2.45,0.95)); +#7551 = LINE('',#7552,#7553); +#7552 = CARTESIAN_POINT('',(0.95,-7.95,0.95)); +#7553 = VECTOR('',#7554,1.); +#7554 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7555 = ORIENTED_EDGE('',*,*,#7556,.T.); +#7556 = EDGE_CURVE('',#7549,#7557,#7559,.T.); +#7557 = VERTEX_POINT('',#7558); +#7558 = CARTESIAN_POINT('',(1.58972288734,2.45,0.95)); +#7559 = LINE('',#7560,#7561); +#7560 = CARTESIAN_POINT('',(0.95,2.45,0.95)); +#7561 = VECTOR('',#7562,1.); +#7562 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7563 = ORIENTED_EDGE('',*,*,#7564,.T.); +#7564 = EDGE_CURVE('',#7557,#7565,#7567,.T.); +#7565 = VERTEX_POINT('',#7566); +#7566 = CARTESIAN_POINT('',(1.59,2.45,0.95)); +#7567 = LINE('',#7568,#7569); +#7568 = CARTESIAN_POINT('',(0.95,2.45,0.95)); +#7569 = VECTOR('',#7570,1.); +#7570 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7571 = ORIENTED_EDGE('',*,*,#7572,.T.); +#7572 = EDGE_CURVE('',#7565,#7541,#7573,.T.); +#7573 = LINE('',#7574,#7575); +#7574 = CARTESIAN_POINT('',(1.59,-7.95,0.95)); +#7575 = VECTOR('',#7576,1.); +#7576 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#7577 = PLANE('',#7578); +#7578 = AXIS2_PLACEMENT_3D('',#7579,#7580,#7581); +#7579 = CARTESIAN_POINT('',(0.95,2.45,0.95)); +#7580 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7581 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7582 = ADVANCED_FACE('',(#7583),#7599,.F.); +#7583 = FACE_BOUND('',#7584,.T.); +#7584 = EDGE_LOOP('',(#7585,#7591,#7592,#7598)); +#7585 = ORIENTED_EDGE('',*,*,#7586,.F.); +#7586 = EDGE_CURVE('',#7500,#7461,#7587,.T.); +#7587 = LINE('',#7588,#7589); +#7588 = CARTESIAN_POINT('',(0.95,-2.5,0.635)); +#7589 = VECTOR('',#7590,1.); +#7590 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#7591 = ORIENTED_EDGE('',*,*,#7524,.F.); +#7592 = ORIENTED_EDGE('',*,*,#7593,.T.); +#7593 = EDGE_CURVE('',#7517,#7469,#7594,.T.); +#7594 = LINE('',#7595,#7596); +#7595 = CARTESIAN_POINT('',(0.95,-7.949999999999,1.77)); +#7596 = VECTOR('',#7597,1.); +#7597 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#7598 = ORIENTED_EDGE('',*,*,#7468,.F.); +#7599 = PLANE('',#7600); +#7600 = AXIS2_PLACEMENT_3D('',#7601,#7602,#7603); +#7601 = CARTESIAN_POINT('',(0.95,-2.75,1.27)); +#7602 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7603 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7604 = ADVANCED_FACE('',(#7605),#7630,.F.); +#7605 = FACE_BOUND('',#7606,.T.); +#7606 = EDGE_LOOP('',(#7607,#7615,#7623,#7629)); +#7607 = ORIENTED_EDGE('',*,*,#7608,.F.); +#7608 = EDGE_CURVE('',#7609,#7539,#7611,.T.); +#7609 = VERTEX_POINT('',#7610); +#7610 = CARTESIAN_POINT('',(0.95,-0.7,1.59)); +#7611 = LINE('',#7612,#7613); +#7612 = CARTESIAN_POINT('',(0.95,-0.7,0.635)); +#7613 = VECTOR('',#7614,1.); +#7614 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7615 = ORIENTED_EDGE('',*,*,#7616,.F.); +#7616 = EDGE_CURVE('',#7617,#7609,#7619,.T.); +#7617 = VERTEX_POINT('',#7618); +#7618 = CARTESIAN_POINT('',(0.95,2.45,1.59)); +#7619 = LINE('',#7620,#7621); +#7620 = CARTESIAN_POINT('',(0.95,2.45,1.59)); +#7621 = VECTOR('',#7622,1.); +#7622 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#7623 = ORIENTED_EDGE('',*,*,#7624,.T.); +#7624 = EDGE_CURVE('',#7617,#7549,#7625,.T.); +#7625 = LINE('',#7626,#7627); +#7626 = CARTESIAN_POINT('',(0.95,2.449999999999,0.77)); +#7627 = VECTOR('',#7628,1.); +#7628 = DIRECTION('',(3.749151804555E-33,1.232595164408E-32,-1.)); +#7629 = ORIENTED_EDGE('',*,*,#7548,.F.); +#7630 = PLANE('',#7631); +#7631 = AXIS2_PLACEMENT_3D('',#7632,#7633,#7634); +#7632 = CARTESIAN_POINT('',(0.95,-2.75,1.27)); +#7633 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7634 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7635 = ADVANCED_FACE('',(#7636),#7666,.F.); +#7636 = FACE_BOUND('',#7637,.T.); +#7637 = EDGE_LOOP('',(#7638,#7646,#7652,#7660)); +#7638 = ORIENTED_EDGE('',*,*,#7639,.F.); +#7639 = EDGE_CURVE('',#7509,#7640,#7642,.T.); +#7640 = VERTEX_POINT('',#7641); +#7641 = CARTESIAN_POINT('',(1.430000000003,-8.5,1.11)); +#7642 = LINE('',#7643,#7644); +#7643 = CARTESIAN_POINT('',(1.518947877482,-8.193711192998, + 1.020897801599)); +#7644 = VECTOR('',#7645,1.); +#7645 = DIRECTION('',(-0.268598772191,-0.92491018143,0.269064780052)); +#7646 = ORIENTED_EDGE('',*,*,#7647,.F.); +#7647 = EDGE_CURVE('',#7477,#7509,#7648,.T.); +#7648 = LINE('',#7649,#7650); +#7649 = CARTESIAN_POINT('',(1.58972288734,-7.95,2.27)); +#7650 = VECTOR('',#7651,1.); +#7651 = DIRECTION('',(0.,-1.224606353822E-16,-1.)); +#7652 = ORIENTED_EDGE('',*,*,#7653,.F.); +#7653 = EDGE_CURVE('',#7654,#7477,#7656,.T.); +#7654 = VERTEX_POINT('',#7655); +#7655 = CARTESIAN_POINT('',(1.430000000003,-8.5,1.43)); +#7656 = LINE('',#7657,#7658); +#7657 = CARTESIAN_POINT('',(1.517118531221,-8.200010480847, + 1.517269678299)); +#7658 = VECTOR('',#7659,1.); +#7659 = DIRECTION('',(0.268598772191,0.92491018143,0.269064780052)); +#7660 = ORIENTED_EDGE('',*,*,#7661,.F.); +#7661 = EDGE_CURVE('',#7640,#7654,#7662,.T.); +#7662 = LINE('',#7663,#7664); +#7663 = CARTESIAN_POINT('',(1.430000000003,-8.5,1.69)); +#7664 = VECTOR('',#7665,1.); +#7665 = DIRECTION('',(-1.778160569846E-17,6.123031769112E-17,1.)); +#7666 = PLANE('',#7667); +#7667 = AXIS2_PLACEMENT_3D('',#7668,#7669,#7670); +#7668 = CARTESIAN_POINT('',(1.58972288734,-7.95,2.27)); +#7669 = DIRECTION('',(-0.960324967172,0.278883411887,-3.415223981728E-17 + )); +#7670 = DIRECTION('',(0.278883411887,0.960324967172,-1.176020056533E-16) + ); +#7671 = ADVANCED_FACE('',(#7672),#7697,.F.); +#7672 = FACE_BOUND('',#7673,.T.); +#7673 = EDGE_LOOP('',(#7674,#7682,#7683,#7691)); +#7674 = ORIENTED_EDGE('',*,*,#7675,.F.); +#7675 = EDGE_CURVE('',#7469,#7676,#7678,.T.); +#7676 = VERTEX_POINT('',#7677); +#7677 = CARTESIAN_POINT('',(1.109999999997,-8.5,1.43)); +#7678 = LINE('',#7679,#7680); +#7679 = CARTESIAN_POINT('',(1.073811139381,-8.375600791632, + 1.466188860616)); +#7680 = VECTOR('',#7681,1.); +#7681 = DIRECTION('',(0.269031078557,-0.924794332561,-0.269031078563)); +#7682 = ORIENTED_EDGE('',*,*,#7593,.F.); +#7683 = ORIENTED_EDGE('',*,*,#7684,.F.); +#7684 = EDGE_CURVE('',#7685,#7517,#7687,.T.); +#7685 = VERTEX_POINT('',#7686); +#7686 = CARTESIAN_POINT('',(1.109999999997,-8.5,1.11)); +#7687 = LINE('',#7688,#7689); +#7688 = CARTESIAN_POINT('',(1.071979078313,-8.369303081708, + 1.071979078315)); +#7689 = VECTOR('',#7690,1.); +#7690 = DIRECTION('',(-0.269031078557,0.924794332561,-0.269031078563)); +#7691 = ORIENTED_EDGE('',*,*,#7692,.F.); +#7692 = EDGE_CURVE('',#7676,#7685,#7693,.T.); +#7693 = LINE('',#7694,#7695); +#7694 = CARTESIAN_POINT('',(1.109999999997,-8.5,1.69)); +#7695 = VECTOR('',#7696,1.); +#7696 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7697 = PLANE('',#7698); +#7698 = AXIS2_PLACEMENT_3D('',#7699,#7700,#7701); +#7699 = CARTESIAN_POINT('',(1.109999999997,-8.5,2.27)); +#7700 = DIRECTION('',(0.960195296605,0.279329540824,-3.420687305034E-17) + ); +#7701 = DIRECTION('',(0.279329540824,-0.960195296605,1.175861261133E-16) + ); +#7702 = ADVANCED_FACE('',(#7703),#7709,.F.); +#7703 = FACE_BOUND('',#7704,.T.); +#7704 = EDGE_LOOP('',(#7705,#7706,#7707,#7708)); +#7705 = ORIENTED_EDGE('',*,*,#7508,.T.); +#7706 = ORIENTED_EDGE('',*,*,#7438,.F.); +#7707 = ORIENTED_EDGE('',*,*,#7484,.F.); +#7708 = ORIENTED_EDGE('',*,*,#7647,.T.); +#7709 = PLANE('',#7710); +#7710 = AXIS2_PLACEMENT_3D('',#7711,#7712,#7713); +#7711 = CARTESIAN_POINT('',(2.047543330904,-7.95,2.27)); +#7712 = DIRECTION('',(0.,1.,-1.224606353822E-16)); +#7713 = DIRECTION('',(1.,0.,0.)); +#7714 = ADVANCED_FACE('',(#7715),#7726,.T.); +#7715 = FACE_BOUND('',#7716,.T.); +#7716 = EDGE_LOOP('',(#7717,#7718,#7719,#7720)); +#7717 = ORIENTED_EDGE('',*,*,#7684,.T.); +#7718 = ORIENTED_EDGE('',*,*,#7516,.T.); +#7719 = ORIENTED_EDGE('',*,*,#7639,.T.); +#7720 = ORIENTED_EDGE('',*,*,#7721,.F.); +#7721 = EDGE_CURVE('',#7685,#7640,#7722,.T.); +#7722 = LINE('',#7723,#7724); +#7723 = CARTESIAN_POINT('',(0.95,-8.5,1.11)); +#7724 = VECTOR('',#7725,1.); +#7725 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7726 = PLANE('',#7727); +#7727 = AXIS2_PLACEMENT_3D('',#7728,#7729,#7730); +#7728 = CARTESIAN_POINT('',(0.95,-7.95,0.95)); +#7729 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,-0.960195296604 + )); +#7730 = DIRECTION('',(5.879306305656E-17,0.960195296604,-0.27932954083) + ); +#7731 = ADVANCED_FACE('',(#7732),#7743,.T.); +#7732 = FACE_BOUND('',#7733,.T.); +#7733 = EDGE_LOOP('',(#7734,#7735,#7736,#7737)); +#7734 = ORIENTED_EDGE('',*,*,#7692,.T.); +#7735 = ORIENTED_EDGE('',*,*,#7721,.T.); +#7736 = ORIENTED_EDGE('',*,*,#7661,.T.); +#7737 = ORIENTED_EDGE('',*,*,#7738,.F.); +#7738 = EDGE_CURVE('',#7676,#7654,#7739,.T.); +#7739 = LINE('',#7740,#7741); +#7740 = CARTESIAN_POINT('',(0.95,-8.5,1.43)); +#7741 = VECTOR('',#7742,1.); +#7742 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7743 = PLANE('',#7744); +#7744 = AXIS2_PLACEMENT_3D('',#7745,#7746,#7747); +#7745 = CARTESIAN_POINT('',(0.95,-8.5,1.11)); +#7746 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#7747 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7748 = ADVANCED_FACE('',(#7749),#7781,.F.); +#7749 = FACE_BOUND('',#7750,.T.); +#7750 = EDGE_LOOP('',(#7751,#7761,#7767,#7775)); +#7751 = ORIENTED_EDGE('',*,*,#7752,.F.); +#7752 = EDGE_CURVE('',#7753,#7755,#7757,.T.); +#7753 = VERTEX_POINT('',#7754); +#7754 = CARTESIAN_POINT('',(1.58972288734,2.45,1.59)); +#7755 = VERTEX_POINT('',#7756); +#7756 = CARTESIAN_POINT('',(1.430000000003,3.,1.43)); +#7757 = LINE('',#7758,#7759); +#7758 = CARTESIAN_POINT('',(1.518947877482,2.693711192998,1.519102198401 + )); +#7759 = VECTOR('',#7760,1.); +#7760 = DIRECTION('',(-0.268598772191,0.92491018143,-0.269064780052)); +#7761 = ORIENTED_EDGE('',*,*,#7762,.F.); +#7762 = EDGE_CURVE('',#7557,#7753,#7763,.T.); +#7763 = LINE('',#7764,#7765); +#7764 = CARTESIAN_POINT('',(1.58972288734,2.45,0.27)); +#7765 = VECTOR('',#7766,1.); +#7766 = DIRECTION('',(0.,0.,1.)); +#7767 = ORIENTED_EDGE('',*,*,#7768,.F.); +#7768 = EDGE_CURVE('',#7769,#7557,#7771,.T.); +#7769 = VERTEX_POINT('',#7770); +#7770 = CARTESIAN_POINT('',(1.430000000003,3.,1.11)); +#7771 = LINE('',#7772,#7773); +#7772 = CARTESIAN_POINT('',(1.517118531221,2.700010480847,1.022730321701 + )); +#7773 = VECTOR('',#7774,1.); +#7774 = DIRECTION('',(0.268598772191,-0.92491018143,-0.269064780052)); +#7775 = ORIENTED_EDGE('',*,*,#7776,.F.); +#7776 = EDGE_CURVE('',#7755,#7769,#7777,.T.); +#7777 = LINE('',#7778,#7779); +#7778 = CARTESIAN_POINT('',(1.430000000003,3.,0.85)); +#7779 = VECTOR('',#7780,1.); +#7780 = DIRECTION('',(3.556321139691E-17,-1.224606353822E-16,-1.)); +#7781 = PLANE('',#7782); +#7782 = AXIS2_PLACEMENT_3D('',#7783,#7784,#7785); +#7783 = CARTESIAN_POINT('',(1.58972288734,2.45,0.27)); +#7784 = DIRECTION('',(-0.960324967172,-0.278883411887,0.)); +#7785 = DIRECTION('',(0.278883411887,-0.960324967172,0.)); +#7786 = ADVANCED_FACE('',(#7787),#7812,.F.); +#7787 = FACE_BOUND('',#7788,.T.); +#7788 = EDGE_LOOP('',(#7789,#7797,#7805,#7811)); +#7789 = ORIENTED_EDGE('',*,*,#7790,.F.); +#7790 = EDGE_CURVE('',#7791,#7617,#7793,.T.); +#7791 = VERTEX_POINT('',#7792); +#7792 = CARTESIAN_POINT('',(1.109999999997,3.,1.43)); +#7793 = LINE('',#7794,#7795); +#7794 = CARTESIAN_POINT('',(1.071979078313,2.869303081708,1.468020921685 + )); +#7795 = VECTOR('',#7796,1.); +#7796 = DIRECTION('',(-0.269031078557,-0.924794332561,0.269031078563)); +#7797 = ORIENTED_EDGE('',*,*,#7798,.F.); +#7798 = EDGE_CURVE('',#7799,#7791,#7801,.T.); +#7799 = VERTEX_POINT('',#7800); +#7800 = CARTESIAN_POINT('',(1.109999999997,3.,1.11)); +#7801 = LINE('',#7802,#7803); +#7802 = CARTESIAN_POINT('',(1.109999999997,3.,0.85)); +#7803 = VECTOR('',#7804,1.); +#7804 = DIRECTION('',(0.,1.224606353822E-16,1.)); +#7805 = ORIENTED_EDGE('',*,*,#7806,.F.); +#7806 = EDGE_CURVE('',#7549,#7799,#7807,.T.); +#7807 = LINE('',#7808,#7809); +#7808 = CARTESIAN_POINT('',(1.073811139381,2.875600791632,1.073811139384 + )); +#7809 = VECTOR('',#7810,1.); +#7810 = DIRECTION('',(0.269031078557,0.924794332561,0.269031078563)); +#7811 = ORIENTED_EDGE('',*,*,#7624,.F.); +#7812 = PLANE('',#7813); +#7813 = AXIS2_PLACEMENT_3D('',#7814,#7815,#7816); +#7814 = CARTESIAN_POINT('',(1.109999999997,3.,0.27)); +#7815 = DIRECTION('',(0.960195296605,-0.279329540824,0.)); +#7816 = DIRECTION('',(0.279329540824,0.960195296605,0.)); +#7817 = ADVANCED_FACE('',(#7818),#7836,.F.); +#7818 = FACE_BOUND('',#7819,.T.); +#7819 = EDGE_LOOP('',(#7820,#7828,#7834,#7835)); +#7820 = ORIENTED_EDGE('',*,*,#7821,.T.); +#7821 = EDGE_CURVE('',#7753,#7822,#7824,.T.); +#7822 = VERTEX_POINT('',#7823); +#7823 = CARTESIAN_POINT('',(1.59,2.45,1.59)); +#7824 = LINE('',#7825,#7826); +#7825 = CARTESIAN_POINT('',(0.95,2.45,1.59)); +#7826 = VECTOR('',#7827,1.); +#7827 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7828 = ORIENTED_EDGE('',*,*,#7829,.F.); +#7829 = EDGE_CURVE('',#7565,#7822,#7830,.T.); +#7830 = LINE('',#7831,#7832); +#7831 = CARTESIAN_POINT('',(1.59,2.45,0.77)); +#7832 = VECTOR('',#7833,1.); +#7833 = DIRECTION('',(-3.749151804555E-33,0.,1.)); +#7834 = ORIENTED_EDGE('',*,*,#7564,.F.); +#7835 = ORIENTED_EDGE('',*,*,#7762,.T.); +#7836 = PLANE('',#7837); +#7837 = AXIS2_PLACEMENT_3D('',#7838,#7839,#7840); +#7838 = CARTESIAN_POINT('',(2.047543330904,2.45,0.27)); +#7839 = DIRECTION('',(0.,-1.,0.)); +#7840 = DIRECTION('',(1.,0.,0.)); +#7841 = ADVANCED_FACE('',(#7842),#7853,.T.); +#7842 = FACE_BOUND('',#7843,.T.); +#7843 = EDGE_LOOP('',(#7844,#7845,#7851,#7852)); +#7844 = ORIENTED_EDGE('',*,*,#7806,.T.); +#7845 = ORIENTED_EDGE('',*,*,#7846,.T.); +#7846 = EDGE_CURVE('',#7799,#7769,#7847,.T.); +#7847 = LINE('',#7848,#7849); +#7848 = CARTESIAN_POINT('',(0.95,3.,1.11)); +#7849 = VECTOR('',#7850,1.); +#7850 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7851 = ORIENTED_EDGE('',*,*,#7768,.T.); +#7852 = ORIENTED_EDGE('',*,*,#7556,.F.); +#7853 = PLANE('',#7854); +#7854 = AXIS2_PLACEMENT_3D('',#7855,#7856,#7857); +#7855 = CARTESIAN_POINT('',(0.95,3.,1.11)); +#7856 = DIRECTION('',(1.710343652554E-17,0.27932954083,-0.960195296604) + ); +#7857 = DIRECTION('',(5.879306305656E-17,0.960195296604,0.27932954083)); +#7858 = ADVANCED_FACE('',(#7859),#7875,.T.); +#7859 = FACE_BOUND('',#7860,.T.); +#7860 = EDGE_LOOP('',(#7861,#7862,#7868,#7869)); +#7861 = ORIENTED_EDGE('',*,*,#7790,.T.); +#7862 = ORIENTED_EDGE('',*,*,#7863,.T.); +#7863 = EDGE_CURVE('',#7617,#7753,#7864,.T.); +#7864 = LINE('',#7865,#7866); +#7865 = CARTESIAN_POINT('',(0.95,2.45,1.59)); +#7866 = VECTOR('',#7867,1.); +#7867 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7868 = ORIENTED_EDGE('',*,*,#7752,.T.); +#7869 = ORIENTED_EDGE('',*,*,#7870,.F.); +#7870 = EDGE_CURVE('',#7791,#7755,#7871,.T.); +#7871 = LINE('',#7872,#7873); +#7872 = CARTESIAN_POINT('',(0.95,3.,1.43)); +#7873 = VECTOR('',#7874,1.); +#7874 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7875 = PLANE('',#7876); +#7876 = AXIS2_PLACEMENT_3D('',#7877,#7878,#7879); +#7877 = CARTESIAN_POINT('',(0.95,2.45,1.59)); +#7878 = DIRECTION('',(1.710343652554E-17,0.27932954083,0.960195296604)); +#7879 = DIRECTION('',(-5.879306305656E-17,-0.960195296604,0.27932954083) + ); +#7880 = ADVANCED_FACE('',(#7881),#7887,.T.); +#7881 = FACE_BOUND('',#7882,.T.); +#7882 = EDGE_LOOP('',(#7883,#7884,#7885,#7886)); +#7883 = ORIENTED_EDGE('',*,*,#7798,.T.); +#7884 = ORIENTED_EDGE('',*,*,#7870,.T.); +#7885 = ORIENTED_EDGE('',*,*,#7776,.T.); +#7886 = ORIENTED_EDGE('',*,*,#7846,.F.); +#7887 = PLANE('',#7888); +#7888 = AXIS2_PLACEMENT_3D('',#7889,#7890,#7891); +#7889 = CARTESIAN_POINT('',(0.95,3.,1.43)); +#7890 = DIRECTION('',(6.123031769112E-17,1.,-1.224606353822E-16)); +#7891 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#7892 = ADVANCED_FACE('',(#7893),#7899,.T.); +#7893 = FACE_BOUND('',#7894,.T.); +#7894 = EDGE_LOOP('',(#7895,#7896,#7897,#7898)); +#7895 = ORIENTED_EDGE('',*,*,#7675,.T.); +#7896 = ORIENTED_EDGE('',*,*,#7738,.T.); +#7897 = ORIENTED_EDGE('',*,*,#7653,.T.); +#7898 = ORIENTED_EDGE('',*,*,#7476,.F.); +#7899 = PLANE('',#7900); +#7900 = AXIS2_PLACEMENT_3D('',#7901,#7902,#7903); +#7901 = CARTESIAN_POINT('',(0.95,-8.5,1.43)); +#7902 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,0.960195296604) + ); +#7903 = DIRECTION('',(-5.879306305655E-17,-0.960195296604,-0.27932954083 + )); +#7904 = ADVANCED_FACE('',(#7905),#7924,.T.); +#7905 = FACE_BOUND('',#7906,.T.); +#7906 = EDGE_LOOP('',(#7907,#7915,#7921,#7922,#7923)); +#7907 = ORIENTED_EDGE('',*,*,#7908,.F.); +#7908 = EDGE_CURVE('',#7909,#7609,#7911,.T.); +#7909 = VERTEX_POINT('',#7910); +#7910 = CARTESIAN_POINT('',(1.59,-0.7,1.59)); +#7911 = LINE('',#7912,#7913); +#7912 = CARTESIAN_POINT('',(-0.795,-0.7,1.59)); +#7913 = VECTOR('',#7914,1.); +#7914 = DIRECTION('',(-1.,4.402532809476E-49,7.190119168882E-33)); +#7915 = ORIENTED_EDGE('',*,*,#7916,.T.); +#7916 = EDGE_CURVE('',#7909,#7822,#7917,.T.); +#7917 = LINE('',#7918,#7919); +#7918 = CARTESIAN_POINT('',(1.59,2.45,1.59)); +#7919 = VECTOR('',#7920,1.); +#7920 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#7921 = ORIENTED_EDGE('',*,*,#7821,.F.); +#7922 = ORIENTED_EDGE('',*,*,#7863,.F.); +#7923 = ORIENTED_EDGE('',*,*,#7616,.T.); +#7924 = PLANE('',#7925); +#7925 = AXIS2_PLACEMENT_3D('',#7926,#7927,#7928); +#7926 = CARTESIAN_POINT('',(0.95,-7.95,1.59)); +#7927 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#7928 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#7929 = ADVANCED_FACE('',(#7930),#7941,.T.); +#7930 = FACE_BOUND('',#7931,.T.); +#7931 = EDGE_LOOP('',(#7932,#7938,#7939,#7940)); +#7932 = ORIENTED_EDGE('',*,*,#7933,.F.); +#7933 = EDGE_CURVE('',#7541,#7909,#7934,.T.); +#7934 = LINE('',#7935,#7936); +#7935 = CARTESIAN_POINT('',(1.59,-0.7,0.635)); +#7936 = VECTOR('',#7937,1.); +#7937 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#7938 = ORIENTED_EDGE('',*,*,#7572,.F.); +#7939 = ORIENTED_EDGE('',*,*,#7829,.T.); +#7940 = ORIENTED_EDGE('',*,*,#7916,.F.); +#7941 = PLANE('',#7942); +#7942 = AXIS2_PLACEMENT_3D('',#7943,#7944,#7945); +#7943 = CARTESIAN_POINT('',(1.59,-2.75,1.27)); +#7944 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7945 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7946 = ADVANCED_FACE('',(#7947),#7981,.T.); +#7947 = FACE_BOUND('',#7948,.T.); +#7948 = EDGE_LOOP('',(#7949,#7959,#7967,#7975)); +#7949 = ORIENTED_EDGE('',*,*,#7950,.F.); +#7950 = EDGE_CURVE('',#7951,#7953,#7955,.T.); +#7951 = VERTEX_POINT('',#7952); +#7952 = CARTESIAN_POINT('',(-0.95,-2.5,1.59)); +#7953 = VERTEX_POINT('',#7954); +#7954 = CARTESIAN_POINT('',(-0.95,-2.5,0.95)); +#7955 = LINE('',#7956,#7957); +#7956 = CARTESIAN_POINT('',(-0.95,-2.5,0.635)); +#7957 = VECTOR('',#7958,1.); +#7958 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#7959 = ORIENTED_EDGE('',*,*,#7960,.F.); +#7960 = EDGE_CURVE('',#7961,#7951,#7963,.T.); +#7961 = VERTEX_POINT('',#7962); +#7962 = CARTESIAN_POINT('',(-0.95,-7.95,1.59)); +#7963 = LINE('',#7964,#7965); +#7964 = CARTESIAN_POINT('',(-0.95,2.45,1.59)); +#7965 = VECTOR('',#7966,1.); +#7966 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#7967 = ORIENTED_EDGE('',*,*,#7968,.T.); +#7968 = EDGE_CURVE('',#7961,#7969,#7971,.T.); +#7969 = VERTEX_POINT('',#7970); +#7970 = CARTESIAN_POINT('',(-0.95,-7.95,0.95)); +#7971 = LINE('',#7972,#7973); +#7972 = CARTESIAN_POINT('',(-0.95,-7.95,1.77)); +#7973 = VECTOR('',#7974,1.); +#7974 = DIRECTION('',(-3.749151804555E-33,-1.224606353822E-16,-1.)); +#7975 = ORIENTED_EDGE('',*,*,#7976,.F.); +#7976 = EDGE_CURVE('',#7953,#7969,#7977,.T.); +#7977 = LINE('',#7978,#7979); +#7978 = CARTESIAN_POINT('',(-0.95,-7.95,0.95)); +#7979 = VECTOR('',#7980,1.); +#7980 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#7981 = PLANE('',#7982); +#7982 = AXIS2_PLACEMENT_3D('',#7983,#7984,#7985); +#7983 = CARTESIAN_POINT('',(-0.95,-2.75,1.27)); +#7984 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#7985 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#7986 = ADVANCED_FACE('',(#7987),#8020,.T.); +#7987 = FACE_BOUND('',#7988,.T.); +#7988 = EDGE_LOOP('',(#7989,#7997,#8005,#8013,#8019)); +#7989 = ORIENTED_EDGE('',*,*,#7990,.F.); +#7990 = EDGE_CURVE('',#7991,#7951,#7993,.T.); +#7991 = VERTEX_POINT('',#7992); +#7992 = CARTESIAN_POINT('',(-1.59,-2.5,1.59)); +#7993 = LINE('',#7994,#7995); +#7994 = CARTESIAN_POINT('',(-2.7,-2.5,1.59)); +#7995 = VECTOR('',#7996,1.); +#7996 = DIRECTION('',(1.,-4.402532809476E-49,-7.190119168882E-33)); +#7997 = ORIENTED_EDGE('',*,*,#7998,.T.); +#7998 = EDGE_CURVE('',#7991,#7999,#8001,.T.); +#7999 = VERTEX_POINT('',#8000); +#8000 = CARTESIAN_POINT('',(-1.59,-7.95,1.59)); +#8001 = LINE('',#8002,#8003); +#8002 = CARTESIAN_POINT('',(-1.59,2.45,1.59)); +#8003 = VECTOR('',#8004,1.); +#8004 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#8005 = ORIENTED_EDGE('',*,*,#8006,.T.); +#8006 = EDGE_CURVE('',#7999,#8007,#8009,.T.); +#8007 = VERTEX_POINT('',#8008); +#8008 = CARTESIAN_POINT('',(-0.95027711266,-7.95,1.59)); +#8009 = LINE('',#8010,#8011); +#8010 = CARTESIAN_POINT('',(-1.59,-7.95,1.59)); +#8011 = VECTOR('',#8012,1.); +#8012 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8013 = ORIENTED_EDGE('',*,*,#8014,.T.); +#8014 = EDGE_CURVE('',#8007,#7961,#8015,.T.); +#8015 = LINE('',#8016,#8017); +#8016 = CARTESIAN_POINT('',(-1.59,-7.95,1.59)); +#8017 = VECTOR('',#8018,1.); +#8018 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8019 = ORIENTED_EDGE('',*,*,#7960,.T.); +#8020 = PLANE('',#8021); +#8021 = AXIS2_PLACEMENT_3D('',#8022,#8023,#8024); +#8022 = CARTESIAN_POINT('',(-1.59,-7.95,1.59)); +#8023 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#8024 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#8025 = ADVANCED_FACE('',(#8026),#8059,.T.); +#8026 = FACE_BOUND('',#8027,.T.); +#8027 = EDGE_LOOP('',(#8028,#8036,#8037,#8045,#8053)); +#8028 = ORIENTED_EDGE('',*,*,#8029,.F.); +#8029 = EDGE_CURVE('',#7953,#8030,#8032,.T.); +#8030 = VERTEX_POINT('',#8031); +#8031 = CARTESIAN_POINT('',(-1.59,-2.5,0.95)); +#8032 = LINE('',#8033,#8034); +#8033 = CARTESIAN_POINT('',(-2.7,-2.5,0.95)); +#8034 = VECTOR('',#8035,1.); +#8035 = DIRECTION('',(-1.,0.,0.)); +#8036 = ORIENTED_EDGE('',*,*,#7976,.T.); +#8037 = ORIENTED_EDGE('',*,*,#8038,.F.); +#8038 = EDGE_CURVE('',#8039,#7969,#8041,.T.); +#8039 = VERTEX_POINT('',#8040); +#8040 = CARTESIAN_POINT('',(-0.95027711266,-7.95,0.95)); +#8041 = LINE('',#8042,#8043); +#8042 = CARTESIAN_POINT('',(-1.59,-7.95,0.95)); +#8043 = VECTOR('',#8044,1.); +#8044 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8045 = ORIENTED_EDGE('',*,*,#8046,.F.); +#8046 = EDGE_CURVE('',#8047,#8039,#8049,.T.); +#8047 = VERTEX_POINT('',#8048); +#8048 = CARTESIAN_POINT('',(-1.59,-7.95,0.95)); +#8049 = LINE('',#8050,#8051); +#8050 = CARTESIAN_POINT('',(-1.59,-7.95,0.95)); +#8051 = VECTOR('',#8052,1.); +#8052 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8053 = ORIENTED_EDGE('',*,*,#8054,.T.); +#8054 = EDGE_CURVE('',#8047,#8030,#8055,.T.); +#8055 = LINE('',#8056,#8057); +#8056 = CARTESIAN_POINT('',(-1.59,-7.95,0.95)); +#8057 = VECTOR('',#8058,1.); +#8058 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8059 = PLANE('',#8060); +#8060 = AXIS2_PLACEMENT_3D('',#8061,#8062,#8063); +#8061 = CARTESIAN_POINT('',(-1.59,2.45,0.95)); +#8062 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8063 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8064 = ADVANCED_FACE('',(#8065),#8107,.T.); +#8065 = FACE_BOUND('',#8066,.T.); +#8066 = EDGE_LOOP('',(#8067,#8077,#8085,#8093,#8101)); +#8067 = ORIENTED_EDGE('',*,*,#8068,.F.); +#8068 = EDGE_CURVE('',#8069,#8071,#8073,.T.); +#8069 = VERTEX_POINT('',#8070); +#8070 = CARTESIAN_POINT('',(-1.59,-0.7,0.95)); +#8071 = VERTEX_POINT('',#8072); +#8072 = CARTESIAN_POINT('',(-0.95,-0.7,0.95)); +#8073 = LINE('',#8074,#8075); +#8074 = CARTESIAN_POINT('',(-2.065,-0.7,0.95)); +#8075 = VECTOR('',#8076,1.); +#8076 = DIRECTION('',(1.,0.,0.)); +#8077 = ORIENTED_EDGE('',*,*,#8078,.T.); +#8078 = EDGE_CURVE('',#8069,#8079,#8081,.T.); +#8079 = VERTEX_POINT('',#8080); +#8080 = CARTESIAN_POINT('',(-1.59,2.45,0.95)); +#8081 = LINE('',#8082,#8083); +#8082 = CARTESIAN_POINT('',(-1.59,-7.95,0.95)); +#8083 = VECTOR('',#8084,1.); +#8084 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8085 = ORIENTED_EDGE('',*,*,#8086,.T.); +#8086 = EDGE_CURVE('',#8079,#8087,#8089,.T.); +#8087 = VERTEX_POINT('',#8088); +#8088 = CARTESIAN_POINT('',(-0.95027711266,2.45,0.95)); +#8089 = LINE('',#8090,#8091); +#8090 = CARTESIAN_POINT('',(-1.59,2.45,0.95)); +#8091 = VECTOR('',#8092,1.); +#8092 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8093 = ORIENTED_EDGE('',*,*,#8094,.T.); +#8094 = EDGE_CURVE('',#8087,#8095,#8097,.T.); +#8095 = VERTEX_POINT('',#8096); +#8096 = CARTESIAN_POINT('',(-0.95,2.45,0.95)); +#8097 = LINE('',#8098,#8099); +#8098 = CARTESIAN_POINT('',(-1.59,2.45,0.95)); +#8099 = VECTOR('',#8100,1.); +#8100 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8101 = ORIENTED_EDGE('',*,*,#8102,.T.); +#8102 = EDGE_CURVE('',#8095,#8071,#8103,.T.); +#8103 = LINE('',#8104,#8105); +#8104 = CARTESIAN_POINT('',(-0.95,-7.95,0.95)); +#8105 = VECTOR('',#8106,1.); +#8106 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#8107 = PLANE('',#8108); +#8108 = AXIS2_PLACEMENT_3D('',#8109,#8110,#8111); +#8109 = CARTESIAN_POINT('',(-1.59,2.45,0.95)); +#8110 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8111 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8112 = ADVANCED_FACE('',(#8113),#8129,.F.); +#8113 = FACE_BOUND('',#8114,.T.); +#8114 = EDGE_LOOP('',(#8115,#8121,#8122,#8128)); +#8115 = ORIENTED_EDGE('',*,*,#8116,.F.); +#8116 = EDGE_CURVE('',#8030,#7991,#8117,.T.); +#8117 = LINE('',#8118,#8119); +#8118 = CARTESIAN_POINT('',(-1.59,-2.5,0.635)); +#8119 = VECTOR('',#8120,1.); +#8120 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#8121 = ORIENTED_EDGE('',*,*,#8054,.F.); +#8122 = ORIENTED_EDGE('',*,*,#8123,.T.); +#8123 = EDGE_CURVE('',#8047,#7999,#8124,.T.); +#8124 = LINE('',#8125,#8126); +#8125 = CARTESIAN_POINT('',(-1.59,-7.949999999999,1.77)); +#8126 = VECTOR('',#8127,1.); +#8127 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#8128 = ORIENTED_EDGE('',*,*,#7998,.F.); +#8129 = PLANE('',#8130); +#8130 = AXIS2_PLACEMENT_3D('',#8131,#8132,#8133); +#8131 = CARTESIAN_POINT('',(-1.59,-2.75,1.27)); +#8132 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8133 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8134 = ADVANCED_FACE('',(#8135),#8160,.F.); +#8135 = FACE_BOUND('',#8136,.T.); +#8136 = EDGE_LOOP('',(#8137,#8145,#8153,#8159)); +#8137 = ORIENTED_EDGE('',*,*,#8138,.F.); +#8138 = EDGE_CURVE('',#8139,#8069,#8141,.T.); +#8139 = VERTEX_POINT('',#8140); +#8140 = CARTESIAN_POINT('',(-1.59,-0.7,1.59)); +#8141 = LINE('',#8142,#8143); +#8142 = CARTESIAN_POINT('',(-1.59,-0.7,0.635)); +#8143 = VECTOR('',#8144,1.); +#8144 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8145 = ORIENTED_EDGE('',*,*,#8146,.F.); +#8146 = EDGE_CURVE('',#8147,#8139,#8149,.T.); +#8147 = VERTEX_POINT('',#8148); +#8148 = CARTESIAN_POINT('',(-1.59,2.45,1.59)); +#8149 = LINE('',#8150,#8151); +#8150 = CARTESIAN_POINT('',(-1.59,2.45,1.59)); +#8151 = VECTOR('',#8152,1.); +#8152 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#8153 = ORIENTED_EDGE('',*,*,#8154,.T.); +#8154 = EDGE_CURVE('',#8147,#8079,#8155,.T.); +#8155 = LINE('',#8156,#8157); +#8156 = CARTESIAN_POINT('',(-1.59,2.449999999999,0.77)); +#8157 = VECTOR('',#8158,1.); +#8158 = DIRECTION('',(3.749151804555E-33,1.232595164408E-32,-1.)); +#8159 = ORIENTED_EDGE('',*,*,#8078,.F.); +#8160 = PLANE('',#8161); +#8161 = AXIS2_PLACEMENT_3D('',#8162,#8163,#8164); +#8162 = CARTESIAN_POINT('',(-1.59,-2.75,1.27)); +#8163 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8164 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8165 = ADVANCED_FACE('',(#8166),#8196,.F.); +#8166 = FACE_BOUND('',#8167,.T.); +#8167 = EDGE_LOOP('',(#8168,#8176,#8182,#8190)); +#8168 = ORIENTED_EDGE('',*,*,#8169,.F.); +#8169 = EDGE_CURVE('',#8039,#8170,#8172,.T.); +#8170 = VERTEX_POINT('',#8171); +#8171 = CARTESIAN_POINT('',(-1.109999999997,-8.5,1.11)); +#8172 = LINE('',#8173,#8174); +#8173 = CARTESIAN_POINT('',(-1.021052122518,-8.193711192998, + 1.020897801599)); +#8174 = VECTOR('',#8175,1.); +#8175 = DIRECTION('',(-0.268598772191,-0.92491018143,0.269064780052)); +#8176 = ORIENTED_EDGE('',*,*,#8177,.F.); +#8177 = EDGE_CURVE('',#8007,#8039,#8178,.T.); +#8178 = LINE('',#8179,#8180); +#8179 = CARTESIAN_POINT('',(-0.95027711266,-7.95,2.27)); +#8180 = VECTOR('',#8181,1.); +#8181 = DIRECTION('',(0.,-1.224606353822E-16,-1.)); +#8182 = ORIENTED_EDGE('',*,*,#8183,.F.); +#8183 = EDGE_CURVE('',#8184,#8007,#8186,.T.); +#8184 = VERTEX_POINT('',#8185); +#8185 = CARTESIAN_POINT('',(-1.109999999997,-8.5,1.43)); +#8186 = LINE('',#8187,#8188); +#8187 = CARTESIAN_POINT('',(-1.022881468779,-8.200010480847, + 1.517269678299)); +#8188 = VECTOR('',#8189,1.); +#8189 = DIRECTION('',(0.268598772191,0.92491018143,0.269064780052)); +#8190 = ORIENTED_EDGE('',*,*,#8191,.F.); +#8191 = EDGE_CURVE('',#8170,#8184,#8192,.T.); +#8192 = LINE('',#8193,#8194); +#8193 = CARTESIAN_POINT('',(-1.109999999997,-8.5,1.69)); +#8194 = VECTOR('',#8195,1.); +#8195 = DIRECTION('',(-1.778160569846E-17,6.123031769112E-17,1.)); +#8196 = PLANE('',#8197); +#8197 = AXIS2_PLACEMENT_3D('',#8198,#8199,#8200); +#8198 = CARTESIAN_POINT('',(-0.95027711266,-7.95,2.27)); +#8199 = DIRECTION('',(-0.960324967172,0.278883411887,-3.415223981728E-17 + )); +#8200 = DIRECTION('',(0.278883411887,0.960324967172,-1.176020056533E-16) + ); +#8201 = ADVANCED_FACE('',(#8202),#8227,.F.); +#8202 = FACE_BOUND('',#8203,.T.); +#8203 = EDGE_LOOP('',(#8204,#8212,#8213,#8221)); +#8204 = ORIENTED_EDGE('',*,*,#8205,.F.); +#8205 = EDGE_CURVE('',#7999,#8206,#8208,.T.); +#8206 = VERTEX_POINT('',#8207); +#8207 = CARTESIAN_POINT('',(-1.430000000003,-8.5,1.43)); +#8208 = LINE('',#8209,#8210); +#8209 = CARTESIAN_POINT('',(-1.466188860619,-8.375600791632, + 1.466188860616)); +#8210 = VECTOR('',#8211,1.); +#8211 = DIRECTION('',(0.269031078557,-0.924794332561,-0.269031078563)); +#8212 = ORIENTED_EDGE('',*,*,#8123,.F.); +#8213 = ORIENTED_EDGE('',*,*,#8214,.F.); +#8214 = EDGE_CURVE('',#8215,#8047,#8217,.T.); +#8215 = VERTEX_POINT('',#8216); +#8216 = CARTESIAN_POINT('',(-1.430000000003,-8.5,1.11)); +#8217 = LINE('',#8218,#8219); +#8218 = CARTESIAN_POINT('',(-1.468020921687,-8.369303081708, + 1.071979078315)); +#8219 = VECTOR('',#8220,1.); +#8220 = DIRECTION('',(-0.269031078557,0.924794332561,-0.269031078563)); +#8221 = ORIENTED_EDGE('',*,*,#8222,.F.); +#8222 = EDGE_CURVE('',#8206,#8215,#8223,.T.); +#8223 = LINE('',#8224,#8225); +#8224 = CARTESIAN_POINT('',(-1.430000000003,-8.5,1.69)); +#8225 = VECTOR('',#8226,1.); +#8226 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8227 = PLANE('',#8228); +#8228 = AXIS2_PLACEMENT_3D('',#8229,#8230,#8231); +#8229 = CARTESIAN_POINT('',(-1.430000000003,-8.5,2.27)); +#8230 = DIRECTION('',(0.960195296605,0.279329540824,-3.420687305034E-17) + ); +#8231 = DIRECTION('',(0.279329540824,-0.960195296605,1.175861261133E-16) + ); +#8232 = ADVANCED_FACE('',(#8233),#8239,.F.); +#8233 = FACE_BOUND('',#8234,.T.); +#8234 = EDGE_LOOP('',(#8235,#8236,#8237,#8238)); +#8235 = ORIENTED_EDGE('',*,*,#8038,.T.); +#8236 = ORIENTED_EDGE('',*,*,#7968,.F.); +#8237 = ORIENTED_EDGE('',*,*,#8014,.F.); +#8238 = ORIENTED_EDGE('',*,*,#8177,.T.); +#8239 = PLANE('',#8240); +#8240 = AXIS2_PLACEMENT_3D('',#8241,#8242,#8243); +#8241 = CARTESIAN_POINT('',(-0.492456669096,-7.95,2.27)); +#8242 = DIRECTION('',(0.,1.,-1.224606353822E-16)); +#8243 = DIRECTION('',(1.,0.,0.)); +#8244 = ADVANCED_FACE('',(#8245),#8256,.T.); +#8245 = FACE_BOUND('',#8246,.T.); +#8246 = EDGE_LOOP('',(#8247,#8248,#8249,#8250)); +#8247 = ORIENTED_EDGE('',*,*,#8214,.T.); +#8248 = ORIENTED_EDGE('',*,*,#8046,.T.); +#8249 = ORIENTED_EDGE('',*,*,#8169,.T.); +#8250 = ORIENTED_EDGE('',*,*,#8251,.F.); +#8251 = EDGE_CURVE('',#8215,#8170,#8252,.T.); +#8252 = LINE('',#8253,#8254); +#8253 = CARTESIAN_POINT('',(-1.59,-8.5,1.11)); +#8254 = VECTOR('',#8255,1.); +#8255 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8256 = PLANE('',#8257); +#8257 = AXIS2_PLACEMENT_3D('',#8258,#8259,#8260); +#8258 = CARTESIAN_POINT('',(-1.59,-7.95,0.95)); +#8259 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,-0.960195296604 + )); +#8260 = DIRECTION('',(5.879306305656E-17,0.960195296604,-0.27932954083) + ); +#8261 = ADVANCED_FACE('',(#8262),#8273,.T.); +#8262 = FACE_BOUND('',#8263,.T.); +#8263 = EDGE_LOOP('',(#8264,#8265,#8266,#8267)); +#8264 = ORIENTED_EDGE('',*,*,#8222,.T.); +#8265 = ORIENTED_EDGE('',*,*,#8251,.T.); +#8266 = ORIENTED_EDGE('',*,*,#8191,.T.); +#8267 = ORIENTED_EDGE('',*,*,#8268,.F.); +#8268 = EDGE_CURVE('',#8206,#8184,#8269,.T.); +#8269 = LINE('',#8270,#8271); +#8270 = CARTESIAN_POINT('',(-1.59,-8.5,1.43)); +#8271 = VECTOR('',#8272,1.); +#8272 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8273 = PLANE('',#8274); +#8274 = AXIS2_PLACEMENT_3D('',#8275,#8276,#8277); +#8275 = CARTESIAN_POINT('',(-1.59,-8.5,1.11)); +#8276 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#8277 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8278 = ADVANCED_FACE('',(#8279),#8311,.F.); +#8279 = FACE_BOUND('',#8280,.T.); +#8280 = EDGE_LOOP('',(#8281,#8291,#8297,#8305)); +#8281 = ORIENTED_EDGE('',*,*,#8282,.F.); +#8282 = EDGE_CURVE('',#8283,#8285,#8287,.T.); +#8283 = VERTEX_POINT('',#8284); +#8284 = CARTESIAN_POINT('',(-0.95027711266,2.45,1.59)); +#8285 = VERTEX_POINT('',#8286); +#8286 = CARTESIAN_POINT('',(-1.109999999997,3.,1.43)); +#8287 = LINE('',#8288,#8289); +#8288 = CARTESIAN_POINT('',(-1.021052122518,2.693711192998, + 1.519102198401)); +#8289 = VECTOR('',#8290,1.); +#8290 = DIRECTION('',(-0.268598772191,0.92491018143,-0.269064780052)); +#8291 = ORIENTED_EDGE('',*,*,#8292,.F.); +#8292 = EDGE_CURVE('',#8087,#8283,#8293,.T.); +#8293 = LINE('',#8294,#8295); +#8294 = CARTESIAN_POINT('',(-0.95027711266,2.45,0.27)); +#8295 = VECTOR('',#8296,1.); +#8296 = DIRECTION('',(0.,0.,1.)); +#8297 = ORIENTED_EDGE('',*,*,#8298,.F.); +#8298 = EDGE_CURVE('',#8299,#8087,#8301,.T.); +#8299 = VERTEX_POINT('',#8300); +#8300 = CARTESIAN_POINT('',(-1.109999999997,3.,1.11)); +#8301 = LINE('',#8302,#8303); +#8302 = CARTESIAN_POINT('',(-1.022881468779,2.700010480847, + 1.022730321701)); +#8303 = VECTOR('',#8304,1.); +#8304 = DIRECTION('',(0.268598772191,-0.92491018143,-0.269064780052)); +#8305 = ORIENTED_EDGE('',*,*,#8306,.F.); +#8306 = EDGE_CURVE('',#8285,#8299,#8307,.T.); +#8307 = LINE('',#8308,#8309); +#8308 = CARTESIAN_POINT('',(-1.109999999997,3.,0.85)); +#8309 = VECTOR('',#8310,1.); +#8310 = DIRECTION('',(3.556321139691E-17,-1.224606353822E-16,-1.)); +#8311 = PLANE('',#8312); +#8312 = AXIS2_PLACEMENT_3D('',#8313,#8314,#8315); +#8313 = CARTESIAN_POINT('',(-0.95027711266,2.45,0.27)); +#8314 = DIRECTION('',(-0.960324967172,-0.278883411887,0.)); +#8315 = DIRECTION('',(0.278883411887,-0.960324967172,0.)); +#8316 = ADVANCED_FACE('',(#8317),#8342,.F.); +#8317 = FACE_BOUND('',#8318,.T.); +#8318 = EDGE_LOOP('',(#8319,#8327,#8335,#8341)); +#8319 = ORIENTED_EDGE('',*,*,#8320,.F.); +#8320 = EDGE_CURVE('',#8321,#8147,#8323,.T.); +#8321 = VERTEX_POINT('',#8322); +#8322 = CARTESIAN_POINT('',(-1.430000000003,3.,1.43)); +#8323 = LINE('',#8324,#8325); +#8324 = CARTESIAN_POINT('',(-1.468020921687,2.869303081708, + 1.468020921685)); +#8325 = VECTOR('',#8326,1.); +#8326 = DIRECTION('',(-0.269031078557,-0.924794332561,0.269031078563)); +#8327 = ORIENTED_EDGE('',*,*,#8328,.F.); +#8328 = EDGE_CURVE('',#8329,#8321,#8331,.T.); +#8329 = VERTEX_POINT('',#8330); +#8330 = CARTESIAN_POINT('',(-1.430000000003,3.,1.11)); +#8331 = LINE('',#8332,#8333); +#8332 = CARTESIAN_POINT('',(-1.430000000003,3.,0.85)); +#8333 = VECTOR('',#8334,1.); +#8334 = DIRECTION('',(0.,1.224606353822E-16,1.)); +#8335 = ORIENTED_EDGE('',*,*,#8336,.F.); +#8336 = EDGE_CURVE('',#8079,#8329,#8337,.T.); +#8337 = LINE('',#8338,#8339); +#8338 = CARTESIAN_POINT('',(-1.466188860619,2.875600791632, + 1.073811139384)); +#8339 = VECTOR('',#8340,1.); +#8340 = DIRECTION('',(0.269031078557,0.924794332561,0.269031078563)); +#8341 = ORIENTED_EDGE('',*,*,#8154,.F.); +#8342 = PLANE('',#8343); +#8343 = AXIS2_PLACEMENT_3D('',#8344,#8345,#8346); +#8344 = CARTESIAN_POINT('',(-1.430000000003,3.,0.27)); +#8345 = DIRECTION('',(0.960195296605,-0.279329540824,0.)); +#8346 = DIRECTION('',(0.279329540824,0.960195296605,0.)); +#8347 = ADVANCED_FACE('',(#8348),#8366,.F.); +#8348 = FACE_BOUND('',#8349,.T.); +#8349 = EDGE_LOOP('',(#8350,#8358,#8364,#8365)); +#8350 = ORIENTED_EDGE('',*,*,#8351,.T.); +#8351 = EDGE_CURVE('',#8283,#8352,#8354,.T.); +#8352 = VERTEX_POINT('',#8353); +#8353 = CARTESIAN_POINT('',(-0.95,2.45,1.59)); +#8354 = LINE('',#8355,#8356); +#8355 = CARTESIAN_POINT('',(-1.59,2.45,1.59)); +#8356 = VECTOR('',#8357,1.); +#8357 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8358 = ORIENTED_EDGE('',*,*,#8359,.F.); +#8359 = EDGE_CURVE('',#8095,#8352,#8360,.T.); +#8360 = LINE('',#8361,#8362); +#8361 = CARTESIAN_POINT('',(-0.95,2.45,0.77)); +#8362 = VECTOR('',#8363,1.); +#8363 = DIRECTION('',(-3.749151804555E-33,0.,1.)); +#8364 = ORIENTED_EDGE('',*,*,#8094,.F.); +#8365 = ORIENTED_EDGE('',*,*,#8292,.T.); +#8366 = PLANE('',#8367); +#8367 = AXIS2_PLACEMENT_3D('',#8368,#8369,#8370); +#8368 = CARTESIAN_POINT('',(-0.492456669096,2.45,0.27)); +#8369 = DIRECTION('',(0.,-1.,0.)); +#8370 = DIRECTION('',(1.,0.,0.)); +#8371 = ADVANCED_FACE('',(#8372),#8383,.T.); +#8372 = FACE_BOUND('',#8373,.T.); +#8373 = EDGE_LOOP('',(#8374,#8375,#8381,#8382)); +#8374 = ORIENTED_EDGE('',*,*,#8336,.T.); +#8375 = ORIENTED_EDGE('',*,*,#8376,.T.); +#8376 = EDGE_CURVE('',#8329,#8299,#8377,.T.); +#8377 = LINE('',#8378,#8379); +#8378 = CARTESIAN_POINT('',(-1.59,3.,1.11)); +#8379 = VECTOR('',#8380,1.); +#8380 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8381 = ORIENTED_EDGE('',*,*,#8298,.T.); +#8382 = ORIENTED_EDGE('',*,*,#8086,.F.); +#8383 = PLANE('',#8384); +#8384 = AXIS2_PLACEMENT_3D('',#8385,#8386,#8387); +#8385 = CARTESIAN_POINT('',(-1.59,3.,1.11)); +#8386 = DIRECTION('',(1.710343652554E-17,0.27932954083,-0.960195296604) + ); +#8387 = DIRECTION('',(5.879306305656E-17,0.960195296604,0.27932954083)); +#8388 = ADVANCED_FACE('',(#8389),#8405,.T.); +#8389 = FACE_BOUND('',#8390,.T.); +#8390 = EDGE_LOOP('',(#8391,#8392,#8398,#8399)); +#8391 = ORIENTED_EDGE('',*,*,#8320,.T.); +#8392 = ORIENTED_EDGE('',*,*,#8393,.T.); +#8393 = EDGE_CURVE('',#8147,#8283,#8394,.T.); +#8394 = LINE('',#8395,#8396); +#8395 = CARTESIAN_POINT('',(-1.59,2.45,1.59)); +#8396 = VECTOR('',#8397,1.); +#8397 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8398 = ORIENTED_EDGE('',*,*,#8282,.T.); +#8399 = ORIENTED_EDGE('',*,*,#8400,.F.); +#8400 = EDGE_CURVE('',#8321,#8285,#8401,.T.); +#8401 = LINE('',#8402,#8403); +#8402 = CARTESIAN_POINT('',(-1.59,3.,1.43)); +#8403 = VECTOR('',#8404,1.); +#8404 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8405 = PLANE('',#8406); +#8406 = AXIS2_PLACEMENT_3D('',#8407,#8408,#8409); +#8407 = CARTESIAN_POINT('',(-1.59,2.45,1.59)); +#8408 = DIRECTION('',(1.710343652554E-17,0.27932954083,0.960195296604)); +#8409 = DIRECTION('',(-5.879306305656E-17,-0.960195296604,0.27932954083) + ); +#8410 = ADVANCED_FACE('',(#8411),#8417,.T.); +#8411 = FACE_BOUND('',#8412,.T.); +#8412 = EDGE_LOOP('',(#8413,#8414,#8415,#8416)); +#8413 = ORIENTED_EDGE('',*,*,#8328,.T.); +#8414 = ORIENTED_EDGE('',*,*,#8400,.T.); +#8415 = ORIENTED_EDGE('',*,*,#8306,.T.); +#8416 = ORIENTED_EDGE('',*,*,#8376,.F.); +#8417 = PLANE('',#8418); +#8418 = AXIS2_PLACEMENT_3D('',#8419,#8420,#8421); +#8419 = CARTESIAN_POINT('',(-1.59,3.,1.43)); +#8420 = DIRECTION('',(6.123031769112E-17,1.,-1.224606353822E-16)); +#8421 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#8422 = ADVANCED_FACE('',(#8423),#8429,.T.); +#8423 = FACE_BOUND('',#8424,.T.); +#8424 = EDGE_LOOP('',(#8425,#8426,#8427,#8428)); +#8425 = ORIENTED_EDGE('',*,*,#8205,.T.); +#8426 = ORIENTED_EDGE('',*,*,#8268,.T.); +#8427 = ORIENTED_EDGE('',*,*,#8183,.T.); +#8428 = ORIENTED_EDGE('',*,*,#8006,.F.); +#8429 = PLANE('',#8430); +#8430 = AXIS2_PLACEMENT_3D('',#8431,#8432,#8433); +#8431 = CARTESIAN_POINT('',(-1.59,-8.5,1.43)); +#8432 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,0.960195296604) + ); +#8433 = DIRECTION('',(-5.879306305655E-17,-0.960195296604,-0.27932954083 + )); +#8434 = ADVANCED_FACE('',(#8435),#8454,.T.); +#8435 = FACE_BOUND('',#8436,.T.); +#8436 = EDGE_LOOP('',(#8437,#8445,#8451,#8452,#8453)); +#8437 = ORIENTED_EDGE('',*,*,#8438,.F.); +#8438 = EDGE_CURVE('',#8439,#8139,#8441,.T.); +#8439 = VERTEX_POINT('',#8440); +#8440 = CARTESIAN_POINT('',(-0.95,-0.7,1.59)); +#8441 = LINE('',#8442,#8443); +#8442 = CARTESIAN_POINT('',(-2.065,-0.7,1.59)); +#8443 = VECTOR('',#8444,1.); +#8444 = DIRECTION('',(-1.,4.402532809476E-49,7.190119168882E-33)); +#8445 = ORIENTED_EDGE('',*,*,#8446,.T.); +#8446 = EDGE_CURVE('',#8439,#8352,#8447,.T.); +#8447 = LINE('',#8448,#8449); +#8448 = CARTESIAN_POINT('',(-0.95,2.45,1.59)); +#8449 = VECTOR('',#8450,1.); +#8450 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#8451 = ORIENTED_EDGE('',*,*,#8351,.F.); +#8452 = ORIENTED_EDGE('',*,*,#8393,.F.); +#8453 = ORIENTED_EDGE('',*,*,#8146,.T.); +#8454 = PLANE('',#8455); +#8455 = AXIS2_PLACEMENT_3D('',#8456,#8457,#8458); +#8456 = CARTESIAN_POINT('',(-1.59,-7.95,1.59)); +#8457 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#8458 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#8459 = ADVANCED_FACE('',(#8460),#8471,.T.); +#8460 = FACE_BOUND('',#8461,.T.); +#8461 = EDGE_LOOP('',(#8462,#8468,#8469,#8470)); +#8462 = ORIENTED_EDGE('',*,*,#8463,.F.); +#8463 = EDGE_CURVE('',#8071,#8439,#8464,.T.); +#8464 = LINE('',#8465,#8466); +#8465 = CARTESIAN_POINT('',(-0.95,-0.7,0.635)); +#8466 = VECTOR('',#8467,1.); +#8467 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#8468 = ORIENTED_EDGE('',*,*,#8102,.F.); +#8469 = ORIENTED_EDGE('',*,*,#8359,.T.); +#8470 = ORIENTED_EDGE('',*,*,#8446,.F.); +#8471 = PLANE('',#8472); +#8472 = AXIS2_PLACEMENT_3D('',#8473,#8474,#8475); +#8473 = CARTESIAN_POINT('',(-0.95,-2.75,1.27)); +#8474 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8475 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8476 = ADVANCED_FACE('',(#8477),#8511,.T.); +#8477 = FACE_BOUND('',#8478,.T.); +#8478 = EDGE_LOOP('',(#8479,#8489,#8497,#8505)); +#8479 = ORIENTED_EDGE('',*,*,#8480,.F.); +#8480 = EDGE_CURVE('',#8481,#8483,#8485,.T.); +#8481 = VERTEX_POINT('',#8482); +#8482 = CARTESIAN_POINT('',(-3.49,-2.5,1.59)); +#8483 = VERTEX_POINT('',#8484); +#8484 = CARTESIAN_POINT('',(-3.49,-2.5,0.95)); +#8485 = LINE('',#8486,#8487); +#8486 = CARTESIAN_POINT('',(-3.49,-2.5,0.635)); +#8487 = VECTOR('',#8488,1.); +#8488 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8489 = ORIENTED_EDGE('',*,*,#8490,.F.); +#8490 = EDGE_CURVE('',#8491,#8481,#8493,.T.); +#8491 = VERTEX_POINT('',#8492); +#8492 = CARTESIAN_POINT('',(-3.49,-7.95,1.59)); +#8493 = LINE('',#8494,#8495); +#8494 = CARTESIAN_POINT('',(-3.49,2.45,1.59)); +#8495 = VECTOR('',#8496,1.); +#8496 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#8497 = ORIENTED_EDGE('',*,*,#8498,.T.); +#8498 = EDGE_CURVE('',#8491,#8499,#8501,.T.); +#8499 = VERTEX_POINT('',#8500); +#8500 = CARTESIAN_POINT('',(-3.49,-7.95,0.95)); +#8501 = LINE('',#8502,#8503); +#8502 = CARTESIAN_POINT('',(-3.49,-7.95,1.77)); +#8503 = VECTOR('',#8504,1.); +#8504 = DIRECTION('',(-3.749151804555E-33,-1.224606353822E-16,-1.)); +#8505 = ORIENTED_EDGE('',*,*,#8506,.F.); +#8506 = EDGE_CURVE('',#8483,#8499,#8507,.T.); +#8507 = LINE('',#8508,#8509); +#8508 = CARTESIAN_POINT('',(-3.49,-7.95,0.95)); +#8509 = VECTOR('',#8510,1.); +#8510 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#8511 = PLANE('',#8512); +#8512 = AXIS2_PLACEMENT_3D('',#8513,#8514,#8515); +#8513 = CARTESIAN_POINT('',(-3.49,-2.75,1.27)); +#8514 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8515 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8516 = ADVANCED_FACE('',(#8517),#8550,.T.); +#8517 = FACE_BOUND('',#8518,.T.); +#8518 = EDGE_LOOP('',(#8519,#8527,#8535,#8543,#8549)); +#8519 = ORIENTED_EDGE('',*,*,#8520,.F.); +#8520 = EDGE_CURVE('',#8521,#8481,#8523,.T.); +#8521 = VERTEX_POINT('',#8522); +#8522 = CARTESIAN_POINT('',(-4.13,-2.5,1.59)); +#8523 = LINE('',#8524,#8525); +#8524 = CARTESIAN_POINT('',(-3.97,-2.5,1.59)); +#8525 = VECTOR('',#8526,1.); +#8526 = DIRECTION('',(1.,-4.402532809476E-49,-7.190119168882E-33)); +#8527 = ORIENTED_EDGE('',*,*,#8528,.T.); +#8528 = EDGE_CURVE('',#8521,#8529,#8531,.T.); +#8529 = VERTEX_POINT('',#8530); +#8530 = CARTESIAN_POINT('',(-4.13,-7.95,1.59)); +#8531 = LINE('',#8532,#8533); +#8532 = CARTESIAN_POINT('',(-4.13,2.45,1.59)); +#8533 = VECTOR('',#8534,1.); +#8534 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#8535 = ORIENTED_EDGE('',*,*,#8536,.T.); +#8536 = EDGE_CURVE('',#8529,#8537,#8539,.T.); +#8537 = VERTEX_POINT('',#8538); +#8538 = CARTESIAN_POINT('',(-3.49027711266,-7.95,1.59)); +#8539 = LINE('',#8540,#8541); +#8540 = CARTESIAN_POINT('',(-4.13,-7.95,1.59)); +#8541 = VECTOR('',#8542,1.); +#8542 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8543 = ORIENTED_EDGE('',*,*,#8544,.T.); +#8544 = EDGE_CURVE('',#8537,#8491,#8545,.T.); +#8545 = LINE('',#8546,#8547); +#8546 = CARTESIAN_POINT('',(-4.13,-7.95,1.59)); +#8547 = VECTOR('',#8548,1.); +#8548 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8549 = ORIENTED_EDGE('',*,*,#8490,.T.); +#8550 = PLANE('',#8551); +#8551 = AXIS2_PLACEMENT_3D('',#8552,#8553,#8554); +#8552 = CARTESIAN_POINT('',(-4.13,-7.95,1.59)); +#8553 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#8554 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#8555 = ADVANCED_FACE('',(#8556),#8589,.T.); +#8556 = FACE_BOUND('',#8557,.T.); +#8557 = EDGE_LOOP('',(#8558,#8566,#8567,#8575,#8583)); +#8558 = ORIENTED_EDGE('',*,*,#8559,.F.); +#8559 = EDGE_CURVE('',#8483,#8560,#8562,.T.); +#8560 = VERTEX_POINT('',#8561); +#8561 = CARTESIAN_POINT('',(-4.13,-2.5,0.95)); +#8562 = LINE('',#8563,#8564); +#8563 = CARTESIAN_POINT('',(-3.97,-2.5,0.95)); +#8564 = VECTOR('',#8565,1.); +#8565 = DIRECTION('',(-1.,0.,0.)); +#8566 = ORIENTED_EDGE('',*,*,#8506,.T.); +#8567 = ORIENTED_EDGE('',*,*,#8568,.F.); +#8568 = EDGE_CURVE('',#8569,#8499,#8571,.T.); +#8569 = VERTEX_POINT('',#8570); +#8570 = CARTESIAN_POINT('',(-3.49027711266,-7.95,0.95)); +#8571 = LINE('',#8572,#8573); +#8572 = CARTESIAN_POINT('',(-4.13,-7.95,0.95)); +#8573 = VECTOR('',#8574,1.); +#8574 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8575 = ORIENTED_EDGE('',*,*,#8576,.F.); +#8576 = EDGE_CURVE('',#8577,#8569,#8579,.T.); +#8577 = VERTEX_POINT('',#8578); +#8578 = CARTESIAN_POINT('',(-4.13,-7.95,0.95)); +#8579 = LINE('',#8580,#8581); +#8580 = CARTESIAN_POINT('',(-4.13,-7.95,0.95)); +#8581 = VECTOR('',#8582,1.); +#8582 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8583 = ORIENTED_EDGE('',*,*,#8584,.T.); +#8584 = EDGE_CURVE('',#8577,#8560,#8585,.T.); +#8585 = LINE('',#8586,#8587); +#8586 = CARTESIAN_POINT('',(-4.13,-7.95,0.95)); +#8587 = VECTOR('',#8588,1.); +#8588 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8589 = PLANE('',#8590); +#8590 = AXIS2_PLACEMENT_3D('',#8591,#8592,#8593); +#8591 = CARTESIAN_POINT('',(-4.13,2.45,0.95)); +#8592 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8593 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8594 = ADVANCED_FACE('',(#8595),#8637,.T.); +#8595 = FACE_BOUND('',#8596,.T.); +#8596 = EDGE_LOOP('',(#8597,#8607,#8615,#8623,#8631)); +#8597 = ORIENTED_EDGE('',*,*,#8598,.F.); +#8598 = EDGE_CURVE('',#8599,#8601,#8603,.T.); +#8599 = VERTEX_POINT('',#8600); +#8600 = CARTESIAN_POINT('',(-4.13,-0.7,0.95)); +#8601 = VERTEX_POINT('',#8602); +#8602 = CARTESIAN_POINT('',(-3.49,-0.7,0.95)); +#8603 = LINE('',#8604,#8605); +#8604 = CARTESIAN_POINT('',(-3.335,-0.7,0.95)); +#8605 = VECTOR('',#8606,1.); +#8606 = DIRECTION('',(1.,0.,0.)); +#8607 = ORIENTED_EDGE('',*,*,#8608,.T.); +#8608 = EDGE_CURVE('',#8599,#8609,#8611,.T.); +#8609 = VERTEX_POINT('',#8610); +#8610 = CARTESIAN_POINT('',(-4.13,2.45,0.95)); +#8611 = LINE('',#8612,#8613); +#8612 = CARTESIAN_POINT('',(-4.13,-7.95,0.95)); +#8613 = VECTOR('',#8614,1.); +#8614 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8615 = ORIENTED_EDGE('',*,*,#8616,.T.); +#8616 = EDGE_CURVE('',#8609,#8617,#8619,.T.); +#8617 = VERTEX_POINT('',#8618); +#8618 = CARTESIAN_POINT('',(-3.49027711266,2.45,0.95)); +#8619 = LINE('',#8620,#8621); +#8620 = CARTESIAN_POINT('',(-4.13,2.45,0.95)); +#8621 = VECTOR('',#8622,1.); +#8622 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8623 = ORIENTED_EDGE('',*,*,#8624,.T.); +#8624 = EDGE_CURVE('',#8617,#8625,#8627,.T.); +#8625 = VERTEX_POINT('',#8626); +#8626 = CARTESIAN_POINT('',(-3.49,2.45,0.95)); +#8627 = LINE('',#8628,#8629); +#8628 = CARTESIAN_POINT('',(-4.13,2.45,0.95)); +#8629 = VECTOR('',#8630,1.); +#8630 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8631 = ORIENTED_EDGE('',*,*,#8632,.T.); +#8632 = EDGE_CURVE('',#8625,#8601,#8633,.T.); +#8633 = LINE('',#8634,#8635); +#8634 = CARTESIAN_POINT('',(-3.49,-7.95,0.95)); +#8635 = VECTOR('',#8636,1.); +#8636 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#8637 = PLANE('',#8638); +#8638 = AXIS2_PLACEMENT_3D('',#8639,#8640,#8641); +#8639 = CARTESIAN_POINT('',(-4.13,2.45,0.95)); +#8640 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8641 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8642 = ADVANCED_FACE('',(#8643),#8659,.F.); +#8643 = FACE_BOUND('',#8644,.T.); +#8644 = EDGE_LOOP('',(#8645,#8651,#8652,#8658)); +#8645 = ORIENTED_EDGE('',*,*,#8646,.F.); +#8646 = EDGE_CURVE('',#8560,#8521,#8647,.T.); +#8647 = LINE('',#8648,#8649); +#8648 = CARTESIAN_POINT('',(-4.13,-2.5,0.635)); +#8649 = VECTOR('',#8650,1.); +#8650 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#8651 = ORIENTED_EDGE('',*,*,#8584,.F.); +#8652 = ORIENTED_EDGE('',*,*,#8653,.T.); +#8653 = EDGE_CURVE('',#8577,#8529,#8654,.T.); +#8654 = LINE('',#8655,#8656); +#8655 = CARTESIAN_POINT('',(-4.13,-7.949999999999,1.77)); +#8656 = VECTOR('',#8657,1.); +#8657 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#8658 = ORIENTED_EDGE('',*,*,#8528,.F.); +#8659 = PLANE('',#8660); +#8660 = AXIS2_PLACEMENT_3D('',#8661,#8662,#8663); +#8661 = CARTESIAN_POINT('',(-4.13,-2.75,1.27)); +#8662 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8663 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8664 = ADVANCED_FACE('',(#8665),#8690,.F.); +#8665 = FACE_BOUND('',#8666,.T.); +#8666 = EDGE_LOOP('',(#8667,#8675,#8683,#8689)); +#8667 = ORIENTED_EDGE('',*,*,#8668,.F.); +#8668 = EDGE_CURVE('',#8669,#8599,#8671,.T.); +#8669 = VERTEX_POINT('',#8670); +#8670 = CARTESIAN_POINT('',(-4.13,-0.7,1.59)); +#8671 = LINE('',#8672,#8673); +#8672 = CARTESIAN_POINT('',(-4.13,-0.7,0.635)); +#8673 = VECTOR('',#8674,1.); +#8674 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8675 = ORIENTED_EDGE('',*,*,#8676,.F.); +#8676 = EDGE_CURVE('',#8677,#8669,#8679,.T.); +#8677 = VERTEX_POINT('',#8678); +#8678 = CARTESIAN_POINT('',(-4.13,2.45,1.59)); +#8679 = LINE('',#8680,#8681); +#8680 = CARTESIAN_POINT('',(-4.13,2.45,1.59)); +#8681 = VECTOR('',#8682,1.); +#8682 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#8683 = ORIENTED_EDGE('',*,*,#8684,.T.); +#8684 = EDGE_CURVE('',#8677,#8609,#8685,.T.); +#8685 = LINE('',#8686,#8687); +#8686 = CARTESIAN_POINT('',(-4.13,2.449999999999,0.77)); +#8687 = VECTOR('',#8688,1.); +#8688 = DIRECTION('',(3.749151804555E-33,1.232595164408E-32,-1.)); +#8689 = ORIENTED_EDGE('',*,*,#8608,.F.); +#8690 = PLANE('',#8691); +#8691 = AXIS2_PLACEMENT_3D('',#8692,#8693,#8694); +#8692 = CARTESIAN_POINT('',(-4.13,-2.75,1.27)); +#8693 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8694 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#8695 = ADVANCED_FACE('',(#8696),#8726,.F.); +#8696 = FACE_BOUND('',#8697,.T.); +#8697 = EDGE_LOOP('',(#8698,#8706,#8712,#8720)); +#8698 = ORIENTED_EDGE('',*,*,#8699,.F.); +#8699 = EDGE_CURVE('',#8569,#8700,#8702,.T.); +#8700 = VERTEX_POINT('',#8701); +#8701 = CARTESIAN_POINT('',(-3.649999999997,-8.5,1.11)); +#8702 = LINE('',#8703,#8704); +#8703 = CARTESIAN_POINT('',(-3.561052122518,-8.193711192998, + 1.020897801599)); +#8704 = VECTOR('',#8705,1.); +#8705 = DIRECTION('',(-0.268598772191,-0.92491018143,0.269064780052)); +#8706 = ORIENTED_EDGE('',*,*,#8707,.F.); +#8707 = EDGE_CURVE('',#8537,#8569,#8708,.T.); +#8708 = LINE('',#8709,#8710); +#8709 = CARTESIAN_POINT('',(-3.49027711266,-7.95,2.27)); +#8710 = VECTOR('',#8711,1.); +#8711 = DIRECTION('',(0.,-1.224606353822E-16,-1.)); +#8712 = ORIENTED_EDGE('',*,*,#8713,.F.); +#8713 = EDGE_CURVE('',#8714,#8537,#8716,.T.); +#8714 = VERTEX_POINT('',#8715); +#8715 = CARTESIAN_POINT('',(-3.649999999997,-8.5,1.43)); +#8716 = LINE('',#8717,#8718); +#8717 = CARTESIAN_POINT('',(-3.562881468779,-8.200010480847, + 1.517269678299)); +#8718 = VECTOR('',#8719,1.); +#8719 = DIRECTION('',(0.268598772191,0.92491018143,0.269064780052)); +#8720 = ORIENTED_EDGE('',*,*,#8721,.F.); +#8721 = EDGE_CURVE('',#8700,#8714,#8722,.T.); +#8722 = LINE('',#8723,#8724); +#8723 = CARTESIAN_POINT('',(-3.649999999997,-8.5,1.69)); +#8724 = VECTOR('',#8725,1.); +#8725 = DIRECTION('',(-1.778160569846E-17,6.123031769112E-17,1.)); +#8726 = PLANE('',#8727); +#8727 = AXIS2_PLACEMENT_3D('',#8728,#8729,#8730); +#8728 = CARTESIAN_POINT('',(-3.49027711266,-7.95,2.27)); +#8729 = DIRECTION('',(-0.960324967172,0.278883411887,-3.415223981728E-17 + )); +#8730 = DIRECTION('',(0.278883411887,0.960324967172,-1.176020056533E-16) + ); +#8731 = ADVANCED_FACE('',(#8732),#8757,.F.); +#8732 = FACE_BOUND('',#8733,.T.); +#8733 = EDGE_LOOP('',(#8734,#8742,#8743,#8751)); +#8734 = ORIENTED_EDGE('',*,*,#8735,.F.); +#8735 = EDGE_CURVE('',#8529,#8736,#8738,.T.); +#8736 = VERTEX_POINT('',#8737); +#8737 = CARTESIAN_POINT('',(-3.970000000003,-8.5,1.43)); +#8738 = LINE('',#8739,#8740); +#8739 = CARTESIAN_POINT('',(-4.006188860619,-8.375600791632, + 1.466188860616)); +#8740 = VECTOR('',#8741,1.); +#8741 = DIRECTION('',(0.269031078557,-0.924794332561,-0.269031078563)); +#8742 = ORIENTED_EDGE('',*,*,#8653,.F.); +#8743 = ORIENTED_EDGE('',*,*,#8744,.F.); +#8744 = EDGE_CURVE('',#8745,#8577,#8747,.T.); +#8745 = VERTEX_POINT('',#8746); +#8746 = CARTESIAN_POINT('',(-3.970000000003,-8.5,1.11)); +#8747 = LINE('',#8748,#8749); +#8748 = CARTESIAN_POINT('',(-4.008020921687,-8.369303081708, + 1.071979078315)); +#8749 = VECTOR('',#8750,1.); +#8750 = DIRECTION('',(-0.269031078557,0.924794332561,-0.269031078563)); +#8751 = ORIENTED_EDGE('',*,*,#8752,.F.); +#8752 = EDGE_CURVE('',#8736,#8745,#8753,.T.); +#8753 = LINE('',#8754,#8755); +#8754 = CARTESIAN_POINT('',(-3.970000000003,-8.5,1.69)); +#8755 = VECTOR('',#8756,1.); +#8756 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8757 = PLANE('',#8758); +#8758 = AXIS2_PLACEMENT_3D('',#8759,#8760,#8761); +#8759 = CARTESIAN_POINT('',(-3.970000000003,-8.5,2.27)); +#8760 = DIRECTION('',(0.960195296605,0.279329540824,-3.420687305034E-17) + ); +#8761 = DIRECTION('',(0.279329540824,-0.960195296605,1.175861261133E-16) + ); +#8762 = ADVANCED_FACE('',(#8763),#8769,.F.); +#8763 = FACE_BOUND('',#8764,.T.); +#8764 = EDGE_LOOP('',(#8765,#8766,#8767,#8768)); +#8765 = ORIENTED_EDGE('',*,*,#8568,.T.); +#8766 = ORIENTED_EDGE('',*,*,#8498,.F.); +#8767 = ORIENTED_EDGE('',*,*,#8544,.F.); +#8768 = ORIENTED_EDGE('',*,*,#8707,.T.); +#8769 = PLANE('',#8770); +#8770 = AXIS2_PLACEMENT_3D('',#8771,#8772,#8773); +#8771 = CARTESIAN_POINT('',(-3.032456669096,-7.95,2.27)); +#8772 = DIRECTION('',(0.,1.,-1.224606353822E-16)); +#8773 = DIRECTION('',(1.,0.,0.)); +#8774 = ADVANCED_FACE('',(#8775),#8786,.T.); +#8775 = FACE_BOUND('',#8776,.T.); +#8776 = EDGE_LOOP('',(#8777,#8778,#8779,#8780)); +#8777 = ORIENTED_EDGE('',*,*,#8744,.T.); +#8778 = ORIENTED_EDGE('',*,*,#8576,.T.); +#8779 = ORIENTED_EDGE('',*,*,#8699,.T.); +#8780 = ORIENTED_EDGE('',*,*,#8781,.F.); +#8781 = EDGE_CURVE('',#8745,#8700,#8782,.T.); +#8782 = LINE('',#8783,#8784); +#8783 = CARTESIAN_POINT('',(-4.13,-8.5,1.11)); +#8784 = VECTOR('',#8785,1.); +#8785 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8786 = PLANE('',#8787); +#8787 = AXIS2_PLACEMENT_3D('',#8788,#8789,#8790); +#8788 = CARTESIAN_POINT('',(-4.13,-7.95,0.95)); +#8789 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,-0.960195296604 + )); +#8790 = DIRECTION('',(5.879306305656E-17,0.960195296604,-0.27932954083) + ); +#8791 = ADVANCED_FACE('',(#8792),#8803,.T.); +#8792 = FACE_BOUND('',#8793,.T.); +#8793 = EDGE_LOOP('',(#8794,#8795,#8796,#8797)); +#8794 = ORIENTED_EDGE('',*,*,#8752,.T.); +#8795 = ORIENTED_EDGE('',*,*,#8781,.T.); +#8796 = ORIENTED_EDGE('',*,*,#8721,.T.); +#8797 = ORIENTED_EDGE('',*,*,#8798,.F.); +#8798 = EDGE_CURVE('',#8736,#8714,#8799,.T.); +#8799 = LINE('',#8800,#8801); +#8800 = CARTESIAN_POINT('',(-4.13,-8.5,1.43)); +#8801 = VECTOR('',#8802,1.); +#8802 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8803 = PLANE('',#8804); +#8804 = AXIS2_PLACEMENT_3D('',#8805,#8806,#8807); +#8805 = CARTESIAN_POINT('',(-4.13,-8.5,1.11)); +#8806 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#8807 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#8808 = ADVANCED_FACE('',(#8809),#8841,.F.); +#8809 = FACE_BOUND('',#8810,.T.); +#8810 = EDGE_LOOP('',(#8811,#8821,#8827,#8835)); +#8811 = ORIENTED_EDGE('',*,*,#8812,.F.); +#8812 = EDGE_CURVE('',#8813,#8815,#8817,.T.); +#8813 = VERTEX_POINT('',#8814); +#8814 = CARTESIAN_POINT('',(-3.49027711266,2.45,1.59)); +#8815 = VERTEX_POINT('',#8816); +#8816 = CARTESIAN_POINT('',(-3.649999999997,3.,1.43)); +#8817 = LINE('',#8818,#8819); +#8818 = CARTESIAN_POINT('',(-3.561052122518,2.693711192998, + 1.519102198401)); +#8819 = VECTOR('',#8820,1.); +#8820 = DIRECTION('',(-0.268598772191,0.92491018143,-0.269064780052)); +#8821 = ORIENTED_EDGE('',*,*,#8822,.F.); +#8822 = EDGE_CURVE('',#8617,#8813,#8823,.T.); +#8823 = LINE('',#8824,#8825); +#8824 = CARTESIAN_POINT('',(-3.49027711266,2.45,0.27)); +#8825 = VECTOR('',#8826,1.); +#8826 = DIRECTION('',(0.,0.,1.)); +#8827 = ORIENTED_EDGE('',*,*,#8828,.F.); +#8828 = EDGE_CURVE('',#8829,#8617,#8831,.T.); +#8829 = VERTEX_POINT('',#8830); +#8830 = CARTESIAN_POINT('',(-3.649999999997,3.,1.11)); +#8831 = LINE('',#8832,#8833); +#8832 = CARTESIAN_POINT('',(-3.562881468779,2.700010480847, + 1.022730321701)); +#8833 = VECTOR('',#8834,1.); +#8834 = DIRECTION('',(0.268598772191,-0.92491018143,-0.269064780052)); +#8835 = ORIENTED_EDGE('',*,*,#8836,.F.); +#8836 = EDGE_CURVE('',#8815,#8829,#8837,.T.); +#8837 = LINE('',#8838,#8839); +#8838 = CARTESIAN_POINT('',(-3.649999999997,3.,0.85)); +#8839 = VECTOR('',#8840,1.); +#8840 = DIRECTION('',(3.556321139691E-17,-1.224606353822E-16,-1.)); +#8841 = PLANE('',#8842); +#8842 = AXIS2_PLACEMENT_3D('',#8843,#8844,#8845); +#8843 = CARTESIAN_POINT('',(-3.49027711266,2.45,0.27)); +#8844 = DIRECTION('',(-0.960324967172,-0.278883411887,0.)); +#8845 = DIRECTION('',(0.278883411887,-0.960324967172,0.)); +#8846 = ADVANCED_FACE('',(#8847),#8872,.F.); +#8847 = FACE_BOUND('',#8848,.T.); +#8848 = EDGE_LOOP('',(#8849,#8857,#8865,#8871)); +#8849 = ORIENTED_EDGE('',*,*,#8850,.F.); +#8850 = EDGE_CURVE('',#8851,#8677,#8853,.T.); +#8851 = VERTEX_POINT('',#8852); +#8852 = CARTESIAN_POINT('',(-3.970000000003,3.,1.43)); +#8853 = LINE('',#8854,#8855); +#8854 = CARTESIAN_POINT('',(-4.008020921687,2.869303081708, + 1.468020921685)); +#8855 = VECTOR('',#8856,1.); +#8856 = DIRECTION('',(-0.269031078557,-0.924794332561,0.269031078563)); +#8857 = ORIENTED_EDGE('',*,*,#8858,.F.); +#8858 = EDGE_CURVE('',#8859,#8851,#8861,.T.); +#8859 = VERTEX_POINT('',#8860); +#8860 = CARTESIAN_POINT('',(-3.970000000003,3.,1.11)); +#8861 = LINE('',#8862,#8863); +#8862 = CARTESIAN_POINT('',(-3.970000000003,3.,0.85)); +#8863 = VECTOR('',#8864,1.); +#8864 = DIRECTION('',(0.,1.224606353822E-16,1.)); +#8865 = ORIENTED_EDGE('',*,*,#8866,.F.); +#8866 = EDGE_CURVE('',#8609,#8859,#8867,.T.); +#8867 = LINE('',#8868,#8869); +#8868 = CARTESIAN_POINT('',(-4.006188860619,2.875600791632, + 1.073811139384)); +#8869 = VECTOR('',#8870,1.); +#8870 = DIRECTION('',(0.269031078557,0.924794332561,0.269031078563)); +#8871 = ORIENTED_EDGE('',*,*,#8684,.F.); +#8872 = PLANE('',#8873); +#8873 = AXIS2_PLACEMENT_3D('',#8874,#8875,#8876); +#8874 = CARTESIAN_POINT('',(-3.970000000003,3.,0.27)); +#8875 = DIRECTION('',(0.960195296605,-0.279329540824,0.)); +#8876 = DIRECTION('',(0.279329540824,0.960195296605,0.)); +#8877 = ADVANCED_FACE('',(#8878),#8896,.F.); +#8878 = FACE_BOUND('',#8879,.T.); +#8879 = EDGE_LOOP('',(#8880,#8888,#8894,#8895)); +#8880 = ORIENTED_EDGE('',*,*,#8881,.T.); +#8881 = EDGE_CURVE('',#8813,#8882,#8884,.T.); +#8882 = VERTEX_POINT('',#8883); +#8883 = CARTESIAN_POINT('',(-3.49,2.45,1.59)); +#8884 = LINE('',#8885,#8886); +#8885 = CARTESIAN_POINT('',(-4.13,2.45,1.59)); +#8886 = VECTOR('',#8887,1.); +#8887 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8888 = ORIENTED_EDGE('',*,*,#8889,.F.); +#8889 = EDGE_CURVE('',#8625,#8882,#8890,.T.); +#8890 = LINE('',#8891,#8892); +#8891 = CARTESIAN_POINT('',(-3.49,2.45,0.77)); +#8892 = VECTOR('',#8893,1.); +#8893 = DIRECTION('',(-3.749151804555E-33,0.,1.)); +#8894 = ORIENTED_EDGE('',*,*,#8624,.F.); +#8895 = ORIENTED_EDGE('',*,*,#8822,.T.); +#8896 = PLANE('',#8897); +#8897 = AXIS2_PLACEMENT_3D('',#8898,#8899,#8900); +#8898 = CARTESIAN_POINT('',(-3.032456669096,2.45,0.27)); +#8899 = DIRECTION('',(0.,-1.,0.)); +#8900 = DIRECTION('',(1.,0.,0.)); +#8901 = ADVANCED_FACE('',(#8902),#8913,.T.); +#8902 = FACE_BOUND('',#8903,.T.); +#8903 = EDGE_LOOP('',(#8904,#8905,#8911,#8912)); +#8904 = ORIENTED_EDGE('',*,*,#8866,.T.); +#8905 = ORIENTED_EDGE('',*,*,#8906,.T.); +#8906 = EDGE_CURVE('',#8859,#8829,#8907,.T.); +#8907 = LINE('',#8908,#8909); +#8908 = CARTESIAN_POINT('',(-4.13,3.,1.11)); +#8909 = VECTOR('',#8910,1.); +#8910 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8911 = ORIENTED_EDGE('',*,*,#8828,.T.); +#8912 = ORIENTED_EDGE('',*,*,#8616,.F.); +#8913 = PLANE('',#8914); +#8914 = AXIS2_PLACEMENT_3D('',#8915,#8916,#8917); +#8915 = CARTESIAN_POINT('',(-4.13,3.,1.11)); +#8916 = DIRECTION('',(1.710343652554E-17,0.27932954083,-0.960195296604) + ); +#8917 = DIRECTION('',(5.879306305656E-17,0.960195296604,0.27932954083)); +#8918 = ADVANCED_FACE('',(#8919),#8935,.T.); +#8919 = FACE_BOUND('',#8920,.T.); +#8920 = EDGE_LOOP('',(#8921,#8922,#8928,#8929)); +#8921 = ORIENTED_EDGE('',*,*,#8850,.T.); +#8922 = ORIENTED_EDGE('',*,*,#8923,.T.); +#8923 = EDGE_CURVE('',#8677,#8813,#8924,.T.); +#8924 = LINE('',#8925,#8926); +#8925 = CARTESIAN_POINT('',(-4.13,2.45,1.59)); +#8926 = VECTOR('',#8927,1.); +#8927 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8928 = ORIENTED_EDGE('',*,*,#8812,.T.); +#8929 = ORIENTED_EDGE('',*,*,#8930,.F.); +#8930 = EDGE_CURVE('',#8851,#8815,#8931,.T.); +#8931 = LINE('',#8932,#8933); +#8932 = CARTESIAN_POINT('',(-4.13,3.,1.43)); +#8933 = VECTOR('',#8934,1.); +#8934 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#8935 = PLANE('',#8936); +#8936 = AXIS2_PLACEMENT_3D('',#8937,#8938,#8939); +#8937 = CARTESIAN_POINT('',(-4.13,2.45,1.59)); +#8938 = DIRECTION('',(1.710343652554E-17,0.27932954083,0.960195296604)); +#8939 = DIRECTION('',(-5.879306305656E-17,-0.960195296604,0.27932954083) + ); +#8940 = ADVANCED_FACE('',(#8941),#8947,.T.); +#8941 = FACE_BOUND('',#8942,.T.); +#8942 = EDGE_LOOP('',(#8943,#8944,#8945,#8946)); +#8943 = ORIENTED_EDGE('',*,*,#8858,.T.); +#8944 = ORIENTED_EDGE('',*,*,#8930,.T.); +#8945 = ORIENTED_EDGE('',*,*,#8836,.T.); +#8946 = ORIENTED_EDGE('',*,*,#8906,.F.); +#8947 = PLANE('',#8948); +#8948 = AXIS2_PLACEMENT_3D('',#8949,#8950,#8951); +#8949 = CARTESIAN_POINT('',(-4.13,3.,1.43)); +#8950 = DIRECTION('',(6.123031769112E-17,1.,-1.224606353822E-16)); +#8951 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#8952 = ADVANCED_FACE('',(#8953),#8959,.T.); +#8953 = FACE_BOUND('',#8954,.T.); +#8954 = EDGE_LOOP('',(#8955,#8956,#8957,#8958)); +#8955 = ORIENTED_EDGE('',*,*,#8735,.T.); +#8956 = ORIENTED_EDGE('',*,*,#8798,.T.); +#8957 = ORIENTED_EDGE('',*,*,#8713,.T.); +#8958 = ORIENTED_EDGE('',*,*,#8536,.F.); +#8959 = PLANE('',#8960); +#8960 = AXIS2_PLACEMENT_3D('',#8961,#8962,#8963); +#8961 = CARTESIAN_POINT('',(-4.13,-8.5,1.43)); +#8962 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,0.960195296604) + ); +#8963 = DIRECTION('',(-5.879306305655E-17,-0.960195296604,-0.27932954083 + )); +#8964 = ADVANCED_FACE('',(#8965),#8984,.T.); +#8965 = FACE_BOUND('',#8966,.T.); +#8966 = EDGE_LOOP('',(#8967,#8975,#8981,#8982,#8983)); +#8967 = ORIENTED_EDGE('',*,*,#8968,.F.); +#8968 = EDGE_CURVE('',#8969,#8669,#8971,.T.); +#8969 = VERTEX_POINT('',#8970); +#8970 = CARTESIAN_POINT('',(-3.49,-0.7,1.59)); +#8971 = LINE('',#8972,#8973); +#8972 = CARTESIAN_POINT('',(-3.335,-0.7,1.59)); +#8973 = VECTOR('',#8974,1.); +#8974 = DIRECTION('',(-1.,4.402532809476E-49,7.190119168882E-33)); +#8975 = ORIENTED_EDGE('',*,*,#8976,.T.); +#8976 = EDGE_CURVE('',#8969,#8882,#8977,.T.); +#8977 = LINE('',#8978,#8979); +#8978 = CARTESIAN_POINT('',(-3.49,2.45,1.59)); +#8979 = VECTOR('',#8980,1.); +#8980 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#8981 = ORIENTED_EDGE('',*,*,#8881,.F.); +#8982 = ORIENTED_EDGE('',*,*,#8923,.F.); +#8983 = ORIENTED_EDGE('',*,*,#8676,.T.); +#8984 = PLANE('',#8985); +#8985 = AXIS2_PLACEMENT_3D('',#8986,#8987,#8988); +#8986 = CARTESIAN_POINT('',(-4.13,-7.95,1.59)); +#8987 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#8988 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#8989 = ADVANCED_FACE('',(#8990),#9001,.T.); +#8990 = FACE_BOUND('',#8991,.T.); +#8991 = EDGE_LOOP('',(#8992,#8998,#8999,#9000)); +#8992 = ORIENTED_EDGE('',*,*,#8993,.F.); +#8993 = EDGE_CURVE('',#8601,#8969,#8994,.T.); +#8994 = LINE('',#8995,#8996); +#8995 = CARTESIAN_POINT('',(-3.49,-0.7,0.635)); +#8996 = VECTOR('',#8997,1.); +#8997 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#8998 = ORIENTED_EDGE('',*,*,#8632,.F.); +#8999 = ORIENTED_EDGE('',*,*,#8889,.T.); +#9000 = ORIENTED_EDGE('',*,*,#8976,.F.); +#9001 = PLANE('',#9002); +#9002 = AXIS2_PLACEMENT_3D('',#9003,#9004,#9005); +#9003 = CARTESIAN_POINT('',(-3.49,-2.75,1.27)); +#9004 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9005 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9006 = ADVANCED_FACE('',(#9007),#9041,.T.); +#9007 = FACE_BOUND('',#9008,.T.); +#9008 = EDGE_LOOP('',(#9009,#9019,#9027,#9035)); +#9009 = ORIENTED_EDGE('',*,*,#9010,.F.); +#9010 = EDGE_CURVE('',#9011,#9013,#9015,.T.); +#9011 = VERTEX_POINT('',#9012); +#9012 = CARTESIAN_POINT('',(4.13,-2.5,-0.95)); +#9013 = VERTEX_POINT('',#9014); +#9014 = CARTESIAN_POINT('',(4.13,-2.5,-1.59)); +#9015 = LINE('',#9016,#9017); +#9016 = CARTESIAN_POINT('',(4.13,-2.5,-0.635)); +#9017 = VECTOR('',#9018,1.); +#9018 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9019 = ORIENTED_EDGE('',*,*,#9020,.F.); +#9020 = EDGE_CURVE('',#9021,#9011,#9023,.T.); +#9021 = VERTEX_POINT('',#9022); +#9022 = CARTESIAN_POINT('',(4.13,-7.95,-0.95)); +#9023 = LINE('',#9024,#9025); +#9024 = CARTESIAN_POINT('',(4.13,2.45,-0.95)); +#9025 = VECTOR('',#9026,1.); +#9026 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#9027 = ORIENTED_EDGE('',*,*,#9028,.T.); +#9028 = EDGE_CURVE('',#9021,#9029,#9031,.T.); +#9029 = VERTEX_POINT('',#9030); +#9030 = CARTESIAN_POINT('',(4.13,-7.95,-1.59)); +#9031 = LINE('',#9032,#9033); +#9032 = CARTESIAN_POINT('',(4.13,-7.95,-0.77)); +#9033 = VECTOR('',#9034,1.); +#9034 = DIRECTION('',(-3.749151804555E-33,-1.224606353822E-16,-1.)); +#9035 = ORIENTED_EDGE('',*,*,#9036,.F.); +#9036 = EDGE_CURVE('',#9013,#9029,#9037,.T.); +#9037 = LINE('',#9038,#9039); +#9038 = CARTESIAN_POINT('',(4.13,-7.95,-1.59)); +#9039 = VECTOR('',#9040,1.); +#9040 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#9041 = PLANE('',#9042); +#9042 = AXIS2_PLACEMENT_3D('',#9043,#9044,#9045); +#9043 = CARTESIAN_POINT('',(4.13,-2.75,-1.27)); +#9044 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9045 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9046 = ADVANCED_FACE('',(#9047),#9080,.T.); +#9047 = FACE_BOUND('',#9048,.T.); +#9048 = EDGE_LOOP('',(#9049,#9057,#9065,#9073,#9079)); +#9049 = ORIENTED_EDGE('',*,*,#9050,.F.); +#9050 = EDGE_CURVE('',#9051,#9011,#9053,.T.); +#9051 = VERTEX_POINT('',#9052); +#9052 = CARTESIAN_POINT('',(3.49,-2.5,-0.95)); +#9053 = LINE('',#9054,#9055); +#9054 = CARTESIAN_POINT('',(-0.16,-2.5,-0.95)); +#9055 = VECTOR('',#9056,1.); +#9056 = DIRECTION('',(1.,-4.402532809476E-49,-7.190119168882E-33)); +#9057 = ORIENTED_EDGE('',*,*,#9058,.T.); +#9058 = EDGE_CURVE('',#9051,#9059,#9061,.T.); +#9059 = VERTEX_POINT('',#9060); +#9060 = CARTESIAN_POINT('',(3.49,-7.95,-0.95)); +#9061 = LINE('',#9062,#9063); +#9062 = CARTESIAN_POINT('',(3.49,2.45,-0.95)); +#9063 = VECTOR('',#9064,1.); +#9064 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#9065 = ORIENTED_EDGE('',*,*,#9066,.T.); +#9066 = EDGE_CURVE('',#9059,#9067,#9069,.T.); +#9067 = VERTEX_POINT('',#9068); +#9068 = CARTESIAN_POINT('',(4.12972288734,-7.95,-0.95)); +#9069 = LINE('',#9070,#9071); +#9070 = CARTESIAN_POINT('',(3.49,-7.95,-0.95)); +#9071 = VECTOR('',#9072,1.); +#9072 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9073 = ORIENTED_EDGE('',*,*,#9074,.T.); +#9074 = EDGE_CURVE('',#9067,#9021,#9075,.T.); +#9075 = LINE('',#9076,#9077); +#9076 = CARTESIAN_POINT('',(3.49,-7.95,-0.95)); +#9077 = VECTOR('',#9078,1.); +#9078 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9079 = ORIENTED_EDGE('',*,*,#9020,.T.); +#9080 = PLANE('',#9081); +#9081 = AXIS2_PLACEMENT_3D('',#9082,#9083,#9084); +#9082 = CARTESIAN_POINT('',(3.49,-7.95,-0.95)); +#9083 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#9084 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#9085 = ADVANCED_FACE('',(#9086),#9119,.T.); +#9086 = FACE_BOUND('',#9087,.T.); +#9087 = EDGE_LOOP('',(#9088,#9096,#9097,#9105,#9113)); +#9088 = ORIENTED_EDGE('',*,*,#9089,.F.); +#9089 = EDGE_CURVE('',#9013,#9090,#9092,.T.); +#9090 = VERTEX_POINT('',#9091); +#9091 = CARTESIAN_POINT('',(3.49,-2.5,-1.59)); +#9092 = LINE('',#9093,#9094); +#9093 = CARTESIAN_POINT('',(-0.16,-2.5,-1.59)); +#9094 = VECTOR('',#9095,1.); +#9095 = DIRECTION('',(-1.,0.,0.)); +#9096 = ORIENTED_EDGE('',*,*,#9036,.T.); +#9097 = ORIENTED_EDGE('',*,*,#9098,.F.); +#9098 = EDGE_CURVE('',#9099,#9029,#9101,.T.); +#9099 = VERTEX_POINT('',#9100); +#9100 = CARTESIAN_POINT('',(4.12972288734,-7.95,-1.59)); +#9101 = LINE('',#9102,#9103); +#9102 = CARTESIAN_POINT('',(3.49,-7.95,-1.59)); +#9103 = VECTOR('',#9104,1.); +#9104 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9105 = ORIENTED_EDGE('',*,*,#9106,.F.); +#9106 = EDGE_CURVE('',#9107,#9099,#9109,.T.); +#9107 = VERTEX_POINT('',#9108); +#9108 = CARTESIAN_POINT('',(3.49,-7.95,-1.59)); +#9109 = LINE('',#9110,#9111); +#9110 = CARTESIAN_POINT('',(3.49,-7.95,-1.59)); +#9111 = VECTOR('',#9112,1.); +#9112 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9113 = ORIENTED_EDGE('',*,*,#9114,.T.); +#9114 = EDGE_CURVE('',#9107,#9090,#9115,.T.); +#9115 = LINE('',#9116,#9117); +#9116 = CARTESIAN_POINT('',(3.49,-7.95,-1.59)); +#9117 = VECTOR('',#9118,1.); +#9118 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9119 = PLANE('',#9120); +#9120 = AXIS2_PLACEMENT_3D('',#9121,#9122,#9123); +#9121 = CARTESIAN_POINT('',(3.49,2.45,-1.59)); +#9122 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9123 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9124 = ADVANCED_FACE('',(#9125),#9167,.T.); +#9125 = FACE_BOUND('',#9126,.T.); +#9126 = EDGE_LOOP('',(#9127,#9137,#9145,#9153,#9161)); +#9127 = ORIENTED_EDGE('',*,*,#9128,.F.); +#9128 = EDGE_CURVE('',#9129,#9131,#9133,.T.); +#9129 = VERTEX_POINT('',#9130); +#9130 = CARTESIAN_POINT('',(3.49,-0.7,-1.59)); +#9131 = VERTEX_POINT('',#9132); +#9132 = CARTESIAN_POINT('',(4.13,-0.7,-1.59)); +#9133 = LINE('',#9134,#9135); +#9134 = CARTESIAN_POINT('',(0.475,-0.7,-1.59)); +#9135 = VECTOR('',#9136,1.); +#9136 = DIRECTION('',(1.,0.,0.)); +#9137 = ORIENTED_EDGE('',*,*,#9138,.T.); +#9138 = EDGE_CURVE('',#9129,#9139,#9141,.T.); +#9139 = VERTEX_POINT('',#9140); +#9140 = CARTESIAN_POINT('',(3.49,2.45,-1.59)); +#9141 = LINE('',#9142,#9143); +#9142 = CARTESIAN_POINT('',(3.49,-7.95,-1.59)); +#9143 = VECTOR('',#9144,1.); +#9144 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9145 = ORIENTED_EDGE('',*,*,#9146,.T.); +#9146 = EDGE_CURVE('',#9139,#9147,#9149,.T.); +#9147 = VERTEX_POINT('',#9148); +#9148 = CARTESIAN_POINT('',(4.12972288734,2.45,-1.59)); +#9149 = LINE('',#9150,#9151); +#9150 = CARTESIAN_POINT('',(3.49,2.45,-1.59)); +#9151 = VECTOR('',#9152,1.); +#9152 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9153 = ORIENTED_EDGE('',*,*,#9154,.T.); +#9154 = EDGE_CURVE('',#9147,#9155,#9157,.T.); +#9155 = VERTEX_POINT('',#9156); +#9156 = CARTESIAN_POINT('',(4.13,2.45,-1.59)); +#9157 = LINE('',#9158,#9159); +#9158 = CARTESIAN_POINT('',(3.49,2.45,-1.59)); +#9159 = VECTOR('',#9160,1.); +#9160 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9161 = ORIENTED_EDGE('',*,*,#9162,.T.); +#9162 = EDGE_CURVE('',#9155,#9131,#9163,.T.); +#9163 = LINE('',#9164,#9165); +#9164 = CARTESIAN_POINT('',(4.13,-7.95,-1.59)); +#9165 = VECTOR('',#9166,1.); +#9166 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#9167 = PLANE('',#9168); +#9168 = AXIS2_PLACEMENT_3D('',#9169,#9170,#9171); +#9169 = CARTESIAN_POINT('',(3.49,2.45,-1.59)); +#9170 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9171 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9172 = ADVANCED_FACE('',(#9173),#9189,.F.); +#9173 = FACE_BOUND('',#9174,.T.); +#9174 = EDGE_LOOP('',(#9175,#9181,#9182,#9188)); +#9175 = ORIENTED_EDGE('',*,*,#9176,.F.); +#9176 = EDGE_CURVE('',#9090,#9051,#9177,.T.); +#9177 = LINE('',#9178,#9179); +#9178 = CARTESIAN_POINT('',(3.49,-2.5,-0.635)); +#9179 = VECTOR('',#9180,1.); +#9180 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#9181 = ORIENTED_EDGE('',*,*,#9114,.F.); +#9182 = ORIENTED_EDGE('',*,*,#9183,.T.); +#9183 = EDGE_CURVE('',#9107,#9059,#9184,.T.); +#9184 = LINE('',#9185,#9186); +#9185 = CARTESIAN_POINT('',(3.49,-7.949999999999,-0.77)); +#9186 = VECTOR('',#9187,1.); +#9187 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#9188 = ORIENTED_EDGE('',*,*,#9058,.F.); +#9189 = PLANE('',#9190); +#9190 = AXIS2_PLACEMENT_3D('',#9191,#9192,#9193); +#9191 = CARTESIAN_POINT('',(3.49,-2.75,-1.27)); +#9192 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9193 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9194 = ADVANCED_FACE('',(#9195),#9220,.F.); +#9195 = FACE_BOUND('',#9196,.T.); +#9196 = EDGE_LOOP('',(#9197,#9205,#9213,#9219)); +#9197 = ORIENTED_EDGE('',*,*,#9198,.F.); +#9198 = EDGE_CURVE('',#9199,#9129,#9201,.T.); +#9199 = VERTEX_POINT('',#9200); +#9200 = CARTESIAN_POINT('',(3.49,-0.7,-0.95)); +#9201 = LINE('',#9202,#9203); +#9202 = CARTESIAN_POINT('',(3.49,-0.7,-0.635)); +#9203 = VECTOR('',#9204,1.); +#9204 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9205 = ORIENTED_EDGE('',*,*,#9206,.F.); +#9206 = EDGE_CURVE('',#9207,#9199,#9209,.T.); +#9207 = VERTEX_POINT('',#9208); +#9208 = CARTESIAN_POINT('',(3.49,2.45,-0.95)); +#9209 = LINE('',#9210,#9211); +#9210 = CARTESIAN_POINT('',(3.49,2.45,-0.95)); +#9211 = VECTOR('',#9212,1.); +#9212 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#9213 = ORIENTED_EDGE('',*,*,#9214,.T.); +#9214 = EDGE_CURVE('',#9207,#9139,#9215,.T.); +#9215 = LINE('',#9216,#9217); +#9216 = CARTESIAN_POINT('',(3.49,2.449999999999,-1.77)); +#9217 = VECTOR('',#9218,1.); +#9218 = DIRECTION('',(3.749151804555E-33,1.232595164408E-32,-1.)); +#9219 = ORIENTED_EDGE('',*,*,#9138,.F.); +#9220 = PLANE('',#9221); +#9221 = AXIS2_PLACEMENT_3D('',#9222,#9223,#9224); +#9222 = CARTESIAN_POINT('',(3.49,-2.75,-1.27)); +#9223 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9224 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9225 = ADVANCED_FACE('',(#9226),#9256,.F.); +#9226 = FACE_BOUND('',#9227,.T.); +#9227 = EDGE_LOOP('',(#9228,#9236,#9242,#9250)); +#9228 = ORIENTED_EDGE('',*,*,#9229,.F.); +#9229 = EDGE_CURVE('',#9099,#9230,#9232,.T.); +#9230 = VERTEX_POINT('',#9231); +#9231 = CARTESIAN_POINT('',(3.970000000003,-8.5,-1.43)); +#9232 = LINE('',#9233,#9234); +#9233 = CARTESIAN_POINT('',(4.058947877482,-8.193711192998, + -1.519102198401)); +#9234 = VECTOR('',#9235,1.); +#9235 = DIRECTION('',(-0.268598772191,-0.92491018143,0.269064780052)); +#9236 = ORIENTED_EDGE('',*,*,#9237,.F.); +#9237 = EDGE_CURVE('',#9067,#9099,#9238,.T.); +#9238 = LINE('',#9239,#9240); +#9239 = CARTESIAN_POINT('',(4.12972288734,-7.95,-0.27)); +#9240 = VECTOR('',#9241,1.); +#9241 = DIRECTION('',(0.,-1.224606353822E-16,-1.)); +#9242 = ORIENTED_EDGE('',*,*,#9243,.F.); +#9243 = EDGE_CURVE('',#9244,#9067,#9246,.T.); +#9244 = VERTEX_POINT('',#9245); +#9245 = CARTESIAN_POINT('',(3.970000000003,-8.5,-1.11)); +#9246 = LINE('',#9247,#9248); +#9247 = CARTESIAN_POINT('',(4.057118531221,-8.200010480847, + -1.022730321701)); +#9248 = VECTOR('',#9249,1.); +#9249 = DIRECTION('',(0.268598772191,0.92491018143,0.269064780052)); +#9250 = ORIENTED_EDGE('',*,*,#9251,.F.); +#9251 = EDGE_CURVE('',#9230,#9244,#9252,.T.); +#9252 = LINE('',#9253,#9254); +#9253 = CARTESIAN_POINT('',(3.970000000003,-8.5,-0.85)); +#9254 = VECTOR('',#9255,1.); +#9255 = DIRECTION('',(-1.778160569846E-17,6.123031769112E-17,1.)); +#9256 = PLANE('',#9257); +#9257 = AXIS2_PLACEMENT_3D('',#9258,#9259,#9260); +#9258 = CARTESIAN_POINT('',(4.12972288734,-7.95,-0.27)); +#9259 = DIRECTION('',(-0.960324967172,0.278883411887,-3.415223981728E-17 + )); +#9260 = DIRECTION('',(0.278883411887,0.960324967172,-1.176020056533E-16) + ); +#9261 = ADVANCED_FACE('',(#9262),#9287,.F.); +#9262 = FACE_BOUND('',#9263,.T.); +#9263 = EDGE_LOOP('',(#9264,#9272,#9273,#9281)); +#9264 = ORIENTED_EDGE('',*,*,#9265,.F.); +#9265 = EDGE_CURVE('',#9059,#9266,#9268,.T.); +#9266 = VERTEX_POINT('',#9267); +#9267 = CARTESIAN_POINT('',(3.649999999997,-8.5,-1.11)); +#9268 = LINE('',#9269,#9270); +#9269 = CARTESIAN_POINT('',(3.613811139381,-8.375600791632, + -1.073811139384)); +#9270 = VECTOR('',#9271,1.); +#9271 = DIRECTION('',(0.269031078557,-0.924794332561,-0.269031078563)); +#9272 = ORIENTED_EDGE('',*,*,#9183,.F.); +#9273 = ORIENTED_EDGE('',*,*,#9274,.F.); +#9274 = EDGE_CURVE('',#9275,#9107,#9277,.T.); +#9275 = VERTEX_POINT('',#9276); +#9276 = CARTESIAN_POINT('',(3.649999999997,-8.5,-1.43)); +#9277 = LINE('',#9278,#9279); +#9278 = CARTESIAN_POINT('',(3.611979078312,-8.369303081708, + -1.468020921685)); +#9279 = VECTOR('',#9280,1.); +#9280 = DIRECTION('',(-0.269031078557,0.924794332561,-0.269031078563)); +#9281 = ORIENTED_EDGE('',*,*,#9282,.F.); +#9282 = EDGE_CURVE('',#9266,#9275,#9283,.T.); +#9283 = LINE('',#9284,#9285); +#9284 = CARTESIAN_POINT('',(3.649999999997,-8.5,-0.85)); +#9285 = VECTOR('',#9286,1.); +#9286 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9287 = PLANE('',#9288); +#9288 = AXIS2_PLACEMENT_3D('',#9289,#9290,#9291); +#9289 = CARTESIAN_POINT('',(3.649999999997,-8.5,-0.27)); +#9290 = DIRECTION('',(0.960195296605,0.279329540824,-3.420687305034E-17) + ); +#9291 = DIRECTION('',(0.279329540824,-0.960195296605,1.175861261133E-16) + ); +#9292 = ADVANCED_FACE('',(#9293),#9299,.F.); +#9293 = FACE_BOUND('',#9294,.T.); +#9294 = EDGE_LOOP('',(#9295,#9296,#9297,#9298)); +#9295 = ORIENTED_EDGE('',*,*,#9098,.T.); +#9296 = ORIENTED_EDGE('',*,*,#9028,.F.); +#9297 = ORIENTED_EDGE('',*,*,#9074,.F.); +#9298 = ORIENTED_EDGE('',*,*,#9237,.T.); +#9299 = PLANE('',#9300); +#9300 = AXIS2_PLACEMENT_3D('',#9301,#9302,#9303); +#9301 = CARTESIAN_POINT('',(4.587543330904,-7.95,-0.27)); +#9302 = DIRECTION('',(0.,1.,-1.224606353822E-16)); +#9303 = DIRECTION('',(1.,0.,0.)); +#9304 = ADVANCED_FACE('',(#9305),#9316,.T.); +#9305 = FACE_BOUND('',#9306,.T.); +#9306 = EDGE_LOOP('',(#9307,#9308,#9309,#9310)); +#9307 = ORIENTED_EDGE('',*,*,#9274,.T.); +#9308 = ORIENTED_EDGE('',*,*,#9106,.T.); +#9309 = ORIENTED_EDGE('',*,*,#9229,.T.); +#9310 = ORIENTED_EDGE('',*,*,#9311,.F.); +#9311 = EDGE_CURVE('',#9275,#9230,#9312,.T.); +#9312 = LINE('',#9313,#9314); +#9313 = CARTESIAN_POINT('',(3.49,-8.5,-1.43)); +#9314 = VECTOR('',#9315,1.); +#9315 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9316 = PLANE('',#9317); +#9317 = AXIS2_PLACEMENT_3D('',#9318,#9319,#9320); +#9318 = CARTESIAN_POINT('',(3.49,-7.95,-1.59)); +#9319 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,-0.960195296604 + )); +#9320 = DIRECTION('',(5.879306305656E-17,0.960195296604,-0.27932954083) + ); +#9321 = ADVANCED_FACE('',(#9322),#9333,.T.); +#9322 = FACE_BOUND('',#9323,.T.); +#9323 = EDGE_LOOP('',(#9324,#9325,#9326,#9327)); +#9324 = ORIENTED_EDGE('',*,*,#9282,.T.); +#9325 = ORIENTED_EDGE('',*,*,#9311,.T.); +#9326 = ORIENTED_EDGE('',*,*,#9251,.T.); +#9327 = ORIENTED_EDGE('',*,*,#9328,.F.); +#9328 = EDGE_CURVE('',#9266,#9244,#9329,.T.); +#9329 = LINE('',#9330,#9331); +#9330 = CARTESIAN_POINT('',(3.49,-8.5,-1.11)); +#9331 = VECTOR('',#9332,1.); +#9332 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9333 = PLANE('',#9334); +#9334 = AXIS2_PLACEMENT_3D('',#9335,#9336,#9337); +#9335 = CARTESIAN_POINT('',(3.49,-8.5,-1.43)); +#9336 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#9337 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9338 = ADVANCED_FACE('',(#9339),#9371,.F.); +#9339 = FACE_BOUND('',#9340,.T.); +#9340 = EDGE_LOOP('',(#9341,#9351,#9357,#9365)); +#9341 = ORIENTED_EDGE('',*,*,#9342,.F.); +#9342 = EDGE_CURVE('',#9343,#9345,#9347,.T.); +#9343 = VERTEX_POINT('',#9344); +#9344 = CARTESIAN_POINT('',(4.12972288734,2.45,-0.95)); +#9345 = VERTEX_POINT('',#9346); +#9346 = CARTESIAN_POINT('',(3.970000000003,3.,-1.11)); +#9347 = LINE('',#9348,#9349); +#9348 = CARTESIAN_POINT('',(4.058947877482,2.693711192998, + -1.020897801599)); +#9349 = VECTOR('',#9350,1.); +#9350 = DIRECTION('',(-0.268598772191,0.92491018143,-0.269064780052)); +#9351 = ORIENTED_EDGE('',*,*,#9352,.F.); +#9352 = EDGE_CURVE('',#9147,#9343,#9353,.T.); +#9353 = LINE('',#9354,#9355); +#9354 = CARTESIAN_POINT('',(4.12972288734,2.45,-2.27)); +#9355 = VECTOR('',#9356,1.); +#9356 = DIRECTION('',(0.,0.,1.)); +#9357 = ORIENTED_EDGE('',*,*,#9358,.F.); +#9358 = EDGE_CURVE('',#9359,#9147,#9361,.T.); +#9359 = VERTEX_POINT('',#9360); +#9360 = CARTESIAN_POINT('',(3.970000000003,3.,-1.43)); +#9361 = LINE('',#9362,#9363); +#9362 = CARTESIAN_POINT('',(4.057118531221,2.700010480847, + -1.517269678299)); +#9363 = VECTOR('',#9364,1.); +#9364 = DIRECTION('',(0.268598772191,-0.92491018143,-0.269064780052)); +#9365 = ORIENTED_EDGE('',*,*,#9366,.F.); +#9366 = EDGE_CURVE('',#9345,#9359,#9367,.T.); +#9367 = LINE('',#9368,#9369); +#9368 = CARTESIAN_POINT('',(3.970000000003,3.,-1.69)); +#9369 = VECTOR('',#9370,1.); +#9370 = DIRECTION('',(3.556321139691E-17,-1.224606353822E-16,-1.)); +#9371 = PLANE('',#9372); +#9372 = AXIS2_PLACEMENT_3D('',#9373,#9374,#9375); +#9373 = CARTESIAN_POINT('',(4.12972288734,2.45,-2.27)); +#9374 = DIRECTION('',(-0.960324967172,-0.278883411887,0.)); +#9375 = DIRECTION('',(0.278883411887,-0.960324967172,0.)); +#9376 = ADVANCED_FACE('',(#9377),#9402,.F.); +#9377 = FACE_BOUND('',#9378,.T.); +#9378 = EDGE_LOOP('',(#9379,#9387,#9395,#9401)); +#9379 = ORIENTED_EDGE('',*,*,#9380,.F.); +#9380 = EDGE_CURVE('',#9381,#9207,#9383,.T.); +#9381 = VERTEX_POINT('',#9382); +#9382 = CARTESIAN_POINT('',(3.649999999997,3.,-1.11)); +#9383 = LINE('',#9384,#9385); +#9384 = CARTESIAN_POINT('',(3.611979078312,2.869303081708, + -1.071979078315)); +#9385 = VECTOR('',#9386,1.); +#9386 = DIRECTION('',(-0.269031078557,-0.924794332561,0.269031078563)); +#9387 = ORIENTED_EDGE('',*,*,#9388,.F.); +#9388 = EDGE_CURVE('',#9389,#9381,#9391,.T.); +#9389 = VERTEX_POINT('',#9390); +#9390 = CARTESIAN_POINT('',(3.649999999997,3.,-1.43)); +#9391 = LINE('',#9392,#9393); +#9392 = CARTESIAN_POINT('',(3.649999999997,3.,-1.69)); +#9393 = VECTOR('',#9394,1.); +#9394 = DIRECTION('',(0.,1.224606353822E-16,1.)); +#9395 = ORIENTED_EDGE('',*,*,#9396,.F.); +#9396 = EDGE_CURVE('',#9139,#9389,#9397,.T.); +#9397 = LINE('',#9398,#9399); +#9398 = CARTESIAN_POINT('',(3.613811139381,2.875600791632, + -1.466188860616)); +#9399 = VECTOR('',#9400,1.); +#9400 = DIRECTION('',(0.269031078557,0.924794332561,0.269031078563)); +#9401 = ORIENTED_EDGE('',*,*,#9214,.F.); +#9402 = PLANE('',#9403); +#9403 = AXIS2_PLACEMENT_3D('',#9404,#9405,#9406); +#9404 = CARTESIAN_POINT('',(3.649999999997,3.,-2.27)); +#9405 = DIRECTION('',(0.960195296605,-0.279329540824,0.)); +#9406 = DIRECTION('',(0.279329540824,0.960195296605,0.)); +#9407 = ADVANCED_FACE('',(#9408),#9426,.F.); +#9408 = FACE_BOUND('',#9409,.T.); +#9409 = EDGE_LOOP('',(#9410,#9418,#9424,#9425)); +#9410 = ORIENTED_EDGE('',*,*,#9411,.T.); +#9411 = EDGE_CURVE('',#9343,#9412,#9414,.T.); +#9412 = VERTEX_POINT('',#9413); +#9413 = CARTESIAN_POINT('',(4.13,2.45,-0.95)); +#9414 = LINE('',#9415,#9416); +#9415 = CARTESIAN_POINT('',(3.49,2.45,-0.95)); +#9416 = VECTOR('',#9417,1.); +#9417 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9418 = ORIENTED_EDGE('',*,*,#9419,.F.); +#9419 = EDGE_CURVE('',#9155,#9412,#9420,.T.); +#9420 = LINE('',#9421,#9422); +#9421 = CARTESIAN_POINT('',(4.13,2.45,-1.77)); +#9422 = VECTOR('',#9423,1.); +#9423 = DIRECTION('',(-3.749151804555E-33,0.,1.)); +#9424 = ORIENTED_EDGE('',*,*,#9154,.F.); +#9425 = ORIENTED_EDGE('',*,*,#9352,.T.); +#9426 = PLANE('',#9427); +#9427 = AXIS2_PLACEMENT_3D('',#9428,#9429,#9430); +#9428 = CARTESIAN_POINT('',(4.587543330904,2.45,-2.27)); +#9429 = DIRECTION('',(0.,-1.,0.)); +#9430 = DIRECTION('',(1.,0.,0.)); +#9431 = ADVANCED_FACE('',(#9432),#9443,.T.); +#9432 = FACE_BOUND('',#9433,.T.); +#9433 = EDGE_LOOP('',(#9434,#9435,#9441,#9442)); +#9434 = ORIENTED_EDGE('',*,*,#9396,.T.); +#9435 = ORIENTED_EDGE('',*,*,#9436,.T.); +#9436 = EDGE_CURVE('',#9389,#9359,#9437,.T.); +#9437 = LINE('',#9438,#9439); +#9438 = CARTESIAN_POINT('',(3.49,3.,-1.43)); +#9439 = VECTOR('',#9440,1.); +#9440 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9441 = ORIENTED_EDGE('',*,*,#9358,.T.); +#9442 = ORIENTED_EDGE('',*,*,#9146,.F.); +#9443 = PLANE('',#9444); +#9444 = AXIS2_PLACEMENT_3D('',#9445,#9446,#9447); +#9445 = CARTESIAN_POINT('',(3.49,3.,-1.43)); +#9446 = DIRECTION('',(1.710343652554E-17,0.27932954083,-0.960195296604) + ); +#9447 = DIRECTION('',(5.879306305656E-17,0.960195296604,0.27932954083)); +#9448 = ADVANCED_FACE('',(#9449),#9465,.T.); +#9449 = FACE_BOUND('',#9450,.T.); +#9450 = EDGE_LOOP('',(#9451,#9452,#9458,#9459)); +#9451 = ORIENTED_EDGE('',*,*,#9380,.T.); +#9452 = ORIENTED_EDGE('',*,*,#9453,.T.); +#9453 = EDGE_CURVE('',#9207,#9343,#9454,.T.); +#9454 = LINE('',#9455,#9456); +#9455 = CARTESIAN_POINT('',(3.49,2.45,-0.95)); +#9456 = VECTOR('',#9457,1.); +#9457 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9458 = ORIENTED_EDGE('',*,*,#9342,.T.); +#9459 = ORIENTED_EDGE('',*,*,#9460,.F.); +#9460 = EDGE_CURVE('',#9381,#9345,#9461,.T.); +#9461 = LINE('',#9462,#9463); +#9462 = CARTESIAN_POINT('',(3.49,3.,-1.11)); +#9463 = VECTOR('',#9464,1.); +#9464 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9465 = PLANE('',#9466); +#9466 = AXIS2_PLACEMENT_3D('',#9467,#9468,#9469); +#9467 = CARTESIAN_POINT('',(3.49,2.45,-0.95)); +#9468 = DIRECTION('',(1.710343652554E-17,0.27932954083,0.960195296604)); +#9469 = DIRECTION('',(-5.879306305656E-17,-0.960195296604,0.27932954083) + ); +#9470 = ADVANCED_FACE('',(#9471),#9477,.T.); +#9471 = FACE_BOUND('',#9472,.T.); +#9472 = EDGE_LOOP('',(#9473,#9474,#9475,#9476)); +#9473 = ORIENTED_EDGE('',*,*,#9388,.T.); +#9474 = ORIENTED_EDGE('',*,*,#9460,.T.); +#9475 = ORIENTED_EDGE('',*,*,#9366,.T.); +#9476 = ORIENTED_EDGE('',*,*,#9436,.F.); +#9477 = PLANE('',#9478); +#9478 = AXIS2_PLACEMENT_3D('',#9479,#9480,#9481); +#9479 = CARTESIAN_POINT('',(3.49,3.,-1.11)); +#9480 = DIRECTION('',(6.123031769112E-17,1.,-1.224606353822E-16)); +#9481 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#9482 = ADVANCED_FACE('',(#9483),#9489,.T.); +#9483 = FACE_BOUND('',#9484,.T.); +#9484 = EDGE_LOOP('',(#9485,#9486,#9487,#9488)); +#9485 = ORIENTED_EDGE('',*,*,#9265,.T.); +#9486 = ORIENTED_EDGE('',*,*,#9328,.T.); +#9487 = ORIENTED_EDGE('',*,*,#9243,.T.); +#9488 = ORIENTED_EDGE('',*,*,#9066,.F.); +#9489 = PLANE('',#9490); +#9490 = AXIS2_PLACEMENT_3D('',#9491,#9492,#9493); +#9491 = CARTESIAN_POINT('',(3.49,-8.5,-1.11)); +#9492 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,0.960195296604) + ); +#9493 = DIRECTION('',(-5.879306305655E-17,-0.960195296604,-0.27932954083 + )); +#9494 = ADVANCED_FACE('',(#9495),#9514,.T.); +#9495 = FACE_BOUND('',#9496,.T.); +#9496 = EDGE_LOOP('',(#9497,#9505,#9511,#9512,#9513)); +#9497 = ORIENTED_EDGE('',*,*,#9498,.F.); +#9498 = EDGE_CURVE('',#9499,#9199,#9501,.T.); +#9499 = VERTEX_POINT('',#9500); +#9500 = CARTESIAN_POINT('',(4.13,-0.7,-0.95)); +#9501 = LINE('',#9502,#9503); +#9502 = CARTESIAN_POINT('',(0.475,-0.7,-0.95)); +#9503 = VECTOR('',#9504,1.); +#9504 = DIRECTION('',(-1.,4.402532809476E-49,7.190119168882E-33)); +#9505 = ORIENTED_EDGE('',*,*,#9506,.T.); +#9506 = EDGE_CURVE('',#9499,#9412,#9507,.T.); +#9507 = LINE('',#9508,#9509); +#9508 = CARTESIAN_POINT('',(4.13,2.45,-0.95)); +#9509 = VECTOR('',#9510,1.); +#9510 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#9511 = ORIENTED_EDGE('',*,*,#9411,.F.); +#9512 = ORIENTED_EDGE('',*,*,#9453,.F.); +#9513 = ORIENTED_EDGE('',*,*,#9206,.T.); +#9514 = PLANE('',#9515); +#9515 = AXIS2_PLACEMENT_3D('',#9516,#9517,#9518); +#9516 = CARTESIAN_POINT('',(3.49,-7.95,-0.95)); +#9517 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#9518 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#9519 = ADVANCED_FACE('',(#9520),#9531,.T.); +#9520 = FACE_BOUND('',#9521,.T.); +#9521 = EDGE_LOOP('',(#9522,#9528,#9529,#9530)); +#9522 = ORIENTED_EDGE('',*,*,#9523,.F.); +#9523 = EDGE_CURVE('',#9131,#9499,#9524,.T.); +#9524 = LINE('',#9525,#9526); +#9525 = CARTESIAN_POINT('',(4.13,-0.7,-0.635)); +#9526 = VECTOR('',#9527,1.); +#9527 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#9528 = ORIENTED_EDGE('',*,*,#9162,.F.); +#9529 = ORIENTED_EDGE('',*,*,#9419,.T.); +#9530 = ORIENTED_EDGE('',*,*,#9506,.F.); +#9531 = PLANE('',#9532); +#9532 = AXIS2_PLACEMENT_3D('',#9533,#9534,#9535); +#9533 = CARTESIAN_POINT('',(4.13,-2.75,-1.27)); +#9534 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9535 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9536 = ADVANCED_FACE('',(#9537),#9571,.T.); +#9537 = FACE_BOUND('',#9538,.T.); +#9538 = EDGE_LOOP('',(#9539,#9549,#9557,#9565)); +#9539 = ORIENTED_EDGE('',*,*,#9540,.F.); +#9540 = EDGE_CURVE('',#9541,#9543,#9545,.T.); +#9541 = VERTEX_POINT('',#9542); +#9542 = CARTESIAN_POINT('',(1.59,-2.5,-0.95)); +#9543 = VERTEX_POINT('',#9544); +#9544 = CARTESIAN_POINT('',(1.59,-2.5,-1.59)); +#9545 = LINE('',#9546,#9547); +#9546 = CARTESIAN_POINT('',(1.59,-2.5,-0.635)); +#9547 = VECTOR('',#9548,1.); +#9548 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9549 = ORIENTED_EDGE('',*,*,#9550,.F.); +#9550 = EDGE_CURVE('',#9551,#9541,#9553,.T.); +#9551 = VERTEX_POINT('',#9552); +#9552 = CARTESIAN_POINT('',(1.59,-7.95,-0.95)); +#9553 = LINE('',#9554,#9555); +#9554 = CARTESIAN_POINT('',(1.59,2.45,-0.95)); +#9555 = VECTOR('',#9556,1.); +#9556 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#9557 = ORIENTED_EDGE('',*,*,#9558,.T.); +#9558 = EDGE_CURVE('',#9551,#9559,#9561,.T.); +#9559 = VERTEX_POINT('',#9560); +#9560 = CARTESIAN_POINT('',(1.59,-7.95,-1.59)); +#9561 = LINE('',#9562,#9563); +#9562 = CARTESIAN_POINT('',(1.59,-7.95,-0.77)); +#9563 = VECTOR('',#9564,1.); +#9564 = DIRECTION('',(-3.749151804555E-33,-1.224606353822E-16,-1.)); +#9565 = ORIENTED_EDGE('',*,*,#9566,.F.); +#9566 = EDGE_CURVE('',#9543,#9559,#9567,.T.); +#9567 = LINE('',#9568,#9569); +#9568 = CARTESIAN_POINT('',(1.59,-7.95,-1.59)); +#9569 = VECTOR('',#9570,1.); +#9570 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#9571 = PLANE('',#9572); +#9572 = AXIS2_PLACEMENT_3D('',#9573,#9574,#9575); +#9573 = CARTESIAN_POINT('',(1.59,-2.75,-1.27)); +#9574 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9575 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9576 = ADVANCED_FACE('',(#9577),#9610,.T.); +#9577 = FACE_BOUND('',#9578,.T.); +#9578 = EDGE_LOOP('',(#9579,#9587,#9595,#9603,#9609)); +#9579 = ORIENTED_EDGE('',*,*,#9580,.F.); +#9580 = EDGE_CURVE('',#9581,#9541,#9583,.T.); +#9581 = VERTEX_POINT('',#9582); +#9582 = CARTESIAN_POINT('',(0.95,-2.5,-0.95)); +#9583 = LINE('',#9584,#9585); +#9584 = CARTESIAN_POINT('',(-1.43,-2.5,-0.95)); +#9585 = VECTOR('',#9586,1.); +#9586 = DIRECTION('',(1.,-4.402532809476E-49,-7.190119168882E-33)); +#9587 = ORIENTED_EDGE('',*,*,#9588,.T.); +#9588 = EDGE_CURVE('',#9581,#9589,#9591,.T.); +#9589 = VERTEX_POINT('',#9590); +#9590 = CARTESIAN_POINT('',(0.95,-7.95,-0.95)); +#9591 = LINE('',#9592,#9593); +#9592 = CARTESIAN_POINT('',(0.95,2.45,-0.95)); +#9593 = VECTOR('',#9594,1.); +#9594 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#9595 = ORIENTED_EDGE('',*,*,#9596,.T.); +#9596 = EDGE_CURVE('',#9589,#9597,#9599,.T.); +#9597 = VERTEX_POINT('',#9598); +#9598 = CARTESIAN_POINT('',(1.58972288734,-7.95,-0.95)); +#9599 = LINE('',#9600,#9601); +#9600 = CARTESIAN_POINT('',(0.95,-7.95,-0.95)); +#9601 = VECTOR('',#9602,1.); +#9602 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9603 = ORIENTED_EDGE('',*,*,#9604,.T.); +#9604 = EDGE_CURVE('',#9597,#9551,#9605,.T.); +#9605 = LINE('',#9606,#9607); +#9606 = CARTESIAN_POINT('',(0.95,-7.95,-0.95)); +#9607 = VECTOR('',#9608,1.); +#9608 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9609 = ORIENTED_EDGE('',*,*,#9550,.T.); +#9610 = PLANE('',#9611); +#9611 = AXIS2_PLACEMENT_3D('',#9612,#9613,#9614); +#9612 = CARTESIAN_POINT('',(0.95,-7.95,-0.95)); +#9613 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#9614 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#9615 = ADVANCED_FACE('',(#9616),#9649,.T.); +#9616 = FACE_BOUND('',#9617,.T.); +#9617 = EDGE_LOOP('',(#9618,#9626,#9627,#9635,#9643)); +#9618 = ORIENTED_EDGE('',*,*,#9619,.F.); +#9619 = EDGE_CURVE('',#9543,#9620,#9622,.T.); +#9620 = VERTEX_POINT('',#9621); +#9621 = CARTESIAN_POINT('',(0.95,-2.5,-1.59)); +#9622 = LINE('',#9623,#9624); +#9623 = CARTESIAN_POINT('',(-1.43,-2.5,-1.59)); +#9624 = VECTOR('',#9625,1.); +#9625 = DIRECTION('',(-1.,0.,0.)); +#9626 = ORIENTED_EDGE('',*,*,#9566,.T.); +#9627 = ORIENTED_EDGE('',*,*,#9628,.F.); +#9628 = EDGE_CURVE('',#9629,#9559,#9631,.T.); +#9629 = VERTEX_POINT('',#9630); +#9630 = CARTESIAN_POINT('',(1.58972288734,-7.95,-1.59)); +#9631 = LINE('',#9632,#9633); +#9632 = CARTESIAN_POINT('',(0.95,-7.95,-1.59)); +#9633 = VECTOR('',#9634,1.); +#9634 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9635 = ORIENTED_EDGE('',*,*,#9636,.F.); +#9636 = EDGE_CURVE('',#9637,#9629,#9639,.T.); +#9637 = VERTEX_POINT('',#9638); +#9638 = CARTESIAN_POINT('',(0.95,-7.95,-1.59)); +#9639 = LINE('',#9640,#9641); +#9640 = CARTESIAN_POINT('',(0.95,-7.95,-1.59)); +#9641 = VECTOR('',#9642,1.); +#9642 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9643 = ORIENTED_EDGE('',*,*,#9644,.T.); +#9644 = EDGE_CURVE('',#9637,#9620,#9645,.T.); +#9645 = LINE('',#9646,#9647); +#9646 = CARTESIAN_POINT('',(0.95,-7.95,-1.59)); +#9647 = VECTOR('',#9648,1.); +#9648 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9649 = PLANE('',#9650); +#9650 = AXIS2_PLACEMENT_3D('',#9651,#9652,#9653); +#9651 = CARTESIAN_POINT('',(0.95,2.45,-1.59)); +#9652 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9653 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9654 = ADVANCED_FACE('',(#9655),#9697,.T.); +#9655 = FACE_BOUND('',#9656,.T.); +#9656 = EDGE_LOOP('',(#9657,#9667,#9675,#9683,#9691)); +#9657 = ORIENTED_EDGE('',*,*,#9658,.F.); +#9658 = EDGE_CURVE('',#9659,#9661,#9663,.T.); +#9659 = VERTEX_POINT('',#9660); +#9660 = CARTESIAN_POINT('',(0.95,-0.7,-1.59)); +#9661 = VERTEX_POINT('',#9662); +#9662 = CARTESIAN_POINT('',(1.59,-0.7,-1.59)); +#9663 = LINE('',#9664,#9665); +#9664 = CARTESIAN_POINT('',(-0.795,-0.7,-1.59)); +#9665 = VECTOR('',#9666,1.); +#9666 = DIRECTION('',(1.,0.,0.)); +#9667 = ORIENTED_EDGE('',*,*,#9668,.T.); +#9668 = EDGE_CURVE('',#9659,#9669,#9671,.T.); +#9669 = VERTEX_POINT('',#9670); +#9670 = CARTESIAN_POINT('',(0.95,2.45,-1.59)); +#9671 = LINE('',#9672,#9673); +#9672 = CARTESIAN_POINT('',(0.95,-7.95,-1.59)); +#9673 = VECTOR('',#9674,1.); +#9674 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9675 = ORIENTED_EDGE('',*,*,#9676,.T.); +#9676 = EDGE_CURVE('',#9669,#9677,#9679,.T.); +#9677 = VERTEX_POINT('',#9678); +#9678 = CARTESIAN_POINT('',(1.58972288734,2.45,-1.59)); +#9679 = LINE('',#9680,#9681); +#9680 = CARTESIAN_POINT('',(0.95,2.45,-1.59)); +#9681 = VECTOR('',#9682,1.); +#9682 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9683 = ORIENTED_EDGE('',*,*,#9684,.T.); +#9684 = EDGE_CURVE('',#9677,#9685,#9687,.T.); +#9685 = VERTEX_POINT('',#9686); +#9686 = CARTESIAN_POINT('',(1.59,2.45,-1.59)); +#9687 = LINE('',#9688,#9689); +#9688 = CARTESIAN_POINT('',(0.95,2.45,-1.59)); +#9689 = VECTOR('',#9690,1.); +#9690 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9691 = ORIENTED_EDGE('',*,*,#9692,.T.); +#9692 = EDGE_CURVE('',#9685,#9661,#9693,.T.); +#9693 = LINE('',#9694,#9695); +#9694 = CARTESIAN_POINT('',(1.59,-7.95,-1.59)); +#9695 = VECTOR('',#9696,1.); +#9696 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#9697 = PLANE('',#9698); +#9698 = AXIS2_PLACEMENT_3D('',#9699,#9700,#9701); +#9699 = CARTESIAN_POINT('',(0.95,2.45,-1.59)); +#9700 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9701 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9702 = ADVANCED_FACE('',(#9703),#9719,.F.); +#9703 = FACE_BOUND('',#9704,.T.); +#9704 = EDGE_LOOP('',(#9705,#9711,#9712,#9718)); +#9705 = ORIENTED_EDGE('',*,*,#9706,.F.); +#9706 = EDGE_CURVE('',#9620,#9581,#9707,.T.); +#9707 = LINE('',#9708,#9709); +#9708 = CARTESIAN_POINT('',(0.95,-2.5,-0.635)); +#9709 = VECTOR('',#9710,1.); +#9710 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#9711 = ORIENTED_EDGE('',*,*,#9644,.F.); +#9712 = ORIENTED_EDGE('',*,*,#9713,.T.); +#9713 = EDGE_CURVE('',#9637,#9589,#9714,.T.); +#9714 = LINE('',#9715,#9716); +#9715 = CARTESIAN_POINT('',(0.95,-7.949999999999,-0.77)); +#9716 = VECTOR('',#9717,1.); +#9717 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#9718 = ORIENTED_EDGE('',*,*,#9588,.F.); +#9719 = PLANE('',#9720); +#9720 = AXIS2_PLACEMENT_3D('',#9721,#9722,#9723); +#9721 = CARTESIAN_POINT('',(0.95,-2.75,-1.27)); +#9722 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9723 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9724 = ADVANCED_FACE('',(#9725),#9750,.F.); +#9725 = FACE_BOUND('',#9726,.T.); +#9726 = EDGE_LOOP('',(#9727,#9735,#9743,#9749)); +#9727 = ORIENTED_EDGE('',*,*,#9728,.F.); +#9728 = EDGE_CURVE('',#9729,#9659,#9731,.T.); +#9729 = VERTEX_POINT('',#9730); +#9730 = CARTESIAN_POINT('',(0.95,-0.7,-0.95)); +#9731 = LINE('',#9732,#9733); +#9732 = CARTESIAN_POINT('',(0.95,-0.7,-0.635)); +#9733 = VECTOR('',#9734,1.); +#9734 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9735 = ORIENTED_EDGE('',*,*,#9736,.F.); +#9736 = EDGE_CURVE('',#9737,#9729,#9739,.T.); +#9737 = VERTEX_POINT('',#9738); +#9738 = CARTESIAN_POINT('',(0.95,2.45,-0.95)); +#9739 = LINE('',#9740,#9741); +#9740 = CARTESIAN_POINT('',(0.95,2.45,-0.95)); +#9741 = VECTOR('',#9742,1.); +#9742 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#9743 = ORIENTED_EDGE('',*,*,#9744,.T.); +#9744 = EDGE_CURVE('',#9737,#9669,#9745,.T.); +#9745 = LINE('',#9746,#9747); +#9746 = CARTESIAN_POINT('',(0.95,2.449999999999,-1.77)); +#9747 = VECTOR('',#9748,1.); +#9748 = DIRECTION('',(3.749151804555E-33,1.232595164408E-32,-1.)); +#9749 = ORIENTED_EDGE('',*,*,#9668,.F.); +#9750 = PLANE('',#9751); +#9751 = AXIS2_PLACEMENT_3D('',#9752,#9753,#9754); +#9752 = CARTESIAN_POINT('',(0.95,-2.75,-1.27)); +#9753 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9754 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#9755 = ADVANCED_FACE('',(#9756),#9786,.F.); +#9756 = FACE_BOUND('',#9757,.T.); +#9757 = EDGE_LOOP('',(#9758,#9766,#9772,#9780)); +#9758 = ORIENTED_EDGE('',*,*,#9759,.F.); +#9759 = EDGE_CURVE('',#9629,#9760,#9762,.T.); +#9760 = VERTEX_POINT('',#9761); +#9761 = CARTESIAN_POINT('',(1.430000000003,-8.5,-1.43)); +#9762 = LINE('',#9763,#9764); +#9763 = CARTESIAN_POINT('',(1.518947877482,-8.193711192998, + -1.519102198401)); +#9764 = VECTOR('',#9765,1.); +#9765 = DIRECTION('',(-0.268598772191,-0.92491018143,0.269064780052)); +#9766 = ORIENTED_EDGE('',*,*,#9767,.F.); +#9767 = EDGE_CURVE('',#9597,#9629,#9768,.T.); +#9768 = LINE('',#9769,#9770); +#9769 = CARTESIAN_POINT('',(1.58972288734,-7.95,-0.27)); +#9770 = VECTOR('',#9771,1.); +#9771 = DIRECTION('',(0.,-1.224606353822E-16,-1.)); +#9772 = ORIENTED_EDGE('',*,*,#9773,.F.); +#9773 = EDGE_CURVE('',#9774,#9597,#9776,.T.); +#9774 = VERTEX_POINT('',#9775); +#9775 = CARTESIAN_POINT('',(1.430000000003,-8.5,-1.11)); +#9776 = LINE('',#9777,#9778); +#9777 = CARTESIAN_POINT('',(1.517118531221,-8.200010480847, + -1.022730321701)); +#9778 = VECTOR('',#9779,1.); +#9779 = DIRECTION('',(0.268598772191,0.92491018143,0.269064780052)); +#9780 = ORIENTED_EDGE('',*,*,#9781,.F.); +#9781 = EDGE_CURVE('',#9760,#9774,#9782,.T.); +#9782 = LINE('',#9783,#9784); +#9783 = CARTESIAN_POINT('',(1.430000000003,-8.5,-0.85)); +#9784 = VECTOR('',#9785,1.); +#9785 = DIRECTION('',(-1.778160569846E-17,6.123031769112E-17,1.)); +#9786 = PLANE('',#9787); +#9787 = AXIS2_PLACEMENT_3D('',#9788,#9789,#9790); +#9788 = CARTESIAN_POINT('',(1.58972288734,-7.95,-0.27)); +#9789 = DIRECTION('',(-0.960324967172,0.278883411887,-3.415223981728E-17 + )); +#9790 = DIRECTION('',(0.278883411887,0.960324967172,-1.176020056533E-16) + ); +#9791 = ADVANCED_FACE('',(#9792),#9817,.F.); +#9792 = FACE_BOUND('',#9793,.T.); +#9793 = EDGE_LOOP('',(#9794,#9802,#9803,#9811)); +#9794 = ORIENTED_EDGE('',*,*,#9795,.F.); +#9795 = EDGE_CURVE('',#9589,#9796,#9798,.T.); +#9796 = VERTEX_POINT('',#9797); +#9797 = CARTESIAN_POINT('',(1.109999999997,-8.5,-1.11)); +#9798 = LINE('',#9799,#9800); +#9799 = CARTESIAN_POINT('',(1.073811139381,-8.375600791632, + -1.073811139384)); +#9800 = VECTOR('',#9801,1.); +#9801 = DIRECTION('',(0.269031078557,-0.924794332561,-0.269031078563)); +#9802 = ORIENTED_EDGE('',*,*,#9713,.F.); +#9803 = ORIENTED_EDGE('',*,*,#9804,.F.); +#9804 = EDGE_CURVE('',#9805,#9637,#9807,.T.); +#9805 = VERTEX_POINT('',#9806); +#9806 = CARTESIAN_POINT('',(1.109999999997,-8.5,-1.43)); +#9807 = LINE('',#9808,#9809); +#9808 = CARTESIAN_POINT('',(1.071979078313,-8.369303081708, + -1.468020921685)); +#9809 = VECTOR('',#9810,1.); +#9810 = DIRECTION('',(-0.269031078557,0.924794332561,-0.269031078563)); +#9811 = ORIENTED_EDGE('',*,*,#9812,.F.); +#9812 = EDGE_CURVE('',#9796,#9805,#9813,.T.); +#9813 = LINE('',#9814,#9815); +#9814 = CARTESIAN_POINT('',(1.109999999997,-8.5,-0.85)); +#9815 = VECTOR('',#9816,1.); +#9816 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9817 = PLANE('',#9818); +#9818 = AXIS2_PLACEMENT_3D('',#9819,#9820,#9821); +#9819 = CARTESIAN_POINT('',(1.109999999997,-8.5,-0.27)); +#9820 = DIRECTION('',(0.960195296605,0.279329540824,-3.420687305034E-17) + ); +#9821 = DIRECTION('',(0.279329540824,-0.960195296605,1.175861261133E-16) + ); +#9822 = ADVANCED_FACE('',(#9823),#9829,.F.); +#9823 = FACE_BOUND('',#9824,.T.); +#9824 = EDGE_LOOP('',(#9825,#9826,#9827,#9828)); +#9825 = ORIENTED_EDGE('',*,*,#9628,.T.); +#9826 = ORIENTED_EDGE('',*,*,#9558,.F.); +#9827 = ORIENTED_EDGE('',*,*,#9604,.F.); +#9828 = ORIENTED_EDGE('',*,*,#9767,.T.); +#9829 = PLANE('',#9830); +#9830 = AXIS2_PLACEMENT_3D('',#9831,#9832,#9833); +#9831 = CARTESIAN_POINT('',(2.047543330904,-7.95,-0.27)); +#9832 = DIRECTION('',(0.,1.,-1.224606353822E-16)); +#9833 = DIRECTION('',(1.,0.,0.)); +#9834 = ADVANCED_FACE('',(#9835),#9846,.T.); +#9835 = FACE_BOUND('',#9836,.T.); +#9836 = EDGE_LOOP('',(#9837,#9838,#9839,#9840)); +#9837 = ORIENTED_EDGE('',*,*,#9804,.T.); +#9838 = ORIENTED_EDGE('',*,*,#9636,.T.); +#9839 = ORIENTED_EDGE('',*,*,#9759,.T.); +#9840 = ORIENTED_EDGE('',*,*,#9841,.F.); +#9841 = EDGE_CURVE('',#9805,#9760,#9842,.T.); +#9842 = LINE('',#9843,#9844); +#9843 = CARTESIAN_POINT('',(0.95,-8.5,-1.43)); +#9844 = VECTOR('',#9845,1.); +#9845 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9846 = PLANE('',#9847); +#9847 = AXIS2_PLACEMENT_3D('',#9848,#9849,#9850); +#9848 = CARTESIAN_POINT('',(0.95,-7.95,-1.59)); +#9849 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,-0.960195296604 + )); +#9850 = DIRECTION('',(5.879306305656E-17,0.960195296604,-0.27932954083) + ); +#9851 = ADVANCED_FACE('',(#9852),#9863,.T.); +#9852 = FACE_BOUND('',#9853,.T.); +#9853 = EDGE_LOOP('',(#9854,#9855,#9856,#9857)); +#9854 = ORIENTED_EDGE('',*,*,#9812,.T.); +#9855 = ORIENTED_EDGE('',*,*,#9841,.T.); +#9856 = ORIENTED_EDGE('',*,*,#9781,.T.); +#9857 = ORIENTED_EDGE('',*,*,#9858,.F.); +#9858 = EDGE_CURVE('',#9796,#9774,#9859,.T.); +#9859 = LINE('',#9860,#9861); +#9860 = CARTESIAN_POINT('',(0.95,-8.5,-1.11)); +#9861 = VECTOR('',#9862,1.); +#9862 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9863 = PLANE('',#9864); +#9864 = AXIS2_PLACEMENT_3D('',#9865,#9866,#9867); +#9865 = CARTESIAN_POINT('',(0.95,-8.5,-1.43)); +#9866 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#9867 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#9868 = ADVANCED_FACE('',(#9869),#9901,.F.); +#9869 = FACE_BOUND('',#9870,.T.); +#9870 = EDGE_LOOP('',(#9871,#9881,#9887,#9895)); +#9871 = ORIENTED_EDGE('',*,*,#9872,.F.); +#9872 = EDGE_CURVE('',#9873,#9875,#9877,.T.); +#9873 = VERTEX_POINT('',#9874); +#9874 = CARTESIAN_POINT('',(1.58972288734,2.45,-0.95)); +#9875 = VERTEX_POINT('',#9876); +#9876 = CARTESIAN_POINT('',(1.430000000003,3.,-1.11)); +#9877 = LINE('',#9878,#9879); +#9878 = CARTESIAN_POINT('',(1.518947877482,2.693711192998, + -1.020897801599)); +#9879 = VECTOR('',#9880,1.); +#9880 = DIRECTION('',(-0.268598772191,0.92491018143,-0.269064780052)); +#9881 = ORIENTED_EDGE('',*,*,#9882,.F.); +#9882 = EDGE_CURVE('',#9677,#9873,#9883,.T.); +#9883 = LINE('',#9884,#9885); +#9884 = CARTESIAN_POINT('',(1.58972288734,2.45,-2.27)); +#9885 = VECTOR('',#9886,1.); +#9886 = DIRECTION('',(0.,0.,1.)); +#9887 = ORIENTED_EDGE('',*,*,#9888,.F.); +#9888 = EDGE_CURVE('',#9889,#9677,#9891,.T.); +#9889 = VERTEX_POINT('',#9890); +#9890 = CARTESIAN_POINT('',(1.430000000003,3.,-1.43)); +#9891 = LINE('',#9892,#9893); +#9892 = CARTESIAN_POINT('',(1.517118531221,2.700010480847, + -1.517269678299)); +#9893 = VECTOR('',#9894,1.); +#9894 = DIRECTION('',(0.268598772191,-0.92491018143,-0.269064780052)); +#9895 = ORIENTED_EDGE('',*,*,#9896,.F.); +#9896 = EDGE_CURVE('',#9875,#9889,#9897,.T.); +#9897 = LINE('',#9898,#9899); +#9898 = CARTESIAN_POINT('',(1.430000000003,3.,-1.69)); +#9899 = VECTOR('',#9900,1.); +#9900 = DIRECTION('',(3.556321139691E-17,-1.224606353822E-16,-1.)); +#9901 = PLANE('',#9902); +#9902 = AXIS2_PLACEMENT_3D('',#9903,#9904,#9905); +#9903 = CARTESIAN_POINT('',(1.58972288734,2.45,-2.27)); +#9904 = DIRECTION('',(-0.960324967172,-0.278883411887,0.)); +#9905 = DIRECTION('',(0.278883411887,-0.960324967172,0.)); +#9906 = ADVANCED_FACE('',(#9907),#9932,.F.); +#9907 = FACE_BOUND('',#9908,.T.); +#9908 = EDGE_LOOP('',(#9909,#9917,#9925,#9931)); +#9909 = ORIENTED_EDGE('',*,*,#9910,.F.); +#9910 = EDGE_CURVE('',#9911,#9737,#9913,.T.); +#9911 = VERTEX_POINT('',#9912); +#9912 = CARTESIAN_POINT('',(1.109999999997,3.,-1.11)); +#9913 = LINE('',#9914,#9915); +#9914 = CARTESIAN_POINT('',(1.071979078313,2.869303081708, + -1.071979078315)); +#9915 = VECTOR('',#9916,1.); +#9916 = DIRECTION('',(-0.269031078557,-0.924794332561,0.269031078563)); +#9917 = ORIENTED_EDGE('',*,*,#9918,.F.); +#9918 = EDGE_CURVE('',#9919,#9911,#9921,.T.); +#9919 = VERTEX_POINT('',#9920); +#9920 = CARTESIAN_POINT('',(1.109999999997,3.,-1.43)); +#9921 = LINE('',#9922,#9923); +#9922 = CARTESIAN_POINT('',(1.109999999997,3.,-1.69)); +#9923 = VECTOR('',#9924,1.); +#9924 = DIRECTION('',(0.,1.224606353822E-16,1.)); +#9925 = ORIENTED_EDGE('',*,*,#9926,.F.); +#9926 = EDGE_CURVE('',#9669,#9919,#9927,.T.); +#9927 = LINE('',#9928,#9929); +#9928 = CARTESIAN_POINT('',(1.073811139381,2.875600791632, + -1.466188860616)); +#9929 = VECTOR('',#9930,1.); +#9930 = DIRECTION('',(0.269031078557,0.924794332561,0.269031078563)); +#9931 = ORIENTED_EDGE('',*,*,#9744,.F.); +#9932 = PLANE('',#9933); +#9933 = AXIS2_PLACEMENT_3D('',#9934,#9935,#9936); +#9934 = CARTESIAN_POINT('',(1.109999999997,3.,-2.27)); +#9935 = DIRECTION('',(0.960195296605,-0.279329540824,0.)); +#9936 = DIRECTION('',(0.279329540824,0.960195296605,0.)); +#9937 = ADVANCED_FACE('',(#9938),#9956,.F.); +#9938 = FACE_BOUND('',#9939,.T.); +#9939 = EDGE_LOOP('',(#9940,#9948,#9954,#9955)); +#9940 = ORIENTED_EDGE('',*,*,#9941,.T.); +#9941 = EDGE_CURVE('',#9873,#9942,#9944,.T.); +#9942 = VERTEX_POINT('',#9943); +#9943 = CARTESIAN_POINT('',(1.59,2.45,-0.95)); +#9944 = LINE('',#9945,#9946); +#9945 = CARTESIAN_POINT('',(0.95,2.45,-0.95)); +#9946 = VECTOR('',#9947,1.); +#9947 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9948 = ORIENTED_EDGE('',*,*,#9949,.F.); +#9949 = EDGE_CURVE('',#9685,#9942,#9950,.T.); +#9950 = LINE('',#9951,#9952); +#9951 = CARTESIAN_POINT('',(1.59,2.45,-1.77)); +#9952 = VECTOR('',#9953,1.); +#9953 = DIRECTION('',(-3.749151804555E-33,0.,1.)); +#9954 = ORIENTED_EDGE('',*,*,#9684,.F.); +#9955 = ORIENTED_EDGE('',*,*,#9882,.T.); +#9956 = PLANE('',#9957); +#9957 = AXIS2_PLACEMENT_3D('',#9958,#9959,#9960); +#9958 = CARTESIAN_POINT('',(2.047543330904,2.45,-2.27)); +#9959 = DIRECTION('',(0.,-1.,0.)); +#9960 = DIRECTION('',(1.,0.,0.)); +#9961 = ADVANCED_FACE('',(#9962),#9973,.T.); +#9962 = FACE_BOUND('',#9963,.T.); +#9963 = EDGE_LOOP('',(#9964,#9965,#9971,#9972)); +#9964 = ORIENTED_EDGE('',*,*,#9926,.T.); +#9965 = ORIENTED_EDGE('',*,*,#9966,.T.); +#9966 = EDGE_CURVE('',#9919,#9889,#9967,.T.); +#9967 = LINE('',#9968,#9969); +#9968 = CARTESIAN_POINT('',(0.95,3.,-1.43)); +#9969 = VECTOR('',#9970,1.); +#9970 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9971 = ORIENTED_EDGE('',*,*,#9888,.T.); +#9972 = ORIENTED_EDGE('',*,*,#9676,.F.); +#9973 = PLANE('',#9974); +#9974 = AXIS2_PLACEMENT_3D('',#9975,#9976,#9977); +#9975 = CARTESIAN_POINT('',(0.95,3.,-1.43)); +#9976 = DIRECTION('',(1.710343652554E-17,0.27932954083,-0.960195296604) + ); +#9977 = DIRECTION('',(5.879306305656E-17,0.960195296604,0.27932954083)); +#9978 = ADVANCED_FACE('',(#9979),#9995,.T.); +#9979 = FACE_BOUND('',#9980,.T.); +#9980 = EDGE_LOOP('',(#9981,#9982,#9988,#9989)); +#9981 = ORIENTED_EDGE('',*,*,#9910,.T.); +#9982 = ORIENTED_EDGE('',*,*,#9983,.T.); +#9983 = EDGE_CURVE('',#9737,#9873,#9984,.T.); +#9984 = LINE('',#9985,#9986); +#9985 = CARTESIAN_POINT('',(0.95,2.45,-0.95)); +#9986 = VECTOR('',#9987,1.); +#9987 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9988 = ORIENTED_EDGE('',*,*,#9872,.T.); +#9989 = ORIENTED_EDGE('',*,*,#9990,.F.); +#9990 = EDGE_CURVE('',#9911,#9875,#9991,.T.); +#9991 = LINE('',#9992,#9993); +#9992 = CARTESIAN_POINT('',(0.95,3.,-1.11)); +#9993 = VECTOR('',#9994,1.); +#9994 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#9995 = PLANE('',#9996); +#9996 = AXIS2_PLACEMENT_3D('',#9997,#9998,#9999); +#9997 = CARTESIAN_POINT('',(0.95,2.45,-0.95)); +#9998 = DIRECTION('',(1.710343652554E-17,0.27932954083,0.960195296604)); +#9999 = DIRECTION('',(-5.879306305656E-17,-0.960195296604,0.27932954083) + ); +#10000 = ADVANCED_FACE('',(#10001),#10007,.T.); +#10001 = FACE_BOUND('',#10002,.T.); +#10002 = EDGE_LOOP('',(#10003,#10004,#10005,#10006)); +#10003 = ORIENTED_EDGE('',*,*,#9918,.T.); +#10004 = ORIENTED_EDGE('',*,*,#9990,.T.); +#10005 = ORIENTED_EDGE('',*,*,#9896,.T.); +#10006 = ORIENTED_EDGE('',*,*,#9966,.F.); +#10007 = PLANE('',#10008); +#10008 = AXIS2_PLACEMENT_3D('',#10009,#10010,#10011); +#10009 = CARTESIAN_POINT('',(0.95,3.,-1.11)); +#10010 = DIRECTION('',(6.123031769112E-17,1.,-1.224606353822E-16)); +#10011 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#10012 = ADVANCED_FACE('',(#10013),#10019,.T.); +#10013 = FACE_BOUND('',#10014,.T.); +#10014 = EDGE_LOOP('',(#10015,#10016,#10017,#10018)); +#10015 = ORIENTED_EDGE('',*,*,#9795,.T.); +#10016 = ORIENTED_EDGE('',*,*,#9858,.T.); +#10017 = ORIENTED_EDGE('',*,*,#9773,.T.); +#10018 = ORIENTED_EDGE('',*,*,#9596,.F.); +#10019 = PLANE('',#10020); +#10020 = AXIS2_PLACEMENT_3D('',#10021,#10022,#10023); +#10021 = CARTESIAN_POINT('',(0.95,-8.5,-1.11)); +#10022 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,0.960195296604 + )); +#10023 = DIRECTION('',(-5.879306305655E-17,-0.960195296604, + -0.27932954083)); +#10024 = ADVANCED_FACE('',(#10025),#10044,.T.); +#10025 = FACE_BOUND('',#10026,.T.); +#10026 = EDGE_LOOP('',(#10027,#10035,#10041,#10042,#10043)); +#10027 = ORIENTED_EDGE('',*,*,#10028,.F.); +#10028 = EDGE_CURVE('',#10029,#9729,#10031,.T.); +#10029 = VERTEX_POINT('',#10030); +#10030 = CARTESIAN_POINT('',(1.59,-0.7,-0.95)); +#10031 = LINE('',#10032,#10033); +#10032 = CARTESIAN_POINT('',(-0.795,-0.7,-0.95)); +#10033 = VECTOR('',#10034,1.); +#10034 = DIRECTION('',(-1.,4.402532809476E-49,7.190119168882E-33)); +#10035 = ORIENTED_EDGE('',*,*,#10036,.T.); +#10036 = EDGE_CURVE('',#10029,#9942,#10037,.T.); +#10037 = LINE('',#10038,#10039); +#10038 = CARTESIAN_POINT('',(1.59,2.45,-0.95)); +#10039 = VECTOR('',#10040,1.); +#10040 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#10041 = ORIENTED_EDGE('',*,*,#9941,.F.); +#10042 = ORIENTED_EDGE('',*,*,#9983,.F.); +#10043 = ORIENTED_EDGE('',*,*,#9736,.T.); +#10044 = PLANE('',#10045); +#10045 = AXIS2_PLACEMENT_3D('',#10046,#10047,#10048); +#10046 = CARTESIAN_POINT('',(0.95,-7.95,-0.95)); +#10047 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#10048 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#10049 = ADVANCED_FACE('',(#10050),#10061,.T.); +#10050 = FACE_BOUND('',#10051,.T.); +#10051 = EDGE_LOOP('',(#10052,#10058,#10059,#10060)); +#10052 = ORIENTED_EDGE('',*,*,#10053,.F.); +#10053 = EDGE_CURVE('',#9661,#10029,#10054,.T.); +#10054 = LINE('',#10055,#10056); +#10055 = CARTESIAN_POINT('',(1.59,-0.7,-0.635)); +#10056 = VECTOR('',#10057,1.); +#10057 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#10058 = ORIENTED_EDGE('',*,*,#9692,.F.); +#10059 = ORIENTED_EDGE('',*,*,#9949,.T.); +#10060 = ORIENTED_EDGE('',*,*,#10036,.F.); +#10061 = PLANE('',#10062); +#10062 = AXIS2_PLACEMENT_3D('',#10063,#10064,#10065); +#10063 = CARTESIAN_POINT('',(1.59,-2.75,-1.27)); +#10064 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10065 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10066 = ADVANCED_FACE('',(#10067),#10101,.T.); +#10067 = FACE_BOUND('',#10068,.T.); +#10068 = EDGE_LOOP('',(#10069,#10079,#10087,#10095)); +#10069 = ORIENTED_EDGE('',*,*,#10070,.F.); +#10070 = EDGE_CURVE('',#10071,#10073,#10075,.T.); +#10071 = VERTEX_POINT('',#10072); +#10072 = CARTESIAN_POINT('',(-0.95,-2.5,-0.95)); +#10073 = VERTEX_POINT('',#10074); +#10074 = CARTESIAN_POINT('',(-0.95,-2.5,-1.59)); +#10075 = LINE('',#10076,#10077); +#10076 = CARTESIAN_POINT('',(-0.95,-2.5,-0.635)); +#10077 = VECTOR('',#10078,1.); +#10078 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10079 = ORIENTED_EDGE('',*,*,#10080,.F.); +#10080 = EDGE_CURVE('',#10081,#10071,#10083,.T.); +#10081 = VERTEX_POINT('',#10082); +#10082 = CARTESIAN_POINT('',(-0.95,-7.95,-0.95)); +#10083 = LINE('',#10084,#10085); +#10084 = CARTESIAN_POINT('',(-0.95,2.45,-0.95)); +#10085 = VECTOR('',#10086,1.); +#10086 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#10087 = ORIENTED_EDGE('',*,*,#10088,.T.); +#10088 = EDGE_CURVE('',#10081,#10089,#10091,.T.); +#10089 = VERTEX_POINT('',#10090); +#10090 = CARTESIAN_POINT('',(-0.95,-7.95,-1.59)); +#10091 = LINE('',#10092,#10093); +#10092 = CARTESIAN_POINT('',(-0.95,-7.95,-0.77)); +#10093 = VECTOR('',#10094,1.); +#10094 = DIRECTION('',(-3.749151804555E-33,-1.224606353822E-16,-1.)); +#10095 = ORIENTED_EDGE('',*,*,#10096,.F.); +#10096 = EDGE_CURVE('',#10073,#10089,#10097,.T.); +#10097 = LINE('',#10098,#10099); +#10098 = CARTESIAN_POINT('',(-0.95,-7.95,-1.59)); +#10099 = VECTOR('',#10100,1.); +#10100 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#10101 = PLANE('',#10102); +#10102 = AXIS2_PLACEMENT_3D('',#10103,#10104,#10105); +#10103 = CARTESIAN_POINT('',(-0.95,-2.75,-1.27)); +#10104 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10105 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10106 = ADVANCED_FACE('',(#10107),#10140,.T.); +#10107 = FACE_BOUND('',#10108,.T.); +#10108 = EDGE_LOOP('',(#10109,#10117,#10125,#10133,#10139)); +#10109 = ORIENTED_EDGE('',*,*,#10110,.F.); +#10110 = EDGE_CURVE('',#10111,#10071,#10113,.T.); +#10111 = VERTEX_POINT('',#10112); +#10112 = CARTESIAN_POINT('',(-1.59,-2.5,-0.95)); +#10113 = LINE('',#10114,#10115); +#10114 = CARTESIAN_POINT('',(-2.7,-2.5,-0.95)); +#10115 = VECTOR('',#10116,1.); +#10116 = DIRECTION('',(1.,-4.402532809476E-49,-7.190119168882E-33)); +#10117 = ORIENTED_EDGE('',*,*,#10118,.T.); +#10118 = EDGE_CURVE('',#10111,#10119,#10121,.T.); +#10119 = VERTEX_POINT('',#10120); +#10120 = CARTESIAN_POINT('',(-1.59,-7.95,-0.95)); +#10121 = LINE('',#10122,#10123); +#10122 = CARTESIAN_POINT('',(-1.59,2.45,-0.95)); +#10123 = VECTOR('',#10124,1.); +#10124 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#10125 = ORIENTED_EDGE('',*,*,#10126,.T.); +#10126 = EDGE_CURVE('',#10119,#10127,#10129,.T.); +#10127 = VERTEX_POINT('',#10128); +#10128 = CARTESIAN_POINT('',(-0.95027711266,-7.95,-0.95)); +#10129 = LINE('',#10130,#10131); +#10130 = CARTESIAN_POINT('',(-1.59,-7.95,-0.95)); +#10131 = VECTOR('',#10132,1.); +#10132 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10133 = ORIENTED_EDGE('',*,*,#10134,.T.); +#10134 = EDGE_CURVE('',#10127,#10081,#10135,.T.); +#10135 = LINE('',#10136,#10137); +#10136 = CARTESIAN_POINT('',(-1.59,-7.95,-0.95)); +#10137 = VECTOR('',#10138,1.); +#10138 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10139 = ORIENTED_EDGE('',*,*,#10080,.T.); +#10140 = PLANE('',#10141); +#10141 = AXIS2_PLACEMENT_3D('',#10142,#10143,#10144); +#10142 = CARTESIAN_POINT('',(-1.59,-7.95,-0.95)); +#10143 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#10144 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#10145 = ADVANCED_FACE('',(#10146),#10179,.T.); +#10146 = FACE_BOUND('',#10147,.T.); +#10147 = EDGE_LOOP('',(#10148,#10156,#10157,#10165,#10173)); +#10148 = ORIENTED_EDGE('',*,*,#10149,.F.); +#10149 = EDGE_CURVE('',#10073,#10150,#10152,.T.); +#10150 = VERTEX_POINT('',#10151); +#10151 = CARTESIAN_POINT('',(-1.59,-2.5,-1.59)); +#10152 = LINE('',#10153,#10154); +#10153 = CARTESIAN_POINT('',(-2.7,-2.5,-1.59)); +#10154 = VECTOR('',#10155,1.); +#10155 = DIRECTION('',(-1.,0.,0.)); +#10156 = ORIENTED_EDGE('',*,*,#10096,.T.); +#10157 = ORIENTED_EDGE('',*,*,#10158,.F.); +#10158 = EDGE_CURVE('',#10159,#10089,#10161,.T.); +#10159 = VERTEX_POINT('',#10160); +#10160 = CARTESIAN_POINT('',(-0.95027711266,-7.95,-1.59)); +#10161 = LINE('',#10162,#10163); +#10162 = CARTESIAN_POINT('',(-1.59,-7.95,-1.59)); +#10163 = VECTOR('',#10164,1.); +#10164 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10165 = ORIENTED_EDGE('',*,*,#10166,.F.); +#10166 = EDGE_CURVE('',#10167,#10159,#10169,.T.); +#10167 = VERTEX_POINT('',#10168); +#10168 = CARTESIAN_POINT('',(-1.59,-7.95,-1.59)); +#10169 = LINE('',#10170,#10171); +#10170 = CARTESIAN_POINT('',(-1.59,-7.95,-1.59)); +#10171 = VECTOR('',#10172,1.); +#10172 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10173 = ORIENTED_EDGE('',*,*,#10174,.T.); +#10174 = EDGE_CURVE('',#10167,#10150,#10175,.T.); +#10175 = LINE('',#10176,#10177); +#10176 = CARTESIAN_POINT('',(-1.59,-7.95,-1.59)); +#10177 = VECTOR('',#10178,1.); +#10178 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10179 = PLANE('',#10180); +#10180 = AXIS2_PLACEMENT_3D('',#10181,#10182,#10183); +#10181 = CARTESIAN_POINT('',(-1.59,2.45,-1.59)); +#10182 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10183 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10184 = ADVANCED_FACE('',(#10185),#10227,.T.); +#10185 = FACE_BOUND('',#10186,.T.); +#10186 = EDGE_LOOP('',(#10187,#10197,#10205,#10213,#10221)); +#10187 = ORIENTED_EDGE('',*,*,#10188,.F.); +#10188 = EDGE_CURVE('',#10189,#10191,#10193,.T.); +#10189 = VERTEX_POINT('',#10190); +#10190 = CARTESIAN_POINT('',(-1.59,-0.7,-1.59)); +#10191 = VERTEX_POINT('',#10192); +#10192 = CARTESIAN_POINT('',(-0.95,-0.7,-1.59)); +#10193 = LINE('',#10194,#10195); +#10194 = CARTESIAN_POINT('',(-2.065,-0.7,-1.59)); +#10195 = VECTOR('',#10196,1.); +#10196 = DIRECTION('',(1.,0.,0.)); +#10197 = ORIENTED_EDGE('',*,*,#10198,.T.); +#10198 = EDGE_CURVE('',#10189,#10199,#10201,.T.); +#10199 = VERTEX_POINT('',#10200); +#10200 = CARTESIAN_POINT('',(-1.59,2.45,-1.59)); +#10201 = LINE('',#10202,#10203); +#10202 = CARTESIAN_POINT('',(-1.59,-7.95,-1.59)); +#10203 = VECTOR('',#10204,1.); +#10204 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10205 = ORIENTED_EDGE('',*,*,#10206,.T.); +#10206 = EDGE_CURVE('',#10199,#10207,#10209,.T.); +#10207 = VERTEX_POINT('',#10208); +#10208 = CARTESIAN_POINT('',(-0.95027711266,2.45,-1.59)); +#10209 = LINE('',#10210,#10211); +#10210 = CARTESIAN_POINT('',(-1.59,2.45,-1.59)); +#10211 = VECTOR('',#10212,1.); +#10212 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10213 = ORIENTED_EDGE('',*,*,#10214,.T.); +#10214 = EDGE_CURVE('',#10207,#10215,#10217,.T.); +#10215 = VERTEX_POINT('',#10216); +#10216 = CARTESIAN_POINT('',(-0.95,2.45,-1.59)); +#10217 = LINE('',#10218,#10219); +#10218 = CARTESIAN_POINT('',(-1.59,2.45,-1.59)); +#10219 = VECTOR('',#10220,1.); +#10220 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10221 = ORIENTED_EDGE('',*,*,#10222,.T.); +#10222 = EDGE_CURVE('',#10215,#10191,#10223,.T.); +#10223 = LINE('',#10224,#10225); +#10224 = CARTESIAN_POINT('',(-0.95,-7.95,-1.59)); +#10225 = VECTOR('',#10226,1.); +#10226 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#10227 = PLANE('',#10228); +#10228 = AXIS2_PLACEMENT_3D('',#10229,#10230,#10231); +#10229 = CARTESIAN_POINT('',(-1.59,2.45,-1.59)); +#10230 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10231 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10232 = ADVANCED_FACE('',(#10233),#10249,.F.); +#10233 = FACE_BOUND('',#10234,.T.); +#10234 = EDGE_LOOP('',(#10235,#10241,#10242,#10248)); +#10235 = ORIENTED_EDGE('',*,*,#10236,.F.); +#10236 = EDGE_CURVE('',#10150,#10111,#10237,.T.); +#10237 = LINE('',#10238,#10239); +#10238 = CARTESIAN_POINT('',(-1.59,-2.5,-0.635)); +#10239 = VECTOR('',#10240,1.); +#10240 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#10241 = ORIENTED_EDGE('',*,*,#10174,.F.); +#10242 = ORIENTED_EDGE('',*,*,#10243,.T.); +#10243 = EDGE_CURVE('',#10167,#10119,#10244,.T.); +#10244 = LINE('',#10245,#10246); +#10245 = CARTESIAN_POINT('',(-1.59,-7.949999999999,-0.77)); +#10246 = VECTOR('',#10247,1.); +#10247 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#10248 = ORIENTED_EDGE('',*,*,#10118,.F.); +#10249 = PLANE('',#10250); +#10250 = AXIS2_PLACEMENT_3D('',#10251,#10252,#10253); +#10251 = CARTESIAN_POINT('',(-1.59,-2.75,-1.27)); +#10252 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10253 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10254 = ADVANCED_FACE('',(#10255),#10280,.F.); +#10255 = FACE_BOUND('',#10256,.T.); +#10256 = EDGE_LOOP('',(#10257,#10265,#10273,#10279)); +#10257 = ORIENTED_EDGE('',*,*,#10258,.F.); +#10258 = EDGE_CURVE('',#10259,#10189,#10261,.T.); +#10259 = VERTEX_POINT('',#10260); +#10260 = CARTESIAN_POINT('',(-1.59,-0.7,-0.95)); +#10261 = LINE('',#10262,#10263); +#10262 = CARTESIAN_POINT('',(-1.59,-0.7,-0.635)); +#10263 = VECTOR('',#10264,1.); +#10264 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10265 = ORIENTED_EDGE('',*,*,#10266,.F.); +#10266 = EDGE_CURVE('',#10267,#10259,#10269,.T.); +#10267 = VERTEX_POINT('',#10268); +#10268 = CARTESIAN_POINT('',(-1.59,2.45,-0.95)); +#10269 = LINE('',#10270,#10271); +#10270 = CARTESIAN_POINT('',(-1.59,2.45,-0.95)); +#10271 = VECTOR('',#10272,1.); +#10272 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#10273 = ORIENTED_EDGE('',*,*,#10274,.T.); +#10274 = EDGE_CURVE('',#10267,#10199,#10275,.T.); +#10275 = LINE('',#10276,#10277); +#10276 = CARTESIAN_POINT('',(-1.59,2.449999999999,-1.77)); +#10277 = VECTOR('',#10278,1.); +#10278 = DIRECTION('',(3.749151804555E-33,1.232595164408E-32,-1.)); +#10279 = ORIENTED_EDGE('',*,*,#10198,.F.); +#10280 = PLANE('',#10281); +#10281 = AXIS2_PLACEMENT_3D('',#10282,#10283,#10284); +#10282 = CARTESIAN_POINT('',(-1.59,-2.75,-1.27)); +#10283 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10284 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10285 = ADVANCED_FACE('',(#10286),#10316,.F.); +#10286 = FACE_BOUND('',#10287,.T.); +#10287 = EDGE_LOOP('',(#10288,#10296,#10302,#10310)); +#10288 = ORIENTED_EDGE('',*,*,#10289,.F.); +#10289 = EDGE_CURVE('',#10159,#10290,#10292,.T.); +#10290 = VERTEX_POINT('',#10291); +#10291 = CARTESIAN_POINT('',(-1.109999999997,-8.5,-1.43)); +#10292 = LINE('',#10293,#10294); +#10293 = CARTESIAN_POINT('',(-1.021052122518,-8.193711192998, + -1.519102198401)); +#10294 = VECTOR('',#10295,1.); +#10295 = DIRECTION('',(-0.268598772191,-0.92491018143,0.269064780052)); +#10296 = ORIENTED_EDGE('',*,*,#10297,.F.); +#10297 = EDGE_CURVE('',#10127,#10159,#10298,.T.); +#10298 = LINE('',#10299,#10300); +#10299 = CARTESIAN_POINT('',(-0.95027711266,-7.95,-0.27)); +#10300 = VECTOR('',#10301,1.); +#10301 = DIRECTION('',(0.,-1.224606353822E-16,-1.)); +#10302 = ORIENTED_EDGE('',*,*,#10303,.F.); +#10303 = EDGE_CURVE('',#10304,#10127,#10306,.T.); +#10304 = VERTEX_POINT('',#10305); +#10305 = CARTESIAN_POINT('',(-1.109999999997,-8.5,-1.11)); +#10306 = LINE('',#10307,#10308); +#10307 = CARTESIAN_POINT('',(-1.022881468779,-8.200010480847, + -1.022730321701)); +#10308 = VECTOR('',#10309,1.); +#10309 = DIRECTION('',(0.268598772191,0.92491018143,0.269064780052)); +#10310 = ORIENTED_EDGE('',*,*,#10311,.F.); +#10311 = EDGE_CURVE('',#10290,#10304,#10312,.T.); +#10312 = LINE('',#10313,#10314); +#10313 = CARTESIAN_POINT('',(-1.109999999997,-8.5,-0.85)); +#10314 = VECTOR('',#10315,1.); +#10315 = DIRECTION('',(-1.778160569846E-17,6.123031769112E-17,1.)); +#10316 = PLANE('',#10317); +#10317 = AXIS2_PLACEMENT_3D('',#10318,#10319,#10320); +#10318 = CARTESIAN_POINT('',(-0.95027711266,-7.95,-0.27)); +#10319 = DIRECTION('',(-0.960324967172,0.278883411887, + -3.415223981728E-17)); +#10320 = DIRECTION('',(0.278883411887,0.960324967172,-1.176020056533E-16 + )); +#10321 = ADVANCED_FACE('',(#10322),#10347,.F.); +#10322 = FACE_BOUND('',#10323,.T.); +#10323 = EDGE_LOOP('',(#10324,#10332,#10333,#10341)); +#10324 = ORIENTED_EDGE('',*,*,#10325,.F.); +#10325 = EDGE_CURVE('',#10119,#10326,#10328,.T.); +#10326 = VERTEX_POINT('',#10327); +#10327 = CARTESIAN_POINT('',(-1.430000000003,-8.5,-1.11)); +#10328 = LINE('',#10329,#10330); +#10329 = CARTESIAN_POINT('',(-1.466188860619,-8.375600791632, + -1.073811139384)); +#10330 = VECTOR('',#10331,1.); +#10331 = DIRECTION('',(0.269031078557,-0.924794332561,-0.269031078563)); +#10332 = ORIENTED_EDGE('',*,*,#10243,.F.); +#10333 = ORIENTED_EDGE('',*,*,#10334,.F.); +#10334 = EDGE_CURVE('',#10335,#10167,#10337,.T.); +#10335 = VERTEX_POINT('',#10336); +#10336 = CARTESIAN_POINT('',(-1.430000000003,-8.5,-1.43)); +#10337 = LINE('',#10338,#10339); +#10338 = CARTESIAN_POINT('',(-1.468020921687,-8.369303081708, + -1.468020921685)); +#10339 = VECTOR('',#10340,1.); +#10340 = DIRECTION('',(-0.269031078557,0.924794332561,-0.269031078563)); +#10341 = ORIENTED_EDGE('',*,*,#10342,.F.); +#10342 = EDGE_CURVE('',#10326,#10335,#10343,.T.); +#10343 = LINE('',#10344,#10345); +#10344 = CARTESIAN_POINT('',(-1.430000000003,-8.5,-0.85)); +#10345 = VECTOR('',#10346,1.); +#10346 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10347 = PLANE('',#10348); +#10348 = AXIS2_PLACEMENT_3D('',#10349,#10350,#10351); +#10349 = CARTESIAN_POINT('',(-1.430000000003,-8.5,-0.27)); +#10350 = DIRECTION('',(0.960195296605,0.279329540824,-3.420687305034E-17 + )); +#10351 = DIRECTION('',(0.279329540824,-0.960195296605,1.175861261133E-16 + )); +#10352 = ADVANCED_FACE('',(#10353),#10359,.F.); +#10353 = FACE_BOUND('',#10354,.T.); +#10354 = EDGE_LOOP('',(#10355,#10356,#10357,#10358)); +#10355 = ORIENTED_EDGE('',*,*,#10158,.T.); +#10356 = ORIENTED_EDGE('',*,*,#10088,.F.); +#10357 = ORIENTED_EDGE('',*,*,#10134,.F.); +#10358 = ORIENTED_EDGE('',*,*,#10297,.T.); +#10359 = PLANE('',#10360); +#10360 = AXIS2_PLACEMENT_3D('',#10361,#10362,#10363); +#10361 = CARTESIAN_POINT('',(-0.492456669096,-7.95,-0.27)); +#10362 = DIRECTION('',(0.,1.,-1.224606353822E-16)); +#10363 = DIRECTION('',(1.,0.,0.)); +#10364 = ADVANCED_FACE('',(#10365),#10376,.T.); +#10365 = FACE_BOUND('',#10366,.T.); +#10366 = EDGE_LOOP('',(#10367,#10368,#10369,#10370)); +#10367 = ORIENTED_EDGE('',*,*,#10334,.T.); +#10368 = ORIENTED_EDGE('',*,*,#10166,.T.); +#10369 = ORIENTED_EDGE('',*,*,#10289,.T.); +#10370 = ORIENTED_EDGE('',*,*,#10371,.F.); +#10371 = EDGE_CURVE('',#10335,#10290,#10372,.T.); +#10372 = LINE('',#10373,#10374); +#10373 = CARTESIAN_POINT('',(-1.59,-8.5,-1.43)); +#10374 = VECTOR('',#10375,1.); +#10375 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10376 = PLANE('',#10377); +#10377 = AXIS2_PLACEMENT_3D('',#10378,#10379,#10380); +#10378 = CARTESIAN_POINT('',(-1.59,-7.95,-1.59)); +#10379 = DIRECTION('',(-1.710343652554E-17,-0.27932954083, + -0.960195296604)); +#10380 = DIRECTION('',(5.879306305656E-17,0.960195296604,-0.27932954083) + ); +#10381 = ADVANCED_FACE('',(#10382),#10393,.T.); +#10382 = FACE_BOUND('',#10383,.T.); +#10383 = EDGE_LOOP('',(#10384,#10385,#10386,#10387)); +#10384 = ORIENTED_EDGE('',*,*,#10342,.T.); +#10385 = ORIENTED_EDGE('',*,*,#10371,.T.); +#10386 = ORIENTED_EDGE('',*,*,#10311,.T.); +#10387 = ORIENTED_EDGE('',*,*,#10388,.F.); +#10388 = EDGE_CURVE('',#10326,#10304,#10389,.T.); +#10389 = LINE('',#10390,#10391); +#10390 = CARTESIAN_POINT('',(-1.59,-8.5,-1.11)); +#10391 = VECTOR('',#10392,1.); +#10392 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10393 = PLANE('',#10394); +#10394 = AXIS2_PLACEMENT_3D('',#10395,#10396,#10397); +#10395 = CARTESIAN_POINT('',(-1.59,-8.5,-1.43)); +#10396 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#10397 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10398 = ADVANCED_FACE('',(#10399),#10431,.F.); +#10399 = FACE_BOUND('',#10400,.T.); +#10400 = EDGE_LOOP('',(#10401,#10411,#10417,#10425)); +#10401 = ORIENTED_EDGE('',*,*,#10402,.F.); +#10402 = EDGE_CURVE('',#10403,#10405,#10407,.T.); +#10403 = VERTEX_POINT('',#10404); +#10404 = CARTESIAN_POINT('',(-0.95027711266,2.45,-0.95)); +#10405 = VERTEX_POINT('',#10406); +#10406 = CARTESIAN_POINT('',(-1.109999999997,3.,-1.11)); +#10407 = LINE('',#10408,#10409); +#10408 = CARTESIAN_POINT('',(-1.021052122518,2.693711192998, + -1.020897801599)); +#10409 = VECTOR('',#10410,1.); +#10410 = DIRECTION('',(-0.268598772191,0.92491018143,-0.269064780052)); +#10411 = ORIENTED_EDGE('',*,*,#10412,.F.); +#10412 = EDGE_CURVE('',#10207,#10403,#10413,.T.); +#10413 = LINE('',#10414,#10415); +#10414 = CARTESIAN_POINT('',(-0.95027711266,2.45,-2.27)); +#10415 = VECTOR('',#10416,1.); +#10416 = DIRECTION('',(0.,0.,1.)); +#10417 = ORIENTED_EDGE('',*,*,#10418,.F.); +#10418 = EDGE_CURVE('',#10419,#10207,#10421,.T.); +#10419 = VERTEX_POINT('',#10420); +#10420 = CARTESIAN_POINT('',(-1.109999999997,3.,-1.43)); +#10421 = LINE('',#10422,#10423); +#10422 = CARTESIAN_POINT('',(-1.022881468779,2.700010480847, + -1.517269678299)); +#10423 = VECTOR('',#10424,1.); +#10424 = DIRECTION('',(0.268598772191,-0.92491018143,-0.269064780052)); +#10425 = ORIENTED_EDGE('',*,*,#10426,.F.); +#10426 = EDGE_CURVE('',#10405,#10419,#10427,.T.); +#10427 = LINE('',#10428,#10429); +#10428 = CARTESIAN_POINT('',(-1.109999999997,3.,-1.69)); +#10429 = VECTOR('',#10430,1.); +#10430 = DIRECTION('',(3.556321139691E-17,-1.224606353822E-16,-1.)); +#10431 = PLANE('',#10432); +#10432 = AXIS2_PLACEMENT_3D('',#10433,#10434,#10435); +#10433 = CARTESIAN_POINT('',(-0.95027711266,2.45,-2.27)); +#10434 = DIRECTION('',(-0.960324967172,-0.278883411887,0.)); +#10435 = DIRECTION('',(0.278883411887,-0.960324967172,0.)); +#10436 = ADVANCED_FACE('',(#10437),#10462,.F.); +#10437 = FACE_BOUND('',#10438,.T.); +#10438 = EDGE_LOOP('',(#10439,#10447,#10455,#10461)); +#10439 = ORIENTED_EDGE('',*,*,#10440,.F.); +#10440 = EDGE_CURVE('',#10441,#10267,#10443,.T.); +#10441 = VERTEX_POINT('',#10442); +#10442 = CARTESIAN_POINT('',(-1.430000000003,3.,-1.11)); +#10443 = LINE('',#10444,#10445); +#10444 = CARTESIAN_POINT('',(-1.468020921687,2.869303081708, + -1.071979078315)); +#10445 = VECTOR('',#10446,1.); +#10446 = DIRECTION('',(-0.269031078557,-0.924794332561,0.269031078563)); +#10447 = ORIENTED_EDGE('',*,*,#10448,.F.); +#10448 = EDGE_CURVE('',#10449,#10441,#10451,.T.); +#10449 = VERTEX_POINT('',#10450); +#10450 = CARTESIAN_POINT('',(-1.430000000003,3.,-1.43)); +#10451 = LINE('',#10452,#10453); +#10452 = CARTESIAN_POINT('',(-1.430000000003,3.,-1.69)); +#10453 = VECTOR('',#10454,1.); +#10454 = DIRECTION('',(0.,1.224606353822E-16,1.)); +#10455 = ORIENTED_EDGE('',*,*,#10456,.F.); +#10456 = EDGE_CURVE('',#10199,#10449,#10457,.T.); +#10457 = LINE('',#10458,#10459); +#10458 = CARTESIAN_POINT('',(-1.466188860619,2.875600791632, + -1.466188860616)); +#10459 = VECTOR('',#10460,1.); +#10460 = DIRECTION('',(0.269031078557,0.924794332561,0.269031078563)); +#10461 = ORIENTED_EDGE('',*,*,#10274,.F.); +#10462 = PLANE('',#10463); +#10463 = AXIS2_PLACEMENT_3D('',#10464,#10465,#10466); +#10464 = CARTESIAN_POINT('',(-1.430000000003,3.,-2.27)); +#10465 = DIRECTION('',(0.960195296605,-0.279329540824,0.)); +#10466 = DIRECTION('',(0.279329540824,0.960195296605,0.)); +#10467 = ADVANCED_FACE('',(#10468),#10486,.F.); +#10468 = FACE_BOUND('',#10469,.T.); +#10469 = EDGE_LOOP('',(#10470,#10478,#10484,#10485)); +#10470 = ORIENTED_EDGE('',*,*,#10471,.T.); +#10471 = EDGE_CURVE('',#10403,#10472,#10474,.T.); +#10472 = VERTEX_POINT('',#10473); +#10473 = CARTESIAN_POINT('',(-0.95,2.45,-0.95)); +#10474 = LINE('',#10475,#10476); +#10475 = CARTESIAN_POINT('',(-1.59,2.45,-0.95)); +#10476 = VECTOR('',#10477,1.); +#10477 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10478 = ORIENTED_EDGE('',*,*,#10479,.F.); +#10479 = EDGE_CURVE('',#10215,#10472,#10480,.T.); +#10480 = LINE('',#10481,#10482); +#10481 = CARTESIAN_POINT('',(-0.95,2.45,-1.77)); +#10482 = VECTOR('',#10483,1.); +#10483 = DIRECTION('',(-3.749151804555E-33,0.,1.)); +#10484 = ORIENTED_EDGE('',*,*,#10214,.F.); +#10485 = ORIENTED_EDGE('',*,*,#10412,.T.); +#10486 = PLANE('',#10487); +#10487 = AXIS2_PLACEMENT_3D('',#10488,#10489,#10490); +#10488 = CARTESIAN_POINT('',(-0.492456669096,2.45,-2.27)); +#10489 = DIRECTION('',(0.,-1.,0.)); +#10490 = DIRECTION('',(1.,0.,0.)); +#10491 = ADVANCED_FACE('',(#10492),#10503,.T.); +#10492 = FACE_BOUND('',#10493,.T.); +#10493 = EDGE_LOOP('',(#10494,#10495,#10501,#10502)); +#10494 = ORIENTED_EDGE('',*,*,#10456,.T.); +#10495 = ORIENTED_EDGE('',*,*,#10496,.T.); +#10496 = EDGE_CURVE('',#10449,#10419,#10497,.T.); +#10497 = LINE('',#10498,#10499); +#10498 = CARTESIAN_POINT('',(-1.59,3.,-1.43)); +#10499 = VECTOR('',#10500,1.); +#10500 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10501 = ORIENTED_EDGE('',*,*,#10418,.T.); +#10502 = ORIENTED_EDGE('',*,*,#10206,.F.); +#10503 = PLANE('',#10504); +#10504 = AXIS2_PLACEMENT_3D('',#10505,#10506,#10507); +#10505 = CARTESIAN_POINT('',(-1.59,3.,-1.43)); +#10506 = DIRECTION('',(1.710343652554E-17,0.27932954083,-0.960195296604) + ); +#10507 = DIRECTION('',(5.879306305656E-17,0.960195296604,0.27932954083) + ); +#10508 = ADVANCED_FACE('',(#10509),#10525,.T.); +#10509 = FACE_BOUND('',#10510,.T.); +#10510 = EDGE_LOOP('',(#10511,#10512,#10518,#10519)); +#10511 = ORIENTED_EDGE('',*,*,#10440,.T.); +#10512 = ORIENTED_EDGE('',*,*,#10513,.T.); +#10513 = EDGE_CURVE('',#10267,#10403,#10514,.T.); +#10514 = LINE('',#10515,#10516); +#10515 = CARTESIAN_POINT('',(-1.59,2.45,-0.95)); +#10516 = VECTOR('',#10517,1.); +#10517 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10518 = ORIENTED_EDGE('',*,*,#10402,.T.); +#10519 = ORIENTED_EDGE('',*,*,#10520,.F.); +#10520 = EDGE_CURVE('',#10441,#10405,#10521,.T.); +#10521 = LINE('',#10522,#10523); +#10522 = CARTESIAN_POINT('',(-1.59,3.,-1.11)); +#10523 = VECTOR('',#10524,1.); +#10524 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10525 = PLANE('',#10526); +#10526 = AXIS2_PLACEMENT_3D('',#10527,#10528,#10529); +#10527 = CARTESIAN_POINT('',(-1.59,2.45,-0.95)); +#10528 = DIRECTION('',(1.710343652554E-17,0.27932954083,0.960195296604) + ); +#10529 = DIRECTION('',(-5.879306305656E-17,-0.960195296604,0.27932954083 + )); +#10530 = ADVANCED_FACE('',(#10531),#10537,.T.); +#10531 = FACE_BOUND('',#10532,.T.); +#10532 = EDGE_LOOP('',(#10533,#10534,#10535,#10536)); +#10533 = ORIENTED_EDGE('',*,*,#10448,.T.); +#10534 = ORIENTED_EDGE('',*,*,#10520,.T.); +#10535 = ORIENTED_EDGE('',*,*,#10426,.T.); +#10536 = ORIENTED_EDGE('',*,*,#10496,.F.); +#10537 = PLANE('',#10538); +#10538 = AXIS2_PLACEMENT_3D('',#10539,#10540,#10541); +#10539 = CARTESIAN_POINT('',(-1.59,3.,-1.11)); +#10540 = DIRECTION('',(6.123031769112E-17,1.,-1.224606353822E-16)); +#10541 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#10542 = ADVANCED_FACE('',(#10543),#10549,.T.); +#10543 = FACE_BOUND('',#10544,.T.); +#10544 = EDGE_LOOP('',(#10545,#10546,#10547,#10548)); +#10545 = ORIENTED_EDGE('',*,*,#10325,.T.); +#10546 = ORIENTED_EDGE('',*,*,#10388,.T.); +#10547 = ORIENTED_EDGE('',*,*,#10303,.T.); +#10548 = ORIENTED_EDGE('',*,*,#10126,.F.); +#10549 = PLANE('',#10550); +#10550 = AXIS2_PLACEMENT_3D('',#10551,#10552,#10553); +#10551 = CARTESIAN_POINT('',(-1.59,-8.5,-1.11)); +#10552 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,0.960195296604 + )); +#10553 = DIRECTION('',(-5.879306305655E-17,-0.960195296604, + -0.27932954083)); +#10554 = ADVANCED_FACE('',(#10555),#10574,.T.); +#10555 = FACE_BOUND('',#10556,.T.); +#10556 = EDGE_LOOP('',(#10557,#10565,#10571,#10572,#10573)); +#10557 = ORIENTED_EDGE('',*,*,#10558,.F.); +#10558 = EDGE_CURVE('',#10559,#10259,#10561,.T.); +#10559 = VERTEX_POINT('',#10560); +#10560 = CARTESIAN_POINT('',(-0.95,-0.7,-0.95)); +#10561 = LINE('',#10562,#10563); +#10562 = CARTESIAN_POINT('',(-2.065,-0.7,-0.95)); +#10563 = VECTOR('',#10564,1.); +#10564 = DIRECTION('',(-1.,4.402532809476E-49,7.190119168882E-33)); +#10565 = ORIENTED_EDGE('',*,*,#10566,.T.); +#10566 = EDGE_CURVE('',#10559,#10472,#10567,.T.); +#10567 = LINE('',#10568,#10569); +#10568 = CARTESIAN_POINT('',(-0.95,2.45,-0.95)); +#10569 = VECTOR('',#10570,1.); +#10570 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#10571 = ORIENTED_EDGE('',*,*,#10471,.F.); +#10572 = ORIENTED_EDGE('',*,*,#10513,.F.); +#10573 = ORIENTED_EDGE('',*,*,#10266,.T.); +#10574 = PLANE('',#10575); +#10575 = AXIS2_PLACEMENT_3D('',#10576,#10577,#10578); +#10576 = CARTESIAN_POINT('',(-1.59,-7.95,-0.95)); +#10577 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#10578 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#10579 = ADVANCED_FACE('',(#10580),#10591,.T.); +#10580 = FACE_BOUND('',#10581,.T.); +#10581 = EDGE_LOOP('',(#10582,#10588,#10589,#10590)); +#10582 = ORIENTED_EDGE('',*,*,#10583,.F.); +#10583 = EDGE_CURVE('',#10191,#10559,#10584,.T.); +#10584 = LINE('',#10585,#10586); +#10585 = CARTESIAN_POINT('',(-0.95,-0.7,-0.635)); +#10586 = VECTOR('',#10587,1.); +#10587 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#10588 = ORIENTED_EDGE('',*,*,#10222,.F.); +#10589 = ORIENTED_EDGE('',*,*,#10479,.T.); +#10590 = ORIENTED_EDGE('',*,*,#10566,.F.); +#10591 = PLANE('',#10592); +#10592 = AXIS2_PLACEMENT_3D('',#10593,#10594,#10595); +#10593 = CARTESIAN_POINT('',(-0.95,-2.75,-1.27)); +#10594 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10595 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10596 = ADVANCED_FACE('',(#10597),#10631,.T.); +#10597 = FACE_BOUND('',#10598,.T.); +#10598 = EDGE_LOOP('',(#10599,#10609,#10617,#10625)); +#10599 = ORIENTED_EDGE('',*,*,#10600,.F.); +#10600 = EDGE_CURVE('',#10601,#10603,#10605,.T.); +#10601 = VERTEX_POINT('',#10602); +#10602 = CARTESIAN_POINT('',(-3.49,-2.5,-0.95)); +#10603 = VERTEX_POINT('',#10604); +#10604 = CARTESIAN_POINT('',(-3.49,-2.5,-1.59)); +#10605 = LINE('',#10606,#10607); +#10606 = CARTESIAN_POINT('',(-3.49,-2.5,-0.635)); +#10607 = VECTOR('',#10608,1.); +#10608 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10609 = ORIENTED_EDGE('',*,*,#10610,.F.); +#10610 = EDGE_CURVE('',#10611,#10601,#10613,.T.); +#10611 = VERTEX_POINT('',#10612); +#10612 = CARTESIAN_POINT('',(-3.49,-7.95,-0.95)); +#10613 = LINE('',#10614,#10615); +#10614 = CARTESIAN_POINT('',(-3.49,2.45,-0.95)); +#10615 = VECTOR('',#10616,1.); +#10616 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#10617 = ORIENTED_EDGE('',*,*,#10618,.T.); +#10618 = EDGE_CURVE('',#10611,#10619,#10621,.T.); +#10619 = VERTEX_POINT('',#10620); +#10620 = CARTESIAN_POINT('',(-3.49,-7.95,-1.59)); +#10621 = LINE('',#10622,#10623); +#10622 = CARTESIAN_POINT('',(-3.49,-7.95,-0.77)); +#10623 = VECTOR('',#10624,1.); +#10624 = DIRECTION('',(-3.749151804555E-33,-1.224606353822E-16,-1.)); +#10625 = ORIENTED_EDGE('',*,*,#10626,.F.); +#10626 = EDGE_CURVE('',#10603,#10619,#10627,.T.); +#10627 = LINE('',#10628,#10629); +#10628 = CARTESIAN_POINT('',(-3.49,-7.95,-1.59)); +#10629 = VECTOR('',#10630,1.); +#10630 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#10631 = PLANE('',#10632); +#10632 = AXIS2_PLACEMENT_3D('',#10633,#10634,#10635); +#10633 = CARTESIAN_POINT('',(-3.49,-2.75,-1.27)); +#10634 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10635 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10636 = ADVANCED_FACE('',(#10637),#10670,.T.); +#10637 = FACE_BOUND('',#10638,.T.); +#10638 = EDGE_LOOP('',(#10639,#10647,#10655,#10663,#10669)); +#10639 = ORIENTED_EDGE('',*,*,#10640,.F.); +#10640 = EDGE_CURVE('',#10641,#10601,#10643,.T.); +#10641 = VERTEX_POINT('',#10642); +#10642 = CARTESIAN_POINT('',(-4.13,-2.5,-0.95)); +#10643 = LINE('',#10644,#10645); +#10644 = CARTESIAN_POINT('',(-3.97,-2.5,-0.95)); +#10645 = VECTOR('',#10646,1.); +#10646 = DIRECTION('',(1.,-4.402532809476E-49,-7.190119168882E-33)); +#10647 = ORIENTED_EDGE('',*,*,#10648,.T.); +#10648 = EDGE_CURVE('',#10641,#10649,#10651,.T.); +#10649 = VERTEX_POINT('',#10650); +#10650 = CARTESIAN_POINT('',(-4.13,-7.95,-0.95)); +#10651 = LINE('',#10652,#10653); +#10652 = CARTESIAN_POINT('',(-4.13,2.45,-0.95)); +#10653 = VECTOR('',#10654,1.); +#10654 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#10655 = ORIENTED_EDGE('',*,*,#10656,.T.); +#10656 = EDGE_CURVE('',#10649,#10657,#10659,.T.); +#10657 = VERTEX_POINT('',#10658); +#10658 = CARTESIAN_POINT('',(-3.49027711266,-7.95,-0.95)); +#10659 = LINE('',#10660,#10661); +#10660 = CARTESIAN_POINT('',(-4.13,-7.95,-0.95)); +#10661 = VECTOR('',#10662,1.); +#10662 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10663 = ORIENTED_EDGE('',*,*,#10664,.T.); +#10664 = EDGE_CURVE('',#10657,#10611,#10665,.T.); +#10665 = LINE('',#10666,#10667); +#10666 = CARTESIAN_POINT('',(-4.13,-7.95,-0.95)); +#10667 = VECTOR('',#10668,1.); +#10668 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10669 = ORIENTED_EDGE('',*,*,#10610,.T.); +#10670 = PLANE('',#10671); +#10671 = AXIS2_PLACEMENT_3D('',#10672,#10673,#10674); +#10672 = CARTESIAN_POINT('',(-4.13,-7.95,-0.95)); +#10673 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#10674 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#10675 = ADVANCED_FACE('',(#10676),#10709,.T.); +#10676 = FACE_BOUND('',#10677,.T.); +#10677 = EDGE_LOOP('',(#10678,#10686,#10687,#10695,#10703)); +#10678 = ORIENTED_EDGE('',*,*,#10679,.F.); +#10679 = EDGE_CURVE('',#10603,#10680,#10682,.T.); +#10680 = VERTEX_POINT('',#10681); +#10681 = CARTESIAN_POINT('',(-4.13,-2.5,-1.59)); +#10682 = LINE('',#10683,#10684); +#10683 = CARTESIAN_POINT('',(-3.97,-2.5,-1.59)); +#10684 = VECTOR('',#10685,1.); +#10685 = DIRECTION('',(-1.,0.,0.)); +#10686 = ORIENTED_EDGE('',*,*,#10626,.T.); +#10687 = ORIENTED_EDGE('',*,*,#10688,.F.); +#10688 = EDGE_CURVE('',#10689,#10619,#10691,.T.); +#10689 = VERTEX_POINT('',#10690); +#10690 = CARTESIAN_POINT('',(-3.49027711266,-7.95,-1.59)); +#10691 = LINE('',#10692,#10693); +#10692 = CARTESIAN_POINT('',(-4.13,-7.95,-1.59)); +#10693 = VECTOR('',#10694,1.); +#10694 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10695 = ORIENTED_EDGE('',*,*,#10696,.F.); +#10696 = EDGE_CURVE('',#10697,#10689,#10699,.T.); +#10697 = VERTEX_POINT('',#10698); +#10698 = CARTESIAN_POINT('',(-4.13,-7.95,-1.59)); +#10699 = LINE('',#10700,#10701); +#10700 = CARTESIAN_POINT('',(-4.13,-7.95,-1.59)); +#10701 = VECTOR('',#10702,1.); +#10702 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10703 = ORIENTED_EDGE('',*,*,#10704,.T.); +#10704 = EDGE_CURVE('',#10697,#10680,#10705,.T.); +#10705 = LINE('',#10706,#10707); +#10706 = CARTESIAN_POINT('',(-4.13,-7.95,-1.59)); +#10707 = VECTOR('',#10708,1.); +#10708 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10709 = PLANE('',#10710); +#10710 = AXIS2_PLACEMENT_3D('',#10711,#10712,#10713); +#10711 = CARTESIAN_POINT('',(-4.13,2.45,-1.59)); +#10712 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10713 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10714 = ADVANCED_FACE('',(#10715),#10757,.T.); +#10715 = FACE_BOUND('',#10716,.T.); +#10716 = EDGE_LOOP('',(#10717,#10727,#10735,#10743,#10751)); +#10717 = ORIENTED_EDGE('',*,*,#10718,.F.); +#10718 = EDGE_CURVE('',#10719,#10721,#10723,.T.); +#10719 = VERTEX_POINT('',#10720); +#10720 = CARTESIAN_POINT('',(-4.13,-0.7,-1.59)); +#10721 = VERTEX_POINT('',#10722); +#10722 = CARTESIAN_POINT('',(-3.49,-0.7,-1.59)); +#10723 = LINE('',#10724,#10725); +#10724 = CARTESIAN_POINT('',(-3.335,-0.7,-1.59)); +#10725 = VECTOR('',#10726,1.); +#10726 = DIRECTION('',(1.,0.,0.)); +#10727 = ORIENTED_EDGE('',*,*,#10728,.T.); +#10728 = EDGE_CURVE('',#10719,#10729,#10731,.T.); +#10729 = VERTEX_POINT('',#10730); +#10730 = CARTESIAN_POINT('',(-4.13,2.45,-1.59)); +#10731 = LINE('',#10732,#10733); +#10732 = CARTESIAN_POINT('',(-4.13,-7.95,-1.59)); +#10733 = VECTOR('',#10734,1.); +#10734 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10735 = ORIENTED_EDGE('',*,*,#10736,.T.); +#10736 = EDGE_CURVE('',#10729,#10737,#10739,.T.); +#10737 = VERTEX_POINT('',#10738); +#10738 = CARTESIAN_POINT('',(-3.49027711266,2.45,-1.59)); +#10739 = LINE('',#10740,#10741); +#10740 = CARTESIAN_POINT('',(-4.13,2.45,-1.59)); +#10741 = VECTOR('',#10742,1.); +#10742 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10743 = ORIENTED_EDGE('',*,*,#10744,.T.); +#10744 = EDGE_CURVE('',#10737,#10745,#10747,.T.); +#10745 = VERTEX_POINT('',#10746); +#10746 = CARTESIAN_POINT('',(-3.49,2.45,-1.59)); +#10747 = LINE('',#10748,#10749); +#10748 = CARTESIAN_POINT('',(-4.13,2.45,-1.59)); +#10749 = VECTOR('',#10750,1.); +#10750 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10751 = ORIENTED_EDGE('',*,*,#10752,.T.); +#10752 = EDGE_CURVE('',#10745,#10721,#10753,.T.); +#10753 = LINE('',#10754,#10755); +#10754 = CARTESIAN_POINT('',(-3.49,-7.95,-1.59)); +#10755 = VECTOR('',#10756,1.); +#10756 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#10757 = PLANE('',#10758); +#10758 = AXIS2_PLACEMENT_3D('',#10759,#10760,#10761); +#10759 = CARTESIAN_POINT('',(-4.13,2.45,-1.59)); +#10760 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10761 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10762 = ADVANCED_FACE('',(#10763),#10779,.F.); +#10763 = FACE_BOUND('',#10764,.T.); +#10764 = EDGE_LOOP('',(#10765,#10771,#10772,#10778)); +#10765 = ORIENTED_EDGE('',*,*,#10766,.F.); +#10766 = EDGE_CURVE('',#10680,#10641,#10767,.T.); +#10767 = LINE('',#10768,#10769); +#10768 = CARTESIAN_POINT('',(-4.13,-2.5,-0.635)); +#10769 = VECTOR('',#10770,1.); +#10770 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#10771 = ORIENTED_EDGE('',*,*,#10704,.F.); +#10772 = ORIENTED_EDGE('',*,*,#10773,.T.); +#10773 = EDGE_CURVE('',#10697,#10649,#10774,.T.); +#10774 = LINE('',#10775,#10776); +#10775 = CARTESIAN_POINT('',(-4.13,-7.949999999999,-0.77)); +#10776 = VECTOR('',#10777,1.); +#10777 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#10778 = ORIENTED_EDGE('',*,*,#10648,.F.); +#10779 = PLANE('',#10780); +#10780 = AXIS2_PLACEMENT_3D('',#10781,#10782,#10783); +#10781 = CARTESIAN_POINT('',(-4.13,-2.75,-1.27)); +#10782 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10783 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10784 = ADVANCED_FACE('',(#10785),#10810,.F.); +#10785 = FACE_BOUND('',#10786,.T.); +#10786 = EDGE_LOOP('',(#10787,#10795,#10803,#10809)); +#10787 = ORIENTED_EDGE('',*,*,#10788,.F.); +#10788 = EDGE_CURVE('',#10789,#10719,#10791,.T.); +#10789 = VERTEX_POINT('',#10790); +#10790 = CARTESIAN_POINT('',(-4.13,-0.7,-0.95)); +#10791 = LINE('',#10792,#10793); +#10792 = CARTESIAN_POINT('',(-4.13,-0.7,-0.635)); +#10793 = VECTOR('',#10794,1.); +#10794 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10795 = ORIENTED_EDGE('',*,*,#10796,.F.); +#10796 = EDGE_CURVE('',#10797,#10789,#10799,.T.); +#10797 = VERTEX_POINT('',#10798); +#10798 = CARTESIAN_POINT('',(-4.13,2.45,-0.95)); +#10799 = LINE('',#10800,#10801); +#10800 = CARTESIAN_POINT('',(-4.13,2.45,-0.95)); +#10801 = VECTOR('',#10802,1.); +#10802 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#10803 = ORIENTED_EDGE('',*,*,#10804,.T.); +#10804 = EDGE_CURVE('',#10797,#10729,#10805,.T.); +#10805 = LINE('',#10806,#10807); +#10806 = CARTESIAN_POINT('',(-4.13,2.449999999999,-1.77)); +#10807 = VECTOR('',#10808,1.); +#10808 = DIRECTION('',(3.749151804555E-33,1.232595164408E-32,-1.)); +#10809 = ORIENTED_EDGE('',*,*,#10728,.F.); +#10810 = PLANE('',#10811); +#10811 = AXIS2_PLACEMENT_3D('',#10812,#10813,#10814); +#10812 = CARTESIAN_POINT('',(-4.13,-2.75,-1.27)); +#10813 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10814 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#10815 = ADVANCED_FACE('',(#10816),#10846,.F.); +#10816 = FACE_BOUND('',#10817,.T.); +#10817 = EDGE_LOOP('',(#10818,#10826,#10832,#10840)); +#10818 = ORIENTED_EDGE('',*,*,#10819,.F.); +#10819 = EDGE_CURVE('',#10689,#10820,#10822,.T.); +#10820 = VERTEX_POINT('',#10821); +#10821 = CARTESIAN_POINT('',(-3.649999999997,-8.5,-1.43)); +#10822 = LINE('',#10823,#10824); +#10823 = CARTESIAN_POINT('',(-3.561052122518,-8.193711192998, + -1.519102198401)); +#10824 = VECTOR('',#10825,1.); +#10825 = DIRECTION('',(-0.268598772191,-0.92491018143,0.269064780052)); +#10826 = ORIENTED_EDGE('',*,*,#10827,.F.); +#10827 = EDGE_CURVE('',#10657,#10689,#10828,.T.); +#10828 = LINE('',#10829,#10830); +#10829 = CARTESIAN_POINT('',(-3.49027711266,-7.95,-0.27)); +#10830 = VECTOR('',#10831,1.); +#10831 = DIRECTION('',(0.,-1.224606353822E-16,-1.)); +#10832 = ORIENTED_EDGE('',*,*,#10833,.F.); +#10833 = EDGE_CURVE('',#10834,#10657,#10836,.T.); +#10834 = VERTEX_POINT('',#10835); +#10835 = CARTESIAN_POINT('',(-3.649999999997,-8.5,-1.11)); +#10836 = LINE('',#10837,#10838); +#10837 = CARTESIAN_POINT('',(-3.562881468779,-8.200010480847, + -1.022730321701)); +#10838 = VECTOR('',#10839,1.); +#10839 = DIRECTION('',(0.268598772191,0.92491018143,0.269064780052)); +#10840 = ORIENTED_EDGE('',*,*,#10841,.F.); +#10841 = EDGE_CURVE('',#10820,#10834,#10842,.T.); +#10842 = LINE('',#10843,#10844); +#10843 = CARTESIAN_POINT('',(-3.649999999997,-8.5,-0.85)); +#10844 = VECTOR('',#10845,1.); +#10845 = DIRECTION('',(-1.778160569846E-17,6.123031769112E-17,1.)); +#10846 = PLANE('',#10847); +#10847 = AXIS2_PLACEMENT_3D('',#10848,#10849,#10850); +#10848 = CARTESIAN_POINT('',(-3.49027711266,-7.95,-0.27)); +#10849 = DIRECTION('',(-0.960324967172,0.278883411887, + -3.415223981728E-17)); +#10850 = DIRECTION('',(0.278883411887,0.960324967172,-1.176020056533E-16 + )); +#10851 = ADVANCED_FACE('',(#10852),#10877,.F.); +#10852 = FACE_BOUND('',#10853,.T.); +#10853 = EDGE_LOOP('',(#10854,#10862,#10863,#10871)); +#10854 = ORIENTED_EDGE('',*,*,#10855,.F.); +#10855 = EDGE_CURVE('',#10649,#10856,#10858,.T.); +#10856 = VERTEX_POINT('',#10857); +#10857 = CARTESIAN_POINT('',(-3.970000000003,-8.5,-1.11)); +#10858 = LINE('',#10859,#10860); +#10859 = CARTESIAN_POINT('',(-4.006188860619,-8.375600791632, + -1.073811139384)); +#10860 = VECTOR('',#10861,1.); +#10861 = DIRECTION('',(0.269031078557,-0.924794332561,-0.269031078563)); +#10862 = ORIENTED_EDGE('',*,*,#10773,.F.); +#10863 = ORIENTED_EDGE('',*,*,#10864,.F.); +#10864 = EDGE_CURVE('',#10865,#10697,#10867,.T.); +#10865 = VERTEX_POINT('',#10866); +#10866 = CARTESIAN_POINT('',(-3.970000000003,-8.5,-1.43)); +#10867 = LINE('',#10868,#10869); +#10868 = CARTESIAN_POINT('',(-4.008020921687,-8.369303081708, + -1.468020921685)); +#10869 = VECTOR('',#10870,1.); +#10870 = DIRECTION('',(-0.269031078557,0.924794332561,-0.269031078563)); +#10871 = ORIENTED_EDGE('',*,*,#10872,.F.); +#10872 = EDGE_CURVE('',#10856,#10865,#10873,.T.); +#10873 = LINE('',#10874,#10875); +#10874 = CARTESIAN_POINT('',(-3.970000000003,-8.5,-0.85)); +#10875 = VECTOR('',#10876,1.); +#10876 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10877 = PLANE('',#10878); +#10878 = AXIS2_PLACEMENT_3D('',#10879,#10880,#10881); +#10879 = CARTESIAN_POINT('',(-3.970000000003,-8.5,-0.27)); +#10880 = DIRECTION('',(0.960195296605,0.279329540824,-3.420687305034E-17 + )); +#10881 = DIRECTION('',(0.279329540824,-0.960195296605,1.175861261133E-16 + )); +#10882 = ADVANCED_FACE('',(#10883),#10889,.F.); +#10883 = FACE_BOUND('',#10884,.T.); +#10884 = EDGE_LOOP('',(#10885,#10886,#10887,#10888)); +#10885 = ORIENTED_EDGE('',*,*,#10688,.T.); +#10886 = ORIENTED_EDGE('',*,*,#10618,.F.); +#10887 = ORIENTED_EDGE('',*,*,#10664,.F.); +#10888 = ORIENTED_EDGE('',*,*,#10827,.T.); +#10889 = PLANE('',#10890); +#10890 = AXIS2_PLACEMENT_3D('',#10891,#10892,#10893); +#10891 = CARTESIAN_POINT('',(-3.032456669096,-7.95,-0.27)); +#10892 = DIRECTION('',(0.,1.,-1.224606353822E-16)); +#10893 = DIRECTION('',(1.,0.,0.)); +#10894 = ADVANCED_FACE('',(#10895),#10906,.T.); +#10895 = FACE_BOUND('',#10896,.T.); +#10896 = EDGE_LOOP('',(#10897,#10898,#10899,#10900)); +#10897 = ORIENTED_EDGE('',*,*,#10864,.T.); +#10898 = ORIENTED_EDGE('',*,*,#10696,.T.); +#10899 = ORIENTED_EDGE('',*,*,#10819,.T.); +#10900 = ORIENTED_EDGE('',*,*,#10901,.F.); +#10901 = EDGE_CURVE('',#10865,#10820,#10902,.T.); +#10902 = LINE('',#10903,#10904); +#10903 = CARTESIAN_POINT('',(-4.13,-8.5,-1.43)); +#10904 = VECTOR('',#10905,1.); +#10905 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10906 = PLANE('',#10907); +#10907 = AXIS2_PLACEMENT_3D('',#10908,#10909,#10910); +#10908 = CARTESIAN_POINT('',(-4.13,-7.95,-1.59)); +#10909 = DIRECTION('',(-1.710343652554E-17,-0.27932954083, + -0.960195296604)); +#10910 = DIRECTION('',(5.879306305656E-17,0.960195296604,-0.27932954083) + ); +#10911 = ADVANCED_FACE('',(#10912),#10923,.T.); +#10912 = FACE_BOUND('',#10913,.T.); +#10913 = EDGE_LOOP('',(#10914,#10915,#10916,#10917)); +#10914 = ORIENTED_EDGE('',*,*,#10872,.T.); +#10915 = ORIENTED_EDGE('',*,*,#10901,.T.); +#10916 = ORIENTED_EDGE('',*,*,#10841,.T.); +#10917 = ORIENTED_EDGE('',*,*,#10918,.F.); +#10918 = EDGE_CURVE('',#10856,#10834,#10919,.T.); +#10919 = LINE('',#10920,#10921); +#10920 = CARTESIAN_POINT('',(-4.13,-8.5,-1.11)); +#10921 = VECTOR('',#10922,1.); +#10922 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#10923 = PLANE('',#10924); +#10924 = AXIS2_PLACEMENT_3D('',#10925,#10926,#10927); +#10925 = CARTESIAN_POINT('',(-4.13,-8.5,-1.43)); +#10926 = DIRECTION('',(-6.123031769112E-17,-1.,6.123031769112E-17)); +#10927 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#10928 = ADVANCED_FACE('',(#10929),#10961,.F.); +#10929 = FACE_BOUND('',#10930,.T.); +#10930 = EDGE_LOOP('',(#10931,#10941,#10947,#10955)); +#10931 = ORIENTED_EDGE('',*,*,#10932,.F.); +#10932 = EDGE_CURVE('',#10933,#10935,#10937,.T.); +#10933 = VERTEX_POINT('',#10934); +#10934 = CARTESIAN_POINT('',(-3.49027711266,2.45,-0.95)); +#10935 = VERTEX_POINT('',#10936); +#10936 = CARTESIAN_POINT('',(-3.649999999997,3.,-1.11)); +#10937 = LINE('',#10938,#10939); +#10938 = CARTESIAN_POINT('',(-3.561052122518,2.693711192998, + -1.020897801599)); +#10939 = VECTOR('',#10940,1.); +#10940 = DIRECTION('',(-0.268598772191,0.92491018143,-0.269064780052)); +#10941 = ORIENTED_EDGE('',*,*,#10942,.F.); +#10942 = EDGE_CURVE('',#10737,#10933,#10943,.T.); +#10943 = LINE('',#10944,#10945); +#10944 = CARTESIAN_POINT('',(-3.49027711266,2.45,-2.27)); +#10945 = VECTOR('',#10946,1.); +#10946 = DIRECTION('',(0.,0.,1.)); +#10947 = ORIENTED_EDGE('',*,*,#10948,.F.); +#10948 = EDGE_CURVE('',#10949,#10737,#10951,.T.); +#10949 = VERTEX_POINT('',#10950); +#10950 = CARTESIAN_POINT('',(-3.649999999997,3.,-1.43)); +#10951 = LINE('',#10952,#10953); +#10952 = CARTESIAN_POINT('',(-3.562881468779,2.700010480847, + -1.517269678299)); +#10953 = VECTOR('',#10954,1.); +#10954 = DIRECTION('',(0.268598772191,-0.92491018143,-0.269064780052)); +#10955 = ORIENTED_EDGE('',*,*,#10956,.F.); +#10956 = EDGE_CURVE('',#10935,#10949,#10957,.T.); +#10957 = LINE('',#10958,#10959); +#10958 = CARTESIAN_POINT('',(-3.649999999997,3.,-1.69)); +#10959 = VECTOR('',#10960,1.); +#10960 = DIRECTION('',(3.556321139691E-17,-1.224606353822E-16,-1.)); +#10961 = PLANE('',#10962); +#10962 = AXIS2_PLACEMENT_3D('',#10963,#10964,#10965); +#10963 = CARTESIAN_POINT('',(-3.49027711266,2.45,-2.27)); +#10964 = DIRECTION('',(-0.960324967172,-0.278883411887,0.)); +#10965 = DIRECTION('',(0.278883411887,-0.960324967172,0.)); +#10966 = ADVANCED_FACE('',(#10967),#10992,.F.); +#10967 = FACE_BOUND('',#10968,.T.); +#10968 = EDGE_LOOP('',(#10969,#10977,#10985,#10991)); +#10969 = ORIENTED_EDGE('',*,*,#10970,.F.); +#10970 = EDGE_CURVE('',#10971,#10797,#10973,.T.); +#10971 = VERTEX_POINT('',#10972); +#10972 = CARTESIAN_POINT('',(-3.970000000003,3.,-1.11)); +#10973 = LINE('',#10974,#10975); +#10974 = CARTESIAN_POINT('',(-4.008020921687,2.869303081708, + -1.071979078315)); +#10975 = VECTOR('',#10976,1.); +#10976 = DIRECTION('',(-0.269031078557,-0.924794332561,0.269031078563)); +#10977 = ORIENTED_EDGE('',*,*,#10978,.F.); +#10978 = EDGE_CURVE('',#10979,#10971,#10981,.T.); +#10979 = VERTEX_POINT('',#10980); +#10980 = CARTESIAN_POINT('',(-3.970000000003,3.,-1.43)); +#10981 = LINE('',#10982,#10983); +#10982 = CARTESIAN_POINT('',(-3.970000000003,3.,-1.69)); +#10983 = VECTOR('',#10984,1.); +#10984 = DIRECTION('',(0.,1.224606353822E-16,1.)); +#10985 = ORIENTED_EDGE('',*,*,#10986,.F.); +#10986 = EDGE_CURVE('',#10729,#10979,#10987,.T.); +#10987 = LINE('',#10988,#10989); +#10988 = CARTESIAN_POINT('',(-4.006188860619,2.875600791632, + -1.466188860616)); +#10989 = VECTOR('',#10990,1.); +#10990 = DIRECTION('',(0.269031078557,0.924794332561,0.269031078563)); +#10991 = ORIENTED_EDGE('',*,*,#10804,.F.); +#10992 = PLANE('',#10993); +#10993 = AXIS2_PLACEMENT_3D('',#10994,#10995,#10996); +#10994 = CARTESIAN_POINT('',(-3.970000000003,3.,-2.27)); +#10995 = DIRECTION('',(0.960195296605,-0.279329540824,0.)); +#10996 = DIRECTION('',(0.279329540824,0.960195296605,0.)); +#10997 = ADVANCED_FACE('',(#10998),#11016,.F.); +#10998 = FACE_BOUND('',#10999,.T.); +#10999 = EDGE_LOOP('',(#11000,#11008,#11014,#11015)); +#11000 = ORIENTED_EDGE('',*,*,#11001,.T.); +#11001 = EDGE_CURVE('',#10933,#11002,#11004,.T.); +#11002 = VERTEX_POINT('',#11003); +#11003 = CARTESIAN_POINT('',(-3.49,2.45,-0.95)); +#11004 = LINE('',#11005,#11006); +#11005 = CARTESIAN_POINT('',(-4.13,2.45,-0.95)); +#11006 = VECTOR('',#11007,1.); +#11007 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#11008 = ORIENTED_EDGE('',*,*,#11009,.F.); +#11009 = EDGE_CURVE('',#10745,#11002,#11010,.T.); +#11010 = LINE('',#11011,#11012); +#11011 = CARTESIAN_POINT('',(-3.49,2.45,-1.77)); +#11012 = VECTOR('',#11013,1.); +#11013 = DIRECTION('',(-3.749151804555E-33,0.,1.)); +#11014 = ORIENTED_EDGE('',*,*,#10744,.F.); +#11015 = ORIENTED_EDGE('',*,*,#10942,.T.); +#11016 = PLANE('',#11017); +#11017 = AXIS2_PLACEMENT_3D('',#11018,#11019,#11020); +#11018 = CARTESIAN_POINT('',(-3.032456669096,2.45,-2.27)); +#11019 = DIRECTION('',(0.,-1.,0.)); +#11020 = DIRECTION('',(1.,0.,0.)); +#11021 = ADVANCED_FACE('',(#11022),#11033,.T.); +#11022 = FACE_BOUND('',#11023,.T.); +#11023 = EDGE_LOOP('',(#11024,#11025,#11031,#11032)); +#11024 = ORIENTED_EDGE('',*,*,#10986,.T.); +#11025 = ORIENTED_EDGE('',*,*,#11026,.T.); +#11026 = EDGE_CURVE('',#10979,#10949,#11027,.T.); +#11027 = LINE('',#11028,#11029); +#11028 = CARTESIAN_POINT('',(-4.13,3.,-1.43)); +#11029 = VECTOR('',#11030,1.); +#11030 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#11031 = ORIENTED_EDGE('',*,*,#10948,.T.); +#11032 = ORIENTED_EDGE('',*,*,#10736,.F.); +#11033 = PLANE('',#11034); +#11034 = AXIS2_PLACEMENT_3D('',#11035,#11036,#11037); +#11035 = CARTESIAN_POINT('',(-4.13,3.,-1.43)); +#11036 = DIRECTION('',(1.710343652554E-17,0.27932954083,-0.960195296604) + ); +#11037 = DIRECTION('',(5.879306305656E-17,0.960195296604,0.27932954083) + ); +#11038 = ADVANCED_FACE('',(#11039),#11055,.T.); +#11039 = FACE_BOUND('',#11040,.T.); +#11040 = EDGE_LOOP('',(#11041,#11042,#11048,#11049)); +#11041 = ORIENTED_EDGE('',*,*,#10970,.T.); +#11042 = ORIENTED_EDGE('',*,*,#11043,.T.); +#11043 = EDGE_CURVE('',#10797,#10933,#11044,.T.); +#11044 = LINE('',#11045,#11046); +#11045 = CARTESIAN_POINT('',(-4.13,2.45,-0.95)); +#11046 = VECTOR('',#11047,1.); +#11047 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#11048 = ORIENTED_EDGE('',*,*,#10932,.T.); +#11049 = ORIENTED_EDGE('',*,*,#11050,.F.); +#11050 = EDGE_CURVE('',#10971,#10935,#11051,.T.); +#11051 = LINE('',#11052,#11053); +#11052 = CARTESIAN_POINT('',(-4.13,3.,-1.11)); +#11053 = VECTOR('',#11054,1.); +#11054 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#11055 = PLANE('',#11056); +#11056 = AXIS2_PLACEMENT_3D('',#11057,#11058,#11059); +#11057 = CARTESIAN_POINT('',(-4.13,2.45,-0.95)); +#11058 = DIRECTION('',(1.710343652554E-17,0.27932954083,0.960195296604) + ); +#11059 = DIRECTION('',(-5.879306305656E-17,-0.960195296604,0.27932954083 + )); +#11060 = ADVANCED_FACE('',(#11061),#11067,.T.); +#11061 = FACE_BOUND('',#11062,.T.); +#11062 = EDGE_LOOP('',(#11063,#11064,#11065,#11066)); +#11063 = ORIENTED_EDGE('',*,*,#10978,.T.); +#11064 = ORIENTED_EDGE('',*,*,#11050,.T.); +#11065 = ORIENTED_EDGE('',*,*,#10956,.T.); +#11066 = ORIENTED_EDGE('',*,*,#11026,.F.); +#11067 = PLANE('',#11068); +#11068 = AXIS2_PLACEMENT_3D('',#11069,#11070,#11071); +#11069 = CARTESIAN_POINT('',(-4.13,3.,-1.11)); +#11070 = DIRECTION('',(6.123031769112E-17,1.,-1.224606353822E-16)); +#11071 = DIRECTION('',(3.749151804555E-33,1.224606353822E-16,1.)); +#11072 = ADVANCED_FACE('',(#11073),#11079,.T.); +#11073 = FACE_BOUND('',#11074,.T.); +#11074 = EDGE_LOOP('',(#11075,#11076,#11077,#11078)); +#11075 = ORIENTED_EDGE('',*,*,#10855,.T.); +#11076 = ORIENTED_EDGE('',*,*,#10918,.T.); +#11077 = ORIENTED_EDGE('',*,*,#10833,.T.); +#11078 = ORIENTED_EDGE('',*,*,#10656,.F.); +#11079 = PLANE('',#11080); +#11080 = AXIS2_PLACEMENT_3D('',#11081,#11082,#11083); +#11081 = CARTESIAN_POINT('',(-4.13,-8.5,-1.11)); +#11082 = DIRECTION('',(-1.710343652554E-17,-0.27932954083,0.960195296604 + )); +#11083 = DIRECTION('',(-5.879306305655E-17,-0.960195296604, + -0.27932954083)); +#11084 = ADVANCED_FACE('',(#11085),#11104,.T.); +#11085 = FACE_BOUND('',#11086,.T.); +#11086 = EDGE_LOOP('',(#11087,#11095,#11101,#11102,#11103)); +#11087 = ORIENTED_EDGE('',*,*,#11088,.F.); +#11088 = EDGE_CURVE('',#11089,#10789,#11091,.T.); +#11089 = VERTEX_POINT('',#11090); +#11090 = CARTESIAN_POINT('',(-3.49,-0.7,-0.95)); +#11091 = LINE('',#11092,#11093); +#11092 = CARTESIAN_POINT('',(-3.335,-0.7,-0.95)); +#11093 = VECTOR('',#11094,1.); +#11094 = DIRECTION('',(-1.,4.402532809476E-49,7.190119168882E-33)); +#11095 = ORIENTED_EDGE('',*,*,#11096,.T.); +#11096 = EDGE_CURVE('',#11089,#11002,#11097,.T.); +#11097 = LINE('',#11098,#11099); +#11098 = CARTESIAN_POINT('',(-3.49,2.45,-0.95)); +#11099 = VECTOR('',#11100,1.); +#11100 = DIRECTION('',(6.123031769112E-17,1.,-1.78657752988E-16)); +#11101 = ORIENTED_EDGE('',*,*,#11001,.F.); +#11102 = ORIENTED_EDGE('',*,*,#11043,.F.); +#11103 = ORIENTED_EDGE('',*,*,#10796,.T.); +#11104 = PLANE('',#11105); +#11105 = AXIS2_PLACEMENT_3D('',#11106,#11107,#11108); +#11106 = CARTESIAN_POINT('',(-4.13,-7.95,-0.95)); +#11107 = DIRECTION('',(7.190119168882E-33,1.78657752988E-16,1.)); +#11108 = DIRECTION('',(-6.123031769112E-17,-1.,1.78657752988E-16)); +#11109 = ADVANCED_FACE('',(#11110),#11121,.T.); +#11110 = FACE_BOUND('',#11111,.T.); +#11111 = EDGE_LOOP('',(#11112,#11118,#11119,#11120)); +#11112 = ORIENTED_EDGE('',*,*,#11113,.F.); +#11113 = EDGE_CURVE('',#10721,#11089,#11114,.T.); +#11114 = LINE('',#11115,#11116); +#11115 = CARTESIAN_POINT('',(-3.49,-0.7,-0.635)); +#11116 = VECTOR('',#11117,1.); +#11117 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#11118 = ORIENTED_EDGE('',*,*,#10752,.F.); +#11119 = ORIENTED_EDGE('',*,*,#11009,.T.); +#11120 = ORIENTED_EDGE('',*,*,#11096,.F.); +#11121 = PLANE('',#11122); +#11122 = AXIS2_PLACEMENT_3D('',#11123,#11124,#11125); +#11123 = CARTESIAN_POINT('',(-3.49,-2.75,-1.27)); +#11124 = DIRECTION('',(1.,-6.123031769112E-17,3.749151804555E-33)); +#11125 = DIRECTION('',(6.123031769112E-17,1.,-6.123031769112E-17)); +#11126 = ADVANCED_FACE('',(#11127),#11161,.T.); +#11127 = FACE_BOUND('',#11128,.T.); +#11128 = EDGE_LOOP('',(#11129,#11139,#11147,#11155)); +#11129 = ORIENTED_EDGE('',*,*,#11130,.F.); +#11130 = EDGE_CURVE('',#11131,#11133,#11135,.T.); +#11131 = VERTEX_POINT('',#11132); +#11132 = CARTESIAN_POINT('',(5.079999999999,-0.7,1.89)); +#11133 = VERTEX_POINT('',#11134); +#11134 = CARTESIAN_POINT('',(5.079999999999,1.157253004362E-16,1.89)); +#11135 = LINE('',#11136,#11137); +#11136 = CARTESIAN_POINT('',(5.079999999999,7.5E-02,1.89)); +#11137 = VECTOR('',#11138,1.); +#11138 = DIRECTION('',(0.,1.,-6.123031769112E-17)); +#11139 = ORIENTED_EDGE('',*,*,#11140,.T.); +#11140 = EDGE_CURVE('',#11131,#11141,#11143,.T.); +#11141 = VERTEX_POINT('',#11142); +#11142 = CARTESIAN_POINT('',(-5.079999999999,-0.7,1.89)); +#11143 = LINE('',#11144,#11145); +#11144 = CARTESIAN_POINT('',(-2.54,-0.7,1.89)); +#11145 = VECTOR('',#11146,1.); +#11146 = DIRECTION('',(-1.,0.,0.)); +#11147 = ORIENTED_EDGE('',*,*,#11148,.F.); +#11148 = EDGE_CURVE('',#11149,#11141,#11151,.T.); +#11149 = VERTEX_POINT('',#11150); +#11150 = CARTESIAN_POINT('',(-5.079999999999,1.157253004362E-16,1.89)); +#11151 = LINE('',#11152,#11153); +#11152 = CARTESIAN_POINT('',(-5.079999999999,7.5E-02,1.89)); +#11153 = VECTOR('',#11154,1.); +#11154 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11155 = ORIENTED_EDGE('',*,*,#11156,.F.); +#11156 = EDGE_CURVE('',#11133,#11149,#11157,.T.); +#11157 = LINE('',#11158,#11159); +#11158 = CARTESIAN_POINT('',(-3.175,1.157253004362E-16,1.89)); +#11159 = VECTOR('',#11160,1.); +#11160 = DIRECTION('',(-1.,0.,0.)); +#11161 = PLANE('',#11162); +#11162 = AXIS2_PLACEMENT_3D('',#11163,#11164,#11165); +#11163 = CARTESIAN_POINT('',(-2.54,0.15,1.89)); +#11164 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#11165 = DIRECTION('',(0.,1.,-6.123031769112E-17)); +#11166 = ADVANCED_FACE('',(#11167,#11173,#11179,#11185,#11191,#11197, + #11203,#11209,#11215),#11240,.F.); +#11167 = FACE_BOUND('',#11168,.T.); +#11168 = EDGE_LOOP('',(#11169,#11170,#11171,#11172)); +#11169 = ORIENTED_EDGE('',*,*,#7078,.T.); +#11170 = ORIENTED_EDGE('',*,*,#7008,.T.); +#11171 = ORIENTED_EDGE('',*,*,#7403,.T.); +#11172 = ORIENTED_EDGE('',*,*,#7378,.T.); +#11173 = FACE_BOUND('',#11174,.T.); +#11174 = EDGE_LOOP('',(#11175,#11176,#11177,#11178)); +#11175 = ORIENTED_EDGE('',*,*,#7608,.T.); +#11176 = ORIENTED_EDGE('',*,*,#7538,.T.); +#11177 = ORIENTED_EDGE('',*,*,#7933,.T.); +#11178 = ORIENTED_EDGE('',*,*,#7908,.T.); +#11179 = FACE_BOUND('',#11180,.T.); +#11180 = EDGE_LOOP('',(#11181,#11182,#11183,#11184)); +#11181 = ORIENTED_EDGE('',*,*,#8138,.T.); +#11182 = ORIENTED_EDGE('',*,*,#8068,.T.); +#11183 = ORIENTED_EDGE('',*,*,#8463,.T.); +#11184 = ORIENTED_EDGE('',*,*,#8438,.T.); +#11185 = FACE_BOUND('',#11186,.T.); +#11186 = EDGE_LOOP('',(#11187,#11188,#11189,#11190)); +#11187 = ORIENTED_EDGE('',*,*,#8668,.T.); +#11188 = ORIENTED_EDGE('',*,*,#8598,.T.); +#11189 = ORIENTED_EDGE('',*,*,#8993,.T.); +#11190 = ORIENTED_EDGE('',*,*,#8968,.T.); +#11191 = FACE_BOUND('',#11192,.T.); +#11192 = EDGE_LOOP('',(#11193,#11194,#11195,#11196)); +#11193 = ORIENTED_EDGE('',*,*,#9198,.T.); +#11194 = ORIENTED_EDGE('',*,*,#9128,.T.); +#11195 = ORIENTED_EDGE('',*,*,#9523,.T.); +#11196 = ORIENTED_EDGE('',*,*,#9498,.T.); +#11197 = FACE_BOUND('',#11198,.T.); +#11198 = EDGE_LOOP('',(#11199,#11200,#11201,#11202)); +#11199 = ORIENTED_EDGE('',*,*,#9728,.T.); +#11200 = ORIENTED_EDGE('',*,*,#9658,.T.); +#11201 = ORIENTED_EDGE('',*,*,#10053,.T.); +#11202 = ORIENTED_EDGE('',*,*,#10028,.T.); +#11203 = FACE_BOUND('',#11204,.T.); +#11204 = EDGE_LOOP('',(#11205,#11206,#11207,#11208)); +#11205 = ORIENTED_EDGE('',*,*,#10258,.T.); +#11206 = ORIENTED_EDGE('',*,*,#10188,.T.); +#11207 = ORIENTED_EDGE('',*,*,#10583,.T.); +#11208 = ORIENTED_EDGE('',*,*,#10558,.T.); +#11209 = FACE_BOUND('',#11210,.T.); +#11210 = EDGE_LOOP('',(#11211,#11212,#11213,#11214)); +#11211 = ORIENTED_EDGE('',*,*,#10788,.T.); +#11212 = ORIENTED_EDGE('',*,*,#10718,.T.); +#11213 = ORIENTED_EDGE('',*,*,#11113,.T.); +#11214 = ORIENTED_EDGE('',*,*,#11088,.T.); +#11215 = FACE_BOUND('',#11216,.T.); +#11216 = EDGE_LOOP('',(#11217,#11225,#11233,#11239)); +#11217 = ORIENTED_EDGE('',*,*,#11218,.F.); +#11218 = EDGE_CURVE('',#11219,#11131,#11221,.T.); +#11219 = VERTEX_POINT('',#11220); +#11220 = CARTESIAN_POINT('',(5.079999999999,-0.7,-1.89)); +#11221 = LINE('',#11222,#11223); +#11222 = CARTESIAN_POINT('',(5.079999999999,-0.7,1.07328727114)); +#11223 = VECTOR('',#11224,1.); +#11224 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#11225 = ORIENTED_EDGE('',*,*,#11226,.F.); +#11226 = EDGE_CURVE('',#11227,#11219,#11229,.T.); +#11227 = VERTEX_POINT('',#11228); +#11228 = CARTESIAN_POINT('',(-5.079999999999,-0.7,-1.89)); +#11229 = LINE('',#11230,#11231); +#11230 = CARTESIAN_POINT('',(-2.54,-0.7,-1.89)); +#11231 = VECTOR('',#11232,1.); +#11232 = DIRECTION('',(1.,0.,0.)); +#11233 = ORIENTED_EDGE('',*,*,#11234,.F.); +#11234 = EDGE_CURVE('',#11141,#11227,#11235,.T.); +#11235 = LINE('',#11236,#11237); +#11236 = CARTESIAN_POINT('',(-5.079999999999,-0.7,-1.07328727114)); +#11237 = VECTOR('',#11238,1.); +#11238 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#11239 = ORIENTED_EDGE('',*,*,#11140,.F.); +#11240 = PLANE('',#11241); +#11241 = AXIS2_PLACEMENT_3D('',#11242,#11243,#11244); +#11242 = CARTESIAN_POINT('',(-2.54,-0.7,4.286122238378E-17)); +#11243 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11244 = DIRECTION('',(1.,0.,0.)); +#11245 = ADVANCED_FACE('',(#11246),#11271,.T.); +#11246 = FACE_BOUND('',#11247,.T.); +#11247 = EDGE_LOOP('',(#11248,#11256,#11264,#11270)); +#11248 = ORIENTED_EDGE('',*,*,#11249,.F.); +#11249 = EDGE_CURVE('',#11250,#11219,#11252,.T.); +#11250 = VERTEX_POINT('',#11251); +#11251 = CARTESIAN_POINT('',(5.079999999999,-1.157253004362E-16,-1.89)); +#11252 = LINE('',#11253,#11254); +#11253 = CARTESIAN_POINT('',(5.079999999999,7.5E-02,-1.89)); +#11254 = VECTOR('',#11255,1.); +#11255 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11256 = ORIENTED_EDGE('',*,*,#11257,.F.); +#11257 = EDGE_CURVE('',#11258,#11250,#11260,.T.); +#11258 = VERTEX_POINT('',#11259); +#11259 = CARTESIAN_POINT('',(-5.079999999999,-1.157253004362E-16,-1.89) + ); +#11260 = LINE('',#11261,#11262); +#11261 = CARTESIAN_POINT('',(-3.175,-1.157253004362E-16,-1.89)); +#11262 = VECTOR('',#11263,1.); +#11263 = DIRECTION('',(1.,0.,0.)); +#11264 = ORIENTED_EDGE('',*,*,#11265,.F.); +#11265 = EDGE_CURVE('',#11227,#11258,#11266,.T.); +#11266 = LINE('',#11267,#11268); +#11267 = CARTESIAN_POINT('',(-5.079999999999,7.5E-02,-1.89)); +#11268 = VECTOR('',#11269,1.); +#11269 = DIRECTION('',(0.,1.,-6.123031769112E-17)); +#11270 = ORIENTED_EDGE('',*,*,#11226,.T.); +#11271 = PLANE('',#11272); +#11272 = AXIS2_PLACEMENT_3D('',#11273,#11274,#11275); +#11273 = CARTESIAN_POINT('',(-2.54,0.15,-1.89)); +#11274 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#11275 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11276 = ADVANCED_FACE('',(#11277),#11320,.T.); +#11277 = FACE_BOUND('',#11278,.T.); +#11278 = EDGE_LOOP('',(#11279,#11280,#11281,#11282,#11290,#11298,#11306, + #11314)); +#11279 = ORIENTED_EDGE('',*,*,#11249,.T.); +#11280 = ORIENTED_EDGE('',*,*,#11218,.T.); +#11281 = ORIENTED_EDGE('',*,*,#11130,.T.); +#11282 = ORIENTED_EDGE('',*,*,#11283,.T.); +#11283 = EDGE_CURVE('',#11133,#11284,#11286,.T.); +#11284 = VERTEX_POINT('',#11285); +#11285 = CARTESIAN_POINT('',(5.079999999999,1.314354411715E-16, + 2.146574542281)); +#11286 = LINE('',#11287,#11288); +#11287 = CARTESIAN_POINT('',(5.079999999999,-1.314354411715E-16, + -2.146574542281)); +#11288 = VECTOR('',#11289,1.); +#11289 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#11290 = ORIENTED_EDGE('',*,*,#11291,.T.); +#11291 = EDGE_CURVE('',#11284,#11292,#11294,.T.); +#11292 = VERTEX_POINT('',#11293); +#11293 = CARTESIAN_POINT('',(5.079999999999,-2.5,2.146574542281)); +#11294 = LINE('',#11295,#11296); +#11295 = CARTESIAN_POINT('',(5.079999999999,1.314354411715E-16, + 2.146574542281)); +#11296 = VECTOR('',#11297,1.); +#11297 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11298 = ORIENTED_EDGE('',*,*,#11299,.T.); +#11299 = EDGE_CURVE('',#11292,#11300,#11302,.T.); +#11300 = VERTEX_POINT('',#11301); +#11301 = CARTESIAN_POINT('',(5.079999999999,-2.5,-2.146574542281)); +#11302 = LINE('',#11303,#11304); +#11303 = CARTESIAN_POINT('',(5.079999999999,-2.5,-2.146574542281)); +#11304 = VECTOR('',#11305,1.); +#11305 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#11306 = ORIENTED_EDGE('',*,*,#11307,.F.); +#11307 = EDGE_CURVE('',#11308,#11300,#11310,.T.); +#11308 = VERTEX_POINT('',#11309); +#11309 = CARTESIAN_POINT('',(5.079999999999,-1.314354411715E-16, + -2.146574542281)); +#11310 = LINE('',#11311,#11312); +#11311 = CARTESIAN_POINT('',(5.079999999999,-1.314354411715E-16, + -2.146574542281)); +#11312 = VECTOR('',#11313,1.); +#11313 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11314 = ORIENTED_EDGE('',*,*,#11315,.T.); +#11315 = EDGE_CURVE('',#11308,#11250,#11316,.T.); +#11316 = LINE('',#11317,#11318); +#11317 = CARTESIAN_POINT('',(5.079999999999,-1.314354411715E-16, + -2.146574542281)); +#11318 = VECTOR('',#11319,1.); +#11319 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#11320 = PLANE('',#11321); +#11321 = AXIS2_PLACEMENT_3D('',#11322,#11323,#11324); +#11322 = CARTESIAN_POINT('',(5.079999999999,1.314354411715E-16, + 2.146574542281)); +#11323 = DIRECTION('',(1.,0.,0.)); +#11324 = DIRECTION('',(-0.,6.123031769112E-17,1.)); +#11325 = ADVANCED_FACE('',(#11326),#11432,.F.); +#11326 = FACE_BOUND('',#11327,.T.); +#11327 = EDGE_LOOP('',(#11328,#11329,#11337,#11345,#11353,#11361,#11369, + #11377,#11385,#11393,#11401,#11409,#11417,#11425,#11431)); +#11328 = ORIENTED_EDGE('',*,*,#11156,.T.); +#11329 = ORIENTED_EDGE('',*,*,#11330,.F.); +#11330 = EDGE_CURVE('',#11331,#11149,#11333,.T.); +#11331 = VERTEX_POINT('',#11332); +#11332 = CARTESIAN_POINT('',(-5.079999999999,1.314354411715E-16, + 2.146574542281)); +#11333 = LINE('',#11334,#11335); +#11334 = CARTESIAN_POINT('',(-5.079999999999,1.314354411715E-16, + 2.146574542281)); +#11335 = VECTOR('',#11336,1.); +#11336 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#11337 = ORIENTED_EDGE('',*,*,#11338,.F.); +#11338 = EDGE_CURVE('',#11339,#11331,#11341,.T.); +#11339 = VERTEX_POINT('',#11340); +#11340 = CARTESIAN_POINT('',(-4.776302662724,1.555250069354E-16,2.54)); +#11341 = LINE('',#11342,#11343); +#11342 = CARTESIAN_POINT('',(-4.776302662724,1.555250069354E-16,2.54)); +#11343 = VECTOR('',#11344,1.); +#11344 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11345 = ORIENTED_EDGE('',*,*,#11346,.F.); +#11346 = EDGE_CURVE('',#11347,#11339,#11349,.T.); +#11347 = VERTEX_POINT('',#11348); +#11348 = CARTESIAN_POINT('',(-2.843697337275,1.555250069354E-16,2.54)); +#11349 = LINE('',#11350,#11351); +#11350 = CARTESIAN_POINT('',(-2.843697337275,1.555250069354E-16,2.54)); +#11351 = VECTOR('',#11352,1.); +#11352 = DIRECTION('',(-1.,0.,0.)); +#11353 = ORIENTED_EDGE('',*,*,#11354,.T.); +#11354 = EDGE_CURVE('',#11347,#11355,#11357,.T.); +#11355 = VERTEX_POINT('',#11356); +#11356 = CARTESIAN_POINT('',(-2.54,1.314354411715E-16,2.146574542281)); +#11357 = LINE('',#11358,#11359); +#11358 = CARTESIAN_POINT('',(-2.843697337275,1.555250069354E-16,2.54)); +#11359 = VECTOR('',#11360,1.); +#11360 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11361 = ORIENTED_EDGE('',*,*,#11362,.F.); +#11362 = EDGE_CURVE('',#11363,#11355,#11365,.T.); +#11363 = VERTEX_POINT('',#11364); +#11364 = CARTESIAN_POINT('',(-2.236302662725,1.555250069354E-16,2.54)); +#11365 = LINE('',#11366,#11367); +#11366 = CARTESIAN_POINT('',(-2.236302662725,1.555250069354E-16,2.54)); +#11367 = VECTOR('',#11368,1.); +#11368 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11369 = ORIENTED_EDGE('',*,*,#11370,.F.); +#11370 = EDGE_CURVE('',#11371,#11363,#11373,.T.); +#11371 = VERTEX_POINT('',#11372); +#11372 = CARTESIAN_POINT('',(-0.303697337276,1.555250069354E-16,2.54)); +#11373 = LINE('',#11374,#11375); +#11374 = CARTESIAN_POINT('',(-0.303697337276,1.555250069354E-16,2.54)); +#11375 = VECTOR('',#11376,1.); +#11376 = DIRECTION('',(-1.,0.,0.)); +#11377 = ORIENTED_EDGE('',*,*,#11378,.T.); +#11378 = EDGE_CURVE('',#11371,#11379,#11381,.T.); +#11379 = VERTEX_POINT('',#11380); +#11380 = CARTESIAN_POINT('',(-9.459100169806E-13,1.314354411715E-16, + 2.146574542281)); +#11381 = LINE('',#11382,#11383); +#11382 = CARTESIAN_POINT('',(-0.303697337276,1.555250069354E-16,2.54)); +#11383 = VECTOR('',#11384,1.); +#11384 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11385 = ORIENTED_EDGE('',*,*,#11386,.F.); +#11386 = EDGE_CURVE('',#11387,#11379,#11389,.T.); +#11387 = VERTEX_POINT('',#11388); +#11388 = CARTESIAN_POINT('',(0.303697337275,1.555250069354E-16,2.54)); +#11389 = LINE('',#11390,#11391); +#11390 = CARTESIAN_POINT('',(0.303697337275,1.555250069354E-16,2.54)); +#11391 = VECTOR('',#11392,1.); +#11392 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11393 = ORIENTED_EDGE('',*,*,#11394,.F.); +#11394 = EDGE_CURVE('',#11395,#11387,#11397,.T.); +#11395 = VERTEX_POINT('',#11396); +#11396 = CARTESIAN_POINT('',(2.236302662724,1.555250069354E-16,2.54)); +#11397 = LINE('',#11398,#11399); +#11398 = CARTESIAN_POINT('',(2.236302662724,1.555250069354E-16,2.54)); +#11399 = VECTOR('',#11400,1.); +#11400 = DIRECTION('',(-1.,0.,0.)); +#11401 = ORIENTED_EDGE('',*,*,#11402,.T.); +#11402 = EDGE_CURVE('',#11395,#11403,#11405,.T.); +#11403 = VERTEX_POINT('',#11404); +#11404 = CARTESIAN_POINT('',(2.539999999999,1.314354411715E-16, + 2.146574542281)); +#11405 = LINE('',#11406,#11407); +#11406 = CARTESIAN_POINT('',(2.236302662724,1.555250069354E-16,2.54)); +#11407 = VECTOR('',#11408,1.); +#11408 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11409 = ORIENTED_EDGE('',*,*,#11410,.F.); +#11410 = EDGE_CURVE('',#11411,#11403,#11413,.T.); +#11411 = VERTEX_POINT('',#11412); +#11412 = CARTESIAN_POINT('',(2.843697337275,1.555250069354E-16,2.54)); +#11413 = LINE('',#11414,#11415); +#11414 = CARTESIAN_POINT('',(2.843697337275,1.555250069354E-16,2.54)); +#11415 = VECTOR('',#11416,1.); +#11416 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11417 = ORIENTED_EDGE('',*,*,#11418,.F.); +#11418 = EDGE_CURVE('',#11419,#11411,#11421,.T.); +#11419 = VERTEX_POINT('',#11420); +#11420 = CARTESIAN_POINT('',(4.776302662724,1.555250069354E-16,2.54)); +#11421 = LINE('',#11422,#11423); +#11422 = CARTESIAN_POINT('',(4.776302662724,1.555250069354E-16,2.54)); +#11423 = VECTOR('',#11424,1.); +#11424 = DIRECTION('',(-1.,0.,0.)); +#11425 = ORIENTED_EDGE('',*,*,#11426,.T.); +#11426 = EDGE_CURVE('',#11419,#11284,#11427,.T.); +#11427 = LINE('',#11428,#11429); +#11428 = CARTESIAN_POINT('',(4.776302662724,1.555250069354E-16,2.54)); +#11429 = VECTOR('',#11430,1.); +#11430 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11431 = ORIENTED_EDGE('',*,*,#11283,.F.); +#11432 = PLANE('',#11433); +#11433 = AXIS2_PLACEMENT_3D('',#11434,#11435,#11436); +#11434 = CARTESIAN_POINT('',(-3.81,-1.699482712645E-33, + -2.775557561563E-17)); +#11435 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11436 = DIRECTION('',(1.,0.,0.)); +#11437 = ADVANCED_FACE('',(#11438),#11463,.T.); +#11438 = FACE_BOUND('',#11439,.T.); +#11439 = EDGE_LOOP('',(#11440,#11448,#11456,#11462)); +#11440 = ORIENTED_EDGE('',*,*,#11441,.T.); +#11441 = EDGE_CURVE('',#11300,#11442,#11444,.T.); +#11442 = VERTEX_POINT('',#11443); +#11443 = CARTESIAN_POINT('',(4.776302662724,-2.5,-2.54)); +#11444 = LINE('',#11445,#11446); +#11445 = CARTESIAN_POINT('',(4.776302662724,-2.5,-2.54)); +#11446 = VECTOR('',#11447,1.); +#11447 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11448 = ORIENTED_EDGE('',*,*,#11449,.F.); +#11449 = EDGE_CURVE('',#11450,#11442,#11452,.T.); +#11450 = VERTEX_POINT('',#11451); +#11451 = CARTESIAN_POINT('',(4.776302662724,-1.555250069354E-16,-2.54)); +#11452 = LINE('',#11453,#11454); +#11453 = CARTESIAN_POINT('',(4.776302662724,-1.555250069354E-16,-2.54)); +#11454 = VECTOR('',#11455,1.); +#11455 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11456 = ORIENTED_EDGE('',*,*,#11457,.T.); +#11457 = EDGE_CURVE('',#11450,#11308,#11458,.T.); +#11458 = LINE('',#11459,#11460); +#11459 = CARTESIAN_POINT('',(4.776302662724,-1.555250069354E-16,-2.54)); +#11460 = VECTOR('',#11461,1.); +#11461 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11462 = ORIENTED_EDGE('',*,*,#11307,.T.); +#11463 = PLANE('',#11464); +#11464 = AXIS2_PLACEMENT_3D('',#11465,#11466,#11467); +#11465 = CARTESIAN_POINT('',(5.079999999999,-1.314354411715E-16, + -2.146574542281)); +#11466 = DIRECTION('',(0.791589841442,-3.741495699678E-17, + -0.611052798803)); +#11467 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11468 = ADVANCED_FACE('',(#11469),#11494,.T.); +#11469 = FACE_BOUND('',#11470,.T.); +#11470 = EDGE_LOOP('',(#11471,#11479,#11487,#11493)); +#11471 = ORIENTED_EDGE('',*,*,#11472,.T.); +#11472 = EDGE_CURVE('',#11442,#11473,#11475,.T.); +#11473 = VERTEX_POINT('',#11474); +#11474 = CARTESIAN_POINT('',(2.843697337275,-2.5,-2.54)); +#11475 = LINE('',#11476,#11477); +#11476 = CARTESIAN_POINT('',(4.776302662724,-2.5,-2.54)); +#11477 = VECTOR('',#11478,1.); +#11478 = DIRECTION('',(-1.,0.,0.)); +#11479 = ORIENTED_EDGE('',*,*,#11480,.F.); +#11480 = EDGE_CURVE('',#11481,#11473,#11483,.T.); +#11481 = VERTEX_POINT('',#11482); +#11482 = CARTESIAN_POINT('',(2.843697337275,-1.555250069354E-16,-2.54)); +#11483 = LINE('',#11484,#11485); +#11484 = CARTESIAN_POINT('',(2.843697337275,-1.555250069354E-16,-2.54)); +#11485 = VECTOR('',#11486,1.); +#11486 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11487 = ORIENTED_EDGE('',*,*,#11488,.F.); +#11488 = EDGE_CURVE('',#11450,#11481,#11489,.T.); +#11489 = LINE('',#11490,#11491); +#11490 = CARTESIAN_POINT('',(4.776302662724,-1.555250069354E-16,-2.54)); +#11491 = VECTOR('',#11492,1.); +#11492 = DIRECTION('',(-1.,0.,0.)); +#11493 = ORIENTED_EDGE('',*,*,#11449,.T.); +#11494 = PLANE('',#11495); +#11495 = AXIS2_PLACEMENT_3D('',#11496,#11497,#11498); +#11496 = CARTESIAN_POINT('',(4.776302662724,-1.555250069354E-16,-2.54)); +#11497 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#11498 = DIRECTION('',(1.,0.,0.)); +#11499 = ADVANCED_FACE('',(#11500),#11525,.T.); +#11500 = FACE_BOUND('',#11501,.T.); +#11501 = EDGE_LOOP('',(#11502,#11510,#11518,#11524)); +#11502 = ORIENTED_EDGE('',*,*,#11503,.T.); +#11503 = EDGE_CURVE('',#11473,#11504,#11506,.T.); +#11504 = VERTEX_POINT('',#11505); +#11505 = CARTESIAN_POINT('',(2.539999999999,-2.5,-2.146574542281)); +#11506 = LINE('',#11507,#11508); +#11507 = CARTESIAN_POINT('',(2.843697337275,-2.5,-2.54)); +#11508 = VECTOR('',#11509,1.); +#11509 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#11510 = ORIENTED_EDGE('',*,*,#11511,.F.); +#11511 = EDGE_CURVE('',#11512,#11504,#11514,.T.); +#11512 = VERTEX_POINT('',#11513); +#11513 = CARTESIAN_POINT('',(2.539999999999,-1.314354411715E-16, + -2.146574542281)); +#11514 = LINE('',#11515,#11516); +#11515 = CARTESIAN_POINT('',(2.539999999999,-1.314354411715E-16, + -2.146574542281)); +#11516 = VECTOR('',#11517,1.); +#11517 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11518 = ORIENTED_EDGE('',*,*,#11519,.F.); +#11519 = EDGE_CURVE('',#11481,#11512,#11520,.T.); +#11520 = LINE('',#11521,#11522); +#11521 = CARTESIAN_POINT('',(2.843697337275,-1.555250069354E-16,-2.54)); +#11522 = VECTOR('',#11523,1.); +#11523 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#11524 = ORIENTED_EDGE('',*,*,#11480,.T.); +#11525 = PLANE('',#11526); +#11526 = AXIS2_PLACEMENT_3D('',#11527,#11528,#11529); +#11527 = CARTESIAN_POINT('',(2.843697337275,-1.555250069354E-16,-2.54)); +#11528 = DIRECTION('',(-0.791589841442,-3.741495699678E-17, + -0.611052798803)); +#11529 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11530 = ADVANCED_FACE('',(#11531),#11556,.T.); +#11531 = FACE_BOUND('',#11532,.T.); +#11532 = EDGE_LOOP('',(#11533,#11543,#11549,#11550)); +#11533 = ORIENTED_EDGE('',*,*,#11534,.T.); +#11534 = EDGE_CURVE('',#11535,#11537,#11539,.T.); +#11535 = VERTEX_POINT('',#11536); +#11536 = CARTESIAN_POINT('',(2.539999999999,-2.5,2.146574542281)); +#11537 = VERTEX_POINT('',#11538); +#11538 = CARTESIAN_POINT('',(2.843697337275,-2.5,2.54)); +#11539 = LINE('',#11540,#11541); +#11540 = CARTESIAN_POINT('',(2.843697337275,-2.5,2.54)); +#11541 = VECTOR('',#11542,1.); +#11542 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11543 = ORIENTED_EDGE('',*,*,#11544,.F.); +#11544 = EDGE_CURVE('',#11411,#11537,#11545,.T.); +#11545 = LINE('',#11546,#11547); +#11546 = CARTESIAN_POINT('',(2.843697337275,1.555250069354E-16,2.54)); +#11547 = VECTOR('',#11548,1.); +#11548 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11549 = ORIENTED_EDGE('',*,*,#11410,.T.); +#11550 = ORIENTED_EDGE('',*,*,#11551,.T.); +#11551 = EDGE_CURVE('',#11403,#11535,#11552,.T.); +#11552 = LINE('',#11553,#11554); +#11553 = CARTESIAN_POINT('',(2.539999999999,1.314354411715E-16, + 2.146574542281)); +#11554 = VECTOR('',#11555,1.); +#11555 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11556 = PLANE('',#11557); +#11557 = AXIS2_PLACEMENT_3D('',#11558,#11559,#11560); +#11558 = CARTESIAN_POINT('',(2.54,1.314354411715E-16,2.146574542281)); +#11559 = DIRECTION('',(-0.791589841442,3.741495699678E-17,0.611052798803 + )); +#11560 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11561 = ADVANCED_FACE('',(#11562),#11580,.T.); +#11562 = FACE_BOUND('',#11563,.T.); +#11563 = EDGE_LOOP('',(#11564,#11572,#11578,#11579)); +#11564 = ORIENTED_EDGE('',*,*,#11565,.T.); +#11565 = EDGE_CURVE('',#11537,#11566,#11568,.T.); +#11566 = VERTEX_POINT('',#11567); +#11567 = CARTESIAN_POINT('',(4.776302662724,-2.5,2.54)); +#11568 = LINE('',#11569,#11570); +#11569 = CARTESIAN_POINT('',(4.776302662724,-2.5,2.54)); +#11570 = VECTOR('',#11571,1.); +#11571 = DIRECTION('',(1.,0.,0.)); +#11572 = ORIENTED_EDGE('',*,*,#11573,.F.); +#11573 = EDGE_CURVE('',#11419,#11566,#11574,.T.); +#11574 = LINE('',#11575,#11576); +#11575 = CARTESIAN_POINT('',(4.776302662724,1.555250069354E-16,2.54)); +#11576 = VECTOR('',#11577,1.); +#11577 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11578 = ORIENTED_EDGE('',*,*,#11418,.T.); +#11579 = ORIENTED_EDGE('',*,*,#11544,.T.); +#11580 = PLANE('',#11581); +#11581 = AXIS2_PLACEMENT_3D('',#11582,#11583,#11584); +#11582 = CARTESIAN_POINT('',(2.843697337275,1.555250069354E-16,2.54)); +#11583 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#11584 = DIRECTION('',(-1.,0.,0.)); +#11585 = ADVANCED_FACE('',(#11586),#11597,.T.); +#11586 = FACE_BOUND('',#11587,.T.); +#11587 = EDGE_LOOP('',(#11588,#11594,#11595,#11596)); +#11588 = ORIENTED_EDGE('',*,*,#11589,.T.); +#11589 = EDGE_CURVE('',#11566,#11292,#11590,.T.); +#11590 = LINE('',#11591,#11592); +#11591 = CARTESIAN_POINT('',(4.776302662724,-2.5,2.54)); +#11592 = VECTOR('',#11593,1.); +#11593 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11594 = ORIENTED_EDGE('',*,*,#11291,.F.); +#11595 = ORIENTED_EDGE('',*,*,#11426,.F.); +#11596 = ORIENTED_EDGE('',*,*,#11573,.T.); +#11597 = PLANE('',#11598); +#11598 = AXIS2_PLACEMENT_3D('',#11599,#11600,#11601); +#11599 = CARTESIAN_POINT('',(4.776302662724,1.555250069354E-16,2.54)); +#11600 = DIRECTION('',(0.791589841442,3.741495699678E-17,0.611052798803) + ); +#11601 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#11602 = ADVANCED_FACE('',(#11603,#11609,#11615,#11621,#11627,#11633, + #11639,#11645,#11651),#11810,.T.); +#11603 = FACE_BOUND('',#11604,.T.); +#11604 = EDGE_LOOP('',(#11605,#11606,#11607,#11608)); +#11605 = ORIENTED_EDGE('',*,*,#7056,.T.); +#11606 = ORIENTED_EDGE('',*,*,#6930,.T.); +#11607 = ORIENTED_EDGE('',*,*,#6890,.T.); +#11608 = ORIENTED_EDGE('',*,*,#6969,.T.); +#11609 = FACE_BOUND('',#11610,.T.); +#11610 = EDGE_LOOP('',(#11611,#11612,#11613,#11614)); +#11611 = ORIENTED_EDGE('',*,*,#7586,.T.); +#11612 = ORIENTED_EDGE('',*,*,#7460,.T.); +#11613 = ORIENTED_EDGE('',*,*,#7420,.T.); +#11614 = ORIENTED_EDGE('',*,*,#7499,.T.); +#11615 = FACE_BOUND('',#11616,.T.); +#11616 = EDGE_LOOP('',(#11617,#11618,#11619,#11620)); +#11617 = ORIENTED_EDGE('',*,*,#8116,.T.); +#11618 = ORIENTED_EDGE('',*,*,#7990,.T.); +#11619 = ORIENTED_EDGE('',*,*,#7950,.T.); +#11620 = ORIENTED_EDGE('',*,*,#8029,.T.); +#11621 = FACE_BOUND('',#11622,.T.); +#11622 = EDGE_LOOP('',(#11623,#11624,#11625,#11626)); +#11623 = ORIENTED_EDGE('',*,*,#8646,.T.); +#11624 = ORIENTED_EDGE('',*,*,#8520,.T.); +#11625 = ORIENTED_EDGE('',*,*,#8480,.T.); +#11626 = ORIENTED_EDGE('',*,*,#8559,.T.); +#11627 = FACE_BOUND('',#11628,.T.); +#11628 = EDGE_LOOP('',(#11629,#11630,#11631,#11632)); +#11629 = ORIENTED_EDGE('',*,*,#9176,.T.); +#11630 = ORIENTED_EDGE('',*,*,#9050,.T.); +#11631 = ORIENTED_EDGE('',*,*,#9010,.T.); +#11632 = ORIENTED_EDGE('',*,*,#9089,.T.); +#11633 = FACE_BOUND('',#11634,.T.); +#11634 = EDGE_LOOP('',(#11635,#11636,#11637,#11638)); +#11635 = ORIENTED_EDGE('',*,*,#9706,.T.); +#11636 = ORIENTED_EDGE('',*,*,#9580,.T.); +#11637 = ORIENTED_EDGE('',*,*,#9540,.T.); +#11638 = ORIENTED_EDGE('',*,*,#9619,.T.); +#11639 = FACE_BOUND('',#11640,.T.); +#11640 = EDGE_LOOP('',(#11641,#11642,#11643,#11644)); +#11641 = ORIENTED_EDGE('',*,*,#10236,.T.); +#11642 = ORIENTED_EDGE('',*,*,#10110,.T.); +#11643 = ORIENTED_EDGE('',*,*,#10070,.T.); +#11644 = ORIENTED_EDGE('',*,*,#10149,.T.); +#11645 = FACE_BOUND('',#11646,.T.); +#11646 = EDGE_LOOP('',(#11647,#11648,#11649,#11650)); +#11647 = ORIENTED_EDGE('',*,*,#10766,.T.); +#11648 = ORIENTED_EDGE('',*,*,#10640,.T.); +#11649 = ORIENTED_EDGE('',*,*,#10600,.T.); +#11650 = ORIENTED_EDGE('',*,*,#10679,.T.); +#11651 = FACE_BOUND('',#11652,.T.); +#11652 = EDGE_LOOP('',(#11653,#11661,#11669,#11677,#11685,#11693,#11701, + #11709,#11717,#11725,#11733,#11741,#11749,#11757,#11765,#11773, + #11781,#11789,#11797,#11803,#11804,#11805,#11806,#11807,#11808, + #11809)); +#11653 = ORIENTED_EDGE('',*,*,#11654,.F.); +#11654 = EDGE_CURVE('',#11655,#11535,#11657,.T.); +#11655 = VERTEX_POINT('',#11656); +#11656 = CARTESIAN_POINT('',(2.236302662724,-2.5,2.54)); +#11657 = LINE('',#11658,#11659); +#11658 = CARTESIAN_POINT('',(2.236302662724,-2.5,2.54)); +#11659 = VECTOR('',#11660,1.); +#11660 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11661 = ORIENTED_EDGE('',*,*,#11662,.F.); +#11662 = EDGE_CURVE('',#11663,#11655,#11665,.T.); +#11663 = VERTEX_POINT('',#11664); +#11664 = CARTESIAN_POINT('',(0.303697337275,-2.5,2.54)); +#11665 = LINE('',#11666,#11667); +#11666 = CARTESIAN_POINT('',(2.236302662724,-2.5,2.54)); +#11667 = VECTOR('',#11668,1.); +#11668 = DIRECTION('',(1.,0.,0.)); +#11669 = ORIENTED_EDGE('',*,*,#11670,.F.); +#11670 = EDGE_CURVE('',#11671,#11663,#11673,.T.); +#11671 = VERTEX_POINT('',#11672); +#11672 = CARTESIAN_POINT('',(-9.459100169806E-13,-2.5,2.146574542281)); +#11673 = LINE('',#11674,#11675); +#11674 = CARTESIAN_POINT('',(0.303697337275,-2.5,2.54)); +#11675 = VECTOR('',#11676,1.); +#11676 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11677 = ORIENTED_EDGE('',*,*,#11678,.F.); +#11678 = EDGE_CURVE('',#11679,#11671,#11681,.T.); +#11679 = VERTEX_POINT('',#11680); +#11680 = CARTESIAN_POINT('',(-0.303697337276,-2.5,2.54)); +#11681 = LINE('',#11682,#11683); +#11682 = CARTESIAN_POINT('',(-0.303697337276,-2.5,2.54)); +#11683 = VECTOR('',#11684,1.); +#11684 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11685 = ORIENTED_EDGE('',*,*,#11686,.F.); +#11686 = EDGE_CURVE('',#11687,#11679,#11689,.T.); +#11687 = VERTEX_POINT('',#11688); +#11688 = CARTESIAN_POINT('',(-2.236302662725,-2.5,2.54)); +#11689 = LINE('',#11690,#11691); +#11690 = CARTESIAN_POINT('',(-0.303697337276,-2.5,2.54)); +#11691 = VECTOR('',#11692,1.); +#11692 = DIRECTION('',(1.,0.,0.)); +#11693 = ORIENTED_EDGE('',*,*,#11694,.F.); +#11694 = EDGE_CURVE('',#11695,#11687,#11697,.T.); +#11695 = VERTEX_POINT('',#11696); +#11696 = CARTESIAN_POINT('',(-2.54,-2.5,2.146574542281)); +#11697 = LINE('',#11698,#11699); +#11698 = CARTESIAN_POINT('',(-2.236302662725,-2.5,2.54)); +#11699 = VECTOR('',#11700,1.); +#11700 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11701 = ORIENTED_EDGE('',*,*,#11702,.F.); +#11702 = EDGE_CURVE('',#11703,#11695,#11705,.T.); +#11703 = VERTEX_POINT('',#11704); +#11704 = CARTESIAN_POINT('',(-2.843697337275,-2.5,2.54)); +#11705 = LINE('',#11706,#11707); +#11706 = CARTESIAN_POINT('',(-2.843697337275,-2.5,2.54)); +#11707 = VECTOR('',#11708,1.); +#11708 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11709 = ORIENTED_EDGE('',*,*,#11710,.F.); +#11710 = EDGE_CURVE('',#11711,#11703,#11713,.T.); +#11711 = VERTEX_POINT('',#11712); +#11712 = CARTESIAN_POINT('',(-4.776302662724,-2.5,2.54)); +#11713 = LINE('',#11714,#11715); +#11714 = CARTESIAN_POINT('',(-2.843697337275,-2.5,2.54)); +#11715 = VECTOR('',#11716,1.); +#11716 = DIRECTION('',(1.,0.,0.)); +#11717 = ORIENTED_EDGE('',*,*,#11718,.F.); +#11718 = EDGE_CURVE('',#11719,#11711,#11721,.T.); +#11719 = VERTEX_POINT('',#11720); +#11720 = CARTESIAN_POINT('',(-5.079999999999,-2.5,2.146574542281)); +#11721 = LINE('',#11722,#11723); +#11722 = CARTESIAN_POINT('',(-4.776302662724,-2.5,2.54)); +#11723 = VECTOR('',#11724,1.); +#11724 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11725 = ORIENTED_EDGE('',*,*,#11726,.F.); +#11726 = EDGE_CURVE('',#11727,#11719,#11729,.T.); +#11727 = VERTEX_POINT('',#11728); +#11728 = CARTESIAN_POINT('',(-5.079999999999,-2.5,-2.146574542281)); +#11729 = LINE('',#11730,#11731); +#11730 = CARTESIAN_POINT('',(-5.079999999999,-2.5,2.146574542281)); +#11731 = VECTOR('',#11732,1.); +#11732 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#11733 = ORIENTED_EDGE('',*,*,#11734,.F.); +#11734 = EDGE_CURVE('',#11735,#11727,#11737,.T.); +#11735 = VERTEX_POINT('',#11736); +#11736 = CARTESIAN_POINT('',(-4.776302662724,-2.5,-2.54)); +#11737 = LINE('',#11738,#11739); +#11738 = CARTESIAN_POINT('',(-4.776302662724,-2.5,-2.54)); +#11739 = VECTOR('',#11740,1.); +#11740 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#11741 = ORIENTED_EDGE('',*,*,#11742,.F.); +#11742 = EDGE_CURVE('',#11743,#11735,#11745,.T.); +#11743 = VERTEX_POINT('',#11744); +#11744 = CARTESIAN_POINT('',(-2.843697337275,-2.5,-2.54)); +#11745 = LINE('',#11746,#11747); +#11746 = CARTESIAN_POINT('',(-2.843697337275,-2.5,-2.54)); +#11747 = VECTOR('',#11748,1.); +#11748 = DIRECTION('',(-1.,0.,0.)); +#11749 = ORIENTED_EDGE('',*,*,#11750,.F.); +#11750 = EDGE_CURVE('',#11751,#11743,#11753,.T.); +#11751 = VERTEX_POINT('',#11752); +#11752 = CARTESIAN_POINT('',(-2.54,-2.5,-2.146574542281)); +#11753 = LINE('',#11754,#11755); +#11754 = CARTESIAN_POINT('',(-2.843697337275,-2.5,-2.54)); +#11755 = VECTOR('',#11756,1.); +#11756 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11757 = ORIENTED_EDGE('',*,*,#11758,.F.); +#11758 = EDGE_CURVE('',#11759,#11751,#11761,.T.); +#11759 = VERTEX_POINT('',#11760); +#11760 = CARTESIAN_POINT('',(-2.236302662725,-2.5,-2.54)); +#11761 = LINE('',#11762,#11763); +#11762 = CARTESIAN_POINT('',(-2.236302662725,-2.5,-2.54)); +#11763 = VECTOR('',#11764,1.); +#11764 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#11765 = ORIENTED_EDGE('',*,*,#11766,.F.); +#11766 = EDGE_CURVE('',#11767,#11759,#11769,.T.); +#11767 = VERTEX_POINT('',#11768); +#11768 = CARTESIAN_POINT('',(-0.303697337276,-2.5,-2.54)); +#11769 = LINE('',#11770,#11771); +#11770 = CARTESIAN_POINT('',(-0.303697337276,-2.5,-2.54)); +#11771 = VECTOR('',#11772,1.); +#11772 = DIRECTION('',(-1.,0.,0.)); +#11773 = ORIENTED_EDGE('',*,*,#11774,.F.); +#11774 = EDGE_CURVE('',#11775,#11767,#11777,.T.); +#11775 = VERTEX_POINT('',#11776); +#11776 = CARTESIAN_POINT('',(-9.459100169806E-13,-2.5,-2.146574542281)); +#11777 = LINE('',#11778,#11779); +#11778 = CARTESIAN_POINT('',(-0.303697337276,-2.5,-2.54)); +#11779 = VECTOR('',#11780,1.); +#11780 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11781 = ORIENTED_EDGE('',*,*,#11782,.F.); +#11782 = EDGE_CURVE('',#11783,#11775,#11785,.T.); +#11783 = VERTEX_POINT('',#11784); +#11784 = CARTESIAN_POINT('',(0.303697337275,-2.5,-2.54)); +#11785 = LINE('',#11786,#11787); +#11786 = CARTESIAN_POINT('',(0.303697337275,-2.5,-2.54)); +#11787 = VECTOR('',#11788,1.); +#11788 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#11789 = ORIENTED_EDGE('',*,*,#11790,.F.); +#11790 = EDGE_CURVE('',#11791,#11783,#11793,.T.); +#11791 = VERTEX_POINT('',#11792); +#11792 = CARTESIAN_POINT('',(2.236302662724,-2.5,-2.54)); +#11793 = LINE('',#11794,#11795); +#11794 = CARTESIAN_POINT('',(2.236302662724,-2.5,-2.54)); +#11795 = VECTOR('',#11796,1.); +#11796 = DIRECTION('',(-1.,0.,0.)); +#11797 = ORIENTED_EDGE('',*,*,#11798,.F.); +#11798 = EDGE_CURVE('',#11504,#11791,#11799,.T.); +#11799 = LINE('',#11800,#11801); +#11800 = CARTESIAN_POINT('',(2.236302662724,-2.5,-2.54)); +#11801 = VECTOR('',#11802,1.); +#11802 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11803 = ORIENTED_EDGE('',*,*,#11503,.F.); +#11804 = ORIENTED_EDGE('',*,*,#11472,.F.); +#11805 = ORIENTED_EDGE('',*,*,#11441,.F.); +#11806 = ORIENTED_EDGE('',*,*,#11299,.F.); +#11807 = ORIENTED_EDGE('',*,*,#11589,.F.); +#11808 = ORIENTED_EDGE('',*,*,#11565,.F.); +#11809 = ORIENTED_EDGE('',*,*,#11534,.F.); +#11810 = PLANE('',#11811); +#11811 = AXIS2_PLACEMENT_3D('',#11812,#11813,#11814); +#11812 = CARTESIAN_POINT('',(-3.81,-2.5,1.253202186122E-16)); +#11813 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11814 = DIRECTION('',(1.,0.,0.)); +#11815 = ADVANCED_FACE('',(#11816),#11834,.T.); +#11816 = FACE_BOUND('',#11817,.T.); +#11817 = EDGE_LOOP('',(#11818,#11819,#11827,#11833)); +#11818 = ORIENTED_EDGE('',*,*,#11798,.T.); +#11819 = ORIENTED_EDGE('',*,*,#11820,.F.); +#11820 = EDGE_CURVE('',#11821,#11791,#11823,.T.); +#11821 = VERTEX_POINT('',#11822); +#11822 = CARTESIAN_POINT('',(2.236302662724,-1.555250069354E-16,-2.54)); +#11823 = LINE('',#11824,#11825); +#11824 = CARTESIAN_POINT('',(2.236302662724,-1.555250069354E-16,-2.54)); +#11825 = VECTOR('',#11826,1.); +#11826 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11827 = ORIENTED_EDGE('',*,*,#11828,.T.); +#11828 = EDGE_CURVE('',#11821,#11512,#11829,.T.); +#11829 = LINE('',#11830,#11831); +#11830 = CARTESIAN_POINT('',(2.236302662724,-1.555250069354E-16,-2.54)); +#11831 = VECTOR('',#11832,1.); +#11832 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11833 = ORIENTED_EDGE('',*,*,#11511,.T.); +#11834 = PLANE('',#11835); +#11835 = AXIS2_PLACEMENT_3D('',#11836,#11837,#11838); +#11836 = CARTESIAN_POINT('',(2.539999999999,-1.314354411715E-16, + -2.146574542281)); +#11837 = DIRECTION('',(0.791589841442,-3.741495699678E-17, + -0.611052798803)); +#11838 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11839 = ADVANCED_FACE('',(#11840),#11858,.T.); +#11840 = FACE_BOUND('',#11841,.T.); +#11841 = EDGE_LOOP('',(#11842,#11843,#11851,#11857)); +#11842 = ORIENTED_EDGE('',*,*,#11790,.T.); +#11843 = ORIENTED_EDGE('',*,*,#11844,.F.); +#11844 = EDGE_CURVE('',#11845,#11783,#11847,.T.); +#11845 = VERTEX_POINT('',#11846); +#11846 = CARTESIAN_POINT('',(0.303697337275,-1.555250069354E-16,-2.54)); +#11847 = LINE('',#11848,#11849); +#11848 = CARTESIAN_POINT('',(0.303697337275,-1.555250069354E-16,-2.54)); +#11849 = VECTOR('',#11850,1.); +#11850 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11851 = ORIENTED_EDGE('',*,*,#11852,.F.); +#11852 = EDGE_CURVE('',#11821,#11845,#11853,.T.); +#11853 = LINE('',#11854,#11855); +#11854 = CARTESIAN_POINT('',(2.236302662724,-1.555250069354E-16,-2.54)); +#11855 = VECTOR('',#11856,1.); +#11856 = DIRECTION('',(-1.,0.,0.)); +#11857 = ORIENTED_EDGE('',*,*,#11820,.T.); +#11858 = PLANE('',#11859); +#11859 = AXIS2_PLACEMENT_3D('',#11860,#11861,#11862); +#11860 = CARTESIAN_POINT('',(2.236302662724,-1.555250069354E-16,-2.54)); +#11861 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#11862 = DIRECTION('',(1.,0.,0.)); +#11863 = ADVANCED_FACE('',(#11864),#11882,.T.); +#11864 = FACE_BOUND('',#11865,.T.); +#11865 = EDGE_LOOP('',(#11866,#11867,#11875,#11881)); +#11866 = ORIENTED_EDGE('',*,*,#11782,.T.); +#11867 = ORIENTED_EDGE('',*,*,#11868,.F.); +#11868 = EDGE_CURVE('',#11869,#11775,#11871,.T.); +#11869 = VERTEX_POINT('',#11870); +#11870 = CARTESIAN_POINT('',(-9.459100169806E-13,-1.314354411715E-16, + -2.146574542281)); +#11871 = LINE('',#11872,#11873); +#11872 = CARTESIAN_POINT('',(-9.459100169806E-13,-1.314354411715E-16, + -2.146574542281)); +#11873 = VECTOR('',#11874,1.); +#11874 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11875 = ORIENTED_EDGE('',*,*,#11876,.F.); +#11876 = EDGE_CURVE('',#11845,#11869,#11877,.T.); +#11877 = LINE('',#11878,#11879); +#11878 = CARTESIAN_POINT('',(0.303697337275,-1.555250069354E-16,-2.54)); +#11879 = VECTOR('',#11880,1.); +#11880 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#11881 = ORIENTED_EDGE('',*,*,#11844,.T.); +#11882 = PLANE('',#11883); +#11883 = AXIS2_PLACEMENT_3D('',#11884,#11885,#11886); +#11884 = CARTESIAN_POINT('',(0.303697337275,-1.555250069354E-16,-2.54)); +#11885 = DIRECTION('',(-0.791589841442,-3.741495699678E-17, + -0.611052798803)); +#11886 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11887 = ADVANCED_FACE('',(#11888),#11904,.T.); +#11888 = FACE_BOUND('',#11889,.T.); +#11889 = EDGE_LOOP('',(#11890,#11891,#11897,#11898)); +#11890 = ORIENTED_EDGE('',*,*,#11670,.T.); +#11891 = ORIENTED_EDGE('',*,*,#11892,.F.); +#11892 = EDGE_CURVE('',#11387,#11663,#11893,.T.); +#11893 = LINE('',#11894,#11895); +#11894 = CARTESIAN_POINT('',(0.303697337275,1.555250069354E-16,2.54)); +#11895 = VECTOR('',#11896,1.); +#11896 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11897 = ORIENTED_EDGE('',*,*,#11386,.T.); +#11898 = ORIENTED_EDGE('',*,*,#11899,.T.); +#11899 = EDGE_CURVE('',#11379,#11671,#11900,.T.); +#11900 = LINE('',#11901,#11902); +#11901 = CARTESIAN_POINT('',(-9.459100169806E-13,1.314354411715E-16, + 2.146574542281)); +#11902 = VECTOR('',#11903,1.); +#11903 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11904 = PLANE('',#11905); +#11905 = AXIS2_PLACEMENT_3D('',#11906,#11907,#11908); +#11906 = CARTESIAN_POINT('',(0.,1.314354411715E-16,2.146574542281)); +#11907 = DIRECTION('',(-0.791589841442,3.741495699678E-17,0.611052798803 + )); +#11908 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#11909 = ADVANCED_FACE('',(#11910),#11921,.T.); +#11910 = FACE_BOUND('',#11911,.T.); +#11911 = EDGE_LOOP('',(#11912,#11913,#11919,#11920)); +#11912 = ORIENTED_EDGE('',*,*,#11662,.T.); +#11913 = ORIENTED_EDGE('',*,*,#11914,.F.); +#11914 = EDGE_CURVE('',#11395,#11655,#11915,.T.); +#11915 = LINE('',#11916,#11917); +#11916 = CARTESIAN_POINT('',(2.236302662724,1.555250069354E-16,2.54)); +#11917 = VECTOR('',#11918,1.); +#11918 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11919 = ORIENTED_EDGE('',*,*,#11394,.T.); +#11920 = ORIENTED_EDGE('',*,*,#11892,.T.); +#11921 = PLANE('',#11922); +#11922 = AXIS2_PLACEMENT_3D('',#11923,#11924,#11925); +#11923 = CARTESIAN_POINT('',(0.303697337275,1.555250069354E-16,2.54)); +#11924 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#11925 = DIRECTION('',(-1.,0.,0.)); +#11926 = ADVANCED_FACE('',(#11927),#11933,.T.); +#11927 = FACE_BOUND('',#11928,.T.); +#11928 = EDGE_LOOP('',(#11929,#11930,#11931,#11932)); +#11929 = ORIENTED_EDGE('',*,*,#11654,.T.); +#11930 = ORIENTED_EDGE('',*,*,#11551,.F.); +#11931 = ORIENTED_EDGE('',*,*,#11402,.F.); +#11932 = ORIENTED_EDGE('',*,*,#11914,.T.); +#11933 = PLANE('',#11934); +#11934 = AXIS2_PLACEMENT_3D('',#11935,#11936,#11937); +#11935 = CARTESIAN_POINT('',(2.236302662724,1.555250069354E-16,2.54)); +#11936 = DIRECTION('',(0.791589841442,3.741495699678E-17,0.611052798803) + ); +#11937 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#11938 = ADVANCED_FACE('',(#11939),#11957,.T.); +#11939 = FACE_BOUND('',#11940,.T.); +#11940 = EDGE_LOOP('',(#11941,#11942,#11950,#11956)); +#11941 = ORIENTED_EDGE('',*,*,#11774,.T.); +#11942 = ORIENTED_EDGE('',*,*,#11943,.F.); +#11943 = EDGE_CURVE('',#11944,#11767,#11946,.T.); +#11944 = VERTEX_POINT('',#11945); +#11945 = CARTESIAN_POINT('',(-0.303697337276,-1.555250069354E-16,-2.54) + ); +#11946 = LINE('',#11947,#11948); +#11947 = CARTESIAN_POINT('',(-0.303697337276,-1.555250069354E-16,-2.54) + ); +#11948 = VECTOR('',#11949,1.); +#11949 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11950 = ORIENTED_EDGE('',*,*,#11951,.T.); +#11951 = EDGE_CURVE('',#11944,#11869,#11952,.T.); +#11952 = LINE('',#11953,#11954); +#11953 = CARTESIAN_POINT('',(-0.303697337276,-1.555250069354E-16,-2.54) + ); +#11954 = VECTOR('',#11955,1.); +#11955 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11956 = ORIENTED_EDGE('',*,*,#11868,.T.); +#11957 = PLANE('',#11958); +#11958 = AXIS2_PLACEMENT_3D('',#11959,#11960,#11961); +#11959 = CARTESIAN_POINT('',(-9.459100169806E-13,-1.314354411715E-16, + -2.146574542281)); +#11960 = DIRECTION('',(0.791589841442,-3.741495699678E-17, + -0.611052798803)); +#11961 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#11962 = ADVANCED_FACE('',(#11963),#11981,.T.); +#11963 = FACE_BOUND('',#11964,.T.); +#11964 = EDGE_LOOP('',(#11965,#11966,#11974,#11980)); +#11965 = ORIENTED_EDGE('',*,*,#11766,.T.); +#11966 = ORIENTED_EDGE('',*,*,#11967,.F.); +#11967 = EDGE_CURVE('',#11968,#11759,#11970,.T.); +#11968 = VERTEX_POINT('',#11969); +#11969 = CARTESIAN_POINT('',(-2.236302662725,-1.555250069354E-16,-2.54) + ); +#11970 = LINE('',#11971,#11972); +#11971 = CARTESIAN_POINT('',(-2.236302662725,-1.555250069354E-16,-2.54) + ); +#11972 = VECTOR('',#11973,1.); +#11973 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11974 = ORIENTED_EDGE('',*,*,#11975,.F.); +#11975 = EDGE_CURVE('',#11944,#11968,#11976,.T.); +#11976 = LINE('',#11977,#11978); +#11977 = CARTESIAN_POINT('',(-0.303697337276,-1.555250069354E-16,-2.54) + ); +#11978 = VECTOR('',#11979,1.); +#11979 = DIRECTION('',(-1.,0.,0.)); +#11980 = ORIENTED_EDGE('',*,*,#11943,.T.); +#11981 = PLANE('',#11982); +#11982 = AXIS2_PLACEMENT_3D('',#11983,#11984,#11985); +#11983 = CARTESIAN_POINT('',(-0.303697337276,-1.555250069354E-16,-2.54) + ); +#11984 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#11985 = DIRECTION('',(1.,0.,0.)); +#11986 = ADVANCED_FACE('',(#11987),#12005,.T.); +#11987 = FACE_BOUND('',#11988,.T.); +#11988 = EDGE_LOOP('',(#11989,#11990,#11998,#12004)); +#11989 = ORIENTED_EDGE('',*,*,#11758,.T.); +#11990 = ORIENTED_EDGE('',*,*,#11991,.F.); +#11991 = EDGE_CURVE('',#11992,#11751,#11994,.T.); +#11992 = VERTEX_POINT('',#11993); +#11993 = CARTESIAN_POINT('',(-2.54,-1.314354411715E-16,-2.146574542281) + ); +#11994 = LINE('',#11995,#11996); +#11995 = CARTESIAN_POINT('',(-2.54,-1.314354411715E-16,-2.146574542281) + ); +#11996 = VECTOR('',#11997,1.); +#11997 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#11998 = ORIENTED_EDGE('',*,*,#11999,.F.); +#11999 = EDGE_CURVE('',#11968,#11992,#12000,.T.); +#12000 = LINE('',#12001,#12002); +#12001 = CARTESIAN_POINT('',(-2.236302662725,-1.555250069354E-16,-2.54) + ); +#12002 = VECTOR('',#12003,1.); +#12003 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#12004 = ORIENTED_EDGE('',*,*,#11967,.T.); +#12005 = PLANE('',#12006); +#12006 = AXIS2_PLACEMENT_3D('',#12007,#12008,#12009); +#12007 = CARTESIAN_POINT('',(-2.236302662725,-1.555250069354E-16,-2.54) + ); +#12008 = DIRECTION('',(-0.791589841442,-3.741495699678E-17, + -0.611052798803)); +#12009 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#12010 = ADVANCED_FACE('',(#12011),#12027,.T.); +#12011 = FACE_BOUND('',#12012,.T.); +#12012 = EDGE_LOOP('',(#12013,#12014,#12020,#12021)); +#12013 = ORIENTED_EDGE('',*,*,#11694,.T.); +#12014 = ORIENTED_EDGE('',*,*,#12015,.F.); +#12015 = EDGE_CURVE('',#11363,#11687,#12016,.T.); +#12016 = LINE('',#12017,#12018); +#12017 = CARTESIAN_POINT('',(-2.236302662725,1.555250069354E-16,2.54)); +#12018 = VECTOR('',#12019,1.); +#12019 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12020 = ORIENTED_EDGE('',*,*,#11362,.T.); +#12021 = ORIENTED_EDGE('',*,*,#12022,.T.); +#12022 = EDGE_CURVE('',#11355,#11695,#12023,.T.); +#12023 = LINE('',#12024,#12025); +#12024 = CARTESIAN_POINT('',(-2.54,1.314354411715E-16,2.146574542281)); +#12025 = VECTOR('',#12026,1.); +#12026 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12027 = PLANE('',#12028); +#12028 = AXIS2_PLACEMENT_3D('',#12029,#12030,#12031); +#12029 = CARTESIAN_POINT('',(-2.54,1.314354411715E-16,2.146574542281)); +#12030 = DIRECTION('',(-0.791589841442,3.741495699678E-17,0.611052798803 + )); +#12031 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#12032 = ADVANCED_FACE('',(#12033),#12044,.T.); +#12033 = FACE_BOUND('',#12034,.T.); +#12034 = EDGE_LOOP('',(#12035,#12036,#12042,#12043)); +#12035 = ORIENTED_EDGE('',*,*,#11686,.T.); +#12036 = ORIENTED_EDGE('',*,*,#12037,.F.); +#12037 = EDGE_CURVE('',#11371,#11679,#12038,.T.); +#12038 = LINE('',#12039,#12040); +#12039 = CARTESIAN_POINT('',(-0.303697337276,1.555250069354E-16,2.54)); +#12040 = VECTOR('',#12041,1.); +#12041 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12042 = ORIENTED_EDGE('',*,*,#11370,.T.); +#12043 = ORIENTED_EDGE('',*,*,#12015,.T.); +#12044 = PLANE('',#12045); +#12045 = AXIS2_PLACEMENT_3D('',#12046,#12047,#12048); +#12046 = CARTESIAN_POINT('',(-2.236302662725,1.555250069354E-16,2.54)); +#12047 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#12048 = DIRECTION('',(-1.,0.,0.)); +#12049 = ADVANCED_FACE('',(#12050),#12056,.T.); +#12050 = FACE_BOUND('',#12051,.T.); +#12051 = EDGE_LOOP('',(#12052,#12053,#12054,#12055)); +#12052 = ORIENTED_EDGE('',*,*,#11678,.T.); +#12053 = ORIENTED_EDGE('',*,*,#11899,.F.); +#12054 = ORIENTED_EDGE('',*,*,#11378,.F.); +#12055 = ORIENTED_EDGE('',*,*,#12037,.T.); +#12056 = PLANE('',#12057); +#12057 = AXIS2_PLACEMENT_3D('',#12058,#12059,#12060); +#12058 = CARTESIAN_POINT('',(-0.303697337276,1.555250069354E-16,2.54)); +#12059 = DIRECTION('',(0.791589841442,3.741495699678E-17,0.611052798803) + ); +#12060 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#12061 = ADVANCED_FACE('',(#12062),#12078,.T.); +#12062 = FACE_BOUND('',#12063,.T.); +#12063 = EDGE_LOOP('',(#12064,#12065,#12071,#12072)); +#12064 = ORIENTED_EDGE('',*,*,#11718,.T.); +#12065 = ORIENTED_EDGE('',*,*,#12066,.F.); +#12066 = EDGE_CURVE('',#11339,#11711,#12067,.T.); +#12067 = LINE('',#12068,#12069); +#12068 = CARTESIAN_POINT('',(-4.776302662724,1.555250069354E-16,2.54)); +#12069 = VECTOR('',#12070,1.); +#12070 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12071 = ORIENTED_EDGE('',*,*,#11338,.T.); +#12072 = ORIENTED_EDGE('',*,*,#12073,.T.); +#12073 = EDGE_CURVE('',#11331,#11719,#12074,.T.); +#12074 = LINE('',#12075,#12076); +#12075 = CARTESIAN_POINT('',(-5.079999999999,1.314354411715E-16, + 2.146574542281)); +#12076 = VECTOR('',#12077,1.); +#12077 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12078 = PLANE('',#12079); +#12079 = AXIS2_PLACEMENT_3D('',#12080,#12081,#12082); +#12080 = CARTESIAN_POINT('',(-5.079999999999,1.314354411715E-16, + 2.146574542281)); +#12081 = DIRECTION('',(-0.791589841442,3.741495699678E-17,0.611052798803 + )); +#12082 = DIRECTION('',(-0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#12083 = ADVANCED_FACE('',(#12084),#12095,.T.); +#12084 = FACE_BOUND('',#12085,.T.); +#12085 = EDGE_LOOP('',(#12086,#12087,#12093,#12094)); +#12086 = ORIENTED_EDGE('',*,*,#11710,.T.); +#12087 = ORIENTED_EDGE('',*,*,#12088,.F.); +#12088 = EDGE_CURVE('',#11347,#11703,#12089,.T.); +#12089 = LINE('',#12090,#12091); +#12090 = CARTESIAN_POINT('',(-2.843697337275,1.555250069354E-16,2.54)); +#12091 = VECTOR('',#12092,1.); +#12092 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12093 = ORIENTED_EDGE('',*,*,#11346,.T.); +#12094 = ORIENTED_EDGE('',*,*,#12066,.T.); +#12095 = PLANE('',#12096); +#12096 = AXIS2_PLACEMENT_3D('',#12097,#12098,#12099); +#12097 = CARTESIAN_POINT('',(-4.776302662724,1.555250069354E-16,2.54)); +#12098 = DIRECTION('',(0.,6.123031769112E-17,1.)); +#12099 = DIRECTION('',(-1.,0.,0.)); +#12100 = ADVANCED_FACE('',(#12101),#12107,.T.); +#12101 = FACE_BOUND('',#12102,.T.); +#12102 = EDGE_LOOP('',(#12103,#12104,#12105,#12106)); +#12103 = ORIENTED_EDGE('',*,*,#11702,.T.); +#12104 = ORIENTED_EDGE('',*,*,#12022,.F.); +#12105 = ORIENTED_EDGE('',*,*,#11354,.F.); +#12106 = ORIENTED_EDGE('',*,*,#12088,.T.); +#12107 = PLANE('',#12108); +#12108 = AXIS2_PLACEMENT_3D('',#12109,#12110,#12111); +#12109 = CARTESIAN_POINT('',(-2.843697337275,1.555250069354E-16,2.54)); +#12110 = DIRECTION('',(0.791589841442,3.741495699678E-17,0.611052798803) + ); +#12111 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#12112 = ADVANCED_FACE('',(#12113),#12131,.T.); +#12113 = FACE_BOUND('',#12114,.T.); +#12114 = EDGE_LOOP('',(#12115,#12116,#12124,#12130)); +#12115 = ORIENTED_EDGE('',*,*,#11750,.T.); +#12116 = ORIENTED_EDGE('',*,*,#12117,.F.); +#12117 = EDGE_CURVE('',#12118,#11743,#12120,.T.); +#12118 = VERTEX_POINT('',#12119); +#12119 = CARTESIAN_POINT('',(-2.843697337275,-1.555250069354E-16,-2.54) + ); +#12120 = LINE('',#12121,#12122); +#12121 = CARTESIAN_POINT('',(-2.843697337275,-1.555250069354E-16,-2.54) + ); +#12122 = VECTOR('',#12123,1.); +#12123 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12124 = ORIENTED_EDGE('',*,*,#12125,.T.); +#12125 = EDGE_CURVE('',#12118,#11992,#12126,.T.); +#12126 = LINE('',#12127,#12128); +#12127 = CARTESIAN_POINT('',(-2.843697337275,-1.555250069354E-16,-2.54) + ); +#12128 = VECTOR('',#12129,1.); +#12129 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#12130 = ORIENTED_EDGE('',*,*,#11991,.T.); +#12131 = PLANE('',#12132); +#12132 = AXIS2_PLACEMENT_3D('',#12133,#12134,#12135); +#12133 = CARTESIAN_POINT('',(-2.54,-1.314354411715E-16,-2.146574542281) + ); +#12134 = DIRECTION('',(0.791589841442,-3.741495699678E-17, + -0.611052798803)); +#12135 = DIRECTION('',(0.611052798803,4.846929747257E-17,0.791589841442) + ); +#12136 = ADVANCED_FACE('',(#12137),#12155,.T.); +#12137 = FACE_BOUND('',#12138,.T.); +#12138 = EDGE_LOOP('',(#12139,#12140,#12148,#12154)); +#12139 = ORIENTED_EDGE('',*,*,#11742,.T.); +#12140 = ORIENTED_EDGE('',*,*,#12141,.F.); +#12141 = EDGE_CURVE('',#12142,#11735,#12144,.T.); +#12142 = VERTEX_POINT('',#12143); +#12143 = CARTESIAN_POINT('',(-4.776302662724,-1.555250069354E-16,-2.54) + ); +#12144 = LINE('',#12145,#12146); +#12145 = CARTESIAN_POINT('',(-4.776302662724,-1.555250069354E-16,-2.54) + ); +#12146 = VECTOR('',#12147,1.); +#12147 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12148 = ORIENTED_EDGE('',*,*,#12149,.F.); +#12149 = EDGE_CURVE('',#12118,#12142,#12150,.T.); +#12150 = LINE('',#12151,#12152); +#12151 = CARTESIAN_POINT('',(-2.843697337275,-1.555250069354E-16,-2.54) + ); +#12152 = VECTOR('',#12153,1.); +#12153 = DIRECTION('',(-1.,0.,0.)); +#12154 = ORIENTED_EDGE('',*,*,#12117,.T.); +#12155 = PLANE('',#12156); +#12156 = AXIS2_PLACEMENT_3D('',#12157,#12158,#12159); +#12157 = CARTESIAN_POINT('',(-2.843697337275,-1.555250069354E-16,-2.54) + ); +#12158 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#12159 = DIRECTION('',(1.,0.,0.)); +#12160 = ADVANCED_FACE('',(#12161),#12179,.T.); +#12161 = FACE_BOUND('',#12162,.T.); +#12162 = EDGE_LOOP('',(#12163,#12164,#12172,#12178)); +#12163 = ORIENTED_EDGE('',*,*,#11734,.T.); +#12164 = ORIENTED_EDGE('',*,*,#12165,.F.); +#12165 = EDGE_CURVE('',#12166,#11727,#12168,.T.); +#12166 = VERTEX_POINT('',#12167); +#12167 = CARTESIAN_POINT('',(-5.079999999999,-1.314354411715E-16, + -2.146574542281)); +#12168 = LINE('',#12169,#12170); +#12169 = CARTESIAN_POINT('',(-5.079999999999,-1.314354411715E-16, + -2.146574542281)); +#12170 = VECTOR('',#12171,1.); +#12171 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12172 = ORIENTED_EDGE('',*,*,#12173,.F.); +#12173 = EDGE_CURVE('',#12142,#12166,#12174,.T.); +#12174 = LINE('',#12175,#12176); +#12175 = CARTESIAN_POINT('',(-4.776302662724,-1.555250069354E-16,-2.54) + ); +#12176 = VECTOR('',#12177,1.); +#12177 = DIRECTION('',(-0.611052798803,4.846929747257E-17,0.791589841442 + )); +#12178 = ORIENTED_EDGE('',*,*,#12141,.T.); +#12179 = PLANE('',#12180); +#12180 = AXIS2_PLACEMENT_3D('',#12181,#12182,#12183); +#12181 = CARTESIAN_POINT('',(-4.776302662724,-1.555250069354E-16,-2.54) + ); +#12182 = DIRECTION('',(-0.791589841442,-3.741495699678E-17, + -0.611052798803)); +#12183 = DIRECTION('',(0.611052798803,-4.846929747257E-17, + -0.791589841442)); +#12184 = ADVANCED_FACE('',(#12185),#12200,.T.); +#12185 = FACE_BOUND('',#12186,.T.); +#12186 = EDGE_LOOP('',(#12187,#12188,#12194,#12195,#12196,#12197,#12198, + #12199)); +#12187 = ORIENTED_EDGE('',*,*,#11265,.T.); +#12188 = ORIENTED_EDGE('',*,*,#12189,.T.); +#12189 = EDGE_CURVE('',#11258,#12166,#12190,.T.); +#12190 = LINE('',#12191,#12192); +#12191 = CARTESIAN_POINT('',(-5.079999999999,1.314354411715E-16, + 2.146574542281)); +#12192 = VECTOR('',#12193,1.); +#12193 = DIRECTION('',(0.,-6.123031769112E-17,-1.)); +#12194 = ORIENTED_EDGE('',*,*,#12165,.T.); +#12195 = ORIENTED_EDGE('',*,*,#11726,.T.); +#12196 = ORIENTED_EDGE('',*,*,#12073,.F.); +#12197 = ORIENTED_EDGE('',*,*,#11330,.T.); +#12198 = ORIENTED_EDGE('',*,*,#11148,.T.); +#12199 = ORIENTED_EDGE('',*,*,#11234,.T.); +#12200 = PLANE('',#12201); +#12201 = AXIS2_PLACEMENT_3D('',#12202,#12203,#12204); +#12202 = CARTESIAN_POINT('',(-5.079999999999,-1.314354411715E-16, + -2.146574542281)); +#12203 = DIRECTION('',(-1.,0.,0.)); +#12204 = DIRECTION('',(-0.,-6.123031769112E-17,-1.)); +#12205 = ADVANCED_FACE('',(#12206),#12223,.F.); +#12206 = FACE_BOUND('',#12207,.T.); +#12207 = EDGE_LOOP('',(#12208,#12209,#12210,#12211,#12212,#12213,#12214, + #12215,#12216,#12217,#12218,#12219,#12220,#12221,#12222)); +#12208 = ORIENTED_EDGE('',*,*,#11257,.T.); +#12209 = ORIENTED_EDGE('',*,*,#11315,.F.); +#12210 = ORIENTED_EDGE('',*,*,#11457,.F.); +#12211 = ORIENTED_EDGE('',*,*,#11488,.T.); +#12212 = ORIENTED_EDGE('',*,*,#11519,.T.); +#12213 = ORIENTED_EDGE('',*,*,#11828,.F.); +#12214 = ORIENTED_EDGE('',*,*,#11852,.T.); +#12215 = ORIENTED_EDGE('',*,*,#11876,.T.); +#12216 = ORIENTED_EDGE('',*,*,#11951,.F.); +#12217 = ORIENTED_EDGE('',*,*,#11975,.T.); +#12218 = ORIENTED_EDGE('',*,*,#11999,.T.); +#12219 = ORIENTED_EDGE('',*,*,#12125,.F.); +#12220 = ORIENTED_EDGE('',*,*,#12149,.T.); +#12221 = ORIENTED_EDGE('',*,*,#12173,.T.); +#12222 = ORIENTED_EDGE('',*,*,#12189,.F.); +#12223 = PLANE('',#12224); +#12224 = AXIS2_PLACEMENT_3D('',#12225,#12226,#12227); +#12225 = CARTESIAN_POINT('',(-3.81,-1.699482712645E-33, + -2.775557561563E-17)); +#12226 = DIRECTION('',(0.,-1.,6.123031769112E-17)); +#12227 = DIRECTION('',(1.,0.,0.)); +#12228 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#12232)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#12229,#12230,#12231)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#12229 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#12230 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#12231 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#12232 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#12229, + 'distance_accuracy_value','confusion accuracy'); +#12233 = SHAPE_DEFINITION_REPRESENTATION(#12234,#6883); +#12234 = PRODUCT_DEFINITION_SHAPE('','',#12235); +#12235 = PRODUCT_DEFINITION('design','',#12236,#12239); +#12236 = PRODUCT_DEFINITION_FORMATION('','',#12237); +#12237 = PRODUCT('pin_header_awl254-dg-g08d','pin_header_awl254-dg-g08d' + ,'',(#12238)); +#12238 = PRODUCT_CONTEXT('',#2,'mechanical'); +#12239 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#12240 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#12241,#12243); +#12241 = ( REPRESENTATION_RELATIONSHIP('','',#6883,#6873) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#12242) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#12242 = ITEM_DEFINED_TRANSFORMATION('','',#11,#6874); +#12243 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #12244); +#12244 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('19','','',#6868,#12235,$); +#12245 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#12237)); +#12246 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#12247,#12249); +#12247 = ( REPRESENTATION_RELATIONSHIP('','',#6873,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#12248) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#12248 = ITEM_DEFINED_TRANSFORMATION('','',#11,#39); +#12249 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #12250); +#12250 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('20','','',#5,#6868,$); +#12251 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6870)); +#12252 = SHAPE_DEFINITION_REPRESENTATION(#12253,#12259); +#12253 = PRODUCT_DEFINITION_SHAPE('','',#12254); +#12254 = PRODUCT_DEFINITION('design','',#12255,#12258); +#12255 = PRODUCT_DEFINITION_FORMATION('','',#12256); +#12256 = PRODUCT('J2','J2','',(#12257)); +#12257 = PRODUCT_CONTEXT('',#2,'mechanical'); +#12258 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#12259 = SHAPE_REPRESENTATION('',(#11,#12260),#12264); +#12260 = AXIS2_PLACEMENT_3D('',#12261,#12262,#12263); +#12261 = CARTESIAN_POINT('',(517.09393310546,-136.4223327636, + -1.599999308586)); +#12262 = DIRECTION('',(-0.,0.,1.)); +#12263 = DIRECTION('',(1.19248806385E-08,-1.,0.)); +#12264 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#12268)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#12265,#12266,#12267)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#12265 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#12266 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#12267 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#12268 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#12265, + 'distance_accuracy_value','confusion accuracy'); +#12269 = SHAPE_DEFINITION_REPRESENTATION(#12270,#12276); +#12270 = PRODUCT_DEFINITION_SHAPE('','',#12271); +#12271 = PRODUCT_DEFINITION('design','',#12272,#12275); +#12272 = PRODUCT_DEFINITION_FORMATION('','',#12273); +#12273 = PRODUCT('CONN-SMD_8P-P1.25_HANBO_WAFER-125W-8A_RGB15724527', + 'CONN-SMD_8P-P1.25_HANBO_WAFER-125W-8A_RGB15724527','',(#12274)); +#12274 = PRODUCT_CONTEXT('',#2,'mechanical'); +#12275 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#12276 = SHAPE_REPRESENTATION('',(#11,#12277),#12281); +#12277 = AXIS2_PLACEMENT_3D('',#12278,#12279,#12280); +#12278 = CARTESIAN_POINT('',(-328.5496570993,-216.6624333248, + 1.600050800102)); +#12279 = DIRECTION('',(0.,0.,1.)); +#12280 = DIRECTION('',(1.,0.,0.)); +#12281 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#12285)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#12282,#12283,#12284)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#12282 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#12283 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#12284 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#12285 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#12282, + 'distance_accuracy_value','confusion accuracy'); +#12286 = SHAPE_DEFINITION_REPRESENTATION(#12287,#12293); +#12287 = PRODUCT_DEFINITION_SHAPE('','',#12288); +#12288 = PRODUCT_DEFINITION('design','',#12289,#12292); +#12289 = PRODUCT_DEFINITION_FORMATION('','',#12290); +#12290 = PRODUCT('zzsw-CN1.step','zzsw-CN1.step','',(#12291)); +#12291 = PRODUCT_CONTEXT('',#2,'mechanical'); +#12292 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#12293 = SHAPE_REPRESENTATION('',(#11,#12294),#12298); +#12294 = AXIS2_PLACEMENT_3D('',#12295,#12296,#12297); +#12295 = CARTESIAN_POINT('',(0.,0.,0.)); +#12296 = DIRECTION('',(0.,0.,1.)); +#12297 = DIRECTION('',(1.,0.,0.)); +#12298 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#12302)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#12299,#12300,#12301)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#12299 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#12300 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#12301 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#12302 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#12299, + 'distance_accuracy_value','confusion accuracy'); +#12303 = SHAPE_DEFINITION_REPRESENTATION(#12304,#12310); +#12304 = PRODUCT_DEFINITION_SHAPE('','',#12305); +#12305 = PRODUCT_DEFINITION('design','',#12306,#12309); +#12306 = PRODUCT_DEFINITION_FORMATION('','',#12307); +#12307 = PRODUCT('CONN-SMD_HC-1.25-8PWT.step', + 'CONN-SMD_HC-1.25-8PWT.step','',(#12308)); +#12308 = PRODUCT_CONTEXT('',#2,'mechanical'); +#12309 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#12310 = SHAPE_REPRESENTATION('',(#11,#12311),#12315); +#12311 = AXIS2_PLACEMENT_3D('',#12312,#12313,#12314); +#12312 = CARTESIAN_POINT('',(0.,0.,0.)); +#12313 = DIRECTION('',(0.,0.,1.)); +#12314 = DIRECTION('',(1.,0.,0.)); +#12315 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#12319)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#12316,#12317,#12318)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#12316 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#12317 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#12318 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#12319 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#12316, + 'distance_accuracy_value','confusion accuracy'); +#12320 = SHAPE_REPRESENTATION('',(#11,#12321,#23757,#24179,#24601,#24817 + ,#25369,#25783,#26315,#26811,#27225,#28057,#28882,#29425,#29839, + #30371,#30867),#32236); +#12321 = MANIFOLD_SOLID_BREP('',#12322); +#12322 = CLOSED_SHELL('',(#12323,#12403,#12467,#12523,#12554,#12578, + #12602,#12626,#12650,#12667,#12851,#12908,#12982,#13056,#13106, + #13130,#13180,#13254,#13328,#13378,#13395,#13499,#13530,#13554, + #13578,#13602,#13626,#13650,#13674,#13698,#13722,#13746,#13770, + #13787,#13818,#13842,#13916,#13990,#14007,#14094,#14175,#14249, + #14273,#14297,#14314,#14345,#14383,#14407,#14445,#14469,#14486, + #14566,#14597,#14621,#14645,#14669,#14693,#14717,#14741,#14758, + #14798,#14829,#14869,#14893,#14933,#14973,#15013,#15053,#15093, + #15133,#15155,#15177,#15199,#15221,#15243,#15265,#15383,#15501, + #15523,#15540,#15557,#15574,#15591,#15608,#15625,#15642,#15659, + #15676,#15693,#15710,#15722,#15753,#15784,#15801,#15818,#15936, + #16054,#16076,#16093,#16110,#16127,#16144,#16161,#16178,#16195, + #16212,#16229,#16246,#16263,#16275,#16306,#16337,#16354,#16371, + #16489,#16607,#16629,#16646,#16663,#16680,#16697,#16714,#16731, + #16748,#16765,#16782,#16799,#16832,#16844,#16875,#16906,#16923, + #16940,#16980,#17020,#17042,#17064,#17182,#17300,#17322,#17339, + #17356,#17373,#17390,#17407,#17424,#17441,#17458,#17475,#17492, + #17525,#17537,#17568,#17599,#17616,#17633,#17681,#17729,#17760, + #17791,#17861,#17884,#17907,#17947,#17987,#18027,#18067,#18107, + #18147,#18187,#18218,#18249,#18297,#18336,#18375,#18415,#18455, + #18477,#18502,#18542,#18573,#18629,#18655,#18672,#18699,#18723, + #18747,#18771,#18793,#18815,#18846,#18877,#18899,#18918,#18935, + #18956,#18982,#19013,#19044,#19063,#19078,#19134,#19165,#19196, + #19213,#19253,#19293,#19333,#19373,#19413,#19453,#19475,#19497, + #19519,#19541,#19563,#19585,#19703,#19821,#19843,#19860,#19877, + #19894,#19911,#19928,#19945,#19962,#19979,#19996,#20013,#20030, + #20042,#20073,#20104,#20121,#20138,#20256,#20374,#20396,#20413, + #20430,#20447,#20464,#20481,#20498,#20515,#20532,#20549,#20566, + #20583,#20595,#20626,#20657,#20674,#20691,#20809,#20927,#20949, + #20966,#20983,#21000,#21017,#21034,#21051,#21068,#21085,#21102, + #21119,#21152,#21164,#21195,#21226,#21243,#21260,#21300,#21340, + #21362,#21384,#21502,#21620,#21642,#21659,#21676,#21693,#21710, + #21727,#21744,#21761,#21778,#21795,#21812,#21845,#21857,#21888, + #21919,#21936,#21953,#22001,#22049,#22080,#22111,#22181,#22204, + #22227,#22267,#22307,#22347,#22387,#22427,#22467,#22507,#22538, + #22569,#22600,#22624,#22656,#22695,#22734,#22774,#22814,#22836, + #22937,#22958,#22976,#23016,#23047,#23103,#23129,#23146,#23173, + #23197,#23221,#23237,#23343,#23360,#23377,#23394,#23411,#23433, + #23455,#23477,#23494,#23508,#23525,#23537,#23553,#23574,#23600, + #23626,#23645,#23660)); +#12323 = ADVANCED_FACE('',(#12324),#12398,.F.); +#12324 = FACE_BOUND('',#12325,.T.); +#12325 = EDGE_LOOP('',(#12326,#12336,#12344,#12352,#12376)); +#12326 = ORIENTED_EDGE('',*,*,#12327,.T.); +#12327 = EDGE_CURVE('',#12328,#12330,#12332,.T.); +#12328 = VERTEX_POINT('',#12329); +#12329 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.350000019118)); +#12330 = VERTEX_POINT('',#12331); +#12331 = CARTESIAN_POINT('',(-8.783027691462E-02,-0.870353184013, + 0.350000019118)); +#12332 = LINE('',#12333,#12334); +#12333 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.350000019118)); +#12334 = VECTOR('',#12335,1.); +#12335 = DIRECTION('',(1.,0.,0.)); +#12336 = ORIENTED_EDGE('',*,*,#12337,.T.); +#12337 = EDGE_CURVE('',#12330,#12338,#12340,.T.); +#12338 = VERTEX_POINT('',#12339); +#12339 = CARTESIAN_POINT('',(-8.783027691462E-02,-1.026450742882, + 0.350000019118)); +#12340 = LINE('',#12341,#12342); +#12341 = CARTESIAN_POINT('',(-8.783027691462E-02,-0.870353184013, + 0.350000019118)); +#12342 = VECTOR('',#12343,1.); +#12343 = DIRECTION('',(0.,-1.,1.111307226798E-14)); +#12344 = ORIENTED_EDGE('',*,*,#12345,.T.); +#12345 = EDGE_CURVE('',#12338,#12346,#12348,.T.); +#12346 = VERTEX_POINT('',#12347); +#12347 = CARTESIAN_POINT('',(-0.116222044824,-1.026450742882, + 0.350000019118)); +#12348 = LINE('',#12349,#12350); +#12349 = CARTESIAN_POINT('',(-8.783027691462E-02,-1.026450742882, + 0.350000019118)); +#12350 = VECTOR('',#12351,1.); +#12351 = DIRECTION('',(-1.,0.,0.)); +#12352 = ORIENTED_EDGE('',*,*,#12353,.T.); +#12353 = EDGE_CURVE('',#12346,#12354,#12356,.T.); +#12354 = VERTEX_POINT('',#12355); +#12355 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.350000019118)); +#12356 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12357,#12358,#12359,#12360, + #12361,#12362,#12363,#12364,#12365,#12366,#12367,#12368,#12369, + #12370,#12371,#12372,#12373,#12374,#12375),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.082642719843E-02, + 0.138168749717,0.202474915996,0.263973212663,0.323654488881, + 0.381810801969,0.439403135578,0.497337440545,0.555096767069, + 0.613004897476,0.671539510489,0.731656272811,0.794298233775, + 0.859482493363,0.927681473872,1.),.UNSPECIFIED.); +#12357 = CARTESIAN_POINT('',(-0.116222044824,-1.026450742882, + 0.350000019118)); +#12358 = CARTESIAN_POINT('',(-0.119235583699,-1.026385656206, + 0.350000019118)); +#12359 = CARTESIAN_POINT('',(-0.125114418972,-1.026258684608, + 0.350000019118)); +#12360 = CARTESIAN_POINT('',(-0.133681381138,-1.025248759869, + 0.350000019118)); +#12361 = CARTESIAN_POINT('',(-0.141745991149,-1.023630950434, + 0.350000019118)); +#12362 = CARTESIAN_POINT('',(-0.149313368842,-1.021347969554, + 0.350000019118)); +#12363 = CARTESIAN_POINT('',(-0.156353596289,-1.018370658489, + 0.350000019118)); +#12364 = CARTESIAN_POINT('',(-0.1628815535,-1.014725143318, + 0.350000019118)); +#12365 = CARTESIAN_POINT('',(-0.168914966337,-1.010433471727, + 0.350000019118)); +#12366 = CARTESIAN_POINT('',(-0.174393928647,-1.005478010062, + 0.350000019118)); +#12367 = CARTESIAN_POINT('',(-0.179295552945,-0.999933319418, + 0.350000019118)); +#12368 = CARTESIAN_POINT('',(-0.183537730602,-0.993838326707, + 0.350000019118)); +#12369 = CARTESIAN_POINT('',(-0.187144950415,-0.987234363153, + 0.350000019118)); +#12370 = CARTESIAN_POINT('',(-0.190090707858,-0.980090858661, + 0.350000019118)); +#12371 = CARTESIAN_POINT('',(-0.192356961314,-0.972411025797, + 0.350000019118)); +#12372 = CARTESIAN_POINT('',(-0.193996492484,-0.96422480745, + 0.350000019118)); +#12373 = CARTESIAN_POINT('',(-0.194944266698,-0.955512673743, + 0.350000019118)); +#12374 = CARTESIAN_POINT('',(-0.195078344407,-0.949534885377, + 0.350000019118)); +#12375 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.350000019118)); +#12376 = ORIENTED_EDGE('',*,*,#12377,.T.); +#12377 = EDGE_CURVE('',#12354,#12328,#12378,.T.); +#12378 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12379,#12380,#12381,#12382, + #12383,#12384,#12385,#12386,#12387,#12388,#12389,#12390,#12391, + #12392,#12393,#12394,#12395,#12396,#12397),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.429704972735E-02, + 0.144380499559,0.210480382945,0.27322424923,0.333782884733, + 0.392326248648,0.449878804646,0.507606719485,0.565245786658, + 0.623182940078,0.681326130709,0.740937022969,0.801873743509, + 0.865253473691,0.93094792748,1.),.UNSPECIFIED.); +#12379 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.350000019118)); +#12380 = CARTESIAN_POINT('',(-0.195081940312,-0.943394143081, + 0.350000019118)); +#12381 = CARTESIAN_POINT('',(-0.194954833157,-0.937439478329, + 0.350000019118)); +#12382 = CARTESIAN_POINT('',(-0.19396156814,-0.928803904168, + 0.350000019118)); +#12383 = CARTESIAN_POINT('',(-0.192309872804,-0.920756192294, + 0.350000019118)); +#12384 = CARTESIAN_POINT('',(-0.189925549902,-0.913304035743, + 0.350000019118)); +#12385 = CARTESIAN_POINT('',(-0.186929155049,-0.906415245935, + 0.350000019118)); +#12386 = CARTESIAN_POINT('',(-0.183256726853,-0.900102398502, + 0.350000019118)); +#12387 = CARTESIAN_POINT('',(-0.17886908421,-0.894408982413, + 0.350000019118)); +#12388 = CARTESIAN_POINT('',(-0.173822057237,-0.889347269557, + 0.350000019118)); +#12389 = CARTESIAN_POINT('',(-0.168225057155,-0.884883269667, + 0.350000019118)); +#12390 = CARTESIAN_POINT('',(-0.162197392936,-0.880991052157, + 0.350000019118)); +#12391 = CARTESIAN_POINT('',(-0.155735302271,-0.877689360707, + 0.350000019118)); +#12392 = CARTESIAN_POINT('',(-0.148867708019,-0.874989525924, + 0.350000019118)); +#12393 = CARTESIAN_POINT('',(-0.141570753023,-0.872880361448, + 0.350000019118)); +#12394 = CARTESIAN_POINT('',(-0.133864360027,-0.871417025637, + 0.350000019118)); +#12395 = CARTESIAN_POINT('',(-0.125732324955,-0.870526120282, + 0.350000019118)); +#12396 = CARTESIAN_POINT('',(-0.120175085307,-0.870411779155, + 0.350000019118)); +#12397 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.350000019118)); +#12398 = PLANE('',#12399); +#12399 = AXIS2_PLACEMENT_3D('',#12400,#12401,#12402); +#12400 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#12401 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#12402 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#12403 = ADVANCED_FACE('',(#12404),#12462,.F.); +#12404 = FACE_BOUND('',#12405,.T.); +#12405 = EDGE_LOOP('',(#12406,#12416,#12424,#12436,#12444,#12456)); +#12406 = ORIENTED_EDGE('',*,*,#12407,.T.); +#12407 = EDGE_CURVE('',#12408,#12410,#12412,.T.); +#12408 = VERTEX_POINT('',#12409); +#12409 = CARTESIAN_POINT('',(-0.291717469285,-0.970353182664, + 0.350000019118)); +#12410 = VERTEX_POINT('',#12411); +#12411 = CARTESIAN_POINT('',(-0.358600090334,-0.970353182664, + 0.350000019118)); +#12412 = LINE('',#12413,#12414); +#12413 = CARTESIAN_POINT('',(-0.291717469285,-0.970353182664, + 0.350000019118)); +#12414 = VECTOR('',#12415,1.); +#12415 = DIRECTION('',(-1.,0.,0.)); +#12416 = ORIENTED_EDGE('',*,*,#12417,.T.); +#12417 = EDGE_CURVE('',#12410,#12418,#12420,.T.); +#12418 = VERTEX_POINT('',#12419); +#12419 = CARTESIAN_POINT('',(-0.328493383423,-0.886816598425, + 0.350000019118)); +#12420 = LINE('',#12421,#12422); +#12421 = CARTESIAN_POINT('',(-0.358600090334,-0.970353182664, + 0.350000019118)); +#12422 = VECTOR('',#12423,1.); +#12423 = DIRECTION('',(0.339053795485,0.940766986967,-9.767999078299E-15 + )); +#12424 = ORIENTED_EDGE('',*,*,#12425,.T.); +#12425 = EDGE_CURVE('',#12418,#12426,#12428,.T.); +#12426 = VERTEX_POINT('',#12427); +#12427 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.350000019118)); +#12428 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12429,#12430,#12431,#12432, + #12433,#12434,#12435),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0., + 0.174481715317,0.398285759128,0.673897847399,1.),.UNSPECIFIED.); +#12429 = CARTESIAN_POINT('',(-0.328493383423,-0.886816598425, + 0.350000019118)); +#12430 = CARTESIAN_POINT('',(-0.328243802402,-0.886018631545, + 0.350000019118)); +#12431 = CARTESIAN_POINT('',(-0.327674089029,-0.884197129252, + 0.350000019118)); +#12432 = CARTESIAN_POINT('',(-0.326927527445,-0.88105331738, + 0.350000019118)); +#12433 = CARTESIAN_POINT('',(-0.326195570665,-0.877166587037, + 0.350000019118)); +#12434 = CARTESIAN_POINT('',(-0.325683832417,-0.874329683144, + 0.350000019118)); +#12435 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.350000019118)); +#12436 = ORIENTED_EDGE('',*,*,#12437,.T.); +#12437 = EDGE_CURVE('',#12426,#12438,#12440,.T.); +#12438 = VERTEX_POINT('',#12439); +#12439 = CARTESIAN_POINT('',(-0.324758627376,-0.872792208371, + 0.350000019118)); +#12440 = LINE('',#12441,#12442); +#12441 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.350000019118)); +#12442 = VECTOR('',#12443,1.); +#12443 = DIRECTION('',(1.,0.,0.)); +#12444 = ORIENTED_EDGE('',*,*,#12445,.T.); +#12445 = EDGE_CURVE('',#12438,#12446,#12448,.T.); +#12446 = VERTEX_POINT('',#12447); +#12447 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.350000019118)); +#12448 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12449,#12450,#12451,#12452, + #12453,#12454,#12455),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0., + 0.30057486777,0.568347412612,0.800011154954,1.),.UNSPECIFIED.); +#12449 = CARTESIAN_POINT('',(-0.324758627376,-0.872792208371, + 0.350000019118)); +#12450 = CARTESIAN_POINT('',(-0.324531974054,-0.874217818765, + 0.350000019118)); +#12451 = CARTESIAN_POINT('',(-0.32410340253,-0.876913459905, + 0.350000019118)); +#12452 = CARTESIAN_POINT('',(-0.323278069557,-0.880664897331, + 0.350000019118)); +#12453 = CARTESIAN_POINT('',(-0.322524446537,-0.883940507673, + 0.350000019118)); +#12454 = CARTESIAN_POINT('',(-0.321863589434,-0.885905977243, + 0.350000019118)); +#12455 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.350000019118)); +#12456 = ORIENTED_EDGE('',*,*,#12457,.T.); +#12457 = EDGE_CURVE('',#12446,#12408,#12458,.T.); +#12458 = LINE('',#12459,#12460); +#12459 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.350000019118)); +#12460 = VECTOR('',#12461,1.); +#12461 = DIRECTION('',(0.336390827665,-0.941722470297,9.777919877412E-15 + )); +#12462 = PLANE('',#12463); +#12463 = AXIS2_PLACEMENT_3D('',#12464,#12465,#12466); +#12464 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#12465 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#12466 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#12467 = ADVANCED_FACE('',(#12468),#12518,.F.); +#12468 = FACE_BOUND('',#12469,.T.); +#12469 = EDGE_LOOP('',(#12470,#12480,#12488,#12496,#12504,#12512)); +#12470 = ORIENTED_EDGE('',*,*,#12471,.F.); +#12471 = EDGE_CURVE('',#12472,#12474,#12476,.T.); +#12472 = VERTEX_POINT('',#12473); +#12473 = CARTESIAN_POINT('',(0.290218498471,-1.026450742882, + 0.370000018849)); +#12474 = VERTEX_POINT('',#12475); +#12475 = CARTESIAN_POINT('',(0.290218498471,-1.048401962098, + 0.370000018849)); +#12476 = LINE('',#12477,#12478); +#12477 = CARTESIAN_POINT('',(0.290218498471,-1.026450742882, + 0.370000018849)); +#12478 = VECTOR('',#12479,1.); +#12479 = DIRECTION('',(0.,-1.,9.878286460424E-15)); +#12480 = ORIENTED_EDGE('',*,*,#12481,.F.); +#12481 = EDGE_CURVE('',#12482,#12472,#12484,.T.); +#12482 = VERTEX_POINT('',#12483); +#12483 = CARTESIAN_POINT('',(0.365828253548,-1.026450742882, + 0.370000018849)); +#12484 = LINE('',#12485,#12486); +#12485 = CARTESIAN_POINT('',(0.365828253548,-1.026450742882, + 0.370000018849)); +#12486 = VECTOR('',#12487,1.); +#12487 = DIRECTION('',(-1.,0.,0.)); +#12488 = ORIENTED_EDGE('',*,*,#12489,.F.); +#12489 = EDGE_CURVE('',#12490,#12482,#12492,.T.); +#12490 = VERTEX_POINT('',#12491); +#12491 = CARTESIAN_POINT('',(0.365828253548,-0.848401964797, + 0.370000018849)); +#12492 = LINE('',#12493,#12494); +#12493 = CARTESIAN_POINT('',(0.365828253548,-0.848401964797, + 0.370000018849)); +#12494 = VECTOR('',#12495,1.); +#12495 = DIRECTION('',(0.,-1.,1.096083840129E-14)); +#12496 = ORIENTED_EDGE('',*,*,#12497,.F.); +#12497 = EDGE_CURVE('',#12498,#12490,#12500,.T.); +#12498 = VERTEX_POINT('',#12499); +#12499 = CARTESIAN_POINT('',(0.392657521479,-0.848401964797, + 0.370000018849)); +#12500 = LINE('',#12501,#12502); +#12501 = CARTESIAN_POINT('',(0.392657521479,-0.848401964797, + 0.370000018849)); +#12502 = VECTOR('',#12503,1.); +#12503 = DIRECTION('',(-1.,0.,0.)); +#12504 = ORIENTED_EDGE('',*,*,#12505,.F.); +#12505 = EDGE_CURVE('',#12506,#12498,#12508,.T.); +#12506 = VERTEX_POINT('',#12507); +#12507 = CARTESIAN_POINT('',(0.392657521479,-1.048401962098, + 0.370000018849)); +#12508 = LINE('',#12509,#12510); +#12509 = CARTESIAN_POINT('',(0.392657521479,-1.048401962098, + 0.370000018849)); +#12510 = VECTOR('',#12511,1.); +#12511 = DIRECTION('',(0.,1.,-1.084202172486E-14)); +#12512 = ORIENTED_EDGE('',*,*,#12513,.F.); +#12513 = EDGE_CURVE('',#12474,#12506,#12514,.T.); +#12514 = LINE('',#12515,#12516); +#12515 = CARTESIAN_POINT('',(0.290218498471,-1.048401962098, + 0.370000018849)); +#12516 = VECTOR('',#12517,1.); +#12517 = DIRECTION('',(1.,0.,0.)); +#12518 = PLANE('',#12519); +#12519 = AXIS2_PLACEMENT_3D('',#12520,#12521,#12522); +#12520 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 0.370000018849)); +#12521 = DIRECTION('',(0.,9.878286460424E-15,1.)); +#12522 = DIRECTION('',(0.,-1.,9.878286460424E-15)); +#12523 = ADVANCED_FACE('',(#12524),#12549,.T.); +#12524 = FACE_BOUND('',#12525,.T.); +#12525 = EDGE_LOOP('',(#12526,#12536,#12542,#12543)); +#12526 = ORIENTED_EDGE('',*,*,#12527,.F.); +#12527 = EDGE_CURVE('',#12528,#12530,#12532,.T.); +#12528 = VERTEX_POINT('',#12529); +#12529 = CARTESIAN_POINT('',(0.365828253548,-1.026450742882, + 0.350000019118)); +#12530 = VERTEX_POINT('',#12531); +#12531 = CARTESIAN_POINT('',(0.290218498471,-1.026450742882, + 0.350000019118)); +#12532 = LINE('',#12533,#12534); +#12533 = CARTESIAN_POINT('',(0.365828253548,-1.026450742882, + 0.350000019118)); +#12534 = VECTOR('',#12535,1.); +#12535 = DIRECTION('',(-1.,0.,0.)); +#12536 = ORIENTED_EDGE('',*,*,#12537,.F.); +#12537 = EDGE_CURVE('',#12482,#12528,#12538,.T.); +#12538 = LINE('',#12539,#12540); +#12539 = CARTESIAN_POINT('',(0.365828253548,-1.026450742882, + 0.370000018849)); +#12540 = VECTOR('',#12541,1.); +#12541 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#12542 = ORIENTED_EDGE('',*,*,#12481,.T.); +#12543 = ORIENTED_EDGE('',*,*,#12544,.T.); +#12544 = EDGE_CURVE('',#12472,#12530,#12545,.T.); +#12545 = LINE('',#12546,#12547); +#12546 = CARTESIAN_POINT('',(0.290218498471,-1.026450742882, + 0.370000018849)); +#12547 = VECTOR('',#12548,1.); +#12548 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#12549 = PLANE('',#12550); +#12550 = AXIS2_PLACEMENT_3D('',#12551,#12552,#12553); +#12551 = CARTESIAN_POINT('',(0.365828253548,-1.026450742882, + 0.370000018849)); +#12552 = DIRECTION('',(0.,-1.,1.047444401653E-14)); +#12553 = DIRECTION('',(-1.,0.,0.)); +#12554 = ADVANCED_FACE('',(#12555),#12573,.T.); +#12555 = FACE_BOUND('',#12556,.T.); +#12556 = EDGE_LOOP('',(#12557,#12565,#12571,#12572)); +#12557 = ORIENTED_EDGE('',*,*,#12558,.F.); +#12558 = EDGE_CURVE('',#12559,#12528,#12561,.T.); +#12559 = VERTEX_POINT('',#12560); +#12560 = CARTESIAN_POINT('',(0.365828253548,-0.848401964797, + 0.350000019118)); +#12561 = LINE('',#12562,#12563); +#12562 = CARTESIAN_POINT('',(0.365828253548,-0.848401964797, + 0.350000019118)); +#12563 = VECTOR('',#12564,1.); +#12564 = DIRECTION('',(0.,-1.,1.096083840129E-14)); +#12565 = ORIENTED_EDGE('',*,*,#12566,.F.); +#12566 = EDGE_CURVE('',#12490,#12559,#12567,.T.); +#12567 = LINE('',#12568,#12569); +#12568 = CARTESIAN_POINT('',(0.365828253548,-0.848401964797, + 0.370000018849)); +#12569 = VECTOR('',#12570,1.); +#12570 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#12571 = ORIENTED_EDGE('',*,*,#12489,.T.); +#12572 = ORIENTED_EDGE('',*,*,#12537,.T.); +#12573 = PLANE('',#12574); +#12574 = AXIS2_PLACEMENT_3D('',#12575,#12576,#12577); +#12575 = CARTESIAN_POINT('',(0.365828253548,-0.848401964797, + 0.370000018849)); +#12576 = DIRECTION('',(1.,-2.672349282782E-43,-2.438088387898E-29)); +#12577 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#12578 = ADVANCED_FACE('',(#12579),#12597,.T.); +#12579 = FACE_BOUND('',#12580,.T.); +#12580 = EDGE_LOOP('',(#12581,#12589,#12595,#12596)); +#12581 = ORIENTED_EDGE('',*,*,#12582,.F.); +#12582 = EDGE_CURVE('',#12583,#12559,#12585,.T.); +#12583 = VERTEX_POINT('',#12584); +#12584 = CARTESIAN_POINT('',(0.392657521479,-0.848401964797, + 0.350000019118)); +#12585 = LINE('',#12586,#12587); +#12586 = CARTESIAN_POINT('',(0.392657521479,-0.848401964797, + 0.350000019118)); +#12587 = VECTOR('',#12588,1.); +#12588 = DIRECTION('',(-1.,0.,0.)); +#12589 = ORIENTED_EDGE('',*,*,#12590,.F.); +#12590 = EDGE_CURVE('',#12498,#12583,#12591,.T.); +#12591 = LINE('',#12592,#12593); +#12592 = CARTESIAN_POINT('',(0.392657521479,-0.848401964797, + 0.370000018849)); +#12593 = VECTOR('',#12594,1.); +#12594 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#12595 = ORIENTED_EDGE('',*,*,#12497,.T.); +#12596 = ORIENTED_EDGE('',*,*,#12566,.T.); +#12597 = PLANE('',#12598); +#12598 = AXIS2_PLACEMENT_3D('',#12599,#12600,#12601); +#12599 = CARTESIAN_POINT('',(0.392657521479,-0.848401964797, + 0.370000018849)); +#12600 = DIRECTION('',(0.,-1.,1.047444401653E-14)); +#12601 = DIRECTION('',(-1.,0.,0.)); +#12602 = ADVANCED_FACE('',(#12603),#12621,.T.); +#12603 = FACE_BOUND('',#12604,.T.); +#12604 = EDGE_LOOP('',(#12605,#12613,#12619,#12620)); +#12605 = ORIENTED_EDGE('',*,*,#12606,.F.); +#12606 = EDGE_CURVE('',#12607,#12583,#12609,.T.); +#12607 = VERTEX_POINT('',#12608); +#12608 = CARTESIAN_POINT('',(0.392657521479,-1.048401962098, + 0.350000019118)); +#12609 = LINE('',#12610,#12611); +#12610 = CARTESIAN_POINT('',(0.392657521479,-1.048401962098, + 0.350000019118)); +#12611 = VECTOR('',#12612,1.); +#12612 = DIRECTION('',(0.,1.,-1.084202172486E-14)); +#12613 = ORIENTED_EDGE('',*,*,#12614,.F.); +#12614 = EDGE_CURVE('',#12506,#12607,#12615,.T.); +#12615 = LINE('',#12616,#12617); +#12616 = CARTESIAN_POINT('',(0.392657521479,-1.048401962098, + 0.370000018849)); +#12617 = VECTOR('',#12618,1.); +#12618 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#12619 = ORIENTED_EDGE('',*,*,#12505,.T.); +#12620 = ORIENTED_EDGE('',*,*,#12590,.T.); +#12621 = PLANE('',#12622); +#12622 = AXIS2_PLACEMENT_3D('',#12623,#12624,#12625); +#12623 = CARTESIAN_POINT('',(0.392657521479,-1.048401962098, + 0.370000018849)); +#12624 = DIRECTION('',(-1.,2.643380726871E-43,2.438088387898E-29)); +#12625 = DIRECTION('',(2.643380726871E-43,1.,0.)); +#12626 = ADVANCED_FACE('',(#12627),#12645,.T.); +#12627 = FACE_BOUND('',#12628,.T.); +#12628 = EDGE_LOOP('',(#12629,#12637,#12643,#12644)); +#12629 = ORIENTED_EDGE('',*,*,#12630,.F.); +#12630 = EDGE_CURVE('',#12631,#12607,#12633,.T.); +#12631 = VERTEX_POINT('',#12632); +#12632 = CARTESIAN_POINT('',(0.290218498471,-1.048401962098, + 0.350000019118)); +#12633 = LINE('',#12634,#12635); +#12634 = CARTESIAN_POINT('',(0.290218498471,-1.048401962098, + 0.350000019118)); +#12635 = VECTOR('',#12636,1.); +#12636 = DIRECTION('',(1.,0.,0.)); +#12637 = ORIENTED_EDGE('',*,*,#12638,.F.); +#12638 = EDGE_CURVE('',#12474,#12631,#12639,.T.); +#12639 = LINE('',#12640,#12641); +#12640 = CARTESIAN_POINT('',(0.290218498471,-1.048401962098, + 0.370000018849)); +#12641 = VECTOR('',#12642,1.); +#12642 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#12643 = ORIENTED_EDGE('',*,*,#12513,.T.); +#12644 = ORIENTED_EDGE('',*,*,#12614,.T.); +#12645 = PLANE('',#12646); +#12646 = AXIS2_PLACEMENT_3D('',#12647,#12648,#12649); +#12647 = CARTESIAN_POINT('',(0.290218498471,-1.048401962098, + 0.370000018849)); +#12648 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#12649 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#12650 = ADVANCED_FACE('',(#12651),#12662,.T.); +#12651 = FACE_BOUND('',#12652,.T.); +#12652 = EDGE_LOOP('',(#12653,#12659,#12660,#12661)); +#12653 = ORIENTED_EDGE('',*,*,#12654,.F.); +#12654 = EDGE_CURVE('',#12530,#12631,#12655,.T.); +#12655 = LINE('',#12656,#12657); +#12656 = CARTESIAN_POINT('',(0.290218498471,-1.026450742882, + 0.350000019118)); +#12657 = VECTOR('',#12658,1.); +#12658 = DIRECTION('',(0.,-1.,9.878286460424E-15)); +#12659 = ORIENTED_EDGE('',*,*,#12544,.F.); +#12660 = ORIENTED_EDGE('',*,*,#12471,.T.); +#12661 = ORIENTED_EDGE('',*,*,#12638,.T.); +#12662 = PLANE('',#12663); +#12663 = AXIS2_PLACEMENT_3D('',#12664,#12665,#12666); +#12664 = CARTESIAN_POINT('',(0.290218498471,-1.026450742882, + 0.370000018849)); +#12665 = DIRECTION('',(1.,-2.408413551149E-43,-2.438088387898E-29)); +#12666 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#12667 = ADVANCED_FACE('',(#12668),#12846,.T.); +#12668 = FACE_BOUND('',#12669,.T.); +#12669 = EDGE_LOOP('',(#12670,#12680,#12696,#12720,#12744,#12760,#12768, + #12784,#12808,#12832)); +#12670 = ORIENTED_EDGE('',*,*,#12671,.F.); +#12671 = EDGE_CURVE('',#12672,#12674,#12676,.T.); +#12672 = VERTEX_POINT('',#12673); +#12673 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.370000018849)); +#12674 = VERTEX_POINT('',#12675); +#12675 = CARTESIAN_POINT('',(0.124364842173,-1.038036108579, + 0.370000018849)); +#12676 = LINE('',#12677,#12678); +#12677 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.370000018849)); +#12678 = VECTOR('',#12679,1.); +#12679 = DIRECTION('',(0.,-1.,9.878286460424E-15)); +#12680 = ORIENTED_EDGE('',*,*,#12681,.F.); +#12681 = EDGE_CURVE('',#12682,#12672,#12684,.T.); +#12682 = VERTEX_POINT('',#12683); +#12683 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.370000018849)); +#12684 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12685,#12686,#12687,#12688, + #12689,#12690,#12691,#12692,#12693,#12694,#12695),.UNSPECIFIED.,.F., + .F.,(4,1,1,1,1,1,1,1,4),(0.,0.135294604763,0.266765657925, + 0.394816018836,0.520051654434,0.642175702971,0.762651820558, + 0.881834004381,1.),.UNSPECIFIED.); +#12685 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.370000018849)); +#12686 = CARTESIAN_POINT('',(0.173283598863,-1.02885805913, + 0.370000018849)); +#12687 = CARTESIAN_POINT('',(0.168521683228,-1.028795539013, + 0.370000018849)); +#12688 = CARTESIAN_POINT('',(0.161499306955,-1.028153944032, + 0.370000018849)); +#12689 = CARTESIAN_POINT('',(0.15469726129,-1.027188300182, + 0.370000018849)); +#12690 = CARTESIAN_POINT('',(0.148145111208,-1.025766957257, + 0.370000018849)); +#12691 = CARTESIAN_POINT('',(0.141820392498,-1.023987756711, + 0.370000018849)); +#12692 = CARTESIAN_POINT('',(0.135758961983,-1.021752944519, + 0.370000018849)); +#12693 = CARTESIAN_POINT('',(0.129896050371,-1.019200326877, + 0.370000018849)); +#12694 = CARTESIAN_POINT('',(0.126203308174,-1.017120400185, + 0.370000018849)); +#12695 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.370000018849)); +#12696 = ORIENTED_EDGE('',*,*,#12697,.F.); +#12697 = EDGE_CURVE('',#12698,#12682,#12700,.T.); +#12698 = VERTEX_POINT('',#12699); +#12699 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.370000018849)); +#12700 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12701,#12702,#12703,#12704, + #12705,#12706,#12707,#12708,#12709,#12710,#12711,#12712,#12713, + #12714,#12715,#12716,#12717,#12718,#12719),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.378258718587E-02, + 0.144095652163,0.211372776945,0.276108573914,0.338559771335, + 0.399646477988,0.460022357923,0.520364180104,0.579989743327, + 0.638421673378,0.696329698138,0.753973538922,0.812784195164, + 0.872739820247,0.935174557152,1.),.UNSPECIFIED.); +#12701 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.370000018849)); +#12702 = CARTESIAN_POINT('',(0.24626050879,-0.953460357461, + 0.370000018849)); +#12703 = CARTESIAN_POINT('',(0.246152018511,-0.959171344234, + 0.370000018849)); +#12704 = CARTESIAN_POINT('',(0.245219524138,-0.967506787822, + 0.370000018849)); +#12705 = CARTESIAN_POINT('',(0.243709905633,-0.975388459187, + 0.370000018849)); +#12706 = CARTESIAN_POINT('',(0.24158521439,-0.982807511745, + 0.370000018849)); +#12707 = CARTESIAN_POINT('',(0.238829664169,-0.989753318622, + 0.370000018849)); +#12708 = CARTESIAN_POINT('',(0.235464586665,-0.996231804062, + 0.370000018849)); +#12709 = CARTESIAN_POINT('',(0.231480468376,-1.002249875891, + 0.370000018849)); +#12710 = CARTESIAN_POINT('',(0.226915094119,-1.007764640544, + 0.370000018849)); +#12711 = CARTESIAN_POINT('',(0.221851719839,-1.012715639421, + 0.370000018849)); +#12712 = CARTESIAN_POINT('',(0.216374918925,-1.017051263517, + 0.370000018849)); +#12713 = CARTESIAN_POINT('',(0.210526786997,-1.020728867879, + 0.370000018849)); +#12714 = CARTESIAN_POINT('',(0.204286638554,-1.023726514741, + 0.370000018849)); +#12715 = CARTESIAN_POINT('',(0.197680169222,-1.026054891829, + 0.370000018849)); +#12716 = CARTESIAN_POINT('',(0.190676284583,-1.027683829577, + 0.370000018849)); +#12717 = CARTESIAN_POINT('',(0.183311967411,-1.028693605511, + 0.370000018849)); +#12718 = CARTESIAN_POINT('',(0.178268029522,-1.028823566184, + 0.370000018849)); +#12719 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.370000018849)); +#12720 = ORIENTED_EDGE('',*,*,#12721,.F.); +#12721 = EDGE_CURVE('',#12722,#12698,#12724,.T.); +#12722 = VERTEX_POINT('',#12723); +#12723 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.370000018849)); +#12724 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12725,#12726,#12727,#12728, + #12729,#12730,#12731,#12732,#12733,#12734,#12735,#12736,#12737, + #12738,#12739,#12740,#12741,#12742,#12743),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.460651091173E-02, + 0.126707396677,0.186764158456,0.24561607929,0.303634260101, + 0.361487584679,0.420227043541,0.48002251282,0.540669691743, + 0.601185743116,0.662329843678,0.725019474255,0.789459456756, + 0.856499216937,0.92630919798,1.),.UNSPECIFIED.); +#12725 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.370000018849)); +#12726 = CARTESIAN_POINT('',(0.173911752095,-0.867972035194, + 0.370000018849)); +#12727 = CARTESIAN_POINT('',(0.179226690383,-0.868085541693, + 0.370000018849)); +#12728 = CARTESIAN_POINT('',(0.186988896777,-0.869213037179, + 0.370000018849)); +#12729 = CARTESIAN_POINT('',(0.194406070749,-0.870872517704, + 0.370000018849)); +#12730 = CARTESIAN_POINT('',(0.201394237763,-0.873402142304, + 0.370000018849)); +#12731 = CARTESIAN_POINT('',(0.208044748399,-0.876502983283, + 0.370000018849)); +#12732 = CARTESIAN_POINT('',(0.214249933966,-0.880415575482, + 0.370000018849)); +#12733 = CARTESIAN_POINT('',(0.2201064958,-0.884949625386,0.370000018849 + )); +#12734 = CARTESIAN_POINT('',(0.22550663877,-0.890189282519, + 0.370000018849)); +#12735 = CARTESIAN_POINT('',(0.230428987223,-0.895981345421, + 0.370000018849)); +#12736 = CARTESIAN_POINT('',(0.234651790057,-0.902367444326, + 0.370000018849)); +#12737 = CARTESIAN_POINT('',(0.238327260782,-0.909180563912, + 0.370000018849)); +#12738 = CARTESIAN_POINT('',(0.241233625515,-0.916535200023, + 0.370000018849)); +#12739 = CARTESIAN_POINT('',(0.24353014304,-0.924354256587, + 0.370000018849)); +#12740 = CARTESIAN_POINT('',(0.24516018377,-0.932644379618, + 0.370000018849)); +#12741 = CARTESIAN_POINT('',(0.246112362627,-0.941431002834, + 0.370000018849)); +#12742 = CARTESIAN_POINT('',(0.246246947667,-0.947446843518, + 0.370000018849)); +#12743 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.370000018849)); +#12744 = ORIENTED_EDGE('',*,*,#12745,.F.); +#12745 = EDGE_CURVE('',#12746,#12722,#12748,.T.); +#12746 = VERTEX_POINT('',#12747); +#12747 = CARTESIAN_POINT('',(0.124364842173,-0.880719037532, + 0.370000018849)); +#12748 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12749,#12750,#12751,#12752, + #12753,#12754,#12755,#12756,#12757,#12758,#12759),.UNSPECIFIED.,.F., + .F.,(4,1,1,1,1,1,1,1,4),(0.,0.125279696736,0.249419970742, + 0.373356799493,0.496681278782,0.620202915744,0.745086320161, + 0.871269195019,1.),.UNSPECIFIED.); +#12749 = CARTESIAN_POINT('',(0.124364842173,-0.880719037532, + 0.370000018849)); +#12750 = CARTESIAN_POINT('',(0.126140919275,-0.879687002947, + 0.370000018849)); +#12751 = CARTESIAN_POINT('',(0.129676920001,-0.877632320165, + 0.370000018849)); +#12752 = CARTESIAN_POINT('',(0.135238406249,-0.875063562315, + 0.370000018849)); +#12753 = CARTESIAN_POINT('',(0.140907054803,-0.87283553471, + 0.370000018849)); +#12754 = CARTESIAN_POINT('',(0.146722549035,-0.871056934568, + 0.370000018849)); +#12755 = CARTESIAN_POINT('',(0.152648287954,-0.869620701303, + 0.370000018849)); +#12756 = CARTESIAN_POINT('',(0.15871534494,-0.868657379174, + 0.370000018849)); +#12757 = CARTESIAN_POINT('',(0.16491222507,-0.868009252465, + 0.370000018849)); +#12758 = CARTESIAN_POINT('',(0.169091305871,-0.867946067775, + 0.370000018849)); +#12759 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.370000018849)); +#12760 = ORIENTED_EDGE('',*,*,#12761,.F.); +#12761 = EDGE_CURVE('',#12762,#12746,#12764,.T.); +#12762 = VERTEX_POINT('',#12763); +#12763 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.370000018849)); +#12764 = LINE('',#12765,#12766); +#12765 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.370000018849)); +#12766 = VECTOR('',#12767,1.); +#12767 = DIRECTION('',(0.,-1.,1.616446875342E-14)); +#12768 = ORIENTED_EDGE('',*,*,#12769,.F.); +#12769 = EDGE_CURVE('',#12770,#12762,#12772,.T.); +#12770 = VERTEX_POINT('',#12771); +#12771 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.370000018849)); +#12772 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12773,#12774,#12775,#12776, + #12777,#12778,#12779,#12780,#12781,#12782,#12783),.UNSPECIFIED.,.F., + .F.,(4,1,1,1,1,1,1,1,4),(0.,0.145186866472,0.28344261092, + 0.416524365929,0.543181123535,0.665153082638,0.781360206313, + 0.892756655642,1.),.UNSPECIFIED.); +#12773 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.370000018849)); +#12774 = CARTESIAN_POINT('',(0.169105018225,-0.845979609327, + 0.370000018849)); +#12775 = CARTESIAN_POINT('',(0.164565285717,-0.846012151339, + 0.370000018849)); +#12776 = CARTESIAN_POINT('',(0.157905436813,-0.846420231187, + 0.370000018849)); +#12777 = CARTESIAN_POINT('',(0.151555981473,-0.846996972923, + 0.370000018849)); +#12778 = CARTESIAN_POINT('',(0.145507731286,-0.847896297258, + 0.370000018849)); +#12779 = CARTESIAN_POINT('',(0.139760997468,-0.848966849122, + 0.370000018849)); +#12780 = CARTESIAN_POINT('',(0.134337308149,-0.850362364808, + 0.370000018849)); +#12781 = CARTESIAN_POINT('',(0.129202568951,-0.851926029644, + 0.370000018849)); +#12782 = CARTESIAN_POINT('',(0.125956866854,-0.853243531684, + 0.370000018849)); +#12783 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.370000018849)); +#12784 = ORIENTED_EDGE('',*,*,#12785,.F.); +#12785 = EDGE_CURVE('',#12786,#12770,#12788,.T.); +#12786 = VERTEX_POINT('',#12787); +#12787 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.370000018849 + )); +#12788 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12789,#12790,#12791,#12792, + #12793,#12794,#12795,#12796,#12797,#12798,#12799,#12800,#12801, + #12802,#12803,#12804,#12805,#12806,#12807),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.063773301118E-02, + 0.13824500117,0.2033468934,0.266231764643,0.328110624574, + 0.388737346952,0.449605806425,0.511038084245,0.572095061666, + 0.631883581169,0.691143381876,0.750381181209,0.810048996234, + 0.871373350146,0.934432697147,1.),.UNSPECIFIED.); +#12789 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.370000018849 + )); +#12790 = CARTESIAN_POINT('',(0.273057862349,-0.948283842871, + 0.370000018849)); +#12791 = CARTESIAN_POINT('',(0.272886683513,-0.940668799271, + 0.370000018849)); +#12792 = CARTESIAN_POINT('',(0.271536721784,-0.929531784012, + 0.370000018849)); +#12793 = CARTESIAN_POINT('',(0.269295974881,-0.918982578235, + 0.370000018849)); +#12794 = CARTESIAN_POINT('',(0.266175489589,-0.908983182646, + 0.370000018849)); +#12795 = CARTESIAN_POINT('',(0.262085898212,-0.899607123267, + 0.370000018849)); +#12796 = CARTESIAN_POINT('',(0.257129499766,-0.89078878136, + 0.370000018849)); +#12797 = CARTESIAN_POINT('',(0.251282767994,-0.882559906377, + 0.370000018849)); +#12798 = CARTESIAN_POINT('',(0.244545926465,-0.875010605958, + 0.370000018849)); +#12799 = CARTESIAN_POINT('',(0.23712956739,-0.868226056944, + 0.370000018849)); +#12800 = CARTESIAN_POINT('',(0.229224848828,-0.862202026158, + 0.370000018849)); +#12801 = CARTESIAN_POINT('',(0.22073976124,-0.857223243719, + 0.370000018849)); +#12802 = CARTESIAN_POINT('',(0.211836460641,-0.853060209918, + 0.370000018849)); +#12803 = CARTESIAN_POINT('',(0.202406600666,-0.84989718663, + 0.370000018849)); +#12804 = CARTESIAN_POINT('',(0.192516956848,-0.847621179579, + 0.370000018849)); +#12805 = CARTESIAN_POINT('',(0.182128883168,-0.846211931323, + 0.370000018849)); +#12806 = CARTESIAN_POINT('',(0.175042610529,-0.846047009282, + 0.370000018849)); +#12807 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.370000018849)); +#12808 = ORIENTED_EDGE('',*,*,#12809,.F.); +#12809 = EDGE_CURVE('',#12810,#12786,#12812,.T.); +#12810 = VERTEX_POINT('',#12811); +#12811 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.370000018849)); +#12812 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12813,#12814,#12815,#12816, + #12817,#12818,#12819,#12820,#12821,#12822,#12823,#12824,#12825, + #12826,#12827,#12828,#12829,#12830,#12831),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.783841660733E-02, + 0.132665643409,0.195065744795,0.255523430951,0.314848330906, + 0.373440774013,0.432587188646,0.492296890479,0.552542106835, + 0.61238845435,0.672490239269,0.733818090709,0.796578741274, + 0.861439243281,0.929193548085,1.),.UNSPECIFIED.); +#12813 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.370000018849)); +#12814 = CARTESIAN_POINT('',(0.182867004961,-1.050763162177, + 0.370000018849)); +#12815 = CARTESIAN_POINT('',(0.189656256788,-1.050610968059, + 0.370000018849)); +#12816 = CARTESIAN_POINT('',(0.199576659778,-1.049342755475, + 0.370000018849)); +#12817 = CARTESIAN_POINT('',(0.208949107933,-1.047197407299, + 0.370000018849)); +#12818 = CARTESIAN_POINT('',(0.217819743993,-1.044280338682, + 0.370000018849)); +#12819 = CARTESIAN_POINT('',(0.226125387051,-1.040450130412, + 0.370000018849)); +#12820 = CARTESIAN_POINT('',(0.233897084155,-1.035759290367, + 0.370000018849)); +#12821 = CARTESIAN_POINT('',(0.241108634556,-1.030213731568, + 0.370000018849)); +#12822 = CARTESIAN_POINT('',(0.247748131584,-1.023873806349, + 0.370000018849)); +#12823 = CARTESIAN_POINT('',(0.253708881133,-1.016845455191, + 0.370000018849)); +#12824 = CARTESIAN_POINT('',(0.258924947198,-1.009222798671, + 0.370000018849)); +#12825 = CARTESIAN_POINT('',(0.263324826465,-1.001040189868, + 0.370000018849)); +#12826 = CARTESIAN_POINT('',(0.266962670739,-0.992329774057, + 0.370000018849)); +#12827 = CARTESIAN_POINT('',(0.269738385044,-0.983051327606, + 0.370000018849)); +#12828 = CARTESIAN_POINT('',(0.27169362216,-0.973238970186, + 0.370000018849)); +#12829 = CARTESIAN_POINT('',(0.272960237193,-0.962891375913, + 0.370000018849)); +#12830 = CARTESIAN_POINT('',(0.273082731629,-0.955799086606, + 0.370000018849)); +#12831 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.370000018849 + )); +#12832 = ORIENTED_EDGE('',*,*,#12833,.F.); +#12833 = EDGE_CURVE('',#12674,#12810,#12834,.T.); +#12834 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12835,#12836,#12837,#12838, + #12839,#12840,#12841,#12842,#12843,#12844,#12845),.UNSPECIFIED.,.F., + .F.,(4,1,1,1,1,1,1,1,4),(0.,0.112448389909,0.226527675213, + 0.344401949326,0.465864972487,0.591659449352,0.722168487025, + 0.858606387555,1.),.UNSPECIFIED.); +#12835 = CARTESIAN_POINT('',(0.124364842173,-1.038036108579, + 0.370000018849)); +#12836 = CARTESIAN_POINT('',(0.126241520303,-1.039071958499, + 0.370000018849)); +#12837 = CARTESIAN_POINT('',(0.130022094966,-1.04115868179, + 0.370000018849)); +#12838 = CARTESIAN_POINT('',(0.136068027781,-1.043733499778, + 0.370000018849)); +#12839 = CARTESIAN_POINT('',(0.14242981428,-1.04595440147,0.370000018849 + )); +#12840 = CARTESIAN_POINT('',(0.149163136685,-1.047725371359, + 0.370000018849)); +#12841 = CARTESIAN_POINT('',(0.156223233852,-1.049148654489, + 0.370000018849)); +#12842 = CARTESIAN_POINT('',(0.163647515599,-1.050112695153, + 0.370000018849)); +#12843 = CARTESIAN_POINT('',(0.171406569281,-1.050747291747, + 0.370000018849)); +#12844 = CARTESIAN_POINT('',(0.176700930545,-1.050809385694, + 0.370000018849)); +#12845 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.370000018849)); +#12846 = PLANE('',#12847); +#12847 = AXIS2_PLACEMENT_3D('',#12848,#12849,#12850); +#12848 = CARTESIAN_POINT('',(0.151002450531,-1.048066453204, + 0.370000018849)); +#12849 = DIRECTION('',(3.140195167994E-13,5.689178983262E-13,-1.)); +#12850 = DIRECTION('',(-1.,0.,-3.140195167994E-13)); +#12851 = ADVANCED_FACE('',(#12852),#12885,.T.); +#12852 = FACE_BOUND('',#12853,.T.); +#12853 = EDGE_LOOP('',(#12854,#12872,#12878,#12879)); +#12854 = ORIENTED_EDGE('',*,*,#12855,.F.); +#12855 = EDGE_CURVE('',#12856,#12858,#12860,.T.); +#12856 = VERTEX_POINT('',#12857); +#12857 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.350000019118)); +#12858 = VERTEX_POINT('',#12859); +#12859 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.350000019118)); +#12860 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12861,#12862,#12863,#12864, + #12865,#12866,#12867,#12868,#12869,#12870,#12871),.UNSPECIFIED.,.F., + .F.,(4,1,1,1,1,1,1,1,4),(0.,0.135294604763,0.266765657925, + 0.394816018836,0.520051654434,0.642175702971,0.762651820558, + 0.881834004381,1.),.UNSPECIFIED.); +#12861 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.350000019118)); +#12862 = CARTESIAN_POINT('',(0.173283598863,-1.02885805913, + 0.350000019118)); +#12863 = CARTESIAN_POINT('',(0.168521683228,-1.028795539013, + 0.350000019118)); +#12864 = CARTESIAN_POINT('',(0.161499306955,-1.028153944032, + 0.350000019118)); +#12865 = CARTESIAN_POINT('',(0.15469726129,-1.027188300182, + 0.350000019118)); +#12866 = CARTESIAN_POINT('',(0.148145111208,-1.025766957257, + 0.350000019118)); +#12867 = CARTESIAN_POINT('',(0.141820392498,-1.023987756711, + 0.350000019118)); +#12868 = CARTESIAN_POINT('',(0.135758961983,-1.021752944519, + 0.350000019118)); +#12869 = CARTESIAN_POINT('',(0.129896050371,-1.019200326877, + 0.350000019118)); +#12870 = CARTESIAN_POINT('',(0.126203308174,-1.017120400185, + 0.350000019118)); +#12871 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.350000019118)); +#12872 = ORIENTED_EDGE('',*,*,#12873,.F.); +#12873 = EDGE_CURVE('',#12682,#12856,#12874,.T.); +#12874 = LINE('',#12875,#12876); +#12875 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.370000018849)); +#12876 = VECTOR('',#12877,1.); +#12877 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#12878 = ORIENTED_EDGE('',*,*,#12681,.T.); +#12879 = ORIENTED_EDGE('',*,*,#12880,.T.); +#12880 = EDGE_CURVE('',#12672,#12858,#12881,.T.); +#12881 = LINE('',#12882,#12883); +#12882 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.370000018849)); +#12883 = VECTOR('',#12884,1.); +#12884 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#12885 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#12886,#12887) + ,(#12888,#12889) + ,(#12890,#12891) + ,(#12892,#12893) + ,(#12894,#12895) + ,(#12896,#12897) + ,(#12898,#12899) + ,(#12900,#12901) + ,(#12902,#12903) + ,(#12904,#12905) + ,(#12906,#12907 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.135294604763,0.266765657925,0.394816018836,0.520051654434, + 0.642175702971,0.762651820558,0.881834004381,1.),(0.,1.), + .UNSPECIFIED.); +#12886 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.370000018849)); +#12887 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.350000019118)); +#12888 = CARTESIAN_POINT('',(0.173283598863,-1.02885805913, + 0.370000018849)); +#12889 = CARTESIAN_POINT('',(0.173283598863,-1.02885805913, + 0.350000019118)); +#12890 = CARTESIAN_POINT('',(0.168521683228,-1.028795539013, + 0.370000018849)); +#12891 = CARTESIAN_POINT('',(0.168521683228,-1.028795539013, + 0.350000019118)); +#12892 = CARTESIAN_POINT('',(0.161499306955,-1.028153944032, + 0.370000018849)); +#12893 = CARTESIAN_POINT('',(0.161499306955,-1.028153944032, + 0.350000019118)); +#12894 = CARTESIAN_POINT('',(0.15469726129,-1.027188300182, + 0.370000018849)); +#12895 = CARTESIAN_POINT('',(0.15469726129,-1.027188300182, + 0.350000019118)); +#12896 = CARTESIAN_POINT('',(0.148145111208,-1.025766957257, + 0.370000018849)); +#12897 = CARTESIAN_POINT('',(0.148145111208,-1.025766957257, + 0.350000019118)); +#12898 = CARTESIAN_POINT('',(0.141820392498,-1.023987756711, + 0.370000018849)); +#12899 = CARTESIAN_POINT('',(0.141820392498,-1.023987756711, + 0.350000019118)); +#12900 = CARTESIAN_POINT('',(0.135758961983,-1.021752944519, + 0.370000018849)); +#12901 = CARTESIAN_POINT('',(0.135758961983,-1.021752944519, + 0.350000019118)); +#12902 = CARTESIAN_POINT('',(0.129896050371,-1.019200326877, + 0.370000018849)); +#12903 = CARTESIAN_POINT('',(0.129896050371,-1.019200326877, + 0.350000019118)); +#12904 = CARTESIAN_POINT('',(0.126203308174,-1.017120400185, + 0.370000018849)); +#12905 = CARTESIAN_POINT('',(0.126203308174,-1.017120400185, + 0.350000019118)); +#12906 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.370000018849)); +#12907 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.350000019118)); +#12908 = ADVANCED_FACE('',(#12909),#12943,.T.); +#12909 = FACE_BOUND('',#12910,.T.); +#12910 = EDGE_LOOP('',(#12911,#12935,#12941,#12942)); +#12911 = ORIENTED_EDGE('',*,*,#12912,.F.); +#12912 = EDGE_CURVE('',#12913,#12856,#12915,.T.); +#12913 = VERTEX_POINT('',#12914); +#12914 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.350000019118)); +#12915 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12916,#12917,#12918,#12919, + #12920,#12921,#12922,#12923,#12924,#12925,#12926,#12927,#12928, + #12929,#12930,#12931,#12932,#12933,#12934),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.378258718587E-02, + 0.144095652163,0.211372776945,0.276108573914,0.338559771335, + 0.399646477988,0.460022357923,0.520364180104,0.579989743327, + 0.638421673378,0.696329698138,0.753973538922,0.812784195164, + 0.872739820247,0.935174557152,1.),.UNSPECIFIED.); +#12916 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.350000019118)); +#12917 = CARTESIAN_POINT('',(0.24626050879,-0.953460357461, + 0.350000019118)); +#12918 = CARTESIAN_POINT('',(0.246152018511,-0.959171344234, + 0.350000019118)); +#12919 = CARTESIAN_POINT('',(0.245219524138,-0.967506787822, + 0.350000019118)); +#12920 = CARTESIAN_POINT('',(0.243709905633,-0.975388459187, + 0.350000019118)); +#12921 = CARTESIAN_POINT('',(0.24158521439,-0.982807511745, + 0.350000019118)); +#12922 = CARTESIAN_POINT('',(0.238829664169,-0.989753318622, + 0.350000019118)); +#12923 = CARTESIAN_POINT('',(0.235464586665,-0.996231804062, + 0.350000019118)); +#12924 = CARTESIAN_POINT('',(0.231480468376,-1.002249875891, + 0.350000019118)); +#12925 = CARTESIAN_POINT('',(0.226915094119,-1.007764640544, + 0.350000019118)); +#12926 = CARTESIAN_POINT('',(0.221851719839,-1.012715639421, + 0.350000019118)); +#12927 = CARTESIAN_POINT('',(0.216374918925,-1.017051263517, + 0.350000019118)); +#12928 = CARTESIAN_POINT('',(0.210526786997,-1.020728867879, + 0.350000019118)); +#12929 = CARTESIAN_POINT('',(0.204286638554,-1.023726514741, + 0.350000019118)); +#12930 = CARTESIAN_POINT('',(0.197680169222,-1.026054891829, + 0.350000019118)); +#12931 = CARTESIAN_POINT('',(0.190676284583,-1.027683829577, + 0.350000019118)); +#12932 = CARTESIAN_POINT('',(0.183311967411,-1.028693605511, + 0.350000019118)); +#12933 = CARTESIAN_POINT('',(0.178268029522,-1.028823566184, + 0.350000019118)); +#12934 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.350000019118)); +#12935 = ORIENTED_EDGE('',*,*,#12936,.F.); +#12936 = EDGE_CURVE('',#12698,#12913,#12937,.T.); +#12937 = LINE('',#12938,#12939); +#12938 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.370000018849)); +#12939 = VECTOR('',#12940,1.); +#12940 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#12941 = ORIENTED_EDGE('',*,*,#12697,.T.); +#12942 = ORIENTED_EDGE('',*,*,#12873,.T.); +#12943 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#12944,#12945) + ,(#12946,#12947) + ,(#12948,#12949) + ,(#12950,#12951) + ,(#12952,#12953) + ,(#12954,#12955) + ,(#12956,#12957) + ,(#12958,#12959) + ,(#12960,#12961) + ,(#12962,#12963) + ,(#12964,#12965) + ,(#12966,#12967) + ,(#12968,#12969) + ,(#12970,#12971) + ,(#12972,#12973) + ,(#12974,#12975) + ,(#12976,#12977) + ,(#12978,#12979) + ,(#12980,#12981 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,7.378258718587E-02,0.144095652163,0.211372776945, + 0.276108573914,0.338559771335,0.399646477988,0.460022357923, + 0.520364180104,0.579989743327,0.638421673378,0.696329698138, + 0.753973538922,0.812784195164,0.872739820247,0.935174557152,1.),(0., + 1.),.UNSPECIFIED.); +#12944 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.370000018849)); +#12945 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.350000019118)); +#12946 = CARTESIAN_POINT('',(0.24626050879,-0.953460357461, + 0.370000018849)); +#12947 = CARTESIAN_POINT('',(0.24626050879,-0.953460357461, + 0.350000019118)); +#12948 = CARTESIAN_POINT('',(0.246152018511,-0.959171344234, + 0.370000018849)); +#12949 = CARTESIAN_POINT('',(0.246152018511,-0.959171344234, + 0.350000019118)); +#12950 = CARTESIAN_POINT('',(0.245219524138,-0.967506787822, + 0.370000018849)); +#12951 = CARTESIAN_POINT('',(0.245219524138,-0.967506787822, + 0.350000019118)); +#12952 = CARTESIAN_POINT('',(0.243709905633,-0.975388459187, + 0.370000018849)); +#12953 = CARTESIAN_POINT('',(0.243709905633,-0.975388459187, + 0.350000019118)); +#12954 = CARTESIAN_POINT('',(0.24158521439,-0.982807511745, + 0.370000018849)); +#12955 = CARTESIAN_POINT('',(0.24158521439,-0.982807511745, + 0.350000019118)); +#12956 = CARTESIAN_POINT('',(0.238829664169,-0.989753318622, + 0.370000018849)); +#12957 = CARTESIAN_POINT('',(0.238829664169,-0.989753318622, + 0.350000019118)); +#12958 = CARTESIAN_POINT('',(0.235464586665,-0.996231804062, + 0.370000018849)); +#12959 = CARTESIAN_POINT('',(0.235464586665,-0.996231804062, + 0.350000019118)); +#12960 = CARTESIAN_POINT('',(0.231480468376,-1.002249875891, + 0.370000018849)); +#12961 = CARTESIAN_POINT('',(0.231480468376,-1.002249875891, + 0.350000019118)); +#12962 = CARTESIAN_POINT('',(0.226915094119,-1.007764640544, + 0.370000018849)); +#12963 = CARTESIAN_POINT('',(0.226915094119,-1.007764640544, + 0.350000019118)); +#12964 = CARTESIAN_POINT('',(0.221851719839,-1.012715639421, + 0.370000018849)); +#12965 = CARTESIAN_POINT('',(0.221851719839,-1.012715639421, + 0.350000019118)); +#12966 = CARTESIAN_POINT('',(0.216374918925,-1.017051263517, + 0.370000018849)); +#12967 = CARTESIAN_POINT('',(0.216374918925,-1.017051263517, + 0.350000019118)); +#12968 = CARTESIAN_POINT('',(0.210526786997,-1.020728867879, + 0.370000018849)); +#12969 = CARTESIAN_POINT('',(0.210526786997,-1.020728867879, + 0.350000019118)); +#12970 = CARTESIAN_POINT('',(0.204286638554,-1.023726514741, + 0.370000018849)); +#12971 = CARTESIAN_POINT('',(0.204286638554,-1.023726514741, + 0.350000019118)); +#12972 = CARTESIAN_POINT('',(0.197680169222,-1.026054891829, + 0.370000018849)); +#12973 = CARTESIAN_POINT('',(0.197680169222,-1.026054891829, + 0.350000019118)); +#12974 = CARTESIAN_POINT('',(0.190676284583,-1.027683829577, + 0.370000018849)); +#12975 = CARTESIAN_POINT('',(0.190676284583,-1.027683829577, + 0.350000019118)); +#12976 = CARTESIAN_POINT('',(0.183311967411,-1.028693605511, + 0.370000018849)); +#12977 = CARTESIAN_POINT('',(0.183311967411,-1.028693605511, + 0.350000019118)); +#12978 = CARTESIAN_POINT('',(0.178268029522,-1.028823566184, + 0.370000018849)); +#12979 = CARTESIAN_POINT('',(0.178268029522,-1.028823566184, + 0.350000019118)); +#12980 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.370000018849)); +#12981 = CARTESIAN_POINT('',(0.175698682944,-1.02888976724, + 0.350000019118)); +#12982 = ADVANCED_FACE('',(#12983),#13017,.T.); +#12983 = FACE_BOUND('',#12984,.T.); +#12984 = EDGE_LOOP('',(#12985,#13009,#13015,#13016)); +#12985 = ORIENTED_EDGE('',*,*,#12986,.F.); +#12986 = EDGE_CURVE('',#12987,#12913,#12989,.T.); +#12987 = VERTEX_POINT('',#12988); +#12988 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.350000019118)); +#12989 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#12990,#12991,#12992,#12993, + #12994,#12995,#12996,#12997,#12998,#12999,#13000,#13001,#13002, + #13003,#13004,#13005,#13006,#13007,#13008),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.460651091173E-02, + 0.126707396677,0.186764158456,0.24561607929,0.303634260101, + 0.361487584679,0.420227043541,0.48002251282,0.540669691743, + 0.601185743116,0.662329843678,0.725019474255,0.789459456756, + 0.856499216937,0.92630919798,1.),.UNSPECIFIED.); +#12990 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.350000019118)); +#12991 = CARTESIAN_POINT('',(0.173911752095,-0.867972035194, + 0.350000019118)); +#12992 = CARTESIAN_POINT('',(0.179226690383,-0.868085541693, + 0.350000019118)); +#12993 = CARTESIAN_POINT('',(0.186988896777,-0.869213037179, + 0.350000019118)); +#12994 = CARTESIAN_POINT('',(0.194406070749,-0.870872517704, + 0.350000019118)); +#12995 = CARTESIAN_POINT('',(0.201394237763,-0.873402142304, + 0.350000019118)); +#12996 = CARTESIAN_POINT('',(0.208044748399,-0.876502983283, + 0.350000019118)); +#12997 = CARTESIAN_POINT('',(0.214249933966,-0.880415575482, + 0.350000019118)); +#12998 = CARTESIAN_POINT('',(0.2201064958,-0.884949625386,0.350000019118 + )); +#12999 = CARTESIAN_POINT('',(0.22550663877,-0.890189282519, + 0.350000019118)); +#13000 = CARTESIAN_POINT('',(0.230428987223,-0.895981345421, + 0.350000019118)); +#13001 = CARTESIAN_POINT('',(0.234651790057,-0.902367444326, + 0.350000019118)); +#13002 = CARTESIAN_POINT('',(0.238327260782,-0.909180563912, + 0.350000019118)); +#13003 = CARTESIAN_POINT('',(0.241233625515,-0.916535200023, + 0.350000019118)); +#13004 = CARTESIAN_POINT('',(0.24353014304,-0.924354256587, + 0.350000019118)); +#13005 = CARTESIAN_POINT('',(0.24516018377,-0.932644379618, + 0.350000019118)); +#13006 = CARTESIAN_POINT('',(0.246112362627,-0.941431002834, + 0.350000019118)); +#13007 = CARTESIAN_POINT('',(0.246246947667,-0.947446843518, + 0.350000019118)); +#13008 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.350000019118)); +#13009 = ORIENTED_EDGE('',*,*,#13010,.F.); +#13010 = EDGE_CURVE('',#12722,#12987,#13011,.T.); +#13011 = LINE('',#13012,#13013); +#13012 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.370000018849)); +#13013 = VECTOR('',#13014,1.); +#13014 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13015 = ORIENTED_EDGE('',*,*,#12721,.T.); +#13016 = ORIENTED_EDGE('',*,*,#12936,.T.); +#13017 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#13018,#13019) + ,(#13020,#13021) + ,(#13022,#13023) + ,(#13024,#13025) + ,(#13026,#13027) + ,(#13028,#13029) + ,(#13030,#13031) + ,(#13032,#13033) + ,(#13034,#13035) + ,(#13036,#13037) + ,(#13038,#13039) + ,(#13040,#13041) + ,(#13042,#13043) + ,(#13044,#13045) + ,(#13046,#13047) + ,(#13048,#13049) + ,(#13050,#13051) + ,(#13052,#13053) + ,(#13054,#13055 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.460651091173E-02,0.126707396677,0.186764158456, + 0.24561607929,0.303634260101,0.361487584679,0.420227043541, + 0.48002251282,0.540669691743,0.601185743116,0.662329843678, + 0.725019474255,0.789459456756,0.856499216937,0.92630919798,1.),(0., + 1.),.UNSPECIFIED.); +#13018 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.370000018849)); +#13019 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.350000019118)); +#13020 = CARTESIAN_POINT('',(0.173911752095,-0.867972035194, + 0.370000018849)); +#13021 = CARTESIAN_POINT('',(0.173911752095,-0.867972035194, + 0.350000019118)); +#13022 = CARTESIAN_POINT('',(0.179226690383,-0.868085541693, + 0.370000018849)); +#13023 = CARTESIAN_POINT('',(0.179226690383,-0.868085541693, + 0.350000019118)); +#13024 = CARTESIAN_POINT('',(0.186988896777,-0.869213037179, + 0.370000018849)); +#13025 = CARTESIAN_POINT('',(0.186988896777,-0.869213037179, + 0.350000019118)); +#13026 = CARTESIAN_POINT('',(0.194406070749,-0.870872517704, + 0.370000018849)); +#13027 = CARTESIAN_POINT('',(0.194406070749,-0.870872517704, + 0.350000019118)); +#13028 = CARTESIAN_POINT('',(0.201394237763,-0.873402142304, + 0.370000018849)); +#13029 = CARTESIAN_POINT('',(0.201394237763,-0.873402142304, + 0.350000019118)); +#13030 = CARTESIAN_POINT('',(0.208044748399,-0.876502983283, + 0.370000018849)); +#13031 = CARTESIAN_POINT('',(0.208044748399,-0.876502983283, + 0.350000019118)); +#13032 = CARTESIAN_POINT('',(0.214249933966,-0.880415575482, + 0.370000018849)); +#13033 = CARTESIAN_POINT('',(0.214249933966,-0.880415575482, + 0.350000019118)); +#13034 = CARTESIAN_POINT('',(0.2201064958,-0.884949625386,0.370000018849 + )); +#13035 = CARTESIAN_POINT('',(0.2201064958,-0.884949625386,0.350000019118 + )); +#13036 = CARTESIAN_POINT('',(0.22550663877,-0.890189282519, + 0.370000018849)); +#13037 = CARTESIAN_POINT('',(0.22550663877,-0.890189282519, + 0.350000019118)); +#13038 = CARTESIAN_POINT('',(0.230428987223,-0.895981345421, + 0.370000018849)); +#13039 = CARTESIAN_POINT('',(0.230428987223,-0.895981345421, + 0.350000019118)); +#13040 = CARTESIAN_POINT('',(0.234651790057,-0.902367444326, + 0.370000018849)); +#13041 = CARTESIAN_POINT('',(0.234651790057,-0.902367444326, + 0.350000019118)); +#13042 = CARTESIAN_POINT('',(0.238327260782,-0.909180563912, + 0.370000018849)); +#13043 = CARTESIAN_POINT('',(0.238327260782,-0.909180563912, + 0.350000019118)); +#13044 = CARTESIAN_POINT('',(0.241233625515,-0.916535200023, + 0.370000018849)); +#13045 = CARTESIAN_POINT('',(0.241233625515,-0.916535200023, + 0.350000019118)); +#13046 = CARTESIAN_POINT('',(0.24353014304,-0.924354256587, + 0.370000018849)); +#13047 = CARTESIAN_POINT('',(0.24353014304,-0.924354256587, + 0.350000019118)); +#13048 = CARTESIAN_POINT('',(0.24516018377,-0.932644379618, + 0.370000018849)); +#13049 = CARTESIAN_POINT('',(0.24516018377,-0.932644379618, + 0.350000019118)); +#13050 = CARTESIAN_POINT('',(0.246112362627,-0.941431002834, + 0.370000018849)); +#13051 = CARTESIAN_POINT('',(0.246112362627,-0.941431002834, + 0.350000019118)); +#13052 = CARTESIAN_POINT('',(0.246246947667,-0.947446843518, + 0.370000018849)); +#13053 = CARTESIAN_POINT('',(0.246246947667,-0.947446843518, + 0.350000019118)); +#13054 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.370000018849)); +#13055 = CARTESIAN_POINT('',(0.246316060039,-0.95053610976, + 0.350000019118)); +#13056 = ADVANCED_FACE('',(#13057),#13083,.T.); +#13057 = FACE_BOUND('',#13058,.T.); +#13058 = EDGE_LOOP('',(#13059,#13075,#13081,#13082)); +#13059 = ORIENTED_EDGE('',*,*,#13060,.F.); +#13060 = EDGE_CURVE('',#13061,#12987,#13063,.T.); +#13061 = VERTEX_POINT('',#13062); +#13062 = CARTESIAN_POINT('',(0.124364842173,-0.880719037532, + 0.350000019118)); +#13063 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#13064,#13065,#13066,#13067, + #13068,#13069,#13070,#13071,#13072,#13073,#13074),.UNSPECIFIED.,.F., + .F.,(4,1,1,1,1,1,1,1,4),(0.,0.125279696736,0.249419970742, + 0.373356799493,0.496681278782,0.620202915744,0.745086320161, + 0.871269195019,1.),.UNSPECIFIED.); +#13064 = CARTESIAN_POINT('',(0.124364842173,-0.880719037532, + 0.350000019118)); +#13065 = CARTESIAN_POINT('',(0.126140919275,-0.879687002947, + 0.350000019118)); +#13066 = CARTESIAN_POINT('',(0.129676920001,-0.877632320165, + 0.350000019118)); +#13067 = CARTESIAN_POINT('',(0.135238406249,-0.875063562315, + 0.350000019118)); +#13068 = CARTESIAN_POINT('',(0.140907054803,-0.87283553471, + 0.350000019118)); +#13069 = CARTESIAN_POINT('',(0.146722549035,-0.871056934568, + 0.350000019118)); +#13070 = CARTESIAN_POINT('',(0.152648287954,-0.869620701303, + 0.350000019118)); +#13071 = CARTESIAN_POINT('',(0.15871534494,-0.868657379174, + 0.350000019118)); +#13072 = CARTESIAN_POINT('',(0.16491222507,-0.868009252465, + 0.350000019118)); +#13073 = CARTESIAN_POINT('',(0.169091305871,-0.867946067775, + 0.350000019118)); +#13074 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.350000019118)); +#13075 = ORIENTED_EDGE('',*,*,#13076,.F.); +#13076 = EDGE_CURVE('',#12746,#13061,#13077,.T.); +#13077 = LINE('',#13078,#13079); +#13078 = CARTESIAN_POINT('',(0.124364842173,-0.880719037532, + 0.370000018849)); +#13079 = VECTOR('',#13080,1.); +#13080 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13081 = ORIENTED_EDGE('',*,*,#12745,.T.); +#13082 = ORIENTED_EDGE('',*,*,#13010,.T.); +#13083 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#13084,#13085) + ,(#13086,#13087) + ,(#13088,#13089) + ,(#13090,#13091) + ,(#13092,#13093) + ,(#13094,#13095) + ,(#13096,#13097) + ,(#13098,#13099) + ,(#13100,#13101) + ,(#13102,#13103) + ,(#13104,#13105 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.125279696736,0.249419970742,0.373356799493,0.496681278782, + 0.620202915744,0.745086320161,0.871269195019,1.),(0.,1.), + .UNSPECIFIED.); +#13084 = CARTESIAN_POINT('',(0.124364842173,-0.880719037532, + 0.370000018849)); +#13085 = CARTESIAN_POINT('',(0.124364842173,-0.880719037532, + 0.350000019118)); +#13086 = CARTESIAN_POINT('',(0.126140919275,-0.879687002947, + 0.370000018849)); +#13087 = CARTESIAN_POINT('',(0.126140919275,-0.879687002947, + 0.350000019118)); +#13088 = CARTESIAN_POINT('',(0.129676920001,-0.877632320165, + 0.370000018849)); +#13089 = CARTESIAN_POINT('',(0.129676920001,-0.877632320165, + 0.350000019118)); +#13090 = CARTESIAN_POINT('',(0.135238406249,-0.875063562315, + 0.370000018849)); +#13091 = CARTESIAN_POINT('',(0.135238406249,-0.875063562315, + 0.350000019118)); +#13092 = CARTESIAN_POINT('',(0.140907054803,-0.87283553471, + 0.370000018849)); +#13093 = CARTESIAN_POINT('',(0.140907054803,-0.87283553471, + 0.350000019118)); +#13094 = CARTESIAN_POINT('',(0.146722549035,-0.871056934568, + 0.370000018849)); +#13095 = CARTESIAN_POINT('',(0.146722549035,-0.871056934568, + 0.350000019118)); +#13096 = CARTESIAN_POINT('',(0.152648287954,-0.869620701303, + 0.370000018849)); +#13097 = CARTESIAN_POINT('',(0.152648287954,-0.869620701303, + 0.350000019118)); +#13098 = CARTESIAN_POINT('',(0.15871534494,-0.868657379174, + 0.370000018849)); +#13099 = CARTESIAN_POINT('',(0.15871534494,-0.868657379174, + 0.350000019118)); +#13100 = CARTESIAN_POINT('',(0.16491222507,-0.868009252465, + 0.370000018849)); +#13101 = CARTESIAN_POINT('',(0.16491222507,-0.868009252465, + 0.350000019118)); +#13102 = CARTESIAN_POINT('',(0.169091305871,-0.867946067775, + 0.370000018849)); +#13103 = CARTESIAN_POINT('',(0.169091305871,-0.867946067775, + 0.350000019118)); +#13104 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.370000018849)); +#13105 = CARTESIAN_POINT('',(0.171201731785,-0.867914159656, + 0.350000019118)); +#13106 = ADVANCED_FACE('',(#13107),#13125,.T.); +#13107 = FACE_BOUND('',#13108,.T.); +#13108 = EDGE_LOOP('',(#13109,#13117,#13123,#13124)); +#13109 = ORIENTED_EDGE('',*,*,#13110,.F.); +#13110 = EDGE_CURVE('',#13111,#13061,#13113,.T.); +#13111 = VERTEX_POINT('',#13112); +#13112 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.350000019118)); +#13113 = LINE('',#13114,#13115); +#13114 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.350000019118)); +#13115 = VECTOR('',#13116,1.); +#13116 = DIRECTION('',(0.,-1.,1.616446875342E-14)); +#13117 = ORIENTED_EDGE('',*,*,#13118,.F.); +#13118 = EDGE_CURVE('',#12762,#13111,#13119,.T.); +#13119 = LINE('',#13120,#13121); +#13120 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.370000018849)); +#13121 = VECTOR('',#13122,1.); +#13122 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13123 = ORIENTED_EDGE('',*,*,#12761,.T.); +#13124 = ORIENTED_EDGE('',*,*,#13076,.T.); +#13125 = PLANE('',#13126); +#13126 = AXIS2_PLACEMENT_3D('',#13127,#13128,#13129); +#13127 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.370000018849)); +#13128 = DIRECTION('',(1.,-3.941040356425E-43,-2.438088387898E-29)); +#13129 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#13130 = ADVANCED_FACE('',(#13131),#13157,.T.); +#13131 = FACE_BOUND('',#13132,.T.); +#13132 = EDGE_LOOP('',(#13133,#13149,#13155,#13156)); +#13133 = ORIENTED_EDGE('',*,*,#13134,.F.); +#13134 = EDGE_CURVE('',#13135,#13111,#13137,.T.); +#13135 = VERTEX_POINT('',#13136); +#13136 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.350000019118)); +#13137 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#13138,#13139,#13140,#13141, + #13142,#13143,#13144,#13145,#13146,#13147,#13148),.UNSPECIFIED.,.F., + .F.,(4,1,1,1,1,1,1,1,4),(0.,0.145186866472,0.28344261092, + 0.416524365929,0.543181123535,0.665153082638,0.781360206313, + 0.892756655642,1.),.UNSPECIFIED.); +#13138 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.350000019118)); +#13139 = CARTESIAN_POINT('',(0.169105018225,-0.845979609327, + 0.350000019118)); +#13140 = CARTESIAN_POINT('',(0.164565285717,-0.846012151339, + 0.350000019118)); +#13141 = CARTESIAN_POINT('',(0.157905436813,-0.846420231187, + 0.350000019118)); +#13142 = CARTESIAN_POINT('',(0.151555981473,-0.846996972923, + 0.350000019118)); +#13143 = CARTESIAN_POINT('',(0.145507731286,-0.847896297258, + 0.350000019118)); +#13144 = CARTESIAN_POINT('',(0.139760997468,-0.848966849122, + 0.350000019118)); +#13145 = CARTESIAN_POINT('',(0.134337308149,-0.850362364808, + 0.350000019118)); +#13146 = CARTESIAN_POINT('',(0.129202568951,-0.851926029644, + 0.350000019118)); +#13147 = CARTESIAN_POINT('',(0.125956866854,-0.853243531684, + 0.350000019118)); +#13148 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.350000019118)); +#13149 = ORIENTED_EDGE('',*,*,#13150,.F.); +#13150 = EDGE_CURVE('',#12770,#13135,#13151,.T.); +#13151 = LINE('',#13152,#13153); +#13152 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.370000018849)); +#13153 = VECTOR('',#13154,1.); +#13154 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13155 = ORIENTED_EDGE('',*,*,#12769,.T.); +#13156 = ORIENTED_EDGE('',*,*,#13118,.T.); +#13157 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#13158,#13159) + ,(#13160,#13161) + ,(#13162,#13163) + ,(#13164,#13165) + ,(#13166,#13167) + ,(#13168,#13169) + ,(#13170,#13171) + ,(#13172,#13173) + ,(#13174,#13175) + ,(#13176,#13177) + ,(#13178,#13179 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.145186866472,0.28344261092,0.416524365929,0.543181123535, + 0.665153082638,0.781360206313,0.892756655642,1.),(0.,1.), + .UNSPECIFIED.); +#13158 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.370000018849)); +#13159 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.350000019118)); +#13160 = CARTESIAN_POINT('',(0.169105018225,-0.845979609327, + 0.370000018849)); +#13161 = CARTESIAN_POINT('',(0.169105018225,-0.845979609327, + 0.350000019118)); +#13162 = CARTESIAN_POINT('',(0.164565285717,-0.846012151339, + 0.370000018849)); +#13163 = CARTESIAN_POINT('',(0.164565285717,-0.846012151339, + 0.350000019118)); +#13164 = CARTESIAN_POINT('',(0.157905436813,-0.846420231187, + 0.370000018849)); +#13165 = CARTESIAN_POINT('',(0.157905436813,-0.846420231187, + 0.350000019118)); +#13166 = CARTESIAN_POINT('',(0.151555981473,-0.846996972923, + 0.370000018849)); +#13167 = CARTESIAN_POINT('',(0.151555981473,-0.846996972923, + 0.350000019118)); +#13168 = CARTESIAN_POINT('',(0.145507731286,-0.847896297258, + 0.370000018849)); +#13169 = CARTESIAN_POINT('',(0.145507731286,-0.847896297258, + 0.350000019118)); +#13170 = CARTESIAN_POINT('',(0.139760997468,-0.848966849122, + 0.370000018849)); +#13171 = CARTESIAN_POINT('',(0.139760997468,-0.848966849122, + 0.350000019118)); +#13172 = CARTESIAN_POINT('',(0.134337308149,-0.850362364808, + 0.370000018849)); +#13173 = CARTESIAN_POINT('',(0.134337308149,-0.850362364808, + 0.350000019118)); +#13174 = CARTESIAN_POINT('',(0.129202568951,-0.851926029644, + 0.370000018849)); +#13175 = CARTESIAN_POINT('',(0.129202568951,-0.851926029644, + 0.350000019118)); +#13176 = CARTESIAN_POINT('',(0.125956866854,-0.853243531684, + 0.370000018849)); +#13177 = CARTESIAN_POINT('',(0.125956866854,-0.853243531684, + 0.350000019118)); +#13178 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.370000018849)); +#13179 = CARTESIAN_POINT('',(0.124364842173,-0.853889769601, + 0.350000019118)); +#13180 = ADVANCED_FACE('',(#13181),#13215,.T.); +#13181 = FACE_BOUND('',#13182,.T.); +#13182 = EDGE_LOOP('',(#13183,#13207,#13213,#13214)); +#13183 = ORIENTED_EDGE('',*,*,#13184,.F.); +#13184 = EDGE_CURVE('',#13185,#13135,#13187,.T.); +#13185 = VERTEX_POINT('',#13186); +#13186 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.350000019118 + )); +#13187 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#13188,#13189,#13190,#13191, + #13192,#13193,#13194,#13195,#13196,#13197,#13198,#13199,#13200, + #13201,#13202,#13203,#13204,#13205,#13206),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.063773301118E-02, + 0.13824500117,0.2033468934,0.266231764643,0.328110624574, + 0.388737346952,0.449605806425,0.511038084245,0.572095061666, + 0.631883581169,0.691143381876,0.750381181209,0.810048996234, + 0.871373350146,0.934432697147,1.),.UNSPECIFIED.); +#13188 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.350000019118 + )); +#13189 = CARTESIAN_POINT('',(0.273057862349,-0.948283842871, + 0.350000019118)); +#13190 = CARTESIAN_POINT('',(0.272886683513,-0.940668799271, + 0.350000019118)); +#13191 = CARTESIAN_POINT('',(0.271536721784,-0.929531784012, + 0.350000019118)); +#13192 = CARTESIAN_POINT('',(0.269295974881,-0.918982578235, + 0.350000019118)); +#13193 = CARTESIAN_POINT('',(0.266175489589,-0.908983182646, + 0.350000019118)); +#13194 = CARTESIAN_POINT('',(0.262085898212,-0.899607123267, + 0.350000019118)); +#13195 = CARTESIAN_POINT('',(0.257129499766,-0.89078878136, + 0.350000019118)); +#13196 = CARTESIAN_POINT('',(0.251282767994,-0.882559906377, + 0.350000019118)); +#13197 = CARTESIAN_POINT('',(0.244545926465,-0.875010605958, + 0.350000019118)); +#13198 = CARTESIAN_POINT('',(0.23712956739,-0.868226056944, + 0.350000019118)); +#13199 = CARTESIAN_POINT('',(0.229224848828,-0.862202026158, + 0.350000019118)); +#13200 = CARTESIAN_POINT('',(0.22073976124,-0.857223243719, + 0.350000019118)); +#13201 = CARTESIAN_POINT('',(0.211836460641,-0.853060209918, + 0.350000019118)); +#13202 = CARTESIAN_POINT('',(0.202406600666,-0.84989718663, + 0.350000019118)); +#13203 = CARTESIAN_POINT('',(0.192516956848,-0.847621179579, + 0.350000019118)); +#13204 = CARTESIAN_POINT('',(0.182128883168,-0.846211931323, + 0.350000019118)); +#13205 = CARTESIAN_POINT('',(0.175042610529,-0.846047009282, + 0.350000019118)); +#13206 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.350000019118)); +#13207 = ORIENTED_EDGE('',*,*,#13208,.F.); +#13208 = EDGE_CURVE('',#12786,#13185,#13209,.T.); +#13209 = LINE('',#13210,#13211); +#13210 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.370000018849 + )); +#13211 = VECTOR('',#13212,1.); +#13212 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13213 = ORIENTED_EDGE('',*,*,#12785,.T.); +#13214 = ORIENTED_EDGE('',*,*,#13150,.T.); +#13215 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#13216,#13217) + ,(#13218,#13219) + ,(#13220,#13221) + ,(#13222,#13223) + ,(#13224,#13225) + ,(#13226,#13227) + ,(#13228,#13229) + ,(#13230,#13231) + ,(#13232,#13233) + ,(#13234,#13235) + ,(#13236,#13237) + ,(#13238,#13239) + ,(#13240,#13241) + ,(#13242,#13243) + ,(#13244,#13245) + ,(#13246,#13247) + ,(#13248,#13249) + ,(#13250,#13251) + ,(#13252,#13253 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,7.063773301118E-02,0.13824500117,0.2033468934,0.266231764643, + 0.328110624574,0.388737346952,0.449605806425,0.511038084245, + 0.572095061666,0.631883581169,0.691143381876,0.750381181209, + 0.810048996234,0.871373350146,0.934432697147,1.),(0.,1.), + .UNSPECIFIED.); +#13216 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.370000018849 + )); +#13217 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.350000019118 + )); +#13218 = CARTESIAN_POINT('',(0.273057862349,-0.948283842871, + 0.370000018849)); +#13219 = CARTESIAN_POINT('',(0.273057862349,-0.948283842871, + 0.350000019118)); +#13220 = CARTESIAN_POINT('',(0.272886683513,-0.940668799271, + 0.370000018849)); +#13221 = CARTESIAN_POINT('',(0.272886683513,-0.940668799271, + 0.350000019118)); +#13222 = CARTESIAN_POINT('',(0.271536721784,-0.929531784012, + 0.370000018849)); +#13223 = CARTESIAN_POINT('',(0.271536721784,-0.929531784012, + 0.350000019118)); +#13224 = CARTESIAN_POINT('',(0.269295974881,-0.918982578235, + 0.370000018849)); +#13225 = CARTESIAN_POINT('',(0.269295974881,-0.918982578235, + 0.350000019118)); +#13226 = CARTESIAN_POINT('',(0.266175489589,-0.908983182646, + 0.370000018849)); +#13227 = CARTESIAN_POINT('',(0.266175489589,-0.908983182646, + 0.350000019118)); +#13228 = CARTESIAN_POINT('',(0.262085898212,-0.899607123267, + 0.370000018849)); +#13229 = CARTESIAN_POINT('',(0.262085898212,-0.899607123267, + 0.350000019118)); +#13230 = CARTESIAN_POINT('',(0.257129499766,-0.89078878136, + 0.370000018849)); +#13231 = CARTESIAN_POINT('',(0.257129499766,-0.89078878136, + 0.350000019118)); +#13232 = CARTESIAN_POINT('',(0.251282767994,-0.882559906377, + 0.370000018849)); +#13233 = CARTESIAN_POINT('',(0.251282767994,-0.882559906377, + 0.350000019118)); +#13234 = CARTESIAN_POINT('',(0.244545926465,-0.875010605958, + 0.370000018849)); +#13235 = CARTESIAN_POINT('',(0.244545926465,-0.875010605958, + 0.350000019118)); +#13236 = CARTESIAN_POINT('',(0.23712956739,-0.868226056944, + 0.370000018849)); +#13237 = CARTESIAN_POINT('',(0.23712956739,-0.868226056944, + 0.350000019118)); +#13238 = CARTESIAN_POINT('',(0.229224848828,-0.862202026158, + 0.370000018849)); +#13239 = CARTESIAN_POINT('',(0.229224848828,-0.862202026158, + 0.350000019118)); +#13240 = CARTESIAN_POINT('',(0.22073976124,-0.857223243719, + 0.370000018849)); +#13241 = CARTESIAN_POINT('',(0.22073976124,-0.857223243719, + 0.350000019118)); +#13242 = CARTESIAN_POINT('',(0.211836460641,-0.853060209918, + 0.370000018849)); +#13243 = CARTESIAN_POINT('',(0.211836460641,-0.853060209918, + 0.350000019118)); +#13244 = CARTESIAN_POINT('',(0.202406600666,-0.84989718663, + 0.370000018849)); +#13245 = CARTESIAN_POINT('',(0.202406600666,-0.84989718663, + 0.350000019118)); +#13246 = CARTESIAN_POINT('',(0.192516956848,-0.847621179579, + 0.370000018849)); +#13247 = CARTESIAN_POINT('',(0.192516956848,-0.847621179579, + 0.350000019118)); +#13248 = CARTESIAN_POINT('',(0.182128883168,-0.846211931323, + 0.370000018849)); +#13249 = CARTESIAN_POINT('',(0.182128883168,-0.846211931323, + 0.350000019118)); +#13250 = CARTESIAN_POINT('',(0.175042610529,-0.846047009282, + 0.370000018849)); +#13251 = CARTESIAN_POINT('',(0.175042610529,-0.846047009282, + 0.350000019118)); +#13252 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.370000018849)); +#13253 = CARTESIAN_POINT('',(0.171430390318,-0.84596294044, + 0.350000019118)); +#13254 = ADVANCED_FACE('',(#13255),#13289,.T.); +#13255 = FACE_BOUND('',#13256,.T.); +#13256 = EDGE_LOOP('',(#13257,#13281,#13287,#13288)); +#13257 = ORIENTED_EDGE('',*,*,#13258,.F.); +#13258 = EDGE_CURVE('',#13259,#13185,#13261,.T.); +#13259 = VERTEX_POINT('',#13260); +#13260 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.350000019118)); +#13261 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#13262,#13263,#13264,#13265, + #13266,#13267,#13268,#13269,#13270,#13271,#13272,#13273,#13274, + #13275,#13276,#13277,#13278,#13279,#13280),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.783841660733E-02, + 0.132665643409,0.195065744795,0.255523430951,0.314848330906, + 0.373440774013,0.432587188646,0.492296890479,0.552542106835, + 0.61238845435,0.672490239269,0.733818090709,0.796578741274, + 0.861439243281,0.929193548085,1.),.UNSPECIFIED.); +#13262 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.350000019118)); +#13263 = CARTESIAN_POINT('',(0.182867004961,-1.050763162177, + 0.350000019118)); +#13264 = CARTESIAN_POINT('',(0.189656256788,-1.050610968059, + 0.350000019118)); +#13265 = CARTESIAN_POINT('',(0.199576659778,-1.049342755475, + 0.350000019118)); +#13266 = CARTESIAN_POINT('',(0.208949107933,-1.047197407299, + 0.350000019118)); +#13267 = CARTESIAN_POINT('',(0.217819743993,-1.044280338682, + 0.350000019118)); +#13268 = CARTESIAN_POINT('',(0.226125387051,-1.040450130412, + 0.350000019118)); +#13269 = CARTESIAN_POINT('',(0.233897084155,-1.035759290367, + 0.350000019118)); +#13270 = CARTESIAN_POINT('',(0.241108634556,-1.030213731568, + 0.350000019118)); +#13271 = CARTESIAN_POINT('',(0.247748131584,-1.023873806349, + 0.350000019118)); +#13272 = CARTESIAN_POINT('',(0.253708881133,-1.016845455191, + 0.350000019118)); +#13273 = CARTESIAN_POINT('',(0.258924947198,-1.009222798671, + 0.350000019118)); +#13274 = CARTESIAN_POINT('',(0.263324826465,-1.001040189868, + 0.350000019118)); +#13275 = CARTESIAN_POINT('',(0.266962670739,-0.992329774057, + 0.350000019118)); +#13276 = CARTESIAN_POINT('',(0.269738385044,-0.983051327606, + 0.350000019118)); +#13277 = CARTESIAN_POINT('',(0.27169362216,-0.973238970186, + 0.350000019118)); +#13278 = CARTESIAN_POINT('',(0.272960237193,-0.962891375913, + 0.350000019118)); +#13279 = CARTESIAN_POINT('',(0.273082731629,-0.955799086606, + 0.350000019118)); +#13280 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.350000019118 + )); +#13281 = ORIENTED_EDGE('',*,*,#13282,.F.); +#13282 = EDGE_CURVE('',#12810,#13259,#13283,.T.); +#13283 = LINE('',#13284,#13285); +#13284 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.370000018849)); +#13285 = VECTOR('',#13286,1.); +#13286 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13287 = ORIENTED_EDGE('',*,*,#12809,.T.); +#13288 = ORIENTED_EDGE('',*,*,#13208,.T.); +#13289 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#13290,#13291) + ,(#13292,#13293) + ,(#13294,#13295) + ,(#13296,#13297) + ,(#13298,#13299) + ,(#13300,#13301) + ,(#13302,#13303) + ,(#13304,#13305) + ,(#13306,#13307) + ,(#13308,#13309) + ,(#13310,#13311) + ,(#13312,#13313) + ,(#13314,#13315) + ,(#13316,#13317) + ,(#13318,#13319) + ,(#13320,#13321) + ,(#13322,#13323) + ,(#13324,#13325) + ,(#13326,#13327 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.783841660733E-02,0.132665643409,0.195065744795, + 0.255523430951,0.314848330906,0.373440774013,0.432587188646, + 0.492296890479,0.552542106835,0.61238845435,0.672490239269, + 0.733818090709,0.796578741274,0.861439243281,0.929193548085,1.),(0., + 1.),.UNSPECIFIED.); +#13290 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.370000018849)); +#13291 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.350000019118)); +#13292 = CARTESIAN_POINT('',(0.182867004961,-1.050763162177, + 0.370000018849)); +#13293 = CARTESIAN_POINT('',(0.182867004961,-1.050763162177, + 0.350000019118)); +#13294 = CARTESIAN_POINT('',(0.189656256788,-1.050610968059, + 0.370000018849)); +#13295 = CARTESIAN_POINT('',(0.189656256788,-1.050610968059, + 0.350000019118)); +#13296 = CARTESIAN_POINT('',(0.199576659778,-1.049342755475, + 0.370000018849)); +#13297 = CARTESIAN_POINT('',(0.199576659778,-1.049342755475, + 0.350000019118)); +#13298 = CARTESIAN_POINT('',(0.208949107933,-1.047197407299, + 0.370000018849)); +#13299 = CARTESIAN_POINT('',(0.208949107933,-1.047197407299, + 0.350000019118)); +#13300 = CARTESIAN_POINT('',(0.217819743993,-1.044280338682, + 0.370000018849)); +#13301 = CARTESIAN_POINT('',(0.217819743993,-1.044280338682, + 0.350000019118)); +#13302 = CARTESIAN_POINT('',(0.226125387051,-1.040450130412, + 0.370000018849)); +#13303 = CARTESIAN_POINT('',(0.226125387051,-1.040450130412, + 0.350000019118)); +#13304 = CARTESIAN_POINT('',(0.233897084155,-1.035759290367, + 0.370000018849)); +#13305 = CARTESIAN_POINT('',(0.233897084155,-1.035759290367, + 0.350000019118)); +#13306 = CARTESIAN_POINT('',(0.241108634556,-1.030213731568, + 0.370000018849)); +#13307 = CARTESIAN_POINT('',(0.241108634556,-1.030213731568, + 0.350000019118)); +#13308 = CARTESIAN_POINT('',(0.247748131584,-1.023873806349, + 0.370000018849)); +#13309 = CARTESIAN_POINT('',(0.247748131584,-1.023873806349, + 0.350000019118)); +#13310 = CARTESIAN_POINT('',(0.253708881133,-1.016845455191, + 0.370000018849)); +#13311 = CARTESIAN_POINT('',(0.253708881133,-1.016845455191, + 0.350000019118)); +#13312 = CARTESIAN_POINT('',(0.258924947198,-1.009222798671, + 0.370000018849)); +#13313 = CARTESIAN_POINT('',(0.258924947198,-1.009222798671, + 0.350000019118)); +#13314 = CARTESIAN_POINT('',(0.263324826465,-1.001040189868, + 0.370000018849)); +#13315 = CARTESIAN_POINT('',(0.263324826465,-1.001040189868, + 0.350000019118)); +#13316 = CARTESIAN_POINT('',(0.266962670739,-0.992329774057, + 0.370000018849)); +#13317 = CARTESIAN_POINT('',(0.266962670739,-0.992329774057, + 0.350000019118)); +#13318 = CARTESIAN_POINT('',(0.269738385044,-0.983051327606, + 0.370000018849)); +#13319 = CARTESIAN_POINT('',(0.269738385044,-0.983051327606, + 0.350000019118)); +#13320 = CARTESIAN_POINT('',(0.27169362216,-0.973238970186, + 0.370000018849)); +#13321 = CARTESIAN_POINT('',(0.27169362216,-0.973238970186, + 0.350000019118)); +#13322 = CARTESIAN_POINT('',(0.272960237193,-0.962891375913, + 0.370000018849)); +#13323 = CARTESIAN_POINT('',(0.272960237193,-0.962891375913, + 0.350000019118)); +#13324 = CARTESIAN_POINT('',(0.273082731629,-0.955799086606, + 0.370000018849)); +#13325 = CARTESIAN_POINT('',(0.273082731629,-0.955799086606, + 0.350000019118)); +#13326 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.370000018849 + )); +#13327 = CARTESIAN_POINT('',(0.27314532797,-0.95217482925,0.350000019118 + )); +#13328 = ADVANCED_FACE('',(#13329),#13355,.T.); +#13329 = FACE_BOUND('',#13330,.T.); +#13330 = EDGE_LOOP('',(#13331,#13347,#13353,#13354)); +#13331 = ORIENTED_EDGE('',*,*,#13332,.F.); +#13332 = EDGE_CURVE('',#13333,#13259,#13335,.T.); +#13333 = VERTEX_POINT('',#13334); +#13334 = CARTESIAN_POINT('',(0.124364842173,-1.038036108579, + 0.350000019118)); +#13335 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#13336,#13337,#13338,#13339, + #13340,#13341,#13342,#13343,#13344,#13345,#13346),.UNSPECIFIED.,.F., + .F.,(4,1,1,1,1,1,1,1,4),(0.,0.112448389909,0.226527675213, + 0.344401949326,0.465864972487,0.591659449352,0.722168487025, + 0.858606387555,1.),.UNSPECIFIED.); +#13336 = CARTESIAN_POINT('',(0.124364842173,-1.038036108579, + 0.350000019118)); +#13337 = CARTESIAN_POINT('',(0.126241520303,-1.039071958499, + 0.350000019118)); +#13338 = CARTESIAN_POINT('',(0.130022094966,-1.04115868179, + 0.350000019118)); +#13339 = CARTESIAN_POINT('',(0.136068027781,-1.043733499778, + 0.350000019118)); +#13340 = CARTESIAN_POINT('',(0.14242981428,-1.04595440147,0.350000019118 + )); +#13341 = CARTESIAN_POINT('',(0.149163136685,-1.047725371359, + 0.350000019118)); +#13342 = CARTESIAN_POINT('',(0.156223233852,-1.049148654489, + 0.350000019118)); +#13343 = CARTESIAN_POINT('',(0.163647515599,-1.050112695153, + 0.350000019118)); +#13344 = CARTESIAN_POINT('',(0.171406569281,-1.050747291747, + 0.350000019118)); +#13345 = CARTESIAN_POINT('',(0.176700930545,-1.050809385694, + 0.350000019118)); +#13346 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.350000019118)); +#13347 = ORIENTED_EDGE('',*,*,#13348,.F.); +#13348 = EDGE_CURVE('',#12674,#13333,#13349,.T.); +#13349 = LINE('',#13350,#13351); +#13350 = CARTESIAN_POINT('',(0.124364842173,-1.038036108579, + 0.370000018849)); +#13351 = VECTOR('',#13352,1.); +#13352 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13353 = ORIENTED_EDGE('',*,*,#12833,.T.); +#13354 = ORIENTED_EDGE('',*,*,#13282,.T.); +#13355 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#13356,#13357) + ,(#13358,#13359) + ,(#13360,#13361) + ,(#13362,#13363) + ,(#13364,#13365) + ,(#13366,#13367) + ,(#13368,#13369) + ,(#13370,#13371) + ,(#13372,#13373) + ,(#13374,#13375) + ,(#13376,#13377 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,4),(2,2),(0., + 0.112448389909,0.226527675213,0.344401949326,0.465864972487, + 0.591659449352,0.722168487025,0.858606387555,1.),(0.,1.), + .UNSPECIFIED.); +#13356 = CARTESIAN_POINT('',(0.124364842173,-1.038036108579, + 0.370000018849)); +#13357 = CARTESIAN_POINT('',(0.124364842173,-1.038036108579, + 0.350000019118)); +#13358 = CARTESIAN_POINT('',(0.126241520303,-1.039071958499, + 0.370000018849)); +#13359 = CARTESIAN_POINT('',(0.126241520303,-1.039071958499, + 0.350000019118)); +#13360 = CARTESIAN_POINT('',(0.130022094966,-1.04115868179, + 0.370000018849)); +#13361 = CARTESIAN_POINT('',(0.130022094966,-1.04115868179, + 0.350000019118)); +#13362 = CARTESIAN_POINT('',(0.136068027781,-1.043733499778, + 0.370000018849)); +#13363 = CARTESIAN_POINT('',(0.136068027781,-1.043733499778, + 0.350000019118)); +#13364 = CARTESIAN_POINT('',(0.14242981428,-1.04595440147,0.370000018849 + )); +#13365 = CARTESIAN_POINT('',(0.14242981428,-1.04595440147,0.350000019118 + )); +#13366 = CARTESIAN_POINT('',(0.149163136685,-1.047725371359, + 0.370000018849)); +#13367 = CARTESIAN_POINT('',(0.149163136685,-1.047725371359, + 0.350000019118)); +#13368 = CARTESIAN_POINT('',(0.156223233852,-1.049148654489, + 0.370000018849)); +#13369 = CARTESIAN_POINT('',(0.156223233852,-1.049148654489, + 0.350000019118)); +#13370 = CARTESIAN_POINT('',(0.163647515599,-1.050112695153, + 0.370000018849)); +#13371 = CARTESIAN_POINT('',(0.163647515599,-1.050112695153, + 0.350000019118)); +#13372 = CARTESIAN_POINT('',(0.171406569281,-1.050747291747, + 0.370000018849)); +#13373 = CARTESIAN_POINT('',(0.171406569281,-1.050747291747, + 0.350000019118)); +#13374 = CARTESIAN_POINT('',(0.176700930545,-1.050809385694, + 0.370000018849)); +#13375 = CARTESIAN_POINT('',(0.176700930545,-1.050809385694, + 0.350000019118)); +#13376 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.370000018849)); +#13377 = CARTESIAN_POINT('',(0.179395329235,-1.050840986455, + 0.350000019118)); +#13378 = ADVANCED_FACE('',(#13379),#13390,.T.); +#13379 = FACE_BOUND('',#13380,.T.); +#13380 = EDGE_LOOP('',(#13381,#13387,#13388,#13389)); +#13381 = ORIENTED_EDGE('',*,*,#13382,.F.); +#13382 = EDGE_CURVE('',#12858,#13333,#13383,.T.); +#13383 = LINE('',#13384,#13385); +#13384 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.350000019118)); +#13385 = VECTOR('',#13386,1.); +#13386 = DIRECTION('',(0.,-1.,9.878286460424E-15)); +#13387 = ORIENTED_EDGE('',*,*,#12880,.F.); +#13388 = ORIENTED_EDGE('',*,*,#12671,.T.); +#13389 = ORIENTED_EDGE('',*,*,#13348,.T.); +#13390 = PLANE('',#13391); +#13391 = AXIS2_PLACEMENT_3D('',#13392,#13393,#13394); +#13392 = CARTESIAN_POINT('',(0.124364842173,-1.016084889364, + 0.370000018849)); +#13393 = DIRECTION('',(1.,-2.408413551149E-43,-2.438088387898E-29)); +#13394 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#13395 = ADVANCED_FACE('',(#13396),#13494,.F.); +#13396 = FACE_BOUND('',#13397,.T.); +#13397 = EDGE_LOOP('',(#13398,#13408,#13416,#13424,#13432,#13440,#13448, + #13456,#13464,#13472,#13480,#13488)); +#13398 = ORIENTED_EDGE('',*,*,#13399,.F.); +#13399 = EDGE_CURVE('',#13400,#13402,#13404,.T.); +#13400 = VERTEX_POINT('',#13401); +#13401 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.026450742882, + 0.370000018849)); +#13402 = VERTEX_POINT('',#13403); +#13403 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.048401962098, + 0.370000018849)); +#13404 = LINE('',#13405,#13406); +#13405 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.026450742882, + 0.370000018849)); +#13406 = VECTOR('',#13407,1.); +#13407 = DIRECTION('',(0.,-1.,9.878286460424E-15)); +#13408 = ORIENTED_EDGE('',*,*,#13409,.F.); +#13409 = EDGE_CURVE('',#13410,#13400,#13412,.T.); +#13410 = VERTEX_POINT('',#13411); +#13411 = CARTESIAN_POINT('',(5.851118452508E-02,-1.026450742882, + 0.370000018849)); +#13412 = LINE('',#13413,#13414); +#13413 = CARTESIAN_POINT('',(5.851118452508E-02,-1.026450742882, + 0.370000018849)); +#13414 = VECTOR('',#13415,1.); +#13415 = DIRECTION('',(-1.,0.,0.)); +#13416 = ORIENTED_EDGE('',*,*,#13417,.F.); +#13417 = EDGE_CURVE('',#13418,#13410,#13420,.T.); +#13418 = VERTEX_POINT('',#13419); +#13419 = CARTESIAN_POINT('',(5.851118452508E-02,-0.958158060877, + 0.370000018849)); +#13420 = LINE('',#13421,#13422); +#13421 = CARTESIAN_POINT('',(5.851118452508E-02,-0.958158060877, + 0.370000018849)); +#13422 = VECTOR('',#13423,1.); +#13423 = DIRECTION('',(0.,-1.,1.270065402054E-14)); +#13424 = ORIENTED_EDGE('',*,*,#13425,.F.); +#13425 = EDGE_CURVE('',#13426,#13418,#13428,.T.); +#13426 = VERTEX_POINT('',#13427); +#13427 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.958158060877, + 0.370000018849)); +#13428 = LINE('',#13429,#13430); +#13429 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.958158060877, + 0.370000018849)); +#13430 = VECTOR('',#13431,1.); +#13431 = DIRECTION('',(1.,0.,0.)); +#13432 = ORIENTED_EDGE('',*,*,#13433,.F.); +#13433 = EDGE_CURVE('',#13434,#13426,#13436,.T.); +#13434 = VERTEX_POINT('',#13435); +#13435 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.936206841661, + 0.370000018849)); +#13436 = LINE('',#13437,#13438); +#13437 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.936206841661, + 0.370000018849)); +#13438 = VECTOR('',#13439,1.); +#13439 = DIRECTION('',(0.,-1.,9.878286460423E-15)); +#13440 = ORIENTED_EDGE('',*,*,#13441,.F.); +#13441 = EDGE_CURVE('',#13442,#13434,#13444,.T.); +#13442 = VERTEX_POINT('',#13443); +#13443 = CARTESIAN_POINT('',(5.851118452508E-02,-0.936206841661, + 0.370000018849)); +#13444 = LINE('',#13445,#13446); +#13445 = CARTESIAN_POINT('',(5.851118452508E-02,-0.936206841661, + 0.370000018849)); +#13446 = VECTOR('',#13447,1.); +#13447 = DIRECTION('',(-1.,0.,0.)); +#13448 = ORIENTED_EDGE('',*,*,#13449,.F.); +#13449 = EDGE_CURVE('',#13450,#13442,#13452,.T.); +#13450 = VERTEX_POINT('',#13451); +#13451 = CARTESIAN_POINT('',(5.851118452508E-02,-0.870353184013, + 0.370000018849)); +#13452 = LINE('',#13453,#13454); +#13453 = CARTESIAN_POINT('',(5.851118452508E-02,-0.870353184013, + 0.370000018849)); +#13454 = VECTOR('',#13455,1.); +#13455 = DIRECTION('',(0.,-1.,9.878286460423E-15)); +#13456 = ORIENTED_EDGE('',*,*,#13457,.F.); +#13457 = EDGE_CURVE('',#13458,#13450,#13460,.T.); +#13458 = VERTEX_POINT('',#13459); +#13459 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.870353184013, + 0.370000018849)); +#13460 = LINE('',#13461,#13462); +#13461 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.870353184013, + 0.370000018849)); +#13462 = VECTOR('',#13463,1.); +#13463 = DIRECTION('',(1.,0.,0.)); +#13464 = ORIENTED_EDGE('',*,*,#13465,.F.); +#13465 = EDGE_CURVE('',#13466,#13458,#13468,.T.); +#13466 = VERTEX_POINT('',#13467); +#13467 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.848401964797, + 0.370000018849)); +#13468 = LINE('',#13469,#13470); +#13469 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.848401964797, + 0.370000018849)); +#13470 = VECTOR('',#13471,1.); +#13471 = DIRECTION('',(0.,-1.,9.878286460423E-15)); +#13472 = ORIENTED_EDGE('',*,*,#13473,.F.); +#13473 = EDGE_CURVE('',#13474,#13466,#13476,.T.); +#13474 = VERTEX_POINT('',#13475); +#13475 = CARTESIAN_POINT('',(8.534045245569E-02,-0.848401964797, + 0.370000018849)); +#13476 = LINE('',#13477,#13478); +#13477 = CARTESIAN_POINT('',(8.534045245569E-02,-0.848401964797, + 0.370000018849)); +#13478 = VECTOR('',#13479,1.); +#13479 = DIRECTION('',(-1.,0.,0.)); +#13480 = ORIENTED_EDGE('',*,*,#13481,.F.); +#13481 = EDGE_CURVE('',#13482,#13474,#13484,.T.); +#13482 = VERTEX_POINT('',#13483); +#13483 = CARTESIAN_POINT('',(8.534045245569E-02,-1.048401962098, + 0.370000018849)); +#13484 = LINE('',#13485,#13486); +#13485 = CARTESIAN_POINT('',(8.534045245569E-02,-1.048401962098, + 0.370000018849)); +#13486 = VECTOR('',#13487,1.); +#13487 = DIRECTION('',(0.,1.,-1.084202172486E-14)); +#13488 = ORIENTED_EDGE('',*,*,#13489,.F.); +#13489 = EDGE_CURVE('',#13402,#13482,#13490,.T.); +#13490 = LINE('',#13491,#13492); +#13491 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.048401962098, + 0.370000018849)); +#13492 = VECTOR('',#13493,1.); +#13493 = DIRECTION('',(1.,0.,0.)); +#13494 = PLANE('',#13495); +#13495 = AXIS2_PLACEMENT_3D('',#13496,#13497,#13498); +#13496 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 0.370000018849)); +#13497 = DIRECTION('',(0.,9.878286460424E-15,1.)); +#13498 = DIRECTION('',(0.,-1.,9.878286460424E-15)); +#13499 = ADVANCED_FACE('',(#13500),#13525,.T.); +#13500 = FACE_BOUND('',#13501,.T.); +#13501 = EDGE_LOOP('',(#13502,#13512,#13518,#13519)); +#13502 = ORIENTED_EDGE('',*,*,#13503,.F.); +#13503 = EDGE_CURVE('',#13504,#13506,#13508,.T.); +#13504 = VERTEX_POINT('',#13505); +#13505 = CARTESIAN_POINT('',(5.851118452508E-02,-1.026450742882, + 0.350000019118)); +#13506 = VERTEX_POINT('',#13507); +#13507 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.026450742882, + 0.350000019118)); +#13508 = LINE('',#13509,#13510); +#13509 = CARTESIAN_POINT('',(5.851118452508E-02,-1.026450742882, + 0.350000019118)); +#13510 = VECTOR('',#13511,1.); +#13511 = DIRECTION('',(-1.,0.,0.)); +#13512 = ORIENTED_EDGE('',*,*,#13513,.F.); +#13513 = EDGE_CURVE('',#13410,#13504,#13514,.T.); +#13514 = LINE('',#13515,#13516); +#13515 = CARTESIAN_POINT('',(5.851118452508E-02,-1.026450742882, + 0.370000018849)); +#13516 = VECTOR('',#13517,1.); +#13517 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13518 = ORIENTED_EDGE('',*,*,#13409,.T.); +#13519 = ORIENTED_EDGE('',*,*,#13520,.T.); +#13520 = EDGE_CURVE('',#13400,#13506,#13521,.T.); +#13521 = LINE('',#13522,#13523); +#13522 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.026450742882, + 0.370000018849)); +#13523 = VECTOR('',#13524,1.); +#13524 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13525 = PLANE('',#13526); +#13526 = AXIS2_PLACEMENT_3D('',#13527,#13528,#13529); +#13527 = CARTESIAN_POINT('',(5.851118452508E-02,-1.026450742882, + 0.370000018849)); +#13528 = DIRECTION('',(0.,-1.,1.047444401653E-14)); +#13529 = DIRECTION('',(-1.,0.,0.)); +#13530 = ADVANCED_FACE('',(#13531),#13549,.T.); +#13531 = FACE_BOUND('',#13532,.T.); +#13532 = EDGE_LOOP('',(#13533,#13541,#13547,#13548)); +#13533 = ORIENTED_EDGE('',*,*,#13534,.F.); +#13534 = EDGE_CURVE('',#13535,#13504,#13537,.T.); +#13535 = VERTEX_POINT('',#13536); +#13536 = CARTESIAN_POINT('',(5.851118452508E-02,-0.958158060877, + 0.350000019118)); +#13537 = LINE('',#13538,#13539); +#13538 = CARTESIAN_POINT('',(5.851118452508E-02,-0.958158060877, + 0.350000019118)); +#13539 = VECTOR('',#13540,1.); +#13540 = DIRECTION('',(0.,-1.,1.270065402054E-14)); +#13541 = ORIENTED_EDGE('',*,*,#13542,.F.); +#13542 = EDGE_CURVE('',#13418,#13535,#13543,.T.); +#13543 = LINE('',#13544,#13545); +#13544 = CARTESIAN_POINT('',(5.851118452508E-02,-0.958158060877, + 0.370000018849)); +#13545 = VECTOR('',#13546,1.); +#13546 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13547 = ORIENTED_EDGE('',*,*,#13417,.T.); +#13548 = ORIENTED_EDGE('',*,*,#13513,.T.); +#13549 = PLANE('',#13550); +#13550 = AXIS2_PLACEMENT_3D('',#13551,#13552,#13553); +#13551 = CARTESIAN_POINT('',(5.851118452508E-02,-0.958158060877, + 0.370000018849)); +#13552 = DIRECTION('',(1.,-3.09653170862E-43,-2.438088387898E-29)); +#13553 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#13554 = ADVANCED_FACE('',(#13555),#13573,.T.); +#13555 = FACE_BOUND('',#13556,.T.); +#13556 = EDGE_LOOP('',(#13557,#13565,#13571,#13572)); +#13557 = ORIENTED_EDGE('',*,*,#13558,.F.); +#13558 = EDGE_CURVE('',#13559,#13535,#13561,.T.); +#13559 = VERTEX_POINT('',#13560); +#13560 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.958158060877, + 0.350000019118)); +#13561 = LINE('',#13562,#13563); +#13562 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.958158060877, + 0.350000019118)); +#13563 = VECTOR('',#13564,1.); +#13564 = DIRECTION('',(1.,0.,0.)); +#13565 = ORIENTED_EDGE('',*,*,#13566,.F.); +#13566 = EDGE_CURVE('',#13426,#13559,#13567,.T.); +#13567 = LINE('',#13568,#13569); +#13568 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.958158060877, + 0.370000018849)); +#13569 = VECTOR('',#13570,1.); +#13570 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13571 = ORIENTED_EDGE('',*,*,#13425,.T.); +#13572 = ORIENTED_EDGE('',*,*,#13542,.T.); +#13573 = PLANE('',#13574); +#13574 = AXIS2_PLACEMENT_3D('',#13575,#13576,#13577); +#13575 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.958158060877, + 0.370000018849)); +#13576 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#13577 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#13578 = ADVANCED_FACE('',(#13579),#13597,.T.); +#13579 = FACE_BOUND('',#13580,.T.); +#13580 = EDGE_LOOP('',(#13581,#13589,#13595,#13596)); +#13581 = ORIENTED_EDGE('',*,*,#13582,.F.); +#13582 = EDGE_CURVE('',#13583,#13559,#13585,.T.); +#13583 = VERTEX_POINT('',#13584); +#13584 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.936206841661, + 0.350000019118)); +#13585 = LINE('',#13586,#13587); +#13586 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.936206841661, + 0.350000019118)); +#13587 = VECTOR('',#13588,1.); +#13588 = DIRECTION('',(0.,-1.,9.878286460423E-15)); +#13589 = ORIENTED_EDGE('',*,*,#13590,.F.); +#13590 = EDGE_CURVE('',#13434,#13583,#13591,.T.); +#13591 = LINE('',#13592,#13593); +#13592 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.936206841661, + 0.370000018849)); +#13593 = VECTOR('',#13594,1.); +#13594 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13595 = ORIENTED_EDGE('',*,*,#13433,.T.); +#13596 = ORIENTED_EDGE('',*,*,#13566,.T.); +#13597 = PLANE('',#13598); +#13598 = AXIS2_PLACEMENT_3D('',#13599,#13600,#13601); +#13599 = CARTESIAN_POINT('',(-1.222052183744E-02,-0.936206841661, + 0.370000018849)); +#13600 = DIRECTION('',(1.,-2.408413551149E-43,-2.438088387898E-29)); +#13601 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#13602 = ADVANCED_FACE('',(#13603),#13621,.T.); +#13603 = FACE_BOUND('',#13604,.T.); +#13604 = EDGE_LOOP('',(#13605,#13613,#13619,#13620)); +#13605 = ORIENTED_EDGE('',*,*,#13606,.F.); +#13606 = EDGE_CURVE('',#13607,#13583,#13609,.T.); +#13607 = VERTEX_POINT('',#13608); +#13608 = CARTESIAN_POINT('',(5.851118452508E-02,-0.936206841661, + 0.350000019118)); +#13609 = LINE('',#13610,#13611); +#13610 = CARTESIAN_POINT('',(5.851118452508E-02,-0.936206841661, + 0.350000019118)); +#13611 = VECTOR('',#13612,1.); +#13612 = DIRECTION('',(-1.,0.,0.)); +#13613 = ORIENTED_EDGE('',*,*,#13614,.F.); +#13614 = EDGE_CURVE('',#13442,#13607,#13615,.T.); +#13615 = LINE('',#13616,#13617); +#13616 = CARTESIAN_POINT('',(5.851118452508E-02,-0.936206841661, + 0.370000018849)); +#13617 = VECTOR('',#13618,1.); +#13618 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13619 = ORIENTED_EDGE('',*,*,#13441,.T.); +#13620 = ORIENTED_EDGE('',*,*,#13590,.T.); +#13621 = PLANE('',#13622); +#13622 = AXIS2_PLACEMENT_3D('',#13623,#13624,#13625); +#13623 = CARTESIAN_POINT('',(5.851118452508E-02,-0.936206841661, + 0.370000018849)); +#13624 = DIRECTION('',(0.,-1.,1.047444401653E-14)); +#13625 = DIRECTION('',(-1.,0.,0.)); +#13626 = ADVANCED_FACE('',(#13627),#13645,.T.); +#13627 = FACE_BOUND('',#13628,.T.); +#13628 = EDGE_LOOP('',(#13629,#13637,#13643,#13644)); +#13629 = ORIENTED_EDGE('',*,*,#13630,.F.); +#13630 = EDGE_CURVE('',#13631,#13607,#13633,.T.); +#13631 = VERTEX_POINT('',#13632); +#13632 = CARTESIAN_POINT('',(5.851118452508E-02,-0.870353184013, + 0.350000019118)); +#13633 = LINE('',#13634,#13635); +#13634 = CARTESIAN_POINT('',(5.851118452508E-02,-0.870353184013, + 0.350000019118)); +#13635 = VECTOR('',#13636,1.); +#13636 = DIRECTION('',(0.,-1.,9.878286460423E-15)); +#13637 = ORIENTED_EDGE('',*,*,#13638,.F.); +#13638 = EDGE_CURVE('',#13450,#13631,#13639,.T.); +#13639 = LINE('',#13640,#13641); +#13640 = CARTESIAN_POINT('',(5.851118452508E-02,-0.870353184013, + 0.370000018849)); +#13641 = VECTOR('',#13642,1.); +#13642 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13643 = ORIENTED_EDGE('',*,*,#13449,.T.); +#13644 = ORIENTED_EDGE('',*,*,#13614,.T.); +#13645 = PLANE('',#13646); +#13646 = AXIS2_PLACEMENT_3D('',#13647,#13648,#13649); +#13647 = CARTESIAN_POINT('',(5.851118452508E-02,-0.870353184013, + 0.370000018849)); +#13648 = DIRECTION('',(1.,-2.408413551149E-43,-2.438088387898E-29)); +#13649 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#13650 = ADVANCED_FACE('',(#13651),#13669,.T.); +#13651 = FACE_BOUND('',#13652,.T.); +#13652 = EDGE_LOOP('',(#13653,#13661,#13667,#13668)); +#13653 = ORIENTED_EDGE('',*,*,#13654,.F.); +#13654 = EDGE_CURVE('',#13655,#13631,#13657,.T.); +#13655 = VERTEX_POINT('',#13656); +#13656 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.870353184013, + 0.350000019118)); +#13657 = LINE('',#13658,#13659); +#13658 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.870353184013, + 0.350000019118)); +#13659 = VECTOR('',#13660,1.); +#13660 = DIRECTION('',(1.,0.,0.)); +#13661 = ORIENTED_EDGE('',*,*,#13662,.F.); +#13662 = EDGE_CURVE('',#13458,#13655,#13663,.T.); +#13663 = LINE('',#13664,#13665); +#13664 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.870353184013, + 0.370000018849)); +#13665 = VECTOR('',#13666,1.); +#13666 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13667 = ORIENTED_EDGE('',*,*,#13457,.T.); +#13668 = ORIENTED_EDGE('',*,*,#13638,.T.); +#13669 = PLANE('',#13670); +#13670 = AXIS2_PLACEMENT_3D('',#13671,#13672,#13673); +#13671 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.870353184013, + 0.370000018849)); +#13672 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#13673 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#13674 = ADVANCED_FACE('',(#13675),#13693,.T.); +#13675 = FACE_BOUND('',#13676,.T.); +#13676 = EDGE_LOOP('',(#13677,#13685,#13691,#13692)); +#13677 = ORIENTED_EDGE('',*,*,#13678,.F.); +#13678 = EDGE_CURVE('',#13679,#13655,#13681,.T.); +#13679 = VERTEX_POINT('',#13680); +#13680 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.848401964797, + 0.350000019118)); +#13681 = LINE('',#13682,#13683); +#13682 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.848401964797, + 0.350000019118)); +#13683 = VECTOR('',#13684,1.); +#13684 = DIRECTION('',(0.,-1.,9.878286460423E-15)); +#13685 = ORIENTED_EDGE('',*,*,#13686,.F.); +#13686 = EDGE_CURVE('',#13466,#13679,#13687,.T.); +#13687 = LINE('',#13688,#13689); +#13688 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.848401964797, + 0.370000018849)); +#13689 = VECTOR('',#13690,1.); +#13690 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13691 = ORIENTED_EDGE('',*,*,#13465,.T.); +#13692 = ORIENTED_EDGE('',*,*,#13662,.T.); +#13693 = PLANE('',#13694); +#13694 = AXIS2_PLACEMENT_3D('',#13695,#13696,#13697); +#13695 = CARTESIAN_POINT('',(-1.70985705521E-02,-0.848401964797, + 0.370000018849)); +#13696 = DIRECTION('',(1.,-2.408413551149E-43,-2.438088387898E-29)); +#13697 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#13698 = ADVANCED_FACE('',(#13699),#13717,.T.); +#13699 = FACE_BOUND('',#13700,.T.); +#13700 = EDGE_LOOP('',(#13701,#13709,#13715,#13716)); +#13701 = ORIENTED_EDGE('',*,*,#13702,.F.); +#13702 = EDGE_CURVE('',#13703,#13679,#13705,.T.); +#13703 = VERTEX_POINT('',#13704); +#13704 = CARTESIAN_POINT('',(8.534045245569E-02,-0.848401964797, + 0.350000019118)); +#13705 = LINE('',#13706,#13707); +#13706 = CARTESIAN_POINT('',(8.534045245569E-02,-0.848401964797, + 0.350000019118)); +#13707 = VECTOR('',#13708,1.); +#13708 = DIRECTION('',(-1.,0.,0.)); +#13709 = ORIENTED_EDGE('',*,*,#13710,.F.); +#13710 = EDGE_CURVE('',#13474,#13703,#13711,.T.); +#13711 = LINE('',#13712,#13713); +#13712 = CARTESIAN_POINT('',(8.534045245569E-02,-0.848401964797, + 0.370000018849)); +#13713 = VECTOR('',#13714,1.); +#13714 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13715 = ORIENTED_EDGE('',*,*,#13473,.T.); +#13716 = ORIENTED_EDGE('',*,*,#13686,.T.); +#13717 = PLANE('',#13718); +#13718 = AXIS2_PLACEMENT_3D('',#13719,#13720,#13721); +#13719 = CARTESIAN_POINT('',(8.534045245569E-02,-0.848401964797, + 0.370000018849)); +#13720 = DIRECTION('',(0.,-1.,1.047444401653E-14)); +#13721 = DIRECTION('',(-1.,0.,0.)); +#13722 = ADVANCED_FACE('',(#13723),#13741,.T.); +#13723 = FACE_BOUND('',#13724,.T.); +#13724 = EDGE_LOOP('',(#13725,#13733,#13739,#13740)); +#13725 = ORIENTED_EDGE('',*,*,#13726,.F.); +#13726 = EDGE_CURVE('',#13727,#13703,#13729,.T.); +#13727 = VERTEX_POINT('',#13728); +#13728 = CARTESIAN_POINT('',(8.534045245569E-02,-1.048401962098, + 0.350000019118)); +#13729 = LINE('',#13730,#13731); +#13730 = CARTESIAN_POINT('',(8.534045245569E-02,-1.048401962098, + 0.350000019118)); +#13731 = VECTOR('',#13732,1.); +#13732 = DIRECTION('',(0.,1.,-1.084202172486E-14)); +#13733 = ORIENTED_EDGE('',*,*,#13734,.F.); +#13734 = EDGE_CURVE('',#13482,#13727,#13735,.T.); +#13735 = LINE('',#13736,#13737); +#13736 = CARTESIAN_POINT('',(8.534045245569E-02,-1.048401962098, + 0.370000018849)); +#13737 = VECTOR('',#13738,1.); +#13738 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13739 = ORIENTED_EDGE('',*,*,#13481,.T.); +#13740 = ORIENTED_EDGE('',*,*,#13710,.T.); +#13741 = PLANE('',#13742); +#13742 = AXIS2_PLACEMENT_3D('',#13743,#13744,#13745); +#13743 = CARTESIAN_POINT('',(8.534045245569E-02,-1.048401962098, + 0.370000018849)); +#13744 = DIRECTION('',(-1.,2.643380726871E-43,2.438088387898E-29)); +#13745 = DIRECTION('',(2.643380726871E-43,1.,0.)); +#13746 = ADVANCED_FACE('',(#13747),#13765,.T.); +#13747 = FACE_BOUND('',#13748,.T.); +#13748 = EDGE_LOOP('',(#13749,#13757,#13763,#13764)); +#13749 = ORIENTED_EDGE('',*,*,#13750,.F.); +#13750 = EDGE_CURVE('',#13751,#13727,#13753,.T.); +#13751 = VERTEX_POINT('',#13752); +#13752 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.048401962098, + 0.350000019118)); +#13753 = LINE('',#13754,#13755); +#13754 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.048401962098, + 0.350000019118)); +#13755 = VECTOR('',#13756,1.); +#13756 = DIRECTION('',(1.,0.,0.)); +#13757 = ORIENTED_EDGE('',*,*,#13758,.F.); +#13758 = EDGE_CURVE('',#13402,#13751,#13759,.T.); +#13759 = LINE('',#13760,#13761); +#13760 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.048401962098, + 0.370000018849)); +#13761 = VECTOR('',#13762,1.); +#13762 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13763 = ORIENTED_EDGE('',*,*,#13489,.T.); +#13764 = ORIENTED_EDGE('',*,*,#13734,.T.); +#13765 = PLANE('',#13766); +#13766 = AXIS2_PLACEMENT_3D('',#13767,#13768,#13769); +#13767 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.048401962098, + 0.370000018849)); +#13768 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#13769 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#13770 = ADVANCED_FACE('',(#13771),#13782,.T.); +#13771 = FACE_BOUND('',#13772,.T.); +#13772 = EDGE_LOOP('',(#13773,#13779,#13780,#13781)); +#13773 = ORIENTED_EDGE('',*,*,#13774,.F.); +#13774 = EDGE_CURVE('',#13506,#13751,#13775,.T.); +#13775 = LINE('',#13776,#13777); +#13776 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.026450742882, + 0.350000019118)); +#13777 = VECTOR('',#13778,1.); +#13778 = DIRECTION('',(0.,-1.,9.878286460424E-15)); +#13779 = ORIENTED_EDGE('',*,*,#13520,.F.); +#13780 = ORIENTED_EDGE('',*,*,#13399,.T.); +#13781 = ORIENTED_EDGE('',*,*,#13758,.T.); +#13782 = PLANE('',#13783); +#13783 = AXIS2_PLACEMENT_3D('',#13784,#13785,#13786); +#13784 = CARTESIAN_POINT('',(-2.197661926675E-02,-1.026450742882, + 0.370000018849)); +#13785 = DIRECTION('',(1.,-2.408413551149E-43,-2.438088387898E-29)); +#13786 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#13787 = ADVANCED_FACE('',(#13788),#13813,.T.); +#13788 = FACE_BOUND('',#13789,.T.); +#13789 = EDGE_LOOP('',(#13790,#13791,#13799,#13807)); +#13790 = ORIENTED_EDGE('',*,*,#12337,.F.); +#13791 = ORIENTED_EDGE('',*,*,#13792,.F.); +#13792 = EDGE_CURVE('',#13793,#12330,#13795,.T.); +#13793 = VERTEX_POINT('',#13794); +#13794 = CARTESIAN_POINT('',(-8.783027691462E-02,-0.870353184013, + 0.370000018849)); +#13795 = LINE('',#13796,#13797); +#13796 = CARTESIAN_POINT('',(-8.783027691462E-02,-0.870353184013, + 0.370000018849)); +#13797 = VECTOR('',#13798,1.); +#13798 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13799 = ORIENTED_EDGE('',*,*,#13800,.T.); +#13800 = EDGE_CURVE('',#13793,#13801,#13803,.T.); +#13801 = VERTEX_POINT('',#13802); +#13802 = CARTESIAN_POINT('',(-8.783027691462E-02,-1.026450742882, + 0.370000018849)); +#13803 = LINE('',#13804,#13805); +#13804 = CARTESIAN_POINT('',(-8.783027691462E-02,-0.870353184013, + 0.370000018849)); +#13805 = VECTOR('',#13806,1.); +#13806 = DIRECTION('',(0.,-1.,1.111307226798E-14)); +#13807 = ORIENTED_EDGE('',*,*,#13808,.T.); +#13808 = EDGE_CURVE('',#13801,#12338,#13809,.T.); +#13809 = LINE('',#13810,#13811); +#13810 = CARTESIAN_POINT('',(-8.783027691462E-02,-1.026450742882, + 0.370000018849)); +#13811 = VECTOR('',#13812,1.); +#13812 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13813 = PLANE('',#13814); +#13814 = AXIS2_PLACEMENT_3D('',#13815,#13816,#13817); +#13815 = CARTESIAN_POINT('',(-8.783027691462E-02,-0.870353184013, + 0.370000018849)); +#13816 = DIRECTION('',(1.,-2.709465245042E-43,-2.438088387898E-29)); +#13817 = DIRECTION('',(-2.438088387898E-29,0.,-1.)); +#13818 = ADVANCED_FACE('',(#13819),#13837,.T.); +#13819 = FACE_BOUND('',#13820,.T.); +#13820 = EDGE_LOOP('',(#13821,#13822,#13823,#13831)); +#13821 = ORIENTED_EDGE('',*,*,#12345,.F.); +#13822 = ORIENTED_EDGE('',*,*,#13808,.F.); +#13823 = ORIENTED_EDGE('',*,*,#13824,.T.); +#13824 = EDGE_CURVE('',#13801,#13825,#13827,.T.); +#13825 = VERTEX_POINT('',#13826); +#13826 = CARTESIAN_POINT('',(-0.116222044824,-1.026450742882, + 0.370000018849)); +#13827 = LINE('',#13828,#13829); +#13828 = CARTESIAN_POINT('',(-8.783027691462E-02,-1.026450742882, + 0.370000018849)); +#13829 = VECTOR('',#13830,1.); +#13830 = DIRECTION('',(-1.,0.,0.)); +#13831 = ORIENTED_EDGE('',*,*,#13832,.T.); +#13832 = EDGE_CURVE('',#13825,#12346,#13833,.T.); +#13833 = LINE('',#13834,#13835); +#13834 = CARTESIAN_POINT('',(-0.116222044824,-1.026450742882, + 0.370000018849)); +#13835 = VECTOR('',#13836,1.); +#13836 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13837 = PLANE('',#13838); +#13838 = AXIS2_PLACEMENT_3D('',#13839,#13840,#13841); +#13839 = CARTESIAN_POINT('',(-8.783027691462E-02,-1.026450742882, + 0.370000018849)); +#13840 = DIRECTION('',(0.,-1.,1.047444401653E-14)); +#13841 = DIRECTION('',(-1.,0.,0.)); +#13842 = ADVANCED_FACE('',(#13843),#13877,.T.); +#13843 = FACE_BOUND('',#13844,.T.); +#13844 = EDGE_LOOP('',(#13845,#13846,#13847,#13871)); +#13845 = ORIENTED_EDGE('',*,*,#12353,.F.); +#13846 = ORIENTED_EDGE('',*,*,#13832,.F.); +#13847 = ORIENTED_EDGE('',*,*,#13848,.T.); +#13848 = EDGE_CURVE('',#13825,#13849,#13851,.T.); +#13849 = VERTEX_POINT('',#13850); +#13850 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.370000018849)); +#13851 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#13852,#13853,#13854,#13855, + #13856,#13857,#13858,#13859,#13860,#13861,#13862,#13863,#13864, + #13865,#13866,#13867,#13868,#13869,#13870),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.082642719843E-02, + 0.138168749717,0.202474915996,0.263973212663,0.323654488881, + 0.381810801969,0.439403135578,0.497337440545,0.555096767069, + 0.613004897476,0.671539510489,0.731656272811,0.794298233775, + 0.859482493363,0.927681473872,1.),.UNSPECIFIED.); +#13852 = CARTESIAN_POINT('',(-0.116222044824,-1.026450742882, + 0.370000018849)); +#13853 = CARTESIAN_POINT('',(-0.119235583699,-1.026385656206, + 0.370000018849)); +#13854 = CARTESIAN_POINT('',(-0.125114418972,-1.026258684608, + 0.370000018849)); +#13855 = CARTESIAN_POINT('',(-0.133681381138,-1.025248759869, + 0.370000018849)); +#13856 = CARTESIAN_POINT('',(-0.141745991149,-1.023630950434, + 0.370000018849)); +#13857 = CARTESIAN_POINT('',(-0.149313368842,-1.021347969554, + 0.370000018849)); +#13858 = CARTESIAN_POINT('',(-0.156353596289,-1.018370658489, + 0.370000018849)); +#13859 = CARTESIAN_POINT('',(-0.1628815535,-1.014725143318, + 0.370000018849)); +#13860 = CARTESIAN_POINT('',(-0.168914966337,-1.010433471727, + 0.370000018849)); +#13861 = CARTESIAN_POINT('',(-0.174393928647,-1.005478010062, + 0.370000018849)); +#13862 = CARTESIAN_POINT('',(-0.179295552945,-0.999933319418, + 0.370000018849)); +#13863 = CARTESIAN_POINT('',(-0.183537730602,-0.993838326707, + 0.370000018849)); +#13864 = CARTESIAN_POINT('',(-0.187144950415,-0.987234363153, + 0.370000018849)); +#13865 = CARTESIAN_POINT('',(-0.190090707858,-0.980090858661, + 0.370000018849)); +#13866 = CARTESIAN_POINT('',(-0.192356961314,-0.972411025797, + 0.370000018849)); +#13867 = CARTESIAN_POINT('',(-0.193996492484,-0.96422480745, + 0.370000018849)); +#13868 = CARTESIAN_POINT('',(-0.194944266698,-0.955512673743, + 0.370000018849)); +#13869 = CARTESIAN_POINT('',(-0.195078344407,-0.949534885377, + 0.370000018849)); +#13870 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.370000018849)); +#13871 = ORIENTED_EDGE('',*,*,#13872,.T.); +#13872 = EDGE_CURVE('',#13849,#12354,#13873,.T.); +#13873 = LINE('',#13874,#13875); +#13874 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.370000018849)); +#13875 = VECTOR('',#13876,1.); +#13876 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13877 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#13878,#13879) + ,(#13880,#13881) + ,(#13882,#13883) + ,(#13884,#13885) + ,(#13886,#13887) + ,(#13888,#13889) + ,(#13890,#13891) + ,(#13892,#13893) + ,(#13894,#13895) + ,(#13896,#13897) + ,(#13898,#13899) + ,(#13900,#13901) + ,(#13902,#13903) + ,(#13904,#13905) + ,(#13906,#13907) + ,(#13908,#13909) + ,(#13910,#13911) + ,(#13912,#13913) + ,(#13914,#13915 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,7.082642719843E-02,0.138168749717,0.202474915996, + 0.263973212663,0.323654488881,0.381810801969,0.439403135578, + 0.497337440545,0.555096767069,0.613004897476,0.671539510489, + 0.731656272811,0.794298233775,0.859482493363,0.927681473872,1.),(0., + 1.),.UNSPECIFIED.); +#13878 = CARTESIAN_POINT('',(-0.116222044824,-1.026450742882, + 0.370000018849)); +#13879 = CARTESIAN_POINT('',(-0.116222044824,-1.026450742882, + 0.350000019118)); +#13880 = CARTESIAN_POINT('',(-0.119235583699,-1.026385656206, + 0.370000018849)); +#13881 = CARTESIAN_POINT('',(-0.119235583699,-1.026385656206, + 0.350000019118)); +#13882 = CARTESIAN_POINT('',(-0.125114418972,-1.026258684608, + 0.370000018849)); +#13883 = CARTESIAN_POINT('',(-0.125114418972,-1.026258684608, + 0.350000019118)); +#13884 = CARTESIAN_POINT('',(-0.133681381138,-1.025248759869, + 0.370000018849)); +#13885 = CARTESIAN_POINT('',(-0.133681381138,-1.025248759869, + 0.350000019118)); +#13886 = CARTESIAN_POINT('',(-0.141745991149,-1.023630950434, + 0.370000018849)); +#13887 = CARTESIAN_POINT('',(-0.141745991149,-1.023630950434, + 0.350000019118)); +#13888 = CARTESIAN_POINT('',(-0.149313368842,-1.021347969554, + 0.370000018849)); +#13889 = CARTESIAN_POINT('',(-0.149313368842,-1.021347969554, + 0.350000019118)); +#13890 = CARTESIAN_POINT('',(-0.156353596289,-1.018370658489, + 0.370000018849)); +#13891 = CARTESIAN_POINT('',(-0.156353596289,-1.018370658489, + 0.350000019118)); +#13892 = CARTESIAN_POINT('',(-0.1628815535,-1.014725143318, + 0.370000018849)); +#13893 = CARTESIAN_POINT('',(-0.1628815535,-1.014725143318, + 0.350000019118)); +#13894 = CARTESIAN_POINT('',(-0.168914966337,-1.010433471727, + 0.370000018849)); +#13895 = CARTESIAN_POINT('',(-0.168914966337,-1.010433471727, + 0.350000019118)); +#13896 = CARTESIAN_POINT('',(-0.174393928647,-1.005478010062, + 0.370000018849)); +#13897 = CARTESIAN_POINT('',(-0.174393928647,-1.005478010062, + 0.350000019118)); +#13898 = CARTESIAN_POINT('',(-0.179295552945,-0.999933319418, + 0.370000018849)); +#13899 = CARTESIAN_POINT('',(-0.179295552945,-0.999933319418, + 0.350000019118)); +#13900 = CARTESIAN_POINT('',(-0.183537730602,-0.993838326707, + 0.370000018849)); +#13901 = CARTESIAN_POINT('',(-0.183537730602,-0.993838326707, + 0.350000019118)); +#13902 = CARTESIAN_POINT('',(-0.187144950415,-0.987234363153, + 0.370000018849)); +#13903 = CARTESIAN_POINT('',(-0.187144950415,-0.987234363153, + 0.350000019118)); +#13904 = CARTESIAN_POINT('',(-0.190090707858,-0.980090858661, + 0.370000018849)); +#13905 = CARTESIAN_POINT('',(-0.190090707858,-0.980090858661, + 0.350000019118)); +#13906 = CARTESIAN_POINT('',(-0.192356961314,-0.972411025797, + 0.370000018849)); +#13907 = CARTESIAN_POINT('',(-0.192356961314,-0.972411025797, + 0.350000019118)); +#13908 = CARTESIAN_POINT('',(-0.193996492484,-0.96422480745, + 0.370000018849)); +#13909 = CARTESIAN_POINT('',(-0.193996492484,-0.96422480745, + 0.350000019118)); +#13910 = CARTESIAN_POINT('',(-0.194944266698,-0.955512673743, + 0.370000018849)); +#13911 = CARTESIAN_POINT('',(-0.194944266698,-0.955512673743, + 0.350000019118)); +#13912 = CARTESIAN_POINT('',(-0.195078344407,-0.949534885377, + 0.370000018849)); +#13913 = CARTESIAN_POINT('',(-0.195078344407,-0.949534885377, + 0.350000019118)); +#13914 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.370000018849)); +#13915 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.350000019118)); +#13916 = ADVANCED_FACE('',(#13917),#13951,.T.); +#13917 = FACE_BOUND('',#13918,.T.); +#13918 = EDGE_LOOP('',(#13919,#13920,#13921,#13945)); +#13919 = ORIENTED_EDGE('',*,*,#12377,.F.); +#13920 = ORIENTED_EDGE('',*,*,#13872,.F.); +#13921 = ORIENTED_EDGE('',*,*,#13922,.T.); +#13922 = EDGE_CURVE('',#13849,#13923,#13925,.T.); +#13923 = VERTEX_POINT('',#13924); +#13924 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.370000018849)); +#13925 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#13926,#13927,#13928,#13929, + #13930,#13931,#13932,#13933,#13934,#13935,#13936,#13937,#13938, + #13939,#13940,#13941,#13942,#13943,#13944),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,7.429704972735E-02, + 0.144380499559,0.210480382945,0.27322424923,0.333782884733, + 0.392326248648,0.449878804646,0.507606719485,0.565245786658, + 0.623182940078,0.681326130709,0.740937022969,0.801873743509, + 0.865253473691,0.93094792748,1.),.UNSPECIFIED.); +#13926 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.370000018849)); +#13927 = CARTESIAN_POINT('',(-0.195081940312,-0.943394143081, + 0.370000018849)); +#13928 = CARTESIAN_POINT('',(-0.194954833157,-0.937439478329, + 0.370000018849)); +#13929 = CARTESIAN_POINT('',(-0.19396156814,-0.928803904168, + 0.370000018849)); +#13930 = CARTESIAN_POINT('',(-0.192309872804,-0.920756192294, + 0.370000018849)); +#13931 = CARTESIAN_POINT('',(-0.189925549902,-0.913304035743, + 0.370000018849)); +#13932 = CARTESIAN_POINT('',(-0.186929155049,-0.906415245935, + 0.370000018849)); +#13933 = CARTESIAN_POINT('',(-0.183256726853,-0.900102398502, + 0.370000018849)); +#13934 = CARTESIAN_POINT('',(-0.17886908421,-0.894408982413, + 0.370000018849)); +#13935 = CARTESIAN_POINT('',(-0.173822057237,-0.889347269557, + 0.370000018849)); +#13936 = CARTESIAN_POINT('',(-0.168225057155,-0.884883269667, + 0.370000018849)); +#13937 = CARTESIAN_POINT('',(-0.162197392936,-0.880991052157, + 0.370000018849)); +#13938 = CARTESIAN_POINT('',(-0.155735302271,-0.877689360707, + 0.370000018849)); +#13939 = CARTESIAN_POINT('',(-0.148867708019,-0.874989525924, + 0.370000018849)); +#13940 = CARTESIAN_POINT('',(-0.141570753023,-0.872880361448, + 0.370000018849)); +#13941 = CARTESIAN_POINT('',(-0.133864360027,-0.871417025637, + 0.370000018849)); +#13942 = CARTESIAN_POINT('',(-0.125732324955,-0.870526120282, + 0.370000018849)); +#13943 = CARTESIAN_POINT('',(-0.120175085307,-0.870411779155, + 0.370000018849)); +#13944 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.370000018849)); +#13945 = ORIENTED_EDGE('',*,*,#13946,.T.); +#13946 = EDGE_CURVE('',#13923,#12328,#13947,.T.); +#13947 = LINE('',#13948,#13949); +#13948 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.370000018849)); +#13949 = VECTOR('',#13950,1.); +#13950 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#13951 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#13952,#13953) + ,(#13954,#13955) + ,(#13956,#13957) + ,(#13958,#13959) + ,(#13960,#13961) + ,(#13962,#13963) + ,(#13964,#13965) + ,(#13966,#13967) + ,(#13968,#13969) + ,(#13970,#13971) + ,(#13972,#13973) + ,(#13974,#13975) + ,(#13976,#13977) + ,(#13978,#13979) + ,(#13980,#13981) + ,(#13982,#13983) + ,(#13984,#13985) + ,(#13986,#13987) + ,(#13988,#13989 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,7.429704972735E-02,0.144380499559,0.210480382945, + 0.27322424923,0.333782884733,0.392326248648,0.449878804646, + 0.507606719485,0.565245786658,0.623182940078,0.681326130709, + 0.740937022969,0.801873743509,0.865253473691,0.93094792748,1.),(0., + 1.),.UNSPECIFIED.); +#13952 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.370000018849)); +#13953 = CARTESIAN_POINT('',(-0.195147348637,-0.946458365913, + 0.350000019118)); +#13954 = CARTESIAN_POINT('',(-0.195081940312,-0.943394143081, + 0.370000018849)); +#13955 = CARTESIAN_POINT('',(-0.195081940312,-0.943394143081, + 0.350000019118)); +#13956 = CARTESIAN_POINT('',(-0.194954833157,-0.937439478329, + 0.370000018849)); +#13957 = CARTESIAN_POINT('',(-0.194954833157,-0.937439478329, + 0.350000019118)); +#13958 = CARTESIAN_POINT('',(-0.19396156814,-0.928803904168, + 0.370000018849)); +#13959 = CARTESIAN_POINT('',(-0.19396156814,-0.928803904168, + 0.350000019118)); +#13960 = CARTESIAN_POINT('',(-0.192309872804,-0.920756192294, + 0.370000018849)); +#13961 = CARTESIAN_POINT('',(-0.192309872804,-0.920756192294, + 0.350000019118)); +#13962 = CARTESIAN_POINT('',(-0.189925549902,-0.913304035743, + 0.370000018849)); +#13963 = CARTESIAN_POINT('',(-0.189925549902,-0.913304035743, + 0.350000019118)); +#13964 = CARTESIAN_POINT('',(-0.186929155049,-0.906415245935, + 0.370000018849)); +#13965 = CARTESIAN_POINT('',(-0.186929155049,-0.906415245935, + 0.350000019118)); +#13966 = CARTESIAN_POINT('',(-0.183256726853,-0.900102398502, + 0.370000018849)); +#13967 = CARTESIAN_POINT('',(-0.183256726853,-0.900102398502, + 0.350000019118)); +#13968 = CARTESIAN_POINT('',(-0.17886908421,-0.894408982413, + 0.370000018849)); +#13969 = CARTESIAN_POINT('',(-0.17886908421,-0.894408982413, + 0.350000019118)); +#13970 = CARTESIAN_POINT('',(-0.173822057237,-0.889347269557, + 0.370000018849)); +#13971 = CARTESIAN_POINT('',(-0.173822057237,-0.889347269557, + 0.350000019118)); +#13972 = CARTESIAN_POINT('',(-0.168225057155,-0.884883269667, + 0.370000018849)); +#13973 = CARTESIAN_POINT('',(-0.168225057155,-0.884883269667, + 0.350000019118)); +#13974 = CARTESIAN_POINT('',(-0.162197392936,-0.880991052157, + 0.370000018849)); +#13975 = CARTESIAN_POINT('',(-0.162197392936,-0.880991052157, + 0.350000019118)); +#13976 = CARTESIAN_POINT('',(-0.155735302271,-0.877689360707, + 0.370000018849)); +#13977 = CARTESIAN_POINT('',(-0.155735302271,-0.877689360707, + 0.350000019118)); +#13978 = CARTESIAN_POINT('',(-0.148867708019,-0.874989525924, + 0.370000018849)); +#13979 = CARTESIAN_POINT('',(-0.148867708019,-0.874989525924, + 0.350000019118)); +#13980 = CARTESIAN_POINT('',(-0.141570753023,-0.872880361448, + 0.370000018849)); +#13981 = CARTESIAN_POINT('',(-0.141570753023,-0.872880361448, + 0.350000019118)); +#13982 = CARTESIAN_POINT('',(-0.133864360027,-0.871417025637, + 0.370000018849)); +#13983 = CARTESIAN_POINT('',(-0.133864360027,-0.871417025637, + 0.350000019118)); +#13984 = CARTESIAN_POINT('',(-0.125732324955,-0.870526120282, + 0.370000018849)); +#13985 = CARTESIAN_POINT('',(-0.125732324955,-0.870526120282, + 0.350000019118)); +#13986 = CARTESIAN_POINT('',(-0.120175085307,-0.870411779155, + 0.370000018849)); +#13987 = CARTESIAN_POINT('',(-0.120175085307,-0.870411779155, + 0.350000019118)); +#13988 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.370000018849)); +#13989 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.350000019118)); +#13990 = ADVANCED_FACE('',(#13991),#14002,.T.); +#13991 = FACE_BOUND('',#13992,.T.); +#13992 = EDGE_LOOP('',(#13993,#13994,#13995,#14001)); +#13993 = ORIENTED_EDGE('',*,*,#12327,.F.); +#13994 = ORIENTED_EDGE('',*,*,#13946,.F.); +#13995 = ORIENTED_EDGE('',*,*,#13996,.T.); +#13996 = EDGE_CURVE('',#13923,#13793,#13997,.T.); +#13997 = LINE('',#13998,#13999); +#13998 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.370000018849)); +#13999 = VECTOR('',#14000,1.); +#14000 = DIRECTION('',(1.,0.,0.)); +#14001 = ORIENTED_EDGE('',*,*,#13792,.T.); +#14002 = PLANE('',#14003); +#14003 = AXIS2_PLACEMENT_3D('',#14004,#14005,#14006); +#14004 = CARTESIAN_POINT('',(-0.117327227736,-0.870353184013, + 0.370000018849)); +#14005 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#14006 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#14007 = ADVANCED_FACE('',(#14008,#14082),#14089,.T.); +#14008 = FACE_BOUND('',#14009,.T.); +#14009 = EDGE_LOOP('',(#14010,#14020,#14044,#14068,#14076)); +#14010 = ORIENTED_EDGE('',*,*,#14011,.F.); +#14011 = EDGE_CURVE('',#14012,#14014,#14016,.T.); +#14012 = VERTEX_POINT('',#14013); +#14013 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.370000018849)); +#14014 = VERTEX_POINT('',#14015); +#14015 = CARTESIAN_POINT('',(-6.100100898401E-02,-1.048401962098, + 0.370000018849)); +#14016 = LINE('',#14017,#14018); +#14017 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.370000018849)); +#14018 = VECTOR('',#14019,1.); +#14019 = DIRECTION('',(1.,0.,0.)); +#14020 = ORIENTED_EDGE('',*,*,#14021,.F.); +#14021 = EDGE_CURVE('',#14022,#14012,#14024,.T.); +#14022 = VERTEX_POINT('',#14023); +#14023 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.370000018849)); +#14024 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#14025,#14026,#14027,#14028, + #14029,#14030,#14031,#14032,#14033,#14034,#14035,#14036,#14037, + #14038,#14039,#14040,#14041,#14042,#14043),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.807022544603E-02, + 0.133430431124,0.196150441495,0.257127947319,0.316867312535, + 0.3761731907,0.435947660585,0.496523923289,0.557455399094, + 0.617678272287,0.67793640363,0.738799415387,0.800944863813, + 0.864811629662,0.931023231107,1.),.UNSPECIFIED.); +#14025 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.370000018849)); +#14026 = CARTESIAN_POINT('',(-0.221896249786,-0.94966438462, + 0.370000018849)); +#14027 = CARTESIAN_POINT('',(-0.221738715794,-0.957069317859, + 0.370000018849)); +#14028 = CARTESIAN_POINT('',(-0.220285840944,-0.967873672613, + 0.370000018849)); +#14029 = CARTESIAN_POINT('',(-0.217995320564,-0.978124542709, + 0.370000018849)); +#14030 = CARTESIAN_POINT('',(-0.214678880912,-0.987762972456, + 0.370000018849)); +#14031 = CARTESIAN_POINT('',(-0.210551030694,-0.996879003628, + 0.370000018849)); +#14032 = CARTESIAN_POINT('',(-0.205329655378,-1.005339997417, + 0.370000018849)); +#14033 = CARTESIAN_POINT('',(-0.199262611649,-1.013267509595, + 0.370000018849)); +#14034 = CARTESIAN_POINT('',(-0.192280821313,-1.02053521949, + 0.370000018849)); +#14035 = CARTESIAN_POINT('',(-0.184561363839,-1.027040494625, + 0.370000018849)); +#14036 = CARTESIAN_POINT('',(-0.176306297751,-1.032825813891, + 0.370000018849)); +#14037 = CARTESIAN_POINT('',(-0.167445288892,-1.037632690492, + 0.370000018849)); +#14038 = CARTESIAN_POINT('',(-0.158053860133,-1.041560124828, + 0.370000018849)); +#14039 = CARTESIAN_POINT('',(-0.148148479936,-1.044678276263, + 0.370000018849)); +#14040 = CARTESIAN_POINT('',(-0.137686207977,-1.046801271684, + 0.370000018849)); +#14041 = CARTESIAN_POINT('',(-0.126714596172,-1.048196955454, + 0.370000018849)); +#14042 = CARTESIAN_POINT('',(-0.119211773556,-1.048332701029, + 0.370000018849)); +#14043 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.370000018849)); +#14044 = ORIENTED_EDGE('',*,*,#14045,.F.); +#14045 = EDGE_CURVE('',#14046,#14022,#14048,.T.); +#14046 = VERTEX_POINT('',#14047); +#14047 = CARTESIAN_POINT('',(-0.117441557003,-0.848401964797, + 0.370000018849)); +#14048 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#14049,#14050,#14051,#14052, + #14053,#14054,#14055,#14056,#14057,#14058,#14059,#14060,#14061, + #14062,#14063,#14064,#14065,#14066,#14067),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.862671829589E-02, + 0.134557720485,0.198315264547,0.26077281776,0.32197822457, + 0.382585954504,0.443397729587,0.504989681879,0.566066157504, + 0.625954254942,0.685393604693,0.744932810825,0.805428487954, + 0.867644868743,0.932312181659,1.),.UNSPECIFIED.); +#14049 = CARTESIAN_POINT('',(-0.117441557003,-0.848401964797, + 0.370000018849)); +#14050 = CARTESIAN_POINT('',(-0.121115918889,-0.848483883729, + 0.370000018849)); +#14051 = CARTESIAN_POINT('',(-0.128320310588,-0.848644503747, + 0.370000018849)); +#14052 = CARTESIAN_POINT('',(-0.138885292747,-0.849864004962, + 0.370000018849)); +#14053 = CARTESIAN_POINT('',(-0.14896390513,-0.851981789055, + 0.370000018849)); +#14054 = CARTESIAN_POINT('',(-0.158587140232,-0.854865693216, + 0.370000018849)); +#14055 = CARTESIAN_POINT('',(-0.167748745051,-0.858566270171, + 0.370000018849)); +#14056 = CARTESIAN_POINT('',(-0.176412025151,-0.863133092328, + 0.370000018849)); +#14057 = CARTESIAN_POINT('',(-0.184602333536,-0.868537012218, + 0.370000018849)); +#14058 = CARTESIAN_POINT('',(-0.192262177345,-0.87470947198, + 0.370000018849)); +#14059 = CARTESIAN_POINT('',(-0.199240553053,-0.881578844081, + 0.370000018849)); +#14060 = CARTESIAN_POINT('',(-0.205334568096,-0.889095189193, + 0.370000018849)); +#14061 = CARTESIAN_POINT('',(-0.210535169929,-0.897164169351, + 0.370000018849)); +#14062 = CARTESIAN_POINT('',(-0.214670807422,-0.905858953121, + 0.370000018849)); +#14063 = CARTESIAN_POINT('',(-0.217996201353,-0.915051512294, + 0.370000018849)); +#14064 = CARTESIAN_POINT('',(-0.220282597762,-0.924836322927, + 0.370000018849)); +#14065 = CARTESIAN_POINT('',(-0.221741827814,-0.935171890029, + 0.370000018849)); +#14066 = CARTESIAN_POINT('',(-0.221897171936,-0.942261180976, + 0.370000018849)); +#14067 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.370000018849)); +#14068 = ORIENTED_EDGE('',*,*,#14069,.F.); +#14069 = EDGE_CURVE('',#14070,#14046,#14072,.T.); +#14070 = VERTEX_POINT('',#14071); +#14071 = CARTESIAN_POINT('',(-6.100100898401E-02,-0.848401964797, + 0.370000018849)); +#14072 = LINE('',#14073,#14074); +#14073 = CARTESIAN_POINT('',(-6.100100898401E-02,-0.848401964797, + 0.370000018849)); +#14074 = VECTOR('',#14075,1.); +#14075 = DIRECTION('',(-1.,0.,0.)); +#14076 = ORIENTED_EDGE('',*,*,#14077,.F.); +#14077 = EDGE_CURVE('',#14014,#14070,#14078,.T.); +#14078 = LINE('',#14079,#14080); +#14079 = CARTESIAN_POINT('',(-6.100100898401E-02,-1.048401962098, + 0.370000018849)); +#14080 = VECTOR('',#14081,1.); +#14081 = DIRECTION('',(0.,1.,-1.084202172486E-14)); +#14082 = FACE_BOUND('',#14083,.T.); +#14083 = EDGE_LOOP('',(#14084,#14085,#14086,#14087,#14088)); +#14084 = ORIENTED_EDGE('',*,*,#13922,.F.); +#14085 = ORIENTED_EDGE('',*,*,#13848,.F.); +#14086 = ORIENTED_EDGE('',*,*,#13824,.F.); +#14087 = ORIENTED_EDGE('',*,*,#13800,.F.); +#14088 = ORIENTED_EDGE('',*,*,#13996,.F.); +#14089 = PLANE('',#14090); +#14090 = AXIS2_PLACEMENT_3D('',#14091,#14092,#14093); +#14091 = CARTESIAN_POINT('',(-0.191574200129,-0.874319019934, + 0.370000018849)); +#14092 = DIRECTION('',(-9.826439270114E-15,4.407515234395E-13,-1.)); +#14093 = DIRECTION('',(-1.,0.,9.826439270114E-15)); +#14094 = ADVANCED_FACE('',(#14095),#14136,.T.); +#14095 = FACE_BOUND('',#14096,.T.); +#14096 = EDGE_LOOP('',(#14097,#14123,#14129,#14130)); +#14097 = ORIENTED_EDGE('',*,*,#14098,.F.); +#14098 = EDGE_CURVE('',#14099,#14101,#14103,.T.); +#14099 = VERTEX_POINT('',#14100); +#14100 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.350000019118)); +#14101 = VERTEX_POINT('',#14102); +#14102 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.350000019118)); +#14103 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#14104,#14105,#14106,#14107, + #14108,#14109,#14110,#14111,#14112,#14113,#14114,#14115,#14116, + #14117,#14118,#14119,#14120,#14121,#14122),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.807022544603E-02, + 0.133430431124,0.196150441495,0.257127947319,0.316867312535, + 0.3761731907,0.435947660585,0.496523923289,0.557455399094, + 0.617678272287,0.67793640363,0.738799415387,0.800944863813, + 0.864811629662,0.931023231107,1.),.UNSPECIFIED.); +#14104 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.350000019118)); +#14105 = CARTESIAN_POINT('',(-0.221896249786,-0.94966438462, + 0.350000019118)); +#14106 = CARTESIAN_POINT('',(-0.221738715794,-0.957069317859, + 0.350000019118)); +#14107 = CARTESIAN_POINT('',(-0.220285840944,-0.967873672613, + 0.350000019118)); +#14108 = CARTESIAN_POINT('',(-0.217995320564,-0.978124542709, + 0.350000019118)); +#14109 = CARTESIAN_POINT('',(-0.214678880912,-0.987762972456, + 0.350000019118)); +#14110 = CARTESIAN_POINT('',(-0.210551030694,-0.996879003628, + 0.350000019118)); +#14111 = CARTESIAN_POINT('',(-0.205329655378,-1.005339997417, + 0.350000019118)); +#14112 = CARTESIAN_POINT('',(-0.199262611649,-1.013267509595, + 0.350000019118)); +#14113 = CARTESIAN_POINT('',(-0.192280821313,-1.02053521949, + 0.350000019118)); +#14114 = CARTESIAN_POINT('',(-0.184561363839,-1.027040494625, + 0.350000019118)); +#14115 = CARTESIAN_POINT('',(-0.176306297751,-1.032825813891, + 0.350000019118)); +#14116 = CARTESIAN_POINT('',(-0.167445288892,-1.037632690492, + 0.350000019118)); +#14117 = CARTESIAN_POINT('',(-0.158053860133,-1.041560124828, + 0.350000019118)); +#14118 = CARTESIAN_POINT('',(-0.148148479936,-1.044678276263, + 0.350000019118)); +#14119 = CARTESIAN_POINT('',(-0.137686207977,-1.046801271684, + 0.350000019118)); +#14120 = CARTESIAN_POINT('',(-0.126714596172,-1.048196955454, + 0.350000019118)); +#14121 = CARTESIAN_POINT('',(-0.119211773556,-1.048332701029, + 0.350000019118)); +#14122 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.350000019118)); +#14123 = ORIENTED_EDGE('',*,*,#14124,.F.); +#14124 = EDGE_CURVE('',#14022,#14099,#14125,.T.); +#14125 = LINE('',#14126,#14127); +#14126 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.370000018849)); +#14127 = VECTOR('',#14128,1.); +#14128 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14129 = ORIENTED_EDGE('',*,*,#14021,.T.); +#14130 = ORIENTED_EDGE('',*,*,#14131,.T.); +#14131 = EDGE_CURVE('',#14012,#14101,#14132,.T.); +#14132 = LINE('',#14133,#14134); +#14133 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.370000018849)); +#14134 = VECTOR('',#14135,1.); +#14135 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14136 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#14137,#14138) + ,(#14139,#14140) + ,(#14141,#14142) + ,(#14143,#14144) + ,(#14145,#14146) + ,(#14147,#14148) + ,(#14149,#14150) + ,(#14151,#14152) + ,(#14153,#14154) + ,(#14155,#14156) + ,(#14157,#14158) + ,(#14159,#14160) + ,(#14161,#14162) + ,(#14163,#14164) + ,(#14165,#14166) + ,(#14167,#14168) + ,(#14169,#14170) + ,(#14171,#14172) + ,(#14173,#14174 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.807022544603E-02,0.133430431124,0.196150441495, + 0.257127947319,0.316867312535,0.3761731907,0.435947660585, + 0.496523923289,0.557455399094,0.617678272287,0.67793640363, + 0.738799415387,0.800944863813,0.864811629662,0.931023231107,1.),(0., + 1.),.UNSPECIFIED.); +#14137 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.370000018849)); +#14138 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.350000019118)); +#14139 = CARTESIAN_POINT('',(-0.221896249786,-0.94966438462, + 0.370000018849)); +#14140 = CARTESIAN_POINT('',(-0.221896249786,-0.94966438462, + 0.350000019118)); +#14141 = CARTESIAN_POINT('',(-0.221738715794,-0.957069317859, + 0.370000018849)); +#14142 = CARTESIAN_POINT('',(-0.221738715794,-0.957069317859, + 0.350000019118)); +#14143 = CARTESIAN_POINT('',(-0.220285840944,-0.967873672613, + 0.370000018849)); +#14144 = CARTESIAN_POINT('',(-0.220285840944,-0.967873672613, + 0.350000019118)); +#14145 = CARTESIAN_POINT('',(-0.217995320564,-0.978124542709, + 0.370000018849)); +#14146 = CARTESIAN_POINT('',(-0.217995320564,-0.978124542709, + 0.350000019118)); +#14147 = CARTESIAN_POINT('',(-0.214678880912,-0.987762972456, + 0.370000018849)); +#14148 = CARTESIAN_POINT('',(-0.214678880912,-0.987762972456, + 0.350000019118)); +#14149 = CARTESIAN_POINT('',(-0.210551030694,-0.996879003628, + 0.370000018849)); +#14150 = CARTESIAN_POINT('',(-0.210551030694,-0.996879003628, + 0.350000019118)); +#14151 = CARTESIAN_POINT('',(-0.205329655378,-1.005339997417, + 0.370000018849)); +#14152 = CARTESIAN_POINT('',(-0.205329655378,-1.005339997417, + 0.350000019118)); +#14153 = CARTESIAN_POINT('',(-0.199262611649,-1.013267509595, + 0.370000018849)); +#14154 = CARTESIAN_POINT('',(-0.199262611649,-1.013267509595, + 0.350000019118)); +#14155 = CARTESIAN_POINT('',(-0.192280821313,-1.02053521949, + 0.370000018849)); +#14156 = CARTESIAN_POINT('',(-0.192280821313,-1.02053521949, + 0.350000019118)); +#14157 = CARTESIAN_POINT('',(-0.184561363839,-1.027040494625, + 0.370000018849)); +#14158 = CARTESIAN_POINT('',(-0.184561363839,-1.027040494625, + 0.350000019118)); +#14159 = CARTESIAN_POINT('',(-0.176306297751,-1.032825813891, + 0.370000018849)); +#14160 = CARTESIAN_POINT('',(-0.176306297751,-1.032825813891, + 0.350000019118)); +#14161 = CARTESIAN_POINT('',(-0.167445288892,-1.037632690492, + 0.370000018849)); +#14162 = CARTESIAN_POINT('',(-0.167445288892,-1.037632690492, + 0.350000019118)); +#14163 = CARTESIAN_POINT('',(-0.158053860133,-1.041560124828, + 0.370000018849)); +#14164 = CARTESIAN_POINT('',(-0.158053860133,-1.041560124828, + 0.350000019118)); +#14165 = CARTESIAN_POINT('',(-0.148148479936,-1.044678276263, + 0.370000018849)); +#14166 = CARTESIAN_POINT('',(-0.148148479936,-1.044678276263, + 0.350000019118)); +#14167 = CARTESIAN_POINT('',(-0.137686207977,-1.046801271684, + 0.370000018849)); +#14168 = CARTESIAN_POINT('',(-0.137686207977,-1.046801271684, + 0.350000019118)); +#14169 = CARTESIAN_POINT('',(-0.126714596172,-1.048196955454, + 0.370000018849)); +#14170 = CARTESIAN_POINT('',(-0.126714596172,-1.048196955454, + 0.350000019118)); +#14171 = CARTESIAN_POINT('',(-0.119211773556,-1.048332701029, + 0.370000018849)); +#14172 = CARTESIAN_POINT('',(-0.119211773556,-1.048332701029, + 0.350000019118)); +#14173 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.370000018849)); +#14174 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.350000019118)); +#14175 = ADVANCED_FACE('',(#14176),#14210,.T.); +#14176 = FACE_BOUND('',#14177,.T.); +#14177 = EDGE_LOOP('',(#14178,#14202,#14208,#14209)); +#14178 = ORIENTED_EDGE('',*,*,#14179,.F.); +#14179 = EDGE_CURVE('',#14180,#14099,#14182,.T.); +#14180 = VERTEX_POINT('',#14181); +#14181 = CARTESIAN_POINT('',(-0.117441557003,-0.848401964797, + 0.350000019118)); +#14182 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#14183,#14184,#14185,#14186, + #14187,#14188,#14189,#14190,#14191,#14192,#14193,#14194,#14195, + #14196,#14197,#14198,#14199,#14200,#14201),.UNSPECIFIED.,.F.,.F.,(4, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(0.,6.862671829589E-02, + 0.134557720485,0.198315264547,0.26077281776,0.32197822457, + 0.382585954504,0.443397729587,0.504989681879,0.566066157504, + 0.625954254942,0.685393604693,0.744932810825,0.805428487954, + 0.867644868743,0.932312181659,1.),.UNSPECIFIED.); +#14183 = CARTESIAN_POINT('',(-0.117441557003,-0.848401964797, + 0.350000019118)); +#14184 = CARTESIAN_POINT('',(-0.121115918889,-0.848483883729, + 0.350000019118)); +#14185 = CARTESIAN_POINT('',(-0.128320310588,-0.848644503747, + 0.350000019118)); +#14186 = CARTESIAN_POINT('',(-0.138885292747,-0.849864004962, + 0.350000019118)); +#14187 = CARTESIAN_POINT('',(-0.14896390513,-0.851981789055, + 0.350000019118)); +#14188 = CARTESIAN_POINT('',(-0.158587140232,-0.854865693216, + 0.350000019118)); +#14189 = CARTESIAN_POINT('',(-0.167748745051,-0.858566270171, + 0.350000019118)); +#14190 = CARTESIAN_POINT('',(-0.176412025151,-0.863133092328, + 0.350000019118)); +#14191 = CARTESIAN_POINT('',(-0.184602333536,-0.868537012218, + 0.350000019118)); +#14192 = CARTESIAN_POINT('',(-0.192262177345,-0.87470947198, + 0.350000019118)); +#14193 = CARTESIAN_POINT('',(-0.199240553053,-0.881578844081, + 0.350000019118)); +#14194 = CARTESIAN_POINT('',(-0.205334568096,-0.889095189193, + 0.350000019118)); +#14195 = CARTESIAN_POINT('',(-0.210535169929,-0.897164169351, + 0.350000019118)); +#14196 = CARTESIAN_POINT('',(-0.214670807422,-0.905858953121, + 0.350000019118)); +#14197 = CARTESIAN_POINT('',(-0.217996201353,-0.915051512294, + 0.350000019118)); +#14198 = CARTESIAN_POINT('',(-0.220282597762,-0.924836322927, + 0.350000019118)); +#14199 = CARTESIAN_POINT('',(-0.221741827814,-0.935171890029, + 0.350000019118)); +#14200 = CARTESIAN_POINT('',(-0.221897171936,-0.942261180976, + 0.350000019118)); +#14201 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.350000019118)); +#14202 = ORIENTED_EDGE('',*,*,#14203,.F.); +#14203 = EDGE_CURVE('',#14046,#14180,#14204,.T.); +#14204 = LINE('',#14205,#14206); +#14205 = CARTESIAN_POINT('',(-0.117441557003,-0.848401964797, + 0.370000018849)); +#14206 = VECTOR('',#14207,1.); +#14207 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14208 = ORIENTED_EDGE('',*,*,#14045,.T.); +#14209 = ORIENTED_EDGE('',*,*,#14124,.T.); +#14210 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#14211,#14212) + ,(#14213,#14214) + ,(#14215,#14216) + ,(#14217,#14218) + ,(#14219,#14220) + ,(#14221,#14222) + ,(#14223,#14224) + ,(#14225,#14226) + ,(#14227,#14228) + ,(#14229,#14230) + ,(#14231,#14232) + ,(#14233,#14234) + ,(#14235,#14236) + ,(#14237,#14238) + ,(#14239,#14240) + ,(#14241,#14242) + ,(#14243,#14244) + ,(#14245,#14246) + ,(#14247,#14248 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4),(2, + 2),(0.,6.862671829589E-02,0.134557720485,0.198315264547, + 0.26077281776,0.32197822457,0.382585954504,0.443397729587, + 0.504989681879,0.566066157504,0.625954254942,0.685393604693, + 0.744932810825,0.805428487954,0.867644868743,0.932312181659,1.),(0., + 1.),.UNSPECIFIED.); +#14211 = CARTESIAN_POINT('',(-0.117441557003,-0.848401964797, + 0.370000018849)); +#14212 = CARTESIAN_POINT('',(-0.117441557003,-0.848401964797, + 0.350000019118)); +#14213 = CARTESIAN_POINT('',(-0.121115918889,-0.848483883729, + 0.370000018849)); +#14214 = CARTESIAN_POINT('',(-0.121115918889,-0.848483883729, + 0.350000019118)); +#14215 = CARTESIAN_POINT('',(-0.128320310588,-0.848644503747, + 0.370000018849)); +#14216 = CARTESIAN_POINT('',(-0.128320310588,-0.848644503747, + 0.350000019118)); +#14217 = CARTESIAN_POINT('',(-0.138885292747,-0.849864004962, + 0.370000018849)); +#14218 = CARTESIAN_POINT('',(-0.138885292747,-0.849864004962, + 0.350000019118)); +#14219 = CARTESIAN_POINT('',(-0.14896390513,-0.851981789055, + 0.370000018849)); +#14220 = CARTESIAN_POINT('',(-0.14896390513,-0.851981789055, + 0.350000019118)); +#14221 = CARTESIAN_POINT('',(-0.158587140232,-0.854865693216, + 0.370000018849)); +#14222 = CARTESIAN_POINT('',(-0.158587140232,-0.854865693216, + 0.350000019118)); +#14223 = CARTESIAN_POINT('',(-0.167748745051,-0.858566270171, + 0.370000018849)); +#14224 = CARTESIAN_POINT('',(-0.167748745051,-0.858566270171, + 0.350000019118)); +#14225 = CARTESIAN_POINT('',(-0.176412025151,-0.863133092328, + 0.370000018849)); +#14226 = CARTESIAN_POINT('',(-0.176412025151,-0.863133092328, + 0.350000019118)); +#14227 = CARTESIAN_POINT('',(-0.184602333536,-0.868537012218, + 0.370000018849)); +#14228 = CARTESIAN_POINT('',(-0.184602333536,-0.868537012218, + 0.350000019118)); +#14229 = CARTESIAN_POINT('',(-0.192262177345,-0.87470947198, + 0.370000018849)); +#14230 = CARTESIAN_POINT('',(-0.192262177345,-0.87470947198, + 0.350000019118)); +#14231 = CARTESIAN_POINT('',(-0.199240553053,-0.881578844081, + 0.370000018849)); +#14232 = CARTESIAN_POINT('',(-0.199240553053,-0.881578844081, + 0.350000019118)); +#14233 = CARTESIAN_POINT('',(-0.205334568096,-0.889095189193, + 0.370000018849)); +#14234 = CARTESIAN_POINT('',(-0.205334568096,-0.889095189193, + 0.350000019118)); +#14235 = CARTESIAN_POINT('',(-0.210535169929,-0.897164169351, + 0.370000018849)); +#14236 = CARTESIAN_POINT('',(-0.210535169929,-0.897164169351, + 0.350000019118)); +#14237 = CARTESIAN_POINT('',(-0.214670807422,-0.905858953121, + 0.370000018849)); +#14238 = CARTESIAN_POINT('',(-0.214670807422,-0.905858953121, + 0.350000019118)); +#14239 = CARTESIAN_POINT('',(-0.217996201353,-0.915051512294, + 0.370000018849)); +#14240 = CARTESIAN_POINT('',(-0.217996201353,-0.915051512294, + 0.350000019118)); +#14241 = CARTESIAN_POINT('',(-0.220282597762,-0.924836322927, + 0.370000018849)); +#14242 = CARTESIAN_POINT('',(-0.220282597762,-0.924836322927, + 0.350000019118)); +#14243 = CARTESIAN_POINT('',(-0.221741827814,-0.935171890029, + 0.370000018849)); +#14244 = CARTESIAN_POINT('',(-0.221741827814,-0.935171890029, + 0.350000019118)); +#14245 = CARTESIAN_POINT('',(-0.221897171936,-0.942261180976, + 0.370000018849)); +#14246 = CARTESIAN_POINT('',(-0.221897171936,-0.942261180976, + 0.350000019118)); +#14247 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.370000018849)); +#14248 = CARTESIAN_POINT('',(-0.221976616568,-0.945886719579, + 0.350000019118)); +#14249 = ADVANCED_FACE('',(#14250),#14268,.T.); +#14250 = FACE_BOUND('',#14251,.T.); +#14251 = EDGE_LOOP('',(#14252,#14260,#14266,#14267)); +#14252 = ORIENTED_EDGE('',*,*,#14253,.F.); +#14253 = EDGE_CURVE('',#14254,#14180,#14256,.T.); +#14254 = VERTEX_POINT('',#14255); +#14255 = CARTESIAN_POINT('',(-6.100100898401E-02,-0.848401964797, + 0.350000019118)); +#14256 = LINE('',#14257,#14258); +#14257 = CARTESIAN_POINT('',(-6.100100898401E-02,-0.848401964797, + 0.350000019118)); +#14258 = VECTOR('',#14259,1.); +#14259 = DIRECTION('',(-1.,0.,0.)); +#14260 = ORIENTED_EDGE('',*,*,#14261,.F.); +#14261 = EDGE_CURVE('',#14070,#14254,#14262,.T.); +#14262 = LINE('',#14263,#14264); +#14263 = CARTESIAN_POINT('',(-6.100100898401E-02,-0.848401964797, + 0.370000018849)); +#14264 = VECTOR('',#14265,1.); +#14265 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14266 = ORIENTED_EDGE('',*,*,#14069,.T.); +#14267 = ORIENTED_EDGE('',*,*,#14203,.T.); +#14268 = PLANE('',#14269); +#14269 = AXIS2_PLACEMENT_3D('',#14270,#14271,#14272); +#14270 = CARTESIAN_POINT('',(-6.100100898401E-02,-0.848401964797, + 0.370000018849)); +#14271 = DIRECTION('',(0.,-1.,1.047444401653E-14)); +#14272 = DIRECTION('',(-1.,0.,0.)); +#14273 = ADVANCED_FACE('',(#14274),#14292,.T.); +#14274 = FACE_BOUND('',#14275,.T.); +#14275 = EDGE_LOOP('',(#14276,#14284,#14290,#14291)); +#14276 = ORIENTED_EDGE('',*,*,#14277,.F.); +#14277 = EDGE_CURVE('',#14278,#14254,#14280,.T.); +#14278 = VERTEX_POINT('',#14279); +#14279 = CARTESIAN_POINT('',(-6.100100898401E-02,-1.048401962098, + 0.350000019118)); +#14280 = LINE('',#14281,#14282); +#14281 = CARTESIAN_POINT('',(-6.100100898401E-02,-1.048401962098, + 0.350000019118)); +#14282 = VECTOR('',#14283,1.); +#14283 = DIRECTION('',(0.,1.,-1.084202172486E-14)); +#14284 = ORIENTED_EDGE('',*,*,#14285,.F.); +#14285 = EDGE_CURVE('',#14014,#14278,#14286,.T.); +#14286 = LINE('',#14287,#14288); +#14287 = CARTESIAN_POINT('',(-6.100100898401E-02,-1.048401962098, + 0.370000018849)); +#14288 = VECTOR('',#14289,1.); +#14289 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14290 = ORIENTED_EDGE('',*,*,#14077,.T.); +#14291 = ORIENTED_EDGE('',*,*,#14261,.T.); +#14292 = PLANE('',#14293); +#14293 = AXIS2_PLACEMENT_3D('',#14294,#14295,#14296); +#14294 = CARTESIAN_POINT('',(-6.100100898401E-02,-1.048401962098, + 0.370000018849)); +#14295 = DIRECTION('',(-1.,2.643380726871E-43,2.438088387898E-29)); +#14296 = DIRECTION('',(2.643380726871E-43,1.,0.)); +#14297 = ADVANCED_FACE('',(#14298),#14309,.T.); +#14298 = FACE_BOUND('',#14299,.T.); +#14299 = EDGE_LOOP('',(#14300,#14306,#14307,#14308)); +#14300 = ORIENTED_EDGE('',*,*,#14301,.F.); +#14301 = EDGE_CURVE('',#14101,#14278,#14302,.T.); +#14302 = LINE('',#14303,#14304); +#14303 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.350000019118)); +#14304 = VECTOR('',#14305,1.); +#14305 = DIRECTION('',(1.,0.,0.)); +#14306 = ORIENTED_EDGE('',*,*,#14131,.F.); +#14307 = ORIENTED_EDGE('',*,*,#14011,.T.); +#14308 = ORIENTED_EDGE('',*,*,#14285,.T.); +#14309 = PLANE('',#14310); +#14310 = AXIS2_PLACEMENT_3D('',#14311,#14312,#14313); +#14311 = CARTESIAN_POINT('',(-0.115383630201,-1.048401962098, + 0.370000018849)); +#14312 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#14313 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#14314 = ADVANCED_FACE('',(#14315),#14340,.T.); +#14315 = FACE_BOUND('',#14316,.T.); +#14316 = EDGE_LOOP('',(#14317,#14318,#14326,#14334)); +#14317 = ORIENTED_EDGE('',*,*,#12417,.F.); +#14318 = ORIENTED_EDGE('',*,*,#14319,.F.); +#14319 = EDGE_CURVE('',#14320,#12410,#14322,.T.); +#14320 = VERTEX_POINT('',#14321); +#14321 = CARTESIAN_POINT('',(-0.358600090334,-0.970353182664, + 0.370000018849)); +#14322 = LINE('',#14323,#14324); +#14323 = CARTESIAN_POINT('',(-0.358600090334,-0.970353182664, + 0.370000018849)); +#14324 = VECTOR('',#14325,1.); +#14325 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14326 = ORIENTED_EDGE('',*,*,#14327,.T.); +#14327 = EDGE_CURVE('',#14320,#14328,#14330,.T.); +#14328 = VERTEX_POINT('',#14329); +#14329 = CARTESIAN_POINT('',(-0.328493383423,-0.886816598425, + 0.370000018849)); +#14330 = LINE('',#14331,#14332); +#14331 = CARTESIAN_POINT('',(-0.358600090334,-0.970353182664, + 0.370000018849)); +#14332 = VECTOR('',#14333,1.); +#14333 = DIRECTION('',(0.339053795485,0.940766986967,-9.767999078299E-15 + )); +#14334 = ORIENTED_EDGE('',*,*,#14335,.T.); +#14335 = EDGE_CURVE('',#14328,#12418,#14336,.T.); +#14336 = LINE('',#14337,#14338); +#14337 = CARTESIAN_POINT('',(-0.328493383423,-0.886816598425, + 0.370000018849)); +#14338 = VECTOR('',#14339,1.); +#14339 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14340 = PLANE('',#14341); +#14341 = AXIS2_PLACEMENT_3D('',#14342,#14343,#14344); +#14342 = CARTESIAN_POINT('',(-0.358600090334,-0.970353182664, + 0.370000018849)); +#14343 = DIRECTION('',(-0.940766986967,0.339053795485, + -3.551399999403E-15)); +#14344 = DIRECTION('',(-3.775004914716E-15,-3.944304526105E-31,1.)); +#14345 = ADVANCED_FACE('',(#14346),#14368,.T.); +#14346 = FACE_BOUND('',#14347,.T.); +#14347 = EDGE_LOOP('',(#14348,#14349,#14350,#14362)); +#14348 = ORIENTED_EDGE('',*,*,#12425,.F.); +#14349 = ORIENTED_EDGE('',*,*,#14335,.F.); +#14350 = ORIENTED_EDGE('',*,*,#14351,.T.); +#14351 = EDGE_CURVE('',#14328,#14352,#14354,.T.); +#14352 = VERTEX_POINT('',#14353); +#14353 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.370000018849)); +#14354 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#14355,#14356,#14357,#14358, + #14359,#14360,#14361),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0., + 0.174481715317,0.398285759128,0.673897847399,1.),.UNSPECIFIED.); +#14355 = CARTESIAN_POINT('',(-0.328493383423,-0.886816598425, + 0.370000018849)); +#14356 = CARTESIAN_POINT('',(-0.328243802402,-0.886018631545, + 0.370000018849)); +#14357 = CARTESIAN_POINT('',(-0.327674089029,-0.884197129252, + 0.370000018849)); +#14358 = CARTESIAN_POINT('',(-0.326927527445,-0.88105331738, + 0.370000018849)); +#14359 = CARTESIAN_POINT('',(-0.326195570665,-0.877166587037, + 0.370000018849)); +#14360 = CARTESIAN_POINT('',(-0.325683832417,-0.874329683144, + 0.370000018849)); +#14361 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.370000018849)); +#14362 = ORIENTED_EDGE('',*,*,#14363,.T.); +#14363 = EDGE_CURVE('',#14352,#12426,#14364,.T.); +#14364 = LINE('',#14365,#14366); +#14365 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.370000018849)); +#14366 = VECTOR('',#14367,1.); +#14367 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14368 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#14369,#14370) + ,(#14371,#14372) + ,(#14373,#14374) + ,(#14375,#14376) + ,(#14377,#14378) + ,(#14379,#14380) + ,(#14381,#14382 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,4),(2,2),(0.,0.174481715317, + 0.398285759128,0.673897847399,1.),(0.,1.),.UNSPECIFIED.); +#14369 = CARTESIAN_POINT('',(-0.328493383423,-0.886816598425, + 0.370000018849)); +#14370 = CARTESIAN_POINT('',(-0.328493383423,-0.886816598425, + 0.350000019118)); +#14371 = CARTESIAN_POINT('',(-0.328243802402,-0.886018631545, + 0.370000018849)); +#14372 = CARTESIAN_POINT('',(-0.328243802402,-0.886018631545, + 0.350000019118)); +#14373 = CARTESIAN_POINT('',(-0.327674089029,-0.884197129252, + 0.370000018849)); +#14374 = CARTESIAN_POINT('',(-0.327674089029,-0.884197129252, + 0.350000019118)); +#14375 = CARTESIAN_POINT('',(-0.326927527445,-0.88105331738, + 0.370000018849)); +#14376 = CARTESIAN_POINT('',(-0.326927527445,-0.88105331738, + 0.350000019118)); +#14377 = CARTESIAN_POINT('',(-0.326195570665,-0.877166587037, + 0.370000018849)); +#14378 = CARTESIAN_POINT('',(-0.326195570665,-0.877166587037, + 0.350000019118)); +#14379 = CARTESIAN_POINT('',(-0.325683832417,-0.874329683144, + 0.370000018849)); +#14380 = CARTESIAN_POINT('',(-0.325683832417,-0.874329683144, + 0.350000019118)); +#14381 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.370000018849)); +#14382 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.350000019118)); +#14383 = ADVANCED_FACE('',(#14384),#14402,.T.); +#14384 = FACE_BOUND('',#14385,.T.); +#14385 = EDGE_LOOP('',(#14386,#14387,#14388,#14396)); +#14386 = ORIENTED_EDGE('',*,*,#12437,.F.); +#14387 = ORIENTED_EDGE('',*,*,#14363,.F.); +#14388 = ORIENTED_EDGE('',*,*,#14389,.T.); +#14389 = EDGE_CURVE('',#14352,#14390,#14392,.T.); +#14390 = VERTEX_POINT('',#14391); +#14391 = CARTESIAN_POINT('',(-0.324758627376,-0.872792208371, + 0.370000018849)); +#14392 = LINE('',#14393,#14394); +#14393 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.370000018849)); +#14394 = VECTOR('',#14395,1.); +#14395 = DIRECTION('',(1.,0.,0.)); +#14396 = ORIENTED_EDGE('',*,*,#14397,.T.); +#14397 = EDGE_CURVE('',#14390,#12438,#14398,.T.); +#14398 = LINE('',#14399,#14400); +#14399 = CARTESIAN_POINT('',(-0.324758627376,-0.872792208371, + 0.370000018849)); +#14400 = VECTOR('',#14401,1.); +#14401 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14402 = PLANE('',#14403); +#14403 = AXIS2_PLACEMENT_3D('',#14404,#14405,#14406); +#14404 = CARTESIAN_POINT('',(-0.325406493221,-0.872792208371, + 0.370000018849)); +#14405 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#14406 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#14407 = ADVANCED_FACE('',(#14408),#14430,.T.); +#14408 = FACE_BOUND('',#14409,.T.); +#14409 = EDGE_LOOP('',(#14410,#14411,#14412,#14424)); +#14410 = ORIENTED_EDGE('',*,*,#12445,.F.); +#14411 = ORIENTED_EDGE('',*,*,#14397,.F.); +#14412 = ORIENTED_EDGE('',*,*,#14413,.T.); +#14413 = EDGE_CURVE('',#14390,#14414,#14416,.T.); +#14414 = VERTEX_POINT('',#14415); +#14415 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.370000018849)); +#14416 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#14417,#14418,#14419,#14420, + #14421,#14422,#14423),.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0., + 0.30057486777,0.568347412612,0.800011154954,1.),.UNSPECIFIED.); +#14417 = CARTESIAN_POINT('',(-0.324758627376,-0.872792208371, + 0.370000018849)); +#14418 = CARTESIAN_POINT('',(-0.324531974054,-0.874217818765, + 0.370000018849)); +#14419 = CARTESIAN_POINT('',(-0.32410340253,-0.876913459905, + 0.370000018849)); +#14420 = CARTESIAN_POINT('',(-0.323278069557,-0.880664897331, + 0.370000018849)); +#14421 = CARTESIAN_POINT('',(-0.322524446537,-0.883940507673, + 0.370000018849)); +#14422 = CARTESIAN_POINT('',(-0.321863589434,-0.885905977243, + 0.370000018849)); +#14423 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.370000018849)); +#14424 = ORIENTED_EDGE('',*,*,#14425,.T.); +#14425 = EDGE_CURVE('',#14414,#12446,#14426,.T.); +#14426 = LINE('',#14427,#14428); +#14427 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.370000018849)); +#14428 = VECTOR('',#14429,1.); +#14429 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14430 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#14431,#14432) + ,(#14433,#14434) + ,(#14435,#14436) + ,(#14437,#14438) + ,(#14439,#14440) + ,(#14441,#14442) + ,(#14443,#14444 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,1,1,1,4),(2,2),(0.,0.30057486777, + 0.568347412612,0.800011154954,1.),(0.,1.),.UNSPECIFIED.); +#14431 = CARTESIAN_POINT('',(-0.324758627376,-0.872792208371, + 0.370000018849)); +#14432 = CARTESIAN_POINT('',(-0.324758627376,-0.872792208371, + 0.350000019118)); +#14433 = CARTESIAN_POINT('',(-0.324531974054,-0.874217818765, + 0.370000018849)); +#14434 = CARTESIAN_POINT('',(-0.324531974054,-0.874217818765, + 0.350000019118)); +#14435 = CARTESIAN_POINT('',(-0.32410340253,-0.876913459905, + 0.370000018849)); +#14436 = CARTESIAN_POINT('',(-0.32410340253,-0.876913459905, + 0.350000019118)); +#14437 = CARTESIAN_POINT('',(-0.323278069557,-0.880664897331, + 0.370000018849)); +#14438 = CARTESIAN_POINT('',(-0.323278069557,-0.880664897331, + 0.350000019118)); +#14439 = CARTESIAN_POINT('',(-0.322524446537,-0.883940507673, + 0.370000018849)); +#14440 = CARTESIAN_POINT('',(-0.322524446537,-0.883940507673, + 0.350000019118)); +#14441 = CARTESIAN_POINT('',(-0.321863589434,-0.885905977243, + 0.370000018849)); +#14442 = CARTESIAN_POINT('',(-0.321863589434,-0.885905977243, + 0.350000019118)); +#14443 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.370000018849)); +#14444 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.350000019118)); +#14445 = ADVANCED_FACE('',(#14446),#14464,.T.); +#14446 = FACE_BOUND('',#14447,.T.); +#14447 = EDGE_LOOP('',(#14448,#14449,#14450,#14458)); +#14448 = ORIENTED_EDGE('',*,*,#12457,.F.); +#14449 = ORIENTED_EDGE('',*,*,#14425,.F.); +#14450 = ORIENTED_EDGE('',*,*,#14451,.T.); +#14451 = EDGE_CURVE('',#14414,#14452,#14454,.T.); +#14452 = VERTEX_POINT('',#14453); +#14453 = CARTESIAN_POINT('',(-0.291717469285,-0.970353182664, + 0.370000018849)); +#14454 = LINE('',#14455,#14456); +#14455 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.370000018849)); +#14456 = VECTOR('',#14457,1.); +#14457 = DIRECTION('',(0.336390827665,-0.941722470297,9.777919877412E-15 + )); +#14458 = ORIENTED_EDGE('',*,*,#14459,.T.); +#14459 = EDGE_CURVE('',#14452,#12408,#14460,.T.); +#14460 = LINE('',#14461,#14462); +#14461 = CARTESIAN_POINT('',(-0.291717469285,-0.970353182664, + 0.370000018849)); +#14462 = VECTOR('',#14463,1.); +#14463 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14464 = PLANE('',#14465); +#14465 = AXIS2_PLACEMENT_3D('',#14466,#14467,#14468); +#14466 = CARTESIAN_POINT('',(-0.321557407907,-0.886816598425, + 0.370000018849)); +#14467 = DIRECTION('',(0.941722470297,0.336390827665,-3.523506892057E-15 + )); +#14468 = DIRECTION('',(-3.944304526105E-31,-1.047444401654E-14,-1.)); +#14469 = ADVANCED_FACE('',(#14470),#14481,.T.); +#14470 = FACE_BOUND('',#14471,.T.); +#14471 = EDGE_LOOP('',(#14472,#14473,#14474,#14480)); +#14472 = ORIENTED_EDGE('',*,*,#12407,.F.); +#14473 = ORIENTED_EDGE('',*,*,#14459,.F.); +#14474 = ORIENTED_EDGE('',*,*,#14475,.T.); +#14475 = EDGE_CURVE('',#14452,#14320,#14476,.T.); +#14476 = LINE('',#14477,#14478); +#14477 = CARTESIAN_POINT('',(-0.291717469285,-0.970353182664, + 0.370000018849)); +#14478 = VECTOR('',#14479,1.); +#14479 = DIRECTION('',(-1.,0.,0.)); +#14480 = ORIENTED_EDGE('',*,*,#14319,.T.); +#14481 = PLANE('',#14482); +#14482 = AXIS2_PLACEMENT_3D('',#14483,#14484,#14485); +#14483 = CARTESIAN_POINT('',(-0.291717469285,-0.970353182664, + 0.370000018849)); +#14484 = DIRECTION('',(0.,-1.,1.047444401653E-14)); +#14485 = DIRECTION('',(-1.,0.,0.)); +#14486 = ADVANCED_FACE('',(#14487,#14553),#14561,.F.); +#14487 = FACE_BOUND('',#14488,.T.); +#14488 = EDGE_LOOP('',(#14489,#14499,#14507,#14515,#14523,#14531,#14539, + #14547)); +#14489 = ORIENTED_EDGE('',*,*,#14490,.F.); +#14490 = EDGE_CURVE('',#14491,#14493,#14495,.T.); +#14491 = VERTEX_POINT('',#14492); +#14492 = CARTESIAN_POINT('',(-0.339049785719,-0.848401964797, + 0.370000018849)); +#14493 = VERTEX_POINT('',#14494); +#14494 = CARTESIAN_POINT('',(-0.417098565154,-1.048401962098, + 0.370000018849)); +#14495 = LINE('',#14496,#14497); +#14496 = CARTESIAN_POINT('',(-0.339049785719,-0.848401964797, + 0.370000018849)); +#14497 = VECTOR('',#14498,1.); +#14498 = DIRECTION('',(-0.363542485653,-0.931577619485, + 1.010018478885E-14)); +#14499 = ORIENTED_EDGE('',*,*,#14500,.F.); +#14500 = EDGE_CURVE('',#14501,#14491,#14503,.T.); +#14501 = VERTEX_POINT('',#14502); +#14502 = CARTESIAN_POINT('',(-0.312220517789,-0.848401964797, + 0.370000018849)); +#14503 = LINE('',#14504,#14505); +#14504 = CARTESIAN_POINT('',(-0.312220517789,-0.848401964797, + 0.370000018849)); +#14505 = VECTOR('',#14506,1.); +#14506 = DIRECTION('',(-1.,0.,0.)); +#14507 = ORIENTED_EDGE('',*,*,#14508,.F.); +#14508 = EDGE_CURVE('',#14509,#14501,#14511,.T.); +#14509 = VERTEX_POINT('',#14510); +#14510 = CARTESIAN_POINT('',(-0.236610762712,-1.048401962098, + 0.370000018849)); +#14511 = LINE('',#14512,#14513); +#14512 = CARTESIAN_POINT('',(-0.236610762712,-1.048401962098, + 0.370000018849)); +#14513 = VECTOR('',#14514,1.); +#14514 = DIRECTION('',(-0.353622392329,0.93538826358,-1.014149987491E-14 + )); +#14515 = ORIENTED_EDGE('',*,*,#14516,.F.); +#14516 = EDGE_CURVE('',#14517,#14509,#14519,.T.); +#14517 = VERTEX_POINT('',#14518); +#14518 = CARTESIAN_POINT('',(-0.265879055,-1.048401962098,0.370000018849 + )); +#14519 = LINE('',#14520,#14521); +#14520 = CARTESIAN_POINT('',(-0.265879055,-1.048401962098,0.370000018849 + )); +#14521 = VECTOR('',#14522,1.); +#14522 = DIRECTION('',(1.,0.,0.)); +#14523 = ORIENTED_EDGE('',*,*,#14524,.F.); +#14524 = EDGE_CURVE('',#14525,#14517,#14527,.T.); +#14525 = VERTEX_POINT('',#14526); +#14526 = CARTESIAN_POINT('',(-0.284972042547,-0.99230440188, + 0.370000018849)); +#14527 = LINE('',#14528,#14529); +#14528 = CARTESIAN_POINT('',(-0.284972042547,-0.99230440188, + 0.370000018849)); +#14529 = VECTOR('',#14530,1.); +#14530 = DIRECTION('',(0.322202485606,-0.946670776072,1.097783034623E-14 + )); +#14531 = ORIENTED_EDGE('',*,*,#14532,.F.); +#14532 = EDGE_CURVE('',#14533,#14525,#14535,.T.); +#14533 = VERTEX_POINT('',#14534); +#14534 = CARTESIAN_POINT('',(-0.367593992651,-0.99230440188, + 0.370000018849)); +#14535 = LINE('',#14536,#14537); +#14536 = CARTESIAN_POINT('',(-0.367593992651,-0.99230440188, + 0.370000018849)); +#14537 = VECTOR('',#14538,1.); +#14538 = DIRECTION('',(1.,0.,0.)); +#14539 = ORIENTED_EDGE('',*,*,#14540,.F.); +#14540 = EDGE_CURVE('',#14541,#14533,#14543,.T.); +#14541 = VERTEX_POINT('',#14542); +#14542 = CARTESIAN_POINT('',(-0.387830272866,-1.048401962098, + 0.370000018849)); +#14543 = LINE('',#14544,#14545); +#14544 = CARTESIAN_POINT('',(-0.387830272866,-1.048401962098, + 0.370000018849)); +#14545 = VECTOR('',#14546,1.); +#14546 = DIRECTION('',(0.339330377275,0.940667260544,-1.090821208334E-14 + )); +#14547 = ORIENTED_EDGE('',*,*,#14548,.F.); +#14548 = EDGE_CURVE('',#14493,#14541,#14549,.T.); +#14549 = LINE('',#14550,#14551); +#14550 = CARTESIAN_POINT('',(-0.417098565154,-1.048401962098, + 0.370000018849)); +#14551 = VECTOR('',#14552,1.); +#14552 = DIRECTION('',(1.,0.,0.)); +#14553 = FACE_BOUND('',#14554,.T.); +#14554 = EDGE_LOOP('',(#14555,#14556,#14557,#14558,#14559,#14560)); +#14555 = ORIENTED_EDGE('',*,*,#14475,.F.); +#14556 = ORIENTED_EDGE('',*,*,#14451,.F.); +#14557 = ORIENTED_EDGE('',*,*,#14413,.F.); +#14558 = ORIENTED_EDGE('',*,*,#14389,.F.); +#14559 = ORIENTED_EDGE('',*,*,#14351,.F.); +#14560 = ORIENTED_EDGE('',*,*,#14327,.F.); +#14561 = PLANE('',#14562); +#14562 = AXIS2_PLACEMENT_3D('',#14563,#14564,#14565); +#14563 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 0.370000018849)); +#14564 = DIRECTION('',(0.,1.084202172486E-14,1.)); +#14565 = DIRECTION('',(0.,-1.,1.084202172486E-14)); +#14566 = ADVANCED_FACE('',(#14567),#14592,.T.); +#14567 = FACE_BOUND('',#14568,.T.); +#14568 = EDGE_LOOP('',(#14569,#14579,#14585,#14586)); +#14569 = ORIENTED_EDGE('',*,*,#14570,.F.); +#14570 = EDGE_CURVE('',#14571,#14573,#14575,.T.); +#14571 = VERTEX_POINT('',#14572); +#14572 = CARTESIAN_POINT('',(-0.312220517789,-0.848401964797, + 0.350000019118)); +#14573 = VERTEX_POINT('',#14574); +#14574 = CARTESIAN_POINT('',(-0.339049785719,-0.848401964797, + 0.350000019118)); +#14575 = LINE('',#14576,#14577); +#14576 = CARTESIAN_POINT('',(-0.312220517789,-0.848401964797, + 0.350000019118)); +#14577 = VECTOR('',#14578,1.); +#14578 = DIRECTION('',(-1.,0.,0.)); +#14579 = ORIENTED_EDGE('',*,*,#14580,.F.); +#14580 = EDGE_CURVE('',#14501,#14571,#14581,.T.); +#14581 = LINE('',#14582,#14583); +#14582 = CARTESIAN_POINT('',(-0.312220517789,-0.848401964797, + 0.370000018849)); +#14583 = VECTOR('',#14584,1.); +#14584 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14585 = ORIENTED_EDGE('',*,*,#14500,.T.); +#14586 = ORIENTED_EDGE('',*,*,#14587,.T.); +#14587 = EDGE_CURVE('',#14491,#14573,#14588,.T.); +#14588 = LINE('',#14589,#14590); +#14589 = CARTESIAN_POINT('',(-0.339049785719,-0.848401964797, + 0.370000018849)); +#14590 = VECTOR('',#14591,1.); +#14591 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14592 = PLANE('',#14593); +#14593 = AXIS2_PLACEMENT_3D('',#14594,#14595,#14596); +#14594 = CARTESIAN_POINT('',(-0.312220517789,-0.848401964797, + 0.370000018849)); +#14595 = DIRECTION('',(0.,-1.,1.047444401653E-14)); +#14596 = DIRECTION('',(-1.,0.,0.)); +#14597 = ADVANCED_FACE('',(#14598),#14616,.T.); +#14598 = FACE_BOUND('',#14599,.T.); +#14599 = EDGE_LOOP('',(#14600,#14608,#14614,#14615)); +#14600 = ORIENTED_EDGE('',*,*,#14601,.F.); +#14601 = EDGE_CURVE('',#14602,#14571,#14604,.T.); +#14602 = VERTEX_POINT('',#14603); +#14603 = CARTESIAN_POINT('',(-0.236610762712,-1.048401962098, + 0.350000019118)); +#14604 = LINE('',#14605,#14606); +#14605 = CARTESIAN_POINT('',(-0.236610762712,-1.048401962098, + 0.350000019118)); +#14606 = VECTOR('',#14607,1.); +#14607 = DIRECTION('',(-0.353622392329,0.93538826358,-1.014149987491E-14 + )); +#14608 = ORIENTED_EDGE('',*,*,#14609,.F.); +#14609 = EDGE_CURVE('',#14509,#14602,#14610,.T.); +#14610 = LINE('',#14611,#14612); +#14611 = CARTESIAN_POINT('',(-0.236610762712,-1.048401962098, + 0.370000018849)); +#14612 = VECTOR('',#14613,1.); +#14613 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14614 = ORIENTED_EDGE('',*,*,#14508,.T.); +#14615 = ORIENTED_EDGE('',*,*,#14580,.T.); +#14616 = PLANE('',#14617); +#14617 = AXIS2_PLACEMENT_3D('',#14618,#14619,#14620); +#14618 = CARTESIAN_POINT('',(-0.236610762712,-1.048401962098, + 0.370000018849)); +#14619 = DIRECTION('',(-0.93538826358,-0.353622392329,3.703997951443E-15 + )); +#14620 = DIRECTION('',(-0.353622392329,0.93538826358,0.)); +#14621 = ADVANCED_FACE('',(#14622),#14640,.T.); +#14622 = FACE_BOUND('',#14623,.T.); +#14623 = EDGE_LOOP('',(#14624,#14632,#14638,#14639)); +#14624 = ORIENTED_EDGE('',*,*,#14625,.F.); +#14625 = EDGE_CURVE('',#14626,#14602,#14628,.T.); +#14626 = VERTEX_POINT('',#14627); +#14627 = CARTESIAN_POINT('',(-0.265879055,-1.048401962098,0.350000019118 + )); +#14628 = LINE('',#14629,#14630); +#14629 = CARTESIAN_POINT('',(-0.265879055,-1.048401962098,0.350000019118 + )); +#14630 = VECTOR('',#14631,1.); +#14631 = DIRECTION('',(1.,0.,0.)); +#14632 = ORIENTED_EDGE('',*,*,#14633,.F.); +#14633 = EDGE_CURVE('',#14517,#14626,#14634,.T.); +#14634 = LINE('',#14635,#14636); +#14635 = CARTESIAN_POINT('',(-0.265879055,-1.048401962098,0.370000018849 + )); +#14636 = VECTOR('',#14637,1.); +#14637 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14638 = ORIENTED_EDGE('',*,*,#14516,.T.); +#14639 = ORIENTED_EDGE('',*,*,#14609,.T.); +#14640 = PLANE('',#14641); +#14641 = AXIS2_PLACEMENT_3D('',#14642,#14643,#14644); +#14642 = CARTESIAN_POINT('',(-0.265879055,-1.048401962098,0.370000018849 + )); +#14643 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#14644 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#14645 = ADVANCED_FACE('',(#14646),#14664,.T.); +#14646 = FACE_BOUND('',#14647,.T.); +#14647 = EDGE_LOOP('',(#14648,#14656,#14662,#14663)); +#14648 = ORIENTED_EDGE('',*,*,#14649,.F.); +#14649 = EDGE_CURVE('',#14650,#14626,#14652,.T.); +#14650 = VERTEX_POINT('',#14651); +#14651 = CARTESIAN_POINT('',(-0.284972042547,-0.99230440188, + 0.350000019118)); +#14652 = LINE('',#14653,#14654); +#14653 = CARTESIAN_POINT('',(-0.284972042547,-0.99230440188, + 0.350000019118)); +#14654 = VECTOR('',#14655,1.); +#14655 = DIRECTION('',(0.322202485606,-0.946670776072,1.097783034623E-14 + )); +#14656 = ORIENTED_EDGE('',*,*,#14657,.F.); +#14657 = EDGE_CURVE('',#14525,#14650,#14658,.T.); +#14658 = LINE('',#14659,#14660); +#14659 = CARTESIAN_POINT('',(-0.284972042547,-0.99230440188, + 0.370000018849)); +#14660 = VECTOR('',#14661,1.); +#14661 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14662 = ORIENTED_EDGE('',*,*,#14524,.T.); +#14663 = ORIENTED_EDGE('',*,*,#14633,.T.); +#14664 = PLANE('',#14665); +#14665 = AXIS2_PLACEMENT_3D('',#14666,#14667,#14668); +#14666 = CARTESIAN_POINT('',(-0.284972042547,-0.99230440188, + 0.370000018849)); +#14667 = DIRECTION('',(0.946670776072,0.322202485606,-3.374891897469E-15 + )); +#14668 = DIRECTION('',(-3.944304526105E-31,-1.047444401653E-14,-1.)); +#14669 = ADVANCED_FACE('',(#14670),#14688,.T.); +#14670 = FACE_BOUND('',#14671,.T.); +#14671 = EDGE_LOOP('',(#14672,#14680,#14686,#14687)); +#14672 = ORIENTED_EDGE('',*,*,#14673,.F.); +#14673 = EDGE_CURVE('',#14674,#14650,#14676,.T.); +#14674 = VERTEX_POINT('',#14675); +#14675 = CARTESIAN_POINT('',(-0.367593992651,-0.99230440188, + 0.350000019118)); +#14676 = LINE('',#14677,#14678); +#14677 = CARTESIAN_POINT('',(-0.367593992651,-0.99230440188, + 0.350000019118)); +#14678 = VECTOR('',#14679,1.); +#14679 = DIRECTION('',(1.,0.,0.)); +#14680 = ORIENTED_EDGE('',*,*,#14681,.F.); +#14681 = EDGE_CURVE('',#14533,#14674,#14682,.T.); +#14682 = LINE('',#14683,#14684); +#14683 = CARTESIAN_POINT('',(-0.367593992651,-0.99230440188, + 0.370000018849)); +#14684 = VECTOR('',#14685,1.); +#14685 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14686 = ORIENTED_EDGE('',*,*,#14532,.T.); +#14687 = ORIENTED_EDGE('',*,*,#14657,.T.); +#14688 = PLANE('',#14689); +#14689 = AXIS2_PLACEMENT_3D('',#14690,#14691,#14692); +#14690 = CARTESIAN_POINT('',(-0.367593992651,-0.99230440188, + 0.370000018849)); +#14691 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#14692 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#14693 = ADVANCED_FACE('',(#14694),#14712,.T.); +#14694 = FACE_BOUND('',#14695,.T.); +#14695 = EDGE_LOOP('',(#14696,#14704,#14710,#14711)); +#14696 = ORIENTED_EDGE('',*,*,#14697,.F.); +#14697 = EDGE_CURVE('',#14698,#14674,#14700,.T.); +#14698 = VERTEX_POINT('',#14699); +#14699 = CARTESIAN_POINT('',(-0.387830272866,-1.048401962098, + 0.350000019118)); +#14700 = LINE('',#14701,#14702); +#14701 = CARTESIAN_POINT('',(-0.387830272866,-1.048401962098, + 0.350000019118)); +#14702 = VECTOR('',#14703,1.); +#14703 = DIRECTION('',(0.339330377275,0.940667260544,-1.090821208334E-14 + )); +#14704 = ORIENTED_EDGE('',*,*,#14705,.F.); +#14705 = EDGE_CURVE('',#14541,#14698,#14706,.T.); +#14706 = LINE('',#14707,#14708); +#14707 = CARTESIAN_POINT('',(-0.387830272866,-1.048401962098, + 0.370000018849)); +#14708 = VECTOR('',#14709,1.); +#14709 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14710 = ORIENTED_EDGE('',*,*,#14540,.T.); +#14711 = ORIENTED_EDGE('',*,*,#14681,.T.); +#14712 = PLANE('',#14713); +#14713 = AXIS2_PLACEMENT_3D('',#14714,#14715,#14716); +#14714 = CARTESIAN_POINT('',(-0.387830272866,-1.048401962098, + 0.370000018849)); +#14715 = DIRECTION('',(-0.940667260544,0.339330377275, + -3.554297039871E-15)); +#14716 = DIRECTION('',(-3.778484899982E-15,0.,1.)); +#14717 = ADVANCED_FACE('',(#14718),#14736,.T.); +#14718 = FACE_BOUND('',#14719,.T.); +#14719 = EDGE_LOOP('',(#14720,#14728,#14734,#14735)); +#14720 = ORIENTED_EDGE('',*,*,#14721,.F.); +#14721 = EDGE_CURVE('',#14722,#14698,#14724,.T.); +#14722 = VERTEX_POINT('',#14723); +#14723 = CARTESIAN_POINT('',(-0.417098565154,-1.048401962098, + 0.350000019118)); +#14724 = LINE('',#14725,#14726); +#14725 = CARTESIAN_POINT('',(-0.417098565154,-1.048401962098, + 0.350000019118)); +#14726 = VECTOR('',#14727,1.); +#14727 = DIRECTION('',(1.,0.,0.)); +#14728 = ORIENTED_EDGE('',*,*,#14729,.F.); +#14729 = EDGE_CURVE('',#14493,#14722,#14730,.T.); +#14730 = LINE('',#14731,#14732); +#14731 = CARTESIAN_POINT('',(-0.417098565154,-1.048401962098, + 0.370000018849)); +#14732 = VECTOR('',#14733,1.); +#14733 = DIRECTION('',(-2.438088387898E-29,-1.047444401653E-14,-1.)); +#14734 = ORIENTED_EDGE('',*,*,#14548,.T.); +#14735 = ORIENTED_EDGE('',*,*,#14705,.T.); +#14736 = PLANE('',#14737); +#14737 = AXIS2_PLACEMENT_3D('',#14738,#14739,#14740); +#14738 = CARTESIAN_POINT('',(-0.417098565154,-1.048401962098, + 0.370000018849)); +#14739 = DIRECTION('',(0.,1.,-1.047444401653E-14)); +#14740 = DIRECTION('',(0.,-1.047444401653E-14,-1.)); +#14741 = ADVANCED_FACE('',(#14742),#14753,.T.); +#14742 = FACE_BOUND('',#14743,.T.); +#14743 = EDGE_LOOP('',(#14744,#14750,#14751,#14752)); +#14744 = ORIENTED_EDGE('',*,*,#14745,.F.); +#14745 = EDGE_CURVE('',#14573,#14722,#14746,.T.); +#14746 = LINE('',#14747,#14748); +#14747 = CARTESIAN_POINT('',(-0.339049785719,-0.848401964797, + 0.350000019118)); +#14748 = VECTOR('',#14749,1.); +#14749 = DIRECTION('',(-0.363542485653,-0.931577619485, + 1.010018478885E-14)); +#14750 = ORIENTED_EDGE('',*,*,#14587,.F.); +#14751 = ORIENTED_EDGE('',*,*,#14490,.T.); +#14752 = ORIENTED_EDGE('',*,*,#14729,.T.); +#14753 = PLANE('',#14754); +#14754 = AXIS2_PLACEMENT_3D('',#14755,#14756,#14757); +#14755 = CARTESIAN_POINT('',(-0.339049785719,-0.848401964797, + 0.370000018849)); +#14756 = DIRECTION('',(0.931577619485,-0.363542485653,3.807905413599E-15 + )); +#14757 = DIRECTION('',(-1.183291357832E-30,-1.047444401652E-14,-1.)); +#14758 = ADVANCED_FACE('',(#14759),#14793,.T.); +#14759 = FACE_BOUND('',#14760,.T.); +#14760 = EDGE_LOOP('',(#14761,#14771,#14779,#14787)); +#14761 = ORIENTED_EDGE('',*,*,#14762,.T.); +#14762 = EDGE_CURVE('',#14763,#14765,#14767,.T.); +#14763 = VERTEX_POINT('',#14764); +#14764 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 2.449999990778)); +#14765 = VERTEX_POINT('',#14766); +#14766 = CARTESIAN_POINT('',(7.099974504132,-2.265036750901, + 2.449999990778)); +#14767 = LINE('',#14768,#14769); +#14768 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 2.449999990778)); +#14769 = VECTOR('',#14770,1.); +#14770 = DIRECTION('',(1.,6.982962677686E-15,-3.097720492816E-16)); +#14771 = ORIENTED_EDGE('',*,*,#14772,.F.); +#14772 = EDGE_CURVE('',#14773,#14765,#14775,.T.); +#14773 = VERTEX_POINT('',#14774); +#14774 = CARTESIAN_POINT('',(7.099974504132,-0.365036776542, + 2.449999990778)); +#14775 = LINE('',#14776,#14777); +#14776 = CARTESIAN_POINT('',(7.099974504132,-0.365036776542, + 2.449999990778)); +#14777 = VECTOR('',#14778,1.); +#14778 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#14779 = ORIENTED_EDGE('',*,*,#14780,.F.); +#14780 = EDGE_CURVE('',#14781,#14773,#14783,.T.); +#14781 = VERTEX_POINT('',#14782); +#14782 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.449999990778)); +#14783 = LINE('',#14784,#14785); +#14784 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.449999990778)); +#14785 = VECTOR('',#14786,1.); +#14786 = DIRECTION('',(1.,6.982962677686E-15,-3.097720492816E-16)); +#14787 = ORIENTED_EDGE('',*,*,#14788,.T.); +#14788 = EDGE_CURVE('',#14781,#14763,#14789,.T.); +#14789 = LINE('',#14790,#14791); +#14790 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.449999990778)); +#14791 = VECTOR('',#14792,1.); +#14792 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#14793 = PLANE('',#14794); +#14794 = AXIS2_PLACEMENT_3D('',#14795,#14796,#14797); +#14795 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.449999990778)); +#14796 = DIRECTION('',(3.097720492816E-16,-3.491481338843E-15,1.)); +#14797 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#14798 = ADVANCED_FACE('',(#14799),#14824,.F.); +#14799 = FACE_BOUND('',#14800,.T.); +#14800 = EDGE_LOOP('',(#14801,#14809,#14817,#14823)); +#14801 = ORIENTED_EDGE('',*,*,#14802,.F.); +#14802 = EDGE_CURVE('',#14803,#14765,#14805,.T.); +#14803 = VERTEX_POINT('',#14804); +#14804 = CARTESIAN_POINT('',(7.099974504132,-2.265036750901, + 2.699999987404)); +#14805 = LINE('',#14806,#14807); +#14806 = CARTESIAN_POINT('',(7.099974504132,-2.265036750901, + 2.699999987404)); +#14807 = VECTOR('',#14808,1.); +#14808 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#14809 = ORIENTED_EDGE('',*,*,#14810,.F.); +#14810 = EDGE_CURVE('',#14811,#14803,#14813,.T.); +#14811 = VERTEX_POINT('',#14812); +#14812 = CARTESIAN_POINT('',(7.099974504132,-0.365036776542, + 2.699999987404)); +#14813 = LINE('',#14814,#14815); +#14814 = CARTESIAN_POINT('',(7.099974504132,-0.365036776542, + 2.699999987404)); +#14815 = VECTOR('',#14816,1.); +#14816 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#14817 = ORIENTED_EDGE('',*,*,#14818,.T.); +#14818 = EDGE_CURVE('',#14811,#14773,#14819,.T.); +#14819 = LINE('',#14820,#14821); +#14820 = CARTESIAN_POINT('',(7.099974504132,-0.365036776542, + 2.699999987404)); +#14821 = VECTOR('',#14822,1.); +#14822 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#14823 = ORIENTED_EDGE('',*,*,#14772,.T.); +#14824 = PLANE('',#14825); +#14825 = AXIS2_PLACEMENT_3D('',#14826,#14827,#14828); +#14826 = CARTESIAN_POINT('',(7.099974504132,-0.365036776542, + 2.699999987404)); +#14827 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#14828 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#14829 = ADVANCED_FACE('',(#14830),#14864,.F.); +#14830 = FACE_BOUND('',#14831,.T.); +#14831 = EDGE_LOOP('',(#14832,#14840,#14841,#14842,#14850,#14858)); +#14832 = ORIENTED_EDGE('',*,*,#14833,.T.); +#14833 = EDGE_CURVE('',#14834,#14781,#14836,.T.); +#14834 = VERTEX_POINT('',#14835); +#14835 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#14836 = LINE('',#14837,#14838); +#14837 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#14838 = VECTOR('',#14839,1.); +#14839 = DIRECTION('',(-7.080503983579E-16,-3.491481338843E-15,1.)); +#14840 = ORIENTED_EDGE('',*,*,#14780,.T.); +#14841 = ORIENTED_EDGE('',*,*,#14818,.F.); +#14842 = ORIENTED_EDGE('',*,*,#14843,.T.); +#14843 = EDGE_CURVE('',#14811,#14844,#14846,.T.); +#14844 = VERTEX_POINT('',#14845); +#14845 = CARTESIAN_POINT('',(6.499974512229,-0.365036776542, + 2.699999987404)); +#14846 = LINE('',#14847,#14848); +#14847 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.699999987404)); +#14848 = VECTOR('',#14849,1.); +#14849 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#14850 = ORIENTED_EDGE('',*,*,#14851,.F.); +#14851 = EDGE_CURVE('',#14852,#14844,#14854,.T.); +#14852 = VERTEX_POINT('',#14853); +#14853 = CARTESIAN_POINT('',(6.499974512229,-0.365036776542, + 0.250000020468)); +#14854 = LINE('',#14855,#14856); +#14855 = CARTESIAN_POINT('',(6.499974512229,-0.365036776542, + 0.250000020468)); +#14856 = VECTOR('',#14857,1.); +#14857 = DIRECTION('',(-3.540251991789E-16,-3.491481338843E-15,1.)); +#14858 = ORIENTED_EDGE('',*,*,#14859,.F.); +#14859 = EDGE_CURVE('',#14834,#14852,#14860,.T.); +#14860 = LINE('',#14861,#14862); +#14861 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#14862 = VECTOR('',#14863,1.); +#14863 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#14864 = PLANE('',#14865); +#14865 = AXIS2_PLACEMENT_3D('',#14866,#14867,#14868); +#14866 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 1.849999998875)); +#14867 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#14868 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#14869 = ADVANCED_FACE('',(#14870),#14888,.T.); +#14870 = FACE_BOUND('',#14871,.T.); +#14871 = EDGE_LOOP('',(#14872,#14873,#14874,#14882)); +#14872 = ORIENTED_EDGE('',*,*,#14788,.F.); +#14873 = ORIENTED_EDGE('',*,*,#14833,.F.); +#14874 = ORIENTED_EDGE('',*,*,#14875,.T.); +#14875 = EDGE_CURVE('',#14834,#14876,#14878,.T.); +#14876 = VERTEX_POINT('',#14877); +#14877 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 0.250000020468)); +#14878 = LINE('',#14879,#14880); +#14879 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#14880 = VECTOR('',#14881,1.); +#14881 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#14882 = ORIENTED_EDGE('',*,*,#14883,.T.); +#14883 = EDGE_CURVE('',#14876,#14763,#14884,.T.); +#14884 = LINE('',#14885,#14886); +#14885 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 0.250000020468)); +#14886 = VECTOR('',#14887,1.); +#14887 = DIRECTION('',(-7.080503983579E-16,-3.491481338843E-15,1.)); +#14888 = PLANE('',#14889); +#14889 = AXIS2_PLACEMENT_3D('',#14890,#14891,#14892); +#14890 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#14891 = DIRECTION('',(-1.,-6.982962677686E-15,-7.080503983579E-16)); +#14892 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#14893 = ADVANCED_FACE('',(#14894),#14928,.F.); +#14894 = FACE_BOUND('',#14895,.T.); +#14895 = EDGE_LOOP('',(#14896,#14906,#14914,#14922)); +#14896 = ORIENTED_EDGE('',*,*,#14897,.T.); +#14897 = EDGE_CURVE('',#14898,#14900,#14902,.T.); +#14898 = VERTEX_POINT('',#14899); +#14899 = CARTESIAN_POINT('',(0.474974593539,-2.465036748202, + 1.150000008322)); +#14900 = VERTEX_POINT('',#14901); +#14901 = CARTESIAN_POINT('',(0.563138082703,-2.965036741454, + 1.331985122999)); +#14902 = LINE('',#14903,#14904); +#14903 = CARTESIAN_POINT('',(0.568798487616,-2.997138492927, + 1.343669205003)); +#14904 = VECTOR('',#14905,1.); +#14905 = DIRECTION('',(0.163464460889,-0.927053025192,0.337419706757)); +#14906 = ORIENTED_EDGE('',*,*,#14907,.T.); +#14907 = EDGE_CURVE('',#14900,#14908,#14910,.T.); +#14908 = VERTEX_POINT('',#14909); +#14909 = CARTESIAN_POINT('',(0.563138082703,-2.965036741454, + 1.668014884198)); +#14910 = LINE('',#14911,#14912); +#14911 = CARTESIAN_POINT('',(0.563138082703,-2.965036741454, + 1.150000008322)); +#14912 = VECTOR('',#14913,1.); +#14913 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#14914 = ORIENTED_EDGE('',*,*,#14915,.T.); +#14915 = EDGE_CURVE('',#14908,#14916,#14918,.T.); +#14916 = VERTEX_POINT('',#14917); +#14917 = CARTESIAN_POINT('',(0.474974593539,-2.465036748202, + 1.849999998875)); +#14918 = LINE('',#14919,#14920); +#14919 = CARTESIAN_POINT('',(0.482990782423,-2.510498814482, + 1.833453159961)); +#14920 = VECTOR('',#14921,1.); +#14921 = DIRECTION('',(-0.163464460889,0.927053025192,0.337419706757)); +#14922 = ORIENTED_EDGE('',*,*,#14923,.T.); +#14923 = EDGE_CURVE('',#14916,#14898,#14924,.T.); +#14924 = LINE('',#14925,#14926); +#14925 = CARTESIAN_POINT('',(0.474974593539,-2.465036748202, + 1.849999998875)); +#14926 = VECTOR('',#14927,1.); +#14927 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#14928 = PLANE('',#14929); +#14929 = AXIS2_PLACEMENT_3D('',#14930,#14931,#14932); +#14930 = CARTESIAN_POINT('',(0.563138082703,-2.965036741454, + 1.150000008322)); +#14931 = DIRECTION('',(0.984807753012,0.173648177667,7.138720755481E-16) + ); +#14932 = DIRECTION('',(-9.860761315263E-32,4.111025437405E-15,-1.)); +#14933 = ADVANCED_FACE('',(#14934),#14968,.T.); +#14934 = FACE_BOUND('',#14935,.T.); +#14935 = EDGE_LOOP('',(#14936,#14946,#14954,#14962)); +#14936 = ORIENTED_EDGE('',*,*,#14937,.T.); +#14937 = EDGE_CURVE('',#14938,#14940,#14942,.T.); +#14938 = VERTEX_POINT('',#14939); +#14939 = CARTESIAN_POINT('',(0.686811100326,-2.965036741454, + 1.331985122999)); +#14940 = VERTEX_POINT('',#14941); +#14941 = CARTESIAN_POINT('',(0.77497458949,-2.465036748202, + 1.150000008322)); +#14942 = LINE('',#14943,#14944); +#14943 = CARTESIAN_POINT('',(0.689166884297,-2.951676426647, + 1.327122366089)); +#14944 = VECTOR('',#14945,1.); +#14945 = DIRECTION('',(0.163464460889,0.927053025192,-0.337419706757)); +#14946 = ORIENTED_EDGE('',*,*,#14947,.T.); +#14947 = EDGE_CURVE('',#14940,#14948,#14950,.T.); +#14948 = VERTEX_POINT('',#14949); +#14949 = CARTESIAN_POINT('',(0.77497458949,-2.465036748202, + 1.849999998875)); +#14950 = LINE('',#14951,#14952); +#14951 = CARTESIAN_POINT('',(0.77497458949,-2.465036748202, + 1.668014884198)); +#14952 = VECTOR('',#14953,1.); +#14953 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#14954 = ORIENTED_EDGE('',*,*,#14955,.T.); +#14955 = EDGE_CURVE('',#14948,#14956,#14958,.T.); +#14956 = VERTEX_POINT('',#14957); +#14957 = CARTESIAN_POINT('',(0.686811100326,-2.965036741454, + 1.668014884198)); +#14958 = LINE('',#14959,#14960); +#14959 = CARTESIAN_POINT('',(0.77497458949,-2.465036748202, + 1.849999998875)); +#14960 = VECTOR('',#14961,1.); +#14961 = DIRECTION('',(-0.163464460889,-0.927053025192,-0.337419706757) + ); +#14962 = ORIENTED_EDGE('',*,*,#14963,.T.); +#14963 = EDGE_CURVE('',#14956,#14938,#14964,.T.); +#14964 = LINE('',#14965,#14966); +#14965 = CARTESIAN_POINT('',(0.686811100326,-2.965036741454, + 1.331985122999)); +#14966 = VECTOR('',#14967,1.); +#14967 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#14968 = PLANE('',#14969); +#14969 = AXIS2_PLACEMENT_3D('',#14970,#14971,#14972); +#14970 = CARTESIAN_POINT('',(0.77497458949,-2.465036748202, + 1.849999998875)); +#14971 = DIRECTION('',(0.984807753012,-0.173648177667, + -7.138720755481E-16)); +#14972 = DIRECTION('',(9.860761315263E-32,4.111025437405E-15,-1.)); +#14973 = ADVANCED_FACE('',(#14974),#15008,.F.); +#14974 = FACE_BOUND('',#14975,.T.); +#14975 = EDGE_LOOP('',(#14976,#14986,#14994,#15002)); +#14976 = ORIENTED_EDGE('',*,*,#14977,.T.); +#14977 = EDGE_CURVE('',#14978,#14980,#14982,.T.); +#14978 = VERTEX_POINT('',#14979); +#14979 = CARTESIAN_POINT('',(1.72497457667,-2.465036748202, + 1.150000008322)); +#14980 = VERTEX_POINT('',#14981); +#14981 = CARTESIAN_POINT('',(1.813138065834,-2.965036741454, + 1.331985122999)); +#14982 = LINE('',#14983,#14984); +#14983 = CARTESIAN_POINT('',(1.818798470747,-2.997138492927, + 1.343669205003)); +#14984 = VECTOR('',#14985,1.); +#14985 = DIRECTION('',(0.163464460889,-0.927053025192,0.337419706757)); +#14986 = ORIENTED_EDGE('',*,*,#14987,.T.); +#14987 = EDGE_CURVE('',#14980,#14988,#14990,.T.); +#14988 = VERTEX_POINT('',#14989); +#14989 = CARTESIAN_POINT('',(1.813138065834,-2.965036741454, + 1.668014884198)); +#14990 = LINE('',#14991,#14992); +#14991 = CARTESIAN_POINT('',(1.813138065834,-2.965036741454, + 1.150000008322)); +#14992 = VECTOR('',#14993,1.); +#14993 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#14994 = ORIENTED_EDGE('',*,*,#14995,.T.); +#14995 = EDGE_CURVE('',#14988,#14996,#14998,.T.); +#14996 = VERTEX_POINT('',#14997); +#14997 = CARTESIAN_POINT('',(1.72497457667,-2.465036748202, + 1.849999998875)); +#14998 = LINE('',#14999,#15000); +#14999 = CARTESIAN_POINT('',(1.732990765554,-2.510498814482, + 1.833453159961)); +#15000 = VECTOR('',#15001,1.); +#15001 = DIRECTION('',(-0.163464460889,0.927053025192,0.337419706757)); +#15002 = ORIENTED_EDGE('',*,*,#15003,.T.); +#15003 = EDGE_CURVE('',#14996,#14978,#15004,.T.); +#15004 = LINE('',#15005,#15006); +#15005 = CARTESIAN_POINT('',(1.72497457667,-2.465036748202, + 1.849999998875)); +#15006 = VECTOR('',#15007,1.); +#15007 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#15008 = PLANE('',#15009); +#15009 = AXIS2_PLACEMENT_3D('',#15010,#15011,#15012); +#15010 = CARTESIAN_POINT('',(1.813138065834,-2.965036741454, + 1.150000008322)); +#15011 = DIRECTION('',(0.984807753012,0.173648177667,7.138720755481E-16) + ); +#15012 = DIRECTION('',(-9.860761315263E-32,4.111025437405E-15,-1.)); +#15013 = ADVANCED_FACE('',(#15014),#15048,.T.); +#15014 = FACE_BOUND('',#15015,.T.); +#15015 = EDGE_LOOP('',(#15016,#15026,#15034,#15042)); +#15016 = ORIENTED_EDGE('',*,*,#15017,.T.); +#15017 = EDGE_CURVE('',#15018,#15020,#15022,.T.); +#15018 = VERTEX_POINT('',#15019); +#15019 = CARTESIAN_POINT('',(1.936811083457,-2.965036741454, + 1.331985122999)); +#15020 = VERTEX_POINT('',#15021); +#15021 = CARTESIAN_POINT('',(2.024974572621,-2.465036748202, + 1.150000008322)); +#15022 = LINE('',#15023,#15024); +#15023 = CARTESIAN_POINT('',(1.939166867428,-2.951676426647, + 1.327122366089)); +#15024 = VECTOR('',#15025,1.); +#15025 = DIRECTION('',(0.163464460889,0.927053025192,-0.337419706757)); +#15026 = ORIENTED_EDGE('',*,*,#15027,.T.); +#15027 = EDGE_CURVE('',#15020,#15028,#15030,.T.); +#15028 = VERTEX_POINT('',#15029); +#15029 = CARTESIAN_POINT('',(2.024974572621,-2.465036748202, + 1.849999998875)); +#15030 = LINE('',#15031,#15032); +#15031 = CARTESIAN_POINT('',(2.024974572621,-2.465036748202, + 1.668014884198)); +#15032 = VECTOR('',#15033,1.); +#15033 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#15034 = ORIENTED_EDGE('',*,*,#15035,.T.); +#15035 = EDGE_CURVE('',#15028,#15036,#15038,.T.); +#15036 = VERTEX_POINT('',#15037); +#15037 = CARTESIAN_POINT('',(1.936811083457,-2.965036741454, + 1.668014884198)); +#15038 = LINE('',#15039,#15040); +#15039 = CARTESIAN_POINT('',(2.024974572621,-2.465036748202, + 1.849999998875)); +#15040 = VECTOR('',#15041,1.); +#15041 = DIRECTION('',(-0.163464460889,-0.927053025192,-0.337419706757) + ); +#15042 = ORIENTED_EDGE('',*,*,#15043,.T.); +#15043 = EDGE_CURVE('',#15036,#15018,#15044,.T.); +#15044 = LINE('',#15045,#15046); +#15045 = CARTESIAN_POINT('',(1.936811083457,-2.965036741454, + 1.331985122999)); +#15046 = VECTOR('',#15047,1.); +#15047 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#15048 = PLANE('',#15049); +#15049 = AXIS2_PLACEMENT_3D('',#15050,#15051,#15052); +#15050 = CARTESIAN_POINT('',(2.024974572621,-2.465036748202, + 1.849999998875)); +#15051 = DIRECTION('',(0.984807753012,-0.173648177667, + -7.138720755481E-16)); +#15052 = DIRECTION('',(9.860761315263E-32,4.111025437405E-15,-1.)); +#15053 = ADVANCED_FACE('',(#15054),#15088,.F.); +#15054 = FACE_BOUND('',#15055,.T.); +#15055 = EDGE_LOOP('',(#15056,#15066,#15074,#15082)); +#15056 = ORIENTED_EDGE('',*,*,#15057,.T.); +#15057 = EDGE_CURVE('',#15058,#15060,#15062,.T.); +#15058 = VERTEX_POINT('',#15059); +#15059 = CARTESIAN_POINT('',(2.9749745598,-2.465036748202,1.150000008322 + )); +#15060 = VERTEX_POINT('',#15061); +#15061 = CARTESIAN_POINT('',(3.063138048965,-2.965036741454, + 1.331985122999)); +#15062 = LINE('',#15063,#15064); +#15063 = CARTESIAN_POINT('',(3.068798453878,-2.997138492927, + 1.343669205003)); +#15064 = VECTOR('',#15065,1.); +#15065 = DIRECTION('',(0.163464460889,-0.927053025192,0.337419706757)); +#15066 = ORIENTED_EDGE('',*,*,#15067,.T.); +#15067 = EDGE_CURVE('',#15060,#15068,#15070,.T.); +#15068 = VERTEX_POINT('',#15069); +#15069 = CARTESIAN_POINT('',(3.063138048965,-2.965036741454, + 1.668014884198)); +#15070 = LINE('',#15071,#15072); +#15071 = CARTESIAN_POINT('',(3.063138048965,-2.965036741454, + 1.150000008322)); +#15072 = VECTOR('',#15073,1.); +#15073 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#15074 = ORIENTED_EDGE('',*,*,#15075,.T.); +#15075 = EDGE_CURVE('',#15068,#15076,#15078,.T.); +#15076 = VERTEX_POINT('',#15077); +#15077 = CARTESIAN_POINT('',(2.9749745598,-2.465036748202,1.849999998875 + )); +#15078 = LINE('',#15079,#15080); +#15079 = CARTESIAN_POINT('',(2.982990748684,-2.510498814482, + 1.833453159961)); +#15080 = VECTOR('',#15081,1.); +#15081 = DIRECTION('',(-0.163464460889,0.927053025192,0.337419706757)); +#15082 = ORIENTED_EDGE('',*,*,#15083,.T.); +#15083 = EDGE_CURVE('',#15076,#15058,#15084,.T.); +#15084 = LINE('',#15085,#15086); +#15085 = CARTESIAN_POINT('',(2.9749745598,-2.465036748202,1.849999998875 + )); +#15086 = VECTOR('',#15087,1.); +#15087 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#15088 = PLANE('',#15089); +#15089 = AXIS2_PLACEMENT_3D('',#15090,#15091,#15092); +#15090 = CARTESIAN_POINT('',(3.063138048965,-2.965036741454, + 1.150000008322)); +#15091 = DIRECTION('',(0.984807753012,0.173648177667,7.138720755481E-16) + ); +#15092 = DIRECTION('',(-9.860761315263E-32,4.111025437405E-15,-1.)); +#15093 = ADVANCED_FACE('',(#15094),#15128,.T.); +#15094 = FACE_BOUND('',#15095,.T.); +#15095 = EDGE_LOOP('',(#15096,#15106,#15114,#15122)); +#15096 = ORIENTED_EDGE('',*,*,#15097,.T.); +#15097 = EDGE_CURVE('',#15098,#15100,#15102,.T.); +#15098 = VERTEX_POINT('',#15099); +#15099 = CARTESIAN_POINT('',(3.186811066587,-2.965036741454, + 1.331985122999)); +#15100 = VERTEX_POINT('',#15101); +#15101 = CARTESIAN_POINT('',(3.274974555752,-2.465036748202, + 1.150000008322)); +#15102 = LINE('',#15103,#15104); +#15103 = CARTESIAN_POINT('',(3.189166850559,-2.951676426647, + 1.327122366089)); +#15104 = VECTOR('',#15105,1.); +#15105 = DIRECTION('',(0.163464460889,0.927053025192,-0.337419706757)); +#15106 = ORIENTED_EDGE('',*,*,#15107,.T.); +#15107 = EDGE_CURVE('',#15100,#15108,#15110,.T.); +#15108 = VERTEX_POINT('',#15109); +#15109 = CARTESIAN_POINT('',(3.274974555752,-2.465036748202, + 1.849999998875)); +#15110 = LINE('',#15111,#15112); +#15111 = CARTESIAN_POINT('',(3.274974555752,-2.465036748202, + 1.668014884198)); +#15112 = VECTOR('',#15113,1.); +#15113 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#15114 = ORIENTED_EDGE('',*,*,#15115,.T.); +#15115 = EDGE_CURVE('',#15108,#15116,#15118,.T.); +#15116 = VERTEX_POINT('',#15117); +#15117 = CARTESIAN_POINT('',(3.186811066587,-2.965036741454, + 1.668014884198)); +#15118 = LINE('',#15119,#15120); +#15119 = CARTESIAN_POINT('',(3.274974555752,-2.465036748202, + 1.849999998875)); +#15120 = VECTOR('',#15121,1.); +#15121 = DIRECTION('',(-0.163464460889,-0.927053025192,-0.337419706757) + ); +#15122 = ORIENTED_EDGE('',*,*,#15123,.T.); +#15123 = EDGE_CURVE('',#15116,#15098,#15124,.T.); +#15124 = LINE('',#15125,#15126); +#15125 = CARTESIAN_POINT('',(3.186811066587,-2.965036741454, + 1.331985122999)); +#15126 = VECTOR('',#15127,1.); +#15127 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#15128 = PLANE('',#15129); +#15129 = AXIS2_PLACEMENT_3D('',#15130,#15131,#15132); +#15130 = CARTESIAN_POINT('',(3.274974555752,-2.465036748202, + 1.849999998875)); +#15131 = DIRECTION('',(0.984807753012,-0.173648177667, + -7.138720755481E-16)); +#15132 = DIRECTION('',(9.860761315263E-32,4.111025437405E-15,-1.)); +#15133 = ADVANCED_FACE('',(#15134),#15150,.T.); +#15134 = FACE_BOUND('',#15135,.T.); +#15135 = EDGE_LOOP('',(#15136,#15142,#15143,#15149)); +#15136 = ORIENTED_EDGE('',*,*,#15137,.T.); +#15137 = EDGE_CURVE('',#14938,#14900,#15138,.T.); +#15138 = LINE('',#15139,#15140); +#15139 = CARTESIAN_POINT('',(0.474974593539,-2.965036741454, + 1.331985122999)); +#15140 = VECTOR('',#15141,1.); +#15141 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15142 = ORIENTED_EDGE('',*,*,#14897,.F.); +#15143 = ORIENTED_EDGE('',*,*,#15144,.T.); +#15144 = EDGE_CURVE('',#14898,#14940,#15145,.T.); +#15145 = LINE('',#15146,#15147); +#15146 = CARTESIAN_POINT('',(0.77497458949,-2.465036748202, + 1.150000008322)); +#15147 = VECTOR('',#15148,1.); +#15148 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15149 = ORIENTED_EDGE('',*,*,#14937,.F.); +#15150 = PLANE('',#15151); +#15151 = AXIS2_PLACEMENT_3D('',#15152,#15153,#15154); +#15152 = CARTESIAN_POINT('',(0.77497458949,-2.965036741454, + 1.331985122999)); +#15153 = DIRECTION('',(2.38831389586E-15,-0.342020143326,-0.939692620786 + )); +#15154 = DIRECTION('',(0.,-0.939692620786,0.342020143326)); +#15155 = ADVANCED_FACE('',(#15156),#15172,.F.); +#15156 = FACE_BOUND('',#15157,.T.); +#15157 = EDGE_LOOP('',(#15158,#15164,#15165,#15171)); +#15158 = ORIENTED_EDGE('',*,*,#15159,.T.); +#15159 = EDGE_CURVE('',#14948,#14916,#15160,.T.); +#15160 = LINE('',#15161,#15162); +#15161 = CARTESIAN_POINT('',(0.77497458949,-2.465036748202, + 1.849999998875)); +#15162 = VECTOR('',#15163,1.); +#15163 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15164 = ORIENTED_EDGE('',*,*,#14915,.F.); +#15165 = ORIENTED_EDGE('',*,*,#15166,.T.); +#15166 = EDGE_CURVE('',#14908,#14956,#15167,.T.); +#15167 = LINE('',#15168,#15169); +#15168 = CARTESIAN_POINT('',(0.77497458949,-2.965036741454, + 1.668014884198)); +#15169 = VECTOR('',#15170,1.); +#15170 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15171 = ORIENTED_EDGE('',*,*,#14955,.F.); +#15172 = PLANE('',#15173); +#15173 = AXIS2_PLACEMENT_3D('',#15174,#15175,#15176); +#15174 = CARTESIAN_POINT('',(0.77497458949,-2.465036748202, + 1.849999998875)); +#15175 = DIRECTION('',(-2.38831389586E-15,0.342020143326,-0.939692620786 + )); +#15176 = DIRECTION('',(-1.,-9.860761315263E-32,2.541590561669E-15)); +#15177 = ADVANCED_FACE('',(#15178),#15194,.T.); +#15178 = FACE_BOUND('',#15179,.T.); +#15179 = EDGE_LOOP('',(#15180,#15186,#15187,#15193)); +#15180 = ORIENTED_EDGE('',*,*,#15181,.T.); +#15181 = EDGE_CURVE('',#15018,#14980,#15182,.T.); +#15182 = LINE('',#15183,#15184); +#15183 = CARTESIAN_POINT('',(1.72497457667,-2.965036741454, + 1.331985122999)); +#15184 = VECTOR('',#15185,1.); +#15185 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15186 = ORIENTED_EDGE('',*,*,#14977,.F.); +#15187 = ORIENTED_EDGE('',*,*,#15188,.T.); +#15188 = EDGE_CURVE('',#14978,#15020,#15189,.T.); +#15189 = LINE('',#15190,#15191); +#15190 = CARTESIAN_POINT('',(2.024974572621,-2.465036748202, + 1.150000008322)); +#15191 = VECTOR('',#15192,1.); +#15192 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15193 = ORIENTED_EDGE('',*,*,#15017,.F.); +#15194 = PLANE('',#15195); +#15195 = AXIS2_PLACEMENT_3D('',#15196,#15197,#15198); +#15196 = CARTESIAN_POINT('',(2.024974572621,-2.965036741454, + 1.331985122999)); +#15197 = DIRECTION('',(2.38831389586E-15,-0.342020143326,-0.939692620786 + )); +#15198 = DIRECTION('',(0.,-0.939692620786,0.342020143326)); +#15199 = ADVANCED_FACE('',(#15200),#15216,.F.); +#15200 = FACE_BOUND('',#15201,.T.); +#15201 = EDGE_LOOP('',(#15202,#15208,#15209,#15215)); +#15202 = ORIENTED_EDGE('',*,*,#15203,.T.); +#15203 = EDGE_CURVE('',#15028,#14996,#15204,.T.); +#15204 = LINE('',#15205,#15206); +#15205 = CARTESIAN_POINT('',(2.024974572621,-2.465036748202, + 1.849999998875)); +#15206 = VECTOR('',#15207,1.); +#15207 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15208 = ORIENTED_EDGE('',*,*,#14995,.F.); +#15209 = ORIENTED_EDGE('',*,*,#15210,.T.); +#15210 = EDGE_CURVE('',#14988,#15036,#15211,.T.); +#15211 = LINE('',#15212,#15213); +#15212 = CARTESIAN_POINT('',(2.024974572621,-2.965036741454, + 1.668014884198)); +#15213 = VECTOR('',#15214,1.); +#15214 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15215 = ORIENTED_EDGE('',*,*,#15035,.F.); +#15216 = PLANE('',#15217); +#15217 = AXIS2_PLACEMENT_3D('',#15218,#15219,#15220); +#15218 = CARTESIAN_POINT('',(2.024974572621,-2.465036748202, + 1.849999998875)); +#15219 = DIRECTION('',(-2.38831389586E-15,0.342020143326,-0.939692620786 + )); +#15220 = DIRECTION('',(-1.,-9.860761315263E-32,2.541590561669E-15)); +#15221 = ADVANCED_FACE('',(#15222),#15238,.T.); +#15222 = FACE_BOUND('',#15223,.T.); +#15223 = EDGE_LOOP('',(#15224,#15230,#15231,#15237)); +#15224 = ORIENTED_EDGE('',*,*,#15225,.T.); +#15225 = EDGE_CURVE('',#15098,#15060,#15226,.T.); +#15226 = LINE('',#15227,#15228); +#15227 = CARTESIAN_POINT('',(2.9749745598,-2.965036741454,1.331985122999 + )); +#15228 = VECTOR('',#15229,1.); +#15229 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15230 = ORIENTED_EDGE('',*,*,#15057,.F.); +#15231 = ORIENTED_EDGE('',*,*,#15232,.T.); +#15232 = EDGE_CURVE('',#15058,#15100,#15233,.T.); +#15233 = LINE('',#15234,#15235); +#15234 = CARTESIAN_POINT('',(3.274974555752,-2.465036748202, + 1.150000008322)); +#15235 = VECTOR('',#15236,1.); +#15236 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15237 = ORIENTED_EDGE('',*,*,#15097,.F.); +#15238 = PLANE('',#15239); +#15239 = AXIS2_PLACEMENT_3D('',#15240,#15241,#15242); +#15240 = CARTESIAN_POINT('',(3.274974555752,-2.965036741454, + 1.331985122999)); +#15241 = DIRECTION('',(2.38831389586E-15,-0.342020143326,-0.939692620786 + )); +#15242 = DIRECTION('',(0.,-0.939692620786,0.342020143326)); +#15243 = ADVANCED_FACE('',(#15244),#15260,.F.); +#15244 = FACE_BOUND('',#15245,.T.); +#15245 = EDGE_LOOP('',(#15246,#15252,#15253,#15259)); +#15246 = ORIENTED_EDGE('',*,*,#15247,.T.); +#15247 = EDGE_CURVE('',#15108,#15076,#15248,.T.); +#15248 = LINE('',#15249,#15250); +#15249 = CARTESIAN_POINT('',(3.274974555752,-2.465036748202, + 1.849999998875)); +#15250 = VECTOR('',#15251,1.); +#15251 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15252 = ORIENTED_EDGE('',*,*,#15075,.F.); +#15253 = ORIENTED_EDGE('',*,*,#15254,.T.); +#15254 = EDGE_CURVE('',#15068,#15116,#15255,.T.); +#15255 = LINE('',#15256,#15257); +#15256 = CARTESIAN_POINT('',(3.274974555752,-2.965036741454, + 1.668014884198)); +#15257 = VECTOR('',#15258,1.); +#15258 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15259 = ORIENTED_EDGE('',*,*,#15115,.F.); +#15260 = PLANE('',#15261); +#15261 = AXIS2_PLACEMENT_3D('',#15262,#15263,#15264); +#15262 = CARTESIAN_POINT('',(3.274974555752,-2.465036748202, + 1.849999998875)); +#15263 = DIRECTION('',(-2.38831389586E-15,0.342020143326,-0.939692620786 + )); +#15264 = DIRECTION('',(-1.,-9.860761315263E-32,2.541590561669E-15)); +#15265 = ADVANCED_FACE('',(#15266),#15378,.T.); +#15266 = FACE_BOUND('',#15267,.T.); +#15267 = EDGE_LOOP('',(#15268,#15279,#15287,#15296,#15304,#15313,#15321, + #15330,#15338,#15347,#15355,#15364,#15372)); +#15268 = ORIENTED_EDGE('',*,*,#15269,.F.); +#15269 = EDGE_CURVE('',#15270,#15272,#15274,.T.); +#15270 = VERTEX_POINT('',#15271); +#15271 = CARTESIAN_POINT('',(0.474974593539,0.734963208613, + 2.599999988754)); +#15272 = VERTEX_POINT('',#15273); +#15273 = CARTESIAN_POINT('',(0.474974593539,0.634963209963, + 2.499999990103)); +#15274 = CIRCLE('',#15275,9.999999865046E-02); +#15275 = AXIS2_PLACEMENT_3D('',#15276,#15277,#15278); +#15276 = CARTESIAN_POINT('',(0.474974593539,0.734963208613, + 2.499999990103)); +#15277 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15278 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15279 = ORIENTED_EDGE('',*,*,#15280,.F.); +#15280 = EDGE_CURVE('',#15281,#15270,#15283,.T.); +#15281 = VERTEX_POINT('',#15282); +#15282 = CARTESIAN_POINT('',(0.474974593539,1.034963204565, + 2.599999988754)); +#15283 = LINE('',#15284,#15285); +#15284 = CARTESIAN_POINT('',(0.474974593539,1.034963204565, + 2.599999988754)); +#15285 = VECTOR('',#15286,1.); +#15286 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#15287 = ORIENTED_EDGE('',*,*,#15288,.T.); +#15288 = EDGE_CURVE('',#15281,#15289,#15291,.T.); +#15289 = VERTEX_POINT('',#15290); +#15290 = CARTESIAN_POINT('',(0.474974593539,1.134963203215, + 2.499999990103)); +#15291 = CIRCLE('',#15292,9.999999865046E-02); +#15292 = AXIS2_PLACEMENT_3D('',#15293,#15294,#15295); +#15293 = CARTESIAN_POINT('',(0.474974593539,1.034963204565, + 2.499999990103)); +#15294 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15295 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#15296 = ORIENTED_EDGE('',*,*,#15297,.F.); +#15297 = EDGE_CURVE('',#15298,#15289,#15300,.T.); +#15298 = VERTEX_POINT('',#15299); +#15299 = CARTESIAN_POINT('',(0.474974593539,1.134963203215,0.94102984344 + )); +#15300 = LINE('',#15301,#15302); +#15301 = CARTESIAN_POINT('',(0.474974593539,1.134963203215,0.94102984344 + )); +#15302 = VECTOR('',#15303,1.); +#15303 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#15304 = ORIENTED_EDGE('',*,*,#15305,.F.); +#15305 = EDGE_CURVE('',#15306,#15298,#15308,.T.); +#15306 = VERTEX_POINT('',#15307); +#15307 = CARTESIAN_POINT('',(0.474974593539,1.283199392194, + 0.747844680789)); +#15308 = CIRCLE('',#15309,0.199999997301); +#15309 = AXIS2_PLACEMENT_3D('',#15310,#15311,#15312); +#15310 = CARTESIAN_POINT('',(0.474974593539,1.334963200516,0.94102984344 + )); +#15311 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#15312 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#15313 = ORIENTED_EDGE('',*,*,#15314,.F.); +#15314 = EDGE_CURVE('',#15315,#15306,#15317,.T.); +#15315 = VERTEX_POINT('',#15316); +#15316 = CARTESIAN_POINT('',(0.474974593539,1.686727004789, + 0.639719782871)); +#15317 = LINE('',#15318,#15319); +#15318 = CARTESIAN_POINT('',(0.474974593539,1.686727004789, + 0.639719782871)); +#15319 = VECTOR('',#15320,1.); +#15320 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#15321 = ORIENTED_EDGE('',*,*,#15322,.F.); +#15322 = EDGE_CURVE('',#15323,#15315,#15325,.T.); +#15323 = VERTEX_POINT('',#15324); +#15324 = CARTESIAN_POINT('',(0.474974593539,1.834963193768,0.44653462022 + )); +#15325 = CIRCLE('',#15326,0.199999997301); +#15326 = AXIS2_PLACEMENT_3D('',#15327,#15328,#15329); +#15327 = CARTESIAN_POINT('',(0.474974593539,1.634963196467,0.44653462022 + )); +#15328 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#15329 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15330 = ORIENTED_EDGE('',*,*,#15331,.F.); +#15331 = EDGE_CURVE('',#15332,#15323,#15334,.T.); +#15332 = VERTEX_POINT('',#15333); +#15333 = CARTESIAN_POINT('',(0.474974593539,1.834963193768, + 0.200000021143)); +#15334 = LINE('',#15335,#15336); +#15335 = CARTESIAN_POINT('',(0.474974593539,1.834963193768, + 0.200000021143)); +#15336 = VECTOR('',#15337,1.); +#15337 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#15338 = ORIENTED_EDGE('',*,*,#15339,.F.); +#15339 = EDGE_CURVE('',#15340,#15332,#15342,.T.); +#15340 = VERTEX_POINT('',#15341); +#15341 = CARTESIAN_POINT('',(0.474974593539,1.634963196467, + 2.384185937565E-08)); +#15342 = CIRCLE('',#15343,0.199999997301); +#15343 = AXIS2_PLACEMENT_3D('',#15344,#15345,#15346); +#15344 = CARTESIAN_POINT('',(0.474974593539,1.634963196467, + 0.200000021143)); +#15345 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#15346 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15347 = ORIENTED_EDGE('',*,*,#15348,.F.); +#15348 = EDGE_CURVE('',#15349,#15340,#15351,.T.); +#15349 = VERTEX_POINT('',#15350); +#15350 = CARTESIAN_POINT('',(0.474974593539,0.734963208613, + 2.384185626703E-08)); +#15351 = LINE('',#15352,#15353); +#15352 = CARTESIAN_POINT('',(0.474974593539,0.734963208613, + 2.384185626703E-08)); +#15353 = VECTOR('',#15354,1.); +#15354 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#15355 = ORIENTED_EDGE('',*,*,#15356,.F.); +#15356 = EDGE_CURVE('',#15357,#15349,#15359,.T.); +#15357 = VERTEX_POINT('',#15358); +#15358 = CARTESIAN_POINT('',(0.474974593539,0.634963209963, + 0.100000022492)); +#15359 = CIRCLE('',#15360,9.999999865046E-02); +#15360 = AXIS2_PLACEMENT_3D('',#15361,#15362,#15363); +#15361 = CARTESIAN_POINT('',(0.474974593539,0.734963208613, + 0.100000022492)); +#15362 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15363 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15364 = ORIENTED_EDGE('',*,*,#15365,.F.); +#15365 = EDGE_CURVE('',#15366,#15357,#15368,.T.); +#15366 = VERTEX_POINT('',#15367); +#15367 = CARTESIAN_POINT('',(0.474974593539,0.634963209963, + 0.350000019118)); +#15368 = LINE('',#15369,#15370); +#15369 = CARTESIAN_POINT('',(0.474974593539,0.634963209963, + 2.499999990103)); +#15370 = VECTOR('',#15371,1.); +#15371 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#15372 = ORIENTED_EDGE('',*,*,#15373,.F.); +#15373 = EDGE_CURVE('',#15272,#15366,#15374,.T.); +#15374 = LINE('',#15375,#15376); +#15375 = CARTESIAN_POINT('',(0.474974593539,0.634963209963, + 2.499999990103)); +#15376 = VECTOR('',#15377,1.); +#15377 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#15378 = PLANE('',#15379); +#15379 = AXIS2_PLACEMENT_3D('',#15380,#15381,#15382); +#15380 = CARTESIAN_POINT('',(0.474974593539,0.734963208613, + 2.499999990103)); +#15381 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15382 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#15383 = ADVANCED_FACE('',(#15384),#15496,.F.); +#15384 = FACE_BOUND('',#15385,.T.); +#15385 = EDGE_LOOP('',(#15386,#15397,#15405,#15413,#15422,#15430,#15439, + #15447,#15456,#15464,#15473,#15481,#15490)); +#15386 = ORIENTED_EDGE('',*,*,#15387,.T.); +#15387 = EDGE_CURVE('',#15388,#15390,#15392,.T.); +#15388 = VERTEX_POINT('',#15389); +#15389 = CARTESIAN_POINT('',(0.77497458949,0.734963208613,2.599999988754 + )); +#15390 = VERTEX_POINT('',#15391); +#15391 = CARTESIAN_POINT('',(0.77497458949,0.634963209963,2.499999990103 + )); +#15392 = CIRCLE('',#15393,9.999999865046E-02); +#15393 = AXIS2_PLACEMENT_3D('',#15394,#15395,#15396); +#15394 = CARTESIAN_POINT('',(0.77497458949,0.734963208613,2.499999990103 + )); +#15395 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15396 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15397 = ORIENTED_EDGE('',*,*,#15398,.T.); +#15398 = EDGE_CURVE('',#15390,#15399,#15401,.T.); +#15399 = VERTEX_POINT('',#15400); +#15400 = CARTESIAN_POINT('',(0.77497458949,0.634963209963,0.350000019118 + )); +#15401 = LINE('',#15402,#15403); +#15402 = CARTESIAN_POINT('',(0.77497458949,0.634963209963,2.499999990103 + )); +#15403 = VECTOR('',#15404,1.); +#15404 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#15405 = ORIENTED_EDGE('',*,*,#15406,.T.); +#15406 = EDGE_CURVE('',#15399,#15407,#15409,.T.); +#15407 = VERTEX_POINT('',#15408); +#15408 = CARTESIAN_POINT('',(0.77497458949,0.634963209963,0.100000022492 + )); +#15409 = LINE('',#15410,#15411); +#15410 = CARTESIAN_POINT('',(0.77497458949,0.634963209963,2.499999990103 + )); +#15411 = VECTOR('',#15412,1.); +#15412 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#15413 = ORIENTED_EDGE('',*,*,#15414,.T.); +#15414 = EDGE_CURVE('',#15407,#15415,#15417,.T.); +#15415 = VERTEX_POINT('',#15416); +#15416 = CARTESIAN_POINT('',(0.77497458949,0.734963208613, + 2.384185626703E-08)); +#15417 = CIRCLE('',#15418,9.999999865046E-02); +#15418 = AXIS2_PLACEMENT_3D('',#15419,#15420,#15421); +#15419 = CARTESIAN_POINT('',(0.77497458949,0.734963208613,0.100000022492 + )); +#15420 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15421 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15422 = ORIENTED_EDGE('',*,*,#15423,.T.); +#15423 = EDGE_CURVE('',#15415,#15424,#15426,.T.); +#15424 = VERTEX_POINT('',#15425); +#15425 = CARTESIAN_POINT('',(0.77497458949,1.634963196467, + 2.384185937565E-08)); +#15426 = LINE('',#15427,#15428); +#15427 = CARTESIAN_POINT('',(0.77497458949,0.734963208613, + 2.384185626703E-08)); +#15428 = VECTOR('',#15429,1.); +#15429 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#15430 = ORIENTED_EDGE('',*,*,#15431,.T.); +#15431 = EDGE_CURVE('',#15424,#15432,#15434,.T.); +#15432 = VERTEX_POINT('',#15433); +#15433 = CARTESIAN_POINT('',(0.77497458949,1.834963193768,0.200000021143 + )); +#15434 = CIRCLE('',#15435,0.199999997301); +#15435 = AXIS2_PLACEMENT_3D('',#15436,#15437,#15438); +#15436 = CARTESIAN_POINT('',(0.77497458949,1.634963196467,0.200000021143 + )); +#15437 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#15438 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15439 = ORIENTED_EDGE('',*,*,#15440,.T.); +#15440 = EDGE_CURVE('',#15432,#15441,#15443,.T.); +#15441 = VERTEX_POINT('',#15442); +#15442 = CARTESIAN_POINT('',(0.77497458949,1.834963193768,0.44653462022) + ); +#15443 = LINE('',#15444,#15445); +#15444 = CARTESIAN_POINT('',(0.77497458949,1.834963193768,0.200000021143 + )); +#15445 = VECTOR('',#15446,1.); +#15446 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#15447 = ORIENTED_EDGE('',*,*,#15448,.T.); +#15448 = EDGE_CURVE('',#15441,#15449,#15451,.T.); +#15449 = VERTEX_POINT('',#15450); +#15450 = CARTESIAN_POINT('',(0.77497458949,1.686727004789,0.639719782871 + )); +#15451 = CIRCLE('',#15452,0.199999997301); +#15452 = AXIS2_PLACEMENT_3D('',#15453,#15454,#15455); +#15453 = CARTESIAN_POINT('',(0.77497458949,1.634963196467,0.44653462022) + ); +#15454 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#15455 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15456 = ORIENTED_EDGE('',*,*,#15457,.T.); +#15457 = EDGE_CURVE('',#15449,#15458,#15460,.T.); +#15458 = VERTEX_POINT('',#15459); +#15459 = CARTESIAN_POINT('',(0.77497458949,1.283199392194,0.747844680789 + )); +#15460 = LINE('',#15461,#15462); +#15461 = CARTESIAN_POINT('',(0.77497458949,1.686727004789,0.639719782871 + )); +#15462 = VECTOR('',#15463,1.); +#15463 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#15464 = ORIENTED_EDGE('',*,*,#15465,.T.); +#15465 = EDGE_CURVE('',#15458,#15466,#15468,.T.); +#15466 = VERTEX_POINT('',#15467); +#15467 = CARTESIAN_POINT('',(0.77497458949,1.134963203215,0.94102984344) + ); +#15468 = CIRCLE('',#15469,0.199999997301); +#15469 = AXIS2_PLACEMENT_3D('',#15470,#15471,#15472); +#15470 = CARTESIAN_POINT('',(0.77497458949,1.334963200516,0.94102984344) + ); +#15471 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#15472 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#15473 = ORIENTED_EDGE('',*,*,#15474,.T.); +#15474 = EDGE_CURVE('',#15466,#15475,#15477,.T.); +#15475 = VERTEX_POINT('',#15476); +#15476 = CARTESIAN_POINT('',(0.77497458949,1.134963203215,2.499999990103 + )); +#15477 = LINE('',#15478,#15479); +#15478 = CARTESIAN_POINT('',(0.77497458949,1.134963203215,0.94102984344) + ); +#15479 = VECTOR('',#15480,1.); +#15480 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#15481 = ORIENTED_EDGE('',*,*,#15482,.F.); +#15482 = EDGE_CURVE('',#15483,#15475,#15485,.T.); +#15483 = VERTEX_POINT('',#15484); +#15484 = CARTESIAN_POINT('',(0.77497458949,1.034963204565,2.599999988754 + )); +#15485 = CIRCLE('',#15486,9.999999865046E-02); +#15486 = AXIS2_PLACEMENT_3D('',#15487,#15488,#15489); +#15487 = CARTESIAN_POINT('',(0.77497458949,1.034963204565,2.499999990103 + )); +#15488 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15489 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#15490 = ORIENTED_EDGE('',*,*,#15491,.T.); +#15491 = EDGE_CURVE('',#15483,#15388,#15492,.T.); +#15492 = LINE('',#15493,#15494); +#15493 = CARTESIAN_POINT('',(0.77497458949,1.034963204565,2.599999988754 + )); +#15494 = VECTOR('',#15495,1.); +#15495 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#15496 = PLANE('',#15497); +#15497 = AXIS2_PLACEMENT_3D('',#15498,#15499,#15500); +#15498 = CARTESIAN_POINT('',(0.77497458949,0.734963208613,2.499999990103 + )); +#15499 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15500 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#15501 = ADVANCED_FACE('',(#15502),#15518,.T.); +#15502 = FACE_BOUND('',#15503,.T.); +#15503 = EDGE_LOOP('',(#15504,#15505,#15511,#15512)); +#15504 = ORIENTED_EDGE('',*,*,#15356,.T.); +#15505 = ORIENTED_EDGE('',*,*,#15506,.F.); +#15506 = EDGE_CURVE('',#15415,#15349,#15507,.T.); +#15507 = LINE('',#15508,#15509); +#15508 = CARTESIAN_POINT('',(0.77497458949,0.734963208613, + 2.384185626703E-08)); +#15509 = VECTOR('',#15510,1.); +#15510 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15511 = ORIENTED_EDGE('',*,*,#15414,.F.); +#15512 = ORIENTED_EDGE('',*,*,#15513,.T.); +#15513 = EDGE_CURVE('',#15407,#15357,#15514,.T.); +#15514 = LINE('',#15515,#15516); +#15515 = CARTESIAN_POINT('',(0.77497458949,0.634963209963,0.100000022492 + )); +#15516 = VECTOR('',#15517,1.); +#15517 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15518 = CYLINDRICAL_SURFACE('',#15519,9.999999865046E-02); +#15519 = AXIS2_PLACEMENT_3D('',#15520,#15521,#15522); +#15520 = CARTESIAN_POINT('',(0.77497458949,0.734963208613,0.100000022492 + )); +#15521 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15522 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15523 = ADVANCED_FACE('',(#15524),#15535,.T.); +#15524 = FACE_BOUND('',#15525,.T.); +#15525 = EDGE_LOOP('',(#15526,#15527,#15533,#15534)); +#15526 = ORIENTED_EDGE('',*,*,#15348,.T.); +#15527 = ORIENTED_EDGE('',*,*,#15528,.F.); +#15528 = EDGE_CURVE('',#15424,#15340,#15529,.T.); +#15529 = LINE('',#15530,#15531); +#15530 = CARTESIAN_POINT('',(0.77497458949,1.634963196467, + 2.384185937565E-08)); +#15531 = VECTOR('',#15532,1.); +#15532 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15533 = ORIENTED_EDGE('',*,*,#15423,.F.); +#15534 = ORIENTED_EDGE('',*,*,#15506,.T.); +#15535 = PLANE('',#15536); +#15536 = AXIS2_PLACEMENT_3D('',#15537,#15538,#15539); +#15537 = CARTESIAN_POINT('',(0.77497458949,0.734963208613, + 2.384185626703E-08)); +#15538 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#15539 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#15540 = ADVANCED_FACE('',(#15541),#15552,.T.); +#15541 = FACE_BOUND('',#15542,.T.); +#15542 = EDGE_LOOP('',(#15543,#15544,#15550,#15551)); +#15543 = ORIENTED_EDGE('',*,*,#15339,.T.); +#15544 = ORIENTED_EDGE('',*,*,#15545,.F.); +#15545 = EDGE_CURVE('',#15432,#15332,#15546,.T.); +#15546 = LINE('',#15547,#15548); +#15547 = CARTESIAN_POINT('',(0.77497458949,1.834963193768,0.200000021143 + )); +#15548 = VECTOR('',#15549,1.); +#15549 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15550 = ORIENTED_EDGE('',*,*,#15431,.F.); +#15551 = ORIENTED_EDGE('',*,*,#15528,.T.); +#15552 = CYLINDRICAL_SURFACE('',#15553,0.199999997301); +#15553 = AXIS2_PLACEMENT_3D('',#15554,#15555,#15556); +#15554 = CARTESIAN_POINT('',(0.77497458949,1.634963196467,0.200000021143 + )); +#15555 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#15556 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15557 = ADVANCED_FACE('',(#15558),#15569,.T.); +#15558 = FACE_BOUND('',#15559,.T.); +#15559 = EDGE_LOOP('',(#15560,#15561,#15567,#15568)); +#15560 = ORIENTED_EDGE('',*,*,#15331,.T.); +#15561 = ORIENTED_EDGE('',*,*,#15562,.F.); +#15562 = EDGE_CURVE('',#15441,#15323,#15563,.T.); +#15563 = LINE('',#15564,#15565); +#15564 = CARTESIAN_POINT('',(0.77497458949,1.834963193768,0.44653462022) + ); +#15565 = VECTOR('',#15566,1.); +#15566 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15567 = ORIENTED_EDGE('',*,*,#15440,.F.); +#15568 = ORIENTED_EDGE('',*,*,#15545,.T.); +#15569 = PLANE('',#15570); +#15570 = AXIS2_PLACEMENT_3D('',#15571,#15572,#15573); +#15571 = CARTESIAN_POINT('',(0.77497458949,1.834963193768,0.200000021143 + )); +#15572 = DIRECTION('',(-6.982962677686E-15,1.,3.931258214751E-15)); +#15573 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15574 = ADVANCED_FACE('',(#15575),#15586,.T.); +#15575 = FACE_BOUND('',#15576,.T.); +#15576 = EDGE_LOOP('',(#15577,#15578,#15584,#15585)); +#15577 = ORIENTED_EDGE('',*,*,#15322,.T.); +#15578 = ORIENTED_EDGE('',*,*,#15579,.F.); +#15579 = EDGE_CURVE('',#15449,#15315,#15580,.T.); +#15580 = LINE('',#15581,#15582); +#15581 = CARTESIAN_POINT('',(0.77497458949,1.686727004789,0.639719782871 + )); +#15582 = VECTOR('',#15583,1.); +#15583 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15584 = ORIENTED_EDGE('',*,*,#15448,.F.); +#15585 = ORIENTED_EDGE('',*,*,#15562,.T.); +#15586 = CYLINDRICAL_SURFACE('',#15587,0.199999997301); +#15587 = AXIS2_PLACEMENT_3D('',#15588,#15589,#15590); +#15588 = CARTESIAN_POINT('',(0.77497458949,1.634963196467,0.44653462022) + ); +#15589 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#15590 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15591 = ADVANCED_FACE('',(#15592),#15603,.T.); +#15592 = FACE_BOUND('',#15593,.T.); +#15593 = EDGE_LOOP('',(#15594,#15595,#15601,#15602)); +#15594 = ORIENTED_EDGE('',*,*,#15314,.T.); +#15595 = ORIENTED_EDGE('',*,*,#15596,.F.); +#15596 = EDGE_CURVE('',#15458,#15306,#15597,.T.); +#15597 = LINE('',#15598,#15599); +#15598 = CARTESIAN_POINT('',(0.77497458949,1.283199392194,0.747844680789 + )); +#15599 = VECTOR('',#15600,1.); +#15600 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15601 = ORIENTED_EDGE('',*,*,#15457,.F.); +#15602 = ORIENTED_EDGE('',*,*,#15579,.T.); +#15603 = PLANE('',#15604); +#15604 = AXIS2_PLACEMENT_3D('',#15605,#15606,#15607); +#15605 = CARTESIAN_POINT('',(0.77497458949,1.686727004789,0.639719782871 + )); +#15606 = DIRECTION('',(-1.807323732225E-15,0.258819045103,0.965925826289 + )); +#15607 = DIRECTION('',(1.,6.982962677672E-15,1.972152263053E-31)); +#15608 = ADVANCED_FACE('',(#15609),#15620,.F.); +#15609 = FACE_BOUND('',#15610,.F.); +#15610 = EDGE_LOOP('',(#15611,#15612,#15613,#15619)); +#15611 = ORIENTED_EDGE('',*,*,#15596,.F.); +#15612 = ORIENTED_EDGE('',*,*,#15465,.T.); +#15613 = ORIENTED_EDGE('',*,*,#15614,.T.); +#15614 = EDGE_CURVE('',#15466,#15298,#15615,.T.); +#15615 = LINE('',#15616,#15617); +#15616 = CARTESIAN_POINT('',(0.77497458949,1.134963203215,0.94102984344) + ); +#15617 = VECTOR('',#15618,1.); +#15618 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15619 = ORIENTED_EDGE('',*,*,#15305,.F.); +#15620 = CYLINDRICAL_SURFACE('',#15621,0.199999997301); +#15621 = AXIS2_PLACEMENT_3D('',#15622,#15623,#15624); +#15622 = CARTESIAN_POINT('',(0.77497458949,1.334963200516,0.94102984344) + ); +#15623 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#15624 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15625 = ADVANCED_FACE('',(#15626),#15637,.T.); +#15626 = FACE_BOUND('',#15627,.T.); +#15627 = EDGE_LOOP('',(#15628,#15629,#15635,#15636)); +#15628 = ORIENTED_EDGE('',*,*,#15297,.T.); +#15629 = ORIENTED_EDGE('',*,*,#15630,.F.); +#15630 = EDGE_CURVE('',#15475,#15289,#15631,.T.); +#15631 = LINE('',#15632,#15633); +#15632 = CARTESIAN_POINT('',(0.77497458949,1.134963203215,2.499999990103 + )); +#15633 = VECTOR('',#15634,1.); +#15634 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15635 = ORIENTED_EDGE('',*,*,#15474,.F.); +#15636 = ORIENTED_EDGE('',*,*,#15614,.T.); +#15637 = PLANE('',#15638); +#15638 = AXIS2_PLACEMENT_3D('',#15639,#15640,#15641); +#15639 = CARTESIAN_POINT('',(0.77497458949,1.134963203215,0.94102984344) + ); +#15640 = DIRECTION('',(-6.982962677686E-15,1.,3.387162263827E-15)); +#15641 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15642 = ADVANCED_FACE('',(#15643),#15654,.T.); +#15643 = FACE_BOUND('',#15644,.T.); +#15644 = EDGE_LOOP('',(#15645,#15646,#15652,#15653)); +#15645 = ORIENTED_EDGE('',*,*,#15288,.F.); +#15646 = ORIENTED_EDGE('',*,*,#15647,.F.); +#15647 = EDGE_CURVE('',#15483,#15281,#15648,.T.); +#15648 = LINE('',#15649,#15650); +#15649 = CARTESIAN_POINT('',(0.77497458949,1.034963204565,2.599999988754 + )); +#15650 = VECTOR('',#15651,1.); +#15651 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15652 = ORIENTED_EDGE('',*,*,#15482,.T.); +#15653 = ORIENTED_EDGE('',*,*,#15630,.T.); +#15654 = CYLINDRICAL_SURFACE('',#15655,9.999999865046E-02); +#15655 = AXIS2_PLACEMENT_3D('',#15656,#15657,#15658); +#15656 = CARTESIAN_POINT('',(0.77497458949,1.034963204565,2.499999990103 + )); +#15657 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15658 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15659 = ADVANCED_FACE('',(#15660),#15671,.T.); +#15660 = FACE_BOUND('',#15661,.T.); +#15661 = EDGE_LOOP('',(#15662,#15663,#15669,#15670)); +#15662 = ORIENTED_EDGE('',*,*,#15280,.T.); +#15663 = ORIENTED_EDGE('',*,*,#15664,.F.); +#15664 = EDGE_CURVE('',#15388,#15270,#15665,.T.); +#15665 = LINE('',#15666,#15667); +#15666 = CARTESIAN_POINT('',(0.77497458949,0.734963208613,2.599999988754 + )); +#15667 = VECTOR('',#15668,1.); +#15668 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15669 = ORIENTED_EDGE('',*,*,#15491,.F.); +#15670 = ORIENTED_EDGE('',*,*,#15647,.T.); +#15671 = PLANE('',#15672); +#15672 = AXIS2_PLACEMENT_3D('',#15673,#15674,#15675); +#15673 = CARTESIAN_POINT('',(0.77497458949,1.034963204565,2.599999988754 + )); +#15674 = DIRECTION('',(2.185723611047E-29,-3.130080614681E-15,1.)); +#15675 = DIRECTION('',(0.,-1.,-3.130080614681E-15)); +#15676 = ADVANCED_FACE('',(#15677),#15688,.T.); +#15677 = FACE_BOUND('',#15678,.T.); +#15678 = EDGE_LOOP('',(#15679,#15680,#15686,#15687)); +#15679 = ORIENTED_EDGE('',*,*,#15269,.T.); +#15680 = ORIENTED_EDGE('',*,*,#15681,.F.); +#15681 = EDGE_CURVE('',#15390,#15272,#15682,.T.); +#15682 = LINE('',#15683,#15684); +#15683 = CARTESIAN_POINT('',(0.77497458949,0.634963209963,2.499999990103 + )); +#15684 = VECTOR('',#15685,1.); +#15685 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15686 = ORIENTED_EDGE('',*,*,#15387,.F.); +#15687 = ORIENTED_EDGE('',*,*,#15664,.T.); +#15688 = CYLINDRICAL_SURFACE('',#15689,9.999999865046E-02); +#15689 = AXIS2_PLACEMENT_3D('',#15690,#15691,#15692); +#15690 = CARTESIAN_POINT('',(0.77497458949,0.734963208613,2.499999990103 + )); +#15691 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15692 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15693 = ADVANCED_FACE('',(#15694),#15705,.T.); +#15694 = FACE_BOUND('',#15695,.T.); +#15695 = EDGE_LOOP('',(#15696,#15702,#15703,#15704)); +#15696 = ORIENTED_EDGE('',*,*,#15697,.T.); +#15697 = EDGE_CURVE('',#15399,#15366,#15698,.T.); +#15698 = LINE('',#15699,#15700); +#15699 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#15700 = VECTOR('',#15701,1.); +#15701 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15702 = ORIENTED_EDGE('',*,*,#15365,.T.); +#15703 = ORIENTED_EDGE('',*,*,#15513,.F.); +#15704 = ORIENTED_EDGE('',*,*,#15406,.F.); +#15705 = PLANE('',#15706); +#15706 = AXIS2_PLACEMENT_3D('',#15707,#15708,#15709); +#15707 = CARTESIAN_POINT('',(0.77497458949,0.634963209963,2.499999990103 + )); +#15708 = DIRECTION('',(6.982962677686E-15,-1.,-3.446306248323E-15)); +#15709 = DIRECTION('',(0.,3.446306248323E-15,-1.)); +#15710 = ADVANCED_FACE('',(#15711),#15717,.F.); +#15711 = FACE_BOUND('',#15712,.T.); +#15712 = EDGE_LOOP('',(#15713,#15714,#15715,#15716)); +#15713 = ORIENTED_EDGE('',*,*,#15166,.F.); +#15714 = ORIENTED_EDGE('',*,*,#14907,.F.); +#15715 = ORIENTED_EDGE('',*,*,#15137,.F.); +#15716 = ORIENTED_EDGE('',*,*,#14963,.F.); +#15717 = PLANE('',#15718); +#15718 = AXIS2_PLACEMENT_3D('',#15719,#15720,#15721); +#15719 = CARTESIAN_POINT('',(0.77497458949,-2.965036741454, + 1.150000008322)); +#15720 = DIRECTION('',(-6.982962677686E-15,1.,4.111025437406E-15)); +#15721 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15722 = ADVANCED_FACE('',(#15723),#15748,.F.); +#15723 = FACE_BOUND('',#15724,.T.); +#15724 = EDGE_LOOP('',(#15725,#15733,#15741,#15747)); +#15725 = ORIENTED_EDGE('',*,*,#15726,.T.); +#15726 = EDGE_CURVE('',#14916,#15727,#15729,.T.); +#15727 = VERTEX_POINT('',#15728); +#15728 = CARTESIAN_POINT('',(0.474974593539,-0.465036775192, + 1.849999998875)); +#15729 = LINE('',#15730,#15731); +#15730 = CARTESIAN_POINT('',(0.474974593539,-2.965036741454, + 1.849999998875)); +#15731 = VECTOR('',#15732,1.); +#15732 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#15733 = ORIENTED_EDGE('',*,*,#15734,.F.); +#15734 = EDGE_CURVE('',#15735,#15727,#15737,.T.); +#15735 = VERTEX_POINT('',#15736); +#15736 = CARTESIAN_POINT('',(0.474974593539,-0.465036775192, + 1.150000008322)); +#15737 = LINE('',#15738,#15739); +#15738 = CARTESIAN_POINT('',(0.474974593539,-0.465036775192, + 1.849999998875)); +#15739 = VECTOR('',#15740,1.); +#15740 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#15741 = ORIENTED_EDGE('',*,*,#15742,.F.); +#15742 = EDGE_CURVE('',#14898,#15735,#15743,.T.); +#15743 = LINE('',#15744,#15745); +#15744 = CARTESIAN_POINT('',(0.474974593539,-2.965036741454, + 1.150000008322)); +#15745 = VECTOR('',#15746,1.); +#15746 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#15747 = ORIENTED_EDGE('',*,*,#14923,.F.); +#15748 = PLANE('',#15749); +#15749 = AXIS2_PLACEMENT_3D('',#15750,#15751,#15752); +#15750 = CARTESIAN_POINT('',(0.474974593539,0.934963205914, + 1.849999998875)); +#15751 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15752 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#15753 = ADVANCED_FACE('',(#15754),#15779,.T.); +#15754 = FACE_BOUND('',#15755,.T.); +#15755 = EDGE_LOOP('',(#15756,#15764,#15772,#15778)); +#15756 = ORIENTED_EDGE('',*,*,#15757,.T.); +#15757 = EDGE_CURVE('',#14940,#15758,#15760,.T.); +#15758 = VERTEX_POINT('',#15759); +#15759 = CARTESIAN_POINT('',(0.77497458949,-0.465036775192, + 1.150000008322)); +#15760 = LINE('',#15761,#15762); +#15761 = CARTESIAN_POINT('',(0.77497458949,-2.965036741454, + 1.150000008322)); +#15762 = VECTOR('',#15763,1.); +#15763 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#15764 = ORIENTED_EDGE('',*,*,#15765,.T.); +#15765 = EDGE_CURVE('',#15758,#15766,#15768,.T.); +#15766 = VERTEX_POINT('',#15767); +#15767 = CARTESIAN_POINT('',(0.77497458949,-0.465036775192, + 1.849999998875)); +#15768 = LINE('',#15769,#15770); +#15769 = CARTESIAN_POINT('',(0.77497458949,-0.465036775192, + 1.849999998875)); +#15770 = VECTOR('',#15771,1.); +#15771 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#15772 = ORIENTED_EDGE('',*,*,#15773,.F.); +#15773 = EDGE_CURVE('',#14948,#15766,#15774,.T.); +#15774 = LINE('',#15775,#15776); +#15775 = CARTESIAN_POINT('',(0.77497458949,-2.965036741454, + 1.849999998875)); +#15776 = VECTOR('',#15777,1.); +#15777 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#15778 = ORIENTED_EDGE('',*,*,#14947,.F.); +#15779 = PLANE('',#15780); +#15780 = AXIS2_PLACEMENT_3D('',#15781,#15782,#15783); +#15781 = CARTESIAN_POINT('',(0.77497458949,0.934963205914,1.849999998875 + )); +#15782 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15783 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#15784 = ADVANCED_FACE('',(#15785),#15796,.T.); +#15785 = FACE_BOUND('',#15786,.T.); +#15786 = EDGE_LOOP('',(#15787,#15788,#15794,#15795)); +#15787 = ORIENTED_EDGE('',*,*,#15742,.T.); +#15788 = ORIENTED_EDGE('',*,*,#15789,.T.); +#15789 = EDGE_CURVE('',#15735,#15758,#15790,.T.); +#15790 = LINE('',#15791,#15792); +#15791 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.150000008322)); +#15792 = VECTOR('',#15793,1.); +#15793 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15794 = ORIENTED_EDGE('',*,*,#15757,.F.); +#15795 = ORIENTED_EDGE('',*,*,#15144,.F.); +#15796 = PLANE('',#15797); +#15797 = AXIS2_PLACEMENT_3D('',#15798,#15799,#15800); +#15798 = CARTESIAN_POINT('',(0.77497458949,-2.965036741454, + 1.150000008322)); +#15799 = DIRECTION('',(-2.313974563217E-29,3.31374327778E-15,-1.)); +#15800 = DIRECTION('',(-1.,0.,2.313974563217E-29)); +#15801 = ADVANCED_FACE('',(#15802),#15813,.F.); +#15802 = FACE_BOUND('',#15803,.T.); +#15803 = EDGE_LOOP('',(#15804,#15805,#15811,#15812)); +#15804 = ORIENTED_EDGE('',*,*,#15773,.T.); +#15805 = ORIENTED_EDGE('',*,*,#15806,.F.); +#15806 = EDGE_CURVE('',#15727,#15766,#15807,.T.); +#15807 = LINE('',#15808,#15809); +#15808 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.849999998875)); +#15809 = VECTOR('',#15810,1.); +#15810 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15811 = ORIENTED_EDGE('',*,*,#15726,.F.); +#15812 = ORIENTED_EDGE('',*,*,#15159,.F.); +#15813 = PLANE('',#15814); +#15814 = AXIS2_PLACEMENT_3D('',#15815,#15816,#15817); +#15815 = CARTESIAN_POINT('',(0.77497458949,-2.965036741454, + 1.849999998875)); +#15816 = DIRECTION('',(-2.309813444521E-29,3.307784318971E-15,-1.)); +#15817 = DIRECTION('',(-1.,0.,2.309813444521E-29)); +#15818 = ADVANCED_FACE('',(#15819),#15931,.T.); +#15819 = FACE_BOUND('',#15820,.T.); +#15820 = EDGE_LOOP('',(#15821,#15832,#15840,#15849,#15857,#15866,#15874, + #15883,#15891,#15900,#15908,#15917,#15925)); +#15821 = ORIENTED_EDGE('',*,*,#15822,.F.); +#15822 = EDGE_CURVE('',#15823,#15825,#15827,.T.); +#15823 = VERTEX_POINT('',#15824); +#15824 = CARTESIAN_POINT('',(1.72497457667,0.734963208613,2.599999988754 + )); +#15825 = VERTEX_POINT('',#15826); +#15826 = CARTESIAN_POINT('',(1.72497457667,0.634963209963,2.499999990103 + )); +#15827 = CIRCLE('',#15828,9.999999865046E-02); +#15828 = AXIS2_PLACEMENT_3D('',#15829,#15830,#15831); +#15829 = CARTESIAN_POINT('',(1.72497457667,0.734963208613,2.499999990103 + )); +#15830 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15831 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15832 = ORIENTED_EDGE('',*,*,#15833,.F.); +#15833 = EDGE_CURVE('',#15834,#15823,#15836,.T.); +#15834 = VERTEX_POINT('',#15835); +#15835 = CARTESIAN_POINT('',(1.72497457667,1.034963204565,2.599999988754 + )); +#15836 = LINE('',#15837,#15838); +#15837 = CARTESIAN_POINT('',(1.72497457667,1.034963204565,2.599999988754 + )); +#15838 = VECTOR('',#15839,1.); +#15839 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#15840 = ORIENTED_EDGE('',*,*,#15841,.T.); +#15841 = EDGE_CURVE('',#15834,#15842,#15844,.T.); +#15842 = VERTEX_POINT('',#15843); +#15843 = CARTESIAN_POINT('',(1.72497457667,1.134963203215,2.499999990103 + )); +#15844 = CIRCLE('',#15845,9.999999865046E-02); +#15845 = AXIS2_PLACEMENT_3D('',#15846,#15847,#15848); +#15846 = CARTESIAN_POINT('',(1.72497457667,1.034963204565,2.499999990103 + )); +#15847 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15848 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#15849 = ORIENTED_EDGE('',*,*,#15850,.F.); +#15850 = EDGE_CURVE('',#15851,#15842,#15853,.T.); +#15851 = VERTEX_POINT('',#15852); +#15852 = CARTESIAN_POINT('',(1.72497457667,1.134963203215,0.94102984344) + ); +#15853 = LINE('',#15854,#15855); +#15854 = CARTESIAN_POINT('',(1.72497457667,1.134963203215,0.94102984344) + ); +#15855 = VECTOR('',#15856,1.); +#15856 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#15857 = ORIENTED_EDGE('',*,*,#15858,.F.); +#15858 = EDGE_CURVE('',#15859,#15851,#15861,.T.); +#15859 = VERTEX_POINT('',#15860); +#15860 = CARTESIAN_POINT('',(1.72497457667,1.283199392194,0.747844680789 + )); +#15861 = CIRCLE('',#15862,0.199999997301); +#15862 = AXIS2_PLACEMENT_3D('',#15863,#15864,#15865); +#15863 = CARTESIAN_POINT('',(1.72497457667,1.334963200516,0.94102984344) + ); +#15864 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#15865 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#15866 = ORIENTED_EDGE('',*,*,#15867,.F.); +#15867 = EDGE_CURVE('',#15868,#15859,#15870,.T.); +#15868 = VERTEX_POINT('',#15869); +#15869 = CARTESIAN_POINT('',(1.72497457667,1.686727004789,0.639719782871 + )); +#15870 = LINE('',#15871,#15872); +#15871 = CARTESIAN_POINT('',(1.72497457667,1.686727004789,0.639719782871 + )); +#15872 = VECTOR('',#15873,1.); +#15873 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#15874 = ORIENTED_EDGE('',*,*,#15875,.F.); +#15875 = EDGE_CURVE('',#15876,#15868,#15878,.T.); +#15876 = VERTEX_POINT('',#15877); +#15877 = CARTESIAN_POINT('',(1.72497457667,1.834963193768,0.44653462022) + ); +#15878 = CIRCLE('',#15879,0.199999997301); +#15879 = AXIS2_PLACEMENT_3D('',#15880,#15881,#15882); +#15880 = CARTESIAN_POINT('',(1.72497457667,1.634963196467,0.44653462022) + ); +#15881 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#15882 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15883 = ORIENTED_EDGE('',*,*,#15884,.F.); +#15884 = EDGE_CURVE('',#15885,#15876,#15887,.T.); +#15885 = VERTEX_POINT('',#15886); +#15886 = CARTESIAN_POINT('',(1.72497457667,1.834963193768,0.200000021143 + )); +#15887 = LINE('',#15888,#15889); +#15888 = CARTESIAN_POINT('',(1.72497457667,1.834963193768,0.200000021143 + )); +#15889 = VECTOR('',#15890,1.); +#15890 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#15891 = ORIENTED_EDGE('',*,*,#15892,.F.); +#15892 = EDGE_CURVE('',#15893,#15885,#15895,.T.); +#15893 = VERTEX_POINT('',#15894); +#15894 = CARTESIAN_POINT('',(1.72497457667,1.634963196467, + 2.384185937565E-08)); +#15895 = CIRCLE('',#15896,0.199999997301); +#15896 = AXIS2_PLACEMENT_3D('',#15897,#15898,#15899); +#15897 = CARTESIAN_POINT('',(1.72497457667,1.634963196467,0.200000021143 + )); +#15898 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#15899 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15900 = ORIENTED_EDGE('',*,*,#15901,.F.); +#15901 = EDGE_CURVE('',#15902,#15893,#15904,.T.); +#15902 = VERTEX_POINT('',#15903); +#15903 = CARTESIAN_POINT('',(1.72497457667,0.734963208613, + 2.384185626703E-08)); +#15904 = LINE('',#15905,#15906); +#15905 = CARTESIAN_POINT('',(1.72497457667,0.734963208613, + 2.384185626703E-08)); +#15906 = VECTOR('',#15907,1.); +#15907 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#15908 = ORIENTED_EDGE('',*,*,#15909,.F.); +#15909 = EDGE_CURVE('',#15910,#15902,#15912,.T.); +#15910 = VERTEX_POINT('',#15911); +#15911 = CARTESIAN_POINT('',(1.72497457667,0.634963209963,0.100000022492 + )); +#15912 = CIRCLE('',#15913,9.999999865046E-02); +#15913 = AXIS2_PLACEMENT_3D('',#15914,#15915,#15916); +#15914 = CARTESIAN_POINT('',(1.72497457667,0.734963208613,0.100000022492 + )); +#15915 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15916 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15917 = ORIENTED_EDGE('',*,*,#15918,.F.); +#15918 = EDGE_CURVE('',#15919,#15910,#15921,.T.); +#15919 = VERTEX_POINT('',#15920); +#15920 = CARTESIAN_POINT('',(1.72497457667,0.634963209963,0.350000019118 + )); +#15921 = LINE('',#15922,#15923); +#15922 = CARTESIAN_POINT('',(1.72497457667,0.634963209963,2.499999990103 + )); +#15923 = VECTOR('',#15924,1.); +#15924 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#15925 = ORIENTED_EDGE('',*,*,#15926,.F.); +#15926 = EDGE_CURVE('',#15825,#15919,#15927,.T.); +#15927 = LINE('',#15928,#15929); +#15928 = CARTESIAN_POINT('',(1.72497457667,0.634963209963,2.499999990103 + )); +#15929 = VECTOR('',#15930,1.); +#15930 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#15931 = PLANE('',#15932); +#15932 = AXIS2_PLACEMENT_3D('',#15933,#15934,#15935); +#15933 = CARTESIAN_POINT('',(1.72497457667,0.734963208613,2.499999990103 + )); +#15934 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#15935 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#15936 = ADVANCED_FACE('',(#15937),#16049,.F.); +#15937 = FACE_BOUND('',#15938,.T.); +#15938 = EDGE_LOOP('',(#15939,#15950,#15958,#15966,#15975,#15983,#15992, + #16000,#16009,#16017,#16026,#16034,#16043)); +#15939 = ORIENTED_EDGE('',*,*,#15940,.T.); +#15940 = EDGE_CURVE('',#15941,#15943,#15945,.T.); +#15941 = VERTEX_POINT('',#15942); +#15942 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 2.599999988754)); +#15943 = VERTEX_POINT('',#15944); +#15944 = CARTESIAN_POINT('',(2.024974572621,0.634963209963, + 2.499999990103)); +#15945 = CIRCLE('',#15946,9.999999865046E-02); +#15946 = AXIS2_PLACEMENT_3D('',#15947,#15948,#15949); +#15947 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 2.499999990103)); +#15948 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15949 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15950 = ORIENTED_EDGE('',*,*,#15951,.T.); +#15951 = EDGE_CURVE('',#15943,#15952,#15954,.T.); +#15952 = VERTEX_POINT('',#15953); +#15953 = CARTESIAN_POINT('',(2.024974572621,0.634963209963, + 0.350000019118)); +#15954 = LINE('',#15955,#15956); +#15955 = CARTESIAN_POINT('',(2.024974572621,0.634963209963, + 2.499999990103)); +#15956 = VECTOR('',#15957,1.); +#15957 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#15958 = ORIENTED_EDGE('',*,*,#15959,.T.); +#15959 = EDGE_CURVE('',#15952,#15960,#15962,.T.); +#15960 = VERTEX_POINT('',#15961); +#15961 = CARTESIAN_POINT('',(2.024974572621,0.634963209963, + 0.100000022492)); +#15962 = LINE('',#15963,#15964); +#15963 = CARTESIAN_POINT('',(2.024974572621,0.634963209963, + 2.499999990103)); +#15964 = VECTOR('',#15965,1.); +#15965 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#15966 = ORIENTED_EDGE('',*,*,#15967,.T.); +#15967 = EDGE_CURVE('',#15960,#15968,#15970,.T.); +#15968 = VERTEX_POINT('',#15969); +#15969 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 2.384185626703E-08)); +#15970 = CIRCLE('',#15971,9.999999865046E-02); +#15971 = AXIS2_PLACEMENT_3D('',#15972,#15973,#15974); +#15972 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 0.100000022492)); +#15973 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#15974 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#15975 = ORIENTED_EDGE('',*,*,#15976,.T.); +#15976 = EDGE_CURVE('',#15968,#15977,#15979,.T.); +#15977 = VERTEX_POINT('',#15978); +#15978 = CARTESIAN_POINT('',(2.024974572621,1.634963196467, + 2.384185937565E-08)); +#15979 = LINE('',#15980,#15981); +#15980 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 2.384185626703E-08)); +#15981 = VECTOR('',#15982,1.); +#15982 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#15983 = ORIENTED_EDGE('',*,*,#15984,.T.); +#15984 = EDGE_CURVE('',#15977,#15985,#15987,.T.); +#15985 = VERTEX_POINT('',#15986); +#15986 = CARTESIAN_POINT('',(2.024974572621,1.834963193768, + 0.200000021143)); +#15987 = CIRCLE('',#15988,0.199999997301); +#15988 = AXIS2_PLACEMENT_3D('',#15989,#15990,#15991); +#15989 = CARTESIAN_POINT('',(2.024974572621,1.634963196467, + 0.200000021143)); +#15990 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#15991 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#15992 = ORIENTED_EDGE('',*,*,#15993,.T.); +#15993 = EDGE_CURVE('',#15985,#15994,#15996,.T.); +#15994 = VERTEX_POINT('',#15995); +#15995 = CARTESIAN_POINT('',(2.024974572621,1.834963193768,0.44653462022 + )); +#15996 = LINE('',#15997,#15998); +#15997 = CARTESIAN_POINT('',(2.024974572621,1.834963193768, + 0.200000021143)); +#15998 = VECTOR('',#15999,1.); +#15999 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#16000 = ORIENTED_EDGE('',*,*,#16001,.T.); +#16001 = EDGE_CURVE('',#15994,#16002,#16004,.T.); +#16002 = VERTEX_POINT('',#16003); +#16003 = CARTESIAN_POINT('',(2.024974572621,1.686727004789, + 0.639719782871)); +#16004 = CIRCLE('',#16005,0.199999997301); +#16005 = AXIS2_PLACEMENT_3D('',#16006,#16007,#16008); +#16006 = CARTESIAN_POINT('',(2.024974572621,1.634963196467,0.44653462022 + )); +#16007 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#16008 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16009 = ORIENTED_EDGE('',*,*,#16010,.T.); +#16010 = EDGE_CURVE('',#16002,#16011,#16013,.T.); +#16011 = VERTEX_POINT('',#16012); +#16012 = CARTESIAN_POINT('',(2.024974572621,1.283199392194, + 0.747844680789)); +#16013 = LINE('',#16014,#16015); +#16014 = CARTESIAN_POINT('',(2.024974572621,1.686727004789, + 0.639719782871)); +#16015 = VECTOR('',#16016,1.); +#16016 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#16017 = ORIENTED_EDGE('',*,*,#16018,.T.); +#16018 = EDGE_CURVE('',#16011,#16019,#16021,.T.); +#16019 = VERTEX_POINT('',#16020); +#16020 = CARTESIAN_POINT('',(2.024974572621,1.134963203215,0.94102984344 + )); +#16021 = CIRCLE('',#16022,0.199999997301); +#16022 = AXIS2_PLACEMENT_3D('',#16023,#16024,#16025); +#16023 = CARTESIAN_POINT('',(2.024974572621,1.334963200516,0.94102984344 + )); +#16024 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#16025 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#16026 = ORIENTED_EDGE('',*,*,#16027,.T.); +#16027 = EDGE_CURVE('',#16019,#16028,#16030,.T.); +#16028 = VERTEX_POINT('',#16029); +#16029 = CARTESIAN_POINT('',(2.024974572621,1.134963203215, + 2.499999990103)); +#16030 = LINE('',#16031,#16032); +#16031 = CARTESIAN_POINT('',(2.024974572621,1.134963203215,0.94102984344 + )); +#16032 = VECTOR('',#16033,1.); +#16033 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#16034 = ORIENTED_EDGE('',*,*,#16035,.F.); +#16035 = EDGE_CURVE('',#16036,#16028,#16038,.T.); +#16036 = VERTEX_POINT('',#16037); +#16037 = CARTESIAN_POINT('',(2.024974572621,1.034963204565, + 2.599999988754)); +#16038 = CIRCLE('',#16039,9.999999865046E-02); +#16039 = AXIS2_PLACEMENT_3D('',#16040,#16041,#16042); +#16040 = CARTESIAN_POINT('',(2.024974572621,1.034963204565, + 2.499999990103)); +#16041 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16042 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#16043 = ORIENTED_EDGE('',*,*,#16044,.T.); +#16044 = EDGE_CURVE('',#16036,#15941,#16045,.T.); +#16045 = LINE('',#16046,#16047); +#16046 = CARTESIAN_POINT('',(2.024974572621,1.034963204565, + 2.599999988754)); +#16047 = VECTOR('',#16048,1.); +#16048 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#16049 = PLANE('',#16050); +#16050 = AXIS2_PLACEMENT_3D('',#16051,#16052,#16053); +#16051 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 2.499999990103)); +#16052 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16053 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#16054 = ADVANCED_FACE('',(#16055),#16071,.T.); +#16055 = FACE_BOUND('',#16056,.T.); +#16056 = EDGE_LOOP('',(#16057,#16058,#16064,#16065)); +#16057 = ORIENTED_EDGE('',*,*,#15909,.T.); +#16058 = ORIENTED_EDGE('',*,*,#16059,.F.); +#16059 = EDGE_CURVE('',#15968,#15902,#16060,.T.); +#16060 = LINE('',#16061,#16062); +#16061 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 2.384185626703E-08)); +#16062 = VECTOR('',#16063,1.); +#16063 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16064 = ORIENTED_EDGE('',*,*,#15967,.F.); +#16065 = ORIENTED_EDGE('',*,*,#16066,.T.); +#16066 = EDGE_CURVE('',#15960,#15910,#16067,.T.); +#16067 = LINE('',#16068,#16069); +#16068 = CARTESIAN_POINT('',(2.024974572621,0.634963209963, + 0.100000022492)); +#16069 = VECTOR('',#16070,1.); +#16070 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16071 = CYLINDRICAL_SURFACE('',#16072,9.999999865046E-02); +#16072 = AXIS2_PLACEMENT_3D('',#16073,#16074,#16075); +#16073 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 0.100000022492)); +#16074 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16075 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16076 = ADVANCED_FACE('',(#16077),#16088,.T.); +#16077 = FACE_BOUND('',#16078,.T.); +#16078 = EDGE_LOOP('',(#16079,#16080,#16086,#16087)); +#16079 = ORIENTED_EDGE('',*,*,#15901,.T.); +#16080 = ORIENTED_EDGE('',*,*,#16081,.F.); +#16081 = EDGE_CURVE('',#15977,#15893,#16082,.T.); +#16082 = LINE('',#16083,#16084); +#16083 = CARTESIAN_POINT('',(2.024974572621,1.634963196467, + 2.384185937565E-08)); +#16084 = VECTOR('',#16085,1.); +#16085 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16086 = ORIENTED_EDGE('',*,*,#15976,.F.); +#16087 = ORIENTED_EDGE('',*,*,#16059,.T.); +#16088 = PLANE('',#16089); +#16089 = AXIS2_PLACEMENT_3D('',#16090,#16091,#16092); +#16090 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 2.384185626703E-08)); +#16091 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#16092 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#16093 = ADVANCED_FACE('',(#16094),#16105,.T.); +#16094 = FACE_BOUND('',#16095,.T.); +#16095 = EDGE_LOOP('',(#16096,#16097,#16103,#16104)); +#16096 = ORIENTED_EDGE('',*,*,#15892,.T.); +#16097 = ORIENTED_EDGE('',*,*,#16098,.F.); +#16098 = EDGE_CURVE('',#15985,#15885,#16099,.T.); +#16099 = LINE('',#16100,#16101); +#16100 = CARTESIAN_POINT('',(2.024974572621,1.834963193768, + 0.200000021143)); +#16101 = VECTOR('',#16102,1.); +#16102 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16103 = ORIENTED_EDGE('',*,*,#15984,.F.); +#16104 = ORIENTED_EDGE('',*,*,#16081,.T.); +#16105 = CYLINDRICAL_SURFACE('',#16106,0.199999997301); +#16106 = AXIS2_PLACEMENT_3D('',#16107,#16108,#16109); +#16107 = CARTESIAN_POINT('',(2.024974572621,1.634963196467, + 0.200000021143)); +#16108 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#16109 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16110 = ADVANCED_FACE('',(#16111),#16122,.T.); +#16111 = FACE_BOUND('',#16112,.T.); +#16112 = EDGE_LOOP('',(#16113,#16114,#16120,#16121)); +#16113 = ORIENTED_EDGE('',*,*,#15884,.T.); +#16114 = ORIENTED_EDGE('',*,*,#16115,.F.); +#16115 = EDGE_CURVE('',#15994,#15876,#16116,.T.); +#16116 = LINE('',#16117,#16118); +#16117 = CARTESIAN_POINT('',(2.024974572621,1.834963193768,0.44653462022 + )); +#16118 = VECTOR('',#16119,1.); +#16119 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16120 = ORIENTED_EDGE('',*,*,#15993,.F.); +#16121 = ORIENTED_EDGE('',*,*,#16098,.T.); +#16122 = PLANE('',#16123); +#16123 = AXIS2_PLACEMENT_3D('',#16124,#16125,#16126); +#16124 = CARTESIAN_POINT('',(2.024974572621,1.834963193768, + 0.200000021143)); +#16125 = DIRECTION('',(-6.982962677686E-15,1.,3.931258214751E-15)); +#16126 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16127 = ADVANCED_FACE('',(#16128),#16139,.T.); +#16128 = FACE_BOUND('',#16129,.T.); +#16129 = EDGE_LOOP('',(#16130,#16131,#16137,#16138)); +#16130 = ORIENTED_EDGE('',*,*,#15875,.T.); +#16131 = ORIENTED_EDGE('',*,*,#16132,.F.); +#16132 = EDGE_CURVE('',#16002,#15868,#16133,.T.); +#16133 = LINE('',#16134,#16135); +#16134 = CARTESIAN_POINT('',(2.024974572621,1.686727004789, + 0.639719782871)); +#16135 = VECTOR('',#16136,1.); +#16136 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16137 = ORIENTED_EDGE('',*,*,#16001,.F.); +#16138 = ORIENTED_EDGE('',*,*,#16115,.T.); +#16139 = CYLINDRICAL_SURFACE('',#16140,0.199999997301); +#16140 = AXIS2_PLACEMENT_3D('',#16141,#16142,#16143); +#16141 = CARTESIAN_POINT('',(2.024974572621,1.634963196467,0.44653462022 + )); +#16142 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#16143 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16144 = ADVANCED_FACE('',(#16145),#16156,.T.); +#16145 = FACE_BOUND('',#16146,.T.); +#16146 = EDGE_LOOP('',(#16147,#16148,#16154,#16155)); +#16147 = ORIENTED_EDGE('',*,*,#15867,.T.); +#16148 = ORIENTED_EDGE('',*,*,#16149,.F.); +#16149 = EDGE_CURVE('',#16011,#15859,#16150,.T.); +#16150 = LINE('',#16151,#16152); +#16151 = CARTESIAN_POINT('',(2.024974572621,1.283199392194, + 0.747844680789)); +#16152 = VECTOR('',#16153,1.); +#16153 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16154 = ORIENTED_EDGE('',*,*,#16010,.F.); +#16155 = ORIENTED_EDGE('',*,*,#16132,.T.); +#16156 = PLANE('',#16157); +#16157 = AXIS2_PLACEMENT_3D('',#16158,#16159,#16160); +#16158 = CARTESIAN_POINT('',(2.024974572621,1.686727004789, + 0.639719782871)); +#16159 = DIRECTION('',(-1.807323732225E-15,0.258819045103,0.965925826289 + )); +#16160 = DIRECTION('',(1.,6.982962677672E-15,1.972152263053E-31)); +#16161 = ADVANCED_FACE('',(#16162),#16173,.F.); +#16162 = FACE_BOUND('',#16163,.F.); +#16163 = EDGE_LOOP('',(#16164,#16165,#16166,#16172)); +#16164 = ORIENTED_EDGE('',*,*,#16149,.F.); +#16165 = ORIENTED_EDGE('',*,*,#16018,.T.); +#16166 = ORIENTED_EDGE('',*,*,#16167,.T.); +#16167 = EDGE_CURVE('',#16019,#15851,#16168,.T.); +#16168 = LINE('',#16169,#16170); +#16169 = CARTESIAN_POINT('',(2.024974572621,1.134963203215,0.94102984344 + )); +#16170 = VECTOR('',#16171,1.); +#16171 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16172 = ORIENTED_EDGE('',*,*,#15858,.F.); +#16173 = CYLINDRICAL_SURFACE('',#16174,0.199999997301); +#16174 = AXIS2_PLACEMENT_3D('',#16175,#16176,#16177); +#16175 = CARTESIAN_POINT('',(2.024974572621,1.334963200516,0.94102984344 + )); +#16176 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#16177 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16178 = ADVANCED_FACE('',(#16179),#16190,.T.); +#16179 = FACE_BOUND('',#16180,.T.); +#16180 = EDGE_LOOP('',(#16181,#16182,#16188,#16189)); +#16181 = ORIENTED_EDGE('',*,*,#15850,.T.); +#16182 = ORIENTED_EDGE('',*,*,#16183,.F.); +#16183 = EDGE_CURVE('',#16028,#15842,#16184,.T.); +#16184 = LINE('',#16185,#16186); +#16185 = CARTESIAN_POINT('',(2.024974572621,1.134963203215, + 2.499999990103)); +#16186 = VECTOR('',#16187,1.); +#16187 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16188 = ORIENTED_EDGE('',*,*,#16027,.F.); +#16189 = ORIENTED_EDGE('',*,*,#16167,.T.); +#16190 = PLANE('',#16191); +#16191 = AXIS2_PLACEMENT_3D('',#16192,#16193,#16194); +#16192 = CARTESIAN_POINT('',(2.024974572621,1.134963203215,0.94102984344 + )); +#16193 = DIRECTION('',(-6.982962677686E-15,1.,3.387162263827E-15)); +#16194 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16195 = ADVANCED_FACE('',(#16196),#16207,.T.); +#16196 = FACE_BOUND('',#16197,.T.); +#16197 = EDGE_LOOP('',(#16198,#16199,#16205,#16206)); +#16198 = ORIENTED_EDGE('',*,*,#15841,.F.); +#16199 = ORIENTED_EDGE('',*,*,#16200,.F.); +#16200 = EDGE_CURVE('',#16036,#15834,#16201,.T.); +#16201 = LINE('',#16202,#16203); +#16202 = CARTESIAN_POINT('',(2.024974572621,1.034963204565, + 2.599999988754)); +#16203 = VECTOR('',#16204,1.); +#16204 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16205 = ORIENTED_EDGE('',*,*,#16035,.T.); +#16206 = ORIENTED_EDGE('',*,*,#16183,.T.); +#16207 = CYLINDRICAL_SURFACE('',#16208,9.999999865046E-02); +#16208 = AXIS2_PLACEMENT_3D('',#16209,#16210,#16211); +#16209 = CARTESIAN_POINT('',(2.024974572621,1.034963204565, + 2.499999990103)); +#16210 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16211 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16212 = ADVANCED_FACE('',(#16213),#16224,.T.); +#16213 = FACE_BOUND('',#16214,.T.); +#16214 = EDGE_LOOP('',(#16215,#16216,#16222,#16223)); +#16215 = ORIENTED_EDGE('',*,*,#15833,.T.); +#16216 = ORIENTED_EDGE('',*,*,#16217,.F.); +#16217 = EDGE_CURVE('',#15941,#15823,#16218,.T.); +#16218 = LINE('',#16219,#16220); +#16219 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 2.599999988754)); +#16220 = VECTOR('',#16221,1.); +#16221 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16222 = ORIENTED_EDGE('',*,*,#16044,.F.); +#16223 = ORIENTED_EDGE('',*,*,#16200,.T.); +#16224 = PLANE('',#16225); +#16225 = AXIS2_PLACEMENT_3D('',#16226,#16227,#16228); +#16226 = CARTESIAN_POINT('',(2.024974572621,1.034963204565, + 2.599999988754)); +#16227 = DIRECTION('',(2.185723611047E-29,-3.130080614681E-15,1.)); +#16228 = DIRECTION('',(0.,-1.,-3.130080614681E-15)); +#16229 = ADVANCED_FACE('',(#16230),#16241,.T.); +#16230 = FACE_BOUND('',#16231,.T.); +#16231 = EDGE_LOOP('',(#16232,#16233,#16239,#16240)); +#16232 = ORIENTED_EDGE('',*,*,#15822,.T.); +#16233 = ORIENTED_EDGE('',*,*,#16234,.F.); +#16234 = EDGE_CURVE('',#15943,#15825,#16235,.T.); +#16235 = LINE('',#16236,#16237); +#16236 = CARTESIAN_POINT('',(2.024974572621,0.634963209963, + 2.499999990103)); +#16237 = VECTOR('',#16238,1.); +#16238 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16239 = ORIENTED_EDGE('',*,*,#15940,.F.); +#16240 = ORIENTED_EDGE('',*,*,#16217,.T.); +#16241 = CYLINDRICAL_SURFACE('',#16242,9.999999865046E-02); +#16242 = AXIS2_PLACEMENT_3D('',#16243,#16244,#16245); +#16243 = CARTESIAN_POINT('',(2.024974572621,0.734963208613, + 2.499999990103)); +#16244 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16245 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16246 = ADVANCED_FACE('',(#16247),#16258,.T.); +#16247 = FACE_BOUND('',#16248,.T.); +#16248 = EDGE_LOOP('',(#16249,#16255,#16256,#16257)); +#16249 = ORIENTED_EDGE('',*,*,#16250,.T.); +#16250 = EDGE_CURVE('',#15952,#15919,#16251,.T.); +#16251 = LINE('',#16252,#16253); +#16252 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#16253 = VECTOR('',#16254,1.); +#16254 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16255 = ORIENTED_EDGE('',*,*,#15918,.T.); +#16256 = ORIENTED_EDGE('',*,*,#16066,.F.); +#16257 = ORIENTED_EDGE('',*,*,#15959,.F.); +#16258 = PLANE('',#16259); +#16259 = AXIS2_PLACEMENT_3D('',#16260,#16261,#16262); +#16260 = CARTESIAN_POINT('',(2.024974572621,0.634963209963, + 2.499999990103)); +#16261 = DIRECTION('',(6.982962677686E-15,-1.,-3.446306248323E-15)); +#16262 = DIRECTION('',(0.,3.446306248323E-15,-1.)); +#16263 = ADVANCED_FACE('',(#16264),#16270,.F.); +#16264 = FACE_BOUND('',#16265,.T.); +#16265 = EDGE_LOOP('',(#16266,#16267,#16268,#16269)); +#16266 = ORIENTED_EDGE('',*,*,#15210,.F.); +#16267 = ORIENTED_EDGE('',*,*,#14987,.F.); +#16268 = ORIENTED_EDGE('',*,*,#15181,.F.); +#16269 = ORIENTED_EDGE('',*,*,#15043,.F.); +#16270 = PLANE('',#16271); +#16271 = AXIS2_PLACEMENT_3D('',#16272,#16273,#16274); +#16272 = CARTESIAN_POINT('',(2.024974572621,-2.965036741454, + 1.150000008322)); +#16273 = DIRECTION('',(-6.982962677686E-15,1.,4.111025437406E-15)); +#16274 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16275 = ADVANCED_FACE('',(#16276),#16301,.F.); +#16276 = FACE_BOUND('',#16277,.T.); +#16277 = EDGE_LOOP('',(#16278,#16286,#16294,#16300)); +#16278 = ORIENTED_EDGE('',*,*,#16279,.T.); +#16279 = EDGE_CURVE('',#14996,#16280,#16282,.T.); +#16280 = VERTEX_POINT('',#16281); +#16281 = CARTESIAN_POINT('',(1.72497457667,-0.465036775192, + 1.849999998875)); +#16282 = LINE('',#16283,#16284); +#16283 = CARTESIAN_POINT('',(1.72497457667,-2.965036741454, + 1.849999998875)); +#16284 = VECTOR('',#16285,1.); +#16285 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#16286 = ORIENTED_EDGE('',*,*,#16287,.F.); +#16287 = EDGE_CURVE('',#16288,#16280,#16290,.T.); +#16288 = VERTEX_POINT('',#16289); +#16289 = CARTESIAN_POINT('',(1.72497457667,-0.465036775192, + 1.150000008322)); +#16290 = LINE('',#16291,#16292); +#16291 = CARTESIAN_POINT('',(1.72497457667,-0.465036775192, + 1.849999998875)); +#16292 = VECTOR('',#16293,1.); +#16293 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#16294 = ORIENTED_EDGE('',*,*,#16295,.F.); +#16295 = EDGE_CURVE('',#14978,#16288,#16296,.T.); +#16296 = LINE('',#16297,#16298); +#16297 = CARTESIAN_POINT('',(1.72497457667,-2.965036741454, + 1.150000008322)); +#16298 = VECTOR('',#16299,1.); +#16299 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#16300 = ORIENTED_EDGE('',*,*,#15003,.F.); +#16301 = PLANE('',#16302); +#16302 = AXIS2_PLACEMENT_3D('',#16303,#16304,#16305); +#16303 = CARTESIAN_POINT('',(1.72497457667,0.934963205914,1.849999998875 + )); +#16304 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16305 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#16306 = ADVANCED_FACE('',(#16307),#16332,.T.); +#16307 = FACE_BOUND('',#16308,.T.); +#16308 = EDGE_LOOP('',(#16309,#16317,#16325,#16331)); +#16309 = ORIENTED_EDGE('',*,*,#16310,.T.); +#16310 = EDGE_CURVE('',#15020,#16311,#16313,.T.); +#16311 = VERTEX_POINT('',#16312); +#16312 = CARTESIAN_POINT('',(2.024974572621,-0.465036775192, + 1.150000008322)); +#16313 = LINE('',#16314,#16315); +#16314 = CARTESIAN_POINT('',(2.024974572621,-2.965036741454, + 1.150000008322)); +#16315 = VECTOR('',#16316,1.); +#16316 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#16317 = ORIENTED_EDGE('',*,*,#16318,.T.); +#16318 = EDGE_CURVE('',#16311,#16319,#16321,.T.); +#16319 = VERTEX_POINT('',#16320); +#16320 = CARTESIAN_POINT('',(2.024974572621,-0.465036775192, + 1.849999998875)); +#16321 = LINE('',#16322,#16323); +#16322 = CARTESIAN_POINT('',(2.024974572621,-0.465036775192, + 1.849999998875)); +#16323 = VECTOR('',#16324,1.); +#16324 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#16325 = ORIENTED_EDGE('',*,*,#16326,.F.); +#16326 = EDGE_CURVE('',#15028,#16319,#16327,.T.); +#16327 = LINE('',#16328,#16329); +#16328 = CARTESIAN_POINT('',(2.024974572621,-2.965036741454, + 1.849999998875)); +#16329 = VECTOR('',#16330,1.); +#16330 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#16331 = ORIENTED_EDGE('',*,*,#15027,.F.); +#16332 = PLANE('',#16333); +#16333 = AXIS2_PLACEMENT_3D('',#16334,#16335,#16336); +#16334 = CARTESIAN_POINT('',(2.024974572621,0.934963205914, + 1.849999998875)); +#16335 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16336 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#16337 = ADVANCED_FACE('',(#16338),#16349,.T.); +#16338 = FACE_BOUND('',#16339,.T.); +#16339 = EDGE_LOOP('',(#16340,#16341,#16347,#16348)); +#16340 = ORIENTED_EDGE('',*,*,#16295,.T.); +#16341 = ORIENTED_EDGE('',*,*,#16342,.T.); +#16342 = EDGE_CURVE('',#16288,#16311,#16343,.T.); +#16343 = LINE('',#16344,#16345); +#16344 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.150000008322)); +#16345 = VECTOR('',#16346,1.); +#16346 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16347 = ORIENTED_EDGE('',*,*,#16310,.F.); +#16348 = ORIENTED_EDGE('',*,*,#15188,.F.); +#16349 = PLANE('',#16350); +#16350 = AXIS2_PLACEMENT_3D('',#16351,#16352,#16353); +#16351 = CARTESIAN_POINT('',(2.024974572621,-2.965036741454, + 1.150000008322)); +#16352 = DIRECTION('',(-2.313974563217E-29,3.31374327778E-15,-1.)); +#16353 = DIRECTION('',(-1.,0.,2.313974563217E-29)); +#16354 = ADVANCED_FACE('',(#16355),#16366,.F.); +#16355 = FACE_BOUND('',#16356,.T.); +#16356 = EDGE_LOOP('',(#16357,#16358,#16364,#16365)); +#16357 = ORIENTED_EDGE('',*,*,#16326,.T.); +#16358 = ORIENTED_EDGE('',*,*,#16359,.F.); +#16359 = EDGE_CURVE('',#16280,#16319,#16360,.T.); +#16360 = LINE('',#16361,#16362); +#16361 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.849999998875)); +#16362 = VECTOR('',#16363,1.); +#16363 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16364 = ORIENTED_EDGE('',*,*,#16279,.F.); +#16365 = ORIENTED_EDGE('',*,*,#15203,.F.); +#16366 = PLANE('',#16367); +#16367 = AXIS2_PLACEMENT_3D('',#16368,#16369,#16370); +#16368 = CARTESIAN_POINT('',(2.024974572621,-2.965036741454, + 1.849999998875)); +#16369 = DIRECTION('',(-2.309813444521E-29,3.307784318971E-15,-1.)); +#16370 = DIRECTION('',(-1.,0.,2.309813444521E-29)); +#16371 = ADVANCED_FACE('',(#16372),#16484,.T.); +#16372 = FACE_BOUND('',#16373,.T.); +#16373 = EDGE_LOOP('',(#16374,#16385,#16393,#16402,#16410,#16419,#16427, + #16436,#16444,#16453,#16461,#16470,#16478)); +#16374 = ORIENTED_EDGE('',*,*,#16375,.F.); +#16375 = EDGE_CURVE('',#16376,#16378,#16380,.T.); +#16376 = VERTEX_POINT('',#16377); +#16377 = CARTESIAN_POINT('',(2.9749745598,0.734963208613,2.599999988754) + ); +#16378 = VERTEX_POINT('',#16379); +#16379 = CARTESIAN_POINT('',(2.9749745598,0.634963209963,2.499999990103) + ); +#16380 = CIRCLE('',#16381,9.999999865046E-02); +#16381 = AXIS2_PLACEMENT_3D('',#16382,#16383,#16384); +#16382 = CARTESIAN_POINT('',(2.9749745598,0.734963208613,2.499999990103) + ); +#16383 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16384 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16385 = ORIENTED_EDGE('',*,*,#16386,.F.); +#16386 = EDGE_CURVE('',#16387,#16376,#16389,.T.); +#16387 = VERTEX_POINT('',#16388); +#16388 = CARTESIAN_POINT('',(2.9749745598,1.034963204565,2.599999988754) + ); +#16389 = LINE('',#16390,#16391); +#16390 = CARTESIAN_POINT('',(2.9749745598,1.034963204565,2.599999988754) + ); +#16391 = VECTOR('',#16392,1.); +#16392 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#16393 = ORIENTED_EDGE('',*,*,#16394,.T.); +#16394 = EDGE_CURVE('',#16387,#16395,#16397,.T.); +#16395 = VERTEX_POINT('',#16396); +#16396 = CARTESIAN_POINT('',(2.9749745598,1.134963203215,2.499999990103) + ); +#16397 = CIRCLE('',#16398,9.999999865046E-02); +#16398 = AXIS2_PLACEMENT_3D('',#16399,#16400,#16401); +#16399 = CARTESIAN_POINT('',(2.9749745598,1.034963204565,2.499999990103) + ); +#16400 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16401 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#16402 = ORIENTED_EDGE('',*,*,#16403,.F.); +#16403 = EDGE_CURVE('',#16404,#16395,#16406,.T.); +#16404 = VERTEX_POINT('',#16405); +#16405 = CARTESIAN_POINT('',(2.9749745598,1.134963203215,0.94102984344) + ); +#16406 = LINE('',#16407,#16408); +#16407 = CARTESIAN_POINT('',(2.9749745598,1.134963203215,0.94102984344) + ); +#16408 = VECTOR('',#16409,1.); +#16409 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#16410 = ORIENTED_EDGE('',*,*,#16411,.F.); +#16411 = EDGE_CURVE('',#16412,#16404,#16414,.T.); +#16412 = VERTEX_POINT('',#16413); +#16413 = CARTESIAN_POINT('',(2.9749745598,1.283199392194,0.747844680789) + ); +#16414 = CIRCLE('',#16415,0.199999997301); +#16415 = AXIS2_PLACEMENT_3D('',#16416,#16417,#16418); +#16416 = CARTESIAN_POINT('',(2.9749745598,1.334963200516,0.94102984344) + ); +#16417 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#16418 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#16419 = ORIENTED_EDGE('',*,*,#16420,.F.); +#16420 = EDGE_CURVE('',#16421,#16412,#16423,.T.); +#16421 = VERTEX_POINT('',#16422); +#16422 = CARTESIAN_POINT('',(2.9749745598,1.686727004789,0.639719782871) + ); +#16423 = LINE('',#16424,#16425); +#16424 = CARTESIAN_POINT('',(2.9749745598,1.686727004789,0.639719782871) + ); +#16425 = VECTOR('',#16426,1.); +#16426 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#16427 = ORIENTED_EDGE('',*,*,#16428,.F.); +#16428 = EDGE_CURVE('',#16429,#16421,#16431,.T.); +#16429 = VERTEX_POINT('',#16430); +#16430 = CARTESIAN_POINT('',(2.9749745598,1.834963193768,0.44653462022) + ); +#16431 = CIRCLE('',#16432,0.199999997301); +#16432 = AXIS2_PLACEMENT_3D('',#16433,#16434,#16435); +#16433 = CARTESIAN_POINT('',(2.9749745598,1.634963196467,0.44653462022) + ); +#16434 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#16435 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16436 = ORIENTED_EDGE('',*,*,#16437,.F.); +#16437 = EDGE_CURVE('',#16438,#16429,#16440,.T.); +#16438 = VERTEX_POINT('',#16439); +#16439 = CARTESIAN_POINT('',(2.9749745598,1.834963193768,0.200000021143) + ); +#16440 = LINE('',#16441,#16442); +#16441 = CARTESIAN_POINT('',(2.9749745598,1.834963193768,0.200000021143) + ); +#16442 = VECTOR('',#16443,1.); +#16443 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#16444 = ORIENTED_EDGE('',*,*,#16445,.F.); +#16445 = EDGE_CURVE('',#16446,#16438,#16448,.T.); +#16446 = VERTEX_POINT('',#16447); +#16447 = CARTESIAN_POINT('',(2.9749745598,1.634963196467, + 2.384185937565E-08)); +#16448 = CIRCLE('',#16449,0.199999997301); +#16449 = AXIS2_PLACEMENT_3D('',#16450,#16451,#16452); +#16450 = CARTESIAN_POINT('',(2.9749745598,1.634963196467,0.200000021143) + ); +#16451 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#16452 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16453 = ORIENTED_EDGE('',*,*,#16454,.F.); +#16454 = EDGE_CURVE('',#16455,#16446,#16457,.T.); +#16455 = VERTEX_POINT('',#16456); +#16456 = CARTESIAN_POINT('',(2.9749745598,0.734963208613, + 2.384185626703E-08)); +#16457 = LINE('',#16458,#16459); +#16458 = CARTESIAN_POINT('',(2.9749745598,0.734963208613, + 2.384185626703E-08)); +#16459 = VECTOR('',#16460,1.); +#16460 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#16461 = ORIENTED_EDGE('',*,*,#16462,.F.); +#16462 = EDGE_CURVE('',#16463,#16455,#16465,.T.); +#16463 = VERTEX_POINT('',#16464); +#16464 = CARTESIAN_POINT('',(2.9749745598,0.634963209963,0.100000022492) + ); +#16465 = CIRCLE('',#16466,9.999999865046E-02); +#16466 = AXIS2_PLACEMENT_3D('',#16467,#16468,#16469); +#16467 = CARTESIAN_POINT('',(2.9749745598,0.734963208613,0.100000022492) + ); +#16468 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16469 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16470 = ORIENTED_EDGE('',*,*,#16471,.F.); +#16471 = EDGE_CURVE('',#16472,#16463,#16474,.T.); +#16472 = VERTEX_POINT('',#16473); +#16473 = CARTESIAN_POINT('',(2.9749745598,0.634963209963,0.350000019118) + ); +#16474 = LINE('',#16475,#16476); +#16475 = CARTESIAN_POINT('',(2.9749745598,0.634963209963,2.499999990103) + ); +#16476 = VECTOR('',#16477,1.); +#16477 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#16478 = ORIENTED_EDGE('',*,*,#16479,.F.); +#16479 = EDGE_CURVE('',#16378,#16472,#16480,.T.); +#16480 = LINE('',#16481,#16482); +#16481 = CARTESIAN_POINT('',(2.9749745598,0.634963209963,2.499999990103) + ); +#16482 = VECTOR('',#16483,1.); +#16483 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#16484 = PLANE('',#16485); +#16485 = AXIS2_PLACEMENT_3D('',#16486,#16487,#16488); +#16486 = CARTESIAN_POINT('',(2.9749745598,0.734963208613,2.499999990103) + ); +#16487 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16488 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#16489 = ADVANCED_FACE('',(#16490),#16602,.F.); +#16490 = FACE_BOUND('',#16491,.T.); +#16491 = EDGE_LOOP('',(#16492,#16503,#16511,#16519,#16528,#16536,#16545, + #16553,#16562,#16570,#16579,#16587,#16596)); +#16492 = ORIENTED_EDGE('',*,*,#16493,.T.); +#16493 = EDGE_CURVE('',#16494,#16496,#16498,.T.); +#16494 = VERTEX_POINT('',#16495); +#16495 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 2.599999988754)); +#16496 = VERTEX_POINT('',#16497); +#16497 = CARTESIAN_POINT('',(3.274974555752,0.634963209963, + 2.499999990103)); +#16498 = CIRCLE('',#16499,9.999999865046E-02); +#16499 = AXIS2_PLACEMENT_3D('',#16500,#16501,#16502); +#16500 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 2.499999990103)); +#16501 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16502 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16503 = ORIENTED_EDGE('',*,*,#16504,.T.); +#16504 = EDGE_CURVE('',#16496,#16505,#16507,.T.); +#16505 = VERTEX_POINT('',#16506); +#16506 = CARTESIAN_POINT('',(3.274974555752,0.634963209963,0.75000001372 + )); +#16507 = LINE('',#16508,#16509); +#16508 = CARTESIAN_POINT('',(3.274974555752,0.634963209963, + 2.499999990103)); +#16509 = VECTOR('',#16510,1.); +#16510 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#16511 = ORIENTED_EDGE('',*,*,#16512,.T.); +#16512 = EDGE_CURVE('',#16505,#16513,#16515,.T.); +#16513 = VERTEX_POINT('',#16514); +#16514 = CARTESIAN_POINT('',(3.274974555752,0.634963209963, + 0.100000022492)); +#16515 = LINE('',#16516,#16517); +#16516 = CARTESIAN_POINT('',(3.274974555752,0.634963209963, + 2.499999990103)); +#16517 = VECTOR('',#16518,1.); +#16518 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#16519 = ORIENTED_EDGE('',*,*,#16520,.T.); +#16520 = EDGE_CURVE('',#16513,#16521,#16523,.T.); +#16521 = VERTEX_POINT('',#16522); +#16522 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 2.384185626703E-08)); +#16523 = CIRCLE('',#16524,9.999999865046E-02); +#16524 = AXIS2_PLACEMENT_3D('',#16525,#16526,#16527); +#16525 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 0.100000022492)); +#16526 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16527 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16528 = ORIENTED_EDGE('',*,*,#16529,.T.); +#16529 = EDGE_CURVE('',#16521,#16530,#16532,.T.); +#16530 = VERTEX_POINT('',#16531); +#16531 = CARTESIAN_POINT('',(3.274974555752,1.634963196467, + 2.384185937565E-08)); +#16532 = LINE('',#16533,#16534); +#16533 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 2.384185626703E-08)); +#16534 = VECTOR('',#16535,1.); +#16535 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#16536 = ORIENTED_EDGE('',*,*,#16537,.T.); +#16537 = EDGE_CURVE('',#16530,#16538,#16540,.T.); +#16538 = VERTEX_POINT('',#16539); +#16539 = CARTESIAN_POINT('',(3.274974555752,1.834963193768, + 0.200000021143)); +#16540 = CIRCLE('',#16541,0.199999997301); +#16541 = AXIS2_PLACEMENT_3D('',#16542,#16543,#16544); +#16542 = CARTESIAN_POINT('',(3.274974555752,1.634963196467, + 0.200000021143)); +#16543 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#16544 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16545 = ORIENTED_EDGE('',*,*,#16546,.T.); +#16546 = EDGE_CURVE('',#16538,#16547,#16549,.T.); +#16547 = VERTEX_POINT('',#16548); +#16548 = CARTESIAN_POINT('',(3.274974555752,1.834963193768,0.44653462022 + )); +#16549 = LINE('',#16550,#16551); +#16550 = CARTESIAN_POINT('',(3.274974555752,1.834963193768, + 0.200000021143)); +#16551 = VECTOR('',#16552,1.); +#16552 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#16553 = ORIENTED_EDGE('',*,*,#16554,.T.); +#16554 = EDGE_CURVE('',#16547,#16555,#16557,.T.); +#16555 = VERTEX_POINT('',#16556); +#16556 = CARTESIAN_POINT('',(3.274974555752,1.686727004789, + 0.639719782871)); +#16557 = CIRCLE('',#16558,0.199999997301); +#16558 = AXIS2_PLACEMENT_3D('',#16559,#16560,#16561); +#16559 = CARTESIAN_POINT('',(3.274974555752,1.634963196467,0.44653462022 + )); +#16560 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#16561 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16562 = ORIENTED_EDGE('',*,*,#16563,.T.); +#16563 = EDGE_CURVE('',#16555,#16564,#16566,.T.); +#16564 = VERTEX_POINT('',#16565); +#16565 = CARTESIAN_POINT('',(3.274974555752,1.283199392194, + 0.747844680789)); +#16566 = LINE('',#16567,#16568); +#16567 = CARTESIAN_POINT('',(3.274974555752,1.686727004789, + 0.639719782871)); +#16568 = VECTOR('',#16569,1.); +#16569 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#16570 = ORIENTED_EDGE('',*,*,#16571,.T.); +#16571 = EDGE_CURVE('',#16564,#16572,#16574,.T.); +#16572 = VERTEX_POINT('',#16573); +#16573 = CARTESIAN_POINT('',(3.274974555752,1.134963203215,0.94102984344 + )); +#16574 = CIRCLE('',#16575,0.199999997301); +#16575 = AXIS2_PLACEMENT_3D('',#16576,#16577,#16578); +#16576 = CARTESIAN_POINT('',(3.274974555752,1.334963200516,0.94102984344 + )); +#16577 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#16578 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#16579 = ORIENTED_EDGE('',*,*,#16580,.T.); +#16580 = EDGE_CURVE('',#16572,#16581,#16583,.T.); +#16581 = VERTEX_POINT('',#16582); +#16582 = CARTESIAN_POINT('',(3.274974555752,1.134963203215, + 2.499999990103)); +#16583 = LINE('',#16584,#16585); +#16584 = CARTESIAN_POINT('',(3.274974555752,1.134963203215,0.94102984344 + )); +#16585 = VECTOR('',#16586,1.); +#16586 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#16587 = ORIENTED_EDGE('',*,*,#16588,.F.); +#16588 = EDGE_CURVE('',#16589,#16581,#16591,.T.); +#16589 = VERTEX_POINT('',#16590); +#16590 = CARTESIAN_POINT('',(3.274974555752,1.034963204565, + 2.599999988754)); +#16591 = CIRCLE('',#16592,9.999999865046E-02); +#16592 = AXIS2_PLACEMENT_3D('',#16593,#16594,#16595); +#16593 = CARTESIAN_POINT('',(3.274974555752,1.034963204565, + 2.499999990103)); +#16594 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16595 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#16596 = ORIENTED_EDGE('',*,*,#16597,.T.); +#16597 = EDGE_CURVE('',#16589,#16494,#16598,.T.); +#16598 = LINE('',#16599,#16600); +#16599 = CARTESIAN_POINT('',(3.274974555752,1.034963204565, + 2.599999988754)); +#16600 = VECTOR('',#16601,1.); +#16601 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#16602 = PLANE('',#16603); +#16603 = AXIS2_PLACEMENT_3D('',#16604,#16605,#16606); +#16604 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 2.499999990103)); +#16605 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16606 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#16607 = ADVANCED_FACE('',(#16608),#16624,.T.); +#16608 = FACE_BOUND('',#16609,.T.); +#16609 = EDGE_LOOP('',(#16610,#16611,#16617,#16618)); +#16610 = ORIENTED_EDGE('',*,*,#16462,.T.); +#16611 = ORIENTED_EDGE('',*,*,#16612,.F.); +#16612 = EDGE_CURVE('',#16521,#16455,#16613,.T.); +#16613 = LINE('',#16614,#16615); +#16614 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 2.384185626703E-08)); +#16615 = VECTOR('',#16616,1.); +#16616 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16617 = ORIENTED_EDGE('',*,*,#16520,.F.); +#16618 = ORIENTED_EDGE('',*,*,#16619,.T.); +#16619 = EDGE_CURVE('',#16513,#16463,#16620,.T.); +#16620 = LINE('',#16621,#16622); +#16621 = CARTESIAN_POINT('',(3.274974555752,0.634963209963, + 0.100000022492)); +#16622 = VECTOR('',#16623,1.); +#16623 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16624 = CYLINDRICAL_SURFACE('',#16625,9.999999865046E-02); +#16625 = AXIS2_PLACEMENT_3D('',#16626,#16627,#16628); +#16626 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 0.100000022492)); +#16627 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16628 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16629 = ADVANCED_FACE('',(#16630),#16641,.T.); +#16630 = FACE_BOUND('',#16631,.T.); +#16631 = EDGE_LOOP('',(#16632,#16633,#16639,#16640)); +#16632 = ORIENTED_EDGE('',*,*,#16454,.T.); +#16633 = ORIENTED_EDGE('',*,*,#16634,.F.); +#16634 = EDGE_CURVE('',#16530,#16446,#16635,.T.); +#16635 = LINE('',#16636,#16637); +#16636 = CARTESIAN_POINT('',(3.274974555752,1.634963196467, + 2.384185937565E-08)); +#16637 = VECTOR('',#16638,1.); +#16638 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16639 = ORIENTED_EDGE('',*,*,#16529,.F.); +#16640 = ORIENTED_EDGE('',*,*,#16612,.T.); +#16641 = PLANE('',#16642); +#16642 = AXIS2_PLACEMENT_3D('',#16643,#16644,#16645); +#16643 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 2.384185626703E-08)); +#16644 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#16645 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#16646 = ADVANCED_FACE('',(#16647),#16658,.T.); +#16647 = FACE_BOUND('',#16648,.T.); +#16648 = EDGE_LOOP('',(#16649,#16650,#16656,#16657)); +#16649 = ORIENTED_EDGE('',*,*,#16445,.T.); +#16650 = ORIENTED_EDGE('',*,*,#16651,.F.); +#16651 = EDGE_CURVE('',#16538,#16438,#16652,.T.); +#16652 = LINE('',#16653,#16654); +#16653 = CARTESIAN_POINT('',(3.274974555752,1.834963193768, + 0.200000021143)); +#16654 = VECTOR('',#16655,1.); +#16655 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16656 = ORIENTED_EDGE('',*,*,#16537,.F.); +#16657 = ORIENTED_EDGE('',*,*,#16634,.T.); +#16658 = CYLINDRICAL_SURFACE('',#16659,0.199999997301); +#16659 = AXIS2_PLACEMENT_3D('',#16660,#16661,#16662); +#16660 = CARTESIAN_POINT('',(3.274974555752,1.634963196467, + 0.200000021143)); +#16661 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#16662 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16663 = ADVANCED_FACE('',(#16664),#16675,.T.); +#16664 = FACE_BOUND('',#16665,.T.); +#16665 = EDGE_LOOP('',(#16666,#16667,#16673,#16674)); +#16666 = ORIENTED_EDGE('',*,*,#16437,.T.); +#16667 = ORIENTED_EDGE('',*,*,#16668,.F.); +#16668 = EDGE_CURVE('',#16547,#16429,#16669,.T.); +#16669 = LINE('',#16670,#16671); +#16670 = CARTESIAN_POINT('',(3.274974555752,1.834963193768,0.44653462022 + )); +#16671 = VECTOR('',#16672,1.); +#16672 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16673 = ORIENTED_EDGE('',*,*,#16546,.F.); +#16674 = ORIENTED_EDGE('',*,*,#16651,.T.); +#16675 = PLANE('',#16676); +#16676 = AXIS2_PLACEMENT_3D('',#16677,#16678,#16679); +#16677 = CARTESIAN_POINT('',(3.274974555752,1.834963193768, + 0.200000021143)); +#16678 = DIRECTION('',(-6.982962677686E-15,1.,3.931258214751E-15)); +#16679 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16680 = ADVANCED_FACE('',(#16681),#16692,.T.); +#16681 = FACE_BOUND('',#16682,.T.); +#16682 = EDGE_LOOP('',(#16683,#16684,#16690,#16691)); +#16683 = ORIENTED_EDGE('',*,*,#16428,.T.); +#16684 = ORIENTED_EDGE('',*,*,#16685,.F.); +#16685 = EDGE_CURVE('',#16555,#16421,#16686,.T.); +#16686 = LINE('',#16687,#16688); +#16687 = CARTESIAN_POINT('',(3.274974555752,1.686727004789, + 0.639719782871)); +#16688 = VECTOR('',#16689,1.); +#16689 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16690 = ORIENTED_EDGE('',*,*,#16554,.F.); +#16691 = ORIENTED_EDGE('',*,*,#16668,.T.); +#16692 = CYLINDRICAL_SURFACE('',#16693,0.199999997301); +#16693 = AXIS2_PLACEMENT_3D('',#16694,#16695,#16696); +#16694 = CARTESIAN_POINT('',(3.274974555752,1.634963196467,0.44653462022 + )); +#16695 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#16696 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16697 = ADVANCED_FACE('',(#16698),#16709,.T.); +#16698 = FACE_BOUND('',#16699,.T.); +#16699 = EDGE_LOOP('',(#16700,#16701,#16707,#16708)); +#16700 = ORIENTED_EDGE('',*,*,#16420,.T.); +#16701 = ORIENTED_EDGE('',*,*,#16702,.F.); +#16702 = EDGE_CURVE('',#16564,#16412,#16703,.T.); +#16703 = LINE('',#16704,#16705); +#16704 = CARTESIAN_POINT('',(3.274974555752,1.283199392194, + 0.747844680789)); +#16705 = VECTOR('',#16706,1.); +#16706 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16707 = ORIENTED_EDGE('',*,*,#16563,.F.); +#16708 = ORIENTED_EDGE('',*,*,#16685,.T.); +#16709 = PLANE('',#16710); +#16710 = AXIS2_PLACEMENT_3D('',#16711,#16712,#16713); +#16711 = CARTESIAN_POINT('',(3.274974555752,1.686727004789, + 0.639719782871)); +#16712 = DIRECTION('',(-1.807323732225E-15,0.258819045103,0.965925826289 + )); +#16713 = DIRECTION('',(1.,6.982962677672E-15,1.972152263053E-31)); +#16714 = ADVANCED_FACE('',(#16715),#16726,.F.); +#16715 = FACE_BOUND('',#16716,.F.); +#16716 = EDGE_LOOP('',(#16717,#16718,#16719,#16725)); +#16717 = ORIENTED_EDGE('',*,*,#16702,.F.); +#16718 = ORIENTED_EDGE('',*,*,#16571,.T.); +#16719 = ORIENTED_EDGE('',*,*,#16720,.T.); +#16720 = EDGE_CURVE('',#16572,#16404,#16721,.T.); +#16721 = LINE('',#16722,#16723); +#16722 = CARTESIAN_POINT('',(3.274974555752,1.134963203215,0.94102984344 + )); +#16723 = VECTOR('',#16724,1.); +#16724 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16725 = ORIENTED_EDGE('',*,*,#16411,.F.); +#16726 = CYLINDRICAL_SURFACE('',#16727,0.199999997301); +#16727 = AXIS2_PLACEMENT_3D('',#16728,#16729,#16730); +#16728 = CARTESIAN_POINT('',(3.274974555752,1.334963200516,0.94102984344 + )); +#16729 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#16730 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#16731 = ADVANCED_FACE('',(#16732),#16743,.T.); +#16732 = FACE_BOUND('',#16733,.T.); +#16733 = EDGE_LOOP('',(#16734,#16735,#16741,#16742)); +#16734 = ORIENTED_EDGE('',*,*,#16403,.T.); +#16735 = ORIENTED_EDGE('',*,*,#16736,.F.); +#16736 = EDGE_CURVE('',#16581,#16395,#16737,.T.); +#16737 = LINE('',#16738,#16739); +#16738 = CARTESIAN_POINT('',(3.274974555752,1.134963203215, + 2.499999990103)); +#16739 = VECTOR('',#16740,1.); +#16740 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16741 = ORIENTED_EDGE('',*,*,#16580,.F.); +#16742 = ORIENTED_EDGE('',*,*,#16720,.T.); +#16743 = PLANE('',#16744); +#16744 = AXIS2_PLACEMENT_3D('',#16745,#16746,#16747); +#16745 = CARTESIAN_POINT('',(3.274974555752,1.134963203215,0.94102984344 + )); +#16746 = DIRECTION('',(-6.982962677686E-15,1.,3.387162263827E-15)); +#16747 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16748 = ADVANCED_FACE('',(#16749),#16760,.T.); +#16749 = FACE_BOUND('',#16750,.T.); +#16750 = EDGE_LOOP('',(#16751,#16752,#16758,#16759)); +#16751 = ORIENTED_EDGE('',*,*,#16394,.F.); +#16752 = ORIENTED_EDGE('',*,*,#16753,.F.); +#16753 = EDGE_CURVE('',#16589,#16387,#16754,.T.); +#16754 = LINE('',#16755,#16756); +#16755 = CARTESIAN_POINT('',(3.274974555752,1.034963204565, + 2.599999988754)); +#16756 = VECTOR('',#16757,1.); +#16757 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16758 = ORIENTED_EDGE('',*,*,#16588,.T.); +#16759 = ORIENTED_EDGE('',*,*,#16736,.T.); +#16760 = CYLINDRICAL_SURFACE('',#16761,9.999999865046E-02); +#16761 = AXIS2_PLACEMENT_3D('',#16762,#16763,#16764); +#16762 = CARTESIAN_POINT('',(3.274974555752,1.034963204565, + 2.499999990103)); +#16763 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16764 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16765 = ADVANCED_FACE('',(#16766),#16777,.T.); +#16766 = FACE_BOUND('',#16767,.T.); +#16767 = EDGE_LOOP('',(#16768,#16769,#16775,#16776)); +#16768 = ORIENTED_EDGE('',*,*,#16386,.T.); +#16769 = ORIENTED_EDGE('',*,*,#16770,.F.); +#16770 = EDGE_CURVE('',#16494,#16376,#16771,.T.); +#16771 = LINE('',#16772,#16773); +#16772 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 2.599999988754)); +#16773 = VECTOR('',#16774,1.); +#16774 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16775 = ORIENTED_EDGE('',*,*,#16597,.F.); +#16776 = ORIENTED_EDGE('',*,*,#16753,.T.); +#16777 = PLANE('',#16778); +#16778 = AXIS2_PLACEMENT_3D('',#16779,#16780,#16781); +#16779 = CARTESIAN_POINT('',(3.274974555752,1.034963204565, + 2.599999988754)); +#16780 = DIRECTION('',(2.185723611047E-29,-3.130080614681E-15,1.)); +#16781 = DIRECTION('',(0.,-1.,-3.130080614681E-15)); +#16782 = ADVANCED_FACE('',(#16783),#16794,.T.); +#16783 = FACE_BOUND('',#16784,.T.); +#16784 = EDGE_LOOP('',(#16785,#16786,#16792,#16793)); +#16785 = ORIENTED_EDGE('',*,*,#16375,.T.); +#16786 = ORIENTED_EDGE('',*,*,#16787,.F.); +#16787 = EDGE_CURVE('',#16496,#16378,#16788,.T.); +#16788 = LINE('',#16789,#16790); +#16789 = CARTESIAN_POINT('',(3.274974555752,0.634963209963, + 2.499999990103)); +#16790 = VECTOR('',#16791,1.); +#16791 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16792 = ORIENTED_EDGE('',*,*,#16493,.F.); +#16793 = ORIENTED_EDGE('',*,*,#16770,.T.); +#16794 = CYLINDRICAL_SURFACE('',#16795,9.999999865046E-02); +#16795 = AXIS2_PLACEMENT_3D('',#16796,#16797,#16798); +#16796 = CARTESIAN_POINT('',(3.274974555752,0.734963208613, + 2.499999990103)); +#16797 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16798 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#16799 = ADVANCED_FACE('',(#16800),#16827,.T.); +#16800 = FACE_BOUND('',#16801,.T.); +#16801 = EDGE_LOOP('',(#16802,#16810,#16811,#16812,#16813,#16821)); +#16802 = ORIENTED_EDGE('',*,*,#16803,.T.); +#16803 = EDGE_CURVE('',#16804,#16472,#16806,.T.); +#16804 = VERTEX_POINT('',#16805); +#16805 = CARTESIAN_POINT('',(3.199974556764,0.634963209963, + 0.350000019118)); +#16806 = LINE('',#16807,#16808); +#16807 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#16808 = VECTOR('',#16809,1.); +#16809 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16810 = ORIENTED_EDGE('',*,*,#16471,.T.); +#16811 = ORIENTED_EDGE('',*,*,#16619,.F.); +#16812 = ORIENTED_EDGE('',*,*,#16512,.F.); +#16813 = ORIENTED_EDGE('',*,*,#16814,.T.); +#16814 = EDGE_CURVE('',#16505,#16815,#16817,.T.); +#16815 = VERTEX_POINT('',#16816); +#16816 = CARTESIAN_POINT('',(3.199974556764,0.634963209963,0.75000001372 + )); +#16817 = LINE('',#16818,#16819); +#16818 = CARTESIAN_POINT('',(2.949974560138,0.634963209963,0.75000001372 + )); +#16819 = VECTOR('',#16820,1.); +#16820 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#16821 = ORIENTED_EDGE('',*,*,#16822,.F.); +#16822 = EDGE_CURVE('',#16804,#16815,#16823,.T.); +#16823 = LINE('',#16824,#16825); +#16824 = CARTESIAN_POINT('',(3.199974556764,0.634963209963, + 0.100000022492)); +#16825 = VECTOR('',#16826,1.); +#16826 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#16827 = PLANE('',#16828); +#16828 = AXIS2_PLACEMENT_3D('',#16829,#16830,#16831); +#16829 = CARTESIAN_POINT('',(3.274974555752,0.634963209963, + 2.499999990103)); +#16830 = DIRECTION('',(6.982962677686E-15,-1.,-3.446306248323E-15)); +#16831 = DIRECTION('',(0.,3.446306248323E-15,-1.)); +#16832 = ADVANCED_FACE('',(#16833),#16839,.F.); +#16833 = FACE_BOUND('',#16834,.T.); +#16834 = EDGE_LOOP('',(#16835,#16836,#16837,#16838)); +#16835 = ORIENTED_EDGE('',*,*,#15254,.F.); +#16836 = ORIENTED_EDGE('',*,*,#15067,.F.); +#16837 = ORIENTED_EDGE('',*,*,#15225,.F.); +#16838 = ORIENTED_EDGE('',*,*,#15123,.F.); +#16839 = PLANE('',#16840); +#16840 = AXIS2_PLACEMENT_3D('',#16841,#16842,#16843); +#16841 = CARTESIAN_POINT('',(3.274974555752,-2.965036741454, + 1.150000008322)); +#16842 = DIRECTION('',(-6.982962677686E-15,1.,4.111025437406E-15)); +#16843 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16844 = ADVANCED_FACE('',(#16845),#16870,.F.); +#16845 = FACE_BOUND('',#16846,.T.); +#16846 = EDGE_LOOP('',(#16847,#16855,#16863,#16869)); +#16847 = ORIENTED_EDGE('',*,*,#16848,.T.); +#16848 = EDGE_CURVE('',#15076,#16849,#16851,.T.); +#16849 = VERTEX_POINT('',#16850); +#16850 = CARTESIAN_POINT('',(2.9749745598,-0.465036775192,1.849999998875 + )); +#16851 = LINE('',#16852,#16853); +#16852 = CARTESIAN_POINT('',(2.9749745598,-2.965036741454,1.849999998875 + )); +#16853 = VECTOR('',#16854,1.); +#16854 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#16855 = ORIENTED_EDGE('',*,*,#16856,.F.); +#16856 = EDGE_CURVE('',#16857,#16849,#16859,.T.); +#16857 = VERTEX_POINT('',#16858); +#16858 = CARTESIAN_POINT('',(2.9749745598,-0.465036775192,1.150000008322 + )); +#16859 = LINE('',#16860,#16861); +#16860 = CARTESIAN_POINT('',(2.9749745598,-0.465036775192,1.849999998875 + )); +#16861 = VECTOR('',#16862,1.); +#16862 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#16863 = ORIENTED_EDGE('',*,*,#16864,.F.); +#16864 = EDGE_CURVE('',#15058,#16857,#16865,.T.); +#16865 = LINE('',#16866,#16867); +#16866 = CARTESIAN_POINT('',(2.9749745598,-2.965036741454,1.150000008322 + )); +#16867 = VECTOR('',#16868,1.); +#16868 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#16869 = ORIENTED_EDGE('',*,*,#15083,.F.); +#16870 = PLANE('',#16871); +#16871 = AXIS2_PLACEMENT_3D('',#16872,#16873,#16874); +#16872 = CARTESIAN_POINT('',(2.9749745598,0.934963205914,1.849999998875) + ); +#16873 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16874 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#16875 = ADVANCED_FACE('',(#16876),#16901,.T.); +#16876 = FACE_BOUND('',#16877,.T.); +#16877 = EDGE_LOOP('',(#16878,#16886,#16894,#16900)); +#16878 = ORIENTED_EDGE('',*,*,#16879,.T.); +#16879 = EDGE_CURVE('',#15100,#16880,#16882,.T.); +#16880 = VERTEX_POINT('',#16881); +#16881 = CARTESIAN_POINT('',(3.274974555752,-0.465036775192, + 1.150000008322)); +#16882 = LINE('',#16883,#16884); +#16883 = CARTESIAN_POINT('',(3.274974555752,-2.965036741454, + 1.150000008322)); +#16884 = VECTOR('',#16885,1.); +#16885 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#16886 = ORIENTED_EDGE('',*,*,#16887,.T.); +#16887 = EDGE_CURVE('',#16880,#16888,#16890,.T.); +#16888 = VERTEX_POINT('',#16889); +#16889 = CARTESIAN_POINT('',(3.274974555752,-0.465036775192, + 1.849999998875)); +#16890 = LINE('',#16891,#16892); +#16891 = CARTESIAN_POINT('',(3.274974555752,-0.465036775192, + 1.849999998875)); +#16892 = VECTOR('',#16893,1.); +#16893 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#16894 = ORIENTED_EDGE('',*,*,#16895,.F.); +#16895 = EDGE_CURVE('',#15108,#16888,#16896,.T.); +#16896 = LINE('',#16897,#16898); +#16897 = CARTESIAN_POINT('',(3.274974555752,-2.965036741454, + 1.849999998875)); +#16898 = VECTOR('',#16899,1.); +#16899 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#16900 = ORIENTED_EDGE('',*,*,#15107,.F.); +#16901 = PLANE('',#16902); +#16902 = AXIS2_PLACEMENT_3D('',#16903,#16904,#16905); +#16903 = CARTESIAN_POINT('',(3.274974555752,0.934963205914, + 1.849999998875)); +#16904 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16905 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#16906 = ADVANCED_FACE('',(#16907),#16918,.T.); +#16907 = FACE_BOUND('',#16908,.T.); +#16908 = EDGE_LOOP('',(#16909,#16910,#16916,#16917)); +#16909 = ORIENTED_EDGE('',*,*,#16864,.T.); +#16910 = ORIENTED_EDGE('',*,*,#16911,.T.); +#16911 = EDGE_CURVE('',#16857,#16880,#16912,.T.); +#16912 = LINE('',#16913,#16914); +#16913 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.150000008322)); +#16914 = VECTOR('',#16915,1.); +#16915 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16916 = ORIENTED_EDGE('',*,*,#16879,.F.); +#16917 = ORIENTED_EDGE('',*,*,#15232,.F.); +#16918 = PLANE('',#16919); +#16919 = AXIS2_PLACEMENT_3D('',#16920,#16921,#16922); +#16920 = CARTESIAN_POINT('',(3.274974555752,-2.965036741454, + 1.150000008322)); +#16921 = DIRECTION('',(-2.313974563217E-29,3.31374327778E-15,-1.)); +#16922 = DIRECTION('',(-1.,0.,2.313974563217E-29)); +#16923 = ADVANCED_FACE('',(#16924),#16935,.F.); +#16924 = FACE_BOUND('',#16925,.T.); +#16925 = EDGE_LOOP('',(#16926,#16927,#16933,#16934)); +#16926 = ORIENTED_EDGE('',*,*,#16895,.T.); +#16927 = ORIENTED_EDGE('',*,*,#16928,.F.); +#16928 = EDGE_CURVE('',#16849,#16888,#16929,.T.); +#16929 = LINE('',#16930,#16931); +#16930 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.849999998875)); +#16931 = VECTOR('',#16932,1.); +#16932 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#16933 = ORIENTED_EDGE('',*,*,#16848,.F.); +#16934 = ORIENTED_EDGE('',*,*,#15247,.F.); +#16935 = PLANE('',#16936); +#16936 = AXIS2_PLACEMENT_3D('',#16937,#16938,#16939); +#16937 = CARTESIAN_POINT('',(3.274974555752,-2.965036741454, + 1.849999998875)); +#16938 = DIRECTION('',(-2.309813444521E-29,3.307784318971E-15,-1.)); +#16939 = DIRECTION('',(-1.,0.,2.309813444521E-29)); +#16940 = ADVANCED_FACE('',(#16941),#16975,.F.); +#16941 = FACE_BOUND('',#16942,.T.); +#16942 = EDGE_LOOP('',(#16943,#16953,#16961,#16969)); +#16943 = ORIENTED_EDGE('',*,*,#16944,.T.); +#16944 = EDGE_CURVE('',#16945,#16947,#16949,.T.); +#16945 = VERTEX_POINT('',#16946); +#16946 = CARTESIAN_POINT('',(4.224974542931,-2.465036748202, + 1.150000008322)); +#16947 = VERTEX_POINT('',#16948); +#16948 = CARTESIAN_POINT('',(4.313138032096,-2.965036741454, + 1.331985122999)); +#16949 = LINE('',#16950,#16951); +#16950 = CARTESIAN_POINT('',(4.318798437008,-2.997138492927, + 1.343669205003)); +#16951 = VECTOR('',#16952,1.); +#16952 = DIRECTION('',(0.163464460889,-0.927053025192,0.337419706757)); +#16953 = ORIENTED_EDGE('',*,*,#16954,.T.); +#16954 = EDGE_CURVE('',#16947,#16955,#16957,.T.); +#16955 = VERTEX_POINT('',#16956); +#16956 = CARTESIAN_POINT('',(4.313138032096,-2.965036741454, + 1.668014884198)); +#16957 = LINE('',#16958,#16959); +#16958 = CARTESIAN_POINT('',(4.313138032096,-2.965036741454, + 1.150000008322)); +#16959 = VECTOR('',#16960,1.); +#16960 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#16961 = ORIENTED_EDGE('',*,*,#16962,.T.); +#16962 = EDGE_CURVE('',#16955,#16963,#16965,.T.); +#16963 = VERTEX_POINT('',#16964); +#16964 = CARTESIAN_POINT('',(4.224974542931,-2.465036748202, + 1.849999998875)); +#16965 = LINE('',#16966,#16967); +#16966 = CARTESIAN_POINT('',(4.232990731815,-2.510498814482, + 1.833453159961)); +#16967 = VECTOR('',#16968,1.); +#16968 = DIRECTION('',(-0.163464460889,0.927053025192,0.337419706757)); +#16969 = ORIENTED_EDGE('',*,*,#16970,.T.); +#16970 = EDGE_CURVE('',#16963,#16945,#16971,.T.); +#16971 = LINE('',#16972,#16973); +#16972 = CARTESIAN_POINT('',(4.224974542931,-2.465036748202, + 1.849999998875)); +#16973 = VECTOR('',#16974,1.); +#16974 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#16975 = PLANE('',#16976); +#16976 = AXIS2_PLACEMENT_3D('',#16977,#16978,#16979); +#16977 = CARTESIAN_POINT('',(4.313138032096,-2.965036741454, + 1.150000008322)); +#16978 = DIRECTION('',(0.984807753012,0.173648177667,7.138720755481E-16) + ); +#16979 = DIRECTION('',(-9.860761315263E-32,4.111025437405E-15,-1.)); +#16980 = ADVANCED_FACE('',(#16981),#17015,.T.); +#16981 = FACE_BOUND('',#16982,.T.); +#16982 = EDGE_LOOP('',(#16983,#16993,#17001,#17009)); +#16983 = ORIENTED_EDGE('',*,*,#16984,.T.); +#16984 = EDGE_CURVE('',#16985,#16987,#16989,.T.); +#16985 = VERTEX_POINT('',#16986); +#16986 = CARTESIAN_POINT('',(4.436811049718,-2.965036741454, + 1.331985122999)); +#16987 = VERTEX_POINT('',#16988); +#16988 = CARTESIAN_POINT('',(4.524974538883,-2.465036748202, + 1.150000008322)); +#16989 = LINE('',#16990,#16991); +#16990 = CARTESIAN_POINT('',(4.439166833689,-2.951676426647, + 1.327122366089)); +#16991 = VECTOR('',#16992,1.); +#16992 = DIRECTION('',(0.163464460889,0.927053025192,-0.337419706757)); +#16993 = ORIENTED_EDGE('',*,*,#16994,.T.); +#16994 = EDGE_CURVE('',#16987,#16995,#16997,.T.); +#16995 = VERTEX_POINT('',#16996); +#16996 = CARTESIAN_POINT('',(4.524974538883,-2.465036748202, + 1.849999998875)); +#16997 = LINE('',#16998,#16999); +#16998 = CARTESIAN_POINT('',(4.524974538883,-2.465036748202, + 1.668014884198)); +#16999 = VECTOR('',#17000,1.); +#17000 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#17001 = ORIENTED_EDGE('',*,*,#17002,.T.); +#17002 = EDGE_CURVE('',#16995,#17003,#17005,.T.); +#17003 = VERTEX_POINT('',#17004); +#17004 = CARTESIAN_POINT('',(4.436811049718,-2.965036741454, + 1.668014884198)); +#17005 = LINE('',#17006,#17007); +#17006 = CARTESIAN_POINT('',(4.524974538883,-2.465036748202, + 1.849999998875)); +#17007 = VECTOR('',#17008,1.); +#17008 = DIRECTION('',(-0.163464460889,-0.927053025192,-0.337419706757) + ); +#17009 = ORIENTED_EDGE('',*,*,#17010,.T.); +#17010 = EDGE_CURVE('',#17003,#16985,#17011,.T.); +#17011 = LINE('',#17012,#17013); +#17012 = CARTESIAN_POINT('',(4.436811049718,-2.965036741454, + 1.331985122999)); +#17013 = VECTOR('',#17014,1.); +#17014 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#17015 = PLANE('',#17016); +#17016 = AXIS2_PLACEMENT_3D('',#17017,#17018,#17019); +#17017 = CARTESIAN_POINT('',(4.524974538883,-2.465036748202, + 1.849999998875)); +#17018 = DIRECTION('',(0.984807753012,-0.173648177667, + -7.138720755481E-16)); +#17019 = DIRECTION('',(9.860761315263E-32,4.111025437405E-15,-1.)); +#17020 = ADVANCED_FACE('',(#17021),#17037,.T.); +#17021 = FACE_BOUND('',#17022,.T.); +#17022 = EDGE_LOOP('',(#17023,#17029,#17030,#17036)); +#17023 = ORIENTED_EDGE('',*,*,#17024,.T.); +#17024 = EDGE_CURVE('',#16985,#16947,#17025,.T.); +#17025 = LINE('',#17026,#17027); +#17026 = CARTESIAN_POINT('',(4.224974542931,-2.965036741454, + 1.331985122999)); +#17027 = VECTOR('',#17028,1.); +#17028 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17029 = ORIENTED_EDGE('',*,*,#16944,.F.); +#17030 = ORIENTED_EDGE('',*,*,#17031,.T.); +#17031 = EDGE_CURVE('',#16945,#16987,#17032,.T.); +#17032 = LINE('',#17033,#17034); +#17033 = CARTESIAN_POINT('',(4.524974538883,-2.465036748202, + 1.150000008322)); +#17034 = VECTOR('',#17035,1.); +#17035 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17036 = ORIENTED_EDGE('',*,*,#16984,.F.); +#17037 = PLANE('',#17038); +#17038 = AXIS2_PLACEMENT_3D('',#17039,#17040,#17041); +#17039 = CARTESIAN_POINT('',(4.524974538883,-2.965036741454, + 1.331985122999)); +#17040 = DIRECTION('',(2.38831389586E-15,-0.342020143326,-0.939692620786 + )); +#17041 = DIRECTION('',(0.,-0.939692620786,0.342020143326)); +#17042 = ADVANCED_FACE('',(#17043),#17059,.F.); +#17043 = FACE_BOUND('',#17044,.T.); +#17044 = EDGE_LOOP('',(#17045,#17051,#17052,#17058)); +#17045 = ORIENTED_EDGE('',*,*,#17046,.T.); +#17046 = EDGE_CURVE('',#16995,#16963,#17047,.T.); +#17047 = LINE('',#17048,#17049); +#17048 = CARTESIAN_POINT('',(4.524974538883,-2.465036748202, + 1.849999998875)); +#17049 = VECTOR('',#17050,1.); +#17050 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17051 = ORIENTED_EDGE('',*,*,#16962,.F.); +#17052 = ORIENTED_EDGE('',*,*,#17053,.T.); +#17053 = EDGE_CURVE('',#16955,#17003,#17054,.T.); +#17054 = LINE('',#17055,#17056); +#17055 = CARTESIAN_POINT('',(4.524974538883,-2.965036741454, + 1.668014884198)); +#17056 = VECTOR('',#17057,1.); +#17057 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17058 = ORIENTED_EDGE('',*,*,#17002,.F.); +#17059 = PLANE('',#17060); +#17060 = AXIS2_PLACEMENT_3D('',#17061,#17062,#17063); +#17061 = CARTESIAN_POINT('',(4.524974538883,-2.465036748202, + 1.849999998875)); +#17062 = DIRECTION('',(-2.38831389586E-15,0.342020143326,-0.939692620786 + )); +#17063 = DIRECTION('',(-1.,-9.860761315263E-32,2.541590561669E-15)); +#17064 = ADVANCED_FACE('',(#17065),#17177,.T.); +#17065 = FACE_BOUND('',#17066,.T.); +#17066 = EDGE_LOOP('',(#17067,#17078,#17086,#17095,#17103,#17112,#17120, + #17129,#17137,#17146,#17154,#17163,#17171)); +#17067 = ORIENTED_EDGE('',*,*,#17068,.F.); +#17068 = EDGE_CURVE('',#17069,#17071,#17073,.T.); +#17069 = VERTEX_POINT('',#17070); +#17070 = CARTESIAN_POINT('',(4.224974542931,0.734963208613, + 2.599999988754)); +#17071 = VERTEX_POINT('',#17072); +#17072 = CARTESIAN_POINT('',(4.224974542931,0.634963209963, + 2.499999990103)); +#17073 = CIRCLE('',#17074,9.999999865046E-02); +#17074 = AXIS2_PLACEMENT_3D('',#17075,#17076,#17077); +#17075 = CARTESIAN_POINT('',(4.224974542931,0.734963208613, + 2.499999990103)); +#17076 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17077 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#17078 = ORIENTED_EDGE('',*,*,#17079,.F.); +#17079 = EDGE_CURVE('',#17080,#17069,#17082,.T.); +#17080 = VERTEX_POINT('',#17081); +#17081 = CARTESIAN_POINT('',(4.224974542931,1.034963204565, + 2.599999988754)); +#17082 = LINE('',#17083,#17084); +#17083 = CARTESIAN_POINT('',(4.224974542931,1.034963204565, + 2.599999988754)); +#17084 = VECTOR('',#17085,1.); +#17085 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#17086 = ORIENTED_EDGE('',*,*,#17087,.T.); +#17087 = EDGE_CURVE('',#17080,#17088,#17090,.T.); +#17088 = VERTEX_POINT('',#17089); +#17089 = CARTESIAN_POINT('',(4.224974542931,1.134963203215, + 2.499999990103)); +#17090 = CIRCLE('',#17091,9.999999865046E-02); +#17091 = AXIS2_PLACEMENT_3D('',#17092,#17093,#17094); +#17092 = CARTESIAN_POINT('',(4.224974542931,1.034963204565, + 2.499999990103)); +#17093 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17094 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#17095 = ORIENTED_EDGE('',*,*,#17096,.F.); +#17096 = EDGE_CURVE('',#17097,#17088,#17099,.T.); +#17097 = VERTEX_POINT('',#17098); +#17098 = CARTESIAN_POINT('',(4.224974542931,1.134963203215,0.94102984344 + )); +#17099 = LINE('',#17100,#17101); +#17100 = CARTESIAN_POINT('',(4.224974542931,1.134963203215,0.94102984344 + )); +#17101 = VECTOR('',#17102,1.); +#17102 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#17103 = ORIENTED_EDGE('',*,*,#17104,.F.); +#17104 = EDGE_CURVE('',#17105,#17097,#17107,.T.); +#17105 = VERTEX_POINT('',#17106); +#17106 = CARTESIAN_POINT('',(4.224974542931,1.283199392194, + 0.747844680789)); +#17107 = CIRCLE('',#17108,0.199999997301); +#17108 = AXIS2_PLACEMENT_3D('',#17109,#17110,#17111); +#17109 = CARTESIAN_POINT('',(4.224974542931,1.334963200516,0.94102984344 + )); +#17110 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#17111 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#17112 = ORIENTED_EDGE('',*,*,#17113,.F.); +#17113 = EDGE_CURVE('',#17114,#17105,#17116,.T.); +#17114 = VERTEX_POINT('',#17115); +#17115 = CARTESIAN_POINT('',(4.224974542931,1.686727004789, + 0.639719782871)); +#17116 = LINE('',#17117,#17118); +#17117 = CARTESIAN_POINT('',(4.224974542931,1.686727004789, + 0.639719782871)); +#17118 = VECTOR('',#17119,1.); +#17119 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#17120 = ORIENTED_EDGE('',*,*,#17121,.F.); +#17121 = EDGE_CURVE('',#17122,#17114,#17124,.T.); +#17122 = VERTEX_POINT('',#17123); +#17123 = CARTESIAN_POINT('',(4.224974542931,1.834963193768,0.44653462022 + )); +#17124 = CIRCLE('',#17125,0.199999997301); +#17125 = AXIS2_PLACEMENT_3D('',#17126,#17127,#17128); +#17126 = CARTESIAN_POINT('',(4.224974542931,1.634963196467,0.44653462022 + )); +#17127 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#17128 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#17129 = ORIENTED_EDGE('',*,*,#17130,.F.); +#17130 = EDGE_CURVE('',#17131,#17122,#17133,.T.); +#17131 = VERTEX_POINT('',#17132); +#17132 = CARTESIAN_POINT('',(4.224974542931,1.834963193768, + 0.200000021143)); +#17133 = LINE('',#17134,#17135); +#17134 = CARTESIAN_POINT('',(4.224974542931,1.834963193768, + 0.200000021143)); +#17135 = VECTOR('',#17136,1.); +#17136 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#17137 = ORIENTED_EDGE('',*,*,#17138,.F.); +#17138 = EDGE_CURVE('',#17139,#17131,#17141,.T.); +#17139 = VERTEX_POINT('',#17140); +#17140 = CARTESIAN_POINT('',(4.224974542931,1.634963196467, + 2.384185937565E-08)); +#17141 = CIRCLE('',#17142,0.199999997301); +#17142 = AXIS2_PLACEMENT_3D('',#17143,#17144,#17145); +#17143 = CARTESIAN_POINT('',(4.224974542931,1.634963196467, + 0.200000021143)); +#17144 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#17145 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#17146 = ORIENTED_EDGE('',*,*,#17147,.F.); +#17147 = EDGE_CURVE('',#17148,#17139,#17150,.T.); +#17148 = VERTEX_POINT('',#17149); +#17149 = CARTESIAN_POINT('',(4.224974542931,0.734963208613, + 2.384185626703E-08)); +#17150 = LINE('',#17151,#17152); +#17151 = CARTESIAN_POINT('',(4.224974542931,0.734963208613, + 2.384185626703E-08)); +#17152 = VECTOR('',#17153,1.); +#17153 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#17154 = ORIENTED_EDGE('',*,*,#17155,.F.); +#17155 = EDGE_CURVE('',#17156,#17148,#17158,.T.); +#17156 = VERTEX_POINT('',#17157); +#17157 = CARTESIAN_POINT('',(4.224974542931,0.634963209963, + 0.100000022492)); +#17158 = CIRCLE('',#17159,9.999999865046E-02); +#17159 = AXIS2_PLACEMENT_3D('',#17160,#17161,#17162); +#17160 = CARTESIAN_POINT('',(4.224974542931,0.734963208613, + 0.100000022492)); +#17161 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17162 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#17163 = ORIENTED_EDGE('',*,*,#17164,.F.); +#17164 = EDGE_CURVE('',#17165,#17156,#17167,.T.); +#17165 = VERTEX_POINT('',#17166); +#17166 = CARTESIAN_POINT('',(4.224974542931,0.634963209963,0.75000001372 + )); +#17167 = LINE('',#17168,#17169); +#17168 = CARTESIAN_POINT('',(4.224974542931,0.634963209963, + 2.499999990103)); +#17169 = VECTOR('',#17170,1.); +#17170 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#17171 = ORIENTED_EDGE('',*,*,#17172,.F.); +#17172 = EDGE_CURVE('',#17071,#17165,#17173,.T.); +#17173 = LINE('',#17174,#17175); +#17174 = CARTESIAN_POINT('',(4.224974542931,0.634963209963, + 2.499999990103)); +#17175 = VECTOR('',#17176,1.); +#17176 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#17177 = PLANE('',#17178); +#17178 = AXIS2_PLACEMENT_3D('',#17179,#17180,#17181); +#17179 = CARTESIAN_POINT('',(4.224974542931,0.734963208613, + 2.499999990103)); +#17180 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17181 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#17182 = ADVANCED_FACE('',(#17183),#17295,.F.); +#17183 = FACE_BOUND('',#17184,.T.); +#17184 = EDGE_LOOP('',(#17185,#17196,#17204,#17212,#17221,#17229,#17238, + #17246,#17255,#17263,#17272,#17280,#17289)); +#17185 = ORIENTED_EDGE('',*,*,#17186,.T.); +#17186 = EDGE_CURVE('',#17187,#17189,#17191,.T.); +#17187 = VERTEX_POINT('',#17188); +#17188 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 2.599999988754)); +#17189 = VERTEX_POINT('',#17190); +#17190 = CARTESIAN_POINT('',(4.524974538883,0.634963209963, + 2.499999990103)); +#17191 = CIRCLE('',#17192,9.999999865046E-02); +#17192 = AXIS2_PLACEMENT_3D('',#17193,#17194,#17195); +#17193 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 2.499999990103)); +#17194 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17195 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#17196 = ORIENTED_EDGE('',*,*,#17197,.T.); +#17197 = EDGE_CURVE('',#17189,#17198,#17200,.T.); +#17198 = VERTEX_POINT('',#17199); +#17199 = CARTESIAN_POINT('',(4.524974538883,0.634963209963, + 0.350000019118)); +#17200 = LINE('',#17201,#17202); +#17201 = CARTESIAN_POINT('',(4.524974538883,0.634963209963, + 2.499999990103)); +#17202 = VECTOR('',#17203,1.); +#17203 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#17204 = ORIENTED_EDGE('',*,*,#17205,.T.); +#17205 = EDGE_CURVE('',#17198,#17206,#17208,.T.); +#17206 = VERTEX_POINT('',#17207); +#17207 = CARTESIAN_POINT('',(4.524974538883,0.634963209963, + 0.100000022492)); +#17208 = LINE('',#17209,#17210); +#17209 = CARTESIAN_POINT('',(4.524974538883,0.634963209963, + 2.499999990103)); +#17210 = VECTOR('',#17211,1.); +#17211 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#17212 = ORIENTED_EDGE('',*,*,#17213,.T.); +#17213 = EDGE_CURVE('',#17206,#17214,#17216,.T.); +#17214 = VERTEX_POINT('',#17215); +#17215 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 2.384185626703E-08)); +#17216 = CIRCLE('',#17217,9.999999865046E-02); +#17217 = AXIS2_PLACEMENT_3D('',#17218,#17219,#17220); +#17218 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 0.100000022492)); +#17219 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17220 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#17221 = ORIENTED_EDGE('',*,*,#17222,.T.); +#17222 = EDGE_CURVE('',#17214,#17223,#17225,.T.); +#17223 = VERTEX_POINT('',#17224); +#17224 = CARTESIAN_POINT('',(4.524974538883,1.634963196467, + 2.384185937565E-08)); +#17225 = LINE('',#17226,#17227); +#17226 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 2.384185626703E-08)); +#17227 = VECTOR('',#17228,1.); +#17228 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#17229 = ORIENTED_EDGE('',*,*,#17230,.T.); +#17230 = EDGE_CURVE('',#17223,#17231,#17233,.T.); +#17231 = VERTEX_POINT('',#17232); +#17232 = CARTESIAN_POINT('',(4.524974538883,1.834963193768, + 0.200000021143)); +#17233 = CIRCLE('',#17234,0.199999997301); +#17234 = AXIS2_PLACEMENT_3D('',#17235,#17236,#17237); +#17235 = CARTESIAN_POINT('',(4.524974538883,1.634963196467, + 0.200000021143)); +#17236 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#17237 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#17238 = ORIENTED_EDGE('',*,*,#17239,.T.); +#17239 = EDGE_CURVE('',#17231,#17240,#17242,.T.); +#17240 = VERTEX_POINT('',#17241); +#17241 = CARTESIAN_POINT('',(4.524974538883,1.834963193768,0.44653462022 + )); +#17242 = LINE('',#17243,#17244); +#17243 = CARTESIAN_POINT('',(4.524974538883,1.834963193768, + 0.200000021143)); +#17244 = VECTOR('',#17245,1.); +#17245 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#17246 = ORIENTED_EDGE('',*,*,#17247,.T.); +#17247 = EDGE_CURVE('',#17240,#17248,#17250,.T.); +#17248 = VERTEX_POINT('',#17249); +#17249 = CARTESIAN_POINT('',(4.524974538883,1.686727004789, + 0.639719782871)); +#17250 = CIRCLE('',#17251,0.199999997301); +#17251 = AXIS2_PLACEMENT_3D('',#17252,#17253,#17254); +#17252 = CARTESIAN_POINT('',(4.524974538883,1.634963196467,0.44653462022 + )); +#17253 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#17254 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#17255 = ORIENTED_EDGE('',*,*,#17256,.T.); +#17256 = EDGE_CURVE('',#17248,#17257,#17259,.T.); +#17257 = VERTEX_POINT('',#17258); +#17258 = CARTESIAN_POINT('',(4.524974538883,1.283199392194, + 0.747844680789)); +#17259 = LINE('',#17260,#17261); +#17260 = CARTESIAN_POINT('',(4.524974538883,1.686727004789, + 0.639719782871)); +#17261 = VECTOR('',#17262,1.); +#17262 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#17263 = ORIENTED_EDGE('',*,*,#17264,.T.); +#17264 = EDGE_CURVE('',#17257,#17265,#17267,.T.); +#17265 = VERTEX_POINT('',#17266); +#17266 = CARTESIAN_POINT('',(4.524974538883,1.134963203215,0.94102984344 + )); +#17267 = CIRCLE('',#17268,0.199999997301); +#17268 = AXIS2_PLACEMENT_3D('',#17269,#17270,#17271); +#17269 = CARTESIAN_POINT('',(4.524974538883,1.334963200516,0.94102984344 + )); +#17270 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#17271 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#17272 = ORIENTED_EDGE('',*,*,#17273,.T.); +#17273 = EDGE_CURVE('',#17265,#17274,#17276,.T.); +#17274 = VERTEX_POINT('',#17275); +#17275 = CARTESIAN_POINT('',(4.524974538883,1.134963203215, + 2.499999990103)); +#17276 = LINE('',#17277,#17278); +#17277 = CARTESIAN_POINT('',(4.524974538883,1.134963203215,0.94102984344 + )); +#17278 = VECTOR('',#17279,1.); +#17279 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#17280 = ORIENTED_EDGE('',*,*,#17281,.F.); +#17281 = EDGE_CURVE('',#17282,#17274,#17284,.T.); +#17282 = VERTEX_POINT('',#17283); +#17283 = CARTESIAN_POINT('',(4.524974538883,1.034963204565, + 2.599999988754)); +#17284 = CIRCLE('',#17285,9.999999865046E-02); +#17285 = AXIS2_PLACEMENT_3D('',#17286,#17287,#17288); +#17286 = CARTESIAN_POINT('',(4.524974538883,1.034963204565, + 2.499999990103)); +#17287 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17288 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#17289 = ORIENTED_EDGE('',*,*,#17290,.T.); +#17290 = EDGE_CURVE('',#17282,#17187,#17291,.T.); +#17291 = LINE('',#17292,#17293); +#17292 = CARTESIAN_POINT('',(4.524974538883,1.034963204565, + 2.599999988754)); +#17293 = VECTOR('',#17294,1.); +#17294 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#17295 = PLANE('',#17296); +#17296 = AXIS2_PLACEMENT_3D('',#17297,#17298,#17299); +#17297 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 2.499999990103)); +#17298 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17299 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#17300 = ADVANCED_FACE('',(#17301),#17317,.T.); +#17301 = FACE_BOUND('',#17302,.T.); +#17302 = EDGE_LOOP('',(#17303,#17304,#17310,#17311)); +#17303 = ORIENTED_EDGE('',*,*,#17155,.T.); +#17304 = ORIENTED_EDGE('',*,*,#17305,.F.); +#17305 = EDGE_CURVE('',#17214,#17148,#17306,.T.); +#17306 = LINE('',#17307,#17308); +#17307 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 2.384185626703E-08)); +#17308 = VECTOR('',#17309,1.); +#17309 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17310 = ORIENTED_EDGE('',*,*,#17213,.F.); +#17311 = ORIENTED_EDGE('',*,*,#17312,.T.); +#17312 = EDGE_CURVE('',#17206,#17156,#17313,.T.); +#17313 = LINE('',#17314,#17315); +#17314 = CARTESIAN_POINT('',(4.524974538883,0.634963209963, + 0.100000022492)); +#17315 = VECTOR('',#17316,1.); +#17316 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17317 = CYLINDRICAL_SURFACE('',#17318,9.999999865046E-02); +#17318 = AXIS2_PLACEMENT_3D('',#17319,#17320,#17321); +#17319 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 0.100000022492)); +#17320 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17321 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#17322 = ADVANCED_FACE('',(#17323),#17334,.T.); +#17323 = FACE_BOUND('',#17324,.T.); +#17324 = EDGE_LOOP('',(#17325,#17326,#17332,#17333)); +#17325 = ORIENTED_EDGE('',*,*,#17147,.T.); +#17326 = ORIENTED_EDGE('',*,*,#17327,.F.); +#17327 = EDGE_CURVE('',#17223,#17139,#17328,.T.); +#17328 = LINE('',#17329,#17330); +#17329 = CARTESIAN_POINT('',(4.524974538883,1.634963196467, + 2.384185937565E-08)); +#17330 = VECTOR('',#17331,1.); +#17331 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17332 = ORIENTED_EDGE('',*,*,#17222,.F.); +#17333 = ORIENTED_EDGE('',*,*,#17305,.T.); +#17334 = PLANE('',#17335); +#17335 = AXIS2_PLACEMENT_3D('',#17336,#17337,#17338); +#17336 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 2.384185626703E-08)); +#17337 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#17338 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#17339 = ADVANCED_FACE('',(#17340),#17351,.T.); +#17340 = FACE_BOUND('',#17341,.T.); +#17341 = EDGE_LOOP('',(#17342,#17343,#17349,#17350)); +#17342 = ORIENTED_EDGE('',*,*,#17138,.T.); +#17343 = ORIENTED_EDGE('',*,*,#17344,.F.); +#17344 = EDGE_CURVE('',#17231,#17131,#17345,.T.); +#17345 = LINE('',#17346,#17347); +#17346 = CARTESIAN_POINT('',(4.524974538883,1.834963193768, + 0.200000021143)); +#17347 = VECTOR('',#17348,1.); +#17348 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17349 = ORIENTED_EDGE('',*,*,#17230,.F.); +#17350 = ORIENTED_EDGE('',*,*,#17327,.T.); +#17351 = CYLINDRICAL_SURFACE('',#17352,0.199999997301); +#17352 = AXIS2_PLACEMENT_3D('',#17353,#17354,#17355); +#17353 = CARTESIAN_POINT('',(4.524974538883,1.634963196467, + 0.200000021143)); +#17354 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#17355 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#17356 = ADVANCED_FACE('',(#17357),#17368,.T.); +#17357 = FACE_BOUND('',#17358,.T.); +#17358 = EDGE_LOOP('',(#17359,#17360,#17366,#17367)); +#17359 = ORIENTED_EDGE('',*,*,#17130,.T.); +#17360 = ORIENTED_EDGE('',*,*,#17361,.F.); +#17361 = EDGE_CURVE('',#17240,#17122,#17362,.T.); +#17362 = LINE('',#17363,#17364); +#17363 = CARTESIAN_POINT('',(4.524974538883,1.834963193768,0.44653462022 + )); +#17364 = VECTOR('',#17365,1.); +#17365 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17366 = ORIENTED_EDGE('',*,*,#17239,.F.); +#17367 = ORIENTED_EDGE('',*,*,#17344,.T.); +#17368 = PLANE('',#17369); +#17369 = AXIS2_PLACEMENT_3D('',#17370,#17371,#17372); +#17370 = CARTESIAN_POINT('',(4.524974538883,1.834963193768, + 0.200000021143)); +#17371 = DIRECTION('',(-6.982962677686E-15,1.,3.931258214751E-15)); +#17372 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17373 = ADVANCED_FACE('',(#17374),#17385,.T.); +#17374 = FACE_BOUND('',#17375,.T.); +#17375 = EDGE_LOOP('',(#17376,#17377,#17383,#17384)); +#17376 = ORIENTED_EDGE('',*,*,#17121,.T.); +#17377 = ORIENTED_EDGE('',*,*,#17378,.F.); +#17378 = EDGE_CURVE('',#17248,#17114,#17379,.T.); +#17379 = LINE('',#17380,#17381); +#17380 = CARTESIAN_POINT('',(4.524974538883,1.686727004789, + 0.639719782871)); +#17381 = VECTOR('',#17382,1.); +#17382 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17383 = ORIENTED_EDGE('',*,*,#17247,.F.); +#17384 = ORIENTED_EDGE('',*,*,#17361,.T.); +#17385 = CYLINDRICAL_SURFACE('',#17386,0.199999997301); +#17386 = AXIS2_PLACEMENT_3D('',#17387,#17388,#17389); +#17387 = CARTESIAN_POINT('',(4.524974538883,1.634963196467,0.44653462022 + )); +#17388 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#17389 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#17390 = ADVANCED_FACE('',(#17391),#17402,.T.); +#17391 = FACE_BOUND('',#17392,.T.); +#17392 = EDGE_LOOP('',(#17393,#17394,#17400,#17401)); +#17393 = ORIENTED_EDGE('',*,*,#17113,.T.); +#17394 = ORIENTED_EDGE('',*,*,#17395,.F.); +#17395 = EDGE_CURVE('',#17257,#17105,#17396,.T.); +#17396 = LINE('',#17397,#17398); +#17397 = CARTESIAN_POINT('',(4.524974538883,1.283199392194, + 0.747844680789)); +#17398 = VECTOR('',#17399,1.); +#17399 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17400 = ORIENTED_EDGE('',*,*,#17256,.F.); +#17401 = ORIENTED_EDGE('',*,*,#17378,.T.); +#17402 = PLANE('',#17403); +#17403 = AXIS2_PLACEMENT_3D('',#17404,#17405,#17406); +#17404 = CARTESIAN_POINT('',(4.524974538883,1.686727004789, + 0.639719782871)); +#17405 = DIRECTION('',(-1.807323732225E-15,0.258819045103,0.965925826289 + )); +#17406 = DIRECTION('',(1.,6.982962677672E-15,1.972152263053E-31)); +#17407 = ADVANCED_FACE('',(#17408),#17419,.F.); +#17408 = FACE_BOUND('',#17409,.F.); +#17409 = EDGE_LOOP('',(#17410,#17411,#17412,#17418)); +#17410 = ORIENTED_EDGE('',*,*,#17395,.F.); +#17411 = ORIENTED_EDGE('',*,*,#17264,.T.); +#17412 = ORIENTED_EDGE('',*,*,#17413,.T.); +#17413 = EDGE_CURVE('',#17265,#17097,#17414,.T.); +#17414 = LINE('',#17415,#17416); +#17415 = CARTESIAN_POINT('',(4.524974538883,1.134963203215,0.94102984344 + )); +#17416 = VECTOR('',#17417,1.); +#17417 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17418 = ORIENTED_EDGE('',*,*,#17104,.F.); +#17419 = CYLINDRICAL_SURFACE('',#17420,0.199999997301); +#17420 = AXIS2_PLACEMENT_3D('',#17421,#17422,#17423); +#17421 = CARTESIAN_POINT('',(4.524974538883,1.334963200516,0.94102984344 + )); +#17422 = DIRECTION('',(-1.,-6.982962677686E-15,4.379057819206E-45)); +#17423 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#17424 = ADVANCED_FACE('',(#17425),#17436,.T.); +#17425 = FACE_BOUND('',#17426,.T.); +#17426 = EDGE_LOOP('',(#17427,#17428,#17434,#17435)); +#17427 = ORIENTED_EDGE('',*,*,#17096,.T.); +#17428 = ORIENTED_EDGE('',*,*,#17429,.F.); +#17429 = EDGE_CURVE('',#17274,#17088,#17430,.T.); +#17430 = LINE('',#17431,#17432); +#17431 = CARTESIAN_POINT('',(4.524974538883,1.134963203215, + 2.499999990103)); +#17432 = VECTOR('',#17433,1.); +#17433 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17434 = ORIENTED_EDGE('',*,*,#17273,.F.); +#17435 = ORIENTED_EDGE('',*,*,#17413,.T.); +#17436 = PLANE('',#17437); +#17437 = AXIS2_PLACEMENT_3D('',#17438,#17439,#17440); +#17438 = CARTESIAN_POINT('',(4.524974538883,1.134963203215,0.94102984344 + )); +#17439 = DIRECTION('',(-6.982962677686E-15,1.,3.387162263827E-15)); +#17440 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17441 = ADVANCED_FACE('',(#17442),#17453,.T.); +#17442 = FACE_BOUND('',#17443,.T.); +#17443 = EDGE_LOOP('',(#17444,#17445,#17451,#17452)); +#17444 = ORIENTED_EDGE('',*,*,#17087,.F.); +#17445 = ORIENTED_EDGE('',*,*,#17446,.F.); +#17446 = EDGE_CURVE('',#17282,#17080,#17447,.T.); +#17447 = LINE('',#17448,#17449); +#17448 = CARTESIAN_POINT('',(4.524974538883,1.034963204565, + 2.599999988754)); +#17449 = VECTOR('',#17450,1.); +#17450 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17451 = ORIENTED_EDGE('',*,*,#17281,.T.); +#17452 = ORIENTED_EDGE('',*,*,#17429,.T.); +#17453 = CYLINDRICAL_SURFACE('',#17454,9.999999865046E-02); +#17454 = AXIS2_PLACEMENT_3D('',#17455,#17456,#17457); +#17455 = CARTESIAN_POINT('',(4.524974538883,1.034963204565, + 2.499999990103)); +#17456 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17457 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#17458 = ADVANCED_FACE('',(#17459),#17470,.T.); +#17459 = FACE_BOUND('',#17460,.T.); +#17460 = EDGE_LOOP('',(#17461,#17462,#17468,#17469)); +#17461 = ORIENTED_EDGE('',*,*,#17079,.T.); +#17462 = ORIENTED_EDGE('',*,*,#17463,.F.); +#17463 = EDGE_CURVE('',#17187,#17069,#17464,.T.); +#17464 = LINE('',#17465,#17466); +#17465 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 2.599999988754)); +#17466 = VECTOR('',#17467,1.); +#17467 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17468 = ORIENTED_EDGE('',*,*,#17290,.F.); +#17469 = ORIENTED_EDGE('',*,*,#17446,.T.); +#17470 = PLANE('',#17471); +#17471 = AXIS2_PLACEMENT_3D('',#17472,#17473,#17474); +#17472 = CARTESIAN_POINT('',(4.524974538883,1.034963204565, + 2.599999988754)); +#17473 = DIRECTION('',(2.185723611047E-29,-3.130080614681E-15,1.)); +#17474 = DIRECTION('',(0.,-1.,-3.130080614681E-15)); +#17475 = ADVANCED_FACE('',(#17476),#17487,.T.); +#17476 = FACE_BOUND('',#17477,.T.); +#17477 = EDGE_LOOP('',(#17478,#17479,#17485,#17486)); +#17478 = ORIENTED_EDGE('',*,*,#17068,.T.); +#17479 = ORIENTED_EDGE('',*,*,#17480,.F.); +#17480 = EDGE_CURVE('',#17189,#17071,#17481,.T.); +#17481 = LINE('',#17482,#17483); +#17482 = CARTESIAN_POINT('',(4.524974538883,0.634963209963, + 2.499999990103)); +#17483 = VECTOR('',#17484,1.); +#17484 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17485 = ORIENTED_EDGE('',*,*,#17186,.F.); +#17486 = ORIENTED_EDGE('',*,*,#17463,.T.); +#17487 = CYLINDRICAL_SURFACE('',#17488,9.999999865046E-02); +#17488 = AXIS2_PLACEMENT_3D('',#17489,#17490,#17491); +#17489 = CARTESIAN_POINT('',(4.524974538883,0.734963208613, + 2.499999990103)); +#17490 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17491 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#17492 = ADVANCED_FACE('',(#17493),#17520,.T.); +#17493 = FACE_BOUND('',#17494,.T.); +#17494 = EDGE_LOOP('',(#17495,#17503,#17511,#17517,#17518,#17519)); +#17495 = ORIENTED_EDGE('',*,*,#17496,.T.); +#17496 = EDGE_CURVE('',#17198,#17497,#17499,.T.); +#17497 = VERTEX_POINT('',#17498); +#17498 = CARTESIAN_POINT('',(4.299974541919,0.634963209963, + 0.350000019118)); +#17499 = LINE('',#17500,#17501); +#17500 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#17501 = VECTOR('',#17502,1.); +#17502 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17503 = ORIENTED_EDGE('',*,*,#17504,.T.); +#17504 = EDGE_CURVE('',#17497,#17505,#17507,.T.); +#17505 = VERTEX_POINT('',#17506); +#17506 = CARTESIAN_POINT('',(4.299974541919,0.634963209963,0.75000001372 + )); +#17507 = LINE('',#17508,#17509); +#17508 = CARTESIAN_POINT('',(4.299974541919,0.634963209963, + 0.100000022492)); +#17509 = VECTOR('',#17510,1.); +#17510 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#17511 = ORIENTED_EDGE('',*,*,#17512,.T.); +#17512 = EDGE_CURVE('',#17505,#17165,#17513,.T.); +#17513 = LINE('',#17514,#17515); +#17514 = CARTESIAN_POINT('',(4.199974543269,0.634963209963,0.75000001372 + )); +#17515 = VECTOR('',#17516,1.); +#17516 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17517 = ORIENTED_EDGE('',*,*,#17164,.T.); +#17518 = ORIENTED_EDGE('',*,*,#17312,.F.); +#17519 = ORIENTED_EDGE('',*,*,#17205,.F.); +#17520 = PLANE('',#17521); +#17521 = AXIS2_PLACEMENT_3D('',#17522,#17523,#17524); +#17522 = CARTESIAN_POINT('',(4.524974538883,0.634963209963, + 2.499999990103)); +#17523 = DIRECTION('',(6.982962677686E-15,-1.,-3.446306248323E-15)); +#17524 = DIRECTION('',(0.,3.446306248323E-15,-1.)); +#17525 = ADVANCED_FACE('',(#17526),#17532,.F.); +#17526 = FACE_BOUND('',#17527,.T.); +#17527 = EDGE_LOOP('',(#17528,#17529,#17530,#17531)); +#17528 = ORIENTED_EDGE('',*,*,#17053,.F.); +#17529 = ORIENTED_EDGE('',*,*,#16954,.F.); +#17530 = ORIENTED_EDGE('',*,*,#17024,.F.); +#17531 = ORIENTED_EDGE('',*,*,#17010,.F.); +#17532 = PLANE('',#17533); +#17533 = AXIS2_PLACEMENT_3D('',#17534,#17535,#17536); +#17534 = CARTESIAN_POINT('',(4.524974538883,-2.965036741454, + 1.150000008322)); +#17535 = DIRECTION('',(-6.982962677686E-15,1.,4.111025437406E-15)); +#17536 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17537 = ADVANCED_FACE('',(#17538),#17563,.F.); +#17538 = FACE_BOUND('',#17539,.T.); +#17539 = EDGE_LOOP('',(#17540,#17548,#17556,#17562)); +#17540 = ORIENTED_EDGE('',*,*,#17541,.T.); +#17541 = EDGE_CURVE('',#16963,#17542,#17544,.T.); +#17542 = VERTEX_POINT('',#17543); +#17543 = CARTESIAN_POINT('',(4.224974542931,-0.465036775192, + 1.849999998875)); +#17544 = LINE('',#17545,#17546); +#17545 = CARTESIAN_POINT('',(4.224974542931,-2.965036741454, + 1.849999998875)); +#17546 = VECTOR('',#17547,1.); +#17547 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#17548 = ORIENTED_EDGE('',*,*,#17549,.F.); +#17549 = EDGE_CURVE('',#17550,#17542,#17552,.T.); +#17550 = VERTEX_POINT('',#17551); +#17551 = CARTESIAN_POINT('',(4.224974542931,-0.465036775192, + 1.150000008322)); +#17552 = LINE('',#17553,#17554); +#17553 = CARTESIAN_POINT('',(4.224974542931,-0.465036775192, + 1.849999998875)); +#17554 = VECTOR('',#17555,1.); +#17555 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#17556 = ORIENTED_EDGE('',*,*,#17557,.F.); +#17557 = EDGE_CURVE('',#16945,#17550,#17558,.T.); +#17558 = LINE('',#17559,#17560); +#17559 = CARTESIAN_POINT('',(4.224974542931,-2.965036741454, + 1.150000008322)); +#17560 = VECTOR('',#17561,1.); +#17561 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#17562 = ORIENTED_EDGE('',*,*,#16970,.F.); +#17563 = PLANE('',#17564); +#17564 = AXIS2_PLACEMENT_3D('',#17565,#17566,#17567); +#17565 = CARTESIAN_POINT('',(4.224974542931,0.934963205914, + 1.849999998875)); +#17566 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17567 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#17568 = ADVANCED_FACE('',(#17569),#17594,.T.); +#17569 = FACE_BOUND('',#17570,.T.); +#17570 = EDGE_LOOP('',(#17571,#17579,#17587,#17593)); +#17571 = ORIENTED_EDGE('',*,*,#17572,.T.); +#17572 = EDGE_CURVE('',#16987,#17573,#17575,.T.); +#17573 = VERTEX_POINT('',#17574); +#17574 = CARTESIAN_POINT('',(4.524974538883,-0.465036775192, + 1.150000008322)); +#17575 = LINE('',#17576,#17577); +#17576 = CARTESIAN_POINT('',(4.524974538883,-2.965036741454, + 1.150000008322)); +#17577 = VECTOR('',#17578,1.); +#17578 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#17579 = ORIENTED_EDGE('',*,*,#17580,.T.); +#17580 = EDGE_CURVE('',#17573,#17581,#17583,.T.); +#17581 = VERTEX_POINT('',#17582); +#17582 = CARTESIAN_POINT('',(4.524974538883,-0.465036775192, + 1.849999998875)); +#17583 = LINE('',#17584,#17585); +#17584 = CARTESIAN_POINT('',(4.524974538883,-0.465036775192, + 1.849999998875)); +#17585 = VECTOR('',#17586,1.); +#17586 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#17587 = ORIENTED_EDGE('',*,*,#17588,.F.); +#17588 = EDGE_CURVE('',#16995,#17581,#17589,.T.); +#17589 = LINE('',#17590,#17591); +#17590 = CARTESIAN_POINT('',(4.524974538883,-2.965036741454, + 1.849999998875)); +#17591 = VECTOR('',#17592,1.); +#17592 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#17593 = ORIENTED_EDGE('',*,*,#16994,.F.); +#17594 = PLANE('',#17595); +#17595 = AXIS2_PLACEMENT_3D('',#17596,#17597,#17598); +#17596 = CARTESIAN_POINT('',(4.524974538883,0.934963205914, + 1.849999998875)); +#17597 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17598 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#17599 = ADVANCED_FACE('',(#17600),#17611,.T.); +#17600 = FACE_BOUND('',#17601,.T.); +#17601 = EDGE_LOOP('',(#17602,#17603,#17609,#17610)); +#17602 = ORIENTED_EDGE('',*,*,#17557,.T.); +#17603 = ORIENTED_EDGE('',*,*,#17604,.T.); +#17604 = EDGE_CURVE('',#17550,#17573,#17605,.T.); +#17605 = LINE('',#17606,#17607); +#17606 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.150000008322)); +#17607 = VECTOR('',#17608,1.); +#17608 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17609 = ORIENTED_EDGE('',*,*,#17572,.F.); +#17610 = ORIENTED_EDGE('',*,*,#17031,.F.); +#17611 = PLANE('',#17612); +#17612 = AXIS2_PLACEMENT_3D('',#17613,#17614,#17615); +#17613 = CARTESIAN_POINT('',(4.524974538883,-2.965036741454, + 1.150000008322)); +#17614 = DIRECTION('',(-2.313974563217E-29,3.31374327778E-15,-1.)); +#17615 = DIRECTION('',(-1.,0.,2.313974563217E-29)); +#17616 = ADVANCED_FACE('',(#17617),#17628,.F.); +#17617 = FACE_BOUND('',#17618,.T.); +#17618 = EDGE_LOOP('',(#17619,#17620,#17626,#17627)); +#17619 = ORIENTED_EDGE('',*,*,#17588,.T.); +#17620 = ORIENTED_EDGE('',*,*,#17621,.F.); +#17621 = EDGE_CURVE('',#17542,#17581,#17622,.T.); +#17622 = LINE('',#17623,#17624); +#17623 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.849999998875)); +#17624 = VECTOR('',#17625,1.); +#17625 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17626 = ORIENTED_EDGE('',*,*,#17541,.F.); +#17627 = ORIENTED_EDGE('',*,*,#17046,.F.); +#17628 = PLANE('',#17629); +#17629 = AXIS2_PLACEMENT_3D('',#17630,#17631,#17632); +#17630 = CARTESIAN_POINT('',(4.524974538883,-2.965036741454, + 1.849999998875)); +#17631 = DIRECTION('',(-2.309813444521E-29,3.307784318971E-15,-1.)); +#17632 = DIRECTION('',(-1.,0.,2.309813444521E-29)); +#17633 = ADVANCED_FACE('',(#17634),#17676,.F.); +#17634 = FACE_BOUND('',#17635,.T.); +#17635 = EDGE_LOOP('',(#17636,#17646,#17654,#17662,#17670)); +#17636 = ORIENTED_EDGE('',*,*,#17637,.F.); +#17637 = EDGE_CURVE('',#17638,#17640,#17642,.T.); +#17638 = VERTEX_POINT('',#17639); +#17639 = CARTESIAN_POINT('',(3.899974547317,-3.265036737405, + 0.75000001372)); +#17640 = VERTEX_POINT('',#17641); +#17641 = CARTESIAN_POINT('',(3.899974547317,-3.465036734706, + 0.550000016419)); +#17642 = LINE('',#17643,#17644); +#17643 = CARTESIAN_POINT('',(3.899974547317,-3.265036737405, + 0.75000001372)); +#17644 = VECTOR('',#17645,1.); +#17645 = DIRECTION('',(4.733261139937E-15,-0.707106781187, + -0.707106781187)); +#17646 = ORIENTED_EDGE('',*,*,#17647,.F.); +#17647 = EDGE_CURVE('',#17648,#17638,#17650,.T.); +#17648 = VERTEX_POINT('',#17649); +#17649 = CARTESIAN_POINT('',(3.899974547317,-1.965036754949, + 0.75000001372)); +#17650 = LINE('',#17651,#17652); +#17651 = CARTESIAN_POINT('',(3.899974547317,-3.465036734706, + 0.75000001372)); +#17652 = VECTOR('',#17653,1.); +#17653 = DIRECTION('',(6.693842098357E-15,-1.,-3.491481338843E-15)); +#17654 = ORIENTED_EDGE('',*,*,#17655,.T.); +#17655 = EDGE_CURVE('',#17648,#17656,#17658,.T.); +#17656 = VERTEX_POINT('',#17657); +#17657 = CARTESIAN_POINT('',(3.899974547317,-1.965036754949, + 0.350000019118)); +#17658 = LINE('',#17659,#17660); +#17659 = CARTESIAN_POINT('',(3.899974547317,-1.965036754949, + 3.851612455717)); +#17660 = VECTOR('',#17661,1.); +#17661 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#17662 = ORIENTED_EDGE('',*,*,#17663,.F.); +#17663 = EDGE_CURVE('',#17664,#17656,#17666,.T.); +#17664 = VERTEX_POINT('',#17665); +#17665 = CARTESIAN_POINT('',(3.899974547317,-3.465036734706, + 0.350000019118)); +#17666 = LINE('',#17667,#17668); +#17667 = CARTESIAN_POINT('',(3.899974547317,-3.465036734706, + 0.350000019118)); +#17668 = VECTOR('',#17669,1.); +#17669 = DIRECTION('',(-6.693842098357E-15,1.,3.491481338843E-15)); +#17670 = ORIENTED_EDGE('',*,*,#17671,.F.); +#17671 = EDGE_CURVE('',#17640,#17664,#17672,.T.); +#17672 = LINE('',#17673,#17674); +#17673 = CARTESIAN_POINT('',(3.899974547317,-3.465036734706, + 3.851612455717)); +#17674 = VECTOR('',#17675,1.); +#17675 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#17676 = PLANE('',#17677); +#17677 = AXIS2_PLACEMENT_3D('',#17678,#17679,#17680); +#17678 = CARTESIAN_POINT('',(3.899974547317,-3.465036734706, + 3.851612455717)); +#17679 = DIRECTION('',(1.,6.693842098357E-15,-1.009459107404E-30)); +#17680 = DIRECTION('',(-6.693842098357E-15,1.,0.)); +#17681 = ADVANCED_FACE('',(#17682),#17724,.T.); +#17682 = FACE_BOUND('',#17683,.T.); +#17683 = EDGE_LOOP('',(#17684,#17694,#17702,#17710,#17718)); +#17684 = ORIENTED_EDGE('',*,*,#17685,.T.); +#17685 = EDGE_CURVE('',#17686,#17688,#17690,.T.); +#17686 = VERTEX_POINT('',#17687); +#17687 = CARTESIAN_POINT('',(3.599974551366,-1.965036754949, + 0.75000001372)); +#17688 = VERTEX_POINT('',#17689); +#17689 = CARTESIAN_POINT('',(3.599974551366,-3.265036737405, + 0.75000001372)); +#17690 = LINE('',#17691,#17692); +#17691 = CARTESIAN_POINT('',(3.599974551366,-3.465036734706, + 0.75000001372)); +#17692 = VECTOR('',#17693,1.); +#17693 = DIRECTION('',(7.272083257016E-15,-1.,-3.491481338843E-15)); +#17694 = ORIENTED_EDGE('',*,*,#17695,.T.); +#17695 = EDGE_CURVE('',#17688,#17696,#17698,.T.); +#17696 = VERTEX_POINT('',#17697); +#17697 = CARTESIAN_POINT('',(3.599974551366,-3.465036734706, + 0.550000016419)); +#17698 = LINE('',#17699,#17700); +#17699 = CARTESIAN_POINT('',(3.599974551366,-3.265036737405, + 0.75000001372)); +#17700 = VECTOR('',#17701,1.); +#17701 = DIRECTION('',(5.142139384386E-15,-0.707106781187, + -0.707106781187)); +#17702 = ORIENTED_EDGE('',*,*,#17703,.T.); +#17703 = EDGE_CURVE('',#17696,#17704,#17706,.T.); +#17704 = VERTEX_POINT('',#17705); +#17705 = CARTESIAN_POINT('',(3.599974551366,-3.465036734706, + 0.350000019118)); +#17706 = LINE('',#17707,#17708); +#17707 = CARTESIAN_POINT('',(3.599974551366,-3.465036734706, + 3.851612455717)); +#17708 = VECTOR('',#17709,1.); +#17709 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#17710 = ORIENTED_EDGE('',*,*,#17711,.T.); +#17711 = EDGE_CURVE('',#17704,#17712,#17714,.T.); +#17712 = VERTEX_POINT('',#17713); +#17713 = CARTESIAN_POINT('',(3.599974551366,-1.965036754949, + 0.350000019118)); +#17714 = LINE('',#17715,#17716); +#17715 = CARTESIAN_POINT('',(3.599974551366,-3.465036734706, + 0.350000019118)); +#17716 = VECTOR('',#17717,1.); +#17717 = DIRECTION('',(-7.272083257016E-15,1.,3.491481338843E-15)); +#17718 = ORIENTED_EDGE('',*,*,#17719,.F.); +#17719 = EDGE_CURVE('',#17686,#17712,#17720,.T.); +#17720 = LINE('',#17721,#17722); +#17721 = CARTESIAN_POINT('',(3.599974551366,-1.965036754949, + 3.851612455717)); +#17722 = VECTOR('',#17723,1.); +#17723 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#17724 = PLANE('',#17725); +#17725 = AXIS2_PLACEMENT_3D('',#17726,#17727,#17728); +#17726 = CARTESIAN_POINT('',(3.599974551366,-3.465036734706, + 3.851612455717)); +#17727 = DIRECTION('',(1.,7.272083257016E-15,1.009459107404E-30)); +#17728 = DIRECTION('',(-7.272083257016E-15,1.,0.)); +#17729 = ADVANCED_FACE('',(#17730),#17755,.F.); +#17730 = FACE_BOUND('',#17731,.T.); +#17731 = EDGE_LOOP('',(#17732,#17733,#17741,#17749)); +#17732 = ORIENTED_EDGE('',*,*,#17655,.F.); +#17733 = ORIENTED_EDGE('',*,*,#17734,.F.); +#17734 = EDGE_CURVE('',#17735,#17648,#17737,.T.); +#17735 = VERTEX_POINT('',#17736); +#17736 = CARTESIAN_POINT('',(4.299974541919,-1.965036754949, + 0.75000001372)); +#17737 = LINE('',#17738,#17739); +#17738 = CARTESIAN_POINT('',(3.199974556764,-1.965036754949, + 0.75000001372)); +#17739 = VECTOR('',#17740,1.); +#17740 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17741 = ORIENTED_EDGE('',*,*,#17742,.T.); +#17742 = EDGE_CURVE('',#17735,#17743,#17745,.T.); +#17743 = VERTEX_POINT('',#17744); +#17744 = CARTESIAN_POINT('',(4.299974541919,-1.965036754949, + 0.350000019118)); +#17745 = LINE('',#17746,#17747); +#17746 = CARTESIAN_POINT('',(4.299974541919,-1.965036754949, + 3.851612455717)); +#17747 = VECTOR('',#17748,1.); +#17748 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#17749 = ORIENTED_EDGE('',*,*,#17750,.F.); +#17750 = EDGE_CURVE('',#17656,#17743,#17751,.T.); +#17751 = LINE('',#17752,#17753); +#17752 = CARTESIAN_POINT('',(3.199974556764,-1.965036754949, + 0.350000019118)); +#17753 = VECTOR('',#17754,1.); +#17754 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17755 = PLANE('',#17756); +#17756 = AXIS2_PLACEMENT_3D('',#17757,#17758,#17759); +#17757 = CARTESIAN_POINT('',(3.199974556764,-1.965036754949, + 3.851612455717)); +#17758 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#17759 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#17760 = ADVANCED_FACE('',(#17761),#17786,.F.); +#17761 = FACE_BOUND('',#17762,.T.); +#17762 = EDGE_LOOP('',(#17763,#17771,#17772,#17780)); +#17763 = ORIENTED_EDGE('',*,*,#17764,.F.); +#17764 = EDGE_CURVE('',#17686,#17765,#17767,.T.); +#17765 = VERTEX_POINT('',#17766); +#17766 = CARTESIAN_POINT('',(3.199974556764,-1.965036754949, + 0.75000001372)); +#17767 = LINE('',#17768,#17769); +#17768 = CARTESIAN_POINT('',(3.199974556764,-1.965036754949, + 0.75000001372)); +#17769 = VECTOR('',#17770,1.); +#17770 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17771 = ORIENTED_EDGE('',*,*,#17719,.T.); +#17772 = ORIENTED_EDGE('',*,*,#17773,.F.); +#17773 = EDGE_CURVE('',#17774,#17712,#17776,.T.); +#17774 = VERTEX_POINT('',#17775); +#17775 = CARTESIAN_POINT('',(3.199974556764,-1.965036754949, + 0.350000019118)); +#17776 = LINE('',#17777,#17778); +#17777 = CARTESIAN_POINT('',(3.199974556764,-1.965036754949, + 0.350000019118)); +#17778 = VECTOR('',#17779,1.); +#17779 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17780 = ORIENTED_EDGE('',*,*,#17781,.F.); +#17781 = EDGE_CURVE('',#17765,#17774,#17782,.T.); +#17782 = LINE('',#17783,#17784); +#17783 = CARTESIAN_POINT('',(3.199974556764,-1.965036754949, + 3.851612455717)); +#17784 = VECTOR('',#17785,1.); +#17785 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#17786 = PLANE('',#17787); +#17787 = AXIS2_PLACEMENT_3D('',#17788,#17789,#17790); +#17788 = CARTESIAN_POINT('',(3.199974556764,-1.965036754949, + 3.851612455717)); +#17789 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#17790 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#17791 = ADVANCED_FACE('',(#17792),#17856,.T.); +#17792 = FACE_BOUND('',#17793,.T.); +#17793 = EDGE_LOOP('',(#17794,#17804,#17810,#17811,#17819,#17827,#17835, + #17843,#17849,#17850)); +#17794 = ORIENTED_EDGE('',*,*,#17795,.F.); +#17795 = EDGE_CURVE('',#17796,#17798,#17800,.T.); +#17796 = VERTEX_POINT('',#17797); +#17797 = CARTESIAN_POINT('',(3.199974556764,-0.465036775192, + 0.75000001372)); +#17798 = VERTEX_POINT('',#17799); +#17799 = CARTESIAN_POINT('',(4.299974541919,-0.465036775192, + 0.75000001372)); +#17800 = LINE('',#17801,#17802); +#17801 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 0.75000001372)); +#17802 = VECTOR('',#17803,1.); +#17803 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#17804 = ORIENTED_EDGE('',*,*,#17805,.T.); +#17805 = EDGE_CURVE('',#17796,#16815,#17806,.T.); +#17806 = LINE('',#17807,#17808); +#17807 = CARTESIAN_POINT('',(3.199974556764,0.934963205914,0.75000001372 + )); +#17808 = VECTOR('',#17809,1.); +#17809 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#17810 = ORIENTED_EDGE('',*,*,#16814,.F.); +#17811 = ORIENTED_EDGE('',*,*,#17812,.F.); +#17812 = EDGE_CURVE('',#17813,#16505,#17815,.T.); +#17813 = VERTEX_POINT('',#17814); +#17814 = CARTESIAN_POINT('',(3.299974555414,0.634963209963,0.75000001372 + )); +#17815 = LINE('',#17816,#17817); +#17816 = CARTESIAN_POINT('',(2.949974560138,0.634963209963,0.75000001372 + )); +#17817 = VECTOR('',#17818,1.); +#17818 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17819 = ORIENTED_EDGE('',*,*,#17820,.F.); +#17820 = EDGE_CURVE('',#17821,#17813,#17823,.T.); +#17821 = VERTEX_POINT('',#17822); +#17822 = CARTESIAN_POINT('',(3.299974555414,0.934963205914,0.75000001372 + )); +#17823 = LINE('',#17824,#17825); +#17824 = CARTESIAN_POINT('',(3.299974555414,0.934963205914,0.75000001372 + )); +#17825 = VECTOR('',#17826,1.); +#17826 = DIRECTION('',(4.091756884392E-15,-1.,-3.491481338843E-15)); +#17827 = ORIENTED_EDGE('',*,*,#17828,.F.); +#17828 = EDGE_CURVE('',#17829,#17821,#17831,.T.); +#17829 = VERTEX_POINT('',#17830); +#17830 = CARTESIAN_POINT('',(4.199974543269,0.934963205914,0.75000001372 + )); +#17831 = LINE('',#17832,#17833); +#17832 = CARTESIAN_POINT('',(3.199974556764,0.934963205914,0.75000001372 + )); +#17833 = VECTOR('',#17834,1.); +#17834 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17835 = ORIENTED_EDGE('',*,*,#17836,.F.); +#17836 = EDGE_CURVE('',#17837,#17829,#17839,.T.); +#17837 = VERTEX_POINT('',#17838); +#17838 = CARTESIAN_POINT('',(4.199974543269,0.634963209963,0.75000001372 + )); +#17839 = LINE('',#17840,#17841); +#17840 = CARTESIAN_POINT('',(4.199974543269,0.934963205914,0.75000001372 + )); +#17841 = VECTOR('',#17842,1.); +#17842 = DIRECTION('',(-9.874168470981E-15,1.,3.491481338843E-15)); +#17843 = ORIENTED_EDGE('',*,*,#17844,.F.); +#17844 = EDGE_CURVE('',#17165,#17837,#17845,.T.); +#17845 = LINE('',#17846,#17847); +#17846 = CARTESIAN_POINT('',(4.199974543269,0.634963209963,0.75000001372 + )); +#17847 = VECTOR('',#17848,1.); +#17848 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17849 = ORIENTED_EDGE('',*,*,#17512,.F.); +#17850 = ORIENTED_EDGE('',*,*,#17851,.F.); +#17851 = EDGE_CURVE('',#17798,#17505,#17852,.T.); +#17852 = LINE('',#17853,#17854); +#17853 = CARTESIAN_POINT('',(4.299974541919,0.934963205914,0.75000001372 + )); +#17854 = VECTOR('',#17855,1.); +#17855 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#17856 = PLANE('',#17857); +#17857 = AXIS2_PLACEMENT_3D('',#17858,#17859,#17860); +#17858 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 0.75000001372)); +#17859 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#17860 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#17861 = ADVANCED_FACE('',(#17862),#17879,.F.); +#17862 = FACE_BOUND('',#17863,.T.); +#17863 = EDGE_LOOP('',(#17864,#17870,#17871,#17872,#17878)); +#17864 = ORIENTED_EDGE('',*,*,#17865,.F.); +#17865 = EDGE_CURVE('',#16804,#17774,#17866,.T.); +#17866 = LINE('',#17867,#17868); +#17867 = CARTESIAN_POINT('',(3.199974556764,0.934963205914, + 0.350000019118)); +#17868 = VECTOR('',#17869,1.); +#17869 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#17870 = ORIENTED_EDGE('',*,*,#16822,.T.); +#17871 = ORIENTED_EDGE('',*,*,#17805,.F.); +#17872 = ORIENTED_EDGE('',*,*,#17873,.F.); +#17873 = EDGE_CURVE('',#17765,#17796,#17874,.T.); +#17874 = LINE('',#17875,#17876); +#17875 = CARTESIAN_POINT('',(3.199974556764,0.934963205914,0.75000001372 + )); +#17876 = VECTOR('',#17877,1.); +#17877 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#17878 = ORIENTED_EDGE('',*,*,#17781,.T.); +#17879 = PLANE('',#17880); +#17880 = AXIS2_PLACEMENT_3D('',#17881,#17882,#17883); +#17881 = CARTESIAN_POINT('',(3.199974556764,0.934963205914, + 3.851612455717)); +#17882 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17883 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#17884 = ADVANCED_FACE('',(#17885),#17902,.T.); +#17885 = FACE_BOUND('',#17886,.T.); +#17886 = EDGE_LOOP('',(#17887,#17888,#17894,#17895,#17901)); +#17887 = ORIENTED_EDGE('',*,*,#17504,.F.); +#17888 = ORIENTED_EDGE('',*,*,#17889,.T.); +#17889 = EDGE_CURVE('',#17497,#17743,#17890,.T.); +#17890 = LINE('',#17891,#17892); +#17891 = CARTESIAN_POINT('',(4.299974541919,0.934963205914, + 0.350000019118)); +#17892 = VECTOR('',#17893,1.); +#17893 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#17894 = ORIENTED_EDGE('',*,*,#17742,.F.); +#17895 = ORIENTED_EDGE('',*,*,#17896,.T.); +#17896 = EDGE_CURVE('',#17735,#17798,#17897,.T.); +#17897 = LINE('',#17898,#17899); +#17898 = CARTESIAN_POINT('',(4.299974541919,0.934963205914,0.75000001372 + )); +#17899 = VECTOR('',#17900,1.); +#17900 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#17901 = ORIENTED_EDGE('',*,*,#17851,.T.); +#17902 = PLANE('',#17903); +#17903 = AXIS2_PLACEMENT_3D('',#17904,#17905,#17906); +#17904 = CARTESIAN_POINT('',(4.299974541919,0.934963205914, + 3.851612455717)); +#17905 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#17906 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#17907 = ADVANCED_FACE('',(#17908),#17942,.F.); +#17908 = FACE_BOUND('',#17909,.T.); +#17909 = EDGE_LOOP('',(#17910,#17920,#17928,#17936)); +#17910 = ORIENTED_EDGE('',*,*,#17911,.F.); +#17911 = EDGE_CURVE('',#17912,#17914,#17916,.T.); +#17912 = VERTEX_POINT('',#17913); +#17913 = CARTESIAN_POINT('',(0.799974589153,0.934963205914, + 0.350000019118)); +#17914 = VERTEX_POINT('',#17915); +#17915 = CARTESIAN_POINT('',(0.799974589153,0.934963205914, + 3.599999975258)); +#17916 = LINE('',#17917,#17918); +#17917 = CARTESIAN_POINT('',(0.799974589153,0.934963205914, + 0.100000022492)); +#17918 = VECTOR('',#17919,1.); +#17919 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#17920 = ORIENTED_EDGE('',*,*,#17921,.T.); +#17921 = EDGE_CURVE('',#17912,#17922,#17924,.T.); +#17922 = VERTEX_POINT('',#17923); +#17923 = CARTESIAN_POINT('',(0.799974589153,0.634963209963, + 0.350000019118)); +#17924 = LINE('',#17925,#17926); +#17925 = CARTESIAN_POINT('',(0.799974589153,0.934963205914, + 0.350000019118)); +#17926 = VECTOR('',#17927,1.); +#17927 = DIRECTION('',(4.091756884392E-15,-1.,-3.491481338843E-15)); +#17928 = ORIENTED_EDGE('',*,*,#17929,.T.); +#17929 = EDGE_CURVE('',#17922,#17930,#17932,.T.); +#17930 = VERTEX_POINT('',#17931); +#17931 = CARTESIAN_POINT('',(0.799974589153,0.634963209963, + 3.599999975258)); +#17932 = LINE('',#17933,#17934); +#17933 = CARTESIAN_POINT('',(0.799974589153,0.634963209963, + 0.100000022492)); +#17934 = VECTOR('',#17935,1.); +#17935 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#17936 = ORIENTED_EDGE('',*,*,#17937,.F.); +#17937 = EDGE_CURVE('',#17914,#17930,#17938,.T.); +#17938 = LINE('',#17939,#17940); +#17939 = CARTESIAN_POINT('',(0.799974589153,0.934963205914, + 3.599999975258)); +#17940 = VECTOR('',#17941,1.); +#17941 = DIRECTION('',(4.091756884392E-15,-1.,-3.491481338843E-15)); +#17942 = PLANE('',#17943); +#17943 = AXIS2_PLACEMENT_3D('',#17944,#17945,#17946); +#17944 = CARTESIAN_POINT('',(0.799974589153,0.934963205914, + 0.100000022492)); +#17945 = DIRECTION('',(1.,4.091756884392E-15,-1.009459107404E-29)); +#17946 = DIRECTION('',(-4.091756884392E-15,1.,0.)); +#17947 = ADVANCED_FACE('',(#17948),#17982,.F.); +#17948 = FACE_BOUND('',#17949,.T.); +#17949 = EDGE_LOOP('',(#17950,#17960,#17968,#17976)); +#17950 = ORIENTED_EDGE('',*,*,#17951,.F.); +#17951 = EDGE_CURVE('',#17952,#17954,#17956,.T.); +#17952 = VERTEX_POINT('',#17953); +#17953 = CARTESIAN_POINT('',(0.449974593876,0.634963209963, + 0.350000019118)); +#17954 = VERTEX_POINT('',#17955); +#17955 = CARTESIAN_POINT('',(0.449974593876,0.634963209963, + 3.599999975258)); +#17956 = LINE('',#17957,#17958); +#17957 = CARTESIAN_POINT('',(0.449974593876,0.634963209963, + 0.100000022492)); +#17958 = VECTOR('',#17959,1.); +#17959 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#17960 = ORIENTED_EDGE('',*,*,#17961,.T.); +#17961 = EDGE_CURVE('',#17952,#17962,#17964,.T.); +#17962 = VERTEX_POINT('',#17963); +#17963 = CARTESIAN_POINT('',(0.449974593876,0.934963205914, + 0.350000019118)); +#17964 = LINE('',#17965,#17966); +#17965 = CARTESIAN_POINT('',(0.449974593876,0.934963205914, + 0.350000019118)); +#17966 = VECTOR('',#17967,1.); +#17967 = DIRECTION('',(-9.874168470981E-15,1.,3.491481338843E-15)); +#17968 = ORIENTED_EDGE('',*,*,#17969,.T.); +#17969 = EDGE_CURVE('',#17962,#17970,#17972,.T.); +#17970 = VERTEX_POINT('',#17971); +#17971 = CARTESIAN_POINT('',(0.449974593876,0.934963205914, + 3.599999975258)); +#17972 = LINE('',#17973,#17974); +#17973 = CARTESIAN_POINT('',(0.449974593876,0.934963205914, + 0.100000022492)); +#17974 = VECTOR('',#17975,1.); +#17975 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#17976 = ORIENTED_EDGE('',*,*,#17977,.F.); +#17977 = EDGE_CURVE('',#17954,#17970,#17978,.T.); +#17978 = LINE('',#17979,#17980); +#17979 = CARTESIAN_POINT('',(0.449974593876,0.934963205914, + 3.599999975258)); +#17980 = VECTOR('',#17981,1.); +#17981 = DIRECTION('',(-9.874168470981E-15,1.,3.491481338843E-15)); +#17982 = PLANE('',#17983); +#17983 = AXIS2_PLACEMENT_3D('',#17984,#17985,#17986); +#17984 = CARTESIAN_POINT('',(0.449974593876,0.934963205914, + 0.100000022492)); +#17985 = DIRECTION('',(-1.,-9.874168470981E-15,-1.009459107404E-29)); +#17986 = DIRECTION('',(-9.874168470981E-15,1.,0.)); +#17987 = ADVANCED_FACE('',(#17988),#18022,.F.); +#17988 = FACE_BOUND('',#17989,.T.); +#17989 = EDGE_LOOP('',(#17990,#18000,#18008,#18016)); +#17990 = ORIENTED_EDGE('',*,*,#17991,.F.); +#17991 = EDGE_CURVE('',#17992,#17994,#17996,.T.); +#17992 = VERTEX_POINT('',#17993); +#17993 = CARTESIAN_POINT('',(2.049974572284,0.934963205914, + 0.350000019118)); +#17994 = VERTEX_POINT('',#17995); +#17995 = CARTESIAN_POINT('',(2.049974572284,0.934963205914, + 3.599999975258)); +#17996 = LINE('',#17997,#17998); +#17997 = CARTESIAN_POINT('',(2.049974572284,0.934963205914, + 0.100000022492)); +#17998 = VECTOR('',#17999,1.); +#17999 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18000 = ORIENTED_EDGE('',*,*,#18001,.T.); +#18001 = EDGE_CURVE('',#17992,#18002,#18004,.T.); +#18002 = VERTEX_POINT('',#18003); +#18003 = CARTESIAN_POINT('',(2.049974572284,0.634963209963, + 0.350000019118)); +#18004 = LINE('',#18005,#18006); +#18005 = CARTESIAN_POINT('',(2.049974572284,0.934963205914, + 0.350000019118)); +#18006 = VECTOR('',#18007,1.); +#18007 = DIRECTION('',(4.091756884392E-15,-1.,-3.491481338843E-15)); +#18008 = ORIENTED_EDGE('',*,*,#18009,.T.); +#18009 = EDGE_CURVE('',#18002,#18010,#18012,.T.); +#18010 = VERTEX_POINT('',#18011); +#18011 = CARTESIAN_POINT('',(2.049974572284,0.634963209963, + 3.599999975258)); +#18012 = LINE('',#18013,#18014); +#18013 = CARTESIAN_POINT('',(2.049974572284,0.634963209963, + 0.100000022492)); +#18014 = VECTOR('',#18015,1.); +#18015 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18016 = ORIENTED_EDGE('',*,*,#18017,.F.); +#18017 = EDGE_CURVE('',#17994,#18010,#18018,.T.); +#18018 = LINE('',#18019,#18020); +#18019 = CARTESIAN_POINT('',(2.049974572284,0.934963205914, + 3.599999975258)); +#18020 = VECTOR('',#18021,1.); +#18021 = DIRECTION('',(4.091756884392E-15,-1.,-3.491481338843E-15)); +#18022 = PLANE('',#18023); +#18023 = AXIS2_PLACEMENT_3D('',#18024,#18025,#18026); +#18024 = CARTESIAN_POINT('',(2.049974572284,0.934963205914, + 0.100000022492)); +#18025 = DIRECTION('',(1.,4.091756884392E-15,-1.009459107404E-29)); +#18026 = DIRECTION('',(-4.091756884392E-15,1.,0.)); +#18027 = ADVANCED_FACE('',(#18028),#18062,.F.); +#18028 = FACE_BOUND('',#18029,.T.); +#18029 = EDGE_LOOP('',(#18030,#18040,#18048,#18056)); +#18030 = ORIENTED_EDGE('',*,*,#18031,.F.); +#18031 = EDGE_CURVE('',#18032,#18034,#18036,.T.); +#18032 = VERTEX_POINT('',#18033); +#18033 = CARTESIAN_POINT('',(1.699974577007,0.634963209963, + 0.350000019118)); +#18034 = VERTEX_POINT('',#18035); +#18035 = CARTESIAN_POINT('',(1.699974577007,0.634963209963, + 3.599999975258)); +#18036 = LINE('',#18037,#18038); +#18037 = CARTESIAN_POINT('',(1.699974577007,0.634963209963, + 0.100000022492)); +#18038 = VECTOR('',#18039,1.); +#18039 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18040 = ORIENTED_EDGE('',*,*,#18041,.T.); +#18041 = EDGE_CURVE('',#18032,#18042,#18044,.T.); +#18042 = VERTEX_POINT('',#18043); +#18043 = CARTESIAN_POINT('',(1.699974577007,0.934963205914, + 0.350000019118)); +#18044 = LINE('',#18045,#18046); +#18045 = CARTESIAN_POINT('',(1.699974577007,0.934963205914, + 0.350000019118)); +#18046 = VECTOR('',#18047,1.); +#18047 = DIRECTION('',(-9.874168470981E-15,1.,3.491481338843E-15)); +#18048 = ORIENTED_EDGE('',*,*,#18049,.T.); +#18049 = EDGE_CURVE('',#18042,#18050,#18052,.T.); +#18050 = VERTEX_POINT('',#18051); +#18051 = CARTESIAN_POINT('',(1.699974577007,0.934963205914, + 3.599999975258)); +#18052 = LINE('',#18053,#18054); +#18053 = CARTESIAN_POINT('',(1.699974577007,0.934963205914, + 0.100000022492)); +#18054 = VECTOR('',#18055,1.); +#18055 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18056 = ORIENTED_EDGE('',*,*,#18057,.F.); +#18057 = EDGE_CURVE('',#18034,#18050,#18058,.T.); +#18058 = LINE('',#18059,#18060); +#18059 = CARTESIAN_POINT('',(1.699974577007,0.934963205914, + 3.599999975258)); +#18060 = VECTOR('',#18061,1.); +#18061 = DIRECTION('',(-9.874168470981E-15,1.,3.491481338843E-15)); +#18062 = PLANE('',#18063); +#18063 = AXIS2_PLACEMENT_3D('',#18064,#18065,#18066); +#18064 = CARTESIAN_POINT('',(1.699974577007,0.934963205914, + 0.100000022492)); +#18065 = DIRECTION('',(-1.,-9.874168470981E-15,-1.009459107404E-29)); +#18066 = DIRECTION('',(-9.874168470981E-15,1.,0.)); +#18067 = ADVANCED_FACE('',(#18068),#18102,.F.); +#18068 = FACE_BOUND('',#18069,.T.); +#18069 = EDGE_LOOP('',(#18070,#18080,#18088,#18096)); +#18070 = ORIENTED_EDGE('',*,*,#18071,.F.); +#18071 = EDGE_CURVE('',#18072,#18074,#18076,.T.); +#18072 = VERTEX_POINT('',#18073); +#18073 = CARTESIAN_POINT('',(2.949974560138,0.634963209963, + 0.350000019118)); +#18074 = VERTEX_POINT('',#18075); +#18075 = CARTESIAN_POINT('',(2.949974560138,0.634963209963, + 3.599999975258)); +#18076 = LINE('',#18077,#18078); +#18077 = CARTESIAN_POINT('',(2.949974560138,0.634963209963, + 0.100000022492)); +#18078 = VECTOR('',#18079,1.); +#18079 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18080 = ORIENTED_EDGE('',*,*,#18081,.T.); +#18081 = EDGE_CURVE('',#18072,#18082,#18084,.T.); +#18082 = VERTEX_POINT('',#18083); +#18083 = CARTESIAN_POINT('',(2.949974560138,0.934963205914, + 0.350000019118)); +#18084 = LINE('',#18085,#18086); +#18085 = CARTESIAN_POINT('',(2.949974560138,0.934963205914, + 0.350000019118)); +#18086 = VECTOR('',#18087,1.); +#18087 = DIRECTION('',(-9.874168470981E-15,1.,3.491481338843E-15)); +#18088 = ORIENTED_EDGE('',*,*,#18089,.T.); +#18089 = EDGE_CURVE('',#18082,#18090,#18092,.T.); +#18090 = VERTEX_POINT('',#18091); +#18091 = CARTESIAN_POINT('',(2.949974560138,0.934963205914, + 3.599999975258)); +#18092 = LINE('',#18093,#18094); +#18093 = CARTESIAN_POINT('',(2.949974560138,0.934963205914, + 0.100000022492)); +#18094 = VECTOR('',#18095,1.); +#18095 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18096 = ORIENTED_EDGE('',*,*,#18097,.F.); +#18097 = EDGE_CURVE('',#18074,#18090,#18098,.T.); +#18098 = LINE('',#18099,#18100); +#18099 = CARTESIAN_POINT('',(2.949974560138,0.934963205914, + 3.599999975258)); +#18100 = VECTOR('',#18101,1.); +#18101 = DIRECTION('',(-9.874168470981E-15,1.,3.491481338843E-15)); +#18102 = PLANE('',#18103); +#18103 = AXIS2_PLACEMENT_3D('',#18104,#18105,#18106); +#18104 = CARTESIAN_POINT('',(2.949974560138,0.934963205914, + 0.100000022492)); +#18105 = DIRECTION('',(-1.,-9.874168470981E-15,-1.009459107404E-29)); +#18106 = DIRECTION('',(-9.874168470981E-15,1.,0.)); +#18107 = ADVANCED_FACE('',(#18108),#18142,.F.); +#18108 = FACE_BOUND('',#18109,.T.); +#18109 = EDGE_LOOP('',(#18110,#18120,#18128,#18136)); +#18110 = ORIENTED_EDGE('',*,*,#18111,.F.); +#18111 = EDGE_CURVE('',#18112,#18114,#18116,.T.); +#18112 = VERTEX_POINT('',#18113); +#18113 = CARTESIAN_POINT('',(4.549974538545,0.934963205914, + 0.350000019118)); +#18114 = VERTEX_POINT('',#18115); +#18115 = CARTESIAN_POINT('',(4.549974538545,0.934963205914, + 3.599999975258)); +#18116 = LINE('',#18117,#18118); +#18117 = CARTESIAN_POINT('',(4.549974538545,0.934963205914, + 0.100000022492)); +#18118 = VECTOR('',#18119,1.); +#18119 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18120 = ORIENTED_EDGE('',*,*,#18121,.T.); +#18121 = EDGE_CURVE('',#18112,#18122,#18124,.T.); +#18122 = VERTEX_POINT('',#18123); +#18123 = CARTESIAN_POINT('',(4.549974538545,0.634963209963, + 0.350000019118)); +#18124 = LINE('',#18125,#18126); +#18125 = CARTESIAN_POINT('',(4.549974538545,0.934963205914, + 0.350000019118)); +#18126 = VECTOR('',#18127,1.); +#18127 = DIRECTION('',(4.091756884392E-15,-1.,-3.491481338843E-15)); +#18128 = ORIENTED_EDGE('',*,*,#18129,.T.); +#18129 = EDGE_CURVE('',#18122,#18130,#18132,.T.); +#18130 = VERTEX_POINT('',#18131); +#18131 = CARTESIAN_POINT('',(4.549974538545,0.634963209963, + 3.599999975258)); +#18132 = LINE('',#18133,#18134); +#18133 = CARTESIAN_POINT('',(4.549974538545,0.634963209963, + 0.100000022492)); +#18134 = VECTOR('',#18135,1.); +#18135 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18136 = ORIENTED_EDGE('',*,*,#18137,.F.); +#18137 = EDGE_CURVE('',#18114,#18130,#18138,.T.); +#18138 = LINE('',#18139,#18140); +#18139 = CARTESIAN_POINT('',(4.549974538545,0.934963205914, + 3.599999975258)); +#18140 = VECTOR('',#18141,1.); +#18141 = DIRECTION('',(4.091756884392E-15,-1.,-3.491481338843E-15)); +#18142 = PLANE('',#18143); +#18143 = AXIS2_PLACEMENT_3D('',#18144,#18145,#18146); +#18144 = CARTESIAN_POINT('',(4.549974538545,0.934963205914, + 0.100000022492)); +#18145 = DIRECTION('',(1.,4.091756884392E-15,-1.009459107404E-29)); +#18146 = DIRECTION('',(-4.091756884392E-15,1.,0.)); +#18147 = ADVANCED_FACE('',(#18148),#18182,.F.); +#18148 = FACE_BOUND('',#18149,.T.); +#18149 = EDGE_LOOP('',(#18150,#18160,#18168,#18176)); +#18150 = ORIENTED_EDGE('',*,*,#18151,.F.); +#18151 = EDGE_CURVE('',#18152,#18154,#18156,.T.); +#18152 = VERTEX_POINT('',#18153); +#18153 = CARTESIAN_POINT('',(6.049974518302,-3.365036736056, + 2.299999992802)); +#18154 = VERTEX_POINT('',#18155); +#18155 = CARTESIAN_POINT('',(6.049974518302,-3.365036736056, + 1.500000003599)); +#18156 = LINE('',#18157,#18158); +#18157 = CARTESIAN_POINT('',(6.049974518302,-3.365036736056, + 3.099999982006)); +#18158 = VECTOR('',#18159,1.); +#18159 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18160 = ORIENTED_EDGE('',*,*,#18161,.F.); +#18161 = EDGE_CURVE('',#18162,#18152,#18164,.T.); +#18162 = VERTEX_POINT('',#18163); +#18163 = CARTESIAN_POINT('',(6.049974518302,-0.465036775192, + 2.299999992802)); +#18164 = LINE('',#18165,#18166); +#18165 = CARTESIAN_POINT('',(6.049974518302,11.661380504079, + 2.299999992802)); +#18166 = VECTOR('',#18167,1.); +#18167 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18168 = ORIENTED_EDGE('',*,*,#18169,.T.); +#18169 = EDGE_CURVE('',#18162,#18170,#18172,.T.); +#18170 = VERTEX_POINT('',#18171); +#18171 = CARTESIAN_POINT('',(6.049974518302,-0.465036775192, + 1.500000003599)); +#18172 = LINE('',#18173,#18174); +#18173 = CARTESIAN_POINT('',(6.049974518302,-0.465036775192, + 2.299999992802)); +#18174 = VECTOR('',#18175,1.); +#18175 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18176 = ORIENTED_EDGE('',*,*,#18177,.T.); +#18177 = EDGE_CURVE('',#18170,#18154,#18178,.T.); +#18178 = LINE('',#18179,#18180); +#18179 = CARTESIAN_POINT('',(6.049974518302,11.661380504079, + 1.500000003599)); +#18180 = VECTOR('',#18181,1.); +#18181 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18182 = PLANE('',#18183); +#18183 = AXIS2_PLACEMENT_3D('',#18184,#18185,#18186); +#18184 = CARTESIAN_POINT('',(6.049974518302,11.661380504079, + 2.299999992802)); +#18185 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18186 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#18187 = ADVANCED_FACE('',(#18188),#18213,.F.); +#18188 = FACE_BOUND('',#18189,.T.); +#18189 = EDGE_LOOP('',(#18190,#18198,#18206,#18212)); +#18190 = ORIENTED_EDGE('',*,*,#18191,.F.); +#18191 = EDGE_CURVE('',#18192,#18152,#18194,.T.); +#18192 = VERTEX_POINT('',#18193); +#18193 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 2.299999992802)); +#18194 = LINE('',#18195,#18196); +#18195 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 2.299999992802)); +#18196 = VECTOR('',#18197,1.); +#18197 = DIRECTION('',(0.707106781187,-0.707106781187,-2.46885013108E-15 + )); +#18198 = ORIENTED_EDGE('',*,*,#18199,.T.); +#18199 = EDGE_CURVE('',#18192,#18200,#18202,.T.); +#18200 = VERTEX_POINT('',#18201); +#18201 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 2.299999992802)); +#18202 = LINE('',#18203,#18204); +#18203 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 2.299999992802)); +#18204 = VECTOR('',#18205,1.); +#18205 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#18206 = ORIENTED_EDGE('',*,*,#18207,.T.); +#18207 = EDGE_CURVE('',#18200,#18162,#18208,.T.); +#18208 = LINE('',#18209,#18210); +#18209 = CARTESIAN_POINT('',(-6.050025318404,-0.465036775192, + 2.299999992802)); +#18210 = VECTOR('',#18211,1.); +#18211 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18212 = ORIENTED_EDGE('',*,*,#18161,.T.); +#18213 = PLANE('',#18214); +#18214 = AXIS2_PLACEMENT_3D('',#18215,#18216,#18217); +#18215 = CARTESIAN_POINT('',(-6.050025318404,11.661380504079, + 2.299999992802)); +#18216 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18217 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#18218 = ADVANCED_FACE('',(#18219),#18244,.F.); +#18219 = FACE_BOUND('',#18220,.T.); +#18220 = EDGE_LOOP('',(#18221,#18229,#18237,#18243)); +#18221 = ORIENTED_EDGE('',*,*,#18222,.T.); +#18222 = EDGE_CURVE('',#18170,#18223,#18225,.T.); +#18223 = VERTEX_POINT('',#18224); +#18224 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 1.500000003599)); +#18225 = LINE('',#18226,#18227); +#18226 = CARTESIAN_POINT('',(-6.050025318404,-0.465036775192, + 1.500000003599)); +#18227 = VECTOR('',#18228,1.); +#18228 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18229 = ORIENTED_EDGE('',*,*,#18230,.T.); +#18230 = EDGE_CURVE('',#18223,#18231,#18233,.T.); +#18231 = VERTEX_POINT('',#18232); +#18232 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 1.500000003599)); +#18233 = LINE('',#18234,#18235); +#18234 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 1.500000003599)); +#18235 = VECTOR('',#18236,1.); +#18236 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18237 = ORIENTED_EDGE('',*,*,#18238,.F.); +#18238 = EDGE_CURVE('',#18154,#18231,#18239,.T.); +#18239 = LINE('',#18240,#18241); +#18240 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 1.500000003599)); +#18241 = VECTOR('',#18242,1.); +#18242 = DIRECTION('',(-0.707106781187,0.707106781187,2.46885013108E-15) + ); +#18243 = ORIENTED_EDGE('',*,*,#18177,.F.); +#18244 = PLANE('',#18245); +#18245 = AXIS2_PLACEMENT_3D('',#18246,#18247,#18248); +#18246 = CARTESIAN_POINT('',(-6.050025318404,11.661380504079, + 1.500000003599)); +#18247 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18248 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#18249 = ADVANCED_FACE('',(#18250),#18292,.F.); +#18250 = FACE_BOUND('',#18251,.T.); +#18251 = EDGE_LOOP('',(#18252,#18262,#18270,#18278,#18286)); +#18252 = ORIENTED_EDGE('',*,*,#18253,.F.); +#18253 = EDGE_CURVE('',#18254,#18256,#18258,.T.); +#18254 = VERTEX_POINT('',#18255); +#18255 = CARTESIAN_POINT('',(5.54997452505,-2.265036750901, + 3.599999975258)); +#18256 = VERTEX_POINT('',#18257); +#18257 = CARTESIAN_POINT('',(5.54997452505,-2.265036750901, + 3.099999982006)); +#18258 = LINE('',#18259,#18260); +#18259 = CARTESIAN_POINT('',(5.54997452505,-2.265036750901, + 3.099999982006)); +#18260 = VECTOR('',#18261,1.); +#18261 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18262 = ORIENTED_EDGE('',*,*,#18263,.F.); +#18263 = EDGE_CURVE('',#18264,#18254,#18266,.T.); +#18264 = VERTEX_POINT('',#18265); +#18265 = CARTESIAN_POINT('',(5.54997452505,-1.715036758323, + 3.599999975258)); +#18266 = LINE('',#18267,#18268); +#18267 = CARTESIAN_POINT('',(5.54997452505,-1.715036758323, + 3.599999975258)); +#18268 = VECTOR('',#18269,1.); +#18269 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18270 = ORIENTED_EDGE('',*,*,#18271,.T.); +#18271 = EDGE_CURVE('',#18264,#18272,#18274,.T.); +#18272 = VERTEX_POINT('',#18273); +#18273 = CARTESIAN_POINT('',(5.54997452505,-1.715036758323, + 3.399999977958)); +#18274 = LINE('',#18275,#18276); +#18275 = CARTESIAN_POINT('',(5.54997452505,-1.715036758323, + 3.099999982006)); +#18276 = VECTOR('',#18277,1.); +#18277 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18278 = ORIENTED_EDGE('',*,*,#18279,.F.); +#18279 = EDGE_CURVE('',#18280,#18272,#18282,.T.); +#18280 = VERTEX_POINT('',#18281); +#18281 = CARTESIAN_POINT('',(5.54997452505,-1.415036762372, + 3.099999982006)); +#18282 = LINE('',#18283,#18284); +#18283 = CARTESIAN_POINT('',(5.54997452505,-1.565036760347, + 3.249999979982)); +#18284 = VECTOR('',#18285,1.); +#18285 = DIRECTION('',(4.937700262162E-15,-0.707106781187,0.707106781187 + )); +#18286 = ORIENTED_EDGE('',*,*,#18287,.T.); +#18287 = EDGE_CURVE('',#18280,#18256,#18288,.T.); +#18288 = LINE('',#18289,#18290); +#18289 = CARTESIAN_POINT('',(5.54997452505,-1.715036758323, + 3.099999982006)); +#18290 = VECTOR('',#18291,1.); +#18291 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18292 = PLANE('',#18293); +#18293 = AXIS2_PLACEMENT_3D('',#18294,#18295,#18296); +#18294 = CARTESIAN_POINT('',(5.54997452505,-1.715036758323, + 3.099999982006)); +#18295 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18296 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#18297 = ADVANCED_FACE('',(#18298),#18331,.T.); +#18298 = FACE_BOUND('',#18299,.T.); +#18299 = EDGE_LOOP('',(#18300,#18301,#18309,#18317,#18325)); +#18300 = ORIENTED_EDGE('',*,*,#18253,.T.); +#18301 = ORIENTED_EDGE('',*,*,#18302,.F.); +#18302 = EDGE_CURVE('',#18303,#18256,#18305,.T.); +#18303 = VERTEX_POINT('',#18304); +#18304 = CARTESIAN_POINT('',(5.949974519652,-2.265036750901, + 3.099999982006)); +#18305 = LINE('',#18306,#18307); +#18306 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 3.099999982006)); +#18307 = VECTOR('',#18308,1.); +#18308 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18309 = ORIENTED_EDGE('',*,*,#18310,.F.); +#18310 = EDGE_CURVE('',#18311,#18303,#18313,.T.); +#18311 = VERTEX_POINT('',#18312); +#18312 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 3.099999982006)); +#18313 = LINE('',#18314,#18315); +#18314 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 3.099999982006)); +#18315 = VECTOR('',#18316,1.); +#18316 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18317 = ORIENTED_EDGE('',*,*,#18318,.F.); +#18318 = EDGE_CURVE('',#18319,#18311,#18321,.T.); +#18319 = VERTEX_POINT('',#18320); +#18320 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 3.599999975258)); +#18321 = LINE('',#18322,#18323); +#18322 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 3.099999982006)); +#18323 = VECTOR('',#18324,1.); +#18324 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18325 = ORIENTED_EDGE('',*,*,#18326,.F.); +#18326 = EDGE_CURVE('',#18254,#18319,#18327,.T.); +#18327 = LINE('',#18328,#18329); +#18328 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 3.599999975258)); +#18329 = VECTOR('',#18330,1.); +#18330 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18331 = PLANE('',#18332); +#18332 = AXIS2_PLACEMENT_3D('',#18333,#18334,#18335); +#18333 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 1.849999998875)); +#18334 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18335 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#18336 = ADVANCED_FACE('',(#18337),#18370,.F.); +#18337 = FACE_BOUND('',#18338,.T.); +#18338 = EDGE_LOOP('',(#18339,#18340,#18348,#18356,#18364)); +#18339 = ORIENTED_EDGE('',*,*,#18310,.T.); +#18340 = ORIENTED_EDGE('',*,*,#18341,.T.); +#18341 = EDGE_CURVE('',#18303,#18342,#18344,.T.); +#18342 = VERTEX_POINT('',#18343); +#18343 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 3.099999982006)); +#18344 = LINE('',#18345,#18346); +#18345 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 3.099999982006)); +#18346 = VECTOR('',#18347,1.); +#18347 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18348 = ORIENTED_EDGE('',*,*,#18349,.F.); +#18349 = EDGE_CURVE('',#18350,#18342,#18352,.T.); +#18350 = VERTEX_POINT('',#18351); +#18351 = CARTESIAN_POINT('',(6.149974516953,-3.465036734706, + 3.099999982006)); +#18352 = LINE('',#18353,#18354); +#18353 = CARTESIAN_POINT('',(-1.400025381157,4.084963163404, + 3.099999982006)); +#18354 = VECTOR('',#18355,1.); +#18355 = DIRECTION('',(-0.707106781187,0.707106781187,2.46885013108E-15) + ); +#18356 = ORIENTED_EDGE('',*,*,#18357,.F.); +#18357 = EDGE_CURVE('',#18358,#18350,#18360,.T.); +#18358 = VERTEX_POINT('',#18359); +#18359 = CARTESIAN_POINT('',(6.499974512229,-3.465036734706, + 3.099999982006)); +#18360 = LINE('',#18361,#18362); +#18361 = CARTESIAN_POINT('',(-6.500025312331,-3.465036734706, + 3.099999982006)); +#18362 = VECTOR('',#18363,1.); +#18363 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18364 = ORIENTED_EDGE('',*,*,#18365,.F.); +#18365 = EDGE_CURVE('',#18311,#18358,#18366,.T.); +#18366 = LINE('',#18367,#18368); +#18367 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 3.099999982006)); +#18368 = VECTOR('',#18369,1.); +#18369 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18370 = PLANE('',#18371); +#18371 = AXIS2_PLACEMENT_3D('',#18372,#18373,#18374); +#18372 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 3.099999982006)); +#18373 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18374 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#18375 = ADVANCED_FACE('',(#18376),#18410,.F.); +#18376 = FACE_BOUND('',#18377,.T.); +#18377 = EDGE_LOOP('',(#18378,#18388,#18396,#18404)); +#18378 = ORIENTED_EDGE('',*,*,#18379,.F.); +#18379 = EDGE_CURVE('',#18380,#18382,#18384,.T.); +#18380 = VERTEX_POINT('',#18381); +#18381 = CARTESIAN_POINT('',(5.949974519652,-3.465036734706, + 0.350000019118)); +#18382 = VERTEX_POINT('',#18383); +#18383 = CARTESIAN_POINT('',(5.949974519652,-3.465036734706, + 0.100000022492)); +#18384 = LINE('',#18385,#18386); +#18385 = CARTESIAN_POINT('',(5.949974519652,-3.465036734706, + 0.100000022492)); +#18386 = VECTOR('',#18387,1.); +#18387 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18388 = ORIENTED_EDGE('',*,*,#18389,.F.); +#18389 = EDGE_CURVE('',#18390,#18380,#18392,.T.); +#18390 = VERTEX_POINT('',#18391); +#18391 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#18392 = LINE('',#18393,#18394); +#18393 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#18394 = VECTOR('',#18395,1.); +#18395 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18396 = ORIENTED_EDGE('',*,*,#18397,.T.); +#18397 = EDGE_CURVE('',#18390,#18398,#18400,.T.); +#18398 = VERTEX_POINT('',#18399); +#18399 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.100000022492)); +#18400 = LINE('',#18401,#18402); +#18401 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.100000022492)); +#18402 = VECTOR('',#18403,1.); +#18403 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18404 = ORIENTED_EDGE('',*,*,#18405,.T.); +#18405 = EDGE_CURVE('',#18398,#18382,#18406,.T.); +#18406 = LINE('',#18407,#18408); +#18407 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.100000022492)); +#18408 = VECTOR('',#18409,1.); +#18409 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18410 = PLANE('',#18411); +#18411 = AXIS2_PLACEMENT_3D('',#18412,#18413,#18414); +#18412 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.100000022492)); +#18413 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18414 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#18415 = ADVANCED_FACE('',(#18416),#18450,.F.); +#18416 = FACE_BOUND('',#18417,.T.); +#18417 = EDGE_LOOP('',(#18418,#18419,#18427,#18435,#18441,#18442,#18448, + #18449)); +#18418 = ORIENTED_EDGE('',*,*,#18238,.T.); +#18419 = ORIENTED_EDGE('',*,*,#18420,.T.); +#18420 = EDGE_CURVE('',#18231,#18421,#18423,.T.); +#18421 = VERTEX_POINT('',#18422); +#18422 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 0.75000001372)); +#18423 = LINE('',#18424,#18425); +#18424 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 3.099999982006)); +#18425 = VECTOR('',#18426,1.); +#18426 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18427 = ORIENTED_EDGE('',*,*,#18428,.T.); +#18428 = EDGE_CURVE('',#18421,#18429,#18431,.T.); +#18429 = VERTEX_POINT('',#18430); +#18430 = CARTESIAN_POINT('',(6.149974516953,-3.465036734706, + 0.550000016419)); +#18431 = LINE('',#18432,#18433); +#18432 = CARTESIAN_POINT('',(5.16664119689,-2.481703414643, + 1.533333336482)); +#18433 = VECTOR('',#18434,1.); +#18434 = DIRECTION('',(0.57735026919,-0.57735026919,-0.57735026919)); +#18435 = ORIENTED_EDGE('',*,*,#18436,.T.); +#18436 = EDGE_CURVE('',#18429,#18350,#18437,.T.); +#18437 = LINE('',#18438,#18439); +#18438 = CARTESIAN_POINT('',(6.149974516953,-3.465036734706, + 1.849999998875)); +#18439 = VECTOR('',#18440,1.); +#18440 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18441 = ORIENTED_EDGE('',*,*,#18349,.T.); +#18442 = ORIENTED_EDGE('',*,*,#18443,.T.); +#18443 = EDGE_CURVE('',#18342,#18192,#18444,.T.); +#18444 = LINE('',#18445,#18446); +#18445 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 3.099999982006)); +#18446 = VECTOR('',#18447,1.); +#18447 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18448 = ORIENTED_EDGE('',*,*,#18191,.T.); +#18449 = ORIENTED_EDGE('',*,*,#18151,.T.); +#18450 = PLANE('',#18451); +#18451 = AXIS2_PLACEMENT_3D('',#18452,#18453,#18454); +#18452 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 3.099999982006)); +#18453 = DIRECTION('',(0.707106781187,0.707106781187,2.46885013108E-15) + ); +#18454 = DIRECTION('',(0.,3.491481338841E-15,-1.)); +#18455 = ADVANCED_FACE('',(#18456),#18472,.F.); +#18456 = FACE_BOUND('',#18457,.T.); +#18457 = EDGE_LOOP('',(#18458,#18459,#18465,#18466)); +#18458 = ORIENTED_EDGE('',*,*,#17637,.T.); +#18459 = ORIENTED_EDGE('',*,*,#18460,.T.); +#18460 = EDGE_CURVE('',#17640,#18429,#18461,.T.); +#18461 = LINE('',#18462,#18463); +#18462 = CARTESIAN_POINT('',(-2.540005076938E-05,-3.465036734706, + 0.550000016419)); +#18463 = VECTOR('',#18464,1.); +#18464 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18465 = ORIENTED_EDGE('',*,*,#18428,.F.); +#18466 = ORIENTED_EDGE('',*,*,#18467,.T.); +#18467 = EDGE_CURVE('',#18421,#17638,#18468,.T.); +#18468 = LINE('',#18469,#18470); +#18469 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 0.75000001372)); +#18470 = VECTOR('',#18471,1.); +#18471 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18472 = PLANE('',#18473); +#18473 = AXIS2_PLACEMENT_3D('',#18474,#18475,#18476); +#18474 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 0.75000001372)); +#18475 = DIRECTION('',(-4.937700262162E-15,0.707106781187, + -0.707106781187)); +#18476 = DIRECTION('',(-1.,-3.944304526105E-31,6.982962677682E-15)); +#18477 = ADVANCED_FACE('',(#18478),#18497,.F.); +#18478 = FACE_BOUND('',#18479,.T.); +#18479 = EDGE_LOOP('',(#18480,#18481,#18482,#18490,#18496)); +#18480 = ORIENTED_EDGE('',*,*,#18443,.F.); +#18481 = ORIENTED_EDGE('',*,*,#18341,.F.); +#18482 = ORIENTED_EDGE('',*,*,#18483,.F.); +#18483 = EDGE_CURVE('',#18484,#18303,#18486,.T.); +#18484 = VERTEX_POINT('',#18485); +#18485 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 3.099999982006)); +#18486 = LINE('',#18487,#18488); +#18487 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 3.099999982006)); +#18488 = VECTOR('',#18489,1.); +#18489 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18490 = ORIENTED_EDGE('',*,*,#18491,.T.); +#18491 = EDGE_CURVE('',#18484,#18200,#18492,.T.); +#18492 = LINE('',#18493,#18494); +#18493 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 3.099999982006)); +#18494 = VECTOR('',#18495,1.); +#18495 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18496 = ORIENTED_EDGE('',*,*,#18199,.F.); +#18497 = PLANE('',#18498); +#18498 = AXIS2_PLACEMENT_3D('',#18499,#18500,#18501); +#18499 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 3.099999982006)); +#18500 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18501 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#18502 = ADVANCED_FACE('',(#18503),#18537,.T.); +#18503 = FACE_BOUND('',#18504,.T.); +#18504 = EDGE_LOOP('',(#18505,#18515,#18523,#18531)); +#18505 = ORIENTED_EDGE('',*,*,#18506,.T.); +#18506 = EDGE_CURVE('',#18507,#18509,#18511,.T.); +#18507 = VERTEX_POINT('',#18508); +#18508 = CARTESIAN_POINT('',(7.099974504132,0.484963211987, + 2.699999987404)); +#18509 = VERTEX_POINT('',#18510); +#18510 = CARTESIAN_POINT('',(7.499974498734,8.496321738518E-02, + 2.699999987404)); +#18511 = LINE('',#18512,#18513); +#18512 = CARTESIAN_POINT('',(6.574974511217,1.009963204902, + 2.699999987404)); +#18513 = VECTOR('',#18514,1.); +#18514 = DIRECTION('',(0.707106781187,-0.707106781187,-2.46885013108E-15 + )); +#18515 = ORIENTED_EDGE('',*,*,#18516,.T.); +#18516 = EDGE_CURVE('',#18509,#18517,#18519,.T.); +#18517 = VERTEX_POINT('',#18518); +#18518 = CARTESIAN_POINT('',(7.499974498734,8.496321738519E-02, + 0.250000020468)); +#18519 = LINE('',#18520,#18521); +#18520 = CARTESIAN_POINT('',(7.499974498734,8.496321738519E-02, + 0.250000020468)); +#18521 = VECTOR('',#18522,1.); +#18522 = DIRECTION('',(-2.515342911424E-29,3.602114213587E-15,-1.)); +#18523 = ORIENTED_EDGE('',*,*,#18524,.T.); +#18524 = EDGE_CURVE('',#18517,#18525,#18527,.T.); +#18525 = VERTEX_POINT('',#18526); +#18526 = CARTESIAN_POINT('',(7.099974504132,0.484963211987, + 0.250000020468)); +#18527 = LINE('',#18528,#18529); +#18528 = CARTESIAN_POINT('',(7.074974504469,0.50996321165,0.250000020468 + )); +#18529 = VECTOR('',#18530,1.); +#18530 = DIRECTION('',(-0.707106781187,0.707106781187,2.46885013108E-15) + ); +#18531 = ORIENTED_EDGE('',*,*,#18532,.T.); +#18532 = EDGE_CURVE('',#18525,#18507,#18533,.T.); +#18533 = LINE('',#18534,#18535); +#18534 = CARTESIAN_POINT('',(7.099974504132,0.484963211987, + 2.699999987404)); +#18535 = VECTOR('',#18536,1.); +#18536 = DIRECTION('',(2.515342911424E-29,-3.602114213587E-15,1.)); +#18537 = PLANE('',#18538); +#18538 = AXIS2_PLACEMENT_3D('',#18539,#18540,#18541); +#18539 = CARTESIAN_POINT('',(7.499974498734,8.496321738517E-02, + 3.599999975258)); +#18540 = DIRECTION('',(0.707106781187,0.707106781187,2.547079387034E-15) + ); +#18541 = DIRECTION('',(0.,3.602114213585E-15,-1.)); +#18542 = ADVANCED_FACE('',(#18543),#18568,.T.); +#18543 = FACE_BOUND('',#18544,.T.); +#18544 = EDGE_LOOP('',(#18545,#18553,#18561,#18567)); +#18545 = ORIENTED_EDGE('',*,*,#18546,.F.); +#18546 = EDGE_CURVE('',#18547,#18525,#18549,.T.); +#18547 = VERTEX_POINT('',#18548); +#18548 = CARTESIAN_POINT('',(6.499974512229,0.484963211987, + 0.250000020468)); +#18549 = LINE('',#18550,#18551); +#18550 = CARTESIAN_POINT('',(6.499974512229,0.484963211987, + 0.250000020468)); +#18551 = VECTOR('',#18552,1.); +#18552 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18553 = ORIENTED_EDGE('',*,*,#18554,.F.); +#18554 = EDGE_CURVE('',#18555,#18547,#18557,.T.); +#18555 = VERTEX_POINT('',#18556); +#18556 = CARTESIAN_POINT('',(6.499974512229,0.484963211987, + 2.699999987404)); +#18557 = LINE('',#18558,#18559); +#18558 = CARTESIAN_POINT('',(6.499974512229,0.484963211987, + 0.250000020468)); +#18559 = VECTOR('',#18560,1.); +#18560 = DIRECTION('',(-2.515342911424E-29,3.602114213587E-15,-1.)); +#18561 = ORIENTED_EDGE('',*,*,#18562,.T.); +#18562 = EDGE_CURVE('',#18555,#18507,#18563,.T.); +#18563 = LINE('',#18564,#18565); +#18564 = CARTESIAN_POINT('',(6.499974512229,0.484963211987, + 2.699999987404)); +#18565 = VECTOR('',#18566,1.); +#18566 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18567 = ORIENTED_EDGE('',*,*,#18532,.F.); +#18568 = PLANE('',#18569); +#18569 = AXIS2_PLACEMENT_3D('',#18570,#18571,#18572); +#18570 = CARTESIAN_POINT('',(6.499974512229,0.484963211987, + 0.250000020468)); +#18571 = DIRECTION('',(-6.982962677686E-15,1.,3.602114213587E-15)); +#18572 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18573 = ADVANCED_FACE('',(#18574,#18590),#18624,.T.); +#18574 = FACE_BOUND('',#18575,.T.); +#18575 = EDGE_LOOP('',(#18576,#18577,#18583,#18584)); +#18576 = ORIENTED_EDGE('',*,*,#18554,.T.); +#18577 = ORIENTED_EDGE('',*,*,#18578,.T.); +#18578 = EDGE_CURVE('',#18547,#14852,#18579,.T.); +#18579 = LINE('',#18580,#18581); +#18580 = CARTESIAN_POINT('',(6.499974512229,0.934963205914, + 0.250000020468)); +#18581 = VECTOR('',#18582,1.); +#18582 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18583 = ORIENTED_EDGE('',*,*,#14851,.T.); +#18584 = ORIENTED_EDGE('',*,*,#18585,.F.); +#18585 = EDGE_CURVE('',#18555,#14844,#18586,.T.); +#18586 = LINE('',#18587,#18588); +#18587 = CARTESIAN_POINT('',(6.499974512229,0.934963205914, + 2.699999987404)); +#18588 = VECTOR('',#18589,1.); +#18589 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18590 = FACE_BOUND('',#18591,.T.); +#18591 = EDGE_LOOP('',(#18592,#18593,#18601,#18609,#18617,#18623)); +#18592 = ORIENTED_EDGE('',*,*,#18365,.T.); +#18593 = ORIENTED_EDGE('',*,*,#18594,.T.); +#18594 = EDGE_CURVE('',#18358,#18595,#18597,.T.); +#18595 = VERTEX_POINT('',#18596); +#18596 = CARTESIAN_POINT('',(6.499974512229,-3.465036734706, + 0.100000022492)); +#18597 = LINE('',#18598,#18599); +#18598 = CARTESIAN_POINT('',(6.499974512229,-3.465036734706, + 0.100000022492)); +#18599 = VECTOR('',#18600,1.); +#18600 = DIRECTION('',(2.478176394252E-16,3.491481338843E-15,-1.)); +#18601 = ORIENTED_EDGE('',*,*,#18602,.F.); +#18602 = EDGE_CURVE('',#18603,#18595,#18605,.T.); +#18603 = VERTEX_POINT('',#18604); +#18604 = CARTESIAN_POINT('',(6.499974512229,0.934963205914, + 0.100000022492)); +#18605 = LINE('',#18606,#18607); +#18606 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 0.100000022492)); +#18607 = VECTOR('',#18608,1.); +#18608 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18609 = ORIENTED_EDGE('',*,*,#18610,.F.); +#18610 = EDGE_CURVE('',#18611,#18603,#18613,.T.); +#18611 = VERTEX_POINT('',#18612); +#18612 = CARTESIAN_POINT('',(6.499974512229,0.934963205914, + 3.599999975258)); +#18613 = LINE('',#18614,#18615); +#18614 = CARTESIAN_POINT('',(6.499974512229,0.934963205914, + 0.100000022492)); +#18615 = VECTOR('',#18616,1.); +#18616 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18617 = ORIENTED_EDGE('',*,*,#18618,.T.); +#18618 = EDGE_CURVE('',#18611,#18319,#18619,.T.); +#18619 = LINE('',#18620,#18621); +#18620 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 3.599999975258)); +#18621 = VECTOR('',#18622,1.); +#18622 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18623 = ORIENTED_EDGE('',*,*,#18318,.T.); +#18624 = PLANE('',#18625); +#18625 = AXIS2_PLACEMENT_3D('',#18626,#18627,#18628); +#18626 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 0.100000022492)); +#18627 = DIRECTION('',(1.,6.982962677686E-15,2.478176394253E-16)); +#18628 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#18629 = ADVANCED_FACE('',(#18630),#18650,.F.); +#18630 = FACE_BOUND('',#18631,.T.); +#18631 = EDGE_LOOP('',(#18632,#18638,#18639,#18645,#18646,#18647,#18648, + #18649)); +#18632 = ORIENTED_EDGE('',*,*,#18633,.T.); +#18633 = EDGE_CURVE('',#17664,#18380,#18634,.T.); +#18634 = LINE('',#18635,#18636); +#18635 = CARTESIAN_POINT('',(-5.950025319753,-3.465036734706, + 0.350000019118)); +#18636 = VECTOR('',#18637,1.); +#18637 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18638 = ORIENTED_EDGE('',*,*,#18379,.T.); +#18639 = ORIENTED_EDGE('',*,*,#18640,.F.); +#18640 = EDGE_CURVE('',#18595,#18382,#18641,.T.); +#18641 = LINE('',#18642,#18643); +#18642 = CARTESIAN_POINT('',(-7.500025298835,-3.465036734706, + 0.100000022492)); +#18643 = VECTOR('',#18644,1.); +#18644 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18645 = ORIENTED_EDGE('',*,*,#18594,.F.); +#18646 = ORIENTED_EDGE('',*,*,#18357,.T.); +#18647 = ORIENTED_EDGE('',*,*,#18436,.F.); +#18648 = ORIENTED_EDGE('',*,*,#18460,.F.); +#18649 = ORIENTED_EDGE('',*,*,#17671,.T.); +#18650 = PLANE('',#18651); +#18651 = AXIS2_PLACEMENT_3D('',#18652,#18653,#18654); +#18652 = CARTESIAN_POINT('',(-2.540005076938E-05,-3.465036734706, + 1.849999998875)); +#18653 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#18654 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18655 = ADVANCED_FACE('',(#18656),#18667,.F.); +#18656 = FACE_BOUND('',#18657,.T.); +#18657 = EDGE_LOOP('',(#18658,#18664,#18665,#18666)); +#18658 = ORIENTED_EDGE('',*,*,#18659,.F.); +#18659 = EDGE_CURVE('',#18603,#18398,#18660,.T.); +#18660 = LINE('',#18661,#18662); +#18661 = CARTESIAN_POINT('',(-7.500025298835,0.934963205914, + 0.100000022492)); +#18662 = VECTOR('',#18663,1.); +#18663 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18664 = ORIENTED_EDGE('',*,*,#18602,.T.); +#18665 = ORIENTED_EDGE('',*,*,#18640,.T.); +#18666 = ORIENTED_EDGE('',*,*,#18405,.F.); +#18667 = PLANE('',#18668); +#18668 = AXIS2_PLACEMENT_3D('',#18669,#18670,#18671); +#18669 = CARTESIAN_POINT('',(-7.500025298835,-3.465036734706, + 0.100000022492)); +#18670 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18671 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#18672 = ADVANCED_FACE('',(#18673),#18694,.T.); +#18673 = FACE_BOUND('',#18674,.T.); +#18674 = EDGE_LOOP('',(#18675,#18676,#18677,#18685,#18691,#18692,#18693) + ); +#18675 = ORIENTED_EDGE('',*,*,#14843,.F.); +#18676 = ORIENTED_EDGE('',*,*,#14810,.T.); +#18677 = ORIENTED_EDGE('',*,*,#18678,.T.); +#18678 = EDGE_CURVE('',#14803,#18679,#18681,.T.); +#18679 = VERTEX_POINT('',#18680); +#18680 = CARTESIAN_POINT('',(7.499974498734,-2.265036750901, + 2.699999987404)); +#18681 = LINE('',#18682,#18683); +#18682 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 2.699999987404)); +#18683 = VECTOR('',#18684,1.); +#18684 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18685 = ORIENTED_EDGE('',*,*,#18686,.F.); +#18686 = EDGE_CURVE('',#18509,#18679,#18687,.T.); +#18687 = LINE('',#18688,#18689); +#18688 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 2.699999987404)); +#18689 = VECTOR('',#18690,1.); +#18690 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18691 = ORIENTED_EDGE('',*,*,#18506,.F.); +#18692 = ORIENTED_EDGE('',*,*,#18562,.F.); +#18693 = ORIENTED_EDGE('',*,*,#18585,.T.); +#18694 = PLANE('',#18695); +#18695 = AXIS2_PLACEMENT_3D('',#18696,#18697,#18698); +#18696 = CARTESIAN_POINT('',(6.499974512229,0.934963205914, + 2.699999987404)); +#18697 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18698 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#18699 = ADVANCED_FACE('',(#18700),#18718,.T.); +#18700 = FACE_BOUND('',#18701,.T.); +#18701 = EDGE_LOOP('',(#18702,#18703,#18709,#18710,#18711,#18712)); +#18702 = ORIENTED_EDGE('',*,*,#18111,.T.); +#18703 = ORIENTED_EDGE('',*,*,#18704,.T.); +#18704 = EDGE_CURVE('',#18114,#18611,#18705,.T.); +#18705 = LINE('',#18706,#18707); +#18706 = CARTESIAN_POINT('',(-7.500025298835,0.934963205914, + 3.599999975258)); +#18707 = VECTOR('',#18708,1.); +#18708 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18709 = ORIENTED_EDGE('',*,*,#18610,.T.); +#18710 = ORIENTED_EDGE('',*,*,#18659,.T.); +#18711 = ORIENTED_EDGE('',*,*,#18397,.F.); +#18712 = ORIENTED_EDGE('',*,*,#18713,.F.); +#18713 = EDGE_CURVE('',#18112,#18390,#18714,.T.); +#18714 = LINE('',#18715,#18716); +#18715 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.350000019118)); +#18716 = VECTOR('',#18717,1.); +#18717 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18718 = PLANE('',#18719); +#18719 = AXIS2_PLACEMENT_3D('',#18720,#18721,#18722); +#18720 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 1.849999998875)); +#18721 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#18722 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18723 = ADVANCED_FACE('',(#18724),#18742,.F.); +#18724 = FACE_BOUND('',#18725,.T.); +#18725 = EDGE_LOOP('',(#18726,#18727,#18735,#18741)); +#18726 = ORIENTED_EDGE('',*,*,#18686,.T.); +#18727 = ORIENTED_EDGE('',*,*,#18728,.F.); +#18728 = EDGE_CURVE('',#18729,#18679,#18731,.T.); +#18729 = VERTEX_POINT('',#18730); +#18730 = CARTESIAN_POINT('',(7.499974498734,-2.265036750901, + 0.250000020468)); +#18731 = LINE('',#18732,#18733); +#18732 = CARTESIAN_POINT('',(7.499974498734,-2.265036750901, + 0.100000022492)); +#18733 = VECTOR('',#18734,1.); +#18734 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18735 = ORIENTED_EDGE('',*,*,#18736,.F.); +#18736 = EDGE_CURVE('',#18517,#18729,#18737,.T.); +#18737 = LINE('',#18738,#18739); +#18738 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 0.250000020468)); +#18739 = VECTOR('',#18740,1.); +#18740 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18741 = ORIENTED_EDGE('',*,*,#18516,.F.); +#18742 = PLANE('',#18743); +#18743 = AXIS2_PLACEMENT_3D('',#18744,#18745,#18746); +#18744 = CARTESIAN_POINT('',(7.499974498734,-3.465036734706, + 3.599999975258)); +#18745 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18746 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#18747 = ADVANCED_FACE('',(#18748),#18766,.F.); +#18748 = FACE_BOUND('',#18749,.T.); +#18749 = EDGE_LOOP('',(#18750,#18758,#18764,#18765)); +#18750 = ORIENTED_EDGE('',*,*,#18751,.T.); +#18751 = EDGE_CURVE('',#18223,#18752,#18754,.T.); +#18752 = VERTEX_POINT('',#18753); +#18753 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 0.75000001372)); +#18754 = LINE('',#18755,#18756); +#18755 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 3.099999982006)); +#18756 = VECTOR('',#18757,1.); +#18757 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18758 = ORIENTED_EDGE('',*,*,#18759,.T.); +#18759 = EDGE_CURVE('',#18752,#18421,#18760,.T.); +#18760 = LINE('',#18761,#18762); +#18761 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 0.75000001372)); +#18762 = VECTOR('',#18763,1.); +#18763 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18764 = ORIENTED_EDGE('',*,*,#18420,.F.); +#18765 = ORIENTED_EDGE('',*,*,#18230,.F.); +#18766 = PLANE('',#18767); +#18767 = AXIS2_PLACEMENT_3D('',#18768,#18769,#18770); +#18768 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 3.099999982006)); +#18769 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18770 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#18771 = ADVANCED_FACE('',(#18772),#18788,.T.); +#18772 = FACE_BOUND('',#18773,.T.); +#18773 = EDGE_LOOP('',(#18774,#18775,#18781,#18782)); +#18774 = ORIENTED_EDGE('',*,*,#17991,.T.); +#18775 = ORIENTED_EDGE('',*,*,#18776,.T.); +#18776 = EDGE_CURVE('',#17994,#18090,#18777,.T.); +#18777 = LINE('',#18778,#18779); +#18778 = CARTESIAN_POINT('',(-7.500025298835,0.934963205914, + 3.599999975258)); +#18779 = VECTOR('',#18780,1.); +#18780 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18781 = ORIENTED_EDGE('',*,*,#18089,.F.); +#18782 = ORIENTED_EDGE('',*,*,#18783,.F.); +#18783 = EDGE_CURVE('',#17992,#18082,#18784,.T.); +#18784 = LINE('',#18785,#18786); +#18785 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.350000019118)); +#18786 = VECTOR('',#18787,1.); +#18787 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18788 = PLANE('',#18789); +#18789 = AXIS2_PLACEMENT_3D('',#18790,#18791,#18792); +#18790 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 1.849999998875)); +#18791 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#18792 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18793 = ADVANCED_FACE('',(#18794),#18810,.T.); +#18794 = FACE_BOUND('',#18795,.T.); +#18795 = EDGE_LOOP('',(#18796,#18797,#18803,#18804)); +#18796 = ORIENTED_EDGE('',*,*,#17911,.T.); +#18797 = ORIENTED_EDGE('',*,*,#18798,.T.); +#18798 = EDGE_CURVE('',#17914,#18050,#18799,.T.); +#18799 = LINE('',#18800,#18801); +#18800 = CARTESIAN_POINT('',(-7.500025298835,0.934963205914, + 3.599999975258)); +#18801 = VECTOR('',#18802,1.); +#18802 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18803 = ORIENTED_EDGE('',*,*,#18049,.F.); +#18804 = ORIENTED_EDGE('',*,*,#18805,.F.); +#18805 = EDGE_CURVE('',#17912,#18042,#18806,.T.); +#18806 = LINE('',#18807,#18808); +#18807 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.350000019118)); +#18808 = VECTOR('',#18809,1.); +#18809 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18810 = PLANE('',#18811); +#18811 = AXIS2_PLACEMENT_3D('',#18812,#18813,#18814); +#18812 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 1.849999998875)); +#18813 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#18814 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18815 = ADVANCED_FACE('',(#18816),#18841,.F.); +#18816 = FACE_BOUND('',#18817,.T.); +#18817 = EDGE_LOOP('',(#18818,#18819,#18827,#18835)); +#18818 = ORIENTED_EDGE('',*,*,#17820,.T.); +#18819 = ORIENTED_EDGE('',*,*,#18820,.T.); +#18820 = EDGE_CURVE('',#17813,#18821,#18823,.T.); +#18821 = VERTEX_POINT('',#18822); +#18822 = CARTESIAN_POINT('',(3.299974555414,0.634963209963, + 3.599999975258)); +#18823 = LINE('',#18824,#18825); +#18824 = CARTESIAN_POINT('',(3.299974555414,0.634963209963, + 0.100000022492)); +#18825 = VECTOR('',#18826,1.); +#18826 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18827 = ORIENTED_EDGE('',*,*,#18828,.F.); +#18828 = EDGE_CURVE('',#18829,#18821,#18831,.T.); +#18829 = VERTEX_POINT('',#18830); +#18830 = CARTESIAN_POINT('',(3.299974555414,0.934963205914, + 3.599999975258)); +#18831 = LINE('',#18832,#18833); +#18832 = CARTESIAN_POINT('',(3.299974555414,0.934963205914, + 3.599999975258)); +#18833 = VECTOR('',#18834,1.); +#18834 = DIRECTION('',(4.091756884392E-15,-1.,-3.491481338843E-15)); +#18835 = ORIENTED_EDGE('',*,*,#18836,.F.); +#18836 = EDGE_CURVE('',#17821,#18829,#18837,.T.); +#18837 = LINE('',#18838,#18839); +#18838 = CARTESIAN_POINT('',(3.299974555414,0.934963205914, + 0.100000022492)); +#18839 = VECTOR('',#18840,1.); +#18840 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18841 = PLANE('',#18842); +#18842 = AXIS2_PLACEMENT_3D('',#18843,#18844,#18845); +#18843 = CARTESIAN_POINT('',(3.299974555414,0.934963205914, + 0.100000022492)); +#18844 = DIRECTION('',(1.,4.091756884392E-15,-1.009459107404E-29)); +#18845 = DIRECTION('',(-4.091756884392E-15,1.,0.)); +#18846 = ADVANCED_FACE('',(#18847),#18872,.F.); +#18847 = FACE_BOUND('',#18848,.T.); +#18848 = EDGE_LOOP('',(#18849,#18850,#18858,#18866)); +#18849 = ORIENTED_EDGE('',*,*,#17836,.T.); +#18850 = ORIENTED_EDGE('',*,*,#18851,.T.); +#18851 = EDGE_CURVE('',#17829,#18852,#18854,.T.); +#18852 = VERTEX_POINT('',#18853); +#18853 = CARTESIAN_POINT('',(4.199974543269,0.934963205914, + 3.599999975258)); +#18854 = LINE('',#18855,#18856); +#18855 = CARTESIAN_POINT('',(4.199974543269,0.934963205914, + 0.100000022492)); +#18856 = VECTOR('',#18857,1.); +#18857 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18858 = ORIENTED_EDGE('',*,*,#18859,.F.); +#18859 = EDGE_CURVE('',#18860,#18852,#18862,.T.); +#18860 = VERTEX_POINT('',#18861); +#18861 = CARTESIAN_POINT('',(4.199974543269,0.634963209963, + 3.599999975258)); +#18862 = LINE('',#18863,#18864); +#18863 = CARTESIAN_POINT('',(4.199974543269,0.934963205914, + 3.599999975258)); +#18864 = VECTOR('',#18865,1.); +#18865 = DIRECTION('',(-9.874168470981E-15,1.,3.491481338843E-15)); +#18866 = ORIENTED_EDGE('',*,*,#18867,.F.); +#18867 = EDGE_CURVE('',#17837,#18860,#18868,.T.); +#18868 = LINE('',#18869,#18870); +#18869 = CARTESIAN_POINT('',(4.199974543269,0.634963209963, + 0.100000022492)); +#18870 = VECTOR('',#18871,1.); +#18871 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18872 = PLANE('',#18873); +#18873 = AXIS2_PLACEMENT_3D('',#18874,#18875,#18876); +#18874 = CARTESIAN_POINT('',(4.199974543269,0.934963205914, + 0.100000022492)); +#18875 = DIRECTION('',(-1.,-9.874168470981E-15,-1.009459107404E-29)); +#18876 = DIRECTION('',(-9.874168470981E-15,1.,0.)); +#18877 = ADVANCED_FACE('',(#18878),#18894,.F.); +#18878 = FACE_BOUND('',#18879,.T.); +#18879 = EDGE_LOOP('',(#18880,#18881,#18882,#18888,#18889,#18890,#18891, + #18892,#18893)); +#18880 = ORIENTED_EDGE('',*,*,#17889,.F.); +#18881 = ORIENTED_EDGE('',*,*,#17496,.F.); +#18882 = ORIENTED_EDGE('',*,*,#18883,.F.); +#18883 = EDGE_CURVE('',#18122,#17198,#18884,.T.); +#18884 = LINE('',#18885,#18886); +#18885 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#18886 = VECTOR('',#18887,1.); +#18887 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18888 = ORIENTED_EDGE('',*,*,#18121,.F.); +#18889 = ORIENTED_EDGE('',*,*,#18713,.T.); +#18890 = ORIENTED_EDGE('',*,*,#18389,.T.); +#18891 = ORIENTED_EDGE('',*,*,#18633,.F.); +#18892 = ORIENTED_EDGE('',*,*,#17663,.T.); +#18893 = ORIENTED_EDGE('',*,*,#17750,.T.); +#18894 = PLANE('',#18895); +#18895 = AXIS2_PLACEMENT_3D('',#18896,#18897,#18898); +#18896 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.350000019118)); +#18897 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#18898 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#18899 = ADVANCED_FACE('',(#18900),#18913,.F.); +#18900 = FACE_BOUND('',#18901,.T.); +#18901 = EDGE_LOOP('',(#18902,#18903,#18904,#18905,#18906,#18907)); +#18902 = ORIENTED_EDGE('',*,*,#17896,.F.); +#18903 = ORIENTED_EDGE('',*,*,#17734,.T.); +#18904 = ORIENTED_EDGE('',*,*,#17647,.T.); +#18905 = ORIENTED_EDGE('',*,*,#18467,.F.); +#18906 = ORIENTED_EDGE('',*,*,#18759,.F.); +#18907 = ORIENTED_EDGE('',*,*,#18908,.T.); +#18908 = EDGE_CURVE('',#18752,#17798,#18909,.T.); +#18909 = LINE('',#18910,#18911); +#18910 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 0.75000001372)); +#18911 = VECTOR('',#18912,1.); +#18912 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18913 = PLANE('',#18914); +#18914 = AXIS2_PLACEMENT_3D('',#18915,#18916,#18917); +#18915 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 0.75000001372)); +#18916 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#18917 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#18918 = ADVANCED_FACE('',(#18919),#18930,.T.); +#18919 = FACE_BOUND('',#18920,.T.); +#18920 = EDGE_LOOP('',(#18921,#18922,#18928,#18929)); +#18921 = ORIENTED_EDGE('',*,*,#18836,.T.); +#18922 = ORIENTED_EDGE('',*,*,#18923,.T.); +#18923 = EDGE_CURVE('',#18829,#18852,#18924,.T.); +#18924 = LINE('',#18925,#18926); +#18925 = CARTESIAN_POINT('',(-7.500025298835,0.934963205914, + 3.599999975258)); +#18926 = VECTOR('',#18927,1.); +#18927 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18928 = ORIENTED_EDGE('',*,*,#18851,.F.); +#18929 = ORIENTED_EDGE('',*,*,#17828,.T.); +#18930 = PLANE('',#18931); +#18931 = AXIS2_PLACEMENT_3D('',#18932,#18933,#18934); +#18932 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 1.849999998875)); +#18933 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#18934 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#18935 = ADVANCED_FACE('',(#18936),#18951,.F.); +#18936 = FACE_BOUND('',#18937,.T.); +#18937 = EDGE_LOOP('',(#18938,#18939,#18940,#18941,#18942,#18943,#18949, + #18950)); +#18938 = ORIENTED_EDGE('',*,*,#17197,.F.); +#18939 = ORIENTED_EDGE('',*,*,#17480,.T.); +#18940 = ORIENTED_EDGE('',*,*,#17172,.T.); +#18941 = ORIENTED_EDGE('',*,*,#17844,.T.); +#18942 = ORIENTED_EDGE('',*,*,#18867,.T.); +#18943 = ORIENTED_EDGE('',*,*,#18944,.F.); +#18944 = EDGE_CURVE('',#18130,#18860,#18945,.T.); +#18945 = LINE('',#18946,#18947); +#18946 = CARTESIAN_POINT('',(4.199974543269,0.634963209963, + 3.599999975258)); +#18947 = VECTOR('',#18948,1.); +#18948 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18949 = ORIENTED_EDGE('',*,*,#18129,.F.); +#18950 = ORIENTED_EDGE('',*,*,#18883,.T.); +#18951 = PLANE('',#18952); +#18952 = AXIS2_PLACEMENT_3D('',#18953,#18954,#18955); +#18953 = CARTESIAN_POINT('',(4.199974543269,0.634963209963, + 0.100000022492)); +#18954 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18955 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#18956 = ADVANCED_FACE('',(#18957),#18977,.F.); +#18957 = FACE_BOUND('',#18958,.T.); +#18958 = EDGE_LOOP('',(#18959,#18960,#18961,#18962,#18968,#18969,#18975, + #18976)); +#18959 = ORIENTED_EDGE('',*,*,#16504,.F.); +#18960 = ORIENTED_EDGE('',*,*,#16787,.T.); +#18961 = ORIENTED_EDGE('',*,*,#16479,.T.); +#18962 = ORIENTED_EDGE('',*,*,#18963,.T.); +#18963 = EDGE_CURVE('',#16472,#18072,#18964,.T.); +#18964 = LINE('',#18965,#18966); +#18965 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#18966 = VECTOR('',#18967,1.); +#18967 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18968 = ORIENTED_EDGE('',*,*,#18071,.T.); +#18969 = ORIENTED_EDGE('',*,*,#18970,.F.); +#18970 = EDGE_CURVE('',#18821,#18074,#18971,.T.); +#18971 = LINE('',#18972,#18973); +#18972 = CARTESIAN_POINT('',(2.949974560138,0.634963209963, + 3.599999975258)); +#18973 = VECTOR('',#18974,1.); +#18974 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18975 = ORIENTED_EDGE('',*,*,#18820,.F.); +#18976 = ORIENTED_EDGE('',*,*,#17812,.T.); +#18977 = PLANE('',#18978); +#18978 = AXIS2_PLACEMENT_3D('',#18979,#18980,#18981); +#18979 = CARTESIAN_POINT('',(2.949974560138,0.634963209963, + 0.100000022492)); +#18980 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#18981 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#18982 = ADVANCED_FACE('',(#18983),#19008,.F.); +#18983 = FACE_BOUND('',#18984,.T.); +#18984 = EDGE_LOOP('',(#18985,#18986,#18987,#18988,#18994,#18995,#19001, + #19002)); +#18985 = ORIENTED_EDGE('',*,*,#15951,.F.); +#18986 = ORIENTED_EDGE('',*,*,#16234,.T.); +#18987 = ORIENTED_EDGE('',*,*,#15926,.T.); +#18988 = ORIENTED_EDGE('',*,*,#18989,.T.); +#18989 = EDGE_CURVE('',#15919,#18032,#18990,.T.); +#18990 = LINE('',#18991,#18992); +#18991 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#18992 = VECTOR('',#18993,1.); +#18993 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#18994 = ORIENTED_EDGE('',*,*,#18031,.T.); +#18995 = ORIENTED_EDGE('',*,*,#18996,.F.); +#18996 = EDGE_CURVE('',#18010,#18034,#18997,.T.); +#18997 = LINE('',#18998,#18999); +#18998 = CARTESIAN_POINT('',(1.699974577007,0.634963209963, + 3.599999975258)); +#18999 = VECTOR('',#19000,1.); +#19000 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19001 = ORIENTED_EDGE('',*,*,#18009,.F.); +#19002 = ORIENTED_EDGE('',*,*,#19003,.T.); +#19003 = EDGE_CURVE('',#18002,#15952,#19004,.T.); +#19004 = LINE('',#19005,#19006); +#19005 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#19006 = VECTOR('',#19007,1.); +#19007 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19008 = PLANE('',#19009); +#19009 = AXIS2_PLACEMENT_3D('',#19010,#19011,#19012); +#19010 = CARTESIAN_POINT('',(1.699974577007,0.634963209963, + 0.100000022492)); +#19011 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#19012 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#19013 = ADVANCED_FACE('',(#19014),#19039,.F.); +#19014 = FACE_BOUND('',#19015,.T.); +#19015 = EDGE_LOOP('',(#19016,#19017,#19018,#19019,#19025,#19026,#19032, + #19033)); +#19016 = ORIENTED_EDGE('',*,*,#15398,.F.); +#19017 = ORIENTED_EDGE('',*,*,#15681,.T.); +#19018 = ORIENTED_EDGE('',*,*,#15373,.T.); +#19019 = ORIENTED_EDGE('',*,*,#19020,.T.); +#19020 = EDGE_CURVE('',#15366,#17952,#19021,.T.); +#19021 = LINE('',#19022,#19023); +#19022 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#19023 = VECTOR('',#19024,1.); +#19024 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19025 = ORIENTED_EDGE('',*,*,#17951,.T.); +#19026 = ORIENTED_EDGE('',*,*,#19027,.F.); +#19027 = EDGE_CURVE('',#17930,#17954,#19028,.T.); +#19028 = LINE('',#19029,#19030); +#19029 = CARTESIAN_POINT('',(0.449974593876,0.634963209963, + 3.599999975258)); +#19030 = VECTOR('',#19031,1.); +#19031 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19032 = ORIENTED_EDGE('',*,*,#17929,.F.); +#19033 = ORIENTED_EDGE('',*,*,#19034,.T.); +#19034 = EDGE_CURVE('',#17922,#15399,#19035,.T.); +#19035 = LINE('',#19036,#19037); +#19036 = CARTESIAN_POINT('',(-5.950025319753,0.634963209963, + 0.350000019118)); +#19037 = VECTOR('',#19038,1.); +#19038 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19039 = PLANE('',#19040); +#19040 = AXIS2_PLACEMENT_3D('',#19041,#19042,#19043); +#19041 = CARTESIAN_POINT('',(0.449974593876,0.634963209963, + 0.100000022492)); +#19042 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#19043 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#19044 = ADVANCED_FACE('',(#19045),#19058,.T.); +#19045 = FACE_BOUND('',#19046,.T.); +#19046 = EDGE_LOOP('',(#19047,#19053,#19054,#19055,#19056,#19057)); +#19047 = ORIENTED_EDGE('',*,*,#19048,.F.); +#19048 = EDGE_CURVE('',#18729,#14876,#19049,.T.); +#19049 = LINE('',#19050,#19051); +#19050 = CARTESIAN_POINT('',(7.499974498734,-2.265036750901, + 0.250000020468)); +#19051 = VECTOR('',#19052,1.); +#19052 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19053 = ORIENTED_EDGE('',*,*,#18728,.T.); +#19054 = ORIENTED_EDGE('',*,*,#18678,.F.); +#19055 = ORIENTED_EDGE('',*,*,#14802,.T.); +#19056 = ORIENTED_EDGE('',*,*,#14762,.F.); +#19057 = ORIENTED_EDGE('',*,*,#14883,.F.); +#19058 = PLANE('',#19059); +#19059 = AXIS2_PLACEMENT_3D('',#19060,#19061,#19062); +#19060 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 1.849999998875)); +#19061 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#19062 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#19063 = ADVANCED_FACE('',(#19064),#19073,.T.); +#19064 = FACE_BOUND('',#19065,.T.); +#19065 = EDGE_LOOP('',(#19066,#19067,#19068,#19069,#19070,#19071,#19072) + ); +#19066 = ORIENTED_EDGE('',*,*,#14859,.T.); +#19067 = ORIENTED_EDGE('',*,*,#18578,.F.); +#19068 = ORIENTED_EDGE('',*,*,#18546,.T.); +#19069 = ORIENTED_EDGE('',*,*,#18524,.F.); +#19070 = ORIENTED_EDGE('',*,*,#18736,.T.); +#19071 = ORIENTED_EDGE('',*,*,#19048,.T.); +#19072 = ORIENTED_EDGE('',*,*,#14875,.F.); +#19073 = PLANE('',#19074); +#19074 = AXIS2_PLACEMENT_3D('',#19075,#19076,#19077); +#19075 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 0.250000020468)); +#19076 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#19077 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#19078 = ADVANCED_FACE('',(#19079),#19129,.F.); +#19079 = FACE_BOUND('',#19080,.T.); +#19080 = EDGE_LOOP('',(#19081,#19091,#19099,#19107,#19115,#19123)); +#19081 = ORIENTED_EDGE('',*,*,#19082,.F.); +#19082 = EDGE_CURVE('',#19083,#19085,#19087,.T.); +#19083 = VERTEX_POINT('',#19084); +#19084 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#19085 = VERTEX_POINT('',#19086); +#19086 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.449999990778)); +#19087 = LINE('',#19088,#19089); +#19088 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#19089 = VECTOR('',#19090,1.); +#19090 = DIRECTION('',(7.080503983579E-16,-3.491481338843E-15,1.)); +#19091 = ORIENTED_EDGE('',*,*,#19092,.T.); +#19092 = EDGE_CURVE('',#19083,#19093,#19095,.T.); +#19093 = VERTEX_POINT('',#19094); +#19094 = CARTESIAN_POINT('',(-6.500025312331,-0.365036776542, + 0.250000020468)); +#19095 = LINE('',#19096,#19097); +#19096 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#19097 = VECTOR('',#19098,1.); +#19098 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19099 = ORIENTED_EDGE('',*,*,#19100,.T.); +#19100 = EDGE_CURVE('',#19093,#19101,#19103,.T.); +#19101 = VERTEX_POINT('',#19102); +#19102 = CARTESIAN_POINT('',(-6.500025312331,-0.365036776542, + 2.699999987404)); +#19103 = LINE('',#19104,#19105); +#19104 = CARTESIAN_POINT('',(-6.500025312331,-0.365036776542, + 0.250000020468)); +#19105 = VECTOR('',#19106,1.); +#19106 = DIRECTION('',(3.54025199179E-16,-3.491481338843E-15,1.)); +#19107 = ORIENTED_EDGE('',*,*,#19108,.F.); +#19108 = EDGE_CURVE('',#19109,#19101,#19111,.T.); +#19109 = VERTEX_POINT('',#19110); +#19110 = CARTESIAN_POINT('',(-7.100025304234,-0.365036776542, + 2.699999987404)); +#19111 = LINE('',#19112,#19113); +#19112 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.699999987404)); +#19113 = VECTOR('',#19114,1.); +#19114 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19115 = ORIENTED_EDGE('',*,*,#19116,.T.); +#19116 = EDGE_CURVE('',#19109,#19117,#19119,.T.); +#19117 = VERTEX_POINT('',#19118); +#19118 = CARTESIAN_POINT('',(-7.100025304234,-0.365036776542, + 2.449999990778)); +#19119 = LINE('',#19120,#19121); +#19120 = CARTESIAN_POINT('',(-7.100025304234,-0.365036776542, + 2.699999987404)); +#19121 = VECTOR('',#19122,1.); +#19122 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#19123 = ORIENTED_EDGE('',*,*,#19124,.F.); +#19124 = EDGE_CURVE('',#19085,#19117,#19125,.T.); +#19125 = LINE('',#19126,#19127); +#19126 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.449999990778)); +#19127 = VECTOR('',#19128,1.); +#19128 = DIRECTION('',(-1.,-6.982962677686E-15,-3.097720492816E-16)); +#19129 = PLANE('',#19130); +#19130 = AXIS2_PLACEMENT_3D('',#19131,#19132,#19133); +#19131 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 1.849999998875)); +#19132 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#19133 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19134 = ADVANCED_FACE('',(#19135),#19160,.T.); +#19135 = FACE_BOUND('',#19136,.T.); +#19136 = EDGE_LOOP('',(#19137,#19145,#19153,#19159)); +#19137 = ORIENTED_EDGE('',*,*,#19138,.T.); +#19138 = EDGE_CURVE('',#19085,#19139,#19141,.T.); +#19139 = VERTEX_POINT('',#19140); +#19140 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 2.449999990778)); +#19141 = LINE('',#19142,#19143); +#19142 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.449999990778)); +#19143 = VECTOR('',#19144,1.); +#19144 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#19145 = ORIENTED_EDGE('',*,*,#19146,.F.); +#19146 = EDGE_CURVE('',#19147,#19139,#19149,.T.); +#19147 = VERTEX_POINT('',#19148); +#19148 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 0.250000020468)); +#19149 = LINE('',#19150,#19151); +#19150 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 0.250000020468)); +#19151 = VECTOR('',#19152,1.); +#19152 = DIRECTION('',(7.080503983579E-16,-3.491481338843E-15,1.)); +#19153 = ORIENTED_EDGE('',*,*,#19154,.F.); +#19154 = EDGE_CURVE('',#19083,#19147,#19155,.T.); +#19155 = LINE('',#19156,#19157); +#19156 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#19157 = VECTOR('',#19158,1.); +#19158 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#19159 = ORIENTED_EDGE('',*,*,#19082,.T.); +#19160 = PLANE('',#19161); +#19161 = AXIS2_PLACEMENT_3D('',#19162,#19163,#19164); +#19162 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#19163 = DIRECTION('',(1.,6.982962677686E-15,-7.080503983579E-16)); +#19164 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#19165 = ADVANCED_FACE('',(#19166),#19191,.F.); +#19166 = FACE_BOUND('',#19167,.T.); +#19167 = EDGE_LOOP('',(#19168,#19178,#19184,#19185)); +#19168 = ORIENTED_EDGE('',*,*,#19169,.T.); +#19169 = EDGE_CURVE('',#19170,#19172,#19174,.T.); +#19170 = VERTEX_POINT('',#19171); +#19171 = CARTESIAN_POINT('',(-7.100025304234,-2.265036750901, + 2.699999987404)); +#19172 = VERTEX_POINT('',#19173); +#19173 = CARTESIAN_POINT('',(-7.100025304234,-2.265036750901, + 2.449999990778)); +#19174 = LINE('',#19175,#19176); +#19175 = CARTESIAN_POINT('',(-7.100025304234,-2.265036750901, + 2.699999987404)); +#19176 = VECTOR('',#19177,1.); +#19177 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#19178 = ORIENTED_EDGE('',*,*,#19179,.F.); +#19179 = EDGE_CURVE('',#19117,#19172,#19180,.T.); +#19180 = LINE('',#19181,#19182); +#19181 = CARTESIAN_POINT('',(-7.100025304234,-0.365036776542, + 2.449999990778)); +#19182 = VECTOR('',#19183,1.); +#19183 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#19184 = ORIENTED_EDGE('',*,*,#19116,.F.); +#19185 = ORIENTED_EDGE('',*,*,#19186,.T.); +#19186 = EDGE_CURVE('',#19109,#19170,#19187,.T.); +#19187 = LINE('',#19188,#19189); +#19188 = CARTESIAN_POINT('',(-7.100025304234,-0.365036776542, + 2.699999987404)); +#19189 = VECTOR('',#19190,1.); +#19190 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#19191 = PLANE('',#19192); +#19192 = AXIS2_PLACEMENT_3D('',#19193,#19194,#19195); +#19193 = CARTESIAN_POINT('',(-7.100025304234,-0.365036776542, + 2.699999987404)); +#19194 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19195 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#19196 = ADVANCED_FACE('',(#19197),#19208,.T.); +#19197 = FACE_BOUND('',#19198,.T.); +#19198 = EDGE_LOOP('',(#19199,#19205,#19206,#19207)); +#19199 = ORIENTED_EDGE('',*,*,#19200,.F.); +#19200 = EDGE_CURVE('',#19139,#19172,#19201,.T.); +#19201 = LINE('',#19202,#19203); +#19202 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 2.449999990778)); +#19203 = VECTOR('',#19204,1.); +#19204 = DIRECTION('',(-1.,-6.982962677686E-15,-3.097720492816E-16)); +#19205 = ORIENTED_EDGE('',*,*,#19138,.F.); +#19206 = ORIENTED_EDGE('',*,*,#19124,.T.); +#19207 = ORIENTED_EDGE('',*,*,#19179,.T.); +#19208 = PLANE('',#19209); +#19209 = AXIS2_PLACEMENT_3D('',#19210,#19211,#19212); +#19210 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.449999990778)); +#19211 = DIRECTION('',(-3.097720492815E-16,-3.491481338843E-15,1.)); +#19212 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#19213 = ADVANCED_FACE('',(#19214),#19248,.F.); +#19214 = FACE_BOUND('',#19215,.T.); +#19215 = EDGE_LOOP('',(#19216,#19226,#19234,#19242)); +#19216 = ORIENTED_EDGE('',*,*,#19217,.F.); +#19217 = EDGE_CURVE('',#19218,#19220,#19222,.T.); +#19218 = VERTEX_POINT('',#19219); +#19219 = CARTESIAN_POINT('',(-0.47502539364,-2.465036748202, + 1.150000008322)); +#19220 = VERTEX_POINT('',#19221); +#19221 = CARTESIAN_POINT('',(-0.563188882805,-2.965036741454, + 1.331985122999)); +#19222 = LINE('',#19223,#19224); +#19223 = CARTESIAN_POINT('',(-0.568849287718,-2.997138492927, + 1.343669205003)); +#19224 = VECTOR('',#19225,1.); +#19225 = DIRECTION('',(-0.163464460889,-0.927053025192,0.337419706757)); +#19226 = ORIENTED_EDGE('',*,*,#19227,.F.); +#19227 = EDGE_CURVE('',#19228,#19218,#19230,.T.); +#19228 = VERTEX_POINT('',#19229); +#19229 = CARTESIAN_POINT('',(-0.47502539364,-2.465036748202, + 1.849999998875)); +#19230 = LINE('',#19231,#19232); +#19231 = CARTESIAN_POINT('',(-0.47502539364,-2.465036748202, + 1.849999998875)); +#19232 = VECTOR('',#19233,1.); +#19233 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#19234 = ORIENTED_EDGE('',*,*,#19235,.F.); +#19235 = EDGE_CURVE('',#19236,#19228,#19238,.T.); +#19236 = VERTEX_POINT('',#19237); +#19237 = CARTESIAN_POINT('',(-0.563188882805,-2.965036741454, + 1.668014884198)); +#19238 = LINE('',#19239,#19240); +#19239 = CARTESIAN_POINT('',(-0.483041582524,-2.510498814482, + 1.833453159961)); +#19240 = VECTOR('',#19241,1.); +#19241 = DIRECTION('',(0.163464460889,0.927053025192,0.337419706757)); +#19242 = ORIENTED_EDGE('',*,*,#19243,.F.); +#19243 = EDGE_CURVE('',#19220,#19236,#19244,.T.); +#19244 = LINE('',#19245,#19246); +#19245 = CARTESIAN_POINT('',(-0.563188882805,-2.965036741454, + 1.150000008322)); +#19246 = VECTOR('',#19247,1.); +#19247 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#19248 = PLANE('',#19249); +#19249 = AXIS2_PLACEMENT_3D('',#19250,#19251,#19252); +#19250 = CARTESIAN_POINT('',(-0.563188882805,-2.965036741454, + 1.150000008322)); +#19251 = DIRECTION('',(-0.984807753012,0.173648177667,7.138720755481E-16 + )); +#19252 = DIRECTION('',(7.248847029937E-16,2.465190328816E-32,1.)); +#19253 = ADVANCED_FACE('',(#19254),#19288,.T.); +#19254 = FACE_BOUND('',#19255,.T.); +#19255 = EDGE_LOOP('',(#19256,#19266,#19274,#19282)); +#19256 = ORIENTED_EDGE('',*,*,#19257,.F.); +#19257 = EDGE_CURVE('',#19258,#19260,#19262,.T.); +#19258 = VERTEX_POINT('',#19259); +#19259 = CARTESIAN_POINT('',(-0.686861900427,-2.965036741454, + 1.331985122999)); +#19260 = VERTEX_POINT('',#19261); +#19261 = CARTESIAN_POINT('',(-0.775025389592,-2.465036748202, + 1.150000008322)); +#19262 = LINE('',#19263,#19264); +#19263 = CARTESIAN_POINT('',(-0.689217684399,-2.951676426647, + 1.327122366089)); +#19264 = VECTOR('',#19265,1.); +#19265 = DIRECTION('',(-0.163464460889,0.927053025192,-0.337419706757)); +#19266 = ORIENTED_EDGE('',*,*,#19267,.F.); +#19267 = EDGE_CURVE('',#19268,#19258,#19270,.T.); +#19268 = VERTEX_POINT('',#19269); +#19269 = CARTESIAN_POINT('',(-0.686861900427,-2.965036741454, + 1.668014884198)); +#19270 = LINE('',#19271,#19272); +#19271 = CARTESIAN_POINT('',(-0.686861900427,-2.965036741454, + 1.331985122999)); +#19272 = VECTOR('',#19273,1.); +#19273 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#19274 = ORIENTED_EDGE('',*,*,#19275,.F.); +#19275 = EDGE_CURVE('',#19276,#19268,#19278,.T.); +#19276 = VERTEX_POINT('',#19277); +#19277 = CARTESIAN_POINT('',(-0.775025389592,-2.465036748202, + 1.849999998875)); +#19278 = LINE('',#19279,#19280); +#19279 = CARTESIAN_POINT('',(-0.775025389592,-2.465036748202, + 1.849999998875)); +#19280 = VECTOR('',#19281,1.); +#19281 = DIRECTION('',(0.163464460889,-0.927053025192,-0.337419706757)); +#19282 = ORIENTED_EDGE('',*,*,#19283,.F.); +#19283 = EDGE_CURVE('',#19260,#19276,#19284,.T.); +#19284 = LINE('',#19285,#19286); +#19285 = CARTESIAN_POINT('',(-0.775025389592,-2.465036748202, + 1.668014884198)); +#19286 = VECTOR('',#19287,1.); +#19287 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#19288 = PLANE('',#19289); +#19289 = AXIS2_PLACEMENT_3D('',#19290,#19291,#19292); +#19290 = CARTESIAN_POINT('',(-0.775025389592,-2.465036748202, + 1.849999998875)); +#19291 = DIRECTION('',(-0.984807753012,-0.173648177667, + -7.138720755481E-16)); +#19292 = DIRECTION('',(-0.173648177667,0.984807753012,0.)); +#19293 = ADVANCED_FACE('',(#19294),#19328,.F.); +#19294 = FACE_BOUND('',#19295,.T.); +#19295 = EDGE_LOOP('',(#19296,#19306,#19314,#19322)); +#19296 = ORIENTED_EDGE('',*,*,#19297,.F.); +#19297 = EDGE_CURVE('',#19298,#19300,#19302,.T.); +#19298 = VERTEX_POINT('',#19299); +#19299 = CARTESIAN_POINT('',(-1.725025376771,-2.465036748202, + 1.150000008322)); +#19300 = VERTEX_POINT('',#19301); +#19301 = CARTESIAN_POINT('',(-1.813188865936,-2.965036741454, + 1.331985122999)); +#19302 = LINE('',#19303,#19304); +#19303 = CARTESIAN_POINT('',(-1.818849270848,-2.997138492927, + 1.343669205003)); +#19304 = VECTOR('',#19305,1.); +#19305 = DIRECTION('',(-0.163464460889,-0.927053025192,0.337419706757)); +#19306 = ORIENTED_EDGE('',*,*,#19307,.F.); +#19307 = EDGE_CURVE('',#19308,#19298,#19310,.T.); +#19308 = VERTEX_POINT('',#19309); +#19309 = CARTESIAN_POINT('',(-1.725025376771,-2.465036748202, + 1.849999998875)); +#19310 = LINE('',#19311,#19312); +#19311 = CARTESIAN_POINT('',(-1.725025376771,-2.465036748202, + 1.849999998875)); +#19312 = VECTOR('',#19313,1.); +#19313 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#19314 = ORIENTED_EDGE('',*,*,#19315,.F.); +#19315 = EDGE_CURVE('',#19316,#19308,#19318,.T.); +#19316 = VERTEX_POINT('',#19317); +#19317 = CARTESIAN_POINT('',(-1.813188865936,-2.965036741454, + 1.668014884198)); +#19318 = LINE('',#19319,#19320); +#19319 = CARTESIAN_POINT('',(-1.733041565655,-2.510498814482, + 1.833453159961)); +#19320 = VECTOR('',#19321,1.); +#19321 = DIRECTION('',(0.163464460889,0.927053025192,0.337419706757)); +#19322 = ORIENTED_EDGE('',*,*,#19323,.F.); +#19323 = EDGE_CURVE('',#19300,#19316,#19324,.T.); +#19324 = LINE('',#19325,#19326); +#19325 = CARTESIAN_POINT('',(-1.813188865936,-2.965036741454, + 1.150000008322)); +#19326 = VECTOR('',#19327,1.); +#19327 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#19328 = PLANE('',#19329); +#19329 = AXIS2_PLACEMENT_3D('',#19330,#19331,#19332); +#19330 = CARTESIAN_POINT('',(-1.813188865936,-2.965036741454, + 1.150000008322)); +#19331 = DIRECTION('',(-0.984807753012,0.173648177667,7.138720755481E-16 + )); +#19332 = DIRECTION('',(7.248847029937E-16,2.465190328816E-32,1.)); +#19333 = ADVANCED_FACE('',(#19334),#19368,.T.); +#19334 = FACE_BOUND('',#19335,.T.); +#19335 = EDGE_LOOP('',(#19336,#19346,#19354,#19362)); +#19336 = ORIENTED_EDGE('',*,*,#19337,.F.); +#19337 = EDGE_CURVE('',#19338,#19340,#19342,.T.); +#19338 = VERTEX_POINT('',#19339); +#19339 = CARTESIAN_POINT('',(-1.936861883558,-2.965036741454, + 1.331985122999)); +#19340 = VERTEX_POINT('',#19341); +#19341 = CARTESIAN_POINT('',(-2.025025372723,-2.465036748202, + 1.150000008322)); +#19342 = LINE('',#19343,#19344); +#19343 = CARTESIAN_POINT('',(-1.939217667529,-2.951676426647, + 1.327122366089)); +#19344 = VECTOR('',#19345,1.); +#19345 = DIRECTION('',(-0.163464460889,0.927053025192,-0.337419706757)); +#19346 = ORIENTED_EDGE('',*,*,#19347,.F.); +#19347 = EDGE_CURVE('',#19348,#19338,#19350,.T.); +#19348 = VERTEX_POINT('',#19349); +#19349 = CARTESIAN_POINT('',(-1.936861883558,-2.965036741454, + 1.668014884198)); +#19350 = LINE('',#19351,#19352); +#19351 = CARTESIAN_POINT('',(-1.936861883558,-2.965036741454, + 1.331985122999)); +#19352 = VECTOR('',#19353,1.); +#19353 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#19354 = ORIENTED_EDGE('',*,*,#19355,.F.); +#19355 = EDGE_CURVE('',#19356,#19348,#19358,.T.); +#19356 = VERTEX_POINT('',#19357); +#19357 = CARTESIAN_POINT('',(-2.025025372723,-2.465036748202, + 1.849999998875)); +#19358 = LINE('',#19359,#19360); +#19359 = CARTESIAN_POINT('',(-2.025025372723,-2.465036748202, + 1.849999998875)); +#19360 = VECTOR('',#19361,1.); +#19361 = DIRECTION('',(0.163464460889,-0.927053025192,-0.337419706757)); +#19362 = ORIENTED_EDGE('',*,*,#19363,.F.); +#19363 = EDGE_CURVE('',#19340,#19356,#19364,.T.); +#19364 = LINE('',#19365,#19366); +#19365 = CARTESIAN_POINT('',(-2.025025372723,-2.465036748202, + 1.668014884198)); +#19366 = VECTOR('',#19367,1.); +#19367 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#19368 = PLANE('',#19369); +#19369 = AXIS2_PLACEMENT_3D('',#19370,#19371,#19372); +#19370 = CARTESIAN_POINT('',(-2.025025372723,-2.465036748202, + 1.849999998875)); +#19371 = DIRECTION('',(-0.984807753012,-0.173648177667, + -7.138720755481E-16)); +#19372 = DIRECTION('',(-0.173648177667,0.984807753012,0.)); +#19373 = ADVANCED_FACE('',(#19374),#19408,.F.); +#19374 = FACE_BOUND('',#19375,.T.); +#19375 = EDGE_LOOP('',(#19376,#19386,#19394,#19402)); +#19376 = ORIENTED_EDGE('',*,*,#19377,.F.); +#19377 = EDGE_CURVE('',#19378,#19380,#19382,.T.); +#19378 = VERTEX_POINT('',#19379); +#19379 = CARTESIAN_POINT('',(-2.975025359902,-2.465036748202, + 1.150000008322)); +#19380 = VERTEX_POINT('',#19381); +#19381 = CARTESIAN_POINT('',(-3.063188849066,-2.965036741454, + 1.331985122999)); +#19382 = LINE('',#19383,#19384); +#19383 = CARTESIAN_POINT('',(-3.068849253979,-2.997138492927, + 1.343669205003)); +#19384 = VECTOR('',#19385,1.); +#19385 = DIRECTION('',(-0.163464460889,-0.927053025192,0.337419706757)); +#19386 = ORIENTED_EDGE('',*,*,#19387,.F.); +#19387 = EDGE_CURVE('',#19388,#19378,#19390,.T.); +#19388 = VERTEX_POINT('',#19389); +#19389 = CARTESIAN_POINT('',(-2.975025359902,-2.465036748202, + 1.849999998875)); +#19390 = LINE('',#19391,#19392); +#19391 = CARTESIAN_POINT('',(-2.975025359902,-2.465036748202, + 1.849999998875)); +#19392 = VECTOR('',#19393,1.); +#19393 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#19394 = ORIENTED_EDGE('',*,*,#19395,.F.); +#19395 = EDGE_CURVE('',#19396,#19388,#19398,.T.); +#19396 = VERTEX_POINT('',#19397); +#19397 = CARTESIAN_POINT('',(-3.063188849066,-2.965036741454, + 1.668014884198)); +#19398 = LINE('',#19399,#19400); +#19399 = CARTESIAN_POINT('',(-2.983041548786,-2.510498814482, + 1.833453159961)); +#19400 = VECTOR('',#19401,1.); +#19401 = DIRECTION('',(0.163464460889,0.927053025192,0.337419706757)); +#19402 = ORIENTED_EDGE('',*,*,#19403,.F.); +#19403 = EDGE_CURVE('',#19380,#19396,#19404,.T.); +#19404 = LINE('',#19405,#19406); +#19405 = CARTESIAN_POINT('',(-3.063188849066,-2.965036741454, + 1.150000008322)); +#19406 = VECTOR('',#19407,1.); +#19407 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#19408 = PLANE('',#19409); +#19409 = AXIS2_PLACEMENT_3D('',#19410,#19411,#19412); +#19410 = CARTESIAN_POINT('',(-3.063188849066,-2.965036741454, + 1.150000008322)); +#19411 = DIRECTION('',(-0.984807753012,0.173648177667,7.138720755481E-16 + )); +#19412 = DIRECTION('',(7.248847029937E-16,2.465190328816E-32,1.)); +#19413 = ADVANCED_FACE('',(#19414),#19448,.T.); +#19414 = FACE_BOUND('',#19415,.T.); +#19415 = EDGE_LOOP('',(#19416,#19426,#19434,#19442)); +#19416 = ORIENTED_EDGE('',*,*,#19417,.F.); +#19417 = EDGE_CURVE('',#19418,#19420,#19422,.T.); +#19418 = VERTEX_POINT('',#19419); +#19419 = CARTESIAN_POINT('',(-3.186861866689,-2.965036741454, + 1.331985122999)); +#19420 = VERTEX_POINT('',#19421); +#19421 = CARTESIAN_POINT('',(-3.275025355853,-2.465036748202, + 1.150000008322)); +#19422 = LINE('',#19423,#19424); +#19423 = CARTESIAN_POINT('',(-3.18921765066,-2.951676426647, + 1.327122366089)); +#19424 = VECTOR('',#19425,1.); +#19425 = DIRECTION('',(-0.163464460889,0.927053025192,-0.337419706757)); +#19426 = ORIENTED_EDGE('',*,*,#19427,.F.); +#19427 = EDGE_CURVE('',#19428,#19418,#19430,.T.); +#19428 = VERTEX_POINT('',#19429); +#19429 = CARTESIAN_POINT('',(-3.186861866689,-2.965036741454, + 1.668014884198)); +#19430 = LINE('',#19431,#19432); +#19431 = CARTESIAN_POINT('',(-3.186861866689,-2.965036741454, + 1.331985122999)); +#19432 = VECTOR('',#19433,1.); +#19433 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#19434 = ORIENTED_EDGE('',*,*,#19435,.F.); +#19435 = EDGE_CURVE('',#19436,#19428,#19438,.T.); +#19436 = VERTEX_POINT('',#19437); +#19437 = CARTESIAN_POINT('',(-3.275025355853,-2.465036748202, + 1.849999998875)); +#19438 = LINE('',#19439,#19440); +#19439 = CARTESIAN_POINT('',(-3.275025355853,-2.465036748202, + 1.849999998875)); +#19440 = VECTOR('',#19441,1.); +#19441 = DIRECTION('',(0.163464460889,-0.927053025192,-0.337419706757)); +#19442 = ORIENTED_EDGE('',*,*,#19443,.F.); +#19443 = EDGE_CURVE('',#19420,#19436,#19444,.T.); +#19444 = LINE('',#19445,#19446); +#19445 = CARTESIAN_POINT('',(-3.275025355853,-2.465036748202, + 1.668014884198)); +#19446 = VECTOR('',#19447,1.); +#19447 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#19448 = PLANE('',#19449); +#19449 = AXIS2_PLACEMENT_3D('',#19450,#19451,#19452); +#19450 = CARTESIAN_POINT('',(-3.275025355853,-2.465036748202, + 1.849999998875)); +#19451 = DIRECTION('',(-0.984807753012,-0.173648177667, + -7.138720755481E-16)); +#19452 = DIRECTION('',(-0.173648177667,0.984807753012,0.)); +#19453 = ADVANCED_FACE('',(#19454),#19470,.T.); +#19454 = FACE_BOUND('',#19455,.T.); +#19455 = EDGE_LOOP('',(#19456,#19462,#19463,#19469)); +#19456 = ORIENTED_EDGE('',*,*,#19457,.F.); +#19457 = EDGE_CURVE('',#19258,#19220,#19458,.T.); +#19458 = LINE('',#19459,#19460); +#19459 = CARTESIAN_POINT('',(-0.47502539364,-2.965036741454, + 1.331985122999)); +#19460 = VECTOR('',#19461,1.); +#19461 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19462 = ORIENTED_EDGE('',*,*,#19257,.T.); +#19463 = ORIENTED_EDGE('',*,*,#19464,.F.); +#19464 = EDGE_CURVE('',#19218,#19260,#19465,.T.); +#19465 = LINE('',#19466,#19467); +#19466 = CARTESIAN_POINT('',(-0.775025389592,-2.465036748202, + 1.150000008322)); +#19467 = VECTOR('',#19468,1.); +#19468 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19469 = ORIENTED_EDGE('',*,*,#19217,.T.); +#19470 = PLANE('',#19471); +#19471 = AXIS2_PLACEMENT_3D('',#19472,#19473,#19474); +#19472 = CARTESIAN_POINT('',(-0.775025389592,-2.965036741454, + 1.331985122999)); +#19473 = DIRECTION('',(2.38831389586E-15,-0.342020143326,-0.939692620786 + )); +#19474 = DIRECTION('',(0.,-0.939692620786,0.342020143326)); +#19475 = ADVANCED_FACE('',(#19476),#19492,.F.); +#19476 = FACE_BOUND('',#19477,.T.); +#19477 = EDGE_LOOP('',(#19478,#19484,#19485,#19491)); +#19478 = ORIENTED_EDGE('',*,*,#19479,.F.); +#19479 = EDGE_CURVE('',#19276,#19228,#19480,.T.); +#19480 = LINE('',#19481,#19482); +#19481 = CARTESIAN_POINT('',(-0.775025389592,-2.465036748202, + 1.849999998875)); +#19482 = VECTOR('',#19483,1.); +#19483 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19484 = ORIENTED_EDGE('',*,*,#19275,.T.); +#19485 = ORIENTED_EDGE('',*,*,#19486,.F.); +#19486 = EDGE_CURVE('',#19236,#19268,#19487,.T.); +#19487 = LINE('',#19488,#19489); +#19488 = CARTESIAN_POINT('',(-0.775025389592,-2.965036741454, + 1.668014884198)); +#19489 = VECTOR('',#19490,1.); +#19490 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19491 = ORIENTED_EDGE('',*,*,#19235,.T.); +#19492 = PLANE('',#19493); +#19493 = AXIS2_PLACEMENT_3D('',#19494,#19495,#19496); +#19494 = CARTESIAN_POINT('',(-0.775025389592,-2.465036748202, + 1.849999998875)); +#19495 = DIRECTION('',(-2.38831389586E-15,0.342020143326,-0.939692620786 + )); +#19496 = DIRECTION('',(-1.,-9.860761315263E-32,2.541590561669E-15)); +#19497 = ADVANCED_FACE('',(#19498),#19514,.T.); +#19498 = FACE_BOUND('',#19499,.T.); +#19499 = EDGE_LOOP('',(#19500,#19506,#19507,#19513)); +#19500 = ORIENTED_EDGE('',*,*,#19501,.F.); +#19501 = EDGE_CURVE('',#19338,#19300,#19502,.T.); +#19502 = LINE('',#19503,#19504); +#19503 = CARTESIAN_POINT('',(-1.725025376771,-2.965036741454, + 1.331985122999)); +#19504 = VECTOR('',#19505,1.); +#19505 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19506 = ORIENTED_EDGE('',*,*,#19337,.T.); +#19507 = ORIENTED_EDGE('',*,*,#19508,.F.); +#19508 = EDGE_CURVE('',#19298,#19340,#19509,.T.); +#19509 = LINE('',#19510,#19511); +#19510 = CARTESIAN_POINT('',(-2.025025372723,-2.465036748202, + 1.150000008322)); +#19511 = VECTOR('',#19512,1.); +#19512 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19513 = ORIENTED_EDGE('',*,*,#19297,.T.); +#19514 = PLANE('',#19515); +#19515 = AXIS2_PLACEMENT_3D('',#19516,#19517,#19518); +#19516 = CARTESIAN_POINT('',(-2.025025372723,-2.965036741454, + 1.331985122999)); +#19517 = DIRECTION('',(2.38831389586E-15,-0.342020143326,-0.939692620786 + )); +#19518 = DIRECTION('',(0.,-0.939692620786,0.342020143326)); +#19519 = ADVANCED_FACE('',(#19520),#19536,.F.); +#19520 = FACE_BOUND('',#19521,.T.); +#19521 = EDGE_LOOP('',(#19522,#19528,#19529,#19535)); +#19522 = ORIENTED_EDGE('',*,*,#19523,.F.); +#19523 = EDGE_CURVE('',#19356,#19308,#19524,.T.); +#19524 = LINE('',#19525,#19526); +#19525 = CARTESIAN_POINT('',(-2.025025372723,-2.465036748202, + 1.849999998875)); +#19526 = VECTOR('',#19527,1.); +#19527 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19528 = ORIENTED_EDGE('',*,*,#19355,.T.); +#19529 = ORIENTED_EDGE('',*,*,#19530,.F.); +#19530 = EDGE_CURVE('',#19316,#19348,#19531,.T.); +#19531 = LINE('',#19532,#19533); +#19532 = CARTESIAN_POINT('',(-2.025025372723,-2.965036741454, + 1.668014884198)); +#19533 = VECTOR('',#19534,1.); +#19534 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19535 = ORIENTED_EDGE('',*,*,#19315,.T.); +#19536 = PLANE('',#19537); +#19537 = AXIS2_PLACEMENT_3D('',#19538,#19539,#19540); +#19538 = CARTESIAN_POINT('',(-2.025025372723,-2.465036748202, + 1.849999998875)); +#19539 = DIRECTION('',(-2.38831389586E-15,0.342020143326,-0.939692620786 + )); +#19540 = DIRECTION('',(-1.,-9.860761315263E-32,2.541590561669E-15)); +#19541 = ADVANCED_FACE('',(#19542),#19558,.T.); +#19542 = FACE_BOUND('',#19543,.T.); +#19543 = EDGE_LOOP('',(#19544,#19550,#19551,#19557)); +#19544 = ORIENTED_EDGE('',*,*,#19545,.F.); +#19545 = EDGE_CURVE('',#19418,#19380,#19546,.T.); +#19546 = LINE('',#19547,#19548); +#19547 = CARTESIAN_POINT('',(-2.975025359902,-2.965036741454, + 1.331985122999)); +#19548 = VECTOR('',#19549,1.); +#19549 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19550 = ORIENTED_EDGE('',*,*,#19417,.T.); +#19551 = ORIENTED_EDGE('',*,*,#19552,.F.); +#19552 = EDGE_CURVE('',#19378,#19420,#19553,.T.); +#19553 = LINE('',#19554,#19555); +#19554 = CARTESIAN_POINT('',(-3.275025355853,-2.465036748202, + 1.150000008322)); +#19555 = VECTOR('',#19556,1.); +#19556 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19557 = ORIENTED_EDGE('',*,*,#19377,.T.); +#19558 = PLANE('',#19559); +#19559 = AXIS2_PLACEMENT_3D('',#19560,#19561,#19562); +#19560 = CARTESIAN_POINT('',(-3.275025355853,-2.965036741454, + 1.331985122999)); +#19561 = DIRECTION('',(2.38831389586E-15,-0.342020143326,-0.939692620786 + )); +#19562 = DIRECTION('',(0.,-0.939692620786,0.342020143326)); +#19563 = ADVANCED_FACE('',(#19564),#19580,.F.); +#19564 = FACE_BOUND('',#19565,.T.); +#19565 = EDGE_LOOP('',(#19566,#19572,#19573,#19579)); +#19566 = ORIENTED_EDGE('',*,*,#19567,.F.); +#19567 = EDGE_CURVE('',#19436,#19388,#19568,.T.); +#19568 = LINE('',#19569,#19570); +#19569 = CARTESIAN_POINT('',(-3.275025355853,-2.465036748202, + 1.849999998875)); +#19570 = VECTOR('',#19571,1.); +#19571 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19572 = ORIENTED_EDGE('',*,*,#19435,.T.); +#19573 = ORIENTED_EDGE('',*,*,#19574,.F.); +#19574 = EDGE_CURVE('',#19396,#19428,#19575,.T.); +#19575 = LINE('',#19576,#19577); +#19576 = CARTESIAN_POINT('',(-3.275025355853,-2.965036741454, + 1.668014884198)); +#19577 = VECTOR('',#19578,1.); +#19578 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19579 = ORIENTED_EDGE('',*,*,#19395,.T.); +#19580 = PLANE('',#19581); +#19581 = AXIS2_PLACEMENT_3D('',#19582,#19583,#19584); +#19582 = CARTESIAN_POINT('',(-3.275025355853,-2.465036748202, + 1.849999998875)); +#19583 = DIRECTION('',(-2.38831389586E-15,0.342020143326,-0.939692620786 + )); +#19584 = DIRECTION('',(-1.,-9.860761315263E-32,2.541590561669E-15)); +#19585 = ADVANCED_FACE('',(#19586),#19698,.T.); +#19586 = FACE_BOUND('',#19587,.T.); +#19587 = EDGE_LOOP('',(#19588,#19599,#19607,#19615,#19624,#19632,#19641, + #19649,#19658,#19666,#19675,#19683,#19692)); +#19588 = ORIENTED_EDGE('',*,*,#19589,.T.); +#19589 = EDGE_CURVE('',#19590,#19592,#19594,.T.); +#19590 = VERTEX_POINT('',#19591); +#19591 = CARTESIAN_POINT('',(-0.47502539364,0.734963208613, + 2.599999988754)); +#19592 = VERTEX_POINT('',#19593); +#19593 = CARTESIAN_POINT('',(-0.47502539364,0.634963209963, + 2.499999990103)); +#19594 = CIRCLE('',#19595,9.999999865046E-02); +#19595 = AXIS2_PLACEMENT_3D('',#19596,#19597,#19598); +#19596 = CARTESIAN_POINT('',(-0.47502539364,0.734963208613, + 2.499999990103)); +#19597 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19598 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#19599 = ORIENTED_EDGE('',*,*,#19600,.T.); +#19600 = EDGE_CURVE('',#19592,#19601,#19603,.T.); +#19601 = VERTEX_POINT('',#19602); +#19602 = CARTESIAN_POINT('',(-0.47502539364,0.634963209963, + 0.350000019118)); +#19603 = LINE('',#19604,#19605); +#19604 = CARTESIAN_POINT('',(-0.47502539364,0.634963209963, + 2.499999990103)); +#19605 = VECTOR('',#19606,1.); +#19606 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#19607 = ORIENTED_EDGE('',*,*,#19608,.T.); +#19608 = EDGE_CURVE('',#19601,#19609,#19611,.T.); +#19609 = VERTEX_POINT('',#19610); +#19610 = CARTESIAN_POINT('',(-0.47502539364,0.634963209963, + 0.100000022492)); +#19611 = LINE('',#19612,#19613); +#19612 = CARTESIAN_POINT('',(-0.47502539364,0.634963209963, + 2.499999990103)); +#19613 = VECTOR('',#19614,1.); +#19614 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#19615 = ORIENTED_EDGE('',*,*,#19616,.T.); +#19616 = EDGE_CURVE('',#19609,#19617,#19619,.T.); +#19617 = VERTEX_POINT('',#19618); +#19618 = CARTESIAN_POINT('',(-0.47502539364,0.734963208613, + 2.384185626703E-08)); +#19619 = CIRCLE('',#19620,9.999999865046E-02); +#19620 = AXIS2_PLACEMENT_3D('',#19621,#19622,#19623); +#19621 = CARTESIAN_POINT('',(-0.47502539364,0.734963208613, + 0.100000022492)); +#19622 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19623 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#19624 = ORIENTED_EDGE('',*,*,#19625,.T.); +#19625 = EDGE_CURVE('',#19617,#19626,#19628,.T.); +#19626 = VERTEX_POINT('',#19627); +#19627 = CARTESIAN_POINT('',(-0.47502539364,1.634963196467, + 2.384185937565E-08)); +#19628 = LINE('',#19629,#19630); +#19629 = CARTESIAN_POINT('',(-0.47502539364,0.734963208613, + 2.384185626703E-08)); +#19630 = VECTOR('',#19631,1.); +#19631 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#19632 = ORIENTED_EDGE('',*,*,#19633,.T.); +#19633 = EDGE_CURVE('',#19626,#19634,#19636,.T.); +#19634 = VERTEX_POINT('',#19635); +#19635 = CARTESIAN_POINT('',(-0.47502539364,1.834963193768, + 0.200000021143)); +#19636 = CIRCLE('',#19637,0.199999997301); +#19637 = AXIS2_PLACEMENT_3D('',#19638,#19639,#19640); +#19638 = CARTESIAN_POINT('',(-0.47502539364,1.634963196467, + 0.200000021143)); +#19639 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#19640 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#19641 = ORIENTED_EDGE('',*,*,#19642,.T.); +#19642 = EDGE_CURVE('',#19634,#19643,#19645,.T.); +#19643 = VERTEX_POINT('',#19644); +#19644 = CARTESIAN_POINT('',(-0.47502539364,1.834963193768,0.44653462022 + )); +#19645 = LINE('',#19646,#19647); +#19646 = CARTESIAN_POINT('',(-0.47502539364,1.834963193768, + 0.200000021143)); +#19647 = VECTOR('',#19648,1.); +#19648 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#19649 = ORIENTED_EDGE('',*,*,#19650,.T.); +#19650 = EDGE_CURVE('',#19643,#19651,#19653,.T.); +#19651 = VERTEX_POINT('',#19652); +#19652 = CARTESIAN_POINT('',(-0.47502539364,1.686727004789, + 0.639719782871)); +#19653 = CIRCLE('',#19654,0.199999997301); +#19654 = AXIS2_PLACEMENT_3D('',#19655,#19656,#19657); +#19655 = CARTESIAN_POINT('',(-0.47502539364,1.634963196467,0.44653462022 + )); +#19656 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#19657 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#19658 = ORIENTED_EDGE('',*,*,#19659,.T.); +#19659 = EDGE_CURVE('',#19651,#19660,#19662,.T.); +#19660 = VERTEX_POINT('',#19661); +#19661 = CARTESIAN_POINT('',(-0.47502539364,1.283199392194, + 0.747844680789)); +#19662 = LINE('',#19663,#19664); +#19663 = CARTESIAN_POINT('',(-0.47502539364,1.686727004789, + 0.639719782871)); +#19664 = VECTOR('',#19665,1.); +#19665 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#19666 = ORIENTED_EDGE('',*,*,#19667,.T.); +#19667 = EDGE_CURVE('',#19660,#19668,#19670,.T.); +#19668 = VERTEX_POINT('',#19669); +#19669 = CARTESIAN_POINT('',(-0.47502539364,1.134963203215,0.94102984344 + )); +#19670 = CIRCLE('',#19671,0.199999997301); +#19671 = AXIS2_PLACEMENT_3D('',#19672,#19673,#19674); +#19672 = CARTESIAN_POINT('',(-0.47502539364,1.334963200516,0.94102984344 + )); +#19673 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#19674 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#19675 = ORIENTED_EDGE('',*,*,#19676,.T.); +#19676 = EDGE_CURVE('',#19668,#19677,#19679,.T.); +#19677 = VERTEX_POINT('',#19678); +#19678 = CARTESIAN_POINT('',(-0.47502539364,1.134963203215, + 2.499999990103)); +#19679 = LINE('',#19680,#19681); +#19680 = CARTESIAN_POINT('',(-0.47502539364,1.134963203215,0.94102984344 + )); +#19681 = VECTOR('',#19682,1.); +#19682 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#19683 = ORIENTED_EDGE('',*,*,#19684,.F.); +#19684 = EDGE_CURVE('',#19685,#19677,#19687,.T.); +#19685 = VERTEX_POINT('',#19686); +#19686 = CARTESIAN_POINT('',(-0.47502539364,1.034963204565, + 2.599999988754)); +#19687 = CIRCLE('',#19688,9.999999865046E-02); +#19688 = AXIS2_PLACEMENT_3D('',#19689,#19690,#19691); +#19689 = CARTESIAN_POINT('',(-0.47502539364,1.034963204565, + 2.499999990103)); +#19690 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19691 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#19692 = ORIENTED_EDGE('',*,*,#19693,.T.); +#19693 = EDGE_CURVE('',#19685,#19590,#19694,.T.); +#19694 = LINE('',#19695,#19696); +#19695 = CARTESIAN_POINT('',(-0.47502539364,1.034963204565, + 2.599999988754)); +#19696 = VECTOR('',#19697,1.); +#19697 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#19698 = PLANE('',#19699); +#19699 = AXIS2_PLACEMENT_3D('',#19700,#19701,#19702); +#19700 = CARTESIAN_POINT('',(-0.47502539364,0.734963208613, + 2.499999990103)); +#19701 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19702 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#19703 = ADVANCED_FACE('',(#19704),#19816,.F.); +#19704 = FACE_BOUND('',#19705,.T.); +#19705 = EDGE_LOOP('',(#19706,#19717,#19725,#19734,#19742,#19751,#19759, + #19768,#19776,#19785,#19793,#19802,#19810)); +#19706 = ORIENTED_EDGE('',*,*,#19707,.F.); +#19707 = EDGE_CURVE('',#19708,#19710,#19712,.T.); +#19708 = VERTEX_POINT('',#19709); +#19709 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 2.599999988754)); +#19710 = VERTEX_POINT('',#19711); +#19711 = CARTESIAN_POINT('',(-0.775025389592,0.634963209963, + 2.499999990103)); +#19712 = CIRCLE('',#19713,9.999999865046E-02); +#19713 = AXIS2_PLACEMENT_3D('',#19714,#19715,#19716); +#19714 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 2.499999990103)); +#19715 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19716 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#19717 = ORIENTED_EDGE('',*,*,#19718,.F.); +#19718 = EDGE_CURVE('',#19719,#19708,#19721,.T.); +#19719 = VERTEX_POINT('',#19720); +#19720 = CARTESIAN_POINT('',(-0.775025389592,1.034963204565, + 2.599999988754)); +#19721 = LINE('',#19722,#19723); +#19722 = CARTESIAN_POINT('',(-0.775025389592,1.034963204565, + 2.599999988754)); +#19723 = VECTOR('',#19724,1.); +#19724 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#19725 = ORIENTED_EDGE('',*,*,#19726,.T.); +#19726 = EDGE_CURVE('',#19719,#19727,#19729,.T.); +#19727 = VERTEX_POINT('',#19728); +#19728 = CARTESIAN_POINT('',(-0.775025389592,1.134963203215, + 2.499999990103)); +#19729 = CIRCLE('',#19730,9.999999865046E-02); +#19730 = AXIS2_PLACEMENT_3D('',#19731,#19732,#19733); +#19731 = CARTESIAN_POINT('',(-0.775025389592,1.034963204565, + 2.499999990103)); +#19732 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#19733 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#19734 = ORIENTED_EDGE('',*,*,#19735,.F.); +#19735 = EDGE_CURVE('',#19736,#19727,#19738,.T.); +#19736 = VERTEX_POINT('',#19737); +#19737 = CARTESIAN_POINT('',(-0.775025389592,1.134963203215, + 0.94102984344)); +#19738 = LINE('',#19739,#19740); +#19739 = CARTESIAN_POINT('',(-0.775025389592,1.134963203215, + 0.94102984344)); +#19740 = VECTOR('',#19741,1.); +#19741 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#19742 = ORIENTED_EDGE('',*,*,#19743,.F.); +#19743 = EDGE_CURVE('',#19744,#19736,#19746,.T.); +#19744 = VERTEX_POINT('',#19745); +#19745 = CARTESIAN_POINT('',(-0.775025389592,1.283199392194, + 0.747844680789)); +#19746 = CIRCLE('',#19747,0.199999997301); +#19747 = AXIS2_PLACEMENT_3D('',#19748,#19749,#19750); +#19748 = CARTESIAN_POINT('',(-0.775025389592,1.334963200516, + 0.94102984344)); +#19749 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#19750 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#19751 = ORIENTED_EDGE('',*,*,#19752,.F.); +#19752 = EDGE_CURVE('',#19753,#19744,#19755,.T.); +#19753 = VERTEX_POINT('',#19754); +#19754 = CARTESIAN_POINT('',(-0.775025389592,1.686727004789, + 0.639719782871)); +#19755 = LINE('',#19756,#19757); +#19756 = CARTESIAN_POINT('',(-0.775025389592,1.686727004789, + 0.639719782871)); +#19757 = VECTOR('',#19758,1.); +#19758 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#19759 = ORIENTED_EDGE('',*,*,#19760,.F.); +#19760 = EDGE_CURVE('',#19761,#19753,#19763,.T.); +#19761 = VERTEX_POINT('',#19762); +#19762 = CARTESIAN_POINT('',(-0.775025389592,1.834963193768, + 0.44653462022)); +#19763 = CIRCLE('',#19764,0.199999997301); +#19764 = AXIS2_PLACEMENT_3D('',#19765,#19766,#19767); +#19765 = CARTESIAN_POINT('',(-0.775025389592,1.634963196467, + 0.44653462022)); +#19766 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#19767 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#19768 = ORIENTED_EDGE('',*,*,#19769,.F.); +#19769 = EDGE_CURVE('',#19770,#19761,#19772,.T.); +#19770 = VERTEX_POINT('',#19771); +#19771 = CARTESIAN_POINT('',(-0.775025389592,1.834963193768, + 0.200000021143)); +#19772 = LINE('',#19773,#19774); +#19773 = CARTESIAN_POINT('',(-0.775025389592,1.834963193768, + 0.200000021143)); +#19774 = VECTOR('',#19775,1.); +#19775 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#19776 = ORIENTED_EDGE('',*,*,#19777,.F.); +#19777 = EDGE_CURVE('',#19778,#19770,#19780,.T.); +#19778 = VERTEX_POINT('',#19779); +#19779 = CARTESIAN_POINT('',(-0.775025389592,1.634963196467, + 2.384185937565E-08)); +#19780 = CIRCLE('',#19781,0.199999997301); +#19781 = AXIS2_PLACEMENT_3D('',#19782,#19783,#19784); +#19782 = CARTESIAN_POINT('',(-0.775025389592,1.634963196467, + 0.200000021143)); +#19783 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#19784 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#19785 = ORIENTED_EDGE('',*,*,#19786,.F.); +#19786 = EDGE_CURVE('',#19787,#19778,#19789,.T.); +#19787 = VERTEX_POINT('',#19788); +#19788 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 2.384185626703E-08)); +#19789 = LINE('',#19790,#19791); +#19790 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 2.384185626703E-08)); +#19791 = VECTOR('',#19792,1.); +#19792 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#19793 = ORIENTED_EDGE('',*,*,#19794,.F.); +#19794 = EDGE_CURVE('',#19795,#19787,#19797,.T.); +#19795 = VERTEX_POINT('',#19796); +#19796 = CARTESIAN_POINT('',(-0.775025389592,0.634963209963, + 0.100000022492)); +#19797 = CIRCLE('',#19798,9.999999865046E-02); +#19798 = AXIS2_PLACEMENT_3D('',#19799,#19800,#19801); +#19799 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 0.100000022492)); +#19800 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19801 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#19802 = ORIENTED_EDGE('',*,*,#19803,.F.); +#19803 = EDGE_CURVE('',#19804,#19795,#19806,.T.); +#19804 = VERTEX_POINT('',#19805); +#19805 = CARTESIAN_POINT('',(-0.775025389592,0.634963209963, + 0.350000019118)); +#19806 = LINE('',#19807,#19808); +#19807 = CARTESIAN_POINT('',(-0.775025389592,0.634963209963, + 2.499999990103)); +#19808 = VECTOR('',#19809,1.); +#19809 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#19810 = ORIENTED_EDGE('',*,*,#19811,.F.); +#19811 = EDGE_CURVE('',#19710,#19804,#19812,.T.); +#19812 = LINE('',#19813,#19814); +#19813 = CARTESIAN_POINT('',(-0.775025389592,0.634963209963, + 2.499999990103)); +#19814 = VECTOR('',#19815,1.); +#19815 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#19816 = PLANE('',#19817); +#19817 = AXIS2_PLACEMENT_3D('',#19818,#19819,#19820); +#19818 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 2.499999990103)); +#19819 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19820 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#19821 = ADVANCED_FACE('',(#19822),#19838,.T.); +#19822 = FACE_BOUND('',#19823,.T.); +#19823 = EDGE_LOOP('',(#19824,#19825,#19831,#19832)); +#19824 = ORIENTED_EDGE('',*,*,#19616,.F.); +#19825 = ORIENTED_EDGE('',*,*,#19826,.F.); +#19826 = EDGE_CURVE('',#19795,#19609,#19827,.T.); +#19827 = LINE('',#19828,#19829); +#19828 = CARTESIAN_POINT('',(-0.775025389592,0.634963209963, + 0.100000022492)); +#19829 = VECTOR('',#19830,1.); +#19830 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19831 = ORIENTED_EDGE('',*,*,#19794,.T.); +#19832 = ORIENTED_EDGE('',*,*,#19833,.T.); +#19833 = EDGE_CURVE('',#19787,#19617,#19834,.T.); +#19834 = LINE('',#19835,#19836); +#19835 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 2.384185626703E-08)); +#19836 = VECTOR('',#19837,1.); +#19837 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19838 = CYLINDRICAL_SURFACE('',#19839,9.999999865046E-02); +#19839 = AXIS2_PLACEMENT_3D('',#19840,#19841,#19842); +#19840 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 0.100000022492)); +#19841 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19842 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#19843 = ADVANCED_FACE('',(#19844),#19855,.T.); +#19844 = FACE_BOUND('',#19845,.T.); +#19845 = EDGE_LOOP('',(#19846,#19847,#19848,#19849)); +#19846 = ORIENTED_EDGE('',*,*,#19625,.F.); +#19847 = ORIENTED_EDGE('',*,*,#19833,.F.); +#19848 = ORIENTED_EDGE('',*,*,#19786,.T.); +#19849 = ORIENTED_EDGE('',*,*,#19850,.T.); +#19850 = EDGE_CURVE('',#19778,#19626,#19851,.T.); +#19851 = LINE('',#19852,#19853); +#19852 = CARTESIAN_POINT('',(-0.775025389592,1.634963196467, + 2.384185937565E-08)); +#19853 = VECTOR('',#19854,1.); +#19854 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19855 = PLANE('',#19856); +#19856 = AXIS2_PLACEMENT_3D('',#19857,#19858,#19859); +#19857 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 2.384185626703E-08)); +#19858 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#19859 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#19860 = ADVANCED_FACE('',(#19861),#19872,.T.); +#19861 = FACE_BOUND('',#19862,.T.); +#19862 = EDGE_LOOP('',(#19863,#19864,#19865,#19866)); +#19863 = ORIENTED_EDGE('',*,*,#19633,.F.); +#19864 = ORIENTED_EDGE('',*,*,#19850,.F.); +#19865 = ORIENTED_EDGE('',*,*,#19777,.T.); +#19866 = ORIENTED_EDGE('',*,*,#19867,.T.); +#19867 = EDGE_CURVE('',#19770,#19634,#19868,.T.); +#19868 = LINE('',#19869,#19870); +#19869 = CARTESIAN_POINT('',(-0.775025389592,1.834963193768, + 0.200000021143)); +#19870 = VECTOR('',#19871,1.); +#19871 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19872 = CYLINDRICAL_SURFACE('',#19873,0.199999997301); +#19873 = AXIS2_PLACEMENT_3D('',#19874,#19875,#19876); +#19874 = CARTESIAN_POINT('',(-0.775025389592,1.634963196467, + 0.200000021143)); +#19875 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#19876 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#19877 = ADVANCED_FACE('',(#19878),#19889,.T.); +#19878 = FACE_BOUND('',#19879,.T.); +#19879 = EDGE_LOOP('',(#19880,#19881,#19882,#19883)); +#19880 = ORIENTED_EDGE('',*,*,#19642,.F.); +#19881 = ORIENTED_EDGE('',*,*,#19867,.F.); +#19882 = ORIENTED_EDGE('',*,*,#19769,.T.); +#19883 = ORIENTED_EDGE('',*,*,#19884,.T.); +#19884 = EDGE_CURVE('',#19761,#19643,#19885,.T.); +#19885 = LINE('',#19886,#19887); +#19886 = CARTESIAN_POINT('',(-0.775025389592,1.834963193768, + 0.44653462022)); +#19887 = VECTOR('',#19888,1.); +#19888 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19889 = PLANE('',#19890); +#19890 = AXIS2_PLACEMENT_3D('',#19891,#19892,#19893); +#19891 = CARTESIAN_POINT('',(-0.775025389592,1.834963193768, + 0.200000021143)); +#19892 = DIRECTION('',(-6.982962677686E-15,1.,3.931258214751E-15)); +#19893 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19894 = ADVANCED_FACE('',(#19895),#19906,.T.); +#19895 = FACE_BOUND('',#19896,.T.); +#19896 = EDGE_LOOP('',(#19897,#19898,#19899,#19900)); +#19897 = ORIENTED_EDGE('',*,*,#19650,.F.); +#19898 = ORIENTED_EDGE('',*,*,#19884,.F.); +#19899 = ORIENTED_EDGE('',*,*,#19760,.T.); +#19900 = ORIENTED_EDGE('',*,*,#19901,.T.); +#19901 = EDGE_CURVE('',#19753,#19651,#19902,.T.); +#19902 = LINE('',#19903,#19904); +#19903 = CARTESIAN_POINT('',(-0.775025389592,1.686727004789, + 0.639719782871)); +#19904 = VECTOR('',#19905,1.); +#19905 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19906 = CYLINDRICAL_SURFACE('',#19907,0.199999997301); +#19907 = AXIS2_PLACEMENT_3D('',#19908,#19909,#19910); +#19908 = CARTESIAN_POINT('',(-0.775025389592,1.634963196467, + 0.44653462022)); +#19909 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#19910 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#19911 = ADVANCED_FACE('',(#19912),#19923,.T.); +#19912 = FACE_BOUND('',#19913,.T.); +#19913 = EDGE_LOOP('',(#19914,#19915,#19916,#19917)); +#19914 = ORIENTED_EDGE('',*,*,#19659,.F.); +#19915 = ORIENTED_EDGE('',*,*,#19901,.F.); +#19916 = ORIENTED_EDGE('',*,*,#19752,.T.); +#19917 = ORIENTED_EDGE('',*,*,#19918,.T.); +#19918 = EDGE_CURVE('',#19744,#19660,#19919,.T.); +#19919 = LINE('',#19920,#19921); +#19920 = CARTESIAN_POINT('',(-0.775025389592,1.283199392194, + 0.747844680789)); +#19921 = VECTOR('',#19922,1.); +#19922 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19923 = PLANE('',#19924); +#19924 = AXIS2_PLACEMENT_3D('',#19925,#19926,#19927); +#19925 = CARTESIAN_POINT('',(-0.775025389592,1.686727004789, + 0.639719782871)); +#19926 = DIRECTION('',(-1.807323732225E-15,0.258819045103,0.965925826289 + )); +#19927 = DIRECTION('',(1.,6.982962677672E-15,1.972152263053E-31)); +#19928 = ADVANCED_FACE('',(#19929),#19940,.F.); +#19929 = FACE_BOUND('',#19930,.F.); +#19930 = EDGE_LOOP('',(#19931,#19937,#19938,#19939)); +#19931 = ORIENTED_EDGE('',*,*,#19932,.F.); +#19932 = EDGE_CURVE('',#19736,#19668,#19933,.T.); +#19933 = LINE('',#19934,#19935); +#19934 = CARTESIAN_POINT('',(-0.775025389592,1.134963203215, + 0.94102984344)); +#19935 = VECTOR('',#19936,1.); +#19936 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19937 = ORIENTED_EDGE('',*,*,#19743,.F.); +#19938 = ORIENTED_EDGE('',*,*,#19918,.T.); +#19939 = ORIENTED_EDGE('',*,*,#19667,.T.); +#19940 = CYLINDRICAL_SURFACE('',#19941,0.199999997301); +#19941 = AXIS2_PLACEMENT_3D('',#19942,#19943,#19944); +#19942 = CARTESIAN_POINT('',(-0.775025389592,1.334963200516, + 0.94102984344)); +#19943 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#19944 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#19945 = ADVANCED_FACE('',(#19946),#19957,.T.); +#19946 = FACE_BOUND('',#19947,.T.); +#19947 = EDGE_LOOP('',(#19948,#19949,#19950,#19951)); +#19948 = ORIENTED_EDGE('',*,*,#19676,.F.); +#19949 = ORIENTED_EDGE('',*,*,#19932,.F.); +#19950 = ORIENTED_EDGE('',*,*,#19735,.T.); +#19951 = ORIENTED_EDGE('',*,*,#19952,.T.); +#19952 = EDGE_CURVE('',#19727,#19677,#19953,.T.); +#19953 = LINE('',#19954,#19955); +#19954 = CARTESIAN_POINT('',(-0.775025389592,1.134963203215, + 2.499999990103)); +#19955 = VECTOR('',#19956,1.); +#19956 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19957 = PLANE('',#19958); +#19958 = AXIS2_PLACEMENT_3D('',#19959,#19960,#19961); +#19959 = CARTESIAN_POINT('',(-0.775025389592,1.134963203215, + 0.94102984344)); +#19960 = DIRECTION('',(-6.982962677686E-15,1.,3.387162263827E-15)); +#19961 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19962 = ADVANCED_FACE('',(#19963),#19974,.T.); +#19963 = FACE_BOUND('',#19964,.T.); +#19964 = EDGE_LOOP('',(#19965,#19966,#19967,#19968)); +#19965 = ORIENTED_EDGE('',*,*,#19684,.T.); +#19966 = ORIENTED_EDGE('',*,*,#19952,.F.); +#19967 = ORIENTED_EDGE('',*,*,#19726,.F.); +#19968 = ORIENTED_EDGE('',*,*,#19969,.T.); +#19969 = EDGE_CURVE('',#19719,#19685,#19970,.T.); +#19970 = LINE('',#19971,#19972); +#19971 = CARTESIAN_POINT('',(-0.775025389592,1.034963204565, + 2.599999988754)); +#19972 = VECTOR('',#19973,1.); +#19973 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19974 = CYLINDRICAL_SURFACE('',#19975,9.999999865046E-02); +#19975 = AXIS2_PLACEMENT_3D('',#19976,#19977,#19978); +#19976 = CARTESIAN_POINT('',(-0.775025389592,1.034963204565, + 2.499999990103)); +#19977 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19978 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#19979 = ADVANCED_FACE('',(#19980),#19991,.T.); +#19980 = FACE_BOUND('',#19981,.T.); +#19981 = EDGE_LOOP('',(#19982,#19983,#19984,#19985)); +#19982 = ORIENTED_EDGE('',*,*,#19693,.F.); +#19983 = ORIENTED_EDGE('',*,*,#19969,.F.); +#19984 = ORIENTED_EDGE('',*,*,#19718,.T.); +#19985 = ORIENTED_EDGE('',*,*,#19986,.T.); +#19986 = EDGE_CURVE('',#19708,#19590,#19987,.T.); +#19987 = LINE('',#19988,#19989); +#19988 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 2.599999988754)); +#19989 = VECTOR('',#19990,1.); +#19990 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#19991 = PLANE('',#19992); +#19992 = AXIS2_PLACEMENT_3D('',#19993,#19994,#19995); +#19993 = CARTESIAN_POINT('',(-0.775025389592,1.034963204565, + 2.599999988754)); +#19994 = DIRECTION('',(2.185723611047E-29,-3.130080614681E-15,1.)); +#19995 = DIRECTION('',(0.,-1.,-3.130080614681E-15)); +#19996 = ADVANCED_FACE('',(#19997),#20008,.T.); +#19997 = FACE_BOUND('',#19998,.T.); +#19998 = EDGE_LOOP('',(#19999,#20000,#20001,#20002)); +#19999 = ORIENTED_EDGE('',*,*,#19589,.F.); +#20000 = ORIENTED_EDGE('',*,*,#19986,.F.); +#20001 = ORIENTED_EDGE('',*,*,#19707,.T.); +#20002 = ORIENTED_EDGE('',*,*,#20003,.T.); +#20003 = EDGE_CURVE('',#19710,#19592,#20004,.T.); +#20004 = LINE('',#20005,#20006); +#20005 = CARTESIAN_POINT('',(-0.775025389592,0.634963209963, + 2.499999990103)); +#20006 = VECTOR('',#20007,1.); +#20007 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20008 = CYLINDRICAL_SURFACE('',#20009,9.999999865046E-02); +#20009 = AXIS2_PLACEMENT_3D('',#20010,#20011,#20012); +#20010 = CARTESIAN_POINT('',(-0.775025389592,0.734963208613, + 2.499999990103)); +#20011 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20012 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20013 = ADVANCED_FACE('',(#20014),#20025,.T.); +#20014 = FACE_BOUND('',#20015,.T.); +#20015 = EDGE_LOOP('',(#20016,#20022,#20023,#20024)); +#20016 = ORIENTED_EDGE('',*,*,#20017,.F.); +#20017 = EDGE_CURVE('',#19804,#19601,#20018,.T.); +#20018 = LINE('',#20019,#20020); +#20019 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#20020 = VECTOR('',#20021,1.); +#20021 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20022 = ORIENTED_EDGE('',*,*,#19803,.T.); +#20023 = ORIENTED_EDGE('',*,*,#19826,.T.); +#20024 = ORIENTED_EDGE('',*,*,#19608,.F.); +#20025 = PLANE('',#20026); +#20026 = AXIS2_PLACEMENT_3D('',#20027,#20028,#20029); +#20027 = CARTESIAN_POINT('',(-0.775025389592,0.634963209963, + 2.499999990103)); +#20028 = DIRECTION('',(6.982962677686E-15,-1.,-3.446306248323E-15)); +#20029 = DIRECTION('',(0.,3.446306248323E-15,-1.)); +#20030 = ADVANCED_FACE('',(#20031),#20037,.F.); +#20031 = FACE_BOUND('',#20032,.T.); +#20032 = EDGE_LOOP('',(#20033,#20034,#20035,#20036)); +#20033 = ORIENTED_EDGE('',*,*,#19486,.T.); +#20034 = ORIENTED_EDGE('',*,*,#19267,.T.); +#20035 = ORIENTED_EDGE('',*,*,#19457,.T.); +#20036 = ORIENTED_EDGE('',*,*,#19243,.T.); +#20037 = PLANE('',#20038); +#20038 = AXIS2_PLACEMENT_3D('',#20039,#20040,#20041); +#20039 = CARTESIAN_POINT('',(-0.775025389592,-2.965036741454, + 1.150000008322)); +#20040 = DIRECTION('',(-6.982962677686E-15,1.,4.111025437406E-15)); +#20041 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20042 = ADVANCED_FACE('',(#20043),#20068,.F.); +#20043 = FACE_BOUND('',#20044,.T.); +#20044 = EDGE_LOOP('',(#20045,#20053,#20054,#20062)); +#20045 = ORIENTED_EDGE('',*,*,#20046,.F.); +#20046 = EDGE_CURVE('',#19228,#20047,#20049,.T.); +#20047 = VERTEX_POINT('',#20048); +#20048 = CARTESIAN_POINT('',(-0.47502539364,-0.465036775192, + 1.849999998875)); +#20049 = LINE('',#20050,#20051); +#20050 = CARTESIAN_POINT('',(-0.47502539364,-2.965036741454, + 1.849999998875)); +#20051 = VECTOR('',#20052,1.); +#20052 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#20053 = ORIENTED_EDGE('',*,*,#19227,.T.); +#20054 = ORIENTED_EDGE('',*,*,#20055,.T.); +#20055 = EDGE_CURVE('',#19218,#20056,#20058,.T.); +#20056 = VERTEX_POINT('',#20057); +#20057 = CARTESIAN_POINT('',(-0.47502539364,-0.465036775192, + 1.150000008322)); +#20058 = LINE('',#20059,#20060); +#20059 = CARTESIAN_POINT('',(-0.47502539364,-2.965036741454, + 1.150000008322)); +#20060 = VECTOR('',#20061,1.); +#20061 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#20062 = ORIENTED_EDGE('',*,*,#20063,.T.); +#20063 = EDGE_CURVE('',#20056,#20047,#20064,.T.); +#20064 = LINE('',#20065,#20066); +#20065 = CARTESIAN_POINT('',(-0.47502539364,-0.465036775192, + 1.849999998875)); +#20066 = VECTOR('',#20067,1.); +#20067 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#20068 = PLANE('',#20069); +#20069 = AXIS2_PLACEMENT_3D('',#20070,#20071,#20072); +#20070 = CARTESIAN_POINT('',(-0.47502539364,0.934963205914, + 1.849999998875)); +#20071 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20072 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#20073 = ADVANCED_FACE('',(#20074),#20099,.T.); +#20074 = FACE_BOUND('',#20075,.T.); +#20075 = EDGE_LOOP('',(#20076,#20084,#20085,#20093)); +#20076 = ORIENTED_EDGE('',*,*,#20077,.F.); +#20077 = EDGE_CURVE('',#19260,#20078,#20080,.T.); +#20078 = VERTEX_POINT('',#20079); +#20079 = CARTESIAN_POINT('',(-0.775025389592,-0.465036775192, + 1.150000008322)); +#20080 = LINE('',#20081,#20082); +#20081 = CARTESIAN_POINT('',(-0.775025389592,-2.965036741454, + 1.150000008322)); +#20082 = VECTOR('',#20083,1.); +#20083 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#20084 = ORIENTED_EDGE('',*,*,#19283,.T.); +#20085 = ORIENTED_EDGE('',*,*,#20086,.T.); +#20086 = EDGE_CURVE('',#19276,#20087,#20089,.T.); +#20087 = VERTEX_POINT('',#20088); +#20088 = CARTESIAN_POINT('',(-0.775025389592,-0.465036775192, + 1.849999998875)); +#20089 = LINE('',#20090,#20091); +#20090 = CARTESIAN_POINT('',(-0.775025389592,-2.965036741454, + 1.849999998875)); +#20091 = VECTOR('',#20092,1.); +#20092 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#20093 = ORIENTED_EDGE('',*,*,#20094,.F.); +#20094 = EDGE_CURVE('',#20078,#20087,#20095,.T.); +#20095 = LINE('',#20096,#20097); +#20096 = CARTESIAN_POINT('',(-0.775025389592,-0.465036775192, + 1.849999998875)); +#20097 = VECTOR('',#20098,1.); +#20098 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#20099 = PLANE('',#20100); +#20100 = AXIS2_PLACEMENT_3D('',#20101,#20102,#20103); +#20101 = CARTESIAN_POINT('',(-0.775025389592,0.934963205914, + 1.849999998875)); +#20102 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20103 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#20104 = ADVANCED_FACE('',(#20105),#20116,.T.); +#20105 = FACE_BOUND('',#20106,.T.); +#20106 = EDGE_LOOP('',(#20107,#20108,#20109,#20110)); +#20107 = ORIENTED_EDGE('',*,*,#20055,.F.); +#20108 = ORIENTED_EDGE('',*,*,#19464,.T.); +#20109 = ORIENTED_EDGE('',*,*,#20077,.T.); +#20110 = ORIENTED_EDGE('',*,*,#20111,.F.); +#20111 = EDGE_CURVE('',#20056,#20078,#20112,.T.); +#20112 = LINE('',#20113,#20114); +#20113 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.150000008322)); +#20114 = VECTOR('',#20115,1.); +#20115 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20116 = PLANE('',#20117); +#20117 = AXIS2_PLACEMENT_3D('',#20118,#20119,#20120); +#20118 = CARTESIAN_POINT('',(-0.775025389592,-2.965036741454, + 1.150000008322)); +#20119 = DIRECTION('',(-2.313974563217E-29,3.31374327778E-15,-1.)); +#20120 = DIRECTION('',(-1.,0.,2.313974563217E-29)); +#20121 = ADVANCED_FACE('',(#20122),#20133,.F.); +#20122 = FACE_BOUND('',#20123,.T.); +#20123 = EDGE_LOOP('',(#20124,#20125,#20126,#20127)); +#20124 = ORIENTED_EDGE('',*,*,#20086,.F.); +#20125 = ORIENTED_EDGE('',*,*,#19479,.T.); +#20126 = ORIENTED_EDGE('',*,*,#20046,.T.); +#20127 = ORIENTED_EDGE('',*,*,#20128,.T.); +#20128 = EDGE_CURVE('',#20047,#20087,#20129,.T.); +#20129 = LINE('',#20130,#20131); +#20130 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.849999998875)); +#20131 = VECTOR('',#20132,1.); +#20132 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20133 = PLANE('',#20134); +#20134 = AXIS2_PLACEMENT_3D('',#20135,#20136,#20137); +#20135 = CARTESIAN_POINT('',(-0.775025389592,-2.965036741454, + 1.849999998875)); +#20136 = DIRECTION('',(-2.309813444521E-29,3.307784318971E-15,-1.)); +#20137 = DIRECTION('',(-1.,0.,2.309813444521E-29)); +#20138 = ADVANCED_FACE('',(#20139),#20251,.T.); +#20139 = FACE_BOUND('',#20140,.T.); +#20140 = EDGE_LOOP('',(#20141,#20152,#20160,#20168,#20177,#20185,#20194, + #20202,#20211,#20219,#20228,#20236,#20245)); +#20141 = ORIENTED_EDGE('',*,*,#20142,.T.); +#20142 = EDGE_CURVE('',#20143,#20145,#20147,.T.); +#20143 = VERTEX_POINT('',#20144); +#20144 = CARTESIAN_POINT('',(-1.725025376771,0.734963208613, + 2.599999988754)); +#20145 = VERTEX_POINT('',#20146); +#20146 = CARTESIAN_POINT('',(-1.725025376771,0.634963209963, + 2.499999990103)); +#20147 = CIRCLE('',#20148,9.999999865046E-02); +#20148 = AXIS2_PLACEMENT_3D('',#20149,#20150,#20151); +#20149 = CARTESIAN_POINT('',(-1.725025376771,0.734963208613, + 2.499999990103)); +#20150 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20151 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20152 = ORIENTED_EDGE('',*,*,#20153,.T.); +#20153 = EDGE_CURVE('',#20145,#20154,#20156,.T.); +#20154 = VERTEX_POINT('',#20155); +#20155 = CARTESIAN_POINT('',(-1.725025376771,0.634963209963, + 0.350000019118)); +#20156 = LINE('',#20157,#20158); +#20157 = CARTESIAN_POINT('',(-1.725025376771,0.634963209963, + 2.499999990103)); +#20158 = VECTOR('',#20159,1.); +#20159 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#20160 = ORIENTED_EDGE('',*,*,#20161,.T.); +#20161 = EDGE_CURVE('',#20154,#20162,#20164,.T.); +#20162 = VERTEX_POINT('',#20163); +#20163 = CARTESIAN_POINT('',(-1.725025376771,0.634963209963, + 0.100000022492)); +#20164 = LINE('',#20165,#20166); +#20165 = CARTESIAN_POINT('',(-1.725025376771,0.634963209963, + 2.499999990103)); +#20166 = VECTOR('',#20167,1.); +#20167 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#20168 = ORIENTED_EDGE('',*,*,#20169,.T.); +#20169 = EDGE_CURVE('',#20162,#20170,#20172,.T.); +#20170 = VERTEX_POINT('',#20171); +#20171 = CARTESIAN_POINT('',(-1.725025376771,0.734963208613, + 2.384185626703E-08)); +#20172 = CIRCLE('',#20173,9.999999865046E-02); +#20173 = AXIS2_PLACEMENT_3D('',#20174,#20175,#20176); +#20174 = CARTESIAN_POINT('',(-1.725025376771,0.734963208613, + 0.100000022492)); +#20175 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20176 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20177 = ORIENTED_EDGE('',*,*,#20178,.T.); +#20178 = EDGE_CURVE('',#20170,#20179,#20181,.T.); +#20179 = VERTEX_POINT('',#20180); +#20180 = CARTESIAN_POINT('',(-1.725025376771,1.634963196467, + 2.384185937565E-08)); +#20181 = LINE('',#20182,#20183); +#20182 = CARTESIAN_POINT('',(-1.725025376771,0.734963208613, + 2.384185626703E-08)); +#20183 = VECTOR('',#20184,1.); +#20184 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#20185 = ORIENTED_EDGE('',*,*,#20186,.T.); +#20186 = EDGE_CURVE('',#20179,#20187,#20189,.T.); +#20187 = VERTEX_POINT('',#20188); +#20188 = CARTESIAN_POINT('',(-1.725025376771,1.834963193768, + 0.200000021143)); +#20189 = CIRCLE('',#20190,0.199999997301); +#20190 = AXIS2_PLACEMENT_3D('',#20191,#20192,#20193); +#20191 = CARTESIAN_POINT('',(-1.725025376771,1.634963196467, + 0.200000021143)); +#20192 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#20193 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20194 = ORIENTED_EDGE('',*,*,#20195,.T.); +#20195 = EDGE_CURVE('',#20187,#20196,#20198,.T.); +#20196 = VERTEX_POINT('',#20197); +#20197 = CARTESIAN_POINT('',(-1.725025376771,1.834963193768, + 0.44653462022)); +#20198 = LINE('',#20199,#20200); +#20199 = CARTESIAN_POINT('',(-1.725025376771,1.834963193768, + 0.200000021143)); +#20200 = VECTOR('',#20201,1.); +#20201 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#20202 = ORIENTED_EDGE('',*,*,#20203,.T.); +#20203 = EDGE_CURVE('',#20196,#20204,#20206,.T.); +#20204 = VERTEX_POINT('',#20205); +#20205 = CARTESIAN_POINT('',(-1.725025376771,1.686727004789, + 0.639719782871)); +#20206 = CIRCLE('',#20207,0.199999997301); +#20207 = AXIS2_PLACEMENT_3D('',#20208,#20209,#20210); +#20208 = CARTESIAN_POINT('',(-1.725025376771,1.634963196467, + 0.44653462022)); +#20209 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#20210 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20211 = ORIENTED_EDGE('',*,*,#20212,.T.); +#20212 = EDGE_CURVE('',#20204,#20213,#20215,.T.); +#20213 = VERTEX_POINT('',#20214); +#20214 = CARTESIAN_POINT('',(-1.725025376771,1.283199392194, + 0.747844680789)); +#20215 = LINE('',#20216,#20217); +#20216 = CARTESIAN_POINT('',(-1.725025376771,1.686727004789, + 0.639719782871)); +#20217 = VECTOR('',#20218,1.); +#20218 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#20219 = ORIENTED_EDGE('',*,*,#20220,.T.); +#20220 = EDGE_CURVE('',#20213,#20221,#20223,.T.); +#20221 = VERTEX_POINT('',#20222); +#20222 = CARTESIAN_POINT('',(-1.725025376771,1.134963203215, + 0.94102984344)); +#20223 = CIRCLE('',#20224,0.199999997301); +#20224 = AXIS2_PLACEMENT_3D('',#20225,#20226,#20227); +#20225 = CARTESIAN_POINT('',(-1.725025376771,1.334963200516, + 0.94102984344)); +#20226 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#20227 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#20228 = ORIENTED_EDGE('',*,*,#20229,.T.); +#20229 = EDGE_CURVE('',#20221,#20230,#20232,.T.); +#20230 = VERTEX_POINT('',#20231); +#20231 = CARTESIAN_POINT('',(-1.725025376771,1.134963203215, + 2.499999990103)); +#20232 = LINE('',#20233,#20234); +#20233 = CARTESIAN_POINT('',(-1.725025376771,1.134963203215, + 0.94102984344)); +#20234 = VECTOR('',#20235,1.); +#20235 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#20236 = ORIENTED_EDGE('',*,*,#20237,.F.); +#20237 = EDGE_CURVE('',#20238,#20230,#20240,.T.); +#20238 = VERTEX_POINT('',#20239); +#20239 = CARTESIAN_POINT('',(-1.725025376771,1.034963204564, + 2.599999988754)); +#20240 = CIRCLE('',#20241,9.999999865046E-02); +#20241 = AXIS2_PLACEMENT_3D('',#20242,#20243,#20244); +#20242 = CARTESIAN_POINT('',(-1.725025376771,1.034963204564, + 2.499999990103)); +#20243 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20244 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#20245 = ORIENTED_EDGE('',*,*,#20246,.T.); +#20246 = EDGE_CURVE('',#20238,#20143,#20247,.T.); +#20247 = LINE('',#20248,#20249); +#20248 = CARTESIAN_POINT('',(-1.725025376771,1.034963204564, + 2.599999988754)); +#20249 = VECTOR('',#20250,1.); +#20250 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#20251 = PLANE('',#20252); +#20252 = AXIS2_PLACEMENT_3D('',#20253,#20254,#20255); +#20253 = CARTESIAN_POINT('',(-1.725025376771,0.734963208613, + 2.499999990103)); +#20254 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20255 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#20256 = ADVANCED_FACE('',(#20257),#20369,.F.); +#20257 = FACE_BOUND('',#20258,.T.); +#20258 = EDGE_LOOP('',(#20259,#20270,#20278,#20287,#20295,#20304,#20312, + #20321,#20329,#20338,#20346,#20355,#20363)); +#20259 = ORIENTED_EDGE('',*,*,#20260,.F.); +#20260 = EDGE_CURVE('',#20261,#20263,#20265,.T.); +#20261 = VERTEX_POINT('',#20262); +#20262 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 2.599999988754)); +#20263 = VERTEX_POINT('',#20264); +#20264 = CARTESIAN_POINT('',(-2.025025372723,0.634963209963, + 2.499999990103)); +#20265 = CIRCLE('',#20266,9.999999865046E-02); +#20266 = AXIS2_PLACEMENT_3D('',#20267,#20268,#20269); +#20267 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 2.499999990103)); +#20268 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20269 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20270 = ORIENTED_EDGE('',*,*,#20271,.F.); +#20271 = EDGE_CURVE('',#20272,#20261,#20274,.T.); +#20272 = VERTEX_POINT('',#20273); +#20273 = CARTESIAN_POINT('',(-2.025025372723,1.034963204564, + 2.599999988754)); +#20274 = LINE('',#20275,#20276); +#20275 = CARTESIAN_POINT('',(-2.025025372723,1.034963204564, + 2.599999988754)); +#20276 = VECTOR('',#20277,1.); +#20277 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#20278 = ORIENTED_EDGE('',*,*,#20279,.T.); +#20279 = EDGE_CURVE('',#20272,#20280,#20282,.T.); +#20280 = VERTEX_POINT('',#20281); +#20281 = CARTESIAN_POINT('',(-2.025025372723,1.134963203215, + 2.499999990103)); +#20282 = CIRCLE('',#20283,9.999999865046E-02); +#20283 = AXIS2_PLACEMENT_3D('',#20284,#20285,#20286); +#20284 = CARTESIAN_POINT('',(-2.025025372723,1.034963204564, + 2.499999990103)); +#20285 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20286 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#20287 = ORIENTED_EDGE('',*,*,#20288,.F.); +#20288 = EDGE_CURVE('',#20289,#20280,#20291,.T.); +#20289 = VERTEX_POINT('',#20290); +#20290 = CARTESIAN_POINT('',(-2.025025372723,1.134963203215, + 0.94102984344)); +#20291 = LINE('',#20292,#20293); +#20292 = CARTESIAN_POINT('',(-2.025025372723,1.134963203215, + 0.94102984344)); +#20293 = VECTOR('',#20294,1.); +#20294 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#20295 = ORIENTED_EDGE('',*,*,#20296,.F.); +#20296 = EDGE_CURVE('',#20297,#20289,#20299,.T.); +#20297 = VERTEX_POINT('',#20298); +#20298 = CARTESIAN_POINT('',(-2.025025372723,1.283199392194, + 0.747844680789)); +#20299 = CIRCLE('',#20300,0.199999997301); +#20300 = AXIS2_PLACEMENT_3D('',#20301,#20302,#20303); +#20301 = CARTESIAN_POINT('',(-2.025025372723,1.334963200516, + 0.94102984344)); +#20302 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#20303 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#20304 = ORIENTED_EDGE('',*,*,#20305,.F.); +#20305 = EDGE_CURVE('',#20306,#20297,#20308,.T.); +#20306 = VERTEX_POINT('',#20307); +#20307 = CARTESIAN_POINT('',(-2.025025372723,1.686727004789, + 0.639719782871)); +#20308 = LINE('',#20309,#20310); +#20309 = CARTESIAN_POINT('',(-2.025025372723,1.686727004789, + 0.639719782871)); +#20310 = VECTOR('',#20311,1.); +#20311 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#20312 = ORIENTED_EDGE('',*,*,#20313,.F.); +#20313 = EDGE_CURVE('',#20314,#20306,#20316,.T.); +#20314 = VERTEX_POINT('',#20315); +#20315 = CARTESIAN_POINT('',(-2.025025372723,1.834963193768, + 0.44653462022)); +#20316 = CIRCLE('',#20317,0.199999997301); +#20317 = AXIS2_PLACEMENT_3D('',#20318,#20319,#20320); +#20318 = CARTESIAN_POINT('',(-2.025025372723,1.634963196467, + 0.44653462022)); +#20319 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#20320 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20321 = ORIENTED_EDGE('',*,*,#20322,.F.); +#20322 = EDGE_CURVE('',#20323,#20314,#20325,.T.); +#20323 = VERTEX_POINT('',#20324); +#20324 = CARTESIAN_POINT('',(-2.025025372723,1.834963193768, + 0.200000021143)); +#20325 = LINE('',#20326,#20327); +#20326 = CARTESIAN_POINT('',(-2.025025372723,1.834963193768, + 0.200000021143)); +#20327 = VECTOR('',#20328,1.); +#20328 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#20329 = ORIENTED_EDGE('',*,*,#20330,.F.); +#20330 = EDGE_CURVE('',#20331,#20323,#20333,.T.); +#20331 = VERTEX_POINT('',#20332); +#20332 = CARTESIAN_POINT('',(-2.025025372723,1.634963196467, + 2.384185937565E-08)); +#20333 = CIRCLE('',#20334,0.199999997301); +#20334 = AXIS2_PLACEMENT_3D('',#20335,#20336,#20337); +#20335 = CARTESIAN_POINT('',(-2.025025372723,1.634963196467, + 0.200000021143)); +#20336 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#20337 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20338 = ORIENTED_EDGE('',*,*,#20339,.F.); +#20339 = EDGE_CURVE('',#20340,#20331,#20342,.T.); +#20340 = VERTEX_POINT('',#20341); +#20341 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 2.384185626703E-08)); +#20342 = LINE('',#20343,#20344); +#20343 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 2.384185626703E-08)); +#20344 = VECTOR('',#20345,1.); +#20345 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#20346 = ORIENTED_EDGE('',*,*,#20347,.F.); +#20347 = EDGE_CURVE('',#20348,#20340,#20350,.T.); +#20348 = VERTEX_POINT('',#20349); +#20349 = CARTESIAN_POINT('',(-2.025025372723,0.634963209963, + 0.100000022492)); +#20350 = CIRCLE('',#20351,9.999999865046E-02); +#20351 = AXIS2_PLACEMENT_3D('',#20352,#20353,#20354); +#20352 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 0.100000022492)); +#20353 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20354 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20355 = ORIENTED_EDGE('',*,*,#20356,.F.); +#20356 = EDGE_CURVE('',#20357,#20348,#20359,.T.); +#20357 = VERTEX_POINT('',#20358); +#20358 = CARTESIAN_POINT('',(-2.025025372723,0.634963209963, + 0.350000019118)); +#20359 = LINE('',#20360,#20361); +#20360 = CARTESIAN_POINT('',(-2.025025372723,0.634963209963, + 2.499999990103)); +#20361 = VECTOR('',#20362,1.); +#20362 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#20363 = ORIENTED_EDGE('',*,*,#20364,.F.); +#20364 = EDGE_CURVE('',#20263,#20357,#20365,.T.); +#20365 = LINE('',#20366,#20367); +#20366 = CARTESIAN_POINT('',(-2.025025372723,0.634963209963, + 2.499999990103)); +#20367 = VECTOR('',#20368,1.); +#20368 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#20369 = PLANE('',#20370); +#20370 = AXIS2_PLACEMENT_3D('',#20371,#20372,#20373); +#20371 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 2.499999990103)); +#20372 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20373 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#20374 = ADVANCED_FACE('',(#20375),#20391,.T.); +#20375 = FACE_BOUND('',#20376,.T.); +#20376 = EDGE_LOOP('',(#20377,#20378,#20384,#20385)); +#20377 = ORIENTED_EDGE('',*,*,#20169,.F.); +#20378 = ORIENTED_EDGE('',*,*,#20379,.F.); +#20379 = EDGE_CURVE('',#20348,#20162,#20380,.T.); +#20380 = LINE('',#20381,#20382); +#20381 = CARTESIAN_POINT('',(-2.025025372723,0.634963209963, + 0.100000022492)); +#20382 = VECTOR('',#20383,1.); +#20383 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20384 = ORIENTED_EDGE('',*,*,#20347,.T.); +#20385 = ORIENTED_EDGE('',*,*,#20386,.T.); +#20386 = EDGE_CURVE('',#20340,#20170,#20387,.T.); +#20387 = LINE('',#20388,#20389); +#20388 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 2.384185626703E-08)); +#20389 = VECTOR('',#20390,1.); +#20390 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20391 = CYLINDRICAL_SURFACE('',#20392,9.999999865046E-02); +#20392 = AXIS2_PLACEMENT_3D('',#20393,#20394,#20395); +#20393 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 0.100000022492)); +#20394 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20395 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20396 = ADVANCED_FACE('',(#20397),#20408,.T.); +#20397 = FACE_BOUND('',#20398,.T.); +#20398 = EDGE_LOOP('',(#20399,#20400,#20401,#20402)); +#20399 = ORIENTED_EDGE('',*,*,#20178,.F.); +#20400 = ORIENTED_EDGE('',*,*,#20386,.F.); +#20401 = ORIENTED_EDGE('',*,*,#20339,.T.); +#20402 = ORIENTED_EDGE('',*,*,#20403,.T.); +#20403 = EDGE_CURVE('',#20331,#20179,#20404,.T.); +#20404 = LINE('',#20405,#20406); +#20405 = CARTESIAN_POINT('',(-2.025025372723,1.634963196467, + 2.384185937565E-08)); +#20406 = VECTOR('',#20407,1.); +#20407 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20408 = PLANE('',#20409); +#20409 = AXIS2_PLACEMENT_3D('',#20410,#20411,#20412); +#20410 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 2.384185626703E-08)); +#20411 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#20412 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#20413 = ADVANCED_FACE('',(#20414),#20425,.T.); +#20414 = FACE_BOUND('',#20415,.T.); +#20415 = EDGE_LOOP('',(#20416,#20417,#20418,#20419)); +#20416 = ORIENTED_EDGE('',*,*,#20186,.F.); +#20417 = ORIENTED_EDGE('',*,*,#20403,.F.); +#20418 = ORIENTED_EDGE('',*,*,#20330,.T.); +#20419 = ORIENTED_EDGE('',*,*,#20420,.T.); +#20420 = EDGE_CURVE('',#20323,#20187,#20421,.T.); +#20421 = LINE('',#20422,#20423); +#20422 = CARTESIAN_POINT('',(-2.025025372723,1.834963193768, + 0.200000021143)); +#20423 = VECTOR('',#20424,1.); +#20424 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20425 = CYLINDRICAL_SURFACE('',#20426,0.199999997301); +#20426 = AXIS2_PLACEMENT_3D('',#20427,#20428,#20429); +#20427 = CARTESIAN_POINT('',(-2.025025372723,1.634963196467, + 0.200000021143)); +#20428 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#20429 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20430 = ADVANCED_FACE('',(#20431),#20442,.T.); +#20431 = FACE_BOUND('',#20432,.T.); +#20432 = EDGE_LOOP('',(#20433,#20434,#20435,#20436)); +#20433 = ORIENTED_EDGE('',*,*,#20195,.F.); +#20434 = ORIENTED_EDGE('',*,*,#20420,.F.); +#20435 = ORIENTED_EDGE('',*,*,#20322,.T.); +#20436 = ORIENTED_EDGE('',*,*,#20437,.T.); +#20437 = EDGE_CURVE('',#20314,#20196,#20438,.T.); +#20438 = LINE('',#20439,#20440); +#20439 = CARTESIAN_POINT('',(-2.025025372723,1.834963193768, + 0.44653462022)); +#20440 = VECTOR('',#20441,1.); +#20441 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20442 = PLANE('',#20443); +#20443 = AXIS2_PLACEMENT_3D('',#20444,#20445,#20446); +#20444 = CARTESIAN_POINT('',(-2.025025372723,1.834963193768, + 0.200000021143)); +#20445 = DIRECTION('',(-6.982962677686E-15,1.,3.931258214751E-15)); +#20446 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20447 = ADVANCED_FACE('',(#20448),#20459,.T.); +#20448 = FACE_BOUND('',#20449,.T.); +#20449 = EDGE_LOOP('',(#20450,#20451,#20452,#20453)); +#20450 = ORIENTED_EDGE('',*,*,#20203,.F.); +#20451 = ORIENTED_EDGE('',*,*,#20437,.F.); +#20452 = ORIENTED_EDGE('',*,*,#20313,.T.); +#20453 = ORIENTED_EDGE('',*,*,#20454,.T.); +#20454 = EDGE_CURVE('',#20306,#20204,#20455,.T.); +#20455 = LINE('',#20456,#20457); +#20456 = CARTESIAN_POINT('',(-2.025025372723,1.686727004789, + 0.639719782871)); +#20457 = VECTOR('',#20458,1.); +#20458 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20459 = CYLINDRICAL_SURFACE('',#20460,0.199999997301); +#20460 = AXIS2_PLACEMENT_3D('',#20461,#20462,#20463); +#20461 = CARTESIAN_POINT('',(-2.025025372723,1.634963196467, + 0.44653462022)); +#20462 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#20463 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20464 = ADVANCED_FACE('',(#20465),#20476,.T.); +#20465 = FACE_BOUND('',#20466,.T.); +#20466 = EDGE_LOOP('',(#20467,#20468,#20469,#20470)); +#20467 = ORIENTED_EDGE('',*,*,#20212,.F.); +#20468 = ORIENTED_EDGE('',*,*,#20454,.F.); +#20469 = ORIENTED_EDGE('',*,*,#20305,.T.); +#20470 = ORIENTED_EDGE('',*,*,#20471,.T.); +#20471 = EDGE_CURVE('',#20297,#20213,#20472,.T.); +#20472 = LINE('',#20473,#20474); +#20473 = CARTESIAN_POINT('',(-2.025025372723,1.283199392194, + 0.747844680789)); +#20474 = VECTOR('',#20475,1.); +#20475 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20476 = PLANE('',#20477); +#20477 = AXIS2_PLACEMENT_3D('',#20478,#20479,#20480); +#20478 = CARTESIAN_POINT('',(-2.025025372723,1.686727004789, + 0.639719782871)); +#20479 = DIRECTION('',(-1.807323732225E-15,0.258819045103,0.965925826289 + )); +#20480 = DIRECTION('',(1.,6.982962677672E-15,1.972152263053E-31)); +#20481 = ADVANCED_FACE('',(#20482),#20493,.F.); +#20482 = FACE_BOUND('',#20483,.F.); +#20483 = EDGE_LOOP('',(#20484,#20490,#20491,#20492)); +#20484 = ORIENTED_EDGE('',*,*,#20485,.F.); +#20485 = EDGE_CURVE('',#20289,#20221,#20486,.T.); +#20486 = LINE('',#20487,#20488); +#20487 = CARTESIAN_POINT('',(-2.025025372723,1.134963203215, + 0.94102984344)); +#20488 = VECTOR('',#20489,1.); +#20489 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20490 = ORIENTED_EDGE('',*,*,#20296,.F.); +#20491 = ORIENTED_EDGE('',*,*,#20471,.T.); +#20492 = ORIENTED_EDGE('',*,*,#20220,.T.); +#20493 = CYLINDRICAL_SURFACE('',#20494,0.199999997301); +#20494 = AXIS2_PLACEMENT_3D('',#20495,#20496,#20497); +#20495 = CARTESIAN_POINT('',(-2.025025372723,1.334963200516, + 0.94102984344)); +#20496 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#20497 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20498 = ADVANCED_FACE('',(#20499),#20510,.T.); +#20499 = FACE_BOUND('',#20500,.T.); +#20500 = EDGE_LOOP('',(#20501,#20502,#20503,#20504)); +#20501 = ORIENTED_EDGE('',*,*,#20229,.F.); +#20502 = ORIENTED_EDGE('',*,*,#20485,.F.); +#20503 = ORIENTED_EDGE('',*,*,#20288,.T.); +#20504 = ORIENTED_EDGE('',*,*,#20505,.T.); +#20505 = EDGE_CURVE('',#20280,#20230,#20506,.T.); +#20506 = LINE('',#20507,#20508); +#20507 = CARTESIAN_POINT('',(-2.025025372723,1.134963203215, + 2.499999990103)); +#20508 = VECTOR('',#20509,1.); +#20509 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20510 = PLANE('',#20511); +#20511 = AXIS2_PLACEMENT_3D('',#20512,#20513,#20514); +#20512 = CARTESIAN_POINT('',(-2.025025372723,1.134963203215, + 0.94102984344)); +#20513 = DIRECTION('',(-6.982962677686E-15,1.,3.387162263827E-15)); +#20514 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20515 = ADVANCED_FACE('',(#20516),#20527,.T.); +#20516 = FACE_BOUND('',#20517,.T.); +#20517 = EDGE_LOOP('',(#20518,#20519,#20520,#20521)); +#20518 = ORIENTED_EDGE('',*,*,#20237,.T.); +#20519 = ORIENTED_EDGE('',*,*,#20505,.F.); +#20520 = ORIENTED_EDGE('',*,*,#20279,.F.); +#20521 = ORIENTED_EDGE('',*,*,#20522,.T.); +#20522 = EDGE_CURVE('',#20272,#20238,#20523,.T.); +#20523 = LINE('',#20524,#20525); +#20524 = CARTESIAN_POINT('',(-2.025025372723,1.034963204564, + 2.599999988754)); +#20525 = VECTOR('',#20526,1.); +#20526 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20527 = CYLINDRICAL_SURFACE('',#20528,9.999999865046E-02); +#20528 = AXIS2_PLACEMENT_3D('',#20529,#20530,#20531); +#20529 = CARTESIAN_POINT('',(-2.025025372723,1.034963204564, + 2.499999990103)); +#20530 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20531 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20532 = ADVANCED_FACE('',(#20533),#20544,.T.); +#20533 = FACE_BOUND('',#20534,.T.); +#20534 = EDGE_LOOP('',(#20535,#20536,#20537,#20538)); +#20535 = ORIENTED_EDGE('',*,*,#20246,.F.); +#20536 = ORIENTED_EDGE('',*,*,#20522,.F.); +#20537 = ORIENTED_EDGE('',*,*,#20271,.T.); +#20538 = ORIENTED_EDGE('',*,*,#20539,.T.); +#20539 = EDGE_CURVE('',#20261,#20143,#20540,.T.); +#20540 = LINE('',#20541,#20542); +#20541 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 2.599999988754)); +#20542 = VECTOR('',#20543,1.); +#20543 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20544 = PLANE('',#20545); +#20545 = AXIS2_PLACEMENT_3D('',#20546,#20547,#20548); +#20546 = CARTESIAN_POINT('',(-2.025025372723,1.034963204564, + 2.599999988754)); +#20547 = DIRECTION('',(2.185723611047E-29,-3.130080614681E-15,1.)); +#20548 = DIRECTION('',(0.,-1.,-3.130080614681E-15)); +#20549 = ADVANCED_FACE('',(#20550),#20561,.T.); +#20550 = FACE_BOUND('',#20551,.T.); +#20551 = EDGE_LOOP('',(#20552,#20553,#20554,#20555)); +#20552 = ORIENTED_EDGE('',*,*,#20142,.F.); +#20553 = ORIENTED_EDGE('',*,*,#20539,.F.); +#20554 = ORIENTED_EDGE('',*,*,#20260,.T.); +#20555 = ORIENTED_EDGE('',*,*,#20556,.T.); +#20556 = EDGE_CURVE('',#20263,#20145,#20557,.T.); +#20557 = LINE('',#20558,#20559); +#20558 = CARTESIAN_POINT('',(-2.025025372723,0.634963209963, + 2.499999990103)); +#20559 = VECTOR('',#20560,1.); +#20560 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20561 = CYLINDRICAL_SURFACE('',#20562,9.999999865046E-02); +#20562 = AXIS2_PLACEMENT_3D('',#20563,#20564,#20565); +#20563 = CARTESIAN_POINT('',(-2.025025372723,0.734963208613, + 2.499999990103)); +#20564 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20565 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20566 = ADVANCED_FACE('',(#20567),#20578,.T.); +#20567 = FACE_BOUND('',#20568,.T.); +#20568 = EDGE_LOOP('',(#20569,#20575,#20576,#20577)); +#20569 = ORIENTED_EDGE('',*,*,#20570,.F.); +#20570 = EDGE_CURVE('',#20357,#20154,#20571,.T.); +#20571 = LINE('',#20572,#20573); +#20572 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#20573 = VECTOR('',#20574,1.); +#20574 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20575 = ORIENTED_EDGE('',*,*,#20356,.T.); +#20576 = ORIENTED_EDGE('',*,*,#20379,.T.); +#20577 = ORIENTED_EDGE('',*,*,#20161,.F.); +#20578 = PLANE('',#20579); +#20579 = AXIS2_PLACEMENT_3D('',#20580,#20581,#20582); +#20580 = CARTESIAN_POINT('',(-2.025025372723,0.634963209963, + 2.499999990103)); +#20581 = DIRECTION('',(6.982962677686E-15,-1.,-3.446306248323E-15)); +#20582 = DIRECTION('',(0.,3.446306248323E-15,-1.)); +#20583 = ADVANCED_FACE('',(#20584),#20590,.F.); +#20584 = FACE_BOUND('',#20585,.T.); +#20585 = EDGE_LOOP('',(#20586,#20587,#20588,#20589)); +#20586 = ORIENTED_EDGE('',*,*,#19530,.T.); +#20587 = ORIENTED_EDGE('',*,*,#19347,.T.); +#20588 = ORIENTED_EDGE('',*,*,#19501,.T.); +#20589 = ORIENTED_EDGE('',*,*,#19323,.T.); +#20590 = PLANE('',#20591); +#20591 = AXIS2_PLACEMENT_3D('',#20592,#20593,#20594); +#20592 = CARTESIAN_POINT('',(-2.025025372723,-2.965036741454, + 1.150000008322)); +#20593 = DIRECTION('',(-6.982962677686E-15,1.,4.111025437406E-15)); +#20594 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20595 = ADVANCED_FACE('',(#20596),#20621,.F.); +#20596 = FACE_BOUND('',#20597,.T.); +#20597 = EDGE_LOOP('',(#20598,#20606,#20607,#20615)); +#20598 = ORIENTED_EDGE('',*,*,#20599,.F.); +#20599 = EDGE_CURVE('',#19308,#20600,#20602,.T.); +#20600 = VERTEX_POINT('',#20601); +#20601 = CARTESIAN_POINT('',(-1.725025376771,-0.465036775192, + 1.849999998875)); +#20602 = LINE('',#20603,#20604); +#20603 = CARTESIAN_POINT('',(-1.725025376771,-2.965036741454, + 1.849999998875)); +#20604 = VECTOR('',#20605,1.); +#20605 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#20606 = ORIENTED_EDGE('',*,*,#19307,.T.); +#20607 = ORIENTED_EDGE('',*,*,#20608,.T.); +#20608 = EDGE_CURVE('',#19298,#20609,#20611,.T.); +#20609 = VERTEX_POINT('',#20610); +#20610 = CARTESIAN_POINT('',(-1.725025376771,-0.465036775192, + 1.150000008322)); +#20611 = LINE('',#20612,#20613); +#20612 = CARTESIAN_POINT('',(-1.725025376771,-2.965036741454, + 1.150000008322)); +#20613 = VECTOR('',#20614,1.); +#20614 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#20615 = ORIENTED_EDGE('',*,*,#20616,.T.); +#20616 = EDGE_CURVE('',#20609,#20600,#20617,.T.); +#20617 = LINE('',#20618,#20619); +#20618 = CARTESIAN_POINT('',(-1.725025376771,-0.465036775192, + 1.849999998875)); +#20619 = VECTOR('',#20620,1.); +#20620 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#20621 = PLANE('',#20622); +#20622 = AXIS2_PLACEMENT_3D('',#20623,#20624,#20625); +#20623 = CARTESIAN_POINT('',(-1.725025376771,0.934963205914, + 1.849999998875)); +#20624 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20625 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#20626 = ADVANCED_FACE('',(#20627),#20652,.T.); +#20627 = FACE_BOUND('',#20628,.T.); +#20628 = EDGE_LOOP('',(#20629,#20637,#20638,#20646)); +#20629 = ORIENTED_EDGE('',*,*,#20630,.F.); +#20630 = EDGE_CURVE('',#19340,#20631,#20633,.T.); +#20631 = VERTEX_POINT('',#20632); +#20632 = CARTESIAN_POINT('',(-2.025025372723,-0.465036775192, + 1.150000008322)); +#20633 = LINE('',#20634,#20635); +#20634 = CARTESIAN_POINT('',(-2.025025372723,-2.965036741454, + 1.150000008322)); +#20635 = VECTOR('',#20636,1.); +#20636 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#20637 = ORIENTED_EDGE('',*,*,#19363,.T.); +#20638 = ORIENTED_EDGE('',*,*,#20639,.T.); +#20639 = EDGE_CURVE('',#19356,#20640,#20642,.T.); +#20640 = VERTEX_POINT('',#20641); +#20641 = CARTESIAN_POINT('',(-2.025025372723,-0.465036775192, + 1.849999998875)); +#20642 = LINE('',#20643,#20644); +#20643 = CARTESIAN_POINT('',(-2.025025372723,-2.965036741454, + 1.849999998875)); +#20644 = VECTOR('',#20645,1.); +#20645 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#20646 = ORIENTED_EDGE('',*,*,#20647,.F.); +#20647 = EDGE_CURVE('',#20631,#20640,#20648,.T.); +#20648 = LINE('',#20649,#20650); +#20649 = CARTESIAN_POINT('',(-2.025025372723,-0.465036775192, + 1.849999998875)); +#20650 = VECTOR('',#20651,1.); +#20651 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#20652 = PLANE('',#20653); +#20653 = AXIS2_PLACEMENT_3D('',#20654,#20655,#20656); +#20654 = CARTESIAN_POINT('',(-2.025025372723,0.934963205914, + 1.849999998875)); +#20655 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20656 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#20657 = ADVANCED_FACE('',(#20658),#20669,.T.); +#20658 = FACE_BOUND('',#20659,.T.); +#20659 = EDGE_LOOP('',(#20660,#20661,#20662,#20663)); +#20660 = ORIENTED_EDGE('',*,*,#20608,.F.); +#20661 = ORIENTED_EDGE('',*,*,#19508,.T.); +#20662 = ORIENTED_EDGE('',*,*,#20630,.T.); +#20663 = ORIENTED_EDGE('',*,*,#20664,.F.); +#20664 = EDGE_CURVE('',#20609,#20631,#20665,.T.); +#20665 = LINE('',#20666,#20667); +#20666 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.150000008322)); +#20667 = VECTOR('',#20668,1.); +#20668 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20669 = PLANE('',#20670); +#20670 = AXIS2_PLACEMENT_3D('',#20671,#20672,#20673); +#20671 = CARTESIAN_POINT('',(-2.025025372723,-2.965036741454, + 1.150000008322)); +#20672 = DIRECTION('',(-2.313974563217E-29,3.31374327778E-15,-1.)); +#20673 = DIRECTION('',(-1.,0.,2.313974563217E-29)); +#20674 = ADVANCED_FACE('',(#20675),#20686,.F.); +#20675 = FACE_BOUND('',#20676,.T.); +#20676 = EDGE_LOOP('',(#20677,#20678,#20679,#20680)); +#20677 = ORIENTED_EDGE('',*,*,#20639,.F.); +#20678 = ORIENTED_EDGE('',*,*,#19523,.T.); +#20679 = ORIENTED_EDGE('',*,*,#20599,.T.); +#20680 = ORIENTED_EDGE('',*,*,#20681,.T.); +#20681 = EDGE_CURVE('',#20600,#20640,#20682,.T.); +#20682 = LINE('',#20683,#20684); +#20683 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.849999998875)); +#20684 = VECTOR('',#20685,1.); +#20685 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20686 = PLANE('',#20687); +#20687 = AXIS2_PLACEMENT_3D('',#20688,#20689,#20690); +#20688 = CARTESIAN_POINT('',(-2.025025372723,-2.965036741454, + 1.849999998875)); +#20689 = DIRECTION('',(-2.309813444521E-29,3.307784318971E-15,-1.)); +#20690 = DIRECTION('',(-1.,0.,2.309813444521E-29)); +#20691 = ADVANCED_FACE('',(#20692),#20804,.T.); +#20692 = FACE_BOUND('',#20693,.T.); +#20693 = EDGE_LOOP('',(#20694,#20705,#20713,#20721,#20730,#20738,#20747, + #20755,#20764,#20772,#20781,#20789,#20798)); +#20694 = ORIENTED_EDGE('',*,*,#20695,.T.); +#20695 = EDGE_CURVE('',#20696,#20698,#20700,.T.); +#20696 = VERTEX_POINT('',#20697); +#20697 = CARTESIAN_POINT('',(-2.975025359902,0.734963208613, + 2.599999988754)); +#20698 = VERTEX_POINT('',#20699); +#20699 = CARTESIAN_POINT('',(-2.975025359902,0.634963209963, + 2.499999990103)); +#20700 = CIRCLE('',#20701,9.999999865046E-02); +#20701 = AXIS2_PLACEMENT_3D('',#20702,#20703,#20704); +#20702 = CARTESIAN_POINT('',(-2.975025359902,0.734963208613, + 2.499999990103)); +#20703 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20704 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20705 = ORIENTED_EDGE('',*,*,#20706,.T.); +#20706 = EDGE_CURVE('',#20698,#20707,#20709,.T.); +#20707 = VERTEX_POINT('',#20708); +#20708 = CARTESIAN_POINT('',(-2.975025359902,0.634963209963, + 0.350000019118)); +#20709 = LINE('',#20710,#20711); +#20710 = CARTESIAN_POINT('',(-2.975025359902,0.634963209963, + 2.499999990103)); +#20711 = VECTOR('',#20712,1.); +#20712 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#20713 = ORIENTED_EDGE('',*,*,#20714,.T.); +#20714 = EDGE_CURVE('',#20707,#20715,#20717,.T.); +#20715 = VERTEX_POINT('',#20716); +#20716 = CARTESIAN_POINT('',(-2.975025359902,0.634963209963, + 0.100000022492)); +#20717 = LINE('',#20718,#20719); +#20718 = CARTESIAN_POINT('',(-2.975025359902,0.634963209963, + 2.499999990103)); +#20719 = VECTOR('',#20720,1.); +#20720 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#20721 = ORIENTED_EDGE('',*,*,#20722,.T.); +#20722 = EDGE_CURVE('',#20715,#20723,#20725,.T.); +#20723 = VERTEX_POINT('',#20724); +#20724 = CARTESIAN_POINT('',(-2.975025359902,0.734963208613, + 2.384185626703E-08)); +#20725 = CIRCLE('',#20726,9.999999865046E-02); +#20726 = AXIS2_PLACEMENT_3D('',#20727,#20728,#20729); +#20727 = CARTESIAN_POINT('',(-2.975025359902,0.734963208613, + 0.100000022492)); +#20728 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20729 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20730 = ORIENTED_EDGE('',*,*,#20731,.T.); +#20731 = EDGE_CURVE('',#20723,#20732,#20734,.T.); +#20732 = VERTEX_POINT('',#20733); +#20733 = CARTESIAN_POINT('',(-2.975025359902,1.634963196467, + 2.384185937565E-08)); +#20734 = LINE('',#20735,#20736); +#20735 = CARTESIAN_POINT('',(-2.975025359902,0.734963208613, + 2.384185626703E-08)); +#20736 = VECTOR('',#20737,1.); +#20737 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#20738 = ORIENTED_EDGE('',*,*,#20739,.T.); +#20739 = EDGE_CURVE('',#20732,#20740,#20742,.T.); +#20740 = VERTEX_POINT('',#20741); +#20741 = CARTESIAN_POINT('',(-2.975025359902,1.834963193768, + 0.200000021143)); +#20742 = CIRCLE('',#20743,0.199999997301); +#20743 = AXIS2_PLACEMENT_3D('',#20744,#20745,#20746); +#20744 = CARTESIAN_POINT('',(-2.975025359902,1.634963196467, + 0.200000021143)); +#20745 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#20746 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20747 = ORIENTED_EDGE('',*,*,#20748,.T.); +#20748 = EDGE_CURVE('',#20740,#20749,#20751,.T.); +#20749 = VERTEX_POINT('',#20750); +#20750 = CARTESIAN_POINT('',(-2.975025359902,1.834963193768, + 0.44653462022)); +#20751 = LINE('',#20752,#20753); +#20752 = CARTESIAN_POINT('',(-2.975025359902,1.834963193768, + 0.200000021143)); +#20753 = VECTOR('',#20754,1.); +#20754 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#20755 = ORIENTED_EDGE('',*,*,#20756,.T.); +#20756 = EDGE_CURVE('',#20749,#20757,#20759,.T.); +#20757 = VERTEX_POINT('',#20758); +#20758 = CARTESIAN_POINT('',(-2.975025359902,1.686727004789, + 0.639719782871)); +#20759 = CIRCLE('',#20760,0.199999997301); +#20760 = AXIS2_PLACEMENT_3D('',#20761,#20762,#20763); +#20761 = CARTESIAN_POINT('',(-2.975025359902,1.634963196467, + 0.44653462022)); +#20762 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#20763 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20764 = ORIENTED_EDGE('',*,*,#20765,.T.); +#20765 = EDGE_CURVE('',#20757,#20766,#20768,.T.); +#20766 = VERTEX_POINT('',#20767); +#20767 = CARTESIAN_POINT('',(-2.975025359902,1.283199392194, + 0.747844680789)); +#20768 = LINE('',#20769,#20770); +#20769 = CARTESIAN_POINT('',(-2.975025359902,1.686727004789, + 0.639719782871)); +#20770 = VECTOR('',#20771,1.); +#20771 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#20772 = ORIENTED_EDGE('',*,*,#20773,.T.); +#20773 = EDGE_CURVE('',#20766,#20774,#20776,.T.); +#20774 = VERTEX_POINT('',#20775); +#20775 = CARTESIAN_POINT('',(-2.975025359902,1.134963203215, + 0.94102984344)); +#20776 = CIRCLE('',#20777,0.199999997301); +#20777 = AXIS2_PLACEMENT_3D('',#20778,#20779,#20780); +#20778 = CARTESIAN_POINT('',(-2.975025359902,1.334963200516, + 0.94102984344)); +#20779 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#20780 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#20781 = ORIENTED_EDGE('',*,*,#20782,.T.); +#20782 = EDGE_CURVE('',#20774,#20783,#20785,.T.); +#20783 = VERTEX_POINT('',#20784); +#20784 = CARTESIAN_POINT('',(-2.975025359902,1.134963203215, + 2.499999990103)); +#20785 = LINE('',#20786,#20787); +#20786 = CARTESIAN_POINT('',(-2.975025359902,1.134963203215, + 0.94102984344)); +#20787 = VECTOR('',#20788,1.); +#20788 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#20789 = ORIENTED_EDGE('',*,*,#20790,.F.); +#20790 = EDGE_CURVE('',#20791,#20783,#20793,.T.); +#20791 = VERTEX_POINT('',#20792); +#20792 = CARTESIAN_POINT('',(-2.975025359902,1.034963204564, + 2.599999988754)); +#20793 = CIRCLE('',#20794,9.999999865046E-02); +#20794 = AXIS2_PLACEMENT_3D('',#20795,#20796,#20797); +#20795 = CARTESIAN_POINT('',(-2.975025359902,1.034963204564, + 2.499999990103)); +#20796 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20797 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#20798 = ORIENTED_EDGE('',*,*,#20799,.T.); +#20799 = EDGE_CURVE('',#20791,#20696,#20800,.T.); +#20800 = LINE('',#20801,#20802); +#20801 = CARTESIAN_POINT('',(-2.975025359902,1.034963204564, + 2.599999988754)); +#20802 = VECTOR('',#20803,1.); +#20803 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#20804 = PLANE('',#20805); +#20805 = AXIS2_PLACEMENT_3D('',#20806,#20807,#20808); +#20806 = CARTESIAN_POINT('',(-2.975025359902,0.734963208613, + 2.499999990103)); +#20807 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20808 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#20809 = ADVANCED_FACE('',(#20810),#20922,.F.); +#20810 = FACE_BOUND('',#20811,.T.); +#20811 = EDGE_LOOP('',(#20812,#20823,#20831,#20840,#20848,#20857,#20865, + #20874,#20882,#20891,#20899,#20908,#20916)); +#20812 = ORIENTED_EDGE('',*,*,#20813,.F.); +#20813 = EDGE_CURVE('',#20814,#20816,#20818,.T.); +#20814 = VERTEX_POINT('',#20815); +#20815 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 2.599999988754)); +#20816 = VERTEX_POINT('',#20817); +#20817 = CARTESIAN_POINT('',(-3.275025355853,0.634963209963, + 2.499999990103)); +#20818 = CIRCLE('',#20819,9.999999865046E-02); +#20819 = AXIS2_PLACEMENT_3D('',#20820,#20821,#20822); +#20820 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 2.499999990103)); +#20821 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20822 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20823 = ORIENTED_EDGE('',*,*,#20824,.F.); +#20824 = EDGE_CURVE('',#20825,#20814,#20827,.T.); +#20825 = VERTEX_POINT('',#20826); +#20826 = CARTESIAN_POINT('',(-3.275025355853,1.034963204564, + 2.599999988754)); +#20827 = LINE('',#20828,#20829); +#20828 = CARTESIAN_POINT('',(-3.275025355853,1.034963204564, + 2.599999988754)); +#20829 = VECTOR('',#20830,1.); +#20830 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#20831 = ORIENTED_EDGE('',*,*,#20832,.T.); +#20832 = EDGE_CURVE('',#20825,#20833,#20835,.T.); +#20833 = VERTEX_POINT('',#20834); +#20834 = CARTESIAN_POINT('',(-3.275025355853,1.134963203215, + 2.499999990103)); +#20835 = CIRCLE('',#20836,9.999999865046E-02); +#20836 = AXIS2_PLACEMENT_3D('',#20837,#20838,#20839); +#20837 = CARTESIAN_POINT('',(-3.275025355853,1.034963204564, + 2.499999990103)); +#20838 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#20839 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#20840 = ORIENTED_EDGE('',*,*,#20841,.F.); +#20841 = EDGE_CURVE('',#20842,#20833,#20844,.T.); +#20842 = VERTEX_POINT('',#20843); +#20843 = CARTESIAN_POINT('',(-3.275025355853,1.134963203215, + 0.94102984344)); +#20844 = LINE('',#20845,#20846); +#20845 = CARTESIAN_POINT('',(-3.275025355853,1.134963203215, + 0.94102984344)); +#20846 = VECTOR('',#20847,1.); +#20847 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#20848 = ORIENTED_EDGE('',*,*,#20849,.F.); +#20849 = EDGE_CURVE('',#20850,#20842,#20852,.T.); +#20850 = VERTEX_POINT('',#20851); +#20851 = CARTESIAN_POINT('',(-3.275025355853,1.283199392194, + 0.747844680789)); +#20852 = CIRCLE('',#20853,0.199999997301); +#20853 = AXIS2_PLACEMENT_3D('',#20854,#20855,#20856); +#20854 = CARTESIAN_POINT('',(-3.275025355853,1.334963200516, + 0.94102984344)); +#20855 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#20856 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#20857 = ORIENTED_EDGE('',*,*,#20858,.F.); +#20858 = EDGE_CURVE('',#20859,#20850,#20861,.T.); +#20859 = VERTEX_POINT('',#20860); +#20860 = CARTESIAN_POINT('',(-3.275025355853,1.686727004789, + 0.639719782871)); +#20861 = LINE('',#20862,#20863); +#20862 = CARTESIAN_POINT('',(-3.275025355853,1.686727004789, + 0.639719782871)); +#20863 = VECTOR('',#20864,1.); +#20864 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#20865 = ORIENTED_EDGE('',*,*,#20866,.F.); +#20866 = EDGE_CURVE('',#20867,#20859,#20869,.T.); +#20867 = VERTEX_POINT('',#20868); +#20868 = CARTESIAN_POINT('',(-3.275025355853,1.834963193768, + 0.44653462022)); +#20869 = CIRCLE('',#20870,0.199999997301); +#20870 = AXIS2_PLACEMENT_3D('',#20871,#20872,#20873); +#20871 = CARTESIAN_POINT('',(-3.275025355853,1.634963196467, + 0.44653462022)); +#20872 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#20873 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20874 = ORIENTED_EDGE('',*,*,#20875,.F.); +#20875 = EDGE_CURVE('',#20876,#20867,#20878,.T.); +#20876 = VERTEX_POINT('',#20877); +#20877 = CARTESIAN_POINT('',(-3.275025355853,1.834963193768, + 0.200000021143)); +#20878 = LINE('',#20879,#20880); +#20879 = CARTESIAN_POINT('',(-3.275025355853,1.834963193768, + 0.200000021143)); +#20880 = VECTOR('',#20881,1.); +#20881 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#20882 = ORIENTED_EDGE('',*,*,#20883,.F.); +#20883 = EDGE_CURVE('',#20884,#20876,#20886,.T.); +#20884 = VERTEX_POINT('',#20885); +#20885 = CARTESIAN_POINT('',(-3.275025355853,1.634963196467, + 2.384185937565E-08)); +#20886 = CIRCLE('',#20887,0.199999997301); +#20887 = AXIS2_PLACEMENT_3D('',#20888,#20889,#20890); +#20888 = CARTESIAN_POINT('',(-3.275025355853,1.634963196467, + 0.200000021143)); +#20889 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#20890 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20891 = ORIENTED_EDGE('',*,*,#20892,.F.); +#20892 = EDGE_CURVE('',#20893,#20884,#20895,.T.); +#20893 = VERTEX_POINT('',#20894); +#20894 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 2.384185626703E-08)); +#20895 = LINE('',#20896,#20897); +#20896 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 2.384185626703E-08)); +#20897 = VECTOR('',#20898,1.); +#20898 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#20899 = ORIENTED_EDGE('',*,*,#20900,.F.); +#20900 = EDGE_CURVE('',#20901,#20893,#20903,.T.); +#20901 = VERTEX_POINT('',#20902); +#20902 = CARTESIAN_POINT('',(-3.275025355853,0.634963209963, + 0.100000022492)); +#20903 = CIRCLE('',#20904,9.999999865046E-02); +#20904 = AXIS2_PLACEMENT_3D('',#20905,#20906,#20907); +#20905 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 0.100000022492)); +#20906 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20907 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20908 = ORIENTED_EDGE('',*,*,#20909,.F.); +#20909 = EDGE_CURVE('',#20910,#20901,#20912,.T.); +#20910 = VERTEX_POINT('',#20911); +#20911 = CARTESIAN_POINT('',(-3.275025355853,0.634963209963, + 0.75000001372)); +#20912 = LINE('',#20913,#20914); +#20913 = CARTESIAN_POINT('',(-3.275025355853,0.634963209963, + 2.499999990103)); +#20914 = VECTOR('',#20915,1.); +#20915 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#20916 = ORIENTED_EDGE('',*,*,#20917,.F.); +#20917 = EDGE_CURVE('',#20816,#20910,#20918,.T.); +#20918 = LINE('',#20919,#20920); +#20919 = CARTESIAN_POINT('',(-3.275025355853,0.634963209963, + 2.499999990103)); +#20920 = VECTOR('',#20921,1.); +#20921 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#20922 = PLANE('',#20923); +#20923 = AXIS2_PLACEMENT_3D('',#20924,#20925,#20926); +#20924 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 2.499999990103)); +#20925 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20926 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#20927 = ADVANCED_FACE('',(#20928),#20944,.T.); +#20928 = FACE_BOUND('',#20929,.T.); +#20929 = EDGE_LOOP('',(#20930,#20931,#20937,#20938)); +#20930 = ORIENTED_EDGE('',*,*,#20722,.F.); +#20931 = ORIENTED_EDGE('',*,*,#20932,.F.); +#20932 = EDGE_CURVE('',#20901,#20715,#20933,.T.); +#20933 = LINE('',#20934,#20935); +#20934 = CARTESIAN_POINT('',(-3.275025355853,0.634963209963, + 0.100000022492)); +#20935 = VECTOR('',#20936,1.); +#20936 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20937 = ORIENTED_EDGE('',*,*,#20900,.T.); +#20938 = ORIENTED_EDGE('',*,*,#20939,.T.); +#20939 = EDGE_CURVE('',#20893,#20723,#20940,.T.); +#20940 = LINE('',#20941,#20942); +#20941 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 2.384185626703E-08)); +#20942 = VECTOR('',#20943,1.); +#20943 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20944 = CYLINDRICAL_SURFACE('',#20945,9.999999865046E-02); +#20945 = AXIS2_PLACEMENT_3D('',#20946,#20947,#20948); +#20946 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 0.100000022492)); +#20947 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20948 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#20949 = ADVANCED_FACE('',(#20950),#20961,.T.); +#20950 = FACE_BOUND('',#20951,.T.); +#20951 = EDGE_LOOP('',(#20952,#20953,#20954,#20955)); +#20952 = ORIENTED_EDGE('',*,*,#20731,.F.); +#20953 = ORIENTED_EDGE('',*,*,#20939,.F.); +#20954 = ORIENTED_EDGE('',*,*,#20892,.T.); +#20955 = ORIENTED_EDGE('',*,*,#20956,.T.); +#20956 = EDGE_CURVE('',#20884,#20732,#20957,.T.); +#20957 = LINE('',#20958,#20959); +#20958 = CARTESIAN_POINT('',(-3.275025355853,1.634963196467, + 2.384185937565E-08)); +#20959 = VECTOR('',#20960,1.); +#20960 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20961 = PLANE('',#20962); +#20962 = AXIS2_PLACEMENT_3D('',#20963,#20964,#20965); +#20963 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 2.384185626703E-08)); +#20964 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#20965 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#20966 = ADVANCED_FACE('',(#20967),#20978,.T.); +#20967 = FACE_BOUND('',#20968,.T.); +#20968 = EDGE_LOOP('',(#20969,#20970,#20971,#20972)); +#20969 = ORIENTED_EDGE('',*,*,#20739,.F.); +#20970 = ORIENTED_EDGE('',*,*,#20956,.F.); +#20971 = ORIENTED_EDGE('',*,*,#20883,.T.); +#20972 = ORIENTED_EDGE('',*,*,#20973,.T.); +#20973 = EDGE_CURVE('',#20876,#20740,#20974,.T.); +#20974 = LINE('',#20975,#20976); +#20975 = CARTESIAN_POINT('',(-3.275025355853,1.834963193768, + 0.200000021143)); +#20976 = VECTOR('',#20977,1.); +#20977 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20978 = CYLINDRICAL_SURFACE('',#20979,0.199999997301); +#20979 = AXIS2_PLACEMENT_3D('',#20980,#20981,#20982); +#20980 = CARTESIAN_POINT('',(-3.275025355853,1.634963196467, + 0.200000021143)); +#20981 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#20982 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#20983 = ADVANCED_FACE('',(#20984),#20995,.T.); +#20984 = FACE_BOUND('',#20985,.T.); +#20985 = EDGE_LOOP('',(#20986,#20987,#20988,#20989)); +#20986 = ORIENTED_EDGE('',*,*,#20748,.F.); +#20987 = ORIENTED_EDGE('',*,*,#20973,.F.); +#20988 = ORIENTED_EDGE('',*,*,#20875,.T.); +#20989 = ORIENTED_EDGE('',*,*,#20990,.T.); +#20990 = EDGE_CURVE('',#20867,#20749,#20991,.T.); +#20991 = LINE('',#20992,#20993); +#20992 = CARTESIAN_POINT('',(-3.275025355853,1.834963193768, + 0.44653462022)); +#20993 = VECTOR('',#20994,1.); +#20994 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#20995 = PLANE('',#20996); +#20996 = AXIS2_PLACEMENT_3D('',#20997,#20998,#20999); +#20997 = CARTESIAN_POINT('',(-3.275025355853,1.834963193768, + 0.200000021143)); +#20998 = DIRECTION('',(-6.982962677686E-15,1.,3.931258214751E-15)); +#20999 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21000 = ADVANCED_FACE('',(#21001),#21012,.T.); +#21001 = FACE_BOUND('',#21002,.T.); +#21002 = EDGE_LOOP('',(#21003,#21004,#21005,#21006)); +#21003 = ORIENTED_EDGE('',*,*,#20756,.F.); +#21004 = ORIENTED_EDGE('',*,*,#20990,.F.); +#21005 = ORIENTED_EDGE('',*,*,#20866,.T.); +#21006 = ORIENTED_EDGE('',*,*,#21007,.T.); +#21007 = EDGE_CURVE('',#20859,#20757,#21008,.T.); +#21008 = LINE('',#21009,#21010); +#21009 = CARTESIAN_POINT('',(-3.275025355853,1.686727004789, + 0.639719782871)); +#21010 = VECTOR('',#21011,1.); +#21011 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21012 = CYLINDRICAL_SURFACE('',#21013,0.199999997301); +#21013 = AXIS2_PLACEMENT_3D('',#21014,#21015,#21016); +#21014 = CARTESIAN_POINT('',(-3.275025355853,1.634963196467, + 0.44653462022)); +#21015 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#21016 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#21017 = ADVANCED_FACE('',(#21018),#21029,.T.); +#21018 = FACE_BOUND('',#21019,.T.); +#21019 = EDGE_LOOP('',(#21020,#21021,#21022,#21023)); +#21020 = ORIENTED_EDGE('',*,*,#20765,.F.); +#21021 = ORIENTED_EDGE('',*,*,#21007,.F.); +#21022 = ORIENTED_EDGE('',*,*,#20858,.T.); +#21023 = ORIENTED_EDGE('',*,*,#21024,.T.); +#21024 = EDGE_CURVE('',#20850,#20766,#21025,.T.); +#21025 = LINE('',#21026,#21027); +#21026 = CARTESIAN_POINT('',(-3.275025355853,1.283199392194, + 0.747844680789)); +#21027 = VECTOR('',#21028,1.); +#21028 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21029 = PLANE('',#21030); +#21030 = AXIS2_PLACEMENT_3D('',#21031,#21032,#21033); +#21031 = CARTESIAN_POINT('',(-3.275025355853,1.686727004789, + 0.639719782871)); +#21032 = DIRECTION('',(-1.807323732225E-15,0.258819045103,0.965925826289 + )); +#21033 = DIRECTION('',(1.,6.982962677672E-15,1.972152263053E-31)); +#21034 = ADVANCED_FACE('',(#21035),#21046,.F.); +#21035 = FACE_BOUND('',#21036,.F.); +#21036 = EDGE_LOOP('',(#21037,#21043,#21044,#21045)); +#21037 = ORIENTED_EDGE('',*,*,#21038,.F.); +#21038 = EDGE_CURVE('',#20842,#20774,#21039,.T.); +#21039 = LINE('',#21040,#21041); +#21040 = CARTESIAN_POINT('',(-3.275025355853,1.134963203215, + 0.94102984344)); +#21041 = VECTOR('',#21042,1.); +#21042 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21043 = ORIENTED_EDGE('',*,*,#20849,.F.); +#21044 = ORIENTED_EDGE('',*,*,#21024,.T.); +#21045 = ORIENTED_EDGE('',*,*,#20773,.T.); +#21046 = CYLINDRICAL_SURFACE('',#21047,0.199999997301); +#21047 = AXIS2_PLACEMENT_3D('',#21048,#21049,#21050); +#21048 = CARTESIAN_POINT('',(-3.275025355853,1.334963200516, + 0.94102984344)); +#21049 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#21050 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#21051 = ADVANCED_FACE('',(#21052),#21063,.T.); +#21052 = FACE_BOUND('',#21053,.T.); +#21053 = EDGE_LOOP('',(#21054,#21055,#21056,#21057)); +#21054 = ORIENTED_EDGE('',*,*,#20782,.F.); +#21055 = ORIENTED_EDGE('',*,*,#21038,.F.); +#21056 = ORIENTED_EDGE('',*,*,#20841,.T.); +#21057 = ORIENTED_EDGE('',*,*,#21058,.T.); +#21058 = EDGE_CURVE('',#20833,#20783,#21059,.T.); +#21059 = LINE('',#21060,#21061); +#21060 = CARTESIAN_POINT('',(-3.275025355853,1.134963203215, + 2.499999990103)); +#21061 = VECTOR('',#21062,1.); +#21062 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21063 = PLANE('',#21064); +#21064 = AXIS2_PLACEMENT_3D('',#21065,#21066,#21067); +#21065 = CARTESIAN_POINT('',(-3.275025355853,1.134963203215, + 0.94102984344)); +#21066 = DIRECTION('',(-6.982962677686E-15,1.,3.387162263827E-15)); +#21067 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21068 = ADVANCED_FACE('',(#21069),#21080,.T.); +#21069 = FACE_BOUND('',#21070,.T.); +#21070 = EDGE_LOOP('',(#21071,#21072,#21073,#21074)); +#21071 = ORIENTED_EDGE('',*,*,#20790,.T.); +#21072 = ORIENTED_EDGE('',*,*,#21058,.F.); +#21073 = ORIENTED_EDGE('',*,*,#20832,.F.); +#21074 = ORIENTED_EDGE('',*,*,#21075,.T.); +#21075 = EDGE_CURVE('',#20825,#20791,#21076,.T.); +#21076 = LINE('',#21077,#21078); +#21077 = CARTESIAN_POINT('',(-3.275025355853,1.034963204564, + 2.599999988754)); +#21078 = VECTOR('',#21079,1.); +#21079 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21080 = CYLINDRICAL_SURFACE('',#21081,9.999999865046E-02); +#21081 = AXIS2_PLACEMENT_3D('',#21082,#21083,#21084); +#21082 = CARTESIAN_POINT('',(-3.275025355853,1.034963204564, + 2.499999990103)); +#21083 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21084 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#21085 = ADVANCED_FACE('',(#21086),#21097,.T.); +#21086 = FACE_BOUND('',#21087,.T.); +#21087 = EDGE_LOOP('',(#21088,#21089,#21090,#21091)); +#21088 = ORIENTED_EDGE('',*,*,#20799,.F.); +#21089 = ORIENTED_EDGE('',*,*,#21075,.F.); +#21090 = ORIENTED_EDGE('',*,*,#20824,.T.); +#21091 = ORIENTED_EDGE('',*,*,#21092,.T.); +#21092 = EDGE_CURVE('',#20814,#20696,#21093,.T.); +#21093 = LINE('',#21094,#21095); +#21094 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 2.599999988754)); +#21095 = VECTOR('',#21096,1.); +#21096 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21097 = PLANE('',#21098); +#21098 = AXIS2_PLACEMENT_3D('',#21099,#21100,#21101); +#21099 = CARTESIAN_POINT('',(-3.275025355853,1.034963204564, + 2.599999988754)); +#21100 = DIRECTION('',(2.185723611047E-29,-3.130080614681E-15,1.)); +#21101 = DIRECTION('',(0.,-1.,-3.130080614681E-15)); +#21102 = ADVANCED_FACE('',(#21103),#21114,.T.); +#21103 = FACE_BOUND('',#21104,.T.); +#21104 = EDGE_LOOP('',(#21105,#21106,#21107,#21108)); +#21105 = ORIENTED_EDGE('',*,*,#20695,.F.); +#21106 = ORIENTED_EDGE('',*,*,#21092,.F.); +#21107 = ORIENTED_EDGE('',*,*,#20813,.T.); +#21108 = ORIENTED_EDGE('',*,*,#21109,.T.); +#21109 = EDGE_CURVE('',#20816,#20698,#21110,.T.); +#21110 = LINE('',#21111,#21112); +#21111 = CARTESIAN_POINT('',(-3.275025355853,0.634963209963, + 2.499999990103)); +#21112 = VECTOR('',#21113,1.); +#21113 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21114 = CYLINDRICAL_SURFACE('',#21115,9.999999865046E-02); +#21115 = AXIS2_PLACEMENT_3D('',#21116,#21117,#21118); +#21116 = CARTESIAN_POINT('',(-3.275025355853,0.734963208613, + 2.499999990103)); +#21117 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21118 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#21119 = ADVANCED_FACE('',(#21120),#21147,.T.); +#21120 = FACE_BOUND('',#21121,.T.); +#21121 = EDGE_LOOP('',(#21122,#21130,#21138,#21144,#21145,#21146)); +#21122 = ORIENTED_EDGE('',*,*,#21123,.F.); +#21123 = EDGE_CURVE('',#21124,#20707,#21126,.T.); +#21124 = VERTEX_POINT('',#21125); +#21125 = CARTESIAN_POINT('',(-3.200025356866,0.634963209963, + 0.350000019118)); +#21126 = LINE('',#21127,#21128); +#21127 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#21128 = VECTOR('',#21129,1.); +#21129 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21130 = ORIENTED_EDGE('',*,*,#21131,.T.); +#21131 = EDGE_CURVE('',#21124,#21132,#21134,.T.); +#21132 = VERTEX_POINT('',#21133); +#21133 = CARTESIAN_POINT('',(-3.200025356866,0.634963209963, + 0.75000001372)); +#21134 = LINE('',#21135,#21136); +#21135 = CARTESIAN_POINT('',(-3.200025356866,0.634963209963, + 0.100000022492)); +#21136 = VECTOR('',#21137,1.); +#21137 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#21138 = ORIENTED_EDGE('',*,*,#21139,.F.); +#21139 = EDGE_CURVE('',#20910,#21132,#21140,.T.); +#21140 = LINE('',#21141,#21142); +#21141 = CARTESIAN_POINT('',(-2.950025360239,0.634963209963, + 0.75000001372)); +#21142 = VECTOR('',#21143,1.); +#21143 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21144 = ORIENTED_EDGE('',*,*,#20909,.T.); +#21145 = ORIENTED_EDGE('',*,*,#20932,.T.); +#21146 = ORIENTED_EDGE('',*,*,#20714,.F.); +#21147 = PLANE('',#21148); +#21148 = AXIS2_PLACEMENT_3D('',#21149,#21150,#21151); +#21149 = CARTESIAN_POINT('',(-3.275025355853,0.634963209963, + 2.499999990103)); +#21150 = DIRECTION('',(6.982962677686E-15,-1.,-3.446306248323E-15)); +#21151 = DIRECTION('',(0.,3.446306248323E-15,-1.)); +#21152 = ADVANCED_FACE('',(#21153),#21159,.F.); +#21153 = FACE_BOUND('',#21154,.T.); +#21154 = EDGE_LOOP('',(#21155,#21156,#21157,#21158)); +#21155 = ORIENTED_EDGE('',*,*,#19574,.T.); +#21156 = ORIENTED_EDGE('',*,*,#19427,.T.); +#21157 = ORIENTED_EDGE('',*,*,#19545,.T.); +#21158 = ORIENTED_EDGE('',*,*,#19403,.T.); +#21159 = PLANE('',#21160); +#21160 = AXIS2_PLACEMENT_3D('',#21161,#21162,#21163); +#21161 = CARTESIAN_POINT('',(-3.275025355853,-2.965036741454, + 1.150000008322)); +#21162 = DIRECTION('',(-6.982962677686E-15,1.,4.111025437406E-15)); +#21163 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21164 = ADVANCED_FACE('',(#21165),#21190,.F.); +#21165 = FACE_BOUND('',#21166,.T.); +#21166 = EDGE_LOOP('',(#21167,#21175,#21176,#21184)); +#21167 = ORIENTED_EDGE('',*,*,#21168,.F.); +#21168 = EDGE_CURVE('',#19388,#21169,#21171,.T.); +#21169 = VERTEX_POINT('',#21170); +#21170 = CARTESIAN_POINT('',(-2.975025359902,-0.465036775192, + 1.849999998875)); +#21171 = LINE('',#21172,#21173); +#21172 = CARTESIAN_POINT('',(-2.975025359902,-2.965036741454, + 1.849999998875)); +#21173 = VECTOR('',#21174,1.); +#21174 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#21175 = ORIENTED_EDGE('',*,*,#19387,.T.); +#21176 = ORIENTED_EDGE('',*,*,#21177,.T.); +#21177 = EDGE_CURVE('',#19378,#21178,#21180,.T.); +#21178 = VERTEX_POINT('',#21179); +#21179 = CARTESIAN_POINT('',(-2.975025359902,-0.465036775192, + 1.150000008322)); +#21180 = LINE('',#21181,#21182); +#21181 = CARTESIAN_POINT('',(-2.975025359902,-2.965036741454, + 1.150000008322)); +#21182 = VECTOR('',#21183,1.); +#21183 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#21184 = ORIENTED_EDGE('',*,*,#21185,.T.); +#21185 = EDGE_CURVE('',#21178,#21169,#21186,.T.); +#21186 = LINE('',#21187,#21188); +#21187 = CARTESIAN_POINT('',(-2.975025359902,-0.465036775192, + 1.849999998875)); +#21188 = VECTOR('',#21189,1.); +#21189 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#21190 = PLANE('',#21191); +#21191 = AXIS2_PLACEMENT_3D('',#21192,#21193,#21194); +#21192 = CARTESIAN_POINT('',(-2.975025359902,0.934963205914, + 1.849999998875)); +#21193 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21194 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#21195 = ADVANCED_FACE('',(#21196),#21221,.T.); +#21196 = FACE_BOUND('',#21197,.T.); +#21197 = EDGE_LOOP('',(#21198,#21206,#21207,#21215)); +#21198 = ORIENTED_EDGE('',*,*,#21199,.F.); +#21199 = EDGE_CURVE('',#19420,#21200,#21202,.T.); +#21200 = VERTEX_POINT('',#21201); +#21201 = CARTESIAN_POINT('',(-3.275025355853,-0.465036775192, + 1.150000008322)); +#21202 = LINE('',#21203,#21204); +#21203 = CARTESIAN_POINT('',(-3.275025355853,-2.965036741454, + 1.150000008322)); +#21204 = VECTOR('',#21205,1.); +#21205 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#21206 = ORIENTED_EDGE('',*,*,#19443,.T.); +#21207 = ORIENTED_EDGE('',*,*,#21208,.T.); +#21208 = EDGE_CURVE('',#19436,#21209,#21211,.T.); +#21209 = VERTEX_POINT('',#21210); +#21210 = CARTESIAN_POINT('',(-3.275025355853,-0.465036775192, + 1.849999998875)); +#21211 = LINE('',#21212,#21213); +#21212 = CARTESIAN_POINT('',(-3.275025355853,-2.965036741454, + 1.849999998875)); +#21213 = VECTOR('',#21214,1.); +#21214 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#21215 = ORIENTED_EDGE('',*,*,#21216,.F.); +#21216 = EDGE_CURVE('',#21200,#21209,#21217,.T.); +#21217 = LINE('',#21218,#21219); +#21218 = CARTESIAN_POINT('',(-3.275025355853,-0.465036775192, + 1.849999998875)); +#21219 = VECTOR('',#21220,1.); +#21220 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#21221 = PLANE('',#21222); +#21222 = AXIS2_PLACEMENT_3D('',#21223,#21224,#21225); +#21223 = CARTESIAN_POINT('',(-3.275025355853,0.934963205914, + 1.849999998875)); +#21224 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21225 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#21226 = ADVANCED_FACE('',(#21227),#21238,.T.); +#21227 = FACE_BOUND('',#21228,.T.); +#21228 = EDGE_LOOP('',(#21229,#21230,#21231,#21232)); +#21229 = ORIENTED_EDGE('',*,*,#21177,.F.); +#21230 = ORIENTED_EDGE('',*,*,#19552,.T.); +#21231 = ORIENTED_EDGE('',*,*,#21199,.T.); +#21232 = ORIENTED_EDGE('',*,*,#21233,.F.); +#21233 = EDGE_CURVE('',#21178,#21200,#21234,.T.); +#21234 = LINE('',#21235,#21236); +#21235 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.150000008322)); +#21236 = VECTOR('',#21237,1.); +#21237 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21238 = PLANE('',#21239); +#21239 = AXIS2_PLACEMENT_3D('',#21240,#21241,#21242); +#21240 = CARTESIAN_POINT('',(-3.275025355853,-2.965036741454, + 1.150000008322)); +#21241 = DIRECTION('',(-2.313974563217E-29,3.31374327778E-15,-1.)); +#21242 = DIRECTION('',(-1.,0.,2.313974563217E-29)); +#21243 = ADVANCED_FACE('',(#21244),#21255,.F.); +#21244 = FACE_BOUND('',#21245,.T.); +#21245 = EDGE_LOOP('',(#21246,#21247,#21248,#21249)); +#21246 = ORIENTED_EDGE('',*,*,#21208,.F.); +#21247 = ORIENTED_EDGE('',*,*,#19567,.T.); +#21248 = ORIENTED_EDGE('',*,*,#21168,.T.); +#21249 = ORIENTED_EDGE('',*,*,#21250,.T.); +#21250 = EDGE_CURVE('',#21169,#21209,#21251,.T.); +#21251 = LINE('',#21252,#21253); +#21252 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.849999998875)); +#21253 = VECTOR('',#21254,1.); +#21254 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21255 = PLANE('',#21256); +#21256 = AXIS2_PLACEMENT_3D('',#21257,#21258,#21259); +#21257 = CARTESIAN_POINT('',(-3.275025355853,-2.965036741454, + 1.849999998875)); +#21258 = DIRECTION('',(-2.309813444521E-29,3.307784318971E-15,-1.)); +#21259 = DIRECTION('',(-1.,0.,2.309813444521E-29)); +#21260 = ADVANCED_FACE('',(#21261),#21295,.F.); +#21261 = FACE_BOUND('',#21262,.T.); +#21262 = EDGE_LOOP('',(#21263,#21273,#21281,#21289)); +#21263 = ORIENTED_EDGE('',*,*,#21264,.F.); +#21264 = EDGE_CURVE('',#21265,#21267,#21269,.T.); +#21265 = VERTEX_POINT('',#21266); +#21266 = CARTESIAN_POINT('',(-4.225025343033,-2.465036748202, + 1.150000008322)); +#21267 = VERTEX_POINT('',#21268); +#21268 = CARTESIAN_POINT('',(-4.313188832197,-2.965036741454, + 1.331985122999)); +#21269 = LINE('',#21270,#21271); +#21270 = CARTESIAN_POINT('',(-4.31884923711,-2.997138492927, + 1.343669205003)); +#21271 = VECTOR('',#21272,1.); +#21272 = DIRECTION('',(-0.163464460889,-0.927053025192,0.337419706757)); +#21273 = ORIENTED_EDGE('',*,*,#21274,.F.); +#21274 = EDGE_CURVE('',#21275,#21265,#21277,.T.); +#21275 = VERTEX_POINT('',#21276); +#21276 = CARTESIAN_POINT('',(-4.225025343033,-2.465036748202, + 1.849999998875)); +#21277 = LINE('',#21278,#21279); +#21278 = CARTESIAN_POINT('',(-4.225025343033,-2.465036748202, + 1.849999998875)); +#21279 = VECTOR('',#21280,1.); +#21280 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#21281 = ORIENTED_EDGE('',*,*,#21282,.F.); +#21282 = EDGE_CURVE('',#21283,#21275,#21285,.T.); +#21283 = VERTEX_POINT('',#21284); +#21284 = CARTESIAN_POINT('',(-4.313188832197,-2.965036741454, + 1.668014884198)); +#21285 = LINE('',#21286,#21287); +#21286 = CARTESIAN_POINT('',(-4.233041531917,-2.510498814482, + 1.833453159961)); +#21287 = VECTOR('',#21288,1.); +#21288 = DIRECTION('',(0.163464460889,0.927053025192,0.337419706757)); +#21289 = ORIENTED_EDGE('',*,*,#21290,.F.); +#21290 = EDGE_CURVE('',#21267,#21283,#21291,.T.); +#21291 = LINE('',#21292,#21293); +#21292 = CARTESIAN_POINT('',(-4.313188832197,-2.965036741454, + 1.150000008322)); +#21293 = VECTOR('',#21294,1.); +#21294 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#21295 = PLANE('',#21296); +#21296 = AXIS2_PLACEMENT_3D('',#21297,#21298,#21299); +#21297 = CARTESIAN_POINT('',(-4.313188832197,-2.965036741454, + 1.150000008322)); +#21298 = DIRECTION('',(-0.984807753012,0.173648177667,7.138720755481E-16 + )); +#21299 = DIRECTION('',(7.248847029937E-16,2.465190328816E-32,1.)); +#21300 = ADVANCED_FACE('',(#21301),#21335,.T.); +#21301 = FACE_BOUND('',#21302,.T.); +#21302 = EDGE_LOOP('',(#21303,#21313,#21321,#21329)); +#21303 = ORIENTED_EDGE('',*,*,#21304,.F.); +#21304 = EDGE_CURVE('',#21305,#21307,#21309,.T.); +#21305 = VERTEX_POINT('',#21306); +#21306 = CARTESIAN_POINT('',(-4.43686184982,-2.965036741454, + 1.331985122999)); +#21307 = VERTEX_POINT('',#21308); +#21308 = CARTESIAN_POINT('',(-4.525025338984,-2.465036748202, + 1.150000008322)); +#21309 = LINE('',#21310,#21311); +#21310 = CARTESIAN_POINT('',(-4.439217633791,-2.951676426647, + 1.327122366089)); +#21311 = VECTOR('',#21312,1.); +#21312 = DIRECTION('',(-0.163464460889,0.927053025192,-0.337419706757)); +#21313 = ORIENTED_EDGE('',*,*,#21314,.F.); +#21314 = EDGE_CURVE('',#21315,#21305,#21317,.T.); +#21315 = VERTEX_POINT('',#21316); +#21316 = CARTESIAN_POINT('',(-4.43686184982,-2.965036741454, + 1.668014884198)); +#21317 = LINE('',#21318,#21319); +#21318 = CARTESIAN_POINT('',(-4.43686184982,-2.965036741454, + 1.331985122999)); +#21319 = VECTOR('',#21320,1.); +#21320 = DIRECTION('',(-2.870713719643E-29,4.111025437406E-15,-1.)); +#21321 = ORIENTED_EDGE('',*,*,#21322,.F.); +#21322 = EDGE_CURVE('',#21323,#21315,#21325,.T.); +#21323 = VERTEX_POINT('',#21324); +#21324 = CARTESIAN_POINT('',(-4.525025338984,-2.465036748202, + 1.849999998875)); +#21325 = LINE('',#21326,#21327); +#21326 = CARTESIAN_POINT('',(-4.525025338984,-2.465036748202, + 1.849999998875)); +#21327 = VECTOR('',#21328,1.); +#21328 = DIRECTION('',(0.163464460889,-0.927053025192,-0.337419706757)); +#21329 = ORIENTED_EDGE('',*,*,#21330,.F.); +#21330 = EDGE_CURVE('',#21307,#21323,#21331,.T.); +#21331 = LINE('',#21332,#21333); +#21332 = CARTESIAN_POINT('',(-4.525025338984,-2.465036748202, + 1.668014884198)); +#21333 = VECTOR('',#21334,1.); +#21334 = DIRECTION('',(2.870713719643E-29,-4.111025437406E-15,1.)); +#21335 = PLANE('',#21336); +#21336 = AXIS2_PLACEMENT_3D('',#21337,#21338,#21339); +#21337 = CARTESIAN_POINT('',(-4.525025338984,-2.465036748202, + 1.849999998875)); +#21338 = DIRECTION('',(-0.984807753012,-0.173648177667, + -7.138720755481E-16)); +#21339 = DIRECTION('',(-0.173648177667,0.984807753012,0.)); +#21340 = ADVANCED_FACE('',(#21341),#21357,.T.); +#21341 = FACE_BOUND('',#21342,.T.); +#21342 = EDGE_LOOP('',(#21343,#21349,#21350,#21356)); +#21343 = ORIENTED_EDGE('',*,*,#21344,.F.); +#21344 = EDGE_CURVE('',#21305,#21267,#21345,.T.); +#21345 = LINE('',#21346,#21347); +#21346 = CARTESIAN_POINT('',(-4.225025343033,-2.965036741454, + 1.331985122999)); +#21347 = VECTOR('',#21348,1.); +#21348 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21349 = ORIENTED_EDGE('',*,*,#21304,.T.); +#21350 = ORIENTED_EDGE('',*,*,#21351,.F.); +#21351 = EDGE_CURVE('',#21265,#21307,#21352,.T.); +#21352 = LINE('',#21353,#21354); +#21353 = CARTESIAN_POINT('',(-4.525025338984,-2.465036748202, + 1.150000008322)); +#21354 = VECTOR('',#21355,1.); +#21355 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21356 = ORIENTED_EDGE('',*,*,#21264,.T.); +#21357 = PLANE('',#21358); +#21358 = AXIS2_PLACEMENT_3D('',#21359,#21360,#21361); +#21359 = CARTESIAN_POINT('',(-4.525025338984,-2.965036741454, + 1.331985122999)); +#21360 = DIRECTION('',(2.38831389586E-15,-0.342020143326,-0.939692620786 + )); +#21361 = DIRECTION('',(0.,-0.939692620786,0.342020143326)); +#21362 = ADVANCED_FACE('',(#21363),#21379,.F.); +#21363 = FACE_BOUND('',#21364,.T.); +#21364 = EDGE_LOOP('',(#21365,#21371,#21372,#21378)); +#21365 = ORIENTED_EDGE('',*,*,#21366,.F.); +#21366 = EDGE_CURVE('',#21323,#21275,#21367,.T.); +#21367 = LINE('',#21368,#21369); +#21368 = CARTESIAN_POINT('',(-4.525025338984,-2.465036748202, + 1.849999998875)); +#21369 = VECTOR('',#21370,1.); +#21370 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21371 = ORIENTED_EDGE('',*,*,#21322,.T.); +#21372 = ORIENTED_EDGE('',*,*,#21373,.F.); +#21373 = EDGE_CURVE('',#21283,#21315,#21374,.T.); +#21374 = LINE('',#21375,#21376); +#21375 = CARTESIAN_POINT('',(-4.525025338984,-2.965036741454, + 1.668014884198)); +#21376 = VECTOR('',#21377,1.); +#21377 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21378 = ORIENTED_EDGE('',*,*,#21282,.T.); +#21379 = PLANE('',#21380); +#21380 = AXIS2_PLACEMENT_3D('',#21381,#21382,#21383); +#21381 = CARTESIAN_POINT('',(-4.525025338984,-2.465036748202, + 1.849999998875)); +#21382 = DIRECTION('',(-2.38831389586E-15,0.342020143326,-0.939692620786 + )); +#21383 = DIRECTION('',(-1.,-9.860761315263E-32,2.541590561669E-15)); +#21384 = ADVANCED_FACE('',(#21385),#21497,.T.); +#21385 = FACE_BOUND('',#21386,.T.); +#21386 = EDGE_LOOP('',(#21387,#21398,#21406,#21414,#21423,#21431,#21440, + #21448,#21457,#21465,#21474,#21482,#21491)); +#21387 = ORIENTED_EDGE('',*,*,#21388,.T.); +#21388 = EDGE_CURVE('',#21389,#21391,#21393,.T.); +#21389 = VERTEX_POINT('',#21390); +#21390 = CARTESIAN_POINT('',(-4.225025343033,0.734963208613, + 2.599999988754)); +#21391 = VERTEX_POINT('',#21392); +#21392 = CARTESIAN_POINT('',(-4.225025343033,0.634963209963, + 2.499999990103)); +#21393 = CIRCLE('',#21394,9.999999865046E-02); +#21394 = AXIS2_PLACEMENT_3D('',#21395,#21396,#21397); +#21395 = CARTESIAN_POINT('',(-4.225025343033,0.734963208613, + 2.499999990103)); +#21396 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21397 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#21398 = ORIENTED_EDGE('',*,*,#21399,.T.); +#21399 = EDGE_CURVE('',#21391,#21400,#21402,.T.); +#21400 = VERTEX_POINT('',#21401); +#21401 = CARTESIAN_POINT('',(-4.225025343033,0.634963209963, + 0.75000001372)); +#21402 = LINE('',#21403,#21404); +#21403 = CARTESIAN_POINT('',(-4.225025343033,0.634963209963, + 2.499999990103)); +#21404 = VECTOR('',#21405,1.); +#21405 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#21406 = ORIENTED_EDGE('',*,*,#21407,.T.); +#21407 = EDGE_CURVE('',#21400,#21408,#21410,.T.); +#21408 = VERTEX_POINT('',#21409); +#21409 = CARTESIAN_POINT('',(-4.225025343033,0.634963209963, + 0.100000022492)); +#21410 = LINE('',#21411,#21412); +#21411 = CARTESIAN_POINT('',(-4.225025343033,0.634963209963, + 2.499999990103)); +#21412 = VECTOR('',#21413,1.); +#21413 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#21414 = ORIENTED_EDGE('',*,*,#21415,.T.); +#21415 = EDGE_CURVE('',#21408,#21416,#21418,.T.); +#21416 = VERTEX_POINT('',#21417); +#21417 = CARTESIAN_POINT('',(-4.225025343033,0.734963208613, + 2.384185626703E-08)); +#21418 = CIRCLE('',#21419,9.999999865046E-02); +#21419 = AXIS2_PLACEMENT_3D('',#21420,#21421,#21422); +#21420 = CARTESIAN_POINT('',(-4.225025343033,0.734963208613, + 0.100000022492)); +#21421 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21422 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#21423 = ORIENTED_EDGE('',*,*,#21424,.T.); +#21424 = EDGE_CURVE('',#21416,#21425,#21427,.T.); +#21425 = VERTEX_POINT('',#21426); +#21426 = CARTESIAN_POINT('',(-4.225025343033,1.634963196467, + 2.384185937565E-08)); +#21427 = LINE('',#21428,#21429); +#21428 = CARTESIAN_POINT('',(-4.225025343033,0.734963208613, + 2.384185626703E-08)); +#21429 = VECTOR('',#21430,1.); +#21430 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#21431 = ORIENTED_EDGE('',*,*,#21432,.T.); +#21432 = EDGE_CURVE('',#21425,#21433,#21435,.T.); +#21433 = VERTEX_POINT('',#21434); +#21434 = CARTESIAN_POINT('',(-4.225025343033,1.834963193768, + 0.200000021143)); +#21435 = CIRCLE('',#21436,0.199999997301); +#21436 = AXIS2_PLACEMENT_3D('',#21437,#21438,#21439); +#21437 = CARTESIAN_POINT('',(-4.225025343033,1.634963196467, + 0.200000021143)); +#21438 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#21439 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#21440 = ORIENTED_EDGE('',*,*,#21441,.T.); +#21441 = EDGE_CURVE('',#21433,#21442,#21444,.T.); +#21442 = VERTEX_POINT('',#21443); +#21443 = CARTESIAN_POINT('',(-4.225025343033,1.834963193768, + 0.44653462022)); +#21444 = LINE('',#21445,#21446); +#21445 = CARTESIAN_POINT('',(-4.225025343033,1.834963193768, + 0.200000021143)); +#21446 = VECTOR('',#21447,1.); +#21447 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#21448 = ORIENTED_EDGE('',*,*,#21449,.T.); +#21449 = EDGE_CURVE('',#21442,#21450,#21452,.T.); +#21450 = VERTEX_POINT('',#21451); +#21451 = CARTESIAN_POINT('',(-4.225025343033,1.686727004789, + 0.639719782871)); +#21452 = CIRCLE('',#21453,0.199999997301); +#21453 = AXIS2_PLACEMENT_3D('',#21454,#21455,#21456); +#21454 = CARTESIAN_POINT('',(-4.225025343033,1.634963196467, + 0.44653462022)); +#21455 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#21456 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#21457 = ORIENTED_EDGE('',*,*,#21458,.T.); +#21458 = EDGE_CURVE('',#21450,#21459,#21461,.T.); +#21459 = VERTEX_POINT('',#21460); +#21460 = CARTESIAN_POINT('',(-4.225025343033,1.283199392194, + 0.747844680789)); +#21461 = LINE('',#21462,#21463); +#21462 = CARTESIAN_POINT('',(-4.225025343033,1.686727004789, + 0.639719782871)); +#21463 = VECTOR('',#21464,1.); +#21464 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#21465 = ORIENTED_EDGE('',*,*,#21466,.T.); +#21466 = EDGE_CURVE('',#21459,#21467,#21469,.T.); +#21467 = VERTEX_POINT('',#21468); +#21468 = CARTESIAN_POINT('',(-4.225025343033,1.134963203215, + 0.94102984344)); +#21469 = CIRCLE('',#21470,0.199999997301); +#21470 = AXIS2_PLACEMENT_3D('',#21471,#21472,#21473); +#21471 = CARTESIAN_POINT('',(-4.225025343033,1.334963200516, + 0.94102984344)); +#21472 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#21473 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#21474 = ORIENTED_EDGE('',*,*,#21475,.T.); +#21475 = EDGE_CURVE('',#21467,#21476,#21478,.T.); +#21476 = VERTEX_POINT('',#21477); +#21477 = CARTESIAN_POINT('',(-4.225025343033,1.134963203215, + 2.499999990103)); +#21478 = LINE('',#21479,#21480); +#21479 = CARTESIAN_POINT('',(-4.225025343033,1.134963203215, + 0.94102984344)); +#21480 = VECTOR('',#21481,1.); +#21481 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#21482 = ORIENTED_EDGE('',*,*,#21483,.F.); +#21483 = EDGE_CURVE('',#21484,#21476,#21486,.T.); +#21484 = VERTEX_POINT('',#21485); +#21485 = CARTESIAN_POINT('',(-4.225025343033,1.034963204564, + 2.599999988754)); +#21486 = CIRCLE('',#21487,9.999999865046E-02); +#21487 = AXIS2_PLACEMENT_3D('',#21488,#21489,#21490); +#21488 = CARTESIAN_POINT('',(-4.225025343033,1.034963204564, + 2.499999990103)); +#21489 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21490 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#21491 = ORIENTED_EDGE('',*,*,#21492,.T.); +#21492 = EDGE_CURVE('',#21484,#21389,#21493,.T.); +#21493 = LINE('',#21494,#21495); +#21494 = CARTESIAN_POINT('',(-4.225025343033,1.034963204564, + 2.599999988754)); +#21495 = VECTOR('',#21496,1.); +#21496 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#21497 = PLANE('',#21498); +#21498 = AXIS2_PLACEMENT_3D('',#21499,#21500,#21501); +#21499 = CARTESIAN_POINT('',(-4.225025343033,0.734963208613, + 2.499999990103)); +#21500 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21501 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#21502 = ADVANCED_FACE('',(#21503),#21615,.F.); +#21503 = FACE_BOUND('',#21504,.T.); +#21504 = EDGE_LOOP('',(#21505,#21516,#21524,#21533,#21541,#21550,#21558, + #21567,#21575,#21584,#21592,#21601,#21609)); +#21505 = ORIENTED_EDGE('',*,*,#21506,.F.); +#21506 = EDGE_CURVE('',#21507,#21509,#21511,.T.); +#21507 = VERTEX_POINT('',#21508); +#21508 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 2.599999988754)); +#21509 = VERTEX_POINT('',#21510); +#21510 = CARTESIAN_POINT('',(-4.525025338984,0.634963209963, + 2.499999990103)); +#21511 = CIRCLE('',#21512,9.999999865046E-02); +#21512 = AXIS2_PLACEMENT_3D('',#21513,#21514,#21515); +#21513 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 2.499999990103)); +#21514 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21515 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#21516 = ORIENTED_EDGE('',*,*,#21517,.F.); +#21517 = EDGE_CURVE('',#21518,#21507,#21520,.T.); +#21518 = VERTEX_POINT('',#21519); +#21519 = CARTESIAN_POINT('',(-4.525025338984,1.034963204564, + 2.599999988754)); +#21520 = LINE('',#21521,#21522); +#21521 = CARTESIAN_POINT('',(-4.525025338984,1.034963204564, + 2.599999988754)); +#21522 = VECTOR('',#21523,1.); +#21523 = DIRECTION('',(6.982962677686E-15,-1.,-3.130080614681E-15)); +#21524 = ORIENTED_EDGE('',*,*,#21525,.T.); +#21525 = EDGE_CURVE('',#21518,#21526,#21528,.T.); +#21526 = VERTEX_POINT('',#21527); +#21527 = CARTESIAN_POINT('',(-4.525025338984,1.134963203215, + 2.499999990103)); +#21528 = CIRCLE('',#21529,9.999999865046E-02); +#21529 = AXIS2_PLACEMENT_3D('',#21530,#21531,#21532); +#21530 = CARTESIAN_POINT('',(-4.525025338984,1.034963204564, + 2.499999990103)); +#21531 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21532 = DIRECTION('',(-6.982962677686E-15,1.,4.336808748469E-15)); +#21533 = ORIENTED_EDGE('',*,*,#21534,.F.); +#21534 = EDGE_CURVE('',#21535,#21526,#21537,.T.); +#21535 = VERTEX_POINT('',#21536); +#21536 = CARTESIAN_POINT('',(-4.525025338984,1.134963203215, + 0.94102984344)); +#21537 = LINE('',#21538,#21539); +#21538 = CARTESIAN_POINT('',(-4.525025338984,1.134963203215, + 0.94102984344)); +#21539 = VECTOR('',#21540,1.); +#21540 = DIRECTION('',(2.365242767157E-29,-3.387162263827E-15,1.)); +#21541 = ORIENTED_EDGE('',*,*,#21542,.F.); +#21542 = EDGE_CURVE('',#21543,#21535,#21545,.T.); +#21543 = VERTEX_POINT('',#21544); +#21544 = CARTESIAN_POINT('',(-4.525025338984,1.283199392194, + 0.747844680789)); +#21545 = CIRCLE('',#21546,0.199999997301); +#21546 = AXIS2_PLACEMENT_3D('',#21547,#21548,#21549); +#21547 = CARTESIAN_POINT('',(-4.525025338984,1.334963200516, + 0.94102984344)); +#21548 = DIRECTION('',(-1.,-6.982962677686E-15,5.605193857299E-45)); +#21549 = DIRECTION('',(-6.982962677686E-15,1.,3.25260656135E-15)); +#21550 = ORIENTED_EDGE('',*,*,#21551,.F.); +#21551 = EDGE_CURVE('',#21552,#21543,#21554,.T.); +#21552 = VERTEX_POINT('',#21553); +#21553 = CARTESIAN_POINT('',(-4.525025338984,1.686727004789, + 0.639719782871)); +#21554 = LINE('',#21555,#21556); +#21555 = CARTESIAN_POINT('',(-4.525025338984,1.686727004789, + 0.639719782871)); +#21556 = VECTOR('',#21557,1.); +#21557 = DIRECTION('',(6.74502399439E-15,-0.965925826289,0.258819045103) + ); +#21558 = ORIENTED_EDGE('',*,*,#21559,.F.); +#21559 = EDGE_CURVE('',#21560,#21552,#21562,.T.); +#21560 = VERTEX_POINT('',#21561); +#21561 = CARTESIAN_POINT('',(-4.525025338984,1.834963193768, + 0.44653462022)); +#21562 = CIRCLE('',#21563,0.199999997301); +#21563 = AXIS2_PLACEMENT_3D('',#21564,#21565,#21566); +#21564 = CARTESIAN_POINT('',(-4.525025338984,1.634963196467, + 0.44653462022)); +#21565 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#21566 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#21567 = ORIENTED_EDGE('',*,*,#21568,.F.); +#21568 = EDGE_CURVE('',#21569,#21560,#21571,.T.); +#21569 = VERTEX_POINT('',#21570); +#21570 = CARTESIAN_POINT('',(-4.525025338984,1.834963193768, + 0.200000021143)); +#21571 = LINE('',#21572,#21573); +#21572 = CARTESIAN_POINT('',(-4.525025338984,1.834963193768, + 0.200000021143)); +#21573 = VECTOR('',#21574,1.); +#21574 = DIRECTION('',(2.745182938995E-29,-3.931258214751E-15,1.)); +#21575 = ORIENTED_EDGE('',*,*,#21576,.F.); +#21576 = EDGE_CURVE('',#21577,#21569,#21579,.T.); +#21577 = VERTEX_POINT('',#21578); +#21578 = CARTESIAN_POINT('',(-4.525025338984,1.634963196467, + 2.384185937565E-08)); +#21579 = CIRCLE('',#21580,0.199999997301); +#21580 = AXIS2_PLACEMENT_3D('',#21581,#21582,#21583); +#21581 = CARTESIAN_POINT('',(-4.525025338984,1.634963196467, + 0.200000021143)); +#21582 = DIRECTION('',(1.,6.982962677686E-15,-5.605193857299E-45)); +#21583 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#21584 = ORIENTED_EDGE('',*,*,#21585,.F.); +#21585 = EDGE_CURVE('',#21586,#21577,#21588,.T.); +#21586 = VERTEX_POINT('',#21587); +#21587 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 2.384185626703E-08)); +#21588 = LINE('',#21589,#21590); +#21589 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 2.384185626703E-08)); +#21590 = VECTOR('',#21591,1.); +#21591 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#21592 = ORIENTED_EDGE('',*,*,#21593,.F.); +#21593 = EDGE_CURVE('',#21594,#21586,#21596,.T.); +#21594 = VERTEX_POINT('',#21595); +#21595 = CARTESIAN_POINT('',(-4.525025338984,0.634963209963, + 0.100000022492)); +#21596 = CIRCLE('',#21597,9.999999865046E-02); +#21597 = AXIS2_PLACEMENT_3D('',#21598,#21599,#21600); +#21598 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 0.100000022492)); +#21599 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21600 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#21601 = ORIENTED_EDGE('',*,*,#21602,.F.); +#21602 = EDGE_CURVE('',#21603,#21594,#21605,.T.); +#21603 = VERTEX_POINT('',#21604); +#21604 = CARTESIAN_POINT('',(-4.525025338984,0.634963209963, + 0.350000019118)); +#21605 = LINE('',#21606,#21607); +#21606 = CARTESIAN_POINT('',(-4.525025338984,0.634963209963, + 2.499999990103)); +#21607 = VECTOR('',#21608,1.); +#21608 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#21609 = ORIENTED_EDGE('',*,*,#21610,.F.); +#21610 = EDGE_CURVE('',#21509,#21603,#21611,.T.); +#21611 = LINE('',#21612,#21613); +#21612 = CARTESIAN_POINT('',(-4.525025338984,0.634963209963, + 2.499999990103)); +#21613 = VECTOR('',#21614,1.); +#21614 = DIRECTION('',(-2.406542790792E-29,3.446306248323E-15,-1.)); +#21615 = PLANE('',#21616); +#21616 = AXIS2_PLACEMENT_3D('',#21617,#21618,#21619); +#21617 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 2.499999990103)); +#21618 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21619 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#21620 = ADVANCED_FACE('',(#21621),#21637,.T.); +#21621 = FACE_BOUND('',#21622,.T.); +#21622 = EDGE_LOOP('',(#21623,#21624,#21630,#21631)); +#21623 = ORIENTED_EDGE('',*,*,#21415,.F.); +#21624 = ORIENTED_EDGE('',*,*,#21625,.F.); +#21625 = EDGE_CURVE('',#21594,#21408,#21626,.T.); +#21626 = LINE('',#21627,#21628); +#21627 = CARTESIAN_POINT('',(-4.525025338984,0.634963209963, + 0.100000022492)); +#21628 = VECTOR('',#21629,1.); +#21629 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21630 = ORIENTED_EDGE('',*,*,#21593,.T.); +#21631 = ORIENTED_EDGE('',*,*,#21632,.T.); +#21632 = EDGE_CURVE('',#21586,#21416,#21633,.T.); +#21633 = LINE('',#21634,#21635); +#21634 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 2.384185626703E-08)); +#21635 = VECTOR('',#21636,1.); +#21636 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21637 = CYLINDRICAL_SURFACE('',#21638,9.999999865046E-02); +#21638 = AXIS2_PLACEMENT_3D('',#21639,#21640,#21641); +#21639 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 0.100000022492)); +#21640 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21641 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#21642 = ADVANCED_FACE('',(#21643),#21654,.T.); +#21643 = FACE_BOUND('',#21644,.T.); +#21644 = EDGE_LOOP('',(#21645,#21646,#21647,#21648)); +#21645 = ORIENTED_EDGE('',*,*,#21424,.F.); +#21646 = ORIENTED_EDGE('',*,*,#21632,.F.); +#21647 = ORIENTED_EDGE('',*,*,#21585,.T.); +#21648 = ORIENTED_EDGE('',*,*,#21649,.T.); +#21649 = EDGE_CURVE('',#21577,#21425,#21650,.T.); +#21650 = LINE('',#21651,#21652); +#21651 = CARTESIAN_POINT('',(-4.525025338984,1.634963196467, + 2.384185937565E-08)); +#21652 = VECTOR('',#21653,1.); +#21653 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21654 = PLANE('',#21655); +#21655 = AXIS2_PLACEMENT_3D('',#21656,#21657,#21658); +#21656 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 2.384185626703E-08)); +#21657 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#21658 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#21659 = ADVANCED_FACE('',(#21660),#21671,.T.); +#21660 = FACE_BOUND('',#21661,.T.); +#21661 = EDGE_LOOP('',(#21662,#21663,#21664,#21665)); +#21662 = ORIENTED_EDGE('',*,*,#21432,.F.); +#21663 = ORIENTED_EDGE('',*,*,#21649,.F.); +#21664 = ORIENTED_EDGE('',*,*,#21576,.T.); +#21665 = ORIENTED_EDGE('',*,*,#21666,.T.); +#21666 = EDGE_CURVE('',#21569,#21433,#21667,.T.); +#21667 = LINE('',#21668,#21669); +#21668 = CARTESIAN_POINT('',(-4.525025338984,1.834963193768, + 0.200000021143)); +#21669 = VECTOR('',#21670,1.); +#21670 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21671 = CYLINDRICAL_SURFACE('',#21672,0.199999997301); +#21672 = AXIS2_PLACEMENT_3D('',#21673,#21674,#21675); +#21673 = CARTESIAN_POINT('',(-4.525025338984,1.634963196467, + 0.200000021143)); +#21674 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#21675 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#21676 = ADVANCED_FACE('',(#21677),#21688,.T.); +#21677 = FACE_BOUND('',#21678,.T.); +#21678 = EDGE_LOOP('',(#21679,#21680,#21681,#21682)); +#21679 = ORIENTED_EDGE('',*,*,#21441,.F.); +#21680 = ORIENTED_EDGE('',*,*,#21666,.F.); +#21681 = ORIENTED_EDGE('',*,*,#21568,.T.); +#21682 = ORIENTED_EDGE('',*,*,#21683,.T.); +#21683 = EDGE_CURVE('',#21560,#21442,#21684,.T.); +#21684 = LINE('',#21685,#21686); +#21685 = CARTESIAN_POINT('',(-4.525025338984,1.834963193768, + 0.44653462022)); +#21686 = VECTOR('',#21687,1.); +#21687 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21688 = PLANE('',#21689); +#21689 = AXIS2_PLACEMENT_3D('',#21690,#21691,#21692); +#21690 = CARTESIAN_POINT('',(-4.525025338984,1.834963193768, + 0.200000021143)); +#21691 = DIRECTION('',(-6.982962677686E-15,1.,3.931258214751E-15)); +#21692 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21693 = ADVANCED_FACE('',(#21694),#21705,.T.); +#21694 = FACE_BOUND('',#21695,.T.); +#21695 = EDGE_LOOP('',(#21696,#21697,#21698,#21699)); +#21696 = ORIENTED_EDGE('',*,*,#21449,.F.); +#21697 = ORIENTED_EDGE('',*,*,#21683,.F.); +#21698 = ORIENTED_EDGE('',*,*,#21559,.T.); +#21699 = ORIENTED_EDGE('',*,*,#21700,.T.); +#21700 = EDGE_CURVE('',#21552,#21450,#21701,.T.); +#21701 = LINE('',#21702,#21703); +#21702 = CARTESIAN_POINT('',(-4.525025338984,1.686727004789, + 0.639719782871)); +#21703 = VECTOR('',#21704,1.); +#21704 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21705 = CYLINDRICAL_SURFACE('',#21706,0.199999997301); +#21706 = AXIS2_PLACEMENT_3D('',#21707,#21708,#21709); +#21707 = CARTESIAN_POINT('',(-4.525025338984,1.634963196467, + 0.44653462022)); +#21708 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#21709 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#21710 = ADVANCED_FACE('',(#21711),#21722,.T.); +#21711 = FACE_BOUND('',#21712,.T.); +#21712 = EDGE_LOOP('',(#21713,#21714,#21715,#21716)); +#21713 = ORIENTED_EDGE('',*,*,#21458,.F.); +#21714 = ORIENTED_EDGE('',*,*,#21700,.F.); +#21715 = ORIENTED_EDGE('',*,*,#21551,.T.); +#21716 = ORIENTED_EDGE('',*,*,#21717,.T.); +#21717 = EDGE_CURVE('',#21543,#21459,#21718,.T.); +#21718 = LINE('',#21719,#21720); +#21719 = CARTESIAN_POINT('',(-4.525025338984,1.283199392194, + 0.747844680789)); +#21720 = VECTOR('',#21721,1.); +#21721 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21722 = PLANE('',#21723); +#21723 = AXIS2_PLACEMENT_3D('',#21724,#21725,#21726); +#21724 = CARTESIAN_POINT('',(-4.525025338984,1.686727004789, + 0.639719782871)); +#21725 = DIRECTION('',(-1.807323732225E-15,0.258819045103,0.965925826289 + )); +#21726 = DIRECTION('',(1.,6.982962677672E-15,1.972152263053E-31)); +#21727 = ADVANCED_FACE('',(#21728),#21739,.F.); +#21728 = FACE_BOUND('',#21729,.F.); +#21729 = EDGE_LOOP('',(#21730,#21736,#21737,#21738)); +#21730 = ORIENTED_EDGE('',*,*,#21731,.F.); +#21731 = EDGE_CURVE('',#21535,#21467,#21732,.T.); +#21732 = LINE('',#21733,#21734); +#21733 = CARTESIAN_POINT('',(-4.525025338984,1.134963203215, + 0.94102984344)); +#21734 = VECTOR('',#21735,1.); +#21735 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21736 = ORIENTED_EDGE('',*,*,#21542,.F.); +#21737 = ORIENTED_EDGE('',*,*,#21717,.T.); +#21738 = ORIENTED_EDGE('',*,*,#21466,.T.); +#21739 = CYLINDRICAL_SURFACE('',#21740,0.199999997301); +#21740 = AXIS2_PLACEMENT_3D('',#21741,#21742,#21743); +#21741 = CARTESIAN_POINT('',(-4.525025338984,1.334963200516, + 0.94102984344)); +#21742 = DIRECTION('',(1.,6.982962677686E-15,-4.379057819206E-45)); +#21743 = DIRECTION('',(6.982962677686E-15,-1.,-3.25260656135E-15)); +#21744 = ADVANCED_FACE('',(#21745),#21756,.T.); +#21745 = FACE_BOUND('',#21746,.T.); +#21746 = EDGE_LOOP('',(#21747,#21748,#21749,#21750)); +#21747 = ORIENTED_EDGE('',*,*,#21475,.F.); +#21748 = ORIENTED_EDGE('',*,*,#21731,.F.); +#21749 = ORIENTED_EDGE('',*,*,#21534,.T.); +#21750 = ORIENTED_EDGE('',*,*,#21751,.T.); +#21751 = EDGE_CURVE('',#21526,#21476,#21752,.T.); +#21752 = LINE('',#21753,#21754); +#21753 = CARTESIAN_POINT('',(-4.525025338984,1.134963203215, + 2.499999990103)); +#21754 = VECTOR('',#21755,1.); +#21755 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21756 = PLANE('',#21757); +#21757 = AXIS2_PLACEMENT_3D('',#21758,#21759,#21760); +#21758 = CARTESIAN_POINT('',(-4.525025338984,1.134963203215, + 0.94102984344)); +#21759 = DIRECTION('',(-6.982962677686E-15,1.,3.387162263827E-15)); +#21760 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21761 = ADVANCED_FACE('',(#21762),#21773,.T.); +#21762 = FACE_BOUND('',#21763,.T.); +#21763 = EDGE_LOOP('',(#21764,#21765,#21766,#21767)); +#21764 = ORIENTED_EDGE('',*,*,#21483,.T.); +#21765 = ORIENTED_EDGE('',*,*,#21751,.F.); +#21766 = ORIENTED_EDGE('',*,*,#21525,.F.); +#21767 = ORIENTED_EDGE('',*,*,#21768,.T.); +#21768 = EDGE_CURVE('',#21518,#21484,#21769,.T.); +#21769 = LINE('',#21770,#21771); +#21770 = CARTESIAN_POINT('',(-4.525025338984,1.034963204564, + 2.599999988754)); +#21771 = VECTOR('',#21772,1.); +#21772 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21773 = CYLINDRICAL_SURFACE('',#21774,9.999999865046E-02); +#21774 = AXIS2_PLACEMENT_3D('',#21775,#21776,#21777); +#21775 = CARTESIAN_POINT('',(-4.525025338984,1.034963204564, + 2.499999990103)); +#21776 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21777 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#21778 = ADVANCED_FACE('',(#21779),#21790,.T.); +#21779 = FACE_BOUND('',#21780,.T.); +#21780 = EDGE_LOOP('',(#21781,#21782,#21783,#21784)); +#21781 = ORIENTED_EDGE('',*,*,#21492,.F.); +#21782 = ORIENTED_EDGE('',*,*,#21768,.F.); +#21783 = ORIENTED_EDGE('',*,*,#21517,.T.); +#21784 = ORIENTED_EDGE('',*,*,#21785,.T.); +#21785 = EDGE_CURVE('',#21507,#21389,#21786,.T.); +#21786 = LINE('',#21787,#21788); +#21787 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 2.599999988754)); +#21788 = VECTOR('',#21789,1.); +#21789 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21790 = PLANE('',#21791); +#21791 = AXIS2_PLACEMENT_3D('',#21792,#21793,#21794); +#21792 = CARTESIAN_POINT('',(-4.525025338984,1.034963204564, + 2.599999988754)); +#21793 = DIRECTION('',(2.185723611047E-29,-3.130080614681E-15,1.)); +#21794 = DIRECTION('',(0.,-1.,-3.130080614681E-15)); +#21795 = ADVANCED_FACE('',(#21796),#21807,.T.); +#21796 = FACE_BOUND('',#21797,.T.); +#21797 = EDGE_LOOP('',(#21798,#21799,#21800,#21801)); +#21798 = ORIENTED_EDGE('',*,*,#21388,.F.); +#21799 = ORIENTED_EDGE('',*,*,#21785,.F.); +#21800 = ORIENTED_EDGE('',*,*,#21506,.T.); +#21801 = ORIENTED_EDGE('',*,*,#21802,.T.); +#21802 = EDGE_CURVE('',#21509,#21391,#21803,.T.); +#21803 = LINE('',#21804,#21805); +#21804 = CARTESIAN_POINT('',(-4.525025338984,0.634963209963, + 2.499999990103)); +#21805 = VECTOR('',#21806,1.); +#21806 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21807 = CYLINDRICAL_SURFACE('',#21808,9.999999865046E-02); +#21808 = AXIS2_PLACEMENT_3D('',#21809,#21810,#21811); +#21809 = CARTESIAN_POINT('',(-4.525025338984,0.734963208613, + 2.499999990103)); +#21810 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21811 = DIRECTION('',(6.982962677686E-15,-1.,-4.336808748469E-15)); +#21812 = ADVANCED_FACE('',(#21813),#21840,.T.); +#21813 = FACE_BOUND('',#21814,.T.); +#21814 = EDGE_LOOP('',(#21815,#21823,#21824,#21825,#21826,#21834)); +#21815 = ORIENTED_EDGE('',*,*,#21816,.F.); +#21816 = EDGE_CURVE('',#21603,#21817,#21819,.T.); +#21817 = VERTEX_POINT('',#21818); +#21818 = CARTESIAN_POINT('',(-4.300025342021,0.634963209963, + 0.350000019118)); +#21819 = LINE('',#21820,#21821); +#21820 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#21821 = VECTOR('',#21822,1.); +#21822 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21823 = ORIENTED_EDGE('',*,*,#21602,.T.); +#21824 = ORIENTED_EDGE('',*,*,#21625,.T.); +#21825 = ORIENTED_EDGE('',*,*,#21407,.F.); +#21826 = ORIENTED_EDGE('',*,*,#21827,.F.); +#21827 = EDGE_CURVE('',#21828,#21400,#21830,.T.); +#21828 = VERTEX_POINT('',#21829); +#21829 = CARTESIAN_POINT('',(-4.300025342021,0.634963209963, + 0.75000001372)); +#21830 = LINE('',#21831,#21832); +#21831 = CARTESIAN_POINT('',(-4.20002534337,0.634963209963,0.75000001372 + )); +#21832 = VECTOR('',#21833,1.); +#21833 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21834 = ORIENTED_EDGE('',*,*,#21835,.F.); +#21835 = EDGE_CURVE('',#21817,#21828,#21836,.T.); +#21836 = LINE('',#21837,#21838); +#21837 = CARTESIAN_POINT('',(-4.300025342021,0.634963209963, + 0.100000022492)); +#21838 = VECTOR('',#21839,1.); +#21839 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#21840 = PLANE('',#21841); +#21841 = AXIS2_PLACEMENT_3D('',#21842,#21843,#21844); +#21842 = CARTESIAN_POINT('',(-4.525025338984,0.634963209963, + 2.499999990103)); +#21843 = DIRECTION('',(6.982962677686E-15,-1.,-3.446306248323E-15)); +#21844 = DIRECTION('',(0.,3.446306248323E-15,-1.)); +#21845 = ADVANCED_FACE('',(#21846),#21852,.F.); +#21846 = FACE_BOUND('',#21847,.T.); +#21847 = EDGE_LOOP('',(#21848,#21849,#21850,#21851)); +#21848 = ORIENTED_EDGE('',*,*,#21373,.T.); +#21849 = ORIENTED_EDGE('',*,*,#21314,.T.); +#21850 = ORIENTED_EDGE('',*,*,#21344,.T.); +#21851 = ORIENTED_EDGE('',*,*,#21290,.T.); +#21852 = PLANE('',#21853); +#21853 = AXIS2_PLACEMENT_3D('',#21854,#21855,#21856); +#21854 = CARTESIAN_POINT('',(-4.525025338984,-2.965036741454, + 1.150000008322)); +#21855 = DIRECTION('',(-6.982962677686E-15,1.,4.111025437406E-15)); +#21856 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#21857 = ADVANCED_FACE('',(#21858),#21883,.F.); +#21858 = FACE_BOUND('',#21859,.T.); +#21859 = EDGE_LOOP('',(#21860,#21868,#21869,#21877)); +#21860 = ORIENTED_EDGE('',*,*,#21861,.F.); +#21861 = EDGE_CURVE('',#21275,#21862,#21864,.T.); +#21862 = VERTEX_POINT('',#21863); +#21863 = CARTESIAN_POINT('',(-4.225025343033,-0.465036775192, + 1.849999998875)); +#21864 = LINE('',#21865,#21866); +#21865 = CARTESIAN_POINT('',(-4.225025343033,-2.965036741454, + 1.849999998875)); +#21866 = VECTOR('',#21867,1.); +#21867 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#21868 = ORIENTED_EDGE('',*,*,#21274,.T.); +#21869 = ORIENTED_EDGE('',*,*,#21870,.T.); +#21870 = EDGE_CURVE('',#21265,#21871,#21873,.T.); +#21871 = VERTEX_POINT('',#21872); +#21872 = CARTESIAN_POINT('',(-4.225025343033,-0.465036775192, + 1.150000008322)); +#21873 = LINE('',#21874,#21875); +#21874 = CARTESIAN_POINT('',(-4.225025343033,-2.965036741454, + 1.150000008322)); +#21875 = VECTOR('',#21876,1.); +#21876 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#21877 = ORIENTED_EDGE('',*,*,#21878,.T.); +#21878 = EDGE_CURVE('',#21871,#21862,#21879,.T.); +#21879 = LINE('',#21880,#21881); +#21880 = CARTESIAN_POINT('',(-4.225025343033,-0.465036775192, + 1.849999998875)); +#21881 = VECTOR('',#21882,1.); +#21882 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#21883 = PLANE('',#21884); +#21884 = AXIS2_PLACEMENT_3D('',#21885,#21886,#21887); +#21885 = CARTESIAN_POINT('',(-4.225025343033,0.934963205914, + 1.849999998875)); +#21886 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21887 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#21888 = ADVANCED_FACE('',(#21889),#21914,.T.); +#21889 = FACE_BOUND('',#21890,.T.); +#21890 = EDGE_LOOP('',(#21891,#21899,#21900,#21908)); +#21891 = ORIENTED_EDGE('',*,*,#21892,.F.); +#21892 = EDGE_CURVE('',#21307,#21893,#21895,.T.); +#21893 = VERTEX_POINT('',#21894); +#21894 = CARTESIAN_POINT('',(-4.525025338984,-0.465036775192, + 1.150000008322)); +#21895 = LINE('',#21896,#21897); +#21896 = CARTESIAN_POINT('',(-4.525025338984,-2.965036741454, + 1.150000008322)); +#21897 = VECTOR('',#21898,1.); +#21898 = DIRECTION('',(-6.982962677686E-15,1.,3.31374327778E-15)); +#21899 = ORIENTED_EDGE('',*,*,#21330,.T.); +#21900 = ORIENTED_EDGE('',*,*,#21901,.T.); +#21901 = EDGE_CURVE('',#21323,#21902,#21904,.T.); +#21902 = VERTEX_POINT('',#21903); +#21903 = CARTESIAN_POINT('',(-4.525025338984,-0.465036775192, + 1.849999998875)); +#21904 = LINE('',#21905,#21906); +#21905 = CARTESIAN_POINT('',(-4.525025338984,-2.965036741454, + 1.849999998875)); +#21906 = VECTOR('',#21907,1.); +#21907 = DIRECTION('',(-6.982962677686E-15,1.,3.307784318971E-15)); +#21908 = ORIENTED_EDGE('',*,*,#21909,.F.); +#21909 = EDGE_CURVE('',#21893,#21902,#21910,.T.); +#21910 = LINE('',#21911,#21912); +#21911 = CARTESIAN_POINT('',(-4.525025338984,-0.465036775192, + 1.849999998875)); +#21912 = VECTOR('',#21913,1.); +#21913 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#21914 = PLANE('',#21915); +#21915 = AXIS2_PLACEMENT_3D('',#21916,#21917,#21918); +#21916 = CARTESIAN_POINT('',(-4.525025338984,0.934963205914, + 1.849999998875)); +#21917 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21918 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#21919 = ADVANCED_FACE('',(#21920),#21931,.T.); +#21920 = FACE_BOUND('',#21921,.T.); +#21921 = EDGE_LOOP('',(#21922,#21923,#21924,#21925)); +#21922 = ORIENTED_EDGE('',*,*,#21870,.F.); +#21923 = ORIENTED_EDGE('',*,*,#21351,.T.); +#21924 = ORIENTED_EDGE('',*,*,#21892,.T.); +#21925 = ORIENTED_EDGE('',*,*,#21926,.F.); +#21926 = EDGE_CURVE('',#21871,#21893,#21927,.T.); +#21927 = LINE('',#21928,#21929); +#21928 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.150000008322)); +#21929 = VECTOR('',#21930,1.); +#21930 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21931 = PLANE('',#21932); +#21932 = AXIS2_PLACEMENT_3D('',#21933,#21934,#21935); +#21933 = CARTESIAN_POINT('',(-4.525025338984,-2.965036741454, + 1.150000008322)); +#21934 = DIRECTION('',(-2.313974563217E-29,3.31374327778E-15,-1.)); +#21935 = DIRECTION('',(-1.,0.,2.313974563217E-29)); +#21936 = ADVANCED_FACE('',(#21937),#21948,.F.); +#21937 = FACE_BOUND('',#21938,.T.); +#21938 = EDGE_LOOP('',(#21939,#21940,#21941,#21942)); +#21939 = ORIENTED_EDGE('',*,*,#21901,.F.); +#21940 = ORIENTED_EDGE('',*,*,#21366,.T.); +#21941 = ORIENTED_EDGE('',*,*,#21861,.T.); +#21942 = ORIENTED_EDGE('',*,*,#21943,.T.); +#21943 = EDGE_CURVE('',#21862,#21902,#21944,.T.); +#21944 = LINE('',#21945,#21946); +#21945 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.849999998875)); +#21946 = VECTOR('',#21947,1.); +#21947 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#21948 = PLANE('',#21949); +#21949 = AXIS2_PLACEMENT_3D('',#21950,#21951,#21952); +#21950 = CARTESIAN_POINT('',(-4.525025338984,-2.965036741454, + 1.849999998875)); +#21951 = DIRECTION('',(-2.309813444521E-29,3.307784318971E-15,-1.)); +#21952 = DIRECTION('',(-1.,0.,2.309813444521E-29)); +#21953 = ADVANCED_FACE('',(#21954),#21996,.F.); +#21954 = FACE_BOUND('',#21955,.T.); +#21955 = EDGE_LOOP('',(#21956,#21966,#21974,#21982,#21990)); +#21956 = ORIENTED_EDGE('',*,*,#21957,.T.); +#21957 = EDGE_CURVE('',#21958,#21960,#21962,.T.); +#21958 = VERTEX_POINT('',#21959); +#21959 = CARTESIAN_POINT('',(-3.900025347419,-3.265036737405, + 0.75000001372)); +#21960 = VERTEX_POINT('',#21961); +#21961 = CARTESIAN_POINT('',(-3.900025347419,-3.465036734706, + 0.550000016419)); +#21962 = LINE('',#21963,#21964); +#21963 = CARTESIAN_POINT('',(-3.900025347419,-3.265036737405, + 0.75000001372)); +#21964 = VECTOR('',#21965,1.); +#21965 = DIRECTION('',(5.142139384386E-15,-0.707106781187, + -0.707106781187)); +#21966 = ORIENTED_EDGE('',*,*,#21967,.T.); +#21967 = EDGE_CURVE('',#21960,#21968,#21970,.T.); +#21968 = VERTEX_POINT('',#21969); +#21969 = CARTESIAN_POINT('',(-3.900025347419,-3.465036734706, + 0.350000019118)); +#21970 = LINE('',#21971,#21972); +#21971 = CARTESIAN_POINT('',(-3.900025347419,-3.465036734706, + 3.851612455717)); +#21972 = VECTOR('',#21973,1.); +#21973 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#21974 = ORIENTED_EDGE('',*,*,#21975,.T.); +#21975 = EDGE_CURVE('',#21968,#21976,#21978,.T.); +#21976 = VERTEX_POINT('',#21977); +#21977 = CARTESIAN_POINT('',(-3.900025347419,-1.965036754949, + 0.350000019118)); +#21978 = LINE('',#21979,#21980); +#21979 = CARTESIAN_POINT('',(-3.900025347419,-3.465036734706, + 0.350000019118)); +#21980 = VECTOR('',#21981,1.); +#21981 = DIRECTION('',(-7.272083257016E-15,1.,3.491481338843E-15)); +#21982 = ORIENTED_EDGE('',*,*,#21983,.F.); +#21983 = EDGE_CURVE('',#21984,#21976,#21986,.T.); +#21984 = VERTEX_POINT('',#21985); +#21985 = CARTESIAN_POINT('',(-3.900025347419,-1.965036754949, + 0.75000001372)); +#21986 = LINE('',#21987,#21988); +#21987 = CARTESIAN_POINT('',(-3.900025347419,-1.965036754949, + 3.851612455717)); +#21988 = VECTOR('',#21989,1.); +#21989 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#21990 = ORIENTED_EDGE('',*,*,#21991,.T.); +#21991 = EDGE_CURVE('',#21984,#21958,#21992,.T.); +#21992 = LINE('',#21993,#21994); +#21993 = CARTESIAN_POINT('',(-3.900025347419,-3.465036734706, + 0.75000001372)); +#21994 = VECTOR('',#21995,1.); +#21995 = DIRECTION('',(7.272083257016E-15,-1.,-3.491481338843E-15)); +#21996 = PLANE('',#21997); +#21997 = AXIS2_PLACEMENT_3D('',#21998,#21999,#22000); +#21998 = CARTESIAN_POINT('',(-3.900025347419,-3.465036734706, + 3.851612455717)); +#21999 = DIRECTION('',(-1.,-7.272083257016E-15,-1.009459107404E-30)); +#22000 = DIRECTION('',(-7.272083257016E-15,1.,0.)); +#22001 = ADVANCED_FACE('',(#22002),#22044,.T.); +#22002 = FACE_BOUND('',#22003,.T.); +#22003 = EDGE_LOOP('',(#22004,#22014,#22022,#22030,#22038)); +#22004 = ORIENTED_EDGE('',*,*,#22005,.F.); +#22005 = EDGE_CURVE('',#22006,#22008,#22010,.T.); +#22006 = VERTEX_POINT('',#22007); +#22007 = CARTESIAN_POINT('',(-3.600025351467,-1.965036754949, + 0.75000001372)); +#22008 = VERTEX_POINT('',#22009); +#22009 = CARTESIAN_POINT('',(-3.600025351467,-3.265036737405, + 0.75000001372)); +#22010 = LINE('',#22011,#22012); +#22011 = CARTESIAN_POINT('',(-3.600025351467,-3.465036734706, + 0.75000001372)); +#22012 = VECTOR('',#22013,1.); +#22013 = DIRECTION('',(6.693842098357E-15,-1.,-3.491481338843E-15)); +#22014 = ORIENTED_EDGE('',*,*,#22015,.T.); +#22015 = EDGE_CURVE('',#22006,#22016,#22018,.T.); +#22016 = VERTEX_POINT('',#22017); +#22017 = CARTESIAN_POINT('',(-3.600025351467,-1.965036754949, + 0.350000019118)); +#22018 = LINE('',#22019,#22020); +#22019 = CARTESIAN_POINT('',(-3.600025351467,-1.965036754949, + 3.851612455717)); +#22020 = VECTOR('',#22021,1.); +#22021 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22022 = ORIENTED_EDGE('',*,*,#22023,.F.); +#22023 = EDGE_CURVE('',#22024,#22016,#22026,.T.); +#22024 = VERTEX_POINT('',#22025); +#22025 = CARTESIAN_POINT('',(-3.600025351467,-3.465036734706, + 0.350000019118)); +#22026 = LINE('',#22027,#22028); +#22027 = CARTESIAN_POINT('',(-3.600025351467,-3.465036734706, + 0.350000019118)); +#22028 = VECTOR('',#22029,1.); +#22029 = DIRECTION('',(-6.693842098357E-15,1.,3.491481338843E-15)); +#22030 = ORIENTED_EDGE('',*,*,#22031,.F.); +#22031 = EDGE_CURVE('',#22032,#22024,#22034,.T.); +#22032 = VERTEX_POINT('',#22033); +#22033 = CARTESIAN_POINT('',(-3.600025351467,-3.465036734706, + 0.550000016419)); +#22034 = LINE('',#22035,#22036); +#22035 = CARTESIAN_POINT('',(-3.600025351467,-3.465036734706, + 3.851612455717)); +#22036 = VECTOR('',#22037,1.); +#22037 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22038 = ORIENTED_EDGE('',*,*,#22039,.F.); +#22039 = EDGE_CURVE('',#22008,#22032,#22040,.T.); +#22040 = LINE('',#22041,#22042); +#22041 = CARTESIAN_POINT('',(-3.600025351467,-3.265036737405, + 0.75000001372)); +#22042 = VECTOR('',#22043,1.); +#22043 = DIRECTION('',(4.733261139937E-15,-0.707106781187, + -0.707106781187)); +#22044 = PLANE('',#22045); +#22045 = AXIS2_PLACEMENT_3D('',#22046,#22047,#22048); +#22046 = CARTESIAN_POINT('',(-3.600025351467,-3.465036734706, + 3.851612455717)); +#22047 = DIRECTION('',(-1.,-6.693842098357E-15,1.009459107404E-30)); +#22048 = DIRECTION('',(-6.693842098357E-15,1.,0.)); +#22049 = ADVANCED_FACE('',(#22050),#22075,.F.); +#22050 = FACE_BOUND('',#22051,.T.); +#22051 = EDGE_LOOP('',(#22052,#22053,#22061,#22069)); +#22052 = ORIENTED_EDGE('',*,*,#21983,.T.); +#22053 = ORIENTED_EDGE('',*,*,#22054,.T.); +#22054 = EDGE_CURVE('',#21976,#22055,#22057,.T.); +#22055 = VERTEX_POINT('',#22056); +#22056 = CARTESIAN_POINT('',(-4.300025342021,-1.965036754949, + 0.350000019118)); +#22057 = LINE('',#22058,#22059); +#22058 = CARTESIAN_POINT('',(-3.200025356866,-1.965036754949, + 0.350000019118)); +#22059 = VECTOR('',#22060,1.); +#22060 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22061 = ORIENTED_EDGE('',*,*,#22062,.F.); +#22062 = EDGE_CURVE('',#22063,#22055,#22065,.T.); +#22063 = VERTEX_POINT('',#22064); +#22064 = CARTESIAN_POINT('',(-4.300025342021,-1.965036754949, + 0.75000001372)); +#22065 = LINE('',#22066,#22067); +#22066 = CARTESIAN_POINT('',(-4.300025342021,-1.965036754949, + 3.851612455717)); +#22067 = VECTOR('',#22068,1.); +#22068 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22069 = ORIENTED_EDGE('',*,*,#22070,.T.); +#22070 = EDGE_CURVE('',#22063,#21984,#22071,.T.); +#22071 = LINE('',#22072,#22073); +#22072 = CARTESIAN_POINT('',(-3.200025356866,-1.965036754949, + 0.75000001372)); +#22073 = VECTOR('',#22074,1.); +#22074 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22075 = PLANE('',#22076); +#22076 = AXIS2_PLACEMENT_3D('',#22077,#22078,#22079); +#22077 = CARTESIAN_POINT('',(-3.200025356866,-1.965036754949, + 3.851612455717)); +#22078 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22079 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#22080 = ADVANCED_FACE('',(#22081),#22106,.F.); +#22081 = FACE_BOUND('',#22082,.T.); +#22082 = EDGE_LOOP('',(#22083,#22091,#22099,#22105)); +#22083 = ORIENTED_EDGE('',*,*,#22084,.T.); +#22084 = EDGE_CURVE('',#22006,#22085,#22087,.T.); +#22085 = VERTEX_POINT('',#22086); +#22086 = CARTESIAN_POINT('',(-3.200025356866,-1.965036754949, + 0.75000001372)); +#22087 = LINE('',#22088,#22089); +#22088 = CARTESIAN_POINT('',(-3.200025356866,-1.965036754949, + 0.75000001372)); +#22089 = VECTOR('',#22090,1.); +#22090 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22091 = ORIENTED_EDGE('',*,*,#22092,.T.); +#22092 = EDGE_CURVE('',#22085,#22093,#22095,.T.); +#22093 = VERTEX_POINT('',#22094); +#22094 = CARTESIAN_POINT('',(-3.200025356866,-1.965036754949, + 0.350000019118)); +#22095 = LINE('',#22096,#22097); +#22096 = CARTESIAN_POINT('',(-3.200025356866,-1.965036754949, + 3.851612455717)); +#22097 = VECTOR('',#22098,1.); +#22098 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22099 = ORIENTED_EDGE('',*,*,#22100,.T.); +#22100 = EDGE_CURVE('',#22093,#22016,#22101,.T.); +#22101 = LINE('',#22102,#22103); +#22102 = CARTESIAN_POINT('',(-3.200025356866,-1.965036754949, + 0.350000019118)); +#22103 = VECTOR('',#22104,1.); +#22104 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22105 = ORIENTED_EDGE('',*,*,#22015,.F.); +#22106 = PLANE('',#22107); +#22107 = AXIS2_PLACEMENT_3D('',#22108,#22109,#22110); +#22108 = CARTESIAN_POINT('',(-3.200025356866,-1.965036754949, + 3.851612455717)); +#22109 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22110 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#22111 = ADVANCED_FACE('',(#22112),#22176,.T.); +#22112 = FACE_BOUND('',#22113,.T.); +#22113 = EDGE_LOOP('',(#22114,#22124,#22130,#22131,#22139,#22147,#22155, + #22163,#22169,#22170)); +#22114 = ORIENTED_EDGE('',*,*,#22115,.T.); +#22115 = EDGE_CURVE('',#22116,#22118,#22120,.T.); +#22116 = VERTEX_POINT('',#22117); +#22117 = CARTESIAN_POINT('',(-3.200025356866,-0.465036775192, + 0.75000001372)); +#22118 = VERTEX_POINT('',#22119); +#22119 = CARTESIAN_POINT('',(-4.300025342021,-0.465036775192, + 0.75000001372)); +#22120 = LINE('',#22121,#22122); +#22121 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 0.75000001372)); +#22122 = VECTOR('',#22123,1.); +#22123 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22124 = ORIENTED_EDGE('',*,*,#22125,.T.); +#22125 = EDGE_CURVE('',#22118,#21828,#22126,.T.); +#22126 = LINE('',#22127,#22128); +#22127 = CARTESIAN_POINT('',(-4.300025342021,0.934963205914, + 0.75000001372)); +#22128 = VECTOR('',#22129,1.); +#22129 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#22130 = ORIENTED_EDGE('',*,*,#21827,.T.); +#22131 = ORIENTED_EDGE('',*,*,#22132,.T.); +#22132 = EDGE_CURVE('',#21400,#22133,#22135,.T.); +#22133 = VERTEX_POINT('',#22134); +#22134 = CARTESIAN_POINT('',(-4.20002534337,0.634963209963,0.75000001372 + )); +#22135 = LINE('',#22136,#22137); +#22136 = CARTESIAN_POINT('',(-4.20002534337,0.634963209963,0.75000001372 + )); +#22137 = VECTOR('',#22138,1.); +#22138 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22139 = ORIENTED_EDGE('',*,*,#22140,.T.); +#22140 = EDGE_CURVE('',#22133,#22141,#22143,.T.); +#22141 = VERTEX_POINT('',#22142); +#22142 = CARTESIAN_POINT('',(-4.20002534337,0.934963205914,0.75000001372 + )); +#22143 = LINE('',#22144,#22145); +#22144 = CARTESIAN_POINT('',(-4.20002534337,0.934963205914,0.75000001372 + )); +#22145 = VECTOR('',#22146,1.); +#22146 = DIRECTION('',(-4.091756884392E-15,1.,3.491481338843E-15)); +#22147 = ORIENTED_EDGE('',*,*,#22148,.T.); +#22148 = EDGE_CURVE('',#22141,#22149,#22151,.T.); +#22149 = VERTEX_POINT('',#22150); +#22150 = CARTESIAN_POINT('',(-3.300025355516,0.934963205914, + 0.75000001372)); +#22151 = LINE('',#22152,#22153); +#22152 = CARTESIAN_POINT('',(-3.200025356866,0.934963205914, + 0.75000001372)); +#22153 = VECTOR('',#22154,1.); +#22154 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22155 = ORIENTED_EDGE('',*,*,#22156,.T.); +#22156 = EDGE_CURVE('',#22149,#22157,#22159,.T.); +#22157 = VERTEX_POINT('',#22158); +#22158 = CARTESIAN_POINT('',(-3.300025355516,0.634963209963, + 0.75000001372)); +#22159 = LINE('',#22160,#22161); +#22160 = CARTESIAN_POINT('',(-3.300025355516,0.934963205914, + 0.75000001372)); +#22161 = VECTOR('',#22162,1.); +#22162 = DIRECTION('',(9.874168470981E-15,-1.,-3.491481338843E-15)); +#22163 = ORIENTED_EDGE('',*,*,#22164,.T.); +#22164 = EDGE_CURVE('',#22157,#20910,#22165,.T.); +#22165 = LINE('',#22166,#22167); +#22166 = CARTESIAN_POINT('',(-2.950025360239,0.634963209963, + 0.75000001372)); +#22167 = VECTOR('',#22168,1.); +#22168 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22169 = ORIENTED_EDGE('',*,*,#21139,.T.); +#22170 = ORIENTED_EDGE('',*,*,#22171,.F.); +#22171 = EDGE_CURVE('',#22116,#21132,#22172,.T.); +#22172 = LINE('',#22173,#22174); +#22173 = CARTESIAN_POINT('',(-3.200025356866,0.934963205914, + 0.75000001372)); +#22174 = VECTOR('',#22175,1.); +#22175 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#22176 = PLANE('',#22177); +#22177 = AXIS2_PLACEMENT_3D('',#22178,#22179,#22180); +#22178 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 0.75000001372)); +#22179 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22180 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#22181 = ADVANCED_FACE('',(#22182),#22199,.F.); +#22182 = FACE_BOUND('',#22183,.T.); +#22183 = EDGE_LOOP('',(#22184,#22190,#22191,#22197,#22198)); +#22184 = ORIENTED_EDGE('',*,*,#22185,.T.); +#22185 = EDGE_CURVE('',#21124,#22093,#22186,.T.); +#22186 = LINE('',#22187,#22188); +#22187 = CARTESIAN_POINT('',(-3.200025356866,0.934963205914, + 0.350000019118)); +#22188 = VECTOR('',#22189,1.); +#22189 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22190 = ORIENTED_EDGE('',*,*,#22092,.F.); +#22191 = ORIENTED_EDGE('',*,*,#22192,.T.); +#22192 = EDGE_CURVE('',#22085,#22116,#22193,.T.); +#22193 = LINE('',#22194,#22195); +#22194 = CARTESIAN_POINT('',(-3.200025356866,0.934963205914, + 0.75000001372)); +#22195 = VECTOR('',#22196,1.); +#22196 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#22197 = ORIENTED_EDGE('',*,*,#22171,.T.); +#22198 = ORIENTED_EDGE('',*,*,#21131,.F.); +#22199 = PLANE('',#22200); +#22200 = AXIS2_PLACEMENT_3D('',#22201,#22202,#22203); +#22201 = CARTESIAN_POINT('',(-3.200025356866,0.934963205914, + 3.851612455717)); +#22202 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22203 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#22204 = ADVANCED_FACE('',(#22205),#22222,.T.); +#22205 = FACE_BOUND('',#22206,.T.); +#22206 = EDGE_LOOP('',(#22207,#22208,#22209,#22215,#22216)); +#22207 = ORIENTED_EDGE('',*,*,#21835,.T.); +#22208 = ORIENTED_EDGE('',*,*,#22125,.F.); +#22209 = ORIENTED_EDGE('',*,*,#22210,.F.); +#22210 = EDGE_CURVE('',#22063,#22118,#22211,.T.); +#22211 = LINE('',#22212,#22213); +#22212 = CARTESIAN_POINT('',(-4.300025342021,0.934963205914, + 0.75000001372)); +#22213 = VECTOR('',#22214,1.); +#22214 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#22215 = ORIENTED_EDGE('',*,*,#22062,.T.); +#22216 = ORIENTED_EDGE('',*,*,#22217,.F.); +#22217 = EDGE_CURVE('',#21817,#22055,#22218,.T.); +#22218 = LINE('',#22219,#22220); +#22219 = CARTESIAN_POINT('',(-4.300025342021,0.934963205914, + 0.350000019118)); +#22220 = VECTOR('',#22221,1.); +#22221 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22222 = PLANE('',#22223); +#22223 = AXIS2_PLACEMENT_3D('',#22224,#22225,#22226); +#22224 = CARTESIAN_POINT('',(-4.300025342021,0.934963205914, + 3.851612455717)); +#22225 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22226 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#22227 = ADVANCED_FACE('',(#22228),#22262,.F.); +#22228 = FACE_BOUND('',#22229,.T.); +#22229 = EDGE_LOOP('',(#22230,#22240,#22248,#22256)); +#22230 = ORIENTED_EDGE('',*,*,#22231,.T.); +#22231 = EDGE_CURVE('',#22232,#22234,#22236,.T.); +#22232 = VERTEX_POINT('',#22233); +#22233 = CARTESIAN_POINT('',(-0.800025389254,0.934963205914, + 0.350000019118)); +#22234 = VERTEX_POINT('',#22235); +#22235 = CARTESIAN_POINT('',(-0.800025389254,0.934963205914, + 3.599999975258)); +#22236 = LINE('',#22237,#22238); +#22237 = CARTESIAN_POINT('',(-0.800025389254,0.934963205914, + 0.100000022492)); +#22238 = VECTOR('',#22239,1.); +#22239 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22240 = ORIENTED_EDGE('',*,*,#22241,.T.); +#22241 = EDGE_CURVE('',#22234,#22242,#22244,.T.); +#22242 = VERTEX_POINT('',#22243); +#22243 = CARTESIAN_POINT('',(-0.800025389254,0.634963209963, + 3.599999975258)); +#22244 = LINE('',#22245,#22246); +#22245 = CARTESIAN_POINT('',(-0.800025389254,0.934963205914, + 3.599999975258)); +#22246 = VECTOR('',#22247,1.); +#22247 = DIRECTION('',(9.874168470981E-15,-1.,-3.491481338843E-15)); +#22248 = ORIENTED_EDGE('',*,*,#22249,.F.); +#22249 = EDGE_CURVE('',#22250,#22242,#22252,.T.); +#22250 = VERTEX_POINT('',#22251); +#22251 = CARTESIAN_POINT('',(-0.800025389254,0.634963209963, + 0.350000019118)); +#22252 = LINE('',#22253,#22254); +#22253 = CARTESIAN_POINT('',(-0.800025389254,0.634963209963, + 0.100000022492)); +#22254 = VECTOR('',#22255,1.); +#22255 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22256 = ORIENTED_EDGE('',*,*,#22257,.F.); +#22257 = EDGE_CURVE('',#22232,#22250,#22258,.T.); +#22258 = LINE('',#22259,#22260); +#22259 = CARTESIAN_POINT('',(-0.800025389254,0.934963205914, + 0.350000019118)); +#22260 = VECTOR('',#22261,1.); +#22261 = DIRECTION('',(9.874168470981E-15,-1.,-3.491481338843E-15)); +#22262 = PLANE('',#22263); +#22263 = AXIS2_PLACEMENT_3D('',#22264,#22265,#22266); +#22264 = CARTESIAN_POINT('',(-0.800025389254,0.934963205914, + 0.100000022492)); +#22265 = DIRECTION('',(-1.,-9.874168470981E-15,-1.009459107404E-29)); +#22266 = DIRECTION('',(-9.874168470981E-15,1.,0.)); +#22267 = ADVANCED_FACE('',(#22268),#22302,.F.); +#22268 = FACE_BOUND('',#22269,.T.); +#22269 = EDGE_LOOP('',(#22270,#22280,#22288,#22296)); +#22270 = ORIENTED_EDGE('',*,*,#22271,.T.); +#22271 = EDGE_CURVE('',#22272,#22274,#22276,.T.); +#22272 = VERTEX_POINT('',#22273); +#22273 = CARTESIAN_POINT('',(-0.450025393978,0.634963209963, + 0.350000019118)); +#22274 = VERTEX_POINT('',#22275); +#22275 = CARTESIAN_POINT('',(-0.450025393978,0.634963209963, + 3.599999975258)); +#22276 = LINE('',#22277,#22278); +#22277 = CARTESIAN_POINT('',(-0.450025393978,0.634963209963, + 0.100000022492)); +#22278 = VECTOR('',#22279,1.); +#22279 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22280 = ORIENTED_EDGE('',*,*,#22281,.T.); +#22281 = EDGE_CURVE('',#22274,#22282,#22284,.T.); +#22282 = VERTEX_POINT('',#22283); +#22283 = CARTESIAN_POINT('',(-0.450025393978,0.934963205914, + 3.599999975258)); +#22284 = LINE('',#22285,#22286); +#22285 = CARTESIAN_POINT('',(-0.450025393978,0.934963205914, + 3.599999975258)); +#22286 = VECTOR('',#22287,1.); +#22287 = DIRECTION('',(-4.091756884392E-15,1.,3.491481338843E-15)); +#22288 = ORIENTED_EDGE('',*,*,#22289,.F.); +#22289 = EDGE_CURVE('',#22290,#22282,#22292,.T.); +#22290 = VERTEX_POINT('',#22291); +#22291 = CARTESIAN_POINT('',(-0.450025393978,0.934963205914, + 0.350000019118)); +#22292 = LINE('',#22293,#22294); +#22293 = CARTESIAN_POINT('',(-0.450025393978,0.934963205914, + 0.100000022492)); +#22294 = VECTOR('',#22295,1.); +#22295 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22296 = ORIENTED_EDGE('',*,*,#22297,.F.); +#22297 = EDGE_CURVE('',#22272,#22290,#22298,.T.); +#22298 = LINE('',#22299,#22300); +#22299 = CARTESIAN_POINT('',(-0.450025393978,0.934963205914, + 0.350000019118)); +#22300 = VECTOR('',#22301,1.); +#22301 = DIRECTION('',(-4.091756884392E-15,1.,3.491481338843E-15)); +#22302 = PLANE('',#22303); +#22303 = AXIS2_PLACEMENT_3D('',#22304,#22305,#22306); +#22304 = CARTESIAN_POINT('',(-0.450025393978,0.934963205914, + 0.100000022492)); +#22305 = DIRECTION('',(1.,4.091756884392E-15,-1.009459107404E-29)); +#22306 = DIRECTION('',(-4.091756884392E-15,1.,0.)); +#22307 = ADVANCED_FACE('',(#22308),#22342,.F.); +#22308 = FACE_BOUND('',#22309,.T.); +#22309 = EDGE_LOOP('',(#22310,#22320,#22328,#22336)); +#22310 = ORIENTED_EDGE('',*,*,#22311,.T.); +#22311 = EDGE_CURVE('',#22312,#22314,#22316,.T.); +#22312 = VERTEX_POINT('',#22313); +#22313 = CARTESIAN_POINT('',(-2.050025372385,0.934963205914, + 0.350000019118)); +#22314 = VERTEX_POINT('',#22315); +#22315 = CARTESIAN_POINT('',(-2.050025372385,0.934963205914, + 3.599999975258)); +#22316 = LINE('',#22317,#22318); +#22317 = CARTESIAN_POINT('',(-2.050025372385,0.934963205914, + 0.100000022492)); +#22318 = VECTOR('',#22319,1.); +#22319 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22320 = ORIENTED_EDGE('',*,*,#22321,.T.); +#22321 = EDGE_CURVE('',#22314,#22322,#22324,.T.); +#22322 = VERTEX_POINT('',#22323); +#22323 = CARTESIAN_POINT('',(-2.050025372385,0.634963209963, + 3.599999975258)); +#22324 = LINE('',#22325,#22326); +#22325 = CARTESIAN_POINT('',(-2.050025372385,0.934963205914, + 3.599999975258)); +#22326 = VECTOR('',#22327,1.); +#22327 = DIRECTION('',(9.874168470981E-15,-1.,-3.491481338843E-15)); +#22328 = ORIENTED_EDGE('',*,*,#22329,.F.); +#22329 = EDGE_CURVE('',#22330,#22322,#22332,.T.); +#22330 = VERTEX_POINT('',#22331); +#22331 = CARTESIAN_POINT('',(-2.050025372385,0.634963209963, + 0.350000019118)); +#22332 = LINE('',#22333,#22334); +#22333 = CARTESIAN_POINT('',(-2.050025372385,0.634963209963, + 0.100000022492)); +#22334 = VECTOR('',#22335,1.); +#22335 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22336 = ORIENTED_EDGE('',*,*,#22337,.F.); +#22337 = EDGE_CURVE('',#22312,#22330,#22338,.T.); +#22338 = LINE('',#22339,#22340); +#22339 = CARTESIAN_POINT('',(-2.050025372385,0.934963205914, + 0.350000019118)); +#22340 = VECTOR('',#22341,1.); +#22341 = DIRECTION('',(9.874168470981E-15,-1.,-3.491481338843E-15)); +#22342 = PLANE('',#22343); +#22343 = AXIS2_PLACEMENT_3D('',#22344,#22345,#22346); +#22344 = CARTESIAN_POINT('',(-2.050025372385,0.934963205914, + 0.100000022492)); +#22345 = DIRECTION('',(-1.,-9.874168470981E-15,-1.009459107404E-29)); +#22346 = DIRECTION('',(-9.874168470981E-15,1.,0.)); +#22347 = ADVANCED_FACE('',(#22348),#22382,.F.); +#22348 = FACE_BOUND('',#22349,.T.); +#22349 = EDGE_LOOP('',(#22350,#22360,#22368,#22376)); +#22350 = ORIENTED_EDGE('',*,*,#22351,.T.); +#22351 = EDGE_CURVE('',#22352,#22354,#22356,.T.); +#22352 = VERTEX_POINT('',#22353); +#22353 = CARTESIAN_POINT('',(-1.700025377109,0.634963209963, + 0.350000019118)); +#22354 = VERTEX_POINT('',#22355); +#22355 = CARTESIAN_POINT('',(-1.700025377109,0.634963209963, + 3.599999975258)); +#22356 = LINE('',#22357,#22358); +#22357 = CARTESIAN_POINT('',(-1.700025377109,0.634963209963, + 0.100000022492)); +#22358 = VECTOR('',#22359,1.); +#22359 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22360 = ORIENTED_EDGE('',*,*,#22361,.T.); +#22361 = EDGE_CURVE('',#22354,#22362,#22364,.T.); +#22362 = VERTEX_POINT('',#22363); +#22363 = CARTESIAN_POINT('',(-1.700025377109,0.934963205914, + 3.599999975258)); +#22364 = LINE('',#22365,#22366); +#22365 = CARTESIAN_POINT('',(-1.700025377109,0.934963205914, + 3.599999975258)); +#22366 = VECTOR('',#22367,1.); +#22367 = DIRECTION('',(-4.091756884392E-15,1.,3.491481338843E-15)); +#22368 = ORIENTED_EDGE('',*,*,#22369,.F.); +#22369 = EDGE_CURVE('',#22370,#22362,#22372,.T.); +#22370 = VERTEX_POINT('',#22371); +#22371 = CARTESIAN_POINT('',(-1.700025377109,0.934963205914, + 0.350000019118)); +#22372 = LINE('',#22373,#22374); +#22373 = CARTESIAN_POINT('',(-1.700025377109,0.934963205914, + 0.100000022492)); +#22374 = VECTOR('',#22375,1.); +#22375 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22376 = ORIENTED_EDGE('',*,*,#22377,.F.); +#22377 = EDGE_CURVE('',#22352,#22370,#22378,.T.); +#22378 = LINE('',#22379,#22380); +#22379 = CARTESIAN_POINT('',(-1.700025377109,0.934963205914, + 0.350000019118)); +#22380 = VECTOR('',#22381,1.); +#22381 = DIRECTION('',(-4.091756884392E-15,1.,3.491481338843E-15)); +#22382 = PLANE('',#22383); +#22383 = AXIS2_PLACEMENT_3D('',#22384,#22385,#22386); +#22384 = CARTESIAN_POINT('',(-1.700025377109,0.934963205914, + 0.100000022492)); +#22385 = DIRECTION('',(1.,4.091756884392E-15,-1.009459107404E-29)); +#22386 = DIRECTION('',(-4.091756884392E-15,1.,0.)); +#22387 = ADVANCED_FACE('',(#22388),#22422,.F.); +#22388 = FACE_BOUND('',#22389,.T.); +#22389 = EDGE_LOOP('',(#22390,#22400,#22408,#22416)); +#22390 = ORIENTED_EDGE('',*,*,#22391,.T.); +#22391 = EDGE_CURVE('',#22392,#22394,#22396,.T.); +#22392 = VERTEX_POINT('',#22393); +#22393 = CARTESIAN_POINT('',(-2.950025360239,0.634963209963, + 0.350000019118)); +#22394 = VERTEX_POINT('',#22395); +#22395 = CARTESIAN_POINT('',(-2.950025360239,0.634963209963, + 3.599999975258)); +#22396 = LINE('',#22397,#22398); +#22397 = CARTESIAN_POINT('',(-2.950025360239,0.634963209963, + 0.100000022492)); +#22398 = VECTOR('',#22399,1.); +#22399 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22400 = ORIENTED_EDGE('',*,*,#22401,.T.); +#22401 = EDGE_CURVE('',#22394,#22402,#22404,.T.); +#22402 = VERTEX_POINT('',#22403); +#22403 = CARTESIAN_POINT('',(-2.950025360239,0.934963205914, + 3.599999975258)); +#22404 = LINE('',#22405,#22406); +#22405 = CARTESIAN_POINT('',(-2.950025360239,0.934963205914, + 3.599999975258)); +#22406 = VECTOR('',#22407,1.); +#22407 = DIRECTION('',(-4.091756884392E-15,1.,3.491481338843E-15)); +#22408 = ORIENTED_EDGE('',*,*,#22409,.F.); +#22409 = EDGE_CURVE('',#22410,#22402,#22412,.T.); +#22410 = VERTEX_POINT('',#22411); +#22411 = CARTESIAN_POINT('',(-2.950025360239,0.934963205914, + 0.350000019118)); +#22412 = LINE('',#22413,#22414); +#22413 = CARTESIAN_POINT('',(-2.950025360239,0.934963205914, + 0.100000022492)); +#22414 = VECTOR('',#22415,1.); +#22415 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22416 = ORIENTED_EDGE('',*,*,#22417,.F.); +#22417 = EDGE_CURVE('',#22392,#22410,#22418,.T.); +#22418 = LINE('',#22419,#22420); +#22419 = CARTESIAN_POINT('',(-2.950025360239,0.934963205914, + 0.350000019118)); +#22420 = VECTOR('',#22421,1.); +#22421 = DIRECTION('',(-4.091756884392E-15,1.,3.491481338843E-15)); +#22422 = PLANE('',#22423); +#22423 = AXIS2_PLACEMENT_3D('',#22424,#22425,#22426); +#22424 = CARTESIAN_POINT('',(-2.950025360239,0.934963205914, + 0.100000022492)); +#22425 = DIRECTION('',(1.,4.091756884392E-15,-1.009459107404E-29)); +#22426 = DIRECTION('',(-4.091756884392E-15,1.,0.)); +#22427 = ADVANCED_FACE('',(#22428),#22462,.F.); +#22428 = FACE_BOUND('',#22429,.T.); +#22429 = EDGE_LOOP('',(#22430,#22440,#22448,#22456)); +#22430 = ORIENTED_EDGE('',*,*,#22431,.T.); +#22431 = EDGE_CURVE('',#22432,#22434,#22436,.T.); +#22432 = VERTEX_POINT('',#22433); +#22433 = CARTESIAN_POINT('',(-4.550025338647,0.934963205914, + 0.350000019118)); +#22434 = VERTEX_POINT('',#22435); +#22435 = CARTESIAN_POINT('',(-4.550025338647,0.934963205914, + 3.599999975258)); +#22436 = LINE('',#22437,#22438); +#22437 = CARTESIAN_POINT('',(-4.550025338647,0.934963205914, + 0.100000022492)); +#22438 = VECTOR('',#22439,1.); +#22439 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22440 = ORIENTED_EDGE('',*,*,#22441,.T.); +#22441 = EDGE_CURVE('',#22434,#22442,#22444,.T.); +#22442 = VERTEX_POINT('',#22443); +#22443 = CARTESIAN_POINT('',(-4.550025338647,0.634963209963, + 3.599999975258)); +#22444 = LINE('',#22445,#22446); +#22445 = CARTESIAN_POINT('',(-4.550025338647,0.934963205914, + 3.599999975258)); +#22446 = VECTOR('',#22447,1.); +#22447 = DIRECTION('',(9.874168470981E-15,-1.,-3.491481338843E-15)); +#22448 = ORIENTED_EDGE('',*,*,#22449,.F.); +#22449 = EDGE_CURVE('',#22450,#22442,#22452,.T.); +#22450 = VERTEX_POINT('',#22451); +#22451 = CARTESIAN_POINT('',(-4.550025338647,0.634963209963, + 0.350000019118)); +#22452 = LINE('',#22453,#22454); +#22453 = CARTESIAN_POINT('',(-4.550025338647,0.634963209963, + 0.100000022492)); +#22454 = VECTOR('',#22455,1.); +#22455 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22456 = ORIENTED_EDGE('',*,*,#22457,.F.); +#22457 = EDGE_CURVE('',#22432,#22450,#22458,.T.); +#22458 = LINE('',#22459,#22460); +#22459 = CARTESIAN_POINT('',(-4.550025338647,0.934963205914, + 0.350000019118)); +#22460 = VECTOR('',#22461,1.); +#22461 = DIRECTION('',(9.874168470981E-15,-1.,-3.491481338843E-15)); +#22462 = PLANE('',#22463); +#22463 = AXIS2_PLACEMENT_3D('',#22464,#22465,#22466); +#22464 = CARTESIAN_POINT('',(-4.550025338647,0.934963205914, + 0.100000022492)); +#22465 = DIRECTION('',(-1.,-9.874168470981E-15,-1.009459107404E-29)); +#22466 = DIRECTION('',(-9.874168470981E-15,1.,0.)); +#22467 = ADVANCED_FACE('',(#22468),#22502,.F.); +#22468 = FACE_BOUND('',#22469,.T.); +#22469 = EDGE_LOOP('',(#22470,#22480,#22488,#22496)); +#22470 = ORIENTED_EDGE('',*,*,#22471,.T.); +#22471 = EDGE_CURVE('',#22472,#22474,#22476,.T.); +#22472 = VERTEX_POINT('',#22473); +#22473 = CARTESIAN_POINT('',(-6.050025318404,-3.365036736056, + 2.299999992802)); +#22474 = VERTEX_POINT('',#22475); +#22475 = CARTESIAN_POINT('',(-6.050025318404,-3.365036736056, + 1.500000003599)); +#22476 = LINE('',#22477,#22478); +#22477 = CARTESIAN_POINT('',(-6.050025318404,-3.365036736056, + 3.099999982006)); +#22478 = VECTOR('',#22479,1.); +#22479 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22480 = ORIENTED_EDGE('',*,*,#22481,.F.); +#22481 = EDGE_CURVE('',#22482,#22474,#22484,.T.); +#22482 = VERTEX_POINT('',#22483); +#22483 = CARTESIAN_POINT('',(-6.050025318404,-0.465036775192, + 1.500000003599)); +#22484 = LINE('',#22485,#22486); +#22485 = CARTESIAN_POINT('',(-6.050025318404,11.661380504079, + 1.500000003599)); +#22486 = VECTOR('',#22487,1.); +#22487 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22488 = ORIENTED_EDGE('',*,*,#22489,.F.); +#22489 = EDGE_CURVE('',#22490,#22482,#22492,.T.); +#22490 = VERTEX_POINT('',#22491); +#22491 = CARTESIAN_POINT('',(-6.050025318404,-0.465036775192, + 2.299999992802)); +#22492 = LINE('',#22493,#22494); +#22493 = CARTESIAN_POINT('',(-6.050025318404,-0.465036775192, + 2.299999992802)); +#22494 = VECTOR('',#22495,1.); +#22495 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22496 = ORIENTED_EDGE('',*,*,#22497,.T.); +#22497 = EDGE_CURVE('',#22490,#22472,#22498,.T.); +#22498 = LINE('',#22499,#22500); +#22499 = CARTESIAN_POINT('',(-6.050025318404,11.661380504079, + 2.299999992802)); +#22500 = VECTOR('',#22501,1.); +#22501 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22502 = PLANE('',#22503); +#22503 = AXIS2_PLACEMENT_3D('',#22504,#22505,#22506); +#22504 = CARTESIAN_POINT('',(-6.050025318404,11.661380504079, + 2.299999992802)); +#22505 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22506 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#22507 = ADVANCED_FACE('',(#22508),#22533,.F.); +#22508 = FACE_BOUND('',#22509,.T.); +#22509 = EDGE_LOOP('',(#22510,#22518,#22519,#22527)); +#22510 = ORIENTED_EDGE('',*,*,#22511,.T.); +#22511 = EDGE_CURVE('',#22512,#22472,#22514,.T.); +#22512 = VERTEX_POINT('',#22513); +#22513 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 2.299999992802)); +#22514 = LINE('',#22515,#22516); +#22515 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 2.299999992802)); +#22516 = VECTOR('',#22517,1.); +#22517 = DIRECTION('',(-0.707106781187,-0.707106781187, + -2.46885013108E-15)); +#22518 = ORIENTED_EDGE('',*,*,#22497,.F.); +#22519 = ORIENTED_EDGE('',*,*,#22520,.F.); +#22520 = EDGE_CURVE('',#22521,#22490,#22523,.T.); +#22521 = VERTEX_POINT('',#22522); +#22522 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 2.299999992802)); +#22523 = LINE('',#22524,#22525); +#22524 = CARTESIAN_POINT('',(6.049974518302,-0.465036775192, + 2.299999992802)); +#22525 = VECTOR('',#22526,1.); +#22526 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22527 = ORIENTED_EDGE('',*,*,#22528,.F.); +#22528 = EDGE_CURVE('',#22512,#22521,#22529,.T.); +#22529 = LINE('',#22530,#22531); +#22530 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 2.299999992802)); +#22531 = VECTOR('',#22532,1.); +#22532 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#22533 = PLANE('',#22534); +#22534 = AXIS2_PLACEMENT_3D('',#22535,#22536,#22537); +#22535 = CARTESIAN_POINT('',(6.049974518302,11.661380504079, + 2.299999992802)); +#22536 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22537 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#22538 = ADVANCED_FACE('',(#22539),#22564,.F.); +#22539 = FACE_BOUND('',#22540,.T.); +#22540 = EDGE_LOOP('',(#22541,#22549,#22550,#22558)); +#22541 = ORIENTED_EDGE('',*,*,#22542,.F.); +#22542 = EDGE_CURVE('',#22482,#22543,#22545,.T.); +#22543 = VERTEX_POINT('',#22544); +#22544 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 1.500000003599)); +#22545 = LINE('',#22546,#22547); +#22546 = CARTESIAN_POINT('',(6.049974518302,-0.465036775192, + 1.500000003599)); +#22547 = VECTOR('',#22548,1.); +#22548 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22549 = ORIENTED_EDGE('',*,*,#22481,.T.); +#22550 = ORIENTED_EDGE('',*,*,#22551,.T.); +#22551 = EDGE_CURVE('',#22474,#22552,#22554,.T.); +#22552 = VERTEX_POINT('',#22553); +#22553 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 1.500000003599)); +#22554 = LINE('',#22555,#22556); +#22555 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 1.500000003599)); +#22556 = VECTOR('',#22557,1.); +#22557 = DIRECTION('',(0.707106781187,0.707106781187,2.46885013108E-15) + ); +#22558 = ORIENTED_EDGE('',*,*,#22559,.F.); +#22559 = EDGE_CURVE('',#22543,#22552,#22560,.T.); +#22560 = LINE('',#22561,#22562); +#22561 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 1.500000003599)); +#22562 = VECTOR('',#22563,1.); +#22563 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22564 = PLANE('',#22565); +#22565 = AXIS2_PLACEMENT_3D('',#22566,#22567,#22568); +#22566 = CARTESIAN_POINT('',(6.049974518302,11.661380504079, + 1.500000003599)); +#22567 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22568 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#22569 = ADVANCED_FACE('',(#22570),#22595,.T.); +#22570 = FACE_BOUND('',#22571,.T.); +#22571 = EDGE_LOOP('',(#22572,#22580,#22581,#22589)); +#22572 = ORIENTED_EDGE('',*,*,#22573,.F.); +#22573 = EDGE_CURVE('',#18280,#22574,#22576,.T.); +#22574 = VERTEX_POINT('',#22575); +#22575 = CARTESIAN_POINT('',(-5.550025325151,-1.415036762372, + 3.099999982006)); +#22576 = LINE('',#22577,#22578); +#22577 = CARTESIAN_POINT('',(-5.550025325151,-1.415036762372, + 3.099999982006)); +#22578 = VECTOR('',#22579,1.); +#22579 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22580 = ORIENTED_EDGE('',*,*,#18279,.T.); +#22581 = ORIENTED_EDGE('',*,*,#22582,.F.); +#22582 = EDGE_CURVE('',#22583,#18272,#22585,.T.); +#22583 = VERTEX_POINT('',#22584); +#22584 = CARTESIAN_POINT('',(-5.550025325151,-1.715036758323, + 3.399999977958)); +#22585 = LINE('',#22586,#22587); +#22586 = CARTESIAN_POINT('',(5.54997452505,-1.715036758323, + 3.399999977958)); +#22587 = VECTOR('',#22588,1.); +#22588 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22589 = ORIENTED_EDGE('',*,*,#22590,.F.); +#22590 = EDGE_CURVE('',#22574,#22583,#22591,.T.); +#22591 = LINE('',#22592,#22593); +#22592 = CARTESIAN_POINT('',(-5.550025325151,-1.565036760348, + 3.249999979982)); +#22593 = VECTOR('',#22594,1.); +#22594 = DIRECTION('',(4.937700262162E-15,-0.707106781187,0.707106781187 + )); +#22595 = PLANE('',#22596); +#22596 = AXIS2_PLACEMENT_3D('',#22597,#22598,#22599); +#22597 = CARTESIAN_POINT('',(-2.54000507816E-05,-1.715036758323, + 3.399999977958)); +#22598 = DIRECTION('',(4.937700262161E-15,-0.707106781187, + -0.707106781187)); +#22599 = DIRECTION('',(0.,-0.707106781187,0.707106781187)); +#22600 = ADVANCED_FACE('',(#22601),#22619,.T.); +#22601 = FACE_BOUND('',#22602,.T.); +#22602 = EDGE_LOOP('',(#22603,#22604,#22605,#22613)); +#22603 = ORIENTED_EDGE('',*,*,#22582,.T.); +#22604 = ORIENTED_EDGE('',*,*,#18271,.F.); +#22605 = ORIENTED_EDGE('',*,*,#22606,.T.); +#22606 = EDGE_CURVE('',#18264,#22607,#22609,.T.); +#22607 = VERTEX_POINT('',#22608); +#22608 = CARTESIAN_POINT('',(-5.550025325151,-1.715036758323, + 3.599999975258)); +#22609 = LINE('',#22610,#22611); +#22610 = CARTESIAN_POINT('',(5.54997452505,-1.715036758323, + 3.599999975258)); +#22611 = VECTOR('',#22612,1.); +#22612 = DIRECTION('',(-1.,-6.982962677686E-15,-1.172110456741E-16)); +#22613 = ORIENTED_EDGE('',*,*,#22614,.T.); +#22614 = EDGE_CURVE('',#22607,#22583,#22615,.T.); +#22615 = LINE('',#22616,#22617); +#22616 = CARTESIAN_POINT('',(-5.550025325151,-1.715036758323, + 3.099999982006)); +#22617 = VECTOR('',#22618,1.); +#22618 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22619 = PLANE('',#22620); +#22620 = AXIS2_PLACEMENT_3D('',#22621,#22622,#22623); +#22621 = CARTESIAN_POINT('',(-2.54000507816E-05,-1.715036758323, + 1.849999998875)); +#22622 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22623 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#22624 = ADVANCED_FACE('',(#22625),#22651,.F.); +#22625 = FACE_BOUND('',#22626,.T.); +#22626 = EDGE_LOOP('',(#22627,#22637,#22643,#22644,#22645)); +#22627 = ORIENTED_EDGE('',*,*,#22628,.T.); +#22628 = EDGE_CURVE('',#22629,#22631,#22633,.T.); +#22629 = VERTEX_POINT('',#22630); +#22630 = CARTESIAN_POINT('',(-5.550025325151,-2.265036750901, + 3.599999975258)); +#22631 = VERTEX_POINT('',#22632); +#22632 = CARTESIAN_POINT('',(-5.550025325151,-2.265036750901, + 3.099999982006)); +#22633 = LINE('',#22634,#22635); +#22634 = CARTESIAN_POINT('',(-5.550025325151,-2.265036750901, + 3.099999982006)); +#22635 = VECTOR('',#22636,1.); +#22636 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22637 = ORIENTED_EDGE('',*,*,#22638,.F.); +#22638 = EDGE_CURVE('',#22574,#22631,#22639,.T.); +#22639 = LINE('',#22640,#22641); +#22640 = CARTESIAN_POINT('',(-5.550025325151,-1.715036758323, + 3.099999982006)); +#22641 = VECTOR('',#22642,1.); +#22642 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22643 = ORIENTED_EDGE('',*,*,#22590,.T.); +#22644 = ORIENTED_EDGE('',*,*,#22614,.F.); +#22645 = ORIENTED_EDGE('',*,*,#22646,.T.); +#22646 = EDGE_CURVE('',#22607,#22629,#22647,.T.); +#22647 = LINE('',#22648,#22649); +#22648 = CARTESIAN_POINT('',(-5.550025325151,-1.715036758323, + 3.599999975258)); +#22649 = VECTOR('',#22650,1.); +#22650 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22651 = PLANE('',#22652); +#22652 = AXIS2_PLACEMENT_3D('',#22653,#22654,#22655); +#22653 = CARTESIAN_POINT('',(-5.550025325151,-1.715036758323, + 3.099999982006)); +#22654 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22655 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#22656 = ADVANCED_FACE('',(#22657),#22690,.T.); +#22657 = FACE_BOUND('',#22658,.T.); +#22658 = EDGE_LOOP('',(#22659,#22660,#22668,#22676,#22684)); +#22659 = ORIENTED_EDGE('',*,*,#22628,.F.); +#22660 = ORIENTED_EDGE('',*,*,#22661,.T.); +#22661 = EDGE_CURVE('',#22629,#22662,#22664,.T.); +#22662 = VERTEX_POINT('',#22663); +#22663 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 3.599999975258)); +#22664 = LINE('',#22665,#22666); +#22665 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 3.599999975258)); +#22666 = VECTOR('',#22667,1.); +#22667 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22668 = ORIENTED_EDGE('',*,*,#22669,.T.); +#22669 = EDGE_CURVE('',#22662,#22670,#22672,.T.); +#22670 = VERTEX_POINT('',#22671); +#22671 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 3.099999982006)); +#22672 = LINE('',#22673,#22674); +#22673 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 3.099999982006)); +#22674 = VECTOR('',#22675,1.); +#22675 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22676 = ORIENTED_EDGE('',*,*,#22677,.T.); +#22677 = EDGE_CURVE('',#22670,#22678,#22680,.T.); +#22678 = VERTEX_POINT('',#22679); +#22679 = CARTESIAN_POINT('',(-5.950025319753,-2.265036750901, + 3.099999982006)); +#22680 = LINE('',#22681,#22682); +#22681 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 3.099999982006)); +#22682 = VECTOR('',#22683,1.); +#22683 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22684 = ORIENTED_EDGE('',*,*,#22685,.T.); +#22685 = EDGE_CURVE('',#22678,#22631,#22686,.T.); +#22686 = LINE('',#22687,#22688); +#22687 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 3.099999982006)); +#22688 = VECTOR('',#22689,1.); +#22689 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22690 = PLANE('',#22691); +#22691 = AXIS2_PLACEMENT_3D('',#22692,#22693,#22694); +#22692 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 1.849999998875)); +#22693 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22694 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#22695 = ADVANCED_FACE('',(#22696),#22729,.F.); +#22696 = FACE_BOUND('',#22697,.T.); +#22697 = EDGE_LOOP('',(#22698,#22699,#22707,#22715,#22723)); +#22698 = ORIENTED_EDGE('',*,*,#22677,.F.); +#22699 = ORIENTED_EDGE('',*,*,#22700,.T.); +#22700 = EDGE_CURVE('',#22670,#22701,#22703,.T.); +#22701 = VERTEX_POINT('',#22702); +#22702 = CARTESIAN_POINT('',(-6.500025312331,-3.465036734706, + 3.099999982006)); +#22703 = LINE('',#22704,#22705); +#22704 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 3.099999982006)); +#22705 = VECTOR('',#22706,1.); +#22706 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22707 = ORIENTED_EDGE('',*,*,#22708,.T.); +#22708 = EDGE_CURVE('',#22701,#22709,#22711,.T.); +#22709 = VERTEX_POINT('',#22710); +#22710 = CARTESIAN_POINT('',(-6.150025317054,-3.465036734706, + 3.099999982006)); +#22711 = LINE('',#22712,#22713); +#22712 = CARTESIAN_POINT('',(6.499974512229,-3.465036734706, + 3.099999982006)); +#22713 = VECTOR('',#22714,1.); +#22714 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22715 = ORIENTED_EDGE('',*,*,#22716,.T.); +#22716 = EDGE_CURVE('',#22709,#22717,#22719,.T.); +#22717 = VERTEX_POINT('',#22718); +#22718 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 3.099999982006)); +#22719 = LINE('',#22720,#22721); +#22720 = CARTESIAN_POINT('',(1.399974581056,4.084963163404, + 3.099999982006)); +#22721 = VECTOR('',#22722,1.); +#22722 = DIRECTION('',(0.707106781187,0.707106781187,2.46885013108E-15) + ); +#22723 = ORIENTED_EDGE('',*,*,#22724,.F.); +#22724 = EDGE_CURVE('',#22678,#22717,#22725,.T.); +#22725 = LINE('',#22726,#22727); +#22726 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 3.099999982006)); +#22727 = VECTOR('',#22728,1.); +#22728 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22729 = PLANE('',#22730); +#22730 = AXIS2_PLACEMENT_3D('',#22731,#22732,#22733); +#22731 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 3.099999982006)); +#22732 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22733 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#22734 = ADVANCED_FACE('',(#22735),#22769,.F.); +#22735 = FACE_BOUND('',#22736,.T.); +#22736 = EDGE_LOOP('',(#22737,#22747,#22755,#22763)); +#22737 = ORIENTED_EDGE('',*,*,#22738,.T.); +#22738 = EDGE_CURVE('',#22739,#22741,#22743,.T.); +#22739 = VERTEX_POINT('',#22740); +#22740 = CARTESIAN_POINT('',(-5.950025319753,-3.465036734706, + 0.350000019118)); +#22741 = VERTEX_POINT('',#22742); +#22742 = CARTESIAN_POINT('',(-5.950025319753,-3.465036734706, + 0.100000022492)); +#22743 = LINE('',#22744,#22745); +#22744 = CARTESIAN_POINT('',(-5.950025319753,-3.465036734706, + 0.100000022492)); +#22745 = VECTOR('',#22746,1.); +#22746 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22747 = ORIENTED_EDGE('',*,*,#22748,.F.); +#22748 = EDGE_CURVE('',#22749,#22741,#22751,.T.); +#22749 = VERTEX_POINT('',#22750); +#22750 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.100000022492)); +#22751 = LINE('',#22752,#22753); +#22752 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.100000022492)); +#22753 = VECTOR('',#22754,1.); +#22754 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22755 = ORIENTED_EDGE('',*,*,#22756,.F.); +#22756 = EDGE_CURVE('',#22757,#22749,#22759,.T.); +#22757 = VERTEX_POINT('',#22758); +#22758 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.350000019118)); +#22759 = LINE('',#22760,#22761); +#22760 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.100000022492)); +#22761 = VECTOR('',#22762,1.); +#22762 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22763 = ORIENTED_EDGE('',*,*,#22764,.T.); +#22764 = EDGE_CURVE('',#22757,#22739,#22765,.T.); +#22765 = LINE('',#22766,#22767); +#22766 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.350000019118)); +#22767 = VECTOR('',#22768,1.); +#22768 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22769 = PLANE('',#22770); +#22770 = AXIS2_PLACEMENT_3D('',#22771,#22772,#22773); +#22771 = CARTESIAN_POINT('',(-5.950025319753,0.934963205914, + 0.100000022492)); +#22772 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22773 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#22774 = ADVANCED_FACE('',(#22775),#22809,.F.); +#22775 = FACE_BOUND('',#22776,.T.); +#22776 = EDGE_LOOP('',(#22777,#22778,#22779,#22780,#22786,#22787,#22795, + #22803)); +#22777 = ORIENTED_EDGE('',*,*,#22551,.F.); +#22778 = ORIENTED_EDGE('',*,*,#22471,.F.); +#22779 = ORIENTED_EDGE('',*,*,#22511,.F.); +#22780 = ORIENTED_EDGE('',*,*,#22781,.F.); +#22781 = EDGE_CURVE('',#22717,#22512,#22782,.T.); +#22782 = LINE('',#22783,#22784); +#22783 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 3.099999982006)); +#22784 = VECTOR('',#22785,1.); +#22785 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22786 = ORIENTED_EDGE('',*,*,#22716,.F.); +#22787 = ORIENTED_EDGE('',*,*,#22788,.F.); +#22788 = EDGE_CURVE('',#22789,#22709,#22791,.T.); +#22789 = VERTEX_POINT('',#22790); +#22790 = CARTESIAN_POINT('',(-6.150025317054,-3.465036734706, + 0.550000016419)); +#22791 = LINE('',#22792,#22793); +#22792 = CARTESIAN_POINT('',(-6.150025317054,-3.465036734706, + 1.849999998875)); +#22793 = VECTOR('',#22794,1.); +#22794 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#22795 = ORIENTED_EDGE('',*,*,#22796,.F.); +#22796 = EDGE_CURVE('',#22797,#22789,#22799,.T.); +#22797 = VERTEX_POINT('',#22798); +#22798 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 0.75000001372)); +#22799 = LINE('',#22800,#22801); +#22800 = CARTESIAN_POINT('',(-5.166691996991,-2.481703414643, + 1.533333336482)); +#22801 = VECTOR('',#22802,1.); +#22802 = DIRECTION('',(-0.57735026919,-0.57735026919,-0.57735026919)); +#22803 = ORIENTED_EDGE('',*,*,#22804,.F.); +#22804 = EDGE_CURVE('',#22552,#22797,#22805,.T.); +#22805 = LINE('',#22806,#22807); +#22806 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 3.099999982006)); +#22807 = VECTOR('',#22808,1.); +#22808 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22809 = PLANE('',#22810); +#22810 = AXIS2_PLACEMENT_3D('',#22811,#22812,#22813); +#22811 = CARTESIAN_POINT('',(-5.950025319753,-3.265036737405, + 3.099999982006)); +#22812 = DIRECTION('',(-0.707106781187,0.707106781187,2.46885013108E-15) + ); +#22813 = DIRECTION('',(3.491481338841E-15,0.,1.)); +#22814 = ADVANCED_FACE('',(#22815),#22831,.F.); +#22815 = FACE_BOUND('',#22816,.T.); +#22816 = EDGE_LOOP('',(#22817,#22818,#22824,#22825)); +#22817 = ORIENTED_EDGE('',*,*,#21957,.F.); +#22818 = ORIENTED_EDGE('',*,*,#22819,.F.); +#22819 = EDGE_CURVE('',#22797,#21958,#22820,.T.); +#22820 = LINE('',#22821,#22822); +#22821 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 0.75000001372)); +#22822 = VECTOR('',#22823,1.); +#22823 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22824 = ORIENTED_EDGE('',*,*,#22796,.T.); +#22825 = ORIENTED_EDGE('',*,*,#22826,.F.); +#22826 = EDGE_CURVE('',#21960,#22789,#22827,.T.); +#22827 = LINE('',#22828,#22829); +#22828 = CARTESIAN_POINT('',(-2.540005076938E-05,-3.465036734706, + 0.550000016419)); +#22829 = VECTOR('',#22830,1.); +#22830 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22831 = PLANE('',#22832); +#22832 = AXIS2_PLACEMENT_3D('',#22833,#22834,#22835); +#22833 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 0.75000001372)); +#22834 = DIRECTION('',(-4.937700262162E-15,0.707106781187, + -0.707106781187)); +#22835 = DIRECTION('',(-1.,-3.944304526105E-31,6.982962677682E-15)); +#22836 = ADVANCED_FACE('',(#22837,#22843,#22849,#22855,#22861,#22908, + #22914,#22920,#22926),#22932,.F.); +#22837 = FACE_BOUND('',#22838,.T.); +#22838 = EDGE_LOOP('',(#22839,#22840,#22841,#22842)); +#22839 = ORIENTED_EDGE('',*,*,#17604,.F.); +#22840 = ORIENTED_EDGE('',*,*,#17549,.T.); +#22841 = ORIENTED_EDGE('',*,*,#17621,.T.); +#22842 = ORIENTED_EDGE('',*,*,#17580,.F.); +#22843 = FACE_BOUND('',#22844,.T.); +#22844 = EDGE_LOOP('',(#22845,#22846,#22847,#22848)); +#22845 = ORIENTED_EDGE('',*,*,#16911,.F.); +#22846 = ORIENTED_EDGE('',*,*,#16856,.T.); +#22847 = ORIENTED_EDGE('',*,*,#16928,.T.); +#22848 = ORIENTED_EDGE('',*,*,#16887,.F.); +#22849 = FACE_BOUND('',#22850,.T.); +#22850 = EDGE_LOOP('',(#22851,#22852,#22853,#22854)); +#22851 = ORIENTED_EDGE('',*,*,#16342,.F.); +#22852 = ORIENTED_EDGE('',*,*,#16287,.T.); +#22853 = ORIENTED_EDGE('',*,*,#16359,.T.); +#22854 = ORIENTED_EDGE('',*,*,#16318,.F.); +#22855 = FACE_BOUND('',#22856,.T.); +#22856 = EDGE_LOOP('',(#22857,#22858,#22859,#22860)); +#22857 = ORIENTED_EDGE('',*,*,#15789,.F.); +#22858 = ORIENTED_EDGE('',*,*,#15734,.T.); +#22859 = ORIENTED_EDGE('',*,*,#15806,.T.); +#22860 = ORIENTED_EDGE('',*,*,#15765,.F.); +#22861 = FACE_BOUND('',#22862,.T.); +#22862 = EDGE_LOOP('',(#22863,#22869,#22870,#22871,#22872,#22873,#22874, + #22875,#22876,#22884,#22890,#22891,#22892,#22893,#22901,#22907)); +#22863 = ORIENTED_EDGE('',*,*,#22864,.T.); +#22864 = EDGE_CURVE('',#22116,#17796,#22865,.T.); +#22865 = LINE('',#22866,#22867); +#22866 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 0.75000001372)); +#22867 = VECTOR('',#22868,1.); +#22868 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22869 = ORIENTED_EDGE('',*,*,#17795,.T.); +#22870 = ORIENTED_EDGE('',*,*,#18908,.F.); +#22871 = ORIENTED_EDGE('',*,*,#18751,.F.); +#22872 = ORIENTED_EDGE('',*,*,#18222,.F.); +#22873 = ORIENTED_EDGE('',*,*,#18169,.F.); +#22874 = ORIENTED_EDGE('',*,*,#18207,.F.); +#22875 = ORIENTED_EDGE('',*,*,#18491,.F.); +#22876 = ORIENTED_EDGE('',*,*,#22877,.T.); +#22877 = EDGE_CURVE('',#18484,#22878,#22880,.T.); +#22878 = VERTEX_POINT('',#22879); +#22879 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 3.099999982006)); +#22880 = LINE('',#22881,#22882); +#22881 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 3.099999982006)); +#22882 = VECTOR('',#22883,1.); +#22883 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22884 = ORIENTED_EDGE('',*,*,#22885,.T.); +#22885 = EDGE_CURVE('',#22878,#22521,#22886,.T.); +#22886 = LINE('',#22887,#22888); +#22887 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 3.099999982006)); +#22888 = VECTOR('',#22889,1.); +#22889 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22890 = ORIENTED_EDGE('',*,*,#22520,.T.); +#22891 = ORIENTED_EDGE('',*,*,#22489,.T.); +#22892 = ORIENTED_EDGE('',*,*,#22542,.T.); +#22893 = ORIENTED_EDGE('',*,*,#22894,.T.); +#22894 = EDGE_CURVE('',#22543,#22895,#22897,.T.); +#22895 = VERTEX_POINT('',#22896); +#22896 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 0.75000001372)); +#22897 = LINE('',#22898,#22899); +#22898 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 3.099999982006)); +#22899 = VECTOR('',#22900,1.); +#22900 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22901 = ORIENTED_EDGE('',*,*,#22902,.T.); +#22902 = EDGE_CURVE('',#22895,#22118,#22903,.T.); +#22903 = LINE('',#22904,#22905); +#22904 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 0.75000001372)); +#22905 = VECTOR('',#22906,1.); +#22906 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22907 = ORIENTED_EDGE('',*,*,#22115,.F.); +#22908 = FACE_BOUND('',#22909,.T.); +#22909 = EDGE_LOOP('',(#22910,#22911,#22912,#22913)); +#22910 = ORIENTED_EDGE('',*,*,#21926,.T.); +#22911 = ORIENTED_EDGE('',*,*,#21909,.T.); +#22912 = ORIENTED_EDGE('',*,*,#21943,.F.); +#22913 = ORIENTED_EDGE('',*,*,#21878,.F.); +#22914 = FACE_BOUND('',#22915,.T.); +#22915 = EDGE_LOOP('',(#22916,#22917,#22918,#22919)); +#22916 = ORIENTED_EDGE('',*,*,#21233,.T.); +#22917 = ORIENTED_EDGE('',*,*,#21216,.T.); +#22918 = ORIENTED_EDGE('',*,*,#21250,.F.); +#22919 = ORIENTED_EDGE('',*,*,#21185,.F.); +#22920 = FACE_BOUND('',#22921,.T.); +#22921 = EDGE_LOOP('',(#22922,#22923,#22924,#22925)); +#22922 = ORIENTED_EDGE('',*,*,#20664,.T.); +#22923 = ORIENTED_EDGE('',*,*,#20647,.T.); +#22924 = ORIENTED_EDGE('',*,*,#20681,.F.); +#22925 = ORIENTED_EDGE('',*,*,#20616,.F.); +#22926 = FACE_BOUND('',#22927,.T.); +#22927 = EDGE_LOOP('',(#22928,#22929,#22930,#22931)); +#22928 = ORIENTED_EDGE('',*,*,#20111,.T.); +#22929 = ORIENTED_EDGE('',*,*,#20094,.T.); +#22930 = ORIENTED_EDGE('',*,*,#20128,.F.); +#22931 = ORIENTED_EDGE('',*,*,#20063,.F.); +#22932 = PLANE('',#22933); +#22933 = AXIS2_PLACEMENT_3D('',#22934,#22935,#22936); +#22934 = CARTESIAN_POINT('',(-2.540005079033E-05,-0.465036775192, + 1.849999998875)); +#22935 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#22936 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22937 = ADVANCED_FACE('',(#22938),#22953,.F.); +#22938 = FACE_BOUND('',#22939,.T.); +#22939 = EDGE_LOOP('',(#22940,#22946,#22947,#22948,#22949,#22950,#22951, + #22952)); +#22940 = ORIENTED_EDGE('',*,*,#22941,.T.); +#22941 = EDGE_CURVE('',#22008,#17688,#22942,.T.); +#22942 = LINE('',#22943,#22944); +#22943 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 0.75000001372)); +#22944 = VECTOR('',#22945,1.); +#22945 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#22946 = ORIENTED_EDGE('',*,*,#17685,.F.); +#22947 = ORIENTED_EDGE('',*,*,#17764,.T.); +#22948 = ORIENTED_EDGE('',*,*,#17873,.T.); +#22949 = ORIENTED_EDGE('',*,*,#22864,.F.); +#22950 = ORIENTED_EDGE('',*,*,#22192,.F.); +#22951 = ORIENTED_EDGE('',*,*,#22084,.F.); +#22952 = ORIENTED_EDGE('',*,*,#22005,.T.); +#22953 = PLANE('',#22954); +#22954 = AXIS2_PLACEMENT_3D('',#22955,#22956,#22957); +#22955 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 0.75000001372)); +#22956 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#22957 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#22958 = ADVANCED_FACE('',(#22959),#22971,.F.); +#22959 = FACE_BOUND('',#22960,.T.); +#22960 = EDGE_LOOP('',(#22961,#22962,#22963,#22964,#22970)); +#22961 = ORIENTED_EDGE('',*,*,#22781,.T.); +#22962 = ORIENTED_EDGE('',*,*,#22528,.T.); +#22963 = ORIENTED_EDGE('',*,*,#22885,.F.); +#22964 = ORIENTED_EDGE('',*,*,#22965,.T.); +#22965 = EDGE_CURVE('',#22878,#22678,#22966,.T.); +#22966 = LINE('',#22967,#22968); +#22967 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 3.099999982006)); +#22968 = VECTOR('',#22969,1.); +#22969 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#22970 = ORIENTED_EDGE('',*,*,#22724,.T.); +#22971 = PLANE('',#22972); +#22972 = AXIS2_PLACEMENT_3D('',#22973,#22974,#22975); +#22973 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 3.099999982006)); +#22974 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#22975 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#22976 = ADVANCED_FACE('',(#22977),#23011,.T.); +#22977 = FACE_BOUND('',#22978,.T.); +#22978 = EDGE_LOOP('',(#22979,#22989,#22997,#23005)); +#22979 = ORIENTED_EDGE('',*,*,#22980,.F.); +#22980 = EDGE_CURVE('',#22981,#22983,#22985,.T.); +#22981 = VERTEX_POINT('',#22982); +#22982 = CARTESIAN_POINT('',(-7.100025304234,0.484963211987, + 2.699999987404)); +#22983 = VERTEX_POINT('',#22984); +#22984 = CARTESIAN_POINT('',(-7.500025298835,8.496321738507E-02, + 2.699999987404)); +#22985 = LINE('',#22986,#22987); +#22986 = CARTESIAN_POINT('',(-6.575025311319,1.009963204902, + 2.699999987404)); +#22987 = VECTOR('',#22988,1.); +#22988 = DIRECTION('',(-0.707106781187,-0.707106781187, + -2.46885013108E-15)); +#22989 = ORIENTED_EDGE('',*,*,#22990,.F.); +#22990 = EDGE_CURVE('',#22991,#22981,#22993,.T.); +#22991 = VERTEX_POINT('',#22992); +#22992 = CARTESIAN_POINT('',(-7.100025304234,0.484963211987, + 0.250000020468)); +#22993 = LINE('',#22994,#22995); +#22994 = CARTESIAN_POINT('',(-7.100025304234,0.484963211987, + 2.699999987404)); +#22995 = VECTOR('',#22996,1.); +#22996 = DIRECTION('',(2.515342911424E-29,-3.602114213587E-15,1.)); +#22997 = ORIENTED_EDGE('',*,*,#22998,.F.); +#22998 = EDGE_CURVE('',#22999,#22991,#23001,.T.); +#22999 = VERTEX_POINT('',#23000); +#23000 = CARTESIAN_POINT('',(-7.500025298835,8.496321738508E-02, + 0.250000020468)); +#23001 = LINE('',#23002,#23003); +#23002 = CARTESIAN_POINT('',(-7.075025304571,0.50996321165, + 0.250000020468)); +#23003 = VECTOR('',#23004,1.); +#23004 = DIRECTION('',(0.707106781187,0.707106781187,2.46885013108E-15) + ); +#23005 = ORIENTED_EDGE('',*,*,#23006,.F.); +#23006 = EDGE_CURVE('',#22983,#22999,#23007,.T.); +#23007 = LINE('',#23008,#23009); +#23008 = CARTESIAN_POINT('',(-7.500025298835,8.496321738508E-02, + 0.250000020468)); +#23009 = VECTOR('',#23010,1.); +#23010 = DIRECTION('',(-2.515342911424E-29,3.602114213587E-15,-1.)); +#23011 = PLANE('',#23012); +#23012 = AXIS2_PLACEMENT_3D('',#23013,#23014,#23015); +#23013 = CARTESIAN_POINT('',(-7.500025298835,8.496321738507E-02, + 3.599999975258)); +#23014 = DIRECTION('',(-0.707106781187,0.707106781187,2.547079387034E-15 + )); +#23015 = DIRECTION('',(3.602114213585E-15,0.,1.)); +#23016 = ADVANCED_FACE('',(#23017),#23042,.T.); +#23017 = FACE_BOUND('',#23018,.T.); +#23018 = EDGE_LOOP('',(#23019,#23027,#23028,#23036)); +#23019 = ORIENTED_EDGE('',*,*,#23020,.T.); +#23020 = EDGE_CURVE('',#23021,#22991,#23023,.T.); +#23021 = VERTEX_POINT('',#23022); +#23022 = CARTESIAN_POINT('',(-6.500025312331,0.484963211987, + 0.250000020468)); +#23023 = LINE('',#23024,#23025); +#23024 = CARTESIAN_POINT('',(-6.500025312331,0.484963211987, + 0.250000020468)); +#23025 = VECTOR('',#23026,1.); +#23026 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23027 = ORIENTED_EDGE('',*,*,#22990,.T.); +#23028 = ORIENTED_EDGE('',*,*,#23029,.F.); +#23029 = EDGE_CURVE('',#23030,#22981,#23032,.T.); +#23030 = VERTEX_POINT('',#23031); +#23031 = CARTESIAN_POINT('',(-6.500025312331,0.484963211987, + 2.699999987404)); +#23032 = LINE('',#23033,#23034); +#23033 = CARTESIAN_POINT('',(-6.500025312331,0.484963211987, + 2.699999987404)); +#23034 = VECTOR('',#23035,1.); +#23035 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23036 = ORIENTED_EDGE('',*,*,#23037,.T.); +#23037 = EDGE_CURVE('',#23030,#23021,#23038,.T.); +#23038 = LINE('',#23039,#23040); +#23039 = CARTESIAN_POINT('',(-6.500025312331,0.484963211987, + 0.250000020468)); +#23040 = VECTOR('',#23041,1.); +#23041 = DIRECTION('',(-2.515342911424E-29,3.602114213587E-15,-1.)); +#23042 = PLANE('',#23043); +#23043 = AXIS2_PLACEMENT_3D('',#23044,#23045,#23046); +#23044 = CARTESIAN_POINT('',(-6.500025312331,0.484963211987, + 0.250000020468)); +#23045 = DIRECTION('',(-6.982962677686E-15,1.,3.602114213587E-15)); +#23046 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23047 = ADVANCED_FACE('',(#23048,#23064),#23098,.T.); +#23048 = FACE_BOUND('',#23049,.T.); +#23049 = EDGE_LOOP('',(#23050,#23051,#23057,#23058)); +#23050 = ORIENTED_EDGE('',*,*,#23037,.F.); +#23051 = ORIENTED_EDGE('',*,*,#23052,.T.); +#23052 = EDGE_CURVE('',#23030,#19101,#23053,.T.); +#23053 = LINE('',#23054,#23055); +#23054 = CARTESIAN_POINT('',(-6.500025312331,0.934963205914, + 2.699999987404)); +#23055 = VECTOR('',#23056,1.); +#23056 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23057 = ORIENTED_EDGE('',*,*,#19100,.F.); +#23058 = ORIENTED_EDGE('',*,*,#23059,.F.); +#23059 = EDGE_CURVE('',#23021,#19093,#23060,.T.); +#23060 = LINE('',#23061,#23062); +#23061 = CARTESIAN_POINT('',(-6.500025312331,0.934963205914, + 0.250000020468)); +#23062 = VECTOR('',#23063,1.); +#23063 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23064 = FACE_BOUND('',#23065,.T.); +#23065 = EDGE_LOOP('',(#23066,#23067,#23068,#23076,#23084,#23092)); +#23066 = ORIENTED_EDGE('',*,*,#22700,.F.); +#23067 = ORIENTED_EDGE('',*,*,#22669,.F.); +#23068 = ORIENTED_EDGE('',*,*,#23069,.F.); +#23069 = EDGE_CURVE('',#23070,#22662,#23072,.T.); +#23070 = VERTEX_POINT('',#23071); +#23071 = CARTESIAN_POINT('',(-6.500025312331,0.934963205914, + 3.599999975258)); +#23072 = LINE('',#23073,#23074); +#23073 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 3.599999975258)); +#23074 = VECTOR('',#23075,1.); +#23075 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23076 = ORIENTED_EDGE('',*,*,#23077,.T.); +#23077 = EDGE_CURVE('',#23070,#23078,#23080,.T.); +#23078 = VERTEX_POINT('',#23079); +#23079 = CARTESIAN_POINT('',(-6.500025312331,0.934963205914, + 0.100000022492)); +#23080 = LINE('',#23081,#23082); +#23081 = CARTESIAN_POINT('',(-6.500025312331,0.934963205914, + 0.100000022492)); +#23082 = VECTOR('',#23083,1.); +#23083 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23084 = ORIENTED_EDGE('',*,*,#23085,.T.); +#23085 = EDGE_CURVE('',#23078,#23086,#23088,.T.); +#23086 = VERTEX_POINT('',#23087); +#23087 = CARTESIAN_POINT('',(-6.500025312331,-3.465036734706, + 0.100000022492)); +#23088 = LINE('',#23089,#23090); +#23089 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 0.100000022492)); +#23090 = VECTOR('',#23091,1.); +#23091 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23092 = ORIENTED_EDGE('',*,*,#23093,.F.); +#23093 = EDGE_CURVE('',#22701,#23086,#23094,.T.); +#23094 = LINE('',#23095,#23096); +#23095 = CARTESIAN_POINT('',(-6.500025312331,-3.465036734706, + 0.100000022492)); +#23096 = VECTOR('',#23097,1.); +#23097 = DIRECTION('',(-2.478176394253E-16,3.491481338843E-15,-1.)); +#23098 = PLANE('',#23099); +#23099 = AXIS2_PLACEMENT_3D('',#23100,#23101,#23102); +#23100 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 0.100000022492)); +#23101 = DIRECTION('',(-1.,-6.982962677686E-15,2.478176394253E-16)); +#23102 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#23103 = ADVANCED_FACE('',(#23104),#23124,.F.); +#23104 = FACE_BOUND('',#23105,.T.); +#23105 = EDGE_LOOP('',(#23106,#23112,#23113,#23114,#23115,#23116,#23117, + #23123)); +#23106 = ORIENTED_EDGE('',*,*,#23107,.F.); +#23107 = EDGE_CURVE('',#21968,#22739,#23108,.T.); +#23108 = LINE('',#23109,#23110); +#23109 = CARTESIAN_POINT('',(5.949974519652,-3.465036734706, + 0.350000019118)); +#23110 = VECTOR('',#23111,1.); +#23111 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23112 = ORIENTED_EDGE('',*,*,#21967,.F.); +#23113 = ORIENTED_EDGE('',*,*,#22826,.T.); +#23114 = ORIENTED_EDGE('',*,*,#22788,.T.); +#23115 = ORIENTED_EDGE('',*,*,#22708,.F.); +#23116 = ORIENTED_EDGE('',*,*,#23093,.T.); +#23117 = ORIENTED_EDGE('',*,*,#23118,.T.); +#23118 = EDGE_CURVE('',#23086,#22741,#23119,.T.); +#23119 = LINE('',#23120,#23121); +#23120 = CARTESIAN_POINT('',(7.499974498734,-3.465036734706, + 0.100000022492)); +#23121 = VECTOR('',#23122,1.); +#23122 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23123 = ORIENTED_EDGE('',*,*,#22738,.F.); +#23124 = PLANE('',#23125); +#23125 = AXIS2_PLACEMENT_3D('',#23126,#23127,#23128); +#23126 = CARTESIAN_POINT('',(-2.540005076938E-05,-3.465036734706, + 1.849999998875)); +#23127 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23128 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23129 = ADVANCED_FACE('',(#23130),#23141,.F.); +#23130 = FACE_BOUND('',#23131,.T.); +#23131 = EDGE_LOOP('',(#23132,#23138,#23139,#23140)); +#23132 = ORIENTED_EDGE('',*,*,#23133,.T.); +#23133 = EDGE_CURVE('',#23078,#22749,#23134,.T.); +#23134 = LINE('',#23135,#23136); +#23135 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 0.100000022492)); +#23136 = VECTOR('',#23137,1.); +#23137 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23138 = ORIENTED_EDGE('',*,*,#22748,.T.); +#23139 = ORIENTED_EDGE('',*,*,#23118,.F.); +#23140 = ORIENTED_EDGE('',*,*,#23085,.F.); +#23141 = PLANE('',#23142); +#23142 = AXIS2_PLACEMENT_3D('',#23143,#23144,#23145); +#23143 = CARTESIAN_POINT('',(7.499974498734,-3.465036734706, + 0.100000022492)); +#23144 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23145 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#23146 = ADVANCED_FACE('',(#23147),#23168,.T.); +#23147 = FACE_BOUND('',#23148,.T.); +#23148 = EDGE_LOOP('',(#23149,#23150,#23151,#23152,#23153,#23161,#23167) + ); +#23149 = ORIENTED_EDGE('',*,*,#19108,.T.); +#23150 = ORIENTED_EDGE('',*,*,#23052,.F.); +#23151 = ORIENTED_EDGE('',*,*,#23029,.T.); +#23152 = ORIENTED_EDGE('',*,*,#22980,.T.); +#23153 = ORIENTED_EDGE('',*,*,#23154,.T.); +#23154 = EDGE_CURVE('',#22983,#23155,#23157,.T.); +#23155 = VERTEX_POINT('',#23156); +#23156 = CARTESIAN_POINT('',(-7.500025298835,-2.265036750901, + 2.699999987404)); +#23157 = LINE('',#23158,#23159); +#23158 = CARTESIAN_POINT('',(-7.500025298835,0.934963205914, + 2.699999987404)); +#23159 = VECTOR('',#23160,1.); +#23160 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23161 = ORIENTED_EDGE('',*,*,#23162,.F.); +#23162 = EDGE_CURVE('',#19170,#23155,#23163,.T.); +#23163 = LINE('',#23164,#23165); +#23164 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 2.699999987404)); +#23165 = VECTOR('',#23166,1.); +#23166 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23167 = ORIENTED_EDGE('',*,*,#19186,.F.); +#23168 = PLANE('',#23169); +#23169 = AXIS2_PLACEMENT_3D('',#23170,#23171,#23172); +#23170 = CARTESIAN_POINT('',(-6.500025312331,0.934963205914, + 2.699999987404)); +#23171 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23172 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#23173 = ADVANCED_FACE('',(#23174),#23192,.T.); +#23174 = FACE_BOUND('',#23175,.T.); +#23175 = EDGE_LOOP('',(#23176,#23177,#23183,#23184,#23185,#23186)); +#23176 = ORIENTED_EDGE('',*,*,#22431,.F.); +#23177 = ORIENTED_EDGE('',*,*,#23178,.T.); +#23178 = EDGE_CURVE('',#22432,#22757,#23179,.T.); +#23179 = LINE('',#23180,#23181); +#23180 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#23181 = VECTOR('',#23182,1.); +#23182 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23183 = ORIENTED_EDGE('',*,*,#22756,.T.); +#23184 = ORIENTED_EDGE('',*,*,#23133,.F.); +#23185 = ORIENTED_EDGE('',*,*,#23077,.F.); +#23186 = ORIENTED_EDGE('',*,*,#23187,.F.); +#23187 = EDGE_CURVE('',#22434,#23070,#23188,.T.); +#23188 = LINE('',#23189,#23190); +#23189 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 3.599999975258)); +#23190 = VECTOR('',#23191,1.); +#23191 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23192 = PLANE('',#23193); +#23193 = AXIS2_PLACEMENT_3D('',#23194,#23195,#23196); +#23194 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 1.849999998875)); +#23195 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23196 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23197 = ADVANCED_FACE('',(#23198),#23216,.F.); +#23198 = FACE_BOUND('',#23199,.T.); +#23199 = EDGE_LOOP('',(#23200,#23201,#23202,#23210)); +#23200 = ORIENTED_EDGE('',*,*,#23154,.F.); +#23201 = ORIENTED_EDGE('',*,*,#23006,.T.); +#23202 = ORIENTED_EDGE('',*,*,#23203,.T.); +#23203 = EDGE_CURVE('',#22999,#23204,#23206,.T.); +#23204 = VERTEX_POINT('',#23205); +#23205 = CARTESIAN_POINT('',(-7.500025298835,-2.265036750901, + 0.250000020468)); +#23206 = LINE('',#23207,#23208); +#23207 = CARTESIAN_POINT('',(-7.500025298835,0.934963205914, + 0.250000020468)); +#23208 = VECTOR('',#23209,1.); +#23209 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23210 = ORIENTED_EDGE('',*,*,#23211,.T.); +#23211 = EDGE_CURVE('',#23204,#23155,#23212,.T.); +#23212 = LINE('',#23213,#23214); +#23213 = CARTESIAN_POINT('',(-7.500025298835,-2.265036750901, + 0.100000022492)); +#23214 = VECTOR('',#23215,1.); +#23215 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23216 = PLANE('',#23217); +#23217 = AXIS2_PLACEMENT_3D('',#23218,#23219,#23220); +#23218 = CARTESIAN_POINT('',(-7.500025298835,-3.465036734706, + 3.599999975258)); +#23219 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23220 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#23221 = ADVANCED_FACE('',(#23222),#23232,.F.); +#23222 = FACE_BOUND('',#23223,.T.); +#23223 = EDGE_LOOP('',(#23224,#23225,#23226,#23227,#23228,#23229,#23230, + #23231)); +#23224 = ORIENTED_EDGE('',*,*,#22877,.F.); +#23225 = ORIENTED_EDGE('',*,*,#18483,.T.); +#23226 = ORIENTED_EDGE('',*,*,#18302,.T.); +#23227 = ORIENTED_EDGE('',*,*,#18287,.F.); +#23228 = ORIENTED_EDGE('',*,*,#22573,.T.); +#23229 = ORIENTED_EDGE('',*,*,#22638,.T.); +#23230 = ORIENTED_EDGE('',*,*,#22685,.F.); +#23231 = ORIENTED_EDGE('',*,*,#22965,.F.); +#23232 = PLANE('',#23233); +#23233 = AXIS2_PLACEMENT_3D('',#23234,#23235,#23236); +#23234 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 3.099999982006)); +#23235 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23236 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#23237 = ADVANCED_FACE('',(#23238),#23338,.F.); +#23238 = FACE_BOUND('',#23239,.T.); +#23239 = EDGE_LOOP('',(#23240,#23241,#23242,#23243,#23244,#23245,#23246, + #23247,#23248,#23249,#23250,#23251,#23252,#23253,#23254,#23255, + #23256,#23257,#23258,#23259,#23260,#23266,#23267,#23273,#23274, + #23280,#23281,#23287,#23288,#23294,#23295,#23303,#23311,#23319, + #23327,#23333,#23334,#23335,#23336,#23337)); +#23240 = ORIENTED_EDGE('',*,*,#22606,.F.); +#23241 = ORIENTED_EDGE('',*,*,#18263,.T.); +#23242 = ORIENTED_EDGE('',*,*,#18326,.T.); +#23243 = ORIENTED_EDGE('',*,*,#18618,.F.); +#23244 = ORIENTED_EDGE('',*,*,#18704,.F.); +#23245 = ORIENTED_EDGE('',*,*,#18137,.T.); +#23246 = ORIENTED_EDGE('',*,*,#18944,.T.); +#23247 = ORIENTED_EDGE('',*,*,#18859,.T.); +#23248 = ORIENTED_EDGE('',*,*,#18923,.F.); +#23249 = ORIENTED_EDGE('',*,*,#18828,.T.); +#23250 = ORIENTED_EDGE('',*,*,#18970,.T.); +#23251 = ORIENTED_EDGE('',*,*,#18097,.T.); +#23252 = ORIENTED_EDGE('',*,*,#18776,.F.); +#23253 = ORIENTED_EDGE('',*,*,#18017,.T.); +#23254 = ORIENTED_EDGE('',*,*,#18996,.T.); +#23255 = ORIENTED_EDGE('',*,*,#18057,.T.); +#23256 = ORIENTED_EDGE('',*,*,#18798,.F.); +#23257 = ORIENTED_EDGE('',*,*,#17937,.T.); +#23258 = ORIENTED_EDGE('',*,*,#19027,.T.); +#23259 = ORIENTED_EDGE('',*,*,#17977,.T.); +#23260 = ORIENTED_EDGE('',*,*,#23261,.T.); +#23261 = EDGE_CURVE('',#17970,#22282,#23262,.T.); +#23262 = LINE('',#23263,#23264); +#23263 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 3.599999975258)); +#23264 = VECTOR('',#23265,1.); +#23265 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23266 = ORIENTED_EDGE('',*,*,#22281,.F.); +#23267 = ORIENTED_EDGE('',*,*,#23268,.F.); +#23268 = EDGE_CURVE('',#22242,#22274,#23269,.T.); +#23269 = LINE('',#23270,#23271); +#23270 = CARTESIAN_POINT('',(-0.450025393978,0.634963209963, + 3.599999975258)); +#23271 = VECTOR('',#23272,1.); +#23272 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23273 = ORIENTED_EDGE('',*,*,#22241,.F.); +#23274 = ORIENTED_EDGE('',*,*,#23275,.T.); +#23275 = EDGE_CURVE('',#22234,#22362,#23276,.T.); +#23276 = LINE('',#23277,#23278); +#23277 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 3.599999975258)); +#23278 = VECTOR('',#23279,1.); +#23279 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23280 = ORIENTED_EDGE('',*,*,#22361,.F.); +#23281 = ORIENTED_EDGE('',*,*,#23282,.F.); +#23282 = EDGE_CURVE('',#22322,#22354,#23283,.T.); +#23283 = LINE('',#23284,#23285); +#23284 = CARTESIAN_POINT('',(-1.700025377109,0.634963209963, + 3.599999975258)); +#23285 = VECTOR('',#23286,1.); +#23286 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23287 = ORIENTED_EDGE('',*,*,#22321,.F.); +#23288 = ORIENTED_EDGE('',*,*,#23289,.T.); +#23289 = EDGE_CURVE('',#22314,#22402,#23290,.T.); +#23290 = LINE('',#23291,#23292); +#23291 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 3.599999975258)); +#23292 = VECTOR('',#23293,1.); +#23293 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23294 = ORIENTED_EDGE('',*,*,#22401,.F.); +#23295 = ORIENTED_EDGE('',*,*,#23296,.F.); +#23296 = EDGE_CURVE('',#23297,#22394,#23299,.T.); +#23297 = VERTEX_POINT('',#23298); +#23298 = CARTESIAN_POINT('',(-3.300025355516,0.634963209963, + 3.599999975258)); +#23299 = LINE('',#23300,#23301); +#23300 = CARTESIAN_POINT('',(-2.950025360239,0.634963209963, + 3.599999975258)); +#23301 = VECTOR('',#23302,1.); +#23302 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23303 = ORIENTED_EDGE('',*,*,#23304,.F.); +#23304 = EDGE_CURVE('',#23305,#23297,#23307,.T.); +#23305 = VERTEX_POINT('',#23306); +#23306 = CARTESIAN_POINT('',(-3.300025355516,0.934963205914, + 3.599999975258)); +#23307 = LINE('',#23308,#23309); +#23308 = CARTESIAN_POINT('',(-3.300025355516,0.934963205914, + 3.599999975258)); +#23309 = VECTOR('',#23310,1.); +#23310 = DIRECTION('',(9.874168470981E-15,-1.,-3.491481338843E-15)); +#23311 = ORIENTED_EDGE('',*,*,#23312,.T.); +#23312 = EDGE_CURVE('',#23305,#23313,#23315,.T.); +#23313 = VERTEX_POINT('',#23314); +#23314 = CARTESIAN_POINT('',(-4.20002534337,0.934963205914, + 3.599999975258)); +#23315 = LINE('',#23316,#23317); +#23316 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 3.599999975258)); +#23317 = VECTOR('',#23318,1.); +#23318 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23319 = ORIENTED_EDGE('',*,*,#23320,.F.); +#23320 = EDGE_CURVE('',#23321,#23313,#23323,.T.); +#23321 = VERTEX_POINT('',#23322); +#23322 = CARTESIAN_POINT('',(-4.20002534337,0.634963209963, + 3.599999975258)); +#23323 = LINE('',#23324,#23325); +#23324 = CARTESIAN_POINT('',(-4.20002534337,0.934963205914, + 3.599999975258)); +#23325 = VECTOR('',#23326,1.); +#23326 = DIRECTION('',(-4.091756884392E-15,1.,3.491481338843E-15)); +#23327 = ORIENTED_EDGE('',*,*,#23328,.F.); +#23328 = EDGE_CURVE('',#22442,#23321,#23329,.T.); +#23329 = LINE('',#23330,#23331); +#23330 = CARTESIAN_POINT('',(-4.20002534337,0.634963209963, + 3.599999975258)); +#23331 = VECTOR('',#23332,1.); +#23332 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23333 = ORIENTED_EDGE('',*,*,#22441,.F.); +#23334 = ORIENTED_EDGE('',*,*,#23187,.T.); +#23335 = ORIENTED_EDGE('',*,*,#23069,.T.); +#23336 = ORIENTED_EDGE('',*,*,#22661,.F.); +#23337 = ORIENTED_EDGE('',*,*,#22646,.F.); +#23338 = PLANE('',#23339); +#23339 = AXIS2_PLACEMENT_3D('',#23340,#23341,#23342); +#23340 = CARTESIAN_POINT('',(7.499974498734,-3.465036734706, + 3.599999975258)); +#23341 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23342 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#23343 = ADVANCED_FACE('',(#23344),#23355,.F.); +#23344 = FACE_BOUND('',#23345,.T.); +#23345 = EDGE_LOOP('',(#23346,#23347,#23348,#23349)); +#23346 = ORIENTED_EDGE('',*,*,#22894,.F.); +#23347 = ORIENTED_EDGE('',*,*,#22559,.T.); +#23348 = ORIENTED_EDGE('',*,*,#22804,.T.); +#23349 = ORIENTED_EDGE('',*,*,#23350,.F.); +#23350 = EDGE_CURVE('',#22895,#22797,#23351,.T.); +#23351 = LINE('',#23352,#23353); +#23352 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 0.75000001372)); +#23353 = VECTOR('',#23354,1.); +#23354 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23355 = PLANE('',#23356); +#23356 = AXIS2_PLACEMENT_3D('',#23357,#23358,#23359); +#23357 = CARTESIAN_POINT('',(-5.950025319753,-0.465036775192, + 3.099999982006)); +#23358 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23359 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#23360 = ADVANCED_FACE('',(#23361),#23372,.T.); +#23361 = FACE_BOUND('',#23362,.T.); +#23362 = EDGE_LOOP('',(#23363,#23364,#23370,#23371)); +#23363 = ORIENTED_EDGE('',*,*,#22311,.F.); +#23364 = ORIENTED_EDGE('',*,*,#23365,.T.); +#23365 = EDGE_CURVE('',#22312,#22410,#23366,.T.); +#23366 = LINE('',#23367,#23368); +#23367 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#23368 = VECTOR('',#23369,1.); +#23369 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23370 = ORIENTED_EDGE('',*,*,#22409,.T.); +#23371 = ORIENTED_EDGE('',*,*,#23289,.F.); +#23372 = PLANE('',#23373); +#23373 = AXIS2_PLACEMENT_3D('',#23374,#23375,#23376); +#23374 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 1.849999998875)); +#23375 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23376 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23377 = ADVANCED_FACE('',(#23378),#23389,.T.); +#23378 = FACE_BOUND('',#23379,.T.); +#23379 = EDGE_LOOP('',(#23380,#23381,#23387,#23388)); +#23380 = ORIENTED_EDGE('',*,*,#22231,.F.); +#23381 = ORIENTED_EDGE('',*,*,#23382,.T.); +#23382 = EDGE_CURVE('',#22232,#22370,#23383,.T.); +#23383 = LINE('',#23384,#23385); +#23384 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#23385 = VECTOR('',#23386,1.); +#23386 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23387 = ORIENTED_EDGE('',*,*,#22369,.T.); +#23388 = ORIENTED_EDGE('',*,*,#23275,.F.); +#23389 = PLANE('',#23390); +#23390 = AXIS2_PLACEMENT_3D('',#23391,#23392,#23393); +#23391 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 1.849999998875)); +#23392 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23393 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23394 = ADVANCED_FACE('',(#23395),#23406,.T.); +#23395 = FACE_BOUND('',#23396,.T.); +#23396 = EDGE_LOOP('',(#23397,#23398,#23399,#23405)); +#23397 = ORIENTED_EDGE('',*,*,#23261,.F.); +#23398 = ORIENTED_EDGE('',*,*,#17969,.F.); +#23399 = ORIENTED_EDGE('',*,*,#23400,.T.); +#23400 = EDGE_CURVE('',#17962,#22290,#23401,.T.); +#23401 = LINE('',#23402,#23403); +#23402 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#23403 = VECTOR('',#23404,1.); +#23404 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23405 = ORIENTED_EDGE('',*,*,#22289,.T.); +#23406 = PLANE('',#23407); +#23407 = AXIS2_PLACEMENT_3D('',#23408,#23409,#23410); +#23408 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 1.849999998875)); +#23409 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23410 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23411 = ADVANCED_FACE('',(#23412),#23428,.F.); +#23412 = FACE_BOUND('',#23413,.T.); +#23413 = EDGE_LOOP('',(#23414,#23415,#23421,#23422)); +#23414 = ORIENTED_EDGE('',*,*,#22156,.F.); +#23415 = ORIENTED_EDGE('',*,*,#23416,.T.); +#23416 = EDGE_CURVE('',#22149,#23305,#23417,.T.); +#23417 = LINE('',#23418,#23419); +#23418 = CARTESIAN_POINT('',(-3.300025355516,0.934963205914, + 0.100000022492)); +#23419 = VECTOR('',#23420,1.); +#23420 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23421 = ORIENTED_EDGE('',*,*,#23304,.T.); +#23422 = ORIENTED_EDGE('',*,*,#23423,.F.); +#23423 = EDGE_CURVE('',#22157,#23297,#23424,.T.); +#23424 = LINE('',#23425,#23426); +#23425 = CARTESIAN_POINT('',(-3.300025355516,0.634963209963, + 0.100000022492)); +#23426 = VECTOR('',#23427,1.); +#23427 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23428 = PLANE('',#23429); +#23429 = AXIS2_PLACEMENT_3D('',#23430,#23431,#23432); +#23430 = CARTESIAN_POINT('',(-3.300025355516,0.934963205914, + 0.100000022492)); +#23431 = DIRECTION('',(-1.,-9.874168470981E-15,-1.009459107404E-29)); +#23432 = DIRECTION('',(-9.874168470981E-15,1.,0.)); +#23433 = ADVANCED_FACE('',(#23434),#23450,.F.); +#23434 = FACE_BOUND('',#23435,.T.); +#23435 = EDGE_LOOP('',(#23436,#23437,#23443,#23444)); +#23436 = ORIENTED_EDGE('',*,*,#22140,.F.); +#23437 = ORIENTED_EDGE('',*,*,#23438,.T.); +#23438 = EDGE_CURVE('',#22133,#23321,#23439,.T.); +#23439 = LINE('',#23440,#23441); +#23440 = CARTESIAN_POINT('',(-4.20002534337,0.634963209963, + 0.100000022492)); +#23441 = VECTOR('',#23442,1.); +#23442 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23443 = ORIENTED_EDGE('',*,*,#23320,.T.); +#23444 = ORIENTED_EDGE('',*,*,#23445,.F.); +#23445 = EDGE_CURVE('',#22141,#23313,#23446,.T.); +#23446 = LINE('',#23447,#23448); +#23447 = CARTESIAN_POINT('',(-4.20002534337,0.934963205914, + 0.100000022492)); +#23448 = VECTOR('',#23449,1.); +#23449 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23450 = PLANE('',#23451); +#23451 = AXIS2_PLACEMENT_3D('',#23452,#23453,#23454); +#23452 = CARTESIAN_POINT('',(-4.20002534337,0.934963205914, + 0.100000022492)); +#23453 = DIRECTION('',(1.,4.091756884392E-15,-1.009459107404E-29)); +#23454 = DIRECTION('',(-4.091756884392E-15,1.,0.)); +#23455 = ADVANCED_FACE('',(#23456),#23472,.F.); +#23456 = FACE_BOUND('',#23457,.T.); +#23457 = EDGE_LOOP('',(#23458,#23459,#23460,#23461,#23462,#23463,#23464, + #23465,#23471)); +#23458 = ORIENTED_EDGE('',*,*,#22217,.T.); +#23459 = ORIENTED_EDGE('',*,*,#22054,.F.); +#23460 = ORIENTED_EDGE('',*,*,#21975,.F.); +#23461 = ORIENTED_EDGE('',*,*,#23107,.T.); +#23462 = ORIENTED_EDGE('',*,*,#22764,.F.); +#23463 = ORIENTED_EDGE('',*,*,#23178,.F.); +#23464 = ORIENTED_EDGE('',*,*,#22457,.T.); +#23465 = ORIENTED_EDGE('',*,*,#23466,.T.); +#23466 = EDGE_CURVE('',#22450,#21603,#23467,.T.); +#23467 = LINE('',#23468,#23469); +#23468 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#23469 = VECTOR('',#23470,1.); +#23470 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23471 = ORIENTED_EDGE('',*,*,#21816,.T.); +#23472 = PLANE('',#23473); +#23473 = AXIS2_PLACEMENT_3D('',#23474,#23475,#23476); +#23474 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#23475 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23476 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#23477 = ADVANCED_FACE('',(#23478),#23489,.F.); +#23478 = FACE_BOUND('',#23479,.T.); +#23479 = EDGE_LOOP('',(#23480,#23486,#23487,#23488)); +#23480 = ORIENTED_EDGE('',*,*,#23481,.F.); +#23481 = EDGE_CURVE('',#17696,#22032,#23482,.T.); +#23482 = LINE('',#23483,#23484); +#23483 = CARTESIAN_POINT('',(-2.540005076938E-05,-3.465036734706, + 0.550000016419)); +#23484 = VECTOR('',#23485,1.); +#23485 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23486 = ORIENTED_EDGE('',*,*,#17695,.F.); +#23487 = ORIENTED_EDGE('',*,*,#22941,.F.); +#23488 = ORIENTED_EDGE('',*,*,#22039,.T.); +#23489 = PLANE('',#23490); +#23490 = AXIS2_PLACEMENT_3D('',#23491,#23492,#23493); +#23491 = CARTESIAN_POINT('',(5.949974519652,-3.265036737405, + 0.75000001372)); +#23492 = DIRECTION('',(-4.937700262162E-15,0.707106781187, + -0.707106781187)); +#23493 = DIRECTION('',(-1.,-3.944304526105E-31,6.982962677682E-15)); +#23494 = ADVANCED_FACE('',(#23495),#23503,.F.); +#23495 = FACE_BOUND('',#23496,.T.); +#23496 = EDGE_LOOP('',(#23497,#23498,#23499,#23500,#23501,#23502)); +#23497 = ORIENTED_EDGE('',*,*,#22210,.T.); +#23498 = ORIENTED_EDGE('',*,*,#22902,.F.); +#23499 = ORIENTED_EDGE('',*,*,#23350,.T.); +#23500 = ORIENTED_EDGE('',*,*,#22819,.T.); +#23501 = ORIENTED_EDGE('',*,*,#21991,.F.); +#23502 = ORIENTED_EDGE('',*,*,#22070,.F.); +#23503 = PLANE('',#23504); +#23504 = AXIS2_PLACEMENT_3D('',#23505,#23506,#23507); +#23505 = CARTESIAN_POINT('',(5.949974519652,-0.465036775192, + 0.75000001372)); +#23506 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23507 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#23508 = ADVANCED_FACE('',(#23509),#23520,.F.); +#23509 = FACE_BOUND('',#23510,.T.); +#23510 = EDGE_LOOP('',(#23511,#23517,#23518,#23519)); +#23511 = ORIENTED_EDGE('',*,*,#23512,.F.); +#23512 = EDGE_CURVE('',#17704,#22024,#23513,.T.); +#23513 = LINE('',#23514,#23515); +#23514 = CARTESIAN_POINT('',(5.949974519652,-3.465036734706, + 0.350000019118)); +#23515 = VECTOR('',#23516,1.); +#23516 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23517 = ORIENTED_EDGE('',*,*,#17703,.F.); +#23518 = ORIENTED_EDGE('',*,*,#23481,.T.); +#23519 = ORIENTED_EDGE('',*,*,#22031,.T.); +#23520 = PLANE('',#23521); +#23521 = AXIS2_PLACEMENT_3D('',#23522,#23523,#23524); +#23522 = CARTESIAN_POINT('',(-2.540005076938E-05,-3.465036734706, + 1.849999998875)); +#23523 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23524 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23525 = ADVANCED_FACE('',(#23526),#23532,.T.); +#23526 = FACE_BOUND('',#23527,.T.); +#23527 = EDGE_LOOP('',(#23528,#23529,#23530,#23531)); +#23528 = ORIENTED_EDGE('',*,*,#23416,.F.); +#23529 = ORIENTED_EDGE('',*,*,#22148,.F.); +#23530 = ORIENTED_EDGE('',*,*,#23445,.T.); +#23531 = ORIENTED_EDGE('',*,*,#23312,.F.); +#23532 = PLANE('',#23533); +#23533 = AXIS2_PLACEMENT_3D('',#23534,#23535,#23536); +#23534 = CARTESIAN_POINT('',(-2.54000508001E-05,0.934963205914, + 1.849999998875)); +#23535 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23536 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23537 = ADVANCED_FACE('',(#23538),#23548,.F.); +#23538 = FACE_BOUND('',#23539,.T.); +#23539 = EDGE_LOOP('',(#23540,#23541,#23542,#23543,#23544,#23545,#23546, + #23547)); +#23540 = ORIENTED_EDGE('',*,*,#21610,.T.); +#23541 = ORIENTED_EDGE('',*,*,#23466,.F.); +#23542 = ORIENTED_EDGE('',*,*,#22449,.T.); +#23543 = ORIENTED_EDGE('',*,*,#23328,.T.); +#23544 = ORIENTED_EDGE('',*,*,#23438,.F.); +#23545 = ORIENTED_EDGE('',*,*,#22132,.F.); +#23546 = ORIENTED_EDGE('',*,*,#21399,.F.); +#23547 = ORIENTED_EDGE('',*,*,#21802,.F.); +#23548 = PLANE('',#23549); +#23549 = AXIS2_PLACEMENT_3D('',#23550,#23551,#23552); +#23550 = CARTESIAN_POINT('',(-4.20002534337,0.634963209963, + 0.100000022492)); +#23551 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23552 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#23553 = ADVANCED_FACE('',(#23554),#23569,.F.); +#23554 = FACE_BOUND('',#23555,.T.); +#23555 = EDGE_LOOP('',(#23556,#23557,#23558,#23559,#23560,#23561,#23567, + #23568)); +#23556 = ORIENTED_EDGE('',*,*,#20917,.T.); +#23557 = ORIENTED_EDGE('',*,*,#22164,.F.); +#23558 = ORIENTED_EDGE('',*,*,#23423,.T.); +#23559 = ORIENTED_EDGE('',*,*,#23296,.T.); +#23560 = ORIENTED_EDGE('',*,*,#22391,.F.); +#23561 = ORIENTED_EDGE('',*,*,#23562,.F.); +#23562 = EDGE_CURVE('',#20707,#22392,#23563,.T.); +#23563 = LINE('',#23564,#23565); +#23564 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#23565 = VECTOR('',#23566,1.); +#23566 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23567 = ORIENTED_EDGE('',*,*,#20706,.F.); +#23568 = ORIENTED_EDGE('',*,*,#21109,.F.); +#23569 = PLANE('',#23570); +#23570 = AXIS2_PLACEMENT_3D('',#23571,#23572,#23573); +#23571 = CARTESIAN_POINT('',(-2.950025360239,0.634963209963, + 0.100000022492)); +#23572 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23573 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#23574 = ADVANCED_FACE('',(#23575),#23595,.F.); +#23575 = FACE_BOUND('',#23576,.T.); +#23576 = EDGE_LOOP('',(#23577,#23578,#23584,#23585,#23586,#23587,#23593, + #23594)); +#23577 = ORIENTED_EDGE('',*,*,#20364,.T.); +#23578 = ORIENTED_EDGE('',*,*,#23579,.F.); +#23579 = EDGE_CURVE('',#22330,#20357,#23580,.T.); +#23580 = LINE('',#23581,#23582); +#23581 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#23582 = VECTOR('',#23583,1.); +#23583 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23584 = ORIENTED_EDGE('',*,*,#22329,.T.); +#23585 = ORIENTED_EDGE('',*,*,#23282,.T.); +#23586 = ORIENTED_EDGE('',*,*,#22351,.F.); +#23587 = ORIENTED_EDGE('',*,*,#23588,.F.); +#23588 = EDGE_CURVE('',#20154,#22352,#23589,.T.); +#23589 = LINE('',#23590,#23591); +#23590 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#23591 = VECTOR('',#23592,1.); +#23592 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23593 = ORIENTED_EDGE('',*,*,#20153,.F.); +#23594 = ORIENTED_EDGE('',*,*,#20556,.F.); +#23595 = PLANE('',#23596); +#23596 = AXIS2_PLACEMENT_3D('',#23597,#23598,#23599); +#23597 = CARTESIAN_POINT('',(-1.700025377109,0.634963209963, + 0.100000022492)); +#23598 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23599 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#23600 = ADVANCED_FACE('',(#23601),#23621,.F.); +#23601 = FACE_BOUND('',#23602,.T.); +#23602 = EDGE_LOOP('',(#23603,#23604,#23610,#23611,#23612,#23613,#23619, + #23620)); +#23603 = ORIENTED_EDGE('',*,*,#19811,.T.); +#23604 = ORIENTED_EDGE('',*,*,#23605,.F.); +#23605 = EDGE_CURVE('',#22250,#19804,#23606,.T.); +#23606 = LINE('',#23607,#23608); +#23607 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#23608 = VECTOR('',#23609,1.); +#23609 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23610 = ORIENTED_EDGE('',*,*,#22249,.T.); +#23611 = ORIENTED_EDGE('',*,*,#23268,.T.); +#23612 = ORIENTED_EDGE('',*,*,#22271,.F.); +#23613 = ORIENTED_EDGE('',*,*,#23614,.F.); +#23614 = EDGE_CURVE('',#19601,#22272,#23615,.T.); +#23615 = LINE('',#23616,#23617); +#23616 = CARTESIAN_POINT('',(5.949974519652,0.634963209963, + 0.350000019118)); +#23617 = VECTOR('',#23618,1.); +#23618 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23619 = ORIENTED_EDGE('',*,*,#19600,.F.); +#23620 = ORIENTED_EDGE('',*,*,#20003,.F.); +#23621 = PLANE('',#23622); +#23622 = AXIS2_PLACEMENT_3D('',#23623,#23624,#23625); +#23623 = CARTESIAN_POINT('',(-0.450025393978,0.634963209963, + 0.100000022492)); +#23624 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23625 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#23626 = ADVANCED_FACE('',(#23627),#23640,.T.); +#23627 = FACE_BOUND('',#23628,.T.); +#23628 = EDGE_LOOP('',(#23629,#23635,#23636,#23637,#23638,#23639)); +#23629 = ORIENTED_EDGE('',*,*,#23630,.T.); +#23630 = EDGE_CURVE('',#23204,#19147,#23631,.T.); +#23631 = LINE('',#23632,#23633); +#23632 = CARTESIAN_POINT('',(-7.500025298835,-2.265036750901, + 0.250000020468)); +#23633 = VECTOR('',#23634,1.); +#23634 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23635 = ORIENTED_EDGE('',*,*,#19146,.T.); +#23636 = ORIENTED_EDGE('',*,*,#19200,.T.); +#23637 = ORIENTED_EDGE('',*,*,#19169,.F.); +#23638 = ORIENTED_EDGE('',*,*,#23162,.T.); +#23639 = ORIENTED_EDGE('',*,*,#23211,.F.); +#23640 = PLANE('',#23641); +#23641 = AXIS2_PLACEMENT_3D('',#23642,#23643,#23644); +#23642 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 1.849999998875)); +#23643 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23644 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#23645 = ADVANCED_FACE('',(#23646),#23655,.T.); +#23646 = FACE_BOUND('',#23647,.T.); +#23647 = EDGE_LOOP('',(#23648,#23649,#23650,#23651,#23652,#23653,#23654) + ); +#23648 = ORIENTED_EDGE('',*,*,#19092,.F.); +#23649 = ORIENTED_EDGE('',*,*,#19154,.T.); +#23650 = ORIENTED_EDGE('',*,*,#23630,.F.); +#23651 = ORIENTED_EDGE('',*,*,#23203,.F.); +#23652 = ORIENTED_EDGE('',*,*,#22998,.T.); +#23653 = ORIENTED_EDGE('',*,*,#23020,.F.); +#23654 = ORIENTED_EDGE('',*,*,#23059,.T.); +#23655 = PLANE('',#23656); +#23656 = AXIS2_PLACEMENT_3D('',#23657,#23658,#23659); +#23657 = CARTESIAN_POINT('',(-7.500025298835,0.934963205914, + 0.250000020468)); +#23658 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23659 = DIRECTION('',(-1.,0.,2.438088387898E-29)); +#23660 = ADVANCED_FACE('',(#23661,#23669,#23683,#23693,#23733,#23740), + #23752,.F.); +#23661 = FACE_BOUND('',#23662,.T.); +#23662 = EDGE_LOOP('',(#23663,#23664,#23665,#23666,#23667,#23668)); +#23663 = ORIENTED_EDGE('',*,*,#12654,.T.); +#23664 = ORIENTED_EDGE('',*,*,#12630,.T.); +#23665 = ORIENTED_EDGE('',*,*,#12606,.T.); +#23666 = ORIENTED_EDGE('',*,*,#12582,.T.); +#23667 = ORIENTED_EDGE('',*,*,#12558,.T.); +#23668 = ORIENTED_EDGE('',*,*,#12527,.T.); +#23669 = FACE_BOUND('',#23670,.T.); +#23670 = EDGE_LOOP('',(#23671,#23672,#23673,#23674,#23675,#23676,#23677, + #23678,#23679,#23680,#23681,#23682)); +#23671 = ORIENTED_EDGE('',*,*,#13774,.T.); +#23672 = ORIENTED_EDGE('',*,*,#13750,.T.); +#23673 = ORIENTED_EDGE('',*,*,#13726,.T.); +#23674 = ORIENTED_EDGE('',*,*,#13702,.T.); +#23675 = ORIENTED_EDGE('',*,*,#13678,.T.); +#23676 = ORIENTED_EDGE('',*,*,#13654,.T.); +#23677 = ORIENTED_EDGE('',*,*,#13630,.T.); +#23678 = ORIENTED_EDGE('',*,*,#13606,.T.); +#23679 = ORIENTED_EDGE('',*,*,#13582,.T.); +#23680 = ORIENTED_EDGE('',*,*,#13558,.T.); +#23681 = ORIENTED_EDGE('',*,*,#13534,.T.); +#23682 = ORIENTED_EDGE('',*,*,#13503,.T.); +#23683 = FACE_BOUND('',#23684,.T.); +#23684 = EDGE_LOOP('',(#23685,#23686,#23687,#23688,#23689,#23690,#23691, + #23692)); +#23685 = ORIENTED_EDGE('',*,*,#14745,.T.); +#23686 = ORIENTED_EDGE('',*,*,#14721,.T.); +#23687 = ORIENTED_EDGE('',*,*,#14697,.T.); +#23688 = ORIENTED_EDGE('',*,*,#14673,.T.); +#23689 = ORIENTED_EDGE('',*,*,#14649,.T.); +#23690 = ORIENTED_EDGE('',*,*,#14625,.T.); +#23691 = ORIENTED_EDGE('',*,*,#14601,.T.); +#23692 = ORIENTED_EDGE('',*,*,#14570,.T.); +#23693 = FACE_BOUND('',#23694,.T.); +#23694 = EDGE_LOOP('',(#23695,#23696,#23697,#23698,#23699,#23700,#23701, + #23702,#23703,#23704,#23705,#23706,#23707,#23708,#23709,#23710, + #23711,#23712,#23713,#23714,#23715,#23716,#23717,#23718,#23719, + #23720,#23721,#23722,#23723,#23724,#23725,#23726,#23727,#23728, + #23729,#23730,#23731,#23732)); +#23695 = ORIENTED_EDGE('',*,*,#23400,.F.); +#23696 = ORIENTED_EDGE('',*,*,#17961,.F.); +#23697 = ORIENTED_EDGE('',*,*,#19020,.F.); +#23698 = ORIENTED_EDGE('',*,*,#15697,.F.); +#23699 = ORIENTED_EDGE('',*,*,#19034,.F.); +#23700 = ORIENTED_EDGE('',*,*,#17921,.F.); +#23701 = ORIENTED_EDGE('',*,*,#18805,.T.); +#23702 = ORIENTED_EDGE('',*,*,#18041,.F.); +#23703 = ORIENTED_EDGE('',*,*,#18989,.F.); +#23704 = ORIENTED_EDGE('',*,*,#16250,.F.); +#23705 = ORIENTED_EDGE('',*,*,#19003,.F.); +#23706 = ORIENTED_EDGE('',*,*,#18001,.F.); +#23707 = ORIENTED_EDGE('',*,*,#18783,.T.); +#23708 = ORIENTED_EDGE('',*,*,#18081,.F.); +#23709 = ORIENTED_EDGE('',*,*,#18963,.F.); +#23710 = ORIENTED_EDGE('',*,*,#16803,.F.); +#23711 = ORIENTED_EDGE('',*,*,#17865,.T.); +#23712 = ORIENTED_EDGE('',*,*,#17773,.T.); +#23713 = ORIENTED_EDGE('',*,*,#17711,.F.); +#23714 = ORIENTED_EDGE('',*,*,#23512,.T.); +#23715 = ORIENTED_EDGE('',*,*,#22023,.T.); +#23716 = ORIENTED_EDGE('',*,*,#22100,.F.); +#23717 = ORIENTED_EDGE('',*,*,#22185,.F.); +#23718 = ORIENTED_EDGE('',*,*,#21123,.T.); +#23719 = ORIENTED_EDGE('',*,*,#23562,.T.); +#23720 = ORIENTED_EDGE('',*,*,#22417,.T.); +#23721 = ORIENTED_EDGE('',*,*,#23365,.F.); +#23722 = ORIENTED_EDGE('',*,*,#22337,.T.); +#23723 = ORIENTED_EDGE('',*,*,#23579,.T.); +#23724 = ORIENTED_EDGE('',*,*,#20570,.T.); +#23725 = ORIENTED_EDGE('',*,*,#23588,.T.); +#23726 = ORIENTED_EDGE('',*,*,#22377,.T.); +#23727 = ORIENTED_EDGE('',*,*,#23382,.F.); +#23728 = ORIENTED_EDGE('',*,*,#22257,.T.); +#23729 = ORIENTED_EDGE('',*,*,#23605,.T.); +#23730 = ORIENTED_EDGE('',*,*,#20017,.T.); +#23731 = ORIENTED_EDGE('',*,*,#23614,.T.); +#23732 = ORIENTED_EDGE('',*,*,#22297,.T.); +#23733 = FACE_BOUND('',#23734,.T.); +#23734 = EDGE_LOOP('',(#23735,#23736,#23737,#23738,#23739)); +#23735 = ORIENTED_EDGE('',*,*,#14301,.T.); +#23736 = ORIENTED_EDGE('',*,*,#14277,.T.); +#23737 = ORIENTED_EDGE('',*,*,#14253,.T.); +#23738 = ORIENTED_EDGE('',*,*,#14179,.T.); +#23739 = ORIENTED_EDGE('',*,*,#14098,.T.); +#23740 = FACE_BOUND('',#23741,.T.); +#23741 = EDGE_LOOP('',(#23742,#23743,#23744,#23745,#23746,#23747,#23748, + #23749,#23750,#23751)); +#23742 = ORIENTED_EDGE('',*,*,#13382,.T.); +#23743 = ORIENTED_EDGE('',*,*,#13332,.T.); +#23744 = ORIENTED_EDGE('',*,*,#13258,.T.); +#23745 = ORIENTED_EDGE('',*,*,#13184,.T.); +#23746 = ORIENTED_EDGE('',*,*,#13134,.T.); +#23747 = ORIENTED_EDGE('',*,*,#13110,.T.); +#23748 = ORIENTED_EDGE('',*,*,#13060,.T.); +#23749 = ORIENTED_EDGE('',*,*,#12986,.T.); +#23750 = ORIENTED_EDGE('',*,*,#12912,.T.); +#23751 = ORIENTED_EDGE('',*,*,#12855,.T.); +#23752 = PLANE('',#23753); +#23753 = AXIS2_PLACEMENT_3D('',#23754,#23755,#23756); +#23754 = CARTESIAN_POINT('',(5.949974519652,0.934963205914, + 0.350000019118)); +#23755 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23756 = DIRECTION('',(0.,-1.,-3.491481338843E-15)); +#23757 = MANIFOLD_SOLID_BREP('',#23758); +#23758 = CLOSED_SHELL('',(#23759,#23801,#23843,#23924,#24005,#24027, + #24044,#24061,#24078,#24095,#24114,#24131,#24150,#24167)); +#23759 = ADVANCED_FACE('',(#23760),#23796,.T.); +#23760 = FACE_BOUND('',#23761,.T.); +#23761 = EDGE_LOOP('',(#23762,#23773,#23781,#23790)); +#23762 = ORIENTED_EDGE('',*,*,#23763,.T.); +#23763 = EDGE_CURVE('',#23764,#23766,#23768,.T.); +#23764 = VERTEX_POINT('',#23765); +#23765 = CARTESIAN_POINT('',(6.899974506831,-2.265036750901, + 2.449999990778)); +#23766 = VERTEX_POINT('',#23767); +#23767 = CARTESIAN_POINT('',(7.099974504132,-2.0650367536,2.449999990778 + )); +#23768 = CIRCLE('',#23769,0.199999997301); +#23769 = AXIS2_PLACEMENT_3D('',#23770,#23771,#23772); +#23770 = CARTESIAN_POINT('',(6.899974506831,-2.0650367536,2.449999990778 + )); +#23771 = DIRECTION('',(2.517782527956E-29,-3.605607883315E-15,1.)); +#23772 = DIRECTION('',(8.673617496935E-15,-1.,-3.605607883315E-15)); +#23773 = ORIENTED_EDGE('',*,*,#23774,.T.); +#23774 = EDGE_CURVE('',#23766,#23775,#23777,.T.); +#23775 = VERTEX_POINT('',#23776); +#23776 = CARTESIAN_POINT('',(7.099974504132,-2.0650367536,2.699999987404 + )); +#23777 = LINE('',#23778,#23779); +#23778 = CARTESIAN_POINT('',(7.099974504132,-2.0650367536,2.699999987404 + )); +#23779 = VECTOR('',#23780,1.); +#23780 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23781 = ORIENTED_EDGE('',*,*,#23782,.T.); +#23782 = EDGE_CURVE('',#23775,#23783,#23785,.T.); +#23783 = VERTEX_POINT('',#23784); +#23784 = CARTESIAN_POINT('',(6.899974506831,-2.265036750901, + 2.699999987404)); +#23785 = CIRCLE('',#23786,0.199999997301); +#23786 = AXIS2_PLACEMENT_3D('',#23787,#23788,#23789); +#23787 = CARTESIAN_POINT('',(6.899974506831,-2.0650367536,2.699999987404 + )); +#23788 = DIRECTION('',(-2.517782527956E-29,3.605607883315E-15,-1.)); +#23789 = DIRECTION('',(1.841004762707E-44,-1.,-3.605607883315E-15)); +#23790 = ORIENTED_EDGE('',*,*,#23791,.T.); +#23791 = EDGE_CURVE('',#23783,#23764,#23792,.T.); +#23792 = LINE('',#23793,#23794); +#23793 = CARTESIAN_POINT('',(6.899974506831,-2.265036750901, + 2.449999990778)); +#23794 = VECTOR('',#23795,1.); +#23795 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23796 = CYLINDRICAL_SURFACE('',#23797,0.199999997301); +#23797 = AXIS2_PLACEMENT_3D('',#23798,#23799,#23800); +#23798 = CARTESIAN_POINT('',(6.899974506831,-2.0650367536,1.849999998875 + )); +#23799 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23800 = DIRECTION('',(8.673617496935E-15,-1.,-3.491481338843E-15)); +#23801 = ADVANCED_FACE('',(#23802),#23838,.T.); +#23802 = FACE_BOUND('',#23803,.T.); +#23803 = EDGE_LOOP('',(#23804,#23815,#23823,#23832)); +#23804 = ORIENTED_EDGE('',*,*,#23805,.T.); +#23805 = EDGE_CURVE('',#23806,#23808,#23810,.T.); +#23806 = VERTEX_POINT('',#23807); +#23807 = CARTESIAN_POINT('',(7.099974504132,-0.565036773843, + 2.449999990778)); +#23808 = VERTEX_POINT('',#23809); +#23809 = CARTESIAN_POINT('',(6.899974506831,-0.365036776542, + 2.449999990778)); +#23810 = CIRCLE('',#23811,0.199999997301); +#23811 = AXIS2_PLACEMENT_3D('',#23812,#23813,#23814); +#23812 = CARTESIAN_POINT('',(6.899974506831,-0.565036773843, + 2.449999990778)); +#23813 = DIRECTION('',(2.517782527956E-29,-3.605607883315E-15,1.)); +#23814 = DIRECTION('',(8.673617496935E-15,-1.,-3.605607883315E-15)); +#23815 = ORIENTED_EDGE('',*,*,#23816,.T.); +#23816 = EDGE_CURVE('',#23808,#23817,#23819,.T.); +#23817 = VERTEX_POINT('',#23818); +#23818 = CARTESIAN_POINT('',(6.899974506831,-0.365036776542, + 2.699999987404)); +#23819 = LINE('',#23820,#23821); +#23820 = CARTESIAN_POINT('',(6.899974506831,-0.365036776542, + 0.250000020468)); +#23821 = VECTOR('',#23822,1.); +#23822 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23823 = ORIENTED_EDGE('',*,*,#23824,.T.); +#23824 = EDGE_CURVE('',#23817,#23825,#23827,.T.); +#23825 = VERTEX_POINT('',#23826); +#23826 = CARTESIAN_POINT('',(7.099974504132,-0.565036773843, + 2.699999987404)); +#23827 = CIRCLE('',#23828,0.199999997301); +#23828 = AXIS2_PLACEMENT_3D('',#23829,#23830,#23831); +#23829 = CARTESIAN_POINT('',(6.899974506831,-0.565036773843, + 2.699999987404)); +#23830 = DIRECTION('',(-2.517782527956E-29,3.605607883315E-15,-1.)); +#23831 = DIRECTION('',(8.673617496935E-15,-1.,-3.605607883315E-15)); +#23832 = ORIENTED_EDGE('',*,*,#23833,.T.); +#23833 = EDGE_CURVE('',#23825,#23806,#23834,.T.); +#23834 = LINE('',#23835,#23836); +#23835 = CARTESIAN_POINT('',(7.099974504132,-0.565036773843, + 1.849999998875)); +#23836 = VECTOR('',#23837,1.); +#23837 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23838 = CYLINDRICAL_SURFACE('',#23839,0.199999997301); +#23839 = AXIS2_PLACEMENT_3D('',#23840,#23841,#23842); +#23840 = CARTESIAN_POINT('',(6.899974506831,-0.565036773843, + 0.250000020468)); +#23841 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23842 = DIRECTION('',(-8.673617496935E-15,1.,3.491481338843E-15)); +#23843 = ADVANCED_FACE('',(#23844),#23919,.T.); +#23844 = FACE_BOUND('',#23845,.T.); +#23845 = EDGE_LOOP('',(#23846,#23854,#23863,#23871,#23880,#23888,#23896, + #23904,#23912,#23918)); +#23846 = ORIENTED_EDGE('',*,*,#23847,.T.); +#23847 = EDGE_CURVE('',#23783,#23848,#23850,.T.); +#23848 = VERTEX_POINT('',#23849); +#23849 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 2.699999987404)); +#23850 = LINE('',#23851,#23852); +#23851 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 2.699999987404)); +#23852 = VECTOR('',#23853,1.); +#23853 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23854 = ORIENTED_EDGE('',*,*,#23855,.F.); +#23855 = EDGE_CURVE('',#23856,#23848,#23858,.T.); +#23856 = VERTEX_POINT('',#23857); +#23857 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 2.449999990778)); +#23858 = CIRCLE('',#23859,0.249999996626); +#23859 = AXIS2_PLACEMENT_3D('',#23860,#23861,#23862); +#23860 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 2.449999990778)); +#23861 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23862 = DIRECTION('',(1.,6.982962677686E-15,1.538649743065E-31)); +#23863 = ORIENTED_EDGE('',*,*,#23864,.T.); +#23864 = EDGE_CURVE('',#23856,#23865,#23867,.T.); +#23865 = VERTEX_POINT('',#23866); +#23866 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 0.250000020468)); +#23867 = LINE('',#23868,#23869); +#23868 = CARTESIAN_POINT('',(6.499974512229,-2.265036750901, + 1.849999998875)); +#23869 = VECTOR('',#23870,1.); +#23870 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23871 = ORIENTED_EDGE('',*,*,#23872,.F.); +#23872 = EDGE_CURVE('',#23873,#23865,#23875,.T.); +#23873 = VERTEX_POINT('',#23874); +#23874 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 2.384184560889E-08)); +#23875 = CIRCLE('',#23876,0.249999996626); +#23876 = AXIS2_PLACEMENT_3D('',#23877,#23878,#23879); +#23877 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 0.250000020468)); +#23878 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23879 = DIRECTION('',(1.,6.982962677686E-15,1.538649743065E-31)); +#23880 = ORIENTED_EDGE('',*,*,#23881,.T.); +#23881 = EDGE_CURVE('',#23873,#23882,#23884,.T.); +#23882 = VERTEX_POINT('',#23883); +#23883 = CARTESIAN_POINT('',(7.499974498734,-2.265036750901, + 2.384184560889E-08)); +#23884 = LINE('',#23885,#23886); +#23885 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 2.384184560889E-08)); +#23886 = VECTOR('',#23887,1.); +#23887 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23888 = ORIENTED_EDGE('',*,*,#23889,.T.); +#23889 = EDGE_CURVE('',#23882,#23890,#23892,.T.); +#23890 = VERTEX_POINT('',#23891); +#23891 = CARTESIAN_POINT('',(7.499974498734,-2.265036750901, + 0.250000020468)); +#23892 = LINE('',#23893,#23894); +#23893 = CARTESIAN_POINT('',(7.499974498734,-2.265036750901, + 1.849999998875)); +#23894 = VECTOR('',#23895,1.); +#23895 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23896 = ORIENTED_EDGE('',*,*,#23897,.F.); +#23897 = EDGE_CURVE('',#23898,#23890,#23900,.T.); +#23898 = VERTEX_POINT('',#23899); +#23899 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 0.250000020468)); +#23900 = LINE('',#23901,#23902); +#23901 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 0.250000020468)); +#23902 = VECTOR('',#23903,1.); +#23903 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23904 = ORIENTED_EDGE('',*,*,#23905,.F.); +#23905 = EDGE_CURVE('',#23906,#23898,#23908,.T.); +#23906 = VERTEX_POINT('',#23907); +#23907 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 2.449999990778)); +#23908 = LINE('',#23909,#23910); +#23909 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 1.849999998875)); +#23910 = VECTOR('',#23911,1.); +#23911 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23912 = ORIENTED_EDGE('',*,*,#23913,.F.); +#23913 = EDGE_CURVE('',#23764,#23906,#23914,.T.); +#23914 = LINE('',#23915,#23916); +#23915 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 2.449999990778)); +#23916 = VECTOR('',#23917,1.); +#23917 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23918 = ORIENTED_EDGE('',*,*,#23791,.F.); +#23919 = PLANE('',#23920); +#23920 = AXIS2_PLACEMENT_3D('',#23921,#23922,#23923); +#23921 = CARTESIAN_POINT('',(6.749974508855,-2.265036750901, + 0.250000020468)); +#23922 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#23923 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#23924 = ADVANCED_FACE('',(#23925),#24000,.F.); +#23925 = FACE_BOUND('',#23926,.T.); +#23926 = EDGE_LOOP('',(#23927,#23935,#23943,#23951,#23959,#23967,#23976, + #23984,#23993,#23999)); +#23927 = ORIENTED_EDGE('',*,*,#23928,.T.); +#23928 = EDGE_CURVE('',#23808,#23929,#23931,.T.); +#23929 = VERTEX_POINT('',#23930); +#23930 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.449999990778)); +#23931 = LINE('',#23932,#23933); +#23932 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.449999990778)); +#23933 = VECTOR('',#23934,1.); +#23934 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23935 = ORIENTED_EDGE('',*,*,#23936,.T.); +#23936 = EDGE_CURVE('',#23929,#23937,#23939,.T.); +#23937 = VERTEX_POINT('',#23938); +#23938 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#23939 = LINE('',#23940,#23941); +#23940 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 1.849999998875)); +#23941 = VECTOR('',#23942,1.); +#23942 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23943 = ORIENTED_EDGE('',*,*,#23944,.T.); +#23944 = EDGE_CURVE('',#23937,#23945,#23947,.T.); +#23945 = VERTEX_POINT('',#23946); +#23946 = CARTESIAN_POINT('',(7.499974498734,-0.365036776542, + 0.250000020468)); +#23947 = LINE('',#23948,#23949); +#23948 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 0.250000020468)); +#23949 = VECTOR('',#23950,1.); +#23950 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23951 = ORIENTED_EDGE('',*,*,#23952,.F.); +#23952 = EDGE_CURVE('',#23953,#23945,#23955,.T.); +#23953 = VERTEX_POINT('',#23954); +#23954 = CARTESIAN_POINT('',(7.499974498734,-0.365036776542, + 2.384185271431E-08)); +#23955 = LINE('',#23956,#23957); +#23956 = CARTESIAN_POINT('',(7.499974498734,-0.365036776542, + 1.849999998875)); +#23957 = VECTOR('',#23958,1.); +#23958 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#23959 = ORIENTED_EDGE('',*,*,#23960,.F.); +#23960 = EDGE_CURVE('',#23961,#23953,#23963,.T.); +#23961 = VERTEX_POINT('',#23962); +#23962 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.384185271431E-08)); +#23963 = LINE('',#23964,#23965); +#23964 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.384185271431E-08)); +#23965 = VECTOR('',#23966,1.); +#23966 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#23967 = ORIENTED_EDGE('',*,*,#23968,.T.); +#23968 = EDGE_CURVE('',#23961,#23969,#23971,.T.); +#23969 = VERTEX_POINT('',#23970); +#23970 = CARTESIAN_POINT('',(6.499974512229,-0.365036776542, + 0.250000020468)); +#23971 = CIRCLE('',#23972,0.249999996626); +#23972 = AXIS2_PLACEMENT_3D('',#23973,#23974,#23975); +#23973 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#23974 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23975 = DIRECTION('',(1.,6.982962677686E-15,1.538649743065E-31)); +#23976 = ORIENTED_EDGE('',*,*,#23977,.F.); +#23977 = EDGE_CURVE('',#23978,#23969,#23980,.T.); +#23978 = VERTEX_POINT('',#23979); +#23979 = CARTESIAN_POINT('',(6.499974512229,-0.365036776542, + 2.449999990778)); +#23980 = LINE('',#23981,#23982); +#23981 = CARTESIAN_POINT('',(6.499974512229,-0.365036776542, + 1.849999998875)); +#23982 = VECTOR('',#23983,1.); +#23983 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#23984 = ORIENTED_EDGE('',*,*,#23985,.T.); +#23985 = EDGE_CURVE('',#23978,#23986,#23988,.T.); +#23986 = VERTEX_POINT('',#23987); +#23987 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.699999987404)); +#23988 = CIRCLE('',#23989,0.249999996626); +#23989 = AXIS2_PLACEMENT_3D('',#23990,#23991,#23992); +#23990 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.449999990778)); +#23991 = DIRECTION('',(-6.982962677686E-15,1.,3.491481338843E-15)); +#23992 = DIRECTION('',(1.,6.982962677686E-15,1.538649743065E-31)); +#23993 = ORIENTED_EDGE('',*,*,#23994,.F.); +#23994 = EDGE_CURVE('',#23817,#23986,#23995,.T.); +#23995 = LINE('',#23996,#23997); +#23996 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.699999987404)); +#23997 = VECTOR('',#23998,1.); +#23998 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#23999 = ORIENTED_EDGE('',*,*,#23816,.F.); +#24000 = PLANE('',#24001); +#24001 = AXIS2_PLACEMENT_3D('',#24002,#24003,#24004); +#24002 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#24003 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#24004 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#24005 = ADVANCED_FACE('',(#24006),#24022,.F.); +#24006 = FACE_BOUND('',#24007,.T.); +#24007 = EDGE_LOOP('',(#24008,#24009,#24015,#24016)); +#24008 = ORIENTED_EDGE('',*,*,#23889,.F.); +#24009 = ORIENTED_EDGE('',*,*,#24010,.F.); +#24010 = EDGE_CURVE('',#23953,#23882,#24011,.T.); +#24011 = LINE('',#24012,#24013); +#24012 = CARTESIAN_POINT('',(7.499974498734,-0.365036776542, + 2.384185271431E-08)); +#24013 = VECTOR('',#24014,1.); +#24014 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24015 = ORIENTED_EDGE('',*,*,#23952,.T.); +#24016 = ORIENTED_EDGE('',*,*,#24017,.T.); +#24017 = EDGE_CURVE('',#23945,#23890,#24018,.T.); +#24018 = LINE('',#24019,#24020); +#24019 = CARTESIAN_POINT('',(7.499974498734,-0.365036776542, + 0.250000020468)); +#24020 = VECTOR('',#24021,1.); +#24021 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24022 = PLANE('',#24023); +#24023 = AXIS2_PLACEMENT_3D('',#24024,#24025,#24026); +#24024 = CARTESIAN_POINT('',(7.499974498734,-0.365036776542, + 1.849999998875)); +#24025 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24026 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#24027 = ADVANCED_FACE('',(#24028),#24039,.F.); +#24028 = FACE_BOUND('',#24029,.T.); +#24029 = EDGE_LOOP('',(#24030,#24031,#24037,#24038)); +#24030 = ORIENTED_EDGE('',*,*,#23881,.F.); +#24031 = ORIENTED_EDGE('',*,*,#24032,.F.); +#24032 = EDGE_CURVE('',#23961,#23873,#24033,.T.); +#24033 = LINE('',#24034,#24035); +#24034 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.384185271431E-08)); +#24035 = VECTOR('',#24036,1.); +#24036 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24037 = ORIENTED_EDGE('',*,*,#23960,.T.); +#24038 = ORIENTED_EDGE('',*,*,#24010,.T.); +#24039 = PLANE('',#24040); +#24040 = AXIS2_PLACEMENT_3D('',#24041,#24042,#24043); +#24041 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.384185271431E-08)); +#24042 = DIRECTION('',(2.517782527956E-29,-3.605607883315E-15,1.)); +#24043 = DIRECTION('',(0.,-1.,-3.605607883315E-15)); +#24044 = ADVANCED_FACE('',(#24045),#24056,.T.); +#24045 = FACE_BOUND('',#24046,.T.); +#24046 = EDGE_LOOP('',(#24047,#24048,#24054,#24055)); +#24047 = ORIENTED_EDGE('',*,*,#23872,.T.); +#24048 = ORIENTED_EDGE('',*,*,#24049,.F.); +#24049 = EDGE_CURVE('',#23969,#23865,#24050,.T.); +#24050 = LINE('',#24051,#24052); +#24051 = CARTESIAN_POINT('',(6.499974512229,-0.365036776542, + 0.250000020468)); +#24052 = VECTOR('',#24053,1.); +#24053 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24054 = ORIENTED_EDGE('',*,*,#23968,.F.); +#24055 = ORIENTED_EDGE('',*,*,#24032,.T.); +#24056 = CYLINDRICAL_SURFACE('',#24057,0.249999996626); +#24057 = AXIS2_PLACEMENT_3D('',#24058,#24059,#24060); +#24058 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#24059 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24060 = DIRECTION('',(-5.633823066543E-31,-3.605607883315E-15,1.)); +#24061 = ADVANCED_FACE('',(#24062),#24073,.F.); +#24062 = FACE_BOUND('',#24063,.T.); +#24063 = EDGE_LOOP('',(#24064,#24065,#24071,#24072)); +#24064 = ORIENTED_EDGE('',*,*,#23864,.F.); +#24065 = ORIENTED_EDGE('',*,*,#24066,.F.); +#24066 = EDGE_CURVE('',#23978,#23856,#24067,.T.); +#24067 = LINE('',#24068,#24069); +#24068 = CARTESIAN_POINT('',(6.499974512229,-0.365036776542, + 2.449999990778)); +#24069 = VECTOR('',#24070,1.); +#24070 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24071 = ORIENTED_EDGE('',*,*,#23977,.T.); +#24072 = ORIENTED_EDGE('',*,*,#24049,.T.); +#24073 = PLANE('',#24074); +#24074 = AXIS2_PLACEMENT_3D('',#24075,#24076,#24077); +#24075 = CARTESIAN_POINT('',(6.499974512229,-0.365036776542, + 1.849999998875)); +#24076 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#24077 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#24078 = ADVANCED_FACE('',(#24079),#24090,.T.); +#24079 = FACE_BOUND('',#24080,.T.); +#24080 = EDGE_LOOP('',(#24081,#24082,#24088,#24089)); +#24081 = ORIENTED_EDGE('',*,*,#23855,.T.); +#24082 = ORIENTED_EDGE('',*,*,#24083,.F.); +#24083 = EDGE_CURVE('',#23986,#23848,#24084,.T.); +#24084 = LINE('',#24085,#24086); +#24085 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.699999987404)); +#24086 = VECTOR('',#24087,1.); +#24087 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24088 = ORIENTED_EDGE('',*,*,#23985,.F.); +#24089 = ORIENTED_EDGE('',*,*,#24066,.T.); +#24090 = CYLINDRICAL_SURFACE('',#24091,0.249999996626); +#24091 = AXIS2_PLACEMENT_3D('',#24092,#24093,#24094); +#24092 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.449999990778)); +#24093 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24094 = DIRECTION('',(-5.633823066543E-31,-3.605607883315E-15,1.)); +#24095 = ADVANCED_FACE('',(#24096),#24109,.F.); +#24096 = FACE_BOUND('',#24097,.T.); +#24097 = EDGE_LOOP('',(#24098,#24099,#24100,#24101,#24102,#24108)); +#24098 = ORIENTED_EDGE('',*,*,#23994,.T.); +#24099 = ORIENTED_EDGE('',*,*,#24083,.T.); +#24100 = ORIENTED_EDGE('',*,*,#23847,.F.); +#24101 = ORIENTED_EDGE('',*,*,#23782,.F.); +#24102 = ORIENTED_EDGE('',*,*,#24103,.F.); +#24103 = EDGE_CURVE('',#23825,#23775,#24104,.T.); +#24104 = LINE('',#24105,#24106); +#24105 = CARTESIAN_POINT('',(7.099974504132,-0.365036776542, + 2.699999987404)); +#24106 = VECTOR('',#24107,1.); +#24107 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24108 = ORIENTED_EDGE('',*,*,#23824,.F.); +#24109 = PLANE('',#24110); +#24110 = AXIS2_PLACEMENT_3D('',#24111,#24112,#24113); +#24111 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.699999987404)); +#24112 = DIRECTION('',(-2.517782527956E-29,3.605607883315E-15,-1.)); +#24113 = DIRECTION('',(-1.,0.,2.517782527956E-29)); +#24114 = ADVANCED_FACE('',(#24115),#24126,.F.); +#24115 = FACE_BOUND('',#24116,.T.); +#24116 = EDGE_LOOP('',(#24117,#24118,#24119,#24125)); +#24117 = ORIENTED_EDGE('',*,*,#24103,.T.); +#24118 = ORIENTED_EDGE('',*,*,#23774,.F.); +#24119 = ORIENTED_EDGE('',*,*,#24120,.F.); +#24120 = EDGE_CURVE('',#23806,#23766,#24121,.T.); +#24121 = LINE('',#24122,#24123); +#24122 = CARTESIAN_POINT('',(7.099974504132,-0.365036776542, + 2.449999990778)); +#24123 = VECTOR('',#24124,1.); +#24124 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24125 = ORIENTED_EDGE('',*,*,#23833,.F.); +#24126 = PLANE('',#24127); +#24127 = AXIS2_PLACEMENT_3D('',#24128,#24129,#24130); +#24128 = CARTESIAN_POINT('',(7.099974504132,-0.365036776542, + 1.849999998875)); +#24129 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24130 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#24131 = ADVANCED_FACE('',(#24132),#24145,.T.); +#24132 = FACE_BOUND('',#24133,.T.); +#24133 = EDGE_LOOP('',(#24134,#24135,#24136,#24137,#24143,#24144)); +#24134 = ORIENTED_EDGE('',*,*,#24120,.T.); +#24135 = ORIENTED_EDGE('',*,*,#23763,.F.); +#24136 = ORIENTED_EDGE('',*,*,#23913,.T.); +#24137 = ORIENTED_EDGE('',*,*,#24138,.F.); +#24138 = EDGE_CURVE('',#23929,#23906,#24139,.T.); +#24139 = LINE('',#24140,#24141); +#24140 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 2.449999990778)); +#24141 = VECTOR('',#24142,1.); +#24142 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24143 = ORIENTED_EDGE('',*,*,#23928,.F.); +#24144 = ORIENTED_EDGE('',*,*,#23805,.F.); +#24145 = PLANE('',#24146); +#24146 = AXIS2_PLACEMENT_3D('',#24147,#24148,#24149); +#24147 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.449999990778)); +#24148 = DIRECTION('',(-2.517782527956E-29,3.605607883315E-15,-1.)); +#24149 = DIRECTION('',(-1.,0.,2.517782527956E-29)); +#24150 = ADVANCED_FACE('',(#24151),#24162,.T.); +#24151 = FACE_BOUND('',#24152,.T.); +#24152 = EDGE_LOOP('',(#24153,#24154,#24160,#24161)); +#24153 = ORIENTED_EDGE('',*,*,#23905,.T.); +#24154 = ORIENTED_EDGE('',*,*,#24155,.F.); +#24155 = EDGE_CURVE('',#23937,#23898,#24156,.T.); +#24156 = LINE('',#24157,#24158); +#24157 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 0.250000020468)); +#24158 = VECTOR('',#24159,1.); +#24159 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24160 = ORIENTED_EDGE('',*,*,#23936,.F.); +#24161 = ORIENTED_EDGE('',*,*,#24138,.T.); +#24162 = PLANE('',#24163); +#24163 = AXIS2_PLACEMENT_3D('',#24164,#24165,#24166); +#24164 = CARTESIAN_POINT('',(6.749974508855,-0.365036776542, + 1.849999998875)); +#24165 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#24166 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#24167 = ADVANCED_FACE('',(#24168),#24174,.T.); +#24168 = FACE_BOUND('',#24169,.T.); +#24169 = EDGE_LOOP('',(#24170,#24171,#24172,#24173)); +#24170 = ORIENTED_EDGE('',*,*,#23897,.T.); +#24171 = ORIENTED_EDGE('',*,*,#24017,.F.); +#24172 = ORIENTED_EDGE('',*,*,#23944,.F.); +#24173 = ORIENTED_EDGE('',*,*,#24155,.T.); +#24174 = PLANE('',#24175); +#24175 = AXIS2_PLACEMENT_3D('',#24176,#24177,#24178); +#24176 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 0.250000020468)); +#24177 = DIRECTION('',(2.517782527956E-29,-3.605607883315E-15,1.)); +#24178 = DIRECTION('',(0.,-1.,-3.605607883315E-15)); +#24179 = MANIFOLD_SOLID_BREP('',#24180); +#24180 = CLOSED_SHELL('',(#24181,#24223,#24265,#24346,#24427,#24449, + #24466,#24483,#24500,#24517,#24536,#24553,#24572,#24589)); +#24181 = ADVANCED_FACE('',(#24182),#24218,.T.); +#24182 = FACE_BOUND('',#24183,.T.); +#24183 = EDGE_LOOP('',(#24184,#24195,#24203,#24212)); +#24184 = ORIENTED_EDGE('',*,*,#24185,.F.); +#24185 = EDGE_CURVE('',#24186,#24188,#24190,.T.); +#24186 = VERTEX_POINT('',#24187); +#24187 = CARTESIAN_POINT('',(-6.900025306933,-2.265036750901, + 2.449999990778)); +#24188 = VERTEX_POINT('',#24189); +#24189 = CARTESIAN_POINT('',(-7.100025304234,-2.0650367536, + 2.449999990778)); +#24190 = CIRCLE('',#24191,0.199999997301); +#24191 = AXIS2_PLACEMENT_3D('',#24192,#24193,#24194); +#24192 = CARTESIAN_POINT('',(-6.900025306933,-2.0650367536, + 2.449999990778)); +#24193 = DIRECTION('',(-2.517782527956E-29,3.605607883315E-15,-1.)); +#24194 = DIRECTION('',(8.673617496935E-15,-1.,-3.605607883315E-15)); +#24195 = ORIENTED_EDGE('',*,*,#24196,.F.); +#24196 = EDGE_CURVE('',#24197,#24186,#24199,.T.); +#24197 = VERTEX_POINT('',#24198); +#24198 = CARTESIAN_POINT('',(-6.900025306933,-2.265036750901, + 2.699999987404)); +#24199 = LINE('',#24200,#24201); +#24200 = CARTESIAN_POINT('',(-6.900025306933,-2.265036750901, + 2.449999990778)); +#24201 = VECTOR('',#24202,1.); +#24202 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#24203 = ORIENTED_EDGE('',*,*,#24204,.F.); +#24204 = EDGE_CURVE('',#24205,#24197,#24207,.T.); +#24205 = VERTEX_POINT('',#24206); +#24206 = CARTESIAN_POINT('',(-7.100025304234,-2.0650367536, + 2.699999987404)); +#24207 = CIRCLE('',#24208,0.199999997301); +#24208 = AXIS2_PLACEMENT_3D('',#24209,#24210,#24211); +#24209 = CARTESIAN_POINT('',(-6.900025306933,-2.0650367536, + 2.699999987404)); +#24210 = DIRECTION('',(2.517782527956E-29,-3.605607883315E-15,1.)); +#24211 = DIRECTION('',(1.841004762707E-44,-1.,-3.605607883315E-15)); +#24212 = ORIENTED_EDGE('',*,*,#24213,.F.); +#24213 = EDGE_CURVE('',#24188,#24205,#24214,.T.); +#24214 = LINE('',#24215,#24216); +#24215 = CARTESIAN_POINT('',(-7.100025304234,-2.0650367536, + 2.699999987404)); +#24216 = VECTOR('',#24217,1.); +#24217 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#24218 = CYLINDRICAL_SURFACE('',#24219,0.199999997301); +#24219 = AXIS2_PLACEMENT_3D('',#24220,#24221,#24222); +#24220 = CARTESIAN_POINT('',(-6.900025306933,-2.0650367536, + 1.849999998875)); +#24221 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#24222 = DIRECTION('',(8.673617496935E-15,-1.,-3.491481338843E-15)); +#24223 = ADVANCED_FACE('',(#24224),#24260,.T.); +#24224 = FACE_BOUND('',#24225,.T.); +#24225 = EDGE_LOOP('',(#24226,#24237,#24245,#24254)); +#24226 = ORIENTED_EDGE('',*,*,#24227,.F.); +#24227 = EDGE_CURVE('',#24228,#24230,#24232,.T.); +#24228 = VERTEX_POINT('',#24229); +#24229 = CARTESIAN_POINT('',(-7.100025304234,-0.565036773843, + 2.449999990778)); +#24230 = VERTEX_POINT('',#24231); +#24231 = CARTESIAN_POINT('',(-6.900025306933,-0.365036776542, + 2.449999990778)); +#24232 = CIRCLE('',#24233,0.199999997301); +#24233 = AXIS2_PLACEMENT_3D('',#24234,#24235,#24236); +#24234 = CARTESIAN_POINT('',(-6.900025306933,-0.565036773843, + 2.449999990778)); +#24235 = DIRECTION('',(-2.517782527956E-29,3.605607883315E-15,-1.)); +#24236 = DIRECTION('',(8.673617496935E-15,-1.,-3.605607883315E-15)); +#24237 = ORIENTED_EDGE('',*,*,#24238,.F.); +#24238 = EDGE_CURVE('',#24239,#24228,#24241,.T.); +#24239 = VERTEX_POINT('',#24240); +#24240 = CARTESIAN_POINT('',(-7.100025304234,-0.565036773843, + 2.699999987404)); +#24241 = LINE('',#24242,#24243); +#24242 = CARTESIAN_POINT('',(-7.100025304234,-0.565036773843, + 1.849999998875)); +#24243 = VECTOR('',#24244,1.); +#24244 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#24245 = ORIENTED_EDGE('',*,*,#24246,.F.); +#24246 = EDGE_CURVE('',#24247,#24239,#24249,.T.); +#24247 = VERTEX_POINT('',#24248); +#24248 = CARTESIAN_POINT('',(-6.900025306933,-0.365036776542, + 2.699999987404)); +#24249 = CIRCLE('',#24250,0.199999997301); +#24250 = AXIS2_PLACEMENT_3D('',#24251,#24252,#24253); +#24251 = CARTESIAN_POINT('',(-6.900025306933,-0.565036773843, + 2.699999987404)); +#24252 = DIRECTION('',(2.517782527956E-29,-3.605607883315E-15,1.)); +#24253 = DIRECTION('',(8.673617496935E-15,-1.,-3.605607883315E-15)); +#24254 = ORIENTED_EDGE('',*,*,#24255,.F.); +#24255 = EDGE_CURVE('',#24230,#24247,#24256,.T.); +#24256 = LINE('',#24257,#24258); +#24257 = CARTESIAN_POINT('',(-6.900025306933,-0.365036776542, + 0.250000020468)); +#24258 = VECTOR('',#24259,1.); +#24259 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#24260 = CYLINDRICAL_SURFACE('',#24261,0.199999997301); +#24261 = AXIS2_PLACEMENT_3D('',#24262,#24263,#24264); +#24262 = CARTESIAN_POINT('',(-6.900025306933,-0.565036773843, + 0.250000020468)); +#24263 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#24264 = DIRECTION('',(-8.673617496935E-15,1.,3.491481338843E-15)); +#24265 = ADVANCED_FACE('',(#24266),#24341,.T.); +#24266 = FACE_BOUND('',#24267,.T.); +#24267 = EDGE_LOOP('',(#24268,#24276,#24277,#24285,#24293,#24301,#24309, + #24317,#24326,#24334)); +#24268 = ORIENTED_EDGE('',*,*,#24269,.F.); +#24269 = EDGE_CURVE('',#24197,#24270,#24272,.T.); +#24270 = VERTEX_POINT('',#24271); +#24271 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 2.699999987404)); +#24272 = LINE('',#24273,#24274); +#24273 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 2.699999987404)); +#24274 = VECTOR('',#24275,1.); +#24275 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#24276 = ORIENTED_EDGE('',*,*,#24196,.T.); +#24277 = ORIENTED_EDGE('',*,*,#24278,.T.); +#24278 = EDGE_CURVE('',#24186,#24279,#24281,.T.); +#24279 = VERTEX_POINT('',#24280); +#24280 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 2.449999990778)); +#24281 = LINE('',#24282,#24283); +#24282 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 2.449999990778)); +#24283 = VECTOR('',#24284,1.); +#24284 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#24285 = ORIENTED_EDGE('',*,*,#24286,.T.); +#24286 = EDGE_CURVE('',#24279,#24287,#24289,.T.); +#24287 = VERTEX_POINT('',#24288); +#24288 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 0.250000020468)); +#24289 = LINE('',#24290,#24291); +#24290 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 1.849999998875)); +#24291 = VECTOR('',#24292,1.); +#24292 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#24293 = ORIENTED_EDGE('',*,*,#24294,.T.); +#24294 = EDGE_CURVE('',#24287,#24295,#24297,.T.); +#24295 = VERTEX_POINT('',#24296); +#24296 = CARTESIAN_POINT('',(-7.500025298835,-2.265036750901, + 0.250000020468)); +#24297 = LINE('',#24298,#24299); +#24298 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 0.250000020468)); +#24299 = VECTOR('',#24300,1.); +#24300 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24301 = ORIENTED_EDGE('',*,*,#24302,.F.); +#24302 = EDGE_CURVE('',#24303,#24295,#24305,.T.); +#24303 = VERTEX_POINT('',#24304); +#24304 = CARTESIAN_POINT('',(-7.500025298835,-2.265036750901, + 2.384184560889E-08)); +#24305 = LINE('',#24306,#24307); +#24306 = CARTESIAN_POINT('',(-7.500025298835,-2.265036750901, + 1.849999998875)); +#24307 = VECTOR('',#24308,1.); +#24308 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#24309 = ORIENTED_EDGE('',*,*,#24310,.F.); +#24310 = EDGE_CURVE('',#24311,#24303,#24313,.T.); +#24311 = VERTEX_POINT('',#24312); +#24312 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 2.384184560889E-08)); +#24313 = LINE('',#24314,#24315); +#24314 = CARTESIAN_POINT('',(-2.540005077776E-05,-2.265036750901, + 2.384184560889E-08)); +#24315 = VECTOR('',#24316,1.); +#24316 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24317 = ORIENTED_EDGE('',*,*,#24318,.T.); +#24318 = EDGE_CURVE('',#24311,#24319,#24321,.T.); +#24319 = VERTEX_POINT('',#24320); +#24320 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 0.250000020468)); +#24321 = CIRCLE('',#24322,0.249999996626); +#24322 = AXIS2_PLACEMENT_3D('',#24323,#24324,#24325); +#24323 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 0.250000020468)); +#24324 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#24325 = DIRECTION('',(-1.,-6.982962677686E-15,-1.538649743065E-31)); +#24326 = ORIENTED_EDGE('',*,*,#24327,.F.); +#24327 = EDGE_CURVE('',#24328,#24319,#24330,.T.); +#24328 = VERTEX_POINT('',#24329); +#24329 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 2.449999990778)); +#24330 = LINE('',#24331,#24332); +#24331 = CARTESIAN_POINT('',(-6.500025312331,-2.265036750901, + 1.849999998875)); +#24332 = VECTOR('',#24333,1.); +#24333 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#24334 = ORIENTED_EDGE('',*,*,#24335,.T.); +#24335 = EDGE_CURVE('',#24328,#24270,#24336,.T.); +#24336 = CIRCLE('',#24337,0.249999996626); +#24337 = AXIS2_PLACEMENT_3D('',#24338,#24339,#24340); +#24338 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 2.449999990778)); +#24339 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#24340 = DIRECTION('',(-1.,-6.982962677686E-15,-1.538649743065E-31)); +#24341 = PLANE('',#24342); +#24342 = AXIS2_PLACEMENT_3D('',#24343,#24344,#24345); +#24343 = CARTESIAN_POINT('',(-6.750025308957,-2.265036750901, + 0.250000020468)); +#24344 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#24345 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#24346 = ADVANCED_FACE('',(#24347),#24422,.F.); +#24347 = FACE_BOUND('',#24348,.T.); +#24348 = EDGE_LOOP('',(#24349,#24357,#24358,#24366,#24375,#24383,#24392, + #24400,#24408,#24416)); +#24349 = ORIENTED_EDGE('',*,*,#24350,.F.); +#24350 = EDGE_CURVE('',#24230,#24351,#24353,.T.); +#24351 = VERTEX_POINT('',#24352); +#24352 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.449999990778)); +#24353 = LINE('',#24354,#24355); +#24354 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.449999990778)); +#24355 = VECTOR('',#24356,1.); +#24356 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#24357 = ORIENTED_EDGE('',*,*,#24255,.T.); +#24358 = ORIENTED_EDGE('',*,*,#24359,.T.); +#24359 = EDGE_CURVE('',#24247,#24360,#24362,.T.); +#24360 = VERTEX_POINT('',#24361); +#24361 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.699999987404)); +#24362 = LINE('',#24363,#24364); +#24363 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.699999987404)); +#24364 = VECTOR('',#24365,1.); +#24365 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#24366 = ORIENTED_EDGE('',*,*,#24367,.F.); +#24367 = EDGE_CURVE('',#24368,#24360,#24370,.T.); +#24368 = VERTEX_POINT('',#24369); +#24369 = CARTESIAN_POINT('',(-6.500025312331,-0.365036776542, + 2.449999990778)); +#24370 = CIRCLE('',#24371,0.249999996626); +#24371 = AXIS2_PLACEMENT_3D('',#24372,#24373,#24374); +#24372 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.449999990778)); +#24373 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#24374 = DIRECTION('',(-1.,-6.982962677686E-15,-1.538649743065E-31)); +#24375 = ORIENTED_EDGE('',*,*,#24376,.T.); +#24376 = EDGE_CURVE('',#24368,#24377,#24379,.T.); +#24377 = VERTEX_POINT('',#24378); +#24378 = CARTESIAN_POINT('',(-6.500025312331,-0.365036776542, + 0.250000020468)); +#24379 = LINE('',#24380,#24381); +#24380 = CARTESIAN_POINT('',(-6.500025312331,-0.365036776542, + 1.849999998875)); +#24381 = VECTOR('',#24382,1.); +#24382 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#24383 = ORIENTED_EDGE('',*,*,#24384,.F.); +#24384 = EDGE_CURVE('',#24385,#24377,#24387,.T.); +#24385 = VERTEX_POINT('',#24386); +#24386 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.384185271431E-08)); +#24387 = CIRCLE('',#24388,0.249999996626); +#24388 = AXIS2_PLACEMENT_3D('',#24389,#24390,#24391); +#24389 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#24390 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#24391 = DIRECTION('',(-1.,-6.982962677686E-15,-1.538649743065E-31)); +#24392 = ORIENTED_EDGE('',*,*,#24393,.T.); +#24393 = EDGE_CURVE('',#24385,#24394,#24396,.T.); +#24394 = VERTEX_POINT('',#24395); +#24395 = CARTESIAN_POINT('',(-7.500025298835,-0.365036776542, + 2.384185271431E-08)); +#24396 = LINE('',#24397,#24398); +#24397 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.384185271431E-08)); +#24398 = VECTOR('',#24399,1.); +#24399 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24400 = ORIENTED_EDGE('',*,*,#24401,.T.); +#24401 = EDGE_CURVE('',#24394,#24402,#24404,.T.); +#24402 = VERTEX_POINT('',#24403); +#24403 = CARTESIAN_POINT('',(-7.500025298835,-0.365036776542, + 0.250000020468)); +#24404 = LINE('',#24405,#24406); +#24405 = CARTESIAN_POINT('',(-7.500025298835,-0.365036776542, + 1.849999998875)); +#24406 = VECTOR('',#24407,1.); +#24407 = DIRECTION('',(2.438088387898E-29,-3.491481338843E-15,1.)); +#24408 = ORIENTED_EDGE('',*,*,#24409,.F.); +#24409 = EDGE_CURVE('',#24410,#24402,#24412,.T.); +#24410 = VERTEX_POINT('',#24411); +#24411 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#24412 = LINE('',#24413,#24414); +#24413 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 0.250000020468)); +#24414 = VECTOR('',#24415,1.); +#24415 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24416 = ORIENTED_EDGE('',*,*,#24417,.F.); +#24417 = EDGE_CURVE('',#24351,#24410,#24418,.T.); +#24418 = LINE('',#24419,#24420); +#24419 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 1.849999998875)); +#24420 = VECTOR('',#24421,1.); +#24421 = DIRECTION('',(-2.438088387898E-29,3.491481338843E-15,-1.)); +#24422 = PLANE('',#24423); +#24423 = AXIS2_PLACEMENT_3D('',#24424,#24425,#24426); +#24424 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#24425 = DIRECTION('',(6.982962677686E-15,-1.,-3.491481338843E-15)); +#24426 = DIRECTION('',(0.,3.491481338843E-15,-1.)); +#24427 = ADVANCED_FACE('',(#24428),#24444,.F.); +#24428 = FACE_BOUND('',#24429,.T.); +#24429 = EDGE_LOOP('',(#24430,#24431,#24437,#24438)); +#24430 = ORIENTED_EDGE('',*,*,#24302,.T.); +#24431 = ORIENTED_EDGE('',*,*,#24432,.F.); +#24432 = EDGE_CURVE('',#24402,#24295,#24433,.T.); +#24433 = LINE('',#24434,#24435); +#24434 = CARTESIAN_POINT('',(-7.500025298835,-0.365036776542, + 0.250000020468)); +#24435 = VECTOR('',#24436,1.); +#24436 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24437 = ORIENTED_EDGE('',*,*,#24401,.F.); +#24438 = ORIENTED_EDGE('',*,*,#24439,.T.); +#24439 = EDGE_CURVE('',#24394,#24303,#24440,.T.); +#24440 = LINE('',#24441,#24442); +#24441 = CARTESIAN_POINT('',(-7.500025298835,-0.365036776542, + 2.384185271431E-08)); +#24442 = VECTOR('',#24443,1.); +#24443 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24444 = PLANE('',#24445); +#24445 = AXIS2_PLACEMENT_3D('',#24446,#24447,#24448); +#24446 = CARTESIAN_POINT('',(-7.500025298835,-0.365036776542, + 1.849999998875)); +#24447 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#24448 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#24449 = ADVANCED_FACE('',(#24450),#24461,.F.); +#24450 = FACE_BOUND('',#24451,.T.); +#24451 = EDGE_LOOP('',(#24452,#24453,#24454,#24455)); +#24452 = ORIENTED_EDGE('',*,*,#24310,.T.); +#24453 = ORIENTED_EDGE('',*,*,#24439,.F.); +#24454 = ORIENTED_EDGE('',*,*,#24393,.F.); +#24455 = ORIENTED_EDGE('',*,*,#24456,.T.); +#24456 = EDGE_CURVE('',#24385,#24311,#24457,.T.); +#24457 = LINE('',#24458,#24459); +#24458 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.384185271431E-08)); +#24459 = VECTOR('',#24460,1.); +#24460 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24461 = PLANE('',#24462); +#24462 = AXIS2_PLACEMENT_3D('',#24463,#24464,#24465); +#24463 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.384185271431E-08)); +#24464 = DIRECTION('',(2.517782527956E-29,-3.605607883315E-15,1.)); +#24465 = DIRECTION('',(0.,-1.,-3.605607883315E-15)); +#24466 = ADVANCED_FACE('',(#24467),#24478,.T.); +#24467 = FACE_BOUND('',#24468,.T.); +#24468 = EDGE_LOOP('',(#24469,#24470,#24471,#24472)); +#24469 = ORIENTED_EDGE('',*,*,#24318,.F.); +#24470 = ORIENTED_EDGE('',*,*,#24456,.F.); +#24471 = ORIENTED_EDGE('',*,*,#24384,.T.); +#24472 = ORIENTED_EDGE('',*,*,#24473,.T.); +#24473 = EDGE_CURVE('',#24377,#24319,#24474,.T.); +#24474 = LINE('',#24475,#24476); +#24475 = CARTESIAN_POINT('',(-6.500025312331,-0.365036776542, + 0.250000020468)); +#24476 = VECTOR('',#24477,1.); +#24477 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24478 = CYLINDRICAL_SURFACE('',#24479,0.249999996626); +#24479 = AXIS2_PLACEMENT_3D('',#24480,#24481,#24482); +#24480 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#24481 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24482 = DIRECTION('',(-5.633823066543E-31,-3.605607883315E-15,1.)); +#24483 = ADVANCED_FACE('',(#24484),#24495,.F.); +#24484 = FACE_BOUND('',#24485,.T.); +#24485 = EDGE_LOOP('',(#24486,#24487,#24488,#24489)); +#24486 = ORIENTED_EDGE('',*,*,#24327,.T.); +#24487 = ORIENTED_EDGE('',*,*,#24473,.F.); +#24488 = ORIENTED_EDGE('',*,*,#24376,.F.); +#24489 = ORIENTED_EDGE('',*,*,#24490,.T.); +#24490 = EDGE_CURVE('',#24368,#24328,#24491,.T.); +#24491 = LINE('',#24492,#24493); +#24492 = CARTESIAN_POINT('',(-6.500025312331,-0.365036776542, + 2.449999990778)); +#24493 = VECTOR('',#24494,1.); +#24494 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24495 = PLANE('',#24496); +#24496 = AXIS2_PLACEMENT_3D('',#24497,#24498,#24499); +#24497 = CARTESIAN_POINT('',(-6.500025312331,-0.365036776542, + 1.849999998875)); +#24498 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24499 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#24500 = ADVANCED_FACE('',(#24501),#24512,.T.); +#24501 = FACE_BOUND('',#24502,.T.); +#24502 = EDGE_LOOP('',(#24503,#24504,#24505,#24506)); +#24503 = ORIENTED_EDGE('',*,*,#24335,.F.); +#24504 = ORIENTED_EDGE('',*,*,#24490,.F.); +#24505 = ORIENTED_EDGE('',*,*,#24367,.T.); +#24506 = ORIENTED_EDGE('',*,*,#24507,.T.); +#24507 = EDGE_CURVE('',#24360,#24270,#24508,.T.); +#24508 = LINE('',#24509,#24510); +#24509 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.699999987404)); +#24510 = VECTOR('',#24511,1.); +#24511 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24512 = CYLINDRICAL_SURFACE('',#24513,0.249999996626); +#24513 = AXIS2_PLACEMENT_3D('',#24514,#24515,#24516); +#24514 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.449999990778)); +#24515 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24516 = DIRECTION('',(-5.633823066543E-31,-3.605607883315E-15,1.)); +#24517 = ADVANCED_FACE('',(#24518),#24531,.F.); +#24518 = FACE_BOUND('',#24519,.T.); +#24519 = EDGE_LOOP('',(#24520,#24521,#24522,#24528,#24529,#24530)); +#24520 = ORIENTED_EDGE('',*,*,#24359,.F.); +#24521 = ORIENTED_EDGE('',*,*,#24246,.T.); +#24522 = ORIENTED_EDGE('',*,*,#24523,.T.); +#24523 = EDGE_CURVE('',#24239,#24205,#24524,.T.); +#24524 = LINE('',#24525,#24526); +#24525 = CARTESIAN_POINT('',(-7.100025304234,-0.365036776542, + 2.699999987404)); +#24526 = VECTOR('',#24527,1.); +#24527 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24528 = ORIENTED_EDGE('',*,*,#24204,.T.); +#24529 = ORIENTED_EDGE('',*,*,#24269,.T.); +#24530 = ORIENTED_EDGE('',*,*,#24507,.F.); +#24531 = PLANE('',#24532); +#24532 = AXIS2_PLACEMENT_3D('',#24533,#24534,#24535); +#24533 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.699999987404)); +#24534 = DIRECTION('',(-2.517782527956E-29,3.605607883315E-15,-1.)); +#24535 = DIRECTION('',(-1.,0.,2.517782527956E-29)); +#24536 = ADVANCED_FACE('',(#24537),#24548,.F.); +#24537 = FACE_BOUND('',#24538,.T.); +#24538 = EDGE_LOOP('',(#24539,#24540,#24541,#24547)); +#24539 = ORIENTED_EDGE('',*,*,#24523,.F.); +#24540 = ORIENTED_EDGE('',*,*,#24238,.T.); +#24541 = ORIENTED_EDGE('',*,*,#24542,.T.); +#24542 = EDGE_CURVE('',#24228,#24188,#24543,.T.); +#24543 = LINE('',#24544,#24545); +#24544 = CARTESIAN_POINT('',(-7.100025304234,-0.365036776542, + 2.449999990778)); +#24545 = VECTOR('',#24546,1.); +#24546 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24547 = ORIENTED_EDGE('',*,*,#24213,.T.); +#24548 = PLANE('',#24549); +#24549 = AXIS2_PLACEMENT_3D('',#24550,#24551,#24552); +#24550 = CARTESIAN_POINT('',(-7.100025304234,-0.365036776542, + 1.849999998875)); +#24551 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#24552 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#24553 = ADVANCED_FACE('',(#24554),#24567,.T.); +#24554 = FACE_BOUND('',#24555,.T.); +#24555 = EDGE_LOOP('',(#24556,#24557,#24558,#24559,#24565,#24566)); +#24556 = ORIENTED_EDGE('',*,*,#24542,.F.); +#24557 = ORIENTED_EDGE('',*,*,#24227,.T.); +#24558 = ORIENTED_EDGE('',*,*,#24350,.T.); +#24559 = ORIENTED_EDGE('',*,*,#24560,.T.); +#24560 = EDGE_CURVE('',#24351,#24279,#24561,.T.); +#24561 = LINE('',#24562,#24563); +#24562 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 2.449999990778)); +#24563 = VECTOR('',#24564,1.); +#24564 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24565 = ORIENTED_EDGE('',*,*,#24278,.F.); +#24566 = ORIENTED_EDGE('',*,*,#24185,.T.); +#24567 = PLANE('',#24568); +#24568 = AXIS2_PLACEMENT_3D('',#24569,#24570,#24571); +#24569 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 2.449999990778)); +#24570 = DIRECTION('',(-2.517782527956E-29,3.605607883315E-15,-1.)); +#24571 = DIRECTION('',(-1.,0.,2.517782527956E-29)); +#24572 = ADVANCED_FACE('',(#24573),#24584,.T.); +#24573 = FACE_BOUND('',#24574,.T.); +#24574 = EDGE_LOOP('',(#24575,#24576,#24577,#24578)); +#24575 = ORIENTED_EDGE('',*,*,#24286,.F.); +#24576 = ORIENTED_EDGE('',*,*,#24560,.F.); +#24577 = ORIENTED_EDGE('',*,*,#24417,.T.); +#24578 = ORIENTED_EDGE('',*,*,#24579,.T.); +#24579 = EDGE_CURVE('',#24410,#24287,#24580,.T.); +#24580 = LINE('',#24581,#24582); +#24581 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 0.250000020468)); +#24582 = VECTOR('',#24583,1.); +#24583 = DIRECTION('',(6.982962677686E-15,-1.,-3.605607883315E-15)); +#24584 = PLANE('',#24585); +#24585 = AXIS2_PLACEMENT_3D('',#24586,#24587,#24588); +#24586 = CARTESIAN_POINT('',(-6.750025308957,-0.365036776542, + 1.849999998875)); +#24587 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24588 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#24589 = ADVANCED_FACE('',(#24590),#24596,.T.); +#24590 = FACE_BOUND('',#24591,.T.); +#24591 = EDGE_LOOP('',(#24592,#24593,#24594,#24595)); +#24592 = ORIENTED_EDGE('',*,*,#24294,.F.); +#24593 = ORIENTED_EDGE('',*,*,#24579,.F.); +#24594 = ORIENTED_EDGE('',*,*,#24409,.T.); +#24595 = ORIENTED_EDGE('',*,*,#24432,.T.); +#24596 = PLANE('',#24597); +#24597 = AXIS2_PLACEMENT_3D('',#24598,#24599,#24600); +#24598 = CARTESIAN_POINT('',(-2.540005079102E-05,-0.365036776542, + 0.250000020468)); +#24599 = DIRECTION('',(2.517782527956E-29,-3.605607883315E-15,1.)); +#24600 = DIRECTION('',(0.,-1.,-3.605607883315E-15)); +#24601 = MANIFOLD_SOLID_BREP('',#24602); +#24602 = CLOSED_SHELL('',(#24603,#24659,#24715,#24737,#24754,#24771, + #24788,#24805)); +#24603 = ADVANCED_FACE('',(#24604),#24654,.T.); +#24604 = FACE_BOUND('',#24605,.T.); +#24605 = EDGE_LOOP('',(#24606,#24616,#24624,#24632,#24640,#24648)); +#24606 = ORIENTED_EDGE('',*,*,#24607,.F.); +#24607 = EDGE_CURVE('',#24608,#24610,#24612,.T.); +#24608 = VERTEX_POINT('',#24609); +#24609 = CARTESIAN_POINT('',(7.499974498734,-0.97856059437,0.98919668671 + )); +#24610 = VERTEX_POINT('',#24611); +#24611 = CARTESIAN_POINT('',(7.499974498734,-0.97856059437, + 1.007745967687)); +#24612 = LINE('',#24613,#24614); +#24613 = CARTESIAN_POINT('',(7.499974498734,-0.97856059437, + 1.007745967687)); +#24614 = VECTOR('',#24615,1.); +#24615 = DIRECTION('',(0.,0.,1.)); +#24616 = ORIENTED_EDGE('',*,*,#24617,.F.); +#24617 = EDGE_CURVE('',#24618,#24608,#24620,.T.); +#24618 = VERTEX_POINT('',#24619); +#24619 = CARTESIAN_POINT('',(7.499974498734,-1.064361416467, + 0.98919668671)); +#24620 = LINE('',#24621,#24622); +#24621 = CARTESIAN_POINT('',(7.499974498734,-0.97856059437,0.98919668671 + )); +#24622 = VECTOR('',#24623,1.); +#24623 = DIRECTION('',(-1.010901416892E-14,1.,3.790880313346E-15)); +#24624 = ORIENTED_EDGE('',*,*,#24625,.F.); +#24625 = EDGE_CURVE('',#24626,#24618,#24628,.T.); +#24626 = VERTEX_POINT('',#24627); +#24627 = CARTESIAN_POINT('',(7.499974498734,-1.064361416467, + 1.151898003259)); +#24628 = LINE('',#24629,#24630); +#24629 = CARTESIAN_POINT('',(7.499974498734,-1.064361416467, + 0.98919668671)); +#24630 = VECTOR('',#24631,1.); +#24631 = DIRECTION('',(0.,2.665503096958E-15,-1.)); +#24632 = ORIENTED_EDGE('',*,*,#24633,.F.); +#24633 = EDGE_CURVE('',#24634,#24626,#24636,.T.); +#24634 = VERTEX_POINT('',#24635); +#24635 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 1.151898003259)); +#24636 = LINE('',#24637,#24638); +#24637 = CARTESIAN_POINT('',(7.499974498734,-1.064361416467, + 1.151898003259)); +#24638 = VECTOR('',#24639,1.); +#24639 = DIRECTION('',(0.,-1.,0.)); +#24640 = ORIENTED_EDGE('',*,*,#24641,.F.); +#24641 = EDGE_CURVE('',#24642,#24634,#24644,.T.); +#24642 = VERTEX_POINT('',#24643); +#24643 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 1.007745967687)); +#24644 = LINE('',#24645,#24646); +#24645 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 1.151898003259)); +#24646 = VECTOR('',#24647,1.); +#24647 = DIRECTION('',(0.,-3.008496282544E-15,1.)); +#24648 = ORIENTED_EDGE('',*,*,#24649,.F.); +#24649 = EDGE_CURVE('',#24610,#24642,#24650,.T.); +#24650 = LINE('',#24651,#24652); +#24651 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 1.007745967687)); +#24652 = VECTOR('',#24653,1.); +#24653 = DIRECTION('',(1.338568435843E-14,-1.,-3.346421089607E-15)); +#24654 = PLANE('',#24655); +#24655 = AXIS2_PLACEMENT_3D('',#24656,#24657,#24658); +#24656 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 1.849999998875)); +#24657 = DIRECTION('',(-1.,-1.010901416892E-14,0.)); +#24658 = DIRECTION('',(-1.010901416892E-14,1.,0.)); +#24659 = ADVANCED_FACE('',(#24660),#24710,.F.); +#24660 = FACE_BOUND('',#24661,.T.); +#24661 = EDGE_LOOP('',(#24662,#24672,#24680,#24688,#24696,#24704)); +#24662 = ORIENTED_EDGE('',*,*,#24663,.T.); +#24663 = EDGE_CURVE('',#24664,#24666,#24668,.T.); +#24664 = VERTEX_POINT('',#24665); +#24665 = CARTESIAN_POINT('',(7.50097449872,-0.97856059437,0.98919668671) + ); +#24666 = VERTEX_POINT('',#24667); +#24667 = CARTESIAN_POINT('',(7.50097449872,-0.97856059437,1.007745967687 + )); +#24668 = LINE('',#24669,#24670); +#24669 = CARTESIAN_POINT('',(7.50097449872,-0.97856059437,1.007745967687 + )); +#24670 = VECTOR('',#24671,1.); +#24671 = DIRECTION('',(0.,0.,1.)); +#24672 = ORIENTED_EDGE('',*,*,#24673,.T.); +#24673 = EDGE_CURVE('',#24666,#24674,#24676,.T.); +#24674 = VERTEX_POINT('',#24675); +#24675 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 1.007745967687)); +#24676 = LINE('',#24677,#24678); +#24677 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 1.007745967687)); +#24678 = VECTOR('',#24679,1.); +#24679 = DIRECTION('',(1.338568435843E-14,-1.,-3.346421089607E-15)); +#24680 = ORIENTED_EDGE('',*,*,#24681,.T.); +#24681 = EDGE_CURVE('',#24674,#24682,#24684,.T.); +#24682 = VERTEX_POINT('',#24683); +#24683 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 1.151898003259)); +#24684 = LINE('',#24685,#24686); +#24685 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 1.151898003259)); +#24686 = VECTOR('',#24687,1.); +#24687 = DIRECTION('',(0.,-3.008496282544E-15,1.)); +#24688 = ORIENTED_EDGE('',*,*,#24689,.T.); +#24689 = EDGE_CURVE('',#24682,#24690,#24692,.T.); +#24690 = VERTEX_POINT('',#24691); +#24691 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 1.151898003259)); +#24692 = LINE('',#24693,#24694); +#24693 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 1.151898003259)); +#24694 = VECTOR('',#24695,1.); +#24695 = DIRECTION('',(0.,-1.,0.)); +#24696 = ORIENTED_EDGE('',*,*,#24697,.T.); +#24697 = EDGE_CURVE('',#24690,#24698,#24700,.T.); +#24698 = VERTEX_POINT('',#24699); +#24699 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467,0.98919668671 + )); +#24700 = LINE('',#24701,#24702); +#24701 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467,0.98919668671 + )); +#24702 = VECTOR('',#24703,1.); +#24703 = DIRECTION('',(0.,2.665503096958E-15,-1.)); +#24704 = ORIENTED_EDGE('',*,*,#24705,.T.); +#24705 = EDGE_CURVE('',#24698,#24664,#24706,.T.); +#24706 = LINE('',#24707,#24708); +#24707 = CARTESIAN_POINT('',(7.50097449872,-0.97856059437,0.98919668671) + ); +#24708 = VECTOR('',#24709,1.); +#24709 = DIRECTION('',(-1.010901416892E-14,1.,3.790880313346E-15)); +#24710 = PLANE('',#24711); +#24711 = AXIS2_PLACEMENT_3D('',#24712,#24713,#24714); +#24712 = CARTESIAN_POINT('',(7.50097449872,0.934963205914,1.849999998875 + )); +#24713 = DIRECTION('',(-1.,-1.010901416892E-14,0.)); +#24714 = DIRECTION('',(-1.010901416892E-14,1.,0.)); +#24715 = ADVANCED_FACE('',(#24716),#24732,.F.); +#24716 = FACE_BOUND('',#24717,.T.); +#24717 = EDGE_LOOP('',(#24718,#24719,#24725,#24726)); +#24718 = ORIENTED_EDGE('',*,*,#24617,.T.); +#24719 = ORIENTED_EDGE('',*,*,#24720,.F.); +#24720 = EDGE_CURVE('',#24664,#24608,#24721,.T.); +#24721 = LINE('',#24722,#24723); +#24722 = CARTESIAN_POINT('',(7.50097449872,-0.97856059437,0.98919668671) + ); +#24723 = VECTOR('',#24724,1.); +#24724 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24725 = ORIENTED_EDGE('',*,*,#24705,.F.); +#24726 = ORIENTED_EDGE('',*,*,#24727,.T.); +#24727 = EDGE_CURVE('',#24698,#24618,#24728,.T.); +#24728 = LINE('',#24729,#24730); +#24729 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467,0.98919668671 + )); +#24730 = VECTOR('',#24731,1.); +#24731 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24732 = PLANE('',#24733); +#24733 = AXIS2_PLACEMENT_3D('',#24734,#24735,#24736); +#24734 = CARTESIAN_POINT('',(7.50097449872,-0.97856059437,0.98919668671) + ); +#24735 = DIRECTION('',(2.647157574367E-29,-3.790880313346E-15,1.)); +#24736 = DIRECTION('',(0.,-1.,-3.790880313346E-15)); +#24737 = ADVANCED_FACE('',(#24738),#24749,.F.); +#24738 = FACE_BOUND('',#24739,.T.); +#24739 = EDGE_LOOP('',(#24740,#24741,#24742,#24743)); +#24740 = ORIENTED_EDGE('',*,*,#24625,.T.); +#24741 = ORIENTED_EDGE('',*,*,#24727,.F.); +#24742 = ORIENTED_EDGE('',*,*,#24697,.F.); +#24743 = ORIENTED_EDGE('',*,*,#24744,.T.); +#24744 = EDGE_CURVE('',#24690,#24626,#24745,.T.); +#24745 = LINE('',#24746,#24747); +#24746 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 1.151898003259)); +#24747 = VECTOR('',#24748,1.); +#24748 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24749 = PLANE('',#24750); +#24750 = AXIS2_PLACEMENT_3D('',#24751,#24752,#24753); +#24751 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467,0.98919668671 + )); +#24752 = DIRECTION('',(-6.982962677686E-15,1.,2.665503096958E-15)); +#24753 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#24754 = ADVANCED_FACE('',(#24755),#24766,.F.); +#24755 = FACE_BOUND('',#24756,.T.); +#24756 = EDGE_LOOP('',(#24757,#24758,#24759,#24760)); +#24757 = ORIENTED_EDGE('',*,*,#24633,.T.); +#24758 = ORIENTED_EDGE('',*,*,#24744,.F.); +#24759 = ORIENTED_EDGE('',*,*,#24689,.F.); +#24760 = ORIENTED_EDGE('',*,*,#24761,.T.); +#24761 = EDGE_CURVE('',#24682,#24634,#24762,.T.); +#24762 = LINE('',#24763,#24764); +#24763 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 1.151898003259)); +#24764 = VECTOR('',#24765,1.); +#24765 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24766 = PLANE('',#24767); +#24767 = AXIS2_PLACEMENT_3D('',#24768,#24769,#24770); +#24768 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 1.151898003259)); +#24769 = DIRECTION('',(0.,0.,-1.)); +#24770 = DIRECTION('',(0.,-1.,0.)); +#24771 = ADVANCED_FACE('',(#24772),#24783,.F.); +#24772 = FACE_BOUND('',#24773,.T.); +#24773 = EDGE_LOOP('',(#24774,#24775,#24776,#24777)); +#24774 = ORIENTED_EDGE('',*,*,#24641,.T.); +#24775 = ORIENTED_EDGE('',*,*,#24761,.F.); +#24776 = ORIENTED_EDGE('',*,*,#24681,.F.); +#24777 = ORIENTED_EDGE('',*,*,#24778,.T.); +#24778 = EDGE_CURVE('',#24674,#24642,#24779,.T.); +#24779 = LINE('',#24780,#24781); +#24780 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 1.007745967687)); +#24781 = VECTOR('',#24782,1.); +#24782 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24783 = PLANE('',#24784); +#24784 = AXIS2_PLACEMENT_3D('',#24785,#24786,#24787); +#24785 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 1.151898003259)); +#24786 = DIRECTION('',(6.982962677686E-15,-1.,-3.008496282544E-15)); +#24787 = DIRECTION('',(0.,3.008496282544E-15,-1.)); +#24788 = ADVANCED_FACE('',(#24789),#24800,.F.); +#24789 = FACE_BOUND('',#24790,.T.); +#24790 = EDGE_LOOP('',(#24791,#24792,#24793,#24794)); +#24791 = ORIENTED_EDGE('',*,*,#24649,.T.); +#24792 = ORIENTED_EDGE('',*,*,#24778,.F.); +#24793 = ORIENTED_EDGE('',*,*,#24673,.F.); +#24794 = ORIENTED_EDGE('',*,*,#24795,.T.); +#24795 = EDGE_CURVE('',#24666,#24610,#24796,.T.); +#24796 = LINE('',#24797,#24798); +#24797 = CARTESIAN_POINT('',(7.50097449872,-0.97856059437,1.007745967687 + )); +#24798 = VECTOR('',#24799,1.); +#24799 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#24800 = PLANE('',#24801); +#24801 = AXIS2_PLACEMENT_3D('',#24802,#24803,#24804); +#24802 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 1.007745967687)); +#24803 = DIRECTION('',(-2.336793357255E-29,3.346421089607E-15,-1.)); +#24804 = DIRECTION('',(-1.,0.,2.336793357255E-29)); +#24805 = ADVANCED_FACE('',(#24806),#24812,.F.); +#24806 = FACE_BOUND('',#24807,.T.); +#24807 = EDGE_LOOP('',(#24808,#24809,#24810,#24811)); +#24808 = ORIENTED_EDGE('',*,*,#24607,.T.); +#24809 = ORIENTED_EDGE('',*,*,#24795,.F.); +#24810 = ORIENTED_EDGE('',*,*,#24663,.F.); +#24811 = ORIENTED_EDGE('',*,*,#24720,.T.); +#24812 = PLANE('',#24813); +#24813 = AXIS2_PLACEMENT_3D('',#24814,#24815,#24816); +#24814 = CARTESIAN_POINT('',(7.50097449872,-0.97856059437,1.007745967687 + )); +#24815 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#24816 = DIRECTION('',(0.,0.,-1.)); +#24817 = MANIFOLD_SOLID_BREP('',#24818); +#24818 = CLOSED_SHELL('',(#24819,#24951,#25083,#25109,#25130,#25151, + #25172,#25193,#25210,#25231,#25252,#25273,#25294,#25315,#25336, + #25353)); +#24819 = ADVANCED_FACE('',(#24820),#24946,.F.); +#24820 = FACE_BOUND('',#24821,.T.); +#24821 = EDGE_LOOP('',(#24822,#24833,#24842,#24851,#24860,#24869,#24878, + #24886,#24895,#24904,#24913,#24922,#24931,#24940)); +#24822 = ORIENTED_EDGE('',*,*,#24823,.F.); +#24823 = EDGE_CURVE('',#24824,#24826,#24828,.T.); +#24824 = VERTEX_POINT('',#24825); +#24825 = CARTESIAN_POINT('',(7.499974498734,-0.895130420291, + 0.986451725848)); +#24826 = VERTEX_POINT('',#24827); +#24827 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 0.995934317917)); +#24828 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24829,#24830,#24831,#24832), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#24829 = CARTESIAN_POINT('',(7.499974498734,-0.895130420291, + 0.986451725848)); +#24830 = CARTESIAN_POINT('',(7.499974498734,-0.877080223107, + 0.986451725848)); +#24831 = CARTESIAN_POINT('',(7.499974498734,-0.862066118998, + 0.989612589871)); +#24832 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 0.995934317917)); +#24833 = ORIENTED_EDGE('',*,*,#24834,.F.); +#24834 = EDGE_CURVE('',#24835,#24824,#24837,.T.); +#24835 = VERTEX_POINT('',#24836); +#24836 = CARTESIAN_POINT('',(7.499974498734,-0.951027805118, + 1.008660954641)); +#24837 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24838,#24839,#24840,#24841), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#24838 = CARTESIAN_POINT('',(7.499974498734,-0.951027805118, + 1.008660954641)); +#24839 = CARTESIAN_POINT('',(7.499974498734,-0.937095049227, + 0.993854802113)); +#24840 = CARTESIAN_POINT('',(7.499974498734,-0.918462587618, + 0.986451725848)); +#24841 = CARTESIAN_POINT('',(7.499974498734,-0.895130420291, + 0.986451725848)); +#24842 = ORIENTED_EDGE('',*,*,#24843,.F.); +#24843 = EDGE_CURVE('',#24844,#24835,#24846,.T.); +#24844 = VERTEX_POINT('',#24845); +#24845 = CARTESIAN_POINT('',(7.499974498734,-0.971906143796, + 1.067469661594)); +#24846 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24847,#24848,#24849,#24850), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#24847 = CARTESIAN_POINT('',(7.499974498734,-0.971906143796, + 1.067469661594)); +#24848 = CARTESIAN_POINT('',(7.499974498734,-0.971906143796, + 1.043097736364)); +#24849 = CARTESIAN_POINT('',(7.499974498734,-0.964960561009, + 1.023467107169)); +#24850 = CARTESIAN_POINT('',(7.499974498734,-0.951027805118, + 1.008660954641)); +#24851 = ORIENTED_EDGE('',*,*,#24852,.F.); +#24852 = EDGE_CURVE('',#24853,#24844,#24855,.T.); +#24853 = VERTEX_POINT('',#24854); +#24854 = CARTESIAN_POINT('',(7.499974498734,-0.948407615204, + 1.130686942053)); +#24855 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24856,#24857,#24858,#24859), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#24856 = CARTESIAN_POINT('',(7.499974498734,-0.948407615204, + 1.130686942053)); +#24857 = CARTESIAN_POINT('',(7.499974498734,-0.964087164371, + 1.114716260674)); +#24858 = CARTESIAN_POINT('',(7.499974498734,-0.971906143796, + 1.093671560731)); +#24859 = CARTESIAN_POINT('',(7.499974498734,-0.971906143796, + 1.067469661594)); +#24860 = ORIENTED_EDGE('',*,*,#24861,.F.); +#24861 = EDGE_CURVE('',#24862,#24853,#24864,.T.); +#24862 = VERTEX_POINT('',#24863); +#24863 = CARTESIAN_POINT('',(7.499974498734,-0.888642330981, + 1.154642964122)); +#24864 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24865,#24866,#24867,#24868), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#24865 = CARTESIAN_POINT('',(7.499974498734,-0.888642330981, + 1.154642964122)); +#24866 = CARTESIAN_POINT('',(7.499974498734,-0.91280630463, + 1.154642964122)); +#24867 = CARTESIAN_POINT('',(7.499974498734,-0.932728066038, + 1.146657623432)); +#24868 = CARTESIAN_POINT('',(7.499974498734,-0.948407615204, + 1.130686942053)); +#24869 = ORIENTED_EDGE('',*,*,#24870,.F.); +#24870 = EDGE_CURVE('',#24871,#24862,#24873,.T.); +#24871 = VERTEX_POINT('',#24872); +#24872 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.147988513547)); +#24873 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24874,#24875,#24876,#24877), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#24874 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.147988513547)); +#24875 = CARTESIAN_POINT('',(7.499974498734,-0.86023614509, + 1.152397087053)); +#24876 = CARTESIAN_POINT('',(7.499974498734,-0.873087552763, + 1.154642964122)); +#24877 = CARTESIAN_POINT('',(7.499974498734,-0.888642330981, + 1.154642964122)); +#24878 = ORIENTED_EDGE('',*,*,#24879,.F.); +#24879 = EDGE_CURVE('',#24880,#24871,#24882,.T.); +#24880 = VERTEX_POINT('',#24881); +#24881 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.126028826651)); +#24882 = LINE('',#24883,#24884); +#24883 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.147988513547)); +#24884 = VECTOR('',#24885,1.); +#24885 = DIRECTION('',(0.,0.,1.)); +#24886 = ORIENTED_EDGE('',*,*,#24887,.F.); +#24887 = EDGE_CURVE('',#24888,#24880,#24890,.T.); +#24888 = VERTEX_POINT('',#24889); +#24889 = CARTESIAN_POINT('',(7.499974498734,-0.8884343794,1.135677779983 + )); +#24890 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24891,#24892,#24893,#24894), + .UNSPECIFIED.,.F.,.F.,(4,4),(7.,8.),.PIECEWISE_BEZIER_KNOTS.); +#24891 = CARTESIAN_POINT('',(7.499974498734,-0.8884343794,1.135677779983 + )); +#24892 = CARTESIAN_POINT('',(7.499974498734,-0.87450162351, + 1.135677779983)); +#24893 = CARTESIAN_POINT('',(7.499974498734,-0.861733396469, + 1.132516915961)); +#24894 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.126028826651)); +#24895 = ORIENTED_EDGE('',*,*,#24896,.F.); +#24896 = EDGE_CURVE('',#24897,#24888,#24899,.T.); +#24897 = VERTEX_POINT('',#24898); +#24898 = CARTESIAN_POINT('',(7.499974498734,-0.932769656354,1.1176275828 + )); +#24899 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24900,#24901,#24902,#24903), + .UNSPECIFIED.,.F.,.F.,(4,4),(8.,9.),.PIECEWISE_BEZIER_KNOTS.); +#24900 = CARTESIAN_POINT('',(7.499974498734,-0.932769656354,1.1176275828 + )); +#24901 = CARTESIAN_POINT('',(7.499974498734,-0.921332319429, + 1.129688774466)); +#24902 = CARTESIAN_POINT('',(7.499974498734,-0.906567757216, + 1.135677779983)); +#24903 = CARTESIAN_POINT('',(7.499974498734,-0.8884343794,1.135677779983 + )); +#24904 = ORIENTED_EDGE('',*,*,#24905,.F.); +#24905 = EDGE_CURVE('',#24906,#24897,#24908,.T.); +#24906 = VERTEX_POINT('',#24907); +#24907 = CARTESIAN_POINT('',(7.499974498734,-0.949863276267, + 1.068717371077)); +#24908 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24909,#24910,#24911,#24912), + .UNSPECIFIED.,.F.,.F.,(4,4),(9.,10.),.PIECEWISE_BEZIER_KNOTS.); +#24909 = CARTESIAN_POINT('',(7.499974498734,-0.949863276267, + 1.068717371077)); +#24910 = CARTESIAN_POINT('',(7.499974498734,-0.949863276267, + 1.089179806594)); +#24911 = CARTESIAN_POINT('',(7.499974498734,-0.944165402963, + 1.105483210501)); +#24912 = CARTESIAN_POINT('',(7.499974498734,-0.932769656354,1.1176275828 + )); +#24913 = ORIENTED_EDGE('',*,*,#24914,.F.); +#24914 = EDGE_CURVE('',#24915,#24906,#24917,.T.); +#24915 = VERTEX_POINT('',#24916); +#24916 = CARTESIAN_POINT('',(7.499974498734,-0.933892594888, + 1.022302578319)); +#24917 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24918,#24919,#24920,#24921), + .UNSPECIFIED.,.F.,.F.,(4,4),(10.,11.),.PIECEWISE_BEZIER_KNOTS.); +#24918 = CARTESIAN_POINT('',(7.499974498734,-0.933892594888, + 1.022302578319)); +#24919 = CARTESIAN_POINT('',(7.499974498734,-0.944539715808, + 1.03378150556)); +#24920 = CARTESIAN_POINT('',(7.499974498734,-0.949863276267, + 1.049253103146)); +#24921 = CARTESIAN_POINT('',(7.499974498734,-0.949863276267, + 1.068717371077)); +#24922 = ORIENTED_EDGE('',*,*,#24923,.F.); +#24923 = EDGE_CURVE('',#24924,#24915,#24926,.T.); +#24924 = VERTEX_POINT('',#24925); +#24925 = CARTESIAN_POINT('',(7.499974498734,-0.892094327216, + 1.005167368089)); +#24926 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24927,#24928,#24929,#24930), + .UNSPECIFIED.,.F.,.F.,(4,4),(11.,12.),.PIECEWISE_BEZIER_KNOTS.); +#24927 = CARTESIAN_POINT('',(7.499974498734,-0.892094327216, + 1.005167368089)); +#24928 = CARTESIAN_POINT('',(7.499974498734,-0.909312718078, + 1.005167368089)); +#24929 = CARTESIAN_POINT('',(7.499974498734,-0.923245473969, + 1.010906831709)); +#24930 = CARTESIAN_POINT('',(7.499974498734,-0.933892594888, + 1.022302578319)); +#24931 = ORIENTED_EDGE('',*,*,#24932,.F.); +#24932 = EDGE_CURVE('',#24933,#24924,#24935,.T.); +#24933 = VERTEX_POINT('',#24934); +#24934 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.016064030906)); +#24935 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24936,#24937,#24938,#24939), + .UNSPECIFIED.,.F.,.F.,(4,4),(12.,13.),.PIECEWISE_BEZIER_KNOTS.); +#24936 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.016064030906)); +#24937 = CARTESIAN_POINT('',(7.499974498734,-0.861982938366, + 1.008827315905)); +#24938 = CARTESIAN_POINT('',(7.499974498734,-0.875998874889, + 1.005167368089)); +#24939 = CARTESIAN_POINT('',(7.499974498734,-0.892094327216, + 1.005167368089)); +#24940 = ORIENTED_EDGE('',*,*,#24941,.F.); +#24941 = EDGE_CURVE('',#24826,#24933,#24942,.T.); +#24942 = LINE('',#24943,#24944); +#24943 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.016064030906)); +#24944 = VECTOR('',#24945,1.); +#24945 = DIRECTION('',(0.,-1.077215714371E-14,1.)); +#24946 = PLANE('',#24947); +#24947 = AXIS2_PLACEMENT_3D('',#24948,#24949,#24950); +#24948 = CARTESIAN_POINT('',(7.499974498734,-0.870332194322, + 0.988822373865)); +#24949 = DIRECTION('',(1.,0.,0.)); +#24950 = DIRECTION('',(-0.,1.,0.)); +#24951 = ADVANCED_FACE('',(#24952),#25078,.T.); +#24952 = FACE_BOUND('',#24953,.T.); +#24953 = EDGE_LOOP('',(#24954,#24965,#24973,#24982,#24991,#25000,#25009, + #25018,#25027,#25035,#25044,#25053,#25062,#25071)); +#24954 = ORIENTED_EDGE('',*,*,#24955,.T.); +#24955 = EDGE_CURVE('',#24956,#24958,#24960,.T.); +#24956 = VERTEX_POINT('',#24957); +#24957 = CARTESIAN_POINT('',(7.50097449872,-0.895130420291, + 0.986451725848)); +#24958 = VERTEX_POINT('',#24959); +#24959 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 0.995934317917)); +#24960 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24961,#24962,#24963,#24964), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#24961 = CARTESIAN_POINT('',(7.50097449872,-0.895130420291, + 0.986451725848)); +#24962 = CARTESIAN_POINT('',(7.50097449872,-0.877080223107, + 0.986451725848)); +#24963 = CARTESIAN_POINT('',(7.50097449872,-0.862066118998, + 0.989612589871)); +#24964 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 0.995934317917)); +#24965 = ORIENTED_EDGE('',*,*,#24966,.T.); +#24966 = EDGE_CURVE('',#24958,#24967,#24969,.T.); +#24967 = VERTEX_POINT('',#24968); +#24968 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.016064030906)); +#24969 = LINE('',#24970,#24971); +#24970 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.016064030906)); +#24971 = VECTOR('',#24972,1.); +#24972 = DIRECTION('',(0.,-1.077215714371E-14,1.)); +#24973 = ORIENTED_EDGE('',*,*,#24974,.T.); +#24974 = EDGE_CURVE('',#24967,#24975,#24977,.T.); +#24975 = VERTEX_POINT('',#24976); +#24976 = CARTESIAN_POINT('',(7.50097449872,-0.892094327216, + 1.005167368089)); +#24977 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24978,#24979,#24980,#24981), + .UNSPECIFIED.,.F.,.F.,(4,4),(12.,13.),.PIECEWISE_BEZIER_KNOTS.); +#24978 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.016064030906)); +#24979 = CARTESIAN_POINT('',(7.50097449872,-0.861982938366, + 1.008827315905)); +#24980 = CARTESIAN_POINT('',(7.50097449872,-0.875998874889, + 1.005167368089)); +#24981 = CARTESIAN_POINT('',(7.50097449872,-0.892094327216, + 1.005167368089)); +#24982 = ORIENTED_EDGE('',*,*,#24983,.T.); +#24983 = EDGE_CURVE('',#24975,#24984,#24986,.T.); +#24984 = VERTEX_POINT('',#24985); +#24985 = CARTESIAN_POINT('',(7.50097449872,-0.933892594888, + 1.022302578319)); +#24986 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24987,#24988,#24989,#24990), + .UNSPECIFIED.,.F.,.F.,(4,4),(11.,12.),.PIECEWISE_BEZIER_KNOTS.); +#24987 = CARTESIAN_POINT('',(7.50097449872,-0.892094327216, + 1.005167368089)); +#24988 = CARTESIAN_POINT('',(7.50097449872,-0.909312718078, + 1.005167368089)); +#24989 = CARTESIAN_POINT('',(7.50097449872,-0.923245473969, + 1.010906831709)); +#24990 = CARTESIAN_POINT('',(7.50097449872,-0.933892594888, + 1.022302578319)); +#24991 = ORIENTED_EDGE('',*,*,#24992,.T.); +#24992 = EDGE_CURVE('',#24984,#24993,#24995,.T.); +#24993 = VERTEX_POINT('',#24994); +#24994 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.068717371077)); +#24995 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#24996,#24997,#24998,#24999), + .UNSPECIFIED.,.F.,.F.,(4,4),(10.,11.),.PIECEWISE_BEZIER_KNOTS.); +#24996 = CARTESIAN_POINT('',(7.50097449872,-0.933892594888, + 1.022302578319)); +#24997 = CARTESIAN_POINT('',(7.50097449872,-0.944539715808,1.03378150556 + )); +#24998 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.049253103146)); +#24999 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.068717371077)); +#25000 = ORIENTED_EDGE('',*,*,#25001,.T.); +#25001 = EDGE_CURVE('',#24993,#25002,#25004,.T.); +#25002 = VERTEX_POINT('',#25003); +#25003 = CARTESIAN_POINT('',(7.50097449872,-0.932769656354,1.1176275828) + ); +#25004 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25005,#25006,#25007,#25008), + .UNSPECIFIED.,.F.,.F.,(4,4),(9.,10.),.PIECEWISE_BEZIER_KNOTS.); +#25005 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.068717371077)); +#25006 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.089179806594)); +#25007 = CARTESIAN_POINT('',(7.50097449872,-0.944165402963, + 1.105483210501)); +#25008 = CARTESIAN_POINT('',(7.50097449872,-0.932769656354,1.1176275828) + ); +#25009 = ORIENTED_EDGE('',*,*,#25010,.T.); +#25010 = EDGE_CURVE('',#25002,#25011,#25013,.T.); +#25011 = VERTEX_POINT('',#25012); +#25012 = CARTESIAN_POINT('',(7.50097449872,-0.8884343794,1.135677779983) + ); +#25013 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25014,#25015,#25016,#25017), + .UNSPECIFIED.,.F.,.F.,(4,4),(8.,9.),.PIECEWISE_BEZIER_KNOTS.); +#25014 = CARTESIAN_POINT('',(7.50097449872,-0.932769656354,1.1176275828) + ); +#25015 = CARTESIAN_POINT('',(7.50097449872,-0.921332319429, + 1.129688774466)); +#25016 = CARTESIAN_POINT('',(7.50097449872,-0.906567757216, + 1.135677779983)); +#25017 = CARTESIAN_POINT('',(7.50097449872,-0.8884343794,1.135677779983) + ); +#25018 = ORIENTED_EDGE('',*,*,#25019,.T.); +#25019 = EDGE_CURVE('',#25011,#25020,#25022,.T.); +#25020 = VERTEX_POINT('',#25021); +#25021 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.126028826651)); +#25022 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25023,#25024,#25025,#25026), + .UNSPECIFIED.,.F.,.F.,(4,4),(7.,8.),.PIECEWISE_BEZIER_KNOTS.); +#25023 = CARTESIAN_POINT('',(7.50097449872,-0.8884343794,1.135677779983) + ); +#25024 = CARTESIAN_POINT('',(7.50097449872,-0.87450162351,1.135677779983 + )); +#25025 = CARTESIAN_POINT('',(7.50097449872,-0.861733396469, + 1.132516915961)); +#25026 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.126028826651)); +#25027 = ORIENTED_EDGE('',*,*,#25028,.T.); +#25028 = EDGE_CURVE('',#25020,#25029,#25031,.T.); +#25029 = VERTEX_POINT('',#25030); +#25030 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.147988513547)); +#25031 = LINE('',#25032,#25033); +#25032 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.147988513547)); +#25033 = VECTOR('',#25034,1.); +#25034 = DIRECTION('',(0.,0.,1.)); +#25035 = ORIENTED_EDGE('',*,*,#25036,.T.); +#25036 = EDGE_CURVE('',#25029,#25037,#25039,.T.); +#25037 = VERTEX_POINT('',#25038); +#25038 = CARTESIAN_POINT('',(7.50097449872,-0.888642330981, + 1.154642964122)); +#25039 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25040,#25041,#25042,#25043), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#25040 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.147988513547)); +#25041 = CARTESIAN_POINT('',(7.50097449872,-0.86023614509,1.152397087053 + )); +#25042 = CARTESIAN_POINT('',(7.50097449872,-0.873087552763, + 1.154642964122)); +#25043 = CARTESIAN_POINT('',(7.50097449872,-0.888642330981, + 1.154642964122)); +#25044 = ORIENTED_EDGE('',*,*,#25045,.T.); +#25045 = EDGE_CURVE('',#25037,#25046,#25048,.T.); +#25046 = VERTEX_POINT('',#25047); +#25047 = CARTESIAN_POINT('',(7.50097449872,-0.948407615204, + 1.130686942053)); +#25048 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25049,#25050,#25051,#25052), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#25049 = CARTESIAN_POINT('',(7.50097449872,-0.888642330981, + 1.154642964122)); +#25050 = CARTESIAN_POINT('',(7.50097449872,-0.91280630463,1.154642964122 + )); +#25051 = CARTESIAN_POINT('',(7.50097449872,-0.932728066038, + 1.146657623432)); +#25052 = CARTESIAN_POINT('',(7.50097449872,-0.948407615204, + 1.130686942053)); +#25053 = ORIENTED_EDGE('',*,*,#25054,.T.); +#25054 = EDGE_CURVE('',#25046,#25055,#25057,.T.); +#25055 = VERTEX_POINT('',#25056); +#25056 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.067469661594)); +#25057 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25058,#25059,#25060,#25061), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#25058 = CARTESIAN_POINT('',(7.50097449872,-0.948407615204, + 1.130686942053)); +#25059 = CARTESIAN_POINT('',(7.50097449872,-0.964087164371, + 1.114716260674)); +#25060 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.093671560731)); +#25061 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.067469661594)); +#25062 = ORIENTED_EDGE('',*,*,#25063,.T.); +#25063 = EDGE_CURVE('',#25055,#25064,#25066,.T.); +#25064 = VERTEX_POINT('',#25065); +#25065 = CARTESIAN_POINT('',(7.50097449872,-0.951027805118, + 1.008660954641)); +#25066 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25067,#25068,#25069,#25070), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#25067 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.067469661594)); +#25068 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.043097736364)); +#25069 = CARTESIAN_POINT('',(7.50097449872,-0.964960561009, + 1.023467107169)); +#25070 = CARTESIAN_POINT('',(7.50097449872,-0.951027805118, + 1.008660954641)); +#25071 = ORIENTED_EDGE('',*,*,#25072,.T.); +#25072 = EDGE_CURVE('',#25064,#24956,#25073,.T.); +#25073 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25074,#25075,#25076,#25077), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#25074 = CARTESIAN_POINT('',(7.50097449872,-0.951027805118, + 1.008660954641)); +#25075 = CARTESIAN_POINT('',(7.50097449872,-0.937095049227, + 0.993854802113)); +#25076 = CARTESIAN_POINT('',(7.50097449872,-0.918462587618, + 0.986451725848)); +#25077 = CARTESIAN_POINT('',(7.50097449872,-0.895130420291, + 0.986451725848)); +#25078 = PLANE('',#25079); +#25079 = AXIS2_PLACEMENT_3D('',#25080,#25081,#25082); +#25080 = CARTESIAN_POINT('',(7.50097449872,-0.870332194322, + 0.988822373865)); +#25081 = DIRECTION('',(1.,0.,0.)); +#25082 = DIRECTION('',(-0.,1.,0.)); +#25083 = ADVANCED_FACE('',(#25084),#25100,.F.); +#25084 = FACE_BOUND('',#25085,.F.); +#25085 = EDGE_LOOP('',(#25086,#25092,#25093,#25099)); +#25086 = ORIENTED_EDGE('',*,*,#25087,.F.); +#25087 = EDGE_CURVE('',#25064,#24835,#25088,.T.); +#25088 = LINE('',#25089,#25090); +#25089 = CARTESIAN_POINT('',(7.50097449872,-0.951027805118, + 1.008660954641)); +#25090 = VECTOR('',#25091,1.); +#25091 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25092 = ORIENTED_EDGE('',*,*,#25072,.T.); +#25093 = ORIENTED_EDGE('',*,*,#25094,.T.); +#25094 = EDGE_CURVE('',#24956,#24824,#25095,.T.); +#25095 = LINE('',#25096,#25097); +#25096 = CARTESIAN_POINT('',(7.50097449872,-0.895130420291, + 0.986451725848)); +#25097 = VECTOR('',#25098,1.); +#25098 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25099 = ORIENTED_EDGE('',*,*,#24834,.F.); +#25100 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25101,#25102) + ,(#25103,#25104) + ,(#25105,#25106) + ,(#25107,#25108 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(1.,2.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25101 = CARTESIAN_POINT('',(7.50097449872,-0.951027805118, + 1.008660954641)); +#25102 = CARTESIAN_POINT('',(7.499974498734,-0.951027805118, + 1.008660954641)); +#25103 = CARTESIAN_POINT('',(7.50097449872,-0.937095049227, + 0.993854802113)); +#25104 = CARTESIAN_POINT('',(7.499974498734,-0.937095049227, + 0.993854802113)); +#25105 = CARTESIAN_POINT('',(7.50097449872,-0.918462587618, + 0.986451725848)); +#25106 = CARTESIAN_POINT('',(7.499974498734,-0.918462587618, + 0.986451725848)); +#25107 = CARTESIAN_POINT('',(7.50097449872,-0.895130420291, + 0.986451725848)); +#25108 = CARTESIAN_POINT('',(7.499974498734,-0.895130420291, + 0.986451725848)); +#25109 = ADVANCED_FACE('',(#25110),#25121,.F.); +#25110 = FACE_BOUND('',#25111,.F.); +#25111 = EDGE_LOOP('',(#25112,#25118,#25119,#25120)); +#25112 = ORIENTED_EDGE('',*,*,#25113,.F.); +#25113 = EDGE_CURVE('',#25055,#24844,#25114,.T.); +#25114 = LINE('',#25115,#25116); +#25115 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.067469661594)); +#25116 = VECTOR('',#25117,1.); +#25117 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25118 = ORIENTED_EDGE('',*,*,#25063,.T.); +#25119 = ORIENTED_EDGE('',*,*,#25087,.T.); +#25120 = ORIENTED_EDGE('',*,*,#24843,.F.); +#25121 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25122,#25123) + ,(#25124,#25125) + ,(#25126,#25127) + ,(#25128,#25129 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(2.,3.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25122 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.067469661594)); +#25123 = CARTESIAN_POINT('',(7.499974498734,-0.971906143796, + 1.067469661594)); +#25124 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.043097736364)); +#25125 = CARTESIAN_POINT('',(7.499974498734,-0.971906143796, + 1.043097736364)); +#25126 = CARTESIAN_POINT('',(7.50097449872,-0.964960561009, + 1.023467107169)); +#25127 = CARTESIAN_POINT('',(7.499974498734,-0.964960561009, + 1.023467107169)); +#25128 = CARTESIAN_POINT('',(7.50097449872,-0.951027805118, + 1.008660954641)); +#25129 = CARTESIAN_POINT('',(7.499974498734,-0.951027805118, + 1.008660954641)); +#25130 = ADVANCED_FACE('',(#25131),#25142,.F.); +#25131 = FACE_BOUND('',#25132,.F.); +#25132 = EDGE_LOOP('',(#25133,#25139,#25140,#25141)); +#25133 = ORIENTED_EDGE('',*,*,#25134,.F.); +#25134 = EDGE_CURVE('',#25046,#24853,#25135,.T.); +#25135 = LINE('',#25136,#25137); +#25136 = CARTESIAN_POINT('',(7.50097449872,-0.948407615204, + 1.130686942053)); +#25137 = VECTOR('',#25138,1.); +#25138 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25139 = ORIENTED_EDGE('',*,*,#25054,.T.); +#25140 = ORIENTED_EDGE('',*,*,#25113,.T.); +#25141 = ORIENTED_EDGE('',*,*,#24852,.F.); +#25142 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25143,#25144) + ,(#25145,#25146) + ,(#25147,#25148) + ,(#25149,#25150 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25143 = CARTESIAN_POINT('',(7.50097449872,-0.948407615204, + 1.130686942053)); +#25144 = CARTESIAN_POINT('',(7.499974498734,-0.948407615204, + 1.130686942053)); +#25145 = CARTESIAN_POINT('',(7.50097449872,-0.964087164371, + 1.114716260674)); +#25146 = CARTESIAN_POINT('',(7.499974498734,-0.964087164371, + 1.114716260674)); +#25147 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.093671560731)); +#25148 = CARTESIAN_POINT('',(7.499974498734,-0.971906143796, + 1.093671560731)); +#25149 = CARTESIAN_POINT('',(7.50097449872,-0.971906143796, + 1.067469661594)); +#25150 = CARTESIAN_POINT('',(7.499974498734,-0.971906143796, + 1.067469661594)); +#25151 = ADVANCED_FACE('',(#25152),#25163,.F.); +#25152 = FACE_BOUND('',#25153,.F.); +#25153 = EDGE_LOOP('',(#25154,#25160,#25161,#25162)); +#25154 = ORIENTED_EDGE('',*,*,#25155,.F.); +#25155 = EDGE_CURVE('',#25037,#24862,#25156,.T.); +#25156 = LINE('',#25157,#25158); +#25157 = CARTESIAN_POINT('',(7.50097449872,-0.888642330981, + 1.154642964122)); +#25158 = VECTOR('',#25159,1.); +#25159 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25160 = ORIENTED_EDGE('',*,*,#25045,.T.); +#25161 = ORIENTED_EDGE('',*,*,#25134,.T.); +#25162 = ORIENTED_EDGE('',*,*,#24861,.F.); +#25163 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25164,#25165) + ,(#25166,#25167) + ,(#25168,#25169) + ,(#25170,#25171 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(4.,5.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25164 = CARTESIAN_POINT('',(7.50097449872,-0.888642330981, + 1.154642964122)); +#25165 = CARTESIAN_POINT('',(7.499974498734,-0.888642330981, + 1.154642964122)); +#25166 = CARTESIAN_POINT('',(7.50097449872,-0.91280630463,1.154642964122 + )); +#25167 = CARTESIAN_POINT('',(7.499974498734,-0.91280630463, + 1.154642964122)); +#25168 = CARTESIAN_POINT('',(7.50097449872,-0.932728066038, + 1.146657623432)); +#25169 = CARTESIAN_POINT('',(7.499974498734,-0.932728066038, + 1.146657623432)); +#25170 = CARTESIAN_POINT('',(7.50097449872,-0.948407615204, + 1.130686942053)); +#25171 = CARTESIAN_POINT('',(7.499974498734,-0.948407615204, + 1.130686942053)); +#25172 = ADVANCED_FACE('',(#25173),#25184,.F.); +#25173 = FACE_BOUND('',#25174,.F.); +#25174 = EDGE_LOOP('',(#25175,#25181,#25182,#25183)); +#25175 = ORIENTED_EDGE('',*,*,#25176,.F.); +#25176 = EDGE_CURVE('',#25029,#24871,#25177,.T.); +#25177 = LINE('',#25178,#25179); +#25178 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.147988513547)); +#25179 = VECTOR('',#25180,1.); +#25180 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25181 = ORIENTED_EDGE('',*,*,#25036,.T.); +#25182 = ORIENTED_EDGE('',*,*,#25155,.T.); +#25183 = ORIENTED_EDGE('',*,*,#24870,.F.); +#25184 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25185,#25186) + ,(#25187,#25188) + ,(#25189,#25190) + ,(#25191,#25192 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(5.,6.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25185 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.147988513547)); +#25186 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.147988513547)); +#25187 = CARTESIAN_POINT('',(7.50097449872,-0.86023614509,1.152397087053 + )); +#25188 = CARTESIAN_POINT('',(7.499974498734,-0.86023614509, + 1.152397087053)); +#25189 = CARTESIAN_POINT('',(7.50097449872,-0.873087552763, + 1.154642964122)); +#25190 = CARTESIAN_POINT('',(7.499974498734,-0.873087552763, + 1.154642964122)); +#25191 = CARTESIAN_POINT('',(7.50097449872,-0.888642330981, + 1.154642964122)); +#25192 = CARTESIAN_POINT('',(7.499974498734,-0.888642330981, + 1.154642964122)); +#25193 = ADVANCED_FACE('',(#25194),#25205,.F.); +#25194 = FACE_BOUND('',#25195,.T.); +#25195 = EDGE_LOOP('',(#25196,#25197,#25198,#25199)); +#25196 = ORIENTED_EDGE('',*,*,#24879,.T.); +#25197 = ORIENTED_EDGE('',*,*,#25176,.F.); +#25198 = ORIENTED_EDGE('',*,*,#25028,.F.); +#25199 = ORIENTED_EDGE('',*,*,#25200,.T.); +#25200 = EDGE_CURVE('',#25020,#24880,#25201,.T.); +#25201 = LINE('',#25202,#25203); +#25202 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.126028826651)); +#25203 = VECTOR('',#25204,1.); +#25204 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25205 = PLANE('',#25206); +#25206 = AXIS2_PLACEMENT_3D('',#25207,#25208,#25209); +#25207 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.147988513547)); +#25208 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#25209 = DIRECTION('',(0.,0.,-1.)); +#25210 = ADVANCED_FACE('',(#25211),#25222,.F.); +#25211 = FACE_BOUND('',#25212,.F.); +#25212 = EDGE_LOOP('',(#25213,#25219,#25220,#25221)); +#25213 = ORIENTED_EDGE('',*,*,#25214,.F.); +#25214 = EDGE_CURVE('',#25011,#24888,#25215,.T.); +#25215 = LINE('',#25216,#25217); +#25216 = CARTESIAN_POINT('',(7.50097449872,-0.8884343794,1.135677779983) + ); +#25217 = VECTOR('',#25218,1.); +#25218 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25219 = ORIENTED_EDGE('',*,*,#25019,.T.); +#25220 = ORIENTED_EDGE('',*,*,#25200,.T.); +#25221 = ORIENTED_EDGE('',*,*,#24887,.F.); +#25222 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25223,#25224) + ,(#25225,#25226) + ,(#25227,#25228) + ,(#25229,#25230 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(7.,8.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25223 = CARTESIAN_POINT('',(7.50097449872,-0.8884343794,1.135677779983) + ); +#25224 = CARTESIAN_POINT('',(7.499974498734,-0.8884343794,1.135677779983 + )); +#25225 = CARTESIAN_POINT('',(7.50097449872,-0.87450162351,1.135677779983 + )); +#25226 = CARTESIAN_POINT('',(7.499974498734,-0.87450162351, + 1.135677779983)); +#25227 = CARTESIAN_POINT('',(7.50097449872,-0.861733396469, + 1.132516915961)); +#25228 = CARTESIAN_POINT('',(7.499974498734,-0.861733396469, + 1.132516915961)); +#25229 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.126028826651)); +#25230 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.126028826651)); +#25231 = ADVANCED_FACE('',(#25232),#25243,.F.); +#25232 = FACE_BOUND('',#25233,.F.); +#25233 = EDGE_LOOP('',(#25234,#25240,#25241,#25242)); +#25234 = ORIENTED_EDGE('',*,*,#25235,.F.); +#25235 = EDGE_CURVE('',#25002,#24897,#25236,.T.); +#25236 = LINE('',#25237,#25238); +#25237 = CARTESIAN_POINT('',(7.50097449872,-0.932769656354,1.1176275828) + ); +#25238 = VECTOR('',#25239,1.); +#25239 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25240 = ORIENTED_EDGE('',*,*,#25010,.T.); +#25241 = ORIENTED_EDGE('',*,*,#25214,.T.); +#25242 = ORIENTED_EDGE('',*,*,#24896,.F.); +#25243 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25244,#25245) + ,(#25246,#25247) + ,(#25248,#25249) + ,(#25250,#25251 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(8.,9.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25244 = CARTESIAN_POINT('',(7.50097449872,-0.932769656354,1.1176275828) + ); +#25245 = CARTESIAN_POINT('',(7.499974498734,-0.932769656354,1.1176275828 + )); +#25246 = CARTESIAN_POINT('',(7.50097449872,-0.921332319429, + 1.129688774466)); +#25247 = CARTESIAN_POINT('',(7.499974498734,-0.921332319429, + 1.129688774466)); +#25248 = CARTESIAN_POINT('',(7.50097449872,-0.906567757216, + 1.135677779983)); +#25249 = CARTESIAN_POINT('',(7.499974498734,-0.906567757216, + 1.135677779983)); +#25250 = CARTESIAN_POINT('',(7.50097449872,-0.8884343794,1.135677779983) + ); +#25251 = CARTESIAN_POINT('',(7.499974498734,-0.8884343794,1.135677779983 + )); +#25252 = ADVANCED_FACE('',(#25253),#25264,.F.); +#25253 = FACE_BOUND('',#25254,.F.); +#25254 = EDGE_LOOP('',(#25255,#25261,#25262,#25263)); +#25255 = ORIENTED_EDGE('',*,*,#25256,.F.); +#25256 = EDGE_CURVE('',#24993,#24906,#25257,.T.); +#25257 = LINE('',#25258,#25259); +#25258 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.068717371077)); +#25259 = VECTOR('',#25260,1.); +#25260 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25261 = ORIENTED_EDGE('',*,*,#25001,.T.); +#25262 = ORIENTED_EDGE('',*,*,#25235,.T.); +#25263 = ORIENTED_EDGE('',*,*,#24905,.F.); +#25264 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25265,#25266) + ,(#25267,#25268) + ,(#25269,#25270) + ,(#25271,#25272 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(9.,10.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25265 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.068717371077)); +#25266 = CARTESIAN_POINT('',(7.499974498734,-0.949863276267, + 1.068717371077)); +#25267 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.089179806594)); +#25268 = CARTESIAN_POINT('',(7.499974498734,-0.949863276267, + 1.089179806594)); +#25269 = CARTESIAN_POINT('',(7.50097449872,-0.944165402963, + 1.105483210501)); +#25270 = CARTESIAN_POINT('',(7.499974498734,-0.944165402963, + 1.105483210501)); +#25271 = CARTESIAN_POINT('',(7.50097449872,-0.932769656354,1.1176275828) + ); +#25272 = CARTESIAN_POINT('',(7.499974498734,-0.932769656354,1.1176275828 + )); +#25273 = ADVANCED_FACE('',(#25274),#25285,.F.); +#25274 = FACE_BOUND('',#25275,.F.); +#25275 = EDGE_LOOP('',(#25276,#25282,#25283,#25284)); +#25276 = ORIENTED_EDGE('',*,*,#25277,.F.); +#25277 = EDGE_CURVE('',#24984,#24915,#25278,.T.); +#25278 = LINE('',#25279,#25280); +#25279 = CARTESIAN_POINT('',(7.50097449872,-0.933892594888, + 1.022302578319)); +#25280 = VECTOR('',#25281,1.); +#25281 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25282 = ORIENTED_EDGE('',*,*,#24992,.T.); +#25283 = ORIENTED_EDGE('',*,*,#25256,.T.); +#25284 = ORIENTED_EDGE('',*,*,#24914,.F.); +#25285 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25286,#25287) + ,(#25288,#25289) + ,(#25290,#25291) + ,(#25292,#25293 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(10.,11.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25286 = CARTESIAN_POINT('',(7.50097449872,-0.933892594888, + 1.022302578319)); +#25287 = CARTESIAN_POINT('',(7.499974498734,-0.933892594888, + 1.022302578319)); +#25288 = CARTESIAN_POINT('',(7.50097449872,-0.944539715808,1.03378150556 + )); +#25289 = CARTESIAN_POINT('',(7.499974498734,-0.944539715808, + 1.03378150556)); +#25290 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.049253103146)); +#25291 = CARTESIAN_POINT('',(7.499974498734,-0.949863276267, + 1.049253103146)); +#25292 = CARTESIAN_POINT('',(7.50097449872,-0.949863276267, + 1.068717371077)); +#25293 = CARTESIAN_POINT('',(7.499974498734,-0.949863276267, + 1.068717371077)); +#25294 = ADVANCED_FACE('',(#25295),#25306,.F.); +#25295 = FACE_BOUND('',#25296,.F.); +#25296 = EDGE_LOOP('',(#25297,#25303,#25304,#25305)); +#25297 = ORIENTED_EDGE('',*,*,#25298,.F.); +#25298 = EDGE_CURVE('',#24975,#24924,#25299,.T.); +#25299 = LINE('',#25300,#25301); +#25300 = CARTESIAN_POINT('',(7.50097449872,-0.892094327216, + 1.005167368089)); +#25301 = VECTOR('',#25302,1.); +#25302 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25303 = ORIENTED_EDGE('',*,*,#24983,.T.); +#25304 = ORIENTED_EDGE('',*,*,#25277,.T.); +#25305 = ORIENTED_EDGE('',*,*,#24923,.F.); +#25306 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25307,#25308) + ,(#25309,#25310) + ,(#25311,#25312) + ,(#25313,#25314 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(11.,12.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25307 = CARTESIAN_POINT('',(7.50097449872,-0.892094327216, + 1.005167368089)); +#25308 = CARTESIAN_POINT('',(7.499974498734,-0.892094327216, + 1.005167368089)); +#25309 = CARTESIAN_POINT('',(7.50097449872,-0.909312718078, + 1.005167368089)); +#25310 = CARTESIAN_POINT('',(7.499974498734,-0.909312718078, + 1.005167368089)); +#25311 = CARTESIAN_POINT('',(7.50097449872,-0.923245473969, + 1.010906831709)); +#25312 = CARTESIAN_POINT('',(7.499974498734,-0.923245473969, + 1.010906831709)); +#25313 = CARTESIAN_POINT('',(7.50097449872,-0.933892594888, + 1.022302578319)); +#25314 = CARTESIAN_POINT('',(7.499974498734,-0.933892594888, + 1.022302578319)); +#25315 = ADVANCED_FACE('',(#25316),#25327,.F.); +#25316 = FACE_BOUND('',#25317,.F.); +#25317 = EDGE_LOOP('',(#25318,#25324,#25325,#25326)); +#25318 = ORIENTED_EDGE('',*,*,#25319,.F.); +#25319 = EDGE_CURVE('',#24967,#24933,#25320,.T.); +#25320 = LINE('',#25321,#25322); +#25321 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.016064030906)); +#25322 = VECTOR('',#25323,1.); +#25323 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25324 = ORIENTED_EDGE('',*,*,#24974,.T.); +#25325 = ORIENTED_EDGE('',*,*,#25298,.T.); +#25326 = ORIENTED_EDGE('',*,*,#24932,.F.); +#25327 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25328,#25329) + ,(#25330,#25331) + ,(#25332,#25333) + ,(#25334,#25335 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(12.,13.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25328 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.016064030906)); +#25329 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 1.016064030906)); +#25330 = CARTESIAN_POINT('',(7.50097449872,-0.861982938366, + 1.008827315905)); +#25331 = CARTESIAN_POINT('',(7.499974498734,-0.861982938366, + 1.008827315905)); +#25332 = CARTESIAN_POINT('',(7.50097449872,-0.875998874889, + 1.005167368089)); +#25333 = CARTESIAN_POINT('',(7.499974498734,-0.875998874889, + 1.005167368089)); +#25334 = CARTESIAN_POINT('',(7.50097449872,-0.892094327216, + 1.005167368089)); +#25335 = CARTESIAN_POINT('',(7.499974498734,-0.892094327216, + 1.005167368089)); +#25336 = ADVANCED_FACE('',(#25337),#25348,.F.); +#25337 = FACE_BOUND('',#25338,.T.); +#25338 = EDGE_LOOP('',(#25339,#25340,#25341,#25342)); +#25339 = ORIENTED_EDGE('',*,*,#24941,.T.); +#25340 = ORIENTED_EDGE('',*,*,#25319,.F.); +#25341 = ORIENTED_EDGE('',*,*,#24966,.F.); +#25342 = ORIENTED_EDGE('',*,*,#25343,.T.); +#25343 = EDGE_CURVE('',#24958,#24826,#25344,.T.); +#25344 = LINE('',#25345,#25346); +#25345 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 0.995934317917)); +#25346 = VECTOR('',#25347,1.); +#25347 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25348 = PLANE('',#25349); +#25349 = AXIS2_PLACEMENT_3D('',#25350,#25351,#25352); +#25350 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 1.016064030906)); +#25351 = DIRECTION('',(6.982962677686E-15,-1.,-1.077215714371E-14)); +#25352 = DIRECTION('',(0.,1.077215714371E-14,-1.)); +#25353 = ADVANCED_FACE('',(#25354),#25360,.F.); +#25354 = FACE_BOUND('',#25355,.F.); +#25355 = EDGE_LOOP('',(#25356,#25357,#25358,#25359)); +#25356 = ORIENTED_EDGE('',*,*,#25094,.F.); +#25357 = ORIENTED_EDGE('',*,*,#24955,.T.); +#25358 = ORIENTED_EDGE('',*,*,#25343,.T.); +#25359 = ORIENTED_EDGE('',*,*,#24823,.F.); +#25360 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25361,#25362) + ,(#25363,#25364) + ,(#25365,#25366) + ,(#25367,#25368 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(0.,1.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25361 = CARTESIAN_POINT('',(7.50097449872,-0.895130420291, + 0.986451725848)); +#25362 = CARTESIAN_POINT('',(7.499974498734,-0.895130420291, + 0.986451725848)); +#25363 = CARTESIAN_POINT('',(7.50097449872,-0.877080223107, + 0.986451725848)); +#25364 = CARTESIAN_POINT('',(7.499974498734,-0.877080223107, + 0.986451725848)); +#25365 = CARTESIAN_POINT('',(7.50097449872,-0.862066118998, + 0.989612589871)); +#25366 = CARTESIAN_POINT('',(7.499974498734,-0.862066118998, + 0.989612589871)); +#25367 = CARTESIAN_POINT('',(7.50097449872,-0.850088107964, + 0.995934317917)); +#25368 = CARTESIAN_POINT('',(7.499974498734,-0.850088107964, + 0.995934317917)); +#25369 = MANIFOLD_SOLID_BREP('',#25370); +#25370 = CLOSED_SHELL('',(#25371,#25475,#25579,#25601,#25618,#25635, + #25652,#25669,#25686,#25703,#25720,#25737,#25754,#25771)); +#25371 = ADVANCED_FACE('',(#25372),#25470,.T.); +#25372 = FACE_BOUND('',#25373,.T.); +#25373 = EDGE_LOOP('',(#25374,#25384,#25392,#25400,#25408,#25416,#25424, + #25432,#25440,#25448,#25456,#25464)); +#25374 = ORIENTED_EDGE('',*,*,#25375,.F.); +#25375 = EDGE_CURVE('',#25376,#25378,#25380,.T.); +#25376 = VERTEX_POINT('',#25377); +#25377 = CARTESIAN_POINT('',(7.499974498734,-0.730016865408, + 0.98919668671)); +#25378 = VERTEX_POINT('',#25379); +#25379 = CARTESIAN_POINT('',(7.499974498734,-0.730016865408, + 1.007745967687)); +#25380 = LINE('',#25381,#25382); +#25381 = CARTESIAN_POINT('',(7.499974498734,-0.730016865408, + 1.007745967687)); +#25382 = VECTOR('',#25383,1.); +#25383 = DIRECTION('',(0.,0.,1.)); +#25384 = ORIENTED_EDGE('',*,*,#25385,.F.); +#25385 = EDGE_CURVE('',#25386,#25376,#25388,.T.); +#25386 = VERTEX_POINT('',#25387); +#25387 = CARTESIAN_POINT('',(7.499974498734,-0.817522890464, + 0.98919668671)); +#25388 = LINE('',#25389,#25390); +#25389 = CARTESIAN_POINT('',(7.499974498734,-0.730016865408, + 0.98919668671)); +#25390 = VECTOR('',#25391,1.); +#25391 = DIRECTION('',(-9.91202292333E-15,1.,3.717008596249E-15)); +#25392 = ORIENTED_EDGE('',*,*,#25393,.F.); +#25393 = EDGE_CURVE('',#25394,#25386,#25396,.T.); +#25394 = VERTEX_POINT('',#25395); +#25395 = CARTESIAN_POINT('',(7.499974498734,-0.817522890464, + 1.151898003259)); +#25396 = LINE('',#25397,#25398); +#25397 = CARTESIAN_POINT('',(7.499974498734,-0.817522890464, + 0.98919668671)); +#25398 = VECTOR('',#25399,1.); +#25399 = DIRECTION('',(0.,2.665503096958E-15,-1.)); +#25400 = ORIENTED_EDGE('',*,*,#25401,.F.); +#25401 = EDGE_CURVE('',#25402,#25394,#25404,.T.); +#25402 = VERTEX_POINT('',#25403); +#25403 = CARTESIAN_POINT('',(7.499974498734,-0.73371840354, + 1.151898003259)); +#25404 = LINE('',#25405,#25406); +#25405 = CARTESIAN_POINT('',(7.499974498734,-0.817522890464, + 1.151898003259)); +#25406 = VECTOR('',#25407,1.); +#25407 = DIRECTION('',(1.034982443206E-14,-1.,-2.587456108016E-15)); +#25408 = ORIENTED_EDGE('',*,*,#25409,.F.); +#25409 = EDGE_CURVE('',#25410,#25402,#25412,.T.); +#25410 = VERTEX_POINT('',#25411); +#25411 = CARTESIAN_POINT('',(7.499974498734,-0.73371840354, + 1.133182361019)); +#25412 = LINE('',#25413,#25414); +#25413 = CARTESIAN_POINT('',(7.499974498734,-0.73371840354, + 1.151898003259)); +#25414 = VECTOR('',#25415,1.); +#25415 = DIRECTION('',(0.,0.,1.)); +#25416 = ORIENTED_EDGE('',*,*,#25417,.F.); +#25417 = EDGE_CURVE('',#25418,#25410,#25420,.T.); +#25418 = VERTEX_POINT('',#25419); +#25419 = CARTESIAN_POINT('',(7.499974498734,-0.796519780838, + 1.133182361019)); +#25420 = LINE('',#25421,#25422); +#25421 = CARTESIAN_POINT('',(7.499974498734,-0.73371840354, + 1.133182361019)); +#25422 = VECTOR('',#25423,1.); +#25423 = DIRECTION('',(-1.381118955668E-14,1.,1.726398694585E-15)); +#25424 = ORIENTED_EDGE('',*,*,#25425,.F.); +#25425 = EDGE_CURVE('',#25426,#25418,#25428,.T.); +#25426 = VERTEX_POINT('',#25427); +#25427 = CARTESIAN_POINT('',(7.499974498734,-0.796519780838, + 1.081111285272)); +#25428 = LINE('',#25429,#25430); +#25429 = CARTESIAN_POINT('',(7.499974498734,-0.796519780838, + 1.133182361019)); +#25430 = VECTOR('',#25431,1.); +#25431 = DIRECTION('',(0.,-4.164316339928E-15,1.)); +#25432 = ORIENTED_EDGE('',*,*,#25433,.F.); +#25433 = EDGE_CURVE('',#25434,#25426,#25436,.T.); +#25434 = VERTEX_POINT('',#25435); +#25435 = CARTESIAN_POINT('',(7.499974498734,-0.738334928627, + 1.081111285272)); +#25436 = LINE('',#25437,#25438); +#25437 = CARTESIAN_POINT('',(7.499974498734,-0.796519780838, + 1.081111285272)); +#25438 = VECTOR('',#25439,1.); +#25439 = DIRECTION('',(1.490700230929E-14,-1.,-3.726750577321E-15)); +#25440 = ORIENTED_EDGE('',*,*,#25441,.F.); +#25441 = EDGE_CURVE('',#25442,#25434,#25444,.T.); +#25442 = VERTEX_POINT('',#25443); +#25443 = CARTESIAN_POINT('',(7.499974498734,-0.738334928627, + 1.062478823663)); +#25444 = LINE('',#25445,#25446); +#25445 = CARTESIAN_POINT('',(7.499974498734,-0.738334928627, + 1.081111285272)); +#25446 = VECTOR('',#25447,1.); +#25447 = DIRECTION('',(0.,0.,1.)); +#25448 = ORIENTED_EDGE('',*,*,#25449,.F.); +#25449 = EDGE_CURVE('',#25450,#25442,#25452,.T.); +#25450 = VERTEX_POINT('',#25451); +#25451 = CARTESIAN_POINT('',(7.499974498734,-0.796519780838, + 1.062478823663)); +#25452 = LINE('',#25453,#25454); +#25453 = CARTESIAN_POINT('',(7.499974498734,-0.738334928627, + 1.062478823663)); +#25454 = VECTOR('',#25455,1.); +#25455 = DIRECTION('',(-1.490700230929E-14,1.,3.726750577321E-15)); +#25456 = ORIENTED_EDGE('',*,*,#25457,.F.); +#25457 = EDGE_CURVE('',#25458,#25450,#25460,.T.); +#25458 = VERTEX_POINT('',#25459); +#25459 = CARTESIAN_POINT('',(7.499974498734,-0.796519780838, + 1.007745967687)); +#25460 = LINE('',#25461,#25462); +#25461 = CARTESIAN_POINT('',(7.499974498734,-0.796519780838, + 1.062478823663)); +#25462 = VECTOR('',#25463,1.); +#25463 = DIRECTION('',(0.,-7.923592792811E-15,1.)); +#25464 = ORIENTED_EDGE('',*,*,#25465,.F.); +#25465 = EDGE_CURVE('',#25378,#25458,#25466,.T.); +#25466 = LINE('',#25467,#25468); +#25467 = CARTESIAN_POINT('',(7.499974498734,-0.796519780838, + 1.007745967687)); +#25468 = VECTOR('',#25469,1.); +#25469 = DIRECTION('',(1.304246168273E-14,-1.,-3.260615420684E-15)); +#25470 = PLANE('',#25471); +#25471 = AXIS2_PLACEMENT_3D('',#25472,#25473,#25474); +#25472 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 1.849999998875)); +#25473 = DIRECTION('',(-1.,-9.91202292333E-15,0.)); +#25474 = DIRECTION('',(-9.91202292333E-15,1.,0.)); +#25475 = ADVANCED_FACE('',(#25476),#25574,.F.); +#25476 = FACE_BOUND('',#25477,.T.); +#25477 = EDGE_LOOP('',(#25478,#25488,#25496,#25504,#25512,#25520,#25528, + #25536,#25544,#25552,#25560,#25568)); +#25478 = ORIENTED_EDGE('',*,*,#25479,.T.); +#25479 = EDGE_CURVE('',#25480,#25482,#25484,.T.); +#25480 = VERTEX_POINT('',#25481); +#25481 = CARTESIAN_POINT('',(7.50097449872,-0.730016865408,0.98919668671 + )); +#25482 = VERTEX_POINT('',#25483); +#25483 = CARTESIAN_POINT('',(7.50097449872,-0.730016865408, + 1.007745967687)); +#25484 = LINE('',#25485,#25486); +#25485 = CARTESIAN_POINT('',(7.50097449872,-0.730016865408, + 1.007745967687)); +#25486 = VECTOR('',#25487,1.); +#25487 = DIRECTION('',(0.,0.,1.)); +#25488 = ORIENTED_EDGE('',*,*,#25489,.T.); +#25489 = EDGE_CURVE('',#25482,#25490,#25492,.T.); +#25490 = VERTEX_POINT('',#25491); +#25491 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.007745967687)); +#25492 = LINE('',#25493,#25494); +#25493 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.007745967687)); +#25494 = VECTOR('',#25495,1.); +#25495 = DIRECTION('',(1.304246168273E-14,-1.,-3.260615420684E-15)); +#25496 = ORIENTED_EDGE('',*,*,#25497,.T.); +#25497 = EDGE_CURVE('',#25490,#25498,#25500,.T.); +#25498 = VERTEX_POINT('',#25499); +#25499 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.062478823663)); +#25500 = LINE('',#25501,#25502); +#25501 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.062478823663)); +#25502 = VECTOR('',#25503,1.); +#25503 = DIRECTION('',(0.,-7.923592792811E-15,1.)); +#25504 = ORIENTED_EDGE('',*,*,#25505,.T.); +#25505 = EDGE_CURVE('',#25498,#25506,#25508,.T.); +#25506 = VERTEX_POINT('',#25507); +#25507 = CARTESIAN_POINT('',(7.50097449872,-0.738334928627, + 1.062478823663)); +#25508 = LINE('',#25509,#25510); +#25509 = CARTESIAN_POINT('',(7.50097449872,-0.738334928627, + 1.062478823663)); +#25510 = VECTOR('',#25511,1.); +#25511 = DIRECTION('',(-1.490700230929E-14,1.,3.726750577321E-15)); +#25512 = ORIENTED_EDGE('',*,*,#25513,.T.); +#25513 = EDGE_CURVE('',#25506,#25514,#25516,.T.); +#25514 = VERTEX_POINT('',#25515); +#25515 = CARTESIAN_POINT('',(7.50097449872,-0.738334928627, + 1.081111285272)); +#25516 = LINE('',#25517,#25518); +#25517 = CARTESIAN_POINT('',(7.50097449872,-0.738334928627, + 1.081111285272)); +#25518 = VECTOR('',#25519,1.); +#25519 = DIRECTION('',(0.,0.,1.)); +#25520 = ORIENTED_EDGE('',*,*,#25521,.T.); +#25521 = EDGE_CURVE('',#25514,#25522,#25524,.T.); +#25522 = VERTEX_POINT('',#25523); +#25523 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.081111285272)); +#25524 = LINE('',#25525,#25526); +#25525 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.081111285272)); +#25526 = VECTOR('',#25527,1.); +#25527 = DIRECTION('',(1.490700230929E-14,-1.,-3.726750577321E-15)); +#25528 = ORIENTED_EDGE('',*,*,#25529,.T.); +#25529 = EDGE_CURVE('',#25522,#25530,#25532,.T.); +#25530 = VERTEX_POINT('',#25531); +#25531 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.133182361019)); +#25532 = LINE('',#25533,#25534); +#25533 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.133182361019)); +#25534 = VECTOR('',#25535,1.); +#25535 = DIRECTION('',(0.,-4.164316339928E-15,1.)); +#25536 = ORIENTED_EDGE('',*,*,#25537,.T.); +#25537 = EDGE_CURVE('',#25530,#25538,#25540,.T.); +#25538 = VERTEX_POINT('',#25539); +#25539 = CARTESIAN_POINT('',(7.50097449872,-0.73371840354,1.133182361019 + )); +#25540 = LINE('',#25541,#25542); +#25541 = CARTESIAN_POINT('',(7.50097449872,-0.73371840354,1.133182361019 + )); +#25542 = VECTOR('',#25543,1.); +#25543 = DIRECTION('',(-1.381118955668E-14,1.,1.726398694585E-15)); +#25544 = ORIENTED_EDGE('',*,*,#25545,.T.); +#25545 = EDGE_CURVE('',#25538,#25546,#25548,.T.); +#25546 = VERTEX_POINT('',#25547); +#25547 = CARTESIAN_POINT('',(7.50097449872,-0.73371840354,1.151898003259 + )); +#25548 = LINE('',#25549,#25550); +#25549 = CARTESIAN_POINT('',(7.50097449872,-0.73371840354,1.151898003259 + )); +#25550 = VECTOR('',#25551,1.); +#25551 = DIRECTION('',(0.,0.,1.)); +#25552 = ORIENTED_EDGE('',*,*,#25553,.T.); +#25553 = EDGE_CURVE('',#25546,#25554,#25556,.T.); +#25554 = VERTEX_POINT('',#25555); +#25555 = CARTESIAN_POINT('',(7.50097449872,-0.817522890464, + 1.151898003259)); +#25556 = LINE('',#25557,#25558); +#25557 = CARTESIAN_POINT('',(7.50097449872,-0.817522890464, + 1.151898003259)); +#25558 = VECTOR('',#25559,1.); +#25559 = DIRECTION('',(1.034982443206E-14,-1.,-2.587456108016E-15)); +#25560 = ORIENTED_EDGE('',*,*,#25561,.T.); +#25561 = EDGE_CURVE('',#25554,#25562,#25564,.T.); +#25562 = VERTEX_POINT('',#25563); +#25563 = CARTESIAN_POINT('',(7.50097449872,-0.817522890464,0.98919668671 + )); +#25564 = LINE('',#25565,#25566); +#25565 = CARTESIAN_POINT('',(7.50097449872,-0.817522890464,0.98919668671 + )); +#25566 = VECTOR('',#25567,1.); +#25567 = DIRECTION('',(0.,2.665503096958E-15,-1.)); +#25568 = ORIENTED_EDGE('',*,*,#25569,.T.); +#25569 = EDGE_CURVE('',#25562,#25480,#25570,.T.); +#25570 = LINE('',#25571,#25572); +#25571 = CARTESIAN_POINT('',(7.50097449872,-0.730016865408,0.98919668671 + )); +#25572 = VECTOR('',#25573,1.); +#25573 = DIRECTION('',(-9.91202292333E-15,1.,3.717008596249E-15)); +#25574 = PLANE('',#25575); +#25575 = AXIS2_PLACEMENT_3D('',#25576,#25577,#25578); +#25576 = CARTESIAN_POINT('',(7.50097449872,0.934963205914,1.849999998875 + )); +#25577 = DIRECTION('',(-1.,-9.91202292333E-15,0.)); +#25578 = DIRECTION('',(-9.91202292333E-15,1.,0.)); +#25579 = ADVANCED_FACE('',(#25580),#25596,.F.); +#25580 = FACE_BOUND('',#25581,.T.); +#25581 = EDGE_LOOP('',(#25582,#25583,#25589,#25590)); +#25582 = ORIENTED_EDGE('',*,*,#25385,.T.); +#25583 = ORIENTED_EDGE('',*,*,#25584,.F.); +#25584 = EDGE_CURVE('',#25480,#25376,#25585,.T.); +#25585 = LINE('',#25586,#25587); +#25586 = CARTESIAN_POINT('',(7.50097449872,-0.730016865408,0.98919668671 + )); +#25587 = VECTOR('',#25588,1.); +#25588 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25589 = ORIENTED_EDGE('',*,*,#25569,.F.); +#25590 = ORIENTED_EDGE('',*,*,#25591,.T.); +#25591 = EDGE_CURVE('',#25562,#25386,#25592,.T.); +#25592 = LINE('',#25593,#25594); +#25593 = CARTESIAN_POINT('',(7.50097449872,-0.817522890464,0.98919668671 + )); +#25594 = VECTOR('',#25595,1.); +#25595 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25596 = PLANE('',#25597); +#25597 = AXIS2_PLACEMENT_3D('',#25598,#25599,#25600); +#25598 = CARTESIAN_POINT('',(7.50097449872,-0.730016865408,0.98919668671 + )); +#25599 = DIRECTION('',(2.595573230024E-29,-3.717008596249E-15,1.)); +#25600 = DIRECTION('',(0.,-1.,-3.717008596249E-15)); +#25601 = ADVANCED_FACE('',(#25602),#25613,.F.); +#25602 = FACE_BOUND('',#25603,.T.); +#25603 = EDGE_LOOP('',(#25604,#25605,#25606,#25607)); +#25604 = ORIENTED_EDGE('',*,*,#25393,.T.); +#25605 = ORIENTED_EDGE('',*,*,#25591,.F.); +#25606 = ORIENTED_EDGE('',*,*,#25561,.F.); +#25607 = ORIENTED_EDGE('',*,*,#25608,.T.); +#25608 = EDGE_CURVE('',#25554,#25394,#25609,.T.); +#25609 = LINE('',#25610,#25611); +#25610 = CARTESIAN_POINT('',(7.50097449872,-0.817522890464, + 1.151898003259)); +#25611 = VECTOR('',#25612,1.); +#25612 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25613 = PLANE('',#25614); +#25614 = AXIS2_PLACEMENT_3D('',#25615,#25616,#25617); +#25615 = CARTESIAN_POINT('',(7.50097449872,-0.817522890464,0.98919668671 + )); +#25616 = DIRECTION('',(-6.982962677686E-15,1.,2.665503096958E-15)); +#25617 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#25618 = ADVANCED_FACE('',(#25619),#25630,.F.); +#25619 = FACE_BOUND('',#25620,.T.); +#25620 = EDGE_LOOP('',(#25621,#25622,#25623,#25624)); +#25621 = ORIENTED_EDGE('',*,*,#25401,.T.); +#25622 = ORIENTED_EDGE('',*,*,#25608,.F.); +#25623 = ORIENTED_EDGE('',*,*,#25553,.F.); +#25624 = ORIENTED_EDGE('',*,*,#25625,.T.); +#25625 = EDGE_CURVE('',#25546,#25402,#25626,.T.); +#25626 = LINE('',#25627,#25628); +#25627 = CARTESIAN_POINT('',(7.50097449872,-0.73371840354,1.151898003259 + )); +#25628 = VECTOR('',#25629,1.); +#25629 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25630 = PLANE('',#25631); +#25631 = AXIS2_PLACEMENT_3D('',#25632,#25633,#25634); +#25632 = CARTESIAN_POINT('',(7.50097449872,-0.817522890464, + 1.151898003259)); +#25633 = DIRECTION('',(-1.806810943243E-29,2.587456108016E-15,-1.)); +#25634 = DIRECTION('',(-1.,0.,1.806810943243E-29)); +#25635 = ADVANCED_FACE('',(#25636),#25647,.F.); +#25636 = FACE_BOUND('',#25637,.T.); +#25637 = EDGE_LOOP('',(#25638,#25639,#25640,#25641)); +#25638 = ORIENTED_EDGE('',*,*,#25409,.T.); +#25639 = ORIENTED_EDGE('',*,*,#25625,.F.); +#25640 = ORIENTED_EDGE('',*,*,#25545,.F.); +#25641 = ORIENTED_EDGE('',*,*,#25642,.T.); +#25642 = EDGE_CURVE('',#25538,#25410,#25643,.T.); +#25643 = LINE('',#25644,#25645); +#25644 = CARTESIAN_POINT('',(7.50097449872,-0.73371840354,1.133182361019 + )); +#25645 = VECTOR('',#25646,1.); +#25646 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25647 = PLANE('',#25648); +#25648 = AXIS2_PLACEMENT_3D('',#25649,#25650,#25651); +#25649 = CARTESIAN_POINT('',(7.50097449872,-0.73371840354,1.151898003259 + )); +#25650 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#25651 = DIRECTION('',(0.,0.,-1.)); +#25652 = ADVANCED_FACE('',(#25653),#25664,.F.); +#25653 = FACE_BOUND('',#25654,.T.); +#25654 = EDGE_LOOP('',(#25655,#25656,#25657,#25658)); +#25655 = ORIENTED_EDGE('',*,*,#25417,.T.); +#25656 = ORIENTED_EDGE('',*,*,#25642,.F.); +#25657 = ORIENTED_EDGE('',*,*,#25537,.F.); +#25658 = ORIENTED_EDGE('',*,*,#25659,.T.); +#25659 = EDGE_CURVE('',#25530,#25418,#25660,.T.); +#25660 = LINE('',#25661,#25662); +#25661 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.133182361019)); +#25662 = VECTOR('',#25663,1.); +#25663 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25664 = PLANE('',#25665); +#25665 = AXIS2_PLACEMENT_3D('',#25666,#25667,#25668); +#25666 = CARTESIAN_POINT('',(7.50097449872,-0.73371840354,1.133182361019 + )); +#25667 = DIRECTION('',(1.205537765109E-29,-1.726398694585E-15,1.)); +#25668 = DIRECTION('',(0.,-1.,-1.726398694585E-15)); +#25669 = ADVANCED_FACE('',(#25670),#25681,.F.); +#25670 = FACE_BOUND('',#25671,.T.); +#25671 = EDGE_LOOP('',(#25672,#25673,#25674,#25675)); +#25672 = ORIENTED_EDGE('',*,*,#25425,.T.); +#25673 = ORIENTED_EDGE('',*,*,#25659,.F.); +#25674 = ORIENTED_EDGE('',*,*,#25529,.F.); +#25675 = ORIENTED_EDGE('',*,*,#25676,.T.); +#25676 = EDGE_CURVE('',#25522,#25426,#25677,.T.); +#25677 = LINE('',#25678,#25679); +#25678 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.081111285272)); +#25679 = VECTOR('',#25680,1.); +#25680 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25681 = PLANE('',#25682); +#25682 = AXIS2_PLACEMENT_3D('',#25683,#25684,#25685); +#25683 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.133182361019)); +#25684 = DIRECTION('',(6.982962677686E-15,-1.,-4.164316339928E-15)); +#25685 = DIRECTION('',(0.,4.164316339928E-15,-1.)); +#25686 = ADVANCED_FACE('',(#25687),#25698,.F.); +#25687 = FACE_BOUND('',#25688,.T.); +#25688 = EDGE_LOOP('',(#25689,#25690,#25691,#25692)); +#25689 = ORIENTED_EDGE('',*,*,#25433,.T.); +#25690 = ORIENTED_EDGE('',*,*,#25676,.F.); +#25691 = ORIENTED_EDGE('',*,*,#25521,.F.); +#25692 = ORIENTED_EDGE('',*,*,#25693,.T.); +#25693 = EDGE_CURVE('',#25514,#25434,#25694,.T.); +#25694 = LINE('',#25695,#25696); +#25695 = CARTESIAN_POINT('',(7.50097449872,-0.738334928627, + 1.081111285272)); +#25696 = VECTOR('',#25697,1.); +#25697 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25698 = PLANE('',#25699); +#25699 = AXIS2_PLACEMENT_3D('',#25700,#25701,#25702); +#25700 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.081111285272)); +#25701 = DIRECTION('',(-2.602376019048E-29,3.726750577321E-15,-1.)); +#25702 = DIRECTION('',(-1.,0.,2.602376019048E-29)); +#25703 = ADVANCED_FACE('',(#25704),#25715,.F.); +#25704 = FACE_BOUND('',#25705,.T.); +#25705 = EDGE_LOOP('',(#25706,#25707,#25708,#25709)); +#25706 = ORIENTED_EDGE('',*,*,#25441,.T.); +#25707 = ORIENTED_EDGE('',*,*,#25693,.F.); +#25708 = ORIENTED_EDGE('',*,*,#25513,.F.); +#25709 = ORIENTED_EDGE('',*,*,#25710,.T.); +#25710 = EDGE_CURVE('',#25506,#25442,#25711,.T.); +#25711 = LINE('',#25712,#25713); +#25712 = CARTESIAN_POINT('',(7.50097449872,-0.738334928627, + 1.062478823663)); +#25713 = VECTOR('',#25714,1.); +#25714 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25715 = PLANE('',#25716); +#25716 = AXIS2_PLACEMENT_3D('',#25717,#25718,#25719); +#25717 = CARTESIAN_POINT('',(7.50097449872,-0.738334928627, + 1.081111285272)); +#25718 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#25719 = DIRECTION('',(0.,0.,-1.)); +#25720 = ADVANCED_FACE('',(#25721),#25732,.F.); +#25721 = FACE_BOUND('',#25722,.T.); +#25722 = EDGE_LOOP('',(#25723,#25724,#25725,#25726)); +#25723 = ORIENTED_EDGE('',*,*,#25449,.T.); +#25724 = ORIENTED_EDGE('',*,*,#25710,.F.); +#25725 = ORIENTED_EDGE('',*,*,#25505,.F.); +#25726 = ORIENTED_EDGE('',*,*,#25727,.T.); +#25727 = EDGE_CURVE('',#25498,#25450,#25728,.T.); +#25728 = LINE('',#25729,#25730); +#25729 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.062478823663)); +#25730 = VECTOR('',#25731,1.); +#25731 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25732 = PLANE('',#25733); +#25733 = AXIS2_PLACEMENT_3D('',#25734,#25735,#25736); +#25734 = CARTESIAN_POINT('',(7.50097449872,-0.738334928627, + 1.062478823663)); +#25735 = DIRECTION('',(2.602376019048E-29,-3.726750577321E-15,1.)); +#25736 = DIRECTION('',(0.,-1.,-3.726750577321E-15)); +#25737 = ADVANCED_FACE('',(#25738),#25749,.F.); +#25738 = FACE_BOUND('',#25739,.T.); +#25739 = EDGE_LOOP('',(#25740,#25741,#25742,#25743)); +#25740 = ORIENTED_EDGE('',*,*,#25457,.T.); +#25741 = ORIENTED_EDGE('',*,*,#25727,.F.); +#25742 = ORIENTED_EDGE('',*,*,#25497,.F.); +#25743 = ORIENTED_EDGE('',*,*,#25744,.T.); +#25744 = EDGE_CURVE('',#25490,#25458,#25745,.T.); +#25745 = LINE('',#25746,#25747); +#25746 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.007745967687)); +#25747 = VECTOR('',#25748,1.); +#25748 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25749 = PLANE('',#25750); +#25750 = AXIS2_PLACEMENT_3D('',#25751,#25752,#25753); +#25751 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.062478823663)); +#25752 = DIRECTION('',(6.982962677686E-15,-1.,-7.923592792811E-15)); +#25753 = DIRECTION('',(0.,7.923592792811E-15,-1.)); +#25754 = ADVANCED_FACE('',(#25755),#25766,.F.); +#25755 = FACE_BOUND('',#25756,.T.); +#25756 = EDGE_LOOP('',(#25757,#25758,#25759,#25760)); +#25757 = ORIENTED_EDGE('',*,*,#25465,.T.); +#25758 = ORIENTED_EDGE('',*,*,#25744,.F.); +#25759 = ORIENTED_EDGE('',*,*,#25489,.F.); +#25760 = ORIENTED_EDGE('',*,*,#25761,.T.); +#25761 = EDGE_CURVE('',#25482,#25378,#25762,.T.); +#25762 = LINE('',#25763,#25764); +#25763 = CARTESIAN_POINT('',(7.50097449872,-0.730016865408, + 1.007745967687)); +#25764 = VECTOR('',#25765,1.); +#25765 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25766 = PLANE('',#25767); +#25767 = AXIS2_PLACEMENT_3D('',#25768,#25769,#25770); +#25768 = CARTESIAN_POINT('',(7.50097449872,-0.796519780838, + 1.007745967687)); +#25769 = DIRECTION('',(-2.276875578892E-29,3.260615420684E-15,-1.)); +#25770 = DIRECTION('',(-1.,0.,2.276875578892E-29)); +#25771 = ADVANCED_FACE('',(#25772),#25778,.F.); +#25772 = FACE_BOUND('',#25773,.T.); +#25773 = EDGE_LOOP('',(#25774,#25775,#25776,#25777)); +#25774 = ORIENTED_EDGE('',*,*,#25375,.T.); +#25775 = ORIENTED_EDGE('',*,*,#25761,.F.); +#25776 = ORIENTED_EDGE('',*,*,#25479,.F.); +#25777 = ORIENTED_EDGE('',*,*,#25584,.T.); +#25778 = PLANE('',#25779); +#25779 = AXIS2_PLACEMENT_3D('',#25780,#25781,#25782); +#25780 = CARTESIAN_POINT('',(7.50097449872,-0.730016865408, + 1.007745967687)); +#25781 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#25782 = DIRECTION('',(0.,0.,-1.)); +#25783 = MANIFOLD_SOLID_BREP('',#25784); +#25784 = CLOSED_SHELL('',(#25785,#25831,#25868,#25905,#25942,#25973, + #26004,#26026,#26066,#26097,#26134,#26171,#26208,#26245,#26267, + #26291)); +#25785 = ADVANCED_FACE('',(#25786),#25822,.T.); +#25786 = FACE_BOUND('',#25787,.T.); +#25787 = EDGE_LOOP('',(#25788,#25799,#25807,#25816)); +#25788 = ORIENTED_EDGE('',*,*,#25789,.F.); +#25789 = EDGE_CURVE('',#25790,#25792,#25794,.T.); +#25790 = VERTEX_POINT('',#25791); +#25791 = CARTESIAN_POINT('',(7.499974498734,-0.606743168513, + 1.117877124697)); +#25792 = VERTEX_POINT('',#25793); +#25793 = CARTESIAN_POINT('',(7.499974498734,-0.653698635381, + 1.133182361019)); +#25794 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25795,#25796,#25797,#25798), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#25795 = CARTESIAN_POINT('',(7.499974498734,-0.606743168513, + 1.117877124697)); +#25796 = CARTESIAN_POINT('',(7.499974498734,-0.618637998916, + 1.128108342456)); +#25797 = CARTESIAN_POINT('',(7.499974498734,-0.634317548082, + 1.133182361019)); +#25798 = CARTESIAN_POINT('',(7.499974498734,-0.653698635381, + 1.133182361019)); +#25799 = ORIENTED_EDGE('',*,*,#25800,.F.); +#25800 = EDGE_CURVE('',#25801,#25790,#25803,.T.); +#25801 = VERTEX_POINT('',#25802); +#25802 = CARTESIAN_POINT('',(7.50097449872,-0.606743168513, + 1.117877124697)); +#25803 = LINE('',#25804,#25805); +#25804 = CARTESIAN_POINT('',(7.50097449872,-0.606743168513, + 1.117877124697)); +#25805 = VECTOR('',#25806,1.); +#25806 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25807 = ORIENTED_EDGE('',*,*,#25808,.T.); +#25808 = EDGE_CURVE('',#25801,#25809,#25811,.T.); +#25809 = VERTEX_POINT('',#25810); +#25810 = CARTESIAN_POINT('',(7.50097449872,-0.653698635381, + 1.133182361019)); +#25811 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25812,#25813,#25814,#25815), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#25812 = CARTESIAN_POINT('',(7.50097449872,-0.606743168513, + 1.117877124697)); +#25813 = CARTESIAN_POINT('',(7.50097449872,-0.618637998916, + 1.128108342456)); +#25814 = CARTESIAN_POINT('',(7.50097449872,-0.634317548082, + 1.133182361019)); +#25815 = CARTESIAN_POINT('',(7.50097449872,-0.653698635381, + 1.133182361019)); +#25816 = ORIENTED_EDGE('',*,*,#25817,.T.); +#25817 = EDGE_CURVE('',#25809,#25792,#25818,.T.); +#25818 = LINE('',#25819,#25820); +#25819 = CARTESIAN_POINT('',(7.50097449872,-0.653698635381, + 1.133182361019)); +#25820 = VECTOR('',#25821,1.); +#25821 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25822 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25823,#25824) + ,(#25825,#25826) + ,(#25827,#25828) + ,(#25829,#25830 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(5.,6.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25823 = CARTESIAN_POINT('',(7.50097449872,-0.606743168513, + 1.117877124697)); +#25824 = CARTESIAN_POINT('',(7.499974498734,-0.606743168513, + 1.117877124697)); +#25825 = CARTESIAN_POINT('',(7.50097449872,-0.618637998916, + 1.128108342456)); +#25826 = CARTESIAN_POINT('',(7.499974498734,-0.618637998916, + 1.128108342456)); +#25827 = CARTESIAN_POINT('',(7.50097449872,-0.634317548082, + 1.133182361019)); +#25828 = CARTESIAN_POINT('',(7.499974498734,-0.634317548082, + 1.133182361019)); +#25829 = CARTESIAN_POINT('',(7.50097449872,-0.653698635381, + 1.133182361019)); +#25830 = CARTESIAN_POINT('',(7.499974498734,-0.653698635381, + 1.133182361019)); +#25831 = ADVANCED_FACE('',(#25832),#25859,.T.); +#25832 = FACE_BOUND('',#25833,.T.); +#25833 = EDGE_LOOP('',(#25834,#25843,#25851,#25858)); +#25834 = ORIENTED_EDGE('',*,*,#25835,.F.); +#25835 = EDGE_CURVE('',#25836,#25790,#25838,.T.); +#25836 = VERTEX_POINT('',#25837); +#25837 = CARTESIAN_POINT('',(7.499974498734,-0.588900922909, + 1.072044596364)); +#25838 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25839,#25840,#25841,#25842), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#25839 = CARTESIAN_POINT('',(7.499974498734,-0.588900922909, + 1.072044596364)); +#25840 = CARTESIAN_POINT('',(7.499974498734,-0.588900922909, + 1.092340670617)); +#25841 = CARTESIAN_POINT('',(7.499974498734,-0.594848338111, + 1.107645906939)); +#25842 = CARTESIAN_POINT('',(7.499974498734,-0.606743168513, + 1.117877124697)); +#25843 = ORIENTED_EDGE('',*,*,#25844,.F.); +#25844 = EDGE_CURVE('',#25845,#25836,#25847,.T.); +#25845 = VERTEX_POINT('',#25846); +#25846 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.072044596364)); +#25847 = LINE('',#25848,#25849); +#25848 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.072044596364)); +#25849 = VECTOR('',#25850,1.); +#25850 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25851 = ORIENTED_EDGE('',*,*,#25852,.T.); +#25852 = EDGE_CURVE('',#25845,#25801,#25853,.T.); +#25853 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25854,#25855,#25856,#25857), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#25854 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.072044596364)); +#25855 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.092340670617)); +#25856 = CARTESIAN_POINT('',(7.50097449872,-0.594848338111, + 1.107645906939)); +#25857 = CARTESIAN_POINT('',(7.50097449872,-0.606743168513, + 1.117877124697)); +#25858 = ORIENTED_EDGE('',*,*,#25800,.T.); +#25859 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25860,#25861) + ,(#25862,#25863) + ,(#25864,#25865) + ,(#25866,#25867 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(4.,5.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25860 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.072044596364)); +#25861 = CARTESIAN_POINT('',(7.499974498734,-0.588900922909, + 1.072044596364)); +#25862 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.092340670617)); +#25863 = CARTESIAN_POINT('',(7.499974498734,-0.588900922909, + 1.092340670617)); +#25864 = CARTESIAN_POINT('',(7.50097449872,-0.594848338111, + 1.107645906939)); +#25865 = CARTESIAN_POINT('',(7.499974498734,-0.594848338111, + 1.107645906939)); +#25866 = CARTESIAN_POINT('',(7.50097449872,-0.606743168513, + 1.117877124697)); +#25867 = CARTESIAN_POINT('',(7.499974498734,-0.606743168513, + 1.117877124697)); +#25868 = ADVANCED_FACE('',(#25869),#25896,.T.); +#25869 = FACE_BOUND('',#25870,.T.); +#25870 = EDGE_LOOP('',(#25871,#25880,#25888,#25895)); +#25871 = ORIENTED_EDGE('',*,*,#25872,.F.); +#25872 = EDGE_CURVE('',#25873,#25836,#25875,.T.); +#25873 = VERTEX_POINT('',#25874); +#25874 = CARTESIAN_POINT('',(7.499974498734,-0.606285675035, + 1.024714816652)); +#25875 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25876,#25877,#25878,#25879), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#25876 = CARTESIAN_POINT('',(7.499974498734,-0.606285675035, + 1.024714816652)); +#25877 = CARTESIAN_POINT('',(7.499974498734,-0.594681976846, + 1.035944201997)); +#25878 = CARTESIAN_POINT('',(7.499974498734,-0.588900922909, + 1.051748522111)); +#25879 = CARTESIAN_POINT('',(7.499974498734,-0.588900922909, + 1.072044596364)); +#25880 = ORIENTED_EDGE('',*,*,#25881,.F.); +#25881 = EDGE_CURVE('',#25882,#25873,#25884,.T.); +#25882 = VERTEX_POINT('',#25883); +#25883 = CARTESIAN_POINT('',(7.50097449872,-0.606285675035, + 1.024714816652)); +#25884 = LINE('',#25885,#25886); +#25885 = CARTESIAN_POINT('',(7.50097449872,-0.606285675035, + 1.024714816652)); +#25886 = VECTOR('',#25887,1.); +#25887 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25888 = ORIENTED_EDGE('',*,*,#25889,.T.); +#25889 = EDGE_CURVE('',#25882,#25845,#25890,.T.); +#25890 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25891,#25892,#25893,#25894), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#25891 = CARTESIAN_POINT('',(7.50097449872,-0.606285675035, + 1.024714816652)); +#25892 = CARTESIAN_POINT('',(7.50097449872,-0.594681976846, + 1.035944201997)); +#25893 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.051748522111)); +#25894 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.072044596364)); +#25895 = ORIENTED_EDGE('',*,*,#25844,.T.); +#25896 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25897,#25898) + ,(#25899,#25900) + ,(#25901,#25902) + ,(#25903,#25904 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25897 = CARTESIAN_POINT('',(7.50097449872,-0.606285675035, + 1.024714816652)); +#25898 = CARTESIAN_POINT('',(7.499974498734,-0.606285675035, + 1.024714816652)); +#25899 = CARTESIAN_POINT('',(7.50097449872,-0.594681976846, + 1.035944201997)); +#25900 = CARTESIAN_POINT('',(7.499974498734,-0.594681976846, + 1.035944201997)); +#25901 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.051748522111)); +#25902 = CARTESIAN_POINT('',(7.499974498734,-0.588900922909, + 1.051748522111)); +#25903 = CARTESIAN_POINT('',(7.50097449872,-0.588900922909, + 1.072044596364)); +#25904 = CARTESIAN_POINT('',(7.499974498734,-0.588900922909, + 1.072044596364)); +#25905 = ADVANCED_FACE('',(#25906),#25933,.T.); +#25906 = FACE_BOUND('',#25907,.T.); +#25907 = EDGE_LOOP('',(#25908,#25917,#25925,#25932)); +#25908 = ORIENTED_EDGE('',*,*,#25909,.F.); +#25909 = EDGE_CURVE('',#25910,#25873,#25912,.T.); +#25910 = VERTEX_POINT('',#25911); +#25911 = CARTESIAN_POINT('',(7.499974498734,-0.65465521265, + 1.007745967687)); +#25912 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25913,#25914,#25915,#25916), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#25913 = CARTESIAN_POINT('',(7.499974498734,-0.65465521265, + 1.007745967687)); +#25914 = CARTESIAN_POINT('',(7.499974498734,-0.633984825553, + 1.007745967687)); +#25915 = CARTESIAN_POINT('',(7.499974498734,-0.617847782909, + 1.013402250675)); +#25916 = CARTESIAN_POINT('',(7.499974498734,-0.606285675035, + 1.024714816652)); +#25917 = ORIENTED_EDGE('',*,*,#25918,.F.); +#25918 = EDGE_CURVE('',#25919,#25910,#25921,.T.); +#25919 = VERTEX_POINT('',#25920); +#25920 = CARTESIAN_POINT('',(7.50097449872,-0.65465521265,1.007745967687 + )); +#25921 = LINE('',#25922,#25923); +#25922 = CARTESIAN_POINT('',(7.50097449872,-0.65465521265,1.007745967687 + )); +#25923 = VECTOR('',#25924,1.); +#25924 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25925 = ORIENTED_EDGE('',*,*,#25926,.T.); +#25926 = EDGE_CURVE('',#25919,#25882,#25927,.T.); +#25927 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#25928,#25929,#25930,#25931), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#25928 = CARTESIAN_POINT('',(7.50097449872,-0.65465521265,1.007745967687 + )); +#25929 = CARTESIAN_POINT('',(7.50097449872,-0.633984825553, + 1.007745967687)); +#25930 = CARTESIAN_POINT('',(7.50097449872,-0.617847782909, + 1.013402250675)); +#25931 = CARTESIAN_POINT('',(7.50097449872,-0.606285675035, + 1.024714816652)); +#25932 = ORIENTED_EDGE('',*,*,#25881,.T.); +#25933 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#25934,#25935) + ,(#25936,#25937) + ,(#25938,#25939) + ,(#25940,#25941 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(2.,3.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#25934 = CARTESIAN_POINT('',(7.50097449872,-0.65465521265,1.007745967687 + )); +#25935 = CARTESIAN_POINT('',(7.499974498734,-0.65465521265, + 1.007745967687)); +#25936 = CARTESIAN_POINT('',(7.50097449872,-0.633984825553, + 1.007745967687)); +#25937 = CARTESIAN_POINT('',(7.499974498734,-0.633984825553, + 1.007745967687)); +#25938 = CARTESIAN_POINT('',(7.50097449872,-0.617847782909, + 1.013402250675)); +#25939 = CARTESIAN_POINT('',(7.499974498734,-0.617847782909, + 1.013402250675)); +#25940 = CARTESIAN_POINT('',(7.50097449872,-0.606285675035, + 1.024714816652)); +#25941 = CARTESIAN_POINT('',(7.499974498734,-0.606285675035, + 1.024714816652)); +#25942 = ADVANCED_FACE('',(#25943),#25968,.T.); +#25943 = FACE_BOUND('',#25944,.T.); +#25944 = EDGE_LOOP('',(#25945,#25953,#25961,#25967)); +#25945 = ORIENTED_EDGE('',*,*,#25946,.F.); +#25946 = EDGE_CURVE('',#25947,#25910,#25949,.T.); +#25947 = VERTEX_POINT('',#25948); +#25948 = CARTESIAN_POINT('',(7.499974498734,-0.67827851219, + 1.007745967687)); +#25949 = LINE('',#25950,#25951); +#25950 = CARTESIAN_POINT('',(7.499974498734,-0.67827851219, + 1.007745967687)); +#25951 = VECTOR('',#25952,1.); +#25952 = DIRECTION('',(0.,1.,0.)); +#25953 = ORIENTED_EDGE('',*,*,#25954,.F.); +#25954 = EDGE_CURVE('',#25955,#25947,#25957,.T.); +#25955 = VERTEX_POINT('',#25956); +#25956 = CARTESIAN_POINT('',(7.50097449872,-0.67827851219,1.007745967687 + )); +#25957 = LINE('',#25958,#25959); +#25958 = CARTESIAN_POINT('',(7.50097449872,-0.67827851219,1.007745967687 + )); +#25959 = VECTOR('',#25960,1.); +#25960 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25961 = ORIENTED_EDGE('',*,*,#25962,.T.); +#25962 = EDGE_CURVE('',#25955,#25919,#25963,.T.); +#25963 = LINE('',#25964,#25965); +#25964 = CARTESIAN_POINT('',(7.50097449872,-0.67827851219,1.007745967687 + )); +#25965 = VECTOR('',#25966,1.); +#25966 = DIRECTION('',(0.,1.,0.)); +#25967 = ORIENTED_EDGE('',*,*,#25918,.T.); +#25968 = PLANE('',#25969); +#25969 = AXIS2_PLACEMENT_3D('',#25970,#25971,#25972); +#25970 = CARTESIAN_POINT('',(7.50097449872,-0.67827851219,1.007745967687 + )); +#25971 = DIRECTION('',(0.,0.,1.)); +#25972 = DIRECTION('',(1.,0.,-0.)); +#25973 = ADVANCED_FACE('',(#25974),#25999,.T.); +#25974 = FACE_BOUND('',#25975,.T.); +#25975 = EDGE_LOOP('',(#25976,#25984,#25992,#25998)); +#25976 = ORIENTED_EDGE('',*,*,#25977,.F.); +#25977 = EDGE_CURVE('',#25978,#25947,#25980,.T.); +#25978 = VERTEX_POINT('',#25979); +#25979 = CARTESIAN_POINT('',(7.499974498734,-0.67827851219, + 1.133182361019)); +#25980 = LINE('',#25981,#25982); +#25981 = CARTESIAN_POINT('',(7.499974498734,-0.67827851219, + 1.133182361019)); +#25982 = VECTOR('',#25983,1.); +#25983 = DIRECTION('',(0.,3.457376696047E-15,-1.)); +#25984 = ORIENTED_EDGE('',*,*,#25985,.F.); +#25985 = EDGE_CURVE('',#25986,#25978,#25988,.T.); +#25986 = VERTEX_POINT('',#25987); +#25987 = CARTESIAN_POINT('',(7.50097449872,-0.67827851219,1.133182361019 + )); +#25988 = LINE('',#25989,#25990); +#25989 = CARTESIAN_POINT('',(7.50097449872,-0.67827851219,1.133182361019 + )); +#25990 = VECTOR('',#25991,1.); +#25991 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#25992 = ORIENTED_EDGE('',*,*,#25993,.T.); +#25993 = EDGE_CURVE('',#25986,#25955,#25994,.T.); +#25994 = LINE('',#25995,#25996); +#25995 = CARTESIAN_POINT('',(7.50097449872,-0.67827851219,1.133182361019 + )); +#25996 = VECTOR('',#25997,1.); +#25997 = DIRECTION('',(0.,3.457376696047E-15,-1.)); +#25998 = ORIENTED_EDGE('',*,*,#25954,.T.); +#25999 = PLANE('',#26000); +#26000 = AXIS2_PLACEMENT_3D('',#26001,#26002,#26003); +#26001 = CARTESIAN_POINT('',(7.50097449872,-0.67827851219,1.133182361019 + )); +#26002 = DIRECTION('',(-6.982962677686E-15,1.,3.457376696047E-15)); +#26003 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#26004 = ADVANCED_FACE('',(#26005),#26021,.T.); +#26005 = FACE_BOUND('',#26006,.T.); +#26006 = EDGE_LOOP('',(#26007,#26013,#26014,#26020)); +#26007 = ORIENTED_EDGE('',*,*,#26008,.F.); +#26008 = EDGE_CURVE('',#25792,#25978,#26009,.T.); +#26009 = LINE('',#26010,#26011); +#26010 = CARTESIAN_POINT('',(7.499974498734,-0.653698635381, + 1.133182361019)); +#26011 = VECTOR('',#26012,1.); +#26012 = DIRECTION('',(0.,-1.,0.)); +#26013 = ORIENTED_EDGE('',*,*,#25817,.F.); +#26014 = ORIENTED_EDGE('',*,*,#26015,.T.); +#26015 = EDGE_CURVE('',#25809,#25986,#26016,.T.); +#26016 = LINE('',#26017,#26018); +#26017 = CARTESIAN_POINT('',(7.50097449872,-0.653698635381, + 1.133182361019)); +#26018 = VECTOR('',#26019,1.); +#26019 = DIRECTION('',(0.,-1.,0.)); +#26020 = ORIENTED_EDGE('',*,*,#25985,.T.); +#26021 = PLANE('',#26022); +#26022 = AXIS2_PLACEMENT_3D('',#26023,#26024,#26025); +#26023 = CARTESIAN_POINT('',(7.50097449872,-0.653698635381, + 1.133182361019)); +#26024 = DIRECTION('',(0.,0.,-1.)); +#26025 = DIRECTION('',(0.,-1.,0.)); +#26026 = ADVANCED_FACE('',(#26027),#26061,.F.); +#26027 = FACE_BOUND('',#26028,.T.); +#26028 = EDGE_LOOP('',(#26029,#26039,#26047,#26055)); +#26029 = ORIENTED_EDGE('',*,*,#26030,.T.); +#26030 = EDGE_CURVE('',#26031,#26033,#26035,.T.); +#26031 = VERTEX_POINT('',#26032); +#26032 = CARTESIAN_POINT('',(7.499974498734,-0.699281621816, + 1.151898003259)); +#26033 = VERTEX_POINT('',#26034); +#26034 = CARTESIAN_POINT('',(7.499974498734,-0.699281621816, + 0.98919668671)); +#26035 = LINE('',#26036,#26037); +#26036 = CARTESIAN_POINT('',(7.499974498734,-0.699281621816, + 0.98919668671)); +#26037 = VECTOR('',#26038,1.); +#26038 = DIRECTION('',(0.,2.665503096958E-15,-1.)); +#26039 = ORIENTED_EDGE('',*,*,#26040,.F.); +#26040 = EDGE_CURVE('',#26041,#26033,#26043,.T.); +#26041 = VERTEX_POINT('',#26042); +#26042 = CARTESIAN_POINT('',(7.50097449872,-0.699281621816,0.98919668671 + )); +#26043 = LINE('',#26044,#26045); +#26044 = CARTESIAN_POINT('',(7.50097449872,-0.699281621816,0.98919668671 + )); +#26045 = VECTOR('',#26046,1.); +#26046 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26047 = ORIENTED_EDGE('',*,*,#26048,.F.); +#26048 = EDGE_CURVE('',#26049,#26041,#26051,.T.); +#26049 = VERTEX_POINT('',#26050); +#26050 = CARTESIAN_POINT('',(7.50097449872,-0.699281621816, + 1.151898003259)); +#26051 = LINE('',#26052,#26053); +#26052 = CARTESIAN_POINT('',(7.50097449872,-0.699281621816,0.98919668671 + )); +#26053 = VECTOR('',#26054,1.); +#26054 = DIRECTION('',(0.,2.665503096958E-15,-1.)); +#26055 = ORIENTED_EDGE('',*,*,#26056,.T.); +#26056 = EDGE_CURVE('',#26049,#26031,#26057,.T.); +#26057 = LINE('',#26058,#26059); +#26058 = CARTESIAN_POINT('',(7.50097449872,-0.699281621816, + 1.151898003259)); +#26059 = VECTOR('',#26060,1.); +#26060 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26061 = PLANE('',#26062); +#26062 = AXIS2_PLACEMENT_3D('',#26063,#26064,#26065); +#26063 = CARTESIAN_POINT('',(7.50097449872,-0.699281621816,0.98919668671 + )); +#26064 = DIRECTION('',(-6.982962677686E-15,1.,2.665503096958E-15)); +#26065 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#26066 = ADVANCED_FACE('',(#26067),#26092,.F.); +#26067 = FACE_BOUND('',#26068,.T.); +#26068 = EDGE_LOOP('',(#26069,#26077,#26078,#26086)); +#26069 = ORIENTED_EDGE('',*,*,#26070,.T.); +#26070 = EDGE_CURVE('',#26071,#26031,#26073,.T.); +#26071 = VERTEX_POINT('',#26072); +#26072 = CARTESIAN_POINT('',(7.499974498734,-0.652866829058, + 1.151898003259)); +#26073 = LINE('',#26074,#26075); +#26074 = CARTESIAN_POINT('',(7.499974498734,-0.699281621816, + 1.151898003259)); +#26075 = VECTOR('',#26076,1.); +#26076 = DIRECTION('',(0.,-1.,-4.671795750543E-15)); +#26077 = ORIENTED_EDGE('',*,*,#26056,.F.); +#26078 = ORIENTED_EDGE('',*,*,#26079,.F.); +#26079 = EDGE_CURVE('',#26080,#26049,#26082,.T.); +#26080 = VERTEX_POINT('',#26081); +#26081 = CARTESIAN_POINT('',(7.50097449872,-0.652866829058, + 1.151898003259)); +#26082 = LINE('',#26083,#26084); +#26083 = CARTESIAN_POINT('',(7.50097449872,-0.699281621816, + 1.151898003259)); +#26084 = VECTOR('',#26085,1.); +#26085 = DIRECTION('',(0.,-1.,-4.671795750543E-15)); +#26086 = ORIENTED_EDGE('',*,*,#26087,.T.); +#26087 = EDGE_CURVE('',#26080,#26071,#26088,.T.); +#26088 = LINE('',#26089,#26090); +#26089 = CARTESIAN_POINT('',(7.50097449872,-0.652866829058, + 1.151898003259)); +#26090 = VECTOR('',#26091,1.); +#26091 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26092 = PLANE('',#26093); +#26093 = AXIS2_PLACEMENT_3D('',#26094,#26095,#26096); +#26094 = CARTESIAN_POINT('',(7.50097449872,-0.699281621816, + 1.151898003259)); +#26095 = DIRECTION('',(-3.262297536382E-29,4.671795750543E-15,-1.)); +#26096 = DIRECTION('',(-1.,0.,3.262297536382E-29)); +#26097 = ADVANCED_FACE('',(#26098),#26125,.F.); +#26098 = FACE_BOUND('',#26099,.F.); +#26099 = EDGE_LOOP('',(#26100,#26110,#26117,#26118)); +#26100 = ORIENTED_EDGE('',*,*,#26101,.F.); +#26101 = EDGE_CURVE('',#26102,#26104,#26106,.T.); +#26102 = VERTEX_POINT('',#26103); +#26103 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.130354219524)); +#26104 = VERTEX_POINT('',#26105); +#26105 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.130354219524)); +#26106 = LINE('',#26107,#26108); +#26107 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.130354219524)); +#26108 = VECTOR('',#26109,1.); +#26109 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26110 = ORIENTED_EDGE('',*,*,#26111,.T.); +#26111 = EDGE_CURVE('',#26102,#26080,#26112,.T.); +#26112 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26113,#26114,#26115,#26116), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#26113 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.130354219524)); +#26114 = CARTESIAN_POINT('',(7.50097449872,-0.607699745783, + 1.144744468892)); +#26115 = CARTESIAN_POINT('',(7.50097449872,-0.628203771616, + 1.151898003259)); +#26116 = CARTESIAN_POINT('',(7.50097449872,-0.652866829058, + 1.151898003259)); +#26117 = ORIENTED_EDGE('',*,*,#26087,.T.); +#26118 = ORIENTED_EDGE('',*,*,#26119,.F.); +#26119 = EDGE_CURVE('',#26104,#26071,#26120,.T.); +#26120 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26121,#26122,#26123,#26124), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#26121 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.130354219524)); +#26122 = CARTESIAN_POINT('',(7.499974498734,-0.607699745783, + 1.144744468892)); +#26123 = CARTESIAN_POINT('',(7.499974498734,-0.628203771616, + 1.151898003259)); +#26124 = CARTESIAN_POINT('',(7.499974498734,-0.652866829058, + 1.151898003259)); +#26125 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#26126,#26127) + ,(#26128,#26129) + ,(#26130,#26131) + ,(#26132,#26133 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(2.,3.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#26126 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.130354219524)); +#26127 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.130354219524)); +#26128 = CARTESIAN_POINT('',(7.50097449872,-0.607699745783, + 1.144744468892)); +#26129 = CARTESIAN_POINT('',(7.499974498734,-0.607699745783, + 1.144744468892)); +#26130 = CARTESIAN_POINT('',(7.50097449872,-0.628203771616, + 1.151898003259)); +#26131 = CARTESIAN_POINT('',(7.499974498734,-0.628203771616, + 1.151898003259)); +#26132 = CARTESIAN_POINT('',(7.50097449872,-0.652866829058, + 1.151898003259)); +#26133 = CARTESIAN_POINT('',(7.499974498734,-0.652866829058, + 1.151898003259)); +#26134 = ADVANCED_FACE('',(#26135),#26162,.F.); +#26135 = FACE_BOUND('',#26136,.F.); +#26136 = EDGE_LOOP('',(#26137,#26147,#26154,#26155)); +#26137 = ORIENTED_EDGE('',*,*,#26138,.F.); +#26138 = EDGE_CURVE('',#26139,#26141,#26143,.T.); +#26139 = VERTEX_POINT('',#26140); +#26140 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065,1.07262686079 + )); +#26141 = VERTEX_POINT('',#26142); +#26142 = CARTESIAN_POINT('',(7.499974498734,-0.566816465065, + 1.07262686079)); +#26143 = LINE('',#26144,#26145); +#26144 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065,1.07262686079 + )); +#26145 = VECTOR('',#26146,1.); +#26146 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26147 = ORIENTED_EDGE('',*,*,#26148,.T.); +#26148 = EDGE_CURVE('',#26139,#26102,#26149,.T.); +#26149 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26150,#26151,#26152,#26153), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#26150 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065,1.07262686079 + )); +#26151 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065, + 1.096749244122)); +#26152 = CARTESIAN_POINT('',(7.50097449872,-0.575009757335, + 1.115963970156)); +#26153 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.130354219524)); +#26154 = ORIENTED_EDGE('',*,*,#26101,.T.); +#26155 = ORIENTED_EDGE('',*,*,#26156,.F.); +#26156 = EDGE_CURVE('',#26141,#26104,#26157,.T.); +#26157 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26158,#26159,#26160,#26161), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#26158 = CARTESIAN_POINT('',(7.499974498734,-0.566816465065, + 1.07262686079)); +#26159 = CARTESIAN_POINT('',(7.499974498734,-0.566816465065, + 1.096749244122)); +#26160 = CARTESIAN_POINT('',(7.499974498734,-0.575009757335, + 1.115963970156)); +#26161 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.130354219524)); +#26162 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#26163,#26164) + ,(#26165,#26166) + ,(#26167,#26168) + ,(#26169,#26170 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#26163 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065,1.07262686079 + )); +#26164 = CARTESIAN_POINT('',(7.499974498734,-0.566816465065, + 1.07262686079)); +#26165 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065, + 1.096749244122)); +#26166 = CARTESIAN_POINT('',(7.499974498734,-0.566816465065, + 1.096749244122)); +#26167 = CARTESIAN_POINT('',(7.50097449872,-0.575009757335, + 1.115963970156)); +#26168 = CARTESIAN_POINT('',(7.499974498734,-0.575009757335, + 1.115963970156)); +#26169 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.130354219524)); +#26170 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.130354219524)); +#26171 = ADVANCED_FACE('',(#26172),#26199,.F.); +#26172 = FACE_BOUND('',#26173,.F.); +#26173 = EDGE_LOOP('',(#26174,#26184,#26191,#26192)); +#26174 = ORIENTED_EDGE('',*,*,#26175,.F.); +#26175 = EDGE_CURVE('',#26176,#26178,#26180,.T.); +#26176 = VERTEX_POINT('',#26177); +#26177 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.011988179928)); +#26178 = VERTEX_POINT('',#26179); +#26179 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.011988179928)); +#26180 = LINE('',#26181,#26182); +#26181 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.011988179928)); +#26182 = VECTOR('',#26183,1.); +#26183 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26184 = ORIENTED_EDGE('',*,*,#26185,.T.); +#26185 = EDGE_CURVE('',#26176,#26139,#26186,.T.); +#26186 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26187,#26188,#26189,#26190), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#26187 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.011988179928)); +#26188 = CARTESIAN_POINT('',(7.50097449872,-0.575009757335, + 1.027210235618)); +#26189 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065, + 1.047423129238)); +#26190 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065,1.07262686079 + )); +#26191 = ORIENTED_EDGE('',*,*,#26138,.T.); +#26192 = ORIENTED_EDGE('',*,*,#26193,.F.); +#26193 = EDGE_CURVE('',#26178,#26141,#26194,.T.); +#26194 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26195,#26196,#26197,#26198), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#26195 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.011988179928)); +#26196 = CARTESIAN_POINT('',(7.499974498734,-0.575009757335, + 1.027210235618)); +#26197 = CARTESIAN_POINT('',(7.499974498734,-0.566816465065, + 1.047423129238)); +#26198 = CARTESIAN_POINT('',(7.499974498734,-0.566816465065, + 1.07262686079)); +#26199 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#26200,#26201) + ,(#26202,#26203) + ,(#26204,#26205) + ,(#26206,#26207 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(4.,5.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#26200 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.011988179928)); +#26201 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.011988179928)); +#26202 = CARTESIAN_POINT('',(7.50097449872,-0.575009757335, + 1.027210235618)); +#26203 = CARTESIAN_POINT('',(7.499974498734,-0.575009757335, + 1.027210235618)); +#26204 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065, + 1.047423129238)); +#26205 = CARTESIAN_POINT('',(7.499974498734,-0.566816465065, + 1.047423129238)); +#26206 = CARTESIAN_POINT('',(7.50097449872,-0.566816465065,1.07262686079 + )); +#26207 = CARTESIAN_POINT('',(7.499974498734,-0.566816465065, + 1.07262686079)); +#26208 = ADVANCED_FACE('',(#26209),#26236,.F.); +#26209 = FACE_BOUND('',#26210,.F.); +#26210 = EDGE_LOOP('',(#26211,#26221,#26228,#26229)); +#26211 = ORIENTED_EDGE('',*,*,#26212,.F.); +#26212 = EDGE_CURVE('',#26213,#26215,#26217,.T.); +#26213 = VERTEX_POINT('',#26214); +#26214 = CARTESIAN_POINT('',(7.50097449872,-0.654530441702,0.98919668671 + )); +#26215 = VERTEX_POINT('',#26216); +#26216 = CARTESIAN_POINT('',(7.499974498734,-0.654530441702, + 0.98919668671)); +#26217 = LINE('',#26218,#26219); +#26218 = CARTESIAN_POINT('',(7.50097449872,-0.654530441702,0.98919668671 + )); +#26219 = VECTOR('',#26220,1.); +#26220 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26221 = ORIENTED_EDGE('',*,*,#26222,.T.); +#26222 = EDGE_CURVE('',#26213,#26176,#26223,.T.); +#26223 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26224,#26225,#26226,#26227), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#26224 = CARTESIAN_POINT('',(7.50097449872,-0.654530441702,0.98919668671 + )); +#26225 = CARTESIAN_POINT('',(7.50097449872,-0.628786036042,0.98919668671 + )); +#26226 = CARTESIAN_POINT('',(7.50097449872,-0.607699745783, + 0.996766124239)); +#26227 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.011988179928)); +#26228 = ORIENTED_EDGE('',*,*,#26175,.T.); +#26229 = ORIENTED_EDGE('',*,*,#26230,.F.); +#26230 = EDGE_CURVE('',#26215,#26178,#26231,.T.); +#26231 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26232,#26233,#26234,#26235), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#26232 = CARTESIAN_POINT('',(7.499974498734,-0.654530441702, + 0.98919668671)); +#26233 = CARTESIAN_POINT('',(7.499974498734,-0.628786036042, + 0.98919668671)); +#26234 = CARTESIAN_POINT('',(7.499974498734,-0.607699745783, + 0.996766124239)); +#26235 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.011988179928)); +#26236 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#26237,#26238) + ,(#26239,#26240) + ,(#26241,#26242) + ,(#26243,#26244 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(5.,6.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#26237 = CARTESIAN_POINT('',(7.50097449872,-0.654530441702,0.98919668671 + )); +#26238 = CARTESIAN_POINT('',(7.499974498734,-0.654530441702, + 0.98919668671)); +#26239 = CARTESIAN_POINT('',(7.50097449872,-0.628786036042,0.98919668671 + )); +#26240 = CARTESIAN_POINT('',(7.499974498734,-0.628786036042, + 0.98919668671)); +#26241 = CARTESIAN_POINT('',(7.50097449872,-0.607699745783, + 0.996766124239)); +#26242 = CARTESIAN_POINT('',(7.499974498734,-0.607699745783, + 0.996766124239)); +#26243 = CARTESIAN_POINT('',(7.50097449872,-0.591354751559, + 1.011988179928)); +#26244 = CARTESIAN_POINT('',(7.499974498734,-0.591354751559, + 1.011988179928)); +#26245 = ADVANCED_FACE('',(#26246),#26262,.F.); +#26246 = FACE_BOUND('',#26247,.T.); +#26247 = EDGE_LOOP('',(#26248,#26254,#26255,#26261)); +#26248 = ORIENTED_EDGE('',*,*,#26249,.T.); +#26249 = EDGE_CURVE('',#26033,#26215,#26250,.T.); +#26250 = LINE('',#26251,#26252); +#26251 = CARTESIAN_POINT('',(7.499974498734,-0.654530441702, + 0.98919668671)); +#26252 = VECTOR('',#26253,1.); +#26253 = DIRECTION('',(0.,1.,2.422734227529E-15)); +#26254 = ORIENTED_EDGE('',*,*,#26212,.F.); +#26255 = ORIENTED_EDGE('',*,*,#26256,.F.); +#26256 = EDGE_CURVE('',#26041,#26213,#26257,.T.); +#26257 = LINE('',#26258,#26259); +#26258 = CARTESIAN_POINT('',(7.50097449872,-0.654530441702,0.98919668671 + )); +#26259 = VECTOR('',#26260,1.); +#26260 = DIRECTION('',(0.,1.,2.422734227529E-15)); +#26261 = ORIENTED_EDGE('',*,*,#26040,.T.); +#26262 = PLANE('',#26263); +#26263 = AXIS2_PLACEMENT_3D('',#26264,#26265,#26266); +#26264 = CARTESIAN_POINT('',(7.50097449872,-0.654530441702,0.98919668671 + )); +#26265 = DIRECTION('',(1.691786268879E-29,-2.422734227529E-15,1.)); +#26266 = DIRECTION('',(0.,-1.,-2.422734227529E-15)); +#26267 = ADVANCED_FACE('',(#26268,#26277),#26286,.F.); +#26268 = FACE_BOUND('',#26269,.T.); +#26269 = EDGE_LOOP('',(#26270,#26271,#26272,#26273,#26274,#26275,#26276) + ); +#26270 = ORIENTED_EDGE('',*,*,#26008,.T.); +#26271 = ORIENTED_EDGE('',*,*,#25977,.T.); +#26272 = ORIENTED_EDGE('',*,*,#25946,.T.); +#26273 = ORIENTED_EDGE('',*,*,#25909,.T.); +#26274 = ORIENTED_EDGE('',*,*,#25872,.T.); +#26275 = ORIENTED_EDGE('',*,*,#25835,.T.); +#26276 = ORIENTED_EDGE('',*,*,#25789,.T.); +#26277 = FACE_BOUND('',#26278,.T.); +#26278 = EDGE_LOOP('',(#26279,#26280,#26281,#26282,#26283,#26284,#26285) + ); +#26279 = ORIENTED_EDGE('',*,*,#26249,.F.); +#26280 = ORIENTED_EDGE('',*,*,#26030,.F.); +#26281 = ORIENTED_EDGE('',*,*,#26070,.F.); +#26282 = ORIENTED_EDGE('',*,*,#26119,.F.); +#26283 = ORIENTED_EDGE('',*,*,#26156,.F.); +#26284 = ORIENTED_EDGE('',*,*,#26193,.F.); +#26285 = ORIENTED_EDGE('',*,*,#26230,.F.); +#26286 = PLANE('',#26287); +#26287 = AXIS2_PLACEMENT_3D('',#26288,#26289,#26290); +#26288 = CARTESIAN_POINT('',(7.499974498734,-0.618991516602, + 1.146522454905)); +#26289 = DIRECTION('',(1.,0.,0.)); +#26290 = DIRECTION('',(-0.,1.,0.)); +#26291 = ADVANCED_FACE('',(#26292,#26301),#26310,.T.); +#26292 = FACE_BOUND('',#26293,.T.); +#26293 = EDGE_LOOP('',(#26294,#26295,#26296,#26297,#26298,#26299,#26300) + ); +#26294 = ORIENTED_EDGE('',*,*,#25993,.F.); +#26295 = ORIENTED_EDGE('',*,*,#26015,.F.); +#26296 = ORIENTED_EDGE('',*,*,#25808,.F.); +#26297 = ORIENTED_EDGE('',*,*,#25852,.F.); +#26298 = ORIENTED_EDGE('',*,*,#25889,.F.); +#26299 = ORIENTED_EDGE('',*,*,#25926,.F.); +#26300 = ORIENTED_EDGE('',*,*,#25962,.F.); +#26301 = FACE_BOUND('',#26302,.T.); +#26302 = EDGE_LOOP('',(#26303,#26304,#26305,#26306,#26307,#26308,#26309) + ); +#26303 = ORIENTED_EDGE('',*,*,#26256,.T.); +#26304 = ORIENTED_EDGE('',*,*,#26222,.T.); +#26305 = ORIENTED_EDGE('',*,*,#26185,.T.); +#26306 = ORIENTED_EDGE('',*,*,#26148,.T.); +#26307 = ORIENTED_EDGE('',*,*,#26111,.T.); +#26308 = ORIENTED_EDGE('',*,*,#26079,.T.); +#26309 = ORIENTED_EDGE('',*,*,#26048,.T.); +#26310 = PLANE('',#26311); +#26311 = AXIS2_PLACEMENT_3D('',#26312,#26313,#26314); +#26312 = CARTESIAN_POINT('',(7.50097449872,-0.618991516602, + 1.146522454905)); +#26313 = DIRECTION('',(1.,0.,0.)); +#26314 = DIRECTION('',(-0.,1.,0.)); +#26315 = MANIFOLD_SOLID_BREP('',#26316); +#26316 = CLOSED_SHELL('',(#26317,#26357,#26394,#26425,#26462,#26493, + #26515,#26555,#26586,#26617,#26648,#26679,#26710,#26741,#26763, + #26787)); +#26317 = ADVANCED_FACE('',(#26318),#26352,.T.); +#26318 = FACE_BOUND('',#26319,.T.); +#26319 = EDGE_LOOP('',(#26320,#26330,#26338,#26346)); +#26320 = ORIENTED_EDGE('',*,*,#26321,.F.); +#26321 = EDGE_CURVE('',#26322,#26324,#26326,.T.); +#26322 = VERTEX_POINT('',#26323); +#26323 = CARTESIAN_POINT('',(7.499974498734,-0.487961225756, + 1.119707098605)); +#26324 = VERTEX_POINT('',#26325); +#26325 = CARTESIAN_POINT('',(7.499974498734,-0.51229156067, + 1.052081244641)); +#26326 = LINE('',#26327,#26328); +#26327 = CARTESIAN_POINT('',(7.499974498734,-0.487961225756, + 1.119707098605)); +#26328 = VECTOR('',#26329,1.); +#26329 = DIRECTION('',(1.206856924964E-14,-0.338535034314, + -0.940953787676)); +#26330 = ORIENTED_EDGE('',*,*,#26331,.F.); +#26331 = EDGE_CURVE('',#26332,#26322,#26334,.T.); +#26332 = VERTEX_POINT('',#26333); +#26333 = CARTESIAN_POINT('',(7.50097449872,-0.487961225756, + 1.119707098605)); +#26334 = LINE('',#26335,#26336); +#26335 = CARTESIAN_POINT('',(7.50097449872,-0.487961225756, + 1.119707098605)); +#26336 = VECTOR('',#26337,1.); +#26337 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26338 = ORIENTED_EDGE('',*,*,#26339,.T.); +#26339 = EDGE_CURVE('',#26332,#26340,#26342,.T.); +#26340 = VERTEX_POINT('',#26341); +#26341 = CARTESIAN_POINT('',(7.50097449872,-0.51229156067,1.052081244641 + )); +#26342 = LINE('',#26343,#26344); +#26343 = CARTESIAN_POINT('',(7.50097449872,-0.487961225756, + 1.119707098605)); +#26344 = VECTOR('',#26345,1.); +#26345 = DIRECTION('',(1.206856924964E-14,-0.338535034314, + -0.940953787676)); +#26346 = ORIENTED_EDGE('',*,*,#26347,.T.); +#26347 = EDGE_CURVE('',#26340,#26324,#26348,.T.); +#26348 = LINE('',#26349,#26350); +#26349 = CARTESIAN_POINT('',(7.50097449872,-0.51229156067,1.052081244641 + )); +#26350 = VECTOR('',#26351,1.); +#26351 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26352 = PLANE('',#26353); +#26353 = AXIS2_PLACEMENT_3D('',#26354,#26355,#26356); +#26354 = CARTESIAN_POINT('',(7.50097449872,-0.487961225756, + 1.119707098605)); +#26355 = DIRECTION('',(-6.57064518077E-15,0.940953787676,-0.338535034314 + )); +#26356 = DIRECTION('',(-1.,1.577721810442E-30,1.940905523732E-14)); +#26357 = ADVANCED_FACE('',(#26358),#26385,.T.); +#26358 = FACE_BOUND('',#26359,.T.); +#26359 = EDGE_LOOP('',(#26360,#26369,#26377,#26384)); +#26360 = ORIENTED_EDGE('',*,*,#26361,.F.); +#26361 = EDGE_CURVE('',#26362,#26322,#26364,.T.); +#26362 = VERTEX_POINT('',#26363); +#26363 = CARTESIAN_POINT('',(7.499974498734,-0.485299445526, + 1.131102845214)); +#26364 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26365,#26366,#26367,#26368), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#26365 = CARTESIAN_POINT('',(7.499974498734,-0.485299445526, + 1.131102845214)); +#26366 = CARTESIAN_POINT('',(7.499974498734,-0.486089661532, + 1.126195187915)); +#26367 = CARTESIAN_POINT('',(7.499974498734,-0.48696305817, + 1.122368878835)); +#26368 = CARTESIAN_POINT('',(7.499974498734,-0.487961225756, + 1.119707098605)); +#26369 = ORIENTED_EDGE('',*,*,#26370,.F.); +#26370 = EDGE_CURVE('',#26371,#26362,#26373,.T.); +#26371 = VERTEX_POINT('',#26372); +#26372 = CARTESIAN_POINT('',(7.50097449872,-0.485299445526, + 1.131102845214)); +#26373 = LINE('',#26374,#26375); +#26374 = CARTESIAN_POINT('',(7.50097449872,-0.485299445526, + 1.131102845214)); +#26375 = VECTOR('',#26376,1.); +#26376 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26377 = ORIENTED_EDGE('',*,*,#26378,.T.); +#26378 = EDGE_CURVE('',#26371,#26332,#26379,.T.); +#26379 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26380,#26381,#26382,#26383), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#26380 = CARTESIAN_POINT('',(7.50097449872,-0.485299445526, + 1.131102845214)); +#26381 = CARTESIAN_POINT('',(7.50097449872,-0.486089661532, + 1.126195187915)); +#26382 = CARTESIAN_POINT('',(7.50097449872,-0.48696305817,1.122368878835 + )); +#26383 = CARTESIAN_POINT('',(7.50097449872,-0.487961225756, + 1.119707098605)); +#26384 = ORIENTED_EDGE('',*,*,#26331,.T.); +#26385 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#26386,#26387) + ,(#26388,#26389) + ,(#26390,#26391) + ,(#26392,#26393 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#26386 = CARTESIAN_POINT('',(7.50097449872,-0.485299445526, + 1.131102845214)); +#26387 = CARTESIAN_POINT('',(7.499974498734,-0.485299445526, + 1.131102845214)); +#26388 = CARTESIAN_POINT('',(7.50097449872,-0.486089661532, + 1.126195187915)); +#26389 = CARTESIAN_POINT('',(7.499974498734,-0.486089661532, + 1.126195187915)); +#26390 = CARTESIAN_POINT('',(7.50097449872,-0.48696305817,1.122368878835 + )); +#26391 = CARTESIAN_POINT('',(7.499974498734,-0.48696305817, + 1.122368878835)); +#26392 = CARTESIAN_POINT('',(7.50097449872,-0.487961225756, + 1.119707098605)); +#26393 = CARTESIAN_POINT('',(7.499974498734,-0.487961225756, + 1.119707098605)); +#26394 = ADVANCED_FACE('',(#26395),#26420,.T.); +#26395 = FACE_BOUND('',#26396,.T.); +#26396 = EDGE_LOOP('',(#26397,#26405,#26413,#26419)); +#26397 = ORIENTED_EDGE('',*,*,#26398,.F.); +#26398 = EDGE_CURVE('',#26399,#26362,#26401,.T.); +#26399 = VERTEX_POINT('',#26400); +#26400 = CARTESIAN_POINT('',(7.499974498734,-0.484800361733, + 1.131102845214)); +#26401 = LINE('',#26402,#26403); +#26402 = CARTESIAN_POINT('',(7.499974498734,-0.484800361733, + 1.131102845214)); +#26403 = VECTOR('',#26404,1.); +#26404 = DIRECTION('',(0.,-1.,0.)); +#26405 = ORIENTED_EDGE('',*,*,#26406,.F.); +#26406 = EDGE_CURVE('',#26407,#26399,#26409,.T.); +#26407 = VERTEX_POINT('',#26408); +#26408 = CARTESIAN_POINT('',(7.50097449872,-0.484800361733, + 1.131102845214)); +#26409 = LINE('',#26410,#26411); +#26410 = CARTESIAN_POINT('',(7.50097449872,-0.484800361733, + 1.131102845214)); +#26411 = VECTOR('',#26412,1.); +#26412 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26413 = ORIENTED_EDGE('',*,*,#26414,.T.); +#26414 = EDGE_CURVE('',#26407,#26371,#26415,.T.); +#26415 = LINE('',#26416,#26417); +#26416 = CARTESIAN_POINT('',(7.50097449872,-0.484800361733, + 1.131102845214)); +#26417 = VECTOR('',#26418,1.); +#26418 = DIRECTION('',(0.,-1.,0.)); +#26419 = ORIENTED_EDGE('',*,*,#26370,.T.); +#26420 = PLANE('',#26421); +#26421 = AXIS2_PLACEMENT_3D('',#26422,#26423,#26424); +#26422 = CARTESIAN_POINT('',(7.50097449872,-0.484800361733, + 1.131102845214)); +#26423 = DIRECTION('',(0.,0.,-1.)); +#26424 = DIRECTION('',(0.,-1.,0.)); +#26425 = ADVANCED_FACE('',(#26426),#26453,.T.); +#26426 = FACE_BOUND('',#26427,.T.); +#26427 = EDGE_LOOP('',(#26428,#26437,#26445,#26452)); +#26428 = ORIENTED_EDGE('',*,*,#26429,.F.); +#26429 = EDGE_CURVE('',#26430,#26399,#26432,.T.); +#26430 = VERTEX_POINT('',#26431); +#26431 = CARTESIAN_POINT('',(7.499974498734,-0.482263352451, + 1.119707098605)); +#26432 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26433,#26434,#26435,#26436), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#26433 = CARTESIAN_POINT('',(7.499974498734,-0.482263352451, + 1.119707098605)); +#26434 = CARTESIAN_POINT('',(7.499974498734,-0.483053568457, + 1.121952975673)); +#26435 = CARTESIAN_POINT('',(7.499974498734,-0.483885374779, + 1.125696104122)); +#26436 = CARTESIAN_POINT('',(7.499974498734,-0.484800361733, + 1.131102845214)); +#26437 = ORIENTED_EDGE('',*,*,#26438,.F.); +#26438 = EDGE_CURVE('',#26439,#26430,#26441,.T.); +#26439 = VERTEX_POINT('',#26440); +#26440 = CARTESIAN_POINT('',(7.50097449872,-0.482263352451, + 1.119707098605)); +#26441 = LINE('',#26442,#26443); +#26442 = CARTESIAN_POINT('',(7.50097449872,-0.482263352451, + 1.119707098605)); +#26443 = VECTOR('',#26444,1.); +#26444 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26445 = ORIENTED_EDGE('',*,*,#26446,.T.); +#26446 = EDGE_CURVE('',#26439,#26407,#26447,.T.); +#26447 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#26448,#26449,#26450,#26451), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#26448 = CARTESIAN_POINT('',(7.50097449872,-0.482263352451, + 1.119707098605)); +#26449 = CARTESIAN_POINT('',(7.50097449872,-0.483053568457, + 1.121952975673)); +#26450 = CARTESIAN_POINT('',(7.50097449872,-0.483885374779, + 1.125696104122)); +#26451 = CARTESIAN_POINT('',(7.50097449872,-0.484800361733, + 1.131102845214)); +#26452 = ORIENTED_EDGE('',*,*,#26406,.T.); +#26453 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#26454,#26455) + ,(#26456,#26457) + ,(#26458,#26459) + ,(#26460,#26461 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(1.,2.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#26454 = CARTESIAN_POINT('',(7.50097449872,-0.482263352451, + 1.119707098605)); +#26455 = CARTESIAN_POINT('',(7.499974498734,-0.482263352451, + 1.119707098605)); +#26456 = CARTESIAN_POINT('',(7.50097449872,-0.483053568457, + 1.121952975673)); +#26457 = CARTESIAN_POINT('',(7.499974498734,-0.483053568457, + 1.121952975673)); +#26458 = CARTESIAN_POINT('',(7.50097449872,-0.483885374779, + 1.125696104122)); +#26459 = CARTESIAN_POINT('',(7.499974498734,-0.483885374779, + 1.125696104122)); +#26460 = CARTESIAN_POINT('',(7.50097449872,-0.484800361733, + 1.131102845214)); +#26461 = CARTESIAN_POINT('',(7.499974498734,-0.484800361733, + 1.131102845214)); +#26462 = ADVANCED_FACE('',(#26463),#26488,.T.); +#26463 = FACE_BOUND('',#26464,.T.); +#26464 = EDGE_LOOP('',(#26465,#26473,#26481,#26487)); +#26465 = ORIENTED_EDGE('',*,*,#26466,.F.); +#26466 = EDGE_CURVE('',#26467,#26430,#26469,.T.); +#26467 = VERTEX_POINT('',#26468); +#26468 = CARTESIAN_POINT('',(7.499974498734,-0.457683475642, + 1.052081244641)); +#26469 = LINE('',#26470,#26471); +#26470 = CARTESIAN_POINT('',(7.499974498734,-0.457683475642, + 1.052081244641)); +#26471 = VECTOR('',#26472,1.); +#26472 = DIRECTION('',(0.,-0.341603830682,0.939844041777)); +#26473 = ORIENTED_EDGE('',*,*,#26474,.F.); +#26474 = EDGE_CURVE('',#26475,#26467,#26477,.T.); +#26475 = VERTEX_POINT('',#26476); +#26476 = CARTESIAN_POINT('',(7.50097449872,-0.457683475642, + 1.052081244641)); +#26477 = LINE('',#26478,#26479); +#26478 = CARTESIAN_POINT('',(7.50097449872,-0.457683475642, + 1.052081244641)); +#26479 = VECTOR('',#26480,1.); +#26480 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26481 = ORIENTED_EDGE('',*,*,#26482,.T.); +#26482 = EDGE_CURVE('',#26475,#26439,#26483,.T.); +#26483 = LINE('',#26484,#26485); +#26484 = CARTESIAN_POINT('',(7.50097449872,-0.457683475642, + 1.052081244641)); +#26485 = VECTOR('',#26486,1.); +#26486 = DIRECTION('',(0.,-0.341603830682,0.939844041777)); +#26487 = ORIENTED_EDGE('',*,*,#26438,.T.); +#26488 = PLANE('',#26489); +#26489 = AXIS2_PLACEMENT_3D('',#26490,#26491,#26492); +#26490 = CARTESIAN_POINT('',(7.50097449872,-0.457683475642, + 1.052081244641)); +#26491 = DIRECTION('',(6.562895866573E-15,-0.939844041777, + -0.341603830682)); +#26492 = DIRECTION('',(0.,0.341603830682,-0.939844041777)); +#26493 = ADVANCED_FACE('',(#26494),#26510,.T.); +#26494 = FACE_BOUND('',#26495,.T.); +#26495 = EDGE_LOOP('',(#26496,#26502,#26503,#26509)); +#26496 = ORIENTED_EDGE('',*,*,#26497,.F.); +#26497 = EDGE_CURVE('',#26324,#26467,#26498,.T.); +#26498 = LINE('',#26499,#26500); +#26499 = CARTESIAN_POINT('',(7.499974498734,-0.51229156067, + 1.052081244641)); +#26500 = VECTOR('',#26501,1.); +#26501 = DIRECTION('',(-1.588339393041E-14,1.,1.985424241301E-15)); +#26502 = ORIENTED_EDGE('',*,*,#26347,.F.); +#26503 = ORIENTED_EDGE('',*,*,#26504,.T.); +#26504 = EDGE_CURVE('',#26340,#26475,#26505,.T.); +#26505 = LINE('',#26506,#26507); +#26506 = CARTESIAN_POINT('',(7.50097449872,-0.51229156067,1.052081244641 + )); +#26507 = VECTOR('',#26508,1.); +#26508 = DIRECTION('',(-1.588339393041E-14,1.,1.985424241301E-15)); +#26509 = ORIENTED_EDGE('',*,*,#26474,.T.); +#26510 = PLANE('',#26511); +#26511 = AXIS2_PLACEMENT_3D('',#26512,#26513,#26514); +#26512 = CARTESIAN_POINT('',(7.50097449872,-0.51229156067,1.052081244641 + )); +#26513 = DIRECTION('',(1.386414337638E-29,-1.985424241301E-15,1.)); +#26514 = DIRECTION('',(0.,-1.,-1.985424241301E-15)); +#26515 = ADVANCED_FACE('',(#26516),#26550,.F.); +#26516 = FACE_BOUND('',#26517,.T.); +#26517 = EDGE_LOOP('',(#26518,#26528,#26536,#26544)); +#26518 = ORIENTED_EDGE('',*,*,#26519,.T.); +#26519 = EDGE_CURVE('',#26520,#26522,#26524,.T.); +#26520 = VERTEX_POINT('',#26521); +#26521 = CARTESIAN_POINT('',(7.499974498734,-0.434600850211, + 0.98919668671)); +#26522 = VERTEX_POINT('',#26523); +#26523 = CARTESIAN_POINT('',(7.499974498734,-0.411393453831, + 0.98919668671)); +#26524 = LINE('',#26525,#26526); +#26525 = CARTESIAN_POINT('',(7.499974498734,-0.411393453831, + 0.98919668671)); +#26526 = VECTOR('',#26527,1.); +#26527 = DIRECTION('',(0.,1.,9.343591501086E-15)); +#26528 = ORIENTED_EDGE('',*,*,#26529,.F.); +#26529 = EDGE_CURVE('',#26530,#26522,#26532,.T.); +#26530 = VERTEX_POINT('',#26531); +#26531 = CARTESIAN_POINT('',(7.50097449872,-0.411393453831,0.98919668671 + )); +#26532 = LINE('',#26533,#26534); +#26533 = CARTESIAN_POINT('',(7.50097449872,-0.411393453831,0.98919668671 + )); +#26534 = VECTOR('',#26535,1.); +#26535 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26536 = ORIENTED_EDGE('',*,*,#26537,.F.); +#26537 = EDGE_CURVE('',#26538,#26530,#26540,.T.); +#26538 = VERTEX_POINT('',#26539); +#26539 = CARTESIAN_POINT('',(7.50097449872,-0.434600850211,0.98919668671 + )); +#26540 = LINE('',#26541,#26542); +#26541 = CARTESIAN_POINT('',(7.50097449872,-0.411393453831,0.98919668671 + )); +#26542 = VECTOR('',#26543,1.); +#26543 = DIRECTION('',(0.,1.,9.343591501086E-15)); +#26544 = ORIENTED_EDGE('',*,*,#26545,.T.); +#26545 = EDGE_CURVE('',#26538,#26520,#26546,.T.); +#26546 = LINE('',#26547,#26548); +#26547 = CARTESIAN_POINT('',(7.50097449872,-0.434600850211,0.98919668671 + )); +#26548 = VECTOR('',#26549,1.); +#26549 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26550 = PLANE('',#26551); +#26551 = AXIS2_PLACEMENT_3D('',#26552,#26553,#26554); +#26552 = CARTESIAN_POINT('',(7.50097449872,-0.411393453831,0.98919668671 + )); +#26553 = DIRECTION('',(6.524595072763E-29,-9.343591501086E-15,1.)); +#26554 = DIRECTION('',(0.,-1.,-9.343591501086E-15)); +#26555 = ADVANCED_FACE('',(#26556),#26581,.F.); +#26556 = FACE_BOUND('',#26557,.T.); +#26557 = EDGE_LOOP('',(#26558,#26566,#26567,#26575)); +#26558 = ORIENTED_EDGE('',*,*,#26559,.T.); +#26559 = EDGE_CURVE('',#26560,#26520,#26562,.T.); +#26560 = VERTEX_POINT('',#26561); +#26561 = CARTESIAN_POINT('',(7.499974498734,-0.451195386331, + 1.033698324928)); +#26562 = LINE('',#26563,#26564); +#26563 = CARTESIAN_POINT('',(7.499974498734,-0.434600850211, + 0.98919668671)); +#26564 = VECTOR('',#26565,1.); +#26565 = DIRECTION('',(0.,0.349395479469,-0.936975345954)); +#26566 = ORIENTED_EDGE('',*,*,#26545,.F.); +#26567 = ORIENTED_EDGE('',*,*,#26568,.F.); +#26568 = EDGE_CURVE('',#26569,#26538,#26571,.T.); +#26569 = VERTEX_POINT('',#26570); +#26570 = CARTESIAN_POINT('',(7.50097449872,-0.451195386331, + 1.033698324928)); +#26571 = LINE('',#26572,#26573); +#26572 = CARTESIAN_POINT('',(7.50097449872,-0.434600850211,0.98919668671 + )); +#26573 = VECTOR('',#26574,1.); +#26574 = DIRECTION('',(0.,0.349395479469,-0.936975345954)); +#26575 = ORIENTED_EDGE('',*,*,#26576,.T.); +#26576 = EDGE_CURVE('',#26569,#26560,#26577,.T.); +#26577 = LINE('',#26578,#26579); +#26578 = CARTESIAN_POINT('',(7.50097449872,-0.451195386331, + 1.033698324928)); +#26579 = VECTOR('',#26580,1.); +#26580 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26581 = PLANE('',#26582); +#26582 = AXIS2_PLACEMENT_3D('',#26583,#26584,#26585); +#26583 = CARTESIAN_POINT('',(7.50097449872,-0.434600850211,0.98919668671 + )); +#26584 = DIRECTION('',(-6.542863870715E-15,0.936975345954,0.349395479469 + )); +#26585 = DIRECTION('',(1.,0.,1.872624076492E-14)); +#26586 = ADVANCED_FACE('',(#26587),#26612,.F.); +#26587 = FACE_BOUND('',#26588,.T.); +#26588 = EDGE_LOOP('',(#26589,#26597,#26598,#26606)); +#26589 = ORIENTED_EDGE('',*,*,#26590,.T.); +#26590 = EDGE_CURVE('',#26591,#26560,#26593,.T.); +#26591 = VERTEX_POINT('',#26592); +#26592 = CARTESIAN_POINT('',(7.499974498734,-0.518946011244, + 1.033698324928)); +#26593 = LINE('',#26594,#26595); +#26594 = CARTESIAN_POINT('',(7.499974498734,-0.451195386331, + 1.033698324928)); +#26595 = VECTOR('',#26596,1.); +#26596 = DIRECTION('',(-1.280226901808E-14,1.,3.200567254519E-15)); +#26597 = ORIENTED_EDGE('',*,*,#26576,.F.); +#26598 = ORIENTED_EDGE('',*,*,#26599,.F.); +#26599 = EDGE_CURVE('',#26600,#26569,#26602,.T.); +#26600 = VERTEX_POINT('',#26601); +#26601 = CARTESIAN_POINT('',(7.50097449872,-0.518946011244, + 1.033698324928)); +#26602 = LINE('',#26603,#26604); +#26603 = CARTESIAN_POINT('',(7.50097449872,-0.451195386331, + 1.033698324928)); +#26604 = VECTOR('',#26605,1.); +#26605 = DIRECTION('',(-1.280226901808E-14,1.,3.200567254519E-15)); +#26606 = ORIENTED_EDGE('',*,*,#26607,.T.); +#26607 = EDGE_CURVE('',#26600,#26591,#26608,.T.); +#26608 = LINE('',#26609,#26610); +#26609 = CARTESIAN_POINT('',(7.50097449872,-0.518946011244, + 1.033698324928)); +#26610 = VECTOR('',#26611,1.); +#26611 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26612 = PLANE('',#26613); +#26613 = AXIS2_PLACEMENT_3D('',#26614,#26615,#26616); +#26614 = CARTESIAN_POINT('',(7.50097449872,-0.451195386331, + 1.033698324928)); +#26615 = DIRECTION('',(2.234944168573E-29,-3.200567254519E-15,1.)); +#26616 = DIRECTION('',(0.,-1.,-3.200567254519E-15)); +#26617 = ADVANCED_FACE('',(#26618),#26643,.F.); +#26618 = FACE_BOUND('',#26619,.T.); +#26619 = EDGE_LOOP('',(#26620,#26628,#26629,#26637)); +#26620 = ORIENTED_EDGE('',*,*,#26621,.T.); +#26621 = EDGE_CURVE('',#26622,#26591,#26624,.T.); +#26622 = VERTEX_POINT('',#26623); +#26623 = CARTESIAN_POINT('',(7.499974498734,-0.534583970095, + 0.98919668671)); +#26624 = LINE('',#26625,#26626); +#26625 = CARTESIAN_POINT('',(7.499974498734,-0.518946011244, + 1.033698324928)); +#26626 = VECTOR('',#26627,1.); +#26627 = DIRECTION('',(0.,0.33152841835,0.943445233083)); +#26628 = ORIENTED_EDGE('',*,*,#26607,.F.); +#26629 = ORIENTED_EDGE('',*,*,#26630,.F.); +#26630 = EDGE_CURVE('',#26631,#26600,#26633,.T.); +#26631 = VERTEX_POINT('',#26632); +#26632 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095,0.98919668671 + )); +#26633 = LINE('',#26634,#26635); +#26634 = CARTESIAN_POINT('',(7.50097449872,-0.518946011244, + 1.033698324928)); +#26635 = VECTOR('',#26636,1.); +#26636 = DIRECTION('',(0.,0.33152841835,0.943445233083)); +#26637 = ORIENTED_EDGE('',*,*,#26638,.T.); +#26638 = EDGE_CURVE('',#26631,#26622,#26639,.T.); +#26639 = LINE('',#26640,#26641); +#26640 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095,0.98919668671 + )); +#26641 = VECTOR('',#26642,1.); +#26642 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26643 = PLANE('',#26644); +#26644 = AXIS2_PLACEMENT_3D('',#26645,#26646,#26647); +#26645 = CARTESIAN_POINT('',(7.50097449872,-0.518946011244, + 1.033698324928)); +#26646 = DIRECTION('',(6.58804285106E-15,-0.943445233083,0.33152841835) + ); +#26647 = DIRECTION('',(-1.,-6.98296267769E-15,0.)); +#26648 = ADVANCED_FACE('',(#26649),#26674,.F.); +#26649 = FACE_BOUND('',#26650,.T.); +#26650 = EDGE_LOOP('',(#26651,#26659,#26660,#26668)); +#26651 = ORIENTED_EDGE('',*,*,#26652,.T.); +#26652 = EDGE_CURVE('',#26653,#26622,#26655,.T.); +#26653 = VERTEX_POINT('',#26654); +#26654 = CARTESIAN_POINT('',(7.499974498734,-0.557791366473, + 0.98919668671)); +#26655 = LINE('',#26656,#26657); +#26656 = CARTESIAN_POINT('',(7.499974498734,-0.534583970095, + 0.98919668671)); +#26657 = VECTOR('',#26658,1.); +#26658 = DIRECTION('',(0.,1.,4.671795750766E-15)); +#26659 = ORIENTED_EDGE('',*,*,#26638,.F.); +#26660 = ORIENTED_EDGE('',*,*,#26661,.F.); +#26661 = EDGE_CURVE('',#26662,#26631,#26664,.T.); +#26662 = VERTEX_POINT('',#26663); +#26663 = CARTESIAN_POINT('',(7.50097449872,-0.557791366473,0.98919668671 + )); +#26664 = LINE('',#26665,#26666); +#26665 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095,0.98919668671 + )); +#26666 = VECTOR('',#26667,1.); +#26667 = DIRECTION('',(0.,1.,4.671795750766E-15)); +#26668 = ORIENTED_EDGE('',*,*,#26669,.T.); +#26669 = EDGE_CURVE('',#26662,#26653,#26670,.T.); +#26670 = LINE('',#26671,#26672); +#26671 = CARTESIAN_POINT('',(7.50097449872,-0.557791366473,0.98919668671 + )); +#26672 = VECTOR('',#26673,1.); +#26673 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26674 = PLANE('',#26675); +#26675 = AXIS2_PLACEMENT_3D('',#26676,#26677,#26678); +#26676 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095,0.98919668671 + )); +#26677 = DIRECTION('',(3.262297536538E-29,-4.671795750766E-15,1.)); +#26678 = DIRECTION('',(0.,-1.,-4.671795750766E-15)); +#26679 = ADVANCED_FACE('',(#26680),#26705,.F.); +#26680 = FACE_BOUND('',#26681,.T.); +#26681 = EDGE_LOOP('',(#26682,#26690,#26691,#26699)); +#26682 = ORIENTED_EDGE('',*,*,#26683,.T.); +#26683 = EDGE_CURVE('',#26684,#26653,#26686,.T.); +#26684 = VERTEX_POINT('',#26685); +#26685 = CARTESIAN_POINT('',(7.499974498734,-0.495821795497, + 1.151898003259)); +#26686 = LINE('',#26687,#26688); +#26687 = CARTESIAN_POINT('',(7.499974498734,-0.557791366473, + 0.98919668671)); +#26688 = VECTOR('',#26689,1.); +#26689 = DIRECTION('',(4.981880937224E-15,-0.355935724364, + -0.934510438744)); +#26690 = ORIENTED_EDGE('',*,*,#26669,.F.); +#26691 = ORIENTED_EDGE('',*,*,#26692,.F.); +#26692 = EDGE_CURVE('',#26693,#26662,#26695,.T.); +#26693 = VERTEX_POINT('',#26694); +#26694 = CARTESIAN_POINT('',(7.50097449872,-0.495821795497, + 1.151898003259)); +#26695 = LINE('',#26696,#26697); +#26696 = CARTESIAN_POINT('',(7.50097449872,-0.557791366473,0.98919668671 + )); +#26697 = VECTOR('',#26698,1.); +#26698 = DIRECTION('',(4.981880937224E-15,-0.355935724364, + -0.934510438744)); +#26699 = ORIENTED_EDGE('',*,*,#26700,.T.); +#26700 = EDGE_CURVE('',#26693,#26684,#26701,.T.); +#26701 = LINE('',#26702,#26703); +#26702 = CARTESIAN_POINT('',(7.50097449872,-0.495821795497, + 1.151898003259)); +#26703 = VECTOR('',#26704,1.); +#26704 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26705 = PLANE('',#26706); +#26706 = AXIS2_PLACEMENT_3D('',#26707,#26708,#26709); +#26707 = CARTESIAN_POINT('',(7.50097449872,-0.557791366473,0.98919668671 + )); +#26708 = DIRECTION('',(-6.525651515657E-15,0.934510438744, + -0.355935724364)); +#26709 = DIRECTION('',(-1.,0.,1.833379194324E-14)); +#26710 = ADVANCED_FACE('',(#26711),#26736,.F.); +#26711 = FACE_BOUND('',#26712,.T.); +#26712 = EDGE_LOOP('',(#26713,#26721,#26722,#26730)); +#26713 = ORIENTED_EDGE('',*,*,#26714,.T.); +#26714 = EDGE_CURVE('',#26715,#26684,#26717,.T.); +#26715 = VERTEX_POINT('',#26716); +#26716 = CARTESIAN_POINT('',(7.499974498734,-0.473363024808, + 1.151898003259)); +#26717 = LINE('',#26718,#26719); +#26718 = CARTESIAN_POINT('',(7.499974498734,-0.495821795497, + 1.151898003259)); +#26719 = VECTOR('',#26720,1.); +#26720 = DIRECTION('',(0.,-1.,0.)); +#26721 = ORIENTED_EDGE('',*,*,#26700,.F.); +#26722 = ORIENTED_EDGE('',*,*,#26723,.F.); +#26723 = EDGE_CURVE('',#26724,#26693,#26726,.T.); +#26724 = VERTEX_POINT('',#26725); +#26725 = CARTESIAN_POINT('',(7.50097449872,-0.473363024808, + 1.151898003259)); +#26726 = LINE('',#26727,#26728); +#26727 = CARTESIAN_POINT('',(7.50097449872,-0.495821795497, + 1.151898003259)); +#26728 = VECTOR('',#26729,1.); +#26729 = DIRECTION('',(0.,-1.,0.)); +#26730 = ORIENTED_EDGE('',*,*,#26731,.T.); +#26731 = EDGE_CURVE('',#26724,#26715,#26732,.T.); +#26732 = LINE('',#26733,#26734); +#26733 = CARTESIAN_POINT('',(7.50097449872,-0.473363024808, + 1.151898003259)); +#26734 = VECTOR('',#26735,1.); +#26735 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#26736 = PLANE('',#26737); +#26737 = AXIS2_PLACEMENT_3D('',#26738,#26739,#26740); +#26738 = CARTESIAN_POINT('',(7.50097449872,-0.495821795497, + 1.151898003259)); +#26739 = DIRECTION('',(0.,0.,-1.)); +#26740 = DIRECTION('',(0.,-1.,0.)); +#26741 = ADVANCED_FACE('',(#26742),#26758,.F.); +#26742 = FACE_BOUND('',#26743,.T.); +#26743 = EDGE_LOOP('',(#26744,#26750,#26751,#26757)); +#26744 = ORIENTED_EDGE('',*,*,#26745,.T.); +#26745 = EDGE_CURVE('',#26522,#26715,#26746,.T.); +#26746 = LINE('',#26747,#26748); +#26747 = CARTESIAN_POINT('',(7.499974498734,-0.473363024808, + 1.151898003259)); +#26748 = VECTOR('',#26749,1.); +#26749 = DIRECTION('',(0.,-0.35593572437,0.934510438742)); +#26750 = ORIENTED_EDGE('',*,*,#26731,.F.); +#26751 = ORIENTED_EDGE('',*,*,#26752,.F.); +#26752 = EDGE_CURVE('',#26530,#26724,#26753,.T.); +#26753 = LINE('',#26754,#26755); +#26754 = CARTESIAN_POINT('',(7.50097449872,-0.473363024808, + 1.151898003259)); +#26755 = VECTOR('',#26756,1.); +#26756 = DIRECTION('',(0.,-0.35593572437,0.934510438742)); +#26757 = ORIENTED_EDGE('',*,*,#26529,.T.); +#26758 = PLANE('',#26759); +#26759 = AXIS2_PLACEMENT_3D('',#26760,#26761,#26762); +#26760 = CARTESIAN_POINT('',(7.50097449872,-0.473363024808, + 1.151898003259)); +#26761 = DIRECTION('',(6.52565151564E-15,-0.934510438742,-0.35593572437) + ); +#26762 = DIRECTION('',(0.,0.35593572437,-0.934510438742)); +#26763 = ADVANCED_FACE('',(#26764,#26772),#26782,.T.); +#26764 = FACE_BOUND('',#26765,.T.); +#26765 = EDGE_LOOP('',(#26766,#26767,#26768,#26769,#26770,#26771)); +#26766 = ORIENTED_EDGE('',*,*,#26321,.T.); +#26767 = ORIENTED_EDGE('',*,*,#26497,.T.); +#26768 = ORIENTED_EDGE('',*,*,#26466,.T.); +#26769 = ORIENTED_EDGE('',*,*,#26429,.T.); +#26770 = ORIENTED_EDGE('',*,*,#26398,.T.); +#26771 = ORIENTED_EDGE('',*,*,#26361,.T.); +#26772 = FACE_BOUND('',#26773,.T.); +#26773 = EDGE_LOOP('',(#26774,#26775,#26776,#26777,#26778,#26779,#26780, + #26781)); +#26774 = ORIENTED_EDGE('',*,*,#26745,.F.); +#26775 = ORIENTED_EDGE('',*,*,#26519,.F.); +#26776 = ORIENTED_EDGE('',*,*,#26559,.F.); +#26777 = ORIENTED_EDGE('',*,*,#26590,.F.); +#26778 = ORIENTED_EDGE('',*,*,#26621,.F.); +#26779 = ORIENTED_EDGE('',*,*,#26652,.F.); +#26780 = ORIENTED_EDGE('',*,*,#26683,.F.); +#26781 = ORIENTED_EDGE('',*,*,#26714,.F.); +#26782 = PLANE('',#26783); +#26783 = AXIS2_PLACEMENT_3D('',#26784,#26785,#26786); +#26784 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 1.849999998875)); +#26785 = DIRECTION('',(-1.,0.,0.)); +#26786 = DIRECTION('',(0.,0.,1.)); +#26787 = ADVANCED_FACE('',(#26788,#26796),#26806,.F.); +#26788 = FACE_BOUND('',#26789,.T.); +#26789 = EDGE_LOOP('',(#26790,#26791,#26792,#26793,#26794,#26795)); +#26790 = ORIENTED_EDGE('',*,*,#26504,.F.); +#26791 = ORIENTED_EDGE('',*,*,#26339,.F.); +#26792 = ORIENTED_EDGE('',*,*,#26378,.F.); +#26793 = ORIENTED_EDGE('',*,*,#26414,.F.); +#26794 = ORIENTED_EDGE('',*,*,#26446,.F.); +#26795 = ORIENTED_EDGE('',*,*,#26482,.F.); +#26796 = FACE_BOUND('',#26797,.T.); +#26797 = EDGE_LOOP('',(#26798,#26799,#26800,#26801,#26802,#26803,#26804, + #26805)); +#26798 = ORIENTED_EDGE('',*,*,#26752,.T.); +#26799 = ORIENTED_EDGE('',*,*,#26723,.T.); +#26800 = ORIENTED_EDGE('',*,*,#26692,.T.); +#26801 = ORIENTED_EDGE('',*,*,#26661,.T.); +#26802 = ORIENTED_EDGE('',*,*,#26630,.T.); +#26803 = ORIENTED_EDGE('',*,*,#26599,.T.); +#26804 = ORIENTED_EDGE('',*,*,#26568,.T.); +#26805 = ORIENTED_EDGE('',*,*,#26537,.T.); +#26806 = PLANE('',#26807); +#26807 = AXIS2_PLACEMENT_3D('',#26808,#26809,#26810); +#26808 = CARTESIAN_POINT('',(7.50097449872,0.934963205914,1.849999998875 + )); +#26809 = DIRECTION('',(-1.,0.,0.)); +#26810 = DIRECTION('',(0.,0.,1.)); +#26811 = MANIFOLD_SOLID_BREP('',#26812); +#26812 = CLOSED_SHELL('',(#26813,#26917,#27021,#27043,#27060,#27077, + #27094,#27111,#27128,#27145,#27162,#27179,#27196,#27213)); +#26813 = ADVANCED_FACE('',(#26814),#26912,.T.); +#26814 = FACE_BOUND('',#26815,.T.); +#26815 = EDGE_LOOP('',(#26816,#26826,#26834,#26842,#26850,#26858,#26866, + #26874,#26882,#26890,#26898,#26906)); +#26816 = ORIENTED_EDGE('',*,*,#26817,.F.); +#26817 = EDGE_CURVE('',#26818,#26820,#26822,.T.); +#26818 = VERTEX_POINT('',#26819); +#26819 = CARTESIAN_POINT('',(7.499974498734,-0.976855391411, + 0.731087185047)); +#26820 = VERTEX_POINT('',#26821); +#26821 = CARTESIAN_POINT('',(7.499974498734,-0.976855391411, + 0.749636466024)); +#26822 = LINE('',#26823,#26824); +#26823 = CARTESIAN_POINT('',(7.499974498734,-0.976855391411, + 0.749636466024)); +#26824 = VECTOR('',#26825,1.); +#26825 = DIRECTION('',(0.,0.,1.)); +#26826 = ORIENTED_EDGE('',*,*,#26827,.F.); +#26827 = EDGE_CURVE('',#26828,#26818,#26830,.T.); +#26828 = VERTEX_POINT('',#26829); +#26829 = CARTESIAN_POINT('',(7.499974498734,-1.064361416467, + 0.731087185047)); +#26830 = LINE('',#26831,#26832); +#26831 = CARTESIAN_POINT('',(7.499974498734,-0.976855391411, + 0.731087185047)); +#26832 = VECTOR('',#26833,1.); +#26833 = DIRECTION('',(-9.912022923267E-15,1.,4.956011461634E-15)); +#26834 = ORIENTED_EDGE('',*,*,#26835,.F.); +#26835 = EDGE_CURVE('',#26836,#26828,#26838,.T.); +#26836 = VERTEX_POINT('',#26837); +#26837 = CARTESIAN_POINT('',(7.499974498734,-1.064361416467, + 0.893788501596)); +#26838 = LINE('',#26839,#26840); +#26839 = CARTESIAN_POINT('',(7.499974498734,-1.064361416467, + 0.731087185047)); +#26840 = VECTOR('',#26841,1.); +#26841 = DIRECTION('',(0.,2.665503096958E-15,-1.)); +#26842 = ORIENTED_EDGE('',*,*,#26843,.F.); +#26843 = EDGE_CURVE('',#26844,#26836,#26846,.T.); +#26844 = VERTEX_POINT('',#26845); +#26845 = CARTESIAN_POINT('',(7.499974498734,-0.980556929543, + 0.893788501596)); +#26846 = LINE('',#26847,#26848); +#26847 = CARTESIAN_POINT('',(7.499974498734,-1.064361416467, + 0.893788501596)); +#26848 = VECTOR('',#26849,1.); +#26849 = DIRECTION('',(1.034982443206E-14,-1.,-2.587456108016E-15)); +#26850 = ORIENTED_EDGE('',*,*,#26851,.F.); +#26851 = EDGE_CURVE('',#26852,#26844,#26854,.T.); +#26852 = VERTEX_POINT('',#26853); +#26853 = CARTESIAN_POINT('',(7.499974498734,-0.980556929543, + 0.875072859356)); +#26854 = LINE('',#26855,#26856); +#26855 = CARTESIAN_POINT('',(7.499974498734,-0.980556929543, + 0.893788501596)); +#26856 = VECTOR('',#26857,1.); +#26857 = DIRECTION('',(0.,0.,1.)); +#26858 = ORIENTED_EDGE('',*,*,#26859,.F.); +#26859 = EDGE_CURVE('',#26860,#26852,#26862,.T.); +#26860 = VERTEX_POINT('',#26861); +#26861 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 0.875072859356)); +#26862 = LINE('',#26863,#26864); +#26863 = CARTESIAN_POINT('',(7.499974498734,-0.980556929543, + 0.875072859356)); +#26864 = VECTOR('',#26865,1.); +#26865 = DIRECTION('',(-1.381118955668E-14,1.,3.45279738917E-15)); +#26866 = ORIENTED_EDGE('',*,*,#26867,.F.); +#26867 = EDGE_CURVE('',#26868,#26860,#26870,.T.); +#26868 = VERTEX_POINT('',#26869); +#26869 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 0.823001783609)); +#26870 = LINE('',#26871,#26872); +#26871 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 0.875072859356)); +#26872 = VECTOR('',#26873,1.); +#26873 = DIRECTION('',(0.,0.,1.)); +#26874 = ORIENTED_EDGE('',*,*,#26875,.F.); +#26875 = EDGE_CURVE('',#26876,#26868,#26878,.T.); +#26876 = VERTEX_POINT('',#26877); +#26877 = CARTESIAN_POINT('',(7.499974498734,-0.985173454629, + 0.823001783609)); +#26878 = LINE('',#26879,#26880); +#26879 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 0.823001783609)); +#26880 = VECTOR('',#26881,1.); +#26881 = DIRECTION('',(1.490700230915E-14,-1.,-3.726750577286E-15)); +#26882 = ORIENTED_EDGE('',*,*,#26883,.F.); +#26883 = EDGE_CURVE('',#26884,#26876,#26886,.T.); +#26884 = VERTEX_POINT('',#26885); +#26885 = CARTESIAN_POINT('',(7.499974498734,-0.985173454629,0.804369322) + ); +#26886 = LINE('',#26887,#26888); +#26887 = CARTESIAN_POINT('',(7.499974498734,-0.985173454629, + 0.823001783609)); +#26888 = VECTOR('',#26889,1.); +#26889 = DIRECTION('',(0.,0.,1.)); +#26890 = ORIENTED_EDGE('',*,*,#26891,.F.); +#26891 = EDGE_CURVE('',#26892,#26884,#26894,.T.); +#26892 = VERTEX_POINT('',#26893); +#26893 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841,0.804369322) + ); +#26894 = LINE('',#26895,#26896); +#26895 = CARTESIAN_POINT('',(7.499974498734,-0.985173454629,0.804369322) + ); +#26896 = VECTOR('',#26897,1.); +#26897 = DIRECTION('',(-1.490700230915E-14,1.,0.)); +#26898 = ORIENTED_EDGE('',*,*,#26899,.F.); +#26899 = EDGE_CURVE('',#26900,#26892,#26902,.T.); +#26900 = VERTEX_POINT('',#26901); +#26901 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 0.749636466024)); +#26902 = LINE('',#26903,#26904); +#26903 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841,0.804369322) + ); +#26904 = VECTOR('',#26905,1.); +#26905 = DIRECTION('',(0.,0.,1.)); +#26906 = ORIENTED_EDGE('',*,*,#26907,.F.); +#26907 = EDGE_CURVE('',#26820,#26900,#26908,.T.); +#26908 = LINE('',#26909,#26910); +#26909 = CARTESIAN_POINT('',(7.499974498734,-1.043358306841, + 0.749636466024)); +#26910 = VECTOR('',#26911,1.); +#26911 = DIRECTION('',(1.304246168263E-14,-1.,-3.260615420657E-15)); +#26912 = PLANE('',#26913); +#26913 = AXIS2_PLACEMENT_3D('',#26914,#26915,#26916); +#26914 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 1.849999998875)); +#26915 = DIRECTION('',(-1.,-9.912022923267E-15,0.)); +#26916 = DIRECTION('',(-9.912022923267E-15,1.,0.)); +#26917 = ADVANCED_FACE('',(#26918),#27016,.F.); +#26918 = FACE_BOUND('',#26919,.T.); +#26919 = EDGE_LOOP('',(#26920,#26930,#26938,#26946,#26954,#26962,#26970, + #26978,#26986,#26994,#27002,#27010)); +#26920 = ORIENTED_EDGE('',*,*,#26921,.T.); +#26921 = EDGE_CURVE('',#26922,#26924,#26926,.T.); +#26922 = VERTEX_POINT('',#26923); +#26923 = CARTESIAN_POINT('',(7.50097449872,-0.976855391411, + 0.731087185047)); +#26924 = VERTEX_POINT('',#26925); +#26925 = CARTESIAN_POINT('',(7.50097449872,-0.976855391411, + 0.749636466024)); +#26926 = LINE('',#26927,#26928); +#26927 = CARTESIAN_POINT('',(7.50097449872,-0.976855391411, + 0.749636466024)); +#26928 = VECTOR('',#26929,1.); +#26929 = DIRECTION('',(0.,0.,1.)); +#26930 = ORIENTED_EDGE('',*,*,#26931,.T.); +#26931 = EDGE_CURVE('',#26924,#26932,#26934,.T.); +#26932 = VERTEX_POINT('',#26933); +#26933 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.749636466024)); +#26934 = LINE('',#26935,#26936); +#26935 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.749636466024)); +#26936 = VECTOR('',#26937,1.); +#26937 = DIRECTION('',(1.304246168263E-14,-1.,-3.260615420657E-15)); +#26938 = ORIENTED_EDGE('',*,*,#26939,.T.); +#26939 = EDGE_CURVE('',#26932,#26940,#26942,.T.); +#26940 = VERTEX_POINT('',#26941); +#26941 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841,0.804369322) + ); +#26942 = LINE('',#26943,#26944); +#26943 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841,0.804369322) + ); +#26944 = VECTOR('',#26945,1.); +#26945 = DIRECTION('',(0.,0.,1.)); +#26946 = ORIENTED_EDGE('',*,*,#26947,.T.); +#26947 = EDGE_CURVE('',#26940,#26948,#26950,.T.); +#26948 = VERTEX_POINT('',#26949); +#26949 = CARTESIAN_POINT('',(7.50097449872,-0.985173454629,0.804369322) + ); +#26950 = LINE('',#26951,#26952); +#26951 = CARTESIAN_POINT('',(7.50097449872,-0.985173454629,0.804369322) + ); +#26952 = VECTOR('',#26953,1.); +#26953 = DIRECTION('',(-1.490700230915E-14,1.,0.)); +#26954 = ORIENTED_EDGE('',*,*,#26955,.T.); +#26955 = EDGE_CURVE('',#26948,#26956,#26958,.T.); +#26956 = VERTEX_POINT('',#26957); +#26957 = CARTESIAN_POINT('',(7.50097449872,-0.985173454629, + 0.823001783609)); +#26958 = LINE('',#26959,#26960); +#26959 = CARTESIAN_POINT('',(7.50097449872,-0.985173454629, + 0.823001783609)); +#26960 = VECTOR('',#26961,1.); +#26961 = DIRECTION('',(0.,0.,1.)); +#26962 = ORIENTED_EDGE('',*,*,#26963,.T.); +#26963 = EDGE_CURVE('',#26956,#26964,#26966,.T.); +#26964 = VERTEX_POINT('',#26965); +#26965 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.823001783609)); +#26966 = LINE('',#26967,#26968); +#26967 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.823001783609)); +#26968 = VECTOR('',#26969,1.); +#26969 = DIRECTION('',(1.490700230915E-14,-1.,-3.726750577286E-15)); +#26970 = ORIENTED_EDGE('',*,*,#26971,.T.); +#26971 = EDGE_CURVE('',#26964,#26972,#26974,.T.); +#26972 = VERTEX_POINT('',#26973); +#26973 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.875072859356)); +#26974 = LINE('',#26975,#26976); +#26975 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.875072859356)); +#26976 = VECTOR('',#26977,1.); +#26977 = DIRECTION('',(0.,0.,1.)); +#26978 = ORIENTED_EDGE('',*,*,#26979,.T.); +#26979 = EDGE_CURVE('',#26972,#26980,#26982,.T.); +#26980 = VERTEX_POINT('',#26981); +#26981 = CARTESIAN_POINT('',(7.50097449872,-0.980556929543, + 0.875072859356)); +#26982 = LINE('',#26983,#26984); +#26983 = CARTESIAN_POINT('',(7.50097449872,-0.980556929543, + 0.875072859356)); +#26984 = VECTOR('',#26985,1.); +#26985 = DIRECTION('',(-1.381118955668E-14,1.,3.45279738917E-15)); +#26986 = ORIENTED_EDGE('',*,*,#26987,.T.); +#26987 = EDGE_CURVE('',#26980,#26988,#26990,.T.); +#26988 = VERTEX_POINT('',#26989); +#26989 = CARTESIAN_POINT('',(7.50097449872,-0.980556929543, + 0.893788501596)); +#26990 = LINE('',#26991,#26992); +#26991 = CARTESIAN_POINT('',(7.50097449872,-0.980556929543, + 0.893788501596)); +#26992 = VECTOR('',#26993,1.); +#26993 = DIRECTION('',(0.,0.,1.)); +#26994 = ORIENTED_EDGE('',*,*,#26995,.T.); +#26995 = EDGE_CURVE('',#26988,#26996,#26998,.T.); +#26996 = VERTEX_POINT('',#26997); +#26997 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 0.893788501596)); +#26998 = LINE('',#26999,#27000); +#26999 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 0.893788501596)); +#27000 = VECTOR('',#27001,1.); +#27001 = DIRECTION('',(1.034982443206E-14,-1.,-2.587456108016E-15)); +#27002 = ORIENTED_EDGE('',*,*,#27003,.T.); +#27003 = EDGE_CURVE('',#26996,#27004,#27006,.T.); +#27004 = VERTEX_POINT('',#27005); +#27005 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 0.731087185047)); +#27006 = LINE('',#27007,#27008); +#27007 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 0.731087185047)); +#27008 = VECTOR('',#27009,1.); +#27009 = DIRECTION('',(0.,2.665503096958E-15,-1.)); +#27010 = ORIENTED_EDGE('',*,*,#27011,.T.); +#27011 = EDGE_CURVE('',#27004,#26922,#27012,.T.); +#27012 = LINE('',#27013,#27014); +#27013 = CARTESIAN_POINT('',(7.50097449872,-0.976855391411, + 0.731087185047)); +#27014 = VECTOR('',#27015,1.); +#27015 = DIRECTION('',(-9.912022923267E-15,1.,4.956011461634E-15)); +#27016 = PLANE('',#27017); +#27017 = AXIS2_PLACEMENT_3D('',#27018,#27019,#27020); +#27018 = CARTESIAN_POINT('',(7.50097449872,0.934963205914,1.849999998875 + )); +#27019 = DIRECTION('',(-1.,-9.912022923267E-15,0.)); +#27020 = DIRECTION('',(-9.912022923267E-15,1.,0.)); +#27021 = ADVANCED_FACE('',(#27022),#27038,.F.); +#27022 = FACE_BOUND('',#27023,.T.); +#27023 = EDGE_LOOP('',(#27024,#27025,#27031,#27032)); +#27024 = ORIENTED_EDGE('',*,*,#26827,.T.); +#27025 = ORIENTED_EDGE('',*,*,#27026,.F.); +#27026 = EDGE_CURVE('',#26922,#26818,#27027,.T.); +#27027 = LINE('',#27028,#27029); +#27028 = CARTESIAN_POINT('',(7.50097449872,-0.976855391411, + 0.731087185047)); +#27029 = VECTOR('',#27030,1.); +#27030 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27031 = ORIENTED_EDGE('',*,*,#27011,.F.); +#27032 = ORIENTED_EDGE('',*,*,#27033,.T.); +#27033 = EDGE_CURVE('',#27004,#26828,#27034,.T.); +#27034 = LINE('',#27035,#27036); +#27035 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 0.731087185047)); +#27036 = VECTOR('',#27037,1.); +#27037 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27038 = PLANE('',#27039); +#27039 = AXIS2_PLACEMENT_3D('',#27040,#27041,#27042); +#27040 = CARTESIAN_POINT('',(7.50097449872,-0.976855391411, + 0.731087185047)); +#27041 = DIRECTION('',(3.460764306677E-29,-4.956011461634E-15,1.)); +#27042 = DIRECTION('',(0.,-1.,-4.956011461634E-15)); +#27043 = ADVANCED_FACE('',(#27044),#27055,.F.); +#27044 = FACE_BOUND('',#27045,.T.); +#27045 = EDGE_LOOP('',(#27046,#27047,#27048,#27049)); +#27046 = ORIENTED_EDGE('',*,*,#26835,.T.); +#27047 = ORIENTED_EDGE('',*,*,#27033,.F.); +#27048 = ORIENTED_EDGE('',*,*,#27003,.F.); +#27049 = ORIENTED_EDGE('',*,*,#27050,.T.); +#27050 = EDGE_CURVE('',#26996,#26836,#27051,.T.); +#27051 = LINE('',#27052,#27053); +#27052 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 0.893788501596)); +#27053 = VECTOR('',#27054,1.); +#27054 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27055 = PLANE('',#27056); +#27056 = AXIS2_PLACEMENT_3D('',#27057,#27058,#27059); +#27057 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 0.731087185047)); +#27058 = DIRECTION('',(-6.982962677686E-15,1.,2.665503096958E-15)); +#27059 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#27060 = ADVANCED_FACE('',(#27061),#27072,.F.); +#27061 = FACE_BOUND('',#27062,.T.); +#27062 = EDGE_LOOP('',(#27063,#27064,#27065,#27066)); +#27063 = ORIENTED_EDGE('',*,*,#26843,.T.); +#27064 = ORIENTED_EDGE('',*,*,#27050,.F.); +#27065 = ORIENTED_EDGE('',*,*,#26995,.F.); +#27066 = ORIENTED_EDGE('',*,*,#27067,.T.); +#27067 = EDGE_CURVE('',#26988,#26844,#27068,.T.); +#27068 = LINE('',#27069,#27070); +#27069 = CARTESIAN_POINT('',(7.50097449872,-0.980556929543, + 0.893788501596)); +#27070 = VECTOR('',#27071,1.); +#27071 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27072 = PLANE('',#27073); +#27073 = AXIS2_PLACEMENT_3D('',#27074,#27075,#27076); +#27074 = CARTESIAN_POINT('',(7.50097449872,-1.064361416467, + 0.893788501596)); +#27075 = DIRECTION('',(-1.806810943243E-29,2.587456108016E-15,-1.)); +#27076 = DIRECTION('',(-1.,0.,1.806810943243E-29)); +#27077 = ADVANCED_FACE('',(#27078),#27089,.F.); +#27078 = FACE_BOUND('',#27079,.T.); +#27079 = EDGE_LOOP('',(#27080,#27081,#27082,#27083)); +#27080 = ORIENTED_EDGE('',*,*,#26851,.T.); +#27081 = ORIENTED_EDGE('',*,*,#27067,.F.); +#27082 = ORIENTED_EDGE('',*,*,#26987,.F.); +#27083 = ORIENTED_EDGE('',*,*,#27084,.T.); +#27084 = EDGE_CURVE('',#26980,#26852,#27085,.T.); +#27085 = LINE('',#27086,#27087); +#27086 = CARTESIAN_POINT('',(7.50097449872,-0.980556929543, + 0.875072859356)); +#27087 = VECTOR('',#27088,1.); +#27088 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27089 = PLANE('',#27090); +#27090 = AXIS2_PLACEMENT_3D('',#27091,#27092,#27093); +#27091 = CARTESIAN_POINT('',(7.50097449872,-0.980556929543, + 0.893788501596)); +#27092 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#27093 = DIRECTION('',(0.,0.,-1.)); +#27094 = ADVANCED_FACE('',(#27095),#27106,.F.); +#27095 = FACE_BOUND('',#27096,.T.); +#27096 = EDGE_LOOP('',(#27097,#27098,#27099,#27100)); +#27097 = ORIENTED_EDGE('',*,*,#26859,.T.); +#27098 = ORIENTED_EDGE('',*,*,#27084,.F.); +#27099 = ORIENTED_EDGE('',*,*,#26979,.F.); +#27100 = ORIENTED_EDGE('',*,*,#27101,.T.); +#27101 = EDGE_CURVE('',#26972,#26860,#27102,.T.); +#27102 = LINE('',#27103,#27104); +#27103 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.875072859356)); +#27104 = VECTOR('',#27105,1.); +#27105 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27106 = PLANE('',#27107); +#27107 = AXIS2_PLACEMENT_3D('',#27108,#27109,#27110); +#27108 = CARTESIAN_POINT('',(7.50097449872,-0.980556929543, + 0.875072859356)); +#27109 = DIRECTION('',(2.411075530219E-29,-3.45279738917E-15,1.)); +#27110 = DIRECTION('',(0.,-1.,-3.45279738917E-15)); +#27111 = ADVANCED_FACE('',(#27112),#27123,.F.); +#27112 = FACE_BOUND('',#27113,.T.); +#27113 = EDGE_LOOP('',(#27114,#27115,#27116,#27117)); +#27114 = ORIENTED_EDGE('',*,*,#26867,.T.); +#27115 = ORIENTED_EDGE('',*,*,#27101,.F.); +#27116 = ORIENTED_EDGE('',*,*,#26971,.F.); +#27117 = ORIENTED_EDGE('',*,*,#27118,.T.); +#27118 = EDGE_CURVE('',#26964,#26868,#27119,.T.); +#27119 = LINE('',#27120,#27121); +#27120 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.823001783609)); +#27121 = VECTOR('',#27122,1.); +#27122 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27123 = PLANE('',#27124); +#27124 = AXIS2_PLACEMENT_3D('',#27125,#27126,#27127); +#27125 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.875072859356)); +#27126 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#27127 = DIRECTION('',(0.,0.,-1.)); +#27128 = ADVANCED_FACE('',(#27129),#27140,.F.); +#27129 = FACE_BOUND('',#27130,.T.); +#27130 = EDGE_LOOP('',(#27131,#27132,#27133,#27134)); +#27131 = ORIENTED_EDGE('',*,*,#26875,.T.); +#27132 = ORIENTED_EDGE('',*,*,#27118,.F.); +#27133 = ORIENTED_EDGE('',*,*,#26963,.F.); +#27134 = ORIENTED_EDGE('',*,*,#27135,.T.); +#27135 = EDGE_CURVE('',#26956,#26876,#27136,.T.); +#27136 = LINE('',#27137,#27138); +#27137 = CARTESIAN_POINT('',(7.50097449872,-0.985173454629, + 0.823001783609)); +#27138 = VECTOR('',#27139,1.); +#27139 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27140 = PLANE('',#27141); +#27141 = AXIS2_PLACEMENT_3D('',#27142,#27143,#27144); +#27142 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.823001783609)); +#27143 = DIRECTION('',(-2.602376019024E-29,3.726750577286E-15,-1.)); +#27144 = DIRECTION('',(-1.,0.,2.602376019024E-29)); +#27145 = ADVANCED_FACE('',(#27146),#27157,.F.); +#27146 = FACE_BOUND('',#27147,.T.); +#27147 = EDGE_LOOP('',(#27148,#27149,#27150,#27151)); +#27148 = ORIENTED_EDGE('',*,*,#26883,.T.); +#27149 = ORIENTED_EDGE('',*,*,#27135,.F.); +#27150 = ORIENTED_EDGE('',*,*,#26955,.F.); +#27151 = ORIENTED_EDGE('',*,*,#27152,.T.); +#27152 = EDGE_CURVE('',#26948,#26884,#27153,.T.); +#27153 = LINE('',#27154,#27155); +#27154 = CARTESIAN_POINT('',(7.50097449872,-0.985173454629,0.804369322) + ); +#27155 = VECTOR('',#27156,1.); +#27156 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27157 = PLANE('',#27158); +#27158 = AXIS2_PLACEMENT_3D('',#27159,#27160,#27161); +#27159 = CARTESIAN_POINT('',(7.50097449872,-0.985173454629, + 0.823001783609)); +#27160 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#27161 = DIRECTION('',(0.,0.,-1.)); +#27162 = ADVANCED_FACE('',(#27163),#27174,.F.); +#27163 = FACE_BOUND('',#27164,.T.); +#27164 = EDGE_LOOP('',(#27165,#27166,#27167,#27168)); +#27165 = ORIENTED_EDGE('',*,*,#26891,.T.); +#27166 = ORIENTED_EDGE('',*,*,#27152,.F.); +#27167 = ORIENTED_EDGE('',*,*,#26947,.F.); +#27168 = ORIENTED_EDGE('',*,*,#27169,.T.); +#27169 = EDGE_CURVE('',#26940,#26892,#27170,.T.); +#27170 = LINE('',#27171,#27172); +#27171 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841,0.804369322) + ); +#27172 = VECTOR('',#27173,1.); +#27173 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27174 = PLANE('',#27175); +#27175 = AXIS2_PLACEMENT_3D('',#27176,#27177,#27178); +#27176 = CARTESIAN_POINT('',(7.50097449872,-0.985173454629,0.804369322) + ); +#27177 = DIRECTION('',(0.,0.,1.)); +#27178 = DIRECTION('',(1.,0.,-0.)); +#27179 = ADVANCED_FACE('',(#27180),#27191,.F.); +#27180 = FACE_BOUND('',#27181,.T.); +#27181 = EDGE_LOOP('',(#27182,#27183,#27184,#27185)); +#27182 = ORIENTED_EDGE('',*,*,#26899,.T.); +#27183 = ORIENTED_EDGE('',*,*,#27169,.F.); +#27184 = ORIENTED_EDGE('',*,*,#26939,.F.); +#27185 = ORIENTED_EDGE('',*,*,#27186,.T.); +#27186 = EDGE_CURVE('',#26932,#26900,#27187,.T.); +#27187 = LINE('',#27188,#27189); +#27188 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.749636466024)); +#27189 = VECTOR('',#27190,1.); +#27190 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27191 = PLANE('',#27192); +#27192 = AXIS2_PLACEMENT_3D('',#27193,#27194,#27195); +#27193 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841,0.804369322) + ); +#27194 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#27195 = DIRECTION('',(0.,0.,-1.)); +#27196 = ADVANCED_FACE('',(#27197),#27208,.F.); +#27197 = FACE_BOUND('',#27198,.T.); +#27198 = EDGE_LOOP('',(#27199,#27200,#27201,#27202)); +#27199 = ORIENTED_EDGE('',*,*,#26907,.T.); +#27200 = ORIENTED_EDGE('',*,*,#27186,.F.); +#27201 = ORIENTED_EDGE('',*,*,#26931,.F.); +#27202 = ORIENTED_EDGE('',*,*,#27203,.T.); +#27203 = EDGE_CURVE('',#26924,#26820,#27204,.T.); +#27204 = LINE('',#27205,#27206); +#27205 = CARTESIAN_POINT('',(7.50097449872,-0.976855391411, + 0.749636466024)); +#27206 = VECTOR('',#27207,1.); +#27207 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27208 = PLANE('',#27209); +#27209 = AXIS2_PLACEMENT_3D('',#27210,#27211,#27212); +#27210 = CARTESIAN_POINT('',(7.50097449872,-1.043358306841, + 0.749636466024)); +#27211 = DIRECTION('',(-2.276875578873E-29,3.260615420657E-15,-1.)); +#27212 = DIRECTION('',(-1.,0.,2.276875578873E-29)); +#27213 = ADVANCED_FACE('',(#27214),#27220,.F.); +#27214 = FACE_BOUND('',#27215,.T.); +#27215 = EDGE_LOOP('',(#27216,#27217,#27218,#27219)); +#27216 = ORIENTED_EDGE('',*,*,#26817,.T.); +#27217 = ORIENTED_EDGE('',*,*,#27203,.F.); +#27218 = ORIENTED_EDGE('',*,*,#26921,.F.); +#27219 = ORIENTED_EDGE('',*,*,#27026,.T.); +#27220 = PLANE('',#27221); +#27221 = AXIS2_PLACEMENT_3D('',#27222,#27223,#27224); +#27222 = CARTESIAN_POINT('',(7.50097449872,-0.976855391411, + 0.749636466024)); +#27223 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#27224 = DIRECTION('',(0.,0.,-1.)); +#27225 = MANIFOLD_SOLID_BREP('',#27226); +#27226 = CLOSED_SHELL('',(#27227,#27267,#27298,#27335,#27372,#27409, + #27446,#27483,#27511,#27557,#27588,#27619,#27650,#27681,#27718, + #27755,#27792,#27829,#27860,#27897,#27934,#27965,#27993,#28025)); +#27227 = ADVANCED_FACE('',(#27228),#27262,.T.); +#27228 = FACE_BOUND('',#27229,.T.); +#27229 = EDGE_LOOP('',(#27230,#27240,#27248,#27256)); +#27230 = ORIENTED_EDGE('',*,*,#27231,.F.); +#27231 = EDGE_CURVE('',#27232,#27234,#27236,.T.); +#27232 = VERTEX_POINT('',#27233); +#27233 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.789396808207)); +#27234 = VERTEX_POINT('',#27235); +#27235 = CARTESIAN_POINT('',(7.499974498734,-0.911558595147, + 0.785736860391)); +#27236 = LINE('',#27237,#27238); +#27237 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.789396808207)); +#27238 = VECTOR('',#27239,1.); +#27239 = DIRECTION('',(0.,-0.9910683663,-0.133354764894)); +#27240 = ORIENTED_EDGE('',*,*,#27241,.F.); +#27241 = EDGE_CURVE('',#27242,#27232,#27244,.T.); +#27242 = VERTEX_POINT('',#27243); +#27243 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.789396808207)); +#27244 = LINE('',#27245,#27246); +#27245 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.789396808207)); +#27246 = VECTOR('',#27247,1.); +#27247 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27248 = ORIENTED_EDGE('',*,*,#27249,.T.); +#27249 = EDGE_CURVE('',#27242,#27250,#27252,.T.); +#27250 = VERTEX_POINT('',#27251); +#27251 = CARTESIAN_POINT('',(7.50097449872,-0.911558595147, + 0.785736860391)); +#27252 = LINE('',#27253,#27254); +#27253 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.789396808207)); +#27254 = VECTOR('',#27255,1.); +#27255 = DIRECTION('',(0.,-0.9910683663,-0.133354764894)); +#27256 = ORIENTED_EDGE('',*,*,#27257,.T.); +#27257 = EDGE_CURVE('',#27250,#27234,#27258,.T.); +#27258 = LINE('',#27259,#27260); +#27259 = CARTESIAN_POINT('',(7.50097449872,-0.911558595147, + 0.785736860391)); +#27260 = VECTOR('',#27261,1.); +#27261 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27262 = PLANE('',#27263); +#27263 = AXIS2_PLACEMENT_3D('',#27264,#27265,#27266); +#27264 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.789396808207)); +#27265 = DIRECTION('',(-9.312113461446E-16,0.133354764894,-0.9910683663) + ); +#27266 = DIRECTION('',(-1.,4.930380657631E-32,9.396035407944E-16)); +#27267 = ADVANCED_FACE('',(#27268),#27293,.T.); +#27268 = FACE_BOUND('',#27269,.T.); +#27269 = EDGE_LOOP('',(#27270,#27278,#27286,#27292)); +#27270 = ORIENTED_EDGE('',*,*,#27271,.F.); +#27271 = EDGE_CURVE('',#27272,#27232,#27274,.T.); +#27272 = VERTEX_POINT('',#27273); +#27273 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.778250603494)); +#27274 = LINE('',#27275,#27276); +#27275 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.778250603494)); +#27276 = VECTOR('',#27277,1.); +#27277 = DIRECTION('',(0.,0.,1.)); +#27278 = ORIENTED_EDGE('',*,*,#27279,.F.); +#27279 = EDGE_CURVE('',#27280,#27272,#27282,.T.); +#27280 = VERTEX_POINT('',#27281); +#27281 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.778250603494)); +#27282 = LINE('',#27283,#27284); +#27283 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.778250603494)); +#27284 = VECTOR('',#27285,1.); +#27285 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27286 = ORIENTED_EDGE('',*,*,#27287,.T.); +#27287 = EDGE_CURVE('',#27280,#27242,#27288,.T.); +#27288 = LINE('',#27289,#27290); +#27289 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.778250603494)); +#27290 = VECTOR('',#27291,1.); +#27291 = DIRECTION('',(0.,0.,1.)); +#27292 = ORIENTED_EDGE('',*,*,#27241,.T.); +#27293 = PLANE('',#27294); +#27294 = AXIS2_PLACEMENT_3D('',#27295,#27296,#27297); +#27295 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.778250603494)); +#27296 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#27297 = DIRECTION('',(0.,0.,-1.)); +#27298 = ADVANCED_FACE('',(#27299),#27326,.T.); +#27299 = FACE_BOUND('',#27300,.T.); +#27300 = EDGE_LOOP('',(#27301,#27310,#27318,#27325)); +#27301 = ORIENTED_EDGE('',*,*,#27302,.F.); +#27302 = EDGE_CURVE('',#27303,#27272,#27305,.T.); +#27303 = VERTEX_POINT('',#27304); +#27304 = CARTESIAN_POINT('',(7.499974498734,-0.893092494803, + 0.754544123323)); +#27305 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27306,#27307,#27308,#27309), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#27306 = CARTESIAN_POINT('',(7.499974498734,-0.893092494803, + 0.754544123323)); +#27307 = CARTESIAN_POINT('',(7.499974498734,-0.88726985055, + 0.760782670736)); +#27308 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.768684830793)); +#27309 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.778250603494)); +#27310 = ORIENTED_EDGE('',*,*,#27311,.F.); +#27311 = EDGE_CURVE('',#27312,#27303,#27314,.T.); +#27312 = VERTEX_POINT('',#27313); +#27313 = CARTESIAN_POINT('',(7.50097449872,-0.893092494803, + 0.754544123323)); +#27314 = LINE('',#27315,#27316); +#27315 = CARTESIAN_POINT('',(7.50097449872,-0.893092494803, + 0.754544123323)); +#27316 = VECTOR('',#27317,1.); +#27317 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27318 = ORIENTED_EDGE('',*,*,#27319,.T.); +#27319 = EDGE_CURVE('',#27312,#27280,#27320,.T.); +#27320 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27321,#27322,#27323,#27324), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#27321 = CARTESIAN_POINT('',(7.50097449872,-0.893092494803, + 0.754544123323)); +#27322 = CARTESIAN_POINT('',(7.50097449872,-0.88726985055,0.760782670736 + )); +#27323 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.768684830793)); +#27324 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.778250603494)); +#27325 = ORIENTED_EDGE('',*,*,#27279,.T.); +#27326 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27327,#27328) + ,(#27329,#27330) + ,(#27331,#27332) + ,(#27333,#27334 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(5.,6.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27327 = CARTESIAN_POINT('',(7.50097449872,-0.893092494803, + 0.754544123323)); +#27328 = CARTESIAN_POINT('',(7.499974498734,-0.893092494803, + 0.754544123323)); +#27329 = CARTESIAN_POINT('',(7.50097449872,-0.88726985055,0.760782670736 + )); +#27330 = CARTESIAN_POINT('',(7.499974498734,-0.88726985055, + 0.760782670736)); +#27331 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.768684830793)); +#27332 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.768684830793)); +#27333 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.778250603494)); +#27334 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.778250603494)); +#27335 = ADVANCED_FACE('',(#27336),#27363,.T.); +#27336 = FACE_BOUND('',#27337,.T.); +#27337 = EDGE_LOOP('',(#27338,#27347,#27355,#27362)); +#27338 = ORIENTED_EDGE('',*,*,#27339,.F.); +#27339 = EDGE_CURVE('',#27340,#27303,#27342,.T.); +#27340 = VERTEX_POINT('',#27341); +#27341 = CARTESIAN_POINT('',(7.499974498734,-0.915218542963, + 0.745061531253)); +#27342 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27343,#27344,#27345,#27346), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#27343 = CARTESIAN_POINT('',(7.499974498734,-0.915218542963, + 0.745061531253)); +#27344 = CARTESIAN_POINT('',(7.499974498734,-0.906276625004, + 0.745061531253)); +#27345 = CARTESIAN_POINT('',(7.499974498734,-0.898873548739, + 0.748222395276)); +#27346 = CARTESIAN_POINT('',(7.499974498734,-0.893092494803, + 0.754544123323)); +#27347 = ORIENTED_EDGE('',*,*,#27348,.F.); +#27348 = EDGE_CURVE('',#27349,#27340,#27351,.T.); +#27349 = VERTEX_POINT('',#27350); +#27350 = CARTESIAN_POINT('',(7.50097449872,-0.915218542963, + 0.745061531253)); +#27351 = LINE('',#27352,#27353); +#27352 = CARTESIAN_POINT('',(7.50097449872,-0.915218542963, + 0.745061531253)); +#27353 = VECTOR('',#27354,1.); +#27354 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27355 = ORIENTED_EDGE('',*,*,#27356,.T.); +#27356 = EDGE_CURVE('',#27349,#27312,#27357,.T.); +#27357 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27358,#27359,#27360,#27361), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#27358 = CARTESIAN_POINT('',(7.50097449872,-0.915218542963, + 0.745061531253)); +#27359 = CARTESIAN_POINT('',(7.50097449872,-0.906276625004, + 0.745061531253)); +#27360 = CARTESIAN_POINT('',(7.50097449872,-0.898873548739, + 0.748222395276)); +#27361 = CARTESIAN_POINT('',(7.50097449872,-0.893092494803, + 0.754544123323)); +#27362 = ORIENTED_EDGE('',*,*,#27311,.T.); +#27363 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27364,#27365) + ,(#27366,#27367) + ,(#27368,#27369) + ,(#27370,#27371 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(4.,5.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27364 = CARTESIAN_POINT('',(7.50097449872,-0.915218542963, + 0.745061531253)); +#27365 = CARTESIAN_POINT('',(7.499974498734,-0.915218542963, + 0.745061531253)); +#27366 = CARTESIAN_POINT('',(7.50097449872,-0.906276625004, + 0.745061531253)); +#27367 = CARTESIAN_POINT('',(7.499974498734,-0.906276625004, + 0.745061531253)); +#27368 = CARTESIAN_POINT('',(7.50097449872,-0.898873548739, + 0.748222395276)); +#27369 = CARTESIAN_POINT('',(7.499974498734,-0.898873548739, + 0.748222395276)); +#27370 = CARTESIAN_POINT('',(7.50097449872,-0.893092494803, + 0.754544123323)); +#27371 = CARTESIAN_POINT('',(7.499974498734,-0.893092494803, + 0.754544123323)); +#27372 = ADVANCED_FACE('',(#27373),#27400,.T.); +#27373 = FACE_BOUND('',#27374,.T.); +#27374 = EDGE_LOOP('',(#27375,#27384,#27392,#27399)); +#27375 = ORIENTED_EDGE('',*,*,#27376,.F.); +#27376 = EDGE_CURVE('',#27377,#27340,#27379,.T.); +#27377 = VERTEX_POINT('',#27378); +#27378 = CARTESIAN_POINT('',(7.499974498734,-0.930773321181, + 0.750301911081)); +#27379 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27380,#27381,#27382,#27383), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#27380 = CARTESIAN_POINT('',(7.499974498734,-0.930773321181, + 0.750301911081)); +#27381 = CARTESIAN_POINT('',(7.499974498734,-0.926863831469, + 0.746808324529)); +#27382 = CARTESIAN_POINT('',(7.499974498734,-0.921665041958, + 0.745061531253)); +#27383 = CARTESIAN_POINT('',(7.499974498734,-0.915218542963, + 0.745061531253)); +#27384 = ORIENTED_EDGE('',*,*,#27385,.F.); +#27385 = EDGE_CURVE('',#27386,#27377,#27388,.T.); +#27386 = VERTEX_POINT('',#27387); +#27387 = CARTESIAN_POINT('',(7.50097449872,-0.930773321181, + 0.750301911081)); +#27388 = LINE('',#27389,#27390); +#27389 = CARTESIAN_POINT('',(7.50097449872,-0.930773321181, + 0.750301911081)); +#27390 = VECTOR('',#27391,1.); +#27391 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27392 = ORIENTED_EDGE('',*,*,#27393,.T.); +#27393 = EDGE_CURVE('',#27386,#27349,#27394,.T.); +#27394 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27395,#27396,#27397,#27398), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#27395 = CARTESIAN_POINT('',(7.50097449872,-0.930773321181, + 0.750301911081)); +#27396 = CARTESIAN_POINT('',(7.50097449872,-0.926863831469, + 0.746808324529)); +#27397 = CARTESIAN_POINT('',(7.50097449872,-0.921665041958, + 0.745061531253)); +#27398 = CARTESIAN_POINT('',(7.50097449872,-0.915218542963, + 0.745061531253)); +#27399 = ORIENTED_EDGE('',*,*,#27348,.T.); +#27400 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27401,#27402) + ,(#27403,#27404) + ,(#27405,#27406) + ,(#27407,#27408 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27401 = CARTESIAN_POINT('',(7.50097449872,-0.930773321181, + 0.750301911081)); +#27402 = CARTESIAN_POINT('',(7.499974498734,-0.930773321181, + 0.750301911081)); +#27403 = CARTESIAN_POINT('',(7.50097449872,-0.926863831469, + 0.746808324529)); +#27404 = CARTESIAN_POINT('',(7.499974498734,-0.926863831469, + 0.746808324529)); +#27405 = CARTESIAN_POINT('',(7.50097449872,-0.921665041958, + 0.745061531253)); +#27406 = CARTESIAN_POINT('',(7.499974498734,-0.921665041958, + 0.745061531253)); +#27407 = CARTESIAN_POINT('',(7.50097449872,-0.915218542963, + 0.745061531253)); +#27408 = CARTESIAN_POINT('',(7.499974498734,-0.915218542963, + 0.745061531253)); +#27409 = ADVANCED_FACE('',(#27410),#27437,.T.); +#27410 = FACE_BOUND('',#27411,.T.); +#27411 = EDGE_LOOP('',(#27412,#27421,#27429,#27436)); +#27412 = ORIENTED_EDGE('',*,*,#27413,.F.); +#27413 = EDGE_CURVE('',#27414,#27377,#27416,.T.); +#27414 = VERTEX_POINT('',#27415); +#27415 = CARTESIAN_POINT('',(7.499974498734,-0.936679146066, + 0.763860354126)); +#27416 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27417,#27418,#27419,#27420), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#27417 = CARTESIAN_POINT('',(7.499974498734,-0.936679146066, + 0.763860354126)); +#27418 = CARTESIAN_POINT('',(7.499974498734,-0.936679146066, + 0.758287251771)); +#27419 = CARTESIAN_POINT('',(7.499974498734,-0.93472440121, + 0.753795497633)); +#27420 = CARTESIAN_POINT('',(7.499974498734,-0.930773321181, + 0.750301911081)); +#27421 = ORIENTED_EDGE('',*,*,#27422,.F.); +#27422 = EDGE_CURVE('',#27423,#27414,#27425,.T.); +#27423 = VERTEX_POINT('',#27424); +#27424 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.763860354126)); +#27425 = LINE('',#27426,#27427); +#27426 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.763860354126)); +#27427 = VECTOR('',#27428,1.); +#27428 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27429 = ORIENTED_EDGE('',*,*,#27430,.T.); +#27430 = EDGE_CURVE('',#27423,#27386,#27431,.T.); +#27431 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27432,#27433,#27434,#27435), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#27432 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.763860354126)); +#27433 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.758287251771)); +#27434 = CARTESIAN_POINT('',(7.50097449872,-0.93472440121,0.753795497633 + )); +#27435 = CARTESIAN_POINT('',(7.50097449872,-0.930773321181, + 0.750301911081)); +#27436 = ORIENTED_EDGE('',*,*,#27385,.T.); +#27437 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27438,#27439) + ,(#27440,#27441) + ,(#27442,#27443) + ,(#27444,#27445 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(2.,3.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27438 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.763860354126)); +#27439 = CARTESIAN_POINT('',(7.499974498734,-0.936679146066, + 0.763860354126)); +#27440 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.758287251771)); +#27441 = CARTESIAN_POINT('',(7.499974498734,-0.936679146066, + 0.758287251771)); +#27442 = CARTESIAN_POINT('',(7.50097449872,-0.93472440121,0.753795497633 + )); +#27443 = CARTESIAN_POINT('',(7.499974498734,-0.93472440121, + 0.753795497633)); +#27444 = CARTESIAN_POINT('',(7.50097449872,-0.930773321181, + 0.750301911081)); +#27445 = CARTESIAN_POINT('',(7.499974498734,-0.930773321181, + 0.750301911081)); +#27446 = ADVANCED_FACE('',(#27447),#27474,.T.); +#27447 = FACE_BOUND('',#27448,.T.); +#27448 = EDGE_LOOP('',(#27449,#27458,#27466,#27473)); +#27449 = ORIENTED_EDGE('',*,*,#27450,.F.); +#27450 = EDGE_CURVE('',#27451,#27414,#27453,.T.); +#27451 = VERTEX_POINT('',#27452); +#27452 = CARTESIAN_POINT('',(7.499974498734,-0.931272404974, + 0.778583326023)); +#27453 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27454,#27455,#27456,#27457), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#27454 = CARTESIAN_POINT('',(7.499974498734,-0.931272404974, + 0.778583326023)); +#27455 = CARTESIAN_POINT('',(7.499974498734,-0.934849172159, + 0.775089739472)); +#27456 = CARTESIAN_POINT('',(7.499974498734,-0.936679146066, + 0.770182082173)); +#27457 = CARTESIAN_POINT('',(7.499974498734,-0.936679146066, + 0.763860354126)); +#27458 = ORIENTED_EDGE('',*,*,#27459,.F.); +#27459 = EDGE_CURVE('',#27460,#27451,#27462,.T.); +#27460 = VERTEX_POINT('',#27461); +#27461 = CARTESIAN_POINT('',(7.50097449872,-0.931272404974, + 0.778583326023)); +#27462 = LINE('',#27463,#27464); +#27463 = CARTESIAN_POINT('',(7.50097449872,-0.931272404974, + 0.778583326023)); +#27464 = VECTOR('',#27465,1.); +#27465 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27466 = ORIENTED_EDGE('',*,*,#27467,.T.); +#27467 = EDGE_CURVE('',#27460,#27423,#27468,.T.); +#27468 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27469,#27470,#27471,#27472), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#27469 = CARTESIAN_POINT('',(7.50097449872,-0.931272404974, + 0.778583326023)); +#27470 = CARTESIAN_POINT('',(7.50097449872,-0.934849172159, + 0.775089739472)); +#27471 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.770182082173)); +#27472 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.763860354126)); +#27473 = ORIENTED_EDGE('',*,*,#27422,.T.); +#27474 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27475,#27476) + ,(#27477,#27478) + ,(#27479,#27480) + ,(#27481,#27482 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(1.,2.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27475 = CARTESIAN_POINT('',(7.50097449872,-0.931272404974, + 0.778583326023)); +#27476 = CARTESIAN_POINT('',(7.499974498734,-0.931272404974, + 0.778583326023)); +#27477 = CARTESIAN_POINT('',(7.50097449872,-0.934849172159, + 0.775089739472)); +#27478 = CARTESIAN_POINT('',(7.499974498734,-0.934849172159, + 0.775089739472)); +#27479 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.770182082173)); +#27480 = CARTESIAN_POINT('',(7.499974498734,-0.936679146066, + 0.770182082173)); +#27481 = CARTESIAN_POINT('',(7.50097449872,-0.936679146066, + 0.763860354126)); +#27482 = CARTESIAN_POINT('',(7.499974498734,-0.936679146066, + 0.763860354126)); +#27483 = ADVANCED_FACE('',(#27484),#27502,.T.); +#27484 = FACE_BOUND('',#27485,.T.); +#27485 = EDGE_LOOP('',(#27486,#27493,#27494,#27501)); +#27486 = ORIENTED_EDGE('',*,*,#27487,.F.); +#27487 = EDGE_CURVE('',#27234,#27451,#27488,.T.); +#27488 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27489,#27490,#27491,#27492), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#27489 = CARTESIAN_POINT('',(7.499974498734,-0.911558595147, + 0.785736860391)); +#27490 = CARTESIAN_POINT('',(7.499974498734,-0.921082777532, + 0.784405970275)); +#27491 = CARTESIAN_POINT('',(7.499974498734,-0.927654047475, + 0.782076912575)); +#27492 = CARTESIAN_POINT('',(7.499974498734,-0.931272404974, + 0.778583326023)); +#27493 = ORIENTED_EDGE('',*,*,#27257,.F.); +#27494 = ORIENTED_EDGE('',*,*,#27495,.T.); +#27495 = EDGE_CURVE('',#27250,#27460,#27496,.T.); +#27496 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27497,#27498,#27499,#27500), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#27497 = CARTESIAN_POINT('',(7.50097449872,-0.911558595147, + 0.785736860391)); +#27498 = CARTESIAN_POINT('',(7.50097449872,-0.921082777532, + 0.784405970275)); +#27499 = CARTESIAN_POINT('',(7.50097449872,-0.927654047475, + 0.782076912575)); +#27500 = CARTESIAN_POINT('',(7.50097449872,-0.931272404974, + 0.778583326023)); +#27501 = ORIENTED_EDGE('',*,*,#27459,.T.); +#27502 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27503,#27504) + ,(#27505,#27506) + ,(#27507,#27508) + ,(#27509,#27510 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(0.,1.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27503 = CARTESIAN_POINT('',(7.50097449872,-0.911558595147, + 0.785736860391)); +#27504 = CARTESIAN_POINT('',(7.499974498734,-0.911558595147, + 0.785736860391)); +#27505 = CARTESIAN_POINT('',(7.50097449872,-0.921082777532, + 0.784405970275)); +#27506 = CARTESIAN_POINT('',(7.499974498734,-0.921082777532, + 0.784405970275)); +#27507 = CARTESIAN_POINT('',(7.50097449872,-0.927654047475, + 0.782076912575)); +#27508 = CARTESIAN_POINT('',(7.499974498734,-0.927654047475, + 0.782076912575)); +#27509 = CARTESIAN_POINT('',(7.50097449872,-0.931272404974, + 0.778583326023)); +#27510 = CARTESIAN_POINT('',(7.499974498734,-0.931272404974, + 0.778583326023)); +#27511 = ADVANCED_FACE('',(#27512),#27548,.F.); +#27512 = FACE_BOUND('',#27513,.F.); +#27513 = EDGE_LOOP('',(#27514,#27524,#27533,#27541)); +#27514 = ORIENTED_EDGE('',*,*,#27515,.F.); +#27515 = EDGE_CURVE('',#27516,#27518,#27520,.T.); +#27516 = VERTEX_POINT('',#27517); +#27517 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.805866573379)); +#27518 = VERTEX_POINT('',#27519); +#27519 = CARTESIAN_POINT('',(7.499974498734,-0.863979273539, + 0.805866573379)); +#27520 = LINE('',#27521,#27522); +#27521 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.805866573379)); +#27522 = VECTOR('',#27523,1.); +#27523 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27524 = ORIENTED_EDGE('',*,*,#27525,.T.); +#27525 = EDGE_CURVE('',#27516,#27526,#27528,.T.); +#27526 = VERTEX_POINT('',#27527); +#27527 = CARTESIAN_POINT('',(7.50097449872,-0.905985492791, + 0.849952308436)); +#27528 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27529,#27530,#27531,#27532), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#27529 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.805866573379)); +#27530 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.835312517172)); +#27531 = CARTESIAN_POINT('',(7.50097449872,-0.877995210061, + 0.849952308436)); +#27532 = CARTESIAN_POINT('',(7.50097449872,-0.905985492791, + 0.849952308436)); +#27533 = ORIENTED_EDGE('',*,*,#27534,.T.); +#27534 = EDGE_CURVE('',#27526,#27535,#27537,.T.); +#27535 = VERTEX_POINT('',#27536); +#27536 = CARTESIAN_POINT('',(7.499974498734,-0.905985492791, + 0.849952308436)); +#27537 = LINE('',#27538,#27539); +#27538 = CARTESIAN_POINT('',(7.50097449872,-0.905985492791, + 0.849952308436)); +#27539 = VECTOR('',#27540,1.); +#27540 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27541 = ORIENTED_EDGE('',*,*,#27542,.F.); +#27542 = EDGE_CURVE('',#27518,#27535,#27543,.T.); +#27543 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27544,#27545,#27546,#27547), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#27544 = CARTESIAN_POINT('',(7.499974498734,-0.863979273539, + 0.805866573379)); +#27545 = CARTESIAN_POINT('',(7.499974498734,-0.863979273539, + 0.835312517172)); +#27546 = CARTESIAN_POINT('',(7.499974498734,-0.877995210061, + 0.849952308436)); +#27547 = CARTESIAN_POINT('',(7.499974498734,-0.905985492791, + 0.849952308436)); +#27548 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27549,#27550) + ,(#27551,#27552) + ,(#27553,#27554) + ,(#27555,#27556 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(1.,2.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27549 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.805866573379)); +#27550 = CARTESIAN_POINT('',(7.499974498734,-0.863979273539, + 0.805866573379)); +#27551 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.835312517172)); +#27552 = CARTESIAN_POINT('',(7.499974498734,-0.863979273539, + 0.835312517172)); +#27553 = CARTESIAN_POINT('',(7.50097449872,-0.877995210061, + 0.849952308436)); +#27554 = CARTESIAN_POINT('',(7.499974498734,-0.877995210061, + 0.849952308436)); +#27555 = CARTESIAN_POINT('',(7.50097449872,-0.905985492791, + 0.849952308436)); +#27556 = CARTESIAN_POINT('',(7.499974498734,-0.905985492791, + 0.849952308436)); +#27557 = ADVANCED_FACE('',(#27558),#27583,.F.); +#27558 = FACE_BOUND('',#27559,.T.); +#27559 = EDGE_LOOP('',(#27560,#27568,#27569,#27577)); +#27560 = ORIENTED_EDGE('',*,*,#27561,.T.); +#27561 = EDGE_CURVE('',#27562,#27518,#27564,.T.); +#27562 = VERTEX_POINT('',#27563); +#27563 = CARTESIAN_POINT('',(7.499974498734,-0.863979273539, + 0.731087185047)); +#27564 = LINE('',#27565,#27566); +#27565 = CARTESIAN_POINT('',(7.499974498734,-0.863979273539, + 0.805866573379)); +#27566 = VECTOR('',#27567,1.); +#27567 = DIRECTION('',(0.,0.,1.)); +#27568 = ORIENTED_EDGE('',*,*,#27515,.F.); +#27569 = ORIENTED_EDGE('',*,*,#27570,.F.); +#27570 = EDGE_CURVE('',#27571,#27516,#27573,.T.); +#27571 = VERTEX_POINT('',#27572); +#27572 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.731087185047)); +#27573 = LINE('',#27574,#27575); +#27574 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.805866573379)); +#27575 = VECTOR('',#27576,1.); +#27576 = DIRECTION('',(0.,0.,1.)); +#27577 = ORIENTED_EDGE('',*,*,#27578,.T.); +#27578 = EDGE_CURVE('',#27571,#27562,#27579,.T.); +#27579 = LINE('',#27580,#27581); +#27580 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.731087185047)); +#27581 = VECTOR('',#27582,1.); +#27582 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27583 = PLANE('',#27584); +#27584 = AXIS2_PLACEMENT_3D('',#27585,#27586,#27587); +#27585 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.805866573379)); +#27586 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#27587 = DIRECTION('',(0.,0.,-1.)); +#27588 = ADVANCED_FACE('',(#27589),#27614,.F.); +#27589 = FACE_BOUND('',#27590,.T.); +#27590 = EDGE_LOOP('',(#27591,#27599,#27600,#27608)); +#27591 = ORIENTED_EDGE('',*,*,#27592,.T.); +#27592 = EDGE_CURVE('',#27593,#27562,#27595,.T.); +#27593 = VERTEX_POINT('',#27594); +#27594 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.731087185047)); +#27595 = LINE('',#27596,#27597); +#27596 = CARTESIAN_POINT('',(7.499974498734,-0.863979273539, + 0.731087185047)); +#27597 = VECTOR('',#27598,1.); +#27598 = DIRECTION('',(-4.256101271532E-14,1.,1.064025317883E-14)); +#27599 = ORIENTED_EDGE('',*,*,#27578,.F.); +#27600 = ORIENTED_EDGE('',*,*,#27601,.F.); +#27601 = EDGE_CURVE('',#27602,#27571,#27604,.T.); +#27602 = VERTEX_POINT('',#27603); +#27603 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.731087185047)); +#27604 = LINE('',#27605,#27606); +#27605 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.731087185047)); +#27606 = VECTOR('',#27607,1.); +#27607 = DIRECTION('',(-4.256101271532E-14,1.,1.064025317883E-14)); +#27608 = ORIENTED_EDGE('',*,*,#27609,.T.); +#27609 = EDGE_CURVE('',#27602,#27593,#27610,.T.); +#27610 = LINE('',#27611,#27612); +#27611 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.731087185047)); +#27612 = VECTOR('',#27613,1.); +#27613 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27614 = PLANE('',#27615); +#27615 = AXIS2_PLACEMENT_3D('',#27616,#27617,#27618); +#27616 = CARTESIAN_POINT('',(7.50097449872,-0.863979273539, + 0.731087185047)); +#27617 = DIRECTION('',(7.430049082891E-29,-1.064025317883E-14,1.)); +#27618 = DIRECTION('',(0.,-1.,-1.064025317883E-14)); +#27619 = ADVANCED_FACE('',(#27620),#27645,.F.); +#27620 = FACE_BOUND('',#27621,.T.); +#27621 = EDGE_LOOP('',(#27622,#27630,#27631,#27639)); +#27622 = ORIENTED_EDGE('',*,*,#27623,.T.); +#27623 = EDGE_CURVE('',#27624,#27593,#27626,.T.); +#27624 = VERTEX_POINT('',#27625); +#27625 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.749054201598)); +#27626 = LINE('',#27627,#27628); +#27627 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.731087185047)); +#27628 = VECTOR('',#27629,1.); +#27629 = DIRECTION('',(0.,0.,-1.)); +#27630 = ORIENTED_EDGE('',*,*,#27609,.F.); +#27631 = ORIENTED_EDGE('',*,*,#27632,.F.); +#27632 = EDGE_CURVE('',#27633,#27602,#27635,.T.); +#27633 = VERTEX_POINT('',#27634); +#27634 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.749054201598)); +#27635 = LINE('',#27636,#27637); +#27636 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.731087185047)); +#27637 = VECTOR('',#27638,1.); +#27638 = DIRECTION('',(0.,0.,-1.)); +#27639 = ORIENTED_EDGE('',*,*,#27640,.T.); +#27640 = EDGE_CURVE('',#27633,#27624,#27641,.T.); +#27641 = LINE('',#27642,#27643); +#27642 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.749054201598)); +#27643 = VECTOR('',#27644,1.); +#27644 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27645 = PLANE('',#27646); +#27646 = AXIS2_PLACEMENT_3D('',#27647,#27648,#27649); +#27647 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.731087185047)); +#27648 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#27649 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#27650 = ADVANCED_FACE('',(#27651),#27676,.F.); +#27651 = FACE_BOUND('',#27652,.T.); +#27652 = EDGE_LOOP('',(#27653,#27661,#27662,#27670)); +#27653 = ORIENTED_EDGE('',*,*,#27654,.T.); +#27654 = EDGE_CURVE('',#27655,#27624,#27657,.T.); +#27655 = VERTEX_POINT('',#27656); +#27656 = CARTESIAN_POINT('',(7.499974498734,-0.884899202533, + 0.749054201598)); +#27657 = LINE('',#27658,#27659); +#27658 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.749054201598)); +#27659 = VECTOR('',#27660,1.); +#27660 = DIRECTION('',(0.,1.,0.)); +#27661 = ORIENTED_EDGE('',*,*,#27640,.F.); +#27662 = ORIENTED_EDGE('',*,*,#27663,.F.); +#27663 = EDGE_CURVE('',#27664,#27633,#27666,.T.); +#27664 = VERTEX_POINT('',#27665); +#27665 = CARTESIAN_POINT('',(7.50097449872,-0.884899202533, + 0.749054201598)); +#27666 = LINE('',#27667,#27668); +#27667 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.749054201598)); +#27668 = VECTOR('',#27669,1.); +#27669 = DIRECTION('',(0.,1.,0.)); +#27670 = ORIENTED_EDGE('',*,*,#27671,.T.); +#27671 = EDGE_CURVE('',#27664,#27655,#27672,.T.); +#27672 = LINE('',#27673,#27674); +#27673 = CARTESIAN_POINT('',(7.50097449872,-0.884899202533, + 0.749054201598)); +#27674 = VECTOR('',#27675,1.); +#27675 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27676 = PLANE('',#27677); +#27677 = AXIS2_PLACEMENT_3D('',#27678,#27679,#27680); +#27678 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.749054201598)); +#27679 = DIRECTION('',(0.,0.,1.)); +#27680 = DIRECTION('',(1.,0.,-0.)); +#27681 = ADVANCED_FACE('',(#27682),#27709,.F.); +#27682 = FACE_BOUND('',#27683,.F.); +#27683 = EDGE_LOOP('',(#27684,#27694,#27701,#27702)); +#27684 = ORIENTED_EDGE('',*,*,#27685,.F.); +#27685 = EDGE_CURVE('',#27686,#27688,#27690,.T.); +#27686 = VERTEX_POINT('',#27687); +#27687 = CARTESIAN_POINT('',(7.50097449872,-0.920500513107, + 0.728342224185)); +#27688 = VERTEX_POINT('',#27689); +#27689 = CARTESIAN_POINT('',(7.499974498734,-0.920500513107, + 0.728342224185)); +#27690 = LINE('',#27691,#27692); +#27691 = CARTESIAN_POINT('',(7.50097449872,-0.920500513107, + 0.728342224185)); +#27692 = VECTOR('',#27693,1.); +#27693 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27694 = ORIENTED_EDGE('',*,*,#27695,.T.); +#27695 = EDGE_CURVE('',#27686,#27664,#27696,.T.); +#27696 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27697,#27698,#27699,#27700), + .UNSPECIFIED.,.F.,.F.,(4,4),(6.,7.),.PIECEWISE_BEZIER_KNOTS.); +#27697 = CARTESIAN_POINT('',(7.50097449872,-0.920500513107, + 0.728342224185)); +#27698 = CARTESIAN_POINT('',(7.50097449872,-0.90482096394,0.728342224185 + )); +#27699 = CARTESIAN_POINT('',(7.50097449872,-0.892926133538, + 0.735246216656)); +#27700 = CARTESIAN_POINT('',(7.50097449872,-0.884899202533, + 0.749054201598)); +#27701 = ORIENTED_EDGE('',*,*,#27671,.T.); +#27702 = ORIENTED_EDGE('',*,*,#27703,.F.); +#27703 = EDGE_CURVE('',#27688,#27655,#27704,.T.); +#27704 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27705,#27706,#27707,#27708), + .UNSPECIFIED.,.F.,.F.,(4,4),(6.,7.),.PIECEWISE_BEZIER_KNOTS.); +#27705 = CARTESIAN_POINT('',(7.499974498734,-0.920500513107, + 0.728342224185)); +#27706 = CARTESIAN_POINT('',(7.499974498734,-0.90482096394, + 0.728342224185)); +#27707 = CARTESIAN_POINT('',(7.499974498734,-0.892926133538, + 0.735246216656)); +#27708 = CARTESIAN_POINT('',(7.499974498734,-0.884899202533, + 0.749054201598)); +#27709 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27710,#27711) + ,(#27712,#27713) + ,(#27714,#27715) + ,(#27716,#27717 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(6.,7.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27710 = CARTESIAN_POINT('',(7.50097449872,-0.920500513107, + 0.728342224185)); +#27711 = CARTESIAN_POINT('',(7.499974498734,-0.920500513107, + 0.728342224185)); +#27712 = CARTESIAN_POINT('',(7.50097449872,-0.90482096394,0.728342224185 + )); +#27713 = CARTESIAN_POINT('',(7.499974498734,-0.90482096394, + 0.728342224185)); +#27714 = CARTESIAN_POINT('',(7.50097449872,-0.892926133538, + 0.735246216656)); +#27715 = CARTESIAN_POINT('',(7.499974498734,-0.892926133538, + 0.735246216656)); +#27716 = CARTESIAN_POINT('',(7.50097449872,-0.884899202533, + 0.749054201598)); +#27717 = CARTESIAN_POINT('',(7.499974498734,-0.884899202533, + 0.749054201598)); +#27718 = ADVANCED_FACE('',(#27719),#27746,.F.); +#27719 = FACE_BOUND('',#27720,.F.); +#27720 = EDGE_LOOP('',(#27721,#27731,#27738,#27739)); +#27721 = ORIENTED_EDGE('',*,*,#27722,.F.); +#27722 = EDGE_CURVE('',#27723,#27725,#27727,.T.); +#27723 = VERTEX_POINT('',#27724); +#27724 = CARTESIAN_POINT('',(7.50097449872,-0.947367857302, + 0.737492093725)); +#27725 = VERTEX_POINT('',#27726); +#27726 = CARTESIAN_POINT('',(7.499974498734,-0.947367857302, + 0.737492093725)); +#27727 = LINE('',#27728,#27729); +#27728 = CARTESIAN_POINT('',(7.50097449872,-0.947367857302, + 0.737492093725)); +#27729 = VECTOR('',#27730,1.); +#27730 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27731 = ORIENTED_EDGE('',*,*,#27732,.T.); +#27732 = EDGE_CURVE('',#27723,#27686,#27733,.T.); +#27733 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27734,#27735,#27736,#27737), + .UNSPECIFIED.,.F.,.F.,(4,4),(7.,8.),.PIECEWISE_BEZIER_KNOTS.); +#27734 = CARTESIAN_POINT('',(7.50097449872,-0.947367857302, + 0.737492093725)); +#27735 = CARTESIAN_POINT('',(7.50097449872,-0.940713406727, + 0.731419907575)); +#27736 = CARTESIAN_POINT('',(7.50097449872,-0.931771488767, + 0.728342224185)); +#27737 = CARTESIAN_POINT('',(7.50097449872,-0.920500513107, + 0.728342224185)); +#27738 = ORIENTED_EDGE('',*,*,#27685,.T.); +#27739 = ORIENTED_EDGE('',*,*,#27740,.F.); +#27740 = EDGE_CURVE('',#27725,#27688,#27741,.T.); +#27741 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27742,#27743,#27744,#27745), + .UNSPECIFIED.,.F.,.F.,(4,4),(7.,8.),.PIECEWISE_BEZIER_KNOTS.); +#27742 = CARTESIAN_POINT('',(7.499974498734,-0.947367857302, + 0.737492093725)); +#27743 = CARTESIAN_POINT('',(7.499974498734,-0.940713406727, + 0.731419907575)); +#27744 = CARTESIAN_POINT('',(7.499974498734,-0.931771488767, + 0.728342224185)); +#27745 = CARTESIAN_POINT('',(7.499974498734,-0.920500513107, + 0.728342224185)); +#27746 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27747,#27748) + ,(#27749,#27750) + ,(#27751,#27752) + ,(#27753,#27754 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(7.,8.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27747 = CARTESIAN_POINT('',(7.50097449872,-0.947367857302, + 0.737492093725)); +#27748 = CARTESIAN_POINT('',(7.499974498734,-0.947367857302, + 0.737492093725)); +#27749 = CARTESIAN_POINT('',(7.50097449872,-0.940713406727, + 0.731419907575)); +#27750 = CARTESIAN_POINT('',(7.499974498734,-0.940713406727, + 0.731419907575)); +#27751 = CARTESIAN_POINT('',(7.50097449872,-0.931771488767, + 0.728342224185)); +#27752 = CARTESIAN_POINT('',(7.499974498734,-0.931771488767, + 0.728342224185)); +#27753 = CARTESIAN_POINT('',(7.50097449872,-0.920500513107, + 0.728342224185)); +#27754 = CARTESIAN_POINT('',(7.499974498734,-0.920500513107, + 0.728342224185)); +#27755 = ADVANCED_FACE('',(#27756),#27783,.F.); +#27756 = FACE_BOUND('',#27757,.F.); +#27757 = EDGE_LOOP('',(#27758,#27768,#27775,#27776)); +#27758 = ORIENTED_EDGE('',*,*,#27759,.F.); +#27759 = EDGE_CURVE('',#27760,#27762,#27764,.T.); +#27760 = VERTEX_POINT('',#27761); +#27761 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164, + 0.762196741484)); +#27762 = VERTEX_POINT('',#27763); +#27763 = CARTESIAN_POINT('',(7.499974498734,-0.957349533164, + 0.762196741484)); +#27764 = LINE('',#27765,#27766); +#27765 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164, + 0.762196741484)); +#27766 = VECTOR('',#27767,1.); +#27767 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27768 = ORIENTED_EDGE('',*,*,#27769,.T.); +#27769 = EDGE_CURVE('',#27760,#27723,#27770,.T.); +#27770 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27771,#27772,#27773,#27774), + .UNSPECIFIED.,.F.,.F.,(4,4),(8.,9.),.PIECEWISE_BEZIER_KNOTS.); +#27771 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164, + 0.762196741484)); +#27772 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164,0.75179916246 + )); +#27773 = CARTESIAN_POINT('',(7.50097449872,-0.954022307876, + 0.743564279874)); +#27774 = CARTESIAN_POINT('',(7.50097449872,-0.947367857302, + 0.737492093725)); +#27775 = ORIENTED_EDGE('',*,*,#27722,.T.); +#27776 = ORIENTED_EDGE('',*,*,#27777,.F.); +#27777 = EDGE_CURVE('',#27762,#27725,#27778,.T.); +#27778 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27779,#27780,#27781,#27782), + .UNSPECIFIED.,.F.,.F.,(4,4),(8.,9.),.PIECEWISE_BEZIER_KNOTS.); +#27779 = CARTESIAN_POINT('',(7.499974498734,-0.957349533164, + 0.762196741484)); +#27780 = CARTESIAN_POINT('',(7.499974498734,-0.957349533164, + 0.75179916246)); +#27781 = CARTESIAN_POINT('',(7.499974498734,-0.954022307876, + 0.743564279874)); +#27782 = CARTESIAN_POINT('',(7.499974498734,-0.947367857302, + 0.737492093725)); +#27783 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27784,#27785) + ,(#27786,#27787) + ,(#27788,#27789) + ,(#27790,#27791 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(8.,9.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27784 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164, + 0.762196741484)); +#27785 = CARTESIAN_POINT('',(7.499974498734,-0.957349533164, + 0.762196741484)); +#27786 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164,0.75179916246 + )); +#27787 = CARTESIAN_POINT('',(7.499974498734,-0.957349533164, + 0.75179916246)); +#27788 = CARTESIAN_POINT('',(7.50097449872,-0.954022307876, + 0.743564279874)); +#27789 = CARTESIAN_POINT('',(7.499974498734,-0.954022307876, + 0.743564279874)); +#27790 = CARTESIAN_POINT('',(7.50097449872,-0.947367857302, + 0.737492093725)); +#27791 = CARTESIAN_POINT('',(7.499974498734,-0.947367857302, + 0.737492093725)); +#27792 = ADVANCED_FACE('',(#27793),#27820,.F.); +#27793 = FACE_BOUND('',#27794,.F.); +#27794 = EDGE_LOOP('',(#27795,#27805,#27812,#27813)); +#27795 = ORIENTED_EDGE('',*,*,#27796,.F.); +#27796 = EDGE_CURVE('',#27797,#27799,#27801,.T.); +#27797 = VERTEX_POINT('',#27798); +#27798 = CARTESIAN_POINT('',(7.50097449872,-0.918795310147, + 0.800127109759)); +#27799 = VERTEX_POINT('',#27800); +#27800 = CARTESIAN_POINT('',(7.499974498734,-0.918795310147, + 0.800127109759)); +#27801 = LINE('',#27802,#27803); +#27802 = CARTESIAN_POINT('',(7.50097449872,-0.918795310147, + 0.800127109759)); +#27803 = VECTOR('',#27804,1.); +#27804 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27805 = ORIENTED_EDGE('',*,*,#27806,.T.); +#27806 = EDGE_CURVE('',#27797,#27760,#27807,.T.); +#27807 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27808,#27809,#27810,#27811), + .UNSPECIFIED.,.F.,.F.,(4,4),(9.,10.),.PIECEWISE_BEZIER_KNOTS.); +#27808 = CARTESIAN_POINT('',(7.50097449872,-0.918795310147, + 0.800127109759)); +#27809 = CARTESIAN_POINT('',(7.50097449872,-0.944498125491, + 0.796550342575)); +#27810 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164, + 0.783906886483)); +#27811 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164, + 0.762196741484)); +#27812 = ORIENTED_EDGE('',*,*,#27759,.T.); +#27813 = ORIENTED_EDGE('',*,*,#27814,.F.); +#27814 = EDGE_CURVE('',#27799,#27762,#27815,.T.); +#27815 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27816,#27817,#27818,#27819), + .UNSPECIFIED.,.F.,.F.,(4,4),(9.,10.),.PIECEWISE_BEZIER_KNOTS.); +#27816 = CARTESIAN_POINT('',(7.499974498734,-0.918795310147, + 0.800127109759)); +#27817 = CARTESIAN_POINT('',(7.499974498734,-0.944498125491, + 0.796550342575)); +#27818 = CARTESIAN_POINT('',(7.499974498734,-0.957349533164, + 0.783906886483)); +#27819 = CARTESIAN_POINT('',(7.499974498734,-0.957349533164, + 0.762196741484)); +#27820 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27821,#27822) + ,(#27823,#27824) + ,(#27825,#27826) + ,(#27827,#27828 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(9.,10.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27821 = CARTESIAN_POINT('',(7.50097449872,-0.918795310147, + 0.800127109759)); +#27822 = CARTESIAN_POINT('',(7.499974498734,-0.918795310147, + 0.800127109759)); +#27823 = CARTESIAN_POINT('',(7.50097449872,-0.944498125491, + 0.796550342575)); +#27824 = CARTESIAN_POINT('',(7.499974498734,-0.944498125491, + 0.796550342575)); +#27825 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164, + 0.783906886483)); +#27826 = CARTESIAN_POINT('',(7.499974498734,-0.957349533164, + 0.783906886483)); +#27827 = CARTESIAN_POINT('',(7.50097449872,-0.957349533164, + 0.762196741484)); +#27828 = CARTESIAN_POINT('',(7.499974498734,-0.957349533164, + 0.762196741484)); +#27829 = ADVANCED_FACE('',(#27830),#27855,.F.); +#27830 = FACE_BOUND('',#27831,.T.); +#27831 = EDGE_LOOP('',(#27832,#27840,#27841,#27849)); +#27832 = ORIENTED_EDGE('',*,*,#27833,.T.); +#27833 = EDGE_CURVE('',#27834,#27799,#27836,.T.); +#27834 = VERTEX_POINT('',#27835); +#27835 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.804951586426)); +#27836 = LINE('',#27837,#27838); +#27837 = CARTESIAN_POINT('',(7.499974498734,-0.918795310147, + 0.800127109759)); +#27838 = VECTOR('',#27839,1.); +#27839 = DIRECTION('',(0.,-0.990328603988,-0.138741688482)); +#27840 = ORIENTED_EDGE('',*,*,#27796,.F.); +#27841 = ORIENTED_EDGE('',*,*,#27842,.F.); +#27842 = EDGE_CURVE('',#27843,#27797,#27845,.T.); +#27843 = VERTEX_POINT('',#27844); +#27844 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.804951586426)); +#27845 = LINE('',#27846,#27847); +#27846 = CARTESIAN_POINT('',(7.50097449872,-0.918795310147, + 0.800127109759)); +#27847 = VECTOR('',#27848,1.); +#27848 = DIRECTION('',(0.,-0.990328603988,-0.138741688482)); +#27849 = ORIENTED_EDGE('',*,*,#27850,.T.); +#27850 = EDGE_CURVE('',#27843,#27834,#27851,.T.); +#27851 = LINE('',#27852,#27853); +#27852 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.804951586426)); +#27853 = VECTOR('',#27854,1.); +#27854 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27855 = PLANE('',#27856); +#27856 = AXIS2_PLACEMENT_3D('',#27857,#27858,#27859); +#27857 = CARTESIAN_POINT('',(7.50097449872,-0.918795310147, + 0.800127109759)); +#27858 = DIRECTION('',(-9.688280325115E-16,0.138741688482, + -0.990328603988)); +#27859 = DIRECTION('',(-1.,-2.465190328816E-32,9.782894572669E-16)); +#27860 = ADVANCED_FACE('',(#27861),#27888,.F.); +#27861 = FACE_BOUND('',#27862,.F.); +#27862 = EDGE_LOOP('',(#27863,#27873,#27880,#27881)); +#27863 = ORIENTED_EDGE('',*,*,#27864,.F.); +#27864 = EDGE_CURVE('',#27865,#27867,#27869,.T.); +#27865 = VERTEX_POINT('',#27866); +#27866 = CARTESIAN_POINT('',(7.50097449872,-0.907898647331, + 0.833399362632)); +#27867 = VERTEX_POINT('',#27868); +#27868 = CARTESIAN_POINT('',(7.499974498734,-0.907898647331, + 0.833399362632)); +#27869 = LINE('',#27870,#27871); +#27870 = CARTESIAN_POINT('',(7.50097449872,-0.907898647331, + 0.833399362632)); +#27871 = VECTOR('',#27872,1.); +#27872 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27873 = ORIENTED_EDGE('',*,*,#27874,.T.); +#27874 = EDGE_CURVE('',#27865,#27843,#27875,.T.); +#27875 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27876,#27877,#27878,#27879), + .UNSPECIFIED.,.F.,.F.,(4,4),(11.,12.),.PIECEWISE_BEZIER_KNOTS.); +#27876 = CARTESIAN_POINT('',(7.50097449872,-0.907898647331, + 0.833399362632)); +#27877 = CARTESIAN_POINT('',(7.50097449872,-0.892219098165, + 0.833399362632)); +#27878 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.823916770563)); +#27879 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.804951586426)); +#27880 = ORIENTED_EDGE('',*,*,#27850,.T.); +#27881 = ORIENTED_EDGE('',*,*,#27882,.F.); +#27882 = EDGE_CURVE('',#27867,#27834,#27883,.T.); +#27883 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27884,#27885,#27886,#27887), + .UNSPECIFIED.,.F.,.F.,(4,4),(11.,12.),.PIECEWISE_BEZIER_KNOTS.); +#27884 = CARTESIAN_POINT('',(7.499974498734,-0.907898647331, + 0.833399362632)); +#27885 = CARTESIAN_POINT('',(7.499974498734,-0.892219098165, + 0.833399362632)); +#27886 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.823916770563)); +#27887 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.804951586426)); +#27888 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27889,#27890) + ,(#27891,#27892) + ,(#27893,#27894) + ,(#27895,#27896 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(11.,12.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27889 = CARTESIAN_POINT('',(7.50097449872,-0.907898647331, + 0.833399362632)); +#27890 = CARTESIAN_POINT('',(7.499974498734,-0.907898647331, + 0.833399362632)); +#27891 = CARTESIAN_POINT('',(7.50097449872,-0.892219098165, + 0.833399362632)); +#27892 = CARTESIAN_POINT('',(7.499974498734,-0.892219098165, + 0.833399362632)); +#27893 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.823916770563)); +#27894 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.823916770563)); +#27895 = CARTESIAN_POINT('',(7.50097449872,-0.884358528423, + 0.804951586426)); +#27896 = CARTESIAN_POINT('',(7.499974498734,-0.884358528423, + 0.804951586426)); +#27897 = ADVANCED_FACE('',(#27898),#27925,.F.); +#27898 = FACE_BOUND('',#27899,.F.); +#27899 = EDGE_LOOP('',(#27900,#27910,#27917,#27918)); +#27900 = ORIENTED_EDGE('',*,*,#27901,.F.); +#27901 = EDGE_CURVE('',#27902,#27904,#27906,.T.); +#27902 = VERTEX_POINT('',#27903); +#27903 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.819341835792)); +#27904 = VERTEX_POINT('',#27905); +#27905 = CARTESIAN_POINT('',(7.499974498734,-0.945995376871, + 0.819341835792)); +#27906 = LINE('',#27907,#27908); +#27907 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.819341835792)); +#27908 = VECTOR('',#27909,1.); +#27909 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27910 = ORIENTED_EDGE('',*,*,#27911,.T.); +#27911 = EDGE_CURVE('',#27902,#27865,#27912,.T.); +#27912 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27913,#27914,#27915,#27916), + .UNSPECIFIED.,.F.,.F.,(4,4),(12.,13.),.PIECEWISE_BEZIER_KNOTS.); +#27913 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.819341835792)); +#27914 = CARTESIAN_POINT('',(7.50097449872,-0.93451644963,0.828658066597 + )); +#27915 = CARTESIAN_POINT('',(7.50097449872,-0.921831403222, + 0.833399362632)); +#27916 = CARTESIAN_POINT('',(7.50097449872,-0.907898647331, + 0.833399362632)); +#27917 = ORIENTED_EDGE('',*,*,#27864,.T.); +#27918 = ORIENTED_EDGE('',*,*,#27919,.F.); +#27919 = EDGE_CURVE('',#27904,#27867,#27920,.T.); +#27920 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27921,#27922,#27923,#27924), + .UNSPECIFIED.,.F.,.F.,(4,4),(12.,13.),.PIECEWISE_BEZIER_KNOTS.); +#27921 = CARTESIAN_POINT('',(7.499974498734,-0.945995376871, + 0.819341835792)); +#27922 = CARTESIAN_POINT('',(7.499974498734,-0.93451644963, + 0.828658066597)); +#27923 = CARTESIAN_POINT('',(7.499974498734,-0.921831403222, + 0.833399362632)); +#27924 = CARTESIAN_POINT('',(7.499974498734,-0.907898647331, + 0.833399362632)); +#27925 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27926,#27927) + ,(#27928,#27929) + ,(#27930,#27931) + ,(#27932,#27933 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(12.,13.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27926 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.819341835792)); +#27927 = CARTESIAN_POINT('',(7.499974498734,-0.945995376871, + 0.819341835792)); +#27928 = CARTESIAN_POINT('',(7.50097449872,-0.93451644963,0.828658066597 + )); +#27929 = CARTESIAN_POINT('',(7.499974498734,-0.93451644963, + 0.828658066597)); +#27930 = CARTESIAN_POINT('',(7.50097449872,-0.921831403222, + 0.833399362632)); +#27931 = CARTESIAN_POINT('',(7.499974498734,-0.921831403222, + 0.833399362632)); +#27932 = CARTESIAN_POINT('',(7.50097449872,-0.907898647331, + 0.833399362632)); +#27933 = CARTESIAN_POINT('',(7.499974498734,-0.907898647331, + 0.833399362632)); +#27934 = ADVANCED_FACE('',(#27935),#27960,.F.); +#27935 = FACE_BOUND('',#27936,.T.); +#27936 = EDGE_LOOP('',(#27937,#27945,#27946,#27954)); +#27937 = ORIENTED_EDGE('',*,*,#27938,.T.); +#27938 = EDGE_CURVE('',#27939,#27904,#27941,.T.); +#27939 = VERTEX_POINT('',#27940); +#27940 = CARTESIAN_POINT('',(7.499974498734,-0.945995376871, + 0.839138826253)); +#27941 = LINE('',#27942,#27943); +#27942 = CARTESIAN_POINT('',(7.499974498734,-0.945995376871, + 0.819341835792)); +#27943 = VECTOR('',#27944,1.); +#27944 = DIRECTION('',(0.,0.,-1.)); +#27945 = ORIENTED_EDGE('',*,*,#27901,.F.); +#27946 = ORIENTED_EDGE('',*,*,#27947,.F.); +#27947 = EDGE_CURVE('',#27948,#27902,#27950,.T.); +#27948 = VERTEX_POINT('',#27949); +#27949 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.839138826253)); +#27950 = LINE('',#27951,#27952); +#27951 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.819341835792)); +#27952 = VECTOR('',#27953,1.); +#27953 = DIRECTION('',(0.,0.,-1.)); +#27954 = ORIENTED_EDGE('',*,*,#27955,.T.); +#27955 = EDGE_CURVE('',#27948,#27939,#27956,.T.); +#27956 = LINE('',#27957,#27958); +#27957 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.839138826253)); +#27958 = VECTOR('',#27959,1.); +#27959 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#27960 = PLANE('',#27961); +#27961 = AXIS2_PLACEMENT_3D('',#27962,#27963,#27964); +#27962 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.819341835792)); +#27963 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#27964 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#27965 = ADVANCED_FACE('',(#27966),#27984,.F.); +#27966 = FACE_BOUND('',#27967,.F.); +#27967 = EDGE_LOOP('',(#27968,#27969,#27976,#27977)); +#27968 = ORIENTED_EDGE('',*,*,#27534,.F.); +#27969 = ORIENTED_EDGE('',*,*,#27970,.T.); +#27970 = EDGE_CURVE('',#27526,#27948,#27971,.T.); +#27971 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27972,#27973,#27974,#27975), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#27972 = CARTESIAN_POINT('',(7.50097449872,-0.905985492791, + 0.849952308436)); +#27973 = CARTESIAN_POINT('',(7.50097449872,-0.921124367848, + 0.849952308436)); +#27974 = CARTESIAN_POINT('',(7.50097449872,-0.934474859314, + 0.846375541252)); +#27975 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.839138826253)); +#27976 = ORIENTED_EDGE('',*,*,#27955,.T.); +#27977 = ORIENTED_EDGE('',*,*,#27978,.F.); +#27978 = EDGE_CURVE('',#27535,#27939,#27979,.T.); +#27979 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27980,#27981,#27982,#27983), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#27980 = CARTESIAN_POINT('',(7.499974498734,-0.905985492791, + 0.849952308436)); +#27981 = CARTESIAN_POINT('',(7.499974498734,-0.921124367848, + 0.849952308436)); +#27982 = CARTESIAN_POINT('',(7.499974498734,-0.934474859314, + 0.846375541252)); +#27983 = CARTESIAN_POINT('',(7.499974498734,-0.945995376871, + 0.839138826253)); +#27984 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#27985,#27986) + ,(#27987,#27988) + ,(#27989,#27990) + ,(#27991,#27992 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(0.,1.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#27985 = CARTESIAN_POINT('',(7.50097449872,-0.905985492791, + 0.849952308436)); +#27986 = CARTESIAN_POINT('',(7.499974498734,-0.905985492791, + 0.849952308436)); +#27987 = CARTESIAN_POINT('',(7.50097449872,-0.921124367848, + 0.849952308436)); +#27988 = CARTESIAN_POINT('',(7.499974498734,-0.921124367848, + 0.849952308436)); +#27989 = CARTESIAN_POINT('',(7.50097449872,-0.934474859314, + 0.846375541252)); +#27990 = CARTESIAN_POINT('',(7.499974498734,-0.934474859314, + 0.846375541252)); +#27991 = CARTESIAN_POINT('',(7.50097449872,-0.945995376871, + 0.839138826253)); +#27992 = CARTESIAN_POINT('',(7.499974498734,-0.945995376871, + 0.839138826253)); +#27993 = ADVANCED_FACE('',(#27994,#28004),#28020,.F.); +#27994 = FACE_BOUND('',#27995,.T.); +#27995 = EDGE_LOOP('',(#27996,#27997,#27998,#27999,#28000,#28001,#28002, + #28003)); +#27996 = ORIENTED_EDGE('',*,*,#27487,.T.); +#27997 = ORIENTED_EDGE('',*,*,#27450,.T.); +#27998 = ORIENTED_EDGE('',*,*,#27413,.T.); +#27999 = ORIENTED_EDGE('',*,*,#27376,.T.); +#28000 = ORIENTED_EDGE('',*,*,#27339,.T.); +#28001 = ORIENTED_EDGE('',*,*,#27302,.T.); +#28002 = ORIENTED_EDGE('',*,*,#27271,.T.); +#28003 = ORIENTED_EDGE('',*,*,#27231,.T.); +#28004 = FACE_BOUND('',#28005,.T.); +#28005 = EDGE_LOOP('',(#28006,#28007,#28008,#28009,#28010,#28011,#28012, + #28013,#28014,#28015,#28016,#28017,#28018,#28019)); +#28006 = ORIENTED_EDGE('',*,*,#27978,.F.); +#28007 = ORIENTED_EDGE('',*,*,#27542,.F.); +#28008 = ORIENTED_EDGE('',*,*,#27561,.F.); +#28009 = ORIENTED_EDGE('',*,*,#27592,.F.); +#28010 = ORIENTED_EDGE('',*,*,#27623,.F.); +#28011 = ORIENTED_EDGE('',*,*,#27654,.F.); +#28012 = ORIENTED_EDGE('',*,*,#27703,.F.); +#28013 = ORIENTED_EDGE('',*,*,#27740,.F.); +#28014 = ORIENTED_EDGE('',*,*,#27777,.F.); +#28015 = ORIENTED_EDGE('',*,*,#27814,.F.); +#28016 = ORIENTED_EDGE('',*,*,#27833,.F.); +#28017 = ORIENTED_EDGE('',*,*,#27882,.F.); +#28018 = ORIENTED_EDGE('',*,*,#27919,.F.); +#28019 = ORIENTED_EDGE('',*,*,#27938,.F.); +#28020 = PLANE('',#28021); +#28021 = AXIS2_PLACEMENT_3D('',#28022,#28023,#28024); +#28022 = CARTESIAN_POINT('',(7.499974498734,-0.927347318893, + 0.847259335469)); +#28023 = DIRECTION('',(1.,0.,0.)); +#28024 = DIRECTION('',(-0.,1.,0.)); +#28025 = ADVANCED_FACE('',(#28026,#28036),#28052,.T.); +#28026 = FACE_BOUND('',#28027,.T.); +#28027 = EDGE_LOOP('',(#28028,#28029,#28030,#28031,#28032,#28033,#28034, + #28035)); +#28028 = ORIENTED_EDGE('',*,*,#27467,.F.); +#28029 = ORIENTED_EDGE('',*,*,#27495,.F.); +#28030 = ORIENTED_EDGE('',*,*,#27249,.F.); +#28031 = ORIENTED_EDGE('',*,*,#27287,.F.); +#28032 = ORIENTED_EDGE('',*,*,#27319,.F.); +#28033 = ORIENTED_EDGE('',*,*,#27356,.F.); +#28034 = ORIENTED_EDGE('',*,*,#27393,.F.); +#28035 = ORIENTED_EDGE('',*,*,#27430,.F.); +#28036 = FACE_BOUND('',#28037,.T.); +#28037 = EDGE_LOOP('',(#28038,#28039,#28040,#28041,#28042,#28043,#28044, + #28045,#28046,#28047,#28048,#28049,#28050,#28051)); +#28038 = ORIENTED_EDGE('',*,*,#27970,.T.); +#28039 = ORIENTED_EDGE('',*,*,#27947,.T.); +#28040 = ORIENTED_EDGE('',*,*,#27911,.T.); +#28041 = ORIENTED_EDGE('',*,*,#27874,.T.); +#28042 = ORIENTED_EDGE('',*,*,#27842,.T.); +#28043 = ORIENTED_EDGE('',*,*,#27806,.T.); +#28044 = ORIENTED_EDGE('',*,*,#27769,.T.); +#28045 = ORIENTED_EDGE('',*,*,#27732,.T.); +#28046 = ORIENTED_EDGE('',*,*,#27695,.T.); +#28047 = ORIENTED_EDGE('',*,*,#27663,.T.); +#28048 = ORIENTED_EDGE('',*,*,#27632,.T.); +#28049 = ORIENTED_EDGE('',*,*,#27601,.T.); +#28050 = ORIENTED_EDGE('',*,*,#27570,.T.); +#28051 = ORIENTED_EDGE('',*,*,#27525,.T.); +#28052 = PLANE('',#28053); +#28053 = AXIS2_PLACEMENT_3D('',#28054,#28055,#28056); +#28054 = CARTESIAN_POINT('',(7.50097449872,-0.927347318893, + 0.847259335469)); +#28055 = DIRECTION('',(1.,0.,0.)); +#28056 = DIRECTION('',(-0.,1.,0.)); +#28057 = MANIFOLD_SOLID_BREP('',#28058); +#28058 = CLOSED_SHELL('',(#28059,#28254,#28449,#28475,#28496,#28517, + #28538,#28559,#28580,#28601,#28622,#28639,#28660,#28681,#28702, + #28723,#28744,#28765,#28786,#28807,#28828,#28849,#28866)); +#28059 = ADVANCED_FACE('',(#28060),#28249,.T.); +#28060 = FACE_BOUND('',#28061,.T.); +#28061 = EDGE_LOOP('',(#28062,#28073,#28082,#28091,#28100,#28109,#28118, + #28127,#28136,#28145,#28153,#28162,#28171,#28180,#28189,#28198, + #28207,#28216,#28225,#28234,#28243)); +#28062 = ORIENTED_EDGE('',*,*,#28063,.F.); +#28063 = EDGE_CURVE('',#28064,#28066,#28068,.T.); +#28064 = VERTEX_POINT('',#28065); +#28065 = CARTESIAN_POINT('',(7.499974498734,-0.802841508884, + 0.744978350621)); +#28066 = VERTEX_POINT('',#28067); +#28067 = CARTESIAN_POINT('',(7.499974498734,-0.836363303654, + 0.756207735965)); +#28068 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28069,#28070,#28071,#28072), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#28069 = CARTESIAN_POINT('',(7.499974498734,-0.802841508884, + 0.744978350621)); +#28070 = CARTESIAN_POINT('',(7.499974498734,-0.814819519919, + 0.744978350621)); +#28071 = CARTESIAN_POINT('',(7.499974498734,-0.825965724631, + 0.74872147907)); +#28072 = CARTESIAN_POINT('',(7.499974498734,-0.836363303654, + 0.756207735965)); +#28073 = ORIENTED_EDGE('',*,*,#28074,.F.); +#28074 = EDGE_CURVE('',#28075,#28064,#28077,.T.); +#28075 = VERTEX_POINT('',#28076); +#28076 = CARTESIAN_POINT('',(7.499974498734,-0.778802306183, + 0.760699490104)); +#28077 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28078,#28079,#28080,#28081), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#28078 = CARTESIAN_POINT('',(7.499974498734,-0.778802306183, + 0.760699490104)); +#28079 = CARTESIAN_POINT('',(7.499974498734,-0.778802306183, + 0.750218730448)); +#28080 = CARTESIAN_POINT('',(7.499974498734,-0.786829237189, + 0.744978350621)); +#28081 = CARTESIAN_POINT('',(7.499974498734,-0.802841508884, + 0.744978350621)); +#28082 = ORIENTED_EDGE('',*,*,#28083,.F.); +#28083 = EDGE_CURVE('',#28084,#28075,#28086,.T.); +#28084 = VERTEX_POINT('',#28085); +#28085 = CARTESIAN_POINT('',(7.499974498734,-0.784042686011, + 0.771762514184)); +#28086 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28087,#28088,#28089,#28090), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#28087 = CARTESIAN_POINT('',(7.499974498734,-0.784042686011, + 0.771762514184)); +#28088 = CARTESIAN_POINT('',(7.499974498734,-0.780549099459, + 0.768851192057)); +#28089 = CARTESIAN_POINT('',(7.499974498734,-0.778802306183, + 0.765191244242)); +#28090 = CARTESIAN_POINT('',(7.499974498734,-0.778802306183, + 0.760699490104)); +#28091 = ORIENTED_EDGE('',*,*,#28092,.F.); +#28092 = EDGE_CURVE('',#28093,#28084,#28095,.T.); +#28093 = VERTEX_POINT('',#28094); +#28094 = CARTESIAN_POINT('',(7.499974498734,-0.805378518165, + 0.782160093207)); +#28095 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28096,#28097,#28098,#28099), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#28096 = CARTESIAN_POINT('',(7.499974498734,-0.805378518165, + 0.782160093207)); +#28097 = CARTESIAN_POINT('',(7.499974498734,-0.794648216614, + 0.778167422862)); +#28098 = CARTESIAN_POINT('',(7.499974498734,-0.787536272563, + 0.77467383631)); +#28099 = CARTESIAN_POINT('',(7.499974498734,-0.784042686011, + 0.771762514184)); +#28100 = ORIENTED_EDGE('',*,*,#28101,.F.); +#28101 = EDGE_CURVE('',#28102,#28093,#28104,.T.); +#28102 = VERTEX_POINT('',#28103); +#28103 = CARTESIAN_POINT('',(7.499974498734,-0.830457478769, + 0.797548510161)); +#28104 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28105,#28106,#28107,#28108), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#28105 = CARTESIAN_POINT('',(7.499974498734,-0.830457478769, + 0.797548510161)); +#28106 = CARTESIAN_POINT('',(7.499974498734,-0.826631169688, + 0.792474491598)); +#28107 = CARTESIAN_POINT('',(7.499974498734,-0.818229925838, + 0.787317292402)); +#28108 = CARTESIAN_POINT('',(7.499974498734,-0.805378518165, + 0.782160093207)); +#28109 = ORIENTED_EDGE('',*,*,#28110,.F.); +#28110 = EDGE_CURVE('',#28111,#28102,#28113,.T.); +#28111 = VERTEX_POINT('',#28112); +#28112 = CARTESIAN_POINT('',(7.499974498734,-0.836238532706, + 0.815931429873)); +#28113 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28114,#28115,#28116,#28117), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#28114 = CARTESIAN_POINT('',(7.499974498734,-0.836238532706, + 0.815931429873)); +#28115 = CARTESIAN_POINT('',(7.499974498734,-0.836238532706, + 0.808777895505)); +#28116 = CARTESIAN_POINT('',(7.499974498734,-0.834325378165, + 0.802622528724)); +#28117 = CARTESIAN_POINT('',(7.499974498734,-0.830457478769, + 0.797548510161)); +#28118 = ORIENTED_EDGE('',*,*,#28119,.F.); +#28119 = EDGE_CURVE('',#28120,#28111,#28122,.T.); +#28120 = VERTEX_POINT('',#28121); +#28121 = CARTESIAN_POINT('',(7.499974498734,-0.823179173453, + 0.840719258263)); +#28122 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28123,#28124,#28125,#28126), + .UNSPECIFIED.,.F.,.F.,(4,4),(6.,7.),.PIECEWISE_BEZIER_KNOTS.); +#28123 = CARTESIAN_POINT('',(7.499974498734,-0.823179173453, + 0.840719258263)); +#28124 = CARTESIAN_POINT('',(7.499974498734,-0.831871549516, + 0.83448071085)); +#28125 = CARTESIAN_POINT('',(7.499974498734,-0.836238532706, + 0.826245828263)); +#28126 = CARTESIAN_POINT('',(7.499974498734,-0.836238532706, + 0.815931429873)); +#28127 = ORIENTED_EDGE('',*,*,#28128,.F.); +#28128 = EDGE_CURVE('',#28129,#28120,#28131,.T.); +#28129 = VERTEX_POINT('',#28130); +#28130 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.849952308436)); +#28131 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28132,#28133,#28134,#28135), + .UNSPECIFIED.,.F.,.F.,(4,4),(7.,8.),.PIECEWISE_BEZIER_KNOTS.); +#28132 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.849952308436)); +#28133 = CARTESIAN_POINT('',(7.499974498734,-0.803714905522, + 0.849952308436)); +#28134 = CARTESIAN_POINT('',(7.499974498734,-0.814445207074, + 0.846874625046)); +#28135 = CARTESIAN_POINT('',(7.499974498734,-0.823179173453, + 0.840719258263)); +#28136 = ORIENTED_EDGE('',*,*,#28137,.F.); +#28137 = EDGE_CURVE('',#28138,#28129,#28140,.T.); +#28138 = VERTEX_POINT('',#28139); +#28139 = CARTESIAN_POINT('',(7.499974498734,-0.763455479545, + 0.84479510924)); +#28140 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28141,#28142,#28143,#28144), + .UNSPECIFIED.,.F.,.F.,(4,4),(8.,9.),.PIECEWISE_BEZIER_KNOTS.); +#28141 = CARTESIAN_POINT('',(7.499974498734,-0.763455479545, + 0.84479510924)); +#28142 = CARTESIAN_POINT('',(7.499974498734,-0.771939904028, + 0.848288695792)); +#28143 = CARTESIAN_POINT('',(7.499974498734,-0.781089773569, + 0.849952308436)); +#28144 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.849952308436)); +#28145 = ORIENTED_EDGE('',*,*,#28146,.F.); +#28146 = EDGE_CURVE('',#28147,#28138,#28149,.T.); +#28147 = VERTEX_POINT('',#28148); +#28148 = CARTESIAN_POINT('',(7.499974498734,-0.763455479545, + 0.824998118781)); +#28149 = LINE('',#28150,#28151); +#28150 = CARTESIAN_POINT('',(7.499974498734,-0.763455479545, + 0.84479510924)); +#28151 = VECTOR('',#28152,1.); +#28152 = DIRECTION('',(0.,0.,1.)); +#28153 = ORIENTED_EDGE('',*,*,#28154,.F.); +#28154 = EDGE_CURVE('',#28155,#28147,#28157,.T.); +#28155 = VERTEX_POINT('',#28156); +#28156 = CARTESIAN_POINT('',(7.499974498734,-0.792984603971, + 0.833399362632)); +#28157 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28158,#28159,#28160,#28161), + .UNSPECIFIED.,.F.,.F.,(4,4),(10.,11.),.PIECEWISE_BEZIER_KNOTS.); +#28158 = CARTESIAN_POINT('',(7.499974498734,-0.792984603971, + 0.833399362632)); +#28159 = CARTESIAN_POINT('',(7.499974498734,-0.781963170206, + 0.833399362632)); +#28160 = CARTESIAN_POINT('',(7.499974498734,-0.772147855609, + 0.830571221137)); +#28161 = CARTESIAN_POINT('',(7.499974498734,-0.763455479545, + 0.824998118781)); +#28162 = ORIENTED_EDGE('',*,*,#28163,.F.); +#28163 = EDGE_CURVE('',#28164,#28155,#28166,.T.); +#28164 = VERTEX_POINT('',#28165); +#28165 = CARTESIAN_POINT('',(7.499974498734,-0.809038465982, + 0.829073969758)); +#28166 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28167,#28168,#28169,#28170), + .UNSPECIFIED.,.F.,.F.,(4,4),(11.,12.),.PIECEWISE_BEZIER_KNOTS.); +#28167 = CARTESIAN_POINT('',(7.499974498734,-0.809038465982, + 0.829073969758)); +#28168 = CARTESIAN_POINT('',(7.499974498734,-0.804921024689, + 0.831985291884)); +#28169 = CARTESIAN_POINT('',(7.499974498734,-0.799555873913, + 0.833399362632)); +#28170 = CARTESIAN_POINT('',(7.499974498734,-0.792984603971, + 0.833399362632)); +#28171 = ORIENTED_EDGE('',*,*,#28172,.F.); +#28172 = EDGE_CURVE('',#28173,#28164,#28175,.T.); +#28173 = VERTEX_POINT('',#28174); +#28174 = CARTESIAN_POINT('',(7.499974498734,-0.81523542308, + 0.817761403782)); +#28175 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28176,#28177,#28178,#28179), + .UNSPECIFIED.,.F.,.F.,(4,4),(12.,13.),.PIECEWISE_BEZIER_KNOTS.); +#28176 = CARTESIAN_POINT('',(7.499974498734,-0.81523542308, + 0.817761403782)); +#28177 = CARTESIAN_POINT('',(7.499974498734,-0.81523542308, + 0.822419519183)); +#28178 = CARTESIAN_POINT('',(7.499974498734,-0.813155907275, + 0.826245828263)); +#28179 = CARTESIAN_POINT('',(7.499974498734,-0.809038465982, + 0.829073969758)); +#28180 = ORIENTED_EDGE('',*,*,#28181,.F.); +#28181 = EDGE_CURVE('',#28182,#28173,#28184,.T.); +#28182 = VERTEX_POINT('',#28183); +#28183 = CARTESIAN_POINT('',(7.499974498734,-0.810785259258, + 0.806947921598)); +#28184 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28185,#28186,#28187,#28188), + .UNSPECIFIED.,.F.,.F.,(4,4),(13.,14.),.PIECEWISE_BEZIER_KNOTS.); +#28185 = CARTESIAN_POINT('',(7.499974498734,-0.810785259258, + 0.806947921598)); +#28186 = CARTESIAN_POINT('',(7.499974498734,-0.8137381717,0.809526521195 + )); +#28187 = CARTESIAN_POINT('',(7.499974498734,-0.81523542308, + 0.813103288379)); +#28188 = CARTESIAN_POINT('',(7.499974498734,-0.81523542308, + 0.817761403782)); +#28189 = ORIENTED_EDGE('',*,*,#28190,.F.); +#28190 = EDGE_CURVE('',#28191,#28182,#28193,.T.); +#28191 = VERTEX_POINT('',#28192); +#28192 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.796966245735)); +#28193 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28194,#28195,#28196,#28197), + .UNSPECIFIED.,.F.,.F.,(4,4),(14.,15.),.PIECEWISE_BEZIER_KNOTS.); +#28194 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.796966245735)); +#28195 = CARTESIAN_POINT('',(7.499974498734,-0.801219486557, + 0.80095891608)); +#28196 = CARTESIAN_POINT('',(7.499974498734,-0.807790756499, + 0.804286141368)); +#28197 = CARTESIAN_POINT('',(7.499974498734,-0.810785259258, + 0.806947921598)); +#28198 = ORIENTED_EDGE('',*,*,#28199,.F.); +#28199 = EDGE_CURVE('',#28200,#28191,#28202,.T.); +#28200 = VERTEX_POINT('',#28201); +#28201 = CARTESIAN_POINT('',(7.499974498734,-0.764703189028, + 0.781910551311)); +#28202 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28203,#28204,#28205,#28206), + .UNSPECIFIED.,.F.,.F.,(4,4),(15.,16.),.PIECEWISE_BEZIER_KNOTS.); +#28203 = CARTESIAN_POINT('',(7.499974498734,-0.764703189028, + 0.781910551311)); +#28204 = CARTESIAN_POINT('',(7.499974498734,-0.769278123798, + 0.787067750506)); +#28205 = CARTESIAN_POINT('',(7.499974498734,-0.778012090177, + 0.792141769068)); +#28206 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.796966245735)); +#28207 = ORIENTED_EDGE('',*,*,#28208,.F.); +#28208 = EDGE_CURVE('',#28209,#28200,#28211,.T.); +#28209 = VERTEX_POINT('',#28210); +#28210 = CARTESIAN_POINT('',(7.499974498734,-0.757882377189, + 0.762695825276)); +#28211 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28212,#28213,#28214,#28215), + .UNSPECIFIED.,.F.,.F.,(4,4),(16.,17.),.PIECEWISE_BEZIER_KNOTS.); +#28212 = CARTESIAN_POINT('',(7.499974498734,-0.757882377189, + 0.762695825276)); +#28213 = CARTESIAN_POINT('',(7.499974498734,-0.757882377189, + 0.770348443437)); +#28214 = CARTESIAN_POINT('',(7.499974498734,-0.760169844575, + 0.776753352116)); +#28215 = CARTESIAN_POINT('',(7.499974498734,-0.764703189028, + 0.781910551311)); +#28216 = ORIENTED_EDGE('',*,*,#28217,.F.); +#28217 = EDGE_CURVE('',#28218,#28209,#28220,.T.); +#28218 = VERTEX_POINT('',#28219); +#28219 = CARTESIAN_POINT('',(7.499974498734,-0.770983326758, + 0.737575274357)); +#28220 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28221,#28222,#28223,#28224), + .UNSPECIFIED.,.F.,.F.,(4,4),(17.,18.),.PIECEWISE_BEZIER_KNOTS.); +#28221 = CARTESIAN_POINT('',(7.499974498734,-0.770983326758, + 0.737575274357)); +#28222 = CARTESIAN_POINT('',(7.499974498734,-0.762249360379, + 0.743647460507)); +#28223 = CARTESIAN_POINT('',(7.499974498734,-0.757882377189, + 0.752048704357)); +#28224 = CARTESIAN_POINT('',(7.499974498734,-0.757882377189, + 0.762695825276)); +#28225 = ORIENTED_EDGE('',*,*,#28226,.F.); +#28226 = EDGE_CURVE('',#28227,#28218,#28229,.T.); +#28227 = VERTEX_POINT('',#28228); +#28228 = CARTESIAN_POINT('',(7.499974498734,-0.804837844056, + 0.728342224185)); +#28229 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28230,#28231,#28232,#28233), + .UNSPECIFIED.,.F.,.F.,(4,4),(18.,19.),.PIECEWISE_BEZIER_KNOTS.); +#28230 = CARTESIAN_POINT('',(7.499974498734,-0.804837844056, + 0.728342224185)); +#28231 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.728342224185)); +#28232 = CARTESIAN_POINT('',(7.499974498734,-0.779675702821, + 0.731419907575)); +#28233 = CARTESIAN_POINT('',(7.499974498734,-0.770983326758, + 0.737575274357)); +#28234 = ORIENTED_EDGE('',*,*,#28235,.F.); +#28235 = EDGE_CURVE('',#28236,#28227,#28238,.T.); +#28236 = VERTEX_POINT('',#28237); +#28237 = CARTESIAN_POINT('',(7.499974498734,-0.836363303654, + 0.735163036024)); +#28238 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28239,#28240,#28241,#28242), + .UNSPECIFIED.,.F.,.F.,(4,4),(19.,20.),.PIECEWISE_BEZIER_KNOTS.); +#28239 = CARTESIAN_POINT('',(7.499974498734,-0.836363303654, + 0.735163036024)); +#28240 = CARTESIAN_POINT('',(7.499974498734,-0.827379795378, + 0.730671281886)); +#28241 = CARTESIAN_POINT('',(7.499974498734,-0.816899035723, + 0.728342224185)); +#28242 = CARTESIAN_POINT('',(7.499974498734,-0.804837844056, + 0.728342224185)); +#28243 = ORIENTED_EDGE('',*,*,#28244,.F.); +#28244 = EDGE_CURVE('',#28066,#28236,#28245,.T.); +#28245 = LINE('',#28246,#28247); +#28246 = CARTESIAN_POINT('',(7.499974498734,-0.836363303654, + 0.735163036024)); +#28247 = VECTOR('',#28248,1.); +#28248 = DIRECTION('',(0.,0.,-1.)); +#28249 = PLANE('',#28250); +#28250 = AXIS2_PLACEMENT_3D('',#28251,#28252,#28253); +#28251 = CARTESIAN_POINT('',(7.499974498734,-0.820195068273, + 0.747785696957)); +#28252 = DIRECTION('',(-1.,0.,0.)); +#28253 = DIRECTION('',(0.,0.,1.)); +#28254 = ADVANCED_FACE('',(#28255),#28444,.F.); +#28255 = FACE_BOUND('',#28256,.T.); +#28256 = EDGE_LOOP('',(#28257,#28268,#28276,#28285,#28294,#28303,#28312, + #28321,#28330,#28339,#28348,#28357,#28366,#28374,#28383,#28392, + #28401,#28410,#28419,#28428,#28437)); +#28257 = ORIENTED_EDGE('',*,*,#28258,.T.); +#28258 = EDGE_CURVE('',#28259,#28261,#28263,.T.); +#28259 = VERTEX_POINT('',#28260); +#28260 = CARTESIAN_POINT('',(7.50097449872,-0.802841508884, + 0.744978350621)); +#28261 = VERTEX_POINT('',#28262); +#28262 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.756207735965)); +#28263 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28264,#28265,#28266,#28267), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#28264 = CARTESIAN_POINT('',(7.50097449872,-0.802841508884, + 0.744978350621)); +#28265 = CARTESIAN_POINT('',(7.50097449872,-0.814819519919, + 0.744978350621)); +#28266 = CARTESIAN_POINT('',(7.50097449872,-0.825965724631,0.74872147907 + )); +#28267 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.756207735965)); +#28268 = ORIENTED_EDGE('',*,*,#28269,.T.); +#28269 = EDGE_CURVE('',#28261,#28270,#28272,.T.); +#28270 = VERTEX_POINT('',#28271); +#28271 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.735163036024)); +#28272 = LINE('',#28273,#28274); +#28273 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.735163036024)); +#28274 = VECTOR('',#28275,1.); +#28275 = DIRECTION('',(0.,0.,-1.)); +#28276 = ORIENTED_EDGE('',*,*,#28277,.T.); +#28277 = EDGE_CURVE('',#28270,#28278,#28280,.T.); +#28278 = VERTEX_POINT('',#28279); +#28279 = CARTESIAN_POINT('',(7.50097449872,-0.804837844056, + 0.728342224185)); +#28280 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28281,#28282,#28283,#28284), + .UNSPECIFIED.,.F.,.F.,(4,4),(19.,20.),.PIECEWISE_BEZIER_KNOTS.); +#28281 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.735163036024)); +#28282 = CARTESIAN_POINT('',(7.50097449872,-0.827379795378, + 0.730671281886)); +#28283 = CARTESIAN_POINT('',(7.50097449872,-0.816899035723, + 0.728342224185)); +#28284 = CARTESIAN_POINT('',(7.50097449872,-0.804837844056, + 0.728342224185)); +#28285 = ORIENTED_EDGE('',*,*,#28286,.T.); +#28286 = EDGE_CURVE('',#28278,#28287,#28289,.T.); +#28287 = VERTEX_POINT('',#28288); +#28288 = CARTESIAN_POINT('',(7.50097449872,-0.770983326758, + 0.737575274357)); +#28289 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28290,#28291,#28292,#28293), + .UNSPECIFIED.,.F.,.F.,(4,4),(18.,19.),.PIECEWISE_BEZIER_KNOTS.); +#28290 = CARTESIAN_POINT('',(7.50097449872,-0.804837844056, + 0.728342224185)); +#28291 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.728342224185)); +#28292 = CARTESIAN_POINT('',(7.50097449872,-0.779675702821, + 0.731419907575)); +#28293 = CARTESIAN_POINT('',(7.50097449872,-0.770983326758, + 0.737575274357)); +#28294 = ORIENTED_EDGE('',*,*,#28295,.T.); +#28295 = EDGE_CURVE('',#28287,#28296,#28298,.T.); +#28296 = VERTEX_POINT('',#28297); +#28297 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.762695825276)); +#28298 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28299,#28300,#28301,#28302), + .UNSPECIFIED.,.F.,.F.,(4,4),(17.,18.),.PIECEWISE_BEZIER_KNOTS.); +#28299 = CARTESIAN_POINT('',(7.50097449872,-0.770983326758, + 0.737575274357)); +#28300 = CARTESIAN_POINT('',(7.50097449872,-0.762249360379, + 0.743647460507)); +#28301 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.752048704357)); +#28302 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.762695825276)); +#28303 = ORIENTED_EDGE('',*,*,#28304,.T.); +#28304 = EDGE_CURVE('',#28296,#28305,#28307,.T.); +#28305 = VERTEX_POINT('',#28306); +#28306 = CARTESIAN_POINT('',(7.50097449872,-0.764703189028, + 0.781910551311)); +#28307 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28308,#28309,#28310,#28311), + .UNSPECIFIED.,.F.,.F.,(4,4),(16.,17.),.PIECEWISE_BEZIER_KNOTS.); +#28308 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.762695825276)); +#28309 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.770348443437)); +#28310 = CARTESIAN_POINT('',(7.50097449872,-0.760169844575, + 0.776753352116)); +#28311 = CARTESIAN_POINT('',(7.50097449872,-0.764703189028, + 0.781910551311)); +#28312 = ORIENTED_EDGE('',*,*,#28313,.T.); +#28313 = EDGE_CURVE('',#28305,#28314,#28316,.T.); +#28314 = VERTEX_POINT('',#28315); +#28315 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.796966245735)); +#28316 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28317,#28318,#28319,#28320), + .UNSPECIFIED.,.F.,.F.,(4,4),(15.,16.),.PIECEWISE_BEZIER_KNOTS.); +#28317 = CARTESIAN_POINT('',(7.50097449872,-0.764703189028, + 0.781910551311)); +#28318 = CARTESIAN_POINT('',(7.50097449872,-0.769278123798, + 0.787067750506)); +#28319 = CARTESIAN_POINT('',(7.50097449872,-0.778012090177, + 0.792141769068)); +#28320 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.796966245735)); +#28321 = ORIENTED_EDGE('',*,*,#28322,.T.); +#28322 = EDGE_CURVE('',#28314,#28323,#28325,.T.); +#28323 = VERTEX_POINT('',#28324); +#28324 = CARTESIAN_POINT('',(7.50097449872,-0.810785259258, + 0.806947921598)); +#28325 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28326,#28327,#28328,#28329), + .UNSPECIFIED.,.F.,.F.,(4,4),(14.,15.),.PIECEWISE_BEZIER_KNOTS.); +#28326 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.796966245735)); +#28327 = CARTESIAN_POINT('',(7.50097449872,-0.801219486557,0.80095891608 + )); +#28328 = CARTESIAN_POINT('',(7.50097449872,-0.807790756499, + 0.804286141368)); +#28329 = CARTESIAN_POINT('',(7.50097449872,-0.810785259258, + 0.806947921598)); +#28330 = ORIENTED_EDGE('',*,*,#28331,.T.); +#28331 = EDGE_CURVE('',#28323,#28332,#28334,.T.); +#28332 = VERTEX_POINT('',#28333); +#28333 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.817761403782 + )); +#28334 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28335,#28336,#28337,#28338), + .UNSPECIFIED.,.F.,.F.,(4,4),(13.,14.),.PIECEWISE_BEZIER_KNOTS.); +#28335 = CARTESIAN_POINT('',(7.50097449872,-0.810785259258, + 0.806947921598)); +#28336 = CARTESIAN_POINT('',(7.50097449872,-0.8137381717,0.809526521195) + ); +#28337 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.813103288379 + )); +#28338 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.817761403782 + )); +#28339 = ORIENTED_EDGE('',*,*,#28340,.T.); +#28340 = EDGE_CURVE('',#28332,#28341,#28343,.T.); +#28341 = VERTEX_POINT('',#28342); +#28342 = CARTESIAN_POINT('',(7.50097449872,-0.809038465982, + 0.829073969758)); +#28343 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28344,#28345,#28346,#28347), + .UNSPECIFIED.,.F.,.F.,(4,4),(12.,13.),.PIECEWISE_BEZIER_KNOTS.); +#28344 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.817761403782 + )); +#28345 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.822419519183 + )); +#28346 = CARTESIAN_POINT('',(7.50097449872,-0.813155907275, + 0.826245828263)); +#28347 = CARTESIAN_POINT('',(7.50097449872,-0.809038465982, + 0.829073969758)); +#28348 = ORIENTED_EDGE('',*,*,#28349,.T.); +#28349 = EDGE_CURVE('',#28341,#28350,#28352,.T.); +#28350 = VERTEX_POINT('',#28351); +#28351 = CARTESIAN_POINT('',(7.50097449872,-0.792984603971, + 0.833399362632)); +#28352 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28353,#28354,#28355,#28356), + .UNSPECIFIED.,.F.,.F.,(4,4),(11.,12.),.PIECEWISE_BEZIER_KNOTS.); +#28353 = CARTESIAN_POINT('',(7.50097449872,-0.809038465982, + 0.829073969758)); +#28354 = CARTESIAN_POINT('',(7.50097449872,-0.804921024689, + 0.831985291884)); +#28355 = CARTESIAN_POINT('',(7.50097449872,-0.799555873913, + 0.833399362632)); +#28356 = CARTESIAN_POINT('',(7.50097449872,-0.792984603971, + 0.833399362632)); +#28357 = ORIENTED_EDGE('',*,*,#28358,.T.); +#28358 = EDGE_CURVE('',#28350,#28359,#28361,.T.); +#28359 = VERTEX_POINT('',#28360); +#28360 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545, + 0.824998118781)); +#28361 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28362,#28363,#28364,#28365), + .UNSPECIFIED.,.F.,.F.,(4,4),(10.,11.),.PIECEWISE_BEZIER_KNOTS.); +#28362 = CARTESIAN_POINT('',(7.50097449872,-0.792984603971, + 0.833399362632)); +#28363 = CARTESIAN_POINT('',(7.50097449872,-0.781963170206, + 0.833399362632)); +#28364 = CARTESIAN_POINT('',(7.50097449872,-0.772147855609, + 0.830571221137)); +#28365 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545, + 0.824998118781)); +#28366 = ORIENTED_EDGE('',*,*,#28367,.T.); +#28367 = EDGE_CURVE('',#28359,#28368,#28370,.T.); +#28368 = VERTEX_POINT('',#28369); +#28369 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545,0.84479510924 + )); +#28370 = LINE('',#28371,#28372); +#28371 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545,0.84479510924 + )); +#28372 = VECTOR('',#28373,1.); +#28373 = DIRECTION('',(0.,0.,1.)); +#28374 = ORIENTED_EDGE('',*,*,#28375,.T.); +#28375 = EDGE_CURVE('',#28368,#28376,#28378,.T.); +#28376 = VERTEX_POINT('',#28377); +#28377 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.849952308436)); +#28378 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28379,#28380,#28381,#28382), + .UNSPECIFIED.,.F.,.F.,(4,4),(8.,9.),.PIECEWISE_BEZIER_KNOTS.); +#28379 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545,0.84479510924 + )); +#28380 = CARTESIAN_POINT('',(7.50097449872,-0.771939904028, + 0.848288695792)); +#28381 = CARTESIAN_POINT('',(7.50097449872,-0.781089773569, + 0.849952308436)); +#28382 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.849952308436)); +#28383 = ORIENTED_EDGE('',*,*,#28384,.T.); +#28384 = EDGE_CURVE('',#28376,#28385,#28387,.T.); +#28385 = VERTEX_POINT('',#28386); +#28386 = CARTESIAN_POINT('',(7.50097449872,-0.823179173453, + 0.840719258263)); +#28387 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28388,#28389,#28390,#28391), + .UNSPECIFIED.,.F.,.F.,(4,4),(7.,8.),.PIECEWISE_BEZIER_KNOTS.); +#28388 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.849952308436)); +#28389 = CARTESIAN_POINT('',(7.50097449872,-0.803714905522, + 0.849952308436)); +#28390 = CARTESIAN_POINT('',(7.50097449872,-0.814445207074, + 0.846874625046)); +#28391 = CARTESIAN_POINT('',(7.50097449872,-0.823179173453, + 0.840719258263)); +#28392 = ORIENTED_EDGE('',*,*,#28393,.T.); +#28393 = EDGE_CURVE('',#28385,#28394,#28396,.T.); +#28394 = VERTEX_POINT('',#28395); +#28395 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.815931429873)); +#28396 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28397,#28398,#28399,#28400), + .UNSPECIFIED.,.F.,.F.,(4,4),(6.,7.),.PIECEWISE_BEZIER_KNOTS.); +#28397 = CARTESIAN_POINT('',(7.50097449872,-0.823179173453, + 0.840719258263)); +#28398 = CARTESIAN_POINT('',(7.50097449872,-0.831871549516,0.83448071085 + )); +#28399 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.826245828263)); +#28400 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.815931429873)); +#28401 = ORIENTED_EDGE('',*,*,#28402,.T.); +#28402 = EDGE_CURVE('',#28394,#28403,#28405,.T.); +#28403 = VERTEX_POINT('',#28404); +#28404 = CARTESIAN_POINT('',(7.50097449872,-0.830457478769, + 0.797548510161)); +#28405 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28406,#28407,#28408,#28409), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#28406 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.815931429873)); +#28407 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.808777895505)); +#28408 = CARTESIAN_POINT('',(7.50097449872,-0.834325378165, + 0.802622528724)); +#28409 = CARTESIAN_POINT('',(7.50097449872,-0.830457478769, + 0.797548510161)); +#28410 = ORIENTED_EDGE('',*,*,#28411,.T.); +#28411 = EDGE_CURVE('',#28403,#28412,#28414,.T.); +#28412 = VERTEX_POINT('',#28413); +#28413 = CARTESIAN_POINT('',(7.50097449872,-0.805378518165, + 0.782160093207)); +#28414 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28415,#28416,#28417,#28418), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#28415 = CARTESIAN_POINT('',(7.50097449872,-0.830457478769, + 0.797548510161)); +#28416 = CARTESIAN_POINT('',(7.50097449872,-0.826631169688, + 0.792474491598)); +#28417 = CARTESIAN_POINT('',(7.50097449872,-0.818229925838, + 0.787317292402)); +#28418 = CARTESIAN_POINT('',(7.50097449872,-0.805378518165, + 0.782160093207)); +#28419 = ORIENTED_EDGE('',*,*,#28420,.T.); +#28420 = EDGE_CURVE('',#28412,#28421,#28423,.T.); +#28421 = VERTEX_POINT('',#28422); +#28422 = CARTESIAN_POINT('',(7.50097449872,-0.784042686011, + 0.771762514184)); +#28423 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28424,#28425,#28426,#28427), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#28424 = CARTESIAN_POINT('',(7.50097449872,-0.805378518165, + 0.782160093207)); +#28425 = CARTESIAN_POINT('',(7.50097449872,-0.794648216614, + 0.778167422862)); +#28426 = CARTESIAN_POINT('',(7.50097449872,-0.787536272563,0.77467383631 + )); +#28427 = CARTESIAN_POINT('',(7.50097449872,-0.784042686011, + 0.771762514184)); +#28428 = ORIENTED_EDGE('',*,*,#28429,.T.); +#28429 = EDGE_CURVE('',#28421,#28430,#28432,.T.); +#28430 = VERTEX_POINT('',#28431); +#28431 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.760699490104)); +#28432 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28433,#28434,#28435,#28436), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#28433 = CARTESIAN_POINT('',(7.50097449872,-0.784042686011, + 0.771762514184)); +#28434 = CARTESIAN_POINT('',(7.50097449872,-0.780549099459, + 0.768851192057)); +#28435 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.765191244242)); +#28436 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.760699490104)); +#28437 = ORIENTED_EDGE('',*,*,#28438,.T.); +#28438 = EDGE_CURVE('',#28430,#28259,#28439,.T.); +#28439 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28440,#28441,#28442,#28443), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#28440 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.760699490104)); +#28441 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.750218730448)); +#28442 = CARTESIAN_POINT('',(7.50097449872,-0.786829237189, + 0.744978350621)); +#28443 = CARTESIAN_POINT('',(7.50097449872,-0.802841508884, + 0.744978350621)); +#28444 = PLANE('',#28445); +#28445 = AXIS2_PLACEMENT_3D('',#28446,#28447,#28448); +#28446 = CARTESIAN_POINT('',(7.50097449872,-0.820195068273, + 0.747785696957)); +#28447 = DIRECTION('',(-1.,0.,0.)); +#28448 = DIRECTION('',(0.,0.,1.)); +#28449 = ADVANCED_FACE('',(#28450),#28466,.F.); +#28450 = FACE_BOUND('',#28451,.F.); +#28451 = EDGE_LOOP('',(#28452,#28458,#28459,#28465)); +#28452 = ORIENTED_EDGE('',*,*,#28453,.F.); +#28453 = EDGE_CURVE('',#28430,#28075,#28454,.T.); +#28454 = LINE('',#28455,#28456); +#28455 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.760699490104)); +#28456 = VECTOR('',#28457,1.); +#28457 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28458 = ORIENTED_EDGE('',*,*,#28438,.T.); +#28459 = ORIENTED_EDGE('',*,*,#28460,.T.); +#28460 = EDGE_CURVE('',#28259,#28064,#28461,.T.); +#28461 = LINE('',#28462,#28463); +#28462 = CARTESIAN_POINT('',(7.50097449872,-0.802841508884, + 0.744978350621)); +#28463 = VECTOR('',#28464,1.); +#28464 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28465 = ORIENTED_EDGE('',*,*,#28074,.F.); +#28466 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28467,#28468) + ,(#28469,#28470) + ,(#28471,#28472) + ,(#28473,#28474 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(1.,2.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28467 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.760699490104)); +#28468 = CARTESIAN_POINT('',(7.499974498734,-0.778802306183, + 0.760699490104)); +#28469 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.750218730448)); +#28470 = CARTESIAN_POINT('',(7.499974498734,-0.778802306183, + 0.750218730448)); +#28471 = CARTESIAN_POINT('',(7.50097449872,-0.786829237189, + 0.744978350621)); +#28472 = CARTESIAN_POINT('',(7.499974498734,-0.786829237189, + 0.744978350621)); +#28473 = CARTESIAN_POINT('',(7.50097449872,-0.802841508884, + 0.744978350621)); +#28474 = CARTESIAN_POINT('',(7.499974498734,-0.802841508884, + 0.744978350621)); +#28475 = ADVANCED_FACE('',(#28476),#28487,.F.); +#28476 = FACE_BOUND('',#28477,.F.); +#28477 = EDGE_LOOP('',(#28478,#28484,#28485,#28486)); +#28478 = ORIENTED_EDGE('',*,*,#28479,.F.); +#28479 = EDGE_CURVE('',#28421,#28084,#28480,.T.); +#28480 = LINE('',#28481,#28482); +#28481 = CARTESIAN_POINT('',(7.50097449872,-0.784042686011, + 0.771762514184)); +#28482 = VECTOR('',#28483,1.); +#28483 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28484 = ORIENTED_EDGE('',*,*,#28429,.T.); +#28485 = ORIENTED_EDGE('',*,*,#28453,.T.); +#28486 = ORIENTED_EDGE('',*,*,#28083,.F.); +#28487 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28488,#28489) + ,(#28490,#28491) + ,(#28492,#28493) + ,(#28494,#28495 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(2.,3.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28488 = CARTESIAN_POINT('',(7.50097449872,-0.784042686011, + 0.771762514184)); +#28489 = CARTESIAN_POINT('',(7.499974498734,-0.784042686011, + 0.771762514184)); +#28490 = CARTESIAN_POINT('',(7.50097449872,-0.780549099459, + 0.768851192057)); +#28491 = CARTESIAN_POINT('',(7.499974498734,-0.780549099459, + 0.768851192057)); +#28492 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.765191244242)); +#28493 = CARTESIAN_POINT('',(7.499974498734,-0.778802306183, + 0.765191244242)); +#28494 = CARTESIAN_POINT('',(7.50097449872,-0.778802306183, + 0.760699490104)); +#28495 = CARTESIAN_POINT('',(7.499974498734,-0.778802306183, + 0.760699490104)); +#28496 = ADVANCED_FACE('',(#28497),#28508,.F.); +#28497 = FACE_BOUND('',#28498,.F.); +#28498 = EDGE_LOOP('',(#28499,#28505,#28506,#28507)); +#28499 = ORIENTED_EDGE('',*,*,#28500,.F.); +#28500 = EDGE_CURVE('',#28412,#28093,#28501,.T.); +#28501 = LINE('',#28502,#28503); +#28502 = CARTESIAN_POINT('',(7.50097449872,-0.805378518165, + 0.782160093207)); +#28503 = VECTOR('',#28504,1.); +#28504 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28505 = ORIENTED_EDGE('',*,*,#28420,.T.); +#28506 = ORIENTED_EDGE('',*,*,#28479,.T.); +#28507 = ORIENTED_EDGE('',*,*,#28092,.F.); +#28508 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28509,#28510) + ,(#28511,#28512) + ,(#28513,#28514) + ,(#28515,#28516 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28509 = CARTESIAN_POINT('',(7.50097449872,-0.805378518165, + 0.782160093207)); +#28510 = CARTESIAN_POINT('',(7.499974498734,-0.805378518165, + 0.782160093207)); +#28511 = CARTESIAN_POINT('',(7.50097449872,-0.794648216614, + 0.778167422862)); +#28512 = CARTESIAN_POINT('',(7.499974498734,-0.794648216614, + 0.778167422862)); +#28513 = CARTESIAN_POINT('',(7.50097449872,-0.787536272563,0.77467383631 + )); +#28514 = CARTESIAN_POINT('',(7.499974498734,-0.787536272563, + 0.77467383631)); +#28515 = CARTESIAN_POINT('',(7.50097449872,-0.784042686011, + 0.771762514184)); +#28516 = CARTESIAN_POINT('',(7.499974498734,-0.784042686011, + 0.771762514184)); +#28517 = ADVANCED_FACE('',(#28518),#28529,.F.); +#28518 = FACE_BOUND('',#28519,.F.); +#28519 = EDGE_LOOP('',(#28520,#28526,#28527,#28528)); +#28520 = ORIENTED_EDGE('',*,*,#28521,.F.); +#28521 = EDGE_CURVE('',#28403,#28102,#28522,.T.); +#28522 = LINE('',#28523,#28524); +#28523 = CARTESIAN_POINT('',(7.50097449872,-0.830457478769, + 0.797548510161)); +#28524 = VECTOR('',#28525,1.); +#28525 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28526 = ORIENTED_EDGE('',*,*,#28411,.T.); +#28527 = ORIENTED_EDGE('',*,*,#28500,.T.); +#28528 = ORIENTED_EDGE('',*,*,#28101,.F.); +#28529 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28530,#28531) + ,(#28532,#28533) + ,(#28534,#28535) + ,(#28536,#28537 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(4.,5.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28530 = CARTESIAN_POINT('',(7.50097449872,-0.830457478769, + 0.797548510161)); +#28531 = CARTESIAN_POINT('',(7.499974498734,-0.830457478769, + 0.797548510161)); +#28532 = CARTESIAN_POINT('',(7.50097449872,-0.826631169688, + 0.792474491598)); +#28533 = CARTESIAN_POINT('',(7.499974498734,-0.826631169688, + 0.792474491598)); +#28534 = CARTESIAN_POINT('',(7.50097449872,-0.818229925838, + 0.787317292402)); +#28535 = CARTESIAN_POINT('',(7.499974498734,-0.818229925838, + 0.787317292402)); +#28536 = CARTESIAN_POINT('',(7.50097449872,-0.805378518165, + 0.782160093207)); +#28537 = CARTESIAN_POINT('',(7.499974498734,-0.805378518165, + 0.782160093207)); +#28538 = ADVANCED_FACE('',(#28539),#28550,.F.); +#28539 = FACE_BOUND('',#28540,.F.); +#28540 = EDGE_LOOP('',(#28541,#28547,#28548,#28549)); +#28541 = ORIENTED_EDGE('',*,*,#28542,.F.); +#28542 = EDGE_CURVE('',#28394,#28111,#28543,.T.); +#28543 = LINE('',#28544,#28545); +#28544 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.815931429873)); +#28545 = VECTOR('',#28546,1.); +#28546 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28547 = ORIENTED_EDGE('',*,*,#28402,.T.); +#28548 = ORIENTED_EDGE('',*,*,#28521,.T.); +#28549 = ORIENTED_EDGE('',*,*,#28110,.F.); +#28550 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28551,#28552) + ,(#28553,#28554) + ,(#28555,#28556) + ,(#28557,#28558 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(5.,6.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28551 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.815931429873)); +#28552 = CARTESIAN_POINT('',(7.499974498734,-0.836238532706, + 0.815931429873)); +#28553 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.808777895505)); +#28554 = CARTESIAN_POINT('',(7.499974498734,-0.836238532706, + 0.808777895505)); +#28555 = CARTESIAN_POINT('',(7.50097449872,-0.834325378165, + 0.802622528724)); +#28556 = CARTESIAN_POINT('',(7.499974498734,-0.834325378165, + 0.802622528724)); +#28557 = CARTESIAN_POINT('',(7.50097449872,-0.830457478769, + 0.797548510161)); +#28558 = CARTESIAN_POINT('',(7.499974498734,-0.830457478769, + 0.797548510161)); +#28559 = ADVANCED_FACE('',(#28560),#28571,.F.); +#28560 = FACE_BOUND('',#28561,.F.); +#28561 = EDGE_LOOP('',(#28562,#28568,#28569,#28570)); +#28562 = ORIENTED_EDGE('',*,*,#28563,.F.); +#28563 = EDGE_CURVE('',#28385,#28120,#28564,.T.); +#28564 = LINE('',#28565,#28566); +#28565 = CARTESIAN_POINT('',(7.50097449872,-0.823179173453, + 0.840719258263)); +#28566 = VECTOR('',#28567,1.); +#28567 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28568 = ORIENTED_EDGE('',*,*,#28393,.T.); +#28569 = ORIENTED_EDGE('',*,*,#28542,.T.); +#28570 = ORIENTED_EDGE('',*,*,#28119,.F.); +#28571 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28572,#28573) + ,(#28574,#28575) + ,(#28576,#28577) + ,(#28578,#28579 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(6.,7.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28572 = CARTESIAN_POINT('',(7.50097449872,-0.823179173453, + 0.840719258263)); +#28573 = CARTESIAN_POINT('',(7.499974498734,-0.823179173453, + 0.840719258263)); +#28574 = CARTESIAN_POINT('',(7.50097449872,-0.831871549516,0.83448071085 + )); +#28575 = CARTESIAN_POINT('',(7.499974498734,-0.831871549516, + 0.83448071085)); +#28576 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.826245828263)); +#28577 = CARTESIAN_POINT('',(7.499974498734,-0.836238532706, + 0.826245828263)); +#28578 = CARTESIAN_POINT('',(7.50097449872,-0.836238532706, + 0.815931429873)); +#28579 = CARTESIAN_POINT('',(7.499974498734,-0.836238532706, + 0.815931429873)); +#28580 = ADVANCED_FACE('',(#28581),#28592,.F.); +#28581 = FACE_BOUND('',#28582,.F.); +#28582 = EDGE_LOOP('',(#28583,#28589,#28590,#28591)); +#28583 = ORIENTED_EDGE('',*,*,#28584,.F.); +#28584 = EDGE_CURVE('',#28376,#28129,#28585,.T.); +#28585 = LINE('',#28586,#28587); +#28586 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.849952308436)); +#28587 = VECTOR('',#28588,1.); +#28588 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28589 = ORIENTED_EDGE('',*,*,#28384,.T.); +#28590 = ORIENTED_EDGE('',*,*,#28563,.T.); +#28591 = ORIENTED_EDGE('',*,*,#28128,.F.); +#28592 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28593,#28594) + ,(#28595,#28596) + ,(#28597,#28598) + ,(#28599,#28600 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(7.,8.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28593 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.849952308436)); +#28594 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.849952308436)); +#28595 = CARTESIAN_POINT('',(7.50097449872,-0.803714905522, + 0.849952308436)); +#28596 = CARTESIAN_POINT('',(7.499974498734,-0.803714905522, + 0.849952308436)); +#28597 = CARTESIAN_POINT('',(7.50097449872,-0.814445207074, + 0.846874625046)); +#28598 = CARTESIAN_POINT('',(7.499974498734,-0.814445207074, + 0.846874625046)); +#28599 = CARTESIAN_POINT('',(7.50097449872,-0.823179173453, + 0.840719258263)); +#28600 = CARTESIAN_POINT('',(7.499974498734,-0.823179173453, + 0.840719258263)); +#28601 = ADVANCED_FACE('',(#28602),#28613,.F.); +#28602 = FACE_BOUND('',#28603,.F.); +#28603 = EDGE_LOOP('',(#28604,#28610,#28611,#28612)); +#28604 = ORIENTED_EDGE('',*,*,#28605,.F.); +#28605 = EDGE_CURVE('',#28368,#28138,#28606,.T.); +#28606 = LINE('',#28607,#28608); +#28607 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545,0.84479510924 + )); +#28608 = VECTOR('',#28609,1.); +#28609 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28610 = ORIENTED_EDGE('',*,*,#28375,.T.); +#28611 = ORIENTED_EDGE('',*,*,#28584,.T.); +#28612 = ORIENTED_EDGE('',*,*,#28137,.F.); +#28613 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28614,#28615) + ,(#28616,#28617) + ,(#28618,#28619) + ,(#28620,#28621 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(8.,9.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28614 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545,0.84479510924 + )); +#28615 = CARTESIAN_POINT('',(7.499974498734,-0.763455479545, + 0.84479510924)); +#28616 = CARTESIAN_POINT('',(7.50097449872,-0.771939904028, + 0.848288695792)); +#28617 = CARTESIAN_POINT('',(7.499974498734,-0.771939904028, + 0.848288695792)); +#28618 = CARTESIAN_POINT('',(7.50097449872,-0.781089773569, + 0.849952308436)); +#28619 = CARTESIAN_POINT('',(7.499974498734,-0.781089773569, + 0.849952308436)); +#28620 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.849952308436)); +#28621 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.849952308436)); +#28622 = ADVANCED_FACE('',(#28623),#28634,.F.); +#28623 = FACE_BOUND('',#28624,.T.); +#28624 = EDGE_LOOP('',(#28625,#28626,#28627,#28628)); +#28625 = ORIENTED_EDGE('',*,*,#28146,.T.); +#28626 = ORIENTED_EDGE('',*,*,#28605,.F.); +#28627 = ORIENTED_EDGE('',*,*,#28367,.F.); +#28628 = ORIENTED_EDGE('',*,*,#28629,.T.); +#28629 = EDGE_CURVE('',#28359,#28147,#28630,.T.); +#28630 = LINE('',#28631,#28632); +#28631 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545, + 0.824998118781)); +#28632 = VECTOR('',#28633,1.); +#28633 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28634 = PLANE('',#28635); +#28635 = AXIS2_PLACEMENT_3D('',#28636,#28637,#28638); +#28636 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545,0.84479510924 + )); +#28637 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#28638 = DIRECTION('',(0.,0.,-1.)); +#28639 = ADVANCED_FACE('',(#28640),#28651,.F.); +#28640 = FACE_BOUND('',#28641,.F.); +#28641 = EDGE_LOOP('',(#28642,#28648,#28649,#28650)); +#28642 = ORIENTED_EDGE('',*,*,#28643,.F.); +#28643 = EDGE_CURVE('',#28350,#28155,#28644,.T.); +#28644 = LINE('',#28645,#28646); +#28645 = CARTESIAN_POINT('',(7.50097449872,-0.792984603971, + 0.833399362632)); +#28646 = VECTOR('',#28647,1.); +#28647 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28648 = ORIENTED_EDGE('',*,*,#28358,.T.); +#28649 = ORIENTED_EDGE('',*,*,#28629,.T.); +#28650 = ORIENTED_EDGE('',*,*,#28154,.F.); +#28651 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28652,#28653) + ,(#28654,#28655) + ,(#28656,#28657) + ,(#28658,#28659 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(10.,11.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28652 = CARTESIAN_POINT('',(7.50097449872,-0.792984603971, + 0.833399362632)); +#28653 = CARTESIAN_POINT('',(7.499974498734,-0.792984603971, + 0.833399362632)); +#28654 = CARTESIAN_POINT('',(7.50097449872,-0.781963170206, + 0.833399362632)); +#28655 = CARTESIAN_POINT('',(7.499974498734,-0.781963170206, + 0.833399362632)); +#28656 = CARTESIAN_POINT('',(7.50097449872,-0.772147855609, + 0.830571221137)); +#28657 = CARTESIAN_POINT('',(7.499974498734,-0.772147855609, + 0.830571221137)); +#28658 = CARTESIAN_POINT('',(7.50097449872,-0.763455479545, + 0.824998118781)); +#28659 = CARTESIAN_POINT('',(7.499974498734,-0.763455479545, + 0.824998118781)); +#28660 = ADVANCED_FACE('',(#28661),#28672,.F.); +#28661 = FACE_BOUND('',#28662,.F.); +#28662 = EDGE_LOOP('',(#28663,#28669,#28670,#28671)); +#28663 = ORIENTED_EDGE('',*,*,#28664,.F.); +#28664 = EDGE_CURVE('',#28341,#28164,#28665,.T.); +#28665 = LINE('',#28666,#28667); +#28666 = CARTESIAN_POINT('',(7.50097449872,-0.809038465982, + 0.829073969758)); +#28667 = VECTOR('',#28668,1.); +#28668 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28669 = ORIENTED_EDGE('',*,*,#28349,.T.); +#28670 = ORIENTED_EDGE('',*,*,#28643,.T.); +#28671 = ORIENTED_EDGE('',*,*,#28163,.F.); +#28672 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28673,#28674) + ,(#28675,#28676) + ,(#28677,#28678) + ,(#28679,#28680 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(11.,12.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28673 = CARTESIAN_POINT('',(7.50097449872,-0.809038465982, + 0.829073969758)); +#28674 = CARTESIAN_POINT('',(7.499974498734,-0.809038465982, + 0.829073969758)); +#28675 = CARTESIAN_POINT('',(7.50097449872,-0.804921024689, + 0.831985291884)); +#28676 = CARTESIAN_POINT('',(7.499974498734,-0.804921024689, + 0.831985291884)); +#28677 = CARTESIAN_POINT('',(7.50097449872,-0.799555873913, + 0.833399362632)); +#28678 = CARTESIAN_POINT('',(7.499974498734,-0.799555873913, + 0.833399362632)); +#28679 = CARTESIAN_POINT('',(7.50097449872,-0.792984603971, + 0.833399362632)); +#28680 = CARTESIAN_POINT('',(7.499974498734,-0.792984603971, + 0.833399362632)); +#28681 = ADVANCED_FACE('',(#28682),#28693,.F.); +#28682 = FACE_BOUND('',#28683,.F.); +#28683 = EDGE_LOOP('',(#28684,#28690,#28691,#28692)); +#28684 = ORIENTED_EDGE('',*,*,#28685,.F.); +#28685 = EDGE_CURVE('',#28332,#28173,#28686,.T.); +#28686 = LINE('',#28687,#28688); +#28687 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.817761403782 + )); +#28688 = VECTOR('',#28689,1.); +#28689 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28690 = ORIENTED_EDGE('',*,*,#28340,.T.); +#28691 = ORIENTED_EDGE('',*,*,#28664,.T.); +#28692 = ORIENTED_EDGE('',*,*,#28172,.F.); +#28693 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28694,#28695) + ,(#28696,#28697) + ,(#28698,#28699) + ,(#28700,#28701 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(12.,13.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28694 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.817761403782 + )); +#28695 = CARTESIAN_POINT('',(7.499974498734,-0.81523542308, + 0.817761403782)); +#28696 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.822419519183 + )); +#28697 = CARTESIAN_POINT('',(7.499974498734,-0.81523542308, + 0.822419519183)); +#28698 = CARTESIAN_POINT('',(7.50097449872,-0.813155907275, + 0.826245828263)); +#28699 = CARTESIAN_POINT('',(7.499974498734,-0.813155907275, + 0.826245828263)); +#28700 = CARTESIAN_POINT('',(7.50097449872,-0.809038465982, + 0.829073969758)); +#28701 = CARTESIAN_POINT('',(7.499974498734,-0.809038465982, + 0.829073969758)); +#28702 = ADVANCED_FACE('',(#28703),#28714,.F.); +#28703 = FACE_BOUND('',#28704,.F.); +#28704 = EDGE_LOOP('',(#28705,#28711,#28712,#28713)); +#28705 = ORIENTED_EDGE('',*,*,#28706,.F.); +#28706 = EDGE_CURVE('',#28323,#28182,#28707,.T.); +#28707 = LINE('',#28708,#28709); +#28708 = CARTESIAN_POINT('',(7.50097449872,-0.810785259258, + 0.806947921598)); +#28709 = VECTOR('',#28710,1.); +#28710 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28711 = ORIENTED_EDGE('',*,*,#28331,.T.); +#28712 = ORIENTED_EDGE('',*,*,#28685,.T.); +#28713 = ORIENTED_EDGE('',*,*,#28181,.F.); +#28714 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28715,#28716) + ,(#28717,#28718) + ,(#28719,#28720) + ,(#28721,#28722 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(13.,14.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28715 = CARTESIAN_POINT('',(7.50097449872,-0.810785259258, + 0.806947921598)); +#28716 = CARTESIAN_POINT('',(7.499974498734,-0.810785259258, + 0.806947921598)); +#28717 = CARTESIAN_POINT('',(7.50097449872,-0.8137381717,0.809526521195) + ); +#28718 = CARTESIAN_POINT('',(7.499974498734,-0.8137381717,0.809526521195 + )); +#28719 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.813103288379 + )); +#28720 = CARTESIAN_POINT('',(7.499974498734,-0.81523542308, + 0.813103288379)); +#28721 = CARTESIAN_POINT('',(7.50097449872,-0.81523542308,0.817761403782 + )); +#28722 = CARTESIAN_POINT('',(7.499974498734,-0.81523542308, + 0.817761403782)); +#28723 = ADVANCED_FACE('',(#28724),#28735,.F.); +#28724 = FACE_BOUND('',#28725,.F.); +#28725 = EDGE_LOOP('',(#28726,#28732,#28733,#28734)); +#28726 = ORIENTED_EDGE('',*,*,#28727,.F.); +#28727 = EDGE_CURVE('',#28314,#28191,#28728,.T.); +#28728 = LINE('',#28729,#28730); +#28729 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.796966245735)); +#28730 = VECTOR('',#28731,1.); +#28731 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28732 = ORIENTED_EDGE('',*,*,#28322,.T.); +#28733 = ORIENTED_EDGE('',*,*,#28706,.T.); +#28734 = ORIENTED_EDGE('',*,*,#28190,.F.); +#28735 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28736,#28737) + ,(#28738,#28739) + ,(#28740,#28741) + ,(#28742,#28743 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(14.,15.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28736 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.796966245735)); +#28737 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.796966245735)); +#28738 = CARTESIAN_POINT('',(7.50097449872,-0.801219486557,0.80095891608 + )); +#28739 = CARTESIAN_POINT('',(7.499974498734,-0.801219486557, + 0.80095891608)); +#28740 = CARTESIAN_POINT('',(7.50097449872,-0.807790756499, + 0.804286141368)); +#28741 = CARTESIAN_POINT('',(7.499974498734,-0.807790756499, + 0.804286141368)); +#28742 = CARTESIAN_POINT('',(7.50097449872,-0.810785259258, + 0.806947921598)); +#28743 = CARTESIAN_POINT('',(7.499974498734,-0.810785259258, + 0.806947921598)); +#28744 = ADVANCED_FACE('',(#28745),#28756,.F.); +#28745 = FACE_BOUND('',#28746,.F.); +#28746 = EDGE_LOOP('',(#28747,#28753,#28754,#28755)); +#28747 = ORIENTED_EDGE('',*,*,#28748,.F.); +#28748 = EDGE_CURVE('',#28305,#28200,#28749,.T.); +#28749 = LINE('',#28750,#28751); +#28750 = CARTESIAN_POINT('',(7.50097449872,-0.764703189028, + 0.781910551311)); +#28751 = VECTOR('',#28752,1.); +#28752 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28753 = ORIENTED_EDGE('',*,*,#28313,.T.); +#28754 = ORIENTED_EDGE('',*,*,#28727,.T.); +#28755 = ORIENTED_EDGE('',*,*,#28199,.F.); +#28756 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28757,#28758) + ,(#28759,#28760) + ,(#28761,#28762) + ,(#28763,#28764 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(15.,16.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28757 = CARTESIAN_POINT('',(7.50097449872,-0.764703189028, + 0.781910551311)); +#28758 = CARTESIAN_POINT('',(7.499974498734,-0.764703189028, + 0.781910551311)); +#28759 = CARTESIAN_POINT('',(7.50097449872,-0.769278123798, + 0.787067750506)); +#28760 = CARTESIAN_POINT('',(7.499974498734,-0.769278123798, + 0.787067750506)); +#28761 = CARTESIAN_POINT('',(7.50097449872,-0.778012090177, + 0.792141769068)); +#28762 = CARTESIAN_POINT('',(7.499974498734,-0.778012090177, + 0.792141769068)); +#28763 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.796966245735)); +#28764 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.796966245735)); +#28765 = ADVANCED_FACE('',(#28766),#28777,.F.); +#28766 = FACE_BOUND('',#28767,.F.); +#28767 = EDGE_LOOP('',(#28768,#28774,#28775,#28776)); +#28768 = ORIENTED_EDGE('',*,*,#28769,.F.); +#28769 = EDGE_CURVE('',#28296,#28209,#28770,.T.); +#28770 = LINE('',#28771,#28772); +#28771 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.762695825276)); +#28772 = VECTOR('',#28773,1.); +#28773 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28774 = ORIENTED_EDGE('',*,*,#28304,.T.); +#28775 = ORIENTED_EDGE('',*,*,#28748,.T.); +#28776 = ORIENTED_EDGE('',*,*,#28208,.F.); +#28777 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28778,#28779) + ,(#28780,#28781) + ,(#28782,#28783) + ,(#28784,#28785 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(16.,17.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28778 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.762695825276)); +#28779 = CARTESIAN_POINT('',(7.499974498734,-0.757882377189, + 0.762695825276)); +#28780 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.770348443437)); +#28781 = CARTESIAN_POINT('',(7.499974498734,-0.757882377189, + 0.770348443437)); +#28782 = CARTESIAN_POINT('',(7.50097449872,-0.760169844575, + 0.776753352116)); +#28783 = CARTESIAN_POINT('',(7.499974498734,-0.760169844575, + 0.776753352116)); +#28784 = CARTESIAN_POINT('',(7.50097449872,-0.764703189028, + 0.781910551311)); +#28785 = CARTESIAN_POINT('',(7.499974498734,-0.764703189028, + 0.781910551311)); +#28786 = ADVANCED_FACE('',(#28787),#28798,.F.); +#28787 = FACE_BOUND('',#28788,.F.); +#28788 = EDGE_LOOP('',(#28789,#28795,#28796,#28797)); +#28789 = ORIENTED_EDGE('',*,*,#28790,.F.); +#28790 = EDGE_CURVE('',#28287,#28218,#28791,.T.); +#28791 = LINE('',#28792,#28793); +#28792 = CARTESIAN_POINT('',(7.50097449872,-0.770983326758, + 0.737575274357)); +#28793 = VECTOR('',#28794,1.); +#28794 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28795 = ORIENTED_EDGE('',*,*,#28295,.T.); +#28796 = ORIENTED_EDGE('',*,*,#28769,.T.); +#28797 = ORIENTED_EDGE('',*,*,#28217,.F.); +#28798 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28799,#28800) + ,(#28801,#28802) + ,(#28803,#28804) + ,(#28805,#28806 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(17.,18.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28799 = CARTESIAN_POINT('',(7.50097449872,-0.770983326758, + 0.737575274357)); +#28800 = CARTESIAN_POINT('',(7.499974498734,-0.770983326758, + 0.737575274357)); +#28801 = CARTESIAN_POINT('',(7.50097449872,-0.762249360379, + 0.743647460507)); +#28802 = CARTESIAN_POINT('',(7.499974498734,-0.762249360379, + 0.743647460507)); +#28803 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.752048704357)); +#28804 = CARTESIAN_POINT('',(7.499974498734,-0.757882377189, + 0.752048704357)); +#28805 = CARTESIAN_POINT('',(7.50097449872,-0.757882377189, + 0.762695825276)); +#28806 = CARTESIAN_POINT('',(7.499974498734,-0.757882377189, + 0.762695825276)); +#28807 = ADVANCED_FACE('',(#28808),#28819,.F.); +#28808 = FACE_BOUND('',#28809,.F.); +#28809 = EDGE_LOOP('',(#28810,#28816,#28817,#28818)); +#28810 = ORIENTED_EDGE('',*,*,#28811,.F.); +#28811 = EDGE_CURVE('',#28278,#28227,#28812,.T.); +#28812 = LINE('',#28813,#28814); +#28813 = CARTESIAN_POINT('',(7.50097449872,-0.804837844056, + 0.728342224185)); +#28814 = VECTOR('',#28815,1.); +#28815 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28816 = ORIENTED_EDGE('',*,*,#28286,.T.); +#28817 = ORIENTED_EDGE('',*,*,#28790,.T.); +#28818 = ORIENTED_EDGE('',*,*,#28226,.F.); +#28819 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28820,#28821) + ,(#28822,#28823) + ,(#28824,#28825) + ,(#28826,#28827 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(18.,19.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28820 = CARTESIAN_POINT('',(7.50097449872,-0.804837844056, + 0.728342224185)); +#28821 = CARTESIAN_POINT('',(7.499974498734,-0.804837844056, + 0.728342224185)); +#28822 = CARTESIAN_POINT('',(7.50097449872,-0.790988268798, + 0.728342224185)); +#28823 = CARTESIAN_POINT('',(7.499974498734,-0.790988268798, + 0.728342224185)); +#28824 = CARTESIAN_POINT('',(7.50097449872,-0.779675702821, + 0.731419907575)); +#28825 = CARTESIAN_POINT('',(7.499974498734,-0.779675702821, + 0.731419907575)); +#28826 = CARTESIAN_POINT('',(7.50097449872,-0.770983326758, + 0.737575274357)); +#28827 = CARTESIAN_POINT('',(7.499974498734,-0.770983326758, + 0.737575274357)); +#28828 = ADVANCED_FACE('',(#28829),#28840,.F.); +#28829 = FACE_BOUND('',#28830,.F.); +#28830 = EDGE_LOOP('',(#28831,#28837,#28838,#28839)); +#28831 = ORIENTED_EDGE('',*,*,#28832,.F.); +#28832 = EDGE_CURVE('',#28270,#28236,#28833,.T.); +#28833 = LINE('',#28834,#28835); +#28834 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.735163036024)); +#28835 = VECTOR('',#28836,1.); +#28836 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28837 = ORIENTED_EDGE('',*,*,#28277,.T.); +#28838 = ORIENTED_EDGE('',*,*,#28811,.T.); +#28839 = ORIENTED_EDGE('',*,*,#28235,.F.); +#28840 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28841,#28842) + ,(#28843,#28844) + ,(#28845,#28846) + ,(#28847,#28848 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(19.,20.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28841 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.735163036024)); +#28842 = CARTESIAN_POINT('',(7.499974498734,-0.836363303654, + 0.735163036024)); +#28843 = CARTESIAN_POINT('',(7.50097449872,-0.827379795378, + 0.730671281886)); +#28844 = CARTESIAN_POINT('',(7.499974498734,-0.827379795378, + 0.730671281886)); +#28845 = CARTESIAN_POINT('',(7.50097449872,-0.816899035723, + 0.728342224185)); +#28846 = CARTESIAN_POINT('',(7.499974498734,-0.816899035723, + 0.728342224185)); +#28847 = CARTESIAN_POINT('',(7.50097449872,-0.804837844056, + 0.728342224185)); +#28848 = CARTESIAN_POINT('',(7.499974498734,-0.804837844056, + 0.728342224185)); +#28849 = ADVANCED_FACE('',(#28850),#28861,.F.); +#28850 = FACE_BOUND('',#28851,.T.); +#28851 = EDGE_LOOP('',(#28852,#28853,#28854,#28855)); +#28852 = ORIENTED_EDGE('',*,*,#28244,.T.); +#28853 = ORIENTED_EDGE('',*,*,#28832,.F.); +#28854 = ORIENTED_EDGE('',*,*,#28269,.F.); +#28855 = ORIENTED_EDGE('',*,*,#28856,.T.); +#28856 = EDGE_CURVE('',#28261,#28066,#28857,.T.); +#28857 = LINE('',#28858,#28859); +#28858 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.756207735965)); +#28859 = VECTOR('',#28860,1.); +#28860 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#28861 = PLANE('',#28862); +#28862 = AXIS2_PLACEMENT_3D('',#28863,#28864,#28865); +#28863 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.735163036024)); +#28864 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#28865 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#28866 = ADVANCED_FACE('',(#28867),#28873,.F.); +#28867 = FACE_BOUND('',#28868,.F.); +#28868 = EDGE_LOOP('',(#28869,#28870,#28871,#28872)); +#28869 = ORIENTED_EDGE('',*,*,#28460,.F.); +#28870 = ORIENTED_EDGE('',*,*,#28258,.T.); +#28871 = ORIENTED_EDGE('',*,*,#28856,.T.); +#28872 = ORIENTED_EDGE('',*,*,#28063,.F.); +#28873 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#28874,#28875) + ,(#28876,#28877) + ,(#28878,#28879) + ,(#28880,#28881 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(0.,1.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#28874 = CARTESIAN_POINT('',(7.50097449872,-0.802841508884, + 0.744978350621)); +#28875 = CARTESIAN_POINT('',(7.499974498734,-0.802841508884, + 0.744978350621)); +#28876 = CARTESIAN_POINT('',(7.50097449872,-0.814819519919, + 0.744978350621)); +#28877 = CARTESIAN_POINT('',(7.499974498734,-0.814819519919, + 0.744978350621)); +#28878 = CARTESIAN_POINT('',(7.50097449872,-0.825965724631,0.74872147907 + )); +#28879 = CARTESIAN_POINT('',(7.499974498734,-0.825965724631, + 0.74872147907)); +#28880 = CARTESIAN_POINT('',(7.50097449872,-0.836363303654, + 0.756207735965)); +#28881 = CARTESIAN_POINT('',(7.499974498734,-0.836363303654, + 0.756207735965)); +#28882 = MANIFOLD_SOLID_BREP('',#28883); +#28883 = CLOSED_SHELL('',(#28884,#29017,#29150,#29172,#29193,#29214, + #29231,#29252,#29273,#29290,#29307,#29324,#29341,#29358,#29375, + #29396,#29413)); +#28884 = ADVANCED_FACE('',(#28885),#29012,.F.); +#28885 = FACE_BOUND('',#28886,.T.); +#28886 = EDGE_LOOP('',(#28887,#28897,#28905,#28914,#28923,#28931,#28940, + #28949,#28957,#28965,#28973,#28981,#28989,#28997,#29006)); +#28887 = ORIENTED_EDGE('',*,*,#28888,.F.); +#28888 = EDGE_CURVE('',#28889,#28891,#28893,.T.); +#28889 = VERTEX_POINT('',#28890); +#28890 = CARTESIAN_POINT('',(7.499974498734,-0.635731618829, + 0.847290528206)); +#28891 = VERTEX_POINT('',#28892); +#28892 = CARTESIAN_POINT('',(7.499974498734,-0.656859499403, + 0.847290528206)); +#28893 = LINE('',#28894,#28895); +#28894 = CARTESIAN_POINT('',(7.499974498734,-0.656859499403, + 0.847290528206)); +#28895 = VECTOR('',#28896,1.); +#28896 = DIRECTION('',(0.,-1.,-1.026323633433E-14)); +#28897 = ORIENTED_EDGE('',*,*,#28898,.F.); +#28898 = EDGE_CURVE('',#28899,#28889,#28901,.T.); +#28899 = VERTEX_POINT('',#28900); +#28900 = CARTESIAN_POINT('',(7.499974498734,-0.688468139633, + 0.713536071657)); +#28901 = LINE('',#28902,#28903); +#28902 = CARTESIAN_POINT('',(7.499974498734,-0.635731618829, + 0.847290528206)); +#28903 = VECTOR('',#28904,1.); +#28904 = DIRECTION('',(0.,0.366797678951,0.930300737781)); +#28905 = ORIENTED_EDGE('',*,*,#28906,.F.); +#28906 = EDGE_CURVE('',#28907,#28899,#28909,.T.); +#28907 = VERTEX_POINT('',#28908); +#28908 = CARTESIAN_POINT('',(7.499974498734,-0.729933684776, + 0.67635432907)); +#28909 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28910,#28911,#28912,#28913), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#28910 = CARTESIAN_POINT('',(7.499974498734,-0.729933684776, + 0.67635432907)); +#28911 = CARTESIAN_POINT('',(7.499974498734,-0.712091439173, + 0.67635432907)); +#28912 = CARTESIAN_POINT('',(7.499974498734,-0.69828345423, + 0.688748243266)); +#28913 = CARTESIAN_POINT('',(7.499974498734,-0.688468139633, + 0.713536071657)); +#28914 = ORIENTED_EDGE('',*,*,#28915,.F.); +#28915 = EDGE_CURVE('',#28916,#28907,#28918,.T.); +#28916 = VERTEX_POINT('',#28917); +#28917 = CARTESIAN_POINT('',(7.499974498734,-0.743076224661, + 0.678017941714)); +#28918 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28919,#28920,#28921,#28922), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#28919 = CARTESIAN_POINT('',(7.499974498734,-0.743076224661, + 0.678017941714)); +#28920 = CARTESIAN_POINT('',(7.499974498734,-0.739457867161, + 0.676936593496)); +#28921 = CARTESIAN_POINT('',(7.499974498734,-0.735049293655, + 0.67635432907)); +#28922 = CARTESIAN_POINT('',(7.499974498734,-0.729933684776, + 0.67635432907)); +#28923 = ORIENTED_EDGE('',*,*,#28924,.F.); +#28924 = EDGE_CURVE('',#28925,#28916,#28927,.T.); +#28925 = VERTEX_POINT('',#28926); +#28926 = CARTESIAN_POINT('',(7.499974498734,-0.743076224661, + 0.69615131953)); +#28927 = LINE('',#28928,#28929); +#28928 = CARTESIAN_POINT('',(7.499974498734,-0.743076224661, + 0.678017941714)); +#28929 = VECTOR('',#28930,1.); +#28930 = DIRECTION('',(0.,0.,-1.)); +#28931 = ORIENTED_EDGE('',*,*,#28932,.F.); +#28932 = EDGE_CURVE('',#28933,#28925,#28935,.T.); +#28933 = VERTEX_POINT('',#28934); +#28934 = CARTESIAN_POINT('',(7.499974498734,-0.731514116788, + 0.693822261828)); +#28935 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28936,#28937,#28938,#28939), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#28936 = CARTESIAN_POINT('',(7.499974498734,-0.731514116788, + 0.693822261828)); +#28937 = CARTESIAN_POINT('',(7.499974498734,-0.735257245235, + 0.693822261828)); +#28938 = CARTESIAN_POINT('',(7.499974498734,-0.739083554316, + 0.694570887518)); +#28939 = CARTESIAN_POINT('',(7.499974498734,-0.743076224661, + 0.69615131953)); +#28940 = ORIENTED_EDGE('',*,*,#28941,.F.); +#28941 = EDGE_CURVE('',#28942,#28933,#28944,.T.); +#28942 = VERTEX_POINT('',#28943); +#28943 = CARTESIAN_POINT('',(7.499974498734,-0.71063577811, + 0.710208846369)); +#28944 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#28945,#28946,#28947,#28948), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#28945 = CARTESIAN_POINT('',(7.499974498734,-0.71063577811, + 0.710208846369)); +#28946 = CARTESIAN_POINT('',(7.499974498734,-0.715252303196, + 0.699229002921)); +#28947 = CARTESIAN_POINT('',(7.499974498734,-0.722197885983, + 0.693822261828)); +#28948 = CARTESIAN_POINT('',(7.499974498734,-0.731514116788, + 0.693822261828)); +#28949 = ORIENTED_EDGE('',*,*,#28950,.F.); +#28950 = EDGE_CURVE('',#28951,#28942,#28953,.T.); +#28951 = VERTEX_POINT('',#28952); +#28952 = CARTESIAN_POINT('',(7.499974498734,-0.70169386015, + 0.731336726943)); +#28953 = LINE('',#28954,#28955); +#28954 = CARTESIAN_POINT('',(7.499974498734,-0.71063577811, + 0.710208846369)); +#28955 = VECTOR('',#28956,1.); +#28956 = DIRECTION('',(0.,-0.389758265065,-0.920917203017)); +#28957 = ORIENTED_EDGE('',*,*,#28958,.F.); +#28958 = EDGE_CURVE('',#28959,#28951,#28961,.T.); +#28959 = VERTEX_POINT('',#28960); +#28960 = CARTESIAN_POINT('',(7.499974498734,-0.747276846586, + 0.847290528206)); +#28961 = LINE('',#28962,#28963); +#28962 = CARTESIAN_POINT('',(7.499974498734,-0.70169386015, + 0.731336726943)); +#28963 = VECTOR('',#28964,1.); +#28964 = DIRECTION('',(0.,0.365858921669,-0.930670322636)); +#28965 = ORIENTED_EDGE('',*,*,#28966,.F.); +#28966 = EDGE_CURVE('',#28967,#28959,#28969,.T.); +#28967 = VERTEX_POINT('',#28968); +#28968 = CARTESIAN_POINT('',(7.499974498734,-0.724485353368, + 0.847290528206)); +#28969 = LINE('',#28970,#28971); +#28970 = CARTESIAN_POINT('',(7.499974498734,-0.747276846586, + 0.847290528206)); +#28971 = VECTOR('',#28972,1.); +#28972 = DIRECTION('',(0.,-1.,0.)); +#28973 = ORIENTED_EDGE('',*,*,#28974,.F.); +#28974 = EDGE_CURVE('',#28975,#28967,#28977,.T.); +#28975 = VERTEX_POINT('',#28976); +#28976 = CARTESIAN_POINT('',(7.499974498734,-0.694124422621, + 0.759950864414)); +#28977 = LINE('',#28978,#28979); +#28978 = CARTESIAN_POINT('',(7.499974498734,-0.724485353368, + 0.847290528206)); +#28979 = VECTOR('',#28980,1.); +#28980 = DIRECTION('',(0.,-0.328346164813,0.944557460429)); +#28981 = ORIENTED_EDGE('',*,*,#28982,.F.); +#28982 = EDGE_CURVE('',#28983,#28975,#28985,.T.); +#28983 = VERTEX_POINT('',#28984); +#28984 = CARTESIAN_POINT('',(7.499974498734,-0.691629003655, + 0.750385091713)); +#28985 = LINE('',#28986,#28987); +#28986 = CARTESIAN_POINT('',(7.499974498734,-0.694124422621, + 0.759950864414)); +#28987 = VECTOR('',#28988,1.); +#28988 = DIRECTION('',(0.,-0.252421897188,0.967617272386)); +#28989 = ORIENTED_EDGE('',*,*,#28990,.F.); +#28990 = EDGE_CURVE('',#28991,#28983,#28993,.T.); +#28991 = VERTEX_POINT('',#28992); +#28992 = CARTESIAN_POINT('',(7.499974498734,-0.691088329547, + 0.750385091713)); +#28993 = LINE('',#28994,#28995); +#28994 = CARTESIAN_POINT('',(7.499974498734,-0.691629003655, + 0.750385091713)); +#28995 = VECTOR('',#28996,1.); +#28996 = DIRECTION('',(0.,-1.,0.)); +#28997 = ORIENTED_EDGE('',*,*,#28998,.F.); +#28998 = EDGE_CURVE('',#28999,#28991,#29001,.T.); +#28999 = VERTEX_POINT('',#29000); +#29000 = CARTESIAN_POINT('',(7.499974498734,-0.688592910581, + 0.75978450315)); +#29001 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29002,#29003,#29004,#29005), + .UNSPECIFIED.,.F.,.F.,(4,4),(12.,13.),.PIECEWISE_BEZIER_KNOTS.); +#29002 = CARTESIAN_POINT('',(7.499974498734,-0.688592910581, + 0.75978450315)); +#29003 = CARTESIAN_POINT('',(7.499974498734,-0.689840620063, + 0.755708652173)); +#29004 = CARTESIAN_POINT('',(7.499974498734,-0.690672426386, + 0.75254778815)); +#29005 = CARTESIAN_POINT('',(7.499974498734,-0.691088329547, + 0.750385091713)); +#29006 = ORIENTED_EDGE('',*,*,#29007,.F.); +#29007 = EDGE_CURVE('',#28891,#28999,#29008,.T.); +#29008 = LINE('',#29009,#29010); +#29009 = CARTESIAN_POINT('',(7.499974498734,-0.688592910581, + 0.75978450315)); +#29010 = VECTOR('',#29011,1.); +#29011 = DIRECTION('',(0.,-0.340917796219,-0.9400931104)); +#29012 = PLANE('',#29013); +#29013 = AXIS2_PLACEMENT_3D('',#29014,#29015,#29016); +#29014 = CARTESIAN_POINT('',(7.499974498734,-0.706190813077, + 0.685649764717)); +#29015 = DIRECTION('',(1.,-9.74527861199E-14,1.085715603753E-13)); +#29016 = DIRECTION('',(-1.085715603753E-13,0.,1.)); +#29017 = ADVANCED_FACE('',(#29018),#29145,.T.); +#29018 = FACE_BOUND('',#29019,.T.); +#29019 = EDGE_LOOP('',(#29020,#29030,#29038,#29047,#29055,#29063,#29071, + #29079,#29087,#29095,#29104,#29113,#29121,#29130,#29139)); +#29020 = ORIENTED_EDGE('',*,*,#29021,.T.); +#29021 = EDGE_CURVE('',#29022,#29024,#29026,.T.); +#29022 = VERTEX_POINT('',#29023); +#29023 = CARTESIAN_POINT('',(7.50097449872,-0.635731618829, + 0.847290528206)); +#29024 = VERTEX_POINT('',#29025); +#29025 = CARTESIAN_POINT('',(7.50097449872,-0.656859499403, + 0.847290528206)); +#29026 = LINE('',#29027,#29028); +#29027 = CARTESIAN_POINT('',(7.50097449872,-0.656859499403, + 0.847290528206)); +#29028 = VECTOR('',#29029,1.); +#29029 = DIRECTION('',(0.,-1.,-1.026323633433E-14)); +#29030 = ORIENTED_EDGE('',*,*,#29031,.T.); +#29031 = EDGE_CURVE('',#29024,#29032,#29034,.T.); +#29032 = VERTEX_POINT('',#29033); +#29033 = CARTESIAN_POINT('',(7.50097449872,-0.688592910581,0.75978450315 + )); +#29034 = LINE('',#29035,#29036); +#29035 = CARTESIAN_POINT('',(7.50097449872,-0.688592910581,0.75978450315 + )); +#29036 = VECTOR('',#29037,1.); +#29037 = DIRECTION('',(0.,-0.340917796219,-0.9400931104)); +#29038 = ORIENTED_EDGE('',*,*,#29039,.T.); +#29039 = EDGE_CURVE('',#29032,#29040,#29042,.T.); +#29040 = VERTEX_POINT('',#29041); +#29041 = CARTESIAN_POINT('',(7.50097449872,-0.691088329547, + 0.750385091713)); +#29042 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29043,#29044,#29045,#29046), + .UNSPECIFIED.,.F.,.F.,(4,4),(12.,13.),.PIECEWISE_BEZIER_KNOTS.); +#29043 = CARTESIAN_POINT('',(7.50097449872,-0.688592910581,0.75978450315 + )); +#29044 = CARTESIAN_POINT('',(7.50097449872,-0.689840620063, + 0.755708652173)); +#29045 = CARTESIAN_POINT('',(7.50097449872,-0.690672426386,0.75254778815 + )); +#29046 = CARTESIAN_POINT('',(7.50097449872,-0.691088329547, + 0.750385091713)); +#29047 = ORIENTED_EDGE('',*,*,#29048,.T.); +#29048 = EDGE_CURVE('',#29040,#29049,#29051,.T.); +#29049 = VERTEX_POINT('',#29050); +#29050 = CARTESIAN_POINT('',(7.50097449872,-0.691629003655, + 0.750385091713)); +#29051 = LINE('',#29052,#29053); +#29052 = CARTESIAN_POINT('',(7.50097449872,-0.691629003655, + 0.750385091713)); +#29053 = VECTOR('',#29054,1.); +#29054 = DIRECTION('',(0.,-1.,0.)); +#29055 = ORIENTED_EDGE('',*,*,#29056,.T.); +#29056 = EDGE_CURVE('',#29049,#29057,#29059,.T.); +#29057 = VERTEX_POINT('',#29058); +#29058 = CARTESIAN_POINT('',(7.50097449872,-0.694124422621, + 0.759950864414)); +#29059 = LINE('',#29060,#29061); +#29060 = CARTESIAN_POINT('',(7.50097449872,-0.694124422621, + 0.759950864414)); +#29061 = VECTOR('',#29062,1.); +#29062 = DIRECTION('',(0.,-0.252421897188,0.967617272386)); +#29063 = ORIENTED_EDGE('',*,*,#29064,.T.); +#29064 = EDGE_CURVE('',#29057,#29065,#29067,.T.); +#29065 = VERTEX_POINT('',#29066); +#29066 = CARTESIAN_POINT('',(7.50097449872,-0.724485353368, + 0.847290528206)); +#29067 = LINE('',#29068,#29069); +#29068 = CARTESIAN_POINT('',(7.50097449872,-0.724485353368, + 0.847290528206)); +#29069 = VECTOR('',#29070,1.); +#29070 = DIRECTION('',(0.,-0.328346164813,0.944557460429)); +#29071 = ORIENTED_EDGE('',*,*,#29072,.T.); +#29072 = EDGE_CURVE('',#29065,#29073,#29075,.T.); +#29073 = VERTEX_POINT('',#29074); +#29074 = CARTESIAN_POINT('',(7.50097449872,-0.747276846586, + 0.847290528206)); +#29075 = LINE('',#29076,#29077); +#29076 = CARTESIAN_POINT('',(7.50097449872,-0.747276846586, + 0.847290528206)); +#29077 = VECTOR('',#29078,1.); +#29078 = DIRECTION('',(0.,-1.,0.)); +#29079 = ORIENTED_EDGE('',*,*,#29080,.T.); +#29080 = EDGE_CURVE('',#29073,#29081,#29083,.T.); +#29081 = VERTEX_POINT('',#29082); +#29082 = CARTESIAN_POINT('',(7.50097449872,-0.70169386015,0.731336726943 + )); +#29083 = LINE('',#29084,#29085); +#29084 = CARTESIAN_POINT('',(7.50097449872,-0.70169386015,0.731336726943 + )); +#29085 = VECTOR('',#29086,1.); +#29086 = DIRECTION('',(0.,0.365858921669,-0.930670322636)); +#29087 = ORIENTED_EDGE('',*,*,#29088,.T.); +#29088 = EDGE_CURVE('',#29081,#29089,#29091,.T.); +#29089 = VERTEX_POINT('',#29090); +#29090 = CARTESIAN_POINT('',(7.50097449872,-0.71063577811,0.710208846369 + )); +#29091 = LINE('',#29092,#29093); +#29092 = CARTESIAN_POINT('',(7.50097449872,-0.71063577811,0.710208846369 + )); +#29093 = VECTOR('',#29094,1.); +#29094 = DIRECTION('',(0.,-0.389758265065,-0.920917203017)); +#29095 = ORIENTED_EDGE('',*,*,#29096,.T.); +#29096 = EDGE_CURVE('',#29089,#29097,#29099,.T.); +#29097 = VERTEX_POINT('',#29098); +#29098 = CARTESIAN_POINT('',(7.50097449872,-0.731514116788, + 0.693822261828)); +#29099 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29100,#29101,#29102,#29103), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#29100 = CARTESIAN_POINT('',(7.50097449872,-0.71063577811,0.710208846369 + )); +#29101 = CARTESIAN_POINT('',(7.50097449872,-0.715252303196, + 0.699229002921)); +#29102 = CARTESIAN_POINT('',(7.50097449872,-0.722197885983, + 0.693822261828)); +#29103 = CARTESIAN_POINT('',(7.50097449872,-0.731514116788, + 0.693822261828)); +#29104 = ORIENTED_EDGE('',*,*,#29105,.T.); +#29105 = EDGE_CURVE('',#29097,#29106,#29108,.T.); +#29106 = VERTEX_POINT('',#29107); +#29107 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661,0.69615131953 + )); +#29108 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29109,#29110,#29111,#29112), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#29109 = CARTESIAN_POINT('',(7.50097449872,-0.731514116788, + 0.693822261828)); +#29110 = CARTESIAN_POINT('',(7.50097449872,-0.735257245235, + 0.693822261828)); +#29111 = CARTESIAN_POINT('',(7.50097449872,-0.739083554316, + 0.694570887518)); +#29112 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661,0.69615131953 + )); +#29113 = ORIENTED_EDGE('',*,*,#29114,.T.); +#29114 = EDGE_CURVE('',#29106,#29115,#29117,.T.); +#29115 = VERTEX_POINT('',#29116); +#29116 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661, + 0.678017941714)); +#29117 = LINE('',#29118,#29119); +#29118 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661, + 0.678017941714)); +#29119 = VECTOR('',#29120,1.); +#29120 = DIRECTION('',(0.,0.,-1.)); +#29121 = ORIENTED_EDGE('',*,*,#29122,.T.); +#29122 = EDGE_CURVE('',#29115,#29123,#29125,.T.); +#29123 = VERTEX_POINT('',#29124); +#29124 = CARTESIAN_POINT('',(7.50097449872,-0.729933684776,0.67635432907 + )); +#29125 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29126,#29127,#29128,#29129), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#29126 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661, + 0.678017941714)); +#29127 = CARTESIAN_POINT('',(7.50097449872,-0.739457867161, + 0.676936593496)); +#29128 = CARTESIAN_POINT('',(7.50097449872,-0.735049293655,0.67635432907 + )); +#29129 = CARTESIAN_POINT('',(7.50097449872,-0.729933684776,0.67635432907 + )); +#29130 = ORIENTED_EDGE('',*,*,#29131,.T.); +#29131 = EDGE_CURVE('',#29123,#29132,#29134,.T.); +#29132 = VERTEX_POINT('',#29133); +#29133 = CARTESIAN_POINT('',(7.50097449872,-0.688468139633, + 0.713536071657)); +#29134 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29135,#29136,#29137,#29138), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#29135 = CARTESIAN_POINT('',(7.50097449872,-0.729933684776,0.67635432907 + )); +#29136 = CARTESIAN_POINT('',(7.50097449872,-0.712091439173,0.67635432907 + )); +#29137 = CARTESIAN_POINT('',(7.50097449872,-0.69828345423,0.688748243266 + )); +#29138 = CARTESIAN_POINT('',(7.50097449872,-0.688468139633, + 0.713536071657)); +#29139 = ORIENTED_EDGE('',*,*,#29140,.T.); +#29140 = EDGE_CURVE('',#29132,#29022,#29141,.T.); +#29141 = LINE('',#29142,#29143); +#29142 = CARTESIAN_POINT('',(7.50097449872,-0.635731618829, + 0.847290528206)); +#29143 = VECTOR('',#29144,1.); +#29144 = DIRECTION('',(0.,0.366797678951,0.930300737781)); +#29145 = PLANE('',#29146); +#29146 = AXIS2_PLACEMENT_3D('',#29147,#29148,#29149); +#29147 = CARTESIAN_POINT('',(7.50097449872,-0.706190813077, + 0.685649764717)); +#29148 = DIRECTION('',(1.,-9.74527861199E-14,1.085715603753E-13)); +#29149 = DIRECTION('',(-1.085715603753E-13,0.,1.)); +#29150 = ADVANCED_FACE('',(#29151),#29167,.F.); +#29151 = FACE_BOUND('',#29152,.T.); +#29152 = EDGE_LOOP('',(#29153,#29154,#29160,#29161)); +#29153 = ORIENTED_EDGE('',*,*,#28898,.T.); +#29154 = ORIENTED_EDGE('',*,*,#29155,.F.); +#29155 = EDGE_CURVE('',#29022,#28889,#29156,.T.); +#29156 = LINE('',#29157,#29158); +#29157 = CARTESIAN_POINT('',(7.50097449872,-0.635731618829, + 0.847290528206)); +#29158 = VECTOR('',#29159,1.); +#29159 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29160 = ORIENTED_EDGE('',*,*,#29140,.F.); +#29161 = ORIENTED_EDGE('',*,*,#29162,.T.); +#29162 = EDGE_CURVE('',#29132,#28899,#29163,.T.); +#29163 = LINE('',#29164,#29165); +#29164 = CARTESIAN_POINT('',(7.50097449872,-0.688468139633, + 0.713536071657)); +#29165 = VECTOR('',#29166,1.); +#29166 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29167 = PLANE('',#29168); +#29168 = AXIS2_PLACEMENT_3D('',#29169,#29170,#29171); +#29169 = CARTESIAN_POINT('',(7.50097449872,-0.635731618829, + 0.847290528206)); +#29170 = DIRECTION('',(6.496255330951E-15,-0.930300737781,0.366797678951 + )); +#29171 = DIRECTION('',(-1.,-6.982962677688E-15,7.88860905221E-31)); +#29172 = ADVANCED_FACE('',(#29173),#29184,.F.); +#29173 = FACE_BOUND('',#29174,.F.); +#29174 = EDGE_LOOP('',(#29175,#29181,#29182,#29183)); +#29175 = ORIENTED_EDGE('',*,*,#29176,.F.); +#29176 = EDGE_CURVE('',#29123,#28907,#29177,.T.); +#29177 = LINE('',#29178,#29179); +#29178 = CARTESIAN_POINT('',(7.50097449872,-0.729933684776,0.67635432907 + )); +#29179 = VECTOR('',#29180,1.); +#29180 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29181 = ORIENTED_EDGE('',*,*,#29131,.T.); +#29182 = ORIENTED_EDGE('',*,*,#29162,.T.); +#29183 = ORIENTED_EDGE('',*,*,#28906,.F.); +#29184 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#29185,#29186) + ,(#29187,#29188) + ,(#29189,#29190) + ,(#29191,#29192 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(1.,2.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#29185 = CARTESIAN_POINT('',(7.50097449872,-0.729933684776,0.67635432907 + )); +#29186 = CARTESIAN_POINT('',(7.499974498734,-0.729933684776, + 0.67635432907)); +#29187 = CARTESIAN_POINT('',(7.50097449872,-0.712091439173,0.67635432907 + )); +#29188 = CARTESIAN_POINT('',(7.499974498734,-0.712091439173, + 0.67635432907)); +#29189 = CARTESIAN_POINT('',(7.50097449872,-0.69828345423,0.688748243266 + )); +#29190 = CARTESIAN_POINT('',(7.499974498734,-0.69828345423, + 0.688748243266)); +#29191 = CARTESIAN_POINT('',(7.50097449872,-0.688468139633, + 0.713536071657)); +#29192 = CARTESIAN_POINT('',(7.499974498734,-0.688468139633, + 0.713536071657)); +#29193 = ADVANCED_FACE('',(#29194),#29205,.F.); +#29194 = FACE_BOUND('',#29195,.F.); +#29195 = EDGE_LOOP('',(#29196,#29202,#29203,#29204)); +#29196 = ORIENTED_EDGE('',*,*,#29197,.F.); +#29197 = EDGE_CURVE('',#29115,#28916,#29198,.T.); +#29198 = LINE('',#29199,#29200); +#29199 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661, + 0.678017941714)); +#29200 = VECTOR('',#29201,1.); +#29201 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29202 = ORIENTED_EDGE('',*,*,#29122,.T.); +#29203 = ORIENTED_EDGE('',*,*,#29176,.T.); +#29204 = ORIENTED_EDGE('',*,*,#28915,.F.); +#29205 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#29206,#29207) + ,(#29208,#29209) + ,(#29210,#29211) + ,(#29212,#29213 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(2.,3.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#29206 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661, + 0.678017941714)); +#29207 = CARTESIAN_POINT('',(7.499974498734,-0.743076224661, + 0.678017941714)); +#29208 = CARTESIAN_POINT('',(7.50097449872,-0.739457867161, + 0.676936593496)); +#29209 = CARTESIAN_POINT('',(7.499974498734,-0.739457867161, + 0.676936593496)); +#29210 = CARTESIAN_POINT('',(7.50097449872,-0.735049293655,0.67635432907 + )); +#29211 = CARTESIAN_POINT('',(7.499974498734,-0.735049293655, + 0.67635432907)); +#29212 = CARTESIAN_POINT('',(7.50097449872,-0.729933684776,0.67635432907 + )); +#29213 = CARTESIAN_POINT('',(7.499974498734,-0.729933684776, + 0.67635432907)); +#29214 = ADVANCED_FACE('',(#29215),#29226,.F.); +#29215 = FACE_BOUND('',#29216,.T.); +#29216 = EDGE_LOOP('',(#29217,#29218,#29219,#29220)); +#29217 = ORIENTED_EDGE('',*,*,#28924,.T.); +#29218 = ORIENTED_EDGE('',*,*,#29197,.F.); +#29219 = ORIENTED_EDGE('',*,*,#29114,.F.); +#29220 = ORIENTED_EDGE('',*,*,#29221,.T.); +#29221 = EDGE_CURVE('',#29106,#28925,#29222,.T.); +#29222 = LINE('',#29223,#29224); +#29223 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661,0.69615131953 + )); +#29224 = VECTOR('',#29225,1.); +#29225 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29226 = PLANE('',#29227); +#29227 = AXIS2_PLACEMENT_3D('',#29228,#29229,#29230); +#29228 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661, + 0.678017941714)); +#29229 = DIRECTION('',(-6.982962677686E-15,1.,0.)); +#29230 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#29231 = ADVANCED_FACE('',(#29232),#29243,.F.); +#29232 = FACE_BOUND('',#29233,.F.); +#29233 = EDGE_LOOP('',(#29234,#29240,#29241,#29242)); +#29234 = ORIENTED_EDGE('',*,*,#29235,.F.); +#29235 = EDGE_CURVE('',#29097,#28933,#29236,.T.); +#29236 = LINE('',#29237,#29238); +#29237 = CARTESIAN_POINT('',(7.50097449872,-0.731514116788, + 0.693822261828)); +#29238 = VECTOR('',#29239,1.); +#29239 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29240 = ORIENTED_EDGE('',*,*,#29105,.T.); +#29241 = ORIENTED_EDGE('',*,*,#29221,.T.); +#29242 = ORIENTED_EDGE('',*,*,#28932,.F.); +#29243 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#29244,#29245) + ,(#29246,#29247) + ,(#29248,#29249) + ,(#29250,#29251 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(4.,5.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#29244 = CARTESIAN_POINT('',(7.50097449872,-0.731514116788, + 0.693822261828)); +#29245 = CARTESIAN_POINT('',(7.499974498734,-0.731514116788, + 0.693822261828)); +#29246 = CARTESIAN_POINT('',(7.50097449872,-0.735257245235, + 0.693822261828)); +#29247 = CARTESIAN_POINT('',(7.499974498734,-0.735257245235, + 0.693822261828)); +#29248 = CARTESIAN_POINT('',(7.50097449872,-0.739083554316, + 0.694570887518)); +#29249 = CARTESIAN_POINT('',(7.499974498734,-0.739083554316, + 0.694570887518)); +#29250 = CARTESIAN_POINT('',(7.50097449872,-0.743076224661,0.69615131953 + )); +#29251 = CARTESIAN_POINT('',(7.499974498734,-0.743076224661, + 0.69615131953)); +#29252 = ADVANCED_FACE('',(#29253),#29264,.F.); +#29253 = FACE_BOUND('',#29254,.F.); +#29254 = EDGE_LOOP('',(#29255,#29261,#29262,#29263)); +#29255 = ORIENTED_EDGE('',*,*,#29256,.F.); +#29256 = EDGE_CURVE('',#29089,#28942,#29257,.T.); +#29257 = LINE('',#29258,#29259); +#29258 = CARTESIAN_POINT('',(7.50097449872,-0.71063577811,0.710208846369 + )); +#29259 = VECTOR('',#29260,1.); +#29260 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29261 = ORIENTED_EDGE('',*,*,#29096,.T.); +#29262 = ORIENTED_EDGE('',*,*,#29235,.T.); +#29263 = ORIENTED_EDGE('',*,*,#28941,.F.); +#29264 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#29265,#29266) + ,(#29267,#29268) + ,(#29269,#29270) + ,(#29271,#29272 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(5.,6.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#29265 = CARTESIAN_POINT('',(7.50097449872,-0.71063577811,0.710208846369 + )); +#29266 = CARTESIAN_POINT('',(7.499974498734,-0.71063577811, + 0.710208846369)); +#29267 = CARTESIAN_POINT('',(7.50097449872,-0.715252303196, + 0.699229002921)); +#29268 = CARTESIAN_POINT('',(7.499974498734,-0.715252303196, + 0.699229002921)); +#29269 = CARTESIAN_POINT('',(7.50097449872,-0.722197885983, + 0.693822261828)); +#29270 = CARTESIAN_POINT('',(7.499974498734,-0.722197885983, + 0.693822261828)); +#29271 = CARTESIAN_POINT('',(7.50097449872,-0.731514116788, + 0.693822261828)); +#29272 = CARTESIAN_POINT('',(7.499974498734,-0.731514116788, + 0.693822261828)); +#29273 = ADVANCED_FACE('',(#29274),#29285,.F.); +#29274 = FACE_BOUND('',#29275,.T.); +#29275 = EDGE_LOOP('',(#29276,#29277,#29278,#29279)); +#29276 = ORIENTED_EDGE('',*,*,#28950,.T.); +#29277 = ORIENTED_EDGE('',*,*,#29256,.F.); +#29278 = ORIENTED_EDGE('',*,*,#29088,.F.); +#29279 = ORIENTED_EDGE('',*,*,#29280,.T.); +#29280 = EDGE_CURVE('',#29081,#28951,#29281,.T.); +#29281 = LINE('',#29282,#29283); +#29282 = CARTESIAN_POINT('',(7.50097449872,-0.70169386015,0.731336726943 + )); +#29283 = VECTOR('',#29284,1.); +#29284 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29285 = PLANE('',#29286); +#29286 = AXIS2_PLACEMENT_3D('',#29287,#29288,#29289); +#29287 = CARTESIAN_POINT('',(7.50097449872,-0.71063577811,0.710208846369 + )); +#29288 = DIRECTION('',(-6.430730457912E-15,0.920917203017, + -0.389758265065)); +#29289 = DIRECTION('',(-1.,0.,1.649927925669E-14)); +#29290 = ADVANCED_FACE('',(#29291),#29302,.F.); +#29291 = FACE_BOUND('',#29292,.T.); +#29292 = EDGE_LOOP('',(#29293,#29294,#29295,#29296)); +#29293 = ORIENTED_EDGE('',*,*,#28958,.T.); +#29294 = ORIENTED_EDGE('',*,*,#29280,.F.); +#29295 = ORIENTED_EDGE('',*,*,#29080,.F.); +#29296 = ORIENTED_EDGE('',*,*,#29297,.T.); +#29297 = EDGE_CURVE('',#29073,#28959,#29298,.T.); +#29298 = LINE('',#29299,#29300); +#29299 = CARTESIAN_POINT('',(7.50097449872,-0.747276846586, + 0.847290528206)); +#29300 = VECTOR('',#29301,1.); +#29301 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29302 = PLANE('',#29303); +#29303 = AXIS2_PLACEMENT_3D('',#29304,#29305,#29306); +#29304 = CARTESIAN_POINT('',(7.50097449872,-0.70169386015,0.731336726943 + )); +#29305 = DIRECTION('',(-6.498836128195E-15,0.930670322636,0.365858921669 + )); +#29306 = DIRECTION('',(1.,7.88860905221E-31,1.77632298771E-14)); +#29307 = ADVANCED_FACE('',(#29308),#29319,.F.); +#29308 = FACE_BOUND('',#29309,.T.); +#29309 = EDGE_LOOP('',(#29310,#29311,#29312,#29313)); +#29310 = ORIENTED_EDGE('',*,*,#28966,.T.); +#29311 = ORIENTED_EDGE('',*,*,#29297,.F.); +#29312 = ORIENTED_EDGE('',*,*,#29072,.F.); +#29313 = ORIENTED_EDGE('',*,*,#29314,.T.); +#29314 = EDGE_CURVE('',#29065,#28967,#29315,.T.); +#29315 = LINE('',#29316,#29317); +#29316 = CARTESIAN_POINT('',(7.50097449872,-0.724485353368, + 0.847290528206)); +#29317 = VECTOR('',#29318,1.); +#29318 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29319 = PLANE('',#29320); +#29320 = AXIS2_PLACEMENT_3D('',#29321,#29322,#29323); +#29321 = CARTESIAN_POINT('',(7.50097449872,-0.747276846586, + 0.847290528206)); +#29322 = DIRECTION('',(0.,0.,-1.)); +#29323 = DIRECTION('',(0.,-1.,0.)); +#29324 = ADVANCED_FACE('',(#29325),#29336,.F.); +#29325 = FACE_BOUND('',#29326,.T.); +#29326 = EDGE_LOOP('',(#29327,#29328,#29329,#29330)); +#29327 = ORIENTED_EDGE('',*,*,#28974,.T.); +#29328 = ORIENTED_EDGE('',*,*,#29314,.F.); +#29329 = ORIENTED_EDGE('',*,*,#29064,.F.); +#29330 = ORIENTED_EDGE('',*,*,#29331,.T.); +#29331 = EDGE_CURVE('',#29057,#28975,#29332,.T.); +#29332 = LINE('',#29333,#29334); +#29333 = CARTESIAN_POINT('',(7.50097449872,-0.694124422621, + 0.759950864414)); +#29334 = VECTOR('',#29335,1.); +#29335 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29336 = PLANE('',#29337); +#29337 = AXIS2_PLACEMENT_3D('',#29338,#29339,#29340); +#29338 = CARTESIAN_POINT('',(7.50097449872,-0.724485353368, + 0.847290528206)); +#29339 = DIRECTION('',(6.595809493111E-15,-0.944557460429, + -0.328346164813)); +#29340 = DIRECTION('',(0.,0.328346164813,-0.944557460429)); +#29341 = ADVANCED_FACE('',(#29342),#29353,.F.); +#29342 = FACE_BOUND('',#29343,.T.); +#29343 = EDGE_LOOP('',(#29344,#29345,#29346,#29347)); +#29344 = ORIENTED_EDGE('',*,*,#28982,.T.); +#29345 = ORIENTED_EDGE('',*,*,#29331,.F.); +#29346 = ORIENTED_EDGE('',*,*,#29056,.F.); +#29347 = ORIENTED_EDGE('',*,*,#29348,.T.); +#29348 = EDGE_CURVE('',#29049,#28983,#29349,.T.); +#29349 = LINE('',#29350,#29351); +#29350 = CARTESIAN_POINT('',(7.50097449872,-0.691629003655, + 0.750385091713)); +#29351 = VECTOR('',#29352,1.); +#29352 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29353 = PLANE('',#29354); +#29354 = AXIS2_PLACEMENT_3D('',#29355,#29356,#29357); +#29355 = CARTESIAN_POINT('',(7.50097449872,-0.694124422621, + 0.759950864414)); +#29356 = DIRECTION('',(6.756835299358E-15,-0.967617272386, + -0.252421897188)); +#29357 = DIRECTION('',(0.,0.252421897188,-0.967617272386)); +#29358 = ADVANCED_FACE('',(#29359),#29370,.F.); +#29359 = FACE_BOUND('',#29360,.T.); +#29360 = EDGE_LOOP('',(#29361,#29362,#29363,#29364)); +#29361 = ORIENTED_EDGE('',*,*,#28990,.T.); +#29362 = ORIENTED_EDGE('',*,*,#29348,.F.); +#29363 = ORIENTED_EDGE('',*,*,#29048,.F.); +#29364 = ORIENTED_EDGE('',*,*,#29365,.T.); +#29365 = EDGE_CURVE('',#29040,#28991,#29366,.T.); +#29366 = LINE('',#29367,#29368); +#29367 = CARTESIAN_POINT('',(7.50097449872,-0.691088329547, + 0.750385091713)); +#29368 = VECTOR('',#29369,1.); +#29369 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29370 = PLANE('',#29371); +#29371 = AXIS2_PLACEMENT_3D('',#29372,#29373,#29374); +#29372 = CARTESIAN_POINT('',(7.50097449872,-0.691629003655, + 0.750385091713)); +#29373 = DIRECTION('',(0.,0.,-1.)); +#29374 = DIRECTION('',(0.,-1.,0.)); +#29375 = ADVANCED_FACE('',(#29376),#29387,.F.); +#29376 = FACE_BOUND('',#29377,.F.); +#29377 = EDGE_LOOP('',(#29378,#29384,#29385,#29386)); +#29378 = ORIENTED_EDGE('',*,*,#29379,.F.); +#29379 = EDGE_CURVE('',#29032,#28999,#29380,.T.); +#29380 = LINE('',#29381,#29382); +#29381 = CARTESIAN_POINT('',(7.50097449872,-0.688592910581,0.75978450315 + )); +#29382 = VECTOR('',#29383,1.); +#29383 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29384 = ORIENTED_EDGE('',*,*,#29039,.T.); +#29385 = ORIENTED_EDGE('',*,*,#29365,.T.); +#29386 = ORIENTED_EDGE('',*,*,#28998,.F.); +#29387 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#29388,#29389) + ,(#29390,#29391) + ,(#29392,#29393) + ,(#29394,#29395 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(12.,13.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#29388 = CARTESIAN_POINT('',(7.50097449872,-0.688592910581,0.75978450315 + )); +#29389 = CARTESIAN_POINT('',(7.499974498734,-0.688592910581, + 0.75978450315)); +#29390 = CARTESIAN_POINT('',(7.50097449872,-0.689840620063, + 0.755708652173)); +#29391 = CARTESIAN_POINT('',(7.499974498734,-0.689840620063, + 0.755708652173)); +#29392 = CARTESIAN_POINT('',(7.50097449872,-0.690672426386,0.75254778815 + )); +#29393 = CARTESIAN_POINT('',(7.499974498734,-0.690672426386, + 0.75254778815)); +#29394 = CARTESIAN_POINT('',(7.50097449872,-0.691088329547, + 0.750385091713)); +#29395 = CARTESIAN_POINT('',(7.499974498734,-0.691088329547, + 0.750385091713)); +#29396 = ADVANCED_FACE('',(#29397),#29408,.F.); +#29397 = FACE_BOUND('',#29398,.T.); +#29398 = EDGE_LOOP('',(#29399,#29400,#29401,#29402)); +#29399 = ORIENTED_EDGE('',*,*,#29007,.T.); +#29400 = ORIENTED_EDGE('',*,*,#29379,.F.); +#29401 = ORIENTED_EDGE('',*,*,#29031,.F.); +#29402 = ORIENTED_EDGE('',*,*,#29403,.T.); +#29403 = EDGE_CURVE('',#29024,#28891,#29404,.T.); +#29404 = LINE('',#29405,#29406); +#29405 = CARTESIAN_POINT('',(7.50097449872,-0.656859499403, + 0.847290528206)); +#29406 = VECTOR('',#29407,1.); +#29407 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29408 = PLANE('',#29409); +#29409 = AXIS2_PLACEMENT_3D('',#29410,#29411,#29412); +#29410 = CARTESIAN_POINT('',(7.50097449872,-0.688592910581,0.75978450315 + )); +#29411 = DIRECTION('',(-6.564635103472E-15,0.9400931104,-0.340917796219) + ); +#29412 = DIRECTION('',(-1.,0.,1.925577126298E-14)); +#29413 = ADVANCED_FACE('',(#29414),#29420,.F.); +#29414 = FACE_BOUND('',#29415,.T.); +#29415 = EDGE_LOOP('',(#29416,#29417,#29418,#29419)); +#29416 = ORIENTED_EDGE('',*,*,#28888,.T.); +#29417 = ORIENTED_EDGE('',*,*,#29403,.F.); +#29418 = ORIENTED_EDGE('',*,*,#29021,.F.); +#29419 = ORIENTED_EDGE('',*,*,#29155,.T.); +#29420 = PLANE('',#29421); +#29421 = AXIS2_PLACEMENT_3D('',#29422,#29423,#29424); +#29422 = CARTESIAN_POINT('',(7.50097449872,-0.656859499403, + 0.847290528206)); +#29423 = DIRECTION('',(-7.166779627487E-29,1.026323633433E-14,-1.)); +#29424 = DIRECTION('',(-1.,0.,7.166779627487E-29)); +#29425 = MANIFOLD_SOLID_BREP('',#29426); +#29426 = CLOSED_SHELL('',(#29427,#29531,#29635,#29657,#29674,#29691, + #29708,#29725,#29742,#29759,#29776,#29793,#29810,#29827)); +#29427 = ADVANCED_FACE('',(#29428),#29526,.T.); +#29428 = FACE_BOUND('',#29429,.T.); +#29429 = EDGE_LOOP('',(#29430,#29440,#29448,#29456,#29464,#29472,#29480, + #29488,#29496,#29504,#29512,#29520)); +#29430 = ORIENTED_EDGE('',*,*,#29431,.F.); +#29431 = EDGE_CURVE('',#29432,#29434,#29436,.T.); +#29432 = VERTEX_POINT('',#29433); +#29433 = CARTESIAN_POINT('',(7.499974498734,-0.526265906876, + 0.731087185047)); +#29434 = VERTEX_POINT('',#29435); +#29435 = CARTESIAN_POINT('',(7.499974498734,-0.526265906876, + 0.749636466024)); +#29436 = LINE('',#29437,#29438); +#29437 = CARTESIAN_POINT('',(7.499974498734,-0.526265906876, + 0.749636466024)); +#29438 = VECTOR('',#29439,1.); +#29439 = DIRECTION('',(0.,0.,1.)); +#29440 = ORIENTED_EDGE('',*,*,#29441,.F.); +#29441 = EDGE_CURVE('',#29442,#29432,#29444,.T.); +#29442 = VERTEX_POINT('',#29443); +#29443 = CARTESIAN_POINT('',(7.499974498734,-0.613771931932, + 0.731087185047)); +#29444 = LINE('',#29445,#29446); +#29445 = CARTESIAN_POINT('',(7.499974498734,-0.526265906876, + 0.731087185047)); +#29446 = VECTOR('',#29447,1.); +#29447 = DIRECTION('',(0.,1.,2.478005730817E-15)); +#29448 = ORIENTED_EDGE('',*,*,#29449,.F.); +#29449 = EDGE_CURVE('',#29450,#29442,#29452,.T.); +#29450 = VERTEX_POINT('',#29451); +#29451 = CARTESIAN_POINT('',(7.499974498734,-0.613771931932, + 0.893788501596)); +#29452 = LINE('',#29453,#29454); +#29453 = CARTESIAN_POINT('',(7.499974498734,-0.613771931932, + 0.731087185047)); +#29454 = VECTOR('',#29455,1.); +#29455 = DIRECTION('',(0.,3.998254645438E-15,-1.)); +#29456 = ORIENTED_EDGE('',*,*,#29457,.F.); +#29457 = EDGE_CURVE('',#29458,#29450,#29460,.T.); +#29458 = VERTEX_POINT('',#29459); +#29459 = CARTESIAN_POINT('',(7.499974498734,-0.529967445008, + 0.893788501596)); +#29460 = LINE('',#29461,#29462); +#29461 = CARTESIAN_POINT('',(7.499974498734,-0.613771931932, + 0.893788501596)); +#29462 = VECTOR('',#29463,1.); +#29463 = DIRECTION('',(0.,-1.,-3.881184162024E-15)); +#29464 = ORIENTED_EDGE('',*,*,#29465,.F.); +#29465 = EDGE_CURVE('',#29466,#29458,#29468,.T.); +#29466 = VERTEX_POINT('',#29467); +#29467 = CARTESIAN_POINT('',(7.499974498734,-0.529967445008, + 0.875072859356)); +#29468 = LINE('',#29469,#29470); +#29469 = CARTESIAN_POINT('',(7.499974498734,-0.529967445008, + 0.893788501596)); +#29470 = VECTOR('',#29471,1.); +#29471 = DIRECTION('',(0.,0.,1.)); +#29472 = ORIENTED_EDGE('',*,*,#29473,.F.); +#29473 = EDGE_CURVE('',#29474,#29466,#29476,.T.); +#29474 = VERTEX_POINT('',#29475); +#29475 = CARTESIAN_POINT('',(7.499974498734,-0.592768822306, + 0.875072859356)); +#29476 = LINE('',#29477,#29478); +#29477 = CARTESIAN_POINT('',(7.499974498734,-0.529967445008, + 0.875072859356)); +#29478 = VECTOR('',#29479,1.); +#29479 = DIRECTION('',(0.,1.,3.452797389201E-15)); +#29480 = ORIENTED_EDGE('',*,*,#29481,.F.); +#29481 = EDGE_CURVE('',#29482,#29474,#29484,.T.); +#29482 = VERTEX_POINT('',#29483); +#29483 = CARTESIAN_POINT('',(7.499974498734,-0.592768822306, + 0.823001783609)); +#29484 = LINE('',#29485,#29486); +#29485 = CARTESIAN_POINT('',(7.499974498734,-0.592768822306, + 0.875072859356)); +#29486 = VECTOR('',#29487,1.); +#29487 = DIRECTION('',(0.,0.,1.)); +#29488 = ORIENTED_EDGE('',*,*,#29489,.F.); +#29489 = EDGE_CURVE('',#29490,#29482,#29492,.T.); +#29490 = VERTEX_POINT('',#29491); +#29491 = CARTESIAN_POINT('',(7.499974498734,-0.534583970095, + 0.823001783609)); +#29492 = LINE('',#29493,#29494); +#29493 = CARTESIAN_POINT('',(7.499974498734,-0.592768822306, + 0.823001783609)); +#29494 = VECTOR('',#29495,1.); +#29495 = DIRECTION('',(0.,-1.,-3.726750577357E-15)); +#29496 = ORIENTED_EDGE('',*,*,#29497,.F.); +#29497 = EDGE_CURVE('',#29498,#29490,#29500,.T.); +#29498 = VERTEX_POINT('',#29499); +#29499 = CARTESIAN_POINT('',(7.499974498734,-0.534583970095,0.804369322) + ); +#29500 = LINE('',#29501,#29502); +#29501 = CARTESIAN_POINT('',(7.499974498734,-0.534583970095, + 0.823001783609)); +#29502 = VECTOR('',#29503,1.); +#29503 = DIRECTION('',(0.,-1.163777691449E-14,1.)); +#29504 = ORIENTED_EDGE('',*,*,#29505,.F.); +#29505 = EDGE_CURVE('',#29506,#29498,#29508,.T.); +#29506 = VERTEX_POINT('',#29507); +#29507 = CARTESIAN_POINT('',(7.499974498734,-0.592768822306,0.804369322) + ); +#29508 = LINE('',#29509,#29510); +#29509 = CARTESIAN_POINT('',(7.499974498734,-0.534583970095,0.804369322) + ); +#29510 = VECTOR('',#29511,1.); +#29511 = DIRECTION('',(0.,1.,3.726750577357E-15)); +#29512 = ORIENTED_EDGE('',*,*,#29513,.F.); +#29513 = EDGE_CURVE('',#29514,#29506,#29516,.T.); +#29514 = VERTEX_POINT('',#29515); +#29515 = CARTESIAN_POINT('',(7.499974498734,-0.592768822306, + 0.749636466024)); +#29516 = LINE('',#29517,#29518); +#29517 = CARTESIAN_POINT('',(7.499974498734,-0.592768822306,0.804369322) + ); +#29518 = VECTOR('',#29519,1.); +#29519 = DIRECTION('',(0.,-3.961796396406E-15,1.)); +#29520 = ORIENTED_EDGE('',*,*,#29521,.F.); +#29521 = EDGE_CURVE('',#29434,#29514,#29522,.T.); +#29522 = LINE('',#29523,#29524); +#29523 = CARTESIAN_POINT('',(7.499974498734,-0.592768822306, + 0.749636466024)); +#29524 = VECTOR('',#29525,1.); +#29525 = DIRECTION('',(0.,-1.,-3.260615420684E-15)); +#29526 = PLANE('',#29527); +#29527 = AXIS2_PLACEMENT_3D('',#29528,#29529,#29530); +#29528 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 1.849999998875)); +#29529 = DIRECTION('',(-1.,0.,0.)); +#29530 = DIRECTION('',(0.,0.,1.)); +#29531 = ADVANCED_FACE('',(#29532),#29630,.F.); +#29532 = FACE_BOUND('',#29533,.T.); +#29533 = EDGE_LOOP('',(#29534,#29544,#29552,#29560,#29568,#29576,#29584, + #29592,#29600,#29608,#29616,#29624)); +#29534 = ORIENTED_EDGE('',*,*,#29535,.T.); +#29535 = EDGE_CURVE('',#29536,#29538,#29540,.T.); +#29536 = VERTEX_POINT('',#29537); +#29537 = CARTESIAN_POINT('',(7.50097449872,-0.526265906876, + 0.731087185047)); +#29538 = VERTEX_POINT('',#29539); +#29539 = CARTESIAN_POINT('',(7.50097449872,-0.526265906876, + 0.749636466024)); +#29540 = LINE('',#29541,#29542); +#29541 = CARTESIAN_POINT('',(7.50097449872,-0.526265906876, + 0.749636466024)); +#29542 = VECTOR('',#29543,1.); +#29543 = DIRECTION('',(0.,0.,1.)); +#29544 = ORIENTED_EDGE('',*,*,#29545,.T.); +#29545 = EDGE_CURVE('',#29538,#29546,#29548,.T.); +#29546 = VERTEX_POINT('',#29547); +#29547 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.749636466024)); +#29548 = LINE('',#29549,#29550); +#29549 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.749636466024)); +#29550 = VECTOR('',#29551,1.); +#29551 = DIRECTION('',(0.,-1.,-3.260615420684E-15)); +#29552 = ORIENTED_EDGE('',*,*,#29553,.T.); +#29553 = EDGE_CURVE('',#29546,#29554,#29556,.T.); +#29554 = VERTEX_POINT('',#29555); +#29555 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306,0.804369322) + ); +#29556 = LINE('',#29557,#29558); +#29557 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306,0.804369322) + ); +#29558 = VECTOR('',#29559,1.); +#29559 = DIRECTION('',(0.,-3.961796396406E-15,1.)); +#29560 = ORIENTED_EDGE('',*,*,#29561,.T.); +#29561 = EDGE_CURVE('',#29554,#29562,#29564,.T.); +#29562 = VERTEX_POINT('',#29563); +#29563 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095,0.804369322) + ); +#29564 = LINE('',#29565,#29566); +#29565 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095,0.804369322) + ); +#29566 = VECTOR('',#29567,1.); +#29567 = DIRECTION('',(0.,1.,3.726750577357E-15)); +#29568 = ORIENTED_EDGE('',*,*,#29569,.T.); +#29569 = EDGE_CURVE('',#29562,#29570,#29572,.T.); +#29570 = VERTEX_POINT('',#29571); +#29571 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095, + 0.823001783609)); +#29572 = LINE('',#29573,#29574); +#29573 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095, + 0.823001783609)); +#29574 = VECTOR('',#29575,1.); +#29575 = DIRECTION('',(0.,-1.163777691449E-14,1.)); +#29576 = ORIENTED_EDGE('',*,*,#29577,.T.); +#29577 = EDGE_CURVE('',#29570,#29578,#29580,.T.); +#29578 = VERTEX_POINT('',#29579); +#29579 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.823001783609)); +#29580 = LINE('',#29581,#29582); +#29581 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.823001783609)); +#29582 = VECTOR('',#29583,1.); +#29583 = DIRECTION('',(0.,-1.,-3.726750577357E-15)); +#29584 = ORIENTED_EDGE('',*,*,#29585,.T.); +#29585 = EDGE_CURVE('',#29578,#29586,#29588,.T.); +#29586 = VERTEX_POINT('',#29587); +#29587 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.875072859356)); +#29588 = LINE('',#29589,#29590); +#29589 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.875072859356)); +#29590 = VECTOR('',#29591,1.); +#29591 = DIRECTION('',(0.,0.,1.)); +#29592 = ORIENTED_EDGE('',*,*,#29593,.T.); +#29593 = EDGE_CURVE('',#29586,#29594,#29596,.T.); +#29594 = VERTEX_POINT('',#29595); +#29595 = CARTESIAN_POINT('',(7.50097449872,-0.529967445008, + 0.875072859356)); +#29596 = LINE('',#29597,#29598); +#29597 = CARTESIAN_POINT('',(7.50097449872,-0.529967445008, + 0.875072859356)); +#29598 = VECTOR('',#29599,1.); +#29599 = DIRECTION('',(0.,1.,3.452797389201E-15)); +#29600 = ORIENTED_EDGE('',*,*,#29601,.T.); +#29601 = EDGE_CURVE('',#29594,#29602,#29604,.T.); +#29602 = VERTEX_POINT('',#29603); +#29603 = CARTESIAN_POINT('',(7.50097449872,-0.529967445008, + 0.893788501596)); +#29604 = LINE('',#29605,#29606); +#29605 = CARTESIAN_POINT('',(7.50097449872,-0.529967445008, + 0.893788501596)); +#29606 = VECTOR('',#29607,1.); +#29607 = DIRECTION('',(0.,0.,1.)); +#29608 = ORIENTED_EDGE('',*,*,#29609,.T.); +#29609 = EDGE_CURVE('',#29602,#29610,#29612,.T.); +#29610 = VERTEX_POINT('',#29611); +#29611 = CARTESIAN_POINT('',(7.50097449872,-0.613771931932, + 0.893788501596)); +#29612 = LINE('',#29613,#29614); +#29613 = CARTESIAN_POINT('',(7.50097449872,-0.613771931932, + 0.893788501596)); +#29614 = VECTOR('',#29615,1.); +#29615 = DIRECTION('',(0.,-1.,-3.881184162024E-15)); +#29616 = ORIENTED_EDGE('',*,*,#29617,.T.); +#29617 = EDGE_CURVE('',#29610,#29618,#29620,.T.); +#29618 = VERTEX_POINT('',#29619); +#29619 = CARTESIAN_POINT('',(7.50097449872,-0.613771931932, + 0.731087185047)); +#29620 = LINE('',#29621,#29622); +#29621 = CARTESIAN_POINT('',(7.50097449872,-0.613771931932, + 0.731087185047)); +#29622 = VECTOR('',#29623,1.); +#29623 = DIRECTION('',(0.,3.998254645438E-15,-1.)); +#29624 = ORIENTED_EDGE('',*,*,#29625,.T.); +#29625 = EDGE_CURVE('',#29618,#29536,#29626,.T.); +#29626 = LINE('',#29627,#29628); +#29627 = CARTESIAN_POINT('',(7.50097449872,-0.526265906876, + 0.731087185047)); +#29628 = VECTOR('',#29629,1.); +#29629 = DIRECTION('',(0.,1.,2.478005730817E-15)); +#29630 = PLANE('',#29631); +#29631 = AXIS2_PLACEMENT_3D('',#29632,#29633,#29634); +#29632 = CARTESIAN_POINT('',(7.50097449872,0.934963205914,1.849999998875 + )); +#29633 = DIRECTION('',(-1.,0.,0.)); +#29634 = DIRECTION('',(0.,0.,1.)); +#29635 = ADVANCED_FACE('',(#29636),#29652,.F.); +#29636 = FACE_BOUND('',#29637,.T.); +#29637 = EDGE_LOOP('',(#29638,#29639,#29645,#29646)); +#29638 = ORIENTED_EDGE('',*,*,#29441,.T.); +#29639 = ORIENTED_EDGE('',*,*,#29640,.F.); +#29640 = EDGE_CURVE('',#29536,#29432,#29641,.T.); +#29641 = LINE('',#29642,#29643); +#29642 = CARTESIAN_POINT('',(7.50097449872,-0.526265906876, + 0.731087185047)); +#29643 = VECTOR('',#29644,1.); +#29644 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29645 = ORIENTED_EDGE('',*,*,#29625,.F.); +#29646 = ORIENTED_EDGE('',*,*,#29647,.T.); +#29647 = EDGE_CURVE('',#29618,#29442,#29648,.T.); +#29648 = LINE('',#29649,#29650); +#29649 = CARTESIAN_POINT('',(7.50097449872,-0.613771931932, + 0.731087185047)); +#29650 = VECTOR('',#29651,1.); +#29651 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29652 = PLANE('',#29653); +#29653 = AXIS2_PLACEMENT_3D('',#29654,#29655,#29656); +#29654 = CARTESIAN_POINT('',(7.50097449872,-0.526265906876, + 0.731087185047)); +#29655 = DIRECTION('',(1.730382153339E-29,-2.478005730817E-15,1.)); +#29656 = DIRECTION('',(0.,-1.,-2.478005730817E-15)); +#29657 = ADVANCED_FACE('',(#29658),#29669,.F.); +#29658 = FACE_BOUND('',#29659,.T.); +#29659 = EDGE_LOOP('',(#29660,#29661,#29662,#29663)); +#29660 = ORIENTED_EDGE('',*,*,#29449,.T.); +#29661 = ORIENTED_EDGE('',*,*,#29647,.F.); +#29662 = ORIENTED_EDGE('',*,*,#29617,.F.); +#29663 = ORIENTED_EDGE('',*,*,#29664,.T.); +#29664 = EDGE_CURVE('',#29610,#29450,#29665,.T.); +#29665 = LINE('',#29666,#29667); +#29666 = CARTESIAN_POINT('',(7.50097449872,-0.613771931932, + 0.893788501596)); +#29667 = VECTOR('',#29668,1.); +#29668 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29669 = PLANE('',#29670); +#29670 = AXIS2_PLACEMENT_3D('',#29671,#29672,#29673); +#29671 = CARTESIAN_POINT('',(7.50097449872,-0.613771931932, + 0.731087185047)); +#29672 = DIRECTION('',(-6.982962677686E-15,1.,3.998254645438E-15)); +#29673 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#29674 = ADVANCED_FACE('',(#29675),#29686,.F.); +#29675 = FACE_BOUND('',#29676,.T.); +#29676 = EDGE_LOOP('',(#29677,#29678,#29679,#29680)); +#29677 = ORIENTED_EDGE('',*,*,#29457,.T.); +#29678 = ORIENTED_EDGE('',*,*,#29664,.F.); +#29679 = ORIENTED_EDGE('',*,*,#29609,.F.); +#29680 = ORIENTED_EDGE('',*,*,#29681,.T.); +#29681 = EDGE_CURVE('',#29602,#29458,#29682,.T.); +#29682 = LINE('',#29683,#29684); +#29683 = CARTESIAN_POINT('',(7.50097449872,-0.529967445008, + 0.893788501596)); +#29684 = VECTOR('',#29685,1.); +#29685 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29686 = PLANE('',#29687); +#29687 = AXIS2_PLACEMENT_3D('',#29688,#29689,#29690); +#29688 = CARTESIAN_POINT('',(7.50097449872,-0.613771931932, + 0.893788501596)); +#29689 = DIRECTION('',(-2.710216414864E-29,3.881184162024E-15,-1.)); +#29690 = DIRECTION('',(-1.,0.,2.710216414864E-29)); +#29691 = ADVANCED_FACE('',(#29692),#29703,.F.); +#29692 = FACE_BOUND('',#29693,.T.); +#29693 = EDGE_LOOP('',(#29694,#29695,#29696,#29697)); +#29694 = ORIENTED_EDGE('',*,*,#29465,.T.); +#29695 = ORIENTED_EDGE('',*,*,#29681,.F.); +#29696 = ORIENTED_EDGE('',*,*,#29601,.F.); +#29697 = ORIENTED_EDGE('',*,*,#29698,.T.); +#29698 = EDGE_CURVE('',#29594,#29466,#29699,.T.); +#29699 = LINE('',#29700,#29701); +#29700 = CARTESIAN_POINT('',(7.50097449872,-0.529967445008, + 0.875072859356)); +#29701 = VECTOR('',#29702,1.); +#29702 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29703 = PLANE('',#29704); +#29704 = AXIS2_PLACEMENT_3D('',#29705,#29706,#29707); +#29705 = CARTESIAN_POINT('',(7.50097449872,-0.529967445008, + 0.893788501596)); +#29706 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#29707 = DIRECTION('',(0.,0.,-1.)); +#29708 = ADVANCED_FACE('',(#29709),#29720,.F.); +#29709 = FACE_BOUND('',#29710,.T.); +#29710 = EDGE_LOOP('',(#29711,#29712,#29713,#29714)); +#29711 = ORIENTED_EDGE('',*,*,#29473,.T.); +#29712 = ORIENTED_EDGE('',*,*,#29698,.F.); +#29713 = ORIENTED_EDGE('',*,*,#29593,.F.); +#29714 = ORIENTED_EDGE('',*,*,#29715,.T.); +#29715 = EDGE_CURVE('',#29586,#29474,#29716,.T.); +#29716 = LINE('',#29717,#29718); +#29717 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.875072859356)); +#29718 = VECTOR('',#29719,1.); +#29719 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29720 = PLANE('',#29721); +#29721 = AXIS2_PLACEMENT_3D('',#29722,#29723,#29724); +#29722 = CARTESIAN_POINT('',(7.50097449872,-0.529967445008, + 0.875072859356)); +#29723 = DIRECTION('',(2.41107553024E-29,-3.452797389201E-15,1.)); +#29724 = DIRECTION('',(0.,-1.,-3.452797389201E-15)); +#29725 = ADVANCED_FACE('',(#29726),#29737,.F.); +#29726 = FACE_BOUND('',#29727,.T.); +#29727 = EDGE_LOOP('',(#29728,#29729,#29730,#29731)); +#29728 = ORIENTED_EDGE('',*,*,#29481,.T.); +#29729 = ORIENTED_EDGE('',*,*,#29715,.F.); +#29730 = ORIENTED_EDGE('',*,*,#29585,.F.); +#29731 = ORIENTED_EDGE('',*,*,#29732,.T.); +#29732 = EDGE_CURVE('',#29578,#29482,#29733,.T.); +#29733 = LINE('',#29734,#29735); +#29734 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.823001783609)); +#29735 = VECTOR('',#29736,1.); +#29736 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29737 = PLANE('',#29738); +#29738 = AXIS2_PLACEMENT_3D('',#29739,#29740,#29741); +#29739 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.875072859356)); +#29740 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#29741 = DIRECTION('',(0.,0.,-1.)); +#29742 = ADVANCED_FACE('',(#29743),#29754,.F.); +#29743 = FACE_BOUND('',#29744,.T.); +#29744 = EDGE_LOOP('',(#29745,#29746,#29747,#29748)); +#29745 = ORIENTED_EDGE('',*,*,#29489,.T.); +#29746 = ORIENTED_EDGE('',*,*,#29732,.F.); +#29747 = ORIENTED_EDGE('',*,*,#29577,.F.); +#29748 = ORIENTED_EDGE('',*,*,#29749,.T.); +#29749 = EDGE_CURVE('',#29570,#29490,#29750,.T.); +#29750 = LINE('',#29751,#29752); +#29751 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095, + 0.823001783609)); +#29752 = VECTOR('',#29753,1.); +#29753 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29754 = PLANE('',#29755); +#29755 = AXIS2_PLACEMENT_3D('',#29756,#29757,#29758); +#29756 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.823001783609)); +#29757 = DIRECTION('',(-2.602376019073E-29,3.726750577357E-15,-1.)); +#29758 = DIRECTION('',(-1.,0.,2.602376019073E-29)); +#29759 = ADVANCED_FACE('',(#29760),#29771,.F.); +#29760 = FACE_BOUND('',#29761,.T.); +#29761 = EDGE_LOOP('',(#29762,#29763,#29764,#29765)); +#29762 = ORIENTED_EDGE('',*,*,#29497,.T.); +#29763 = ORIENTED_EDGE('',*,*,#29749,.F.); +#29764 = ORIENTED_EDGE('',*,*,#29569,.F.); +#29765 = ORIENTED_EDGE('',*,*,#29766,.T.); +#29766 = EDGE_CURVE('',#29562,#29498,#29767,.T.); +#29767 = LINE('',#29768,#29769); +#29768 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095,0.804369322) + ); +#29769 = VECTOR('',#29770,1.); +#29770 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29771 = PLANE('',#29772); +#29772 = AXIS2_PLACEMENT_3D('',#29773,#29774,#29775); +#29773 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095, + 0.823001783609)); +#29774 = DIRECTION('',(6.982962677686E-15,-1.,-1.163777691449E-14)); +#29775 = DIRECTION('',(0.,1.163777691449E-14,-1.)); +#29776 = ADVANCED_FACE('',(#29777),#29788,.F.); +#29777 = FACE_BOUND('',#29778,.T.); +#29778 = EDGE_LOOP('',(#29779,#29780,#29781,#29782)); +#29779 = ORIENTED_EDGE('',*,*,#29505,.T.); +#29780 = ORIENTED_EDGE('',*,*,#29766,.F.); +#29781 = ORIENTED_EDGE('',*,*,#29561,.F.); +#29782 = ORIENTED_EDGE('',*,*,#29783,.T.); +#29783 = EDGE_CURVE('',#29554,#29506,#29784,.T.); +#29784 = LINE('',#29785,#29786); +#29785 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306,0.804369322) + ); +#29786 = VECTOR('',#29787,1.); +#29787 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29788 = PLANE('',#29789); +#29789 = AXIS2_PLACEMENT_3D('',#29790,#29791,#29792); +#29790 = CARTESIAN_POINT('',(7.50097449872,-0.534583970095,0.804369322) + ); +#29791 = DIRECTION('',(2.602376019073E-29,-3.726750577357E-15,1.)); +#29792 = DIRECTION('',(0.,-1.,-3.726750577357E-15)); +#29793 = ADVANCED_FACE('',(#29794),#29805,.F.); +#29794 = FACE_BOUND('',#29795,.T.); +#29795 = EDGE_LOOP('',(#29796,#29797,#29798,#29799)); +#29796 = ORIENTED_EDGE('',*,*,#29513,.T.); +#29797 = ORIENTED_EDGE('',*,*,#29783,.F.); +#29798 = ORIENTED_EDGE('',*,*,#29553,.F.); +#29799 = ORIENTED_EDGE('',*,*,#29800,.T.); +#29800 = EDGE_CURVE('',#29546,#29514,#29801,.T.); +#29801 = LINE('',#29802,#29803); +#29802 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.749636466024)); +#29803 = VECTOR('',#29804,1.); +#29804 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29805 = PLANE('',#29806); +#29806 = AXIS2_PLACEMENT_3D('',#29807,#29808,#29809); +#29807 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306,0.804369322) + ); +#29808 = DIRECTION('',(6.982962677686E-15,-1.,-3.961796396406E-15)); +#29809 = DIRECTION('',(0.,3.961796396406E-15,-1.)); +#29810 = ADVANCED_FACE('',(#29811),#29822,.F.); +#29811 = FACE_BOUND('',#29812,.T.); +#29812 = EDGE_LOOP('',(#29813,#29814,#29815,#29816)); +#29813 = ORIENTED_EDGE('',*,*,#29521,.T.); +#29814 = ORIENTED_EDGE('',*,*,#29800,.F.); +#29815 = ORIENTED_EDGE('',*,*,#29545,.F.); +#29816 = ORIENTED_EDGE('',*,*,#29817,.T.); +#29817 = EDGE_CURVE('',#29538,#29434,#29818,.T.); +#29818 = LINE('',#29819,#29820); +#29819 = CARTESIAN_POINT('',(7.50097449872,-0.526265906876, + 0.749636466024)); +#29820 = VECTOR('',#29821,1.); +#29821 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29822 = PLANE('',#29823); +#29823 = AXIS2_PLACEMENT_3D('',#29824,#29825,#29826); +#29824 = CARTESIAN_POINT('',(7.50097449872,-0.592768822306, + 0.749636466024)); +#29825 = DIRECTION('',(-2.276875578892E-29,3.260615420684E-15,-1.)); +#29826 = DIRECTION('',(-1.,0.,2.276875578892E-29)); +#29827 = ADVANCED_FACE('',(#29828),#29834,.F.); +#29828 = FACE_BOUND('',#29829,.T.); +#29829 = EDGE_LOOP('',(#29830,#29831,#29832,#29833)); +#29830 = ORIENTED_EDGE('',*,*,#29431,.T.); +#29831 = ORIENTED_EDGE('',*,*,#29817,.F.); +#29832 = ORIENTED_EDGE('',*,*,#29535,.F.); +#29833 = ORIENTED_EDGE('',*,*,#29640,.T.); +#29834 = PLANE('',#29835); +#29835 = AXIS2_PLACEMENT_3D('',#29836,#29837,#29838); +#29836 = CARTESIAN_POINT('',(7.50097449872,-0.526265906876, + 0.749636466024)); +#29837 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#29838 = DIRECTION('',(0.,0.,-1.)); +#29839 = MANIFOLD_SOLID_BREP('',#29840); +#29840 = CLOSED_SHELL('',(#29841,#29887,#29924,#29961,#29998,#30029, + #30060,#30082,#30122,#30153,#30190,#30227,#30264,#30301,#30323, + #30347)); +#29841 = ADVANCED_FACE('',(#29842),#29878,.T.); +#29842 = FACE_BOUND('',#29843,.T.); +#29843 = EDGE_LOOP('',(#29844,#29855,#29863,#29872)); +#29844 = ORIENTED_EDGE('',*,*,#29845,.F.); +#29845 = EDGE_CURVE('',#29846,#29848,#29850,.T.); +#29846 = VERTEX_POINT('',#29847); +#29847 = CARTESIAN_POINT('',(7.499974498734,-0.402992209982, + 0.859767623034)); +#29848 = VERTEX_POINT('',#29849); +#29849 = CARTESIAN_POINT('',(7.499974498734,-0.449947676849, + 0.875072859356)); +#29850 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29851,#29852,#29853,#29854), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#29851 = CARTESIAN_POINT('',(7.499974498734,-0.402992209982, + 0.859767623034)); +#29852 = CARTESIAN_POINT('',(7.499974498734,-0.414887040384, + 0.869998840792)); +#29853 = CARTESIAN_POINT('',(7.499974498734,-0.43056658955, + 0.875072859356)); +#29854 = CARTESIAN_POINT('',(7.499974498734,-0.449947676849, + 0.875072859356)); +#29855 = ORIENTED_EDGE('',*,*,#29856,.F.); +#29856 = EDGE_CURVE('',#29857,#29846,#29859,.T.); +#29857 = VERTEX_POINT('',#29858); +#29858 = CARTESIAN_POINT('',(7.50097449872,-0.402992209982, + 0.859767623034)); +#29859 = LINE('',#29860,#29861); +#29860 = CARTESIAN_POINT('',(7.50097449872,-0.402992209982, + 0.859767623034)); +#29861 = VECTOR('',#29862,1.); +#29862 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29863 = ORIENTED_EDGE('',*,*,#29864,.T.); +#29864 = EDGE_CURVE('',#29857,#29865,#29867,.T.); +#29865 = VERTEX_POINT('',#29866); +#29866 = CARTESIAN_POINT('',(7.50097449872,-0.449947676849, + 0.875072859356)); +#29867 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29868,#29869,#29870,#29871), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#29868 = CARTESIAN_POINT('',(7.50097449872,-0.402992209982, + 0.859767623034)); +#29869 = CARTESIAN_POINT('',(7.50097449872,-0.414887040384, + 0.869998840792)); +#29870 = CARTESIAN_POINT('',(7.50097449872,-0.43056658955,0.875072859356 + )); +#29871 = CARTESIAN_POINT('',(7.50097449872,-0.449947676849, + 0.875072859356)); +#29872 = ORIENTED_EDGE('',*,*,#29873,.T.); +#29873 = EDGE_CURVE('',#29865,#29848,#29874,.T.); +#29874 = LINE('',#29875,#29876); +#29875 = CARTESIAN_POINT('',(7.50097449872,-0.449947676849, + 0.875072859356)); +#29876 = VECTOR('',#29877,1.); +#29877 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29878 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#29879,#29880) + ,(#29881,#29882) + ,(#29883,#29884) + ,(#29885,#29886 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(5.,6.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#29879 = CARTESIAN_POINT('',(7.50097449872,-0.402992209982, + 0.859767623034)); +#29880 = CARTESIAN_POINT('',(7.499974498734,-0.402992209982, + 0.859767623034)); +#29881 = CARTESIAN_POINT('',(7.50097449872,-0.414887040384, + 0.869998840792)); +#29882 = CARTESIAN_POINT('',(7.499974498734,-0.414887040384, + 0.869998840792)); +#29883 = CARTESIAN_POINT('',(7.50097449872,-0.43056658955,0.875072859356 + )); +#29884 = CARTESIAN_POINT('',(7.499974498734,-0.43056658955, + 0.875072859356)); +#29885 = CARTESIAN_POINT('',(7.50097449872,-0.449947676849, + 0.875072859356)); +#29886 = CARTESIAN_POINT('',(7.499974498734,-0.449947676849, + 0.875072859356)); +#29887 = ADVANCED_FACE('',(#29888),#29915,.T.); +#29888 = FACE_BOUND('',#29889,.T.); +#29889 = EDGE_LOOP('',(#29890,#29899,#29907,#29914)); +#29890 = ORIENTED_EDGE('',*,*,#29891,.F.); +#29891 = EDGE_CURVE('',#29892,#29846,#29894,.T.); +#29892 = VERTEX_POINT('',#29893); +#29893 = CARTESIAN_POINT('',(7.499974498734,-0.385149964379, + 0.813935094701)); +#29894 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29895,#29896,#29897,#29898), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#29895 = CARTESIAN_POINT('',(7.499974498734,-0.385149964379, + 0.813935094701)); +#29896 = CARTESIAN_POINT('',(7.499974498734,-0.385149964379, + 0.834231168954)); +#29897 = CARTESIAN_POINT('',(7.499974498734,-0.39109737958, + 0.849536405275)); +#29898 = CARTESIAN_POINT('',(7.499974498734,-0.402992209982, + 0.859767623034)); +#29899 = ORIENTED_EDGE('',*,*,#29900,.F.); +#29900 = EDGE_CURVE('',#29901,#29892,#29903,.T.); +#29901 = VERTEX_POINT('',#29902); +#29902 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.813935094701)); +#29903 = LINE('',#29904,#29905); +#29904 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.813935094701)); +#29905 = VECTOR('',#29906,1.); +#29906 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29907 = ORIENTED_EDGE('',*,*,#29908,.T.); +#29908 = EDGE_CURVE('',#29901,#29857,#29909,.T.); +#29909 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29910,#29911,#29912,#29913), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#29910 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.813935094701)); +#29911 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.834231168954)); +#29912 = CARTESIAN_POINT('',(7.50097449872,-0.39109737958,0.849536405275 + )); +#29913 = CARTESIAN_POINT('',(7.50097449872,-0.402992209982, + 0.859767623034)); +#29914 = ORIENTED_EDGE('',*,*,#29856,.T.); +#29915 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#29916,#29917) + ,(#29918,#29919) + ,(#29920,#29921) + ,(#29922,#29923 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(4.,5.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#29916 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.813935094701)); +#29917 = CARTESIAN_POINT('',(7.499974498734,-0.385149964379, + 0.813935094701)); +#29918 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.834231168954)); +#29919 = CARTESIAN_POINT('',(7.499974498734,-0.385149964379, + 0.834231168954)); +#29920 = CARTESIAN_POINT('',(7.50097449872,-0.39109737958,0.849536405275 + )); +#29921 = CARTESIAN_POINT('',(7.499974498734,-0.39109737958, + 0.849536405275)); +#29922 = CARTESIAN_POINT('',(7.50097449872,-0.402992209982, + 0.859767623034)); +#29923 = CARTESIAN_POINT('',(7.499974498734,-0.402992209982, + 0.859767623034)); +#29924 = ADVANCED_FACE('',(#29925),#29952,.T.); +#29925 = FACE_BOUND('',#29926,.T.); +#29926 = EDGE_LOOP('',(#29927,#29936,#29944,#29951)); +#29927 = ORIENTED_EDGE('',*,*,#29928,.F.); +#29928 = EDGE_CURVE('',#29929,#29892,#29931,.T.); +#29929 = VERTEX_POINT('',#29930); +#29930 = CARTESIAN_POINT('',(7.499974498734,-0.402534716504, + 0.766605314989)); +#29931 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29932,#29933,#29934,#29935), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#29932 = CARTESIAN_POINT('',(7.499974498734,-0.402534716504, + 0.766605314989)); +#29933 = CARTESIAN_POINT('',(7.499974498734,-0.390931018315, + 0.777834700334)); +#29934 = CARTESIAN_POINT('',(7.499974498734,-0.385149964379, + 0.793639020448)); +#29935 = CARTESIAN_POINT('',(7.499974498734,-0.385149964379, + 0.813935094701)); +#29936 = ORIENTED_EDGE('',*,*,#29937,.F.); +#29937 = EDGE_CURVE('',#29938,#29929,#29940,.T.); +#29938 = VERTEX_POINT('',#29939); +#29939 = CARTESIAN_POINT('',(7.50097449872,-0.402534716504, + 0.766605314989)); +#29940 = LINE('',#29941,#29942); +#29941 = CARTESIAN_POINT('',(7.50097449872,-0.402534716504, + 0.766605314989)); +#29942 = VECTOR('',#29943,1.); +#29943 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29944 = ORIENTED_EDGE('',*,*,#29945,.T.); +#29945 = EDGE_CURVE('',#29938,#29901,#29946,.T.); +#29946 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29947,#29948,#29949,#29950), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#29947 = CARTESIAN_POINT('',(7.50097449872,-0.402534716504, + 0.766605314989)); +#29948 = CARTESIAN_POINT('',(7.50097449872,-0.390931018315, + 0.777834700334)); +#29949 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.793639020448)); +#29950 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.813935094701)); +#29951 = ORIENTED_EDGE('',*,*,#29900,.T.); +#29952 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#29953,#29954) + ,(#29955,#29956) + ,(#29957,#29958) + ,(#29959,#29960 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#29953 = CARTESIAN_POINT('',(7.50097449872,-0.402534716504, + 0.766605314989)); +#29954 = CARTESIAN_POINT('',(7.499974498734,-0.402534716504, + 0.766605314989)); +#29955 = CARTESIAN_POINT('',(7.50097449872,-0.390931018315, + 0.777834700334)); +#29956 = CARTESIAN_POINT('',(7.499974498734,-0.390931018315, + 0.777834700334)); +#29957 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.793639020448)); +#29958 = CARTESIAN_POINT('',(7.499974498734,-0.385149964379, + 0.793639020448)); +#29959 = CARTESIAN_POINT('',(7.50097449872,-0.385149964379, + 0.813935094701)); +#29960 = CARTESIAN_POINT('',(7.499974498734,-0.385149964379, + 0.813935094701)); +#29961 = ADVANCED_FACE('',(#29962),#29989,.T.); +#29962 = FACE_BOUND('',#29963,.T.); +#29963 = EDGE_LOOP('',(#29964,#29973,#29981,#29988)); +#29964 = ORIENTED_EDGE('',*,*,#29965,.F.); +#29965 = EDGE_CURVE('',#29966,#29929,#29968,.T.); +#29966 = VERTEX_POINT('',#29967); +#29967 = CARTESIAN_POINT('',(7.499974498734,-0.450904254119, + 0.749636466024)); +#29968 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29969,#29970,#29971,#29972), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#29969 = CARTESIAN_POINT('',(7.499974498734,-0.450904254119, + 0.749636466024)); +#29970 = CARTESIAN_POINT('',(7.499974498734,-0.430233867022, + 0.749636466024)); +#29971 = CARTESIAN_POINT('',(7.499974498734,-0.414096824378, + 0.755292749011)); +#29972 = CARTESIAN_POINT('',(7.499974498734,-0.402534716504, + 0.766605314989)); +#29973 = ORIENTED_EDGE('',*,*,#29974,.F.); +#29974 = EDGE_CURVE('',#29975,#29966,#29977,.T.); +#29975 = VERTEX_POINT('',#29976); +#29976 = CARTESIAN_POINT('',(7.50097449872,-0.450904254119, + 0.749636466024)); +#29977 = LINE('',#29978,#29979); +#29978 = CARTESIAN_POINT('',(7.50097449872,-0.450904254119, + 0.749636466024)); +#29979 = VECTOR('',#29980,1.); +#29980 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#29981 = ORIENTED_EDGE('',*,*,#29982,.T.); +#29982 = EDGE_CURVE('',#29975,#29938,#29983,.T.); +#29983 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#29984,#29985,#29986,#29987), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#29984 = CARTESIAN_POINT('',(7.50097449872,-0.450904254119, + 0.749636466024)); +#29985 = CARTESIAN_POINT('',(7.50097449872,-0.430233867022, + 0.749636466024)); +#29986 = CARTESIAN_POINT('',(7.50097449872,-0.414096824378, + 0.755292749011)); +#29987 = CARTESIAN_POINT('',(7.50097449872,-0.402534716504, + 0.766605314989)); +#29988 = ORIENTED_EDGE('',*,*,#29937,.T.); +#29989 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#29990,#29991) + ,(#29992,#29993) + ,(#29994,#29995) + ,(#29996,#29997 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(2.,3.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#29990 = CARTESIAN_POINT('',(7.50097449872,-0.450904254119, + 0.749636466024)); +#29991 = CARTESIAN_POINT('',(7.499974498734,-0.450904254119, + 0.749636466024)); +#29992 = CARTESIAN_POINT('',(7.50097449872,-0.430233867022, + 0.749636466024)); +#29993 = CARTESIAN_POINT('',(7.499974498734,-0.430233867022, + 0.749636466024)); +#29994 = CARTESIAN_POINT('',(7.50097449872,-0.414096824378, + 0.755292749011)); +#29995 = CARTESIAN_POINT('',(7.499974498734,-0.414096824378, + 0.755292749011)); +#29996 = CARTESIAN_POINT('',(7.50097449872,-0.402534716504, + 0.766605314989)); +#29997 = CARTESIAN_POINT('',(7.499974498734,-0.402534716504, + 0.766605314989)); +#29998 = ADVANCED_FACE('',(#29999),#30024,.T.); +#29999 = FACE_BOUND('',#30000,.T.); +#30000 = EDGE_LOOP('',(#30001,#30009,#30017,#30023)); +#30001 = ORIENTED_EDGE('',*,*,#30002,.F.); +#30002 = EDGE_CURVE('',#30003,#29966,#30005,.T.); +#30003 = VERTEX_POINT('',#30004); +#30004 = CARTESIAN_POINT('',(7.499974498734,-0.474527553658, + 0.749636466024)); +#30005 = LINE('',#30006,#30007); +#30006 = CARTESIAN_POINT('',(7.499974498734,-0.474527553658, + 0.749636466024)); +#30007 = VECTOR('',#30008,1.); +#30008 = DIRECTION('',(0.,1.,0.)); +#30009 = ORIENTED_EDGE('',*,*,#30010,.F.); +#30010 = EDGE_CURVE('',#30011,#30003,#30013,.T.); +#30011 = VERTEX_POINT('',#30012); +#30012 = CARTESIAN_POINT('',(7.50097449872,-0.474527553658, + 0.749636466024)); +#30013 = LINE('',#30014,#30015); +#30014 = CARTESIAN_POINT('',(7.50097449872,-0.474527553658, + 0.749636466024)); +#30015 = VECTOR('',#30016,1.); +#30016 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30017 = ORIENTED_EDGE('',*,*,#30018,.T.); +#30018 = EDGE_CURVE('',#30011,#29975,#30019,.T.); +#30019 = LINE('',#30020,#30021); +#30020 = CARTESIAN_POINT('',(7.50097449872,-0.474527553658, + 0.749636466024)); +#30021 = VECTOR('',#30022,1.); +#30022 = DIRECTION('',(0.,1.,0.)); +#30023 = ORIENTED_EDGE('',*,*,#29974,.T.); +#30024 = PLANE('',#30025); +#30025 = AXIS2_PLACEMENT_3D('',#30026,#30027,#30028); +#30026 = CARTESIAN_POINT('',(7.50097449872,-0.474527553658, + 0.749636466024)); +#30027 = DIRECTION('',(0.,0.,1.)); +#30028 = DIRECTION('',(1.,0.,-0.)); +#30029 = ADVANCED_FACE('',(#30030),#30055,.T.); +#30030 = FACE_BOUND('',#30031,.T.); +#30031 = EDGE_LOOP('',(#30032,#30040,#30048,#30054)); +#30032 = ORIENTED_EDGE('',*,*,#30033,.F.); +#30033 = EDGE_CURVE('',#30034,#30003,#30036,.T.); +#30034 = VERTEX_POINT('',#30035); +#30035 = CARTESIAN_POINT('',(7.499974498734,-0.474527553658, + 0.875072859356)); +#30036 = LINE('',#30037,#30038); +#30037 = CARTESIAN_POINT('',(7.499974498734,-0.474527553658, + 0.875072859356)); +#30038 = VECTOR('',#30039,1.); +#30039 = DIRECTION('',(0.,5.186065044071E-15,-1.)); +#30040 = ORIENTED_EDGE('',*,*,#30041,.F.); +#30041 = EDGE_CURVE('',#30042,#30034,#30044,.T.); +#30042 = VERTEX_POINT('',#30043); +#30043 = CARTESIAN_POINT('',(7.50097449872,-0.474527553658, + 0.875072859356)); +#30044 = LINE('',#30045,#30046); +#30045 = CARTESIAN_POINT('',(7.50097449872,-0.474527553658, + 0.875072859356)); +#30046 = VECTOR('',#30047,1.); +#30047 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30048 = ORIENTED_EDGE('',*,*,#30049,.T.); +#30049 = EDGE_CURVE('',#30042,#30011,#30050,.T.); +#30050 = LINE('',#30051,#30052); +#30051 = CARTESIAN_POINT('',(7.50097449872,-0.474527553658, + 0.875072859356)); +#30052 = VECTOR('',#30053,1.); +#30053 = DIRECTION('',(0.,5.186065044071E-15,-1.)); +#30054 = ORIENTED_EDGE('',*,*,#30010,.T.); +#30055 = PLANE('',#30056); +#30056 = AXIS2_PLACEMENT_3D('',#30057,#30058,#30059); +#30057 = CARTESIAN_POINT('',(7.50097449872,-0.474527553658, + 0.875072859356)); +#30058 = DIRECTION('',(-6.982962677686E-15,1.,5.186065044071E-15)); +#30059 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#30060 = ADVANCED_FACE('',(#30061),#30077,.T.); +#30061 = FACE_BOUND('',#30062,.T.); +#30062 = EDGE_LOOP('',(#30063,#30069,#30070,#30076)); +#30063 = ORIENTED_EDGE('',*,*,#30064,.F.); +#30064 = EDGE_CURVE('',#29848,#30034,#30065,.T.); +#30065 = LINE('',#30066,#30067); +#30066 = CARTESIAN_POINT('',(7.499974498734,-0.449947676849, + 0.875072859356)); +#30067 = VECTOR('',#30068,1.); +#30068 = DIRECTION('',(0.,-1.,-4.410934058972E-15)); +#30069 = ORIENTED_EDGE('',*,*,#29873,.F.); +#30070 = ORIENTED_EDGE('',*,*,#30071,.T.); +#30071 = EDGE_CURVE('',#29865,#30042,#30072,.T.); +#30072 = LINE('',#30073,#30074); +#30073 = CARTESIAN_POINT('',(7.50097449872,-0.449947676849, + 0.875072859356)); +#30074 = VECTOR('',#30075,1.); +#30075 = DIRECTION('',(0.,-1.,-4.410934058972E-15)); +#30076 = ORIENTED_EDGE('',*,*,#30041,.T.); +#30077 = PLANE('',#30078); +#30078 = AXIS2_PLACEMENT_3D('',#30079,#30080,#30081); +#30079 = CARTESIAN_POINT('',(7.50097449872,-0.449947676849, + 0.875072859356)); +#30080 = DIRECTION('',(-3.080138790754E-29,4.410934058972E-15,-1.)); +#30081 = DIRECTION('',(-1.,0.,3.080138790754E-29)); +#30082 = ADVANCED_FACE('',(#30083),#30117,.F.); +#30083 = FACE_BOUND('',#30084,.T.); +#30084 = EDGE_LOOP('',(#30085,#30095,#30103,#30111)); +#30085 = ORIENTED_EDGE('',*,*,#30086,.T.); +#30086 = EDGE_CURVE('',#30087,#30089,#30091,.T.); +#30087 = VERTEX_POINT('',#30088); +#30088 = CARTESIAN_POINT('',(7.499974498734,-0.495530663284, + 0.893788501596)); +#30089 = VERTEX_POINT('',#30090); +#30090 = CARTESIAN_POINT('',(7.499974498734,-0.495530663284, + 0.731087185047)); +#30091 = LINE('',#30092,#30093); +#30092 = CARTESIAN_POINT('',(7.499974498734,-0.495530663284, + 0.731087185047)); +#30093 = VECTOR('',#30094,1.); +#30094 = DIRECTION('',(0.,3.998254645438E-15,-1.)); +#30095 = ORIENTED_EDGE('',*,*,#30096,.F.); +#30096 = EDGE_CURVE('',#30097,#30089,#30099,.T.); +#30097 = VERTEX_POINT('',#30098); +#30098 = CARTESIAN_POINT('',(7.50097449872,-0.495530663284, + 0.731087185047)); +#30099 = LINE('',#30100,#30101); +#30100 = CARTESIAN_POINT('',(7.50097449872,-0.495530663284, + 0.731087185047)); +#30101 = VECTOR('',#30102,1.); +#30102 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30103 = ORIENTED_EDGE('',*,*,#30104,.F.); +#30104 = EDGE_CURVE('',#30105,#30097,#30107,.T.); +#30105 = VERTEX_POINT('',#30106); +#30106 = CARTESIAN_POINT('',(7.50097449872,-0.495530663284, + 0.893788501596)); +#30107 = LINE('',#30108,#30109); +#30108 = CARTESIAN_POINT('',(7.50097449872,-0.495530663284, + 0.731087185047)); +#30109 = VECTOR('',#30110,1.); +#30110 = DIRECTION('',(0.,3.998254645438E-15,-1.)); +#30111 = ORIENTED_EDGE('',*,*,#30112,.T.); +#30112 = EDGE_CURVE('',#30105,#30087,#30113,.T.); +#30113 = LINE('',#30114,#30115); +#30114 = CARTESIAN_POINT('',(7.50097449872,-0.495530663284, + 0.893788501596)); +#30115 = VECTOR('',#30116,1.); +#30116 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30117 = PLANE('',#30118); +#30118 = AXIS2_PLACEMENT_3D('',#30119,#30120,#30121); +#30119 = CARTESIAN_POINT('',(7.50097449872,-0.495530663284, + 0.731087185047)); +#30120 = DIRECTION('',(-6.982962677686E-15,1.,3.998254645438E-15)); +#30121 = DIRECTION('',(1.,6.982962677686E-15,0.)); +#30122 = ADVANCED_FACE('',(#30123),#30148,.F.); +#30123 = FACE_BOUND('',#30124,.T.); +#30124 = EDGE_LOOP('',(#30125,#30133,#30134,#30142)); +#30125 = ORIENTED_EDGE('',*,*,#30126,.T.); +#30126 = EDGE_CURVE('',#30127,#30087,#30129,.T.); +#30127 = VERTEX_POINT('',#30128); +#30128 = CARTESIAN_POINT('',(7.499974498734,-0.449115870527, + 0.893788501596)); +#30129 = LINE('',#30130,#30131); +#30130 = CARTESIAN_POINT('',(7.499974498734,-0.495530663284, + 0.893788501596)); +#30131 = VECTOR('',#30132,1.); +#30132 = DIRECTION('',(0.,-1.,-4.671795750655E-15)); +#30133 = ORIENTED_EDGE('',*,*,#30112,.F.); +#30134 = ORIENTED_EDGE('',*,*,#30135,.F.); +#30135 = EDGE_CURVE('',#30136,#30105,#30138,.T.); +#30136 = VERTEX_POINT('',#30137); +#30137 = CARTESIAN_POINT('',(7.50097449872,-0.449115870527, + 0.893788501596)); +#30138 = LINE('',#30139,#30140); +#30139 = CARTESIAN_POINT('',(7.50097449872,-0.495530663284, + 0.893788501596)); +#30140 = VECTOR('',#30141,1.); +#30141 = DIRECTION('',(0.,-1.,-4.671795750655E-15)); +#30142 = ORIENTED_EDGE('',*,*,#30143,.T.); +#30143 = EDGE_CURVE('',#30136,#30127,#30144,.T.); +#30144 = LINE('',#30145,#30146); +#30145 = CARTESIAN_POINT('',(7.50097449872,-0.449115870527, + 0.893788501596)); +#30146 = VECTOR('',#30147,1.); +#30147 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30148 = PLANE('',#30149); +#30149 = AXIS2_PLACEMENT_3D('',#30150,#30151,#30152); +#30150 = CARTESIAN_POINT('',(7.50097449872,-0.495530663284, + 0.893788501596)); +#30151 = DIRECTION('',(-3.26229753646E-29,4.671795750655E-15,-1.)); +#30152 = DIRECTION('',(-1.,0.,3.26229753646E-29)); +#30153 = ADVANCED_FACE('',(#30154),#30181,.F.); +#30154 = FACE_BOUND('',#30155,.F.); +#30155 = EDGE_LOOP('',(#30156,#30166,#30173,#30174)); +#30156 = ORIENTED_EDGE('',*,*,#30157,.F.); +#30157 = EDGE_CURVE('',#30158,#30160,#30162,.T.); +#30158 = VERTEX_POINT('',#30159); +#30159 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.872244717861)); +#30160 = VERTEX_POINT('',#30161); +#30161 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.872244717861)); +#30162 = LINE('',#30163,#30164); +#30163 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.872244717861)); +#30164 = VECTOR('',#30165,1.); +#30165 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30166 = ORIENTED_EDGE('',*,*,#30167,.T.); +#30167 = EDGE_CURVE('',#30158,#30136,#30168,.T.); +#30168 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30169,#30170,#30171,#30172), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#30169 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.872244717861)); +#30170 = CARTESIAN_POINT('',(7.50097449872,-0.403948787251, + 0.886634967228)); +#30171 = CARTESIAN_POINT('',(7.50097449872,-0.424452813085, + 0.893788501596)); +#30172 = CARTESIAN_POINT('',(7.50097449872,-0.449115870527, + 0.893788501596)); +#30173 = ORIENTED_EDGE('',*,*,#30143,.T.); +#30174 = ORIENTED_EDGE('',*,*,#30175,.F.); +#30175 = EDGE_CURVE('',#30160,#30127,#30176,.T.); +#30176 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30177,#30178,#30179,#30180), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#30177 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.872244717861)); +#30178 = CARTESIAN_POINT('',(7.499974498734,-0.403948787251, + 0.886634967228)); +#30179 = CARTESIAN_POINT('',(7.499974498734,-0.424452813085, + 0.893788501596)); +#30180 = CARTESIAN_POINT('',(7.499974498734,-0.449115870527, + 0.893788501596)); +#30181 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#30182,#30183) + ,(#30184,#30185) + ,(#30186,#30187) + ,(#30188,#30189 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(2.,3.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#30182 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.872244717861)); +#30183 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.872244717861)); +#30184 = CARTESIAN_POINT('',(7.50097449872,-0.403948787251, + 0.886634967228)); +#30185 = CARTESIAN_POINT('',(7.499974498734,-0.403948787251, + 0.886634967228)); +#30186 = CARTESIAN_POINT('',(7.50097449872,-0.424452813085, + 0.893788501596)); +#30187 = CARTESIAN_POINT('',(7.499974498734,-0.424452813085, + 0.893788501596)); +#30188 = CARTESIAN_POINT('',(7.50097449872,-0.449115870527, + 0.893788501596)); +#30189 = CARTESIAN_POINT('',(7.499974498734,-0.449115870527, + 0.893788501596)); +#30190 = ADVANCED_FACE('',(#30191),#30218,.F.); +#30191 = FACE_BOUND('',#30192,.F.); +#30192 = EDGE_LOOP('',(#30193,#30203,#30210,#30211)); +#30193 = ORIENTED_EDGE('',*,*,#30194,.F.); +#30194 = EDGE_CURVE('',#30195,#30197,#30199,.T.); +#30195 = VERTEX_POINT('',#30196); +#30196 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.814517359126)); +#30197 = VERTEX_POINT('',#30198); +#30198 = CARTESIAN_POINT('',(7.499974498734,-0.363065506533, + 0.814517359126)); +#30199 = LINE('',#30200,#30201); +#30200 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.814517359126)); +#30201 = VECTOR('',#30202,1.); +#30202 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30203 = ORIENTED_EDGE('',*,*,#30204,.T.); +#30204 = EDGE_CURVE('',#30195,#30158,#30205,.T.); +#30205 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30206,#30207,#30208,#30209), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#30206 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.814517359126)); +#30207 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.838639742459)); +#30208 = CARTESIAN_POINT('',(7.50097449872,-0.371258798804, + 0.857854468493)); +#30209 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.872244717861)); +#30210 = ORIENTED_EDGE('',*,*,#30157,.T.); +#30211 = ORIENTED_EDGE('',*,*,#30212,.F.); +#30212 = EDGE_CURVE('',#30197,#30160,#30213,.T.); +#30213 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30214,#30215,#30216,#30217), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#30214 = CARTESIAN_POINT('',(7.499974498734,-0.363065506533, + 0.814517359126)); +#30215 = CARTESIAN_POINT('',(7.499974498734,-0.363065506533, + 0.838639742459)); +#30216 = CARTESIAN_POINT('',(7.499974498734,-0.371258798804, + 0.857854468493)); +#30217 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.872244717861)); +#30218 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#30219,#30220) + ,(#30221,#30222) + ,(#30223,#30224) + ,(#30225,#30226 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#30219 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.814517359126)); +#30220 = CARTESIAN_POINT('',(7.499974498734,-0.363065506533, + 0.814517359126)); +#30221 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.838639742459)); +#30222 = CARTESIAN_POINT('',(7.499974498734,-0.363065506533, + 0.838639742459)); +#30223 = CARTESIAN_POINT('',(7.50097449872,-0.371258798804, + 0.857854468493)); +#30224 = CARTESIAN_POINT('',(7.499974498734,-0.371258798804, + 0.857854468493)); +#30225 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.872244717861)); +#30226 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.872244717861)); +#30227 = ADVANCED_FACE('',(#30228),#30255,.F.); +#30228 = FACE_BOUND('',#30229,.F.); +#30229 = EDGE_LOOP('',(#30230,#30240,#30247,#30248)); +#30230 = ORIENTED_EDGE('',*,*,#30231,.F.); +#30231 = EDGE_CURVE('',#30232,#30234,#30236,.T.); +#30232 = VERTEX_POINT('',#30233); +#30233 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.753878678265)); +#30234 = VERTEX_POINT('',#30235); +#30235 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.753878678265)); +#30236 = LINE('',#30237,#30238); +#30237 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.753878678265)); +#30238 = VECTOR('',#30239,1.); +#30239 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30240 = ORIENTED_EDGE('',*,*,#30241,.T.); +#30241 = EDGE_CURVE('',#30232,#30195,#30242,.T.); +#30242 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30243,#30244,#30245,#30246), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#30243 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.753878678265)); +#30244 = CARTESIAN_POINT('',(7.50097449872,-0.371258798804, + 0.769100733955)); +#30245 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.789313627574)); +#30246 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.814517359126)); +#30247 = ORIENTED_EDGE('',*,*,#30194,.T.); +#30248 = ORIENTED_EDGE('',*,*,#30249,.F.); +#30249 = EDGE_CURVE('',#30234,#30197,#30250,.T.); +#30250 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30251,#30252,#30253,#30254), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#30251 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.753878678265)); +#30252 = CARTESIAN_POINT('',(7.499974498734,-0.371258798804, + 0.769100733955)); +#30253 = CARTESIAN_POINT('',(7.499974498734,-0.363065506533, + 0.789313627574)); +#30254 = CARTESIAN_POINT('',(7.499974498734,-0.363065506533, + 0.814517359126)); +#30255 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#30256,#30257) + ,(#30258,#30259) + ,(#30260,#30261) + ,(#30262,#30263 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(4.,5.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#30256 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.753878678265)); +#30257 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.753878678265)); +#30258 = CARTESIAN_POINT('',(7.50097449872,-0.371258798804, + 0.769100733955)); +#30259 = CARTESIAN_POINT('',(7.499974498734,-0.371258798804, + 0.769100733955)); +#30260 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.789313627574)); +#30261 = CARTESIAN_POINT('',(7.499974498734,-0.363065506533, + 0.789313627574)); +#30262 = CARTESIAN_POINT('',(7.50097449872,-0.363065506533, + 0.814517359126)); +#30263 = CARTESIAN_POINT('',(7.499974498734,-0.363065506533, + 0.814517359126)); +#30264 = ADVANCED_FACE('',(#30265),#30292,.F.); +#30265 = FACE_BOUND('',#30266,.F.); +#30266 = EDGE_LOOP('',(#30267,#30277,#30284,#30285)); +#30267 = ORIENTED_EDGE('',*,*,#30268,.F.); +#30268 = EDGE_CURVE('',#30269,#30271,#30273,.T.); +#30269 = VERTEX_POINT('',#30270); +#30270 = CARTESIAN_POINT('',(7.50097449872,-0.45077948317,0.731087185047 + )); +#30271 = VERTEX_POINT('',#30272); +#30272 = CARTESIAN_POINT('',(7.499974498734,-0.45077948317, + 0.731087185047)); +#30273 = LINE('',#30274,#30275); +#30274 = CARTESIAN_POINT('',(7.50097449872,-0.45077948317,0.731087185047 + )); +#30275 = VECTOR('',#30276,1.); +#30276 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30277 = ORIENTED_EDGE('',*,*,#30278,.T.); +#30278 = EDGE_CURVE('',#30269,#30232,#30279,.T.); +#30279 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30280,#30281,#30282,#30283), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#30280 = CARTESIAN_POINT('',(7.50097449872,-0.45077948317,0.731087185047 + )); +#30281 = CARTESIAN_POINT('',(7.50097449872,-0.425035077509, + 0.731087185047)); +#30282 = CARTESIAN_POINT('',(7.50097449872,-0.403948787251, + 0.738656622575)); +#30283 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.753878678265)); +#30284 = ORIENTED_EDGE('',*,*,#30231,.T.); +#30285 = ORIENTED_EDGE('',*,*,#30286,.F.); +#30286 = EDGE_CURVE('',#30271,#30234,#30287,.T.); +#30287 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30288,#30289,#30290,#30291), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#30288 = CARTESIAN_POINT('',(7.499974498734,-0.45077948317, + 0.731087185047)); +#30289 = CARTESIAN_POINT('',(7.499974498734,-0.425035077509, + 0.731087185047)); +#30290 = CARTESIAN_POINT('',(7.499974498734,-0.403948787251, + 0.738656622575)); +#30291 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.753878678265)); +#30292 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#30293,#30294) + ,(#30295,#30296) + ,(#30297,#30298) + ,(#30299,#30300 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(5.,6.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#30293 = CARTESIAN_POINT('',(7.50097449872,-0.45077948317,0.731087185047 + )); +#30294 = CARTESIAN_POINT('',(7.499974498734,-0.45077948317, + 0.731087185047)); +#30295 = CARTESIAN_POINT('',(7.50097449872,-0.425035077509, + 0.731087185047)); +#30296 = CARTESIAN_POINT('',(7.499974498734,-0.425035077509, + 0.731087185047)); +#30297 = CARTESIAN_POINT('',(7.50097449872,-0.403948787251, + 0.738656622575)); +#30298 = CARTESIAN_POINT('',(7.499974498734,-0.403948787251, + 0.738656622575)); +#30299 = CARTESIAN_POINT('',(7.50097449872,-0.387603793028, + 0.753878678265)); +#30300 = CARTESIAN_POINT('',(7.499974498734,-0.387603793028, + 0.753878678265)); +#30301 = ADVANCED_FACE('',(#30302),#30318,.F.); +#30302 = FACE_BOUND('',#30303,.T.); +#30303 = EDGE_LOOP('',(#30304,#30310,#30311,#30317)); +#30304 = ORIENTED_EDGE('',*,*,#30305,.T.); +#30305 = EDGE_CURVE('',#30089,#30271,#30306,.T.); +#30306 = LINE('',#30307,#30308); +#30307 = CARTESIAN_POINT('',(7.499974498734,-0.45077948317, + 0.731087185047)); +#30308 = VECTOR('',#30309,1.); +#30309 = DIRECTION('',(0.,1.,0.)); +#30310 = ORIENTED_EDGE('',*,*,#30268,.F.); +#30311 = ORIENTED_EDGE('',*,*,#30312,.F.); +#30312 = EDGE_CURVE('',#30097,#30269,#30313,.T.); +#30313 = LINE('',#30314,#30315); +#30314 = CARTESIAN_POINT('',(7.50097449872,-0.45077948317,0.731087185047 + )); +#30315 = VECTOR('',#30316,1.); +#30316 = DIRECTION('',(0.,1.,0.)); +#30317 = ORIENTED_EDGE('',*,*,#30096,.T.); +#30318 = PLANE('',#30319); +#30319 = AXIS2_PLACEMENT_3D('',#30320,#30321,#30322); +#30320 = CARTESIAN_POINT('',(7.50097449872,-0.45077948317,0.731087185047 + )); +#30321 = DIRECTION('',(0.,0.,1.)); +#30322 = DIRECTION('',(1.,0.,-0.)); +#30323 = ADVANCED_FACE('',(#30324,#30333),#30342,.F.); +#30324 = FACE_BOUND('',#30325,.T.); +#30325 = EDGE_LOOP('',(#30326,#30327,#30328,#30329,#30330,#30331,#30332) + ); +#30326 = ORIENTED_EDGE('',*,*,#30064,.T.); +#30327 = ORIENTED_EDGE('',*,*,#30033,.T.); +#30328 = ORIENTED_EDGE('',*,*,#30002,.T.); +#30329 = ORIENTED_EDGE('',*,*,#29965,.T.); +#30330 = ORIENTED_EDGE('',*,*,#29928,.T.); +#30331 = ORIENTED_EDGE('',*,*,#29891,.T.); +#30332 = ORIENTED_EDGE('',*,*,#29845,.T.); +#30333 = FACE_BOUND('',#30334,.T.); +#30334 = EDGE_LOOP('',(#30335,#30336,#30337,#30338,#30339,#30340,#30341) + ); +#30335 = ORIENTED_EDGE('',*,*,#30305,.F.); +#30336 = ORIENTED_EDGE('',*,*,#30086,.F.); +#30337 = ORIENTED_EDGE('',*,*,#30126,.F.); +#30338 = ORIENTED_EDGE('',*,*,#30175,.F.); +#30339 = ORIENTED_EDGE('',*,*,#30212,.F.); +#30340 = ORIENTED_EDGE('',*,*,#30249,.F.); +#30341 = ORIENTED_EDGE('',*,*,#30286,.F.); +#30342 = PLANE('',#30343); +#30343 = AXIS2_PLACEMENT_3D('',#30344,#30345,#30346); +#30344 = CARTESIAN_POINT('',(7.499974498734,-0.41524055807, + 0.888412953241)); +#30345 = DIRECTION('',(1.,0.,0.)); +#30346 = DIRECTION('',(-0.,1.,0.)); +#30347 = ADVANCED_FACE('',(#30348,#30357),#30366,.T.); +#30348 = FACE_BOUND('',#30349,.T.); +#30349 = EDGE_LOOP('',(#30350,#30351,#30352,#30353,#30354,#30355,#30356) + ); +#30350 = ORIENTED_EDGE('',*,*,#30049,.F.); +#30351 = ORIENTED_EDGE('',*,*,#30071,.F.); +#30352 = ORIENTED_EDGE('',*,*,#29864,.F.); +#30353 = ORIENTED_EDGE('',*,*,#29908,.F.); +#30354 = ORIENTED_EDGE('',*,*,#29945,.F.); +#30355 = ORIENTED_EDGE('',*,*,#29982,.F.); +#30356 = ORIENTED_EDGE('',*,*,#30018,.F.); +#30357 = FACE_BOUND('',#30358,.T.); +#30358 = EDGE_LOOP('',(#30359,#30360,#30361,#30362,#30363,#30364,#30365) + ); +#30359 = ORIENTED_EDGE('',*,*,#30312,.T.); +#30360 = ORIENTED_EDGE('',*,*,#30278,.T.); +#30361 = ORIENTED_EDGE('',*,*,#30241,.T.); +#30362 = ORIENTED_EDGE('',*,*,#30204,.T.); +#30363 = ORIENTED_EDGE('',*,*,#30167,.T.); +#30364 = ORIENTED_EDGE('',*,*,#30135,.T.); +#30365 = ORIENTED_EDGE('',*,*,#30104,.T.); +#30366 = PLANE('',#30367); +#30367 = AXIS2_PLACEMENT_3D('',#30368,#30369,#30370); +#30368 = CARTESIAN_POINT('',(7.50097449872,-0.41524055807,0.888412953241 + )); +#30369 = DIRECTION('',(1.,0.,0.)); +#30370 = DIRECTION('',(-0.,1.,0.)); +#30371 = MANIFOLD_SOLID_BREP('',#30372); +#30372 = CLOSED_SHELL('',(#30373,#30413,#30450,#30481,#30518,#30549, + #30571,#30611,#30642,#30673,#30704,#30735,#30766,#30797,#30819, + #30843)); +#30373 = ADVANCED_FACE('',(#30374),#30408,.T.); +#30374 = FACE_BOUND('',#30375,.T.); +#30375 = EDGE_LOOP('',(#30376,#30386,#30394,#30402)); +#30376 = ORIENTED_EDGE('',*,*,#30377,.F.); +#30377 = EDGE_CURVE('',#30378,#30380,#30382,.T.); +#30378 = VERTEX_POINT('',#30379); +#30379 = CARTESIAN_POINT('',(7.499974498734,-0.284210267225, + 0.861597596942)); +#30380 = VERTEX_POINT('',#30381); +#30381 = CARTESIAN_POINT('',(7.499974498734,-0.308540602137, + 0.793971742977)); +#30382 = LINE('',#30383,#30384); +#30383 = CARTESIAN_POINT('',(7.499974498734,-0.284210267225, + 0.861597596942)); +#30384 = VECTOR('',#30385,1.); +#30385 = DIRECTION('',(0.,-0.338535034296,-0.940953787683)); +#30386 = ORIENTED_EDGE('',*,*,#30387,.F.); +#30387 = EDGE_CURVE('',#30388,#30378,#30390,.T.); +#30388 = VERTEX_POINT('',#30389); +#30389 = CARTESIAN_POINT('',(7.50097449872,-0.284210267225, + 0.861597596942)); +#30390 = LINE('',#30391,#30392); +#30391 = CARTESIAN_POINT('',(7.50097449872,-0.284210267225, + 0.861597596942)); +#30392 = VECTOR('',#30393,1.); +#30393 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30394 = ORIENTED_EDGE('',*,*,#30395,.T.); +#30395 = EDGE_CURVE('',#30388,#30396,#30398,.T.); +#30396 = VERTEX_POINT('',#30397); +#30397 = CARTESIAN_POINT('',(7.50097449872,-0.308540602137, + 0.793971742977)); +#30398 = LINE('',#30399,#30400); +#30399 = CARTESIAN_POINT('',(7.50097449872,-0.284210267225, + 0.861597596942)); +#30400 = VECTOR('',#30401,1.); +#30401 = DIRECTION('',(0.,-0.338535034296,-0.940953787683)); +#30402 = ORIENTED_EDGE('',*,*,#30403,.T.); +#30403 = EDGE_CURVE('',#30396,#30380,#30404,.T.); +#30404 = LINE('',#30405,#30406); +#30405 = CARTESIAN_POINT('',(7.50097449872,-0.308540602137, + 0.793971742977)); +#30406 = VECTOR('',#30407,1.); +#30407 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30408 = PLANE('',#30409); +#30409 = AXIS2_PLACEMENT_3D('',#30410,#30411,#30412); +#30410 = CARTESIAN_POINT('',(7.50097449872,-0.284210267225, + 0.861597596942)); +#30411 = DIRECTION('',(-6.570645180813E-15,0.940953787683, + -0.338535034296)); +#30412 = DIRECTION('',(-1.,-7.88860905221E-31,1.940905523849E-14)); +#30413 = ADVANCED_FACE('',(#30414),#30441,.T.); +#30414 = FACE_BOUND('',#30415,.T.); +#30415 = EDGE_LOOP('',(#30416,#30425,#30433,#30440)); +#30416 = ORIENTED_EDGE('',*,*,#30417,.F.); +#30417 = EDGE_CURVE('',#30418,#30378,#30420,.T.); +#30418 = VERTEX_POINT('',#30419); +#30419 = CARTESIAN_POINT('',(7.499974498734,-0.281548486995, + 0.87299334355)); +#30420 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30421,#30422,#30423,#30424), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#30421 = CARTESIAN_POINT('',(7.499974498734,-0.281548486995, + 0.87299334355)); +#30422 = CARTESIAN_POINT('',(7.499974498734,-0.282338703001, + 0.868085686251)); +#30423 = CARTESIAN_POINT('',(7.499974498734,-0.283212099637, + 0.864259377171)); +#30424 = CARTESIAN_POINT('',(7.499974498734,-0.284210267225, + 0.861597596942)); +#30425 = ORIENTED_EDGE('',*,*,#30426,.F.); +#30426 = EDGE_CURVE('',#30427,#30418,#30429,.T.); +#30427 = VERTEX_POINT('',#30428); +#30428 = CARTESIAN_POINT('',(7.50097449872,-0.281548486995,0.87299334355 + )); +#30429 = LINE('',#30430,#30431); +#30430 = CARTESIAN_POINT('',(7.50097449872,-0.281548486995,0.87299334355 + )); +#30431 = VECTOR('',#30432,1.); +#30432 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30433 = ORIENTED_EDGE('',*,*,#30434,.T.); +#30434 = EDGE_CURVE('',#30427,#30388,#30435,.T.); +#30435 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30436,#30437,#30438,#30439), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#30436 = CARTESIAN_POINT('',(7.50097449872,-0.281548486995,0.87299334355 + )); +#30437 = CARTESIAN_POINT('',(7.50097449872,-0.282338703001, + 0.868085686251)); +#30438 = CARTESIAN_POINT('',(7.50097449872,-0.283212099637, + 0.864259377171)); +#30439 = CARTESIAN_POINT('',(7.50097449872,-0.284210267225, + 0.861597596942)); +#30440 = ORIENTED_EDGE('',*,*,#30387,.T.); +#30441 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#30442,#30443) + ,(#30444,#30445) + ,(#30446,#30447) + ,(#30448,#30449 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#30442 = CARTESIAN_POINT('',(7.50097449872,-0.281548486995,0.87299334355 + )); +#30443 = CARTESIAN_POINT('',(7.499974498734,-0.281548486995, + 0.87299334355)); +#30444 = CARTESIAN_POINT('',(7.50097449872,-0.282338703001, + 0.868085686251)); +#30445 = CARTESIAN_POINT('',(7.499974498734,-0.282338703001, + 0.868085686251)); +#30446 = CARTESIAN_POINT('',(7.50097449872,-0.283212099637, + 0.864259377171)); +#30447 = CARTESIAN_POINT('',(7.499974498734,-0.283212099637, + 0.864259377171)); +#30448 = CARTESIAN_POINT('',(7.50097449872,-0.284210267225, + 0.861597596942)); +#30449 = CARTESIAN_POINT('',(7.499974498734,-0.284210267225, + 0.861597596942)); +#30450 = ADVANCED_FACE('',(#30451),#30476,.T.); +#30451 = FACE_BOUND('',#30452,.T.); +#30452 = EDGE_LOOP('',(#30453,#30461,#30469,#30475)); +#30453 = ORIENTED_EDGE('',*,*,#30454,.F.); +#30454 = EDGE_CURVE('',#30455,#30418,#30457,.T.); +#30455 = VERTEX_POINT('',#30456); +#30456 = CARTESIAN_POINT('',(7.499974498734,-0.281049403201, + 0.87299334355)); +#30457 = LINE('',#30458,#30459); +#30458 = CARTESIAN_POINT('',(7.499974498734,-0.281049403201, + 0.87299334355)); +#30459 = VECTOR('',#30460,1.); +#30460 = DIRECTION('',(0.,-1.,0.)); +#30461 = ORIENTED_EDGE('',*,*,#30462,.F.); +#30462 = EDGE_CURVE('',#30463,#30455,#30465,.T.); +#30463 = VERTEX_POINT('',#30464); +#30464 = CARTESIAN_POINT('',(7.50097449872,-0.281049403201,0.87299334355 + )); +#30465 = LINE('',#30466,#30467); +#30466 = CARTESIAN_POINT('',(7.50097449872,-0.281049403201,0.87299334355 + )); +#30467 = VECTOR('',#30468,1.); +#30468 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30469 = ORIENTED_EDGE('',*,*,#30470,.T.); +#30470 = EDGE_CURVE('',#30463,#30427,#30471,.T.); +#30471 = LINE('',#30472,#30473); +#30472 = CARTESIAN_POINT('',(7.50097449872,-0.281049403201,0.87299334355 + )); +#30473 = VECTOR('',#30474,1.); +#30474 = DIRECTION('',(0.,-1.,0.)); +#30475 = ORIENTED_EDGE('',*,*,#30426,.T.); +#30476 = PLANE('',#30477); +#30477 = AXIS2_PLACEMENT_3D('',#30478,#30479,#30480); +#30478 = CARTESIAN_POINT('',(7.50097449872,-0.281049403201,0.87299334355 + )); +#30479 = DIRECTION('',(0.,0.,-1.)); +#30480 = DIRECTION('',(0.,-1.,0.)); +#30481 = ADVANCED_FACE('',(#30482),#30509,.T.); +#30482 = FACE_BOUND('',#30483,.T.); +#30483 = EDGE_LOOP('',(#30484,#30493,#30501,#30508)); +#30484 = ORIENTED_EDGE('',*,*,#30485,.F.); +#30485 = EDGE_CURVE('',#30486,#30455,#30488,.T.); +#30486 = VERTEX_POINT('',#30487); +#30487 = CARTESIAN_POINT('',(7.499974498734,-0.27851239392, + 0.861597596942)); +#30488 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30489,#30490,#30491,#30492), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#30489 = CARTESIAN_POINT('',(7.499974498734,-0.27851239392, + 0.861597596942)); +#30490 = CARTESIAN_POINT('',(7.499974498734,-0.279302609925, + 0.86384347401)); +#30491 = CARTESIAN_POINT('',(7.499974498734,-0.280134416248, + 0.867586602459)); +#30492 = CARTESIAN_POINT('',(7.499974498734,-0.281049403201, + 0.87299334355)); +#30493 = ORIENTED_EDGE('',*,*,#30494,.F.); +#30494 = EDGE_CURVE('',#30495,#30486,#30497,.T.); +#30495 = VERTEX_POINT('',#30496); +#30496 = CARTESIAN_POINT('',(7.50097449872,-0.27851239392,0.861597596942 + )); +#30497 = LINE('',#30498,#30499); +#30498 = CARTESIAN_POINT('',(7.50097449872,-0.27851239392,0.861597596942 + )); +#30499 = VECTOR('',#30500,1.); +#30500 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30501 = ORIENTED_EDGE('',*,*,#30502,.T.); +#30502 = EDGE_CURVE('',#30495,#30463,#30503,.T.); +#30503 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30504,#30505,#30506,#30507), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#30504 = CARTESIAN_POINT('',(7.50097449872,-0.27851239392,0.861597596942 + )); +#30505 = CARTESIAN_POINT('',(7.50097449872,-0.279302609925,0.86384347401 + )); +#30506 = CARTESIAN_POINT('',(7.50097449872,-0.280134416248, + 0.867586602459)); +#30507 = CARTESIAN_POINT('',(7.50097449872,-0.281049403201,0.87299334355 + )); +#30508 = ORIENTED_EDGE('',*,*,#30462,.T.); +#30509 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#30510,#30511) + ,(#30512,#30513) + ,(#30514,#30515) + ,(#30516,#30517 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(1.,2.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#30510 = CARTESIAN_POINT('',(7.50097449872,-0.27851239392,0.861597596942 + )); +#30511 = CARTESIAN_POINT('',(7.499974498734,-0.27851239392, + 0.861597596942)); +#30512 = CARTESIAN_POINT('',(7.50097449872,-0.279302609925,0.86384347401 + )); +#30513 = CARTESIAN_POINT('',(7.499974498734,-0.279302609925, + 0.86384347401)); +#30514 = CARTESIAN_POINT('',(7.50097449872,-0.280134416248, + 0.867586602459)); +#30515 = CARTESIAN_POINT('',(7.499974498734,-0.280134416248, + 0.867586602459)); +#30516 = CARTESIAN_POINT('',(7.50097449872,-0.281049403201,0.87299334355 + )); +#30517 = CARTESIAN_POINT('',(7.499974498734,-0.281049403201, + 0.87299334355)); +#30518 = ADVANCED_FACE('',(#30519),#30544,.T.); +#30519 = FACE_BOUND('',#30520,.T.); +#30520 = EDGE_LOOP('',(#30521,#30529,#30537,#30543)); +#30521 = ORIENTED_EDGE('',*,*,#30522,.F.); +#30522 = EDGE_CURVE('',#30523,#30486,#30525,.T.); +#30523 = VERTEX_POINT('',#30524); +#30524 = CARTESIAN_POINT('',(7.499974498734,-0.253932517109, + 0.793971742977)); +#30525 = LINE('',#30526,#30527); +#30526 = CARTESIAN_POINT('',(7.499974498734,-0.253932517109, + 0.793971742977)); +#30527 = VECTOR('',#30528,1.); +#30528 = DIRECTION('',(1.205433577119E-14,-0.34160383069,0.939844041774) + ); +#30529 = ORIENTED_EDGE('',*,*,#30530,.F.); +#30530 = EDGE_CURVE('',#30531,#30523,#30533,.T.); +#30531 = VERTEX_POINT('',#30532); +#30532 = CARTESIAN_POINT('',(7.50097449872,-0.253932517109, + 0.793971742977)); +#30533 = LINE('',#30534,#30535); +#30534 = CARTESIAN_POINT('',(7.50097449872,-0.253932517109, + 0.793971742977)); +#30535 = VECTOR('',#30536,1.); +#30536 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30537 = ORIENTED_EDGE('',*,*,#30538,.T.); +#30538 = EDGE_CURVE('',#30531,#30495,#30539,.T.); +#30539 = LINE('',#30540,#30541); +#30540 = CARTESIAN_POINT('',(7.50097449872,-0.253932517109, + 0.793971742977)); +#30541 = VECTOR('',#30542,1.); +#30542 = DIRECTION('',(1.205433577119E-14,-0.34160383069,0.939844041774) + ); +#30543 = ORIENTED_EDGE('',*,*,#30494,.T.); +#30544 = PLANE('',#30545); +#30545 = AXIS2_PLACEMENT_3D('',#30546,#30547,#30548); +#30546 = CARTESIAN_POINT('',(7.50097449872,-0.253932517109, + 0.793971742977)); +#30547 = DIRECTION('',(6.562895866551E-15,-0.939844041774,-0.34160383069 + )); +#30548 = DIRECTION('',(0.,0.34160383069,-0.939844041774)); +#30549 = ADVANCED_FACE('',(#30550),#30566,.T.); +#30550 = FACE_BOUND('',#30551,.T.); +#30551 = EDGE_LOOP('',(#30552,#30558,#30559,#30565)); +#30552 = ORIENTED_EDGE('',*,*,#30553,.F.); +#30553 = EDGE_CURVE('',#30380,#30523,#30554,.T.); +#30554 = LINE('',#30555,#30556); +#30555 = CARTESIAN_POINT('',(7.499974498734,-0.308540602137, + 0.793971742977)); +#30556 = VECTOR('',#30557,1.); +#30557 = DIRECTION('',(-1.588339393041E-14,1.,3.970848482601E-15)); +#30558 = ORIENTED_EDGE('',*,*,#30403,.F.); +#30559 = ORIENTED_EDGE('',*,*,#30560,.T.); +#30560 = EDGE_CURVE('',#30396,#30531,#30561,.T.); +#30561 = LINE('',#30562,#30563); +#30562 = CARTESIAN_POINT('',(7.50097449872,-0.308540602137, + 0.793971742977)); +#30563 = VECTOR('',#30564,1.); +#30564 = DIRECTION('',(-1.588339393041E-14,1.,3.970848482601E-15)); +#30565 = ORIENTED_EDGE('',*,*,#30530,.T.); +#30566 = PLANE('',#30567); +#30567 = AXIS2_PLACEMENT_3D('',#30568,#30569,#30570); +#30568 = CARTESIAN_POINT('',(7.50097449872,-0.308540602137, + 0.793971742977)); +#30569 = DIRECTION('',(2.772828675275E-29,-3.970848482601E-15,1.)); +#30570 = DIRECTION('',(0.,-1.,-3.970848482601E-15)); +#30571 = ADVANCED_FACE('',(#30572),#30606,.F.); +#30572 = FACE_BOUND('',#30573,.T.); +#30573 = EDGE_LOOP('',(#30574,#30584,#30592,#30600)); +#30574 = ORIENTED_EDGE('',*,*,#30575,.T.); +#30575 = EDGE_CURVE('',#30576,#30578,#30580,.T.); +#30576 = VERTEX_POINT('',#30577); +#30577 = CARTESIAN_POINT('',(7.499974498734,-0.230849891678, + 0.731087185047)); +#30578 = VERTEX_POINT('',#30579); +#30579 = CARTESIAN_POINT('',(7.499974498734,-0.2076424953,0.731087185047 + )); +#30580 = LINE('',#30581,#30582); +#30581 = CARTESIAN_POINT('',(7.499974498734,-0.2076424953,0.731087185047 + )); +#30582 = VECTOR('',#30583,1.); +#30583 = DIRECTION('',(0.,1.,0.)); +#30584 = ORIENTED_EDGE('',*,*,#30585,.F.); +#30585 = EDGE_CURVE('',#30586,#30578,#30588,.T.); +#30586 = VERTEX_POINT('',#30587); +#30587 = CARTESIAN_POINT('',(7.50097449872,-0.2076424953,0.731087185047) + ); +#30588 = LINE('',#30589,#30590); +#30589 = CARTESIAN_POINT('',(7.50097449872,-0.2076424953,0.731087185047) + ); +#30590 = VECTOR('',#30591,1.); +#30591 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30592 = ORIENTED_EDGE('',*,*,#30593,.F.); +#30593 = EDGE_CURVE('',#30594,#30586,#30596,.T.); +#30594 = VERTEX_POINT('',#30595); +#30595 = CARTESIAN_POINT('',(7.50097449872,-0.230849891678, + 0.731087185047)); +#30596 = LINE('',#30597,#30598); +#30597 = CARTESIAN_POINT('',(7.50097449872,-0.2076424953,0.731087185047) + ); +#30598 = VECTOR('',#30599,1.); +#30599 = DIRECTION('',(0.,1.,0.)); +#30600 = ORIENTED_EDGE('',*,*,#30601,.T.); +#30601 = EDGE_CURVE('',#30594,#30576,#30602,.T.); +#30602 = LINE('',#30603,#30604); +#30603 = CARTESIAN_POINT('',(7.50097449872,-0.230849891678, + 0.731087185047)); +#30604 = VECTOR('',#30605,1.); +#30605 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30606 = PLANE('',#30607); +#30607 = AXIS2_PLACEMENT_3D('',#30608,#30609,#30610); +#30608 = CARTESIAN_POINT('',(7.50097449872,-0.2076424953,0.731087185047) + ); +#30609 = DIRECTION('',(0.,0.,1.)); +#30610 = DIRECTION('',(1.,0.,-0.)); +#30611 = ADVANCED_FACE('',(#30612),#30637,.F.); +#30612 = FACE_BOUND('',#30613,.T.); +#30613 = EDGE_LOOP('',(#30614,#30622,#30623,#30631)); +#30614 = ORIENTED_EDGE('',*,*,#30615,.T.); +#30615 = EDGE_CURVE('',#30616,#30576,#30618,.T.); +#30616 = VERTEX_POINT('',#30617); +#30617 = CARTESIAN_POINT('',(7.499974498734,-0.2474444278,0.775588823264 + )); +#30618 = LINE('',#30619,#30620); +#30619 = CARTESIAN_POINT('',(7.499974498734,-0.230849891678, + 0.731087185047)); +#30620 = VECTOR('',#30621,1.); +#30621 = DIRECTION('',(0.,0.349395479497,-0.936975345944)); +#30622 = ORIENTED_EDGE('',*,*,#30601,.F.); +#30623 = ORIENTED_EDGE('',*,*,#30624,.F.); +#30624 = EDGE_CURVE('',#30625,#30594,#30627,.T.); +#30625 = VERTEX_POINT('',#30626); +#30626 = CARTESIAN_POINT('',(7.50097449872,-0.2474444278,0.775588823264) + ); +#30627 = LINE('',#30628,#30629); +#30628 = CARTESIAN_POINT('',(7.50097449872,-0.230849891678, + 0.731087185047)); +#30629 = VECTOR('',#30630,1.); +#30630 = DIRECTION('',(0.,0.349395479497,-0.936975345944)); +#30631 = ORIENTED_EDGE('',*,*,#30632,.T.); +#30632 = EDGE_CURVE('',#30625,#30616,#30633,.T.); +#30633 = LINE('',#30634,#30635); +#30634 = CARTESIAN_POINT('',(7.50097449872,-0.2474444278,0.775588823264) + ); +#30635 = VECTOR('',#30636,1.); +#30636 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30637 = PLANE('',#30638); +#30638 = AXIS2_PLACEMENT_3D('',#30639,#30640,#30641); +#30639 = CARTESIAN_POINT('',(7.50097449872,-0.230849891678, + 0.731087185047)); +#30640 = DIRECTION('',(-6.54286387064E-15,0.936975345944,0.349395479497) + ); +#30641 = DIRECTION('',(1.,0.,1.872624076321E-14)); +#30642 = ADVANCED_FACE('',(#30643),#30668,.F.); +#30643 = FACE_BOUND('',#30644,.T.); +#30644 = EDGE_LOOP('',(#30645,#30653,#30654,#30662)); +#30645 = ORIENTED_EDGE('',*,*,#30646,.T.); +#30646 = EDGE_CURVE('',#30647,#30616,#30649,.T.); +#30647 = VERTEX_POINT('',#30648); +#30648 = CARTESIAN_POINT('',(7.499974498734,-0.315195052713, + 0.775588823264)); +#30649 = LINE('',#30650,#30651); +#30650 = CARTESIAN_POINT('',(7.499974498734,-0.2474444278,0.775588823264 + )); +#30651 = VECTOR('',#30652,1.); +#30652 = DIRECTION('',(-1.280226901808E-14,1.,3.200567254519E-15)); +#30653 = ORIENTED_EDGE('',*,*,#30632,.F.); +#30654 = ORIENTED_EDGE('',*,*,#30655,.F.); +#30655 = EDGE_CURVE('',#30656,#30625,#30658,.T.); +#30656 = VERTEX_POINT('',#30657); +#30657 = CARTESIAN_POINT('',(7.50097449872,-0.315195052713, + 0.775588823264)); +#30658 = LINE('',#30659,#30660); +#30659 = CARTESIAN_POINT('',(7.50097449872,-0.2474444278,0.775588823264) + ); +#30660 = VECTOR('',#30661,1.); +#30661 = DIRECTION('',(-1.280226901808E-14,1.,3.200567254519E-15)); +#30662 = ORIENTED_EDGE('',*,*,#30663,.T.); +#30663 = EDGE_CURVE('',#30656,#30647,#30664,.T.); +#30664 = LINE('',#30665,#30666); +#30665 = CARTESIAN_POINT('',(7.50097449872,-0.315195052713, + 0.775588823264)); +#30666 = VECTOR('',#30667,1.); +#30667 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30668 = PLANE('',#30669); +#30669 = AXIS2_PLACEMENT_3D('',#30670,#30671,#30672); +#30670 = CARTESIAN_POINT('',(7.50097449872,-0.2474444278,0.775588823264) + ); +#30671 = DIRECTION('',(2.234944168573E-29,-3.200567254519E-15,1.)); +#30672 = DIRECTION('',(0.,-1.,-3.200567254519E-15)); +#30673 = ADVANCED_FACE('',(#30674),#30699,.F.); +#30674 = FACE_BOUND('',#30675,.T.); +#30675 = EDGE_LOOP('',(#30676,#30684,#30685,#30693)); +#30676 = ORIENTED_EDGE('',*,*,#30677,.T.); +#30677 = EDGE_CURVE('',#30678,#30647,#30680,.T.); +#30678 = VERTEX_POINT('',#30679); +#30679 = CARTESIAN_POINT('',(7.499974498734,-0.330833011563, + 0.731087185047)); +#30680 = LINE('',#30681,#30682); +#30681 = CARTESIAN_POINT('',(7.499974498734,-0.315195052713, + 0.775588823264)); +#30682 = VECTOR('',#30683,1.); +#30683 = DIRECTION('',(0.,0.331528418358,0.94344523308)); +#30684 = ORIENTED_EDGE('',*,*,#30663,.F.); +#30685 = ORIENTED_EDGE('',*,*,#30686,.F.); +#30686 = EDGE_CURVE('',#30687,#30656,#30689,.T.); +#30687 = VERTEX_POINT('',#30688); +#30688 = CARTESIAN_POINT('',(7.50097449872,-0.330833011563, + 0.731087185047)); +#30689 = LINE('',#30690,#30691); +#30690 = CARTESIAN_POINT('',(7.50097449872,-0.315195052713, + 0.775588823264)); +#30691 = VECTOR('',#30692,1.); +#30692 = DIRECTION('',(0.,0.331528418358,0.94344523308)); +#30693 = ORIENTED_EDGE('',*,*,#30694,.T.); +#30694 = EDGE_CURVE('',#30687,#30678,#30695,.T.); +#30695 = LINE('',#30696,#30697); +#30696 = CARTESIAN_POINT('',(7.50097449872,-0.330833011563, + 0.731087185047)); +#30697 = VECTOR('',#30698,1.); +#30698 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30699 = PLANE('',#30700); +#30700 = AXIS2_PLACEMENT_3D('',#30701,#30702,#30703); +#30701 = CARTESIAN_POINT('',(7.50097449872,-0.315195052713, + 0.775588823264)); +#30702 = DIRECTION('',(6.588042851037E-15,-0.94344523308,0.331528418358) + ); +#30703 = DIRECTION('',(-1.,-6.982962677686E-15,3.944304526105E-31)); +#30704 = ADVANCED_FACE('',(#30705),#30730,.F.); +#30705 = FACE_BOUND('',#30706,.T.); +#30706 = EDGE_LOOP('',(#30707,#30715,#30716,#30724)); +#30707 = ORIENTED_EDGE('',*,*,#30708,.T.); +#30708 = EDGE_CURVE('',#30709,#30678,#30711,.T.); +#30709 = VERTEX_POINT('',#30710); +#30710 = CARTESIAN_POINT('',(7.499974498734,-0.354040407942, + 0.731087185047)); +#30711 = LINE('',#30712,#30713); +#30712 = CARTESIAN_POINT('',(7.499974498734,-0.330833011563, + 0.731087185047)); +#30713 = VECTOR('',#30714,1.); +#30714 = DIRECTION('',(0.,1.,0.)); +#30715 = ORIENTED_EDGE('',*,*,#30694,.F.); +#30716 = ORIENTED_EDGE('',*,*,#30717,.F.); +#30717 = EDGE_CURVE('',#30718,#30687,#30720,.T.); +#30718 = VERTEX_POINT('',#30719); +#30719 = CARTESIAN_POINT('',(7.50097449872,-0.354040407942, + 0.731087185047)); +#30720 = LINE('',#30721,#30722); +#30721 = CARTESIAN_POINT('',(7.50097449872,-0.330833011563, + 0.731087185047)); +#30722 = VECTOR('',#30723,1.); +#30723 = DIRECTION('',(0.,1.,0.)); +#30724 = ORIENTED_EDGE('',*,*,#30725,.T.); +#30725 = EDGE_CURVE('',#30718,#30709,#30726,.T.); +#30726 = LINE('',#30727,#30728); +#30727 = CARTESIAN_POINT('',(7.50097449872,-0.354040407942, + 0.731087185047)); +#30728 = VECTOR('',#30729,1.); +#30729 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30730 = PLANE('',#30731); +#30731 = AXIS2_PLACEMENT_3D('',#30732,#30733,#30734); +#30732 = CARTESIAN_POINT('',(7.50097449872,-0.330833011563, + 0.731087185047)); +#30733 = DIRECTION('',(0.,0.,1.)); +#30734 = DIRECTION('',(1.,0.,-0.)); +#30735 = ADVANCED_FACE('',(#30736),#30761,.F.); +#30736 = FACE_BOUND('',#30737,.T.); +#30737 = EDGE_LOOP('',(#30738,#30746,#30747,#30755)); +#30738 = ORIENTED_EDGE('',*,*,#30739,.T.); +#30739 = EDGE_CURVE('',#30740,#30709,#30742,.T.); +#30740 = VERTEX_POINT('',#30741); +#30741 = CARTESIAN_POINT('',(7.499974498734,-0.292070836966, + 0.893788501596)); +#30742 = LINE('',#30743,#30744); +#30743 = CARTESIAN_POINT('',(7.499974498734,-0.354040407942, + 0.731087185047)); +#30744 = VECTOR('',#30745,1.); +#30745 = DIRECTION('',(0.,-0.35593572437,-0.934510438742)); +#30746 = ORIENTED_EDGE('',*,*,#30725,.F.); +#30747 = ORIENTED_EDGE('',*,*,#30748,.F.); +#30748 = EDGE_CURVE('',#30749,#30718,#30751,.T.); +#30749 = VERTEX_POINT('',#30750); +#30750 = CARTESIAN_POINT('',(7.50097449872,-0.292070836966, + 0.893788501596)); +#30751 = LINE('',#30752,#30753); +#30752 = CARTESIAN_POINT('',(7.50097449872,-0.354040407942, + 0.731087185047)); +#30753 = VECTOR('',#30754,1.); +#30754 = DIRECTION('',(0.,-0.35593572437,-0.934510438742)); +#30755 = ORIENTED_EDGE('',*,*,#30756,.T.); +#30756 = EDGE_CURVE('',#30749,#30740,#30757,.T.); +#30757 = LINE('',#30758,#30759); +#30758 = CARTESIAN_POINT('',(7.50097449872,-0.292070836966, + 0.893788501596)); +#30759 = VECTOR('',#30760,1.); +#30760 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30761 = PLANE('',#30762); +#30762 = AXIS2_PLACEMENT_3D('',#30763,#30764,#30765); +#30763 = CARTESIAN_POINT('',(7.50097449872,-0.354040407942, + 0.731087185047)); +#30764 = DIRECTION('',(-6.52565151564E-15,0.934510438742,-0.35593572437) + ); +#30765 = DIRECTION('',(-1.,1.577721810442E-30,1.833379194289E-14)); +#30766 = ADVANCED_FACE('',(#30767),#30792,.F.); +#30767 = FACE_BOUND('',#30768,.T.); +#30768 = EDGE_LOOP('',(#30769,#30777,#30778,#30786)); +#30769 = ORIENTED_EDGE('',*,*,#30770,.T.); +#30770 = EDGE_CURVE('',#30771,#30740,#30773,.T.); +#30771 = VERTEX_POINT('',#30772); +#30772 = CARTESIAN_POINT('',(7.499974498734,-0.269612066276, + 0.893788501596)); +#30773 = LINE('',#30774,#30775); +#30774 = CARTESIAN_POINT('',(7.499974498734,-0.292070836966, + 0.893788501596)); +#30775 = VECTOR('',#30776,1.); +#30776 = DIRECTION('',(0.,-1.,-4.827522275376E-15)); +#30777 = ORIENTED_EDGE('',*,*,#30756,.F.); +#30778 = ORIENTED_EDGE('',*,*,#30779,.F.); +#30779 = EDGE_CURVE('',#30780,#30749,#30782,.T.); +#30780 = VERTEX_POINT('',#30781); +#30781 = CARTESIAN_POINT('',(7.50097449872,-0.269612066276, + 0.893788501596)); +#30782 = LINE('',#30783,#30784); +#30783 = CARTESIAN_POINT('',(7.50097449872,-0.292070836966, + 0.893788501596)); +#30784 = VECTOR('',#30785,1.); +#30785 = DIRECTION('',(0.,-1.,-4.827522275376E-15)); +#30786 = ORIENTED_EDGE('',*,*,#30787,.T.); +#30787 = EDGE_CURVE('',#30780,#30771,#30788,.T.); +#30788 = LINE('',#30789,#30790); +#30789 = CARTESIAN_POINT('',(7.50097449872,-0.269612066276, + 0.893788501596)); +#30790 = VECTOR('',#30791,1.); +#30791 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30792 = PLANE('',#30793); +#30793 = AXIS2_PLACEMENT_3D('',#30794,#30795,#30796); +#30794 = CARTESIAN_POINT('',(7.50097449872,-0.292070836966, + 0.893788501596)); +#30795 = DIRECTION('',(-3.371040787465E-29,4.827522275376E-15,-1.)); +#30796 = DIRECTION('',(-1.,0.,3.371040787465E-29)); +#30797 = ADVANCED_FACE('',(#30798),#30814,.F.); +#30798 = FACE_BOUND('',#30799,.T.); +#30799 = EDGE_LOOP('',(#30800,#30806,#30807,#30813)); +#30800 = ORIENTED_EDGE('',*,*,#30801,.T.); +#30801 = EDGE_CURVE('',#30578,#30771,#30802,.T.); +#30802 = LINE('',#30803,#30804); +#30803 = CARTESIAN_POINT('',(7.499974498734,-0.269612066276, + 0.893788501596)); +#30804 = VECTOR('',#30805,1.); +#30805 = DIRECTION('',(4.981880937224E-15,-0.355935724364,0.934510438744 + )); +#30806 = ORIENTED_EDGE('',*,*,#30787,.F.); +#30807 = ORIENTED_EDGE('',*,*,#30808,.F.); +#30808 = EDGE_CURVE('',#30586,#30780,#30809,.T.); +#30809 = LINE('',#30810,#30811); +#30810 = CARTESIAN_POINT('',(7.50097449872,-0.269612066276, + 0.893788501596)); +#30811 = VECTOR('',#30812,1.); +#30812 = DIRECTION('',(4.981880937224E-15,-0.355935724364,0.934510438744 + )); +#30813 = ORIENTED_EDGE('',*,*,#30585,.T.); +#30814 = PLANE('',#30815); +#30815 = AXIS2_PLACEMENT_3D('',#30816,#30817,#30818); +#30816 = CARTESIAN_POINT('',(7.50097449872,-0.269612066276, + 0.893788501596)); +#30817 = DIRECTION('',(6.525651515657E-15,-0.934510438744, + -0.355935724364)); +#30818 = DIRECTION('',(0.,0.355935724364,-0.934510438744)); +#30819 = ADVANCED_FACE('',(#30820,#30828),#30838,.T.); +#30820 = FACE_BOUND('',#30821,.T.); +#30821 = EDGE_LOOP('',(#30822,#30823,#30824,#30825,#30826,#30827)); +#30822 = ORIENTED_EDGE('',*,*,#30377,.T.); +#30823 = ORIENTED_EDGE('',*,*,#30553,.T.); +#30824 = ORIENTED_EDGE('',*,*,#30522,.T.); +#30825 = ORIENTED_EDGE('',*,*,#30485,.T.); +#30826 = ORIENTED_EDGE('',*,*,#30454,.T.); +#30827 = ORIENTED_EDGE('',*,*,#30417,.T.); +#30828 = FACE_BOUND('',#30829,.T.); +#30829 = EDGE_LOOP('',(#30830,#30831,#30832,#30833,#30834,#30835,#30836, + #30837)); +#30830 = ORIENTED_EDGE('',*,*,#30801,.F.); +#30831 = ORIENTED_EDGE('',*,*,#30575,.F.); +#30832 = ORIENTED_EDGE('',*,*,#30615,.F.); +#30833 = ORIENTED_EDGE('',*,*,#30646,.F.); +#30834 = ORIENTED_EDGE('',*,*,#30677,.F.); +#30835 = ORIENTED_EDGE('',*,*,#30708,.F.); +#30836 = ORIENTED_EDGE('',*,*,#30739,.F.); +#30837 = ORIENTED_EDGE('',*,*,#30770,.F.); +#30838 = PLANE('',#30839); +#30839 = AXIS2_PLACEMENT_3D('',#30840,#30841,#30842); +#30840 = CARTESIAN_POINT('',(7.499974498734,0.934963205914, + 1.849999998875)); +#30841 = DIRECTION('',(-1.,0.,5.331006193917E-15)); +#30842 = DIRECTION('',(0.,1.,0.)); +#30843 = ADVANCED_FACE('',(#30844,#30852),#30862,.F.); +#30844 = FACE_BOUND('',#30845,.T.); +#30845 = EDGE_LOOP('',(#30846,#30847,#30848,#30849,#30850,#30851)); +#30846 = ORIENTED_EDGE('',*,*,#30560,.F.); +#30847 = ORIENTED_EDGE('',*,*,#30395,.F.); +#30848 = ORIENTED_EDGE('',*,*,#30434,.F.); +#30849 = ORIENTED_EDGE('',*,*,#30470,.F.); +#30850 = ORIENTED_EDGE('',*,*,#30502,.F.); +#30851 = ORIENTED_EDGE('',*,*,#30538,.F.); +#30852 = FACE_BOUND('',#30853,.T.); +#30853 = EDGE_LOOP('',(#30854,#30855,#30856,#30857,#30858,#30859,#30860, + #30861)); +#30854 = ORIENTED_EDGE('',*,*,#30808,.T.); +#30855 = ORIENTED_EDGE('',*,*,#30779,.T.); +#30856 = ORIENTED_EDGE('',*,*,#30748,.T.); +#30857 = ORIENTED_EDGE('',*,*,#30717,.T.); +#30858 = ORIENTED_EDGE('',*,*,#30686,.T.); +#30859 = ORIENTED_EDGE('',*,*,#30655,.T.); +#30860 = ORIENTED_EDGE('',*,*,#30624,.T.); +#30861 = ORIENTED_EDGE('',*,*,#30593,.T.); +#30862 = PLANE('',#30863); +#30863 = AXIS2_PLACEMENT_3D('',#30864,#30865,#30866); +#30864 = CARTESIAN_POINT('',(7.50097449872,0.934963205914,1.849999998875 + )); +#30865 = DIRECTION('',(-1.,0.,5.331006193917E-15)); +#30866 = DIRECTION('',(0.,1.,0.)); +#30867 = MANIFOLD_SOLID_BREP('',#30868); +#30868 = CLOSED_SHELL('',(#30869,#30923,#30963,#31009,#31046,#31077, + #31114,#31151,#31188,#31219,#31256,#31293,#31326,#31363,#31400, + #31437,#31474,#31511,#31548,#31585,#31616,#31647,#31678,#31711, + #31748,#31785,#31822,#31859,#31896,#31933,#31970,#32007,#32044, + #32081,#32118,#32146,#32191)); +#30869 = ADVANCED_FACE('',(#30870),#30910,.T.); +#30870 = FACE_BOUND('',#30871,.T.); +#30871 = EDGE_LOOP('',(#30872,#30885,#30893,#30904)); +#30872 = ORIENTED_EDGE('',*,*,#30873,.F.); +#30873 = EDGE_CURVE('',#30874,#30876,#30878,.T.); +#30874 = VERTEX_POINT('',#30875); +#30875 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864,0.8138117349 + )); +#30876 = VERTEX_POINT('',#30877); +#30877 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864, + 0.723582101371)); +#30878 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30879,#30880,#30881,#30882, + #30883,#30884),.UNSPECIFIED.,.F.,.F.,(4,2,4),(2.,3.,4.), + .UNSPECIFIED.); +#30879 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864,0.8138117349 + )); +#30880 = CARTESIAN_POINT('',(7.499974498734,-1.710068476414,0.8138117349 + )); +#30881 = CARTESIAN_POINT('',(7.499974498734,-1.730890682564, + 0.79414630082)); +#30882 = CARTESIAN_POINT('',(7.499974498734,-1.730890682564, + 0.743247535451)); +#30883 = CARTESIAN_POINT('',(7.499974498734,-1.710068476414, + 0.723582101371)); +#30884 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864, + 0.723582101371)); +#30885 = ORIENTED_EDGE('',*,*,#30886,.F.); +#30886 = EDGE_CURVE('',#30887,#30874,#30889,.T.); +#30887 = VERTEX_POINT('',#30888); +#30888 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864,0.8138117349) + ); +#30889 = LINE('',#30890,#30891); +#30890 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864,0.8138117349) + ); +#30891 = VECTOR('',#30892,1.); +#30892 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30893 = ORIENTED_EDGE('',*,*,#30894,.T.); +#30894 = EDGE_CURVE('',#30887,#30895,#30897,.T.); +#30895 = VERTEX_POINT('',#30896); +#30896 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864, + 0.723582101371)); +#30897 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30898,#30899,#30900,#30901, + #30902,#30903),.UNSPECIFIED.,.F.,.F.,(4,2,4),(2.,3.,4.), + .UNSPECIFIED.); +#30898 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864,0.8138117349) + ); +#30899 = CARTESIAN_POINT('',(7.50097449872,-1.710068476414,0.8138117349) + ); +#30900 = CARTESIAN_POINT('',(7.50097449872,-1.730890682564,0.79414630082 + )); +#30901 = CARTESIAN_POINT('',(7.50097449872,-1.730890682564, + 0.743247535451)); +#30902 = CARTESIAN_POINT('',(7.50097449872,-1.710068476414, + 0.723582101371)); +#30903 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864, + 0.723582101371)); +#30904 = ORIENTED_EDGE('',*,*,#30905,.T.); +#30905 = EDGE_CURVE('',#30895,#30876,#30906,.T.); +#30906 = LINE('',#30907,#30908); +#30907 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864, + 0.723582101371)); +#30908 = VECTOR('',#30909,1.); +#30909 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30910 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#30911,#30912) + ,(#30913,#30914) + ,(#30915,#30916) + ,(#30917,#30918) + ,(#30919,#30920) + ,(#30921,#30922 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,2,4),(2,2),(2.,3.,4.),(0.,1.), + .UNSPECIFIED.); +#30911 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864,0.8138117349) + ); +#30912 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864,0.8138117349 + )); +#30913 = CARTESIAN_POINT('',(7.50097449872,-1.710068476414,0.8138117349) + ); +#30914 = CARTESIAN_POINT('',(7.499974498734,-1.710068476414,0.8138117349 + )); +#30915 = CARTESIAN_POINT('',(7.50097449872,-1.730890682564,0.79414630082 + )); +#30916 = CARTESIAN_POINT('',(7.499974498734,-1.730890682564, + 0.79414630082)); +#30917 = CARTESIAN_POINT('',(7.50097449872,-1.730890682564, + 0.743247535451)); +#30918 = CARTESIAN_POINT('',(7.499974498734,-1.730890682564, + 0.743247535451)); +#30919 = CARTESIAN_POINT('',(7.50097449872,-1.710068476414, + 0.723582101371)); +#30920 = CARTESIAN_POINT('',(7.499974498734,-1.710068476414, + 0.723582101371)); +#30921 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864, + 0.723582101371)); +#30922 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864, + 0.723582101371)); +#30923 = ADVANCED_FACE('',(#30924),#30948,.T.); +#30924 = FACE_BOUND('',#30925,.T.); +#30925 = EDGE_LOOP('',(#30926,#30936,#30937,#30947)); +#30926 = ORIENTED_EDGE('',*,*,#30927,.F.); +#30927 = EDGE_CURVE('',#30876,#30874,#30928,.T.); +#30928 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30929,#30930,#30931,#30932, + #30933,#30934,#30935),.UNSPECIFIED.,.F.,.F.,(4,3,4),(0.,1.,2.), + .PIECEWISE_BEZIER_KNOTS.); +#30929 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864, + 0.723582101371)); +#30930 = CARTESIAN_POINT('',(7.499974498734,-1.660326527244, + 0.723582101371)); +#30931 = CARTESIAN_POINT('',(7.499974498734,-1.640661093164, + 0.744404351649)); +#30932 = CARTESIAN_POINT('',(7.499974498734,-1.640661093164, + 0.768696918135)); +#30933 = CARTESIAN_POINT('',(7.499974498734,-1.640661093164, + 0.79414630082)); +#30934 = CARTESIAN_POINT('',(7.499974498734,-1.661483299313,0.8138117349 + )); +#30935 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864,0.8138117349 + )); +#30936 = ORIENTED_EDGE('',*,*,#30905,.F.); +#30937 = ORIENTED_EDGE('',*,*,#30938,.T.); +#30938 = EDGE_CURVE('',#30895,#30887,#30939,.T.); +#30939 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30940,#30941,#30942,#30943, + #30944,#30945,#30946),.UNSPECIFIED.,.F.,.F.,(4,3,4),(0.,1.,2.), + .PIECEWISE_BEZIER_KNOTS.); +#30940 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864, + 0.723582101371)); +#30941 = CARTESIAN_POINT('',(7.50097449872,-1.660326527244, + 0.723582101371)); +#30942 = CARTESIAN_POINT('',(7.50097449872,-1.640661093164, + 0.744404351649)); +#30943 = CARTESIAN_POINT('',(7.50097449872,-1.640661093164, + 0.768696918135)); +#30944 = CARTESIAN_POINT('',(7.50097449872,-1.640661093164,0.79414630082 + )); +#30945 = CARTESIAN_POINT('',(7.50097449872,-1.661483299313,0.8138117349) + ); +#30946 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864,0.8138117349) + ); +#30947 = ORIENTED_EDGE('',*,*,#30886,.T.); +#30948 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#30949,#30950) + ,(#30951,#30952) + ,(#30953,#30954) + ,(#30955,#30956) + ,(#30957,#30958) + ,(#30959,#30960) + ,(#30961,#30962 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,3,4),(2,2),(0.,1.,2.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#30949 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864, + 0.723582101371)); +#30950 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864, + 0.723582101371)); +#30951 = CARTESIAN_POINT('',(7.50097449872,-1.660326527244, + 0.723582101371)); +#30952 = CARTESIAN_POINT('',(7.499974498734,-1.660326527244, + 0.723582101371)); +#30953 = CARTESIAN_POINT('',(7.50097449872,-1.640661093164, + 0.744404351649)); +#30954 = CARTESIAN_POINT('',(7.499974498734,-1.640661093164, + 0.744404351649)); +#30955 = CARTESIAN_POINT('',(7.50097449872,-1.640661093164, + 0.768696918135)); +#30956 = CARTESIAN_POINT('',(7.499974498734,-1.640661093164, + 0.768696918135)); +#30957 = CARTESIAN_POINT('',(7.50097449872,-1.640661093164,0.79414630082 + )); +#30958 = CARTESIAN_POINT('',(7.499974498734,-1.640661093164, + 0.79414630082)); +#30959 = CARTESIAN_POINT('',(7.50097449872,-1.661483299313,0.8138117349) + ); +#30960 = CARTESIAN_POINT('',(7.499974498734,-1.661483299313,0.8138117349 + )); +#30961 = CARTESIAN_POINT('',(7.50097449872,-1.685775887864,0.8138117349) + ); +#30962 = CARTESIAN_POINT('',(7.499974498734,-1.685775887864,0.8138117349 + )); +#30963 = ADVANCED_FACE('',(#30964),#31000,.F.); +#30964 = FACE_BOUND('',#30965,.F.); +#30965 = EDGE_LOOP('',(#30966,#30976,#30985,#30993)); +#30966 = ORIENTED_EDGE('',*,*,#30967,.F.); +#30967 = EDGE_CURVE('',#30968,#30970,#30972,.T.); +#30968 = VERTEX_POINT('',#30969); +#30969 = CARTESIAN_POINT('',(7.50097449872,-1.240411867402, + 0.782578447739)); +#30970 = VERTEX_POINT('',#30971); +#30971 = CARTESIAN_POINT('',(7.499974498734,-1.240411867402, + 0.782578447739)); +#30972 = LINE('',#30973,#30974); +#30973 = CARTESIAN_POINT('',(7.50097449872,-1.240411867402, + 0.782578447739)); +#30974 = VECTOR('',#30975,1.); +#30975 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30976 = ORIENTED_EDGE('',*,*,#30977,.T.); +#30977 = EDGE_CURVE('',#30968,#30978,#30980,.T.); +#30978 = VERTEX_POINT('',#30979); +#30979 = CARTESIAN_POINT('',(7.50097449872,-1.197610638905,0.89247347122 + )); +#30980 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30981,#30982,#30983,#30984), + .UNSPECIFIED.,.F.,.F.,(4,4),(34.,35.),.PIECEWISE_BEZIER_KNOTS.); +#30981 = CARTESIAN_POINT('',(7.50097449872,-1.240411867402, + 0.782578447739)); +#30982 = CARTESIAN_POINT('',(7.50097449872,-1.21264889645,0.81265496283) + ); +#30983 = CARTESIAN_POINT('',(7.50097449872,-1.197610638905,0.85198583099 + )); +#30984 = CARTESIAN_POINT('',(7.50097449872,-1.197610638905,0.89247347122 + )); +#30985 = ORIENTED_EDGE('',*,*,#30986,.T.); +#30986 = EDGE_CURVE('',#30978,#30987,#30989,.T.); +#30987 = VERTEX_POINT('',#30988); +#30988 = CARTESIAN_POINT('',(7.499974498734,-1.197610638905, + 0.89247347122)); +#30989 = LINE('',#30990,#30991); +#30990 = CARTESIAN_POINT('',(7.50097449872,-1.197610638905,0.89247347122 + )); +#30991 = VECTOR('',#30992,1.); +#30992 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#30993 = ORIENTED_EDGE('',*,*,#30994,.F.); +#30994 = EDGE_CURVE('',#30970,#30987,#30995,.T.); +#30995 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#30996,#30997,#30998,#30999), + .UNSPECIFIED.,.F.,.F.,(4,4),(34.,35.),.PIECEWISE_BEZIER_KNOTS.); +#30996 = CARTESIAN_POINT('',(7.499974498734,-1.240411867402, + 0.782578447739)); +#30997 = CARTESIAN_POINT('',(7.499974498734,-1.21264889645,0.81265496283 + )); +#30998 = CARTESIAN_POINT('',(7.499974498734,-1.197610638905, + 0.85198583099)); +#30999 = CARTESIAN_POINT('',(7.499974498734,-1.197610638905, + 0.89247347122)); +#31000 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31001,#31002) + ,(#31003,#31004) + ,(#31005,#31006) + ,(#31007,#31008 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(34.,35.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31001 = CARTESIAN_POINT('',(7.50097449872,-1.240411867402, + 0.782578447739)); +#31002 = CARTESIAN_POINT('',(7.499974498734,-1.240411867402, + 0.782578447739)); +#31003 = CARTESIAN_POINT('',(7.50097449872,-1.21264889645,0.81265496283) + ); +#31004 = CARTESIAN_POINT('',(7.499974498734,-1.21264889645,0.81265496283 + )); +#31005 = CARTESIAN_POINT('',(7.50097449872,-1.197610638905,0.85198583099 + )); +#31006 = CARTESIAN_POINT('',(7.499974498734,-1.197610638905, + 0.85198583099)); +#31007 = CARTESIAN_POINT('',(7.50097449872,-1.197610638905,0.89247347122 + )); +#31008 = CARTESIAN_POINT('',(7.499974498734,-1.197610638905, + 0.89247347122)); +#31009 = ADVANCED_FACE('',(#31010),#31037,.F.); +#31010 = FACE_BOUND('',#31011,.F.); +#31011 = EDGE_LOOP('',(#31012,#31022,#31029,#31030)); +#31012 = ORIENTED_EDGE('',*,*,#31013,.F.); +#31013 = EDGE_CURVE('',#31014,#31016,#31018,.T.); +#31014 = VERTEX_POINT('',#31015); +#31015 = CARTESIAN_POINT('',(7.50097449872,-1.345679714347, + 0.730522910301)); +#31016 = VERTEX_POINT('',#31017); +#31017 = CARTESIAN_POINT('',(7.499974498734,-1.345679714347, + 0.730522910301)); +#31018 = LINE('',#31019,#31020); +#31019 = CARTESIAN_POINT('',(7.50097449872,-1.345679714347, + 0.730522910301)); +#31020 = VECTOR('',#31021,1.); +#31021 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31022 = ORIENTED_EDGE('',*,*,#31023,.T.); +#31023 = EDGE_CURVE('',#31014,#30968,#31024,.T.); +#31024 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31025,#31026,#31027,#31028), + .UNSPECIFIED.,.F.,.F.,(4,4),(33.,34.),.PIECEWISE_BEZIER_KNOTS.); +#31025 = CARTESIAN_POINT('',(7.50097449872,-1.345679714347, + 0.730522910301)); +#31026 = CARTESIAN_POINT('',(7.50097449872,-1.305192074118, + 0.733993270638)); +#31027 = CARTESIAN_POINT('',(7.50097449872,-1.268174794225, + 0.752501932649)); +#31028 = CARTESIAN_POINT('',(7.50097449872,-1.240411867402, + 0.782578447739)); +#31029 = ORIENTED_EDGE('',*,*,#30967,.T.); +#31030 = ORIENTED_EDGE('',*,*,#31031,.F.); +#31031 = EDGE_CURVE('',#31016,#30970,#31032,.T.); +#31032 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31033,#31034,#31035,#31036), + .UNSPECIFIED.,.F.,.F.,(4,4),(33.,34.),.PIECEWISE_BEZIER_KNOTS.); +#31033 = CARTESIAN_POINT('',(7.499974498734,-1.345679714347, + 0.730522910301)); +#31034 = CARTESIAN_POINT('',(7.499974498734,-1.305192074118, + 0.733993270638)); +#31035 = CARTESIAN_POINT('',(7.499974498734,-1.268174794225, + 0.752501932649)); +#31036 = CARTESIAN_POINT('',(7.499974498734,-1.240411867402, + 0.782578447739)); +#31037 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31038,#31039) + ,(#31040,#31041) + ,(#31042,#31043) + ,(#31044,#31045 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(33.,34.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31038 = CARTESIAN_POINT('',(7.50097449872,-1.345679714347, + 0.730522910301)); +#31039 = CARTESIAN_POINT('',(7.499974498734,-1.345679714347, + 0.730522910301)); +#31040 = CARTESIAN_POINT('',(7.50097449872,-1.305192074118, + 0.733993270638)); +#31041 = CARTESIAN_POINT('',(7.499974498734,-1.305192074118, + 0.733993270638)); +#31042 = CARTESIAN_POINT('',(7.50097449872,-1.268174794225, + 0.752501932649)); +#31043 = CARTESIAN_POINT('',(7.499974498734,-1.268174794225, + 0.752501932649)); +#31044 = CARTESIAN_POINT('',(7.50097449872,-1.240411867402, + 0.782578447739)); +#31045 = CARTESIAN_POINT('',(7.499974498734,-1.240411867402, + 0.782578447739)); +#31046 = ADVANCED_FACE('',(#31047),#31072,.F.); +#31047 = FACE_BOUND('',#31048,.T.); +#31048 = EDGE_LOOP('',(#31049,#31057,#31058,#31066)); +#31049 = ORIENTED_EDGE('',*,*,#31050,.T.); +#31050 = EDGE_CURVE('',#31051,#31016,#31053,.T.); +#31051 = VERTEX_POINT('',#31052); +#31052 = CARTESIAN_POINT('',(7.499974498734,-1.413930281401, + 0.730522910301)); +#31053 = LINE('',#31054,#31055); +#31054 = CARTESIAN_POINT('',(7.499974498734,-1.349150074684, + 0.730522910301)); +#31055 = VECTOR('',#31056,1.); +#31056 = DIRECTION('',(0.,1.,0.)); +#31057 = ORIENTED_EDGE('',*,*,#31013,.F.); +#31058 = ORIENTED_EDGE('',*,*,#31059,.F.); +#31059 = EDGE_CURVE('',#31060,#31014,#31062,.T.); +#31060 = VERTEX_POINT('',#31061); +#31061 = CARTESIAN_POINT('',(7.50097449872,-1.413930281401, + 0.730522910301)); +#31062 = LINE('',#31063,#31064); +#31063 = CARTESIAN_POINT('',(7.50097449872,-1.413930281401, + 0.730522910301)); +#31064 = VECTOR('',#31065,1.); +#31065 = DIRECTION('',(-1.414718479186E-14,1.,3.536796197964E-15)); +#31066 = ORIENTED_EDGE('',*,*,#31067,.T.); +#31067 = EDGE_CURVE('',#31060,#31051,#31068,.T.); +#31068 = LINE('',#31069,#31070); +#31069 = CARTESIAN_POINT('',(7.50097449872,-1.413930281401, + 0.730522910301)); +#31070 = VECTOR('',#31071,1.); +#31071 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31072 = PLANE('',#31073); +#31073 = AXIS2_PLACEMENT_3D('',#31074,#31075,#31076); +#31074 = CARTESIAN_POINT('',(7.50097449872,-1.349150074684, + 0.730522910301)); +#31075 = DIRECTION('',(0.,0.,1.)); +#31076 = DIRECTION('',(1.,0.,-0.)); +#31077 = ADVANCED_FACE('',(#31078),#31105,.F.); +#31078 = FACE_BOUND('',#31079,.F.); +#31079 = EDGE_LOOP('',(#31080,#31090,#31097,#31098)); +#31080 = ORIENTED_EDGE('',*,*,#31081,.F.); +#31081 = EDGE_CURVE('',#31082,#31084,#31086,.T.); +#31082 = VERTEX_POINT('',#31083); +#31083 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.766383373997)); +#31084 = VERTEX_POINT('',#31085); +#31085 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 0.766383373997)); +#31086 = LINE('',#31087,#31088); +#31087 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.766383373997)); +#31088 = VECTOR('',#31089,1.); +#31089 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31090 = ORIENTED_EDGE('',*,*,#31091,.T.); +#31091 = EDGE_CURVE('',#31082,#31060,#31092,.T.); +#31092 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31093,#31094,#31095,#31096), + .UNSPECIFIED.,.F.,.F.,(4,4),(28.,29.),.PIECEWISE_BEZIER_KNOTS.); +#31093 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.766383373997)); +#31094 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.747874756114)); +#31095 = CARTESIAN_POINT('',(7.50097449872,-1.432438943411,0.73167968237 + )); +#31096 = CARTESIAN_POINT('',(7.50097449872,-1.413930281401, + 0.730522910301)); +#31097 = ORIENTED_EDGE('',*,*,#31067,.T.); +#31098 = ORIENTED_EDGE('',*,*,#31099,.F.); +#31099 = EDGE_CURVE('',#31084,#31051,#31100,.T.); +#31100 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31101,#31102,#31103,#31104), + .UNSPECIFIED.,.F.,.F.,(4,4),(28.,29.),.PIECEWISE_BEZIER_KNOTS.); +#31101 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 0.766383373997)); +#31102 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 0.747874756114)); +#31103 = CARTESIAN_POINT('',(7.499974498734,-1.432438943411, + 0.73167968237)); +#31104 = CARTESIAN_POINT('',(7.499974498734,-1.413930281401, + 0.730522910301)); +#31105 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31106,#31107) + ,(#31108,#31109) + ,(#31110,#31111) + ,(#31112,#31113 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(28.,29.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31106 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.766383373997)); +#31107 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 0.766383373997)); +#31108 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.747874756114)); +#31109 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 0.747874756114)); +#31110 = CARTESIAN_POINT('',(7.50097449872,-1.432438943411,0.73167968237 + )); +#31111 = CARTESIAN_POINT('',(7.499974498734,-1.432438943411, + 0.73167968237)); +#31112 = CARTESIAN_POINT('',(7.50097449872,-1.413930281401, + 0.730522910301)); +#31113 = CARTESIAN_POINT('',(7.499974498734,-1.413930281401, + 0.730522910301)); +#31114 = ADVANCED_FACE('',(#31115),#31142,.F.); +#31115 = FACE_BOUND('',#31116,.F.); +#31116 = EDGE_LOOP('',(#31117,#31127,#31134,#31135)); +#31117 = ORIENTED_EDGE('',*,*,#31118,.F.); +#31118 = EDGE_CURVE('',#31119,#31121,#31123,.T.); +#31119 = VERTEX_POINT('',#31120); +#31120 = CARTESIAN_POINT('',(7.50097449872,-1.411616737261, + 0.802243837691)); +#31121 = VERTEX_POINT('',#31122); +#31122 = CARTESIAN_POINT('',(7.499974498734,-1.411616737261, + 0.802243837691)); +#31123 = LINE('',#31124,#31125); +#31124 = CARTESIAN_POINT('',(7.50097449872,-1.411616737261, + 0.802243837691)); +#31125 = VECTOR('',#31126,1.); +#31126 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31127 = ORIENTED_EDGE('',*,*,#31128,.T.); +#31128 = EDGE_CURVE('',#31119,#31082,#31129,.T.); +#31129 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31130,#31131,#31132,#31133), + .UNSPECIFIED.,.F.,.F.,(4,4),(27.,28.),.PIECEWISE_BEZIER_KNOTS.); +#31130 = CARTESIAN_POINT('',(7.50097449872,-1.411616737261, + 0.802243837691)); +#31131 = CARTESIAN_POINT('',(7.50097449872,-1.431282171341, + 0.802243837691)); +#31132 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.786048763949)); +#31133 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.766383373997)); +#31134 = ORIENTED_EDGE('',*,*,#31081,.T.); +#31135 = ORIENTED_EDGE('',*,*,#31136,.F.); +#31136 = EDGE_CURVE('',#31121,#31084,#31137,.T.); +#31137 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31138,#31139,#31140,#31141), + .UNSPECIFIED.,.F.,.F.,(4,4),(27.,28.),.PIECEWISE_BEZIER_KNOTS.); +#31138 = CARTESIAN_POINT('',(7.499974498734,-1.411616737261, + 0.802243837691)); +#31139 = CARTESIAN_POINT('',(7.499974498734,-1.431282171341, + 0.802243837691)); +#31140 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 0.786048763949)); +#31141 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 0.766383373997)); +#31142 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31143,#31144) + ,(#31145,#31146) + ,(#31147,#31148) + ,(#31149,#31150 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(27.,28.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31143 = CARTESIAN_POINT('',(7.50097449872,-1.411616737261, + 0.802243837691)); +#31144 = CARTESIAN_POINT('',(7.499974498734,-1.411616737261, + 0.802243837691)); +#31145 = CARTESIAN_POINT('',(7.50097449872,-1.431282171341, + 0.802243837691)); +#31146 = CARTESIAN_POINT('',(7.499974498734,-1.431282171341, + 0.802243837691)); +#31147 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.786048763949)); +#31148 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 0.786048763949)); +#31149 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 0.766383373997)); +#31150 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 0.766383373997)); +#31151 = ADVANCED_FACE('',(#31152),#31179,.F.); +#31152 = FACE_BOUND('',#31153,.F.); +#31153 = EDGE_LOOP('',(#31154,#31164,#31171,#31172)); +#31154 = ORIENTED_EDGE('',*,*,#31155,.F.); +#31155 = EDGE_CURVE('',#31156,#31158,#31160,.T.); +#31156 = VERTEX_POINT('',#31157); +#31157 = CARTESIAN_POINT('',(7.50097449872,-1.404676016587, + 0.801087065622)); +#31158 = VERTEX_POINT('',#31159); +#31159 = CARTESIAN_POINT('',(7.499974498734,-1.404676016587, + 0.801087065622)); +#31160 = LINE('',#31161,#31162); +#31161 = CARTESIAN_POINT('',(7.50097449872,-1.404676016587, + 0.801087065622)); +#31162 = VECTOR('',#31163,1.); +#31163 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31164 = ORIENTED_EDGE('',*,*,#31165,.T.); +#31165 = EDGE_CURVE('',#31156,#31119,#31166,.T.); +#31166 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31167,#31168,#31169,#31170), + .UNSPECIFIED.,.F.,.F.,(4,4),(26.,27.),.PIECEWISE_BEZIER_KNOTS.); +#31167 = CARTESIAN_POINT('',(7.50097449872,-1.404676016587, + 0.801087065622)); +#31168 = CARTESIAN_POINT('',(7.50097449872,-1.406989604855, + 0.801087065622)); +#31169 = CARTESIAN_POINT('',(7.50097449872,-1.409303193122, + 0.802243837691)); +#31170 = CARTESIAN_POINT('',(7.50097449872,-1.411616737261, + 0.802243837691)); +#31171 = ORIENTED_EDGE('',*,*,#31118,.T.); +#31172 = ORIENTED_EDGE('',*,*,#31173,.F.); +#31173 = EDGE_CURVE('',#31158,#31121,#31174,.T.); +#31174 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31175,#31176,#31177,#31178), + .UNSPECIFIED.,.F.,.F.,(4,4),(26.,27.),.PIECEWISE_BEZIER_KNOTS.); +#31175 = CARTESIAN_POINT('',(7.499974498734,-1.404676016587, + 0.801087065622)); +#31176 = CARTESIAN_POINT('',(7.499974498734,-1.406989604855, + 0.801087065622)); +#31177 = CARTESIAN_POINT('',(7.499974498734,-1.409303193122, + 0.802243837691)); +#31178 = CARTESIAN_POINT('',(7.499974498734,-1.411616737261, + 0.802243837691)); +#31179 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31180,#31181) + ,(#31182,#31183) + ,(#31184,#31185) + ,(#31186,#31187 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(26.,27.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31180 = CARTESIAN_POINT('',(7.50097449872,-1.404676016587, + 0.801087065622)); +#31181 = CARTESIAN_POINT('',(7.499974498734,-1.404676016587, + 0.801087065622)); +#31182 = CARTESIAN_POINT('',(7.50097449872,-1.406989604855, + 0.801087065622)); +#31183 = CARTESIAN_POINT('',(7.499974498734,-1.406989604855, + 0.801087065622)); +#31184 = CARTESIAN_POINT('',(7.50097449872,-1.409303193122, + 0.802243837691)); +#31185 = CARTESIAN_POINT('',(7.499974498734,-1.409303193122, + 0.802243837691)); +#31186 = CARTESIAN_POINT('',(7.50097449872,-1.411616737261, + 0.802243837691)); +#31187 = CARTESIAN_POINT('',(7.499974498734,-1.411616737261, + 0.802243837691)); +#31188 = ADVANCED_FACE('',(#31189),#31214,.F.); +#31189 = FACE_BOUND('',#31190,.T.); +#31190 = EDGE_LOOP('',(#31191,#31199,#31200,#31208)); +#31191 = ORIENTED_EDGE('',*,*,#31192,.T.); +#31192 = EDGE_CURVE('',#31193,#31158,#31195,.T.); +#31193 = VERTEX_POINT('',#31194); +#31194 = CARTESIAN_POINT('',(7.499974498734,-1.352620479149, + 0.801087065622)); +#31195 = LINE('',#31196,#31197); +#31196 = CARTESIAN_POINT('',(7.499974498734,-1.352620479149, + 0.801087065622)); +#31197 = VECTOR('',#31198,1.); +#31198 = DIRECTION('',(1.666223746731E-14,-1.,-4.165559366827E-15)); +#31199 = ORIENTED_EDGE('',*,*,#31155,.F.); +#31200 = ORIENTED_EDGE('',*,*,#31201,.F.); +#31201 = EDGE_CURVE('',#31202,#31156,#31204,.T.); +#31202 = VERTEX_POINT('',#31203); +#31203 = CARTESIAN_POINT('',(7.50097449872,-1.352620479149, + 0.801087065622)); +#31204 = LINE('',#31205,#31206); +#31205 = CARTESIAN_POINT('',(7.50097449872,-1.352620479149, + 0.801087065622)); +#31206 = VECTOR('',#31207,1.); +#31207 = DIRECTION('',(1.666223746731E-14,-1.,-4.165559366827E-15)); +#31208 = ORIENTED_EDGE('',*,*,#31209,.T.); +#31209 = EDGE_CURVE('',#31202,#31193,#31210,.T.); +#31210 = LINE('',#31211,#31212); +#31211 = CARTESIAN_POINT('',(7.50097449872,-1.352620479149, + 0.801087065622)); +#31212 = VECTOR('',#31213,1.); +#31213 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31214 = PLANE('',#31215); +#31215 = AXIS2_PLACEMENT_3D('',#31216,#31217,#31218); +#31216 = CARTESIAN_POINT('',(7.50097449872,-1.352620479149, + 0.801087065622)); +#31217 = DIRECTION('',(-2.908794559024E-29,4.165559366827E-15,-1.)); +#31218 = DIRECTION('',(-1.,0.,2.908794559024E-29)); +#31219 = ADVANCED_FACE('',(#31220),#31247,.F.); +#31220 = FACE_BOUND('',#31221,.F.); +#31221 = EDGE_LOOP('',(#31222,#31232,#31239,#31240)); +#31222 = ORIENTED_EDGE('',*,*,#31223,.F.); +#31223 = EDGE_CURVE('',#31224,#31226,#31228,.T.); +#31224 = VERTEX_POINT('',#31225); +#31225 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.891316655022)); +#31226 = VERTEX_POINT('',#31227); +#31227 = CARTESIAN_POINT('',(7.499974498734,-1.269331610423, + 0.891316655022)); +#31228 = LINE('',#31229,#31230); +#31229 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.891316655022)); +#31230 = VECTOR('',#31231,1.); +#31231 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31232 = ORIENTED_EDGE('',*,*,#31233,.T.); +#31233 = EDGE_CURVE('',#31224,#31202,#31234,.T.); +#31234 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31235,#31236,#31237,#31238), + .UNSPECIFIED.,.F.,.F.,(4,4),(24.,25.),.PIECEWISE_BEZIER_KNOTS.); +#31235 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.891316655022)); +#31236 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.843888272054)); +#31237 = CARTESIAN_POINT('',(7.50097449872,-1.305192074118, + 0.804557425959)); +#31238 = CARTESIAN_POINT('',(7.50097449872,-1.352620479149, + 0.801087065622)); +#31239 = ORIENTED_EDGE('',*,*,#31209,.T.); +#31240 = ORIENTED_EDGE('',*,*,#31241,.F.); +#31241 = EDGE_CURVE('',#31226,#31193,#31242,.T.); +#31242 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31243,#31244,#31245,#31246), + .UNSPECIFIED.,.F.,.F.,(4,4),(24.,25.),.PIECEWISE_BEZIER_KNOTS.); +#31243 = CARTESIAN_POINT('',(7.499974498734,-1.269331610423, + 0.891316655022)); +#31244 = CARTESIAN_POINT('',(7.499974498734,-1.269331610423, + 0.843888272054)); +#31245 = CARTESIAN_POINT('',(7.499974498734,-1.305192074118, + 0.804557425959)); +#31246 = CARTESIAN_POINT('',(7.499974498734,-1.352620479149, + 0.801087065622)); +#31247 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31248,#31249) + ,(#31250,#31251) + ,(#31252,#31253) + ,(#31254,#31255 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(24.,25.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31248 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.891316655022)); +#31249 = CARTESIAN_POINT('',(7.499974498734,-1.269331610423, + 0.891316655022)); +#31250 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.843888272054)); +#31251 = CARTESIAN_POINT('',(7.499974498734,-1.269331610423, + 0.843888272054)); +#31252 = CARTESIAN_POINT('',(7.50097449872,-1.305192074118, + 0.804557425959)); +#31253 = CARTESIAN_POINT('',(7.499974498734,-1.305192074118, + 0.804557425959)); +#31254 = CARTESIAN_POINT('',(7.50097449872,-1.352620479149, + 0.801087065622)); +#31255 = CARTESIAN_POINT('',(7.499974498734,-1.352620479149, + 0.801087065622)); +#31256 = ADVANCED_FACE('',(#31257),#31284,.F.); +#31257 = FACE_BOUND('',#31258,.F.); +#31258 = EDGE_LOOP('',(#31259,#31269,#31276,#31277)); +#31259 = ORIENTED_EDGE('',*,*,#31260,.F.); +#31260 = EDGE_CURVE('',#31261,#31263,#31265,.T.); +#31261 = VERTEX_POINT('',#31262); +#31262 = CARTESIAN_POINT('',(7.50097449872,-1.359561199823, + 0.981546244423)); +#31263 = VERTEX_POINT('',#31264); +#31264 = CARTESIAN_POINT('',(7.499974498734,-1.359561199823, + 0.981546244423)); +#31265 = LINE('',#31266,#31267); +#31266 = CARTESIAN_POINT('',(7.50097449872,-1.359561199823, + 0.981546244423)); +#31267 = VECTOR('',#31268,1.); +#31268 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31269 = ORIENTED_EDGE('',*,*,#31270,.T.); +#31270 = EDGE_CURVE('',#31261,#31224,#31271,.T.); +#31271 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31272,#31273,#31274,#31275), + .UNSPECIFIED.,.F.,.F.,(4,4),(23.,24.),.PIECEWISE_BEZIER_KNOTS.); +#31272 = CARTESIAN_POINT('',(7.50097449872,-1.359561199823, + 0.981546244423)); +#31273 = CARTESIAN_POINT('',(7.50097449872,-1.309819250652, + 0.981546244423)); +#31274 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.941058604193)); +#31275 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.891316655022)); +#31276 = ORIENTED_EDGE('',*,*,#31223,.T.); +#31277 = ORIENTED_EDGE('',*,*,#31278,.F.); +#31278 = EDGE_CURVE('',#31263,#31226,#31279,.T.); +#31279 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31280,#31281,#31282,#31283), + .UNSPECIFIED.,.F.,.F.,(4,4),(23.,24.),.PIECEWISE_BEZIER_KNOTS.); +#31280 = CARTESIAN_POINT('',(7.499974498734,-1.359561199823, + 0.981546244423)); +#31281 = CARTESIAN_POINT('',(7.499974498734,-1.309819250652, + 0.981546244423)); +#31282 = CARTESIAN_POINT('',(7.499974498734,-1.269331610423, + 0.941058604193)); +#31283 = CARTESIAN_POINT('',(7.499974498734,-1.269331610423, + 0.891316655022)); +#31284 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31285,#31286) + ,(#31287,#31288) + ,(#31289,#31290) + ,(#31291,#31292 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(23.,24.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31285 = CARTESIAN_POINT('',(7.50097449872,-1.359561199823, + 0.981546244423)); +#31286 = CARTESIAN_POINT('',(7.499974498734,-1.359561199823, + 0.981546244423)); +#31287 = CARTESIAN_POINT('',(7.50097449872,-1.309819250652, + 0.981546244423)); +#31288 = CARTESIAN_POINT('',(7.499974498734,-1.309819250652, + 0.981546244423)); +#31289 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.941058604193)); +#31290 = CARTESIAN_POINT('',(7.499974498734,-1.269331610423, + 0.941058604193)); +#31291 = CARTESIAN_POINT('',(7.50097449872,-1.269331610423, + 0.891316655022)); +#31292 = CARTESIAN_POINT('',(7.499974498734,-1.269331610423, + 0.891316655022)); +#31293 = ADVANCED_FACE('',(#31294),#31321,.F.); +#31294 = FACE_BOUND('',#31295,.T.); +#31295 = EDGE_LOOP('',(#31296,#31305,#31306,#31315)); +#31296 = ORIENTED_EDGE('',*,*,#31297,.T.); +#31297 = EDGE_CURVE('',#31298,#31263,#31300,.T.); +#31298 = VERTEX_POINT('',#31299); +#31299 = CARTESIAN_POINT('',(7.499974498734,-1.368815508765, + 0.981546244423)); +#31300 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31301,#31302,#31303,#31304), + .UNSPECIFIED.,.F.,.F.,(4,4),(22.,23.),.PIECEWISE_BEZIER_KNOTS.); +#31301 = CARTESIAN_POINT('',(7.499974498734,-1.368815508765, + 0.981546244423)); +#31302 = CARTESIAN_POINT('',(7.499974498734,-1.365345148428, + 0.981546244423)); +#31303 = CARTESIAN_POINT('',(7.499974498734,-1.36303156016, + 0.981546244423)); +#31304 = CARTESIAN_POINT('',(7.499974498734,-1.359561199823, + 0.981546244423)); +#31305 = ORIENTED_EDGE('',*,*,#31260,.F.); +#31306 = ORIENTED_EDGE('',*,*,#31307,.F.); +#31307 = EDGE_CURVE('',#31308,#31261,#31310,.T.); +#31308 = VERTEX_POINT('',#31309); +#31309 = CARTESIAN_POINT('',(7.50097449872,-1.368815508765, + 0.981546244423)); +#31310 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31311,#31312,#31313,#31314), + .UNSPECIFIED.,.F.,.F.,(4,4),(22.,23.),.PIECEWISE_BEZIER_KNOTS.); +#31311 = CARTESIAN_POINT('',(7.50097449872,-1.368815508765, + 0.981546244423)); +#31312 = CARTESIAN_POINT('',(7.50097449872,-1.365345148428, + 0.981546244423)); +#31313 = CARTESIAN_POINT('',(7.50097449872,-1.36303156016,0.981546244423 + )); +#31314 = CARTESIAN_POINT('',(7.50097449872,-1.359561199823, + 0.981546244423)); +#31315 = ORIENTED_EDGE('',*,*,#31316,.T.); +#31316 = EDGE_CURVE('',#31308,#31298,#31317,.T.); +#31317 = LINE('',#31318,#31319); +#31318 = CARTESIAN_POINT('',(7.50097449872,-1.368815508765, + 0.981546244423)); +#31319 = VECTOR('',#31320,1.); +#31320 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31321 = PLANE('',#31322); +#31322 = AXIS2_PLACEMENT_3D('',#31323,#31324,#31325); +#31323 = CARTESIAN_POINT('',(7.50097449872,-1.368815508765, + 0.981546244423)); +#31324 = DIRECTION('',(0.,0.,1.)); +#31325 = DIRECTION('',(1.,0.,-0.)); +#31326 = ADVANCED_FACE('',(#31327),#31354,.F.); +#31327 = FACE_BOUND('',#31328,.F.); +#31328 = EDGE_LOOP('',(#31329,#31339,#31346,#31347)); +#31329 = ORIENTED_EDGE('',*,*,#31330,.F.); +#31330 = EDGE_CURVE('',#31331,#31333,#31335,.T.); +#31331 = VERTEX_POINT('',#31332); +#31332 = CARTESIAN_POINT('',(7.50097449872,-1.530766069683, + 1.126144959529)); +#31333 = VERTEX_POINT('',#31334); +#31334 = CARTESIAN_POINT('',(7.499974498734,-1.530766069683, + 1.126144959529)); +#31335 = LINE('',#31336,#31337); +#31336 = CARTESIAN_POINT('',(7.50097449872,-1.530766069683, + 1.126144959529)); +#31337 = VECTOR('',#31338,1.); +#31338 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31339 = ORIENTED_EDGE('',*,*,#31340,.T.); +#31340 = EDGE_CURVE('',#31331,#31308,#31341,.T.); +#31341 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31342,#31343,#31344,#31345), + .UNSPECIFIED.,.F.,.F.,(4,4),(21.,22.),.PIECEWISE_BEZIER_KNOTS.); +#31342 = CARTESIAN_POINT('',(7.50097449872,-1.530766069683, + 1.126144959529)); +#31343 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 1.126144959529)); +#31344 = CARTESIAN_POINT('',(7.50097449872,-1.378069817706, + 1.062521524882)); +#31345 = CARTESIAN_POINT('',(7.50097449872,-1.368815508765, + 0.981546244423)); +#31346 = ORIENTED_EDGE('',*,*,#31316,.T.); +#31347 = ORIENTED_EDGE('',*,*,#31348,.F.); +#31348 = EDGE_CURVE('',#31333,#31298,#31349,.T.); +#31349 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31350,#31351,#31352,#31353), + .UNSPECIFIED.,.F.,.F.,(4,4),(21.,22.),.PIECEWISE_BEZIER_KNOTS.); +#31350 = CARTESIAN_POINT('',(7.499974498734,-1.530766069683, + 1.126144959529)); +#31351 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 1.126144959529)); +#31352 = CARTESIAN_POINT('',(7.499974498734,-1.378069817706, + 1.062521524882)); +#31353 = CARTESIAN_POINT('',(7.499974498734,-1.368815508765, + 0.981546244423)); +#31354 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31355,#31356) + ,(#31357,#31358) + ,(#31359,#31360) + ,(#31361,#31362 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(21.,22.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31355 = CARTESIAN_POINT('',(7.50097449872,-1.530766069683, + 1.126144959529)); +#31356 = CARTESIAN_POINT('',(7.499974498734,-1.530766069683, + 1.126144959529)); +#31357 = CARTESIAN_POINT('',(7.50097449872,-1.447477200956, + 1.126144959529)); +#31358 = CARTESIAN_POINT('',(7.499974498734,-1.447477200956, + 1.126144959529)); +#31359 = CARTESIAN_POINT('',(7.50097449872,-1.378069817706, + 1.062521524882)); +#31360 = CARTESIAN_POINT('',(7.499974498734,-1.378069817706, + 1.062521524882)); +#31361 = CARTESIAN_POINT('',(7.50097449872,-1.368815508765, + 0.981546244423)); +#31362 = CARTESIAN_POINT('',(7.499974498734,-1.368815508765, + 0.981546244423)); +#31363 = ADVANCED_FACE('',(#31364),#31391,.F.); +#31364 = FACE_BOUND('',#31365,.F.); +#31365 = EDGE_LOOP('',(#31366,#31376,#31383,#31384)); +#31366 = ORIENTED_EDGE('',*,*,#31367,.F.); +#31367 = EDGE_CURVE('',#31368,#31370,#31372,.T.); +#31368 = VERTEX_POINT('',#31369); +#31369 = CARTESIAN_POINT('',(7.50097449872,-1.6857758658,1.015093208106) + ); +#31370 = VERTEX_POINT('',#31371); +#31371 = CARTESIAN_POINT('',(7.499974498734,-1.6857758658,1.015093208106 + )); +#31372 = LINE('',#31373,#31374); +#31373 = CARTESIAN_POINT('',(7.50097449872,-1.6857758658,1.015093208106) + ); +#31374 = VECTOR('',#31375,1.); +#31375 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31376 = ORIENTED_EDGE('',*,*,#31377,.T.); +#31377 = EDGE_CURVE('',#31368,#31331,#31378,.T.); +#31378 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31379,#31380,#31381,#31382), + .UNSPECIFIED.,.F.,.F.,(4,4),(20.,21.),.PIECEWISE_BEZIER_KNOTS.); +#31379 = CARTESIAN_POINT('',(7.50097449872,-1.6857758658,1.015093208106) + ); +#31380 = CARTESIAN_POINT('',(7.50097449872,-1.663796887581, + 1.079873370695)); +#31381 = CARTESIAN_POINT('',(7.50097449872,-1.603643813271, + 1.126144959529)); +#31382 = CARTESIAN_POINT('',(7.50097449872,-1.530766069683, + 1.126144959529)); +#31383 = ORIENTED_EDGE('',*,*,#31330,.T.); +#31384 = ORIENTED_EDGE('',*,*,#31385,.F.); +#31385 = EDGE_CURVE('',#31370,#31333,#31386,.T.); +#31386 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31387,#31388,#31389,#31390), + .UNSPECIFIED.,.F.,.F.,(4,4),(20.,21.),.PIECEWISE_BEZIER_KNOTS.); +#31387 = CARTESIAN_POINT('',(7.499974498734,-1.6857758658,1.015093208106 + )); +#31388 = CARTESIAN_POINT('',(7.499974498734,-1.663796887581, + 1.079873370695)); +#31389 = CARTESIAN_POINT('',(7.499974498734,-1.603643813271, + 1.126144959529)); +#31390 = CARTESIAN_POINT('',(7.499974498734,-1.530766069683, + 1.126144959529)); +#31391 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31392,#31393) + ,(#31394,#31395) + ,(#31396,#31397) + ,(#31398,#31399 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(20.,21.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31392 = CARTESIAN_POINT('',(7.50097449872,-1.6857758658,1.015093208106) + ); +#31393 = CARTESIAN_POINT('',(7.499974498734,-1.6857758658,1.015093208106 + )); +#31394 = CARTESIAN_POINT('',(7.50097449872,-1.663796887581, + 1.079873370695)); +#31395 = CARTESIAN_POINT('',(7.499974498734,-1.663796887581, + 1.079873370695)); +#31396 = CARTESIAN_POINT('',(7.50097449872,-1.603643813271, + 1.126144959529)); +#31397 = CARTESIAN_POINT('',(7.499974498734,-1.603643813271, + 1.126144959529)); +#31398 = CARTESIAN_POINT('',(7.50097449872,-1.530766069683, + 1.126144959529)); +#31399 = CARTESIAN_POINT('',(7.499974498734,-1.530766069683, + 1.126144959529)); +#31400 = ADVANCED_FACE('',(#31401),#31428,.F.); +#31401 = FACE_BOUND('',#31402,.F.); +#31402 = EDGE_LOOP('',(#31403,#31413,#31420,#31421)); +#31403 = ORIENTED_EDGE('',*,*,#31404,.F.); +#31404 = EDGE_CURVE('',#31405,#31407,#31409,.T.); +#31405 = VERTEX_POINT('',#31406); +#31406 = CARTESIAN_POINT('',(7.50097449872,-1.74708571218,1.032445053919 + )); +#31407 = VERTEX_POINT('',#31408); +#31408 = CARTESIAN_POINT('',(7.499974498734,-1.74708571218, + 1.032445053919)); +#31409 = LINE('',#31410,#31411); +#31410 = CARTESIAN_POINT('',(7.50097449872,-1.74708571218,1.032445053919 + )); +#31411 = VECTOR('',#31412,1.); +#31412 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31413 = ORIENTED_EDGE('',*,*,#31414,.T.); +#31414 = EDGE_CURVE('',#31405,#31368,#31415,.T.); +#31415 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31416,#31417,#31418,#31419), + .UNSPECIFIED.,.F.,.F.,(4,4),(19.,20.),.PIECEWISE_BEZIER_KNOTS.); +#31416 = CARTESIAN_POINT('',(7.50097449872,-1.74708571218,1.032445053919 + )); +#31417 = CARTESIAN_POINT('',(7.50097449872,-1.725106711896, + 1.032445053919)); +#31418 = CARTESIAN_POINT('',(7.50097449872,-1.703127711612, + 1.025504311182)); +#31419 = CARTESIAN_POINT('',(7.50097449872,-1.6857758658,1.015093208106) + ); +#31420 = ORIENTED_EDGE('',*,*,#31367,.T.); +#31421 = ORIENTED_EDGE('',*,*,#31422,.F.); +#31422 = EDGE_CURVE('',#31407,#31370,#31423,.T.); +#31423 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31424,#31425,#31426,#31427), + .UNSPECIFIED.,.F.,.F.,(4,4),(19.,20.),.PIECEWISE_BEZIER_KNOTS.); +#31424 = CARTESIAN_POINT('',(7.499974498734,-1.74708571218, + 1.032445053919)); +#31425 = CARTESIAN_POINT('',(7.499974498734,-1.725106711896, + 1.032445053919)); +#31426 = CARTESIAN_POINT('',(7.499974498734,-1.703127711612, + 1.025504311182)); +#31427 = CARTESIAN_POINT('',(7.499974498734,-1.6857758658,1.015093208106 + )); +#31428 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31429,#31430) + ,(#31431,#31432) + ,(#31433,#31434) + ,(#31435,#31436 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(19.,20.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31429 = CARTESIAN_POINT('',(7.50097449872,-1.74708571218,1.032445053919 + )); +#31430 = CARTESIAN_POINT('',(7.499974498734,-1.74708571218, + 1.032445053919)); +#31431 = CARTESIAN_POINT('',(7.50097449872,-1.725106711896, + 1.032445053919)); +#31432 = CARTESIAN_POINT('',(7.499974498734,-1.725106711896, + 1.032445053919)); +#31433 = CARTESIAN_POINT('',(7.50097449872,-1.703127711612, + 1.025504311182)); +#31434 = CARTESIAN_POINT('',(7.499974498734,-1.703127711612, + 1.025504311182)); +#31435 = CARTESIAN_POINT('',(7.50097449872,-1.6857758658,1.015093208106) + ); +#31436 = CARTESIAN_POINT('',(7.499974498734,-1.6857758658,1.015093208106 + )); +#31437 = ADVANCED_FACE('',(#31438),#31465,.F.); +#31438 = FACE_BOUND('',#31439,.F.); +#31439 = EDGE_LOOP('',(#31440,#31450,#31457,#31458)); +#31440 = ORIENTED_EDGE('',*,*,#31441,.F.); +#31441 = EDGE_CURVE('',#31442,#31444,#31446,.T.); +#31442 = VERTEX_POINT('',#31443); +#31443 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.916766081835)); +#31444 = VERTEX_POINT('',#31445); +#31445 = CARTESIAN_POINT('',(7.499974498734,-1.862764684264, + 0.916766081835)); +#31446 = LINE('',#31447,#31448); +#31447 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.916766081835)); +#31448 = VECTOR('',#31449,1.); +#31449 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31450 = ORIENTED_EDGE('',*,*,#31451,.T.); +#31451 = EDGE_CURVE('',#31442,#31405,#31452,.T.); +#31452 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31453,#31454,#31455,#31456), + .UNSPECIFIED.,.F.,.F.,(4,4),(18.,19.),.PIECEWISE_BEZIER_KNOTS.); +#31453 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.916766081835)); +#31454 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.980389516481)); +#31455 = CARTESIAN_POINT('',(7.50097449872,-1.810709146826, + 1.032445053919)); +#31456 = CARTESIAN_POINT('',(7.50097449872,-1.74708571218,1.032445053919 + )); +#31457 = ORIENTED_EDGE('',*,*,#31404,.T.); +#31458 = ORIENTED_EDGE('',*,*,#31459,.F.); +#31459 = EDGE_CURVE('',#31444,#31407,#31460,.T.); +#31460 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31461,#31462,#31463,#31464), + .UNSPECIFIED.,.F.,.F.,(4,4),(18.,19.),.PIECEWISE_BEZIER_KNOTS.); +#31461 = CARTESIAN_POINT('',(7.499974498734,-1.862764684264, + 0.916766081835)); +#31462 = CARTESIAN_POINT('',(7.499974498734,-1.862764684264, + 0.980389516481)); +#31463 = CARTESIAN_POINT('',(7.499974498734,-1.810709146826, + 1.032445053919)); +#31464 = CARTESIAN_POINT('',(7.499974498734,-1.74708571218, + 1.032445053919)); +#31465 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31466,#31467) + ,(#31468,#31469) + ,(#31470,#31471) + ,(#31472,#31473 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(18.,19.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31466 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.916766081835)); +#31467 = CARTESIAN_POINT('',(7.499974498734,-1.862764684264, + 0.916766081835)); +#31468 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.980389516481)); +#31469 = CARTESIAN_POINT('',(7.499974498734,-1.862764684264, + 0.980389516481)); +#31470 = CARTESIAN_POINT('',(7.50097449872,-1.810709146826, + 1.032445053919)); +#31471 = CARTESIAN_POINT('',(7.499974498734,-1.810709146826, + 1.032445053919)); +#31472 = CARTESIAN_POINT('',(7.50097449872,-1.74708571218,1.032445053919 + )); +#31473 = CARTESIAN_POINT('',(7.499974498734,-1.74708571218, + 1.032445053919)); +#31474 = ADVANCED_FACE('',(#31475),#31502,.F.); +#31475 = FACE_BOUND('',#31476,.F.); +#31476 = EDGE_LOOP('',(#31477,#31487,#31494,#31495)); +#31477 = ORIENTED_EDGE('',*,*,#31478,.F.); +#31478 = EDGE_CURVE('',#31479,#31481,#31483,.T.); +#31479 = VERTEX_POINT('',#31480); +#31480 = CARTESIAN_POINT('',(7.50097449872,-1.793357301013, + 0.810341418691)); +#31481 = VERTEX_POINT('',#31482); +#31482 = CARTESIAN_POINT('',(7.499974498734,-1.793357301013, + 0.810341418691)); +#31483 = LINE('',#31484,#31485); +#31484 = CARTESIAN_POINT('',(7.50097449872,-1.793357301013, + 0.810341418691)); +#31485 = VECTOR('',#31486,1.); +#31486 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31487 = ORIENTED_EDGE('',*,*,#31488,.T.); +#31488 = EDGE_CURVE('',#31479,#31442,#31489,.T.); +#31489 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31490,#31491,#31492,#31493), + .UNSPECIFIED.,.F.,.F.,(4,4),(17.,18.),.PIECEWISE_BEZIER_KNOTS.); +#31490 = CARTESIAN_POINT('',(7.50097449872,-1.793357301013, + 0.810341418691)); +#31491 = CARTESIAN_POINT('',(7.50097449872,-1.833844941243, + 0.828850058637)); +#31492 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.869337698867)); +#31493 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.916766081835)); +#31494 = ORIENTED_EDGE('',*,*,#31441,.T.); +#31495 = ORIENTED_EDGE('',*,*,#31496,.F.); +#31496 = EDGE_CURVE('',#31481,#31444,#31497,.T.); +#31497 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31498,#31499,#31500,#31501), + .UNSPECIFIED.,.F.,.F.,(4,4),(17.,18.),.PIECEWISE_BEZIER_KNOTS.); +#31498 = CARTESIAN_POINT('',(7.499974498734,-1.793357301013, + 0.810341418691)); +#31499 = CARTESIAN_POINT('',(7.499974498734,-1.833844941243, + 0.828850058637)); +#31500 = CARTESIAN_POINT('',(7.499974498734,-1.862764684264, + 0.869337698867)); +#31501 = CARTESIAN_POINT('',(7.499974498734,-1.862764684264, + 0.916766081835)); +#31502 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31503,#31504) + ,(#31505,#31506) + ,(#31507,#31508) + ,(#31509,#31510 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(17.,18.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31503 = CARTESIAN_POINT('',(7.50097449872,-1.793357301013, + 0.810341418691)); +#31504 = CARTESIAN_POINT('',(7.499974498734,-1.793357301013, + 0.810341418691)); +#31505 = CARTESIAN_POINT('',(7.50097449872,-1.833844941243, + 0.828850058637)); +#31506 = CARTESIAN_POINT('',(7.499974498734,-1.833844941243, + 0.828850058637)); +#31507 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.869337698867)); +#31508 = CARTESIAN_POINT('',(7.499974498734,-1.862764684264, + 0.869337698867)); +#31509 = CARTESIAN_POINT('',(7.50097449872,-1.862764684264, + 0.916766081835)); +#31510 = CARTESIAN_POINT('',(7.499974498734,-1.862764684264, + 0.916766081835)); +#31511 = ADVANCED_FACE('',(#31512),#31539,.F.); +#31512 = FACE_BOUND('',#31513,.F.); +#31513 = EDGE_LOOP('',(#31514,#31524,#31531,#31532)); +#31514 = ORIENTED_EDGE('',*,*,#31515,.F.); +#31515 = EDGE_CURVE('',#31516,#31518,#31520,.T.); +#31516 = VERTEX_POINT('',#31517); +#31517 = CARTESIAN_POINT('',(7.50097449872,-1.684619071666,0.88668954468 + )); +#31518 = VERTEX_POINT('',#31519); +#31519 = CARTESIAN_POINT('',(7.499974498734,-1.684619071666, + 0.88668954468)); +#31520 = LINE('',#31521,#31522); +#31521 = CARTESIAN_POINT('',(7.50097449872,-1.684619071666,0.88668954468 + )); +#31522 = VECTOR('',#31523,1.); +#31523 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31524 = ORIENTED_EDGE('',*,*,#31525,.T.); +#31525 = EDGE_CURVE('',#31516,#31479,#31526,.T.); +#31526 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31527,#31528,#31529,#31530), + .UNSPECIFIED.,.F.,.F.,(4,4),(16.,17.),.PIECEWISE_BEZIER_KNOTS.); +#31527 = CARTESIAN_POINT('',(7.50097449872,-1.684619071666,0.88668954468 + )); +#31528 = CARTESIAN_POINT('',(7.50097449872,-1.734361042901,0.88668954468 + )); +#31529 = CARTESIAN_POINT('',(7.50097449872,-1.777162249334, + 0.854299441322)); +#31530 = CARTESIAN_POINT('',(7.50097449872,-1.793357301013, + 0.810341418691)); +#31531 = ORIENTED_EDGE('',*,*,#31478,.T.); +#31532 = ORIENTED_EDGE('',*,*,#31533,.F.); +#31533 = EDGE_CURVE('',#31518,#31481,#31534,.T.); +#31534 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31535,#31536,#31537,#31538), + .UNSPECIFIED.,.F.,.F.,(4,4),(16.,17.),.PIECEWISE_BEZIER_KNOTS.); +#31535 = CARTESIAN_POINT('',(7.499974498734,-1.684619071666, + 0.88668954468)); +#31536 = CARTESIAN_POINT('',(7.499974498734,-1.734361042901, + 0.88668954468)); +#31537 = CARTESIAN_POINT('',(7.499974498734,-1.777162249334, + 0.854299441322)); +#31538 = CARTESIAN_POINT('',(7.499974498734,-1.793357301013, + 0.810341418691)); +#31539 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31540,#31541) + ,(#31542,#31543) + ,(#31544,#31545) + ,(#31546,#31547 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(16.,17.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31540 = CARTESIAN_POINT('',(7.50097449872,-1.684619071666,0.88668954468 + )); +#31541 = CARTESIAN_POINT('',(7.499974498734,-1.684619071666, + 0.88668954468)); +#31542 = CARTESIAN_POINT('',(7.50097449872,-1.734361042901,0.88668954468 + )); +#31543 = CARTESIAN_POINT('',(7.499974498734,-1.734361042901, + 0.88668954468)); +#31544 = CARTESIAN_POINT('',(7.50097449872,-1.777162249334, + 0.854299441322)); +#31545 = CARTESIAN_POINT('',(7.499974498734,-1.777162249334, + 0.854299441322)); +#31546 = CARTESIAN_POINT('',(7.50097449872,-1.793357301013, + 0.810341418691)); +#31547 = CARTESIAN_POINT('',(7.499974498734,-1.793357301013, + 0.810341418691)); +#31548 = ADVANCED_FACE('',(#31549),#31576,.F.); +#31549 = FACE_BOUND('',#31550,.F.); +#31550 = EDGE_LOOP('',(#31551,#31561,#31568,#31569)); +#31551 = ORIENTED_EDGE('',*,*,#31552,.F.); +#31552 = EDGE_CURVE('',#31553,#31555,#31557,.T.); +#31553 = VERTEX_POINT('',#31554); +#31554 = CARTESIAN_POINT('',(7.50097449872,-1.597859842603, + 0.847358698584)); +#31555 = VERTEX_POINT('',#31556); +#31556 = CARTESIAN_POINT('',(7.499974498734,-1.597859842603, + 0.847358698584)); +#31557 = LINE('',#31558,#31559); +#31558 = CARTESIAN_POINT('',(7.50097449872,-1.597859842603, + 0.847358698584)); +#31559 = VECTOR('',#31560,1.); +#31560 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31561 = ORIENTED_EDGE('',*,*,#31562,.T.); +#31562 = EDGE_CURVE('',#31553,#31516,#31563,.T.); +#31563 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31564,#31565,#31566,#31567), + .UNSPECIFIED.,.F.,.F.,(4,4),(15.,16.),.PIECEWISE_BEZIER_KNOTS.); +#31564 = CARTESIAN_POINT('',(7.50097449872,-1.597859842603, + 0.847358698584)); +#31565 = CARTESIAN_POINT('',(7.50097449872,-1.618682048753, + 0.871651287134)); +#31566 = CARTESIAN_POINT('',(7.50097449872,-1.649915380041,0.88668954468 + )); +#31567 = CARTESIAN_POINT('',(7.50097449872,-1.684619071666,0.88668954468 + )); +#31568 = ORIENTED_EDGE('',*,*,#31515,.T.); +#31569 = ORIENTED_EDGE('',*,*,#31570,.F.); +#31570 = EDGE_CURVE('',#31555,#31518,#31571,.T.); +#31571 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31572,#31573,#31574,#31575), + .UNSPECIFIED.,.F.,.F.,(4,4),(15.,16.),.PIECEWISE_BEZIER_KNOTS.); +#31572 = CARTESIAN_POINT('',(7.499974498734,-1.597859842603, + 0.847358698584)); +#31573 = CARTESIAN_POINT('',(7.499974498734,-1.618682048753, + 0.871651287134)); +#31574 = CARTESIAN_POINT('',(7.499974498734,-1.649915380041, + 0.88668954468)); +#31575 = CARTESIAN_POINT('',(7.499974498734,-1.684619071666, + 0.88668954468)); +#31576 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31577,#31578) + ,(#31579,#31580) + ,(#31581,#31582) + ,(#31583,#31584 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(15.,16.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31577 = CARTESIAN_POINT('',(7.50097449872,-1.597859842603, + 0.847358698584)); +#31578 = CARTESIAN_POINT('',(7.499974498734,-1.597859842603, + 0.847358698584)); +#31579 = CARTESIAN_POINT('',(7.50097449872,-1.618682048753, + 0.871651287134)); +#31580 = CARTESIAN_POINT('',(7.499974498734,-1.618682048753, + 0.871651287134)); +#31581 = CARTESIAN_POINT('',(7.50097449872,-1.649915380041,0.88668954468 + )); +#31582 = CARTESIAN_POINT('',(7.499974498734,-1.649915380041, + 0.88668954468)); +#31583 = CARTESIAN_POINT('',(7.50097449872,-1.684619071666,0.88668954468 + )); +#31584 = CARTESIAN_POINT('',(7.499974498734,-1.684619071666, + 0.88668954468)); +#31585 = ADVANCED_FACE('',(#31586),#31611,.F.); +#31586 = FACE_BOUND('',#31587,.T.); +#31587 = EDGE_LOOP('',(#31588,#31596,#31597,#31605)); +#31588 = ORIENTED_EDGE('',*,*,#31589,.T.); +#31589 = EDGE_CURVE('',#31590,#31555,#31592,.T.); +#31590 = VERTEX_POINT('',#31591); +#31591 = CARTESIAN_POINT('',(7.499974498734,-1.442850024422, + 0.928333979043)); +#31592 = LINE('',#31593,#31594); +#31593 = CARTESIAN_POINT('',(7.499974498734,-1.442850024422, + 0.928333979043)); +#31594 = VECTOR('',#31595,1.); +#31595 = DIRECTION('',(4.959589472461E-15,-0.886348842796, + -0.463018065387)); +#31596 = ORIENTED_EDGE('',*,*,#31552,.F.); +#31597 = ORIENTED_EDGE('',*,*,#31598,.F.); +#31598 = EDGE_CURVE('',#31599,#31553,#31601,.T.); +#31599 = VERTEX_POINT('',#31600); +#31600 = CARTESIAN_POINT('',(7.50097449872,-1.442850024422, + 0.928333979043)); +#31601 = LINE('',#31602,#31603); +#31602 = CARTESIAN_POINT('',(7.50097449872,-1.442850024422, + 0.928333979043)); +#31603 = VECTOR('',#31604,1.); +#31604 = DIRECTION('',(4.959589472461E-15,-0.886348842796, + -0.463018065387)); +#31605 = ORIENTED_EDGE('',*,*,#31606,.T.); +#31606 = EDGE_CURVE('',#31599,#31590,#31607,.T.); +#31607 = LINE('',#31608,#31609); +#31608 = CARTESIAN_POINT('',(7.50097449872,-1.442850024422, + 0.928333979043)); +#31609 = VECTOR('',#31610,1.); +#31610 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31611 = PLANE('',#31612); +#31612 = AXIS2_PLACEMENT_3D('',#31613,#31614,#31615); +#31613 = CARTESIAN_POINT('',(7.50097449872,-1.442850024422, + 0.928333979043)); +#31614 = DIRECTION('',(-3.233237869689E-15,0.463018065387, + -0.886348842796)); +#31615 = DIRECTION('',(-1.,1.972152263053E-31,3.647816428E-15)); +#31616 = ADVANCED_FACE('',(#31617),#31642,.F.); +#31617 = FACE_BOUND('',#31618,.T.); +#31618 = EDGE_LOOP('',(#31619,#31627,#31628,#31636)); +#31619 = ORIENTED_EDGE('',*,*,#31620,.T.); +#31620 = EDGE_CURVE('',#31621,#31590,#31623,.T.); +#31621 = VERTEX_POINT('',#31622); +#31622 = CARTESIAN_POINT('',(7.499974498734,-1.406989560727,0.8670241106 + )); +#31623 = LINE('',#31624,#31625); +#31624 = CARTESIAN_POINT('',(7.499974498734,-1.406989560727,0.8670241106 + )); +#31625 = VECTOR('',#31626,1.); +#31626 = DIRECTION('',(0.,-0.50488304865,0.863187758941)); +#31627 = ORIENTED_EDGE('',*,*,#31606,.F.); +#31628 = ORIENTED_EDGE('',*,*,#31629,.F.); +#31629 = EDGE_CURVE('',#31630,#31599,#31632,.T.); +#31630 = VERTEX_POINT('',#31631); +#31631 = CARTESIAN_POINT('',(7.50097449872,-1.406989560727,0.8670241106) + ); +#31632 = LINE('',#31633,#31634); +#31633 = CARTESIAN_POINT('',(7.50097449872,-1.406989560727,0.8670241106) + ); +#31634 = VECTOR('',#31635,1.); +#31635 = DIRECTION('',(0.,-0.50488304865,0.863187758941)); +#31636 = ORIENTED_EDGE('',*,*,#31637,.T.); +#31637 = EDGE_CURVE('',#31630,#31621,#31638,.T.); +#31638 = LINE('',#31639,#31640); +#31639 = CARTESIAN_POINT('',(7.50097449872,-1.406989560727,0.8670241106) + ); +#31640 = VECTOR('',#31641,1.); +#31641 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31642 = PLANE('',#31643); +#31643 = AXIS2_PLACEMENT_3D('',#31644,#31645,#31646); +#31644 = CARTESIAN_POINT('',(7.50097449872,-1.406989560727,0.8670241106) + ); +#31645 = DIRECTION('',(6.027607904523E-15,-0.863187758941,-0.50488304865 + )); +#31646 = DIRECTION('',(0.,0.50488304865,-0.863187758941)); +#31647 = ADVANCED_FACE('',(#31648),#31673,.F.); +#31648 = FACE_BOUND('',#31649,.T.); +#31649 = EDGE_LOOP('',(#31650,#31658,#31659,#31667)); +#31650 = ORIENTED_EDGE('',*,*,#31651,.T.); +#31651 = EDGE_CURVE('',#31652,#31621,#31654,.T.); +#31652 = VERTEX_POINT('',#31653); +#31653 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.78142167567)); +#31654 = LINE('',#31655,#31656); +#31655 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.78142167567)); +#31656 = VECTOR('',#31657,1.); +#31657 = DIRECTION('',(-4.734964287223E-15,0.884094950248,0.467307306755 + )); +#31658 = ORIENTED_EDGE('',*,*,#31637,.F.); +#31659 = ORIENTED_EDGE('',*,*,#31660,.F.); +#31660 = EDGE_CURVE('',#31661,#31630,#31663,.T.); +#31661 = VERTEX_POINT('',#31662); +#31662 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645,0.78142167567 + )); +#31663 = LINE('',#31664,#31665); +#31664 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645,0.78142167567 + )); +#31665 = VECTOR('',#31666,1.); +#31666 = DIRECTION('',(-4.734964287223E-15,0.884094950248,0.467307306755 + )); +#31667 = ORIENTED_EDGE('',*,*,#31668,.T.); +#31668 = EDGE_CURVE('',#31661,#31652,#31669,.T.); +#31669 = LINE('',#31670,#31671); +#31670 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645,0.78142167567 + )); +#31671 = VECTOR('',#31672,1.); +#31672 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31673 = PLANE('',#31674); +#31674 = AXIS2_PLACEMENT_3D('',#31675,#31676,#31677); +#31675 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645,0.78142167567 + )); +#31676 = DIRECTION('',(3.263189482076E-15,-0.467307306755,0.884094950248 + )); +#31677 = DIRECTION('',(-1.,-6.982962677679E-15,-3.944304526105E-31)); +#31678 = ADVANCED_FACE('',(#31679),#31706,.F.); +#31679 = FACE_BOUND('',#31680,.T.); +#31680 = EDGE_LOOP('',(#31681,#31690,#31691,#31700)); +#31681 = ORIENTED_EDGE('',*,*,#31682,.T.); +#31682 = EDGE_CURVE('',#31683,#31652,#31685,.T.); +#31683 = VERTEX_POINT('',#31684); +#31684 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.769853778461)); +#31685 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31686,#31687,#31688,#31689), + .UNSPECIFIED.,.F.,.F.,(4,4),(11.,12.),.PIECEWISE_BEZIER_KNOTS.); +#31686 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.769853778461)); +#31687 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.773324138798)); +#31688 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.776794499135)); +#31689 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.78142167567)); +#31690 = ORIENTED_EDGE('',*,*,#31668,.F.); +#31691 = ORIENTED_EDGE('',*,*,#31692,.F.); +#31692 = EDGE_CURVE('',#31693,#31661,#31695,.T.); +#31693 = VERTEX_POINT('',#31694); +#31694 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.769853778461)); +#31695 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31696,#31697,#31698,#31699), + .UNSPECIFIED.,.F.,.F.,(4,4),(11.,12.),.PIECEWISE_BEZIER_KNOTS.); +#31696 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.769853778461)); +#31697 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.773324138798)); +#31698 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.776794499135)); +#31699 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645,0.78142167567 + )); +#31700 = ORIENTED_EDGE('',*,*,#31701,.T.); +#31701 = EDGE_CURVE('',#31693,#31683,#31702,.T.); +#31702 = LINE('',#31703,#31704); +#31703 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.769853778461)); +#31704 = VECTOR('',#31705,1.); +#31705 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31706 = PLANE('',#31707); +#31707 = AXIS2_PLACEMENT_3D('',#31708,#31709,#31710); +#31708 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.769853778461)); +#31709 = DIRECTION('',(6.982962677686E-15,-1.,0.)); +#31710 = DIRECTION('',(0.,0.,-1.)); +#31711 = ADVANCED_FACE('',(#31712),#31739,.F.); +#31712 = FACE_BOUND('',#31713,.F.); +#31713 = EDGE_LOOP('',(#31714,#31724,#31731,#31732)); +#31714 = ORIENTED_EDGE('',*,*,#31715,.F.); +#31715 = EDGE_CURVE('',#31716,#31718,#31720,.T.); +#31716 = VERTEX_POINT('',#31717); +#31717 = CARTESIAN_POINT('',(7.50097449872,-1.68461909373,0.654174806376 + )); +#31718 = VERTEX_POINT('',#31719); +#31719 = CARTESIAN_POINT('',(7.499974498734,-1.68461909373, + 0.654174806376)); +#31720 = LINE('',#31721,#31722); +#31721 = CARTESIAN_POINT('',(7.50097449872,-1.68461909373,0.654174806376 + )); +#31722 = VECTOR('',#31723,1.); +#31723 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31724 = ORIENTED_EDGE('',*,*,#31725,.T.); +#31725 = EDGE_CURVE('',#31716,#31693,#31726,.T.); +#31726 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31727,#31728,#31729,#31730), + .UNSPECIFIED.,.F.,.F.,(4,4),(10.,11.),.PIECEWISE_BEZIER_KNOTS.); +#31727 = CARTESIAN_POINT('',(7.50097449872,-1.68461909373,0.654174806376 + )); +#31728 = CARTESIAN_POINT('',(7.50097449872,-1.620995659084, + 0.654174806376)); +#31729 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.706230343814)); +#31730 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.769853778461)); +#31731 = ORIENTED_EDGE('',*,*,#31701,.T.); +#31732 = ORIENTED_EDGE('',*,*,#31733,.F.); +#31733 = EDGE_CURVE('',#31718,#31683,#31734,.T.); +#31734 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31735,#31736,#31737,#31738), + .UNSPECIFIED.,.F.,.F.,(4,4),(10.,11.),.PIECEWISE_BEZIER_KNOTS.); +#31735 = CARTESIAN_POINT('',(7.499974498734,-1.68461909373, + 0.654174806376)); +#31736 = CARTESIAN_POINT('',(7.499974498734,-1.620995659084, + 0.654174806376)); +#31737 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.706230343814)); +#31738 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.769853778461)); +#31739 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31740,#31741) + ,(#31742,#31743) + ,(#31744,#31745) + ,(#31746,#31747 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(10.,11.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31740 = CARTESIAN_POINT('',(7.50097449872,-1.68461909373,0.654174806376 + )); +#31741 = CARTESIAN_POINT('',(7.499974498734,-1.68461909373, + 0.654174806376)); +#31742 = CARTESIAN_POINT('',(7.50097449872,-1.620995659084, + 0.654174806376)); +#31743 = CARTESIAN_POINT('',(7.499974498734,-1.620995659084, + 0.654174806376)); +#31744 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.706230343814)); +#31745 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.706230343814)); +#31746 = CARTESIAN_POINT('',(7.50097449872,-1.568940121645, + 0.769853778461)); +#31747 = CARTESIAN_POINT('',(7.499974498734,-1.568940121645, + 0.769853778461)); +#31748 = ADVANCED_FACE('',(#31749),#31776,.F.); +#31749 = FACE_BOUND('',#31750,.F.); +#31750 = EDGE_LOOP('',(#31751,#31761,#31768,#31769)); +#31751 = ORIENTED_EDGE('',*,*,#31752,.F.); +#31752 = EDGE_CURVE('',#31753,#31755,#31757,.T.); +#31753 = VERTEX_POINT('',#31754); +#31754 = CARTESIAN_POINT('',(7.50097449872,-1.794514128243, + 0.732836498569)); +#31755 = VERTEX_POINT('',#31756); +#31756 = CARTESIAN_POINT('',(7.499974498734,-1.794514128243, + 0.732836498569)); +#31757 = LINE('',#31758,#31759); +#31758 = CARTESIAN_POINT('',(7.50097449872,-1.794514128243, + 0.732836498569)); +#31759 = VECTOR('',#31760,1.); +#31760 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31761 = ORIENTED_EDGE('',*,*,#31762,.T.); +#31762 = EDGE_CURVE('',#31753,#31716,#31763,.T.); +#31763 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31764,#31765,#31766,#31767), + .UNSPECIFIED.,.F.,.F.,(4,4),(9.,10.),.PIECEWISE_BEZIER_KNOTS.); +#31764 = CARTESIAN_POINT('',(7.50097449872,-1.794514128243, + 0.732836498569)); +#31765 = CARTESIAN_POINT('',(7.50097449872,-1.779475859666, + 0.686564909734)); +#31766 = CARTESIAN_POINT('',(7.50097449872,-1.735517859099, + 0.654174806376)); +#31767 = CARTESIAN_POINT('',(7.50097449872,-1.68461909373,0.654174806376 + )); +#31768 = ORIENTED_EDGE('',*,*,#31715,.T.); +#31769 = ORIENTED_EDGE('',*,*,#31770,.F.); +#31770 = EDGE_CURVE('',#31755,#31718,#31771,.T.); +#31771 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31772,#31773,#31774,#31775), + .UNSPECIFIED.,.F.,.F.,(4,4),(9.,10.),.PIECEWISE_BEZIER_KNOTS.); +#31772 = CARTESIAN_POINT('',(7.499974498734,-1.794514128243, + 0.732836498569)); +#31773 = CARTESIAN_POINT('',(7.499974498734,-1.779475859666, + 0.686564909734)); +#31774 = CARTESIAN_POINT('',(7.499974498734,-1.735517859099, + 0.654174806376)); +#31775 = CARTESIAN_POINT('',(7.499974498734,-1.68461909373, + 0.654174806376)); +#31776 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31777,#31778) + ,(#31779,#31780) + ,(#31781,#31782) + ,(#31783,#31784 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(9.,10.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31777 = CARTESIAN_POINT('',(7.50097449872,-1.794514128243, + 0.732836498569)); +#31778 = CARTESIAN_POINT('',(7.499974498734,-1.794514128243, + 0.732836498569)); +#31779 = CARTESIAN_POINT('',(7.50097449872,-1.779475859666, + 0.686564909734)); +#31780 = CARTESIAN_POINT('',(7.499974498734,-1.779475859666, + 0.686564909734)); +#31781 = CARTESIAN_POINT('',(7.50097449872,-1.735517859099, + 0.654174806376)); +#31782 = CARTESIAN_POINT('',(7.499974498734,-1.735517859099, + 0.654174806376)); +#31783 = CARTESIAN_POINT('',(7.50097449872,-1.68461909373,0.654174806376 + )); +#31784 = CARTESIAN_POINT('',(7.499974498734,-1.68461909373, + 0.654174806376)); +#31785 = ADVANCED_FACE('',(#31786),#31813,.F.); +#31786 = FACE_BOUND('',#31787,.F.); +#31787 = EDGE_LOOP('',(#31788,#31798,#31805,#31806)); +#31788 = ORIENTED_EDGE('',*,*,#31789,.F.); +#31789 = EDGE_CURVE('',#31790,#31792,#31794,.T.); +#31790 = VERTEX_POINT('',#31791); +#31791 = CARTESIAN_POINT('',(7.50097449872,-1.88705730591,0.788362396344 + )); +#31792 = VERTEX_POINT('',#31793); +#31793 = CARTESIAN_POINT('',(7.499974498734,-1.88705730591, + 0.788362396344)); +#31794 = LINE('',#31795,#31796); +#31795 = CARTESIAN_POINT('',(7.50097449872,-1.88705730591,0.788362396344 + )); +#31796 = VECTOR('',#31797,1.); +#31797 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31798 = ORIENTED_EDGE('',*,*,#31799,.T.); +#31799 = EDGE_CURVE('',#31790,#31753,#31800,.T.); +#31800 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31801,#31802,#31803,#31804), + .UNSPECIFIED.,.F.,.F.,(4,4),(8.,9.),.PIECEWISE_BEZIER_KNOTS.); +#31801 = CARTESIAN_POINT('',(7.50097449872,-1.88705730591,0.788362396344 + )); +#31802 = CARTESIAN_POINT('',(7.50097449872,-1.861607934259, + 0.760599425391)); +#31803 = CARTESIAN_POINT('',(7.50097449872,-1.83037460297,0.74209080751) + ); +#31804 = CARTESIAN_POINT('',(7.50097449872,-1.794514128243, + 0.732836498569)); +#31805 = ORIENTED_EDGE('',*,*,#31752,.T.); +#31806 = ORIENTED_EDGE('',*,*,#31807,.F.); +#31807 = EDGE_CURVE('',#31792,#31755,#31808,.T.); +#31808 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31809,#31810,#31811,#31812), + .UNSPECIFIED.,.F.,.F.,(4,4),(8.,9.),.PIECEWISE_BEZIER_KNOTS.); +#31809 = CARTESIAN_POINT('',(7.499974498734,-1.88705730591, + 0.788362396344)); +#31810 = CARTESIAN_POINT('',(7.499974498734,-1.861607934259, + 0.760599425391)); +#31811 = CARTESIAN_POINT('',(7.499974498734,-1.83037460297,0.74209080751 + )); +#31812 = CARTESIAN_POINT('',(7.499974498734,-1.794514128243, + 0.732836498569)); +#31813 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31814,#31815) + ,(#31816,#31817) + ,(#31818,#31819) + ,(#31820,#31821 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(8.,9.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31814 = CARTESIAN_POINT('',(7.50097449872,-1.88705730591,0.788362396344 + )); +#31815 = CARTESIAN_POINT('',(7.499974498734,-1.88705730591, + 0.788362396344)); +#31816 = CARTESIAN_POINT('',(7.50097449872,-1.861607934259, + 0.760599425391)); +#31817 = CARTESIAN_POINT('',(7.499974498734,-1.861607934259, + 0.760599425391)); +#31818 = CARTESIAN_POINT('',(7.50097449872,-1.83037460297,0.74209080751) + ); +#31819 = CARTESIAN_POINT('',(7.499974498734,-1.83037460297,0.74209080751 + )); +#31820 = CARTESIAN_POINT('',(7.50097449872,-1.794514128243, + 0.732836498569)); +#31821 = CARTESIAN_POINT('',(7.499974498734,-1.794514128243, + 0.732836498569)); +#31822 = ADVANCED_FACE('',(#31823),#31850,.F.); +#31823 = FACE_BOUND('',#31824,.F.); +#31824 = EDGE_LOOP('',(#31825,#31835,#31842,#31843)); +#31825 = ORIENTED_EDGE('',*,*,#31826,.F.); +#31826 = EDGE_CURVE('',#31827,#31829,#31831,.T.); +#31827 = VERTEX_POINT('',#31828); +#31828 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.91445244944) + ); +#31829 = VERTEX_POINT('',#31830); +#31830 = CARTESIAN_POINT('',(7.499974498734,-1.93564247198,0.91445244944 + )); +#31831 = LINE('',#31832,#31833); +#31832 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.91445244944) + ); +#31833 = VECTOR('',#31834,1.); +#31834 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31835 = ORIENTED_EDGE('',*,*,#31836,.T.); +#31836 = EDGE_CURVE('',#31827,#31790,#31837,.T.); +#31837 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31838,#31839,#31840,#31841), + .UNSPECIFIED.,.F.,.F.,(4,4),(7.,8.),.PIECEWISE_BEZIER_KNOTS.); +#31838 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.91445244944) + ); +#31839 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.868180860605 + )); +#31840 = CARTESIAN_POINT('',(7.50097449872,-1.918290626168, + 0.823066043841)); +#31841 = CARTESIAN_POINT('',(7.50097449872,-1.88705730591,0.788362396344 + )); +#31842 = ORIENTED_EDGE('',*,*,#31789,.T.); +#31843 = ORIENTED_EDGE('',*,*,#31844,.F.); +#31844 = EDGE_CURVE('',#31829,#31792,#31845,.T.); +#31845 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31846,#31847,#31848,#31849), + .UNSPECIFIED.,.F.,.F.,(4,4),(7.,8.),.PIECEWISE_BEZIER_KNOTS.); +#31846 = CARTESIAN_POINT('',(7.499974498734,-1.93564247198,0.91445244944 + )); +#31847 = CARTESIAN_POINT('',(7.499974498734,-1.93564247198, + 0.868180860605)); +#31848 = CARTESIAN_POINT('',(7.499974498734,-1.918290626168, + 0.823066043841)); +#31849 = CARTESIAN_POINT('',(7.499974498734,-1.88705730591, + 0.788362396344)); +#31850 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31851,#31852) + ,(#31853,#31854) + ,(#31855,#31856) + ,(#31857,#31858 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(7.,8.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31851 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.91445244944) + ); +#31852 = CARTESIAN_POINT('',(7.499974498734,-1.93564247198,0.91445244944 + )); +#31853 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.868180860605 + )); +#31854 = CARTESIAN_POINT('',(7.499974498734,-1.93564247198, + 0.868180860605)); +#31855 = CARTESIAN_POINT('',(7.50097449872,-1.918290626168, + 0.823066043841)); +#31856 = CARTESIAN_POINT('',(7.499974498734,-1.918290626168, + 0.823066043841)); +#31857 = CARTESIAN_POINT('',(7.50097449872,-1.88705730591,0.788362396344 + )); +#31858 = CARTESIAN_POINT('',(7.499974498734,-1.88705730591, + 0.788362396344)); +#31859 = ADVANCED_FACE('',(#31860),#31887,.F.); +#31860 = FACE_BOUND('',#31861,.F.); +#31861 = EDGE_LOOP('',(#31862,#31872,#31879,#31880)); +#31862 = ORIENTED_EDGE('',*,*,#31863,.F.); +#31863 = EDGE_CURVE('',#31864,#31866,#31868,.T.); +#31864 = VERTEX_POINT('',#31865); +#31865 = CARTESIAN_POINT('',(7.50097449872,-1.88127332421,1.046326462171 + )); +#31866 = VERTEX_POINT('',#31867); +#31867 = CARTESIAN_POINT('',(7.499974498734,-1.88127332421, + 1.046326462171)); +#31868 = LINE('',#31869,#31870); +#31869 = CARTESIAN_POINT('',(7.50097449872,-1.88127332421,1.046326462171 + )); +#31870 = VECTOR('',#31871,1.); +#31871 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31872 = ORIENTED_EDGE('',*,*,#31873,.T.); +#31873 = EDGE_CURVE('',#31864,#31827,#31874,.T.); +#31874 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31875,#31876,#31877,#31878), + .UNSPECIFIED.,.F.,.F.,(4,4),(6.,7.),.PIECEWISE_BEZIER_KNOTS.); +#31875 = CARTESIAN_POINT('',(7.50097449872,-1.88127332421,1.046326462171 + )); +#31876 = CARTESIAN_POINT('',(7.50097449872,-1.915977046174, + 1.011622781578)); +#31877 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.964194398609 + )); +#31878 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.91445244944) + ); +#31879 = ORIENTED_EDGE('',*,*,#31826,.T.); +#31880 = ORIENTED_EDGE('',*,*,#31881,.F.); +#31881 = EDGE_CURVE('',#31866,#31829,#31882,.T.); +#31882 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31883,#31884,#31885,#31886), + .UNSPECIFIED.,.F.,.F.,(4,4),(6.,7.),.PIECEWISE_BEZIER_KNOTS.); +#31883 = CARTESIAN_POINT('',(7.499974498734,-1.88127332421, + 1.046326462171)); +#31884 = CARTESIAN_POINT('',(7.499974498734,-1.915977046174, + 1.011622781578)); +#31885 = CARTESIAN_POINT('',(7.499974498734,-1.93564247198, + 0.964194398609)); +#31886 = CARTESIAN_POINT('',(7.499974498734,-1.93564247198,0.91445244944 + )); +#31887 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31888,#31889) + ,(#31890,#31891) + ,(#31892,#31893) + ,(#31894,#31895 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(6.,7.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31888 = CARTESIAN_POINT('',(7.50097449872,-1.88127332421,1.046326462171 + )); +#31889 = CARTESIAN_POINT('',(7.499974498734,-1.88127332421, + 1.046326462171)); +#31890 = CARTESIAN_POINT('',(7.50097449872,-1.915977046174, + 1.011622781578)); +#31891 = CARTESIAN_POINT('',(7.499974498734,-1.915977046174, + 1.011622781578)); +#31892 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.964194398609 + )); +#31893 = CARTESIAN_POINT('',(7.499974498734,-1.93564247198, + 0.964194398609)); +#31894 = CARTESIAN_POINT('',(7.50097449872,-1.93564247198,0.91445244944) + ); +#31895 = CARTESIAN_POINT('',(7.499974498734,-1.93564247198,0.91445244944 + )); +#31896 = ADVANCED_FACE('',(#31897),#31924,.F.); +#31897 = FACE_BOUND('',#31898,.F.); +#31898 = EDGE_LOOP('',(#31899,#31909,#31916,#31917)); +#31899 = ORIENTED_EDGE('',*,*,#31900,.F.); +#31900 = EDGE_CURVE('',#31901,#31903,#31905,.T.); +#31901 = VERTEX_POINT('',#31902); +#31902 = CARTESIAN_POINT('',(7.50097449872,-1.748242506313, + 1.101852370978)); +#31903 = VERTEX_POINT('',#31904); +#31904 = CARTESIAN_POINT('',(7.499974498734,-1.748242506313, + 1.101852370978)); +#31905 = LINE('',#31906,#31907); +#31906 = CARTESIAN_POINT('',(7.50097449872,-1.748242506313, + 1.101852370978)); +#31907 = VECTOR('',#31908,1.); +#31908 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31909 = ORIENTED_EDGE('',*,*,#31910,.T.); +#31910 = EDGE_CURVE('',#31901,#31864,#31911,.T.); +#31911 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31912,#31913,#31914,#31915), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#31912 = CARTESIAN_POINT('',(7.50097449872,-1.748242506313, + 1.101852370978)); +#31913 = CARTESIAN_POINT('',(7.50097449872,-1.797984466516, + 1.101852370978)); +#31914 = CARTESIAN_POINT('',(7.50097449872,-1.845412838451, + 1.082186947931)); +#31915 = CARTESIAN_POINT('',(7.50097449872,-1.88127332421,1.046326462171 + )); +#31916 = ORIENTED_EDGE('',*,*,#31863,.T.); +#31917 = ORIENTED_EDGE('',*,*,#31918,.F.); +#31918 = EDGE_CURVE('',#31903,#31866,#31919,.T.); +#31919 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31920,#31921,#31922,#31923), + .UNSPECIFIED.,.F.,.F.,(4,4),(5.,6.),.PIECEWISE_BEZIER_KNOTS.); +#31920 = CARTESIAN_POINT('',(7.499974498734,-1.748242506313, + 1.101852370978)); +#31921 = CARTESIAN_POINT('',(7.499974498734,-1.797984466516, + 1.101852370978)); +#31922 = CARTESIAN_POINT('',(7.499974498734,-1.845412838451, + 1.082186947931)); +#31923 = CARTESIAN_POINT('',(7.499974498734,-1.88127332421, + 1.046326462171)); +#31924 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31925,#31926) + ,(#31927,#31928) + ,(#31929,#31930) + ,(#31931,#31932 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(5.,6.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31925 = CARTESIAN_POINT('',(7.50097449872,-1.748242506313, + 1.101852370978)); +#31926 = CARTESIAN_POINT('',(7.499974498734,-1.748242506313, + 1.101852370978)); +#31927 = CARTESIAN_POINT('',(7.50097449872,-1.797984466516, + 1.101852370978)); +#31928 = CARTESIAN_POINT('',(7.499974498734,-1.797984466516, + 1.101852370978)); +#31929 = CARTESIAN_POINT('',(7.50097449872,-1.845412838451, + 1.082186947931)); +#31930 = CARTESIAN_POINT('',(7.499974498734,-1.845412838451, + 1.082186947931)); +#31931 = CARTESIAN_POINT('',(7.50097449872,-1.88127332421,1.046326462171 + )); +#31932 = CARTESIAN_POINT('',(7.499974498734,-1.88127332421, + 1.046326462171)); +#31933 = ADVANCED_FACE('',(#31934),#31961,.F.); +#31934 = FACE_BOUND('',#31935,.F.); +#31935 = EDGE_LOOP('',(#31936,#31946,#31953,#31954)); +#31936 = ORIENTED_EDGE('',*,*,#31937,.F.); +#31937 = EDGE_CURVE('',#31938,#31940,#31942,.T.); +#31938 = VERTEX_POINT('',#31939); +#31939 = CARTESIAN_POINT('',(7.50097449872,-1.721636351559, + 1.099538793743)); +#31940 = VERTEX_POINT('',#31941); +#31941 = CARTESIAN_POINT('',(7.499974498734,-1.721636351559, + 1.099538793743)); +#31942 = LINE('',#31943,#31944); +#31943 = CARTESIAN_POINT('',(7.50097449872,-1.721636351559, + 1.099538793743)); +#31944 = VECTOR('',#31945,1.); +#31945 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31946 = ORIENTED_EDGE('',*,*,#31947,.T.); +#31947 = EDGE_CURVE('',#31938,#31901,#31948,.T.); +#31948 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31949,#31950,#31951,#31952), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#31949 = CARTESIAN_POINT('',(7.50097449872,-1.721636351559, + 1.099538793743)); +#31950 = CARTESIAN_POINT('',(7.50097449872,-1.7308906605,1.100695587876) + ); +#31951 = CARTESIAN_POINT('',(7.50097449872,-1.738988197372, + 1.101852370978)); +#31952 = CARTESIAN_POINT('',(7.50097449872,-1.748242506313, + 1.101852370978)); +#31953 = ORIENTED_EDGE('',*,*,#31900,.T.); +#31954 = ORIENTED_EDGE('',*,*,#31955,.F.); +#31955 = EDGE_CURVE('',#31940,#31903,#31956,.T.); +#31956 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31957,#31958,#31959,#31960), + .UNSPECIFIED.,.F.,.F.,(4,4),(4.,5.),.PIECEWISE_BEZIER_KNOTS.); +#31957 = CARTESIAN_POINT('',(7.499974498734,-1.721636351559, + 1.099538793743)); +#31958 = CARTESIAN_POINT('',(7.499974498734,-1.7308906605,1.100695587876 + )); +#31959 = CARTESIAN_POINT('',(7.499974498734,-1.738988197372, + 1.101852370978)); +#31960 = CARTESIAN_POINT('',(7.499974498734,-1.748242506313, + 1.101852370978)); +#31961 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31962,#31963) + ,(#31964,#31965) + ,(#31966,#31967) + ,(#31968,#31969 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(4.,5.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31962 = CARTESIAN_POINT('',(7.50097449872,-1.721636351559, + 1.099538793743)); +#31963 = CARTESIAN_POINT('',(7.499974498734,-1.721636351559, + 1.099538793743)); +#31964 = CARTESIAN_POINT('',(7.50097449872,-1.7308906605,1.100695587876) + ); +#31965 = CARTESIAN_POINT('',(7.499974498734,-1.7308906605,1.100695587876 + )); +#31966 = CARTESIAN_POINT('',(7.50097449872,-1.738988197372, + 1.101852370978)); +#31967 = CARTESIAN_POINT('',(7.499974498734,-1.738988197372, + 1.101852370978)); +#31968 = CARTESIAN_POINT('',(7.50097449872,-1.748242506313, + 1.101852370978)); +#31969 = CARTESIAN_POINT('',(7.499974498734,-1.748242506313, + 1.101852370978)); +#31970 = ADVANCED_FACE('',(#31971),#31998,.F.); +#31971 = FACE_BOUND('',#31972,.F.); +#31972 = EDGE_LOOP('',(#31973,#31983,#31990,#31991)); +#31973 = ORIENTED_EDGE('',*,*,#31974,.F.); +#31974 = EDGE_CURVE('',#31975,#31977,#31979,.T.); +#31975 = VERTEX_POINT('',#31976); +#31976 = CARTESIAN_POINT('',(7.50097449872,-1.670737608255, + 1.150437542563)); +#31977 = VERTEX_POINT('',#31978); +#31978 = CARTESIAN_POINT('',(7.499974498734,-1.670737608255, + 1.150437542563)); +#31979 = LINE('',#31980,#31981); +#31980 = CARTESIAN_POINT('',(7.50097449872,-1.670737608255, + 1.150437542563)); +#31981 = VECTOR('',#31982,1.); +#31982 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#31983 = ORIENTED_EDGE('',*,*,#31984,.T.); +#31984 = EDGE_CURVE('',#31975,#31938,#31985,.T.); +#31985 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31986,#31987,#31988,#31989), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#31986 = CARTESIAN_POINT('',(7.50097449872,-1.670737608255, + 1.150437542563)); +#31987 = CARTESIAN_POINT('',(7.50097449872,-1.690403042335, + 1.136556062603)); +#31988 = CARTESIAN_POINT('',(7.50097449872,-1.706598094014, + 1.119204216791)); +#31989 = CARTESIAN_POINT('',(7.50097449872,-1.721636351559, + 1.099538793743)); +#31990 = ORIENTED_EDGE('',*,*,#31937,.T.); +#31991 = ORIENTED_EDGE('',*,*,#31992,.F.); +#31992 = EDGE_CURVE('',#31977,#31940,#31993,.T.); +#31993 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#31994,#31995,#31996,#31997), + .UNSPECIFIED.,.F.,.F.,(4,4),(3.,4.),.PIECEWISE_BEZIER_KNOTS.); +#31994 = CARTESIAN_POINT('',(7.499974498734,-1.670737608255, + 1.150437542563)); +#31995 = CARTESIAN_POINT('',(7.499974498734,-1.690403042335, + 1.136556062603)); +#31996 = CARTESIAN_POINT('',(7.499974498734,-1.706598094014, + 1.119204216791)); +#31997 = CARTESIAN_POINT('',(7.499974498734,-1.721636351559, + 1.099538793743)); +#31998 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#31999,#32000) + ,(#32001,#32002) + ,(#32003,#32004) + ,(#32005,#32006 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(3.,4.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#31999 = CARTESIAN_POINT('',(7.50097449872,-1.670737608255, + 1.150437542563)); +#32000 = CARTESIAN_POINT('',(7.499974498734,-1.670737608255, + 1.150437542563)); +#32001 = CARTESIAN_POINT('',(7.50097449872,-1.690403042335, + 1.136556062603)); +#32002 = CARTESIAN_POINT('',(7.499974498734,-1.690403042335, + 1.136556062603)); +#32003 = CARTESIAN_POINT('',(7.50097449872,-1.706598094014, + 1.119204216791)); +#32004 = CARTESIAN_POINT('',(7.499974498734,-1.706598094014, + 1.119204216791)); +#32005 = CARTESIAN_POINT('',(7.50097449872,-1.721636351559, + 1.099538793743)); +#32006 = CARTESIAN_POINT('',(7.499974498734,-1.721636351559, + 1.099538793743)); +#32007 = ADVANCED_FACE('',(#32008),#32035,.F.); +#32008 = FACE_BOUND('',#32009,.F.); +#32009 = EDGE_LOOP('',(#32010,#32020,#32027,#32028)); +#32010 = ORIENTED_EDGE('',*,*,#32011,.F.); +#32011 = EDGE_CURVE('',#32012,#32014,#32016,.T.); +#32012 = VERTEX_POINT('',#32013); +#32013 = CARTESIAN_POINT('',(7.50097449872,-1.531922841753, + 1.195552342779)); +#32014 = VERTEX_POINT('',#32015); +#32015 = CARTESIAN_POINT('',(7.499974498734,-1.531922841753, + 1.195552342779)); +#32016 = LINE('',#32017,#32018); +#32017 = CARTESIAN_POINT('',(7.50097449872,-1.531922841753, + 1.195552342779)); +#32018 = VECTOR('',#32019,1.); +#32019 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#32020 = ORIENTED_EDGE('',*,*,#32021,.T.); +#32021 = EDGE_CURVE('',#32012,#31975,#32022,.T.); +#32022 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#32023,#32024,#32025,#32026), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#32023 = CARTESIAN_POINT('',(7.50097449872,-1.531922841753, + 1.195552342779)); +#32024 = CARTESIAN_POINT('',(7.50097449872,-1.582821585057, + 1.195552342779)); +#32025 = CARTESIAN_POINT('',(7.50097449872,-1.630249968025, + 1.179357286964)); +#32026 = CARTESIAN_POINT('',(7.50097449872,-1.670737608255, + 1.150437542563)); +#32027 = ORIENTED_EDGE('',*,*,#31974,.T.); +#32028 = ORIENTED_EDGE('',*,*,#32029,.F.); +#32029 = EDGE_CURVE('',#32014,#31977,#32030,.T.); +#32030 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#32031,#32032,#32033,#32034), + .UNSPECIFIED.,.F.,.F.,(4,4),(2.,3.),.PIECEWISE_BEZIER_KNOTS.); +#32031 = CARTESIAN_POINT('',(7.499974498734,-1.531922841753, + 1.195552342779)); +#32032 = CARTESIAN_POINT('',(7.499974498734,-1.582821585057, + 1.195552342779)); +#32033 = CARTESIAN_POINT('',(7.499974498734,-1.630249968025, + 1.179357286964)); +#32034 = CARTESIAN_POINT('',(7.499974498734,-1.670737608255, + 1.150437542563)); +#32035 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#32036,#32037) + ,(#32038,#32039) + ,(#32040,#32041) + ,(#32042,#32043 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(2.,3.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#32036 = CARTESIAN_POINT('',(7.50097449872,-1.531922841753, + 1.195552342779)); +#32037 = CARTESIAN_POINT('',(7.499974498734,-1.531922841753, + 1.195552342779)); +#32038 = CARTESIAN_POINT('',(7.50097449872,-1.582821585057, + 1.195552342779)); +#32039 = CARTESIAN_POINT('',(7.499974498734,-1.582821585057, + 1.195552342779)); +#32040 = CARTESIAN_POINT('',(7.50097449872,-1.630249968025, + 1.179357286964)); +#32041 = CARTESIAN_POINT('',(7.499974498734,-1.630249968025, + 1.179357286964)); +#32042 = CARTESIAN_POINT('',(7.50097449872,-1.670737608255, + 1.150437542563)); +#32043 = CARTESIAN_POINT('',(7.499974498734,-1.670737608255, + 1.150437542563)); +#32044 = ADVANCED_FACE('',(#32045),#32072,.F.); +#32045 = FACE_BOUND('',#32046,.F.); +#32046 = EDGE_LOOP('',(#32047,#32057,#32064,#32065)); +#32047 = ORIENTED_EDGE('',*,*,#32048,.F.); +#32048 = EDGE_CURVE('',#32049,#32051,#32053,.T.); +#32049 = VERTEX_POINT('',#32050); +#32050 = CARTESIAN_POINT('',(7.50097449872,-1.374599457369, + 1.135399273985)); +#32051 = VERTEX_POINT('',#32052); +#32052 = CARTESIAN_POINT('',(7.499974498734,-1.374599457369, + 1.135399273985)); +#32053 = LINE('',#32054,#32055); +#32054 = CARTESIAN_POINT('',(7.50097449872,-1.374599457369, + 1.135399273985)); +#32055 = VECTOR('',#32056,1.); +#32056 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#32057 = ORIENTED_EDGE('',*,*,#32058,.T.); +#32058 = EDGE_CURVE('',#32049,#32012,#32059,.T.); +#32059 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#32060,#32061,#32062,#32063), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#32060 = CARTESIAN_POINT('',(7.50097449872,-1.374599457369, + 1.135399273985)); +#32061 = CARTESIAN_POINT('',(7.50097449872,-1.418557457935, + 1.173573338359)); +#32062 = CARTESIAN_POINT('',(7.50097449872,-1.474083355711, + 1.195552342779)); +#32063 = CARTESIAN_POINT('',(7.50097449872,-1.531922841753, + 1.195552342779)); +#32064 = ORIENTED_EDGE('',*,*,#32011,.T.); +#32065 = ORIENTED_EDGE('',*,*,#32066,.F.); +#32066 = EDGE_CURVE('',#32051,#32014,#32067,.T.); +#32067 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#32068,#32069,#32070,#32071), + .UNSPECIFIED.,.F.,.F.,(4,4),(1.,2.),.PIECEWISE_BEZIER_KNOTS.); +#32068 = CARTESIAN_POINT('',(7.499974498734,-1.374599457369, + 1.135399273985)); +#32069 = CARTESIAN_POINT('',(7.499974498734,-1.418557457935, + 1.173573338359)); +#32070 = CARTESIAN_POINT('',(7.499974498734,-1.474083355711, + 1.195552342779)); +#32071 = CARTESIAN_POINT('',(7.499974498734,-1.531922841753, + 1.195552342779)); +#32072 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#32073,#32074) + ,(#32075,#32076) + ,(#32077,#32078) + ,(#32079,#32080 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(1.,2.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#32073 = CARTESIAN_POINT('',(7.50097449872,-1.374599457369, + 1.135399273985)); +#32074 = CARTESIAN_POINT('',(7.499974498734,-1.374599457369, + 1.135399273985)); +#32075 = CARTESIAN_POINT('',(7.50097449872,-1.418557457935, + 1.173573338359)); +#32076 = CARTESIAN_POINT('',(7.499974498734,-1.418557457935, + 1.173573338359)); +#32077 = CARTESIAN_POINT('',(7.50097449872,-1.474083355711, + 1.195552342779)); +#32078 = CARTESIAN_POINT('',(7.499974498734,-1.474083355711, + 1.195552342779)); +#32079 = CARTESIAN_POINT('',(7.50097449872,-1.531922841753, + 1.195552342779)); +#32080 = CARTESIAN_POINT('',(7.499974498734,-1.531922841753, + 1.195552342779)); +#32081 = ADVANCED_FACE('',(#32082),#32109,.F.); +#32082 = FACE_BOUND('',#32083,.F.); +#32083 = EDGE_LOOP('',(#32084,#32094,#32101,#32102)); +#32084 = ORIENTED_EDGE('',*,*,#32085,.F.); +#32085 = EDGE_CURVE('',#32086,#32088,#32090,.T.); +#32086 = VERTEX_POINT('',#32087); +#32087 = CARTESIAN_POINT('',(7.50097449872,-1.312132794792, + 1.044012884936)); +#32088 = VERTEX_POINT('',#32089); +#32089 = CARTESIAN_POINT('',(7.499974498734,-1.312132794792, + 1.044012884936)); +#32090 = LINE('',#32091,#32092); +#32091 = CARTESIAN_POINT('',(7.50097449872,-1.312132794792, + 1.044012884936)); +#32092 = VECTOR('',#32093,1.); +#32093 = DIRECTION('',(-1.,-6.982962677686E-15,0.)); +#32094 = ORIENTED_EDGE('',*,*,#32095,.T.); +#32095 = EDGE_CURVE('',#32086,#32049,#32096,.T.); +#32096 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#32097,#32098,#32099,#32100), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#32097 = CARTESIAN_POINT('',(7.50097449872,-1.312132794792, + 1.044012884936)); +#32098 = CARTESIAN_POINT('',(7.50097449872,-1.32485746407,1.07871657656) + ); +#32099 = CARTESIAN_POINT('',(7.50097449872,-1.346836486417, + 1.109949896818)); +#32100 = CARTESIAN_POINT('',(7.50097449872,-1.374599457369, + 1.135399273985)); +#32101 = ORIENTED_EDGE('',*,*,#32048,.T.); +#32102 = ORIENTED_EDGE('',*,*,#32103,.F.); +#32103 = EDGE_CURVE('',#32088,#32051,#32104,.T.); +#32104 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#32105,#32106,#32107,#32108), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.); +#32105 = CARTESIAN_POINT('',(7.499974498734,-1.312132794792, + 1.044012884936)); +#32106 = CARTESIAN_POINT('',(7.499974498734,-1.32485746407,1.07871657656 + )); +#32107 = CARTESIAN_POINT('',(7.499974498734,-1.346836486417, + 1.109949896818)); +#32108 = CARTESIAN_POINT('',(7.499974498734,-1.374599457369, + 1.135399273985)); +#32109 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#32110,#32111) + ,(#32112,#32113) + ,(#32114,#32115) + ,(#32116,#32117 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(0.,1.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#32110 = CARTESIAN_POINT('',(7.50097449872,-1.312132794792, + 1.044012884936)); +#32111 = CARTESIAN_POINT('',(7.499974498734,-1.312132794792, + 1.044012884936)); +#32112 = CARTESIAN_POINT('',(7.50097449872,-1.32485746407,1.07871657656) + ); +#32113 = CARTESIAN_POINT('',(7.499974498734,-1.32485746407,1.07871657656 + )); +#32114 = CARTESIAN_POINT('',(7.50097449872,-1.346836486417, + 1.109949896818)); +#32115 = CARTESIAN_POINT('',(7.499974498734,-1.346836486417, + 1.109949896818)); +#32116 = CARTESIAN_POINT('',(7.50097449872,-1.374599457369, + 1.135399273985)); +#32117 = CARTESIAN_POINT('',(7.499974498734,-1.374599457369, + 1.135399273985)); +#32118 = ADVANCED_FACE('',(#32119),#32137,.F.); +#32119 = FACE_BOUND('',#32120,.F.); +#32120 = EDGE_LOOP('',(#32121,#32122,#32129,#32130)); +#32121 = ORIENTED_EDGE('',*,*,#30986,.F.); +#32122 = ORIENTED_EDGE('',*,*,#32123,.T.); +#32123 = EDGE_CURVE('',#30978,#32086,#32124,.T.); +#32124 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#32125,#32126,#32127,#32128), + .UNSPECIFIED.,.F.,.F.,(4,4),(35.,36.),.PIECEWISE_BEZIER_KNOTS.); +#32125 = CARTESIAN_POINT('',(7.50097449872,-1.197610638905,0.89247347122 + )); +#32126 = CARTESIAN_POINT('',(7.50097449872,-1.198767410975, + 0.961880810343)); +#32127 = CARTESIAN_POINT('',(7.50097449872,-1.246195816006, + 1.023190678786)); +#32128 = CARTESIAN_POINT('',(7.50097449872,-1.312132794792, + 1.044012884936)); +#32129 = ORIENTED_EDGE('',*,*,#32085,.T.); +#32130 = ORIENTED_EDGE('',*,*,#32131,.F.); +#32131 = EDGE_CURVE('',#30987,#32088,#32132,.T.); +#32132 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#32133,#32134,#32135,#32136), + .UNSPECIFIED.,.F.,.F.,(4,4),(35.,36.),.PIECEWISE_BEZIER_KNOTS.); +#32133 = CARTESIAN_POINT('',(7.499974498734,-1.197610638905, + 0.89247347122)); +#32134 = CARTESIAN_POINT('',(7.499974498734,-1.198767410975, + 0.961880810343)); +#32135 = CARTESIAN_POINT('',(7.499974498734,-1.246195816006, + 1.023190678786)); +#32136 = CARTESIAN_POINT('',(7.499974498734,-1.312132794792, + 1.044012884936)); +#32137 = B_SPLINE_SURFACE_WITH_KNOTS('',3,1,( + (#32138,#32139) + ,(#32140,#32141) + ,(#32142,#32143) + ,(#32144,#32145 + )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(2,2),(35.,36.),(0.,1.), + .PIECEWISE_BEZIER_KNOTS.); +#32138 = CARTESIAN_POINT('',(7.50097449872,-1.197610638905,0.89247347122 + )); +#32139 = CARTESIAN_POINT('',(7.499974498734,-1.197610638905, + 0.89247347122)); +#32140 = CARTESIAN_POINT('',(7.50097449872,-1.198767410975, + 0.961880810343)); +#32141 = CARTESIAN_POINT('',(7.499974498734,-1.198767410975, + 0.961880810343)); +#32142 = CARTESIAN_POINT('',(7.50097449872,-1.246195816006, + 1.023190678786)); +#32143 = CARTESIAN_POINT('',(7.499974498734,-1.246195816006, + 1.023190678786)); +#32144 = CARTESIAN_POINT('',(7.50097449872,-1.312132794792, + 1.044012884936)); +#32145 = CARTESIAN_POINT('',(7.499974498734,-1.312132794792, + 1.044012884936)); +#32146 = ADVANCED_FACE('',(#32147,#32151),#32186,.T.); +#32147 = FACE_BOUND('',#32148,.T.); +#32148 = EDGE_LOOP('',(#32149,#32150)); +#32149 = ORIENTED_EDGE('',*,*,#30873,.T.); +#32150 = ORIENTED_EDGE('',*,*,#30927,.T.); +#32151 = FACE_BOUND('',#32152,.T.); +#32152 = EDGE_LOOP('',(#32153,#32154,#32155,#32156,#32157,#32158,#32159, + #32160,#32161,#32162,#32163,#32164,#32165,#32166,#32167,#32168, + #32169,#32170,#32171,#32172,#32173,#32174,#32175,#32176,#32177, + #32178,#32179,#32180,#32181,#32182,#32183,#32184,#32185)); +#32153 = ORIENTED_EDGE('',*,*,#32131,.F.); +#32154 = ORIENTED_EDGE('',*,*,#30994,.F.); +#32155 = ORIENTED_EDGE('',*,*,#31031,.F.); +#32156 = ORIENTED_EDGE('',*,*,#31050,.F.); +#32157 = ORIENTED_EDGE('',*,*,#31099,.F.); +#32158 = ORIENTED_EDGE('',*,*,#31136,.F.); +#32159 = ORIENTED_EDGE('',*,*,#31173,.F.); +#32160 = ORIENTED_EDGE('',*,*,#31192,.F.); +#32161 = ORIENTED_EDGE('',*,*,#31241,.F.); +#32162 = ORIENTED_EDGE('',*,*,#31278,.F.); +#32163 = ORIENTED_EDGE('',*,*,#31297,.F.); +#32164 = ORIENTED_EDGE('',*,*,#31348,.F.); +#32165 = ORIENTED_EDGE('',*,*,#31385,.F.); +#32166 = ORIENTED_EDGE('',*,*,#31422,.F.); +#32167 = ORIENTED_EDGE('',*,*,#31459,.F.); +#32168 = ORIENTED_EDGE('',*,*,#31496,.F.); +#32169 = ORIENTED_EDGE('',*,*,#31533,.F.); +#32170 = ORIENTED_EDGE('',*,*,#31570,.F.); +#32171 = ORIENTED_EDGE('',*,*,#31589,.F.); +#32172 = ORIENTED_EDGE('',*,*,#31620,.F.); +#32173 = ORIENTED_EDGE('',*,*,#31651,.F.); +#32174 = ORIENTED_EDGE('',*,*,#31682,.F.); +#32175 = ORIENTED_EDGE('',*,*,#31733,.F.); +#32176 = ORIENTED_EDGE('',*,*,#31770,.F.); +#32177 = ORIENTED_EDGE('',*,*,#31807,.F.); +#32178 = ORIENTED_EDGE('',*,*,#31844,.F.); +#32179 = ORIENTED_EDGE('',*,*,#31881,.F.); +#32180 = ORIENTED_EDGE('',*,*,#31918,.F.); +#32181 = ORIENTED_EDGE('',*,*,#31955,.F.); +#32182 = ORIENTED_EDGE('',*,*,#31992,.F.); +#32183 = ORIENTED_EDGE('',*,*,#32029,.F.); +#32184 = ORIENTED_EDGE('',*,*,#32066,.F.); +#32185 = ORIENTED_EDGE('',*,*,#32103,.F.); +#32186 = PLANE('',#32187); +#32187 = AXIS2_PLACEMENT_3D('',#32188,#32189,#32190); +#32188 = CARTESIAN_POINT('',(7.499974498734,-1.23057913933, + 0.986462602943)); +#32189 = DIRECTION('',(-1.,0.,0.)); +#32190 = DIRECTION('',(0.,0.,1.)); +#32191 = ADVANCED_FACE('',(#32192,#32196),#32231,.F.); +#32192 = FACE_BOUND('',#32193,.T.); +#32193 = EDGE_LOOP('',(#32194,#32195)); +#32194 = ORIENTED_EDGE('',*,*,#30938,.F.); +#32195 = ORIENTED_EDGE('',*,*,#30894,.F.); +#32196 = FACE_BOUND('',#32197,.T.); +#32197 = EDGE_LOOP('',(#32198,#32199,#32200,#32201,#32202,#32203,#32204, + #32205,#32206,#32207,#32208,#32209,#32210,#32211,#32212,#32213, + #32214,#32215,#32216,#32217,#32218,#32219,#32220,#32221,#32222, + #32223,#32224,#32225,#32226,#32227,#32228,#32229,#32230)); +#32198 = ORIENTED_EDGE('',*,*,#32123,.T.); +#32199 = ORIENTED_EDGE('',*,*,#32095,.T.); +#32200 = ORIENTED_EDGE('',*,*,#32058,.T.); +#32201 = ORIENTED_EDGE('',*,*,#32021,.T.); +#32202 = ORIENTED_EDGE('',*,*,#31984,.T.); +#32203 = ORIENTED_EDGE('',*,*,#31947,.T.); +#32204 = ORIENTED_EDGE('',*,*,#31910,.T.); +#32205 = ORIENTED_EDGE('',*,*,#31873,.T.); +#32206 = ORIENTED_EDGE('',*,*,#31836,.T.); +#32207 = ORIENTED_EDGE('',*,*,#31799,.T.); +#32208 = ORIENTED_EDGE('',*,*,#31762,.T.); +#32209 = ORIENTED_EDGE('',*,*,#31725,.T.); +#32210 = ORIENTED_EDGE('',*,*,#31692,.T.); +#32211 = ORIENTED_EDGE('',*,*,#31660,.T.); +#32212 = ORIENTED_EDGE('',*,*,#31629,.T.); +#32213 = ORIENTED_EDGE('',*,*,#31598,.T.); +#32214 = ORIENTED_EDGE('',*,*,#31562,.T.); +#32215 = ORIENTED_EDGE('',*,*,#31525,.T.); +#32216 = ORIENTED_EDGE('',*,*,#31488,.T.); +#32217 = ORIENTED_EDGE('',*,*,#31451,.T.); +#32218 = ORIENTED_EDGE('',*,*,#31414,.T.); +#32219 = ORIENTED_EDGE('',*,*,#31377,.T.); +#32220 = ORIENTED_EDGE('',*,*,#31340,.T.); +#32221 = ORIENTED_EDGE('',*,*,#31307,.T.); +#32222 = ORIENTED_EDGE('',*,*,#31270,.T.); +#32223 = ORIENTED_EDGE('',*,*,#31233,.T.); +#32224 = ORIENTED_EDGE('',*,*,#31201,.T.); +#32225 = ORIENTED_EDGE('',*,*,#31165,.T.); +#32226 = ORIENTED_EDGE('',*,*,#31128,.T.); +#32227 = ORIENTED_EDGE('',*,*,#31091,.T.); +#32228 = ORIENTED_EDGE('',*,*,#31059,.T.); +#32229 = ORIENTED_EDGE('',*,*,#31023,.T.); +#32230 = ORIENTED_EDGE('',*,*,#30977,.T.); +#32231 = PLANE('',#32232); +#32232 = AXIS2_PLACEMENT_3D('',#32233,#32234,#32235); +#32233 = CARTESIAN_POINT('',(7.50097449872,-1.23057913933,0.986462602943 + )); +#32234 = DIRECTION('',(-1.,0.,0.)); +#32235 = DIRECTION('',(0.,0.,1.)); +#32236 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#32240)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#32237,#32238,#32239)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#32237 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#32238 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#32239 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#32240 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#32237, + 'distance_accuracy_value','confusion accuracy'); +#32241 = SHAPE_DEFINITION_REPRESENTATION(#32242,#12320); +#32242 = PRODUCT_DEFINITION_SHAPE('','',#32243); +#32243 = PRODUCT_DEFINITION('design','',#32244,#32247); +#32244 = PRODUCT_DEFINITION_FORMATION('','',#32245); +#32245 = PRODUCT('COMPOUND.step','COMPOUND.step','',(#32246)); +#32246 = PRODUCT_CONTEXT('',#2,'mechanical'); +#32247 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#32248 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#32249,#32251); +#32249 = ( REPRESENTATION_RELATIONSHIP('','',#12320,#12310) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#32250) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#32250 = ITEM_DEFINED_TRANSFORMATION('','',#11,#12311); +#32251 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #32252); +#32252 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('21','NAUO3','',#12305,#32243,$ + ); +#32253 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#32245)); +#32254 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#32255,#32257); +#32255 = ( REPRESENTATION_RELATIONSHIP('','',#12310,#12293) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#32256) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#32256 = ITEM_DEFINED_TRANSFORMATION('','',#11,#12294); +#32257 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #32258); +#32258 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('22','NAUO2','',#12288,#12305,$ + ); +#32259 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#12307)); +#32260 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#32261,#32263); +#32261 = ( REPRESENTATION_RELATIONSHIP('','',#12293,#12276) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#32262) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#32262 = ITEM_DEFINED_TRANSFORMATION('','',#11,#12277); +#32263 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #32264); +#32264 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('23','NAUO1','',#12271,#12288,$ + ); +#32265 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#12290)); +#32266 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#32267,#32269); +#32267 = ( REPRESENTATION_RELATIONSHIP('','',#12276,#12259) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#32268) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#32268 = ITEM_DEFINED_TRANSFORMATION('','',#11,#12260); +#32269 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #32270); +#32270 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('24','','',#12254,#12271,$); +#32271 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#12273)); +#32272 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#32273,#32275); +#32273 = ( REPRESENTATION_RELATIONSHIP('','',#12259,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#32274) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#32274 = ITEM_DEFINED_TRANSFORMATION('','',#11,#43); +#32275 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #32276); +#32276 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('25','','',#5,#12254,$); +#32277 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#12256)); +#32278 = SHAPE_DEFINITION_REPRESENTATION(#32279,#32285); +#32279 = PRODUCT_DEFINITION_SHAPE('','',#32280); +#32280 = PRODUCT_DEFINITION('design','',#32281,#32284); +#32281 = PRODUCT_DEFINITION_FORMATION('','',#32282); +#32282 = PRODUCT('U1','U1','',(#32283)); +#32283 = PRODUCT_CONTEXT('',#2,'mechanical'); +#32284 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#32285 = SHAPE_REPRESENTATION('',(#11,#32286),#32290); +#32286 = AXIS2_PLACEMENT_3D('',#32287,#32288,#32289); +#32287 = CARTESIAN_POINT('',(290.98919677734,171.92921447753,0.)); +#32288 = DIRECTION('',(0.,0.,1.)); +#32289 = DIRECTION('',(-4.371138828674E-08,1.,0.)); +#32290 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#32294)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#32291,#32292,#32293)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#32291 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#32292 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#32293 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#32294 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#32291, + 'distance_accuracy_value','confusion accuracy'); +#32295 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#32296),#33986); +#32296 = MANIFOLD_SOLID_BREP('',#32297); +#32297 = CLOSED_SHELL('',(#32298,#32324,#32374,#32414,#32454,#32494, + #32534,#32574,#32614,#32636,#32658,#32687,#32704,#32721,#32747, + #32783,#32800,#32817,#32836,#32935,#33034,#33051,#33073,#33090, + #33107,#33124,#33136,#33153,#33170,#33187,#33204,#33216,#33256, + #33289,#33320,#33351,#33382,#33415,#33446,#33479,#33512,#33534, + #33556,#33576,#33596,#33695,#33794,#33811,#33833,#33850,#33867, + #33884,#33896,#33913,#33930,#33947,#33964,#33976)); +#32298 = ADVANCED_FACE('',(#32299),#32319,.F.); +#32299 = FACE_BOUND('',#32300,.F.); +#32300 = EDGE_LOOP('',(#32301,#32312)); +#32301 = ORIENTED_EDGE('',*,*,#32302,.F.); +#32302 = EDGE_CURVE('',#32303,#32305,#32307,.T.); +#32303 = VERTEX_POINT('',#32304); +#32304 = CARTESIAN_POINT('',(-1.06,-0.428874953738,1.3)); +#32305 = VERTEX_POINT('',#32306); +#32306 = CARTESIAN_POINT('',(-1.06,-9.112504626203E-02,1.3)); +#32307 = CIRCLE('',#32308,0.195); +#32308 = AXIS2_PLACEMENT_3D('',#32309,#32310,#32311); +#32309 = CARTESIAN_POINT('',(-1.06,-0.26,1.3975)); +#32310 = DIRECTION('',(1.,0.,-6.860497997772E-15)); +#32311 = DIRECTION('',(-6.860497997772E-15,0.,-1.)); +#32312 = ORIENTED_EDGE('',*,*,#32313,.F.); +#32313 = EDGE_CURVE('',#32305,#32303,#32314,.T.); +#32314 = CIRCLE('',#32315,0.168874953738); +#32315 = AXIS2_PLACEMENT_3D('',#32316,#32317,#32318); +#32316 = CARTESIAN_POINT('',(-1.06,-0.26,1.3)); +#32317 = DIRECTION('',(0.,-0.,1.)); +#32318 = DIRECTION('',(-1.,0.,0.)); +#32319 = SPHERICAL_SURFACE('',#32320,0.195); +#32320 = AXIS2_PLACEMENT_3D('',#32321,#32322,#32323); +#32321 = CARTESIAN_POINT('',(-1.06,-0.26,1.3975)); +#32322 = DIRECTION('',(1.,0.,-6.672013369142E-15)); +#32323 = DIRECTION('',(6.672013369142E-15,0.,1.)); +#32324 = ADVANCED_FACE('',(#32325,#32359),#32369,.F.); +#32325 = FACE_BOUND('',#32326,.T.); +#32326 = EDGE_LOOP('',(#32327,#32337,#32345,#32353)); +#32327 = ORIENTED_EDGE('',*,*,#32328,.T.); +#32328 = EDGE_CURVE('',#32329,#32331,#32333,.T.); +#32329 = VERTEX_POINT('',#32330); +#32330 = CARTESIAN_POINT('',(1.376216061781,-0.576216061781,1.3)); +#32331 = VERTEX_POINT('',#32332); +#32332 = CARTESIAN_POINT('',(1.376216061781,0.576216061781,1.3)); +#32333 = LINE('',#32334,#32335); +#32334 = CARTESIAN_POINT('',(1.376216061781,0.65,1.3)); +#32335 = VECTOR('',#32336,1.); +#32336 = DIRECTION('',(0.,1.,0.)); +#32337 = ORIENTED_EDGE('',*,*,#32338,.T.); +#32338 = EDGE_CURVE('',#32331,#32339,#32341,.T.); +#32339 = VERTEX_POINT('',#32340); +#32340 = CARTESIAN_POINT('',(-1.376216061781,0.576216061781,1.3)); +#32341 = LINE('',#32342,#32343); +#32342 = CARTESIAN_POINT('',(1.45,0.576216061781,1.3)); +#32343 = VECTOR('',#32344,1.); +#32344 = DIRECTION('',(-1.,0.,0.)); +#32345 = ORIENTED_EDGE('',*,*,#32346,.T.); +#32346 = EDGE_CURVE('',#32339,#32347,#32349,.T.); +#32347 = VERTEX_POINT('',#32348); +#32348 = CARTESIAN_POINT('',(-1.376216061781,-0.576216061781,1.3)); +#32349 = LINE('',#32350,#32351); +#32350 = CARTESIAN_POINT('',(-1.376216061781,0.65,1.3)); +#32351 = VECTOR('',#32352,1.); +#32352 = DIRECTION('',(0.,-1.,0.)); +#32353 = ORIENTED_EDGE('',*,*,#32354,.T.); +#32354 = EDGE_CURVE('',#32347,#32329,#32355,.T.); +#32355 = LINE('',#32356,#32357); +#32356 = CARTESIAN_POINT('',(1.45,-0.576216061781,1.3)); +#32357 = VECTOR('',#32358,1.); +#32358 = DIRECTION('',(1.,0.,0.)); +#32359 = FACE_BOUND('',#32360,.T.); +#32360 = EDGE_LOOP('',(#32361,#32368)); +#32361 = ORIENTED_EDGE('',*,*,#32362,.F.); +#32362 = EDGE_CURVE('',#32303,#32305,#32363,.T.); +#32363 = CIRCLE('',#32364,0.168874953738); +#32364 = AXIS2_PLACEMENT_3D('',#32365,#32366,#32367); +#32365 = CARTESIAN_POINT('',(-1.06,-0.26,1.3)); +#32366 = DIRECTION('',(0.,-0.,1.)); +#32367 = DIRECTION('',(-1.,0.,0.)); +#32368 = ORIENTED_EDGE('',*,*,#32313,.F.); +#32369 = PLANE('',#32370); +#32370 = AXIS2_PLACEMENT_3D('',#32371,#32372,#32373); +#32371 = CARTESIAN_POINT('',(1.45,0.65,1.3)); +#32372 = DIRECTION('',(0.,0.,-1.)); +#32373 = DIRECTION('',(-1.,0.,-0.)); +#32374 = ADVANCED_FACE('',(#32375),#32409,.F.); +#32375 = FACE_BOUND('',#32376,.T.); +#32376 = EDGE_LOOP('',(#32377,#32387,#32395,#32403)); +#32377 = ORIENTED_EDGE('',*,*,#32378,.T.); +#32378 = EDGE_CURVE('',#32379,#32381,#32383,.T.); +#32379 = VERTEX_POINT('',#32380); +#32380 = CARTESIAN_POINT('',(0.24,0.65,0.775)); +#32381 = VERTEX_POINT('',#32382); +#32382 = CARTESIAN_POINT('',(1.45,0.65,0.775)); +#32383 = LINE('',#32384,#32385); +#32384 = CARTESIAN_POINT('',(1.45,0.65,0.775)); +#32385 = VECTOR('',#32386,1.); +#32386 = DIRECTION('',(1.,0.,0.)); +#32387 = ORIENTED_EDGE('',*,*,#32388,.F.); +#32388 = EDGE_CURVE('',#32389,#32381,#32391,.T.); +#32389 = VERTEX_POINT('',#32390); +#32390 = CARTESIAN_POINT('',(1.45,0.65,0.625)); +#32391 = LINE('',#32392,#32393); +#32392 = CARTESIAN_POINT('',(1.45,0.65,1.3)); +#32393 = VECTOR('',#32394,1.); +#32394 = DIRECTION('',(-0.,-0.,1.)); +#32395 = ORIENTED_EDGE('',*,*,#32396,.T.); +#32396 = EDGE_CURVE('',#32389,#32397,#32399,.T.); +#32397 = VERTEX_POINT('',#32398); +#32398 = CARTESIAN_POINT('',(0.24,0.65,0.625)); +#32399 = LINE('',#32400,#32401); +#32400 = CARTESIAN_POINT('',(1.45,0.65,0.625)); +#32401 = VECTOR('',#32402,1.); +#32402 = DIRECTION('',(-1.,0.,0.)); +#32403 = ORIENTED_EDGE('',*,*,#32404,.T.); +#32404 = EDGE_CURVE('',#32397,#32379,#32405,.T.); +#32405 = LINE('',#32406,#32407); +#32406 = CARTESIAN_POINT('',(0.24,0.65,1.3)); +#32407 = VECTOR('',#32408,1.); +#32408 = DIRECTION('',(0.,0.,1.)); +#32409 = PLANE('',#32410); +#32410 = AXIS2_PLACEMENT_3D('',#32411,#32412,#32413); +#32411 = CARTESIAN_POINT('',(1.45,0.65,1.3)); +#32412 = DIRECTION('',(0.,-1.,0.)); +#32413 = DIRECTION('',(0.,-0.,-1.)); +#32414 = ADVANCED_FACE('',(#32415),#32449,.F.); +#32415 = FACE_BOUND('',#32416,.T.); +#32416 = EDGE_LOOP('',(#32417,#32427,#32435,#32443)); +#32417 = ORIENTED_EDGE('',*,*,#32418,.T.); +#32418 = EDGE_CURVE('',#32419,#32421,#32423,.T.); +#32419 = VERTEX_POINT('',#32420); +#32420 = CARTESIAN_POINT('',(-0.71,-0.65,0.625)); +#32421 = VERTEX_POINT('',#32422); +#32422 = CARTESIAN_POINT('',(0.71,-0.65,0.625)); +#32423 = LINE('',#32424,#32425); +#32424 = CARTESIAN_POINT('',(1.45,-0.65,0.625)); +#32425 = VECTOR('',#32426,1.); +#32426 = DIRECTION('',(1.,0.,0.)); +#32427 = ORIENTED_EDGE('',*,*,#32428,.F.); +#32428 = EDGE_CURVE('',#32429,#32421,#32431,.T.); +#32429 = VERTEX_POINT('',#32430); +#32430 = CARTESIAN_POINT('',(0.71,-0.65,0.775)); +#32431 = LINE('',#32432,#32433); +#32432 = CARTESIAN_POINT('',(0.71,-0.65,1.3)); +#32433 = VECTOR('',#32434,1.); +#32434 = DIRECTION('',(0.,0.,-1.)); +#32435 = ORIENTED_EDGE('',*,*,#32436,.T.); +#32436 = EDGE_CURVE('',#32429,#32437,#32439,.T.); +#32437 = VERTEX_POINT('',#32438); +#32438 = CARTESIAN_POINT('',(-0.71,-0.65,0.775)); +#32439 = LINE('',#32440,#32441); +#32440 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32441 = VECTOR('',#32442,1.); +#32442 = DIRECTION('',(-1.,0.,0.)); +#32443 = ORIENTED_EDGE('',*,*,#32444,.T.); +#32444 = EDGE_CURVE('',#32437,#32419,#32445,.T.); +#32445 = LINE('',#32446,#32447); +#32446 = CARTESIAN_POINT('',(-0.71,-0.65,1.3)); +#32447 = VECTOR('',#32448,1.); +#32448 = DIRECTION('',(0.,0.,-1.)); +#32449 = PLANE('',#32450); +#32450 = AXIS2_PLACEMENT_3D('',#32451,#32452,#32453); +#32451 = CARTESIAN_POINT('',(1.45,-0.65,1.3)); +#32452 = DIRECTION('',(-0.,1.,0.)); +#32453 = DIRECTION('',(0.,0.,1.)); +#32454 = ADVANCED_FACE('',(#32455),#32489,.F.); +#32455 = FACE_BOUND('',#32456,.T.); +#32456 = EDGE_LOOP('',(#32457,#32467,#32475,#32483)); +#32457 = ORIENTED_EDGE('',*,*,#32458,.F.); +#32458 = EDGE_CURVE('',#32459,#32461,#32463,.T.); +#32459 = VERTEX_POINT('',#32460); +#32460 = CARTESIAN_POINT('',(-0.24,0.65,0.625)); +#32461 = VERTEX_POINT('',#32462); +#32462 = CARTESIAN_POINT('',(-0.24,0.65,0.775)); +#32463 = LINE('',#32464,#32465); +#32464 = CARTESIAN_POINT('',(-0.24,0.65,1.3)); +#32465 = VECTOR('',#32466,1.); +#32466 = DIRECTION('',(0.,0.,1.)); +#32467 = ORIENTED_EDGE('',*,*,#32468,.T.); +#32468 = EDGE_CURVE('',#32459,#32469,#32471,.T.); +#32469 = VERTEX_POINT('',#32470); +#32470 = CARTESIAN_POINT('',(-1.45,0.65,0.625)); +#32471 = LINE('',#32472,#32473); +#32472 = CARTESIAN_POINT('',(1.45,0.65,0.625)); +#32473 = VECTOR('',#32474,1.); +#32474 = DIRECTION('',(-1.,0.,0.)); +#32475 = ORIENTED_EDGE('',*,*,#32476,.T.); +#32476 = EDGE_CURVE('',#32469,#32477,#32479,.T.); +#32477 = VERTEX_POINT('',#32478); +#32478 = CARTESIAN_POINT('',(-1.45,0.65,0.775)); +#32479 = LINE('',#32480,#32481); +#32480 = CARTESIAN_POINT('',(-1.45,0.65,1.3)); +#32481 = VECTOR('',#32482,1.); +#32482 = DIRECTION('',(-0.,-0.,1.)); +#32483 = ORIENTED_EDGE('',*,*,#32484,.T.); +#32484 = EDGE_CURVE('',#32477,#32461,#32485,.T.); +#32485 = LINE('',#32486,#32487); +#32486 = CARTESIAN_POINT('',(1.45,0.65,0.775)); +#32487 = VECTOR('',#32488,1.); +#32488 = DIRECTION('',(1.,0.,0.)); +#32489 = PLANE('',#32490); +#32490 = AXIS2_PLACEMENT_3D('',#32491,#32492,#32493); +#32491 = CARTESIAN_POINT('',(1.45,0.65,1.3)); +#32492 = DIRECTION('',(0.,-1.,0.)); +#32493 = DIRECTION('',(0.,-0.,-1.)); +#32494 = ADVANCED_FACE('',(#32495),#32529,.F.); +#32495 = FACE_BOUND('',#32496,.T.); +#32496 = EDGE_LOOP('',(#32497,#32507,#32515,#32523)); +#32497 = ORIENTED_EDGE('',*,*,#32498,.F.); +#32498 = EDGE_CURVE('',#32499,#32501,#32503,.T.); +#32499 = VERTEX_POINT('',#32500); +#32500 = CARTESIAN_POINT('',(-1.19,-0.65,0.775)); +#32501 = VERTEX_POINT('',#32502); +#32502 = CARTESIAN_POINT('',(-1.19,-0.65,0.625)); +#32503 = LINE('',#32504,#32505); +#32504 = CARTESIAN_POINT('',(-1.19,-0.65,1.3)); +#32505 = VECTOR('',#32506,1.); +#32506 = DIRECTION('',(0.,0.,-1.)); +#32507 = ORIENTED_EDGE('',*,*,#32508,.T.); +#32508 = EDGE_CURVE('',#32499,#32509,#32511,.T.); +#32509 = VERTEX_POINT('',#32510); +#32510 = CARTESIAN_POINT('',(-1.45,-0.65,0.775)); +#32511 = LINE('',#32512,#32513); +#32512 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32513 = VECTOR('',#32514,1.); +#32514 = DIRECTION('',(-1.,0.,0.)); +#32515 = ORIENTED_EDGE('',*,*,#32516,.T.); +#32516 = EDGE_CURVE('',#32509,#32517,#32519,.T.); +#32517 = VERTEX_POINT('',#32518); +#32518 = CARTESIAN_POINT('',(-1.45,-0.65,0.625)); +#32519 = LINE('',#32520,#32521); +#32520 = CARTESIAN_POINT('',(-1.45,-0.65,1.3)); +#32521 = VECTOR('',#32522,1.); +#32522 = DIRECTION('',(0.,0.,-1.)); +#32523 = ORIENTED_EDGE('',*,*,#32524,.T.); +#32524 = EDGE_CURVE('',#32517,#32501,#32525,.T.); +#32525 = LINE('',#32526,#32527); +#32526 = CARTESIAN_POINT('',(1.45,-0.65,0.625)); +#32527 = VECTOR('',#32528,1.); +#32528 = DIRECTION('',(1.,0.,0.)); +#32529 = PLANE('',#32530); +#32530 = AXIS2_PLACEMENT_3D('',#32531,#32532,#32533); +#32531 = CARTESIAN_POINT('',(1.45,-0.65,1.3)); +#32532 = DIRECTION('',(-0.,1.,0.)); +#32533 = DIRECTION('',(0.,0.,1.)); +#32534 = ADVANCED_FACE('',(#32535),#32569,.F.); +#32535 = FACE_BOUND('',#32536,.T.); +#32536 = EDGE_LOOP('',(#32537,#32547,#32555,#32563)); +#32537 = ORIENTED_EDGE('',*,*,#32538,.T.); +#32538 = EDGE_CURVE('',#32539,#32541,#32543,.T.); +#32539 = VERTEX_POINT('',#32540); +#32540 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32541 = VERTEX_POINT('',#32542); +#32542 = CARTESIAN_POINT('',(1.19,-0.65,0.775)); +#32543 = LINE('',#32544,#32545); +#32544 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32545 = VECTOR('',#32546,1.); +#32546 = DIRECTION('',(-1.,0.,0.)); +#32547 = ORIENTED_EDGE('',*,*,#32548,.T.); +#32548 = EDGE_CURVE('',#32541,#32549,#32551,.T.); +#32549 = VERTEX_POINT('',#32550); +#32550 = CARTESIAN_POINT('',(1.19,-0.65,0.625)); +#32551 = LINE('',#32552,#32553); +#32552 = CARTESIAN_POINT('',(1.19,-0.65,1.3)); +#32553 = VECTOR('',#32554,1.); +#32554 = DIRECTION('',(0.,0.,-1.)); +#32555 = ORIENTED_EDGE('',*,*,#32556,.T.); +#32556 = EDGE_CURVE('',#32549,#32557,#32559,.T.); +#32557 = VERTEX_POINT('',#32558); +#32558 = CARTESIAN_POINT('',(1.45,-0.65,0.625)); +#32559 = LINE('',#32560,#32561); +#32560 = CARTESIAN_POINT('',(1.45,-0.65,0.625)); +#32561 = VECTOR('',#32562,1.); +#32562 = DIRECTION('',(1.,0.,0.)); +#32563 = ORIENTED_EDGE('',*,*,#32564,.F.); +#32564 = EDGE_CURVE('',#32539,#32557,#32565,.T.); +#32565 = LINE('',#32566,#32567); +#32566 = CARTESIAN_POINT('',(1.45,-0.65,1.3)); +#32567 = VECTOR('',#32568,1.); +#32568 = DIRECTION('',(0.,0.,-1.)); +#32569 = PLANE('',#32570); +#32570 = AXIS2_PLACEMENT_3D('',#32571,#32572,#32573); +#32571 = CARTESIAN_POINT('',(1.45,-0.65,1.3)); +#32572 = DIRECTION('',(-0.,1.,0.)); +#32573 = DIRECTION('',(0.,0.,1.)); +#32574 = ADVANCED_FACE('',(#32575),#32609,.F.); +#32575 = FACE_BOUND('',#32576,.T.); +#32576 = EDGE_LOOP('',(#32577,#32587,#32595,#32603)); +#32577 = ORIENTED_EDGE('',*,*,#32578,.T.); +#32578 = EDGE_CURVE('',#32579,#32581,#32583,.T.); +#32579 = VERTEX_POINT('',#32580); +#32580 = CARTESIAN_POINT('',(1.376216061781,0.576216061781,1.E-01)); +#32581 = VERTEX_POINT('',#32582); +#32582 = CARTESIAN_POINT('',(1.376216061781,-0.576216061781,1.E-01)); +#32583 = LINE('',#32584,#32585); +#32584 = CARTESIAN_POINT('',(1.376216061781,-0.65,1.E-01)); +#32585 = VECTOR('',#32586,1.); +#32586 = DIRECTION('',(0.,-1.,0.)); +#32587 = ORIENTED_EDGE('',*,*,#32588,.T.); +#32588 = EDGE_CURVE('',#32581,#32589,#32591,.T.); +#32589 = VERTEX_POINT('',#32590); +#32590 = CARTESIAN_POINT('',(-1.376216061781,-0.576216061781,1.E-01)); +#32591 = LINE('',#32592,#32593); +#32592 = CARTESIAN_POINT('',(1.45,-0.576216061781,1.E-01)); +#32593 = VECTOR('',#32594,1.); +#32594 = DIRECTION('',(-1.,0.,0.)); +#32595 = ORIENTED_EDGE('',*,*,#32596,.T.); +#32596 = EDGE_CURVE('',#32589,#32597,#32599,.T.); +#32597 = VERTEX_POINT('',#32598); +#32598 = CARTESIAN_POINT('',(-1.376216061781,0.576216061781,1.E-01)); +#32599 = LINE('',#32600,#32601); +#32600 = CARTESIAN_POINT('',(-1.376216061781,0.65,1.E-01)); +#32601 = VECTOR('',#32602,1.); +#32602 = DIRECTION('',(0.,1.,0.)); +#32603 = ORIENTED_EDGE('',*,*,#32604,.T.); +#32604 = EDGE_CURVE('',#32597,#32579,#32605,.T.); +#32605 = LINE('',#32606,#32607); +#32606 = CARTESIAN_POINT('',(1.45,0.576216061781,1.E-01)); +#32607 = VECTOR('',#32608,1.); +#32608 = DIRECTION('',(1.,0.,0.)); +#32609 = PLANE('',#32610); +#32610 = AXIS2_PLACEMENT_3D('',#32611,#32612,#32613); +#32611 = CARTESIAN_POINT('',(1.45,0.65,1.E-01)); +#32612 = DIRECTION('',(-0.,0.,1.)); +#32613 = DIRECTION('',(1.,0.,0.)); +#32614 = ADVANCED_FACE('',(#32615),#32631,.T.); +#32615 = FACE_BOUND('',#32616,.T.); +#32616 = EDGE_LOOP('',(#32617,#32618,#32624,#32625)); +#32617 = ORIENTED_EDGE('',*,*,#32564,.T.); +#32618 = ORIENTED_EDGE('',*,*,#32619,.T.); +#32619 = EDGE_CURVE('',#32557,#32389,#32620,.T.); +#32620 = LINE('',#32621,#32622); +#32621 = CARTESIAN_POINT('',(1.45,0.65,0.625)); +#32622 = VECTOR('',#32623,1.); +#32623 = DIRECTION('',(0.,1.,0.)); +#32624 = ORIENTED_EDGE('',*,*,#32388,.T.); +#32625 = ORIENTED_EDGE('',*,*,#32626,.T.); +#32626 = EDGE_CURVE('',#32381,#32539,#32627,.T.); +#32627 = LINE('',#32628,#32629); +#32628 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32629 = VECTOR('',#32630,1.); +#32630 = DIRECTION('',(0.,-1.,0.)); +#32631 = PLANE('',#32632); +#32632 = AXIS2_PLACEMENT_3D('',#32633,#32634,#32635); +#32633 = CARTESIAN_POINT('',(1.45,-0.65,1.3)); +#32634 = DIRECTION('',(1.,0.,0.)); +#32635 = DIRECTION('',(0.,0.,-1.)); +#32636 = ADVANCED_FACE('',(#32637),#32653,.F.); +#32637 = FACE_BOUND('',#32638,.T.); +#32638 = EDGE_LOOP('',(#32639,#32640,#32646,#32647)); +#32639 = ORIENTED_EDGE('',*,*,#32476,.F.); +#32640 = ORIENTED_EDGE('',*,*,#32641,.T.); +#32641 = EDGE_CURVE('',#32469,#32517,#32642,.T.); +#32642 = LINE('',#32643,#32644); +#32643 = CARTESIAN_POINT('',(-1.45,-0.65,0.625)); +#32644 = VECTOR('',#32645,1.); +#32645 = DIRECTION('',(0.,-1.,0.)); +#32646 = ORIENTED_EDGE('',*,*,#32516,.F.); +#32647 = ORIENTED_EDGE('',*,*,#32648,.T.); +#32648 = EDGE_CURVE('',#32509,#32477,#32649,.T.); +#32649 = LINE('',#32650,#32651); +#32650 = CARTESIAN_POINT('',(-1.45,-0.65,0.775)); +#32651 = VECTOR('',#32652,1.); +#32652 = DIRECTION('',(0.,1.,0.)); +#32653 = PLANE('',#32654); +#32654 = AXIS2_PLACEMENT_3D('',#32655,#32656,#32657); +#32655 = CARTESIAN_POINT('',(-1.45,-0.65,1.3)); +#32656 = DIRECTION('',(1.,0.,0.)); +#32657 = DIRECTION('',(0.,0.,-1.)); +#32658 = ADVANCED_FACE('',(#32659),#32682,.F.); +#32659 = FACE_BOUND('',#32660,.T.); +#32660 = EDGE_LOOP('',(#32661,#32667,#32668,#32674,#32675,#32681)); +#32661 = ORIENTED_EDGE('',*,*,#32662,.F.); +#32662 = EDGE_CURVE('',#32469,#32597,#32663,.T.); +#32663 = LINE('',#32664,#32665); +#32664 = CARTESIAN_POINT('',(-1.377618038988,0.577618038988, + 0.109975586171)); +#32665 = VECTOR('',#32666,1.); +#32666 = DIRECTION('',(0.137844537492,-0.137844537492,-0.980814848464)); +#32667 = ORIENTED_EDGE('',*,*,#32468,.F.); +#32668 = ORIENTED_EDGE('',*,*,#32669,.T.); +#32669 = EDGE_CURVE('',#32459,#32397,#32670,.T.); +#32670 = LINE('',#32671,#32672); +#32671 = CARTESIAN_POINT('',(1.45,0.65,0.625)); +#32672 = VECTOR('',#32673,1.); +#32673 = DIRECTION('',(1.,-0.,-0.)); +#32674 = ORIENTED_EDGE('',*,*,#32396,.F.); +#32675 = ORIENTED_EDGE('',*,*,#32676,.F.); +#32676 = EDGE_CURVE('',#32579,#32389,#32677,.T.); +#32677 = LINE('',#32678,#32679); +#32678 = CARTESIAN_POINT('',(1.45,0.65,0.625)); +#32679 = VECTOR('',#32680,1.); +#32680 = DIRECTION('',(0.137844537492,0.137844537492,0.980814848464)); +#32681 = ORIENTED_EDGE('',*,*,#32604,.F.); +#32682 = PLANE('',#32683); +#32683 = AXIS2_PLACEMENT_3D('',#32684,#32685,#32686); +#32684 = CARTESIAN_POINT('',(1.45,0.65,0.625)); +#32685 = DIRECTION('',(0.,-0.990268068742,0.13917310096)); +#32686 = DIRECTION('',(0.,-0.13917310096,-0.990268068742)); +#32687 = ADVANCED_FACE('',(#32688),#32699,.T.); +#32688 = FACE_BOUND('',#32689,.T.); +#32689 = EDGE_LOOP('',(#32690,#32691,#32692,#32698)); +#32690 = ORIENTED_EDGE('',*,*,#32676,.T.); +#32691 = ORIENTED_EDGE('',*,*,#32619,.F.); +#32692 = ORIENTED_EDGE('',*,*,#32693,.F.); +#32693 = EDGE_CURVE('',#32581,#32557,#32694,.T.); +#32694 = LINE('',#32695,#32696); +#32695 = CARTESIAN_POINT('',(1.45,-0.65,0.625)); +#32696 = VECTOR('',#32697,1.); +#32697 = DIRECTION('',(0.137844537492,-0.137844537492,0.980814848464)); +#32698 = ORIENTED_EDGE('',*,*,#32578,.F.); +#32699 = PLANE('',#32700); +#32700 = AXIS2_PLACEMENT_3D('',#32701,#32702,#32703); +#32701 = CARTESIAN_POINT('',(1.45,-0.65,0.625)); +#32702 = DIRECTION('',(0.990268068742,0.,-0.13917310096)); +#32703 = DIRECTION('',(-0.13917310096,0.,-0.990268068742)); +#32704 = ADVANCED_FACE('',(#32705),#32716,.F.); +#32705 = FACE_BOUND('',#32706,.T.); +#32706 = EDGE_LOOP('',(#32707,#32708,#32709,#32715)); +#32707 = ORIENTED_EDGE('',*,*,#32662,.T.); +#32708 = ORIENTED_EDGE('',*,*,#32596,.F.); +#32709 = ORIENTED_EDGE('',*,*,#32710,.F.); +#32710 = EDGE_CURVE('',#32517,#32589,#32711,.T.); +#32711 = LINE('',#32712,#32713); +#32712 = CARTESIAN_POINT('',(-1.352916587517,-0.552916587517, + -6.578437372582E-02)); +#32713 = VECTOR('',#32714,1.); +#32714 = DIRECTION('',(0.137844537492,0.137844537492,-0.980814848464)); +#32715 = ORIENTED_EDGE('',*,*,#32641,.F.); +#32716 = PLANE('',#32717); +#32717 = AXIS2_PLACEMENT_3D('',#32718,#32719,#32720); +#32718 = CARTESIAN_POINT('',(-1.376216061781,0.65,1.E-01)); +#32719 = DIRECTION('',(0.990268068742,-0.,0.13917310096)); +#32720 = DIRECTION('',(0.13917310096,0.,-0.990268068742)); +#32721 = ADVANCED_FACE('',(#32722),#32742,.F.); +#32722 = FACE_BOUND('',#32723,.T.); +#32723 = EDGE_LOOP('',(#32724,#32725,#32726,#32732,#32733,#32739,#32740, + #32741)); +#32724 = ORIENTED_EDGE('',*,*,#32693,.T.); +#32725 = ORIENTED_EDGE('',*,*,#32556,.F.); +#32726 = ORIENTED_EDGE('',*,*,#32727,.F.); +#32727 = EDGE_CURVE('',#32421,#32549,#32728,.T.); +#32728 = LINE('',#32729,#32730); +#32729 = CARTESIAN_POINT('',(1.45,-0.65,0.625)); +#32730 = VECTOR('',#32731,1.); +#32731 = DIRECTION('',(1.,0.,0.)); +#32732 = ORIENTED_EDGE('',*,*,#32418,.F.); +#32733 = ORIENTED_EDGE('',*,*,#32734,.F.); +#32734 = EDGE_CURVE('',#32501,#32419,#32735,.T.); +#32735 = LINE('',#32736,#32737); +#32736 = CARTESIAN_POINT('',(1.45,-0.65,0.625)); +#32737 = VECTOR('',#32738,1.); +#32738 = DIRECTION('',(1.,0.,0.)); +#32739 = ORIENTED_EDGE('',*,*,#32524,.F.); +#32740 = ORIENTED_EDGE('',*,*,#32710,.T.); +#32741 = ORIENTED_EDGE('',*,*,#32588,.F.); +#32742 = PLANE('',#32743); +#32743 = AXIS2_PLACEMENT_3D('',#32744,#32745,#32746); +#32744 = CARTESIAN_POINT('',(1.45,-0.576216061781,1.E-01)); +#32745 = DIRECTION('',(0.,0.990268068742,0.13917310096)); +#32746 = DIRECTION('',(0.,-0.13917310096,0.990268068742)); +#32747 = ADVANCED_FACE('',(#32748),#32778,.F.); +#32748 = FACE_BOUND('',#32749,.T.); +#32749 = EDGE_LOOP('',(#32750,#32756,#32757,#32763,#32764,#32770,#32771, + #32777)); +#32750 = ORIENTED_EDGE('',*,*,#32751,.F.); +#32751 = EDGE_CURVE('',#32509,#32347,#32752,.T.); +#32752 = LINE('',#32753,#32754); +#32753 = CARTESIAN_POINT('',(-1.352916587517,-0.552916587517, + 1.465784373726)); +#32754 = VECTOR('',#32755,1.); +#32755 = DIRECTION('',(0.137844537492,0.137844537492,0.980814848464)); +#32756 = ORIENTED_EDGE('',*,*,#32508,.F.); +#32757 = ORIENTED_EDGE('',*,*,#32758,.T.); +#32758 = EDGE_CURVE('',#32499,#32437,#32759,.T.); +#32759 = LINE('',#32760,#32761); +#32760 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32761 = VECTOR('',#32762,1.); +#32762 = DIRECTION('',(1.,-0.,-0.)); +#32763 = ORIENTED_EDGE('',*,*,#32436,.F.); +#32764 = ORIENTED_EDGE('',*,*,#32765,.T.); +#32765 = EDGE_CURVE('',#32429,#32541,#32766,.T.); +#32766 = LINE('',#32767,#32768); +#32767 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32768 = VECTOR('',#32769,1.); +#32769 = DIRECTION('',(1.,-0.,-0.)); +#32770 = ORIENTED_EDGE('',*,*,#32538,.F.); +#32771 = ORIENTED_EDGE('',*,*,#32772,.F.); +#32772 = EDGE_CURVE('',#32329,#32539,#32773,.T.); +#32773 = LINE('',#32774,#32775); +#32774 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32775 = VECTOR('',#32776,1.); +#32776 = DIRECTION('',(0.137844537492,-0.137844537492,-0.980814848464)); +#32777 = ORIENTED_EDGE('',*,*,#32354,.F.); +#32778 = PLANE('',#32779); +#32779 = AXIS2_PLACEMENT_3D('',#32780,#32781,#32782); +#32780 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32781 = DIRECTION('',(0.,0.990268068742,-0.13917310096)); +#32782 = DIRECTION('',(0.,0.13917310096,0.990268068742)); +#32783 = ADVANCED_FACE('',(#32784),#32795,.T.); +#32784 = FACE_BOUND('',#32785,.T.); +#32785 = EDGE_LOOP('',(#32786,#32787,#32788,#32794)); +#32786 = ORIENTED_EDGE('',*,*,#32772,.T.); +#32787 = ORIENTED_EDGE('',*,*,#32626,.F.); +#32788 = ORIENTED_EDGE('',*,*,#32789,.F.); +#32789 = EDGE_CURVE('',#32331,#32381,#32790,.T.); +#32790 = LINE('',#32791,#32792); +#32791 = CARTESIAN_POINT('',(1.425298548529,0.625298548529, + 0.950759959897)); +#32792 = VECTOR('',#32793,1.); +#32793 = DIRECTION('',(0.137844537492,0.137844537492,-0.980814848464)); +#32794 = ORIENTED_EDGE('',*,*,#32328,.F.); +#32795 = PLANE('',#32796); +#32796 = AXIS2_PLACEMENT_3D('',#32797,#32798,#32799); +#32797 = CARTESIAN_POINT('',(1.45,-0.65,0.775)); +#32798 = DIRECTION('',(0.990268068742,-0.,0.13917310096)); +#32799 = DIRECTION('',(0.13917310096,0.,-0.990268068742)); +#32800 = ADVANCED_FACE('',(#32801),#32812,.F.); +#32801 = FACE_BOUND('',#32802,.T.); +#32802 = EDGE_LOOP('',(#32803,#32804,#32805,#32811)); +#32803 = ORIENTED_EDGE('',*,*,#32751,.T.); +#32804 = ORIENTED_EDGE('',*,*,#32346,.F.); +#32805 = ORIENTED_EDGE('',*,*,#32806,.F.); +#32806 = EDGE_CURVE('',#32477,#32339,#32807,.T.); +#32807 = LINE('',#32808,#32809); +#32808 = CARTESIAN_POINT('',(-1.377618038988,0.577618038988, + 1.290024413829)); +#32809 = VECTOR('',#32810,1.); +#32810 = DIRECTION('',(0.137844537492,-0.137844537492,0.980814848464)); +#32811 = ORIENTED_EDGE('',*,*,#32648,.F.); +#32812 = PLANE('',#32813); +#32813 = AXIS2_PLACEMENT_3D('',#32814,#32815,#32816); +#32814 = CARTESIAN_POINT('',(-1.376216061781,0.65,1.3)); +#32815 = DIRECTION('',(0.990268068742,0.,-0.13917310096)); +#32816 = DIRECTION('',(-0.13917310096,0.,-0.990268068742)); +#32817 = ADVANCED_FACE('',(#32818),#32831,.F.); +#32818 = FACE_BOUND('',#32819,.T.); +#32819 = EDGE_LOOP('',(#32820,#32821,#32822,#32828,#32829,#32830)); +#32820 = ORIENTED_EDGE('',*,*,#32789,.T.); +#32821 = ORIENTED_EDGE('',*,*,#32378,.F.); +#32822 = ORIENTED_EDGE('',*,*,#32823,.F.); +#32823 = EDGE_CURVE('',#32461,#32379,#32824,.T.); +#32824 = LINE('',#32825,#32826); +#32825 = CARTESIAN_POINT('',(1.45,0.65,0.775)); +#32826 = VECTOR('',#32827,1.); +#32827 = DIRECTION('',(1.,0.,0.)); +#32828 = ORIENTED_EDGE('',*,*,#32484,.F.); +#32829 = ORIENTED_EDGE('',*,*,#32806,.T.); +#32830 = ORIENTED_EDGE('',*,*,#32338,.F.); +#32831 = PLANE('',#32832); +#32832 = AXIS2_PLACEMENT_3D('',#32833,#32834,#32835); +#32833 = CARTESIAN_POINT('',(1.45,0.576216061781,1.3)); +#32834 = DIRECTION('',(0.,-0.990268068742,-0.13917310096)); +#32835 = DIRECTION('',(0.,0.13917310096,-0.990268068742)); +#32836 = ADVANCED_FACE('',(#32837),#32930,.T.); +#32837 = FACE_BOUND('',#32838,.T.); +#32838 = EDGE_LOOP('',(#32839,#32840,#32848,#32857,#32865,#32874,#32882, + #32890,#32898,#32907,#32915,#32924)); +#32839 = ORIENTED_EDGE('',*,*,#32444,.F.); +#32840 = ORIENTED_EDGE('',*,*,#32841,.T.); +#32841 = EDGE_CURVE('',#32437,#32842,#32844,.T.); +#32842 = VERTEX_POINT('',#32843); +#32843 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.775)); +#32844 = LINE('',#32845,#32846); +#32845 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.775)); +#32846 = VECTOR('',#32847,1.); +#32847 = DIRECTION('',(-0.,-1.,-0.)); +#32848 = ORIENTED_EDGE('',*,*,#32849,.T.); +#32849 = EDGE_CURVE('',#32842,#32850,#32852,.T.); +#32850 = VERTEX_POINT('',#32851); +#32851 = CARTESIAN_POINT('',(-0.71,-1.074222639515,0.546788935687)); +#32852 = CIRCLE('',#32853,0.25); +#32853 = AXIS2_PLACEMENT_3D('',#32854,#32855,#32856); +#32854 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.525)); +#32855 = DIRECTION('',(1.,0.,-0.)); +#32856 = DIRECTION('',(0.,0.,1.)); +#32857 = ORIENTED_EDGE('',*,*,#32858,.T.); +#32858 = EDGE_CURVE('',#32850,#32859,#32861,.T.); +#32859 = VERTEX_POINT('',#32860); +#32860 = CARTESIAN_POINT('',(-0.71,-1.099429204714,0.258676577093)); +#32861 = LINE('',#32862,#32863); +#32862 = CARTESIAN_POINT('',(-0.71,-1.099429204714,0.258676577093)); +#32863 = VECTOR('',#32864,1.); +#32864 = DIRECTION('',(-0.,-8.715574274766E-02,-0.996194698092)); +#32865 = ORIENTED_EDGE('',*,*,#32866,.T.); +#32866 = EDGE_CURVE('',#32859,#32867,#32869,.T.); +#32867 = VERTEX_POINT('',#32868); +#32868 = CARTESIAN_POINT('',(-0.71,-1.190333100248,0.167772681559)); +#32869 = CIRCLE('',#32870,1.E-01); +#32870 = AXIS2_PLACEMENT_3D('',#32871,#32872,#32873); +#32871 = CARTESIAN_POINT('',(-0.71,-1.199048674523,0.267392151368)); +#32872 = DIRECTION('',(-1.,-0.,-0.)); +#32873 = DIRECTION('',(0.,0.,-1.)); +#32874 = ORIENTED_EDGE('',*,*,#32875,.T.); +#32875 = EDGE_CURVE('',#32867,#32876,#32878,.T.); +#32876 = VERTEX_POINT('',#32877); +#32877 = CARTESIAN_POINT('',(-0.71,-1.4,0.149429204714)); +#32878 = LINE('',#32879,#32880); +#32879 = CARTESIAN_POINT('',(-0.71,-1.4,0.149429204714)); +#32880 = VECTOR('',#32881,1.); +#32881 = DIRECTION('',(-0.,-0.996194698092,-8.715574274766E-02)); +#32882 = ORIENTED_EDGE('',*,*,#32883,.T.); +#32883 = EDGE_CURVE('',#32876,#32884,#32886,.T.); +#32884 = VERTEX_POINT('',#32885); +#32885 = CARTESIAN_POINT('',(-0.71,-1.386926638588,1.355252715607E-17)); +#32886 = LINE('',#32887,#32888); +#32887 = CARTESIAN_POINT('',(-0.71,-1.386926638588,1.355252715607E-17)); +#32888 = VECTOR('',#32889,1.); +#32889 = DIRECTION('',(-0.,8.715574274766E-02,-0.996194698092)); +#32890 = ORIENTED_EDGE('',*,*,#32891,.T.); +#32891 = EDGE_CURVE('',#32884,#32892,#32894,.T.); +#32892 = VERTEX_POINT('',#32893); +#32893 = CARTESIAN_POINT('',(-0.71,-1.177259738836,1.834347684491E-02)); +#32894 = LINE('',#32895,#32896); +#32895 = CARTESIAN_POINT('',(-0.71,-1.177259738836,1.834347684491E-02)); +#32896 = VECTOR('',#32897,1.); +#32897 = DIRECTION('',(-0.,0.996194698092,8.715574274766E-02)); +#32898 = ORIENTED_EDGE('',*,*,#32899,.T.); +#32899 = EDGE_CURVE('',#32892,#32900,#32902,.T.); +#32900 = VERTEX_POINT('',#32901); +#32901 = CARTESIAN_POINT('',(-0.71,-0.95,0.245603215681)); +#32902 = CIRCLE('',#32903,0.25); +#32903 = AXIS2_PLACEMENT_3D('',#32904,#32905,#32906); +#32904 = CARTESIAN_POINT('',(-0.71,-1.199048674523,0.267392151368)); +#32905 = DIRECTION('',(1.,0.,-0.)); +#32906 = DIRECTION('',(0.,0.,1.)); +#32907 = ORIENTED_EDGE('',*,*,#32908,.T.); +#32908 = EDGE_CURVE('',#32900,#32909,#32911,.T.); +#32909 = VERTEX_POINT('',#32910); +#32910 = CARTESIAN_POINT('',(-0.71,-0.924793434801,0.533715574275)); +#32911 = LINE('',#32912,#32913); +#32912 = CARTESIAN_POINT('',(-0.71,-0.924793434801,0.533715574275)); +#32913 = VECTOR('',#32914,1.); +#32914 = DIRECTION('',(-0.,8.715574274766E-02,0.996194698092)); +#32915 = ORIENTED_EDGE('',*,*,#32916,.T.); +#32916 = EDGE_CURVE('',#32909,#32917,#32919,.T.); +#32917 = VERTEX_POINT('',#32918); +#32918 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.625)); +#32919 = CIRCLE('',#32920,1.E-01); +#32920 = AXIS2_PLACEMENT_3D('',#32921,#32922,#32923); +#32921 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.525)); +#32922 = DIRECTION('',(-1.,-0.,-0.)); +#32923 = DIRECTION('',(0.,0.,-1.)); +#32924 = ORIENTED_EDGE('',*,*,#32925,.T.); +#32925 = EDGE_CURVE('',#32917,#32419,#32926,.T.); +#32926 = LINE('',#32927,#32928); +#32927 = CARTESIAN_POINT('',(-0.71,0.825173964992,0.625)); +#32928 = VECTOR('',#32929,1.); +#32929 = DIRECTION('',(-0.,1.,-0.)); +#32930 = PLANE('',#32931); +#32931 = AXIS2_PLACEMENT_3D('',#32932,#32933,#32934); +#32932 = CARTESIAN_POINT('',(-0.71,-1.199048674523,0.267392151368)); +#32933 = DIRECTION('',(1.,0.,0.)); +#32934 = DIRECTION('',(0.,0.,-1.)); +#32935 = ADVANCED_FACE('',(#32936),#33029,.F.); +#32936 = FACE_BOUND('',#32937,.T.); +#32937 = EDGE_LOOP('',(#32938,#32946,#32947,#32955,#32964,#32972,#32981, + #32989,#32997,#33005,#33014,#33022)); +#32938 = ORIENTED_EDGE('',*,*,#32939,.F.); +#32939 = EDGE_CURVE('',#32499,#32940,#32942,.T.); +#32940 = VERTEX_POINT('',#32941); +#32941 = CARTESIAN_POINT('',(-1.19,-0.825173964992,0.775)); +#32942 = LINE('',#32943,#32944); +#32943 = CARTESIAN_POINT('',(-1.19,-0.825173964992,0.775)); +#32944 = VECTOR('',#32945,1.); +#32945 = DIRECTION('',(-0.,-1.,-0.)); +#32946 = ORIENTED_EDGE('',*,*,#32498,.T.); +#32947 = ORIENTED_EDGE('',*,*,#32948,.F.); +#32948 = EDGE_CURVE('',#32949,#32501,#32951,.T.); +#32949 = VERTEX_POINT('',#32950); +#32950 = CARTESIAN_POINT('',(-1.19,-0.825173964992,0.625)); +#32951 = LINE('',#32952,#32953); +#32952 = CARTESIAN_POINT('',(-1.19,0.825173964992,0.625)); +#32953 = VECTOR('',#32954,1.); +#32954 = DIRECTION('',(-0.,1.,-0.)); +#32955 = ORIENTED_EDGE('',*,*,#32956,.F.); +#32956 = EDGE_CURVE('',#32957,#32949,#32959,.T.); +#32957 = VERTEX_POINT('',#32958); +#32958 = CARTESIAN_POINT('',(-1.19,-0.924793434801,0.533715574275)); +#32959 = CIRCLE('',#32960,1.E-01); +#32960 = AXIS2_PLACEMENT_3D('',#32961,#32962,#32963); +#32961 = CARTESIAN_POINT('',(-1.19,-0.825173964992,0.525)); +#32962 = DIRECTION('',(-1.,-0.,-0.)); +#32963 = DIRECTION('',(0.,0.,-1.)); +#32964 = ORIENTED_EDGE('',*,*,#32965,.F.); +#32965 = EDGE_CURVE('',#32966,#32957,#32968,.T.); +#32966 = VERTEX_POINT('',#32967); +#32967 = CARTESIAN_POINT('',(-1.19,-0.95,0.245603215681)); +#32968 = LINE('',#32969,#32970); +#32969 = CARTESIAN_POINT('',(-1.19,-0.924793434801,0.533715574275)); +#32970 = VECTOR('',#32971,1.); +#32971 = DIRECTION('',(-0.,8.715574274766E-02,0.996194698092)); +#32972 = ORIENTED_EDGE('',*,*,#32973,.F.); +#32973 = EDGE_CURVE('',#32974,#32966,#32976,.T.); +#32974 = VERTEX_POINT('',#32975); +#32975 = CARTESIAN_POINT('',(-1.19,-1.177259738836,1.834347684491E-02)); +#32976 = CIRCLE('',#32977,0.25); +#32977 = AXIS2_PLACEMENT_3D('',#32978,#32979,#32980); +#32978 = CARTESIAN_POINT('',(-1.19,-1.199048674523,0.267392151368)); +#32979 = DIRECTION('',(1.,0.,-0.)); +#32980 = DIRECTION('',(0.,0.,1.)); +#32981 = ORIENTED_EDGE('',*,*,#32982,.F.); +#32982 = EDGE_CURVE('',#32983,#32974,#32985,.T.); +#32983 = VERTEX_POINT('',#32984); +#32984 = CARTESIAN_POINT('',(-1.19,-1.386926638588,1.355252715607E-17)); +#32985 = LINE('',#32986,#32987); +#32986 = CARTESIAN_POINT('',(-1.19,-1.177259738836,1.834347684491E-02)); +#32987 = VECTOR('',#32988,1.); +#32988 = DIRECTION('',(-0.,0.996194698092,8.715574274766E-02)); +#32989 = ORIENTED_EDGE('',*,*,#32990,.F.); +#32990 = EDGE_CURVE('',#32991,#32983,#32993,.T.); +#32991 = VERTEX_POINT('',#32992); +#32992 = CARTESIAN_POINT('',(-1.19,-1.4,0.149429204714)); +#32993 = LINE('',#32994,#32995); +#32994 = CARTESIAN_POINT('',(-1.19,-1.386926638588,1.355252715607E-17)); +#32995 = VECTOR('',#32996,1.); +#32996 = DIRECTION('',(-0.,8.715574274766E-02,-0.996194698092)); +#32997 = ORIENTED_EDGE('',*,*,#32998,.F.); +#32998 = EDGE_CURVE('',#32999,#32991,#33001,.T.); +#32999 = VERTEX_POINT('',#33000); +#33000 = CARTESIAN_POINT('',(-1.19,-1.190333100248,0.167772681559)); +#33001 = LINE('',#33002,#33003); +#33002 = CARTESIAN_POINT('',(-1.19,-1.4,0.149429204714)); +#33003 = VECTOR('',#33004,1.); +#33004 = DIRECTION('',(-0.,-0.996194698092,-8.715574274766E-02)); +#33005 = ORIENTED_EDGE('',*,*,#33006,.F.); +#33006 = EDGE_CURVE('',#33007,#32999,#33009,.T.); +#33007 = VERTEX_POINT('',#33008); +#33008 = CARTESIAN_POINT('',(-1.19,-1.099429204714,0.258676577093)); +#33009 = CIRCLE('',#33010,1.E-01); +#33010 = AXIS2_PLACEMENT_3D('',#33011,#33012,#33013); +#33011 = CARTESIAN_POINT('',(-1.19,-1.199048674523,0.267392151368)); +#33012 = DIRECTION('',(-1.,-0.,-0.)); +#33013 = DIRECTION('',(0.,0.,-1.)); +#33014 = ORIENTED_EDGE('',*,*,#33015,.F.); +#33015 = EDGE_CURVE('',#33016,#33007,#33018,.T.); +#33016 = VERTEX_POINT('',#33017); +#33017 = CARTESIAN_POINT('',(-1.19,-1.074222639515,0.546788935687)); +#33018 = LINE('',#33019,#33020); +#33019 = CARTESIAN_POINT('',(-1.19,-1.099429204714,0.258676577093)); +#33020 = VECTOR('',#33021,1.); +#33021 = DIRECTION('',(-0.,-8.715574274766E-02,-0.996194698092)); +#33022 = ORIENTED_EDGE('',*,*,#33023,.F.); +#33023 = EDGE_CURVE('',#32940,#33016,#33024,.T.); +#33024 = CIRCLE('',#33025,0.25); +#33025 = AXIS2_PLACEMENT_3D('',#33026,#33027,#33028); +#33026 = CARTESIAN_POINT('',(-1.19,-0.825173964992,0.525)); +#33027 = DIRECTION('',(1.,0.,-0.)); +#33028 = DIRECTION('',(0.,0.,1.)); +#33029 = PLANE('',#33030); +#33030 = AXIS2_PLACEMENT_3D('',#33031,#33032,#33033); +#33031 = CARTESIAN_POINT('',(-1.19,-1.199048674523,0.267392151368)); +#33032 = DIRECTION('',(1.,0.,0.)); +#33033 = DIRECTION('',(0.,0.,-1.)); +#33034 = ADVANCED_FACE('',(#33035),#33046,.F.); +#33035 = FACE_BOUND('',#33036,.T.); +#33036 = EDGE_LOOP('',(#33037,#33038,#33039,#33045)); +#33037 = ORIENTED_EDGE('',*,*,#32758,.F.); +#33038 = ORIENTED_EDGE('',*,*,#32939,.T.); +#33039 = ORIENTED_EDGE('',*,*,#33040,.F.); +#33040 = EDGE_CURVE('',#32842,#32940,#33041,.T.); +#33041 = LINE('',#33042,#33043); +#33042 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.775)); +#33043 = VECTOR('',#33044,1.); +#33044 = DIRECTION('',(-1.,-0.,-0.)); +#33045 = ORIENTED_EDGE('',*,*,#32841,.F.); +#33046 = PLANE('',#33047); +#33047 = AXIS2_PLACEMENT_3D('',#33048,#33049,#33050); +#33048 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.775)); +#33049 = DIRECTION('',(0.,0.,-1.)); +#33050 = DIRECTION('',(-1.,0.,-0.)); +#33051 = ADVANCED_FACE('',(#33052),#33068,.F.); +#33052 = FACE_BOUND('',#33053,.T.); +#33053 = EDGE_LOOP('',(#33054,#33055,#33061,#33062)); +#33054 = ORIENTED_EDGE('',*,*,#32982,.T.); +#33055 = ORIENTED_EDGE('',*,*,#33056,.F.); +#33056 = EDGE_CURVE('',#32892,#32974,#33057,.T.); +#33057 = LINE('',#33058,#33059); +#33058 = CARTESIAN_POINT('',(-0.71,-1.177259738836,1.834347684491E-02)); +#33059 = VECTOR('',#33060,1.); +#33060 = DIRECTION('',(-1.,-0.,-0.)); +#33061 = ORIENTED_EDGE('',*,*,#32891,.F.); +#33062 = ORIENTED_EDGE('',*,*,#33063,.T.); +#33063 = EDGE_CURVE('',#32884,#32983,#33064,.T.); +#33064 = LINE('',#33065,#33066); +#33065 = CARTESIAN_POINT('',(-0.71,-1.386926638588,1.355252715607E-17)); +#33066 = VECTOR('',#33067,1.); +#33067 = DIRECTION('',(-1.,-0.,-0.)); +#33068 = PLANE('',#33069); +#33069 = AXIS2_PLACEMENT_3D('',#33070,#33071,#33072); +#33070 = CARTESIAN_POINT('',(-0.71,-1.177259738836,1.834347684491E-02)); +#33071 = DIRECTION('',(0.,-8.715574274766E-02,0.996194698092)); +#33072 = DIRECTION('',(0.,-0.996194698092,-8.715574274766E-02)); +#33073 = ADVANCED_FACE('',(#33074),#33085,.T.); +#33074 = FACE_BOUND('',#33075,.T.); +#33075 = EDGE_LOOP('',(#33076,#33077,#33083,#33084)); +#33076 = ORIENTED_EDGE('',*,*,#32973,.T.); +#33077 = ORIENTED_EDGE('',*,*,#33078,.F.); +#33078 = EDGE_CURVE('',#32900,#32966,#33079,.T.); +#33079 = LINE('',#33080,#33081); +#33080 = CARTESIAN_POINT('',(-0.71,-0.95,0.245603215681)); +#33081 = VECTOR('',#33082,1.); +#33082 = DIRECTION('',(-1.,-0.,-0.)); +#33083 = ORIENTED_EDGE('',*,*,#32899,.F.); +#33084 = ORIENTED_EDGE('',*,*,#33056,.T.); +#33085 = CYLINDRICAL_SURFACE('',#33086,0.25); +#33086 = AXIS2_PLACEMENT_3D('',#33087,#33088,#33089); +#33087 = CARTESIAN_POINT('',(-0.71,-1.199048674523,0.267392151368)); +#33088 = DIRECTION('',(-1.,-0.,-0.)); +#33089 = DIRECTION('',(-0.,0.,1.)); +#33090 = ADVANCED_FACE('',(#33091),#33102,.F.); +#33091 = FACE_BOUND('',#33092,.T.); +#33092 = EDGE_LOOP('',(#33093,#33094,#33100,#33101)); +#33093 = ORIENTED_EDGE('',*,*,#32965,.T.); +#33094 = ORIENTED_EDGE('',*,*,#33095,.F.); +#33095 = EDGE_CURVE('',#32909,#32957,#33096,.T.); +#33096 = LINE('',#33097,#33098); +#33097 = CARTESIAN_POINT('',(-0.71,-0.924793434801,0.533715574275)); +#33098 = VECTOR('',#33099,1.); +#33099 = DIRECTION('',(-1.,-0.,-0.)); +#33100 = ORIENTED_EDGE('',*,*,#32908,.F.); +#33101 = ORIENTED_EDGE('',*,*,#33078,.T.); +#33102 = PLANE('',#33103); +#33103 = AXIS2_PLACEMENT_3D('',#33104,#33105,#33106); +#33104 = CARTESIAN_POINT('',(-0.71,-0.924793434801,0.533715574275)); +#33105 = DIRECTION('',(0.,-0.996194698092,8.715574274766E-02)); +#33106 = DIRECTION('',(0.,-8.715574274766E-02,-0.996194698092)); +#33107 = ADVANCED_FACE('',(#33108),#33119,.F.); +#33108 = FACE_BOUND('',#33109,.F.); +#33109 = EDGE_LOOP('',(#33110,#33111,#33112,#33118)); +#33110 = ORIENTED_EDGE('',*,*,#33095,.F.); +#33111 = ORIENTED_EDGE('',*,*,#32916,.T.); +#33112 = ORIENTED_EDGE('',*,*,#33113,.T.); +#33113 = EDGE_CURVE('',#32917,#32949,#33114,.T.); +#33114 = LINE('',#33115,#33116); +#33115 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.625)); +#33116 = VECTOR('',#33117,1.); +#33117 = DIRECTION('',(-1.,-0.,-0.)); +#33118 = ORIENTED_EDGE('',*,*,#32956,.F.); +#33119 = CYLINDRICAL_SURFACE('',#33120,1.E-01); +#33120 = AXIS2_PLACEMENT_3D('',#33121,#33122,#33123); +#33121 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.525)); +#33122 = DIRECTION('',(-1.,-0.,-0.)); +#33123 = DIRECTION('',(-0.,0.,1.)); +#33124 = ADVANCED_FACE('',(#33125),#33131,.F.); +#33125 = FACE_BOUND('',#33126,.T.); +#33126 = EDGE_LOOP('',(#33127,#33128,#33129,#33130)); +#33127 = ORIENTED_EDGE('',*,*,#32734,.T.); +#33128 = ORIENTED_EDGE('',*,*,#32925,.F.); +#33129 = ORIENTED_EDGE('',*,*,#33113,.T.); +#33130 = ORIENTED_EDGE('',*,*,#32948,.T.); +#33131 = PLANE('',#33132); +#33132 = AXIS2_PLACEMENT_3D('',#33133,#33134,#33135); +#33133 = CARTESIAN_POINT('',(-0.71,0.825173964992,0.625)); +#33134 = DIRECTION('',(-0.,0.,1.)); +#33135 = DIRECTION('',(1.,0.,0.)); +#33136 = ADVANCED_FACE('',(#33137),#33148,.T.); +#33137 = FACE_BOUND('',#33138,.T.); +#33138 = EDGE_LOOP('',(#33139,#33140,#33146,#33147)); +#33139 = ORIENTED_EDGE('',*,*,#33023,.T.); +#33140 = ORIENTED_EDGE('',*,*,#33141,.F.); +#33141 = EDGE_CURVE('',#32850,#33016,#33142,.T.); +#33142 = LINE('',#33143,#33144); +#33143 = CARTESIAN_POINT('',(-0.71,-1.074222639515,0.546788935687)); +#33144 = VECTOR('',#33145,1.); +#33145 = DIRECTION('',(-1.,-0.,-0.)); +#33146 = ORIENTED_EDGE('',*,*,#32849,.F.); +#33147 = ORIENTED_EDGE('',*,*,#33040,.T.); +#33148 = CYLINDRICAL_SURFACE('',#33149,0.25); +#33149 = AXIS2_PLACEMENT_3D('',#33150,#33151,#33152); +#33150 = CARTESIAN_POINT('',(-0.71,-0.825173964992,0.525)); +#33151 = DIRECTION('',(-1.,-0.,-0.)); +#33152 = DIRECTION('',(-0.,0.,1.)); +#33153 = ADVANCED_FACE('',(#33154),#33165,.F.); +#33154 = FACE_BOUND('',#33155,.T.); +#33155 = EDGE_LOOP('',(#33156,#33157,#33163,#33164)); +#33156 = ORIENTED_EDGE('',*,*,#33015,.T.); +#33157 = ORIENTED_EDGE('',*,*,#33158,.F.); +#33158 = EDGE_CURVE('',#32859,#33007,#33159,.T.); +#33159 = LINE('',#33160,#33161); +#33160 = CARTESIAN_POINT('',(-0.71,-1.099429204714,0.258676577093)); +#33161 = VECTOR('',#33162,1.); +#33162 = DIRECTION('',(-1.,-0.,-0.)); +#33163 = ORIENTED_EDGE('',*,*,#32858,.F.); +#33164 = ORIENTED_EDGE('',*,*,#33141,.T.); +#33165 = PLANE('',#33166); +#33166 = AXIS2_PLACEMENT_3D('',#33167,#33168,#33169); +#33167 = CARTESIAN_POINT('',(-0.71,-1.099429204714,0.258676577093)); +#33168 = DIRECTION('',(0.,0.996194698092,-8.715574274766E-02)); +#33169 = DIRECTION('',(0.,8.715574274766E-02,0.996194698092)); +#33170 = ADVANCED_FACE('',(#33171),#33182,.F.); +#33171 = FACE_BOUND('',#33172,.F.); +#33172 = EDGE_LOOP('',(#33173,#33174,#33175,#33181)); +#33173 = ORIENTED_EDGE('',*,*,#33158,.F.); +#33174 = ORIENTED_EDGE('',*,*,#32866,.T.); +#33175 = ORIENTED_EDGE('',*,*,#33176,.T.); +#33176 = EDGE_CURVE('',#32867,#32999,#33177,.T.); +#33177 = LINE('',#33178,#33179); +#33178 = CARTESIAN_POINT('',(-0.71,-1.190333100248,0.167772681559)); +#33179 = VECTOR('',#33180,1.); +#33180 = DIRECTION('',(-1.,-0.,-0.)); +#33181 = ORIENTED_EDGE('',*,*,#33006,.F.); +#33182 = CYLINDRICAL_SURFACE('',#33183,1.E-01); +#33183 = AXIS2_PLACEMENT_3D('',#33184,#33185,#33186); +#33184 = CARTESIAN_POINT('',(-0.71,-1.199048674523,0.267392151368)); +#33185 = DIRECTION('',(-1.,-0.,-0.)); +#33186 = DIRECTION('',(-0.,0.,1.)); +#33187 = ADVANCED_FACE('',(#33188),#33199,.F.); +#33188 = FACE_BOUND('',#33189,.T.); +#33189 = EDGE_LOOP('',(#33190,#33191,#33197,#33198)); +#33190 = ORIENTED_EDGE('',*,*,#32998,.T.); +#33191 = ORIENTED_EDGE('',*,*,#33192,.F.); +#33192 = EDGE_CURVE('',#32876,#32991,#33193,.T.); +#33193 = LINE('',#33194,#33195); +#33194 = CARTESIAN_POINT('',(-0.71,-1.4,0.149429204714)); +#33195 = VECTOR('',#33196,1.); +#33196 = DIRECTION('',(-1.,-0.,-0.)); +#33197 = ORIENTED_EDGE('',*,*,#32875,.F.); +#33198 = ORIENTED_EDGE('',*,*,#33176,.T.); +#33199 = PLANE('',#33200); +#33200 = AXIS2_PLACEMENT_3D('',#33201,#33202,#33203); +#33201 = CARTESIAN_POINT('',(-0.71,-1.4,0.149429204714)); +#33202 = DIRECTION('',(0.,8.715574274766E-02,-0.996194698092)); +#33203 = DIRECTION('',(0.,0.996194698092,8.715574274766E-02)); +#33204 = ADVANCED_FACE('',(#33205),#33211,.F.); +#33205 = FACE_BOUND('',#33206,.T.); +#33206 = EDGE_LOOP('',(#33207,#33208,#33209,#33210)); +#33207 = ORIENTED_EDGE('',*,*,#32990,.T.); +#33208 = ORIENTED_EDGE('',*,*,#33063,.F.); +#33209 = ORIENTED_EDGE('',*,*,#32883,.F.); +#33210 = ORIENTED_EDGE('',*,*,#33192,.T.); +#33211 = PLANE('',#33212); +#33212 = AXIS2_PLACEMENT_3D('',#33213,#33214,#33215); +#33213 = CARTESIAN_POINT('',(-0.71,-1.386926638588,1.355252715607E-17)); +#33214 = DIRECTION('',(-0.,0.996194698092,8.715574274766E-02)); +#33215 = DIRECTION('',(0.,-8.715574274766E-02,0.996194698092)); +#33216 = ADVANCED_FACE('',(#33217),#33251,.F.); +#33217 = FACE_BOUND('',#33218,.T.); +#33218 = EDGE_LOOP('',(#33219,#33229,#33237,#33245)); +#33219 = ORIENTED_EDGE('',*,*,#33220,.T.); +#33220 = EDGE_CURVE('',#33221,#33223,#33225,.T.); +#33221 = VERTEX_POINT('',#33222); +#33222 = CARTESIAN_POINT('',(-0.24,0.924793434801,0.533715574275)); +#33223 = VERTEX_POINT('',#33224); +#33224 = CARTESIAN_POINT('',(-0.24,0.95,0.245603215681)); +#33225 = LINE('',#33226,#33227); +#33226 = CARTESIAN_POINT('',(-0.24,0.95,0.245603215681)); +#33227 = VECTOR('',#33228,1.); +#33228 = DIRECTION('',(-0.,8.715574274766E-02,-0.996194698092)); +#33229 = ORIENTED_EDGE('',*,*,#33230,.F.); +#33230 = EDGE_CURVE('',#33231,#33223,#33233,.T.); +#33231 = VERTEX_POINT('',#33232); +#33232 = CARTESIAN_POINT('',(0.24,0.95,0.245603215681)); +#33233 = LINE('',#33234,#33235); +#33234 = CARTESIAN_POINT('',(0.24,0.95,0.245603215681)); +#33235 = VECTOR('',#33236,1.); +#33236 = DIRECTION('',(-1.,-0.,-0.)); +#33237 = ORIENTED_EDGE('',*,*,#33238,.F.); +#33238 = EDGE_CURVE('',#33239,#33231,#33241,.T.); +#33239 = VERTEX_POINT('',#33240); +#33240 = CARTESIAN_POINT('',(0.24,0.924793434801,0.533715574275)); +#33241 = LINE('',#33242,#33243); +#33242 = CARTESIAN_POINT('',(0.24,0.95,0.245603215681)); +#33243 = VECTOR('',#33244,1.); +#33244 = DIRECTION('',(-0.,8.715574274766E-02,-0.996194698092)); +#33245 = ORIENTED_EDGE('',*,*,#33246,.T.); +#33246 = EDGE_CURVE('',#33239,#33221,#33247,.T.); +#33247 = LINE('',#33248,#33249); +#33248 = CARTESIAN_POINT('',(0.24,0.924793434801,0.533715574275)); +#33249 = VECTOR('',#33250,1.); +#33250 = DIRECTION('',(-1.,-0.,-0.)); +#33251 = PLANE('',#33252); +#33252 = AXIS2_PLACEMENT_3D('',#33253,#33254,#33255); +#33253 = CARTESIAN_POINT('',(0.24,0.95,0.245603215681)); +#33254 = DIRECTION('',(-0.,0.996194698092,8.715574274766E-02)); +#33255 = DIRECTION('',(0.,-8.715574274766E-02,0.996194698092)); +#33256 = ADVANCED_FACE('',(#33257),#33284,.T.); +#33257 = FACE_BOUND('',#33258,.T.); +#33258 = EDGE_LOOP('',(#33259,#33268,#33276,#33283)); +#33259 = ORIENTED_EDGE('',*,*,#33260,.T.); +#33260 = EDGE_CURVE('',#33223,#33261,#33263,.T.); +#33261 = VERTEX_POINT('',#33262); +#33262 = CARTESIAN_POINT('',(-0.24,1.177259738836,1.834347684491E-02)); +#33263 = CIRCLE('',#33264,0.25); +#33264 = AXIS2_PLACEMENT_3D('',#33265,#33266,#33267); +#33265 = CARTESIAN_POINT('',(-0.24,1.199048674523,0.267392151368)); +#33266 = DIRECTION('',(1.,0.,-0.)); +#33267 = DIRECTION('',(0.,0.,1.)); +#33268 = ORIENTED_EDGE('',*,*,#33269,.F.); +#33269 = EDGE_CURVE('',#33270,#33261,#33272,.T.); +#33270 = VERTEX_POINT('',#33271); +#33271 = CARTESIAN_POINT('',(0.24,1.177259738836,1.834347684491E-02)); +#33272 = LINE('',#33273,#33274); +#33273 = CARTESIAN_POINT('',(0.24,1.177259738836,1.834347684491E-02)); +#33274 = VECTOR('',#33275,1.); +#33275 = DIRECTION('',(-1.,-0.,-0.)); +#33276 = ORIENTED_EDGE('',*,*,#33277,.F.); +#33277 = EDGE_CURVE('',#33231,#33270,#33278,.T.); +#33278 = CIRCLE('',#33279,0.25); +#33279 = AXIS2_PLACEMENT_3D('',#33280,#33281,#33282); +#33280 = CARTESIAN_POINT('',(0.24,1.199048674523,0.267392151368)); +#33281 = DIRECTION('',(1.,0.,-0.)); +#33282 = DIRECTION('',(0.,0.,1.)); +#33283 = ORIENTED_EDGE('',*,*,#33230,.T.); +#33284 = CYLINDRICAL_SURFACE('',#33285,0.25); +#33285 = AXIS2_PLACEMENT_3D('',#33286,#33287,#33288); +#33286 = CARTESIAN_POINT('',(0.24,1.199048674523,0.267392151368)); +#33287 = DIRECTION('',(-1.,-0.,-0.)); +#33288 = DIRECTION('',(-0.,0.,1.)); +#33289 = ADVANCED_FACE('',(#33290),#33315,.F.); +#33290 = FACE_BOUND('',#33291,.T.); +#33291 = EDGE_LOOP('',(#33292,#33300,#33308,#33314)); +#33292 = ORIENTED_EDGE('',*,*,#33293,.T.); +#33293 = EDGE_CURVE('',#33261,#33294,#33296,.T.); +#33294 = VERTEX_POINT('',#33295); +#33295 = CARTESIAN_POINT('',(-0.24,1.386926638588,1.355260259017E-17)); +#33296 = LINE('',#33297,#33298); +#33297 = CARTESIAN_POINT('',(-0.24,1.386926638588,1.355260259017E-17)); +#33298 = VECTOR('',#33299,1.); +#33299 = DIRECTION('',(-0.,0.996194698092,-8.715574274766E-02)); +#33300 = ORIENTED_EDGE('',*,*,#33301,.F.); +#33301 = EDGE_CURVE('',#33302,#33294,#33304,.T.); +#33302 = VERTEX_POINT('',#33303); +#33303 = CARTESIAN_POINT('',(0.24,1.386926638588,1.355260259017E-17)); +#33304 = LINE('',#33305,#33306); +#33305 = CARTESIAN_POINT('',(0.24,1.386926638588,1.355260259017E-17)); +#33306 = VECTOR('',#33307,1.); +#33307 = DIRECTION('',(-1.,-0.,-0.)); +#33308 = ORIENTED_EDGE('',*,*,#33309,.F.); +#33309 = EDGE_CURVE('',#33270,#33302,#33310,.T.); +#33310 = LINE('',#33311,#33312); +#33311 = CARTESIAN_POINT('',(0.24,1.386926638588,1.355260259017E-17)); +#33312 = VECTOR('',#33313,1.); +#33313 = DIRECTION('',(-0.,0.996194698092,-8.715574274766E-02)); +#33314 = ORIENTED_EDGE('',*,*,#33269,.T.); +#33315 = PLANE('',#33316); +#33316 = AXIS2_PLACEMENT_3D('',#33317,#33318,#33319); +#33317 = CARTESIAN_POINT('',(0.24,1.386926638588,1.355260259017E-17)); +#33318 = DIRECTION('',(-0.,8.715574274766E-02,0.996194698092)); +#33319 = DIRECTION('',(0.,-0.996194698092,8.715574274766E-02)); +#33320 = ADVANCED_FACE('',(#33321),#33346,.F.); +#33321 = FACE_BOUND('',#33322,.T.); +#33322 = EDGE_LOOP('',(#33323,#33331,#33339,#33345)); +#33323 = ORIENTED_EDGE('',*,*,#33324,.T.); +#33324 = EDGE_CURVE('',#33294,#33325,#33327,.T.); +#33325 = VERTEX_POINT('',#33326); +#33326 = CARTESIAN_POINT('',(-0.24,1.4,0.149429204714)); +#33327 = LINE('',#33328,#33329); +#33328 = CARTESIAN_POINT('',(-0.24,1.4,0.149429204714)); +#33329 = VECTOR('',#33330,1.); +#33330 = DIRECTION('',(-0.,8.715574274766E-02,0.996194698092)); +#33331 = ORIENTED_EDGE('',*,*,#33332,.F.); +#33332 = EDGE_CURVE('',#33333,#33325,#33335,.T.); +#33333 = VERTEX_POINT('',#33334); +#33334 = CARTESIAN_POINT('',(0.24,1.4,0.149429204714)); +#33335 = LINE('',#33336,#33337); +#33336 = CARTESIAN_POINT('',(0.24,1.4,0.149429204714)); +#33337 = VECTOR('',#33338,1.); +#33338 = DIRECTION('',(-1.,-0.,-0.)); +#33339 = ORIENTED_EDGE('',*,*,#33340,.F.); +#33340 = EDGE_CURVE('',#33302,#33333,#33341,.T.); +#33341 = LINE('',#33342,#33343); +#33342 = CARTESIAN_POINT('',(0.24,1.4,0.149429204714)); +#33343 = VECTOR('',#33344,1.); +#33344 = DIRECTION('',(-0.,8.715574274766E-02,0.996194698092)); +#33345 = ORIENTED_EDGE('',*,*,#33301,.T.); +#33346 = PLANE('',#33347); +#33347 = AXIS2_PLACEMENT_3D('',#33348,#33349,#33350); +#33348 = CARTESIAN_POINT('',(0.24,1.4,0.149429204714)); +#33349 = DIRECTION('',(0.,-0.996194698092,8.715574274766E-02)); +#33350 = DIRECTION('',(0.,-8.715574274766E-02,-0.996194698092)); +#33351 = ADVANCED_FACE('',(#33352),#33377,.F.); +#33352 = FACE_BOUND('',#33353,.T.); +#33353 = EDGE_LOOP('',(#33354,#33362,#33370,#33376)); +#33354 = ORIENTED_EDGE('',*,*,#33355,.T.); +#33355 = EDGE_CURVE('',#33325,#33356,#33358,.T.); +#33356 = VERTEX_POINT('',#33357); +#33357 = CARTESIAN_POINT('',(-0.24,1.190333100248,0.167772681559)); +#33358 = LINE('',#33359,#33360); +#33359 = CARTESIAN_POINT('',(-0.24,1.190333100248,0.167772681559)); +#33360 = VECTOR('',#33361,1.); +#33361 = DIRECTION('',(-0.,-0.996194698092,8.715574274766E-02)); +#33362 = ORIENTED_EDGE('',*,*,#33363,.F.); +#33363 = EDGE_CURVE('',#33364,#33356,#33366,.T.); +#33364 = VERTEX_POINT('',#33365); +#33365 = CARTESIAN_POINT('',(0.24,1.190333100248,0.167772681559)); +#33366 = LINE('',#33367,#33368); +#33367 = CARTESIAN_POINT('',(0.24,1.190333100248,0.167772681559)); +#33368 = VECTOR('',#33369,1.); +#33369 = DIRECTION('',(-1.,-0.,-0.)); +#33370 = ORIENTED_EDGE('',*,*,#33371,.F.); +#33371 = EDGE_CURVE('',#33333,#33364,#33372,.T.); +#33372 = LINE('',#33373,#33374); +#33373 = CARTESIAN_POINT('',(0.24,1.190333100248,0.167772681559)); +#33374 = VECTOR('',#33375,1.); +#33375 = DIRECTION('',(-0.,-0.996194698092,8.715574274766E-02)); +#33376 = ORIENTED_EDGE('',*,*,#33332,.T.); +#33377 = PLANE('',#33378); +#33378 = AXIS2_PLACEMENT_3D('',#33379,#33380,#33381); +#33379 = CARTESIAN_POINT('',(0.24,1.190333100248,0.167772681559)); +#33380 = DIRECTION('',(0.,-8.715574274766E-02,-0.996194698092)); +#33381 = DIRECTION('',(0.,0.996194698092,-8.715574274766E-02)); +#33382 = ADVANCED_FACE('',(#33383),#33410,.F.); +#33383 = FACE_BOUND('',#33384,.F.); +#33384 = EDGE_LOOP('',(#33385,#33386,#33395,#33403)); +#33385 = ORIENTED_EDGE('',*,*,#33363,.F.); +#33386 = ORIENTED_EDGE('',*,*,#33387,.T.); +#33387 = EDGE_CURVE('',#33364,#33388,#33390,.T.); +#33388 = VERTEX_POINT('',#33389); +#33389 = CARTESIAN_POINT('',(0.24,1.099429204714,0.258676577093)); +#33390 = CIRCLE('',#33391,1.E-01); +#33391 = AXIS2_PLACEMENT_3D('',#33392,#33393,#33394); +#33392 = CARTESIAN_POINT('',(0.24,1.199048674523,0.267392151368)); +#33393 = DIRECTION('',(-1.,-0.,-0.)); +#33394 = DIRECTION('',(0.,0.,-1.)); +#33395 = ORIENTED_EDGE('',*,*,#33396,.T.); +#33396 = EDGE_CURVE('',#33388,#33397,#33399,.T.); +#33397 = VERTEX_POINT('',#33398); +#33398 = CARTESIAN_POINT('',(-0.24,1.099429204714,0.258676577093)); +#33399 = LINE('',#33400,#33401); +#33400 = CARTESIAN_POINT('',(0.24,1.099429204714,0.258676577093)); +#33401 = VECTOR('',#33402,1.); +#33402 = DIRECTION('',(-1.,-0.,-0.)); +#33403 = ORIENTED_EDGE('',*,*,#33404,.F.); +#33404 = EDGE_CURVE('',#33356,#33397,#33405,.T.); +#33405 = CIRCLE('',#33406,1.E-01); +#33406 = AXIS2_PLACEMENT_3D('',#33407,#33408,#33409); +#33407 = CARTESIAN_POINT('',(-0.24,1.199048674523,0.267392151368)); +#33408 = DIRECTION('',(-1.,-0.,-0.)); +#33409 = DIRECTION('',(0.,0.,-1.)); +#33410 = CYLINDRICAL_SURFACE('',#33411,1.E-01); +#33411 = AXIS2_PLACEMENT_3D('',#33412,#33413,#33414); +#33412 = CARTESIAN_POINT('',(0.24,1.199048674523,0.267392151368)); +#33413 = DIRECTION('',(-1.,-0.,-0.)); +#33414 = DIRECTION('',(-0.,0.,1.)); +#33415 = ADVANCED_FACE('',(#33416),#33441,.F.); +#33416 = FACE_BOUND('',#33417,.T.); +#33417 = EDGE_LOOP('',(#33418,#33426,#33434,#33440)); +#33418 = ORIENTED_EDGE('',*,*,#33419,.T.); +#33419 = EDGE_CURVE('',#33397,#33420,#33422,.T.); +#33420 = VERTEX_POINT('',#33421); +#33421 = CARTESIAN_POINT('',(-0.24,1.074222639515,0.546788935687)); +#33422 = LINE('',#33423,#33424); +#33423 = CARTESIAN_POINT('',(-0.24,1.074222639515,0.546788935687)); +#33424 = VECTOR('',#33425,1.); +#33425 = DIRECTION('',(-0.,-8.715574274766E-02,0.996194698092)); +#33426 = ORIENTED_EDGE('',*,*,#33427,.F.); +#33427 = EDGE_CURVE('',#33428,#33420,#33430,.T.); +#33428 = VERTEX_POINT('',#33429); +#33429 = CARTESIAN_POINT('',(0.24,1.074222639515,0.546788935687)); +#33430 = LINE('',#33431,#33432); +#33431 = CARTESIAN_POINT('',(0.24,1.074222639515,0.546788935687)); +#33432 = VECTOR('',#33433,1.); +#33433 = DIRECTION('',(-1.,-0.,-0.)); +#33434 = ORIENTED_EDGE('',*,*,#33435,.F.); +#33435 = EDGE_CURVE('',#33388,#33428,#33436,.T.); +#33436 = LINE('',#33437,#33438); +#33437 = CARTESIAN_POINT('',(0.24,1.074222639515,0.546788935687)); +#33438 = VECTOR('',#33439,1.); +#33439 = DIRECTION('',(-0.,-8.715574274766E-02,0.996194698092)); +#33440 = ORIENTED_EDGE('',*,*,#33396,.T.); +#33441 = PLANE('',#33442); +#33442 = AXIS2_PLACEMENT_3D('',#33443,#33444,#33445); +#33443 = CARTESIAN_POINT('',(0.24,1.074222639515,0.546788935687)); +#33444 = DIRECTION('',(0.,-0.996194698092,-8.715574274766E-02)); +#33445 = DIRECTION('',(0.,8.715574274766E-02,-0.996194698092)); +#33446 = ADVANCED_FACE('',(#33447),#33474,.F.); +#33447 = FACE_BOUND('',#33448,.F.); +#33448 = EDGE_LOOP('',(#33449,#33459,#33466,#33467)); +#33449 = ORIENTED_EDGE('',*,*,#33450,.F.); +#33450 = EDGE_CURVE('',#33451,#33453,#33455,.T.); +#33451 = VERTEX_POINT('',#33452); +#33452 = CARTESIAN_POINT('',(0.24,0.825173964992,0.625)); +#33453 = VERTEX_POINT('',#33454); +#33454 = CARTESIAN_POINT('',(-0.24,0.825173964992,0.625)); +#33455 = LINE('',#33456,#33457); +#33456 = CARTESIAN_POINT('',(0.24,0.825173964992,0.625)); +#33457 = VECTOR('',#33458,1.); +#33458 = DIRECTION('',(-1.,-0.,-0.)); +#33459 = ORIENTED_EDGE('',*,*,#33460,.T.); +#33460 = EDGE_CURVE('',#33451,#33239,#33461,.T.); +#33461 = CIRCLE('',#33462,1.E-01); +#33462 = AXIS2_PLACEMENT_3D('',#33463,#33464,#33465); +#33463 = CARTESIAN_POINT('',(0.24,0.825173964992,0.525)); +#33464 = DIRECTION('',(-1.,-0.,-0.)); +#33465 = DIRECTION('',(0.,0.,-1.)); +#33466 = ORIENTED_EDGE('',*,*,#33246,.T.); +#33467 = ORIENTED_EDGE('',*,*,#33468,.F.); +#33468 = EDGE_CURVE('',#33453,#33221,#33469,.T.); +#33469 = CIRCLE('',#33470,1.E-01); +#33470 = AXIS2_PLACEMENT_3D('',#33471,#33472,#33473); +#33471 = CARTESIAN_POINT('',(-0.24,0.825173964992,0.525)); +#33472 = DIRECTION('',(-1.,-0.,-0.)); +#33473 = DIRECTION('',(0.,0.,-1.)); +#33474 = CYLINDRICAL_SURFACE('',#33475,1.E-01); +#33475 = AXIS2_PLACEMENT_3D('',#33476,#33477,#33478); +#33476 = CARTESIAN_POINT('',(0.24,0.825173964992,0.525)); +#33477 = DIRECTION('',(-1.,-0.,-0.)); +#33478 = DIRECTION('',(-0.,0.,1.)); +#33479 = ADVANCED_FACE('',(#33480),#33507,.T.); +#33480 = FACE_BOUND('',#33481,.T.); +#33481 = EDGE_LOOP('',(#33482,#33491,#33499,#33506)); +#33482 = ORIENTED_EDGE('',*,*,#33483,.T.); +#33483 = EDGE_CURVE('',#33420,#33484,#33486,.T.); +#33484 = VERTEX_POINT('',#33485); +#33485 = CARTESIAN_POINT('',(-0.24,0.825173964992,0.775)); +#33486 = CIRCLE('',#33487,0.25); +#33487 = AXIS2_PLACEMENT_3D('',#33488,#33489,#33490); +#33488 = CARTESIAN_POINT('',(-0.24,0.825173964992,0.525)); +#33489 = DIRECTION('',(1.,0.,-0.)); +#33490 = DIRECTION('',(0.,0.,1.)); +#33491 = ORIENTED_EDGE('',*,*,#33492,.F.); +#33492 = EDGE_CURVE('',#33493,#33484,#33495,.T.); +#33493 = VERTEX_POINT('',#33494); +#33494 = CARTESIAN_POINT('',(0.24,0.825173964992,0.775)); +#33495 = LINE('',#33496,#33497); +#33496 = CARTESIAN_POINT('',(0.24,0.825173964992,0.775)); +#33497 = VECTOR('',#33498,1.); +#33498 = DIRECTION('',(-1.,-0.,-0.)); +#33499 = ORIENTED_EDGE('',*,*,#33500,.F.); +#33500 = EDGE_CURVE('',#33428,#33493,#33501,.T.); +#33501 = CIRCLE('',#33502,0.25); +#33502 = AXIS2_PLACEMENT_3D('',#33503,#33504,#33505); +#33503 = CARTESIAN_POINT('',(0.24,0.825173964992,0.525)); +#33504 = DIRECTION('',(1.,0.,-0.)); +#33505 = DIRECTION('',(0.,0.,1.)); +#33506 = ORIENTED_EDGE('',*,*,#33427,.T.); +#33507 = CYLINDRICAL_SURFACE('',#33508,0.25); +#33508 = AXIS2_PLACEMENT_3D('',#33509,#33510,#33511); +#33509 = CARTESIAN_POINT('',(0.24,0.825173964992,0.525)); +#33510 = DIRECTION('',(-1.,-0.,-0.)); +#33511 = DIRECTION('',(-0.,0.,1.)); +#33512 = ADVANCED_FACE('',(#33513),#33529,.F.); +#33513 = FACE_BOUND('',#33514,.T.); +#33514 = EDGE_LOOP('',(#33515,#33516,#33522,#33523)); +#33515 = ORIENTED_EDGE('',*,*,#32823,.T.); +#33516 = ORIENTED_EDGE('',*,*,#33517,.F.); +#33517 = EDGE_CURVE('',#33493,#32379,#33518,.T.); +#33518 = LINE('',#33519,#33520); +#33519 = CARTESIAN_POINT('',(0.24,-0.825173964992,0.775)); +#33520 = VECTOR('',#33521,1.); +#33521 = DIRECTION('',(-0.,-1.,-0.)); +#33522 = ORIENTED_EDGE('',*,*,#33492,.T.); +#33523 = ORIENTED_EDGE('',*,*,#33524,.T.); +#33524 = EDGE_CURVE('',#33484,#32461,#33525,.T.); +#33525 = LINE('',#33526,#33527); +#33526 = CARTESIAN_POINT('',(-0.24,-0.825173964992,0.775)); +#33527 = VECTOR('',#33528,1.); +#33528 = DIRECTION('',(-0.,-1.,-0.)); +#33529 = PLANE('',#33530); +#33530 = AXIS2_PLACEMENT_3D('',#33531,#33532,#33533); +#33531 = CARTESIAN_POINT('',(0.24,-0.825173964992,0.775)); +#33532 = DIRECTION('',(0.,0.,-1.)); +#33533 = DIRECTION('',(-1.,0.,-0.)); +#33534 = ADVANCED_FACE('',(#33535),#33551,.F.); +#33535 = FACE_BOUND('',#33536,.T.); +#33536 = EDGE_LOOP('',(#33537,#33538,#33544,#33545)); +#33537 = ORIENTED_EDGE('',*,*,#32669,.F.); +#33538 = ORIENTED_EDGE('',*,*,#33539,.T.); +#33539 = EDGE_CURVE('',#32459,#33453,#33540,.T.); +#33540 = LINE('',#33541,#33542); +#33541 = CARTESIAN_POINT('',(-0.24,0.825173964992,0.625)); +#33542 = VECTOR('',#33543,1.); +#33543 = DIRECTION('',(-0.,1.,-0.)); +#33544 = ORIENTED_EDGE('',*,*,#33450,.F.); +#33545 = ORIENTED_EDGE('',*,*,#33546,.F.); +#33546 = EDGE_CURVE('',#32397,#33451,#33547,.T.); +#33547 = LINE('',#33548,#33549); +#33548 = CARTESIAN_POINT('',(0.24,0.825173964992,0.625)); +#33549 = VECTOR('',#33550,1.); +#33550 = DIRECTION('',(-0.,1.,-0.)); +#33551 = PLANE('',#33552); +#33552 = AXIS2_PLACEMENT_3D('',#33553,#33554,#33555); +#33553 = CARTESIAN_POINT('',(0.24,0.825173964992,0.625)); +#33554 = DIRECTION('',(-0.,0.,1.)); +#33555 = DIRECTION('',(1.,0.,0.)); +#33556 = ADVANCED_FACE('',(#33557),#33571,.F.); +#33557 = FACE_BOUND('',#33558,.T.); +#33558 = EDGE_LOOP('',(#33559,#33560,#33561,#33562,#33563,#33564,#33565, + #33566,#33567,#33568,#33569,#33570)); +#33559 = ORIENTED_EDGE('',*,*,#33539,.F.); +#33560 = ORIENTED_EDGE('',*,*,#32458,.T.); +#33561 = ORIENTED_EDGE('',*,*,#33524,.F.); +#33562 = ORIENTED_EDGE('',*,*,#33483,.F.); +#33563 = ORIENTED_EDGE('',*,*,#33419,.F.); +#33564 = ORIENTED_EDGE('',*,*,#33404,.F.); +#33565 = ORIENTED_EDGE('',*,*,#33355,.F.); +#33566 = ORIENTED_EDGE('',*,*,#33324,.F.); +#33567 = ORIENTED_EDGE('',*,*,#33293,.F.); +#33568 = ORIENTED_EDGE('',*,*,#33260,.F.); +#33569 = ORIENTED_EDGE('',*,*,#33220,.F.); +#33570 = ORIENTED_EDGE('',*,*,#33468,.F.); +#33571 = PLANE('',#33572); +#33572 = AXIS2_PLACEMENT_3D('',#33573,#33574,#33575); +#33573 = CARTESIAN_POINT('',(-0.24,-1.199048674523,0.267392151368)); +#33574 = DIRECTION('',(1.,0.,0.)); +#33575 = DIRECTION('',(0.,0.,-1.)); +#33576 = ADVANCED_FACE('',(#33577),#33591,.T.); +#33577 = FACE_BOUND('',#33578,.T.); +#33578 = EDGE_LOOP('',(#33579,#33580,#33581,#33582,#33583,#33584,#33585, + #33586,#33587,#33588,#33589,#33590)); +#33579 = ORIENTED_EDGE('',*,*,#32404,.F.); +#33580 = ORIENTED_EDGE('',*,*,#33546,.T.); +#33581 = ORIENTED_EDGE('',*,*,#33460,.T.); +#33582 = ORIENTED_EDGE('',*,*,#33238,.T.); +#33583 = ORIENTED_EDGE('',*,*,#33277,.T.); +#33584 = ORIENTED_EDGE('',*,*,#33309,.T.); +#33585 = ORIENTED_EDGE('',*,*,#33340,.T.); +#33586 = ORIENTED_EDGE('',*,*,#33371,.T.); +#33587 = ORIENTED_EDGE('',*,*,#33387,.T.); +#33588 = ORIENTED_EDGE('',*,*,#33435,.T.); +#33589 = ORIENTED_EDGE('',*,*,#33500,.T.); +#33590 = ORIENTED_EDGE('',*,*,#33517,.T.); +#33591 = PLANE('',#33592); +#33592 = AXIS2_PLACEMENT_3D('',#33593,#33594,#33595); +#33593 = CARTESIAN_POINT('',(0.24,-1.199048674523,0.267392151368)); +#33594 = DIRECTION('',(1.,0.,0.)); +#33595 = DIRECTION('',(0.,0.,-1.)); +#33596 = ADVANCED_FACE('',(#33597),#33690,.T.); +#33597 = FACE_BOUND('',#33598,.T.); +#33598 = EDGE_LOOP('',(#33599,#33600,#33608,#33617,#33625,#33634,#33642, + #33650,#33658,#33667,#33675,#33684)); +#33599 = ORIENTED_EDGE('',*,*,#32548,.F.); +#33600 = ORIENTED_EDGE('',*,*,#33601,.T.); +#33601 = EDGE_CURVE('',#32541,#33602,#33604,.T.); +#33602 = VERTEX_POINT('',#33603); +#33603 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.775)); +#33604 = LINE('',#33605,#33606); +#33605 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.775)); +#33606 = VECTOR('',#33607,1.); +#33607 = DIRECTION('',(-0.,-1.,-0.)); +#33608 = ORIENTED_EDGE('',*,*,#33609,.T.); +#33609 = EDGE_CURVE('',#33602,#33610,#33612,.T.); +#33610 = VERTEX_POINT('',#33611); +#33611 = CARTESIAN_POINT('',(1.19,-1.074222639515,0.546788935687)); +#33612 = CIRCLE('',#33613,0.25); +#33613 = AXIS2_PLACEMENT_3D('',#33614,#33615,#33616); +#33614 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.525)); +#33615 = DIRECTION('',(1.,0.,-0.)); +#33616 = DIRECTION('',(0.,0.,1.)); +#33617 = ORIENTED_EDGE('',*,*,#33618,.T.); +#33618 = EDGE_CURVE('',#33610,#33619,#33621,.T.); +#33619 = VERTEX_POINT('',#33620); +#33620 = CARTESIAN_POINT('',(1.19,-1.099429204714,0.258676577093)); +#33621 = LINE('',#33622,#33623); +#33622 = CARTESIAN_POINT('',(1.19,-1.099429204714,0.258676577093)); +#33623 = VECTOR('',#33624,1.); +#33624 = DIRECTION('',(-0.,-8.715574274766E-02,-0.996194698092)); +#33625 = ORIENTED_EDGE('',*,*,#33626,.T.); +#33626 = EDGE_CURVE('',#33619,#33627,#33629,.T.); +#33627 = VERTEX_POINT('',#33628); +#33628 = CARTESIAN_POINT('',(1.19,-1.190333100248,0.167772681559)); +#33629 = CIRCLE('',#33630,1.E-01); +#33630 = AXIS2_PLACEMENT_3D('',#33631,#33632,#33633); +#33631 = CARTESIAN_POINT('',(1.19,-1.199048674523,0.267392151368)); +#33632 = DIRECTION('',(-1.,-0.,-0.)); +#33633 = DIRECTION('',(0.,0.,-1.)); +#33634 = ORIENTED_EDGE('',*,*,#33635,.T.); +#33635 = EDGE_CURVE('',#33627,#33636,#33638,.T.); +#33636 = VERTEX_POINT('',#33637); +#33637 = CARTESIAN_POINT('',(1.19,-1.4,0.149429204714)); +#33638 = LINE('',#33639,#33640); +#33639 = CARTESIAN_POINT('',(1.19,-1.4,0.149429204714)); +#33640 = VECTOR('',#33641,1.); +#33641 = DIRECTION('',(-0.,-0.996194698092,-8.715574274766E-02)); +#33642 = ORIENTED_EDGE('',*,*,#33643,.T.); +#33643 = EDGE_CURVE('',#33636,#33644,#33646,.T.); +#33644 = VERTEX_POINT('',#33645); +#33645 = CARTESIAN_POINT('',(1.19,-1.386926638588,1.355252715607E-17)); +#33646 = LINE('',#33647,#33648); +#33647 = CARTESIAN_POINT('',(1.19,-1.386926638588,1.355252715607E-17)); +#33648 = VECTOR('',#33649,1.); +#33649 = DIRECTION('',(-0.,8.715574274766E-02,-0.996194698092)); +#33650 = ORIENTED_EDGE('',*,*,#33651,.T.); +#33651 = EDGE_CURVE('',#33644,#33652,#33654,.T.); +#33652 = VERTEX_POINT('',#33653); +#33653 = CARTESIAN_POINT('',(1.19,-1.177259738836,1.834347684491E-02)); +#33654 = LINE('',#33655,#33656); +#33655 = CARTESIAN_POINT('',(1.19,-1.177259738836,1.834347684491E-02)); +#33656 = VECTOR('',#33657,1.); +#33657 = DIRECTION('',(-0.,0.996194698092,8.715574274766E-02)); +#33658 = ORIENTED_EDGE('',*,*,#33659,.T.); +#33659 = EDGE_CURVE('',#33652,#33660,#33662,.T.); +#33660 = VERTEX_POINT('',#33661); +#33661 = CARTESIAN_POINT('',(1.19,-0.95,0.245603215681)); +#33662 = CIRCLE('',#33663,0.25); +#33663 = AXIS2_PLACEMENT_3D('',#33664,#33665,#33666); +#33664 = CARTESIAN_POINT('',(1.19,-1.199048674523,0.267392151368)); +#33665 = DIRECTION('',(1.,0.,-0.)); +#33666 = DIRECTION('',(0.,0.,1.)); +#33667 = ORIENTED_EDGE('',*,*,#33668,.T.); +#33668 = EDGE_CURVE('',#33660,#33669,#33671,.T.); +#33669 = VERTEX_POINT('',#33670); +#33670 = CARTESIAN_POINT('',(1.19,-0.924793434801,0.533715574275)); +#33671 = LINE('',#33672,#33673); +#33672 = CARTESIAN_POINT('',(1.19,-0.924793434801,0.533715574275)); +#33673 = VECTOR('',#33674,1.); +#33674 = DIRECTION('',(-0.,8.715574274766E-02,0.996194698092)); +#33675 = ORIENTED_EDGE('',*,*,#33676,.T.); +#33676 = EDGE_CURVE('',#33669,#33677,#33679,.T.); +#33677 = VERTEX_POINT('',#33678); +#33678 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.625)); +#33679 = CIRCLE('',#33680,1.E-01); +#33680 = AXIS2_PLACEMENT_3D('',#33681,#33682,#33683); +#33681 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.525)); +#33682 = DIRECTION('',(-1.,-0.,-0.)); +#33683 = DIRECTION('',(0.,0.,-1.)); +#33684 = ORIENTED_EDGE('',*,*,#33685,.T.); +#33685 = EDGE_CURVE('',#33677,#32549,#33686,.T.); +#33686 = LINE('',#33687,#33688); +#33687 = CARTESIAN_POINT('',(1.19,0.825173964992,0.625)); +#33688 = VECTOR('',#33689,1.); +#33689 = DIRECTION('',(-0.,1.,-0.)); +#33690 = PLANE('',#33691); +#33691 = AXIS2_PLACEMENT_3D('',#33692,#33693,#33694); +#33692 = CARTESIAN_POINT('',(1.19,-1.199048674523,0.267392151368)); +#33693 = DIRECTION('',(1.,0.,0.)); +#33694 = DIRECTION('',(0.,0.,-1.)); +#33695 = ADVANCED_FACE('',(#33696),#33789,.F.); +#33696 = FACE_BOUND('',#33697,.T.); +#33697 = EDGE_LOOP('',(#33698,#33706,#33707,#33715,#33724,#33732,#33741, + #33749,#33757,#33765,#33774,#33782)); +#33698 = ORIENTED_EDGE('',*,*,#33699,.F.); +#33699 = EDGE_CURVE('',#32429,#33700,#33702,.T.); +#33700 = VERTEX_POINT('',#33701); +#33701 = CARTESIAN_POINT('',(0.71,-0.825173964992,0.775)); +#33702 = LINE('',#33703,#33704); +#33703 = CARTESIAN_POINT('',(0.71,-0.825173964992,0.775)); +#33704 = VECTOR('',#33705,1.); +#33705 = DIRECTION('',(-0.,-1.,-0.)); +#33706 = ORIENTED_EDGE('',*,*,#32428,.T.); +#33707 = ORIENTED_EDGE('',*,*,#33708,.F.); +#33708 = EDGE_CURVE('',#33709,#32421,#33711,.T.); +#33709 = VERTEX_POINT('',#33710); +#33710 = CARTESIAN_POINT('',(0.71,-0.825173964992,0.625)); +#33711 = LINE('',#33712,#33713); +#33712 = CARTESIAN_POINT('',(0.71,0.825173964992,0.625)); +#33713 = VECTOR('',#33714,1.); +#33714 = DIRECTION('',(-0.,1.,-0.)); +#33715 = ORIENTED_EDGE('',*,*,#33716,.F.); +#33716 = EDGE_CURVE('',#33717,#33709,#33719,.T.); +#33717 = VERTEX_POINT('',#33718); +#33718 = CARTESIAN_POINT('',(0.71,-0.924793434801,0.533715574275)); +#33719 = CIRCLE('',#33720,1.E-01); +#33720 = AXIS2_PLACEMENT_3D('',#33721,#33722,#33723); +#33721 = CARTESIAN_POINT('',(0.71,-0.825173964992,0.525)); +#33722 = DIRECTION('',(-1.,-0.,-0.)); +#33723 = DIRECTION('',(0.,0.,-1.)); +#33724 = ORIENTED_EDGE('',*,*,#33725,.F.); +#33725 = EDGE_CURVE('',#33726,#33717,#33728,.T.); +#33726 = VERTEX_POINT('',#33727); +#33727 = CARTESIAN_POINT('',(0.71,-0.95,0.245603215681)); +#33728 = LINE('',#33729,#33730); +#33729 = CARTESIAN_POINT('',(0.71,-0.924793434801,0.533715574275)); +#33730 = VECTOR('',#33731,1.); +#33731 = DIRECTION('',(-0.,8.715574274766E-02,0.996194698092)); +#33732 = ORIENTED_EDGE('',*,*,#33733,.F.); +#33733 = EDGE_CURVE('',#33734,#33726,#33736,.T.); +#33734 = VERTEX_POINT('',#33735); +#33735 = CARTESIAN_POINT('',(0.71,-1.177259738836,1.834347684491E-02)); +#33736 = CIRCLE('',#33737,0.25); +#33737 = AXIS2_PLACEMENT_3D('',#33738,#33739,#33740); +#33738 = CARTESIAN_POINT('',(0.71,-1.199048674523,0.267392151368)); +#33739 = DIRECTION('',(1.,0.,-0.)); +#33740 = DIRECTION('',(0.,0.,1.)); +#33741 = ORIENTED_EDGE('',*,*,#33742,.F.); +#33742 = EDGE_CURVE('',#33743,#33734,#33745,.T.); +#33743 = VERTEX_POINT('',#33744); +#33744 = CARTESIAN_POINT('',(0.71,-1.386926638588,1.355252715607E-17)); +#33745 = LINE('',#33746,#33747); +#33746 = CARTESIAN_POINT('',(0.71,-1.177259738836,1.834347684491E-02)); +#33747 = VECTOR('',#33748,1.); +#33748 = DIRECTION('',(-0.,0.996194698092,8.715574274766E-02)); +#33749 = ORIENTED_EDGE('',*,*,#33750,.F.); +#33750 = EDGE_CURVE('',#33751,#33743,#33753,.T.); +#33751 = VERTEX_POINT('',#33752); +#33752 = CARTESIAN_POINT('',(0.71,-1.4,0.149429204714)); +#33753 = LINE('',#33754,#33755); +#33754 = CARTESIAN_POINT('',(0.71,-1.386926638588,1.355252715607E-17)); +#33755 = VECTOR('',#33756,1.); +#33756 = DIRECTION('',(-0.,8.715574274766E-02,-0.996194698092)); +#33757 = ORIENTED_EDGE('',*,*,#33758,.F.); +#33758 = EDGE_CURVE('',#33759,#33751,#33761,.T.); +#33759 = VERTEX_POINT('',#33760); +#33760 = CARTESIAN_POINT('',(0.71,-1.190333100248,0.167772681559)); +#33761 = LINE('',#33762,#33763); +#33762 = CARTESIAN_POINT('',(0.71,-1.4,0.149429204714)); +#33763 = VECTOR('',#33764,1.); +#33764 = DIRECTION('',(-0.,-0.996194698092,-8.715574274766E-02)); +#33765 = ORIENTED_EDGE('',*,*,#33766,.F.); +#33766 = EDGE_CURVE('',#33767,#33759,#33769,.T.); +#33767 = VERTEX_POINT('',#33768); +#33768 = CARTESIAN_POINT('',(0.71,-1.099429204714,0.258676577093)); +#33769 = CIRCLE('',#33770,1.E-01); +#33770 = AXIS2_PLACEMENT_3D('',#33771,#33772,#33773); +#33771 = CARTESIAN_POINT('',(0.71,-1.199048674523,0.267392151368)); +#33772 = DIRECTION('',(-1.,-0.,-0.)); +#33773 = DIRECTION('',(0.,0.,-1.)); +#33774 = ORIENTED_EDGE('',*,*,#33775,.F.); +#33775 = EDGE_CURVE('',#33776,#33767,#33778,.T.); +#33776 = VERTEX_POINT('',#33777); +#33777 = CARTESIAN_POINT('',(0.71,-1.074222639515,0.546788935687)); +#33778 = LINE('',#33779,#33780); +#33779 = CARTESIAN_POINT('',(0.71,-1.099429204714,0.258676577093)); +#33780 = VECTOR('',#33781,1.); +#33781 = DIRECTION('',(-0.,-8.715574274766E-02,-0.996194698092)); +#33782 = ORIENTED_EDGE('',*,*,#33783,.F.); +#33783 = EDGE_CURVE('',#33700,#33776,#33784,.T.); +#33784 = CIRCLE('',#33785,0.25); +#33785 = AXIS2_PLACEMENT_3D('',#33786,#33787,#33788); +#33786 = CARTESIAN_POINT('',(0.71,-0.825173964992,0.525)); +#33787 = DIRECTION('',(1.,0.,-0.)); +#33788 = DIRECTION('',(0.,0.,1.)); +#33789 = PLANE('',#33790); +#33790 = AXIS2_PLACEMENT_3D('',#33791,#33792,#33793); +#33791 = CARTESIAN_POINT('',(0.71,-1.199048674523,0.267392151368)); +#33792 = DIRECTION('',(1.,0.,0.)); +#33793 = DIRECTION('',(0.,0.,-1.)); +#33794 = ADVANCED_FACE('',(#33795),#33806,.F.); +#33795 = FACE_BOUND('',#33796,.T.); +#33796 = EDGE_LOOP('',(#33797,#33798,#33799,#33805)); +#33797 = ORIENTED_EDGE('',*,*,#32765,.F.); +#33798 = ORIENTED_EDGE('',*,*,#33699,.T.); +#33799 = ORIENTED_EDGE('',*,*,#33800,.F.); +#33800 = EDGE_CURVE('',#33602,#33700,#33801,.T.); +#33801 = LINE('',#33802,#33803); +#33802 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.775)); +#33803 = VECTOR('',#33804,1.); +#33804 = DIRECTION('',(-1.,-0.,-0.)); +#33805 = ORIENTED_EDGE('',*,*,#33601,.F.); +#33806 = PLANE('',#33807); +#33807 = AXIS2_PLACEMENT_3D('',#33808,#33809,#33810); +#33808 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.775)); +#33809 = DIRECTION('',(0.,0.,-1.)); +#33810 = DIRECTION('',(-1.,0.,-0.)); +#33811 = ADVANCED_FACE('',(#33812),#33828,.F.); +#33812 = FACE_BOUND('',#33813,.T.); +#33813 = EDGE_LOOP('',(#33814,#33815,#33821,#33822)); +#33814 = ORIENTED_EDGE('',*,*,#33742,.T.); +#33815 = ORIENTED_EDGE('',*,*,#33816,.F.); +#33816 = EDGE_CURVE('',#33652,#33734,#33817,.T.); +#33817 = LINE('',#33818,#33819); +#33818 = CARTESIAN_POINT('',(1.19,-1.177259738836,1.834347684491E-02)); +#33819 = VECTOR('',#33820,1.); +#33820 = DIRECTION('',(-1.,-0.,-0.)); +#33821 = ORIENTED_EDGE('',*,*,#33651,.F.); +#33822 = ORIENTED_EDGE('',*,*,#33823,.T.); +#33823 = EDGE_CURVE('',#33644,#33743,#33824,.T.); +#33824 = LINE('',#33825,#33826); +#33825 = CARTESIAN_POINT('',(1.19,-1.386926638588,1.355252715607E-17)); +#33826 = VECTOR('',#33827,1.); +#33827 = DIRECTION('',(-1.,-0.,-0.)); +#33828 = PLANE('',#33829); +#33829 = AXIS2_PLACEMENT_3D('',#33830,#33831,#33832); +#33830 = CARTESIAN_POINT('',(1.19,-1.177259738836,1.834347684491E-02)); +#33831 = DIRECTION('',(0.,-8.715574274766E-02,0.996194698092)); +#33832 = DIRECTION('',(0.,-0.996194698092,-8.715574274766E-02)); +#33833 = ADVANCED_FACE('',(#33834),#33845,.T.); +#33834 = FACE_BOUND('',#33835,.T.); +#33835 = EDGE_LOOP('',(#33836,#33837,#33843,#33844)); +#33836 = ORIENTED_EDGE('',*,*,#33733,.T.); +#33837 = ORIENTED_EDGE('',*,*,#33838,.F.); +#33838 = EDGE_CURVE('',#33660,#33726,#33839,.T.); +#33839 = LINE('',#33840,#33841); +#33840 = CARTESIAN_POINT('',(1.19,-0.95,0.245603215681)); +#33841 = VECTOR('',#33842,1.); +#33842 = DIRECTION('',(-1.,-0.,-0.)); +#33843 = ORIENTED_EDGE('',*,*,#33659,.F.); +#33844 = ORIENTED_EDGE('',*,*,#33816,.T.); +#33845 = CYLINDRICAL_SURFACE('',#33846,0.25); +#33846 = AXIS2_PLACEMENT_3D('',#33847,#33848,#33849); +#33847 = CARTESIAN_POINT('',(1.19,-1.199048674523,0.267392151368)); +#33848 = DIRECTION('',(-1.,-0.,-0.)); +#33849 = DIRECTION('',(-0.,0.,1.)); +#33850 = ADVANCED_FACE('',(#33851),#33862,.F.); +#33851 = FACE_BOUND('',#33852,.T.); +#33852 = EDGE_LOOP('',(#33853,#33854,#33860,#33861)); +#33853 = ORIENTED_EDGE('',*,*,#33725,.T.); +#33854 = ORIENTED_EDGE('',*,*,#33855,.F.); +#33855 = EDGE_CURVE('',#33669,#33717,#33856,.T.); +#33856 = LINE('',#33857,#33858); +#33857 = CARTESIAN_POINT('',(1.19,-0.924793434801,0.533715574275)); +#33858 = VECTOR('',#33859,1.); +#33859 = DIRECTION('',(-1.,-0.,-0.)); +#33860 = ORIENTED_EDGE('',*,*,#33668,.F.); +#33861 = ORIENTED_EDGE('',*,*,#33838,.T.); +#33862 = PLANE('',#33863); +#33863 = AXIS2_PLACEMENT_3D('',#33864,#33865,#33866); +#33864 = CARTESIAN_POINT('',(1.19,-0.924793434801,0.533715574275)); +#33865 = DIRECTION('',(0.,-0.996194698092,8.715574274766E-02)); +#33866 = DIRECTION('',(0.,-8.715574274766E-02,-0.996194698092)); +#33867 = ADVANCED_FACE('',(#33868),#33879,.F.); +#33868 = FACE_BOUND('',#33869,.F.); +#33869 = EDGE_LOOP('',(#33870,#33871,#33872,#33878)); +#33870 = ORIENTED_EDGE('',*,*,#33855,.F.); +#33871 = ORIENTED_EDGE('',*,*,#33676,.T.); +#33872 = ORIENTED_EDGE('',*,*,#33873,.T.); +#33873 = EDGE_CURVE('',#33677,#33709,#33874,.T.); +#33874 = LINE('',#33875,#33876); +#33875 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.625)); +#33876 = VECTOR('',#33877,1.); +#33877 = DIRECTION('',(-1.,-0.,-0.)); +#33878 = ORIENTED_EDGE('',*,*,#33716,.F.); +#33879 = CYLINDRICAL_SURFACE('',#33880,1.E-01); +#33880 = AXIS2_PLACEMENT_3D('',#33881,#33882,#33883); +#33881 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.525)); +#33882 = DIRECTION('',(-1.,-0.,-0.)); +#33883 = DIRECTION('',(-0.,0.,1.)); +#33884 = ADVANCED_FACE('',(#33885),#33891,.F.); +#33885 = FACE_BOUND('',#33886,.T.); +#33886 = EDGE_LOOP('',(#33887,#33888,#33889,#33890)); +#33887 = ORIENTED_EDGE('',*,*,#32727,.T.); +#33888 = ORIENTED_EDGE('',*,*,#33685,.F.); +#33889 = ORIENTED_EDGE('',*,*,#33873,.T.); +#33890 = ORIENTED_EDGE('',*,*,#33708,.T.); +#33891 = PLANE('',#33892); +#33892 = AXIS2_PLACEMENT_3D('',#33893,#33894,#33895); +#33893 = CARTESIAN_POINT('',(1.19,0.825173964992,0.625)); +#33894 = DIRECTION('',(-0.,0.,1.)); +#33895 = DIRECTION('',(1.,0.,0.)); +#33896 = ADVANCED_FACE('',(#33897),#33908,.T.); +#33897 = FACE_BOUND('',#33898,.T.); +#33898 = EDGE_LOOP('',(#33899,#33900,#33906,#33907)); +#33899 = ORIENTED_EDGE('',*,*,#33783,.T.); +#33900 = ORIENTED_EDGE('',*,*,#33901,.F.); +#33901 = EDGE_CURVE('',#33610,#33776,#33902,.T.); +#33902 = LINE('',#33903,#33904); +#33903 = CARTESIAN_POINT('',(1.19,-1.074222639515,0.546788935687)); +#33904 = VECTOR('',#33905,1.); +#33905 = DIRECTION('',(-1.,-0.,-0.)); +#33906 = ORIENTED_EDGE('',*,*,#33609,.F.); +#33907 = ORIENTED_EDGE('',*,*,#33800,.T.); +#33908 = CYLINDRICAL_SURFACE('',#33909,0.25); +#33909 = AXIS2_PLACEMENT_3D('',#33910,#33911,#33912); +#33910 = CARTESIAN_POINT('',(1.19,-0.825173964992,0.525)); +#33911 = DIRECTION('',(-1.,-0.,-0.)); +#33912 = DIRECTION('',(-0.,0.,1.)); +#33913 = ADVANCED_FACE('',(#33914),#33925,.F.); +#33914 = FACE_BOUND('',#33915,.T.); +#33915 = EDGE_LOOP('',(#33916,#33917,#33923,#33924)); +#33916 = ORIENTED_EDGE('',*,*,#33775,.T.); +#33917 = ORIENTED_EDGE('',*,*,#33918,.F.); +#33918 = EDGE_CURVE('',#33619,#33767,#33919,.T.); +#33919 = LINE('',#33920,#33921); +#33920 = CARTESIAN_POINT('',(1.19,-1.099429204714,0.258676577093)); +#33921 = VECTOR('',#33922,1.); +#33922 = DIRECTION('',(-1.,-0.,-0.)); +#33923 = ORIENTED_EDGE('',*,*,#33618,.F.); +#33924 = ORIENTED_EDGE('',*,*,#33901,.T.); +#33925 = PLANE('',#33926); +#33926 = AXIS2_PLACEMENT_3D('',#33927,#33928,#33929); +#33927 = CARTESIAN_POINT('',(1.19,-1.099429204714,0.258676577093)); +#33928 = DIRECTION('',(0.,0.996194698092,-8.715574274766E-02)); +#33929 = DIRECTION('',(0.,8.715574274766E-02,0.996194698092)); +#33930 = ADVANCED_FACE('',(#33931),#33942,.F.); +#33931 = FACE_BOUND('',#33932,.F.); +#33932 = EDGE_LOOP('',(#33933,#33934,#33935,#33941)); +#33933 = ORIENTED_EDGE('',*,*,#33918,.F.); +#33934 = ORIENTED_EDGE('',*,*,#33626,.T.); +#33935 = ORIENTED_EDGE('',*,*,#33936,.T.); +#33936 = EDGE_CURVE('',#33627,#33759,#33937,.T.); +#33937 = LINE('',#33938,#33939); +#33938 = CARTESIAN_POINT('',(1.19,-1.190333100248,0.167772681559)); +#33939 = VECTOR('',#33940,1.); +#33940 = DIRECTION('',(-1.,-0.,-0.)); +#33941 = ORIENTED_EDGE('',*,*,#33766,.F.); +#33942 = CYLINDRICAL_SURFACE('',#33943,1.E-01); +#33943 = AXIS2_PLACEMENT_3D('',#33944,#33945,#33946); +#33944 = CARTESIAN_POINT('',(1.19,-1.199048674523,0.267392151368)); +#33945 = DIRECTION('',(-1.,-0.,-0.)); +#33946 = DIRECTION('',(-0.,0.,1.)); +#33947 = ADVANCED_FACE('',(#33948),#33959,.F.); +#33948 = FACE_BOUND('',#33949,.T.); +#33949 = EDGE_LOOP('',(#33950,#33951,#33957,#33958)); +#33950 = ORIENTED_EDGE('',*,*,#33758,.T.); +#33951 = ORIENTED_EDGE('',*,*,#33952,.F.); +#33952 = EDGE_CURVE('',#33636,#33751,#33953,.T.); +#33953 = LINE('',#33954,#33955); +#33954 = CARTESIAN_POINT('',(1.19,-1.4,0.149429204714)); +#33955 = VECTOR('',#33956,1.); +#33956 = DIRECTION('',(-1.,-0.,-0.)); +#33957 = ORIENTED_EDGE('',*,*,#33635,.F.); +#33958 = ORIENTED_EDGE('',*,*,#33936,.T.); +#33959 = PLANE('',#33960); +#33960 = AXIS2_PLACEMENT_3D('',#33961,#33962,#33963); +#33961 = CARTESIAN_POINT('',(1.19,-1.4,0.149429204714)); +#33962 = DIRECTION('',(0.,8.715574274766E-02,-0.996194698092)); +#33963 = DIRECTION('',(0.,0.996194698092,8.715574274766E-02)); +#33964 = ADVANCED_FACE('',(#33965),#33971,.F.); +#33965 = FACE_BOUND('',#33966,.T.); +#33966 = EDGE_LOOP('',(#33967,#33968,#33969,#33970)); +#33967 = ORIENTED_EDGE('',*,*,#33750,.T.); +#33968 = ORIENTED_EDGE('',*,*,#33823,.F.); +#33969 = ORIENTED_EDGE('',*,*,#33643,.F.); +#33970 = ORIENTED_EDGE('',*,*,#33952,.T.); +#33971 = PLANE('',#33972); +#33972 = AXIS2_PLACEMENT_3D('',#33973,#33974,#33975); +#33973 = CARTESIAN_POINT('',(1.19,-1.386926638588,1.355252715607E-17)); +#33974 = DIRECTION('',(-0.,0.996194698092,8.715574274766E-02)); +#33975 = DIRECTION('',(0.,-8.715574274766E-02,0.996194698092)); +#33976 = ADVANCED_FACE('',(#33977),#33981,.F.); +#33977 = FACE_BOUND('',#33978,.F.); +#33978 = EDGE_LOOP('',(#33979,#33980)); +#33979 = ORIENTED_EDGE('',*,*,#32362,.F.); +#33980 = ORIENTED_EDGE('',*,*,#32302,.T.); +#33981 = SPHERICAL_SURFACE('',#33982,0.195); +#33982 = AXIS2_PLACEMENT_3D('',#33983,#33984,#33985); +#33983 = CARTESIAN_POINT('',(-1.06,-0.26,1.3975)); +#33984 = DIRECTION('',(1.,0.,-6.672013369142E-15)); +#33985 = DIRECTION('',(6.672013369142E-15,0.,1.)); +#33986 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#33990)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#33987,#33988,#33989)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#33987 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#33988 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#33989 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#33990 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#33987, + 'distance_accuracy_value','confusion accuracy'); +#33991 = SHAPE_DEFINITION_REPRESENTATION(#33992,#32295); +#33992 = PRODUCT_DEFINITION_SHAPE('','',#33993); +#33993 = PRODUCT_DEFINITION('design','',#33994,#33997); +#33994 = PRODUCT_DEFINITION_FORMATION('','',#33995); +#33995 = PRODUCT('User Library-SOT23-3','User Library-SOT23-3','',( + #33996)); +#33996 = PRODUCT_CONTEXT('',#2,'mechanical'); +#33997 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#33998 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#33999,#34001); +#33999 = ( REPRESENTATION_RELATIONSHIP('','',#32295,#32285) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34000) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34000 = ITEM_DEFINED_TRANSFORMATION('','',#11,#32286); +#34001 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34002); +#34002 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('26','','',#32280,#33993,$); +#34003 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#33995)); +#34004 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34005,#34007); +#34005 = ( REPRESENTATION_RELATIONSHIP('','',#32285,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34006) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34006 = ITEM_DEFINED_TRANSFORMATION('','',#11,#47); +#34007 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34008); +#34008 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('27','','',#5,#32280,$); +#34009 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#32282)); +#34010 = SHAPE_DEFINITION_REPRESENTATION(#34011,#34017); +#34011 = PRODUCT_DEFINITION_SHAPE('','',#34012); +#34012 = PRODUCT_DEFINITION('design','',#34013,#34016); +#34013 = PRODUCT_DEFINITION_FORMATION('','',#34014); +#34014 = PRODUCT('R9','R9','',(#34015)); +#34015 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34016 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34017 = SHAPE_REPRESENTATION('',(#11,#34018),#34022); +#34018 = AXIS2_PLACEMENT_3D('',#34019,#34020,#34021); +#34019 = CARTESIAN_POINT('',(303.6316833496,180.19308471679,0.)); +#34020 = DIRECTION('',(0.,0.,1.)); +#34021 = DIRECTION('',(1.,0.,0.)); +#34022 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34026)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34023,#34024,#34025)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34023 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34024 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34025 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34026 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34023, + 'distance_accuracy_value','confusion accuracy'); +#34027 = SHAPE_DEFINITION_REPRESENTATION(#34028,#34034); +#34028 = PRODUCT_DEFINITION_SHAPE('','',#34029); +#34029 = PRODUCT_DEFINITION('design','',#34030,#34033); +#34030 = PRODUCT_DEFINITION_FORMATION('','',#34031); +#34031 = PRODUCT('6608421008','6608421008','',(#34032)); +#34032 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34033 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34034 = SHAPE_REPRESENTATION('',(#11,#34035,#34039,#34043,#34047), + #34051); +#34035 = AXIS2_PLACEMENT_3D('',#34036,#34037,#34038); +#34036 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#34037 = DIRECTION('',(0.,0.,1.)); +#34038 = DIRECTION('',(1.,0.,0.)); +#34039 = AXIS2_PLACEMENT_3D('',#34040,#34041,#34042); +#34040 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#34041 = DIRECTION('',(0.,0.,1.)); +#34042 = DIRECTION('',(1.,0.,0.)); +#34043 = AXIS2_PLACEMENT_3D('',#34044,#34045,#34046); +#34044 = CARTESIAN_POINT('',(0.5,0.25,0.)); +#34045 = DIRECTION('',(0.,0.,1.)); +#34046 = DIRECTION('',(-1.,1.224646799147E-16,0.)); +#34047 = AXIS2_PLACEMENT_3D('',#34048,#34049,#34050); +#34048 = CARTESIAN_POINT('',(-0.25,-0.25,0.315)); +#34049 = DIRECTION('',(0.,0.,1.)); +#34050 = DIRECTION('',(1.,0.,0.)); +#34051 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34055)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34052,#34053,#34054)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34052 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34053 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34054 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34055 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34052, + 'distance_accuracy_value','confusion accuracy'); +#34056 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#34057),#34207); +#34057 = MANIFOLD_SOLID_BREP('',#34058); +#34058 = CLOSED_SHELL('',(#34059,#34099,#34139,#34161,#34183,#34195)); +#34059 = ADVANCED_FACE('',(#34060),#34094,.F.); +#34060 = FACE_BOUND('',#34061,.F.); +#34061 = EDGE_LOOP('',(#34062,#34072,#34080,#34088)); +#34062 = ORIENTED_EDGE('',*,*,#34063,.F.); +#34063 = EDGE_CURVE('',#34064,#34066,#34068,.T.); +#34064 = VERTEX_POINT('',#34065); +#34065 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34066 = VERTEX_POINT('',#34067); +#34067 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#34068 = LINE('',#34069,#34070); +#34069 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34070 = VECTOR('',#34071,1.); +#34071 = DIRECTION('',(0.,0.,1.)); +#34072 = ORIENTED_EDGE('',*,*,#34073,.T.); +#34073 = EDGE_CURVE('',#34064,#34074,#34076,.T.); +#34074 = VERTEX_POINT('',#34075); +#34075 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#34076 = LINE('',#34077,#34078); +#34077 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34078 = VECTOR('',#34079,1.); +#34079 = DIRECTION('',(-0.,1.,0.)); +#34080 = ORIENTED_EDGE('',*,*,#34081,.T.); +#34081 = EDGE_CURVE('',#34074,#34082,#34084,.T.); +#34082 = VERTEX_POINT('',#34083); +#34083 = CARTESIAN_POINT('',(3.5E-02,0.5,0.315)); +#34084 = LINE('',#34085,#34086); +#34085 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#34086 = VECTOR('',#34087,1.); +#34087 = DIRECTION('',(0.,0.,1.)); +#34088 = ORIENTED_EDGE('',*,*,#34089,.F.); +#34089 = EDGE_CURVE('',#34066,#34082,#34090,.T.); +#34090 = LINE('',#34091,#34092); +#34091 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#34092 = VECTOR('',#34093,1.); +#34093 = DIRECTION('',(-0.,1.,0.)); +#34094 = PLANE('',#34095); +#34095 = AXIS2_PLACEMENT_3D('',#34096,#34097,#34098); +#34096 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34097 = DIRECTION('',(1.,0.,-0.)); +#34098 = DIRECTION('',(0.,0.,1.)); +#34099 = ADVANCED_FACE('',(#34100),#34134,.T.); +#34100 = FACE_BOUND('',#34101,.T.); +#34101 = EDGE_LOOP('',(#34102,#34112,#34120,#34128)); +#34102 = ORIENTED_EDGE('',*,*,#34103,.F.); +#34103 = EDGE_CURVE('',#34104,#34106,#34108,.T.); +#34104 = VERTEX_POINT('',#34105); +#34105 = CARTESIAN_POINT('',(0.965,0.,3.5E-02)); +#34106 = VERTEX_POINT('',#34107); +#34107 = CARTESIAN_POINT('',(0.965,0.,0.315)); +#34108 = LINE('',#34109,#34110); +#34109 = CARTESIAN_POINT('',(0.965,0.,3.5E-02)); +#34110 = VECTOR('',#34111,1.); +#34111 = DIRECTION('',(0.,0.,1.)); +#34112 = ORIENTED_EDGE('',*,*,#34113,.T.); +#34113 = EDGE_CURVE('',#34104,#34114,#34116,.T.); +#34114 = VERTEX_POINT('',#34115); +#34115 = CARTESIAN_POINT('',(0.965,0.5,3.5E-02)); +#34116 = LINE('',#34117,#34118); +#34117 = CARTESIAN_POINT('',(0.965,0.,3.5E-02)); +#34118 = VECTOR('',#34119,1.); +#34119 = DIRECTION('',(-0.,1.,0.)); +#34120 = ORIENTED_EDGE('',*,*,#34121,.T.); +#34121 = EDGE_CURVE('',#34114,#34122,#34124,.T.); +#34122 = VERTEX_POINT('',#34123); +#34123 = CARTESIAN_POINT('',(0.965,0.5,0.315)); +#34124 = LINE('',#34125,#34126); +#34125 = CARTESIAN_POINT('',(0.965,0.5,3.5E-02)); +#34126 = VECTOR('',#34127,1.); +#34127 = DIRECTION('',(0.,0.,1.)); +#34128 = ORIENTED_EDGE('',*,*,#34129,.F.); +#34129 = EDGE_CURVE('',#34106,#34122,#34130,.T.); +#34130 = LINE('',#34131,#34132); +#34131 = CARTESIAN_POINT('',(0.965,0.,0.315)); +#34132 = VECTOR('',#34133,1.); +#34133 = DIRECTION('',(0.,1.,0.)); +#34134 = PLANE('',#34135); +#34135 = AXIS2_PLACEMENT_3D('',#34136,#34137,#34138); +#34136 = CARTESIAN_POINT('',(0.965,0.,3.5E-02)); +#34137 = DIRECTION('',(1.,0.,-0.)); +#34138 = DIRECTION('',(0.,0.,1.)); +#34139 = ADVANCED_FACE('',(#34140),#34156,.F.); +#34140 = FACE_BOUND('',#34141,.F.); +#34141 = EDGE_LOOP('',(#34142,#34148,#34149,#34155)); +#34142 = ORIENTED_EDGE('',*,*,#34143,.F.); +#34143 = EDGE_CURVE('',#34064,#34104,#34144,.T.); +#34144 = LINE('',#34145,#34146); +#34145 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34146 = VECTOR('',#34147,1.); +#34147 = DIRECTION('',(1.,0.,-0.)); +#34148 = ORIENTED_EDGE('',*,*,#34063,.T.); +#34149 = ORIENTED_EDGE('',*,*,#34150,.T.); +#34150 = EDGE_CURVE('',#34066,#34106,#34151,.T.); +#34151 = LINE('',#34152,#34153); +#34152 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#34153 = VECTOR('',#34154,1.); +#34154 = DIRECTION('',(1.,0.,-0.)); +#34155 = ORIENTED_EDGE('',*,*,#34103,.F.); +#34156 = PLANE('',#34157); +#34157 = AXIS2_PLACEMENT_3D('',#34158,#34159,#34160); +#34158 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34159 = DIRECTION('',(-0.,1.,0.)); +#34160 = DIRECTION('',(0.,0.,1.)); +#34161 = ADVANCED_FACE('',(#34162),#34178,.T.); +#34162 = FACE_BOUND('',#34163,.T.); +#34163 = EDGE_LOOP('',(#34164,#34170,#34171,#34177)); +#34164 = ORIENTED_EDGE('',*,*,#34165,.F.); +#34165 = EDGE_CURVE('',#34074,#34114,#34166,.T.); +#34166 = LINE('',#34167,#34168); +#34167 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#34168 = VECTOR('',#34169,1.); +#34169 = DIRECTION('',(1.,0.,-0.)); +#34170 = ORIENTED_EDGE('',*,*,#34081,.T.); +#34171 = ORIENTED_EDGE('',*,*,#34172,.T.); +#34172 = EDGE_CURVE('',#34082,#34122,#34173,.T.); +#34173 = LINE('',#34174,#34175); +#34174 = CARTESIAN_POINT('',(3.5E-02,0.5,0.315)); +#34175 = VECTOR('',#34176,1.); +#34176 = DIRECTION('',(1.,0.,-0.)); +#34177 = ORIENTED_EDGE('',*,*,#34121,.F.); +#34178 = PLANE('',#34179); +#34179 = AXIS2_PLACEMENT_3D('',#34180,#34181,#34182); +#34180 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#34181 = DIRECTION('',(-0.,1.,0.)); +#34182 = DIRECTION('',(0.,0.,1.)); +#34183 = ADVANCED_FACE('',(#34184),#34190,.F.); +#34184 = FACE_BOUND('',#34185,.F.); +#34185 = EDGE_LOOP('',(#34186,#34187,#34188,#34189)); +#34186 = ORIENTED_EDGE('',*,*,#34073,.F.); +#34187 = ORIENTED_EDGE('',*,*,#34143,.T.); +#34188 = ORIENTED_EDGE('',*,*,#34113,.T.); +#34189 = ORIENTED_EDGE('',*,*,#34165,.F.); +#34190 = PLANE('',#34191); +#34191 = AXIS2_PLACEMENT_3D('',#34192,#34193,#34194); +#34192 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34193 = DIRECTION('',(0.,0.,1.)); +#34194 = DIRECTION('',(1.,0.,-0.)); +#34195 = ADVANCED_FACE('',(#34196),#34202,.T.); +#34196 = FACE_BOUND('',#34197,.T.); +#34197 = EDGE_LOOP('',(#34198,#34199,#34200,#34201)); +#34198 = ORIENTED_EDGE('',*,*,#34089,.F.); +#34199 = ORIENTED_EDGE('',*,*,#34150,.T.); +#34200 = ORIENTED_EDGE('',*,*,#34129,.T.); +#34201 = ORIENTED_EDGE('',*,*,#34172,.F.); +#34202 = PLANE('',#34203); +#34203 = AXIS2_PLACEMENT_3D('',#34204,#34205,#34206); +#34204 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#34205 = DIRECTION('',(0.,0.,1.)); +#34206 = DIRECTION('',(1.,0.,-0.)); +#34207 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34211)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34208,#34209,#34210)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34208 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34209 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34210 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34211 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34208, + 'distance_accuracy_value','confusion accuracy'); +#34212 = SHAPE_DEFINITION_REPRESENTATION(#34213,#34056); +#34213 = PRODUCT_DEFINITION_SHAPE('','',#34214); +#34214 = PRODUCT_DEFINITION('design','',#34215,#34218); +#34215 = PRODUCT_DEFINITION_FORMATION('','',#34216); +#34216 = PRODUCT('Mid_Body','Mid_Body','',(#34217)); +#34217 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34218 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34219 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34220,#34222); +#34220 = ( REPRESENTATION_RELATIONSHIP('','',#34056,#34034) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34221) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34221 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34035); +#34222 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34223); +#34223 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('28','96','',#34029,#34214,$); +#34224 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34216)); +#34225 = SHAPE_DEFINITION_REPRESENTATION(#34226,#34232); +#34226 = PRODUCT_DEFINITION_SHAPE('','',#34227); +#34227 = PRODUCT_DEFINITION('design','',#34228,#34231); +#34228 = PRODUCT_DEFINITION_FORMATION('','',#34229); +#34229 = PRODUCT('Terminal','Terminal','',(#34230)); +#34230 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34231 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34232 = SHAPE_REPRESENTATION('',(#11,#34233),#34237); +#34233 = AXIS2_PLACEMENT_3D('',#34234,#34235,#34236); +#34234 = CARTESIAN_POINT('',(0.,0.,0.)); +#34235 = DIRECTION('',(0.,0.,1.)); +#34236 = DIRECTION('',(1.,0.,0.)); +#34237 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34241)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34238,#34239,#34240)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34238 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34239 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34240 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34241 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34238, + 'distance_accuracy_value','confusion accuracy'); +#34242 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#34243),#34525); +#34243 = MANIFOLD_SOLID_BREP('',#34244); +#34244 = CLOSED_SHELL('',(#34245,#34285,#34348,#34372,#34428,#34445, + #34462,#34479,#34496,#34513)); +#34245 = ADVANCED_FACE('',(#34246),#34280,.F.); +#34246 = FACE_BOUND('',#34247,.F.); +#34247 = EDGE_LOOP('',(#34248,#34258,#34266,#34274)); +#34248 = ORIENTED_EDGE('',*,*,#34249,.F.); +#34249 = EDGE_CURVE('',#34250,#34252,#34254,.T.); +#34250 = VERTEX_POINT('',#34251); +#34251 = CARTESIAN_POINT('',(0.,0.,0.)); +#34252 = VERTEX_POINT('',#34253); +#34253 = CARTESIAN_POINT('',(0.,0.,0.35)); +#34254 = LINE('',#34255,#34256); +#34255 = CARTESIAN_POINT('',(0.,0.,0.)); +#34256 = VECTOR('',#34257,1.); +#34257 = DIRECTION('',(0.,0.,1.)); +#34258 = ORIENTED_EDGE('',*,*,#34259,.T.); +#34259 = EDGE_CURVE('',#34250,#34260,#34262,.T.); +#34260 = VERTEX_POINT('',#34261); +#34261 = CARTESIAN_POINT('',(0.,0.5,0.)); +#34262 = LINE('',#34263,#34264); +#34263 = CARTESIAN_POINT('',(0.,0.,0.)); +#34264 = VECTOR('',#34265,1.); +#34265 = DIRECTION('',(-0.,1.,0.)); +#34266 = ORIENTED_EDGE('',*,*,#34267,.T.); +#34267 = EDGE_CURVE('',#34260,#34268,#34270,.T.); +#34268 = VERTEX_POINT('',#34269); +#34269 = CARTESIAN_POINT('',(0.,0.5,0.35)); +#34270 = LINE('',#34271,#34272); +#34271 = CARTESIAN_POINT('',(0.,0.5,0.)); +#34272 = VECTOR('',#34273,1.); +#34273 = DIRECTION('',(0.,0.,1.)); +#34274 = ORIENTED_EDGE('',*,*,#34275,.F.); +#34275 = EDGE_CURVE('',#34252,#34268,#34276,.T.); +#34276 = LINE('',#34277,#34278); +#34277 = CARTESIAN_POINT('',(0.,0.,0.35)); +#34278 = VECTOR('',#34279,1.); +#34279 = DIRECTION('',(-0.,1.,0.)); +#34280 = PLANE('',#34281); +#34281 = AXIS2_PLACEMENT_3D('',#34282,#34283,#34284); +#34282 = CARTESIAN_POINT('',(0.,0.,0.)); +#34283 = DIRECTION('',(1.,0.,-0.)); +#34284 = DIRECTION('',(0.,0.,1.)); +#34285 = ADVANCED_FACE('',(#34286),#34343,.F.); +#34286 = FACE_BOUND('',#34287,.F.); +#34287 = EDGE_LOOP('',(#34288,#34298,#34304,#34305,#34313,#34321,#34329, + #34337)); +#34288 = ORIENTED_EDGE('',*,*,#34289,.F.); +#34289 = EDGE_CURVE('',#34290,#34292,#34294,.T.); +#34290 = VERTEX_POINT('',#34291); +#34291 = CARTESIAN_POINT('',(0.25,0.,0.)); +#34292 = VERTEX_POINT('',#34293); +#34293 = CARTESIAN_POINT('',(0.25,0.,3.5E-02)); +#34294 = LINE('',#34295,#34296); +#34295 = CARTESIAN_POINT('',(0.25,0.,0.)); +#34296 = VECTOR('',#34297,1.); +#34297 = DIRECTION('',(0.,0.,1.)); +#34298 = ORIENTED_EDGE('',*,*,#34299,.F.); +#34299 = EDGE_CURVE('',#34250,#34290,#34300,.T.); +#34300 = LINE('',#34301,#34302); +#34301 = CARTESIAN_POINT('',(0.,0.,0.)); +#34302 = VECTOR('',#34303,1.); +#34303 = DIRECTION('',(1.,0.,-0.)); +#34304 = ORIENTED_EDGE('',*,*,#34249,.T.); +#34305 = ORIENTED_EDGE('',*,*,#34306,.T.); +#34306 = EDGE_CURVE('',#34252,#34307,#34309,.T.); +#34307 = VERTEX_POINT('',#34308); +#34308 = CARTESIAN_POINT('',(0.25,0.,0.35)); +#34309 = LINE('',#34310,#34311); +#34310 = CARTESIAN_POINT('',(0.,0.,0.35)); +#34311 = VECTOR('',#34312,1.); +#34312 = DIRECTION('',(1.,0.,-0.)); +#34313 = ORIENTED_EDGE('',*,*,#34314,.F.); +#34314 = EDGE_CURVE('',#34315,#34307,#34317,.T.); +#34315 = VERTEX_POINT('',#34316); +#34316 = CARTESIAN_POINT('',(0.25,0.,0.315)); +#34317 = LINE('',#34318,#34319); +#34318 = CARTESIAN_POINT('',(0.25,0.,0.)); +#34319 = VECTOR('',#34320,1.); +#34320 = DIRECTION('',(0.,0.,1.)); +#34321 = ORIENTED_EDGE('',*,*,#34322,.F.); +#34322 = EDGE_CURVE('',#34323,#34315,#34325,.T.); +#34323 = VERTEX_POINT('',#34324); +#34324 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#34325 = LINE('',#34326,#34327); +#34326 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#34327 = VECTOR('',#34328,1.); +#34328 = DIRECTION('',(1.,0.,-0.)); +#34329 = ORIENTED_EDGE('',*,*,#34330,.F.); +#34330 = EDGE_CURVE('',#34331,#34323,#34333,.T.); +#34331 = VERTEX_POINT('',#34332); +#34332 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34333 = LINE('',#34334,#34335); +#34334 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34335 = VECTOR('',#34336,1.); +#34336 = DIRECTION('',(0.,0.,1.)); +#34337 = ORIENTED_EDGE('',*,*,#34338,.T.); +#34338 = EDGE_CURVE('',#34331,#34292,#34339,.T.); +#34339 = LINE('',#34340,#34341); +#34340 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34341 = VECTOR('',#34342,1.); +#34342 = DIRECTION('',(1.,0.,-0.)); +#34343 = PLANE('',#34344); +#34344 = AXIS2_PLACEMENT_3D('',#34345,#34346,#34347); +#34345 = CARTESIAN_POINT('',(0.,0.,0.)); +#34346 = DIRECTION('',(-0.,1.,0.)); +#34347 = DIRECTION('',(0.,0.,1.)); +#34348 = ADVANCED_FACE('',(#34349),#34367,.T.); +#34349 = FACE_BOUND('',#34350,.T.); +#34350 = EDGE_LOOP('',(#34351,#34352,#34353,#34361)); +#34351 = ORIENTED_EDGE('',*,*,#34275,.F.); +#34352 = ORIENTED_EDGE('',*,*,#34306,.T.); +#34353 = ORIENTED_EDGE('',*,*,#34354,.T.); +#34354 = EDGE_CURVE('',#34307,#34355,#34357,.T.); +#34355 = VERTEX_POINT('',#34356); +#34356 = CARTESIAN_POINT('',(0.25,0.5,0.35)); +#34357 = LINE('',#34358,#34359); +#34358 = CARTESIAN_POINT('',(0.25,0.,0.35)); +#34359 = VECTOR('',#34360,1.); +#34360 = DIRECTION('',(0.,1.,0.)); +#34361 = ORIENTED_EDGE('',*,*,#34362,.F.); +#34362 = EDGE_CURVE('',#34268,#34355,#34363,.T.); +#34363 = LINE('',#34364,#34365); +#34364 = CARTESIAN_POINT('',(0.,0.5,0.35)); +#34365 = VECTOR('',#34366,1.); +#34366 = DIRECTION('',(1.,0.,-0.)); +#34367 = PLANE('',#34368); +#34368 = AXIS2_PLACEMENT_3D('',#34369,#34370,#34371); +#34369 = CARTESIAN_POINT('',(0.,0.,0.35)); +#34370 = DIRECTION('',(0.,0.,1.)); +#34371 = DIRECTION('',(1.,0.,-0.)); +#34372 = ADVANCED_FACE('',(#34373),#34423,.T.); +#34373 = FACE_BOUND('',#34374,.T.); +#34374 = EDGE_LOOP('',(#34375,#34385,#34391,#34392,#34393,#34401,#34409, + #34417)); +#34375 = ORIENTED_EDGE('',*,*,#34376,.F.); +#34376 = EDGE_CURVE('',#34377,#34379,#34381,.T.); +#34377 = VERTEX_POINT('',#34378); +#34378 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#34379 = VERTEX_POINT('',#34380); +#34380 = CARTESIAN_POINT('',(0.25,0.5,3.5E-02)); +#34381 = LINE('',#34382,#34383); +#34382 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#34383 = VECTOR('',#34384,1.); +#34384 = DIRECTION('',(0.,0.,1.)); +#34385 = ORIENTED_EDGE('',*,*,#34386,.F.); +#34386 = EDGE_CURVE('',#34260,#34377,#34387,.T.); +#34387 = LINE('',#34388,#34389); +#34388 = CARTESIAN_POINT('',(0.,0.5,0.)); +#34389 = VECTOR('',#34390,1.); +#34390 = DIRECTION('',(1.,0.,-0.)); +#34391 = ORIENTED_EDGE('',*,*,#34267,.T.); +#34392 = ORIENTED_EDGE('',*,*,#34362,.T.); +#34393 = ORIENTED_EDGE('',*,*,#34394,.F.); +#34394 = EDGE_CURVE('',#34395,#34355,#34397,.T.); +#34395 = VERTEX_POINT('',#34396); +#34396 = CARTESIAN_POINT('',(0.25,0.5,0.315)); +#34397 = LINE('',#34398,#34399); +#34398 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#34399 = VECTOR('',#34400,1.); +#34400 = DIRECTION('',(0.,0.,1.)); +#34401 = ORIENTED_EDGE('',*,*,#34402,.F.); +#34402 = EDGE_CURVE('',#34403,#34395,#34405,.T.); +#34403 = VERTEX_POINT('',#34404); +#34404 = CARTESIAN_POINT('',(3.5E-02,0.5,0.315)); +#34405 = LINE('',#34406,#34407); +#34406 = CARTESIAN_POINT('',(3.5E-02,0.5,0.315)); +#34407 = VECTOR('',#34408,1.); +#34408 = DIRECTION('',(1.,0.,-0.)); +#34409 = ORIENTED_EDGE('',*,*,#34410,.F.); +#34410 = EDGE_CURVE('',#34411,#34403,#34413,.T.); +#34411 = VERTEX_POINT('',#34412); +#34412 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#34413 = LINE('',#34414,#34415); +#34414 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#34415 = VECTOR('',#34416,1.); +#34416 = DIRECTION('',(0.,0.,1.)); +#34417 = ORIENTED_EDGE('',*,*,#34418,.T.); +#34418 = EDGE_CURVE('',#34411,#34379,#34419,.T.); +#34419 = LINE('',#34420,#34421); +#34420 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#34421 = VECTOR('',#34422,1.); +#34422 = DIRECTION('',(1.,0.,-0.)); +#34423 = PLANE('',#34424); +#34424 = AXIS2_PLACEMENT_3D('',#34425,#34426,#34427); +#34425 = CARTESIAN_POINT('',(0.,0.5,0.)); +#34426 = DIRECTION('',(-0.,1.,0.)); +#34427 = DIRECTION('',(0.,0.,1.)); +#34428 = ADVANCED_FACE('',(#34429),#34440,.F.); +#34429 = FACE_BOUND('',#34430,.F.); +#34430 = EDGE_LOOP('',(#34431,#34432,#34433,#34439)); +#34431 = ORIENTED_EDGE('',*,*,#34259,.F.); +#34432 = ORIENTED_EDGE('',*,*,#34299,.T.); +#34433 = ORIENTED_EDGE('',*,*,#34434,.T.); +#34434 = EDGE_CURVE('',#34290,#34377,#34435,.T.); +#34435 = LINE('',#34436,#34437); +#34436 = CARTESIAN_POINT('',(0.25,0.,0.)); +#34437 = VECTOR('',#34438,1.); +#34438 = DIRECTION('',(-0.,1.,0.)); +#34439 = ORIENTED_EDGE('',*,*,#34386,.F.); +#34440 = PLANE('',#34441); +#34441 = AXIS2_PLACEMENT_3D('',#34442,#34443,#34444); +#34442 = CARTESIAN_POINT('',(0.,0.,0.)); +#34443 = DIRECTION('',(0.,0.,1.)); +#34444 = DIRECTION('',(1.,0.,-0.)); +#34445 = ADVANCED_FACE('',(#34446),#34457,.T.); +#34446 = FACE_BOUND('',#34447,.T.); +#34447 = EDGE_LOOP('',(#34448,#34449,#34450,#34451)); +#34448 = ORIENTED_EDGE('',*,*,#34289,.F.); +#34449 = ORIENTED_EDGE('',*,*,#34434,.T.); +#34450 = ORIENTED_EDGE('',*,*,#34376,.T.); +#34451 = ORIENTED_EDGE('',*,*,#34452,.T.); +#34452 = EDGE_CURVE('',#34379,#34292,#34453,.T.); +#34453 = LINE('',#34454,#34455); +#34454 = CARTESIAN_POINT('',(0.25,0.,3.5E-02)); +#34455 = VECTOR('',#34456,1.); +#34456 = DIRECTION('',(0.,-1.,0.)); +#34457 = PLANE('',#34458); +#34458 = AXIS2_PLACEMENT_3D('',#34459,#34460,#34461); +#34459 = CARTESIAN_POINT('',(0.25,0.,0.)); +#34460 = DIRECTION('',(1.,0.,-0.)); +#34461 = DIRECTION('',(0.,0.,1.)); +#34462 = ADVANCED_FACE('',(#34463),#34474,.T.); +#34463 = FACE_BOUND('',#34464,.T.); +#34464 = EDGE_LOOP('',(#34465,#34466,#34472,#34473)); +#34465 = ORIENTED_EDGE('',*,*,#34418,.F.); +#34466 = ORIENTED_EDGE('',*,*,#34467,.F.); +#34467 = EDGE_CURVE('',#34331,#34411,#34468,.T.); +#34468 = LINE('',#34469,#34470); +#34469 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34470 = VECTOR('',#34471,1.); +#34471 = DIRECTION('',(-0.,1.,0.)); +#34472 = ORIENTED_EDGE('',*,*,#34338,.T.); +#34473 = ORIENTED_EDGE('',*,*,#34452,.F.); +#34474 = PLANE('',#34475); +#34475 = AXIS2_PLACEMENT_3D('',#34476,#34477,#34478); +#34476 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34477 = DIRECTION('',(0.,0.,1.)); +#34478 = DIRECTION('',(1.,0.,-0.)); +#34479 = ADVANCED_FACE('',(#34480),#34491,.T.); +#34480 = FACE_BOUND('',#34481,.T.); +#34481 = EDGE_LOOP('',(#34482,#34483,#34484,#34485)); +#34482 = ORIENTED_EDGE('',*,*,#34330,.F.); +#34483 = ORIENTED_EDGE('',*,*,#34467,.T.); +#34484 = ORIENTED_EDGE('',*,*,#34410,.T.); +#34485 = ORIENTED_EDGE('',*,*,#34486,.F.); +#34486 = EDGE_CURVE('',#34323,#34403,#34487,.T.); +#34487 = LINE('',#34488,#34489); +#34488 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#34489 = VECTOR('',#34490,1.); +#34490 = DIRECTION('',(-0.,1.,0.)); +#34491 = PLANE('',#34492); +#34492 = AXIS2_PLACEMENT_3D('',#34493,#34494,#34495); +#34493 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#34494 = DIRECTION('',(1.,0.,-0.)); +#34495 = DIRECTION('',(0.,0.,1.)); +#34496 = ADVANCED_FACE('',(#34497),#34508,.F.); +#34497 = FACE_BOUND('',#34498,.F.); +#34498 = EDGE_LOOP('',(#34499,#34500,#34501,#34502)); +#34499 = ORIENTED_EDGE('',*,*,#34402,.F.); +#34500 = ORIENTED_EDGE('',*,*,#34486,.F.); +#34501 = ORIENTED_EDGE('',*,*,#34322,.T.); +#34502 = ORIENTED_EDGE('',*,*,#34503,.F.); +#34503 = EDGE_CURVE('',#34395,#34315,#34504,.T.); +#34504 = LINE('',#34505,#34506); +#34505 = CARTESIAN_POINT('',(0.25,0.,0.315)); +#34506 = VECTOR('',#34507,1.); +#34507 = DIRECTION('',(0.,-1.,0.)); +#34508 = PLANE('',#34509); +#34509 = AXIS2_PLACEMENT_3D('',#34510,#34511,#34512); +#34510 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#34511 = DIRECTION('',(0.,0.,1.)); +#34512 = DIRECTION('',(1.,0.,-0.)); +#34513 = ADVANCED_FACE('',(#34514),#34520,.T.); +#34514 = FACE_BOUND('',#34515,.T.); +#34515 = EDGE_LOOP('',(#34516,#34517,#34518,#34519)); +#34516 = ORIENTED_EDGE('',*,*,#34314,.F.); +#34517 = ORIENTED_EDGE('',*,*,#34503,.F.); +#34518 = ORIENTED_EDGE('',*,*,#34394,.T.); +#34519 = ORIENTED_EDGE('',*,*,#34354,.F.); +#34520 = PLANE('',#34521); +#34521 = AXIS2_PLACEMENT_3D('',#34522,#34523,#34524); +#34522 = CARTESIAN_POINT('',(0.25,0.,0.)); +#34523 = DIRECTION('',(1.,0.,-0.)); +#34524 = DIRECTION('',(0.,0.,1.)); +#34525 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34529)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34526,#34527,#34528)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34526 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34527 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34528 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34529 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34526, + 'distance_accuracy_value','confusion accuracy'); +#34530 = SHAPE_DEFINITION_REPRESENTATION(#34531,#34242); +#34531 = PRODUCT_DEFINITION_SHAPE('','',#34532); +#34532 = PRODUCT_DEFINITION('design','',#34533,#34536); +#34533 = PRODUCT_DEFINITION_FORMATION('','',#34534); +#34534 = PRODUCT('Open CASCADE STEP translator 6.8 20.2.1', + 'Open CASCADE STEP translator 6.8 20.2.1','',(#34535)); +#34535 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34536 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34537 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34538,#34540); +#34538 = ( REPRESENTATION_RELATIONSHIP('','',#34242,#34232) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34539) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34539 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34233); +#34540 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34541); +#34541 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('29','97','',#34227,#34532,$); +#34542 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34534)); +#34543 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34544,#34546); +#34544 = ( REPRESENTATION_RELATIONSHIP('','',#34232,#34034) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34545) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34545 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34039); +#34546 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34547); +#34547 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('30','98','',#34029,#34227,$); +#34548 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34229)); +#34549 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34550,#34552); +#34550 = ( REPRESENTATION_RELATIONSHIP('','',#34232,#34034) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34551) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34551 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34043); +#34552 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34553); +#34553 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('31','99','',#34029,#34227,$); +#34554 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#34555),#34705); +#34555 = MANIFOLD_SOLID_BREP('',#34556); +#34556 = CLOSED_SHELL('',(#34557,#34597,#34637,#34659,#34681,#34693)); +#34557 = ADVANCED_FACE('',(#34558),#34592,.F.); +#34558 = FACE_BOUND('',#34559,.F.); +#34559 = EDGE_LOOP('',(#34560,#34570,#34578,#34586)); +#34560 = ORIENTED_EDGE('',*,*,#34561,.F.); +#34561 = EDGE_CURVE('',#34562,#34564,#34566,.T.); +#34562 = VERTEX_POINT('',#34563); +#34563 = CARTESIAN_POINT('',(0.,0.,0.)); +#34564 = VERTEX_POINT('',#34565); +#34565 = CARTESIAN_POINT('',(0.,0.,3.5E-02)); +#34566 = LINE('',#34567,#34568); +#34567 = CARTESIAN_POINT('',(0.,0.,0.)); +#34568 = VECTOR('',#34569,1.); +#34569 = DIRECTION('',(0.,0.,1.)); +#34570 = ORIENTED_EDGE('',*,*,#34571,.T.); +#34571 = EDGE_CURVE('',#34562,#34572,#34574,.T.); +#34572 = VERTEX_POINT('',#34573); +#34573 = CARTESIAN_POINT('',(0.,0.5,0.)); +#34574 = LINE('',#34575,#34576); +#34575 = CARTESIAN_POINT('',(0.,0.,0.)); +#34576 = VECTOR('',#34577,1.); +#34577 = DIRECTION('',(-0.,1.,0.)); +#34578 = ORIENTED_EDGE('',*,*,#34579,.T.); +#34579 = EDGE_CURVE('',#34572,#34580,#34582,.T.); +#34580 = VERTEX_POINT('',#34581); +#34581 = CARTESIAN_POINT('',(0.,0.5,3.5E-02)); +#34582 = LINE('',#34583,#34584); +#34583 = CARTESIAN_POINT('',(0.,0.5,0.)); +#34584 = VECTOR('',#34585,1.); +#34585 = DIRECTION('',(0.,0.,1.)); +#34586 = ORIENTED_EDGE('',*,*,#34587,.F.); +#34587 = EDGE_CURVE('',#34564,#34580,#34588,.T.); +#34588 = LINE('',#34589,#34590); +#34589 = CARTESIAN_POINT('',(0.,0.,3.5E-02)); +#34590 = VECTOR('',#34591,1.); +#34591 = DIRECTION('',(-0.,1.,0.)); +#34592 = PLANE('',#34593); +#34593 = AXIS2_PLACEMENT_3D('',#34594,#34595,#34596); +#34594 = CARTESIAN_POINT('',(0.,0.,0.)); +#34595 = DIRECTION('',(1.,0.,-0.)); +#34596 = DIRECTION('',(0.,0.,1.)); +#34597 = ADVANCED_FACE('',(#34598),#34632,.T.); +#34598 = FACE_BOUND('',#34599,.T.); +#34599 = EDGE_LOOP('',(#34600,#34610,#34618,#34626)); +#34600 = ORIENTED_EDGE('',*,*,#34601,.F.); +#34601 = EDGE_CURVE('',#34602,#34604,#34606,.T.); +#34602 = VERTEX_POINT('',#34603); +#34603 = CARTESIAN_POINT('',(0.5,0.,0.)); +#34604 = VERTEX_POINT('',#34605); +#34605 = CARTESIAN_POINT('',(0.5,0.,3.5E-02)); +#34606 = LINE('',#34607,#34608); +#34607 = CARTESIAN_POINT('',(0.5,0.,0.)); +#34608 = VECTOR('',#34609,1.); +#34609 = DIRECTION('',(0.,0.,1.)); +#34610 = ORIENTED_EDGE('',*,*,#34611,.T.); +#34611 = EDGE_CURVE('',#34602,#34612,#34614,.T.); +#34612 = VERTEX_POINT('',#34613); +#34613 = CARTESIAN_POINT('',(0.5,0.5,0.)); +#34614 = LINE('',#34615,#34616); +#34615 = CARTESIAN_POINT('',(0.5,0.,0.)); +#34616 = VECTOR('',#34617,1.); +#34617 = DIRECTION('',(-0.,1.,0.)); +#34618 = ORIENTED_EDGE('',*,*,#34619,.T.); +#34619 = EDGE_CURVE('',#34612,#34620,#34622,.T.); +#34620 = VERTEX_POINT('',#34621); +#34621 = CARTESIAN_POINT('',(0.5,0.5,3.5E-02)); +#34622 = LINE('',#34623,#34624); +#34623 = CARTESIAN_POINT('',(0.5,0.5,0.)); +#34624 = VECTOR('',#34625,1.); +#34625 = DIRECTION('',(0.,0.,1.)); +#34626 = ORIENTED_EDGE('',*,*,#34627,.F.); +#34627 = EDGE_CURVE('',#34604,#34620,#34628,.T.); +#34628 = LINE('',#34629,#34630); +#34629 = CARTESIAN_POINT('',(0.5,0.,3.5E-02)); +#34630 = VECTOR('',#34631,1.); +#34631 = DIRECTION('',(0.,1.,0.)); +#34632 = PLANE('',#34633); +#34633 = AXIS2_PLACEMENT_3D('',#34634,#34635,#34636); +#34634 = CARTESIAN_POINT('',(0.5,0.,0.)); +#34635 = DIRECTION('',(1.,0.,-0.)); +#34636 = DIRECTION('',(0.,0.,1.)); +#34637 = ADVANCED_FACE('',(#34638),#34654,.F.); +#34638 = FACE_BOUND('',#34639,.F.); +#34639 = EDGE_LOOP('',(#34640,#34646,#34647,#34653)); +#34640 = ORIENTED_EDGE('',*,*,#34641,.F.); +#34641 = EDGE_CURVE('',#34562,#34602,#34642,.T.); +#34642 = LINE('',#34643,#34644); +#34643 = CARTESIAN_POINT('',(0.,0.,0.)); +#34644 = VECTOR('',#34645,1.); +#34645 = DIRECTION('',(1.,0.,-0.)); +#34646 = ORIENTED_EDGE('',*,*,#34561,.T.); +#34647 = ORIENTED_EDGE('',*,*,#34648,.T.); +#34648 = EDGE_CURVE('',#34564,#34604,#34649,.T.); +#34649 = LINE('',#34650,#34651); +#34650 = CARTESIAN_POINT('',(0.,0.,3.5E-02)); +#34651 = VECTOR('',#34652,1.); +#34652 = DIRECTION('',(1.,0.,-0.)); +#34653 = ORIENTED_EDGE('',*,*,#34601,.F.); +#34654 = PLANE('',#34655); +#34655 = AXIS2_PLACEMENT_3D('',#34656,#34657,#34658); +#34656 = CARTESIAN_POINT('',(0.,0.,0.)); +#34657 = DIRECTION('',(-0.,1.,0.)); +#34658 = DIRECTION('',(0.,0.,1.)); +#34659 = ADVANCED_FACE('',(#34660),#34676,.T.); +#34660 = FACE_BOUND('',#34661,.T.); +#34661 = EDGE_LOOP('',(#34662,#34668,#34669,#34675)); +#34662 = ORIENTED_EDGE('',*,*,#34663,.F.); +#34663 = EDGE_CURVE('',#34572,#34612,#34664,.T.); +#34664 = LINE('',#34665,#34666); +#34665 = CARTESIAN_POINT('',(0.,0.5,0.)); +#34666 = VECTOR('',#34667,1.); +#34667 = DIRECTION('',(1.,0.,-0.)); +#34668 = ORIENTED_EDGE('',*,*,#34579,.T.); +#34669 = ORIENTED_EDGE('',*,*,#34670,.T.); +#34670 = EDGE_CURVE('',#34580,#34620,#34671,.T.); +#34671 = LINE('',#34672,#34673); +#34672 = CARTESIAN_POINT('',(0.,0.5,3.5E-02)); +#34673 = VECTOR('',#34674,1.); +#34674 = DIRECTION('',(1.,0.,-0.)); +#34675 = ORIENTED_EDGE('',*,*,#34619,.F.); +#34676 = PLANE('',#34677); +#34677 = AXIS2_PLACEMENT_3D('',#34678,#34679,#34680); +#34678 = CARTESIAN_POINT('',(0.,0.5,0.)); +#34679 = DIRECTION('',(-0.,1.,0.)); +#34680 = DIRECTION('',(0.,0.,1.)); +#34681 = ADVANCED_FACE('',(#34682),#34688,.F.); +#34682 = FACE_BOUND('',#34683,.F.); +#34683 = EDGE_LOOP('',(#34684,#34685,#34686,#34687)); +#34684 = ORIENTED_EDGE('',*,*,#34571,.F.); +#34685 = ORIENTED_EDGE('',*,*,#34641,.T.); +#34686 = ORIENTED_EDGE('',*,*,#34611,.T.); +#34687 = ORIENTED_EDGE('',*,*,#34663,.F.); +#34688 = PLANE('',#34689); +#34689 = AXIS2_PLACEMENT_3D('',#34690,#34691,#34692); +#34690 = CARTESIAN_POINT('',(0.,0.,0.)); +#34691 = DIRECTION('',(0.,0.,1.)); +#34692 = DIRECTION('',(1.,0.,-0.)); +#34693 = ADVANCED_FACE('',(#34694),#34700,.T.); +#34694 = FACE_BOUND('',#34695,.T.); +#34695 = EDGE_LOOP('',(#34696,#34697,#34698,#34699)); +#34696 = ORIENTED_EDGE('',*,*,#34587,.F.); +#34697 = ORIENTED_EDGE('',*,*,#34648,.T.); +#34698 = ORIENTED_EDGE('',*,*,#34627,.T.); +#34699 = ORIENTED_EDGE('',*,*,#34670,.F.); +#34700 = PLANE('',#34701); +#34701 = AXIS2_PLACEMENT_3D('',#34702,#34703,#34704); +#34702 = CARTESIAN_POINT('',(0.,0.,3.5E-02)); +#34703 = DIRECTION('',(0.,0.,1.)); +#34704 = DIRECTION('',(1.,0.,-0.)); +#34705 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34709)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34706,#34707,#34708)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34706 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34707 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34708 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34709 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34706, + 'distance_accuracy_value','confusion accuracy'); +#34710 = SHAPE_DEFINITION_REPRESENTATION(#34711,#34554); +#34711 = PRODUCT_DEFINITION_SHAPE('','',#34712); +#34712 = PRODUCT_DEFINITION('design','',#34713,#34716); +#34713 = PRODUCT_DEFINITION_FORMATION('','',#34714); +#34714 = PRODUCT('Mark','Mark','',(#34715)); +#34715 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34716 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34717 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34718,#34720); +#34718 = ( REPRESENTATION_RELATIONSHIP('','',#34554,#34034) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34719) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34719 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34047); +#34720 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34721); +#34721 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('32','100','',#34029,#34712,$); +#34722 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34714)); +#34723 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34724,#34726); +#34724 = ( REPRESENTATION_RELATIONSHIP('','',#34034,#34017) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34725) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34725 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34018); +#34726 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34727); +#34727 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('33','','',#34012,#34029,$); +#34728 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34031)); +#34729 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34730,#34732); +#34730 = ( REPRESENTATION_RELATIONSHIP('','',#34017,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34731) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34731 = ITEM_DEFINED_TRANSFORMATION('','',#11,#51); +#34732 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34733); +#34733 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('34','','',#5,#34012,$); +#34734 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34014)); +#34735 = SHAPE_DEFINITION_REPRESENTATION(#34736,#34742); +#34736 = PRODUCT_DEFINITION_SHAPE('','',#34737); +#34737 = PRODUCT_DEFINITION('design','',#34738,#34741); +#34738 = PRODUCT_DEFINITION_FORMATION('','',#34739); +#34739 = PRODUCT('R8','R8','',(#34740)); +#34740 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34741 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34742 = SHAPE_REPRESENTATION('',(#11,#34743),#34747); +#34743 = AXIS2_PLACEMENT_3D('',#34744,#34745,#34746); +#34744 = CARTESIAN_POINT('',(297.6372680664,176.97389221191,0.)); +#34745 = DIRECTION('',(0.,0.,1.)); +#34746 = DIRECTION('',(1.,0.,0.)); +#34747 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34751)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34748,#34749,#34750)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34748 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34749 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34750 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34751 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34748, + 'distance_accuracy_value','confusion accuracy'); +#34752 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34753,#34755); +#34753 = ( REPRESENTATION_RELATIONSHIP('','',#34034,#34742) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34754) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34754 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34743); +#34755 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34756); +#34756 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('35','','',#34737,#34029,$); +#34757 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34758,#34760); +#34758 = ( REPRESENTATION_RELATIONSHIP('','',#34742,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34759) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34759 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55); +#34760 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34761); +#34761 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('36','','',#5,#34737,$); +#34762 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34739)); +#34763 = SHAPE_DEFINITION_REPRESENTATION(#34764,#34770); +#34764 = PRODUCT_DEFINITION_SHAPE('','',#34765); +#34765 = PRODUCT_DEFINITION('design','',#34766,#34769); +#34766 = PRODUCT_DEFINITION_FORMATION('','',#34767); +#34767 = PRODUCT('R7','R7','',(#34768)); +#34768 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34769 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34770 = SHAPE_REPRESENTATION('',(#11,#34771),#34775); +#34771 = AXIS2_PLACEMENT_3D('',#34772,#34773,#34774); +#34772 = CARTESIAN_POINT('',(295.80847167968,177.58349609375,0.)); +#34773 = DIRECTION('',(0.,0.,1.)); +#34774 = DIRECTION('',(1.,0.,0.)); +#34775 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34779)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34776,#34777,#34778)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34776 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34777 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34778 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34779 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34776, + 'distance_accuracy_value','confusion accuracy'); +#34780 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34781,#34783); +#34781 = ( REPRESENTATION_RELATIONSHIP('','',#34034,#34770) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34782) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34782 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34771); +#34783 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34784); +#34784 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('37','','',#34765,#34029,$); +#34785 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34786,#34788); +#34786 = ( REPRESENTATION_RELATIONSHIP('','',#34770,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34787) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34787 = ITEM_DEFINED_TRANSFORMATION('','',#11,#59); +#34788 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34789); +#34789 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('38','','',#5,#34765,$); +#34790 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34767)); +#34791 = SHAPE_DEFINITION_REPRESENTATION(#34792,#34798); +#34792 = PRODUCT_DEFINITION_SHAPE('','',#34793); +#34793 = PRODUCT_DEFINITION('design','',#34794,#34797); +#34794 = PRODUCT_DEFINITION_FORMATION('','',#34795); +#34795 = PRODUCT('R6','R6','',(#34796)); +#34796 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34797 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34798 = SHAPE_REPRESENTATION('',(#11,#34799),#34803); +#34799 = AXIS2_PLACEMENT_3D('',#34800,#34801,#34802); +#34800 = CARTESIAN_POINT('',(297.6372680664,178.19308471679,0.)); +#34801 = DIRECTION('',(0.,0.,1.)); +#34802 = DIRECTION('',(1.,0.,0.)); +#34803 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34807)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34804,#34805,#34806)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34804 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34805 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34806 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34807 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34804, + 'distance_accuracy_value','confusion accuracy'); +#34808 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34809,#34811); +#34809 = ( REPRESENTATION_RELATIONSHIP('','',#34034,#34798) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34810) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34810 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34799); +#34811 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34812); +#34812 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('39','','',#34793,#34029,$); +#34813 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34814,#34816); +#34814 = ( REPRESENTATION_RELATIONSHIP('','',#34798,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34815) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34815 = ITEM_DEFINED_TRANSFORMATION('','',#11,#63); +#34816 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34817); +#34817 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('40','','',#5,#34793,$); +#34818 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34795)); +#34819 = SHAPE_DEFINITION_REPRESENTATION(#34820,#34826); +#34820 = PRODUCT_DEFINITION_SHAPE('','',#34821); +#34821 = PRODUCT_DEFINITION('design','',#34822,#34825); +#34822 = PRODUCT_DEFINITION_FORMATION('','',#34823); +#34823 = PRODUCT('R5','R5','',(#34824)); +#34824 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34825 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34826 = SHAPE_REPRESENTATION('',(#11,#34827),#34831); +#34827 = AXIS2_PLACEMENT_3D('',#34828,#34829,#34830); +#34828 = CARTESIAN_POINT('',(295.80847167968,178.80268859863,0.)); +#34829 = DIRECTION('',(0.,0.,1.)); +#34830 = DIRECTION('',(1.,0.,0.)); +#34831 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34835)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34832,#34833,#34834)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34832 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34833 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34834 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34835 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34832, + 'distance_accuracy_value','confusion accuracy'); +#34836 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34837,#34839); +#34837 = ( REPRESENTATION_RELATIONSHIP('','',#34034,#34826) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34838) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34838 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34827); +#34839 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34840); +#34840 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('41','','',#34821,#34029,$); +#34841 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34842,#34844); +#34842 = ( REPRESENTATION_RELATIONSHIP('','',#34826,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34843) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34843 = ITEM_DEFINED_TRANSFORMATION('','',#11,#67); +#34844 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34845); +#34845 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('42','','',#5,#34821,$); +#34846 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34823)); +#34847 = SHAPE_DEFINITION_REPRESENTATION(#34848,#34854); +#34848 = PRODUCT_DEFINITION_SHAPE('','',#34849); +#34849 = PRODUCT_DEFINITION('design','',#34850,#34853); +#34850 = PRODUCT_DEFINITION_FORMATION('','',#34851); +#34851 = PRODUCT('R4','R4','',(#34852)); +#34852 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34853 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34854 = SHAPE_REPRESENTATION('',(#11,#34855),#34859); +#34855 = AXIS2_PLACEMENT_3D('',#34856,#34857,#34858); +#34856 = CARTESIAN_POINT('',(297.6372680664,179.41229248046,0.)); +#34857 = DIRECTION('',(0.,0.,1.)); +#34858 = DIRECTION('',(1.,0.,0.)); +#34859 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34863)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34860,#34861,#34862)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34860 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34861 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34862 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34863 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34860, + 'distance_accuracy_value','confusion accuracy'); +#34864 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34865,#34867); +#34865 = ( REPRESENTATION_RELATIONSHIP('','',#34034,#34854) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34866) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34866 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34855); +#34867 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34868); +#34868 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('43','','',#34849,#34029,$); +#34869 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34870,#34872); +#34870 = ( REPRESENTATION_RELATIONSHIP('','',#34854,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34871) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34871 = ITEM_DEFINED_TRANSFORMATION('','',#11,#71); +#34872 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34873); +#34873 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('44','','',#5,#34849,$); +#34874 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34851)); +#34875 = SHAPE_DEFINITION_REPRESENTATION(#34876,#34882); +#34876 = PRODUCT_DEFINITION_SHAPE('','',#34877); +#34877 = PRODUCT_DEFINITION('design','',#34878,#34881); +#34878 = PRODUCT_DEFINITION_FORMATION('','',#34879); +#34879 = PRODUCT('R3','R3','',(#34880)); +#34880 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34881 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34882 = SHAPE_REPRESENTATION('',(#11,#34883),#34887); +#34883 = AXIS2_PLACEMENT_3D('',#34884,#34885,#34886); +#34884 = CARTESIAN_POINT('',(295.80847167968,180.0218963623,0.)); +#34885 = DIRECTION('',(0.,0.,1.)); +#34886 = DIRECTION('',(1.,0.,0.)); +#34887 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34891)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34888,#34889,#34890)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34888 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34889 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34890 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34891 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34888, + 'distance_accuracy_value','confusion accuracy'); +#34892 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34893,#34895); +#34893 = ( REPRESENTATION_RELATIONSHIP('','',#34034,#34882) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34894) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34894 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34883); +#34895 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34896); +#34896 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('45','','',#34877,#34029,$); +#34897 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#34898,#34900); +#34898 = ( REPRESENTATION_RELATIONSHIP('','',#34882,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#34899) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#34899 = ITEM_DEFINED_TRANSFORMATION('','',#11,#75); +#34900 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #34901); +#34901 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('46','','',#5,#34877,$); +#34902 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34879)); +#34903 = SHAPE_DEFINITION_REPRESENTATION(#34904,#34910); +#34904 = PRODUCT_DEFINITION_SHAPE('','',#34905); +#34905 = PRODUCT_DEFINITION('design','',#34906,#34909); +#34906 = PRODUCT_DEFINITION_FORMATION('','',#34907); +#34907 = PRODUCT('R2','R2','',(#34908)); +#34908 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34909 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34910 = SHAPE_REPRESENTATION('',(#11,#34911),#34915); +#34911 = AXIS2_PLACEMENT_3D('',#34912,#34913,#34914); +#34912 = CARTESIAN_POINT('',(300.30093383789,168.14013671875,0.)); +#34913 = DIRECTION('',(0.,0.,1.)); +#34914 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#34915 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34919)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34916,#34917,#34918)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34916 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34917 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34918 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34919 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34916, + 'distance_accuracy_value','confusion accuracy'); +#34920 = SHAPE_DEFINITION_REPRESENTATION(#34921,#34927); +#34921 = PRODUCT_DEFINITION_SHAPE('','',#34922); +#34922 = PRODUCT_DEFINITION('design','',#34923,#34926); +#34923 = PRODUCT_DEFINITION_FORMATION('','',#34924); +#34924 = PRODUCT('6608421408','6608421408','',(#34925)); +#34925 = PRODUCT_CONTEXT('',#2,'mechanical'); +#34926 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#34927 = SHAPE_REPRESENTATION('',(#11,#34928,#34932,#34936,#34940), + #34944); +#34928 = AXIS2_PLACEMENT_3D('',#34929,#34930,#34931); +#34929 = CARTESIAN_POINT('',(-0.8,-0.4,0.)); +#34930 = DIRECTION('',(0.,0.,1.)); +#34931 = DIRECTION('',(1.,0.,0.)); +#34932 = AXIS2_PLACEMENT_3D('',#34933,#34934,#34935); +#34933 = CARTESIAN_POINT('',(-0.8,-0.4,0.)); +#34934 = DIRECTION('',(0.,0.,1.)); +#34935 = DIRECTION('',(1.,0.,0.)); +#34936 = AXIS2_PLACEMENT_3D('',#34937,#34938,#34939); +#34937 = CARTESIAN_POINT('',(0.8,0.4,0.)); +#34938 = DIRECTION('',(0.,0.,1.)); +#34939 = DIRECTION('',(-1.,1.224646799147E-16,0.)); +#34940 = AXIS2_PLACEMENT_3D('',#34941,#34942,#34943); +#34941 = CARTESIAN_POINT('',(-0.5,-0.4,0.405)); +#34942 = DIRECTION('',(0.,0.,1.)); +#34943 = DIRECTION('',(1.,0.,0.)); +#34944 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#34948)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#34945,#34946,#34947)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#34945 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#34946 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#34947 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#34948 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#34945, + 'distance_accuracy_value','confusion accuracy'); +#34949 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#34950),#35100); +#34950 = MANIFOLD_SOLID_BREP('',#34951); +#34951 = CLOSED_SHELL('',(#34952,#34992,#35032,#35054,#35076,#35088)); +#34952 = ADVANCED_FACE('',(#34953),#34987,.F.); +#34953 = FACE_BOUND('',#34954,.F.); +#34954 = EDGE_LOOP('',(#34955,#34965,#34973,#34981)); +#34955 = ORIENTED_EDGE('',*,*,#34956,.F.); +#34956 = EDGE_CURVE('',#34957,#34959,#34961,.T.); +#34957 = VERTEX_POINT('',#34958); +#34958 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#34959 = VERTEX_POINT('',#34960); +#34960 = CARTESIAN_POINT('',(4.5E-02,0.,0.405)); +#34961 = LINE('',#34962,#34963); +#34962 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#34963 = VECTOR('',#34964,1.); +#34964 = DIRECTION('',(0.,0.,1.)); +#34965 = ORIENTED_EDGE('',*,*,#34966,.T.); +#34966 = EDGE_CURVE('',#34957,#34967,#34969,.T.); +#34967 = VERTEX_POINT('',#34968); +#34968 = CARTESIAN_POINT('',(4.5E-02,0.8,4.5E-02)); +#34969 = LINE('',#34970,#34971); +#34970 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#34971 = VECTOR('',#34972,1.); +#34972 = DIRECTION('',(-0.,1.,0.)); +#34973 = ORIENTED_EDGE('',*,*,#34974,.T.); +#34974 = EDGE_CURVE('',#34967,#34975,#34977,.T.); +#34975 = VERTEX_POINT('',#34976); +#34976 = CARTESIAN_POINT('',(4.5E-02,0.8,0.405)); +#34977 = LINE('',#34978,#34979); +#34978 = CARTESIAN_POINT('',(4.5E-02,0.8,4.5E-02)); +#34979 = VECTOR('',#34980,1.); +#34980 = DIRECTION('',(0.,0.,1.)); +#34981 = ORIENTED_EDGE('',*,*,#34982,.F.); +#34982 = EDGE_CURVE('',#34959,#34975,#34983,.T.); +#34983 = LINE('',#34984,#34985); +#34984 = CARTESIAN_POINT('',(4.5E-02,0.,0.405)); +#34985 = VECTOR('',#34986,1.); +#34986 = DIRECTION('',(-0.,1.,0.)); +#34987 = PLANE('',#34988); +#34988 = AXIS2_PLACEMENT_3D('',#34989,#34990,#34991); +#34989 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#34990 = DIRECTION('',(1.,0.,-0.)); +#34991 = DIRECTION('',(0.,0.,1.)); +#34992 = ADVANCED_FACE('',(#34993),#35027,.T.); +#34993 = FACE_BOUND('',#34994,.T.); +#34994 = EDGE_LOOP('',(#34995,#35005,#35013,#35021)); +#34995 = ORIENTED_EDGE('',*,*,#34996,.F.); +#34996 = EDGE_CURVE('',#34997,#34999,#35001,.T.); +#34997 = VERTEX_POINT('',#34998); +#34998 = CARTESIAN_POINT('',(1.555,0.,4.5E-02)); +#34999 = VERTEX_POINT('',#35000); +#35000 = CARTESIAN_POINT('',(1.555,0.,0.405)); +#35001 = LINE('',#35002,#35003); +#35002 = CARTESIAN_POINT('',(1.555,0.,4.5E-02)); +#35003 = VECTOR('',#35004,1.); +#35004 = DIRECTION('',(0.,0.,1.)); +#35005 = ORIENTED_EDGE('',*,*,#35006,.T.); +#35006 = EDGE_CURVE('',#34997,#35007,#35009,.T.); +#35007 = VERTEX_POINT('',#35008); +#35008 = CARTESIAN_POINT('',(1.555,0.8,4.5E-02)); +#35009 = LINE('',#35010,#35011); +#35010 = CARTESIAN_POINT('',(1.555,0.,4.5E-02)); +#35011 = VECTOR('',#35012,1.); +#35012 = DIRECTION('',(-0.,1.,0.)); +#35013 = ORIENTED_EDGE('',*,*,#35014,.T.); +#35014 = EDGE_CURVE('',#35007,#35015,#35017,.T.); +#35015 = VERTEX_POINT('',#35016); +#35016 = CARTESIAN_POINT('',(1.555,0.8,0.405)); +#35017 = LINE('',#35018,#35019); +#35018 = CARTESIAN_POINT('',(1.555,0.8,4.5E-02)); +#35019 = VECTOR('',#35020,1.); +#35020 = DIRECTION('',(0.,0.,1.)); +#35021 = ORIENTED_EDGE('',*,*,#35022,.F.); +#35022 = EDGE_CURVE('',#34999,#35015,#35023,.T.); +#35023 = LINE('',#35024,#35025); +#35024 = CARTESIAN_POINT('',(1.555,0.,0.405)); +#35025 = VECTOR('',#35026,1.); +#35026 = DIRECTION('',(0.,1.,0.)); +#35027 = PLANE('',#35028); +#35028 = AXIS2_PLACEMENT_3D('',#35029,#35030,#35031); +#35029 = CARTESIAN_POINT('',(1.555,0.,4.5E-02)); +#35030 = DIRECTION('',(1.,0.,-0.)); +#35031 = DIRECTION('',(0.,0.,1.)); +#35032 = ADVANCED_FACE('',(#35033),#35049,.F.); +#35033 = FACE_BOUND('',#35034,.F.); +#35034 = EDGE_LOOP('',(#35035,#35041,#35042,#35048)); +#35035 = ORIENTED_EDGE('',*,*,#35036,.F.); +#35036 = EDGE_CURVE('',#34957,#34997,#35037,.T.); +#35037 = LINE('',#35038,#35039); +#35038 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#35039 = VECTOR('',#35040,1.); +#35040 = DIRECTION('',(1.,0.,-0.)); +#35041 = ORIENTED_EDGE('',*,*,#34956,.T.); +#35042 = ORIENTED_EDGE('',*,*,#35043,.T.); +#35043 = EDGE_CURVE('',#34959,#34999,#35044,.T.); +#35044 = LINE('',#35045,#35046); +#35045 = CARTESIAN_POINT('',(4.5E-02,0.,0.405)); +#35046 = VECTOR('',#35047,1.); +#35047 = DIRECTION('',(1.,0.,-0.)); +#35048 = ORIENTED_EDGE('',*,*,#34996,.F.); +#35049 = PLANE('',#35050); +#35050 = AXIS2_PLACEMENT_3D('',#35051,#35052,#35053); +#35051 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#35052 = DIRECTION('',(-0.,1.,0.)); +#35053 = DIRECTION('',(0.,0.,1.)); +#35054 = ADVANCED_FACE('',(#35055),#35071,.T.); +#35055 = FACE_BOUND('',#35056,.T.); +#35056 = EDGE_LOOP('',(#35057,#35063,#35064,#35070)); +#35057 = ORIENTED_EDGE('',*,*,#35058,.F.); +#35058 = EDGE_CURVE('',#34967,#35007,#35059,.T.); +#35059 = LINE('',#35060,#35061); +#35060 = CARTESIAN_POINT('',(4.5E-02,0.8,4.5E-02)); +#35061 = VECTOR('',#35062,1.); +#35062 = DIRECTION('',(1.,0.,-0.)); +#35063 = ORIENTED_EDGE('',*,*,#34974,.T.); +#35064 = ORIENTED_EDGE('',*,*,#35065,.T.); +#35065 = EDGE_CURVE('',#34975,#35015,#35066,.T.); +#35066 = LINE('',#35067,#35068); +#35067 = CARTESIAN_POINT('',(4.5E-02,0.8,0.405)); +#35068 = VECTOR('',#35069,1.); +#35069 = DIRECTION('',(1.,0.,-0.)); +#35070 = ORIENTED_EDGE('',*,*,#35014,.F.); +#35071 = PLANE('',#35072); +#35072 = AXIS2_PLACEMENT_3D('',#35073,#35074,#35075); +#35073 = CARTESIAN_POINT('',(4.5E-02,0.8,4.5E-02)); +#35074 = DIRECTION('',(-0.,1.,0.)); +#35075 = DIRECTION('',(0.,0.,1.)); +#35076 = ADVANCED_FACE('',(#35077),#35083,.F.); +#35077 = FACE_BOUND('',#35078,.F.); +#35078 = EDGE_LOOP('',(#35079,#35080,#35081,#35082)); +#35079 = ORIENTED_EDGE('',*,*,#34966,.F.); +#35080 = ORIENTED_EDGE('',*,*,#35036,.T.); +#35081 = ORIENTED_EDGE('',*,*,#35006,.T.); +#35082 = ORIENTED_EDGE('',*,*,#35058,.F.); +#35083 = PLANE('',#35084); +#35084 = AXIS2_PLACEMENT_3D('',#35085,#35086,#35087); +#35085 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#35086 = DIRECTION('',(0.,0.,1.)); +#35087 = DIRECTION('',(1.,0.,-0.)); +#35088 = ADVANCED_FACE('',(#35089),#35095,.T.); +#35089 = FACE_BOUND('',#35090,.T.); +#35090 = EDGE_LOOP('',(#35091,#35092,#35093,#35094)); +#35091 = ORIENTED_EDGE('',*,*,#34982,.F.); +#35092 = ORIENTED_EDGE('',*,*,#35043,.T.); +#35093 = ORIENTED_EDGE('',*,*,#35022,.T.); +#35094 = ORIENTED_EDGE('',*,*,#35065,.F.); +#35095 = PLANE('',#35096); +#35096 = AXIS2_PLACEMENT_3D('',#35097,#35098,#35099); +#35097 = CARTESIAN_POINT('',(4.5E-02,0.,0.405)); +#35098 = DIRECTION('',(0.,0.,1.)); +#35099 = DIRECTION('',(1.,0.,-0.)); +#35100 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#35104)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#35101,#35102,#35103)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#35101 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#35102 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#35103 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#35104 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#35101, + 'distance_accuracy_value','confusion accuracy'); +#35105 = SHAPE_DEFINITION_REPRESENTATION(#35106,#34949); +#35106 = PRODUCT_DEFINITION_SHAPE('','',#35107); +#35107 = PRODUCT_DEFINITION('design','',#35108,#35111); +#35108 = PRODUCT_DEFINITION_FORMATION('','',#35109); +#35109 = PRODUCT('Mid_Body','Mid_Body','',(#35110)); +#35110 = PRODUCT_CONTEXT('',#2,'mechanical'); +#35111 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#35112 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#35113,#35115); +#35113 = ( REPRESENTATION_RELATIONSHIP('','',#34949,#34927) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#35114) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#35114 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34928); +#35115 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #35116); +#35116 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('47','101','',#34922,#35107,$); +#35117 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#35109)); +#35118 = SHAPE_DEFINITION_REPRESENTATION(#35119,#35125); +#35119 = PRODUCT_DEFINITION_SHAPE('','',#35120); +#35120 = PRODUCT_DEFINITION('design','',#35121,#35124); +#35121 = PRODUCT_DEFINITION_FORMATION('','',#35122); +#35122 = PRODUCT('Terminal','Terminal','',(#35123)); +#35123 = PRODUCT_CONTEXT('',#2,'mechanical'); +#35124 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#35125 = SHAPE_REPRESENTATION('',(#11,#35126),#35130); +#35126 = AXIS2_PLACEMENT_3D('',#35127,#35128,#35129); +#35127 = CARTESIAN_POINT('',(0.,0.,0.)); +#35128 = DIRECTION('',(0.,0.,1.)); +#35129 = DIRECTION('',(1.,0.,0.)); +#35130 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#35134)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#35131,#35132,#35133)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#35131 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#35132 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#35133 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#35134 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#35131, + 'distance_accuracy_value','confusion accuracy'); +#35135 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#35136),#35418); +#35136 = MANIFOLD_SOLID_BREP('',#35137); +#35137 = CLOSED_SHELL('',(#35138,#35178,#35241,#35265,#35321,#35338, + #35355,#35372,#35389,#35406)); +#35138 = ADVANCED_FACE('',(#35139),#35173,.F.); +#35139 = FACE_BOUND('',#35140,.F.); +#35140 = EDGE_LOOP('',(#35141,#35151,#35159,#35167)); +#35141 = ORIENTED_EDGE('',*,*,#35142,.F.); +#35142 = EDGE_CURVE('',#35143,#35145,#35147,.T.); +#35143 = VERTEX_POINT('',#35144); +#35144 = CARTESIAN_POINT('',(0.,0.,0.)); +#35145 = VERTEX_POINT('',#35146); +#35146 = CARTESIAN_POINT('',(0.,0.,0.45)); +#35147 = LINE('',#35148,#35149); +#35148 = CARTESIAN_POINT('',(0.,0.,0.)); +#35149 = VECTOR('',#35150,1.); +#35150 = DIRECTION('',(0.,0.,1.)); +#35151 = ORIENTED_EDGE('',*,*,#35152,.T.); +#35152 = EDGE_CURVE('',#35143,#35153,#35155,.T.); +#35153 = VERTEX_POINT('',#35154); +#35154 = CARTESIAN_POINT('',(0.,0.8,0.)); +#35155 = LINE('',#35156,#35157); +#35156 = CARTESIAN_POINT('',(0.,0.,0.)); +#35157 = VECTOR('',#35158,1.); +#35158 = DIRECTION('',(-0.,1.,0.)); +#35159 = ORIENTED_EDGE('',*,*,#35160,.T.); +#35160 = EDGE_CURVE('',#35153,#35161,#35163,.T.); +#35161 = VERTEX_POINT('',#35162); +#35162 = CARTESIAN_POINT('',(0.,0.8,0.45)); +#35163 = LINE('',#35164,#35165); +#35164 = CARTESIAN_POINT('',(0.,0.8,0.)); +#35165 = VECTOR('',#35166,1.); +#35166 = DIRECTION('',(0.,0.,1.)); +#35167 = ORIENTED_EDGE('',*,*,#35168,.F.); +#35168 = EDGE_CURVE('',#35145,#35161,#35169,.T.); +#35169 = LINE('',#35170,#35171); +#35170 = CARTESIAN_POINT('',(0.,0.,0.45)); +#35171 = VECTOR('',#35172,1.); +#35172 = DIRECTION('',(-0.,1.,0.)); +#35173 = PLANE('',#35174); +#35174 = AXIS2_PLACEMENT_3D('',#35175,#35176,#35177); +#35175 = CARTESIAN_POINT('',(0.,0.,0.)); +#35176 = DIRECTION('',(1.,0.,-0.)); +#35177 = DIRECTION('',(0.,0.,1.)); +#35178 = ADVANCED_FACE('',(#35179),#35236,.F.); +#35179 = FACE_BOUND('',#35180,.F.); +#35180 = EDGE_LOOP('',(#35181,#35191,#35197,#35198,#35206,#35214,#35222, + #35230)); +#35181 = ORIENTED_EDGE('',*,*,#35182,.F.); +#35182 = EDGE_CURVE('',#35183,#35185,#35187,.T.); +#35183 = VERTEX_POINT('',#35184); +#35184 = CARTESIAN_POINT('',(0.3,0.,0.)); +#35185 = VERTEX_POINT('',#35186); +#35186 = CARTESIAN_POINT('',(0.3,0.,4.5E-02)); +#35187 = LINE('',#35188,#35189); +#35188 = CARTESIAN_POINT('',(0.3,0.,0.)); +#35189 = VECTOR('',#35190,1.); +#35190 = DIRECTION('',(0.,0.,1.)); +#35191 = ORIENTED_EDGE('',*,*,#35192,.F.); +#35192 = EDGE_CURVE('',#35143,#35183,#35193,.T.); +#35193 = LINE('',#35194,#35195); +#35194 = CARTESIAN_POINT('',(0.,0.,0.)); +#35195 = VECTOR('',#35196,1.); +#35196 = DIRECTION('',(1.,0.,-0.)); +#35197 = ORIENTED_EDGE('',*,*,#35142,.T.); +#35198 = ORIENTED_EDGE('',*,*,#35199,.T.); +#35199 = EDGE_CURVE('',#35145,#35200,#35202,.T.); +#35200 = VERTEX_POINT('',#35201); +#35201 = CARTESIAN_POINT('',(0.3,0.,0.45)); +#35202 = LINE('',#35203,#35204); +#35203 = CARTESIAN_POINT('',(0.,0.,0.45)); +#35204 = VECTOR('',#35205,1.); +#35205 = DIRECTION('',(1.,0.,-0.)); +#35206 = ORIENTED_EDGE('',*,*,#35207,.F.); +#35207 = EDGE_CURVE('',#35208,#35200,#35210,.T.); +#35208 = VERTEX_POINT('',#35209); +#35209 = CARTESIAN_POINT('',(0.3,0.,0.405)); +#35210 = LINE('',#35211,#35212); +#35211 = CARTESIAN_POINT('',(0.3,0.,0.)); +#35212 = VECTOR('',#35213,1.); +#35213 = DIRECTION('',(0.,0.,1.)); +#35214 = ORIENTED_EDGE('',*,*,#35215,.F.); +#35215 = EDGE_CURVE('',#35216,#35208,#35218,.T.); +#35216 = VERTEX_POINT('',#35217); +#35217 = CARTESIAN_POINT('',(4.5E-02,0.,0.405)); +#35218 = LINE('',#35219,#35220); +#35219 = CARTESIAN_POINT('',(4.5E-02,0.,0.405)); +#35220 = VECTOR('',#35221,1.); +#35221 = DIRECTION('',(1.,0.,-0.)); +#35222 = ORIENTED_EDGE('',*,*,#35223,.F.); +#35223 = EDGE_CURVE('',#35224,#35216,#35226,.T.); +#35224 = VERTEX_POINT('',#35225); +#35225 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#35226 = LINE('',#35227,#35228); +#35227 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#35228 = VECTOR('',#35229,1.); +#35229 = DIRECTION('',(0.,0.,1.)); +#35230 = ORIENTED_EDGE('',*,*,#35231,.T.); +#35231 = EDGE_CURVE('',#35224,#35185,#35232,.T.); +#35232 = LINE('',#35233,#35234); +#35233 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#35234 = VECTOR('',#35235,1.); +#35235 = DIRECTION('',(1.,0.,-0.)); +#35236 = PLANE('',#35237); +#35237 = AXIS2_PLACEMENT_3D('',#35238,#35239,#35240); +#35238 = CARTESIAN_POINT('',(0.,0.,0.)); +#35239 = DIRECTION('',(-0.,1.,0.)); +#35240 = DIRECTION('',(0.,0.,1.)); +#35241 = ADVANCED_FACE('',(#35242),#35260,.T.); +#35242 = FACE_BOUND('',#35243,.T.); +#35243 = EDGE_LOOP('',(#35244,#35245,#35246,#35254)); +#35244 = ORIENTED_EDGE('',*,*,#35168,.F.); +#35245 = ORIENTED_EDGE('',*,*,#35199,.T.); +#35246 = ORIENTED_EDGE('',*,*,#35247,.T.); +#35247 = EDGE_CURVE('',#35200,#35248,#35250,.T.); +#35248 = VERTEX_POINT('',#35249); +#35249 = CARTESIAN_POINT('',(0.3,0.8,0.45)); +#35250 = LINE('',#35251,#35252); +#35251 = CARTESIAN_POINT('',(0.3,0.,0.45)); +#35252 = VECTOR('',#35253,1.); +#35253 = DIRECTION('',(0.,1.,0.)); +#35254 = ORIENTED_EDGE('',*,*,#35255,.F.); +#35255 = EDGE_CURVE('',#35161,#35248,#35256,.T.); +#35256 = LINE('',#35257,#35258); +#35257 = CARTESIAN_POINT('',(0.,0.8,0.45)); +#35258 = VECTOR('',#35259,1.); +#35259 = DIRECTION('',(1.,0.,-0.)); +#35260 = PLANE('',#35261); +#35261 = AXIS2_PLACEMENT_3D('',#35262,#35263,#35264); +#35262 = CARTESIAN_POINT('',(0.,0.,0.45)); +#35263 = DIRECTION('',(0.,0.,1.)); +#35264 = DIRECTION('',(1.,0.,-0.)); +#35265 = ADVANCED_FACE('',(#35266),#35316,.T.); +#35266 = FACE_BOUND('',#35267,.T.); +#35267 = EDGE_LOOP('',(#35268,#35278,#35284,#35285,#35286,#35294,#35302, + #35310)); +#35268 = ORIENTED_EDGE('',*,*,#35269,.F.); +#35269 = EDGE_CURVE('',#35270,#35272,#35274,.T.); +#35270 = VERTEX_POINT('',#35271); +#35271 = CARTESIAN_POINT('',(0.3,0.8,0.)); +#35272 = VERTEX_POINT('',#35273); +#35273 = CARTESIAN_POINT('',(0.3,0.8,4.5E-02)); +#35274 = LINE('',#35275,#35276); +#35275 = CARTESIAN_POINT('',(0.3,0.8,0.)); +#35276 = VECTOR('',#35277,1.); +#35277 = DIRECTION('',(0.,0.,1.)); +#35278 = ORIENTED_EDGE('',*,*,#35279,.F.); +#35279 = EDGE_CURVE('',#35153,#35270,#35280,.T.); +#35280 = LINE('',#35281,#35282); +#35281 = CARTESIAN_POINT('',(0.,0.8,0.)); +#35282 = VECTOR('',#35283,1.); +#35283 = DIRECTION('',(1.,0.,-0.)); +#35284 = ORIENTED_EDGE('',*,*,#35160,.T.); +#35285 = ORIENTED_EDGE('',*,*,#35255,.T.); +#35286 = ORIENTED_EDGE('',*,*,#35287,.F.); +#35287 = EDGE_CURVE('',#35288,#35248,#35290,.T.); +#35288 = VERTEX_POINT('',#35289); +#35289 = CARTESIAN_POINT('',(0.3,0.8,0.405)); +#35290 = LINE('',#35291,#35292); +#35291 = CARTESIAN_POINT('',(0.3,0.8,0.)); +#35292 = VECTOR('',#35293,1.); +#35293 = DIRECTION('',(0.,0.,1.)); +#35294 = ORIENTED_EDGE('',*,*,#35295,.F.); +#35295 = EDGE_CURVE('',#35296,#35288,#35298,.T.); +#35296 = VERTEX_POINT('',#35297); +#35297 = CARTESIAN_POINT('',(4.5E-02,0.8,0.405)); +#35298 = LINE('',#35299,#35300); +#35299 = CARTESIAN_POINT('',(4.5E-02,0.8,0.405)); +#35300 = VECTOR('',#35301,1.); +#35301 = DIRECTION('',(1.,0.,-0.)); +#35302 = ORIENTED_EDGE('',*,*,#35303,.F.); +#35303 = EDGE_CURVE('',#35304,#35296,#35306,.T.); +#35304 = VERTEX_POINT('',#35305); +#35305 = CARTESIAN_POINT('',(4.5E-02,0.8,4.5E-02)); +#35306 = LINE('',#35307,#35308); +#35307 = CARTESIAN_POINT('',(4.5E-02,0.8,4.5E-02)); +#35308 = VECTOR('',#35309,1.); +#35309 = DIRECTION('',(0.,0.,1.)); +#35310 = ORIENTED_EDGE('',*,*,#35311,.T.); +#35311 = EDGE_CURVE('',#35304,#35272,#35312,.T.); +#35312 = LINE('',#35313,#35314); +#35313 = CARTESIAN_POINT('',(4.5E-02,0.8,4.5E-02)); +#35314 = VECTOR('',#35315,1.); +#35315 = DIRECTION('',(1.,0.,-0.)); +#35316 = PLANE('',#35317); +#35317 = AXIS2_PLACEMENT_3D('',#35318,#35319,#35320); +#35318 = CARTESIAN_POINT('',(0.,0.8,0.)); +#35319 = DIRECTION('',(-0.,1.,0.)); +#35320 = DIRECTION('',(0.,0.,1.)); +#35321 = ADVANCED_FACE('',(#35322),#35333,.F.); +#35322 = FACE_BOUND('',#35323,.F.); +#35323 = EDGE_LOOP('',(#35324,#35325,#35326,#35332)); +#35324 = ORIENTED_EDGE('',*,*,#35152,.F.); +#35325 = ORIENTED_EDGE('',*,*,#35192,.T.); +#35326 = ORIENTED_EDGE('',*,*,#35327,.T.); +#35327 = EDGE_CURVE('',#35183,#35270,#35328,.T.); +#35328 = LINE('',#35329,#35330); +#35329 = CARTESIAN_POINT('',(0.3,0.,0.)); +#35330 = VECTOR('',#35331,1.); +#35331 = DIRECTION('',(-0.,1.,0.)); +#35332 = ORIENTED_EDGE('',*,*,#35279,.F.); +#35333 = PLANE('',#35334); +#35334 = AXIS2_PLACEMENT_3D('',#35335,#35336,#35337); +#35335 = CARTESIAN_POINT('',(0.,0.,0.)); +#35336 = DIRECTION('',(0.,0.,1.)); +#35337 = DIRECTION('',(1.,0.,-0.)); +#35338 = ADVANCED_FACE('',(#35339),#35350,.T.); +#35339 = FACE_BOUND('',#35340,.T.); +#35340 = EDGE_LOOP('',(#35341,#35342,#35343,#35344)); +#35341 = ORIENTED_EDGE('',*,*,#35182,.F.); +#35342 = ORIENTED_EDGE('',*,*,#35327,.T.); +#35343 = ORIENTED_EDGE('',*,*,#35269,.T.); +#35344 = ORIENTED_EDGE('',*,*,#35345,.T.); +#35345 = EDGE_CURVE('',#35272,#35185,#35346,.T.); +#35346 = LINE('',#35347,#35348); +#35347 = CARTESIAN_POINT('',(0.3,0.,4.5E-02)); +#35348 = VECTOR('',#35349,1.); +#35349 = DIRECTION('',(0.,-1.,0.)); +#35350 = PLANE('',#35351); +#35351 = AXIS2_PLACEMENT_3D('',#35352,#35353,#35354); +#35352 = CARTESIAN_POINT('',(0.3,0.,0.)); +#35353 = DIRECTION('',(1.,0.,-0.)); +#35354 = DIRECTION('',(0.,0.,1.)); +#35355 = ADVANCED_FACE('',(#35356),#35367,.T.); +#35356 = FACE_BOUND('',#35357,.T.); +#35357 = EDGE_LOOP('',(#35358,#35359,#35365,#35366)); +#35358 = ORIENTED_EDGE('',*,*,#35311,.F.); +#35359 = ORIENTED_EDGE('',*,*,#35360,.F.); +#35360 = EDGE_CURVE('',#35224,#35304,#35361,.T.); +#35361 = LINE('',#35362,#35363); +#35362 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#35363 = VECTOR('',#35364,1.); +#35364 = DIRECTION('',(-0.,1.,0.)); +#35365 = ORIENTED_EDGE('',*,*,#35231,.T.); +#35366 = ORIENTED_EDGE('',*,*,#35345,.F.); +#35367 = PLANE('',#35368); +#35368 = AXIS2_PLACEMENT_3D('',#35369,#35370,#35371); +#35369 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#35370 = DIRECTION('',(0.,0.,1.)); +#35371 = DIRECTION('',(1.,0.,-0.)); +#35372 = ADVANCED_FACE('',(#35373),#35384,.T.); +#35373 = FACE_BOUND('',#35374,.T.); +#35374 = EDGE_LOOP('',(#35375,#35376,#35377,#35378)); +#35375 = ORIENTED_EDGE('',*,*,#35223,.F.); +#35376 = ORIENTED_EDGE('',*,*,#35360,.T.); +#35377 = ORIENTED_EDGE('',*,*,#35303,.T.); +#35378 = ORIENTED_EDGE('',*,*,#35379,.F.); +#35379 = EDGE_CURVE('',#35216,#35296,#35380,.T.); +#35380 = LINE('',#35381,#35382); +#35381 = CARTESIAN_POINT('',(4.5E-02,0.,0.405)); +#35382 = VECTOR('',#35383,1.); +#35383 = DIRECTION('',(-0.,1.,0.)); +#35384 = PLANE('',#35385); +#35385 = AXIS2_PLACEMENT_3D('',#35386,#35387,#35388); +#35386 = CARTESIAN_POINT('',(4.5E-02,0.,4.5E-02)); +#35387 = DIRECTION('',(1.,0.,-0.)); +#35388 = DIRECTION('',(0.,0.,1.)); +#35389 = ADVANCED_FACE('',(#35390),#35401,.F.); +#35390 = FACE_BOUND('',#35391,.F.); +#35391 = EDGE_LOOP('',(#35392,#35393,#35394,#35395)); +#35392 = ORIENTED_EDGE('',*,*,#35295,.F.); +#35393 = ORIENTED_EDGE('',*,*,#35379,.F.); +#35394 = ORIENTED_EDGE('',*,*,#35215,.T.); +#35395 = ORIENTED_EDGE('',*,*,#35396,.F.); +#35396 = EDGE_CURVE('',#35288,#35208,#35397,.T.); +#35397 = LINE('',#35398,#35399); +#35398 = CARTESIAN_POINT('',(0.3,0.,0.405)); +#35399 = VECTOR('',#35400,1.); +#35400 = DIRECTION('',(0.,-1.,0.)); +#35401 = PLANE('',#35402); +#35402 = AXIS2_PLACEMENT_3D('',#35403,#35404,#35405); +#35403 = CARTESIAN_POINT('',(4.5E-02,0.,0.405)); +#35404 = DIRECTION('',(0.,0.,1.)); +#35405 = DIRECTION('',(1.,0.,-0.)); +#35406 = ADVANCED_FACE('',(#35407),#35413,.T.); +#35407 = FACE_BOUND('',#35408,.T.); +#35408 = EDGE_LOOP('',(#35409,#35410,#35411,#35412)); +#35409 = ORIENTED_EDGE('',*,*,#35207,.F.); +#35410 = ORIENTED_EDGE('',*,*,#35396,.F.); +#35411 = ORIENTED_EDGE('',*,*,#35287,.T.); +#35412 = ORIENTED_EDGE('',*,*,#35247,.F.); +#35413 = PLANE('',#35414); +#35414 = AXIS2_PLACEMENT_3D('',#35415,#35416,#35417); +#35415 = CARTESIAN_POINT('',(0.3,0.,0.)); +#35416 = DIRECTION('',(1.,0.,-0.)); +#35417 = DIRECTION('',(0.,0.,1.)); +#35418 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#35422)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#35419,#35420,#35421)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#35419 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#35420 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#35421 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#35422 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#35419, + 'distance_accuracy_value','confusion accuracy'); +#35423 = SHAPE_DEFINITION_REPRESENTATION(#35424,#35135); +#35424 = PRODUCT_DEFINITION_SHAPE('','',#35425); +#35425 = PRODUCT_DEFINITION('design','',#35426,#35429); +#35426 = PRODUCT_DEFINITION_FORMATION('','',#35427); +#35427 = PRODUCT('Open CASCADE STEP translator 6.8 21.2.1', + 'Open CASCADE STEP translator 6.8 21.2.1','',(#35428)); +#35428 = PRODUCT_CONTEXT('',#2,'mechanical'); +#35429 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#35430 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#35431,#35433); +#35431 = ( REPRESENTATION_RELATIONSHIP('','',#35135,#35125) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#35432) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#35432 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35126); +#35433 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #35434); +#35434 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('48','102','',#35120,#35425,$); +#35435 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#35427)); +#35436 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#35437,#35439); +#35437 = ( REPRESENTATION_RELATIONSHIP('','',#35125,#34927) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#35438) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#35438 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34932); +#35439 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #35440); +#35440 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('49','103','',#34922,#35120,$); +#35441 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#35122)); +#35442 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#35443,#35445); +#35443 = ( REPRESENTATION_RELATIONSHIP('','',#35125,#34927) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#35444) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#35444 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34936); +#35445 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #35446); +#35446 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('50','104','',#34922,#35120,$); +#35447 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#35448),#35598); +#35448 = MANIFOLD_SOLID_BREP('',#35449); +#35449 = CLOSED_SHELL('',(#35450,#35490,#35530,#35552,#35574,#35586)); +#35450 = ADVANCED_FACE('',(#35451),#35485,.F.); +#35451 = FACE_BOUND('',#35452,.F.); +#35452 = EDGE_LOOP('',(#35453,#35463,#35471,#35479)); +#35453 = ORIENTED_EDGE('',*,*,#35454,.F.); +#35454 = EDGE_CURVE('',#35455,#35457,#35459,.T.); +#35455 = VERTEX_POINT('',#35456); +#35456 = CARTESIAN_POINT('',(0.,0.,0.)); +#35457 = VERTEX_POINT('',#35458); +#35458 = CARTESIAN_POINT('',(0.,0.,4.5E-02)); +#35459 = LINE('',#35460,#35461); +#35460 = CARTESIAN_POINT('',(0.,0.,0.)); +#35461 = VECTOR('',#35462,1.); +#35462 = DIRECTION('',(0.,0.,1.)); +#35463 = ORIENTED_EDGE('',*,*,#35464,.T.); +#35464 = EDGE_CURVE('',#35455,#35465,#35467,.T.); +#35465 = VERTEX_POINT('',#35466); +#35466 = CARTESIAN_POINT('',(0.,0.8,0.)); +#35467 = LINE('',#35468,#35469); +#35468 = CARTESIAN_POINT('',(0.,0.,0.)); +#35469 = VECTOR('',#35470,1.); +#35470 = DIRECTION('',(-0.,1.,0.)); +#35471 = ORIENTED_EDGE('',*,*,#35472,.T.); +#35472 = EDGE_CURVE('',#35465,#35473,#35475,.T.); +#35473 = VERTEX_POINT('',#35474); +#35474 = CARTESIAN_POINT('',(0.,0.8,4.5E-02)); +#35475 = LINE('',#35476,#35477); +#35476 = CARTESIAN_POINT('',(0.,0.8,0.)); +#35477 = VECTOR('',#35478,1.); +#35478 = DIRECTION('',(0.,0.,1.)); +#35479 = ORIENTED_EDGE('',*,*,#35480,.F.); +#35480 = EDGE_CURVE('',#35457,#35473,#35481,.T.); +#35481 = LINE('',#35482,#35483); +#35482 = CARTESIAN_POINT('',(0.,0.,4.5E-02)); +#35483 = VECTOR('',#35484,1.); +#35484 = DIRECTION('',(-0.,1.,0.)); +#35485 = PLANE('',#35486); +#35486 = AXIS2_PLACEMENT_3D('',#35487,#35488,#35489); +#35487 = CARTESIAN_POINT('',(0.,0.,0.)); +#35488 = DIRECTION('',(1.,0.,-0.)); +#35489 = DIRECTION('',(0.,0.,1.)); +#35490 = ADVANCED_FACE('',(#35491),#35525,.T.); +#35491 = FACE_BOUND('',#35492,.T.); +#35492 = EDGE_LOOP('',(#35493,#35503,#35511,#35519)); +#35493 = ORIENTED_EDGE('',*,*,#35494,.F.); +#35494 = EDGE_CURVE('',#35495,#35497,#35499,.T.); +#35495 = VERTEX_POINT('',#35496); +#35496 = CARTESIAN_POINT('',(1.,0.,0.)); +#35497 = VERTEX_POINT('',#35498); +#35498 = CARTESIAN_POINT('',(1.,0.,4.5E-02)); +#35499 = LINE('',#35500,#35501); +#35500 = CARTESIAN_POINT('',(1.,0.,0.)); +#35501 = VECTOR('',#35502,1.); +#35502 = DIRECTION('',(0.,0.,1.)); +#35503 = ORIENTED_EDGE('',*,*,#35504,.T.); +#35504 = EDGE_CURVE('',#35495,#35505,#35507,.T.); +#35505 = VERTEX_POINT('',#35506); +#35506 = CARTESIAN_POINT('',(1.,0.8,0.)); +#35507 = LINE('',#35508,#35509); +#35508 = CARTESIAN_POINT('',(1.,0.,0.)); +#35509 = VECTOR('',#35510,1.); +#35510 = DIRECTION('',(-0.,1.,0.)); +#35511 = ORIENTED_EDGE('',*,*,#35512,.T.); +#35512 = EDGE_CURVE('',#35505,#35513,#35515,.T.); +#35513 = VERTEX_POINT('',#35514); +#35514 = CARTESIAN_POINT('',(1.,0.8,4.5E-02)); +#35515 = LINE('',#35516,#35517); +#35516 = CARTESIAN_POINT('',(1.,0.8,0.)); +#35517 = VECTOR('',#35518,1.); +#35518 = DIRECTION('',(0.,0.,1.)); +#35519 = ORIENTED_EDGE('',*,*,#35520,.F.); +#35520 = EDGE_CURVE('',#35497,#35513,#35521,.T.); +#35521 = LINE('',#35522,#35523); +#35522 = CARTESIAN_POINT('',(1.,0.,4.5E-02)); +#35523 = VECTOR('',#35524,1.); +#35524 = DIRECTION('',(0.,1.,0.)); +#35525 = PLANE('',#35526); +#35526 = AXIS2_PLACEMENT_3D('',#35527,#35528,#35529); +#35527 = CARTESIAN_POINT('',(1.,0.,0.)); +#35528 = DIRECTION('',(1.,0.,-0.)); +#35529 = DIRECTION('',(0.,0.,1.)); +#35530 = ADVANCED_FACE('',(#35531),#35547,.F.); +#35531 = FACE_BOUND('',#35532,.F.); +#35532 = EDGE_LOOP('',(#35533,#35539,#35540,#35546)); +#35533 = ORIENTED_EDGE('',*,*,#35534,.F.); +#35534 = EDGE_CURVE('',#35455,#35495,#35535,.T.); +#35535 = LINE('',#35536,#35537); +#35536 = CARTESIAN_POINT('',(0.,0.,0.)); +#35537 = VECTOR('',#35538,1.); +#35538 = DIRECTION('',(1.,0.,-0.)); +#35539 = ORIENTED_EDGE('',*,*,#35454,.T.); +#35540 = ORIENTED_EDGE('',*,*,#35541,.T.); +#35541 = EDGE_CURVE('',#35457,#35497,#35542,.T.); +#35542 = LINE('',#35543,#35544); +#35543 = CARTESIAN_POINT('',(0.,0.,4.5E-02)); +#35544 = VECTOR('',#35545,1.); +#35545 = DIRECTION('',(1.,0.,-0.)); +#35546 = ORIENTED_EDGE('',*,*,#35494,.F.); +#35547 = PLANE('',#35548); +#35548 = AXIS2_PLACEMENT_3D('',#35549,#35550,#35551); +#35549 = CARTESIAN_POINT('',(0.,0.,0.)); +#35550 = DIRECTION('',(-0.,1.,0.)); +#35551 = DIRECTION('',(0.,0.,1.)); +#35552 = ADVANCED_FACE('',(#35553),#35569,.T.); +#35553 = FACE_BOUND('',#35554,.T.); +#35554 = EDGE_LOOP('',(#35555,#35561,#35562,#35568)); +#35555 = ORIENTED_EDGE('',*,*,#35556,.F.); +#35556 = EDGE_CURVE('',#35465,#35505,#35557,.T.); +#35557 = LINE('',#35558,#35559); +#35558 = CARTESIAN_POINT('',(0.,0.8,0.)); +#35559 = VECTOR('',#35560,1.); +#35560 = DIRECTION('',(1.,0.,-0.)); +#35561 = ORIENTED_EDGE('',*,*,#35472,.T.); +#35562 = ORIENTED_EDGE('',*,*,#35563,.T.); +#35563 = EDGE_CURVE('',#35473,#35513,#35564,.T.); +#35564 = LINE('',#35565,#35566); +#35565 = CARTESIAN_POINT('',(0.,0.8,4.5E-02)); +#35566 = VECTOR('',#35567,1.); +#35567 = DIRECTION('',(1.,0.,-0.)); +#35568 = ORIENTED_EDGE('',*,*,#35512,.F.); +#35569 = PLANE('',#35570); +#35570 = AXIS2_PLACEMENT_3D('',#35571,#35572,#35573); +#35571 = CARTESIAN_POINT('',(0.,0.8,0.)); +#35572 = DIRECTION('',(-0.,1.,0.)); +#35573 = DIRECTION('',(0.,0.,1.)); +#35574 = ADVANCED_FACE('',(#35575),#35581,.F.); +#35575 = FACE_BOUND('',#35576,.F.); +#35576 = EDGE_LOOP('',(#35577,#35578,#35579,#35580)); +#35577 = ORIENTED_EDGE('',*,*,#35464,.F.); +#35578 = ORIENTED_EDGE('',*,*,#35534,.T.); +#35579 = ORIENTED_EDGE('',*,*,#35504,.T.); +#35580 = ORIENTED_EDGE('',*,*,#35556,.F.); +#35581 = PLANE('',#35582); +#35582 = AXIS2_PLACEMENT_3D('',#35583,#35584,#35585); +#35583 = CARTESIAN_POINT('',(0.,0.,0.)); +#35584 = DIRECTION('',(0.,0.,1.)); +#35585 = DIRECTION('',(1.,0.,-0.)); +#35586 = ADVANCED_FACE('',(#35587),#35593,.T.); +#35587 = FACE_BOUND('',#35588,.T.); +#35588 = EDGE_LOOP('',(#35589,#35590,#35591,#35592)); +#35589 = ORIENTED_EDGE('',*,*,#35480,.F.); +#35590 = ORIENTED_EDGE('',*,*,#35541,.T.); +#35591 = ORIENTED_EDGE('',*,*,#35520,.T.); +#35592 = ORIENTED_EDGE('',*,*,#35563,.F.); +#35593 = PLANE('',#35594); +#35594 = AXIS2_PLACEMENT_3D('',#35595,#35596,#35597); +#35595 = CARTESIAN_POINT('',(0.,0.,4.5E-02)); +#35596 = DIRECTION('',(0.,0.,1.)); +#35597 = DIRECTION('',(1.,0.,-0.)); +#35598 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#35602)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#35599,#35600,#35601)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#35599 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#35600 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#35601 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#35602 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#35599, + 'distance_accuracy_value','confusion accuracy'); +#35603 = SHAPE_DEFINITION_REPRESENTATION(#35604,#35447); +#35604 = PRODUCT_DEFINITION_SHAPE('','',#35605); +#35605 = PRODUCT_DEFINITION('design','',#35606,#35609); +#35606 = PRODUCT_DEFINITION_FORMATION('','',#35607); +#35607 = PRODUCT('Mark','Mark','',(#35608)); +#35608 = PRODUCT_CONTEXT('',#2,'mechanical'); +#35609 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#35610 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#35611,#35613); +#35611 = ( REPRESENTATION_RELATIONSHIP('','',#35447,#34927) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#35612) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#35612 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34940); +#35613 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #35614); +#35614 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('51','105','',#34922,#35605,$); +#35615 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#35607)); +#35616 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#35617,#35619); +#35617 = ( REPRESENTATION_RELATIONSHIP('','',#34927,#34910) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#35618) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#35618 = ITEM_DEFINED_TRANSFORMATION('','',#11,#34911); +#35619 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #35620); +#35620 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('52','','',#34905,#34922,$); +#35621 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34924)); +#35622 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#35623,#35625); +#35623 = ( REPRESENTATION_RELATIONSHIP('','',#34910,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#35624) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#35624 = ITEM_DEFINED_TRANSFORMATION('','',#11,#79); +#35625 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #35626); +#35626 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('53','','',#5,#34905,$); +#35627 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#34907)); +#35628 = SHAPE_DEFINITION_REPRESENTATION(#35629,#35635); +#35629 = PRODUCT_DEFINITION_SHAPE('','',#35630); +#35630 = PRODUCT_DEFINITION('design','',#35631,#35634); +#35631 = PRODUCT_DEFINITION_FORMATION('','',#35632); +#35632 = PRODUCT('R1','R1','',(#35633)); +#35633 = PRODUCT_CONTEXT('',#2,'mechanical'); +#35634 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#35635 = SHAPE_REPRESENTATION('',(#11,#35636),#35640); +#35636 = AXIS2_PLACEMENT_3D('',#35637,#35638,#35639); +#35637 = CARTESIAN_POINT('',(295.19427490234,168.60932922363,0.)); +#35638 = DIRECTION('',(-0.,0.,1.)); +#35639 = DIRECTION('',(1.19248806385E-08,-1.,0.)); +#35640 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#35644)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#35641,#35642,#35643)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#35641 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#35642 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#35643 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#35644 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#35641, + 'distance_accuracy_value','confusion accuracy'); +#35645 = SHAPE_DEFINITION_REPRESENTATION(#35646,#35652); +#35646 = PRODUCT_DEFINITION_SHAPE('','',#35647); +#35647 = PRODUCT_DEFINITION('design','',#35648,#35651); +#35648 = PRODUCT_DEFINITION_FORMATION('','',#35649); +#35649 = PRODUCT('6608419968','6608419968','',(#35650)); +#35650 = PRODUCT_CONTEXT('',#2,'mechanical'); +#35651 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#35652 = SHAPE_REPRESENTATION('',(#11,#35653,#35657,#35661,#35665), + #35669); +#35653 = AXIS2_PLACEMENT_3D('',#35654,#35655,#35656); +#35654 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#35655 = DIRECTION('',(0.,0.,1.)); +#35656 = DIRECTION('',(1.,0.,0.)); +#35657 = AXIS2_PLACEMENT_3D('',#35658,#35659,#35660); +#35658 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#35659 = DIRECTION('',(0.,0.,1.)); +#35660 = DIRECTION('',(1.,0.,0.)); +#35661 = AXIS2_PLACEMENT_3D('',#35662,#35663,#35664); +#35662 = CARTESIAN_POINT('',(0.5,0.25,0.)); +#35663 = DIRECTION('',(0.,0.,1.)); +#35664 = DIRECTION('',(-1.,1.224646799147E-16,0.)); +#35665 = AXIS2_PLACEMENT_3D('',#35666,#35667,#35668); +#35666 = CARTESIAN_POINT('',(-0.25,-0.25,0.315)); +#35667 = DIRECTION('',(0.,0.,1.)); +#35668 = DIRECTION('',(1.,0.,0.)); +#35669 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#35673)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#35670,#35671,#35672)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#35670 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#35671 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#35672 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#35673 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#35670, + 'distance_accuracy_value','confusion accuracy'); +#35674 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#35675),#35825); +#35675 = MANIFOLD_SOLID_BREP('',#35676); +#35676 = CLOSED_SHELL('',(#35677,#35717,#35757,#35779,#35801,#35813)); +#35677 = ADVANCED_FACE('',(#35678),#35712,.F.); +#35678 = FACE_BOUND('',#35679,.F.); +#35679 = EDGE_LOOP('',(#35680,#35690,#35698,#35706)); +#35680 = ORIENTED_EDGE('',*,*,#35681,.F.); +#35681 = EDGE_CURVE('',#35682,#35684,#35686,.T.); +#35682 = VERTEX_POINT('',#35683); +#35683 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35684 = VERTEX_POINT('',#35685); +#35685 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#35686 = LINE('',#35687,#35688); +#35687 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35688 = VECTOR('',#35689,1.); +#35689 = DIRECTION('',(0.,0.,1.)); +#35690 = ORIENTED_EDGE('',*,*,#35691,.T.); +#35691 = EDGE_CURVE('',#35682,#35692,#35694,.T.); +#35692 = VERTEX_POINT('',#35693); +#35693 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#35694 = LINE('',#35695,#35696); +#35695 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35696 = VECTOR('',#35697,1.); +#35697 = DIRECTION('',(-0.,1.,0.)); +#35698 = ORIENTED_EDGE('',*,*,#35699,.T.); +#35699 = EDGE_CURVE('',#35692,#35700,#35702,.T.); +#35700 = VERTEX_POINT('',#35701); +#35701 = CARTESIAN_POINT('',(3.5E-02,0.5,0.315)); +#35702 = LINE('',#35703,#35704); +#35703 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#35704 = VECTOR('',#35705,1.); +#35705 = DIRECTION('',(0.,0.,1.)); +#35706 = ORIENTED_EDGE('',*,*,#35707,.F.); +#35707 = EDGE_CURVE('',#35684,#35700,#35708,.T.); +#35708 = LINE('',#35709,#35710); +#35709 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#35710 = VECTOR('',#35711,1.); +#35711 = DIRECTION('',(-0.,1.,0.)); +#35712 = PLANE('',#35713); +#35713 = AXIS2_PLACEMENT_3D('',#35714,#35715,#35716); +#35714 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35715 = DIRECTION('',(1.,0.,-0.)); +#35716 = DIRECTION('',(0.,0.,1.)); +#35717 = ADVANCED_FACE('',(#35718),#35752,.T.); +#35718 = FACE_BOUND('',#35719,.T.); +#35719 = EDGE_LOOP('',(#35720,#35730,#35738,#35746)); +#35720 = ORIENTED_EDGE('',*,*,#35721,.F.); +#35721 = EDGE_CURVE('',#35722,#35724,#35726,.T.); +#35722 = VERTEX_POINT('',#35723); +#35723 = CARTESIAN_POINT('',(0.965,0.,3.5E-02)); +#35724 = VERTEX_POINT('',#35725); +#35725 = CARTESIAN_POINT('',(0.965,0.,0.315)); +#35726 = LINE('',#35727,#35728); +#35727 = CARTESIAN_POINT('',(0.965,0.,3.5E-02)); +#35728 = VECTOR('',#35729,1.); +#35729 = DIRECTION('',(0.,0.,1.)); +#35730 = ORIENTED_EDGE('',*,*,#35731,.T.); +#35731 = EDGE_CURVE('',#35722,#35732,#35734,.T.); +#35732 = VERTEX_POINT('',#35733); +#35733 = CARTESIAN_POINT('',(0.965,0.5,3.5E-02)); +#35734 = LINE('',#35735,#35736); +#35735 = CARTESIAN_POINT('',(0.965,0.,3.5E-02)); +#35736 = VECTOR('',#35737,1.); +#35737 = DIRECTION('',(-0.,1.,0.)); +#35738 = ORIENTED_EDGE('',*,*,#35739,.T.); +#35739 = EDGE_CURVE('',#35732,#35740,#35742,.T.); +#35740 = VERTEX_POINT('',#35741); +#35741 = CARTESIAN_POINT('',(0.965,0.5,0.315)); +#35742 = LINE('',#35743,#35744); +#35743 = CARTESIAN_POINT('',(0.965,0.5,3.5E-02)); +#35744 = VECTOR('',#35745,1.); +#35745 = DIRECTION('',(0.,0.,1.)); +#35746 = ORIENTED_EDGE('',*,*,#35747,.F.); +#35747 = EDGE_CURVE('',#35724,#35740,#35748,.T.); +#35748 = LINE('',#35749,#35750); +#35749 = CARTESIAN_POINT('',(0.965,0.,0.315)); +#35750 = VECTOR('',#35751,1.); +#35751 = DIRECTION('',(0.,1.,0.)); +#35752 = PLANE('',#35753); +#35753 = AXIS2_PLACEMENT_3D('',#35754,#35755,#35756); +#35754 = CARTESIAN_POINT('',(0.965,0.,3.5E-02)); +#35755 = DIRECTION('',(1.,0.,-0.)); +#35756 = DIRECTION('',(0.,0.,1.)); +#35757 = ADVANCED_FACE('',(#35758),#35774,.F.); +#35758 = FACE_BOUND('',#35759,.F.); +#35759 = EDGE_LOOP('',(#35760,#35766,#35767,#35773)); +#35760 = ORIENTED_EDGE('',*,*,#35761,.F.); +#35761 = EDGE_CURVE('',#35682,#35722,#35762,.T.); +#35762 = LINE('',#35763,#35764); +#35763 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35764 = VECTOR('',#35765,1.); +#35765 = DIRECTION('',(1.,0.,-0.)); +#35766 = ORIENTED_EDGE('',*,*,#35681,.T.); +#35767 = ORIENTED_EDGE('',*,*,#35768,.T.); +#35768 = EDGE_CURVE('',#35684,#35724,#35769,.T.); +#35769 = LINE('',#35770,#35771); +#35770 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#35771 = VECTOR('',#35772,1.); +#35772 = DIRECTION('',(1.,0.,-0.)); +#35773 = ORIENTED_EDGE('',*,*,#35721,.F.); +#35774 = PLANE('',#35775); +#35775 = AXIS2_PLACEMENT_3D('',#35776,#35777,#35778); +#35776 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35777 = DIRECTION('',(-0.,1.,0.)); +#35778 = DIRECTION('',(0.,0.,1.)); +#35779 = ADVANCED_FACE('',(#35780),#35796,.T.); +#35780 = FACE_BOUND('',#35781,.T.); +#35781 = EDGE_LOOP('',(#35782,#35788,#35789,#35795)); +#35782 = ORIENTED_EDGE('',*,*,#35783,.F.); +#35783 = EDGE_CURVE('',#35692,#35732,#35784,.T.); +#35784 = LINE('',#35785,#35786); +#35785 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#35786 = VECTOR('',#35787,1.); +#35787 = DIRECTION('',(1.,0.,-0.)); +#35788 = ORIENTED_EDGE('',*,*,#35699,.T.); +#35789 = ORIENTED_EDGE('',*,*,#35790,.T.); +#35790 = EDGE_CURVE('',#35700,#35740,#35791,.T.); +#35791 = LINE('',#35792,#35793); +#35792 = CARTESIAN_POINT('',(3.5E-02,0.5,0.315)); +#35793 = VECTOR('',#35794,1.); +#35794 = DIRECTION('',(1.,0.,-0.)); +#35795 = ORIENTED_EDGE('',*,*,#35739,.F.); +#35796 = PLANE('',#35797); +#35797 = AXIS2_PLACEMENT_3D('',#35798,#35799,#35800); +#35798 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#35799 = DIRECTION('',(-0.,1.,0.)); +#35800 = DIRECTION('',(0.,0.,1.)); +#35801 = ADVANCED_FACE('',(#35802),#35808,.F.); +#35802 = FACE_BOUND('',#35803,.F.); +#35803 = EDGE_LOOP('',(#35804,#35805,#35806,#35807)); +#35804 = ORIENTED_EDGE('',*,*,#35691,.F.); +#35805 = ORIENTED_EDGE('',*,*,#35761,.T.); +#35806 = ORIENTED_EDGE('',*,*,#35731,.T.); +#35807 = ORIENTED_EDGE('',*,*,#35783,.F.); +#35808 = PLANE('',#35809); +#35809 = AXIS2_PLACEMENT_3D('',#35810,#35811,#35812); +#35810 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35811 = DIRECTION('',(0.,0.,1.)); +#35812 = DIRECTION('',(1.,0.,-0.)); +#35813 = ADVANCED_FACE('',(#35814),#35820,.T.); +#35814 = FACE_BOUND('',#35815,.T.); +#35815 = EDGE_LOOP('',(#35816,#35817,#35818,#35819)); +#35816 = ORIENTED_EDGE('',*,*,#35707,.F.); +#35817 = ORIENTED_EDGE('',*,*,#35768,.T.); +#35818 = ORIENTED_EDGE('',*,*,#35747,.T.); +#35819 = ORIENTED_EDGE('',*,*,#35790,.F.); +#35820 = PLANE('',#35821); +#35821 = AXIS2_PLACEMENT_3D('',#35822,#35823,#35824); +#35822 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#35823 = DIRECTION('',(0.,0.,1.)); +#35824 = DIRECTION('',(1.,0.,-0.)); +#35825 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#35829)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#35826,#35827,#35828)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#35826 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#35827 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#35828 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#35829 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#35826, + 'distance_accuracy_value','confusion accuracy'); +#35830 = SHAPE_DEFINITION_REPRESENTATION(#35831,#35674); +#35831 = PRODUCT_DEFINITION_SHAPE('','',#35832); +#35832 = PRODUCT_DEFINITION('design','',#35833,#35836); +#35833 = PRODUCT_DEFINITION_FORMATION('','',#35834); +#35834 = PRODUCT('Mid_Body','Mid_Body','',(#35835)); +#35835 = PRODUCT_CONTEXT('',#2,'mechanical'); +#35836 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#35837 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#35838,#35840); +#35838 = ( REPRESENTATION_RELATIONSHIP('','',#35674,#35652) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#35839) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#35839 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35653); +#35840 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #35841); +#35841 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('54','96','',#35647,#35832,$); +#35842 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#35834)); +#35843 = SHAPE_DEFINITION_REPRESENTATION(#35844,#35850); +#35844 = PRODUCT_DEFINITION_SHAPE('','',#35845); +#35845 = PRODUCT_DEFINITION('design','',#35846,#35849); +#35846 = PRODUCT_DEFINITION_FORMATION('','',#35847); +#35847 = PRODUCT('Terminal','Terminal','',(#35848)); +#35848 = PRODUCT_CONTEXT('',#2,'mechanical'); +#35849 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#35850 = SHAPE_REPRESENTATION('',(#11,#35851),#35855); +#35851 = AXIS2_PLACEMENT_3D('',#35852,#35853,#35854); +#35852 = CARTESIAN_POINT('',(0.,0.,0.)); +#35853 = DIRECTION('',(0.,0.,1.)); +#35854 = DIRECTION('',(1.,0.,0.)); +#35855 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#35859)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#35856,#35857,#35858)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#35856 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#35857 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#35858 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#35859 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#35856, + 'distance_accuracy_value','confusion accuracy'); +#35860 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#35861),#36143); +#35861 = MANIFOLD_SOLID_BREP('',#35862); +#35862 = CLOSED_SHELL('',(#35863,#35903,#35966,#35990,#36046,#36063, + #36080,#36097,#36114,#36131)); +#35863 = ADVANCED_FACE('',(#35864),#35898,.F.); +#35864 = FACE_BOUND('',#35865,.F.); +#35865 = EDGE_LOOP('',(#35866,#35876,#35884,#35892)); +#35866 = ORIENTED_EDGE('',*,*,#35867,.F.); +#35867 = EDGE_CURVE('',#35868,#35870,#35872,.T.); +#35868 = VERTEX_POINT('',#35869); +#35869 = CARTESIAN_POINT('',(0.,0.,0.)); +#35870 = VERTEX_POINT('',#35871); +#35871 = CARTESIAN_POINT('',(0.,0.,0.35)); +#35872 = LINE('',#35873,#35874); +#35873 = CARTESIAN_POINT('',(0.,0.,0.)); +#35874 = VECTOR('',#35875,1.); +#35875 = DIRECTION('',(0.,0.,1.)); +#35876 = ORIENTED_EDGE('',*,*,#35877,.T.); +#35877 = EDGE_CURVE('',#35868,#35878,#35880,.T.); +#35878 = VERTEX_POINT('',#35879); +#35879 = CARTESIAN_POINT('',(0.,0.5,0.)); +#35880 = LINE('',#35881,#35882); +#35881 = CARTESIAN_POINT('',(0.,0.,0.)); +#35882 = VECTOR('',#35883,1.); +#35883 = DIRECTION('',(-0.,1.,0.)); +#35884 = ORIENTED_EDGE('',*,*,#35885,.T.); +#35885 = EDGE_CURVE('',#35878,#35886,#35888,.T.); +#35886 = VERTEX_POINT('',#35887); +#35887 = CARTESIAN_POINT('',(0.,0.5,0.35)); +#35888 = LINE('',#35889,#35890); +#35889 = CARTESIAN_POINT('',(0.,0.5,0.)); +#35890 = VECTOR('',#35891,1.); +#35891 = DIRECTION('',(0.,0.,1.)); +#35892 = ORIENTED_EDGE('',*,*,#35893,.F.); +#35893 = EDGE_CURVE('',#35870,#35886,#35894,.T.); +#35894 = LINE('',#35895,#35896); +#35895 = CARTESIAN_POINT('',(0.,0.,0.35)); +#35896 = VECTOR('',#35897,1.); +#35897 = DIRECTION('',(-0.,1.,0.)); +#35898 = PLANE('',#35899); +#35899 = AXIS2_PLACEMENT_3D('',#35900,#35901,#35902); +#35900 = CARTESIAN_POINT('',(0.,0.,0.)); +#35901 = DIRECTION('',(1.,0.,-0.)); +#35902 = DIRECTION('',(0.,0.,1.)); +#35903 = ADVANCED_FACE('',(#35904),#35961,.F.); +#35904 = FACE_BOUND('',#35905,.F.); +#35905 = EDGE_LOOP('',(#35906,#35916,#35922,#35923,#35931,#35939,#35947, + #35955)); +#35906 = ORIENTED_EDGE('',*,*,#35907,.F.); +#35907 = EDGE_CURVE('',#35908,#35910,#35912,.T.); +#35908 = VERTEX_POINT('',#35909); +#35909 = CARTESIAN_POINT('',(0.25,0.,0.)); +#35910 = VERTEX_POINT('',#35911); +#35911 = CARTESIAN_POINT('',(0.25,0.,3.5E-02)); +#35912 = LINE('',#35913,#35914); +#35913 = CARTESIAN_POINT('',(0.25,0.,0.)); +#35914 = VECTOR('',#35915,1.); +#35915 = DIRECTION('',(0.,0.,1.)); +#35916 = ORIENTED_EDGE('',*,*,#35917,.F.); +#35917 = EDGE_CURVE('',#35868,#35908,#35918,.T.); +#35918 = LINE('',#35919,#35920); +#35919 = CARTESIAN_POINT('',(0.,0.,0.)); +#35920 = VECTOR('',#35921,1.); +#35921 = DIRECTION('',(1.,0.,-0.)); +#35922 = ORIENTED_EDGE('',*,*,#35867,.T.); +#35923 = ORIENTED_EDGE('',*,*,#35924,.T.); +#35924 = EDGE_CURVE('',#35870,#35925,#35927,.T.); +#35925 = VERTEX_POINT('',#35926); +#35926 = CARTESIAN_POINT('',(0.25,0.,0.35)); +#35927 = LINE('',#35928,#35929); +#35928 = CARTESIAN_POINT('',(0.,0.,0.35)); +#35929 = VECTOR('',#35930,1.); +#35930 = DIRECTION('',(1.,0.,-0.)); +#35931 = ORIENTED_EDGE('',*,*,#35932,.F.); +#35932 = EDGE_CURVE('',#35933,#35925,#35935,.T.); +#35933 = VERTEX_POINT('',#35934); +#35934 = CARTESIAN_POINT('',(0.25,0.,0.315)); +#35935 = LINE('',#35936,#35937); +#35936 = CARTESIAN_POINT('',(0.25,0.,0.)); +#35937 = VECTOR('',#35938,1.); +#35938 = DIRECTION('',(0.,0.,1.)); +#35939 = ORIENTED_EDGE('',*,*,#35940,.F.); +#35940 = EDGE_CURVE('',#35941,#35933,#35943,.T.); +#35941 = VERTEX_POINT('',#35942); +#35942 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#35943 = LINE('',#35944,#35945); +#35944 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#35945 = VECTOR('',#35946,1.); +#35946 = DIRECTION('',(1.,0.,-0.)); +#35947 = ORIENTED_EDGE('',*,*,#35948,.F.); +#35948 = EDGE_CURVE('',#35949,#35941,#35951,.T.); +#35949 = VERTEX_POINT('',#35950); +#35950 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35951 = LINE('',#35952,#35953); +#35952 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35953 = VECTOR('',#35954,1.); +#35954 = DIRECTION('',(0.,0.,1.)); +#35955 = ORIENTED_EDGE('',*,*,#35956,.T.); +#35956 = EDGE_CURVE('',#35949,#35910,#35957,.T.); +#35957 = LINE('',#35958,#35959); +#35958 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#35959 = VECTOR('',#35960,1.); +#35960 = DIRECTION('',(1.,0.,-0.)); +#35961 = PLANE('',#35962); +#35962 = AXIS2_PLACEMENT_3D('',#35963,#35964,#35965); +#35963 = CARTESIAN_POINT('',(0.,0.,0.)); +#35964 = DIRECTION('',(-0.,1.,0.)); +#35965 = DIRECTION('',(0.,0.,1.)); +#35966 = ADVANCED_FACE('',(#35967),#35985,.T.); +#35967 = FACE_BOUND('',#35968,.T.); +#35968 = EDGE_LOOP('',(#35969,#35970,#35971,#35979)); +#35969 = ORIENTED_EDGE('',*,*,#35893,.F.); +#35970 = ORIENTED_EDGE('',*,*,#35924,.T.); +#35971 = ORIENTED_EDGE('',*,*,#35972,.T.); +#35972 = EDGE_CURVE('',#35925,#35973,#35975,.T.); +#35973 = VERTEX_POINT('',#35974); +#35974 = CARTESIAN_POINT('',(0.25,0.5,0.35)); +#35975 = LINE('',#35976,#35977); +#35976 = CARTESIAN_POINT('',(0.25,0.,0.35)); +#35977 = VECTOR('',#35978,1.); +#35978 = DIRECTION('',(0.,1.,0.)); +#35979 = ORIENTED_EDGE('',*,*,#35980,.F.); +#35980 = EDGE_CURVE('',#35886,#35973,#35981,.T.); +#35981 = LINE('',#35982,#35983); +#35982 = CARTESIAN_POINT('',(0.,0.5,0.35)); +#35983 = VECTOR('',#35984,1.); +#35984 = DIRECTION('',(1.,0.,-0.)); +#35985 = PLANE('',#35986); +#35986 = AXIS2_PLACEMENT_3D('',#35987,#35988,#35989); +#35987 = CARTESIAN_POINT('',(0.,0.,0.35)); +#35988 = DIRECTION('',(0.,0.,1.)); +#35989 = DIRECTION('',(1.,0.,-0.)); +#35990 = ADVANCED_FACE('',(#35991),#36041,.T.); +#35991 = FACE_BOUND('',#35992,.T.); +#35992 = EDGE_LOOP('',(#35993,#36003,#36009,#36010,#36011,#36019,#36027, + #36035)); +#35993 = ORIENTED_EDGE('',*,*,#35994,.F.); +#35994 = EDGE_CURVE('',#35995,#35997,#35999,.T.); +#35995 = VERTEX_POINT('',#35996); +#35996 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#35997 = VERTEX_POINT('',#35998); +#35998 = CARTESIAN_POINT('',(0.25,0.5,3.5E-02)); +#35999 = LINE('',#36000,#36001); +#36000 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#36001 = VECTOR('',#36002,1.); +#36002 = DIRECTION('',(0.,0.,1.)); +#36003 = ORIENTED_EDGE('',*,*,#36004,.F.); +#36004 = EDGE_CURVE('',#35878,#35995,#36005,.T.); +#36005 = LINE('',#36006,#36007); +#36006 = CARTESIAN_POINT('',(0.,0.5,0.)); +#36007 = VECTOR('',#36008,1.); +#36008 = DIRECTION('',(1.,0.,-0.)); +#36009 = ORIENTED_EDGE('',*,*,#35885,.T.); +#36010 = ORIENTED_EDGE('',*,*,#35980,.T.); +#36011 = ORIENTED_EDGE('',*,*,#36012,.F.); +#36012 = EDGE_CURVE('',#36013,#35973,#36015,.T.); +#36013 = VERTEX_POINT('',#36014); +#36014 = CARTESIAN_POINT('',(0.25,0.5,0.315)); +#36015 = LINE('',#36016,#36017); +#36016 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#36017 = VECTOR('',#36018,1.); +#36018 = DIRECTION('',(0.,0.,1.)); +#36019 = ORIENTED_EDGE('',*,*,#36020,.F.); +#36020 = EDGE_CURVE('',#36021,#36013,#36023,.T.); +#36021 = VERTEX_POINT('',#36022); +#36022 = CARTESIAN_POINT('',(3.5E-02,0.5,0.315)); +#36023 = LINE('',#36024,#36025); +#36024 = CARTESIAN_POINT('',(3.5E-02,0.5,0.315)); +#36025 = VECTOR('',#36026,1.); +#36026 = DIRECTION('',(1.,0.,-0.)); +#36027 = ORIENTED_EDGE('',*,*,#36028,.F.); +#36028 = EDGE_CURVE('',#36029,#36021,#36031,.T.); +#36029 = VERTEX_POINT('',#36030); +#36030 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#36031 = LINE('',#36032,#36033); +#36032 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#36033 = VECTOR('',#36034,1.); +#36034 = DIRECTION('',(0.,0.,1.)); +#36035 = ORIENTED_EDGE('',*,*,#36036,.T.); +#36036 = EDGE_CURVE('',#36029,#35997,#36037,.T.); +#36037 = LINE('',#36038,#36039); +#36038 = CARTESIAN_POINT('',(3.5E-02,0.5,3.5E-02)); +#36039 = VECTOR('',#36040,1.); +#36040 = DIRECTION('',(1.,0.,-0.)); +#36041 = PLANE('',#36042); +#36042 = AXIS2_PLACEMENT_3D('',#36043,#36044,#36045); +#36043 = CARTESIAN_POINT('',(0.,0.5,0.)); +#36044 = DIRECTION('',(-0.,1.,0.)); +#36045 = DIRECTION('',(0.,0.,1.)); +#36046 = ADVANCED_FACE('',(#36047),#36058,.F.); +#36047 = FACE_BOUND('',#36048,.F.); +#36048 = EDGE_LOOP('',(#36049,#36050,#36051,#36057)); +#36049 = ORIENTED_EDGE('',*,*,#35877,.F.); +#36050 = ORIENTED_EDGE('',*,*,#35917,.T.); +#36051 = ORIENTED_EDGE('',*,*,#36052,.T.); +#36052 = EDGE_CURVE('',#35908,#35995,#36053,.T.); +#36053 = LINE('',#36054,#36055); +#36054 = CARTESIAN_POINT('',(0.25,0.,0.)); +#36055 = VECTOR('',#36056,1.); +#36056 = DIRECTION('',(-0.,1.,0.)); +#36057 = ORIENTED_EDGE('',*,*,#36004,.F.); +#36058 = PLANE('',#36059); +#36059 = AXIS2_PLACEMENT_3D('',#36060,#36061,#36062); +#36060 = CARTESIAN_POINT('',(0.,0.,0.)); +#36061 = DIRECTION('',(0.,0.,1.)); +#36062 = DIRECTION('',(1.,0.,-0.)); +#36063 = ADVANCED_FACE('',(#36064),#36075,.T.); +#36064 = FACE_BOUND('',#36065,.T.); +#36065 = EDGE_LOOP('',(#36066,#36067,#36068,#36069)); +#36066 = ORIENTED_EDGE('',*,*,#35907,.F.); +#36067 = ORIENTED_EDGE('',*,*,#36052,.T.); +#36068 = ORIENTED_EDGE('',*,*,#35994,.T.); +#36069 = ORIENTED_EDGE('',*,*,#36070,.T.); +#36070 = EDGE_CURVE('',#35997,#35910,#36071,.T.); +#36071 = LINE('',#36072,#36073); +#36072 = CARTESIAN_POINT('',(0.25,0.,3.5E-02)); +#36073 = VECTOR('',#36074,1.); +#36074 = DIRECTION('',(0.,-1.,0.)); +#36075 = PLANE('',#36076); +#36076 = AXIS2_PLACEMENT_3D('',#36077,#36078,#36079); +#36077 = CARTESIAN_POINT('',(0.25,0.,0.)); +#36078 = DIRECTION('',(1.,0.,-0.)); +#36079 = DIRECTION('',(0.,0.,1.)); +#36080 = ADVANCED_FACE('',(#36081),#36092,.T.); +#36081 = FACE_BOUND('',#36082,.T.); +#36082 = EDGE_LOOP('',(#36083,#36084,#36090,#36091)); +#36083 = ORIENTED_EDGE('',*,*,#36036,.F.); +#36084 = ORIENTED_EDGE('',*,*,#36085,.F.); +#36085 = EDGE_CURVE('',#35949,#36029,#36086,.T.); +#36086 = LINE('',#36087,#36088); +#36087 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#36088 = VECTOR('',#36089,1.); +#36089 = DIRECTION('',(-0.,1.,0.)); +#36090 = ORIENTED_EDGE('',*,*,#35956,.T.); +#36091 = ORIENTED_EDGE('',*,*,#36070,.F.); +#36092 = PLANE('',#36093); +#36093 = AXIS2_PLACEMENT_3D('',#36094,#36095,#36096); +#36094 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#36095 = DIRECTION('',(0.,0.,1.)); +#36096 = DIRECTION('',(1.,0.,-0.)); +#36097 = ADVANCED_FACE('',(#36098),#36109,.T.); +#36098 = FACE_BOUND('',#36099,.T.); +#36099 = EDGE_LOOP('',(#36100,#36101,#36102,#36103)); +#36100 = ORIENTED_EDGE('',*,*,#35948,.F.); +#36101 = ORIENTED_EDGE('',*,*,#36085,.T.); +#36102 = ORIENTED_EDGE('',*,*,#36028,.T.); +#36103 = ORIENTED_EDGE('',*,*,#36104,.F.); +#36104 = EDGE_CURVE('',#35941,#36021,#36105,.T.); +#36105 = LINE('',#36106,#36107); +#36106 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#36107 = VECTOR('',#36108,1.); +#36108 = DIRECTION('',(-0.,1.,0.)); +#36109 = PLANE('',#36110); +#36110 = AXIS2_PLACEMENT_3D('',#36111,#36112,#36113); +#36111 = CARTESIAN_POINT('',(3.5E-02,0.,3.5E-02)); +#36112 = DIRECTION('',(1.,0.,-0.)); +#36113 = DIRECTION('',(0.,0.,1.)); +#36114 = ADVANCED_FACE('',(#36115),#36126,.F.); +#36115 = FACE_BOUND('',#36116,.F.); +#36116 = EDGE_LOOP('',(#36117,#36118,#36119,#36120)); +#36117 = ORIENTED_EDGE('',*,*,#36020,.F.); +#36118 = ORIENTED_EDGE('',*,*,#36104,.F.); +#36119 = ORIENTED_EDGE('',*,*,#35940,.T.); +#36120 = ORIENTED_EDGE('',*,*,#36121,.F.); +#36121 = EDGE_CURVE('',#36013,#35933,#36122,.T.); +#36122 = LINE('',#36123,#36124); +#36123 = CARTESIAN_POINT('',(0.25,0.,0.315)); +#36124 = VECTOR('',#36125,1.); +#36125 = DIRECTION('',(0.,-1.,0.)); +#36126 = PLANE('',#36127); +#36127 = AXIS2_PLACEMENT_3D('',#36128,#36129,#36130); +#36128 = CARTESIAN_POINT('',(3.5E-02,0.,0.315)); +#36129 = DIRECTION('',(0.,0.,1.)); +#36130 = DIRECTION('',(1.,0.,-0.)); +#36131 = ADVANCED_FACE('',(#36132),#36138,.T.); +#36132 = FACE_BOUND('',#36133,.T.); +#36133 = EDGE_LOOP('',(#36134,#36135,#36136,#36137)); +#36134 = ORIENTED_EDGE('',*,*,#35932,.F.); +#36135 = ORIENTED_EDGE('',*,*,#36121,.F.); +#36136 = ORIENTED_EDGE('',*,*,#36012,.T.); +#36137 = ORIENTED_EDGE('',*,*,#35972,.F.); +#36138 = PLANE('',#36139); +#36139 = AXIS2_PLACEMENT_3D('',#36140,#36141,#36142); +#36140 = CARTESIAN_POINT('',(0.25,0.,0.)); +#36141 = DIRECTION('',(1.,0.,-0.)); +#36142 = DIRECTION('',(0.,0.,1.)); +#36143 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#36147)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#36144,#36145,#36146)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#36144 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#36145 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#36146 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#36147 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#36144, + 'distance_accuracy_value','confusion accuracy'); +#36148 = SHAPE_DEFINITION_REPRESENTATION(#36149,#35860); +#36149 = PRODUCT_DEFINITION_SHAPE('','',#36150); +#36150 = PRODUCT_DEFINITION('design','',#36151,#36154); +#36151 = PRODUCT_DEFINITION_FORMATION('','',#36152); +#36152 = PRODUCT('Open CASCADE STEP translator 6.8 20.2.1', + 'Open CASCADE STEP translator 6.8 20.2.1','',(#36153)); +#36153 = PRODUCT_CONTEXT('',#2,'mechanical'); +#36154 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#36155 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#36156,#36158); +#36156 = ( REPRESENTATION_RELATIONSHIP('','',#35860,#35850) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#36157) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#36157 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35851); +#36158 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #36159); +#36159 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('55','97','',#35845,#36150,$); +#36160 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#36152)); +#36161 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#36162,#36164); +#36162 = ( REPRESENTATION_RELATIONSHIP('','',#35850,#35652) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#36163) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#36163 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35657); +#36164 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #36165); +#36165 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('56','98','',#35647,#35845,$); +#36166 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#35847)); +#36167 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#36168,#36170); +#36168 = ( REPRESENTATION_RELATIONSHIP('','',#35850,#35652) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#36169) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#36169 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35661); +#36170 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #36171); +#36171 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('57','99','',#35647,#35845,$); +#36172 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#36173),#36323); +#36173 = MANIFOLD_SOLID_BREP('',#36174); +#36174 = CLOSED_SHELL('',(#36175,#36215,#36255,#36277,#36299,#36311)); +#36175 = ADVANCED_FACE('',(#36176),#36210,.F.); +#36176 = FACE_BOUND('',#36177,.F.); +#36177 = EDGE_LOOP('',(#36178,#36188,#36196,#36204)); +#36178 = ORIENTED_EDGE('',*,*,#36179,.F.); +#36179 = EDGE_CURVE('',#36180,#36182,#36184,.T.); +#36180 = VERTEX_POINT('',#36181); +#36181 = CARTESIAN_POINT('',(0.,0.,0.)); +#36182 = VERTEX_POINT('',#36183); +#36183 = CARTESIAN_POINT('',(0.,0.,3.5E-02)); +#36184 = LINE('',#36185,#36186); +#36185 = CARTESIAN_POINT('',(0.,0.,0.)); +#36186 = VECTOR('',#36187,1.); +#36187 = DIRECTION('',(0.,0.,1.)); +#36188 = ORIENTED_EDGE('',*,*,#36189,.T.); +#36189 = EDGE_CURVE('',#36180,#36190,#36192,.T.); +#36190 = VERTEX_POINT('',#36191); +#36191 = CARTESIAN_POINT('',(0.,0.5,0.)); +#36192 = LINE('',#36193,#36194); +#36193 = CARTESIAN_POINT('',(0.,0.,0.)); +#36194 = VECTOR('',#36195,1.); +#36195 = DIRECTION('',(-0.,1.,0.)); +#36196 = ORIENTED_EDGE('',*,*,#36197,.T.); +#36197 = EDGE_CURVE('',#36190,#36198,#36200,.T.); +#36198 = VERTEX_POINT('',#36199); +#36199 = CARTESIAN_POINT('',(0.,0.5,3.5E-02)); +#36200 = LINE('',#36201,#36202); +#36201 = CARTESIAN_POINT('',(0.,0.5,0.)); +#36202 = VECTOR('',#36203,1.); +#36203 = DIRECTION('',(0.,0.,1.)); +#36204 = ORIENTED_EDGE('',*,*,#36205,.F.); +#36205 = EDGE_CURVE('',#36182,#36198,#36206,.T.); +#36206 = LINE('',#36207,#36208); +#36207 = CARTESIAN_POINT('',(0.,0.,3.5E-02)); +#36208 = VECTOR('',#36209,1.); +#36209 = DIRECTION('',(-0.,1.,0.)); +#36210 = PLANE('',#36211); +#36211 = AXIS2_PLACEMENT_3D('',#36212,#36213,#36214); +#36212 = CARTESIAN_POINT('',(0.,0.,0.)); +#36213 = DIRECTION('',(1.,0.,-0.)); +#36214 = DIRECTION('',(0.,0.,1.)); +#36215 = ADVANCED_FACE('',(#36216),#36250,.T.); +#36216 = FACE_BOUND('',#36217,.T.); +#36217 = EDGE_LOOP('',(#36218,#36228,#36236,#36244)); +#36218 = ORIENTED_EDGE('',*,*,#36219,.F.); +#36219 = EDGE_CURVE('',#36220,#36222,#36224,.T.); +#36220 = VERTEX_POINT('',#36221); +#36221 = CARTESIAN_POINT('',(0.5,0.,0.)); +#36222 = VERTEX_POINT('',#36223); +#36223 = CARTESIAN_POINT('',(0.5,0.,3.5E-02)); +#36224 = LINE('',#36225,#36226); +#36225 = CARTESIAN_POINT('',(0.5,0.,0.)); +#36226 = VECTOR('',#36227,1.); +#36227 = DIRECTION('',(0.,0.,1.)); +#36228 = ORIENTED_EDGE('',*,*,#36229,.T.); +#36229 = EDGE_CURVE('',#36220,#36230,#36232,.T.); +#36230 = VERTEX_POINT('',#36231); +#36231 = CARTESIAN_POINT('',(0.5,0.5,0.)); +#36232 = LINE('',#36233,#36234); +#36233 = CARTESIAN_POINT('',(0.5,0.,0.)); +#36234 = VECTOR('',#36235,1.); +#36235 = DIRECTION('',(-0.,1.,0.)); +#36236 = ORIENTED_EDGE('',*,*,#36237,.T.); +#36237 = EDGE_CURVE('',#36230,#36238,#36240,.T.); +#36238 = VERTEX_POINT('',#36239); +#36239 = CARTESIAN_POINT('',(0.5,0.5,3.5E-02)); +#36240 = LINE('',#36241,#36242); +#36241 = CARTESIAN_POINT('',(0.5,0.5,0.)); +#36242 = VECTOR('',#36243,1.); +#36243 = DIRECTION('',(0.,0.,1.)); +#36244 = ORIENTED_EDGE('',*,*,#36245,.F.); +#36245 = EDGE_CURVE('',#36222,#36238,#36246,.T.); +#36246 = LINE('',#36247,#36248); +#36247 = CARTESIAN_POINT('',(0.5,0.,3.5E-02)); +#36248 = VECTOR('',#36249,1.); +#36249 = DIRECTION('',(0.,1.,0.)); +#36250 = PLANE('',#36251); +#36251 = AXIS2_PLACEMENT_3D('',#36252,#36253,#36254); +#36252 = CARTESIAN_POINT('',(0.5,0.,0.)); +#36253 = DIRECTION('',(1.,0.,-0.)); +#36254 = DIRECTION('',(0.,0.,1.)); +#36255 = ADVANCED_FACE('',(#36256),#36272,.F.); +#36256 = FACE_BOUND('',#36257,.F.); +#36257 = EDGE_LOOP('',(#36258,#36264,#36265,#36271)); +#36258 = ORIENTED_EDGE('',*,*,#36259,.F.); +#36259 = EDGE_CURVE('',#36180,#36220,#36260,.T.); +#36260 = LINE('',#36261,#36262); +#36261 = CARTESIAN_POINT('',(0.,0.,0.)); +#36262 = VECTOR('',#36263,1.); +#36263 = DIRECTION('',(1.,0.,-0.)); +#36264 = ORIENTED_EDGE('',*,*,#36179,.T.); +#36265 = ORIENTED_EDGE('',*,*,#36266,.T.); +#36266 = EDGE_CURVE('',#36182,#36222,#36267,.T.); +#36267 = LINE('',#36268,#36269); +#36268 = CARTESIAN_POINT('',(0.,0.,3.5E-02)); +#36269 = VECTOR('',#36270,1.); +#36270 = DIRECTION('',(1.,0.,-0.)); +#36271 = ORIENTED_EDGE('',*,*,#36219,.F.); +#36272 = PLANE('',#36273); +#36273 = AXIS2_PLACEMENT_3D('',#36274,#36275,#36276); +#36274 = CARTESIAN_POINT('',(0.,0.,0.)); +#36275 = DIRECTION('',(-0.,1.,0.)); +#36276 = DIRECTION('',(0.,0.,1.)); +#36277 = ADVANCED_FACE('',(#36278),#36294,.T.); +#36278 = FACE_BOUND('',#36279,.T.); +#36279 = EDGE_LOOP('',(#36280,#36286,#36287,#36293)); +#36280 = ORIENTED_EDGE('',*,*,#36281,.F.); +#36281 = EDGE_CURVE('',#36190,#36230,#36282,.T.); +#36282 = LINE('',#36283,#36284); +#36283 = CARTESIAN_POINT('',(0.,0.5,0.)); +#36284 = VECTOR('',#36285,1.); +#36285 = DIRECTION('',(1.,0.,-0.)); +#36286 = ORIENTED_EDGE('',*,*,#36197,.T.); +#36287 = ORIENTED_EDGE('',*,*,#36288,.T.); +#36288 = EDGE_CURVE('',#36198,#36238,#36289,.T.); +#36289 = LINE('',#36290,#36291); +#36290 = CARTESIAN_POINT('',(0.,0.5,3.5E-02)); +#36291 = VECTOR('',#36292,1.); +#36292 = DIRECTION('',(1.,0.,-0.)); +#36293 = ORIENTED_EDGE('',*,*,#36237,.F.); +#36294 = PLANE('',#36295); +#36295 = AXIS2_PLACEMENT_3D('',#36296,#36297,#36298); +#36296 = CARTESIAN_POINT('',(0.,0.5,0.)); +#36297 = DIRECTION('',(-0.,1.,0.)); +#36298 = DIRECTION('',(0.,0.,1.)); +#36299 = ADVANCED_FACE('',(#36300),#36306,.F.); +#36300 = FACE_BOUND('',#36301,.F.); +#36301 = EDGE_LOOP('',(#36302,#36303,#36304,#36305)); +#36302 = ORIENTED_EDGE('',*,*,#36189,.F.); +#36303 = ORIENTED_EDGE('',*,*,#36259,.T.); +#36304 = ORIENTED_EDGE('',*,*,#36229,.T.); +#36305 = ORIENTED_EDGE('',*,*,#36281,.F.); +#36306 = PLANE('',#36307); +#36307 = AXIS2_PLACEMENT_3D('',#36308,#36309,#36310); +#36308 = CARTESIAN_POINT('',(0.,0.,0.)); +#36309 = DIRECTION('',(0.,0.,1.)); +#36310 = DIRECTION('',(1.,0.,-0.)); +#36311 = ADVANCED_FACE('',(#36312),#36318,.T.); +#36312 = FACE_BOUND('',#36313,.T.); +#36313 = EDGE_LOOP('',(#36314,#36315,#36316,#36317)); +#36314 = ORIENTED_EDGE('',*,*,#36205,.F.); +#36315 = ORIENTED_EDGE('',*,*,#36266,.T.); +#36316 = ORIENTED_EDGE('',*,*,#36245,.T.); +#36317 = ORIENTED_EDGE('',*,*,#36288,.F.); +#36318 = PLANE('',#36319); +#36319 = AXIS2_PLACEMENT_3D('',#36320,#36321,#36322); +#36320 = CARTESIAN_POINT('',(0.,0.,3.5E-02)); +#36321 = DIRECTION('',(0.,0.,1.)); +#36322 = DIRECTION('',(1.,0.,-0.)); +#36323 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#36327)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#36324,#36325,#36326)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#36324 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#36325 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#36326 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#36327 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#36324, + 'distance_accuracy_value','confusion accuracy'); +#36328 = SHAPE_DEFINITION_REPRESENTATION(#36329,#36172); +#36329 = PRODUCT_DEFINITION_SHAPE('','',#36330); +#36330 = PRODUCT_DEFINITION('design','',#36331,#36334); +#36331 = PRODUCT_DEFINITION_FORMATION('','',#36332); +#36332 = PRODUCT('Mark','Mark','',(#36333)); +#36333 = PRODUCT_CONTEXT('',#2,'mechanical'); +#36334 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#36335 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#36336,#36338); +#36336 = ( REPRESENTATION_RELATIONSHIP('','',#36172,#35652) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#36337) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#36337 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35665); +#36338 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #36339); +#36339 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('58','100','',#35647,#36330,$); +#36340 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#36332)); +#36341 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#36342,#36344); +#36342 = ( REPRESENTATION_RELATIONSHIP('','',#35652,#35635) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#36343) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#36343 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35636); +#36344 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #36345); +#36345 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('59','','',#35630,#35647,$); +#36346 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#35649)); +#36347 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#36348,#36350); +#36348 = ( REPRESENTATION_RELATIONSHIP('','',#35635,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#36349) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#36349 = ITEM_DEFINED_TRANSFORMATION('','',#11,#83); +#36350 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #36351); +#36351 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('60','','',#5,#35630,$); +#36352 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#35632)); +#36353 = SHAPE_DEFINITION_REPRESENTATION(#36354,#36360); +#36354 = PRODUCT_DEFINITION_SHAPE('','',#36355); +#36355 = PRODUCT_DEFINITION('design','',#36356,#36359); +#36356 = PRODUCT_DEFINITION_FORMATION('','',#36357); +#36357 = PRODUCT('Q1','Q1','',(#36358)); +#36358 = PRODUCT_CONTEXT('',#2,'mechanical'); +#36359 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#36360 = SHAPE_REPRESENTATION('',(#11,#36361),#36365); +#36361 = AXIS2_PLACEMENT_3D('',#36362,#36363,#36364); +#36362 = CARTESIAN_POINT('',(297.16430664062,169.38710021972,0.)); +#36363 = DIRECTION('',(0.,0.,1.)); +#36364 = DIRECTION('',(-4.371138828674E-08,1.,0.)); +#36365 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#36369)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#36366,#36367,#36368)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#36366 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#36367 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#36368 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#36369 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-05),#36366, + 'distance_accuracy_value','confusion accuracy'); +#36370 = SHAPE_DEFINITION_REPRESENTATION(#36371,#36377); +#36371 = PRODUCT_DEFINITION_SHAPE('','',#36372); +#36372 = PRODUCT_DEFINITION('design','',#36373,#36376); +#36373 = PRODUCT_DEFINITION_FORMATION('','',#36374); +#36374 = PRODUCT('6608419808','6608419808','',(#36375)); +#36375 = PRODUCT_CONTEXT('',#2,'mechanical'); +#36376 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#36377 = SHAPE_REPRESENTATION('',(#11,#36378,#36382,#36386,#36390), + #36394); +#36378 = AXIS2_PLACEMENT_3D('',#36379,#36380,#36381); +#36379 = CARTESIAN_POINT('',(-0.8,-1.45,0.)); +#36380 = DIRECTION('',(0.,0.,1.)); +#36381 = DIRECTION('',(1.,0.,0.)); +#36382 = AXIS2_PLACEMENT_3D('',#36383,#36384,#36385); +#36383 = CARTESIAN_POINT('',(-0.8,-0.95,0.)); +#36384 = DIRECTION('',(0.,0.,1.)); +#36385 = DIRECTION('',(-1.,1.224646799147E-16,0.)); +#36386 = AXIS2_PLACEMENT_3D('',#36387,#36388,#36389); +#36387 = CARTESIAN_POINT('',(-0.8,0.95,0.)); +#36388 = DIRECTION('',(0.,0.,1.)); +#36389 = DIRECTION('',(-1.,1.224646799147E-16,0.)); +#36390 = AXIS2_PLACEMENT_3D('',#36391,#36392,#36393); +#36391 = CARTESIAN_POINT('',(0.8,0.,0.)); +#36392 = DIRECTION('',(0.,0.,1.)); +#36393 = DIRECTION('',(1.,0.,0.)); +#36394 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#36398)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#36395,#36396,#36397)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#36395 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#36396 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#36397 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#36398 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-05),#36395, + 'distance_accuracy_value','confusion accuracy'); +#36399 = SHAPE_DEFINITION_REPRESENTATION(#36400,#36406); +#36400 = PRODUCT_DEFINITION_SHAPE('','',#36401); +#36401 = PRODUCT_DEFINITION('design','',#36402,#36405); +#36402 = PRODUCT_DEFINITION_FORMATION('','',#36403); +#36403 = PRODUCT('Body','Body','',(#36404)); +#36404 = PRODUCT_CONTEXT('',#2,'mechanical'); +#36405 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#36406 = SHAPE_REPRESENTATION('',(#11,#36407),#36411); +#36407 = AXIS2_PLACEMENT_3D('',#36408,#36409,#36410); +#36408 = CARTESIAN_POINT('',(0.,0.,0.)); +#36409 = DIRECTION('',(0.,0.,1.)); +#36410 = DIRECTION('',(1.,0.,0.)); +#36411 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#36415)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#36412,#36413,#36414)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#36412 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#36413 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#36414 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#36415 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-05),#36412, + 'distance_accuracy_value','confusion accuracy'); +#36416 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#36417),#38467); +#36417 = MANIFOLD_SOLID_BREP('',#36418); +#36418 = CLOSED_SHELL('',(#36419,#36459,#36492,#36525,#36558,#36591, + #36608,#36625,#36656,#36687,#36704,#36735,#36752,#36783,#36802, + #36821,#36854,#36873,#36906,#36925,#36958,#36991,#37087,#37183, + #37214,#37310,#37341,#37437,#37468,#37499,#37518,#37537,#37570, + #37589,#37622,#37641,#37674,#37707,#37803,#37899,#37930,#38026, + #38057,#38153,#38184,#38215,#38233,#38251,#38284,#38302,#38333, + #38351,#38382,#38411,#38422,#38433,#38445,#38456)); +#36419 = ADVANCED_FACE('',(#36420),#36454,.F.); +#36420 = FACE_BOUND('',#36421,.F.); +#36421 = EDGE_LOOP('',(#36422,#36432,#36440,#36448)); +#36422 = ORIENTED_EDGE('',*,*,#36423,.F.); +#36423 = EDGE_CURVE('',#36424,#36426,#36428,.T.); +#36424 = VERTEX_POINT('',#36425); +#36425 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,0.1)); +#36426 = VERTEX_POINT('',#36427); +#36427 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,0.1)); +#36428 = LINE('',#36429,#36430); +#36429 = CARTESIAN_POINT('',(0.139964916181,4.99245117512E-02,0.1)); +#36430 = VECTOR('',#36431,1.); +#36431 = DIRECTION('',(-0.,1.,-0.)); +#36432 = ORIENTED_EDGE('',*,*,#36433,.T.); +#36433 = EDGE_CURVE('',#36424,#36434,#36436,.T.); +#36434 = VERTEX_POINT('',#36435); +#36435 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,0.1)); +#36436 = LINE('',#36437,#36438); +#36437 = CARTESIAN_POINT('',(4.99245117512E-02,0.139964916181,0.1)); +#36438 = VECTOR('',#36439,1.); +#36439 = DIRECTION('',(1.,0.,-0.)); +#36440 = ORIENTED_EDGE('',*,*,#36441,.T.); +#36441 = EDGE_CURVE('',#36434,#36442,#36444,.T.); +#36442 = VERTEX_POINT('',#36443); +#36443 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,0.1)); +#36444 = LINE('',#36445,#36446); +#36445 = CARTESIAN_POINT('',(1.460035083819,4.99245117512E-02,0.1)); +#36446 = VECTOR('',#36447,1.); +#36447 = DIRECTION('',(-0.,1.,-0.)); +#36448 = ORIENTED_EDGE('',*,*,#36449,.F.); +#36449 = EDGE_CURVE('',#36426,#36442,#36450,.T.); +#36450 = LINE('',#36451,#36452); +#36451 = CARTESIAN_POINT('',(4.99245117512E-02,2.760035083819,0.1)); +#36452 = VECTOR('',#36453,1.); +#36453 = DIRECTION('',(1.,-0.,-0.)); +#36454 = PLANE('',#36455); +#36455 = AXIS2_PLACEMENT_3D('',#36456,#36457,#36458); +#36456 = CARTESIAN_POINT('',(0.,0.,0.1)); +#36457 = DIRECTION('',(0.,0.,1.)); +#36458 = DIRECTION('',(1.,0.,-0.)); +#36459 = ADVANCED_FACE('',(#36460),#36487,.T.); +#36460 = FACE_BOUND('',#36461,.T.); +#36461 = EDGE_LOOP('',(#36462,#36463,#36472,#36480)); +#36462 = ORIENTED_EDGE('',*,*,#36423,.F.); +#36463 = ORIENTED_EDGE('',*,*,#36464,.T.); +#36464 = EDGE_CURVE('',#36424,#36465,#36467,.T.); +#36465 = VERTEX_POINT('',#36466); +#36466 = CARTESIAN_POINT('',(4.051272664415E-02,0.139964916181, + 0.189547153673)); +#36467 = CIRCLE('',#36468,0.1); +#36468 = AXIS2_PLACEMENT_3D('',#36469,#36470,#36471); +#36469 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,0.2)); +#36470 = DIRECTION('',(-2.790846108557E-16,1.,0.)); +#36471 = DIRECTION('',(0.,0.,-1.)); +#36472 = ORIENTED_EDGE('',*,*,#36473,.T.); +#36473 = EDGE_CURVE('',#36465,#36474,#36476,.T.); +#36474 = VERTEX_POINT('',#36475); +#36475 = CARTESIAN_POINT('',(4.051272664415E-02,2.760035083819, + 0.189547153673)); +#36476 = LINE('',#36477,#36478); +#36477 = CARTESIAN_POINT('',(4.051272664415E-02,4.99245117512E-02, + 0.189547153673)); +#36478 = VECTOR('',#36479,1.); +#36479 = DIRECTION('',(-0.,1.,-0.)); +#36480 = ORIENTED_EDGE('',*,*,#36481,.F.); +#36481 = EDGE_CURVE('',#36426,#36474,#36482,.T.); +#36482 = CIRCLE('',#36483,0.1); +#36483 = AXIS2_PLACEMENT_3D('',#36484,#36485,#36486); +#36484 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,0.2)); +#36485 = DIRECTION('',(4.465353773691E-15,1.,0.)); +#36486 = DIRECTION('',(0.,0.,-1.)); +#36487 = CYLINDRICAL_SURFACE('',#36488,0.1); +#36488 = AXIS2_PLACEMENT_3D('',#36489,#36490,#36491); +#36489 = CARTESIAN_POINT('',(0.139964916181,4.99245117512E-02,0.2)); +#36490 = DIRECTION('',(-0.,1.,-0.)); +#36491 = DIRECTION('',(0.,0.,-1.)); +#36492 = ADVANCED_FACE('',(#36493),#36520,.T.); +#36493 = FACE_BOUND('',#36494,.T.); +#36494 = EDGE_LOOP('',(#36495,#36496,#36505,#36513)); +#36495 = ORIENTED_EDGE('',*,*,#36433,.T.); +#36496 = ORIENTED_EDGE('',*,*,#36497,.F.); +#36497 = EDGE_CURVE('',#36498,#36434,#36500,.T.); +#36498 = VERTEX_POINT('',#36499); +#36499 = CARTESIAN_POINT('',(1.460035083819,4.051272664415E-02, + 0.189547153673)); +#36500 = CIRCLE('',#36501,0.1); +#36501 = AXIS2_PLACEMENT_3D('',#36502,#36503,#36504); +#36502 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,0.2)); +#36503 = DIRECTION('',(1.,-0.,0.)); +#36504 = DIRECTION('',(0.,0.104528463268,-0.994521895368)); +#36505 = ORIENTED_EDGE('',*,*,#36506,.F.); +#36506 = EDGE_CURVE('',#36507,#36498,#36509,.T.); +#36507 = VERTEX_POINT('',#36508); +#36508 = CARTESIAN_POINT('',(0.139964916181,4.051272664415E-02, + 0.189547153673)); +#36509 = LINE('',#36510,#36511); +#36510 = CARTESIAN_POINT('',(4.99245117512E-02,4.051272664415E-02, + 0.189547153673)); +#36511 = VECTOR('',#36512,1.); +#36512 = DIRECTION('',(1.,0.,-0.)); +#36513 = ORIENTED_EDGE('',*,*,#36514,.T.); +#36514 = EDGE_CURVE('',#36507,#36424,#36515,.T.); +#36515 = CIRCLE('',#36516,0.1); +#36516 = AXIS2_PLACEMENT_3D('',#36517,#36518,#36519); +#36517 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,0.2)); +#36518 = DIRECTION('',(1.,-0.,0.)); +#36519 = DIRECTION('',(0.,0.104528463268,-0.994521895368)); +#36520 = CYLINDRICAL_SURFACE('',#36521,0.1); +#36521 = AXIS2_PLACEMENT_3D('',#36522,#36523,#36524); +#36522 = CARTESIAN_POINT('',(4.99245117512E-02,0.139964916181,0.2)); +#36523 = DIRECTION('',(1.,0.,-0.)); +#36524 = DIRECTION('',(0.,-0.,-1.)); +#36525 = ADVANCED_FACE('',(#36526),#36553,.T.); +#36526 = FACE_BOUND('',#36527,.T.); +#36527 = EDGE_LOOP('',(#36528,#36537,#36545,#36552)); +#36528 = ORIENTED_EDGE('',*,*,#36529,.F.); +#36529 = EDGE_CURVE('',#36530,#36426,#36532,.T.); +#36530 = VERTEX_POINT('',#36531); +#36531 = CARTESIAN_POINT('',(0.139964916181,2.859487273356, + 0.189547153673)); +#36532 = CIRCLE('',#36533,0.1); +#36533 = AXIS2_PLACEMENT_3D('',#36534,#36535,#36536); +#36534 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,0.2)); +#36535 = DIRECTION('',(-1.,-0.,0.)); +#36536 = DIRECTION('',(0.,-0.104528463268,-0.994521895368)); +#36537 = ORIENTED_EDGE('',*,*,#36538,.T.); +#36538 = EDGE_CURVE('',#36530,#36539,#36541,.T.); +#36539 = VERTEX_POINT('',#36540); +#36540 = CARTESIAN_POINT('',(1.460035083819,2.859487273356, + 0.189547153673)); +#36541 = LINE('',#36542,#36543); +#36542 = CARTESIAN_POINT('',(4.99245117512E-02,2.859487273356, + 0.189547153673)); +#36543 = VECTOR('',#36544,1.); +#36544 = DIRECTION('',(1.,-0.,-0.)); +#36545 = ORIENTED_EDGE('',*,*,#36546,.F.); +#36546 = EDGE_CURVE('',#36442,#36539,#36547,.T.); +#36547 = CIRCLE('',#36548,0.1); +#36548 = AXIS2_PLACEMENT_3D('',#36549,#36550,#36551); +#36549 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,0.2)); +#36550 = DIRECTION('',(1.,-2.4660551708E-15,-2.22044604925E-15)); +#36551 = DIRECTION('',(-2.22044604925E-15,0.,-1.)); +#36552 = ORIENTED_EDGE('',*,*,#36449,.F.); +#36553 = CYLINDRICAL_SURFACE('',#36554,0.1); +#36554 = AXIS2_PLACEMENT_3D('',#36555,#36556,#36557); +#36555 = CARTESIAN_POINT('',(4.99245117512E-02,2.760035083819,0.2)); +#36556 = DIRECTION('',(1.,-0.,-0.)); +#36557 = DIRECTION('',(-0.,-0.,-1.)); +#36558 = ADVANCED_FACE('',(#36559),#36586,.T.); +#36559 = FACE_BOUND('',#36560,.T.); +#36560 = EDGE_LOOP('',(#36561,#36570,#36578,#36585)); +#36561 = ORIENTED_EDGE('',*,*,#36562,.F.); +#36562 = EDGE_CURVE('',#36563,#36442,#36565,.T.); +#36563 = VERTEX_POINT('',#36564); +#36564 = CARTESIAN_POINT('',(1.559487273356,2.760035083819, + 0.189547153673)); +#36565 = CIRCLE('',#36566,0.1); +#36566 = AXIS2_PLACEMENT_3D('',#36567,#36568,#36569); +#36567 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,0.2)); +#36568 = DIRECTION('',(0.,1.,0.)); +#36569 = DIRECTION('',(-0.104528463268,0.,-0.994521895368)); +#36570 = ORIENTED_EDGE('',*,*,#36571,.F.); +#36571 = EDGE_CURVE('',#36572,#36563,#36574,.T.); +#36572 = VERTEX_POINT('',#36573); +#36573 = CARTESIAN_POINT('',(1.559487273356,0.139964916181, + 0.189547153673)); +#36574 = LINE('',#36575,#36576); +#36575 = CARTESIAN_POINT('',(1.559487273356,4.99245117512E-02, + 0.189547153673)); +#36576 = VECTOR('',#36577,1.); +#36577 = DIRECTION('',(-0.,1.,-0.)); +#36578 = ORIENTED_EDGE('',*,*,#36579,.F.); +#36579 = EDGE_CURVE('',#36434,#36572,#36580,.T.); +#36580 = CIRCLE('',#36581,0.1); +#36581 = AXIS2_PLACEMENT_3D('',#36582,#36583,#36584); +#36582 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,0.2)); +#36583 = DIRECTION('',(0.,-1.,0.)); +#36584 = DIRECTION('',(0.,0.,-1.)); +#36585 = ORIENTED_EDGE('',*,*,#36441,.T.); +#36586 = CYLINDRICAL_SURFACE('',#36587,0.1); +#36587 = AXIS2_PLACEMENT_3D('',#36588,#36589,#36590); +#36588 = CARTESIAN_POINT('',(1.460035083819,4.99245117512E-02,0.2)); +#36589 = DIRECTION('',(-0.,1.,-0.)); +#36590 = DIRECTION('',(0.,0.,-1.)); +#36591 = ADVANCED_FACE('',(#36592),#36603,.T.); +#36592 = FACE_BOUND('',#36593,.T.); +#36593 = EDGE_LOOP('',(#36594,#36595,#36602)); +#36594 = ORIENTED_EDGE('',*,*,#36514,.F.); +#36595 = ORIENTED_EDGE('',*,*,#36596,.T.); +#36596 = EDGE_CURVE('',#36507,#36465,#36597,.T.); +#36597 = CIRCLE('',#36598,0.1); +#36598 = AXIS2_PLACEMENT_3D('',#36599,#36600,#36601); +#36599 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,0.2)); +#36600 = DIRECTION('',(0.103962051184,0.103962051184,-0.989132844378)); +#36601 = DIRECTION('',(-0.99458126461,1.086699344846E-02,-0.10339253619) + ); +#36602 = ORIENTED_EDGE('',*,*,#36464,.F.); +#36603 = SPHERICAL_SURFACE('',#36604,0.1); +#36604 = AXIS2_PLACEMENT_3D('',#36605,#36606,#36607); +#36605 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,0.2)); +#36606 = DIRECTION('',(0.,0.994521895368,0.104528463268)); +#36607 = DIRECTION('',(0.,0.104528463268,-0.994521895368)); +#36608 = ADVANCED_FACE('',(#36609),#36620,.T.); +#36609 = FACE_BOUND('',#36610,.T.); +#36610 = EDGE_LOOP('',(#36611,#36612,#36619)); +#36611 = ORIENTED_EDGE('',*,*,#36481,.T.); +#36612 = ORIENTED_EDGE('',*,*,#36613,.F.); +#36613 = EDGE_CURVE('',#36530,#36474,#36614,.T.); +#36614 = CIRCLE('',#36615,0.1); +#36615 = AXIS2_PLACEMENT_3D('',#36616,#36617,#36618); +#36616 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,0.2)); +#36617 = DIRECTION('',(-0.103962051184,0.103962051184,0.989132844378)); +#36618 = DIRECTION('',(-0.99458126461,-1.086699344846E-02,-0.10339253619 + )); +#36619 = ORIENTED_EDGE('',*,*,#36529,.T.); +#36620 = SPHERICAL_SURFACE('',#36621,0.1); +#36621 = AXIS2_PLACEMENT_3D('',#36622,#36623,#36624); +#36622 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,0.2)); +#36623 = DIRECTION('',(0.,-0.994521895368,0.104528463268)); +#36624 = DIRECTION('',(0.,-0.104528463268,-0.994521895368)); +#36625 = ADVANCED_FACE('',(#36626),#36651,.F.); +#36626 = FACE_BOUND('',#36627,.F.); +#36627 = EDGE_LOOP('',(#36628,#36629,#36637,#36645)); +#36628 = ORIENTED_EDGE('',*,*,#36473,.T.); +#36629 = ORIENTED_EDGE('',*,*,#36630,.F.); +#36630 = EDGE_CURVE('',#36631,#36474,#36633,.T.); +#36631 = VERTEX_POINT('',#36632); +#36632 = CARTESIAN_POINT('',(5.478104631726E-04,2.8,0.569787931602)); +#36633 = LINE('',#36634,#36635); +#36634 = CARTESIAN_POINT('',(-1.074890013952E-03,2.801622700477, + 0.585226895341)); +#36635 = VECTOR('',#36636,1.); +#36636 = DIRECTION('',(0.103962051184,-0.103962051184,-0.989132844378)); +#36637 = ORIENTED_EDGE('',*,*,#36638,.F.); +#36638 = EDGE_CURVE('',#36639,#36631,#36641,.T.); +#36639 = VERTEX_POINT('',#36640); +#36640 = CARTESIAN_POINT('',(5.478104631727E-04,0.1,0.569787931602)); +#36641 = LINE('',#36642,#36643); +#36642 = CARTESIAN_POINT('',(5.478104631727E-04,0.,0.569787931602)); +#36643 = VECTOR('',#36644,1.); +#36644 = DIRECTION('',(-0.,1.,-0.)); +#36645 = ORIENTED_EDGE('',*,*,#36646,.T.); +#36646 = EDGE_CURVE('',#36639,#36465,#36647,.T.); +#36647 = LINE('',#36648,#36649); +#36648 = CARTESIAN_POINT('',(-1.074890013952E-03,9.837729952288E-02, + 0.585226895341)); +#36649 = VECTOR('',#36650,1.); +#36650 = DIRECTION('',(0.103962051184,0.103962051184,-0.989132844378)); +#36651 = PLANE('',#36652); +#36652 = AXIS2_PLACEMENT_3D('',#36653,#36654,#36655); +#36653 = CARTESIAN_POINT('',(0.,0.,0.575)); +#36654 = DIRECTION('',(0.994521895368,0.,0.104528463268)); +#36655 = DIRECTION('',(-0.,1.,0.)); +#36656 = ADVANCED_FACE('',(#36657),#36682,.T.); +#36657 = FACE_BOUND('',#36658,.T.); +#36658 = EDGE_LOOP('',(#36659,#36660,#36668,#36676)); +#36659 = ORIENTED_EDGE('',*,*,#36506,.T.); +#36660 = ORIENTED_EDGE('',*,*,#36661,.F.); +#36661 = EDGE_CURVE('',#36662,#36498,#36664,.T.); +#36662 = VERTEX_POINT('',#36663); +#36663 = CARTESIAN_POINT('',(1.5,5.478104631727E-04,0.569787931602)); +#36664 = LINE('',#36665,#36666); +#36665 = CARTESIAN_POINT('',(1.501622700477,-1.074890013952E-03, + 0.585226895341)); +#36666 = VECTOR('',#36667,1.); +#36667 = DIRECTION('',(-0.103962051184,0.103962051184,-0.989132844378)); +#36668 = ORIENTED_EDGE('',*,*,#36669,.F.); +#36669 = EDGE_CURVE('',#36670,#36662,#36672,.T.); +#36670 = VERTEX_POINT('',#36671); +#36671 = CARTESIAN_POINT('',(0.1,5.478104631727E-04,0.569787931602)); +#36672 = LINE('',#36673,#36674); +#36673 = CARTESIAN_POINT('',(0.,5.478104631727E-04,0.569787931602)); +#36674 = VECTOR('',#36675,1.); +#36675 = DIRECTION('',(1.,0.,-0.)); +#36676 = ORIENTED_EDGE('',*,*,#36677,.T.); +#36677 = EDGE_CURVE('',#36670,#36507,#36678,.T.); +#36678 = LINE('',#36679,#36680); +#36679 = CARTESIAN_POINT('',(9.837729952288E-02,-1.074890013952E-03, + 0.585226895341)); +#36680 = VECTOR('',#36681,1.); +#36681 = DIRECTION('',(0.103962051184,0.103962051184,-0.989132844378)); +#36682 = PLANE('',#36683); +#36683 = AXIS2_PLACEMENT_3D('',#36684,#36685,#36686); +#36684 = CARTESIAN_POINT('',(0.,0.,0.575)); +#36685 = DIRECTION('',(0.,-0.994521895368,-0.104528463268)); +#36686 = DIRECTION('',(1.,0.,0.)); +#36687 = ADVANCED_FACE('',(#36688),#36699,.T.); +#36688 = FACE_BOUND('',#36689,.T.); +#36689 = EDGE_LOOP('',(#36690,#36691,#36698)); +#36690 = ORIENTED_EDGE('',*,*,#36579,.T.); +#36691 = ORIENTED_EDGE('',*,*,#36692,.F.); +#36692 = EDGE_CURVE('',#36498,#36572,#36693,.T.); +#36693 = CIRCLE('',#36694,0.1); +#36694 = AXIS2_PLACEMENT_3D('',#36695,#36696,#36697); +#36695 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,0.2)); +#36696 = DIRECTION('',(0.103962051184,-0.103962051184,0.989132844378)); +#36697 = DIRECTION('',(0.99458126461,1.086699344846E-02,-0.10339253619) + ); +#36698 = ORIENTED_EDGE('',*,*,#36497,.T.); +#36699 = SPHERICAL_SURFACE('',#36700,0.1); +#36700 = AXIS2_PLACEMENT_3D('',#36701,#36702,#36703); +#36701 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,0.2)); +#36702 = DIRECTION('',(0.,0.994521895368,0.104528463268)); +#36703 = DIRECTION('',(0.,0.104528463268,-0.994521895368)); +#36704 = ADVANCED_FACE('',(#36705),#36730,.F.); +#36705 = FACE_BOUND('',#36706,.F.); +#36706 = EDGE_LOOP('',(#36707,#36708,#36716,#36724)); +#36707 = ORIENTED_EDGE('',*,*,#36538,.T.); +#36708 = ORIENTED_EDGE('',*,*,#36709,.F.); +#36709 = EDGE_CURVE('',#36710,#36539,#36712,.T.); +#36710 = VERTEX_POINT('',#36711); +#36711 = CARTESIAN_POINT('',(1.5,2.899452189537,0.569787931602)); +#36712 = LINE('',#36713,#36714); +#36713 = CARTESIAN_POINT('',(1.501622700477,2.901074890014, + 0.585226895341)); +#36714 = VECTOR('',#36715,1.); +#36715 = DIRECTION('',(-0.103962051184,-0.103962051184,-0.989132844378) + ); +#36716 = ORIENTED_EDGE('',*,*,#36717,.F.); +#36717 = EDGE_CURVE('',#36718,#36710,#36720,.T.); +#36718 = VERTEX_POINT('',#36719); +#36719 = CARTESIAN_POINT('',(0.1,2.899452189537,0.569787931602)); +#36720 = LINE('',#36721,#36722); +#36721 = CARTESIAN_POINT('',(6.938893903907E-18,2.899452189537, + 0.569787931602)); +#36722 = VECTOR('',#36723,1.); +#36723 = DIRECTION('',(1.,-0.,-0.)); +#36724 = ORIENTED_EDGE('',*,*,#36725,.T.); +#36725 = EDGE_CURVE('',#36718,#36530,#36726,.T.); +#36726 = LINE('',#36727,#36728); +#36727 = CARTESIAN_POINT('',(9.837729952288E-02,2.901074890014, + 0.585226895341)); +#36728 = VECTOR('',#36729,1.); +#36729 = DIRECTION('',(0.103962051184,-0.103962051184,-0.989132844378)); +#36730 = PLANE('',#36731); +#36731 = AXIS2_PLACEMENT_3D('',#36732,#36733,#36734); +#36732 = CARTESIAN_POINT('',(0.,2.9,0.575)); +#36733 = DIRECTION('',(0.,-0.994521895368,0.104528463268)); +#36734 = DIRECTION('',(1.,0.,0.)); +#36735 = ADVANCED_FACE('',(#36736),#36747,.T.); +#36736 = FACE_BOUND('',#36737,.T.); +#36737 = EDGE_LOOP('',(#36738,#36739,#36746)); +#36738 = ORIENTED_EDGE('',*,*,#36546,.T.); +#36739 = ORIENTED_EDGE('',*,*,#36740,.F.); +#36740 = EDGE_CURVE('',#36563,#36539,#36741,.T.); +#36741 = CIRCLE('',#36742,0.1); +#36742 = AXIS2_PLACEMENT_3D('',#36743,#36744,#36745); +#36743 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,0.2)); +#36744 = DIRECTION('',(0.103962051184,0.103962051184,0.989132844378)); +#36745 = DIRECTION('',(-1.086699344846E-02,0.99458126461,-0.10339253619) + ); +#36746 = ORIENTED_EDGE('',*,*,#36562,.T.); +#36747 = SPHERICAL_SURFACE('',#36748,0.1); +#36748 = AXIS2_PLACEMENT_3D('',#36749,#36750,#36751); +#36749 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,0.2)); +#36750 = DIRECTION('',(-0.994521895368,0.,0.104528463268)); +#36751 = DIRECTION('',(-0.104528463268,0.,-0.994521895368)); +#36752 = ADVANCED_FACE('',(#36753),#36778,.T.); +#36753 = FACE_BOUND('',#36754,.T.); +#36754 = EDGE_LOOP('',(#36755,#36756,#36764,#36772)); +#36755 = ORIENTED_EDGE('',*,*,#36571,.T.); +#36756 = ORIENTED_EDGE('',*,*,#36757,.F.); +#36757 = EDGE_CURVE('',#36758,#36563,#36760,.T.); +#36758 = VERTEX_POINT('',#36759); +#36759 = CARTESIAN_POINT('',(1.599452189537,2.8,0.569787931602)); +#36760 = LINE('',#36761,#36762); +#36761 = CARTESIAN_POINT('',(1.601074890014,2.801622700477, + 0.585226895341)); +#36762 = VECTOR('',#36763,1.); +#36763 = DIRECTION('',(-0.103962051184,-0.103962051184,-0.989132844378) + ); +#36764 = ORIENTED_EDGE('',*,*,#36765,.F.); +#36765 = EDGE_CURVE('',#36766,#36758,#36768,.T.); +#36766 = VERTEX_POINT('',#36767); +#36767 = CARTESIAN_POINT('',(1.599452189537,0.1,0.569787931602)); +#36768 = LINE('',#36769,#36770); +#36769 = CARTESIAN_POINT('',(1.599452189537,0.,0.569787931602)); +#36770 = VECTOR('',#36771,1.); +#36771 = DIRECTION('',(-0.,1.,-0.)); +#36772 = ORIENTED_EDGE('',*,*,#36773,.T.); +#36773 = EDGE_CURVE('',#36766,#36572,#36774,.T.); +#36774 = LINE('',#36775,#36776); +#36775 = CARTESIAN_POINT('',(1.601074890014,9.837729952288E-02, + 0.585226895341)); +#36776 = VECTOR('',#36777,1.); +#36777 = DIRECTION('',(-0.103962051184,0.103962051184,-0.989132844378)); +#36778 = PLANE('',#36779); +#36779 = AXIS2_PLACEMENT_3D('',#36780,#36781,#36782); +#36780 = CARTESIAN_POINT('',(1.6,0.,0.575)); +#36781 = DIRECTION('',(0.994521895368,0.,-0.104528463268)); +#36782 = DIRECTION('',(0.,1.,0.)); +#36783 = ADVANCED_FACE('',(#36784),#36797,.T.); +#36784 = FACE_BOUND('',#36785,.T.); +#36785 = EDGE_LOOP('',(#36786,#36787,#36788,#36789)); +#36786 = ORIENTED_EDGE('',*,*,#36646,.T.); +#36787 = ORIENTED_EDGE('',*,*,#36596,.F.); +#36788 = ORIENTED_EDGE('',*,*,#36677,.F.); +#36789 = ORIENTED_EDGE('',*,*,#36790,.T.); +#36790 = EDGE_CURVE('',#36670,#36639,#36791,.T.); +#36791 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#36792,#36793,#36794,#36795, + #36796),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.559869909752), + .PIECEWISE_BEZIER_KNOTS.); +#36792 = CARTESIAN_POINT('',(0.1,5.478104631726E-04,0.569787931602)); +#36793 = CARTESIAN_POINT('',(6.121456531329E-02,9.71587865416E-04, + 0.565755958949)); +#36794 = CARTESIAN_POINT('',(2.194375862923E-02,2.194375862923E-02, + 0.563832694814)); +#36795 = CARTESIAN_POINT('',(9.715878654161E-04,6.121456531329E-02, + 0.565755958949)); +#36796 = CARTESIAN_POINT('',(5.478104631726E-04,0.1,0.569787931602)); +#36797 = CYLINDRICAL_SURFACE('',#36798,0.1); +#36798 = AXIS2_PLACEMENT_3D('',#36799,#36800,#36801); +#36799 = CARTESIAN_POINT('',(9.837729952288E-02,9.837729952288E-02, + 0.595679741668)); +#36800 = DIRECTION('',(0.103962051184,0.103962051184,-0.989132844378)); +#36801 = DIRECTION('',(-0.994521895368,-9.1635032895E-14,-0.104528463267 + )); +#36802 = ADVANCED_FACE('',(#36803),#36816,.T.); +#36803 = FACE_BOUND('',#36804,.T.); +#36804 = EDGE_LOOP('',(#36805,#36813,#36814,#36815)); +#36805 = ORIENTED_EDGE('',*,*,#36806,.T.); +#36806 = EDGE_CURVE('',#36631,#36718,#36807,.T.); +#36807 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#36808,#36809,#36810,#36811, + #36812),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.559869909752), + .PIECEWISE_BEZIER_KNOTS.); +#36808 = CARTESIAN_POINT('',(5.478104631727E-04,2.8,0.569787931602)); +#36809 = CARTESIAN_POINT('',(9.715878654161E-04,2.838785434687, + 0.565755958949)); +#36810 = CARTESIAN_POINT('',(2.194375862923E-02,2.878056241371, + 0.563832694814)); +#36811 = CARTESIAN_POINT('',(6.121456531329E-02,2.899028412135, + 0.565755958949)); +#36812 = CARTESIAN_POINT('',(0.1,2.899452189537,0.569787931602)); +#36813 = ORIENTED_EDGE('',*,*,#36725,.T.); +#36814 = ORIENTED_EDGE('',*,*,#36613,.T.); +#36815 = ORIENTED_EDGE('',*,*,#36630,.F.); +#36816 = CYLINDRICAL_SURFACE('',#36817,0.1); +#36817 = AXIS2_PLACEMENT_3D('',#36818,#36819,#36820); +#36818 = CARTESIAN_POINT('',(9.837729952288E-02,2.801622700477, + 0.595679741668)); +#36819 = DIRECTION('',(0.103962051184,-0.103962051184,-0.989132844378)); +#36820 = DIRECTION('',(-0.994521895368,9.1635032895E-14,-0.104528463267) + ); +#36821 = ADVANCED_FACE('',(#36822),#36849,.T.); +#36822 = FACE_BOUND('',#36823,.T.); +#36823 = EDGE_LOOP('',(#36824,#36833,#36841,#36848)); +#36824 = ORIENTED_EDGE('',*,*,#36825,.T.); +#36825 = EDGE_CURVE('',#36639,#36826,#36828,.T.); +#36826 = VERTEX_POINT('',#36827); +#36827 = CARTESIAN_POINT('',(2.775557561563E-17,0.1,0.580240777928)); +#36828 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#36829,#36830,#36831,#36832), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#36829 = CARTESIAN_POINT('',(5.478104631727E-04,0.1,0.569787931602)); +#36830 = CARTESIAN_POINT('',(1.829372939586E-04,0.1,0.573259467913)); +#36831 = CARTESIAN_POINT('',(2.773298807037E-17,0.1,0.576750119424)); +#36832 = CARTESIAN_POINT('',(2.775557561563E-17,0.1,0.580240777928)); +#36833 = ORIENTED_EDGE('',*,*,#36834,.T.); +#36834 = EDGE_CURVE('',#36826,#36835,#36837,.T.); +#36835 = VERTEX_POINT('',#36836); +#36836 = CARTESIAN_POINT('',(8.326672684689E-17,2.8,0.580240777928)); +#36837 = LINE('',#36838,#36839); +#36838 = CARTESIAN_POINT('',(2.775557561563E-17,0.,0.580240777928)); +#36839 = VECTOR('',#36840,1.); +#36840 = DIRECTION('',(-0.,1.,-0.)); +#36841 = ORIENTED_EDGE('',*,*,#36842,.T.); +#36842 = EDGE_CURVE('',#36835,#36631,#36843,.T.); +#36843 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#36844,#36845,#36846,#36847), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#36844 = CARTESIAN_POINT('',(1.387778780781E-17,2.8,0.580240777928)); +#36845 = CARTESIAN_POINT('',(1.387439967603E-17,2.8,0.576750119424)); +#36846 = CARTESIAN_POINT('',(1.829372939586E-04,2.8,0.573259467913)); +#36847 = CARTESIAN_POINT('',(5.478104631727E-04,2.8,0.569787931602)); +#36848 = ORIENTED_EDGE('',*,*,#36638,.F.); +#36849 = CYLINDRICAL_SURFACE('',#36850,0.1); +#36850 = AXIS2_PLACEMENT_3D('',#36851,#36852,#36853); +#36851 = CARTESIAN_POINT('',(0.1,0.,0.580240777928)); +#36852 = DIRECTION('',(-0.,1.,-0.)); +#36853 = DIRECTION('',(-0.994521895368,-0.,-0.104528463268)); +#36854 = ADVANCED_FACE('',(#36855),#36868,.T.); +#36855 = FACE_BOUND('',#36856,.T.); +#36856 = EDGE_LOOP('',(#36857,#36865,#36866,#36867)); +#36857 = ORIENTED_EDGE('',*,*,#36858,.F.); +#36858 = EDGE_CURVE('',#36662,#36766,#36859,.T.); +#36859 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#36860,#36861,#36862,#36863, + #36864),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.559869909752), + .PIECEWISE_BEZIER_KNOTS.); +#36860 = CARTESIAN_POINT('',(1.5,5.478104631723E-04,0.569787931602)); +#36861 = CARTESIAN_POINT('',(1.538785434687,9.715878654157E-04, + 0.565755958949)); +#36862 = CARTESIAN_POINT('',(1.578056241371,2.194375862923E-02, + 0.563832694814)); +#36863 = CARTESIAN_POINT('',(1.599028412135,6.121456531329E-02, + 0.565755958949)); +#36864 = CARTESIAN_POINT('',(1.599452189537,0.1,0.569787931602)); +#36865 = ORIENTED_EDGE('',*,*,#36661,.T.); +#36866 = ORIENTED_EDGE('',*,*,#36692,.T.); +#36867 = ORIENTED_EDGE('',*,*,#36773,.F.); +#36868 = CYLINDRICAL_SURFACE('',#36869,0.1); +#36869 = AXIS2_PLACEMENT_3D('',#36870,#36871,#36872); +#36870 = CARTESIAN_POINT('',(1.501622700477,9.837729952288E-02, + 0.595679741668)); +#36871 = DIRECTION('',(-0.103962051184,0.103962051184,-0.989132844378)); +#36872 = DIRECTION('',(0.994521895368,-9.1635032895E-14,-0.104528463267) + ); +#36873 = ADVANCED_FACE('',(#36874),#36901,.T.); +#36874 = FACE_BOUND('',#36875,.T.); +#36875 = EDGE_LOOP('',(#36876,#36877,#36886,#36894)); +#36876 = ORIENTED_EDGE('',*,*,#36669,.T.); +#36877 = ORIENTED_EDGE('',*,*,#36878,.F.); +#36878 = EDGE_CURVE('',#36879,#36662,#36881,.T.); +#36879 = VERTEX_POINT('',#36880); +#36880 = CARTESIAN_POINT('',(1.5,-1.387778780781E-17,0.580240777928)); +#36881 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#36882,#36883,#36884,#36885), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#36882 = CARTESIAN_POINT('',(1.5,1.387778780781E-17,0.580240777928)); +#36883 = CARTESIAN_POINT('',(1.5,1.387439967603E-17,0.576750119424)); +#36884 = CARTESIAN_POINT('',(1.5,1.829372939586E-04,0.573259467913)); +#36885 = CARTESIAN_POINT('',(1.5,5.478104631727E-04,0.569787931602)); +#36886 = ORIENTED_EDGE('',*,*,#36887,.F.); +#36887 = EDGE_CURVE('',#36888,#36879,#36890,.T.); +#36888 = VERTEX_POINT('',#36889); +#36889 = CARTESIAN_POINT('',(0.1,-1.387778780781E-17,0.580240777928)); +#36890 = LINE('',#36891,#36892); +#36891 = CARTESIAN_POINT('',(0.,2.775557561563E-17,0.580240777928)); +#36892 = VECTOR('',#36893,1.); +#36893 = DIRECTION('',(1.,0.,-0.)); +#36894 = ORIENTED_EDGE('',*,*,#36895,.T.); +#36895 = EDGE_CURVE('',#36888,#36670,#36896,.T.); +#36896 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#36897,#36898,#36899,#36900), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#36897 = CARTESIAN_POINT('',(0.1,1.387778780781E-17,0.580240777928)); +#36898 = CARTESIAN_POINT('',(0.1,1.387439967603E-17,0.576750119424)); +#36899 = CARTESIAN_POINT('',(0.1,1.829372939586E-04,0.573259467913)); +#36900 = CARTESIAN_POINT('',(0.1,5.478104631727E-04,0.569787931602)); +#36901 = CYLINDRICAL_SURFACE('',#36902,0.1); +#36902 = AXIS2_PLACEMENT_3D('',#36903,#36904,#36905); +#36903 = CARTESIAN_POINT('',(0.,0.1,0.580240777928)); +#36904 = DIRECTION('',(1.,0.,-0.)); +#36905 = DIRECTION('',(0.,-0.994521895368,-0.104528463268)); +#36906 = ADVANCED_FACE('',(#36907),#36920,.T.); +#36907 = FACE_BOUND('',#36908,.T.); +#36908 = EDGE_LOOP('',(#36909,#36917,#36918,#36919)); +#36909 = ORIENTED_EDGE('',*,*,#36910,.T.); +#36910 = EDGE_CURVE('',#36710,#36758,#36911,.T.); +#36911 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#36912,#36913,#36914,#36915, + #36916),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.559869909752), + .PIECEWISE_BEZIER_KNOTS.); +#36912 = CARTESIAN_POINT('',(1.5,2.899452189537,0.569787931602)); +#36913 = CARTESIAN_POINT('',(1.538785434687,2.899028412135, + 0.565755958949)); +#36914 = CARTESIAN_POINT('',(1.578056241371,2.878056241371, + 0.563832694814)); +#36915 = CARTESIAN_POINT('',(1.599028412135,2.838785434687, + 0.565755958949)); +#36916 = CARTESIAN_POINT('',(1.599452189537,2.8,0.569787931602)); +#36917 = ORIENTED_EDGE('',*,*,#36757,.T.); +#36918 = ORIENTED_EDGE('',*,*,#36740,.T.); +#36919 = ORIENTED_EDGE('',*,*,#36709,.F.); +#36920 = CYLINDRICAL_SURFACE('',#36921,0.1); +#36921 = AXIS2_PLACEMENT_3D('',#36922,#36923,#36924); +#36922 = CARTESIAN_POINT('',(1.501622700477,2.801622700477, + 0.595679741668)); +#36923 = DIRECTION('',(-0.103962051184,-0.103962051184,-0.989132844378) + ); +#36924 = DIRECTION('',(9.1635032895E-14,0.994521895368,-0.104528463267) + ); +#36925 = ADVANCED_FACE('',(#36926),#36953,.T.); +#36926 = FACE_BOUND('',#36927,.T.); +#36927 = EDGE_LOOP('',(#36928,#36937,#36945,#36952)); +#36928 = ORIENTED_EDGE('',*,*,#36929,.T.); +#36929 = EDGE_CURVE('',#36718,#36930,#36932,.T.); +#36930 = VERTEX_POINT('',#36931); +#36931 = CARTESIAN_POINT('',(0.1,2.9,0.580240777928)); +#36932 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#36933,#36934,#36935,#36936), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#36933 = CARTESIAN_POINT('',(0.1,2.899452189537,0.569787931602)); +#36934 = CARTESIAN_POINT('',(0.1,2.899817062706,0.573259467913)); +#36935 = CARTESIAN_POINT('',(0.1,2.9,0.576750119424)); +#36936 = CARTESIAN_POINT('',(0.1,2.9,0.580240777928)); +#36937 = ORIENTED_EDGE('',*,*,#36938,.T.); +#36938 = EDGE_CURVE('',#36930,#36939,#36941,.T.); +#36939 = VERTEX_POINT('',#36940); +#36940 = CARTESIAN_POINT('',(1.5,2.9,0.580240777928)); +#36941 = LINE('',#36942,#36943); +#36942 = CARTESIAN_POINT('',(6.938893903907E-18,2.9,0.580240777928)); +#36943 = VECTOR('',#36944,1.); +#36944 = DIRECTION('',(1.,-0.,-0.)); +#36945 = ORIENTED_EDGE('',*,*,#36946,.T.); +#36946 = EDGE_CURVE('',#36939,#36710,#36947,.T.); +#36947 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#36948,#36949,#36950,#36951), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#36948 = CARTESIAN_POINT('',(1.5,2.9,0.580240777928)); +#36949 = CARTESIAN_POINT('',(1.5,2.9,0.576750119424)); +#36950 = CARTESIAN_POINT('',(1.5,2.899817062706,0.573259467913)); +#36951 = CARTESIAN_POINT('',(1.5,2.899452189537,0.569787931602)); +#36952 = ORIENTED_EDGE('',*,*,#36717,.F.); +#36953 = CYLINDRICAL_SURFACE('',#36954,0.1); +#36954 = AXIS2_PLACEMENT_3D('',#36955,#36956,#36957); +#36955 = CARTESIAN_POINT('',(6.938893903907E-18,2.8,0.580240777928)); +#36956 = DIRECTION('',(1.,-0.,-0.)); +#36957 = DIRECTION('',(0.,0.994521895368,-0.104528463268)); +#36958 = ADVANCED_FACE('',(#36959),#36986,.T.); +#36959 = FACE_BOUND('',#36960,.T.); +#36960 = EDGE_LOOP('',(#36961,#36962,#36971,#36979)); +#36961 = ORIENTED_EDGE('',*,*,#36765,.T.); +#36962 = ORIENTED_EDGE('',*,*,#36963,.T.); +#36963 = EDGE_CURVE('',#36758,#36964,#36966,.T.); +#36964 = VERTEX_POINT('',#36965); +#36965 = CARTESIAN_POINT('',(1.6,2.8,0.580240777928)); +#36966 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#36967,#36968,#36969,#36970), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#36967 = CARTESIAN_POINT('',(1.599452189537,2.8,0.569787931602)); +#36968 = CARTESIAN_POINT('',(1.599817062706,2.8,0.573259467913)); +#36969 = CARTESIAN_POINT('',(1.6,2.8,0.576750119424)); +#36970 = CARTESIAN_POINT('',(1.6,2.8,0.580240777928)); +#36971 = ORIENTED_EDGE('',*,*,#36972,.F.); +#36972 = EDGE_CURVE('',#36973,#36964,#36975,.T.); +#36973 = VERTEX_POINT('',#36974); +#36974 = CARTESIAN_POINT('',(1.6,0.1,0.580240777928)); +#36975 = LINE('',#36976,#36977); +#36976 = CARTESIAN_POINT('',(1.6,0.,0.580240777928)); +#36977 = VECTOR('',#36978,1.); +#36978 = DIRECTION('',(-0.,1.,-0.)); +#36979 = ORIENTED_EDGE('',*,*,#36980,.F.); +#36980 = EDGE_CURVE('',#36766,#36973,#36981,.T.); +#36981 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#36982,#36983,#36984,#36985), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#36982 = CARTESIAN_POINT('',(1.599452189537,0.1,0.569787931602)); +#36983 = CARTESIAN_POINT('',(1.599817062706,0.1,0.573259467913)); +#36984 = CARTESIAN_POINT('',(1.6,0.1,0.576750119424)); +#36985 = CARTESIAN_POINT('',(1.6,0.1,0.580240777928)); +#36986 = CYLINDRICAL_SURFACE('',#36987,0.1); +#36987 = AXIS2_PLACEMENT_3D('',#36988,#36989,#36990); +#36988 = CARTESIAN_POINT('',(1.5,0.,0.580240777928)); +#36989 = DIRECTION('',(-0.,1.,-0.)); +#36990 = DIRECTION('',(0.994521895368,0.,-0.104528463268)); +#36991 = ADVANCED_FACE('',(#36992),#37005,.T.); +#36992 = FACE_BOUND('',#36993,.T.); +#36993 = EDGE_LOOP('',(#36994,#36995,#36996,#36997)); +#36994 = ORIENTED_EDGE('',*,*,#36825,.F.); +#36995 = ORIENTED_EDGE('',*,*,#36790,.F.); +#36996 = ORIENTED_EDGE('',*,*,#36895,.F.); +#36997 = ORIENTED_EDGE('',*,*,#36998,.F.); +#36998 = EDGE_CURVE('',#36826,#36888,#36999,.T.); +#36999 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37000,#37001,#37002,#37003, + #37004),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.570796326795), + .PIECEWISE_BEZIER_KNOTS.); +#37000 = CARTESIAN_POINT('',(-1.387778780781E-17,0.1,0.580240777928)); +#37001 = CARTESIAN_POINT('',(6.167905692362E-18,6.073009183013E-02, + 0.580240777928)); +#37002 = CARTESIAN_POINT('',(2.095691611353E-02,2.095691611353E-02, + 0.580240777928)); +#37003 = CARTESIAN_POINT('',(6.073009183013E-02,-9.251858538543E-18, + 0.580240777928)); +#37004 = CARTESIAN_POINT('',(0.1,-1.387778780781E-17,0.580240777928)); +#37005 = B_SPLINE_SURFACE_WITH_KNOTS('',8,8,( + (#37006,#37007,#37008,#37009,#37010,#37011,#37012,#37013,#37014) + ,(#37015,#37016,#37017,#37018,#37019,#37020,#37021,#37022,#37023) + ,(#37024,#37025,#37026,#37027,#37028,#37029,#37030,#37031,#37032) + ,(#37033,#37034,#37035,#37036,#37037,#37038,#37039,#37040,#37041) + ,(#37042,#37043,#37044,#37045,#37046,#37047,#37048,#37049,#37050) + ,(#37051,#37052,#37053,#37054,#37055,#37056,#37057,#37058,#37059) + ,(#37060,#37061,#37062,#37063,#37064,#37065,#37066,#37067,#37068) + ,(#37069,#37070,#37071,#37072,#37073,#37074,#37075,#37076,#37077) + ,(#37078,#37079,#37080,#37081,#37082,#37083,#37084,#37085,#37086 + )),.UNSPECIFIED.,.F.,.F.,.F.,(9,9),(9,9),(-7.778174593052E-02, + 7.778174593052E-02),(-7.315613219613E-03,8.855910256723E-03), + .PIECEWISE_BEZIER_KNOTS.); +#37006 = CARTESIAN_POINT('',(0.110431260161,4.314286116652E-04, + 0.582292534228)); +#37007 = CARTESIAN_POINT('',(0.110359430326,3.594616380889E-04, + 0.580265856781)); +#37008 = CARTESIAN_POINT('',(0.110393110754,3.933739148731E-04, + 0.578244685123)); +#37009 = CARTESIAN_POINT('',(0.110814319133,8.139233408637E-04, + 0.576244605343)); +#37010 = CARTESIAN_POINT('',(0.109469741577,-5.300162847437E-04, + 0.574149414281)); +#37011 = CARTESIAN_POINT('',(0.111674862511,1.674870587128E-03, + 0.572244945928)); +#37012 = CARTESIAN_POINT('',(0.110673666688,6.735465349293E-04, + 0.570167933805)); +#37013 = CARTESIAN_POINT('',(0.110960249713,9.604387129825E-04, + 0.568160825431)); +#37014 = CARTESIAN_POINT('',(0.111418681421,1.418941429969E-03, + 0.566162527791)); +#37015 = CARTESIAN_POINT('',(8.080072614967E-02,-1.699464167264E-03, + 0.581445543083)); +#37016 = CARTESIAN_POINT('',(8.053141895711E-02,-1.9689975079E-03, + 0.579408381183)); +#37017 = CARTESIAN_POINT('',(8.043567625024E-02,-2.065389889675E-03, + 0.577380876298)); +#37018 = CARTESIAN_POINT('',(8.154796584583E-02,-9.508146791664E-04, + 0.575415216245)); +#37019 = CARTESIAN_POINT('',(8.05550322597E-02,-1.945785478222E-03, + 0.573342900584)); +#37020 = CARTESIAN_POINT('',(8.150121672476E-02,-9.990284813911E-04, + 0.571367060197)); +#37021 = CARTESIAN_POINT('',(8.075227932108E-02,-1.747898186578E-03, + 0.569305628224)); +#37022 = CARTESIAN_POINT('',(8.154075795384E-02,-9.590931484243E-04, + 0.56732508823)); +#37023 = CARTESIAN_POINT('',(8.213384558496E-02,-3.660333777122E-04, + 0.565333899139)); +#37024 = CARTESIAN_POINT('',(5.808169405214E-02,3.083466747815E-03, + 0.580966735706)); +#37025 = CARTESIAN_POINT('',(5.85089608221E-02,3.512236094008E-03, + 0.5789662276)); +#37026 = CARTESIAN_POINT('',(5.983165046999E-02,4.836925141745E-03, + 0.577016081633)); +#37027 = CARTESIAN_POINT('',(5.163276979999E-02,-3.379324330067E-03, + 0.574549463596)); +#37028 = CARTESIAN_POINT('',(6.565687878865E-02,1.067252570399E-02, + 0.573290154491)); +#37029 = CARTESIAN_POINT('',(5.180443303049E-02,-3.208085934927E-03, + 0.57050669681)); +#37030 = CARTESIAN_POINT('',(6.094439973838E-02,5.951595315623E-03, + 0.56898764321)); +#37031 = CARTESIAN_POINT('',(5.863210882282E-02,3.633241961774E-03, + 0.566836698386)); +#37032 = CARTESIAN_POINT('',(5.908761826641E-02,4.088195396451E-03, + 0.564838071467)); +#37033 = CARTESIAN_POINT('',(4.431968607526E-02,1.681696661323E-02, + 0.580966122543)); +#37034 = CARTESIAN_POINT('',(4.539820771071E-02,1.789364947409E-02, + 0.579001210416)); +#37035 = CARTESIAN_POINT('',(4.098689724159E-02,1.34800199772E-02, + 0.576736237027)); +#37036 = CARTESIAN_POINT('',(4.987207123784E-02,2.23921257721E-02, + 0.575211885899)); +#37037 = CARTESIAN_POINT('',(2.277104166345E-02,-4.754790595039E-03, + 0.571695399224)); +#37038 = CARTESIAN_POINT('',(5.502258555894E-02,2.754559017509E-02, + 0.571450304029)); +#37039 = CARTESIAN_POINT('',(4.362591836522E-02,1.611547953786E-02, + 0.568787092649)); +#37040 = CARTESIAN_POINT('',(4.56718791553E-02,1.816963313673E-02, + 0.566881205459)); +#37041 = CARTESIAN_POINT('',(4.394543785753E-02,1.644398966494E-02, + 0.564764692574)); +#37042 = CARTESIAN_POINT('',(2.298193622132E-02,2.298193622121E-02, + 0.580562861623)); +#37043 = CARTESIAN_POINT('',(2.164239605554E-02,2.164239605537E-02, + 0.57846812679)); +#37044 = CARTESIAN_POINT('',(2.545262537286E-02,2.545262537058E-02, + 0.576657366696)); +#37045 = CARTESIAN_POINT('',(1.65142624862E-02,1.651426249203E-02, + 0.574124669808)); +#37046 = CARTESIAN_POINT('',(4.544230313342E-02,4.544230312517E-02, + 0.573706575934)); +#37047 = CARTESIAN_POINT('',(1.220064269733E-02,1.220064270475E-02, + 0.569841269866)); +#37048 = CARTESIAN_POINT('',(2.213981168396E-02,2.213981168042E-02, + 0.568382572824)); +#37049 = CARTESIAN_POINT('',(2.307979521289E-02,2.307979521326E-02, + 0.566400663563)); +#37050 = CARTESIAN_POINT('',(2.559561295039E-02,2.559561295095E-02, + 0.564514810223)); +#37051 = CARTESIAN_POINT('',(1.681696661273E-02,4.431968607493E-02, + 0.580966122543)); +#37052 = CARTESIAN_POINT('',(1.789364947262E-02,4.539820770952E-02, + 0.579001210416)); +#37053 = CARTESIAN_POINT('',(1.34800199724E-02,4.098689724048E-02, + 0.576736237027)); +#37054 = CARTESIAN_POINT('',(2.239212578259E-02,4.987207123875E-02, + 0.575211885899)); +#37055 = CARTESIAN_POINT('',(-4.754790603837E-03,2.277104166832E-02, + 0.571695399224)); +#37056 = CARTESIAN_POINT('',(2.754559018343E-02,5.502258555489E-02, + 0.571450304028)); +#37057 = CARTESIAN_POINT('',(1.611547953407E-02,4.362591836735E-02, + 0.568787092649)); +#37058 = CARTESIAN_POINT('',(1.816963313675E-02,4.56718791547E-02, + 0.566881205459)); +#37059 = CARTESIAN_POINT('',(1.644398966532E-02,4.394543785704E-02, + 0.564764692574)); +#37060 = CARTESIAN_POINT('',(3.08346674853E-03,5.808169405271E-02, + 0.580966735706)); +#37061 = CARTESIAN_POINT('',(3.512236095536E-03,5.850896082345E-02, + 0.5789662276)); +#37062 = CARTESIAN_POINT('',(4.836925145303E-03,5.983165047171E-02, + 0.577016081633)); +#37063 = CARTESIAN_POINT('',(-3.379324334127E-03,5.163276980072E-02, + 0.574549463597)); +#37064 = CARTESIAN_POINT('',(1.067252570747E-02,6.565687878512E-02, + 0.573290154491)); +#37065 = CARTESIAN_POINT('',(-3.208085935486E-03,5.180443303631E-02, + 0.57050669681)); +#37066 = CARTESIAN_POINT('',(5.951595317127E-03,6.094439973682E-02, + 0.56898764321)); +#37067 = CARTESIAN_POINT('',(3.633241961782E-03,5.863210882312E-02, + 0.566836698386)); +#37068 = CARTESIAN_POINT('',(4.088195396245E-03,5.908761826658E-02, + 0.564838071467)); +#37069 = CARTESIAN_POINT('',(-1.69946416769E-03,8.080072614925E-02, + 0.581445543083)); +#37070 = CARTESIAN_POINT('',(-1.968997508717E-03,8.053141895632E-02, + 0.579408381183)); +#37071 = CARTESIAN_POINT('',(-2.065389890511E-03,8.043567624958E-02, + 0.577380876298)); +#37072 = CARTESIAN_POINT('',(-9.508146774771E-04,8.154796584697E-02, + 0.575415216245)); +#37073 = CARTESIAN_POINT('',(-1.945785480409E-03,8.055503225839E-02, + 0.573342900585)); +#37074 = CARTESIAN_POINT('',(-9.990284803621E-04,8.150121672499E-02, + 0.571367060196)); +#37075 = CARTESIAN_POINT('',(-1.747898187471E-03,8.075227932052E-02, + 0.569305628224)); +#37076 = CARTESIAN_POINT('',(-9.590931486192E-04,8.15407579536E-02, + 0.567325088229)); +#37077 = CARTESIAN_POINT('',(-3.660333777533E-04,8.213384558487E-02, + 0.565333899139)); +#37078 = CARTESIAN_POINT('',(4.314286120359E-04,0.110431260161, + 0.582292534228)); +#37079 = CARTESIAN_POINT('',(3.594616380705E-04,0.110359430326, + 0.580265856781)); +#37080 = CARTESIAN_POINT('',(3.933739150008E-04,0.110393110754, + 0.578244685123)); +#37081 = CARTESIAN_POINT('',(8.139233411775E-04,0.110814319133, + 0.576244605343)); +#37082 = CARTESIAN_POINT('',(-5.300162854451E-04,0.109469741577, + 0.574149414281)); +#37083 = CARTESIAN_POINT('',(1.674870587849E-03,0.111674862511, + 0.572244945928)); +#37084 = CARTESIAN_POINT('',(6.735465347232E-04,0.110673666688, + 0.570167933805)); +#37085 = CARTESIAN_POINT('',(9.604387131409E-04,0.110960249713, + 0.568160825431)); +#37086 = CARTESIAN_POINT('',(1.418941430352E-03,0.111418681421, + 0.566162527791)); +#37087 = ADVANCED_FACE('',(#37088),#37101,.T.); +#37088 = FACE_BOUND('',#37089,.T.); +#37089 = EDGE_LOOP('',(#37090,#37091,#37092,#37100)); +#37090 = ORIENTED_EDGE('',*,*,#36806,.F.); +#37091 = ORIENTED_EDGE('',*,*,#36842,.F.); +#37092 = ORIENTED_EDGE('',*,*,#37093,.F.); +#37093 = EDGE_CURVE('',#36930,#36835,#37094,.T.); +#37094 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37095,#37096,#37097,#37098, + #37099),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.570796326795), + .PIECEWISE_BEZIER_KNOTS.); +#37095 = CARTESIAN_POINT('',(0.1,2.9,0.580240777928)); +#37096 = CARTESIAN_POINT('',(6.073009183013E-02,2.9,0.580240777928)); +#37097 = CARTESIAN_POINT('',(2.095691611353E-02,2.879043083886, + 0.580240777928)); +#37098 = CARTESIAN_POINT('',(6.96780596184E-17,2.83926990817, + 0.580240777928)); +#37099 = CARTESIAN_POINT('',(7.979727989493E-17,2.8,0.580240777928)); +#37100 = ORIENTED_EDGE('',*,*,#36929,.F.); +#37101 = B_SPLINE_SURFACE_WITH_KNOTS('',8,8,( + (#37102,#37103,#37104,#37105,#37106,#37107,#37108,#37109,#37110) + ,(#37111,#37112,#37113,#37114,#37115,#37116,#37117,#37118,#37119) + ,(#37120,#37121,#37122,#37123,#37124,#37125,#37126,#37127,#37128) + ,(#37129,#37130,#37131,#37132,#37133,#37134,#37135,#37136,#37137) + ,(#37138,#37139,#37140,#37141,#37142,#37143,#37144,#37145,#37146) + ,(#37147,#37148,#37149,#37150,#37151,#37152,#37153,#37154,#37155) + ,(#37156,#37157,#37158,#37159,#37160,#37161,#37162,#37163,#37164) + ,(#37165,#37166,#37167,#37168,#37169,#37170,#37171,#37172,#37173) + ,(#37174,#37175,#37176,#37177,#37178,#37179,#37180,#37181,#37182 + )),.UNSPECIFIED.,.F.,.F.,.F.,(9,9),(9,9),(-7.778174593052E-02, + 7.778174593052E-02),(-7.315613219613E-03,8.855910256723E-03), + .PIECEWISE_BEZIER_KNOTS.); +#37102 = CARTESIAN_POINT('',(4.314286131814E-04,2.789568739837, + 0.582292534228)); +#37103 = CARTESIAN_POINT('',(3.594616381112E-04,2.789640569674, + 0.580265856781)); +#37104 = CARTESIAN_POINT('',(3.933739167483E-04,2.789606889244, + 0.578244685123)); +#37105 = CARTESIAN_POINT('',(8.139233375293E-04,2.78918568087, + 0.576244605343)); +#37106 = CARTESIAN_POINT('',(-5.300162812702E-04,2.790530258419, + 0.574149414281)); +#37107 = CARTESIAN_POINT('',(1.674870585653E-03,2.788325137491, + 0.572244945927)); +#37108 = CARTESIAN_POINT('',(6.735465351006E-04,2.789326333312, + 0.570167933805)); +#37109 = CARTESIAN_POINT('',(9.604387130967E-04,2.789039750287, + 0.568160825431)); +#37110 = CARTESIAN_POINT('',(1.418941430846E-03,2.788581318579, + 0.566162527792)); +#37111 = CARTESIAN_POINT('',(-1.699464169378E-03,2.819199273853, + 0.581445543082)); +#37112 = CARTESIAN_POINT('',(-1.968997511603E-03,2.819468581047, + 0.579408381183)); +#37113 = CARTESIAN_POINT('',(-2.065389895558E-03,2.819564323755, + 0.577380876298)); +#37114 = CARTESIAN_POINT('',(-9.508146668194E-04,2.818452034143, + 0.575415216245)); +#37115 = CARTESIAN_POINT('',(-1.945785493455E-03,2.819444967754, + 0.573342900584)); +#37116 = CARTESIAN_POINT('',(-9.990284729342E-04,2.818498783269, + 0.571367060196)); +#37117 = CARTESIAN_POINT('',(-1.747898189378E-03,2.819247720681, + 0.569305628224)); +#37118 = CARTESIAN_POINT('',(-9.590931490117E-04,2.818459242047, + 0.567325088229)); +#37119 = CARTESIAN_POINT('',(-3.660333778568E-04,2.817866154415, + 0.565333899139)); +#37120 = CARTESIAN_POINT('',(3.083466751902E-03,2.841918305944, + 0.580966735706)); +#37121 = CARTESIAN_POINT('',(3.512236103824E-03,2.841491039167, + 0.578966227601)); +#37122 = CARTESIAN_POINT('',(4.83692516458E-03,2.840168349509, + 0.577016081633)); +#37123 = CARTESIAN_POINT('',(-3.3793243588E-03,2.848367230224, + 0.574549463597)); +#37124 = CARTESIAN_POINT('',(1.067252572509E-02,2.834343121197, + 0.57329015449)); +#37125 = CARTESIAN_POINT('',(-3.208085940769E-03,2.848195566969, + 0.570506696811)); +#37126 = CARTESIAN_POINT('',(5.951595317941E-03,2.839055600262, + 0.568987643209)); +#37127 = CARTESIAN_POINT('',(3.633241962408E-03,2.841367891176, + 0.566836698386)); +#37128 = CARTESIAN_POINT('',(4.088195396996E-03,2.840912381733, + 0.564838071467)); +#37129 = CARTESIAN_POINT('',(1.681696660685E-02,2.855680313931, + 0.580966122543)); +#37130 = CARTESIAN_POINT('',(1.789364945483E-02,2.85460179231, + 0.579001210415)); +#37131 = CARTESIAN_POINT('',(1.348001993021E-02,2.859013102803, + 0.576736237027)); +#37132 = CARTESIAN_POINT('',(2.239212586351E-02,2.850127928675, + 0.575211885899)); +#37133 = CARTESIAN_POINT('',(-4.754790648597E-03,2.877228958382, + 0.571695399226)); +#37134 = CARTESIAN_POINT('',(2.754559020049E-02,2.844977414424, + 0.571450304026)); +#37135 = CARTESIAN_POINT('',(1.611547952963E-02,2.856374081639, + 0.56878709265)); +#37136 = CARTESIAN_POINT('',(1.816963313477E-02,2.854328120848, + 0.566881205458)); +#37137 = CARTESIAN_POINT('',(1.644398966389E-02,2.856054562144, + 0.564764692574)); +#37138 = CARTESIAN_POINT('',(2.298193622867E-02,2.877018063771, + 0.580562861624)); +#37139 = CARTESIAN_POINT('',(2.164239607864E-02,2.87835760392, + 0.578468126791)); +#37140 = CARTESIAN_POINT('',(2.545262543191E-02,2.874547374568, + 0.576657366696)); +#37141 = CARTESIAN_POINT('',(1.651426237834E-02,2.883485737625, + 0.574124669808)); +#37142 = CARTESIAN_POINT('',(4.544230320587E-02,2.85455769679, + 0.573706575932)); +#37143 = CARTESIAN_POINT('',(1.220064267605E-02,2.887799357325, + 0.569841269869)); +#37144 = CARTESIAN_POINT('',(2.21398116927E-02,2.877860188307, + 0.568382572822)); +#37145 = CARTESIAN_POINT('',(2.307979521508E-02,2.876920204785, + 0.566400663563)); +#37146 = CARTESIAN_POINT('',(2.559561295209E-02,2.874404387048, + 0.564514810223)); +#37147 = CARTESIAN_POINT('',(4.431968606868E-02,2.883183033394, + 0.580966122543)); +#37148 = CARTESIAN_POINT('',(4.539820768991E-02,2.882106350548, + 0.579001210415)); +#37149 = CARTESIAN_POINT('',(4.098689718995E-02,2.886519980078, + 0.576736237027)); +#37150 = CARTESIAN_POINT('',(4.987207132972E-02,2.877607874125, + 0.575211885899)); +#37151 = CARTESIAN_POINT('',(2.277104162766E-02,2.904754790646, + 0.571695399226)); +#37152 = CARTESIAN_POINT('',(5.502258556989E-02,2.872454409803, + 0.571450304026)); +#37153 = CARTESIAN_POINT('',(4.362591836109E-02,2.88388452047, + 0.56878709265)); +#37154 = CARTESIAN_POINT('',(4.567187915318E-02,2.881830366865, + 0.566881205459)); +#37155 = CARTESIAN_POINT('',(4.394543785623E-02,2.883556010336, + 0.564764692574)); +#37156 = CARTESIAN_POINT('',(5.808169405703E-02,2.896916533247, + 0.580966735706)); +#37157 = CARTESIAN_POINT('',(5.850896083388E-02,2.896487763894, + 0.578966227601)); +#37158 = CARTESIAN_POINT('',(5.983165049686E-02,2.895163074828, + 0.577016081633)); +#37159 = CARTESIAN_POINT('',(5.163276977573E-02,2.903379324361, + 0.574549463597)); +#37160 = CARTESIAN_POINT('',(6.565687879471E-02,2.88932747428, + 0.57329015449)); +#37161 = CARTESIAN_POINT('',(5.180443304426E-02,2.903208085928, + 0.570506696811)); +#37162 = CARTESIAN_POINT('',(6.094439973699E-02,2.894048404683, + 0.56898764321)); +#37163 = CARTESIAN_POINT('',(5.863210882359E-02,2.896366758038, + 0.566836698386)); +#37164 = CARTESIAN_POINT('',(5.908761826708E-02,2.895911804603, + 0.564838071467)); +#37165 = CARTESIAN_POINT('',(8.08007261467E-02,2.90169946417, + 0.581445543082)); +#37166 = CARTESIAN_POINT('',(8.053141895184E-02,2.901968997513, + 0.579408381183)); +#37167 = CARTESIAN_POINT('',(8.04356762431E-02,2.902065389897, + 0.577380876298)); +#37168 = CARTESIAN_POINT('',(8.154796586023E-02,2.900950814664, + 0.575415216245)); +#37169 = CARTESIAN_POINT('',(8.055503224252E-02,2.901945785497, + 0.573342900584)); +#37170 = CARTESIAN_POINT('',(8.150121673322E-02,2.900999028472, + 0.571367060197)); +#37171 = CARTESIAN_POINT('',(8.075227931684E-02,2.901747898191, + 0.569305628224)); +#37172 = CARTESIAN_POINT('',(8.154075795259E-02,2.90095909315, + 0.567325088229)); +#37173 = CARTESIAN_POINT('',(8.213384558464E-02,2.900366033378, + 0.565333899139)); +#37174 = CARTESIAN_POINT('',(0.110431260163,2.899568571386, + 0.582292534228)); +#37175 = CARTESIAN_POINT('',(0.110359430326,2.899640538362, + 0.580265856781)); +#37176 = CARTESIAN_POINT('',(0.110393110756,2.899606626083, + 0.578244685123)); +#37177 = CARTESIAN_POINT('',(0.11081431913,2.899186076662,0.576244605343 + )); +#37178 = CARTESIAN_POINT('',(0.10946974158,2.900530016282,0.574149414281 + )); +#37179 = CARTESIAN_POINT('',(0.11167486251,2.898325129413,0.572244945927 + )); +#37180 = CARTESIAN_POINT('',(0.110673666688,2.899326453465, + 0.570167933805)); +#37181 = CARTESIAN_POINT('',(0.110960249713,2.899039561286, + 0.568160825431)); +#37182 = CARTESIAN_POINT('',(0.111418681423,2.898581058568, + 0.566162527792)); +#37183 = ADVANCED_FACE('',(#37184),#37209,.F.); +#37184 = FACE_BOUND('',#37185,.F.); +#37185 = EDGE_LOOP('',(#37186,#37187,#37195,#37203)); +#37186 = ORIENTED_EDGE('',*,*,#36834,.T.); +#37187 = ORIENTED_EDGE('',*,*,#37188,.T.); +#37188 = EDGE_CURVE('',#36835,#37189,#37191,.T.); +#37189 = VERTEX_POINT('',#37190); +#37190 = CARTESIAN_POINT('',(1.387778780781E-17,2.8,0.669759222072)); +#37191 = LINE('',#37192,#37193); +#37192 = CARTESIAN_POINT('',(-1.387778780781E-17,2.8,0.575)); +#37193 = VECTOR('',#37194,1.); +#37194 = DIRECTION('',(0.,0.,1.)); +#37195 = ORIENTED_EDGE('',*,*,#37196,.F.); +#37196 = EDGE_CURVE('',#37197,#37189,#37199,.T.); +#37197 = VERTEX_POINT('',#37198); +#37198 = CARTESIAN_POINT('',(-1.387778780781E-17,0.1,0.669759222072)); +#37199 = LINE('',#37200,#37201); +#37200 = CARTESIAN_POINT('',(1.387778780781E-17,0.,0.669759222072)); +#37201 = VECTOR('',#37202,1.); +#37202 = DIRECTION('',(-0.,1.,0.)); +#37203 = ORIENTED_EDGE('',*,*,#37204,.F.); +#37204 = EDGE_CURVE('',#36826,#37197,#37205,.T.); +#37205 = LINE('',#37206,#37207); +#37206 = CARTESIAN_POINT('',(-1.387778780781E-17,0.1,0.575)); +#37207 = VECTOR('',#37208,1.); +#37208 = DIRECTION('',(0.,0.,1.)); +#37209 = PLANE('',#37210); +#37210 = AXIS2_PLACEMENT_3D('',#37211,#37212,#37213); +#37211 = CARTESIAN_POINT('',(0.,0.,0.575)); +#37212 = DIRECTION('',(1.,0.,-0.)); +#37213 = DIRECTION('',(0.,0.,1.)); +#37214 = ADVANCED_FACE('',(#37215),#37228,.F.); +#37215 = FACE_BOUND('',#37216,.F.); +#37216 = EDGE_LOOP('',(#37217,#37218,#37219,#37220)); +#37217 = ORIENTED_EDGE('',*,*,#36980,.F.); +#37218 = ORIENTED_EDGE('',*,*,#36858,.F.); +#37219 = ORIENTED_EDGE('',*,*,#36878,.F.); +#37220 = ORIENTED_EDGE('',*,*,#37221,.F.); +#37221 = EDGE_CURVE('',#36973,#36879,#37222,.T.); +#37222 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37223,#37224,#37225,#37226, + #37227),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.570796326795), + .PIECEWISE_BEZIER_KNOTS.); +#37223 = CARTESIAN_POINT('',(1.6,0.1,0.580240777928)); +#37224 = CARTESIAN_POINT('',(1.6,6.073009183013E-02,0.580240777928)); +#37225 = CARTESIAN_POINT('',(1.579043083886,2.095691611353E-02, + 0.580240777928)); +#37226 = CARTESIAN_POINT('',(1.53926990817,-9.251858538543E-18, + 0.580240777928)); +#37227 = CARTESIAN_POINT('',(1.5,-1.387778780781E-17,0.580240777928)); +#37228 = B_SPLINE_SURFACE_WITH_KNOTS('',8,8,( + (#37229,#37230,#37231,#37232,#37233,#37234,#37235,#37236,#37237) + ,(#37238,#37239,#37240,#37241,#37242,#37243,#37244,#37245,#37246) + ,(#37247,#37248,#37249,#37250,#37251,#37252,#37253,#37254,#37255) + ,(#37256,#37257,#37258,#37259,#37260,#37261,#37262,#37263,#37264) + ,(#37265,#37266,#37267,#37268,#37269,#37270,#37271,#37272,#37273) + ,(#37274,#37275,#37276,#37277,#37278,#37279,#37280,#37281,#37282) + ,(#37283,#37284,#37285,#37286,#37287,#37288,#37289,#37290,#37291) + ,(#37292,#37293,#37294,#37295,#37296,#37297,#37298,#37299,#37300) + ,(#37301,#37302,#37303,#37304,#37305,#37306,#37307,#37308,#37309 + )),.UNSPECIFIED.,.F.,.F.,.F.,(9,9),(9,9),(-7.778174593052E-02, + 7.778174593052E-02),(-7.315613219613E-03,8.855910256723E-03), + .PIECEWISE_BEZIER_KNOTS.); +#37229 = CARTESIAN_POINT('',(1.489568739838,4.31428612687E-04, + 0.582292534228)); +#37230 = CARTESIAN_POINT('',(1.489640569674,3.594616381708E-04, + 0.580265856781)); +#37231 = CARTESIAN_POINT('',(1.489606889245,3.933739159276E-04, + 0.578244685123)); +#37232 = CARTESIAN_POINT('',(1.489185680868,8.139233395244E-04, + 0.576244605343)); +#37233 = CARTESIAN_POINT('',(1.490530258421,-5.300162833387E-04, + 0.574149414281)); +#37234 = CARTESIAN_POINT('',(1.488325137489,1.674870586845E-03, + 0.572244945927)); +#37235 = CARTESIAN_POINT('',(1.489326333312,6.735465350842E-04, + 0.570167933805)); +#37236 = CARTESIAN_POINT('',(1.489039750287,9.604387133202E-04, + 0.568160825431)); +#37237 = CARTESIAN_POINT('',(1.488581318578,1.418941431083E-03, + 0.566162527792)); +#37238 = CARTESIAN_POINT('',(1.519199273852,-1.699464168409E-03, + 0.581445543083)); +#37239 = CARTESIAN_POINT('',(1.519468581045,-1.968997510023E-03, + 0.579408381183)); +#37240 = CARTESIAN_POINT('',(1.519564323752,-2.065389892032E-03, + 0.577380876298)); +#37241 = CARTESIAN_POINT('',(1.518452034149,-9.508146745903E-04, + 0.575415216244)); +#37242 = CARTESIAN_POINT('',(1.519444967747,-1.945785483625E-03, + 0.573342900585)); +#37243 = CARTESIAN_POINT('',(1.518498783272,-9.990284790465E-04, + 0.571367060196)); +#37244 = CARTESIAN_POINT('',(1.519247720681,-1.747898188354E-03, + 0.569305628224)); +#37245 = CARTESIAN_POINT('',(1.518459242047,-9.590931490712E-04, + 0.567325088229)); +#37246 = CARTESIAN_POINT('',(1.517866154415,-3.660333778033E-04, + 0.565333899139)); +#37247 = CARTESIAN_POINT('',(1.541918305946,3.083466749621E-03, + 0.580966735706)); +#37248 = CARTESIAN_POINT('',(1.541491039174,3.512236098217E-03, + 0.5789662276)); +#37249 = CARTESIAN_POINT('',(1.540168349521,4.836925150509E-03, + 0.577016081632)); +#37250 = CARTESIAN_POINT('',(1.548367230203,-3.379324332942E-03, + 0.574549463598)); +#37251 = CARTESIAN_POINT('',(1.534343121218,1.067252569653E-02, + 0.573290154488)); +#37252 = CARTESIAN_POINT('',(1.548195566957,-3.20808592072E-03, + 0.570506696813)); +#37253 = CARTESIAN_POINT('',(1.539055600264,5.951595312321E-03, + 0.568987643209)); +#37254 = CARTESIAN_POINT('',(1.541367891177,3.63324196201E-03, + 0.566836698386)); +#37255 = CARTESIAN_POINT('',(1.540912381733,4.088195396584E-03, + 0.564838071467)); +#37256 = CARTESIAN_POINT('',(1.555680313926,1.681696661179E-02, + 0.580966122543)); +#37257 = CARTESIAN_POINT('',(1.554601792295,1.789364946835E-02, + 0.579001210415)); +#37258 = CARTESIAN_POINT('',(1.559013102775,1.348001996073E-02, + 0.576736237028)); +#37259 = CARTESIAN_POINT('',(1.550127928739,2.23921257964E-02, + 0.575211885896)); +#37260 = CARTESIAN_POINT('',(1.577228958334,-4.754790592951E-03, + 0.571695399228)); +#37261 = CARTESIAN_POINT('',(1.544977414444,2.754559017064E-02, + 0.571450304024)); +#37262 = CARTESIAN_POINT('',(1.556374081635,1.611547953927E-02, + 0.568787092651)); +#37263 = CARTESIAN_POINT('',(1.554328120845,1.816963313618E-02, + 0.566881205458)); +#37264 = CARTESIAN_POINT('',(1.556054562143,1.644398966478E-02, + 0.564764692574)); +#37265 = CARTESIAN_POINT('',(1.577018063778,2.298193622222E-02, + 0.580562861623)); +#37266 = CARTESIAN_POINT('',(1.57835760394,2.164239606017E-02, + 0.578468126791)); +#37267 = CARTESIAN_POINT('',(1.574547374609,2.545262538896E-02, + 0.576657366695)); +#37268 = CARTESIAN_POINT('',(1.58348573754,1.651426246436E-02, + 0.57412466981)); +#37269 = CARTESIAN_POINT('',(1.554557696855,4.544230313884E-02, + 0.57370657593)); +#37270 = CARTESIAN_POINT('',(1.587799357304,1.220064270345E-02, + 0.569841269869)); +#37271 = CARTESIAN_POINT('',(1.577860188313,2.213981168285E-02, + 0.568382572822)); +#37272 = CARTESIAN_POINT('',(1.576920204787,2.3079795214E-02, + 0.566400663563)); +#37273 = CARTESIAN_POINT('',(1.574404387048,2.559561295162E-02, + 0.564514810223)); +#37274 = CARTESIAN_POINT('',(1.583183033388,4.431968607407E-02, + 0.580966122543)); +#37275 = CARTESIAN_POINT('',(1.58210635053,4.539820770624E-02, + 0.579001210415)); +#37276 = CARTESIAN_POINT('',(1.586519980039,4.098689722828E-02, + 0.576736237027)); +#37277 = CARTESIAN_POINT('',(1.5776078742,4.987207125852E-02, + 0.575211885898)); +#37278 = CARTESIAN_POINT('',(1.604754790608,2.277104166101E-02, + 0.571695399226)); +#37279 = CARTESIAN_POINT('',(1.572454409815,5.5022585558E-02, + 0.571450304026)); +#37280 = CARTESIAN_POINT('',(1.583884520468,4.362591836504E-02, + 0.56878709265)); +#37281 = CARTESIAN_POINT('',(1.581830366864,4.567187915355E-02, + 0.566881205459)); +#37282 = CARTESIAN_POINT('',(1.583556010336,4.394543785593E-02, + 0.564764692574)); +#37283 = CARTESIAN_POINT('',(1.596916533251,5.808169405345E-02, + 0.580966735706)); +#37284 = CARTESIAN_POINT('',(1.596487763903,5.850896082498E-02, + 0.5789662276)); +#37285 = CARTESIAN_POINT('',(1.59516307485,5.983165047662E-02, + 0.577016081633)); +#37286 = CARTESIAN_POINT('',(1.603379324338,5.163276979525E-02, + 0.574549463597)); +#37287 = CARTESIAN_POINT('',(1.589327474292,6.565687878861E-02, + 0.57329015449)); +#37288 = CARTESIAN_POINT('',(1.603208085934,5.180443303578E-02, + 0.570506696811)); +#37289 = CARTESIAN_POINT('',(1.594048404682,6.094439973809E-02, + 0.56898764321)); +#37290 = CARTESIAN_POINT('',(1.596366758038,5.863210882368E-02, + 0.566836698386)); +#37291 = CARTESIAN_POINT('',(1.595911804603,5.908761826729E-02, + 0.564838071467)); +#37292 = CARTESIAN_POINT('',(1.601699464168,8.080072614891E-02, + 0.581445543083)); +#37293 = CARTESIAN_POINT('',(1.601968997509,8.053141895576E-02, + 0.579408381183)); +#37294 = CARTESIAN_POINT('',(1.602065389891,8.043567624871E-02, + 0.577380876298)); +#37295 = CARTESIAN_POINT('',(1.600950814676,8.154796584871E-02, + 0.575415216245)); +#37296 = CARTESIAN_POINT('',(1.601945785482,8.055503225616E-02, + 0.573342900584)); +#37297 = CARTESIAN_POINT('',(1.600999028479,8.150121672626E-02, + 0.571367060197)); +#37298 = CARTESIAN_POINT('',(1.601747898188,8.07522793199E-02, + 0.569305628224)); +#37299 = CARTESIAN_POINT('',(1.600959093149,8.154075795335E-02, + 0.567325088229)); +#37300 = CARTESIAN_POINT('',(1.600366033378,8.213384558482E-02, + 0.565333899139)); +#37301 = CARTESIAN_POINT('',(1.599568571388,0.110431260162, + 0.582292534228)); +#37302 = CARTESIAN_POINT('',(1.599640538362,0.110359430326, + 0.580265856781)); +#37303 = CARTESIAN_POINT('',(1.599606626085,0.110393110755, + 0.578244685123)); +#37304 = CARTESIAN_POINT('',(1.59918607666,0.110814319133,0.576244605343 + )); +#37305 = CARTESIAN_POINT('',(1.600530016284,0.109469741578, + 0.574149414281)); +#37306 = CARTESIAN_POINT('',(1.598325129413,0.111674862511, + 0.572244945928)); +#37307 = CARTESIAN_POINT('',(1.599326453465,0.110673666688, + 0.570167933805)); +#37308 = CARTESIAN_POINT('',(1.599039561287,0.110960249713, + 0.568160825431)); +#37309 = CARTESIAN_POINT('',(1.598581058569,0.111418681421, + 0.566162527791)); +#37310 = ADVANCED_FACE('',(#37311),#37336,.F.); +#37311 = FACE_BOUND('',#37312,.F.); +#37312 = EDGE_LOOP('',(#37313,#37314,#37322,#37330)); +#37313 = ORIENTED_EDGE('',*,*,#36887,.F.); +#37314 = ORIENTED_EDGE('',*,*,#37315,.T.); +#37315 = EDGE_CURVE('',#36888,#37316,#37318,.T.); +#37316 = VERTEX_POINT('',#37317); +#37317 = CARTESIAN_POINT('',(0.1,-1.387778780781E-17,0.669759222072)); +#37318 = LINE('',#37319,#37320); +#37319 = CARTESIAN_POINT('',(0.1,-1.387778780781E-17,0.575)); +#37320 = VECTOR('',#37321,1.); +#37321 = DIRECTION('',(0.,0.,1.)); +#37322 = ORIENTED_EDGE('',*,*,#37323,.T.); +#37323 = EDGE_CURVE('',#37316,#37324,#37326,.T.); +#37324 = VERTEX_POINT('',#37325); +#37325 = CARTESIAN_POINT('',(1.5,-1.387778780781E-17,0.669759222072)); +#37326 = LINE('',#37327,#37328); +#37327 = CARTESIAN_POINT('',(0.,1.387778780781E-17,0.669759222072)); +#37328 = VECTOR('',#37329,1.); +#37329 = DIRECTION('',(1.,0.,-0.)); +#37330 = ORIENTED_EDGE('',*,*,#37331,.F.); +#37331 = EDGE_CURVE('',#36879,#37324,#37332,.T.); +#37332 = LINE('',#37333,#37334); +#37333 = CARTESIAN_POINT('',(1.5,-1.387778780781E-17,0.575)); +#37334 = VECTOR('',#37335,1.); +#37335 = DIRECTION('',(0.,0.,1.)); +#37336 = PLANE('',#37337); +#37337 = AXIS2_PLACEMENT_3D('',#37338,#37339,#37340); +#37338 = CARTESIAN_POINT('',(0.,0.,0.575)); +#37339 = DIRECTION('',(-0.,1.,0.)); +#37340 = DIRECTION('',(0.,0.,1.)); +#37341 = ADVANCED_FACE('',(#37342),#37355,.T.); +#37342 = FACE_BOUND('',#37343,.T.); +#37343 = EDGE_LOOP('',(#37344,#37345,#37346,#37354)); +#37344 = ORIENTED_EDGE('',*,*,#36910,.F.); +#37345 = ORIENTED_EDGE('',*,*,#36946,.F.); +#37346 = ORIENTED_EDGE('',*,*,#37347,.F.); +#37347 = EDGE_CURVE('',#36964,#36939,#37348,.T.); +#37348 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37349,#37350,#37351,#37352, + #37353),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.570796326795), + .PIECEWISE_BEZIER_KNOTS.); +#37349 = CARTESIAN_POINT('',(1.6,2.8,0.580240777928)); +#37350 = CARTESIAN_POINT('',(1.6,2.83926990817,0.580240777928)); +#37351 = CARTESIAN_POINT('',(1.579043083886,2.879043083886, + 0.580240777928)); +#37352 = CARTESIAN_POINT('',(1.53926990817,2.9,0.580240777928)); +#37353 = CARTESIAN_POINT('',(1.5,2.9,0.580240777928)); +#37354 = ORIENTED_EDGE('',*,*,#36963,.F.); +#37355 = B_SPLINE_SURFACE_WITH_KNOTS('',8,8,( + (#37356,#37357,#37358,#37359,#37360,#37361,#37362,#37363,#37364) + ,(#37365,#37366,#37367,#37368,#37369,#37370,#37371,#37372,#37373) + ,(#37374,#37375,#37376,#37377,#37378,#37379,#37380,#37381,#37382) + ,(#37383,#37384,#37385,#37386,#37387,#37388,#37389,#37390,#37391) + ,(#37392,#37393,#37394,#37395,#37396,#37397,#37398,#37399,#37400) + ,(#37401,#37402,#37403,#37404,#37405,#37406,#37407,#37408,#37409) + ,(#37410,#37411,#37412,#37413,#37414,#37415,#37416,#37417,#37418) + ,(#37419,#37420,#37421,#37422,#37423,#37424,#37425,#37426,#37427) + ,(#37428,#37429,#37430,#37431,#37432,#37433,#37434,#37435,#37436 + )),.UNSPECIFIED.,.F.,.F.,.F.,(9,9),(9,9),(-7.778174593052E-02, + 7.778174593052E-02),(-8.855910256723E-03,7.315613219614E-03), + .PIECEWISE_BEZIER_KNOTS.); +#37356 = CARTESIAN_POINT('',(1.59858105857,2.788581318579,0.566162527791 + )); +#37357 = CARTESIAN_POINT('',(1.599039561287,2.789039750287, + 0.568160825431)); +#37358 = CARTESIAN_POINT('',(1.599326453464,2.789326333311, + 0.570167933805)); +#37359 = CARTESIAN_POINT('',(1.598325129416,2.788325137493, + 0.572244945927)); +#37360 = CARTESIAN_POINT('',(1.600530016279,2.790530258417, + 0.574149414281)); +#37361 = CARTESIAN_POINT('',(1.599186076664,2.789185680871, + 0.576244605343)); +#37362 = CARTESIAN_POINT('',(1.599606626083,2.789606889243, + 0.578244685123)); +#37363 = CARTESIAN_POINT('',(1.599640538362,2.789640569674, + 0.580265856781)); +#37364 = CARTESIAN_POINT('',(1.599568571386,2.789568739837, + 0.582292534228)); +#37365 = CARTESIAN_POINT('',(1.600366033378,2.817866154415, + 0.565333899139)); +#37366 = CARTESIAN_POINT('',(1.600959093149,2.818459242047, + 0.567325088229)); +#37367 = CARTESIAN_POINT('',(1.601747898189,2.81924772068,0.569305628224 + )); +#37368 = CARTESIAN_POINT('',(1.600999028472,2.818498783268, + 0.571367060196)); +#37369 = CARTESIAN_POINT('',(1.601945785496,2.819444967754, + 0.573342900584)); +#37370 = CARTESIAN_POINT('',(1.600950814664,2.818452034143, + 0.575415216245)); +#37371 = CARTESIAN_POINT('',(1.602065389897,2.819564323755, + 0.577380876298)); +#37372 = CARTESIAN_POINT('',(1.601968997512,2.819468581048, + 0.579408381183)); +#37373 = CARTESIAN_POINT('',(1.60169946417,2.819199273853,0.581445543082 + )); +#37374 = CARTESIAN_POINT('',(1.595911804603,2.840912381733, + 0.564838071467)); +#37375 = CARTESIAN_POINT('',(1.596366758038,2.841367891175, + 0.566836698386)); +#37376 = CARTESIAN_POINT('',(1.594048404684,2.839055600266,0.56898764321 + )); +#37377 = CARTESIAN_POINT('',(1.603208085942,2.848195566964, + 0.570506696811)); +#37378 = CARTESIAN_POINT('',(1.589327474275,2.834343121207,0.57329015449 + )); +#37379 = CARTESIAN_POINT('',(1.60337932436,2.848367230215,0.574549463596 + )); +#37380 = CARTESIAN_POINT('',(1.595163074833,2.840168349513, + 0.577016081633)); +#37381 = CARTESIAN_POINT('',(1.596487763897,2.841491039167,0.5789662276) + ); +#37382 = CARTESIAN_POINT('',(1.596916533248,2.841918305944, + 0.580966735706)); +#37383 = CARTESIAN_POINT('',(1.583556010336,2.856054562144, + 0.564764692574)); +#37384 = CARTESIAN_POINT('',(1.581830366865,2.854328120848, + 0.566881205459)); +#37385 = CARTESIAN_POINT('',(1.583884520467,2.85637408163,0.568787092649 + )); +#37386 = CARTESIAN_POINT('',(1.572454409803,2.844977414442, + 0.571450304027)); +#37387 = CARTESIAN_POINT('',(1.604754790644,2.877228958352, + 0.571695399224)); +#37388 = CARTESIAN_POINT('',(1.577607874141,2.850127928705, + 0.575211885901)); +#37389 = CARTESIAN_POINT('',(1.586519980072,2.859013102792, + 0.576736237026)); +#37390 = CARTESIAN_POINT('',(1.582106350538,2.854601792304, + 0.579001210415)); +#37391 = CARTESIAN_POINT('',(1.58318303339,2.855680313928,0.580966122543 + )); +#37392 = CARTESIAN_POINT('',(1.574404387048,2.874404387048, + 0.564514810223)); +#37393 = CARTESIAN_POINT('',(1.576920204786,2.876920204783, + 0.566400663563)); +#37394 = CARTESIAN_POINT('',(1.577860188312,2.877860188319, + 0.568382572823)); +#37395 = CARTESIAN_POINT('',(1.587799357317,2.887799357301, + 0.569841269867)); +#37396 = CARTESIAN_POINT('',(1.554557696809,2.854557696837, + 0.573706575935)); +#37397 = CARTESIAN_POINT('',(1.583485737604,2.883485737576, + 0.574124669805)); +#37398 = CARTESIAN_POINT('',(1.574547374573,2.874547374589, + 0.576657366698)); +#37399 = CARTESIAN_POINT('',(1.578357603935,2.87835760393,0.57846812679) + ); +#37400 = CARTESIAN_POINT('',(1.577018063776,2.877018063776, + 0.580562861623)); +#37401 = CARTESIAN_POINT('',(1.556054562144,2.883556010336, + 0.564764692574)); +#37402 = CARTESIAN_POINT('',(1.554328120846,2.881830366866, + 0.566881205459)); +#37403 = CARTESIAN_POINT('',(1.556374081636,2.883884520461, + 0.568787092649)); +#37404 = CARTESIAN_POINT('',(1.544977414436,2.872454409825, + 0.571450304027)); +#37405 = CARTESIAN_POINT('',(1.57722895836,2.904754790605,0.571695399224 + )); +#37406 = CARTESIAN_POINT('',(1.550127928695,2.877607874177, + 0.575211885901)); +#37407 = CARTESIAN_POINT('',(1.559013102798,2.886519980052, + 0.576736237025)); +#37408 = CARTESIAN_POINT('',(1.554601792297,2.882106350538, + 0.579001210416)); +#37409 = CARTESIAN_POINT('',(1.555680313927,2.883183033389, + 0.580966122543)); +#37410 = CARTESIAN_POINT('',(1.540912381733,2.895911804603, + 0.564838071467)); +#37411 = CARTESIAN_POINT('',(1.541367891177,2.896366758037, + 0.566836698386)); +#37412 = CARTESIAN_POINT('',(1.539055600263,2.894048404688,0.56898764321 + )); +#37413 = CARTESIAN_POINT('',(1.548195566954,2.903208085916, + 0.570506696811)); +#37414 = CARTESIAN_POINT('',(1.53434312121,2.889327474302,0.573290154491 + )); +#37415 = CARTESIAN_POINT('',(1.548367230216,2.903379324338, + 0.574549463596)); +#37416 = CARTESIAN_POINT('',(1.540168349513,2.895163074846, + 0.577016081634)); +#37417 = CARTESIAN_POINT('',(1.541491039173,2.896487763899,0.5789662276) + ); +#37418 = CARTESIAN_POINT('',(1.541918305946,2.89691653325,0.580966735706 + )); +#37419 = CARTESIAN_POINT('',(1.517866154415,2.900366033378, + 0.565333899139)); +#37420 = CARTESIAN_POINT('',(1.518459242047,2.90095909315,0.567325088229 + )); +#37421 = CARTESIAN_POINT('',(1.519247720682,2.901747898189, + 0.569305628223)); +#37422 = CARTESIAN_POINT('',(1.518498783273,2.900999028481, + 0.571367060196)); +#37423 = CARTESIAN_POINT('',(1.519444967746,2.901945785481, + 0.573342900584)); +#37424 = CARTESIAN_POINT('',(1.518452034149,2.900950814677, + 0.575415216245)); +#37425 = CARTESIAN_POINT('',(1.519564323753,2.902065389891, + 0.577380876298)); +#37426 = CARTESIAN_POINT('',(1.519468581045,2.901968997511, + 0.579408381183)); +#37427 = CARTESIAN_POINT('',(1.519199273852,2.901699464169, + 0.581445543083)); +#37428 = CARTESIAN_POINT('',(1.488581318577,2.898581058568, + 0.566162527792)); +#37429 = CARTESIAN_POINT('',(1.489039750287,2.899039561287, + 0.568160825431)); +#37430 = CARTESIAN_POINT('',(1.489326333313,2.899326453466, + 0.570167933805)); +#37431 = CARTESIAN_POINT('',(1.488325137487,2.89832512941,0.572244945928 + )); +#37432 = CARTESIAN_POINT('',(1.490530258425,2.900530016287, + 0.574149414281)); +#37433 = CARTESIAN_POINT('',(1.489185680866,2.899186076658, + 0.576244605343)); +#37434 = CARTESIAN_POINT('',(1.489606889245,2.899606626085, + 0.578244685123)); +#37435 = CARTESIAN_POINT('',(1.489640569674,2.899640538362, + 0.580265856781)); +#37436 = CARTESIAN_POINT('',(1.489568739838,2.899568571387, + 0.582292534228)); +#37437 = ADVANCED_FACE('',(#37438),#37463,.T.); +#37438 = FACE_BOUND('',#37439,.T.); +#37439 = EDGE_LOOP('',(#37440,#37441,#37449,#37457)); +#37440 = ORIENTED_EDGE('',*,*,#36938,.F.); +#37441 = ORIENTED_EDGE('',*,*,#37442,.T.); +#37442 = EDGE_CURVE('',#36930,#37443,#37445,.T.); +#37443 = VERTEX_POINT('',#37444); +#37444 = CARTESIAN_POINT('',(0.1,2.9,0.669759222072)); +#37445 = LINE('',#37446,#37447); +#37446 = CARTESIAN_POINT('',(0.1,2.9,0.575)); +#37447 = VECTOR('',#37448,1.); +#37448 = DIRECTION('',(0.,0.,1.)); +#37449 = ORIENTED_EDGE('',*,*,#37450,.T.); +#37450 = EDGE_CURVE('',#37443,#37451,#37453,.T.); +#37451 = VERTEX_POINT('',#37452); +#37452 = CARTESIAN_POINT('',(1.5,2.9,0.669759222072)); +#37453 = LINE('',#37454,#37455); +#37454 = CARTESIAN_POINT('',(0.,2.9,0.669759222072)); +#37455 = VECTOR('',#37456,1.); +#37456 = DIRECTION('',(1.,0.,-0.)); +#37457 = ORIENTED_EDGE('',*,*,#37458,.F.); +#37458 = EDGE_CURVE('',#36939,#37451,#37459,.T.); +#37459 = LINE('',#37460,#37461); +#37460 = CARTESIAN_POINT('',(1.5,2.9,0.575)); +#37461 = VECTOR('',#37462,1.); +#37462 = DIRECTION('',(0.,0.,1.)); +#37463 = PLANE('',#37464); +#37464 = AXIS2_PLACEMENT_3D('',#37465,#37466,#37467); +#37465 = CARTESIAN_POINT('',(0.,2.9,0.575)); +#37466 = DIRECTION('',(-0.,1.,0.)); +#37467 = DIRECTION('',(0.,0.,1.)); +#37468 = ADVANCED_FACE('',(#37469),#37494,.T.); +#37469 = FACE_BOUND('',#37470,.T.); +#37470 = EDGE_LOOP('',(#37471,#37472,#37480,#37488)); +#37471 = ORIENTED_EDGE('',*,*,#36972,.T.); +#37472 = ORIENTED_EDGE('',*,*,#37473,.T.); +#37473 = EDGE_CURVE('',#36964,#37474,#37476,.T.); +#37474 = VERTEX_POINT('',#37475); +#37475 = CARTESIAN_POINT('',(1.6,2.8,0.669759222072)); +#37476 = LINE('',#37477,#37478); +#37477 = CARTESIAN_POINT('',(1.6,2.8,0.575)); +#37478 = VECTOR('',#37479,1.); +#37479 = DIRECTION('',(0.,0.,1.)); +#37480 = ORIENTED_EDGE('',*,*,#37481,.F.); +#37481 = EDGE_CURVE('',#37482,#37474,#37484,.T.); +#37482 = VERTEX_POINT('',#37483); +#37483 = CARTESIAN_POINT('',(1.6,0.1,0.669759222072)); +#37484 = LINE('',#37485,#37486); +#37485 = CARTESIAN_POINT('',(1.6,0.,0.669759222072)); +#37486 = VECTOR('',#37487,1.); +#37487 = DIRECTION('',(0.,1.,0.)); +#37488 = ORIENTED_EDGE('',*,*,#37489,.F.); +#37489 = EDGE_CURVE('',#36973,#37482,#37490,.T.); +#37490 = LINE('',#37491,#37492); +#37491 = CARTESIAN_POINT('',(1.6,0.1,0.575)); +#37492 = VECTOR('',#37493,1.); +#37493 = DIRECTION('',(0.,0.,1.)); +#37494 = PLANE('',#37495); +#37495 = AXIS2_PLACEMENT_3D('',#37496,#37497,#37498); +#37496 = CARTESIAN_POINT('',(1.6,0.,0.575)); +#37497 = DIRECTION('',(1.,0.,-0.)); +#37498 = DIRECTION('',(0.,0.,1.)); +#37499 = ADVANCED_FACE('',(#37500),#37513,.T.); +#37500 = FACE_BOUND('',#37501,.T.); +#37501 = EDGE_LOOP('',(#37502,#37503,#37504,#37512)); +#37502 = ORIENTED_EDGE('',*,*,#36998,.T.); +#37503 = ORIENTED_EDGE('',*,*,#37315,.T.); +#37504 = ORIENTED_EDGE('',*,*,#37505,.F.); +#37505 = EDGE_CURVE('',#37197,#37316,#37506,.T.); +#37506 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37507,#37508,#37509,#37510, + #37511),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.570796326795), + .PIECEWISE_BEZIER_KNOTS.); +#37507 = CARTESIAN_POINT('',(-1.387778780781E-17,0.1,0.669759222072)); +#37508 = CARTESIAN_POINT('',(6.167905692362E-18,6.073009183013E-02, + 0.669759222072)); +#37509 = CARTESIAN_POINT('',(2.095691611353E-02,2.095691611353E-02, + 0.669759222072)); +#37510 = CARTESIAN_POINT('',(6.073009183013E-02,-9.251858538543E-18, + 0.669759222072)); +#37511 = CARTESIAN_POINT('',(0.1,-1.387778780781E-17,0.669759222072)); +#37512 = ORIENTED_EDGE('',*,*,#37204,.F.); +#37513 = CYLINDRICAL_SURFACE('',#37514,0.1); +#37514 = AXIS2_PLACEMENT_3D('',#37515,#37516,#37517); +#37515 = CARTESIAN_POINT('',(0.1,0.1,0.575)); +#37516 = DIRECTION('',(0.,0.,1.)); +#37517 = DIRECTION('',(-1.,-0.,0.)); +#37518 = ADVANCED_FACE('',(#37519),#37532,.T.); +#37519 = FACE_BOUND('',#37520,.T.); +#37520 = EDGE_LOOP('',(#37521,#37522,#37530,#37531)); +#37521 = ORIENTED_EDGE('',*,*,#37188,.T.); +#37522 = ORIENTED_EDGE('',*,*,#37523,.F.); +#37523 = EDGE_CURVE('',#37443,#37189,#37524,.T.); +#37524 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37525,#37526,#37527,#37528, + #37529),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.570796326795), + .PIECEWISE_BEZIER_KNOTS.); +#37525 = CARTESIAN_POINT('',(0.1,2.9,0.669759222072)); +#37526 = CARTESIAN_POINT('',(6.073009183013E-02,2.9,0.669759222072)); +#37527 = CARTESIAN_POINT('',(2.095691611353E-02,2.879043083886, + 0.669759222072)); +#37528 = CARTESIAN_POINT('',(6.96780596184E-17,2.83926990817, + 0.669759222072)); +#37529 = CARTESIAN_POINT('',(7.979727989493E-17,2.8,0.669759222072)); +#37530 = ORIENTED_EDGE('',*,*,#37442,.F.); +#37531 = ORIENTED_EDGE('',*,*,#37093,.T.); +#37532 = CYLINDRICAL_SURFACE('',#37533,0.1); +#37533 = AXIS2_PLACEMENT_3D('',#37534,#37535,#37536); +#37534 = CARTESIAN_POINT('',(0.1,2.8,0.575)); +#37535 = DIRECTION('',(0.,0.,1.)); +#37536 = DIRECTION('',(-1.,-0.,0.)); +#37537 = ADVANCED_FACE('',(#37538),#37565,.T.); +#37538 = FACE_BOUND('',#37539,.T.); +#37539 = EDGE_LOOP('',(#37540,#37549,#37557,#37564)); +#37540 = ORIENTED_EDGE('',*,*,#37541,.F.); +#37541 = EDGE_CURVE('',#37542,#37197,#37544,.T.); +#37542 = VERTEX_POINT('',#37543); +#37543 = CARTESIAN_POINT('',(5.478104631727E-04,0.1,0.680212068398)); +#37544 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#37545,#37546,#37547,#37548), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#37545 = CARTESIAN_POINT('',(5.478104631727E-04,0.1,0.680212068398)); +#37546 = CARTESIAN_POINT('',(1.829372939586E-04,0.1,0.676740532087)); +#37547 = CARTESIAN_POINT('',(2.781430323331E-17,0.1,0.673249880576)); +#37548 = CARTESIAN_POINT('',(2.775557561563E-17,0.1,0.669759222072)); +#37549 = ORIENTED_EDGE('',*,*,#37550,.T.); +#37550 = EDGE_CURVE('',#37542,#37551,#37553,.T.); +#37551 = VERTEX_POINT('',#37552); +#37552 = CARTESIAN_POINT('',(5.478104631727E-04,2.8,0.680212068398)); +#37553 = LINE('',#37554,#37555); +#37554 = CARTESIAN_POINT('',(5.478104631727E-04,0.,0.680212068398)); +#37555 = VECTOR('',#37556,1.); +#37556 = DIRECTION('',(-0.,1.,0.)); +#37557 = ORIENTED_EDGE('',*,*,#37558,.F.); +#37558 = EDGE_CURVE('',#37189,#37551,#37559,.T.); +#37559 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#37560,#37561,#37562,#37563), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#37560 = CARTESIAN_POINT('',(1.393199791644E-17,2.8,0.669759222072)); +#37561 = CARTESIAN_POINT('',(1.395063264128E-17,2.8,0.673249880576)); +#37562 = CARTESIAN_POINT('',(1.829372939586E-04,2.8,0.676740532087)); +#37563 = CARTESIAN_POINT('',(5.478104631727E-04,2.8,0.680212068398)); +#37564 = ORIENTED_EDGE('',*,*,#37196,.F.); +#37565 = CYLINDRICAL_SURFACE('',#37566,0.1); +#37566 = AXIS2_PLACEMENT_3D('',#37567,#37568,#37569); +#37567 = CARTESIAN_POINT('',(0.1,0.,0.669759222072)); +#37568 = DIRECTION('',(-0.,1.,0.)); +#37569 = DIRECTION('',(-1.,-0.,0.)); +#37570 = ADVANCED_FACE('',(#37571),#37584,.T.); +#37571 = FACE_BOUND('',#37572,.T.); +#37572 = EDGE_LOOP('',(#37573,#37574,#37582,#37583)); +#37573 = ORIENTED_EDGE('',*,*,#37489,.T.); +#37574 = ORIENTED_EDGE('',*,*,#37575,.T.); +#37575 = EDGE_CURVE('',#37482,#37324,#37576,.T.); +#37576 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37577,#37578,#37579,#37580, + #37581),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.570796326795), + .PIECEWISE_BEZIER_KNOTS.); +#37577 = CARTESIAN_POINT('',(1.6,0.1,0.669759222072)); +#37578 = CARTESIAN_POINT('',(1.6,6.073009183013E-02,0.669759222072)); +#37579 = CARTESIAN_POINT('',(1.579043083886,2.095691611353E-02, + 0.669759222072)); +#37580 = CARTESIAN_POINT('',(1.53926990817,-9.251858538543E-18, + 0.669759222072)); +#37581 = CARTESIAN_POINT('',(1.5,-1.387778780781E-17,0.669759222072)); +#37582 = ORIENTED_EDGE('',*,*,#37331,.F.); +#37583 = ORIENTED_EDGE('',*,*,#37221,.F.); +#37584 = CYLINDRICAL_SURFACE('',#37585,0.1); +#37585 = AXIS2_PLACEMENT_3D('',#37586,#37587,#37588); +#37586 = CARTESIAN_POINT('',(1.5,0.1,0.575)); +#37587 = DIRECTION('',(0.,0.,1.)); +#37588 = DIRECTION('',(1.,0.,-0.)); +#37589 = ADVANCED_FACE('',(#37590),#37617,.T.); +#37590 = FACE_BOUND('',#37591,.T.); +#37591 = EDGE_LOOP('',(#37592,#37593,#37602,#37610)); +#37592 = ORIENTED_EDGE('',*,*,#37323,.T.); +#37593 = ORIENTED_EDGE('',*,*,#37594,.T.); +#37594 = EDGE_CURVE('',#37324,#37595,#37597,.T.); +#37595 = VERTEX_POINT('',#37596); +#37596 = CARTESIAN_POINT('',(1.5,5.478104631727E-04,0.680212068398)); +#37597 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#37598,#37599,#37600,#37601), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#37598 = CARTESIAN_POINT('',(1.5,1.393199791644E-17,0.669759222072)); +#37599 = CARTESIAN_POINT('',(1.5,1.395063264128E-17,0.673249880576)); +#37600 = CARTESIAN_POINT('',(1.5,1.829372939586E-04,0.676740532087)); +#37601 = CARTESIAN_POINT('',(1.5,5.478104631727E-04,0.680212068398)); +#37602 = ORIENTED_EDGE('',*,*,#37603,.F.); +#37603 = EDGE_CURVE('',#37604,#37595,#37606,.T.); +#37604 = VERTEX_POINT('',#37605); +#37605 = CARTESIAN_POINT('',(0.1,5.478104631727E-04,0.680212068398)); +#37606 = LINE('',#37607,#37608); +#37607 = CARTESIAN_POINT('',(0.,5.478104631727E-04,0.680212068398)); +#37608 = VECTOR('',#37609,1.); +#37609 = DIRECTION('',(1.,0.,-0.)); +#37610 = ORIENTED_EDGE('',*,*,#37611,.F.); +#37611 = EDGE_CURVE('',#37316,#37604,#37612,.T.); +#37612 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#37613,#37614,#37615,#37616), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#37613 = CARTESIAN_POINT('',(0.1,1.393199791644E-17,0.669759222072)); +#37614 = CARTESIAN_POINT('',(0.1,1.395063264128E-17,0.673249880576)); +#37615 = CARTESIAN_POINT('',(0.1,1.829372939586E-04,0.676740532087)); +#37616 = CARTESIAN_POINT('',(0.1,5.478104631727E-04,0.680212068398)); +#37617 = CYLINDRICAL_SURFACE('',#37618,0.1); +#37618 = AXIS2_PLACEMENT_3D('',#37619,#37620,#37621); +#37619 = CARTESIAN_POINT('',(0.,0.1,0.669759222072)); +#37620 = DIRECTION('',(1.,0.,-0.)); +#37621 = DIRECTION('',(0.,-1.,0.)); +#37622 = ADVANCED_FACE('',(#37623),#37636,.T.); +#37623 = FACE_BOUND('',#37624,.T.); +#37624 = EDGE_LOOP('',(#37625,#37626,#37634,#37635)); +#37625 = ORIENTED_EDGE('',*,*,#37458,.T.); +#37626 = ORIENTED_EDGE('',*,*,#37627,.T.); +#37627 = EDGE_CURVE('',#37451,#37474,#37628,.T.); +#37628 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37629,#37630,#37631,#37632, + #37633),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.570796326795), + .PIECEWISE_BEZIER_KNOTS.); +#37629 = CARTESIAN_POINT('',(1.5,2.9,0.669759222072)); +#37630 = CARTESIAN_POINT('',(1.53926990817,2.9,0.669759222072)); +#37631 = CARTESIAN_POINT('',(1.579043083886,2.879043083886, + 0.669759222072)); +#37632 = CARTESIAN_POINT('',(1.6,2.83926990817,0.669759222072)); +#37633 = CARTESIAN_POINT('',(1.6,2.8,0.669759222072)); +#37634 = ORIENTED_EDGE('',*,*,#37473,.F.); +#37635 = ORIENTED_EDGE('',*,*,#37347,.T.); +#37636 = CYLINDRICAL_SURFACE('',#37637,0.1); +#37637 = AXIS2_PLACEMENT_3D('',#37638,#37639,#37640); +#37638 = CARTESIAN_POINT('',(1.5,2.8,0.575)); +#37639 = DIRECTION('',(0.,0.,1.)); +#37640 = DIRECTION('',(-0.,1.,0.)); +#37641 = ADVANCED_FACE('',(#37642),#37669,.T.); +#37642 = FACE_BOUND('',#37643,.T.); +#37643 = EDGE_LOOP('',(#37644,#37653,#37661,#37668)); +#37644 = ORIENTED_EDGE('',*,*,#37645,.F.); +#37645 = EDGE_CURVE('',#37646,#37443,#37648,.T.); +#37646 = VERTEX_POINT('',#37647); +#37647 = CARTESIAN_POINT('',(0.1,2.899452189537,0.680212068398)); +#37648 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#37649,#37650,#37651,#37652), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#37649 = CARTESIAN_POINT('',(0.1,2.899452189537,0.680212068398)); +#37650 = CARTESIAN_POINT('',(0.1,2.899817062706,0.676740532087)); +#37651 = CARTESIAN_POINT('',(0.1,2.9,0.673249880576)); +#37652 = CARTESIAN_POINT('',(0.1,2.9,0.669759222072)); +#37653 = ORIENTED_EDGE('',*,*,#37654,.T.); +#37654 = EDGE_CURVE('',#37646,#37655,#37657,.T.); +#37655 = VERTEX_POINT('',#37656); +#37656 = CARTESIAN_POINT('',(1.5,2.899452189537,0.680212068398)); +#37657 = LINE('',#37658,#37659); +#37658 = CARTESIAN_POINT('',(0.,2.899452189537,0.680212068398)); +#37659 = VECTOR('',#37660,1.); +#37660 = DIRECTION('',(1.,0.,-0.)); +#37661 = ORIENTED_EDGE('',*,*,#37662,.T.); +#37662 = EDGE_CURVE('',#37655,#37451,#37663,.T.); +#37663 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#37664,#37665,#37666,#37667), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#37664 = CARTESIAN_POINT('',(1.5,2.899452189537,0.680212068398)); +#37665 = CARTESIAN_POINT('',(1.5,2.899817062706,0.676740532087)); +#37666 = CARTESIAN_POINT('',(1.5,2.9,0.673249880576)); +#37667 = CARTESIAN_POINT('',(1.5,2.9,0.669759222072)); +#37668 = ORIENTED_EDGE('',*,*,#37450,.F.); +#37669 = CYLINDRICAL_SURFACE('',#37670,0.1); +#37670 = AXIS2_PLACEMENT_3D('',#37671,#37672,#37673); +#37671 = CARTESIAN_POINT('',(0.,2.8,0.669759222072)); +#37672 = DIRECTION('',(1.,0.,-0.)); +#37673 = DIRECTION('',(0.,1.,0.)); +#37674 = ADVANCED_FACE('',(#37675),#37702,.T.); +#37675 = FACE_BOUND('',#37676,.T.); +#37676 = EDGE_LOOP('',(#37677,#37678,#37687,#37695)); +#37677 = ORIENTED_EDGE('',*,*,#37481,.T.); +#37678 = ORIENTED_EDGE('',*,*,#37679,.T.); +#37679 = EDGE_CURVE('',#37474,#37680,#37682,.T.); +#37680 = VERTEX_POINT('',#37681); +#37681 = CARTESIAN_POINT('',(1.599452189537,2.8,0.680212068398)); +#37682 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#37683,#37684,#37685,#37686), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#37683 = CARTESIAN_POINT('',(1.6,2.8,0.669759222072)); +#37684 = CARTESIAN_POINT('',(1.6,2.8,0.673249880576)); +#37685 = CARTESIAN_POINT('',(1.599817062706,2.8,0.676740532087)); +#37686 = CARTESIAN_POINT('',(1.599452189537,2.8,0.680212068398)); +#37687 = ORIENTED_EDGE('',*,*,#37688,.F.); +#37688 = EDGE_CURVE('',#37689,#37680,#37691,.T.); +#37689 = VERTEX_POINT('',#37690); +#37690 = CARTESIAN_POINT('',(1.599452189537,0.1,0.680212068398)); +#37691 = LINE('',#37692,#37693); +#37692 = CARTESIAN_POINT('',(1.599452189537,0.,0.680212068398)); +#37693 = VECTOR('',#37694,1.); +#37694 = DIRECTION('',(0.,1.,0.)); +#37695 = ORIENTED_EDGE('',*,*,#37696,.T.); +#37696 = EDGE_CURVE('',#37689,#37482,#37697,.T.); +#37697 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#37698,#37699,#37700,#37701), + .UNSPECIFIED.,.F.,.F.,(4,4),(0.,0.10471975512), + .PIECEWISE_BEZIER_KNOTS.); +#37698 = CARTESIAN_POINT('',(1.599452189537,0.1,0.680212068398)); +#37699 = CARTESIAN_POINT('',(1.599817062706,0.1,0.676740532087)); +#37700 = CARTESIAN_POINT('',(1.6,0.1,0.673249880576)); +#37701 = CARTESIAN_POINT('',(1.6,0.1,0.669759222072)); +#37702 = CYLINDRICAL_SURFACE('',#37703,0.1); +#37703 = AXIS2_PLACEMENT_3D('',#37704,#37705,#37706); +#37704 = CARTESIAN_POINT('',(1.5,0.,0.669759222072)); +#37705 = DIRECTION('',(0.,1.,0.)); +#37706 = DIRECTION('',(1.,0.,-0.)); +#37707 = ADVANCED_FACE('',(#37708),#37721,.T.); +#37708 = FACE_BOUND('',#37709,.T.); +#37709 = EDGE_LOOP('',(#37710,#37711,#37712,#37720)); +#37710 = ORIENTED_EDGE('',*,*,#37505,.T.); +#37711 = ORIENTED_EDGE('',*,*,#37611,.T.); +#37712 = ORIENTED_EDGE('',*,*,#37713,.T.); +#37713 = EDGE_CURVE('',#37604,#37542,#37714,.T.); +#37714 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37715,#37716,#37717,#37718, + #37719),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.559869909752), + .PIECEWISE_BEZIER_KNOTS.); +#37715 = CARTESIAN_POINT('',(0.1,5.478104631727E-04,0.680212068398)); +#37716 = CARTESIAN_POINT('',(6.121456531329E-02,9.715878654161E-04, + 0.684244041051)); +#37717 = CARTESIAN_POINT('',(2.194375862923E-02,2.194375862923E-02, + 0.686167305186)); +#37718 = CARTESIAN_POINT('',(9.715878654161E-04,6.121456531329E-02, + 0.684244041051)); +#37719 = CARTESIAN_POINT('',(5.478104631727E-04,0.1,0.680212068398)); +#37720 = ORIENTED_EDGE('',*,*,#37541,.T.); +#37721 = B_SPLINE_SURFACE_WITH_KNOTS('',8,8,( + (#37722,#37723,#37724,#37725,#37726,#37727,#37728,#37729,#37730) + ,(#37731,#37732,#37733,#37734,#37735,#37736,#37737,#37738,#37739) + ,(#37740,#37741,#37742,#37743,#37744,#37745,#37746,#37747,#37748) + ,(#37749,#37750,#37751,#37752,#37753,#37754,#37755,#37756,#37757) + ,(#37758,#37759,#37760,#37761,#37762,#37763,#37764,#37765,#37766) + ,(#37767,#37768,#37769,#37770,#37771,#37772,#37773,#37774,#37775) + ,(#37776,#37777,#37778,#37779,#37780,#37781,#37782,#37783,#37784) + ,(#37785,#37786,#37787,#37788,#37789,#37790,#37791,#37792,#37793) + ,(#37794,#37795,#37796,#37797,#37798,#37799,#37800,#37801,#37802 + )),.UNSPECIFIED.,.F.,.F.,.F.,(9,9),(9,9),(-7.778174593052E-02, + 7.778174593052E-02),(-7.315613219613E-03,8.855910256723E-03), + .PIECEWISE_BEZIER_KNOTS.); +#37722 = CARTESIAN_POINT('',(4.314286123192E-04,0.110431260162, + 0.667707465772)); +#37723 = CARTESIAN_POINT('',(3.594616380471E-04,0.110359430326, + 0.669734143219)); +#37724 = CARTESIAN_POINT('',(3.933739154976E-04,0.110393110755, + 0.671755314877)); +#37725 = CARTESIAN_POINT('',(8.13923340154E-04,0.110814319133, + 0.673755394657)); +#37726 = CARTESIAN_POINT('',(-5.300162841147E-04,0.109469741577, + 0.675850585719)); +#37727 = CARTESIAN_POINT('',(1.674870587171E-03,0.111674862511, + 0.677755054072)); +#37728 = CARTESIAN_POINT('',(6.735465348498E-04,0.110673666688, + 0.679832066195)); +#37729 = CARTESIAN_POINT('',(9.604387131977E-04,0.110960249713, + 0.681839174569)); +#37730 = CARTESIAN_POINT('',(1.418941430696E-03,0.111418681421, + 0.683837472208)); +#37731 = CARTESIAN_POINT('',(-1.699464168018E-03,8.080072614892E-02, + 0.668554456917)); +#37732 = CARTESIAN_POINT('',(-1.968997509354E-03,8.053141895569E-02, + 0.670591618817)); +#37733 = CARTESIAN_POINT('',(-2.065389890869E-03,8.043567624893E-02, + 0.672619123702)); +#37734 = CARTESIAN_POINT('',(-9.508146773003E-04,8.154796584793E-02, + 0.674584783755)); +#37735 = CARTESIAN_POINT('',(-1.945785480267E-03,8.055503225744E-02, + 0.676657099416)); +#37736 = CARTESIAN_POINT('',(-9.990284809308E-04,8.150121672534E-02, + 0.678632939803)); +#37737 = CARTESIAN_POINT('',(-1.747898187691E-03,8.07522793199E-02, + 0.680694371777)); +#37738 = CARTESIAN_POINT('',(-9.590931488812E-04,8.154075795336E-02, + 0.68267491177)); +#37739 = CARTESIAN_POINT('',(-3.660333777846E-04,8.213384558486E-02, + 0.684666100861)); +#37740 = CARTESIAN_POINT('',(3.083466749088E-03,5.808169405319E-02, + 0.669033264294)); +#37741 = CARTESIAN_POINT('',(3.51223609662E-03,5.850896082446E-02, + 0.6710337724)); +#37742 = CARTESIAN_POINT('',(4.836925143978E-03,5.983165047277E-02, + 0.672983918367)); +#37743 = CARTESIAN_POINT('',(-3.379324323617E-03,5.163276980485E-02, + 0.675450536403)); +#37744 = CARTESIAN_POINT('',(1.067252568851E-02,6.565687877458E-02, + 0.676709845509)); +#37745 = CARTESIAN_POINT('',(-3.208085917504E-03,5.180443304761E-02, + 0.67949330319)); +#37746 = CARTESIAN_POINT('',(5.95159531052E-03,6.094439973357E-02, + 0.681012356789)); +#37747 = CARTESIAN_POINT('',(3.633241961914E-03,5.86321088227E-02, + 0.683163301614)); +#37748 = CARTESIAN_POINT('',(4.088195396447E-03,5.908761826634E-02, + 0.685161928533)); +#37749 = CARTESIAN_POINT('',(1.68169666121E-02,4.431968607465E-02, + 0.669033877457)); +#37750 = CARTESIAN_POINT('',(1.789364947122E-02,4.539820770858E-02, + 0.670998789585)); +#37751 = CARTESIAN_POINT('',(1.348001997905E-02,4.098689724182E-02, + 0.673263762972)); +#37752 = CARTESIAN_POINT('',(2.239212575876E-02,4.987207122787E-02, + 0.674788114102)); +#37753 = CARTESIAN_POINT('',(-4.75479055847E-03,2.277104169868E-02, + 0.678304600775)); +#37754 = CARTESIAN_POINT('',(2.754559014727E-02,5.502258552929E-02, + 0.678549695971)); +#37755 = CARTESIAN_POINT('',(1.611547954916E-02,4.362591837724E-02, + 0.681212907352)); +#37756 = CARTESIAN_POINT('',(1.816963313613E-02,4.56718791554E-02, + 0.683118794541)); +#37757 = CARTESIAN_POINT('',(1.64439896651E-02,4.394543785775E-02, + 0.685235307425)); +#37758 = CARTESIAN_POINT('',(2.298193622188E-02,2.298193622122E-02, + 0.669437138377)); +#37759 = CARTESIAN_POINT('',(2.16423960563E-02,2.164239605536E-02, + 0.67153187321)); +#37760 = CARTESIAN_POINT('',(2.545262535968E-02,2.545262536471E-02, + 0.673342633305)); +#37761 = CARTESIAN_POINT('',(1.651426252714E-02,1.65142625159E-02, + 0.675875330191)); +#37762 = CARTESIAN_POINT('',(4.544230306972E-02,4.544230307991E-02, + 0.676293424067)); +#37763 = CARTESIAN_POINT('',(1.220064275166E-02,1.220064274789E-02, + 0.680158730135)); +#37764 = CARTESIAN_POINT('',(2.213981166186E-02,2.213981166367E-02, + 0.681617427175)); +#37765 = CARTESIAN_POINT('',(2.307979521391E-02,2.30797952124E-02, + 0.683599336438)); +#37766 = CARTESIAN_POINT('',(2.559561295102E-02,2.559561295029E-02, + 0.685485189777)); +#37767 = CARTESIAN_POINT('',(4.431968607494E-02,1.681696661346E-02, + 0.669033877457)); +#37768 = CARTESIAN_POINT('',(4.53982077106E-02,1.789364947474E-02, + 0.670998789584)); +#37769 = CARTESIAN_POINT('',(4.098689725634E-02,1.348001998571E-02, + 0.673263762972)); +#37770 = CARTESIAN_POINT('',(4.98720711968E-02,2.239212574616E-02, + 0.674788114102)); +#37771 = CARTESIAN_POINT('',(2.277104173033E-02,-4.754790544567E-03, + 0.678304600775)); +#37772 = CARTESIAN_POINT('',(5.502258550572E-02,2.754559013125E-02, + 0.678549695971)); +#37773 = CARTESIAN_POINT('',(4.362591838777E-02,1.611547955629E-02, + 0.681212907352)); +#37774 = CARTESIAN_POINT('',(4.567187915395E-02,1.816963313696E-02, + 0.683118794541)); +#37775 = CARTESIAN_POINT('',(4.394543785663E-02,1.644398966503E-02, + 0.685235307425)); +#37776 = CARTESIAN_POINT('',(5.808169405218E-02,3.083466747575E-03, + 0.669033264294)); +#37777 = CARTESIAN_POINT('',(5.850896082172E-02,3.512236093234E-03, + 0.6710337724)); +#37778 = CARTESIAN_POINT('',(5.983165046137E-02,4.836925136249E-03, + 0.672983918368)); +#37779 = CARTESIAN_POINT('',(5.163276982396E-02,-3.37932431468E-03, + 0.675450536403)); +#37780 = CARTESIAN_POINT('',(6.565687875005E-02,1.067252567565E-02, + 0.67670984551)); +#37781 = CARTESIAN_POINT('',(5.180443306791E-02,-3.208085904101E-03, + 0.67949330319)); +#37782 = CARTESIAN_POINT('',(6.094439972505E-02,5.951595305093E-03, + 0.681012356789)); +#37783 = CARTESIAN_POINT('',(5.863210882351E-02,3.633241961668E-03, + 0.683163301614)); +#37784 = CARTESIAN_POINT('',(5.908761826714E-02,4.088195396608E-03, + 0.685161928533)); +#37785 = CARTESIAN_POINT('',(8.080072614995E-02,-1.699464166939E-03, + 0.668554456917)); +#37786 = CARTESIAN_POINT('',(8.053141895741E-02,-1.968997507518E-03, + 0.670591618817)); +#37787 = CARTESIAN_POINT('',(8.043567625266E-02,-2.065389887505E-03, + 0.672619123702)); +#37788 = CARTESIAN_POINT('',(8.154796583915E-02,-9.508146847623E-04, + 0.674584783756)); +#37789 = CARTESIAN_POINT('',(8.055503226818E-02,-1.945785471538E-03, + 0.676657099415)); +#37790 = CARTESIAN_POINT('',(8.150121671854E-02,-9.990284860781E-04, + 0.678632939804)); +#37791 = CARTESIAN_POINT('',(8.0752279322E-02,-1.747898186393E-03, + 0.680694371777)); +#37792 = CARTESIAN_POINT('',(8.154075795318E-02,-9.590931489895E-04, + 0.68267491177)); +#37793 = CARTESIAN_POINT('',(8.213384558488E-02,-3.660333777155E-04, + 0.684666100861)); +#37794 = CARTESIAN_POINT('',(0.110431260161,4.314286115849E-04, + 0.667707465772)); +#37795 = CARTESIAN_POINT('',(0.110359430326,3.594616379481E-04, + 0.669734143219)); +#37796 = CARTESIAN_POINT('',(0.110393110754,3.93373914755E-04, + 0.671755314877)); +#37797 = CARTESIAN_POINT('',(0.110814319133,8.13923341697E-04, + 0.673755394657)); +#37798 = CARTESIAN_POINT('',(0.109469741578,-5.300162857125E-04, + 0.675850585719)); +#37799 = CARTESIAN_POINT('',(0.11167486251,1.674870587605E-03, + 0.677755054072)); +#37800 = CARTESIAN_POINT('',(0.110673666689,6.73546535059E-04, + 0.679832066195)); +#37801 = CARTESIAN_POINT('',(0.110960249713,9.60438713204E-04, + 0.681839174569)); +#37802 = CARTESIAN_POINT('',(0.111418681422,1.418941430923E-03, + 0.683837472208)); +#37803 = ADVANCED_FACE('',(#37804),#37817,.T.); +#37804 = FACE_BOUND('',#37805,.T.); +#37805 = EDGE_LOOP('',(#37806,#37807,#37815,#37816)); +#37806 = ORIENTED_EDGE('',*,*,#37558,.T.); +#37807 = ORIENTED_EDGE('',*,*,#37808,.T.); +#37808 = EDGE_CURVE('',#37551,#37646,#37809,.T.); +#37809 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37810,#37811,#37812,#37813, + #37814),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.559869909752), + .PIECEWISE_BEZIER_KNOTS.); +#37810 = CARTESIAN_POINT('',(5.478104631727E-04,2.8,0.680212068398)); +#37811 = CARTESIAN_POINT('',(9.715878654161E-04,2.838785434687, + 0.684244041051)); +#37812 = CARTESIAN_POINT('',(2.194375862923E-02,2.878056241371, + 0.686167305186)); +#37813 = CARTESIAN_POINT('',(6.121456531329E-02,2.899028412135, + 0.684244041051)); +#37814 = CARTESIAN_POINT('',(0.1,2.899452189537,0.680212068398)); +#37815 = ORIENTED_EDGE('',*,*,#37645,.T.); +#37816 = ORIENTED_EDGE('',*,*,#37523,.T.); +#37817 = B_SPLINE_SURFACE_WITH_KNOTS('',8,8,( + (#37818,#37819,#37820,#37821,#37822,#37823,#37824,#37825,#37826) + ,(#37827,#37828,#37829,#37830,#37831,#37832,#37833,#37834,#37835) + ,(#37836,#37837,#37838,#37839,#37840,#37841,#37842,#37843,#37844) + ,(#37845,#37846,#37847,#37848,#37849,#37850,#37851,#37852,#37853) + ,(#37854,#37855,#37856,#37857,#37858,#37859,#37860,#37861,#37862) + ,(#37863,#37864,#37865,#37866,#37867,#37868,#37869,#37870,#37871) + ,(#37872,#37873,#37874,#37875,#37876,#37877,#37878,#37879,#37880) + ,(#37881,#37882,#37883,#37884,#37885,#37886,#37887,#37888,#37889) + ,(#37890,#37891,#37892,#37893,#37894,#37895,#37896,#37897,#37898 + )),.UNSPECIFIED.,.F.,.F.,.F.,(9,9),(9,9),(-7.778174593052E-02, + 7.778174593052E-02),(-8.855910256723E-03,7.315613219615E-03), + .PIECEWISE_BEZIER_KNOTS.); +#37818 = CARTESIAN_POINT('',(1.41894143099E-03,2.788581318578, + 0.683837472208)); +#37819 = CARTESIAN_POINT('',(9.604387132763E-04,2.789039750287, + 0.681839174569)); +#37820 = CARTESIAN_POINT('',(6.735465343351E-04,2.789326333313, + 0.679832066195)); +#37821 = CARTESIAN_POINT('',(1.674870588868E-03,2.788325137487, + 0.677755054072)); +#37822 = CARTESIAN_POINT('',(-5.300162861933E-04,2.790530258425, + 0.675850585719)); +#37823 = CARTESIAN_POINT('',(8.139233415158E-04,2.789185680866, + 0.673755394657)); +#37824 = CARTESIAN_POINT('',(3.933739149305E-04,2.789606889246, + 0.671755314877)); +#37825 = CARTESIAN_POINT('',(3.594616380797E-04,2.789640569674, + 0.669734143219)); +#37826 = CARTESIAN_POINT('',(4.314286120743E-04,2.789568739839, + 0.667707465772)); +#37827 = CARTESIAN_POINT('',(-3.660333777601E-04,2.817866154415, + 0.684666100861)); +#37828 = CARTESIAN_POINT('',(-9.59093149036E-04,2.818459242047, + 0.682674911771)); +#37829 = CARTESIAN_POINT('',(-1.747898188037E-03,2.81924772068, + 0.680694371776)); +#37830 = CARTESIAN_POINT('',(-9.990284815204E-04,2.818498783277, + 0.678632939804)); +#37831 = CARTESIAN_POINT('',(-1.945785478751E-03,2.819444967739, + 0.676657099415)); +#37832 = CARTESIAN_POINT('',(-9.508146788286E-04,2.818452034156, + 0.674584783756)); +#37833 = CARTESIAN_POINT('',(-2.065389890303E-03,2.819564323749, + 0.672619123702)); +#37834 = CARTESIAN_POINT('',(-1.968997508834E-03,2.819468581044, + 0.670591618817)); +#37835 = CARTESIAN_POINT('',(-1.699464167782E-03,2.819199273851, + 0.668554456917)); +#37836 = CARTESIAN_POINT('',(4.088195396558E-03,2.840912381733, + 0.685161928533)); +#37837 = CARTESIAN_POINT('',(3.633241962368E-03,2.841367891175, + 0.683163301613)); +#37838 = CARTESIAN_POINT('',(5.951595311439E-03,2.839055600268, + 0.681012356791)); +#37839 = CARTESIAN_POINT('',(-3.208085919676E-03,2.848195566951, + 0.679493303187)); +#37840 = CARTESIAN_POINT('',(1.067252569377E-02,2.834343121226, + 0.676709845512)); +#37841 = CARTESIAN_POINT('',(-3.379324328494E-03,2.848367230193, + 0.675450536402)); +#37842 = CARTESIAN_POINT('',(4.836925145265E-03,2.84016834953, + 0.672983918368)); +#37843 = CARTESIAN_POINT('',(3.512236095756E-03,2.841491039175, + 0.6710337724)); +#37844 = CARTESIAN_POINT('',(3.083466748674E-03,2.841918305947, + 0.669033264294)); +#37845 = CARTESIAN_POINT('',(1.644398966487E-02,2.856054562142, + 0.685235307426)); +#37846 = CARTESIAN_POINT('',(1.816963313504E-02,2.854328120849, + 0.683118794542)); +#37847 = CARTESIAN_POINT('',(1.611547954493E-02,2.856374081625, + 0.681212907349)); +#37848 = CARTESIAN_POINT('',(2.754559016286E-02,2.844977414456, + 0.678549695976)); +#37849 = CARTESIAN_POINT('',(-4.75479057945E-03,2.877228958316, + 0.678304600771)); +#37850 = CARTESIAN_POINT('',(2.239212577612E-02,2.850127928767, + 0.674788114104)); +#37851 = CARTESIAN_POINT('',(1.348001997143E-02,2.859013102757, + 0.673263762972)); +#37852 = CARTESIAN_POINT('',(1.78936494723E-02,2.854601792293, + 0.670998789585)); +#37853 = CARTESIAN_POINT('',(1.681696661271E-02,2.855680313925, + 0.669033877457)); +#37854 = CARTESIAN_POINT('',(2.559561295092E-02,2.87440438705, + 0.685485189777)); +#37855 = CARTESIAN_POINT('',(2.307979521494E-02,2.876920204782, + 0.683599336436)); +#37856 = CARTESIAN_POINT('',(2.213981167273E-02,2.877860188328, + 0.681617427179)); +#37857 = CARTESIAN_POINT('',(1.220064271838E-02,2.887799357285, + 0.680158730129)); +#37858 = CARTESIAN_POINT('',(4.544230311262E-02,2.854557696887, + 0.676293424072)); +#37859 = CARTESIAN_POINT('',(1.651426249167E-02,2.883485737501, + 0.675875330189)); +#37860 = CARTESIAN_POINT('',(2.545262537528E-02,2.874547374632, + 0.673342633305)); +#37861 = CARTESIAN_POINT('',(2.164239605568E-02,2.878357603941, + 0.67153187321)); +#37862 = CARTESIAN_POINT('',(2.298193622109E-02,2.877018063779, + 0.669437138377)); +#37863 = CARTESIAN_POINT('',(4.39454378574E-02,2.883556010334, + 0.685235307426)); +#37864 = CARTESIAN_POINT('',(4.567187915386E-02,2.881830366867, + 0.683118794542)); +#37865 = CARTESIAN_POINT('',(4.362591837379E-02,2.883884520454, + 0.681212907349)); +#37866 = CARTESIAN_POINT('',(5.502258554396E-02,2.872454409835, + 0.678549695976)); +#37867 = CARTESIAN_POINT('',(2.277104168221E-02,2.904754790579, + 0.678304600771)); +#37868 = CARTESIAN_POINT('',(4.987207123485E-02,2.877607874235, + 0.674788114104)); +#37869 = CARTESIAN_POINT('',(4.09868972398E-02,2.886519980019, + 0.673263762972)); +#37870 = CARTESIAN_POINT('',(4.539820771051E-02,2.882106350529, + 0.670998789585)); +#37871 = CARTESIAN_POINT('',(4.431968607553E-02,2.883183033386, + 0.669033877457)); +#37872 = CARTESIAN_POINT('',(5.908761826634E-02,2.895911804604, + 0.685161928533)); +#37873 = CARTESIAN_POINT('',(5.863210882312E-02,2.896366758037, + 0.683163301614)); +#37874 = CARTESIAN_POINT('',(6.094439973382E-02,2.89404840469, + 0.681012356791)); +#37875 = CARTESIAN_POINT('',(5.18044330428E-02,2.903208085921, + 0.679493303188)); +#37876 = CARTESIAN_POINT('',(6.565687877794E-02,2.88932747431, + 0.676709845512)); +#37877 = CARTESIAN_POINT('',(5.163276980386E-02,2.903379324321, + 0.675450536402)); +#37878 = CARTESIAN_POINT('',(5.983165047035E-02,2.895163074862, + 0.672983918368)); +#37879 = CARTESIAN_POINT('',(5.850896082227E-02,2.896487763904, + 0.6710337724)); +#37880 = CARTESIAN_POINT('',(5.80816940521E-02,2.896916533252, + 0.669033264294)); +#37881 = CARTESIAN_POINT('',(8.213384558498E-02,2.900366033378, + 0.684666100861)); +#37882 = CARTESIAN_POINT('',(8.154075795356E-02,2.900959093149, + 0.682674911771)); +#37883 = CARTESIAN_POINT('',(8.075227932085E-02,2.901747898185, + 0.680694371776)); +#37884 = CARTESIAN_POINT('',(8.150121672322E-02,2.900999028485, + 0.678632939804)); +#37885 = CARTESIAN_POINT('',(8.055503226138E-02,2.901945785473, + 0.676657099415)); +#37886 = CARTESIAN_POINT('',(8.154796584455E-02,2.900950814683, + 0.674584783756)); +#37887 = CARTESIAN_POINT('',(8.043567625052E-02,2.902065389888, + 0.672619123702)); +#37888 = CARTESIAN_POINT('',(8.053141895689E-02,2.901968997509, + 0.670591618817)); +#37889 = CARTESIAN_POINT('',(8.080072614957E-02,2.901699464167, + 0.668554456917)); +#37890 = CARTESIAN_POINT('',(0.111418681421,2.898581058569, + 0.683837472208)); +#37891 = CARTESIAN_POINT('',(0.110960249713,2.899039561287, + 0.681839174569)); +#37892 = CARTESIAN_POINT('',(0.110673666688,2.899326453466, + 0.679832066195)); +#37893 = CARTESIAN_POINT('',(0.111674862512,2.898325129411, + 0.677755054072)); +#37894 = CARTESIAN_POINT('',(0.109469741576,2.900530016286, + 0.675850585719)); +#37895 = CARTESIAN_POINT('',(0.110814319134,2.899186076658, + 0.673755394657)); +#37896 = CARTESIAN_POINT('',(0.110393110754,2.899606626085, + 0.671755314877)); +#37897 = CARTESIAN_POINT('',(0.110359430326,2.899640538362, + 0.669734143219)); +#37898 = CARTESIAN_POINT('',(0.110431260161,2.899568571388, + 0.667707465772)); +#37899 = ADVANCED_FACE('',(#37900),#37925,.T.); +#37900 = FACE_BOUND('',#37901,.T.); +#37901 = EDGE_LOOP('',(#37902,#37903,#37911,#37919)); +#37902 = ORIENTED_EDGE('',*,*,#37550,.F.); +#37903 = ORIENTED_EDGE('',*,*,#37904,.T.); +#37904 = EDGE_CURVE('',#37542,#37905,#37907,.T.); +#37905 = VERTEX_POINT('',#37906); +#37906 = CARTESIAN_POINT('',(4.051272664415E-02,0.139964916181, + 1.060452846327)); +#37907 = LINE('',#37908,#37909); +#37908 = CARTESIAN_POINT('',(-1.074890013952E-03,9.837729952288E-02, + 0.664773104659)); +#37909 = VECTOR('',#37910,1.); +#37910 = DIRECTION('',(0.103962051184,0.103962051184,0.989132844378)); +#37911 = ORIENTED_EDGE('',*,*,#37912,.T.); +#37912 = EDGE_CURVE('',#37905,#37913,#37915,.T.); +#37913 = VERTEX_POINT('',#37914); +#37914 = CARTESIAN_POINT('',(4.051272664415E-02,2.760035083819, + 1.060452846327)); +#37915 = LINE('',#37916,#37917); +#37916 = CARTESIAN_POINT('',(4.051272664415E-02,4.99245117512E-02, + 1.060452846327)); +#37917 = VECTOR('',#37918,1.); +#37918 = DIRECTION('',(0.,1.,-0.)); +#37919 = ORIENTED_EDGE('',*,*,#37920,.F.); +#37920 = EDGE_CURVE('',#37551,#37913,#37921,.T.); +#37921 = LINE('',#37922,#37923); +#37922 = CARTESIAN_POINT('',(-1.074890013952E-03,2.801622700477, + 0.664773104659)); +#37923 = VECTOR('',#37924,1.); +#37924 = DIRECTION('',(0.103962051184,-0.103962051184,0.989132844378)); +#37925 = PLANE('',#37926); +#37926 = AXIS2_PLACEMENT_3D('',#37927,#37928,#37929); +#37927 = CARTESIAN_POINT('',(0.,0.,0.675)); +#37928 = DIRECTION('',(-0.994521895368,0.,0.104528463268)); +#37929 = DIRECTION('',(0.,1.,0.)); +#37930 = ADVANCED_FACE('',(#37931),#37944,.F.); +#37931 = FACE_BOUND('',#37932,.F.); +#37932 = EDGE_LOOP('',(#37933,#37934,#37935,#37943)); +#37933 = ORIENTED_EDGE('',*,*,#37575,.T.); +#37934 = ORIENTED_EDGE('',*,*,#37594,.T.); +#37935 = ORIENTED_EDGE('',*,*,#37936,.T.); +#37936 = EDGE_CURVE('',#37595,#37689,#37937,.T.); +#37937 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#37938,#37939,#37940,#37941, + #37942),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.559869909752), + .PIECEWISE_BEZIER_KNOTS.); +#37938 = CARTESIAN_POINT('',(1.5,5.478104631725E-04,0.680212068398)); +#37939 = CARTESIAN_POINT('',(1.538785434687,9.715878654159E-04, + 0.684244041051)); +#37940 = CARTESIAN_POINT('',(1.578056241371,2.194375862923E-02, + 0.686167305186)); +#37941 = CARTESIAN_POINT('',(1.599028412135,6.121456531329E-02, + 0.684244041051)); +#37942 = CARTESIAN_POINT('',(1.599452189537,0.1,0.680212068398)); +#37943 = ORIENTED_EDGE('',*,*,#37696,.T.); +#37944 = B_SPLINE_SURFACE_WITH_KNOTS('',8,8,( + (#37945,#37946,#37947,#37948,#37949,#37950,#37951,#37952,#37953) + ,(#37954,#37955,#37956,#37957,#37958,#37959,#37960,#37961,#37962) + ,(#37963,#37964,#37965,#37966,#37967,#37968,#37969,#37970,#37971) + ,(#37972,#37973,#37974,#37975,#37976,#37977,#37978,#37979,#37980) + ,(#37981,#37982,#37983,#37984,#37985,#37986,#37987,#37988,#37989) + ,(#37990,#37991,#37992,#37993,#37994,#37995,#37996,#37997,#37998) + ,(#37999,#38000,#38001,#38002,#38003,#38004,#38005,#38006,#38007) + ,(#38008,#38009,#38010,#38011,#38012,#38013,#38014,#38015,#38016) + ,(#38017,#38018,#38019,#38020,#38021,#38022,#38023,#38024,#38025 + )),.UNSPECIFIED.,.F.,.F.,.F.,(9,9),(9,9),(-7.778174593052E-02, + 7.778174593052E-02),(-8.855910256722E-03,7.315613219613E-03), + .PIECEWISE_BEZIER_KNOTS.); +#37945 = CARTESIAN_POINT('',(1.488581318578,1.418941431606E-03, + 0.683837472208)); +#37946 = CARTESIAN_POINT('',(1.489039750287,9.604387134553E-04, + 0.681839174569)); +#37947 = CARTESIAN_POINT('',(1.489326333313,6.735465340105E-04, + 0.679832066195)); +#37948 = CARTESIAN_POINT('',(1.488325137487,1.674870589594E-03, + 0.677755054072)); +#37949 = CARTESIAN_POINT('',(1.490530258424,-5.300162869664E-04, + 0.675850585719)); +#37950 = CARTESIAN_POINT('',(1.489185680866,8.139233418527E-04, + 0.673755394657)); +#37951 = CARTESIAN_POINT('',(1.489606889245,3.933739150399E-04, + 0.671755314877)); +#37952 = CARTESIAN_POINT('',(1.489640569674,3.594616380432E-04, + 0.669734143219)); +#37953 = CARTESIAN_POINT('',(1.489568739838,4.314286124387E-04, + 0.667707465772)); +#37954 = CARTESIAN_POINT('',(1.517866154415,-3.660333778425E-04, + 0.684666100861)); +#37955 = CARTESIAN_POINT('',(1.518459242047,-9.590931493852E-04, + 0.682674911771)); +#37956 = CARTESIAN_POINT('',(1.519247720681,-1.747898188797E-03, + 0.680694371776)); +#37957 = CARTESIAN_POINT('',(1.518498783275,-9.990284809436E-04, + 0.678632939804)); +#37958 = CARTESIAN_POINT('',(1.519444967742,-1.945785480664E-03, + 0.676657099415)); +#37959 = CARTESIAN_POINT('',(1.518452034153,-9.508146771715E-04, + 0.674584783756)); +#37960 = CARTESIAN_POINT('',(1.519564323751,-2.065389891245E-03, + 0.672619123702)); +#37961 = CARTESIAN_POINT('',(1.519468581045,-1.968997509592E-03, + 0.670591618817)); +#37962 = CARTESIAN_POINT('',(1.519199273851,-1.699464168151E-03, + 0.668554456917)); +#37963 = CARTESIAN_POINT('',(1.540912381734,4.088195396318E-03, + 0.685161928533)); +#37964 = CARTESIAN_POINT('',(1.541367891177,3.633241961537E-03, + 0.683163301613)); +#37965 = CARTESIAN_POINT('',(1.539055600263,5.951595315605E-03, + 0.681012356791)); +#37966 = CARTESIAN_POINT('',(1.548195566953,-3.208085922922E-03, + 0.679493303186)); +#37967 = CARTESIAN_POINT('',(1.534343121222,1.06725257041E-02, + 0.676709845513)); +#37968 = CARTESIAN_POINT('',(1.548367230198,-3.379324338696E-03, + 0.675450536401)); +#37969 = CARTESIAN_POINT('',(1.540168349525,4.836925151548E-03, + 0.672983918369)); +#37970 = CARTESIAN_POINT('',(1.541491039174,3.512236097673E-03, + 0.671033772399)); +#37971 = CARTESIAN_POINT('',(1.541918305946,3.083466749474E-03, + 0.669033264294)); +#37972 = CARTESIAN_POINT('',(1.556054562143,1.644398966535E-02, + 0.685235307426)); +#37973 = CARTESIAN_POINT('',(1.554328120845,1.816963313704E-02, + 0.683118794542)); +#37974 = CARTESIAN_POINT('',(1.556374081634,1.61154795311E-02, + 0.681212907349)); +#37975 = CARTESIAN_POINT('',(1.544977414451,2.754559018521E-02, + 0.678549695977)); +#37976 = CARTESIAN_POINT('',(1.577228958321,-4.754790611451E-03, + 0.67830460077)); +#37977 = CARTESIAN_POINT('',(1.550127928753,2.239212580842E-02, + 0.674788114105)); +#37978 = CARTESIAN_POINT('',(1.559013102766,1.34800199582E-02, + 0.67326376297)); +#37979 = CARTESIAN_POINT('',(1.554601792296,1.789364946787E-02, + 0.670998789586)); +#37980 = CARTESIAN_POINT('',(1.555680313927,1.681696661113E-02, + 0.669033877457)); +#37981 = CARTESIAN_POINT('',(1.574404387048,2.559561295065E-02, + 0.685485189777)); +#37982 = CARTESIAN_POINT('',(1.576920204787,2.307979521265E-02, + 0.683599336436)); +#37983 = CARTESIAN_POINT('',(1.577860188317,2.213981168883E-02, + 0.681617427179)); +#37984 = CARTESIAN_POINT('',(1.587799357289,1.220064269396E-02, + 0.680158730129)); +#37985 = CARTESIAN_POINT('',(1.554557696873,4.544230315439E-02, + 0.676293424073)); +#37986 = CARTESIAN_POINT('',(1.583485737521,1.651426245463E-02, + 0.675875330187)); +#37987 = CARTESIAN_POINT('',(1.574547374619,2.545262539115E-02, + 0.673342633307)); +#37988 = CARTESIAN_POINT('',(1.578357603938,2.16423960618E-02, + 0.671531873209)); +#37989 = CARTESIAN_POINT('',(1.577018063776,2.298193622347E-02, + 0.669437138377)); +#37990 = CARTESIAN_POINT('',(1.583556010336,4.394543785667E-02, + 0.685235307426)); +#37991 = CARTESIAN_POINT('',(1.581830366864,4.567187915449E-02, + 0.683118794542)); +#37992 = CARTESIAN_POINT('',(1.583884520463,4.36259183657E-02, + 0.681212907349)); +#37993 = CARTESIAN_POINT('',(1.572454409827,5.502258555564E-02, + 0.678549695976)); +#37994 = CARTESIAN_POINT('',(1.604754790593,2.277104166111E-02, + 0.67830460077)); +#37995 = CARTESIAN_POINT('',(1.577607874211,4.98720712605E-02, + 0.674788114105)); +#37996 = CARTESIAN_POINT('',(1.586519980034,4.098689722789E-02, + 0.673263762971)); +#37997 = CARTESIAN_POINT('',(1.582106350532,4.539820770466E-02, + 0.670998789585)); +#37998 = CARTESIAN_POINT('',(1.583183033389,4.431968607316E-02, + 0.669033877457)); +#37999 = CARTESIAN_POINT('',(1.595911804603,5.908761826709E-02, + 0.685161928533)); +#38000 = CARTESIAN_POINT('',(1.596366758038,5.863210882345E-02, + 0.683163301613)); +#38001 = CARTESIAN_POINT('',(1.594048404683,6.094439973618E-02, + 0.681012356791)); +#38002 = CARTESIAN_POINT('',(1.603208085931,5.180443303932E-02, + 0.679493303187)); +#38003 = CARTESIAN_POINT('',(1.589327474294,6.565687878604E-02, + 0.676709845512)); +#38004 = CARTESIAN_POINT('',(1.603379324336,5.163276979583E-02, + 0.675450536402)); +#38005 = CARTESIAN_POINT('',(1.595163074851,5.983165047694E-02, + 0.672983918368)); +#38006 = CARTESIAN_POINT('',(1.596487763903,5.850896082568E-02, + 0.671033772399)); +#38007 = CARTESIAN_POINT('',(1.59691653325,5.808169405376E-02, + 0.669033264294)); +#38008 = CARTESIAN_POINT('',(1.600366033378,8.213384558479E-02, + 0.684666100861)); +#38009 = CARTESIAN_POINT('',(1.600959093149,8.15407579533E-02, + 0.682674911771)); +#38010 = CARTESIAN_POINT('',(1.601747898188,8.075227932004E-02, + 0.680694371776)); +#38011 = CARTESIAN_POINT('',(1.600999028479,8.150121672595E-02, + 0.678632939804)); +#38012 = CARTESIAN_POINT('',(1.601945785483,8.05550322564E-02, + 0.676657099415)); +#38013 = CARTESIAN_POINT('',(1.600950814675,8.154796584862E-02, + 0.674584783756)); +#38014 = CARTESIAN_POINT('',(1.602065389892,8.043567624862E-02, + 0.672619123702)); +#38015 = CARTESIAN_POINT('',(1.601968997509,8.053141895552E-02, + 0.670591618817)); +#38016 = CARTESIAN_POINT('',(1.601699464168,8.08007261488E-02, + 0.668554456917)); +#38017 = CARTESIAN_POINT('',(1.598581058569,0.111418681421, + 0.683837472208)); +#38018 = CARTESIAN_POINT('',(1.599039561287,0.110960249713, + 0.681839174569)); +#38019 = CARTESIAN_POINT('',(1.599326453465,0.110673666688, + 0.679832066195)); +#38020 = CARTESIAN_POINT('',(1.598325129414,0.11167486251,0.677755054072 + )); +#38021 = CARTESIAN_POINT('',(1.600530016283,0.109469741579, + 0.675850585719)); +#38022 = CARTESIAN_POINT('',(1.59918607666,0.110814319132,0.673755394657 + )); +#38023 = CARTESIAN_POINT('',(1.599606626084,0.110393110755, + 0.671755314877)); +#38024 = CARTESIAN_POINT('',(1.599640538362,0.110359430326, + 0.669734143219)); +#38025 = CARTESIAN_POINT('',(1.599568571388,0.110431260162, + 0.667707465772)); +#38026 = ADVANCED_FACE('',(#38027),#38052,.F.); +#38027 = FACE_BOUND('',#38028,.F.); +#38028 = EDGE_LOOP('',(#38029,#38030,#38038,#38046)); +#38029 = ORIENTED_EDGE('',*,*,#37603,.F.); +#38030 = ORIENTED_EDGE('',*,*,#38031,.T.); +#38031 = EDGE_CURVE('',#37604,#38032,#38034,.T.); +#38032 = VERTEX_POINT('',#38033); +#38033 = CARTESIAN_POINT('',(0.139964916181,4.051272664415E-02, + 1.060452846327)); +#38034 = LINE('',#38035,#38036); +#38035 = CARTESIAN_POINT('',(9.837729952288E-02,-1.074890013952E-03, + 0.664773104659)); +#38036 = VECTOR('',#38037,1.); +#38037 = DIRECTION('',(0.103962051184,0.103962051184,0.989132844378)); +#38038 = ORIENTED_EDGE('',*,*,#38039,.T.); +#38039 = EDGE_CURVE('',#38032,#38040,#38042,.T.); +#38040 = VERTEX_POINT('',#38041); +#38041 = CARTESIAN_POINT('',(1.460035083819,4.051272664415E-02, + 1.060452846327)); +#38042 = LINE('',#38043,#38044); +#38043 = CARTESIAN_POINT('',(4.99245117512E-02,4.051272664415E-02, + 1.060452846327)); +#38044 = VECTOR('',#38045,1.); +#38045 = DIRECTION('',(1.,-0.,0.)); +#38046 = ORIENTED_EDGE('',*,*,#38047,.F.); +#38047 = EDGE_CURVE('',#37595,#38040,#38048,.T.); +#38048 = LINE('',#38049,#38050); +#38049 = CARTESIAN_POINT('',(1.501622700477,-1.074890013952E-03, + 0.664773104659)); +#38050 = VECTOR('',#38051,1.); +#38051 = DIRECTION('',(-0.103962051184,0.103962051184,0.989132844378)); +#38052 = PLANE('',#38053); +#38053 = AXIS2_PLACEMENT_3D('',#38054,#38055,#38056); +#38054 = CARTESIAN_POINT('',(0.,0.,0.675)); +#38055 = DIRECTION('',(0.,0.994521895368,-0.104528463268)); +#38056 = DIRECTION('',(1.,0.,0.)); +#38057 = ADVANCED_FACE('',(#38058),#38071,.F.); +#38058 = FACE_BOUND('',#38059,.F.); +#38059 = EDGE_LOOP('',(#38060,#38061,#38062,#38070)); +#38060 = ORIENTED_EDGE('',*,*,#37627,.T.); +#38061 = ORIENTED_EDGE('',*,*,#37679,.T.); +#38062 = ORIENTED_EDGE('',*,*,#38063,.T.); +#38063 = EDGE_CURVE('',#37680,#37655,#38064,.T.); +#38064 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#38065,#38066,#38067,#38068, + #38069),.UNSPECIFIED.,.F.,.F.,(5,5),(0.,1.559869909752), + .PIECEWISE_BEZIER_KNOTS.); +#38065 = CARTESIAN_POINT('',(1.599452189537,2.8,0.680212068398)); +#38066 = CARTESIAN_POINT('',(1.599028412135,2.838785434687, + 0.684244041051)); +#38067 = CARTESIAN_POINT('',(1.578056241371,2.878056241371, + 0.686167305186)); +#38068 = CARTESIAN_POINT('',(1.538785434687,2.899028412135, + 0.684244041051)); +#38069 = CARTESIAN_POINT('',(1.5,2.899452189537,0.680212068398)); +#38070 = ORIENTED_EDGE('',*,*,#37662,.T.); +#38071 = B_SPLINE_SURFACE_WITH_KNOTS('',8,8,( + (#38072,#38073,#38074,#38075,#38076,#38077,#38078,#38079,#38080) + ,(#38081,#38082,#38083,#38084,#38085,#38086,#38087,#38088,#38089) + ,(#38090,#38091,#38092,#38093,#38094,#38095,#38096,#38097,#38098) + ,(#38099,#38100,#38101,#38102,#38103,#38104,#38105,#38106,#38107) + ,(#38108,#38109,#38110,#38111,#38112,#38113,#38114,#38115,#38116) + ,(#38117,#38118,#38119,#38120,#38121,#38122,#38123,#38124,#38125) + ,(#38126,#38127,#38128,#38129,#38130,#38131,#38132,#38133,#38134) + ,(#38135,#38136,#38137,#38138,#38139,#38140,#38141,#38142,#38143) + ,(#38144,#38145,#38146,#38147,#38148,#38149,#38150,#38151,#38152 + )),.UNSPECIFIED.,.F.,.F.,.F.,(9,9),(9,9),(-7.778174593052E-02, + 7.778174593052E-02),(-8.855910256725E-03,7.315613219614E-03), + .PIECEWISE_BEZIER_KNOTS.); +#38072 = CARTESIAN_POINT('',(1.598581058569,2.788581318578, + 0.683837472208)); +#38073 = CARTESIAN_POINT('',(1.599039561287,2.789039750287, + 0.681839174569)); +#38074 = CARTESIAN_POINT('',(1.599326453465,2.789326333312, + 0.679832066195)); +#38075 = CARTESIAN_POINT('',(1.598325129412,2.788325137489, + 0.677755054072)); +#38076 = CARTESIAN_POINT('',(1.600530016285,2.790530258422, + 0.675850585719)); +#38077 = CARTESIAN_POINT('',(1.599186076659,2.789185680868, + 0.673755394657)); +#38078 = CARTESIAN_POINT('',(1.599606626085,2.789606889245, + 0.671755314877)); +#38079 = CARTESIAN_POINT('',(1.599640538362,2.789640569674, + 0.669734143219)); +#38080 = CARTESIAN_POINT('',(1.599568571387,2.789568739838, + 0.667707465772)); +#38081 = CARTESIAN_POINT('',(1.600366033378,2.817866154415, + 0.684666100861)); +#38082 = CARTESIAN_POINT('',(1.600959093149,2.818459242047, + 0.682674911771)); +#38083 = CARTESIAN_POINT('',(1.601747898188,2.819247720682, + 0.680694371776)); +#38084 = CARTESIAN_POINT('',(1.60099902848,2.818498783271,0.678632939804 + )); +#38085 = CARTESIAN_POINT('',(1.601945785482,2.819444967747, + 0.676657099415)); +#38086 = CARTESIAN_POINT('',(1.600950814676,2.818452034148, + 0.674584783756)); +#38087 = CARTESIAN_POINT('',(1.602065389892,2.819564323753, + 0.672619123702)); +#38088 = CARTESIAN_POINT('',(1.60196899751,2.819468581044,0.670591618817 + )); +#38089 = CARTESIAN_POINT('',(1.601699464168,2.819199273851, + 0.668554456917)); +#38090 = CARTESIAN_POINT('',(1.595911804603,2.840912381733, + 0.685161928533)); +#38091 = CARTESIAN_POINT('',(1.596366758038,2.841367891178, + 0.683163301614)); +#38092 = CARTESIAN_POINT('',(1.594048404688,2.839055600263,0.68101235679 + )); +#38093 = CARTESIAN_POINT('',(1.603208085919,2.848195566956, + 0.679493303189)); +#38094 = CARTESIAN_POINT('',(1.589327474301,2.834343121216,0.67670984551 + )); +#38095 = CARTESIAN_POINT('',(1.603379324337,2.848367230207, + 0.675450536403)); +#38096 = CARTESIAN_POINT('',(1.595163074849,2.840168349518, + 0.672983918368)); +#38097 = CARTESIAN_POINT('',(1.596487763901,2.841491039175,0.6710337724) + ); +#38098 = CARTESIAN_POINT('',(1.59691653325,2.841918305946,0.669033264294 + )); +#38099 = CARTESIAN_POINT('',(1.583556010337,2.856054562145, + 0.685235307426)); +#38100 = CARTESIAN_POINT('',(1.581830366865,2.854328120844, + 0.683118794541)); +#38101 = CARTESIAN_POINT('',(1.583884520456,2.856374081631, + 0.681212907351)); +#38102 = CARTESIAN_POINT('',(1.572454409839,2.844977414454, + 0.678549695973)); +#38103 = CARTESIAN_POINT('',(1.604754790591,2.877228958329, + 0.678304600774)); +#38104 = CARTESIAN_POINT('',(1.577607874198,2.850127928735, + 0.674788114102)); +#38105 = CARTESIAN_POINT('',(1.586519980041,2.859013102781, + 0.673263762973)); +#38106 = CARTESIAN_POINT('',(1.582106350534,2.854601792294, + 0.670998789584)); +#38107 = CARTESIAN_POINT('',(1.58318303339,2.855680313927,0.669033877457 + )); +#38108 = CARTESIAN_POINT('',(1.574404387047,2.874404387047, + 0.685485189777)); +#38109 = CARTESIAN_POINT('',(1.576920204784,2.876920204788, + 0.683599336437)); +#38110 = CARTESIAN_POINT('',(1.577860188327,2.877860188319, + 0.681617427177)); +#38111 = CARTESIAN_POINT('',(1.587799357276,2.887799357288, + 0.680158730133)); +#38112 = CARTESIAN_POINT('',(1.554557696871,2.854557696863, + 0.676293424068)); +#38113 = CARTESIAN_POINT('',(1.58348573754,2.883485737547,0.675875330192 + )); +#38114 = CARTESIAN_POINT('',(1.574547374607,2.874547374599, + 0.673342633303)); +#38115 = CARTESIAN_POINT('',(1.578357603935,2.87835760394,0.67153187321) + ); +#38116 = CARTESIAN_POINT('',(1.577018063776,2.877018063776, + 0.669437138377)); +#38117 = CARTESIAN_POINT('',(1.556054562145,2.883556010337, + 0.685235307426)); +#38118 = CARTESIAN_POINT('',(1.554328120848,2.881830366862, + 0.683118794541)); +#38119 = CARTESIAN_POINT('',(1.556374081625,2.883884520464, + 0.681212907351)); +#38120 = CARTESIAN_POINT('',(1.544977414463,2.872454409827, + 0.678549695973)); +#38121 = CARTESIAN_POINT('',(1.577228958325,2.904754790603, + 0.678304600775)); +#38122 = CARTESIAN_POINT('',(1.550127928739,2.877607874189,0.6747881141) + ); +#38123 = CARTESIAN_POINT('',(1.559013102775,2.88651998005,0.673263762974 + )); +#38124 = CARTESIAN_POINT('',(1.554601792298,2.882106350531, + 0.670998789584)); +#38125 = CARTESIAN_POINT('',(1.555680313928,2.88318303339,0.669033877457 + )); +#38126 = CARTESIAN_POINT('',(1.540912381733,2.895911804603, + 0.685161928533)); +#38127 = CARTESIAN_POINT('',(1.541367891176,2.896366758039, + 0.683163301614)); +#38128 = CARTESIAN_POINT('',(1.539055600266,2.894048404681,0.68101235679 + )); +#38129 = CARTESIAN_POINT('',(1.548195566957,2.903208085935, + 0.679493303189)); +#38130 = CARTESIAN_POINT('',(1.534343121218,2.889327474288, + 0.676709845509)); +#38131 = CARTESIAN_POINT('',(1.548367230204,2.903379324345, + 0.675450536404)); +#38132 = CARTESIAN_POINT('',(1.540168349521,2.895163074842, + 0.672983918366)); +#38133 = CARTESIAN_POINT('',(1.541491039172,2.896487763903,0.6710337724) + ); +#38134 = CARTESIAN_POINT('',(1.541918305946,2.89691653325,0.669033264294 + )); +#38135 = CARTESIAN_POINT('',(1.517866154415,2.900366033378, + 0.684666100861)); +#38136 = CARTESIAN_POINT('',(1.518459242047,2.900959093148, + 0.682674911771)); +#38137 = CARTESIAN_POINT('',(1.51924772068,2.90174789819,0.680694371777) + ); +#38138 = CARTESIAN_POINT('',(1.518498783273,2.900999028474, + 0.678632939803)); +#38139 = CARTESIAN_POINT('',(1.519444967746,2.901945785489, + 0.676657099416)); +#38140 = CARTESIAN_POINT('',(1.518452034149,2.90095081467,0.674584783755 + )); +#38141 = CARTESIAN_POINT('',(1.519564323752,2.902065389894, + 0.672619123702)); +#38142 = CARTESIAN_POINT('',(1.519468581045,2.90196899751,0.670591618817 + )); +#38143 = CARTESIAN_POINT('',(1.519199273852,2.901699464169, + 0.668554456918)); +#38144 = CARTESIAN_POINT('',(1.488581318579,2.89858105857,0.683837472208 + )); +#38145 = CARTESIAN_POINT('',(1.489039750287,2.899039561287, + 0.681839174569)); +#38146 = CARTESIAN_POINT('',(1.489326333312,2.899326453465, + 0.679832066195)); +#38147 = CARTESIAN_POINT('',(1.488325137491,2.898325129415, + 0.677755054072)); +#38148 = CARTESIAN_POINT('',(1.49053025842,2.900530016281,0.675850585719 + )); +#38149 = CARTESIAN_POINT('',(1.489185680869,2.899186076662, + 0.673755394657)); +#38150 = CARTESIAN_POINT('',(1.489606889244,2.899606626084, + 0.671755314877)); +#38151 = CARTESIAN_POINT('',(1.489640569674,2.899640538362, + 0.669734143219)); +#38152 = CARTESIAN_POINT('',(1.489568739838,2.899568571387, + 0.667707465772)); +#38153 = ADVANCED_FACE('',(#38154),#38179,.T.); +#38154 = FACE_BOUND('',#38155,.T.); +#38155 = EDGE_LOOP('',(#38156,#38157,#38165,#38173)); +#38156 = ORIENTED_EDGE('',*,*,#37654,.F.); +#38157 = ORIENTED_EDGE('',*,*,#38158,.T.); +#38158 = EDGE_CURVE('',#37646,#38159,#38161,.T.); +#38159 = VERTEX_POINT('',#38160); +#38160 = CARTESIAN_POINT('',(0.139964916181,2.859487273356, + 1.060452846327)); +#38161 = LINE('',#38162,#38163); +#38162 = CARTESIAN_POINT('',(9.837729952288E-02,2.901074890014, + 0.664773104659)); +#38163 = VECTOR('',#38164,1.); +#38164 = DIRECTION('',(0.103962051184,-0.103962051184,0.989132844378)); +#38165 = ORIENTED_EDGE('',*,*,#38166,.T.); +#38166 = EDGE_CURVE('',#38159,#38167,#38169,.T.); +#38167 = VERTEX_POINT('',#38168); +#38168 = CARTESIAN_POINT('',(1.460035083819,2.859487273356, + 1.060452846327)); +#38169 = LINE('',#38170,#38171); +#38170 = CARTESIAN_POINT('',(4.99245117512E-02,2.859487273356, + 1.060452846327)); +#38171 = VECTOR('',#38172,1.); +#38172 = DIRECTION('',(1.,0.,0.)); +#38173 = ORIENTED_EDGE('',*,*,#38174,.F.); +#38174 = EDGE_CURVE('',#37655,#38167,#38175,.T.); +#38175 = LINE('',#38176,#38177); +#38176 = CARTESIAN_POINT('',(1.501622700477,2.901074890014, + 0.664773104659)); +#38177 = VECTOR('',#38178,1.); +#38178 = DIRECTION('',(-0.103962051184,-0.103962051184,0.989132844378)); +#38179 = PLANE('',#38180); +#38180 = AXIS2_PLACEMENT_3D('',#38181,#38182,#38183); +#38181 = CARTESIAN_POINT('',(0.,2.9,0.675)); +#38182 = DIRECTION('',(0.,0.994521895368,0.104528463268)); +#38183 = DIRECTION('',(1.,0.,-0.)); +#38184 = ADVANCED_FACE('',(#38185),#38210,.F.); +#38185 = FACE_BOUND('',#38186,.F.); +#38186 = EDGE_LOOP('',(#38187,#38188,#38196,#38204)); +#38187 = ORIENTED_EDGE('',*,*,#37688,.F.); +#38188 = ORIENTED_EDGE('',*,*,#38189,.T.); +#38189 = EDGE_CURVE('',#37689,#38190,#38192,.T.); +#38190 = VERTEX_POINT('',#38191); +#38191 = CARTESIAN_POINT('',(1.559487273356,0.139964916181, + 1.060452846327)); +#38192 = LINE('',#38193,#38194); +#38193 = CARTESIAN_POINT('',(1.601074890014,9.837729952288E-02, + 0.664773104659)); +#38194 = VECTOR('',#38195,1.); +#38195 = DIRECTION('',(-0.103962051184,0.103962051184,0.989132844378)); +#38196 = ORIENTED_EDGE('',*,*,#38197,.T.); +#38197 = EDGE_CURVE('',#38190,#38198,#38200,.T.); +#38198 = VERTEX_POINT('',#38199); +#38199 = CARTESIAN_POINT('',(1.559487273356,2.760035083819, + 1.060452846327)); +#38200 = LINE('',#38201,#38202); +#38201 = CARTESIAN_POINT('',(1.559487273356,4.99245117512E-02, + 1.060452846327)); +#38202 = VECTOR('',#38203,1.); +#38203 = DIRECTION('',(0.,1.,-0.)); +#38204 = ORIENTED_EDGE('',*,*,#38205,.F.); +#38205 = EDGE_CURVE('',#37680,#38198,#38206,.T.); +#38206 = LINE('',#38207,#38208); +#38207 = CARTESIAN_POINT('',(1.601074890014,2.801622700477, + 0.664773104659)); +#38208 = VECTOR('',#38209,1.); +#38209 = DIRECTION('',(-0.103962051184,-0.103962051184,0.989132844378)); +#38210 = PLANE('',#38211); +#38211 = AXIS2_PLACEMENT_3D('',#38212,#38213,#38214); +#38212 = CARTESIAN_POINT('',(1.6,0.,0.675)); +#38213 = DIRECTION('',(-0.994521895368,0.,-0.104528463268)); +#38214 = DIRECTION('',(0.,1.,0.)); +#38215 = ADVANCED_FACE('',(#38216),#38228,.T.); +#38216 = FACE_BOUND('',#38217,.T.); +#38217 = EDGE_LOOP('',(#38218,#38219,#38220,#38227)); +#38218 = ORIENTED_EDGE('',*,*,#37713,.F.); +#38219 = ORIENTED_EDGE('',*,*,#38031,.T.); +#38220 = ORIENTED_EDGE('',*,*,#38221,.T.); +#38221 = EDGE_CURVE('',#38032,#37905,#38222,.T.); +#38222 = CIRCLE('',#38223,0.1); +#38223 = AXIS2_PLACEMENT_3D('',#38224,#38225,#38226); +#38224 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,1.05)); +#38225 = DIRECTION('',(-0.103962051184,-0.103962051184,-0.989132844378) + ); +#38226 = DIRECTION('',(-0.99458126461,1.086699344846E-02,0.10339253619) + ); +#38227 = ORIENTED_EDGE('',*,*,#37904,.F.); +#38228 = CYLINDRICAL_SURFACE('',#38229,0.1); +#38229 = AXIS2_PLACEMENT_3D('',#38230,#38231,#38232); +#38230 = CARTESIAN_POINT('',(9.837729952288E-02,9.837729952288E-02, + 0.654320258332)); +#38231 = DIRECTION('',(0.103962051184,0.103962051184,0.989132844378)); +#38232 = DIRECTION('',(-0.994521895368,-9.1635032895E-14,0.104528463267) + ); +#38233 = ADVANCED_FACE('',(#38234),#38246,.T.); +#38234 = FACE_BOUND('',#38235,.T.); +#38235 = EDGE_LOOP('',(#38236,#38237,#38244,#38245)); +#38236 = ORIENTED_EDGE('',*,*,#37920,.T.); +#38237 = ORIENTED_EDGE('',*,*,#38238,.T.); +#38238 = EDGE_CURVE('',#37913,#38159,#38239,.T.); +#38239 = CIRCLE('',#38240,0.1); +#38240 = AXIS2_PLACEMENT_3D('',#38241,#38242,#38243); +#38241 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,1.05)); +#38242 = DIRECTION('',(-0.103962051184,0.103962051184,-0.989132844378)); +#38243 = DIRECTION('',(-0.994521895368,9.163156344805E-14,0.104528463267 + )); +#38244 = ORIENTED_EDGE('',*,*,#38158,.F.); +#38245 = ORIENTED_EDGE('',*,*,#37808,.F.); +#38246 = CYLINDRICAL_SURFACE('',#38247,0.1); +#38247 = AXIS2_PLACEMENT_3D('',#38248,#38249,#38250); +#38248 = CARTESIAN_POINT('',(9.837729952288E-02,2.801622700477, + 0.654320258332)); +#38249 = DIRECTION('',(0.103962051184,-0.103962051184,0.989132844378)); +#38250 = DIRECTION('',(-0.994521895368,9.1635032895E-14,0.104528463267) + ); +#38251 = ADVANCED_FACE('',(#38252),#38279,.T.); +#38252 = FACE_BOUND('',#38253,.T.); +#38253 = EDGE_LOOP('',(#38254,#38255,#38264,#38272)); +#38254 = ORIENTED_EDGE('',*,*,#37912,.F.); +#38255 = ORIENTED_EDGE('',*,*,#38256,.T.); +#38256 = EDGE_CURVE('',#37905,#38257,#38259,.T.); +#38257 = VERTEX_POINT('',#38258); +#38258 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,1.15)); +#38259 = CIRCLE('',#38260,0.1); +#38260 = AXIS2_PLACEMENT_3D('',#38261,#38262,#38263); +#38261 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,1.05)); +#38262 = DIRECTION('',(-2.790846108557E-16,1.,-1.417484439069E-31)); +#38263 = DIRECTION('',(-0.994521895368,-2.775557561563E-16, + 0.104528463268)); +#38264 = ORIENTED_EDGE('',*,*,#38265,.T.); +#38265 = EDGE_CURVE('',#38257,#38266,#38268,.T.); +#38266 = VERTEX_POINT('',#38267); +#38267 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,1.15)); +#38268 = LINE('',#38269,#38270); +#38269 = CARTESIAN_POINT('',(0.139964916181,4.99245117512E-02,1.15)); +#38270 = VECTOR('',#38271,1.); +#38271 = DIRECTION('',(0.,1.,-0.)); +#38272 = ORIENTED_EDGE('',*,*,#38273,.T.); +#38273 = EDGE_CURVE('',#38266,#37913,#38274,.T.); +#38274 = CIRCLE('',#38275,0.1); +#38275 = AXIS2_PLACEMENT_3D('',#38276,#38277,#38278); +#38276 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,1.05)); +#38277 = DIRECTION('',(-0.,-1.,-0.)); +#38278 = DIRECTION('',(-1.,0.,0.)); +#38279 = CYLINDRICAL_SURFACE('',#38280,0.1); +#38280 = AXIS2_PLACEMENT_3D('',#38281,#38282,#38283); +#38281 = CARTESIAN_POINT('',(0.139964916181,4.99245117512E-02,1.05)); +#38282 = DIRECTION('',(0.,1.,-0.)); +#38283 = DIRECTION('',(-0.994521895368,0.,0.104528463268)); +#38284 = ADVANCED_FACE('',(#38285),#38297,.T.); +#38285 = FACE_BOUND('',#38286,.T.); +#38286 = EDGE_LOOP('',(#38287,#38288,#38295,#38296)); +#38287 = ORIENTED_EDGE('',*,*,#38189,.T.); +#38288 = ORIENTED_EDGE('',*,*,#38289,.F.); +#38289 = EDGE_CURVE('',#38040,#38190,#38290,.T.); +#38290 = CIRCLE('',#38291,0.1); +#38291 = AXIS2_PLACEMENT_3D('',#38292,#38293,#38294); +#38292 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,1.05)); +#38293 = DIRECTION('',(-0.103962051184,0.103962051184,0.989132844378)); +#38294 = DIRECTION('',(0.99458126461,1.086699344846E-02,0.10339253619)); +#38295 = ORIENTED_EDGE('',*,*,#38047,.F.); +#38296 = ORIENTED_EDGE('',*,*,#37936,.T.); +#38297 = CYLINDRICAL_SURFACE('',#38298,0.1); +#38298 = AXIS2_PLACEMENT_3D('',#38299,#38300,#38301); +#38299 = CARTESIAN_POINT('',(1.501622700477,9.837729952288E-02, + 0.654320258332)); +#38300 = DIRECTION('',(-0.103962051184,0.103962051184,0.989132844378)); +#38301 = DIRECTION('',(0.994521895368,-9.1635032895E-14,0.104528463267) + ); +#38302 = ADVANCED_FACE('',(#38303),#38328,.T.); +#38303 = FACE_BOUND('',#38304,.T.); +#38304 = EDGE_LOOP('',(#38305,#38306,#38315,#38321)); +#38305 = ORIENTED_EDGE('',*,*,#38039,.T.); +#38306 = ORIENTED_EDGE('',*,*,#38307,.T.); +#38307 = EDGE_CURVE('',#38040,#38308,#38310,.T.); +#38308 = VERTEX_POINT('',#38309); +#38309 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,1.15)); +#38310 = CIRCLE('',#38311,0.1); +#38311 = AXIS2_PLACEMENT_3D('',#38312,#38313,#38314); +#38312 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,1.05)); +#38313 = DIRECTION('',(-1.,-2.254702176123E-15,-2.095566293958E-16)); +#38314 = DIRECTION('',(-4.440892098509E-16,0.104528463268,0.994521895368 + )); +#38315 = ORIENTED_EDGE('',*,*,#38316,.F.); +#38316 = EDGE_CURVE('',#38257,#38308,#38317,.T.); +#38317 = LINE('',#38318,#38319); +#38318 = CARTESIAN_POINT('',(4.99245117512E-02,0.139964916181,1.15)); +#38319 = VECTOR('',#38320,1.); +#38320 = DIRECTION('',(1.,-0.,0.)); +#38321 = ORIENTED_EDGE('',*,*,#38322,.F.); +#38322 = EDGE_CURVE('',#38032,#38257,#38323,.T.); +#38323 = CIRCLE('',#38324,0.1); +#38324 = AXIS2_PLACEMENT_3D('',#38325,#38326,#38327); +#38325 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,1.05)); +#38326 = DIRECTION('',(-1.,5.056505907065E-16,-4.996813960169E-16)); +#38327 = DIRECTION('',(-4.440892098499E-16,0.104528463268,0.994521895368 + )); +#38328 = CYLINDRICAL_SURFACE('',#38329,0.1); +#38329 = AXIS2_PLACEMENT_3D('',#38330,#38331,#38332); +#38330 = CARTESIAN_POINT('',(4.99245117512E-02,0.139964916181,1.05)); +#38331 = DIRECTION('',(1.,-0.,0.)); +#38332 = DIRECTION('',(-0.,-0.994521895368,0.104528463268)); +#38333 = ADVANCED_FACE('',(#38334),#38346,.T.); +#38334 = FACE_BOUND('',#38335,.T.); +#38335 = EDGE_LOOP('',(#38336,#38337,#38344,#38345)); +#38336 = ORIENTED_EDGE('',*,*,#38174,.T.); +#38337 = ORIENTED_EDGE('',*,*,#38338,.T.); +#38338 = EDGE_CURVE('',#38167,#38198,#38339,.T.); +#38339 = CIRCLE('',#38340,0.1); +#38340 = AXIS2_PLACEMENT_3D('',#38341,#38342,#38343); +#38341 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,1.05)); +#38342 = DIRECTION('',(0.103962051184,0.103962051184,-0.989132844378)); +#38343 = DIRECTION('',(9.163156344805E-14,0.994521895368,0.104528463267) + ); +#38344 = ORIENTED_EDGE('',*,*,#38205,.F.); +#38345 = ORIENTED_EDGE('',*,*,#38063,.T.); +#38346 = CYLINDRICAL_SURFACE('',#38347,0.1); +#38347 = AXIS2_PLACEMENT_3D('',#38348,#38349,#38350); +#38348 = CARTESIAN_POINT('',(1.501622700477,2.801622700477, + 0.654320258332)); +#38349 = DIRECTION('',(-0.103962051184,-0.103962051184,0.989132844378)); +#38350 = DIRECTION('',(9.1635032895E-14,0.994521895368,0.104528463267)); +#38351 = ADVANCED_FACE('',(#38352),#38377,.T.); +#38352 = FACE_BOUND('',#38353,.T.); +#38353 = EDGE_LOOP('',(#38354,#38361,#38369,#38376)); +#38354 = ORIENTED_EDGE('',*,*,#38355,.F.); +#38355 = EDGE_CURVE('',#38266,#38159,#38356,.T.); +#38356 = CIRCLE('',#38357,0.1); +#38357 = AXIS2_PLACEMENT_3D('',#38358,#38359,#38360); +#38358 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,1.05)); +#38359 = DIRECTION('',(-1.,-6.123233995737E-17,-0.)); +#38360 = DIRECTION('',(-6.123233995737E-17,1.,0.)); +#38361 = ORIENTED_EDGE('',*,*,#38362,.T.); +#38362 = EDGE_CURVE('',#38266,#38363,#38365,.T.); +#38363 = VERTEX_POINT('',#38364); +#38364 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,1.15)); +#38365 = LINE('',#38366,#38367); +#38366 = CARTESIAN_POINT('',(4.99245117512E-02,2.760035083819,1.15)); +#38367 = VECTOR('',#38368,1.); +#38368 = DIRECTION('',(1.,0.,0.)); +#38369 = ORIENTED_EDGE('',*,*,#38370,.T.); +#38370 = EDGE_CURVE('',#38363,#38167,#38371,.T.); +#38371 = CIRCLE('',#38372,0.1); +#38372 = AXIS2_PLACEMENT_3D('',#38373,#38374,#38375); +#38373 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,1.05)); +#38374 = DIRECTION('',(-1.,0.,0.)); +#38375 = DIRECTION('',(0.,1.,0.)); +#38376 = ORIENTED_EDGE('',*,*,#38166,.F.); +#38377 = CYLINDRICAL_SURFACE('',#38378,0.1); +#38378 = AXIS2_PLACEMENT_3D('',#38379,#38380,#38381); +#38379 = CARTESIAN_POINT('',(4.99245117512E-02,2.760035083819,1.05)); +#38380 = DIRECTION('',(1.,0.,0.)); +#38381 = DIRECTION('',(-0.,0.994521895368,0.104528463268)); +#38382 = ADVANCED_FACE('',(#38383),#38406,.T.); +#38383 = FACE_BOUND('',#38384,.T.); +#38384 = EDGE_LOOP('',(#38385,#38392,#38398,#38405)); +#38385 = ORIENTED_EDGE('',*,*,#38386,.F.); +#38386 = EDGE_CURVE('',#38363,#38198,#38387,.T.); +#38387 = CIRCLE('',#38388,0.1); +#38388 = AXIS2_PLACEMENT_3D('',#38389,#38390,#38391); +#38389 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,1.05)); +#38390 = DIRECTION('',(-6.123233995737E-17,1.,0.)); +#38391 = DIRECTION('',(1.,6.123233995737E-17,0.)); +#38392 = ORIENTED_EDGE('',*,*,#38393,.F.); +#38393 = EDGE_CURVE('',#38308,#38363,#38394,.T.); +#38394 = LINE('',#38395,#38396); +#38395 = CARTESIAN_POINT('',(1.460035083819,4.99245117512E-02,1.15)); +#38396 = VECTOR('',#38397,1.); +#38397 = DIRECTION('',(0.,1.,-0.)); +#38398 = ORIENTED_EDGE('',*,*,#38399,.F.); +#38399 = EDGE_CURVE('',#38190,#38308,#38400,.T.); +#38400 = CIRCLE('',#38401,0.1); +#38401 = AXIS2_PLACEMENT_3D('',#38402,#38403,#38404); +#38402 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,1.05)); +#38403 = DIRECTION('',(2.207400398669E-16,-1.,5.551115123126E-16)); +#38404 = DIRECTION('',(0.994521895368,2.775557561565E-16,0.104528463268) + ); +#38405 = ORIENTED_EDGE('',*,*,#38197,.T.); +#38406 = CYLINDRICAL_SURFACE('',#38407,0.1); +#38407 = AXIS2_PLACEMENT_3D('',#38408,#38409,#38410); +#38408 = CARTESIAN_POINT('',(1.460035083819,4.99245117512E-02,1.05)); +#38409 = DIRECTION('',(0.,1.,-0.)); +#38410 = DIRECTION('',(0.994521895368,0.,0.104528463268)); +#38411 = ADVANCED_FACE('',(#38412),#38417,.T.); +#38412 = FACE_BOUND('',#38413,.T.); +#38413 = EDGE_LOOP('',(#38414,#38415,#38416)); +#38414 = ORIENTED_EDGE('',*,*,#38221,.F.); +#38415 = ORIENTED_EDGE('',*,*,#38322,.T.); +#38416 = ORIENTED_EDGE('',*,*,#38256,.F.); +#38417 = SPHERICAL_SURFACE('',#38418,0.1); +#38418 = AXIS2_PLACEMENT_3D('',#38419,#38420,#38421); +#38419 = CARTESIAN_POINT('',(0.139964916181,0.139964916181,1.05)); +#38420 = DIRECTION('',(5.551115123127E-16,0.994521895368,-0.104528463268 + )); +#38421 = DIRECTION('',(-0.99458126461,1.086699344847E-02,0.10339253619) + ); +#38422 = ADVANCED_FACE('',(#38423),#38428,.T.); +#38423 = FACE_BOUND('',#38424,.T.); +#38424 = EDGE_LOOP('',(#38425,#38426,#38427)); +#38425 = ORIENTED_EDGE('',*,*,#38273,.F.); +#38426 = ORIENTED_EDGE('',*,*,#38355,.T.); +#38427 = ORIENTED_EDGE('',*,*,#38238,.F.); +#38428 = SPHERICAL_SURFACE('',#38429,0.1); +#38429 = AXIS2_PLACEMENT_3D('',#38430,#38431,#38432); +#38430 = CARTESIAN_POINT('',(0.139964916181,2.760035083819,1.05)); +#38431 = DIRECTION('',(0.,0.,-1.)); +#38432 = DIRECTION('',(-1.,0.,0.)); +#38433 = ADVANCED_FACE('',(#38434),#38440,.T.); +#38434 = FACE_BOUND('',#38435,.T.); +#38435 = EDGE_LOOP('',(#38436,#38437,#38438,#38439)); +#38436 = ORIENTED_EDGE('',*,*,#38265,.F.); +#38437 = ORIENTED_EDGE('',*,*,#38316,.T.); +#38438 = ORIENTED_EDGE('',*,*,#38393,.T.); +#38439 = ORIENTED_EDGE('',*,*,#38362,.F.); +#38440 = PLANE('',#38441); +#38441 = AXIS2_PLACEMENT_3D('',#38442,#38443,#38444); +#38442 = CARTESIAN_POINT('',(0.,0.,1.15)); +#38443 = DIRECTION('',(0.,0.,1.)); +#38444 = DIRECTION('',(1.,0.,-0.)); +#38445 = ADVANCED_FACE('',(#38446),#38451,.T.); +#38446 = FACE_BOUND('',#38447,.T.); +#38447 = EDGE_LOOP('',(#38448,#38449,#38450)); +#38448 = ORIENTED_EDGE('',*,*,#38399,.T.); +#38449 = ORIENTED_EDGE('',*,*,#38307,.F.); +#38450 = ORIENTED_EDGE('',*,*,#38289,.T.); +#38451 = SPHERICAL_SURFACE('',#38452,0.1); +#38452 = AXIS2_PLACEMENT_3D('',#38453,#38454,#38455); +#38453 = CARTESIAN_POINT('',(1.460035083819,0.139964916181,1.05)); +#38454 = DIRECTION('',(-2.220446049251E-15,0.994521895368, + -0.104528463268)); +#38455 = DIRECTION('',(0.99458126461,1.086699344847E-02,0.10339253619)); +#38456 = ADVANCED_FACE('',(#38457),#38462,.T.); +#38457 = FACE_BOUND('',#38458,.T.); +#38458 = EDGE_LOOP('',(#38459,#38460,#38461)); +#38459 = ORIENTED_EDGE('',*,*,#38370,.F.); +#38460 = ORIENTED_EDGE('',*,*,#38386,.T.); +#38461 = ORIENTED_EDGE('',*,*,#38338,.F.); +#38462 = SPHERICAL_SURFACE('',#38463,0.1); +#38463 = AXIS2_PLACEMENT_3D('',#38464,#38465,#38466); +#38464 = CARTESIAN_POINT('',(1.460035083819,2.760035083819,1.05)); +#38465 = DIRECTION('',(0.,0.,-1.)); +#38466 = DIRECTION('',(0.,1.,0.)); +#38467 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#38471)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#38468,#38469,#38470)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#38468 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#38469 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#38470 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#38471 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-05),#38468, + 'distance_accuracy_value','confusion accuracy'); +#38472 = SHAPE_DEFINITION_REPRESENTATION(#38473,#36416); +#38473 = PRODUCT_DEFINITION_SHAPE('','',#38474); +#38474 = PRODUCT_DEFINITION('design','',#38475,#38478); +#38475 = PRODUCT_DEFINITION_FORMATION('','',#38476); +#38476 = PRODUCT('Open CASCADE STEP translator 6.8 20.1.1', + 'Open CASCADE STEP translator 6.8 20.1.1','',(#38477)); +#38477 = PRODUCT_CONTEXT('',#2,'mechanical'); +#38478 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#38479 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#38480,#38482); +#38480 = ( REPRESENTATION_RELATIONSHIP('','',#36416,#36406) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#38481) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#38481 = ITEM_DEFINED_TRANSFORMATION('','',#11,#36407); +#38482 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #38483); +#38483 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('61','302','',#36401,#38474,$); +#38484 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#38476)); +#38485 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#38486,#38488); +#38486 = ( REPRESENTATION_RELATIONSHIP('','',#36406,#36377) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#38487) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#38487 = ITEM_DEFINED_TRANSFORMATION('','',#11,#36378); +#38488 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #38489); +#38489 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('62','303','',#36372,#36401,$); +#38490 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#36403)); +#38491 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#38492),#39034); +#38492 = MANIFOLD_SOLID_BREP('',#38493); +#38493 = CLOSED_SHELL('',(#38494,#38534,#38565,#38598,#38629,#38662, + #38693,#38717,#38742,#38766,#38791,#38815,#38839,#38864,#38888, + #38913,#38937,#38954,#38971,#38988,#39005,#39022)); +#38494 = ADVANCED_FACE('',(#38495),#38529,.T.); +#38495 = FACE_BOUND('',#38496,.F.); +#38496 = EDGE_LOOP('',(#38497,#38507,#38515,#38523)); +#38497 = ORIENTED_EDGE('',*,*,#38498,.F.); +#38498 = EDGE_CURVE('',#38499,#38501,#38503,.T.); +#38499 = VERTEX_POINT('',#38500); +#38500 = CARTESIAN_POINT('',(0.,0.2,0.575)); +#38501 = VERTEX_POINT('',#38502); +#38502 = CARTESIAN_POINT('',(0.,-0.2,0.575)); +#38503 = LINE('',#38504,#38505); +#38504 = CARTESIAN_POINT('',(0.,-0.2,0.575)); +#38505 = VECTOR('',#38506,1.); +#38506 = DIRECTION('',(0.,-1.,0.)); +#38507 = ORIENTED_EDGE('',*,*,#38508,.F.); +#38508 = EDGE_CURVE('',#38509,#38499,#38511,.T.); +#38509 = VERTEX_POINT('',#38510); +#38510 = CARTESIAN_POINT('',(0.,0.2,0.675)); +#38511 = LINE('',#38512,#38513); +#38512 = CARTESIAN_POINT('',(0.,0.2,0.575)); +#38513 = VECTOR('',#38514,1.); +#38514 = DIRECTION('',(0.,0.,-1.)); +#38515 = ORIENTED_EDGE('',*,*,#38516,.F.); +#38516 = EDGE_CURVE('',#38517,#38509,#38519,.T.); +#38517 = VERTEX_POINT('',#38518); +#38518 = CARTESIAN_POINT('',(0.,-0.2,0.675)); +#38519 = LINE('',#38520,#38521); +#38520 = CARTESIAN_POINT('',(0.,0.2,0.675)); +#38521 = VECTOR('',#38522,1.); +#38522 = DIRECTION('',(0.,1.,0.)); +#38523 = ORIENTED_EDGE('',*,*,#38524,.F.); +#38524 = EDGE_CURVE('',#38501,#38517,#38525,.T.); +#38525 = LINE('',#38526,#38527); +#38526 = CARTESIAN_POINT('',(0.,-0.2,0.675)); +#38527 = VECTOR('',#38528,1.); +#38528 = DIRECTION('',(0.,0.,1.)); +#38529 = PLANE('',#38530); +#38530 = AXIS2_PLACEMENT_3D('',#38531,#38532,#38533); +#38531 = CARTESIAN_POINT('',(0.,-0.2,0.575)); +#38532 = DIRECTION('',(-1.,0.,0.)); +#38533 = DIRECTION('',(0.,0.,-1.)); +#38534 = ADVANCED_FACE('',(#38535),#38560,.F.); +#38535 = FACE_BOUND('',#38536,.F.); +#38536 = EDGE_LOOP('',(#38537,#38545,#38546,#38554)); +#38537 = ORIENTED_EDGE('',*,*,#38538,.F.); +#38538 = EDGE_CURVE('',#38499,#38539,#38541,.T.); +#38539 = VERTEX_POINT('',#38540); +#38540 = CARTESIAN_POINT('',(5.E-02,0.2,0.575)); +#38541 = LINE('',#38542,#38543); +#38542 = CARTESIAN_POINT('',(0.,0.2,0.575)); +#38543 = VECTOR('',#38544,1.); +#38544 = DIRECTION('',(1.,0.,0.)); +#38545 = ORIENTED_EDGE('',*,*,#38498,.T.); +#38546 = ORIENTED_EDGE('',*,*,#38547,.T.); +#38547 = EDGE_CURVE('',#38501,#38548,#38550,.T.); +#38548 = VERTEX_POINT('',#38549); +#38549 = CARTESIAN_POINT('',(5.E-02,-0.2,0.575)); +#38550 = LINE('',#38551,#38552); +#38551 = CARTESIAN_POINT('',(0.,-0.2,0.575)); +#38552 = VECTOR('',#38553,1.); +#38553 = DIRECTION('',(1.,0.,0.)); +#38554 = ORIENTED_EDGE('',*,*,#38555,.F.); +#38555 = EDGE_CURVE('',#38539,#38548,#38556,.T.); +#38556 = LINE('',#38557,#38558); +#38557 = CARTESIAN_POINT('',(5.E-02,-0.2,0.575)); +#38558 = VECTOR('',#38559,1.); +#38559 = DIRECTION('',(0.,-1.,0.)); +#38560 = PLANE('',#38561); +#38561 = AXIS2_PLACEMENT_3D('',#38562,#38563,#38564); +#38562 = CARTESIAN_POINT('',(0.,-0.2,0.575)); +#38563 = DIRECTION('',(-0.,0.,1.)); +#38564 = DIRECTION('',(0.,-1.,0.)); +#38565 = ADVANCED_FACE('',(#38566),#38593,.F.); +#38566 = FACE_BOUND('',#38567,.F.); +#38567 = EDGE_LOOP('',(#38568,#38577,#38578,#38587)); +#38568 = ORIENTED_EDGE('',*,*,#38569,.F.); +#38569 = EDGE_CURVE('',#38539,#38570,#38572,.T.); +#38570 = VERTEX_POINT('',#38571); +#38571 = CARTESIAN_POINT('',(0.15,0.2,0.475)); +#38572 = CIRCLE('',#38573,0.1); +#38573 = AXIS2_PLACEMENT_3D('',#38574,#38575,#38576); +#38574 = CARTESIAN_POINT('',(5.E-02,0.2,0.475)); +#38575 = DIRECTION('',(0.,1.,0.)); +#38576 = DIRECTION('',(0.,0.,-1.)); +#38577 = ORIENTED_EDGE('',*,*,#38555,.T.); +#38578 = ORIENTED_EDGE('',*,*,#38579,.T.); +#38579 = EDGE_CURVE('',#38548,#38580,#38582,.T.); +#38580 = VERTEX_POINT('',#38581); +#38581 = CARTESIAN_POINT('',(0.15,-0.2,0.475)); +#38582 = CIRCLE('',#38583,0.1); +#38583 = AXIS2_PLACEMENT_3D('',#38584,#38585,#38586); +#38584 = CARTESIAN_POINT('',(5.E-02,-0.2,0.475)); +#38585 = DIRECTION('',(0.,1.,0.)); +#38586 = DIRECTION('',(0.,0.,-1.)); +#38587 = ORIENTED_EDGE('',*,*,#38588,.T.); +#38588 = EDGE_CURVE('',#38580,#38570,#38589,.T.); +#38589 = LINE('',#38590,#38591); +#38590 = CARTESIAN_POINT('',(0.15,-0.2,0.475)); +#38591 = VECTOR('',#38592,1.); +#38592 = DIRECTION('',(0.,1.,0.)); +#38593 = CYLINDRICAL_SURFACE('',#38594,0.1); +#38594 = AXIS2_PLACEMENT_3D('',#38595,#38596,#38597); +#38595 = CARTESIAN_POINT('',(5.E-02,-0.2,0.475)); +#38596 = DIRECTION('',(0.,1.,0.)); +#38597 = DIRECTION('',(0.,0.,-1.)); +#38598 = ADVANCED_FACE('',(#38599),#38624,.F.); +#38599 = FACE_BOUND('',#38600,.F.); +#38600 = EDGE_LOOP('',(#38601,#38609,#38610,#38618)); +#38601 = ORIENTED_EDGE('',*,*,#38602,.F.); +#38602 = EDGE_CURVE('',#38570,#38603,#38605,.T.); +#38603 = VERTEX_POINT('',#38604); +#38604 = CARTESIAN_POINT('',(0.15,0.2,0.2)); +#38605 = LINE('',#38606,#38607); +#38606 = CARTESIAN_POINT('',(0.15,0.2,0.475)); +#38607 = VECTOR('',#38608,1.); +#38608 = DIRECTION('',(0.,0.,-1.)); +#38609 = ORIENTED_EDGE('',*,*,#38588,.F.); +#38610 = ORIENTED_EDGE('',*,*,#38611,.T.); +#38611 = EDGE_CURVE('',#38580,#38612,#38614,.T.); +#38612 = VERTEX_POINT('',#38613); +#38613 = CARTESIAN_POINT('',(0.15,-0.2,0.2)); +#38614 = LINE('',#38615,#38616); +#38615 = CARTESIAN_POINT('',(0.15,-0.2,0.475)); +#38616 = VECTOR('',#38617,1.); +#38617 = DIRECTION('',(0.,0.,-1.)); +#38618 = ORIENTED_EDGE('',*,*,#38619,.F.); +#38619 = EDGE_CURVE('',#38603,#38612,#38620,.T.); +#38620 = LINE('',#38621,#38622); +#38621 = CARTESIAN_POINT('',(0.15,-0.2,0.2)); +#38622 = VECTOR('',#38623,1.); +#38623 = DIRECTION('',(0.,-1.,0.)); +#38624 = PLANE('',#38625); +#38625 = AXIS2_PLACEMENT_3D('',#38626,#38627,#38628); +#38626 = CARTESIAN_POINT('',(0.15,-0.2,0.475)); +#38627 = DIRECTION('',(1.,0.,0.)); +#38628 = DIRECTION('',(0.,-1.,0.)); +#38629 = ADVANCED_FACE('',(#38630),#38657,.T.); +#38630 = FACE_BOUND('',#38631,.T.); +#38631 = EDGE_LOOP('',(#38632,#38641,#38649,#38656)); +#38632 = ORIENTED_EDGE('',*,*,#38633,.T.); +#38633 = EDGE_CURVE('',#38603,#38634,#38636,.T.); +#38634 = VERTEX_POINT('',#38635); +#38635 = CARTESIAN_POINT('',(0.35,0.2,0.)); +#38636 = CIRCLE('',#38637,0.2); +#38637 = AXIS2_PLACEMENT_3D('',#38638,#38639,#38640); +#38638 = CARTESIAN_POINT('',(0.35,0.2,0.2)); +#38639 = DIRECTION('',(0.,-1.,0.)); +#38640 = DIRECTION('',(0.,0.,-1.)); +#38641 = ORIENTED_EDGE('',*,*,#38642,.T.); +#38642 = EDGE_CURVE('',#38634,#38643,#38645,.T.); +#38643 = VERTEX_POINT('',#38644); +#38644 = CARTESIAN_POINT('',(0.35,-0.2,0.)); +#38645 = LINE('',#38646,#38647); +#38646 = CARTESIAN_POINT('',(0.35,-0.2,0.)); +#38647 = VECTOR('',#38648,1.); +#38648 = DIRECTION('',(0.,-1.,0.)); +#38649 = ORIENTED_EDGE('',*,*,#38650,.F.); +#38650 = EDGE_CURVE('',#38612,#38643,#38651,.T.); +#38651 = CIRCLE('',#38652,0.2); +#38652 = AXIS2_PLACEMENT_3D('',#38653,#38654,#38655); +#38653 = CARTESIAN_POINT('',(0.35,-0.2,0.2)); +#38654 = DIRECTION('',(0.,-1.,0.)); +#38655 = DIRECTION('',(0.,0.,-1.)); +#38656 = ORIENTED_EDGE('',*,*,#38619,.F.); +#38657 = CYLINDRICAL_SURFACE('',#38658,0.2); +#38658 = AXIS2_PLACEMENT_3D('',#38659,#38660,#38661); +#38659 = CARTESIAN_POINT('',(0.35,-0.2,0.2)); +#38660 = DIRECTION('',(0.,-1.,0.)); +#38661 = DIRECTION('',(0.,0.,-1.)); +#38662 = ADVANCED_FACE('',(#38663),#38688,.F.); +#38663 = FACE_BOUND('',#38664,.F.); +#38664 = EDGE_LOOP('',(#38665,#38673,#38674,#38682)); +#38665 = ORIENTED_EDGE('',*,*,#38666,.F.); +#38666 = EDGE_CURVE('',#38634,#38667,#38669,.T.); +#38667 = VERTEX_POINT('',#38668); +#38668 = CARTESIAN_POINT('',(0.6,0.2,0.)); +#38669 = LINE('',#38670,#38671); +#38670 = CARTESIAN_POINT('',(0.35,0.2,0.)); +#38671 = VECTOR('',#38672,1.); +#38672 = DIRECTION('',(1.,0.,0.)); +#38673 = ORIENTED_EDGE('',*,*,#38642,.T.); +#38674 = ORIENTED_EDGE('',*,*,#38675,.T.); +#38675 = EDGE_CURVE('',#38643,#38676,#38678,.T.); +#38676 = VERTEX_POINT('',#38677); +#38677 = CARTESIAN_POINT('',(0.6,-0.2,0.)); +#38678 = LINE('',#38679,#38680); +#38679 = CARTESIAN_POINT('',(0.35,-0.2,0.)); +#38680 = VECTOR('',#38681,1.); +#38681 = DIRECTION('',(1.,0.,0.)); +#38682 = ORIENTED_EDGE('',*,*,#38683,.F.); +#38683 = EDGE_CURVE('',#38667,#38676,#38684,.T.); +#38684 = LINE('',#38685,#38686); +#38685 = CARTESIAN_POINT('',(0.6,-0.2,0.)); +#38686 = VECTOR('',#38687,1.); +#38687 = DIRECTION('',(0.,-1.,0.)); +#38688 = PLANE('',#38689); +#38689 = AXIS2_PLACEMENT_3D('',#38690,#38691,#38692); +#38690 = CARTESIAN_POINT('',(0.35,-0.2,0.)); +#38691 = DIRECTION('',(-0.,0.,1.)); +#38692 = DIRECTION('',(0.,-1.,0.)); +#38693 = ADVANCED_FACE('',(#38694),#38712,.F.); +#38694 = FACE_BOUND('',#38695,.F.); +#38695 = EDGE_LOOP('',(#38696,#38697,#38698,#38706)); +#38696 = ORIENTED_EDGE('',*,*,#38547,.F.); +#38697 = ORIENTED_EDGE('',*,*,#38524,.T.); +#38698 = ORIENTED_EDGE('',*,*,#38699,.T.); +#38699 = EDGE_CURVE('',#38517,#38700,#38702,.T.); +#38700 = VERTEX_POINT('',#38701); +#38701 = CARTESIAN_POINT('',(5.E-02,-0.2,0.675)); +#38702 = LINE('',#38703,#38704); +#38703 = CARTESIAN_POINT('',(0.,-0.2,0.675)); +#38704 = VECTOR('',#38705,1.); +#38705 = DIRECTION('',(1.,-0.,0.)); +#38706 = ORIENTED_EDGE('',*,*,#38707,.F.); +#38707 = EDGE_CURVE('',#38548,#38700,#38708,.T.); +#38708 = LINE('',#38709,#38710); +#38709 = CARTESIAN_POINT('',(5.E-02,-0.2,0.675)); +#38710 = VECTOR('',#38711,1.); +#38711 = DIRECTION('',(0.,0.,1.)); +#38712 = PLANE('',#38713); +#38713 = AXIS2_PLACEMENT_3D('',#38714,#38715,#38716); +#38714 = CARTESIAN_POINT('',(0.,-0.2,0.675)); +#38715 = DIRECTION('',(0.,1.,-0.)); +#38716 = DIRECTION('',(0.,0.,1.)); +#38717 = ADVANCED_FACE('',(#38718),#38737,.T.); +#38718 = FACE_BOUND('',#38719,.T.); +#38719 = EDGE_LOOP('',(#38720,#38721,#38729,#38736)); +#38720 = ORIENTED_EDGE('',*,*,#38579,.T.); +#38721 = ORIENTED_EDGE('',*,*,#38722,.T.); +#38722 = EDGE_CURVE('',#38580,#38723,#38725,.T.); +#38723 = VERTEX_POINT('',#38724); +#38724 = CARTESIAN_POINT('',(0.25,-0.2,0.475)); +#38725 = LINE('',#38726,#38727); +#38726 = CARTESIAN_POINT('',(0.25,-0.2,0.475)); +#38727 = VECTOR('',#38728,1.); +#38728 = DIRECTION('',(1.,0.,9.95799250103E-17)); +#38729 = ORIENTED_EDGE('',*,*,#38730,.F.); +#38730 = EDGE_CURVE('',#38700,#38723,#38731,.T.); +#38731 = CIRCLE('',#38732,0.2); +#38732 = AXIS2_PLACEMENT_3D('',#38733,#38734,#38735); +#38733 = CARTESIAN_POINT('',(5.E-02,-0.2,0.475)); +#38734 = DIRECTION('',(0.,1.,0.)); +#38735 = DIRECTION('',(-6.938893903907E-17,0.,-1.)); +#38736 = ORIENTED_EDGE('',*,*,#38707,.F.); +#38737 = PLANE('',#38738); +#38738 = AXIS2_PLACEMENT_3D('',#38739,#38740,#38741); +#38739 = CARTESIAN_POINT('',(0.156066017178,-0.2,0.581066017178)); +#38740 = DIRECTION('',(-0.,-1.,-0.)); +#38741 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#38742 = ADVANCED_FACE('',(#38743),#38761,.F.); +#38743 = FACE_BOUND('',#38744,.F.); +#38744 = EDGE_LOOP('',(#38745,#38746,#38747,#38755)); +#38745 = ORIENTED_EDGE('',*,*,#38611,.F.); +#38746 = ORIENTED_EDGE('',*,*,#38722,.T.); +#38747 = ORIENTED_EDGE('',*,*,#38748,.T.); +#38748 = EDGE_CURVE('',#38723,#38749,#38751,.T.); +#38749 = VERTEX_POINT('',#38750); +#38750 = CARTESIAN_POINT('',(0.25,-0.2,0.2)); +#38751 = LINE('',#38752,#38753); +#38752 = CARTESIAN_POINT('',(0.25,-0.2,0.475)); +#38753 = VECTOR('',#38754,1.); +#38754 = DIRECTION('',(6.123233995737E-17,0.,-1.)); +#38755 = ORIENTED_EDGE('',*,*,#38756,.F.); +#38756 = EDGE_CURVE('',#38612,#38749,#38757,.T.); +#38757 = LINE('',#38758,#38759); +#38758 = CARTESIAN_POINT('',(0.25,-0.2,0.2)); +#38759 = VECTOR('',#38760,1.); +#38760 = DIRECTION('',(1.,0.,6.123233995737E-17)); +#38761 = PLANE('',#38762); +#38762 = AXIS2_PLACEMENT_3D('',#38763,#38764,#38765); +#38763 = CARTESIAN_POINT('',(0.25,-0.2,0.475)); +#38764 = DIRECTION('',(-0.,1.,0.)); +#38765 = DIRECTION('',(1.,0.,6.123233995737E-17)); +#38766 = ADVANCED_FACE('',(#38767),#38786,.T.); +#38767 = FACE_BOUND('',#38768,.T.); +#38768 = EDGE_LOOP('',(#38769,#38770,#38778,#38785)); +#38769 = ORIENTED_EDGE('',*,*,#38650,.T.); +#38770 = ORIENTED_EDGE('',*,*,#38771,.T.); +#38771 = EDGE_CURVE('',#38643,#38772,#38774,.T.); +#38772 = VERTEX_POINT('',#38773); +#38773 = CARTESIAN_POINT('',(0.35,-0.2,0.1)); +#38774 = LINE('',#38775,#38776); +#38775 = CARTESIAN_POINT('',(0.35,-0.2,0.1)); +#38776 = VECTOR('',#38777,1.); +#38777 = DIRECTION('',(2.449293598295E-16,0.,1.)); +#38778 = ORIENTED_EDGE('',*,*,#38779,.F.); +#38779 = EDGE_CURVE('',#38749,#38772,#38780,.T.); +#38780 = CIRCLE('',#38781,0.1); +#38781 = AXIS2_PLACEMENT_3D('',#38782,#38783,#38784); +#38782 = CARTESIAN_POINT('',(0.35,-0.2,0.2)); +#38783 = DIRECTION('',(0.,-1.,0.)); +#38784 = DIRECTION('',(0.,0.,-1.)); +#38785 = ORIENTED_EDGE('',*,*,#38756,.F.); +#38786 = PLANE('',#38787); +#38787 = AXIS2_PLACEMENT_3D('',#38788,#38789,#38790); +#38788 = CARTESIAN_POINT('',(0.243933982822,-0.2,9.393398282202E-02)); +#38789 = DIRECTION('',(0.,-1.,0.)); +#38790 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#38791 = ADVANCED_FACE('',(#38792),#38810,.F.); +#38792 = FACE_BOUND('',#38793,.F.); +#38793 = EDGE_LOOP('',(#38794,#38795,#38796,#38804)); +#38794 = ORIENTED_EDGE('',*,*,#38675,.F.); +#38795 = ORIENTED_EDGE('',*,*,#38771,.T.); +#38796 = ORIENTED_EDGE('',*,*,#38797,.T.); +#38797 = EDGE_CURVE('',#38772,#38798,#38800,.T.); +#38798 = VERTEX_POINT('',#38799); +#38799 = CARTESIAN_POINT('',(0.6,-0.2,0.1)); +#38800 = LINE('',#38801,#38802); +#38801 = CARTESIAN_POINT('',(0.35,-0.2,0.1)); +#38802 = VECTOR('',#38803,1.); +#38803 = DIRECTION('',(1.,-0.,0.)); +#38804 = ORIENTED_EDGE('',*,*,#38805,.F.); +#38805 = EDGE_CURVE('',#38676,#38798,#38806,.T.); +#38806 = LINE('',#38807,#38808); +#38807 = CARTESIAN_POINT('',(0.6,-0.2,0.1)); +#38808 = VECTOR('',#38809,1.); +#38809 = DIRECTION('',(0.,0.,1.)); +#38810 = PLANE('',#38811); +#38811 = AXIS2_PLACEMENT_3D('',#38812,#38813,#38814); +#38812 = CARTESIAN_POINT('',(0.35,-0.2,0.1)); +#38813 = DIRECTION('',(0.,1.,-0.)); +#38814 = DIRECTION('',(0.,0.,1.)); +#38815 = ADVANCED_FACE('',(#38816),#38834,.F.); +#38816 = FACE_BOUND('',#38817,.F.); +#38817 = EDGE_LOOP('',(#38818,#38819,#38820,#38828)); +#38818 = ORIENTED_EDGE('',*,*,#38699,.F.); +#38819 = ORIENTED_EDGE('',*,*,#38516,.T.); +#38820 = ORIENTED_EDGE('',*,*,#38821,.T.); +#38821 = EDGE_CURVE('',#38509,#38822,#38824,.T.); +#38822 = VERTEX_POINT('',#38823); +#38823 = CARTESIAN_POINT('',(5.E-02,0.2,0.675)); +#38824 = LINE('',#38825,#38826); +#38825 = CARTESIAN_POINT('',(0.,0.2,0.675)); +#38826 = VECTOR('',#38827,1.); +#38827 = DIRECTION('',(1.,-0.,0.)); +#38828 = ORIENTED_EDGE('',*,*,#38829,.F.); +#38829 = EDGE_CURVE('',#38700,#38822,#38830,.T.); +#38830 = LINE('',#38831,#38832); +#38831 = CARTESIAN_POINT('',(5.E-02,0.2,0.675)); +#38832 = VECTOR('',#38833,1.); +#38833 = DIRECTION('',(0.,1.,0.)); +#38834 = PLANE('',#38835); +#38835 = AXIS2_PLACEMENT_3D('',#38836,#38837,#38838); +#38836 = CARTESIAN_POINT('',(0.,0.2,0.675)); +#38837 = DIRECTION('',(0.,-0.,-1.)); +#38838 = DIRECTION('',(0.,1.,0.)); +#38839 = ADVANCED_FACE('',(#38840),#38859,.T.); +#38840 = FACE_BOUND('',#38841,.T.); +#38841 = EDGE_LOOP('',(#38842,#38843,#38851,#38858)); +#38842 = ORIENTED_EDGE('',*,*,#38730,.T.); +#38843 = ORIENTED_EDGE('',*,*,#38844,.T.); +#38844 = EDGE_CURVE('',#38723,#38845,#38847,.T.); +#38845 = VERTEX_POINT('',#38846); +#38846 = CARTESIAN_POINT('',(0.25,0.2,0.475)); +#38847 = LINE('',#38848,#38849); +#38848 = CARTESIAN_POINT('',(0.25,0.2,0.475)); +#38849 = VECTOR('',#38850,1.); +#38850 = DIRECTION('',(0.,1.,0.)); +#38851 = ORIENTED_EDGE('',*,*,#38852,.F.); +#38852 = EDGE_CURVE('',#38822,#38845,#38853,.T.); +#38853 = CIRCLE('',#38854,0.2); +#38854 = AXIS2_PLACEMENT_3D('',#38855,#38856,#38857); +#38855 = CARTESIAN_POINT('',(5.E-02,0.2,0.475)); +#38856 = DIRECTION('',(0.,1.,0.)); +#38857 = DIRECTION('',(-6.938893903907E-17,0.,-1.)); +#38858 = ORIENTED_EDGE('',*,*,#38829,.F.); +#38859 = CYLINDRICAL_SURFACE('',#38860,0.2); +#38860 = AXIS2_PLACEMENT_3D('',#38861,#38862,#38863); +#38861 = CARTESIAN_POINT('',(5.E-02,0.2,0.475)); +#38862 = DIRECTION('',(0.,1.,0.)); +#38863 = DIRECTION('',(-6.938893903907E-17,0.,-1.)); +#38864 = ADVANCED_FACE('',(#38865),#38883,.F.); +#38865 = FACE_BOUND('',#38866,.F.); +#38866 = EDGE_LOOP('',(#38867,#38868,#38869,#38877)); +#38867 = ORIENTED_EDGE('',*,*,#38748,.F.); +#38868 = ORIENTED_EDGE('',*,*,#38844,.T.); +#38869 = ORIENTED_EDGE('',*,*,#38870,.T.); +#38870 = EDGE_CURVE('',#38845,#38871,#38873,.T.); +#38871 = VERTEX_POINT('',#38872); +#38872 = CARTESIAN_POINT('',(0.25,0.2,0.2)); +#38873 = LINE('',#38874,#38875); +#38874 = CARTESIAN_POINT('',(0.25,0.2,0.475)); +#38875 = VECTOR('',#38876,1.); +#38876 = DIRECTION('',(0.,0.,-1.)); +#38877 = ORIENTED_EDGE('',*,*,#38878,.F.); +#38878 = EDGE_CURVE('',#38749,#38871,#38879,.T.); +#38879 = LINE('',#38880,#38881); +#38880 = CARTESIAN_POINT('',(0.25,0.2,0.2)); +#38881 = VECTOR('',#38882,1.); +#38882 = DIRECTION('',(0.,1.,0.)); +#38883 = PLANE('',#38884); +#38884 = AXIS2_PLACEMENT_3D('',#38885,#38886,#38887); +#38885 = CARTESIAN_POINT('',(0.25,0.2,0.475)); +#38886 = DIRECTION('',(-1.,0.,-0.)); +#38887 = DIRECTION('',(0.,1.,0.)); +#38888 = ADVANCED_FACE('',(#38889),#38908,.F.); +#38889 = FACE_BOUND('',#38890,.F.); +#38890 = EDGE_LOOP('',(#38891,#38892,#38893,#38902)); +#38891 = ORIENTED_EDGE('',*,*,#38779,.F.); +#38892 = ORIENTED_EDGE('',*,*,#38878,.T.); +#38893 = ORIENTED_EDGE('',*,*,#38894,.T.); +#38894 = EDGE_CURVE('',#38871,#38895,#38897,.T.); +#38895 = VERTEX_POINT('',#38896); +#38896 = CARTESIAN_POINT('',(0.35,0.2,0.1)); +#38897 = CIRCLE('',#38898,0.1); +#38898 = AXIS2_PLACEMENT_3D('',#38899,#38900,#38901); +#38899 = CARTESIAN_POINT('',(0.35,0.2,0.2)); +#38900 = DIRECTION('',(0.,-1.,0.)); +#38901 = DIRECTION('',(0.,0.,-1.)); +#38902 = ORIENTED_EDGE('',*,*,#38903,.T.); +#38903 = EDGE_CURVE('',#38895,#38772,#38904,.T.); +#38904 = LINE('',#38905,#38906); +#38905 = CARTESIAN_POINT('',(0.35,0.2,0.1)); +#38906 = VECTOR('',#38907,1.); +#38907 = DIRECTION('',(0.,-1.,0.)); +#38908 = CYLINDRICAL_SURFACE('',#38909,0.1); +#38909 = AXIS2_PLACEMENT_3D('',#38910,#38911,#38912); +#38910 = CARTESIAN_POINT('',(0.35,0.2,0.2)); +#38911 = DIRECTION('',(0.,-1.,0.)); +#38912 = DIRECTION('',(0.,0.,-1.)); +#38913 = ADVANCED_FACE('',(#38914),#38932,.F.); +#38914 = FACE_BOUND('',#38915,.F.); +#38915 = EDGE_LOOP('',(#38916,#38917,#38918,#38926)); +#38916 = ORIENTED_EDGE('',*,*,#38797,.F.); +#38917 = ORIENTED_EDGE('',*,*,#38903,.F.); +#38918 = ORIENTED_EDGE('',*,*,#38919,.T.); +#38919 = EDGE_CURVE('',#38895,#38920,#38922,.T.); +#38920 = VERTEX_POINT('',#38921); +#38921 = CARTESIAN_POINT('',(0.6,0.2,0.1)); +#38922 = LINE('',#38923,#38924); +#38923 = CARTESIAN_POINT('',(0.35,0.2,0.1)); +#38924 = VECTOR('',#38925,1.); +#38925 = DIRECTION('',(1.,-0.,0.)); +#38926 = ORIENTED_EDGE('',*,*,#38927,.F.); +#38927 = EDGE_CURVE('',#38798,#38920,#38928,.T.); +#38928 = LINE('',#38929,#38930); +#38929 = CARTESIAN_POINT('',(0.6,0.2,0.1)); +#38930 = VECTOR('',#38931,1.); +#38931 = DIRECTION('',(0.,1.,0.)); +#38932 = PLANE('',#38933); +#38933 = AXIS2_PLACEMENT_3D('',#38934,#38935,#38936); +#38934 = CARTESIAN_POINT('',(0.35,0.2,0.1)); +#38935 = DIRECTION('',(0.,-0.,-1.)); +#38936 = DIRECTION('',(0.,1.,0.)); +#38937 = ADVANCED_FACE('',(#38938),#38949,.F.); +#38938 = FACE_BOUND('',#38939,.F.); +#38939 = EDGE_LOOP('',(#38940,#38941,#38942,#38943)); +#38940 = ORIENTED_EDGE('',*,*,#38821,.F.); +#38941 = ORIENTED_EDGE('',*,*,#38508,.T.); +#38942 = ORIENTED_EDGE('',*,*,#38538,.T.); +#38943 = ORIENTED_EDGE('',*,*,#38944,.F.); +#38944 = EDGE_CURVE('',#38822,#38539,#38945,.T.); +#38945 = LINE('',#38946,#38947); +#38946 = CARTESIAN_POINT('',(5.E-02,0.2,0.575)); +#38947 = VECTOR('',#38948,1.); +#38948 = DIRECTION('',(0.,0.,-1.)); +#38949 = PLANE('',#38950); +#38950 = AXIS2_PLACEMENT_3D('',#38951,#38952,#38953); +#38951 = CARTESIAN_POINT('',(0.,0.2,0.575)); +#38952 = DIRECTION('',(0.,-1.,0.)); +#38953 = DIRECTION('',(0.,0.,-1.)); +#38954 = ADVANCED_FACE('',(#38955),#38966,.T.); +#38955 = FACE_BOUND('',#38956,.T.); +#38956 = EDGE_LOOP('',(#38957,#38958,#38964,#38965)); +#38957 = ORIENTED_EDGE('',*,*,#38852,.T.); +#38958 = ORIENTED_EDGE('',*,*,#38959,.T.); +#38959 = EDGE_CURVE('',#38845,#38570,#38960,.T.); +#38960 = LINE('',#38961,#38962); +#38961 = CARTESIAN_POINT('',(0.15,0.2,0.475)); +#38962 = VECTOR('',#38963,1.); +#38963 = DIRECTION('',(-1.,0.,-9.95799250103E-17)); +#38964 = ORIENTED_EDGE('',*,*,#38569,.F.); +#38965 = ORIENTED_EDGE('',*,*,#38944,.F.); +#38966 = PLANE('',#38967); +#38967 = AXIS2_PLACEMENT_3D('',#38968,#38969,#38970); +#38968 = CARTESIAN_POINT('',(0.156066017178,0.2,0.581066017178)); +#38969 = DIRECTION('',(0.,1.,0.)); +#38970 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#38971 = ADVANCED_FACE('',(#38972),#38983,.F.); +#38972 = FACE_BOUND('',#38973,.F.); +#38973 = EDGE_LOOP('',(#38974,#38975,#38976,#38977)); +#38974 = ORIENTED_EDGE('',*,*,#38870,.F.); +#38975 = ORIENTED_EDGE('',*,*,#38959,.T.); +#38976 = ORIENTED_EDGE('',*,*,#38602,.T.); +#38977 = ORIENTED_EDGE('',*,*,#38978,.F.); +#38978 = EDGE_CURVE('',#38871,#38603,#38979,.T.); +#38979 = LINE('',#38980,#38981); +#38980 = CARTESIAN_POINT('',(0.15,0.2,0.2)); +#38981 = VECTOR('',#38982,1.); +#38982 = DIRECTION('',(-1.,0.,-6.123233995737E-17)); +#38983 = PLANE('',#38984); +#38984 = AXIS2_PLACEMENT_3D('',#38985,#38986,#38987); +#38985 = CARTESIAN_POINT('',(0.15,0.2,0.475)); +#38986 = DIRECTION('',(0.,-1.,-0.)); +#38987 = DIRECTION('',(-1.,0.,-6.123233995737E-17)); +#38988 = ADVANCED_FACE('',(#38989),#39000,.T.); +#38989 = FACE_BOUND('',#38990,.T.); +#38990 = EDGE_LOOP('',(#38991,#38992,#38998,#38999)); +#38991 = ORIENTED_EDGE('',*,*,#38894,.T.); +#38992 = ORIENTED_EDGE('',*,*,#38993,.T.); +#38993 = EDGE_CURVE('',#38895,#38634,#38994,.T.); +#38994 = LINE('',#38995,#38996); +#38995 = CARTESIAN_POINT('',(0.35,0.2,-2.458549093428E-18)); +#38996 = VECTOR('',#38997,1.); +#38997 = DIRECTION('',(-2.449293598295E-16,0.,-1.)); +#38998 = ORIENTED_EDGE('',*,*,#38633,.F.); +#38999 = ORIENTED_EDGE('',*,*,#38978,.F.); +#39000 = PLANE('',#39001); +#39001 = AXIS2_PLACEMENT_3D('',#39002,#39003,#39004); +#39002 = CARTESIAN_POINT('',(0.243933982822,0.2,9.393398282202E-02)); +#39003 = DIRECTION('',(-0.,1.,-0.)); +#39004 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#39005 = ADVANCED_FACE('',(#39006),#39017,.F.); +#39006 = FACE_BOUND('',#39007,.F.); +#39007 = EDGE_LOOP('',(#39008,#39009,#39010,#39011)); +#39008 = ORIENTED_EDGE('',*,*,#38919,.F.); +#39009 = ORIENTED_EDGE('',*,*,#38993,.T.); +#39010 = ORIENTED_EDGE('',*,*,#38666,.T.); +#39011 = ORIENTED_EDGE('',*,*,#39012,.F.); +#39012 = EDGE_CURVE('',#38920,#38667,#39013,.T.); +#39013 = LINE('',#39014,#39015); +#39014 = CARTESIAN_POINT('',(0.6,0.2,0.)); +#39015 = VECTOR('',#39016,1.); +#39016 = DIRECTION('',(0.,0.,-1.)); +#39017 = PLANE('',#39018); +#39018 = AXIS2_PLACEMENT_3D('',#39019,#39020,#39021); +#39019 = CARTESIAN_POINT('',(0.35,0.2,0.)); +#39020 = DIRECTION('',(0.,-1.,0.)); +#39021 = DIRECTION('',(0.,0.,-1.)); +#39022 = ADVANCED_FACE('',(#39023),#39029,.F.); +#39023 = FACE_BOUND('',#39024,.T.); +#39024 = EDGE_LOOP('',(#39025,#39026,#39027,#39028)); +#39025 = ORIENTED_EDGE('',*,*,#38683,.F.); +#39026 = ORIENTED_EDGE('',*,*,#39012,.F.); +#39027 = ORIENTED_EDGE('',*,*,#38927,.F.); +#39028 = ORIENTED_EDGE('',*,*,#38805,.F.); +#39029 = PLANE('',#39030); +#39030 = AXIS2_PLACEMENT_3D('',#39031,#39032,#39033); +#39031 = CARTESIAN_POINT('',(0.6,-0.2,0.)); +#39032 = DIRECTION('',(-1.,0.,0.)); +#39033 = DIRECTION('',(0.,0.,-1.)); +#39034 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#39038)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#39035,#39036,#39037)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#39035 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#39036 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#39037 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#39038 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#39035, + 'distance_accuracy_value','confusion accuracy'); +#39039 = SHAPE_DEFINITION_REPRESENTATION(#39040,#38491); +#39040 = PRODUCT_DEFINITION_SHAPE('','',#39041); +#39041 = PRODUCT_DEFINITION('design','',#39042,#39045); +#39042 = PRODUCT_DEFINITION_FORMATION('','',#39043); +#39043 = PRODUCT('Leader','Leader','',(#39044)); +#39044 = PRODUCT_CONTEXT('',#2,'mechanical'); +#39045 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#39046 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#39047,#39049); +#39047 = ( REPRESENTATION_RELATIONSHIP('','',#38491,#36377) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#39048) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#39048 = ITEM_DEFINED_TRANSFORMATION('','',#11,#36382); +#39049 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #39050); +#39050 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('63','304','',#36372,#39041,$); +#39051 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#39043)); +#39052 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#39053,#39055); +#39053 = ( REPRESENTATION_RELATIONSHIP('','',#38491,#36377) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#39054) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#39054 = ITEM_DEFINED_TRANSFORMATION('','',#11,#36386); +#39055 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #39056); +#39056 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('64','305','',#36372,#39041,$); +#39057 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#39058,#39060); +#39058 = ( REPRESENTATION_RELATIONSHIP('','',#38491,#36377) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#39059) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#39059 = ITEM_DEFINED_TRANSFORMATION('','',#11,#36390); +#39060 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #39061); +#39061 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('65','306','',#36372,#39041,$); +#39062 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#39063,#39065); +#39063 = ( REPRESENTATION_RELATIONSHIP('','',#36377,#36360) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#39064) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#39064 = ITEM_DEFINED_TRANSFORMATION('','',#11,#36361); +#39065 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #39066); +#39066 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('66','','',#36355,#36372,$); +#39067 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#36374)); +#39068 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#39069,#39071); +#39069 = ( REPRESENTATION_RELATIONSHIP('','',#36360,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#39070) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#39070 = ITEM_DEFINED_TRANSFORMATION('','',#11,#87); +#39071 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #39072); +#39072 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('67','','',#5,#36355,$); +#39073 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#36357)); +#39074 = SHAPE_DEFINITION_REPRESENTATION(#39075,#39081); +#39075 = PRODUCT_DEFINITION_SHAPE('','',#39076); +#39076 = PRODUCT_DEFINITION('design','',#39077,#39080); +#39077 = PRODUCT_DEFINITION_FORMATION('','',#39078); +#39078 = PRODUCT('L1','L1','',(#39079)); +#39079 = PRODUCT_CONTEXT('',#2,'mechanical'); +#39080 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#39081 = SHAPE_REPRESENTATION('',(#11,#39082),#39086); +#39082 = AXIS2_PLACEMENT_3D('',#39083,#39084,#39085); +#39083 = CARTESIAN_POINT('',(297.0119934082,173.75241088867,0.)); +#39084 = DIRECTION('',(0.,0.,1.)); +#39085 = DIRECTION('',(1.,0.,0.)); +#39086 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#39090)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#39087,#39088,#39089)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#39087 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#39088 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#39089 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#39090 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#39087, + 'distance_accuracy_value','confusion accuracy'); +#39091 = SHAPE_DEFINITION_REPRESENTATION(#39092,#39098); +#39092 = PRODUCT_DEFINITION_SHAPE('','',#39093); +#39093 = PRODUCT_DEFINITION('design','',#39094,#39097); +#39094 = PRODUCT_DEFINITION_FORMATION('','',#39095); +#39095 = PRODUCT('6699548640','6699548640','',(#39096)); +#39096 = PRODUCT_CONTEXT('',#2,'mechanical'); +#39097 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#39098 = SHAPE_REPRESENTATION('',(#11,#39099),#39103); +#39099 = AXIS2_PLACEMENT_3D('',#39100,#39101,#39102); +#39100 = CARTESIAN_POINT('',(0.,0.,0.)); +#39101 = DIRECTION('',(0.,0.,1.)); +#39102 = DIRECTION('',(1.,0.,0.)); +#39103 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#39107)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#39104,#39105,#39106)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#39104 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#39105 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#39106 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#39107 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#39104, + 'distance_accuracy_value','confusion accuracy'); +#39108 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#39109),#39259); +#39109 = MANIFOLD_SOLID_BREP('',#39110); +#39110 = CLOSED_SHELL('',(#39111,#39151,#39182,#39213,#39235,#39247)); +#39111 = ADVANCED_FACE('',(#39112),#39146,.F.); +#39112 = FACE_BOUND('',#39113,.F.); +#39113 = EDGE_LOOP('',(#39114,#39124,#39132,#39140)); +#39114 = ORIENTED_EDGE('',*,*,#39115,.T.); +#39115 = EDGE_CURVE('',#39116,#39118,#39120,.T.); +#39116 = VERTEX_POINT('',#39117); +#39117 = CARTESIAN_POINT('',(-2.50000008,-2.50000008,0.)); +#39118 = VERTEX_POINT('',#39119); +#39119 = CARTESIAN_POINT('',(-2.50000008,-2.50000008,2.00000108)); +#39120 = LINE('',#39121,#39122); +#39121 = CARTESIAN_POINT('',(-2.50000008,-2.50000008,0.)); +#39122 = VECTOR('',#39123,1.); +#39123 = DIRECTION('',(0.,0.,1.)); +#39124 = ORIENTED_EDGE('',*,*,#39125,.T.); +#39125 = EDGE_CURVE('',#39118,#39126,#39128,.T.); +#39126 = VERTEX_POINT('',#39127); +#39127 = CARTESIAN_POINT('',(2.50000008,-2.50000008,2.00000108)); +#39128 = LINE('',#39129,#39130); +#39129 = CARTESIAN_POINT('',(-2.50000008,-2.50000008,2.00000108)); +#39130 = VECTOR('',#39131,1.); +#39131 = DIRECTION('',(1.,0.,0.)); +#39132 = ORIENTED_EDGE('',*,*,#39133,.F.); +#39133 = EDGE_CURVE('',#39134,#39126,#39136,.T.); +#39134 = VERTEX_POINT('',#39135); +#39135 = CARTESIAN_POINT('',(2.50000008,-2.50000008,0.)); +#39136 = LINE('',#39137,#39138); +#39137 = CARTESIAN_POINT('',(2.50000008,-2.50000008,0.)); +#39138 = VECTOR('',#39139,1.); +#39139 = DIRECTION('',(0.,0.,1.)); +#39140 = ORIENTED_EDGE('',*,*,#39141,.F.); +#39141 = EDGE_CURVE('',#39116,#39134,#39142,.T.); +#39142 = LINE('',#39143,#39144); +#39143 = CARTESIAN_POINT('',(-2.50000008,-2.50000008,0.)); +#39144 = VECTOR('',#39145,1.); +#39145 = DIRECTION('',(1.,0.,0.)); +#39146 = PLANE('',#39147); +#39147 = AXIS2_PLACEMENT_3D('',#39148,#39149,#39150); +#39148 = CARTESIAN_POINT('',(-2.50000008,-2.50000008,0.)); +#39149 = DIRECTION('',(0.,1.,0.)); +#39150 = DIRECTION('',(1.,0.,0.)); +#39151 = ADVANCED_FACE('',(#39152),#39177,.F.); +#39152 = FACE_BOUND('',#39153,.F.); +#39153 = EDGE_LOOP('',(#39154,#39155,#39163,#39171)); +#39154 = ORIENTED_EDGE('',*,*,#39133,.T.); +#39155 = ORIENTED_EDGE('',*,*,#39156,.T.); +#39156 = EDGE_CURVE('',#39126,#39157,#39159,.T.); +#39157 = VERTEX_POINT('',#39158); +#39158 = CARTESIAN_POINT('',(2.50000008,2.50000008,2.00000108)); +#39159 = LINE('',#39160,#39161); +#39160 = CARTESIAN_POINT('',(2.50000008,-2.50000008,2.00000108)); +#39161 = VECTOR('',#39162,1.); +#39162 = DIRECTION('',(0.,1.,0.)); +#39163 = ORIENTED_EDGE('',*,*,#39164,.F.); +#39164 = EDGE_CURVE('',#39165,#39157,#39167,.T.); +#39165 = VERTEX_POINT('',#39166); +#39166 = CARTESIAN_POINT('',(2.50000008,2.50000008,0.)); +#39167 = LINE('',#39168,#39169); +#39168 = CARTESIAN_POINT('',(2.50000008,2.50000008,0.)); +#39169 = VECTOR('',#39170,1.); +#39170 = DIRECTION('',(0.,0.,1.)); +#39171 = ORIENTED_EDGE('',*,*,#39172,.F.); +#39172 = EDGE_CURVE('',#39134,#39165,#39173,.T.); +#39173 = LINE('',#39174,#39175); +#39174 = CARTESIAN_POINT('',(2.50000008,-2.50000008,0.)); +#39175 = VECTOR('',#39176,1.); +#39176 = DIRECTION('',(0.,1.,0.)); +#39177 = PLANE('',#39178); +#39178 = AXIS2_PLACEMENT_3D('',#39179,#39180,#39181); +#39179 = CARTESIAN_POINT('',(2.50000008,-2.50000008,0.)); +#39180 = DIRECTION('',(-1.,0.,0.)); +#39181 = DIRECTION('',(0.,1.,0.)); +#39182 = ADVANCED_FACE('',(#39183),#39208,.F.); +#39183 = FACE_BOUND('',#39184,.F.); +#39184 = EDGE_LOOP('',(#39185,#39186,#39194,#39202)); +#39185 = ORIENTED_EDGE('',*,*,#39164,.T.); +#39186 = ORIENTED_EDGE('',*,*,#39187,.T.); +#39187 = EDGE_CURVE('',#39157,#39188,#39190,.T.); +#39188 = VERTEX_POINT('',#39189); +#39189 = CARTESIAN_POINT('',(-2.50000008,2.50000008,2.00000108)); +#39190 = LINE('',#39191,#39192); +#39191 = CARTESIAN_POINT('',(2.50000008,2.50000008,2.00000108)); +#39192 = VECTOR('',#39193,1.); +#39193 = DIRECTION('',(-1.,0.,0.)); +#39194 = ORIENTED_EDGE('',*,*,#39195,.F.); +#39195 = EDGE_CURVE('',#39196,#39188,#39198,.T.); +#39196 = VERTEX_POINT('',#39197); +#39197 = CARTESIAN_POINT('',(-2.50000008,2.50000008,0.)); +#39198 = LINE('',#39199,#39200); +#39199 = CARTESIAN_POINT('',(-2.50000008,2.50000008,0.)); +#39200 = VECTOR('',#39201,1.); +#39201 = DIRECTION('',(0.,0.,1.)); +#39202 = ORIENTED_EDGE('',*,*,#39203,.F.); +#39203 = EDGE_CURVE('',#39165,#39196,#39204,.T.); +#39204 = LINE('',#39205,#39206); +#39205 = CARTESIAN_POINT('',(2.50000008,2.50000008,0.)); +#39206 = VECTOR('',#39207,1.); +#39207 = DIRECTION('',(-1.,0.,0.)); +#39208 = PLANE('',#39209); +#39209 = AXIS2_PLACEMENT_3D('',#39210,#39211,#39212); +#39210 = CARTESIAN_POINT('',(2.50000008,2.50000008,0.)); +#39211 = DIRECTION('',(0.,-1.,0.)); +#39212 = DIRECTION('',(-1.,0.,0.)); +#39213 = ADVANCED_FACE('',(#39214),#39230,.F.); +#39214 = FACE_BOUND('',#39215,.F.); +#39215 = EDGE_LOOP('',(#39216,#39217,#39223,#39224)); +#39216 = ORIENTED_EDGE('',*,*,#39195,.T.); +#39217 = ORIENTED_EDGE('',*,*,#39218,.T.); +#39218 = EDGE_CURVE('',#39188,#39118,#39219,.T.); +#39219 = LINE('',#39220,#39221); +#39220 = CARTESIAN_POINT('',(-2.50000008,2.50000008,2.00000108)); +#39221 = VECTOR('',#39222,1.); +#39222 = DIRECTION('',(0.,-1.,0.)); +#39223 = ORIENTED_EDGE('',*,*,#39115,.F.); +#39224 = ORIENTED_EDGE('',*,*,#39225,.F.); +#39225 = EDGE_CURVE('',#39196,#39116,#39226,.T.); +#39226 = LINE('',#39227,#39228); +#39227 = CARTESIAN_POINT('',(-2.50000008,2.50000008,0.)); +#39228 = VECTOR('',#39229,1.); +#39229 = DIRECTION('',(0.,-1.,0.)); +#39230 = PLANE('',#39231); +#39231 = AXIS2_PLACEMENT_3D('',#39232,#39233,#39234); +#39232 = CARTESIAN_POINT('',(-2.50000008,2.50000008,0.)); +#39233 = DIRECTION('',(1.,0.,-0.)); +#39234 = DIRECTION('',(0.,-1.,0.)); +#39235 = ADVANCED_FACE('',(#39236),#39242,.F.); +#39236 = FACE_BOUND('',#39237,.F.); +#39237 = EDGE_LOOP('',(#39238,#39239,#39240,#39241)); +#39238 = ORIENTED_EDGE('',*,*,#39141,.T.); +#39239 = ORIENTED_EDGE('',*,*,#39172,.T.); +#39240 = ORIENTED_EDGE('',*,*,#39203,.T.); +#39241 = ORIENTED_EDGE('',*,*,#39225,.T.); +#39242 = PLANE('',#39243); +#39243 = AXIS2_PLACEMENT_3D('',#39244,#39245,#39246); +#39244 = CARTESIAN_POINT('',(-8.881783912784E-17,8.881783912784E-17,0.) + ); +#39245 = DIRECTION('',(0.,0.,1.)); +#39246 = DIRECTION('',(1.,0.,-0.)); +#39247 = ADVANCED_FACE('',(#39248),#39254,.T.); +#39248 = FACE_BOUND('',#39249,.T.); +#39249 = EDGE_LOOP('',(#39250,#39251,#39252,#39253)); +#39250 = ORIENTED_EDGE('',*,*,#39125,.T.); +#39251 = ORIENTED_EDGE('',*,*,#39156,.T.); +#39252 = ORIENTED_EDGE('',*,*,#39187,.T.); +#39253 = ORIENTED_EDGE('',*,*,#39218,.T.); +#39254 = PLANE('',#39255); +#39255 = AXIS2_PLACEMENT_3D('',#39256,#39257,#39258); +#39256 = CARTESIAN_POINT('',(-8.881783912784E-17,8.881783912784E-17, + 2.00000108)); +#39257 = DIRECTION('',(0.,0.,1.)); +#39258 = DIRECTION('',(1.,0.,-0.)); +#39259 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#39263)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#39260,#39261,#39262)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#39260 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#39261 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#39262 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#39263 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#39260, + 'distance_accuracy_value','confusion accuracy'); +#39264 = SHAPE_DEFINITION_REPRESENTATION(#39265,#39108); +#39265 = PRODUCT_DEFINITION_SHAPE('','',#39266); +#39266 = PRODUCT_DEFINITION('design','',#39267,#39270); +#39267 = PRODUCT_DEFINITION_FORMATION('','',#39268); +#39268 = PRODUCT('Extruded','Extruded','',(#39269)); +#39269 = PRODUCT_CONTEXT('',#2,'mechanical'); +#39270 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#39271 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#39272,#39274); +#39272 = ( REPRESENTATION_RELATIONSHIP('','',#39108,#39098) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#39273) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#39273 = ITEM_DEFINED_TRANSFORMATION('','',#11,#39099); +#39274 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #39275); +#39275 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('68','2','',#39093,#39266,$); +#39276 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#39268)); +#39277 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#39278,#39280); +#39278 = ( REPRESENTATION_RELATIONSHIP('','',#39098,#39081) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#39279) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#39279 = ITEM_DEFINED_TRANSFORMATION('','',#11,#39082); +#39280 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #39281); +#39281 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('69','','',#39076,#39093,$); +#39282 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#39095)); +#39283 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#39284,#39286); +#39284 = ( REPRESENTATION_RELATIONSHIP('','',#39081,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#39285) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#39285 = ITEM_DEFINED_TRANSFORMATION('','',#11,#91); +#39286 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #39287); +#39287 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('70','','',#5,#39076,$); +#39288 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#39078)); +#39289 = SHAPE_DEFINITION_REPRESENTATION(#39290,#39296); +#39290 = PRODUCT_DEFINITION_SHAPE('','',#39291); +#39291 = PRODUCT_DEFINITION('design','',#39292,#39295); +#39292 = PRODUCT_DEFINITION_FORMATION('','',#39293); +#39293 = PRODUCT('J1','J1','',(#39294)); +#39294 = PRODUCT_CONTEXT('',#2,'mechanical'); +#39295 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#39296 = SHAPE_REPRESENTATION('',(#11,#39297),#39301); +#39297 = AXIS2_PLACEMENT_3D('',#39298,#39299,#39300); +#39298 = CARTESIAN_POINT('',(309.12619018554,177.82400512695,0.)); +#39299 = DIRECTION('',(0.,0.,1.)); +#39300 = DIRECTION('',(-4.371138828674E-08,1.,0.)); +#39301 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#39305)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#39302,#39303,#39304)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#39302 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#39303 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#39304 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#39305 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#39302, + 'distance_accuracy_value','confusion accuracy'); +#39306 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#39307),#54664); +#39307 = MANIFOLD_SOLID_BREP('',#39308); +#39308 = CLOSED_SHELL('',(#39309,#39357,#39388,#39429,#39491,#39531, + #39573,#39604,#39644,#39676,#39716,#39758,#39789,#39820,#39867, + #39943,#40041,#40070,#40152,#40215,#40313,#40344,#40373,#40446, + #40463,#40480,#40497,#40514,#40531,#40548,#40560,#40648,#40688, + #40728,#40759,#40904,#40934,#40965,#40996,#41036,#41092,#41123, + #41154,#41178,#41218,#41267,#41291,#41331,#41348,#41370,#41382, + #41399,#41416,#41433,#41450,#41467,#41484,#41496,#41520,#41560, + #41583,#41605,#41623,#41674,#41716,#41747,#41778,#41809,#41842, + #41873,#41904,#41935,#41968,#41999,#42032,#42063,#42094,#42125, + #42147,#42186,#42225,#42242,#42254,#42268,#42299,#42330,#42352, + #42366,#42390,#42407,#43118,#43158,#43256,#43287,#43311,#44029, + #44060,#44077,#44111,#44142,#44166,#44255,#44295,#44324,#44399, + #44416,#44433,#44450,#44467,#44484,#44501,#44518,#44530,#44554, + #44566,#44583,#44600,#44631,#44662,#44693,#44726,#44750,#44766, + #44808,#44841,#44867,#44889,#44906,#44995,#45026,#45054,#45083, + #45158,#45175,#45192,#45209,#45226,#45243,#45260,#45277,#45289, + #45322,#45339,#45370,#45401,#45436,#45480,#45504,#45548,#45572, + #45605,#45622,#45639,#45670,#45694,#45734,#45755,#45786,#45861, + #45941,#45981,#46063,#46094,#46174,#46198,#46231,#46248,#46265, + #46296,#46320,#46360,#46381,#46468,#46492,#46567,#46607,#46689, + #46720,#46800,#46824,#46857,#46874,#46891,#46922,#46946,#46986, + #47007,#47038,#47113,#47193,#47233,#47315,#47346,#47426,#47450, + #47483,#47500,#47517,#47548,#47572,#47612,#47633,#47664,#47739, + #47819,#47859,#47941,#47972,#48052,#48076,#48109,#48126,#48143, + #48174,#48198,#48238,#48259,#48290,#48365,#48445,#48485,#48567, + #48598,#48678,#48702,#48735,#48752,#48769,#48800,#48824,#48864, + #48885,#48916,#48991,#49071,#49111,#49200,#49229,#49304,#49328, + #49361,#49378,#49395,#49426,#49450,#49490,#49511,#49542,#49617, + #49697,#49737,#49819,#49850,#49930,#49954,#49987,#50004,#50021, + #50052,#50076,#50116,#50137,#50224,#50248,#50323,#50363,#50445, + #50476,#50556,#50580,#50613,#50630,#50647,#50678,#50702,#50733, + #50754,#50778,#50853,#50870,#50887,#50904,#50921,#50938,#50955, + #50972,#50984,#50996,#51013,#51030,#51047,#51064,#51081,#51098, + #51115,#51127,#51144,#51161,#51178,#51195,#51212,#51229,#51246, + #51258,#51270,#51287,#51304,#51321,#51338,#51355,#51372,#51389, + #51401,#51418,#51435,#51452,#51469,#51486,#51503,#51520,#51532, + #51544,#51561,#51578,#51595,#51612,#51629,#51646,#51663,#51675, + #51692,#51709,#51726,#51743,#51760,#51777,#51794,#51806,#51818, + #51835,#51852,#51869,#51886,#51903,#51920,#51937,#51949,#51966, + #51983,#52000,#52017,#52034,#52051,#52068,#52080,#52092,#52109, + #52126,#52143,#52160,#52177,#52194,#52211,#52223,#52240,#52257, + #52274,#52291,#52308,#52325,#52342,#52354,#52366,#52383,#52400, + #52417,#52434,#52451,#52468,#52485,#52497,#52514,#52531,#52548, + #52565,#52582,#52599,#52616,#52628,#52640,#52657,#52674,#52691, + #52708,#52725,#52742,#52759,#52771,#52788,#52805,#52822,#52839, + #52856,#52873,#52890,#52902,#52914,#52931,#52948,#52965,#52982, + #52999,#53016,#53033,#53045,#53062,#53079,#53096,#53113,#53130, + #53147,#53164,#53176,#53188,#53205,#53222,#53234,#53256,#53296, + #53334,#53363,#53387,#53442,#53474,#53505,#53531,#53555,#53588, + #53619,#53636,#53654,#53705,#53747,#53778,#53809,#53840,#53873, + #53904,#53935,#53966,#53999,#54030,#54063,#54094,#54125,#54156, + #54178,#54217,#54256,#54273,#54285,#54299,#54316,#54340,#54365, + #54377,#54401,#54418,#54432,#54449,#54466,#54488,#54500,#54512, + #54529,#54560,#54583,#54600,#54617,#54629,#54646)); +#39309 = ADVANCED_FACE('',(#39310),#39352,.T.); +#39310 = FACE_BOUND('',#39311,.T.); +#39311 = EDGE_LOOP('',(#39312,#39322,#39330,#39338,#39346)); +#39312 = ORIENTED_EDGE('',*,*,#39313,.F.); +#39313 = EDGE_CURVE('',#39314,#39316,#39318,.T.); +#39314 = VERTEX_POINT('',#39315); +#39315 = CARTESIAN_POINT('',(-6.8,0.9,1.)); +#39316 = VERTEX_POINT('',#39317); +#39317 = CARTESIAN_POINT('',(-6.9,1.,1.)); +#39318 = LINE('',#39319,#39320); +#39319 = CARTESIAN_POINT('',(10.,-15.9,1.)); +#39320 = VECTOR('',#39321,1.); +#39321 = DIRECTION('',(-0.707106781187,0.707106781187,0.)); +#39322 = ORIENTED_EDGE('',*,*,#39323,.T.); +#39323 = EDGE_CURVE('',#39314,#39324,#39326,.T.); +#39324 = VERTEX_POINT('',#39325); +#39325 = CARTESIAN_POINT('',(-6.8,0.9,0.84)); +#39326 = LINE('',#39327,#39328); +#39327 = CARTESIAN_POINT('',(-6.8,0.9,0.841614)); +#39328 = VECTOR('',#39329,1.); +#39329 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39330 = ORIENTED_EDGE('',*,*,#39331,.T.); +#39331 = EDGE_CURVE('',#39324,#39332,#39334,.T.); +#39332 = VERTEX_POINT('',#39333); +#39333 = CARTESIAN_POINT('',(-6.8,0.9,0.31)); +#39334 = LINE('',#39335,#39336); +#39335 = CARTESIAN_POINT('',(-6.8,0.9,0.841614)); +#39336 = VECTOR('',#39337,1.); +#39337 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39338 = ORIENTED_EDGE('',*,*,#39339,.T.); +#39339 = EDGE_CURVE('',#39332,#39340,#39342,.T.); +#39340 = VERTEX_POINT('',#39341); +#39341 = CARTESIAN_POINT('',(-6.9,1.,0.31)); +#39342 = LINE('',#39343,#39344); +#39343 = CARTESIAN_POINT('',(1.,-6.9,0.31)); +#39344 = VECTOR('',#39345,1.); +#39345 = DIRECTION('',(-0.707106781187,0.707106781187,5.551115123126E-17 + )); +#39346 = ORIENTED_EDGE('',*,*,#39347,.F.); +#39347 = EDGE_CURVE('',#39316,#39340,#39348,.T.); +#39348 = LINE('',#39349,#39350); +#39349 = CARTESIAN_POINT('',(-6.9,1.,0.841614)); +#39350 = VECTOR('',#39351,1.); +#39351 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39352 = PLANE('',#39353); +#39353 = AXIS2_PLACEMENT_3D('',#39354,#39355,#39356); +#39354 = CARTESIAN_POINT('',(-6.85,0.95,0.675)); +#39355 = DIRECTION('',(0.707106781187,0.707106781187,-2.372388238963E-16 + )); +#39356 = DIRECTION('',(-0.707106781187,0.707106781187, + -1.096688116283E-16)); +#39357 = ADVANCED_FACE('',(#39358),#39383,.F.); +#39358 = FACE_BOUND('',#39359,.T.); +#39359 = EDGE_LOOP('',(#39360,#39370,#39376,#39377)); +#39360 = ORIENTED_EDGE('',*,*,#39361,.T.); +#39361 = EDGE_CURVE('',#39362,#39364,#39366,.T.); +#39362 = VERTEX_POINT('',#39363); +#39363 = CARTESIAN_POINT('',(-6.77,0.9,0.84)); +#39364 = VERTEX_POINT('',#39365); +#39365 = CARTESIAN_POINT('',(-6.77,0.9,0.31)); +#39366 = LINE('',#39367,#39368); +#39367 = CARTESIAN_POINT('',(-6.77,0.9,0.841614)); +#39368 = VECTOR('',#39369,1.); +#39369 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39370 = ORIENTED_EDGE('',*,*,#39371,.T.); +#39371 = EDGE_CURVE('',#39364,#39332,#39372,.T.); +#39372 = LINE('',#39373,#39374); +#39373 = CARTESIAN_POINT('',(-7.5,0.9,0.31)); +#39374 = VECTOR('',#39375,1.); +#39375 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39376 = ORIENTED_EDGE('',*,*,#39331,.F.); +#39377 = ORIENTED_EDGE('',*,*,#39378,.F.); +#39378 = EDGE_CURVE('',#39362,#39324,#39379,.T.); +#39379 = LINE('',#39380,#39381); +#39380 = CARTESIAN_POINT('',(-7.5,0.9,0.84)); +#39381 = VECTOR('',#39382,1.); +#39382 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39383 = PLANE('',#39384); +#39384 = AXIS2_PLACEMENT_3D('',#39385,#39386,#39387); +#39385 = CARTESIAN_POINT('',(-5.75,0.9,0.29)); +#39386 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#39387 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39388 = ADVANCED_FACE('',(#39389),#39424,.T.); +#39389 = FACE_BOUND('',#39390,.T.); +#39390 = EDGE_LOOP('',(#39391,#39401,#39409,#39417)); +#39391 = ORIENTED_EDGE('',*,*,#39392,.T.); +#39392 = EDGE_CURVE('',#39393,#39395,#39397,.T.); +#39393 = VERTEX_POINT('',#39394); +#39394 = CARTESIAN_POINT('',(-6.72,0.51,0.94)); +#39395 = VERTEX_POINT('',#39396); +#39396 = CARTESIAN_POINT('',(-6.72,1.9,0.94)); +#39397 = LINE('',#39398,#39399); +#39398 = CARTESIAN_POINT('',(-6.72,0.694863,0.94)); +#39399 = VECTOR('',#39400,1.); +#39400 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#39401 = ORIENTED_EDGE('',*,*,#39402,.T.); +#39402 = EDGE_CURVE('',#39395,#39403,#39405,.T.); +#39403 = VERTEX_POINT('',#39404); +#39404 = CARTESIAN_POINT('',(-6.77,1.9,0.89)); +#39405 = LINE('',#39406,#39407); +#39406 = CARTESIAN_POINT('',(-6.818386,1.9,0.841614)); +#39407 = VECTOR('',#39408,1.); +#39408 = DIRECTION('',(-0.707106781187,-1.619157848018E-16, + -0.707106781187)); +#39409 = ORIENTED_EDGE('',*,*,#39410,.T.); +#39410 = EDGE_CURVE('',#39403,#39411,#39413,.T.); +#39411 = VERTEX_POINT('',#39412); +#39412 = CARTESIAN_POINT('',(-6.77,0.46,0.89)); +#39413 = LINE('',#39414,#39415); +#39414 = CARTESIAN_POINT('',(-6.77,0.694863,0.89)); +#39415 = VECTOR('',#39416,1.); +#39416 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#39417 = ORIENTED_EDGE('',*,*,#39418,.T.); +#39418 = EDGE_CURVE('',#39411,#39393,#39419,.T.); +#39419 = ELLIPSE('',#39420,7.071067811865E-02,5.E-02); +#39420 = AXIS2_PLACEMENT_3D('',#39421,#39422,#39423); +#39421 = CARTESIAN_POINT('',(-6.77,0.51,0.89)); +#39422 = DIRECTION('',(-0.707106781187,7.532303909457E-17,0.707106781187 + )); +#39423 = DIRECTION('',(0.707106781187,7.532303909457E-17,0.707106781187) + ); +#39424 = PLANE('',#39425); +#39425 = AXIS2_PLACEMENT_3D('',#39426,#39427,#39428); +#39426 = CARTESIAN_POINT('',(-6.745,1.603724317761,0.915)); +#39427 = DIRECTION('',(-0.707106781187,7.532303909457E-17,0.707106781187 + )); +#39428 = DIRECTION('',(0.707106781187,7.532303909457E-17,0.707106781187) + ); +#39429 = ADVANCED_FACE('',(#39430),#39486,.F.); +#39430 = FACE_BOUND('',#39431,.T.); +#39431 = EDGE_LOOP('',(#39432,#39440,#39441,#39449,#39457,#39465,#39473, + #39479,#39480)); +#39432 = ORIENTED_EDGE('',*,*,#39433,.F.); +#39433 = EDGE_CURVE('',#39411,#39434,#39436,.T.); +#39434 = VERTEX_POINT('',#39435); +#39435 = CARTESIAN_POINT('',(-6.77,0.46,0.84)); +#39436 = LINE('',#39437,#39438); +#39437 = CARTESIAN_POINT('',(-6.77,0.46,0.841614)); +#39438 = VECTOR('',#39439,1.); +#39439 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39440 = ORIENTED_EDGE('',*,*,#39410,.F.); +#39441 = ORIENTED_EDGE('',*,*,#39442,.F.); +#39442 = EDGE_CURVE('',#39443,#39403,#39445,.T.); +#39443 = VERTEX_POINT('',#39444); +#39444 = CARTESIAN_POINT('',(-6.77,1.9,0.6)); +#39445 = LINE('',#39446,#39447); +#39446 = CARTESIAN_POINT('',(-6.77,1.9,0.841614)); +#39447 = VECTOR('',#39448,1.); +#39448 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#39449 = ORIENTED_EDGE('',*,*,#39450,.F.); +#39450 = EDGE_CURVE('',#39451,#39443,#39453,.T.); +#39451 = VERTEX_POINT('',#39452); +#39452 = CARTESIAN_POINT('',(-6.77,1.65,0.47)); +#39453 = LINE('',#39454,#39455); +#39454 = CARTESIAN_POINT('',(-6.77,0.694863,-2.667124E-02)); +#39455 = VECTOR('',#39456,1.); +#39456 = DIRECTION('',(1.056421638306E-16,0.887216801235,0.461352736642) + ); +#39457 = ORIENTED_EDGE('',*,*,#39458,.F.); +#39458 = EDGE_CURVE('',#39459,#39451,#39461,.T.); +#39459 = VERTEX_POINT('',#39460); +#39460 = CARTESIAN_POINT('',(-6.77,1.65,0.31)); +#39461 = LINE('',#39462,#39463); +#39462 = CARTESIAN_POINT('',(-6.77,1.65,0.841614)); +#39463 = VECTOR('',#39464,1.); +#39464 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#39465 = ORIENTED_EDGE('',*,*,#39466,.T.); +#39466 = EDGE_CURVE('',#39459,#39467,#39469,.T.); +#39467 = VERTEX_POINT('',#39468); +#39468 = CARTESIAN_POINT('',(-6.77,1.,0.31)); +#39469 = LINE('',#39470,#39471); +#39470 = CARTESIAN_POINT('',(-6.77,1.045602317761,0.31)); +#39471 = VECTOR('',#39472,1.); +#39472 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#39473 = ORIENTED_EDGE('',*,*,#39474,.T.); +#39474 = EDGE_CURVE('',#39467,#39364,#39475,.T.); +#39475 = LINE('',#39476,#39477); +#39476 = CARTESIAN_POINT('',(-6.77,0.694863,0.31)); +#39477 = VECTOR('',#39478,1.); +#39478 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#39479 = ORIENTED_EDGE('',*,*,#39361,.F.); +#39480 = ORIENTED_EDGE('',*,*,#39481,.F.); +#39481 = EDGE_CURVE('',#39434,#39362,#39482,.T.); +#39482 = LINE('',#39483,#39484); +#39483 = CARTESIAN_POINT('',(-6.77,0.694863,0.84)); +#39484 = VECTOR('',#39485,1.); +#39485 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#39486 = PLANE('',#39487); +#39487 = AXIS2_PLACEMENT_3D('',#39488,#39489,#39490); +#39488 = CARTESIAN_POINT('',(-6.77,1.045602317761,-0.794708)); +#39489 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39490 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#39491 = ADVANCED_FACE('',(#39492),#39526,.T.); +#39492 = FACE_BOUND('',#39493,.T.); +#39493 = EDGE_LOOP('',(#39494,#39504,#39512,#39520)); +#39494 = ORIENTED_EDGE('',*,*,#39495,.F.); +#39495 = EDGE_CURVE('',#39496,#39498,#39500,.T.); +#39496 = VERTEX_POINT('',#39497); +#39497 = CARTESIAN_POINT('',(-5.1,1.,8.E-02)); +#39498 = VERTEX_POINT('',#39499); +#39499 = CARTESIAN_POINT('',(-5.1,0.92,8.E-02)); +#39500 = LINE('',#39501,#39502); +#39501 = CARTESIAN_POINT('',(-5.1,0.694863,8.E-02)); +#39502 = VECTOR('',#39503,1.); +#39503 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#39504 = ORIENTED_EDGE('',*,*,#39505,.F.); +#39505 = EDGE_CURVE('',#39506,#39496,#39508,.T.); +#39506 = VERTEX_POINT('',#39507); +#39507 = CARTESIAN_POINT('',(-5.05,1.,3.E-02)); +#39508 = LINE('',#39509,#39510); +#39509 = CARTESIAN_POINT('',(-20.5,1.,15.48)); +#39510 = VECTOR('',#39511,1.); +#39511 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#39512 = ORIENTED_EDGE('',*,*,#39513,.F.); +#39513 = EDGE_CURVE('',#39514,#39506,#39516,.T.); +#39514 = VERTEX_POINT('',#39515); +#39515 = CARTESIAN_POINT('',(-5.05,0.7,3.E-02)); +#39516 = LINE('',#39517,#39518); +#39517 = CARTESIAN_POINT('',(-5.05,0.694863,3.E-02)); +#39518 = VECTOR('',#39519,1.); +#39519 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#39520 = ORIENTED_EDGE('',*,*,#39521,.T.); +#39521 = EDGE_CURVE('',#39514,#39498,#39522,.T.); +#39522 = LINE('',#39523,#39524); +#39523 = CARTESIAN_POINT('',(-5.0488325,0.694863,2.88325E-02)); +#39524 = VECTOR('',#39525,1.); +#39525 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#39526 = PLANE('',#39527); +#39527 = AXIS2_PLACEMENT_3D('',#39528,#39529,#39530); +#39528 = CARTESIAN_POINT('',(-5.075,0.85,5.5E-02)); +#39529 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#39530 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#39531 = ADVANCED_FACE('',(#39532),#39568,.T.); +#39532 = FACE_BOUND('',#39533,.T.); +#39533 = EDGE_LOOP('',(#39534,#39544,#39553,#39561)); +#39534 = ORIENTED_EDGE('',*,*,#39535,.T.); +#39535 = EDGE_CURVE('',#39536,#39538,#39540,.T.); +#39536 = VERTEX_POINT('',#39537); +#39537 = CARTESIAN_POINT('',(-4.325,0.92,3.619548911246E-02)); +#39538 = VERTEX_POINT('',#39539); +#39539 = CARTESIAN_POINT('',(-4.175,0.92,3.619548911246E-02)); +#39540 = LINE('',#39541,#39542); +#39541 = CARTESIAN_POINT('',(-4.325,0.92,3.619548911246E-02)); +#39542 = VECTOR('',#39543,1.); +#39543 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39544 = ORIENTED_EDGE('',*,*,#39545,.F.); +#39545 = EDGE_CURVE('',#39546,#39538,#39548,.T.); +#39546 = VERTEX_POINT('',#39547); +#39547 = CARTESIAN_POINT('',(-4.175,0.943186633611,6.541154699934E-02)); +#39548 = CIRCLE('',#39549,3.E-02); +#39549 = AXIS2_PLACEMENT_3D('',#39550,#39551,#39552); +#39550 = CARTESIAN_POINT('',(-4.175,0.95,3.619548911246E-02)); +#39551 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39552 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#39553 = ORIENTED_EDGE('',*,*,#39554,.F.); +#39554 = EDGE_CURVE('',#39555,#39546,#39557,.T.); +#39555 = VERTEX_POINT('',#39556); +#39556 = CARTESIAN_POINT('',(-4.325,0.943186633611,6.541154699934E-02)); +#39557 = LINE('',#39558,#39559); +#39558 = CARTESIAN_POINT('',(-4.325,0.943186633611,6.541154699934E-02)); +#39559 = VECTOR('',#39560,1.); +#39560 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39561 = ORIENTED_EDGE('',*,*,#39562,.T.); +#39562 = EDGE_CURVE('',#39555,#39536,#39563,.T.); +#39563 = CIRCLE('',#39564,3.E-02); +#39564 = AXIS2_PLACEMENT_3D('',#39565,#39566,#39567); +#39565 = CARTESIAN_POINT('',(-4.325,0.95,3.619548911246E-02)); +#39566 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39567 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#39568 = CYLINDRICAL_SURFACE('',#39569,3.E-02); +#39569 = AXIS2_PLACEMENT_3D('',#39570,#39571,#39572); +#39570 = CARTESIAN_POINT('',(-4.325,0.95,3.619548911246E-02)); +#39571 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39572 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#39573 = ADVANCED_FACE('',(#39574),#39599,.T.); +#39574 = FACE_BOUND('',#39575,.T.); +#39575 = EDGE_LOOP('',(#39576,#39577,#39585,#39593)); +#39576 = ORIENTED_EDGE('',*,*,#39323,.F.); +#39577 = ORIENTED_EDGE('',*,*,#39578,.F.); +#39578 = EDGE_CURVE('',#39579,#39314,#39581,.T.); +#39579 = VERTEX_POINT('',#39580); +#39580 = CARTESIAN_POINT('',(-6.8,-2.E-02,1.)); +#39581 = LINE('',#39582,#39583); +#39582 = CARTESIAN_POINT('',(-6.8,0.694863,1.)); +#39583 = VECTOR('',#39584,1.); +#39584 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#39585 = ORIENTED_EDGE('',*,*,#39586,.F.); +#39586 = EDGE_CURVE('',#39587,#39579,#39589,.T.); +#39587 = VERTEX_POINT('',#39588); +#39588 = CARTESIAN_POINT('',(-6.8,-2.E-02,0.84)); +#39589 = LINE('',#39590,#39591); +#39590 = CARTESIAN_POINT('',(-6.8,-2.E-02,0.841614)); +#39591 = VECTOR('',#39592,1.); +#39592 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#39593 = ORIENTED_EDGE('',*,*,#39594,.F.); +#39594 = EDGE_CURVE('',#39324,#39587,#39595,.T.); +#39595 = LINE('',#39596,#39597); +#39596 = CARTESIAN_POINT('',(-6.8,0.694863,0.84)); +#39597 = VECTOR('',#39598,1.); +#39598 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#39599 = PLANE('',#39600); +#39600 = AXIS2_PLACEMENT_3D('',#39601,#39602,#39603); +#39601 = CARTESIAN_POINT('',(-6.8,0.694863,0.841614)); +#39602 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39603 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#39604 = ADVANCED_FACE('',(#39605),#39639,.T.); +#39605 = FACE_BOUND('',#39606,.T.); +#39606 = EDGE_LOOP('',(#39607,#39617,#39625,#39633)); +#39607 = ORIENTED_EDGE('',*,*,#39608,.T.); +#39608 = EDGE_CURVE('',#39609,#39611,#39613,.T.); +#39609 = VERTEX_POINT('',#39610); +#39610 = CARTESIAN_POINT('',(-7.,-0.8,8.E-02)); +#39611 = VERTEX_POINT('',#39612); +#39612 = CARTESIAN_POINT('',(-7.,1.,8.E-02)); +#39613 = LINE('',#39614,#39615); +#39614 = CARTESIAN_POINT('',(-7.,1.744235,8.E-02)); +#39615 = VECTOR('',#39616,1.); +#39616 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#39617 = ORIENTED_EDGE('',*,*,#39618,.F.); +#39618 = EDGE_CURVE('',#39619,#39611,#39621,.T.); +#39619 = VERTEX_POINT('',#39620); +#39620 = CARTESIAN_POINT('',(-6.4525,1.,8.E-02)); +#39621 = LINE('',#39622,#39623); +#39622 = CARTESIAN_POINT('',(10.,1.,8.E-02)); +#39623 = VECTOR('',#39624,1.); +#39624 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39625 = ORIENTED_EDGE('',*,*,#39626,.F.); +#39626 = EDGE_CURVE('',#39627,#39619,#39629,.T.); +#39627 = VERTEX_POINT('',#39628); +#39628 = CARTESIAN_POINT('',(-6.4525,-0.8,8.E-02)); +#39629 = LINE('',#39630,#39631); +#39630 = CARTESIAN_POINT('',(-6.4525,-1.9,8.E-02)); +#39631 = VECTOR('',#39632,1.); +#39632 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#39633 = ORIENTED_EDGE('',*,*,#39634,.T.); +#39634 = EDGE_CURVE('',#39627,#39609,#39635,.T.); +#39635 = LINE('',#39636,#39637); +#39636 = CARTESIAN_POINT('',(-6.6025,-0.8,8.E-02)); +#39637 = VECTOR('',#39638,1.); +#39638 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39639 = PLANE('',#39640); +#39640 = AXIS2_PLACEMENT_3D('',#39641,#39642,#39643); +#39641 = CARTESIAN_POINT('',(-7.,1.,8.E-02)); +#39642 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39643 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#39644 = ADVANCED_FACE('',(#39645),#39671,.T.); +#39645 = FACE_BOUND('',#39646,.T.); +#39646 = EDGE_LOOP('',(#39647,#39655,#39656,#39664)); +#39647 = ORIENTED_EDGE('',*,*,#39648,.T.); +#39648 = EDGE_CURVE('',#39649,#39393,#39651,.T.); +#39649 = VERTEX_POINT('',#39650); +#39650 = CARTESIAN_POINT('',(6.72,0.51,0.94)); +#39651 = LINE('',#39652,#39653); +#39652 = CARTESIAN_POINT('',(7.75,0.51,0.94)); +#39653 = VECTOR('',#39654,1.); +#39654 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39655 = ORIENTED_EDGE('',*,*,#39418,.F.); +#39656 = ORIENTED_EDGE('',*,*,#39657,.F.); +#39657 = EDGE_CURVE('',#39658,#39411,#39660,.T.); +#39658 = VERTEX_POINT('',#39659); +#39659 = CARTESIAN_POINT('',(6.77,0.46,0.89)); +#39660 = LINE('',#39661,#39662); +#39661 = CARTESIAN_POINT('',(-1.75,0.46,0.89)); +#39662 = VECTOR('',#39663,1.); +#39663 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39664 = ORIENTED_EDGE('',*,*,#39665,.T.); +#39665 = EDGE_CURVE('',#39658,#39649,#39666,.T.); +#39666 = ELLIPSE('',#39667,7.071067811865E-02,5.E-02); +#39667 = AXIS2_PLACEMENT_3D('',#39668,#39669,#39670); +#39668 = CARTESIAN_POINT('',(6.77,0.51,0.89)); +#39669 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#39670 = DIRECTION('',(-0.707106781187,7.532303909457E-17,0.707106781187 + )); +#39671 = CYLINDRICAL_SURFACE('',#39672,5.E-02); +#39672 = AXIS2_PLACEMENT_3D('',#39673,#39674,#39675); +#39673 = CARTESIAN_POINT('',(-1.75,0.51,0.89)); +#39674 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39675 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#39676 = ADVANCED_FACE('',(#39677),#39711,.T.); +#39677 = FACE_BOUND('',#39678,.T.); +#39678 = EDGE_LOOP('',(#39679,#39689,#39697,#39705)); +#39679 = ORIENTED_EDGE('',*,*,#39680,.T.); +#39680 = EDGE_CURVE('',#39681,#39683,#39685,.T.); +#39681 = VERTEX_POINT('',#39682); +#39682 = CARTESIAN_POINT('',(-4.55,0.7,3.E-02)); +#39683 = VERTEX_POINT('',#39684); +#39684 = CARTESIAN_POINT('',(-4.95,0.7,3.E-02)); +#39685 = LINE('',#39686,#39687); +#39686 = CARTESIAN_POINT('',(-2.5,0.7,3.E-02)); +#39687 = VECTOR('',#39688,1.); +#39688 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39689 = ORIENTED_EDGE('',*,*,#39690,.F.); +#39690 = EDGE_CURVE('',#39691,#39683,#39693,.T.); +#39691 = VERTEX_POINT('',#39692); +#39692 = CARTESIAN_POINT('',(-4.9,0.92,8.E-02)); +#39693 = LINE('',#39694,#39695); +#39694 = CARTESIAN_POINT('',(-4.9511675,0.694863,2.88325E-02)); +#39695 = VECTOR('',#39696,1.); +#39696 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#39697 = ORIENTED_EDGE('',*,*,#39698,.F.); +#39698 = EDGE_CURVE('',#39699,#39691,#39701,.T.); +#39699 = VERTEX_POINT('',#39700); +#39700 = CARTESIAN_POINT('',(-4.6,0.92,8.E-02)); +#39701 = LINE('',#39702,#39703); +#39702 = CARTESIAN_POINT('',(-20.5,0.92,8.E-02)); +#39703 = VECTOR('',#39704,1.); +#39704 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39705 = ORIENTED_EDGE('',*,*,#39706,.F.); +#39706 = EDGE_CURVE('',#39681,#39699,#39707,.T.); +#39707 = LINE('',#39708,#39709); +#39708 = CARTESIAN_POINT('',(-4.5488325,0.694863,2.88325E-02)); +#39709 = VECTOR('',#39710,1.); +#39710 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#39711 = PLANE('',#39712); +#39712 = AXIS2_PLACEMENT_3D('',#39713,#39714,#39715); +#39713 = CARTESIAN_POINT('',(-4.8375,0.92,8.E-02)); +#39714 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#39715 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#39716 = ADVANCED_FACE('',(#39717),#39753,.T.); +#39717 = FACE_BOUND('',#39718,.T.); +#39718 = EDGE_LOOP('',(#39719,#39729,#39738,#39746)); +#39719 = ORIENTED_EDGE('',*,*,#39720,.T.); +#39720 = EDGE_CURVE('',#39721,#39723,#39725,.T.); +#39721 = VERTEX_POINT('',#39722); +#39722 = CARTESIAN_POINT('',(-4.825,0.92,3.619548911246E-02)); +#39723 = VERTEX_POINT('',#39724); +#39724 = CARTESIAN_POINT('',(-4.675,0.92,3.619548911246E-02)); +#39725 = LINE('',#39726,#39727); +#39726 = CARTESIAN_POINT('',(-4.825,0.92,3.619548911246E-02)); +#39727 = VECTOR('',#39728,1.); +#39728 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39729 = ORIENTED_EDGE('',*,*,#39730,.F.); +#39730 = EDGE_CURVE('',#39731,#39723,#39733,.T.); +#39731 = VERTEX_POINT('',#39732); +#39732 = CARTESIAN_POINT('',(-4.675,0.943186633611,6.541154699934E-02)); +#39733 = CIRCLE('',#39734,3.E-02); +#39734 = AXIS2_PLACEMENT_3D('',#39735,#39736,#39737); +#39735 = CARTESIAN_POINT('',(-4.675,0.95,3.619548911246E-02)); +#39736 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39737 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#39738 = ORIENTED_EDGE('',*,*,#39739,.F.); +#39739 = EDGE_CURVE('',#39740,#39731,#39742,.T.); +#39740 = VERTEX_POINT('',#39741); +#39741 = CARTESIAN_POINT('',(-4.825,0.943186633611,6.541154699934E-02)); +#39742 = LINE('',#39743,#39744); +#39743 = CARTESIAN_POINT('',(-4.825,0.943186633611,6.541154699934E-02)); +#39744 = VECTOR('',#39745,1.); +#39745 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39746 = ORIENTED_EDGE('',*,*,#39747,.T.); +#39747 = EDGE_CURVE('',#39740,#39721,#39748,.T.); +#39748 = CIRCLE('',#39749,3.E-02); +#39749 = AXIS2_PLACEMENT_3D('',#39750,#39751,#39752); +#39750 = CARTESIAN_POINT('',(-4.825,0.95,3.619548911246E-02)); +#39751 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39752 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#39753 = CYLINDRICAL_SURFACE('',#39754,3.E-02); +#39754 = AXIS2_PLACEMENT_3D('',#39755,#39756,#39757); +#39755 = CARTESIAN_POINT('',(-4.825,0.95,3.619548911246E-02)); +#39756 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39757 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#39758 = ADVANCED_FACE('',(#39759),#39784,.T.); +#39759 = FACE_BOUND('',#39760,.T.); +#39760 = EDGE_LOOP('',(#39761,#39769,#39777,#39783)); +#39761 = ORIENTED_EDGE('',*,*,#39762,.F.); +#39762 = EDGE_CURVE('',#39763,#39536,#39765,.T.); +#39763 = VERTEX_POINT('',#39764); +#39764 = CARTESIAN_POINT('',(-4.325,0.92,5.551115123126E-16)); +#39765 = LINE('',#39766,#39767); +#39766 = CARTESIAN_POINT('',(-4.325,0.92,5.551115123126E-16)); +#39767 = VECTOR('',#39768,1.); +#39768 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#39769 = ORIENTED_EDGE('',*,*,#39770,.T.); +#39770 = EDGE_CURVE('',#39763,#39771,#39773,.T.); +#39771 = VERTEX_POINT('',#39772); +#39772 = CARTESIAN_POINT('',(-4.175,0.92,5.551115123126E-16)); +#39773 = LINE('',#39774,#39775); +#39774 = CARTESIAN_POINT('',(-4.325,0.92,5.551115123126E-16)); +#39775 = VECTOR('',#39776,1.); +#39776 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39777 = ORIENTED_EDGE('',*,*,#39778,.T.); +#39778 = EDGE_CURVE('',#39771,#39538,#39779,.T.); +#39779 = LINE('',#39780,#39781); +#39780 = CARTESIAN_POINT('',(-4.175,0.92,0.841614)); +#39781 = VECTOR('',#39782,1.); +#39782 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#39783 = ORIENTED_EDGE('',*,*,#39535,.F.); +#39784 = PLANE('',#39785); +#39785 = AXIS2_PLACEMENT_3D('',#39786,#39787,#39788); +#39786 = CARTESIAN_POINT('',(-4.325,0.92,5.551115123126E-16)); +#39787 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#39788 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#39789 = ADVANCED_FACE('',(#39790),#39815,.T.); +#39790 = FACE_BOUND('',#39791,.T.); +#39791 = EDGE_LOOP('',(#39792,#39800,#39808,#39814)); +#39792 = ORIENTED_EDGE('',*,*,#39793,.F.); +#39793 = EDGE_CURVE('',#39794,#39451,#39796,.T.); +#39794 = VERTEX_POINT('',#39795); +#39795 = CARTESIAN_POINT('',(6.77,1.65,0.47)); +#39796 = LINE('',#39797,#39798); +#39797 = CARTESIAN_POINT('',(-2.23,1.65,0.47)); +#39798 = VECTOR('',#39799,1.); +#39799 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39800 = ORIENTED_EDGE('',*,*,#39801,.F.); +#39801 = EDGE_CURVE('',#39802,#39794,#39804,.T.); +#39802 = VERTEX_POINT('',#39803); +#39803 = CARTESIAN_POINT('',(6.77,1.65,0.31)); +#39804 = LINE('',#39805,#39806); +#39805 = CARTESIAN_POINT('',(6.77,1.65,0.841614)); +#39806 = VECTOR('',#39807,1.); +#39807 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#39808 = ORIENTED_EDGE('',*,*,#39809,.T.); +#39809 = EDGE_CURVE('',#39802,#39459,#39810,.T.); +#39810 = LINE('',#39811,#39812); +#39811 = CARTESIAN_POINT('',(-0.85,1.65,0.31)); +#39812 = VECTOR('',#39813,1.); +#39813 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39814 = ORIENTED_EDGE('',*,*,#39458,.T.); +#39815 = PLANE('',#39816); +#39816 = AXIS2_PLACEMENT_3D('',#39817,#39818,#39819); +#39817 = CARTESIAN_POINT('',(-0.75,1.65,0.47)); +#39818 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#39819 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#39820 = ADVANCED_FACE('',(#39821),#39862,.T.); +#39821 = FACE_BOUND('',#39822,.T.); +#39822 = EDGE_LOOP('',(#39823,#39824,#39832,#39840,#39848,#39856)); +#39823 = ORIENTED_EDGE('',*,*,#39698,.T.); +#39824 = ORIENTED_EDGE('',*,*,#39825,.T.); +#39825 = EDGE_CURVE('',#39691,#39826,#39828,.T.); +#39826 = VERTEX_POINT('',#39827); +#39827 = CARTESIAN_POINT('',(-4.9,1.,8.E-02)); +#39828 = LINE('',#39829,#39830); +#39829 = CARTESIAN_POINT('',(-4.9,0.694863,8.E-02)); +#39830 = VECTOR('',#39831,1.); +#39831 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#39832 = ORIENTED_EDGE('',*,*,#39833,.F.); +#39833 = EDGE_CURVE('',#39834,#39826,#39836,.T.); +#39834 = VERTEX_POINT('',#39835); +#39835 = CARTESIAN_POINT('',(-4.825,1.,8.E-02)); +#39836 = LINE('',#39837,#39838); +#39837 = CARTESIAN_POINT('',(-20.5,1.,8.E-02)); +#39838 = VECTOR('',#39839,1.); +#39839 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39840 = ORIENTED_EDGE('',*,*,#39841,.T.); +#39841 = EDGE_CURVE('',#39834,#39842,#39844,.T.); +#39842 = VERTEX_POINT('',#39843); +#39843 = CARTESIAN_POINT('',(-4.675,1.,8.E-02)); +#39844 = LINE('',#39845,#39846); +#39845 = CARTESIAN_POINT('',(0.5,1.,8.E-02)); +#39846 = VECTOR('',#39847,1.); +#39847 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39848 = ORIENTED_EDGE('',*,*,#39849,.F.); +#39849 = EDGE_CURVE('',#39850,#39842,#39852,.T.); +#39850 = VERTEX_POINT('',#39851); +#39851 = CARTESIAN_POINT('',(-4.6,1.,8.E-02)); +#39852 = LINE('',#39853,#39854); +#39853 = CARTESIAN_POINT('',(-20.5,1.,8.E-02)); +#39854 = VECTOR('',#39855,1.); +#39855 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39856 = ORIENTED_EDGE('',*,*,#39857,.T.); +#39857 = EDGE_CURVE('',#39850,#39699,#39858,.T.); +#39858 = LINE('',#39859,#39860); +#39859 = CARTESIAN_POINT('',(-4.6,0.694863,8.E-02)); +#39860 = VECTOR('',#39861,1.); +#39861 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#39862 = PLANE('',#39863); +#39863 = AXIS2_PLACEMENT_3D('',#39864,#39865,#39866); +#39864 = CARTESIAN_POINT('',(-4.8375,1.,8.E-02)); +#39865 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#39866 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#39867 = ADVANCED_FACE('',(#39868),#39938,.T.); +#39868 = FACE_BOUND('',#39869,.T.); +#39869 = EDGE_LOOP('',(#39870,#39880,#39888,#39896,#39904,#39910,#39911, + #39919,#39925,#39926,#39932)); +#39870 = ORIENTED_EDGE('',*,*,#39871,.T.); +#39871 = EDGE_CURVE('',#39872,#39874,#39876,.T.); +#39872 = VERTEX_POINT('',#39873); +#39873 = CARTESIAN_POINT('',(-5.825,1.,0.31)); +#39874 = VERTEX_POINT('',#39875); +#39875 = CARTESIAN_POINT('',(-5.825,1.,8.E-02)); +#39876 = LINE('',#39877,#39878); +#39877 = CARTESIAN_POINT('',(-5.825,1.,0.841614)); +#39878 = VECTOR('',#39879,1.); +#39879 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39880 = ORIENTED_EDGE('',*,*,#39881,.T.); +#39881 = EDGE_CURVE('',#39874,#39882,#39884,.T.); +#39882 = VERTEX_POINT('',#39883); +#39883 = CARTESIAN_POINT('',(-5.9,1.,8.E-02)); +#39884 = LINE('',#39885,#39886); +#39885 = CARTESIAN_POINT('',(10.,1.,8.E-02)); +#39886 = VECTOR('',#39887,1.); +#39887 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39888 = ORIENTED_EDGE('',*,*,#39889,.T.); +#39889 = EDGE_CURVE('',#39882,#39890,#39892,.T.); +#39890 = VERTEX_POINT('',#39891); +#39891 = CARTESIAN_POINT('',(-5.95,1.,3.E-02)); +#39892 = LINE('',#39893,#39894); +#39893 = CARTESIAN_POINT('',(10.,1.,15.98)); +#39894 = VECTOR('',#39895,1.); +#39895 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#39896 = ORIENTED_EDGE('',*,*,#39897,.T.); +#39897 = EDGE_CURVE('',#39890,#39898,#39900,.T.); +#39898 = VERTEX_POINT('',#39899); +#39899 = CARTESIAN_POINT('',(-6.4525,1.,3.E-02)); +#39900 = LINE('',#39901,#39902); +#39901 = CARTESIAN_POINT('',(10.,1.,3.E-02)); +#39902 = VECTOR('',#39903,1.); +#39903 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39904 = ORIENTED_EDGE('',*,*,#39905,.F.); +#39905 = EDGE_CURVE('',#39619,#39898,#39906,.T.); +#39906 = LINE('',#39907,#39908); +#39907 = CARTESIAN_POINT('',(-6.4525,1.,0.841614)); +#39908 = VECTOR('',#39909,1.); +#39909 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39910 = ORIENTED_EDGE('',*,*,#39618,.T.); +#39911 = ORIENTED_EDGE('',*,*,#39912,.F.); +#39912 = EDGE_CURVE('',#39913,#39611,#39915,.T.); +#39913 = VERTEX_POINT('',#39914); +#39914 = CARTESIAN_POINT('',(-7.,1.,1.)); +#39915 = LINE('',#39916,#39917); +#39916 = CARTESIAN_POINT('',(-7.,1.,0.841614)); +#39917 = VECTOR('',#39918,1.); +#39918 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39919 = ORIENTED_EDGE('',*,*,#39920,.F.); +#39920 = EDGE_CURVE('',#39316,#39913,#39921,.T.); +#39921 = LINE('',#39922,#39923); +#39922 = CARTESIAN_POINT('',(10.,1.,1.)); +#39923 = VECTOR('',#39924,1.); +#39924 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#39925 = ORIENTED_EDGE('',*,*,#39347,.T.); +#39926 = ORIENTED_EDGE('',*,*,#39927,.T.); +#39927 = EDGE_CURVE('',#39340,#39467,#39928,.T.); +#39928 = LINE('',#39929,#39930); +#39929 = CARTESIAN_POINT('',(10.,1.,0.31)); +#39930 = VECTOR('',#39931,1.); +#39931 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39932 = ORIENTED_EDGE('',*,*,#39933,.T.); +#39933 = EDGE_CURVE('',#39467,#39872,#39934,.T.); +#39934 = LINE('',#39935,#39936); +#39935 = CARTESIAN_POINT('',(1.,1.,0.31)); +#39936 = VECTOR('',#39937,1.); +#39937 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39938 = PLANE('',#39939); +#39939 = AXIS2_PLACEMENT_3D('',#39940,#39941,#39942); +#39940 = CARTESIAN_POINT('',(-0.675,1.,0.31)); +#39941 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#39942 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39943 = ADVANCED_FACE('',(#39944),#40036,.T.); +#39944 = FACE_BOUND('',#39945,.T.); +#39945 = EDGE_LOOP('',(#39946,#39956,#39964,#39973,#39981,#39989,#39997, + #40005,#40014,#40022,#40030)); +#39946 = ORIENTED_EDGE('',*,*,#39947,.T.); +#39947 = EDGE_CURVE('',#39948,#39950,#39952,.T.); +#39948 = VERTEX_POINT('',#39949); +#39949 = CARTESIAN_POINT('',(-5.675,1.,8.E-02)); +#39950 = VERTEX_POINT('',#39951); +#39951 = CARTESIAN_POINT('',(-5.675,1.,7.866077735407E-02)); +#39952 = LINE('',#39953,#39954); +#39953 = CARTESIAN_POINT('',(-5.675,1.,0.841614)); +#39954 = VECTOR('',#39955,1.); +#39955 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#39956 = ORIENTED_EDGE('',*,*,#39957,.F.); +#39957 = EDGE_CURVE('',#39958,#39950,#39960,.T.); +#39958 = VERTEX_POINT('',#39959); +#39959 = CARTESIAN_POINT('',(-5.675,0.943186633611,6.541154699934E-02)); +#39960 = LINE('',#39961,#39962); +#39961 = CARTESIAN_POINT('',(-5.675,0.943186633611,6.541154699934E-02)); +#39962 = VECTOR('',#39963,1.); +#39963 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#39964 = ORIENTED_EDGE('',*,*,#39965,.T.); +#39965 = EDGE_CURVE('',#39958,#39966,#39968,.T.); +#39966 = VERTEX_POINT('',#39967); +#39967 = CARTESIAN_POINT('',(-5.675,0.92,3.619548911246E-02)); +#39968 = CIRCLE('',#39969,3.E-02); +#39969 = AXIS2_PLACEMENT_3D('',#39970,#39971,#39972); +#39970 = CARTESIAN_POINT('',(-5.675,0.95,3.619548911246E-02)); +#39971 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#39972 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#39973 = ORIENTED_EDGE('',*,*,#39974,.F.); +#39974 = EDGE_CURVE('',#39975,#39966,#39977,.T.); +#39975 = VERTEX_POINT('',#39976); +#39976 = CARTESIAN_POINT('',(-5.675,0.92,8.881784197001E-16)); +#39977 = LINE('',#39978,#39979); +#39978 = CARTESIAN_POINT('',(-5.675,0.92,8.881784197001E-16)); +#39979 = VECTOR('',#39980,1.); +#39980 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#39981 = ORIENTED_EDGE('',*,*,#39982,.T.); +#39982 = EDGE_CURVE('',#39975,#39983,#39985,.T.); +#39983 = VERTEX_POINT('',#39984); +#39984 = CARTESIAN_POINT('',(-5.675,1.25,7.771561172376E-16)); +#39985 = LINE('',#39986,#39987); +#39986 = CARTESIAN_POINT('',(-5.675,0.92,8.881784197001E-16)); +#39987 = VECTOR('',#39988,1.); +#39988 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#39989 = ORIENTED_EDGE('',*,*,#39990,.F.); +#39990 = EDGE_CURVE('',#39991,#39983,#39993,.T.); +#39991 = VERTEX_POINT('',#39992); +#39992 = CARTESIAN_POINT('',(-5.675,1.3,5.E-02)); +#39993 = LINE('',#39994,#39995); +#39994 = CARTESIAN_POINT('',(-5.675,1.3,5.E-02)); +#39995 = VECTOR('',#39996,1.); +#39996 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#39997 = ORIENTED_EDGE('',*,*,#39998,.F.); +#39998 = EDGE_CURVE('',#39999,#39991,#40001,.T.); +#39999 = VERTEX_POINT('',#40000); +#40000 = CARTESIAN_POINT('',(-5.675,1.3,0.11)); +#40001 = LINE('',#40002,#40003); +#40002 = CARTESIAN_POINT('',(-5.675,1.3,0.11)); +#40003 = VECTOR('',#40004,1.); +#40004 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40005 = ORIENTED_EDGE('',*,*,#40006,.F.); +#40006 = EDGE_CURVE('',#40007,#39999,#40009,.T.); +#40007 = VERTEX_POINT('',#40008); +#40008 = CARTESIAN_POINT('',(-5.675,1.35,0.16)); +#40009 = CIRCLE('',#40010,5.E-02); +#40010 = AXIS2_PLACEMENT_3D('',#40011,#40012,#40013); +#40011 = CARTESIAN_POINT('',(-5.675,1.35,0.11)); +#40012 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40013 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40014 = ORIENTED_EDGE('',*,*,#40015,.T.); +#40015 = EDGE_CURVE('',#40007,#40016,#40018,.T.); +#40016 = VERTEX_POINT('',#40017); +#40017 = CARTESIAN_POINT('',(-5.675,1.35,0.31)); +#40018 = LINE('',#40019,#40020); +#40019 = CARTESIAN_POINT('',(-5.675,1.35,0.31)); +#40020 = VECTOR('',#40021,1.); +#40021 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40022 = ORIENTED_EDGE('',*,*,#40023,.T.); +#40023 = EDGE_CURVE('',#40016,#40024,#40026,.T.); +#40024 = VERTEX_POINT('',#40025); +#40025 = CARTESIAN_POINT('',(-5.675,1.,0.31)); +#40026 = LINE('',#40027,#40028); +#40027 = CARTESIAN_POINT('',(-5.675,0.694863,0.31)); +#40028 = VECTOR('',#40029,1.); +#40029 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#40030 = ORIENTED_EDGE('',*,*,#40031,.T.); +#40031 = EDGE_CURVE('',#40024,#39948,#40032,.T.); +#40032 = LINE('',#40033,#40034); +#40033 = CARTESIAN_POINT('',(-5.675,1.,0.841614)); +#40034 = VECTOR('',#40035,1.); +#40035 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40036 = PLANE('',#40037); +#40037 = AXIS2_PLACEMENT_3D('',#40038,#40039,#40040); +#40038 = CARTESIAN_POINT('',(-5.675,1.245779075398,0.170500231015)); +#40039 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40040 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#40041 = ADVANCED_FACE('',(#40042),#40065,.F.); +#40042 = FACE_BOUND('',#40043,.T.); +#40043 = EDGE_LOOP('',(#40044,#40050,#40058,#40064)); +#40044 = ORIENTED_EDGE('',*,*,#40045,.T.); +#40045 = EDGE_CURVE('',#39948,#39874,#40046,.T.); +#40046 = LINE('',#40047,#40048); +#40047 = CARTESIAN_POINT('',(1.,1.,8.E-02)); +#40048 = VECTOR('',#40049,1.); +#40049 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40050 = ORIENTED_EDGE('',*,*,#40051,.T.); +#40051 = EDGE_CURVE('',#39874,#40052,#40054,.T.); +#40052 = VERTEX_POINT('',#40053); +#40053 = CARTESIAN_POINT('',(-5.825,1.,7.866077735407E-02)); +#40054 = LINE('',#40055,#40056); +#40055 = CARTESIAN_POINT('',(-5.825,1.,0.841614)); +#40056 = VECTOR('',#40057,1.); +#40057 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40058 = ORIENTED_EDGE('',*,*,#40059,.F.); +#40059 = EDGE_CURVE('',#39950,#40052,#40060,.T.); +#40060 = LINE('',#40061,#40062); +#40061 = CARTESIAN_POINT('',(1.,1.,7.866077735406E-02)); +#40062 = VECTOR('',#40063,1.); +#40063 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40064 = ORIENTED_EDGE('',*,*,#39947,.F.); +#40065 = PLANE('',#40066); +#40066 = AXIS2_PLACEMENT_3D('',#40067,#40068,#40069); +#40067 = CARTESIAN_POINT('',(-5.675,1.,7.866077735407E-02)); +#40068 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#40069 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40070 = ADVANCED_FACE('',(#40071),#40147,.F.); +#40071 = FACE_BOUND('',#40072,.T.); +#40072 = EDGE_LOOP('',(#40073,#40083,#40092,#40100,#40108,#40116,#40124, + #40133,#40139,#40140,#40141)); +#40073 = ORIENTED_EDGE('',*,*,#40074,.F.); +#40074 = EDGE_CURVE('',#40075,#40077,#40079,.T.); +#40075 = VERTEX_POINT('',#40076); +#40076 = CARTESIAN_POINT('',(-5.825,1.35,0.16)); +#40077 = VERTEX_POINT('',#40078); +#40078 = CARTESIAN_POINT('',(-5.825,1.35,0.31)); +#40079 = LINE('',#40080,#40081); +#40080 = CARTESIAN_POINT('',(-5.825,1.35,0.31)); +#40081 = VECTOR('',#40082,1.); +#40082 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40083 = ORIENTED_EDGE('',*,*,#40084,.T.); +#40084 = EDGE_CURVE('',#40075,#40085,#40087,.T.); +#40085 = VERTEX_POINT('',#40086); +#40086 = CARTESIAN_POINT('',(-5.825,1.3,0.11)); +#40087 = CIRCLE('',#40088,5.E-02); +#40088 = AXIS2_PLACEMENT_3D('',#40089,#40090,#40091); +#40089 = CARTESIAN_POINT('',(-5.825,1.35,0.11)); +#40090 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40091 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40092 = ORIENTED_EDGE('',*,*,#40093,.T.); +#40093 = EDGE_CURVE('',#40085,#40094,#40096,.T.); +#40094 = VERTEX_POINT('',#40095); +#40095 = CARTESIAN_POINT('',(-5.825,1.3,5.E-02)); +#40096 = LINE('',#40097,#40098); +#40097 = CARTESIAN_POINT('',(-5.825,1.3,0.11)); +#40098 = VECTOR('',#40099,1.); +#40099 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40100 = ORIENTED_EDGE('',*,*,#40101,.T.); +#40101 = EDGE_CURVE('',#40094,#40102,#40104,.T.); +#40102 = VERTEX_POINT('',#40103); +#40103 = CARTESIAN_POINT('',(-5.825,1.25,1.110223024625E-15)); +#40104 = LINE('',#40105,#40106); +#40105 = CARTESIAN_POINT('',(-5.825,1.3,5.E-02)); +#40106 = VECTOR('',#40107,1.); +#40107 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#40108 = ORIENTED_EDGE('',*,*,#40109,.F.); +#40109 = EDGE_CURVE('',#40110,#40102,#40112,.T.); +#40110 = VERTEX_POINT('',#40111); +#40111 = CARTESIAN_POINT('',(-5.825,0.92,8.881784197001E-16)); +#40112 = LINE('',#40113,#40114); +#40113 = CARTESIAN_POINT('',(-5.825,0.92,8.881784197001E-16)); +#40114 = VECTOR('',#40115,1.); +#40115 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40116 = ORIENTED_EDGE('',*,*,#40117,.T.); +#40117 = EDGE_CURVE('',#40110,#40118,#40120,.T.); +#40118 = VERTEX_POINT('',#40119); +#40119 = CARTESIAN_POINT('',(-5.825,0.92,3.619548911246E-02)); +#40120 = LINE('',#40121,#40122); +#40121 = CARTESIAN_POINT('',(-5.825,0.92,8.881784197001E-16)); +#40122 = VECTOR('',#40123,1.); +#40123 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40124 = ORIENTED_EDGE('',*,*,#40125,.F.); +#40125 = EDGE_CURVE('',#40126,#40118,#40128,.T.); +#40126 = VERTEX_POINT('',#40127); +#40127 = CARTESIAN_POINT('',(-5.825,0.943186633611,6.541154699934E-02)); +#40128 = CIRCLE('',#40129,3.E-02); +#40129 = AXIS2_PLACEMENT_3D('',#40130,#40131,#40132); +#40130 = CARTESIAN_POINT('',(-5.825,0.95,3.619548911246E-02)); +#40131 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40132 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40133 = ORIENTED_EDGE('',*,*,#40134,.T.); +#40134 = EDGE_CURVE('',#40126,#40052,#40135,.T.); +#40135 = LINE('',#40136,#40137); +#40136 = CARTESIAN_POINT('',(-5.825,0.943186633611,6.541154699934E-02)); +#40137 = VECTOR('',#40138,1.); +#40138 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#40139 = ORIENTED_EDGE('',*,*,#40051,.F.); +#40140 = ORIENTED_EDGE('',*,*,#39871,.F.); +#40141 = ORIENTED_EDGE('',*,*,#40142,.F.); +#40142 = EDGE_CURVE('',#40077,#39872,#40143,.T.); +#40143 = LINE('',#40144,#40145); +#40144 = CARTESIAN_POINT('',(-5.825,0.694863,0.31)); +#40145 = VECTOR('',#40146,1.); +#40146 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#40147 = PLANE('',#40148); +#40148 = AXIS2_PLACEMENT_3D('',#40149,#40150,#40151); +#40149 = CARTESIAN_POINT('',(-5.825,3.624702236056,-0.833697738616)); +#40150 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40151 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40152 = ADVANCED_FACE('',(#40153),#40210,.T.); +#40153 = FACE_BOUND('',#40154,.T.); +#40154 = EDGE_LOOP('',(#40155,#40165,#40173,#40181,#40189,#40197,#40203, + #40204)); +#40155 = ORIENTED_EDGE('',*,*,#40156,.T.); +#40156 = EDGE_CURVE('',#40157,#40159,#40161,.T.); +#40157 = VERTEX_POINT('',#40158); +#40158 = CARTESIAN_POINT('',(-5.325,1.,0.31)); +#40159 = VERTEX_POINT('',#40160); +#40160 = CARTESIAN_POINT('',(-5.325,1.,8.E-02)); +#40161 = LINE('',#40162,#40163); +#40162 = CARTESIAN_POINT('',(-5.325,1.,0.841614)); +#40163 = VECTOR('',#40164,1.); +#40164 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40165 = ORIENTED_EDGE('',*,*,#40166,.T.); +#40166 = EDGE_CURVE('',#40159,#40167,#40169,.T.); +#40167 = VERTEX_POINT('',#40168); +#40168 = CARTESIAN_POINT('',(-5.4,1.,8.E-02)); +#40169 = LINE('',#40170,#40171); +#40170 = CARTESIAN_POINT('',(-21.,1.,8.E-02)); +#40171 = VECTOR('',#40172,1.); +#40172 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40173 = ORIENTED_EDGE('',*,*,#40174,.T.); +#40174 = EDGE_CURVE('',#40167,#40175,#40177,.T.); +#40175 = VERTEX_POINT('',#40176); +#40176 = CARTESIAN_POINT('',(-5.45,1.,3.E-02)); +#40177 = LINE('',#40178,#40179); +#40178 = CARTESIAN_POINT('',(-21.,1.,-15.52)); +#40179 = VECTOR('',#40180,1.); +#40180 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#40181 = ORIENTED_EDGE('',*,*,#40182,.F.); +#40182 = EDGE_CURVE('',#40183,#40175,#40185,.T.); +#40183 = VERTEX_POINT('',#40184); +#40184 = CARTESIAN_POINT('',(-5.55,1.,3.E-02)); +#40185 = LINE('',#40186,#40187); +#40186 = CARTESIAN_POINT('',(-21.,1.,3.E-02)); +#40187 = VECTOR('',#40188,1.); +#40188 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40189 = ORIENTED_EDGE('',*,*,#40190,.T.); +#40190 = EDGE_CURVE('',#40183,#40191,#40193,.T.); +#40191 = VERTEX_POINT('',#40192); +#40192 = CARTESIAN_POINT('',(-5.6,1.,8.E-02)); +#40193 = LINE('',#40194,#40195); +#40194 = CARTESIAN_POINT('',(-21.,1.,15.48)); +#40195 = VECTOR('',#40196,1.); +#40196 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#40197 = ORIENTED_EDGE('',*,*,#40198,.T.); +#40198 = EDGE_CURVE('',#40191,#39948,#40199,.T.); +#40199 = LINE('',#40200,#40201); +#40200 = CARTESIAN_POINT('',(10.,1.,8.E-02)); +#40201 = VECTOR('',#40202,1.); +#40202 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40203 = ORIENTED_EDGE('',*,*,#40031,.F.); +#40204 = ORIENTED_EDGE('',*,*,#40205,.T.); +#40205 = EDGE_CURVE('',#40024,#40157,#40206,.T.); +#40206 = LINE('',#40207,#40208); +#40207 = CARTESIAN_POINT('',(1.,1.,0.31)); +#40208 = VECTOR('',#40209,1.); +#40209 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40210 = PLANE('',#40211); +#40211 = AXIS2_PLACEMENT_3D('',#40212,#40213,#40214); +#40212 = CARTESIAN_POINT('',(-0.675,1.,0.31)); +#40213 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#40214 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40215 = ADVANCED_FACE('',(#40216),#40308,.T.); +#40216 = FACE_BOUND('',#40217,.T.); +#40217 = EDGE_LOOP('',(#40218,#40228,#40236,#40245,#40253,#40261,#40269, + #40277,#40286,#40294,#40302)); +#40218 = ORIENTED_EDGE('',*,*,#40219,.T.); +#40219 = EDGE_CURVE('',#40220,#40222,#40224,.T.); +#40220 = VERTEX_POINT('',#40221); +#40221 = CARTESIAN_POINT('',(-5.175,1.,8.E-02)); +#40222 = VERTEX_POINT('',#40223); +#40223 = CARTESIAN_POINT('',(-5.175,1.,7.866077735407E-02)); +#40224 = LINE('',#40225,#40226); +#40225 = CARTESIAN_POINT('',(-5.175,1.,0.841614)); +#40226 = VECTOR('',#40227,1.); +#40227 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40228 = ORIENTED_EDGE('',*,*,#40229,.F.); +#40229 = EDGE_CURVE('',#40230,#40222,#40232,.T.); +#40230 = VERTEX_POINT('',#40231); +#40231 = CARTESIAN_POINT('',(-5.175,0.943186633611,6.541154699934E-02)); +#40232 = LINE('',#40233,#40234); +#40233 = CARTESIAN_POINT('',(-5.175,0.694863,7.500931358167E-03)); +#40234 = VECTOR('',#40235,1.); +#40235 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#40236 = ORIENTED_EDGE('',*,*,#40237,.T.); +#40237 = EDGE_CURVE('',#40230,#40238,#40240,.T.); +#40238 = VERTEX_POINT('',#40239); +#40239 = CARTESIAN_POINT('',(-5.175,0.92,3.619548911246E-02)); +#40240 = CIRCLE('',#40241,3.E-02); +#40241 = AXIS2_PLACEMENT_3D('',#40242,#40243,#40244); +#40242 = CARTESIAN_POINT('',(-5.175,0.95,3.619548911246E-02)); +#40243 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40244 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40245 = ORIENTED_EDGE('',*,*,#40246,.F.); +#40246 = EDGE_CURVE('',#40247,#40238,#40249,.T.); +#40247 = VERTEX_POINT('',#40248); +#40248 = CARTESIAN_POINT('',(-5.175,0.92,7.771561172376E-16)); +#40249 = LINE('',#40250,#40251); +#40250 = CARTESIAN_POINT('',(-5.175,0.92,0.841614)); +#40251 = VECTOR('',#40252,1.); +#40252 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40253 = ORIENTED_EDGE('',*,*,#40254,.F.); +#40254 = EDGE_CURVE('',#40255,#40247,#40257,.T.); +#40255 = VERTEX_POINT('',#40256); +#40256 = CARTESIAN_POINT('',(-5.175,1.25,6.661338147751E-16)); +#40257 = LINE('',#40258,#40259); +#40258 = CARTESIAN_POINT('',(-5.175,0.694863,7.771561172376E-16)); +#40259 = VECTOR('',#40260,1.); +#40260 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#40261 = ORIENTED_EDGE('',*,*,#40262,.F.); +#40262 = EDGE_CURVE('',#40263,#40255,#40265,.T.); +#40263 = VERTEX_POINT('',#40264); +#40264 = CARTESIAN_POINT('',(-5.175,1.3,5.E-02)); +#40265 = LINE('',#40266,#40267); +#40266 = CARTESIAN_POINT('',(-5.175,0.694863,-0.555137)); +#40267 = VECTOR('',#40268,1.); +#40268 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#40269 = ORIENTED_EDGE('',*,*,#40270,.F.); +#40270 = EDGE_CURVE('',#40271,#40263,#40273,.T.); +#40271 = VERTEX_POINT('',#40272); +#40272 = CARTESIAN_POINT('',(-5.175,1.3,0.11)); +#40273 = LINE('',#40274,#40275); +#40274 = CARTESIAN_POINT('',(-5.175,1.3,0.841614)); +#40275 = VECTOR('',#40276,1.); +#40276 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40277 = ORIENTED_EDGE('',*,*,#40278,.F.); +#40278 = EDGE_CURVE('',#40279,#40271,#40281,.T.); +#40279 = VERTEX_POINT('',#40280); +#40280 = CARTESIAN_POINT('',(-5.175,1.35,0.16)); +#40281 = CIRCLE('',#40282,5.E-02); +#40282 = AXIS2_PLACEMENT_3D('',#40283,#40284,#40285); +#40283 = CARTESIAN_POINT('',(-5.175,1.35,0.11)); +#40284 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40285 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40286 = ORIENTED_EDGE('',*,*,#40287,.F.); +#40287 = EDGE_CURVE('',#40288,#40279,#40290,.T.); +#40288 = VERTEX_POINT('',#40289); +#40289 = CARTESIAN_POINT('',(-5.175,1.35,0.31)); +#40290 = LINE('',#40291,#40292); +#40291 = CARTESIAN_POINT('',(-5.175,1.35,0.841614)); +#40292 = VECTOR('',#40293,1.); +#40293 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40294 = ORIENTED_EDGE('',*,*,#40295,.T.); +#40295 = EDGE_CURVE('',#40288,#40296,#40298,.T.); +#40296 = VERTEX_POINT('',#40297); +#40297 = CARTESIAN_POINT('',(-5.175,1.,0.31)); +#40298 = LINE('',#40299,#40300); +#40299 = CARTESIAN_POINT('',(-5.175,0.694863,0.31)); +#40300 = VECTOR('',#40301,1.); +#40301 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#40302 = ORIENTED_EDGE('',*,*,#40303,.F.); +#40303 = EDGE_CURVE('',#40220,#40296,#40304,.T.); +#40304 = LINE('',#40305,#40306); +#40305 = CARTESIAN_POINT('',(-5.175,1.,0.841614)); +#40306 = VECTOR('',#40307,1.); +#40307 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#40308 = PLANE('',#40309); +#40309 = AXIS2_PLACEMENT_3D('',#40310,#40311,#40312); +#40310 = CARTESIAN_POINT('',(-5.175,3.624702236056,-0.833697738616)); +#40311 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40312 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40313 = ADVANCED_FACE('',(#40314),#40339,.T.); +#40314 = FACE_BOUND('',#40315,.T.); +#40315 = EDGE_LOOP('',(#40316,#40324,#40325,#40333)); +#40316 = ORIENTED_EDGE('',*,*,#40317,.T.); +#40317 = EDGE_CURVE('',#40318,#40288,#40320,.T.); +#40318 = VERTEX_POINT('',#40319); +#40319 = CARTESIAN_POINT('',(-5.325,1.35,0.31)); +#40320 = LINE('',#40321,#40322); +#40321 = CARTESIAN_POINT('',(-2.5,1.35,0.31)); +#40322 = VECTOR('',#40323,1.); +#40323 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40324 = ORIENTED_EDGE('',*,*,#40287,.T.); +#40325 = ORIENTED_EDGE('',*,*,#40326,.F.); +#40326 = EDGE_CURVE('',#40327,#40279,#40329,.T.); +#40327 = VERTEX_POINT('',#40328); +#40328 = CARTESIAN_POINT('',(-5.325,1.35,0.16)); +#40329 = LINE('',#40330,#40331); +#40330 = CARTESIAN_POINT('',(-5.325,1.35,0.16)); +#40331 = VECTOR('',#40332,1.); +#40332 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40333 = ORIENTED_EDGE('',*,*,#40334,.T.); +#40334 = EDGE_CURVE('',#40327,#40318,#40335,.T.); +#40335 = LINE('',#40336,#40337); +#40336 = CARTESIAN_POINT('',(-5.325,1.35,0.31)); +#40337 = VECTOR('',#40338,1.); +#40338 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40339 = PLANE('',#40340); +#40340 = AXIS2_PLACEMENT_3D('',#40341,#40342,#40343); +#40341 = CARTESIAN_POINT('',(-5.325,1.35,0.31)); +#40342 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40343 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40344 = ADVANCED_FACE('',(#40345),#40368,.F.); +#40345 = FACE_BOUND('',#40346,.T.); +#40346 = EDGE_LOOP('',(#40347,#40353,#40361,#40367)); +#40347 = ORIENTED_EDGE('',*,*,#40348,.F.); +#40348 = EDGE_CURVE('',#40159,#40220,#40349,.T.); +#40349 = LINE('',#40350,#40351); +#40350 = CARTESIAN_POINT('',(1.,1.,8.E-02)); +#40351 = VECTOR('',#40352,1.); +#40352 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40353 = ORIENTED_EDGE('',*,*,#40354,.T.); +#40354 = EDGE_CURVE('',#40159,#40355,#40357,.T.); +#40355 = VERTEX_POINT('',#40356); +#40356 = CARTESIAN_POINT('',(-5.325,1.,7.866077735407E-02)); +#40357 = LINE('',#40358,#40359); +#40358 = CARTESIAN_POINT('',(-5.325,1.,0.841614)); +#40359 = VECTOR('',#40360,1.); +#40360 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40361 = ORIENTED_EDGE('',*,*,#40362,.F.); +#40362 = EDGE_CURVE('',#40222,#40355,#40363,.T.); +#40363 = LINE('',#40364,#40365); +#40364 = CARTESIAN_POINT('',(1.,1.,7.866077735406E-02)); +#40365 = VECTOR('',#40366,1.); +#40366 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40367 = ORIENTED_EDGE('',*,*,#40219,.F.); +#40368 = PLANE('',#40369); +#40369 = AXIS2_PLACEMENT_3D('',#40370,#40371,#40372); +#40370 = CARTESIAN_POINT('',(-5.175,1.,7.866077735407E-02)); +#40371 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#40372 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40373 = ADVANCED_FACE('',(#40374),#40441,.F.); +#40374 = FACE_BOUND('',#40375,.T.); +#40375 = EDGE_LOOP('',(#40376,#40377,#40383,#40384,#40393,#40401,#40409, + #40417,#40425,#40434,#40440)); +#40376 = ORIENTED_EDGE('',*,*,#40156,.F.); +#40377 = ORIENTED_EDGE('',*,*,#40378,.F.); +#40378 = EDGE_CURVE('',#40318,#40157,#40379,.T.); +#40379 = LINE('',#40380,#40381); +#40380 = CARTESIAN_POINT('',(-5.325,0.694863,0.31)); +#40381 = VECTOR('',#40382,1.); +#40382 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#40383 = ORIENTED_EDGE('',*,*,#40334,.F.); +#40384 = ORIENTED_EDGE('',*,*,#40385,.T.); +#40385 = EDGE_CURVE('',#40327,#40386,#40388,.T.); +#40386 = VERTEX_POINT('',#40387); +#40387 = CARTESIAN_POINT('',(-5.325,1.3,0.11)); +#40388 = CIRCLE('',#40389,5.E-02); +#40389 = AXIS2_PLACEMENT_3D('',#40390,#40391,#40392); +#40390 = CARTESIAN_POINT('',(-5.325,1.35,0.11)); +#40391 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40392 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40393 = ORIENTED_EDGE('',*,*,#40394,.T.); +#40394 = EDGE_CURVE('',#40386,#40395,#40397,.T.); +#40395 = VERTEX_POINT('',#40396); +#40396 = CARTESIAN_POINT('',(-5.325,1.3,5.E-02)); +#40397 = LINE('',#40398,#40399); +#40398 = CARTESIAN_POINT('',(-5.325,1.3,0.11)); +#40399 = VECTOR('',#40400,1.); +#40400 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40401 = ORIENTED_EDGE('',*,*,#40402,.T.); +#40402 = EDGE_CURVE('',#40395,#40403,#40405,.T.); +#40403 = VERTEX_POINT('',#40404); +#40404 = CARTESIAN_POINT('',(-5.325,1.25,6.661338147751E-16)); +#40405 = LINE('',#40406,#40407); +#40406 = CARTESIAN_POINT('',(-5.325,1.3,5.E-02)); +#40407 = VECTOR('',#40408,1.); +#40408 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#40409 = ORIENTED_EDGE('',*,*,#40410,.F.); +#40410 = EDGE_CURVE('',#40411,#40403,#40413,.T.); +#40411 = VERTEX_POINT('',#40412); +#40412 = CARTESIAN_POINT('',(-5.325,0.92,7.771561172376E-16)); +#40413 = LINE('',#40414,#40415); +#40414 = CARTESIAN_POINT('',(-5.325,0.92,7.771561172376E-16)); +#40415 = VECTOR('',#40416,1.); +#40416 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40417 = ORIENTED_EDGE('',*,*,#40418,.T.); +#40418 = EDGE_CURVE('',#40411,#40419,#40421,.T.); +#40419 = VERTEX_POINT('',#40420); +#40420 = CARTESIAN_POINT('',(-5.325,0.92,3.619548911246E-02)); +#40421 = LINE('',#40422,#40423); +#40422 = CARTESIAN_POINT('',(-5.325,0.92,7.771561172376E-16)); +#40423 = VECTOR('',#40424,1.); +#40424 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40425 = ORIENTED_EDGE('',*,*,#40426,.F.); +#40426 = EDGE_CURVE('',#40427,#40419,#40429,.T.); +#40427 = VERTEX_POINT('',#40428); +#40428 = CARTESIAN_POINT('',(-5.325,0.943186633611,6.541154699934E-02)); +#40429 = CIRCLE('',#40430,3.E-02); +#40430 = AXIS2_PLACEMENT_3D('',#40431,#40432,#40433); +#40431 = CARTESIAN_POINT('',(-5.325,0.95,3.619548911246E-02)); +#40432 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40433 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40434 = ORIENTED_EDGE('',*,*,#40435,.T.); +#40435 = EDGE_CURVE('',#40427,#40355,#40436,.T.); +#40436 = LINE('',#40437,#40438); +#40437 = CARTESIAN_POINT('',(-5.325,0.943186633611,6.541154699934E-02)); +#40438 = VECTOR('',#40439,1.); +#40439 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#40440 = ORIENTED_EDGE('',*,*,#40354,.F.); +#40441 = PLANE('',#40442); +#40442 = AXIS2_PLACEMENT_3D('',#40443,#40444,#40445); +#40443 = CARTESIAN_POINT('',(-5.325,1.245779075398,0.170500231015)); +#40444 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40445 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#40446 = ADVANCED_FACE('',(#40447),#40458,.T.); +#40447 = FACE_BOUND('',#40448,.T.); +#40448 = EDGE_LOOP('',(#40449,#40450,#40451,#40457)); +#40449 = ORIENTED_EDGE('',*,*,#40362,.T.); +#40450 = ORIENTED_EDGE('',*,*,#40435,.F.); +#40451 = ORIENTED_EDGE('',*,*,#40452,.T.); +#40452 = EDGE_CURVE('',#40427,#40230,#40453,.T.); +#40453 = LINE('',#40454,#40455); +#40454 = CARTESIAN_POINT('',(-5.325,0.943186633611,6.541154699934E-02)); +#40455 = VECTOR('',#40456,1.); +#40456 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40457 = ORIENTED_EDGE('',*,*,#40229,.T.); +#40458 = PLANE('',#40459); +#40459 = AXIS2_PLACEMENT_3D('',#40460,#40461,#40462); +#40460 = CARTESIAN_POINT('',(-5.325,0.943186633611,6.541154699934E-02)); +#40461 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#40462 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#40463 = ADVANCED_FACE('',(#40464),#40475,.T.); +#40464 = FACE_BOUND('',#40465,.T.); +#40465 = EDGE_LOOP('',(#40466,#40472,#40473,#40474)); +#40466 = ORIENTED_EDGE('',*,*,#40467,.T.); +#40467 = EDGE_CURVE('',#40419,#40238,#40468,.T.); +#40468 = LINE('',#40469,#40470); +#40469 = CARTESIAN_POINT('',(-5.325,0.92,3.619548911246E-02)); +#40470 = VECTOR('',#40471,1.); +#40471 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40472 = ORIENTED_EDGE('',*,*,#40237,.F.); +#40473 = ORIENTED_EDGE('',*,*,#40452,.F.); +#40474 = ORIENTED_EDGE('',*,*,#40426,.T.); +#40475 = CYLINDRICAL_SURFACE('',#40476,3.E-02); +#40476 = AXIS2_PLACEMENT_3D('',#40477,#40478,#40479); +#40477 = CARTESIAN_POINT('',(-5.325,0.95,3.619548911246E-02)); +#40478 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40479 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40480 = ADVANCED_FACE('',(#40481),#40492,.T.); +#40481 = FACE_BOUND('',#40482,.T.); +#40482 = EDGE_LOOP('',(#40483,#40484,#40490,#40491)); +#40483 = ORIENTED_EDGE('',*,*,#40418,.F.); +#40484 = ORIENTED_EDGE('',*,*,#40485,.T.); +#40485 = EDGE_CURVE('',#40411,#40247,#40486,.T.); +#40486 = LINE('',#40487,#40488); +#40487 = CARTESIAN_POINT('',(-5.325,0.92,7.771561172376E-16)); +#40488 = VECTOR('',#40489,1.); +#40489 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40490 = ORIENTED_EDGE('',*,*,#40246,.T.); +#40491 = ORIENTED_EDGE('',*,*,#40467,.F.); +#40492 = PLANE('',#40493); +#40493 = AXIS2_PLACEMENT_3D('',#40494,#40495,#40496); +#40494 = CARTESIAN_POINT('',(-5.325,0.92,7.771561172376E-16)); +#40495 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#40496 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40497 = ADVANCED_FACE('',(#40498),#40509,.T.); +#40498 = FACE_BOUND('',#40499,.T.); +#40499 = EDGE_LOOP('',(#40500,#40501,#40507,#40508)); +#40500 = ORIENTED_EDGE('',*,*,#40410,.T.); +#40501 = ORIENTED_EDGE('',*,*,#40502,.T.); +#40502 = EDGE_CURVE('',#40403,#40255,#40503,.T.); +#40503 = LINE('',#40504,#40505); +#40504 = CARTESIAN_POINT('',(-5.325,1.25,6.661338147751E-16)); +#40505 = VECTOR('',#40506,1.); +#40506 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40507 = ORIENTED_EDGE('',*,*,#40254,.T.); +#40508 = ORIENTED_EDGE('',*,*,#40485,.F.); +#40509 = PLANE('',#40510); +#40510 = AXIS2_PLACEMENT_3D('',#40511,#40512,#40513); +#40511 = CARTESIAN_POINT('',(-5.325,1.25,6.661338147751E-16)); +#40512 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40513 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#40514 = ADVANCED_FACE('',(#40515),#40526,.T.); +#40515 = FACE_BOUND('',#40516,.T.); +#40516 = EDGE_LOOP('',(#40517,#40523,#40524,#40525)); +#40517 = ORIENTED_EDGE('',*,*,#40518,.T.); +#40518 = EDGE_CURVE('',#40395,#40263,#40519,.T.); +#40519 = LINE('',#40520,#40521); +#40520 = CARTESIAN_POINT('',(-5.325,1.3,5.E-02)); +#40521 = VECTOR('',#40522,1.); +#40522 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40523 = ORIENTED_EDGE('',*,*,#40262,.T.); +#40524 = ORIENTED_EDGE('',*,*,#40502,.F.); +#40525 = ORIENTED_EDGE('',*,*,#40402,.F.); +#40526 = PLANE('',#40527); +#40527 = AXIS2_PLACEMENT_3D('',#40528,#40529,#40530); +#40528 = CARTESIAN_POINT('',(-5.325,1.3,5.E-02)); +#40529 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#40530 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#40531 = ADVANCED_FACE('',(#40532),#40543,.T.); +#40532 = FACE_BOUND('',#40533,.T.); +#40533 = EDGE_LOOP('',(#40534,#40540,#40541,#40542)); +#40534 = ORIENTED_EDGE('',*,*,#40535,.T.); +#40535 = EDGE_CURVE('',#40386,#40271,#40536,.T.); +#40536 = LINE('',#40537,#40538); +#40537 = CARTESIAN_POINT('',(-5.325,1.3,0.11)); +#40538 = VECTOR('',#40539,1.); +#40539 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40540 = ORIENTED_EDGE('',*,*,#40270,.T.); +#40541 = ORIENTED_EDGE('',*,*,#40518,.F.); +#40542 = ORIENTED_EDGE('',*,*,#40394,.F.); +#40543 = PLANE('',#40544); +#40544 = AXIS2_PLACEMENT_3D('',#40545,#40546,#40547); +#40545 = CARTESIAN_POINT('',(-5.325,1.3,0.11)); +#40546 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40547 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40548 = ADVANCED_FACE('',(#40549),#40555,.F.); +#40549 = FACE_BOUND('',#40550,.F.); +#40550 = EDGE_LOOP('',(#40551,#40552,#40553,#40554)); +#40551 = ORIENTED_EDGE('',*,*,#40535,.T.); +#40552 = ORIENTED_EDGE('',*,*,#40278,.F.); +#40553 = ORIENTED_EDGE('',*,*,#40326,.F.); +#40554 = ORIENTED_EDGE('',*,*,#40385,.T.); +#40555 = CYLINDRICAL_SURFACE('',#40556,5.E-02); +#40556 = AXIS2_PLACEMENT_3D('',#40557,#40558,#40559); +#40557 = CARTESIAN_POINT('',(-5.325,1.35,0.11)); +#40558 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40559 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40560 = ADVANCED_FACE('',(#40561),#40643,.F.); +#40561 = FACE_BOUND('',#40562,.T.); +#40562 = EDGE_LOOP('',(#40563,#40573,#40581,#40589,#40597,#40605,#40613, + #40621,#40629,#40637)); +#40563 = ORIENTED_EDGE('',*,*,#40564,.T.); +#40564 = EDGE_CURVE('',#40565,#40567,#40569,.T.); +#40565 = VERTEX_POINT('',#40566); +#40566 = CARTESIAN_POINT('',(-6.285,-1.8,0.174074074074)); +#40567 = VERTEX_POINT('',#40568); +#40568 = CARTESIAN_POINT('',(-6.285,-1.63,0.3)); +#40569 = LINE('',#40570,#40571); +#40570 = CARTESIAN_POINT('',(-6.285,0.694863,2.022120740741)); +#40571 = VECTOR('',#40572,1.); +#40572 = DIRECTION('',(1.362972871417E-16,0.803557193345,0.595227550626) + ); +#40573 = ORIENTED_EDGE('',*,*,#40574,.T.); +#40574 = EDGE_CURVE('',#40567,#40575,#40577,.T.); +#40575 = VERTEX_POINT('',#40576); +#40576 = CARTESIAN_POINT('',(-6.285,-1.2,0.3)); +#40577 = LINE('',#40578,#40579); +#40578 = CARTESIAN_POINT('',(-6.285,0.694863,0.3)); +#40579 = VECTOR('',#40580,1.); +#40580 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#40581 = ORIENTED_EDGE('',*,*,#40582,.F.); +#40582 = EDGE_CURVE('',#40583,#40575,#40585,.T.); +#40583 = VERTEX_POINT('',#40584); +#40584 = CARTESIAN_POINT('',(-6.285,-0.7,0.33)); +#40585 = LINE('',#40586,#40587); +#40586 = CARTESIAN_POINT('',(-6.285,0.694863,0.41369178)); +#40587 = VECTOR('',#40588,1.); +#40588 = DIRECTION('',(-1.371434628377E-17,-0.998204845466, + -5.989229072795E-02)); +#40589 = ORIENTED_EDGE('',*,*,#40590,.F.); +#40590 = EDGE_CURVE('',#40591,#40583,#40593,.T.); +#40591 = VERTEX_POINT('',#40592); +#40592 = CARTESIAN_POINT('',(-6.285,-0.6,0.33)); +#40593 = LINE('',#40594,#40595); +#40594 = CARTESIAN_POINT('',(-6.285,0.694863,0.33)); +#40595 = VECTOR('',#40596,1.); +#40596 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#40597 = ORIENTED_EDGE('',*,*,#40598,.F.); +#40598 = EDGE_CURVE('',#40599,#40591,#40601,.T.); +#40599 = VERTEX_POINT('',#40600); +#40600 = CARTESIAN_POINT('',(-6.285,-0.6,0.69)); +#40601 = LINE('',#40602,#40603); +#40602 = CARTESIAN_POINT('',(-6.285,-0.6,0.402847335292)); +#40603 = VECTOR('',#40604,1.); +#40604 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40605 = ORIENTED_EDGE('',*,*,#40606,.F.); +#40606 = EDGE_CURVE('',#40607,#40599,#40609,.T.); +#40607 = VERTEX_POINT('',#40608); +#40608 = CARTESIAN_POINT('',(-6.285,-0.7,0.69)); +#40609 = LINE('',#40610,#40611); +#40610 = CARTESIAN_POINT('',(-6.285,7.493623042064E-02,0.69)); +#40611 = VECTOR('',#40612,1.); +#40612 = DIRECTION('',(3.757481798336E-32,1.,-6.488950002326E-17)); +#40613 = ORIENTED_EDGE('',*,*,#40614,.T.); +#40614 = EDGE_CURVE('',#40607,#40615,#40617,.T.); +#40615 = VERTEX_POINT('',#40616); +#40616 = CARTESIAN_POINT('',(-6.285,-1.1,0.72)); +#40617 = LINE('',#40618,#40619); +#40618 = CARTESIAN_POINT('',(-6.285,-0.7,0.69)); +#40619 = VECTOR('',#40620,1.); +#40620 = DIRECTION('',(1.71256640256E-17,-0.997199309888, + 7.478994824163E-02)); +#40621 = ORIENTED_EDGE('',*,*,#40622,.T.); +#40622 = EDGE_CURVE('',#40615,#40623,#40625,.T.); +#40623 = VERTEX_POINT('',#40624); +#40624 = CARTESIAN_POINT('',(-6.285,-1.65,0.72)); +#40625 = LINE('',#40626,#40627); +#40626 = CARTESIAN_POINT('',(-6.285,-1.2,0.72)); +#40627 = VECTOR('',#40628,1.); +#40628 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#40629 = ORIENTED_EDGE('',*,*,#40630,.T.); +#40630 = EDGE_CURVE('',#40623,#40631,#40633,.T.); +#40631 = VERTEX_POINT('',#40632); +#40632 = CARTESIAN_POINT('',(-6.285,-1.8,0.92)); +#40633 = LINE('',#40634,#40635); +#40634 = CARTESIAN_POINT('',(-6.285,-1.7412105,0.841614)); +#40635 = VECTOR('',#40636,1.); +#40636 = DIRECTION('',(1.831867990632E-16,-0.6,0.8)); +#40637 = ORIENTED_EDGE('',*,*,#40638,.F.); +#40638 = EDGE_CURVE('',#40565,#40631,#40639,.T.); +#40639 = LINE('',#40640,#40641); +#40640 = CARTESIAN_POINT('',(-6.285,-1.8,0.841614)); +#40641 = VECTOR('',#40642,1.); +#40642 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40643 = PLANE('',#40644); +#40644 = AXIS2_PLACEMENT_3D('',#40645,#40646,#40647); +#40645 = CARTESIAN_POINT('',(-6.285,-1.8,1.05)); +#40646 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40647 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#40648 = ADVANCED_FACE('',(#40649),#40683,.F.); +#40649 = FACE_BOUND('',#40650,.T.); +#40650 = EDGE_LOOP('',(#40651,#40661,#40669,#40677)); +#40651 = ORIENTED_EDGE('',*,*,#40652,.F.); +#40652 = EDGE_CURVE('',#40653,#40655,#40657,.T.); +#40653 = VERTEX_POINT('',#40654); +#40654 = CARTESIAN_POINT('',(-6.5025,-0.8,0.18)); +#40655 = VERTEX_POINT('',#40656); +#40656 = CARTESIAN_POINT('',(-6.5025,-1.85,0.18)); +#40657 = LINE('',#40658,#40659); +#40658 = CARTESIAN_POINT('',(-6.5025,7.493623042064E-02,0.18)); +#40659 = VECTOR('',#40660,1.); +#40660 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#40661 = ORIENTED_EDGE('',*,*,#40662,.T.); +#40662 = EDGE_CURVE('',#40653,#40663,#40665,.T.); +#40663 = VERTEX_POINT('',#40664); +#40664 = CARTESIAN_POINT('',(-6.4525,-0.8,0.13)); +#40665 = LINE('',#40666,#40667); +#40666 = CARTESIAN_POINT('',(-6.6025,-0.8,0.28)); +#40667 = VECTOR('',#40668,1.); +#40668 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#40669 = ORIENTED_EDGE('',*,*,#40670,.F.); +#40670 = EDGE_CURVE('',#40671,#40663,#40673,.T.); +#40671 = VERTEX_POINT('',#40672); +#40672 = CARTESIAN_POINT('',(-6.4525,-1.9,0.13)); +#40673 = LINE('',#40674,#40675); +#40674 = CARTESIAN_POINT('',(-6.4525,7.493623042064E-02,0.13)); +#40675 = VECTOR('',#40676,1.); +#40676 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#40677 = ORIENTED_EDGE('',*,*,#40678,.T.); +#40678 = EDGE_CURVE('',#40671,#40655,#40679,.T.); +#40679 = LINE('',#40680,#40681); +#40680 = CARTESIAN_POINT('',(-9.047363,0.694863,2.724863)); +#40681 = VECTOR('',#40682,1.); +#40682 = DIRECTION('',(-0.57735026919,0.57735026919,0.57735026919)); +#40683 = PLANE('',#40684); +#40684 = AXIS2_PLACEMENT_3D('',#40685,#40686,#40687); +#40685 = CARTESIAN_POINT('',(-6.4775,-1.35,0.155)); +#40686 = DIRECTION('',(0.707106781187,7.532303909457E-17,0.707106781187) + ); +#40687 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#40688 = ADVANCED_FACE('',(#40689),#40723,.T.); +#40689 = FACE_BOUND('',#40690,.T.); +#40690 = EDGE_LOOP('',(#40691,#40701,#40709,#40717)); +#40691 = ORIENTED_EDGE('',*,*,#40692,.T.); +#40692 = EDGE_CURVE('',#40693,#40695,#40697,.T.); +#40693 = VERTEX_POINT('',#40694); +#40694 = CARTESIAN_POINT('',(-4.825,1.3,0.11)); +#40695 = VERTEX_POINT('',#40696); +#40696 = CARTESIAN_POINT('',(-4.675,1.3,0.11)); +#40697 = LINE('',#40698,#40699); +#40698 = CARTESIAN_POINT('',(-4.825,1.3,0.11)); +#40699 = VECTOR('',#40700,1.); +#40700 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40701 = ORIENTED_EDGE('',*,*,#40702,.T.); +#40702 = EDGE_CURVE('',#40695,#40703,#40705,.T.); +#40703 = VERTEX_POINT('',#40704); +#40704 = CARTESIAN_POINT('',(-4.675,1.3,5.E-02)); +#40705 = LINE('',#40706,#40707); +#40706 = CARTESIAN_POINT('',(-4.675,1.3,0.841614)); +#40707 = VECTOR('',#40708,1.); +#40708 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40709 = ORIENTED_EDGE('',*,*,#40710,.F.); +#40710 = EDGE_CURVE('',#40711,#40703,#40713,.T.); +#40711 = VERTEX_POINT('',#40712); +#40712 = CARTESIAN_POINT('',(-4.825,1.3,5.E-02)); +#40713 = LINE('',#40714,#40715); +#40714 = CARTESIAN_POINT('',(-4.825,1.3,5.E-02)); +#40715 = VECTOR('',#40716,1.); +#40716 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40717 = ORIENTED_EDGE('',*,*,#40718,.F.); +#40718 = EDGE_CURVE('',#40693,#40711,#40719,.T.); +#40719 = LINE('',#40720,#40721); +#40720 = CARTESIAN_POINT('',(-4.825,1.3,0.11)); +#40721 = VECTOR('',#40722,1.); +#40722 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40723 = PLANE('',#40724); +#40724 = AXIS2_PLACEMENT_3D('',#40725,#40726,#40727); +#40725 = CARTESIAN_POINT('',(-4.825,1.3,0.11)); +#40726 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40727 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40728 = ADVANCED_FACE('',(#40729),#40754,.T.); +#40729 = FACE_BOUND('',#40730,.T.); +#40730 = EDGE_LOOP('',(#40731,#40739,#40740,#40748)); +#40731 = ORIENTED_EDGE('',*,*,#40732,.F.); +#40732 = EDGE_CURVE('',#40623,#40733,#40735,.T.); +#40733 = VERTEX_POINT('',#40734); +#40734 = CARTESIAN_POINT('',(6.285,-1.65,0.72)); +#40735 = LINE('',#40736,#40737); +#40736 = CARTESIAN_POINT('',(-16.5,-1.65,0.72)); +#40737 = VECTOR('',#40738,1.); +#40738 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40739 = ORIENTED_EDGE('',*,*,#40622,.F.); +#40740 = ORIENTED_EDGE('',*,*,#40741,.F.); +#40741 = EDGE_CURVE('',#40742,#40615,#40744,.T.); +#40742 = VERTEX_POINT('',#40743); +#40743 = CARTESIAN_POINT('',(6.285,-1.1,0.72)); +#40744 = LINE('',#40745,#40746); +#40745 = CARTESIAN_POINT('',(-2.735,-1.1,0.72)); +#40746 = VECTOR('',#40747,1.); +#40747 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40748 = ORIENTED_EDGE('',*,*,#40749,.F.); +#40749 = EDGE_CURVE('',#40733,#40742,#40750,.T.); +#40750 = LINE('',#40751,#40752); +#40751 = CARTESIAN_POINT('',(6.285,7.493623042064E-02,0.72)); +#40752 = VECTOR('',#40753,1.); +#40753 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#40754 = PLANE('',#40755); +#40755 = AXIS2_PLACEMENT_3D('',#40756,#40757,#40758); +#40756 = CARTESIAN_POINT('',(-6.285,-1.2,0.72)); +#40757 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40758 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#40759 = ADVANCED_FACE('',(#40760),#40899,.T.); +#40760 = FACE_BOUND('',#40761,.T.); +#40761 = EDGE_LOOP('',(#40762,#40770,#40771,#40772,#40773,#40781,#40789, + #40797,#40805,#40813,#40821,#40829,#40837,#40845,#40853,#40861, + #40869,#40877,#40885,#40893)); +#40762 = ORIENTED_EDGE('',*,*,#40763,.F.); +#40763 = EDGE_CURVE('',#39579,#40764,#40766,.T.); +#40764 = VERTEX_POINT('',#40765); +#40765 = CARTESIAN_POINT('',(6.8,-2.E-02,1.)); +#40766 = LINE('',#40767,#40768); +#40767 = CARTESIAN_POINT('',(1.,-2.E-02,1.)); +#40768 = VECTOR('',#40769,1.); +#40769 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40770 = ORIENTED_EDGE('',*,*,#39578,.T.); +#40771 = ORIENTED_EDGE('',*,*,#39313,.T.); +#40772 = ORIENTED_EDGE('',*,*,#39920,.T.); +#40773 = ORIENTED_EDGE('',*,*,#40774,.F.); +#40774 = EDGE_CURVE('',#40775,#39913,#40777,.T.); +#40775 = VERTEX_POINT('',#40776); +#40776 = CARTESIAN_POINT('',(-7.,-1.,1.)); +#40777 = LINE('',#40778,#40779); +#40778 = CARTESIAN_POINT('',(-7.,0.694863,1.)); +#40779 = VECTOR('',#40780,1.); +#40780 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40781 = ORIENTED_EDGE('',*,*,#40782,.T.); +#40782 = EDGE_CURVE('',#40775,#40783,#40785,.T.); +#40783 = VERTEX_POINT('',#40784); +#40784 = CARTESIAN_POINT('',(-6.6025,-1.,1.)); +#40785 = LINE('',#40786,#40787); +#40786 = CARTESIAN_POINT('',(10.,-1.,1.)); +#40787 = VECTOR('',#40788,1.); +#40788 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40789 = ORIENTED_EDGE('',*,*,#40790,.F.); +#40790 = EDGE_CURVE('',#40791,#40783,#40793,.T.); +#40791 = VERTEX_POINT('',#40792); +#40792 = CARTESIAN_POINT('',(-6.6025,-1.75,1.)); +#40793 = LINE('',#40794,#40795); +#40794 = CARTESIAN_POINT('',(-6.6025,0.694863,1.)); +#40795 = VECTOR('',#40796,1.); +#40796 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40797 = ORIENTED_EDGE('',*,*,#40798,.T.); +#40798 = EDGE_CURVE('',#40791,#40799,#40801,.T.); +#40799 = VERTEX_POINT('',#40800); +#40800 = CARTESIAN_POINT('',(-6.4525,-1.9,1.)); +#40801 = LINE('',#40802,#40803); +#40802 = CARTESIAN_POINT('',(-9.047363,0.694863,1.)); +#40803 = VECTOR('',#40804,1.); +#40804 = DIRECTION('',(0.707106781187,-0.707106781187,1.429810390713E-30 + )); +#40805 = ORIENTED_EDGE('',*,*,#40806,.F.); +#40806 = EDGE_CURVE('',#40807,#40799,#40809,.T.); +#40807 = VERTEX_POINT('',#40808); +#40808 = CARTESIAN_POINT('',(-6.385,-1.9,1.)); +#40809 = LINE('',#40810,#40811); +#40810 = CARTESIAN_POINT('',(-7.5,-1.9,1.)); +#40811 = VECTOR('',#40812,1.); +#40812 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40813 = ORIENTED_EDGE('',*,*,#40814,.T.); +#40814 = EDGE_CURVE('',#40807,#40815,#40817,.T.); +#40815 = VERTEX_POINT('',#40816); +#40816 = CARTESIAN_POINT('',(-6.285,-1.8,1.)); +#40817 = LINE('',#40818,#40819); +#40818 = CARTESIAN_POINT('',(-3.790137,0.694863,1.)); +#40819 = VECTOR('',#40820,1.); +#40820 = DIRECTION('',(0.707106781187,0.707106781187,-3.238315696035E-16 + )); +#40821 = ORIENTED_EDGE('',*,*,#40822,.T.); +#40822 = EDGE_CURVE('',#40815,#40823,#40825,.T.); +#40823 = VERTEX_POINT('',#40824); +#40824 = CARTESIAN_POINT('',(6.285,-1.8,1.)); +#40825 = LINE('',#40826,#40827); +#40826 = CARTESIAN_POINT('',(4.,-1.8,1.)); +#40827 = VECTOR('',#40828,1.); +#40828 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40829 = ORIENTED_EDGE('',*,*,#40830,.F.); +#40830 = EDGE_CURVE('',#40831,#40823,#40833,.T.); +#40831 = VERTEX_POINT('',#40832); +#40832 = CARTESIAN_POINT('',(6.385,-1.9,1.)); +#40833 = LINE('',#40834,#40835); +#40834 = CARTESIAN_POINT('',(3.790137,0.694863,1.)); +#40835 = VECTOR('',#40836,1.); +#40836 = DIRECTION('',(-0.707106781187,0.707106781187, + -7.149051953565E-31)); +#40837 = ORIENTED_EDGE('',*,*,#40838,.T.); +#40838 = EDGE_CURVE('',#40831,#40839,#40841,.T.); +#40839 = VERTEX_POINT('',#40840); +#40840 = CARTESIAN_POINT('',(6.4525,-1.9,1.)); +#40841 = LINE('',#40842,#40843); +#40842 = CARTESIAN_POINT('',(7.5,-1.9,1.)); +#40843 = VECTOR('',#40844,1.); +#40844 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40845 = ORIENTED_EDGE('',*,*,#40846,.F.); +#40846 = EDGE_CURVE('',#40847,#40839,#40849,.T.); +#40847 = VERTEX_POINT('',#40848); +#40848 = CARTESIAN_POINT('',(6.6025,-1.75,1.)); +#40849 = LINE('',#40850,#40851); +#40850 = CARTESIAN_POINT('',(9.047363,0.694863,1.)); +#40851 = VECTOR('',#40852,1.); +#40852 = DIRECTION('',(-0.707106781187,-0.707106781187, + 3.238315696035E-16)); +#40853 = ORIENTED_EDGE('',*,*,#40854,.T.); +#40854 = EDGE_CURVE('',#40847,#40855,#40857,.T.); +#40855 = VERTEX_POINT('',#40856); +#40856 = CARTESIAN_POINT('',(6.6025,-1.,1.)); +#40857 = LINE('',#40858,#40859); +#40858 = CARTESIAN_POINT('',(6.6025,0.694863,1.)); +#40859 = VECTOR('',#40860,1.); +#40860 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40861 = ORIENTED_EDGE('',*,*,#40862,.F.); +#40862 = EDGE_CURVE('',#40863,#40855,#40865,.T.); +#40863 = VERTEX_POINT('',#40864); +#40864 = CARTESIAN_POINT('',(7.,-1.,1.)); +#40865 = LINE('',#40866,#40867); +#40866 = CARTESIAN_POINT('',(-10.,-1.,1.)); +#40867 = VECTOR('',#40868,1.); +#40868 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40869 = ORIENTED_EDGE('',*,*,#40870,.T.); +#40870 = EDGE_CURVE('',#40863,#40871,#40873,.T.); +#40871 = VERTEX_POINT('',#40872); +#40872 = CARTESIAN_POINT('',(7.,1.,1.)); +#40873 = LINE('',#40874,#40875); +#40874 = CARTESIAN_POINT('',(7.,0.694863,1.)); +#40875 = VECTOR('',#40876,1.); +#40876 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40877 = ORIENTED_EDGE('',*,*,#40878,.F.); +#40878 = EDGE_CURVE('',#40879,#40871,#40881,.T.); +#40879 = VERTEX_POINT('',#40880); +#40880 = CARTESIAN_POINT('',(6.9,1.,1.)); +#40881 = LINE('',#40882,#40883); +#40882 = CARTESIAN_POINT('',(-10.,1.,1.)); +#40883 = VECTOR('',#40884,1.); +#40884 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40885 = ORIENTED_EDGE('',*,*,#40886,.F.); +#40886 = EDGE_CURVE('',#40887,#40879,#40889,.T.); +#40887 = VERTEX_POINT('',#40888); +#40888 = CARTESIAN_POINT('',(6.8,0.9,1.)); +#40889 = LINE('',#40890,#40891); +#40890 = CARTESIAN_POINT('',(-10.,-15.9,1.)); +#40891 = VECTOR('',#40892,1.); +#40892 = DIRECTION('',(0.707106781187,0.707106781187,-3.238315696035E-16 + )); +#40893 = ORIENTED_EDGE('',*,*,#40894,.F.); +#40894 = EDGE_CURVE('',#40764,#40887,#40895,.T.); +#40895 = LINE('',#40896,#40897); +#40896 = CARTESIAN_POINT('',(6.8,0.694863,1.)); +#40897 = VECTOR('',#40898,1.); +#40898 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#40899 = PLANE('',#40900); +#40900 = AXIS2_PLACEMENT_3D('',#40901,#40902,#40903); +#40901 = CARTESIAN_POINT('',(-41.17662438884,-1.493867268294,1.)); +#40902 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40903 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#40904 = ADVANCED_FACE('',(#40905),#40929,.F.); +#40905 = FACE_BOUND('',#40906,.T.); +#40906 = EDGE_LOOP('',(#40907,#40908,#40916,#40922,#40923)); +#40907 = ORIENTED_EDGE('',*,*,#40798,.F.); +#40908 = ORIENTED_EDGE('',*,*,#40909,.F.); +#40909 = EDGE_CURVE('',#40910,#40791,#40912,.T.); +#40910 = VERTEX_POINT('',#40911); +#40911 = CARTESIAN_POINT('',(-6.6025,-1.75,0.18)); +#40912 = LINE('',#40913,#40914); +#40913 = CARTESIAN_POINT('',(-6.6025,-1.75,0.615)); +#40914 = VECTOR('',#40915,1.); +#40915 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40916 = ORIENTED_EDGE('',*,*,#40917,.F.); +#40917 = EDGE_CURVE('',#40655,#40910,#40918,.T.); +#40918 = LINE('',#40919,#40920); +#40919 = CARTESIAN_POINT('',(-9.047363,0.694863,0.18)); +#40920 = VECTOR('',#40921,1.); +#40921 = DIRECTION('',(-0.707106781187,0.707106781187,1.110223024625E-16 + )); +#40922 = ORIENTED_EDGE('',*,*,#40678,.F.); +#40923 = ORIENTED_EDGE('',*,*,#40924,.T.); +#40924 = EDGE_CURVE('',#40671,#40799,#40925,.T.); +#40925 = LINE('',#40926,#40927); +#40926 = CARTESIAN_POINT('',(-6.4525,-1.9,0.615)); +#40927 = VECTOR('',#40928,1.); +#40928 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#40929 = PLANE('',#40930); +#40930 = AXIS2_PLACEMENT_3D('',#40931,#40932,#40933); +#40931 = CARTESIAN_POINT('',(-6.5275,-1.825,0.615)); +#40932 = DIRECTION('',(0.707106781187,0.707106781187,-3.238315696035E-16 + )); +#40933 = DIRECTION('',(-0.707106781187,0.707106781187, + -1.454462294001E-30)); +#40934 = ADVANCED_FACE('',(#40935),#40960,.F.); +#40935 = FACE_BOUND('',#40936,.T.); +#40936 = EDGE_LOOP('',(#40937,#40938,#40944,#40945,#40946,#40954)); +#40937 = ORIENTED_EDGE('',*,*,#40670,.T.); +#40938 = ORIENTED_EDGE('',*,*,#40939,.F.); +#40939 = EDGE_CURVE('',#39627,#40663,#40940,.T.); +#40940 = LINE('',#40941,#40942); +#40941 = CARTESIAN_POINT('',(-6.4525,-0.8,0.402847335292)); +#40942 = VECTOR('',#40943,1.); +#40943 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#40944 = ORIENTED_EDGE('',*,*,#39626,.T.); +#40945 = ORIENTED_EDGE('',*,*,#39905,.T.); +#40946 = ORIENTED_EDGE('',*,*,#40947,.T.); +#40947 = EDGE_CURVE('',#39898,#40948,#40950,.T.); +#40948 = VERTEX_POINT('',#40949); +#40949 = CARTESIAN_POINT('',(-6.4525,-1.9,3.E-02)); +#40950 = LINE('',#40951,#40952); +#40951 = CARTESIAN_POINT('',(-6.4525,0.694863,3.E-02)); +#40952 = VECTOR('',#40953,1.); +#40953 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#40954 = ORIENTED_EDGE('',*,*,#40955,.T.); +#40955 = EDGE_CURVE('',#40948,#40671,#40956,.T.); +#40956 = LINE('',#40957,#40958); +#40957 = CARTESIAN_POINT('',(-6.4525,-1.9,0.402847335292)); +#40958 = VECTOR('',#40959,1.); +#40959 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#40960 = PLANE('',#40961); +#40961 = AXIS2_PLACEMENT_3D('',#40962,#40963,#40964); +#40962 = CARTESIAN_POINT('',(-6.4525,-1.9,3.E-02)); +#40963 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#40964 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#40965 = ADVANCED_FACE('',(#40966),#40991,.T.); +#40966 = FACE_BOUND('',#40967,.T.); +#40967 = EDGE_LOOP('',(#40968,#40976,#40982,#40983,#40984,#40990)); +#40968 = ORIENTED_EDGE('',*,*,#40969,.T.); +#40969 = EDGE_CURVE('',#39498,#40970,#40972,.T.); +#40970 = VERTEX_POINT('',#40971); +#40971 = CARTESIAN_POINT('',(-5.4,0.92,8.E-02)); +#40972 = LINE('',#40973,#40974); +#40973 = CARTESIAN_POINT('',(-21.,0.92,8.E-02)); +#40974 = VECTOR('',#40975,1.); +#40975 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40976 = ORIENTED_EDGE('',*,*,#40977,.T.); +#40977 = EDGE_CURVE('',#40970,#40167,#40978,.T.); +#40978 = LINE('',#40979,#40980); +#40979 = CARTESIAN_POINT('',(-5.4,0.694863,8.E-02)); +#40980 = VECTOR('',#40981,1.); +#40981 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#40982 = ORIENTED_EDGE('',*,*,#40166,.F.); +#40983 = ORIENTED_EDGE('',*,*,#40348,.T.); +#40984 = ORIENTED_EDGE('',*,*,#40985,.F.); +#40985 = EDGE_CURVE('',#39496,#40220,#40986,.T.); +#40986 = LINE('',#40987,#40988); +#40987 = CARTESIAN_POINT('',(-21.,1.,8.E-02)); +#40988 = VECTOR('',#40989,1.); +#40989 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#40990 = ORIENTED_EDGE('',*,*,#39495,.T.); +#40991 = PLANE('',#40992); +#40992 = AXIS2_PLACEMENT_3D('',#40993,#40994,#40995); +#40993 = CARTESIAN_POINT('',(-5.3375,1.,8.E-02)); +#40994 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#40995 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#40996 = ADVANCED_FACE('',(#40997),#41031,.T.); +#40997 = FACE_BOUND('',#40998,.T.); +#40998 = EDGE_LOOP('',(#40999,#41009,#41017,#41025)); +#40999 = ORIENTED_EDGE('',*,*,#41000,.T.); +#41000 = EDGE_CURVE('',#41001,#41003,#41005,.T.); +#41001 = VERTEX_POINT('',#41002); +#41002 = CARTESIAN_POINT('',(-4.825,1.35,0.31)); +#41003 = VERTEX_POINT('',#41004); +#41004 = CARTESIAN_POINT('',(-4.675,1.35,0.31)); +#41005 = LINE('',#41006,#41007); +#41006 = CARTESIAN_POINT('',(-2.,1.35,0.31)); +#41007 = VECTOR('',#41008,1.); +#41008 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41009 = ORIENTED_EDGE('',*,*,#41010,.T.); +#41010 = EDGE_CURVE('',#41003,#41011,#41013,.T.); +#41011 = VERTEX_POINT('',#41012); +#41012 = CARTESIAN_POINT('',(-4.675,1.35,0.16)); +#41013 = LINE('',#41014,#41015); +#41014 = CARTESIAN_POINT('',(-4.675,1.35,0.841614)); +#41015 = VECTOR('',#41016,1.); +#41016 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#41017 = ORIENTED_EDGE('',*,*,#41018,.F.); +#41018 = EDGE_CURVE('',#41019,#41011,#41021,.T.); +#41019 = VERTEX_POINT('',#41020); +#41020 = CARTESIAN_POINT('',(-4.825,1.35,0.16)); +#41021 = LINE('',#41022,#41023); +#41022 = CARTESIAN_POINT('',(-4.825,1.35,0.16)); +#41023 = VECTOR('',#41024,1.); +#41024 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41025 = ORIENTED_EDGE('',*,*,#41026,.T.); +#41026 = EDGE_CURVE('',#41019,#41001,#41027,.T.); +#41027 = LINE('',#41028,#41029); +#41028 = CARTESIAN_POINT('',(-4.825,1.35,0.31)); +#41029 = VECTOR('',#41030,1.); +#41030 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#41031 = PLANE('',#41032); +#41032 = AXIS2_PLACEMENT_3D('',#41033,#41034,#41035); +#41033 = CARTESIAN_POINT('',(-4.825,1.35,0.31)); +#41034 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#41035 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#41036 = ADVANCED_FACE('',(#41037),#41087,.T.); +#41037 = FACE_BOUND('',#41038,.T.); +#41038 = EDGE_LOOP('',(#41039,#41049,#41055,#41056,#41057,#41058,#41066, + #41074,#41080,#41081)); +#41039 = ORIENTED_EDGE('',*,*,#41040,.F.); +#41040 = EDGE_CURVE('',#41041,#41043,#41045,.T.); +#41041 = VERTEX_POINT('',#41042); +#41042 = CARTESIAN_POINT('',(-6.385,-1.9,0.1)); +#41043 = VERTEX_POINT('',#41044); +#41044 = CARTESIAN_POINT('',(6.385,-1.9,1.E-01)); +#41045 = LINE('',#41046,#41047); +#41046 = CARTESIAN_POINT('',(1.5,-1.9,0.1)); +#41047 = VECTOR('',#41048,1.); +#41048 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41049 = ORIENTED_EDGE('',*,*,#41050,.T.); +#41050 = EDGE_CURVE('',#41041,#40807,#41051,.T.); +#41051 = LINE('',#41052,#41053); +#41052 = CARTESIAN_POINT('',(-6.385,-1.9,0.575)); +#41053 = VECTOR('',#41054,1.); +#41054 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#41055 = ORIENTED_EDGE('',*,*,#40806,.T.); +#41056 = ORIENTED_EDGE('',*,*,#40924,.F.); +#41057 = ORIENTED_EDGE('',*,*,#40955,.F.); +#41058 = ORIENTED_EDGE('',*,*,#41059,.F.); +#41059 = EDGE_CURVE('',#41060,#40948,#41062,.T.); +#41060 = VERTEX_POINT('',#41061); +#41061 = CARTESIAN_POINT('',(6.4525,-1.9,3.E-02)); +#41062 = LINE('',#41063,#41064); +#41063 = CARTESIAN_POINT('',(3.5,-1.9,3.E-02)); +#41064 = VECTOR('',#41065,1.); +#41065 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41066 = ORIENTED_EDGE('',*,*,#41067,.T.); +#41067 = EDGE_CURVE('',#41060,#41068,#41070,.T.); +#41068 = VERTEX_POINT('',#41069); +#41069 = CARTESIAN_POINT('',(6.4525,-1.9,0.13)); +#41070 = LINE('',#41071,#41072); +#41071 = CARTESIAN_POINT('',(6.4525,-1.9,0.402847335292)); +#41072 = VECTOR('',#41073,1.); +#41073 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#41074 = ORIENTED_EDGE('',*,*,#41075,.T.); +#41075 = EDGE_CURVE('',#41068,#40839,#41076,.T.); +#41076 = LINE('',#41077,#41078); +#41077 = CARTESIAN_POINT('',(6.4525,-1.9,0.615)); +#41078 = VECTOR('',#41079,1.); +#41079 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#41080 = ORIENTED_EDGE('',*,*,#40838,.F.); +#41081 = ORIENTED_EDGE('',*,*,#41082,.F.); +#41082 = EDGE_CURVE('',#41043,#40831,#41083,.T.); +#41083 = LINE('',#41084,#41085); +#41084 = CARTESIAN_POINT('',(6.385,-1.9,0.575)); +#41085 = VECTOR('',#41086,1.); +#41086 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#41087 = PLANE('',#41088); +#41088 = AXIS2_PLACEMENT_3D('',#41089,#41090,#41091); +#41089 = CARTESIAN_POINT('',(-22.385,-1.9,1.05)); +#41090 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#41091 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41092 = ADVANCED_FACE('',(#41093),#41118,.F.); +#41093 = FACE_BOUND('',#41094,.T.); +#41094 = EDGE_LOOP('',(#41095,#41096,#41104,#41112)); +#41095 = ORIENTED_EDGE('',*,*,#39841,.F.); +#41096 = ORIENTED_EDGE('',*,*,#41097,.T.); +#41097 = EDGE_CURVE('',#39834,#41098,#41100,.T.); +#41098 = VERTEX_POINT('',#41099); +#41099 = CARTESIAN_POINT('',(-4.825,1.,7.866077735407E-02)); +#41100 = LINE('',#41101,#41102); +#41101 = CARTESIAN_POINT('',(-4.825,1.,0.841614)); +#41102 = VECTOR('',#41103,1.); +#41103 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#41104 = ORIENTED_EDGE('',*,*,#41105,.F.); +#41105 = EDGE_CURVE('',#41106,#41098,#41108,.T.); +#41106 = VERTEX_POINT('',#41107); +#41107 = CARTESIAN_POINT('',(-4.675,1.,7.866077735407E-02)); +#41108 = LINE('',#41109,#41110); +#41109 = CARTESIAN_POINT('',(0.5,1.,7.866077735406E-02)); +#41110 = VECTOR('',#41111,1.); +#41111 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41112 = ORIENTED_EDGE('',*,*,#41113,.F.); +#41113 = EDGE_CURVE('',#39842,#41106,#41114,.T.); +#41114 = LINE('',#41115,#41116); +#41115 = CARTESIAN_POINT('',(-4.675,1.,0.841614)); +#41116 = VECTOR('',#41117,1.); +#41117 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#41118 = PLANE('',#41119); +#41119 = AXIS2_PLACEMENT_3D('',#41120,#41121,#41122); +#41120 = CARTESIAN_POINT('',(-4.675,1.,7.866077735407E-02)); +#41121 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#41122 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#41123 = ADVANCED_FACE('',(#41124),#41149,.T.); +#41124 = FACE_BOUND('',#41125,.T.); +#41125 = EDGE_LOOP('',(#41126,#41134,#41142,#41148)); +#41126 = ORIENTED_EDGE('',*,*,#41127,.F.); +#41127 = EDGE_CURVE('',#41128,#40591,#41130,.T.); +#41128 = VERTEX_POINT('',#41129); +#41129 = CARTESIAN_POINT('',(6.285,-0.6,0.33)); +#41130 = LINE('',#41131,#41132); +#41131 = CARTESIAN_POINT('',(-1.,-0.6,0.33)); +#41132 = VECTOR('',#41133,1.); +#41133 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41134 = ORIENTED_EDGE('',*,*,#41135,.F.); +#41135 = EDGE_CURVE('',#41136,#41128,#41138,.T.); +#41136 = VERTEX_POINT('',#41137); +#41137 = CARTESIAN_POINT('',(6.285,-0.6,0.69)); +#41138 = LINE('',#41139,#41140); +#41139 = CARTESIAN_POINT('',(6.285,-0.6,0.402847335292)); +#41140 = VECTOR('',#41141,1.); +#41141 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#41142 = ORIENTED_EDGE('',*,*,#41143,.T.); +#41143 = EDGE_CURVE('',#41136,#40599,#41144,.T.); +#41144 = LINE('',#41145,#41146); +#41145 = CARTESIAN_POINT('',(8.785,-0.6,0.69)); +#41146 = VECTOR('',#41147,1.); +#41147 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41148 = ORIENTED_EDGE('',*,*,#40598,.T.); +#41149 = PLANE('',#41150); +#41150 = AXIS2_PLACEMENT_3D('',#41151,#41152,#41153); +#41151 = CARTESIAN_POINT('',(-18.12071951488,-0.6,0.48745549758)); +#41152 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#41153 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#41154 = ADVANCED_FACE('',(#41155),#41173,.T.); +#41155 = FACE_BOUND('',#41156,.T.); +#41156 = EDGE_LOOP('',(#41157,#41165,#41166,#41167)); +#41157 = ORIENTED_EDGE('',*,*,#41158,.T.); +#41158 = EDGE_CURVE('',#41159,#40607,#41161,.T.); +#41159 = VERTEX_POINT('',#41160); +#41160 = CARTESIAN_POINT('',(6.285,-0.7,0.69)); +#41161 = LINE('',#41162,#41163); +#41162 = CARTESIAN_POINT('',(10.,-0.7,0.69)); +#41163 = VECTOR('',#41164,1.); +#41164 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41165 = ORIENTED_EDGE('',*,*,#40606,.T.); +#41166 = ORIENTED_EDGE('',*,*,#41143,.F.); +#41167 = ORIENTED_EDGE('',*,*,#41168,.F.); +#41168 = EDGE_CURVE('',#41159,#41136,#41169,.T.); +#41169 = LINE('',#41170,#41171); +#41170 = CARTESIAN_POINT('',(6.285,7.493623042064E-02,0.69)); +#41171 = VECTOR('',#41172,1.); +#41172 = DIRECTION('',(3.757481798336E-32,1.,-6.488950002326E-17)); +#41173 = PLANE('',#41174); +#41174 = AXIS2_PLACEMENT_3D('',#41175,#41176,#41177); +#41175 = CARTESIAN_POINT('',(-6.285,-0.6,0.69)); +#41176 = DIRECTION('',(-2.289834988289E-16,-6.488950002326E-17,-1.)); +#41177 = DIRECTION('',(-3.757481798336E-32,-1.,6.488950002326E-17)); +#41178 = ADVANCED_FACE('',(#41179),#41213,.T.); +#41179 = FACE_BOUND('',#41180,.T.); +#41180 = EDGE_LOOP('',(#41181,#41191,#41199,#41207)); +#41181 = ORIENTED_EDGE('',*,*,#41182,.T.); +#41182 = EDGE_CURVE('',#41183,#41185,#41187,.T.); +#41183 = VERTEX_POINT('',#41184); +#41184 = CARTESIAN_POINT('',(-7.,-0.8,0.18)); +#41185 = VERTEX_POINT('',#41186); +#41186 = CARTESIAN_POINT('',(-6.6025,-0.8,0.18)); +#41187 = LINE('',#41188,#41189); +#41188 = CARTESIAN_POINT('',(-7.,-0.8,0.18)); +#41189 = VECTOR('',#41190,1.); +#41190 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41191 = ORIENTED_EDGE('',*,*,#41192,.T.); +#41192 = EDGE_CURVE('',#41185,#41193,#41195,.T.); +#41193 = VERTEX_POINT('',#41194); +#41194 = CARTESIAN_POINT('',(-6.6025,-1.,0.33)); +#41195 = LINE('',#41196,#41197); +#41196 = CARTESIAN_POINT('',(-6.6025,0.694863,-0.94114725)); +#41197 = VECTOR('',#41198,1.); +#41198 = DIRECTION('',(1.373900992974E-16,-0.8,0.6)); +#41199 = ORIENTED_EDGE('',*,*,#41200,.F.); +#41200 = EDGE_CURVE('',#41201,#41193,#41203,.T.); +#41201 = VERTEX_POINT('',#41202); +#41202 = CARTESIAN_POINT('',(-7.,-1.,0.33)); +#41203 = LINE('',#41204,#41205); +#41204 = CARTESIAN_POINT('',(-7.5,-1.,0.33)); +#41205 = VECTOR('',#41206,1.); +#41206 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41207 = ORIENTED_EDGE('',*,*,#41208,.F.); +#41208 = EDGE_CURVE('',#41183,#41201,#41209,.T.); +#41209 = LINE('',#41210,#41211); +#41210 = CARTESIAN_POINT('',(-7.,-0.8,0.18)); +#41211 = VECTOR('',#41212,1.); +#41212 = DIRECTION('',(1.373900992974E-16,-0.8,0.6)); +#41213 = PLANE('',#41214); +#41214 = AXIS2_PLACEMENT_3D('',#41215,#41216,#41217); +#41215 = CARTESIAN_POINT('',(-6.8,-0.8,0.18)); +#41216 = DIRECTION('',(-1.831867990632E-16,-0.6,-0.8)); +#41217 = DIRECTION('',(1.373900992974E-16,-0.8,0.6)); +#41218 = ADVANCED_FACE('',(#41219),#41262,.T.); +#41219 = FACE_BOUND('',#41220,.T.); +#41220 = EDGE_LOOP('',(#41221,#41229,#41230,#41231,#41232,#41240,#41248, + #41256)); +#41221 = ORIENTED_EDGE('',*,*,#41222,.F.); +#41222 = EDGE_CURVE('',#39434,#41223,#41225,.T.); +#41223 = VERTEX_POINT('',#41224); +#41224 = CARTESIAN_POINT('',(6.77,0.46,0.84)); +#41225 = LINE('',#41226,#41227); +#41226 = CARTESIAN_POINT('',(-2.,0.46,0.84)); +#41227 = VECTOR('',#41228,1.); +#41228 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41229 = ORIENTED_EDGE('',*,*,#39481,.T.); +#41230 = ORIENTED_EDGE('',*,*,#39378,.T.); +#41231 = ORIENTED_EDGE('',*,*,#39594,.T.); +#41232 = ORIENTED_EDGE('',*,*,#41233,.F.); +#41233 = EDGE_CURVE('',#41234,#39587,#41236,.T.); +#41234 = VERTEX_POINT('',#41235); +#41235 = CARTESIAN_POINT('',(6.8,-2.E-02,0.84)); +#41236 = LINE('',#41237,#41238); +#41237 = CARTESIAN_POINT('',(7.5,-2.E-02,0.84)); +#41238 = VECTOR('',#41239,1.); +#41239 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41240 = ORIENTED_EDGE('',*,*,#41241,.F.); +#41241 = EDGE_CURVE('',#41242,#41234,#41244,.T.); +#41242 = VERTEX_POINT('',#41243); +#41243 = CARTESIAN_POINT('',(6.8,0.9,0.84)); +#41244 = LINE('',#41245,#41246); +#41245 = CARTESIAN_POINT('',(6.8,0.694863,0.84)); +#41246 = VECTOR('',#41247,1.); +#41247 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#41248 = ORIENTED_EDGE('',*,*,#41249,.F.); +#41249 = EDGE_CURVE('',#41250,#41242,#41252,.T.); +#41250 = VERTEX_POINT('',#41251); +#41251 = CARTESIAN_POINT('',(6.77,0.9,0.84)); +#41252 = LINE('',#41253,#41254); +#41253 = CARTESIAN_POINT('',(7.5,0.9,0.84)); +#41254 = VECTOR('',#41255,1.); +#41255 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41256 = ORIENTED_EDGE('',*,*,#41257,.F.); +#41257 = EDGE_CURVE('',#41223,#41250,#41258,.T.); +#41258 = LINE('',#41259,#41260); +#41259 = CARTESIAN_POINT('',(6.77,0.694863,0.84)); +#41260 = VECTOR('',#41261,1.); +#41261 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#41262 = PLANE('',#41263); +#41263 = AXIS2_PLACEMENT_3D('',#41264,#41265,#41266); +#41264 = CARTESIAN_POINT('',(-3.825,-6.999999999979E-02,0.84)); +#41265 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#41266 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#41267 = ADVANCED_FACE('',(#41268),#41286,.T.); +#41268 = FACE_BOUND('',#41269,.T.); +#41269 = EDGE_LOOP('',(#41270,#41276,#41277,#41283,#41284,#41285)); +#41270 = ORIENTED_EDGE('',*,*,#41271,.T.); +#41271 = EDGE_CURVE('',#40653,#41185,#41272,.T.); +#41272 = LINE('',#41273,#41274); +#41273 = CARTESIAN_POINT('',(-6.6025,-0.8,0.18)); +#41274 = VECTOR('',#41275,1.); +#41275 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41276 = ORIENTED_EDGE('',*,*,#41182,.F.); +#41277 = ORIENTED_EDGE('',*,*,#41278,.F.); +#41278 = EDGE_CURVE('',#39609,#41183,#41279,.T.); +#41279 = LINE('',#41280,#41281); +#41280 = CARTESIAN_POINT('',(-7.,-0.8,1.258386)); +#41281 = VECTOR('',#41282,1.); +#41282 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#41283 = ORIENTED_EDGE('',*,*,#39634,.F.); +#41284 = ORIENTED_EDGE('',*,*,#40939,.T.); +#41285 = ORIENTED_EDGE('',*,*,#40662,.F.); +#41286 = PLANE('',#41287); +#41287 = AXIS2_PLACEMENT_3D('',#41288,#41289,#41290); +#41288 = CARTESIAN_POINT('',(-6.43367832869,-0.8,0.556369515365)); +#41289 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#41290 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#41291 = ADVANCED_FACE('',(#41292),#41326,.T.); +#41292 = FACE_BOUND('',#41293,.T.); +#41293 = EDGE_LOOP('',(#41294,#41304,#41312,#41320)); +#41294 = ORIENTED_EDGE('',*,*,#41295,.T.); +#41295 = EDGE_CURVE('',#41296,#41298,#41300,.T.); +#41296 = VERTEX_POINT('',#41297); +#41297 = CARTESIAN_POINT('',(-4.825,1.25,5.551115123126E-16)); +#41298 = VERTEX_POINT('',#41299); +#41299 = CARTESIAN_POINT('',(-4.675,1.25,5.551115123126E-16)); +#41300 = LINE('',#41301,#41302); +#41301 = CARTESIAN_POINT('',(-4.825,1.25,5.551115123126E-16)); +#41302 = VECTOR('',#41303,1.); +#41303 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41304 = ORIENTED_EDGE('',*,*,#41305,.T.); +#41305 = EDGE_CURVE('',#41298,#41306,#41308,.T.); +#41306 = VERTEX_POINT('',#41307); +#41307 = CARTESIAN_POINT('',(-4.675,0.92,6.661338147751E-16)); +#41308 = LINE('',#41309,#41310); +#41309 = CARTESIAN_POINT('',(-4.675,0.694863,6.661338147751E-16)); +#41310 = VECTOR('',#41311,1.); +#41311 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#41312 = ORIENTED_EDGE('',*,*,#41313,.F.); +#41313 = EDGE_CURVE('',#41314,#41306,#41316,.T.); +#41314 = VERTEX_POINT('',#41315); +#41315 = CARTESIAN_POINT('',(-4.825,0.92,6.661338147751E-16)); +#41316 = LINE('',#41317,#41318); +#41317 = CARTESIAN_POINT('',(-4.825,0.92,6.661338147751E-16)); +#41318 = VECTOR('',#41319,1.); +#41319 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41320 = ORIENTED_EDGE('',*,*,#41321,.T.); +#41321 = EDGE_CURVE('',#41314,#41296,#41322,.T.); +#41322 = LINE('',#41323,#41324); +#41323 = CARTESIAN_POINT('',(-4.825,0.92,6.661338147751E-16)); +#41324 = VECTOR('',#41325,1.); +#41325 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#41326 = PLANE('',#41327); +#41327 = AXIS2_PLACEMENT_3D('',#41328,#41329,#41330); +#41328 = CARTESIAN_POINT('',(-4.825,1.25,5.551115123126E-16)); +#41329 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#41330 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#41331 = ADVANCED_FACE('',(#41332),#41343,.F.); +#41332 = FACE_BOUND('',#41333,.T.); +#41333 = EDGE_LOOP('',(#41334,#41335,#41336,#41337)); +#41334 = ORIENTED_EDGE('',*,*,#41271,.F.); +#41335 = ORIENTED_EDGE('',*,*,#40652,.T.); +#41336 = ORIENTED_EDGE('',*,*,#40917,.T.); +#41337 = ORIENTED_EDGE('',*,*,#41338,.T.); +#41338 = EDGE_CURVE('',#40910,#41185,#41339,.T.); +#41339 = LINE('',#41340,#41341); +#41340 = CARTESIAN_POINT('',(-6.6025,0.694863,0.18)); +#41341 = VECTOR('',#41342,1.); +#41342 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#41343 = PLANE('',#41344); +#41344 = AXIS2_PLACEMENT_3D('',#41345,#41346,#41347); +#41345 = CARTESIAN_POINT('',(-6.4525,-1.9,0.18)); +#41346 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#41347 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41348 = ADVANCED_FACE('',(#41349),#41365,.T.); +#41349 = FACE_BOUND('',#41350,.T.); +#41350 = EDGE_LOOP('',(#41351,#41357,#41358,#41364)); +#41351 = ORIENTED_EDGE('',*,*,#41352,.F.); +#41352 = EDGE_CURVE('',#40016,#40077,#41353,.T.); +#41353 = LINE('',#41354,#41355); +#41354 = CARTESIAN_POINT('',(-7.5,1.35,0.31)); +#41355 = VECTOR('',#41356,1.); +#41356 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41357 = ORIENTED_EDGE('',*,*,#40015,.F.); +#41358 = ORIENTED_EDGE('',*,*,#41359,.F.); +#41359 = EDGE_CURVE('',#40075,#40007,#41360,.T.); +#41360 = LINE('',#41361,#41362); +#41361 = CARTESIAN_POINT('',(-5.825,1.35,0.16)); +#41362 = VECTOR('',#41363,1.); +#41363 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41364 = ORIENTED_EDGE('',*,*,#40074,.T.); +#41365 = PLANE('',#41366); +#41366 = AXIS2_PLACEMENT_3D('',#41367,#41368,#41369); +#41367 = CARTESIAN_POINT('',(-5.825,1.35,0.31)); +#41368 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#41369 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#41370 = ADVANCED_FACE('',(#41371),#41377,.T.); +#41371 = FACE_BOUND('',#41372,.T.); +#41372 = EDGE_LOOP('',(#41373,#41374,#41375,#41376)); +#41373 = ORIENTED_EDGE('',*,*,#39474,.F.); +#41374 = ORIENTED_EDGE('',*,*,#39927,.F.); +#41375 = ORIENTED_EDGE('',*,*,#39339,.F.); +#41376 = ORIENTED_EDGE('',*,*,#39371,.F.); +#41377 = PLANE('',#41378); +#41378 = AXIS2_PLACEMENT_3D('',#41379,#41380,#41381); +#41379 = CARTESIAN_POINT('',(-6.8,0.29,0.31)); +#41380 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#41381 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#41382 = ADVANCED_FACE('',(#41383),#41394,.T.); +#41383 = FACE_BOUND('',#41384,.T.); +#41384 = EDGE_LOOP('',(#41385,#41391,#41392,#41393)); +#41385 = ORIENTED_EDGE('',*,*,#41386,.F.); +#41386 = EDGE_CURVE('',#39958,#40126,#41387,.T.); +#41387 = LINE('',#41388,#41389); +#41388 = CARTESIAN_POINT('',(-5.675,0.943186633611,6.541154699934E-02)); +#41389 = VECTOR('',#41390,1.); +#41390 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41391 = ORIENTED_EDGE('',*,*,#39957,.T.); +#41392 = ORIENTED_EDGE('',*,*,#40059,.T.); +#41393 = ORIENTED_EDGE('',*,*,#40134,.F.); +#41394 = PLANE('',#41395); +#41395 = AXIS2_PLACEMENT_3D('',#41396,#41397,#41398); +#41396 = CARTESIAN_POINT('',(-5.825,0.943186633611,6.541154699934E-02)); +#41397 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#41398 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#41399 = ADVANCED_FACE('',(#41400),#41411,.T.); +#41400 = FACE_BOUND('',#41401,.T.); +#41401 = EDGE_LOOP('',(#41402,#41403,#41404,#41410)); +#41402 = ORIENTED_EDGE('',*,*,#41386,.T.); +#41403 = ORIENTED_EDGE('',*,*,#40125,.T.); +#41404 = ORIENTED_EDGE('',*,*,#41405,.F.); +#41405 = EDGE_CURVE('',#39966,#40118,#41406,.T.); +#41406 = LINE('',#41407,#41408); +#41407 = CARTESIAN_POINT('',(-5.675,0.92,3.619548911246E-02)); +#41408 = VECTOR('',#41409,1.); +#41409 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41410 = ORIENTED_EDGE('',*,*,#39965,.F.); +#41411 = CYLINDRICAL_SURFACE('',#41412,3.E-02); +#41412 = AXIS2_PLACEMENT_3D('',#41413,#41414,#41415); +#41413 = CARTESIAN_POINT('',(-5.675,0.95,3.619548911246E-02)); +#41414 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41415 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#41416 = ADVANCED_FACE('',(#41417),#41428,.F.); +#41417 = FACE_BOUND('',#41418,.T.); +#41418 = EDGE_LOOP('',(#41419,#41420,#41421,#41427)); +#41419 = ORIENTED_EDGE('',*,*,#41405,.T.); +#41420 = ORIENTED_EDGE('',*,*,#40117,.F.); +#41421 = ORIENTED_EDGE('',*,*,#41422,.T.); +#41422 = EDGE_CURVE('',#40110,#39975,#41423,.T.); +#41423 = LINE('',#41424,#41425); +#41424 = CARTESIAN_POINT('',(-5.825,0.92,8.881784197001E-16)); +#41425 = VECTOR('',#41426,1.); +#41426 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41427 = ORIENTED_EDGE('',*,*,#39974,.T.); +#41428 = PLANE('',#41429); +#41429 = AXIS2_PLACEMENT_3D('',#41430,#41431,#41432); +#41430 = CARTESIAN_POINT('',(-5.675,0.92,8.881784197001E-16)); +#41431 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#41432 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#41433 = ADVANCED_FACE('',(#41434),#41445,.T.); +#41434 = FACE_BOUND('',#41435,.T.); +#41435 = EDGE_LOOP('',(#41436,#41442,#41443,#41444)); +#41436 = ORIENTED_EDGE('',*,*,#41437,.F.); +#41437 = EDGE_CURVE('',#39983,#40102,#41438,.T.); +#41438 = LINE('',#41439,#41440); +#41439 = CARTESIAN_POINT('',(-5.675,1.25,7.771561172376E-16)); +#41440 = VECTOR('',#41441,1.); +#41441 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41442 = ORIENTED_EDGE('',*,*,#39982,.F.); +#41443 = ORIENTED_EDGE('',*,*,#41422,.F.); +#41444 = ORIENTED_EDGE('',*,*,#40109,.T.); +#41445 = PLANE('',#41446); +#41446 = AXIS2_PLACEMENT_3D('',#41447,#41448,#41449); +#41447 = CARTESIAN_POINT('',(-5.825,1.25,7.771561172376E-16)); +#41448 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#41449 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#41450 = ADVANCED_FACE('',(#41451),#41462,.F.); +#41451 = FACE_BOUND('',#41452,.T.); +#41452 = EDGE_LOOP('',(#41453,#41454,#41455,#41461)); +#41453 = ORIENTED_EDGE('',*,*,#41437,.T.); +#41454 = ORIENTED_EDGE('',*,*,#40101,.F.); +#41455 = ORIENTED_EDGE('',*,*,#41456,.F.); +#41456 = EDGE_CURVE('',#39991,#40094,#41457,.T.); +#41457 = LINE('',#41458,#41459); +#41458 = CARTESIAN_POINT('',(-5.675,1.3,5.E-02)); +#41459 = VECTOR('',#41460,1.); +#41460 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41461 = ORIENTED_EDGE('',*,*,#39990,.T.); +#41462 = PLANE('',#41463); +#41463 = AXIS2_PLACEMENT_3D('',#41464,#41465,#41466); +#41464 = CARTESIAN_POINT('',(-5.675,1.3,5.E-02)); +#41465 = DIRECTION('',(1.619157848018E-16,-0.707106781186,0.707106781187 + )); +#41466 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#41467 = ADVANCED_FACE('',(#41468),#41479,.F.); +#41468 = FACE_BOUND('',#41469,.T.); +#41469 = EDGE_LOOP('',(#41470,#41471,#41472,#41478)); +#41470 = ORIENTED_EDGE('',*,*,#41456,.T.); +#41471 = ORIENTED_EDGE('',*,*,#40093,.F.); +#41472 = ORIENTED_EDGE('',*,*,#41473,.F.); +#41473 = EDGE_CURVE('',#39999,#40085,#41474,.T.); +#41474 = LINE('',#41475,#41476); +#41475 = CARTESIAN_POINT('',(-5.675,1.3,0.11)); +#41476 = VECTOR('',#41477,1.); +#41477 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41478 = ORIENTED_EDGE('',*,*,#39998,.T.); +#41479 = PLANE('',#41480); +#41480 = AXIS2_PLACEMENT_3D('',#41481,#41482,#41483); +#41481 = CARTESIAN_POINT('',(-5.675,1.3,0.11)); +#41482 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#41483 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#41484 = ADVANCED_FACE('',(#41485),#41491,.F.); +#41485 = FACE_BOUND('',#41486,.F.); +#41486 = EDGE_LOOP('',(#41487,#41488,#41489,#41490)); +#41487 = ORIENTED_EDGE('',*,*,#40006,.F.); +#41488 = ORIENTED_EDGE('',*,*,#41359,.F.); +#41489 = ORIENTED_EDGE('',*,*,#40084,.T.); +#41490 = ORIENTED_EDGE('',*,*,#41473,.F.); +#41491 = CYLINDRICAL_SURFACE('',#41492,5.E-02); +#41492 = AXIS2_PLACEMENT_3D('',#41493,#41494,#41495); +#41493 = CARTESIAN_POINT('',(-5.675,1.35,0.11)); +#41494 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41495 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#41496 = ADVANCED_FACE('',(#41497),#41515,.T.); +#41497 = FACE_BOUND('',#41498,.T.); +#41498 = EDGE_LOOP('',(#41499,#41500,#41501,#41509)); +#41499 = ORIENTED_EDGE('',*,*,#39825,.F.); +#41500 = ORIENTED_EDGE('',*,*,#39690,.T.); +#41501 = ORIENTED_EDGE('',*,*,#41502,.F.); +#41502 = EDGE_CURVE('',#41503,#39683,#41505,.T.); +#41503 = VERTEX_POINT('',#41504); +#41504 = CARTESIAN_POINT('',(-4.95,1.,3.E-02)); +#41505 = LINE('',#41506,#41507); +#41506 = CARTESIAN_POINT('',(-4.95,0.694863,3.E-02)); +#41507 = VECTOR('',#41508,1.); +#41508 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#41509 = ORIENTED_EDGE('',*,*,#41510,.F.); +#41510 = EDGE_CURVE('',#39826,#41503,#41511,.T.); +#41511 = LINE('',#41512,#41513); +#41512 = CARTESIAN_POINT('',(-20.5,1.,-15.52)); +#41513 = VECTOR('',#41514,1.); +#41514 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#41515 = PLANE('',#41516); +#41516 = AXIS2_PLACEMENT_3D('',#41517,#41518,#41519); +#41517 = CARTESIAN_POINT('',(-4.925,0.85,5.5E-02)); +#41518 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#41519 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#41520 = ADVANCED_FACE('',(#41521),#41555,.T.); +#41521 = FACE_BOUND('',#41522,.T.); +#41522 = EDGE_LOOP('',(#41523,#41533,#41541,#41549)); +#41523 = ORIENTED_EDGE('',*,*,#41524,.F.); +#41524 = EDGE_CURVE('',#41525,#41527,#41529,.T.); +#41525 = VERTEX_POINT('',#41526); +#41526 = CARTESIAN_POINT('',(4.6,0.92,8.E-02)); +#41527 = VERTEX_POINT('',#41528); +#41528 = CARTESIAN_POINT('',(4.6,1.,8.E-02)); +#41529 = LINE('',#41530,#41531); +#41530 = CARTESIAN_POINT('',(4.6,0.694863,8.E-02)); +#41531 = VECTOR('',#41532,1.); +#41532 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#41533 = ORIENTED_EDGE('',*,*,#41534,.T.); +#41534 = EDGE_CURVE('',#41525,#41535,#41537,.T.); +#41535 = VERTEX_POINT('',#41536); +#41536 = CARTESIAN_POINT('',(4.55,0.7,3.E-02)); +#41537 = LINE('',#41538,#41539); +#41538 = CARTESIAN_POINT('',(4.5488325,0.694863,2.88325E-02)); +#41539 = VECTOR('',#41540,1.); +#41540 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#41541 = ORIENTED_EDGE('',*,*,#41542,.F.); +#41542 = EDGE_CURVE('',#41543,#41535,#41545,.T.); +#41543 = VERTEX_POINT('',#41544); +#41544 = CARTESIAN_POINT('',(4.55,1.,3.E-02)); +#41545 = LINE('',#41546,#41547); +#41546 = CARTESIAN_POINT('',(4.55,0.694863,3.E-02)); +#41547 = VECTOR('',#41548,1.); +#41548 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#41549 = ORIENTED_EDGE('',*,*,#41550,.F.); +#41550 = EDGE_CURVE('',#41527,#41543,#41551,.T.); +#41551 = LINE('',#41552,#41553); +#41552 = CARTESIAN_POINT('',(-11.,1.,-15.52)); +#41553 = VECTOR('',#41554,1.); +#41554 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#41555 = PLANE('',#41556); +#41556 = AXIS2_PLACEMENT_3D('',#41557,#41558,#41559); +#41557 = CARTESIAN_POINT('',(4.575,0.85,5.5E-02)); +#41558 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#41559 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#41560 = ADVANCED_FACE('',(#41561),#41578,.F.); +#41561 = FACE_BOUND('',#41562,.T.); +#41562 = EDGE_LOOP('',(#41563,#41569,#41570,#41576,#41577)); +#41563 = ORIENTED_EDGE('',*,*,#41564,.T.); +#41564 = EDGE_CURVE('',#41041,#40565,#41565,.T.); +#41565 = LINE('',#41566,#41567); +#41566 = CARTESIAN_POINT('',(-3.790137,0.694863,2.022120740741)); +#41567 = VECTOR('',#41568,1.); +#41568 = DIRECTION('',(0.626384365641,0.626384365641,0.463988418994)); +#41569 = ORIENTED_EDGE('',*,*,#40638,.T.); +#41570 = ORIENTED_EDGE('',*,*,#41571,.T.); +#41571 = EDGE_CURVE('',#40631,#40815,#41572,.T.); +#41572 = LINE('',#41573,#41574); +#41573 = CARTESIAN_POINT('',(-6.285,-1.8,0.841614)); +#41574 = VECTOR('',#41575,1.); +#41575 = DIRECTION('',(1.065228634467E-16,1.065228634467E-16,1.)); +#41576 = ORIENTED_EDGE('',*,*,#40814,.F.); +#41577 = ORIENTED_EDGE('',*,*,#41050,.F.); +#41578 = PLANE('',#41579); +#41579 = AXIS2_PLACEMENT_3D('',#41580,#41581,#41582); +#41580 = CARTESIAN_POINT('',(-6.335,-1.85,0.575)); +#41581 = DIRECTION('',(-0.707106781187,0.707106781187,7.149051953565E-31 + )); +#41582 = DIRECTION('',(-0.707106781187,-0.707106781187, + 3.238315696035E-16)); +#41583 = ADVANCED_FACE('',(#41584),#41600,.T.); +#41584 = FACE_BOUND('',#41585,.T.); +#41585 = EDGE_LOOP('',(#41586,#41587,#41593,#41594)); +#41586 = ORIENTED_EDGE('',*,*,#39739,.T.); +#41587 = ORIENTED_EDGE('',*,*,#41588,.T.); +#41588 = EDGE_CURVE('',#39731,#41106,#41589,.T.); +#41589 = LINE('',#41590,#41591); +#41590 = CARTESIAN_POINT('',(-4.675,0.694863,7.500931358167E-03)); +#41591 = VECTOR('',#41592,1.); +#41592 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#41593 = ORIENTED_EDGE('',*,*,#41105,.T.); +#41594 = ORIENTED_EDGE('',*,*,#41595,.F.); +#41595 = EDGE_CURVE('',#39740,#41098,#41596,.T.); +#41596 = LINE('',#41597,#41598); +#41597 = CARTESIAN_POINT('',(-4.825,0.943186633611,6.541154699934E-02)); +#41598 = VECTOR('',#41599,1.); +#41599 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#41600 = PLANE('',#41601); +#41601 = AXIS2_PLACEMENT_3D('',#41602,#41603,#41604); +#41602 = CARTESIAN_POINT('',(-4.825,0.943186633611,6.541154699934E-02)); +#41603 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#41604 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#41605 = ADVANCED_FACE('',(#41606),#41618,.F.); +#41606 = FACE_BOUND('',#41607,.T.); +#41607 = EDGE_LOOP('',(#41608,#41609,#41610,#41611,#41612)); +#41608 = ORIENTED_EDGE('',*,*,#41192,.F.); +#41609 = ORIENTED_EDGE('',*,*,#41338,.F.); +#41610 = ORIENTED_EDGE('',*,*,#40909,.T.); +#41611 = ORIENTED_EDGE('',*,*,#40790,.T.); +#41612 = ORIENTED_EDGE('',*,*,#41613,.T.); +#41613 = EDGE_CURVE('',#40783,#41193,#41614,.T.); +#41614 = LINE('',#41615,#41616); +#41615 = CARTESIAN_POINT('',(-6.6025,-1.,0.841614)); +#41616 = VECTOR('',#41617,1.); +#41617 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#41618 = PLANE('',#41619); +#41619 = AXIS2_PLACEMENT_3D('',#41620,#41621,#41622); +#41620 = CARTESIAN_POINT('',(-6.6025,7.493623042064E-02,0.402847335292) + ); +#41621 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41622 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#41623 = ADVANCED_FACE('',(#41624,#41658),#41669,.T.); +#41624 = FACE_BOUND('',#41625,.T.); +#41625 = EDGE_LOOP('',(#41626,#41636,#41644,#41652)); +#41626 = ORIENTED_EDGE('',*,*,#41627,.F.); +#41627 = EDGE_CURVE('',#41628,#41630,#41632,.T.); +#41628 = VERTEX_POINT('',#41629); +#41629 = CARTESIAN_POINT('',(-6.615,-1.,0.51)); +#41630 = VERTEX_POINT('',#41631); +#41631 = CARTESIAN_POINT('',(-6.615,-1.,0.82)); +#41632 = LINE('',#41633,#41634); +#41633 = CARTESIAN_POINT('',(-6.615,-1.,0.841614)); +#41634 = VECTOR('',#41635,1.); +#41635 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#41636 = ORIENTED_EDGE('',*,*,#41637,.F.); +#41637 = EDGE_CURVE('',#41638,#41628,#41640,.T.); +#41638 = VERTEX_POINT('',#41639); +#41639 = CARTESIAN_POINT('',(-6.765,-1.,0.51)); +#41640 = LINE('',#41641,#41642); +#41641 = CARTESIAN_POINT('',(1.,-1.,0.51)); +#41642 = VECTOR('',#41643,1.); +#41643 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41644 = ORIENTED_EDGE('',*,*,#41645,.T.); +#41645 = EDGE_CURVE('',#41638,#41646,#41648,.T.); +#41646 = VERTEX_POINT('',#41647); +#41647 = CARTESIAN_POINT('',(-6.765,-1.,0.82)); +#41648 = LINE('',#41649,#41650); +#41649 = CARTESIAN_POINT('',(-6.765,-1.,0.841614)); +#41650 = VECTOR('',#41651,1.); +#41651 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#41652 = ORIENTED_EDGE('',*,*,#41653,.F.); +#41653 = EDGE_CURVE('',#41630,#41646,#41654,.T.); +#41654 = LINE('',#41655,#41656); +#41655 = CARTESIAN_POINT('',(1.,-1.,0.82)); +#41656 = VECTOR('',#41657,1.); +#41657 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41658 = FACE_BOUND('',#41659,.T.); +#41659 = EDGE_LOOP('',(#41660,#41661,#41667,#41668)); +#41660 = ORIENTED_EDGE('',*,*,#40782,.F.); +#41661 = ORIENTED_EDGE('',*,*,#41662,.T.); +#41662 = EDGE_CURVE('',#40775,#41201,#41663,.T.); +#41663 = LINE('',#41664,#41665); +#41664 = CARTESIAN_POINT('',(-7.,-1.,0.841614)); +#41665 = VECTOR('',#41666,1.); +#41666 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#41667 = ORIENTED_EDGE('',*,*,#41200,.T.); +#41668 = ORIENTED_EDGE('',*,*,#41613,.F.); +#41669 = PLANE('',#41670); +#41670 = AXIS2_PLACEMENT_3D('',#41671,#41672,#41673); +#41671 = CARTESIAN_POINT('',(-6.8,-1.,0.33)); +#41672 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#41673 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#41674 = ADVANCED_FACE('',(#41675),#41711,.T.); +#41675 = FACE_BOUND('',#41676,.T.); +#41676 = EDGE_LOOP('',(#41677,#41688,#41696,#41705)); +#41677 = ORIENTED_EDGE('',*,*,#41678,.F.); +#41678 = EDGE_CURVE('',#41679,#41681,#41683,.T.); +#41679 = VERTEX_POINT('',#41680); +#41680 = CARTESIAN_POINT('',(-6.765,-1.1,6.782713613136E-02)); +#41681 = VERTEX_POINT('',#41682); +#41682 = CARTESIAN_POINT('',(-6.765,-1.147779969319,1.787644580805E-02) + ); +#41683 = CIRCLE('',#41684,5.E-02); +#41684 = AXIS2_PLACEMENT_3D('',#41685,#41686,#41687); +#41685 = CARTESIAN_POINT('',(-6.765,-1.15,6.782713613136E-02)); +#41686 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41687 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41688 = ORIENTED_EDGE('',*,*,#41689,.F.); +#41689 = EDGE_CURVE('',#41690,#41679,#41692,.T.); +#41690 = VERTEX_POINT('',#41691); +#41691 = CARTESIAN_POINT('',(-6.615,-1.1,6.782713613136E-02)); +#41692 = LINE('',#41693,#41694); +#41693 = CARTESIAN_POINT('',(-6.765,-1.1,6.782713613136E-02)); +#41694 = VECTOR('',#41695,1.); +#41695 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41696 = ORIENTED_EDGE('',*,*,#41697,.T.); +#41697 = EDGE_CURVE('',#41690,#41698,#41700,.T.); +#41698 = VERTEX_POINT('',#41699); +#41699 = CARTESIAN_POINT('',(-6.615,-1.147779969319,1.787644580805E-02) + ); +#41700 = CIRCLE('',#41701,5.E-02); +#41701 = AXIS2_PLACEMENT_3D('',#41702,#41703,#41704); +#41702 = CARTESIAN_POINT('',(-6.615,-1.15,6.782713613136E-02)); +#41703 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41704 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41705 = ORIENTED_EDGE('',*,*,#41706,.F.); +#41706 = EDGE_CURVE('',#41681,#41698,#41707,.T.); +#41707 = LINE('',#41708,#41709); +#41708 = CARTESIAN_POINT('',(-6.765,-1.147779969319,1.787644580805E-02) + ); +#41709 = VECTOR('',#41710,1.); +#41710 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41711 = CYLINDRICAL_SURFACE('',#41712,5.E-02); +#41712 = AXIS2_PLACEMENT_3D('',#41713,#41714,#41715); +#41713 = CARTESIAN_POINT('',(-6.765,-1.15,6.782713613136E-02)); +#41714 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41715 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41716 = ADVANCED_FACE('',(#41717),#41742,.T.); +#41717 = FACE_BOUND('',#41718,.T.); +#41718 = EDGE_LOOP('',(#41719,#41727,#41728,#41736)); +#41719 = ORIENTED_EDGE('',*,*,#41720,.T.); +#41720 = EDGE_CURVE('',#41721,#41681,#41723,.T.); +#41721 = VERTEX_POINT('',#41722); +#41722 = CARTESIAN_POINT('',(-6.765,-1.55,8.881784197001E-16)); +#41723 = LINE('',#41724,#41725); +#41724 = CARTESIAN_POINT('',(-6.765,-1.55,8.881784197001E-16)); +#41725 = VECTOR('',#41726,1.); +#41726 = DIRECTION('',(1.016700785703E-17,0.999013806466, + 4.440061362072E-02)); +#41727 = ORIENTED_EDGE('',*,*,#41706,.T.); +#41728 = ORIENTED_EDGE('',*,*,#41729,.F.); +#41729 = EDGE_CURVE('',#41730,#41698,#41732,.T.); +#41730 = VERTEX_POINT('',#41731); +#41731 = CARTESIAN_POINT('',(-6.615,-1.55,8.881784197001E-16)); +#41732 = LINE('',#41733,#41734); +#41733 = CARTESIAN_POINT('',(-6.615,-1.55,8.881784197001E-16)); +#41734 = VECTOR('',#41735,1.); +#41735 = DIRECTION('',(1.016700785703E-17,0.999013806466, + 4.440061362072E-02)); +#41736 = ORIENTED_EDGE('',*,*,#41737,.F.); +#41737 = EDGE_CURVE('',#41721,#41730,#41738,.T.); +#41738 = LINE('',#41739,#41740); +#41739 = CARTESIAN_POINT('',(-6.765,-1.55,8.881784197001E-16)); +#41740 = VECTOR('',#41741,1.); +#41741 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41742 = PLANE('',#41743); +#41743 = AXIS2_PLACEMENT_3D('',#41744,#41745,#41746); +#41744 = CARTESIAN_POINT('',(-6.765,-1.147779969319,1.787644580805E-02) + ); +#41745 = DIRECTION('',(-2.28757676783E-16,4.440061362072E-02, + -0.999013806466)); +#41746 = DIRECTION('',(-1.016700785703E-17,-0.999013806466, + -4.440061362072E-02)); +#41747 = ADVANCED_FACE('',(#41748),#41773,.T.); +#41748 = FACE_BOUND('',#41749,.T.); +#41749 = EDGE_LOOP('',(#41750,#41758,#41759,#41767)); +#41750 = ORIENTED_EDGE('',*,*,#41751,.T.); +#41751 = EDGE_CURVE('',#41752,#41721,#41754,.T.); +#41752 = VERTEX_POINT('',#41753); +#41753 = CARTESIAN_POINT('',(-6.765,-1.6,5.E-02)); +#41754 = LINE('',#41755,#41756); +#41755 = CARTESIAN_POINT('',(-6.765,-1.6,5.E-02)); +#41756 = VECTOR('',#41757,1.); +#41757 = DIRECTION('',(-1.619157848018E-16,0.707106781187, + -0.707106781187)); +#41758 = ORIENTED_EDGE('',*,*,#41737,.T.); +#41759 = ORIENTED_EDGE('',*,*,#41760,.F.); +#41760 = EDGE_CURVE('',#41761,#41730,#41763,.T.); +#41761 = VERTEX_POINT('',#41762); +#41762 = CARTESIAN_POINT('',(-6.615,-1.6,5.E-02)); +#41763 = LINE('',#41764,#41765); +#41764 = CARTESIAN_POINT('',(-6.615,-1.6,5.E-02)); +#41765 = VECTOR('',#41766,1.); +#41766 = DIRECTION('',(-1.619157848018E-16,0.707106781187, + -0.707106781187)); +#41767 = ORIENTED_EDGE('',*,*,#41768,.F.); +#41768 = EDGE_CURVE('',#41752,#41761,#41769,.T.); +#41769 = LINE('',#41770,#41771); +#41770 = CARTESIAN_POINT('',(-6.765,-1.6,5.E-02)); +#41771 = VECTOR('',#41772,1.); +#41772 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41773 = PLANE('',#41774); +#41774 = AXIS2_PLACEMENT_3D('',#41775,#41776,#41777); +#41775 = CARTESIAN_POINT('',(-6.765,-1.55,8.881784197001E-16)); +#41776 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781187)); +#41777 = DIRECTION('',(1.619157848018E-16,-0.707106781187,0.707106781187 + )); +#41778 = ADVANCED_FACE('',(#41779),#41804,.T.); +#41779 = FACE_BOUND('',#41780,.T.); +#41780 = EDGE_LOOP('',(#41781,#41789,#41790,#41798)); +#41781 = ORIENTED_EDGE('',*,*,#41782,.F.); +#41782 = EDGE_CURVE('',#41752,#41783,#41785,.T.); +#41783 = VERTEX_POINT('',#41784); +#41784 = CARTESIAN_POINT('',(-6.765,-1.6,0.12)); +#41785 = LINE('',#41786,#41787); +#41786 = CARTESIAN_POINT('',(-6.765,-1.6,5.E-02)); +#41787 = VECTOR('',#41788,1.); +#41788 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#41789 = ORIENTED_EDGE('',*,*,#41768,.T.); +#41790 = ORIENTED_EDGE('',*,*,#41791,.T.); +#41791 = EDGE_CURVE('',#41761,#41792,#41794,.T.); +#41792 = VERTEX_POINT('',#41793); +#41793 = CARTESIAN_POINT('',(-6.615,-1.6,0.12)); +#41794 = LINE('',#41795,#41796); +#41795 = CARTESIAN_POINT('',(-6.615,-1.6,5.E-02)); +#41796 = VECTOR('',#41797,1.); +#41797 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#41798 = ORIENTED_EDGE('',*,*,#41799,.T.); +#41799 = EDGE_CURVE('',#41792,#41783,#41800,.T.); +#41800 = LINE('',#41801,#41802); +#41801 = CARTESIAN_POINT('',(-6.765,-1.6,0.12)); +#41802 = VECTOR('',#41803,1.); +#41803 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41804 = PLANE('',#41805); +#41805 = AXIS2_PLACEMENT_3D('',#41806,#41807,#41808); +#41806 = CARTESIAN_POINT('',(-6.765,-1.6,5.E-02)); +#41807 = DIRECTION('',(-5.243344273594E-32,-1.,1.200639317332E-47)); +#41808 = DIRECTION('',(2.289834988289E-16,-2.917038411497E-62,1.)); +#41809 = ADVANCED_FACE('',(#41810),#41837,.F.); +#41810 = FACE_BOUND('',#41811,.F.); +#41811 = EDGE_LOOP('',(#41812,#41822,#41829,#41830)); +#41812 = ORIENTED_EDGE('',*,*,#41813,.T.); +#41813 = EDGE_CURVE('',#41814,#41816,#41818,.T.); +#41814 = VERTEX_POINT('',#41815); +#41815 = CARTESIAN_POINT('',(-6.765,-1.65,0.17)); +#41816 = VERTEX_POINT('',#41817); +#41817 = CARTESIAN_POINT('',(-6.615,-1.65,0.17)); +#41818 = LINE('',#41819,#41820); +#41819 = CARTESIAN_POINT('',(-6.765,-1.65,0.17)); +#41820 = VECTOR('',#41821,1.); +#41821 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41822 = ORIENTED_EDGE('',*,*,#41823,.T.); +#41823 = EDGE_CURVE('',#41816,#41792,#41824,.T.); +#41824 = CIRCLE('',#41825,5.E-02); +#41825 = AXIS2_PLACEMENT_3D('',#41826,#41827,#41828); +#41826 = CARTESIAN_POINT('',(-6.615,-1.65,0.12)); +#41827 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41828 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41829 = ORIENTED_EDGE('',*,*,#41799,.T.); +#41830 = ORIENTED_EDGE('',*,*,#41831,.F.); +#41831 = EDGE_CURVE('',#41814,#41783,#41832,.T.); +#41832 = CIRCLE('',#41833,5.E-02); +#41833 = AXIS2_PLACEMENT_3D('',#41834,#41835,#41836); +#41834 = CARTESIAN_POINT('',(-6.765,-1.65,0.12)); +#41835 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41836 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41837 = CYLINDRICAL_SURFACE('',#41838,5.E-02); +#41838 = AXIS2_PLACEMENT_3D('',#41839,#41840,#41841); +#41839 = CARTESIAN_POINT('',(-6.765,-1.65,0.12)); +#41840 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41841 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41842 = ADVANCED_FACE('',(#41843),#41868,.T.); +#41843 = FACE_BOUND('',#41844,.T.); +#41844 = EDGE_LOOP('',(#41845,#41853,#41854,#41862)); +#41845 = ORIENTED_EDGE('',*,*,#41846,.F.); +#41846 = EDGE_CURVE('',#41814,#41847,#41849,.T.); +#41847 = VERTEX_POINT('',#41848); +#41848 = CARTESIAN_POINT('',(-6.765,-1.825,0.17)); +#41849 = LINE('',#41850,#41851); +#41850 = CARTESIAN_POINT('',(-6.765,-1.65,0.17)); +#41851 = VECTOR('',#41852,1.); +#41852 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41853 = ORIENTED_EDGE('',*,*,#41813,.T.); +#41854 = ORIENTED_EDGE('',*,*,#41855,.T.); +#41855 = EDGE_CURVE('',#41816,#41856,#41858,.T.); +#41856 = VERTEX_POINT('',#41857); +#41857 = CARTESIAN_POINT('',(-6.615,-1.825,0.17)); +#41858 = LINE('',#41859,#41860); +#41859 = CARTESIAN_POINT('',(-6.615,-1.65,0.17)); +#41860 = VECTOR('',#41861,1.); +#41861 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41862 = ORIENTED_EDGE('',*,*,#41863,.F.); +#41863 = EDGE_CURVE('',#41847,#41856,#41864,.T.); +#41864 = LINE('',#41865,#41866); +#41865 = CARTESIAN_POINT('',(-6.765,-1.825,0.17)); +#41866 = VECTOR('',#41867,1.); +#41867 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41868 = PLANE('',#41869); +#41869 = AXIS2_PLACEMENT_3D('',#41870,#41871,#41872); +#41870 = CARTESIAN_POINT('',(-6.765,-1.65,0.17)); +#41871 = DIRECTION('',(-2.289834988289E-16,1.200639317332E-47,-1.)); +#41872 = DIRECTION('',(-5.243344273594E-32,-1.,2.917038411497E-62)); +#41873 = ADVANCED_FACE('',(#41874),#41899,.T.); +#41874 = FACE_BOUND('',#41875,.T.); +#41875 = EDGE_LOOP('',(#41876,#41884,#41885,#41893)); +#41876 = ORIENTED_EDGE('',*,*,#41877,.T.); +#41877 = EDGE_CURVE('',#41878,#41847,#41880,.T.); +#41878 = VERTEX_POINT('',#41879); +#41879 = CARTESIAN_POINT('',(-6.765,-1.825,0.37)); +#41880 = LINE('',#41881,#41882); +#41881 = CARTESIAN_POINT('',(-6.765,-1.825,0.37)); +#41882 = VECTOR('',#41883,1.); +#41883 = DIRECTION('',(-2.289834988289E-16,0.,-1.)); +#41884 = ORIENTED_EDGE('',*,*,#41863,.T.); +#41885 = ORIENTED_EDGE('',*,*,#41886,.F.); +#41886 = EDGE_CURVE('',#41887,#41856,#41889,.T.); +#41887 = VERTEX_POINT('',#41888); +#41888 = CARTESIAN_POINT('',(-6.615,-1.825,0.37)); +#41889 = LINE('',#41890,#41891); +#41890 = CARTESIAN_POINT('',(-6.615,-1.825,0.37)); +#41891 = VECTOR('',#41892,1.); +#41892 = DIRECTION('',(-2.289834988289E-16,0.,-1.)); +#41893 = ORIENTED_EDGE('',*,*,#41894,.F.); +#41894 = EDGE_CURVE('',#41878,#41887,#41895,.T.); +#41895 = LINE('',#41896,#41897); +#41896 = CARTESIAN_POINT('',(-6.765,-1.825,0.37)); +#41897 = VECTOR('',#41898,1.); +#41898 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41899 = PLANE('',#41900); +#41900 = AXIS2_PLACEMENT_3D('',#41901,#41902,#41903); +#41901 = CARTESIAN_POINT('',(-6.765,-1.825,0.17)); +#41902 = DIRECTION('',(-5.243344273594E-32,-1.,1.200639317332E-47)); +#41903 = DIRECTION('',(2.289834988289E-16,-2.917038411497E-62,1.)); +#41904 = ADVANCED_FACE('',(#41905),#41930,.T.); +#41905 = FACE_BOUND('',#41906,.T.); +#41906 = EDGE_LOOP('',(#41907,#41915,#41916,#41924)); +#41907 = ORIENTED_EDGE('',*,*,#41908,.T.); +#41908 = EDGE_CURVE('',#41909,#41878,#41911,.T.); +#41909 = VERTEX_POINT('',#41910); +#41910 = CARTESIAN_POINT('',(-6.765,-1.8,0.37)); +#41911 = LINE('',#41912,#41913); +#41912 = CARTESIAN_POINT('',(-6.765,-1.8,0.37)); +#41913 = VECTOR('',#41914,1.); +#41914 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41915 = ORIENTED_EDGE('',*,*,#41894,.T.); +#41916 = ORIENTED_EDGE('',*,*,#41917,.F.); +#41917 = EDGE_CURVE('',#41918,#41887,#41920,.T.); +#41918 = VERTEX_POINT('',#41919); +#41919 = CARTESIAN_POINT('',(-6.615,-1.8,0.37)); +#41920 = LINE('',#41921,#41922); +#41921 = CARTESIAN_POINT('',(-6.615,-1.8,0.37)); +#41922 = VECTOR('',#41923,1.); +#41923 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41924 = ORIENTED_EDGE('',*,*,#41925,.F.); +#41925 = EDGE_CURVE('',#41909,#41918,#41926,.T.); +#41926 = LINE('',#41927,#41928); +#41927 = CARTESIAN_POINT('',(-6.765,-1.8,0.37)); +#41928 = VECTOR('',#41929,1.); +#41929 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#41930 = PLANE('',#41931); +#41931 = AXIS2_PLACEMENT_3D('',#41932,#41933,#41934); +#41932 = CARTESIAN_POINT('',(-6.765,-1.825,0.37)); +#41933 = DIRECTION('',(2.289834988289E-16,-1.200639317332E-47,1.)); +#41934 = DIRECTION('',(5.243344273594E-32,1.,-2.917038411497E-62)); +#41935 = ADVANCED_FACE('',(#41936),#41963,.F.); +#41936 = FACE_BOUND('',#41937,.F.); +#41937 = EDGE_LOOP('',(#41938,#41948,#41955,#41956)); +#41938 = ORIENTED_EDGE('',*,*,#41939,.F.); +#41939 = EDGE_CURVE('',#41940,#41942,#41944,.T.); +#41940 = VERTEX_POINT('',#41941); +#41941 = CARTESIAN_POINT('',(-6.615,-1.75,0.42)); +#41942 = VERTEX_POINT('',#41943); +#41943 = CARTESIAN_POINT('',(-6.765,-1.75,0.42)); +#41944 = LINE('',#41945,#41946); +#41945 = CARTESIAN_POINT('',(-6.765,-1.75,0.42)); +#41946 = VECTOR('',#41947,1.); +#41947 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41948 = ORIENTED_EDGE('',*,*,#41949,.T.); +#41949 = EDGE_CURVE('',#41940,#41918,#41950,.T.); +#41950 = CIRCLE('',#41951,5.E-02); +#41951 = AXIS2_PLACEMENT_3D('',#41952,#41953,#41954); +#41952 = CARTESIAN_POINT('',(-6.615,-1.8,0.42)); +#41953 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41954 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41955 = ORIENTED_EDGE('',*,*,#41925,.F.); +#41956 = ORIENTED_EDGE('',*,*,#41957,.F.); +#41957 = EDGE_CURVE('',#41942,#41909,#41958,.T.); +#41958 = CIRCLE('',#41959,5.E-02); +#41959 = AXIS2_PLACEMENT_3D('',#41960,#41961,#41962); +#41960 = CARTESIAN_POINT('',(-6.765,-1.8,0.42)); +#41961 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41962 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41963 = CYLINDRICAL_SURFACE('',#41964,5.E-02); +#41964 = AXIS2_PLACEMENT_3D('',#41965,#41966,#41967); +#41965 = CARTESIAN_POINT('',(-6.765,-1.8,0.42)); +#41966 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41967 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#41968 = ADVANCED_FACE('',(#41969),#41994,.T.); +#41969 = FACE_BOUND('',#41970,.T.); +#41970 = EDGE_LOOP('',(#41971,#41979,#41980,#41988)); +#41971 = ORIENTED_EDGE('',*,*,#41972,.F.); +#41972 = EDGE_CURVE('',#41942,#41973,#41975,.T.); +#41973 = VERTEX_POINT('',#41974); +#41974 = CARTESIAN_POINT('',(-6.765,-1.75,0.47)); +#41975 = LINE('',#41976,#41977); +#41976 = CARTESIAN_POINT('',(-6.765,-1.75,0.42)); +#41977 = VECTOR('',#41978,1.); +#41978 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#41979 = ORIENTED_EDGE('',*,*,#41939,.F.); +#41980 = ORIENTED_EDGE('',*,*,#41981,.T.); +#41981 = EDGE_CURVE('',#41940,#41982,#41984,.T.); +#41982 = VERTEX_POINT('',#41983); +#41983 = CARTESIAN_POINT('',(-6.615,-1.75,0.47)); +#41984 = LINE('',#41985,#41986); +#41985 = CARTESIAN_POINT('',(-6.615,-1.75,0.42)); +#41986 = VECTOR('',#41987,1.); +#41987 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#41988 = ORIENTED_EDGE('',*,*,#41989,.T.); +#41989 = EDGE_CURVE('',#41982,#41973,#41990,.T.); +#41990 = LINE('',#41991,#41992); +#41991 = CARTESIAN_POINT('',(-6.765,-1.75,0.47)); +#41992 = VECTOR('',#41993,1.); +#41993 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#41994 = PLANE('',#41995); +#41995 = AXIS2_PLACEMENT_3D('',#41996,#41997,#41998); +#41996 = CARTESIAN_POINT('',(-6.765,-1.75,0.42)); +#41997 = DIRECTION('',(-5.243344273594E-32,-1.,1.200639317332E-47)); +#41998 = DIRECTION('',(2.289834988289E-16,-2.917038411497E-62,1.)); +#41999 = ADVANCED_FACE('',(#42000),#42027,.F.); +#42000 = FACE_BOUND('',#42001,.F.); +#42001 = EDGE_LOOP('',(#42002,#42012,#42019,#42020)); +#42002 = ORIENTED_EDGE('',*,*,#42003,.T.); +#42003 = EDGE_CURVE('',#42004,#42006,#42008,.T.); +#42004 = VERTEX_POINT('',#42005); +#42005 = CARTESIAN_POINT('',(-6.765,-1.8,0.52)); +#42006 = VERTEX_POINT('',#42007); +#42007 = CARTESIAN_POINT('',(-6.615,-1.8,0.52)); +#42008 = LINE('',#42009,#42010); +#42009 = CARTESIAN_POINT('',(-6.765,-1.8,0.52)); +#42010 = VECTOR('',#42011,1.); +#42011 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42012 = ORIENTED_EDGE('',*,*,#42013,.T.); +#42013 = EDGE_CURVE('',#42006,#41982,#42014,.T.); +#42014 = CIRCLE('',#42015,5.E-02); +#42015 = AXIS2_PLACEMENT_3D('',#42016,#42017,#42018); +#42016 = CARTESIAN_POINT('',(-6.615,-1.8,0.47)); +#42017 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42018 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#42019 = ORIENTED_EDGE('',*,*,#41989,.T.); +#42020 = ORIENTED_EDGE('',*,*,#42021,.F.); +#42021 = EDGE_CURVE('',#42004,#41973,#42022,.T.); +#42022 = CIRCLE('',#42023,5.E-02); +#42023 = AXIS2_PLACEMENT_3D('',#42024,#42025,#42026); +#42024 = CARTESIAN_POINT('',(-6.765,-1.8,0.47)); +#42025 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42026 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#42027 = CYLINDRICAL_SURFACE('',#42028,5.E-02); +#42028 = AXIS2_PLACEMENT_3D('',#42029,#42030,#42031); +#42029 = CARTESIAN_POINT('',(-6.765,-1.8,0.47)); +#42030 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42031 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#42032 = ADVANCED_FACE('',(#42033),#42058,.T.); +#42033 = FACE_BOUND('',#42034,.T.); +#42034 = EDGE_LOOP('',(#42035,#42043,#42044,#42052)); +#42035 = ORIENTED_EDGE('',*,*,#42036,.T.); +#42036 = EDGE_CURVE('',#42037,#42004,#42039,.T.); +#42037 = VERTEX_POINT('',#42038); +#42038 = CARTESIAN_POINT('',(-6.765,-1.9,0.52)); +#42039 = LINE('',#42040,#42041); +#42040 = CARTESIAN_POINT('',(-6.765,-1.9,0.52)); +#42041 = VECTOR('',#42042,1.); +#42042 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#42043 = ORIENTED_EDGE('',*,*,#42003,.T.); +#42044 = ORIENTED_EDGE('',*,*,#42045,.F.); +#42045 = EDGE_CURVE('',#42046,#42006,#42048,.T.); +#42046 = VERTEX_POINT('',#42047); +#42047 = CARTESIAN_POINT('',(-6.615,-1.9,0.52)); +#42048 = LINE('',#42049,#42050); +#42049 = CARTESIAN_POINT('',(-6.615,-1.9,0.52)); +#42050 = VECTOR('',#42051,1.); +#42051 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#42052 = ORIENTED_EDGE('',*,*,#42053,.F.); +#42053 = EDGE_CURVE('',#42037,#42046,#42054,.T.); +#42054 = LINE('',#42055,#42056); +#42055 = CARTESIAN_POINT('',(-6.765,-1.9,0.52)); +#42056 = VECTOR('',#42057,1.); +#42057 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42058 = PLANE('',#42059); +#42059 = AXIS2_PLACEMENT_3D('',#42060,#42061,#42062); +#42060 = CARTESIAN_POINT('',(-6.765,-1.8,0.52)); +#42061 = DIRECTION('',(-2.289834988289E-16,1.200639317332E-47,-1.)); +#42062 = DIRECTION('',(-5.243344273594E-32,-1.,2.917038411497E-62)); +#42063 = ADVANCED_FACE('',(#42064),#42089,.T.); +#42064 = FACE_BOUND('',#42065,.T.); +#42065 = EDGE_LOOP('',(#42066,#42074,#42075,#42083)); +#42066 = ORIENTED_EDGE('',*,*,#42067,.F.); +#42067 = EDGE_CURVE('',#42037,#42068,#42070,.T.); +#42068 = VERTEX_POINT('',#42069); +#42069 = CARTESIAN_POINT('',(-6.765,-1.9,0.82)); +#42070 = LINE('',#42071,#42072); +#42071 = CARTESIAN_POINT('',(-6.765,-1.9,0.52)); +#42072 = VECTOR('',#42073,1.); +#42073 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#42074 = ORIENTED_EDGE('',*,*,#42053,.T.); +#42075 = ORIENTED_EDGE('',*,*,#42076,.T.); +#42076 = EDGE_CURVE('',#42046,#42077,#42079,.T.); +#42077 = VERTEX_POINT('',#42078); +#42078 = CARTESIAN_POINT('',(-6.615,-1.9,0.82)); +#42079 = LINE('',#42080,#42081); +#42080 = CARTESIAN_POINT('',(-6.615,-1.9,0.52)); +#42081 = VECTOR('',#42082,1.); +#42082 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#42083 = ORIENTED_EDGE('',*,*,#42084,.F.); +#42084 = EDGE_CURVE('',#42068,#42077,#42085,.T.); +#42085 = LINE('',#42086,#42087); +#42086 = CARTESIAN_POINT('',(-6.765,-1.9,0.82)); +#42087 = VECTOR('',#42088,1.); +#42088 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42089 = PLANE('',#42090); +#42090 = AXIS2_PLACEMENT_3D('',#42091,#42092,#42093); +#42091 = CARTESIAN_POINT('',(-6.765,-1.9,0.52)); +#42092 = DIRECTION('',(-5.243344273594E-32,-1.,1.200639317332E-47)); +#42093 = DIRECTION('',(2.289834988289E-16,-2.917038411497E-62,1.)); +#42094 = ADVANCED_FACE('',(#42095),#42120,.T.); +#42095 = FACE_BOUND('',#42096,.T.); +#42096 = EDGE_LOOP('',(#42097,#42105,#42113,#42119)); +#42097 = ORIENTED_EDGE('',*,*,#42098,.T.); +#42098 = EDGE_CURVE('',#41679,#42099,#42101,.T.); +#42099 = VERTEX_POINT('',#42100); +#42100 = CARTESIAN_POINT('',(-6.765,-1.1,0.46)); +#42101 = LINE('',#42102,#42103); +#42102 = CARTESIAN_POINT('',(-6.765,-1.1,0.841614)); +#42103 = VECTOR('',#42104,1.); +#42104 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#42105 = ORIENTED_EDGE('',*,*,#42106,.T.); +#42106 = EDGE_CURVE('',#42099,#42107,#42109,.T.); +#42107 = VERTEX_POINT('',#42108); +#42108 = CARTESIAN_POINT('',(-6.615,-1.1,0.46)); +#42109 = LINE('',#42110,#42111); +#42110 = CARTESIAN_POINT('',(-6.765,-1.1,0.46)); +#42111 = VECTOR('',#42112,1.); +#42112 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42113 = ORIENTED_EDGE('',*,*,#42114,.F.); +#42114 = EDGE_CURVE('',#41690,#42107,#42115,.T.); +#42115 = LINE('',#42116,#42117); +#42116 = CARTESIAN_POINT('',(-6.615,-1.1,0.841614)); +#42117 = VECTOR('',#42118,1.); +#42118 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#42119 = ORIENTED_EDGE('',*,*,#41689,.T.); +#42120 = PLANE('',#42121); +#42121 = AXIS2_PLACEMENT_3D('',#42122,#42123,#42124); +#42122 = CARTESIAN_POINT('',(-6.765,-1.1,0.46)); +#42123 = DIRECTION('',(5.243344273594E-32,1.,-1.200639317332E-47)); +#42124 = DIRECTION('',(-2.289834988289E-16,2.917038411497E-62,-1.)); +#42125 = ADVANCED_FACE('',(#42126),#42142,.T.); +#42126 = FACE_BOUND('',#42127,.T.); +#42127 = EDGE_LOOP('',(#42128,#42134,#42135,#42141)); +#42128 = ORIENTED_EDGE('',*,*,#42129,.T.); +#42129 = EDGE_CURVE('',#41646,#42068,#42130,.T.); +#42130 = LINE('',#42131,#42132); +#42131 = CARTESIAN_POINT('',(-6.765,0.694863,0.82)); +#42132 = VECTOR('',#42133,1.); +#42133 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#42134 = ORIENTED_EDGE('',*,*,#42084,.T.); +#42135 = ORIENTED_EDGE('',*,*,#42136,.F.); +#42136 = EDGE_CURVE('',#41630,#42077,#42137,.T.); +#42137 = LINE('',#42138,#42139); +#42138 = CARTESIAN_POINT('',(-6.615,0.694863,0.82)); +#42139 = VECTOR('',#42140,1.); +#42140 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#42141 = ORIENTED_EDGE('',*,*,#41653,.T.); +#42142 = PLANE('',#42143); +#42143 = AXIS2_PLACEMENT_3D('',#42144,#42145,#42146); +#42144 = CARTESIAN_POINT('',(-6.765,-1.9,0.82)); +#42145 = DIRECTION('',(2.289834988289E-16,-1.200639317332E-47,1.)); +#42146 = DIRECTION('',(5.243344273594E-32,1.,-2.917038411497E-62)); +#42147 = ADVANCED_FACE('',(#42148),#42181,.T.); +#42148 = FACE_BOUND('',#42149,.T.); +#42149 = EDGE_LOOP('',(#42150,#42151,#42152,#42153,#42154,#42155,#42156, + #42157,#42158,#42159,#42160,#42161,#42162,#42163,#42164,#42173, + #42179,#42180)); +#42150 = ORIENTED_EDGE('',*,*,#42076,.F.); +#42151 = ORIENTED_EDGE('',*,*,#42045,.T.); +#42152 = ORIENTED_EDGE('',*,*,#42013,.T.); +#42153 = ORIENTED_EDGE('',*,*,#41981,.F.); +#42154 = ORIENTED_EDGE('',*,*,#41949,.T.); +#42155 = ORIENTED_EDGE('',*,*,#41917,.T.); +#42156 = ORIENTED_EDGE('',*,*,#41886,.T.); +#42157 = ORIENTED_EDGE('',*,*,#41855,.F.); +#42158 = ORIENTED_EDGE('',*,*,#41823,.T.); +#42159 = ORIENTED_EDGE('',*,*,#41791,.F.); +#42160 = ORIENTED_EDGE('',*,*,#41760,.T.); +#42161 = ORIENTED_EDGE('',*,*,#41729,.T.); +#42162 = ORIENTED_EDGE('',*,*,#41697,.F.); +#42163 = ORIENTED_EDGE('',*,*,#42114,.T.); +#42164 = ORIENTED_EDGE('',*,*,#42165,.T.); +#42165 = EDGE_CURVE('',#42107,#42166,#42168,.T.); +#42166 = VERTEX_POINT('',#42167); +#42167 = CARTESIAN_POINT('',(-6.615,-1.05,0.51)); +#42168 = CIRCLE('',#42169,5.E-02); +#42169 = AXIS2_PLACEMENT_3D('',#42170,#42171,#42172); +#42170 = CARTESIAN_POINT('',(-6.615,-1.05,0.46)); +#42171 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42172 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#42173 = ORIENTED_EDGE('',*,*,#42174,.T.); +#42174 = EDGE_CURVE('',#42166,#41628,#42175,.T.); +#42175 = LINE('',#42176,#42177); +#42176 = CARTESIAN_POINT('',(-6.615,0.694863,0.51)); +#42177 = VECTOR('',#42178,1.); +#42178 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#42179 = ORIENTED_EDGE('',*,*,#41627,.T.); +#42180 = ORIENTED_EDGE('',*,*,#42136,.T.); +#42181 = PLANE('',#42182); +#42182 = AXIS2_PLACEMENT_3D('',#42183,#42184,#42185); +#42183 = CARTESIAN_POINT('',(-6.615,-1.464196,0.375201)); +#42184 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42185 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#42186 = ADVANCED_FACE('',(#42187),#42220,.F.); +#42187 = FACE_BOUND('',#42188,.T.); +#42188 = EDGE_LOOP('',(#42189,#42190,#42191,#42192,#42193,#42194,#42195, + #42196,#42197,#42198,#42199,#42200,#42201,#42202,#42203,#42204, + #42205,#42213)); +#42189 = ORIENTED_EDGE('',*,*,#42098,.F.); +#42190 = ORIENTED_EDGE('',*,*,#41678,.T.); +#42191 = ORIENTED_EDGE('',*,*,#41720,.F.); +#42192 = ORIENTED_EDGE('',*,*,#41751,.F.); +#42193 = ORIENTED_EDGE('',*,*,#41782,.T.); +#42194 = ORIENTED_EDGE('',*,*,#41831,.F.); +#42195 = ORIENTED_EDGE('',*,*,#41846,.T.); +#42196 = ORIENTED_EDGE('',*,*,#41877,.F.); +#42197 = ORIENTED_EDGE('',*,*,#41908,.F.); +#42198 = ORIENTED_EDGE('',*,*,#41957,.F.); +#42199 = ORIENTED_EDGE('',*,*,#41972,.T.); +#42200 = ORIENTED_EDGE('',*,*,#42021,.F.); +#42201 = ORIENTED_EDGE('',*,*,#42036,.F.); +#42202 = ORIENTED_EDGE('',*,*,#42067,.T.); +#42203 = ORIENTED_EDGE('',*,*,#42129,.F.); +#42204 = ORIENTED_EDGE('',*,*,#41645,.F.); +#42205 = ORIENTED_EDGE('',*,*,#42206,.F.); +#42206 = EDGE_CURVE('',#42207,#41638,#42209,.T.); +#42207 = VERTEX_POINT('',#42208); +#42208 = CARTESIAN_POINT('',(-6.765,-1.05,0.51)); +#42209 = LINE('',#42210,#42211); +#42210 = CARTESIAN_POINT('',(-6.765,0.694863,0.51)); +#42211 = VECTOR('',#42212,1.); +#42212 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#42213 = ORIENTED_EDGE('',*,*,#42214,.F.); +#42214 = EDGE_CURVE('',#42099,#42207,#42215,.T.); +#42215 = CIRCLE('',#42216,5.E-02); +#42216 = AXIS2_PLACEMENT_3D('',#42217,#42218,#42219); +#42217 = CARTESIAN_POINT('',(-6.765,-1.05,0.46)); +#42218 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42219 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#42220 = PLANE('',#42221); +#42221 = AXIS2_PLACEMENT_3D('',#42222,#42223,#42224); +#42222 = CARTESIAN_POINT('',(-6.765,-1.464196,0.375201)); +#42223 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42224 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#42225 = ADVANCED_FACE('',(#42226),#42237,.F.); +#42226 = FACE_BOUND('',#42227,.T.); +#42227 = EDGE_LOOP('',(#42228,#42229,#42230,#42231)); +#42228 = ORIENTED_EDGE('',*,*,#42206,.T.); +#42229 = ORIENTED_EDGE('',*,*,#41637,.T.); +#42230 = ORIENTED_EDGE('',*,*,#42174,.F.); +#42231 = ORIENTED_EDGE('',*,*,#42232,.T.); +#42232 = EDGE_CURVE('',#42166,#42207,#42233,.T.); +#42233 = LINE('',#42234,#42235); +#42234 = CARTESIAN_POINT('',(-6.61494,-1.05,0.51)); +#42235 = VECTOR('',#42236,1.); +#42236 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42237 = PLANE('',#42238); +#42238 = AXIS2_PLACEMENT_3D('',#42239,#42240,#42241); +#42239 = CARTESIAN_POINT('',(-6.765,-1.1,0.51)); +#42240 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#42241 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#42242 = ADVANCED_FACE('',(#42243),#42249,.F.); +#42243 = FACE_BOUND('',#42244,.F.); +#42244 = EDGE_LOOP('',(#42245,#42246,#42247,#42248)); +#42245 = ORIENTED_EDGE('',*,*,#42232,.T.); +#42246 = ORIENTED_EDGE('',*,*,#42214,.F.); +#42247 = ORIENTED_EDGE('',*,*,#42106,.T.); +#42248 = ORIENTED_EDGE('',*,*,#42165,.T.); +#42249 = CYLINDRICAL_SURFACE('',#42250,5.E-02); +#42250 = AXIS2_PLACEMENT_3D('',#42251,#42252,#42253); +#42251 = CARTESIAN_POINT('',(-6.765,-1.05,0.46)); +#42252 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42253 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#42254 = ADVANCED_FACE('',(#42255),#42263,.F.); +#42255 = FACE_BOUND('',#42256,.T.); +#42256 = EDGE_LOOP('',(#42257,#42258,#42259,#42260,#42261,#42262)); +#42257 = ORIENTED_EDGE('',*,*,#39912,.T.); +#42258 = ORIENTED_EDGE('',*,*,#39608,.F.); +#42259 = ORIENTED_EDGE('',*,*,#41278,.T.); +#42260 = ORIENTED_EDGE('',*,*,#41208,.T.); +#42261 = ORIENTED_EDGE('',*,*,#41662,.F.); +#42262 = ORIENTED_EDGE('',*,*,#40774,.T.); +#42263 = PLANE('',#42264); +#42264 = AXIS2_PLACEMENT_3D('',#42265,#42266,#42267); +#42265 = CARTESIAN_POINT('',(-7.,0.694863,0.841614)); +#42266 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42267 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#42268 = ADVANCED_FACE('',(#42269),#42294,.T.); +#42269 = FACE_BOUND('',#42270,.T.); +#42270 = EDGE_LOOP('',(#42271,#42272,#42280,#42288)); +#42271 = ORIENTED_EDGE('',*,*,#39889,.F.); +#42272 = ORIENTED_EDGE('',*,*,#42273,.F.); +#42273 = EDGE_CURVE('',#42274,#39882,#42276,.T.); +#42274 = VERTEX_POINT('',#42275); +#42275 = CARTESIAN_POINT('',(-5.9,0.92,8.E-02)); +#42276 = LINE('',#42277,#42278); +#42277 = CARTESIAN_POINT('',(-5.9,0.694863,8.E-02)); +#42278 = VECTOR('',#42279,1.); +#42279 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#42280 = ORIENTED_EDGE('',*,*,#42281,.F.); +#42281 = EDGE_CURVE('',#42282,#42274,#42284,.T.); +#42282 = VERTEX_POINT('',#42283); +#42283 = CARTESIAN_POINT('',(-5.95,0.7,3.E-02)); +#42284 = LINE('',#42285,#42286); +#42285 = CARTESIAN_POINT('',(-5.9511675,0.694863,2.88325E-02)); +#42286 = VECTOR('',#42287,1.); +#42287 = DIRECTION('',(0.216371161204,0.952033109297,0.216371161204)); +#42288 = ORIENTED_EDGE('',*,*,#42289,.F.); +#42289 = EDGE_CURVE('',#39890,#42282,#42290,.T.); +#42290 = LINE('',#42291,#42292); +#42291 = CARTESIAN_POINT('',(-5.95,0.694863,3.E-02)); +#42292 = VECTOR('',#42293,1.); +#42293 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42294 = PLANE('',#42295); +#42295 = AXIS2_PLACEMENT_3D('',#42296,#42297,#42298); +#42296 = CARTESIAN_POINT('',(-5.925,0.85,5.5E-02)); +#42297 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#42298 = DIRECTION('',(0.707106781187,1.619157848018E-16,0.707106781187) + ); +#42299 = ADVANCED_FACE('',(#42300),#42325,.T.); +#42300 = FACE_BOUND('',#42301,.T.); +#42301 = EDGE_LOOP('',(#42302,#42310,#42318,#42324)); +#42302 = ORIENTED_EDGE('',*,*,#42303,.F.); +#42303 = EDGE_CURVE('',#42304,#42274,#42306,.T.); +#42304 = VERTEX_POINT('',#42305); +#42305 = CARTESIAN_POINT('',(-5.6,0.92,8.E-02)); +#42306 = LINE('',#42307,#42308); +#42307 = CARTESIAN_POINT('',(-21.5,0.92,8.E-02)); +#42308 = VECTOR('',#42309,1.); +#42309 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42310 = ORIENTED_EDGE('',*,*,#42311,.F.); +#42311 = EDGE_CURVE('',#42312,#42304,#42314,.T.); +#42312 = VERTEX_POINT('',#42313); +#42313 = CARTESIAN_POINT('',(-5.55,0.7,3.E-02)); +#42314 = LINE('',#42315,#42316); +#42315 = CARTESIAN_POINT('',(-5.5488325,0.694863,2.88325E-02)); +#42316 = VECTOR('',#42317,1.); +#42317 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#42318 = ORIENTED_EDGE('',*,*,#42319,.T.); +#42319 = EDGE_CURVE('',#42312,#42282,#42320,.T.); +#42320 = LINE('',#42321,#42322); +#42321 = CARTESIAN_POINT('',(10.,0.7,3.E-02)); +#42322 = VECTOR('',#42323,1.); +#42323 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42324 = ORIENTED_EDGE('',*,*,#42281,.T.); +#42325 = PLANE('',#42326); +#42326 = AXIS2_PLACEMENT_3D('',#42327,#42328,#42329); +#42327 = CARTESIAN_POINT('',(-5.8375,0.92,8.E-02)); +#42328 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#42329 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#42330 = ADVANCED_FACE('',(#42331),#42347,.T.); +#42331 = FACE_BOUND('',#42332,.T.); +#42332 = EDGE_LOOP('',(#42333,#42339,#42340,#42346)); +#42333 = ORIENTED_EDGE('',*,*,#42334,.F.); +#42334 = EDGE_CURVE('',#40191,#42304,#42335,.T.); +#42335 = LINE('',#42336,#42337); +#42336 = CARTESIAN_POINT('',(-5.6,0.694863,8.E-02)); +#42337 = VECTOR('',#42338,1.); +#42338 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#42339 = ORIENTED_EDGE('',*,*,#40190,.F.); +#42340 = ORIENTED_EDGE('',*,*,#42341,.F.); +#42341 = EDGE_CURVE('',#42312,#40183,#42342,.T.); +#42342 = LINE('',#42343,#42344); +#42343 = CARTESIAN_POINT('',(-5.55,0.694863,3.E-02)); +#42344 = VECTOR('',#42345,1.); +#42345 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42346 = ORIENTED_EDGE('',*,*,#42311,.T.); +#42347 = PLANE('',#42348); +#42348 = AXIS2_PLACEMENT_3D('',#42349,#42350,#42351); +#42349 = CARTESIAN_POINT('',(-5.575,0.85,5.5E-02)); +#42350 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#42351 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#42352 = ADVANCED_FACE('',(#42353),#42361,.F.); +#42353 = FACE_BOUND('',#42354,.T.); +#42354 = EDGE_LOOP('',(#42355,#42356,#42357,#42358,#42359,#42360)); +#42355 = ORIENTED_EDGE('',*,*,#42303,.T.); +#42356 = ORIENTED_EDGE('',*,*,#42273,.T.); +#42357 = ORIENTED_EDGE('',*,*,#39881,.F.); +#42358 = ORIENTED_EDGE('',*,*,#40045,.F.); +#42359 = ORIENTED_EDGE('',*,*,#40198,.F.); +#42360 = ORIENTED_EDGE('',*,*,#42334,.T.); +#42361 = PLANE('',#42362); +#42362 = AXIS2_PLACEMENT_3D('',#42363,#42364,#42365); +#42363 = CARTESIAN_POINT('',(-5.6625,1.,8.E-02)); +#42364 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#42365 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#42366 = ADVANCED_FACE('',(#42367),#42385,.T.); +#42367 = FACE_BOUND('',#42368,.T.); +#42368 = EDGE_LOOP('',(#42369,#42377,#42383,#42384)); +#42369 = ORIENTED_EDGE('',*,*,#42370,.T.); +#42370 = EDGE_CURVE('',#39514,#42371,#42373,.T.); +#42371 = VERTEX_POINT('',#42372); +#42372 = CARTESIAN_POINT('',(-5.45,0.7,3.E-02)); +#42373 = LINE('',#42374,#42375); +#42374 = CARTESIAN_POINT('',(-3.,0.7,3.E-02)); +#42375 = VECTOR('',#42376,1.); +#42376 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42377 = ORIENTED_EDGE('',*,*,#42378,.F.); +#42378 = EDGE_CURVE('',#40970,#42371,#42379,.T.); +#42379 = LINE('',#42380,#42381); +#42380 = CARTESIAN_POINT('',(-5.4511675,0.694863,2.88325E-02)); +#42381 = VECTOR('',#42382,1.); +#42382 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#42383 = ORIENTED_EDGE('',*,*,#40969,.F.); +#42384 = ORIENTED_EDGE('',*,*,#39521,.F.); +#42385 = PLANE('',#42386); +#42386 = AXIS2_PLACEMENT_3D('',#42387,#42388,#42389); +#42387 = CARTESIAN_POINT('',(-5.3375,0.92,8.E-02)); +#42388 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#42389 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#42390 = ADVANCED_FACE('',(#42391),#42402,.T.); +#42391 = FACE_BOUND('',#42392,.T.); +#42392 = EDGE_LOOP('',(#42393,#42394,#42395,#42401)); +#42393 = ORIENTED_EDGE('',*,*,#40977,.F.); +#42394 = ORIENTED_EDGE('',*,*,#42378,.T.); +#42395 = ORIENTED_EDGE('',*,*,#42396,.F.); +#42396 = EDGE_CURVE('',#40175,#42371,#42397,.T.); +#42397 = LINE('',#42398,#42399); +#42398 = CARTESIAN_POINT('',(-5.45,0.694863,3.E-02)); +#42399 = VECTOR('',#42400,1.); +#42400 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42401 = ORIENTED_EDGE('',*,*,#40174,.F.); +#42402 = PLANE('',#42403); +#42403 = AXIS2_PLACEMENT_3D('',#42404,#42405,#42406); +#42404 = CARTESIAN_POINT('',(-5.425,0.85,5.5E-02)); +#42405 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#42406 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#42407 = ADVANCED_FACE('',(#42408),#43113,.T.); +#42408 = FACE_BOUND('',#42409,.T.); +#42409 = EDGE_LOOP('',(#42410,#42411,#42412,#42413,#42414,#42415,#42416, + #42417,#42418,#42419,#42420,#42426,#42427,#42428,#42436,#42444, + #42452,#42460,#42468,#42476,#42484,#42492,#42500,#42508,#42516, + #42524,#42532,#42540,#42548,#42556,#42564,#42572,#42580,#42588, + #42596,#42604,#42612,#42620,#42628,#42636,#42644,#42652,#42660, + #42668,#42676,#42684,#42692,#42700,#42708,#42716,#42724,#42732, + #42740,#42748,#42756,#42764,#42772,#42780,#42788,#42796,#42804, + #42812,#42820,#42828,#42836,#42844,#42852,#42860,#42868,#42876, + #42884,#42892,#42900,#42908,#42916,#42924,#42932,#42940,#42948, + #42956,#42964,#42972,#42980,#42988,#42996,#43004,#43012,#43018, + #43019,#43027,#43035,#43043,#43051,#43059,#43067,#43075,#43083, + #43091,#43099,#43107)); +#42410 = ORIENTED_EDGE('',*,*,#41059,.T.); +#42411 = ORIENTED_EDGE('',*,*,#40947,.F.); +#42412 = ORIENTED_EDGE('',*,*,#39897,.F.); +#42413 = ORIENTED_EDGE('',*,*,#42289,.T.); +#42414 = ORIENTED_EDGE('',*,*,#42319,.F.); +#42415 = ORIENTED_EDGE('',*,*,#42341,.T.); +#42416 = ORIENTED_EDGE('',*,*,#40182,.T.); +#42417 = ORIENTED_EDGE('',*,*,#42396,.T.); +#42418 = ORIENTED_EDGE('',*,*,#42370,.F.); +#42419 = ORIENTED_EDGE('',*,*,#39513,.T.); +#42420 = ORIENTED_EDGE('',*,*,#42421,.T.); +#42421 = EDGE_CURVE('',#39506,#41503,#42422,.T.); +#42422 = LINE('',#42423,#42424); +#42423 = CARTESIAN_POINT('',(-20.5,1.,3.E-02)); +#42424 = VECTOR('',#42425,1.); +#42425 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42426 = ORIENTED_EDGE('',*,*,#41502,.T.); +#42427 = ORIENTED_EDGE('',*,*,#39680,.F.); +#42428 = ORIENTED_EDGE('',*,*,#42429,.T.); +#42429 = EDGE_CURVE('',#39681,#42430,#42432,.T.); +#42430 = VERTEX_POINT('',#42431); +#42431 = CARTESIAN_POINT('',(-4.55,1.,3.E-02)); +#42432 = LINE('',#42433,#42434); +#42433 = CARTESIAN_POINT('',(-4.55,0.694863,3.E-02)); +#42434 = VECTOR('',#42435,1.); +#42435 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42436 = ORIENTED_EDGE('',*,*,#42437,.T.); +#42437 = EDGE_CURVE('',#42430,#42438,#42440,.T.); +#42438 = VERTEX_POINT('',#42439); +#42439 = CARTESIAN_POINT('',(-4.45,1.,3.E-02)); +#42440 = LINE('',#42441,#42442); +#42441 = CARTESIAN_POINT('',(-20.,1.,3.E-02)); +#42442 = VECTOR('',#42443,1.); +#42443 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42444 = ORIENTED_EDGE('',*,*,#42445,.T.); +#42445 = EDGE_CURVE('',#42438,#42446,#42448,.T.); +#42446 = VERTEX_POINT('',#42447); +#42447 = CARTESIAN_POINT('',(-4.45,0.7,3.E-02)); +#42448 = LINE('',#42449,#42450); +#42449 = CARTESIAN_POINT('',(-4.45,0.694863,3.E-02)); +#42450 = VECTOR('',#42451,1.); +#42451 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42452 = ORIENTED_EDGE('',*,*,#42453,.F.); +#42453 = EDGE_CURVE('',#42454,#42446,#42456,.T.); +#42454 = VERTEX_POINT('',#42455); +#42455 = CARTESIAN_POINT('',(-4.05,0.7,3.E-02)); +#42456 = LINE('',#42457,#42458); +#42457 = CARTESIAN_POINT('',(-1.5,0.7,3.E-02)); +#42458 = VECTOR('',#42459,1.); +#42459 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42460 = ORIENTED_EDGE('',*,*,#42461,.T.); +#42461 = EDGE_CURVE('',#42454,#42462,#42464,.T.); +#42462 = VERTEX_POINT('',#42463); +#42463 = CARTESIAN_POINT('',(-4.05,1.,3.E-02)); +#42464 = LINE('',#42465,#42466); +#42465 = CARTESIAN_POINT('',(-4.05,0.694863,3.E-02)); +#42466 = VECTOR('',#42467,1.); +#42467 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42468 = ORIENTED_EDGE('',*,*,#42469,.T.); +#42469 = EDGE_CURVE('',#42462,#42470,#42472,.T.); +#42470 = VERTEX_POINT('',#42471); +#42471 = CARTESIAN_POINT('',(-3.95,1.,3.E-02)); +#42472 = LINE('',#42473,#42474); +#42473 = CARTESIAN_POINT('',(-19.5,1.,3.E-02)); +#42474 = VECTOR('',#42475,1.); +#42475 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42476 = ORIENTED_EDGE('',*,*,#42477,.T.); +#42477 = EDGE_CURVE('',#42470,#42478,#42480,.T.); +#42478 = VERTEX_POINT('',#42479); +#42479 = CARTESIAN_POINT('',(-3.95,0.7,3.E-02)); +#42480 = LINE('',#42481,#42482); +#42481 = CARTESIAN_POINT('',(-3.95,0.694863,3.E-02)); +#42482 = VECTOR('',#42483,1.); +#42483 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42484 = ORIENTED_EDGE('',*,*,#42485,.F.); +#42485 = EDGE_CURVE('',#42486,#42478,#42488,.T.); +#42486 = VERTEX_POINT('',#42487); +#42487 = CARTESIAN_POINT('',(-3.55,0.7,3.E-02)); +#42488 = LINE('',#42489,#42490); +#42489 = CARTESIAN_POINT('',(-1.5,0.7,3.E-02)); +#42490 = VECTOR('',#42491,1.); +#42491 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42492 = ORIENTED_EDGE('',*,*,#42493,.T.); +#42493 = EDGE_CURVE('',#42486,#42494,#42496,.T.); +#42494 = VERTEX_POINT('',#42495); +#42495 = CARTESIAN_POINT('',(-3.55,1.,3.E-02)); +#42496 = LINE('',#42497,#42498); +#42497 = CARTESIAN_POINT('',(-3.55,0.694863,3.E-02)); +#42498 = VECTOR('',#42499,1.); +#42499 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42500 = ORIENTED_EDGE('',*,*,#42501,.T.); +#42501 = EDGE_CURVE('',#42494,#42502,#42504,.T.); +#42502 = VERTEX_POINT('',#42503); +#42503 = CARTESIAN_POINT('',(-3.45,1.,3.E-02)); +#42504 = LINE('',#42505,#42506); +#42505 = CARTESIAN_POINT('',(-19.,1.,3.E-02)); +#42506 = VECTOR('',#42507,1.); +#42507 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42508 = ORIENTED_EDGE('',*,*,#42509,.T.); +#42509 = EDGE_CURVE('',#42502,#42510,#42512,.T.); +#42510 = VERTEX_POINT('',#42511); +#42511 = CARTESIAN_POINT('',(-3.45,0.7,3.E-02)); +#42512 = LINE('',#42513,#42514); +#42513 = CARTESIAN_POINT('',(-3.45,0.694863,3.E-02)); +#42514 = VECTOR('',#42515,1.); +#42515 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42516 = ORIENTED_EDGE('',*,*,#42517,.F.); +#42517 = EDGE_CURVE('',#42518,#42510,#42520,.T.); +#42518 = VERTEX_POINT('',#42519); +#42519 = CARTESIAN_POINT('',(-3.05,0.7,3.E-02)); +#42520 = LINE('',#42521,#42522); +#42521 = CARTESIAN_POINT('',(-0.5,0.7,3.E-02)); +#42522 = VECTOR('',#42523,1.); +#42523 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42524 = ORIENTED_EDGE('',*,*,#42525,.T.); +#42525 = EDGE_CURVE('',#42518,#42526,#42528,.T.); +#42526 = VERTEX_POINT('',#42527); +#42527 = CARTESIAN_POINT('',(-3.05,1.,3.E-02)); +#42528 = LINE('',#42529,#42530); +#42529 = CARTESIAN_POINT('',(-3.05,0.694863,3.E-02)); +#42530 = VECTOR('',#42531,1.); +#42531 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42532 = ORIENTED_EDGE('',*,*,#42533,.T.); +#42533 = EDGE_CURVE('',#42526,#42534,#42536,.T.); +#42534 = VERTEX_POINT('',#42535); +#42535 = CARTESIAN_POINT('',(-2.95,1.,3.E-02)); +#42536 = LINE('',#42537,#42538); +#42537 = CARTESIAN_POINT('',(-18.5,1.,3.E-02)); +#42538 = VECTOR('',#42539,1.); +#42539 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42540 = ORIENTED_EDGE('',*,*,#42541,.T.); +#42541 = EDGE_CURVE('',#42534,#42542,#42544,.T.); +#42542 = VERTEX_POINT('',#42543); +#42543 = CARTESIAN_POINT('',(-2.95,0.7,3.E-02)); +#42544 = LINE('',#42545,#42546); +#42545 = CARTESIAN_POINT('',(-2.95,0.694863,3.E-02)); +#42546 = VECTOR('',#42547,1.); +#42547 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42548 = ORIENTED_EDGE('',*,*,#42549,.F.); +#42549 = EDGE_CURVE('',#42550,#42542,#42552,.T.); +#42550 = VERTEX_POINT('',#42551); +#42551 = CARTESIAN_POINT('',(-2.55,0.7,3.E-02)); +#42552 = LINE('',#42553,#42554); +#42553 = CARTESIAN_POINT('',(-0.5,0.7,3.E-02)); +#42554 = VECTOR('',#42555,1.); +#42555 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42556 = ORIENTED_EDGE('',*,*,#42557,.T.); +#42557 = EDGE_CURVE('',#42550,#42558,#42560,.T.); +#42558 = VERTEX_POINT('',#42559); +#42559 = CARTESIAN_POINT('',(-2.55,1.,3.E-02)); +#42560 = LINE('',#42561,#42562); +#42561 = CARTESIAN_POINT('',(-2.55,0.694863,3.E-02)); +#42562 = VECTOR('',#42563,1.); +#42563 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42564 = ORIENTED_EDGE('',*,*,#42565,.T.); +#42565 = EDGE_CURVE('',#42558,#42566,#42568,.T.); +#42566 = VERTEX_POINT('',#42567); +#42567 = CARTESIAN_POINT('',(-2.45,1.,3.E-02)); +#42568 = LINE('',#42569,#42570); +#42569 = CARTESIAN_POINT('',(-18.,1.,3.E-02)); +#42570 = VECTOR('',#42571,1.); +#42571 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42572 = ORIENTED_EDGE('',*,*,#42573,.T.); +#42573 = EDGE_CURVE('',#42566,#42574,#42576,.T.); +#42574 = VERTEX_POINT('',#42575); +#42575 = CARTESIAN_POINT('',(-2.45,0.7,3.E-02)); +#42576 = LINE('',#42577,#42578); +#42577 = CARTESIAN_POINT('',(-2.45,0.694863,3.E-02)); +#42578 = VECTOR('',#42579,1.); +#42579 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42580 = ORIENTED_EDGE('',*,*,#42581,.F.); +#42581 = EDGE_CURVE('',#42582,#42574,#42584,.T.); +#42582 = VERTEX_POINT('',#42583); +#42583 = CARTESIAN_POINT('',(-2.05,0.7,3.E-02)); +#42584 = LINE('',#42585,#42586); +#42585 = CARTESIAN_POINT('',(6.661338147751E-16,0.7,3.E-02)); +#42586 = VECTOR('',#42587,1.); +#42587 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42588 = ORIENTED_EDGE('',*,*,#42589,.T.); +#42589 = EDGE_CURVE('',#42582,#42590,#42592,.T.); +#42590 = VERTEX_POINT('',#42591); +#42591 = CARTESIAN_POINT('',(-2.05,1.,3.E-02)); +#42592 = LINE('',#42593,#42594); +#42593 = CARTESIAN_POINT('',(-2.05,0.694863,3.E-02)); +#42594 = VECTOR('',#42595,1.); +#42595 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42596 = ORIENTED_EDGE('',*,*,#42597,.T.); +#42597 = EDGE_CURVE('',#42590,#42598,#42600,.T.); +#42598 = VERTEX_POINT('',#42599); +#42599 = CARTESIAN_POINT('',(-1.95,1.,3.E-02)); +#42600 = LINE('',#42601,#42602); +#42601 = CARTESIAN_POINT('',(-17.5,1.,3.E-02)); +#42602 = VECTOR('',#42603,1.); +#42603 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42604 = ORIENTED_EDGE('',*,*,#42605,.T.); +#42605 = EDGE_CURVE('',#42598,#42606,#42608,.T.); +#42606 = VERTEX_POINT('',#42607); +#42607 = CARTESIAN_POINT('',(-1.95,0.7,3.E-02)); +#42608 = LINE('',#42609,#42610); +#42609 = CARTESIAN_POINT('',(-1.95,0.694863,3.E-02)); +#42610 = VECTOR('',#42611,1.); +#42611 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42612 = ORIENTED_EDGE('',*,*,#42613,.F.); +#42613 = EDGE_CURVE('',#42614,#42606,#42616,.T.); +#42614 = VERTEX_POINT('',#42615); +#42615 = CARTESIAN_POINT('',(-1.55,0.7,3.E-02)); +#42616 = LINE('',#42617,#42618); +#42617 = CARTESIAN_POINT('',(0.5,0.7,3.E-02)); +#42618 = VECTOR('',#42619,1.); +#42619 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42620 = ORIENTED_EDGE('',*,*,#42621,.T.); +#42621 = EDGE_CURVE('',#42614,#42622,#42624,.T.); +#42622 = VERTEX_POINT('',#42623); +#42623 = CARTESIAN_POINT('',(-1.55,1.,3.E-02)); +#42624 = LINE('',#42625,#42626); +#42625 = CARTESIAN_POINT('',(-1.55,0.694863,3.E-02)); +#42626 = VECTOR('',#42627,1.); +#42627 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42628 = ORIENTED_EDGE('',*,*,#42629,.T.); +#42629 = EDGE_CURVE('',#42622,#42630,#42632,.T.); +#42630 = VERTEX_POINT('',#42631); +#42631 = CARTESIAN_POINT('',(-1.45,1.,3.E-02)); +#42632 = LINE('',#42633,#42634); +#42633 = CARTESIAN_POINT('',(-17.,1.,3.E-02)); +#42634 = VECTOR('',#42635,1.); +#42635 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42636 = ORIENTED_EDGE('',*,*,#42637,.T.); +#42637 = EDGE_CURVE('',#42630,#42638,#42640,.T.); +#42638 = VERTEX_POINT('',#42639); +#42639 = CARTESIAN_POINT('',(-1.45,0.7,3.E-02)); +#42640 = LINE('',#42641,#42642); +#42641 = CARTESIAN_POINT('',(-1.45,0.694863,3.E-02)); +#42642 = VECTOR('',#42643,1.); +#42643 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42644 = ORIENTED_EDGE('',*,*,#42645,.F.); +#42645 = EDGE_CURVE('',#42646,#42638,#42648,.T.); +#42646 = VERTEX_POINT('',#42647); +#42647 = CARTESIAN_POINT('',(-1.05,0.7,3.E-02)); +#42648 = LINE('',#42649,#42650); +#42649 = CARTESIAN_POINT('',(1.,0.7,3.E-02)); +#42650 = VECTOR('',#42651,1.); +#42651 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42652 = ORIENTED_EDGE('',*,*,#42653,.T.); +#42653 = EDGE_CURVE('',#42646,#42654,#42656,.T.); +#42654 = VERTEX_POINT('',#42655); +#42655 = CARTESIAN_POINT('',(-1.05,1.,3.E-02)); +#42656 = LINE('',#42657,#42658); +#42657 = CARTESIAN_POINT('',(-1.05,0.694863,3.E-02)); +#42658 = VECTOR('',#42659,1.); +#42659 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42660 = ORIENTED_EDGE('',*,*,#42661,.T.); +#42661 = EDGE_CURVE('',#42654,#42662,#42664,.T.); +#42662 = VERTEX_POINT('',#42663); +#42663 = CARTESIAN_POINT('',(-0.95,1.,3.E-02)); +#42664 = LINE('',#42665,#42666); +#42665 = CARTESIAN_POINT('',(-16.5,1.,3.E-02)); +#42666 = VECTOR('',#42667,1.); +#42667 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42668 = ORIENTED_EDGE('',*,*,#42669,.T.); +#42669 = EDGE_CURVE('',#42662,#42670,#42672,.T.); +#42670 = VERTEX_POINT('',#42671); +#42671 = CARTESIAN_POINT('',(-0.95,0.7,3.E-02)); +#42672 = LINE('',#42673,#42674); +#42673 = CARTESIAN_POINT('',(-0.95,0.694863,3.E-02)); +#42674 = VECTOR('',#42675,1.); +#42675 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42676 = ORIENTED_EDGE('',*,*,#42677,.F.); +#42677 = EDGE_CURVE('',#42678,#42670,#42680,.T.); +#42678 = VERTEX_POINT('',#42679); +#42679 = CARTESIAN_POINT('',(-0.55,0.7,3.E-02)); +#42680 = LINE('',#42681,#42682); +#42681 = CARTESIAN_POINT('',(2.,0.7,3.E-02)); +#42682 = VECTOR('',#42683,1.); +#42683 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42684 = ORIENTED_EDGE('',*,*,#42685,.T.); +#42685 = EDGE_CURVE('',#42678,#42686,#42688,.T.); +#42686 = VERTEX_POINT('',#42687); +#42687 = CARTESIAN_POINT('',(-0.55,1.,3.E-02)); +#42688 = LINE('',#42689,#42690); +#42689 = CARTESIAN_POINT('',(-0.55,0.694863,3.E-02)); +#42690 = VECTOR('',#42691,1.); +#42691 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42692 = ORIENTED_EDGE('',*,*,#42693,.T.); +#42693 = EDGE_CURVE('',#42686,#42694,#42696,.T.); +#42694 = VERTEX_POINT('',#42695); +#42695 = CARTESIAN_POINT('',(-0.45,1.,3.E-02)); +#42696 = LINE('',#42697,#42698); +#42697 = CARTESIAN_POINT('',(-16.,1.,3.E-02)); +#42698 = VECTOR('',#42699,1.); +#42699 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42700 = ORIENTED_EDGE('',*,*,#42701,.T.); +#42701 = EDGE_CURVE('',#42694,#42702,#42704,.T.); +#42702 = VERTEX_POINT('',#42703); +#42703 = CARTESIAN_POINT('',(-0.45,0.7,3.E-02)); +#42704 = LINE('',#42705,#42706); +#42705 = CARTESIAN_POINT('',(-0.45,0.694863,3.E-02)); +#42706 = VECTOR('',#42707,1.); +#42707 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42708 = ORIENTED_EDGE('',*,*,#42709,.F.); +#42709 = EDGE_CURVE('',#42710,#42702,#42712,.T.); +#42710 = VERTEX_POINT('',#42711); +#42711 = CARTESIAN_POINT('',(-5.E-02,0.7,3.E-02)); +#42712 = LINE('',#42713,#42714); +#42713 = CARTESIAN_POINT('',(2.5,0.7,3.E-02)); +#42714 = VECTOR('',#42715,1.); +#42715 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42716 = ORIENTED_EDGE('',*,*,#42717,.T.); +#42717 = EDGE_CURVE('',#42710,#42718,#42720,.T.); +#42718 = VERTEX_POINT('',#42719); +#42719 = CARTESIAN_POINT('',(-5.E-02,1.,3.E-02)); +#42720 = LINE('',#42721,#42722); +#42721 = CARTESIAN_POINT('',(-5.E-02,0.694863,3.E-02)); +#42722 = VECTOR('',#42723,1.); +#42723 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42724 = ORIENTED_EDGE('',*,*,#42725,.T.); +#42725 = EDGE_CURVE('',#42718,#42726,#42728,.T.); +#42726 = VERTEX_POINT('',#42727); +#42727 = CARTESIAN_POINT('',(5.E-02,1.,3.E-02)); +#42728 = LINE('',#42729,#42730); +#42729 = CARTESIAN_POINT('',(-15.5,1.,3.E-02)); +#42730 = VECTOR('',#42731,1.); +#42731 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42732 = ORIENTED_EDGE('',*,*,#42733,.T.); +#42733 = EDGE_CURVE('',#42726,#42734,#42736,.T.); +#42734 = VERTEX_POINT('',#42735); +#42735 = CARTESIAN_POINT('',(5.E-02,0.7,3.E-02)); +#42736 = LINE('',#42737,#42738); +#42737 = CARTESIAN_POINT('',(5.E-02,0.694863,3.E-02)); +#42738 = VECTOR('',#42739,1.); +#42739 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42740 = ORIENTED_EDGE('',*,*,#42741,.F.); +#42741 = EDGE_CURVE('',#42742,#42734,#42744,.T.); +#42742 = VERTEX_POINT('',#42743); +#42743 = CARTESIAN_POINT('',(0.45,0.7,3.E-02)); +#42744 = LINE('',#42745,#42746); +#42745 = CARTESIAN_POINT('',(3.,0.7,3.E-02)); +#42746 = VECTOR('',#42747,1.); +#42747 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42748 = ORIENTED_EDGE('',*,*,#42749,.T.); +#42749 = EDGE_CURVE('',#42742,#42750,#42752,.T.); +#42750 = VERTEX_POINT('',#42751); +#42751 = CARTESIAN_POINT('',(0.45,1.,3.E-02)); +#42752 = LINE('',#42753,#42754); +#42753 = CARTESIAN_POINT('',(0.45,0.694863,3.E-02)); +#42754 = VECTOR('',#42755,1.); +#42755 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42756 = ORIENTED_EDGE('',*,*,#42757,.T.); +#42757 = EDGE_CURVE('',#42750,#42758,#42760,.T.); +#42758 = VERTEX_POINT('',#42759); +#42759 = CARTESIAN_POINT('',(0.55,1.,3.E-02)); +#42760 = LINE('',#42761,#42762); +#42761 = CARTESIAN_POINT('',(-15.,1.,3.E-02)); +#42762 = VECTOR('',#42763,1.); +#42763 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42764 = ORIENTED_EDGE('',*,*,#42765,.T.); +#42765 = EDGE_CURVE('',#42758,#42766,#42768,.T.); +#42766 = VERTEX_POINT('',#42767); +#42767 = CARTESIAN_POINT('',(0.55,0.7,3.E-02)); +#42768 = LINE('',#42769,#42770); +#42769 = CARTESIAN_POINT('',(0.55,0.694863,3.E-02)); +#42770 = VECTOR('',#42771,1.); +#42771 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42772 = ORIENTED_EDGE('',*,*,#42773,.F.); +#42773 = EDGE_CURVE('',#42774,#42766,#42776,.T.); +#42774 = VERTEX_POINT('',#42775); +#42775 = CARTESIAN_POINT('',(0.95,0.7,3.E-02)); +#42776 = LINE('',#42777,#42778); +#42777 = CARTESIAN_POINT('',(3.5,0.7,3.E-02)); +#42778 = VECTOR('',#42779,1.); +#42779 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42780 = ORIENTED_EDGE('',*,*,#42781,.T.); +#42781 = EDGE_CURVE('',#42774,#42782,#42784,.T.); +#42782 = VERTEX_POINT('',#42783); +#42783 = CARTESIAN_POINT('',(0.95,1.,3.E-02)); +#42784 = LINE('',#42785,#42786); +#42785 = CARTESIAN_POINT('',(0.95,0.694863,3.E-02)); +#42786 = VECTOR('',#42787,1.); +#42787 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42788 = ORIENTED_EDGE('',*,*,#42789,.T.); +#42789 = EDGE_CURVE('',#42782,#42790,#42792,.T.); +#42790 = VERTEX_POINT('',#42791); +#42791 = CARTESIAN_POINT('',(1.05,1.,3.E-02)); +#42792 = LINE('',#42793,#42794); +#42793 = CARTESIAN_POINT('',(-14.5,1.,3.E-02)); +#42794 = VECTOR('',#42795,1.); +#42795 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42796 = ORIENTED_EDGE('',*,*,#42797,.T.); +#42797 = EDGE_CURVE('',#42790,#42798,#42800,.T.); +#42798 = VERTEX_POINT('',#42799); +#42799 = CARTESIAN_POINT('',(1.05,0.7,3.E-02)); +#42800 = LINE('',#42801,#42802); +#42801 = CARTESIAN_POINT('',(1.05,0.694863,3.E-02)); +#42802 = VECTOR('',#42803,1.); +#42803 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42804 = ORIENTED_EDGE('',*,*,#42805,.F.); +#42805 = EDGE_CURVE('',#42806,#42798,#42808,.T.); +#42806 = VERTEX_POINT('',#42807); +#42807 = CARTESIAN_POINT('',(1.45,0.7,3.E-02)); +#42808 = LINE('',#42809,#42810); +#42809 = CARTESIAN_POINT('',(3.5,0.7,3.E-02)); +#42810 = VECTOR('',#42811,1.); +#42811 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42812 = ORIENTED_EDGE('',*,*,#42813,.T.); +#42813 = EDGE_CURVE('',#42806,#42814,#42816,.T.); +#42814 = VERTEX_POINT('',#42815); +#42815 = CARTESIAN_POINT('',(1.45,1.,3.E-02)); +#42816 = LINE('',#42817,#42818); +#42817 = CARTESIAN_POINT('',(1.45,0.694863,3.E-02)); +#42818 = VECTOR('',#42819,1.); +#42819 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42820 = ORIENTED_EDGE('',*,*,#42821,.T.); +#42821 = EDGE_CURVE('',#42814,#42822,#42824,.T.); +#42822 = VERTEX_POINT('',#42823); +#42823 = CARTESIAN_POINT('',(1.55,1.,3.E-02)); +#42824 = LINE('',#42825,#42826); +#42825 = CARTESIAN_POINT('',(-14.,1.,3.E-02)); +#42826 = VECTOR('',#42827,1.); +#42827 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42828 = ORIENTED_EDGE('',*,*,#42829,.T.); +#42829 = EDGE_CURVE('',#42822,#42830,#42832,.T.); +#42830 = VERTEX_POINT('',#42831); +#42831 = CARTESIAN_POINT('',(1.55,0.7,3.E-02)); +#42832 = LINE('',#42833,#42834); +#42833 = CARTESIAN_POINT('',(1.55,0.694863,3.E-02)); +#42834 = VECTOR('',#42835,1.); +#42835 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42836 = ORIENTED_EDGE('',*,*,#42837,.F.); +#42837 = EDGE_CURVE('',#42838,#42830,#42840,.T.); +#42838 = VERTEX_POINT('',#42839); +#42839 = CARTESIAN_POINT('',(1.95,0.7,3.E-02)); +#42840 = LINE('',#42841,#42842); +#42841 = CARTESIAN_POINT('',(4.5,0.7,3.E-02)); +#42842 = VECTOR('',#42843,1.); +#42843 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42844 = ORIENTED_EDGE('',*,*,#42845,.T.); +#42845 = EDGE_CURVE('',#42838,#42846,#42848,.T.); +#42846 = VERTEX_POINT('',#42847); +#42847 = CARTESIAN_POINT('',(1.95,1.,3.E-02)); +#42848 = LINE('',#42849,#42850); +#42849 = CARTESIAN_POINT('',(1.95,0.694863,3.E-02)); +#42850 = VECTOR('',#42851,1.); +#42851 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42852 = ORIENTED_EDGE('',*,*,#42853,.T.); +#42853 = EDGE_CURVE('',#42846,#42854,#42856,.T.); +#42854 = VERTEX_POINT('',#42855); +#42855 = CARTESIAN_POINT('',(2.05,1.,3.E-02)); +#42856 = LINE('',#42857,#42858); +#42857 = CARTESIAN_POINT('',(-13.5,1.,3.E-02)); +#42858 = VECTOR('',#42859,1.); +#42859 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42860 = ORIENTED_EDGE('',*,*,#42861,.T.); +#42861 = EDGE_CURVE('',#42854,#42862,#42864,.T.); +#42862 = VERTEX_POINT('',#42863); +#42863 = CARTESIAN_POINT('',(2.05,0.7,3.E-02)); +#42864 = LINE('',#42865,#42866); +#42865 = CARTESIAN_POINT('',(2.05,0.694863,3.E-02)); +#42866 = VECTOR('',#42867,1.); +#42867 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42868 = ORIENTED_EDGE('',*,*,#42869,.F.); +#42869 = EDGE_CURVE('',#42870,#42862,#42872,.T.); +#42870 = VERTEX_POINT('',#42871); +#42871 = CARTESIAN_POINT('',(2.45,0.7,3.E-02)); +#42872 = LINE('',#42873,#42874); +#42873 = CARTESIAN_POINT('',(4.5,0.7,3.E-02)); +#42874 = VECTOR('',#42875,1.); +#42875 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42876 = ORIENTED_EDGE('',*,*,#42877,.T.); +#42877 = EDGE_CURVE('',#42870,#42878,#42880,.T.); +#42878 = VERTEX_POINT('',#42879); +#42879 = CARTESIAN_POINT('',(2.45,1.,3.E-02)); +#42880 = LINE('',#42881,#42882); +#42881 = CARTESIAN_POINT('',(2.45,0.694863,3.E-02)); +#42882 = VECTOR('',#42883,1.); +#42883 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42884 = ORIENTED_EDGE('',*,*,#42885,.T.); +#42885 = EDGE_CURVE('',#42878,#42886,#42888,.T.); +#42886 = VERTEX_POINT('',#42887); +#42887 = CARTESIAN_POINT('',(2.55,1.,3.E-02)); +#42888 = LINE('',#42889,#42890); +#42889 = CARTESIAN_POINT('',(-13.,1.,3.E-02)); +#42890 = VECTOR('',#42891,1.); +#42891 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42892 = ORIENTED_EDGE('',*,*,#42893,.T.); +#42893 = EDGE_CURVE('',#42886,#42894,#42896,.T.); +#42894 = VERTEX_POINT('',#42895); +#42895 = CARTESIAN_POINT('',(2.55,0.7,3.E-02)); +#42896 = LINE('',#42897,#42898); +#42897 = CARTESIAN_POINT('',(2.55,0.694863,3.E-02)); +#42898 = VECTOR('',#42899,1.); +#42899 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42900 = ORIENTED_EDGE('',*,*,#42901,.F.); +#42901 = EDGE_CURVE('',#42902,#42894,#42904,.T.); +#42902 = VERTEX_POINT('',#42903); +#42903 = CARTESIAN_POINT('',(2.95,0.7,3.E-02)); +#42904 = LINE('',#42905,#42906); +#42905 = CARTESIAN_POINT('',(5.,0.7,3.E-02)); +#42906 = VECTOR('',#42907,1.); +#42907 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42908 = ORIENTED_EDGE('',*,*,#42909,.T.); +#42909 = EDGE_CURVE('',#42902,#42910,#42912,.T.); +#42910 = VERTEX_POINT('',#42911); +#42911 = CARTESIAN_POINT('',(2.95,1.,3.E-02)); +#42912 = LINE('',#42913,#42914); +#42913 = CARTESIAN_POINT('',(2.95,0.694863,3.E-02)); +#42914 = VECTOR('',#42915,1.); +#42915 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42916 = ORIENTED_EDGE('',*,*,#42917,.T.); +#42917 = EDGE_CURVE('',#42910,#42918,#42920,.T.); +#42918 = VERTEX_POINT('',#42919); +#42919 = CARTESIAN_POINT('',(3.05,1.,3.E-02)); +#42920 = LINE('',#42921,#42922); +#42921 = CARTESIAN_POINT('',(-12.5,1.,3.E-02)); +#42922 = VECTOR('',#42923,1.); +#42923 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42924 = ORIENTED_EDGE('',*,*,#42925,.T.); +#42925 = EDGE_CURVE('',#42918,#42926,#42928,.T.); +#42926 = VERTEX_POINT('',#42927); +#42927 = CARTESIAN_POINT('',(3.05,0.7,3.E-02)); +#42928 = LINE('',#42929,#42930); +#42929 = CARTESIAN_POINT('',(3.05,0.694863,3.E-02)); +#42930 = VECTOR('',#42931,1.); +#42931 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42932 = ORIENTED_EDGE('',*,*,#42933,.F.); +#42933 = EDGE_CURVE('',#42934,#42926,#42936,.T.); +#42934 = VERTEX_POINT('',#42935); +#42935 = CARTESIAN_POINT('',(3.45,0.7,3.E-02)); +#42936 = LINE('',#42937,#42938); +#42937 = CARTESIAN_POINT('',(5.5,0.7,3.E-02)); +#42938 = VECTOR('',#42939,1.); +#42939 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42940 = ORIENTED_EDGE('',*,*,#42941,.T.); +#42941 = EDGE_CURVE('',#42934,#42942,#42944,.T.); +#42942 = VERTEX_POINT('',#42943); +#42943 = CARTESIAN_POINT('',(3.45,1.,3.E-02)); +#42944 = LINE('',#42945,#42946); +#42945 = CARTESIAN_POINT('',(3.45,0.694863,3.E-02)); +#42946 = VECTOR('',#42947,1.); +#42947 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42948 = ORIENTED_EDGE('',*,*,#42949,.T.); +#42949 = EDGE_CURVE('',#42942,#42950,#42952,.T.); +#42950 = VERTEX_POINT('',#42951); +#42951 = CARTESIAN_POINT('',(3.55,1.,3.E-02)); +#42952 = LINE('',#42953,#42954); +#42953 = CARTESIAN_POINT('',(-12.,1.,3.E-02)); +#42954 = VECTOR('',#42955,1.); +#42955 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42956 = ORIENTED_EDGE('',*,*,#42957,.T.); +#42957 = EDGE_CURVE('',#42950,#42958,#42960,.T.); +#42958 = VERTEX_POINT('',#42959); +#42959 = CARTESIAN_POINT('',(3.55,0.7,3.E-02)); +#42960 = LINE('',#42961,#42962); +#42961 = CARTESIAN_POINT('',(3.55,0.694863,3.E-02)); +#42962 = VECTOR('',#42963,1.); +#42963 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42964 = ORIENTED_EDGE('',*,*,#42965,.F.); +#42965 = EDGE_CURVE('',#42966,#42958,#42968,.T.); +#42966 = VERTEX_POINT('',#42967); +#42967 = CARTESIAN_POINT('',(3.95,0.7,3.E-02)); +#42968 = LINE('',#42969,#42970); +#42969 = CARTESIAN_POINT('',(6.,0.7,3.E-02)); +#42970 = VECTOR('',#42971,1.); +#42971 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#42972 = ORIENTED_EDGE('',*,*,#42973,.T.); +#42973 = EDGE_CURVE('',#42966,#42974,#42976,.T.); +#42974 = VERTEX_POINT('',#42975); +#42975 = CARTESIAN_POINT('',(3.95,1.,3.E-02)); +#42976 = LINE('',#42977,#42978); +#42977 = CARTESIAN_POINT('',(3.95,0.694863,3.E-02)); +#42978 = VECTOR('',#42979,1.); +#42979 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#42980 = ORIENTED_EDGE('',*,*,#42981,.T.); +#42981 = EDGE_CURVE('',#42974,#42982,#42984,.T.); +#42982 = VERTEX_POINT('',#42983); +#42983 = CARTESIAN_POINT('',(4.05,1.,3.E-02)); +#42984 = LINE('',#42985,#42986); +#42985 = CARTESIAN_POINT('',(-11.5,1.,3.E-02)); +#42986 = VECTOR('',#42987,1.); +#42987 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#42988 = ORIENTED_EDGE('',*,*,#42989,.T.); +#42989 = EDGE_CURVE('',#42982,#42990,#42992,.T.); +#42990 = VERTEX_POINT('',#42991); +#42991 = CARTESIAN_POINT('',(4.05,0.7,3.E-02)); +#42992 = LINE('',#42993,#42994); +#42993 = CARTESIAN_POINT('',(4.05,0.694863,3.E-02)); +#42994 = VECTOR('',#42995,1.); +#42995 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#42996 = ORIENTED_EDGE('',*,*,#42997,.F.); +#42997 = EDGE_CURVE('',#42998,#42990,#43000,.T.); +#42998 = VERTEX_POINT('',#42999); +#42999 = CARTESIAN_POINT('',(4.45,0.7,3.E-02)); +#43000 = LINE('',#43001,#43002); +#43001 = CARTESIAN_POINT('',(7.,0.7,3.E-02)); +#43002 = VECTOR('',#43003,1.); +#43003 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#43004 = ORIENTED_EDGE('',*,*,#43005,.T.); +#43005 = EDGE_CURVE('',#42998,#43006,#43008,.T.); +#43006 = VERTEX_POINT('',#43007); +#43007 = CARTESIAN_POINT('',(4.45,1.,3.E-02)); +#43008 = LINE('',#43009,#43010); +#43009 = CARTESIAN_POINT('',(4.45,0.694863,3.E-02)); +#43010 = VECTOR('',#43011,1.); +#43011 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#43012 = ORIENTED_EDGE('',*,*,#43013,.T.); +#43013 = EDGE_CURVE('',#43006,#41543,#43014,.T.); +#43014 = LINE('',#43015,#43016); +#43015 = CARTESIAN_POINT('',(-11.,1.,3.E-02)); +#43016 = VECTOR('',#43017,1.); +#43017 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43018 = ORIENTED_EDGE('',*,*,#41542,.T.); +#43019 = ORIENTED_EDGE('',*,*,#43020,.F.); +#43020 = EDGE_CURVE('',#43021,#41535,#43023,.T.); +#43021 = VERTEX_POINT('',#43022); +#43022 = CARTESIAN_POINT('',(4.95,0.7,3.E-02)); +#43023 = LINE('',#43024,#43025); +#43024 = CARTESIAN_POINT('',(7.5,0.7,3.E-02)); +#43025 = VECTOR('',#43026,1.); +#43026 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#43027 = ORIENTED_EDGE('',*,*,#43028,.T.); +#43028 = EDGE_CURVE('',#43021,#43029,#43031,.T.); +#43029 = VERTEX_POINT('',#43030); +#43030 = CARTESIAN_POINT('',(4.95,1.,3.E-02)); +#43031 = LINE('',#43032,#43033); +#43032 = CARTESIAN_POINT('',(4.95,0.694863,3.E-02)); +#43033 = VECTOR('',#43034,1.); +#43034 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#43035 = ORIENTED_EDGE('',*,*,#43036,.T.); +#43036 = EDGE_CURVE('',#43029,#43037,#43039,.T.); +#43037 = VERTEX_POINT('',#43038); +#43038 = CARTESIAN_POINT('',(5.05,1.,3.E-02)); +#43039 = LINE('',#43040,#43041); +#43040 = CARTESIAN_POINT('',(-10.5,1.,3.E-02)); +#43041 = VECTOR('',#43042,1.); +#43042 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43043 = ORIENTED_EDGE('',*,*,#43044,.T.); +#43044 = EDGE_CURVE('',#43037,#43045,#43047,.T.); +#43045 = VERTEX_POINT('',#43046); +#43046 = CARTESIAN_POINT('',(5.05,0.7,3.E-02)); +#43047 = LINE('',#43048,#43049); +#43048 = CARTESIAN_POINT('',(5.05,0.694863,3.E-02)); +#43049 = VECTOR('',#43050,1.); +#43050 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#43051 = ORIENTED_EDGE('',*,*,#43052,.F.); +#43052 = EDGE_CURVE('',#43053,#43045,#43055,.T.); +#43053 = VERTEX_POINT('',#43054); +#43054 = CARTESIAN_POINT('',(5.45,0.7,3.E-02)); +#43055 = LINE('',#43056,#43057); +#43056 = CARTESIAN_POINT('',(8.,0.7,3.E-02)); +#43057 = VECTOR('',#43058,1.); +#43058 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#43059 = ORIENTED_EDGE('',*,*,#43060,.T.); +#43060 = EDGE_CURVE('',#43053,#43061,#43063,.T.); +#43061 = VERTEX_POINT('',#43062); +#43062 = CARTESIAN_POINT('',(5.45,1.,3.E-02)); +#43063 = LINE('',#43064,#43065); +#43064 = CARTESIAN_POINT('',(5.45,0.694863,3.E-02)); +#43065 = VECTOR('',#43066,1.); +#43066 = DIRECTION('',(1.932570076653E-32,1.,-1.065228634467E-16)); +#43067 = ORIENTED_EDGE('',*,*,#43068,.T.); +#43068 = EDGE_CURVE('',#43061,#43069,#43071,.T.); +#43069 = VERTEX_POINT('',#43070); +#43070 = CARTESIAN_POINT('',(5.55,1.,3.E-02)); +#43071 = LINE('',#43072,#43073); +#43072 = CARTESIAN_POINT('',(-10.,1.,3.E-02)); +#43073 = VECTOR('',#43074,1.); +#43074 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43075 = ORIENTED_EDGE('',*,*,#43076,.T.); +#43076 = EDGE_CURVE('',#43069,#43077,#43079,.T.); +#43077 = VERTEX_POINT('',#43078); +#43078 = CARTESIAN_POINT('',(5.55,0.7,3.E-02)); +#43079 = LINE('',#43080,#43081); +#43080 = CARTESIAN_POINT('',(5.55,0.694863,3.E-02)); +#43081 = VECTOR('',#43082,1.); +#43082 = DIRECTION('',(-3.675722875075E-32,-1.,1.065228634467E-16)); +#43083 = ORIENTED_EDGE('',*,*,#43084,.T.); +#43084 = EDGE_CURVE('',#43077,#43085,#43087,.T.); +#43085 = VERTEX_POINT('',#43086); +#43086 = CARTESIAN_POINT('',(5.95,0.7,3.E-02)); +#43087 = LINE('',#43088,#43089); +#43088 = CARTESIAN_POINT('',(-10.,0.7,3.E-02)); +#43089 = VECTOR('',#43090,1.); +#43090 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43091 = ORIENTED_EDGE('',*,*,#43092,.F.); +#43092 = EDGE_CURVE('',#43093,#43085,#43095,.T.); +#43093 = VERTEX_POINT('',#43094); +#43094 = CARTESIAN_POINT('',(5.95,1.,3.E-02)); +#43095 = LINE('',#43096,#43097); +#43096 = CARTESIAN_POINT('',(5.95,0.694863,3.E-02)); +#43097 = VECTOR('',#43098,1.); +#43098 = DIRECTION('',(-1.932570076653E-32,-1.,1.065228634467E-16)); +#43099 = ORIENTED_EDGE('',*,*,#43100,.T.); +#43100 = EDGE_CURVE('',#43093,#43101,#43103,.T.); +#43101 = VERTEX_POINT('',#43102); +#43102 = CARTESIAN_POINT('',(6.4525,1.,3.E-02)); +#43103 = LINE('',#43104,#43105); +#43104 = CARTESIAN_POINT('',(-10.,1.,3.E-02)); +#43105 = VECTOR('',#43106,1.); +#43106 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43107 = ORIENTED_EDGE('',*,*,#43108,.T.); +#43108 = EDGE_CURVE('',#43101,#41060,#43109,.T.); +#43109 = LINE('',#43110,#43111); +#43110 = CARTESIAN_POINT('',(6.4525,0.694863,3.E-02)); +#43111 = VECTOR('',#43112,1.); +#43112 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43113 = PLANE('',#43114); +#43114 = AXIS2_PLACEMENT_3D('',#43115,#43116,#43117); +#43115 = CARTESIAN_POINT('',(-46.6025,1.,3.000000000001E-02)); +#43116 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#43117 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43118 = ADVANCED_FACE('',(#43119),#43153,.T.); +#43119 = FACE_BOUND('',#43120,.T.); +#43120 = EDGE_LOOP('',(#43121,#43131,#43139,#43147)); +#43121 = ORIENTED_EDGE('',*,*,#43122,.T.); +#43122 = EDGE_CURVE('',#43123,#43125,#43127,.T.); +#43123 = VERTEX_POINT('',#43124); +#43124 = CARTESIAN_POINT('',(5.675,0.92,-2.109423746788E-15)); +#43125 = VERTEX_POINT('',#43126); +#43126 = CARTESIAN_POINT('',(5.675,1.25,-2.22044604925E-15)); +#43127 = LINE('',#43128,#43129); +#43128 = CARTESIAN_POINT('',(5.675,0.92,-2.109423746788E-15)); +#43129 = VECTOR('',#43130,1.); +#43130 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#43131 = ORIENTED_EDGE('',*,*,#43132,.T.); +#43132 = EDGE_CURVE('',#43125,#43133,#43135,.T.); +#43133 = VERTEX_POINT('',#43134); +#43134 = CARTESIAN_POINT('',(5.825,1.25,-1.887379141863E-15)); +#43135 = LINE('',#43136,#43137); +#43136 = CARTESIAN_POINT('',(5.675,1.25,-2.22044604925E-15)); +#43137 = VECTOR('',#43138,1.); +#43138 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43139 = ORIENTED_EDGE('',*,*,#43140,.F.); +#43140 = EDGE_CURVE('',#43141,#43133,#43143,.T.); +#43141 = VERTEX_POINT('',#43142); +#43142 = CARTESIAN_POINT('',(5.825,0.92,-2.109423746788E-15)); +#43143 = LINE('',#43144,#43145); +#43144 = CARTESIAN_POINT('',(5.825,0.92,-2.109423746788E-15)); +#43145 = VECTOR('',#43146,1.); +#43146 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#43147 = ORIENTED_EDGE('',*,*,#43148,.F.); +#43148 = EDGE_CURVE('',#43123,#43141,#43149,.T.); +#43149 = LINE('',#43150,#43151); +#43150 = CARTESIAN_POINT('',(5.675,0.92,-2.109423746788E-15)); +#43151 = VECTOR('',#43152,1.); +#43152 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43153 = PLANE('',#43154); +#43154 = AXIS2_PLACEMENT_3D('',#43155,#43156,#43157); +#43155 = CARTESIAN_POINT('',(5.675,1.25,-2.22044604925E-15)); +#43156 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#43157 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#43158 = ADVANCED_FACE('',(#43159),#43251,.T.); +#43159 = FACE_BOUND('',#43160,.T.); +#43160 = EDGE_LOOP('',(#43161,#43171,#43179,#43188,#43196,#43204,#43212, + #43220,#43229,#43237,#43245)); +#43161 = ORIENTED_EDGE('',*,*,#43162,.T.); +#43162 = EDGE_CURVE('',#43163,#43165,#43167,.T.); +#43163 = VERTEX_POINT('',#43164); +#43164 = CARTESIAN_POINT('',(4.825,1.,8.E-02)); +#43165 = VERTEX_POINT('',#43166); +#43166 = CARTESIAN_POINT('',(4.825,1.,7.866077735406E-02)); +#43167 = LINE('',#43168,#43169); +#43168 = CARTESIAN_POINT('',(4.825,1.,0.841614)); +#43169 = VECTOR('',#43170,1.); +#43170 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#43171 = ORIENTED_EDGE('',*,*,#43172,.F.); +#43172 = EDGE_CURVE('',#43173,#43165,#43175,.T.); +#43173 = VERTEX_POINT('',#43174); +#43174 = CARTESIAN_POINT('',(4.825,0.943186633611,6.541154699934E-02)); +#43175 = LINE('',#43176,#43177); +#43176 = CARTESIAN_POINT('',(4.825,0.694863,7.500931358165E-03)); +#43177 = VECTOR('',#43178,1.); +#43178 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#43179 = ORIENTED_EDGE('',*,*,#43180,.T.); +#43180 = EDGE_CURVE('',#43173,#43181,#43183,.T.); +#43181 = VERTEX_POINT('',#43182); +#43182 = CARTESIAN_POINT('',(4.825,0.92,3.619548911246E-02)); +#43183 = CIRCLE('',#43184,3.E-02); +#43184 = AXIS2_PLACEMENT_3D('',#43185,#43186,#43187); +#43185 = CARTESIAN_POINT('',(4.825,0.95,3.619548911246E-02)); +#43186 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43187 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#43188 = ORIENTED_EDGE('',*,*,#43189,.F.); +#43189 = EDGE_CURVE('',#43190,#43181,#43192,.T.); +#43190 = VERTEX_POINT('',#43191); +#43191 = CARTESIAN_POINT('',(4.825,0.92,-1.554312234475E-15)); +#43192 = LINE('',#43193,#43194); +#43193 = CARTESIAN_POINT('',(4.825,0.92,0.841614)); +#43194 = VECTOR('',#43195,1.); +#43195 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#43196 = ORIENTED_EDGE('',*,*,#43197,.F.); +#43197 = EDGE_CURVE('',#43198,#43190,#43200,.T.); +#43198 = VERTEX_POINT('',#43199); +#43199 = CARTESIAN_POINT('',(4.825,1.25,-1.665334536938E-15)); +#43200 = LINE('',#43201,#43202); +#43201 = CARTESIAN_POINT('',(4.825,0.694863,-1.554312234475E-15)); +#43202 = VECTOR('',#43203,1.); +#43203 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#43204 = ORIENTED_EDGE('',*,*,#43205,.F.); +#43205 = EDGE_CURVE('',#43206,#43198,#43208,.T.); +#43206 = VERTEX_POINT('',#43207); +#43207 = CARTESIAN_POINT('',(4.825,1.3,5.E-02)); +#43208 = LINE('',#43209,#43210); +#43209 = CARTESIAN_POINT('',(4.825,0.694863,-0.555137)); +#43210 = VECTOR('',#43211,1.); +#43211 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#43212 = ORIENTED_EDGE('',*,*,#43213,.F.); +#43213 = EDGE_CURVE('',#43214,#43206,#43216,.T.); +#43214 = VERTEX_POINT('',#43215); +#43215 = CARTESIAN_POINT('',(4.825,1.3,0.11)); +#43216 = LINE('',#43217,#43218); +#43217 = CARTESIAN_POINT('',(4.825,1.3,0.841614)); +#43218 = VECTOR('',#43219,1.); +#43219 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#43220 = ORIENTED_EDGE('',*,*,#43221,.F.); +#43221 = EDGE_CURVE('',#43222,#43214,#43224,.T.); +#43222 = VERTEX_POINT('',#43223); +#43223 = CARTESIAN_POINT('',(4.825,1.35,0.16)); +#43224 = CIRCLE('',#43225,5.E-02); +#43225 = AXIS2_PLACEMENT_3D('',#43226,#43227,#43228); +#43226 = CARTESIAN_POINT('',(4.825,1.35,0.11)); +#43227 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43228 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#43229 = ORIENTED_EDGE('',*,*,#43230,.F.); +#43230 = EDGE_CURVE('',#43231,#43222,#43233,.T.); +#43231 = VERTEX_POINT('',#43232); +#43232 = CARTESIAN_POINT('',(4.825,1.35,0.31)); +#43233 = LINE('',#43234,#43235); +#43234 = CARTESIAN_POINT('',(4.825,1.35,0.841614)); +#43235 = VECTOR('',#43236,1.); +#43236 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#43237 = ORIENTED_EDGE('',*,*,#43238,.F.); +#43238 = EDGE_CURVE('',#43239,#43231,#43241,.T.); +#43239 = VERTEX_POINT('',#43240); +#43240 = CARTESIAN_POINT('',(4.825,1.,0.31)); +#43241 = LINE('',#43242,#43243); +#43242 = CARTESIAN_POINT('',(4.825,0.694863,0.31)); +#43243 = VECTOR('',#43244,1.); +#43244 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43245 = ORIENTED_EDGE('',*,*,#43246,.T.); +#43246 = EDGE_CURVE('',#43239,#43163,#43247,.T.); +#43247 = LINE('',#43248,#43249); +#43248 = CARTESIAN_POINT('',(4.825,1.,0.841614)); +#43249 = VECTOR('',#43250,1.); +#43250 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#43251 = PLANE('',#43252); +#43252 = AXIS2_PLACEMENT_3D('',#43253,#43254,#43255); +#43253 = CARTESIAN_POINT('',(4.825,1.245779075398,0.170500231015)); +#43254 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43255 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#43256 = ADVANCED_FACE('',(#43257),#43282,.T.); +#43257 = FACE_BOUND('',#43258,.T.); +#43258 = EDGE_LOOP('',(#43259,#43269,#43275,#43276)); +#43259 = ORIENTED_EDGE('',*,*,#43260,.F.); +#43260 = EDGE_CURVE('',#43261,#43263,#43265,.T.); +#43261 = VERTEX_POINT('',#43262); +#43262 = CARTESIAN_POINT('',(4.9,1.,8.E-02)); +#43263 = VERTEX_POINT('',#43264); +#43264 = CARTESIAN_POINT('',(4.9,0.92,8.E-02)); +#43265 = LINE('',#43266,#43267); +#43266 = CARTESIAN_POINT('',(4.9,0.694863,8.E-02)); +#43267 = VECTOR('',#43268,1.); +#43268 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#43269 = ORIENTED_EDGE('',*,*,#43270,.F.); +#43270 = EDGE_CURVE('',#43029,#43261,#43271,.T.); +#43271 = LINE('',#43272,#43273); +#43272 = CARTESIAN_POINT('',(-10.5,1.,15.48)); +#43273 = VECTOR('',#43274,1.); +#43274 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#43275 = ORIENTED_EDGE('',*,*,#43028,.F.); +#43276 = ORIENTED_EDGE('',*,*,#43277,.T.); +#43277 = EDGE_CURVE('',#43021,#43263,#43278,.T.); +#43278 = LINE('',#43279,#43280); +#43279 = CARTESIAN_POINT('',(4.9511675,0.694863,2.88325E-02)); +#43280 = VECTOR('',#43281,1.); +#43281 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#43282 = PLANE('',#43283); +#43283 = AXIS2_PLACEMENT_3D('',#43284,#43285,#43286); +#43284 = CARTESIAN_POINT('',(4.925,0.85,5.5E-02)); +#43285 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#43286 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#43287 = ADVANCED_FACE('',(#43288),#43306,.F.); +#43288 = FACE_BOUND('',#43289,.F.); +#43289 = EDGE_LOOP('',(#43290,#43297,#43298,#43305)); +#43290 = ORIENTED_EDGE('',*,*,#43291,.T.); +#43291 = EDGE_CURVE('',#41019,#40693,#43292,.T.); +#43292 = CIRCLE('',#43293,5.E-02); +#43293 = AXIS2_PLACEMENT_3D('',#43294,#43295,#43296); +#43294 = CARTESIAN_POINT('',(-4.825,1.35,0.11)); +#43295 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43296 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#43297 = ORIENTED_EDGE('',*,*,#40692,.T.); +#43298 = ORIENTED_EDGE('',*,*,#43299,.F.); +#43299 = EDGE_CURVE('',#41011,#40695,#43300,.T.); +#43300 = CIRCLE('',#43301,5.E-02); +#43301 = AXIS2_PLACEMENT_3D('',#43302,#43303,#43304); +#43302 = CARTESIAN_POINT('',(-4.675,1.35,0.11)); +#43303 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43304 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#43305 = ORIENTED_EDGE('',*,*,#41018,.F.); +#43306 = CYLINDRICAL_SURFACE('',#43307,5.E-02); +#43307 = AXIS2_PLACEMENT_3D('',#43308,#43309,#43310); +#43308 = CARTESIAN_POINT('',(-4.825,1.35,0.11)); +#43309 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43310 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#43311 = ADVANCED_FACE('',(#43312),#44024,.F.); +#43312 = FACE_BOUND('',#43313,.T.); +#43313 = EDGE_LOOP('',(#43314,#43315,#43323,#43331,#43339,#43347,#43355, + #43363,#43371,#43379,#43387,#43393,#43394,#43402,#43410,#43418, + #43426,#43434,#43442,#43450,#43458,#43466,#43474,#43482,#43490, + #43498,#43506,#43514,#43522,#43530,#43538,#43546,#43554,#43562, + #43570,#43578,#43586,#43594,#43602,#43610,#43618,#43626,#43634, + #43642,#43650,#43658,#43666,#43674,#43682,#43690,#43698,#43706, + #43714,#43722,#43730,#43738,#43746,#43754,#43762,#43770,#43778, + #43786,#43794,#43802,#43810,#43818,#43826,#43834,#43842,#43850, + #43858,#43866,#43874,#43882,#43890,#43898,#43906,#43914,#43922, + #43930,#43938,#43946,#43954,#43962,#43970,#43978,#43986,#43994, + #44000,#44001,#44009,#44015,#44016,#44017,#44018,#44019,#44020, + #44021,#44022,#44023)); +#43314 = ORIENTED_EDGE('',*,*,#39809,.F.); +#43315 = ORIENTED_EDGE('',*,*,#43316,.T.); +#43316 = EDGE_CURVE('',#39802,#43317,#43319,.T.); +#43317 = VERTEX_POINT('',#43318); +#43318 = CARTESIAN_POINT('',(6.77,1.,0.31)); +#43319 = LINE('',#43320,#43321); +#43320 = CARTESIAN_POINT('',(6.77,1.045602317761,0.31)); +#43321 = VECTOR('',#43322,1.); +#43322 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43323 = ORIENTED_EDGE('',*,*,#43324,.T.); +#43324 = EDGE_CURVE('',#43317,#43325,#43327,.T.); +#43325 = VERTEX_POINT('',#43326); +#43326 = CARTESIAN_POINT('',(5.825,1.,0.31)); +#43327 = LINE('',#43328,#43329); +#43328 = CARTESIAN_POINT('',(7.5,1.,0.31)); +#43329 = VECTOR('',#43330,1.); +#43330 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#43331 = ORIENTED_EDGE('',*,*,#43332,.F.); +#43332 = EDGE_CURVE('',#43333,#43325,#43335,.T.); +#43333 = VERTEX_POINT('',#43334); +#43334 = CARTESIAN_POINT('',(5.825,1.35,0.31)); +#43335 = LINE('',#43336,#43337); +#43336 = CARTESIAN_POINT('',(5.825,0.694863,0.31)); +#43337 = VECTOR('',#43338,1.); +#43338 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43339 = ORIENTED_EDGE('',*,*,#43340,.F.); +#43340 = EDGE_CURVE('',#43341,#43333,#43343,.T.); +#43341 = VERTEX_POINT('',#43342); +#43342 = CARTESIAN_POINT('',(5.675,1.35,0.31)); +#43343 = LINE('',#43344,#43345); +#43344 = CARTESIAN_POINT('',(8.,1.35,0.31)); +#43345 = VECTOR('',#43346,1.); +#43346 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43347 = ORIENTED_EDGE('',*,*,#43348,.T.); +#43348 = EDGE_CURVE('',#43341,#43349,#43351,.T.); +#43349 = VERTEX_POINT('',#43350); +#43350 = CARTESIAN_POINT('',(5.675,1.,0.31)); +#43351 = LINE('',#43352,#43353); +#43352 = CARTESIAN_POINT('',(5.675,0.694863,0.31)); +#43353 = VECTOR('',#43354,1.); +#43354 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43355 = ORIENTED_EDGE('',*,*,#43356,.F.); +#43356 = EDGE_CURVE('',#43357,#43349,#43359,.T.); +#43357 = VERTEX_POINT('',#43358); +#43358 = CARTESIAN_POINT('',(5.325,1.,0.31)); +#43359 = LINE('',#43360,#43361); +#43360 = CARTESIAN_POINT('',(7.5,1.,0.31)); +#43361 = VECTOR('',#43362,1.); +#43362 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43363 = ORIENTED_EDGE('',*,*,#43364,.F.); +#43364 = EDGE_CURVE('',#43365,#43357,#43367,.T.); +#43365 = VERTEX_POINT('',#43366); +#43366 = CARTESIAN_POINT('',(5.325,1.35,0.31)); +#43367 = LINE('',#43368,#43369); +#43368 = CARTESIAN_POINT('',(5.325,0.694863,0.31)); +#43369 = VECTOR('',#43370,1.); +#43370 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43371 = ORIENTED_EDGE('',*,*,#43372,.F.); +#43372 = EDGE_CURVE('',#43373,#43365,#43375,.T.); +#43373 = VERTEX_POINT('',#43374); +#43374 = CARTESIAN_POINT('',(5.175,1.35,0.31)); +#43375 = LINE('',#43376,#43377); +#43376 = CARTESIAN_POINT('',(8.,1.35,0.31)); +#43377 = VECTOR('',#43378,1.); +#43378 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43379 = ORIENTED_EDGE('',*,*,#43380,.T.); +#43380 = EDGE_CURVE('',#43373,#43381,#43383,.T.); +#43381 = VERTEX_POINT('',#43382); +#43382 = CARTESIAN_POINT('',(5.175,1.,0.31)); +#43383 = LINE('',#43384,#43385); +#43384 = CARTESIAN_POINT('',(5.175,0.694863,0.31)); +#43385 = VECTOR('',#43386,1.); +#43386 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43387 = ORIENTED_EDGE('',*,*,#43388,.F.); +#43388 = EDGE_CURVE('',#43239,#43381,#43389,.T.); +#43389 = LINE('',#43390,#43391); +#43390 = CARTESIAN_POINT('',(10.5,1.,0.31)); +#43391 = VECTOR('',#43392,1.); +#43392 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43393 = ORIENTED_EDGE('',*,*,#43238,.T.); +#43394 = ORIENTED_EDGE('',*,*,#43395,.F.); +#43395 = EDGE_CURVE('',#43396,#43231,#43398,.T.); +#43396 = VERTEX_POINT('',#43397); +#43397 = CARTESIAN_POINT('',(4.675,1.35,0.31)); +#43398 = LINE('',#43399,#43400); +#43399 = CARTESIAN_POINT('',(7.5,1.35,0.31)); +#43400 = VECTOR('',#43401,1.); +#43401 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43402 = ORIENTED_EDGE('',*,*,#43403,.T.); +#43403 = EDGE_CURVE('',#43396,#43404,#43406,.T.); +#43404 = VERTEX_POINT('',#43405); +#43405 = CARTESIAN_POINT('',(4.675,1.,0.31)); +#43406 = LINE('',#43407,#43408); +#43407 = CARTESIAN_POINT('',(4.675,0.694863,0.31)); +#43408 = VECTOR('',#43409,1.); +#43409 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43410 = ORIENTED_EDGE('',*,*,#43411,.F.); +#43411 = EDGE_CURVE('',#43412,#43404,#43414,.T.); +#43412 = VERTEX_POINT('',#43413); +#43413 = CARTESIAN_POINT('',(4.325,1.,0.31)); +#43414 = LINE('',#43415,#43416); +#43415 = CARTESIAN_POINT('',(10.,1.,0.31)); +#43416 = VECTOR('',#43417,1.); +#43417 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43418 = ORIENTED_EDGE('',*,*,#43419,.T.); +#43419 = EDGE_CURVE('',#43412,#43420,#43422,.T.); +#43420 = VERTEX_POINT('',#43421); +#43421 = CARTESIAN_POINT('',(4.325,1.35,0.31)); +#43422 = LINE('',#43423,#43424); +#43423 = CARTESIAN_POINT('',(4.325,0.694863,0.31)); +#43424 = VECTOR('',#43425,1.); +#43425 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43426 = ORIENTED_EDGE('',*,*,#43427,.F.); +#43427 = EDGE_CURVE('',#43428,#43420,#43430,.T.); +#43428 = VERTEX_POINT('',#43429); +#43429 = CARTESIAN_POINT('',(4.175,1.35,0.31)); +#43430 = LINE('',#43431,#43432); +#43431 = CARTESIAN_POINT('',(7.,1.35,0.31)); +#43432 = VECTOR('',#43433,1.); +#43433 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43434 = ORIENTED_EDGE('',*,*,#43435,.T.); +#43435 = EDGE_CURVE('',#43428,#43436,#43438,.T.); +#43436 = VERTEX_POINT('',#43437); +#43437 = CARTESIAN_POINT('',(4.175,1.,0.31)); +#43438 = LINE('',#43439,#43440); +#43439 = CARTESIAN_POINT('',(4.175,0.694863,0.31)); +#43440 = VECTOR('',#43441,1.); +#43441 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43442 = ORIENTED_EDGE('',*,*,#43443,.F.); +#43443 = EDGE_CURVE('',#43444,#43436,#43446,.T.); +#43444 = VERTEX_POINT('',#43445); +#43445 = CARTESIAN_POINT('',(3.825,1.,0.31)); +#43446 = LINE('',#43447,#43448); +#43447 = CARTESIAN_POINT('',(9.5,1.,0.31)); +#43448 = VECTOR('',#43449,1.); +#43449 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43450 = ORIENTED_EDGE('',*,*,#43451,.T.); +#43451 = EDGE_CURVE('',#43444,#43452,#43454,.T.); +#43452 = VERTEX_POINT('',#43453); +#43453 = CARTESIAN_POINT('',(3.825,1.35,0.31)); +#43454 = LINE('',#43455,#43456); +#43455 = CARTESIAN_POINT('',(3.825,0.694863,0.31)); +#43456 = VECTOR('',#43457,1.); +#43457 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43458 = ORIENTED_EDGE('',*,*,#43459,.F.); +#43459 = EDGE_CURVE('',#43460,#43452,#43462,.T.); +#43460 = VERTEX_POINT('',#43461); +#43461 = CARTESIAN_POINT('',(3.675,1.35,0.31)); +#43462 = LINE('',#43463,#43464); +#43463 = CARTESIAN_POINT('',(6.5,1.35,0.31)); +#43464 = VECTOR('',#43465,1.); +#43465 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43466 = ORIENTED_EDGE('',*,*,#43467,.T.); +#43467 = EDGE_CURVE('',#43460,#43468,#43470,.T.); +#43468 = VERTEX_POINT('',#43469); +#43469 = CARTESIAN_POINT('',(3.675,1.,0.31)); +#43470 = LINE('',#43471,#43472); +#43471 = CARTESIAN_POINT('',(3.675,0.694863,0.31)); +#43472 = VECTOR('',#43473,1.); +#43473 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43474 = ORIENTED_EDGE('',*,*,#43475,.F.); +#43475 = EDGE_CURVE('',#43476,#43468,#43478,.T.); +#43476 = VERTEX_POINT('',#43477); +#43477 = CARTESIAN_POINT('',(3.325,1.,0.31)); +#43478 = LINE('',#43479,#43480); +#43479 = CARTESIAN_POINT('',(9.,1.,0.31)); +#43480 = VECTOR('',#43481,1.); +#43481 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43482 = ORIENTED_EDGE('',*,*,#43483,.T.); +#43483 = EDGE_CURVE('',#43476,#43484,#43486,.T.); +#43484 = VERTEX_POINT('',#43485); +#43485 = CARTESIAN_POINT('',(3.325,1.35,0.31)); +#43486 = LINE('',#43487,#43488); +#43487 = CARTESIAN_POINT('',(3.325,0.694863,0.31)); +#43488 = VECTOR('',#43489,1.); +#43489 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43490 = ORIENTED_EDGE('',*,*,#43491,.F.); +#43491 = EDGE_CURVE('',#43492,#43484,#43494,.T.); +#43492 = VERTEX_POINT('',#43493); +#43493 = CARTESIAN_POINT('',(3.175,1.35,0.31)); +#43494 = LINE('',#43495,#43496); +#43495 = CARTESIAN_POINT('',(6.,1.35,0.31)); +#43496 = VECTOR('',#43497,1.); +#43497 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43498 = ORIENTED_EDGE('',*,*,#43499,.T.); +#43499 = EDGE_CURVE('',#43492,#43500,#43502,.T.); +#43500 = VERTEX_POINT('',#43501); +#43501 = CARTESIAN_POINT('',(3.175,1.,0.31)); +#43502 = LINE('',#43503,#43504); +#43503 = CARTESIAN_POINT('',(3.175,0.694863,0.31)); +#43504 = VECTOR('',#43505,1.); +#43505 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43506 = ORIENTED_EDGE('',*,*,#43507,.F.); +#43507 = EDGE_CURVE('',#43508,#43500,#43510,.T.); +#43508 = VERTEX_POINT('',#43509); +#43509 = CARTESIAN_POINT('',(2.825,1.,0.31)); +#43510 = LINE('',#43511,#43512); +#43511 = CARTESIAN_POINT('',(8.5,1.,0.31)); +#43512 = VECTOR('',#43513,1.); +#43513 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43514 = ORIENTED_EDGE('',*,*,#43515,.T.); +#43515 = EDGE_CURVE('',#43508,#43516,#43518,.T.); +#43516 = VERTEX_POINT('',#43517); +#43517 = CARTESIAN_POINT('',(2.825,1.35,0.31)); +#43518 = LINE('',#43519,#43520); +#43519 = CARTESIAN_POINT('',(2.825,0.694863,0.31)); +#43520 = VECTOR('',#43521,1.); +#43521 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43522 = ORIENTED_EDGE('',*,*,#43523,.F.); +#43523 = EDGE_CURVE('',#43524,#43516,#43526,.T.); +#43524 = VERTEX_POINT('',#43525); +#43525 = CARTESIAN_POINT('',(2.675,1.35,0.31)); +#43526 = LINE('',#43527,#43528); +#43527 = CARTESIAN_POINT('',(5.5,1.35,0.31)); +#43528 = VECTOR('',#43529,1.); +#43529 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43530 = ORIENTED_EDGE('',*,*,#43531,.T.); +#43531 = EDGE_CURVE('',#43524,#43532,#43534,.T.); +#43532 = VERTEX_POINT('',#43533); +#43533 = CARTESIAN_POINT('',(2.675,1.,0.31)); +#43534 = LINE('',#43535,#43536); +#43535 = CARTESIAN_POINT('',(2.675,0.694863,0.31)); +#43536 = VECTOR('',#43537,1.); +#43537 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43538 = ORIENTED_EDGE('',*,*,#43539,.F.); +#43539 = EDGE_CURVE('',#43540,#43532,#43542,.T.); +#43540 = VERTEX_POINT('',#43541); +#43541 = CARTESIAN_POINT('',(2.325,1.,0.31)); +#43542 = LINE('',#43543,#43544); +#43543 = CARTESIAN_POINT('',(8.,1.,0.31)); +#43544 = VECTOR('',#43545,1.); +#43545 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43546 = ORIENTED_EDGE('',*,*,#43547,.T.); +#43547 = EDGE_CURVE('',#43540,#43548,#43550,.T.); +#43548 = VERTEX_POINT('',#43549); +#43549 = CARTESIAN_POINT('',(2.325,1.35,0.31)); +#43550 = LINE('',#43551,#43552); +#43551 = CARTESIAN_POINT('',(2.325,0.694863,0.31)); +#43552 = VECTOR('',#43553,1.); +#43553 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43554 = ORIENTED_EDGE('',*,*,#43555,.F.); +#43555 = EDGE_CURVE('',#43556,#43548,#43558,.T.); +#43556 = VERTEX_POINT('',#43557); +#43557 = CARTESIAN_POINT('',(2.175,1.35,0.31)); +#43558 = LINE('',#43559,#43560); +#43559 = CARTESIAN_POINT('',(5.,1.35,0.31)); +#43560 = VECTOR('',#43561,1.); +#43561 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43562 = ORIENTED_EDGE('',*,*,#43563,.T.); +#43563 = EDGE_CURVE('',#43556,#43564,#43566,.T.); +#43564 = VERTEX_POINT('',#43565); +#43565 = CARTESIAN_POINT('',(2.175,1.,0.31)); +#43566 = LINE('',#43567,#43568); +#43567 = CARTESIAN_POINT('',(2.175,0.694863,0.31)); +#43568 = VECTOR('',#43569,1.); +#43569 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43570 = ORIENTED_EDGE('',*,*,#43571,.F.); +#43571 = EDGE_CURVE('',#43572,#43564,#43574,.T.); +#43572 = VERTEX_POINT('',#43573); +#43573 = CARTESIAN_POINT('',(1.825,1.,0.31)); +#43574 = LINE('',#43575,#43576); +#43575 = CARTESIAN_POINT('',(7.5,1.,0.31)); +#43576 = VECTOR('',#43577,1.); +#43577 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43578 = ORIENTED_EDGE('',*,*,#43579,.T.); +#43579 = EDGE_CURVE('',#43572,#43580,#43582,.T.); +#43580 = VERTEX_POINT('',#43581); +#43581 = CARTESIAN_POINT('',(1.825,1.35,0.31)); +#43582 = LINE('',#43583,#43584); +#43583 = CARTESIAN_POINT('',(1.825,0.694863,0.31)); +#43584 = VECTOR('',#43585,1.); +#43585 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43586 = ORIENTED_EDGE('',*,*,#43587,.F.); +#43587 = EDGE_CURVE('',#43588,#43580,#43590,.T.); +#43588 = VERTEX_POINT('',#43589); +#43589 = CARTESIAN_POINT('',(1.675,1.35,0.31)); +#43590 = LINE('',#43591,#43592); +#43591 = CARTESIAN_POINT('',(4.5,1.35,0.31)); +#43592 = VECTOR('',#43593,1.); +#43593 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43594 = ORIENTED_EDGE('',*,*,#43595,.T.); +#43595 = EDGE_CURVE('',#43588,#43596,#43598,.T.); +#43596 = VERTEX_POINT('',#43597); +#43597 = CARTESIAN_POINT('',(1.675,1.,0.31)); +#43598 = LINE('',#43599,#43600); +#43599 = CARTESIAN_POINT('',(1.675,0.694863,0.31)); +#43600 = VECTOR('',#43601,1.); +#43601 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43602 = ORIENTED_EDGE('',*,*,#43603,.F.); +#43603 = EDGE_CURVE('',#43604,#43596,#43606,.T.); +#43604 = VERTEX_POINT('',#43605); +#43605 = CARTESIAN_POINT('',(1.325,1.,0.31)); +#43606 = LINE('',#43607,#43608); +#43607 = CARTESIAN_POINT('',(7.,1.,0.31)); +#43608 = VECTOR('',#43609,1.); +#43609 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43610 = ORIENTED_EDGE('',*,*,#43611,.T.); +#43611 = EDGE_CURVE('',#43604,#43612,#43614,.T.); +#43612 = VERTEX_POINT('',#43613); +#43613 = CARTESIAN_POINT('',(1.325,1.35,0.31)); +#43614 = LINE('',#43615,#43616); +#43615 = CARTESIAN_POINT('',(1.325,0.694863,0.31)); +#43616 = VECTOR('',#43617,1.); +#43617 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43618 = ORIENTED_EDGE('',*,*,#43619,.F.); +#43619 = EDGE_CURVE('',#43620,#43612,#43622,.T.); +#43620 = VERTEX_POINT('',#43621); +#43621 = CARTESIAN_POINT('',(1.175,1.35,0.31)); +#43622 = LINE('',#43623,#43624); +#43623 = CARTESIAN_POINT('',(4.,1.35,0.31)); +#43624 = VECTOR('',#43625,1.); +#43625 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43626 = ORIENTED_EDGE('',*,*,#43627,.T.); +#43627 = EDGE_CURVE('',#43620,#43628,#43630,.T.); +#43628 = VERTEX_POINT('',#43629); +#43629 = CARTESIAN_POINT('',(1.175,1.,0.31)); +#43630 = LINE('',#43631,#43632); +#43631 = CARTESIAN_POINT('',(1.175,0.694863,0.31)); +#43632 = VECTOR('',#43633,1.); +#43633 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43634 = ORIENTED_EDGE('',*,*,#43635,.F.); +#43635 = EDGE_CURVE('',#43636,#43628,#43638,.T.); +#43636 = VERTEX_POINT('',#43637); +#43637 = CARTESIAN_POINT('',(0.825,1.,0.31)); +#43638 = LINE('',#43639,#43640); +#43639 = CARTESIAN_POINT('',(6.5,1.,0.31)); +#43640 = VECTOR('',#43641,1.); +#43641 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43642 = ORIENTED_EDGE('',*,*,#43643,.T.); +#43643 = EDGE_CURVE('',#43636,#43644,#43646,.T.); +#43644 = VERTEX_POINT('',#43645); +#43645 = CARTESIAN_POINT('',(0.825,1.35,0.31)); +#43646 = LINE('',#43647,#43648); +#43647 = CARTESIAN_POINT('',(0.825,0.694863,0.31)); +#43648 = VECTOR('',#43649,1.); +#43649 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43650 = ORIENTED_EDGE('',*,*,#43651,.F.); +#43651 = EDGE_CURVE('',#43652,#43644,#43654,.T.); +#43652 = VERTEX_POINT('',#43653); +#43653 = CARTESIAN_POINT('',(0.675,1.35,0.31)); +#43654 = LINE('',#43655,#43656); +#43655 = CARTESIAN_POINT('',(3.5,1.35,0.31)); +#43656 = VECTOR('',#43657,1.); +#43657 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43658 = ORIENTED_EDGE('',*,*,#43659,.T.); +#43659 = EDGE_CURVE('',#43652,#43660,#43662,.T.); +#43660 = VERTEX_POINT('',#43661); +#43661 = CARTESIAN_POINT('',(0.675,1.,0.31)); +#43662 = LINE('',#43663,#43664); +#43663 = CARTESIAN_POINT('',(0.675,0.694863,0.31)); +#43664 = VECTOR('',#43665,1.); +#43665 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43666 = ORIENTED_EDGE('',*,*,#43667,.F.); +#43667 = EDGE_CURVE('',#43668,#43660,#43670,.T.); +#43668 = VERTEX_POINT('',#43669); +#43669 = CARTESIAN_POINT('',(0.325,1.,0.31)); +#43670 = LINE('',#43671,#43672); +#43671 = CARTESIAN_POINT('',(6.,1.,0.31)); +#43672 = VECTOR('',#43673,1.); +#43673 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43674 = ORIENTED_EDGE('',*,*,#43675,.T.); +#43675 = EDGE_CURVE('',#43668,#43676,#43678,.T.); +#43676 = VERTEX_POINT('',#43677); +#43677 = CARTESIAN_POINT('',(0.325,1.35,0.31)); +#43678 = LINE('',#43679,#43680); +#43679 = CARTESIAN_POINT('',(0.325,0.694863,0.31)); +#43680 = VECTOR('',#43681,1.); +#43681 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43682 = ORIENTED_EDGE('',*,*,#43683,.F.); +#43683 = EDGE_CURVE('',#43684,#43676,#43686,.T.); +#43684 = VERTEX_POINT('',#43685); +#43685 = CARTESIAN_POINT('',(0.175,1.35,0.31)); +#43686 = LINE('',#43687,#43688); +#43687 = CARTESIAN_POINT('',(3.,1.35,0.31)); +#43688 = VECTOR('',#43689,1.); +#43689 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43690 = ORIENTED_EDGE('',*,*,#43691,.T.); +#43691 = EDGE_CURVE('',#43684,#43692,#43694,.T.); +#43692 = VERTEX_POINT('',#43693); +#43693 = CARTESIAN_POINT('',(0.175,1.,0.31)); +#43694 = LINE('',#43695,#43696); +#43695 = CARTESIAN_POINT('',(0.175,0.694863,0.31)); +#43696 = VECTOR('',#43697,1.); +#43697 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43698 = ORIENTED_EDGE('',*,*,#43699,.F.); +#43699 = EDGE_CURVE('',#43700,#43692,#43702,.T.); +#43700 = VERTEX_POINT('',#43701); +#43701 = CARTESIAN_POINT('',(-0.175,1.,0.31)); +#43702 = LINE('',#43703,#43704); +#43703 = CARTESIAN_POINT('',(5.5,1.,0.31)); +#43704 = VECTOR('',#43705,1.); +#43705 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43706 = ORIENTED_EDGE('',*,*,#43707,.T.); +#43707 = EDGE_CURVE('',#43700,#43708,#43710,.T.); +#43708 = VERTEX_POINT('',#43709); +#43709 = CARTESIAN_POINT('',(-0.175,1.35,0.31)); +#43710 = LINE('',#43711,#43712); +#43711 = CARTESIAN_POINT('',(-0.175,0.694863,0.31)); +#43712 = VECTOR('',#43713,1.); +#43713 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43714 = ORIENTED_EDGE('',*,*,#43715,.F.); +#43715 = EDGE_CURVE('',#43716,#43708,#43718,.T.); +#43716 = VERTEX_POINT('',#43717); +#43717 = CARTESIAN_POINT('',(-0.325,1.35,0.31)); +#43718 = LINE('',#43719,#43720); +#43719 = CARTESIAN_POINT('',(2.5,1.35,0.31)); +#43720 = VECTOR('',#43721,1.); +#43721 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43722 = ORIENTED_EDGE('',*,*,#43723,.T.); +#43723 = EDGE_CURVE('',#43716,#43724,#43726,.T.); +#43724 = VERTEX_POINT('',#43725); +#43725 = CARTESIAN_POINT('',(-0.325,1.,0.31)); +#43726 = LINE('',#43727,#43728); +#43727 = CARTESIAN_POINT('',(-0.325,0.694863,0.31)); +#43728 = VECTOR('',#43729,1.); +#43729 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43730 = ORIENTED_EDGE('',*,*,#43731,.F.); +#43731 = EDGE_CURVE('',#43732,#43724,#43734,.T.); +#43732 = VERTEX_POINT('',#43733); +#43733 = CARTESIAN_POINT('',(-0.675,1.,0.31)); +#43734 = LINE('',#43735,#43736); +#43735 = CARTESIAN_POINT('',(5.,1.,0.31)); +#43736 = VECTOR('',#43737,1.); +#43737 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43738 = ORIENTED_EDGE('',*,*,#43739,.T.); +#43739 = EDGE_CURVE('',#43732,#43740,#43742,.T.); +#43740 = VERTEX_POINT('',#43741); +#43741 = CARTESIAN_POINT('',(-0.675,1.35,0.31)); +#43742 = LINE('',#43743,#43744); +#43743 = CARTESIAN_POINT('',(-0.675,0.694863,0.31)); +#43744 = VECTOR('',#43745,1.); +#43745 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43746 = ORIENTED_EDGE('',*,*,#43747,.F.); +#43747 = EDGE_CURVE('',#43748,#43740,#43750,.T.); +#43748 = VERTEX_POINT('',#43749); +#43749 = CARTESIAN_POINT('',(-0.825,1.35,0.31)); +#43750 = LINE('',#43751,#43752); +#43751 = CARTESIAN_POINT('',(2.,1.35,0.31)); +#43752 = VECTOR('',#43753,1.); +#43753 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43754 = ORIENTED_EDGE('',*,*,#43755,.T.); +#43755 = EDGE_CURVE('',#43748,#43756,#43758,.T.); +#43756 = VERTEX_POINT('',#43757); +#43757 = CARTESIAN_POINT('',(-0.825,1.,0.31)); +#43758 = LINE('',#43759,#43760); +#43759 = CARTESIAN_POINT('',(-0.825,0.694863,0.31)); +#43760 = VECTOR('',#43761,1.); +#43761 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43762 = ORIENTED_EDGE('',*,*,#43763,.F.); +#43763 = EDGE_CURVE('',#43764,#43756,#43766,.T.); +#43764 = VERTEX_POINT('',#43765); +#43765 = CARTESIAN_POINT('',(-1.175,1.,0.31)); +#43766 = LINE('',#43767,#43768); +#43767 = CARTESIAN_POINT('',(4.5,1.,0.31)); +#43768 = VECTOR('',#43769,1.); +#43769 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43770 = ORIENTED_EDGE('',*,*,#43771,.T.); +#43771 = EDGE_CURVE('',#43764,#43772,#43774,.T.); +#43772 = VERTEX_POINT('',#43773); +#43773 = CARTESIAN_POINT('',(-1.175,1.35,0.31)); +#43774 = LINE('',#43775,#43776); +#43775 = CARTESIAN_POINT('',(-1.175,0.694863,0.31)); +#43776 = VECTOR('',#43777,1.); +#43777 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43778 = ORIENTED_EDGE('',*,*,#43779,.F.); +#43779 = EDGE_CURVE('',#43780,#43772,#43782,.T.); +#43780 = VERTEX_POINT('',#43781); +#43781 = CARTESIAN_POINT('',(-1.325,1.35,0.31)); +#43782 = LINE('',#43783,#43784); +#43783 = CARTESIAN_POINT('',(1.5,1.35,0.31)); +#43784 = VECTOR('',#43785,1.); +#43785 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43786 = ORIENTED_EDGE('',*,*,#43787,.T.); +#43787 = EDGE_CURVE('',#43780,#43788,#43790,.T.); +#43788 = VERTEX_POINT('',#43789); +#43789 = CARTESIAN_POINT('',(-1.325,1.,0.31)); +#43790 = LINE('',#43791,#43792); +#43791 = CARTESIAN_POINT('',(-1.325,0.694863,0.31)); +#43792 = VECTOR('',#43793,1.); +#43793 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43794 = ORIENTED_EDGE('',*,*,#43795,.F.); +#43795 = EDGE_CURVE('',#43796,#43788,#43798,.T.); +#43796 = VERTEX_POINT('',#43797); +#43797 = CARTESIAN_POINT('',(-1.675,1.,0.31)); +#43798 = LINE('',#43799,#43800); +#43799 = CARTESIAN_POINT('',(4.,1.,0.31)); +#43800 = VECTOR('',#43801,1.); +#43801 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43802 = ORIENTED_EDGE('',*,*,#43803,.T.); +#43803 = EDGE_CURVE('',#43796,#43804,#43806,.T.); +#43804 = VERTEX_POINT('',#43805); +#43805 = CARTESIAN_POINT('',(-1.675,1.35,0.31)); +#43806 = LINE('',#43807,#43808); +#43807 = CARTESIAN_POINT('',(-1.675,0.694863,0.31)); +#43808 = VECTOR('',#43809,1.); +#43809 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43810 = ORIENTED_EDGE('',*,*,#43811,.F.); +#43811 = EDGE_CURVE('',#43812,#43804,#43814,.T.); +#43812 = VERTEX_POINT('',#43813); +#43813 = CARTESIAN_POINT('',(-1.825,1.35,0.31)); +#43814 = LINE('',#43815,#43816); +#43815 = CARTESIAN_POINT('',(1.,1.35,0.31)); +#43816 = VECTOR('',#43817,1.); +#43817 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43818 = ORIENTED_EDGE('',*,*,#43819,.T.); +#43819 = EDGE_CURVE('',#43812,#43820,#43822,.T.); +#43820 = VERTEX_POINT('',#43821); +#43821 = CARTESIAN_POINT('',(-1.825,1.,0.31)); +#43822 = LINE('',#43823,#43824); +#43823 = CARTESIAN_POINT('',(-1.825,0.694863,0.31)); +#43824 = VECTOR('',#43825,1.); +#43825 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43826 = ORIENTED_EDGE('',*,*,#43827,.F.); +#43827 = EDGE_CURVE('',#43828,#43820,#43830,.T.); +#43828 = VERTEX_POINT('',#43829); +#43829 = CARTESIAN_POINT('',(-2.175,1.,0.31)); +#43830 = LINE('',#43831,#43832); +#43831 = CARTESIAN_POINT('',(3.5,1.,0.31)); +#43832 = VECTOR('',#43833,1.); +#43833 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43834 = ORIENTED_EDGE('',*,*,#43835,.T.); +#43835 = EDGE_CURVE('',#43828,#43836,#43838,.T.); +#43836 = VERTEX_POINT('',#43837); +#43837 = CARTESIAN_POINT('',(-2.175,1.35,0.31)); +#43838 = LINE('',#43839,#43840); +#43839 = CARTESIAN_POINT('',(-2.175,0.694863,0.31)); +#43840 = VECTOR('',#43841,1.); +#43841 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43842 = ORIENTED_EDGE('',*,*,#43843,.F.); +#43843 = EDGE_CURVE('',#43844,#43836,#43846,.T.); +#43844 = VERTEX_POINT('',#43845); +#43845 = CARTESIAN_POINT('',(-2.325,1.35,0.31)); +#43846 = LINE('',#43847,#43848); +#43847 = CARTESIAN_POINT('',(0.5,1.35,0.31)); +#43848 = VECTOR('',#43849,1.); +#43849 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43850 = ORIENTED_EDGE('',*,*,#43851,.T.); +#43851 = EDGE_CURVE('',#43844,#43852,#43854,.T.); +#43852 = VERTEX_POINT('',#43853); +#43853 = CARTESIAN_POINT('',(-2.325,1.,0.31)); +#43854 = LINE('',#43855,#43856); +#43855 = CARTESIAN_POINT('',(-2.325,0.694863,0.31)); +#43856 = VECTOR('',#43857,1.); +#43857 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43858 = ORIENTED_EDGE('',*,*,#43859,.F.); +#43859 = EDGE_CURVE('',#43860,#43852,#43862,.T.); +#43860 = VERTEX_POINT('',#43861); +#43861 = CARTESIAN_POINT('',(-2.675,1.,0.31)); +#43862 = LINE('',#43863,#43864); +#43863 = CARTESIAN_POINT('',(3.,1.,0.31)); +#43864 = VECTOR('',#43865,1.); +#43865 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43866 = ORIENTED_EDGE('',*,*,#43867,.T.); +#43867 = EDGE_CURVE('',#43860,#43868,#43870,.T.); +#43868 = VERTEX_POINT('',#43869); +#43869 = CARTESIAN_POINT('',(-2.675,1.35,0.31)); +#43870 = LINE('',#43871,#43872); +#43871 = CARTESIAN_POINT('',(-2.675,0.694863,0.31)); +#43872 = VECTOR('',#43873,1.); +#43873 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43874 = ORIENTED_EDGE('',*,*,#43875,.F.); +#43875 = EDGE_CURVE('',#43876,#43868,#43878,.T.); +#43876 = VERTEX_POINT('',#43877); +#43877 = CARTESIAN_POINT('',(-2.825,1.35,0.31)); +#43878 = LINE('',#43879,#43880); +#43879 = CARTESIAN_POINT('',(6.661338147751E-16,1.35,0.31)); +#43880 = VECTOR('',#43881,1.); +#43881 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43882 = ORIENTED_EDGE('',*,*,#43883,.T.); +#43883 = EDGE_CURVE('',#43876,#43884,#43886,.T.); +#43884 = VERTEX_POINT('',#43885); +#43885 = CARTESIAN_POINT('',(-2.825,1.,0.31)); +#43886 = LINE('',#43887,#43888); +#43887 = CARTESIAN_POINT('',(-2.825,0.694863,0.31)); +#43888 = VECTOR('',#43889,1.); +#43889 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43890 = ORIENTED_EDGE('',*,*,#43891,.F.); +#43891 = EDGE_CURVE('',#43892,#43884,#43894,.T.); +#43892 = VERTEX_POINT('',#43893); +#43893 = CARTESIAN_POINT('',(-3.175,1.,0.31)); +#43894 = LINE('',#43895,#43896); +#43895 = CARTESIAN_POINT('',(2.5,1.,0.31)); +#43896 = VECTOR('',#43897,1.); +#43897 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43898 = ORIENTED_EDGE('',*,*,#43899,.T.); +#43899 = EDGE_CURVE('',#43892,#43900,#43902,.T.); +#43900 = VERTEX_POINT('',#43901); +#43901 = CARTESIAN_POINT('',(-3.175,1.35,0.31)); +#43902 = LINE('',#43903,#43904); +#43903 = CARTESIAN_POINT('',(-3.175,0.694863,0.31)); +#43904 = VECTOR('',#43905,1.); +#43905 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43906 = ORIENTED_EDGE('',*,*,#43907,.F.); +#43907 = EDGE_CURVE('',#43908,#43900,#43910,.T.); +#43908 = VERTEX_POINT('',#43909); +#43909 = CARTESIAN_POINT('',(-3.325,1.35,0.31)); +#43910 = LINE('',#43911,#43912); +#43911 = CARTESIAN_POINT('',(-0.5,1.35,0.31)); +#43912 = VECTOR('',#43913,1.); +#43913 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43914 = ORIENTED_EDGE('',*,*,#43915,.T.); +#43915 = EDGE_CURVE('',#43908,#43916,#43918,.T.); +#43916 = VERTEX_POINT('',#43917); +#43917 = CARTESIAN_POINT('',(-3.325,1.,0.31)); +#43918 = LINE('',#43919,#43920); +#43919 = CARTESIAN_POINT('',(-3.325,0.694863,0.31)); +#43920 = VECTOR('',#43921,1.); +#43921 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43922 = ORIENTED_EDGE('',*,*,#43923,.F.); +#43923 = EDGE_CURVE('',#43924,#43916,#43926,.T.); +#43924 = VERTEX_POINT('',#43925); +#43925 = CARTESIAN_POINT('',(-3.675,1.,0.31)); +#43926 = LINE('',#43927,#43928); +#43927 = CARTESIAN_POINT('',(2.,1.,0.31)); +#43928 = VECTOR('',#43929,1.); +#43929 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43930 = ORIENTED_EDGE('',*,*,#43931,.T.); +#43931 = EDGE_CURVE('',#43924,#43932,#43934,.T.); +#43932 = VERTEX_POINT('',#43933); +#43933 = CARTESIAN_POINT('',(-3.675,1.35,0.31)); +#43934 = LINE('',#43935,#43936); +#43935 = CARTESIAN_POINT('',(-3.675,0.694863,0.31)); +#43936 = VECTOR('',#43937,1.); +#43937 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43938 = ORIENTED_EDGE('',*,*,#43939,.F.); +#43939 = EDGE_CURVE('',#43940,#43932,#43942,.T.); +#43940 = VERTEX_POINT('',#43941); +#43941 = CARTESIAN_POINT('',(-3.825,1.35,0.31)); +#43942 = LINE('',#43943,#43944); +#43943 = CARTESIAN_POINT('',(-1.,1.35,0.31)); +#43944 = VECTOR('',#43945,1.); +#43945 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43946 = ORIENTED_EDGE('',*,*,#43947,.T.); +#43947 = EDGE_CURVE('',#43940,#43948,#43950,.T.); +#43948 = VERTEX_POINT('',#43949); +#43949 = CARTESIAN_POINT('',(-3.825,1.,0.31)); +#43950 = LINE('',#43951,#43952); +#43951 = CARTESIAN_POINT('',(-3.825,0.694863,0.31)); +#43952 = VECTOR('',#43953,1.); +#43953 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43954 = ORIENTED_EDGE('',*,*,#43955,.F.); +#43955 = EDGE_CURVE('',#43956,#43948,#43958,.T.); +#43956 = VERTEX_POINT('',#43957); +#43957 = CARTESIAN_POINT('',(-4.175,1.,0.31)); +#43958 = LINE('',#43959,#43960); +#43959 = CARTESIAN_POINT('',(1.5,1.,0.31)); +#43960 = VECTOR('',#43961,1.); +#43961 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43962 = ORIENTED_EDGE('',*,*,#43963,.T.); +#43963 = EDGE_CURVE('',#43956,#43964,#43966,.T.); +#43964 = VERTEX_POINT('',#43965); +#43965 = CARTESIAN_POINT('',(-4.175,1.35,0.31)); +#43966 = LINE('',#43967,#43968); +#43967 = CARTESIAN_POINT('',(-4.175,0.694863,0.31)); +#43968 = VECTOR('',#43969,1.); +#43969 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#43970 = ORIENTED_EDGE('',*,*,#43971,.F.); +#43971 = EDGE_CURVE('',#43972,#43964,#43974,.T.); +#43972 = VERTEX_POINT('',#43973); +#43973 = CARTESIAN_POINT('',(-4.325,1.35,0.31)); +#43974 = LINE('',#43975,#43976); +#43975 = CARTESIAN_POINT('',(-1.5,1.35,0.31)); +#43976 = VECTOR('',#43977,1.); +#43977 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43978 = ORIENTED_EDGE('',*,*,#43979,.T.); +#43979 = EDGE_CURVE('',#43972,#43980,#43982,.T.); +#43980 = VERTEX_POINT('',#43981); +#43981 = CARTESIAN_POINT('',(-4.325,1.,0.31)); +#43982 = LINE('',#43983,#43984); +#43983 = CARTESIAN_POINT('',(-4.325,0.694863,0.31)); +#43984 = VECTOR('',#43985,1.); +#43985 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#43986 = ORIENTED_EDGE('',*,*,#43987,.F.); +#43987 = EDGE_CURVE('',#43988,#43980,#43990,.T.); +#43988 = VERTEX_POINT('',#43989); +#43989 = CARTESIAN_POINT('',(-4.675,1.,0.31)); +#43990 = LINE('',#43991,#43992); +#43991 = CARTESIAN_POINT('',(1.,1.,0.31)); +#43992 = VECTOR('',#43993,1.); +#43993 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#43994 = ORIENTED_EDGE('',*,*,#43995,.T.); +#43995 = EDGE_CURVE('',#43988,#41003,#43996,.T.); +#43996 = LINE('',#43997,#43998); +#43997 = CARTESIAN_POINT('',(-4.675,0.694863,0.31)); +#43998 = VECTOR('',#43999,1.); +#43999 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#44000 = ORIENTED_EDGE('',*,*,#41000,.F.); +#44001 = ORIENTED_EDGE('',*,*,#44002,.T.); +#44002 = EDGE_CURVE('',#41001,#44003,#44005,.T.); +#44003 = VERTEX_POINT('',#44004); +#44004 = CARTESIAN_POINT('',(-4.825,1.,0.31)); +#44005 = LINE('',#44006,#44007); +#44006 = CARTESIAN_POINT('',(-4.825,0.694863,0.31)); +#44007 = VECTOR('',#44008,1.); +#44008 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#44009 = ORIENTED_EDGE('',*,*,#44010,.F.); +#44010 = EDGE_CURVE('',#40296,#44003,#44011,.T.); +#44011 = LINE('',#44012,#44013); +#44012 = CARTESIAN_POINT('',(0.5,1.,0.31)); +#44013 = VECTOR('',#44014,1.); +#44014 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44015 = ORIENTED_EDGE('',*,*,#40295,.F.); +#44016 = ORIENTED_EDGE('',*,*,#40317,.F.); +#44017 = ORIENTED_EDGE('',*,*,#40378,.T.); +#44018 = ORIENTED_EDGE('',*,*,#40205,.F.); +#44019 = ORIENTED_EDGE('',*,*,#40023,.F.); +#44020 = ORIENTED_EDGE('',*,*,#41352,.T.); +#44021 = ORIENTED_EDGE('',*,*,#40142,.T.); +#44022 = ORIENTED_EDGE('',*,*,#39933,.F.); +#44023 = ORIENTED_EDGE('',*,*,#39466,.F.); +#44024 = PLANE('',#44025); +#44025 = AXIS2_PLACEMENT_3D('',#44026,#44027,#44028); +#44026 = CARTESIAN_POINT('',(0.85,1.673724317761,0.31)); +#44027 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#44028 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44029 = ADVANCED_FACE('',(#44030),#44055,.T.); +#44030 = FACE_BOUND('',#44031,.T.); +#44031 = EDGE_LOOP('',(#44032,#44040,#44048,#44054)); +#44032 = ORIENTED_EDGE('',*,*,#44033,.F.); +#44033 = EDGE_CURVE('',#44034,#43125,#44036,.T.); +#44034 = VERTEX_POINT('',#44035); +#44035 = CARTESIAN_POINT('',(5.675,1.3,5.E-02)); +#44036 = LINE('',#44037,#44038); +#44037 = CARTESIAN_POINT('',(5.675,1.3,5.E-02)); +#44038 = VECTOR('',#44039,1.); +#44039 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44040 = ORIENTED_EDGE('',*,*,#44041,.T.); +#44041 = EDGE_CURVE('',#44034,#44042,#44044,.T.); +#44042 = VERTEX_POINT('',#44043); +#44043 = CARTESIAN_POINT('',(5.825,1.3,5.E-02)); +#44044 = LINE('',#44045,#44046); +#44045 = CARTESIAN_POINT('',(5.675,1.3,5.E-02)); +#44046 = VECTOR('',#44047,1.); +#44047 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44048 = ORIENTED_EDGE('',*,*,#44049,.T.); +#44049 = EDGE_CURVE('',#44042,#43133,#44050,.T.); +#44050 = LINE('',#44051,#44052); +#44051 = CARTESIAN_POINT('',(5.825,1.3,5.E-02)); +#44052 = VECTOR('',#44053,1.); +#44053 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44054 = ORIENTED_EDGE('',*,*,#43132,.F.); +#44055 = PLANE('',#44056); +#44056 = AXIS2_PLACEMENT_3D('',#44057,#44058,#44059); +#44057 = CARTESIAN_POINT('',(5.675,1.3,5.E-02)); +#44058 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#44059 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44060 = ADVANCED_FACE('',(#44061),#44072,.F.); +#44061 = FACE_BOUND('',#44062,.T.); +#44062 = EDGE_LOOP('',(#44063,#44064,#44065,#44066)); +#44063 = ORIENTED_EDGE('',*,*,#39657,.T.); +#44064 = ORIENTED_EDGE('',*,*,#39433,.T.); +#44065 = ORIENTED_EDGE('',*,*,#41222,.T.); +#44066 = ORIENTED_EDGE('',*,*,#44067,.F.); +#44067 = EDGE_CURVE('',#39658,#41223,#44068,.T.); +#44068 = LINE('',#44069,#44070); +#44069 = CARTESIAN_POINT('',(6.77,0.46,0.841614)); +#44070 = VECTOR('',#44071,1.); +#44071 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44072 = PLANE('',#44073); +#44073 = AXIS2_PLACEMENT_3D('',#44074,#44075,#44076); +#44074 = CARTESIAN_POINT('',(5.25,0.46,0.89)); +#44075 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#44076 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#44077 = ADVANCED_FACE('',(#44078),#44106,.T.); +#44078 = FACE_BOUND('',#44079,.T.); +#44079 = EDGE_LOOP('',(#44080,#44081,#44082,#44083,#44089,#44090,#44096, + #44097,#44098,#44099,#44100)); +#44080 = ORIENTED_EDGE('',*,*,#41113,.T.); +#44081 = ORIENTED_EDGE('',*,*,#41588,.F.); +#44082 = ORIENTED_EDGE('',*,*,#39730,.T.); +#44083 = ORIENTED_EDGE('',*,*,#44084,.F.); +#44084 = EDGE_CURVE('',#41306,#39723,#44085,.T.); +#44085 = LINE('',#44086,#44087); +#44086 = CARTESIAN_POINT('',(-4.675,0.92,0.841614)); +#44087 = VECTOR('',#44088,1.); +#44088 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44089 = ORIENTED_EDGE('',*,*,#41305,.F.); +#44090 = ORIENTED_EDGE('',*,*,#44091,.F.); +#44091 = EDGE_CURVE('',#40703,#41298,#44092,.T.); +#44092 = LINE('',#44093,#44094); +#44093 = CARTESIAN_POINT('',(-4.675,0.694863,-0.555137)); +#44094 = VECTOR('',#44095,1.); +#44095 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44096 = ORIENTED_EDGE('',*,*,#40702,.F.); +#44097 = ORIENTED_EDGE('',*,*,#43299,.F.); +#44098 = ORIENTED_EDGE('',*,*,#41010,.F.); +#44099 = ORIENTED_EDGE('',*,*,#43995,.F.); +#44100 = ORIENTED_EDGE('',*,*,#44101,.T.); +#44101 = EDGE_CURVE('',#43988,#39842,#44102,.T.); +#44102 = LINE('',#44103,#44104); +#44103 = CARTESIAN_POINT('',(-4.675,1.,0.841614)); +#44104 = VECTOR('',#44105,1.); +#44105 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44106 = PLANE('',#44107); +#44107 = AXIS2_PLACEMENT_3D('',#44108,#44109,#44110); +#44108 = CARTESIAN_POINT('',(-4.675,1.245779075398,0.170500231015)); +#44109 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44110 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#44111 = ADVANCED_FACE('',(#44112),#44137,.F.); +#44112 = FACE_BOUND('',#44113,.T.); +#44113 = EDGE_LOOP('',(#44114,#44115,#44123,#44131)); +#44114 = ORIENTED_EDGE('',*,*,#43092,.T.); +#44115 = ORIENTED_EDGE('',*,*,#44116,.T.); +#44116 = EDGE_CURVE('',#43085,#44117,#44119,.T.); +#44117 = VERTEX_POINT('',#44118); +#44118 = CARTESIAN_POINT('',(5.9,0.92,8.E-02)); +#44119 = LINE('',#44120,#44121); +#44120 = CARTESIAN_POINT('',(5.9511675,0.694863,2.88325E-02)); +#44121 = VECTOR('',#44122,1.); +#44122 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#44123 = ORIENTED_EDGE('',*,*,#44124,.T.); +#44124 = EDGE_CURVE('',#44117,#44125,#44127,.T.); +#44125 = VERTEX_POINT('',#44126); +#44126 = CARTESIAN_POINT('',(5.9,1.,7.999999999999E-02)); +#44127 = LINE('',#44128,#44129); +#44128 = CARTESIAN_POINT('',(5.9,0.694863,8.E-02)); +#44129 = VECTOR('',#44130,1.); +#44130 = DIRECTION('',(1.224606353822E-16,1.,-2.289834988289E-16)); +#44131 = ORIENTED_EDGE('',*,*,#44132,.T.); +#44132 = EDGE_CURVE('',#44125,#43093,#44133,.T.); +#44133 = LINE('',#44134,#44135); +#44134 = CARTESIAN_POINT('',(-10.,1.,15.98)); +#44135 = VECTOR('',#44136,1.); +#44136 = DIRECTION('',(0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#44137 = PLANE('',#44138); +#44138 = AXIS2_PLACEMENT_3D('',#44139,#44140,#44141); +#44139 = CARTESIAN_POINT('',(5.925,0.85,5.5E-02)); +#44140 = DIRECTION('',(0.707106781187,7.532303909457E-17,0.707106781187) + ); +#44141 = DIRECTION('',(-0.707106781187,1.619157848018E-16,0.707106781187 + )); +#44142 = ADVANCED_FACE('',(#44143),#44161,.F.); +#44143 = FACE_BOUND('',#44144,.T.); +#44144 = EDGE_LOOP('',(#44145,#44146,#44154,#44160)); +#44145 = ORIENTED_EDGE('',*,*,#39648,.F.); +#44146 = ORIENTED_EDGE('',*,*,#44147,.T.); +#44147 = EDGE_CURVE('',#39649,#44148,#44150,.T.); +#44148 = VERTEX_POINT('',#44149); +#44149 = CARTESIAN_POINT('',(6.72,1.9,0.94)); +#44150 = LINE('',#44151,#44152); +#44151 = CARTESIAN_POINT('',(6.72,0.694863,0.94)); +#44152 = VECTOR('',#44153,1.); +#44153 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#44154 = ORIENTED_EDGE('',*,*,#44155,.T.); +#44155 = EDGE_CURVE('',#44148,#39395,#44156,.T.); +#44156 = LINE('',#44157,#44158); +#44157 = CARTESIAN_POINT('',(9.53,1.9,0.94)); +#44158 = VECTOR('',#44159,1.); +#44159 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44160 = ORIENTED_EDGE('',*,*,#39392,.F.); +#44161 = PLANE('',#44162); +#44162 = AXIS2_PLACEMENT_3D('',#44163,#44164,#44165); +#44163 = CARTESIAN_POINT('',(5.75,0.533724317761,0.94)); +#44164 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44165 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#44166 = ADVANCED_FACE('',(#44167),#44250,.T.); +#44167 = FACE_BOUND('',#44168,.T.); +#44168 = EDGE_LOOP('',(#44169,#44179,#44187,#44196,#44204,#44212,#44220, + #44228,#44237,#44243,#44244)); +#44169 = ORIENTED_EDGE('',*,*,#44170,.T.); +#44170 = EDGE_CURVE('',#44171,#44173,#44175,.T.); +#44171 = VERTEX_POINT('',#44172); +#44172 = CARTESIAN_POINT('',(4.325,1.,8.E-02)); +#44173 = VERTEX_POINT('',#44174); +#44174 = CARTESIAN_POINT('',(4.325,1.,7.866077735406E-02)); +#44175 = LINE('',#44176,#44177); +#44176 = CARTESIAN_POINT('',(4.325,1.,0.841614)); +#44177 = VECTOR('',#44178,1.); +#44178 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44179 = ORIENTED_EDGE('',*,*,#44180,.F.); +#44180 = EDGE_CURVE('',#44181,#44173,#44183,.T.); +#44181 = VERTEX_POINT('',#44182); +#44182 = CARTESIAN_POINT('',(4.325,0.943186633611,6.541154699934E-02)); +#44183 = LINE('',#44184,#44185); +#44184 = CARTESIAN_POINT('',(4.325,0.694863,7.500931358165E-03)); +#44185 = VECTOR('',#44186,1.); +#44186 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#44187 = ORIENTED_EDGE('',*,*,#44188,.T.); +#44188 = EDGE_CURVE('',#44181,#44189,#44191,.T.); +#44189 = VERTEX_POINT('',#44190); +#44190 = CARTESIAN_POINT('',(4.325,0.92,3.619548911246E-02)); +#44191 = CIRCLE('',#44192,3.E-02); +#44192 = AXIS2_PLACEMENT_3D('',#44193,#44194,#44195); +#44193 = CARTESIAN_POINT('',(4.325,0.95,3.619548911246E-02)); +#44194 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44195 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44196 = ORIENTED_EDGE('',*,*,#44197,.F.); +#44197 = EDGE_CURVE('',#44198,#44189,#44200,.T.); +#44198 = VERTEX_POINT('',#44199); +#44199 = CARTESIAN_POINT('',(4.325,0.92,-1.443289932013E-15)); +#44200 = LINE('',#44201,#44202); +#44201 = CARTESIAN_POINT('',(4.325,0.92,0.841614)); +#44202 = VECTOR('',#44203,1.); +#44203 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44204 = ORIENTED_EDGE('',*,*,#44205,.F.); +#44205 = EDGE_CURVE('',#44206,#44198,#44208,.T.); +#44206 = VERTEX_POINT('',#44207); +#44207 = CARTESIAN_POINT('',(4.325,1.25,-1.554312234475E-15)); +#44208 = LINE('',#44209,#44210); +#44209 = CARTESIAN_POINT('',(4.325,0.694863,-1.443289932013E-15)); +#44210 = VECTOR('',#44211,1.); +#44211 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44212 = ORIENTED_EDGE('',*,*,#44213,.F.); +#44213 = EDGE_CURVE('',#44214,#44206,#44216,.T.); +#44214 = VERTEX_POINT('',#44215); +#44215 = CARTESIAN_POINT('',(4.325,1.3,5.E-02)); +#44216 = LINE('',#44217,#44218); +#44217 = CARTESIAN_POINT('',(4.325,0.694863,-0.555137)); +#44218 = VECTOR('',#44219,1.); +#44219 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44220 = ORIENTED_EDGE('',*,*,#44221,.F.); +#44221 = EDGE_CURVE('',#44222,#44214,#44224,.T.); +#44222 = VERTEX_POINT('',#44223); +#44223 = CARTESIAN_POINT('',(4.325,1.3,0.11)); +#44224 = LINE('',#44225,#44226); +#44225 = CARTESIAN_POINT('',(4.325,1.3,0.841614)); +#44226 = VECTOR('',#44227,1.); +#44227 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44228 = ORIENTED_EDGE('',*,*,#44229,.F.); +#44229 = EDGE_CURVE('',#44230,#44222,#44232,.T.); +#44230 = VERTEX_POINT('',#44231); +#44231 = CARTESIAN_POINT('',(4.325,1.35,0.16)); +#44232 = CIRCLE('',#44233,5.E-02); +#44233 = AXIS2_PLACEMENT_3D('',#44234,#44235,#44236); +#44234 = CARTESIAN_POINT('',(4.325,1.35,0.11)); +#44235 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44236 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44237 = ORIENTED_EDGE('',*,*,#44238,.F.); +#44238 = EDGE_CURVE('',#43420,#44230,#44239,.T.); +#44239 = LINE('',#44240,#44241); +#44240 = CARTESIAN_POINT('',(4.325,1.35,0.841614)); +#44241 = VECTOR('',#44242,1.); +#44242 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44243 = ORIENTED_EDGE('',*,*,#43419,.F.); +#44244 = ORIENTED_EDGE('',*,*,#44245,.T.); +#44245 = EDGE_CURVE('',#43412,#44171,#44246,.T.); +#44246 = LINE('',#44247,#44248); +#44247 = CARTESIAN_POINT('',(4.325,1.,0.841614)); +#44248 = VECTOR('',#44249,1.); +#44249 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44250 = PLANE('',#44251); +#44251 = AXIS2_PLACEMENT_3D('',#44252,#44253,#44254); +#44252 = CARTESIAN_POINT('',(4.325,1.245779075398,0.170500231015)); +#44253 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44254 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#44255 = ADVANCED_FACE('',(#44256),#44290,.T.); +#44256 = FACE_BOUND('',#44257,.T.); +#44257 = EDGE_LOOP('',(#44258,#44266,#44272,#44273,#44274,#44282,#44288, + #44289)); +#44258 = ORIENTED_EDGE('',*,*,#44259,.T.); +#44259 = EDGE_CURVE('',#43404,#44260,#44262,.T.); +#44260 = VERTEX_POINT('',#44261); +#44261 = CARTESIAN_POINT('',(4.675,1.,8.E-02)); +#44262 = LINE('',#44263,#44264); +#44263 = CARTESIAN_POINT('',(4.675,1.,0.841614)); +#44264 = VECTOR('',#44265,1.); +#44265 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44266 = ORIENTED_EDGE('',*,*,#44267,.T.); +#44267 = EDGE_CURVE('',#44260,#41527,#44268,.T.); +#44268 = LINE('',#44269,#44270); +#44269 = CARTESIAN_POINT('',(-11.,1.,8.E-02)); +#44270 = VECTOR('',#44271,1.); +#44271 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44272 = ORIENTED_EDGE('',*,*,#41550,.T.); +#44273 = ORIENTED_EDGE('',*,*,#43013,.F.); +#44274 = ORIENTED_EDGE('',*,*,#44275,.T.); +#44275 = EDGE_CURVE('',#43006,#44276,#44278,.T.); +#44276 = VERTEX_POINT('',#44277); +#44277 = CARTESIAN_POINT('',(4.4,1.,8.E-02)); +#44278 = LINE('',#44279,#44280); +#44279 = CARTESIAN_POINT('',(-11.,1.,15.48)); +#44280 = VECTOR('',#44281,1.); +#44281 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#44282 = ORIENTED_EDGE('',*,*,#44283,.T.); +#44283 = EDGE_CURVE('',#44276,#44171,#44284,.T.); +#44284 = LINE('',#44285,#44286); +#44285 = CARTESIAN_POINT('',(-11.5,1.,8.E-02)); +#44286 = VECTOR('',#44287,1.); +#44287 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44288 = ORIENTED_EDGE('',*,*,#44245,.F.); +#44289 = ORIENTED_EDGE('',*,*,#43411,.T.); +#44290 = PLANE('',#44291); +#44291 = AXIS2_PLACEMENT_3D('',#44292,#44293,#44294); +#44292 = CARTESIAN_POINT('',(8.325,1.,0.31)); +#44293 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#44294 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44295 = ADVANCED_FACE('',(#44296),#44319,.F.); +#44296 = FACE_BOUND('',#44297,.T.); +#44297 = EDGE_LOOP('',(#44298,#44304,#44312,#44318)); +#44298 = ORIENTED_EDGE('',*,*,#44299,.F.); +#44299 = EDGE_CURVE('',#44260,#43163,#44300,.T.); +#44300 = LINE('',#44301,#44302); +#44301 = CARTESIAN_POINT('',(10.,1.,8.E-02)); +#44302 = VECTOR('',#44303,1.); +#44303 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44304 = ORIENTED_EDGE('',*,*,#44305,.T.); +#44305 = EDGE_CURVE('',#44260,#44306,#44308,.T.); +#44306 = VERTEX_POINT('',#44307); +#44307 = CARTESIAN_POINT('',(4.675,1.,7.866077735406E-02)); +#44308 = LINE('',#44309,#44310); +#44309 = CARTESIAN_POINT('',(4.675,1.,0.841614)); +#44310 = VECTOR('',#44311,1.); +#44311 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44312 = ORIENTED_EDGE('',*,*,#44313,.F.); +#44313 = EDGE_CURVE('',#43165,#44306,#44314,.T.); +#44314 = LINE('',#44315,#44316); +#44315 = CARTESIAN_POINT('',(10.,1.,7.866077735406E-02)); +#44316 = VECTOR('',#44317,1.); +#44317 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44318 = ORIENTED_EDGE('',*,*,#43162,.F.); +#44319 = PLANE('',#44320); +#44320 = AXIS2_PLACEMENT_3D('',#44321,#44322,#44323); +#44321 = CARTESIAN_POINT('',(4.825,1.,7.866077735406E-02)); +#44322 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#44323 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44324 = ADVANCED_FACE('',(#44325),#44394,.F.); +#44325 = FACE_BOUND('',#44326,.T.); +#44326 = EDGE_LOOP('',(#44327,#44328,#44329,#44337,#44346,#44354,#44362, + #44370,#44378,#44387,#44393)); +#44327 = ORIENTED_EDGE('',*,*,#44259,.F.); +#44328 = ORIENTED_EDGE('',*,*,#43403,.F.); +#44329 = ORIENTED_EDGE('',*,*,#44330,.F.); +#44330 = EDGE_CURVE('',#44331,#43396,#44333,.T.); +#44331 = VERTEX_POINT('',#44332); +#44332 = CARTESIAN_POINT('',(4.675,1.35,0.16)); +#44333 = LINE('',#44334,#44335); +#44334 = CARTESIAN_POINT('',(4.675,1.35,0.31)); +#44335 = VECTOR('',#44336,1.); +#44336 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44337 = ORIENTED_EDGE('',*,*,#44338,.T.); +#44338 = EDGE_CURVE('',#44331,#44339,#44341,.T.); +#44339 = VERTEX_POINT('',#44340); +#44340 = CARTESIAN_POINT('',(4.675,1.3,0.11)); +#44341 = CIRCLE('',#44342,5.E-02); +#44342 = AXIS2_PLACEMENT_3D('',#44343,#44344,#44345); +#44343 = CARTESIAN_POINT('',(4.675,1.35,0.11)); +#44344 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44345 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44346 = ORIENTED_EDGE('',*,*,#44347,.T.); +#44347 = EDGE_CURVE('',#44339,#44348,#44350,.T.); +#44348 = VERTEX_POINT('',#44349); +#44349 = CARTESIAN_POINT('',(4.675,1.3,5.E-02)); +#44350 = LINE('',#44351,#44352); +#44351 = CARTESIAN_POINT('',(4.675,1.3,0.11)); +#44352 = VECTOR('',#44353,1.); +#44353 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44354 = ORIENTED_EDGE('',*,*,#44355,.T.); +#44355 = EDGE_CURVE('',#44348,#44356,#44358,.T.); +#44356 = VERTEX_POINT('',#44357); +#44357 = CARTESIAN_POINT('',(4.675,1.25,-1.665334536938E-15)); +#44358 = LINE('',#44359,#44360); +#44359 = CARTESIAN_POINT('',(4.675,1.3,5.E-02)); +#44360 = VECTOR('',#44361,1.); +#44361 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44362 = ORIENTED_EDGE('',*,*,#44363,.F.); +#44363 = EDGE_CURVE('',#44364,#44356,#44366,.T.); +#44364 = VERTEX_POINT('',#44365); +#44365 = CARTESIAN_POINT('',(4.675,0.92,-1.554312234475E-15)); +#44366 = LINE('',#44367,#44368); +#44367 = CARTESIAN_POINT('',(4.675,0.92,-1.554312234475E-15)); +#44368 = VECTOR('',#44369,1.); +#44369 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#44370 = ORIENTED_EDGE('',*,*,#44371,.T.); +#44371 = EDGE_CURVE('',#44364,#44372,#44374,.T.); +#44372 = VERTEX_POINT('',#44373); +#44373 = CARTESIAN_POINT('',(4.675,0.92,3.619548911246E-02)); +#44374 = LINE('',#44375,#44376); +#44375 = CARTESIAN_POINT('',(4.675,0.92,-1.554312234475E-15)); +#44376 = VECTOR('',#44377,1.); +#44377 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44378 = ORIENTED_EDGE('',*,*,#44379,.F.); +#44379 = EDGE_CURVE('',#44380,#44372,#44382,.T.); +#44380 = VERTEX_POINT('',#44381); +#44381 = CARTESIAN_POINT('',(4.675,0.943186633611,6.541154699934E-02)); +#44382 = CIRCLE('',#44383,3.E-02); +#44383 = AXIS2_PLACEMENT_3D('',#44384,#44385,#44386); +#44384 = CARTESIAN_POINT('',(4.675,0.95,3.619548911246E-02)); +#44385 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44386 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44387 = ORIENTED_EDGE('',*,*,#44388,.T.); +#44388 = EDGE_CURVE('',#44380,#44306,#44389,.T.); +#44389 = LINE('',#44390,#44391); +#44390 = CARTESIAN_POINT('',(4.675,0.943186633611,6.541154699934E-02)); +#44391 = VECTOR('',#44392,1.); +#44392 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#44393 = ORIENTED_EDGE('',*,*,#44305,.F.); +#44394 = PLANE('',#44395); +#44395 = AXIS2_PLACEMENT_3D('',#44396,#44397,#44398); +#44396 = CARTESIAN_POINT('',(4.675,1.245779075398,0.170500231015)); +#44397 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44398 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#44399 = ADVANCED_FACE('',(#44400),#44411,.T.); +#44400 = FACE_BOUND('',#44401,.T.); +#44401 = EDGE_LOOP('',(#44402,#44403,#44404,#44410)); +#44402 = ORIENTED_EDGE('',*,*,#43395,.T.); +#44403 = ORIENTED_EDGE('',*,*,#43230,.T.); +#44404 = ORIENTED_EDGE('',*,*,#44405,.F.); +#44405 = EDGE_CURVE('',#44331,#43222,#44406,.T.); +#44406 = LINE('',#44407,#44408); +#44407 = CARTESIAN_POINT('',(4.675,1.35,0.16)); +#44408 = VECTOR('',#44409,1.); +#44409 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44410 = ORIENTED_EDGE('',*,*,#44330,.T.); +#44411 = PLANE('',#44412); +#44412 = AXIS2_PLACEMENT_3D('',#44413,#44414,#44415); +#44413 = CARTESIAN_POINT('',(4.675,1.35,0.31)); +#44414 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#44415 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44416 = ADVANCED_FACE('',(#44417),#44428,.F.); +#44417 = FACE_BOUND('',#44418,.F.); +#44418 = EDGE_LOOP('',(#44419,#44420,#44426,#44427)); +#44419 = ORIENTED_EDGE('',*,*,#44338,.T.); +#44420 = ORIENTED_EDGE('',*,*,#44421,.T.); +#44421 = EDGE_CURVE('',#44339,#43214,#44422,.T.); +#44422 = LINE('',#44423,#44424); +#44423 = CARTESIAN_POINT('',(4.675,1.3,0.11)); +#44424 = VECTOR('',#44425,1.); +#44425 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44426 = ORIENTED_EDGE('',*,*,#43221,.F.); +#44427 = ORIENTED_EDGE('',*,*,#44405,.F.); +#44428 = CYLINDRICAL_SURFACE('',#44429,5.E-02); +#44429 = AXIS2_PLACEMENT_3D('',#44430,#44431,#44432); +#44430 = CARTESIAN_POINT('',(4.675,1.35,0.11)); +#44431 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44432 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44433 = ADVANCED_FACE('',(#44434),#44445,.T.); +#44434 = FACE_BOUND('',#44435,.T.); +#44435 = EDGE_LOOP('',(#44436,#44437,#44438,#44444)); +#44436 = ORIENTED_EDGE('',*,*,#44421,.T.); +#44437 = ORIENTED_EDGE('',*,*,#43213,.T.); +#44438 = ORIENTED_EDGE('',*,*,#44439,.F.); +#44439 = EDGE_CURVE('',#44348,#43206,#44440,.T.); +#44440 = LINE('',#44441,#44442); +#44441 = CARTESIAN_POINT('',(4.675,1.3,5.E-02)); +#44442 = VECTOR('',#44443,1.); +#44443 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44444 = ORIENTED_EDGE('',*,*,#44347,.F.); +#44445 = PLANE('',#44446); +#44446 = AXIS2_PLACEMENT_3D('',#44447,#44448,#44449); +#44447 = CARTESIAN_POINT('',(4.675,1.3,0.11)); +#44448 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#44449 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44450 = ADVANCED_FACE('',(#44451),#44462,.T.); +#44451 = FACE_BOUND('',#44452,.T.); +#44452 = EDGE_LOOP('',(#44453,#44454,#44455,#44461)); +#44453 = ORIENTED_EDGE('',*,*,#44439,.T.); +#44454 = ORIENTED_EDGE('',*,*,#43205,.T.); +#44455 = ORIENTED_EDGE('',*,*,#44456,.F.); +#44456 = EDGE_CURVE('',#44356,#43198,#44457,.T.); +#44457 = LINE('',#44458,#44459); +#44458 = CARTESIAN_POINT('',(4.675,1.25,-1.665334536938E-15)); +#44459 = VECTOR('',#44460,1.); +#44460 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44461 = ORIENTED_EDGE('',*,*,#44355,.F.); +#44462 = PLANE('',#44463); +#44463 = AXIS2_PLACEMENT_3D('',#44464,#44465,#44466); +#44464 = CARTESIAN_POINT('',(4.675,1.3,5.E-02)); +#44465 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#44466 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44467 = ADVANCED_FACE('',(#44468),#44479,.T.); +#44468 = FACE_BOUND('',#44469,.T.); +#44469 = EDGE_LOOP('',(#44470,#44471,#44472,#44478)); +#44470 = ORIENTED_EDGE('',*,*,#44456,.T.); +#44471 = ORIENTED_EDGE('',*,*,#43197,.T.); +#44472 = ORIENTED_EDGE('',*,*,#44473,.F.); +#44473 = EDGE_CURVE('',#44364,#43190,#44474,.T.); +#44474 = LINE('',#44475,#44476); +#44475 = CARTESIAN_POINT('',(4.675,0.92,-1.554312234475E-15)); +#44476 = VECTOR('',#44477,1.); +#44477 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44478 = ORIENTED_EDGE('',*,*,#44363,.T.); +#44479 = PLANE('',#44480); +#44480 = AXIS2_PLACEMENT_3D('',#44481,#44482,#44483); +#44481 = CARTESIAN_POINT('',(4.675,1.25,-1.665334536938E-15)); +#44482 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44483 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44484 = ADVANCED_FACE('',(#44485),#44496,.T.); +#44485 = FACE_BOUND('',#44486,.T.); +#44486 = EDGE_LOOP('',(#44487,#44488,#44489,#44490)); +#44487 = ORIENTED_EDGE('',*,*,#44371,.F.); +#44488 = ORIENTED_EDGE('',*,*,#44473,.T.); +#44489 = ORIENTED_EDGE('',*,*,#43189,.T.); +#44490 = ORIENTED_EDGE('',*,*,#44491,.F.); +#44491 = EDGE_CURVE('',#44372,#43181,#44492,.T.); +#44492 = LINE('',#44493,#44494); +#44493 = CARTESIAN_POINT('',(4.675,0.92,3.619548911246E-02)); +#44494 = VECTOR('',#44495,1.); +#44495 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44496 = PLANE('',#44497); +#44497 = AXIS2_PLACEMENT_3D('',#44498,#44499,#44500); +#44498 = CARTESIAN_POINT('',(4.675,0.92,-1.554312234475E-15)); +#44499 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44500 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44501 = ADVANCED_FACE('',(#44502),#44513,.T.); +#44502 = FACE_BOUND('',#44503,.T.); +#44503 = EDGE_LOOP('',(#44504,#44505,#44506,#44512)); +#44504 = ORIENTED_EDGE('',*,*,#44491,.T.); +#44505 = ORIENTED_EDGE('',*,*,#43180,.F.); +#44506 = ORIENTED_EDGE('',*,*,#44507,.F.); +#44507 = EDGE_CURVE('',#44380,#43173,#44508,.T.); +#44508 = LINE('',#44509,#44510); +#44509 = CARTESIAN_POINT('',(4.675,0.943186633611,6.541154699934E-02)); +#44510 = VECTOR('',#44511,1.); +#44511 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44512 = ORIENTED_EDGE('',*,*,#44379,.T.); +#44513 = CYLINDRICAL_SURFACE('',#44514,3.E-02); +#44514 = AXIS2_PLACEMENT_3D('',#44515,#44516,#44517); +#44515 = CARTESIAN_POINT('',(4.675,0.95,3.619548911246E-02)); +#44516 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44517 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44518 = ADVANCED_FACE('',(#44519),#44525,.T.); +#44519 = FACE_BOUND('',#44520,.T.); +#44520 = EDGE_LOOP('',(#44521,#44522,#44523,#44524)); +#44521 = ORIENTED_EDGE('',*,*,#44507,.T.); +#44522 = ORIENTED_EDGE('',*,*,#43172,.T.); +#44523 = ORIENTED_EDGE('',*,*,#44313,.T.); +#44524 = ORIENTED_EDGE('',*,*,#44388,.F.); +#44525 = PLANE('',#44526); +#44526 = AXIS2_PLACEMENT_3D('',#44527,#44528,#44529); +#44527 = CARTESIAN_POINT('',(4.675,0.943186633611,6.541154699934E-02)); +#44528 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#44529 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#44530 = ADVANCED_FACE('',(#44531),#44549,.T.); +#44531 = FACE_BOUND('',#44532,.T.); +#44532 = EDGE_LOOP('',(#44533,#44539,#44540,#44541,#44542,#44548)); +#44533 = ORIENTED_EDGE('',*,*,#44534,.T.); +#44534 = EDGE_CURVE('',#43263,#41525,#44535,.T.); +#44535 = LINE('',#44536,#44537); +#44536 = CARTESIAN_POINT('',(-11.,0.92,8.E-02)); +#44537 = VECTOR('',#44538,1.); +#44538 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44539 = ORIENTED_EDGE('',*,*,#41524,.T.); +#44540 = ORIENTED_EDGE('',*,*,#44267,.F.); +#44541 = ORIENTED_EDGE('',*,*,#44299,.T.); +#44542 = ORIENTED_EDGE('',*,*,#44543,.F.); +#44543 = EDGE_CURVE('',#43261,#43163,#44544,.T.); +#44544 = LINE('',#44545,#44546); +#44545 = CARTESIAN_POINT('',(-11.,1.,8.E-02)); +#44546 = VECTOR('',#44547,1.); +#44547 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44548 = ORIENTED_EDGE('',*,*,#43260,.T.); +#44549 = PLANE('',#44550); +#44550 = AXIS2_PLACEMENT_3D('',#44551,#44552,#44553); +#44551 = CARTESIAN_POINT('',(4.6625,1.,8.E-02)); +#44552 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44553 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44554 = ADVANCED_FACE('',(#44555),#44561,.T.); +#44555 = FACE_BOUND('',#44556,.T.); +#44556 = EDGE_LOOP('',(#44557,#44558,#44559,#44560)); +#44557 = ORIENTED_EDGE('',*,*,#43020,.T.); +#44558 = ORIENTED_EDGE('',*,*,#41534,.F.); +#44559 = ORIENTED_EDGE('',*,*,#44534,.F.); +#44560 = ORIENTED_EDGE('',*,*,#43277,.F.); +#44561 = PLANE('',#44562); +#44562 = AXIS2_PLACEMENT_3D('',#44563,#44564,#44565); +#44563 = CARTESIAN_POINT('',(4.6625,0.92,8.E-02)); +#44564 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#44565 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#44566 = ADVANCED_FACE('',(#44567),#44578,.T.); +#44567 = FACE_BOUND('',#44568,.T.); +#44568 = EDGE_LOOP('',(#44569,#44575,#44576,#44577)); +#44569 = ORIENTED_EDGE('',*,*,#44570,.F.); +#44570 = EDGE_CURVE('',#41314,#39721,#44571,.T.); +#44571 = LINE('',#44572,#44573); +#44572 = CARTESIAN_POINT('',(-4.825,0.92,6.661338147751E-16)); +#44573 = VECTOR('',#44574,1.); +#44574 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44575 = ORIENTED_EDGE('',*,*,#41313,.T.); +#44576 = ORIENTED_EDGE('',*,*,#44084,.T.); +#44577 = ORIENTED_EDGE('',*,*,#39720,.F.); +#44578 = PLANE('',#44579); +#44579 = AXIS2_PLACEMENT_3D('',#44580,#44581,#44582); +#44580 = CARTESIAN_POINT('',(-4.825,0.92,6.661338147751E-16)); +#44581 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44582 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44583 = ADVANCED_FACE('',(#44584),#44595,.T.); +#44584 = FACE_BOUND('',#44585,.T.); +#44585 = EDGE_LOOP('',(#44586,#44587,#44588,#44589)); +#44586 = ORIENTED_EDGE('',*,*,#40710,.T.); +#44587 = ORIENTED_EDGE('',*,*,#44091,.T.); +#44588 = ORIENTED_EDGE('',*,*,#41295,.F.); +#44589 = ORIENTED_EDGE('',*,*,#44590,.F.); +#44590 = EDGE_CURVE('',#40711,#41296,#44591,.T.); +#44591 = LINE('',#44592,#44593); +#44592 = CARTESIAN_POINT('',(-4.825,1.3,5.E-02)); +#44593 = VECTOR('',#44594,1.); +#44594 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44595 = PLANE('',#44596); +#44596 = AXIS2_PLACEMENT_3D('',#44597,#44598,#44599); +#44597 = CARTESIAN_POINT('',(-4.825,1.3,5.E-02)); +#44598 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#44599 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44600 = ADVANCED_FACE('',(#44601),#44626,.F.); +#44601 = FACE_BOUND('',#44602,.T.); +#44602 = EDGE_LOOP('',(#44603,#44611,#44619,#44625)); +#44603 = ORIENTED_EDGE('',*,*,#44604,.F.); +#44604 = EDGE_CURVE('',#44605,#40567,#44607,.T.); +#44605 = VERTEX_POINT('',#44606); +#44606 = CARTESIAN_POINT('',(6.285,-1.63,0.3)); +#44607 = LINE('',#44608,#44609); +#44608 = CARTESIAN_POINT('',(-2.735,-1.63,0.3)); +#44609 = VECTOR('',#44610,1.); +#44610 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44611 = ORIENTED_EDGE('',*,*,#44612,.T.); +#44612 = EDGE_CURVE('',#44605,#44613,#44615,.T.); +#44613 = VERTEX_POINT('',#44614); +#44614 = CARTESIAN_POINT('',(6.285,-1.2,0.3)); +#44615 = LINE('',#44616,#44617); +#44616 = CARTESIAN_POINT('',(6.285,0.694863,0.3)); +#44617 = VECTOR('',#44618,1.); +#44618 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#44619 = ORIENTED_EDGE('',*,*,#44620,.T.); +#44620 = EDGE_CURVE('',#44613,#40575,#44621,.T.); +#44621 = LINE('',#44622,#44623); +#44622 = CARTESIAN_POINT('',(-16.5,-1.2,0.3)); +#44623 = VECTOR('',#44624,1.); +#44624 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44625 = ORIENTED_EDGE('',*,*,#40574,.F.); +#44626 = PLANE('',#44627); +#44627 = AXIS2_PLACEMENT_3D('',#44628,#44629,#44630); +#44628 = CARTESIAN_POINT('',(5.3375,-7.E-02,0.3)); +#44629 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44630 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44631 = ADVANCED_FACE('',(#44632),#44657,.T.); +#44632 = FACE_BOUND('',#44633,.T.); +#44633 = EDGE_LOOP('',(#44634,#44644,#44650,#44651)); +#44634 = ORIENTED_EDGE('',*,*,#44635,.T.); +#44635 = EDGE_CURVE('',#44636,#44638,#44640,.T.); +#44636 = VERTEX_POINT('',#44637); +#44637 = CARTESIAN_POINT('',(5.675,1.3,0.11)); +#44638 = VERTEX_POINT('',#44639); +#44639 = CARTESIAN_POINT('',(5.825,1.3,0.11)); +#44640 = LINE('',#44641,#44642); +#44641 = CARTESIAN_POINT('',(5.675,1.3,0.11)); +#44642 = VECTOR('',#44643,1.); +#44643 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44644 = ORIENTED_EDGE('',*,*,#44645,.T.); +#44645 = EDGE_CURVE('',#44638,#44042,#44646,.T.); +#44646 = LINE('',#44647,#44648); +#44647 = CARTESIAN_POINT('',(5.825,1.3,0.11)); +#44648 = VECTOR('',#44649,1.); +#44649 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44650 = ORIENTED_EDGE('',*,*,#44041,.F.); +#44651 = ORIENTED_EDGE('',*,*,#44652,.F.); +#44652 = EDGE_CURVE('',#44636,#44034,#44653,.T.); +#44653 = LINE('',#44654,#44655); +#44654 = CARTESIAN_POINT('',(5.675,1.3,0.11)); +#44655 = VECTOR('',#44656,1.); +#44656 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44657 = PLANE('',#44658); +#44658 = AXIS2_PLACEMENT_3D('',#44659,#44660,#44661); +#44659 = CARTESIAN_POINT('',(5.675,1.3,0.11)); +#44660 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#44661 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44662 = ADVANCED_FACE('',(#44663),#44688,.T.); +#44663 = FACE_BOUND('',#44664,.T.); +#44664 = EDGE_LOOP('',(#44665,#44675,#44681,#44682)); +#44665 = ORIENTED_EDGE('',*,*,#44666,.T.); +#44666 = EDGE_CURVE('',#44667,#44669,#44671,.T.); +#44667 = VERTEX_POINT('',#44668); +#44668 = CARTESIAN_POINT('',(-4.325,1.25,4.440892098501E-16)); +#44669 = VERTEX_POINT('',#44670); +#44670 = CARTESIAN_POINT('',(-4.175,1.25,4.440892098501E-16)); +#44671 = LINE('',#44672,#44673); +#44672 = CARTESIAN_POINT('',(-4.325,1.25,4.440892098501E-16)); +#44673 = VECTOR('',#44674,1.); +#44674 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44675 = ORIENTED_EDGE('',*,*,#44676,.T.); +#44676 = EDGE_CURVE('',#44669,#39771,#44677,.T.); +#44677 = LINE('',#44678,#44679); +#44678 = CARTESIAN_POINT('',(-4.175,0.694863,5.551115123126E-16)); +#44679 = VECTOR('',#44680,1.); +#44680 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44681 = ORIENTED_EDGE('',*,*,#39770,.F.); +#44682 = ORIENTED_EDGE('',*,*,#44683,.T.); +#44683 = EDGE_CURVE('',#39763,#44667,#44684,.T.); +#44684 = LINE('',#44685,#44686); +#44685 = CARTESIAN_POINT('',(-4.325,0.92,5.551115123126E-16)); +#44686 = VECTOR('',#44687,1.); +#44687 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#44688 = PLANE('',#44689); +#44689 = AXIS2_PLACEMENT_3D('',#44690,#44691,#44692); +#44690 = CARTESIAN_POINT('',(-4.325,1.25,4.440892098501E-16)); +#44691 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44692 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44693 = ADVANCED_FACE('',(#44694),#44721,.F.); +#44694 = FACE_BOUND('',#44695,.F.); +#44695 = EDGE_LOOP('',(#44696,#44697,#44706,#44714)); +#44696 = ORIENTED_EDGE('',*,*,#44635,.T.); +#44697 = ORIENTED_EDGE('',*,*,#44698,.F.); +#44698 = EDGE_CURVE('',#44699,#44638,#44701,.T.); +#44699 = VERTEX_POINT('',#44700); +#44700 = CARTESIAN_POINT('',(5.825,1.35,0.16)); +#44701 = CIRCLE('',#44702,5.E-02); +#44702 = AXIS2_PLACEMENT_3D('',#44703,#44704,#44705); +#44703 = CARTESIAN_POINT('',(5.825,1.35,0.11)); +#44704 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44705 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44706 = ORIENTED_EDGE('',*,*,#44707,.F.); +#44707 = EDGE_CURVE('',#44708,#44699,#44710,.T.); +#44708 = VERTEX_POINT('',#44709); +#44709 = CARTESIAN_POINT('',(5.675,1.35,0.16)); +#44710 = LINE('',#44711,#44712); +#44711 = CARTESIAN_POINT('',(5.675,1.35,0.16)); +#44712 = VECTOR('',#44713,1.); +#44713 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44714 = ORIENTED_EDGE('',*,*,#44715,.T.); +#44715 = EDGE_CURVE('',#44708,#44636,#44716,.T.); +#44716 = CIRCLE('',#44717,5.E-02); +#44717 = AXIS2_PLACEMENT_3D('',#44718,#44719,#44720); +#44718 = CARTESIAN_POINT('',(5.675,1.35,0.11)); +#44719 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44720 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44721 = CYLINDRICAL_SURFACE('',#44722,5.E-02); +#44722 = AXIS2_PLACEMENT_3D('',#44723,#44724,#44725); +#44723 = CARTESIAN_POINT('',(5.675,1.35,0.11)); +#44724 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44725 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44726 = ADVANCED_FACE('',(#44727),#44745,.F.); +#44727 = FACE_BOUND('',#44728,.T.); +#44728 = EDGE_LOOP('',(#44729,#44735,#44736,#44737,#44738,#44739,#44740, + #44741,#44742,#44743,#44744)); +#44729 = ORIENTED_EDGE('',*,*,#44730,.F.); +#44730 = EDGE_CURVE('',#44003,#39834,#44731,.T.); +#44731 = LINE('',#44732,#44733); +#44732 = CARTESIAN_POINT('',(-4.825,1.,0.841614)); +#44733 = VECTOR('',#44734,1.); +#44734 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44735 = ORIENTED_EDGE('',*,*,#44002,.F.); +#44736 = ORIENTED_EDGE('',*,*,#41026,.F.); +#44737 = ORIENTED_EDGE('',*,*,#43291,.T.); +#44738 = ORIENTED_EDGE('',*,*,#40718,.T.); +#44739 = ORIENTED_EDGE('',*,*,#44590,.T.); +#44740 = ORIENTED_EDGE('',*,*,#41321,.F.); +#44741 = ORIENTED_EDGE('',*,*,#44570,.T.); +#44742 = ORIENTED_EDGE('',*,*,#39747,.F.); +#44743 = ORIENTED_EDGE('',*,*,#41595,.T.); +#44744 = ORIENTED_EDGE('',*,*,#41097,.F.); +#44745 = PLANE('',#44746); +#44746 = AXIS2_PLACEMENT_3D('',#44747,#44748,#44749); +#44747 = CARTESIAN_POINT('',(-4.825,1.245779075398,0.170500231015)); +#44748 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44749 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#44750 = ADVANCED_FACE('',(#44751),#44761,.T.); +#44751 = FACE_BOUND('',#44752,.T.); +#44752 = EDGE_LOOP('',(#44753,#44754,#44755,#44756,#44757,#44758,#44759, + #44760)); +#44753 = ORIENTED_EDGE('',*,*,#44730,.T.); +#44754 = ORIENTED_EDGE('',*,*,#39833,.T.); +#44755 = ORIENTED_EDGE('',*,*,#41510,.T.); +#44756 = ORIENTED_EDGE('',*,*,#42421,.F.); +#44757 = ORIENTED_EDGE('',*,*,#39505,.T.); +#44758 = ORIENTED_EDGE('',*,*,#40985,.T.); +#44759 = ORIENTED_EDGE('',*,*,#40303,.T.); +#44760 = ORIENTED_EDGE('',*,*,#44010,.T.); +#44761 = PLANE('',#44762); +#44762 = AXIS2_PLACEMENT_3D('',#44763,#44764,#44765); +#44763 = CARTESIAN_POINT('',(-1.175,1.,0.31)); +#44764 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#44765 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44766 = ADVANCED_FACE('',(#44767),#44803,.T.); +#44767 = FACE_BOUND('',#44768,.T.); +#44768 = EDGE_LOOP('',(#44769,#44780,#44788,#44797)); +#44769 = ORIENTED_EDGE('',*,*,#44770,.T.); +#44770 = EDGE_CURVE('',#44771,#44773,#44775,.T.); +#44771 = VERTEX_POINT('',#44772); +#44772 = CARTESIAN_POINT('',(5.675,0.943186633611,6.541154699934E-02)); +#44773 = VERTEX_POINT('',#44774); +#44774 = CARTESIAN_POINT('',(5.675,0.92,3.619548911246E-02)); +#44775 = CIRCLE('',#44776,3.E-02); +#44776 = AXIS2_PLACEMENT_3D('',#44777,#44778,#44779); +#44777 = CARTESIAN_POINT('',(5.675,0.95,3.619548911246E-02)); +#44778 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44779 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44780 = ORIENTED_EDGE('',*,*,#44781,.T.); +#44781 = EDGE_CURVE('',#44773,#44782,#44784,.T.); +#44782 = VERTEX_POINT('',#44783); +#44783 = CARTESIAN_POINT('',(5.825,0.92,3.619548911246E-02)); +#44784 = LINE('',#44785,#44786); +#44785 = CARTESIAN_POINT('',(5.675,0.92,3.619548911246E-02)); +#44786 = VECTOR('',#44787,1.); +#44787 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44788 = ORIENTED_EDGE('',*,*,#44789,.F.); +#44789 = EDGE_CURVE('',#44790,#44782,#44792,.T.); +#44790 = VERTEX_POINT('',#44791); +#44791 = CARTESIAN_POINT('',(5.825,0.943186633611,6.541154699934E-02)); +#44792 = CIRCLE('',#44793,3.E-02); +#44793 = AXIS2_PLACEMENT_3D('',#44794,#44795,#44796); +#44794 = CARTESIAN_POINT('',(5.825,0.95,3.619548911246E-02)); +#44795 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44796 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44797 = ORIENTED_EDGE('',*,*,#44798,.F.); +#44798 = EDGE_CURVE('',#44771,#44790,#44799,.T.); +#44799 = LINE('',#44800,#44801); +#44800 = CARTESIAN_POINT('',(5.675,0.943186633611,6.541154699934E-02)); +#44801 = VECTOR('',#44802,1.); +#44802 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44803 = CYLINDRICAL_SURFACE('',#44804,3.E-02); +#44804 = AXIS2_PLACEMENT_3D('',#44805,#44806,#44807); +#44805 = CARTESIAN_POINT('',(5.675,0.95,3.619548911246E-02)); +#44806 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44807 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44808 = ADVANCED_FACE('',(#44809),#44836,.F.); +#44809 = FACE_BOUND('',#44810,.T.); +#44810 = EDGE_LOOP('',(#44811,#44812,#44820,#44828,#44834,#44835)); +#44811 = ORIENTED_EDGE('',*,*,#44155,.F.); +#44812 = ORIENTED_EDGE('',*,*,#44813,.T.); +#44813 = EDGE_CURVE('',#44148,#44814,#44816,.T.); +#44814 = VERTEX_POINT('',#44815); +#44815 = CARTESIAN_POINT('',(6.77,1.9,0.89)); +#44816 = LINE('',#44817,#44818); +#44817 = CARTESIAN_POINT('',(6.818386,1.9,0.841614)); +#44818 = VECTOR('',#44819,1.); +#44819 = DIRECTION('',(0.707106781187,-1.619157848018E-16, + -0.707106781187)); +#44820 = ORIENTED_EDGE('',*,*,#44821,.F.); +#44821 = EDGE_CURVE('',#44822,#44814,#44824,.T.); +#44822 = VERTEX_POINT('',#44823); +#44823 = CARTESIAN_POINT('',(6.77,1.9,0.6)); +#44824 = LINE('',#44825,#44826); +#44825 = CARTESIAN_POINT('',(6.77,1.9,0.841614)); +#44826 = VECTOR('',#44827,1.); +#44827 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44828 = ORIENTED_EDGE('',*,*,#44829,.T.); +#44829 = EDGE_CURVE('',#44822,#39443,#44830,.T.); +#44830 = LINE('',#44831,#44832); +#44831 = CARTESIAN_POINT('',(6.53,1.9,0.6)); +#44832 = VECTOR('',#44833,1.); +#44833 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#44834 = ORIENTED_EDGE('',*,*,#39442,.T.); +#44835 = ORIENTED_EDGE('',*,*,#39402,.F.); +#44836 = PLANE('',#44837); +#44837 = AXIS2_PLACEMENT_3D('',#44838,#44839,#44840); +#44838 = CARTESIAN_POINT('',(5.17,1.9,0.94)); +#44839 = DIRECTION('',(6.753181414995E-18,-1.,1.065228634467E-16)); +#44840 = DIRECTION('',(-1.,-6.753181414995E-18,2.289834988289E-16)); +#44841 = ADVANCED_FACE('',(#44842),#44862,.F.); +#44842 = FACE_BOUND('',#44843,.T.); +#44843 = EDGE_LOOP('',(#44844,#44845,#44853,#44859,#44860,#44861)); +#44844 = ORIENTED_EDGE('',*,*,#41040,.T.); +#44845 = ORIENTED_EDGE('',*,*,#44846,.F.); +#44846 = EDGE_CURVE('',#44847,#41043,#44849,.T.); +#44847 = VERTEX_POINT('',#44848); +#44848 = CARTESIAN_POINT('',(6.285,-1.8,0.174074074074)); +#44849 = LINE('',#44850,#44851); +#44850 = CARTESIAN_POINT('',(3.790137,0.694863,2.022120740741)); +#44851 = VECTOR('',#44852,1.); +#44852 = DIRECTION('',(0.626384365641,-0.626384365641,-0.463988418994)); +#44853 = ORIENTED_EDGE('',*,*,#44854,.T.); +#44854 = EDGE_CURVE('',#44847,#44605,#44855,.T.); +#44855 = LINE('',#44856,#44857); +#44856 = CARTESIAN_POINT('',(6.285,0.694863,2.022120740741)); +#44857 = VECTOR('',#44858,1.); +#44858 = DIRECTION('',(1.362972871417E-16,0.803557193345,0.595227550626) + ); +#44859 = ORIENTED_EDGE('',*,*,#44604,.T.); +#44860 = ORIENTED_EDGE('',*,*,#40564,.F.); +#44861 = ORIENTED_EDGE('',*,*,#41564,.F.); +#44862 = PLANE('',#44863); +#44863 = AXIS2_PLACEMENT_3D('',#44864,#44865,#44866); +#44864 = CARTESIAN_POINT('',(6.265,-1.63,0.3)); +#44865 = DIRECTION('',(-1.840013376412E-16,0.595227550626, + -0.803557193345)); +#44866 = DIRECTION('',(1.362972871417E-16,0.803557193345,0.595227550626) + ); +#44867 = ADVANCED_FACE('',(#44868),#44884,.T.); +#44868 = FACE_BOUND('',#44869,.T.); +#44869 = EDGE_LOOP('',(#44870,#44876,#44877,#44883)); +#44870 = ORIENTED_EDGE('',*,*,#44871,.F.); +#44871 = EDGE_CURVE('',#43123,#44773,#44872,.T.); +#44872 = LINE('',#44873,#44874); +#44873 = CARTESIAN_POINT('',(5.675,0.92,-2.109423746788E-15)); +#44874 = VECTOR('',#44875,1.); +#44875 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44876 = ORIENTED_EDGE('',*,*,#43148,.T.); +#44877 = ORIENTED_EDGE('',*,*,#44878,.T.); +#44878 = EDGE_CURVE('',#43141,#44782,#44879,.T.); +#44879 = LINE('',#44880,#44881); +#44880 = CARTESIAN_POINT('',(5.825,0.92,-2.109423746788E-15)); +#44881 = VECTOR('',#44882,1.); +#44882 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44883 = ORIENTED_EDGE('',*,*,#44781,.F.); +#44884 = PLANE('',#44885); +#44885 = AXIS2_PLACEMENT_3D('',#44886,#44887,#44888); +#44886 = CARTESIAN_POINT('',(5.675,0.92,-2.109423746788E-15)); +#44887 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44888 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44889 = ADVANCED_FACE('',(#44890),#44901,.T.); +#44890 = FACE_BOUND('',#44891,.T.); +#44891 = EDGE_LOOP('',(#44892,#44893,#44899,#44900)); +#44892 = ORIENTED_EDGE('',*,*,#39857,.F.); +#44893 = ORIENTED_EDGE('',*,*,#44894,.F.); +#44894 = EDGE_CURVE('',#42430,#39850,#44895,.T.); +#44895 = LINE('',#44896,#44897); +#44896 = CARTESIAN_POINT('',(-20.,1.,15.48)); +#44897 = VECTOR('',#44898,1.); +#44898 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#44899 = ORIENTED_EDGE('',*,*,#42429,.F.); +#44900 = ORIENTED_EDGE('',*,*,#39706,.T.); +#44901 = PLANE('',#44902); +#44902 = AXIS2_PLACEMENT_3D('',#44903,#44904,#44905); +#44903 = CARTESIAN_POINT('',(-4.575,0.85,5.5E-02)); +#44904 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#44905 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#44906 = ADVANCED_FACE('',(#44907),#44990,.T.); +#44907 = FACE_BOUND('',#44908,.T.); +#44908 = EDGE_LOOP('',(#44909,#44919,#44927,#44936,#44944,#44952,#44960, + #44968,#44977,#44983,#44984)); +#44909 = ORIENTED_EDGE('',*,*,#44910,.T.); +#44910 = EDGE_CURVE('',#44911,#44913,#44915,.T.); +#44911 = VERTEX_POINT('',#44912); +#44912 = CARTESIAN_POINT('',(5.325,1.,8.E-02)); +#44913 = VERTEX_POINT('',#44914); +#44914 = CARTESIAN_POINT('',(5.325,1.,7.866077735406E-02)); +#44915 = LINE('',#44916,#44917); +#44916 = CARTESIAN_POINT('',(5.325,1.,0.841614)); +#44917 = VECTOR('',#44918,1.); +#44918 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#44919 = ORIENTED_EDGE('',*,*,#44920,.F.); +#44920 = EDGE_CURVE('',#44921,#44913,#44923,.T.); +#44921 = VERTEX_POINT('',#44922); +#44922 = CARTESIAN_POINT('',(5.325,0.943186633611,6.541154699934E-02)); +#44923 = LINE('',#44924,#44925); +#44924 = CARTESIAN_POINT('',(5.325,0.694863,7.500931358164E-03)); +#44925 = VECTOR('',#44926,1.); +#44926 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#44927 = ORIENTED_EDGE('',*,*,#44928,.T.); +#44928 = EDGE_CURVE('',#44921,#44929,#44931,.T.); +#44929 = VERTEX_POINT('',#44930); +#44930 = CARTESIAN_POINT('',(5.325,0.92,3.619548911246E-02)); +#44931 = CIRCLE('',#44932,3.E-02); +#44932 = AXIS2_PLACEMENT_3D('',#44933,#44934,#44935); +#44933 = CARTESIAN_POINT('',(5.325,0.95,3.619548911246E-02)); +#44934 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44935 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44936 = ORIENTED_EDGE('',*,*,#44937,.F.); +#44937 = EDGE_CURVE('',#44938,#44929,#44940,.T.); +#44938 = VERTEX_POINT('',#44939); +#44939 = CARTESIAN_POINT('',(5.325,0.92,-1.7763568394E-15)); +#44940 = LINE('',#44941,#44942); +#44941 = CARTESIAN_POINT('',(5.325,0.92,0.841614)); +#44942 = VECTOR('',#44943,1.); +#44943 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#44944 = ORIENTED_EDGE('',*,*,#44945,.F.); +#44945 = EDGE_CURVE('',#44946,#44938,#44948,.T.); +#44946 = VERTEX_POINT('',#44947); +#44947 = CARTESIAN_POINT('',(5.325,1.25,-1.887379141863E-15)); +#44948 = LINE('',#44949,#44950); +#44949 = CARTESIAN_POINT('',(5.325,0.694863,-1.7763568394E-15)); +#44950 = VECTOR('',#44951,1.); +#44951 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#44952 = ORIENTED_EDGE('',*,*,#44953,.F.); +#44953 = EDGE_CURVE('',#44954,#44946,#44956,.T.); +#44954 = VERTEX_POINT('',#44955); +#44955 = CARTESIAN_POINT('',(5.325,1.3,5.E-02)); +#44956 = LINE('',#44957,#44958); +#44957 = CARTESIAN_POINT('',(5.325,0.694863,-0.555137)); +#44958 = VECTOR('',#44959,1.); +#44959 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#44960 = ORIENTED_EDGE('',*,*,#44961,.F.); +#44961 = EDGE_CURVE('',#44962,#44954,#44964,.T.); +#44962 = VERTEX_POINT('',#44963); +#44963 = CARTESIAN_POINT('',(5.325,1.3,0.11)); +#44964 = LINE('',#44965,#44966); +#44965 = CARTESIAN_POINT('',(5.325,1.3,0.841614)); +#44966 = VECTOR('',#44967,1.); +#44967 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44968 = ORIENTED_EDGE('',*,*,#44969,.F.); +#44969 = EDGE_CURVE('',#44970,#44962,#44972,.T.); +#44970 = VERTEX_POINT('',#44971); +#44971 = CARTESIAN_POINT('',(5.325,1.35,0.16)); +#44972 = CIRCLE('',#44973,5.E-02); +#44973 = AXIS2_PLACEMENT_3D('',#44974,#44975,#44976); +#44974 = CARTESIAN_POINT('',(5.325,1.35,0.11)); +#44975 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44976 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#44977 = ORIENTED_EDGE('',*,*,#44978,.F.); +#44978 = EDGE_CURVE('',#43365,#44970,#44979,.T.); +#44979 = LINE('',#44980,#44981); +#44980 = CARTESIAN_POINT('',(5.325,1.35,0.841614)); +#44981 = VECTOR('',#44982,1.); +#44982 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#44983 = ORIENTED_EDGE('',*,*,#43364,.T.); +#44984 = ORIENTED_EDGE('',*,*,#44985,.F.); +#44985 = EDGE_CURVE('',#44911,#43357,#44986,.T.); +#44986 = LINE('',#44987,#44988); +#44987 = CARTESIAN_POINT('',(5.325,1.,0.841614)); +#44988 = VECTOR('',#44989,1.); +#44989 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#44990 = PLANE('',#44991); +#44991 = AXIS2_PLACEMENT_3D('',#44992,#44993,#44994); +#44992 = CARTESIAN_POINT('',(5.325,1.245779075398,0.170500231015)); +#44993 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#44994 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#44995 = ADVANCED_FACE('',(#44996),#45021,.T.); +#44996 = FACE_BOUND('',#44997,.T.); +#44997 = EDGE_LOOP('',(#44998,#45008,#45014,#45015)); +#44998 = ORIENTED_EDGE('',*,*,#44999,.F.); +#44999 = EDGE_CURVE('',#45000,#45002,#45004,.T.); +#45000 = VERTEX_POINT('',#45001); +#45001 = CARTESIAN_POINT('',(5.1,0.92,8.E-02)); +#45002 = VERTEX_POINT('',#45003); +#45003 = CARTESIAN_POINT('',(5.1,1.,8.E-02)); +#45004 = LINE('',#45005,#45006); +#45005 = CARTESIAN_POINT('',(5.1,0.694863,8.E-02)); +#45006 = VECTOR('',#45007,1.); +#45007 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#45008 = ORIENTED_EDGE('',*,*,#45009,.T.); +#45009 = EDGE_CURVE('',#45000,#43045,#45010,.T.); +#45010 = LINE('',#45011,#45012); +#45011 = CARTESIAN_POINT('',(5.0488325,0.694863,2.88325E-02)); +#45012 = VECTOR('',#45013,1.); +#45013 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#45014 = ORIENTED_EDGE('',*,*,#43044,.F.); +#45015 = ORIENTED_EDGE('',*,*,#45016,.F.); +#45016 = EDGE_CURVE('',#45002,#43037,#45017,.T.); +#45017 = LINE('',#45018,#45019); +#45018 = CARTESIAN_POINT('',(-10.5,1.,-15.52)); +#45019 = VECTOR('',#45020,1.); +#45020 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#45021 = PLANE('',#45022); +#45022 = AXIS2_PLACEMENT_3D('',#45023,#45024,#45025); +#45023 = CARTESIAN_POINT('',(5.075,0.85,5.5E-02)); +#45024 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#45025 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#45026 = ADVANCED_FACE('',(#45027),#45049,.T.); +#45027 = FACE_BOUND('',#45028,.T.); +#45028 = EDGE_LOOP('',(#45029,#45037,#45043,#45044,#45045,#45046,#45047, + #45048)); +#45029 = ORIENTED_EDGE('',*,*,#45030,.T.); +#45030 = EDGE_CURVE('',#43381,#45031,#45033,.T.); +#45031 = VERTEX_POINT('',#45032); +#45032 = CARTESIAN_POINT('',(5.175,1.,8.E-02)); +#45033 = LINE('',#45034,#45035); +#45034 = CARTESIAN_POINT('',(5.175,1.,0.841614)); +#45035 = VECTOR('',#45036,1.); +#45036 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45037 = ORIENTED_EDGE('',*,*,#45038,.T.); +#45038 = EDGE_CURVE('',#45031,#45002,#45039,.T.); +#45039 = LINE('',#45040,#45041); +#45040 = CARTESIAN_POINT('',(-10.5,1.,8.E-02)); +#45041 = VECTOR('',#45042,1.); +#45042 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45043 = ORIENTED_EDGE('',*,*,#45016,.T.); +#45044 = ORIENTED_EDGE('',*,*,#43036,.F.); +#45045 = ORIENTED_EDGE('',*,*,#43270,.T.); +#45046 = ORIENTED_EDGE('',*,*,#44543,.T.); +#45047 = ORIENTED_EDGE('',*,*,#43246,.F.); +#45048 = ORIENTED_EDGE('',*,*,#43388,.T.); +#45049 = PLANE('',#45050); +#45050 = AXIS2_PLACEMENT_3D('',#45051,#45052,#45053); +#45051 = CARTESIAN_POINT('',(8.825,1.,0.31)); +#45052 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#45053 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45054 = ADVANCED_FACE('',(#45055),#45078,.F.); +#45055 = FACE_BOUND('',#45056,.T.); +#45056 = EDGE_LOOP('',(#45057,#45063,#45071,#45077)); +#45057 = ORIENTED_EDGE('',*,*,#45058,.F.); +#45058 = EDGE_CURVE('',#45031,#44911,#45059,.T.); +#45059 = LINE('',#45060,#45061); +#45060 = CARTESIAN_POINT('',(10.5,1.,8.E-02)); +#45061 = VECTOR('',#45062,1.); +#45062 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45063 = ORIENTED_EDGE('',*,*,#45064,.T.); +#45064 = EDGE_CURVE('',#45031,#45065,#45067,.T.); +#45065 = VERTEX_POINT('',#45066); +#45066 = CARTESIAN_POINT('',(5.175,1.,7.866077735406E-02)); +#45067 = LINE('',#45068,#45069); +#45068 = CARTESIAN_POINT('',(5.175,1.,0.841614)); +#45069 = VECTOR('',#45070,1.); +#45070 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45071 = ORIENTED_EDGE('',*,*,#45072,.F.); +#45072 = EDGE_CURVE('',#44913,#45065,#45073,.T.); +#45073 = LINE('',#45074,#45075); +#45074 = CARTESIAN_POINT('',(10.5,1.,7.866077735406E-02)); +#45075 = VECTOR('',#45076,1.); +#45076 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45077 = ORIENTED_EDGE('',*,*,#44910,.F.); +#45078 = PLANE('',#45079); +#45079 = AXIS2_PLACEMENT_3D('',#45080,#45081,#45082); +#45080 = CARTESIAN_POINT('',(5.325,1.,7.866077735406E-02)); +#45081 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#45082 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45083 = ADVANCED_FACE('',(#45084),#45153,.F.); +#45084 = FACE_BOUND('',#45085,.T.); +#45085 = EDGE_LOOP('',(#45086,#45087,#45088,#45096,#45105,#45113,#45121, + #45129,#45137,#45146,#45152)); +#45086 = ORIENTED_EDGE('',*,*,#45030,.F.); +#45087 = ORIENTED_EDGE('',*,*,#43380,.F.); +#45088 = ORIENTED_EDGE('',*,*,#45089,.F.); +#45089 = EDGE_CURVE('',#45090,#43373,#45092,.T.); +#45090 = VERTEX_POINT('',#45091); +#45091 = CARTESIAN_POINT('',(5.175,1.35,0.16)); +#45092 = LINE('',#45093,#45094); +#45093 = CARTESIAN_POINT('',(5.175,1.35,0.31)); +#45094 = VECTOR('',#45095,1.); +#45095 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#45096 = ORIENTED_EDGE('',*,*,#45097,.T.); +#45097 = EDGE_CURVE('',#45090,#45098,#45100,.T.); +#45098 = VERTEX_POINT('',#45099); +#45099 = CARTESIAN_POINT('',(5.175,1.3,0.11)); +#45100 = CIRCLE('',#45101,5.E-02); +#45101 = AXIS2_PLACEMENT_3D('',#45102,#45103,#45104); +#45102 = CARTESIAN_POINT('',(5.175,1.35,0.11)); +#45103 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45104 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45105 = ORIENTED_EDGE('',*,*,#45106,.T.); +#45106 = EDGE_CURVE('',#45098,#45107,#45109,.T.); +#45107 = VERTEX_POINT('',#45108); +#45108 = CARTESIAN_POINT('',(5.175,1.3,5.E-02)); +#45109 = LINE('',#45110,#45111); +#45110 = CARTESIAN_POINT('',(5.175,1.3,0.11)); +#45111 = VECTOR('',#45112,1.); +#45112 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45113 = ORIENTED_EDGE('',*,*,#45114,.T.); +#45114 = EDGE_CURVE('',#45107,#45115,#45117,.T.); +#45115 = VERTEX_POINT('',#45116); +#45116 = CARTESIAN_POINT('',(5.175,1.25,-1.887379141863E-15)); +#45117 = LINE('',#45118,#45119); +#45118 = CARTESIAN_POINT('',(5.175,1.3,5.E-02)); +#45119 = VECTOR('',#45120,1.); +#45120 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#45121 = ORIENTED_EDGE('',*,*,#45122,.F.); +#45122 = EDGE_CURVE('',#45123,#45115,#45125,.T.); +#45123 = VERTEX_POINT('',#45124); +#45124 = CARTESIAN_POINT('',(5.175,0.92,-1.7763568394E-15)); +#45125 = LINE('',#45126,#45127); +#45126 = CARTESIAN_POINT('',(5.175,0.92,-1.7763568394E-15)); +#45127 = VECTOR('',#45128,1.); +#45128 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#45129 = ORIENTED_EDGE('',*,*,#45130,.T.); +#45130 = EDGE_CURVE('',#45123,#45131,#45133,.T.); +#45131 = VERTEX_POINT('',#45132); +#45132 = CARTESIAN_POINT('',(5.175,0.92,3.619548911246E-02)); +#45133 = LINE('',#45134,#45135); +#45134 = CARTESIAN_POINT('',(5.175,0.92,-1.7763568394E-15)); +#45135 = VECTOR('',#45136,1.); +#45136 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#45137 = ORIENTED_EDGE('',*,*,#45138,.F.); +#45138 = EDGE_CURVE('',#45139,#45131,#45141,.T.); +#45139 = VERTEX_POINT('',#45140); +#45140 = CARTESIAN_POINT('',(5.175,0.943186633611,6.541154699934E-02)); +#45141 = CIRCLE('',#45142,3.E-02); +#45142 = AXIS2_PLACEMENT_3D('',#45143,#45144,#45145); +#45143 = CARTESIAN_POINT('',(5.175,0.95,3.619548911246E-02)); +#45144 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45145 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45146 = ORIENTED_EDGE('',*,*,#45147,.T.); +#45147 = EDGE_CURVE('',#45139,#45065,#45148,.T.); +#45148 = LINE('',#45149,#45150); +#45149 = CARTESIAN_POINT('',(5.175,0.943186633611,6.541154699934E-02)); +#45150 = VECTOR('',#45151,1.); +#45151 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#45152 = ORIENTED_EDGE('',*,*,#45064,.F.); +#45153 = PLANE('',#45154); +#45154 = AXIS2_PLACEMENT_3D('',#45155,#45156,#45157); +#45155 = CARTESIAN_POINT('',(5.175,1.245779075398,0.170500231015)); +#45156 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45157 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#45158 = ADVANCED_FACE('',(#45159),#45170,.T.); +#45159 = FACE_BOUND('',#45160,.T.); +#45160 = EDGE_LOOP('',(#45161,#45162,#45163,#45169)); +#45161 = ORIENTED_EDGE('',*,*,#43372,.T.); +#45162 = ORIENTED_EDGE('',*,*,#44978,.T.); +#45163 = ORIENTED_EDGE('',*,*,#45164,.F.); +#45164 = EDGE_CURVE('',#45090,#44970,#45165,.T.); +#45165 = LINE('',#45166,#45167); +#45166 = CARTESIAN_POINT('',(5.175,1.35,0.16)); +#45167 = VECTOR('',#45168,1.); +#45168 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45169 = ORIENTED_EDGE('',*,*,#45089,.T.); +#45170 = PLANE('',#45171); +#45171 = AXIS2_PLACEMENT_3D('',#45172,#45173,#45174); +#45172 = CARTESIAN_POINT('',(5.175,1.35,0.31)); +#45173 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#45174 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45175 = ADVANCED_FACE('',(#45176),#45187,.T.); +#45176 = FACE_BOUND('',#45177,.T.); +#45177 = EDGE_LOOP('',(#45178,#45184,#45185,#45186)); +#45178 = ORIENTED_EDGE('',*,*,#45179,.T.); +#45179 = EDGE_CURVE('',#45139,#44921,#45180,.T.); +#45180 = LINE('',#45181,#45182); +#45181 = CARTESIAN_POINT('',(5.175,0.943186633611,6.541154699934E-02)); +#45182 = VECTOR('',#45183,1.); +#45183 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45184 = ORIENTED_EDGE('',*,*,#44920,.T.); +#45185 = ORIENTED_EDGE('',*,*,#45072,.T.); +#45186 = ORIENTED_EDGE('',*,*,#45147,.F.); +#45187 = PLANE('',#45188); +#45188 = AXIS2_PLACEMENT_3D('',#45189,#45190,#45191); +#45189 = CARTESIAN_POINT('',(5.175,0.943186633611,6.541154699934E-02)); +#45190 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#45191 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#45192 = ADVANCED_FACE('',(#45193),#45204,.T.); +#45193 = FACE_BOUND('',#45194,.T.); +#45194 = EDGE_LOOP('',(#45195,#45201,#45202,#45203)); +#45195 = ORIENTED_EDGE('',*,*,#45196,.T.); +#45196 = EDGE_CURVE('',#45131,#44929,#45197,.T.); +#45197 = LINE('',#45198,#45199); +#45198 = CARTESIAN_POINT('',(5.175,0.92,3.619548911246E-02)); +#45199 = VECTOR('',#45200,1.); +#45200 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45201 = ORIENTED_EDGE('',*,*,#44928,.F.); +#45202 = ORIENTED_EDGE('',*,*,#45179,.F.); +#45203 = ORIENTED_EDGE('',*,*,#45138,.T.); +#45204 = CYLINDRICAL_SURFACE('',#45205,3.E-02); +#45205 = AXIS2_PLACEMENT_3D('',#45206,#45207,#45208); +#45206 = CARTESIAN_POINT('',(5.175,0.95,3.619548911246E-02)); +#45207 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45208 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45209 = ADVANCED_FACE('',(#45210),#45221,.T.); +#45210 = FACE_BOUND('',#45211,.T.); +#45211 = EDGE_LOOP('',(#45212,#45213,#45219,#45220)); +#45212 = ORIENTED_EDGE('',*,*,#45130,.F.); +#45213 = ORIENTED_EDGE('',*,*,#45214,.T.); +#45214 = EDGE_CURVE('',#45123,#44938,#45215,.T.); +#45215 = LINE('',#45216,#45217); +#45216 = CARTESIAN_POINT('',(5.175,0.92,-1.7763568394E-15)); +#45217 = VECTOR('',#45218,1.); +#45218 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45219 = ORIENTED_EDGE('',*,*,#44937,.T.); +#45220 = ORIENTED_EDGE('',*,*,#45196,.F.); +#45221 = PLANE('',#45222); +#45222 = AXIS2_PLACEMENT_3D('',#45223,#45224,#45225); +#45223 = CARTESIAN_POINT('',(5.175,0.92,-1.7763568394E-15)); +#45224 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#45225 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#45226 = ADVANCED_FACE('',(#45227),#45238,.T.); +#45227 = FACE_BOUND('',#45228,.T.); +#45228 = EDGE_LOOP('',(#45229,#45235,#45236,#45237)); +#45229 = ORIENTED_EDGE('',*,*,#45230,.T.); +#45230 = EDGE_CURVE('',#45115,#44946,#45231,.T.); +#45231 = LINE('',#45232,#45233); +#45232 = CARTESIAN_POINT('',(5.175,1.25,-1.887379141863E-15)); +#45233 = VECTOR('',#45234,1.); +#45234 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45235 = ORIENTED_EDGE('',*,*,#44945,.T.); +#45236 = ORIENTED_EDGE('',*,*,#45214,.F.); +#45237 = ORIENTED_EDGE('',*,*,#45122,.T.); +#45238 = PLANE('',#45239); +#45239 = AXIS2_PLACEMENT_3D('',#45240,#45241,#45242); +#45240 = CARTESIAN_POINT('',(5.175,1.25,-1.887379141863E-15)); +#45241 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45242 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#45243 = ADVANCED_FACE('',(#45244),#45255,.T.); +#45244 = FACE_BOUND('',#45245,.T.); +#45245 = EDGE_LOOP('',(#45246,#45252,#45253,#45254)); +#45246 = ORIENTED_EDGE('',*,*,#45247,.T.); +#45247 = EDGE_CURVE('',#45107,#44954,#45248,.T.); +#45248 = LINE('',#45249,#45250); +#45249 = CARTESIAN_POINT('',(5.175,1.3,5.E-02)); +#45250 = VECTOR('',#45251,1.); +#45251 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45252 = ORIENTED_EDGE('',*,*,#44953,.T.); +#45253 = ORIENTED_EDGE('',*,*,#45230,.F.); +#45254 = ORIENTED_EDGE('',*,*,#45114,.F.); +#45255 = PLANE('',#45256); +#45256 = AXIS2_PLACEMENT_3D('',#45257,#45258,#45259); +#45257 = CARTESIAN_POINT('',(5.175,1.3,5.E-02)); +#45258 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#45259 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#45260 = ADVANCED_FACE('',(#45261),#45272,.T.); +#45261 = FACE_BOUND('',#45262,.T.); +#45262 = EDGE_LOOP('',(#45263,#45269,#45270,#45271)); +#45263 = ORIENTED_EDGE('',*,*,#45264,.T.); +#45264 = EDGE_CURVE('',#45098,#44962,#45265,.T.); +#45265 = LINE('',#45266,#45267); +#45266 = CARTESIAN_POINT('',(5.175,1.3,0.11)); +#45267 = VECTOR('',#45268,1.); +#45268 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45269 = ORIENTED_EDGE('',*,*,#44961,.T.); +#45270 = ORIENTED_EDGE('',*,*,#45247,.F.); +#45271 = ORIENTED_EDGE('',*,*,#45106,.F.); +#45272 = PLANE('',#45273); +#45273 = AXIS2_PLACEMENT_3D('',#45274,#45275,#45276); +#45274 = CARTESIAN_POINT('',(5.175,1.3,0.11)); +#45275 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#45276 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45277 = ADVANCED_FACE('',(#45278),#45284,.F.); +#45278 = FACE_BOUND('',#45279,.F.); +#45279 = EDGE_LOOP('',(#45280,#45281,#45282,#45283)); +#45280 = ORIENTED_EDGE('',*,*,#45097,.T.); +#45281 = ORIENTED_EDGE('',*,*,#45264,.T.); +#45282 = ORIENTED_EDGE('',*,*,#44969,.F.); +#45283 = ORIENTED_EDGE('',*,*,#45164,.F.); +#45284 = CYLINDRICAL_SURFACE('',#45285,5.E-02); +#45285 = AXIS2_PLACEMENT_3D('',#45286,#45287,#45288); +#45286 = CARTESIAN_POINT('',(5.175,1.35,0.11)); +#45287 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45288 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45289 = ADVANCED_FACE('',(#45290),#45317,.T.); +#45290 = FACE_BOUND('',#45291,.T.); +#45291 = EDGE_LOOP('',(#45292,#45300,#45301,#45302,#45303,#45311)); +#45292 = ORIENTED_EDGE('',*,*,#45293,.T.); +#45293 = EDGE_CURVE('',#45294,#45000,#45296,.T.); +#45294 = VERTEX_POINT('',#45295); +#45295 = CARTESIAN_POINT('',(5.4,0.92,8.E-02)); +#45296 = LINE('',#45297,#45298); +#45297 = CARTESIAN_POINT('',(-10.5,0.92,8.E-02)); +#45298 = VECTOR('',#45299,1.); +#45299 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45300 = ORIENTED_EDGE('',*,*,#44999,.T.); +#45301 = ORIENTED_EDGE('',*,*,#45038,.F.); +#45302 = ORIENTED_EDGE('',*,*,#45058,.T.); +#45303 = ORIENTED_EDGE('',*,*,#45304,.F.); +#45304 = EDGE_CURVE('',#45305,#44911,#45307,.T.); +#45305 = VERTEX_POINT('',#45306); +#45306 = CARTESIAN_POINT('',(5.4,1.,8.E-02)); +#45307 = LINE('',#45308,#45309); +#45308 = CARTESIAN_POINT('',(-10.5,1.,8.E-02)); +#45309 = VECTOR('',#45310,1.); +#45310 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45311 = ORIENTED_EDGE('',*,*,#45312,.T.); +#45312 = EDGE_CURVE('',#45305,#45294,#45313,.T.); +#45313 = LINE('',#45314,#45315); +#45314 = CARTESIAN_POINT('',(5.4,0.694863,8.E-02)); +#45315 = VECTOR('',#45316,1.); +#45316 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#45317 = PLANE('',#45318); +#45318 = AXIS2_PLACEMENT_3D('',#45319,#45320,#45321); +#45319 = CARTESIAN_POINT('',(5.1625,1.,8.E-02)); +#45320 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45321 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#45322 = ADVANCED_FACE('',(#45323),#45334,.T.); +#45323 = FACE_BOUND('',#45324,.T.); +#45324 = EDGE_LOOP('',(#45325,#45326,#45327,#45328)); +#45325 = ORIENTED_EDGE('',*,*,#43052,.T.); +#45326 = ORIENTED_EDGE('',*,*,#45009,.F.); +#45327 = ORIENTED_EDGE('',*,*,#45293,.F.); +#45328 = ORIENTED_EDGE('',*,*,#45329,.F.); +#45329 = EDGE_CURVE('',#43053,#45294,#45330,.T.); +#45330 = LINE('',#45331,#45332); +#45331 = CARTESIAN_POINT('',(5.4511675,0.694863,2.88325E-02)); +#45332 = VECTOR('',#45333,1.); +#45333 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#45334 = PLANE('',#45335); +#45335 = AXIS2_PLACEMENT_3D('',#45336,#45337,#45338); +#45336 = CARTESIAN_POINT('',(5.1625,0.92,8.E-02)); +#45337 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#45338 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#45339 = ADVANCED_FACE('',(#45340),#45365,.T.); +#45340 = FACE_BOUND('',#45341,.T.); +#45341 = EDGE_LOOP('',(#45342,#45343,#45351,#45359)); +#45342 = ORIENTED_EDGE('',*,*,#39554,.T.); +#45343 = ORIENTED_EDGE('',*,*,#45344,.T.); +#45344 = EDGE_CURVE('',#39546,#45345,#45347,.T.); +#45345 = VERTEX_POINT('',#45346); +#45346 = CARTESIAN_POINT('',(-4.175,1.,7.866077735407E-02)); +#45347 = LINE('',#45348,#45349); +#45348 = CARTESIAN_POINT('',(-4.175,0.694863,7.500931358167E-03)); +#45349 = VECTOR('',#45350,1.); +#45350 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#45351 = ORIENTED_EDGE('',*,*,#45352,.T.); +#45352 = EDGE_CURVE('',#45345,#45353,#45355,.T.); +#45353 = VERTEX_POINT('',#45354); +#45354 = CARTESIAN_POINT('',(-4.325,1.,7.866077735407E-02)); +#45355 = LINE('',#45356,#45357); +#45356 = CARTESIAN_POINT('',(1.,1.,7.866077735406E-02)); +#45357 = VECTOR('',#45358,1.); +#45358 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45359 = ORIENTED_EDGE('',*,*,#45360,.F.); +#45360 = EDGE_CURVE('',#39555,#45353,#45361,.T.); +#45361 = LINE('',#45362,#45363); +#45362 = CARTESIAN_POINT('',(-4.325,0.943186633611,6.541154699934E-02)); +#45363 = VECTOR('',#45364,1.); +#45364 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#45365 = PLANE('',#45366); +#45366 = AXIS2_PLACEMENT_3D('',#45367,#45368,#45369); +#45367 = CARTESIAN_POINT('',(-4.325,0.943186633611,6.541154699934E-02)); +#45368 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#45369 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#45370 = ADVANCED_FACE('',(#45371),#45396,.T.); +#45371 = FACE_BOUND('',#45372,.T.); +#45372 = EDGE_LOOP('',(#45373,#45383,#45389,#45390)); +#45373 = ORIENTED_EDGE('',*,*,#45374,.T.); +#45374 = EDGE_CURVE('',#45375,#45377,#45379,.T.); +#45375 = VERTEX_POINT('',#45376); +#45376 = CARTESIAN_POINT('',(-4.325,1.3,5.E-02)); +#45377 = VERTEX_POINT('',#45378); +#45378 = CARTESIAN_POINT('',(-4.175,1.3,5.E-02)); +#45379 = LINE('',#45380,#45381); +#45380 = CARTESIAN_POINT('',(-4.325,1.3,5.E-02)); +#45381 = VECTOR('',#45382,1.); +#45382 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45383 = ORIENTED_EDGE('',*,*,#45384,.T.); +#45384 = EDGE_CURVE('',#45377,#44669,#45385,.T.); +#45385 = LINE('',#45386,#45387); +#45386 = CARTESIAN_POINT('',(-4.175,0.694863,-0.555137)); +#45387 = VECTOR('',#45388,1.); +#45388 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#45389 = ORIENTED_EDGE('',*,*,#44666,.F.); +#45390 = ORIENTED_EDGE('',*,*,#45391,.F.); +#45391 = EDGE_CURVE('',#45375,#44667,#45392,.T.); +#45392 = LINE('',#45393,#45394); +#45393 = CARTESIAN_POINT('',(-4.325,1.3,5.E-02)); +#45394 = VECTOR('',#45395,1.); +#45395 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#45396 = PLANE('',#45397); +#45397 = AXIS2_PLACEMENT_3D('',#45398,#45399,#45400); +#45398 = CARTESIAN_POINT('',(-4.325,1.3,5.E-02)); +#45399 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#45400 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#45401 = ADVANCED_FACE('',(#45402),#45431,.T.); +#45402 = FACE_BOUND('',#45403,.T.); +#45403 = EDGE_LOOP('',(#45404,#45412,#45420,#45426,#45427,#45428,#45429, + #45430)); +#45404 = ORIENTED_EDGE('',*,*,#45405,.T.); +#45405 = EDGE_CURVE('',#43980,#45406,#45408,.T.); +#45406 = VERTEX_POINT('',#45407); +#45407 = CARTESIAN_POINT('',(-4.325,1.,8.E-02)); +#45408 = LINE('',#45409,#45410); +#45409 = CARTESIAN_POINT('',(-4.325,1.,0.841614)); +#45410 = VECTOR('',#45411,1.); +#45411 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45412 = ORIENTED_EDGE('',*,*,#45413,.T.); +#45413 = EDGE_CURVE('',#45406,#45414,#45416,.T.); +#45414 = VERTEX_POINT('',#45415); +#45415 = CARTESIAN_POINT('',(-4.4,1.,8.E-02)); +#45416 = LINE('',#45417,#45418); +#45417 = CARTESIAN_POINT('',(-20.,1.,8.E-02)); +#45418 = VECTOR('',#45419,1.); +#45419 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45420 = ORIENTED_EDGE('',*,*,#45421,.T.); +#45421 = EDGE_CURVE('',#45414,#42438,#45422,.T.); +#45422 = LINE('',#45423,#45424); +#45423 = CARTESIAN_POINT('',(-20.,1.,-15.52)); +#45424 = VECTOR('',#45425,1.); +#45425 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#45426 = ORIENTED_EDGE('',*,*,#42437,.F.); +#45427 = ORIENTED_EDGE('',*,*,#44894,.T.); +#45428 = ORIENTED_EDGE('',*,*,#39849,.T.); +#45429 = ORIENTED_EDGE('',*,*,#44101,.F.); +#45430 = ORIENTED_EDGE('',*,*,#43987,.T.); +#45431 = PLANE('',#45432); +#45432 = AXIS2_PLACEMENT_3D('',#45433,#45434,#45435); +#45433 = CARTESIAN_POINT('',(-0.675,1.,0.31)); +#45434 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#45435 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45436 = ADVANCED_FACE('',(#45437),#45475,.F.); +#45437 = FACE_BOUND('',#45438,.T.); +#45438 = EDGE_LOOP('',(#45439,#45440,#45441,#45449,#45458,#45464,#45465, + #45466,#45467,#45468,#45469)); +#45439 = ORIENTED_EDGE('',*,*,#45405,.F.); +#45440 = ORIENTED_EDGE('',*,*,#43979,.F.); +#45441 = ORIENTED_EDGE('',*,*,#45442,.F.); +#45442 = EDGE_CURVE('',#45443,#43972,#45445,.T.); +#45443 = VERTEX_POINT('',#45444); +#45444 = CARTESIAN_POINT('',(-4.325,1.35,0.16)); +#45445 = LINE('',#45446,#45447); +#45446 = CARTESIAN_POINT('',(-4.325,1.35,0.31)); +#45447 = VECTOR('',#45448,1.); +#45448 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#45449 = ORIENTED_EDGE('',*,*,#45450,.T.); +#45450 = EDGE_CURVE('',#45443,#45451,#45453,.T.); +#45451 = VERTEX_POINT('',#45452); +#45452 = CARTESIAN_POINT('',(-4.325,1.3,0.11)); +#45453 = CIRCLE('',#45454,5.E-02); +#45454 = AXIS2_PLACEMENT_3D('',#45455,#45456,#45457); +#45455 = CARTESIAN_POINT('',(-4.325,1.35,0.11)); +#45456 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45457 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45458 = ORIENTED_EDGE('',*,*,#45459,.T.); +#45459 = EDGE_CURVE('',#45451,#45375,#45460,.T.); +#45460 = LINE('',#45461,#45462); +#45461 = CARTESIAN_POINT('',(-4.325,1.3,0.11)); +#45462 = VECTOR('',#45463,1.); +#45463 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45464 = ORIENTED_EDGE('',*,*,#45391,.T.); +#45465 = ORIENTED_EDGE('',*,*,#44683,.F.); +#45466 = ORIENTED_EDGE('',*,*,#39762,.T.); +#45467 = ORIENTED_EDGE('',*,*,#39562,.F.); +#45468 = ORIENTED_EDGE('',*,*,#45360,.T.); +#45469 = ORIENTED_EDGE('',*,*,#45470,.F.); +#45470 = EDGE_CURVE('',#45406,#45353,#45471,.T.); +#45471 = LINE('',#45472,#45473); +#45472 = CARTESIAN_POINT('',(-4.325,1.,0.841614)); +#45473 = VECTOR('',#45474,1.); +#45474 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45475 = PLANE('',#45476); +#45476 = AXIS2_PLACEMENT_3D('',#45477,#45478,#45479); +#45477 = CARTESIAN_POINT('',(-4.325,1.245779075398,0.170500231015)); +#45478 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45479 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#45480 = ADVANCED_FACE('',(#45481),#45499,.F.); +#45481 = FACE_BOUND('',#45482,.T.); +#45482 = EDGE_LOOP('',(#45483,#45491,#45492,#45493)); +#45483 = ORIENTED_EDGE('',*,*,#45484,.F.); +#45484 = EDGE_CURVE('',#45406,#45485,#45487,.T.); +#45485 = VERTEX_POINT('',#45486); +#45486 = CARTESIAN_POINT('',(-4.175,1.,8.E-02)); +#45487 = LINE('',#45488,#45489); +#45488 = CARTESIAN_POINT('',(1.,1.,8.E-02)); +#45489 = VECTOR('',#45490,1.); +#45490 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45491 = ORIENTED_EDGE('',*,*,#45470,.T.); +#45492 = ORIENTED_EDGE('',*,*,#45352,.F.); +#45493 = ORIENTED_EDGE('',*,*,#45494,.F.); +#45494 = EDGE_CURVE('',#45485,#45345,#45495,.T.); +#45495 = LINE('',#45496,#45497); +#45496 = CARTESIAN_POINT('',(-4.175,1.,0.841614)); +#45497 = VECTOR('',#45498,1.); +#45498 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45499 = PLANE('',#45500); +#45500 = AXIS2_PLACEMENT_3D('',#45501,#45502,#45503); +#45501 = CARTESIAN_POINT('',(-4.175,1.,7.866077735407E-02)); +#45502 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#45503 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45504 = ADVANCED_FACE('',(#45505),#45543,.T.); +#45505 = FACE_BOUND('',#45506,.T.); +#45506 = EDGE_LOOP('',(#45507,#45508,#45509,#45510,#45511,#45512,#45513, + #45521,#45530,#45536,#45537)); +#45507 = ORIENTED_EDGE('',*,*,#45494,.T.); +#45508 = ORIENTED_EDGE('',*,*,#45344,.F.); +#45509 = ORIENTED_EDGE('',*,*,#39545,.T.); +#45510 = ORIENTED_EDGE('',*,*,#39778,.F.); +#45511 = ORIENTED_EDGE('',*,*,#44676,.F.); +#45512 = ORIENTED_EDGE('',*,*,#45384,.F.); +#45513 = ORIENTED_EDGE('',*,*,#45514,.F.); +#45514 = EDGE_CURVE('',#45515,#45377,#45517,.T.); +#45515 = VERTEX_POINT('',#45516); +#45516 = CARTESIAN_POINT('',(-4.175,1.3,0.11)); +#45517 = LINE('',#45518,#45519); +#45518 = CARTESIAN_POINT('',(-4.175,1.3,0.841614)); +#45519 = VECTOR('',#45520,1.); +#45520 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45521 = ORIENTED_EDGE('',*,*,#45522,.F.); +#45522 = EDGE_CURVE('',#45523,#45515,#45525,.T.); +#45523 = VERTEX_POINT('',#45524); +#45524 = CARTESIAN_POINT('',(-4.175,1.35,0.16)); +#45525 = CIRCLE('',#45526,5.E-02); +#45526 = AXIS2_PLACEMENT_3D('',#45527,#45528,#45529); +#45527 = CARTESIAN_POINT('',(-4.175,1.35,0.11)); +#45528 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45529 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45530 = ORIENTED_EDGE('',*,*,#45531,.F.); +#45531 = EDGE_CURVE('',#43964,#45523,#45532,.T.); +#45532 = LINE('',#45533,#45534); +#45533 = CARTESIAN_POINT('',(-4.175,1.35,0.841614)); +#45534 = VECTOR('',#45535,1.); +#45535 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45536 = ORIENTED_EDGE('',*,*,#43963,.F.); +#45537 = ORIENTED_EDGE('',*,*,#45538,.T.); +#45538 = EDGE_CURVE('',#43956,#45485,#45539,.T.); +#45539 = LINE('',#45540,#45541); +#45540 = CARTESIAN_POINT('',(-4.175,1.,0.841614)); +#45541 = VECTOR('',#45542,1.); +#45542 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45543 = PLANE('',#45544); +#45544 = AXIS2_PLACEMENT_3D('',#45545,#45546,#45547); +#45545 = CARTESIAN_POINT('',(-4.175,1.245779075398,0.170500231015)); +#45546 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45547 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#45548 = ADVANCED_FACE('',(#45549),#45567,.T.); +#45549 = FACE_BOUND('',#45550,.T.); +#45550 = EDGE_LOOP('',(#45551,#45559,#45565,#45566)); +#45551 = ORIENTED_EDGE('',*,*,#45552,.F.); +#45552 = EDGE_CURVE('',#45553,#45414,#45555,.T.); +#45553 = VERTEX_POINT('',#45554); +#45554 = CARTESIAN_POINT('',(-4.4,0.92,8.E-02)); +#45555 = LINE('',#45556,#45557); +#45556 = CARTESIAN_POINT('',(-4.4,0.694863,8.E-02)); +#45557 = VECTOR('',#45558,1.); +#45558 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#45559 = ORIENTED_EDGE('',*,*,#45560,.T.); +#45560 = EDGE_CURVE('',#45553,#42446,#45561,.T.); +#45561 = LINE('',#45562,#45563); +#45562 = CARTESIAN_POINT('',(-4.4511675,0.694863,2.88325E-02)); +#45563 = VECTOR('',#45564,1.); +#45564 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#45565 = ORIENTED_EDGE('',*,*,#42445,.F.); +#45566 = ORIENTED_EDGE('',*,*,#45421,.F.); +#45567 = PLANE('',#45568); +#45568 = AXIS2_PLACEMENT_3D('',#45569,#45570,#45571); +#45569 = CARTESIAN_POINT('',(-4.425,0.85,5.5E-02)); +#45570 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#45571 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#45572 = ADVANCED_FACE('',(#45573),#45600,.T.); +#45573 = FACE_BOUND('',#45574,.T.); +#45574 = EDGE_LOOP('',(#45575,#45583,#45584,#45585,#45586,#45594)); +#45575 = ORIENTED_EDGE('',*,*,#45576,.T.); +#45576 = EDGE_CURVE('',#45577,#45553,#45579,.T.); +#45577 = VERTEX_POINT('',#45578); +#45578 = CARTESIAN_POINT('',(-4.1,0.92,8.E-02)); +#45579 = LINE('',#45580,#45581); +#45580 = CARTESIAN_POINT('',(-20.,0.92,8.E-02)); +#45581 = VECTOR('',#45582,1.); +#45582 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45583 = ORIENTED_EDGE('',*,*,#45552,.T.); +#45584 = ORIENTED_EDGE('',*,*,#45413,.F.); +#45585 = ORIENTED_EDGE('',*,*,#45484,.T.); +#45586 = ORIENTED_EDGE('',*,*,#45587,.F.); +#45587 = EDGE_CURVE('',#45588,#45485,#45590,.T.); +#45588 = VERTEX_POINT('',#45589); +#45589 = CARTESIAN_POINT('',(-4.1,1.,8.E-02)); +#45590 = LINE('',#45591,#45592); +#45591 = CARTESIAN_POINT('',(-20.,1.,8.E-02)); +#45592 = VECTOR('',#45593,1.); +#45593 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45594 = ORIENTED_EDGE('',*,*,#45595,.T.); +#45595 = EDGE_CURVE('',#45588,#45577,#45596,.T.); +#45596 = LINE('',#45597,#45598); +#45597 = CARTESIAN_POINT('',(-4.1,0.694863,8.E-02)); +#45598 = VECTOR('',#45599,1.); +#45599 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#45600 = PLANE('',#45601); +#45601 = AXIS2_PLACEMENT_3D('',#45602,#45603,#45604); +#45602 = CARTESIAN_POINT('',(-4.3375,1.,8.E-02)); +#45603 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45604 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#45605 = ADVANCED_FACE('',(#45606),#45617,.T.); +#45606 = FACE_BOUND('',#45607,.T.); +#45607 = EDGE_LOOP('',(#45608,#45609,#45610,#45611)); +#45608 = ORIENTED_EDGE('',*,*,#42453,.T.); +#45609 = ORIENTED_EDGE('',*,*,#45560,.F.); +#45610 = ORIENTED_EDGE('',*,*,#45576,.F.); +#45611 = ORIENTED_EDGE('',*,*,#45612,.F.); +#45612 = EDGE_CURVE('',#42454,#45577,#45613,.T.); +#45613 = LINE('',#45614,#45615); +#45614 = CARTESIAN_POINT('',(-4.0488325,0.694863,2.88325E-02)); +#45615 = VECTOR('',#45616,1.); +#45616 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#45617 = PLANE('',#45618); +#45618 = AXIS2_PLACEMENT_3D('',#45619,#45620,#45621); +#45619 = CARTESIAN_POINT('',(-4.3375,0.92,8.E-02)); +#45620 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#45621 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#45622 = ADVANCED_FACE('',(#45623),#45634,.T.); +#45623 = FACE_BOUND('',#45624,.T.); +#45624 = EDGE_LOOP('',(#45625,#45626,#45632,#45633)); +#45625 = ORIENTED_EDGE('',*,*,#45595,.F.); +#45626 = ORIENTED_EDGE('',*,*,#45627,.F.); +#45627 = EDGE_CURVE('',#42462,#45588,#45628,.T.); +#45628 = LINE('',#45629,#45630); +#45629 = CARTESIAN_POINT('',(-19.5,1.,15.48)); +#45630 = VECTOR('',#45631,1.); +#45631 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#45632 = ORIENTED_EDGE('',*,*,#42461,.F.); +#45633 = ORIENTED_EDGE('',*,*,#45612,.T.); +#45634 = PLANE('',#45635); +#45635 = AXIS2_PLACEMENT_3D('',#45636,#45637,#45638); +#45636 = CARTESIAN_POINT('',(-4.075,0.85,5.5E-02)); +#45637 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#45638 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#45639 = ADVANCED_FACE('',(#45640),#45665,.T.); +#45640 = FACE_BOUND('',#45641,.T.); +#45641 = EDGE_LOOP('',(#45642,#45652,#45658,#45659)); +#45642 = ORIENTED_EDGE('',*,*,#45643,.F.); +#45643 = EDGE_CURVE('',#45644,#45646,#45648,.T.); +#45644 = VERTEX_POINT('',#45645); +#45645 = CARTESIAN_POINT('',(-3.9,0.92,8.E-02)); +#45646 = VERTEX_POINT('',#45647); +#45647 = CARTESIAN_POINT('',(-3.9,1.,8.E-02)); +#45648 = LINE('',#45649,#45650); +#45649 = CARTESIAN_POINT('',(-3.9,0.694863,8.E-02)); +#45650 = VECTOR('',#45651,1.); +#45651 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#45652 = ORIENTED_EDGE('',*,*,#45653,.T.); +#45653 = EDGE_CURVE('',#45644,#42478,#45654,.T.); +#45654 = LINE('',#45655,#45656); +#45655 = CARTESIAN_POINT('',(-3.9511675,0.694863,2.88325E-02)); +#45656 = VECTOR('',#45657,1.); +#45657 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#45658 = ORIENTED_EDGE('',*,*,#42477,.F.); +#45659 = ORIENTED_EDGE('',*,*,#45660,.F.); +#45660 = EDGE_CURVE('',#45646,#42470,#45661,.T.); +#45661 = LINE('',#45662,#45663); +#45662 = CARTESIAN_POINT('',(-19.5,1.,-15.52)); +#45663 = VECTOR('',#45664,1.); +#45664 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#45665 = PLANE('',#45666); +#45666 = AXIS2_PLACEMENT_3D('',#45667,#45668,#45669); +#45667 = CARTESIAN_POINT('',(-3.925,0.85,5.5E-02)); +#45668 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#45669 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#45670 = ADVANCED_FACE('',(#45671),#45689,.T.); +#45671 = FACE_BOUND('',#45672,.T.); +#45672 = EDGE_LOOP('',(#45673,#45674,#45675,#45683)); +#45673 = ORIENTED_EDGE('',*,*,#42485,.T.); +#45674 = ORIENTED_EDGE('',*,*,#45653,.F.); +#45675 = ORIENTED_EDGE('',*,*,#45676,.F.); +#45676 = EDGE_CURVE('',#45677,#45644,#45679,.T.); +#45677 = VERTEX_POINT('',#45678); +#45678 = CARTESIAN_POINT('',(-3.6,0.92,8.E-02)); +#45679 = LINE('',#45680,#45681); +#45680 = CARTESIAN_POINT('',(-19.5,0.92,8.E-02)); +#45681 = VECTOR('',#45682,1.); +#45682 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45683 = ORIENTED_EDGE('',*,*,#45684,.F.); +#45684 = EDGE_CURVE('',#42486,#45677,#45685,.T.); +#45685 = LINE('',#45686,#45687); +#45686 = CARTESIAN_POINT('',(-3.5488325,0.694863,2.88325E-02)); +#45687 = VECTOR('',#45688,1.); +#45688 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#45689 = PLANE('',#45690); +#45690 = AXIS2_PLACEMENT_3D('',#45691,#45692,#45693); +#45691 = CARTESIAN_POINT('',(-3.8375,0.92,8.E-02)); +#45692 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#45693 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#45694 = ADVANCED_FACE('',(#45695),#45729,.T.); +#45695 = FACE_BOUND('',#45696,.T.); +#45696 = EDGE_LOOP('',(#45697,#45698,#45699,#45707,#45715,#45723)); +#45697 = ORIENTED_EDGE('',*,*,#45676,.T.); +#45698 = ORIENTED_EDGE('',*,*,#45643,.T.); +#45699 = ORIENTED_EDGE('',*,*,#45700,.F.); +#45700 = EDGE_CURVE('',#45701,#45646,#45703,.T.); +#45701 = VERTEX_POINT('',#45702); +#45702 = CARTESIAN_POINT('',(-3.825,1.,8.E-02)); +#45703 = LINE('',#45704,#45705); +#45704 = CARTESIAN_POINT('',(-19.5,1.,8.E-02)); +#45705 = VECTOR('',#45706,1.); +#45706 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45707 = ORIENTED_EDGE('',*,*,#45708,.T.); +#45708 = EDGE_CURVE('',#45701,#45709,#45711,.T.); +#45709 = VERTEX_POINT('',#45710); +#45710 = CARTESIAN_POINT('',(-3.675,1.,8.E-02)); +#45711 = LINE('',#45712,#45713); +#45712 = CARTESIAN_POINT('',(1.5,1.,8.E-02)); +#45713 = VECTOR('',#45714,1.); +#45714 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45715 = ORIENTED_EDGE('',*,*,#45716,.F.); +#45716 = EDGE_CURVE('',#45717,#45709,#45719,.T.); +#45717 = VERTEX_POINT('',#45718); +#45718 = CARTESIAN_POINT('',(-3.6,1.,8.E-02)); +#45719 = LINE('',#45720,#45721); +#45720 = CARTESIAN_POINT('',(-19.5,1.,8.E-02)); +#45721 = VECTOR('',#45722,1.); +#45722 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45723 = ORIENTED_EDGE('',*,*,#45724,.T.); +#45724 = EDGE_CURVE('',#45717,#45677,#45725,.T.); +#45725 = LINE('',#45726,#45727); +#45726 = CARTESIAN_POINT('',(-3.6,0.694863,8.E-02)); +#45727 = VECTOR('',#45728,1.); +#45728 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#45729 = PLANE('',#45730); +#45730 = AXIS2_PLACEMENT_3D('',#45731,#45732,#45733); +#45731 = CARTESIAN_POINT('',(-3.8375,1.,8.E-02)); +#45732 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45733 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#45734 = ADVANCED_FACE('',(#45735),#45750,.T.); +#45735 = FACE_BOUND('',#45736,.T.); +#45736 = EDGE_LOOP('',(#45737,#45743,#45744,#45745,#45746,#45747,#45748, + #45749)); +#45737 = ORIENTED_EDGE('',*,*,#45738,.T.); +#45738 = EDGE_CURVE('',#43948,#45701,#45739,.T.); +#45739 = LINE('',#45740,#45741); +#45740 = CARTESIAN_POINT('',(-3.825,1.,0.841614)); +#45741 = VECTOR('',#45742,1.); +#45742 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45743 = ORIENTED_EDGE('',*,*,#45700,.T.); +#45744 = ORIENTED_EDGE('',*,*,#45660,.T.); +#45745 = ORIENTED_EDGE('',*,*,#42469,.F.); +#45746 = ORIENTED_EDGE('',*,*,#45627,.T.); +#45747 = ORIENTED_EDGE('',*,*,#45587,.T.); +#45748 = ORIENTED_EDGE('',*,*,#45538,.F.); +#45749 = ORIENTED_EDGE('',*,*,#43955,.T.); +#45750 = PLANE('',#45751); +#45751 = AXIS2_PLACEMENT_3D('',#45752,#45753,#45754); +#45752 = CARTESIAN_POINT('',(-0.175,1.,0.31)); +#45753 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#45754 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45755 = ADVANCED_FACE('',(#45756),#45781,.F.); +#45756 = FACE_BOUND('',#45757,.T.); +#45757 = EDGE_LOOP('',(#45758,#45759,#45767,#45775)); +#45758 = ORIENTED_EDGE('',*,*,#45708,.F.); +#45759 = ORIENTED_EDGE('',*,*,#45760,.T.); +#45760 = EDGE_CURVE('',#45701,#45761,#45763,.T.); +#45761 = VERTEX_POINT('',#45762); +#45762 = CARTESIAN_POINT('',(-3.825,1.,7.866077735407E-02)); +#45763 = LINE('',#45764,#45765); +#45764 = CARTESIAN_POINT('',(-3.825,1.,0.841614)); +#45765 = VECTOR('',#45766,1.); +#45766 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45767 = ORIENTED_EDGE('',*,*,#45768,.F.); +#45768 = EDGE_CURVE('',#45769,#45761,#45771,.T.); +#45769 = VERTEX_POINT('',#45770); +#45770 = CARTESIAN_POINT('',(-3.675,1.,7.866077735407E-02)); +#45771 = LINE('',#45772,#45773); +#45772 = CARTESIAN_POINT('',(1.5,1.,7.866077735406E-02)); +#45773 = VECTOR('',#45774,1.); +#45774 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45775 = ORIENTED_EDGE('',*,*,#45776,.F.); +#45776 = EDGE_CURVE('',#45709,#45769,#45777,.T.); +#45777 = LINE('',#45778,#45779); +#45778 = CARTESIAN_POINT('',(-3.675,1.,0.841614)); +#45779 = VECTOR('',#45780,1.); +#45780 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45781 = PLANE('',#45782); +#45782 = AXIS2_PLACEMENT_3D('',#45783,#45784,#45785); +#45783 = CARTESIAN_POINT('',(-3.675,1.,7.866077735407E-02)); +#45784 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#45785 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45786 = ADVANCED_FACE('',(#45787),#45856,.F.); +#45787 = FACE_BOUND('',#45788,.T.); +#45788 = EDGE_LOOP('',(#45789,#45790,#45791,#45799,#45808,#45816,#45824, + #45832,#45840,#45849,#45855)); +#45789 = ORIENTED_EDGE('',*,*,#45738,.F.); +#45790 = ORIENTED_EDGE('',*,*,#43947,.F.); +#45791 = ORIENTED_EDGE('',*,*,#45792,.F.); +#45792 = EDGE_CURVE('',#45793,#43940,#45795,.T.); +#45793 = VERTEX_POINT('',#45794); +#45794 = CARTESIAN_POINT('',(-3.825,1.35,0.16)); +#45795 = LINE('',#45796,#45797); +#45796 = CARTESIAN_POINT('',(-3.825,1.35,0.31)); +#45797 = VECTOR('',#45798,1.); +#45798 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#45799 = ORIENTED_EDGE('',*,*,#45800,.T.); +#45800 = EDGE_CURVE('',#45793,#45801,#45803,.T.); +#45801 = VERTEX_POINT('',#45802); +#45802 = CARTESIAN_POINT('',(-3.825,1.3,0.11)); +#45803 = CIRCLE('',#45804,5.E-02); +#45804 = AXIS2_PLACEMENT_3D('',#45805,#45806,#45807); +#45805 = CARTESIAN_POINT('',(-3.825,1.35,0.11)); +#45806 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45807 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45808 = ORIENTED_EDGE('',*,*,#45809,.T.); +#45809 = EDGE_CURVE('',#45801,#45810,#45812,.T.); +#45810 = VERTEX_POINT('',#45811); +#45811 = CARTESIAN_POINT('',(-3.825,1.3,5.E-02)); +#45812 = LINE('',#45813,#45814); +#45813 = CARTESIAN_POINT('',(-3.825,1.3,0.11)); +#45814 = VECTOR('',#45815,1.); +#45815 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45816 = ORIENTED_EDGE('',*,*,#45817,.T.); +#45817 = EDGE_CURVE('',#45810,#45818,#45820,.T.); +#45818 = VERTEX_POINT('',#45819); +#45819 = CARTESIAN_POINT('',(-3.825,1.25,3.330669073875E-16)); +#45820 = LINE('',#45821,#45822); +#45821 = CARTESIAN_POINT('',(-3.825,1.3,5.E-02)); +#45822 = VECTOR('',#45823,1.); +#45823 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#45824 = ORIENTED_EDGE('',*,*,#45825,.F.); +#45825 = EDGE_CURVE('',#45826,#45818,#45828,.T.); +#45826 = VERTEX_POINT('',#45827); +#45827 = CARTESIAN_POINT('',(-3.825,0.92,4.440892098501E-16)); +#45828 = LINE('',#45829,#45830); +#45829 = CARTESIAN_POINT('',(-3.825,0.92,4.440892098501E-16)); +#45830 = VECTOR('',#45831,1.); +#45831 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#45832 = ORIENTED_EDGE('',*,*,#45833,.T.); +#45833 = EDGE_CURVE('',#45826,#45834,#45836,.T.); +#45834 = VERTEX_POINT('',#45835); +#45835 = CARTESIAN_POINT('',(-3.825,0.92,3.619548911246E-02)); +#45836 = LINE('',#45837,#45838); +#45837 = CARTESIAN_POINT('',(-3.825,0.92,4.440892098501E-16)); +#45838 = VECTOR('',#45839,1.); +#45839 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#45840 = ORIENTED_EDGE('',*,*,#45841,.F.); +#45841 = EDGE_CURVE('',#45842,#45834,#45844,.T.); +#45842 = VERTEX_POINT('',#45843); +#45843 = CARTESIAN_POINT('',(-3.825,0.943186633611,6.541154699934E-02)); +#45844 = CIRCLE('',#45845,3.E-02); +#45845 = AXIS2_PLACEMENT_3D('',#45846,#45847,#45848); +#45846 = CARTESIAN_POINT('',(-3.825,0.95,3.619548911246E-02)); +#45847 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45848 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45849 = ORIENTED_EDGE('',*,*,#45850,.T.); +#45850 = EDGE_CURVE('',#45842,#45761,#45851,.T.); +#45851 = LINE('',#45852,#45853); +#45852 = CARTESIAN_POINT('',(-3.825,0.943186633611,6.541154699934E-02)); +#45853 = VECTOR('',#45854,1.); +#45854 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#45855 = ORIENTED_EDGE('',*,*,#45760,.F.); +#45856 = PLANE('',#45857); +#45857 = AXIS2_PLACEMENT_3D('',#45858,#45859,#45860); +#45858 = CARTESIAN_POINT('',(-3.825,1.245779075398,0.170500231015)); +#45859 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45860 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#45861 = ADVANCED_FACE('',(#45862),#45936,.T.); +#45862 = FACE_BOUND('',#45863,.T.); +#45863 = EDGE_LOOP('',(#45864,#45865,#45873,#45882,#45890,#45898,#45906, + #45914,#45923,#45929,#45930)); +#45864 = ORIENTED_EDGE('',*,*,#45776,.T.); +#45865 = ORIENTED_EDGE('',*,*,#45866,.F.); +#45866 = EDGE_CURVE('',#45867,#45769,#45869,.T.); +#45867 = VERTEX_POINT('',#45868); +#45868 = CARTESIAN_POINT('',(-3.675,0.943186633611,6.541154699934E-02)); +#45869 = LINE('',#45870,#45871); +#45870 = CARTESIAN_POINT('',(-3.675,0.694863,7.500931358167E-03)); +#45871 = VECTOR('',#45872,1.); +#45872 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#45873 = ORIENTED_EDGE('',*,*,#45874,.T.); +#45874 = EDGE_CURVE('',#45867,#45875,#45877,.T.); +#45875 = VERTEX_POINT('',#45876); +#45876 = CARTESIAN_POINT('',(-3.675,0.92,3.619548911246E-02)); +#45877 = CIRCLE('',#45878,3.E-02); +#45878 = AXIS2_PLACEMENT_3D('',#45879,#45880,#45881); +#45879 = CARTESIAN_POINT('',(-3.675,0.95,3.619548911246E-02)); +#45880 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45881 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45882 = ORIENTED_EDGE('',*,*,#45883,.F.); +#45883 = EDGE_CURVE('',#45884,#45875,#45886,.T.); +#45884 = VERTEX_POINT('',#45885); +#45885 = CARTESIAN_POINT('',(-3.675,0.92,3.330669073875E-16)); +#45886 = LINE('',#45887,#45888); +#45887 = CARTESIAN_POINT('',(-3.675,0.92,0.841614)); +#45888 = VECTOR('',#45889,1.); +#45889 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#45890 = ORIENTED_EDGE('',*,*,#45891,.F.); +#45891 = EDGE_CURVE('',#45892,#45884,#45894,.T.); +#45892 = VERTEX_POINT('',#45893); +#45893 = CARTESIAN_POINT('',(-3.675,1.25,2.22044604925E-16)); +#45894 = LINE('',#45895,#45896); +#45895 = CARTESIAN_POINT('',(-3.675,0.694863,3.330669073875E-16)); +#45896 = VECTOR('',#45897,1.); +#45897 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#45898 = ORIENTED_EDGE('',*,*,#45899,.F.); +#45899 = EDGE_CURVE('',#45900,#45892,#45902,.T.); +#45900 = VERTEX_POINT('',#45901); +#45901 = CARTESIAN_POINT('',(-3.675,1.3,5.E-02)); +#45902 = LINE('',#45903,#45904); +#45903 = CARTESIAN_POINT('',(-3.675,0.694863,-0.555137)); +#45904 = VECTOR('',#45905,1.); +#45905 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#45906 = ORIENTED_EDGE('',*,*,#45907,.F.); +#45907 = EDGE_CURVE('',#45908,#45900,#45910,.T.); +#45908 = VERTEX_POINT('',#45909); +#45909 = CARTESIAN_POINT('',(-3.675,1.3,0.11)); +#45910 = LINE('',#45911,#45912); +#45911 = CARTESIAN_POINT('',(-3.675,1.3,0.841614)); +#45912 = VECTOR('',#45913,1.); +#45913 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45914 = ORIENTED_EDGE('',*,*,#45915,.F.); +#45915 = EDGE_CURVE('',#45916,#45908,#45918,.T.); +#45916 = VERTEX_POINT('',#45917); +#45917 = CARTESIAN_POINT('',(-3.675,1.35,0.16)); +#45918 = CIRCLE('',#45919,5.E-02); +#45919 = AXIS2_PLACEMENT_3D('',#45920,#45921,#45922); +#45920 = CARTESIAN_POINT('',(-3.675,1.35,0.11)); +#45921 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45922 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#45923 = ORIENTED_EDGE('',*,*,#45924,.F.); +#45924 = EDGE_CURVE('',#43932,#45916,#45925,.T.); +#45925 = LINE('',#45926,#45927); +#45926 = CARTESIAN_POINT('',(-3.675,1.35,0.841614)); +#45927 = VECTOR('',#45928,1.); +#45928 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#45929 = ORIENTED_EDGE('',*,*,#43931,.F.); +#45930 = ORIENTED_EDGE('',*,*,#45931,.T.); +#45931 = EDGE_CURVE('',#43924,#45709,#45932,.T.); +#45932 = LINE('',#45933,#45934); +#45933 = CARTESIAN_POINT('',(-3.675,1.,0.841614)); +#45934 = VECTOR('',#45935,1.); +#45935 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45936 = PLANE('',#45937); +#45937 = AXIS2_PLACEMENT_3D('',#45938,#45939,#45940); +#45938 = CARTESIAN_POINT('',(-3.675,1.245779075398,0.170500231015)); +#45939 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#45940 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#45941 = ADVANCED_FACE('',(#45942),#45976,.T.); +#45942 = FACE_BOUND('',#45943,.T.); +#45943 = EDGE_LOOP('',(#45944,#45952,#45960,#45966,#45967,#45973,#45974, + #45975)); +#45944 = ORIENTED_EDGE('',*,*,#45945,.T.); +#45945 = EDGE_CURVE('',#43916,#45946,#45948,.T.); +#45946 = VERTEX_POINT('',#45947); +#45947 = CARTESIAN_POINT('',(-3.325,1.,8.E-02)); +#45948 = LINE('',#45949,#45950); +#45949 = CARTESIAN_POINT('',(-3.325,1.,0.841614)); +#45950 = VECTOR('',#45951,1.); +#45951 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45952 = ORIENTED_EDGE('',*,*,#45953,.T.); +#45953 = EDGE_CURVE('',#45946,#45954,#45956,.T.); +#45954 = VERTEX_POINT('',#45955); +#45955 = CARTESIAN_POINT('',(-3.4,1.,8.E-02)); +#45956 = LINE('',#45957,#45958); +#45957 = CARTESIAN_POINT('',(-19.,1.,8.E-02)); +#45958 = VECTOR('',#45959,1.); +#45959 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#45960 = ORIENTED_EDGE('',*,*,#45961,.T.); +#45961 = EDGE_CURVE('',#45954,#42502,#45962,.T.); +#45962 = LINE('',#45963,#45964); +#45963 = CARTESIAN_POINT('',(-19.,1.,-15.52)); +#45964 = VECTOR('',#45965,1.); +#45965 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#45966 = ORIENTED_EDGE('',*,*,#42501,.F.); +#45967 = ORIENTED_EDGE('',*,*,#45968,.T.); +#45968 = EDGE_CURVE('',#42494,#45717,#45969,.T.); +#45969 = LINE('',#45970,#45971); +#45970 = CARTESIAN_POINT('',(-19.,1.,15.48)); +#45971 = VECTOR('',#45972,1.); +#45972 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#45973 = ORIENTED_EDGE('',*,*,#45716,.T.); +#45974 = ORIENTED_EDGE('',*,*,#45931,.F.); +#45975 = ORIENTED_EDGE('',*,*,#43923,.T.); +#45976 = PLANE('',#45977); +#45977 = AXIS2_PLACEMENT_3D('',#45978,#45979,#45980); +#45978 = CARTESIAN_POINT('',(0.325,1.,0.31)); +#45979 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#45980 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#45981 = ADVANCED_FACE('',(#45982),#46058,.F.); +#45982 = FACE_BOUND('',#45983,.T.); +#45983 = EDGE_LOOP('',(#45984,#45985,#45986,#45994,#46003,#46011,#46019, + #46027,#46035,#46044,#46052)); +#45984 = ORIENTED_EDGE('',*,*,#45945,.F.); +#45985 = ORIENTED_EDGE('',*,*,#43915,.F.); +#45986 = ORIENTED_EDGE('',*,*,#45987,.F.); +#45987 = EDGE_CURVE('',#45988,#43908,#45990,.T.); +#45988 = VERTEX_POINT('',#45989); +#45989 = CARTESIAN_POINT('',(-3.325,1.35,0.16)); +#45990 = LINE('',#45991,#45992); +#45991 = CARTESIAN_POINT('',(-3.325,1.35,0.31)); +#45992 = VECTOR('',#45993,1.); +#45993 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#45994 = ORIENTED_EDGE('',*,*,#45995,.T.); +#45995 = EDGE_CURVE('',#45988,#45996,#45998,.T.); +#45996 = VERTEX_POINT('',#45997); +#45997 = CARTESIAN_POINT('',(-3.325,1.3,0.11)); +#45998 = CIRCLE('',#45999,5.E-02); +#45999 = AXIS2_PLACEMENT_3D('',#46000,#46001,#46002); +#46000 = CARTESIAN_POINT('',(-3.325,1.35,0.11)); +#46001 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46002 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46003 = ORIENTED_EDGE('',*,*,#46004,.T.); +#46004 = EDGE_CURVE('',#45996,#46005,#46007,.T.); +#46005 = VERTEX_POINT('',#46006); +#46006 = CARTESIAN_POINT('',(-3.325,1.3,5.E-02)); +#46007 = LINE('',#46008,#46009); +#46008 = CARTESIAN_POINT('',(-3.325,1.3,0.11)); +#46009 = VECTOR('',#46010,1.); +#46010 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46011 = ORIENTED_EDGE('',*,*,#46012,.T.); +#46012 = EDGE_CURVE('',#46005,#46013,#46015,.T.); +#46013 = VERTEX_POINT('',#46014); +#46014 = CARTESIAN_POINT('',(-3.325,1.25,2.22044604925E-16)); +#46015 = LINE('',#46016,#46017); +#46016 = CARTESIAN_POINT('',(-3.325,1.3,5.E-02)); +#46017 = VECTOR('',#46018,1.); +#46018 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#46019 = ORIENTED_EDGE('',*,*,#46020,.F.); +#46020 = EDGE_CURVE('',#46021,#46013,#46023,.T.); +#46021 = VERTEX_POINT('',#46022); +#46022 = CARTESIAN_POINT('',(-3.325,0.92,3.330669073875E-16)); +#46023 = LINE('',#46024,#46025); +#46024 = CARTESIAN_POINT('',(-3.325,0.92,3.330669073875E-16)); +#46025 = VECTOR('',#46026,1.); +#46026 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#46027 = ORIENTED_EDGE('',*,*,#46028,.T.); +#46028 = EDGE_CURVE('',#46021,#46029,#46031,.T.); +#46029 = VERTEX_POINT('',#46030); +#46030 = CARTESIAN_POINT('',(-3.325,0.92,3.619548911246E-02)); +#46031 = LINE('',#46032,#46033); +#46032 = CARTESIAN_POINT('',(-3.325,0.92,3.330669073875E-16)); +#46033 = VECTOR('',#46034,1.); +#46034 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#46035 = ORIENTED_EDGE('',*,*,#46036,.F.); +#46036 = EDGE_CURVE('',#46037,#46029,#46039,.T.); +#46037 = VERTEX_POINT('',#46038); +#46038 = CARTESIAN_POINT('',(-3.325,0.943186633611,6.541154699934E-02)); +#46039 = CIRCLE('',#46040,3.E-02); +#46040 = AXIS2_PLACEMENT_3D('',#46041,#46042,#46043); +#46041 = CARTESIAN_POINT('',(-3.325,0.95,3.619548911246E-02)); +#46042 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46043 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46044 = ORIENTED_EDGE('',*,*,#46045,.T.); +#46045 = EDGE_CURVE('',#46037,#46046,#46048,.T.); +#46046 = VERTEX_POINT('',#46047); +#46047 = CARTESIAN_POINT('',(-3.325,1.,7.866077735407E-02)); +#46048 = LINE('',#46049,#46050); +#46049 = CARTESIAN_POINT('',(-3.325,0.943186633611,6.541154699934E-02)); +#46050 = VECTOR('',#46051,1.); +#46051 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#46052 = ORIENTED_EDGE('',*,*,#46053,.F.); +#46053 = EDGE_CURVE('',#45946,#46046,#46054,.T.); +#46054 = LINE('',#46055,#46056); +#46055 = CARTESIAN_POINT('',(-3.325,1.,0.841614)); +#46056 = VECTOR('',#46057,1.); +#46057 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46058 = PLANE('',#46059); +#46059 = AXIS2_PLACEMENT_3D('',#46060,#46061,#46062); +#46060 = CARTESIAN_POINT('',(-3.325,1.245779075398,0.170500231015)); +#46061 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46062 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#46063 = ADVANCED_FACE('',(#46064),#46089,.F.); +#46064 = FACE_BOUND('',#46065,.T.); +#46065 = EDGE_LOOP('',(#46066,#46074,#46075,#46083)); +#46066 = ORIENTED_EDGE('',*,*,#46067,.F.); +#46067 = EDGE_CURVE('',#45946,#46068,#46070,.T.); +#46068 = VERTEX_POINT('',#46069); +#46069 = CARTESIAN_POINT('',(-3.175,1.,8.E-02)); +#46070 = LINE('',#46071,#46072); +#46071 = CARTESIAN_POINT('',(2.,1.,8.E-02)); +#46072 = VECTOR('',#46073,1.); +#46073 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46074 = ORIENTED_EDGE('',*,*,#46053,.T.); +#46075 = ORIENTED_EDGE('',*,*,#46076,.F.); +#46076 = EDGE_CURVE('',#46077,#46046,#46079,.T.); +#46077 = VERTEX_POINT('',#46078); +#46078 = CARTESIAN_POINT('',(-3.175,1.,7.866077735407E-02)); +#46079 = LINE('',#46080,#46081); +#46080 = CARTESIAN_POINT('',(2.,1.,7.866077735406E-02)); +#46081 = VECTOR('',#46082,1.); +#46082 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46083 = ORIENTED_EDGE('',*,*,#46084,.F.); +#46084 = EDGE_CURVE('',#46068,#46077,#46085,.T.); +#46085 = LINE('',#46086,#46087); +#46086 = CARTESIAN_POINT('',(-3.175,1.,0.841614)); +#46087 = VECTOR('',#46088,1.); +#46088 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46089 = PLANE('',#46090); +#46090 = AXIS2_PLACEMENT_3D('',#46091,#46092,#46093); +#46091 = CARTESIAN_POINT('',(-3.175,1.,7.866077735407E-02)); +#46092 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#46093 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46094 = ADVANCED_FACE('',(#46095),#46169,.T.); +#46095 = FACE_BOUND('',#46096,.T.); +#46096 = EDGE_LOOP('',(#46097,#46098,#46106,#46115,#46123,#46131,#46139, + #46147,#46156,#46162,#46163)); +#46097 = ORIENTED_EDGE('',*,*,#46084,.T.); +#46098 = ORIENTED_EDGE('',*,*,#46099,.F.); +#46099 = EDGE_CURVE('',#46100,#46077,#46102,.T.); +#46100 = VERTEX_POINT('',#46101); +#46101 = CARTESIAN_POINT('',(-3.175,0.943186633611,6.541154699934E-02)); +#46102 = LINE('',#46103,#46104); +#46103 = CARTESIAN_POINT('',(-3.175,0.694863,7.500931358166E-03)); +#46104 = VECTOR('',#46105,1.); +#46105 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#46106 = ORIENTED_EDGE('',*,*,#46107,.T.); +#46107 = EDGE_CURVE('',#46100,#46108,#46110,.T.); +#46108 = VERTEX_POINT('',#46109); +#46109 = CARTESIAN_POINT('',(-3.175,0.92,3.619548911246E-02)); +#46110 = CIRCLE('',#46111,3.E-02); +#46111 = AXIS2_PLACEMENT_3D('',#46112,#46113,#46114); +#46112 = CARTESIAN_POINT('',(-3.175,0.95,3.619548911246E-02)); +#46113 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46114 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46115 = ORIENTED_EDGE('',*,*,#46116,.F.); +#46116 = EDGE_CURVE('',#46117,#46108,#46119,.T.); +#46117 = VERTEX_POINT('',#46118); +#46118 = CARTESIAN_POINT('',(-3.175,0.92,2.22044604925E-16)); +#46119 = LINE('',#46120,#46121); +#46120 = CARTESIAN_POINT('',(-3.175,0.92,0.841614)); +#46121 = VECTOR('',#46122,1.); +#46122 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#46123 = ORIENTED_EDGE('',*,*,#46124,.F.); +#46124 = EDGE_CURVE('',#46125,#46117,#46127,.T.); +#46125 = VERTEX_POINT('',#46126); +#46126 = CARTESIAN_POINT('',(-3.175,1.25,1.110223024625E-16)); +#46127 = LINE('',#46128,#46129); +#46128 = CARTESIAN_POINT('',(-3.175,0.694863,2.22044604925E-16)); +#46129 = VECTOR('',#46130,1.); +#46130 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#46131 = ORIENTED_EDGE('',*,*,#46132,.F.); +#46132 = EDGE_CURVE('',#46133,#46125,#46135,.T.); +#46133 = VERTEX_POINT('',#46134); +#46134 = CARTESIAN_POINT('',(-3.175,1.3,5.E-02)); +#46135 = LINE('',#46136,#46137); +#46136 = CARTESIAN_POINT('',(-3.175,0.694863,-0.555137)); +#46137 = VECTOR('',#46138,1.); +#46138 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#46139 = ORIENTED_EDGE('',*,*,#46140,.F.); +#46140 = EDGE_CURVE('',#46141,#46133,#46143,.T.); +#46141 = VERTEX_POINT('',#46142); +#46142 = CARTESIAN_POINT('',(-3.175,1.3,0.11)); +#46143 = LINE('',#46144,#46145); +#46144 = CARTESIAN_POINT('',(-3.175,1.3,0.841614)); +#46145 = VECTOR('',#46146,1.); +#46146 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46147 = ORIENTED_EDGE('',*,*,#46148,.F.); +#46148 = EDGE_CURVE('',#46149,#46141,#46151,.T.); +#46149 = VERTEX_POINT('',#46150); +#46150 = CARTESIAN_POINT('',(-3.175,1.35,0.16)); +#46151 = CIRCLE('',#46152,5.E-02); +#46152 = AXIS2_PLACEMENT_3D('',#46153,#46154,#46155); +#46153 = CARTESIAN_POINT('',(-3.175,1.35,0.11)); +#46154 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46155 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46156 = ORIENTED_EDGE('',*,*,#46157,.F.); +#46157 = EDGE_CURVE('',#43900,#46149,#46158,.T.); +#46158 = LINE('',#46159,#46160); +#46159 = CARTESIAN_POINT('',(-3.175,1.35,0.841614)); +#46160 = VECTOR('',#46161,1.); +#46161 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46162 = ORIENTED_EDGE('',*,*,#43899,.F.); +#46163 = ORIENTED_EDGE('',*,*,#46164,.T.); +#46164 = EDGE_CURVE('',#43892,#46068,#46165,.T.); +#46165 = LINE('',#46166,#46167); +#46166 = CARTESIAN_POINT('',(-3.175,1.,0.841614)); +#46167 = VECTOR('',#46168,1.); +#46168 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46169 = PLANE('',#46170); +#46170 = AXIS2_PLACEMENT_3D('',#46171,#46172,#46173); +#46171 = CARTESIAN_POINT('',(-3.175,1.245779075398,0.170500231015)); +#46172 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46173 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#46174 = ADVANCED_FACE('',(#46175),#46193,.T.); +#46175 = FACE_BOUND('',#46176,.T.); +#46176 = EDGE_LOOP('',(#46177,#46185,#46191,#46192)); +#46177 = ORIENTED_EDGE('',*,*,#46178,.F.); +#46178 = EDGE_CURVE('',#46179,#45954,#46181,.T.); +#46179 = VERTEX_POINT('',#46180); +#46180 = CARTESIAN_POINT('',(-3.4,0.92,8.E-02)); +#46181 = LINE('',#46182,#46183); +#46182 = CARTESIAN_POINT('',(-3.4,0.694863,8.E-02)); +#46183 = VECTOR('',#46184,1.); +#46184 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#46185 = ORIENTED_EDGE('',*,*,#46186,.T.); +#46186 = EDGE_CURVE('',#46179,#42510,#46187,.T.); +#46187 = LINE('',#46188,#46189); +#46188 = CARTESIAN_POINT('',(-3.4511675,0.694863,2.88325E-02)); +#46189 = VECTOR('',#46190,1.); +#46190 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#46191 = ORIENTED_EDGE('',*,*,#42509,.F.); +#46192 = ORIENTED_EDGE('',*,*,#45961,.F.); +#46193 = PLANE('',#46194); +#46194 = AXIS2_PLACEMENT_3D('',#46195,#46196,#46197); +#46195 = CARTESIAN_POINT('',(-3.425,0.85,5.5E-02)); +#46196 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#46197 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#46198 = ADVANCED_FACE('',(#46199),#46226,.T.); +#46199 = FACE_BOUND('',#46200,.T.); +#46200 = EDGE_LOOP('',(#46201,#46209,#46210,#46211,#46212,#46220)); +#46201 = ORIENTED_EDGE('',*,*,#46202,.T.); +#46202 = EDGE_CURVE('',#46203,#46179,#46205,.T.); +#46203 = VERTEX_POINT('',#46204); +#46204 = CARTESIAN_POINT('',(-3.1,0.92,8.E-02)); +#46205 = LINE('',#46206,#46207); +#46206 = CARTESIAN_POINT('',(-19.,0.92,8.E-02)); +#46207 = VECTOR('',#46208,1.); +#46208 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46209 = ORIENTED_EDGE('',*,*,#46178,.T.); +#46210 = ORIENTED_EDGE('',*,*,#45953,.F.); +#46211 = ORIENTED_EDGE('',*,*,#46067,.T.); +#46212 = ORIENTED_EDGE('',*,*,#46213,.F.); +#46213 = EDGE_CURVE('',#46214,#46068,#46216,.T.); +#46214 = VERTEX_POINT('',#46215); +#46215 = CARTESIAN_POINT('',(-3.1,1.,8.E-02)); +#46216 = LINE('',#46217,#46218); +#46217 = CARTESIAN_POINT('',(-19.,1.,8.E-02)); +#46218 = VECTOR('',#46219,1.); +#46219 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46220 = ORIENTED_EDGE('',*,*,#46221,.T.); +#46221 = EDGE_CURVE('',#46214,#46203,#46222,.T.); +#46222 = LINE('',#46223,#46224); +#46223 = CARTESIAN_POINT('',(-3.1,0.694863,8.E-02)); +#46224 = VECTOR('',#46225,1.); +#46225 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#46226 = PLANE('',#46227); +#46227 = AXIS2_PLACEMENT_3D('',#46228,#46229,#46230); +#46228 = CARTESIAN_POINT('',(-3.3375,1.,8.E-02)); +#46229 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46230 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#46231 = ADVANCED_FACE('',(#46232),#46243,.T.); +#46232 = FACE_BOUND('',#46233,.T.); +#46233 = EDGE_LOOP('',(#46234,#46235,#46236,#46237)); +#46234 = ORIENTED_EDGE('',*,*,#42517,.T.); +#46235 = ORIENTED_EDGE('',*,*,#46186,.F.); +#46236 = ORIENTED_EDGE('',*,*,#46202,.F.); +#46237 = ORIENTED_EDGE('',*,*,#46238,.F.); +#46238 = EDGE_CURVE('',#42518,#46203,#46239,.T.); +#46239 = LINE('',#46240,#46241); +#46240 = CARTESIAN_POINT('',(-3.0488325,0.694863,2.88325E-02)); +#46241 = VECTOR('',#46242,1.); +#46242 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#46243 = PLANE('',#46244); +#46244 = AXIS2_PLACEMENT_3D('',#46245,#46246,#46247); +#46245 = CARTESIAN_POINT('',(-3.3375,0.92,8.E-02)); +#46246 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#46247 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#46248 = ADVANCED_FACE('',(#46249),#46260,.T.); +#46249 = FACE_BOUND('',#46250,.T.); +#46250 = EDGE_LOOP('',(#46251,#46252,#46258,#46259)); +#46251 = ORIENTED_EDGE('',*,*,#46221,.F.); +#46252 = ORIENTED_EDGE('',*,*,#46253,.F.); +#46253 = EDGE_CURVE('',#42526,#46214,#46254,.T.); +#46254 = LINE('',#46255,#46256); +#46255 = CARTESIAN_POINT('',(-18.5,1.,15.48)); +#46256 = VECTOR('',#46257,1.); +#46257 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#46258 = ORIENTED_EDGE('',*,*,#42525,.F.); +#46259 = ORIENTED_EDGE('',*,*,#46238,.T.); +#46260 = PLANE('',#46261); +#46261 = AXIS2_PLACEMENT_3D('',#46262,#46263,#46264); +#46262 = CARTESIAN_POINT('',(-3.075,0.85,5.5E-02)); +#46263 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#46264 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#46265 = ADVANCED_FACE('',(#46266),#46291,.T.); +#46266 = FACE_BOUND('',#46267,.T.); +#46267 = EDGE_LOOP('',(#46268,#46278,#46284,#46285)); +#46268 = ORIENTED_EDGE('',*,*,#46269,.F.); +#46269 = EDGE_CURVE('',#46270,#46272,#46274,.T.); +#46270 = VERTEX_POINT('',#46271); +#46271 = CARTESIAN_POINT('',(-2.9,0.92,8.E-02)); +#46272 = VERTEX_POINT('',#46273); +#46273 = CARTESIAN_POINT('',(-2.9,1.,8.E-02)); +#46274 = LINE('',#46275,#46276); +#46275 = CARTESIAN_POINT('',(-2.9,0.694863,8.E-02)); +#46276 = VECTOR('',#46277,1.); +#46277 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#46278 = ORIENTED_EDGE('',*,*,#46279,.T.); +#46279 = EDGE_CURVE('',#46270,#42542,#46280,.T.); +#46280 = LINE('',#46281,#46282); +#46281 = CARTESIAN_POINT('',(-2.9511675,0.694863,2.88325E-02)); +#46282 = VECTOR('',#46283,1.); +#46283 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#46284 = ORIENTED_EDGE('',*,*,#42541,.F.); +#46285 = ORIENTED_EDGE('',*,*,#46286,.F.); +#46286 = EDGE_CURVE('',#46272,#42534,#46287,.T.); +#46287 = LINE('',#46288,#46289); +#46288 = CARTESIAN_POINT('',(-18.5,1.,-15.52)); +#46289 = VECTOR('',#46290,1.); +#46290 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#46291 = PLANE('',#46292); +#46292 = AXIS2_PLACEMENT_3D('',#46293,#46294,#46295); +#46293 = CARTESIAN_POINT('',(-2.925,0.85,5.5E-02)); +#46294 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#46295 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#46296 = ADVANCED_FACE('',(#46297),#46315,.T.); +#46297 = FACE_BOUND('',#46298,.T.); +#46298 = EDGE_LOOP('',(#46299,#46300,#46301,#46309)); +#46299 = ORIENTED_EDGE('',*,*,#42549,.T.); +#46300 = ORIENTED_EDGE('',*,*,#46279,.F.); +#46301 = ORIENTED_EDGE('',*,*,#46302,.F.); +#46302 = EDGE_CURVE('',#46303,#46270,#46305,.T.); +#46303 = VERTEX_POINT('',#46304); +#46304 = CARTESIAN_POINT('',(-2.6,0.92,8.E-02)); +#46305 = LINE('',#46306,#46307); +#46306 = CARTESIAN_POINT('',(-18.5,0.92,8.E-02)); +#46307 = VECTOR('',#46308,1.); +#46308 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46309 = ORIENTED_EDGE('',*,*,#46310,.F.); +#46310 = EDGE_CURVE('',#42550,#46303,#46311,.T.); +#46311 = LINE('',#46312,#46313); +#46312 = CARTESIAN_POINT('',(-2.5488325,0.694863,2.88325E-02)); +#46313 = VECTOR('',#46314,1.); +#46314 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#46315 = PLANE('',#46316); +#46316 = AXIS2_PLACEMENT_3D('',#46317,#46318,#46319); +#46317 = CARTESIAN_POINT('',(-2.8375,0.92,8.E-02)); +#46318 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#46319 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#46320 = ADVANCED_FACE('',(#46321),#46355,.T.); +#46321 = FACE_BOUND('',#46322,.T.); +#46322 = EDGE_LOOP('',(#46323,#46324,#46325,#46333,#46341,#46349)); +#46323 = ORIENTED_EDGE('',*,*,#46302,.T.); +#46324 = ORIENTED_EDGE('',*,*,#46269,.T.); +#46325 = ORIENTED_EDGE('',*,*,#46326,.F.); +#46326 = EDGE_CURVE('',#46327,#46272,#46329,.T.); +#46327 = VERTEX_POINT('',#46328); +#46328 = CARTESIAN_POINT('',(-2.825,1.,8.E-02)); +#46329 = LINE('',#46330,#46331); +#46330 = CARTESIAN_POINT('',(-18.5,1.,8.E-02)); +#46331 = VECTOR('',#46332,1.); +#46332 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46333 = ORIENTED_EDGE('',*,*,#46334,.T.); +#46334 = EDGE_CURVE('',#46327,#46335,#46337,.T.); +#46335 = VERTEX_POINT('',#46336); +#46336 = CARTESIAN_POINT('',(-2.675,1.,8.E-02)); +#46337 = LINE('',#46338,#46339); +#46338 = CARTESIAN_POINT('',(2.5,1.,8.E-02)); +#46339 = VECTOR('',#46340,1.); +#46340 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46341 = ORIENTED_EDGE('',*,*,#46342,.F.); +#46342 = EDGE_CURVE('',#46343,#46335,#46345,.T.); +#46343 = VERTEX_POINT('',#46344); +#46344 = CARTESIAN_POINT('',(-2.6,1.,8.E-02)); +#46345 = LINE('',#46346,#46347); +#46346 = CARTESIAN_POINT('',(-18.5,1.,8.E-02)); +#46347 = VECTOR('',#46348,1.); +#46348 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46349 = ORIENTED_EDGE('',*,*,#46350,.T.); +#46350 = EDGE_CURVE('',#46343,#46303,#46351,.T.); +#46351 = LINE('',#46352,#46353); +#46352 = CARTESIAN_POINT('',(-2.6,0.694863,8.E-02)); +#46353 = VECTOR('',#46354,1.); +#46354 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#46355 = PLANE('',#46356); +#46356 = AXIS2_PLACEMENT_3D('',#46357,#46358,#46359); +#46357 = CARTESIAN_POINT('',(-2.8375,1.,8.E-02)); +#46358 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46359 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#46360 = ADVANCED_FACE('',(#46361),#46376,.T.); +#46361 = FACE_BOUND('',#46362,.T.); +#46362 = EDGE_LOOP('',(#46363,#46369,#46370,#46371,#46372,#46373,#46374, + #46375)); +#46363 = ORIENTED_EDGE('',*,*,#46364,.T.); +#46364 = EDGE_CURVE('',#43884,#46327,#46365,.T.); +#46365 = LINE('',#46366,#46367); +#46366 = CARTESIAN_POINT('',(-2.825,1.,0.841614)); +#46367 = VECTOR('',#46368,1.); +#46368 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46369 = ORIENTED_EDGE('',*,*,#46326,.T.); +#46370 = ORIENTED_EDGE('',*,*,#46286,.T.); +#46371 = ORIENTED_EDGE('',*,*,#42533,.F.); +#46372 = ORIENTED_EDGE('',*,*,#46253,.T.); +#46373 = ORIENTED_EDGE('',*,*,#46213,.T.); +#46374 = ORIENTED_EDGE('',*,*,#46164,.F.); +#46375 = ORIENTED_EDGE('',*,*,#43891,.T.); +#46376 = PLANE('',#46377); +#46377 = AXIS2_PLACEMENT_3D('',#46378,#46379,#46380); +#46378 = CARTESIAN_POINT('',(0.825,1.,0.31)); +#46379 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#46380 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46381 = ADVANCED_FACE('',(#46382),#46463,.T.); +#46382 = FACE_BOUND('',#46383,.T.); +#46383 = EDGE_LOOP('',(#46384,#46392,#46400,#46409,#46417,#46425,#46433, + #46441,#46450,#46456,#46457)); +#46384 = ORIENTED_EDGE('',*,*,#46385,.T.); +#46385 = EDGE_CURVE('',#46335,#46386,#46388,.T.); +#46386 = VERTEX_POINT('',#46387); +#46387 = CARTESIAN_POINT('',(-2.675,1.,7.866077735407E-02)); +#46388 = LINE('',#46389,#46390); +#46389 = CARTESIAN_POINT('',(-2.675,1.,0.841614)); +#46390 = VECTOR('',#46391,1.); +#46391 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46392 = ORIENTED_EDGE('',*,*,#46393,.F.); +#46393 = EDGE_CURVE('',#46394,#46386,#46396,.T.); +#46394 = VERTEX_POINT('',#46395); +#46395 = CARTESIAN_POINT('',(-2.675,0.943186633611,6.541154699934E-02)); +#46396 = LINE('',#46397,#46398); +#46397 = CARTESIAN_POINT('',(-2.675,0.694863,7.500931358166E-03)); +#46398 = VECTOR('',#46399,1.); +#46399 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#46400 = ORIENTED_EDGE('',*,*,#46401,.T.); +#46401 = EDGE_CURVE('',#46394,#46402,#46404,.T.); +#46402 = VERTEX_POINT('',#46403); +#46403 = CARTESIAN_POINT('',(-2.675,0.92,3.619548911246E-02)); +#46404 = CIRCLE('',#46405,3.E-02); +#46405 = AXIS2_PLACEMENT_3D('',#46406,#46407,#46408); +#46406 = CARTESIAN_POINT('',(-2.675,0.95,3.619548911246E-02)); +#46407 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46408 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46409 = ORIENTED_EDGE('',*,*,#46410,.F.); +#46410 = EDGE_CURVE('',#46411,#46402,#46413,.T.); +#46411 = VERTEX_POINT('',#46412); +#46412 = CARTESIAN_POINT('',(-2.675,0.92,1.110223024625E-16)); +#46413 = LINE('',#46414,#46415); +#46414 = CARTESIAN_POINT('',(-2.675,0.92,0.841614)); +#46415 = VECTOR('',#46416,1.); +#46416 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#46417 = ORIENTED_EDGE('',*,*,#46418,.F.); +#46418 = EDGE_CURVE('',#46419,#46411,#46421,.T.); +#46419 = VERTEX_POINT('',#46420); +#46420 = CARTESIAN_POINT('',(-2.675,1.25,0.)); +#46421 = LINE('',#46422,#46423); +#46422 = CARTESIAN_POINT('',(-2.675,0.694863,1.110223024625E-16)); +#46423 = VECTOR('',#46424,1.); +#46424 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#46425 = ORIENTED_EDGE('',*,*,#46426,.F.); +#46426 = EDGE_CURVE('',#46427,#46419,#46429,.T.); +#46427 = VERTEX_POINT('',#46428); +#46428 = CARTESIAN_POINT('',(-2.675,1.3,5.E-02)); +#46429 = LINE('',#46430,#46431); +#46430 = CARTESIAN_POINT('',(-2.675,0.694863,-0.555137)); +#46431 = VECTOR('',#46432,1.); +#46432 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#46433 = ORIENTED_EDGE('',*,*,#46434,.F.); +#46434 = EDGE_CURVE('',#46435,#46427,#46437,.T.); +#46435 = VERTEX_POINT('',#46436); +#46436 = CARTESIAN_POINT('',(-2.675,1.3,0.11)); +#46437 = LINE('',#46438,#46439); +#46438 = CARTESIAN_POINT('',(-2.675,1.3,0.841614)); +#46439 = VECTOR('',#46440,1.); +#46440 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46441 = ORIENTED_EDGE('',*,*,#46442,.F.); +#46442 = EDGE_CURVE('',#46443,#46435,#46445,.T.); +#46443 = VERTEX_POINT('',#46444); +#46444 = CARTESIAN_POINT('',(-2.675,1.35,0.16)); +#46445 = CIRCLE('',#46446,5.E-02); +#46446 = AXIS2_PLACEMENT_3D('',#46447,#46448,#46449); +#46447 = CARTESIAN_POINT('',(-2.675,1.35,0.11)); +#46448 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46449 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46450 = ORIENTED_EDGE('',*,*,#46451,.F.); +#46451 = EDGE_CURVE('',#43868,#46443,#46452,.T.); +#46452 = LINE('',#46453,#46454); +#46453 = CARTESIAN_POINT('',(-2.675,1.35,0.841614)); +#46454 = VECTOR('',#46455,1.); +#46455 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46456 = ORIENTED_EDGE('',*,*,#43867,.F.); +#46457 = ORIENTED_EDGE('',*,*,#46458,.T.); +#46458 = EDGE_CURVE('',#43860,#46335,#46459,.T.); +#46459 = LINE('',#46460,#46461); +#46460 = CARTESIAN_POINT('',(-2.675,1.,0.841614)); +#46461 = VECTOR('',#46462,1.); +#46462 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46463 = PLANE('',#46464); +#46464 = AXIS2_PLACEMENT_3D('',#46465,#46466,#46467); +#46465 = CARTESIAN_POINT('',(-2.675,1.245779075398,0.170500231015)); +#46466 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46467 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#46468 = ADVANCED_FACE('',(#46469),#46487,.F.); +#46469 = FACE_BOUND('',#46470,.T.); +#46470 = EDGE_LOOP('',(#46471,#46472,#46480,#46486)); +#46471 = ORIENTED_EDGE('',*,*,#46334,.F.); +#46472 = ORIENTED_EDGE('',*,*,#46473,.T.); +#46473 = EDGE_CURVE('',#46327,#46474,#46476,.T.); +#46474 = VERTEX_POINT('',#46475); +#46475 = CARTESIAN_POINT('',(-2.825,1.,7.866077735407E-02)); +#46476 = LINE('',#46477,#46478); +#46477 = CARTESIAN_POINT('',(-2.825,1.,0.841614)); +#46478 = VECTOR('',#46479,1.); +#46479 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46480 = ORIENTED_EDGE('',*,*,#46481,.F.); +#46481 = EDGE_CURVE('',#46386,#46474,#46482,.T.); +#46482 = LINE('',#46483,#46484); +#46483 = CARTESIAN_POINT('',(2.5,1.,7.866077735406E-02)); +#46484 = VECTOR('',#46485,1.); +#46485 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46486 = ORIENTED_EDGE('',*,*,#46385,.F.); +#46487 = PLANE('',#46488); +#46488 = AXIS2_PLACEMENT_3D('',#46489,#46490,#46491); +#46489 = CARTESIAN_POINT('',(-2.675,1.,7.866077735407E-02)); +#46490 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#46491 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46492 = ADVANCED_FACE('',(#46493),#46562,.F.); +#46493 = FACE_BOUND('',#46494,.T.); +#46494 = EDGE_LOOP('',(#46495,#46496,#46497,#46505,#46514,#46522,#46530, + #46538,#46546,#46555,#46561)); +#46495 = ORIENTED_EDGE('',*,*,#46364,.F.); +#46496 = ORIENTED_EDGE('',*,*,#43883,.F.); +#46497 = ORIENTED_EDGE('',*,*,#46498,.F.); +#46498 = EDGE_CURVE('',#46499,#43876,#46501,.T.); +#46499 = VERTEX_POINT('',#46500); +#46500 = CARTESIAN_POINT('',(-2.825,1.35,0.16)); +#46501 = LINE('',#46502,#46503); +#46502 = CARTESIAN_POINT('',(-2.825,1.35,0.31)); +#46503 = VECTOR('',#46504,1.); +#46504 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#46505 = ORIENTED_EDGE('',*,*,#46506,.T.); +#46506 = EDGE_CURVE('',#46499,#46507,#46509,.T.); +#46507 = VERTEX_POINT('',#46508); +#46508 = CARTESIAN_POINT('',(-2.825,1.3,0.11)); +#46509 = CIRCLE('',#46510,5.E-02); +#46510 = AXIS2_PLACEMENT_3D('',#46511,#46512,#46513); +#46511 = CARTESIAN_POINT('',(-2.825,1.35,0.11)); +#46512 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46513 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46514 = ORIENTED_EDGE('',*,*,#46515,.T.); +#46515 = EDGE_CURVE('',#46507,#46516,#46518,.T.); +#46516 = VERTEX_POINT('',#46517); +#46517 = CARTESIAN_POINT('',(-2.825,1.3,5.E-02)); +#46518 = LINE('',#46519,#46520); +#46519 = CARTESIAN_POINT('',(-2.825,1.3,0.11)); +#46520 = VECTOR('',#46521,1.); +#46521 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46522 = ORIENTED_EDGE('',*,*,#46523,.T.); +#46523 = EDGE_CURVE('',#46516,#46524,#46526,.T.); +#46524 = VERTEX_POINT('',#46525); +#46525 = CARTESIAN_POINT('',(-2.825,1.25,1.110223024625E-16)); +#46526 = LINE('',#46527,#46528); +#46527 = CARTESIAN_POINT('',(-2.825,1.3,5.E-02)); +#46528 = VECTOR('',#46529,1.); +#46529 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#46530 = ORIENTED_EDGE('',*,*,#46531,.F.); +#46531 = EDGE_CURVE('',#46532,#46524,#46534,.T.); +#46532 = VERTEX_POINT('',#46533); +#46533 = CARTESIAN_POINT('',(-2.825,0.92,2.22044604925E-16)); +#46534 = LINE('',#46535,#46536); +#46535 = CARTESIAN_POINT('',(-2.825,0.92,2.22044604925E-16)); +#46536 = VECTOR('',#46537,1.); +#46537 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#46538 = ORIENTED_EDGE('',*,*,#46539,.T.); +#46539 = EDGE_CURVE('',#46532,#46540,#46542,.T.); +#46540 = VERTEX_POINT('',#46541); +#46541 = CARTESIAN_POINT('',(-2.825,0.92,3.619548911246E-02)); +#46542 = LINE('',#46543,#46544); +#46543 = CARTESIAN_POINT('',(-2.825,0.92,2.22044604925E-16)); +#46544 = VECTOR('',#46545,1.); +#46545 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#46546 = ORIENTED_EDGE('',*,*,#46547,.F.); +#46547 = EDGE_CURVE('',#46548,#46540,#46550,.T.); +#46548 = VERTEX_POINT('',#46549); +#46549 = CARTESIAN_POINT('',(-2.825,0.943186633611,6.541154699934E-02)); +#46550 = CIRCLE('',#46551,3.E-02); +#46551 = AXIS2_PLACEMENT_3D('',#46552,#46553,#46554); +#46552 = CARTESIAN_POINT('',(-2.825,0.95,3.619548911246E-02)); +#46553 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46554 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46555 = ORIENTED_EDGE('',*,*,#46556,.T.); +#46556 = EDGE_CURVE('',#46548,#46474,#46557,.T.); +#46557 = LINE('',#46558,#46559); +#46558 = CARTESIAN_POINT('',(-2.825,0.943186633611,6.541154699934E-02)); +#46559 = VECTOR('',#46560,1.); +#46560 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#46561 = ORIENTED_EDGE('',*,*,#46473,.F.); +#46562 = PLANE('',#46563); +#46563 = AXIS2_PLACEMENT_3D('',#46564,#46565,#46566); +#46564 = CARTESIAN_POINT('',(-2.825,1.245779075398,0.170500231015)); +#46565 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46566 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#46567 = ADVANCED_FACE('',(#46568),#46602,.T.); +#46568 = FACE_BOUND('',#46569,.T.); +#46569 = EDGE_LOOP('',(#46570,#46578,#46586,#46592,#46593,#46599,#46600, + #46601)); +#46570 = ORIENTED_EDGE('',*,*,#46571,.T.); +#46571 = EDGE_CURVE('',#43852,#46572,#46574,.T.); +#46572 = VERTEX_POINT('',#46573); +#46573 = CARTESIAN_POINT('',(-2.325,1.,8.E-02)); +#46574 = LINE('',#46575,#46576); +#46575 = CARTESIAN_POINT('',(-2.325,1.,0.841614)); +#46576 = VECTOR('',#46577,1.); +#46577 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46578 = ORIENTED_EDGE('',*,*,#46579,.T.); +#46579 = EDGE_CURVE('',#46572,#46580,#46582,.T.); +#46580 = VERTEX_POINT('',#46581); +#46581 = CARTESIAN_POINT('',(-2.4,1.,8.E-02)); +#46582 = LINE('',#46583,#46584); +#46583 = CARTESIAN_POINT('',(-18.,1.,8.E-02)); +#46584 = VECTOR('',#46585,1.); +#46585 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46586 = ORIENTED_EDGE('',*,*,#46587,.T.); +#46587 = EDGE_CURVE('',#46580,#42566,#46588,.T.); +#46588 = LINE('',#46589,#46590); +#46589 = CARTESIAN_POINT('',(-18.,1.,-15.52)); +#46590 = VECTOR('',#46591,1.); +#46591 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#46592 = ORIENTED_EDGE('',*,*,#42565,.F.); +#46593 = ORIENTED_EDGE('',*,*,#46594,.T.); +#46594 = EDGE_CURVE('',#42558,#46343,#46595,.T.); +#46595 = LINE('',#46596,#46597); +#46596 = CARTESIAN_POINT('',(-18.,1.,15.48)); +#46597 = VECTOR('',#46598,1.); +#46598 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#46599 = ORIENTED_EDGE('',*,*,#46342,.T.); +#46600 = ORIENTED_EDGE('',*,*,#46458,.F.); +#46601 = ORIENTED_EDGE('',*,*,#43859,.T.); +#46602 = PLANE('',#46603); +#46603 = AXIS2_PLACEMENT_3D('',#46604,#46605,#46606); +#46604 = CARTESIAN_POINT('',(1.325,1.,0.31)); +#46605 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#46606 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46607 = ADVANCED_FACE('',(#46608),#46684,.F.); +#46608 = FACE_BOUND('',#46609,.T.); +#46609 = EDGE_LOOP('',(#46610,#46611,#46612,#46620,#46629,#46637,#46645, + #46653,#46661,#46670,#46678)); +#46610 = ORIENTED_EDGE('',*,*,#46571,.F.); +#46611 = ORIENTED_EDGE('',*,*,#43851,.F.); +#46612 = ORIENTED_EDGE('',*,*,#46613,.F.); +#46613 = EDGE_CURVE('',#46614,#43844,#46616,.T.); +#46614 = VERTEX_POINT('',#46615); +#46615 = CARTESIAN_POINT('',(-2.325,1.35,0.16)); +#46616 = LINE('',#46617,#46618); +#46617 = CARTESIAN_POINT('',(-2.325,1.35,0.31)); +#46618 = VECTOR('',#46619,1.); +#46619 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#46620 = ORIENTED_EDGE('',*,*,#46621,.T.); +#46621 = EDGE_CURVE('',#46614,#46622,#46624,.T.); +#46622 = VERTEX_POINT('',#46623); +#46623 = CARTESIAN_POINT('',(-2.325,1.3,0.11)); +#46624 = CIRCLE('',#46625,5.E-02); +#46625 = AXIS2_PLACEMENT_3D('',#46626,#46627,#46628); +#46626 = CARTESIAN_POINT('',(-2.325,1.35,0.11)); +#46627 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46628 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46629 = ORIENTED_EDGE('',*,*,#46630,.T.); +#46630 = EDGE_CURVE('',#46622,#46631,#46633,.T.); +#46631 = VERTEX_POINT('',#46632); +#46632 = CARTESIAN_POINT('',(-2.325,1.3,5.E-02)); +#46633 = LINE('',#46634,#46635); +#46634 = CARTESIAN_POINT('',(-2.325,1.3,0.11)); +#46635 = VECTOR('',#46636,1.); +#46636 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46637 = ORIENTED_EDGE('',*,*,#46638,.T.); +#46638 = EDGE_CURVE('',#46631,#46639,#46641,.T.); +#46639 = VERTEX_POINT('',#46640); +#46640 = CARTESIAN_POINT('',(-2.325,1.25,0.)); +#46641 = LINE('',#46642,#46643); +#46642 = CARTESIAN_POINT('',(-2.325,1.3,5.E-02)); +#46643 = VECTOR('',#46644,1.); +#46644 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#46645 = ORIENTED_EDGE('',*,*,#46646,.F.); +#46646 = EDGE_CURVE('',#46647,#46639,#46649,.T.); +#46647 = VERTEX_POINT('',#46648); +#46648 = CARTESIAN_POINT('',(-2.325,0.92,1.110223024625E-16)); +#46649 = LINE('',#46650,#46651); +#46650 = CARTESIAN_POINT('',(-2.325,0.92,1.110223024625E-16)); +#46651 = VECTOR('',#46652,1.); +#46652 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#46653 = ORIENTED_EDGE('',*,*,#46654,.T.); +#46654 = EDGE_CURVE('',#46647,#46655,#46657,.T.); +#46655 = VERTEX_POINT('',#46656); +#46656 = CARTESIAN_POINT('',(-2.325,0.92,3.619548911246E-02)); +#46657 = LINE('',#46658,#46659); +#46658 = CARTESIAN_POINT('',(-2.325,0.92,1.110223024625E-16)); +#46659 = VECTOR('',#46660,1.); +#46660 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#46661 = ORIENTED_EDGE('',*,*,#46662,.F.); +#46662 = EDGE_CURVE('',#46663,#46655,#46665,.T.); +#46663 = VERTEX_POINT('',#46664); +#46664 = CARTESIAN_POINT('',(-2.325,0.943186633611,6.541154699934E-02)); +#46665 = CIRCLE('',#46666,3.E-02); +#46666 = AXIS2_PLACEMENT_3D('',#46667,#46668,#46669); +#46667 = CARTESIAN_POINT('',(-2.325,0.95,3.619548911246E-02)); +#46668 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46669 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46670 = ORIENTED_EDGE('',*,*,#46671,.T.); +#46671 = EDGE_CURVE('',#46663,#46672,#46674,.T.); +#46672 = VERTEX_POINT('',#46673); +#46673 = CARTESIAN_POINT('',(-2.325,1.,7.866077735407E-02)); +#46674 = LINE('',#46675,#46676); +#46675 = CARTESIAN_POINT('',(-2.325,0.943186633611,6.541154699934E-02)); +#46676 = VECTOR('',#46677,1.); +#46677 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#46678 = ORIENTED_EDGE('',*,*,#46679,.F.); +#46679 = EDGE_CURVE('',#46572,#46672,#46680,.T.); +#46680 = LINE('',#46681,#46682); +#46681 = CARTESIAN_POINT('',(-2.325,1.,0.841614)); +#46682 = VECTOR('',#46683,1.); +#46683 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46684 = PLANE('',#46685); +#46685 = AXIS2_PLACEMENT_3D('',#46686,#46687,#46688); +#46686 = CARTESIAN_POINT('',(-2.325,1.245779075398,0.170500231015)); +#46687 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46688 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#46689 = ADVANCED_FACE('',(#46690),#46715,.F.); +#46690 = FACE_BOUND('',#46691,.T.); +#46691 = EDGE_LOOP('',(#46692,#46700,#46701,#46709)); +#46692 = ORIENTED_EDGE('',*,*,#46693,.F.); +#46693 = EDGE_CURVE('',#46572,#46694,#46696,.T.); +#46694 = VERTEX_POINT('',#46695); +#46695 = CARTESIAN_POINT('',(-2.175,1.,8.E-02)); +#46696 = LINE('',#46697,#46698); +#46697 = CARTESIAN_POINT('',(3.,1.,8.E-02)); +#46698 = VECTOR('',#46699,1.); +#46699 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46700 = ORIENTED_EDGE('',*,*,#46679,.T.); +#46701 = ORIENTED_EDGE('',*,*,#46702,.F.); +#46702 = EDGE_CURVE('',#46703,#46672,#46705,.T.); +#46703 = VERTEX_POINT('',#46704); +#46704 = CARTESIAN_POINT('',(-2.175,1.,7.866077735406E-02)); +#46705 = LINE('',#46706,#46707); +#46706 = CARTESIAN_POINT('',(3.,1.,7.866077735406E-02)); +#46707 = VECTOR('',#46708,1.); +#46708 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46709 = ORIENTED_EDGE('',*,*,#46710,.F.); +#46710 = EDGE_CURVE('',#46694,#46703,#46711,.T.); +#46711 = LINE('',#46712,#46713); +#46712 = CARTESIAN_POINT('',(-2.175,1.,0.841614)); +#46713 = VECTOR('',#46714,1.); +#46714 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46715 = PLANE('',#46716); +#46716 = AXIS2_PLACEMENT_3D('',#46717,#46718,#46719); +#46717 = CARTESIAN_POINT('',(-2.175,1.,7.866077735406E-02)); +#46718 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#46719 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46720 = ADVANCED_FACE('',(#46721),#46795,.T.); +#46721 = FACE_BOUND('',#46722,.T.); +#46722 = EDGE_LOOP('',(#46723,#46724,#46732,#46741,#46749,#46757,#46765, + #46773,#46782,#46788,#46789)); +#46723 = ORIENTED_EDGE('',*,*,#46710,.T.); +#46724 = ORIENTED_EDGE('',*,*,#46725,.F.); +#46725 = EDGE_CURVE('',#46726,#46703,#46728,.T.); +#46726 = VERTEX_POINT('',#46727); +#46727 = CARTESIAN_POINT('',(-2.175,0.943186633611,6.541154699934E-02)); +#46728 = LINE('',#46729,#46730); +#46729 = CARTESIAN_POINT('',(-2.175,0.694863,7.500931358166E-03)); +#46730 = VECTOR('',#46731,1.); +#46731 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#46732 = ORIENTED_EDGE('',*,*,#46733,.T.); +#46733 = EDGE_CURVE('',#46726,#46734,#46736,.T.); +#46734 = VERTEX_POINT('',#46735); +#46735 = CARTESIAN_POINT('',(-2.175,0.92,3.619548911246E-02)); +#46736 = CIRCLE('',#46737,3.E-02); +#46737 = AXIS2_PLACEMENT_3D('',#46738,#46739,#46740); +#46738 = CARTESIAN_POINT('',(-2.175,0.95,3.619548911246E-02)); +#46739 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46740 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46741 = ORIENTED_EDGE('',*,*,#46742,.F.); +#46742 = EDGE_CURVE('',#46743,#46734,#46745,.T.); +#46743 = VERTEX_POINT('',#46744); +#46744 = CARTESIAN_POINT('',(-2.175,0.92,0.)); +#46745 = LINE('',#46746,#46747); +#46746 = CARTESIAN_POINT('',(-2.175,0.92,0.841614)); +#46747 = VECTOR('',#46748,1.); +#46748 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#46749 = ORIENTED_EDGE('',*,*,#46750,.F.); +#46750 = EDGE_CURVE('',#46751,#46743,#46753,.T.); +#46751 = VERTEX_POINT('',#46752); +#46752 = CARTESIAN_POINT('',(-2.175,1.25,-1.110223024625E-16)); +#46753 = LINE('',#46754,#46755); +#46754 = CARTESIAN_POINT('',(-2.175,0.694863,0.)); +#46755 = VECTOR('',#46756,1.); +#46756 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#46757 = ORIENTED_EDGE('',*,*,#46758,.F.); +#46758 = EDGE_CURVE('',#46759,#46751,#46761,.T.); +#46759 = VERTEX_POINT('',#46760); +#46760 = CARTESIAN_POINT('',(-2.175,1.3,5.E-02)); +#46761 = LINE('',#46762,#46763); +#46762 = CARTESIAN_POINT('',(-2.175,0.694863,-0.555137)); +#46763 = VECTOR('',#46764,1.); +#46764 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#46765 = ORIENTED_EDGE('',*,*,#46766,.F.); +#46766 = EDGE_CURVE('',#46767,#46759,#46769,.T.); +#46767 = VERTEX_POINT('',#46768); +#46768 = CARTESIAN_POINT('',(-2.175,1.3,0.11)); +#46769 = LINE('',#46770,#46771); +#46770 = CARTESIAN_POINT('',(-2.175,1.3,0.841614)); +#46771 = VECTOR('',#46772,1.); +#46772 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46773 = ORIENTED_EDGE('',*,*,#46774,.F.); +#46774 = EDGE_CURVE('',#46775,#46767,#46777,.T.); +#46775 = VERTEX_POINT('',#46776); +#46776 = CARTESIAN_POINT('',(-2.175,1.35,0.16)); +#46777 = CIRCLE('',#46778,5.E-02); +#46778 = AXIS2_PLACEMENT_3D('',#46779,#46780,#46781); +#46779 = CARTESIAN_POINT('',(-2.175,1.35,0.11)); +#46780 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46781 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#46782 = ORIENTED_EDGE('',*,*,#46783,.F.); +#46783 = EDGE_CURVE('',#43836,#46775,#46784,.T.); +#46784 = LINE('',#46785,#46786); +#46785 = CARTESIAN_POINT('',(-2.175,1.35,0.841614)); +#46786 = VECTOR('',#46787,1.); +#46787 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46788 = ORIENTED_EDGE('',*,*,#43835,.F.); +#46789 = ORIENTED_EDGE('',*,*,#46790,.T.); +#46790 = EDGE_CURVE('',#43828,#46694,#46791,.T.); +#46791 = LINE('',#46792,#46793); +#46792 = CARTESIAN_POINT('',(-2.175,1.,0.841614)); +#46793 = VECTOR('',#46794,1.); +#46794 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46795 = PLANE('',#46796); +#46796 = AXIS2_PLACEMENT_3D('',#46797,#46798,#46799); +#46797 = CARTESIAN_POINT('',(-2.175,1.245779075398,0.170500231015)); +#46798 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46799 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#46800 = ADVANCED_FACE('',(#46801),#46819,.T.); +#46801 = FACE_BOUND('',#46802,.T.); +#46802 = EDGE_LOOP('',(#46803,#46811,#46817,#46818)); +#46803 = ORIENTED_EDGE('',*,*,#46804,.F.); +#46804 = EDGE_CURVE('',#46805,#46580,#46807,.T.); +#46805 = VERTEX_POINT('',#46806); +#46806 = CARTESIAN_POINT('',(-2.4,0.92,8.E-02)); +#46807 = LINE('',#46808,#46809); +#46808 = CARTESIAN_POINT('',(-2.4,0.694863,8.E-02)); +#46809 = VECTOR('',#46810,1.); +#46810 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#46811 = ORIENTED_EDGE('',*,*,#46812,.T.); +#46812 = EDGE_CURVE('',#46805,#42574,#46813,.T.); +#46813 = LINE('',#46814,#46815); +#46814 = CARTESIAN_POINT('',(-2.4511675,0.694863,2.88325E-02)); +#46815 = VECTOR('',#46816,1.); +#46816 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#46817 = ORIENTED_EDGE('',*,*,#42573,.F.); +#46818 = ORIENTED_EDGE('',*,*,#46587,.F.); +#46819 = PLANE('',#46820); +#46820 = AXIS2_PLACEMENT_3D('',#46821,#46822,#46823); +#46821 = CARTESIAN_POINT('',(-2.425,0.85,5.5E-02)); +#46822 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#46823 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#46824 = ADVANCED_FACE('',(#46825),#46852,.T.); +#46825 = FACE_BOUND('',#46826,.T.); +#46826 = EDGE_LOOP('',(#46827,#46835,#46836,#46837,#46838,#46846)); +#46827 = ORIENTED_EDGE('',*,*,#46828,.T.); +#46828 = EDGE_CURVE('',#46829,#46805,#46831,.T.); +#46829 = VERTEX_POINT('',#46830); +#46830 = CARTESIAN_POINT('',(-2.1,0.92,8.E-02)); +#46831 = LINE('',#46832,#46833); +#46832 = CARTESIAN_POINT('',(-18.,0.92,8.E-02)); +#46833 = VECTOR('',#46834,1.); +#46834 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46835 = ORIENTED_EDGE('',*,*,#46804,.T.); +#46836 = ORIENTED_EDGE('',*,*,#46579,.F.); +#46837 = ORIENTED_EDGE('',*,*,#46693,.T.); +#46838 = ORIENTED_EDGE('',*,*,#46839,.F.); +#46839 = EDGE_CURVE('',#46840,#46694,#46842,.T.); +#46840 = VERTEX_POINT('',#46841); +#46841 = CARTESIAN_POINT('',(-2.1,1.,8.E-02)); +#46842 = LINE('',#46843,#46844); +#46843 = CARTESIAN_POINT('',(-18.,1.,8.E-02)); +#46844 = VECTOR('',#46845,1.); +#46845 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46846 = ORIENTED_EDGE('',*,*,#46847,.T.); +#46847 = EDGE_CURVE('',#46840,#46829,#46848,.T.); +#46848 = LINE('',#46849,#46850); +#46849 = CARTESIAN_POINT('',(-2.1,0.694863,8.E-02)); +#46850 = VECTOR('',#46851,1.); +#46851 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#46852 = PLANE('',#46853); +#46853 = AXIS2_PLACEMENT_3D('',#46854,#46855,#46856); +#46854 = CARTESIAN_POINT('',(-2.3375,1.,8.E-02)); +#46855 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46856 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#46857 = ADVANCED_FACE('',(#46858),#46869,.T.); +#46858 = FACE_BOUND('',#46859,.T.); +#46859 = EDGE_LOOP('',(#46860,#46861,#46862,#46863)); +#46860 = ORIENTED_EDGE('',*,*,#42581,.T.); +#46861 = ORIENTED_EDGE('',*,*,#46812,.F.); +#46862 = ORIENTED_EDGE('',*,*,#46828,.F.); +#46863 = ORIENTED_EDGE('',*,*,#46864,.F.); +#46864 = EDGE_CURVE('',#42582,#46829,#46865,.T.); +#46865 = LINE('',#46866,#46867); +#46866 = CARTESIAN_POINT('',(-2.0488325,0.694863,2.88325E-02)); +#46867 = VECTOR('',#46868,1.); +#46868 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#46869 = PLANE('',#46870); +#46870 = AXIS2_PLACEMENT_3D('',#46871,#46872,#46873); +#46871 = CARTESIAN_POINT('',(-2.3375,0.92,8.E-02)); +#46872 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#46873 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#46874 = ADVANCED_FACE('',(#46875),#46886,.T.); +#46875 = FACE_BOUND('',#46876,.T.); +#46876 = EDGE_LOOP('',(#46877,#46878,#46884,#46885)); +#46877 = ORIENTED_EDGE('',*,*,#46847,.F.); +#46878 = ORIENTED_EDGE('',*,*,#46879,.F.); +#46879 = EDGE_CURVE('',#42590,#46840,#46880,.T.); +#46880 = LINE('',#46881,#46882); +#46881 = CARTESIAN_POINT('',(-17.5,1.,15.48)); +#46882 = VECTOR('',#46883,1.); +#46883 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#46884 = ORIENTED_EDGE('',*,*,#42589,.F.); +#46885 = ORIENTED_EDGE('',*,*,#46864,.T.); +#46886 = PLANE('',#46887); +#46887 = AXIS2_PLACEMENT_3D('',#46888,#46889,#46890); +#46888 = CARTESIAN_POINT('',(-2.075,0.85,5.5E-02)); +#46889 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#46890 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#46891 = ADVANCED_FACE('',(#46892),#46917,.T.); +#46892 = FACE_BOUND('',#46893,.T.); +#46893 = EDGE_LOOP('',(#46894,#46904,#46910,#46911)); +#46894 = ORIENTED_EDGE('',*,*,#46895,.F.); +#46895 = EDGE_CURVE('',#46896,#46898,#46900,.T.); +#46896 = VERTEX_POINT('',#46897); +#46897 = CARTESIAN_POINT('',(-1.9,0.92,8.E-02)); +#46898 = VERTEX_POINT('',#46899); +#46899 = CARTESIAN_POINT('',(-1.9,1.,8.E-02)); +#46900 = LINE('',#46901,#46902); +#46901 = CARTESIAN_POINT('',(-1.9,0.694863,8.E-02)); +#46902 = VECTOR('',#46903,1.); +#46903 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#46904 = ORIENTED_EDGE('',*,*,#46905,.T.); +#46905 = EDGE_CURVE('',#46896,#42606,#46906,.T.); +#46906 = LINE('',#46907,#46908); +#46907 = CARTESIAN_POINT('',(-1.9511675,0.694863,2.88325E-02)); +#46908 = VECTOR('',#46909,1.); +#46909 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#46910 = ORIENTED_EDGE('',*,*,#42605,.F.); +#46911 = ORIENTED_EDGE('',*,*,#46912,.F.); +#46912 = EDGE_CURVE('',#46898,#42598,#46913,.T.); +#46913 = LINE('',#46914,#46915); +#46914 = CARTESIAN_POINT('',(-17.5,1.,-15.52)); +#46915 = VECTOR('',#46916,1.); +#46916 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#46917 = PLANE('',#46918); +#46918 = AXIS2_PLACEMENT_3D('',#46919,#46920,#46921); +#46919 = CARTESIAN_POINT('',(-1.925,0.85,5.5E-02)); +#46920 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#46921 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#46922 = ADVANCED_FACE('',(#46923),#46941,.T.); +#46923 = FACE_BOUND('',#46924,.T.); +#46924 = EDGE_LOOP('',(#46925,#46926,#46927,#46935)); +#46925 = ORIENTED_EDGE('',*,*,#42613,.T.); +#46926 = ORIENTED_EDGE('',*,*,#46905,.F.); +#46927 = ORIENTED_EDGE('',*,*,#46928,.F.); +#46928 = EDGE_CURVE('',#46929,#46896,#46931,.T.); +#46929 = VERTEX_POINT('',#46930); +#46930 = CARTESIAN_POINT('',(-1.6,0.92,8.E-02)); +#46931 = LINE('',#46932,#46933); +#46932 = CARTESIAN_POINT('',(-17.5,0.92,8.E-02)); +#46933 = VECTOR('',#46934,1.); +#46934 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46935 = ORIENTED_EDGE('',*,*,#46936,.F.); +#46936 = EDGE_CURVE('',#42614,#46929,#46937,.T.); +#46937 = LINE('',#46938,#46939); +#46938 = CARTESIAN_POINT('',(-1.5488325,0.694863,2.88325E-02)); +#46939 = VECTOR('',#46940,1.); +#46940 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#46941 = PLANE('',#46942); +#46942 = AXIS2_PLACEMENT_3D('',#46943,#46944,#46945); +#46943 = CARTESIAN_POINT('',(-1.8375,0.92,8.E-02)); +#46944 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#46945 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#46946 = ADVANCED_FACE('',(#46947),#46981,.T.); +#46947 = FACE_BOUND('',#46948,.T.); +#46948 = EDGE_LOOP('',(#46949,#46950,#46951,#46959,#46967,#46975)); +#46949 = ORIENTED_EDGE('',*,*,#46928,.T.); +#46950 = ORIENTED_EDGE('',*,*,#46895,.T.); +#46951 = ORIENTED_EDGE('',*,*,#46952,.F.); +#46952 = EDGE_CURVE('',#46953,#46898,#46955,.T.); +#46953 = VERTEX_POINT('',#46954); +#46954 = CARTESIAN_POINT('',(-1.825,1.,8.E-02)); +#46955 = LINE('',#46956,#46957); +#46956 = CARTESIAN_POINT('',(-17.5,1.,8.E-02)); +#46957 = VECTOR('',#46958,1.); +#46958 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46959 = ORIENTED_EDGE('',*,*,#46960,.T.); +#46960 = EDGE_CURVE('',#46953,#46961,#46963,.T.); +#46961 = VERTEX_POINT('',#46962); +#46962 = CARTESIAN_POINT('',(-1.675,1.,8.E-02)); +#46963 = LINE('',#46964,#46965); +#46964 = CARTESIAN_POINT('',(3.5,1.,8.E-02)); +#46965 = VECTOR('',#46966,1.); +#46966 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#46967 = ORIENTED_EDGE('',*,*,#46968,.F.); +#46968 = EDGE_CURVE('',#46969,#46961,#46971,.T.); +#46969 = VERTEX_POINT('',#46970); +#46970 = CARTESIAN_POINT('',(-1.6,1.,8.E-02)); +#46971 = LINE('',#46972,#46973); +#46972 = CARTESIAN_POINT('',(-17.5,1.,8.E-02)); +#46973 = VECTOR('',#46974,1.); +#46974 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#46975 = ORIENTED_EDGE('',*,*,#46976,.T.); +#46976 = EDGE_CURVE('',#46969,#46929,#46977,.T.); +#46977 = LINE('',#46978,#46979); +#46978 = CARTESIAN_POINT('',(-1.6,0.694863,8.E-02)); +#46979 = VECTOR('',#46980,1.); +#46980 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#46981 = PLANE('',#46982); +#46982 = AXIS2_PLACEMENT_3D('',#46983,#46984,#46985); +#46983 = CARTESIAN_POINT('',(-1.8375,1.,8.E-02)); +#46984 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#46985 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#46986 = ADVANCED_FACE('',(#46987),#47002,.T.); +#46987 = FACE_BOUND('',#46988,.T.); +#46988 = EDGE_LOOP('',(#46989,#46995,#46996,#46997,#46998,#46999,#47000, + #47001)); +#46989 = ORIENTED_EDGE('',*,*,#46990,.T.); +#46990 = EDGE_CURVE('',#43820,#46953,#46991,.T.); +#46991 = LINE('',#46992,#46993); +#46992 = CARTESIAN_POINT('',(-1.825,1.,0.841614)); +#46993 = VECTOR('',#46994,1.); +#46994 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#46995 = ORIENTED_EDGE('',*,*,#46952,.T.); +#46996 = ORIENTED_EDGE('',*,*,#46912,.T.); +#46997 = ORIENTED_EDGE('',*,*,#42597,.F.); +#46998 = ORIENTED_EDGE('',*,*,#46879,.T.); +#46999 = ORIENTED_EDGE('',*,*,#46839,.T.); +#47000 = ORIENTED_EDGE('',*,*,#46790,.F.); +#47001 = ORIENTED_EDGE('',*,*,#43827,.T.); +#47002 = PLANE('',#47003); +#47003 = AXIS2_PLACEMENT_3D('',#47004,#47005,#47006); +#47004 = CARTESIAN_POINT('',(1.825,1.,0.31)); +#47005 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#47006 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47007 = ADVANCED_FACE('',(#47008),#47033,.F.); +#47008 = FACE_BOUND('',#47009,.T.); +#47009 = EDGE_LOOP('',(#47010,#47011,#47019,#47027)); +#47010 = ORIENTED_EDGE('',*,*,#46960,.F.); +#47011 = ORIENTED_EDGE('',*,*,#47012,.T.); +#47012 = EDGE_CURVE('',#46953,#47013,#47015,.T.); +#47013 = VERTEX_POINT('',#47014); +#47014 = CARTESIAN_POINT('',(-1.825,1.,7.866077735406E-02)); +#47015 = LINE('',#47016,#47017); +#47016 = CARTESIAN_POINT('',(-1.825,1.,0.841614)); +#47017 = VECTOR('',#47018,1.); +#47018 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47019 = ORIENTED_EDGE('',*,*,#47020,.F.); +#47020 = EDGE_CURVE('',#47021,#47013,#47023,.T.); +#47021 = VERTEX_POINT('',#47022); +#47022 = CARTESIAN_POINT('',(-1.675,1.,7.866077735406E-02)); +#47023 = LINE('',#47024,#47025); +#47024 = CARTESIAN_POINT('',(3.5,1.,7.866077735406E-02)); +#47025 = VECTOR('',#47026,1.); +#47026 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47027 = ORIENTED_EDGE('',*,*,#47028,.F.); +#47028 = EDGE_CURVE('',#46961,#47021,#47029,.T.); +#47029 = LINE('',#47030,#47031); +#47030 = CARTESIAN_POINT('',(-1.675,1.,0.841614)); +#47031 = VECTOR('',#47032,1.); +#47032 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47033 = PLANE('',#47034); +#47034 = AXIS2_PLACEMENT_3D('',#47035,#47036,#47037); +#47035 = CARTESIAN_POINT('',(-1.675,1.,7.866077735406E-02)); +#47036 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#47037 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47038 = ADVANCED_FACE('',(#47039),#47108,.F.); +#47039 = FACE_BOUND('',#47040,.T.); +#47040 = EDGE_LOOP('',(#47041,#47042,#47043,#47051,#47060,#47068,#47076, + #47084,#47092,#47101,#47107)); +#47041 = ORIENTED_EDGE('',*,*,#46990,.F.); +#47042 = ORIENTED_EDGE('',*,*,#43819,.F.); +#47043 = ORIENTED_EDGE('',*,*,#47044,.F.); +#47044 = EDGE_CURVE('',#47045,#43812,#47047,.T.); +#47045 = VERTEX_POINT('',#47046); +#47046 = CARTESIAN_POINT('',(-1.825,1.35,0.16)); +#47047 = LINE('',#47048,#47049); +#47048 = CARTESIAN_POINT('',(-1.825,1.35,0.31)); +#47049 = VECTOR('',#47050,1.); +#47050 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47051 = ORIENTED_EDGE('',*,*,#47052,.T.); +#47052 = EDGE_CURVE('',#47045,#47053,#47055,.T.); +#47053 = VERTEX_POINT('',#47054); +#47054 = CARTESIAN_POINT('',(-1.825,1.3,0.11)); +#47055 = CIRCLE('',#47056,5.E-02); +#47056 = AXIS2_PLACEMENT_3D('',#47057,#47058,#47059); +#47057 = CARTESIAN_POINT('',(-1.825,1.35,0.11)); +#47058 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47059 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47060 = ORIENTED_EDGE('',*,*,#47061,.T.); +#47061 = EDGE_CURVE('',#47053,#47062,#47064,.T.); +#47062 = VERTEX_POINT('',#47063); +#47063 = CARTESIAN_POINT('',(-1.825,1.3,5.E-02)); +#47064 = LINE('',#47065,#47066); +#47065 = CARTESIAN_POINT('',(-1.825,1.3,0.11)); +#47066 = VECTOR('',#47067,1.); +#47067 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47068 = ORIENTED_EDGE('',*,*,#47069,.T.); +#47069 = EDGE_CURVE('',#47062,#47070,#47072,.T.); +#47070 = VERTEX_POINT('',#47071); +#47071 = CARTESIAN_POINT('',(-1.825,1.25,-1.110223024625E-16)); +#47072 = LINE('',#47073,#47074); +#47073 = CARTESIAN_POINT('',(-1.825,1.3,5.E-02)); +#47074 = VECTOR('',#47075,1.); +#47075 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#47076 = ORIENTED_EDGE('',*,*,#47077,.F.); +#47077 = EDGE_CURVE('',#47078,#47070,#47080,.T.); +#47078 = VERTEX_POINT('',#47079); +#47079 = CARTESIAN_POINT('',(-1.825,0.92,0.)); +#47080 = LINE('',#47081,#47082); +#47081 = CARTESIAN_POINT('',(-1.825,0.92,0.)); +#47082 = VECTOR('',#47083,1.); +#47083 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#47084 = ORIENTED_EDGE('',*,*,#47085,.T.); +#47085 = EDGE_CURVE('',#47078,#47086,#47088,.T.); +#47086 = VERTEX_POINT('',#47087); +#47087 = CARTESIAN_POINT('',(-1.825,0.92,3.619548911246E-02)); +#47088 = LINE('',#47089,#47090); +#47089 = CARTESIAN_POINT('',(-1.825,0.92,0.)); +#47090 = VECTOR('',#47091,1.); +#47091 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47092 = ORIENTED_EDGE('',*,*,#47093,.F.); +#47093 = EDGE_CURVE('',#47094,#47086,#47096,.T.); +#47094 = VERTEX_POINT('',#47095); +#47095 = CARTESIAN_POINT('',(-1.825,0.943186633611,6.541154699934E-02)); +#47096 = CIRCLE('',#47097,3.E-02); +#47097 = AXIS2_PLACEMENT_3D('',#47098,#47099,#47100); +#47098 = CARTESIAN_POINT('',(-1.825,0.95,3.619548911246E-02)); +#47099 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47100 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47101 = ORIENTED_EDGE('',*,*,#47102,.T.); +#47102 = EDGE_CURVE('',#47094,#47013,#47103,.T.); +#47103 = LINE('',#47104,#47105); +#47104 = CARTESIAN_POINT('',(-1.825,0.943186633611,6.541154699934E-02)); +#47105 = VECTOR('',#47106,1.); +#47106 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#47107 = ORIENTED_EDGE('',*,*,#47012,.F.); +#47108 = PLANE('',#47109); +#47109 = AXIS2_PLACEMENT_3D('',#47110,#47111,#47112); +#47110 = CARTESIAN_POINT('',(-1.825,1.245779075398,0.170500231015)); +#47111 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47112 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#47113 = ADVANCED_FACE('',(#47114),#47188,.T.); +#47114 = FACE_BOUND('',#47115,.T.); +#47115 = EDGE_LOOP('',(#47116,#47117,#47125,#47134,#47142,#47150,#47158, + #47166,#47175,#47181,#47182)); +#47116 = ORIENTED_EDGE('',*,*,#47028,.T.); +#47117 = ORIENTED_EDGE('',*,*,#47118,.F.); +#47118 = EDGE_CURVE('',#47119,#47021,#47121,.T.); +#47119 = VERTEX_POINT('',#47120); +#47120 = CARTESIAN_POINT('',(-1.675,0.943186633611,6.541154699934E-02)); +#47121 = LINE('',#47122,#47123); +#47122 = CARTESIAN_POINT('',(-1.675,0.694863,7.500931358166E-03)); +#47123 = VECTOR('',#47124,1.); +#47124 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#47125 = ORIENTED_EDGE('',*,*,#47126,.T.); +#47126 = EDGE_CURVE('',#47119,#47127,#47129,.T.); +#47127 = VERTEX_POINT('',#47128); +#47128 = CARTESIAN_POINT('',(-1.675,0.92,3.619548911246E-02)); +#47129 = CIRCLE('',#47130,3.E-02); +#47130 = AXIS2_PLACEMENT_3D('',#47131,#47132,#47133); +#47131 = CARTESIAN_POINT('',(-1.675,0.95,3.619548911246E-02)); +#47132 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47133 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47134 = ORIENTED_EDGE('',*,*,#47135,.F.); +#47135 = EDGE_CURVE('',#47136,#47127,#47138,.T.); +#47136 = VERTEX_POINT('',#47137); +#47137 = CARTESIAN_POINT('',(-1.675,0.92,-1.110223024625E-16)); +#47138 = LINE('',#47139,#47140); +#47139 = CARTESIAN_POINT('',(-1.675,0.92,0.841614)); +#47140 = VECTOR('',#47141,1.); +#47141 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47142 = ORIENTED_EDGE('',*,*,#47143,.F.); +#47143 = EDGE_CURVE('',#47144,#47136,#47146,.T.); +#47144 = VERTEX_POINT('',#47145); +#47145 = CARTESIAN_POINT('',(-1.675,1.25,-2.22044604925E-16)); +#47146 = LINE('',#47147,#47148); +#47147 = CARTESIAN_POINT('',(-1.675,0.694863,-1.110223024625E-16)); +#47148 = VECTOR('',#47149,1.); +#47149 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#47150 = ORIENTED_EDGE('',*,*,#47151,.F.); +#47151 = EDGE_CURVE('',#47152,#47144,#47154,.T.); +#47152 = VERTEX_POINT('',#47153); +#47153 = CARTESIAN_POINT('',(-1.675,1.3,5.E-02)); +#47154 = LINE('',#47155,#47156); +#47155 = CARTESIAN_POINT('',(-1.675,0.694863,-0.555137)); +#47156 = VECTOR('',#47157,1.); +#47157 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#47158 = ORIENTED_EDGE('',*,*,#47159,.F.); +#47159 = EDGE_CURVE('',#47160,#47152,#47162,.T.); +#47160 = VERTEX_POINT('',#47161); +#47161 = CARTESIAN_POINT('',(-1.675,1.3,0.11)); +#47162 = LINE('',#47163,#47164); +#47163 = CARTESIAN_POINT('',(-1.675,1.3,0.841614)); +#47164 = VECTOR('',#47165,1.); +#47165 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47166 = ORIENTED_EDGE('',*,*,#47167,.F.); +#47167 = EDGE_CURVE('',#47168,#47160,#47170,.T.); +#47168 = VERTEX_POINT('',#47169); +#47169 = CARTESIAN_POINT('',(-1.675,1.35,0.16)); +#47170 = CIRCLE('',#47171,5.E-02); +#47171 = AXIS2_PLACEMENT_3D('',#47172,#47173,#47174); +#47172 = CARTESIAN_POINT('',(-1.675,1.35,0.11)); +#47173 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47174 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47175 = ORIENTED_EDGE('',*,*,#47176,.F.); +#47176 = EDGE_CURVE('',#43804,#47168,#47177,.T.); +#47177 = LINE('',#47178,#47179); +#47178 = CARTESIAN_POINT('',(-1.675,1.35,0.841614)); +#47179 = VECTOR('',#47180,1.); +#47180 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47181 = ORIENTED_EDGE('',*,*,#43803,.F.); +#47182 = ORIENTED_EDGE('',*,*,#47183,.T.); +#47183 = EDGE_CURVE('',#43796,#46961,#47184,.T.); +#47184 = LINE('',#47185,#47186); +#47185 = CARTESIAN_POINT('',(-1.675,1.,0.841614)); +#47186 = VECTOR('',#47187,1.); +#47187 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47188 = PLANE('',#47189); +#47189 = AXIS2_PLACEMENT_3D('',#47190,#47191,#47192); +#47190 = CARTESIAN_POINT('',(-1.675,1.245779075398,0.170500231015)); +#47191 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47192 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#47193 = ADVANCED_FACE('',(#47194),#47228,.T.); +#47194 = FACE_BOUND('',#47195,.T.); +#47195 = EDGE_LOOP('',(#47196,#47204,#47212,#47218,#47219,#47225,#47226, + #47227)); +#47196 = ORIENTED_EDGE('',*,*,#47197,.T.); +#47197 = EDGE_CURVE('',#43788,#47198,#47200,.T.); +#47198 = VERTEX_POINT('',#47199); +#47199 = CARTESIAN_POINT('',(-1.325,1.,8.E-02)); +#47200 = LINE('',#47201,#47202); +#47201 = CARTESIAN_POINT('',(-1.325,1.,0.841614)); +#47202 = VECTOR('',#47203,1.); +#47203 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47204 = ORIENTED_EDGE('',*,*,#47205,.T.); +#47205 = EDGE_CURVE('',#47198,#47206,#47208,.T.); +#47206 = VERTEX_POINT('',#47207); +#47207 = CARTESIAN_POINT('',(-1.4,1.,8.E-02)); +#47208 = LINE('',#47209,#47210); +#47209 = CARTESIAN_POINT('',(-17.,1.,8.E-02)); +#47210 = VECTOR('',#47211,1.); +#47211 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47212 = ORIENTED_EDGE('',*,*,#47213,.T.); +#47213 = EDGE_CURVE('',#47206,#42630,#47214,.T.); +#47214 = LINE('',#47215,#47216); +#47215 = CARTESIAN_POINT('',(-17.,1.,-15.52)); +#47216 = VECTOR('',#47217,1.); +#47217 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#47218 = ORIENTED_EDGE('',*,*,#42629,.F.); +#47219 = ORIENTED_EDGE('',*,*,#47220,.T.); +#47220 = EDGE_CURVE('',#42622,#46969,#47221,.T.); +#47221 = LINE('',#47222,#47223); +#47222 = CARTESIAN_POINT('',(-17.,1.,15.48)); +#47223 = VECTOR('',#47224,1.); +#47224 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#47225 = ORIENTED_EDGE('',*,*,#46968,.T.); +#47226 = ORIENTED_EDGE('',*,*,#47183,.F.); +#47227 = ORIENTED_EDGE('',*,*,#43795,.T.); +#47228 = PLANE('',#47229); +#47229 = AXIS2_PLACEMENT_3D('',#47230,#47231,#47232); +#47230 = CARTESIAN_POINT('',(2.325,1.,0.31)); +#47231 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#47232 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47233 = ADVANCED_FACE('',(#47234),#47310,.F.); +#47234 = FACE_BOUND('',#47235,.T.); +#47235 = EDGE_LOOP('',(#47236,#47237,#47238,#47246,#47255,#47263,#47271, + #47279,#47287,#47296,#47304)); +#47236 = ORIENTED_EDGE('',*,*,#47197,.F.); +#47237 = ORIENTED_EDGE('',*,*,#43787,.F.); +#47238 = ORIENTED_EDGE('',*,*,#47239,.F.); +#47239 = EDGE_CURVE('',#47240,#43780,#47242,.T.); +#47240 = VERTEX_POINT('',#47241); +#47241 = CARTESIAN_POINT('',(-1.325,1.35,0.16)); +#47242 = LINE('',#47243,#47244); +#47243 = CARTESIAN_POINT('',(-1.325,1.35,0.31)); +#47244 = VECTOR('',#47245,1.); +#47245 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47246 = ORIENTED_EDGE('',*,*,#47247,.T.); +#47247 = EDGE_CURVE('',#47240,#47248,#47250,.T.); +#47248 = VERTEX_POINT('',#47249); +#47249 = CARTESIAN_POINT('',(-1.325,1.3,0.11)); +#47250 = CIRCLE('',#47251,5.E-02); +#47251 = AXIS2_PLACEMENT_3D('',#47252,#47253,#47254); +#47252 = CARTESIAN_POINT('',(-1.325,1.35,0.11)); +#47253 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47254 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47255 = ORIENTED_EDGE('',*,*,#47256,.T.); +#47256 = EDGE_CURVE('',#47248,#47257,#47259,.T.); +#47257 = VERTEX_POINT('',#47258); +#47258 = CARTESIAN_POINT('',(-1.325,1.3,5.E-02)); +#47259 = LINE('',#47260,#47261); +#47260 = CARTESIAN_POINT('',(-1.325,1.3,0.11)); +#47261 = VECTOR('',#47262,1.); +#47262 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47263 = ORIENTED_EDGE('',*,*,#47264,.T.); +#47264 = EDGE_CURVE('',#47257,#47265,#47267,.T.); +#47265 = VERTEX_POINT('',#47266); +#47266 = CARTESIAN_POINT('',(-1.325,1.25,-1.110223024625E-16)); +#47267 = LINE('',#47268,#47269); +#47268 = CARTESIAN_POINT('',(-1.325,1.3,5.E-02)); +#47269 = VECTOR('',#47270,1.); +#47270 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#47271 = ORIENTED_EDGE('',*,*,#47272,.F.); +#47272 = EDGE_CURVE('',#47273,#47265,#47275,.T.); +#47273 = VERTEX_POINT('',#47274); +#47274 = CARTESIAN_POINT('',(-1.325,0.92,0.)); +#47275 = LINE('',#47276,#47277); +#47276 = CARTESIAN_POINT('',(-1.325,0.92,0.)); +#47277 = VECTOR('',#47278,1.); +#47278 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#47279 = ORIENTED_EDGE('',*,*,#47280,.T.); +#47280 = EDGE_CURVE('',#47273,#47281,#47283,.T.); +#47281 = VERTEX_POINT('',#47282); +#47282 = CARTESIAN_POINT('',(-1.325,0.92,3.619548911246E-02)); +#47283 = LINE('',#47284,#47285); +#47284 = CARTESIAN_POINT('',(-1.325,0.92,0.)); +#47285 = VECTOR('',#47286,1.); +#47286 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47287 = ORIENTED_EDGE('',*,*,#47288,.F.); +#47288 = EDGE_CURVE('',#47289,#47281,#47291,.T.); +#47289 = VERTEX_POINT('',#47290); +#47290 = CARTESIAN_POINT('',(-1.325,0.943186633611,6.541154699934E-02)); +#47291 = CIRCLE('',#47292,3.E-02); +#47292 = AXIS2_PLACEMENT_3D('',#47293,#47294,#47295); +#47293 = CARTESIAN_POINT('',(-1.325,0.95,3.619548911246E-02)); +#47294 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47295 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47296 = ORIENTED_EDGE('',*,*,#47297,.T.); +#47297 = EDGE_CURVE('',#47289,#47298,#47300,.T.); +#47298 = VERTEX_POINT('',#47299); +#47299 = CARTESIAN_POINT('',(-1.325,1.,7.866077735406E-02)); +#47300 = LINE('',#47301,#47302); +#47301 = CARTESIAN_POINT('',(-1.325,0.943186633611,6.541154699934E-02)); +#47302 = VECTOR('',#47303,1.); +#47303 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#47304 = ORIENTED_EDGE('',*,*,#47305,.F.); +#47305 = EDGE_CURVE('',#47198,#47298,#47306,.T.); +#47306 = LINE('',#47307,#47308); +#47307 = CARTESIAN_POINT('',(-1.325,1.,0.841614)); +#47308 = VECTOR('',#47309,1.); +#47309 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47310 = PLANE('',#47311); +#47311 = AXIS2_PLACEMENT_3D('',#47312,#47313,#47314); +#47312 = CARTESIAN_POINT('',(-1.325,1.245779075398,0.170500231015)); +#47313 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47314 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#47315 = ADVANCED_FACE('',(#47316),#47341,.F.); +#47316 = FACE_BOUND('',#47317,.T.); +#47317 = EDGE_LOOP('',(#47318,#47326,#47327,#47335)); +#47318 = ORIENTED_EDGE('',*,*,#47319,.F.); +#47319 = EDGE_CURVE('',#47198,#47320,#47322,.T.); +#47320 = VERTEX_POINT('',#47321); +#47321 = CARTESIAN_POINT('',(-1.175,1.,8.E-02)); +#47322 = LINE('',#47323,#47324); +#47323 = CARTESIAN_POINT('',(4.,1.,8.E-02)); +#47324 = VECTOR('',#47325,1.); +#47325 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47326 = ORIENTED_EDGE('',*,*,#47305,.T.); +#47327 = ORIENTED_EDGE('',*,*,#47328,.F.); +#47328 = EDGE_CURVE('',#47329,#47298,#47331,.T.); +#47329 = VERTEX_POINT('',#47330); +#47330 = CARTESIAN_POINT('',(-1.175,1.,7.866077735406E-02)); +#47331 = LINE('',#47332,#47333); +#47332 = CARTESIAN_POINT('',(4.,1.,7.866077735406E-02)); +#47333 = VECTOR('',#47334,1.); +#47334 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47335 = ORIENTED_EDGE('',*,*,#47336,.F.); +#47336 = EDGE_CURVE('',#47320,#47329,#47337,.T.); +#47337 = LINE('',#47338,#47339); +#47338 = CARTESIAN_POINT('',(-1.175,1.,0.841614)); +#47339 = VECTOR('',#47340,1.); +#47340 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47341 = PLANE('',#47342); +#47342 = AXIS2_PLACEMENT_3D('',#47343,#47344,#47345); +#47343 = CARTESIAN_POINT('',(-1.175,1.,7.866077735406E-02)); +#47344 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#47345 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47346 = ADVANCED_FACE('',(#47347),#47421,.T.); +#47347 = FACE_BOUND('',#47348,.T.); +#47348 = EDGE_LOOP('',(#47349,#47350,#47358,#47367,#47375,#47383,#47391, + #47399,#47408,#47414,#47415)); +#47349 = ORIENTED_EDGE('',*,*,#47336,.T.); +#47350 = ORIENTED_EDGE('',*,*,#47351,.F.); +#47351 = EDGE_CURVE('',#47352,#47329,#47354,.T.); +#47352 = VERTEX_POINT('',#47353); +#47353 = CARTESIAN_POINT('',(-1.175,0.943186633611,6.541154699934E-02)); +#47354 = LINE('',#47355,#47356); +#47355 = CARTESIAN_POINT('',(-1.175,0.694863,7.500931358166E-03)); +#47356 = VECTOR('',#47357,1.); +#47357 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#47358 = ORIENTED_EDGE('',*,*,#47359,.T.); +#47359 = EDGE_CURVE('',#47352,#47360,#47362,.T.); +#47360 = VERTEX_POINT('',#47361); +#47361 = CARTESIAN_POINT('',(-1.175,0.92,3.619548911246E-02)); +#47362 = CIRCLE('',#47363,3.E-02); +#47363 = AXIS2_PLACEMENT_3D('',#47364,#47365,#47366); +#47364 = CARTESIAN_POINT('',(-1.175,0.95,3.619548911246E-02)); +#47365 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47366 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47367 = ORIENTED_EDGE('',*,*,#47368,.F.); +#47368 = EDGE_CURVE('',#47369,#47360,#47371,.T.); +#47369 = VERTEX_POINT('',#47370); +#47370 = CARTESIAN_POINT('',(-1.175,0.92,-1.110223024625E-16)); +#47371 = LINE('',#47372,#47373); +#47372 = CARTESIAN_POINT('',(-1.175,0.92,0.841614)); +#47373 = VECTOR('',#47374,1.); +#47374 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47375 = ORIENTED_EDGE('',*,*,#47376,.F.); +#47376 = EDGE_CURVE('',#47377,#47369,#47379,.T.); +#47377 = VERTEX_POINT('',#47378); +#47378 = CARTESIAN_POINT('',(-1.175,1.25,-2.22044604925E-16)); +#47379 = LINE('',#47380,#47381); +#47380 = CARTESIAN_POINT('',(-1.175,0.694863,-1.110223024625E-16)); +#47381 = VECTOR('',#47382,1.); +#47382 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#47383 = ORIENTED_EDGE('',*,*,#47384,.F.); +#47384 = EDGE_CURVE('',#47385,#47377,#47387,.T.); +#47385 = VERTEX_POINT('',#47386); +#47386 = CARTESIAN_POINT('',(-1.175,1.3,5.E-02)); +#47387 = LINE('',#47388,#47389); +#47388 = CARTESIAN_POINT('',(-1.175,0.694863,-0.555137)); +#47389 = VECTOR('',#47390,1.); +#47390 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#47391 = ORIENTED_EDGE('',*,*,#47392,.F.); +#47392 = EDGE_CURVE('',#47393,#47385,#47395,.T.); +#47393 = VERTEX_POINT('',#47394); +#47394 = CARTESIAN_POINT('',(-1.175,1.3,0.11)); +#47395 = LINE('',#47396,#47397); +#47396 = CARTESIAN_POINT('',(-1.175,1.3,0.841614)); +#47397 = VECTOR('',#47398,1.); +#47398 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47399 = ORIENTED_EDGE('',*,*,#47400,.F.); +#47400 = EDGE_CURVE('',#47401,#47393,#47403,.T.); +#47401 = VERTEX_POINT('',#47402); +#47402 = CARTESIAN_POINT('',(-1.175,1.35,0.16)); +#47403 = CIRCLE('',#47404,5.E-02); +#47404 = AXIS2_PLACEMENT_3D('',#47405,#47406,#47407); +#47405 = CARTESIAN_POINT('',(-1.175,1.35,0.11)); +#47406 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47407 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47408 = ORIENTED_EDGE('',*,*,#47409,.F.); +#47409 = EDGE_CURVE('',#43772,#47401,#47410,.T.); +#47410 = LINE('',#47411,#47412); +#47411 = CARTESIAN_POINT('',(-1.175,1.35,0.841614)); +#47412 = VECTOR('',#47413,1.); +#47413 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47414 = ORIENTED_EDGE('',*,*,#43771,.F.); +#47415 = ORIENTED_EDGE('',*,*,#47416,.T.); +#47416 = EDGE_CURVE('',#43764,#47320,#47417,.T.); +#47417 = LINE('',#47418,#47419); +#47418 = CARTESIAN_POINT('',(-1.175,1.,0.841614)); +#47419 = VECTOR('',#47420,1.); +#47420 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47421 = PLANE('',#47422); +#47422 = AXIS2_PLACEMENT_3D('',#47423,#47424,#47425); +#47423 = CARTESIAN_POINT('',(-1.175,1.245779075398,0.170500231015)); +#47424 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47425 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#47426 = ADVANCED_FACE('',(#47427),#47445,.T.); +#47427 = FACE_BOUND('',#47428,.T.); +#47428 = EDGE_LOOP('',(#47429,#47437,#47443,#47444)); +#47429 = ORIENTED_EDGE('',*,*,#47430,.F.); +#47430 = EDGE_CURVE('',#47431,#47206,#47433,.T.); +#47431 = VERTEX_POINT('',#47432); +#47432 = CARTESIAN_POINT('',(-1.4,0.92,8.E-02)); +#47433 = LINE('',#47434,#47435); +#47434 = CARTESIAN_POINT('',(-1.4,0.694863,8.E-02)); +#47435 = VECTOR('',#47436,1.); +#47436 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#47437 = ORIENTED_EDGE('',*,*,#47438,.T.); +#47438 = EDGE_CURVE('',#47431,#42638,#47439,.T.); +#47439 = LINE('',#47440,#47441); +#47440 = CARTESIAN_POINT('',(-1.4511675,0.694863,2.88325E-02)); +#47441 = VECTOR('',#47442,1.); +#47442 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#47443 = ORIENTED_EDGE('',*,*,#42637,.F.); +#47444 = ORIENTED_EDGE('',*,*,#47213,.F.); +#47445 = PLANE('',#47446); +#47446 = AXIS2_PLACEMENT_3D('',#47447,#47448,#47449); +#47447 = CARTESIAN_POINT('',(-1.425,0.85,5.5E-02)); +#47448 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#47449 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#47450 = ADVANCED_FACE('',(#47451),#47478,.T.); +#47451 = FACE_BOUND('',#47452,.T.); +#47452 = EDGE_LOOP('',(#47453,#47461,#47462,#47463,#47464,#47472)); +#47453 = ORIENTED_EDGE('',*,*,#47454,.T.); +#47454 = EDGE_CURVE('',#47455,#47431,#47457,.T.); +#47455 = VERTEX_POINT('',#47456); +#47456 = CARTESIAN_POINT('',(-1.1,0.92,8.E-02)); +#47457 = LINE('',#47458,#47459); +#47458 = CARTESIAN_POINT('',(-17.,0.92,8.E-02)); +#47459 = VECTOR('',#47460,1.); +#47460 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47461 = ORIENTED_EDGE('',*,*,#47430,.T.); +#47462 = ORIENTED_EDGE('',*,*,#47205,.F.); +#47463 = ORIENTED_EDGE('',*,*,#47319,.T.); +#47464 = ORIENTED_EDGE('',*,*,#47465,.F.); +#47465 = EDGE_CURVE('',#47466,#47320,#47468,.T.); +#47466 = VERTEX_POINT('',#47467); +#47467 = CARTESIAN_POINT('',(-1.1,1.,8.E-02)); +#47468 = LINE('',#47469,#47470); +#47469 = CARTESIAN_POINT('',(-17.,1.,8.E-02)); +#47470 = VECTOR('',#47471,1.); +#47471 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47472 = ORIENTED_EDGE('',*,*,#47473,.T.); +#47473 = EDGE_CURVE('',#47466,#47455,#47474,.T.); +#47474 = LINE('',#47475,#47476); +#47475 = CARTESIAN_POINT('',(-1.1,0.694863,8.E-02)); +#47476 = VECTOR('',#47477,1.); +#47477 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#47478 = PLANE('',#47479); +#47479 = AXIS2_PLACEMENT_3D('',#47480,#47481,#47482); +#47480 = CARTESIAN_POINT('',(-1.3375,1.,8.E-02)); +#47481 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47482 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#47483 = ADVANCED_FACE('',(#47484),#47495,.T.); +#47484 = FACE_BOUND('',#47485,.T.); +#47485 = EDGE_LOOP('',(#47486,#47487,#47488,#47489)); +#47486 = ORIENTED_EDGE('',*,*,#42645,.T.); +#47487 = ORIENTED_EDGE('',*,*,#47438,.F.); +#47488 = ORIENTED_EDGE('',*,*,#47454,.F.); +#47489 = ORIENTED_EDGE('',*,*,#47490,.F.); +#47490 = EDGE_CURVE('',#42646,#47455,#47491,.T.); +#47491 = LINE('',#47492,#47493); +#47492 = CARTESIAN_POINT('',(-1.0488325,0.694863,2.88325E-02)); +#47493 = VECTOR('',#47494,1.); +#47494 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#47495 = PLANE('',#47496); +#47496 = AXIS2_PLACEMENT_3D('',#47497,#47498,#47499); +#47497 = CARTESIAN_POINT('',(-1.3375,0.92,8.E-02)); +#47498 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#47499 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#47500 = ADVANCED_FACE('',(#47501),#47512,.T.); +#47501 = FACE_BOUND('',#47502,.T.); +#47502 = EDGE_LOOP('',(#47503,#47504,#47510,#47511)); +#47503 = ORIENTED_EDGE('',*,*,#47473,.F.); +#47504 = ORIENTED_EDGE('',*,*,#47505,.F.); +#47505 = EDGE_CURVE('',#42654,#47466,#47506,.T.); +#47506 = LINE('',#47507,#47508); +#47507 = CARTESIAN_POINT('',(-16.5,1.,15.48)); +#47508 = VECTOR('',#47509,1.); +#47509 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#47510 = ORIENTED_EDGE('',*,*,#42653,.F.); +#47511 = ORIENTED_EDGE('',*,*,#47490,.T.); +#47512 = PLANE('',#47513); +#47513 = AXIS2_PLACEMENT_3D('',#47514,#47515,#47516); +#47514 = CARTESIAN_POINT('',(-1.075,0.85,5.5E-02)); +#47515 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#47516 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#47517 = ADVANCED_FACE('',(#47518),#47543,.T.); +#47518 = FACE_BOUND('',#47519,.T.); +#47519 = EDGE_LOOP('',(#47520,#47530,#47536,#47537)); +#47520 = ORIENTED_EDGE('',*,*,#47521,.F.); +#47521 = EDGE_CURVE('',#47522,#47524,#47526,.T.); +#47522 = VERTEX_POINT('',#47523); +#47523 = CARTESIAN_POINT('',(-0.9,0.92,8.E-02)); +#47524 = VERTEX_POINT('',#47525); +#47525 = CARTESIAN_POINT('',(-0.9,1.,8.E-02)); +#47526 = LINE('',#47527,#47528); +#47527 = CARTESIAN_POINT('',(-0.9,0.694863,8.E-02)); +#47528 = VECTOR('',#47529,1.); +#47529 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#47530 = ORIENTED_EDGE('',*,*,#47531,.T.); +#47531 = EDGE_CURVE('',#47522,#42670,#47532,.T.); +#47532 = LINE('',#47533,#47534); +#47533 = CARTESIAN_POINT('',(-0.9511675,0.694863,2.88325E-02)); +#47534 = VECTOR('',#47535,1.); +#47535 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#47536 = ORIENTED_EDGE('',*,*,#42669,.F.); +#47537 = ORIENTED_EDGE('',*,*,#47538,.F.); +#47538 = EDGE_CURVE('',#47524,#42662,#47539,.T.); +#47539 = LINE('',#47540,#47541); +#47540 = CARTESIAN_POINT('',(-16.5,1.,-15.52)); +#47541 = VECTOR('',#47542,1.); +#47542 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#47543 = PLANE('',#47544); +#47544 = AXIS2_PLACEMENT_3D('',#47545,#47546,#47547); +#47545 = CARTESIAN_POINT('',(-0.925,0.85,5.5E-02)); +#47546 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#47547 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#47548 = ADVANCED_FACE('',(#47549),#47567,.T.); +#47549 = FACE_BOUND('',#47550,.T.); +#47550 = EDGE_LOOP('',(#47551,#47552,#47553,#47561)); +#47551 = ORIENTED_EDGE('',*,*,#42677,.T.); +#47552 = ORIENTED_EDGE('',*,*,#47531,.F.); +#47553 = ORIENTED_EDGE('',*,*,#47554,.F.); +#47554 = EDGE_CURVE('',#47555,#47522,#47557,.T.); +#47555 = VERTEX_POINT('',#47556); +#47556 = CARTESIAN_POINT('',(-0.6,0.92,8.E-02)); +#47557 = LINE('',#47558,#47559); +#47558 = CARTESIAN_POINT('',(-16.5,0.92,8.E-02)); +#47559 = VECTOR('',#47560,1.); +#47560 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47561 = ORIENTED_EDGE('',*,*,#47562,.F.); +#47562 = EDGE_CURVE('',#42678,#47555,#47563,.T.); +#47563 = LINE('',#47564,#47565); +#47564 = CARTESIAN_POINT('',(-0.5488325,0.694863,2.88325E-02)); +#47565 = VECTOR('',#47566,1.); +#47566 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#47567 = PLANE('',#47568); +#47568 = AXIS2_PLACEMENT_3D('',#47569,#47570,#47571); +#47569 = CARTESIAN_POINT('',(-0.8375,0.92,8.E-02)); +#47570 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#47571 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#47572 = ADVANCED_FACE('',(#47573),#47607,.T.); +#47573 = FACE_BOUND('',#47574,.T.); +#47574 = EDGE_LOOP('',(#47575,#47576,#47577,#47585,#47593,#47601)); +#47575 = ORIENTED_EDGE('',*,*,#47554,.T.); +#47576 = ORIENTED_EDGE('',*,*,#47521,.T.); +#47577 = ORIENTED_EDGE('',*,*,#47578,.F.); +#47578 = EDGE_CURVE('',#47579,#47524,#47581,.T.); +#47579 = VERTEX_POINT('',#47580); +#47580 = CARTESIAN_POINT('',(-0.825,1.,8.E-02)); +#47581 = LINE('',#47582,#47583); +#47582 = CARTESIAN_POINT('',(-16.5,1.,8.E-02)); +#47583 = VECTOR('',#47584,1.); +#47584 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47585 = ORIENTED_EDGE('',*,*,#47586,.T.); +#47586 = EDGE_CURVE('',#47579,#47587,#47589,.T.); +#47587 = VERTEX_POINT('',#47588); +#47588 = CARTESIAN_POINT('',(-0.675,1.,8.E-02)); +#47589 = LINE('',#47590,#47591); +#47590 = CARTESIAN_POINT('',(4.5,1.,8.E-02)); +#47591 = VECTOR('',#47592,1.); +#47592 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47593 = ORIENTED_EDGE('',*,*,#47594,.F.); +#47594 = EDGE_CURVE('',#47595,#47587,#47597,.T.); +#47595 = VERTEX_POINT('',#47596); +#47596 = CARTESIAN_POINT('',(-0.6,1.,8.E-02)); +#47597 = LINE('',#47598,#47599); +#47598 = CARTESIAN_POINT('',(-16.5,1.,8.E-02)); +#47599 = VECTOR('',#47600,1.); +#47600 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47601 = ORIENTED_EDGE('',*,*,#47602,.T.); +#47602 = EDGE_CURVE('',#47595,#47555,#47603,.T.); +#47603 = LINE('',#47604,#47605); +#47604 = CARTESIAN_POINT('',(-0.6,0.694863,8.E-02)); +#47605 = VECTOR('',#47606,1.); +#47606 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#47607 = PLANE('',#47608); +#47608 = AXIS2_PLACEMENT_3D('',#47609,#47610,#47611); +#47609 = CARTESIAN_POINT('',(-0.8375,1.,8.E-02)); +#47610 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47611 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#47612 = ADVANCED_FACE('',(#47613),#47628,.T.); +#47613 = FACE_BOUND('',#47614,.T.); +#47614 = EDGE_LOOP('',(#47615,#47621,#47622,#47623,#47624,#47625,#47626, + #47627)); +#47615 = ORIENTED_EDGE('',*,*,#47616,.T.); +#47616 = EDGE_CURVE('',#43756,#47579,#47617,.T.); +#47617 = LINE('',#47618,#47619); +#47618 = CARTESIAN_POINT('',(-0.825,1.,0.841614)); +#47619 = VECTOR('',#47620,1.); +#47620 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47621 = ORIENTED_EDGE('',*,*,#47578,.T.); +#47622 = ORIENTED_EDGE('',*,*,#47538,.T.); +#47623 = ORIENTED_EDGE('',*,*,#42661,.F.); +#47624 = ORIENTED_EDGE('',*,*,#47505,.T.); +#47625 = ORIENTED_EDGE('',*,*,#47465,.T.); +#47626 = ORIENTED_EDGE('',*,*,#47416,.F.); +#47627 = ORIENTED_EDGE('',*,*,#43763,.T.); +#47628 = PLANE('',#47629); +#47629 = AXIS2_PLACEMENT_3D('',#47630,#47631,#47632); +#47630 = CARTESIAN_POINT('',(2.825,1.,0.31)); +#47631 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#47632 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47633 = ADVANCED_FACE('',(#47634),#47659,.F.); +#47634 = FACE_BOUND('',#47635,.T.); +#47635 = EDGE_LOOP('',(#47636,#47637,#47645,#47653)); +#47636 = ORIENTED_EDGE('',*,*,#47586,.F.); +#47637 = ORIENTED_EDGE('',*,*,#47638,.T.); +#47638 = EDGE_CURVE('',#47579,#47639,#47641,.T.); +#47639 = VERTEX_POINT('',#47640); +#47640 = CARTESIAN_POINT('',(-0.825,1.,7.866077735406E-02)); +#47641 = LINE('',#47642,#47643); +#47642 = CARTESIAN_POINT('',(-0.825,1.,0.841614)); +#47643 = VECTOR('',#47644,1.); +#47644 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47645 = ORIENTED_EDGE('',*,*,#47646,.F.); +#47646 = EDGE_CURVE('',#47647,#47639,#47649,.T.); +#47647 = VERTEX_POINT('',#47648); +#47648 = CARTESIAN_POINT('',(-0.675,1.,7.866077735406E-02)); +#47649 = LINE('',#47650,#47651); +#47650 = CARTESIAN_POINT('',(4.5,1.,7.866077735406E-02)); +#47651 = VECTOR('',#47652,1.); +#47652 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47653 = ORIENTED_EDGE('',*,*,#47654,.F.); +#47654 = EDGE_CURVE('',#47587,#47647,#47655,.T.); +#47655 = LINE('',#47656,#47657); +#47656 = CARTESIAN_POINT('',(-0.675,1.,0.841614)); +#47657 = VECTOR('',#47658,1.); +#47658 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47659 = PLANE('',#47660); +#47660 = AXIS2_PLACEMENT_3D('',#47661,#47662,#47663); +#47661 = CARTESIAN_POINT('',(-0.675,1.,7.866077735406E-02)); +#47662 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#47663 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47664 = ADVANCED_FACE('',(#47665),#47734,.F.); +#47665 = FACE_BOUND('',#47666,.T.); +#47666 = EDGE_LOOP('',(#47667,#47668,#47669,#47677,#47686,#47694,#47702, + #47710,#47718,#47727,#47733)); +#47667 = ORIENTED_EDGE('',*,*,#47616,.F.); +#47668 = ORIENTED_EDGE('',*,*,#43755,.F.); +#47669 = ORIENTED_EDGE('',*,*,#47670,.F.); +#47670 = EDGE_CURVE('',#47671,#43748,#47673,.T.); +#47671 = VERTEX_POINT('',#47672); +#47672 = CARTESIAN_POINT('',(-0.825,1.35,0.16)); +#47673 = LINE('',#47674,#47675); +#47674 = CARTESIAN_POINT('',(-0.825,1.35,0.31)); +#47675 = VECTOR('',#47676,1.); +#47676 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47677 = ORIENTED_EDGE('',*,*,#47678,.T.); +#47678 = EDGE_CURVE('',#47671,#47679,#47681,.T.); +#47679 = VERTEX_POINT('',#47680); +#47680 = CARTESIAN_POINT('',(-0.825,1.3,0.11)); +#47681 = CIRCLE('',#47682,5.E-02); +#47682 = AXIS2_PLACEMENT_3D('',#47683,#47684,#47685); +#47683 = CARTESIAN_POINT('',(-0.825,1.35,0.11)); +#47684 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47685 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47686 = ORIENTED_EDGE('',*,*,#47687,.T.); +#47687 = EDGE_CURVE('',#47679,#47688,#47690,.T.); +#47688 = VERTEX_POINT('',#47689); +#47689 = CARTESIAN_POINT('',(-0.825,1.3,5.E-02)); +#47690 = LINE('',#47691,#47692); +#47691 = CARTESIAN_POINT('',(-0.825,1.3,0.11)); +#47692 = VECTOR('',#47693,1.); +#47693 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47694 = ORIENTED_EDGE('',*,*,#47695,.T.); +#47695 = EDGE_CURVE('',#47688,#47696,#47698,.T.); +#47696 = VERTEX_POINT('',#47697); +#47697 = CARTESIAN_POINT('',(-0.825,1.25,-2.22044604925E-16)); +#47698 = LINE('',#47699,#47700); +#47699 = CARTESIAN_POINT('',(-0.825,1.3,5.E-02)); +#47700 = VECTOR('',#47701,1.); +#47701 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#47702 = ORIENTED_EDGE('',*,*,#47703,.F.); +#47703 = EDGE_CURVE('',#47704,#47696,#47706,.T.); +#47704 = VERTEX_POINT('',#47705); +#47705 = CARTESIAN_POINT('',(-0.825,0.92,-1.110223024625E-16)); +#47706 = LINE('',#47707,#47708); +#47707 = CARTESIAN_POINT('',(-0.825,0.92,-1.110223024625E-16)); +#47708 = VECTOR('',#47709,1.); +#47709 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#47710 = ORIENTED_EDGE('',*,*,#47711,.T.); +#47711 = EDGE_CURVE('',#47704,#47712,#47714,.T.); +#47712 = VERTEX_POINT('',#47713); +#47713 = CARTESIAN_POINT('',(-0.825,0.92,3.619548911246E-02)); +#47714 = LINE('',#47715,#47716); +#47715 = CARTESIAN_POINT('',(-0.825,0.92,-1.110223024625E-16)); +#47716 = VECTOR('',#47717,1.); +#47717 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47718 = ORIENTED_EDGE('',*,*,#47719,.F.); +#47719 = EDGE_CURVE('',#47720,#47712,#47722,.T.); +#47720 = VERTEX_POINT('',#47721); +#47721 = CARTESIAN_POINT('',(-0.825,0.943186633611,6.541154699934E-02)); +#47722 = CIRCLE('',#47723,3.E-02); +#47723 = AXIS2_PLACEMENT_3D('',#47724,#47725,#47726); +#47724 = CARTESIAN_POINT('',(-0.825,0.95,3.619548911246E-02)); +#47725 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47726 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47727 = ORIENTED_EDGE('',*,*,#47728,.T.); +#47728 = EDGE_CURVE('',#47720,#47639,#47729,.T.); +#47729 = LINE('',#47730,#47731); +#47730 = CARTESIAN_POINT('',(-0.825,0.943186633611,6.541154699934E-02)); +#47731 = VECTOR('',#47732,1.); +#47732 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#47733 = ORIENTED_EDGE('',*,*,#47638,.F.); +#47734 = PLANE('',#47735); +#47735 = AXIS2_PLACEMENT_3D('',#47736,#47737,#47738); +#47736 = CARTESIAN_POINT('',(-0.825,1.245779075398,0.170500231015)); +#47737 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47738 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#47739 = ADVANCED_FACE('',(#47740),#47814,.T.); +#47740 = FACE_BOUND('',#47741,.T.); +#47741 = EDGE_LOOP('',(#47742,#47743,#47751,#47760,#47768,#47776,#47784, + #47792,#47801,#47807,#47808)); +#47742 = ORIENTED_EDGE('',*,*,#47654,.T.); +#47743 = ORIENTED_EDGE('',*,*,#47744,.F.); +#47744 = EDGE_CURVE('',#47745,#47647,#47747,.T.); +#47745 = VERTEX_POINT('',#47746); +#47746 = CARTESIAN_POINT('',(-0.675,0.943186633611,6.541154699934E-02)); +#47747 = LINE('',#47748,#47749); +#47748 = CARTESIAN_POINT('',(-0.675,0.694863,7.500931358166E-03)); +#47749 = VECTOR('',#47750,1.); +#47750 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#47751 = ORIENTED_EDGE('',*,*,#47752,.T.); +#47752 = EDGE_CURVE('',#47745,#47753,#47755,.T.); +#47753 = VERTEX_POINT('',#47754); +#47754 = CARTESIAN_POINT('',(-0.675,0.92,3.619548911246E-02)); +#47755 = CIRCLE('',#47756,3.E-02); +#47756 = AXIS2_PLACEMENT_3D('',#47757,#47758,#47759); +#47757 = CARTESIAN_POINT('',(-0.675,0.95,3.619548911246E-02)); +#47758 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47759 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47760 = ORIENTED_EDGE('',*,*,#47761,.F.); +#47761 = EDGE_CURVE('',#47762,#47753,#47764,.T.); +#47762 = VERTEX_POINT('',#47763); +#47763 = CARTESIAN_POINT('',(-0.675,0.92,-2.22044604925E-16)); +#47764 = LINE('',#47765,#47766); +#47765 = CARTESIAN_POINT('',(-0.675,0.92,0.841614)); +#47766 = VECTOR('',#47767,1.); +#47767 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47768 = ORIENTED_EDGE('',*,*,#47769,.F.); +#47769 = EDGE_CURVE('',#47770,#47762,#47772,.T.); +#47770 = VERTEX_POINT('',#47771); +#47771 = CARTESIAN_POINT('',(-0.675,1.25,-3.330669073875E-16)); +#47772 = LINE('',#47773,#47774); +#47773 = CARTESIAN_POINT('',(-0.675,0.694863,-2.22044604925E-16)); +#47774 = VECTOR('',#47775,1.); +#47775 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#47776 = ORIENTED_EDGE('',*,*,#47777,.F.); +#47777 = EDGE_CURVE('',#47778,#47770,#47780,.T.); +#47778 = VERTEX_POINT('',#47779); +#47779 = CARTESIAN_POINT('',(-0.675,1.3,5.E-02)); +#47780 = LINE('',#47781,#47782); +#47781 = CARTESIAN_POINT('',(-0.675,0.694863,-0.555137)); +#47782 = VECTOR('',#47783,1.); +#47783 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#47784 = ORIENTED_EDGE('',*,*,#47785,.F.); +#47785 = EDGE_CURVE('',#47786,#47778,#47788,.T.); +#47786 = VERTEX_POINT('',#47787); +#47787 = CARTESIAN_POINT('',(-0.675,1.3,0.11)); +#47788 = LINE('',#47789,#47790); +#47789 = CARTESIAN_POINT('',(-0.675,1.3,0.841614)); +#47790 = VECTOR('',#47791,1.); +#47791 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47792 = ORIENTED_EDGE('',*,*,#47793,.F.); +#47793 = EDGE_CURVE('',#47794,#47786,#47796,.T.); +#47794 = VERTEX_POINT('',#47795); +#47795 = CARTESIAN_POINT('',(-0.675,1.35,0.16)); +#47796 = CIRCLE('',#47797,5.E-02); +#47797 = AXIS2_PLACEMENT_3D('',#47798,#47799,#47800); +#47798 = CARTESIAN_POINT('',(-0.675,1.35,0.11)); +#47799 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47800 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47801 = ORIENTED_EDGE('',*,*,#47802,.F.); +#47802 = EDGE_CURVE('',#43740,#47794,#47803,.T.); +#47803 = LINE('',#47804,#47805); +#47804 = CARTESIAN_POINT('',(-0.675,1.35,0.841614)); +#47805 = VECTOR('',#47806,1.); +#47806 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47807 = ORIENTED_EDGE('',*,*,#43739,.F.); +#47808 = ORIENTED_EDGE('',*,*,#47809,.T.); +#47809 = EDGE_CURVE('',#43732,#47587,#47810,.T.); +#47810 = LINE('',#47811,#47812); +#47811 = CARTESIAN_POINT('',(-0.675,1.,0.841614)); +#47812 = VECTOR('',#47813,1.); +#47813 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47814 = PLANE('',#47815); +#47815 = AXIS2_PLACEMENT_3D('',#47816,#47817,#47818); +#47816 = CARTESIAN_POINT('',(-0.675,1.245779075398,0.170500231015)); +#47817 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47818 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#47819 = ADVANCED_FACE('',(#47820),#47854,.T.); +#47820 = FACE_BOUND('',#47821,.T.); +#47821 = EDGE_LOOP('',(#47822,#47830,#47838,#47844,#47845,#47851,#47852, + #47853)); +#47822 = ORIENTED_EDGE('',*,*,#47823,.T.); +#47823 = EDGE_CURVE('',#43724,#47824,#47826,.T.); +#47824 = VERTEX_POINT('',#47825); +#47825 = CARTESIAN_POINT('',(-0.325,1.,8.E-02)); +#47826 = LINE('',#47827,#47828); +#47827 = CARTESIAN_POINT('',(-0.325,1.,0.841614)); +#47828 = VECTOR('',#47829,1.); +#47829 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47830 = ORIENTED_EDGE('',*,*,#47831,.T.); +#47831 = EDGE_CURVE('',#47824,#47832,#47834,.T.); +#47832 = VERTEX_POINT('',#47833); +#47833 = CARTESIAN_POINT('',(-0.4,1.,8.E-02)); +#47834 = LINE('',#47835,#47836); +#47835 = CARTESIAN_POINT('',(-16.,1.,8.E-02)); +#47836 = VECTOR('',#47837,1.); +#47837 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47838 = ORIENTED_EDGE('',*,*,#47839,.T.); +#47839 = EDGE_CURVE('',#47832,#42694,#47840,.T.); +#47840 = LINE('',#47841,#47842); +#47841 = CARTESIAN_POINT('',(-16.,1.,-15.52)); +#47842 = VECTOR('',#47843,1.); +#47843 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#47844 = ORIENTED_EDGE('',*,*,#42693,.F.); +#47845 = ORIENTED_EDGE('',*,*,#47846,.T.); +#47846 = EDGE_CURVE('',#42686,#47595,#47847,.T.); +#47847 = LINE('',#47848,#47849); +#47848 = CARTESIAN_POINT('',(-16.,1.,15.48)); +#47849 = VECTOR('',#47850,1.); +#47850 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#47851 = ORIENTED_EDGE('',*,*,#47594,.T.); +#47852 = ORIENTED_EDGE('',*,*,#47809,.F.); +#47853 = ORIENTED_EDGE('',*,*,#43731,.T.); +#47854 = PLANE('',#47855); +#47855 = AXIS2_PLACEMENT_3D('',#47856,#47857,#47858); +#47856 = CARTESIAN_POINT('',(3.325,1.,0.31)); +#47857 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#47858 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47859 = ADVANCED_FACE('',(#47860),#47936,.F.); +#47860 = FACE_BOUND('',#47861,.T.); +#47861 = EDGE_LOOP('',(#47862,#47863,#47864,#47872,#47881,#47889,#47897, + #47905,#47913,#47922,#47930)); +#47862 = ORIENTED_EDGE('',*,*,#47823,.F.); +#47863 = ORIENTED_EDGE('',*,*,#43723,.F.); +#47864 = ORIENTED_EDGE('',*,*,#47865,.F.); +#47865 = EDGE_CURVE('',#47866,#43716,#47868,.T.); +#47866 = VERTEX_POINT('',#47867); +#47867 = CARTESIAN_POINT('',(-0.325,1.35,0.16)); +#47868 = LINE('',#47869,#47870); +#47869 = CARTESIAN_POINT('',(-0.325,1.35,0.31)); +#47870 = VECTOR('',#47871,1.); +#47871 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47872 = ORIENTED_EDGE('',*,*,#47873,.T.); +#47873 = EDGE_CURVE('',#47866,#47874,#47876,.T.); +#47874 = VERTEX_POINT('',#47875); +#47875 = CARTESIAN_POINT('',(-0.325,1.3,0.11)); +#47876 = CIRCLE('',#47877,5.E-02); +#47877 = AXIS2_PLACEMENT_3D('',#47878,#47879,#47880); +#47878 = CARTESIAN_POINT('',(-0.325,1.35,0.11)); +#47879 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47880 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47881 = ORIENTED_EDGE('',*,*,#47882,.T.); +#47882 = EDGE_CURVE('',#47874,#47883,#47885,.T.); +#47883 = VERTEX_POINT('',#47884); +#47884 = CARTESIAN_POINT('',(-0.325,1.3,5.E-02)); +#47885 = LINE('',#47886,#47887); +#47886 = CARTESIAN_POINT('',(-0.325,1.3,0.11)); +#47887 = VECTOR('',#47888,1.); +#47888 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#47889 = ORIENTED_EDGE('',*,*,#47890,.T.); +#47890 = EDGE_CURVE('',#47883,#47891,#47893,.T.); +#47891 = VERTEX_POINT('',#47892); +#47892 = CARTESIAN_POINT('',(-0.325,1.25,-3.330669073875E-16)); +#47893 = LINE('',#47894,#47895); +#47894 = CARTESIAN_POINT('',(-0.325,1.3,5.E-02)); +#47895 = VECTOR('',#47896,1.); +#47896 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#47897 = ORIENTED_EDGE('',*,*,#47898,.F.); +#47898 = EDGE_CURVE('',#47899,#47891,#47901,.T.); +#47899 = VERTEX_POINT('',#47900); +#47900 = CARTESIAN_POINT('',(-0.325,0.92,-2.22044604925E-16)); +#47901 = LINE('',#47902,#47903); +#47902 = CARTESIAN_POINT('',(-0.325,0.92,-2.22044604925E-16)); +#47903 = VECTOR('',#47904,1.); +#47904 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#47905 = ORIENTED_EDGE('',*,*,#47906,.T.); +#47906 = EDGE_CURVE('',#47899,#47907,#47909,.T.); +#47907 = VERTEX_POINT('',#47908); +#47908 = CARTESIAN_POINT('',(-0.325,0.92,3.619548911246E-02)); +#47909 = LINE('',#47910,#47911); +#47910 = CARTESIAN_POINT('',(-0.325,0.92,-2.22044604925E-16)); +#47911 = VECTOR('',#47912,1.); +#47912 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#47913 = ORIENTED_EDGE('',*,*,#47914,.F.); +#47914 = EDGE_CURVE('',#47915,#47907,#47917,.T.); +#47915 = VERTEX_POINT('',#47916); +#47916 = CARTESIAN_POINT('',(-0.325,0.943186633611,6.541154699934E-02)); +#47917 = CIRCLE('',#47918,3.E-02); +#47918 = AXIS2_PLACEMENT_3D('',#47919,#47920,#47921); +#47919 = CARTESIAN_POINT('',(-0.325,0.95,3.619548911246E-02)); +#47920 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47921 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47922 = ORIENTED_EDGE('',*,*,#47923,.T.); +#47923 = EDGE_CURVE('',#47915,#47924,#47926,.T.); +#47924 = VERTEX_POINT('',#47925); +#47925 = CARTESIAN_POINT('',(-0.325,1.,7.866077735406E-02)); +#47926 = LINE('',#47927,#47928); +#47927 = CARTESIAN_POINT('',(-0.325,0.943186633611,6.541154699934E-02)); +#47928 = VECTOR('',#47929,1.); +#47929 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#47930 = ORIENTED_EDGE('',*,*,#47931,.F.); +#47931 = EDGE_CURVE('',#47824,#47924,#47932,.T.); +#47932 = LINE('',#47933,#47934); +#47933 = CARTESIAN_POINT('',(-0.325,1.,0.841614)); +#47934 = VECTOR('',#47935,1.); +#47935 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47936 = PLANE('',#47937); +#47937 = AXIS2_PLACEMENT_3D('',#47938,#47939,#47940); +#47938 = CARTESIAN_POINT('',(-0.325,1.245779075398,0.170500231015)); +#47939 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47940 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#47941 = ADVANCED_FACE('',(#47942),#47967,.F.); +#47942 = FACE_BOUND('',#47943,.T.); +#47943 = EDGE_LOOP('',(#47944,#47952,#47953,#47961)); +#47944 = ORIENTED_EDGE('',*,*,#47945,.F.); +#47945 = EDGE_CURVE('',#47824,#47946,#47948,.T.); +#47946 = VERTEX_POINT('',#47947); +#47947 = CARTESIAN_POINT('',(-0.175,1.,8.E-02)); +#47948 = LINE('',#47949,#47950); +#47949 = CARTESIAN_POINT('',(5.,1.,8.E-02)); +#47950 = VECTOR('',#47951,1.); +#47951 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47952 = ORIENTED_EDGE('',*,*,#47931,.T.); +#47953 = ORIENTED_EDGE('',*,*,#47954,.F.); +#47954 = EDGE_CURVE('',#47955,#47924,#47957,.T.); +#47955 = VERTEX_POINT('',#47956); +#47956 = CARTESIAN_POINT('',(-0.175,1.,7.866077735406E-02)); +#47957 = LINE('',#47958,#47959); +#47958 = CARTESIAN_POINT('',(5.,1.,7.866077735406E-02)); +#47959 = VECTOR('',#47960,1.); +#47960 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#47961 = ORIENTED_EDGE('',*,*,#47962,.F.); +#47962 = EDGE_CURVE('',#47946,#47955,#47963,.T.); +#47963 = LINE('',#47964,#47965); +#47964 = CARTESIAN_POINT('',(-0.175,1.,0.841614)); +#47965 = VECTOR('',#47966,1.); +#47966 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47967 = PLANE('',#47968); +#47968 = AXIS2_PLACEMENT_3D('',#47969,#47970,#47971); +#47969 = CARTESIAN_POINT('',(-0.175,1.,7.866077735406E-02)); +#47970 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#47971 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#47972 = ADVANCED_FACE('',(#47973),#48047,.T.); +#47973 = FACE_BOUND('',#47974,.T.); +#47974 = EDGE_LOOP('',(#47975,#47976,#47984,#47993,#48001,#48009,#48017, + #48025,#48034,#48040,#48041)); +#47975 = ORIENTED_EDGE('',*,*,#47962,.T.); +#47976 = ORIENTED_EDGE('',*,*,#47977,.F.); +#47977 = EDGE_CURVE('',#47978,#47955,#47980,.T.); +#47978 = VERTEX_POINT('',#47979); +#47979 = CARTESIAN_POINT('',(-0.175,0.943186633611,6.541154699934E-02)); +#47980 = LINE('',#47981,#47982); +#47981 = CARTESIAN_POINT('',(-0.175,0.694863,7.500931358166E-03)); +#47982 = VECTOR('',#47983,1.); +#47983 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#47984 = ORIENTED_EDGE('',*,*,#47985,.T.); +#47985 = EDGE_CURVE('',#47978,#47986,#47988,.T.); +#47986 = VERTEX_POINT('',#47987); +#47987 = CARTESIAN_POINT('',(-0.175,0.92,3.619548911246E-02)); +#47988 = CIRCLE('',#47989,3.E-02); +#47989 = AXIS2_PLACEMENT_3D('',#47990,#47991,#47992); +#47990 = CARTESIAN_POINT('',(-0.175,0.95,3.619548911246E-02)); +#47991 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#47992 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#47993 = ORIENTED_EDGE('',*,*,#47994,.F.); +#47994 = EDGE_CURVE('',#47995,#47986,#47997,.T.); +#47995 = VERTEX_POINT('',#47996); +#47996 = CARTESIAN_POINT('',(-0.175,0.92,-3.330669073875E-16)); +#47997 = LINE('',#47998,#47999); +#47998 = CARTESIAN_POINT('',(-0.175,0.92,0.841614)); +#47999 = VECTOR('',#48000,1.); +#48000 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#48001 = ORIENTED_EDGE('',*,*,#48002,.F.); +#48002 = EDGE_CURVE('',#48003,#47995,#48005,.T.); +#48003 = VERTEX_POINT('',#48004); +#48004 = CARTESIAN_POINT('',(-0.175,1.25,-4.440892098501E-16)); +#48005 = LINE('',#48006,#48007); +#48006 = CARTESIAN_POINT('',(-0.175,0.694863,-3.330669073875E-16)); +#48007 = VECTOR('',#48008,1.); +#48008 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#48009 = ORIENTED_EDGE('',*,*,#48010,.F.); +#48010 = EDGE_CURVE('',#48011,#48003,#48013,.T.); +#48011 = VERTEX_POINT('',#48012); +#48012 = CARTESIAN_POINT('',(-0.175,1.3,5.E-02)); +#48013 = LINE('',#48014,#48015); +#48014 = CARTESIAN_POINT('',(-0.175,0.694863,-0.555137)); +#48015 = VECTOR('',#48016,1.); +#48016 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#48017 = ORIENTED_EDGE('',*,*,#48018,.F.); +#48018 = EDGE_CURVE('',#48019,#48011,#48021,.T.); +#48019 = VERTEX_POINT('',#48020); +#48020 = CARTESIAN_POINT('',(-0.175,1.3,0.11)); +#48021 = LINE('',#48022,#48023); +#48022 = CARTESIAN_POINT('',(-0.175,1.3,0.841614)); +#48023 = VECTOR('',#48024,1.); +#48024 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48025 = ORIENTED_EDGE('',*,*,#48026,.F.); +#48026 = EDGE_CURVE('',#48027,#48019,#48029,.T.); +#48027 = VERTEX_POINT('',#48028); +#48028 = CARTESIAN_POINT('',(-0.175,1.35,0.16)); +#48029 = CIRCLE('',#48030,5.E-02); +#48030 = AXIS2_PLACEMENT_3D('',#48031,#48032,#48033); +#48031 = CARTESIAN_POINT('',(-0.175,1.35,0.11)); +#48032 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48033 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48034 = ORIENTED_EDGE('',*,*,#48035,.F.); +#48035 = EDGE_CURVE('',#43708,#48027,#48036,.T.); +#48036 = LINE('',#48037,#48038); +#48037 = CARTESIAN_POINT('',(-0.175,1.35,0.841614)); +#48038 = VECTOR('',#48039,1.); +#48039 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48040 = ORIENTED_EDGE('',*,*,#43707,.F.); +#48041 = ORIENTED_EDGE('',*,*,#48042,.T.); +#48042 = EDGE_CURVE('',#43700,#47946,#48043,.T.); +#48043 = LINE('',#48044,#48045); +#48044 = CARTESIAN_POINT('',(-0.175,1.,0.841614)); +#48045 = VECTOR('',#48046,1.); +#48046 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48047 = PLANE('',#48048); +#48048 = AXIS2_PLACEMENT_3D('',#48049,#48050,#48051); +#48049 = CARTESIAN_POINT('',(-0.175,1.245779075398,0.170500231015)); +#48050 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48051 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#48052 = ADVANCED_FACE('',(#48053),#48071,.T.); +#48053 = FACE_BOUND('',#48054,.T.); +#48054 = EDGE_LOOP('',(#48055,#48063,#48069,#48070)); +#48055 = ORIENTED_EDGE('',*,*,#48056,.F.); +#48056 = EDGE_CURVE('',#48057,#47832,#48059,.T.); +#48057 = VERTEX_POINT('',#48058); +#48058 = CARTESIAN_POINT('',(-0.4,0.92,8.E-02)); +#48059 = LINE('',#48060,#48061); +#48060 = CARTESIAN_POINT('',(-0.4,0.694863,8.E-02)); +#48061 = VECTOR('',#48062,1.); +#48062 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#48063 = ORIENTED_EDGE('',*,*,#48064,.T.); +#48064 = EDGE_CURVE('',#48057,#42702,#48065,.T.); +#48065 = LINE('',#48066,#48067); +#48066 = CARTESIAN_POINT('',(-0.4511675,0.694863,2.88325E-02)); +#48067 = VECTOR('',#48068,1.); +#48068 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#48069 = ORIENTED_EDGE('',*,*,#42701,.F.); +#48070 = ORIENTED_EDGE('',*,*,#47839,.F.); +#48071 = PLANE('',#48072); +#48072 = AXIS2_PLACEMENT_3D('',#48073,#48074,#48075); +#48073 = CARTESIAN_POINT('',(-0.425,0.85,5.5E-02)); +#48074 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#48075 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#48076 = ADVANCED_FACE('',(#48077),#48104,.T.); +#48077 = FACE_BOUND('',#48078,.T.); +#48078 = EDGE_LOOP('',(#48079,#48087,#48088,#48089,#48090,#48098)); +#48079 = ORIENTED_EDGE('',*,*,#48080,.T.); +#48080 = EDGE_CURVE('',#48081,#48057,#48083,.T.); +#48081 = VERTEX_POINT('',#48082); +#48082 = CARTESIAN_POINT('',(-1.E-01,0.92,8.E-02)); +#48083 = LINE('',#48084,#48085); +#48084 = CARTESIAN_POINT('',(-16.,0.92,8.E-02)); +#48085 = VECTOR('',#48086,1.); +#48086 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48087 = ORIENTED_EDGE('',*,*,#48056,.T.); +#48088 = ORIENTED_EDGE('',*,*,#47831,.F.); +#48089 = ORIENTED_EDGE('',*,*,#47945,.T.); +#48090 = ORIENTED_EDGE('',*,*,#48091,.F.); +#48091 = EDGE_CURVE('',#48092,#47946,#48094,.T.); +#48092 = VERTEX_POINT('',#48093); +#48093 = CARTESIAN_POINT('',(-1.E-01,1.,8.E-02)); +#48094 = LINE('',#48095,#48096); +#48095 = CARTESIAN_POINT('',(-16.,1.,8.E-02)); +#48096 = VECTOR('',#48097,1.); +#48097 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48098 = ORIENTED_EDGE('',*,*,#48099,.T.); +#48099 = EDGE_CURVE('',#48092,#48081,#48100,.T.); +#48100 = LINE('',#48101,#48102); +#48101 = CARTESIAN_POINT('',(-1.E-01,0.694863,8.E-02)); +#48102 = VECTOR('',#48103,1.); +#48103 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#48104 = PLANE('',#48105); +#48105 = AXIS2_PLACEMENT_3D('',#48106,#48107,#48108); +#48106 = CARTESIAN_POINT('',(-0.3375,1.,8.E-02)); +#48107 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48108 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#48109 = ADVANCED_FACE('',(#48110),#48121,.T.); +#48110 = FACE_BOUND('',#48111,.T.); +#48111 = EDGE_LOOP('',(#48112,#48113,#48114,#48115)); +#48112 = ORIENTED_EDGE('',*,*,#42709,.T.); +#48113 = ORIENTED_EDGE('',*,*,#48064,.F.); +#48114 = ORIENTED_EDGE('',*,*,#48080,.F.); +#48115 = ORIENTED_EDGE('',*,*,#48116,.F.); +#48116 = EDGE_CURVE('',#42710,#48081,#48117,.T.); +#48117 = LINE('',#48118,#48119); +#48118 = CARTESIAN_POINT('',(-4.88325E-02,0.694863,2.88325E-02)); +#48119 = VECTOR('',#48120,1.); +#48120 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#48121 = PLANE('',#48122); +#48122 = AXIS2_PLACEMENT_3D('',#48123,#48124,#48125); +#48123 = CARTESIAN_POINT('',(-0.3375,0.92,8.E-02)); +#48124 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#48125 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#48126 = ADVANCED_FACE('',(#48127),#48138,.T.); +#48127 = FACE_BOUND('',#48128,.T.); +#48128 = EDGE_LOOP('',(#48129,#48130,#48136,#48137)); +#48129 = ORIENTED_EDGE('',*,*,#48099,.F.); +#48130 = ORIENTED_EDGE('',*,*,#48131,.F.); +#48131 = EDGE_CURVE('',#42718,#48092,#48132,.T.); +#48132 = LINE('',#48133,#48134); +#48133 = CARTESIAN_POINT('',(-15.5,1.,15.48)); +#48134 = VECTOR('',#48135,1.); +#48135 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#48136 = ORIENTED_EDGE('',*,*,#42717,.F.); +#48137 = ORIENTED_EDGE('',*,*,#48116,.T.); +#48138 = PLANE('',#48139); +#48139 = AXIS2_PLACEMENT_3D('',#48140,#48141,#48142); +#48140 = CARTESIAN_POINT('',(-7.5E-02,0.85,5.5E-02)); +#48141 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#48142 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#48143 = ADVANCED_FACE('',(#48144),#48169,.T.); +#48144 = FACE_BOUND('',#48145,.T.); +#48145 = EDGE_LOOP('',(#48146,#48156,#48162,#48163)); +#48146 = ORIENTED_EDGE('',*,*,#48147,.F.); +#48147 = EDGE_CURVE('',#48148,#48150,#48152,.T.); +#48148 = VERTEX_POINT('',#48149); +#48149 = CARTESIAN_POINT('',(0.1,0.92,8.E-02)); +#48150 = VERTEX_POINT('',#48151); +#48151 = CARTESIAN_POINT('',(1.E-01,1.,8.E-02)); +#48152 = LINE('',#48153,#48154); +#48153 = CARTESIAN_POINT('',(0.1,0.694863,8.E-02)); +#48154 = VECTOR('',#48155,1.); +#48155 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#48156 = ORIENTED_EDGE('',*,*,#48157,.T.); +#48157 = EDGE_CURVE('',#48148,#42734,#48158,.T.); +#48158 = LINE('',#48159,#48160); +#48159 = CARTESIAN_POINT('',(4.88325E-02,0.694863,2.88325E-02)); +#48160 = VECTOR('',#48161,1.); +#48161 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#48162 = ORIENTED_EDGE('',*,*,#42733,.F.); +#48163 = ORIENTED_EDGE('',*,*,#48164,.F.); +#48164 = EDGE_CURVE('',#48150,#42726,#48165,.T.); +#48165 = LINE('',#48166,#48167); +#48166 = CARTESIAN_POINT('',(-15.5,1.,-15.52)); +#48167 = VECTOR('',#48168,1.); +#48168 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#48169 = PLANE('',#48170); +#48170 = AXIS2_PLACEMENT_3D('',#48171,#48172,#48173); +#48171 = CARTESIAN_POINT('',(7.5E-02,0.85,5.5E-02)); +#48172 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#48173 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#48174 = ADVANCED_FACE('',(#48175),#48193,.T.); +#48175 = FACE_BOUND('',#48176,.T.); +#48176 = EDGE_LOOP('',(#48177,#48178,#48179,#48187)); +#48177 = ORIENTED_EDGE('',*,*,#42741,.T.); +#48178 = ORIENTED_EDGE('',*,*,#48157,.F.); +#48179 = ORIENTED_EDGE('',*,*,#48180,.F.); +#48180 = EDGE_CURVE('',#48181,#48148,#48183,.T.); +#48181 = VERTEX_POINT('',#48182); +#48182 = CARTESIAN_POINT('',(0.4,0.92,8.E-02)); +#48183 = LINE('',#48184,#48185); +#48184 = CARTESIAN_POINT('',(-15.5,0.92,8.E-02)); +#48185 = VECTOR('',#48186,1.); +#48186 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48187 = ORIENTED_EDGE('',*,*,#48188,.F.); +#48188 = EDGE_CURVE('',#42742,#48181,#48189,.T.); +#48189 = LINE('',#48190,#48191); +#48190 = CARTESIAN_POINT('',(0.4511675,0.694863,2.88325E-02)); +#48191 = VECTOR('',#48192,1.); +#48192 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#48193 = PLANE('',#48194); +#48194 = AXIS2_PLACEMENT_3D('',#48195,#48196,#48197); +#48195 = CARTESIAN_POINT('',(0.1625,0.92,8.E-02)); +#48196 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#48197 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#48198 = ADVANCED_FACE('',(#48199),#48233,.T.); +#48199 = FACE_BOUND('',#48200,.T.); +#48200 = EDGE_LOOP('',(#48201,#48202,#48203,#48211,#48219,#48227)); +#48201 = ORIENTED_EDGE('',*,*,#48180,.T.); +#48202 = ORIENTED_EDGE('',*,*,#48147,.T.); +#48203 = ORIENTED_EDGE('',*,*,#48204,.F.); +#48204 = EDGE_CURVE('',#48205,#48150,#48207,.T.); +#48205 = VERTEX_POINT('',#48206); +#48206 = CARTESIAN_POINT('',(0.175,1.,8.E-02)); +#48207 = LINE('',#48208,#48209); +#48208 = CARTESIAN_POINT('',(-15.5,1.,8.E-02)); +#48209 = VECTOR('',#48210,1.); +#48210 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48211 = ORIENTED_EDGE('',*,*,#48212,.T.); +#48212 = EDGE_CURVE('',#48205,#48213,#48215,.T.); +#48213 = VERTEX_POINT('',#48214); +#48214 = CARTESIAN_POINT('',(0.325,1.,8.E-02)); +#48215 = LINE('',#48216,#48217); +#48216 = CARTESIAN_POINT('',(5.5,1.,8.E-02)); +#48217 = VECTOR('',#48218,1.); +#48218 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48219 = ORIENTED_EDGE('',*,*,#48220,.F.); +#48220 = EDGE_CURVE('',#48221,#48213,#48223,.T.); +#48221 = VERTEX_POINT('',#48222); +#48222 = CARTESIAN_POINT('',(0.4,1.,8.E-02)); +#48223 = LINE('',#48224,#48225); +#48224 = CARTESIAN_POINT('',(-15.5,1.,8.E-02)); +#48225 = VECTOR('',#48226,1.); +#48226 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48227 = ORIENTED_EDGE('',*,*,#48228,.T.); +#48228 = EDGE_CURVE('',#48221,#48181,#48229,.T.); +#48229 = LINE('',#48230,#48231); +#48230 = CARTESIAN_POINT('',(0.4,0.694863,8.E-02)); +#48231 = VECTOR('',#48232,1.); +#48232 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#48233 = PLANE('',#48234); +#48234 = AXIS2_PLACEMENT_3D('',#48235,#48236,#48237); +#48235 = CARTESIAN_POINT('',(0.1625,1.,8.E-02)); +#48236 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48237 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#48238 = ADVANCED_FACE('',(#48239),#48254,.T.); +#48239 = FACE_BOUND('',#48240,.T.); +#48240 = EDGE_LOOP('',(#48241,#48247,#48248,#48249,#48250,#48251,#48252, + #48253)); +#48241 = ORIENTED_EDGE('',*,*,#48242,.T.); +#48242 = EDGE_CURVE('',#43692,#48205,#48243,.T.); +#48243 = LINE('',#48244,#48245); +#48244 = CARTESIAN_POINT('',(0.175,1.,0.841614)); +#48245 = VECTOR('',#48246,1.); +#48246 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48247 = ORIENTED_EDGE('',*,*,#48204,.T.); +#48248 = ORIENTED_EDGE('',*,*,#48164,.T.); +#48249 = ORIENTED_EDGE('',*,*,#42725,.F.); +#48250 = ORIENTED_EDGE('',*,*,#48131,.T.); +#48251 = ORIENTED_EDGE('',*,*,#48091,.T.); +#48252 = ORIENTED_EDGE('',*,*,#48042,.F.); +#48253 = ORIENTED_EDGE('',*,*,#43699,.T.); +#48254 = PLANE('',#48255); +#48255 = AXIS2_PLACEMENT_3D('',#48256,#48257,#48258); +#48256 = CARTESIAN_POINT('',(3.825,1.,0.31)); +#48257 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#48258 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48259 = ADVANCED_FACE('',(#48260),#48285,.F.); +#48260 = FACE_BOUND('',#48261,.T.); +#48261 = EDGE_LOOP('',(#48262,#48263,#48271,#48279)); +#48262 = ORIENTED_EDGE('',*,*,#48212,.F.); +#48263 = ORIENTED_EDGE('',*,*,#48264,.T.); +#48264 = EDGE_CURVE('',#48205,#48265,#48267,.T.); +#48265 = VERTEX_POINT('',#48266); +#48266 = CARTESIAN_POINT('',(0.175,1.,7.866077735406E-02)); +#48267 = LINE('',#48268,#48269); +#48268 = CARTESIAN_POINT('',(0.175,1.,0.841614)); +#48269 = VECTOR('',#48270,1.); +#48270 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48271 = ORIENTED_EDGE('',*,*,#48272,.F.); +#48272 = EDGE_CURVE('',#48273,#48265,#48275,.T.); +#48273 = VERTEX_POINT('',#48274); +#48274 = CARTESIAN_POINT('',(0.325,1.,7.866077735406E-02)); +#48275 = LINE('',#48276,#48277); +#48276 = CARTESIAN_POINT('',(5.5,1.,7.866077735406E-02)); +#48277 = VECTOR('',#48278,1.); +#48278 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48279 = ORIENTED_EDGE('',*,*,#48280,.F.); +#48280 = EDGE_CURVE('',#48213,#48273,#48281,.T.); +#48281 = LINE('',#48282,#48283); +#48282 = CARTESIAN_POINT('',(0.325,1.,0.841614)); +#48283 = VECTOR('',#48284,1.); +#48284 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48285 = PLANE('',#48286); +#48286 = AXIS2_PLACEMENT_3D('',#48287,#48288,#48289); +#48287 = CARTESIAN_POINT('',(0.325,1.,7.866077735406E-02)); +#48288 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#48289 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48290 = ADVANCED_FACE('',(#48291),#48360,.F.); +#48291 = FACE_BOUND('',#48292,.T.); +#48292 = EDGE_LOOP('',(#48293,#48294,#48295,#48303,#48312,#48320,#48328, + #48336,#48344,#48353,#48359)); +#48293 = ORIENTED_EDGE('',*,*,#48242,.F.); +#48294 = ORIENTED_EDGE('',*,*,#43691,.F.); +#48295 = ORIENTED_EDGE('',*,*,#48296,.F.); +#48296 = EDGE_CURVE('',#48297,#43684,#48299,.T.); +#48297 = VERTEX_POINT('',#48298); +#48298 = CARTESIAN_POINT('',(0.175,1.35,0.16)); +#48299 = LINE('',#48300,#48301); +#48300 = CARTESIAN_POINT('',(0.175,1.35,0.31)); +#48301 = VECTOR('',#48302,1.); +#48302 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#48303 = ORIENTED_EDGE('',*,*,#48304,.T.); +#48304 = EDGE_CURVE('',#48297,#48305,#48307,.T.); +#48305 = VERTEX_POINT('',#48306); +#48306 = CARTESIAN_POINT('',(0.175,1.3,0.11)); +#48307 = CIRCLE('',#48308,5.E-02); +#48308 = AXIS2_PLACEMENT_3D('',#48309,#48310,#48311); +#48309 = CARTESIAN_POINT('',(0.175,1.35,0.11)); +#48310 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48311 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48312 = ORIENTED_EDGE('',*,*,#48313,.T.); +#48313 = EDGE_CURVE('',#48305,#48314,#48316,.T.); +#48314 = VERTEX_POINT('',#48315); +#48315 = CARTESIAN_POINT('',(0.175,1.3,5.E-02)); +#48316 = LINE('',#48317,#48318); +#48317 = CARTESIAN_POINT('',(0.175,1.3,0.11)); +#48318 = VECTOR('',#48319,1.); +#48319 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48320 = ORIENTED_EDGE('',*,*,#48321,.T.); +#48321 = EDGE_CURVE('',#48314,#48322,#48324,.T.); +#48322 = VERTEX_POINT('',#48323); +#48323 = CARTESIAN_POINT('',(0.175,1.25,-4.440892098501E-16)); +#48324 = LINE('',#48325,#48326); +#48325 = CARTESIAN_POINT('',(0.175,1.3,5.E-02)); +#48326 = VECTOR('',#48327,1.); +#48327 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#48328 = ORIENTED_EDGE('',*,*,#48329,.F.); +#48329 = EDGE_CURVE('',#48330,#48322,#48332,.T.); +#48330 = VERTEX_POINT('',#48331); +#48331 = CARTESIAN_POINT('',(0.175,0.92,-3.330669073875E-16)); +#48332 = LINE('',#48333,#48334); +#48333 = CARTESIAN_POINT('',(0.175,0.92,-3.330669073875E-16)); +#48334 = VECTOR('',#48335,1.); +#48335 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#48336 = ORIENTED_EDGE('',*,*,#48337,.T.); +#48337 = EDGE_CURVE('',#48330,#48338,#48340,.T.); +#48338 = VERTEX_POINT('',#48339); +#48339 = CARTESIAN_POINT('',(0.175,0.92,3.619548911246E-02)); +#48340 = LINE('',#48341,#48342); +#48341 = CARTESIAN_POINT('',(0.175,0.92,-3.330669073875E-16)); +#48342 = VECTOR('',#48343,1.); +#48343 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#48344 = ORIENTED_EDGE('',*,*,#48345,.F.); +#48345 = EDGE_CURVE('',#48346,#48338,#48348,.T.); +#48346 = VERTEX_POINT('',#48347); +#48347 = CARTESIAN_POINT('',(0.175,0.943186633611,6.541154699934E-02)); +#48348 = CIRCLE('',#48349,3.E-02); +#48349 = AXIS2_PLACEMENT_3D('',#48350,#48351,#48352); +#48350 = CARTESIAN_POINT('',(0.175,0.95,3.619548911246E-02)); +#48351 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48352 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48353 = ORIENTED_EDGE('',*,*,#48354,.T.); +#48354 = EDGE_CURVE('',#48346,#48265,#48355,.T.); +#48355 = LINE('',#48356,#48357); +#48356 = CARTESIAN_POINT('',(0.175,0.943186633611,6.541154699934E-02)); +#48357 = VECTOR('',#48358,1.); +#48358 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#48359 = ORIENTED_EDGE('',*,*,#48264,.F.); +#48360 = PLANE('',#48361); +#48361 = AXIS2_PLACEMENT_3D('',#48362,#48363,#48364); +#48362 = CARTESIAN_POINT('',(0.175,1.245779075398,0.170500231015)); +#48363 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48364 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#48365 = ADVANCED_FACE('',(#48366),#48440,.T.); +#48366 = FACE_BOUND('',#48367,.T.); +#48367 = EDGE_LOOP('',(#48368,#48369,#48377,#48386,#48394,#48402,#48410, + #48418,#48427,#48433,#48434)); +#48368 = ORIENTED_EDGE('',*,*,#48280,.T.); +#48369 = ORIENTED_EDGE('',*,*,#48370,.F.); +#48370 = EDGE_CURVE('',#48371,#48273,#48373,.T.); +#48371 = VERTEX_POINT('',#48372); +#48372 = CARTESIAN_POINT('',(0.325,0.943186633611,6.541154699934E-02)); +#48373 = LINE('',#48374,#48375); +#48374 = CARTESIAN_POINT('',(0.325,0.694863,7.500931358166E-03)); +#48375 = VECTOR('',#48376,1.); +#48376 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#48377 = ORIENTED_EDGE('',*,*,#48378,.T.); +#48378 = EDGE_CURVE('',#48371,#48379,#48381,.T.); +#48379 = VERTEX_POINT('',#48380); +#48380 = CARTESIAN_POINT('',(0.325,0.92,3.619548911246E-02)); +#48381 = CIRCLE('',#48382,3.E-02); +#48382 = AXIS2_PLACEMENT_3D('',#48383,#48384,#48385); +#48383 = CARTESIAN_POINT('',(0.325,0.95,3.619548911246E-02)); +#48384 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48385 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48386 = ORIENTED_EDGE('',*,*,#48387,.F.); +#48387 = EDGE_CURVE('',#48388,#48379,#48390,.T.); +#48388 = VERTEX_POINT('',#48389); +#48389 = CARTESIAN_POINT('',(0.325,0.92,-4.440892098501E-16)); +#48390 = LINE('',#48391,#48392); +#48391 = CARTESIAN_POINT('',(0.325,0.92,0.841614)); +#48392 = VECTOR('',#48393,1.); +#48393 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#48394 = ORIENTED_EDGE('',*,*,#48395,.F.); +#48395 = EDGE_CURVE('',#48396,#48388,#48398,.T.); +#48396 = VERTEX_POINT('',#48397); +#48397 = CARTESIAN_POINT('',(0.325,1.25,-5.551115123126E-16)); +#48398 = LINE('',#48399,#48400); +#48399 = CARTESIAN_POINT('',(0.325,0.694863,-4.440892098501E-16)); +#48400 = VECTOR('',#48401,1.); +#48401 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#48402 = ORIENTED_EDGE('',*,*,#48403,.F.); +#48403 = EDGE_CURVE('',#48404,#48396,#48406,.T.); +#48404 = VERTEX_POINT('',#48405); +#48405 = CARTESIAN_POINT('',(0.325,1.3,5.E-02)); +#48406 = LINE('',#48407,#48408); +#48407 = CARTESIAN_POINT('',(0.325,0.694863,-0.555137)); +#48408 = VECTOR('',#48409,1.); +#48409 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#48410 = ORIENTED_EDGE('',*,*,#48411,.F.); +#48411 = EDGE_CURVE('',#48412,#48404,#48414,.T.); +#48412 = VERTEX_POINT('',#48413); +#48413 = CARTESIAN_POINT('',(0.325,1.3,0.11)); +#48414 = LINE('',#48415,#48416); +#48415 = CARTESIAN_POINT('',(0.325,1.3,0.841614)); +#48416 = VECTOR('',#48417,1.); +#48417 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48418 = ORIENTED_EDGE('',*,*,#48419,.F.); +#48419 = EDGE_CURVE('',#48420,#48412,#48422,.T.); +#48420 = VERTEX_POINT('',#48421); +#48421 = CARTESIAN_POINT('',(0.325,1.35,0.16)); +#48422 = CIRCLE('',#48423,5.E-02); +#48423 = AXIS2_PLACEMENT_3D('',#48424,#48425,#48426); +#48424 = CARTESIAN_POINT('',(0.325,1.35,0.11)); +#48425 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48426 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48427 = ORIENTED_EDGE('',*,*,#48428,.F.); +#48428 = EDGE_CURVE('',#43676,#48420,#48429,.T.); +#48429 = LINE('',#48430,#48431); +#48430 = CARTESIAN_POINT('',(0.325,1.35,0.841614)); +#48431 = VECTOR('',#48432,1.); +#48432 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48433 = ORIENTED_EDGE('',*,*,#43675,.F.); +#48434 = ORIENTED_EDGE('',*,*,#48435,.T.); +#48435 = EDGE_CURVE('',#43668,#48213,#48436,.T.); +#48436 = LINE('',#48437,#48438); +#48437 = CARTESIAN_POINT('',(0.325,1.,0.841614)); +#48438 = VECTOR('',#48439,1.); +#48439 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48440 = PLANE('',#48441); +#48441 = AXIS2_PLACEMENT_3D('',#48442,#48443,#48444); +#48442 = CARTESIAN_POINT('',(0.325,1.245779075398,0.170500231015)); +#48443 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48444 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#48445 = ADVANCED_FACE('',(#48446),#48480,.T.); +#48446 = FACE_BOUND('',#48447,.T.); +#48447 = EDGE_LOOP('',(#48448,#48456,#48464,#48470,#48471,#48477,#48478, + #48479)); +#48448 = ORIENTED_EDGE('',*,*,#48449,.T.); +#48449 = EDGE_CURVE('',#43660,#48450,#48452,.T.); +#48450 = VERTEX_POINT('',#48451); +#48451 = CARTESIAN_POINT('',(0.675,1.,8.E-02)); +#48452 = LINE('',#48453,#48454); +#48453 = CARTESIAN_POINT('',(0.675,1.,0.841614)); +#48454 = VECTOR('',#48455,1.); +#48455 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48456 = ORIENTED_EDGE('',*,*,#48457,.T.); +#48457 = EDGE_CURVE('',#48450,#48458,#48460,.T.); +#48458 = VERTEX_POINT('',#48459); +#48459 = CARTESIAN_POINT('',(0.6,1.,8.E-02)); +#48460 = LINE('',#48461,#48462); +#48461 = CARTESIAN_POINT('',(-15.,1.,8.E-02)); +#48462 = VECTOR('',#48463,1.); +#48463 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48464 = ORIENTED_EDGE('',*,*,#48465,.T.); +#48465 = EDGE_CURVE('',#48458,#42758,#48466,.T.); +#48466 = LINE('',#48467,#48468); +#48467 = CARTESIAN_POINT('',(-15.,1.,-15.52)); +#48468 = VECTOR('',#48469,1.); +#48469 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#48470 = ORIENTED_EDGE('',*,*,#42757,.F.); +#48471 = ORIENTED_EDGE('',*,*,#48472,.T.); +#48472 = EDGE_CURVE('',#42750,#48221,#48473,.T.); +#48473 = LINE('',#48474,#48475); +#48474 = CARTESIAN_POINT('',(-15.,1.,15.48)); +#48475 = VECTOR('',#48476,1.); +#48476 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#48477 = ORIENTED_EDGE('',*,*,#48220,.T.); +#48478 = ORIENTED_EDGE('',*,*,#48435,.F.); +#48479 = ORIENTED_EDGE('',*,*,#43667,.T.); +#48480 = PLANE('',#48481); +#48481 = AXIS2_PLACEMENT_3D('',#48482,#48483,#48484); +#48482 = CARTESIAN_POINT('',(4.325,1.,0.31)); +#48483 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#48484 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48485 = ADVANCED_FACE('',(#48486),#48562,.F.); +#48486 = FACE_BOUND('',#48487,.T.); +#48487 = EDGE_LOOP('',(#48488,#48489,#48490,#48498,#48507,#48515,#48523, + #48531,#48539,#48548,#48556)); +#48488 = ORIENTED_EDGE('',*,*,#48449,.F.); +#48489 = ORIENTED_EDGE('',*,*,#43659,.F.); +#48490 = ORIENTED_EDGE('',*,*,#48491,.F.); +#48491 = EDGE_CURVE('',#48492,#43652,#48494,.T.); +#48492 = VERTEX_POINT('',#48493); +#48493 = CARTESIAN_POINT('',(0.675,1.35,0.16)); +#48494 = LINE('',#48495,#48496); +#48495 = CARTESIAN_POINT('',(0.675,1.35,0.31)); +#48496 = VECTOR('',#48497,1.); +#48497 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#48498 = ORIENTED_EDGE('',*,*,#48499,.T.); +#48499 = EDGE_CURVE('',#48492,#48500,#48502,.T.); +#48500 = VERTEX_POINT('',#48501); +#48501 = CARTESIAN_POINT('',(0.675,1.3,0.11)); +#48502 = CIRCLE('',#48503,5.E-02); +#48503 = AXIS2_PLACEMENT_3D('',#48504,#48505,#48506); +#48504 = CARTESIAN_POINT('',(0.675,1.35,0.11)); +#48505 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48506 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48507 = ORIENTED_EDGE('',*,*,#48508,.T.); +#48508 = EDGE_CURVE('',#48500,#48509,#48511,.T.); +#48509 = VERTEX_POINT('',#48510); +#48510 = CARTESIAN_POINT('',(0.675,1.3,5.E-02)); +#48511 = LINE('',#48512,#48513); +#48512 = CARTESIAN_POINT('',(0.675,1.3,0.11)); +#48513 = VECTOR('',#48514,1.); +#48514 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48515 = ORIENTED_EDGE('',*,*,#48516,.T.); +#48516 = EDGE_CURVE('',#48509,#48517,#48519,.T.); +#48517 = VERTEX_POINT('',#48518); +#48518 = CARTESIAN_POINT('',(0.675,1.25,-5.551115123126E-16)); +#48519 = LINE('',#48520,#48521); +#48520 = CARTESIAN_POINT('',(0.675,1.3,5.E-02)); +#48521 = VECTOR('',#48522,1.); +#48522 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#48523 = ORIENTED_EDGE('',*,*,#48524,.F.); +#48524 = EDGE_CURVE('',#48525,#48517,#48527,.T.); +#48525 = VERTEX_POINT('',#48526); +#48526 = CARTESIAN_POINT('',(0.675,0.92,-4.440892098501E-16)); +#48527 = LINE('',#48528,#48529); +#48528 = CARTESIAN_POINT('',(0.675,0.92,-4.440892098501E-16)); +#48529 = VECTOR('',#48530,1.); +#48530 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#48531 = ORIENTED_EDGE('',*,*,#48532,.T.); +#48532 = EDGE_CURVE('',#48525,#48533,#48535,.T.); +#48533 = VERTEX_POINT('',#48534); +#48534 = CARTESIAN_POINT('',(0.675,0.92,3.619548911246E-02)); +#48535 = LINE('',#48536,#48537); +#48536 = CARTESIAN_POINT('',(0.675,0.92,-4.440892098501E-16)); +#48537 = VECTOR('',#48538,1.); +#48538 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#48539 = ORIENTED_EDGE('',*,*,#48540,.F.); +#48540 = EDGE_CURVE('',#48541,#48533,#48543,.T.); +#48541 = VERTEX_POINT('',#48542); +#48542 = CARTESIAN_POINT('',(0.675,0.943186633611,6.541154699934E-02)); +#48543 = CIRCLE('',#48544,3.E-02); +#48544 = AXIS2_PLACEMENT_3D('',#48545,#48546,#48547); +#48545 = CARTESIAN_POINT('',(0.675,0.95,3.619548911246E-02)); +#48546 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48547 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48548 = ORIENTED_EDGE('',*,*,#48549,.T.); +#48549 = EDGE_CURVE('',#48541,#48550,#48552,.T.); +#48550 = VERTEX_POINT('',#48551); +#48551 = CARTESIAN_POINT('',(0.675,1.,7.866077735406E-02)); +#48552 = LINE('',#48553,#48554); +#48553 = CARTESIAN_POINT('',(0.675,0.943186633611,6.541154699934E-02)); +#48554 = VECTOR('',#48555,1.); +#48555 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#48556 = ORIENTED_EDGE('',*,*,#48557,.F.); +#48557 = EDGE_CURVE('',#48450,#48550,#48558,.T.); +#48558 = LINE('',#48559,#48560); +#48559 = CARTESIAN_POINT('',(0.675,1.,0.841614)); +#48560 = VECTOR('',#48561,1.); +#48561 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48562 = PLANE('',#48563); +#48563 = AXIS2_PLACEMENT_3D('',#48564,#48565,#48566); +#48564 = CARTESIAN_POINT('',(0.675,1.245779075398,0.170500231015)); +#48565 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48566 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#48567 = ADVANCED_FACE('',(#48568),#48593,.F.); +#48568 = FACE_BOUND('',#48569,.T.); +#48569 = EDGE_LOOP('',(#48570,#48578,#48579,#48587)); +#48570 = ORIENTED_EDGE('',*,*,#48571,.F.); +#48571 = EDGE_CURVE('',#48450,#48572,#48574,.T.); +#48572 = VERTEX_POINT('',#48573); +#48573 = CARTESIAN_POINT('',(0.825,1.,8.E-02)); +#48574 = LINE('',#48575,#48576); +#48575 = CARTESIAN_POINT('',(6.,1.,8.E-02)); +#48576 = VECTOR('',#48577,1.); +#48577 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48578 = ORIENTED_EDGE('',*,*,#48557,.T.); +#48579 = ORIENTED_EDGE('',*,*,#48580,.F.); +#48580 = EDGE_CURVE('',#48581,#48550,#48583,.T.); +#48581 = VERTEX_POINT('',#48582); +#48582 = CARTESIAN_POINT('',(0.825,1.,7.866077735406E-02)); +#48583 = LINE('',#48584,#48585); +#48584 = CARTESIAN_POINT('',(6.,1.,7.866077735406E-02)); +#48585 = VECTOR('',#48586,1.); +#48586 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48587 = ORIENTED_EDGE('',*,*,#48588,.F.); +#48588 = EDGE_CURVE('',#48572,#48581,#48589,.T.); +#48589 = LINE('',#48590,#48591); +#48590 = CARTESIAN_POINT('',(0.825,1.,0.841614)); +#48591 = VECTOR('',#48592,1.); +#48592 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48593 = PLANE('',#48594); +#48594 = AXIS2_PLACEMENT_3D('',#48595,#48596,#48597); +#48595 = CARTESIAN_POINT('',(0.825,1.,7.866077735406E-02)); +#48596 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#48597 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48598 = ADVANCED_FACE('',(#48599),#48673,.T.); +#48599 = FACE_BOUND('',#48600,.T.); +#48600 = EDGE_LOOP('',(#48601,#48602,#48610,#48619,#48627,#48635,#48643, + #48651,#48660,#48666,#48667)); +#48601 = ORIENTED_EDGE('',*,*,#48588,.T.); +#48602 = ORIENTED_EDGE('',*,*,#48603,.F.); +#48603 = EDGE_CURVE('',#48604,#48581,#48606,.T.); +#48604 = VERTEX_POINT('',#48605); +#48605 = CARTESIAN_POINT('',(0.825,0.943186633611,6.541154699934E-02)); +#48606 = LINE('',#48607,#48608); +#48607 = CARTESIAN_POINT('',(0.825,0.694863,7.500931358166E-03)); +#48608 = VECTOR('',#48609,1.); +#48609 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#48610 = ORIENTED_EDGE('',*,*,#48611,.T.); +#48611 = EDGE_CURVE('',#48604,#48612,#48614,.T.); +#48612 = VERTEX_POINT('',#48613); +#48613 = CARTESIAN_POINT('',(0.825,0.92,3.619548911246E-02)); +#48614 = CIRCLE('',#48615,3.E-02); +#48615 = AXIS2_PLACEMENT_3D('',#48616,#48617,#48618); +#48616 = CARTESIAN_POINT('',(0.825,0.95,3.619548911246E-02)); +#48617 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48618 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48619 = ORIENTED_EDGE('',*,*,#48620,.F.); +#48620 = EDGE_CURVE('',#48621,#48612,#48623,.T.); +#48621 = VERTEX_POINT('',#48622); +#48622 = CARTESIAN_POINT('',(0.825,0.92,-5.551115123126E-16)); +#48623 = LINE('',#48624,#48625); +#48624 = CARTESIAN_POINT('',(0.825,0.92,0.841614)); +#48625 = VECTOR('',#48626,1.); +#48626 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#48627 = ORIENTED_EDGE('',*,*,#48628,.F.); +#48628 = EDGE_CURVE('',#48629,#48621,#48631,.T.); +#48629 = VERTEX_POINT('',#48630); +#48630 = CARTESIAN_POINT('',(0.825,1.25,-6.661338147751E-16)); +#48631 = LINE('',#48632,#48633); +#48632 = CARTESIAN_POINT('',(0.825,0.694863,-5.551115123126E-16)); +#48633 = VECTOR('',#48634,1.); +#48634 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#48635 = ORIENTED_EDGE('',*,*,#48636,.F.); +#48636 = EDGE_CURVE('',#48637,#48629,#48639,.T.); +#48637 = VERTEX_POINT('',#48638); +#48638 = CARTESIAN_POINT('',(0.825,1.3,5.E-02)); +#48639 = LINE('',#48640,#48641); +#48640 = CARTESIAN_POINT('',(0.825,0.694863,-0.555137)); +#48641 = VECTOR('',#48642,1.); +#48642 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#48643 = ORIENTED_EDGE('',*,*,#48644,.F.); +#48644 = EDGE_CURVE('',#48645,#48637,#48647,.T.); +#48645 = VERTEX_POINT('',#48646); +#48646 = CARTESIAN_POINT('',(0.825,1.3,0.11)); +#48647 = LINE('',#48648,#48649); +#48648 = CARTESIAN_POINT('',(0.825,1.3,0.841614)); +#48649 = VECTOR('',#48650,1.); +#48650 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48651 = ORIENTED_EDGE('',*,*,#48652,.F.); +#48652 = EDGE_CURVE('',#48653,#48645,#48655,.T.); +#48653 = VERTEX_POINT('',#48654); +#48654 = CARTESIAN_POINT('',(0.825,1.35,0.16)); +#48655 = CIRCLE('',#48656,5.E-02); +#48656 = AXIS2_PLACEMENT_3D('',#48657,#48658,#48659); +#48657 = CARTESIAN_POINT('',(0.825,1.35,0.11)); +#48658 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48659 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48660 = ORIENTED_EDGE('',*,*,#48661,.F.); +#48661 = EDGE_CURVE('',#43644,#48653,#48662,.T.); +#48662 = LINE('',#48663,#48664); +#48663 = CARTESIAN_POINT('',(0.825,1.35,0.841614)); +#48664 = VECTOR('',#48665,1.); +#48665 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48666 = ORIENTED_EDGE('',*,*,#43643,.F.); +#48667 = ORIENTED_EDGE('',*,*,#48668,.T.); +#48668 = EDGE_CURVE('',#43636,#48572,#48669,.T.); +#48669 = LINE('',#48670,#48671); +#48670 = CARTESIAN_POINT('',(0.825,1.,0.841614)); +#48671 = VECTOR('',#48672,1.); +#48672 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48673 = PLANE('',#48674); +#48674 = AXIS2_PLACEMENT_3D('',#48675,#48676,#48677); +#48675 = CARTESIAN_POINT('',(0.825,1.245779075398,0.170500231015)); +#48676 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48677 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#48678 = ADVANCED_FACE('',(#48679),#48697,.T.); +#48679 = FACE_BOUND('',#48680,.T.); +#48680 = EDGE_LOOP('',(#48681,#48689,#48695,#48696)); +#48681 = ORIENTED_EDGE('',*,*,#48682,.F.); +#48682 = EDGE_CURVE('',#48683,#48458,#48685,.T.); +#48683 = VERTEX_POINT('',#48684); +#48684 = CARTESIAN_POINT('',(0.6,0.92,8.E-02)); +#48685 = LINE('',#48686,#48687); +#48686 = CARTESIAN_POINT('',(0.6,0.694863,8.E-02)); +#48687 = VECTOR('',#48688,1.); +#48688 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#48689 = ORIENTED_EDGE('',*,*,#48690,.T.); +#48690 = EDGE_CURVE('',#48683,#42766,#48691,.T.); +#48691 = LINE('',#48692,#48693); +#48692 = CARTESIAN_POINT('',(0.5488325,0.694863,2.88325E-02)); +#48693 = VECTOR('',#48694,1.); +#48694 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#48695 = ORIENTED_EDGE('',*,*,#42765,.F.); +#48696 = ORIENTED_EDGE('',*,*,#48465,.F.); +#48697 = PLANE('',#48698); +#48698 = AXIS2_PLACEMENT_3D('',#48699,#48700,#48701); +#48699 = CARTESIAN_POINT('',(0.575,0.85,5.5E-02)); +#48700 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#48701 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#48702 = ADVANCED_FACE('',(#48703),#48730,.T.); +#48703 = FACE_BOUND('',#48704,.T.); +#48704 = EDGE_LOOP('',(#48705,#48713,#48714,#48715,#48716,#48724)); +#48705 = ORIENTED_EDGE('',*,*,#48706,.T.); +#48706 = EDGE_CURVE('',#48707,#48683,#48709,.T.); +#48707 = VERTEX_POINT('',#48708); +#48708 = CARTESIAN_POINT('',(0.9,0.92,8.E-02)); +#48709 = LINE('',#48710,#48711); +#48710 = CARTESIAN_POINT('',(-15.,0.92,8.E-02)); +#48711 = VECTOR('',#48712,1.); +#48712 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48713 = ORIENTED_EDGE('',*,*,#48682,.T.); +#48714 = ORIENTED_EDGE('',*,*,#48457,.F.); +#48715 = ORIENTED_EDGE('',*,*,#48571,.T.); +#48716 = ORIENTED_EDGE('',*,*,#48717,.F.); +#48717 = EDGE_CURVE('',#48718,#48572,#48720,.T.); +#48718 = VERTEX_POINT('',#48719); +#48719 = CARTESIAN_POINT('',(0.9,1.,8.E-02)); +#48720 = LINE('',#48721,#48722); +#48721 = CARTESIAN_POINT('',(-15.,1.,8.E-02)); +#48722 = VECTOR('',#48723,1.); +#48723 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48724 = ORIENTED_EDGE('',*,*,#48725,.T.); +#48725 = EDGE_CURVE('',#48718,#48707,#48726,.T.); +#48726 = LINE('',#48727,#48728); +#48727 = CARTESIAN_POINT('',(0.9,0.694863,8.E-02)); +#48728 = VECTOR('',#48729,1.); +#48729 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#48730 = PLANE('',#48731); +#48731 = AXIS2_PLACEMENT_3D('',#48732,#48733,#48734); +#48732 = CARTESIAN_POINT('',(0.6625,1.,8.E-02)); +#48733 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48734 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#48735 = ADVANCED_FACE('',(#48736),#48747,.T.); +#48736 = FACE_BOUND('',#48737,.T.); +#48737 = EDGE_LOOP('',(#48738,#48739,#48740,#48741)); +#48738 = ORIENTED_EDGE('',*,*,#42773,.T.); +#48739 = ORIENTED_EDGE('',*,*,#48690,.F.); +#48740 = ORIENTED_EDGE('',*,*,#48706,.F.); +#48741 = ORIENTED_EDGE('',*,*,#48742,.F.); +#48742 = EDGE_CURVE('',#42774,#48707,#48743,.T.); +#48743 = LINE('',#48744,#48745); +#48744 = CARTESIAN_POINT('',(0.9511675,0.694863,2.88325E-02)); +#48745 = VECTOR('',#48746,1.); +#48746 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#48747 = PLANE('',#48748); +#48748 = AXIS2_PLACEMENT_3D('',#48749,#48750,#48751); +#48749 = CARTESIAN_POINT('',(0.6625,0.92,8.E-02)); +#48750 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#48751 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#48752 = ADVANCED_FACE('',(#48753),#48764,.T.); +#48753 = FACE_BOUND('',#48754,.T.); +#48754 = EDGE_LOOP('',(#48755,#48756,#48762,#48763)); +#48755 = ORIENTED_EDGE('',*,*,#48725,.F.); +#48756 = ORIENTED_EDGE('',*,*,#48757,.F.); +#48757 = EDGE_CURVE('',#42782,#48718,#48758,.T.); +#48758 = LINE('',#48759,#48760); +#48759 = CARTESIAN_POINT('',(-14.5,1.,15.48)); +#48760 = VECTOR('',#48761,1.); +#48761 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#48762 = ORIENTED_EDGE('',*,*,#42781,.F.); +#48763 = ORIENTED_EDGE('',*,*,#48742,.T.); +#48764 = PLANE('',#48765); +#48765 = AXIS2_PLACEMENT_3D('',#48766,#48767,#48768); +#48766 = CARTESIAN_POINT('',(0.925,0.85,5.5E-02)); +#48767 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#48768 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#48769 = ADVANCED_FACE('',(#48770),#48795,.T.); +#48770 = FACE_BOUND('',#48771,.T.); +#48771 = EDGE_LOOP('',(#48772,#48782,#48788,#48789)); +#48772 = ORIENTED_EDGE('',*,*,#48773,.F.); +#48773 = EDGE_CURVE('',#48774,#48776,#48778,.T.); +#48774 = VERTEX_POINT('',#48775); +#48775 = CARTESIAN_POINT('',(1.1,0.92,8.E-02)); +#48776 = VERTEX_POINT('',#48777); +#48777 = CARTESIAN_POINT('',(1.1,1.,8.E-02)); +#48778 = LINE('',#48779,#48780); +#48779 = CARTESIAN_POINT('',(1.1,0.694863,8.E-02)); +#48780 = VECTOR('',#48781,1.); +#48781 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#48782 = ORIENTED_EDGE('',*,*,#48783,.T.); +#48783 = EDGE_CURVE('',#48774,#42798,#48784,.T.); +#48784 = LINE('',#48785,#48786); +#48785 = CARTESIAN_POINT('',(1.0488325,0.694863,2.88325E-02)); +#48786 = VECTOR('',#48787,1.); +#48787 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#48788 = ORIENTED_EDGE('',*,*,#42797,.F.); +#48789 = ORIENTED_EDGE('',*,*,#48790,.F.); +#48790 = EDGE_CURVE('',#48776,#42790,#48791,.T.); +#48791 = LINE('',#48792,#48793); +#48792 = CARTESIAN_POINT('',(-14.5,1.,-15.52)); +#48793 = VECTOR('',#48794,1.); +#48794 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#48795 = PLANE('',#48796); +#48796 = AXIS2_PLACEMENT_3D('',#48797,#48798,#48799); +#48797 = CARTESIAN_POINT('',(1.075,0.85,5.5E-02)); +#48798 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#48799 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#48800 = ADVANCED_FACE('',(#48801),#48819,.T.); +#48801 = FACE_BOUND('',#48802,.T.); +#48802 = EDGE_LOOP('',(#48803,#48804,#48805,#48813)); +#48803 = ORIENTED_EDGE('',*,*,#42805,.T.); +#48804 = ORIENTED_EDGE('',*,*,#48783,.F.); +#48805 = ORIENTED_EDGE('',*,*,#48806,.F.); +#48806 = EDGE_CURVE('',#48807,#48774,#48809,.T.); +#48807 = VERTEX_POINT('',#48808); +#48808 = CARTESIAN_POINT('',(1.4,0.92,8.E-02)); +#48809 = LINE('',#48810,#48811); +#48810 = CARTESIAN_POINT('',(-14.5,0.92,8.E-02)); +#48811 = VECTOR('',#48812,1.); +#48812 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48813 = ORIENTED_EDGE('',*,*,#48814,.F.); +#48814 = EDGE_CURVE('',#42806,#48807,#48815,.T.); +#48815 = LINE('',#48816,#48817); +#48816 = CARTESIAN_POINT('',(1.4511675,0.694863,2.88325E-02)); +#48817 = VECTOR('',#48818,1.); +#48818 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#48819 = PLANE('',#48820); +#48820 = AXIS2_PLACEMENT_3D('',#48821,#48822,#48823); +#48821 = CARTESIAN_POINT('',(1.1625,0.92,8.E-02)); +#48822 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#48823 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#48824 = ADVANCED_FACE('',(#48825),#48859,.T.); +#48825 = FACE_BOUND('',#48826,.T.); +#48826 = EDGE_LOOP('',(#48827,#48828,#48829,#48837,#48845,#48853)); +#48827 = ORIENTED_EDGE('',*,*,#48806,.T.); +#48828 = ORIENTED_EDGE('',*,*,#48773,.T.); +#48829 = ORIENTED_EDGE('',*,*,#48830,.F.); +#48830 = EDGE_CURVE('',#48831,#48776,#48833,.T.); +#48831 = VERTEX_POINT('',#48832); +#48832 = CARTESIAN_POINT('',(1.175,1.,8.E-02)); +#48833 = LINE('',#48834,#48835); +#48834 = CARTESIAN_POINT('',(-14.5,1.,8.E-02)); +#48835 = VECTOR('',#48836,1.); +#48836 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48837 = ORIENTED_EDGE('',*,*,#48838,.T.); +#48838 = EDGE_CURVE('',#48831,#48839,#48841,.T.); +#48839 = VERTEX_POINT('',#48840); +#48840 = CARTESIAN_POINT('',(1.325,1.,8.E-02)); +#48841 = LINE('',#48842,#48843); +#48842 = CARTESIAN_POINT('',(6.5,1.,8.E-02)); +#48843 = VECTOR('',#48844,1.); +#48844 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48845 = ORIENTED_EDGE('',*,*,#48846,.F.); +#48846 = EDGE_CURVE('',#48847,#48839,#48849,.T.); +#48847 = VERTEX_POINT('',#48848); +#48848 = CARTESIAN_POINT('',(1.4,1.,8.E-02)); +#48849 = LINE('',#48850,#48851); +#48850 = CARTESIAN_POINT('',(-14.5,1.,8.E-02)); +#48851 = VECTOR('',#48852,1.); +#48852 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48853 = ORIENTED_EDGE('',*,*,#48854,.T.); +#48854 = EDGE_CURVE('',#48847,#48807,#48855,.T.); +#48855 = LINE('',#48856,#48857); +#48856 = CARTESIAN_POINT('',(1.4,0.694863,8.E-02)); +#48857 = VECTOR('',#48858,1.); +#48858 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#48859 = PLANE('',#48860); +#48860 = AXIS2_PLACEMENT_3D('',#48861,#48862,#48863); +#48861 = CARTESIAN_POINT('',(1.1625,1.,8.E-02)); +#48862 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48863 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#48864 = ADVANCED_FACE('',(#48865),#48880,.T.); +#48865 = FACE_BOUND('',#48866,.T.); +#48866 = EDGE_LOOP('',(#48867,#48873,#48874,#48875,#48876,#48877,#48878, + #48879)); +#48867 = ORIENTED_EDGE('',*,*,#48868,.T.); +#48868 = EDGE_CURVE('',#43628,#48831,#48869,.T.); +#48869 = LINE('',#48870,#48871); +#48870 = CARTESIAN_POINT('',(1.175,1.,0.841614)); +#48871 = VECTOR('',#48872,1.); +#48872 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48873 = ORIENTED_EDGE('',*,*,#48830,.T.); +#48874 = ORIENTED_EDGE('',*,*,#48790,.T.); +#48875 = ORIENTED_EDGE('',*,*,#42789,.F.); +#48876 = ORIENTED_EDGE('',*,*,#48757,.T.); +#48877 = ORIENTED_EDGE('',*,*,#48717,.T.); +#48878 = ORIENTED_EDGE('',*,*,#48668,.F.); +#48879 = ORIENTED_EDGE('',*,*,#43635,.T.); +#48880 = PLANE('',#48881); +#48881 = AXIS2_PLACEMENT_3D('',#48882,#48883,#48884); +#48882 = CARTESIAN_POINT('',(4.825,1.,0.31)); +#48883 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#48884 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48885 = ADVANCED_FACE('',(#48886),#48911,.F.); +#48886 = FACE_BOUND('',#48887,.T.); +#48887 = EDGE_LOOP('',(#48888,#48889,#48897,#48905)); +#48888 = ORIENTED_EDGE('',*,*,#48838,.F.); +#48889 = ORIENTED_EDGE('',*,*,#48890,.T.); +#48890 = EDGE_CURVE('',#48831,#48891,#48893,.T.); +#48891 = VERTEX_POINT('',#48892); +#48892 = CARTESIAN_POINT('',(1.175,1.,7.866077735406E-02)); +#48893 = LINE('',#48894,#48895); +#48894 = CARTESIAN_POINT('',(1.175,1.,0.841614)); +#48895 = VECTOR('',#48896,1.); +#48896 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48897 = ORIENTED_EDGE('',*,*,#48898,.F.); +#48898 = EDGE_CURVE('',#48899,#48891,#48901,.T.); +#48899 = VERTEX_POINT('',#48900); +#48900 = CARTESIAN_POINT('',(1.325,1.,7.866077735406E-02)); +#48901 = LINE('',#48902,#48903); +#48902 = CARTESIAN_POINT('',(6.5,1.,7.866077735406E-02)); +#48903 = VECTOR('',#48904,1.); +#48904 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#48905 = ORIENTED_EDGE('',*,*,#48906,.F.); +#48906 = EDGE_CURVE('',#48839,#48899,#48907,.T.); +#48907 = LINE('',#48908,#48909); +#48908 = CARTESIAN_POINT('',(1.325,1.,0.841614)); +#48909 = VECTOR('',#48910,1.); +#48910 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48911 = PLANE('',#48912); +#48912 = AXIS2_PLACEMENT_3D('',#48913,#48914,#48915); +#48913 = CARTESIAN_POINT('',(1.325,1.,7.866077735406E-02)); +#48914 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#48915 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#48916 = ADVANCED_FACE('',(#48917),#48986,.F.); +#48917 = FACE_BOUND('',#48918,.T.); +#48918 = EDGE_LOOP('',(#48919,#48920,#48921,#48929,#48938,#48946,#48954, + #48962,#48970,#48979,#48985)); +#48919 = ORIENTED_EDGE('',*,*,#48868,.F.); +#48920 = ORIENTED_EDGE('',*,*,#43627,.F.); +#48921 = ORIENTED_EDGE('',*,*,#48922,.F.); +#48922 = EDGE_CURVE('',#48923,#43620,#48925,.T.); +#48923 = VERTEX_POINT('',#48924); +#48924 = CARTESIAN_POINT('',(1.175,1.35,0.16)); +#48925 = LINE('',#48926,#48927); +#48926 = CARTESIAN_POINT('',(1.175,1.35,0.31)); +#48927 = VECTOR('',#48928,1.); +#48928 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#48929 = ORIENTED_EDGE('',*,*,#48930,.T.); +#48930 = EDGE_CURVE('',#48923,#48931,#48933,.T.); +#48931 = VERTEX_POINT('',#48932); +#48932 = CARTESIAN_POINT('',(1.175,1.3,0.11)); +#48933 = CIRCLE('',#48934,5.E-02); +#48934 = AXIS2_PLACEMENT_3D('',#48935,#48936,#48937); +#48935 = CARTESIAN_POINT('',(1.175,1.35,0.11)); +#48936 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48937 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48938 = ORIENTED_EDGE('',*,*,#48939,.T.); +#48939 = EDGE_CURVE('',#48931,#48940,#48942,.T.); +#48940 = VERTEX_POINT('',#48941); +#48941 = CARTESIAN_POINT('',(1.175,1.3,5.E-02)); +#48942 = LINE('',#48943,#48944); +#48943 = CARTESIAN_POINT('',(1.175,1.3,0.11)); +#48944 = VECTOR('',#48945,1.); +#48945 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#48946 = ORIENTED_EDGE('',*,*,#48947,.T.); +#48947 = EDGE_CURVE('',#48940,#48948,#48950,.T.); +#48948 = VERTEX_POINT('',#48949); +#48949 = CARTESIAN_POINT('',(1.175,1.25,-7.771561172376E-16)); +#48950 = LINE('',#48951,#48952); +#48951 = CARTESIAN_POINT('',(1.175,1.3,5.E-02)); +#48952 = VECTOR('',#48953,1.); +#48953 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#48954 = ORIENTED_EDGE('',*,*,#48955,.F.); +#48955 = EDGE_CURVE('',#48956,#48948,#48958,.T.); +#48956 = VERTEX_POINT('',#48957); +#48957 = CARTESIAN_POINT('',(1.175,0.92,-6.661338147751E-16)); +#48958 = LINE('',#48959,#48960); +#48959 = CARTESIAN_POINT('',(1.175,0.92,-6.661338147751E-16)); +#48960 = VECTOR('',#48961,1.); +#48961 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#48962 = ORIENTED_EDGE('',*,*,#48963,.T.); +#48963 = EDGE_CURVE('',#48956,#48964,#48966,.T.); +#48964 = VERTEX_POINT('',#48965); +#48965 = CARTESIAN_POINT('',(1.175,0.92,3.619548911246E-02)); +#48966 = LINE('',#48967,#48968); +#48967 = CARTESIAN_POINT('',(1.175,0.92,-6.661338147751E-16)); +#48968 = VECTOR('',#48969,1.); +#48969 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#48970 = ORIENTED_EDGE('',*,*,#48971,.F.); +#48971 = EDGE_CURVE('',#48972,#48964,#48974,.T.); +#48972 = VERTEX_POINT('',#48973); +#48973 = CARTESIAN_POINT('',(1.175,0.943186633611,6.541154699934E-02)); +#48974 = CIRCLE('',#48975,3.E-02); +#48975 = AXIS2_PLACEMENT_3D('',#48976,#48977,#48978); +#48976 = CARTESIAN_POINT('',(1.175,0.95,3.619548911246E-02)); +#48977 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48978 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#48979 = ORIENTED_EDGE('',*,*,#48980,.T.); +#48980 = EDGE_CURVE('',#48972,#48891,#48981,.T.); +#48981 = LINE('',#48982,#48983); +#48982 = CARTESIAN_POINT('',(1.175,0.943186633611,6.541154699934E-02)); +#48983 = VECTOR('',#48984,1.); +#48984 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#48985 = ORIENTED_EDGE('',*,*,#48890,.F.); +#48986 = PLANE('',#48987); +#48987 = AXIS2_PLACEMENT_3D('',#48988,#48989,#48990); +#48988 = CARTESIAN_POINT('',(1.175,1.245779075398,0.170500231015)); +#48989 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#48990 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#48991 = ADVANCED_FACE('',(#48992),#49066,.T.); +#48992 = FACE_BOUND('',#48993,.T.); +#48993 = EDGE_LOOP('',(#48994,#48995,#49003,#49012,#49020,#49028,#49036, + #49044,#49053,#49059,#49060)); +#48994 = ORIENTED_EDGE('',*,*,#48906,.T.); +#48995 = ORIENTED_EDGE('',*,*,#48996,.F.); +#48996 = EDGE_CURVE('',#48997,#48899,#48999,.T.); +#48997 = VERTEX_POINT('',#48998); +#48998 = CARTESIAN_POINT('',(1.325,0.943186633611,6.541154699934E-02)); +#48999 = LINE('',#49000,#49001); +#49000 = CARTESIAN_POINT('',(1.325,0.694863,7.500931358166E-03)); +#49001 = VECTOR('',#49002,1.); +#49002 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#49003 = ORIENTED_EDGE('',*,*,#49004,.T.); +#49004 = EDGE_CURVE('',#48997,#49005,#49007,.T.); +#49005 = VERTEX_POINT('',#49006); +#49006 = CARTESIAN_POINT('',(1.325,0.92,3.619548911246E-02)); +#49007 = CIRCLE('',#49008,3.E-02); +#49008 = AXIS2_PLACEMENT_3D('',#49009,#49010,#49011); +#49009 = CARTESIAN_POINT('',(1.325,0.95,3.619548911246E-02)); +#49010 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49011 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49012 = ORIENTED_EDGE('',*,*,#49013,.F.); +#49013 = EDGE_CURVE('',#49014,#49005,#49016,.T.); +#49014 = VERTEX_POINT('',#49015); +#49015 = CARTESIAN_POINT('',(1.325,0.92,-6.661338147751E-16)); +#49016 = LINE('',#49017,#49018); +#49017 = CARTESIAN_POINT('',(1.325,0.92,0.841614)); +#49018 = VECTOR('',#49019,1.); +#49019 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49020 = ORIENTED_EDGE('',*,*,#49021,.F.); +#49021 = EDGE_CURVE('',#49022,#49014,#49024,.T.); +#49022 = VERTEX_POINT('',#49023); +#49023 = CARTESIAN_POINT('',(1.325,1.25,-7.771561172376E-16)); +#49024 = LINE('',#49025,#49026); +#49025 = CARTESIAN_POINT('',(1.325,0.694863,-6.661338147751E-16)); +#49026 = VECTOR('',#49027,1.); +#49027 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#49028 = ORIENTED_EDGE('',*,*,#49029,.F.); +#49029 = EDGE_CURVE('',#49030,#49022,#49032,.T.); +#49030 = VERTEX_POINT('',#49031); +#49031 = CARTESIAN_POINT('',(1.325,1.3,5.E-02)); +#49032 = LINE('',#49033,#49034); +#49033 = CARTESIAN_POINT('',(1.325,0.694863,-0.555137)); +#49034 = VECTOR('',#49035,1.); +#49035 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#49036 = ORIENTED_EDGE('',*,*,#49037,.F.); +#49037 = EDGE_CURVE('',#49038,#49030,#49040,.T.); +#49038 = VERTEX_POINT('',#49039); +#49039 = CARTESIAN_POINT('',(1.325,1.3,0.11)); +#49040 = LINE('',#49041,#49042); +#49041 = CARTESIAN_POINT('',(1.325,1.3,0.841614)); +#49042 = VECTOR('',#49043,1.); +#49043 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49044 = ORIENTED_EDGE('',*,*,#49045,.F.); +#49045 = EDGE_CURVE('',#49046,#49038,#49048,.T.); +#49046 = VERTEX_POINT('',#49047); +#49047 = CARTESIAN_POINT('',(1.325,1.35,0.16)); +#49048 = CIRCLE('',#49049,5.E-02); +#49049 = AXIS2_PLACEMENT_3D('',#49050,#49051,#49052); +#49050 = CARTESIAN_POINT('',(1.325,1.35,0.11)); +#49051 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49052 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49053 = ORIENTED_EDGE('',*,*,#49054,.F.); +#49054 = EDGE_CURVE('',#43612,#49046,#49055,.T.); +#49055 = LINE('',#49056,#49057); +#49056 = CARTESIAN_POINT('',(1.325,1.35,0.841614)); +#49057 = VECTOR('',#49058,1.); +#49058 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49059 = ORIENTED_EDGE('',*,*,#43611,.F.); +#49060 = ORIENTED_EDGE('',*,*,#49061,.T.); +#49061 = EDGE_CURVE('',#43604,#48839,#49062,.T.); +#49062 = LINE('',#49063,#49064); +#49063 = CARTESIAN_POINT('',(1.325,1.,0.841614)); +#49064 = VECTOR('',#49065,1.); +#49065 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49066 = PLANE('',#49067); +#49067 = AXIS2_PLACEMENT_3D('',#49068,#49069,#49070); +#49068 = CARTESIAN_POINT('',(1.325,1.245779075398,0.170500231015)); +#49069 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49070 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#49071 = ADVANCED_FACE('',(#49072),#49106,.T.); +#49072 = FACE_BOUND('',#49073,.T.); +#49073 = EDGE_LOOP('',(#49074,#49082,#49090,#49096,#49097,#49103,#49104, + #49105)); +#49074 = ORIENTED_EDGE('',*,*,#49075,.T.); +#49075 = EDGE_CURVE('',#43596,#49076,#49078,.T.); +#49076 = VERTEX_POINT('',#49077); +#49077 = CARTESIAN_POINT('',(1.675,1.,8.E-02)); +#49078 = LINE('',#49079,#49080); +#49079 = CARTESIAN_POINT('',(1.675,1.,0.841614)); +#49080 = VECTOR('',#49081,1.); +#49081 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49082 = ORIENTED_EDGE('',*,*,#49083,.T.); +#49083 = EDGE_CURVE('',#49076,#49084,#49086,.T.); +#49084 = VERTEX_POINT('',#49085); +#49085 = CARTESIAN_POINT('',(1.6,1.,8.E-02)); +#49086 = LINE('',#49087,#49088); +#49087 = CARTESIAN_POINT('',(-14.,1.,8.E-02)); +#49088 = VECTOR('',#49089,1.); +#49089 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49090 = ORIENTED_EDGE('',*,*,#49091,.T.); +#49091 = EDGE_CURVE('',#49084,#42822,#49092,.T.); +#49092 = LINE('',#49093,#49094); +#49093 = CARTESIAN_POINT('',(-14.,1.,-15.52)); +#49094 = VECTOR('',#49095,1.); +#49095 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#49096 = ORIENTED_EDGE('',*,*,#42821,.F.); +#49097 = ORIENTED_EDGE('',*,*,#49098,.T.); +#49098 = EDGE_CURVE('',#42814,#48847,#49099,.T.); +#49099 = LINE('',#49100,#49101); +#49100 = CARTESIAN_POINT('',(-14.,1.,15.48)); +#49101 = VECTOR('',#49102,1.); +#49102 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#49103 = ORIENTED_EDGE('',*,*,#48846,.T.); +#49104 = ORIENTED_EDGE('',*,*,#49061,.F.); +#49105 = ORIENTED_EDGE('',*,*,#43603,.T.); +#49106 = PLANE('',#49107); +#49107 = AXIS2_PLACEMENT_3D('',#49108,#49109,#49110); +#49108 = CARTESIAN_POINT('',(5.325,1.,0.31)); +#49109 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#49110 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49111 = ADVANCED_FACE('',(#49112),#49195,.T.); +#49112 = FACE_BOUND('',#49113,.T.); +#49113 = EDGE_LOOP('',(#49114,#49124,#49132,#49141,#49149,#49157,#49165, + #49173,#49182,#49188,#49189)); +#49114 = ORIENTED_EDGE('',*,*,#49115,.T.); +#49115 = EDGE_CURVE('',#49116,#49118,#49120,.T.); +#49116 = VERTEX_POINT('',#49117); +#49117 = CARTESIAN_POINT('',(1.825,1.,8.E-02)); +#49118 = VERTEX_POINT('',#49119); +#49119 = CARTESIAN_POINT('',(1.825,1.,7.866077735406E-02)); +#49120 = LINE('',#49121,#49122); +#49121 = CARTESIAN_POINT('',(1.825,1.,0.841614)); +#49122 = VECTOR('',#49123,1.); +#49123 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49124 = ORIENTED_EDGE('',*,*,#49125,.F.); +#49125 = EDGE_CURVE('',#49126,#49118,#49128,.T.); +#49126 = VERTEX_POINT('',#49127); +#49127 = CARTESIAN_POINT('',(1.825,0.943186633611,6.541154699934E-02)); +#49128 = LINE('',#49129,#49130); +#49129 = CARTESIAN_POINT('',(1.825,0.694863,7.500931358165E-03)); +#49130 = VECTOR('',#49131,1.); +#49131 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#49132 = ORIENTED_EDGE('',*,*,#49133,.T.); +#49133 = EDGE_CURVE('',#49126,#49134,#49136,.T.); +#49134 = VERTEX_POINT('',#49135); +#49135 = CARTESIAN_POINT('',(1.825,0.92,3.619548911246E-02)); +#49136 = CIRCLE('',#49137,3.E-02); +#49137 = AXIS2_PLACEMENT_3D('',#49138,#49139,#49140); +#49138 = CARTESIAN_POINT('',(1.825,0.95,3.619548911246E-02)); +#49139 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49140 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49141 = ORIENTED_EDGE('',*,*,#49142,.F.); +#49142 = EDGE_CURVE('',#49143,#49134,#49145,.T.); +#49143 = VERTEX_POINT('',#49144); +#49144 = CARTESIAN_POINT('',(1.825,0.92,-7.771561172376E-16)); +#49145 = LINE('',#49146,#49147); +#49146 = CARTESIAN_POINT('',(1.825,0.92,0.841614)); +#49147 = VECTOR('',#49148,1.); +#49148 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49149 = ORIENTED_EDGE('',*,*,#49150,.F.); +#49150 = EDGE_CURVE('',#49151,#49143,#49153,.T.); +#49151 = VERTEX_POINT('',#49152); +#49152 = CARTESIAN_POINT('',(1.825,1.25,-8.881784197001E-16)); +#49153 = LINE('',#49154,#49155); +#49154 = CARTESIAN_POINT('',(1.825,0.694863,-7.771561172376E-16)); +#49155 = VECTOR('',#49156,1.); +#49156 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#49157 = ORIENTED_EDGE('',*,*,#49158,.F.); +#49158 = EDGE_CURVE('',#49159,#49151,#49161,.T.); +#49159 = VERTEX_POINT('',#49160); +#49160 = CARTESIAN_POINT('',(1.825,1.3,5.E-02)); +#49161 = LINE('',#49162,#49163); +#49162 = CARTESIAN_POINT('',(1.825,0.694863,-0.555137)); +#49163 = VECTOR('',#49164,1.); +#49164 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#49165 = ORIENTED_EDGE('',*,*,#49166,.F.); +#49166 = EDGE_CURVE('',#49167,#49159,#49169,.T.); +#49167 = VERTEX_POINT('',#49168); +#49168 = CARTESIAN_POINT('',(1.825,1.3,0.11)); +#49169 = LINE('',#49170,#49171); +#49170 = CARTESIAN_POINT('',(1.825,1.3,0.841614)); +#49171 = VECTOR('',#49172,1.); +#49172 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49173 = ORIENTED_EDGE('',*,*,#49174,.F.); +#49174 = EDGE_CURVE('',#49175,#49167,#49177,.T.); +#49175 = VERTEX_POINT('',#49176); +#49176 = CARTESIAN_POINT('',(1.825,1.35,0.16)); +#49177 = CIRCLE('',#49178,5.E-02); +#49178 = AXIS2_PLACEMENT_3D('',#49179,#49180,#49181); +#49179 = CARTESIAN_POINT('',(1.825,1.35,0.11)); +#49180 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49181 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49182 = ORIENTED_EDGE('',*,*,#49183,.F.); +#49183 = EDGE_CURVE('',#43580,#49175,#49184,.T.); +#49184 = LINE('',#49185,#49186); +#49185 = CARTESIAN_POINT('',(1.825,1.35,0.841614)); +#49186 = VECTOR('',#49187,1.); +#49187 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49188 = ORIENTED_EDGE('',*,*,#43579,.F.); +#49189 = ORIENTED_EDGE('',*,*,#49190,.T.); +#49190 = EDGE_CURVE('',#43572,#49116,#49191,.T.); +#49191 = LINE('',#49192,#49193); +#49192 = CARTESIAN_POINT('',(1.825,1.,0.841614)); +#49193 = VECTOR('',#49194,1.); +#49194 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49195 = PLANE('',#49196); +#49196 = AXIS2_PLACEMENT_3D('',#49197,#49198,#49199); +#49197 = CARTESIAN_POINT('',(1.825,1.245779075398,0.170500231015)); +#49198 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49199 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#49200 = ADVANCED_FACE('',(#49201),#49224,.F.); +#49201 = FACE_BOUND('',#49202,.T.); +#49202 = EDGE_LOOP('',(#49203,#49209,#49217,#49223)); +#49203 = ORIENTED_EDGE('',*,*,#49204,.F.); +#49204 = EDGE_CURVE('',#49076,#49116,#49205,.T.); +#49205 = LINE('',#49206,#49207); +#49206 = CARTESIAN_POINT('',(7.,1.,8.E-02)); +#49207 = VECTOR('',#49208,1.); +#49208 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49209 = ORIENTED_EDGE('',*,*,#49210,.T.); +#49210 = EDGE_CURVE('',#49076,#49211,#49213,.T.); +#49211 = VERTEX_POINT('',#49212); +#49212 = CARTESIAN_POINT('',(1.675,1.,7.866077735406E-02)); +#49213 = LINE('',#49214,#49215); +#49214 = CARTESIAN_POINT('',(1.675,1.,0.841614)); +#49215 = VECTOR('',#49216,1.); +#49216 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49217 = ORIENTED_EDGE('',*,*,#49218,.F.); +#49218 = EDGE_CURVE('',#49118,#49211,#49219,.T.); +#49219 = LINE('',#49220,#49221); +#49220 = CARTESIAN_POINT('',(7.,1.,7.866077735406E-02)); +#49221 = VECTOR('',#49222,1.); +#49222 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49223 = ORIENTED_EDGE('',*,*,#49115,.F.); +#49224 = PLANE('',#49225); +#49225 = AXIS2_PLACEMENT_3D('',#49226,#49227,#49228); +#49226 = CARTESIAN_POINT('',(1.825,1.,7.866077735406E-02)); +#49227 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#49228 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49229 = ADVANCED_FACE('',(#49230),#49299,.F.); +#49230 = FACE_BOUND('',#49231,.T.); +#49231 = EDGE_LOOP('',(#49232,#49233,#49234,#49242,#49251,#49259,#49267, + #49275,#49283,#49292,#49298)); +#49232 = ORIENTED_EDGE('',*,*,#49075,.F.); +#49233 = ORIENTED_EDGE('',*,*,#43595,.F.); +#49234 = ORIENTED_EDGE('',*,*,#49235,.F.); +#49235 = EDGE_CURVE('',#49236,#43588,#49238,.T.); +#49236 = VERTEX_POINT('',#49237); +#49237 = CARTESIAN_POINT('',(1.675,1.35,0.16)); +#49238 = LINE('',#49239,#49240); +#49239 = CARTESIAN_POINT('',(1.675,1.35,0.31)); +#49240 = VECTOR('',#49241,1.); +#49241 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49242 = ORIENTED_EDGE('',*,*,#49243,.T.); +#49243 = EDGE_CURVE('',#49236,#49244,#49246,.T.); +#49244 = VERTEX_POINT('',#49245); +#49245 = CARTESIAN_POINT('',(1.675,1.3,0.11)); +#49246 = CIRCLE('',#49247,5.E-02); +#49247 = AXIS2_PLACEMENT_3D('',#49248,#49249,#49250); +#49248 = CARTESIAN_POINT('',(1.675,1.35,0.11)); +#49249 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49250 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49251 = ORIENTED_EDGE('',*,*,#49252,.T.); +#49252 = EDGE_CURVE('',#49244,#49253,#49255,.T.); +#49253 = VERTEX_POINT('',#49254); +#49254 = CARTESIAN_POINT('',(1.675,1.3,5.E-02)); +#49255 = LINE('',#49256,#49257); +#49256 = CARTESIAN_POINT('',(1.675,1.3,0.11)); +#49257 = VECTOR('',#49258,1.); +#49258 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49259 = ORIENTED_EDGE('',*,*,#49260,.T.); +#49260 = EDGE_CURVE('',#49253,#49261,#49263,.T.); +#49261 = VERTEX_POINT('',#49262); +#49262 = CARTESIAN_POINT('',(1.675,1.25,-8.881784197001E-16)); +#49263 = LINE('',#49264,#49265); +#49264 = CARTESIAN_POINT('',(1.675,1.3,5.E-02)); +#49265 = VECTOR('',#49266,1.); +#49266 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#49267 = ORIENTED_EDGE('',*,*,#49268,.F.); +#49268 = EDGE_CURVE('',#49269,#49261,#49271,.T.); +#49269 = VERTEX_POINT('',#49270); +#49270 = CARTESIAN_POINT('',(1.675,0.92,-7.771561172376E-16)); +#49271 = LINE('',#49272,#49273); +#49272 = CARTESIAN_POINT('',(1.675,0.92,-7.771561172376E-16)); +#49273 = VECTOR('',#49274,1.); +#49274 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#49275 = ORIENTED_EDGE('',*,*,#49276,.T.); +#49276 = EDGE_CURVE('',#49269,#49277,#49279,.T.); +#49277 = VERTEX_POINT('',#49278); +#49278 = CARTESIAN_POINT('',(1.675,0.92,3.619548911246E-02)); +#49279 = LINE('',#49280,#49281); +#49280 = CARTESIAN_POINT('',(1.675,0.92,-7.771561172376E-16)); +#49281 = VECTOR('',#49282,1.); +#49282 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49283 = ORIENTED_EDGE('',*,*,#49284,.F.); +#49284 = EDGE_CURVE('',#49285,#49277,#49287,.T.); +#49285 = VERTEX_POINT('',#49286); +#49286 = CARTESIAN_POINT('',(1.675,0.943186633611,6.541154699934E-02)); +#49287 = CIRCLE('',#49288,3.E-02); +#49288 = AXIS2_PLACEMENT_3D('',#49289,#49290,#49291); +#49289 = CARTESIAN_POINT('',(1.675,0.95,3.619548911246E-02)); +#49290 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49291 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49292 = ORIENTED_EDGE('',*,*,#49293,.T.); +#49293 = EDGE_CURVE('',#49285,#49211,#49294,.T.); +#49294 = LINE('',#49295,#49296); +#49295 = CARTESIAN_POINT('',(1.675,0.943186633611,6.541154699934E-02)); +#49296 = VECTOR('',#49297,1.); +#49297 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#49298 = ORIENTED_EDGE('',*,*,#49210,.F.); +#49299 = PLANE('',#49300); +#49300 = AXIS2_PLACEMENT_3D('',#49301,#49302,#49303); +#49301 = CARTESIAN_POINT('',(1.675,1.245779075398,0.170500231015)); +#49302 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49303 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#49304 = ADVANCED_FACE('',(#49305),#49323,.T.); +#49305 = FACE_BOUND('',#49306,.T.); +#49306 = EDGE_LOOP('',(#49307,#49315,#49321,#49322)); +#49307 = ORIENTED_EDGE('',*,*,#49308,.F.); +#49308 = EDGE_CURVE('',#49309,#49084,#49311,.T.); +#49309 = VERTEX_POINT('',#49310); +#49310 = CARTESIAN_POINT('',(1.6,0.92,8.E-02)); +#49311 = LINE('',#49312,#49313); +#49312 = CARTESIAN_POINT('',(1.6,0.694863,8.E-02)); +#49313 = VECTOR('',#49314,1.); +#49314 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#49315 = ORIENTED_EDGE('',*,*,#49316,.T.); +#49316 = EDGE_CURVE('',#49309,#42830,#49317,.T.); +#49317 = LINE('',#49318,#49319); +#49318 = CARTESIAN_POINT('',(1.5488325,0.694863,2.88325E-02)); +#49319 = VECTOR('',#49320,1.); +#49320 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#49321 = ORIENTED_EDGE('',*,*,#42829,.F.); +#49322 = ORIENTED_EDGE('',*,*,#49091,.F.); +#49323 = PLANE('',#49324); +#49324 = AXIS2_PLACEMENT_3D('',#49325,#49326,#49327); +#49325 = CARTESIAN_POINT('',(1.575,0.85,5.5E-02)); +#49326 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#49327 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#49328 = ADVANCED_FACE('',(#49329),#49356,.T.); +#49329 = FACE_BOUND('',#49330,.T.); +#49330 = EDGE_LOOP('',(#49331,#49339,#49340,#49341,#49342,#49350)); +#49331 = ORIENTED_EDGE('',*,*,#49332,.T.); +#49332 = EDGE_CURVE('',#49333,#49309,#49335,.T.); +#49333 = VERTEX_POINT('',#49334); +#49334 = CARTESIAN_POINT('',(1.9,0.92,8.E-02)); +#49335 = LINE('',#49336,#49337); +#49336 = CARTESIAN_POINT('',(-14.,0.92,8.E-02)); +#49337 = VECTOR('',#49338,1.); +#49338 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49339 = ORIENTED_EDGE('',*,*,#49308,.T.); +#49340 = ORIENTED_EDGE('',*,*,#49083,.F.); +#49341 = ORIENTED_EDGE('',*,*,#49204,.T.); +#49342 = ORIENTED_EDGE('',*,*,#49343,.F.); +#49343 = EDGE_CURVE('',#49344,#49116,#49346,.T.); +#49344 = VERTEX_POINT('',#49345); +#49345 = CARTESIAN_POINT('',(1.9,1.,8.E-02)); +#49346 = LINE('',#49347,#49348); +#49347 = CARTESIAN_POINT('',(-14.,1.,8.E-02)); +#49348 = VECTOR('',#49349,1.); +#49349 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49350 = ORIENTED_EDGE('',*,*,#49351,.T.); +#49351 = EDGE_CURVE('',#49344,#49333,#49352,.T.); +#49352 = LINE('',#49353,#49354); +#49353 = CARTESIAN_POINT('',(1.9,0.694863,8.E-02)); +#49354 = VECTOR('',#49355,1.); +#49355 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#49356 = PLANE('',#49357); +#49357 = AXIS2_PLACEMENT_3D('',#49358,#49359,#49360); +#49358 = CARTESIAN_POINT('',(1.6625,1.,8.E-02)); +#49359 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49360 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#49361 = ADVANCED_FACE('',(#49362),#49373,.T.); +#49362 = FACE_BOUND('',#49363,.T.); +#49363 = EDGE_LOOP('',(#49364,#49365,#49366,#49367)); +#49364 = ORIENTED_EDGE('',*,*,#42837,.T.); +#49365 = ORIENTED_EDGE('',*,*,#49316,.F.); +#49366 = ORIENTED_EDGE('',*,*,#49332,.F.); +#49367 = ORIENTED_EDGE('',*,*,#49368,.F.); +#49368 = EDGE_CURVE('',#42838,#49333,#49369,.T.); +#49369 = LINE('',#49370,#49371); +#49370 = CARTESIAN_POINT('',(1.9511675,0.694863,2.88325E-02)); +#49371 = VECTOR('',#49372,1.); +#49372 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#49373 = PLANE('',#49374); +#49374 = AXIS2_PLACEMENT_3D('',#49375,#49376,#49377); +#49375 = CARTESIAN_POINT('',(1.6625,0.92,8.E-02)); +#49376 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#49377 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#49378 = ADVANCED_FACE('',(#49379),#49390,.T.); +#49379 = FACE_BOUND('',#49380,.T.); +#49380 = EDGE_LOOP('',(#49381,#49382,#49388,#49389)); +#49381 = ORIENTED_EDGE('',*,*,#49351,.F.); +#49382 = ORIENTED_EDGE('',*,*,#49383,.F.); +#49383 = EDGE_CURVE('',#42846,#49344,#49384,.T.); +#49384 = LINE('',#49385,#49386); +#49385 = CARTESIAN_POINT('',(-13.5,1.,15.48)); +#49386 = VECTOR('',#49387,1.); +#49387 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#49388 = ORIENTED_EDGE('',*,*,#42845,.F.); +#49389 = ORIENTED_EDGE('',*,*,#49368,.T.); +#49390 = PLANE('',#49391); +#49391 = AXIS2_PLACEMENT_3D('',#49392,#49393,#49394); +#49392 = CARTESIAN_POINT('',(1.925,0.85,5.5E-02)); +#49393 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#49394 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#49395 = ADVANCED_FACE('',(#49396),#49421,.T.); +#49396 = FACE_BOUND('',#49397,.T.); +#49397 = EDGE_LOOP('',(#49398,#49408,#49414,#49415)); +#49398 = ORIENTED_EDGE('',*,*,#49399,.F.); +#49399 = EDGE_CURVE('',#49400,#49402,#49404,.T.); +#49400 = VERTEX_POINT('',#49401); +#49401 = CARTESIAN_POINT('',(2.1,0.92,8.E-02)); +#49402 = VERTEX_POINT('',#49403); +#49403 = CARTESIAN_POINT('',(2.1,1.,8.E-02)); +#49404 = LINE('',#49405,#49406); +#49405 = CARTESIAN_POINT('',(2.1,0.694863,8.E-02)); +#49406 = VECTOR('',#49407,1.); +#49407 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#49408 = ORIENTED_EDGE('',*,*,#49409,.T.); +#49409 = EDGE_CURVE('',#49400,#42862,#49410,.T.); +#49410 = LINE('',#49411,#49412); +#49411 = CARTESIAN_POINT('',(2.0488325,0.694863,2.88325E-02)); +#49412 = VECTOR('',#49413,1.); +#49413 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#49414 = ORIENTED_EDGE('',*,*,#42861,.F.); +#49415 = ORIENTED_EDGE('',*,*,#49416,.F.); +#49416 = EDGE_CURVE('',#49402,#42854,#49417,.T.); +#49417 = LINE('',#49418,#49419); +#49418 = CARTESIAN_POINT('',(-13.5,1.,-15.52)); +#49419 = VECTOR('',#49420,1.); +#49420 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#49421 = PLANE('',#49422); +#49422 = AXIS2_PLACEMENT_3D('',#49423,#49424,#49425); +#49423 = CARTESIAN_POINT('',(2.075,0.85,5.5E-02)); +#49424 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#49425 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#49426 = ADVANCED_FACE('',(#49427),#49445,.T.); +#49427 = FACE_BOUND('',#49428,.T.); +#49428 = EDGE_LOOP('',(#49429,#49430,#49431,#49439)); +#49429 = ORIENTED_EDGE('',*,*,#42869,.T.); +#49430 = ORIENTED_EDGE('',*,*,#49409,.F.); +#49431 = ORIENTED_EDGE('',*,*,#49432,.F.); +#49432 = EDGE_CURVE('',#49433,#49400,#49435,.T.); +#49433 = VERTEX_POINT('',#49434); +#49434 = CARTESIAN_POINT('',(2.4,0.92,8.E-02)); +#49435 = LINE('',#49436,#49437); +#49436 = CARTESIAN_POINT('',(-13.5,0.92,8.E-02)); +#49437 = VECTOR('',#49438,1.); +#49438 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49439 = ORIENTED_EDGE('',*,*,#49440,.F.); +#49440 = EDGE_CURVE('',#42870,#49433,#49441,.T.); +#49441 = LINE('',#49442,#49443); +#49442 = CARTESIAN_POINT('',(2.4511675,0.694863,2.88325E-02)); +#49443 = VECTOR('',#49444,1.); +#49444 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#49445 = PLANE('',#49446); +#49446 = AXIS2_PLACEMENT_3D('',#49447,#49448,#49449); +#49447 = CARTESIAN_POINT('',(2.1625,0.92,8.E-02)); +#49448 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#49449 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#49450 = ADVANCED_FACE('',(#49451),#49485,.T.); +#49451 = FACE_BOUND('',#49452,.T.); +#49452 = EDGE_LOOP('',(#49453,#49454,#49455,#49463,#49471,#49479)); +#49453 = ORIENTED_EDGE('',*,*,#49432,.T.); +#49454 = ORIENTED_EDGE('',*,*,#49399,.T.); +#49455 = ORIENTED_EDGE('',*,*,#49456,.F.); +#49456 = EDGE_CURVE('',#49457,#49402,#49459,.T.); +#49457 = VERTEX_POINT('',#49458); +#49458 = CARTESIAN_POINT('',(2.175,1.,8.E-02)); +#49459 = LINE('',#49460,#49461); +#49460 = CARTESIAN_POINT('',(-13.5,1.,8.E-02)); +#49461 = VECTOR('',#49462,1.); +#49462 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49463 = ORIENTED_EDGE('',*,*,#49464,.T.); +#49464 = EDGE_CURVE('',#49457,#49465,#49467,.T.); +#49465 = VERTEX_POINT('',#49466); +#49466 = CARTESIAN_POINT('',(2.325,1.,8.E-02)); +#49467 = LINE('',#49468,#49469); +#49468 = CARTESIAN_POINT('',(7.5,1.,8.E-02)); +#49469 = VECTOR('',#49470,1.); +#49470 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49471 = ORIENTED_EDGE('',*,*,#49472,.F.); +#49472 = EDGE_CURVE('',#49473,#49465,#49475,.T.); +#49473 = VERTEX_POINT('',#49474); +#49474 = CARTESIAN_POINT('',(2.4,1.,8.E-02)); +#49475 = LINE('',#49476,#49477); +#49476 = CARTESIAN_POINT('',(-13.5,1.,8.E-02)); +#49477 = VECTOR('',#49478,1.); +#49478 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49479 = ORIENTED_EDGE('',*,*,#49480,.T.); +#49480 = EDGE_CURVE('',#49473,#49433,#49481,.T.); +#49481 = LINE('',#49482,#49483); +#49482 = CARTESIAN_POINT('',(2.4,0.694863,8.E-02)); +#49483 = VECTOR('',#49484,1.); +#49484 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#49485 = PLANE('',#49486); +#49486 = AXIS2_PLACEMENT_3D('',#49487,#49488,#49489); +#49487 = CARTESIAN_POINT('',(2.1625,1.,8.E-02)); +#49488 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49489 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#49490 = ADVANCED_FACE('',(#49491),#49506,.T.); +#49491 = FACE_BOUND('',#49492,.T.); +#49492 = EDGE_LOOP('',(#49493,#49499,#49500,#49501,#49502,#49503,#49504, + #49505)); +#49493 = ORIENTED_EDGE('',*,*,#49494,.T.); +#49494 = EDGE_CURVE('',#43564,#49457,#49495,.T.); +#49495 = LINE('',#49496,#49497); +#49496 = CARTESIAN_POINT('',(2.175,1.,0.841614)); +#49497 = VECTOR('',#49498,1.); +#49498 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49499 = ORIENTED_EDGE('',*,*,#49456,.T.); +#49500 = ORIENTED_EDGE('',*,*,#49416,.T.); +#49501 = ORIENTED_EDGE('',*,*,#42853,.F.); +#49502 = ORIENTED_EDGE('',*,*,#49383,.T.); +#49503 = ORIENTED_EDGE('',*,*,#49343,.T.); +#49504 = ORIENTED_EDGE('',*,*,#49190,.F.); +#49505 = ORIENTED_EDGE('',*,*,#43571,.T.); +#49506 = PLANE('',#49507); +#49507 = AXIS2_PLACEMENT_3D('',#49508,#49509,#49510); +#49508 = CARTESIAN_POINT('',(5.825,1.,0.31)); +#49509 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#49510 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49511 = ADVANCED_FACE('',(#49512),#49537,.F.); +#49512 = FACE_BOUND('',#49513,.T.); +#49513 = EDGE_LOOP('',(#49514,#49515,#49523,#49531)); +#49514 = ORIENTED_EDGE('',*,*,#49464,.F.); +#49515 = ORIENTED_EDGE('',*,*,#49516,.T.); +#49516 = EDGE_CURVE('',#49457,#49517,#49519,.T.); +#49517 = VERTEX_POINT('',#49518); +#49518 = CARTESIAN_POINT('',(2.175,1.,7.866077735406E-02)); +#49519 = LINE('',#49520,#49521); +#49520 = CARTESIAN_POINT('',(2.175,1.,0.841614)); +#49521 = VECTOR('',#49522,1.); +#49522 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49523 = ORIENTED_EDGE('',*,*,#49524,.F.); +#49524 = EDGE_CURVE('',#49525,#49517,#49527,.T.); +#49525 = VERTEX_POINT('',#49526); +#49526 = CARTESIAN_POINT('',(2.325,1.,7.866077735406E-02)); +#49527 = LINE('',#49528,#49529); +#49528 = CARTESIAN_POINT('',(7.5,1.,7.866077735406E-02)); +#49529 = VECTOR('',#49530,1.); +#49530 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49531 = ORIENTED_EDGE('',*,*,#49532,.F.); +#49532 = EDGE_CURVE('',#49465,#49525,#49533,.T.); +#49533 = LINE('',#49534,#49535); +#49534 = CARTESIAN_POINT('',(2.325,1.,0.841614)); +#49535 = VECTOR('',#49536,1.); +#49536 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49537 = PLANE('',#49538); +#49538 = AXIS2_PLACEMENT_3D('',#49539,#49540,#49541); +#49539 = CARTESIAN_POINT('',(2.325,1.,7.866077735406E-02)); +#49540 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#49541 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49542 = ADVANCED_FACE('',(#49543),#49612,.F.); +#49543 = FACE_BOUND('',#49544,.T.); +#49544 = EDGE_LOOP('',(#49545,#49546,#49547,#49555,#49564,#49572,#49580, + #49588,#49596,#49605,#49611)); +#49545 = ORIENTED_EDGE('',*,*,#49494,.F.); +#49546 = ORIENTED_EDGE('',*,*,#43563,.F.); +#49547 = ORIENTED_EDGE('',*,*,#49548,.F.); +#49548 = EDGE_CURVE('',#49549,#43556,#49551,.T.); +#49549 = VERTEX_POINT('',#49550); +#49550 = CARTESIAN_POINT('',(2.175,1.35,0.16)); +#49551 = LINE('',#49552,#49553); +#49552 = CARTESIAN_POINT('',(2.175,1.35,0.31)); +#49553 = VECTOR('',#49554,1.); +#49554 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49555 = ORIENTED_EDGE('',*,*,#49556,.T.); +#49556 = EDGE_CURVE('',#49549,#49557,#49559,.T.); +#49557 = VERTEX_POINT('',#49558); +#49558 = CARTESIAN_POINT('',(2.175,1.3,0.11)); +#49559 = CIRCLE('',#49560,5.E-02); +#49560 = AXIS2_PLACEMENT_3D('',#49561,#49562,#49563); +#49561 = CARTESIAN_POINT('',(2.175,1.35,0.11)); +#49562 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49563 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49564 = ORIENTED_EDGE('',*,*,#49565,.T.); +#49565 = EDGE_CURVE('',#49557,#49566,#49568,.T.); +#49566 = VERTEX_POINT('',#49567); +#49567 = CARTESIAN_POINT('',(2.175,1.3,5.E-02)); +#49568 = LINE('',#49569,#49570); +#49569 = CARTESIAN_POINT('',(2.175,1.3,0.11)); +#49570 = VECTOR('',#49571,1.); +#49571 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49572 = ORIENTED_EDGE('',*,*,#49573,.T.); +#49573 = EDGE_CURVE('',#49566,#49574,#49576,.T.); +#49574 = VERTEX_POINT('',#49575); +#49575 = CARTESIAN_POINT('',(2.175,1.25,-9.992007221626E-16)); +#49576 = LINE('',#49577,#49578); +#49577 = CARTESIAN_POINT('',(2.175,1.3,5.E-02)); +#49578 = VECTOR('',#49579,1.); +#49579 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#49580 = ORIENTED_EDGE('',*,*,#49581,.F.); +#49581 = EDGE_CURVE('',#49582,#49574,#49584,.T.); +#49582 = VERTEX_POINT('',#49583); +#49583 = CARTESIAN_POINT('',(2.175,0.92,-8.881784197001E-16)); +#49584 = LINE('',#49585,#49586); +#49585 = CARTESIAN_POINT('',(2.175,0.92,-8.881784197001E-16)); +#49586 = VECTOR('',#49587,1.); +#49587 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#49588 = ORIENTED_EDGE('',*,*,#49589,.T.); +#49589 = EDGE_CURVE('',#49582,#49590,#49592,.T.); +#49590 = VERTEX_POINT('',#49591); +#49591 = CARTESIAN_POINT('',(2.175,0.92,3.619548911246E-02)); +#49592 = LINE('',#49593,#49594); +#49593 = CARTESIAN_POINT('',(2.175,0.92,-8.881784197001E-16)); +#49594 = VECTOR('',#49595,1.); +#49595 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49596 = ORIENTED_EDGE('',*,*,#49597,.F.); +#49597 = EDGE_CURVE('',#49598,#49590,#49600,.T.); +#49598 = VERTEX_POINT('',#49599); +#49599 = CARTESIAN_POINT('',(2.175,0.943186633611,6.541154699934E-02)); +#49600 = CIRCLE('',#49601,3.E-02); +#49601 = AXIS2_PLACEMENT_3D('',#49602,#49603,#49604); +#49602 = CARTESIAN_POINT('',(2.175,0.95,3.619548911246E-02)); +#49603 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49604 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49605 = ORIENTED_EDGE('',*,*,#49606,.T.); +#49606 = EDGE_CURVE('',#49598,#49517,#49607,.T.); +#49607 = LINE('',#49608,#49609); +#49608 = CARTESIAN_POINT('',(2.175,0.943186633611,6.541154699934E-02)); +#49609 = VECTOR('',#49610,1.); +#49610 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#49611 = ORIENTED_EDGE('',*,*,#49516,.F.); +#49612 = PLANE('',#49613); +#49613 = AXIS2_PLACEMENT_3D('',#49614,#49615,#49616); +#49614 = CARTESIAN_POINT('',(2.175,1.245779075398,0.170500231015)); +#49615 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49616 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#49617 = ADVANCED_FACE('',(#49618),#49692,.T.); +#49618 = FACE_BOUND('',#49619,.T.); +#49619 = EDGE_LOOP('',(#49620,#49621,#49629,#49638,#49646,#49654,#49662, + #49670,#49679,#49685,#49686)); +#49620 = ORIENTED_EDGE('',*,*,#49532,.T.); +#49621 = ORIENTED_EDGE('',*,*,#49622,.F.); +#49622 = EDGE_CURVE('',#49623,#49525,#49625,.T.); +#49623 = VERTEX_POINT('',#49624); +#49624 = CARTESIAN_POINT('',(2.325,0.943186633611,6.541154699934E-02)); +#49625 = LINE('',#49626,#49627); +#49626 = CARTESIAN_POINT('',(2.325,0.694863,7.500931358165E-03)); +#49627 = VECTOR('',#49628,1.); +#49628 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#49629 = ORIENTED_EDGE('',*,*,#49630,.T.); +#49630 = EDGE_CURVE('',#49623,#49631,#49633,.T.); +#49631 = VERTEX_POINT('',#49632); +#49632 = CARTESIAN_POINT('',(2.325,0.92,3.619548911246E-02)); +#49633 = CIRCLE('',#49634,3.E-02); +#49634 = AXIS2_PLACEMENT_3D('',#49635,#49636,#49637); +#49635 = CARTESIAN_POINT('',(2.325,0.95,3.619548911246E-02)); +#49636 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49637 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49638 = ORIENTED_EDGE('',*,*,#49639,.F.); +#49639 = EDGE_CURVE('',#49640,#49631,#49642,.T.); +#49640 = VERTEX_POINT('',#49641); +#49641 = CARTESIAN_POINT('',(2.325,0.92,-8.881784197001E-16)); +#49642 = LINE('',#49643,#49644); +#49643 = CARTESIAN_POINT('',(2.325,0.92,0.841614)); +#49644 = VECTOR('',#49645,1.); +#49645 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49646 = ORIENTED_EDGE('',*,*,#49647,.F.); +#49647 = EDGE_CURVE('',#49648,#49640,#49650,.T.); +#49648 = VERTEX_POINT('',#49649); +#49649 = CARTESIAN_POINT('',(2.325,1.25,-9.992007221626E-16)); +#49650 = LINE('',#49651,#49652); +#49651 = CARTESIAN_POINT('',(2.325,0.694863,-8.881784197001E-16)); +#49652 = VECTOR('',#49653,1.); +#49653 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#49654 = ORIENTED_EDGE('',*,*,#49655,.F.); +#49655 = EDGE_CURVE('',#49656,#49648,#49658,.T.); +#49656 = VERTEX_POINT('',#49657); +#49657 = CARTESIAN_POINT('',(2.325,1.3,5.E-02)); +#49658 = LINE('',#49659,#49660); +#49659 = CARTESIAN_POINT('',(2.325,0.694863,-0.555137)); +#49660 = VECTOR('',#49661,1.); +#49661 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#49662 = ORIENTED_EDGE('',*,*,#49663,.F.); +#49663 = EDGE_CURVE('',#49664,#49656,#49666,.T.); +#49664 = VERTEX_POINT('',#49665); +#49665 = CARTESIAN_POINT('',(2.325,1.3,0.11)); +#49666 = LINE('',#49667,#49668); +#49667 = CARTESIAN_POINT('',(2.325,1.3,0.841614)); +#49668 = VECTOR('',#49669,1.); +#49669 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49670 = ORIENTED_EDGE('',*,*,#49671,.F.); +#49671 = EDGE_CURVE('',#49672,#49664,#49674,.T.); +#49672 = VERTEX_POINT('',#49673); +#49673 = CARTESIAN_POINT('',(2.325,1.35,0.16)); +#49674 = CIRCLE('',#49675,5.E-02); +#49675 = AXIS2_PLACEMENT_3D('',#49676,#49677,#49678); +#49676 = CARTESIAN_POINT('',(2.325,1.35,0.11)); +#49677 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49678 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49679 = ORIENTED_EDGE('',*,*,#49680,.F.); +#49680 = EDGE_CURVE('',#43548,#49672,#49681,.T.); +#49681 = LINE('',#49682,#49683); +#49682 = CARTESIAN_POINT('',(2.325,1.35,0.841614)); +#49683 = VECTOR('',#49684,1.); +#49684 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49685 = ORIENTED_EDGE('',*,*,#43547,.F.); +#49686 = ORIENTED_EDGE('',*,*,#49687,.T.); +#49687 = EDGE_CURVE('',#43540,#49465,#49688,.T.); +#49688 = LINE('',#49689,#49690); +#49689 = CARTESIAN_POINT('',(2.325,1.,0.841614)); +#49690 = VECTOR('',#49691,1.); +#49691 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49692 = PLANE('',#49693); +#49693 = AXIS2_PLACEMENT_3D('',#49694,#49695,#49696); +#49694 = CARTESIAN_POINT('',(2.325,1.245779075398,0.170500231015)); +#49695 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49696 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#49697 = ADVANCED_FACE('',(#49698),#49732,.T.); +#49698 = FACE_BOUND('',#49699,.T.); +#49699 = EDGE_LOOP('',(#49700,#49708,#49716,#49722,#49723,#49729,#49730, + #49731)); +#49700 = ORIENTED_EDGE('',*,*,#49701,.T.); +#49701 = EDGE_CURVE('',#43532,#49702,#49704,.T.); +#49702 = VERTEX_POINT('',#49703); +#49703 = CARTESIAN_POINT('',(2.675,1.,8.E-02)); +#49704 = LINE('',#49705,#49706); +#49705 = CARTESIAN_POINT('',(2.675,1.,0.841614)); +#49706 = VECTOR('',#49707,1.); +#49707 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49708 = ORIENTED_EDGE('',*,*,#49709,.T.); +#49709 = EDGE_CURVE('',#49702,#49710,#49712,.T.); +#49710 = VERTEX_POINT('',#49711); +#49711 = CARTESIAN_POINT('',(2.6,1.,8.E-02)); +#49712 = LINE('',#49713,#49714); +#49713 = CARTESIAN_POINT('',(-13.,1.,8.E-02)); +#49714 = VECTOR('',#49715,1.); +#49715 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49716 = ORIENTED_EDGE('',*,*,#49717,.T.); +#49717 = EDGE_CURVE('',#49710,#42886,#49718,.T.); +#49718 = LINE('',#49719,#49720); +#49719 = CARTESIAN_POINT('',(-13.,1.,-15.52)); +#49720 = VECTOR('',#49721,1.); +#49721 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#49722 = ORIENTED_EDGE('',*,*,#42885,.F.); +#49723 = ORIENTED_EDGE('',*,*,#49724,.T.); +#49724 = EDGE_CURVE('',#42878,#49473,#49725,.T.); +#49725 = LINE('',#49726,#49727); +#49726 = CARTESIAN_POINT('',(-13.,1.,15.48)); +#49727 = VECTOR('',#49728,1.); +#49728 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#49729 = ORIENTED_EDGE('',*,*,#49472,.T.); +#49730 = ORIENTED_EDGE('',*,*,#49687,.F.); +#49731 = ORIENTED_EDGE('',*,*,#43539,.T.); +#49732 = PLANE('',#49733); +#49733 = AXIS2_PLACEMENT_3D('',#49734,#49735,#49736); +#49734 = CARTESIAN_POINT('',(6.325,1.,0.31)); +#49735 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#49736 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49737 = ADVANCED_FACE('',(#49738),#49814,.F.); +#49738 = FACE_BOUND('',#49739,.T.); +#49739 = EDGE_LOOP('',(#49740,#49741,#49742,#49750,#49759,#49767,#49775, + #49783,#49791,#49800,#49808)); +#49740 = ORIENTED_EDGE('',*,*,#49701,.F.); +#49741 = ORIENTED_EDGE('',*,*,#43531,.F.); +#49742 = ORIENTED_EDGE('',*,*,#49743,.F.); +#49743 = EDGE_CURVE('',#49744,#43524,#49746,.T.); +#49744 = VERTEX_POINT('',#49745); +#49745 = CARTESIAN_POINT('',(2.675,1.35,0.16)); +#49746 = LINE('',#49747,#49748); +#49747 = CARTESIAN_POINT('',(2.675,1.35,0.31)); +#49748 = VECTOR('',#49749,1.); +#49749 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49750 = ORIENTED_EDGE('',*,*,#49751,.T.); +#49751 = EDGE_CURVE('',#49744,#49752,#49754,.T.); +#49752 = VERTEX_POINT('',#49753); +#49753 = CARTESIAN_POINT('',(2.675,1.3,0.11)); +#49754 = CIRCLE('',#49755,5.E-02); +#49755 = AXIS2_PLACEMENT_3D('',#49756,#49757,#49758); +#49756 = CARTESIAN_POINT('',(2.675,1.35,0.11)); +#49757 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49758 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49759 = ORIENTED_EDGE('',*,*,#49760,.T.); +#49760 = EDGE_CURVE('',#49752,#49761,#49763,.T.); +#49761 = VERTEX_POINT('',#49762); +#49762 = CARTESIAN_POINT('',(2.675,1.3,5.E-02)); +#49763 = LINE('',#49764,#49765); +#49764 = CARTESIAN_POINT('',(2.675,1.3,0.11)); +#49765 = VECTOR('',#49766,1.); +#49766 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49767 = ORIENTED_EDGE('',*,*,#49768,.T.); +#49768 = EDGE_CURVE('',#49761,#49769,#49771,.T.); +#49769 = VERTEX_POINT('',#49770); +#49770 = CARTESIAN_POINT('',(2.675,1.25,-1.110223024625E-15)); +#49771 = LINE('',#49772,#49773); +#49772 = CARTESIAN_POINT('',(2.675,1.3,5.E-02)); +#49773 = VECTOR('',#49774,1.); +#49774 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#49775 = ORIENTED_EDGE('',*,*,#49776,.F.); +#49776 = EDGE_CURVE('',#49777,#49769,#49779,.T.); +#49777 = VERTEX_POINT('',#49778); +#49778 = CARTESIAN_POINT('',(2.675,0.92,-9.992007221626E-16)); +#49779 = LINE('',#49780,#49781); +#49780 = CARTESIAN_POINT('',(2.675,0.92,-9.992007221626E-16)); +#49781 = VECTOR('',#49782,1.); +#49782 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#49783 = ORIENTED_EDGE('',*,*,#49784,.T.); +#49784 = EDGE_CURVE('',#49777,#49785,#49787,.T.); +#49785 = VERTEX_POINT('',#49786); +#49786 = CARTESIAN_POINT('',(2.675,0.92,3.619548911246E-02)); +#49787 = LINE('',#49788,#49789); +#49788 = CARTESIAN_POINT('',(2.675,0.92,-9.992007221626E-16)); +#49789 = VECTOR('',#49790,1.); +#49790 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49791 = ORIENTED_EDGE('',*,*,#49792,.F.); +#49792 = EDGE_CURVE('',#49793,#49785,#49795,.T.); +#49793 = VERTEX_POINT('',#49794); +#49794 = CARTESIAN_POINT('',(2.675,0.943186633611,6.541154699934E-02)); +#49795 = CIRCLE('',#49796,3.E-02); +#49796 = AXIS2_PLACEMENT_3D('',#49797,#49798,#49799); +#49797 = CARTESIAN_POINT('',(2.675,0.95,3.619548911246E-02)); +#49798 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49799 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49800 = ORIENTED_EDGE('',*,*,#49801,.T.); +#49801 = EDGE_CURVE('',#49793,#49802,#49804,.T.); +#49802 = VERTEX_POINT('',#49803); +#49803 = CARTESIAN_POINT('',(2.675,1.,7.866077735406E-02)); +#49804 = LINE('',#49805,#49806); +#49805 = CARTESIAN_POINT('',(2.675,0.943186633611,6.541154699934E-02)); +#49806 = VECTOR('',#49807,1.); +#49807 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#49808 = ORIENTED_EDGE('',*,*,#49809,.F.); +#49809 = EDGE_CURVE('',#49702,#49802,#49810,.T.); +#49810 = LINE('',#49811,#49812); +#49811 = CARTESIAN_POINT('',(2.675,1.,0.841614)); +#49812 = VECTOR('',#49813,1.); +#49813 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49814 = PLANE('',#49815); +#49815 = AXIS2_PLACEMENT_3D('',#49816,#49817,#49818); +#49816 = CARTESIAN_POINT('',(2.675,1.245779075398,0.170500231015)); +#49817 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49818 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#49819 = ADVANCED_FACE('',(#49820),#49845,.F.); +#49820 = FACE_BOUND('',#49821,.T.); +#49821 = EDGE_LOOP('',(#49822,#49830,#49831,#49839)); +#49822 = ORIENTED_EDGE('',*,*,#49823,.F.); +#49823 = EDGE_CURVE('',#49702,#49824,#49826,.T.); +#49824 = VERTEX_POINT('',#49825); +#49825 = CARTESIAN_POINT('',(2.825,1.,8.E-02)); +#49826 = LINE('',#49827,#49828); +#49827 = CARTESIAN_POINT('',(8.,1.,8.E-02)); +#49828 = VECTOR('',#49829,1.); +#49829 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49830 = ORIENTED_EDGE('',*,*,#49809,.T.); +#49831 = ORIENTED_EDGE('',*,*,#49832,.F.); +#49832 = EDGE_CURVE('',#49833,#49802,#49835,.T.); +#49833 = VERTEX_POINT('',#49834); +#49834 = CARTESIAN_POINT('',(2.825,1.,7.866077735406E-02)); +#49835 = LINE('',#49836,#49837); +#49836 = CARTESIAN_POINT('',(8.,1.,7.866077735406E-02)); +#49837 = VECTOR('',#49838,1.); +#49838 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49839 = ORIENTED_EDGE('',*,*,#49840,.F.); +#49840 = EDGE_CURVE('',#49824,#49833,#49841,.T.); +#49841 = LINE('',#49842,#49843); +#49842 = CARTESIAN_POINT('',(2.825,1.,0.841614)); +#49843 = VECTOR('',#49844,1.); +#49844 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49845 = PLANE('',#49846); +#49846 = AXIS2_PLACEMENT_3D('',#49847,#49848,#49849); +#49847 = CARTESIAN_POINT('',(2.825,1.,7.866077735406E-02)); +#49848 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#49849 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49850 = ADVANCED_FACE('',(#49851),#49925,.T.); +#49851 = FACE_BOUND('',#49852,.T.); +#49852 = EDGE_LOOP('',(#49853,#49854,#49862,#49871,#49879,#49887,#49895, + #49903,#49912,#49918,#49919)); +#49853 = ORIENTED_EDGE('',*,*,#49840,.T.); +#49854 = ORIENTED_EDGE('',*,*,#49855,.F.); +#49855 = EDGE_CURVE('',#49856,#49833,#49858,.T.); +#49856 = VERTEX_POINT('',#49857); +#49857 = CARTESIAN_POINT('',(2.825,0.943186633611,6.541154699934E-02)); +#49858 = LINE('',#49859,#49860); +#49859 = CARTESIAN_POINT('',(2.825,0.694863,7.500931358165E-03)); +#49860 = VECTOR('',#49861,1.); +#49861 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#49862 = ORIENTED_EDGE('',*,*,#49863,.T.); +#49863 = EDGE_CURVE('',#49856,#49864,#49866,.T.); +#49864 = VERTEX_POINT('',#49865); +#49865 = CARTESIAN_POINT('',(2.825,0.92,3.619548911246E-02)); +#49866 = CIRCLE('',#49867,3.E-02); +#49867 = AXIS2_PLACEMENT_3D('',#49868,#49869,#49870); +#49868 = CARTESIAN_POINT('',(2.825,0.95,3.619548911246E-02)); +#49869 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49870 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49871 = ORIENTED_EDGE('',*,*,#49872,.F.); +#49872 = EDGE_CURVE('',#49873,#49864,#49875,.T.); +#49873 = VERTEX_POINT('',#49874); +#49874 = CARTESIAN_POINT('',(2.825,0.92,-9.992007221626E-16)); +#49875 = LINE('',#49876,#49877); +#49876 = CARTESIAN_POINT('',(2.825,0.92,0.841614)); +#49877 = VECTOR('',#49878,1.); +#49878 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#49879 = ORIENTED_EDGE('',*,*,#49880,.F.); +#49880 = EDGE_CURVE('',#49881,#49873,#49883,.T.); +#49881 = VERTEX_POINT('',#49882); +#49882 = CARTESIAN_POINT('',(2.825,1.25,-1.110223024625E-15)); +#49883 = LINE('',#49884,#49885); +#49884 = CARTESIAN_POINT('',(2.825,0.694863,-9.992007221626E-16)); +#49885 = VECTOR('',#49886,1.); +#49886 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#49887 = ORIENTED_EDGE('',*,*,#49888,.F.); +#49888 = EDGE_CURVE('',#49889,#49881,#49891,.T.); +#49889 = VERTEX_POINT('',#49890); +#49890 = CARTESIAN_POINT('',(2.825,1.3,5.E-02)); +#49891 = LINE('',#49892,#49893); +#49892 = CARTESIAN_POINT('',(2.825,0.694863,-0.555137)); +#49893 = VECTOR('',#49894,1.); +#49894 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#49895 = ORIENTED_EDGE('',*,*,#49896,.F.); +#49896 = EDGE_CURVE('',#49897,#49889,#49899,.T.); +#49897 = VERTEX_POINT('',#49898); +#49898 = CARTESIAN_POINT('',(2.825,1.3,0.11)); +#49899 = LINE('',#49900,#49901); +#49900 = CARTESIAN_POINT('',(2.825,1.3,0.841614)); +#49901 = VECTOR('',#49902,1.); +#49902 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49903 = ORIENTED_EDGE('',*,*,#49904,.F.); +#49904 = EDGE_CURVE('',#49905,#49897,#49907,.T.); +#49905 = VERTEX_POINT('',#49906); +#49906 = CARTESIAN_POINT('',(2.825,1.35,0.16)); +#49907 = CIRCLE('',#49908,5.E-02); +#49908 = AXIS2_PLACEMENT_3D('',#49909,#49910,#49911); +#49909 = CARTESIAN_POINT('',(2.825,1.35,0.11)); +#49910 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49911 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#49912 = ORIENTED_EDGE('',*,*,#49913,.F.); +#49913 = EDGE_CURVE('',#43516,#49905,#49914,.T.); +#49914 = LINE('',#49915,#49916); +#49915 = CARTESIAN_POINT('',(2.825,1.35,0.841614)); +#49916 = VECTOR('',#49917,1.); +#49917 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49918 = ORIENTED_EDGE('',*,*,#43515,.F.); +#49919 = ORIENTED_EDGE('',*,*,#49920,.T.); +#49920 = EDGE_CURVE('',#43508,#49824,#49921,.T.); +#49921 = LINE('',#49922,#49923); +#49922 = CARTESIAN_POINT('',(2.825,1.,0.841614)); +#49923 = VECTOR('',#49924,1.); +#49924 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#49925 = PLANE('',#49926); +#49926 = AXIS2_PLACEMENT_3D('',#49927,#49928,#49929); +#49927 = CARTESIAN_POINT('',(2.825,1.245779075398,0.170500231015)); +#49928 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#49929 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#49930 = ADVANCED_FACE('',(#49931),#49949,.T.); +#49931 = FACE_BOUND('',#49932,.T.); +#49932 = EDGE_LOOP('',(#49933,#49941,#49947,#49948)); +#49933 = ORIENTED_EDGE('',*,*,#49934,.F.); +#49934 = EDGE_CURVE('',#49935,#49710,#49937,.T.); +#49935 = VERTEX_POINT('',#49936); +#49936 = CARTESIAN_POINT('',(2.6,0.92,8.E-02)); +#49937 = LINE('',#49938,#49939); +#49938 = CARTESIAN_POINT('',(2.6,0.694863,8.E-02)); +#49939 = VECTOR('',#49940,1.); +#49940 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#49941 = ORIENTED_EDGE('',*,*,#49942,.T.); +#49942 = EDGE_CURVE('',#49935,#42894,#49943,.T.); +#49943 = LINE('',#49944,#49945); +#49944 = CARTESIAN_POINT('',(2.5488325,0.694863,2.88325E-02)); +#49945 = VECTOR('',#49946,1.); +#49946 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#49947 = ORIENTED_EDGE('',*,*,#42893,.F.); +#49948 = ORIENTED_EDGE('',*,*,#49717,.F.); +#49949 = PLANE('',#49950); +#49950 = AXIS2_PLACEMENT_3D('',#49951,#49952,#49953); +#49951 = CARTESIAN_POINT('',(2.575,0.85,5.5E-02)); +#49952 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#49953 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#49954 = ADVANCED_FACE('',(#49955),#49982,.T.); +#49955 = FACE_BOUND('',#49956,.T.); +#49956 = EDGE_LOOP('',(#49957,#49965,#49966,#49967,#49968,#49976)); +#49957 = ORIENTED_EDGE('',*,*,#49958,.T.); +#49958 = EDGE_CURVE('',#49959,#49935,#49961,.T.); +#49959 = VERTEX_POINT('',#49960); +#49960 = CARTESIAN_POINT('',(2.9,0.92,8.E-02)); +#49961 = LINE('',#49962,#49963); +#49962 = CARTESIAN_POINT('',(-13.,0.92,8.E-02)); +#49963 = VECTOR('',#49964,1.); +#49964 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49965 = ORIENTED_EDGE('',*,*,#49934,.T.); +#49966 = ORIENTED_EDGE('',*,*,#49709,.F.); +#49967 = ORIENTED_EDGE('',*,*,#49823,.T.); +#49968 = ORIENTED_EDGE('',*,*,#49969,.F.); +#49969 = EDGE_CURVE('',#49970,#49824,#49972,.T.); +#49970 = VERTEX_POINT('',#49971); +#49971 = CARTESIAN_POINT('',(2.9,1.,8.E-02)); +#49972 = LINE('',#49973,#49974); +#49973 = CARTESIAN_POINT('',(-13.,1.,8.E-02)); +#49974 = VECTOR('',#49975,1.); +#49975 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#49976 = ORIENTED_EDGE('',*,*,#49977,.T.); +#49977 = EDGE_CURVE('',#49970,#49959,#49978,.T.); +#49978 = LINE('',#49979,#49980); +#49979 = CARTESIAN_POINT('',(2.9,0.694863,8.E-02)); +#49980 = VECTOR('',#49981,1.); +#49981 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#49982 = PLANE('',#49983); +#49983 = AXIS2_PLACEMENT_3D('',#49984,#49985,#49986); +#49984 = CARTESIAN_POINT('',(2.6625,1.,8.E-02)); +#49985 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#49986 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#49987 = ADVANCED_FACE('',(#49988),#49999,.T.); +#49988 = FACE_BOUND('',#49989,.T.); +#49989 = EDGE_LOOP('',(#49990,#49991,#49992,#49993)); +#49990 = ORIENTED_EDGE('',*,*,#42901,.T.); +#49991 = ORIENTED_EDGE('',*,*,#49942,.F.); +#49992 = ORIENTED_EDGE('',*,*,#49958,.F.); +#49993 = ORIENTED_EDGE('',*,*,#49994,.F.); +#49994 = EDGE_CURVE('',#42902,#49959,#49995,.T.); +#49995 = LINE('',#49996,#49997); +#49996 = CARTESIAN_POINT('',(2.9511675,0.694863,2.88325E-02)); +#49997 = VECTOR('',#49998,1.); +#49998 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#49999 = PLANE('',#50000); +#50000 = AXIS2_PLACEMENT_3D('',#50001,#50002,#50003); +#50001 = CARTESIAN_POINT('',(2.6625,0.92,8.E-02)); +#50002 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#50003 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#50004 = ADVANCED_FACE('',(#50005),#50016,.T.); +#50005 = FACE_BOUND('',#50006,.T.); +#50006 = EDGE_LOOP('',(#50007,#50008,#50014,#50015)); +#50007 = ORIENTED_EDGE('',*,*,#49977,.F.); +#50008 = ORIENTED_EDGE('',*,*,#50009,.F.); +#50009 = EDGE_CURVE('',#42910,#49970,#50010,.T.); +#50010 = LINE('',#50011,#50012); +#50011 = CARTESIAN_POINT('',(-12.5,1.,15.48)); +#50012 = VECTOR('',#50013,1.); +#50013 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#50014 = ORIENTED_EDGE('',*,*,#42909,.F.); +#50015 = ORIENTED_EDGE('',*,*,#49994,.T.); +#50016 = PLANE('',#50017); +#50017 = AXIS2_PLACEMENT_3D('',#50018,#50019,#50020); +#50018 = CARTESIAN_POINT('',(2.925,0.85,5.5E-02)); +#50019 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#50020 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#50021 = ADVANCED_FACE('',(#50022),#50047,.T.); +#50022 = FACE_BOUND('',#50023,.T.); +#50023 = EDGE_LOOP('',(#50024,#50034,#50040,#50041)); +#50024 = ORIENTED_EDGE('',*,*,#50025,.F.); +#50025 = EDGE_CURVE('',#50026,#50028,#50030,.T.); +#50026 = VERTEX_POINT('',#50027); +#50027 = CARTESIAN_POINT('',(3.1,0.92,8.E-02)); +#50028 = VERTEX_POINT('',#50029); +#50029 = CARTESIAN_POINT('',(3.1,1.,8.E-02)); +#50030 = LINE('',#50031,#50032); +#50031 = CARTESIAN_POINT('',(3.1,0.694863,8.E-02)); +#50032 = VECTOR('',#50033,1.); +#50033 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#50034 = ORIENTED_EDGE('',*,*,#50035,.T.); +#50035 = EDGE_CURVE('',#50026,#42926,#50036,.T.); +#50036 = LINE('',#50037,#50038); +#50037 = CARTESIAN_POINT('',(3.0488325,0.694863,2.88325E-02)); +#50038 = VECTOR('',#50039,1.); +#50039 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#50040 = ORIENTED_EDGE('',*,*,#42925,.F.); +#50041 = ORIENTED_EDGE('',*,*,#50042,.F.); +#50042 = EDGE_CURVE('',#50028,#42918,#50043,.T.); +#50043 = LINE('',#50044,#50045); +#50044 = CARTESIAN_POINT('',(-12.5,1.,-15.52)); +#50045 = VECTOR('',#50046,1.); +#50046 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#50047 = PLANE('',#50048); +#50048 = AXIS2_PLACEMENT_3D('',#50049,#50050,#50051); +#50049 = CARTESIAN_POINT('',(3.075,0.85,5.5E-02)); +#50050 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#50051 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#50052 = ADVANCED_FACE('',(#50053),#50071,.T.); +#50053 = FACE_BOUND('',#50054,.T.); +#50054 = EDGE_LOOP('',(#50055,#50056,#50057,#50065)); +#50055 = ORIENTED_EDGE('',*,*,#42933,.T.); +#50056 = ORIENTED_EDGE('',*,*,#50035,.F.); +#50057 = ORIENTED_EDGE('',*,*,#50058,.F.); +#50058 = EDGE_CURVE('',#50059,#50026,#50061,.T.); +#50059 = VERTEX_POINT('',#50060); +#50060 = CARTESIAN_POINT('',(3.4,0.92,8.E-02)); +#50061 = LINE('',#50062,#50063); +#50062 = CARTESIAN_POINT('',(-12.5,0.92,8.E-02)); +#50063 = VECTOR('',#50064,1.); +#50064 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50065 = ORIENTED_EDGE('',*,*,#50066,.F.); +#50066 = EDGE_CURVE('',#42934,#50059,#50067,.T.); +#50067 = LINE('',#50068,#50069); +#50068 = CARTESIAN_POINT('',(3.4511675,0.694863,2.88325E-02)); +#50069 = VECTOR('',#50070,1.); +#50070 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#50071 = PLANE('',#50072); +#50072 = AXIS2_PLACEMENT_3D('',#50073,#50074,#50075); +#50073 = CARTESIAN_POINT('',(3.1625,0.92,8.E-02)); +#50074 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#50075 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#50076 = ADVANCED_FACE('',(#50077),#50111,.T.); +#50077 = FACE_BOUND('',#50078,.T.); +#50078 = EDGE_LOOP('',(#50079,#50080,#50081,#50089,#50097,#50105)); +#50079 = ORIENTED_EDGE('',*,*,#50058,.T.); +#50080 = ORIENTED_EDGE('',*,*,#50025,.T.); +#50081 = ORIENTED_EDGE('',*,*,#50082,.F.); +#50082 = EDGE_CURVE('',#50083,#50028,#50085,.T.); +#50083 = VERTEX_POINT('',#50084); +#50084 = CARTESIAN_POINT('',(3.175,1.,8.E-02)); +#50085 = LINE('',#50086,#50087); +#50086 = CARTESIAN_POINT('',(-12.5,1.,8.E-02)); +#50087 = VECTOR('',#50088,1.); +#50088 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50089 = ORIENTED_EDGE('',*,*,#50090,.T.); +#50090 = EDGE_CURVE('',#50083,#50091,#50093,.T.); +#50091 = VERTEX_POINT('',#50092); +#50092 = CARTESIAN_POINT('',(3.325,1.,8.E-02)); +#50093 = LINE('',#50094,#50095); +#50094 = CARTESIAN_POINT('',(8.5,1.,8.E-02)); +#50095 = VECTOR('',#50096,1.); +#50096 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50097 = ORIENTED_EDGE('',*,*,#50098,.F.); +#50098 = EDGE_CURVE('',#50099,#50091,#50101,.T.); +#50099 = VERTEX_POINT('',#50100); +#50100 = CARTESIAN_POINT('',(3.4,1.,8.E-02)); +#50101 = LINE('',#50102,#50103); +#50102 = CARTESIAN_POINT('',(-12.5,1.,8.E-02)); +#50103 = VECTOR('',#50104,1.); +#50104 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50105 = ORIENTED_EDGE('',*,*,#50106,.T.); +#50106 = EDGE_CURVE('',#50099,#50059,#50107,.T.); +#50107 = LINE('',#50108,#50109); +#50108 = CARTESIAN_POINT('',(3.4,0.694863,8.E-02)); +#50109 = VECTOR('',#50110,1.); +#50110 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#50111 = PLANE('',#50112); +#50112 = AXIS2_PLACEMENT_3D('',#50113,#50114,#50115); +#50113 = CARTESIAN_POINT('',(3.1625,1.,8.E-02)); +#50114 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50115 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#50116 = ADVANCED_FACE('',(#50117),#50132,.T.); +#50117 = FACE_BOUND('',#50118,.T.); +#50118 = EDGE_LOOP('',(#50119,#50125,#50126,#50127,#50128,#50129,#50130, + #50131)); +#50119 = ORIENTED_EDGE('',*,*,#50120,.T.); +#50120 = EDGE_CURVE('',#43500,#50083,#50121,.T.); +#50121 = LINE('',#50122,#50123); +#50122 = CARTESIAN_POINT('',(3.175,1.,0.841614)); +#50123 = VECTOR('',#50124,1.); +#50124 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50125 = ORIENTED_EDGE('',*,*,#50082,.T.); +#50126 = ORIENTED_EDGE('',*,*,#50042,.T.); +#50127 = ORIENTED_EDGE('',*,*,#42917,.F.); +#50128 = ORIENTED_EDGE('',*,*,#50009,.T.); +#50129 = ORIENTED_EDGE('',*,*,#49969,.T.); +#50130 = ORIENTED_EDGE('',*,*,#49920,.F.); +#50131 = ORIENTED_EDGE('',*,*,#43507,.T.); +#50132 = PLANE('',#50133); +#50133 = AXIS2_PLACEMENT_3D('',#50134,#50135,#50136); +#50134 = CARTESIAN_POINT('',(6.825,1.,0.31)); +#50135 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#50136 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50137 = ADVANCED_FACE('',(#50138),#50219,.T.); +#50138 = FACE_BOUND('',#50139,.T.); +#50139 = EDGE_LOOP('',(#50140,#50148,#50156,#50165,#50173,#50181,#50189, + #50197,#50206,#50212,#50213)); +#50140 = ORIENTED_EDGE('',*,*,#50141,.T.); +#50141 = EDGE_CURVE('',#50091,#50142,#50144,.T.); +#50142 = VERTEX_POINT('',#50143); +#50143 = CARTESIAN_POINT('',(3.325,1.,7.866077735406E-02)); +#50144 = LINE('',#50145,#50146); +#50145 = CARTESIAN_POINT('',(3.325,1.,0.841614)); +#50146 = VECTOR('',#50147,1.); +#50147 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50148 = ORIENTED_EDGE('',*,*,#50149,.F.); +#50149 = EDGE_CURVE('',#50150,#50142,#50152,.T.); +#50150 = VERTEX_POINT('',#50151); +#50151 = CARTESIAN_POINT('',(3.325,0.943186633611,6.541154699934E-02)); +#50152 = LINE('',#50153,#50154); +#50153 = CARTESIAN_POINT('',(3.325,0.694863,7.500931358165E-03)); +#50154 = VECTOR('',#50155,1.); +#50155 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#50156 = ORIENTED_EDGE('',*,*,#50157,.T.); +#50157 = EDGE_CURVE('',#50150,#50158,#50160,.T.); +#50158 = VERTEX_POINT('',#50159); +#50159 = CARTESIAN_POINT('',(3.325,0.92,3.619548911246E-02)); +#50160 = CIRCLE('',#50161,3.E-02); +#50161 = AXIS2_PLACEMENT_3D('',#50162,#50163,#50164); +#50162 = CARTESIAN_POINT('',(3.325,0.95,3.619548911246E-02)); +#50163 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50164 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50165 = ORIENTED_EDGE('',*,*,#50166,.F.); +#50166 = EDGE_CURVE('',#50167,#50158,#50169,.T.); +#50167 = VERTEX_POINT('',#50168); +#50168 = CARTESIAN_POINT('',(3.325,0.92,-1.110223024625E-15)); +#50169 = LINE('',#50170,#50171); +#50170 = CARTESIAN_POINT('',(3.325,0.92,0.841614)); +#50171 = VECTOR('',#50172,1.); +#50172 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#50173 = ORIENTED_EDGE('',*,*,#50174,.F.); +#50174 = EDGE_CURVE('',#50175,#50167,#50177,.T.); +#50175 = VERTEX_POINT('',#50176); +#50176 = CARTESIAN_POINT('',(3.325,1.25,-1.221245327088E-15)); +#50177 = LINE('',#50178,#50179); +#50178 = CARTESIAN_POINT('',(3.325,0.694863,-1.110223024625E-15)); +#50179 = VECTOR('',#50180,1.); +#50180 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#50181 = ORIENTED_EDGE('',*,*,#50182,.F.); +#50182 = EDGE_CURVE('',#50183,#50175,#50185,.T.); +#50183 = VERTEX_POINT('',#50184); +#50184 = CARTESIAN_POINT('',(3.325,1.3,5.E-02)); +#50185 = LINE('',#50186,#50187); +#50186 = CARTESIAN_POINT('',(3.325,0.694863,-0.555137)); +#50187 = VECTOR('',#50188,1.); +#50188 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#50189 = ORIENTED_EDGE('',*,*,#50190,.F.); +#50190 = EDGE_CURVE('',#50191,#50183,#50193,.T.); +#50191 = VERTEX_POINT('',#50192); +#50192 = CARTESIAN_POINT('',(3.325,1.3,0.11)); +#50193 = LINE('',#50194,#50195); +#50194 = CARTESIAN_POINT('',(3.325,1.3,0.841614)); +#50195 = VECTOR('',#50196,1.); +#50196 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50197 = ORIENTED_EDGE('',*,*,#50198,.F.); +#50198 = EDGE_CURVE('',#50199,#50191,#50201,.T.); +#50199 = VERTEX_POINT('',#50200); +#50200 = CARTESIAN_POINT('',(3.325,1.35,0.16)); +#50201 = CIRCLE('',#50202,5.E-02); +#50202 = AXIS2_PLACEMENT_3D('',#50203,#50204,#50205); +#50203 = CARTESIAN_POINT('',(3.325,1.35,0.11)); +#50204 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50205 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50206 = ORIENTED_EDGE('',*,*,#50207,.F.); +#50207 = EDGE_CURVE('',#43484,#50199,#50208,.T.); +#50208 = LINE('',#50209,#50210); +#50209 = CARTESIAN_POINT('',(3.325,1.35,0.841614)); +#50210 = VECTOR('',#50211,1.); +#50211 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50212 = ORIENTED_EDGE('',*,*,#43483,.F.); +#50213 = ORIENTED_EDGE('',*,*,#50214,.T.); +#50214 = EDGE_CURVE('',#43476,#50091,#50215,.T.); +#50215 = LINE('',#50216,#50217); +#50216 = CARTESIAN_POINT('',(3.325,1.,0.841614)); +#50217 = VECTOR('',#50218,1.); +#50218 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50219 = PLANE('',#50220); +#50220 = AXIS2_PLACEMENT_3D('',#50221,#50222,#50223); +#50221 = CARTESIAN_POINT('',(3.325,1.245779075398,0.170500231015)); +#50222 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50223 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#50224 = ADVANCED_FACE('',(#50225),#50243,.F.); +#50225 = FACE_BOUND('',#50226,.T.); +#50226 = EDGE_LOOP('',(#50227,#50228,#50236,#50242)); +#50227 = ORIENTED_EDGE('',*,*,#50090,.F.); +#50228 = ORIENTED_EDGE('',*,*,#50229,.T.); +#50229 = EDGE_CURVE('',#50083,#50230,#50232,.T.); +#50230 = VERTEX_POINT('',#50231); +#50231 = CARTESIAN_POINT('',(3.175,1.,7.866077735406E-02)); +#50232 = LINE('',#50233,#50234); +#50233 = CARTESIAN_POINT('',(3.175,1.,0.841614)); +#50234 = VECTOR('',#50235,1.); +#50235 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50236 = ORIENTED_EDGE('',*,*,#50237,.F.); +#50237 = EDGE_CURVE('',#50142,#50230,#50238,.T.); +#50238 = LINE('',#50239,#50240); +#50239 = CARTESIAN_POINT('',(8.5,1.,7.866077735406E-02)); +#50240 = VECTOR('',#50241,1.); +#50241 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50242 = ORIENTED_EDGE('',*,*,#50141,.F.); +#50243 = PLANE('',#50244); +#50244 = AXIS2_PLACEMENT_3D('',#50245,#50246,#50247); +#50245 = CARTESIAN_POINT('',(3.325,1.,7.866077735406E-02)); +#50246 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#50247 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50248 = ADVANCED_FACE('',(#50249),#50318,.F.); +#50249 = FACE_BOUND('',#50250,.T.); +#50250 = EDGE_LOOP('',(#50251,#50252,#50253,#50261,#50270,#50278,#50286, + #50294,#50302,#50311,#50317)); +#50251 = ORIENTED_EDGE('',*,*,#50120,.F.); +#50252 = ORIENTED_EDGE('',*,*,#43499,.F.); +#50253 = ORIENTED_EDGE('',*,*,#50254,.F.); +#50254 = EDGE_CURVE('',#50255,#43492,#50257,.T.); +#50255 = VERTEX_POINT('',#50256); +#50256 = CARTESIAN_POINT('',(3.175,1.35,0.16)); +#50257 = LINE('',#50258,#50259); +#50258 = CARTESIAN_POINT('',(3.175,1.35,0.31)); +#50259 = VECTOR('',#50260,1.); +#50260 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#50261 = ORIENTED_EDGE('',*,*,#50262,.T.); +#50262 = EDGE_CURVE('',#50255,#50263,#50265,.T.); +#50263 = VERTEX_POINT('',#50264); +#50264 = CARTESIAN_POINT('',(3.175,1.3,0.11)); +#50265 = CIRCLE('',#50266,5.E-02); +#50266 = AXIS2_PLACEMENT_3D('',#50267,#50268,#50269); +#50267 = CARTESIAN_POINT('',(3.175,1.35,0.11)); +#50268 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50269 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50270 = ORIENTED_EDGE('',*,*,#50271,.T.); +#50271 = EDGE_CURVE('',#50263,#50272,#50274,.T.); +#50272 = VERTEX_POINT('',#50273); +#50273 = CARTESIAN_POINT('',(3.175,1.3,5.E-02)); +#50274 = LINE('',#50275,#50276); +#50275 = CARTESIAN_POINT('',(3.175,1.3,0.11)); +#50276 = VECTOR('',#50277,1.); +#50277 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50278 = ORIENTED_EDGE('',*,*,#50279,.T.); +#50279 = EDGE_CURVE('',#50272,#50280,#50282,.T.); +#50280 = VERTEX_POINT('',#50281); +#50281 = CARTESIAN_POINT('',(3.175,1.25,-1.221245327088E-15)); +#50282 = LINE('',#50283,#50284); +#50283 = CARTESIAN_POINT('',(3.175,1.3,5.E-02)); +#50284 = VECTOR('',#50285,1.); +#50285 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#50286 = ORIENTED_EDGE('',*,*,#50287,.F.); +#50287 = EDGE_CURVE('',#50288,#50280,#50290,.T.); +#50288 = VERTEX_POINT('',#50289); +#50289 = CARTESIAN_POINT('',(3.175,0.92,-1.110223024625E-15)); +#50290 = LINE('',#50291,#50292); +#50291 = CARTESIAN_POINT('',(3.175,0.92,-1.110223024625E-15)); +#50292 = VECTOR('',#50293,1.); +#50293 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#50294 = ORIENTED_EDGE('',*,*,#50295,.T.); +#50295 = EDGE_CURVE('',#50288,#50296,#50298,.T.); +#50296 = VERTEX_POINT('',#50297); +#50297 = CARTESIAN_POINT('',(3.175,0.92,3.619548911246E-02)); +#50298 = LINE('',#50299,#50300); +#50299 = CARTESIAN_POINT('',(3.175,0.92,-1.110223024625E-15)); +#50300 = VECTOR('',#50301,1.); +#50301 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#50302 = ORIENTED_EDGE('',*,*,#50303,.F.); +#50303 = EDGE_CURVE('',#50304,#50296,#50306,.T.); +#50304 = VERTEX_POINT('',#50305); +#50305 = CARTESIAN_POINT('',(3.175,0.943186633611,6.541154699934E-02)); +#50306 = CIRCLE('',#50307,3.E-02); +#50307 = AXIS2_PLACEMENT_3D('',#50308,#50309,#50310); +#50308 = CARTESIAN_POINT('',(3.175,0.95,3.619548911246E-02)); +#50309 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50310 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50311 = ORIENTED_EDGE('',*,*,#50312,.T.); +#50312 = EDGE_CURVE('',#50304,#50230,#50313,.T.); +#50313 = LINE('',#50314,#50315); +#50314 = CARTESIAN_POINT('',(3.175,0.943186633611,6.541154699934E-02)); +#50315 = VECTOR('',#50316,1.); +#50316 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#50317 = ORIENTED_EDGE('',*,*,#50229,.F.); +#50318 = PLANE('',#50319); +#50319 = AXIS2_PLACEMENT_3D('',#50320,#50321,#50322); +#50320 = CARTESIAN_POINT('',(3.175,1.245779075398,0.170500231015)); +#50321 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50322 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#50323 = ADVANCED_FACE('',(#50324),#50358,.T.); +#50324 = FACE_BOUND('',#50325,.T.); +#50325 = EDGE_LOOP('',(#50326,#50334,#50342,#50348,#50349,#50355,#50356, + #50357)); +#50326 = ORIENTED_EDGE('',*,*,#50327,.T.); +#50327 = EDGE_CURVE('',#43468,#50328,#50330,.T.); +#50328 = VERTEX_POINT('',#50329); +#50329 = CARTESIAN_POINT('',(3.675,1.,8.E-02)); +#50330 = LINE('',#50331,#50332); +#50331 = CARTESIAN_POINT('',(3.675,1.,0.841614)); +#50332 = VECTOR('',#50333,1.); +#50333 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50334 = ORIENTED_EDGE('',*,*,#50335,.T.); +#50335 = EDGE_CURVE('',#50328,#50336,#50338,.T.); +#50336 = VERTEX_POINT('',#50337); +#50337 = CARTESIAN_POINT('',(3.6,1.,8.E-02)); +#50338 = LINE('',#50339,#50340); +#50339 = CARTESIAN_POINT('',(-12.,1.,8.E-02)); +#50340 = VECTOR('',#50341,1.); +#50341 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50342 = ORIENTED_EDGE('',*,*,#50343,.T.); +#50343 = EDGE_CURVE('',#50336,#42950,#50344,.T.); +#50344 = LINE('',#50345,#50346); +#50345 = CARTESIAN_POINT('',(-12.,1.,-15.52)); +#50346 = VECTOR('',#50347,1.); +#50347 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#50348 = ORIENTED_EDGE('',*,*,#42949,.F.); +#50349 = ORIENTED_EDGE('',*,*,#50350,.T.); +#50350 = EDGE_CURVE('',#42942,#50099,#50351,.T.); +#50351 = LINE('',#50352,#50353); +#50352 = CARTESIAN_POINT('',(-12.,1.,15.48)); +#50353 = VECTOR('',#50354,1.); +#50354 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#50355 = ORIENTED_EDGE('',*,*,#50098,.T.); +#50356 = ORIENTED_EDGE('',*,*,#50214,.F.); +#50357 = ORIENTED_EDGE('',*,*,#43475,.T.); +#50358 = PLANE('',#50359); +#50359 = AXIS2_PLACEMENT_3D('',#50360,#50361,#50362); +#50360 = CARTESIAN_POINT('',(7.325,1.,0.31)); +#50361 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#50362 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50363 = ADVANCED_FACE('',(#50364),#50440,.F.); +#50364 = FACE_BOUND('',#50365,.T.); +#50365 = EDGE_LOOP('',(#50366,#50367,#50368,#50376,#50385,#50393,#50401, + #50409,#50417,#50426,#50434)); +#50366 = ORIENTED_EDGE('',*,*,#50327,.F.); +#50367 = ORIENTED_EDGE('',*,*,#43467,.F.); +#50368 = ORIENTED_EDGE('',*,*,#50369,.F.); +#50369 = EDGE_CURVE('',#50370,#43460,#50372,.T.); +#50370 = VERTEX_POINT('',#50371); +#50371 = CARTESIAN_POINT('',(3.675,1.35,0.16)); +#50372 = LINE('',#50373,#50374); +#50373 = CARTESIAN_POINT('',(3.675,1.35,0.31)); +#50374 = VECTOR('',#50375,1.); +#50375 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#50376 = ORIENTED_EDGE('',*,*,#50377,.T.); +#50377 = EDGE_CURVE('',#50370,#50378,#50380,.T.); +#50378 = VERTEX_POINT('',#50379); +#50379 = CARTESIAN_POINT('',(3.675,1.3,0.11)); +#50380 = CIRCLE('',#50381,5.E-02); +#50381 = AXIS2_PLACEMENT_3D('',#50382,#50383,#50384); +#50382 = CARTESIAN_POINT('',(3.675,1.35,0.11)); +#50383 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50384 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50385 = ORIENTED_EDGE('',*,*,#50386,.T.); +#50386 = EDGE_CURVE('',#50378,#50387,#50389,.T.); +#50387 = VERTEX_POINT('',#50388); +#50388 = CARTESIAN_POINT('',(3.675,1.3,5.E-02)); +#50389 = LINE('',#50390,#50391); +#50390 = CARTESIAN_POINT('',(3.675,1.3,0.11)); +#50391 = VECTOR('',#50392,1.); +#50392 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50393 = ORIENTED_EDGE('',*,*,#50394,.T.); +#50394 = EDGE_CURVE('',#50387,#50395,#50397,.T.); +#50395 = VERTEX_POINT('',#50396); +#50396 = CARTESIAN_POINT('',(3.675,1.25,-1.443289932013E-15)); +#50397 = LINE('',#50398,#50399); +#50398 = CARTESIAN_POINT('',(3.675,1.3,5.E-02)); +#50399 = VECTOR('',#50400,1.); +#50400 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#50401 = ORIENTED_EDGE('',*,*,#50402,.F.); +#50402 = EDGE_CURVE('',#50403,#50395,#50405,.T.); +#50403 = VERTEX_POINT('',#50404); +#50404 = CARTESIAN_POINT('',(3.675,0.92,-1.33226762955E-15)); +#50405 = LINE('',#50406,#50407); +#50406 = CARTESIAN_POINT('',(3.675,0.92,-1.33226762955E-15)); +#50407 = VECTOR('',#50408,1.); +#50408 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#50409 = ORIENTED_EDGE('',*,*,#50410,.T.); +#50410 = EDGE_CURVE('',#50403,#50411,#50413,.T.); +#50411 = VERTEX_POINT('',#50412); +#50412 = CARTESIAN_POINT('',(3.675,0.92,3.619548911246E-02)); +#50413 = LINE('',#50414,#50415); +#50414 = CARTESIAN_POINT('',(3.675,0.92,-1.33226762955E-15)); +#50415 = VECTOR('',#50416,1.); +#50416 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#50417 = ORIENTED_EDGE('',*,*,#50418,.F.); +#50418 = EDGE_CURVE('',#50419,#50411,#50421,.T.); +#50419 = VERTEX_POINT('',#50420); +#50420 = CARTESIAN_POINT('',(3.675,0.943186633611,6.541154699934E-02)); +#50421 = CIRCLE('',#50422,3.E-02); +#50422 = AXIS2_PLACEMENT_3D('',#50423,#50424,#50425); +#50423 = CARTESIAN_POINT('',(3.675,0.95,3.619548911246E-02)); +#50424 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50425 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50426 = ORIENTED_EDGE('',*,*,#50427,.T.); +#50427 = EDGE_CURVE('',#50419,#50428,#50430,.T.); +#50428 = VERTEX_POINT('',#50429); +#50429 = CARTESIAN_POINT('',(3.675,1.,7.866077735406E-02)); +#50430 = LINE('',#50431,#50432); +#50431 = CARTESIAN_POINT('',(3.675,0.943186633611,6.541154699934E-02)); +#50432 = VECTOR('',#50433,1.); +#50433 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#50434 = ORIENTED_EDGE('',*,*,#50435,.F.); +#50435 = EDGE_CURVE('',#50328,#50428,#50436,.T.); +#50436 = LINE('',#50437,#50438); +#50437 = CARTESIAN_POINT('',(3.675,1.,0.841614)); +#50438 = VECTOR('',#50439,1.); +#50439 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50440 = PLANE('',#50441); +#50441 = AXIS2_PLACEMENT_3D('',#50442,#50443,#50444); +#50442 = CARTESIAN_POINT('',(3.675,1.245779075398,0.170500231015)); +#50443 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50444 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#50445 = ADVANCED_FACE('',(#50446),#50471,.F.); +#50446 = FACE_BOUND('',#50447,.T.); +#50447 = EDGE_LOOP('',(#50448,#50456,#50457,#50465)); +#50448 = ORIENTED_EDGE('',*,*,#50449,.F.); +#50449 = EDGE_CURVE('',#50328,#50450,#50452,.T.); +#50450 = VERTEX_POINT('',#50451); +#50451 = CARTESIAN_POINT('',(3.825,1.,8.E-02)); +#50452 = LINE('',#50453,#50454); +#50453 = CARTESIAN_POINT('',(9.,1.,8.E-02)); +#50454 = VECTOR('',#50455,1.); +#50455 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50456 = ORIENTED_EDGE('',*,*,#50435,.T.); +#50457 = ORIENTED_EDGE('',*,*,#50458,.F.); +#50458 = EDGE_CURVE('',#50459,#50428,#50461,.T.); +#50459 = VERTEX_POINT('',#50460); +#50460 = CARTESIAN_POINT('',(3.825,1.,7.866077735406E-02)); +#50461 = LINE('',#50462,#50463); +#50462 = CARTESIAN_POINT('',(9.,1.,7.866077735406E-02)); +#50463 = VECTOR('',#50464,1.); +#50464 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50465 = ORIENTED_EDGE('',*,*,#50466,.F.); +#50466 = EDGE_CURVE('',#50450,#50459,#50467,.T.); +#50467 = LINE('',#50468,#50469); +#50468 = CARTESIAN_POINT('',(3.825,1.,0.841614)); +#50469 = VECTOR('',#50470,1.); +#50470 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50471 = PLANE('',#50472); +#50472 = AXIS2_PLACEMENT_3D('',#50473,#50474,#50475); +#50473 = CARTESIAN_POINT('',(3.825,1.,7.866077735406E-02)); +#50474 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#50475 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50476 = ADVANCED_FACE('',(#50477),#50551,.T.); +#50477 = FACE_BOUND('',#50478,.T.); +#50478 = EDGE_LOOP('',(#50479,#50480,#50488,#50497,#50505,#50513,#50521, + #50529,#50538,#50544,#50545)); +#50479 = ORIENTED_EDGE('',*,*,#50466,.T.); +#50480 = ORIENTED_EDGE('',*,*,#50481,.F.); +#50481 = EDGE_CURVE('',#50482,#50459,#50484,.T.); +#50482 = VERTEX_POINT('',#50483); +#50483 = CARTESIAN_POINT('',(3.825,0.943186633611,6.541154699934E-02)); +#50484 = LINE('',#50485,#50486); +#50485 = CARTESIAN_POINT('',(3.825,0.694863,7.500931358165E-03)); +#50486 = VECTOR('',#50487,1.); +#50487 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#50488 = ORIENTED_EDGE('',*,*,#50489,.T.); +#50489 = EDGE_CURVE('',#50482,#50490,#50492,.T.); +#50490 = VERTEX_POINT('',#50491); +#50491 = CARTESIAN_POINT('',(3.825,0.92,3.619548911246E-02)); +#50492 = CIRCLE('',#50493,3.E-02); +#50493 = AXIS2_PLACEMENT_3D('',#50494,#50495,#50496); +#50494 = CARTESIAN_POINT('',(3.825,0.95,3.619548911246E-02)); +#50495 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50496 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50497 = ORIENTED_EDGE('',*,*,#50498,.F.); +#50498 = EDGE_CURVE('',#50499,#50490,#50501,.T.); +#50499 = VERTEX_POINT('',#50500); +#50500 = CARTESIAN_POINT('',(3.825,0.92,-1.33226762955E-15)); +#50501 = LINE('',#50502,#50503); +#50502 = CARTESIAN_POINT('',(3.825,0.92,0.841614)); +#50503 = VECTOR('',#50504,1.); +#50504 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#50505 = ORIENTED_EDGE('',*,*,#50506,.F.); +#50506 = EDGE_CURVE('',#50507,#50499,#50509,.T.); +#50507 = VERTEX_POINT('',#50508); +#50508 = CARTESIAN_POINT('',(3.825,1.25,-1.443289932013E-15)); +#50509 = LINE('',#50510,#50511); +#50510 = CARTESIAN_POINT('',(3.825,0.694863,-1.33226762955E-15)); +#50511 = VECTOR('',#50512,1.); +#50512 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#50513 = ORIENTED_EDGE('',*,*,#50514,.F.); +#50514 = EDGE_CURVE('',#50515,#50507,#50517,.T.); +#50515 = VERTEX_POINT('',#50516); +#50516 = CARTESIAN_POINT('',(3.825,1.3,5.E-02)); +#50517 = LINE('',#50518,#50519); +#50518 = CARTESIAN_POINT('',(3.825,0.694863,-0.555137)); +#50519 = VECTOR('',#50520,1.); +#50520 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#50521 = ORIENTED_EDGE('',*,*,#50522,.F.); +#50522 = EDGE_CURVE('',#50523,#50515,#50525,.T.); +#50523 = VERTEX_POINT('',#50524); +#50524 = CARTESIAN_POINT('',(3.825,1.3,0.11)); +#50525 = LINE('',#50526,#50527); +#50526 = CARTESIAN_POINT('',(3.825,1.3,0.841614)); +#50527 = VECTOR('',#50528,1.); +#50528 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50529 = ORIENTED_EDGE('',*,*,#50530,.F.); +#50530 = EDGE_CURVE('',#50531,#50523,#50533,.T.); +#50531 = VERTEX_POINT('',#50532); +#50532 = CARTESIAN_POINT('',(3.825,1.35,0.16)); +#50533 = CIRCLE('',#50534,5.E-02); +#50534 = AXIS2_PLACEMENT_3D('',#50535,#50536,#50537); +#50535 = CARTESIAN_POINT('',(3.825,1.35,0.11)); +#50536 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50537 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50538 = ORIENTED_EDGE('',*,*,#50539,.F.); +#50539 = EDGE_CURVE('',#43452,#50531,#50540,.T.); +#50540 = LINE('',#50541,#50542); +#50541 = CARTESIAN_POINT('',(3.825,1.35,0.841614)); +#50542 = VECTOR('',#50543,1.); +#50543 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50544 = ORIENTED_EDGE('',*,*,#43451,.F.); +#50545 = ORIENTED_EDGE('',*,*,#50546,.T.); +#50546 = EDGE_CURVE('',#43444,#50450,#50547,.T.); +#50547 = LINE('',#50548,#50549); +#50548 = CARTESIAN_POINT('',(3.825,1.,0.841614)); +#50549 = VECTOR('',#50550,1.); +#50550 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50551 = PLANE('',#50552); +#50552 = AXIS2_PLACEMENT_3D('',#50553,#50554,#50555); +#50553 = CARTESIAN_POINT('',(3.825,1.245779075398,0.170500231015)); +#50554 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50555 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#50556 = ADVANCED_FACE('',(#50557),#50575,.T.); +#50557 = FACE_BOUND('',#50558,.T.); +#50558 = EDGE_LOOP('',(#50559,#50567,#50573,#50574)); +#50559 = ORIENTED_EDGE('',*,*,#50560,.F.); +#50560 = EDGE_CURVE('',#50561,#50336,#50563,.T.); +#50561 = VERTEX_POINT('',#50562); +#50562 = CARTESIAN_POINT('',(3.6,0.92,8.E-02)); +#50563 = LINE('',#50564,#50565); +#50564 = CARTESIAN_POINT('',(3.6,0.694863,8.E-02)); +#50565 = VECTOR('',#50566,1.); +#50566 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#50567 = ORIENTED_EDGE('',*,*,#50568,.T.); +#50568 = EDGE_CURVE('',#50561,#42958,#50569,.T.); +#50569 = LINE('',#50570,#50571); +#50570 = CARTESIAN_POINT('',(3.5488325,0.694863,2.88325E-02)); +#50571 = VECTOR('',#50572,1.); +#50572 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#50573 = ORIENTED_EDGE('',*,*,#42957,.F.); +#50574 = ORIENTED_EDGE('',*,*,#50343,.F.); +#50575 = PLANE('',#50576); +#50576 = AXIS2_PLACEMENT_3D('',#50577,#50578,#50579); +#50577 = CARTESIAN_POINT('',(3.575,0.85,5.5E-02)); +#50578 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#50579 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#50580 = ADVANCED_FACE('',(#50581),#50608,.T.); +#50581 = FACE_BOUND('',#50582,.T.); +#50582 = EDGE_LOOP('',(#50583,#50591,#50592,#50593,#50594,#50602)); +#50583 = ORIENTED_EDGE('',*,*,#50584,.T.); +#50584 = EDGE_CURVE('',#50585,#50561,#50587,.T.); +#50585 = VERTEX_POINT('',#50586); +#50586 = CARTESIAN_POINT('',(3.9,0.92,8.E-02)); +#50587 = LINE('',#50588,#50589); +#50588 = CARTESIAN_POINT('',(-12.,0.92,8.E-02)); +#50589 = VECTOR('',#50590,1.); +#50590 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50591 = ORIENTED_EDGE('',*,*,#50560,.T.); +#50592 = ORIENTED_EDGE('',*,*,#50335,.F.); +#50593 = ORIENTED_EDGE('',*,*,#50449,.T.); +#50594 = ORIENTED_EDGE('',*,*,#50595,.F.); +#50595 = EDGE_CURVE('',#50596,#50450,#50598,.T.); +#50596 = VERTEX_POINT('',#50597); +#50597 = CARTESIAN_POINT('',(3.9,1.,8.E-02)); +#50598 = LINE('',#50599,#50600); +#50599 = CARTESIAN_POINT('',(-12.,1.,8.E-02)); +#50600 = VECTOR('',#50601,1.); +#50601 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50602 = ORIENTED_EDGE('',*,*,#50603,.T.); +#50603 = EDGE_CURVE('',#50596,#50585,#50604,.T.); +#50604 = LINE('',#50605,#50606); +#50605 = CARTESIAN_POINT('',(3.9,0.694863,8.E-02)); +#50606 = VECTOR('',#50607,1.); +#50607 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#50608 = PLANE('',#50609); +#50609 = AXIS2_PLACEMENT_3D('',#50610,#50611,#50612); +#50610 = CARTESIAN_POINT('',(3.6625,1.,8.E-02)); +#50611 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50612 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#50613 = ADVANCED_FACE('',(#50614),#50625,.T.); +#50614 = FACE_BOUND('',#50615,.T.); +#50615 = EDGE_LOOP('',(#50616,#50617,#50618,#50619)); +#50616 = ORIENTED_EDGE('',*,*,#42965,.T.); +#50617 = ORIENTED_EDGE('',*,*,#50568,.F.); +#50618 = ORIENTED_EDGE('',*,*,#50584,.F.); +#50619 = ORIENTED_EDGE('',*,*,#50620,.F.); +#50620 = EDGE_CURVE('',#42966,#50585,#50621,.T.); +#50621 = LINE('',#50622,#50623); +#50622 = CARTESIAN_POINT('',(3.9511675,0.694863,2.88325E-02)); +#50623 = VECTOR('',#50624,1.); +#50624 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#50625 = PLANE('',#50626); +#50626 = AXIS2_PLACEMENT_3D('',#50627,#50628,#50629); +#50627 = CARTESIAN_POINT('',(3.6625,0.92,8.E-02)); +#50628 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#50629 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#50630 = ADVANCED_FACE('',(#50631),#50642,.T.); +#50631 = FACE_BOUND('',#50632,.T.); +#50632 = EDGE_LOOP('',(#50633,#50634,#50640,#50641)); +#50633 = ORIENTED_EDGE('',*,*,#50603,.F.); +#50634 = ORIENTED_EDGE('',*,*,#50635,.F.); +#50635 = EDGE_CURVE('',#42974,#50596,#50636,.T.); +#50636 = LINE('',#50637,#50638); +#50637 = CARTESIAN_POINT('',(-11.5,1.,15.48)); +#50638 = VECTOR('',#50639,1.); +#50639 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#50640 = ORIENTED_EDGE('',*,*,#42973,.F.); +#50641 = ORIENTED_EDGE('',*,*,#50620,.T.); +#50642 = PLANE('',#50643); +#50643 = AXIS2_PLACEMENT_3D('',#50644,#50645,#50646); +#50644 = CARTESIAN_POINT('',(3.925,0.85,5.5E-02)); +#50645 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#50646 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#50647 = ADVANCED_FACE('',(#50648),#50673,.T.); +#50648 = FACE_BOUND('',#50649,.T.); +#50649 = EDGE_LOOP('',(#50650,#50660,#50666,#50667)); +#50650 = ORIENTED_EDGE('',*,*,#50651,.F.); +#50651 = EDGE_CURVE('',#50652,#50654,#50656,.T.); +#50652 = VERTEX_POINT('',#50653); +#50653 = CARTESIAN_POINT('',(4.1,0.92,8.E-02)); +#50654 = VERTEX_POINT('',#50655); +#50655 = CARTESIAN_POINT('',(4.1,1.,8.E-02)); +#50656 = LINE('',#50657,#50658); +#50657 = CARTESIAN_POINT('',(4.1,0.694863,8.E-02)); +#50658 = VECTOR('',#50659,1.); +#50659 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#50660 = ORIENTED_EDGE('',*,*,#50661,.T.); +#50661 = EDGE_CURVE('',#50652,#42990,#50662,.T.); +#50662 = LINE('',#50663,#50664); +#50663 = CARTESIAN_POINT('',(4.0488325,0.694863,2.88325E-02)); +#50664 = VECTOR('',#50665,1.); +#50665 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#50666 = ORIENTED_EDGE('',*,*,#42989,.F.); +#50667 = ORIENTED_EDGE('',*,*,#50668,.F.); +#50668 = EDGE_CURVE('',#50654,#42982,#50669,.T.); +#50669 = LINE('',#50670,#50671); +#50670 = CARTESIAN_POINT('',(-11.5,1.,-15.52)); +#50671 = VECTOR('',#50672,1.); +#50672 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#50673 = PLANE('',#50674); +#50674 = AXIS2_PLACEMENT_3D('',#50675,#50676,#50677); +#50675 = CARTESIAN_POINT('',(4.075,0.85,5.5E-02)); +#50676 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#50677 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#50678 = ADVANCED_FACE('',(#50679),#50697,.T.); +#50679 = FACE_BOUND('',#50680,.T.); +#50680 = EDGE_LOOP('',(#50681,#50682,#50683,#50691)); +#50681 = ORIENTED_EDGE('',*,*,#42997,.T.); +#50682 = ORIENTED_EDGE('',*,*,#50661,.F.); +#50683 = ORIENTED_EDGE('',*,*,#50684,.F.); +#50684 = EDGE_CURVE('',#50685,#50652,#50687,.T.); +#50685 = VERTEX_POINT('',#50686); +#50686 = CARTESIAN_POINT('',(4.4,0.92,8.E-02)); +#50687 = LINE('',#50688,#50689); +#50688 = CARTESIAN_POINT('',(-11.5,0.92,8.E-02)); +#50689 = VECTOR('',#50690,1.); +#50690 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50691 = ORIENTED_EDGE('',*,*,#50692,.F.); +#50692 = EDGE_CURVE('',#42998,#50685,#50693,.T.); +#50693 = LINE('',#50694,#50695); +#50694 = CARTESIAN_POINT('',(4.4511675,0.694863,2.88325E-02)); +#50695 = VECTOR('',#50696,1.); +#50696 = DIRECTION('',(-0.216371161204,0.952033109297,0.216371161204)); +#50697 = PLANE('',#50698); +#50698 = AXIS2_PLACEMENT_3D('',#50699,#50700,#50701); +#50699 = CARTESIAN_POINT('',(4.1625,0.92,8.E-02)); +#50700 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#50701 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#50702 = ADVANCED_FACE('',(#50703),#50728,.T.); +#50703 = FACE_BOUND('',#50704,.T.); +#50704 = EDGE_LOOP('',(#50705,#50706,#50707,#50715,#50721,#50722)); +#50705 = ORIENTED_EDGE('',*,*,#50684,.T.); +#50706 = ORIENTED_EDGE('',*,*,#50651,.T.); +#50707 = ORIENTED_EDGE('',*,*,#50708,.F.); +#50708 = EDGE_CURVE('',#50709,#50654,#50711,.T.); +#50709 = VERTEX_POINT('',#50710); +#50710 = CARTESIAN_POINT('',(4.175,1.,8.E-02)); +#50711 = LINE('',#50712,#50713); +#50712 = CARTESIAN_POINT('',(-11.5,1.,8.E-02)); +#50713 = VECTOR('',#50714,1.); +#50714 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50715 = ORIENTED_EDGE('',*,*,#50716,.T.); +#50716 = EDGE_CURVE('',#50709,#44171,#50717,.T.); +#50717 = LINE('',#50718,#50719); +#50718 = CARTESIAN_POINT('',(9.5,1.,8.E-02)); +#50719 = VECTOR('',#50720,1.); +#50720 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50721 = ORIENTED_EDGE('',*,*,#44283,.F.); +#50722 = ORIENTED_EDGE('',*,*,#50723,.T.); +#50723 = EDGE_CURVE('',#44276,#50685,#50724,.T.); +#50724 = LINE('',#50725,#50726); +#50725 = CARTESIAN_POINT('',(4.4,0.694863,8.E-02)); +#50726 = VECTOR('',#50727,1.); +#50727 = DIRECTION('',(-1.224606353822E-16,-1.,2.289834988289E-16)); +#50728 = PLANE('',#50729); +#50729 = AXIS2_PLACEMENT_3D('',#50730,#50731,#50732); +#50730 = CARTESIAN_POINT('',(4.1625,1.,8.E-02)); +#50731 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50732 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#50733 = ADVANCED_FACE('',(#50734),#50749,.T.); +#50734 = FACE_BOUND('',#50735,.T.); +#50735 = EDGE_LOOP('',(#50736,#50742,#50743,#50744,#50745,#50746,#50747, + #50748)); +#50736 = ORIENTED_EDGE('',*,*,#50737,.T.); +#50737 = EDGE_CURVE('',#43436,#50709,#50738,.T.); +#50738 = LINE('',#50739,#50740); +#50739 = CARTESIAN_POINT('',(4.175,1.,0.841614)); +#50740 = VECTOR('',#50741,1.); +#50741 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50742 = ORIENTED_EDGE('',*,*,#50708,.T.); +#50743 = ORIENTED_EDGE('',*,*,#50668,.T.); +#50744 = ORIENTED_EDGE('',*,*,#42981,.F.); +#50745 = ORIENTED_EDGE('',*,*,#50635,.T.); +#50746 = ORIENTED_EDGE('',*,*,#50595,.T.); +#50747 = ORIENTED_EDGE('',*,*,#50546,.F.); +#50748 = ORIENTED_EDGE('',*,*,#43443,.T.); +#50749 = PLANE('',#50750); +#50750 = AXIS2_PLACEMENT_3D('',#50751,#50752,#50753); +#50751 = CARTESIAN_POINT('',(7.825,1.,0.31)); +#50752 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#50753 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50754 = ADVANCED_FACE('',(#50755),#50773,.F.); +#50755 = FACE_BOUND('',#50756,.T.); +#50756 = EDGE_LOOP('',(#50757,#50758,#50766,#50772)); +#50757 = ORIENTED_EDGE('',*,*,#50716,.F.); +#50758 = ORIENTED_EDGE('',*,*,#50759,.T.); +#50759 = EDGE_CURVE('',#50709,#50760,#50762,.T.); +#50760 = VERTEX_POINT('',#50761); +#50761 = CARTESIAN_POINT('',(4.175,1.,7.866077735406E-02)); +#50762 = LINE('',#50763,#50764); +#50763 = CARTESIAN_POINT('',(4.175,1.,0.841614)); +#50764 = VECTOR('',#50765,1.); +#50765 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50766 = ORIENTED_EDGE('',*,*,#50767,.F.); +#50767 = EDGE_CURVE('',#44173,#50760,#50768,.T.); +#50768 = LINE('',#50769,#50770); +#50769 = CARTESIAN_POINT('',(9.5,1.,7.866077735406E-02)); +#50770 = VECTOR('',#50771,1.); +#50771 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#50772 = ORIENTED_EDGE('',*,*,#44170,.F.); +#50773 = PLANE('',#50774); +#50774 = AXIS2_PLACEMENT_3D('',#50775,#50776,#50777); +#50775 = CARTESIAN_POINT('',(4.325,1.,7.866077735406E-02)); +#50776 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#50777 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#50778 = ADVANCED_FACE('',(#50779),#50848,.F.); +#50779 = FACE_BOUND('',#50780,.T.); +#50780 = EDGE_LOOP('',(#50781,#50782,#50783,#50791,#50800,#50808,#50816, + #50824,#50832,#50841,#50847)); +#50781 = ORIENTED_EDGE('',*,*,#50737,.F.); +#50782 = ORIENTED_EDGE('',*,*,#43435,.F.); +#50783 = ORIENTED_EDGE('',*,*,#50784,.F.); +#50784 = EDGE_CURVE('',#50785,#43428,#50787,.T.); +#50785 = VERTEX_POINT('',#50786); +#50786 = CARTESIAN_POINT('',(4.175,1.35,0.16)); +#50787 = LINE('',#50788,#50789); +#50788 = CARTESIAN_POINT('',(4.175,1.35,0.31)); +#50789 = VECTOR('',#50790,1.); +#50790 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#50791 = ORIENTED_EDGE('',*,*,#50792,.T.); +#50792 = EDGE_CURVE('',#50785,#50793,#50795,.T.); +#50793 = VERTEX_POINT('',#50794); +#50794 = CARTESIAN_POINT('',(4.175,1.3,0.11)); +#50795 = CIRCLE('',#50796,5.E-02); +#50796 = AXIS2_PLACEMENT_3D('',#50797,#50798,#50799); +#50797 = CARTESIAN_POINT('',(4.175,1.35,0.11)); +#50798 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50799 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50800 = ORIENTED_EDGE('',*,*,#50801,.T.); +#50801 = EDGE_CURVE('',#50793,#50802,#50804,.T.); +#50802 = VERTEX_POINT('',#50803); +#50803 = CARTESIAN_POINT('',(4.175,1.3,5.E-02)); +#50804 = LINE('',#50805,#50806); +#50805 = CARTESIAN_POINT('',(4.175,1.3,0.11)); +#50806 = VECTOR('',#50807,1.); +#50807 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50808 = ORIENTED_EDGE('',*,*,#50809,.T.); +#50809 = EDGE_CURVE('',#50802,#50810,#50812,.T.); +#50810 = VERTEX_POINT('',#50811); +#50811 = CARTESIAN_POINT('',(4.175,1.25,-1.554312234475E-15)); +#50812 = LINE('',#50813,#50814); +#50813 = CARTESIAN_POINT('',(4.175,1.3,5.E-02)); +#50814 = VECTOR('',#50815,1.); +#50815 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#50816 = ORIENTED_EDGE('',*,*,#50817,.F.); +#50817 = EDGE_CURVE('',#50818,#50810,#50820,.T.); +#50818 = VERTEX_POINT('',#50819); +#50819 = CARTESIAN_POINT('',(4.175,0.92,-1.443289932013E-15)); +#50820 = LINE('',#50821,#50822); +#50821 = CARTESIAN_POINT('',(4.175,0.92,-1.443289932013E-15)); +#50822 = VECTOR('',#50823,1.); +#50823 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#50824 = ORIENTED_EDGE('',*,*,#50825,.T.); +#50825 = EDGE_CURVE('',#50818,#50826,#50828,.T.); +#50826 = VERTEX_POINT('',#50827); +#50827 = CARTESIAN_POINT('',(4.175,0.92,3.619548911246E-02)); +#50828 = LINE('',#50829,#50830); +#50829 = CARTESIAN_POINT('',(4.175,0.92,-1.443289932013E-15)); +#50830 = VECTOR('',#50831,1.); +#50831 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#50832 = ORIENTED_EDGE('',*,*,#50833,.F.); +#50833 = EDGE_CURVE('',#50834,#50826,#50836,.T.); +#50834 = VERTEX_POINT('',#50835); +#50835 = CARTESIAN_POINT('',(4.175,0.943186633611,6.541154699934E-02)); +#50836 = CIRCLE('',#50837,3.E-02); +#50837 = AXIS2_PLACEMENT_3D('',#50838,#50839,#50840); +#50838 = CARTESIAN_POINT('',(4.175,0.95,3.619548911246E-02)); +#50839 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50840 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50841 = ORIENTED_EDGE('',*,*,#50842,.T.); +#50842 = EDGE_CURVE('',#50834,#50760,#50843,.T.); +#50843 = LINE('',#50844,#50845); +#50844 = CARTESIAN_POINT('',(4.175,0.943186633611,6.541154699934E-02)); +#50845 = VECTOR('',#50846,1.); +#50846 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#50847 = ORIENTED_EDGE('',*,*,#50759,.F.); +#50848 = PLANE('',#50849); +#50849 = AXIS2_PLACEMENT_3D('',#50850,#50851,#50852); +#50850 = CARTESIAN_POINT('',(4.175,1.245779075398,0.170500231015)); +#50851 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50852 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#50853 = ADVANCED_FACE('',(#50854),#50865,.T.); +#50854 = FACE_BOUND('',#50855,.T.); +#50855 = EDGE_LOOP('',(#50856,#50862,#50863,#50864)); +#50856 = ORIENTED_EDGE('',*,*,#50857,.T.); +#50857 = EDGE_CURVE('',#50834,#44181,#50858,.T.); +#50858 = LINE('',#50859,#50860); +#50859 = CARTESIAN_POINT('',(4.175,0.943186633611,6.541154699934E-02)); +#50860 = VECTOR('',#50861,1.); +#50861 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50862 = ORIENTED_EDGE('',*,*,#44180,.T.); +#50863 = ORIENTED_EDGE('',*,*,#50767,.T.); +#50864 = ORIENTED_EDGE('',*,*,#50842,.F.); +#50865 = PLANE('',#50866); +#50866 = AXIS2_PLACEMENT_3D('',#50867,#50868,#50869); +#50867 = CARTESIAN_POINT('',(4.175,0.943186633611,6.541154699934E-02)); +#50868 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#50869 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#50870 = ADVANCED_FACE('',(#50871),#50882,.T.); +#50871 = FACE_BOUND('',#50872,.T.); +#50872 = EDGE_LOOP('',(#50873,#50879,#50880,#50881)); +#50873 = ORIENTED_EDGE('',*,*,#50874,.T.); +#50874 = EDGE_CURVE('',#50826,#44189,#50875,.T.); +#50875 = LINE('',#50876,#50877); +#50876 = CARTESIAN_POINT('',(4.175,0.92,3.619548911246E-02)); +#50877 = VECTOR('',#50878,1.); +#50878 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50879 = ORIENTED_EDGE('',*,*,#44188,.F.); +#50880 = ORIENTED_EDGE('',*,*,#50857,.F.); +#50881 = ORIENTED_EDGE('',*,*,#50833,.T.); +#50882 = CYLINDRICAL_SURFACE('',#50883,3.E-02); +#50883 = AXIS2_PLACEMENT_3D('',#50884,#50885,#50886); +#50884 = CARTESIAN_POINT('',(4.175,0.95,3.619548911246E-02)); +#50885 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50886 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50887 = ADVANCED_FACE('',(#50888),#50899,.T.); +#50888 = FACE_BOUND('',#50889,.T.); +#50889 = EDGE_LOOP('',(#50890,#50891,#50897,#50898)); +#50890 = ORIENTED_EDGE('',*,*,#50825,.F.); +#50891 = ORIENTED_EDGE('',*,*,#50892,.T.); +#50892 = EDGE_CURVE('',#50818,#44198,#50893,.T.); +#50893 = LINE('',#50894,#50895); +#50894 = CARTESIAN_POINT('',(4.175,0.92,-1.443289932013E-15)); +#50895 = VECTOR('',#50896,1.); +#50896 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50897 = ORIENTED_EDGE('',*,*,#44197,.T.); +#50898 = ORIENTED_EDGE('',*,*,#50874,.F.); +#50899 = PLANE('',#50900); +#50900 = AXIS2_PLACEMENT_3D('',#50901,#50902,#50903); +#50901 = CARTESIAN_POINT('',(4.175,0.92,-1.443289932013E-15)); +#50902 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#50903 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#50904 = ADVANCED_FACE('',(#50905),#50916,.T.); +#50905 = FACE_BOUND('',#50906,.T.); +#50906 = EDGE_LOOP('',(#50907,#50913,#50914,#50915)); +#50907 = ORIENTED_EDGE('',*,*,#50908,.T.); +#50908 = EDGE_CURVE('',#50810,#44206,#50909,.T.); +#50909 = LINE('',#50910,#50911); +#50910 = CARTESIAN_POINT('',(4.175,1.25,-1.554312234475E-15)); +#50911 = VECTOR('',#50912,1.); +#50912 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50913 = ORIENTED_EDGE('',*,*,#44205,.T.); +#50914 = ORIENTED_EDGE('',*,*,#50892,.F.); +#50915 = ORIENTED_EDGE('',*,*,#50817,.T.); +#50916 = PLANE('',#50917); +#50917 = AXIS2_PLACEMENT_3D('',#50918,#50919,#50920); +#50918 = CARTESIAN_POINT('',(4.175,1.25,-1.554312234475E-15)); +#50919 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50920 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#50921 = ADVANCED_FACE('',(#50922),#50933,.T.); +#50922 = FACE_BOUND('',#50923,.T.); +#50923 = EDGE_LOOP('',(#50924,#50930,#50931,#50932)); +#50924 = ORIENTED_EDGE('',*,*,#50925,.T.); +#50925 = EDGE_CURVE('',#50802,#44214,#50926,.T.); +#50926 = LINE('',#50927,#50928); +#50927 = CARTESIAN_POINT('',(4.175,1.3,5.E-02)); +#50928 = VECTOR('',#50929,1.); +#50929 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50930 = ORIENTED_EDGE('',*,*,#44213,.T.); +#50931 = ORIENTED_EDGE('',*,*,#50908,.F.); +#50932 = ORIENTED_EDGE('',*,*,#50809,.F.); +#50933 = PLANE('',#50934); +#50934 = AXIS2_PLACEMENT_3D('',#50935,#50936,#50937); +#50935 = CARTESIAN_POINT('',(4.175,1.3,5.E-02)); +#50936 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#50937 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#50938 = ADVANCED_FACE('',(#50939),#50950,.T.); +#50939 = FACE_BOUND('',#50940,.T.); +#50940 = EDGE_LOOP('',(#50941,#50947,#50948,#50949)); +#50941 = ORIENTED_EDGE('',*,*,#50942,.T.); +#50942 = EDGE_CURVE('',#50793,#44222,#50943,.T.); +#50943 = LINE('',#50944,#50945); +#50944 = CARTESIAN_POINT('',(4.175,1.3,0.11)); +#50945 = VECTOR('',#50946,1.); +#50946 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50947 = ORIENTED_EDGE('',*,*,#44221,.T.); +#50948 = ORIENTED_EDGE('',*,*,#50925,.F.); +#50949 = ORIENTED_EDGE('',*,*,#50801,.F.); +#50950 = PLANE('',#50951); +#50951 = AXIS2_PLACEMENT_3D('',#50952,#50953,#50954); +#50952 = CARTESIAN_POINT('',(4.175,1.3,0.11)); +#50953 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#50954 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50955 = ADVANCED_FACE('',(#50956),#50967,.F.); +#50956 = FACE_BOUND('',#50957,.F.); +#50957 = EDGE_LOOP('',(#50958,#50959,#50960,#50961)); +#50958 = ORIENTED_EDGE('',*,*,#50792,.T.); +#50959 = ORIENTED_EDGE('',*,*,#50942,.T.); +#50960 = ORIENTED_EDGE('',*,*,#44229,.F.); +#50961 = ORIENTED_EDGE('',*,*,#50962,.F.); +#50962 = EDGE_CURVE('',#50785,#44230,#50963,.T.); +#50963 = LINE('',#50964,#50965); +#50964 = CARTESIAN_POINT('',(4.175,1.35,0.16)); +#50965 = VECTOR('',#50966,1.); +#50966 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50967 = CYLINDRICAL_SURFACE('',#50968,5.E-02); +#50968 = AXIS2_PLACEMENT_3D('',#50969,#50970,#50971); +#50969 = CARTESIAN_POINT('',(4.175,1.35,0.11)); +#50970 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#50971 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#50972 = ADVANCED_FACE('',(#50973),#50979,.T.); +#50973 = FACE_BOUND('',#50974,.T.); +#50974 = EDGE_LOOP('',(#50975,#50976,#50977,#50978)); +#50975 = ORIENTED_EDGE('',*,*,#43427,.T.); +#50976 = ORIENTED_EDGE('',*,*,#44238,.T.); +#50977 = ORIENTED_EDGE('',*,*,#50962,.F.); +#50978 = ORIENTED_EDGE('',*,*,#50784,.T.); +#50979 = PLANE('',#50980); +#50980 = AXIS2_PLACEMENT_3D('',#50981,#50982,#50983); +#50981 = CARTESIAN_POINT('',(4.175,1.35,0.31)); +#50982 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#50983 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#50984 = ADVANCED_FACE('',(#50985),#50991,.T.); +#50985 = FACE_BOUND('',#50986,.T.); +#50986 = EDGE_LOOP('',(#50987,#50988,#50989,#50990)); +#50987 = ORIENTED_EDGE('',*,*,#50723,.F.); +#50988 = ORIENTED_EDGE('',*,*,#44275,.F.); +#50989 = ORIENTED_EDGE('',*,*,#43005,.F.); +#50990 = ORIENTED_EDGE('',*,*,#50692,.T.); +#50991 = PLANE('',#50992); +#50992 = AXIS2_PLACEMENT_3D('',#50993,#50994,#50995); +#50993 = CARTESIAN_POINT('',(4.425,0.85,5.5E-02)); +#50994 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#50995 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#50996 = ADVANCED_FACE('',(#50997),#51008,.T.); +#50997 = FACE_BOUND('',#50998,.T.); +#50998 = EDGE_LOOP('',(#50999,#51000,#51001,#51007)); +#50999 = ORIENTED_EDGE('',*,*,#43459,.T.); +#51000 = ORIENTED_EDGE('',*,*,#50539,.T.); +#51001 = ORIENTED_EDGE('',*,*,#51002,.F.); +#51002 = EDGE_CURVE('',#50370,#50531,#51003,.T.); +#51003 = LINE('',#51004,#51005); +#51004 = CARTESIAN_POINT('',(3.675,1.35,0.16)); +#51005 = VECTOR('',#51006,1.); +#51006 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51007 = ORIENTED_EDGE('',*,*,#50369,.T.); +#51008 = PLANE('',#51009); +#51009 = AXIS2_PLACEMENT_3D('',#51010,#51011,#51012); +#51010 = CARTESIAN_POINT('',(3.675,1.35,0.31)); +#51011 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51012 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51013 = ADVANCED_FACE('',(#51014),#51025,.F.); +#51014 = FACE_BOUND('',#51015,.F.); +#51015 = EDGE_LOOP('',(#51016,#51017,#51023,#51024)); +#51016 = ORIENTED_EDGE('',*,*,#50377,.T.); +#51017 = ORIENTED_EDGE('',*,*,#51018,.T.); +#51018 = EDGE_CURVE('',#50378,#50523,#51019,.T.); +#51019 = LINE('',#51020,#51021); +#51020 = CARTESIAN_POINT('',(3.675,1.3,0.11)); +#51021 = VECTOR('',#51022,1.); +#51022 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51023 = ORIENTED_EDGE('',*,*,#50530,.F.); +#51024 = ORIENTED_EDGE('',*,*,#51002,.F.); +#51025 = CYLINDRICAL_SURFACE('',#51026,5.E-02); +#51026 = AXIS2_PLACEMENT_3D('',#51027,#51028,#51029); +#51027 = CARTESIAN_POINT('',(3.675,1.35,0.11)); +#51028 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51029 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51030 = ADVANCED_FACE('',(#51031),#51042,.T.); +#51031 = FACE_BOUND('',#51032,.T.); +#51032 = EDGE_LOOP('',(#51033,#51034,#51035,#51041)); +#51033 = ORIENTED_EDGE('',*,*,#51018,.T.); +#51034 = ORIENTED_EDGE('',*,*,#50522,.T.); +#51035 = ORIENTED_EDGE('',*,*,#51036,.F.); +#51036 = EDGE_CURVE('',#50387,#50515,#51037,.T.); +#51037 = LINE('',#51038,#51039); +#51038 = CARTESIAN_POINT('',(3.675,1.3,5.E-02)); +#51039 = VECTOR('',#51040,1.); +#51040 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51041 = ORIENTED_EDGE('',*,*,#50386,.F.); +#51042 = PLANE('',#51043); +#51043 = AXIS2_PLACEMENT_3D('',#51044,#51045,#51046); +#51044 = CARTESIAN_POINT('',(3.675,1.3,0.11)); +#51045 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51046 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51047 = ADVANCED_FACE('',(#51048),#51059,.T.); +#51048 = FACE_BOUND('',#51049,.T.); +#51049 = EDGE_LOOP('',(#51050,#51051,#51052,#51058)); +#51050 = ORIENTED_EDGE('',*,*,#51036,.T.); +#51051 = ORIENTED_EDGE('',*,*,#50514,.T.); +#51052 = ORIENTED_EDGE('',*,*,#51053,.F.); +#51053 = EDGE_CURVE('',#50395,#50507,#51054,.T.); +#51054 = LINE('',#51055,#51056); +#51055 = CARTESIAN_POINT('',(3.675,1.25,-1.443289932013E-15)); +#51056 = VECTOR('',#51057,1.); +#51057 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51058 = ORIENTED_EDGE('',*,*,#50394,.F.); +#51059 = PLANE('',#51060); +#51060 = AXIS2_PLACEMENT_3D('',#51061,#51062,#51063); +#51061 = CARTESIAN_POINT('',(3.675,1.3,5.E-02)); +#51062 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#51063 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#51064 = ADVANCED_FACE('',(#51065),#51076,.T.); +#51065 = FACE_BOUND('',#51066,.T.); +#51066 = EDGE_LOOP('',(#51067,#51068,#51069,#51075)); +#51067 = ORIENTED_EDGE('',*,*,#51053,.T.); +#51068 = ORIENTED_EDGE('',*,*,#50506,.T.); +#51069 = ORIENTED_EDGE('',*,*,#51070,.F.); +#51070 = EDGE_CURVE('',#50403,#50499,#51071,.T.); +#51071 = LINE('',#51072,#51073); +#51072 = CARTESIAN_POINT('',(3.675,0.92,-1.33226762955E-15)); +#51073 = VECTOR('',#51074,1.); +#51074 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51075 = ORIENTED_EDGE('',*,*,#50402,.T.); +#51076 = PLANE('',#51077); +#51077 = AXIS2_PLACEMENT_3D('',#51078,#51079,#51080); +#51078 = CARTESIAN_POINT('',(3.675,1.25,-1.443289932013E-15)); +#51079 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51080 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51081 = ADVANCED_FACE('',(#51082),#51093,.T.); +#51082 = FACE_BOUND('',#51083,.T.); +#51083 = EDGE_LOOP('',(#51084,#51085,#51086,#51087)); +#51084 = ORIENTED_EDGE('',*,*,#50410,.F.); +#51085 = ORIENTED_EDGE('',*,*,#51070,.T.); +#51086 = ORIENTED_EDGE('',*,*,#50498,.T.); +#51087 = ORIENTED_EDGE('',*,*,#51088,.F.); +#51088 = EDGE_CURVE('',#50411,#50490,#51089,.T.); +#51089 = LINE('',#51090,#51091); +#51090 = CARTESIAN_POINT('',(3.675,0.92,3.619548911246E-02)); +#51091 = VECTOR('',#51092,1.); +#51092 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51093 = PLANE('',#51094); +#51094 = AXIS2_PLACEMENT_3D('',#51095,#51096,#51097); +#51095 = CARTESIAN_POINT('',(3.675,0.92,-1.33226762955E-15)); +#51096 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51097 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#51098 = ADVANCED_FACE('',(#51099),#51110,.T.); +#51099 = FACE_BOUND('',#51100,.T.); +#51100 = EDGE_LOOP('',(#51101,#51102,#51103,#51109)); +#51101 = ORIENTED_EDGE('',*,*,#51088,.T.); +#51102 = ORIENTED_EDGE('',*,*,#50489,.F.); +#51103 = ORIENTED_EDGE('',*,*,#51104,.F.); +#51104 = EDGE_CURVE('',#50419,#50482,#51105,.T.); +#51105 = LINE('',#51106,#51107); +#51106 = CARTESIAN_POINT('',(3.675,0.943186633611,6.541154699934E-02)); +#51107 = VECTOR('',#51108,1.); +#51108 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51109 = ORIENTED_EDGE('',*,*,#50418,.T.); +#51110 = CYLINDRICAL_SURFACE('',#51111,3.E-02); +#51111 = AXIS2_PLACEMENT_3D('',#51112,#51113,#51114); +#51112 = CARTESIAN_POINT('',(3.675,0.95,3.619548911246E-02)); +#51113 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51114 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51115 = ADVANCED_FACE('',(#51116),#51122,.T.); +#51116 = FACE_BOUND('',#51117,.T.); +#51117 = EDGE_LOOP('',(#51118,#51119,#51120,#51121)); +#51118 = ORIENTED_EDGE('',*,*,#51104,.T.); +#51119 = ORIENTED_EDGE('',*,*,#50481,.T.); +#51120 = ORIENTED_EDGE('',*,*,#50458,.T.); +#51121 = ORIENTED_EDGE('',*,*,#50427,.F.); +#51122 = PLANE('',#51123); +#51123 = AXIS2_PLACEMENT_3D('',#51124,#51125,#51126); +#51124 = CARTESIAN_POINT('',(3.675,0.943186633611,6.541154699934E-02)); +#51125 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#51126 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#51127 = ADVANCED_FACE('',(#51128),#51139,.T.); +#51128 = FACE_BOUND('',#51129,.T.); +#51129 = EDGE_LOOP('',(#51130,#51131,#51132,#51138)); +#51130 = ORIENTED_EDGE('',*,*,#43491,.T.); +#51131 = ORIENTED_EDGE('',*,*,#50207,.T.); +#51132 = ORIENTED_EDGE('',*,*,#51133,.F.); +#51133 = EDGE_CURVE('',#50255,#50199,#51134,.T.); +#51134 = LINE('',#51135,#51136); +#51135 = CARTESIAN_POINT('',(3.175,1.35,0.16)); +#51136 = VECTOR('',#51137,1.); +#51137 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51138 = ORIENTED_EDGE('',*,*,#50254,.T.); +#51139 = PLANE('',#51140); +#51140 = AXIS2_PLACEMENT_3D('',#51141,#51142,#51143); +#51141 = CARTESIAN_POINT('',(3.175,1.35,0.31)); +#51142 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51143 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51144 = ADVANCED_FACE('',(#51145),#51156,.F.); +#51145 = FACE_BOUND('',#51146,.F.); +#51146 = EDGE_LOOP('',(#51147,#51148,#51154,#51155)); +#51147 = ORIENTED_EDGE('',*,*,#50262,.T.); +#51148 = ORIENTED_EDGE('',*,*,#51149,.T.); +#51149 = EDGE_CURVE('',#50263,#50191,#51150,.T.); +#51150 = LINE('',#51151,#51152); +#51151 = CARTESIAN_POINT('',(3.175,1.3,0.11)); +#51152 = VECTOR('',#51153,1.); +#51153 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51154 = ORIENTED_EDGE('',*,*,#50198,.F.); +#51155 = ORIENTED_EDGE('',*,*,#51133,.F.); +#51156 = CYLINDRICAL_SURFACE('',#51157,5.E-02); +#51157 = AXIS2_PLACEMENT_3D('',#51158,#51159,#51160); +#51158 = CARTESIAN_POINT('',(3.175,1.35,0.11)); +#51159 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51160 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51161 = ADVANCED_FACE('',(#51162),#51173,.T.); +#51162 = FACE_BOUND('',#51163,.T.); +#51163 = EDGE_LOOP('',(#51164,#51165,#51166,#51172)); +#51164 = ORIENTED_EDGE('',*,*,#51149,.T.); +#51165 = ORIENTED_EDGE('',*,*,#50190,.T.); +#51166 = ORIENTED_EDGE('',*,*,#51167,.F.); +#51167 = EDGE_CURVE('',#50272,#50183,#51168,.T.); +#51168 = LINE('',#51169,#51170); +#51169 = CARTESIAN_POINT('',(3.175,1.3,5.E-02)); +#51170 = VECTOR('',#51171,1.); +#51171 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51172 = ORIENTED_EDGE('',*,*,#50271,.F.); +#51173 = PLANE('',#51174); +#51174 = AXIS2_PLACEMENT_3D('',#51175,#51176,#51177); +#51175 = CARTESIAN_POINT('',(3.175,1.3,0.11)); +#51176 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51177 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51178 = ADVANCED_FACE('',(#51179),#51190,.T.); +#51179 = FACE_BOUND('',#51180,.T.); +#51180 = EDGE_LOOP('',(#51181,#51182,#51183,#51189)); +#51181 = ORIENTED_EDGE('',*,*,#51167,.T.); +#51182 = ORIENTED_EDGE('',*,*,#50182,.T.); +#51183 = ORIENTED_EDGE('',*,*,#51184,.F.); +#51184 = EDGE_CURVE('',#50280,#50175,#51185,.T.); +#51185 = LINE('',#51186,#51187); +#51186 = CARTESIAN_POINT('',(3.175,1.25,-1.221245327088E-15)); +#51187 = VECTOR('',#51188,1.); +#51188 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51189 = ORIENTED_EDGE('',*,*,#50279,.F.); +#51190 = PLANE('',#51191); +#51191 = AXIS2_PLACEMENT_3D('',#51192,#51193,#51194); +#51192 = CARTESIAN_POINT('',(3.175,1.3,5.E-02)); +#51193 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#51194 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#51195 = ADVANCED_FACE('',(#51196),#51207,.T.); +#51196 = FACE_BOUND('',#51197,.T.); +#51197 = EDGE_LOOP('',(#51198,#51199,#51200,#51206)); +#51198 = ORIENTED_EDGE('',*,*,#51184,.T.); +#51199 = ORIENTED_EDGE('',*,*,#50174,.T.); +#51200 = ORIENTED_EDGE('',*,*,#51201,.F.); +#51201 = EDGE_CURVE('',#50288,#50167,#51202,.T.); +#51202 = LINE('',#51203,#51204); +#51203 = CARTESIAN_POINT('',(3.175,0.92,-1.110223024625E-15)); +#51204 = VECTOR('',#51205,1.); +#51205 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51206 = ORIENTED_EDGE('',*,*,#50287,.T.); +#51207 = PLANE('',#51208); +#51208 = AXIS2_PLACEMENT_3D('',#51209,#51210,#51211); +#51209 = CARTESIAN_POINT('',(3.175,1.25,-1.221245327088E-15)); +#51210 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51211 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51212 = ADVANCED_FACE('',(#51213),#51224,.T.); +#51213 = FACE_BOUND('',#51214,.T.); +#51214 = EDGE_LOOP('',(#51215,#51216,#51217,#51218)); +#51215 = ORIENTED_EDGE('',*,*,#50295,.F.); +#51216 = ORIENTED_EDGE('',*,*,#51201,.T.); +#51217 = ORIENTED_EDGE('',*,*,#50166,.T.); +#51218 = ORIENTED_EDGE('',*,*,#51219,.F.); +#51219 = EDGE_CURVE('',#50296,#50158,#51220,.T.); +#51220 = LINE('',#51221,#51222); +#51221 = CARTESIAN_POINT('',(3.175,0.92,3.619548911246E-02)); +#51222 = VECTOR('',#51223,1.); +#51223 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51224 = PLANE('',#51225); +#51225 = AXIS2_PLACEMENT_3D('',#51226,#51227,#51228); +#51226 = CARTESIAN_POINT('',(3.175,0.92,-1.110223024625E-15)); +#51227 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51228 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#51229 = ADVANCED_FACE('',(#51230),#51241,.T.); +#51230 = FACE_BOUND('',#51231,.T.); +#51231 = EDGE_LOOP('',(#51232,#51233,#51234,#51240)); +#51232 = ORIENTED_EDGE('',*,*,#51219,.T.); +#51233 = ORIENTED_EDGE('',*,*,#50157,.F.); +#51234 = ORIENTED_EDGE('',*,*,#51235,.F.); +#51235 = EDGE_CURVE('',#50304,#50150,#51236,.T.); +#51236 = LINE('',#51237,#51238); +#51237 = CARTESIAN_POINT('',(3.175,0.943186633611,6.541154699934E-02)); +#51238 = VECTOR('',#51239,1.); +#51239 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51240 = ORIENTED_EDGE('',*,*,#50303,.T.); +#51241 = CYLINDRICAL_SURFACE('',#51242,3.E-02); +#51242 = AXIS2_PLACEMENT_3D('',#51243,#51244,#51245); +#51243 = CARTESIAN_POINT('',(3.175,0.95,3.619548911246E-02)); +#51244 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51245 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51246 = ADVANCED_FACE('',(#51247),#51253,.T.); +#51247 = FACE_BOUND('',#51248,.T.); +#51248 = EDGE_LOOP('',(#51249,#51250,#51251,#51252)); +#51249 = ORIENTED_EDGE('',*,*,#51235,.T.); +#51250 = ORIENTED_EDGE('',*,*,#50149,.T.); +#51251 = ORIENTED_EDGE('',*,*,#50237,.T.); +#51252 = ORIENTED_EDGE('',*,*,#50312,.F.); +#51253 = PLANE('',#51254); +#51254 = AXIS2_PLACEMENT_3D('',#51255,#51256,#51257); +#51255 = CARTESIAN_POINT('',(3.175,0.943186633611,6.541154699934E-02)); +#51256 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#51257 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#51258 = ADVANCED_FACE('',(#51259),#51265,.T.); +#51259 = FACE_BOUND('',#51260,.T.); +#51260 = EDGE_LOOP('',(#51261,#51262,#51263,#51264)); +#51261 = ORIENTED_EDGE('',*,*,#50106,.F.); +#51262 = ORIENTED_EDGE('',*,*,#50350,.F.); +#51263 = ORIENTED_EDGE('',*,*,#42941,.F.); +#51264 = ORIENTED_EDGE('',*,*,#50066,.T.); +#51265 = PLANE('',#51266); +#51266 = AXIS2_PLACEMENT_3D('',#51267,#51268,#51269); +#51267 = CARTESIAN_POINT('',(3.425,0.85,5.5E-02)); +#51268 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#51269 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#51270 = ADVANCED_FACE('',(#51271),#51282,.T.); +#51271 = FACE_BOUND('',#51272,.T.); +#51272 = EDGE_LOOP('',(#51273,#51274,#51275,#51281)); +#51273 = ORIENTED_EDGE('',*,*,#43523,.T.); +#51274 = ORIENTED_EDGE('',*,*,#49913,.T.); +#51275 = ORIENTED_EDGE('',*,*,#51276,.F.); +#51276 = EDGE_CURVE('',#49744,#49905,#51277,.T.); +#51277 = LINE('',#51278,#51279); +#51278 = CARTESIAN_POINT('',(2.675,1.35,0.16)); +#51279 = VECTOR('',#51280,1.); +#51280 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51281 = ORIENTED_EDGE('',*,*,#49743,.T.); +#51282 = PLANE('',#51283); +#51283 = AXIS2_PLACEMENT_3D('',#51284,#51285,#51286); +#51284 = CARTESIAN_POINT('',(2.675,1.35,0.31)); +#51285 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51286 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51287 = ADVANCED_FACE('',(#51288),#51299,.F.); +#51288 = FACE_BOUND('',#51289,.F.); +#51289 = EDGE_LOOP('',(#51290,#51291,#51297,#51298)); +#51290 = ORIENTED_EDGE('',*,*,#49751,.T.); +#51291 = ORIENTED_EDGE('',*,*,#51292,.T.); +#51292 = EDGE_CURVE('',#49752,#49897,#51293,.T.); +#51293 = LINE('',#51294,#51295); +#51294 = CARTESIAN_POINT('',(2.675,1.3,0.11)); +#51295 = VECTOR('',#51296,1.); +#51296 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51297 = ORIENTED_EDGE('',*,*,#49904,.F.); +#51298 = ORIENTED_EDGE('',*,*,#51276,.F.); +#51299 = CYLINDRICAL_SURFACE('',#51300,5.E-02); +#51300 = AXIS2_PLACEMENT_3D('',#51301,#51302,#51303); +#51301 = CARTESIAN_POINT('',(2.675,1.35,0.11)); +#51302 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51303 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51304 = ADVANCED_FACE('',(#51305),#51316,.T.); +#51305 = FACE_BOUND('',#51306,.T.); +#51306 = EDGE_LOOP('',(#51307,#51308,#51309,#51315)); +#51307 = ORIENTED_EDGE('',*,*,#51292,.T.); +#51308 = ORIENTED_EDGE('',*,*,#49896,.T.); +#51309 = ORIENTED_EDGE('',*,*,#51310,.F.); +#51310 = EDGE_CURVE('',#49761,#49889,#51311,.T.); +#51311 = LINE('',#51312,#51313); +#51312 = CARTESIAN_POINT('',(2.675,1.3,5.E-02)); +#51313 = VECTOR('',#51314,1.); +#51314 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51315 = ORIENTED_EDGE('',*,*,#49760,.F.); +#51316 = PLANE('',#51317); +#51317 = AXIS2_PLACEMENT_3D('',#51318,#51319,#51320); +#51318 = CARTESIAN_POINT('',(2.675,1.3,0.11)); +#51319 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51320 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51321 = ADVANCED_FACE('',(#51322),#51333,.T.); +#51322 = FACE_BOUND('',#51323,.T.); +#51323 = EDGE_LOOP('',(#51324,#51325,#51326,#51332)); +#51324 = ORIENTED_EDGE('',*,*,#51310,.T.); +#51325 = ORIENTED_EDGE('',*,*,#49888,.T.); +#51326 = ORIENTED_EDGE('',*,*,#51327,.F.); +#51327 = EDGE_CURVE('',#49769,#49881,#51328,.T.); +#51328 = LINE('',#51329,#51330); +#51329 = CARTESIAN_POINT('',(2.675,1.25,-1.110223024625E-15)); +#51330 = VECTOR('',#51331,1.); +#51331 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51332 = ORIENTED_EDGE('',*,*,#49768,.F.); +#51333 = PLANE('',#51334); +#51334 = AXIS2_PLACEMENT_3D('',#51335,#51336,#51337); +#51335 = CARTESIAN_POINT('',(2.675,1.3,5.E-02)); +#51336 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#51337 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#51338 = ADVANCED_FACE('',(#51339),#51350,.T.); +#51339 = FACE_BOUND('',#51340,.T.); +#51340 = EDGE_LOOP('',(#51341,#51342,#51343,#51349)); +#51341 = ORIENTED_EDGE('',*,*,#51327,.T.); +#51342 = ORIENTED_EDGE('',*,*,#49880,.T.); +#51343 = ORIENTED_EDGE('',*,*,#51344,.F.); +#51344 = EDGE_CURVE('',#49777,#49873,#51345,.T.); +#51345 = LINE('',#51346,#51347); +#51346 = CARTESIAN_POINT('',(2.675,0.92,-9.992007221626E-16)); +#51347 = VECTOR('',#51348,1.); +#51348 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51349 = ORIENTED_EDGE('',*,*,#49776,.T.); +#51350 = PLANE('',#51351); +#51351 = AXIS2_PLACEMENT_3D('',#51352,#51353,#51354); +#51352 = CARTESIAN_POINT('',(2.675,1.25,-1.110223024625E-15)); +#51353 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51354 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51355 = ADVANCED_FACE('',(#51356),#51367,.T.); +#51356 = FACE_BOUND('',#51357,.T.); +#51357 = EDGE_LOOP('',(#51358,#51359,#51360,#51361)); +#51358 = ORIENTED_EDGE('',*,*,#49784,.F.); +#51359 = ORIENTED_EDGE('',*,*,#51344,.T.); +#51360 = ORIENTED_EDGE('',*,*,#49872,.T.); +#51361 = ORIENTED_EDGE('',*,*,#51362,.F.); +#51362 = EDGE_CURVE('',#49785,#49864,#51363,.T.); +#51363 = LINE('',#51364,#51365); +#51364 = CARTESIAN_POINT('',(2.675,0.92,3.619548911246E-02)); +#51365 = VECTOR('',#51366,1.); +#51366 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51367 = PLANE('',#51368); +#51368 = AXIS2_PLACEMENT_3D('',#51369,#51370,#51371); +#51369 = CARTESIAN_POINT('',(2.675,0.92,-9.992007221626E-16)); +#51370 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51371 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#51372 = ADVANCED_FACE('',(#51373),#51384,.T.); +#51373 = FACE_BOUND('',#51374,.T.); +#51374 = EDGE_LOOP('',(#51375,#51376,#51377,#51383)); +#51375 = ORIENTED_EDGE('',*,*,#51362,.T.); +#51376 = ORIENTED_EDGE('',*,*,#49863,.F.); +#51377 = ORIENTED_EDGE('',*,*,#51378,.F.); +#51378 = EDGE_CURVE('',#49793,#49856,#51379,.T.); +#51379 = LINE('',#51380,#51381); +#51380 = CARTESIAN_POINT('',(2.675,0.943186633611,6.541154699934E-02)); +#51381 = VECTOR('',#51382,1.); +#51382 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51383 = ORIENTED_EDGE('',*,*,#49792,.T.); +#51384 = CYLINDRICAL_SURFACE('',#51385,3.E-02); +#51385 = AXIS2_PLACEMENT_3D('',#51386,#51387,#51388); +#51386 = CARTESIAN_POINT('',(2.675,0.95,3.619548911246E-02)); +#51387 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51388 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51389 = ADVANCED_FACE('',(#51390),#51396,.T.); +#51390 = FACE_BOUND('',#51391,.T.); +#51391 = EDGE_LOOP('',(#51392,#51393,#51394,#51395)); +#51392 = ORIENTED_EDGE('',*,*,#51378,.T.); +#51393 = ORIENTED_EDGE('',*,*,#49855,.T.); +#51394 = ORIENTED_EDGE('',*,*,#49832,.T.); +#51395 = ORIENTED_EDGE('',*,*,#49801,.F.); +#51396 = PLANE('',#51397); +#51397 = AXIS2_PLACEMENT_3D('',#51398,#51399,#51400); +#51398 = CARTESIAN_POINT('',(2.675,0.943186633611,6.541154699934E-02)); +#51399 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#51400 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#51401 = ADVANCED_FACE('',(#51402),#51413,.T.); +#51402 = FACE_BOUND('',#51403,.T.); +#51403 = EDGE_LOOP('',(#51404,#51405,#51406,#51412)); +#51404 = ORIENTED_EDGE('',*,*,#43555,.T.); +#51405 = ORIENTED_EDGE('',*,*,#49680,.T.); +#51406 = ORIENTED_EDGE('',*,*,#51407,.F.); +#51407 = EDGE_CURVE('',#49549,#49672,#51408,.T.); +#51408 = LINE('',#51409,#51410); +#51409 = CARTESIAN_POINT('',(2.175,1.35,0.16)); +#51410 = VECTOR('',#51411,1.); +#51411 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51412 = ORIENTED_EDGE('',*,*,#49548,.T.); +#51413 = PLANE('',#51414); +#51414 = AXIS2_PLACEMENT_3D('',#51415,#51416,#51417); +#51415 = CARTESIAN_POINT('',(2.175,1.35,0.31)); +#51416 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51417 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51418 = ADVANCED_FACE('',(#51419),#51430,.F.); +#51419 = FACE_BOUND('',#51420,.F.); +#51420 = EDGE_LOOP('',(#51421,#51422,#51428,#51429)); +#51421 = ORIENTED_EDGE('',*,*,#49556,.T.); +#51422 = ORIENTED_EDGE('',*,*,#51423,.T.); +#51423 = EDGE_CURVE('',#49557,#49664,#51424,.T.); +#51424 = LINE('',#51425,#51426); +#51425 = CARTESIAN_POINT('',(2.175,1.3,0.11)); +#51426 = VECTOR('',#51427,1.); +#51427 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51428 = ORIENTED_EDGE('',*,*,#49671,.F.); +#51429 = ORIENTED_EDGE('',*,*,#51407,.F.); +#51430 = CYLINDRICAL_SURFACE('',#51431,5.E-02); +#51431 = AXIS2_PLACEMENT_3D('',#51432,#51433,#51434); +#51432 = CARTESIAN_POINT('',(2.175,1.35,0.11)); +#51433 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51434 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51435 = ADVANCED_FACE('',(#51436),#51447,.T.); +#51436 = FACE_BOUND('',#51437,.T.); +#51437 = EDGE_LOOP('',(#51438,#51439,#51440,#51446)); +#51438 = ORIENTED_EDGE('',*,*,#51423,.T.); +#51439 = ORIENTED_EDGE('',*,*,#49663,.T.); +#51440 = ORIENTED_EDGE('',*,*,#51441,.F.); +#51441 = EDGE_CURVE('',#49566,#49656,#51442,.T.); +#51442 = LINE('',#51443,#51444); +#51443 = CARTESIAN_POINT('',(2.175,1.3,5.E-02)); +#51444 = VECTOR('',#51445,1.); +#51445 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51446 = ORIENTED_EDGE('',*,*,#49565,.F.); +#51447 = PLANE('',#51448); +#51448 = AXIS2_PLACEMENT_3D('',#51449,#51450,#51451); +#51449 = CARTESIAN_POINT('',(2.175,1.3,0.11)); +#51450 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51451 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51452 = ADVANCED_FACE('',(#51453),#51464,.T.); +#51453 = FACE_BOUND('',#51454,.T.); +#51454 = EDGE_LOOP('',(#51455,#51456,#51457,#51463)); +#51455 = ORIENTED_EDGE('',*,*,#51441,.T.); +#51456 = ORIENTED_EDGE('',*,*,#49655,.T.); +#51457 = ORIENTED_EDGE('',*,*,#51458,.F.); +#51458 = EDGE_CURVE('',#49574,#49648,#51459,.T.); +#51459 = LINE('',#51460,#51461); +#51460 = CARTESIAN_POINT('',(2.175,1.25,-9.992007221626E-16)); +#51461 = VECTOR('',#51462,1.); +#51462 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51463 = ORIENTED_EDGE('',*,*,#49573,.F.); +#51464 = PLANE('',#51465); +#51465 = AXIS2_PLACEMENT_3D('',#51466,#51467,#51468); +#51466 = CARTESIAN_POINT('',(2.175,1.3,5.E-02)); +#51467 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#51468 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#51469 = ADVANCED_FACE('',(#51470),#51481,.T.); +#51470 = FACE_BOUND('',#51471,.T.); +#51471 = EDGE_LOOP('',(#51472,#51473,#51474,#51480)); +#51472 = ORIENTED_EDGE('',*,*,#51458,.T.); +#51473 = ORIENTED_EDGE('',*,*,#49647,.T.); +#51474 = ORIENTED_EDGE('',*,*,#51475,.F.); +#51475 = EDGE_CURVE('',#49582,#49640,#51476,.T.); +#51476 = LINE('',#51477,#51478); +#51477 = CARTESIAN_POINT('',(2.175,0.92,-8.881784197001E-16)); +#51478 = VECTOR('',#51479,1.); +#51479 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51480 = ORIENTED_EDGE('',*,*,#49581,.T.); +#51481 = PLANE('',#51482); +#51482 = AXIS2_PLACEMENT_3D('',#51483,#51484,#51485); +#51483 = CARTESIAN_POINT('',(2.175,1.25,-9.992007221626E-16)); +#51484 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51485 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51486 = ADVANCED_FACE('',(#51487),#51498,.T.); +#51487 = FACE_BOUND('',#51488,.T.); +#51488 = EDGE_LOOP('',(#51489,#51490,#51491,#51492)); +#51489 = ORIENTED_EDGE('',*,*,#49589,.F.); +#51490 = ORIENTED_EDGE('',*,*,#51475,.T.); +#51491 = ORIENTED_EDGE('',*,*,#49639,.T.); +#51492 = ORIENTED_EDGE('',*,*,#51493,.F.); +#51493 = EDGE_CURVE('',#49590,#49631,#51494,.T.); +#51494 = LINE('',#51495,#51496); +#51495 = CARTESIAN_POINT('',(2.175,0.92,3.619548911246E-02)); +#51496 = VECTOR('',#51497,1.); +#51497 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51498 = PLANE('',#51499); +#51499 = AXIS2_PLACEMENT_3D('',#51500,#51501,#51502); +#51500 = CARTESIAN_POINT('',(2.175,0.92,-8.881784197001E-16)); +#51501 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51502 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#51503 = ADVANCED_FACE('',(#51504),#51515,.T.); +#51504 = FACE_BOUND('',#51505,.T.); +#51505 = EDGE_LOOP('',(#51506,#51507,#51508,#51514)); +#51506 = ORIENTED_EDGE('',*,*,#51493,.T.); +#51507 = ORIENTED_EDGE('',*,*,#49630,.F.); +#51508 = ORIENTED_EDGE('',*,*,#51509,.F.); +#51509 = EDGE_CURVE('',#49598,#49623,#51510,.T.); +#51510 = LINE('',#51511,#51512); +#51511 = CARTESIAN_POINT('',(2.175,0.943186633611,6.541154699934E-02)); +#51512 = VECTOR('',#51513,1.); +#51513 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51514 = ORIENTED_EDGE('',*,*,#49597,.T.); +#51515 = CYLINDRICAL_SURFACE('',#51516,3.E-02); +#51516 = AXIS2_PLACEMENT_3D('',#51517,#51518,#51519); +#51517 = CARTESIAN_POINT('',(2.175,0.95,3.619548911246E-02)); +#51518 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51519 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51520 = ADVANCED_FACE('',(#51521),#51527,.T.); +#51521 = FACE_BOUND('',#51522,.T.); +#51522 = EDGE_LOOP('',(#51523,#51524,#51525,#51526)); +#51523 = ORIENTED_EDGE('',*,*,#51509,.T.); +#51524 = ORIENTED_EDGE('',*,*,#49622,.T.); +#51525 = ORIENTED_EDGE('',*,*,#49524,.T.); +#51526 = ORIENTED_EDGE('',*,*,#49606,.F.); +#51527 = PLANE('',#51528); +#51528 = AXIS2_PLACEMENT_3D('',#51529,#51530,#51531); +#51529 = CARTESIAN_POINT('',(2.175,0.943186633611,6.541154699934E-02)); +#51530 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#51531 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#51532 = ADVANCED_FACE('',(#51533),#51539,.T.); +#51533 = FACE_BOUND('',#51534,.T.); +#51534 = EDGE_LOOP('',(#51535,#51536,#51537,#51538)); +#51535 = ORIENTED_EDGE('',*,*,#49480,.F.); +#51536 = ORIENTED_EDGE('',*,*,#49724,.F.); +#51537 = ORIENTED_EDGE('',*,*,#42877,.F.); +#51538 = ORIENTED_EDGE('',*,*,#49440,.T.); +#51539 = PLANE('',#51540); +#51540 = AXIS2_PLACEMENT_3D('',#51541,#51542,#51543); +#51541 = CARTESIAN_POINT('',(2.425,0.85,5.5E-02)); +#51542 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#51543 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#51544 = ADVANCED_FACE('',(#51545),#51556,.T.); +#51545 = FACE_BOUND('',#51546,.T.); +#51546 = EDGE_LOOP('',(#51547,#51548,#51549,#51555)); +#51547 = ORIENTED_EDGE('',*,*,#43587,.T.); +#51548 = ORIENTED_EDGE('',*,*,#49183,.T.); +#51549 = ORIENTED_EDGE('',*,*,#51550,.F.); +#51550 = EDGE_CURVE('',#49236,#49175,#51551,.T.); +#51551 = LINE('',#51552,#51553); +#51552 = CARTESIAN_POINT('',(1.675,1.35,0.16)); +#51553 = VECTOR('',#51554,1.); +#51554 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51555 = ORIENTED_EDGE('',*,*,#49235,.T.); +#51556 = PLANE('',#51557); +#51557 = AXIS2_PLACEMENT_3D('',#51558,#51559,#51560); +#51558 = CARTESIAN_POINT('',(1.675,1.35,0.31)); +#51559 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51560 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51561 = ADVANCED_FACE('',(#51562),#51573,.F.); +#51562 = FACE_BOUND('',#51563,.F.); +#51563 = EDGE_LOOP('',(#51564,#51565,#51571,#51572)); +#51564 = ORIENTED_EDGE('',*,*,#49243,.T.); +#51565 = ORIENTED_EDGE('',*,*,#51566,.T.); +#51566 = EDGE_CURVE('',#49244,#49167,#51567,.T.); +#51567 = LINE('',#51568,#51569); +#51568 = CARTESIAN_POINT('',(1.675,1.3,0.11)); +#51569 = VECTOR('',#51570,1.); +#51570 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51571 = ORIENTED_EDGE('',*,*,#49174,.F.); +#51572 = ORIENTED_EDGE('',*,*,#51550,.F.); +#51573 = CYLINDRICAL_SURFACE('',#51574,5.E-02); +#51574 = AXIS2_PLACEMENT_3D('',#51575,#51576,#51577); +#51575 = CARTESIAN_POINT('',(1.675,1.35,0.11)); +#51576 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51577 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51578 = ADVANCED_FACE('',(#51579),#51590,.T.); +#51579 = FACE_BOUND('',#51580,.T.); +#51580 = EDGE_LOOP('',(#51581,#51582,#51583,#51589)); +#51581 = ORIENTED_EDGE('',*,*,#51566,.T.); +#51582 = ORIENTED_EDGE('',*,*,#49166,.T.); +#51583 = ORIENTED_EDGE('',*,*,#51584,.F.); +#51584 = EDGE_CURVE('',#49253,#49159,#51585,.T.); +#51585 = LINE('',#51586,#51587); +#51586 = CARTESIAN_POINT('',(1.675,1.3,5.E-02)); +#51587 = VECTOR('',#51588,1.); +#51588 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51589 = ORIENTED_EDGE('',*,*,#49252,.F.); +#51590 = PLANE('',#51591); +#51591 = AXIS2_PLACEMENT_3D('',#51592,#51593,#51594); +#51592 = CARTESIAN_POINT('',(1.675,1.3,0.11)); +#51593 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51594 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51595 = ADVANCED_FACE('',(#51596),#51607,.T.); +#51596 = FACE_BOUND('',#51597,.T.); +#51597 = EDGE_LOOP('',(#51598,#51599,#51600,#51606)); +#51598 = ORIENTED_EDGE('',*,*,#51584,.T.); +#51599 = ORIENTED_EDGE('',*,*,#49158,.T.); +#51600 = ORIENTED_EDGE('',*,*,#51601,.F.); +#51601 = EDGE_CURVE('',#49261,#49151,#51602,.T.); +#51602 = LINE('',#51603,#51604); +#51603 = CARTESIAN_POINT('',(1.675,1.25,-8.881784197001E-16)); +#51604 = VECTOR('',#51605,1.); +#51605 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51606 = ORIENTED_EDGE('',*,*,#49260,.F.); +#51607 = PLANE('',#51608); +#51608 = AXIS2_PLACEMENT_3D('',#51609,#51610,#51611); +#51609 = CARTESIAN_POINT('',(1.675,1.3,5.E-02)); +#51610 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#51611 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#51612 = ADVANCED_FACE('',(#51613),#51624,.T.); +#51613 = FACE_BOUND('',#51614,.T.); +#51614 = EDGE_LOOP('',(#51615,#51616,#51617,#51623)); +#51615 = ORIENTED_EDGE('',*,*,#51601,.T.); +#51616 = ORIENTED_EDGE('',*,*,#49150,.T.); +#51617 = ORIENTED_EDGE('',*,*,#51618,.F.); +#51618 = EDGE_CURVE('',#49269,#49143,#51619,.T.); +#51619 = LINE('',#51620,#51621); +#51620 = CARTESIAN_POINT('',(1.675,0.92,-7.771561172376E-16)); +#51621 = VECTOR('',#51622,1.); +#51622 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51623 = ORIENTED_EDGE('',*,*,#49268,.T.); +#51624 = PLANE('',#51625); +#51625 = AXIS2_PLACEMENT_3D('',#51626,#51627,#51628); +#51626 = CARTESIAN_POINT('',(1.675,1.25,-8.881784197001E-16)); +#51627 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51628 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51629 = ADVANCED_FACE('',(#51630),#51641,.T.); +#51630 = FACE_BOUND('',#51631,.T.); +#51631 = EDGE_LOOP('',(#51632,#51633,#51634,#51635)); +#51632 = ORIENTED_EDGE('',*,*,#49276,.F.); +#51633 = ORIENTED_EDGE('',*,*,#51618,.T.); +#51634 = ORIENTED_EDGE('',*,*,#49142,.T.); +#51635 = ORIENTED_EDGE('',*,*,#51636,.F.); +#51636 = EDGE_CURVE('',#49277,#49134,#51637,.T.); +#51637 = LINE('',#51638,#51639); +#51638 = CARTESIAN_POINT('',(1.675,0.92,3.619548911246E-02)); +#51639 = VECTOR('',#51640,1.); +#51640 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51641 = PLANE('',#51642); +#51642 = AXIS2_PLACEMENT_3D('',#51643,#51644,#51645); +#51643 = CARTESIAN_POINT('',(1.675,0.92,-7.771561172376E-16)); +#51644 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51645 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#51646 = ADVANCED_FACE('',(#51647),#51658,.T.); +#51647 = FACE_BOUND('',#51648,.T.); +#51648 = EDGE_LOOP('',(#51649,#51650,#51651,#51657)); +#51649 = ORIENTED_EDGE('',*,*,#51636,.T.); +#51650 = ORIENTED_EDGE('',*,*,#49133,.F.); +#51651 = ORIENTED_EDGE('',*,*,#51652,.F.); +#51652 = EDGE_CURVE('',#49285,#49126,#51653,.T.); +#51653 = LINE('',#51654,#51655); +#51654 = CARTESIAN_POINT('',(1.675,0.943186633611,6.541154699934E-02)); +#51655 = VECTOR('',#51656,1.); +#51656 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51657 = ORIENTED_EDGE('',*,*,#49284,.T.); +#51658 = CYLINDRICAL_SURFACE('',#51659,3.E-02); +#51659 = AXIS2_PLACEMENT_3D('',#51660,#51661,#51662); +#51660 = CARTESIAN_POINT('',(1.675,0.95,3.619548911246E-02)); +#51661 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51662 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51663 = ADVANCED_FACE('',(#51664),#51670,.T.); +#51664 = FACE_BOUND('',#51665,.T.); +#51665 = EDGE_LOOP('',(#51666,#51667,#51668,#51669)); +#51666 = ORIENTED_EDGE('',*,*,#51652,.T.); +#51667 = ORIENTED_EDGE('',*,*,#49125,.T.); +#51668 = ORIENTED_EDGE('',*,*,#49218,.T.); +#51669 = ORIENTED_EDGE('',*,*,#49293,.F.); +#51670 = PLANE('',#51671); +#51671 = AXIS2_PLACEMENT_3D('',#51672,#51673,#51674); +#51672 = CARTESIAN_POINT('',(1.675,0.943186633611,6.541154699934E-02)); +#51673 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#51674 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#51675 = ADVANCED_FACE('',(#51676),#51687,.T.); +#51676 = FACE_BOUND('',#51677,.T.); +#51677 = EDGE_LOOP('',(#51678,#51679,#51680,#51686)); +#51678 = ORIENTED_EDGE('',*,*,#43619,.T.); +#51679 = ORIENTED_EDGE('',*,*,#49054,.T.); +#51680 = ORIENTED_EDGE('',*,*,#51681,.F.); +#51681 = EDGE_CURVE('',#48923,#49046,#51682,.T.); +#51682 = LINE('',#51683,#51684); +#51683 = CARTESIAN_POINT('',(1.175,1.35,0.16)); +#51684 = VECTOR('',#51685,1.); +#51685 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51686 = ORIENTED_EDGE('',*,*,#48922,.T.); +#51687 = PLANE('',#51688); +#51688 = AXIS2_PLACEMENT_3D('',#51689,#51690,#51691); +#51689 = CARTESIAN_POINT('',(1.175,1.35,0.31)); +#51690 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51691 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51692 = ADVANCED_FACE('',(#51693),#51704,.F.); +#51693 = FACE_BOUND('',#51694,.F.); +#51694 = EDGE_LOOP('',(#51695,#51696,#51702,#51703)); +#51695 = ORIENTED_EDGE('',*,*,#48930,.T.); +#51696 = ORIENTED_EDGE('',*,*,#51697,.T.); +#51697 = EDGE_CURVE('',#48931,#49038,#51698,.T.); +#51698 = LINE('',#51699,#51700); +#51699 = CARTESIAN_POINT('',(1.175,1.3,0.11)); +#51700 = VECTOR('',#51701,1.); +#51701 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51702 = ORIENTED_EDGE('',*,*,#49045,.F.); +#51703 = ORIENTED_EDGE('',*,*,#51681,.F.); +#51704 = CYLINDRICAL_SURFACE('',#51705,5.E-02); +#51705 = AXIS2_PLACEMENT_3D('',#51706,#51707,#51708); +#51706 = CARTESIAN_POINT('',(1.175,1.35,0.11)); +#51707 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51708 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51709 = ADVANCED_FACE('',(#51710),#51721,.T.); +#51710 = FACE_BOUND('',#51711,.T.); +#51711 = EDGE_LOOP('',(#51712,#51713,#51714,#51720)); +#51712 = ORIENTED_EDGE('',*,*,#51697,.T.); +#51713 = ORIENTED_EDGE('',*,*,#49037,.T.); +#51714 = ORIENTED_EDGE('',*,*,#51715,.F.); +#51715 = EDGE_CURVE('',#48940,#49030,#51716,.T.); +#51716 = LINE('',#51717,#51718); +#51717 = CARTESIAN_POINT('',(1.175,1.3,5.E-02)); +#51718 = VECTOR('',#51719,1.); +#51719 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51720 = ORIENTED_EDGE('',*,*,#48939,.F.); +#51721 = PLANE('',#51722); +#51722 = AXIS2_PLACEMENT_3D('',#51723,#51724,#51725); +#51723 = CARTESIAN_POINT('',(1.175,1.3,0.11)); +#51724 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51725 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51726 = ADVANCED_FACE('',(#51727),#51738,.T.); +#51727 = FACE_BOUND('',#51728,.T.); +#51728 = EDGE_LOOP('',(#51729,#51730,#51731,#51737)); +#51729 = ORIENTED_EDGE('',*,*,#51715,.T.); +#51730 = ORIENTED_EDGE('',*,*,#49029,.T.); +#51731 = ORIENTED_EDGE('',*,*,#51732,.F.); +#51732 = EDGE_CURVE('',#48948,#49022,#51733,.T.); +#51733 = LINE('',#51734,#51735); +#51734 = CARTESIAN_POINT('',(1.175,1.25,-7.771561172376E-16)); +#51735 = VECTOR('',#51736,1.); +#51736 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51737 = ORIENTED_EDGE('',*,*,#48947,.F.); +#51738 = PLANE('',#51739); +#51739 = AXIS2_PLACEMENT_3D('',#51740,#51741,#51742); +#51740 = CARTESIAN_POINT('',(1.175,1.3,5.E-02)); +#51741 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#51742 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#51743 = ADVANCED_FACE('',(#51744),#51755,.T.); +#51744 = FACE_BOUND('',#51745,.T.); +#51745 = EDGE_LOOP('',(#51746,#51747,#51748,#51754)); +#51746 = ORIENTED_EDGE('',*,*,#51732,.T.); +#51747 = ORIENTED_EDGE('',*,*,#49021,.T.); +#51748 = ORIENTED_EDGE('',*,*,#51749,.F.); +#51749 = EDGE_CURVE('',#48956,#49014,#51750,.T.); +#51750 = LINE('',#51751,#51752); +#51751 = CARTESIAN_POINT('',(1.175,0.92,-6.661338147751E-16)); +#51752 = VECTOR('',#51753,1.); +#51753 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51754 = ORIENTED_EDGE('',*,*,#48955,.T.); +#51755 = PLANE('',#51756); +#51756 = AXIS2_PLACEMENT_3D('',#51757,#51758,#51759); +#51757 = CARTESIAN_POINT('',(1.175,1.25,-7.771561172376E-16)); +#51758 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51759 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51760 = ADVANCED_FACE('',(#51761),#51772,.T.); +#51761 = FACE_BOUND('',#51762,.T.); +#51762 = EDGE_LOOP('',(#51763,#51764,#51765,#51766)); +#51763 = ORIENTED_EDGE('',*,*,#48963,.F.); +#51764 = ORIENTED_EDGE('',*,*,#51749,.T.); +#51765 = ORIENTED_EDGE('',*,*,#49013,.T.); +#51766 = ORIENTED_EDGE('',*,*,#51767,.F.); +#51767 = EDGE_CURVE('',#48964,#49005,#51768,.T.); +#51768 = LINE('',#51769,#51770); +#51769 = CARTESIAN_POINT('',(1.175,0.92,3.619548911246E-02)); +#51770 = VECTOR('',#51771,1.); +#51771 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51772 = PLANE('',#51773); +#51773 = AXIS2_PLACEMENT_3D('',#51774,#51775,#51776); +#51774 = CARTESIAN_POINT('',(1.175,0.92,-6.661338147751E-16)); +#51775 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51776 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#51777 = ADVANCED_FACE('',(#51778),#51789,.T.); +#51778 = FACE_BOUND('',#51779,.T.); +#51779 = EDGE_LOOP('',(#51780,#51781,#51782,#51788)); +#51780 = ORIENTED_EDGE('',*,*,#51767,.T.); +#51781 = ORIENTED_EDGE('',*,*,#49004,.F.); +#51782 = ORIENTED_EDGE('',*,*,#51783,.F.); +#51783 = EDGE_CURVE('',#48972,#48997,#51784,.T.); +#51784 = LINE('',#51785,#51786); +#51785 = CARTESIAN_POINT('',(1.175,0.943186633611,6.541154699934E-02)); +#51786 = VECTOR('',#51787,1.); +#51787 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51788 = ORIENTED_EDGE('',*,*,#48971,.T.); +#51789 = CYLINDRICAL_SURFACE('',#51790,3.E-02); +#51790 = AXIS2_PLACEMENT_3D('',#51791,#51792,#51793); +#51791 = CARTESIAN_POINT('',(1.175,0.95,3.619548911246E-02)); +#51792 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51793 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51794 = ADVANCED_FACE('',(#51795),#51801,.T.); +#51795 = FACE_BOUND('',#51796,.T.); +#51796 = EDGE_LOOP('',(#51797,#51798,#51799,#51800)); +#51797 = ORIENTED_EDGE('',*,*,#51783,.T.); +#51798 = ORIENTED_EDGE('',*,*,#48996,.T.); +#51799 = ORIENTED_EDGE('',*,*,#48898,.T.); +#51800 = ORIENTED_EDGE('',*,*,#48980,.F.); +#51801 = PLANE('',#51802); +#51802 = AXIS2_PLACEMENT_3D('',#51803,#51804,#51805); +#51803 = CARTESIAN_POINT('',(1.175,0.943186633611,6.541154699934E-02)); +#51804 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#51805 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#51806 = ADVANCED_FACE('',(#51807),#51813,.T.); +#51807 = FACE_BOUND('',#51808,.T.); +#51808 = EDGE_LOOP('',(#51809,#51810,#51811,#51812)); +#51809 = ORIENTED_EDGE('',*,*,#48854,.F.); +#51810 = ORIENTED_EDGE('',*,*,#49098,.F.); +#51811 = ORIENTED_EDGE('',*,*,#42813,.F.); +#51812 = ORIENTED_EDGE('',*,*,#48814,.T.); +#51813 = PLANE('',#51814); +#51814 = AXIS2_PLACEMENT_3D('',#51815,#51816,#51817); +#51815 = CARTESIAN_POINT('',(1.425,0.85,5.5E-02)); +#51816 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#51817 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#51818 = ADVANCED_FACE('',(#51819),#51830,.T.); +#51819 = FACE_BOUND('',#51820,.T.); +#51820 = EDGE_LOOP('',(#51821,#51822,#51823,#51829)); +#51821 = ORIENTED_EDGE('',*,*,#43651,.T.); +#51822 = ORIENTED_EDGE('',*,*,#48661,.T.); +#51823 = ORIENTED_EDGE('',*,*,#51824,.F.); +#51824 = EDGE_CURVE('',#48492,#48653,#51825,.T.); +#51825 = LINE('',#51826,#51827); +#51826 = CARTESIAN_POINT('',(0.675,1.35,0.16)); +#51827 = VECTOR('',#51828,1.); +#51828 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51829 = ORIENTED_EDGE('',*,*,#48491,.T.); +#51830 = PLANE('',#51831); +#51831 = AXIS2_PLACEMENT_3D('',#51832,#51833,#51834); +#51832 = CARTESIAN_POINT('',(0.675,1.35,0.31)); +#51833 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51834 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51835 = ADVANCED_FACE('',(#51836),#51847,.F.); +#51836 = FACE_BOUND('',#51837,.F.); +#51837 = EDGE_LOOP('',(#51838,#51839,#51845,#51846)); +#51838 = ORIENTED_EDGE('',*,*,#48499,.T.); +#51839 = ORIENTED_EDGE('',*,*,#51840,.T.); +#51840 = EDGE_CURVE('',#48500,#48645,#51841,.T.); +#51841 = LINE('',#51842,#51843); +#51842 = CARTESIAN_POINT('',(0.675,1.3,0.11)); +#51843 = VECTOR('',#51844,1.); +#51844 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51845 = ORIENTED_EDGE('',*,*,#48652,.F.); +#51846 = ORIENTED_EDGE('',*,*,#51824,.F.); +#51847 = CYLINDRICAL_SURFACE('',#51848,5.E-02); +#51848 = AXIS2_PLACEMENT_3D('',#51849,#51850,#51851); +#51849 = CARTESIAN_POINT('',(0.675,1.35,0.11)); +#51850 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51851 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51852 = ADVANCED_FACE('',(#51853),#51864,.T.); +#51853 = FACE_BOUND('',#51854,.T.); +#51854 = EDGE_LOOP('',(#51855,#51856,#51857,#51863)); +#51855 = ORIENTED_EDGE('',*,*,#51840,.T.); +#51856 = ORIENTED_EDGE('',*,*,#48644,.T.); +#51857 = ORIENTED_EDGE('',*,*,#51858,.F.); +#51858 = EDGE_CURVE('',#48509,#48637,#51859,.T.); +#51859 = LINE('',#51860,#51861); +#51860 = CARTESIAN_POINT('',(0.675,1.3,5.E-02)); +#51861 = VECTOR('',#51862,1.); +#51862 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51863 = ORIENTED_EDGE('',*,*,#48508,.F.); +#51864 = PLANE('',#51865); +#51865 = AXIS2_PLACEMENT_3D('',#51866,#51867,#51868); +#51866 = CARTESIAN_POINT('',(0.675,1.3,0.11)); +#51867 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51868 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51869 = ADVANCED_FACE('',(#51870),#51881,.T.); +#51870 = FACE_BOUND('',#51871,.T.); +#51871 = EDGE_LOOP('',(#51872,#51873,#51874,#51880)); +#51872 = ORIENTED_EDGE('',*,*,#51858,.T.); +#51873 = ORIENTED_EDGE('',*,*,#48636,.T.); +#51874 = ORIENTED_EDGE('',*,*,#51875,.F.); +#51875 = EDGE_CURVE('',#48517,#48629,#51876,.T.); +#51876 = LINE('',#51877,#51878); +#51877 = CARTESIAN_POINT('',(0.675,1.25,-5.551115123126E-16)); +#51878 = VECTOR('',#51879,1.); +#51879 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51880 = ORIENTED_EDGE('',*,*,#48516,.F.); +#51881 = PLANE('',#51882); +#51882 = AXIS2_PLACEMENT_3D('',#51883,#51884,#51885); +#51883 = CARTESIAN_POINT('',(0.675,1.3,5.E-02)); +#51884 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#51885 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#51886 = ADVANCED_FACE('',(#51887),#51898,.T.); +#51887 = FACE_BOUND('',#51888,.T.); +#51888 = EDGE_LOOP('',(#51889,#51890,#51891,#51897)); +#51889 = ORIENTED_EDGE('',*,*,#51875,.T.); +#51890 = ORIENTED_EDGE('',*,*,#48628,.T.); +#51891 = ORIENTED_EDGE('',*,*,#51892,.F.); +#51892 = EDGE_CURVE('',#48525,#48621,#51893,.T.); +#51893 = LINE('',#51894,#51895); +#51894 = CARTESIAN_POINT('',(0.675,0.92,-4.440892098501E-16)); +#51895 = VECTOR('',#51896,1.); +#51896 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51897 = ORIENTED_EDGE('',*,*,#48524,.T.); +#51898 = PLANE('',#51899); +#51899 = AXIS2_PLACEMENT_3D('',#51900,#51901,#51902); +#51900 = CARTESIAN_POINT('',(0.675,1.25,-5.551115123126E-16)); +#51901 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51902 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51903 = ADVANCED_FACE('',(#51904),#51915,.T.); +#51904 = FACE_BOUND('',#51905,.T.); +#51905 = EDGE_LOOP('',(#51906,#51907,#51908,#51909)); +#51906 = ORIENTED_EDGE('',*,*,#48532,.F.); +#51907 = ORIENTED_EDGE('',*,*,#51892,.T.); +#51908 = ORIENTED_EDGE('',*,*,#48620,.T.); +#51909 = ORIENTED_EDGE('',*,*,#51910,.F.); +#51910 = EDGE_CURVE('',#48533,#48612,#51911,.T.); +#51911 = LINE('',#51912,#51913); +#51912 = CARTESIAN_POINT('',(0.675,0.92,3.619548911246E-02)); +#51913 = VECTOR('',#51914,1.); +#51914 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51915 = PLANE('',#51916); +#51916 = AXIS2_PLACEMENT_3D('',#51917,#51918,#51919); +#51917 = CARTESIAN_POINT('',(0.675,0.92,-4.440892098501E-16)); +#51918 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#51919 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#51920 = ADVANCED_FACE('',(#51921),#51932,.T.); +#51921 = FACE_BOUND('',#51922,.T.); +#51922 = EDGE_LOOP('',(#51923,#51924,#51925,#51931)); +#51923 = ORIENTED_EDGE('',*,*,#51910,.T.); +#51924 = ORIENTED_EDGE('',*,*,#48611,.F.); +#51925 = ORIENTED_EDGE('',*,*,#51926,.F.); +#51926 = EDGE_CURVE('',#48541,#48604,#51927,.T.); +#51927 = LINE('',#51928,#51929); +#51928 = CARTESIAN_POINT('',(0.675,0.943186633611,6.541154699934E-02)); +#51929 = VECTOR('',#51930,1.); +#51930 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51931 = ORIENTED_EDGE('',*,*,#48540,.T.); +#51932 = CYLINDRICAL_SURFACE('',#51933,3.E-02); +#51933 = AXIS2_PLACEMENT_3D('',#51934,#51935,#51936); +#51934 = CARTESIAN_POINT('',(0.675,0.95,3.619548911246E-02)); +#51935 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51936 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51937 = ADVANCED_FACE('',(#51938),#51944,.T.); +#51938 = FACE_BOUND('',#51939,.T.); +#51939 = EDGE_LOOP('',(#51940,#51941,#51942,#51943)); +#51940 = ORIENTED_EDGE('',*,*,#51926,.T.); +#51941 = ORIENTED_EDGE('',*,*,#48603,.T.); +#51942 = ORIENTED_EDGE('',*,*,#48580,.T.); +#51943 = ORIENTED_EDGE('',*,*,#48549,.F.); +#51944 = PLANE('',#51945); +#51945 = AXIS2_PLACEMENT_3D('',#51946,#51947,#51948); +#51946 = CARTESIAN_POINT('',(0.675,0.943186633611,6.541154699934E-02)); +#51947 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#51948 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#51949 = ADVANCED_FACE('',(#51950),#51961,.T.); +#51950 = FACE_BOUND('',#51951,.T.); +#51951 = EDGE_LOOP('',(#51952,#51953,#51954,#51960)); +#51952 = ORIENTED_EDGE('',*,*,#43683,.T.); +#51953 = ORIENTED_EDGE('',*,*,#48428,.T.); +#51954 = ORIENTED_EDGE('',*,*,#51955,.F.); +#51955 = EDGE_CURVE('',#48297,#48420,#51956,.T.); +#51956 = LINE('',#51957,#51958); +#51957 = CARTESIAN_POINT('',(0.175,1.35,0.16)); +#51958 = VECTOR('',#51959,1.); +#51959 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51960 = ORIENTED_EDGE('',*,*,#48296,.T.); +#51961 = PLANE('',#51962); +#51962 = AXIS2_PLACEMENT_3D('',#51963,#51964,#51965); +#51963 = CARTESIAN_POINT('',(0.175,1.35,0.31)); +#51964 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51965 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#51966 = ADVANCED_FACE('',(#51967),#51978,.F.); +#51967 = FACE_BOUND('',#51968,.F.); +#51968 = EDGE_LOOP('',(#51969,#51970,#51976,#51977)); +#51969 = ORIENTED_EDGE('',*,*,#48304,.T.); +#51970 = ORIENTED_EDGE('',*,*,#51971,.T.); +#51971 = EDGE_CURVE('',#48305,#48412,#51972,.T.); +#51972 = LINE('',#51973,#51974); +#51973 = CARTESIAN_POINT('',(0.175,1.3,0.11)); +#51974 = VECTOR('',#51975,1.); +#51975 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51976 = ORIENTED_EDGE('',*,*,#48419,.F.); +#51977 = ORIENTED_EDGE('',*,*,#51955,.F.); +#51978 = CYLINDRICAL_SURFACE('',#51979,5.E-02); +#51979 = AXIS2_PLACEMENT_3D('',#51980,#51981,#51982); +#51980 = CARTESIAN_POINT('',(0.175,1.35,0.11)); +#51981 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51982 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#51983 = ADVANCED_FACE('',(#51984),#51995,.T.); +#51984 = FACE_BOUND('',#51985,.T.); +#51985 = EDGE_LOOP('',(#51986,#51987,#51988,#51994)); +#51986 = ORIENTED_EDGE('',*,*,#51971,.T.); +#51987 = ORIENTED_EDGE('',*,*,#48411,.T.); +#51988 = ORIENTED_EDGE('',*,*,#51989,.F.); +#51989 = EDGE_CURVE('',#48314,#48404,#51990,.T.); +#51990 = LINE('',#51991,#51992); +#51991 = CARTESIAN_POINT('',(0.175,1.3,5.E-02)); +#51992 = VECTOR('',#51993,1.); +#51993 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#51994 = ORIENTED_EDGE('',*,*,#48313,.F.); +#51995 = PLANE('',#51996); +#51996 = AXIS2_PLACEMENT_3D('',#51997,#51998,#51999); +#51997 = CARTESIAN_POINT('',(0.175,1.3,0.11)); +#51998 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#51999 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52000 = ADVANCED_FACE('',(#52001),#52012,.T.); +#52001 = FACE_BOUND('',#52002,.T.); +#52002 = EDGE_LOOP('',(#52003,#52004,#52005,#52011)); +#52003 = ORIENTED_EDGE('',*,*,#51989,.T.); +#52004 = ORIENTED_EDGE('',*,*,#48403,.T.); +#52005 = ORIENTED_EDGE('',*,*,#52006,.F.); +#52006 = EDGE_CURVE('',#48322,#48396,#52007,.T.); +#52007 = LINE('',#52008,#52009); +#52008 = CARTESIAN_POINT('',(0.175,1.25,-4.440892098501E-16)); +#52009 = VECTOR('',#52010,1.); +#52010 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52011 = ORIENTED_EDGE('',*,*,#48321,.F.); +#52012 = PLANE('',#52013); +#52013 = AXIS2_PLACEMENT_3D('',#52014,#52015,#52016); +#52014 = CARTESIAN_POINT('',(0.175,1.3,5.E-02)); +#52015 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#52016 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#52017 = ADVANCED_FACE('',(#52018),#52029,.T.); +#52018 = FACE_BOUND('',#52019,.T.); +#52019 = EDGE_LOOP('',(#52020,#52021,#52022,#52028)); +#52020 = ORIENTED_EDGE('',*,*,#52006,.T.); +#52021 = ORIENTED_EDGE('',*,*,#48395,.T.); +#52022 = ORIENTED_EDGE('',*,*,#52023,.F.); +#52023 = EDGE_CURVE('',#48330,#48388,#52024,.T.); +#52024 = LINE('',#52025,#52026); +#52025 = CARTESIAN_POINT('',(0.175,0.92,-3.330669073875E-16)); +#52026 = VECTOR('',#52027,1.); +#52027 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52028 = ORIENTED_EDGE('',*,*,#48329,.T.); +#52029 = PLANE('',#52030); +#52030 = AXIS2_PLACEMENT_3D('',#52031,#52032,#52033); +#52031 = CARTESIAN_POINT('',(0.175,1.25,-4.440892098501E-16)); +#52032 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52033 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52034 = ADVANCED_FACE('',(#52035),#52046,.T.); +#52035 = FACE_BOUND('',#52036,.T.); +#52036 = EDGE_LOOP('',(#52037,#52038,#52039,#52040)); +#52037 = ORIENTED_EDGE('',*,*,#48337,.F.); +#52038 = ORIENTED_EDGE('',*,*,#52023,.T.); +#52039 = ORIENTED_EDGE('',*,*,#48387,.T.); +#52040 = ORIENTED_EDGE('',*,*,#52041,.F.); +#52041 = EDGE_CURVE('',#48338,#48379,#52042,.T.); +#52042 = LINE('',#52043,#52044); +#52043 = CARTESIAN_POINT('',(0.175,0.92,3.619548911246E-02)); +#52044 = VECTOR('',#52045,1.); +#52045 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52046 = PLANE('',#52047); +#52047 = AXIS2_PLACEMENT_3D('',#52048,#52049,#52050); +#52048 = CARTESIAN_POINT('',(0.175,0.92,-3.330669073875E-16)); +#52049 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52050 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#52051 = ADVANCED_FACE('',(#52052),#52063,.T.); +#52052 = FACE_BOUND('',#52053,.T.); +#52053 = EDGE_LOOP('',(#52054,#52055,#52056,#52062)); +#52054 = ORIENTED_EDGE('',*,*,#52041,.T.); +#52055 = ORIENTED_EDGE('',*,*,#48378,.F.); +#52056 = ORIENTED_EDGE('',*,*,#52057,.F.); +#52057 = EDGE_CURVE('',#48346,#48371,#52058,.T.); +#52058 = LINE('',#52059,#52060); +#52059 = CARTESIAN_POINT('',(0.175,0.943186633611,6.541154699934E-02)); +#52060 = VECTOR('',#52061,1.); +#52061 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52062 = ORIENTED_EDGE('',*,*,#48345,.T.); +#52063 = CYLINDRICAL_SURFACE('',#52064,3.E-02); +#52064 = AXIS2_PLACEMENT_3D('',#52065,#52066,#52067); +#52065 = CARTESIAN_POINT('',(0.175,0.95,3.619548911246E-02)); +#52066 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52067 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52068 = ADVANCED_FACE('',(#52069),#52075,.T.); +#52069 = FACE_BOUND('',#52070,.T.); +#52070 = EDGE_LOOP('',(#52071,#52072,#52073,#52074)); +#52071 = ORIENTED_EDGE('',*,*,#52057,.T.); +#52072 = ORIENTED_EDGE('',*,*,#48370,.T.); +#52073 = ORIENTED_EDGE('',*,*,#48272,.T.); +#52074 = ORIENTED_EDGE('',*,*,#48354,.F.); +#52075 = PLANE('',#52076); +#52076 = AXIS2_PLACEMENT_3D('',#52077,#52078,#52079); +#52077 = CARTESIAN_POINT('',(0.175,0.943186633611,6.541154699934E-02)); +#52078 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#52079 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#52080 = ADVANCED_FACE('',(#52081),#52087,.T.); +#52081 = FACE_BOUND('',#52082,.T.); +#52082 = EDGE_LOOP('',(#52083,#52084,#52085,#52086)); +#52083 = ORIENTED_EDGE('',*,*,#48228,.F.); +#52084 = ORIENTED_EDGE('',*,*,#48472,.F.); +#52085 = ORIENTED_EDGE('',*,*,#42749,.F.); +#52086 = ORIENTED_EDGE('',*,*,#48188,.T.); +#52087 = PLANE('',#52088); +#52088 = AXIS2_PLACEMENT_3D('',#52089,#52090,#52091); +#52089 = CARTESIAN_POINT('',(0.425,0.85,5.5E-02)); +#52090 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#52091 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#52092 = ADVANCED_FACE('',(#52093),#52104,.T.); +#52093 = FACE_BOUND('',#52094,.T.); +#52094 = EDGE_LOOP('',(#52095,#52096,#52097,#52103)); +#52095 = ORIENTED_EDGE('',*,*,#43715,.T.); +#52096 = ORIENTED_EDGE('',*,*,#48035,.T.); +#52097 = ORIENTED_EDGE('',*,*,#52098,.F.); +#52098 = EDGE_CURVE('',#47866,#48027,#52099,.T.); +#52099 = LINE('',#52100,#52101); +#52100 = CARTESIAN_POINT('',(-0.325,1.35,0.16)); +#52101 = VECTOR('',#52102,1.); +#52102 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52103 = ORIENTED_EDGE('',*,*,#47865,.T.); +#52104 = PLANE('',#52105); +#52105 = AXIS2_PLACEMENT_3D('',#52106,#52107,#52108); +#52106 = CARTESIAN_POINT('',(-0.325,1.35,0.31)); +#52107 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52108 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52109 = ADVANCED_FACE('',(#52110),#52121,.F.); +#52110 = FACE_BOUND('',#52111,.F.); +#52111 = EDGE_LOOP('',(#52112,#52113,#52119,#52120)); +#52112 = ORIENTED_EDGE('',*,*,#47873,.T.); +#52113 = ORIENTED_EDGE('',*,*,#52114,.T.); +#52114 = EDGE_CURVE('',#47874,#48019,#52115,.T.); +#52115 = LINE('',#52116,#52117); +#52116 = CARTESIAN_POINT('',(-0.325,1.3,0.11)); +#52117 = VECTOR('',#52118,1.); +#52118 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52119 = ORIENTED_EDGE('',*,*,#48026,.F.); +#52120 = ORIENTED_EDGE('',*,*,#52098,.F.); +#52121 = CYLINDRICAL_SURFACE('',#52122,5.E-02); +#52122 = AXIS2_PLACEMENT_3D('',#52123,#52124,#52125); +#52123 = CARTESIAN_POINT('',(-0.325,1.35,0.11)); +#52124 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52125 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52126 = ADVANCED_FACE('',(#52127),#52138,.T.); +#52127 = FACE_BOUND('',#52128,.T.); +#52128 = EDGE_LOOP('',(#52129,#52130,#52131,#52137)); +#52129 = ORIENTED_EDGE('',*,*,#52114,.T.); +#52130 = ORIENTED_EDGE('',*,*,#48018,.T.); +#52131 = ORIENTED_EDGE('',*,*,#52132,.F.); +#52132 = EDGE_CURVE('',#47883,#48011,#52133,.T.); +#52133 = LINE('',#52134,#52135); +#52134 = CARTESIAN_POINT('',(-0.325,1.3,5.E-02)); +#52135 = VECTOR('',#52136,1.); +#52136 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52137 = ORIENTED_EDGE('',*,*,#47882,.F.); +#52138 = PLANE('',#52139); +#52139 = AXIS2_PLACEMENT_3D('',#52140,#52141,#52142); +#52140 = CARTESIAN_POINT('',(-0.325,1.3,0.11)); +#52141 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52142 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52143 = ADVANCED_FACE('',(#52144),#52155,.T.); +#52144 = FACE_BOUND('',#52145,.T.); +#52145 = EDGE_LOOP('',(#52146,#52147,#52148,#52154)); +#52146 = ORIENTED_EDGE('',*,*,#52132,.T.); +#52147 = ORIENTED_EDGE('',*,*,#48010,.T.); +#52148 = ORIENTED_EDGE('',*,*,#52149,.F.); +#52149 = EDGE_CURVE('',#47891,#48003,#52150,.T.); +#52150 = LINE('',#52151,#52152); +#52151 = CARTESIAN_POINT('',(-0.325,1.25,-3.330669073875E-16)); +#52152 = VECTOR('',#52153,1.); +#52153 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52154 = ORIENTED_EDGE('',*,*,#47890,.F.); +#52155 = PLANE('',#52156); +#52156 = AXIS2_PLACEMENT_3D('',#52157,#52158,#52159); +#52157 = CARTESIAN_POINT('',(-0.325,1.3,5.E-02)); +#52158 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#52159 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#52160 = ADVANCED_FACE('',(#52161),#52172,.T.); +#52161 = FACE_BOUND('',#52162,.T.); +#52162 = EDGE_LOOP('',(#52163,#52164,#52165,#52171)); +#52163 = ORIENTED_EDGE('',*,*,#52149,.T.); +#52164 = ORIENTED_EDGE('',*,*,#48002,.T.); +#52165 = ORIENTED_EDGE('',*,*,#52166,.F.); +#52166 = EDGE_CURVE('',#47899,#47995,#52167,.T.); +#52167 = LINE('',#52168,#52169); +#52168 = CARTESIAN_POINT('',(-0.325,0.92,-2.22044604925E-16)); +#52169 = VECTOR('',#52170,1.); +#52170 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52171 = ORIENTED_EDGE('',*,*,#47898,.T.); +#52172 = PLANE('',#52173); +#52173 = AXIS2_PLACEMENT_3D('',#52174,#52175,#52176); +#52174 = CARTESIAN_POINT('',(-0.325,1.25,-3.330669073875E-16)); +#52175 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52176 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52177 = ADVANCED_FACE('',(#52178),#52189,.T.); +#52178 = FACE_BOUND('',#52179,.T.); +#52179 = EDGE_LOOP('',(#52180,#52181,#52182,#52183)); +#52180 = ORIENTED_EDGE('',*,*,#47906,.F.); +#52181 = ORIENTED_EDGE('',*,*,#52166,.T.); +#52182 = ORIENTED_EDGE('',*,*,#47994,.T.); +#52183 = ORIENTED_EDGE('',*,*,#52184,.F.); +#52184 = EDGE_CURVE('',#47907,#47986,#52185,.T.); +#52185 = LINE('',#52186,#52187); +#52186 = CARTESIAN_POINT('',(-0.325,0.92,3.619548911246E-02)); +#52187 = VECTOR('',#52188,1.); +#52188 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52189 = PLANE('',#52190); +#52190 = AXIS2_PLACEMENT_3D('',#52191,#52192,#52193); +#52191 = CARTESIAN_POINT('',(-0.325,0.92,-2.22044604925E-16)); +#52192 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52193 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#52194 = ADVANCED_FACE('',(#52195),#52206,.T.); +#52195 = FACE_BOUND('',#52196,.T.); +#52196 = EDGE_LOOP('',(#52197,#52198,#52199,#52205)); +#52197 = ORIENTED_EDGE('',*,*,#52184,.T.); +#52198 = ORIENTED_EDGE('',*,*,#47985,.F.); +#52199 = ORIENTED_EDGE('',*,*,#52200,.F.); +#52200 = EDGE_CURVE('',#47915,#47978,#52201,.T.); +#52201 = LINE('',#52202,#52203); +#52202 = CARTESIAN_POINT('',(-0.325,0.943186633611,6.541154699934E-02)); +#52203 = VECTOR('',#52204,1.); +#52204 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52205 = ORIENTED_EDGE('',*,*,#47914,.T.); +#52206 = CYLINDRICAL_SURFACE('',#52207,3.E-02); +#52207 = AXIS2_PLACEMENT_3D('',#52208,#52209,#52210); +#52208 = CARTESIAN_POINT('',(-0.325,0.95,3.619548911246E-02)); +#52209 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52210 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52211 = ADVANCED_FACE('',(#52212),#52218,.T.); +#52212 = FACE_BOUND('',#52213,.T.); +#52213 = EDGE_LOOP('',(#52214,#52215,#52216,#52217)); +#52214 = ORIENTED_EDGE('',*,*,#52200,.T.); +#52215 = ORIENTED_EDGE('',*,*,#47977,.T.); +#52216 = ORIENTED_EDGE('',*,*,#47954,.T.); +#52217 = ORIENTED_EDGE('',*,*,#47923,.F.); +#52218 = PLANE('',#52219); +#52219 = AXIS2_PLACEMENT_3D('',#52220,#52221,#52222); +#52220 = CARTESIAN_POINT('',(-0.325,0.943186633611,6.541154699934E-02)); +#52221 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#52222 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#52223 = ADVANCED_FACE('',(#52224),#52235,.T.); +#52224 = FACE_BOUND('',#52225,.T.); +#52225 = EDGE_LOOP('',(#52226,#52227,#52228,#52234)); +#52226 = ORIENTED_EDGE('',*,*,#43747,.T.); +#52227 = ORIENTED_EDGE('',*,*,#47802,.T.); +#52228 = ORIENTED_EDGE('',*,*,#52229,.F.); +#52229 = EDGE_CURVE('',#47671,#47794,#52230,.T.); +#52230 = LINE('',#52231,#52232); +#52231 = CARTESIAN_POINT('',(-0.825,1.35,0.16)); +#52232 = VECTOR('',#52233,1.); +#52233 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52234 = ORIENTED_EDGE('',*,*,#47670,.T.); +#52235 = PLANE('',#52236); +#52236 = AXIS2_PLACEMENT_3D('',#52237,#52238,#52239); +#52237 = CARTESIAN_POINT('',(-0.825,1.35,0.31)); +#52238 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52239 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52240 = ADVANCED_FACE('',(#52241),#52252,.F.); +#52241 = FACE_BOUND('',#52242,.F.); +#52242 = EDGE_LOOP('',(#52243,#52244,#52250,#52251)); +#52243 = ORIENTED_EDGE('',*,*,#47678,.T.); +#52244 = ORIENTED_EDGE('',*,*,#52245,.T.); +#52245 = EDGE_CURVE('',#47679,#47786,#52246,.T.); +#52246 = LINE('',#52247,#52248); +#52247 = CARTESIAN_POINT('',(-0.825,1.3,0.11)); +#52248 = VECTOR('',#52249,1.); +#52249 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52250 = ORIENTED_EDGE('',*,*,#47793,.F.); +#52251 = ORIENTED_EDGE('',*,*,#52229,.F.); +#52252 = CYLINDRICAL_SURFACE('',#52253,5.E-02); +#52253 = AXIS2_PLACEMENT_3D('',#52254,#52255,#52256); +#52254 = CARTESIAN_POINT('',(-0.825,1.35,0.11)); +#52255 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52256 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52257 = ADVANCED_FACE('',(#52258),#52269,.T.); +#52258 = FACE_BOUND('',#52259,.T.); +#52259 = EDGE_LOOP('',(#52260,#52261,#52262,#52268)); +#52260 = ORIENTED_EDGE('',*,*,#52245,.T.); +#52261 = ORIENTED_EDGE('',*,*,#47785,.T.); +#52262 = ORIENTED_EDGE('',*,*,#52263,.F.); +#52263 = EDGE_CURVE('',#47688,#47778,#52264,.T.); +#52264 = LINE('',#52265,#52266); +#52265 = CARTESIAN_POINT('',(-0.825,1.3,5.E-02)); +#52266 = VECTOR('',#52267,1.); +#52267 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52268 = ORIENTED_EDGE('',*,*,#47687,.F.); +#52269 = PLANE('',#52270); +#52270 = AXIS2_PLACEMENT_3D('',#52271,#52272,#52273); +#52271 = CARTESIAN_POINT('',(-0.825,1.3,0.11)); +#52272 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52273 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52274 = ADVANCED_FACE('',(#52275),#52286,.T.); +#52275 = FACE_BOUND('',#52276,.T.); +#52276 = EDGE_LOOP('',(#52277,#52278,#52279,#52285)); +#52277 = ORIENTED_EDGE('',*,*,#52263,.T.); +#52278 = ORIENTED_EDGE('',*,*,#47777,.T.); +#52279 = ORIENTED_EDGE('',*,*,#52280,.F.); +#52280 = EDGE_CURVE('',#47696,#47770,#52281,.T.); +#52281 = LINE('',#52282,#52283); +#52282 = CARTESIAN_POINT('',(-0.825,1.25,-2.22044604925E-16)); +#52283 = VECTOR('',#52284,1.); +#52284 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52285 = ORIENTED_EDGE('',*,*,#47695,.F.); +#52286 = PLANE('',#52287); +#52287 = AXIS2_PLACEMENT_3D('',#52288,#52289,#52290); +#52288 = CARTESIAN_POINT('',(-0.825,1.3,5.E-02)); +#52289 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#52290 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#52291 = ADVANCED_FACE('',(#52292),#52303,.T.); +#52292 = FACE_BOUND('',#52293,.T.); +#52293 = EDGE_LOOP('',(#52294,#52295,#52296,#52302)); +#52294 = ORIENTED_EDGE('',*,*,#52280,.T.); +#52295 = ORIENTED_EDGE('',*,*,#47769,.T.); +#52296 = ORIENTED_EDGE('',*,*,#52297,.F.); +#52297 = EDGE_CURVE('',#47704,#47762,#52298,.T.); +#52298 = LINE('',#52299,#52300); +#52299 = CARTESIAN_POINT('',(-0.825,0.92,-1.110223024625E-16)); +#52300 = VECTOR('',#52301,1.); +#52301 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52302 = ORIENTED_EDGE('',*,*,#47703,.T.); +#52303 = PLANE('',#52304); +#52304 = AXIS2_PLACEMENT_3D('',#52305,#52306,#52307); +#52305 = CARTESIAN_POINT('',(-0.825,1.25,-2.22044604925E-16)); +#52306 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52307 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52308 = ADVANCED_FACE('',(#52309),#52320,.T.); +#52309 = FACE_BOUND('',#52310,.T.); +#52310 = EDGE_LOOP('',(#52311,#52312,#52313,#52314)); +#52311 = ORIENTED_EDGE('',*,*,#47711,.F.); +#52312 = ORIENTED_EDGE('',*,*,#52297,.T.); +#52313 = ORIENTED_EDGE('',*,*,#47761,.T.); +#52314 = ORIENTED_EDGE('',*,*,#52315,.F.); +#52315 = EDGE_CURVE('',#47712,#47753,#52316,.T.); +#52316 = LINE('',#52317,#52318); +#52317 = CARTESIAN_POINT('',(-0.825,0.92,3.619548911246E-02)); +#52318 = VECTOR('',#52319,1.); +#52319 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52320 = PLANE('',#52321); +#52321 = AXIS2_PLACEMENT_3D('',#52322,#52323,#52324); +#52322 = CARTESIAN_POINT('',(-0.825,0.92,-1.110223024625E-16)); +#52323 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52324 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#52325 = ADVANCED_FACE('',(#52326),#52337,.T.); +#52326 = FACE_BOUND('',#52327,.T.); +#52327 = EDGE_LOOP('',(#52328,#52329,#52330,#52336)); +#52328 = ORIENTED_EDGE('',*,*,#52315,.T.); +#52329 = ORIENTED_EDGE('',*,*,#47752,.F.); +#52330 = ORIENTED_EDGE('',*,*,#52331,.F.); +#52331 = EDGE_CURVE('',#47720,#47745,#52332,.T.); +#52332 = LINE('',#52333,#52334); +#52333 = CARTESIAN_POINT('',(-0.825,0.943186633611,6.541154699934E-02)); +#52334 = VECTOR('',#52335,1.); +#52335 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52336 = ORIENTED_EDGE('',*,*,#47719,.T.); +#52337 = CYLINDRICAL_SURFACE('',#52338,3.E-02); +#52338 = AXIS2_PLACEMENT_3D('',#52339,#52340,#52341); +#52339 = CARTESIAN_POINT('',(-0.825,0.95,3.619548911246E-02)); +#52340 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52341 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52342 = ADVANCED_FACE('',(#52343),#52349,.T.); +#52343 = FACE_BOUND('',#52344,.T.); +#52344 = EDGE_LOOP('',(#52345,#52346,#52347,#52348)); +#52345 = ORIENTED_EDGE('',*,*,#52331,.T.); +#52346 = ORIENTED_EDGE('',*,*,#47744,.T.); +#52347 = ORIENTED_EDGE('',*,*,#47646,.T.); +#52348 = ORIENTED_EDGE('',*,*,#47728,.F.); +#52349 = PLANE('',#52350); +#52350 = AXIS2_PLACEMENT_3D('',#52351,#52352,#52353); +#52351 = CARTESIAN_POINT('',(-0.825,0.943186633611,6.541154699934E-02)); +#52352 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#52353 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#52354 = ADVANCED_FACE('',(#52355),#52361,.T.); +#52355 = FACE_BOUND('',#52356,.T.); +#52356 = EDGE_LOOP('',(#52357,#52358,#52359,#52360)); +#52357 = ORIENTED_EDGE('',*,*,#47602,.F.); +#52358 = ORIENTED_EDGE('',*,*,#47846,.F.); +#52359 = ORIENTED_EDGE('',*,*,#42685,.F.); +#52360 = ORIENTED_EDGE('',*,*,#47562,.T.); +#52361 = PLANE('',#52362); +#52362 = AXIS2_PLACEMENT_3D('',#52363,#52364,#52365); +#52363 = CARTESIAN_POINT('',(-0.575,0.85,5.5E-02)); +#52364 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#52365 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#52366 = ADVANCED_FACE('',(#52367),#52378,.T.); +#52367 = FACE_BOUND('',#52368,.T.); +#52368 = EDGE_LOOP('',(#52369,#52370,#52371,#52377)); +#52369 = ORIENTED_EDGE('',*,*,#43779,.T.); +#52370 = ORIENTED_EDGE('',*,*,#47409,.T.); +#52371 = ORIENTED_EDGE('',*,*,#52372,.F.); +#52372 = EDGE_CURVE('',#47240,#47401,#52373,.T.); +#52373 = LINE('',#52374,#52375); +#52374 = CARTESIAN_POINT('',(-1.325,1.35,0.16)); +#52375 = VECTOR('',#52376,1.); +#52376 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52377 = ORIENTED_EDGE('',*,*,#47239,.T.); +#52378 = PLANE('',#52379); +#52379 = AXIS2_PLACEMENT_3D('',#52380,#52381,#52382); +#52380 = CARTESIAN_POINT('',(-1.325,1.35,0.31)); +#52381 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52382 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52383 = ADVANCED_FACE('',(#52384),#52395,.F.); +#52384 = FACE_BOUND('',#52385,.F.); +#52385 = EDGE_LOOP('',(#52386,#52387,#52393,#52394)); +#52386 = ORIENTED_EDGE('',*,*,#47247,.T.); +#52387 = ORIENTED_EDGE('',*,*,#52388,.T.); +#52388 = EDGE_CURVE('',#47248,#47393,#52389,.T.); +#52389 = LINE('',#52390,#52391); +#52390 = CARTESIAN_POINT('',(-1.325,1.3,0.11)); +#52391 = VECTOR('',#52392,1.); +#52392 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52393 = ORIENTED_EDGE('',*,*,#47400,.F.); +#52394 = ORIENTED_EDGE('',*,*,#52372,.F.); +#52395 = CYLINDRICAL_SURFACE('',#52396,5.E-02); +#52396 = AXIS2_PLACEMENT_3D('',#52397,#52398,#52399); +#52397 = CARTESIAN_POINT('',(-1.325,1.35,0.11)); +#52398 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52399 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52400 = ADVANCED_FACE('',(#52401),#52412,.T.); +#52401 = FACE_BOUND('',#52402,.T.); +#52402 = EDGE_LOOP('',(#52403,#52404,#52405,#52411)); +#52403 = ORIENTED_EDGE('',*,*,#52388,.T.); +#52404 = ORIENTED_EDGE('',*,*,#47392,.T.); +#52405 = ORIENTED_EDGE('',*,*,#52406,.F.); +#52406 = EDGE_CURVE('',#47257,#47385,#52407,.T.); +#52407 = LINE('',#52408,#52409); +#52408 = CARTESIAN_POINT('',(-1.325,1.3,5.E-02)); +#52409 = VECTOR('',#52410,1.); +#52410 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52411 = ORIENTED_EDGE('',*,*,#47256,.F.); +#52412 = PLANE('',#52413); +#52413 = AXIS2_PLACEMENT_3D('',#52414,#52415,#52416); +#52414 = CARTESIAN_POINT('',(-1.325,1.3,0.11)); +#52415 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52416 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52417 = ADVANCED_FACE('',(#52418),#52429,.T.); +#52418 = FACE_BOUND('',#52419,.T.); +#52419 = EDGE_LOOP('',(#52420,#52421,#52422,#52428)); +#52420 = ORIENTED_EDGE('',*,*,#52406,.T.); +#52421 = ORIENTED_EDGE('',*,*,#47384,.T.); +#52422 = ORIENTED_EDGE('',*,*,#52423,.F.); +#52423 = EDGE_CURVE('',#47265,#47377,#52424,.T.); +#52424 = LINE('',#52425,#52426); +#52425 = CARTESIAN_POINT('',(-1.325,1.25,-1.110223024625E-16)); +#52426 = VECTOR('',#52427,1.); +#52427 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52428 = ORIENTED_EDGE('',*,*,#47264,.F.); +#52429 = PLANE('',#52430); +#52430 = AXIS2_PLACEMENT_3D('',#52431,#52432,#52433); +#52431 = CARTESIAN_POINT('',(-1.325,1.3,5.E-02)); +#52432 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#52433 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#52434 = ADVANCED_FACE('',(#52435),#52446,.T.); +#52435 = FACE_BOUND('',#52436,.T.); +#52436 = EDGE_LOOP('',(#52437,#52438,#52439,#52445)); +#52437 = ORIENTED_EDGE('',*,*,#52423,.T.); +#52438 = ORIENTED_EDGE('',*,*,#47376,.T.); +#52439 = ORIENTED_EDGE('',*,*,#52440,.F.); +#52440 = EDGE_CURVE('',#47273,#47369,#52441,.T.); +#52441 = LINE('',#52442,#52443); +#52442 = CARTESIAN_POINT('',(-1.325,0.92,0.)); +#52443 = VECTOR('',#52444,1.); +#52444 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52445 = ORIENTED_EDGE('',*,*,#47272,.T.); +#52446 = PLANE('',#52447); +#52447 = AXIS2_PLACEMENT_3D('',#52448,#52449,#52450); +#52448 = CARTESIAN_POINT('',(-1.325,1.25,-1.110223024625E-16)); +#52449 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52450 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52451 = ADVANCED_FACE('',(#52452),#52463,.T.); +#52452 = FACE_BOUND('',#52453,.T.); +#52453 = EDGE_LOOP('',(#52454,#52455,#52456,#52457)); +#52454 = ORIENTED_EDGE('',*,*,#47280,.F.); +#52455 = ORIENTED_EDGE('',*,*,#52440,.T.); +#52456 = ORIENTED_EDGE('',*,*,#47368,.T.); +#52457 = ORIENTED_EDGE('',*,*,#52458,.F.); +#52458 = EDGE_CURVE('',#47281,#47360,#52459,.T.); +#52459 = LINE('',#52460,#52461); +#52460 = CARTESIAN_POINT('',(-1.325,0.92,3.619548911246E-02)); +#52461 = VECTOR('',#52462,1.); +#52462 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52463 = PLANE('',#52464); +#52464 = AXIS2_PLACEMENT_3D('',#52465,#52466,#52467); +#52465 = CARTESIAN_POINT('',(-1.325,0.92,0.)); +#52466 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52467 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#52468 = ADVANCED_FACE('',(#52469),#52480,.T.); +#52469 = FACE_BOUND('',#52470,.T.); +#52470 = EDGE_LOOP('',(#52471,#52472,#52473,#52479)); +#52471 = ORIENTED_EDGE('',*,*,#52458,.T.); +#52472 = ORIENTED_EDGE('',*,*,#47359,.F.); +#52473 = ORIENTED_EDGE('',*,*,#52474,.F.); +#52474 = EDGE_CURVE('',#47289,#47352,#52475,.T.); +#52475 = LINE('',#52476,#52477); +#52476 = CARTESIAN_POINT('',(-1.325,0.943186633611,6.541154699934E-02)); +#52477 = VECTOR('',#52478,1.); +#52478 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52479 = ORIENTED_EDGE('',*,*,#47288,.T.); +#52480 = CYLINDRICAL_SURFACE('',#52481,3.E-02); +#52481 = AXIS2_PLACEMENT_3D('',#52482,#52483,#52484); +#52482 = CARTESIAN_POINT('',(-1.325,0.95,3.619548911246E-02)); +#52483 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52484 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52485 = ADVANCED_FACE('',(#52486),#52492,.T.); +#52486 = FACE_BOUND('',#52487,.T.); +#52487 = EDGE_LOOP('',(#52488,#52489,#52490,#52491)); +#52488 = ORIENTED_EDGE('',*,*,#52474,.T.); +#52489 = ORIENTED_EDGE('',*,*,#47351,.T.); +#52490 = ORIENTED_EDGE('',*,*,#47328,.T.); +#52491 = ORIENTED_EDGE('',*,*,#47297,.F.); +#52492 = PLANE('',#52493); +#52493 = AXIS2_PLACEMENT_3D('',#52494,#52495,#52496); +#52494 = CARTESIAN_POINT('',(-1.325,0.943186633611,6.541154699934E-02)); +#52495 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#52496 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#52497 = ADVANCED_FACE('',(#52498),#52509,.T.); +#52498 = FACE_BOUND('',#52499,.T.); +#52499 = EDGE_LOOP('',(#52500,#52501,#52502,#52508)); +#52500 = ORIENTED_EDGE('',*,*,#43811,.T.); +#52501 = ORIENTED_EDGE('',*,*,#47176,.T.); +#52502 = ORIENTED_EDGE('',*,*,#52503,.F.); +#52503 = EDGE_CURVE('',#47045,#47168,#52504,.T.); +#52504 = LINE('',#52505,#52506); +#52505 = CARTESIAN_POINT('',(-1.825,1.35,0.16)); +#52506 = VECTOR('',#52507,1.); +#52507 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52508 = ORIENTED_EDGE('',*,*,#47044,.T.); +#52509 = PLANE('',#52510); +#52510 = AXIS2_PLACEMENT_3D('',#52511,#52512,#52513); +#52511 = CARTESIAN_POINT('',(-1.825,1.35,0.31)); +#52512 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52513 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52514 = ADVANCED_FACE('',(#52515),#52526,.F.); +#52515 = FACE_BOUND('',#52516,.F.); +#52516 = EDGE_LOOP('',(#52517,#52518,#52524,#52525)); +#52517 = ORIENTED_EDGE('',*,*,#47052,.T.); +#52518 = ORIENTED_EDGE('',*,*,#52519,.T.); +#52519 = EDGE_CURVE('',#47053,#47160,#52520,.T.); +#52520 = LINE('',#52521,#52522); +#52521 = CARTESIAN_POINT('',(-1.825,1.3,0.11)); +#52522 = VECTOR('',#52523,1.); +#52523 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52524 = ORIENTED_EDGE('',*,*,#47167,.F.); +#52525 = ORIENTED_EDGE('',*,*,#52503,.F.); +#52526 = CYLINDRICAL_SURFACE('',#52527,5.E-02); +#52527 = AXIS2_PLACEMENT_3D('',#52528,#52529,#52530); +#52528 = CARTESIAN_POINT('',(-1.825,1.35,0.11)); +#52529 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52530 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52531 = ADVANCED_FACE('',(#52532),#52543,.T.); +#52532 = FACE_BOUND('',#52533,.T.); +#52533 = EDGE_LOOP('',(#52534,#52535,#52536,#52542)); +#52534 = ORIENTED_EDGE('',*,*,#52519,.T.); +#52535 = ORIENTED_EDGE('',*,*,#47159,.T.); +#52536 = ORIENTED_EDGE('',*,*,#52537,.F.); +#52537 = EDGE_CURVE('',#47062,#47152,#52538,.T.); +#52538 = LINE('',#52539,#52540); +#52539 = CARTESIAN_POINT('',(-1.825,1.3,5.E-02)); +#52540 = VECTOR('',#52541,1.); +#52541 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52542 = ORIENTED_EDGE('',*,*,#47061,.F.); +#52543 = PLANE('',#52544); +#52544 = AXIS2_PLACEMENT_3D('',#52545,#52546,#52547); +#52545 = CARTESIAN_POINT('',(-1.825,1.3,0.11)); +#52546 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52547 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52548 = ADVANCED_FACE('',(#52549),#52560,.T.); +#52549 = FACE_BOUND('',#52550,.T.); +#52550 = EDGE_LOOP('',(#52551,#52552,#52553,#52559)); +#52551 = ORIENTED_EDGE('',*,*,#52537,.T.); +#52552 = ORIENTED_EDGE('',*,*,#47151,.T.); +#52553 = ORIENTED_EDGE('',*,*,#52554,.F.); +#52554 = EDGE_CURVE('',#47070,#47144,#52555,.T.); +#52555 = LINE('',#52556,#52557); +#52556 = CARTESIAN_POINT('',(-1.825,1.25,-1.110223024625E-16)); +#52557 = VECTOR('',#52558,1.); +#52558 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52559 = ORIENTED_EDGE('',*,*,#47069,.F.); +#52560 = PLANE('',#52561); +#52561 = AXIS2_PLACEMENT_3D('',#52562,#52563,#52564); +#52562 = CARTESIAN_POINT('',(-1.825,1.3,5.E-02)); +#52563 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#52564 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#52565 = ADVANCED_FACE('',(#52566),#52577,.T.); +#52566 = FACE_BOUND('',#52567,.T.); +#52567 = EDGE_LOOP('',(#52568,#52569,#52570,#52576)); +#52568 = ORIENTED_EDGE('',*,*,#52554,.T.); +#52569 = ORIENTED_EDGE('',*,*,#47143,.T.); +#52570 = ORIENTED_EDGE('',*,*,#52571,.F.); +#52571 = EDGE_CURVE('',#47078,#47136,#52572,.T.); +#52572 = LINE('',#52573,#52574); +#52573 = CARTESIAN_POINT('',(-1.825,0.92,0.)); +#52574 = VECTOR('',#52575,1.); +#52575 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52576 = ORIENTED_EDGE('',*,*,#47077,.T.); +#52577 = PLANE('',#52578); +#52578 = AXIS2_PLACEMENT_3D('',#52579,#52580,#52581); +#52579 = CARTESIAN_POINT('',(-1.825,1.25,-1.110223024625E-16)); +#52580 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52581 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52582 = ADVANCED_FACE('',(#52583),#52594,.T.); +#52583 = FACE_BOUND('',#52584,.T.); +#52584 = EDGE_LOOP('',(#52585,#52586,#52587,#52588)); +#52585 = ORIENTED_EDGE('',*,*,#47085,.F.); +#52586 = ORIENTED_EDGE('',*,*,#52571,.T.); +#52587 = ORIENTED_EDGE('',*,*,#47135,.T.); +#52588 = ORIENTED_EDGE('',*,*,#52589,.F.); +#52589 = EDGE_CURVE('',#47086,#47127,#52590,.T.); +#52590 = LINE('',#52591,#52592); +#52591 = CARTESIAN_POINT('',(-1.825,0.92,3.619548911246E-02)); +#52592 = VECTOR('',#52593,1.); +#52593 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52594 = PLANE('',#52595); +#52595 = AXIS2_PLACEMENT_3D('',#52596,#52597,#52598); +#52596 = CARTESIAN_POINT('',(-1.825,0.92,0.)); +#52597 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52598 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#52599 = ADVANCED_FACE('',(#52600),#52611,.T.); +#52600 = FACE_BOUND('',#52601,.T.); +#52601 = EDGE_LOOP('',(#52602,#52603,#52604,#52610)); +#52602 = ORIENTED_EDGE('',*,*,#52589,.T.); +#52603 = ORIENTED_EDGE('',*,*,#47126,.F.); +#52604 = ORIENTED_EDGE('',*,*,#52605,.F.); +#52605 = EDGE_CURVE('',#47094,#47119,#52606,.T.); +#52606 = LINE('',#52607,#52608); +#52607 = CARTESIAN_POINT('',(-1.825,0.943186633611,6.541154699934E-02)); +#52608 = VECTOR('',#52609,1.); +#52609 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52610 = ORIENTED_EDGE('',*,*,#47093,.T.); +#52611 = CYLINDRICAL_SURFACE('',#52612,3.E-02); +#52612 = AXIS2_PLACEMENT_3D('',#52613,#52614,#52615); +#52613 = CARTESIAN_POINT('',(-1.825,0.95,3.619548911246E-02)); +#52614 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52615 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52616 = ADVANCED_FACE('',(#52617),#52623,.T.); +#52617 = FACE_BOUND('',#52618,.T.); +#52618 = EDGE_LOOP('',(#52619,#52620,#52621,#52622)); +#52619 = ORIENTED_EDGE('',*,*,#52605,.T.); +#52620 = ORIENTED_EDGE('',*,*,#47118,.T.); +#52621 = ORIENTED_EDGE('',*,*,#47020,.T.); +#52622 = ORIENTED_EDGE('',*,*,#47102,.F.); +#52623 = PLANE('',#52624); +#52624 = AXIS2_PLACEMENT_3D('',#52625,#52626,#52627); +#52625 = CARTESIAN_POINT('',(-1.825,0.943186633611,6.541154699934E-02)); +#52626 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#52627 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#52628 = ADVANCED_FACE('',(#52629),#52635,.T.); +#52629 = FACE_BOUND('',#52630,.T.); +#52630 = EDGE_LOOP('',(#52631,#52632,#52633,#52634)); +#52631 = ORIENTED_EDGE('',*,*,#46976,.F.); +#52632 = ORIENTED_EDGE('',*,*,#47220,.F.); +#52633 = ORIENTED_EDGE('',*,*,#42621,.F.); +#52634 = ORIENTED_EDGE('',*,*,#46936,.T.); +#52635 = PLANE('',#52636); +#52636 = AXIS2_PLACEMENT_3D('',#52637,#52638,#52639); +#52637 = CARTESIAN_POINT('',(-1.575,0.85,5.5E-02)); +#52638 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#52639 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#52640 = ADVANCED_FACE('',(#52641),#52652,.T.); +#52641 = FACE_BOUND('',#52642,.T.); +#52642 = EDGE_LOOP('',(#52643,#52644,#52645,#52651)); +#52643 = ORIENTED_EDGE('',*,*,#43843,.T.); +#52644 = ORIENTED_EDGE('',*,*,#46783,.T.); +#52645 = ORIENTED_EDGE('',*,*,#52646,.F.); +#52646 = EDGE_CURVE('',#46614,#46775,#52647,.T.); +#52647 = LINE('',#52648,#52649); +#52648 = CARTESIAN_POINT('',(-2.325,1.35,0.16)); +#52649 = VECTOR('',#52650,1.); +#52650 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52651 = ORIENTED_EDGE('',*,*,#46613,.T.); +#52652 = PLANE('',#52653); +#52653 = AXIS2_PLACEMENT_3D('',#52654,#52655,#52656); +#52654 = CARTESIAN_POINT('',(-2.325,1.35,0.31)); +#52655 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52656 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52657 = ADVANCED_FACE('',(#52658),#52669,.F.); +#52658 = FACE_BOUND('',#52659,.F.); +#52659 = EDGE_LOOP('',(#52660,#52661,#52667,#52668)); +#52660 = ORIENTED_EDGE('',*,*,#46621,.T.); +#52661 = ORIENTED_EDGE('',*,*,#52662,.T.); +#52662 = EDGE_CURVE('',#46622,#46767,#52663,.T.); +#52663 = LINE('',#52664,#52665); +#52664 = CARTESIAN_POINT('',(-2.325,1.3,0.11)); +#52665 = VECTOR('',#52666,1.); +#52666 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52667 = ORIENTED_EDGE('',*,*,#46774,.F.); +#52668 = ORIENTED_EDGE('',*,*,#52646,.F.); +#52669 = CYLINDRICAL_SURFACE('',#52670,5.E-02); +#52670 = AXIS2_PLACEMENT_3D('',#52671,#52672,#52673); +#52671 = CARTESIAN_POINT('',(-2.325,1.35,0.11)); +#52672 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52673 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52674 = ADVANCED_FACE('',(#52675),#52686,.T.); +#52675 = FACE_BOUND('',#52676,.T.); +#52676 = EDGE_LOOP('',(#52677,#52678,#52679,#52685)); +#52677 = ORIENTED_EDGE('',*,*,#52662,.T.); +#52678 = ORIENTED_EDGE('',*,*,#46766,.T.); +#52679 = ORIENTED_EDGE('',*,*,#52680,.F.); +#52680 = EDGE_CURVE('',#46631,#46759,#52681,.T.); +#52681 = LINE('',#52682,#52683); +#52682 = CARTESIAN_POINT('',(-2.325,1.3,5.E-02)); +#52683 = VECTOR('',#52684,1.); +#52684 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52685 = ORIENTED_EDGE('',*,*,#46630,.F.); +#52686 = PLANE('',#52687); +#52687 = AXIS2_PLACEMENT_3D('',#52688,#52689,#52690); +#52688 = CARTESIAN_POINT('',(-2.325,1.3,0.11)); +#52689 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52690 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52691 = ADVANCED_FACE('',(#52692),#52703,.T.); +#52692 = FACE_BOUND('',#52693,.T.); +#52693 = EDGE_LOOP('',(#52694,#52695,#52696,#52702)); +#52694 = ORIENTED_EDGE('',*,*,#52680,.T.); +#52695 = ORIENTED_EDGE('',*,*,#46758,.T.); +#52696 = ORIENTED_EDGE('',*,*,#52697,.F.); +#52697 = EDGE_CURVE('',#46639,#46751,#52698,.T.); +#52698 = LINE('',#52699,#52700); +#52699 = CARTESIAN_POINT('',(-2.325,1.25,0.)); +#52700 = VECTOR('',#52701,1.); +#52701 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52702 = ORIENTED_EDGE('',*,*,#46638,.F.); +#52703 = PLANE('',#52704); +#52704 = AXIS2_PLACEMENT_3D('',#52705,#52706,#52707); +#52705 = CARTESIAN_POINT('',(-2.325,1.3,5.E-02)); +#52706 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#52707 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#52708 = ADVANCED_FACE('',(#52709),#52720,.T.); +#52709 = FACE_BOUND('',#52710,.T.); +#52710 = EDGE_LOOP('',(#52711,#52712,#52713,#52719)); +#52711 = ORIENTED_EDGE('',*,*,#52697,.T.); +#52712 = ORIENTED_EDGE('',*,*,#46750,.T.); +#52713 = ORIENTED_EDGE('',*,*,#52714,.F.); +#52714 = EDGE_CURVE('',#46647,#46743,#52715,.T.); +#52715 = LINE('',#52716,#52717); +#52716 = CARTESIAN_POINT('',(-2.325,0.92,1.110223024625E-16)); +#52717 = VECTOR('',#52718,1.); +#52718 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52719 = ORIENTED_EDGE('',*,*,#46646,.T.); +#52720 = PLANE('',#52721); +#52721 = AXIS2_PLACEMENT_3D('',#52722,#52723,#52724); +#52722 = CARTESIAN_POINT('',(-2.325,1.25,0.)); +#52723 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52724 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52725 = ADVANCED_FACE('',(#52726),#52737,.T.); +#52726 = FACE_BOUND('',#52727,.T.); +#52727 = EDGE_LOOP('',(#52728,#52729,#52730,#52731)); +#52728 = ORIENTED_EDGE('',*,*,#46654,.F.); +#52729 = ORIENTED_EDGE('',*,*,#52714,.T.); +#52730 = ORIENTED_EDGE('',*,*,#46742,.T.); +#52731 = ORIENTED_EDGE('',*,*,#52732,.F.); +#52732 = EDGE_CURVE('',#46655,#46734,#52733,.T.); +#52733 = LINE('',#52734,#52735); +#52734 = CARTESIAN_POINT('',(-2.325,0.92,3.619548911246E-02)); +#52735 = VECTOR('',#52736,1.); +#52736 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52737 = PLANE('',#52738); +#52738 = AXIS2_PLACEMENT_3D('',#52739,#52740,#52741); +#52739 = CARTESIAN_POINT('',(-2.325,0.92,1.110223024625E-16)); +#52740 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52741 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#52742 = ADVANCED_FACE('',(#52743),#52754,.T.); +#52743 = FACE_BOUND('',#52744,.T.); +#52744 = EDGE_LOOP('',(#52745,#52746,#52747,#52753)); +#52745 = ORIENTED_EDGE('',*,*,#52732,.T.); +#52746 = ORIENTED_EDGE('',*,*,#46733,.F.); +#52747 = ORIENTED_EDGE('',*,*,#52748,.F.); +#52748 = EDGE_CURVE('',#46663,#46726,#52749,.T.); +#52749 = LINE('',#52750,#52751); +#52750 = CARTESIAN_POINT('',(-2.325,0.943186633611,6.541154699934E-02)); +#52751 = VECTOR('',#52752,1.); +#52752 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52753 = ORIENTED_EDGE('',*,*,#46662,.T.); +#52754 = CYLINDRICAL_SURFACE('',#52755,3.E-02); +#52755 = AXIS2_PLACEMENT_3D('',#52756,#52757,#52758); +#52756 = CARTESIAN_POINT('',(-2.325,0.95,3.619548911246E-02)); +#52757 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52758 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52759 = ADVANCED_FACE('',(#52760),#52766,.T.); +#52760 = FACE_BOUND('',#52761,.T.); +#52761 = EDGE_LOOP('',(#52762,#52763,#52764,#52765)); +#52762 = ORIENTED_EDGE('',*,*,#52748,.T.); +#52763 = ORIENTED_EDGE('',*,*,#46725,.T.); +#52764 = ORIENTED_EDGE('',*,*,#46702,.T.); +#52765 = ORIENTED_EDGE('',*,*,#46671,.F.); +#52766 = PLANE('',#52767); +#52767 = AXIS2_PLACEMENT_3D('',#52768,#52769,#52770); +#52768 = CARTESIAN_POINT('',(-2.325,0.943186633611,6.541154699934E-02)); +#52769 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#52770 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#52771 = ADVANCED_FACE('',(#52772),#52783,.T.); +#52772 = FACE_BOUND('',#52773,.T.); +#52773 = EDGE_LOOP('',(#52774,#52775,#52776,#52782)); +#52774 = ORIENTED_EDGE('',*,*,#43875,.T.); +#52775 = ORIENTED_EDGE('',*,*,#46451,.T.); +#52776 = ORIENTED_EDGE('',*,*,#52777,.F.); +#52777 = EDGE_CURVE('',#46499,#46443,#52778,.T.); +#52778 = LINE('',#52779,#52780); +#52779 = CARTESIAN_POINT('',(-2.825,1.35,0.16)); +#52780 = VECTOR('',#52781,1.); +#52781 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52782 = ORIENTED_EDGE('',*,*,#46498,.T.); +#52783 = PLANE('',#52784); +#52784 = AXIS2_PLACEMENT_3D('',#52785,#52786,#52787); +#52785 = CARTESIAN_POINT('',(-2.825,1.35,0.31)); +#52786 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52787 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52788 = ADVANCED_FACE('',(#52789),#52800,.F.); +#52789 = FACE_BOUND('',#52790,.F.); +#52790 = EDGE_LOOP('',(#52791,#52792,#52798,#52799)); +#52791 = ORIENTED_EDGE('',*,*,#46506,.T.); +#52792 = ORIENTED_EDGE('',*,*,#52793,.T.); +#52793 = EDGE_CURVE('',#46507,#46435,#52794,.T.); +#52794 = LINE('',#52795,#52796); +#52795 = CARTESIAN_POINT('',(-2.825,1.3,0.11)); +#52796 = VECTOR('',#52797,1.); +#52797 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52798 = ORIENTED_EDGE('',*,*,#46442,.F.); +#52799 = ORIENTED_EDGE('',*,*,#52777,.F.); +#52800 = CYLINDRICAL_SURFACE('',#52801,5.E-02); +#52801 = AXIS2_PLACEMENT_3D('',#52802,#52803,#52804); +#52802 = CARTESIAN_POINT('',(-2.825,1.35,0.11)); +#52803 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52804 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52805 = ADVANCED_FACE('',(#52806),#52817,.T.); +#52806 = FACE_BOUND('',#52807,.T.); +#52807 = EDGE_LOOP('',(#52808,#52809,#52810,#52816)); +#52808 = ORIENTED_EDGE('',*,*,#52793,.T.); +#52809 = ORIENTED_EDGE('',*,*,#46434,.T.); +#52810 = ORIENTED_EDGE('',*,*,#52811,.F.); +#52811 = EDGE_CURVE('',#46516,#46427,#52812,.T.); +#52812 = LINE('',#52813,#52814); +#52813 = CARTESIAN_POINT('',(-2.825,1.3,5.E-02)); +#52814 = VECTOR('',#52815,1.); +#52815 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52816 = ORIENTED_EDGE('',*,*,#46515,.F.); +#52817 = PLANE('',#52818); +#52818 = AXIS2_PLACEMENT_3D('',#52819,#52820,#52821); +#52819 = CARTESIAN_POINT('',(-2.825,1.3,0.11)); +#52820 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52821 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52822 = ADVANCED_FACE('',(#52823),#52834,.T.); +#52823 = FACE_BOUND('',#52824,.T.); +#52824 = EDGE_LOOP('',(#52825,#52826,#52827,#52833)); +#52825 = ORIENTED_EDGE('',*,*,#52811,.T.); +#52826 = ORIENTED_EDGE('',*,*,#46426,.T.); +#52827 = ORIENTED_EDGE('',*,*,#52828,.F.); +#52828 = EDGE_CURVE('',#46524,#46419,#52829,.T.); +#52829 = LINE('',#52830,#52831); +#52830 = CARTESIAN_POINT('',(-2.825,1.25,1.110223024625E-16)); +#52831 = VECTOR('',#52832,1.); +#52832 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52833 = ORIENTED_EDGE('',*,*,#46523,.F.); +#52834 = PLANE('',#52835); +#52835 = AXIS2_PLACEMENT_3D('',#52836,#52837,#52838); +#52836 = CARTESIAN_POINT('',(-2.825,1.3,5.E-02)); +#52837 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#52838 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#52839 = ADVANCED_FACE('',(#52840),#52851,.T.); +#52840 = FACE_BOUND('',#52841,.T.); +#52841 = EDGE_LOOP('',(#52842,#52843,#52844,#52850)); +#52842 = ORIENTED_EDGE('',*,*,#52828,.T.); +#52843 = ORIENTED_EDGE('',*,*,#46418,.T.); +#52844 = ORIENTED_EDGE('',*,*,#52845,.F.); +#52845 = EDGE_CURVE('',#46532,#46411,#52846,.T.); +#52846 = LINE('',#52847,#52848); +#52847 = CARTESIAN_POINT('',(-2.825,0.92,2.22044604925E-16)); +#52848 = VECTOR('',#52849,1.); +#52849 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52850 = ORIENTED_EDGE('',*,*,#46531,.T.); +#52851 = PLANE('',#52852); +#52852 = AXIS2_PLACEMENT_3D('',#52853,#52854,#52855); +#52853 = CARTESIAN_POINT('',(-2.825,1.25,1.110223024625E-16)); +#52854 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52855 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52856 = ADVANCED_FACE('',(#52857),#52868,.T.); +#52857 = FACE_BOUND('',#52858,.T.); +#52858 = EDGE_LOOP('',(#52859,#52860,#52861,#52862)); +#52859 = ORIENTED_EDGE('',*,*,#46539,.F.); +#52860 = ORIENTED_EDGE('',*,*,#52845,.T.); +#52861 = ORIENTED_EDGE('',*,*,#46410,.T.); +#52862 = ORIENTED_EDGE('',*,*,#52863,.F.); +#52863 = EDGE_CURVE('',#46540,#46402,#52864,.T.); +#52864 = LINE('',#52865,#52866); +#52865 = CARTESIAN_POINT('',(-2.825,0.92,3.619548911246E-02)); +#52866 = VECTOR('',#52867,1.); +#52867 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52868 = PLANE('',#52869); +#52869 = AXIS2_PLACEMENT_3D('',#52870,#52871,#52872); +#52870 = CARTESIAN_POINT('',(-2.825,0.92,2.22044604925E-16)); +#52871 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52872 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#52873 = ADVANCED_FACE('',(#52874),#52885,.T.); +#52874 = FACE_BOUND('',#52875,.T.); +#52875 = EDGE_LOOP('',(#52876,#52877,#52878,#52884)); +#52876 = ORIENTED_EDGE('',*,*,#52863,.T.); +#52877 = ORIENTED_EDGE('',*,*,#46401,.F.); +#52878 = ORIENTED_EDGE('',*,*,#52879,.F.); +#52879 = EDGE_CURVE('',#46548,#46394,#52880,.T.); +#52880 = LINE('',#52881,#52882); +#52881 = CARTESIAN_POINT('',(-2.825,0.943186633611,6.541154699934E-02)); +#52882 = VECTOR('',#52883,1.); +#52883 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52884 = ORIENTED_EDGE('',*,*,#46547,.T.); +#52885 = CYLINDRICAL_SURFACE('',#52886,3.E-02); +#52886 = AXIS2_PLACEMENT_3D('',#52887,#52888,#52889); +#52887 = CARTESIAN_POINT('',(-2.825,0.95,3.619548911246E-02)); +#52888 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52889 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52890 = ADVANCED_FACE('',(#52891),#52897,.T.); +#52891 = FACE_BOUND('',#52892,.T.); +#52892 = EDGE_LOOP('',(#52893,#52894,#52895,#52896)); +#52893 = ORIENTED_EDGE('',*,*,#52879,.T.); +#52894 = ORIENTED_EDGE('',*,*,#46393,.T.); +#52895 = ORIENTED_EDGE('',*,*,#46481,.T.); +#52896 = ORIENTED_EDGE('',*,*,#46556,.F.); +#52897 = PLANE('',#52898); +#52898 = AXIS2_PLACEMENT_3D('',#52899,#52900,#52901); +#52899 = CARTESIAN_POINT('',(-2.825,0.943186633611,6.541154699934E-02)); +#52900 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#52901 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#52902 = ADVANCED_FACE('',(#52903),#52909,.T.); +#52903 = FACE_BOUND('',#52904,.T.); +#52904 = EDGE_LOOP('',(#52905,#52906,#52907,#52908)); +#52905 = ORIENTED_EDGE('',*,*,#46350,.F.); +#52906 = ORIENTED_EDGE('',*,*,#46594,.F.); +#52907 = ORIENTED_EDGE('',*,*,#42557,.F.); +#52908 = ORIENTED_EDGE('',*,*,#46310,.T.); +#52909 = PLANE('',#52910); +#52910 = AXIS2_PLACEMENT_3D('',#52911,#52912,#52913); +#52911 = CARTESIAN_POINT('',(-2.575,0.85,5.5E-02)); +#52912 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#52913 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#52914 = ADVANCED_FACE('',(#52915),#52926,.T.); +#52915 = FACE_BOUND('',#52916,.T.); +#52916 = EDGE_LOOP('',(#52917,#52918,#52919,#52925)); +#52917 = ORIENTED_EDGE('',*,*,#43907,.T.); +#52918 = ORIENTED_EDGE('',*,*,#46157,.T.); +#52919 = ORIENTED_EDGE('',*,*,#52920,.F.); +#52920 = EDGE_CURVE('',#45988,#46149,#52921,.T.); +#52921 = LINE('',#52922,#52923); +#52922 = CARTESIAN_POINT('',(-3.325,1.35,0.16)); +#52923 = VECTOR('',#52924,1.); +#52924 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52925 = ORIENTED_EDGE('',*,*,#45987,.T.); +#52926 = PLANE('',#52927); +#52927 = AXIS2_PLACEMENT_3D('',#52928,#52929,#52930); +#52928 = CARTESIAN_POINT('',(-3.325,1.35,0.31)); +#52929 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52930 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52931 = ADVANCED_FACE('',(#52932),#52943,.F.); +#52932 = FACE_BOUND('',#52933,.F.); +#52933 = EDGE_LOOP('',(#52934,#52935,#52941,#52942)); +#52934 = ORIENTED_EDGE('',*,*,#45995,.T.); +#52935 = ORIENTED_EDGE('',*,*,#52936,.T.); +#52936 = EDGE_CURVE('',#45996,#46141,#52937,.T.); +#52937 = LINE('',#52938,#52939); +#52938 = CARTESIAN_POINT('',(-3.325,1.3,0.11)); +#52939 = VECTOR('',#52940,1.); +#52940 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52941 = ORIENTED_EDGE('',*,*,#46148,.F.); +#52942 = ORIENTED_EDGE('',*,*,#52920,.F.); +#52943 = CYLINDRICAL_SURFACE('',#52944,5.E-02); +#52944 = AXIS2_PLACEMENT_3D('',#52945,#52946,#52947); +#52945 = CARTESIAN_POINT('',(-3.325,1.35,0.11)); +#52946 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52947 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#52948 = ADVANCED_FACE('',(#52949),#52960,.T.); +#52949 = FACE_BOUND('',#52950,.T.); +#52950 = EDGE_LOOP('',(#52951,#52952,#52953,#52959)); +#52951 = ORIENTED_EDGE('',*,*,#52936,.T.); +#52952 = ORIENTED_EDGE('',*,*,#46140,.T.); +#52953 = ORIENTED_EDGE('',*,*,#52954,.F.); +#52954 = EDGE_CURVE('',#46005,#46133,#52955,.T.); +#52955 = LINE('',#52956,#52957); +#52956 = CARTESIAN_POINT('',(-3.325,1.3,5.E-02)); +#52957 = VECTOR('',#52958,1.); +#52958 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52959 = ORIENTED_EDGE('',*,*,#46004,.F.); +#52960 = PLANE('',#52961); +#52961 = AXIS2_PLACEMENT_3D('',#52962,#52963,#52964); +#52962 = CARTESIAN_POINT('',(-3.325,1.3,0.11)); +#52963 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#52964 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52965 = ADVANCED_FACE('',(#52966),#52977,.T.); +#52966 = FACE_BOUND('',#52967,.T.); +#52967 = EDGE_LOOP('',(#52968,#52969,#52970,#52976)); +#52968 = ORIENTED_EDGE('',*,*,#52954,.T.); +#52969 = ORIENTED_EDGE('',*,*,#46132,.T.); +#52970 = ORIENTED_EDGE('',*,*,#52971,.F.); +#52971 = EDGE_CURVE('',#46013,#46125,#52972,.T.); +#52972 = LINE('',#52973,#52974); +#52973 = CARTESIAN_POINT('',(-3.325,1.25,2.22044604925E-16)); +#52974 = VECTOR('',#52975,1.); +#52975 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52976 = ORIENTED_EDGE('',*,*,#46012,.F.); +#52977 = PLANE('',#52978); +#52978 = AXIS2_PLACEMENT_3D('',#52979,#52980,#52981); +#52979 = CARTESIAN_POINT('',(-3.325,1.3,5.E-02)); +#52980 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#52981 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#52982 = ADVANCED_FACE('',(#52983),#52994,.T.); +#52983 = FACE_BOUND('',#52984,.T.); +#52984 = EDGE_LOOP('',(#52985,#52986,#52987,#52993)); +#52985 = ORIENTED_EDGE('',*,*,#52971,.T.); +#52986 = ORIENTED_EDGE('',*,*,#46124,.T.); +#52987 = ORIENTED_EDGE('',*,*,#52988,.F.); +#52988 = EDGE_CURVE('',#46021,#46117,#52989,.T.); +#52989 = LINE('',#52990,#52991); +#52990 = CARTESIAN_POINT('',(-3.325,0.92,3.330669073875E-16)); +#52991 = VECTOR('',#52992,1.); +#52992 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#52993 = ORIENTED_EDGE('',*,*,#46020,.T.); +#52994 = PLANE('',#52995); +#52995 = AXIS2_PLACEMENT_3D('',#52996,#52997,#52998); +#52996 = CARTESIAN_POINT('',(-3.325,1.25,2.22044604925E-16)); +#52997 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#52998 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#52999 = ADVANCED_FACE('',(#53000),#53011,.T.); +#53000 = FACE_BOUND('',#53001,.T.); +#53001 = EDGE_LOOP('',(#53002,#53003,#53004,#53005)); +#53002 = ORIENTED_EDGE('',*,*,#46028,.F.); +#53003 = ORIENTED_EDGE('',*,*,#52988,.T.); +#53004 = ORIENTED_EDGE('',*,*,#46116,.T.); +#53005 = ORIENTED_EDGE('',*,*,#53006,.F.); +#53006 = EDGE_CURVE('',#46029,#46108,#53007,.T.); +#53007 = LINE('',#53008,#53009); +#53008 = CARTESIAN_POINT('',(-3.325,0.92,3.619548911246E-02)); +#53009 = VECTOR('',#53010,1.); +#53010 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53011 = PLANE('',#53012); +#53012 = AXIS2_PLACEMENT_3D('',#53013,#53014,#53015); +#53013 = CARTESIAN_POINT('',(-3.325,0.92,3.330669073875E-16)); +#53014 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#53015 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#53016 = ADVANCED_FACE('',(#53017),#53028,.T.); +#53017 = FACE_BOUND('',#53018,.T.); +#53018 = EDGE_LOOP('',(#53019,#53020,#53021,#53027)); +#53019 = ORIENTED_EDGE('',*,*,#53006,.T.); +#53020 = ORIENTED_EDGE('',*,*,#46107,.F.); +#53021 = ORIENTED_EDGE('',*,*,#53022,.F.); +#53022 = EDGE_CURVE('',#46037,#46100,#53023,.T.); +#53023 = LINE('',#53024,#53025); +#53024 = CARTESIAN_POINT('',(-3.325,0.943186633611,6.541154699934E-02)); +#53025 = VECTOR('',#53026,1.); +#53026 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53027 = ORIENTED_EDGE('',*,*,#46036,.T.); +#53028 = CYLINDRICAL_SURFACE('',#53029,3.E-02); +#53029 = AXIS2_PLACEMENT_3D('',#53030,#53031,#53032); +#53030 = CARTESIAN_POINT('',(-3.325,0.95,3.619548911246E-02)); +#53031 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53032 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#53033 = ADVANCED_FACE('',(#53034),#53040,.T.); +#53034 = FACE_BOUND('',#53035,.T.); +#53035 = EDGE_LOOP('',(#53036,#53037,#53038,#53039)); +#53036 = ORIENTED_EDGE('',*,*,#53022,.T.); +#53037 = ORIENTED_EDGE('',*,*,#46099,.T.); +#53038 = ORIENTED_EDGE('',*,*,#46076,.T.); +#53039 = ORIENTED_EDGE('',*,*,#46045,.F.); +#53040 = PLANE('',#53041); +#53041 = AXIS2_PLACEMENT_3D('',#53042,#53043,#53044); +#53042 = CARTESIAN_POINT('',(-3.325,0.943186633611,6.541154699934E-02)); +#53043 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#53044 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#53045 = ADVANCED_FACE('',(#53046),#53057,.T.); +#53046 = FACE_BOUND('',#53047,.T.); +#53047 = EDGE_LOOP('',(#53048,#53049,#53050,#53056)); +#53048 = ORIENTED_EDGE('',*,*,#43939,.T.); +#53049 = ORIENTED_EDGE('',*,*,#45924,.T.); +#53050 = ORIENTED_EDGE('',*,*,#53051,.F.); +#53051 = EDGE_CURVE('',#45793,#45916,#53052,.T.); +#53052 = LINE('',#53053,#53054); +#53053 = CARTESIAN_POINT('',(-3.825,1.35,0.16)); +#53054 = VECTOR('',#53055,1.); +#53055 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53056 = ORIENTED_EDGE('',*,*,#45792,.T.); +#53057 = PLANE('',#53058); +#53058 = AXIS2_PLACEMENT_3D('',#53059,#53060,#53061); +#53059 = CARTESIAN_POINT('',(-3.825,1.35,0.31)); +#53060 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#53061 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#53062 = ADVANCED_FACE('',(#53063),#53074,.F.); +#53063 = FACE_BOUND('',#53064,.F.); +#53064 = EDGE_LOOP('',(#53065,#53066,#53072,#53073)); +#53065 = ORIENTED_EDGE('',*,*,#45800,.T.); +#53066 = ORIENTED_EDGE('',*,*,#53067,.T.); +#53067 = EDGE_CURVE('',#45801,#45908,#53068,.T.); +#53068 = LINE('',#53069,#53070); +#53069 = CARTESIAN_POINT('',(-3.825,1.3,0.11)); +#53070 = VECTOR('',#53071,1.); +#53071 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53072 = ORIENTED_EDGE('',*,*,#45915,.F.); +#53073 = ORIENTED_EDGE('',*,*,#53051,.F.); +#53074 = CYLINDRICAL_SURFACE('',#53075,5.E-02); +#53075 = AXIS2_PLACEMENT_3D('',#53076,#53077,#53078); +#53076 = CARTESIAN_POINT('',(-3.825,1.35,0.11)); +#53077 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53078 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#53079 = ADVANCED_FACE('',(#53080),#53091,.T.); +#53080 = FACE_BOUND('',#53081,.T.); +#53081 = EDGE_LOOP('',(#53082,#53083,#53084,#53090)); +#53082 = ORIENTED_EDGE('',*,*,#53067,.T.); +#53083 = ORIENTED_EDGE('',*,*,#45907,.T.); +#53084 = ORIENTED_EDGE('',*,*,#53085,.F.); +#53085 = EDGE_CURVE('',#45810,#45900,#53086,.T.); +#53086 = LINE('',#53087,#53088); +#53087 = CARTESIAN_POINT('',(-3.825,1.3,5.E-02)); +#53088 = VECTOR('',#53089,1.); +#53089 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53090 = ORIENTED_EDGE('',*,*,#45809,.F.); +#53091 = PLANE('',#53092); +#53092 = AXIS2_PLACEMENT_3D('',#53093,#53094,#53095); +#53093 = CARTESIAN_POINT('',(-3.825,1.3,0.11)); +#53094 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#53095 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#53096 = ADVANCED_FACE('',(#53097),#53108,.T.); +#53097 = FACE_BOUND('',#53098,.T.); +#53098 = EDGE_LOOP('',(#53099,#53100,#53101,#53107)); +#53099 = ORIENTED_EDGE('',*,*,#53085,.T.); +#53100 = ORIENTED_EDGE('',*,*,#45899,.T.); +#53101 = ORIENTED_EDGE('',*,*,#53102,.F.); +#53102 = EDGE_CURVE('',#45818,#45892,#53103,.T.); +#53103 = LINE('',#53104,#53105); +#53104 = CARTESIAN_POINT('',(-3.825,1.25,3.330669073875E-16)); +#53105 = VECTOR('',#53106,1.); +#53106 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53107 = ORIENTED_EDGE('',*,*,#45817,.F.); +#53108 = PLANE('',#53109); +#53109 = AXIS2_PLACEMENT_3D('',#53110,#53111,#53112); +#53110 = CARTESIAN_POINT('',(-3.825,1.3,5.E-02)); +#53111 = DIRECTION('',(-1.619157848018E-16,0.707106781186, + -0.707106781187)); +#53112 = DIRECTION('',(-1.619157848018E-16,-0.707106781187, + -0.707106781186)); +#53113 = ADVANCED_FACE('',(#53114),#53125,.T.); +#53114 = FACE_BOUND('',#53115,.T.); +#53115 = EDGE_LOOP('',(#53116,#53117,#53118,#53124)); +#53116 = ORIENTED_EDGE('',*,*,#53102,.T.); +#53117 = ORIENTED_EDGE('',*,*,#45891,.T.); +#53118 = ORIENTED_EDGE('',*,*,#53119,.F.); +#53119 = EDGE_CURVE('',#45826,#45884,#53120,.T.); +#53120 = LINE('',#53121,#53122); +#53121 = CARTESIAN_POINT('',(-3.825,0.92,4.440892098501E-16)); +#53122 = VECTOR('',#53123,1.); +#53123 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53124 = ORIENTED_EDGE('',*,*,#45825,.T.); +#53125 = PLANE('',#53126); +#53126 = AXIS2_PLACEMENT_3D('',#53127,#53128,#53129); +#53127 = CARTESIAN_POINT('',(-3.825,1.25,3.330669073875E-16)); +#53128 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#53129 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#53130 = ADVANCED_FACE('',(#53131),#53142,.T.); +#53131 = FACE_BOUND('',#53132,.T.); +#53132 = EDGE_LOOP('',(#53133,#53134,#53135,#53136)); +#53133 = ORIENTED_EDGE('',*,*,#45833,.F.); +#53134 = ORIENTED_EDGE('',*,*,#53119,.T.); +#53135 = ORIENTED_EDGE('',*,*,#45883,.T.); +#53136 = ORIENTED_EDGE('',*,*,#53137,.F.); +#53137 = EDGE_CURVE('',#45834,#45875,#53138,.T.); +#53138 = LINE('',#53139,#53140); +#53139 = CARTESIAN_POINT('',(-3.825,0.92,3.619548911246E-02)); +#53140 = VECTOR('',#53141,1.); +#53141 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53142 = PLANE('',#53143); +#53143 = AXIS2_PLACEMENT_3D('',#53144,#53145,#53146); +#53144 = CARTESIAN_POINT('',(-3.825,0.92,4.440892098501E-16)); +#53145 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#53146 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#53147 = ADVANCED_FACE('',(#53148),#53159,.T.); +#53148 = FACE_BOUND('',#53149,.T.); +#53149 = EDGE_LOOP('',(#53150,#53151,#53152,#53158)); +#53150 = ORIENTED_EDGE('',*,*,#53137,.T.); +#53151 = ORIENTED_EDGE('',*,*,#45874,.F.); +#53152 = ORIENTED_EDGE('',*,*,#53153,.F.); +#53153 = EDGE_CURVE('',#45842,#45867,#53154,.T.); +#53154 = LINE('',#53155,#53156); +#53155 = CARTESIAN_POINT('',(-3.825,0.943186633611,6.541154699934E-02)); +#53156 = VECTOR('',#53157,1.); +#53157 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53158 = ORIENTED_EDGE('',*,*,#45841,.T.); +#53159 = CYLINDRICAL_SURFACE('',#53160,3.E-02); +#53160 = AXIS2_PLACEMENT_3D('',#53161,#53162,#53163); +#53161 = CARTESIAN_POINT('',(-3.825,0.95,3.619548911246E-02)); +#53162 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53163 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#53164 = ADVANCED_FACE('',(#53165),#53171,.T.); +#53165 = FACE_BOUND('',#53166,.T.); +#53166 = EDGE_LOOP('',(#53167,#53168,#53169,#53170)); +#53167 = ORIENTED_EDGE('',*,*,#53153,.T.); +#53168 = ORIENTED_EDGE('',*,*,#45866,.T.); +#53169 = ORIENTED_EDGE('',*,*,#45768,.T.); +#53170 = ORIENTED_EDGE('',*,*,#45850,.F.); +#53171 = PLANE('',#53172); +#53172 = AXIS2_PLACEMENT_3D('',#53173,#53174,#53175); +#53173 = CARTESIAN_POINT('',(-3.825,0.943186633611,6.541154699934E-02)); +#53174 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#53175 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#53176 = ADVANCED_FACE('',(#53177),#53183,.T.); +#53177 = FACE_BOUND('',#53178,.T.); +#53178 = EDGE_LOOP('',(#53179,#53180,#53181,#53182)); +#53179 = ORIENTED_EDGE('',*,*,#45724,.F.); +#53180 = ORIENTED_EDGE('',*,*,#45968,.F.); +#53181 = ORIENTED_EDGE('',*,*,#42493,.F.); +#53182 = ORIENTED_EDGE('',*,*,#45684,.T.); +#53183 = PLANE('',#53184); +#53184 = AXIS2_PLACEMENT_3D('',#53185,#53186,#53187); +#53185 = CARTESIAN_POINT('',(-3.575,0.85,5.5E-02)); +#53186 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#53187 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#53188 = ADVANCED_FACE('',(#53189),#53200,.T.); +#53189 = FACE_BOUND('',#53190,.T.); +#53190 = EDGE_LOOP('',(#53191,#53192,#53193,#53199)); +#53191 = ORIENTED_EDGE('',*,*,#43971,.T.); +#53192 = ORIENTED_EDGE('',*,*,#45531,.T.); +#53193 = ORIENTED_EDGE('',*,*,#53194,.F.); +#53194 = EDGE_CURVE('',#45443,#45523,#53195,.T.); +#53195 = LINE('',#53196,#53197); +#53196 = CARTESIAN_POINT('',(-4.325,1.35,0.16)); +#53197 = VECTOR('',#53198,1.); +#53198 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53199 = ORIENTED_EDGE('',*,*,#45442,.T.); +#53200 = PLANE('',#53201); +#53201 = AXIS2_PLACEMENT_3D('',#53202,#53203,#53204); +#53202 = CARTESIAN_POINT('',(-4.325,1.35,0.31)); +#53203 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#53204 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#53205 = ADVANCED_FACE('',(#53206),#53217,.F.); +#53206 = FACE_BOUND('',#53207,.F.); +#53207 = EDGE_LOOP('',(#53208,#53209,#53215,#53216)); +#53208 = ORIENTED_EDGE('',*,*,#45450,.T.); +#53209 = ORIENTED_EDGE('',*,*,#53210,.T.); +#53210 = EDGE_CURVE('',#45451,#45515,#53211,.T.); +#53211 = LINE('',#53212,#53213); +#53212 = CARTESIAN_POINT('',(-4.325,1.3,0.11)); +#53213 = VECTOR('',#53214,1.); +#53214 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53215 = ORIENTED_EDGE('',*,*,#45522,.F.); +#53216 = ORIENTED_EDGE('',*,*,#53194,.F.); +#53217 = CYLINDRICAL_SURFACE('',#53218,5.E-02); +#53218 = AXIS2_PLACEMENT_3D('',#53219,#53220,#53221); +#53219 = CARTESIAN_POINT('',(-4.325,1.35,0.11)); +#53220 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53221 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#53222 = ADVANCED_FACE('',(#53223),#53229,.T.); +#53223 = FACE_BOUND('',#53224,.T.); +#53224 = EDGE_LOOP('',(#53225,#53226,#53227,#53228)); +#53225 = ORIENTED_EDGE('',*,*,#53210,.T.); +#53226 = ORIENTED_EDGE('',*,*,#45514,.T.); +#53227 = ORIENTED_EDGE('',*,*,#45374,.F.); +#53228 = ORIENTED_EDGE('',*,*,#45459,.F.); +#53229 = PLANE('',#53230); +#53230 = AXIS2_PLACEMENT_3D('',#53231,#53232,#53233); +#53231 = CARTESIAN_POINT('',(-4.325,1.3,0.11)); +#53232 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#53233 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#53234 = ADVANCED_FACE('',(#53235),#53251,.T.); +#53235 = FACE_BOUND('',#53236,.T.); +#53236 = EDGE_LOOP('',(#53237,#53238,#53244,#53245)); +#53237 = ORIENTED_EDGE('',*,*,#43340,.T.); +#53238 = ORIENTED_EDGE('',*,*,#53239,.F.); +#53239 = EDGE_CURVE('',#44699,#43333,#53240,.T.); +#53240 = LINE('',#53241,#53242); +#53241 = CARTESIAN_POINT('',(5.825,1.35,0.31)); +#53242 = VECTOR('',#53243,1.); +#53243 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#53244 = ORIENTED_EDGE('',*,*,#44707,.F.); +#53245 = ORIENTED_EDGE('',*,*,#53246,.T.); +#53246 = EDGE_CURVE('',#44708,#43341,#53247,.T.); +#53247 = LINE('',#53248,#53249); +#53248 = CARTESIAN_POINT('',(5.675,1.35,0.31)); +#53249 = VECTOR('',#53250,1.); +#53250 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#53251 = PLANE('',#53252); +#53252 = AXIS2_PLACEMENT_3D('',#53253,#53254,#53255); +#53253 = CARTESIAN_POINT('',(5.675,1.35,0.31)); +#53254 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#53255 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#53256 = ADVANCED_FACE('',(#53257),#53291,.T.); +#53257 = FACE_BOUND('',#53258,.T.); +#53258 = EDGE_LOOP('',(#53259,#53267,#53275,#53281,#53282,#53288,#53289, + #53290)); +#53259 = ORIENTED_EDGE('',*,*,#53260,.T.); +#53260 = EDGE_CURVE('',#43349,#53261,#53263,.T.); +#53261 = VERTEX_POINT('',#53262); +#53262 = CARTESIAN_POINT('',(5.675,1.,8.E-02)); +#53263 = LINE('',#53264,#53265); +#53264 = CARTESIAN_POINT('',(5.675,1.,0.841614)); +#53265 = VECTOR('',#53266,1.); +#53266 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53267 = ORIENTED_EDGE('',*,*,#53268,.F.); +#53268 = EDGE_CURVE('',#53269,#53261,#53271,.T.); +#53269 = VERTEX_POINT('',#53270); +#53270 = CARTESIAN_POINT('',(5.6,1.,8.E-02)); +#53271 = LINE('',#53272,#53273); +#53272 = CARTESIAN_POINT('',(-10.,1.,8.E-02)); +#53273 = VECTOR('',#53274,1.); +#53274 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53275 = ORIENTED_EDGE('',*,*,#53276,.T.); +#53276 = EDGE_CURVE('',#53269,#43069,#53277,.T.); +#53277 = LINE('',#53278,#53279); +#53278 = CARTESIAN_POINT('',(-10.,1.,-15.52)); +#53279 = VECTOR('',#53280,1.); +#53280 = DIRECTION('',(-0.707106781187,-1.064046335705E-16, + -0.707106781187)); +#53281 = ORIENTED_EDGE('',*,*,#43068,.F.); +#53282 = ORIENTED_EDGE('',*,*,#53283,.T.); +#53283 = EDGE_CURVE('',#43061,#45305,#53284,.T.); +#53284 = LINE('',#53285,#53286); +#53285 = CARTESIAN_POINT('',(-10.,1.,15.48)); +#53286 = VECTOR('',#53287,1.); +#53287 = DIRECTION('',(-0.707106781187,1.064046335705E-16,0.707106781187 + )); +#53288 = ORIENTED_EDGE('',*,*,#45304,.T.); +#53289 = ORIENTED_EDGE('',*,*,#44985,.T.); +#53290 = ORIENTED_EDGE('',*,*,#43356,.T.); +#53291 = PLANE('',#53292); +#53292 = AXIS2_PLACEMENT_3D('',#53293,#53294,#53295); +#53293 = CARTESIAN_POINT('',(5.825,1.,0.31)); +#53294 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53295 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53296 = ADVANCED_FACE('',(#53297),#53329,.T.); +#53297 = FACE_BOUND('',#53298,.T.); +#53298 = EDGE_LOOP('',(#53299,#53309,#53315,#53316,#53317,#53318,#53319, + #53320,#53321,#53322,#53323)); +#53299 = ORIENTED_EDGE('',*,*,#53300,.T.); +#53300 = EDGE_CURVE('',#53301,#53303,#53305,.T.); +#53301 = VERTEX_POINT('',#53302); +#53302 = CARTESIAN_POINT('',(5.825,1.,8.E-02)); +#53303 = VERTEX_POINT('',#53304); +#53304 = CARTESIAN_POINT('',(5.825,1.,7.866077735406E-02)); +#53305 = LINE('',#53306,#53307); +#53306 = CARTESIAN_POINT('',(5.825,1.,0.841614)); +#53307 = VECTOR('',#53308,1.); +#53308 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53309 = ORIENTED_EDGE('',*,*,#53310,.F.); +#53310 = EDGE_CURVE('',#44790,#53303,#53311,.T.); +#53311 = LINE('',#53312,#53313); +#53312 = CARTESIAN_POINT('',(5.825,0.943186633611,6.541154699934E-02)); +#53313 = VECTOR('',#53314,1.); +#53314 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#53315 = ORIENTED_EDGE('',*,*,#44789,.T.); +#53316 = ORIENTED_EDGE('',*,*,#44878,.F.); +#53317 = ORIENTED_EDGE('',*,*,#43140,.T.); +#53318 = ORIENTED_EDGE('',*,*,#44049,.F.); +#53319 = ORIENTED_EDGE('',*,*,#44645,.F.); +#53320 = ORIENTED_EDGE('',*,*,#44698,.F.); +#53321 = ORIENTED_EDGE('',*,*,#53239,.T.); +#53322 = ORIENTED_EDGE('',*,*,#43332,.T.); +#53323 = ORIENTED_EDGE('',*,*,#53324,.T.); +#53324 = EDGE_CURVE('',#43325,#53301,#53325,.T.); +#53325 = LINE('',#53326,#53327); +#53326 = CARTESIAN_POINT('',(5.825,1.,0.841614)); +#53327 = VECTOR('',#53328,1.); +#53328 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53329 = PLANE('',#53330); +#53330 = AXIS2_PLACEMENT_3D('',#53331,#53332,#53333); +#53331 = CARTESIAN_POINT('',(5.825,1.245779075398,0.170500231015)); +#53332 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53333 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#53334 = ADVANCED_FACE('',(#53335),#53358,.F.); +#53335 = FACE_BOUND('',#53336,.T.); +#53336 = EDGE_LOOP('',(#53337,#53343,#53351,#53357)); +#53337 = ORIENTED_EDGE('',*,*,#53338,.F.); +#53338 = EDGE_CURVE('',#53261,#53301,#53339,.T.); +#53339 = LINE('',#53340,#53341); +#53340 = CARTESIAN_POINT('',(7.5,1.,8.E-02)); +#53341 = VECTOR('',#53342,1.); +#53342 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53343 = ORIENTED_EDGE('',*,*,#53344,.T.); +#53344 = EDGE_CURVE('',#53261,#53345,#53347,.T.); +#53345 = VERTEX_POINT('',#53346); +#53346 = CARTESIAN_POINT('',(5.675,1.,7.866077735406E-02)); +#53347 = LINE('',#53348,#53349); +#53348 = CARTESIAN_POINT('',(5.675,1.,0.841614)); +#53349 = VECTOR('',#53350,1.); +#53350 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53351 = ORIENTED_EDGE('',*,*,#53352,.F.); +#53352 = EDGE_CURVE('',#53303,#53345,#53353,.T.); +#53353 = LINE('',#53354,#53355); +#53354 = CARTESIAN_POINT('',(7.5,1.,7.866077735406E-02)); +#53355 = VECTOR('',#53356,1.); +#53356 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53357 = ORIENTED_EDGE('',*,*,#53300,.F.); +#53358 = PLANE('',#53359); +#53359 = AXIS2_PLACEMENT_3D('',#53360,#53361,#53362); +#53360 = CARTESIAN_POINT('',(5.825,1.,7.866077735406E-02)); +#53361 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53362 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53363 = ADVANCED_FACE('',(#53364),#53382,.F.); +#53364 = FACE_BOUND('',#53365,.T.); +#53365 = EDGE_LOOP('',(#53366,#53367,#53368,#53369,#53370,#53371,#53372, + #53373,#53374,#53375,#53381)); +#53366 = ORIENTED_EDGE('',*,*,#53260,.F.); +#53367 = ORIENTED_EDGE('',*,*,#43348,.F.); +#53368 = ORIENTED_EDGE('',*,*,#53246,.F.); +#53369 = ORIENTED_EDGE('',*,*,#44715,.T.); +#53370 = ORIENTED_EDGE('',*,*,#44652,.T.); +#53371 = ORIENTED_EDGE('',*,*,#44033,.T.); +#53372 = ORIENTED_EDGE('',*,*,#43122,.F.); +#53373 = ORIENTED_EDGE('',*,*,#44871,.T.); +#53374 = ORIENTED_EDGE('',*,*,#44770,.F.); +#53375 = ORIENTED_EDGE('',*,*,#53376,.T.); +#53376 = EDGE_CURVE('',#44771,#53345,#53377,.T.); +#53377 = LINE('',#53378,#53379); +#53378 = CARTESIAN_POINT('',(5.675,0.943186633611,6.541154699934E-02)); +#53379 = VECTOR('',#53380,1.); +#53380 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#53381 = ORIENTED_EDGE('',*,*,#53344,.F.); +#53382 = PLANE('',#53383); +#53383 = AXIS2_PLACEMENT_3D('',#53384,#53385,#53386); +#53384 = CARTESIAN_POINT('',(5.675,1.245779075398,0.170500231015)); +#53385 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53386 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#53387 = ADVANCED_FACE('',(#53388),#53437,.T.); +#53388 = FACE_BOUND('',#53389,.T.); +#53389 = EDGE_LOOP('',(#53390,#53391,#53392,#53400,#53406,#53407,#53415, + #53423,#53429,#53430,#53431)); +#53390 = ORIENTED_EDGE('',*,*,#53324,.F.); +#53391 = ORIENTED_EDGE('',*,*,#43324,.F.); +#53392 = ORIENTED_EDGE('',*,*,#53393,.F.); +#53393 = EDGE_CURVE('',#53394,#43317,#53396,.T.); +#53394 = VERTEX_POINT('',#53395); +#53395 = CARTESIAN_POINT('',(6.9,1.,0.31)); +#53396 = LINE('',#53397,#53398); +#53397 = CARTESIAN_POINT('',(-10.,1.,0.31)); +#53398 = VECTOR('',#53399,1.); +#53399 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53400 = ORIENTED_EDGE('',*,*,#53401,.F.); +#53401 = EDGE_CURVE('',#40879,#53394,#53402,.T.); +#53402 = LINE('',#53403,#53404); +#53403 = CARTESIAN_POINT('',(6.9,1.,0.841614)); +#53404 = VECTOR('',#53405,1.); +#53405 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53406 = ORIENTED_EDGE('',*,*,#40878,.T.); +#53407 = ORIENTED_EDGE('',*,*,#53408,.T.); +#53408 = EDGE_CURVE('',#40871,#53409,#53411,.T.); +#53409 = VERTEX_POINT('',#53410); +#53410 = CARTESIAN_POINT('',(7.,1.,8.E-02)); +#53411 = LINE('',#53412,#53413); +#53412 = CARTESIAN_POINT('',(7.,1.,0.841614)); +#53413 = VECTOR('',#53414,1.); +#53414 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53415 = ORIENTED_EDGE('',*,*,#53416,.F.); +#53416 = EDGE_CURVE('',#53417,#53409,#53419,.T.); +#53417 = VERTEX_POINT('',#53418); +#53418 = CARTESIAN_POINT('',(6.4525,1.,8.E-02)); +#53419 = LINE('',#53420,#53421); +#53420 = CARTESIAN_POINT('',(-10.,1.,8.E-02)); +#53421 = VECTOR('',#53422,1.); +#53422 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53423 = ORIENTED_EDGE('',*,*,#53424,.T.); +#53424 = EDGE_CURVE('',#53417,#43101,#53425,.T.); +#53425 = LINE('',#53426,#53427); +#53426 = CARTESIAN_POINT('',(6.4525,1.,0.841614)); +#53427 = VECTOR('',#53428,1.); +#53428 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53429 = ORIENTED_EDGE('',*,*,#43100,.F.); +#53430 = ORIENTED_EDGE('',*,*,#44132,.F.); +#53431 = ORIENTED_EDGE('',*,*,#53432,.F.); +#53432 = EDGE_CURVE('',#53301,#44125,#53433,.T.); +#53433 = LINE('',#53434,#53435); +#53434 = CARTESIAN_POINT('',(-10.,1.,8.E-02)); +#53435 = VECTOR('',#53436,1.); +#53436 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53437 = PLANE('',#53438); +#53438 = AXIS2_PLACEMENT_3D('',#53439,#53440,#53441); +#53439 = CARTESIAN_POINT('',(5.825,1.,0.31)); +#53440 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53441 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53442 = ADVANCED_FACE('',(#53443),#53469,.T.); +#53443 = FACE_BOUND('',#53444,.T.); +#53444 = EDGE_LOOP('',(#53445,#53446,#53454,#53462,#53468)); +#53445 = ORIENTED_EDGE('',*,*,#41075,.F.); +#53446 = ORIENTED_EDGE('',*,*,#53447,.T.); +#53447 = EDGE_CURVE('',#41068,#53448,#53450,.T.); +#53448 = VERTEX_POINT('',#53449); +#53449 = CARTESIAN_POINT('',(6.5025,-1.85,0.18)); +#53450 = LINE('',#53451,#53452); +#53451 = CARTESIAN_POINT('',(9.047363,0.694863,2.724863)); +#53452 = VECTOR('',#53453,1.); +#53453 = DIRECTION('',(0.57735026919,0.57735026919,0.57735026919)); +#53454 = ORIENTED_EDGE('',*,*,#53455,.T.); +#53455 = EDGE_CURVE('',#53448,#53456,#53458,.T.); +#53456 = VERTEX_POINT('',#53457); +#53457 = CARTESIAN_POINT('',(6.6025,-1.75,0.18)); +#53458 = LINE('',#53459,#53460); +#53459 = CARTESIAN_POINT('',(9.047363,0.694863,0.18)); +#53460 = VECTOR('',#53461,1.); +#53461 = DIRECTION('',(0.707106781187,0.707106781187,-2.12809267141E-16) + ); +#53462 = ORIENTED_EDGE('',*,*,#53463,.T.); +#53463 = EDGE_CURVE('',#53456,#40847,#53464,.T.); +#53464 = LINE('',#53465,#53466); +#53465 = CARTESIAN_POINT('',(6.6025,-1.75,0.615)); +#53466 = VECTOR('',#53467,1.); +#53467 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#53468 = ORIENTED_EDGE('',*,*,#40846,.T.); +#53469 = PLANE('',#53470); +#53470 = AXIS2_PLACEMENT_3D('',#53471,#53472,#53473); +#53471 = CARTESIAN_POINT('',(6.5275,-1.825,0.615)); +#53472 = DIRECTION('',(0.707106781187,-0.707106781187, + -1.429810390713E-30)); +#53473 = DIRECTION('',(0.707106781187,0.707106781187,-3.238315696035E-16 + )); +#53474 = ADVANCED_FACE('',(#53475),#53500,.T.); +#53475 = FACE_BOUND('',#53476,.T.); +#53476 = EDGE_LOOP('',(#53477,#53478,#53486,#53494)); +#53477 = ORIENTED_EDGE('',*,*,#53447,.F.); +#53478 = ORIENTED_EDGE('',*,*,#53479,.T.); +#53479 = EDGE_CURVE('',#41068,#53480,#53482,.T.); +#53480 = VERTEX_POINT('',#53481); +#53481 = CARTESIAN_POINT('',(6.4525,-0.8,0.13)); +#53482 = LINE('',#53483,#53484); +#53483 = CARTESIAN_POINT('',(6.4525,7.493623042064E-02,0.13)); +#53484 = VECTOR('',#53485,1.); +#53485 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53486 = ORIENTED_EDGE('',*,*,#53487,.F.); +#53487 = EDGE_CURVE('',#53488,#53480,#53490,.T.); +#53488 = VERTEX_POINT('',#53489); +#53489 = CARTESIAN_POINT('',(6.5025,-0.8,0.18)); +#53490 = LINE('',#53491,#53492); +#53491 = CARTESIAN_POINT('',(6.6025,-0.8,0.28)); +#53492 = VECTOR('',#53493,1.); +#53493 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#53494 = ORIENTED_EDGE('',*,*,#53495,.T.); +#53495 = EDGE_CURVE('',#53488,#53448,#53496,.T.); +#53496 = LINE('',#53497,#53498); +#53497 = CARTESIAN_POINT('',(6.5025,7.493623042064E-02,0.18)); +#53498 = VECTOR('',#53499,1.); +#53499 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#53500 = PLANE('',#53501); +#53501 = AXIS2_PLACEMENT_3D('',#53502,#53503,#53504); +#53502 = CARTESIAN_POINT('',(6.4775,-1.35,0.155)); +#53503 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#53504 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#53505 = ADVANCED_FACE('',(#53506),#53526,.T.); +#53506 = FACE_BOUND('',#53507,.T.); +#53507 = EDGE_LOOP('',(#53508,#53509,#53510,#53511,#53519,#53525)); +#53508 = ORIENTED_EDGE('',*,*,#41067,.F.); +#53509 = ORIENTED_EDGE('',*,*,#43108,.F.); +#53510 = ORIENTED_EDGE('',*,*,#53424,.F.); +#53511 = ORIENTED_EDGE('',*,*,#53512,.F.); +#53512 = EDGE_CURVE('',#53513,#53417,#53515,.T.); +#53513 = VERTEX_POINT('',#53514); +#53514 = CARTESIAN_POINT('',(6.4525,-0.8,8.E-02)); +#53515 = LINE('',#53516,#53517); +#53516 = CARTESIAN_POINT('',(6.4525,-1.9,8.E-02)); +#53517 = VECTOR('',#53518,1.); +#53518 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53519 = ORIENTED_EDGE('',*,*,#53520,.T.); +#53520 = EDGE_CURVE('',#53513,#53480,#53521,.T.); +#53521 = LINE('',#53522,#53523); +#53522 = CARTESIAN_POINT('',(6.4525,-0.8,0.402847335292)); +#53523 = VECTOR('',#53524,1.); +#53524 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#53525 = ORIENTED_EDGE('',*,*,#53479,.F.); +#53526 = PLANE('',#53527); +#53527 = AXIS2_PLACEMENT_3D('',#53528,#53529,#53530); +#53528 = CARTESIAN_POINT('',(6.4525,-1.9,3.E-02)); +#53529 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53530 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53531 = ADVANCED_FACE('',(#53532),#53550,.F.); +#53532 = FACE_BOUND('',#53533,.T.); +#53533 = EDGE_LOOP('',(#53534,#53542,#53543,#53544)); +#53534 = ORIENTED_EDGE('',*,*,#53535,.F.); +#53535 = EDGE_CURVE('',#53513,#53536,#53538,.T.); +#53536 = VERTEX_POINT('',#53537); +#53537 = CARTESIAN_POINT('',(7.,-0.8,8.E-02)); +#53538 = LINE('',#53539,#53540); +#53539 = CARTESIAN_POINT('',(6.6025,-0.8,8.E-02)); +#53540 = VECTOR('',#53541,1.); +#53541 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53542 = ORIENTED_EDGE('',*,*,#53512,.T.); +#53543 = ORIENTED_EDGE('',*,*,#53416,.T.); +#53544 = ORIENTED_EDGE('',*,*,#53545,.F.); +#53545 = EDGE_CURVE('',#53536,#53409,#53546,.T.); +#53546 = LINE('',#53547,#53548); +#53547 = CARTESIAN_POINT('',(7.,1.744235,8.E-02)); +#53548 = VECTOR('',#53549,1.); +#53549 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53550 = PLANE('',#53551); +#53551 = AXIS2_PLACEMENT_3D('',#53552,#53553,#53554); +#53552 = CARTESIAN_POINT('',(7.,1.,8.E-02)); +#53553 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#53554 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#53555 = ADVANCED_FACE('',(#53556),#53583,.F.); +#53556 = FACE_BOUND('',#53557,.T.); +#53557 = EDGE_LOOP('',(#53558,#53559,#53560,#53561,#53569,#53577)); +#53558 = ORIENTED_EDGE('',*,*,#53487,.T.); +#53559 = ORIENTED_EDGE('',*,*,#53520,.F.); +#53560 = ORIENTED_EDGE('',*,*,#53535,.T.); +#53561 = ORIENTED_EDGE('',*,*,#53562,.T.); +#53562 = EDGE_CURVE('',#53536,#53563,#53565,.T.); +#53563 = VERTEX_POINT('',#53564); +#53564 = CARTESIAN_POINT('',(7.,-0.8,0.18)); +#53565 = LINE('',#53566,#53567); +#53566 = CARTESIAN_POINT('',(7.,-0.8,1.258386)); +#53567 = VECTOR('',#53568,1.); +#53568 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#53569 = ORIENTED_EDGE('',*,*,#53570,.T.); +#53570 = EDGE_CURVE('',#53563,#53571,#53573,.T.); +#53571 = VERTEX_POINT('',#53572); +#53572 = CARTESIAN_POINT('',(6.6025,-0.8,0.18)); +#53573 = LINE('',#53574,#53575); +#53574 = CARTESIAN_POINT('',(7.,-0.8,0.18)); +#53575 = VECTOR('',#53576,1.); +#53576 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53577 = ORIENTED_EDGE('',*,*,#53578,.F.); +#53578 = EDGE_CURVE('',#53488,#53571,#53579,.T.); +#53579 = LINE('',#53580,#53581); +#53580 = CARTESIAN_POINT('',(6.6025,-0.8,0.18)); +#53581 = VECTOR('',#53582,1.); +#53582 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53583 = PLANE('',#53584); +#53584 = AXIS2_PLACEMENT_3D('',#53585,#53586,#53587); +#53585 = CARTESIAN_POINT('',(6.43367832869,-0.8,0.556369515365)); +#53586 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53587 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53588 = ADVANCED_FACE('',(#53589),#53614,.F.); +#53589 = FACE_BOUND('',#53590,.T.); +#53590 = EDGE_LOOP('',(#53591,#53599,#53607,#53613)); +#53591 = ORIENTED_EDGE('',*,*,#53592,.T.); +#53592 = EDGE_CURVE('',#53563,#53593,#53595,.T.); +#53593 = VERTEX_POINT('',#53594); +#53594 = CARTESIAN_POINT('',(7.,-1.,0.33)); +#53595 = LINE('',#53596,#53597); +#53596 = CARTESIAN_POINT('',(7.,-0.8,0.18)); +#53597 = VECTOR('',#53598,1.); +#53598 = DIRECTION('',(1.373900992974E-16,-0.8,0.6)); +#53599 = ORIENTED_EDGE('',*,*,#53600,.T.); +#53600 = EDGE_CURVE('',#53593,#53601,#53603,.T.); +#53601 = VERTEX_POINT('',#53602); +#53602 = CARTESIAN_POINT('',(6.6025,-1.,0.33)); +#53603 = LINE('',#53604,#53605); +#53604 = CARTESIAN_POINT('',(7.5,-1.,0.33)); +#53605 = VECTOR('',#53606,1.); +#53606 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53607 = ORIENTED_EDGE('',*,*,#53608,.F.); +#53608 = EDGE_CURVE('',#53571,#53601,#53609,.T.); +#53609 = LINE('',#53610,#53611); +#53610 = CARTESIAN_POINT('',(6.6025,0.694863,-0.94114725)); +#53611 = VECTOR('',#53612,1.); +#53612 = DIRECTION('',(1.373900992974E-16,-0.8,0.6)); +#53613 = ORIENTED_EDGE('',*,*,#53570,.F.); +#53614 = PLANE('',#53615); +#53615 = AXIS2_PLACEMENT_3D('',#53616,#53617,#53618); +#53616 = CARTESIAN_POINT('',(6.8,-0.8,0.18)); +#53617 = DIRECTION('',(1.831867990632E-16,0.6,0.8)); +#53618 = DIRECTION('',(1.373900992974E-16,-0.8,0.6)); +#53619 = ADVANCED_FACE('',(#53620),#53631,.T.); +#53620 = FACE_BOUND('',#53621,.T.); +#53621 = EDGE_LOOP('',(#53622,#53628,#53629,#53630)); +#53622 = ORIENTED_EDGE('',*,*,#53623,.F.); +#53623 = EDGE_CURVE('',#53456,#53571,#53624,.T.); +#53624 = LINE('',#53625,#53626); +#53625 = CARTESIAN_POINT('',(6.6025,0.694863,0.18)); +#53626 = VECTOR('',#53627,1.); +#53627 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53628 = ORIENTED_EDGE('',*,*,#53455,.F.); +#53629 = ORIENTED_EDGE('',*,*,#53495,.F.); +#53630 = ORIENTED_EDGE('',*,*,#53578,.T.); +#53631 = PLANE('',#53632); +#53632 = AXIS2_PLACEMENT_3D('',#53633,#53634,#53635); +#53633 = CARTESIAN_POINT('',(6.4525,-1.9,0.18)); +#53634 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53635 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53636 = ADVANCED_FACE('',(#53637),#53649,.T.); +#53637 = FACE_BOUND('',#53638,.T.); +#53638 = EDGE_LOOP('',(#53639,#53645,#53646,#53647,#53648)); +#53639 = ORIENTED_EDGE('',*,*,#53640,.F.); +#53640 = EDGE_CURVE('',#40855,#53601,#53641,.T.); +#53641 = LINE('',#53642,#53643); +#53642 = CARTESIAN_POINT('',(6.6025,-1.,0.841614)); +#53643 = VECTOR('',#53644,1.); +#53644 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53645 = ORIENTED_EDGE('',*,*,#40854,.F.); +#53646 = ORIENTED_EDGE('',*,*,#53463,.F.); +#53647 = ORIENTED_EDGE('',*,*,#53623,.T.); +#53648 = ORIENTED_EDGE('',*,*,#53608,.T.); +#53649 = PLANE('',#53650); +#53650 = AXIS2_PLACEMENT_3D('',#53651,#53652,#53653); +#53651 = CARTESIAN_POINT('',(6.6025,7.493623042064E-02,0.402847335292)); +#53652 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53653 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53654 = ADVANCED_FACE('',(#53655,#53689),#53700,.F.); +#53655 = FACE_BOUND('',#53656,.T.); +#53656 = EDGE_LOOP('',(#53657,#53667,#53675,#53683)); +#53657 = ORIENTED_EDGE('',*,*,#53658,.F.); +#53658 = EDGE_CURVE('',#53659,#53661,#53663,.T.); +#53659 = VERTEX_POINT('',#53660); +#53660 = CARTESIAN_POINT('',(6.765,-1.,0.82)); +#53661 = VERTEX_POINT('',#53662); +#53662 = CARTESIAN_POINT('',(6.615,-1.,0.82)); +#53663 = LINE('',#53664,#53665); +#53664 = CARTESIAN_POINT('',(7.5,-1.,0.82)); +#53665 = VECTOR('',#53666,1.); +#53666 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53667 = ORIENTED_EDGE('',*,*,#53668,.T.); +#53668 = EDGE_CURVE('',#53659,#53669,#53671,.T.); +#53669 = VERTEX_POINT('',#53670); +#53670 = CARTESIAN_POINT('',(6.765,-1.,0.51)); +#53671 = LINE('',#53672,#53673); +#53672 = CARTESIAN_POINT('',(6.765,-1.,0.841614)); +#53673 = VECTOR('',#53674,1.); +#53674 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53675 = ORIENTED_EDGE('',*,*,#53676,.F.); +#53676 = EDGE_CURVE('',#53677,#53669,#53679,.T.); +#53677 = VERTEX_POINT('',#53678); +#53678 = CARTESIAN_POINT('',(6.615,-1.,0.51)); +#53679 = LINE('',#53680,#53681); +#53680 = CARTESIAN_POINT('',(7.5,-1.,0.51)); +#53681 = VECTOR('',#53682,1.); +#53682 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#53683 = ORIENTED_EDGE('',*,*,#53684,.F.); +#53684 = EDGE_CURVE('',#53661,#53677,#53685,.T.); +#53685 = LINE('',#53686,#53687); +#53686 = CARTESIAN_POINT('',(6.615,-1.,0.841614)); +#53687 = VECTOR('',#53688,1.); +#53688 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53689 = FACE_BOUND('',#53690,.T.); +#53690 = EDGE_LOOP('',(#53691,#53692,#53693,#53699)); +#53691 = ORIENTED_EDGE('',*,*,#53640,.T.); +#53692 = ORIENTED_EDGE('',*,*,#53600,.F.); +#53693 = ORIENTED_EDGE('',*,*,#53694,.F.); +#53694 = EDGE_CURVE('',#40863,#53593,#53695,.T.); +#53695 = LINE('',#53696,#53697); +#53696 = CARTESIAN_POINT('',(7.,-1.,0.841614)); +#53697 = VECTOR('',#53698,1.); +#53698 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#53699 = ORIENTED_EDGE('',*,*,#40862,.T.); +#53700 = PLANE('',#53701); +#53701 = AXIS2_PLACEMENT_3D('',#53702,#53703,#53704); +#53702 = CARTESIAN_POINT('',(6.8,-1.,0.33)); +#53703 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#53704 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#53705 = ADVANCED_FACE('',(#53706),#53742,.T.); +#53706 = FACE_BOUND('',#53707,.T.); +#53707 = EDGE_LOOP('',(#53708,#53718,#53727,#53735)); +#53708 = ORIENTED_EDGE('',*,*,#53709,.T.); +#53709 = EDGE_CURVE('',#53710,#53712,#53714,.T.); +#53710 = VERTEX_POINT('',#53711); +#53711 = CARTESIAN_POINT('',(6.765,-1.147779969319,1.787644580805E-02)); +#53712 = VERTEX_POINT('',#53713); +#53713 = CARTESIAN_POINT('',(6.615,-1.147779969319,1.787644580805E-02)); +#53714 = LINE('',#53715,#53716); +#53715 = CARTESIAN_POINT('',(6.765,-1.147779969319,1.787644580805E-02)); +#53716 = VECTOR('',#53717,1.); +#53717 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53718 = ORIENTED_EDGE('',*,*,#53719,.F.); +#53719 = EDGE_CURVE('',#53720,#53712,#53722,.T.); +#53720 = VERTEX_POINT('',#53721); +#53721 = CARTESIAN_POINT('',(6.615,-1.1,6.782713613136E-02)); +#53722 = CIRCLE('',#53723,5.E-02); +#53723 = AXIS2_PLACEMENT_3D('',#53724,#53725,#53726); +#53724 = CARTESIAN_POINT('',(6.615,-1.15,6.782713613136E-02)); +#53725 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53726 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53727 = ORIENTED_EDGE('',*,*,#53728,.F.); +#53728 = EDGE_CURVE('',#53729,#53720,#53731,.T.); +#53729 = VERTEX_POINT('',#53730); +#53730 = CARTESIAN_POINT('',(6.765,-1.1,6.782713613136E-02)); +#53731 = LINE('',#53732,#53733); +#53732 = CARTESIAN_POINT('',(6.765,-1.1,6.782713613136E-02)); +#53733 = VECTOR('',#53734,1.); +#53734 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53735 = ORIENTED_EDGE('',*,*,#53736,.T.); +#53736 = EDGE_CURVE('',#53729,#53710,#53737,.T.); +#53737 = CIRCLE('',#53738,5.E-02); +#53738 = AXIS2_PLACEMENT_3D('',#53739,#53740,#53741); +#53739 = CARTESIAN_POINT('',(6.765,-1.15,6.782713613136E-02)); +#53740 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53741 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53742 = CYLINDRICAL_SURFACE('',#53743,5.E-02); +#53743 = AXIS2_PLACEMENT_3D('',#53744,#53745,#53746); +#53744 = CARTESIAN_POINT('',(6.765,-1.15,6.782713613136E-02)); +#53745 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53746 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53747 = ADVANCED_FACE('',(#53748),#53773,.F.); +#53748 = FACE_BOUND('',#53749,.T.); +#53749 = EDGE_LOOP('',(#53750,#53760,#53766,#53767)); +#53750 = ORIENTED_EDGE('',*,*,#53751,.T.); +#53751 = EDGE_CURVE('',#53752,#53754,#53756,.T.); +#53752 = VERTEX_POINT('',#53753); +#53753 = CARTESIAN_POINT('',(6.765,-1.55,-2.331468351713E-15)); +#53754 = VERTEX_POINT('',#53755); +#53755 = CARTESIAN_POINT('',(6.615,-1.55,-2.331468351713E-15)); +#53756 = LINE('',#53757,#53758); +#53757 = CARTESIAN_POINT('',(6.765,-1.55,-2.331468351713E-15)); +#53758 = VECTOR('',#53759,1.); +#53759 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53760 = ORIENTED_EDGE('',*,*,#53761,.T.); +#53761 = EDGE_CURVE('',#53754,#53712,#53762,.T.); +#53762 = LINE('',#53763,#53764); +#53763 = CARTESIAN_POINT('',(6.615,-1.55,-2.331468351713E-15)); +#53764 = VECTOR('',#53765,1.); +#53765 = DIRECTION('',(1.016700785703E-17,0.999013806466, + 4.440061362072E-02)); +#53766 = ORIENTED_EDGE('',*,*,#53709,.F.); +#53767 = ORIENTED_EDGE('',*,*,#53768,.F.); +#53768 = EDGE_CURVE('',#53752,#53710,#53769,.T.); +#53769 = LINE('',#53770,#53771); +#53770 = CARTESIAN_POINT('',(6.765,-1.55,-2.331468351713E-15)); +#53771 = VECTOR('',#53772,1.); +#53772 = DIRECTION('',(1.016700785703E-17,0.999013806466, + 4.440061362072E-02)); +#53773 = PLANE('',#53774); +#53774 = AXIS2_PLACEMENT_3D('',#53775,#53776,#53777); +#53775 = CARTESIAN_POINT('',(6.765,-1.147779969319,1.787644580805E-02)); +#53776 = DIRECTION('',(2.28757676783E-16,-4.440061362072E-02, + 0.999013806466)); +#53777 = DIRECTION('',(1.016700785703E-17,0.999013806466, + 4.440061362072E-02)); +#53778 = ADVANCED_FACE('',(#53779),#53804,.F.); +#53779 = FACE_BOUND('',#53780,.T.); +#53780 = EDGE_LOOP('',(#53781,#53791,#53797,#53798)); +#53781 = ORIENTED_EDGE('',*,*,#53782,.T.); +#53782 = EDGE_CURVE('',#53783,#53785,#53787,.T.); +#53783 = VERTEX_POINT('',#53784); +#53784 = CARTESIAN_POINT('',(6.765,-1.6,5.E-02)); +#53785 = VERTEX_POINT('',#53786); +#53786 = CARTESIAN_POINT('',(6.615,-1.6,5.E-02)); +#53787 = LINE('',#53788,#53789); +#53788 = CARTESIAN_POINT('',(6.765,-1.6,5.E-02)); +#53789 = VECTOR('',#53790,1.); +#53790 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53791 = ORIENTED_EDGE('',*,*,#53792,.T.); +#53792 = EDGE_CURVE('',#53785,#53754,#53793,.T.); +#53793 = LINE('',#53794,#53795); +#53794 = CARTESIAN_POINT('',(6.615,-1.6,5.E-02)); +#53795 = VECTOR('',#53796,1.); +#53796 = DIRECTION('',(-1.619157848018E-16,0.707106781187, + -0.707106781187)); +#53797 = ORIENTED_EDGE('',*,*,#53751,.F.); +#53798 = ORIENTED_EDGE('',*,*,#53799,.F.); +#53799 = EDGE_CURVE('',#53783,#53752,#53800,.T.); +#53800 = LINE('',#53801,#53802); +#53801 = CARTESIAN_POINT('',(6.765,-1.6,5.E-02)); +#53802 = VECTOR('',#53803,1.); +#53803 = DIRECTION('',(-1.619157848018E-16,0.707106781187, + -0.707106781187)); +#53804 = PLANE('',#53805); +#53805 = AXIS2_PLACEMENT_3D('',#53806,#53807,#53808); +#53806 = CARTESIAN_POINT('',(6.765,-1.55,-2.331468351713E-15)); +#53807 = DIRECTION('',(1.619157848018E-16,0.707106781187,0.707106781187) + ); +#53808 = DIRECTION('',(-1.619157848018E-16,0.707106781187, + -0.707106781187)); +#53809 = ADVANCED_FACE('',(#53810),#53835,.F.); +#53810 = FACE_BOUND('',#53811,.T.); +#53811 = EDGE_LOOP('',(#53812,#53822,#53828,#53829)); +#53812 = ORIENTED_EDGE('',*,*,#53813,.T.); +#53813 = EDGE_CURVE('',#53814,#53816,#53818,.T.); +#53814 = VERTEX_POINT('',#53815); +#53815 = CARTESIAN_POINT('',(6.765,-1.6,0.12)); +#53816 = VERTEX_POINT('',#53817); +#53817 = CARTESIAN_POINT('',(6.615,-1.6,0.12)); +#53818 = LINE('',#53819,#53820); +#53819 = CARTESIAN_POINT('',(6.765,-1.6,0.12)); +#53820 = VECTOR('',#53821,1.); +#53821 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53822 = ORIENTED_EDGE('',*,*,#53823,.F.); +#53823 = EDGE_CURVE('',#53785,#53816,#53824,.T.); +#53824 = LINE('',#53825,#53826); +#53825 = CARTESIAN_POINT('',(6.615,-1.6,5.E-02)); +#53826 = VECTOR('',#53827,1.); +#53827 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#53828 = ORIENTED_EDGE('',*,*,#53782,.F.); +#53829 = ORIENTED_EDGE('',*,*,#53830,.T.); +#53830 = EDGE_CURVE('',#53783,#53814,#53831,.T.); +#53831 = LINE('',#53832,#53833); +#53832 = CARTESIAN_POINT('',(6.765,-1.6,5.E-02)); +#53833 = VECTOR('',#53834,1.); +#53834 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#53835 = PLANE('',#53836); +#53836 = AXIS2_PLACEMENT_3D('',#53837,#53838,#53839); +#53837 = CARTESIAN_POINT('',(6.765,-1.6,5.E-02)); +#53838 = DIRECTION('',(5.243344273594E-32,1.,-1.200639317332E-47)); +#53839 = DIRECTION('',(-2.289834988289E-16,2.917038411497E-62,-1.)); +#53840 = ADVANCED_FACE('',(#53841),#53868,.F.); +#53841 = FACE_BOUND('',#53842,.F.); +#53842 = EDGE_LOOP('',(#53843,#53852,#53853,#53862)); +#53843 = ORIENTED_EDGE('',*,*,#53844,.T.); +#53844 = EDGE_CURVE('',#53845,#53814,#53847,.T.); +#53845 = VERTEX_POINT('',#53846); +#53846 = CARTESIAN_POINT('',(6.765,-1.65,0.17)); +#53847 = CIRCLE('',#53848,5.E-02); +#53848 = AXIS2_PLACEMENT_3D('',#53849,#53850,#53851); +#53849 = CARTESIAN_POINT('',(6.765,-1.65,0.12)); +#53850 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53851 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53852 = ORIENTED_EDGE('',*,*,#53813,.T.); +#53853 = ORIENTED_EDGE('',*,*,#53854,.F.); +#53854 = EDGE_CURVE('',#53855,#53816,#53857,.T.); +#53855 = VERTEX_POINT('',#53856); +#53856 = CARTESIAN_POINT('',(6.615,-1.65,0.17)); +#53857 = CIRCLE('',#53858,5.E-02); +#53858 = AXIS2_PLACEMENT_3D('',#53859,#53860,#53861); +#53859 = CARTESIAN_POINT('',(6.615,-1.65,0.12)); +#53860 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53861 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53862 = ORIENTED_EDGE('',*,*,#53863,.F.); +#53863 = EDGE_CURVE('',#53845,#53855,#53864,.T.); +#53864 = LINE('',#53865,#53866); +#53865 = CARTESIAN_POINT('',(6.765,-1.65,0.17)); +#53866 = VECTOR('',#53867,1.); +#53867 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53868 = CYLINDRICAL_SURFACE('',#53869,5.E-02); +#53869 = AXIS2_PLACEMENT_3D('',#53870,#53871,#53872); +#53870 = CARTESIAN_POINT('',(6.765,-1.65,0.12)); +#53871 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53872 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53873 = ADVANCED_FACE('',(#53874),#53899,.F.); +#53874 = FACE_BOUND('',#53875,.T.); +#53875 = EDGE_LOOP('',(#53876,#53886,#53892,#53893)); +#53876 = ORIENTED_EDGE('',*,*,#53877,.T.); +#53877 = EDGE_CURVE('',#53878,#53880,#53882,.T.); +#53878 = VERTEX_POINT('',#53879); +#53879 = CARTESIAN_POINT('',(6.765,-1.825,0.17)); +#53880 = VERTEX_POINT('',#53881); +#53881 = CARTESIAN_POINT('',(6.615,-1.825,0.17)); +#53882 = LINE('',#53883,#53884); +#53883 = CARTESIAN_POINT('',(6.765,-1.825,0.17)); +#53884 = VECTOR('',#53885,1.); +#53885 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53886 = ORIENTED_EDGE('',*,*,#53887,.F.); +#53887 = EDGE_CURVE('',#53855,#53880,#53888,.T.); +#53888 = LINE('',#53889,#53890); +#53889 = CARTESIAN_POINT('',(6.615,-1.65,0.17)); +#53890 = VECTOR('',#53891,1.); +#53891 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53892 = ORIENTED_EDGE('',*,*,#53863,.F.); +#53893 = ORIENTED_EDGE('',*,*,#53894,.T.); +#53894 = EDGE_CURVE('',#53845,#53878,#53895,.T.); +#53895 = LINE('',#53896,#53897); +#53896 = CARTESIAN_POINT('',(6.765,-1.65,0.17)); +#53897 = VECTOR('',#53898,1.); +#53898 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53899 = PLANE('',#53900); +#53900 = AXIS2_PLACEMENT_3D('',#53901,#53902,#53903); +#53901 = CARTESIAN_POINT('',(6.765,-1.65,0.17)); +#53902 = DIRECTION('',(2.289834988289E-16,-1.200639317332E-47,1.)); +#53903 = DIRECTION('',(5.243344273594E-32,1.,-2.917038411497E-62)); +#53904 = ADVANCED_FACE('',(#53905),#53930,.F.); +#53905 = FACE_BOUND('',#53906,.T.); +#53906 = EDGE_LOOP('',(#53907,#53917,#53923,#53924)); +#53907 = ORIENTED_EDGE('',*,*,#53908,.T.); +#53908 = EDGE_CURVE('',#53909,#53911,#53913,.T.); +#53909 = VERTEX_POINT('',#53910); +#53910 = CARTESIAN_POINT('',(6.765,-1.825,0.37)); +#53911 = VERTEX_POINT('',#53912); +#53912 = CARTESIAN_POINT('',(6.615,-1.825,0.37)); +#53913 = LINE('',#53914,#53915); +#53914 = CARTESIAN_POINT('',(6.765,-1.825,0.37)); +#53915 = VECTOR('',#53916,1.); +#53916 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53917 = ORIENTED_EDGE('',*,*,#53918,.T.); +#53918 = EDGE_CURVE('',#53911,#53880,#53919,.T.); +#53919 = LINE('',#53920,#53921); +#53920 = CARTESIAN_POINT('',(6.615,-1.825,0.37)); +#53921 = VECTOR('',#53922,1.); +#53922 = DIRECTION('',(-2.289834988289E-16,0.,-1.)); +#53923 = ORIENTED_EDGE('',*,*,#53877,.F.); +#53924 = ORIENTED_EDGE('',*,*,#53925,.F.); +#53925 = EDGE_CURVE('',#53909,#53878,#53926,.T.); +#53926 = LINE('',#53927,#53928); +#53927 = CARTESIAN_POINT('',(6.765,-1.825,0.37)); +#53928 = VECTOR('',#53929,1.); +#53929 = DIRECTION('',(-2.289834988289E-16,0.,-1.)); +#53930 = PLANE('',#53931); +#53931 = AXIS2_PLACEMENT_3D('',#53932,#53933,#53934); +#53932 = CARTESIAN_POINT('',(6.765,-1.825,0.17)); +#53933 = DIRECTION('',(5.243344273594E-32,1.,-1.200639317332E-47)); +#53934 = DIRECTION('',(-2.289834988289E-16,2.917038411497E-62,-1.)); +#53935 = ADVANCED_FACE('',(#53936),#53961,.F.); +#53936 = FACE_BOUND('',#53937,.T.); +#53937 = EDGE_LOOP('',(#53938,#53948,#53954,#53955)); +#53938 = ORIENTED_EDGE('',*,*,#53939,.T.); +#53939 = EDGE_CURVE('',#53940,#53942,#53944,.T.); +#53940 = VERTEX_POINT('',#53941); +#53941 = CARTESIAN_POINT('',(6.765,-1.8,0.37)); +#53942 = VERTEX_POINT('',#53943); +#53943 = CARTESIAN_POINT('',(6.615,-1.8,0.37)); +#53944 = LINE('',#53945,#53946); +#53945 = CARTESIAN_POINT('',(6.765,-1.8,0.37)); +#53946 = VECTOR('',#53947,1.); +#53947 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53948 = ORIENTED_EDGE('',*,*,#53949,.T.); +#53949 = EDGE_CURVE('',#53942,#53911,#53950,.T.); +#53950 = LINE('',#53951,#53952); +#53951 = CARTESIAN_POINT('',(6.615,-1.8,0.37)); +#53952 = VECTOR('',#53953,1.); +#53953 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53954 = ORIENTED_EDGE('',*,*,#53908,.F.); +#53955 = ORIENTED_EDGE('',*,*,#53956,.F.); +#53956 = EDGE_CURVE('',#53940,#53909,#53957,.T.); +#53957 = LINE('',#53958,#53959); +#53958 = CARTESIAN_POINT('',(6.765,-1.8,0.37)); +#53959 = VECTOR('',#53960,1.); +#53960 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53961 = PLANE('',#53962); +#53962 = AXIS2_PLACEMENT_3D('',#53963,#53964,#53965); +#53963 = CARTESIAN_POINT('',(6.765,-1.825,0.37)); +#53964 = DIRECTION('',(-2.289834988289E-16,1.200639317332E-47,-1.)); +#53965 = DIRECTION('',(-5.243344273594E-32,-1.,2.917038411497E-62)); +#53966 = ADVANCED_FACE('',(#53967),#53994,.F.); +#53967 = FACE_BOUND('',#53968,.F.); +#53968 = EDGE_LOOP('',(#53969,#53978,#53979,#53988)); +#53969 = ORIENTED_EDGE('',*,*,#53970,.T.); +#53970 = EDGE_CURVE('',#53971,#53940,#53973,.T.); +#53971 = VERTEX_POINT('',#53972); +#53972 = CARTESIAN_POINT('',(6.765,-1.75,0.42)); +#53973 = CIRCLE('',#53974,5.E-02); +#53974 = AXIS2_PLACEMENT_3D('',#53975,#53976,#53977); +#53975 = CARTESIAN_POINT('',(6.765,-1.8,0.42)); +#53976 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53977 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53978 = ORIENTED_EDGE('',*,*,#53939,.T.); +#53979 = ORIENTED_EDGE('',*,*,#53980,.F.); +#53980 = EDGE_CURVE('',#53981,#53942,#53983,.T.); +#53981 = VERTEX_POINT('',#53982); +#53982 = CARTESIAN_POINT('',(6.615,-1.75,0.42)); +#53983 = CIRCLE('',#53984,5.E-02); +#53984 = AXIS2_PLACEMENT_3D('',#53985,#53986,#53987); +#53985 = CARTESIAN_POINT('',(6.615,-1.8,0.42)); +#53986 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53987 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53988 = ORIENTED_EDGE('',*,*,#53989,.F.); +#53989 = EDGE_CURVE('',#53971,#53981,#53990,.T.); +#53990 = LINE('',#53991,#53992); +#53991 = CARTESIAN_POINT('',(6.765,-1.75,0.42)); +#53992 = VECTOR('',#53993,1.); +#53993 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53994 = CYLINDRICAL_SURFACE('',#53995,5.E-02); +#53995 = AXIS2_PLACEMENT_3D('',#53996,#53997,#53998); +#53996 = CARTESIAN_POINT('',(6.765,-1.8,0.42)); +#53997 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#53998 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#53999 = ADVANCED_FACE('',(#54000),#54025,.F.); +#54000 = FACE_BOUND('',#54001,.T.); +#54001 = EDGE_LOOP('',(#54002,#54012,#54018,#54019)); +#54002 = ORIENTED_EDGE('',*,*,#54003,.T.); +#54003 = EDGE_CURVE('',#54004,#54006,#54008,.T.); +#54004 = VERTEX_POINT('',#54005); +#54005 = CARTESIAN_POINT('',(6.765,-1.75,0.47)); +#54006 = VERTEX_POINT('',#54007); +#54007 = CARTESIAN_POINT('',(6.615,-1.75,0.47)); +#54008 = LINE('',#54009,#54010); +#54009 = CARTESIAN_POINT('',(6.765,-1.75,0.47)); +#54010 = VECTOR('',#54011,1.); +#54011 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54012 = ORIENTED_EDGE('',*,*,#54013,.F.); +#54013 = EDGE_CURVE('',#53981,#54006,#54014,.T.); +#54014 = LINE('',#54015,#54016); +#54015 = CARTESIAN_POINT('',(6.615,-1.75,0.42)); +#54016 = VECTOR('',#54017,1.); +#54017 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#54018 = ORIENTED_EDGE('',*,*,#53989,.F.); +#54019 = ORIENTED_EDGE('',*,*,#54020,.T.); +#54020 = EDGE_CURVE('',#53971,#54004,#54021,.T.); +#54021 = LINE('',#54022,#54023); +#54022 = CARTESIAN_POINT('',(6.765,-1.75,0.42)); +#54023 = VECTOR('',#54024,1.); +#54024 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#54025 = PLANE('',#54026); +#54026 = AXIS2_PLACEMENT_3D('',#54027,#54028,#54029); +#54027 = CARTESIAN_POINT('',(6.765,-1.75,0.42)); +#54028 = DIRECTION('',(5.243344273594E-32,1.,-1.200639317332E-47)); +#54029 = DIRECTION('',(-2.289834988289E-16,2.917038411497E-62,-1.)); +#54030 = ADVANCED_FACE('',(#54031),#54058,.F.); +#54031 = FACE_BOUND('',#54032,.F.); +#54032 = EDGE_LOOP('',(#54033,#54042,#54043,#54052)); +#54033 = ORIENTED_EDGE('',*,*,#54034,.T.); +#54034 = EDGE_CURVE('',#54035,#54004,#54037,.T.); +#54035 = VERTEX_POINT('',#54036); +#54036 = CARTESIAN_POINT('',(6.765,-1.8,0.52)); +#54037 = CIRCLE('',#54038,5.E-02); +#54038 = AXIS2_PLACEMENT_3D('',#54039,#54040,#54041); +#54039 = CARTESIAN_POINT('',(6.765,-1.8,0.47)); +#54040 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54041 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#54042 = ORIENTED_EDGE('',*,*,#54003,.T.); +#54043 = ORIENTED_EDGE('',*,*,#54044,.F.); +#54044 = EDGE_CURVE('',#54045,#54006,#54047,.T.); +#54045 = VERTEX_POINT('',#54046); +#54046 = CARTESIAN_POINT('',(6.615,-1.8,0.52)); +#54047 = CIRCLE('',#54048,5.E-02); +#54048 = AXIS2_PLACEMENT_3D('',#54049,#54050,#54051); +#54049 = CARTESIAN_POINT('',(6.615,-1.8,0.47)); +#54050 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54051 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#54052 = ORIENTED_EDGE('',*,*,#54053,.F.); +#54053 = EDGE_CURVE('',#54035,#54045,#54054,.T.); +#54054 = LINE('',#54055,#54056); +#54055 = CARTESIAN_POINT('',(6.765,-1.8,0.52)); +#54056 = VECTOR('',#54057,1.); +#54057 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54058 = CYLINDRICAL_SURFACE('',#54059,5.E-02); +#54059 = AXIS2_PLACEMENT_3D('',#54060,#54061,#54062); +#54060 = CARTESIAN_POINT('',(6.765,-1.8,0.47)); +#54061 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54062 = DIRECTION('',(-5.243344273594E-32,-1.,0.)); +#54063 = ADVANCED_FACE('',(#54064),#54089,.F.); +#54064 = FACE_BOUND('',#54065,.T.); +#54065 = EDGE_LOOP('',(#54066,#54076,#54082,#54083)); +#54066 = ORIENTED_EDGE('',*,*,#54067,.T.); +#54067 = EDGE_CURVE('',#54068,#54070,#54072,.T.); +#54068 = VERTEX_POINT('',#54069); +#54069 = CARTESIAN_POINT('',(6.765,-1.9,0.52)); +#54070 = VERTEX_POINT('',#54071); +#54071 = CARTESIAN_POINT('',(6.615,-1.9,0.52)); +#54072 = LINE('',#54073,#54074); +#54073 = CARTESIAN_POINT('',(6.765,-1.9,0.52)); +#54074 = VECTOR('',#54075,1.); +#54075 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54076 = ORIENTED_EDGE('',*,*,#54077,.T.); +#54077 = EDGE_CURVE('',#54070,#54045,#54078,.T.); +#54078 = LINE('',#54079,#54080); +#54079 = CARTESIAN_POINT('',(6.615,-1.9,0.52)); +#54080 = VECTOR('',#54081,1.); +#54081 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#54082 = ORIENTED_EDGE('',*,*,#54053,.F.); +#54083 = ORIENTED_EDGE('',*,*,#54084,.F.); +#54084 = EDGE_CURVE('',#54068,#54035,#54085,.T.); +#54085 = LINE('',#54086,#54087); +#54086 = CARTESIAN_POINT('',(6.765,-1.9,0.52)); +#54087 = VECTOR('',#54088,1.); +#54088 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#54089 = PLANE('',#54090); +#54090 = AXIS2_PLACEMENT_3D('',#54091,#54092,#54093); +#54091 = CARTESIAN_POINT('',(6.765,-1.8,0.52)); +#54092 = DIRECTION('',(2.289834988289E-16,-1.200639317332E-47,1.)); +#54093 = DIRECTION('',(5.243344273594E-32,1.,-2.917038411497E-62)); +#54094 = ADVANCED_FACE('',(#54095),#54120,.F.); +#54095 = FACE_BOUND('',#54096,.T.); +#54096 = EDGE_LOOP('',(#54097,#54107,#54113,#54114)); +#54097 = ORIENTED_EDGE('',*,*,#54098,.T.); +#54098 = EDGE_CURVE('',#54099,#54101,#54103,.T.); +#54099 = VERTEX_POINT('',#54100); +#54100 = CARTESIAN_POINT('',(6.765,-1.9,0.82)); +#54101 = VERTEX_POINT('',#54102); +#54102 = CARTESIAN_POINT('',(6.615,-1.9,0.82)); +#54103 = LINE('',#54104,#54105); +#54104 = CARTESIAN_POINT('',(6.765,-1.9,0.82)); +#54105 = VECTOR('',#54106,1.); +#54106 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54107 = ORIENTED_EDGE('',*,*,#54108,.F.); +#54108 = EDGE_CURVE('',#54070,#54101,#54109,.T.); +#54109 = LINE('',#54110,#54111); +#54110 = CARTESIAN_POINT('',(6.615,-1.9,0.52)); +#54111 = VECTOR('',#54112,1.); +#54112 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#54113 = ORIENTED_EDGE('',*,*,#54067,.F.); +#54114 = ORIENTED_EDGE('',*,*,#54115,.T.); +#54115 = EDGE_CURVE('',#54068,#54099,#54116,.T.); +#54116 = LINE('',#54117,#54118); +#54117 = CARTESIAN_POINT('',(6.765,-1.9,0.52)); +#54118 = VECTOR('',#54119,1.); +#54119 = DIRECTION('',(2.289834988289E-16,0.,1.)); +#54120 = PLANE('',#54121); +#54121 = AXIS2_PLACEMENT_3D('',#54122,#54123,#54124); +#54122 = CARTESIAN_POINT('',(6.765,-1.9,0.52)); +#54123 = DIRECTION('',(5.243344273594E-32,1.,-1.200639317332E-47)); +#54124 = DIRECTION('',(-2.289834988289E-16,2.917038411497E-62,-1.)); +#54125 = ADVANCED_FACE('',(#54126),#54151,.F.); +#54126 = FACE_BOUND('',#54127,.T.); +#54127 = EDGE_LOOP('',(#54128,#54129,#54137,#54145)); +#54128 = ORIENTED_EDGE('',*,*,#53728,.T.); +#54129 = ORIENTED_EDGE('',*,*,#54130,.F.); +#54130 = EDGE_CURVE('',#54131,#53720,#54133,.T.); +#54131 = VERTEX_POINT('',#54132); +#54132 = CARTESIAN_POINT('',(6.615,-1.1,0.46)); +#54133 = LINE('',#54134,#54135); +#54134 = CARTESIAN_POINT('',(6.615,-1.1,0.841614)); +#54135 = VECTOR('',#54136,1.); +#54136 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#54137 = ORIENTED_EDGE('',*,*,#54138,.F.); +#54138 = EDGE_CURVE('',#54139,#54131,#54141,.T.); +#54139 = VERTEX_POINT('',#54140); +#54140 = CARTESIAN_POINT('',(6.765,-1.1,0.46)); +#54141 = LINE('',#54142,#54143); +#54142 = CARTESIAN_POINT('',(6.765,-1.1,0.46)); +#54143 = VECTOR('',#54144,1.); +#54144 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54145 = ORIENTED_EDGE('',*,*,#54146,.T.); +#54146 = EDGE_CURVE('',#54139,#53729,#54147,.T.); +#54147 = LINE('',#54148,#54149); +#54148 = CARTESIAN_POINT('',(6.765,-1.1,0.841614)); +#54149 = VECTOR('',#54150,1.); +#54150 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#54151 = PLANE('',#54152); +#54152 = AXIS2_PLACEMENT_3D('',#54153,#54154,#54155); +#54153 = CARTESIAN_POINT('',(6.765,-1.1,0.46)); +#54154 = DIRECTION('',(-5.243344273594E-32,-1.,1.200639317332E-47)); +#54155 = DIRECTION('',(2.289834988289E-16,-2.917038411497E-62,1.)); +#54156 = ADVANCED_FACE('',(#54157),#54173,.T.); +#54157 = FACE_BOUND('',#54158,.T.); +#54158 = EDGE_LOOP('',(#54159,#54165,#54166,#54172)); +#54159 = ORIENTED_EDGE('',*,*,#54160,.T.); +#54160 = EDGE_CURVE('',#54099,#53659,#54161,.T.); +#54161 = LINE('',#54162,#54163); +#54162 = CARTESIAN_POINT('',(6.765,0.694863,0.82)); +#54163 = VECTOR('',#54164,1.); +#54164 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#54165 = ORIENTED_EDGE('',*,*,#53658,.T.); +#54166 = ORIENTED_EDGE('',*,*,#54167,.F.); +#54167 = EDGE_CURVE('',#54101,#53661,#54168,.T.); +#54168 = LINE('',#54169,#54170); +#54169 = CARTESIAN_POINT('',(6.615,0.694863,0.82)); +#54170 = VECTOR('',#54171,1.); +#54171 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#54172 = ORIENTED_EDGE('',*,*,#54098,.F.); +#54173 = PLANE('',#54174); +#54174 = AXIS2_PLACEMENT_3D('',#54175,#54176,#54177); +#54175 = CARTESIAN_POINT('',(6.765,0.8,0.82)); +#54176 = DIRECTION('',(2.289834988289E-16,2.289834988289E-16,1.)); +#54177 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#54178 = ADVANCED_FACE('',(#54179),#54212,.T.); +#54179 = FACE_BOUND('',#54180,.T.); +#54180 = EDGE_LOOP('',(#54181,#54182,#54191,#54197,#54198,#54199,#54200, + #54201,#54202,#54203,#54204,#54205,#54206,#54207,#54208,#54209, + #54210,#54211)); +#54181 = ORIENTED_EDGE('',*,*,#54146,.F.); +#54182 = ORIENTED_EDGE('',*,*,#54183,.T.); +#54183 = EDGE_CURVE('',#54139,#54184,#54186,.T.); +#54184 = VERTEX_POINT('',#54185); +#54185 = CARTESIAN_POINT('',(6.765,-1.05,0.51)); +#54186 = CIRCLE('',#54187,5.E-02); +#54187 = AXIS2_PLACEMENT_3D('',#54188,#54189,#54190); +#54188 = CARTESIAN_POINT('',(6.765,-1.05,0.46)); +#54189 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54190 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#54191 = ORIENTED_EDGE('',*,*,#54192,.F.); +#54192 = EDGE_CURVE('',#53669,#54184,#54193,.T.); +#54193 = LINE('',#54194,#54195); +#54194 = CARTESIAN_POINT('',(6.765,0.694863,0.51)); +#54195 = VECTOR('',#54196,1.); +#54196 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#54197 = ORIENTED_EDGE('',*,*,#53668,.F.); +#54198 = ORIENTED_EDGE('',*,*,#54160,.F.); +#54199 = ORIENTED_EDGE('',*,*,#54115,.F.); +#54200 = ORIENTED_EDGE('',*,*,#54084,.T.); +#54201 = ORIENTED_EDGE('',*,*,#54034,.T.); +#54202 = ORIENTED_EDGE('',*,*,#54020,.F.); +#54203 = ORIENTED_EDGE('',*,*,#53970,.T.); +#54204 = ORIENTED_EDGE('',*,*,#53956,.T.); +#54205 = ORIENTED_EDGE('',*,*,#53925,.T.); +#54206 = ORIENTED_EDGE('',*,*,#53894,.F.); +#54207 = ORIENTED_EDGE('',*,*,#53844,.T.); +#54208 = ORIENTED_EDGE('',*,*,#53830,.F.); +#54209 = ORIENTED_EDGE('',*,*,#53799,.T.); +#54210 = ORIENTED_EDGE('',*,*,#53768,.T.); +#54211 = ORIENTED_EDGE('',*,*,#53736,.F.); +#54212 = PLANE('',#54213); +#54213 = AXIS2_PLACEMENT_3D('',#54214,#54215,#54216); +#54214 = CARTESIAN_POINT('',(6.765,-1.228897383693,0.397842849918)); +#54215 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#54216 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#54217 = ADVANCED_FACE('',(#54218),#54251,.F.); +#54218 = FACE_BOUND('',#54219,.T.); +#54219 = EDGE_LOOP('',(#54220,#54221,#54222,#54223,#54224,#54225,#54226, + #54227,#54228,#54229,#54230,#54231,#54232,#54233,#54234,#54235, + #54236,#54244)); +#54220 = ORIENTED_EDGE('',*,*,#54130,.T.); +#54221 = ORIENTED_EDGE('',*,*,#53719,.T.); +#54222 = ORIENTED_EDGE('',*,*,#53761,.F.); +#54223 = ORIENTED_EDGE('',*,*,#53792,.F.); +#54224 = ORIENTED_EDGE('',*,*,#53823,.T.); +#54225 = ORIENTED_EDGE('',*,*,#53854,.F.); +#54226 = ORIENTED_EDGE('',*,*,#53887,.T.); +#54227 = ORIENTED_EDGE('',*,*,#53918,.F.); +#54228 = ORIENTED_EDGE('',*,*,#53949,.F.); +#54229 = ORIENTED_EDGE('',*,*,#53980,.F.); +#54230 = ORIENTED_EDGE('',*,*,#54013,.T.); +#54231 = ORIENTED_EDGE('',*,*,#54044,.F.); +#54232 = ORIENTED_EDGE('',*,*,#54077,.F.); +#54233 = ORIENTED_EDGE('',*,*,#54108,.T.); +#54234 = ORIENTED_EDGE('',*,*,#54167,.T.); +#54235 = ORIENTED_EDGE('',*,*,#53684,.T.); +#54236 = ORIENTED_EDGE('',*,*,#54237,.T.); +#54237 = EDGE_CURVE('',#53677,#54238,#54240,.T.); +#54238 = VERTEX_POINT('',#54239); +#54239 = CARTESIAN_POINT('',(6.615,-1.05,0.51)); +#54240 = LINE('',#54241,#54242); +#54241 = CARTESIAN_POINT('',(6.615,0.694863,0.51)); +#54242 = VECTOR('',#54243,1.); +#54243 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#54244 = ORIENTED_EDGE('',*,*,#54245,.F.); +#54245 = EDGE_CURVE('',#54131,#54238,#54246,.T.); +#54246 = CIRCLE('',#54247,5.E-02); +#54247 = AXIS2_PLACEMENT_3D('',#54248,#54249,#54250); +#54248 = CARTESIAN_POINT('',(6.615,-1.05,0.46)); +#54249 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54250 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#54251 = PLANE('',#54252); +#54252 = AXIS2_PLACEMENT_3D('',#54253,#54254,#54255); +#54253 = CARTESIAN_POINT('',(6.615,-1.464196,0.375201)); +#54254 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#54255 = DIRECTION('',(5.243344273594E-32,1.,0.)); +#54256 = ADVANCED_FACE('',(#54257),#54268,.T.); +#54257 = FACE_BOUND('',#54258,.T.); +#54258 = EDGE_LOOP('',(#54259,#54265,#54266,#54267)); +#54259 = ORIENTED_EDGE('',*,*,#54260,.T.); +#54260 = EDGE_CURVE('',#54184,#54238,#54261,.T.); +#54261 = LINE('',#54262,#54263); +#54262 = CARTESIAN_POINT('',(6.765,-1.05,0.51)); +#54263 = VECTOR('',#54264,1.); +#54264 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54265 = ORIENTED_EDGE('',*,*,#54237,.F.); +#54266 = ORIENTED_EDGE('',*,*,#53676,.T.); +#54267 = ORIENTED_EDGE('',*,*,#54192,.T.); +#54268 = PLANE('',#54269); +#54269 = AXIS2_PLACEMENT_3D('',#54270,#54271,#54272); +#54270 = CARTESIAN_POINT('',(6.765,-1.1,0.51)); +#54271 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#54272 = DIRECTION('',(0.,1.,-2.289834988289E-16)); +#54273 = ADVANCED_FACE('',(#54274),#54280,.F.); +#54274 = FACE_BOUND('',#54275,.F.); +#54275 = EDGE_LOOP('',(#54276,#54277,#54278,#54279)); +#54276 = ORIENTED_EDGE('',*,*,#54245,.F.); +#54277 = ORIENTED_EDGE('',*,*,#54138,.F.); +#54278 = ORIENTED_EDGE('',*,*,#54183,.T.); +#54279 = ORIENTED_EDGE('',*,*,#54260,.T.); +#54280 = CYLINDRICAL_SURFACE('',#54281,5.E-02); +#54281 = AXIS2_PLACEMENT_3D('',#54282,#54283,#54284); +#54282 = CARTESIAN_POINT('',(6.765,-1.05,0.46)); +#54283 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54284 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#54285 = ADVANCED_FACE('',(#54286),#54294,.T.); +#54286 = FACE_BOUND('',#54287,.T.); +#54287 = EDGE_LOOP('',(#54288,#54289,#54290,#54291,#54292,#54293)); +#54288 = ORIENTED_EDGE('',*,*,#40870,.F.); +#54289 = ORIENTED_EDGE('',*,*,#53694,.T.); +#54290 = ORIENTED_EDGE('',*,*,#53592,.F.); +#54291 = ORIENTED_EDGE('',*,*,#53562,.F.); +#54292 = ORIENTED_EDGE('',*,*,#53545,.T.); +#54293 = ORIENTED_EDGE('',*,*,#53408,.F.); +#54294 = PLANE('',#54295); +#54295 = AXIS2_PLACEMENT_3D('',#54296,#54297,#54298); +#54296 = CARTESIAN_POINT('',(7.,0.694863,0.841614)); +#54297 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#54298 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#54299 = ADVANCED_FACE('',(#54300),#54311,.F.); +#54300 = FACE_BOUND('',#54301,.T.); +#54301 = EDGE_LOOP('',(#54302,#54303,#54309,#54310)); +#54302 = ORIENTED_EDGE('',*,*,#44829,.F.); +#54303 = ORIENTED_EDGE('',*,*,#54304,.F.); +#54304 = EDGE_CURVE('',#39794,#44822,#54305,.T.); +#54305 = LINE('',#54306,#54307); +#54306 = CARTESIAN_POINT('',(6.77,0.694863,-2.667124E-02)); +#54307 = VECTOR('',#54308,1.); +#54308 = DIRECTION('',(1.056421638306E-16,0.887216801235,0.461352736642) + ); +#54309 = ORIENTED_EDGE('',*,*,#39793,.T.); +#54310 = ORIENTED_EDGE('',*,*,#39450,.T.); +#54311 = PLANE('',#54312); +#54312 = AXIS2_PLACEMENT_3D('',#54313,#54314,#54315); +#54313 = CARTESIAN_POINT('',(-8.15,1.9,0.6)); +#54314 = DIRECTION('',(2.031580073665E-16,-0.461352736642,0.887216801235 + )); +#54315 = DIRECTION('',(-1.056421638306E-16,-0.887216801235, + -0.461352736642)); +#54316 = ADVANCED_FACE('',(#54317),#54335,.F.); +#54317 = FACE_BOUND('',#54318,.T.); +#54318 = EDGE_LOOP('',(#54319,#54320,#54328,#54334)); +#54319 = ORIENTED_EDGE('',*,*,#44620,.F.); +#54320 = ORIENTED_EDGE('',*,*,#54321,.F.); +#54321 = EDGE_CURVE('',#54322,#44613,#54324,.T.); +#54322 = VERTEX_POINT('',#54323); +#54323 = CARTESIAN_POINT('',(6.285,-0.7,0.33)); +#54324 = LINE('',#54325,#54326); +#54325 = CARTESIAN_POINT('',(6.285,0.694863,0.41369178)); +#54326 = VECTOR('',#54327,1.); +#54327 = DIRECTION('',(-1.371434628377E-17,-0.998204845466, + -5.989229072795E-02)); +#54328 = ORIENTED_EDGE('',*,*,#54329,.T.); +#54329 = EDGE_CURVE('',#54322,#40583,#54330,.T.); +#54330 = LINE('',#54331,#54332); +#54331 = CARTESIAN_POINT('',(6.285,-0.7,0.33)); +#54332 = VECTOR('',#54333,1.); +#54333 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54334 = ORIENTED_EDGE('',*,*,#40582,.T.); +#54335 = PLANE('',#54336); +#54336 = AXIS2_PLACEMENT_3D('',#54337,#54338,#54339); +#54337 = CARTESIAN_POINT('',(6.285,-1.2,0.3)); +#54338 = DIRECTION('',(-2.285724380628E-16,5.989229072795E-02, + -0.998204845466)); +#54339 = DIRECTION('',(1.371434628377E-17,0.998204845466, + 5.989229072795E-02)); +#54340 = ADVANCED_FACE('',(#54341),#54360,.T.); +#54341 = FACE_BOUND('',#54342,.T.); +#54342 = EDGE_LOOP('',(#54343,#54344,#54345,#54346,#54354)); +#54343 = ORIENTED_EDGE('',*,*,#44846,.T.); +#54344 = ORIENTED_EDGE('',*,*,#41082,.T.); +#54345 = ORIENTED_EDGE('',*,*,#40830,.T.); +#54346 = ORIENTED_EDGE('',*,*,#54347,.F.); +#54347 = EDGE_CURVE('',#54348,#40823,#54350,.T.); +#54348 = VERTEX_POINT('',#54349); +#54349 = CARTESIAN_POINT('',(6.285,-1.8,0.92)); +#54350 = LINE('',#54351,#54352); +#54351 = CARTESIAN_POINT('',(6.285,-1.8,0.841614)); +#54352 = VECTOR('',#54353,1.); +#54353 = DIRECTION('',(3.514441342112E-16,1.065228634467E-16,1.)); +#54354 = ORIENTED_EDGE('',*,*,#54355,.T.); +#54355 = EDGE_CURVE('',#54348,#44847,#54356,.T.); +#54356 = LINE('',#54357,#54358); +#54357 = CARTESIAN_POINT('',(6.285,-1.8,0.841614)); +#54358 = VECTOR('',#54359,1.); +#54359 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#54360 = PLANE('',#54361); +#54361 = AXIS2_PLACEMENT_3D('',#54362,#54363,#54364); +#54362 = CARTESIAN_POINT('',(6.335,-1.85,0.575)); +#54363 = DIRECTION('',(-0.707106781187,-0.707106781187, + 3.238315696035E-16)); +#54364 = DIRECTION('',(0.707106781187,-0.707106781187,7.149051953565E-31 + )); +#54365 = ADVANCED_FACE('',(#54366),#54372,.T.); +#54366 = FACE_BOUND('',#54367,.T.); +#54367 = EDGE_LOOP('',(#54368,#54369,#54370,#54371)); +#54368 = ORIENTED_EDGE('',*,*,#45312,.F.); +#54369 = ORIENTED_EDGE('',*,*,#53283,.F.); +#54370 = ORIENTED_EDGE('',*,*,#43060,.F.); +#54371 = ORIENTED_EDGE('',*,*,#45329,.T.); +#54372 = PLANE('',#54373); +#54373 = AXIS2_PLACEMENT_3D('',#54374,#54375,#54376); +#54374 = CARTESIAN_POINT('',(5.425,0.85,5.5E-02)); +#54375 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#54376 = DIRECTION('',(0.707106781187,6.231304445401E-16,-0.707106781187 + )); +#54377 = ADVANCED_FACE('',(#54378),#54396,.T.); +#54378 = FACE_BOUND('',#54379,.T.); +#54379 = EDGE_LOOP('',(#54380,#54381,#54389,#54395)); +#54380 = ORIENTED_EDGE('',*,*,#43084,.F.); +#54381 = ORIENTED_EDGE('',*,*,#54382,.F.); +#54382 = EDGE_CURVE('',#54383,#43077,#54385,.T.); +#54383 = VERTEX_POINT('',#54384); +#54384 = CARTESIAN_POINT('',(5.6,0.92,8.E-02)); +#54385 = LINE('',#54386,#54387); +#54386 = CARTESIAN_POINT('',(5.5488325,0.694863,2.88325E-02)); +#54387 = VECTOR('',#54388,1.); +#54388 = DIRECTION('',(-0.216371161204,-0.952033109297,-0.216371161204) + ); +#54389 = ORIENTED_EDGE('',*,*,#54390,.F.); +#54390 = EDGE_CURVE('',#44117,#54383,#54391,.T.); +#54391 = LINE('',#54392,#54393); +#54392 = CARTESIAN_POINT('',(-10.,0.92,8.E-02)); +#54393 = VECTOR('',#54394,1.); +#54394 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54395 = ORIENTED_EDGE('',*,*,#44116,.F.); +#54396 = PLANE('',#54397); +#54397 = AXIS2_PLACEMENT_3D('',#54398,#54399,#54400); +#54398 = CARTESIAN_POINT('',(5.6625,0.92,8.E-02)); +#54399 = DIRECTION('',(-2.232893331422E-16,0.221621103589, + -0.975132855791)); +#54400 = DIRECTION('',(-5.074757571413E-17,-0.975132855791, + -0.221621103589)); +#54401 = ADVANCED_FACE('',(#54402),#54413,.T.); +#54402 = FACE_BOUND('',#54403,.T.); +#54403 = EDGE_LOOP('',(#54404,#54410,#54411,#54412)); +#54404 = ORIENTED_EDGE('',*,*,#54405,.F.); +#54405 = EDGE_CURVE('',#54383,#53269,#54406,.T.); +#54406 = LINE('',#54407,#54408); +#54407 = CARTESIAN_POINT('',(5.6,0.694863,8.E-02)); +#54408 = VECTOR('',#54409,1.); +#54409 = DIRECTION('',(-1.224606353822E-16,1.,-2.289834988289E-16)); +#54410 = ORIENTED_EDGE('',*,*,#54382,.T.); +#54411 = ORIENTED_EDGE('',*,*,#43076,.F.); +#54412 = ORIENTED_EDGE('',*,*,#53276,.F.); +#54413 = PLANE('',#54414); +#54414 = AXIS2_PLACEMENT_3D('',#54415,#54416,#54417); +#54415 = CARTESIAN_POINT('',(5.575,0.85,5.5E-02)); +#54416 = DIRECTION('',(0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#54417 = DIRECTION('',(-0.707106781187,6.231304445401E-16, + -0.707106781187)); +#54418 = ADVANCED_FACE('',(#54419),#54427,.T.); +#54419 = FACE_BOUND('',#54420,.T.); +#54420 = EDGE_LOOP('',(#54421,#54422,#54423,#54424,#54425,#54426)); +#54421 = ORIENTED_EDGE('',*,*,#54390,.T.); +#54422 = ORIENTED_EDGE('',*,*,#54405,.T.); +#54423 = ORIENTED_EDGE('',*,*,#53268,.T.); +#54424 = ORIENTED_EDGE('',*,*,#53338,.T.); +#54425 = ORIENTED_EDGE('',*,*,#53432,.T.); +#54426 = ORIENTED_EDGE('',*,*,#44124,.F.); +#54427 = PLANE('',#54428); +#54428 = AXIS2_PLACEMENT_3D('',#54429,#54430,#54431); +#54429 = CARTESIAN_POINT('',(5.6625,1.,8.E-02)); +#54430 = DIRECTION('',(-2.289834988289E-16,-2.289834988289E-16,-1.)); +#54431 = DIRECTION('',(0.,-1.,2.289834988289E-16)); +#54432 = ADVANCED_FACE('',(#54433),#54444,.F.); +#54433 = FACE_BOUND('',#54434,.T.); +#54434 = EDGE_LOOP('',(#54435,#54436,#54442,#54443)); +#54435 = ORIENTED_EDGE('',*,*,#39665,.F.); +#54436 = ORIENTED_EDGE('',*,*,#54437,.F.); +#54437 = EDGE_CURVE('',#44814,#39658,#54438,.T.); +#54438 = LINE('',#54439,#54440); +#54439 = CARTESIAN_POINT('',(6.77,0.694863,0.89)); +#54440 = VECTOR('',#54441,1.); +#54441 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#54442 = ORIENTED_EDGE('',*,*,#44813,.F.); +#54443 = ORIENTED_EDGE('',*,*,#44147,.F.); +#54444 = PLANE('',#54445); +#54445 = AXIS2_PLACEMENT_3D('',#54446,#54447,#54448); +#54446 = CARTESIAN_POINT('',(6.745,1.603724317761,0.915)); +#54447 = DIRECTION('',(-0.707106781187,-7.532303909457E-17, + -0.707106781187)); +#54448 = DIRECTION('',(-0.707106781187,7.532303909457E-17,0.707106781187 + )); +#54449 = ADVANCED_FACE('',(#54450),#54461,.F.); +#54450 = FACE_BOUND('',#54451,.T.); +#54451 = EDGE_LOOP('',(#54452,#54453,#54459,#54460)); +#54452 = ORIENTED_EDGE('',*,*,#54329,.F.); +#54453 = ORIENTED_EDGE('',*,*,#54454,.F.); +#54454 = EDGE_CURVE('',#41128,#54322,#54455,.T.); +#54455 = LINE('',#54456,#54457); +#54456 = CARTESIAN_POINT('',(6.285,0.694863,0.33)); +#54457 = VECTOR('',#54458,1.); +#54458 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#54459 = ORIENTED_EDGE('',*,*,#41127,.T.); +#54460 = ORIENTED_EDGE('',*,*,#40590,.T.); +#54461 = PLANE('',#54462); +#54462 = AXIS2_PLACEMENT_3D('',#54463,#54464,#54465); +#54463 = CARTESIAN_POINT('',(6.085,-0.6,0.33)); +#54464 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#54465 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54466 = ADVANCED_FACE('',(#54467),#54483,.F.); +#54467 = FACE_BOUND('',#54468,.T.); +#54468 = EDGE_LOOP('',(#54469,#54470,#54476,#54482)); +#54469 = ORIENTED_EDGE('',*,*,#40732,.T.); +#54470 = ORIENTED_EDGE('',*,*,#54471,.T.); +#54471 = EDGE_CURVE('',#40733,#54348,#54472,.T.); +#54472 = LINE('',#54473,#54474); +#54473 = CARTESIAN_POINT('',(6.285,-1.7412105,0.841614)); +#54474 = VECTOR('',#54475,1.); +#54475 = DIRECTION('',(1.831867990632E-16,-0.6,0.8)); +#54476 = ORIENTED_EDGE('',*,*,#54477,.T.); +#54477 = EDGE_CURVE('',#54348,#40631,#54478,.T.); +#54478 = LINE('',#54479,#54480); +#54479 = CARTESIAN_POINT('',(10.5,-1.8,0.92)); +#54480 = VECTOR('',#54481,1.); +#54481 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54482 = ORIENTED_EDGE('',*,*,#40630,.F.); +#54483 = PLANE('',#54484); +#54484 = AXIS2_PLACEMENT_3D('',#54485,#54486,#54487); +#54485 = CARTESIAN_POINT('',(6.285,-1.65,0.72)); +#54486 = DIRECTION('',(1.373900992974E-16,0.8,0.6)); +#54487 = DIRECTION('',(1.831867990632E-16,-0.6,0.8)); +#54488 = ADVANCED_FACE('',(#54489),#54495,.F.); +#54489 = FACE_BOUND('',#54490,.T.); +#54490 = EDGE_LOOP('',(#54491,#54492,#54493,#54494)); +#54491 = ORIENTED_EDGE('',*,*,#54477,.F.); +#54492 = ORIENTED_EDGE('',*,*,#54347,.T.); +#54493 = ORIENTED_EDGE('',*,*,#40822,.F.); +#54494 = ORIENTED_EDGE('',*,*,#41571,.F.); +#54495 = PLANE('',#54496); +#54496 = AXIS2_PLACEMENT_3D('',#54497,#54498,#54499); +#54497 = CARTESIAN_POINT('',(20.785,-1.8,0.92)); +#54498 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#54499 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#54500 = ADVANCED_FACE('',(#54501),#54507,.T.); +#54501 = FACE_BOUND('',#54502,.T.); +#54502 = EDGE_LOOP('',(#54503,#54504,#54505,#54506)); +#54503 = ORIENTED_EDGE('',*,*,#53352,.T.); +#54504 = ORIENTED_EDGE('',*,*,#53376,.F.); +#54505 = ORIENTED_EDGE('',*,*,#44798,.T.); +#54506 = ORIENTED_EDGE('',*,*,#53310,.T.); +#54507 = PLANE('',#54508); +#54508 = AXIS2_PLACEMENT_3D('',#54509,#54510,#54511); +#54509 = CARTESIAN_POINT('',(5.675,0.943186633611,6.541154699934E-02)); +#54510 = DIRECTION('',(2.229998385642E-16,-0.227112212966,0.973868596229 + )); +#54511 = DIRECTION('',(5.200494915182E-17,0.973868596229,0.227112212966) + ); +#54512 = ADVANCED_FACE('',(#54513),#54524,.F.); +#54513 = FACE_BOUND('',#54514,.T.); +#54514 = EDGE_LOOP('',(#54515,#54516,#54522,#54523)); +#54515 = ORIENTED_EDGE('',*,*,#40763,.T.); +#54516 = ORIENTED_EDGE('',*,*,#54517,.F.); +#54517 = EDGE_CURVE('',#41234,#40764,#54518,.T.); +#54518 = LINE('',#54519,#54520); +#54519 = CARTESIAN_POINT('',(6.8,-2.E-02,0.841614)); +#54520 = VECTOR('',#54521,1.); +#54521 = DIRECTION('',(2.289834988289E-16,1.065228634467E-16,1.)); +#54522 = ORIENTED_EDGE('',*,*,#41233,.T.); +#54523 = ORIENTED_EDGE('',*,*,#39586,.T.); +#54524 = PLANE('',#54525); +#54525 = AXIS2_PLACEMENT_3D('',#54526,#54527,#54528); +#54526 = CARTESIAN_POINT('',(6.8,-2.E-02,1.05)); +#54527 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#54528 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#54529 = ADVANCED_FACE('',(#54530),#54555,.T.); +#54530 = FACE_BOUND('',#54531,.T.); +#54531 = EDGE_LOOP('',(#54532,#54533,#54541,#54549)); +#54532 = ORIENTED_EDGE('',*,*,#41249,.T.); +#54533 = ORIENTED_EDGE('',*,*,#54534,.T.); +#54534 = EDGE_CURVE('',#41242,#54535,#54537,.T.); +#54535 = VERTEX_POINT('',#54536); +#54536 = CARTESIAN_POINT('',(6.8,0.9,0.31)); +#54537 = LINE('',#54538,#54539); +#54538 = CARTESIAN_POINT('',(6.8,0.9,0.841614)); +#54539 = VECTOR('',#54540,1.); +#54540 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#54541 = ORIENTED_EDGE('',*,*,#54542,.F.); +#54542 = EDGE_CURVE('',#54543,#54535,#54545,.T.); +#54543 = VERTEX_POINT('',#54544); +#54544 = CARTESIAN_POINT('',(6.77,0.9,0.31)); +#54545 = LINE('',#54546,#54547); +#54546 = CARTESIAN_POINT('',(7.5,0.9,0.31)); +#54547 = VECTOR('',#54548,1.); +#54548 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#54549 = ORIENTED_EDGE('',*,*,#54550,.F.); +#54550 = EDGE_CURVE('',#41250,#54543,#54551,.T.); +#54551 = LINE('',#54552,#54553); +#54552 = CARTESIAN_POINT('',(6.77,0.9,0.841614)); +#54553 = VECTOR('',#54554,1.); +#54554 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#54555 = PLANE('',#54556); +#54556 = AXIS2_PLACEMENT_3D('',#54557,#54558,#54559); +#54557 = CARTESIAN_POINT('',(5.75,0.9,0.29)); +#54558 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#54559 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#54560 = ADVANCED_FACE('',(#54561),#54578,.F.); +#54561 = FACE_BOUND('',#54562,.T.); +#54562 = EDGE_LOOP('',(#54563,#54564,#54570,#54571,#54577)); +#54563 = ORIENTED_EDGE('',*,*,#53401,.T.); +#54564 = ORIENTED_EDGE('',*,*,#54565,.F.); +#54565 = EDGE_CURVE('',#54535,#53394,#54566,.T.); +#54566 = LINE('',#54567,#54568); +#54567 = CARTESIAN_POINT('',(7.5,1.6,0.31)); +#54568 = VECTOR('',#54569,1.); +#54569 = DIRECTION('',(0.707106781187,0.707106781187,-2.683204183723E-16 + )); +#54570 = ORIENTED_EDGE('',*,*,#54534,.F.); +#54571 = ORIENTED_EDGE('',*,*,#54572,.F.); +#54572 = EDGE_CURVE('',#40887,#41242,#54573,.T.); +#54573 = LINE('',#54574,#54575); +#54574 = CARTESIAN_POINT('',(6.8,0.9,0.841614)); +#54575 = VECTOR('',#54576,1.); +#54576 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#54577 = ORIENTED_EDGE('',*,*,#40886,.T.); +#54578 = PLANE('',#54579); +#54579 = AXIS2_PLACEMENT_3D('',#54580,#54581,#54582); +#54580 = CARTESIAN_POINT('',(6.85,0.95,0.675)); +#54581 = DIRECTION('',(0.707106781187,-0.707106781187, + -8.659274570719E-17)); +#54582 = DIRECTION('',(0.707106781187,0.707106781187,-4.335003812318E-16 + )); +#54583 = ADVANCED_FACE('',(#54584),#54595,.F.); +#54584 = FACE_BOUND('',#54585,.T.); +#54585 = EDGE_LOOP('',(#54586,#54587,#54588,#54594)); +#54586 = ORIENTED_EDGE('',*,*,#54565,.T.); +#54587 = ORIENTED_EDGE('',*,*,#53393,.T.); +#54588 = ORIENTED_EDGE('',*,*,#54589,.T.); +#54589 = EDGE_CURVE('',#43317,#54543,#54590,.T.); +#54590 = LINE('',#54591,#54592); +#54591 = CARTESIAN_POINT('',(6.77,0.694863,0.31)); +#54592 = VECTOR('',#54593,1.); +#54593 = DIRECTION('',(-2.804146475864E-32,-1.,1.065228634467E-16)); +#54594 = ORIENTED_EDGE('',*,*,#54542,.T.); +#54595 = PLANE('',#54596); +#54596 = AXIS2_PLACEMENT_3D('',#54597,#54598,#54599); +#54597 = CARTESIAN_POINT('',(6.8,0.29,0.31)); +#54598 = DIRECTION('',(-2.289834988289E-16,-1.065228634467E-16,-1.)); +#54599 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#54600 = ADVANCED_FACE('',(#54601),#54612,.T.); +#54601 = FACE_BOUND('',#54602,.T.); +#54602 = EDGE_LOOP('',(#54603,#54604,#54605,#54606,#54607,#54608,#54609, + #54610,#54611)); +#54603 = ORIENTED_EDGE('',*,*,#41257,.T.); +#54604 = ORIENTED_EDGE('',*,*,#54550,.T.); +#54605 = ORIENTED_EDGE('',*,*,#54589,.F.); +#54606 = ORIENTED_EDGE('',*,*,#43316,.F.); +#54607 = ORIENTED_EDGE('',*,*,#39801,.T.); +#54608 = ORIENTED_EDGE('',*,*,#54304,.T.); +#54609 = ORIENTED_EDGE('',*,*,#44821,.T.); +#54610 = ORIENTED_EDGE('',*,*,#54437,.T.); +#54611 = ORIENTED_EDGE('',*,*,#44067,.T.); +#54612 = PLANE('',#54613); +#54613 = AXIS2_PLACEMENT_3D('',#54614,#54615,#54616); +#54614 = CARTESIAN_POINT('',(6.77,1.045602317761,-0.794708)); +#54615 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#54616 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#54617 = ADVANCED_FACE('',(#54618),#54624,.F.); +#54618 = FACE_BOUND('',#54619,.T.); +#54619 = EDGE_LOOP('',(#54620,#54621,#54622,#54623)); +#54620 = ORIENTED_EDGE('',*,*,#41241,.T.); +#54621 = ORIENTED_EDGE('',*,*,#54517,.T.); +#54622 = ORIENTED_EDGE('',*,*,#40894,.T.); +#54623 = ORIENTED_EDGE('',*,*,#54572,.T.); +#54624 = PLANE('',#54625); +#54625 = AXIS2_PLACEMENT_3D('',#54626,#54627,#54628); +#54626 = CARTESIAN_POINT('',(6.8,0.694863,0.841614)); +#54627 = DIRECTION('',(1.,-5.243344273594E-32,-2.289834988289E-16)); +#54628 = DIRECTION('',(2.804146475864E-32,1.,-1.065228634467E-16)); +#54629 = ADVANCED_FACE('',(#54630),#54641,.F.); +#54630 = FACE_BOUND('',#54631,.T.); +#54631 = EDGE_LOOP('',(#54632,#54633,#54639,#54640)); +#54632 = ORIENTED_EDGE('',*,*,#41158,.F.); +#54633 = ORIENTED_EDGE('',*,*,#54634,.T.); +#54634 = EDGE_CURVE('',#41159,#40742,#54635,.T.); +#54635 = LINE('',#54636,#54637); +#54636 = CARTESIAN_POINT('',(6.285,-0.7,0.69)); +#54637 = VECTOR('',#54638,1.); +#54638 = DIRECTION('',(1.71256640256E-17,-0.997199309888, + 7.478994824163E-02)); +#54639 = ORIENTED_EDGE('',*,*,#40741,.T.); +#54640 = ORIENTED_EDGE('',*,*,#40614,.F.); +#54641 = PLANE('',#54642); +#54642 = AXIS2_PLACEMENT_3D('',#54643,#54644,#54645); +#54643 = CARTESIAN_POINT('',(6.265,-0.7,0.69)); +#54644 = DIRECTION('',(2.283421870081E-16,7.478994824163E-02, + 0.997199309888)); +#54645 = DIRECTION('',(1.71256640256E-17,-0.997199309888, + 7.478994824163E-02)); +#54646 = ADVANCED_FACE('',(#54647),#54659,.T.); +#54647 = FACE_BOUND('',#54648,.T.); +#54648 = EDGE_LOOP('',(#54649,#54650,#54651,#54652,#54653,#54654,#54655, + #54656,#54657,#54658)); +#54649 = ORIENTED_EDGE('',*,*,#44854,.F.); +#54650 = ORIENTED_EDGE('',*,*,#54355,.F.); +#54651 = ORIENTED_EDGE('',*,*,#54471,.F.); +#54652 = ORIENTED_EDGE('',*,*,#40749,.T.); +#54653 = ORIENTED_EDGE('',*,*,#54634,.F.); +#54654 = ORIENTED_EDGE('',*,*,#41168,.T.); +#54655 = ORIENTED_EDGE('',*,*,#41135,.T.); +#54656 = ORIENTED_EDGE('',*,*,#54454,.T.); +#54657 = ORIENTED_EDGE('',*,*,#54321,.T.); +#54658 = ORIENTED_EDGE('',*,*,#44612,.F.); +#54659 = PLANE('',#54660); +#54660 = AXIS2_PLACEMENT_3D('',#54661,#54662,#54663); +#54661 = CARTESIAN_POINT('',(6.285,-1.8,1.05)); +#54662 = DIRECTION('',(-1.,5.243344273594E-32,2.289834988289E-16)); +#54663 = DIRECTION('',(-2.080052407982E-46,1.,-2.289834988289E-16)); +#54664 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#54668)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#54665,#54666,#54667)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#54665 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#54666 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#54667 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#54668 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#54665, + 'distance_accuracy_value','confusion accuracy'); +#54669 = SHAPE_DEFINITION_REPRESENTATION(#54670,#39306); +#54670 = PRODUCT_DEFINITION_SHAPE('','',#54671); +#54671 = PRODUCT_DEFINITION('design','',#54672,#54675); +#54672 = PRODUCT_DEFINITION_FORMATION('','',#54673); +#54673 = PRODUCT('FH34SRJ-24S-0.5SH_RGB4408131', + 'FH34SRJ-24S-0.5SH_RGB4408131','',(#54674)); +#54674 = PRODUCT_CONTEXT('',#2,'mechanical'); +#54675 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#54676 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#54677,#54679); +#54677 = ( REPRESENTATION_RELATIONSHIP('','',#39306,#39296) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#54678) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#54678 = ITEM_DEFINED_TRANSFORMATION('','',#11,#39297); +#54679 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #54680); +#54680 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('71','','',#39291,#54671,$); +#54681 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#54673)); +#54682 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#54683,#54685); +#54683 = ( REPRESENTATION_RELATIONSHIP('','',#39296,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#54684) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#54684 = ITEM_DEFINED_TRANSFORMATION('','',#11,#95); +#54685 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #54686); +#54686 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('72','','',#5,#39291,$); +#54687 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#39293)); +#54688 = SHAPE_DEFINITION_REPRESENTATION(#54689,#54695); +#54689 = PRODUCT_DEFINITION_SHAPE('','',#54690); +#54690 = PRODUCT_DEFINITION('design','',#54691,#54694); +#54691 = PRODUCT_DEFINITION_FORMATION('','',#54692); +#54692 = PRODUCT('D3','D3','',(#54693)); +#54693 = PRODUCT_CONTEXT('',#2,'mechanical'); +#54694 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#54695 = SHAPE_REPRESENTATION('',(#11,#54696),#54700); +#54696 = AXIS2_PLACEMENT_3D('',#54697,#54698,#54699); +#54697 = CARTESIAN_POINT('',(301.19329833984,172.80171203613,0.)); +#54698 = DIRECTION('',(0.,0.,1.)); +#54699 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#54700 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#54704)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#54701,#54702,#54703)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#54701 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#54702 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#54703 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#54704 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#54701, + 'distance_accuracy_value','confusion accuracy'); +#54705 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#54706),#55856); +#54706 = MANIFOLD_SOLID_BREP('',#54707); +#54707 = CLOSED_SHELL('',(#54708,#54780,#54852,#54892,#54921,#54952, + #54981,#54998,#55024,#55055,#55067,#55098,#55129,#55162,#55193, + #55226,#55257,#55288,#55319,#55352,#55383,#55407,#55427,#55447, + #55478,#55511,#55542,#55575,#55606,#55637,#55668,#55701,#55732, + #55765,#55787,#55807,#55827,#55844)); +#54708 = ADVANCED_FACE('',(#54709),#54775,.F.); +#54709 = FACE_BOUND('',#54710,.T.); +#54710 = EDGE_LOOP('',(#54711,#54721,#54729,#54737,#54745,#54753,#54761, + #54769)); +#54711 = ORIENTED_EDGE('',*,*,#54712,.T.); +#54712 = EDGE_CURVE('',#54713,#54715,#54717,.T.); +#54713 = VERTEX_POINT('',#54714); +#54714 = CARTESIAN_POINT('',(0.878918874795,0.2,0.81)); +#54715 = VERTEX_POINT('',#54716); +#54716 = CARTESIAN_POINT('',(0.9,0.2,0.66)); +#54717 = LINE('',#54718,#54719); +#54718 = CARTESIAN_POINT('',(0.878918874795,0.2,0.81)); +#54719 = VECTOR('',#54720,1.); +#54720 = DIRECTION('',(0.13917310096,0.,-0.990268068742)); +#54721 = ORIENTED_EDGE('',*,*,#54722,.F.); +#54722 = EDGE_CURVE('',#54723,#54715,#54725,.T.); +#54723 = VERTEX_POINT('',#54724); +#54724 = CARTESIAN_POINT('',(0.9,0.675,0.66)); +#54725 = LINE('',#54726,#54727); +#54726 = CARTESIAN_POINT('',(0.9,2.5,0.66)); +#54727 = VECTOR('',#54728,1.); +#54728 = DIRECTION('',(-0.,-1.,-0.)); +#54729 = ORIENTED_EDGE('',*,*,#54730,.F.); +#54730 = EDGE_CURVE('',#54731,#54723,#54733,.T.); +#54731 = VERTEX_POINT('',#54732); +#54732 = CARTESIAN_POINT('',(0.838162032731,0.613162032731,1.1)); +#54733 = LINE('',#54734,#54735); +#54734 = CARTESIAN_POINT('',(0.874014060794,0.649014060794, + 0.844899565031)); +#54735 = VECTOR('',#54736,1.); +#54736 = DIRECTION('',(0.137844537492,0.137844537492,-0.980814848464)); +#54737 = ORIENTED_EDGE('',*,*,#54738,.T.); +#54738 = EDGE_CURVE('',#54731,#54739,#54741,.T.); +#54739 = VERTEX_POINT('',#54740); +#54740 = CARTESIAN_POINT('',(0.838162032731,-0.613162032731,1.1)); +#54741 = LINE('',#54742,#54743); +#54742 = CARTESIAN_POINT('',(0.838162032731,2.5,1.1)); +#54743 = VECTOR('',#54744,1.); +#54744 = DIRECTION('',(-0.,-1.,-0.)); +#54745 = ORIENTED_EDGE('',*,*,#54746,.F.); +#54746 = EDGE_CURVE('',#54747,#54739,#54749,.T.); +#54747 = VERTEX_POINT('',#54748); +#54748 = CARTESIAN_POINT('',(0.9,-0.675,0.66)); +#54749 = LINE('',#54750,#54751); +#54750 = CARTESIAN_POINT('',(0.779008478213,-0.554008478213, + 1.520899410789)); +#54751 = VECTOR('',#54752,1.); +#54752 = DIRECTION('',(-0.137844537492,0.137844537492,0.980814848464)); +#54753 = ORIENTED_EDGE('',*,*,#54754,.F.); +#54754 = EDGE_CURVE('',#54755,#54747,#54757,.T.); +#54755 = VERTEX_POINT('',#54756); +#54756 = CARTESIAN_POINT('',(0.9,-0.2,0.66)); +#54757 = LINE('',#54758,#54759); +#54758 = CARTESIAN_POINT('',(0.9,2.5,0.66)); +#54759 = VECTOR('',#54760,1.); +#54760 = DIRECTION('',(-0.,-1.,-0.)); +#54761 = ORIENTED_EDGE('',*,*,#54762,.F.); +#54762 = EDGE_CURVE('',#54763,#54755,#54765,.T.); +#54763 = VERTEX_POINT('',#54764); +#54764 = CARTESIAN_POINT('',(0.878918874795,-0.2,0.81)); +#54765 = LINE('',#54766,#54767); +#54766 = CARTESIAN_POINT('',(0.878918874795,-0.2,0.81)); +#54767 = VECTOR('',#54768,1.); +#54768 = DIRECTION('',(0.13917310096,0.,-0.990268068742)); +#54769 = ORIENTED_EDGE('',*,*,#54770,.F.); +#54770 = EDGE_CURVE('',#54713,#54763,#54771,.T.); +#54771 = LINE('',#54772,#54773); +#54772 = CARTESIAN_POINT('',(0.878918874795,0.2,0.81)); +#54773 = VECTOR('',#54774,1.); +#54774 = DIRECTION('',(-0.,-1.,-0.)); +#54775 = PLANE('',#54776); +#54776 = AXIS2_PLACEMENT_3D('',#54777,#54778,#54779); +#54777 = CARTESIAN_POINT('',(0.838162032731,2.5,1.1)); +#54778 = DIRECTION('',(-0.990268068742,0.,-0.13917310096)); +#54779 = DIRECTION('',(-0.13917310096,0.,0.990268068742)); +#54780 = ADVANCED_FACE('',(#54781),#54847,.F.); +#54781 = FACE_BOUND('',#54782,.T.); +#54782 = EDGE_LOOP('',(#54783,#54793,#54801,#54809,#54817,#54825,#54833, + #54841)); +#54783 = ORIENTED_EDGE('',*,*,#54784,.F.); +#54784 = EDGE_CURVE('',#54785,#54787,#54789,.T.); +#54785 = VERTEX_POINT('',#54786); +#54786 = CARTESIAN_POINT('',(-0.838302573566,-0.613302573566,1.099)); +#54787 = VERTEX_POINT('',#54788); +#54788 = CARTESIAN_POINT('',(-0.9,-0.675,0.66)); +#54789 = LINE('',#54790,#54791); +#54790 = CARTESIAN_POINT('',(-0.839671455061,-0.614671455061, + 1.089259902056)); +#54791 = VECTOR('',#54792,1.); +#54792 = DIRECTION('',(-0.137844537492,-0.137844537492,-0.980814848464) + ); +#54793 = ORIENTED_EDGE('',*,*,#54794,.T.); +#54794 = EDGE_CURVE('',#54785,#54795,#54797,.T.); +#54795 = VERTEX_POINT('',#54796); +#54796 = CARTESIAN_POINT('',(-0.838302573566,0.613302573566,1.099)); +#54797 = LINE('',#54798,#54799); +#54798 = CARTESIAN_POINT('',(-0.838302573566,2.5,1.099)); +#54799 = VECTOR('',#54800,1.); +#54800 = DIRECTION('',(0.,1.,0.)); +#54801 = ORIENTED_EDGE('',*,*,#54802,.F.); +#54802 = EDGE_CURVE('',#54803,#54795,#54805,.T.); +#54803 = VERTEX_POINT('',#54804); +#54804 = CARTESIAN_POINT('',(-0.9,0.675,0.66)); +#54805 = LINE('',#54806,#54807); +#54806 = CARTESIAN_POINT('',(-0.934677037642,0.709677037642, + 0.413260056299)); +#54807 = VECTOR('',#54808,1.); +#54808 = DIRECTION('',(0.137844537492,-0.137844537492,0.980814848464)); +#54809 = ORIENTED_EDGE('',*,*,#54810,.T.); +#54810 = EDGE_CURVE('',#54803,#54811,#54813,.T.); +#54811 = VERTEX_POINT('',#54812); +#54812 = CARTESIAN_POINT('',(-0.9,0.2,0.66)); +#54813 = LINE('',#54814,#54815); +#54814 = CARTESIAN_POINT('',(-0.9,2.5,0.66)); +#54815 = VECTOR('',#54816,1.); +#54816 = DIRECTION('',(-0.,-1.,-0.)); +#54817 = ORIENTED_EDGE('',*,*,#54818,.F.); +#54818 = EDGE_CURVE('',#54819,#54811,#54821,.T.); +#54819 = VERTEX_POINT('',#54820); +#54820 = CARTESIAN_POINT('',(-0.878918874795,0.2,0.81)); +#54821 = LINE('',#54822,#54823); +#54822 = CARTESIAN_POINT('',(-0.878918874795,0.2,0.81)); +#54823 = VECTOR('',#54824,1.); +#54824 = DIRECTION('',(-0.13917310096,0.,-0.990268068742)); +#54825 = ORIENTED_EDGE('',*,*,#54826,.T.); +#54826 = EDGE_CURVE('',#54819,#54827,#54829,.T.); +#54827 = VERTEX_POINT('',#54828); +#54828 = CARTESIAN_POINT('',(-0.878918874795,-0.2,0.81)); +#54829 = LINE('',#54830,#54831); +#54830 = CARTESIAN_POINT('',(-0.878918874795,0.2,0.81)); +#54831 = VECTOR('',#54832,1.); +#54832 = DIRECTION('',(-0.,-1.,-0.)); +#54833 = ORIENTED_EDGE('',*,*,#54834,.T.); +#54834 = EDGE_CURVE('',#54827,#54835,#54837,.T.); +#54835 = VERTEX_POINT('',#54836); +#54836 = CARTESIAN_POINT('',(-0.9,-0.2,0.66)); +#54837 = LINE('',#54838,#54839); +#54838 = CARTESIAN_POINT('',(-0.878918874795,-0.2,0.81)); +#54839 = VECTOR('',#54840,1.); +#54840 = DIRECTION('',(-0.13917310096,0.,-0.990268068742)); +#54841 = ORIENTED_EDGE('',*,*,#54842,.T.); +#54842 = EDGE_CURVE('',#54835,#54787,#54843,.T.); +#54843 = LINE('',#54844,#54845); +#54844 = CARTESIAN_POINT('',(-0.9,2.5,0.66)); +#54845 = VECTOR('',#54846,1.); +#54846 = DIRECTION('',(-0.,-1.,-0.)); +#54847 = PLANE('',#54848); +#54848 = AXIS2_PLACEMENT_3D('',#54849,#54850,#54851); +#54849 = CARTESIAN_POINT('',(-0.9,2.5,0.66)); +#54850 = DIRECTION('',(0.990268068742,0.,-0.13917310096)); +#54851 = DIRECTION('',(-0.13917310096,0.,-0.990268068742)); +#54852 = ADVANCED_FACE('',(#54853),#54887,.F.); +#54853 = FACE_BOUND('',#54854,.T.); +#54854 = EDGE_LOOP('',(#54855,#54865,#54873,#54881)); +#54855 = ORIENTED_EDGE('',*,*,#54856,.F.); +#54856 = EDGE_CURVE('',#54857,#54859,#54861,.T.); +#54857 = VERTEX_POINT('',#54858); +#54858 = CARTESIAN_POINT('',(-0.814270090832,-0.589270090832,5.E-02)); +#54859 = VERTEX_POINT('',#54860); +#54860 = CARTESIAN_POINT('',(0.814270090832,-0.589270090832,5.E-02)); +#54861 = LINE('',#54862,#54863); +#54862 = CARTESIAN_POINT('',(-0.9,-0.589270090832,5.E-02)); +#54863 = VECTOR('',#54864,1.); +#54864 = DIRECTION('',(1.,-0.,-0.)); +#54865 = ORIENTED_EDGE('',*,*,#54866,.F.); +#54866 = EDGE_CURVE('',#54867,#54857,#54869,.T.); +#54867 = VERTEX_POINT('',#54868); +#54868 = CARTESIAN_POINT('',(-0.814270090832,0.589270090832,5.E-02)); +#54869 = LINE('',#54870,#54871); +#54870 = CARTESIAN_POINT('',(-0.814270090832,2.5,5.E-02)); +#54871 = VECTOR('',#54872,1.); +#54872 = DIRECTION('',(-0.,-1.,-0.)); +#54873 = ORIENTED_EDGE('',*,*,#54874,.T.); +#54874 = EDGE_CURVE('',#54867,#54875,#54877,.T.); +#54875 = VERTEX_POINT('',#54876); +#54876 = CARTESIAN_POINT('',(0.814270090832,0.589270090832,5.E-02)); +#54877 = LINE('',#54878,#54879); +#54878 = CARTESIAN_POINT('',(-0.9,0.589270090832,5.E-02)); +#54879 = VECTOR('',#54880,1.); +#54880 = DIRECTION('',(1.,-0.,-0.)); +#54881 = ORIENTED_EDGE('',*,*,#54882,.T.); +#54882 = EDGE_CURVE('',#54875,#54859,#54883,.T.); +#54883 = LINE('',#54884,#54885); +#54884 = CARTESIAN_POINT('',(0.814270090832,2.5,5.E-02)); +#54885 = VECTOR('',#54886,1.); +#54886 = DIRECTION('',(-0.,-1.,-0.)); +#54887 = PLANE('',#54888); +#54888 = AXIS2_PLACEMENT_3D('',#54889,#54890,#54891); +#54889 = CARTESIAN_POINT('',(0.814270090832,2.5,5.E-02)); +#54890 = DIRECTION('',(0.,-0.,1.)); +#54891 = DIRECTION('',(1.,0.,0.)); +#54892 = ADVANCED_FACE('',(#54893),#54916,.F.); +#54893 = FACE_BOUND('',#54894,.T.); +#54894 = EDGE_LOOP('',(#54895,#54901,#54902,#54908,#54909,#54915)); +#54895 = ORIENTED_EDGE('',*,*,#54896,.F.); +#54896 = EDGE_CURVE('',#54787,#54857,#54897,.T.); +#54897 = LINE('',#54898,#54899); +#54898 = CARTESIAN_POINT('',(-0.755570509885,-0.530570509885, + -0.367669220981)); +#54899 = VECTOR('',#54900,1.); +#54900 = DIRECTION('',(0.137844537492,0.137844537492,-0.980814848464)); +#54901 = ORIENTED_EDGE('',*,*,#54842,.F.); +#54902 = ORIENTED_EDGE('',*,*,#54903,.F.); +#54903 = EDGE_CURVE('',#54811,#54835,#54904,.T.); +#54904 = LINE('',#54905,#54906); +#54905 = CARTESIAN_POINT('',(-0.9,0.2,0.66)); +#54906 = VECTOR('',#54907,1.); +#54907 = DIRECTION('',(-0.,-1.,-0.)); +#54908 = ORIENTED_EDGE('',*,*,#54810,.F.); +#54909 = ORIENTED_EDGE('',*,*,#54910,.F.); +#54910 = EDGE_CURVE('',#54867,#54803,#54911,.T.); +#54911 = LINE('',#54912,#54913); +#54912 = CARTESIAN_POINT('',(-0.850576092467,0.625576092467, + 0.308330624776)); +#54913 = VECTOR('',#54914,1.); +#54914 = DIRECTION('',(-0.137844537492,0.137844537492,0.980814848464)); +#54915 = ORIENTED_EDGE('',*,*,#54866,.T.); +#54916 = PLANE('',#54917); +#54917 = AXIS2_PLACEMENT_3D('',#54918,#54919,#54920); +#54918 = CARTESIAN_POINT('',(-0.814270090832,2.5,5.E-02)); +#54919 = DIRECTION('',(0.990268068742,-0.,0.13917310096)); +#54920 = DIRECTION('',(0.13917310096,0.,-0.990268068742)); +#54921 = ADVANCED_FACE('',(#54922),#54947,.F.); +#54922 = FACE_BOUND('',#54923,.T.); +#54923 = EDGE_LOOP('',(#54924,#54932,#54940,#54946)); +#54924 = ORIENTED_EDGE('',*,*,#54925,.F.); +#54925 = EDGE_CURVE('',#54926,#54731,#54928,.T.); +#54926 = VERTEX_POINT('',#54927); +#54927 = CARTESIAN_POINT('',(-0.3,0.613162032731,1.1)); +#54928 = LINE('',#54929,#54930); +#54929 = CARTESIAN_POINT('',(-0.9,0.613162032731,1.1)); +#54930 = VECTOR('',#54931,1.); +#54931 = DIRECTION('',(1.,-0.,-0.)); +#54932 = ORIENTED_EDGE('',*,*,#54933,.F.); +#54933 = EDGE_CURVE('',#54934,#54926,#54936,.T.); +#54934 = VERTEX_POINT('',#54935); +#54935 = CARTESIAN_POINT('',(-0.3,-0.613162032731,1.1)); +#54936 = LINE('',#54937,#54938); +#54937 = CARTESIAN_POINT('',(-0.3,0.675,1.1)); +#54938 = VECTOR('',#54939,1.); +#54939 = DIRECTION('',(-0.,1.,-0.)); +#54940 = ORIENTED_EDGE('',*,*,#54941,.T.); +#54941 = EDGE_CURVE('',#54934,#54739,#54942,.T.); +#54942 = LINE('',#54943,#54944); +#54943 = CARTESIAN_POINT('',(-0.9,-0.613162032731,1.1)); +#54944 = VECTOR('',#54945,1.); +#54945 = DIRECTION('',(1.,-0.,-0.)); +#54946 = ORIENTED_EDGE('',*,*,#54738,.F.); +#54947 = PLANE('',#54948); +#54948 = AXIS2_PLACEMENT_3D('',#54949,#54950,#54951); +#54949 = CARTESIAN_POINT('',(-0.838162032731,2.5,1.1)); +#54950 = DIRECTION('',(0.,0.,-1.)); +#54951 = DIRECTION('',(-1.,0.,-0.)); +#54952 = ADVANCED_FACE('',(#54953),#54976,.F.); +#54953 = FACE_BOUND('',#54954,.T.); +#54954 = EDGE_LOOP('',(#54955,#54961,#54962,#54968,#54969,#54975)); +#54955 = ORIENTED_EDGE('',*,*,#54956,.F.); +#54956 = EDGE_CURVE('',#54859,#54747,#54957,.T.); +#54957 = LINE('',#54958,#54959); +#54958 = CARTESIAN_POINT('',(0.839671455061,-0.614671455061, + 0.230740097944)); +#54959 = VECTOR('',#54960,1.); +#54960 = DIRECTION('',(0.137844537492,-0.137844537492,0.980814848464)); +#54961 = ORIENTED_EDGE('',*,*,#54882,.F.); +#54962 = ORIENTED_EDGE('',*,*,#54963,.F.); +#54963 = EDGE_CURVE('',#54723,#54875,#54964,.T.); +#54964 = LINE('',#54965,#54966); +#54965 = CARTESIAN_POINT('',(0.934677037642,0.709677037642, + 0.906739943701)); +#54966 = VECTOR('',#54967,1.); +#54967 = DIRECTION('',(-0.137844537492,-0.137844537492,-0.980814848464) + ); +#54968 = ORIENTED_EDGE('',*,*,#54722,.T.); +#54969 = ORIENTED_EDGE('',*,*,#54970,.T.); +#54970 = EDGE_CURVE('',#54715,#54755,#54971,.T.); +#54971 = LINE('',#54972,#54973); +#54972 = CARTESIAN_POINT('',(0.9,0.2,0.66)); +#54973 = VECTOR('',#54974,1.); +#54974 = DIRECTION('',(-0.,-1.,-0.)); +#54975 = ORIENTED_EDGE('',*,*,#54754,.T.); +#54976 = PLANE('',#54977); +#54977 = AXIS2_PLACEMENT_3D('',#54978,#54979,#54980); +#54978 = CARTESIAN_POINT('',(0.9,2.5,0.66)); +#54979 = DIRECTION('',(-0.990268068742,0.,0.13917310096)); +#54980 = DIRECTION('',(0.13917310096,0.,0.990268068742)); +#54981 = ADVANCED_FACE('',(#54982),#54993,.T.); +#54982 = FACE_BOUND('',#54983,.T.); +#54983 = EDGE_LOOP('',(#54984,#54985,#54991,#54992)); +#54984 = ORIENTED_EDGE('',*,*,#54910,.T.); +#54985 = ORIENTED_EDGE('',*,*,#54986,.T.); +#54986 = EDGE_CURVE('',#54803,#54723,#54987,.T.); +#54987 = LINE('',#54988,#54989); +#54988 = CARTESIAN_POINT('',(-0.9,0.675,0.66)); +#54989 = VECTOR('',#54990,1.); +#54990 = DIRECTION('',(1.,-0.,-0.)); +#54991 = ORIENTED_EDGE('',*,*,#54963,.T.); +#54992 = ORIENTED_EDGE('',*,*,#54874,.F.); +#54993 = PLANE('',#54994); +#54994 = AXIS2_PLACEMENT_3D('',#54995,#54996,#54997); +#54995 = CARTESIAN_POINT('',(-0.9,0.675,0.66)); +#54996 = DIRECTION('',(0.,0.990268068742,-0.13917310096)); +#54997 = DIRECTION('',(0.,0.13917310096,0.990268068742)); +#54998 = ADVANCED_FACE('',(#54999),#55019,.T.); +#54999 = FACE_BOUND('',#55000,.T.); +#55000 = EDGE_LOOP('',(#55001,#55009,#55010,#55011,#55012,#55013)); +#55001 = ORIENTED_EDGE('',*,*,#55002,.F.); +#55002 = EDGE_CURVE('',#54926,#55003,#55005,.T.); +#55003 = VERTEX_POINT('',#55004); +#55004 = CARTESIAN_POINT('',(-0.3,0.613302573566,1.099)); +#55005 = LINE('',#55006,#55007); +#55006 = CARTESIAN_POINT('',(-0.3,0.613162032731,1.1)); +#55007 = VECTOR('',#55008,1.); +#55008 = DIRECTION('',(0.,0.13917310096,-0.990268068742)); +#55009 = ORIENTED_EDGE('',*,*,#54925,.T.); +#55010 = ORIENTED_EDGE('',*,*,#54730,.T.); +#55011 = ORIENTED_EDGE('',*,*,#54986,.F.); +#55012 = ORIENTED_EDGE('',*,*,#54802,.T.); +#55013 = ORIENTED_EDGE('',*,*,#55014,.F.); +#55014 = EDGE_CURVE('',#55003,#54795,#55015,.T.); +#55015 = LINE('',#55016,#55017); +#55016 = CARTESIAN_POINT('',(-0.9,0.613302573566,1.099)); +#55017 = VECTOR('',#55018,1.); +#55018 = DIRECTION('',(-1.,0.,0.)); +#55019 = PLANE('',#55020); +#55020 = AXIS2_PLACEMENT_3D('',#55021,#55022,#55023); +#55021 = CARTESIAN_POINT('',(-0.9,0.613162032731,1.1)); +#55022 = DIRECTION('',(0.,0.990268068742,0.13917310096)); +#55023 = DIRECTION('',(0.,-0.13917310096,0.990268068742)); +#55024 = ADVANCED_FACE('',(#55025),#55050,.T.); +#55025 = FACE_BOUND('',#55026,.T.); +#55026 = EDGE_LOOP('',(#55027,#55035,#55041,#55042,#55048,#55049)); +#55027 = ORIENTED_EDGE('',*,*,#55028,.F.); +#55028 = EDGE_CURVE('',#55029,#54934,#55031,.T.); +#55029 = VERTEX_POINT('',#55030); +#55030 = CARTESIAN_POINT('',(-0.3,-0.613302573566,1.099)); +#55031 = LINE('',#55032,#55033); +#55032 = CARTESIAN_POINT('',(-0.3,-0.675,0.66)); +#55033 = VECTOR('',#55034,1.); +#55034 = DIRECTION('',(0.,0.13917310096,0.990268068742)); +#55035 = ORIENTED_EDGE('',*,*,#55036,.F.); +#55036 = EDGE_CURVE('',#54785,#55029,#55037,.T.); +#55037 = LINE('',#55038,#55039); +#55038 = CARTESIAN_POINT('',(-0.9,-0.613302573566,1.099)); +#55039 = VECTOR('',#55040,1.); +#55040 = DIRECTION('',(1.,0.,0.)); +#55041 = ORIENTED_EDGE('',*,*,#54784,.T.); +#55042 = ORIENTED_EDGE('',*,*,#55043,.T.); +#55043 = EDGE_CURVE('',#54787,#54747,#55044,.T.); +#55044 = LINE('',#55045,#55046); +#55045 = CARTESIAN_POINT('',(-0.9,-0.675,0.66)); +#55046 = VECTOR('',#55047,1.); +#55047 = DIRECTION('',(1.,-0.,-0.)); +#55048 = ORIENTED_EDGE('',*,*,#54746,.T.); +#55049 = ORIENTED_EDGE('',*,*,#54941,.F.); +#55050 = PLANE('',#55051); +#55051 = AXIS2_PLACEMENT_3D('',#55052,#55053,#55054); +#55052 = CARTESIAN_POINT('',(-0.9,-0.675,0.66)); +#55053 = DIRECTION('',(0.,-0.990268068742,0.13917310096)); +#55054 = DIRECTION('',(0.,-0.13917310096,-0.990268068742)); +#55055 = ADVANCED_FACE('',(#55056),#55062,.T.); +#55056 = FACE_BOUND('',#55057,.T.); +#55057 = EDGE_LOOP('',(#55058,#55059,#55060,#55061)); +#55058 = ORIENTED_EDGE('',*,*,#54896,.T.); +#55059 = ORIENTED_EDGE('',*,*,#54856,.T.); +#55060 = ORIENTED_EDGE('',*,*,#54956,.T.); +#55061 = ORIENTED_EDGE('',*,*,#55043,.F.); +#55062 = PLANE('',#55063); +#55063 = AXIS2_PLACEMENT_3D('',#55064,#55065,#55066); +#55064 = CARTESIAN_POINT('',(-0.9,-0.589270090832,5.E-02)); +#55065 = DIRECTION('',(0.,-0.990268068742,-0.13917310096)); +#55066 = DIRECTION('',(0.,0.13917310096,-0.990268068742)); +#55067 = ADVANCED_FACE('',(#55068),#55093,.F.); +#55068 = FACE_BOUND('',#55069,.T.); +#55069 = EDGE_LOOP('',(#55070,#55078,#55079,#55087)); +#55070 = ORIENTED_EDGE('',*,*,#55071,.T.); +#55071 = EDGE_CURVE('',#55072,#54827,#55074,.T.); +#55072 = VERTEX_POINT('',#55073); +#55073 = CARTESIAN_POINT('',(-0.91,-0.2,0.81)); +#55074 = LINE('',#55075,#55076); +#55075 = CARTESIAN_POINT('',(-0.91,-0.2,0.81)); +#55076 = VECTOR('',#55077,1.); +#55077 = DIRECTION('',(1.,0.,3.488297689746E-15)); +#55078 = ORIENTED_EDGE('',*,*,#54826,.F.); +#55079 = ORIENTED_EDGE('',*,*,#55080,.F.); +#55080 = EDGE_CURVE('',#55081,#54819,#55083,.T.); +#55081 = VERTEX_POINT('',#55082); +#55082 = CARTESIAN_POINT('',(-0.91,0.2,0.81)); +#55083 = LINE('',#55084,#55085); +#55084 = CARTESIAN_POINT('',(-0.91,0.2,0.81)); +#55085 = VECTOR('',#55086,1.); +#55086 = DIRECTION('',(1.,0.,3.488297689746E-15)); +#55087 = ORIENTED_EDGE('',*,*,#55088,.T.); +#55088 = EDGE_CURVE('',#55081,#55072,#55089,.T.); +#55089 = LINE('',#55090,#55091); +#55090 = CARTESIAN_POINT('',(-0.91,0.2,0.81)); +#55091 = VECTOR('',#55092,1.); +#55092 = DIRECTION('',(-0.,-1.,-0.)); +#55093 = PLANE('',#55094); +#55094 = AXIS2_PLACEMENT_3D('',#55095,#55096,#55097); +#55095 = CARTESIAN_POINT('',(-0.91,0.2,0.81)); +#55096 = DIRECTION('',(3.488297689746E-15,0.,-1.)); +#55097 = DIRECTION('',(-1.,0.,-3.488297689746E-15)); +#55098 = ADVANCED_FACE('',(#55099),#55124,.F.); +#55099 = FACE_BOUND('',#55100,.T.); +#55100 = EDGE_LOOP('',(#55101,#55109,#55117,#55123)); +#55101 = ORIENTED_EDGE('',*,*,#55102,.T.); +#55102 = EDGE_CURVE('',#54835,#55103,#55105,.T.); +#55103 = VERTEX_POINT('',#55104); +#55104 = CARTESIAN_POINT('',(-0.91,-0.2,0.66)); +#55105 = LINE('',#55106,#55107); +#55106 = CARTESIAN_POINT('',(-0.9,-0.2,0.66)); +#55107 = VECTOR('',#55108,1.); +#55108 = DIRECTION('',(-1.,0.,-1.084202172486E-14)); +#55109 = ORIENTED_EDGE('',*,*,#55110,.F.); +#55110 = EDGE_CURVE('',#55111,#55103,#55113,.T.); +#55111 = VERTEX_POINT('',#55112); +#55112 = CARTESIAN_POINT('',(-0.91,0.2,0.66)); +#55113 = LINE('',#55114,#55115); +#55114 = CARTESIAN_POINT('',(-0.91,0.2,0.66)); +#55115 = VECTOR('',#55116,1.); +#55116 = DIRECTION('',(-0.,-1.,-0.)); +#55117 = ORIENTED_EDGE('',*,*,#55118,.F.); +#55118 = EDGE_CURVE('',#54811,#55111,#55119,.T.); +#55119 = LINE('',#55120,#55121); +#55120 = CARTESIAN_POINT('',(-0.9,0.2,0.66)); +#55121 = VECTOR('',#55122,1.); +#55122 = DIRECTION('',(-1.,0.,-1.084202172486E-14)); +#55123 = ORIENTED_EDGE('',*,*,#54903,.T.); +#55124 = PLANE('',#55125); +#55125 = AXIS2_PLACEMENT_3D('',#55126,#55127,#55128); +#55126 = CARTESIAN_POINT('',(-0.9,0.2,0.66)); +#55127 = DIRECTION('',(-1.084202172486E-14,0.,1.)); +#55128 = DIRECTION('',(1.,0.,1.084202172486E-14)); +#55129 = ADVANCED_FACE('',(#55130),#55157,.F.); +#55130 = FACE_BOUND('',#55131,.F.); +#55131 = EDGE_LOOP('',(#55132,#55133,#55142,#55150)); +#55132 = ORIENTED_EDGE('',*,*,#55110,.F.); +#55133 = ORIENTED_EDGE('',*,*,#55134,.T.); +#55134 = EDGE_CURVE('',#55111,#55135,#55137,.T.); +#55135 = VERTEX_POINT('',#55136); +#55136 = CARTESIAN_POINT('',(-0.96,0.2,0.61)); +#55137 = CIRCLE('',#55138,5.E-02); +#55138 = AXIS2_PLACEMENT_3D('',#55139,#55140,#55141); +#55139 = CARTESIAN_POINT('',(-0.91,0.2,0.61)); +#55140 = DIRECTION('',(0.,-1.,0.)); +#55141 = DIRECTION('',(0.,0.,-1.)); +#55142 = ORIENTED_EDGE('',*,*,#55143,.T.); +#55143 = EDGE_CURVE('',#55135,#55144,#55146,.T.); +#55144 = VERTEX_POINT('',#55145); +#55145 = CARTESIAN_POINT('',(-0.96,-0.2,0.61)); +#55146 = LINE('',#55147,#55148); +#55147 = CARTESIAN_POINT('',(-0.96,0.2,0.61)); +#55148 = VECTOR('',#55149,1.); +#55149 = DIRECTION('',(-0.,-1.,-0.)); +#55150 = ORIENTED_EDGE('',*,*,#55151,.F.); +#55151 = EDGE_CURVE('',#55103,#55144,#55152,.T.); +#55152 = CIRCLE('',#55153,5.E-02); +#55153 = AXIS2_PLACEMENT_3D('',#55154,#55155,#55156); +#55154 = CARTESIAN_POINT('',(-0.91,-0.2,0.61)); +#55155 = DIRECTION('',(0.,-1.,0.)); +#55156 = DIRECTION('',(0.,0.,-1.)); +#55157 = CYLINDRICAL_SURFACE('',#55158,5.E-02); +#55158 = AXIS2_PLACEMENT_3D('',#55159,#55160,#55161); +#55159 = CARTESIAN_POINT('',(-0.91,0.2,0.61)); +#55160 = DIRECTION('',(-0.,-1.,-0.)); +#55161 = DIRECTION('',(0.,0.,-1.)); +#55162 = ADVANCED_FACE('',(#55163),#55188,.F.); +#55163 = FACE_BOUND('',#55164,.T.); +#55164 = EDGE_LOOP('',(#55165,#55173,#55181,#55187)); +#55165 = ORIENTED_EDGE('',*,*,#55166,.T.); +#55166 = EDGE_CURVE('',#55144,#55167,#55169,.T.); +#55167 = VERTEX_POINT('',#55168); +#55168 = CARTESIAN_POINT('',(-0.96,-0.2,0.209546456115)); +#55169 = LINE('',#55170,#55171); +#55170 = CARTESIAN_POINT('',(-0.96,-0.2,0.61)); +#55171 = VECTOR('',#55172,1.); +#55172 = DIRECTION('',(0.,0.,-1.)); +#55173 = ORIENTED_EDGE('',*,*,#55174,.F.); +#55174 = EDGE_CURVE('',#55175,#55167,#55177,.T.); +#55175 = VERTEX_POINT('',#55176); +#55176 = CARTESIAN_POINT('',(-0.96,0.2,0.209546456115)); +#55177 = LINE('',#55178,#55179); +#55178 = CARTESIAN_POINT('',(-0.96,0.2,0.209546456115)); +#55179 = VECTOR('',#55180,1.); +#55180 = DIRECTION('',(-0.,-1.,-0.)); +#55181 = ORIENTED_EDGE('',*,*,#55182,.F.); +#55182 = EDGE_CURVE('',#55135,#55175,#55183,.T.); +#55183 = LINE('',#55184,#55185); +#55184 = CARTESIAN_POINT('',(-0.96,0.2,0.61)); +#55185 = VECTOR('',#55186,1.); +#55186 = DIRECTION('',(0.,0.,-1.)); +#55187 = ORIENTED_EDGE('',*,*,#55143,.T.); +#55188 = PLANE('',#55189); +#55189 = AXIS2_PLACEMENT_3D('',#55190,#55191,#55192); +#55190 = CARTESIAN_POINT('',(-0.96,0.2,0.61)); +#55191 = DIRECTION('',(-1.,0.,0.)); +#55192 = DIRECTION('',(0.,0.,1.)); +#55193 = ADVANCED_FACE('',(#55194),#55221,.T.); +#55194 = FACE_BOUND('',#55195,.T.); +#55195 = EDGE_LOOP('',(#55196,#55205,#55213,#55220)); +#55196 = ORIENTED_EDGE('',*,*,#55197,.T.); +#55197 = EDGE_CURVE('',#55167,#55198,#55200,.T.); +#55198 = VERTEX_POINT('',#55199); +#55199 = CARTESIAN_POINT('',(-1.146048705251,-0.2,1.003364606316E-02)); +#55200 = CIRCLE('',#55201,0.2); +#55201 = AXIS2_PLACEMENT_3D('',#55202,#55203,#55204); +#55202 = CARTESIAN_POINT('',(-1.16,-0.2,0.209546456115)); +#55203 = DIRECTION('',(0.,1.,0.)); +#55204 = DIRECTION('',(0.,-0.,1.)); +#55205 = ORIENTED_EDGE('',*,*,#55206,.F.); +#55206 = EDGE_CURVE('',#55207,#55198,#55209,.T.); +#55207 = VERTEX_POINT('',#55208); +#55208 = CARTESIAN_POINT('',(-1.146048705251,0.2,1.003364606316E-02)); +#55209 = LINE('',#55210,#55211); +#55210 = CARTESIAN_POINT('',(-1.146048705251,0.2,1.003364606316E-02)); +#55211 = VECTOR('',#55212,1.); +#55212 = DIRECTION('',(-0.,-1.,-0.)); +#55213 = ORIENTED_EDGE('',*,*,#55214,.F.); +#55214 = EDGE_CURVE('',#55175,#55207,#55215,.T.); +#55215 = CIRCLE('',#55216,0.2); +#55216 = AXIS2_PLACEMENT_3D('',#55217,#55218,#55219); +#55217 = CARTESIAN_POINT('',(-1.16,0.2,0.209546456115)); +#55218 = DIRECTION('',(0.,1.,0.)); +#55219 = DIRECTION('',(0.,-0.,1.)); +#55220 = ORIENTED_EDGE('',*,*,#55174,.T.); +#55221 = CYLINDRICAL_SURFACE('',#55222,0.2); +#55222 = AXIS2_PLACEMENT_3D('',#55223,#55224,#55225); +#55223 = CARTESIAN_POINT('',(-1.16,0.2,0.209546456115)); +#55224 = DIRECTION('',(-0.,-1.,-0.)); +#55225 = DIRECTION('',(0.,0.,-1.)); +#55226 = ADVANCED_FACE('',(#55227),#55252,.F.); +#55227 = FACE_BOUND('',#55228,.T.); +#55228 = EDGE_LOOP('',(#55229,#55237,#55245,#55251)); +#55229 = ORIENTED_EDGE('',*,*,#55230,.T.); +#55230 = EDGE_CURVE('',#55198,#55231,#55233,.T.); +#55231 = VERTEX_POINT('',#55232); +#55232 = CARTESIAN_POINT('',(-1.289536528938,-0.2,0.)); +#55233 = LINE('',#55234,#55235); +#55234 = CARTESIAN_POINT('',(-1.146048705251,-0.2,1.003364606316E-02)); +#55235 = VECTOR('',#55236,1.); +#55236 = DIRECTION('',(-0.99756405026,0.,-6.975647374412E-02)); +#55237 = ORIENTED_EDGE('',*,*,#55238,.F.); +#55238 = EDGE_CURVE('',#55239,#55231,#55241,.T.); +#55239 = VERTEX_POINT('',#55240); +#55240 = CARTESIAN_POINT('',(-1.289536528938,0.2,0.)); +#55241 = LINE('',#55242,#55243); +#55242 = CARTESIAN_POINT('',(-1.289536528938,0.2,0.)); +#55243 = VECTOR('',#55244,1.); +#55244 = DIRECTION('',(-0.,-1.,-0.)); +#55245 = ORIENTED_EDGE('',*,*,#55246,.F.); +#55246 = EDGE_CURVE('',#55207,#55239,#55247,.T.); +#55247 = LINE('',#55248,#55249); +#55248 = CARTESIAN_POINT('',(-1.146048705251,0.2,1.003364606316E-02)); +#55249 = VECTOR('',#55250,1.); +#55250 = DIRECTION('',(-0.99756405026,0.,-6.975647374412E-02)); +#55251 = ORIENTED_EDGE('',*,*,#55206,.T.); +#55252 = PLANE('',#55253); +#55253 = AXIS2_PLACEMENT_3D('',#55254,#55255,#55256); +#55254 = CARTESIAN_POINT('',(-1.146048705251,0.2,1.003364606316E-02)); +#55255 = DIRECTION('',(-6.975647374412E-02,0.,0.99756405026)); +#55256 = DIRECTION('',(0.99756405026,0.,6.975647374412E-02)); +#55257 = ADVANCED_FACE('',(#55258),#55283,.F.); +#55258 = FACE_BOUND('',#55259,.T.); +#55259 = EDGE_LOOP('',(#55260,#55268,#55276,#55282)); +#55260 = ORIENTED_EDGE('',*,*,#55261,.T.); +#55261 = EDGE_CURVE('',#55231,#55262,#55264,.T.); +#55262 = VERTEX_POINT('',#55263); +#55263 = CARTESIAN_POINT('',(-1.3,-0.2,0.149634607539)); +#55264 = LINE('',#55265,#55266); +#55265 = CARTESIAN_POINT('',(-1.289536528938,-0.2,0.)); +#55266 = VECTOR('',#55267,1.); +#55267 = DIRECTION('',(-6.975647374412E-02,0.,0.99756405026)); +#55268 = ORIENTED_EDGE('',*,*,#55269,.F.); +#55269 = EDGE_CURVE('',#55270,#55262,#55272,.T.); +#55270 = VERTEX_POINT('',#55271); +#55271 = CARTESIAN_POINT('',(-1.3,0.2,0.149634607539)); +#55272 = LINE('',#55273,#55274); +#55273 = CARTESIAN_POINT('',(-1.3,0.2,0.149634607539)); +#55274 = VECTOR('',#55275,1.); +#55275 = DIRECTION('',(-0.,-1.,-0.)); +#55276 = ORIENTED_EDGE('',*,*,#55277,.F.); +#55277 = EDGE_CURVE('',#55239,#55270,#55278,.T.); +#55278 = LINE('',#55279,#55280); +#55279 = CARTESIAN_POINT('',(-1.289536528938,0.2,0.)); +#55280 = VECTOR('',#55281,1.); +#55281 = DIRECTION('',(-6.975647374412E-02,0.,0.99756405026)); +#55282 = ORIENTED_EDGE('',*,*,#55238,.T.); +#55283 = PLANE('',#55284); +#55284 = AXIS2_PLACEMENT_3D('',#55285,#55286,#55287); +#55285 = CARTESIAN_POINT('',(-1.289536528938,0.2,0.)); +#55286 = DIRECTION('',(0.99756405026,-0.,6.975647374412E-02)); +#55287 = DIRECTION('',(6.975647374412E-02,0.,-0.99756405026)); +#55288 = ADVANCED_FACE('',(#55289),#55314,.F.); +#55289 = FACE_BOUND('',#55290,.T.); +#55290 = EDGE_LOOP('',(#55291,#55299,#55307,#55313)); +#55291 = ORIENTED_EDGE('',*,*,#55292,.T.); +#55292 = EDGE_CURVE('',#55262,#55293,#55295,.T.); +#55293 = VERTEX_POINT('',#55294); +#55294 = CARTESIAN_POINT('',(-1.156512176313,-0.2,0.159668253602)); +#55295 = LINE('',#55296,#55297); +#55296 = CARTESIAN_POINT('',(-1.3,-0.2,0.149634607539)); +#55297 = VECTOR('',#55298,1.); +#55298 = DIRECTION('',(0.99756405026,0.,6.975647374412E-02)); +#55299 = ORIENTED_EDGE('',*,*,#55300,.F.); +#55300 = EDGE_CURVE('',#55301,#55293,#55303,.T.); +#55301 = VERTEX_POINT('',#55302); +#55302 = CARTESIAN_POINT('',(-1.156512176313,0.2,0.159668253602)); +#55303 = LINE('',#55304,#55305); +#55304 = CARTESIAN_POINT('',(-1.156512176313,0.2,0.159668253602)); +#55305 = VECTOR('',#55306,1.); +#55306 = DIRECTION('',(-0.,-1.,-0.)); +#55307 = ORIENTED_EDGE('',*,*,#55308,.F.); +#55308 = EDGE_CURVE('',#55270,#55301,#55309,.T.); +#55309 = LINE('',#55310,#55311); +#55310 = CARTESIAN_POINT('',(-1.3,0.2,0.149634607539)); +#55311 = VECTOR('',#55312,1.); +#55312 = DIRECTION('',(0.99756405026,0.,6.975647374412E-02)); +#55313 = ORIENTED_EDGE('',*,*,#55269,.T.); +#55314 = PLANE('',#55315); +#55315 = AXIS2_PLACEMENT_3D('',#55316,#55317,#55318); +#55316 = CARTESIAN_POINT('',(-1.3,0.2,0.149634607539)); +#55317 = DIRECTION('',(6.975647374412E-02,0.,-0.99756405026)); +#55318 = DIRECTION('',(-0.99756405026,0.,-6.975647374412E-02)); +#55319 = ADVANCED_FACE('',(#55320),#55347,.F.); +#55320 = FACE_BOUND('',#55321,.F.); +#55321 = EDGE_LOOP('',(#55322,#55323,#55332,#55340)); +#55322 = ORIENTED_EDGE('',*,*,#55300,.F.); +#55323 = ORIENTED_EDGE('',*,*,#55324,.T.); +#55324 = EDGE_CURVE('',#55301,#55325,#55327,.T.); +#55325 = VERTEX_POINT('',#55326); +#55326 = CARTESIAN_POINT('',(-1.11,0.2,0.209546456115)); +#55327 = CIRCLE('',#55328,5.E-02); +#55328 = AXIS2_PLACEMENT_3D('',#55329,#55330,#55331); +#55329 = CARTESIAN_POINT('',(-1.16,0.2,0.209546456115)); +#55330 = DIRECTION('',(0.,-1.,0.)); +#55331 = DIRECTION('',(0.,0.,-1.)); +#55332 = ORIENTED_EDGE('',*,*,#55333,.T.); +#55333 = EDGE_CURVE('',#55325,#55334,#55336,.T.); +#55334 = VERTEX_POINT('',#55335); +#55335 = CARTESIAN_POINT('',(-1.11,-0.2,0.209546456115)); +#55336 = LINE('',#55337,#55338); +#55337 = CARTESIAN_POINT('',(-1.11,0.2,0.209546456115)); +#55338 = VECTOR('',#55339,1.); +#55339 = DIRECTION('',(-0.,-1.,-0.)); +#55340 = ORIENTED_EDGE('',*,*,#55341,.F.); +#55341 = EDGE_CURVE('',#55293,#55334,#55342,.T.); +#55342 = CIRCLE('',#55343,5.E-02); +#55343 = AXIS2_PLACEMENT_3D('',#55344,#55345,#55346); +#55344 = CARTESIAN_POINT('',(-1.16,-0.2,0.209546456115)); +#55345 = DIRECTION('',(0.,-1.,0.)); +#55346 = DIRECTION('',(0.,0.,-1.)); +#55347 = CYLINDRICAL_SURFACE('',#55348,5.E-02); +#55348 = AXIS2_PLACEMENT_3D('',#55349,#55350,#55351); +#55349 = CARTESIAN_POINT('',(-1.16,0.2,0.209546456115)); +#55350 = DIRECTION('',(-0.,-1.,-0.)); +#55351 = DIRECTION('',(0.,0.,-1.)); +#55352 = ADVANCED_FACE('',(#55353),#55378,.F.); +#55353 = FACE_BOUND('',#55354,.T.); +#55354 = EDGE_LOOP('',(#55355,#55363,#55371,#55377)); +#55355 = ORIENTED_EDGE('',*,*,#55356,.T.); +#55356 = EDGE_CURVE('',#55334,#55357,#55359,.T.); +#55357 = VERTEX_POINT('',#55358); +#55358 = CARTESIAN_POINT('',(-1.11,-0.2,0.61)); +#55359 = LINE('',#55360,#55361); +#55360 = CARTESIAN_POINT('',(-1.11,-0.2,0.209546456115)); +#55361 = VECTOR('',#55362,1.); +#55362 = DIRECTION('',(5.414871158175E-16,0.,1.)); +#55363 = ORIENTED_EDGE('',*,*,#55364,.F.); +#55364 = EDGE_CURVE('',#55365,#55357,#55367,.T.); +#55365 = VERTEX_POINT('',#55366); +#55366 = CARTESIAN_POINT('',(-1.11,0.2,0.61)); +#55367 = LINE('',#55368,#55369); +#55368 = CARTESIAN_POINT('',(-1.11,0.2,0.61)); +#55369 = VECTOR('',#55370,1.); +#55370 = DIRECTION('',(-0.,-1.,-0.)); +#55371 = ORIENTED_EDGE('',*,*,#55372,.F.); +#55372 = EDGE_CURVE('',#55325,#55365,#55373,.T.); +#55373 = LINE('',#55374,#55375); +#55374 = CARTESIAN_POINT('',(-1.11,0.2,0.209546456115)); +#55375 = VECTOR('',#55376,1.); +#55376 = DIRECTION('',(5.414871158175E-16,0.,1.)); +#55377 = ORIENTED_EDGE('',*,*,#55333,.T.); +#55378 = PLANE('',#55379); +#55379 = AXIS2_PLACEMENT_3D('',#55380,#55381,#55382); +#55380 = CARTESIAN_POINT('',(-1.11,0.2,0.209546456115)); +#55381 = DIRECTION('',(1.,0.,-5.414871158175E-16)); +#55382 = DIRECTION('',(-5.414871158175E-16,0.,-1.)); +#55383 = ADVANCED_FACE('',(#55384),#55402,.T.); +#55384 = FACE_BOUND('',#55385,.T.); +#55385 = EDGE_LOOP('',(#55386,#55393,#55394,#55401)); +#55386 = ORIENTED_EDGE('',*,*,#55387,.T.); +#55387 = EDGE_CURVE('',#55357,#55072,#55388,.T.); +#55388 = CIRCLE('',#55389,0.2); +#55389 = AXIS2_PLACEMENT_3D('',#55390,#55391,#55392); +#55390 = CARTESIAN_POINT('',(-0.91,-0.2,0.61)); +#55391 = DIRECTION('',(0.,1.,0.)); +#55392 = DIRECTION('',(0.,-0.,1.)); +#55393 = ORIENTED_EDGE('',*,*,#55088,.F.); +#55394 = ORIENTED_EDGE('',*,*,#55395,.F.); +#55395 = EDGE_CURVE('',#55365,#55081,#55396,.T.); +#55396 = CIRCLE('',#55397,0.2); +#55397 = AXIS2_PLACEMENT_3D('',#55398,#55399,#55400); +#55398 = CARTESIAN_POINT('',(-0.91,0.2,0.61)); +#55399 = DIRECTION('',(0.,1.,0.)); +#55400 = DIRECTION('',(0.,-0.,1.)); +#55401 = ORIENTED_EDGE('',*,*,#55364,.T.); +#55402 = CYLINDRICAL_SURFACE('',#55403,0.2); +#55403 = AXIS2_PLACEMENT_3D('',#55404,#55405,#55406); +#55404 = CARTESIAN_POINT('',(-0.91,0.2,0.61)); +#55405 = DIRECTION('',(-0.,-1.,-0.)); +#55406 = DIRECTION('',(0.,0.,-1.)); +#55407 = ADVANCED_FACE('',(#55408),#55422,.F.); +#55408 = FACE_BOUND('',#55409,.T.); +#55409 = EDGE_LOOP('',(#55410,#55411,#55412,#55413,#55414,#55415,#55416, + #55417,#55418,#55419,#55420,#55421)); +#55410 = ORIENTED_EDGE('',*,*,#55080,.T.); +#55411 = ORIENTED_EDGE('',*,*,#54818,.T.); +#55412 = ORIENTED_EDGE('',*,*,#55118,.T.); +#55413 = ORIENTED_EDGE('',*,*,#55134,.T.); +#55414 = ORIENTED_EDGE('',*,*,#55182,.T.); +#55415 = ORIENTED_EDGE('',*,*,#55214,.T.); +#55416 = ORIENTED_EDGE('',*,*,#55246,.T.); +#55417 = ORIENTED_EDGE('',*,*,#55277,.T.); +#55418 = ORIENTED_EDGE('',*,*,#55308,.T.); +#55419 = ORIENTED_EDGE('',*,*,#55324,.T.); +#55420 = ORIENTED_EDGE('',*,*,#55372,.T.); +#55421 = ORIENTED_EDGE('',*,*,#55395,.T.); +#55422 = PLANE('',#55423); +#55423 = AXIS2_PLACEMENT_3D('',#55424,#55425,#55426); +#55424 = CARTESIAN_POINT('',(-0.91,0.2,0.61)); +#55425 = DIRECTION('',(0.,-1.,0.)); +#55426 = DIRECTION('',(0.,-0.,-1.)); +#55427 = ADVANCED_FACE('',(#55428),#55442,.T.); +#55428 = FACE_BOUND('',#55429,.T.); +#55429 = EDGE_LOOP('',(#55430,#55431,#55432,#55433,#55434,#55435,#55436, + #55437,#55438,#55439,#55440,#55441)); +#55430 = ORIENTED_EDGE('',*,*,#55071,.F.); +#55431 = ORIENTED_EDGE('',*,*,#55387,.F.); +#55432 = ORIENTED_EDGE('',*,*,#55356,.F.); +#55433 = ORIENTED_EDGE('',*,*,#55341,.F.); +#55434 = ORIENTED_EDGE('',*,*,#55292,.F.); +#55435 = ORIENTED_EDGE('',*,*,#55261,.F.); +#55436 = ORIENTED_EDGE('',*,*,#55230,.F.); +#55437 = ORIENTED_EDGE('',*,*,#55197,.F.); +#55438 = ORIENTED_EDGE('',*,*,#55166,.F.); +#55439 = ORIENTED_EDGE('',*,*,#55151,.F.); +#55440 = ORIENTED_EDGE('',*,*,#55102,.F.); +#55441 = ORIENTED_EDGE('',*,*,#54834,.F.); +#55442 = PLANE('',#55443); +#55443 = AXIS2_PLACEMENT_3D('',#55444,#55445,#55446); +#55444 = CARTESIAN_POINT('',(-0.91,-0.2,0.61)); +#55445 = DIRECTION('',(0.,-1.,0.)); +#55446 = DIRECTION('',(0.,-0.,-1.)); +#55447 = ADVANCED_FACE('',(#55448),#55473,.T.); +#55448 = FACE_BOUND('',#55449,.T.); +#55449 = EDGE_LOOP('',(#55450,#55458,#55466,#55472)); +#55450 = ORIENTED_EDGE('',*,*,#55451,.F.); +#55451 = EDGE_CURVE('',#55452,#54763,#55454,.T.); +#55452 = VERTEX_POINT('',#55453); +#55453 = CARTESIAN_POINT('',(0.91,-0.2,0.81)); +#55454 = LINE('',#55455,#55456); +#55455 = CARTESIAN_POINT('',(0.91,-0.2,0.81)); +#55456 = VECTOR('',#55457,1.); +#55457 = DIRECTION('',(-1.,0.,3.488297689746E-15)); +#55458 = ORIENTED_EDGE('',*,*,#55459,.F.); +#55459 = EDGE_CURVE('',#55460,#55452,#55462,.T.); +#55460 = VERTEX_POINT('',#55461); +#55461 = CARTESIAN_POINT('',(0.91,0.2,0.81)); +#55462 = LINE('',#55463,#55464); +#55463 = CARTESIAN_POINT('',(0.91,0.2,0.81)); +#55464 = VECTOR('',#55465,1.); +#55465 = DIRECTION('',(-0.,-1.,-0.)); +#55466 = ORIENTED_EDGE('',*,*,#55467,.T.); +#55467 = EDGE_CURVE('',#55460,#54713,#55468,.T.); +#55468 = LINE('',#55469,#55470); +#55469 = CARTESIAN_POINT('',(0.91,0.2,0.81)); +#55470 = VECTOR('',#55471,1.); +#55471 = DIRECTION('',(-1.,0.,3.488297689746E-15)); +#55472 = ORIENTED_EDGE('',*,*,#54770,.T.); +#55473 = PLANE('',#55474); +#55474 = AXIS2_PLACEMENT_3D('',#55475,#55476,#55477); +#55475 = CARTESIAN_POINT('',(0.91,0.2,0.81)); +#55476 = DIRECTION('',(3.488297689746E-15,-0.,1.)); +#55477 = DIRECTION('',(1.,0.,-3.488297689746E-15)); +#55478 = ADVANCED_FACE('',(#55479),#55506,.T.); +#55479 = FACE_BOUND('',#55480,.T.); +#55480 = EDGE_LOOP('',(#55481,#55490,#55498,#55505)); +#55481 = ORIENTED_EDGE('',*,*,#55482,.F.); +#55482 = EDGE_CURVE('',#55483,#55452,#55485,.T.); +#55483 = VERTEX_POINT('',#55484); +#55484 = CARTESIAN_POINT('',(1.11,-0.2,0.61)); +#55485 = CIRCLE('',#55486,0.2); +#55486 = AXIS2_PLACEMENT_3D('',#55487,#55488,#55489); +#55487 = CARTESIAN_POINT('',(0.91,-0.2,0.61)); +#55488 = DIRECTION('',(0.,-1.,0.)); +#55489 = DIRECTION('',(0.,0.,1.)); +#55490 = ORIENTED_EDGE('',*,*,#55491,.F.); +#55491 = EDGE_CURVE('',#55492,#55483,#55494,.T.); +#55492 = VERTEX_POINT('',#55493); +#55493 = CARTESIAN_POINT('',(1.11,0.2,0.61)); +#55494 = LINE('',#55495,#55496); +#55495 = CARTESIAN_POINT('',(1.11,0.2,0.61)); +#55496 = VECTOR('',#55497,1.); +#55497 = DIRECTION('',(-0.,-1.,-0.)); +#55498 = ORIENTED_EDGE('',*,*,#55499,.T.); +#55499 = EDGE_CURVE('',#55492,#55460,#55500,.T.); +#55500 = CIRCLE('',#55501,0.2); +#55501 = AXIS2_PLACEMENT_3D('',#55502,#55503,#55504); +#55502 = CARTESIAN_POINT('',(0.91,0.2,0.61)); +#55503 = DIRECTION('',(0.,-1.,0.)); +#55504 = DIRECTION('',(0.,0.,1.)); +#55505 = ORIENTED_EDGE('',*,*,#55459,.T.); +#55506 = CYLINDRICAL_SURFACE('',#55507,0.2); +#55507 = AXIS2_PLACEMENT_3D('',#55508,#55509,#55510); +#55508 = CARTESIAN_POINT('',(0.91,0.2,0.61)); +#55509 = DIRECTION('',(-0.,-1.,-0.)); +#55510 = DIRECTION('',(0.,0.,-1.)); +#55511 = ADVANCED_FACE('',(#55512),#55537,.T.); +#55512 = FACE_BOUND('',#55513,.T.); +#55513 = EDGE_LOOP('',(#55514,#55522,#55530,#55536)); +#55514 = ORIENTED_EDGE('',*,*,#55515,.F.); +#55515 = EDGE_CURVE('',#55516,#55483,#55518,.T.); +#55516 = VERTEX_POINT('',#55517); +#55517 = CARTESIAN_POINT('',(1.11,-0.2,0.209546456115)); +#55518 = LINE('',#55519,#55520); +#55519 = CARTESIAN_POINT('',(1.11,-0.2,0.209546456115)); +#55520 = VECTOR('',#55521,1.); +#55521 = DIRECTION('',(-5.414871158175E-16,0.,1.)); +#55522 = ORIENTED_EDGE('',*,*,#55523,.F.); +#55523 = EDGE_CURVE('',#55524,#55516,#55526,.T.); +#55524 = VERTEX_POINT('',#55525); +#55525 = CARTESIAN_POINT('',(1.11,0.2,0.209546456115)); +#55526 = LINE('',#55527,#55528); +#55527 = CARTESIAN_POINT('',(1.11,0.2,0.209546456115)); +#55528 = VECTOR('',#55529,1.); +#55529 = DIRECTION('',(-0.,-1.,-0.)); +#55530 = ORIENTED_EDGE('',*,*,#55531,.T.); +#55531 = EDGE_CURVE('',#55524,#55492,#55532,.T.); +#55532 = LINE('',#55533,#55534); +#55533 = CARTESIAN_POINT('',(1.11,0.2,0.209546456115)); +#55534 = VECTOR('',#55535,1.); +#55535 = DIRECTION('',(-5.414871158175E-16,0.,1.)); +#55536 = ORIENTED_EDGE('',*,*,#55491,.T.); +#55537 = PLANE('',#55538); +#55538 = AXIS2_PLACEMENT_3D('',#55539,#55540,#55541); +#55539 = CARTESIAN_POINT('',(1.11,0.2,0.209546456115)); +#55540 = DIRECTION('',(1.,-0.,5.414871158175E-16)); +#55541 = DIRECTION('',(5.414871158175E-16,0.,-1.)); +#55542 = ADVANCED_FACE('',(#55543),#55570,.F.); +#55543 = FACE_BOUND('',#55544,.F.); +#55544 = EDGE_LOOP('',(#55545,#55546,#55555,#55563)); +#55545 = ORIENTED_EDGE('',*,*,#55523,.F.); +#55546 = ORIENTED_EDGE('',*,*,#55547,.F.); +#55547 = EDGE_CURVE('',#55548,#55524,#55550,.T.); +#55548 = VERTEX_POINT('',#55549); +#55549 = CARTESIAN_POINT('',(1.156512176313,0.2,0.159668253602)); +#55550 = CIRCLE('',#55551,5.E-02); +#55551 = AXIS2_PLACEMENT_3D('',#55552,#55553,#55554); +#55552 = CARTESIAN_POINT('',(1.16,0.2,0.209546456115)); +#55553 = DIRECTION('',(-0.,1.,0.)); +#55554 = DIRECTION('',(0.,0.,-1.)); +#55555 = ORIENTED_EDGE('',*,*,#55556,.T.); +#55556 = EDGE_CURVE('',#55548,#55557,#55559,.T.); +#55557 = VERTEX_POINT('',#55558); +#55558 = CARTESIAN_POINT('',(1.156512176313,-0.2,0.159668253602)); +#55559 = LINE('',#55560,#55561); +#55560 = CARTESIAN_POINT('',(1.156512176313,0.2,0.159668253602)); +#55561 = VECTOR('',#55562,1.); +#55562 = DIRECTION('',(-0.,-1.,-0.)); +#55563 = ORIENTED_EDGE('',*,*,#55564,.T.); +#55564 = EDGE_CURVE('',#55557,#55516,#55565,.T.); +#55565 = CIRCLE('',#55566,5.E-02); +#55566 = AXIS2_PLACEMENT_3D('',#55567,#55568,#55569); +#55567 = CARTESIAN_POINT('',(1.16,-0.2,0.209546456115)); +#55568 = DIRECTION('',(-0.,1.,0.)); +#55569 = DIRECTION('',(0.,0.,-1.)); +#55570 = CYLINDRICAL_SURFACE('',#55571,5.E-02); +#55571 = AXIS2_PLACEMENT_3D('',#55572,#55573,#55574); +#55572 = CARTESIAN_POINT('',(1.16,0.2,0.209546456115)); +#55573 = DIRECTION('',(-0.,-1.,-0.)); +#55574 = DIRECTION('',(0.,0.,-1.)); +#55575 = ADVANCED_FACE('',(#55576),#55601,.T.); +#55576 = FACE_BOUND('',#55577,.T.); +#55577 = EDGE_LOOP('',(#55578,#55586,#55594,#55600)); +#55578 = ORIENTED_EDGE('',*,*,#55579,.F.); +#55579 = EDGE_CURVE('',#55580,#55557,#55582,.T.); +#55580 = VERTEX_POINT('',#55581); +#55581 = CARTESIAN_POINT('',(1.3,-0.2,0.149634607539)); +#55582 = LINE('',#55583,#55584); +#55583 = CARTESIAN_POINT('',(1.3,-0.2,0.149634607539)); +#55584 = VECTOR('',#55585,1.); +#55585 = DIRECTION('',(-0.99756405026,0.,6.975647374412E-02)); +#55586 = ORIENTED_EDGE('',*,*,#55587,.F.); +#55587 = EDGE_CURVE('',#55588,#55580,#55590,.T.); +#55588 = VERTEX_POINT('',#55589); +#55589 = CARTESIAN_POINT('',(1.3,0.2,0.149634607539)); +#55590 = LINE('',#55591,#55592); +#55591 = CARTESIAN_POINT('',(1.3,0.2,0.149634607539)); +#55592 = VECTOR('',#55593,1.); +#55593 = DIRECTION('',(-0.,-1.,-0.)); +#55594 = ORIENTED_EDGE('',*,*,#55595,.T.); +#55595 = EDGE_CURVE('',#55588,#55548,#55596,.T.); +#55596 = LINE('',#55597,#55598); +#55597 = CARTESIAN_POINT('',(1.3,0.2,0.149634607539)); +#55598 = VECTOR('',#55599,1.); +#55599 = DIRECTION('',(-0.99756405026,0.,6.975647374412E-02)); +#55600 = ORIENTED_EDGE('',*,*,#55556,.T.); +#55601 = PLANE('',#55602); +#55602 = AXIS2_PLACEMENT_3D('',#55603,#55604,#55605); +#55603 = CARTESIAN_POINT('',(1.3,0.2,0.149634607539)); +#55604 = DIRECTION('',(6.975647374412E-02,-0.,0.99756405026)); +#55605 = DIRECTION('',(0.99756405026,0.,-6.975647374412E-02)); +#55606 = ADVANCED_FACE('',(#55607),#55632,.T.); +#55607 = FACE_BOUND('',#55608,.T.); +#55608 = EDGE_LOOP('',(#55609,#55617,#55625,#55631)); +#55609 = ORIENTED_EDGE('',*,*,#55610,.F.); +#55610 = EDGE_CURVE('',#55611,#55580,#55613,.T.); +#55611 = VERTEX_POINT('',#55612); +#55612 = CARTESIAN_POINT('',(1.289536528938,-0.2,0.)); +#55613 = LINE('',#55614,#55615); +#55614 = CARTESIAN_POINT('',(1.289536528938,-0.2,0.)); +#55615 = VECTOR('',#55616,1.); +#55616 = DIRECTION('',(6.975647374412E-02,0.,0.99756405026)); +#55617 = ORIENTED_EDGE('',*,*,#55618,.F.); +#55618 = EDGE_CURVE('',#55619,#55611,#55621,.T.); +#55619 = VERTEX_POINT('',#55620); +#55620 = CARTESIAN_POINT('',(1.289536528938,0.2,0.)); +#55621 = LINE('',#55622,#55623); +#55622 = CARTESIAN_POINT('',(1.289536528938,0.2,0.)); +#55623 = VECTOR('',#55624,1.); +#55624 = DIRECTION('',(-0.,-1.,-0.)); +#55625 = ORIENTED_EDGE('',*,*,#55626,.T.); +#55626 = EDGE_CURVE('',#55619,#55588,#55627,.T.); +#55627 = LINE('',#55628,#55629); +#55628 = CARTESIAN_POINT('',(1.289536528938,0.2,0.)); +#55629 = VECTOR('',#55630,1.); +#55630 = DIRECTION('',(6.975647374412E-02,0.,0.99756405026)); +#55631 = ORIENTED_EDGE('',*,*,#55587,.T.); +#55632 = PLANE('',#55633); +#55633 = AXIS2_PLACEMENT_3D('',#55634,#55635,#55636); +#55634 = CARTESIAN_POINT('',(1.289536528938,0.2,0.)); +#55635 = DIRECTION('',(0.99756405026,0.,-6.975647374412E-02)); +#55636 = DIRECTION('',(-6.975647374412E-02,0.,-0.99756405026)); +#55637 = ADVANCED_FACE('',(#55638),#55663,.T.); +#55638 = FACE_BOUND('',#55639,.T.); +#55639 = EDGE_LOOP('',(#55640,#55648,#55656,#55662)); +#55640 = ORIENTED_EDGE('',*,*,#55641,.F.); +#55641 = EDGE_CURVE('',#55642,#55611,#55644,.T.); +#55642 = VERTEX_POINT('',#55643); +#55643 = CARTESIAN_POINT('',(1.146048705251,-0.2,1.003364606316E-02)); +#55644 = LINE('',#55645,#55646); +#55645 = CARTESIAN_POINT('',(1.146048705251,-0.2,1.003364606316E-02)); +#55646 = VECTOR('',#55647,1.); +#55647 = DIRECTION('',(0.99756405026,0.,-6.975647374412E-02)); +#55648 = ORIENTED_EDGE('',*,*,#55649,.F.); +#55649 = EDGE_CURVE('',#55650,#55642,#55652,.T.); +#55650 = VERTEX_POINT('',#55651); +#55651 = CARTESIAN_POINT('',(1.146048705251,0.2,1.003364606316E-02)); +#55652 = LINE('',#55653,#55654); +#55653 = CARTESIAN_POINT('',(1.146048705251,0.2,1.003364606316E-02)); +#55654 = VECTOR('',#55655,1.); +#55655 = DIRECTION('',(-0.,-1.,-0.)); +#55656 = ORIENTED_EDGE('',*,*,#55657,.T.); +#55657 = EDGE_CURVE('',#55650,#55619,#55658,.T.); +#55658 = LINE('',#55659,#55660); +#55659 = CARTESIAN_POINT('',(1.146048705251,0.2,1.003364606316E-02)); +#55660 = VECTOR('',#55661,1.); +#55661 = DIRECTION('',(0.99756405026,0.,-6.975647374412E-02)); +#55662 = ORIENTED_EDGE('',*,*,#55618,.T.); +#55663 = PLANE('',#55664); +#55664 = AXIS2_PLACEMENT_3D('',#55665,#55666,#55667); +#55665 = CARTESIAN_POINT('',(1.146048705251,0.2,1.003364606316E-02)); +#55666 = DIRECTION('',(-6.975647374412E-02,0.,-0.99756405026)); +#55667 = DIRECTION('',(-0.99756405026,0.,6.975647374412E-02)); +#55668 = ADVANCED_FACE('',(#55669),#55696,.T.); +#55669 = FACE_BOUND('',#55670,.T.); +#55670 = EDGE_LOOP('',(#55671,#55680,#55688,#55695)); +#55671 = ORIENTED_EDGE('',*,*,#55672,.F.); +#55672 = EDGE_CURVE('',#55673,#55642,#55675,.T.); +#55673 = VERTEX_POINT('',#55674); +#55674 = CARTESIAN_POINT('',(0.96,-0.2,0.209546456115)); +#55675 = CIRCLE('',#55676,0.2); +#55676 = AXIS2_PLACEMENT_3D('',#55677,#55678,#55679); +#55677 = CARTESIAN_POINT('',(1.16,-0.2,0.209546456115)); +#55678 = DIRECTION('',(0.,-1.,0.)); +#55679 = DIRECTION('',(0.,0.,1.)); +#55680 = ORIENTED_EDGE('',*,*,#55681,.F.); +#55681 = EDGE_CURVE('',#55682,#55673,#55684,.T.); +#55682 = VERTEX_POINT('',#55683); +#55683 = CARTESIAN_POINT('',(0.96,0.2,0.209546456115)); +#55684 = LINE('',#55685,#55686); +#55685 = CARTESIAN_POINT('',(0.96,0.2,0.209546456115)); +#55686 = VECTOR('',#55687,1.); +#55687 = DIRECTION('',(-0.,-1.,-0.)); +#55688 = ORIENTED_EDGE('',*,*,#55689,.T.); +#55689 = EDGE_CURVE('',#55682,#55650,#55690,.T.); +#55690 = CIRCLE('',#55691,0.2); +#55691 = AXIS2_PLACEMENT_3D('',#55692,#55693,#55694); +#55692 = CARTESIAN_POINT('',(1.16,0.2,0.209546456115)); +#55693 = DIRECTION('',(0.,-1.,0.)); +#55694 = DIRECTION('',(0.,0.,1.)); +#55695 = ORIENTED_EDGE('',*,*,#55649,.T.); +#55696 = CYLINDRICAL_SURFACE('',#55697,0.2); +#55697 = AXIS2_PLACEMENT_3D('',#55698,#55699,#55700); +#55698 = CARTESIAN_POINT('',(1.16,0.2,0.209546456115)); +#55699 = DIRECTION('',(-0.,-1.,-0.)); +#55700 = DIRECTION('',(0.,0.,-1.)); +#55701 = ADVANCED_FACE('',(#55702),#55727,.T.); +#55702 = FACE_BOUND('',#55703,.T.); +#55703 = EDGE_LOOP('',(#55704,#55712,#55720,#55726)); +#55704 = ORIENTED_EDGE('',*,*,#55705,.F.); +#55705 = EDGE_CURVE('',#55706,#55673,#55708,.T.); +#55706 = VERTEX_POINT('',#55707); +#55707 = CARTESIAN_POINT('',(0.96,-0.2,0.61)); +#55708 = LINE('',#55709,#55710); +#55709 = CARTESIAN_POINT('',(0.96,-0.2,0.61)); +#55710 = VECTOR('',#55711,1.); +#55711 = DIRECTION('',(0.,0.,-1.)); +#55712 = ORIENTED_EDGE('',*,*,#55713,.F.); +#55713 = EDGE_CURVE('',#55714,#55706,#55716,.T.); +#55714 = VERTEX_POINT('',#55715); +#55715 = CARTESIAN_POINT('',(0.96,0.2,0.61)); +#55716 = LINE('',#55717,#55718); +#55717 = CARTESIAN_POINT('',(0.96,0.2,0.61)); +#55718 = VECTOR('',#55719,1.); +#55719 = DIRECTION('',(-0.,-1.,-0.)); +#55720 = ORIENTED_EDGE('',*,*,#55721,.T.); +#55721 = EDGE_CURVE('',#55714,#55682,#55722,.T.); +#55722 = LINE('',#55723,#55724); +#55723 = CARTESIAN_POINT('',(0.96,0.2,0.61)); +#55724 = VECTOR('',#55725,1.); +#55725 = DIRECTION('',(0.,0.,-1.)); +#55726 = ORIENTED_EDGE('',*,*,#55681,.T.); +#55727 = PLANE('',#55728); +#55728 = AXIS2_PLACEMENT_3D('',#55729,#55730,#55731); +#55729 = CARTESIAN_POINT('',(0.96,0.2,0.61)); +#55730 = DIRECTION('',(-1.,0.,0.)); +#55731 = DIRECTION('',(0.,0.,1.)); +#55732 = ADVANCED_FACE('',(#55733),#55760,.F.); +#55733 = FACE_BOUND('',#55734,.F.); +#55734 = EDGE_LOOP('',(#55735,#55736,#55745,#55753)); +#55735 = ORIENTED_EDGE('',*,*,#55713,.F.); +#55736 = ORIENTED_EDGE('',*,*,#55737,.F.); +#55737 = EDGE_CURVE('',#55738,#55714,#55740,.T.); +#55738 = VERTEX_POINT('',#55739); +#55739 = CARTESIAN_POINT('',(0.91,0.2,0.66)); +#55740 = CIRCLE('',#55741,5.E-02); +#55741 = AXIS2_PLACEMENT_3D('',#55742,#55743,#55744); +#55742 = CARTESIAN_POINT('',(0.91,0.2,0.61)); +#55743 = DIRECTION('',(-0.,1.,0.)); +#55744 = DIRECTION('',(0.,0.,-1.)); +#55745 = ORIENTED_EDGE('',*,*,#55746,.T.); +#55746 = EDGE_CURVE('',#55738,#55747,#55749,.T.); +#55747 = VERTEX_POINT('',#55748); +#55748 = CARTESIAN_POINT('',(0.91,-0.2,0.66)); +#55749 = LINE('',#55750,#55751); +#55750 = CARTESIAN_POINT('',(0.91,0.2,0.66)); +#55751 = VECTOR('',#55752,1.); +#55752 = DIRECTION('',(-0.,-1.,-0.)); +#55753 = ORIENTED_EDGE('',*,*,#55754,.T.); +#55754 = EDGE_CURVE('',#55747,#55706,#55755,.T.); +#55755 = CIRCLE('',#55756,5.E-02); +#55756 = AXIS2_PLACEMENT_3D('',#55757,#55758,#55759); +#55757 = CARTESIAN_POINT('',(0.91,-0.2,0.61)); +#55758 = DIRECTION('',(-0.,1.,0.)); +#55759 = DIRECTION('',(0.,0.,-1.)); +#55760 = CYLINDRICAL_SURFACE('',#55761,5.E-02); +#55761 = AXIS2_PLACEMENT_3D('',#55762,#55763,#55764); +#55762 = CARTESIAN_POINT('',(0.91,0.2,0.61)); +#55763 = DIRECTION('',(-0.,-1.,-0.)); +#55764 = DIRECTION('',(0.,0.,-1.)); +#55765 = ADVANCED_FACE('',(#55766),#55782,.T.); +#55766 = FACE_BOUND('',#55767,.T.); +#55767 = EDGE_LOOP('',(#55768,#55774,#55775,#55781)); +#55768 = ORIENTED_EDGE('',*,*,#55769,.F.); +#55769 = EDGE_CURVE('',#54755,#55747,#55770,.T.); +#55770 = LINE('',#55771,#55772); +#55771 = CARTESIAN_POINT('',(0.9,-0.2,0.66)); +#55772 = VECTOR('',#55773,1.); +#55773 = DIRECTION('',(1.,0.,-1.084202172486E-14)); +#55774 = ORIENTED_EDGE('',*,*,#54970,.F.); +#55775 = ORIENTED_EDGE('',*,*,#55776,.T.); +#55776 = EDGE_CURVE('',#54715,#55738,#55777,.T.); +#55777 = LINE('',#55778,#55779); +#55778 = CARTESIAN_POINT('',(0.9,0.2,0.66)); +#55779 = VECTOR('',#55780,1.); +#55780 = DIRECTION('',(1.,0.,-1.084202172486E-14)); +#55781 = ORIENTED_EDGE('',*,*,#55746,.T.); +#55782 = PLANE('',#55783); +#55783 = AXIS2_PLACEMENT_3D('',#55784,#55785,#55786); +#55784 = CARTESIAN_POINT('',(0.9,0.2,0.66)); +#55785 = DIRECTION('',(-1.084202172486E-14,0.,-1.)); +#55786 = DIRECTION('',(-1.,0.,1.084202172486E-14)); +#55787 = ADVANCED_FACE('',(#55788),#55802,.F.); +#55788 = FACE_BOUND('',#55789,.T.); +#55789 = EDGE_LOOP('',(#55790,#55791,#55792,#55793,#55794,#55795,#55796, + #55797,#55798,#55799,#55800,#55801)); +#55790 = ORIENTED_EDGE('',*,*,#55467,.F.); +#55791 = ORIENTED_EDGE('',*,*,#55499,.F.); +#55792 = ORIENTED_EDGE('',*,*,#55531,.F.); +#55793 = ORIENTED_EDGE('',*,*,#55547,.F.); +#55794 = ORIENTED_EDGE('',*,*,#55595,.F.); +#55795 = ORIENTED_EDGE('',*,*,#55626,.F.); +#55796 = ORIENTED_EDGE('',*,*,#55657,.F.); +#55797 = ORIENTED_EDGE('',*,*,#55689,.F.); +#55798 = ORIENTED_EDGE('',*,*,#55721,.F.); +#55799 = ORIENTED_EDGE('',*,*,#55737,.F.); +#55800 = ORIENTED_EDGE('',*,*,#55776,.F.); +#55801 = ORIENTED_EDGE('',*,*,#54712,.F.); +#55802 = PLANE('',#55803); +#55803 = AXIS2_PLACEMENT_3D('',#55804,#55805,#55806); +#55804 = CARTESIAN_POINT('',(0.91,0.2,0.61)); +#55805 = DIRECTION('',(0.,-1.,-0.)); +#55806 = DIRECTION('',(-0.,0.,-1.)); +#55807 = ADVANCED_FACE('',(#55808),#55822,.T.); +#55808 = FACE_BOUND('',#55809,.T.); +#55809 = EDGE_LOOP('',(#55810,#55811,#55812,#55813,#55814,#55815,#55816, + #55817,#55818,#55819,#55820,#55821)); +#55810 = ORIENTED_EDGE('',*,*,#55451,.T.); +#55811 = ORIENTED_EDGE('',*,*,#54762,.T.); +#55812 = ORIENTED_EDGE('',*,*,#55769,.T.); +#55813 = ORIENTED_EDGE('',*,*,#55754,.T.); +#55814 = ORIENTED_EDGE('',*,*,#55705,.T.); +#55815 = ORIENTED_EDGE('',*,*,#55672,.T.); +#55816 = ORIENTED_EDGE('',*,*,#55641,.T.); +#55817 = ORIENTED_EDGE('',*,*,#55610,.T.); +#55818 = ORIENTED_EDGE('',*,*,#55579,.T.); +#55819 = ORIENTED_EDGE('',*,*,#55564,.T.); +#55820 = ORIENTED_EDGE('',*,*,#55515,.T.); +#55821 = ORIENTED_EDGE('',*,*,#55482,.T.); +#55822 = PLANE('',#55823); +#55823 = AXIS2_PLACEMENT_3D('',#55824,#55825,#55826); +#55824 = CARTESIAN_POINT('',(0.91,-0.2,0.61)); +#55825 = DIRECTION('',(0.,-1.,-0.)); +#55826 = DIRECTION('',(-0.,0.,-1.)); +#55827 = ADVANCED_FACE('',(#55828),#55839,.F.); +#55828 = FACE_BOUND('',#55829,.T.); +#55829 = EDGE_LOOP('',(#55830,#55831,#55837,#55838)); +#55830 = ORIENTED_EDGE('',*,*,#55002,.T.); +#55831 = ORIENTED_EDGE('',*,*,#55832,.F.); +#55832 = EDGE_CURVE('',#55029,#55003,#55833,.T.); +#55833 = LINE('',#55834,#55835); +#55834 = CARTESIAN_POINT('',(-0.3,0.675,1.099)); +#55835 = VECTOR('',#55836,1.); +#55836 = DIRECTION('',(-0.,1.,-0.)); +#55837 = ORIENTED_EDGE('',*,*,#55028,.T.); +#55838 = ORIENTED_EDGE('',*,*,#54933,.T.); +#55839 = PLANE('',#55840); +#55840 = AXIS2_PLACEMENT_3D('',#55841,#55842,#55843); +#55841 = CARTESIAN_POINT('',(-0.3,0.675,1.099)); +#55842 = DIRECTION('',(1.,0.,0.)); +#55843 = DIRECTION('',(0.,0.,-1.)); +#55844 = ADVANCED_FACE('',(#55845),#55851,.F.); +#55845 = FACE_BOUND('',#55846,.T.); +#55846 = EDGE_LOOP('',(#55847,#55848,#55849,#55850)); +#55847 = ORIENTED_EDGE('',*,*,#55014,.T.); +#55848 = ORIENTED_EDGE('',*,*,#54794,.F.); +#55849 = ORIENTED_EDGE('',*,*,#55036,.T.); +#55850 = ORIENTED_EDGE('',*,*,#55832,.T.); +#55851 = PLANE('',#55852); +#55852 = AXIS2_PLACEMENT_3D('',#55853,#55854,#55855); +#55853 = CARTESIAN_POINT('',(0.,0.,1.099)); +#55854 = DIRECTION('',(0.,0.,-1.)); +#55855 = DIRECTION('',(-1.,0.,-0.)); +#55856 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#55860)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#55857,#55858,#55859)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#55857 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#55858 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#55859 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#55860 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#55857, + 'distance_accuracy_value','confusion accuracy'); +#55861 = SHAPE_DEFINITION_REPRESENTATION(#55862,#54705); +#55862 = PRODUCT_DEFINITION_SHAPE('','',#55863); +#55863 = PRODUCT_DEFINITION('design','',#55864,#55867); +#55864 = PRODUCT_DEFINITION_FORMATION('','',#55865); +#55865 = PRODUCT('SOD323','SOD323','',(#55866)); +#55866 = PRODUCT_CONTEXT('',#2,'mechanical'); +#55867 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#55868 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#55869,#55871); +#55869 = ( REPRESENTATION_RELATIONSHIP('','',#54705,#54695) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#55870) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#55870 = ITEM_DEFINED_TRANSFORMATION('','',#11,#54696); +#55871 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #55872); +#55872 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('73','','',#54690,#55863,$); +#55873 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#55865)); +#55874 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#55875,#55877); +#55875 = ( REPRESENTATION_RELATIONSHIP('','',#54695,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#55876) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#55876 = ITEM_DEFINED_TRANSFORMATION('','',#11,#99); +#55877 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #55878); +#55878 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('74','','',#5,#54690,$); +#55879 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#54692)); +#55880 = SHAPE_DEFINITION_REPRESENTATION(#55881,#55887); +#55881 = PRODUCT_DEFINITION_SHAPE('','',#55882); +#55882 = PRODUCT_DEFINITION('design','',#55883,#55886); +#55883 = PRODUCT_DEFINITION_FORMATION('','',#55884); +#55884 = PRODUCT('D2','D2','',(#55885)); +#55885 = PRODUCT_CONTEXT('',#2,'mechanical'); +#55886 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#55887 = SHAPE_REPRESENTATION('',(#11,#55888),#55892); +#55888 = AXIS2_PLACEMENT_3D('',#55889,#55890,#55891); +#55889 = CARTESIAN_POINT('',(301.20309448242,169.51412963867,0.)); +#55890 = DIRECTION('',(0.,0.,1.)); +#55891 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#55892 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#55896)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#55893,#55894,#55895)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#55893 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#55894 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#55895 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#55896 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#55893, + 'distance_accuracy_value','confusion accuracy'); +#55897 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#55898,#55900); +#55898 = ( REPRESENTATION_RELATIONSHIP('','',#54705,#55887) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#55899) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#55899 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55888); +#55900 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #55901); +#55901 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('75','','',#55882,#55863,$); +#55902 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#55903,#55905); +#55903 = ( REPRESENTATION_RELATIONSHIP('','',#55887,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#55904) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#55904 = ITEM_DEFINED_TRANSFORMATION('','',#11,#103); +#55905 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #55906); +#55906 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('76','','',#5,#55882,$); +#55907 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#55884)); +#55908 = SHAPE_DEFINITION_REPRESENTATION(#55909,#55915); +#55909 = PRODUCT_DEFINITION_SHAPE('','',#55910); +#55910 = PRODUCT_DEFINITION('design','',#55911,#55914); +#55911 = PRODUCT_DEFINITION_FORMATION('','',#55912); +#55912 = PRODUCT('D1','D1','',(#55913)); +#55913 = PRODUCT_CONTEXT('',#2,'mechanical'); +#55914 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#55915 = SHAPE_REPRESENTATION('',(#11,#55916),#55920); +#55916 = AXIS2_PLACEMENT_3D('',#55917,#55918,#55919); +#55917 = CARTESIAN_POINT('',(301.19311523437,171.17588806152,0.)); +#55918 = DIRECTION('',(0.,-0.,1.)); +#55919 = DIRECTION('',(1.,1.748455531469E-07,0.)); +#55920 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#55924)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#55921,#55922,#55923)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#55921 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#55922 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#55923 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#55924 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#55921, + 'distance_accuracy_value','confusion accuracy'); +#55925 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#55926,#55928); +#55926 = ( REPRESENTATION_RELATIONSHIP('','',#54705,#55915) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#55927) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#55927 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55916); +#55928 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #55929); +#55929 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('77','','',#55910,#55863,$); +#55930 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#55931,#55933); +#55931 = ( REPRESENTATION_RELATIONSHIP('','',#55915,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#55932) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#55932 = ITEM_DEFINED_TRANSFORMATION('','',#11,#107); +#55933 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #55934); +#55934 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('78','','',#5,#55910,$); +#55935 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#55912)); +#55936 = SHAPE_DEFINITION_REPRESENTATION(#55937,#55943); +#55937 = PRODUCT_DEFINITION_SHAPE('','',#55938); +#55938 = PRODUCT_DEFINITION('design','',#55939,#55942); +#55939 = PRODUCT_DEFINITION_FORMATION('','',#55940); +#55940 = PRODUCT('C14','C14','',(#55941)); +#55941 = PRODUCT_CONTEXT('',#2,'mechanical'); +#55942 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#55943 = SHAPE_REPRESENTATION('',(#11,#55944),#55948); +#55944 = AXIS2_PLACEMENT_3D('',#55945,#55946,#55947); +#55945 = CARTESIAN_POINT('',(303.63153076171,169.57572937011,0.)); +#55946 = DIRECTION('',(0.,0.,1.)); +#55947 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#55948 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#55952)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#55949,#55950,#55951)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#55949 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#55950 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#55951 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#55952 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#55949, + 'distance_accuracy_value','confusion accuracy'); +#55953 = SHAPE_DEFINITION_REPRESENTATION(#55954,#55960); +#55954 = PRODUCT_DEFINITION_SHAPE('','',#55955); +#55955 = PRODUCT_DEFINITION('design','',#55956,#55959); +#55956 = PRODUCT_DEFINITION_FORMATION('','',#55957); +#55957 = PRODUCT('6608420048','6608420048','',(#55958)); +#55958 = PRODUCT_CONTEXT('',#2,'mechanical'); +#55959 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#55960 = SHAPE_REPRESENTATION('',(#11,#55961,#55965),#55969); +#55961 = AXIS2_PLACEMENT_3D('',#55962,#55963,#55964); +#55962 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#55963 = DIRECTION('',(0.,0.,1.)); +#55964 = DIRECTION('',(1.,0.,0.)); +#55965 = AXIS2_PLACEMENT_3D('',#55966,#55967,#55968); +#55966 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#55967 = DIRECTION('',(0.,0.,1.)); +#55968 = DIRECTION('',(1.,0.,0.)); +#55969 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#55973)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#55970,#55971,#55972)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#55970 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#55971 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#55972 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#55973 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#55970, + 'distance_accuracy_value','confusion accuracy'); +#55974 = SHAPE_DEFINITION_REPRESENTATION(#55975,#55981); +#55975 = PRODUCT_DEFINITION_SHAPE('','',#55976); +#55976 = PRODUCT_DEFINITION('design','',#55977,#55980); +#55977 = PRODUCT_DEFINITION_FORMATION('','',#55978); +#55978 = PRODUCT('Terminal','Terminal','',(#55979)); +#55979 = PRODUCT_CONTEXT('',#2,'mechanical'); +#55980 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#55981 = SHAPE_REPRESENTATION('',(#11,#55982,#55986),#55990); +#55982 = AXIS2_PLACEMENT_3D('',#55983,#55984,#55985); +#55983 = CARTESIAN_POINT('',(0.,0.,0.)); +#55984 = DIRECTION('',(0.,0.,1.)); +#55985 = DIRECTION('',(1.,0.,0.)); +#55986 = AXIS2_PLACEMENT_3D('',#55987,#55988,#55989); +#55987 = CARTESIAN_POINT('',(0.,0.,0.)); +#55988 = DIRECTION('',(0.,0.,1.)); +#55989 = DIRECTION('',(1.,0.,0.)); +#55990 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#55994)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#55991,#55992,#55993)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#55991 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#55992 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#55993 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#55994 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#55991, + 'distance_accuracy_value','confusion accuracy'); +#55995 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#55996),#56450); +#55996 = MANIFOLD_SOLID_BREP('',#55997); +#55997 = CLOSED_SHELL('',(#55998,#56038,#56071,#56104,#56137,#56170, + #56187,#56204,#56235,#56266,#56283,#56314,#56331,#56362,#56380, + #56398,#56426,#56438)); +#55998 = ADVANCED_FACE('',(#55999),#56033,.F.); +#55999 = FACE_BOUND('',#56000,.F.); +#56000 = EDGE_LOOP('',(#56001,#56011,#56019,#56027)); +#56001 = ORIENTED_EDGE('',*,*,#56002,.F.); +#56002 = EDGE_CURVE('',#56003,#56005,#56007,.T.); +#56003 = VERTEX_POINT('',#56004); +#56004 = CARTESIAN_POINT('',(-6.938893903907E-18,5.E-02,5.E-02)); +#56005 = VERTEX_POINT('',#56006); +#56006 = CARTESIAN_POINT('',(-6.938893903907E-18,5.E-02,0.45)); +#56007 = LINE('',#56008,#56009); +#56008 = CARTESIAN_POINT('',(-6.938893903907E-18,5.E-02,0.)); +#56009 = VECTOR('',#56010,1.); +#56010 = DIRECTION('',(0.,0.,1.)); +#56011 = ORIENTED_EDGE('',*,*,#56012,.T.); +#56012 = EDGE_CURVE('',#56003,#56013,#56015,.T.); +#56013 = VERTEX_POINT('',#56014); +#56014 = CARTESIAN_POINT('',(-6.938893903907E-18,0.45,5.E-02)); +#56015 = LINE('',#56016,#56017); +#56016 = CARTESIAN_POINT('',(-6.938893903907E-18,0.,5.E-02)); +#56017 = VECTOR('',#56018,1.); +#56018 = DIRECTION('',(-0.,1.,0.)); +#56019 = ORIENTED_EDGE('',*,*,#56020,.T.); +#56020 = EDGE_CURVE('',#56013,#56021,#56023,.T.); +#56021 = VERTEX_POINT('',#56022); +#56022 = CARTESIAN_POINT('',(-6.938893903907E-18,0.45,0.45)); +#56023 = LINE('',#56024,#56025); +#56024 = CARTESIAN_POINT('',(-6.938893903907E-18,0.45,0.)); +#56025 = VECTOR('',#56026,1.); +#56026 = DIRECTION('',(0.,0.,1.)); +#56027 = ORIENTED_EDGE('',*,*,#56028,.F.); +#56028 = EDGE_CURVE('',#56005,#56021,#56029,.T.); +#56029 = LINE('',#56030,#56031); +#56030 = CARTESIAN_POINT('',(-6.938893903907E-18,0.,0.45)); +#56031 = VECTOR('',#56032,1.); +#56032 = DIRECTION('',(-0.,1.,0.)); +#56033 = PLANE('',#56034); +#56034 = AXIS2_PLACEMENT_3D('',#56035,#56036,#56037); +#56035 = CARTESIAN_POINT('',(0.,0.,0.)); +#56036 = DIRECTION('',(1.,0.,-0.)); +#56037 = DIRECTION('',(0.,0.,1.)); +#56038 = ADVANCED_FACE('',(#56039),#56066,.T.); +#56039 = FACE_BOUND('',#56040,.T.); +#56040 = EDGE_LOOP('',(#56041,#56042,#56051,#56059)); +#56041 = ORIENTED_EDGE('',*,*,#56002,.F.); +#56042 = ORIENTED_EDGE('',*,*,#56043,.T.); +#56043 = EDGE_CURVE('',#56003,#56044,#56046,.T.); +#56044 = VERTEX_POINT('',#56045); +#56045 = CARTESIAN_POINT('',(5.E-02,-6.938893903907E-18,5.E-02)); +#56046 = CIRCLE('',#56047,5.E-02); +#56047 = AXIS2_PLACEMENT_3D('',#56048,#56049,#56050); +#56048 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#56049 = DIRECTION('',(0.,0.,1.)); +#56050 = DIRECTION('',(-1.,0.,0.)); +#56051 = ORIENTED_EDGE('',*,*,#56052,.T.); +#56052 = EDGE_CURVE('',#56044,#56053,#56055,.T.); +#56053 = VERTEX_POINT('',#56054); +#56054 = CARTESIAN_POINT('',(5.E-02,-6.938893903907E-18,0.45)); +#56055 = LINE('',#56056,#56057); +#56056 = CARTESIAN_POINT('',(5.E-02,-6.938893903907E-18,0.)); +#56057 = VECTOR('',#56058,1.); +#56058 = DIRECTION('',(0.,0.,1.)); +#56059 = ORIENTED_EDGE('',*,*,#56060,.F.); +#56060 = EDGE_CURVE('',#56005,#56053,#56061,.T.); +#56061 = CIRCLE('',#56062,5.E-02); +#56062 = AXIS2_PLACEMENT_3D('',#56063,#56064,#56065); +#56063 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#56064 = DIRECTION('',(0.,0.,1.)); +#56065 = DIRECTION('',(-1.,0.,0.)); +#56066 = CYLINDRICAL_SURFACE('',#56067,5.E-02); +#56067 = AXIS2_PLACEMENT_3D('',#56068,#56069,#56070); +#56068 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.)); +#56069 = DIRECTION('',(0.,0.,1.)); +#56070 = DIRECTION('',(-1.,-0.,0.)); +#56071 = ADVANCED_FACE('',(#56072),#56099,.T.); +#56072 = FACE_BOUND('',#56073,.T.); +#56073 = EDGE_LOOP('',(#56074,#56075,#56084,#56092)); +#56074 = ORIENTED_EDGE('',*,*,#56012,.T.); +#56075 = ORIENTED_EDGE('',*,*,#56076,.F.); +#56076 = EDGE_CURVE('',#56077,#56013,#56079,.T.); +#56077 = VERTEX_POINT('',#56078); +#56078 = CARTESIAN_POINT('',(5.E-02,0.45,0.)); +#56079 = CIRCLE('',#56080,5.E-02); +#56080 = AXIS2_PLACEMENT_3D('',#56081,#56082,#56083); +#56081 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#56082 = DIRECTION('',(0.,1.,-0.)); +#56083 = DIRECTION('',(-1.,0.,0.)); +#56084 = ORIENTED_EDGE('',*,*,#56085,.F.); +#56085 = EDGE_CURVE('',#56086,#56077,#56088,.T.); +#56086 = VERTEX_POINT('',#56087); +#56087 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.)); +#56088 = LINE('',#56089,#56090); +#56089 = CARTESIAN_POINT('',(5.E-02,0.,-6.938893903907E-18)); +#56090 = VECTOR('',#56091,1.); +#56091 = DIRECTION('',(-0.,1.,0.)); +#56092 = ORIENTED_EDGE('',*,*,#56093,.T.); +#56093 = EDGE_CURVE('',#56086,#56003,#56094,.T.); +#56094 = CIRCLE('',#56095,5.E-02); +#56095 = AXIS2_PLACEMENT_3D('',#56096,#56097,#56098); +#56096 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#56097 = DIRECTION('',(0.,1.,-0.)); +#56098 = DIRECTION('',(-1.,0.,0.)); +#56099 = CYLINDRICAL_SURFACE('',#56100,5.E-02); +#56100 = AXIS2_PLACEMENT_3D('',#56101,#56102,#56103); +#56101 = CARTESIAN_POINT('',(5.E-02,0.,5.E-02)); +#56102 = DIRECTION('',(-0.,1.,0.)); +#56103 = DIRECTION('',(-1.,-0.,0.)); +#56104 = ADVANCED_FACE('',(#56105),#56132,.T.); +#56105 = FACE_BOUND('',#56106,.T.); +#56106 = EDGE_LOOP('',(#56107,#56116,#56124,#56131)); +#56107 = ORIENTED_EDGE('',*,*,#56108,.F.); +#56108 = EDGE_CURVE('',#56109,#56005,#56111,.T.); +#56109 = VERTEX_POINT('',#56110); +#56110 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.5)); +#56111 = CIRCLE('',#56112,5.E-02); +#56112 = AXIS2_PLACEMENT_3D('',#56113,#56114,#56115); +#56113 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#56114 = DIRECTION('',(0.,-1.,0.)); +#56115 = DIRECTION('',(-1.,0.,0.)); +#56116 = ORIENTED_EDGE('',*,*,#56117,.T.); +#56117 = EDGE_CURVE('',#56109,#56118,#56120,.T.); +#56118 = VERTEX_POINT('',#56119); +#56119 = CARTESIAN_POINT('',(5.E-02,0.45,0.5)); +#56120 = LINE('',#56121,#56122); +#56121 = CARTESIAN_POINT('',(5.E-02,0.,0.5)); +#56122 = VECTOR('',#56123,1.); +#56123 = DIRECTION('',(-0.,1.,0.)); +#56124 = ORIENTED_EDGE('',*,*,#56125,.F.); +#56125 = EDGE_CURVE('',#56021,#56118,#56126,.T.); +#56126 = CIRCLE('',#56127,5.E-02); +#56127 = AXIS2_PLACEMENT_3D('',#56128,#56129,#56130); +#56128 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#56129 = DIRECTION('',(-0.,1.,0.)); +#56130 = DIRECTION('',(-1.,-0.,0.)); +#56131 = ORIENTED_EDGE('',*,*,#56028,.F.); +#56132 = CYLINDRICAL_SURFACE('',#56133,5.E-02); +#56133 = AXIS2_PLACEMENT_3D('',#56134,#56135,#56136); +#56134 = CARTESIAN_POINT('',(5.E-02,0.,0.45)); +#56135 = DIRECTION('',(-0.,1.,0.)); +#56136 = DIRECTION('',(-1.,-0.,0.)); +#56137 = ADVANCED_FACE('',(#56138),#56165,.T.); +#56138 = FACE_BOUND('',#56139,.T.); +#56139 = EDGE_LOOP('',(#56140,#56149,#56157,#56164)); +#56140 = ORIENTED_EDGE('',*,*,#56141,.F.); +#56141 = EDGE_CURVE('',#56142,#56021,#56144,.T.); +#56142 = VERTEX_POINT('',#56143); +#56143 = CARTESIAN_POINT('',(5.E-02,0.5,0.45)); +#56144 = CIRCLE('',#56145,5.E-02); +#56145 = AXIS2_PLACEMENT_3D('',#56146,#56147,#56148); +#56146 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#56147 = DIRECTION('',(0.,0.,1.)); +#56148 = DIRECTION('',(-1.,-0.,0.)); +#56149 = ORIENTED_EDGE('',*,*,#56150,.F.); +#56150 = EDGE_CURVE('',#56151,#56142,#56153,.T.); +#56151 = VERTEX_POINT('',#56152); +#56152 = CARTESIAN_POINT('',(5.E-02,0.5,5.E-02)); +#56153 = LINE('',#56154,#56155); +#56154 = CARTESIAN_POINT('',(5.E-02,0.5,0.)); +#56155 = VECTOR('',#56156,1.); +#56156 = DIRECTION('',(0.,0.,1.)); +#56157 = ORIENTED_EDGE('',*,*,#56158,.F.); +#56158 = EDGE_CURVE('',#56013,#56151,#56159,.T.); +#56159 = CIRCLE('',#56160,5.E-02); +#56160 = AXIS2_PLACEMENT_3D('',#56161,#56162,#56163); +#56161 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#56162 = DIRECTION('',(0.,0.,-1.)); +#56163 = DIRECTION('',(-1.,0.,0.)); +#56164 = ORIENTED_EDGE('',*,*,#56020,.T.); +#56165 = CYLINDRICAL_SURFACE('',#56166,5.E-02); +#56166 = AXIS2_PLACEMENT_3D('',#56167,#56168,#56169); +#56167 = CARTESIAN_POINT('',(5.E-02,0.45,0.)); +#56168 = DIRECTION('',(0.,0.,1.)); +#56169 = DIRECTION('',(-1.,-0.,0.)); +#56170 = ADVANCED_FACE('',(#56171),#56182,.T.); +#56171 = FACE_BOUND('',#56172,.T.); +#56172 = EDGE_LOOP('',(#56173,#56174,#56181)); +#56173 = ORIENTED_EDGE('',*,*,#56093,.F.); +#56174 = ORIENTED_EDGE('',*,*,#56175,.T.); +#56175 = EDGE_CURVE('',#56086,#56044,#56176,.T.); +#56176 = CIRCLE('',#56177,5.E-02); +#56177 = AXIS2_PLACEMENT_3D('',#56178,#56179,#56180); +#56178 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#56179 = DIRECTION('',(-1.,6.123233995737E-17,0.)); +#56180 = DIRECTION('',(-6.123233995737E-17,-1.,0.)); +#56181 = ORIENTED_EDGE('',*,*,#56043,.F.); +#56182 = SPHERICAL_SURFACE('',#56183,5.E-02); +#56183 = AXIS2_PLACEMENT_3D('',#56184,#56185,#56186); +#56184 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#56185 = DIRECTION('',(0.,0.,1.)); +#56186 = DIRECTION('',(-1.,0.,0.)); +#56187 = ADVANCED_FACE('',(#56188),#56199,.T.); +#56188 = FACE_BOUND('',#56189,.T.); +#56189 = EDGE_LOOP('',(#56190,#56191,#56198)); +#56190 = ORIENTED_EDGE('',*,*,#56060,.T.); +#56191 = ORIENTED_EDGE('',*,*,#56192,.F.); +#56192 = EDGE_CURVE('',#56109,#56053,#56193,.T.); +#56193 = CIRCLE('',#56194,5.E-02); +#56194 = AXIS2_PLACEMENT_3D('',#56195,#56196,#56197); +#56195 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#56196 = DIRECTION('',(1.,-6.123233995737E-17,0.)); +#56197 = DIRECTION('',(-6.123233995737E-17,-1.,0.)); +#56198 = ORIENTED_EDGE('',*,*,#56108,.T.); +#56199 = SPHERICAL_SURFACE('',#56200,5.E-02); +#56200 = AXIS2_PLACEMENT_3D('',#56201,#56202,#56203); +#56201 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#56202 = DIRECTION('',(-0.,-0.,-1.)); +#56203 = DIRECTION('',(-1.,0.,0.)); +#56204 = ADVANCED_FACE('',(#56205),#56230,.F.); +#56205 = FACE_BOUND('',#56206,.F.); +#56206 = EDGE_LOOP('',(#56207,#56215,#56216,#56224)); +#56207 = ORIENTED_EDGE('',*,*,#56208,.F.); +#56208 = EDGE_CURVE('',#56044,#56209,#56211,.T.); +#56209 = VERTEX_POINT('',#56210); +#56210 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,5.E-02)); +#56211 = LINE('',#56212,#56213); +#56212 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,5.E-02)); +#56213 = VECTOR('',#56214,1.); +#56214 = DIRECTION('',(1.,0.,-0.)); +#56215 = ORIENTED_EDGE('',*,*,#56052,.T.); +#56216 = ORIENTED_EDGE('',*,*,#56217,.T.); +#56217 = EDGE_CURVE('',#56053,#56218,#56220,.T.); +#56218 = VERTEX_POINT('',#56219); +#56219 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,0.45)); +#56220 = LINE('',#56221,#56222); +#56221 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,0.45)); +#56222 = VECTOR('',#56223,1.); +#56223 = DIRECTION('',(1.,0.,-0.)); +#56224 = ORIENTED_EDGE('',*,*,#56225,.F.); +#56225 = EDGE_CURVE('',#56209,#56218,#56226,.T.); +#56226 = LINE('',#56227,#56228); +#56227 = CARTESIAN_POINT('',(0.25,0.,0.)); +#56228 = VECTOR('',#56229,1.); +#56229 = DIRECTION('',(0.,0.,1.)); +#56230 = PLANE('',#56231); +#56231 = AXIS2_PLACEMENT_3D('',#56232,#56233,#56234); +#56232 = CARTESIAN_POINT('',(0.,0.,0.)); +#56233 = DIRECTION('',(-0.,1.,0.)); +#56234 = DIRECTION('',(0.,0.,1.)); +#56235 = ADVANCED_FACE('',(#56236),#56261,.F.); +#56236 = FACE_BOUND('',#56237,.F.); +#56237 = EDGE_LOOP('',(#56238,#56239,#56247,#56255)); +#56238 = ORIENTED_EDGE('',*,*,#56085,.F.); +#56239 = ORIENTED_EDGE('',*,*,#56240,.T.); +#56240 = EDGE_CURVE('',#56086,#56241,#56243,.T.); +#56241 = VERTEX_POINT('',#56242); +#56242 = CARTESIAN_POINT('',(0.25,5.E-02,-3.469446951954E-18)); +#56243 = LINE('',#56244,#56245); +#56244 = CARTESIAN_POINT('',(0.,5.E-02,-6.938893903907E-18)); +#56245 = VECTOR('',#56246,1.); +#56246 = DIRECTION('',(1.,0.,-0.)); +#56247 = ORIENTED_EDGE('',*,*,#56248,.T.); +#56248 = EDGE_CURVE('',#56241,#56249,#56251,.T.); +#56249 = VERTEX_POINT('',#56250); +#56250 = CARTESIAN_POINT('',(0.25,0.45,-3.469446951954E-18)); +#56251 = LINE('',#56252,#56253); +#56252 = CARTESIAN_POINT('',(0.25,0.,0.)); +#56253 = VECTOR('',#56254,1.); +#56254 = DIRECTION('',(-0.,1.,0.)); +#56255 = ORIENTED_EDGE('',*,*,#56256,.F.); +#56256 = EDGE_CURVE('',#56077,#56249,#56257,.T.); +#56257 = LINE('',#56258,#56259); +#56258 = CARTESIAN_POINT('',(0.,0.45,-6.938893903907E-18)); +#56259 = VECTOR('',#56260,1.); +#56260 = DIRECTION('',(1.,0.,-0.)); +#56261 = PLANE('',#56262); +#56262 = AXIS2_PLACEMENT_3D('',#56263,#56264,#56265); +#56263 = CARTESIAN_POINT('',(0.,0.,0.)); +#56264 = DIRECTION('',(0.,0.,1.)); +#56265 = DIRECTION('',(1.,0.,-0.)); +#56266 = ADVANCED_FACE('',(#56267),#56278,.T.); +#56267 = FACE_BOUND('',#56268,.T.); +#56268 = EDGE_LOOP('',(#56269,#56270,#56277)); +#56269 = ORIENTED_EDGE('',*,*,#56158,.T.); +#56270 = ORIENTED_EDGE('',*,*,#56271,.F.); +#56271 = EDGE_CURVE('',#56077,#56151,#56272,.T.); +#56272 = CIRCLE('',#56273,5.E-02); +#56273 = AXIS2_PLACEMENT_3D('',#56274,#56275,#56276); +#56274 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#56275 = DIRECTION('',(1.,6.123233995737E-17,-0.)); +#56276 = DIRECTION('',(-6.123233995737E-17,1.,0.)); +#56277 = ORIENTED_EDGE('',*,*,#56076,.T.); +#56278 = SPHERICAL_SURFACE('',#56279,5.E-02); +#56279 = AXIS2_PLACEMENT_3D('',#56280,#56281,#56282); +#56280 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#56281 = DIRECTION('',(0.,0.,1.)); +#56282 = DIRECTION('',(-1.,0.,0.)); +#56283 = ADVANCED_FACE('',(#56284),#56309,.T.); +#56284 = FACE_BOUND('',#56285,.T.); +#56285 = EDGE_LOOP('',(#56286,#56287,#56295,#56303)); +#56286 = ORIENTED_EDGE('',*,*,#56117,.F.); +#56287 = ORIENTED_EDGE('',*,*,#56288,.T.); +#56288 = EDGE_CURVE('',#56109,#56289,#56291,.T.); +#56289 = VERTEX_POINT('',#56290); +#56290 = CARTESIAN_POINT('',(0.25,5.E-02,0.5)); +#56291 = LINE('',#56292,#56293); +#56292 = CARTESIAN_POINT('',(0.,5.E-02,0.5)); +#56293 = VECTOR('',#56294,1.); +#56294 = DIRECTION('',(1.,0.,-0.)); +#56295 = ORIENTED_EDGE('',*,*,#56296,.T.); +#56296 = EDGE_CURVE('',#56289,#56297,#56299,.T.); +#56297 = VERTEX_POINT('',#56298); +#56298 = CARTESIAN_POINT('',(0.25,0.45,0.5)); +#56299 = LINE('',#56300,#56301); +#56300 = CARTESIAN_POINT('',(0.25,0.,0.5)); +#56301 = VECTOR('',#56302,1.); +#56302 = DIRECTION('',(0.,1.,0.)); +#56303 = ORIENTED_EDGE('',*,*,#56304,.F.); +#56304 = EDGE_CURVE('',#56118,#56297,#56305,.T.); +#56305 = LINE('',#56306,#56307); +#56306 = CARTESIAN_POINT('',(0.,0.45,0.5)); +#56307 = VECTOR('',#56308,1.); +#56308 = DIRECTION('',(1.,0.,-0.)); +#56309 = PLANE('',#56310); +#56310 = AXIS2_PLACEMENT_3D('',#56311,#56312,#56313); +#56311 = CARTESIAN_POINT('',(0.,0.,0.5)); +#56312 = DIRECTION('',(0.,0.,1.)); +#56313 = DIRECTION('',(1.,0.,-0.)); +#56314 = ADVANCED_FACE('',(#56315),#56326,.T.); +#56315 = FACE_BOUND('',#56316,.T.); +#56316 = EDGE_LOOP('',(#56317,#56318,#56325)); +#56317 = ORIENTED_EDGE('',*,*,#56125,.T.); +#56318 = ORIENTED_EDGE('',*,*,#56319,.F.); +#56319 = EDGE_CURVE('',#56142,#56118,#56320,.T.); +#56320 = CIRCLE('',#56321,5.E-02); +#56321 = AXIS2_PLACEMENT_3D('',#56322,#56323,#56324); +#56322 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#56323 = DIRECTION('',(1.,0.,6.123233995737E-17)); +#56324 = DIRECTION('',(-6.123233995737E-17,-0.,1.)); +#56325 = ORIENTED_EDGE('',*,*,#56141,.T.); +#56326 = SPHERICAL_SURFACE('',#56327,5.E-02); +#56327 = AXIS2_PLACEMENT_3D('',#56328,#56329,#56330); +#56328 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#56329 = DIRECTION('',(0.,-1.,-0.)); +#56330 = DIRECTION('',(-1.,-0.,0.)); +#56331 = ADVANCED_FACE('',(#56332),#56357,.T.); +#56332 = FACE_BOUND('',#56333,.T.); +#56333 = EDGE_LOOP('',(#56334,#56342,#56343,#56351)); +#56334 = ORIENTED_EDGE('',*,*,#56335,.F.); +#56335 = EDGE_CURVE('',#56151,#56336,#56338,.T.); +#56336 = VERTEX_POINT('',#56337); +#56337 = CARTESIAN_POINT('',(0.25,0.5,5.E-02)); +#56338 = LINE('',#56339,#56340); +#56339 = CARTESIAN_POINT('',(0.,0.5,5.E-02)); +#56340 = VECTOR('',#56341,1.); +#56341 = DIRECTION('',(1.,0.,-0.)); +#56342 = ORIENTED_EDGE('',*,*,#56150,.T.); +#56343 = ORIENTED_EDGE('',*,*,#56344,.T.); +#56344 = EDGE_CURVE('',#56142,#56345,#56347,.T.); +#56345 = VERTEX_POINT('',#56346); +#56346 = CARTESIAN_POINT('',(0.25,0.5,0.45)); +#56347 = LINE('',#56348,#56349); +#56348 = CARTESIAN_POINT('',(0.,0.5,0.45)); +#56349 = VECTOR('',#56350,1.); +#56350 = DIRECTION('',(1.,0.,-0.)); +#56351 = ORIENTED_EDGE('',*,*,#56352,.F.); +#56352 = EDGE_CURVE('',#56336,#56345,#56353,.T.); +#56353 = LINE('',#56354,#56355); +#56354 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#56355 = VECTOR('',#56356,1.); +#56356 = DIRECTION('',(0.,0.,1.)); +#56357 = PLANE('',#56358); +#56358 = AXIS2_PLACEMENT_3D('',#56359,#56360,#56361); +#56359 = CARTESIAN_POINT('',(0.,0.5,0.)); +#56360 = DIRECTION('',(-0.,1.,0.)); +#56361 = DIRECTION('',(0.,0.,1.)); +#56362 = ADVANCED_FACE('',(#56363),#56375,.T.); +#56363 = FACE_BOUND('',#56364,.T.); +#56364 = EDGE_LOOP('',(#56365,#56366,#56367,#56374)); +#56365 = ORIENTED_EDGE('',*,*,#56175,.F.); +#56366 = ORIENTED_EDGE('',*,*,#56240,.T.); +#56367 = ORIENTED_EDGE('',*,*,#56368,.F.); +#56368 = EDGE_CURVE('',#56209,#56241,#56369,.T.); +#56369 = CIRCLE('',#56370,5.E-02); +#56370 = AXIS2_PLACEMENT_3D('',#56371,#56372,#56373); +#56371 = CARTESIAN_POINT('',(0.25,5.E-02,5.E-02)); +#56372 = DIRECTION('',(1.,0.,0.)); +#56373 = DIRECTION('',(0.,-1.,0.)); +#56374 = ORIENTED_EDGE('',*,*,#56208,.F.); +#56375 = CYLINDRICAL_SURFACE('',#56376,5.E-02); +#56376 = AXIS2_PLACEMENT_3D('',#56377,#56378,#56379); +#56377 = CARTESIAN_POINT('',(0.,5.E-02,5.E-02)); +#56378 = DIRECTION('',(1.,0.,-0.)); +#56379 = DIRECTION('',(0.,-1.,0.)); +#56380 = ADVANCED_FACE('',(#56381),#56393,.T.); +#56381 = FACE_BOUND('',#56382,.T.); +#56382 = EDGE_LOOP('',(#56383,#56384,#56391,#56392)); +#56383 = ORIENTED_EDGE('',*,*,#56217,.T.); +#56384 = ORIENTED_EDGE('',*,*,#56385,.F.); +#56385 = EDGE_CURVE('',#56289,#56218,#56386,.T.); +#56386 = CIRCLE('',#56387,5.E-02); +#56387 = AXIS2_PLACEMENT_3D('',#56388,#56389,#56390); +#56388 = CARTESIAN_POINT('',(0.25,5.E-02,0.45)); +#56389 = DIRECTION('',(1.,0.,0.)); +#56390 = DIRECTION('',(0.,-1.,0.)); +#56391 = ORIENTED_EDGE('',*,*,#56288,.F.); +#56392 = ORIENTED_EDGE('',*,*,#56192,.T.); +#56393 = CYLINDRICAL_SURFACE('',#56394,5.E-02); +#56394 = AXIS2_PLACEMENT_3D('',#56395,#56396,#56397); +#56395 = CARTESIAN_POINT('',(0.,5.E-02,0.45)); +#56396 = DIRECTION('',(1.,0.,-0.)); +#56397 = DIRECTION('',(0.,-1.,0.)); +#56398 = ADVANCED_FACE('',(#56399),#56421,.T.); +#56399 = FACE_BOUND('',#56400,.T.); +#56400 = EDGE_LOOP('',(#56401,#56402,#56403,#56404,#56411,#56412,#56419, + #56420)); +#56401 = ORIENTED_EDGE('',*,*,#56225,.F.); +#56402 = ORIENTED_EDGE('',*,*,#56368,.T.); +#56403 = ORIENTED_EDGE('',*,*,#56248,.T.); +#56404 = ORIENTED_EDGE('',*,*,#56405,.T.); +#56405 = EDGE_CURVE('',#56249,#56336,#56406,.T.); +#56406 = CIRCLE('',#56407,5.E-02); +#56407 = AXIS2_PLACEMENT_3D('',#56408,#56409,#56410); +#56408 = CARTESIAN_POINT('',(0.25,0.45,5.E-02)); +#56409 = DIRECTION('',(1.,0.,-0.)); +#56410 = DIRECTION('',(0.,1.,0.)); +#56411 = ORIENTED_EDGE('',*,*,#56352,.T.); +#56412 = ORIENTED_EDGE('',*,*,#56413,.T.); +#56413 = EDGE_CURVE('',#56345,#56297,#56414,.T.); +#56414 = CIRCLE('',#56415,5.E-02); +#56415 = AXIS2_PLACEMENT_3D('',#56416,#56417,#56418); +#56416 = CARTESIAN_POINT('',(0.25,0.45,0.45)); +#56417 = DIRECTION('',(1.,0.,-0.)); +#56418 = DIRECTION('',(0.,1.,0.)); +#56419 = ORIENTED_EDGE('',*,*,#56296,.F.); +#56420 = ORIENTED_EDGE('',*,*,#56385,.T.); +#56421 = PLANE('',#56422); +#56422 = AXIS2_PLACEMENT_3D('',#56423,#56424,#56425); +#56423 = CARTESIAN_POINT('',(0.25,0.,0.)); +#56424 = DIRECTION('',(1.,0.,-0.)); +#56425 = DIRECTION('',(0.,0.,1.)); +#56426 = ADVANCED_FACE('',(#56427),#56433,.T.); +#56427 = FACE_BOUND('',#56428,.T.); +#56428 = EDGE_LOOP('',(#56429,#56430,#56431,#56432)); +#56429 = ORIENTED_EDGE('',*,*,#56335,.T.); +#56430 = ORIENTED_EDGE('',*,*,#56405,.F.); +#56431 = ORIENTED_EDGE('',*,*,#56256,.F.); +#56432 = ORIENTED_EDGE('',*,*,#56271,.T.); +#56433 = CYLINDRICAL_SURFACE('',#56434,5.E-02); +#56434 = AXIS2_PLACEMENT_3D('',#56435,#56436,#56437); +#56435 = CARTESIAN_POINT('',(0.,0.45,5.E-02)); +#56436 = DIRECTION('',(1.,0.,-0.)); +#56437 = DIRECTION('',(0.,1.,0.)); +#56438 = ADVANCED_FACE('',(#56439),#56445,.T.); +#56439 = FACE_BOUND('',#56440,.T.); +#56440 = EDGE_LOOP('',(#56441,#56442,#56443,#56444)); +#56441 = ORIENTED_EDGE('',*,*,#56344,.F.); +#56442 = ORIENTED_EDGE('',*,*,#56319,.T.); +#56443 = ORIENTED_EDGE('',*,*,#56304,.T.); +#56444 = ORIENTED_EDGE('',*,*,#56413,.F.); +#56445 = CYLINDRICAL_SURFACE('',#56446,5.E-02); +#56446 = AXIS2_PLACEMENT_3D('',#56447,#56448,#56449); +#56447 = CARTESIAN_POINT('',(0.,0.45,0.45)); +#56448 = DIRECTION('',(1.,0.,-0.)); +#56449 = DIRECTION('',(0.,1.,0.)); +#56450 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#56454)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#56451,#56452,#56453)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#56451 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#56452 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#56453 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#56454 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#56451, + 'distance_accuracy_value','confusion accuracy'); +#56455 = SHAPE_DEFINITION_REPRESENTATION(#56456,#55995); +#56456 = PRODUCT_DEFINITION_SHAPE('','',#56457); +#56457 = PRODUCT_DEFINITION('design','',#56458,#56461); +#56458 = PRODUCT_DEFINITION_FORMATION('','',#56459); +#56459 = PRODUCT('Open CASCADE STEP translator 6.8 54.1.1', + 'Open CASCADE STEP translator 6.8 54.1.1','',(#56460)); +#56460 = PRODUCT_CONTEXT('',#2,'mechanical'); +#56461 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#56462 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#56463,#56465); +#56463 = ( REPRESENTATION_RELATIONSHIP('','',#55995,#55981) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#56464) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#56464 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55982); +#56465 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #56466); +#56466 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('79','266','',#55976,#56457,$); +#56467 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#56459)); +#56468 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#56469),#56923); +#56469 = MANIFOLD_SOLID_BREP('',#56470); +#56470 = CLOSED_SHELL('',(#56471,#56511,#56544,#56577,#56610,#56661, + #56678,#56702,#56733,#56750,#56774,#56799,#56824,#56841,#56859, + #56877,#56901,#56912)); +#56471 = ADVANCED_FACE('',(#56472),#56506,.F.); +#56472 = FACE_BOUND('',#56473,.F.); +#56473 = EDGE_LOOP('',(#56474,#56484,#56492,#56500)); +#56474 = ORIENTED_EDGE('',*,*,#56475,.F.); +#56475 = EDGE_CURVE('',#56476,#56478,#56480,.T.); +#56476 = VERTEX_POINT('',#56477); +#56477 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,5.E-02)); +#56478 = VERTEX_POINT('',#56479); +#56479 = CARTESIAN_POINT('',(0.95,-6.938893903907E-18,5.E-02)); +#56480 = LINE('',#56481,#56482); +#56481 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,5.E-02)); +#56482 = VECTOR('',#56483,1.); +#56483 = DIRECTION('',(1.,0.,-0.)); +#56484 = ORIENTED_EDGE('',*,*,#56485,.T.); +#56485 = EDGE_CURVE('',#56476,#56486,#56488,.T.); +#56486 = VERTEX_POINT('',#56487); +#56487 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,0.45)); +#56488 = LINE('',#56489,#56490); +#56489 = CARTESIAN_POINT('',(0.75,0.,0.)); +#56490 = VECTOR('',#56491,1.); +#56491 = DIRECTION('',(0.,0.,1.)); +#56492 = ORIENTED_EDGE('',*,*,#56493,.T.); +#56493 = EDGE_CURVE('',#56486,#56494,#56496,.T.); +#56494 = VERTEX_POINT('',#56495); +#56495 = CARTESIAN_POINT('',(0.95,-6.938893903907E-18,0.45)); +#56496 = LINE('',#56497,#56498); +#56497 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,0.45)); +#56498 = VECTOR('',#56499,1.); +#56499 = DIRECTION('',(1.,0.,-0.)); +#56500 = ORIENTED_EDGE('',*,*,#56501,.F.); +#56501 = EDGE_CURVE('',#56478,#56494,#56502,.T.); +#56502 = LINE('',#56503,#56504); +#56503 = CARTESIAN_POINT('',(0.95,-6.938893903907E-18,0.)); +#56504 = VECTOR('',#56505,1.); +#56505 = DIRECTION('',(0.,0.,1.)); +#56506 = PLANE('',#56507); +#56507 = AXIS2_PLACEMENT_3D('',#56508,#56509,#56510); +#56508 = CARTESIAN_POINT('',(0.,0.,0.)); +#56509 = DIRECTION('',(-0.,1.,0.)); +#56510 = DIRECTION('',(0.,0.,1.)); +#56511 = ADVANCED_FACE('',(#56512),#56539,.T.); +#56512 = FACE_BOUND('',#56513,.T.); +#56513 = EDGE_LOOP('',(#56514,#56523,#56531,#56538)); +#56514 = ORIENTED_EDGE('',*,*,#56515,.T.); +#56515 = EDGE_CURVE('',#56476,#56516,#56518,.T.); +#56516 = VERTEX_POINT('',#56517); +#56517 = CARTESIAN_POINT('',(0.75,5.E-02,-3.469446951954E-18)); +#56518 = CIRCLE('',#56519,5.E-02); +#56519 = AXIS2_PLACEMENT_3D('',#56520,#56521,#56522); +#56520 = CARTESIAN_POINT('',(0.75,5.E-02,5.E-02)); +#56521 = DIRECTION('',(1.,0.,0.)); +#56522 = DIRECTION('',(0.,-1.,0.)); +#56523 = ORIENTED_EDGE('',*,*,#56524,.T.); +#56524 = EDGE_CURVE('',#56516,#56525,#56527,.T.); +#56525 = VERTEX_POINT('',#56526); +#56526 = CARTESIAN_POINT('',(0.95,5.E-02,0.)); +#56527 = LINE('',#56528,#56529); +#56528 = CARTESIAN_POINT('',(0.,5.E-02,-6.938893903907E-18)); +#56529 = VECTOR('',#56530,1.); +#56530 = DIRECTION('',(1.,0.,-0.)); +#56531 = ORIENTED_EDGE('',*,*,#56532,.T.); +#56532 = EDGE_CURVE('',#56525,#56478,#56533,.T.); +#56533 = CIRCLE('',#56534,5.E-02); +#56534 = AXIS2_PLACEMENT_3D('',#56535,#56536,#56537); +#56535 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#56536 = DIRECTION('',(-1.,-6.123233995737E-17,0.)); +#56537 = DIRECTION('',(6.123233995737E-17,-1.,-0.)); +#56538 = ORIENTED_EDGE('',*,*,#56475,.F.); +#56539 = CYLINDRICAL_SURFACE('',#56540,5.E-02); +#56540 = AXIS2_PLACEMENT_3D('',#56541,#56542,#56543); +#56541 = CARTESIAN_POINT('',(0.,5.E-02,5.E-02)); +#56542 = DIRECTION('',(1.,0.,-0.)); +#56543 = DIRECTION('',(0.,-1.,0.)); +#56544 = ADVANCED_FACE('',(#56545),#56572,.T.); +#56545 = FACE_BOUND('',#56546,.T.); +#56546 = EDGE_LOOP('',(#56547,#56556,#56557,#56566)); +#56547 = ORIENTED_EDGE('',*,*,#56548,.T.); +#56548 = EDGE_CURVE('',#56549,#56494,#56551,.T.); +#56549 = VERTEX_POINT('',#56550); +#56550 = CARTESIAN_POINT('',(1.,5.E-02,0.45)); +#56551 = CIRCLE('',#56552,5.E-02); +#56552 = AXIS2_PLACEMENT_3D('',#56553,#56554,#56555); +#56553 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#56554 = DIRECTION('',(0.,0.,-1.)); +#56555 = DIRECTION('',(1.,0.,0.)); +#56556 = ORIENTED_EDGE('',*,*,#56501,.F.); +#56557 = ORIENTED_EDGE('',*,*,#56558,.F.); +#56558 = EDGE_CURVE('',#56559,#56478,#56561,.T.); +#56559 = VERTEX_POINT('',#56560); +#56560 = CARTESIAN_POINT('',(1.,5.E-02,5.E-02)); +#56561 = CIRCLE('',#56562,5.E-02); +#56562 = AXIS2_PLACEMENT_3D('',#56563,#56564,#56565); +#56563 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#56564 = DIRECTION('',(0.,0.,-1.)); +#56565 = DIRECTION('',(1.,0.,0.)); +#56566 = ORIENTED_EDGE('',*,*,#56567,.T.); +#56567 = EDGE_CURVE('',#56559,#56549,#56568,.T.); +#56568 = LINE('',#56569,#56570); +#56569 = CARTESIAN_POINT('',(1.,5.E-02,0.)); +#56570 = VECTOR('',#56571,1.); +#56571 = DIRECTION('',(0.,0.,1.)); +#56572 = CYLINDRICAL_SURFACE('',#56573,5.E-02); +#56573 = AXIS2_PLACEMENT_3D('',#56574,#56575,#56576); +#56574 = CARTESIAN_POINT('',(0.95,5.E-02,0.)); +#56575 = DIRECTION('',(0.,0.,1.)); +#56576 = DIRECTION('',(1.,0.,-0.)); +#56577 = ADVANCED_FACE('',(#56578),#56605,.T.); +#56578 = FACE_BOUND('',#56579,.T.); +#56579 = EDGE_LOOP('',(#56580,#56581,#56590,#56598)); +#56580 = ORIENTED_EDGE('',*,*,#56493,.T.); +#56581 = ORIENTED_EDGE('',*,*,#56582,.F.); +#56582 = EDGE_CURVE('',#56583,#56494,#56585,.T.); +#56583 = VERTEX_POINT('',#56584); +#56584 = CARTESIAN_POINT('',(0.95,5.E-02,0.5)); +#56585 = CIRCLE('',#56586,5.E-02); +#56586 = AXIS2_PLACEMENT_3D('',#56587,#56588,#56589); +#56587 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#56588 = DIRECTION('',(1.,6.123233995737E-17,0.)); +#56589 = DIRECTION('',(6.123233995737E-17,-1.,0.)); +#56590 = ORIENTED_EDGE('',*,*,#56591,.F.); +#56591 = EDGE_CURVE('',#56592,#56583,#56594,.T.); +#56592 = VERTEX_POINT('',#56593); +#56593 = CARTESIAN_POINT('',(0.75,5.E-02,0.5)); +#56594 = LINE('',#56595,#56596); +#56595 = CARTESIAN_POINT('',(0.,5.E-02,0.5)); +#56596 = VECTOR('',#56597,1.); +#56597 = DIRECTION('',(1.,0.,-0.)); +#56598 = ORIENTED_EDGE('',*,*,#56599,.T.); +#56599 = EDGE_CURVE('',#56592,#56486,#56600,.T.); +#56600 = CIRCLE('',#56601,5.E-02); +#56601 = AXIS2_PLACEMENT_3D('',#56602,#56603,#56604); +#56602 = CARTESIAN_POINT('',(0.75,5.E-02,0.45)); +#56603 = DIRECTION('',(1.,0.,0.)); +#56604 = DIRECTION('',(0.,-1.,0.)); +#56605 = CYLINDRICAL_SURFACE('',#56606,5.E-02); +#56606 = AXIS2_PLACEMENT_3D('',#56607,#56608,#56609); +#56607 = CARTESIAN_POINT('',(0.,5.E-02,0.45)); +#56608 = DIRECTION('',(1.,0.,-0.)); +#56609 = DIRECTION('',(0.,-1.,0.)); +#56610 = ADVANCED_FACE('',(#56611),#56656,.F.); +#56611 = FACE_BOUND('',#56612,.F.); +#56612 = EDGE_LOOP('',(#56613,#56614,#56615,#56623,#56632,#56640,#56649, + #56655)); +#56613 = ORIENTED_EDGE('',*,*,#56485,.F.); +#56614 = ORIENTED_EDGE('',*,*,#56515,.T.); +#56615 = ORIENTED_EDGE('',*,*,#56616,.T.); +#56616 = EDGE_CURVE('',#56516,#56617,#56619,.T.); +#56617 = VERTEX_POINT('',#56618); +#56618 = CARTESIAN_POINT('',(0.75,0.45,-3.469446951954E-18)); +#56619 = LINE('',#56620,#56621); +#56620 = CARTESIAN_POINT('',(0.75,0.,0.)); +#56621 = VECTOR('',#56622,1.); +#56622 = DIRECTION('',(-0.,1.,0.)); +#56623 = ORIENTED_EDGE('',*,*,#56624,.T.); +#56624 = EDGE_CURVE('',#56617,#56625,#56627,.T.); +#56625 = VERTEX_POINT('',#56626); +#56626 = CARTESIAN_POINT('',(0.75,0.5,5.E-02)); +#56627 = CIRCLE('',#56628,5.E-02); +#56628 = AXIS2_PLACEMENT_3D('',#56629,#56630,#56631); +#56629 = CARTESIAN_POINT('',(0.75,0.45,5.E-02)); +#56630 = DIRECTION('',(1.,0.,-0.)); +#56631 = DIRECTION('',(0.,1.,0.)); +#56632 = ORIENTED_EDGE('',*,*,#56633,.T.); +#56633 = EDGE_CURVE('',#56625,#56634,#56636,.T.); +#56634 = VERTEX_POINT('',#56635); +#56635 = CARTESIAN_POINT('',(0.75,0.5,0.45)); +#56636 = LINE('',#56637,#56638); +#56637 = CARTESIAN_POINT('',(0.75,0.5,0.)); +#56638 = VECTOR('',#56639,1.); +#56639 = DIRECTION('',(0.,0.,1.)); +#56640 = ORIENTED_EDGE('',*,*,#56641,.T.); +#56641 = EDGE_CURVE('',#56634,#56642,#56644,.T.); +#56642 = VERTEX_POINT('',#56643); +#56643 = CARTESIAN_POINT('',(0.75,0.45,0.5)); +#56644 = CIRCLE('',#56645,5.E-02); +#56645 = AXIS2_PLACEMENT_3D('',#56646,#56647,#56648); +#56646 = CARTESIAN_POINT('',(0.75,0.45,0.45)); +#56647 = DIRECTION('',(1.,0.,-0.)); +#56648 = DIRECTION('',(0.,1.,0.)); +#56649 = ORIENTED_EDGE('',*,*,#56650,.F.); +#56650 = EDGE_CURVE('',#56592,#56642,#56651,.T.); +#56651 = LINE('',#56652,#56653); +#56652 = CARTESIAN_POINT('',(0.75,0.,0.5)); +#56653 = VECTOR('',#56654,1.); +#56654 = DIRECTION('',(-0.,1.,0.)); +#56655 = ORIENTED_EDGE('',*,*,#56599,.T.); +#56656 = PLANE('',#56657); +#56657 = AXIS2_PLACEMENT_3D('',#56658,#56659,#56660); +#56658 = CARTESIAN_POINT('',(0.75,0.,0.)); +#56659 = DIRECTION('',(1.,0.,-0.)); +#56660 = DIRECTION('',(0.,0.,1.)); +#56661 = ADVANCED_FACE('',(#56662),#56673,.T.); +#56662 = FACE_BOUND('',#56663,.T.); +#56663 = EDGE_LOOP('',(#56664,#56665,#56666)); +#56664 = ORIENTED_EDGE('',*,*,#56558,.T.); +#56665 = ORIENTED_EDGE('',*,*,#56532,.F.); +#56666 = ORIENTED_EDGE('',*,*,#56667,.T.); +#56667 = EDGE_CURVE('',#56525,#56559,#56668,.T.); +#56668 = CIRCLE('',#56669,5.E-02); +#56669 = AXIS2_PLACEMENT_3D('',#56670,#56671,#56672); +#56670 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#56671 = DIRECTION('',(0.,-1.,0.)); +#56672 = DIRECTION('',(1.,0.,0.)); +#56673 = SPHERICAL_SURFACE('',#56674,5.E-02); +#56674 = AXIS2_PLACEMENT_3D('',#56675,#56676,#56677); +#56675 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#56676 = DIRECTION('',(0.,0.,1.)); +#56677 = DIRECTION('',(1.,0.,-0.)); +#56678 = ADVANCED_FACE('',(#56679),#56697,.F.); +#56679 = FACE_BOUND('',#56680,.F.); +#56680 = EDGE_LOOP('',(#56681,#56682,#56683,#56691)); +#56681 = ORIENTED_EDGE('',*,*,#56616,.F.); +#56682 = ORIENTED_EDGE('',*,*,#56524,.T.); +#56683 = ORIENTED_EDGE('',*,*,#56684,.T.); +#56684 = EDGE_CURVE('',#56525,#56685,#56687,.T.); +#56685 = VERTEX_POINT('',#56686); +#56686 = CARTESIAN_POINT('',(0.95,0.45,0.)); +#56687 = LINE('',#56688,#56689); +#56688 = CARTESIAN_POINT('',(0.95,0.,-6.938893903907E-18)); +#56689 = VECTOR('',#56690,1.); +#56690 = DIRECTION('',(-0.,1.,0.)); +#56691 = ORIENTED_EDGE('',*,*,#56692,.F.); +#56692 = EDGE_CURVE('',#56617,#56685,#56693,.T.); +#56693 = LINE('',#56694,#56695); +#56694 = CARTESIAN_POINT('',(0.,0.45,-6.938893903907E-18)); +#56695 = VECTOR('',#56696,1.); +#56696 = DIRECTION('',(1.,0.,-0.)); +#56697 = PLANE('',#56698); +#56698 = AXIS2_PLACEMENT_3D('',#56699,#56700,#56701); +#56699 = CARTESIAN_POINT('',(0.,0.,0.)); +#56700 = DIRECTION('',(0.,0.,1.)); +#56701 = DIRECTION('',(1.,0.,-0.)); +#56702 = ADVANCED_FACE('',(#56703),#56728,.T.); +#56703 = FACE_BOUND('',#56704,.T.); +#56704 = EDGE_LOOP('',(#56705,#56706,#56714,#56722)); +#56705 = ORIENTED_EDGE('',*,*,#56567,.F.); +#56706 = ORIENTED_EDGE('',*,*,#56707,.T.); +#56707 = EDGE_CURVE('',#56559,#56708,#56710,.T.); +#56708 = VERTEX_POINT('',#56709); +#56709 = CARTESIAN_POINT('',(1.,0.45,5.E-02)); +#56710 = LINE('',#56711,#56712); +#56711 = CARTESIAN_POINT('',(1.,0.,5.E-02)); +#56712 = VECTOR('',#56713,1.); +#56713 = DIRECTION('',(-0.,1.,0.)); +#56714 = ORIENTED_EDGE('',*,*,#56715,.T.); +#56715 = EDGE_CURVE('',#56708,#56716,#56718,.T.); +#56716 = VERTEX_POINT('',#56717); +#56717 = CARTESIAN_POINT('',(1.,0.45,0.45)); +#56718 = LINE('',#56719,#56720); +#56719 = CARTESIAN_POINT('',(1.,0.45,0.)); +#56720 = VECTOR('',#56721,1.); +#56721 = DIRECTION('',(0.,0.,1.)); +#56722 = ORIENTED_EDGE('',*,*,#56723,.F.); +#56723 = EDGE_CURVE('',#56549,#56716,#56724,.T.); +#56724 = LINE('',#56725,#56726); +#56725 = CARTESIAN_POINT('',(1.,0.,0.45)); +#56726 = VECTOR('',#56727,1.); +#56727 = DIRECTION('',(0.,1.,0.)); +#56728 = PLANE('',#56729); +#56729 = AXIS2_PLACEMENT_3D('',#56730,#56731,#56732); +#56730 = CARTESIAN_POINT('',(1.,0.,0.)); +#56731 = DIRECTION('',(1.,0.,-0.)); +#56732 = DIRECTION('',(0.,0.,1.)); +#56733 = ADVANCED_FACE('',(#56734),#56745,.T.); +#56734 = FACE_BOUND('',#56735,.T.); +#56735 = EDGE_LOOP('',(#56736,#56743,#56744)); +#56736 = ORIENTED_EDGE('',*,*,#56737,.F.); +#56737 = EDGE_CURVE('',#56583,#56549,#56738,.T.); +#56738 = CIRCLE('',#56739,5.E-02); +#56739 = AXIS2_PLACEMENT_3D('',#56740,#56741,#56742); +#56740 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#56741 = DIRECTION('',(-0.,1.,0.)); +#56742 = DIRECTION('',(1.,0.,0.)); +#56743 = ORIENTED_EDGE('',*,*,#56582,.T.); +#56744 = ORIENTED_EDGE('',*,*,#56548,.F.); +#56745 = SPHERICAL_SURFACE('',#56746,5.E-02); +#56746 = AXIS2_PLACEMENT_3D('',#56747,#56748,#56749); +#56747 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#56748 = DIRECTION('',(-0.,-0.,-1.)); +#56749 = DIRECTION('',(1.,0.,0.)); +#56750 = ADVANCED_FACE('',(#56751),#56769,.T.); +#56751 = FACE_BOUND('',#56752,.T.); +#56752 = EDGE_LOOP('',(#56753,#56754,#56755,#56763)); +#56753 = ORIENTED_EDGE('',*,*,#56650,.F.); +#56754 = ORIENTED_EDGE('',*,*,#56591,.T.); +#56755 = ORIENTED_EDGE('',*,*,#56756,.T.); +#56756 = EDGE_CURVE('',#56583,#56757,#56759,.T.); +#56757 = VERTEX_POINT('',#56758); +#56758 = CARTESIAN_POINT('',(0.95,0.45,0.5)); +#56759 = LINE('',#56760,#56761); +#56760 = CARTESIAN_POINT('',(0.95,0.,0.5)); +#56761 = VECTOR('',#56762,1.); +#56762 = DIRECTION('',(0.,1.,0.)); +#56763 = ORIENTED_EDGE('',*,*,#56764,.F.); +#56764 = EDGE_CURVE('',#56642,#56757,#56765,.T.); +#56765 = LINE('',#56766,#56767); +#56766 = CARTESIAN_POINT('',(0.,0.45,0.5)); +#56767 = VECTOR('',#56768,1.); +#56768 = DIRECTION('',(1.,0.,-0.)); +#56769 = PLANE('',#56770); +#56770 = AXIS2_PLACEMENT_3D('',#56771,#56772,#56773); +#56771 = CARTESIAN_POINT('',(0.,0.,0.5)); +#56772 = DIRECTION('',(0.,0.,1.)); +#56773 = DIRECTION('',(1.,0.,-0.)); +#56774 = ADVANCED_FACE('',(#56775),#56794,.T.); +#56775 = FACE_BOUND('',#56776,.T.); +#56776 = EDGE_LOOP('',(#56777,#56785,#56792,#56793)); +#56777 = ORIENTED_EDGE('',*,*,#56778,.T.); +#56778 = EDGE_CURVE('',#56625,#56779,#56781,.T.); +#56779 = VERTEX_POINT('',#56780); +#56780 = CARTESIAN_POINT('',(0.95,0.5,5.E-02)); +#56781 = LINE('',#56782,#56783); +#56782 = CARTESIAN_POINT('',(0.,0.5,5.E-02)); +#56783 = VECTOR('',#56784,1.); +#56784 = DIRECTION('',(1.,0.,-0.)); +#56785 = ORIENTED_EDGE('',*,*,#56786,.F.); +#56786 = EDGE_CURVE('',#56685,#56779,#56787,.T.); +#56787 = CIRCLE('',#56788,5.E-02); +#56788 = AXIS2_PLACEMENT_3D('',#56789,#56790,#56791); +#56789 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#56790 = DIRECTION('',(1.,-6.123233995737E-17,0.)); +#56791 = DIRECTION('',(6.123233995737E-17,1.,0.)); +#56792 = ORIENTED_EDGE('',*,*,#56692,.F.); +#56793 = ORIENTED_EDGE('',*,*,#56624,.T.); +#56794 = CYLINDRICAL_SURFACE('',#56795,5.E-02); +#56795 = AXIS2_PLACEMENT_3D('',#56796,#56797,#56798); +#56796 = CARTESIAN_POINT('',(0.,0.45,5.E-02)); +#56797 = DIRECTION('',(1.,0.,-0.)); +#56798 = DIRECTION('',(0.,1.,0.)); +#56799 = ADVANCED_FACE('',(#56800),#56819,.T.); +#56800 = FACE_BOUND('',#56801,.T.); +#56801 = EDGE_LOOP('',(#56802,#56810,#56811,#56812)); +#56802 = ORIENTED_EDGE('',*,*,#56803,.F.); +#56803 = EDGE_CURVE('',#56634,#56804,#56806,.T.); +#56804 = VERTEX_POINT('',#56805); +#56805 = CARTESIAN_POINT('',(0.95,0.5,0.45)); +#56806 = LINE('',#56807,#56808); +#56807 = CARTESIAN_POINT('',(0.,0.5,0.45)); +#56808 = VECTOR('',#56809,1.); +#56809 = DIRECTION('',(1.,0.,-0.)); +#56810 = ORIENTED_EDGE('',*,*,#56641,.T.); +#56811 = ORIENTED_EDGE('',*,*,#56764,.T.); +#56812 = ORIENTED_EDGE('',*,*,#56813,.F.); +#56813 = EDGE_CURVE('',#56804,#56757,#56814,.T.); +#56814 = CIRCLE('',#56815,5.E-02); +#56815 = AXIS2_PLACEMENT_3D('',#56816,#56817,#56818); +#56816 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#56817 = DIRECTION('',(1.,0.,-6.123233995737E-17)); +#56818 = DIRECTION('',(6.123233995737E-17,0.,1.)); +#56819 = CYLINDRICAL_SURFACE('',#56820,5.E-02); +#56820 = AXIS2_PLACEMENT_3D('',#56821,#56822,#56823); +#56821 = CARTESIAN_POINT('',(0.,0.45,0.45)); +#56822 = DIRECTION('',(1.,0.,-0.)); +#56823 = DIRECTION('',(0.,1.,0.)); +#56824 = ADVANCED_FACE('',(#56825),#56836,.T.); +#56825 = FACE_BOUND('',#56826,.T.); +#56826 = EDGE_LOOP('',(#56827,#56828,#56829,#56830)); +#56827 = ORIENTED_EDGE('',*,*,#56778,.F.); +#56828 = ORIENTED_EDGE('',*,*,#56633,.T.); +#56829 = ORIENTED_EDGE('',*,*,#56803,.T.); +#56830 = ORIENTED_EDGE('',*,*,#56831,.F.); +#56831 = EDGE_CURVE('',#56779,#56804,#56832,.T.); +#56832 = LINE('',#56833,#56834); +#56833 = CARTESIAN_POINT('',(0.95,0.5,0.)); +#56834 = VECTOR('',#56835,1.); +#56835 = DIRECTION('',(0.,0.,1.)); +#56836 = PLANE('',#56837); +#56837 = AXIS2_PLACEMENT_3D('',#56838,#56839,#56840); +#56838 = CARTESIAN_POINT('',(0.,0.5,0.)); +#56839 = DIRECTION('',(-0.,1.,0.)); +#56840 = DIRECTION('',(0.,0.,1.)); +#56841 = ADVANCED_FACE('',(#56842),#56854,.T.); +#56842 = FACE_BOUND('',#56843,.T.); +#56843 = EDGE_LOOP('',(#56844,#56845,#56846,#56853)); +#56844 = ORIENTED_EDGE('',*,*,#56667,.F.); +#56845 = ORIENTED_EDGE('',*,*,#56684,.T.); +#56846 = ORIENTED_EDGE('',*,*,#56847,.T.); +#56847 = EDGE_CURVE('',#56685,#56708,#56848,.T.); +#56848 = CIRCLE('',#56849,5.E-02); +#56849 = AXIS2_PLACEMENT_3D('',#56850,#56851,#56852); +#56850 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#56851 = DIRECTION('',(0.,-1.,0.)); +#56852 = DIRECTION('',(1.,0.,0.)); +#56853 = ORIENTED_EDGE('',*,*,#56707,.F.); +#56854 = CYLINDRICAL_SURFACE('',#56855,5.E-02); +#56855 = AXIS2_PLACEMENT_3D('',#56856,#56857,#56858); +#56856 = CARTESIAN_POINT('',(0.95,0.,5.E-02)); +#56857 = DIRECTION('',(-0.,1.,0.)); +#56858 = DIRECTION('',(1.,0.,-0.)); +#56859 = ADVANCED_FACE('',(#56860),#56872,.T.); +#56860 = FACE_BOUND('',#56861,.T.); +#56861 = EDGE_LOOP('',(#56862,#56863,#56870,#56871)); +#56862 = ORIENTED_EDGE('',*,*,#56723,.T.); +#56863 = ORIENTED_EDGE('',*,*,#56864,.T.); +#56864 = EDGE_CURVE('',#56716,#56757,#56865,.T.); +#56865 = CIRCLE('',#56866,5.E-02); +#56866 = AXIS2_PLACEMENT_3D('',#56867,#56868,#56869); +#56867 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#56868 = DIRECTION('',(0.,-1.,-0.)); +#56869 = DIRECTION('',(1.,0.,0.)); +#56870 = ORIENTED_EDGE('',*,*,#56756,.F.); +#56871 = ORIENTED_EDGE('',*,*,#56737,.T.); +#56872 = CYLINDRICAL_SURFACE('',#56873,5.E-02); +#56873 = AXIS2_PLACEMENT_3D('',#56874,#56875,#56876); +#56874 = CARTESIAN_POINT('',(0.95,0.,0.45)); +#56875 = DIRECTION('',(0.,1.,0.)); +#56876 = DIRECTION('',(1.,0.,-0.)); +#56877 = ADVANCED_FACE('',(#56878),#56896,.T.); +#56878 = FACE_BOUND('',#56879,.T.); +#56879 = EDGE_LOOP('',(#56880,#56881,#56888,#56889)); +#56880 = ORIENTED_EDGE('',*,*,#56715,.F.); +#56881 = ORIENTED_EDGE('',*,*,#56882,.T.); +#56882 = EDGE_CURVE('',#56708,#56779,#56883,.T.); +#56883 = CIRCLE('',#56884,5.E-02); +#56884 = AXIS2_PLACEMENT_3D('',#56885,#56886,#56887); +#56885 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#56886 = DIRECTION('',(0.,0.,1.)); +#56887 = DIRECTION('',(1.,0.,-0.)); +#56888 = ORIENTED_EDGE('',*,*,#56831,.T.); +#56889 = ORIENTED_EDGE('',*,*,#56890,.T.); +#56890 = EDGE_CURVE('',#56804,#56716,#56891,.T.); +#56891 = CIRCLE('',#56892,5.E-02); +#56892 = AXIS2_PLACEMENT_3D('',#56893,#56894,#56895); +#56893 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#56894 = DIRECTION('',(0.,0.,-1.)); +#56895 = DIRECTION('',(1.,0.,0.)); +#56896 = CYLINDRICAL_SURFACE('',#56897,5.E-02); +#56897 = AXIS2_PLACEMENT_3D('',#56898,#56899,#56900); +#56898 = CARTESIAN_POINT('',(0.95,0.45,0.)); +#56899 = DIRECTION('',(0.,0.,1.)); +#56900 = DIRECTION('',(1.,0.,-0.)); +#56901 = ADVANCED_FACE('',(#56902),#56907,.T.); +#56902 = FACE_BOUND('',#56903,.T.); +#56903 = EDGE_LOOP('',(#56904,#56905,#56906)); +#56904 = ORIENTED_EDGE('',*,*,#56847,.F.); +#56905 = ORIENTED_EDGE('',*,*,#56786,.T.); +#56906 = ORIENTED_EDGE('',*,*,#56882,.F.); +#56907 = SPHERICAL_SURFACE('',#56908,5.E-02); +#56908 = AXIS2_PLACEMENT_3D('',#56909,#56910,#56911); +#56909 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#56910 = DIRECTION('',(0.,0.,1.)); +#56911 = DIRECTION('',(1.,0.,-0.)); +#56912 = ADVANCED_FACE('',(#56913),#56918,.T.); +#56913 = FACE_BOUND('',#56914,.T.); +#56914 = EDGE_LOOP('',(#56915,#56916,#56917)); +#56915 = ORIENTED_EDGE('',*,*,#56890,.F.); +#56916 = ORIENTED_EDGE('',*,*,#56813,.T.); +#56917 = ORIENTED_EDGE('',*,*,#56864,.F.); +#56918 = SPHERICAL_SURFACE('',#56919,5.E-02); +#56919 = AXIS2_PLACEMENT_3D('',#56920,#56921,#56922); +#56920 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#56921 = DIRECTION('',(0.,-1.,-0.)); +#56922 = DIRECTION('',(1.,0.,0.)); +#56923 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#56927)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#56924,#56925,#56926)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#56924 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#56925 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#56926 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#56927 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#56924, + 'distance_accuracy_value','confusion accuracy'); +#56928 = SHAPE_DEFINITION_REPRESENTATION(#56929,#56468); +#56929 = PRODUCT_DEFINITION_SHAPE('','',#56930); +#56930 = PRODUCT_DEFINITION('design','',#56931,#56934); +#56931 = PRODUCT_DEFINITION_FORMATION('','',#56932); +#56932 = PRODUCT('Open CASCADE STEP translator 6.8 54.1.2', + 'Open CASCADE STEP translator 6.8 54.1.2','',(#56933)); +#56933 = PRODUCT_CONTEXT('',#2,'mechanical'); +#56934 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#56935 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#56936,#56938); +#56936 = ( REPRESENTATION_RELATIONSHIP('','',#56468,#55981) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#56937) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#56937 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55986); +#56938 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #56939); +#56939 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('80','267','',#55976,#56930,$); +#56940 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#56932)); +#56941 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#56942,#56944); +#56942 = ( REPRESENTATION_RELATIONSHIP('','',#55981,#55960) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#56943) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#56943 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55961); +#56944 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #56945); +#56945 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('81','268','',#55955,#55976,$); +#56946 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#55978)); +#56947 = SHAPE_DEFINITION_REPRESENTATION(#56948,#56954); +#56948 = PRODUCT_DEFINITION_SHAPE('','',#56949); +#56949 = PRODUCT_DEFINITION('design','',#56950,#56953); +#56950 = PRODUCT_DEFINITION_FORMATION('','',#56951); +#56951 = PRODUCT('Mid_Body','Mid_Body','',(#56952)); +#56952 = PRODUCT_CONTEXT('',#2,'mechanical'); +#56953 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#56954 = SHAPE_REPRESENTATION('',(#11,#56955),#56959); +#56955 = AXIS2_PLACEMENT_3D('',#56956,#56957,#56958); +#56956 = CARTESIAN_POINT('',(0.,0.,0.)); +#56957 = DIRECTION('',(0.,0.,1.)); +#56958 = DIRECTION('',(1.,0.,0.)); +#56959 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#56963)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#56960,#56961,#56962)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#56960 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#56961 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#56962 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#56963 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#56960, + 'distance_accuracy_value','confusion accuracy'); +#56964 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#56965),#57255); +#56965 = MANIFOLD_SOLID_BREP('',#56966); +#56966 = CLOSED_SHELL('',(#56967,#57007,#57040,#57099,#57124,#57175, + #57192,#57209,#57226,#57243)); +#56967 = ADVANCED_FACE('',(#56968),#57002,.F.); +#56968 = FACE_BOUND('',#56969,.F.); +#56969 = EDGE_LOOP('',(#56970,#56980,#56988,#56996)); +#56970 = ORIENTED_EDGE('',*,*,#56971,.F.); +#56971 = EDGE_CURVE('',#56972,#56974,#56976,.T.); +#56972 = VERTEX_POINT('',#56973); +#56973 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,5.E-02)); +#56974 = VERTEX_POINT('',#56975); +#56975 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,5.E-02)); +#56976 = LINE('',#56977,#56978); +#56977 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,5.E-02)); +#56978 = VECTOR('',#56979,1.); +#56979 = DIRECTION('',(1.,0.,-0.)); +#56980 = ORIENTED_EDGE('',*,*,#56981,.T.); +#56981 = EDGE_CURVE('',#56972,#56982,#56984,.T.); +#56982 = VERTEX_POINT('',#56983); +#56983 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,0.45)); +#56984 = LINE('',#56985,#56986); +#56985 = CARTESIAN_POINT('',(0.25,0.,0.)); +#56986 = VECTOR('',#56987,1.); +#56987 = DIRECTION('',(0.,0.,1.)); +#56988 = ORIENTED_EDGE('',*,*,#56989,.T.); +#56989 = EDGE_CURVE('',#56982,#56990,#56992,.T.); +#56990 = VERTEX_POINT('',#56991); +#56991 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,0.45)); +#56992 = LINE('',#56993,#56994); +#56993 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,0.45)); +#56994 = VECTOR('',#56995,1.); +#56995 = DIRECTION('',(1.,0.,-0.)); +#56996 = ORIENTED_EDGE('',*,*,#56997,.F.); +#56997 = EDGE_CURVE('',#56974,#56990,#56998,.T.); +#56998 = LINE('',#56999,#57000); +#56999 = CARTESIAN_POINT('',(0.75,0.,0.)); +#57000 = VECTOR('',#57001,1.); +#57001 = DIRECTION('',(0.,0.,1.)); +#57002 = PLANE('',#57003); +#57003 = AXIS2_PLACEMENT_3D('',#57004,#57005,#57006); +#57004 = CARTESIAN_POINT('',(0.,0.,0.)); +#57005 = DIRECTION('',(-0.,1.,0.)); +#57006 = DIRECTION('',(0.,0.,1.)); +#57007 = ADVANCED_FACE('',(#57008),#57035,.T.); +#57008 = FACE_BOUND('',#57009,.T.); +#57009 = EDGE_LOOP('',(#57010,#57011,#57020,#57028)); +#57010 = ORIENTED_EDGE('',*,*,#56971,.F.); +#57011 = ORIENTED_EDGE('',*,*,#57012,.T.); +#57012 = EDGE_CURVE('',#56972,#57013,#57015,.T.); +#57013 = VERTEX_POINT('',#57014); +#57014 = CARTESIAN_POINT('',(0.25,5.E-02,-3.469446951954E-18)); +#57015 = CIRCLE('',#57016,5.E-02); +#57016 = AXIS2_PLACEMENT_3D('',#57017,#57018,#57019); +#57017 = CARTESIAN_POINT('',(0.25,5.E-02,5.E-02)); +#57018 = DIRECTION('',(1.,0.,0.)); +#57019 = DIRECTION('',(0.,-1.,0.)); +#57020 = ORIENTED_EDGE('',*,*,#57021,.T.); +#57021 = EDGE_CURVE('',#57013,#57022,#57024,.T.); +#57022 = VERTEX_POINT('',#57023); +#57023 = CARTESIAN_POINT('',(0.75,5.E-02,-3.469446951954E-18)); +#57024 = LINE('',#57025,#57026); +#57025 = CARTESIAN_POINT('',(0.,5.E-02,-6.938893903907E-18)); +#57026 = VECTOR('',#57027,1.); +#57027 = DIRECTION('',(1.,0.,-0.)); +#57028 = ORIENTED_EDGE('',*,*,#57029,.F.); +#57029 = EDGE_CURVE('',#56974,#57022,#57030,.T.); +#57030 = CIRCLE('',#57031,5.E-02); +#57031 = AXIS2_PLACEMENT_3D('',#57032,#57033,#57034); +#57032 = CARTESIAN_POINT('',(0.75,5.E-02,5.E-02)); +#57033 = DIRECTION('',(1.,0.,0.)); +#57034 = DIRECTION('',(0.,-1.,0.)); +#57035 = CYLINDRICAL_SURFACE('',#57036,5.E-02); +#57036 = AXIS2_PLACEMENT_3D('',#57037,#57038,#57039); +#57037 = CARTESIAN_POINT('',(0.,5.E-02,5.E-02)); +#57038 = DIRECTION('',(1.,0.,-0.)); +#57039 = DIRECTION('',(0.,-1.,0.)); +#57040 = ADVANCED_FACE('',(#57041),#57094,.T.); +#57041 = FACE_BOUND('',#57042,.T.); +#57042 = EDGE_LOOP('',(#57043,#57044,#57045,#57053,#57062,#57070,#57079, + #57087)); +#57043 = ORIENTED_EDGE('',*,*,#56997,.F.); +#57044 = ORIENTED_EDGE('',*,*,#57029,.T.); +#57045 = ORIENTED_EDGE('',*,*,#57046,.T.); +#57046 = EDGE_CURVE('',#57022,#57047,#57049,.T.); +#57047 = VERTEX_POINT('',#57048); +#57048 = CARTESIAN_POINT('',(0.75,0.45,-3.469446951954E-18)); +#57049 = LINE('',#57050,#57051); +#57050 = CARTESIAN_POINT('',(0.75,0.,0.)); +#57051 = VECTOR('',#57052,1.); +#57052 = DIRECTION('',(-0.,1.,0.)); +#57053 = ORIENTED_EDGE('',*,*,#57054,.T.); +#57054 = EDGE_CURVE('',#57047,#57055,#57057,.T.); +#57055 = VERTEX_POINT('',#57056); +#57056 = CARTESIAN_POINT('',(0.75,0.5,5.E-02)); +#57057 = CIRCLE('',#57058,5.E-02); +#57058 = AXIS2_PLACEMENT_3D('',#57059,#57060,#57061); +#57059 = CARTESIAN_POINT('',(0.75,0.45,5.E-02)); +#57060 = DIRECTION('',(1.,0.,-0.)); +#57061 = DIRECTION('',(0.,1.,0.)); +#57062 = ORIENTED_EDGE('',*,*,#57063,.T.); +#57063 = EDGE_CURVE('',#57055,#57064,#57066,.T.); +#57064 = VERTEX_POINT('',#57065); +#57065 = CARTESIAN_POINT('',(0.75,0.5,0.45)); +#57066 = LINE('',#57067,#57068); +#57067 = CARTESIAN_POINT('',(0.75,0.5,0.)); +#57068 = VECTOR('',#57069,1.); +#57069 = DIRECTION('',(0.,0.,1.)); +#57070 = ORIENTED_EDGE('',*,*,#57071,.T.); +#57071 = EDGE_CURVE('',#57064,#57072,#57074,.T.); +#57072 = VERTEX_POINT('',#57073); +#57073 = CARTESIAN_POINT('',(0.75,0.45,0.5)); +#57074 = CIRCLE('',#57075,5.E-02); +#57075 = AXIS2_PLACEMENT_3D('',#57076,#57077,#57078); +#57076 = CARTESIAN_POINT('',(0.75,0.45,0.45)); +#57077 = DIRECTION('',(1.,0.,-0.)); +#57078 = DIRECTION('',(0.,1.,0.)); +#57079 = ORIENTED_EDGE('',*,*,#57080,.F.); +#57080 = EDGE_CURVE('',#57081,#57072,#57083,.T.); +#57081 = VERTEX_POINT('',#57082); +#57082 = CARTESIAN_POINT('',(0.75,5.E-02,0.5)); +#57083 = LINE('',#57084,#57085); +#57084 = CARTESIAN_POINT('',(0.75,0.,0.5)); +#57085 = VECTOR('',#57086,1.); +#57086 = DIRECTION('',(-0.,1.,0.)); +#57087 = ORIENTED_EDGE('',*,*,#57088,.T.); +#57088 = EDGE_CURVE('',#57081,#56990,#57089,.T.); +#57089 = CIRCLE('',#57090,5.E-02); +#57090 = AXIS2_PLACEMENT_3D('',#57091,#57092,#57093); +#57091 = CARTESIAN_POINT('',(0.75,5.E-02,0.45)); +#57092 = DIRECTION('',(1.,0.,0.)); +#57093 = DIRECTION('',(0.,-1.,0.)); +#57094 = PLANE('',#57095); +#57095 = AXIS2_PLACEMENT_3D('',#57096,#57097,#57098); +#57096 = CARTESIAN_POINT('',(0.75,0.,0.)); +#57097 = DIRECTION('',(1.,0.,-0.)); +#57098 = DIRECTION('',(0.,0.,1.)); +#57099 = ADVANCED_FACE('',(#57100),#57119,.T.); +#57100 = FACE_BOUND('',#57101,.T.); +#57101 = EDGE_LOOP('',(#57102,#57103,#57104,#57112)); +#57102 = ORIENTED_EDGE('',*,*,#56989,.T.); +#57103 = ORIENTED_EDGE('',*,*,#57088,.F.); +#57104 = ORIENTED_EDGE('',*,*,#57105,.F.); +#57105 = EDGE_CURVE('',#57106,#57081,#57108,.T.); +#57106 = VERTEX_POINT('',#57107); +#57107 = CARTESIAN_POINT('',(0.25,5.E-02,0.5)); +#57108 = LINE('',#57109,#57110); +#57109 = CARTESIAN_POINT('',(0.,5.E-02,0.5)); +#57110 = VECTOR('',#57111,1.); +#57111 = DIRECTION('',(1.,0.,-0.)); +#57112 = ORIENTED_EDGE('',*,*,#57113,.T.); +#57113 = EDGE_CURVE('',#57106,#56982,#57114,.T.); +#57114 = CIRCLE('',#57115,5.E-02); +#57115 = AXIS2_PLACEMENT_3D('',#57116,#57117,#57118); +#57116 = CARTESIAN_POINT('',(0.25,5.E-02,0.45)); +#57117 = DIRECTION('',(1.,0.,0.)); +#57118 = DIRECTION('',(0.,-1.,0.)); +#57119 = CYLINDRICAL_SURFACE('',#57120,5.E-02); +#57120 = AXIS2_PLACEMENT_3D('',#57121,#57122,#57123); +#57121 = CARTESIAN_POINT('',(0.,5.E-02,0.45)); +#57122 = DIRECTION('',(1.,0.,-0.)); +#57123 = DIRECTION('',(0.,-1.,0.)); +#57124 = ADVANCED_FACE('',(#57125),#57170,.F.); +#57125 = FACE_BOUND('',#57126,.F.); +#57126 = EDGE_LOOP('',(#57127,#57128,#57129,#57137,#57146,#57154,#57163, + #57169)); +#57127 = ORIENTED_EDGE('',*,*,#56981,.F.); +#57128 = ORIENTED_EDGE('',*,*,#57012,.T.); +#57129 = ORIENTED_EDGE('',*,*,#57130,.T.); +#57130 = EDGE_CURVE('',#57013,#57131,#57133,.T.); +#57131 = VERTEX_POINT('',#57132); +#57132 = CARTESIAN_POINT('',(0.25,0.45,-3.469446951954E-18)); +#57133 = LINE('',#57134,#57135); +#57134 = CARTESIAN_POINT('',(0.25,0.,0.)); +#57135 = VECTOR('',#57136,1.); +#57136 = DIRECTION('',(-0.,1.,0.)); +#57137 = ORIENTED_EDGE('',*,*,#57138,.T.); +#57138 = EDGE_CURVE('',#57131,#57139,#57141,.T.); +#57139 = VERTEX_POINT('',#57140); +#57140 = CARTESIAN_POINT('',(0.25,0.5,5.E-02)); +#57141 = CIRCLE('',#57142,5.E-02); +#57142 = AXIS2_PLACEMENT_3D('',#57143,#57144,#57145); +#57143 = CARTESIAN_POINT('',(0.25,0.45,5.E-02)); +#57144 = DIRECTION('',(1.,0.,-0.)); +#57145 = DIRECTION('',(0.,1.,0.)); +#57146 = ORIENTED_EDGE('',*,*,#57147,.T.); +#57147 = EDGE_CURVE('',#57139,#57148,#57150,.T.); +#57148 = VERTEX_POINT('',#57149); +#57149 = CARTESIAN_POINT('',(0.25,0.5,0.45)); +#57150 = LINE('',#57151,#57152); +#57151 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#57152 = VECTOR('',#57153,1.); +#57153 = DIRECTION('',(0.,0.,1.)); +#57154 = ORIENTED_EDGE('',*,*,#57155,.T.); +#57155 = EDGE_CURVE('',#57148,#57156,#57158,.T.); +#57156 = VERTEX_POINT('',#57157); +#57157 = CARTESIAN_POINT('',(0.25,0.45,0.5)); +#57158 = CIRCLE('',#57159,5.E-02); +#57159 = AXIS2_PLACEMENT_3D('',#57160,#57161,#57162); +#57160 = CARTESIAN_POINT('',(0.25,0.45,0.45)); +#57161 = DIRECTION('',(1.,0.,-0.)); +#57162 = DIRECTION('',(0.,1.,0.)); +#57163 = ORIENTED_EDGE('',*,*,#57164,.F.); +#57164 = EDGE_CURVE('',#57106,#57156,#57165,.T.); +#57165 = LINE('',#57166,#57167); +#57166 = CARTESIAN_POINT('',(0.25,0.,0.5)); +#57167 = VECTOR('',#57168,1.); +#57168 = DIRECTION('',(0.,1.,0.)); +#57169 = ORIENTED_EDGE('',*,*,#57113,.T.); +#57170 = PLANE('',#57171); +#57171 = AXIS2_PLACEMENT_3D('',#57172,#57173,#57174); +#57172 = CARTESIAN_POINT('',(0.25,0.,0.)); +#57173 = DIRECTION('',(1.,0.,-0.)); +#57174 = DIRECTION('',(0.,0.,1.)); +#57175 = ADVANCED_FACE('',(#57176),#57187,.F.); +#57176 = FACE_BOUND('',#57177,.F.); +#57177 = EDGE_LOOP('',(#57178,#57179,#57180,#57181)); +#57178 = ORIENTED_EDGE('',*,*,#57130,.F.); +#57179 = ORIENTED_EDGE('',*,*,#57021,.T.); +#57180 = ORIENTED_EDGE('',*,*,#57046,.T.); +#57181 = ORIENTED_EDGE('',*,*,#57182,.F.); +#57182 = EDGE_CURVE('',#57131,#57047,#57183,.T.); +#57183 = LINE('',#57184,#57185); +#57184 = CARTESIAN_POINT('',(0.,0.45,-6.938893903907E-18)); +#57185 = VECTOR('',#57186,1.); +#57186 = DIRECTION('',(1.,0.,-0.)); +#57187 = PLANE('',#57188); +#57188 = AXIS2_PLACEMENT_3D('',#57189,#57190,#57191); +#57189 = CARTESIAN_POINT('',(0.,0.,0.)); +#57190 = DIRECTION('',(0.,0.,1.)); +#57191 = DIRECTION('',(1.,0.,-0.)); +#57192 = ADVANCED_FACE('',(#57193),#57204,.T.); +#57193 = FACE_BOUND('',#57194,.T.); +#57194 = EDGE_LOOP('',(#57195,#57196,#57197,#57198)); +#57195 = ORIENTED_EDGE('',*,*,#57164,.F.); +#57196 = ORIENTED_EDGE('',*,*,#57105,.T.); +#57197 = ORIENTED_EDGE('',*,*,#57080,.T.); +#57198 = ORIENTED_EDGE('',*,*,#57199,.F.); +#57199 = EDGE_CURVE('',#57156,#57072,#57200,.T.); +#57200 = LINE('',#57201,#57202); +#57201 = CARTESIAN_POINT('',(0.,0.45,0.5)); +#57202 = VECTOR('',#57203,1.); +#57203 = DIRECTION('',(1.,0.,-0.)); +#57204 = PLANE('',#57205); +#57205 = AXIS2_PLACEMENT_3D('',#57206,#57207,#57208); +#57206 = CARTESIAN_POINT('',(0.,0.,0.5)); +#57207 = DIRECTION('',(0.,0.,1.)); +#57208 = DIRECTION('',(1.,0.,-0.)); +#57209 = ADVANCED_FACE('',(#57210),#57221,.T.); +#57210 = FACE_BOUND('',#57211,.T.); +#57211 = EDGE_LOOP('',(#57212,#57218,#57219,#57220)); +#57212 = ORIENTED_EDGE('',*,*,#57213,.F.); +#57213 = EDGE_CURVE('',#57148,#57064,#57214,.T.); +#57214 = LINE('',#57215,#57216); +#57215 = CARTESIAN_POINT('',(0.,0.5,0.45)); +#57216 = VECTOR('',#57217,1.); +#57217 = DIRECTION('',(1.,0.,-0.)); +#57218 = ORIENTED_EDGE('',*,*,#57155,.T.); +#57219 = ORIENTED_EDGE('',*,*,#57199,.T.); +#57220 = ORIENTED_EDGE('',*,*,#57071,.F.); +#57221 = CYLINDRICAL_SURFACE('',#57222,5.E-02); +#57222 = AXIS2_PLACEMENT_3D('',#57223,#57224,#57225); +#57223 = CARTESIAN_POINT('',(0.,0.45,0.45)); +#57224 = DIRECTION('',(1.,0.,-0.)); +#57225 = DIRECTION('',(0.,1.,0.)); +#57226 = ADVANCED_FACE('',(#57227),#57238,.T.); +#57227 = FACE_BOUND('',#57228,.T.); +#57228 = EDGE_LOOP('',(#57229,#57235,#57236,#57237)); +#57229 = ORIENTED_EDGE('',*,*,#57230,.F.); +#57230 = EDGE_CURVE('',#57139,#57055,#57231,.T.); +#57231 = LINE('',#57232,#57233); +#57232 = CARTESIAN_POINT('',(0.,0.5,5.E-02)); +#57233 = VECTOR('',#57234,1.); +#57234 = DIRECTION('',(1.,0.,-0.)); +#57235 = ORIENTED_EDGE('',*,*,#57147,.T.); +#57236 = ORIENTED_EDGE('',*,*,#57213,.T.); +#57237 = ORIENTED_EDGE('',*,*,#57063,.F.); +#57238 = PLANE('',#57239); +#57239 = AXIS2_PLACEMENT_3D('',#57240,#57241,#57242); +#57240 = CARTESIAN_POINT('',(0.,0.5,0.)); +#57241 = DIRECTION('',(-0.,1.,0.)); +#57242 = DIRECTION('',(0.,0.,1.)); +#57243 = ADVANCED_FACE('',(#57244),#57250,.T.); +#57244 = FACE_BOUND('',#57245,.T.); +#57245 = EDGE_LOOP('',(#57246,#57247,#57248,#57249)); +#57246 = ORIENTED_EDGE('',*,*,#57230,.T.); +#57247 = ORIENTED_EDGE('',*,*,#57054,.F.); +#57248 = ORIENTED_EDGE('',*,*,#57182,.F.); +#57249 = ORIENTED_EDGE('',*,*,#57138,.T.); +#57250 = CYLINDRICAL_SURFACE('',#57251,5.E-02); +#57251 = AXIS2_PLACEMENT_3D('',#57252,#57253,#57254); +#57252 = CARTESIAN_POINT('',(0.,0.45,5.E-02)); +#57253 = DIRECTION('',(1.,0.,-0.)); +#57254 = DIRECTION('',(0.,1.,0.)); +#57255 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57259)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57256,#57257,#57258)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57256 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57257 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57258 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57259 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57256, + 'distance_accuracy_value','confusion accuracy'); +#57260 = SHAPE_DEFINITION_REPRESENTATION(#57261,#56964); +#57261 = PRODUCT_DEFINITION_SHAPE('','',#57262); +#57262 = PRODUCT_DEFINITION('design','',#57263,#57266); +#57263 = PRODUCT_DEFINITION_FORMATION('','',#57264); +#57264 = PRODUCT('Open CASCADE STEP translator 6.8 54.2.1', + 'Open CASCADE STEP translator 6.8 54.2.1','',(#57265)); +#57265 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57266 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57267 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57268,#57270); +#57268 = ( REPRESENTATION_RELATIONSHIP('','',#56964,#56954) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57269) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57269 = ITEM_DEFINED_TRANSFORMATION('','',#11,#56955); +#57270 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57271); +#57271 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('82','269','',#56949,#57262,$); +#57272 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57264)); +#57273 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57274,#57276); +#57274 = ( REPRESENTATION_RELATIONSHIP('','',#56954,#55960) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57275) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57275 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55965); +#57276 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57277); +#57277 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('83','270','',#55955,#56949,$); +#57278 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#56951)); +#57279 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57280,#57282); +#57280 = ( REPRESENTATION_RELATIONSHIP('','',#55960,#55943) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57281) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57281 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55944); +#57282 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57283); +#57283 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('84','','',#55938,#55955,$); +#57284 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#55957)); +#57285 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57286,#57288); +#57286 = ( REPRESENTATION_RELATIONSHIP('','',#55943,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57287) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57287 = ITEM_DEFINED_TRANSFORMATION('','',#11,#111); +#57288 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57289); +#57289 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('85','','',#5,#55938,$); +#57290 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#55940)); +#57291 = SHAPE_DEFINITION_REPRESENTATION(#57292,#57298); +#57292 = PRODUCT_DEFINITION_SHAPE('','',#57293); +#57293 = PRODUCT_DEFINITION('design','',#57294,#57297); +#57294 = PRODUCT_DEFINITION_FORMATION('','',#57295); +#57295 = PRODUCT('C13','C13','',(#57296)); +#57296 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57297 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57298 = SHAPE_REPRESENTATION('',(#11,#57299),#57303); +#57299 = AXIS2_PLACEMENT_3D('',#57300,#57301,#57302); +#57300 = CARTESIAN_POINT('',(303.63153076171,171.78552246093,0.)); +#57301 = DIRECTION('',(0.,0.,1.)); +#57302 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#57303 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57307)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57304,#57305,#57306)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57304 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57305 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57306 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57307 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57304, + 'distance_accuracy_value','confusion accuracy'); +#57308 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57309,#57311); +#57309 = ( REPRESENTATION_RELATIONSHIP('','',#55960,#57298) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57310) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57310 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57299); +#57311 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57312); +#57312 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('86','','',#57293,#55955,$); +#57313 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57314,#57316); +#57314 = ( REPRESENTATION_RELATIONSHIP('','',#57298,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57315) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57315 = ITEM_DEFINED_TRANSFORMATION('','',#11,#115); +#57316 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57317); +#57317 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('87','','',#5,#57293,$); +#57318 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57295)); +#57319 = SHAPE_DEFINITION_REPRESENTATION(#57320,#57326); +#57320 = PRODUCT_DEFINITION_SHAPE('','',#57321); +#57321 = PRODUCT_DEFINITION('design','',#57322,#57325); +#57322 = PRODUCT_DEFINITION_FORMATION('','',#57323); +#57323 = PRODUCT('C12','C12','',(#57324)); +#57324 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57325 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57326 = SHAPE_REPRESENTATION('',(#11,#57327),#57331); +#57327 = AXIS2_PLACEMENT_3D('',#57328,#57329,#57330); +#57328 = CARTESIAN_POINT('',(303.64212036132,182.21240234375,0.)); +#57329 = DIRECTION('',(0.,0.,1.)); +#57330 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#57331 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57335)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57332,#57333,#57334)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57332 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57333 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57334 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57335 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57332, + 'distance_accuracy_value','confusion accuracy'); +#57336 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57337,#57339); +#57337 = ( REPRESENTATION_RELATIONSHIP('','',#55960,#57326) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57338) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57338 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57327); +#57339 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57340); +#57340 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('88','','',#57321,#55955,$); +#57341 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57342,#57344); +#57342 = ( REPRESENTATION_RELATIONSHIP('','',#57326,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57343) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57343 = ITEM_DEFINED_TRANSFORMATION('','',#11,#119); +#57344 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57345); +#57345 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('89','','',#5,#57321,$); +#57346 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57323)); +#57347 = SHAPE_DEFINITION_REPRESENTATION(#57348,#57354); +#57348 = PRODUCT_DEFINITION_SHAPE('','',#57349); +#57349 = PRODUCT_DEFINITION('design','',#57350,#57353); +#57350 = PRODUCT_DEFINITION_FORMATION('','',#57351); +#57351 = PRODUCT('C11','C11','',(#57352)); +#57352 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57353 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57354 = SHAPE_REPRESENTATION('',(#11,#57355),#57359); +#57355 = AXIS2_PLACEMENT_3D('',#57356,#57357,#57358); +#57356 = CARTESIAN_POINT('',(303.63153076171,173.99533081054,0.)); +#57357 = DIRECTION('',(0.,0.,1.)); +#57358 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#57359 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57363)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57360,#57361,#57362)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57360 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57361 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57362 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57363 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57360, + 'distance_accuracy_value','confusion accuracy'); +#57364 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57365,#57367); +#57365 = ( REPRESENTATION_RELATIONSHIP('','',#55960,#57354) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57366) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57366 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57355); +#57367 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57368); +#57368 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('90','','',#57349,#55955,$); +#57369 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57370,#57372); +#57370 = ( REPRESENTATION_RELATIONSHIP('','',#57354,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57371) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57371 = ITEM_DEFINED_TRANSFORMATION('','',#11,#123); +#57372 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57373); +#57373 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('91','','',#5,#57349,$); +#57374 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57351)); +#57375 = SHAPE_DEFINITION_REPRESENTATION(#57376,#57382); +#57376 = PRODUCT_DEFINITION_SHAPE('','',#57377); +#57377 = PRODUCT_DEFINITION('design','',#57378,#57381); +#57378 = PRODUCT_DEFINITION_FORMATION('','',#57379); +#57379 = PRODUCT('C10','C10','',(#57380)); +#57380 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57381 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57382 = SHAPE_REPRESENTATION('',(#11,#57383),#57387); +#57383 = AXIS2_PLACEMENT_3D('',#57384,#57385,#57386); +#57384 = CARTESIAN_POINT('',(303.63153076171,174.9097290039,0.)); +#57385 = DIRECTION('',(0.,0.,1.)); +#57386 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#57387 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57391)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57388,#57389,#57390)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57388 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57389 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57390 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57391 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57388, + 'distance_accuracy_value','confusion accuracy'); +#57392 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57393,#57395); +#57393 = ( REPRESENTATION_RELATIONSHIP('','',#55960,#57382) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57394) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57394 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57383); +#57395 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57396); +#57396 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('92','','',#57377,#55955,$); +#57397 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57398,#57400); +#57398 = ( REPRESENTATION_RELATIONSHIP('','',#57382,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57399) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57399 = ITEM_DEFINED_TRANSFORMATION('','',#11,#127); +#57400 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57401); +#57401 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('93','','',#5,#57377,$); +#57402 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57379)); +#57403 = SHAPE_DEFINITION_REPRESENTATION(#57404,#57410); +#57404 = PRODUCT_DEFINITION_SHAPE('','',#57405); +#57405 = PRODUCT_DEFINITION('design','',#57406,#57409); +#57406 = PRODUCT_DEFINITION_FORMATION('','',#57407); +#57407 = PRODUCT('C9','C9','',(#57408)); +#57408 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57409 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57410 = SHAPE_REPRESENTATION('',(#11,#57411),#57415); +#57411 = AXIS2_PLACEMENT_3D('',#57412,#57413,#57414); +#57412 = CARTESIAN_POINT('',(303.63153076171,175.82412719726,0.)); +#57413 = DIRECTION('',(0.,0.,1.)); +#57414 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#57415 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57419)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57416,#57417,#57418)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57416 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57417 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57418 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57419 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57416, + 'distance_accuracy_value','confusion accuracy'); +#57420 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57421,#57423); +#57421 = ( REPRESENTATION_RELATIONSHIP('','',#55960,#57410) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57422) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57422 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57411); +#57423 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57424); +#57424 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('94','','',#57405,#55955,$); +#57425 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57426,#57428); +#57426 = ( REPRESENTATION_RELATIONSHIP('','',#57410,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57427) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57427 = ITEM_DEFINED_TRANSFORMATION('','',#11,#131); +#57428 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57429); +#57429 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('95','','',#5,#57405,$); +#57430 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57407)); +#57431 = SHAPE_DEFINITION_REPRESENTATION(#57432,#57438); +#57432 = PRODUCT_DEFINITION_SHAPE('','',#57433); +#57433 = PRODUCT_DEFINITION('design','',#57434,#57437); +#57434 = PRODUCT_DEFINITION_FORMATION('','',#57435); +#57435 = PRODUCT('C8','C8','',(#57436)); +#57436 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57437 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57438 = SHAPE_REPRESENTATION('',(#11,#57439),#57443); +#57439 = AXIS2_PLACEMENT_3D('',#57440,#57441,#57442); +#57440 = CARTESIAN_POINT('',(301.49807739257,175.34152221679,0.)); +#57441 = DIRECTION('',(-0.,0.,1.)); +#57442 = DIRECTION('',(1.19248806385E-08,-1.,0.)); +#57443 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57447)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57444,#57445,#57446)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57444 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57445 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57446 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57447 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57444, + 'distance_accuracy_value','confusion accuracy'); +#57448 = SHAPE_DEFINITION_REPRESENTATION(#57449,#57455); +#57449 = PRODUCT_DEFINITION_SHAPE('','',#57450); +#57450 = PRODUCT_DEFINITION('design','',#57451,#57454); +#57451 = PRODUCT_DEFINITION_FORMATION('','',#57452); +#57452 = PRODUCT('6608419728','6608419728','',(#57453)); +#57453 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57454 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57455 = SHAPE_REPRESENTATION('',(#11,#57456,#57460),#57464); +#57456 = AXIS2_PLACEMENT_3D('',#57457,#57458,#57459); +#57457 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#57458 = DIRECTION('',(0.,0.,1.)); +#57459 = DIRECTION('',(1.,0.,0.)); +#57460 = AXIS2_PLACEMENT_3D('',#57461,#57462,#57463); +#57461 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#57462 = DIRECTION('',(0.,0.,1.)); +#57463 = DIRECTION('',(1.,0.,0.)); +#57464 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57468)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57465,#57466,#57467)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57465 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57466 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57467 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57468 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57465, + 'distance_accuracy_value','confusion accuracy'); +#57469 = SHAPE_DEFINITION_REPRESENTATION(#57470,#57476); +#57470 = PRODUCT_DEFINITION_SHAPE('','',#57471); +#57471 = PRODUCT_DEFINITION('design','',#57472,#57475); +#57472 = PRODUCT_DEFINITION_FORMATION('','',#57473); +#57473 = PRODUCT('Terminal','Terminal','',(#57474)); +#57474 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57475 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57476 = SHAPE_REPRESENTATION('',(#11,#57477,#57481),#57485); +#57477 = AXIS2_PLACEMENT_3D('',#57478,#57479,#57480); +#57478 = CARTESIAN_POINT('',(0.,0.,0.)); +#57479 = DIRECTION('',(0.,0.,1.)); +#57480 = DIRECTION('',(1.,0.,0.)); +#57481 = AXIS2_PLACEMENT_3D('',#57482,#57483,#57484); +#57482 = CARTESIAN_POINT('',(0.,0.,0.)); +#57483 = DIRECTION('',(0.,0.,1.)); +#57484 = DIRECTION('',(1.,0.,0.)); +#57485 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57489)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57486,#57487,#57488)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57486 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57487 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57488 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57489 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57486, + 'distance_accuracy_value','confusion accuracy'); +#57490 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#57491),#57945); +#57491 = MANIFOLD_SOLID_BREP('',#57492); +#57492 = CLOSED_SHELL('',(#57493,#57533,#57566,#57599,#57632,#57665, + #57682,#57699,#57730,#57761,#57778,#57809,#57826,#57857,#57875, + #57893,#57921,#57933)); +#57493 = ADVANCED_FACE('',(#57494),#57528,.F.); +#57494 = FACE_BOUND('',#57495,.F.); +#57495 = EDGE_LOOP('',(#57496,#57506,#57514,#57522)); +#57496 = ORIENTED_EDGE('',*,*,#57497,.F.); +#57497 = EDGE_CURVE('',#57498,#57500,#57502,.T.); +#57498 = VERTEX_POINT('',#57499); +#57499 = CARTESIAN_POINT('',(-6.938893903907E-18,5.E-02,5.E-02)); +#57500 = VERTEX_POINT('',#57501); +#57501 = CARTESIAN_POINT('',(-6.938893903907E-18,5.E-02,0.45)); +#57502 = LINE('',#57503,#57504); +#57503 = CARTESIAN_POINT('',(-6.938893903907E-18,5.E-02,0.)); +#57504 = VECTOR('',#57505,1.); +#57505 = DIRECTION('',(0.,0.,1.)); +#57506 = ORIENTED_EDGE('',*,*,#57507,.T.); +#57507 = EDGE_CURVE('',#57498,#57508,#57510,.T.); +#57508 = VERTEX_POINT('',#57509); +#57509 = CARTESIAN_POINT('',(-6.938893903907E-18,0.45,5.E-02)); +#57510 = LINE('',#57511,#57512); +#57511 = CARTESIAN_POINT('',(-6.938893903907E-18,0.,5.E-02)); +#57512 = VECTOR('',#57513,1.); +#57513 = DIRECTION('',(-0.,1.,0.)); +#57514 = ORIENTED_EDGE('',*,*,#57515,.T.); +#57515 = EDGE_CURVE('',#57508,#57516,#57518,.T.); +#57516 = VERTEX_POINT('',#57517); +#57517 = CARTESIAN_POINT('',(-6.938893903907E-18,0.45,0.45)); +#57518 = LINE('',#57519,#57520); +#57519 = CARTESIAN_POINT('',(-6.938893903907E-18,0.45,0.)); +#57520 = VECTOR('',#57521,1.); +#57521 = DIRECTION('',(0.,0.,1.)); +#57522 = ORIENTED_EDGE('',*,*,#57523,.F.); +#57523 = EDGE_CURVE('',#57500,#57516,#57524,.T.); +#57524 = LINE('',#57525,#57526); +#57525 = CARTESIAN_POINT('',(-6.938893903907E-18,0.,0.45)); +#57526 = VECTOR('',#57527,1.); +#57527 = DIRECTION('',(-0.,1.,0.)); +#57528 = PLANE('',#57529); +#57529 = AXIS2_PLACEMENT_3D('',#57530,#57531,#57532); +#57530 = CARTESIAN_POINT('',(0.,0.,0.)); +#57531 = DIRECTION('',(1.,0.,-0.)); +#57532 = DIRECTION('',(0.,0.,1.)); +#57533 = ADVANCED_FACE('',(#57534),#57561,.T.); +#57534 = FACE_BOUND('',#57535,.T.); +#57535 = EDGE_LOOP('',(#57536,#57537,#57546,#57554)); +#57536 = ORIENTED_EDGE('',*,*,#57497,.F.); +#57537 = ORIENTED_EDGE('',*,*,#57538,.T.); +#57538 = EDGE_CURVE('',#57498,#57539,#57541,.T.); +#57539 = VERTEX_POINT('',#57540); +#57540 = CARTESIAN_POINT('',(5.E-02,-6.938893903907E-18,5.E-02)); +#57541 = CIRCLE('',#57542,5.E-02); +#57542 = AXIS2_PLACEMENT_3D('',#57543,#57544,#57545); +#57543 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#57544 = DIRECTION('',(0.,0.,1.)); +#57545 = DIRECTION('',(-1.,0.,0.)); +#57546 = ORIENTED_EDGE('',*,*,#57547,.T.); +#57547 = EDGE_CURVE('',#57539,#57548,#57550,.T.); +#57548 = VERTEX_POINT('',#57549); +#57549 = CARTESIAN_POINT('',(5.E-02,-6.938893903907E-18,0.45)); +#57550 = LINE('',#57551,#57552); +#57551 = CARTESIAN_POINT('',(5.E-02,-6.938893903907E-18,0.)); +#57552 = VECTOR('',#57553,1.); +#57553 = DIRECTION('',(0.,0.,1.)); +#57554 = ORIENTED_EDGE('',*,*,#57555,.F.); +#57555 = EDGE_CURVE('',#57500,#57548,#57556,.T.); +#57556 = CIRCLE('',#57557,5.E-02); +#57557 = AXIS2_PLACEMENT_3D('',#57558,#57559,#57560); +#57558 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#57559 = DIRECTION('',(0.,0.,1.)); +#57560 = DIRECTION('',(-1.,0.,0.)); +#57561 = CYLINDRICAL_SURFACE('',#57562,5.E-02); +#57562 = AXIS2_PLACEMENT_3D('',#57563,#57564,#57565); +#57563 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.)); +#57564 = DIRECTION('',(0.,0.,1.)); +#57565 = DIRECTION('',(-1.,-0.,0.)); +#57566 = ADVANCED_FACE('',(#57567),#57594,.T.); +#57567 = FACE_BOUND('',#57568,.T.); +#57568 = EDGE_LOOP('',(#57569,#57570,#57579,#57587)); +#57569 = ORIENTED_EDGE('',*,*,#57507,.T.); +#57570 = ORIENTED_EDGE('',*,*,#57571,.F.); +#57571 = EDGE_CURVE('',#57572,#57508,#57574,.T.); +#57572 = VERTEX_POINT('',#57573); +#57573 = CARTESIAN_POINT('',(5.E-02,0.45,0.)); +#57574 = CIRCLE('',#57575,5.E-02); +#57575 = AXIS2_PLACEMENT_3D('',#57576,#57577,#57578); +#57576 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#57577 = DIRECTION('',(0.,1.,-0.)); +#57578 = DIRECTION('',(-1.,0.,0.)); +#57579 = ORIENTED_EDGE('',*,*,#57580,.F.); +#57580 = EDGE_CURVE('',#57581,#57572,#57583,.T.); +#57581 = VERTEX_POINT('',#57582); +#57582 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.)); +#57583 = LINE('',#57584,#57585); +#57584 = CARTESIAN_POINT('',(5.E-02,0.,-6.938893903907E-18)); +#57585 = VECTOR('',#57586,1.); +#57586 = DIRECTION('',(-0.,1.,0.)); +#57587 = ORIENTED_EDGE('',*,*,#57588,.T.); +#57588 = EDGE_CURVE('',#57581,#57498,#57589,.T.); +#57589 = CIRCLE('',#57590,5.E-02); +#57590 = AXIS2_PLACEMENT_3D('',#57591,#57592,#57593); +#57591 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#57592 = DIRECTION('',(0.,1.,-0.)); +#57593 = DIRECTION('',(-1.,0.,0.)); +#57594 = CYLINDRICAL_SURFACE('',#57595,5.E-02); +#57595 = AXIS2_PLACEMENT_3D('',#57596,#57597,#57598); +#57596 = CARTESIAN_POINT('',(5.E-02,0.,5.E-02)); +#57597 = DIRECTION('',(-0.,1.,0.)); +#57598 = DIRECTION('',(-1.,-0.,0.)); +#57599 = ADVANCED_FACE('',(#57600),#57627,.T.); +#57600 = FACE_BOUND('',#57601,.T.); +#57601 = EDGE_LOOP('',(#57602,#57611,#57619,#57626)); +#57602 = ORIENTED_EDGE('',*,*,#57603,.F.); +#57603 = EDGE_CURVE('',#57604,#57500,#57606,.T.); +#57604 = VERTEX_POINT('',#57605); +#57605 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.5)); +#57606 = CIRCLE('',#57607,5.E-02); +#57607 = AXIS2_PLACEMENT_3D('',#57608,#57609,#57610); +#57608 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#57609 = DIRECTION('',(0.,-1.,0.)); +#57610 = DIRECTION('',(-1.,0.,0.)); +#57611 = ORIENTED_EDGE('',*,*,#57612,.T.); +#57612 = EDGE_CURVE('',#57604,#57613,#57615,.T.); +#57613 = VERTEX_POINT('',#57614); +#57614 = CARTESIAN_POINT('',(5.E-02,0.45,0.5)); +#57615 = LINE('',#57616,#57617); +#57616 = CARTESIAN_POINT('',(5.E-02,0.,0.5)); +#57617 = VECTOR('',#57618,1.); +#57618 = DIRECTION('',(-0.,1.,0.)); +#57619 = ORIENTED_EDGE('',*,*,#57620,.F.); +#57620 = EDGE_CURVE('',#57516,#57613,#57621,.T.); +#57621 = CIRCLE('',#57622,5.E-02); +#57622 = AXIS2_PLACEMENT_3D('',#57623,#57624,#57625); +#57623 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#57624 = DIRECTION('',(-0.,1.,0.)); +#57625 = DIRECTION('',(-1.,-0.,0.)); +#57626 = ORIENTED_EDGE('',*,*,#57523,.F.); +#57627 = CYLINDRICAL_SURFACE('',#57628,5.E-02); +#57628 = AXIS2_PLACEMENT_3D('',#57629,#57630,#57631); +#57629 = CARTESIAN_POINT('',(5.E-02,0.,0.45)); +#57630 = DIRECTION('',(-0.,1.,0.)); +#57631 = DIRECTION('',(-1.,-0.,0.)); +#57632 = ADVANCED_FACE('',(#57633),#57660,.T.); +#57633 = FACE_BOUND('',#57634,.T.); +#57634 = EDGE_LOOP('',(#57635,#57644,#57652,#57659)); +#57635 = ORIENTED_EDGE('',*,*,#57636,.F.); +#57636 = EDGE_CURVE('',#57637,#57516,#57639,.T.); +#57637 = VERTEX_POINT('',#57638); +#57638 = CARTESIAN_POINT('',(5.E-02,0.5,0.45)); +#57639 = CIRCLE('',#57640,5.E-02); +#57640 = AXIS2_PLACEMENT_3D('',#57641,#57642,#57643); +#57641 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#57642 = DIRECTION('',(0.,0.,1.)); +#57643 = DIRECTION('',(-1.,-0.,0.)); +#57644 = ORIENTED_EDGE('',*,*,#57645,.F.); +#57645 = EDGE_CURVE('',#57646,#57637,#57648,.T.); +#57646 = VERTEX_POINT('',#57647); +#57647 = CARTESIAN_POINT('',(5.E-02,0.5,5.E-02)); +#57648 = LINE('',#57649,#57650); +#57649 = CARTESIAN_POINT('',(5.E-02,0.5,0.)); +#57650 = VECTOR('',#57651,1.); +#57651 = DIRECTION('',(0.,0.,1.)); +#57652 = ORIENTED_EDGE('',*,*,#57653,.F.); +#57653 = EDGE_CURVE('',#57508,#57646,#57654,.T.); +#57654 = CIRCLE('',#57655,5.E-02); +#57655 = AXIS2_PLACEMENT_3D('',#57656,#57657,#57658); +#57656 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#57657 = DIRECTION('',(0.,0.,-1.)); +#57658 = DIRECTION('',(-1.,0.,0.)); +#57659 = ORIENTED_EDGE('',*,*,#57515,.T.); +#57660 = CYLINDRICAL_SURFACE('',#57661,5.E-02); +#57661 = AXIS2_PLACEMENT_3D('',#57662,#57663,#57664); +#57662 = CARTESIAN_POINT('',(5.E-02,0.45,0.)); +#57663 = DIRECTION('',(0.,0.,1.)); +#57664 = DIRECTION('',(-1.,-0.,0.)); +#57665 = ADVANCED_FACE('',(#57666),#57677,.T.); +#57666 = FACE_BOUND('',#57667,.T.); +#57667 = EDGE_LOOP('',(#57668,#57669,#57676)); +#57668 = ORIENTED_EDGE('',*,*,#57588,.F.); +#57669 = ORIENTED_EDGE('',*,*,#57670,.T.); +#57670 = EDGE_CURVE('',#57581,#57539,#57671,.T.); +#57671 = CIRCLE('',#57672,5.E-02); +#57672 = AXIS2_PLACEMENT_3D('',#57673,#57674,#57675); +#57673 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#57674 = DIRECTION('',(-1.,6.123233995737E-17,0.)); +#57675 = DIRECTION('',(-6.123233995737E-17,-1.,0.)); +#57676 = ORIENTED_EDGE('',*,*,#57538,.F.); +#57677 = SPHERICAL_SURFACE('',#57678,5.E-02); +#57678 = AXIS2_PLACEMENT_3D('',#57679,#57680,#57681); +#57679 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#57680 = DIRECTION('',(0.,0.,1.)); +#57681 = DIRECTION('',(-1.,0.,0.)); +#57682 = ADVANCED_FACE('',(#57683),#57694,.T.); +#57683 = FACE_BOUND('',#57684,.T.); +#57684 = EDGE_LOOP('',(#57685,#57686,#57693)); +#57685 = ORIENTED_EDGE('',*,*,#57555,.T.); +#57686 = ORIENTED_EDGE('',*,*,#57687,.F.); +#57687 = EDGE_CURVE('',#57604,#57548,#57688,.T.); +#57688 = CIRCLE('',#57689,5.E-02); +#57689 = AXIS2_PLACEMENT_3D('',#57690,#57691,#57692); +#57690 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#57691 = DIRECTION('',(1.,-6.123233995737E-17,0.)); +#57692 = DIRECTION('',(-6.123233995737E-17,-1.,0.)); +#57693 = ORIENTED_EDGE('',*,*,#57603,.T.); +#57694 = SPHERICAL_SURFACE('',#57695,5.E-02); +#57695 = AXIS2_PLACEMENT_3D('',#57696,#57697,#57698); +#57696 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#57697 = DIRECTION('',(-0.,-0.,-1.)); +#57698 = DIRECTION('',(-1.,0.,0.)); +#57699 = ADVANCED_FACE('',(#57700),#57725,.F.); +#57700 = FACE_BOUND('',#57701,.F.); +#57701 = EDGE_LOOP('',(#57702,#57710,#57711,#57719)); +#57702 = ORIENTED_EDGE('',*,*,#57703,.F.); +#57703 = EDGE_CURVE('',#57539,#57704,#57706,.T.); +#57704 = VERTEX_POINT('',#57705); +#57705 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,5.E-02)); +#57706 = LINE('',#57707,#57708); +#57707 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,5.E-02)); +#57708 = VECTOR('',#57709,1.); +#57709 = DIRECTION('',(1.,0.,-0.)); +#57710 = ORIENTED_EDGE('',*,*,#57547,.T.); +#57711 = ORIENTED_EDGE('',*,*,#57712,.T.); +#57712 = EDGE_CURVE('',#57548,#57713,#57715,.T.); +#57713 = VERTEX_POINT('',#57714); +#57714 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,0.45)); +#57715 = LINE('',#57716,#57717); +#57716 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,0.45)); +#57717 = VECTOR('',#57718,1.); +#57718 = DIRECTION('',(1.,0.,-0.)); +#57719 = ORIENTED_EDGE('',*,*,#57720,.F.); +#57720 = EDGE_CURVE('',#57704,#57713,#57721,.T.); +#57721 = LINE('',#57722,#57723); +#57722 = CARTESIAN_POINT('',(0.25,0.,0.)); +#57723 = VECTOR('',#57724,1.); +#57724 = DIRECTION('',(0.,0.,1.)); +#57725 = PLANE('',#57726); +#57726 = AXIS2_PLACEMENT_3D('',#57727,#57728,#57729); +#57727 = CARTESIAN_POINT('',(0.,0.,0.)); +#57728 = DIRECTION('',(-0.,1.,0.)); +#57729 = DIRECTION('',(0.,0.,1.)); +#57730 = ADVANCED_FACE('',(#57731),#57756,.F.); +#57731 = FACE_BOUND('',#57732,.F.); +#57732 = EDGE_LOOP('',(#57733,#57734,#57742,#57750)); +#57733 = ORIENTED_EDGE('',*,*,#57580,.F.); +#57734 = ORIENTED_EDGE('',*,*,#57735,.T.); +#57735 = EDGE_CURVE('',#57581,#57736,#57738,.T.); +#57736 = VERTEX_POINT('',#57737); +#57737 = CARTESIAN_POINT('',(0.25,5.E-02,-3.469446951954E-18)); +#57738 = LINE('',#57739,#57740); +#57739 = CARTESIAN_POINT('',(0.,5.E-02,-6.938893903907E-18)); +#57740 = VECTOR('',#57741,1.); +#57741 = DIRECTION('',(1.,0.,-0.)); +#57742 = ORIENTED_EDGE('',*,*,#57743,.T.); +#57743 = EDGE_CURVE('',#57736,#57744,#57746,.T.); +#57744 = VERTEX_POINT('',#57745); +#57745 = CARTESIAN_POINT('',(0.25,0.45,-3.469446951954E-18)); +#57746 = LINE('',#57747,#57748); +#57747 = CARTESIAN_POINT('',(0.25,0.,0.)); +#57748 = VECTOR('',#57749,1.); +#57749 = DIRECTION('',(-0.,1.,0.)); +#57750 = ORIENTED_EDGE('',*,*,#57751,.F.); +#57751 = EDGE_CURVE('',#57572,#57744,#57752,.T.); +#57752 = LINE('',#57753,#57754); +#57753 = CARTESIAN_POINT('',(0.,0.45,-6.938893903907E-18)); +#57754 = VECTOR('',#57755,1.); +#57755 = DIRECTION('',(1.,0.,-0.)); +#57756 = PLANE('',#57757); +#57757 = AXIS2_PLACEMENT_3D('',#57758,#57759,#57760); +#57758 = CARTESIAN_POINT('',(0.,0.,0.)); +#57759 = DIRECTION('',(0.,0.,1.)); +#57760 = DIRECTION('',(1.,0.,-0.)); +#57761 = ADVANCED_FACE('',(#57762),#57773,.T.); +#57762 = FACE_BOUND('',#57763,.T.); +#57763 = EDGE_LOOP('',(#57764,#57765,#57772)); +#57764 = ORIENTED_EDGE('',*,*,#57653,.T.); +#57765 = ORIENTED_EDGE('',*,*,#57766,.F.); +#57766 = EDGE_CURVE('',#57572,#57646,#57767,.T.); +#57767 = CIRCLE('',#57768,5.E-02); +#57768 = AXIS2_PLACEMENT_3D('',#57769,#57770,#57771); +#57769 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#57770 = DIRECTION('',(1.,6.123233995737E-17,-0.)); +#57771 = DIRECTION('',(-6.123233995737E-17,1.,0.)); +#57772 = ORIENTED_EDGE('',*,*,#57571,.T.); +#57773 = SPHERICAL_SURFACE('',#57774,5.E-02); +#57774 = AXIS2_PLACEMENT_3D('',#57775,#57776,#57777); +#57775 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#57776 = DIRECTION('',(0.,0.,1.)); +#57777 = DIRECTION('',(-1.,0.,0.)); +#57778 = ADVANCED_FACE('',(#57779),#57804,.T.); +#57779 = FACE_BOUND('',#57780,.T.); +#57780 = EDGE_LOOP('',(#57781,#57782,#57790,#57798)); +#57781 = ORIENTED_EDGE('',*,*,#57612,.F.); +#57782 = ORIENTED_EDGE('',*,*,#57783,.T.); +#57783 = EDGE_CURVE('',#57604,#57784,#57786,.T.); +#57784 = VERTEX_POINT('',#57785); +#57785 = CARTESIAN_POINT('',(0.25,5.E-02,0.5)); +#57786 = LINE('',#57787,#57788); +#57787 = CARTESIAN_POINT('',(0.,5.E-02,0.5)); +#57788 = VECTOR('',#57789,1.); +#57789 = DIRECTION('',(1.,0.,-0.)); +#57790 = ORIENTED_EDGE('',*,*,#57791,.T.); +#57791 = EDGE_CURVE('',#57784,#57792,#57794,.T.); +#57792 = VERTEX_POINT('',#57793); +#57793 = CARTESIAN_POINT('',(0.25,0.45,0.5)); +#57794 = LINE('',#57795,#57796); +#57795 = CARTESIAN_POINT('',(0.25,0.,0.5)); +#57796 = VECTOR('',#57797,1.); +#57797 = DIRECTION('',(0.,1.,0.)); +#57798 = ORIENTED_EDGE('',*,*,#57799,.F.); +#57799 = EDGE_CURVE('',#57613,#57792,#57800,.T.); +#57800 = LINE('',#57801,#57802); +#57801 = CARTESIAN_POINT('',(0.,0.45,0.5)); +#57802 = VECTOR('',#57803,1.); +#57803 = DIRECTION('',(1.,0.,-0.)); +#57804 = PLANE('',#57805); +#57805 = AXIS2_PLACEMENT_3D('',#57806,#57807,#57808); +#57806 = CARTESIAN_POINT('',(0.,0.,0.5)); +#57807 = DIRECTION('',(0.,0.,1.)); +#57808 = DIRECTION('',(1.,0.,-0.)); +#57809 = ADVANCED_FACE('',(#57810),#57821,.T.); +#57810 = FACE_BOUND('',#57811,.T.); +#57811 = EDGE_LOOP('',(#57812,#57813,#57820)); +#57812 = ORIENTED_EDGE('',*,*,#57620,.T.); +#57813 = ORIENTED_EDGE('',*,*,#57814,.F.); +#57814 = EDGE_CURVE('',#57637,#57613,#57815,.T.); +#57815 = CIRCLE('',#57816,5.E-02); +#57816 = AXIS2_PLACEMENT_3D('',#57817,#57818,#57819); +#57817 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#57818 = DIRECTION('',(1.,0.,6.123233995737E-17)); +#57819 = DIRECTION('',(-6.123233995737E-17,-0.,1.)); +#57820 = ORIENTED_EDGE('',*,*,#57636,.T.); +#57821 = SPHERICAL_SURFACE('',#57822,5.E-02); +#57822 = AXIS2_PLACEMENT_3D('',#57823,#57824,#57825); +#57823 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#57824 = DIRECTION('',(0.,-1.,-0.)); +#57825 = DIRECTION('',(-1.,-0.,0.)); +#57826 = ADVANCED_FACE('',(#57827),#57852,.T.); +#57827 = FACE_BOUND('',#57828,.T.); +#57828 = EDGE_LOOP('',(#57829,#57837,#57838,#57846)); +#57829 = ORIENTED_EDGE('',*,*,#57830,.F.); +#57830 = EDGE_CURVE('',#57646,#57831,#57833,.T.); +#57831 = VERTEX_POINT('',#57832); +#57832 = CARTESIAN_POINT('',(0.25,0.5,5.E-02)); +#57833 = LINE('',#57834,#57835); +#57834 = CARTESIAN_POINT('',(0.,0.5,5.E-02)); +#57835 = VECTOR('',#57836,1.); +#57836 = DIRECTION('',(1.,0.,-0.)); +#57837 = ORIENTED_EDGE('',*,*,#57645,.T.); +#57838 = ORIENTED_EDGE('',*,*,#57839,.T.); +#57839 = EDGE_CURVE('',#57637,#57840,#57842,.T.); +#57840 = VERTEX_POINT('',#57841); +#57841 = CARTESIAN_POINT('',(0.25,0.5,0.45)); +#57842 = LINE('',#57843,#57844); +#57843 = CARTESIAN_POINT('',(0.,0.5,0.45)); +#57844 = VECTOR('',#57845,1.); +#57845 = DIRECTION('',(1.,0.,-0.)); +#57846 = ORIENTED_EDGE('',*,*,#57847,.F.); +#57847 = EDGE_CURVE('',#57831,#57840,#57848,.T.); +#57848 = LINE('',#57849,#57850); +#57849 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#57850 = VECTOR('',#57851,1.); +#57851 = DIRECTION('',(0.,0.,1.)); +#57852 = PLANE('',#57853); +#57853 = AXIS2_PLACEMENT_3D('',#57854,#57855,#57856); +#57854 = CARTESIAN_POINT('',(0.,0.5,0.)); +#57855 = DIRECTION('',(-0.,1.,0.)); +#57856 = DIRECTION('',(0.,0.,1.)); +#57857 = ADVANCED_FACE('',(#57858),#57870,.T.); +#57858 = FACE_BOUND('',#57859,.T.); +#57859 = EDGE_LOOP('',(#57860,#57861,#57862,#57869)); +#57860 = ORIENTED_EDGE('',*,*,#57670,.F.); +#57861 = ORIENTED_EDGE('',*,*,#57735,.T.); +#57862 = ORIENTED_EDGE('',*,*,#57863,.F.); +#57863 = EDGE_CURVE('',#57704,#57736,#57864,.T.); +#57864 = CIRCLE('',#57865,5.E-02); +#57865 = AXIS2_PLACEMENT_3D('',#57866,#57867,#57868); +#57866 = CARTESIAN_POINT('',(0.25,5.E-02,5.E-02)); +#57867 = DIRECTION('',(1.,0.,0.)); +#57868 = DIRECTION('',(0.,-1.,0.)); +#57869 = ORIENTED_EDGE('',*,*,#57703,.F.); +#57870 = CYLINDRICAL_SURFACE('',#57871,5.E-02); +#57871 = AXIS2_PLACEMENT_3D('',#57872,#57873,#57874); +#57872 = CARTESIAN_POINT('',(0.,5.E-02,5.E-02)); +#57873 = DIRECTION('',(1.,0.,-0.)); +#57874 = DIRECTION('',(0.,-1.,0.)); +#57875 = ADVANCED_FACE('',(#57876),#57888,.T.); +#57876 = FACE_BOUND('',#57877,.T.); +#57877 = EDGE_LOOP('',(#57878,#57879,#57886,#57887)); +#57878 = ORIENTED_EDGE('',*,*,#57712,.T.); +#57879 = ORIENTED_EDGE('',*,*,#57880,.F.); +#57880 = EDGE_CURVE('',#57784,#57713,#57881,.T.); +#57881 = CIRCLE('',#57882,5.E-02); +#57882 = AXIS2_PLACEMENT_3D('',#57883,#57884,#57885); +#57883 = CARTESIAN_POINT('',(0.25,5.E-02,0.45)); +#57884 = DIRECTION('',(1.,0.,0.)); +#57885 = DIRECTION('',(0.,-1.,0.)); +#57886 = ORIENTED_EDGE('',*,*,#57783,.F.); +#57887 = ORIENTED_EDGE('',*,*,#57687,.T.); +#57888 = CYLINDRICAL_SURFACE('',#57889,5.E-02); +#57889 = AXIS2_PLACEMENT_3D('',#57890,#57891,#57892); +#57890 = CARTESIAN_POINT('',(0.,5.E-02,0.45)); +#57891 = DIRECTION('',(1.,0.,-0.)); +#57892 = DIRECTION('',(0.,-1.,0.)); +#57893 = ADVANCED_FACE('',(#57894),#57916,.T.); +#57894 = FACE_BOUND('',#57895,.T.); +#57895 = EDGE_LOOP('',(#57896,#57897,#57898,#57899,#57906,#57907,#57914, + #57915)); +#57896 = ORIENTED_EDGE('',*,*,#57720,.F.); +#57897 = ORIENTED_EDGE('',*,*,#57863,.T.); +#57898 = ORIENTED_EDGE('',*,*,#57743,.T.); +#57899 = ORIENTED_EDGE('',*,*,#57900,.T.); +#57900 = EDGE_CURVE('',#57744,#57831,#57901,.T.); +#57901 = CIRCLE('',#57902,5.E-02); +#57902 = AXIS2_PLACEMENT_3D('',#57903,#57904,#57905); +#57903 = CARTESIAN_POINT('',(0.25,0.45,5.E-02)); +#57904 = DIRECTION('',(1.,0.,-0.)); +#57905 = DIRECTION('',(0.,1.,0.)); +#57906 = ORIENTED_EDGE('',*,*,#57847,.T.); +#57907 = ORIENTED_EDGE('',*,*,#57908,.T.); +#57908 = EDGE_CURVE('',#57840,#57792,#57909,.T.); +#57909 = CIRCLE('',#57910,5.E-02); +#57910 = AXIS2_PLACEMENT_3D('',#57911,#57912,#57913); +#57911 = CARTESIAN_POINT('',(0.25,0.45,0.45)); +#57912 = DIRECTION('',(1.,0.,-0.)); +#57913 = DIRECTION('',(0.,1.,0.)); +#57914 = ORIENTED_EDGE('',*,*,#57791,.F.); +#57915 = ORIENTED_EDGE('',*,*,#57880,.T.); +#57916 = PLANE('',#57917); +#57917 = AXIS2_PLACEMENT_3D('',#57918,#57919,#57920); +#57918 = CARTESIAN_POINT('',(0.25,0.,0.)); +#57919 = DIRECTION('',(1.,0.,-0.)); +#57920 = DIRECTION('',(0.,0.,1.)); +#57921 = ADVANCED_FACE('',(#57922),#57928,.T.); +#57922 = FACE_BOUND('',#57923,.T.); +#57923 = EDGE_LOOP('',(#57924,#57925,#57926,#57927)); +#57924 = ORIENTED_EDGE('',*,*,#57830,.T.); +#57925 = ORIENTED_EDGE('',*,*,#57900,.F.); +#57926 = ORIENTED_EDGE('',*,*,#57751,.F.); +#57927 = ORIENTED_EDGE('',*,*,#57766,.T.); +#57928 = CYLINDRICAL_SURFACE('',#57929,5.E-02); +#57929 = AXIS2_PLACEMENT_3D('',#57930,#57931,#57932); +#57930 = CARTESIAN_POINT('',(0.,0.45,5.E-02)); +#57931 = DIRECTION('',(1.,0.,-0.)); +#57932 = DIRECTION('',(0.,1.,0.)); +#57933 = ADVANCED_FACE('',(#57934),#57940,.T.); +#57934 = FACE_BOUND('',#57935,.T.); +#57935 = EDGE_LOOP('',(#57936,#57937,#57938,#57939)); +#57936 = ORIENTED_EDGE('',*,*,#57839,.F.); +#57937 = ORIENTED_EDGE('',*,*,#57814,.T.); +#57938 = ORIENTED_EDGE('',*,*,#57799,.T.); +#57939 = ORIENTED_EDGE('',*,*,#57908,.F.); +#57940 = CYLINDRICAL_SURFACE('',#57941,5.E-02); +#57941 = AXIS2_PLACEMENT_3D('',#57942,#57943,#57944); +#57942 = CARTESIAN_POINT('',(0.,0.45,0.45)); +#57943 = DIRECTION('',(1.,0.,-0.)); +#57944 = DIRECTION('',(0.,1.,0.)); +#57945 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#57949)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#57946,#57947,#57948)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#57946 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#57947 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#57948 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#57949 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#57946, + 'distance_accuracy_value','confusion accuracy'); +#57950 = SHAPE_DEFINITION_REPRESENTATION(#57951,#57490); +#57951 = PRODUCT_DEFINITION_SHAPE('','',#57952); +#57952 = PRODUCT_DEFINITION('design','',#57953,#57956); +#57953 = PRODUCT_DEFINITION_FORMATION('','',#57954); +#57954 = PRODUCT('Open CASCADE STEP translator 6.8 54.1.1', + 'Open CASCADE STEP translator 6.8 54.1.1','',(#57955)); +#57955 = PRODUCT_CONTEXT('',#2,'mechanical'); +#57956 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#57957 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#57958,#57960); +#57958 = ( REPRESENTATION_RELATIONSHIP('','',#57490,#57476) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57959) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#57959 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57477); +#57960 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #57961); +#57961 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('96','266','',#57471,#57952,$); +#57962 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57954)); +#57963 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#57964),#58418); +#57964 = MANIFOLD_SOLID_BREP('',#57965); +#57965 = CLOSED_SHELL('',(#57966,#58006,#58039,#58072,#58105,#58156, + #58173,#58197,#58228,#58245,#58269,#58294,#58319,#58336,#58354, + #58372,#58396,#58407)); +#57966 = ADVANCED_FACE('',(#57967),#58001,.F.); +#57967 = FACE_BOUND('',#57968,.F.); +#57968 = EDGE_LOOP('',(#57969,#57979,#57987,#57995)); +#57969 = ORIENTED_EDGE('',*,*,#57970,.F.); +#57970 = EDGE_CURVE('',#57971,#57973,#57975,.T.); +#57971 = VERTEX_POINT('',#57972); +#57972 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,5.E-02)); +#57973 = VERTEX_POINT('',#57974); +#57974 = CARTESIAN_POINT('',(0.95,-6.938893903907E-18,5.E-02)); +#57975 = LINE('',#57976,#57977); +#57976 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,5.E-02)); +#57977 = VECTOR('',#57978,1.); +#57978 = DIRECTION('',(1.,0.,-0.)); +#57979 = ORIENTED_EDGE('',*,*,#57980,.T.); +#57980 = EDGE_CURVE('',#57971,#57981,#57983,.T.); +#57981 = VERTEX_POINT('',#57982); +#57982 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,0.45)); +#57983 = LINE('',#57984,#57985); +#57984 = CARTESIAN_POINT('',(0.75,0.,0.)); +#57985 = VECTOR('',#57986,1.); +#57986 = DIRECTION('',(0.,0.,1.)); +#57987 = ORIENTED_EDGE('',*,*,#57988,.T.); +#57988 = EDGE_CURVE('',#57981,#57989,#57991,.T.); +#57989 = VERTEX_POINT('',#57990); +#57990 = CARTESIAN_POINT('',(0.95,-6.938893903907E-18,0.45)); +#57991 = LINE('',#57992,#57993); +#57992 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,0.45)); +#57993 = VECTOR('',#57994,1.); +#57994 = DIRECTION('',(1.,0.,-0.)); +#57995 = ORIENTED_EDGE('',*,*,#57996,.F.); +#57996 = EDGE_CURVE('',#57973,#57989,#57997,.T.); +#57997 = LINE('',#57998,#57999); +#57998 = CARTESIAN_POINT('',(0.95,-6.938893903907E-18,0.)); +#57999 = VECTOR('',#58000,1.); +#58000 = DIRECTION('',(0.,0.,1.)); +#58001 = PLANE('',#58002); +#58002 = AXIS2_PLACEMENT_3D('',#58003,#58004,#58005); +#58003 = CARTESIAN_POINT('',(0.,0.,0.)); +#58004 = DIRECTION('',(-0.,1.,0.)); +#58005 = DIRECTION('',(0.,0.,1.)); +#58006 = ADVANCED_FACE('',(#58007),#58034,.T.); +#58007 = FACE_BOUND('',#58008,.T.); +#58008 = EDGE_LOOP('',(#58009,#58018,#58026,#58033)); +#58009 = ORIENTED_EDGE('',*,*,#58010,.T.); +#58010 = EDGE_CURVE('',#57971,#58011,#58013,.T.); +#58011 = VERTEX_POINT('',#58012); +#58012 = CARTESIAN_POINT('',(0.75,5.E-02,-3.469446951954E-18)); +#58013 = CIRCLE('',#58014,5.E-02); +#58014 = AXIS2_PLACEMENT_3D('',#58015,#58016,#58017); +#58015 = CARTESIAN_POINT('',(0.75,5.E-02,5.E-02)); +#58016 = DIRECTION('',(1.,0.,0.)); +#58017 = DIRECTION('',(0.,-1.,0.)); +#58018 = ORIENTED_EDGE('',*,*,#58019,.T.); +#58019 = EDGE_CURVE('',#58011,#58020,#58022,.T.); +#58020 = VERTEX_POINT('',#58021); +#58021 = CARTESIAN_POINT('',(0.95,5.E-02,0.)); +#58022 = LINE('',#58023,#58024); +#58023 = CARTESIAN_POINT('',(0.,5.E-02,-6.938893903907E-18)); +#58024 = VECTOR('',#58025,1.); +#58025 = DIRECTION('',(1.,0.,-0.)); +#58026 = ORIENTED_EDGE('',*,*,#58027,.T.); +#58027 = EDGE_CURVE('',#58020,#57973,#58028,.T.); +#58028 = CIRCLE('',#58029,5.E-02); +#58029 = AXIS2_PLACEMENT_3D('',#58030,#58031,#58032); +#58030 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#58031 = DIRECTION('',(-1.,-6.123233995737E-17,0.)); +#58032 = DIRECTION('',(6.123233995737E-17,-1.,-0.)); +#58033 = ORIENTED_EDGE('',*,*,#57970,.F.); +#58034 = CYLINDRICAL_SURFACE('',#58035,5.E-02); +#58035 = AXIS2_PLACEMENT_3D('',#58036,#58037,#58038); +#58036 = CARTESIAN_POINT('',(0.,5.E-02,5.E-02)); +#58037 = DIRECTION('',(1.,0.,-0.)); +#58038 = DIRECTION('',(0.,-1.,0.)); +#58039 = ADVANCED_FACE('',(#58040),#58067,.T.); +#58040 = FACE_BOUND('',#58041,.T.); +#58041 = EDGE_LOOP('',(#58042,#58051,#58052,#58061)); +#58042 = ORIENTED_EDGE('',*,*,#58043,.T.); +#58043 = EDGE_CURVE('',#58044,#57989,#58046,.T.); +#58044 = VERTEX_POINT('',#58045); +#58045 = CARTESIAN_POINT('',(1.,5.E-02,0.45)); +#58046 = CIRCLE('',#58047,5.E-02); +#58047 = AXIS2_PLACEMENT_3D('',#58048,#58049,#58050); +#58048 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#58049 = DIRECTION('',(0.,0.,-1.)); +#58050 = DIRECTION('',(1.,0.,0.)); +#58051 = ORIENTED_EDGE('',*,*,#57996,.F.); +#58052 = ORIENTED_EDGE('',*,*,#58053,.F.); +#58053 = EDGE_CURVE('',#58054,#57973,#58056,.T.); +#58054 = VERTEX_POINT('',#58055); +#58055 = CARTESIAN_POINT('',(1.,5.E-02,5.E-02)); +#58056 = CIRCLE('',#58057,5.E-02); +#58057 = AXIS2_PLACEMENT_3D('',#58058,#58059,#58060); +#58058 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#58059 = DIRECTION('',(0.,0.,-1.)); +#58060 = DIRECTION('',(1.,0.,0.)); +#58061 = ORIENTED_EDGE('',*,*,#58062,.T.); +#58062 = EDGE_CURVE('',#58054,#58044,#58063,.T.); +#58063 = LINE('',#58064,#58065); +#58064 = CARTESIAN_POINT('',(1.,5.E-02,0.)); +#58065 = VECTOR('',#58066,1.); +#58066 = DIRECTION('',(0.,0.,1.)); +#58067 = CYLINDRICAL_SURFACE('',#58068,5.E-02); +#58068 = AXIS2_PLACEMENT_3D('',#58069,#58070,#58071); +#58069 = CARTESIAN_POINT('',(0.95,5.E-02,0.)); +#58070 = DIRECTION('',(0.,0.,1.)); +#58071 = DIRECTION('',(1.,0.,-0.)); +#58072 = ADVANCED_FACE('',(#58073),#58100,.T.); +#58073 = FACE_BOUND('',#58074,.T.); +#58074 = EDGE_LOOP('',(#58075,#58076,#58085,#58093)); +#58075 = ORIENTED_EDGE('',*,*,#57988,.T.); +#58076 = ORIENTED_EDGE('',*,*,#58077,.F.); +#58077 = EDGE_CURVE('',#58078,#57989,#58080,.T.); +#58078 = VERTEX_POINT('',#58079); +#58079 = CARTESIAN_POINT('',(0.95,5.E-02,0.5)); +#58080 = CIRCLE('',#58081,5.E-02); +#58081 = AXIS2_PLACEMENT_3D('',#58082,#58083,#58084); +#58082 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#58083 = DIRECTION('',(1.,6.123233995737E-17,0.)); +#58084 = DIRECTION('',(6.123233995737E-17,-1.,0.)); +#58085 = ORIENTED_EDGE('',*,*,#58086,.F.); +#58086 = EDGE_CURVE('',#58087,#58078,#58089,.T.); +#58087 = VERTEX_POINT('',#58088); +#58088 = CARTESIAN_POINT('',(0.75,5.E-02,0.5)); +#58089 = LINE('',#58090,#58091); +#58090 = CARTESIAN_POINT('',(0.,5.E-02,0.5)); +#58091 = VECTOR('',#58092,1.); +#58092 = DIRECTION('',(1.,0.,-0.)); +#58093 = ORIENTED_EDGE('',*,*,#58094,.T.); +#58094 = EDGE_CURVE('',#58087,#57981,#58095,.T.); +#58095 = CIRCLE('',#58096,5.E-02); +#58096 = AXIS2_PLACEMENT_3D('',#58097,#58098,#58099); +#58097 = CARTESIAN_POINT('',(0.75,5.E-02,0.45)); +#58098 = DIRECTION('',(1.,0.,0.)); +#58099 = DIRECTION('',(0.,-1.,0.)); +#58100 = CYLINDRICAL_SURFACE('',#58101,5.E-02); +#58101 = AXIS2_PLACEMENT_3D('',#58102,#58103,#58104); +#58102 = CARTESIAN_POINT('',(0.,5.E-02,0.45)); +#58103 = DIRECTION('',(1.,0.,-0.)); +#58104 = DIRECTION('',(0.,-1.,0.)); +#58105 = ADVANCED_FACE('',(#58106),#58151,.F.); +#58106 = FACE_BOUND('',#58107,.F.); +#58107 = EDGE_LOOP('',(#58108,#58109,#58110,#58118,#58127,#58135,#58144, + #58150)); +#58108 = ORIENTED_EDGE('',*,*,#57980,.F.); +#58109 = ORIENTED_EDGE('',*,*,#58010,.T.); +#58110 = ORIENTED_EDGE('',*,*,#58111,.T.); +#58111 = EDGE_CURVE('',#58011,#58112,#58114,.T.); +#58112 = VERTEX_POINT('',#58113); +#58113 = CARTESIAN_POINT('',(0.75,0.45,-3.469446951954E-18)); +#58114 = LINE('',#58115,#58116); +#58115 = CARTESIAN_POINT('',(0.75,0.,0.)); +#58116 = VECTOR('',#58117,1.); +#58117 = DIRECTION('',(-0.,1.,0.)); +#58118 = ORIENTED_EDGE('',*,*,#58119,.T.); +#58119 = EDGE_CURVE('',#58112,#58120,#58122,.T.); +#58120 = VERTEX_POINT('',#58121); +#58121 = CARTESIAN_POINT('',(0.75,0.5,5.E-02)); +#58122 = CIRCLE('',#58123,5.E-02); +#58123 = AXIS2_PLACEMENT_3D('',#58124,#58125,#58126); +#58124 = CARTESIAN_POINT('',(0.75,0.45,5.E-02)); +#58125 = DIRECTION('',(1.,0.,-0.)); +#58126 = DIRECTION('',(0.,1.,0.)); +#58127 = ORIENTED_EDGE('',*,*,#58128,.T.); +#58128 = EDGE_CURVE('',#58120,#58129,#58131,.T.); +#58129 = VERTEX_POINT('',#58130); +#58130 = CARTESIAN_POINT('',(0.75,0.5,0.45)); +#58131 = LINE('',#58132,#58133); +#58132 = CARTESIAN_POINT('',(0.75,0.5,0.)); +#58133 = VECTOR('',#58134,1.); +#58134 = DIRECTION('',(0.,0.,1.)); +#58135 = ORIENTED_EDGE('',*,*,#58136,.T.); +#58136 = EDGE_CURVE('',#58129,#58137,#58139,.T.); +#58137 = VERTEX_POINT('',#58138); +#58138 = CARTESIAN_POINT('',(0.75,0.45,0.5)); +#58139 = CIRCLE('',#58140,5.E-02); +#58140 = AXIS2_PLACEMENT_3D('',#58141,#58142,#58143); +#58141 = CARTESIAN_POINT('',(0.75,0.45,0.45)); +#58142 = DIRECTION('',(1.,0.,-0.)); +#58143 = DIRECTION('',(0.,1.,0.)); +#58144 = ORIENTED_EDGE('',*,*,#58145,.F.); +#58145 = EDGE_CURVE('',#58087,#58137,#58146,.T.); +#58146 = LINE('',#58147,#58148); +#58147 = CARTESIAN_POINT('',(0.75,0.,0.5)); +#58148 = VECTOR('',#58149,1.); +#58149 = DIRECTION('',(-0.,1.,0.)); +#58150 = ORIENTED_EDGE('',*,*,#58094,.T.); +#58151 = PLANE('',#58152); +#58152 = AXIS2_PLACEMENT_3D('',#58153,#58154,#58155); +#58153 = CARTESIAN_POINT('',(0.75,0.,0.)); +#58154 = DIRECTION('',(1.,0.,-0.)); +#58155 = DIRECTION('',(0.,0.,1.)); +#58156 = ADVANCED_FACE('',(#58157),#58168,.T.); +#58157 = FACE_BOUND('',#58158,.T.); +#58158 = EDGE_LOOP('',(#58159,#58160,#58161)); +#58159 = ORIENTED_EDGE('',*,*,#58053,.T.); +#58160 = ORIENTED_EDGE('',*,*,#58027,.F.); +#58161 = ORIENTED_EDGE('',*,*,#58162,.T.); +#58162 = EDGE_CURVE('',#58020,#58054,#58163,.T.); +#58163 = CIRCLE('',#58164,5.E-02); +#58164 = AXIS2_PLACEMENT_3D('',#58165,#58166,#58167); +#58165 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#58166 = DIRECTION('',(0.,-1.,0.)); +#58167 = DIRECTION('',(1.,0.,0.)); +#58168 = SPHERICAL_SURFACE('',#58169,5.E-02); +#58169 = AXIS2_PLACEMENT_3D('',#58170,#58171,#58172); +#58170 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#58171 = DIRECTION('',(0.,0.,1.)); +#58172 = DIRECTION('',(1.,0.,-0.)); +#58173 = ADVANCED_FACE('',(#58174),#58192,.F.); +#58174 = FACE_BOUND('',#58175,.F.); +#58175 = EDGE_LOOP('',(#58176,#58177,#58178,#58186)); +#58176 = ORIENTED_EDGE('',*,*,#58111,.F.); +#58177 = ORIENTED_EDGE('',*,*,#58019,.T.); +#58178 = ORIENTED_EDGE('',*,*,#58179,.T.); +#58179 = EDGE_CURVE('',#58020,#58180,#58182,.T.); +#58180 = VERTEX_POINT('',#58181); +#58181 = CARTESIAN_POINT('',(0.95,0.45,0.)); +#58182 = LINE('',#58183,#58184); +#58183 = CARTESIAN_POINT('',(0.95,0.,-6.938893903907E-18)); +#58184 = VECTOR('',#58185,1.); +#58185 = DIRECTION('',(-0.,1.,0.)); +#58186 = ORIENTED_EDGE('',*,*,#58187,.F.); +#58187 = EDGE_CURVE('',#58112,#58180,#58188,.T.); +#58188 = LINE('',#58189,#58190); +#58189 = CARTESIAN_POINT('',(0.,0.45,-6.938893903907E-18)); +#58190 = VECTOR('',#58191,1.); +#58191 = DIRECTION('',(1.,0.,-0.)); +#58192 = PLANE('',#58193); +#58193 = AXIS2_PLACEMENT_3D('',#58194,#58195,#58196); +#58194 = CARTESIAN_POINT('',(0.,0.,0.)); +#58195 = DIRECTION('',(0.,0.,1.)); +#58196 = DIRECTION('',(1.,0.,-0.)); +#58197 = ADVANCED_FACE('',(#58198),#58223,.T.); +#58198 = FACE_BOUND('',#58199,.T.); +#58199 = EDGE_LOOP('',(#58200,#58201,#58209,#58217)); +#58200 = ORIENTED_EDGE('',*,*,#58062,.F.); +#58201 = ORIENTED_EDGE('',*,*,#58202,.T.); +#58202 = EDGE_CURVE('',#58054,#58203,#58205,.T.); +#58203 = VERTEX_POINT('',#58204); +#58204 = CARTESIAN_POINT('',(1.,0.45,5.E-02)); +#58205 = LINE('',#58206,#58207); +#58206 = CARTESIAN_POINT('',(1.,0.,5.E-02)); +#58207 = VECTOR('',#58208,1.); +#58208 = DIRECTION('',(-0.,1.,0.)); +#58209 = ORIENTED_EDGE('',*,*,#58210,.T.); +#58210 = EDGE_CURVE('',#58203,#58211,#58213,.T.); +#58211 = VERTEX_POINT('',#58212); +#58212 = CARTESIAN_POINT('',(1.,0.45,0.45)); +#58213 = LINE('',#58214,#58215); +#58214 = CARTESIAN_POINT('',(1.,0.45,0.)); +#58215 = VECTOR('',#58216,1.); +#58216 = DIRECTION('',(0.,0.,1.)); +#58217 = ORIENTED_EDGE('',*,*,#58218,.F.); +#58218 = EDGE_CURVE('',#58044,#58211,#58219,.T.); +#58219 = LINE('',#58220,#58221); +#58220 = CARTESIAN_POINT('',(1.,0.,0.45)); +#58221 = VECTOR('',#58222,1.); +#58222 = DIRECTION('',(0.,1.,0.)); +#58223 = PLANE('',#58224); +#58224 = AXIS2_PLACEMENT_3D('',#58225,#58226,#58227); +#58225 = CARTESIAN_POINT('',(1.,0.,0.)); +#58226 = DIRECTION('',(1.,0.,-0.)); +#58227 = DIRECTION('',(0.,0.,1.)); +#58228 = ADVANCED_FACE('',(#58229),#58240,.T.); +#58229 = FACE_BOUND('',#58230,.T.); +#58230 = EDGE_LOOP('',(#58231,#58238,#58239)); +#58231 = ORIENTED_EDGE('',*,*,#58232,.F.); +#58232 = EDGE_CURVE('',#58078,#58044,#58233,.T.); +#58233 = CIRCLE('',#58234,5.E-02); +#58234 = AXIS2_PLACEMENT_3D('',#58235,#58236,#58237); +#58235 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#58236 = DIRECTION('',(-0.,1.,0.)); +#58237 = DIRECTION('',(1.,0.,0.)); +#58238 = ORIENTED_EDGE('',*,*,#58077,.T.); +#58239 = ORIENTED_EDGE('',*,*,#58043,.F.); +#58240 = SPHERICAL_SURFACE('',#58241,5.E-02); +#58241 = AXIS2_PLACEMENT_3D('',#58242,#58243,#58244); +#58242 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#58243 = DIRECTION('',(-0.,-0.,-1.)); +#58244 = DIRECTION('',(1.,0.,0.)); +#58245 = ADVANCED_FACE('',(#58246),#58264,.T.); +#58246 = FACE_BOUND('',#58247,.T.); +#58247 = EDGE_LOOP('',(#58248,#58249,#58250,#58258)); +#58248 = ORIENTED_EDGE('',*,*,#58145,.F.); +#58249 = ORIENTED_EDGE('',*,*,#58086,.T.); +#58250 = ORIENTED_EDGE('',*,*,#58251,.T.); +#58251 = EDGE_CURVE('',#58078,#58252,#58254,.T.); +#58252 = VERTEX_POINT('',#58253); +#58253 = CARTESIAN_POINT('',(0.95,0.45,0.5)); +#58254 = LINE('',#58255,#58256); +#58255 = CARTESIAN_POINT('',(0.95,0.,0.5)); +#58256 = VECTOR('',#58257,1.); +#58257 = DIRECTION('',(0.,1.,0.)); +#58258 = ORIENTED_EDGE('',*,*,#58259,.F.); +#58259 = EDGE_CURVE('',#58137,#58252,#58260,.T.); +#58260 = LINE('',#58261,#58262); +#58261 = CARTESIAN_POINT('',(0.,0.45,0.5)); +#58262 = VECTOR('',#58263,1.); +#58263 = DIRECTION('',(1.,0.,-0.)); +#58264 = PLANE('',#58265); +#58265 = AXIS2_PLACEMENT_3D('',#58266,#58267,#58268); +#58266 = CARTESIAN_POINT('',(0.,0.,0.5)); +#58267 = DIRECTION('',(0.,0.,1.)); +#58268 = DIRECTION('',(1.,0.,-0.)); +#58269 = ADVANCED_FACE('',(#58270),#58289,.T.); +#58270 = FACE_BOUND('',#58271,.T.); +#58271 = EDGE_LOOP('',(#58272,#58280,#58287,#58288)); +#58272 = ORIENTED_EDGE('',*,*,#58273,.T.); +#58273 = EDGE_CURVE('',#58120,#58274,#58276,.T.); +#58274 = VERTEX_POINT('',#58275); +#58275 = CARTESIAN_POINT('',(0.95,0.5,5.E-02)); +#58276 = LINE('',#58277,#58278); +#58277 = CARTESIAN_POINT('',(0.,0.5,5.E-02)); +#58278 = VECTOR('',#58279,1.); +#58279 = DIRECTION('',(1.,0.,-0.)); +#58280 = ORIENTED_EDGE('',*,*,#58281,.F.); +#58281 = EDGE_CURVE('',#58180,#58274,#58282,.T.); +#58282 = CIRCLE('',#58283,5.E-02); +#58283 = AXIS2_PLACEMENT_3D('',#58284,#58285,#58286); +#58284 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#58285 = DIRECTION('',(1.,-6.123233995737E-17,0.)); +#58286 = DIRECTION('',(6.123233995737E-17,1.,0.)); +#58287 = ORIENTED_EDGE('',*,*,#58187,.F.); +#58288 = ORIENTED_EDGE('',*,*,#58119,.T.); +#58289 = CYLINDRICAL_SURFACE('',#58290,5.E-02); +#58290 = AXIS2_PLACEMENT_3D('',#58291,#58292,#58293); +#58291 = CARTESIAN_POINT('',(0.,0.45,5.E-02)); +#58292 = DIRECTION('',(1.,0.,-0.)); +#58293 = DIRECTION('',(0.,1.,0.)); +#58294 = ADVANCED_FACE('',(#58295),#58314,.T.); +#58295 = FACE_BOUND('',#58296,.T.); +#58296 = EDGE_LOOP('',(#58297,#58305,#58306,#58307)); +#58297 = ORIENTED_EDGE('',*,*,#58298,.F.); +#58298 = EDGE_CURVE('',#58129,#58299,#58301,.T.); +#58299 = VERTEX_POINT('',#58300); +#58300 = CARTESIAN_POINT('',(0.95,0.5,0.45)); +#58301 = LINE('',#58302,#58303); +#58302 = CARTESIAN_POINT('',(0.,0.5,0.45)); +#58303 = VECTOR('',#58304,1.); +#58304 = DIRECTION('',(1.,0.,-0.)); +#58305 = ORIENTED_EDGE('',*,*,#58136,.T.); +#58306 = ORIENTED_EDGE('',*,*,#58259,.T.); +#58307 = ORIENTED_EDGE('',*,*,#58308,.F.); +#58308 = EDGE_CURVE('',#58299,#58252,#58309,.T.); +#58309 = CIRCLE('',#58310,5.E-02); +#58310 = AXIS2_PLACEMENT_3D('',#58311,#58312,#58313); +#58311 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#58312 = DIRECTION('',(1.,0.,-6.123233995737E-17)); +#58313 = DIRECTION('',(6.123233995737E-17,0.,1.)); +#58314 = CYLINDRICAL_SURFACE('',#58315,5.E-02); +#58315 = AXIS2_PLACEMENT_3D('',#58316,#58317,#58318); +#58316 = CARTESIAN_POINT('',(0.,0.45,0.45)); +#58317 = DIRECTION('',(1.,0.,-0.)); +#58318 = DIRECTION('',(0.,1.,0.)); +#58319 = ADVANCED_FACE('',(#58320),#58331,.T.); +#58320 = FACE_BOUND('',#58321,.T.); +#58321 = EDGE_LOOP('',(#58322,#58323,#58324,#58325)); +#58322 = ORIENTED_EDGE('',*,*,#58273,.F.); +#58323 = ORIENTED_EDGE('',*,*,#58128,.T.); +#58324 = ORIENTED_EDGE('',*,*,#58298,.T.); +#58325 = ORIENTED_EDGE('',*,*,#58326,.F.); +#58326 = EDGE_CURVE('',#58274,#58299,#58327,.T.); +#58327 = LINE('',#58328,#58329); +#58328 = CARTESIAN_POINT('',(0.95,0.5,0.)); +#58329 = VECTOR('',#58330,1.); +#58330 = DIRECTION('',(0.,0.,1.)); +#58331 = PLANE('',#58332); +#58332 = AXIS2_PLACEMENT_3D('',#58333,#58334,#58335); +#58333 = CARTESIAN_POINT('',(0.,0.5,0.)); +#58334 = DIRECTION('',(-0.,1.,0.)); +#58335 = DIRECTION('',(0.,0.,1.)); +#58336 = ADVANCED_FACE('',(#58337),#58349,.T.); +#58337 = FACE_BOUND('',#58338,.T.); +#58338 = EDGE_LOOP('',(#58339,#58340,#58341,#58348)); +#58339 = ORIENTED_EDGE('',*,*,#58162,.F.); +#58340 = ORIENTED_EDGE('',*,*,#58179,.T.); +#58341 = ORIENTED_EDGE('',*,*,#58342,.T.); +#58342 = EDGE_CURVE('',#58180,#58203,#58343,.T.); +#58343 = CIRCLE('',#58344,5.E-02); +#58344 = AXIS2_PLACEMENT_3D('',#58345,#58346,#58347); +#58345 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#58346 = DIRECTION('',(0.,-1.,0.)); +#58347 = DIRECTION('',(1.,0.,0.)); +#58348 = ORIENTED_EDGE('',*,*,#58202,.F.); +#58349 = CYLINDRICAL_SURFACE('',#58350,5.E-02); +#58350 = AXIS2_PLACEMENT_3D('',#58351,#58352,#58353); +#58351 = CARTESIAN_POINT('',(0.95,0.,5.E-02)); +#58352 = DIRECTION('',(-0.,1.,0.)); +#58353 = DIRECTION('',(1.,0.,-0.)); +#58354 = ADVANCED_FACE('',(#58355),#58367,.T.); +#58355 = FACE_BOUND('',#58356,.T.); +#58356 = EDGE_LOOP('',(#58357,#58358,#58365,#58366)); +#58357 = ORIENTED_EDGE('',*,*,#58218,.T.); +#58358 = ORIENTED_EDGE('',*,*,#58359,.T.); +#58359 = EDGE_CURVE('',#58211,#58252,#58360,.T.); +#58360 = CIRCLE('',#58361,5.E-02); +#58361 = AXIS2_PLACEMENT_3D('',#58362,#58363,#58364); +#58362 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#58363 = DIRECTION('',(0.,-1.,-0.)); +#58364 = DIRECTION('',(1.,0.,0.)); +#58365 = ORIENTED_EDGE('',*,*,#58251,.F.); +#58366 = ORIENTED_EDGE('',*,*,#58232,.T.); +#58367 = CYLINDRICAL_SURFACE('',#58368,5.E-02); +#58368 = AXIS2_PLACEMENT_3D('',#58369,#58370,#58371); +#58369 = CARTESIAN_POINT('',(0.95,0.,0.45)); +#58370 = DIRECTION('',(0.,1.,0.)); +#58371 = DIRECTION('',(1.,0.,-0.)); +#58372 = ADVANCED_FACE('',(#58373),#58391,.T.); +#58373 = FACE_BOUND('',#58374,.T.); +#58374 = EDGE_LOOP('',(#58375,#58376,#58383,#58384)); +#58375 = ORIENTED_EDGE('',*,*,#58210,.F.); +#58376 = ORIENTED_EDGE('',*,*,#58377,.T.); +#58377 = EDGE_CURVE('',#58203,#58274,#58378,.T.); +#58378 = CIRCLE('',#58379,5.E-02); +#58379 = AXIS2_PLACEMENT_3D('',#58380,#58381,#58382); +#58380 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#58381 = DIRECTION('',(0.,0.,1.)); +#58382 = DIRECTION('',(1.,0.,-0.)); +#58383 = ORIENTED_EDGE('',*,*,#58326,.T.); +#58384 = ORIENTED_EDGE('',*,*,#58385,.T.); +#58385 = EDGE_CURVE('',#58299,#58211,#58386,.T.); +#58386 = CIRCLE('',#58387,5.E-02); +#58387 = AXIS2_PLACEMENT_3D('',#58388,#58389,#58390); +#58388 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#58389 = DIRECTION('',(0.,0.,-1.)); +#58390 = DIRECTION('',(1.,0.,0.)); +#58391 = CYLINDRICAL_SURFACE('',#58392,5.E-02); +#58392 = AXIS2_PLACEMENT_3D('',#58393,#58394,#58395); +#58393 = CARTESIAN_POINT('',(0.95,0.45,0.)); +#58394 = DIRECTION('',(0.,0.,1.)); +#58395 = DIRECTION('',(1.,0.,-0.)); +#58396 = ADVANCED_FACE('',(#58397),#58402,.T.); +#58397 = FACE_BOUND('',#58398,.T.); +#58398 = EDGE_LOOP('',(#58399,#58400,#58401)); +#58399 = ORIENTED_EDGE('',*,*,#58342,.F.); +#58400 = ORIENTED_EDGE('',*,*,#58281,.T.); +#58401 = ORIENTED_EDGE('',*,*,#58377,.F.); +#58402 = SPHERICAL_SURFACE('',#58403,5.E-02); +#58403 = AXIS2_PLACEMENT_3D('',#58404,#58405,#58406); +#58404 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#58405 = DIRECTION('',(0.,0.,1.)); +#58406 = DIRECTION('',(1.,0.,-0.)); +#58407 = ADVANCED_FACE('',(#58408),#58413,.T.); +#58408 = FACE_BOUND('',#58409,.T.); +#58409 = EDGE_LOOP('',(#58410,#58411,#58412)); +#58410 = ORIENTED_EDGE('',*,*,#58385,.F.); +#58411 = ORIENTED_EDGE('',*,*,#58308,.T.); +#58412 = ORIENTED_EDGE('',*,*,#58359,.F.); +#58413 = SPHERICAL_SURFACE('',#58414,5.E-02); +#58414 = AXIS2_PLACEMENT_3D('',#58415,#58416,#58417); +#58415 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#58416 = DIRECTION('',(0.,-1.,-0.)); +#58417 = DIRECTION('',(1.,0.,0.)); +#58418 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58422)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#58419,#58420,#58421)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#58419 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#58420 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#58421 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#58422 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#58419, + 'distance_accuracy_value','confusion accuracy'); +#58423 = SHAPE_DEFINITION_REPRESENTATION(#58424,#57963); +#58424 = PRODUCT_DEFINITION_SHAPE('','',#58425); +#58425 = PRODUCT_DEFINITION('design','',#58426,#58429); +#58426 = PRODUCT_DEFINITION_FORMATION('','',#58427); +#58427 = PRODUCT('Open CASCADE STEP translator 6.8 54.1.2', + 'Open CASCADE STEP translator 6.8 54.1.2','',(#58428)); +#58428 = PRODUCT_CONTEXT('',#2,'mechanical'); +#58429 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#58430 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#58431,#58433); +#58431 = ( REPRESENTATION_RELATIONSHIP('','',#57963,#57476) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#58432) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#58432 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57481); +#58433 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #58434); +#58434 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('97','267','',#57471,#58425,$); +#58435 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#58427)); +#58436 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#58437,#58439); +#58437 = ( REPRESENTATION_RELATIONSHIP('','',#57476,#57455) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#58438) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#58438 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57456); +#58439 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #58440); +#58440 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('98','268','',#57450,#57471,$); +#58441 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57473)); +#58442 = SHAPE_DEFINITION_REPRESENTATION(#58443,#58449); +#58443 = PRODUCT_DEFINITION_SHAPE('','',#58444); +#58444 = PRODUCT_DEFINITION('design','',#58445,#58448); +#58445 = PRODUCT_DEFINITION_FORMATION('','',#58446); +#58446 = PRODUCT('Mid_Body','Mid_Body','',(#58447)); +#58447 = PRODUCT_CONTEXT('',#2,'mechanical'); +#58448 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#58449 = SHAPE_REPRESENTATION('',(#11,#58450),#58454); +#58450 = AXIS2_PLACEMENT_3D('',#58451,#58452,#58453); +#58451 = CARTESIAN_POINT('',(0.,0.,0.)); +#58452 = DIRECTION('',(0.,0.,1.)); +#58453 = DIRECTION('',(1.,0.,0.)); +#58454 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58458)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#58455,#58456,#58457)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#58455 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#58456 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#58457 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#58458 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#58455, + 'distance_accuracy_value','confusion accuracy'); +#58459 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#58460),#58750); +#58460 = MANIFOLD_SOLID_BREP('',#58461); +#58461 = CLOSED_SHELL('',(#58462,#58502,#58535,#58594,#58619,#58670, + #58687,#58704,#58721,#58738)); +#58462 = ADVANCED_FACE('',(#58463),#58497,.F.); +#58463 = FACE_BOUND('',#58464,.F.); +#58464 = EDGE_LOOP('',(#58465,#58475,#58483,#58491)); +#58465 = ORIENTED_EDGE('',*,*,#58466,.F.); +#58466 = EDGE_CURVE('',#58467,#58469,#58471,.T.); +#58467 = VERTEX_POINT('',#58468); +#58468 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,5.E-02)); +#58469 = VERTEX_POINT('',#58470); +#58470 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,5.E-02)); +#58471 = LINE('',#58472,#58473); +#58472 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,5.E-02)); +#58473 = VECTOR('',#58474,1.); +#58474 = DIRECTION('',(1.,0.,-0.)); +#58475 = ORIENTED_EDGE('',*,*,#58476,.T.); +#58476 = EDGE_CURVE('',#58467,#58477,#58479,.T.); +#58477 = VERTEX_POINT('',#58478); +#58478 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,0.45)); +#58479 = LINE('',#58480,#58481); +#58480 = CARTESIAN_POINT('',(0.25,0.,0.)); +#58481 = VECTOR('',#58482,1.); +#58482 = DIRECTION('',(0.,0.,1.)); +#58483 = ORIENTED_EDGE('',*,*,#58484,.T.); +#58484 = EDGE_CURVE('',#58477,#58485,#58487,.T.); +#58485 = VERTEX_POINT('',#58486); +#58486 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,0.45)); +#58487 = LINE('',#58488,#58489); +#58488 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,0.45)); +#58489 = VECTOR('',#58490,1.); +#58490 = DIRECTION('',(1.,0.,-0.)); +#58491 = ORIENTED_EDGE('',*,*,#58492,.F.); +#58492 = EDGE_CURVE('',#58469,#58485,#58493,.T.); +#58493 = LINE('',#58494,#58495); +#58494 = CARTESIAN_POINT('',(0.75,0.,0.)); +#58495 = VECTOR('',#58496,1.); +#58496 = DIRECTION('',(0.,0.,1.)); +#58497 = PLANE('',#58498); +#58498 = AXIS2_PLACEMENT_3D('',#58499,#58500,#58501); +#58499 = CARTESIAN_POINT('',(0.,0.,0.)); +#58500 = DIRECTION('',(-0.,1.,0.)); +#58501 = DIRECTION('',(0.,0.,1.)); +#58502 = ADVANCED_FACE('',(#58503),#58530,.T.); +#58503 = FACE_BOUND('',#58504,.T.); +#58504 = EDGE_LOOP('',(#58505,#58506,#58515,#58523)); +#58505 = ORIENTED_EDGE('',*,*,#58466,.F.); +#58506 = ORIENTED_EDGE('',*,*,#58507,.T.); +#58507 = EDGE_CURVE('',#58467,#58508,#58510,.T.); +#58508 = VERTEX_POINT('',#58509); +#58509 = CARTESIAN_POINT('',(0.25,5.E-02,-3.469446951954E-18)); +#58510 = CIRCLE('',#58511,5.E-02); +#58511 = AXIS2_PLACEMENT_3D('',#58512,#58513,#58514); +#58512 = CARTESIAN_POINT('',(0.25,5.E-02,5.E-02)); +#58513 = DIRECTION('',(1.,0.,0.)); +#58514 = DIRECTION('',(0.,-1.,0.)); +#58515 = ORIENTED_EDGE('',*,*,#58516,.T.); +#58516 = EDGE_CURVE('',#58508,#58517,#58519,.T.); +#58517 = VERTEX_POINT('',#58518); +#58518 = CARTESIAN_POINT('',(0.75,5.E-02,-3.469446951954E-18)); +#58519 = LINE('',#58520,#58521); +#58520 = CARTESIAN_POINT('',(0.,5.E-02,-6.938893903907E-18)); +#58521 = VECTOR('',#58522,1.); +#58522 = DIRECTION('',(1.,0.,-0.)); +#58523 = ORIENTED_EDGE('',*,*,#58524,.F.); +#58524 = EDGE_CURVE('',#58469,#58517,#58525,.T.); +#58525 = CIRCLE('',#58526,5.E-02); +#58526 = AXIS2_PLACEMENT_3D('',#58527,#58528,#58529); +#58527 = CARTESIAN_POINT('',(0.75,5.E-02,5.E-02)); +#58528 = DIRECTION('',(1.,0.,0.)); +#58529 = DIRECTION('',(0.,-1.,0.)); +#58530 = CYLINDRICAL_SURFACE('',#58531,5.E-02); +#58531 = AXIS2_PLACEMENT_3D('',#58532,#58533,#58534); +#58532 = CARTESIAN_POINT('',(0.,5.E-02,5.E-02)); +#58533 = DIRECTION('',(1.,0.,-0.)); +#58534 = DIRECTION('',(0.,-1.,0.)); +#58535 = ADVANCED_FACE('',(#58536),#58589,.T.); +#58536 = FACE_BOUND('',#58537,.T.); +#58537 = EDGE_LOOP('',(#58538,#58539,#58540,#58548,#58557,#58565,#58574, + #58582)); +#58538 = ORIENTED_EDGE('',*,*,#58492,.F.); +#58539 = ORIENTED_EDGE('',*,*,#58524,.T.); +#58540 = ORIENTED_EDGE('',*,*,#58541,.T.); +#58541 = EDGE_CURVE('',#58517,#58542,#58544,.T.); +#58542 = VERTEX_POINT('',#58543); +#58543 = CARTESIAN_POINT('',(0.75,0.45,-3.469446951954E-18)); +#58544 = LINE('',#58545,#58546); +#58545 = CARTESIAN_POINT('',(0.75,0.,0.)); +#58546 = VECTOR('',#58547,1.); +#58547 = DIRECTION('',(-0.,1.,0.)); +#58548 = ORIENTED_EDGE('',*,*,#58549,.T.); +#58549 = EDGE_CURVE('',#58542,#58550,#58552,.T.); +#58550 = VERTEX_POINT('',#58551); +#58551 = CARTESIAN_POINT('',(0.75,0.5,5.E-02)); +#58552 = CIRCLE('',#58553,5.E-02); +#58553 = AXIS2_PLACEMENT_3D('',#58554,#58555,#58556); +#58554 = CARTESIAN_POINT('',(0.75,0.45,5.E-02)); +#58555 = DIRECTION('',(1.,0.,-0.)); +#58556 = DIRECTION('',(0.,1.,0.)); +#58557 = ORIENTED_EDGE('',*,*,#58558,.T.); +#58558 = EDGE_CURVE('',#58550,#58559,#58561,.T.); +#58559 = VERTEX_POINT('',#58560); +#58560 = CARTESIAN_POINT('',(0.75,0.5,0.45)); +#58561 = LINE('',#58562,#58563); +#58562 = CARTESIAN_POINT('',(0.75,0.5,0.)); +#58563 = VECTOR('',#58564,1.); +#58564 = DIRECTION('',(0.,0.,1.)); +#58565 = ORIENTED_EDGE('',*,*,#58566,.T.); +#58566 = EDGE_CURVE('',#58559,#58567,#58569,.T.); +#58567 = VERTEX_POINT('',#58568); +#58568 = CARTESIAN_POINT('',(0.75,0.45,0.5)); +#58569 = CIRCLE('',#58570,5.E-02); +#58570 = AXIS2_PLACEMENT_3D('',#58571,#58572,#58573); +#58571 = CARTESIAN_POINT('',(0.75,0.45,0.45)); +#58572 = DIRECTION('',(1.,0.,-0.)); +#58573 = DIRECTION('',(0.,1.,0.)); +#58574 = ORIENTED_EDGE('',*,*,#58575,.F.); +#58575 = EDGE_CURVE('',#58576,#58567,#58578,.T.); +#58576 = VERTEX_POINT('',#58577); +#58577 = CARTESIAN_POINT('',(0.75,5.E-02,0.5)); +#58578 = LINE('',#58579,#58580); +#58579 = CARTESIAN_POINT('',(0.75,0.,0.5)); +#58580 = VECTOR('',#58581,1.); +#58581 = DIRECTION('',(-0.,1.,0.)); +#58582 = ORIENTED_EDGE('',*,*,#58583,.T.); +#58583 = EDGE_CURVE('',#58576,#58485,#58584,.T.); +#58584 = CIRCLE('',#58585,5.E-02); +#58585 = AXIS2_PLACEMENT_3D('',#58586,#58587,#58588); +#58586 = CARTESIAN_POINT('',(0.75,5.E-02,0.45)); +#58587 = DIRECTION('',(1.,0.,0.)); +#58588 = DIRECTION('',(0.,-1.,0.)); +#58589 = PLANE('',#58590); +#58590 = AXIS2_PLACEMENT_3D('',#58591,#58592,#58593); +#58591 = CARTESIAN_POINT('',(0.75,0.,0.)); +#58592 = DIRECTION('',(1.,0.,-0.)); +#58593 = DIRECTION('',(0.,0.,1.)); +#58594 = ADVANCED_FACE('',(#58595),#58614,.T.); +#58595 = FACE_BOUND('',#58596,.T.); +#58596 = EDGE_LOOP('',(#58597,#58598,#58599,#58607)); +#58597 = ORIENTED_EDGE('',*,*,#58484,.T.); +#58598 = ORIENTED_EDGE('',*,*,#58583,.F.); +#58599 = ORIENTED_EDGE('',*,*,#58600,.F.); +#58600 = EDGE_CURVE('',#58601,#58576,#58603,.T.); +#58601 = VERTEX_POINT('',#58602); +#58602 = CARTESIAN_POINT('',(0.25,5.E-02,0.5)); +#58603 = LINE('',#58604,#58605); +#58604 = CARTESIAN_POINT('',(0.,5.E-02,0.5)); +#58605 = VECTOR('',#58606,1.); +#58606 = DIRECTION('',(1.,0.,-0.)); +#58607 = ORIENTED_EDGE('',*,*,#58608,.T.); +#58608 = EDGE_CURVE('',#58601,#58477,#58609,.T.); +#58609 = CIRCLE('',#58610,5.E-02); +#58610 = AXIS2_PLACEMENT_3D('',#58611,#58612,#58613); +#58611 = CARTESIAN_POINT('',(0.25,5.E-02,0.45)); +#58612 = DIRECTION('',(1.,0.,0.)); +#58613 = DIRECTION('',(0.,-1.,0.)); +#58614 = CYLINDRICAL_SURFACE('',#58615,5.E-02); +#58615 = AXIS2_PLACEMENT_3D('',#58616,#58617,#58618); +#58616 = CARTESIAN_POINT('',(0.,5.E-02,0.45)); +#58617 = DIRECTION('',(1.,0.,-0.)); +#58618 = DIRECTION('',(0.,-1.,0.)); +#58619 = ADVANCED_FACE('',(#58620),#58665,.F.); +#58620 = FACE_BOUND('',#58621,.F.); +#58621 = EDGE_LOOP('',(#58622,#58623,#58624,#58632,#58641,#58649,#58658, + #58664)); +#58622 = ORIENTED_EDGE('',*,*,#58476,.F.); +#58623 = ORIENTED_EDGE('',*,*,#58507,.T.); +#58624 = ORIENTED_EDGE('',*,*,#58625,.T.); +#58625 = EDGE_CURVE('',#58508,#58626,#58628,.T.); +#58626 = VERTEX_POINT('',#58627); +#58627 = CARTESIAN_POINT('',(0.25,0.45,-3.469446951954E-18)); +#58628 = LINE('',#58629,#58630); +#58629 = CARTESIAN_POINT('',(0.25,0.,0.)); +#58630 = VECTOR('',#58631,1.); +#58631 = DIRECTION('',(-0.,1.,0.)); +#58632 = ORIENTED_EDGE('',*,*,#58633,.T.); +#58633 = EDGE_CURVE('',#58626,#58634,#58636,.T.); +#58634 = VERTEX_POINT('',#58635); +#58635 = CARTESIAN_POINT('',(0.25,0.5,5.E-02)); +#58636 = CIRCLE('',#58637,5.E-02); +#58637 = AXIS2_PLACEMENT_3D('',#58638,#58639,#58640); +#58638 = CARTESIAN_POINT('',(0.25,0.45,5.E-02)); +#58639 = DIRECTION('',(1.,0.,-0.)); +#58640 = DIRECTION('',(0.,1.,0.)); +#58641 = ORIENTED_EDGE('',*,*,#58642,.T.); +#58642 = EDGE_CURVE('',#58634,#58643,#58645,.T.); +#58643 = VERTEX_POINT('',#58644); +#58644 = CARTESIAN_POINT('',(0.25,0.5,0.45)); +#58645 = LINE('',#58646,#58647); +#58646 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#58647 = VECTOR('',#58648,1.); +#58648 = DIRECTION('',(0.,0.,1.)); +#58649 = ORIENTED_EDGE('',*,*,#58650,.T.); +#58650 = EDGE_CURVE('',#58643,#58651,#58653,.T.); +#58651 = VERTEX_POINT('',#58652); +#58652 = CARTESIAN_POINT('',(0.25,0.45,0.5)); +#58653 = CIRCLE('',#58654,5.E-02); +#58654 = AXIS2_PLACEMENT_3D('',#58655,#58656,#58657); +#58655 = CARTESIAN_POINT('',(0.25,0.45,0.45)); +#58656 = DIRECTION('',(1.,0.,-0.)); +#58657 = DIRECTION('',(0.,1.,0.)); +#58658 = ORIENTED_EDGE('',*,*,#58659,.F.); +#58659 = EDGE_CURVE('',#58601,#58651,#58660,.T.); +#58660 = LINE('',#58661,#58662); +#58661 = CARTESIAN_POINT('',(0.25,0.,0.5)); +#58662 = VECTOR('',#58663,1.); +#58663 = DIRECTION('',(0.,1.,0.)); +#58664 = ORIENTED_EDGE('',*,*,#58608,.T.); +#58665 = PLANE('',#58666); +#58666 = AXIS2_PLACEMENT_3D('',#58667,#58668,#58669); +#58667 = CARTESIAN_POINT('',(0.25,0.,0.)); +#58668 = DIRECTION('',(1.,0.,-0.)); +#58669 = DIRECTION('',(0.,0.,1.)); +#58670 = ADVANCED_FACE('',(#58671),#58682,.F.); +#58671 = FACE_BOUND('',#58672,.F.); +#58672 = EDGE_LOOP('',(#58673,#58674,#58675,#58676)); +#58673 = ORIENTED_EDGE('',*,*,#58625,.F.); +#58674 = ORIENTED_EDGE('',*,*,#58516,.T.); +#58675 = ORIENTED_EDGE('',*,*,#58541,.T.); +#58676 = ORIENTED_EDGE('',*,*,#58677,.F.); +#58677 = EDGE_CURVE('',#58626,#58542,#58678,.T.); +#58678 = LINE('',#58679,#58680); +#58679 = CARTESIAN_POINT('',(0.,0.45,-6.938893903907E-18)); +#58680 = VECTOR('',#58681,1.); +#58681 = DIRECTION('',(1.,0.,-0.)); +#58682 = PLANE('',#58683); +#58683 = AXIS2_PLACEMENT_3D('',#58684,#58685,#58686); +#58684 = CARTESIAN_POINT('',(0.,0.,0.)); +#58685 = DIRECTION('',(0.,0.,1.)); +#58686 = DIRECTION('',(1.,0.,-0.)); +#58687 = ADVANCED_FACE('',(#58688),#58699,.T.); +#58688 = FACE_BOUND('',#58689,.T.); +#58689 = EDGE_LOOP('',(#58690,#58691,#58692,#58693)); +#58690 = ORIENTED_EDGE('',*,*,#58659,.F.); +#58691 = ORIENTED_EDGE('',*,*,#58600,.T.); +#58692 = ORIENTED_EDGE('',*,*,#58575,.T.); +#58693 = ORIENTED_EDGE('',*,*,#58694,.F.); +#58694 = EDGE_CURVE('',#58651,#58567,#58695,.T.); +#58695 = LINE('',#58696,#58697); +#58696 = CARTESIAN_POINT('',(0.,0.45,0.5)); +#58697 = VECTOR('',#58698,1.); +#58698 = DIRECTION('',(1.,0.,-0.)); +#58699 = PLANE('',#58700); +#58700 = AXIS2_PLACEMENT_3D('',#58701,#58702,#58703); +#58701 = CARTESIAN_POINT('',(0.,0.,0.5)); +#58702 = DIRECTION('',(0.,0.,1.)); +#58703 = DIRECTION('',(1.,0.,-0.)); +#58704 = ADVANCED_FACE('',(#58705),#58716,.T.); +#58705 = FACE_BOUND('',#58706,.T.); +#58706 = EDGE_LOOP('',(#58707,#58713,#58714,#58715)); +#58707 = ORIENTED_EDGE('',*,*,#58708,.F.); +#58708 = EDGE_CURVE('',#58643,#58559,#58709,.T.); +#58709 = LINE('',#58710,#58711); +#58710 = CARTESIAN_POINT('',(0.,0.5,0.45)); +#58711 = VECTOR('',#58712,1.); +#58712 = DIRECTION('',(1.,0.,-0.)); +#58713 = ORIENTED_EDGE('',*,*,#58650,.T.); +#58714 = ORIENTED_EDGE('',*,*,#58694,.T.); +#58715 = ORIENTED_EDGE('',*,*,#58566,.F.); +#58716 = CYLINDRICAL_SURFACE('',#58717,5.E-02); +#58717 = AXIS2_PLACEMENT_3D('',#58718,#58719,#58720); +#58718 = CARTESIAN_POINT('',(0.,0.45,0.45)); +#58719 = DIRECTION('',(1.,0.,-0.)); +#58720 = DIRECTION('',(0.,1.,0.)); +#58721 = ADVANCED_FACE('',(#58722),#58733,.T.); +#58722 = FACE_BOUND('',#58723,.T.); +#58723 = EDGE_LOOP('',(#58724,#58730,#58731,#58732)); +#58724 = ORIENTED_EDGE('',*,*,#58725,.F.); +#58725 = EDGE_CURVE('',#58634,#58550,#58726,.T.); +#58726 = LINE('',#58727,#58728); +#58727 = CARTESIAN_POINT('',(0.,0.5,5.E-02)); +#58728 = VECTOR('',#58729,1.); +#58729 = DIRECTION('',(1.,0.,-0.)); +#58730 = ORIENTED_EDGE('',*,*,#58642,.T.); +#58731 = ORIENTED_EDGE('',*,*,#58708,.T.); +#58732 = ORIENTED_EDGE('',*,*,#58558,.F.); +#58733 = PLANE('',#58734); +#58734 = AXIS2_PLACEMENT_3D('',#58735,#58736,#58737); +#58735 = CARTESIAN_POINT('',(0.,0.5,0.)); +#58736 = DIRECTION('',(-0.,1.,0.)); +#58737 = DIRECTION('',(0.,0.,1.)); +#58738 = ADVANCED_FACE('',(#58739),#58745,.T.); +#58739 = FACE_BOUND('',#58740,.T.); +#58740 = EDGE_LOOP('',(#58741,#58742,#58743,#58744)); +#58741 = ORIENTED_EDGE('',*,*,#58725,.T.); +#58742 = ORIENTED_EDGE('',*,*,#58549,.F.); +#58743 = ORIENTED_EDGE('',*,*,#58677,.F.); +#58744 = ORIENTED_EDGE('',*,*,#58633,.T.); +#58745 = CYLINDRICAL_SURFACE('',#58746,5.E-02); +#58746 = AXIS2_PLACEMENT_3D('',#58747,#58748,#58749); +#58747 = CARTESIAN_POINT('',(0.,0.45,5.E-02)); +#58748 = DIRECTION('',(1.,0.,-0.)); +#58749 = DIRECTION('',(0.,1.,0.)); +#58750 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58754)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#58751,#58752,#58753)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#58751 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#58752 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#58753 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#58754 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#58751, + 'distance_accuracy_value','confusion accuracy'); +#58755 = SHAPE_DEFINITION_REPRESENTATION(#58756,#58459); +#58756 = PRODUCT_DEFINITION_SHAPE('','',#58757); +#58757 = PRODUCT_DEFINITION('design','',#58758,#58761); +#58758 = PRODUCT_DEFINITION_FORMATION('','',#58759); +#58759 = PRODUCT('Open CASCADE STEP translator 6.8 54.2.1', + 'Open CASCADE STEP translator 6.8 54.2.1','',(#58760)); +#58760 = PRODUCT_CONTEXT('',#2,'mechanical'); +#58761 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#58762 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#58763,#58765); +#58763 = ( REPRESENTATION_RELATIONSHIP('','',#58459,#58449) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#58764) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#58764 = ITEM_DEFINED_TRANSFORMATION('','',#11,#58450); +#58765 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #58766); +#58766 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('99','269','',#58444,#58757,$); +#58767 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#58759)); +#58768 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#58769,#58771); +#58769 = ( REPRESENTATION_RELATIONSHIP('','',#58449,#57455) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#58770) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#58770 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57460); +#58771 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #58772); +#58772 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('100','270','',#57450,#58444,$); +#58773 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#58446)); +#58774 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#58775,#58777); +#58775 = ( REPRESENTATION_RELATIONSHIP('','',#57455,#57438) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#58776) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#58776 = ITEM_DEFINED_TRANSFORMATION('','',#11,#57439); +#58777 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #58778); +#58778 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('101','','',#57433,#57450,$); +#58779 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57452)); +#58780 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#58781,#58783); +#58781 = ( REPRESENTATION_RELATIONSHIP('','',#57438,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#58782) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#58782 = ITEM_DEFINED_TRANSFORMATION('','',#11,#135); +#58783 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #58784); +#58784 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('102','','',#5,#57433,$); +#58785 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#57435)); +#58786 = SHAPE_DEFINITION_REPRESENTATION(#58787,#58793); +#58787 = PRODUCT_DEFINITION_SHAPE('','',#58788); +#58788 = PRODUCT_DEFINITION('design','',#58789,#58792); +#58789 = PRODUCT_DEFINITION_FORMATION('','',#58790); +#58790 = PRODUCT('C7','C7','',(#58791)); +#58791 = PRODUCT_CONTEXT('',#2,'mechanical'); +#58792 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#58793 = SHAPE_REPRESENTATION('',(#11,#58794),#58798); +#58794 = AXIS2_PLACEMENT_3D('',#58795,#58796,#58797); +#58795 = CARTESIAN_POINT('',(303.63153076171,173.08091735839,0.)); +#58796 = DIRECTION('',(0.,0.,1.)); +#58797 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#58798 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58802)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#58799,#58800,#58801)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#58799 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#58800 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#58801 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#58802 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#58799, + 'distance_accuracy_value','confusion accuracy'); +#58803 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#58804,#58806); +#58804 = ( REPRESENTATION_RELATIONSHIP('','',#55960,#58793) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#58805) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#58805 = ITEM_DEFINED_TRANSFORMATION('','',#11,#58794); +#58806 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #58807); +#58807 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('103','','',#58788,#55955,$); +#58808 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#58809,#58811); +#58809 = ( REPRESENTATION_RELATIONSHIP('','',#58793,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#58810) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#58810 = ITEM_DEFINED_TRANSFORMATION('','',#11,#139); +#58811 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #58812); +#58812 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('104','','',#5,#58788,$); +#58813 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#58790)); +#58814 = SHAPE_DEFINITION_REPRESENTATION(#58815,#58821); +#58815 = PRODUCT_DEFINITION_SHAPE('','',#58816); +#58816 = PRODUCT_DEFINITION('design','',#58817,#58820); +#58817 = PRODUCT_DEFINITION_FORMATION('','',#58818); +#58818 = PRODUCT('C6','C6','',(#58819)); +#58819 = PRODUCT_CONTEXT('',#2,'mechanical'); +#58820 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#58821 = SHAPE_REPRESENTATION('',(#11,#58822),#58826); +#58822 = AXIS2_PLACEMENT_3D('',#58823,#58824,#58825); +#58823 = CARTESIAN_POINT('',(299.1455078125,170.17449951171,0.)); +#58824 = DIRECTION('',(0.,0.,1.)); +#58825 = DIRECTION('',(-4.371138828674E-08,1.,0.)); +#58826 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58830)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#58827,#58828,#58829)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#58827 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#58828 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#58829 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#58830 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#58827, + 'distance_accuracy_value','confusion accuracy'); +#58831 = SHAPE_DEFINITION_REPRESENTATION(#58832,#58838); +#58832 = PRODUCT_DEFINITION_SHAPE('','',#58833); +#58833 = PRODUCT_DEFINITION('design','',#58834,#58837); +#58834 = PRODUCT_DEFINITION_FORMATION('','',#58835); +#58835 = PRODUCT('6608418848','6608418848','',(#58836)); +#58836 = PRODUCT_CONTEXT('',#2,'mechanical'); +#58837 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#58838 = SHAPE_REPRESENTATION('',(#11,#58839,#58843),#58847); +#58839 = AXIS2_PLACEMENT_3D('',#58840,#58841,#58842); +#58840 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#58841 = DIRECTION('',(0.,0.,1.)); +#58842 = DIRECTION('',(1.,0.,0.)); +#58843 = AXIS2_PLACEMENT_3D('',#58844,#58845,#58846); +#58844 = CARTESIAN_POINT('',(-0.5,-0.25,0.)); +#58845 = DIRECTION('',(0.,0.,1.)); +#58846 = DIRECTION('',(1.,0.,0.)); +#58847 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58851)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#58848,#58849,#58850)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#58848 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#58849 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#58850 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#58851 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#58848, + 'distance_accuracy_value','confusion accuracy'); +#58852 = SHAPE_DEFINITION_REPRESENTATION(#58853,#58859); +#58853 = PRODUCT_DEFINITION_SHAPE('','',#58854); +#58854 = PRODUCT_DEFINITION('design','',#58855,#58858); +#58855 = PRODUCT_DEFINITION_FORMATION('','',#58856); +#58856 = PRODUCT('Terminal','Terminal','',(#58857)); +#58857 = PRODUCT_CONTEXT('',#2,'mechanical'); +#58858 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#58859 = SHAPE_REPRESENTATION('',(#11,#58860,#58864),#58868); +#58860 = AXIS2_PLACEMENT_3D('',#58861,#58862,#58863); +#58861 = CARTESIAN_POINT('',(0.,0.,0.)); +#58862 = DIRECTION('',(0.,0.,1.)); +#58863 = DIRECTION('',(1.,0.,0.)); +#58864 = AXIS2_PLACEMENT_3D('',#58865,#58866,#58867); +#58865 = CARTESIAN_POINT('',(0.,0.,0.)); +#58866 = DIRECTION('',(0.,0.,1.)); +#58867 = DIRECTION('',(1.,0.,0.)); +#58868 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#58872)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#58869,#58870,#58871)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#58869 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#58870 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#58871 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#58872 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#58869, + 'distance_accuracy_value','confusion accuracy'); +#58873 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#58874),#59328); +#58874 = MANIFOLD_SOLID_BREP('',#58875); +#58875 = CLOSED_SHELL('',(#58876,#58916,#58949,#58982,#59015,#59048, + #59065,#59082,#59113,#59144,#59161,#59192,#59209,#59240,#59258, + #59276,#59304,#59316)); +#58876 = ADVANCED_FACE('',(#58877),#58911,.F.); +#58877 = FACE_BOUND('',#58878,.F.); +#58878 = EDGE_LOOP('',(#58879,#58889,#58897,#58905)); +#58879 = ORIENTED_EDGE('',*,*,#58880,.F.); +#58880 = EDGE_CURVE('',#58881,#58883,#58885,.T.); +#58881 = VERTEX_POINT('',#58882); +#58882 = CARTESIAN_POINT('',(-6.938893903907E-18,5.E-02,5.E-02)); +#58883 = VERTEX_POINT('',#58884); +#58884 = CARTESIAN_POINT('',(-6.938893903907E-18,5.E-02,0.45)); +#58885 = LINE('',#58886,#58887); +#58886 = CARTESIAN_POINT('',(-6.938893903907E-18,5.E-02,0.)); +#58887 = VECTOR('',#58888,1.); +#58888 = DIRECTION('',(0.,0.,1.)); +#58889 = ORIENTED_EDGE('',*,*,#58890,.T.); +#58890 = EDGE_CURVE('',#58881,#58891,#58893,.T.); +#58891 = VERTEX_POINT('',#58892); +#58892 = CARTESIAN_POINT('',(-6.938893903907E-18,0.45,5.E-02)); +#58893 = LINE('',#58894,#58895); +#58894 = CARTESIAN_POINT('',(-6.938893903907E-18,0.,5.E-02)); +#58895 = VECTOR('',#58896,1.); +#58896 = DIRECTION('',(-0.,1.,0.)); +#58897 = ORIENTED_EDGE('',*,*,#58898,.T.); +#58898 = EDGE_CURVE('',#58891,#58899,#58901,.T.); +#58899 = VERTEX_POINT('',#58900); +#58900 = CARTESIAN_POINT('',(-6.938893903907E-18,0.45,0.45)); +#58901 = LINE('',#58902,#58903); +#58902 = CARTESIAN_POINT('',(-6.938893903907E-18,0.45,0.)); +#58903 = VECTOR('',#58904,1.); +#58904 = DIRECTION('',(0.,0.,1.)); +#58905 = ORIENTED_EDGE('',*,*,#58906,.F.); +#58906 = EDGE_CURVE('',#58883,#58899,#58907,.T.); +#58907 = LINE('',#58908,#58909); +#58908 = CARTESIAN_POINT('',(-6.938893903907E-18,0.,0.45)); +#58909 = VECTOR('',#58910,1.); +#58910 = DIRECTION('',(-0.,1.,0.)); +#58911 = PLANE('',#58912); +#58912 = AXIS2_PLACEMENT_3D('',#58913,#58914,#58915); +#58913 = CARTESIAN_POINT('',(0.,0.,0.)); +#58914 = DIRECTION('',(1.,0.,-0.)); +#58915 = DIRECTION('',(0.,0.,1.)); +#58916 = ADVANCED_FACE('',(#58917),#58944,.T.); +#58917 = FACE_BOUND('',#58918,.T.); +#58918 = EDGE_LOOP('',(#58919,#58920,#58929,#58937)); +#58919 = ORIENTED_EDGE('',*,*,#58880,.F.); +#58920 = ORIENTED_EDGE('',*,*,#58921,.T.); +#58921 = EDGE_CURVE('',#58881,#58922,#58924,.T.); +#58922 = VERTEX_POINT('',#58923); +#58923 = CARTESIAN_POINT('',(5.E-02,-6.938893903907E-18,5.E-02)); +#58924 = CIRCLE('',#58925,5.E-02); +#58925 = AXIS2_PLACEMENT_3D('',#58926,#58927,#58928); +#58926 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#58927 = DIRECTION('',(0.,0.,1.)); +#58928 = DIRECTION('',(-1.,0.,0.)); +#58929 = ORIENTED_EDGE('',*,*,#58930,.T.); +#58930 = EDGE_CURVE('',#58922,#58931,#58933,.T.); +#58931 = VERTEX_POINT('',#58932); +#58932 = CARTESIAN_POINT('',(5.E-02,-6.938893903907E-18,0.45)); +#58933 = LINE('',#58934,#58935); +#58934 = CARTESIAN_POINT('',(5.E-02,-6.938893903907E-18,0.)); +#58935 = VECTOR('',#58936,1.); +#58936 = DIRECTION('',(0.,0.,1.)); +#58937 = ORIENTED_EDGE('',*,*,#58938,.F.); +#58938 = EDGE_CURVE('',#58883,#58931,#58939,.T.); +#58939 = CIRCLE('',#58940,5.E-02); +#58940 = AXIS2_PLACEMENT_3D('',#58941,#58942,#58943); +#58941 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#58942 = DIRECTION('',(0.,0.,1.)); +#58943 = DIRECTION('',(-1.,0.,0.)); +#58944 = CYLINDRICAL_SURFACE('',#58945,5.E-02); +#58945 = AXIS2_PLACEMENT_3D('',#58946,#58947,#58948); +#58946 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.)); +#58947 = DIRECTION('',(0.,0.,1.)); +#58948 = DIRECTION('',(-1.,-0.,0.)); +#58949 = ADVANCED_FACE('',(#58950),#58977,.T.); +#58950 = FACE_BOUND('',#58951,.T.); +#58951 = EDGE_LOOP('',(#58952,#58953,#58962,#58970)); +#58952 = ORIENTED_EDGE('',*,*,#58890,.T.); +#58953 = ORIENTED_EDGE('',*,*,#58954,.F.); +#58954 = EDGE_CURVE('',#58955,#58891,#58957,.T.); +#58955 = VERTEX_POINT('',#58956); +#58956 = CARTESIAN_POINT('',(5.E-02,0.45,0.)); +#58957 = CIRCLE('',#58958,5.E-02); +#58958 = AXIS2_PLACEMENT_3D('',#58959,#58960,#58961); +#58959 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#58960 = DIRECTION('',(0.,1.,-0.)); +#58961 = DIRECTION('',(-1.,0.,0.)); +#58962 = ORIENTED_EDGE('',*,*,#58963,.F.); +#58963 = EDGE_CURVE('',#58964,#58955,#58966,.T.); +#58964 = VERTEX_POINT('',#58965); +#58965 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.)); +#58966 = LINE('',#58967,#58968); +#58967 = CARTESIAN_POINT('',(5.E-02,0.,-6.938893903907E-18)); +#58968 = VECTOR('',#58969,1.); +#58969 = DIRECTION('',(-0.,1.,0.)); +#58970 = ORIENTED_EDGE('',*,*,#58971,.T.); +#58971 = EDGE_CURVE('',#58964,#58881,#58972,.T.); +#58972 = CIRCLE('',#58973,5.E-02); +#58973 = AXIS2_PLACEMENT_3D('',#58974,#58975,#58976); +#58974 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#58975 = DIRECTION('',(0.,1.,-0.)); +#58976 = DIRECTION('',(-1.,0.,0.)); +#58977 = CYLINDRICAL_SURFACE('',#58978,5.E-02); +#58978 = AXIS2_PLACEMENT_3D('',#58979,#58980,#58981); +#58979 = CARTESIAN_POINT('',(5.E-02,0.,5.E-02)); +#58980 = DIRECTION('',(-0.,1.,0.)); +#58981 = DIRECTION('',(-1.,-0.,0.)); +#58982 = ADVANCED_FACE('',(#58983),#59010,.T.); +#58983 = FACE_BOUND('',#58984,.T.); +#58984 = EDGE_LOOP('',(#58985,#58994,#59002,#59009)); +#58985 = ORIENTED_EDGE('',*,*,#58986,.F.); +#58986 = EDGE_CURVE('',#58987,#58883,#58989,.T.); +#58987 = VERTEX_POINT('',#58988); +#58988 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.5)); +#58989 = CIRCLE('',#58990,5.E-02); +#58990 = AXIS2_PLACEMENT_3D('',#58991,#58992,#58993); +#58991 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#58992 = DIRECTION('',(0.,-1.,0.)); +#58993 = DIRECTION('',(-1.,0.,0.)); +#58994 = ORIENTED_EDGE('',*,*,#58995,.T.); +#58995 = EDGE_CURVE('',#58987,#58996,#58998,.T.); +#58996 = VERTEX_POINT('',#58997); +#58997 = CARTESIAN_POINT('',(5.E-02,0.45,0.5)); +#58998 = LINE('',#58999,#59000); +#58999 = CARTESIAN_POINT('',(5.E-02,0.,0.5)); +#59000 = VECTOR('',#59001,1.); +#59001 = DIRECTION('',(-0.,1.,0.)); +#59002 = ORIENTED_EDGE('',*,*,#59003,.F.); +#59003 = EDGE_CURVE('',#58899,#58996,#59004,.T.); +#59004 = CIRCLE('',#59005,5.E-02); +#59005 = AXIS2_PLACEMENT_3D('',#59006,#59007,#59008); +#59006 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#59007 = DIRECTION('',(-0.,1.,0.)); +#59008 = DIRECTION('',(-1.,-0.,0.)); +#59009 = ORIENTED_EDGE('',*,*,#58906,.F.); +#59010 = CYLINDRICAL_SURFACE('',#59011,5.E-02); +#59011 = AXIS2_PLACEMENT_3D('',#59012,#59013,#59014); +#59012 = CARTESIAN_POINT('',(5.E-02,0.,0.45)); +#59013 = DIRECTION('',(-0.,1.,0.)); +#59014 = DIRECTION('',(-1.,-0.,0.)); +#59015 = ADVANCED_FACE('',(#59016),#59043,.T.); +#59016 = FACE_BOUND('',#59017,.T.); +#59017 = EDGE_LOOP('',(#59018,#59027,#59035,#59042)); +#59018 = ORIENTED_EDGE('',*,*,#59019,.F.); +#59019 = EDGE_CURVE('',#59020,#58899,#59022,.T.); +#59020 = VERTEX_POINT('',#59021); +#59021 = CARTESIAN_POINT('',(5.E-02,0.5,0.45)); +#59022 = CIRCLE('',#59023,5.E-02); +#59023 = AXIS2_PLACEMENT_3D('',#59024,#59025,#59026); +#59024 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#59025 = DIRECTION('',(0.,0.,1.)); +#59026 = DIRECTION('',(-1.,-0.,0.)); +#59027 = ORIENTED_EDGE('',*,*,#59028,.F.); +#59028 = EDGE_CURVE('',#59029,#59020,#59031,.T.); +#59029 = VERTEX_POINT('',#59030); +#59030 = CARTESIAN_POINT('',(5.E-02,0.5,5.E-02)); +#59031 = LINE('',#59032,#59033); +#59032 = CARTESIAN_POINT('',(5.E-02,0.5,0.)); +#59033 = VECTOR('',#59034,1.); +#59034 = DIRECTION('',(0.,0.,1.)); +#59035 = ORIENTED_EDGE('',*,*,#59036,.F.); +#59036 = EDGE_CURVE('',#58891,#59029,#59037,.T.); +#59037 = CIRCLE('',#59038,5.E-02); +#59038 = AXIS2_PLACEMENT_3D('',#59039,#59040,#59041); +#59039 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#59040 = DIRECTION('',(0.,0.,-1.)); +#59041 = DIRECTION('',(-1.,0.,0.)); +#59042 = ORIENTED_EDGE('',*,*,#58898,.T.); +#59043 = CYLINDRICAL_SURFACE('',#59044,5.E-02); +#59044 = AXIS2_PLACEMENT_3D('',#59045,#59046,#59047); +#59045 = CARTESIAN_POINT('',(5.E-02,0.45,0.)); +#59046 = DIRECTION('',(0.,0.,1.)); +#59047 = DIRECTION('',(-1.,-0.,0.)); +#59048 = ADVANCED_FACE('',(#59049),#59060,.T.); +#59049 = FACE_BOUND('',#59050,.T.); +#59050 = EDGE_LOOP('',(#59051,#59052,#59059)); +#59051 = ORIENTED_EDGE('',*,*,#58971,.F.); +#59052 = ORIENTED_EDGE('',*,*,#59053,.T.); +#59053 = EDGE_CURVE('',#58964,#58922,#59054,.T.); +#59054 = CIRCLE('',#59055,5.E-02); +#59055 = AXIS2_PLACEMENT_3D('',#59056,#59057,#59058); +#59056 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#59057 = DIRECTION('',(-1.,6.123233995737E-17,0.)); +#59058 = DIRECTION('',(-6.123233995737E-17,-1.,0.)); +#59059 = ORIENTED_EDGE('',*,*,#58921,.F.); +#59060 = SPHERICAL_SURFACE('',#59061,5.E-02); +#59061 = AXIS2_PLACEMENT_3D('',#59062,#59063,#59064); +#59062 = CARTESIAN_POINT('',(5.E-02,5.E-02,5.E-02)); +#59063 = DIRECTION('',(0.,0.,1.)); +#59064 = DIRECTION('',(-1.,0.,0.)); +#59065 = ADVANCED_FACE('',(#59066),#59077,.T.); +#59066 = FACE_BOUND('',#59067,.T.); +#59067 = EDGE_LOOP('',(#59068,#59069,#59076)); +#59068 = ORIENTED_EDGE('',*,*,#58938,.T.); +#59069 = ORIENTED_EDGE('',*,*,#59070,.F.); +#59070 = EDGE_CURVE('',#58987,#58931,#59071,.T.); +#59071 = CIRCLE('',#59072,5.E-02); +#59072 = AXIS2_PLACEMENT_3D('',#59073,#59074,#59075); +#59073 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#59074 = DIRECTION('',(1.,-6.123233995737E-17,0.)); +#59075 = DIRECTION('',(-6.123233995737E-17,-1.,0.)); +#59076 = ORIENTED_EDGE('',*,*,#58986,.T.); +#59077 = SPHERICAL_SURFACE('',#59078,5.E-02); +#59078 = AXIS2_PLACEMENT_3D('',#59079,#59080,#59081); +#59079 = CARTESIAN_POINT('',(5.E-02,5.E-02,0.45)); +#59080 = DIRECTION('',(-0.,-0.,-1.)); +#59081 = DIRECTION('',(-1.,0.,0.)); +#59082 = ADVANCED_FACE('',(#59083),#59108,.F.); +#59083 = FACE_BOUND('',#59084,.F.); +#59084 = EDGE_LOOP('',(#59085,#59093,#59094,#59102)); +#59085 = ORIENTED_EDGE('',*,*,#59086,.F.); +#59086 = EDGE_CURVE('',#58922,#59087,#59089,.T.); +#59087 = VERTEX_POINT('',#59088); +#59088 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,5.E-02)); +#59089 = LINE('',#59090,#59091); +#59090 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,5.E-02)); +#59091 = VECTOR('',#59092,1.); +#59092 = DIRECTION('',(1.,0.,-0.)); +#59093 = ORIENTED_EDGE('',*,*,#58930,.T.); +#59094 = ORIENTED_EDGE('',*,*,#59095,.T.); +#59095 = EDGE_CURVE('',#58931,#59096,#59098,.T.); +#59096 = VERTEX_POINT('',#59097); +#59097 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,0.45)); +#59098 = LINE('',#59099,#59100); +#59099 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,0.45)); +#59100 = VECTOR('',#59101,1.); +#59101 = DIRECTION('',(1.,0.,-0.)); +#59102 = ORIENTED_EDGE('',*,*,#59103,.F.); +#59103 = EDGE_CURVE('',#59087,#59096,#59104,.T.); +#59104 = LINE('',#59105,#59106); +#59105 = CARTESIAN_POINT('',(0.25,0.,0.)); +#59106 = VECTOR('',#59107,1.); +#59107 = DIRECTION('',(0.,0.,1.)); +#59108 = PLANE('',#59109); +#59109 = AXIS2_PLACEMENT_3D('',#59110,#59111,#59112); +#59110 = CARTESIAN_POINT('',(0.,0.,0.)); +#59111 = DIRECTION('',(-0.,1.,0.)); +#59112 = DIRECTION('',(0.,0.,1.)); +#59113 = ADVANCED_FACE('',(#59114),#59139,.F.); +#59114 = FACE_BOUND('',#59115,.F.); +#59115 = EDGE_LOOP('',(#59116,#59117,#59125,#59133)); +#59116 = ORIENTED_EDGE('',*,*,#58963,.F.); +#59117 = ORIENTED_EDGE('',*,*,#59118,.T.); +#59118 = EDGE_CURVE('',#58964,#59119,#59121,.T.); +#59119 = VERTEX_POINT('',#59120); +#59120 = CARTESIAN_POINT('',(0.25,5.E-02,-3.469446951954E-18)); +#59121 = LINE('',#59122,#59123); +#59122 = CARTESIAN_POINT('',(0.,5.E-02,-6.938893903907E-18)); +#59123 = VECTOR('',#59124,1.); +#59124 = DIRECTION('',(1.,0.,-0.)); +#59125 = ORIENTED_EDGE('',*,*,#59126,.T.); +#59126 = EDGE_CURVE('',#59119,#59127,#59129,.T.); +#59127 = VERTEX_POINT('',#59128); +#59128 = CARTESIAN_POINT('',(0.25,0.45,-3.469446951954E-18)); +#59129 = LINE('',#59130,#59131); +#59130 = CARTESIAN_POINT('',(0.25,0.,0.)); +#59131 = VECTOR('',#59132,1.); +#59132 = DIRECTION('',(-0.,1.,0.)); +#59133 = ORIENTED_EDGE('',*,*,#59134,.F.); +#59134 = EDGE_CURVE('',#58955,#59127,#59135,.T.); +#59135 = LINE('',#59136,#59137); +#59136 = CARTESIAN_POINT('',(0.,0.45,-6.938893903907E-18)); +#59137 = VECTOR('',#59138,1.); +#59138 = DIRECTION('',(1.,0.,-0.)); +#59139 = PLANE('',#59140); +#59140 = AXIS2_PLACEMENT_3D('',#59141,#59142,#59143); +#59141 = CARTESIAN_POINT('',(0.,0.,0.)); +#59142 = DIRECTION('',(0.,0.,1.)); +#59143 = DIRECTION('',(1.,0.,-0.)); +#59144 = ADVANCED_FACE('',(#59145),#59156,.T.); +#59145 = FACE_BOUND('',#59146,.T.); +#59146 = EDGE_LOOP('',(#59147,#59148,#59155)); +#59147 = ORIENTED_EDGE('',*,*,#59036,.T.); +#59148 = ORIENTED_EDGE('',*,*,#59149,.F.); +#59149 = EDGE_CURVE('',#58955,#59029,#59150,.T.); +#59150 = CIRCLE('',#59151,5.E-02); +#59151 = AXIS2_PLACEMENT_3D('',#59152,#59153,#59154); +#59152 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#59153 = DIRECTION('',(1.,6.123233995737E-17,-0.)); +#59154 = DIRECTION('',(-6.123233995737E-17,1.,0.)); +#59155 = ORIENTED_EDGE('',*,*,#58954,.T.); +#59156 = SPHERICAL_SURFACE('',#59157,5.E-02); +#59157 = AXIS2_PLACEMENT_3D('',#59158,#59159,#59160); +#59158 = CARTESIAN_POINT('',(5.E-02,0.45,5.E-02)); +#59159 = DIRECTION('',(0.,0.,1.)); +#59160 = DIRECTION('',(-1.,0.,0.)); +#59161 = ADVANCED_FACE('',(#59162),#59187,.T.); +#59162 = FACE_BOUND('',#59163,.T.); +#59163 = EDGE_LOOP('',(#59164,#59165,#59173,#59181)); +#59164 = ORIENTED_EDGE('',*,*,#58995,.F.); +#59165 = ORIENTED_EDGE('',*,*,#59166,.T.); +#59166 = EDGE_CURVE('',#58987,#59167,#59169,.T.); +#59167 = VERTEX_POINT('',#59168); +#59168 = CARTESIAN_POINT('',(0.25,5.E-02,0.5)); +#59169 = LINE('',#59170,#59171); +#59170 = CARTESIAN_POINT('',(0.,5.E-02,0.5)); +#59171 = VECTOR('',#59172,1.); +#59172 = DIRECTION('',(1.,0.,-0.)); +#59173 = ORIENTED_EDGE('',*,*,#59174,.T.); +#59174 = EDGE_CURVE('',#59167,#59175,#59177,.T.); +#59175 = VERTEX_POINT('',#59176); +#59176 = CARTESIAN_POINT('',(0.25,0.45,0.5)); +#59177 = LINE('',#59178,#59179); +#59178 = CARTESIAN_POINT('',(0.25,0.,0.5)); +#59179 = VECTOR('',#59180,1.); +#59180 = DIRECTION('',(0.,1.,0.)); +#59181 = ORIENTED_EDGE('',*,*,#59182,.F.); +#59182 = EDGE_CURVE('',#58996,#59175,#59183,.T.); +#59183 = LINE('',#59184,#59185); +#59184 = CARTESIAN_POINT('',(0.,0.45,0.5)); +#59185 = VECTOR('',#59186,1.); +#59186 = DIRECTION('',(1.,0.,-0.)); +#59187 = PLANE('',#59188); +#59188 = AXIS2_PLACEMENT_3D('',#59189,#59190,#59191); +#59189 = CARTESIAN_POINT('',(0.,0.,0.5)); +#59190 = DIRECTION('',(0.,0.,1.)); +#59191 = DIRECTION('',(1.,0.,-0.)); +#59192 = ADVANCED_FACE('',(#59193),#59204,.T.); +#59193 = FACE_BOUND('',#59194,.T.); +#59194 = EDGE_LOOP('',(#59195,#59196,#59203)); +#59195 = ORIENTED_EDGE('',*,*,#59003,.T.); +#59196 = ORIENTED_EDGE('',*,*,#59197,.F.); +#59197 = EDGE_CURVE('',#59020,#58996,#59198,.T.); +#59198 = CIRCLE('',#59199,5.E-02); +#59199 = AXIS2_PLACEMENT_3D('',#59200,#59201,#59202); +#59200 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#59201 = DIRECTION('',(1.,0.,6.123233995737E-17)); +#59202 = DIRECTION('',(-6.123233995737E-17,-0.,1.)); +#59203 = ORIENTED_EDGE('',*,*,#59019,.T.); +#59204 = SPHERICAL_SURFACE('',#59205,5.E-02); +#59205 = AXIS2_PLACEMENT_3D('',#59206,#59207,#59208); +#59206 = CARTESIAN_POINT('',(5.E-02,0.45,0.45)); +#59207 = DIRECTION('',(0.,-1.,-0.)); +#59208 = DIRECTION('',(-1.,-0.,0.)); +#59209 = ADVANCED_FACE('',(#59210),#59235,.T.); +#59210 = FACE_BOUND('',#59211,.T.); +#59211 = EDGE_LOOP('',(#59212,#59220,#59221,#59229)); +#59212 = ORIENTED_EDGE('',*,*,#59213,.F.); +#59213 = EDGE_CURVE('',#59029,#59214,#59216,.T.); +#59214 = VERTEX_POINT('',#59215); +#59215 = CARTESIAN_POINT('',(0.25,0.5,5.E-02)); +#59216 = LINE('',#59217,#59218); +#59217 = CARTESIAN_POINT('',(0.,0.5,5.E-02)); +#59218 = VECTOR('',#59219,1.); +#59219 = DIRECTION('',(1.,0.,-0.)); +#59220 = ORIENTED_EDGE('',*,*,#59028,.T.); +#59221 = ORIENTED_EDGE('',*,*,#59222,.T.); +#59222 = EDGE_CURVE('',#59020,#59223,#59225,.T.); +#59223 = VERTEX_POINT('',#59224); +#59224 = CARTESIAN_POINT('',(0.25,0.5,0.45)); +#59225 = LINE('',#59226,#59227); +#59226 = CARTESIAN_POINT('',(0.,0.5,0.45)); +#59227 = VECTOR('',#59228,1.); +#59228 = DIRECTION('',(1.,0.,-0.)); +#59229 = ORIENTED_EDGE('',*,*,#59230,.F.); +#59230 = EDGE_CURVE('',#59214,#59223,#59231,.T.); +#59231 = LINE('',#59232,#59233); +#59232 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#59233 = VECTOR('',#59234,1.); +#59234 = DIRECTION('',(0.,0.,1.)); +#59235 = PLANE('',#59236); +#59236 = AXIS2_PLACEMENT_3D('',#59237,#59238,#59239); +#59237 = CARTESIAN_POINT('',(0.,0.5,0.)); +#59238 = DIRECTION('',(-0.,1.,0.)); +#59239 = DIRECTION('',(0.,0.,1.)); +#59240 = ADVANCED_FACE('',(#59241),#59253,.T.); +#59241 = FACE_BOUND('',#59242,.T.); +#59242 = EDGE_LOOP('',(#59243,#59244,#59245,#59252)); +#59243 = ORIENTED_EDGE('',*,*,#59053,.F.); +#59244 = ORIENTED_EDGE('',*,*,#59118,.T.); +#59245 = ORIENTED_EDGE('',*,*,#59246,.F.); +#59246 = EDGE_CURVE('',#59087,#59119,#59247,.T.); +#59247 = CIRCLE('',#59248,5.E-02); +#59248 = AXIS2_PLACEMENT_3D('',#59249,#59250,#59251); +#59249 = CARTESIAN_POINT('',(0.25,5.E-02,5.E-02)); +#59250 = DIRECTION('',(1.,0.,0.)); +#59251 = DIRECTION('',(0.,-1.,0.)); +#59252 = ORIENTED_EDGE('',*,*,#59086,.F.); +#59253 = CYLINDRICAL_SURFACE('',#59254,5.E-02); +#59254 = AXIS2_PLACEMENT_3D('',#59255,#59256,#59257); +#59255 = CARTESIAN_POINT('',(0.,5.E-02,5.E-02)); +#59256 = DIRECTION('',(1.,0.,-0.)); +#59257 = DIRECTION('',(0.,-1.,0.)); +#59258 = ADVANCED_FACE('',(#59259),#59271,.T.); +#59259 = FACE_BOUND('',#59260,.T.); +#59260 = EDGE_LOOP('',(#59261,#59262,#59269,#59270)); +#59261 = ORIENTED_EDGE('',*,*,#59095,.T.); +#59262 = ORIENTED_EDGE('',*,*,#59263,.F.); +#59263 = EDGE_CURVE('',#59167,#59096,#59264,.T.); +#59264 = CIRCLE('',#59265,5.E-02); +#59265 = AXIS2_PLACEMENT_3D('',#59266,#59267,#59268); +#59266 = CARTESIAN_POINT('',(0.25,5.E-02,0.45)); +#59267 = DIRECTION('',(1.,0.,0.)); +#59268 = DIRECTION('',(0.,-1.,0.)); +#59269 = ORIENTED_EDGE('',*,*,#59166,.F.); +#59270 = ORIENTED_EDGE('',*,*,#59070,.T.); +#59271 = CYLINDRICAL_SURFACE('',#59272,5.E-02); +#59272 = AXIS2_PLACEMENT_3D('',#59273,#59274,#59275); +#59273 = CARTESIAN_POINT('',(0.,5.E-02,0.45)); +#59274 = DIRECTION('',(1.,0.,-0.)); +#59275 = DIRECTION('',(0.,-1.,0.)); +#59276 = ADVANCED_FACE('',(#59277),#59299,.T.); +#59277 = FACE_BOUND('',#59278,.T.); +#59278 = EDGE_LOOP('',(#59279,#59280,#59281,#59282,#59289,#59290,#59297, + #59298)); +#59279 = ORIENTED_EDGE('',*,*,#59103,.F.); +#59280 = ORIENTED_EDGE('',*,*,#59246,.T.); +#59281 = ORIENTED_EDGE('',*,*,#59126,.T.); +#59282 = ORIENTED_EDGE('',*,*,#59283,.T.); +#59283 = EDGE_CURVE('',#59127,#59214,#59284,.T.); +#59284 = CIRCLE('',#59285,5.E-02); +#59285 = AXIS2_PLACEMENT_3D('',#59286,#59287,#59288); +#59286 = CARTESIAN_POINT('',(0.25,0.45,5.E-02)); +#59287 = DIRECTION('',(1.,0.,-0.)); +#59288 = DIRECTION('',(0.,1.,0.)); +#59289 = ORIENTED_EDGE('',*,*,#59230,.T.); +#59290 = ORIENTED_EDGE('',*,*,#59291,.T.); +#59291 = EDGE_CURVE('',#59223,#59175,#59292,.T.); +#59292 = CIRCLE('',#59293,5.E-02); +#59293 = AXIS2_PLACEMENT_3D('',#59294,#59295,#59296); +#59294 = CARTESIAN_POINT('',(0.25,0.45,0.45)); +#59295 = DIRECTION('',(1.,0.,-0.)); +#59296 = DIRECTION('',(0.,1.,0.)); +#59297 = ORIENTED_EDGE('',*,*,#59174,.F.); +#59298 = ORIENTED_EDGE('',*,*,#59263,.T.); +#59299 = PLANE('',#59300); +#59300 = AXIS2_PLACEMENT_3D('',#59301,#59302,#59303); +#59301 = CARTESIAN_POINT('',(0.25,0.,0.)); +#59302 = DIRECTION('',(1.,0.,-0.)); +#59303 = DIRECTION('',(0.,0.,1.)); +#59304 = ADVANCED_FACE('',(#59305),#59311,.T.); +#59305 = FACE_BOUND('',#59306,.T.); +#59306 = EDGE_LOOP('',(#59307,#59308,#59309,#59310)); +#59307 = ORIENTED_EDGE('',*,*,#59213,.T.); +#59308 = ORIENTED_EDGE('',*,*,#59283,.F.); +#59309 = ORIENTED_EDGE('',*,*,#59134,.F.); +#59310 = ORIENTED_EDGE('',*,*,#59149,.T.); +#59311 = CYLINDRICAL_SURFACE('',#59312,5.E-02); +#59312 = AXIS2_PLACEMENT_3D('',#59313,#59314,#59315); +#59313 = CARTESIAN_POINT('',(0.,0.45,5.E-02)); +#59314 = DIRECTION('',(1.,0.,-0.)); +#59315 = DIRECTION('',(0.,1.,0.)); +#59316 = ADVANCED_FACE('',(#59317),#59323,.T.); +#59317 = FACE_BOUND('',#59318,.T.); +#59318 = EDGE_LOOP('',(#59319,#59320,#59321,#59322)); +#59319 = ORIENTED_EDGE('',*,*,#59222,.F.); +#59320 = ORIENTED_EDGE('',*,*,#59197,.T.); +#59321 = ORIENTED_EDGE('',*,*,#59182,.T.); +#59322 = ORIENTED_EDGE('',*,*,#59291,.F.); +#59323 = CYLINDRICAL_SURFACE('',#59324,5.E-02); +#59324 = AXIS2_PLACEMENT_3D('',#59325,#59326,#59327); +#59325 = CARTESIAN_POINT('',(0.,0.45,0.45)); +#59326 = DIRECTION('',(1.,0.,-0.)); +#59327 = DIRECTION('',(0.,1.,0.)); +#59328 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#59332)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#59329,#59330,#59331)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#59329 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#59330 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#59331 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#59332 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#59329, + 'distance_accuracy_value','confusion accuracy'); +#59333 = SHAPE_DEFINITION_REPRESENTATION(#59334,#58873); +#59334 = PRODUCT_DEFINITION_SHAPE('','',#59335); +#59335 = PRODUCT_DEFINITION('design','',#59336,#59339); +#59336 = PRODUCT_DEFINITION_FORMATION('','',#59337); +#59337 = PRODUCT('Open CASCADE STEP translator 6.8 54.1.1', + 'Open CASCADE STEP translator 6.8 54.1.1','',(#59338)); +#59338 = PRODUCT_CONTEXT('',#2,'mechanical'); +#59339 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#59340 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#59341,#59343); +#59341 = ( REPRESENTATION_RELATIONSHIP('','',#58873,#58859) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#59342) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#59342 = ITEM_DEFINED_TRANSFORMATION('','',#11,#58860); +#59343 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #59344); +#59344 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('105','266','',#58854,#59335,$); +#59345 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#59337)); +#59346 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#59347),#59801); +#59347 = MANIFOLD_SOLID_BREP('',#59348); +#59348 = CLOSED_SHELL('',(#59349,#59389,#59422,#59455,#59488,#59539, + #59556,#59580,#59611,#59628,#59652,#59677,#59702,#59719,#59737, + #59755,#59779,#59790)); +#59349 = ADVANCED_FACE('',(#59350),#59384,.F.); +#59350 = FACE_BOUND('',#59351,.F.); +#59351 = EDGE_LOOP('',(#59352,#59362,#59370,#59378)); +#59352 = ORIENTED_EDGE('',*,*,#59353,.F.); +#59353 = EDGE_CURVE('',#59354,#59356,#59358,.T.); +#59354 = VERTEX_POINT('',#59355); +#59355 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,5.E-02)); +#59356 = VERTEX_POINT('',#59357); +#59357 = CARTESIAN_POINT('',(0.95,-6.938893903907E-18,5.E-02)); +#59358 = LINE('',#59359,#59360); +#59359 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,5.E-02)); +#59360 = VECTOR('',#59361,1.); +#59361 = DIRECTION('',(1.,0.,-0.)); +#59362 = ORIENTED_EDGE('',*,*,#59363,.T.); +#59363 = EDGE_CURVE('',#59354,#59364,#59366,.T.); +#59364 = VERTEX_POINT('',#59365); +#59365 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,0.45)); +#59366 = LINE('',#59367,#59368); +#59367 = CARTESIAN_POINT('',(0.75,0.,0.)); +#59368 = VECTOR('',#59369,1.); +#59369 = DIRECTION('',(0.,0.,1.)); +#59370 = ORIENTED_EDGE('',*,*,#59371,.T.); +#59371 = EDGE_CURVE('',#59364,#59372,#59374,.T.); +#59372 = VERTEX_POINT('',#59373); +#59373 = CARTESIAN_POINT('',(0.95,-6.938893903907E-18,0.45)); +#59374 = LINE('',#59375,#59376); +#59375 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,0.45)); +#59376 = VECTOR('',#59377,1.); +#59377 = DIRECTION('',(1.,0.,-0.)); +#59378 = ORIENTED_EDGE('',*,*,#59379,.F.); +#59379 = EDGE_CURVE('',#59356,#59372,#59380,.T.); +#59380 = LINE('',#59381,#59382); +#59381 = CARTESIAN_POINT('',(0.95,-6.938893903907E-18,0.)); +#59382 = VECTOR('',#59383,1.); +#59383 = DIRECTION('',(0.,0.,1.)); +#59384 = PLANE('',#59385); +#59385 = AXIS2_PLACEMENT_3D('',#59386,#59387,#59388); +#59386 = CARTESIAN_POINT('',(0.,0.,0.)); +#59387 = DIRECTION('',(-0.,1.,0.)); +#59388 = DIRECTION('',(0.,0.,1.)); +#59389 = ADVANCED_FACE('',(#59390),#59417,.T.); +#59390 = FACE_BOUND('',#59391,.T.); +#59391 = EDGE_LOOP('',(#59392,#59401,#59409,#59416)); +#59392 = ORIENTED_EDGE('',*,*,#59393,.T.); +#59393 = EDGE_CURVE('',#59354,#59394,#59396,.T.); +#59394 = VERTEX_POINT('',#59395); +#59395 = CARTESIAN_POINT('',(0.75,5.E-02,-3.469446951954E-18)); +#59396 = CIRCLE('',#59397,5.E-02); +#59397 = AXIS2_PLACEMENT_3D('',#59398,#59399,#59400); +#59398 = CARTESIAN_POINT('',(0.75,5.E-02,5.E-02)); +#59399 = DIRECTION('',(1.,0.,0.)); +#59400 = DIRECTION('',(0.,-1.,0.)); +#59401 = ORIENTED_EDGE('',*,*,#59402,.T.); +#59402 = EDGE_CURVE('',#59394,#59403,#59405,.T.); +#59403 = VERTEX_POINT('',#59404); +#59404 = CARTESIAN_POINT('',(0.95,5.E-02,0.)); +#59405 = LINE('',#59406,#59407); +#59406 = CARTESIAN_POINT('',(0.,5.E-02,-6.938893903907E-18)); +#59407 = VECTOR('',#59408,1.); +#59408 = DIRECTION('',(1.,0.,-0.)); +#59409 = ORIENTED_EDGE('',*,*,#59410,.T.); +#59410 = EDGE_CURVE('',#59403,#59356,#59411,.T.); +#59411 = CIRCLE('',#59412,5.E-02); +#59412 = AXIS2_PLACEMENT_3D('',#59413,#59414,#59415); +#59413 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#59414 = DIRECTION('',(-1.,-6.123233995737E-17,0.)); +#59415 = DIRECTION('',(6.123233995737E-17,-1.,-0.)); +#59416 = ORIENTED_EDGE('',*,*,#59353,.F.); +#59417 = CYLINDRICAL_SURFACE('',#59418,5.E-02); +#59418 = AXIS2_PLACEMENT_3D('',#59419,#59420,#59421); +#59419 = CARTESIAN_POINT('',(0.,5.E-02,5.E-02)); +#59420 = DIRECTION('',(1.,0.,-0.)); +#59421 = DIRECTION('',(0.,-1.,0.)); +#59422 = ADVANCED_FACE('',(#59423),#59450,.T.); +#59423 = FACE_BOUND('',#59424,.T.); +#59424 = EDGE_LOOP('',(#59425,#59434,#59435,#59444)); +#59425 = ORIENTED_EDGE('',*,*,#59426,.T.); +#59426 = EDGE_CURVE('',#59427,#59372,#59429,.T.); +#59427 = VERTEX_POINT('',#59428); +#59428 = CARTESIAN_POINT('',(1.,5.E-02,0.45)); +#59429 = CIRCLE('',#59430,5.E-02); +#59430 = AXIS2_PLACEMENT_3D('',#59431,#59432,#59433); +#59431 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#59432 = DIRECTION('',(0.,0.,-1.)); +#59433 = DIRECTION('',(1.,0.,0.)); +#59434 = ORIENTED_EDGE('',*,*,#59379,.F.); +#59435 = ORIENTED_EDGE('',*,*,#59436,.F.); +#59436 = EDGE_CURVE('',#59437,#59356,#59439,.T.); +#59437 = VERTEX_POINT('',#59438); +#59438 = CARTESIAN_POINT('',(1.,5.E-02,5.E-02)); +#59439 = CIRCLE('',#59440,5.E-02); +#59440 = AXIS2_PLACEMENT_3D('',#59441,#59442,#59443); +#59441 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#59442 = DIRECTION('',(0.,0.,-1.)); +#59443 = DIRECTION('',(1.,0.,0.)); +#59444 = ORIENTED_EDGE('',*,*,#59445,.T.); +#59445 = EDGE_CURVE('',#59437,#59427,#59446,.T.); +#59446 = LINE('',#59447,#59448); +#59447 = CARTESIAN_POINT('',(1.,5.E-02,0.)); +#59448 = VECTOR('',#59449,1.); +#59449 = DIRECTION('',(0.,0.,1.)); +#59450 = CYLINDRICAL_SURFACE('',#59451,5.E-02); +#59451 = AXIS2_PLACEMENT_3D('',#59452,#59453,#59454); +#59452 = CARTESIAN_POINT('',(0.95,5.E-02,0.)); +#59453 = DIRECTION('',(0.,0.,1.)); +#59454 = DIRECTION('',(1.,0.,-0.)); +#59455 = ADVANCED_FACE('',(#59456),#59483,.T.); +#59456 = FACE_BOUND('',#59457,.T.); +#59457 = EDGE_LOOP('',(#59458,#59459,#59468,#59476)); +#59458 = ORIENTED_EDGE('',*,*,#59371,.T.); +#59459 = ORIENTED_EDGE('',*,*,#59460,.F.); +#59460 = EDGE_CURVE('',#59461,#59372,#59463,.T.); +#59461 = VERTEX_POINT('',#59462); +#59462 = CARTESIAN_POINT('',(0.95,5.E-02,0.5)); +#59463 = CIRCLE('',#59464,5.E-02); +#59464 = AXIS2_PLACEMENT_3D('',#59465,#59466,#59467); +#59465 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#59466 = DIRECTION('',(1.,6.123233995737E-17,0.)); +#59467 = DIRECTION('',(6.123233995737E-17,-1.,0.)); +#59468 = ORIENTED_EDGE('',*,*,#59469,.F.); +#59469 = EDGE_CURVE('',#59470,#59461,#59472,.T.); +#59470 = VERTEX_POINT('',#59471); +#59471 = CARTESIAN_POINT('',(0.75,5.E-02,0.5)); +#59472 = LINE('',#59473,#59474); +#59473 = CARTESIAN_POINT('',(0.,5.E-02,0.5)); +#59474 = VECTOR('',#59475,1.); +#59475 = DIRECTION('',(1.,0.,-0.)); +#59476 = ORIENTED_EDGE('',*,*,#59477,.T.); +#59477 = EDGE_CURVE('',#59470,#59364,#59478,.T.); +#59478 = CIRCLE('',#59479,5.E-02); +#59479 = AXIS2_PLACEMENT_3D('',#59480,#59481,#59482); +#59480 = CARTESIAN_POINT('',(0.75,5.E-02,0.45)); +#59481 = DIRECTION('',(1.,0.,0.)); +#59482 = DIRECTION('',(0.,-1.,0.)); +#59483 = CYLINDRICAL_SURFACE('',#59484,5.E-02); +#59484 = AXIS2_PLACEMENT_3D('',#59485,#59486,#59487); +#59485 = CARTESIAN_POINT('',(0.,5.E-02,0.45)); +#59486 = DIRECTION('',(1.,0.,-0.)); +#59487 = DIRECTION('',(0.,-1.,0.)); +#59488 = ADVANCED_FACE('',(#59489),#59534,.F.); +#59489 = FACE_BOUND('',#59490,.F.); +#59490 = EDGE_LOOP('',(#59491,#59492,#59493,#59501,#59510,#59518,#59527, + #59533)); +#59491 = ORIENTED_EDGE('',*,*,#59363,.F.); +#59492 = ORIENTED_EDGE('',*,*,#59393,.T.); +#59493 = ORIENTED_EDGE('',*,*,#59494,.T.); +#59494 = EDGE_CURVE('',#59394,#59495,#59497,.T.); +#59495 = VERTEX_POINT('',#59496); +#59496 = CARTESIAN_POINT('',(0.75,0.45,-3.469446951954E-18)); +#59497 = LINE('',#59498,#59499); +#59498 = CARTESIAN_POINT('',(0.75,0.,0.)); +#59499 = VECTOR('',#59500,1.); +#59500 = DIRECTION('',(-0.,1.,0.)); +#59501 = ORIENTED_EDGE('',*,*,#59502,.T.); +#59502 = EDGE_CURVE('',#59495,#59503,#59505,.T.); +#59503 = VERTEX_POINT('',#59504); +#59504 = CARTESIAN_POINT('',(0.75,0.5,5.E-02)); +#59505 = CIRCLE('',#59506,5.E-02); +#59506 = AXIS2_PLACEMENT_3D('',#59507,#59508,#59509); +#59507 = CARTESIAN_POINT('',(0.75,0.45,5.E-02)); +#59508 = DIRECTION('',(1.,0.,-0.)); +#59509 = DIRECTION('',(0.,1.,0.)); +#59510 = ORIENTED_EDGE('',*,*,#59511,.T.); +#59511 = EDGE_CURVE('',#59503,#59512,#59514,.T.); +#59512 = VERTEX_POINT('',#59513); +#59513 = CARTESIAN_POINT('',(0.75,0.5,0.45)); +#59514 = LINE('',#59515,#59516); +#59515 = CARTESIAN_POINT('',(0.75,0.5,0.)); +#59516 = VECTOR('',#59517,1.); +#59517 = DIRECTION('',(0.,0.,1.)); +#59518 = ORIENTED_EDGE('',*,*,#59519,.T.); +#59519 = EDGE_CURVE('',#59512,#59520,#59522,.T.); +#59520 = VERTEX_POINT('',#59521); +#59521 = CARTESIAN_POINT('',(0.75,0.45,0.5)); +#59522 = CIRCLE('',#59523,5.E-02); +#59523 = AXIS2_PLACEMENT_3D('',#59524,#59525,#59526); +#59524 = CARTESIAN_POINT('',(0.75,0.45,0.45)); +#59525 = DIRECTION('',(1.,0.,-0.)); +#59526 = DIRECTION('',(0.,1.,0.)); +#59527 = ORIENTED_EDGE('',*,*,#59528,.F.); +#59528 = EDGE_CURVE('',#59470,#59520,#59529,.T.); +#59529 = LINE('',#59530,#59531); +#59530 = CARTESIAN_POINT('',(0.75,0.,0.5)); +#59531 = VECTOR('',#59532,1.); +#59532 = DIRECTION('',(-0.,1.,0.)); +#59533 = ORIENTED_EDGE('',*,*,#59477,.T.); +#59534 = PLANE('',#59535); +#59535 = AXIS2_PLACEMENT_3D('',#59536,#59537,#59538); +#59536 = CARTESIAN_POINT('',(0.75,0.,0.)); +#59537 = DIRECTION('',(1.,0.,-0.)); +#59538 = DIRECTION('',(0.,0.,1.)); +#59539 = ADVANCED_FACE('',(#59540),#59551,.T.); +#59540 = FACE_BOUND('',#59541,.T.); +#59541 = EDGE_LOOP('',(#59542,#59543,#59544)); +#59542 = ORIENTED_EDGE('',*,*,#59436,.T.); +#59543 = ORIENTED_EDGE('',*,*,#59410,.F.); +#59544 = ORIENTED_EDGE('',*,*,#59545,.T.); +#59545 = EDGE_CURVE('',#59403,#59437,#59546,.T.); +#59546 = CIRCLE('',#59547,5.E-02); +#59547 = AXIS2_PLACEMENT_3D('',#59548,#59549,#59550); +#59548 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#59549 = DIRECTION('',(0.,-1.,0.)); +#59550 = DIRECTION('',(1.,0.,0.)); +#59551 = SPHERICAL_SURFACE('',#59552,5.E-02); +#59552 = AXIS2_PLACEMENT_3D('',#59553,#59554,#59555); +#59553 = CARTESIAN_POINT('',(0.95,5.E-02,5.E-02)); +#59554 = DIRECTION('',(0.,0.,1.)); +#59555 = DIRECTION('',(1.,0.,-0.)); +#59556 = ADVANCED_FACE('',(#59557),#59575,.F.); +#59557 = FACE_BOUND('',#59558,.F.); +#59558 = EDGE_LOOP('',(#59559,#59560,#59561,#59569)); +#59559 = ORIENTED_EDGE('',*,*,#59494,.F.); +#59560 = ORIENTED_EDGE('',*,*,#59402,.T.); +#59561 = ORIENTED_EDGE('',*,*,#59562,.T.); +#59562 = EDGE_CURVE('',#59403,#59563,#59565,.T.); +#59563 = VERTEX_POINT('',#59564); +#59564 = CARTESIAN_POINT('',(0.95,0.45,0.)); +#59565 = LINE('',#59566,#59567); +#59566 = CARTESIAN_POINT('',(0.95,0.,-6.938893903907E-18)); +#59567 = VECTOR('',#59568,1.); +#59568 = DIRECTION('',(-0.,1.,0.)); +#59569 = ORIENTED_EDGE('',*,*,#59570,.F.); +#59570 = EDGE_CURVE('',#59495,#59563,#59571,.T.); +#59571 = LINE('',#59572,#59573); +#59572 = CARTESIAN_POINT('',(0.,0.45,-6.938893903907E-18)); +#59573 = VECTOR('',#59574,1.); +#59574 = DIRECTION('',(1.,0.,-0.)); +#59575 = PLANE('',#59576); +#59576 = AXIS2_PLACEMENT_3D('',#59577,#59578,#59579); +#59577 = CARTESIAN_POINT('',(0.,0.,0.)); +#59578 = DIRECTION('',(0.,0.,1.)); +#59579 = DIRECTION('',(1.,0.,-0.)); +#59580 = ADVANCED_FACE('',(#59581),#59606,.T.); +#59581 = FACE_BOUND('',#59582,.T.); +#59582 = EDGE_LOOP('',(#59583,#59584,#59592,#59600)); +#59583 = ORIENTED_EDGE('',*,*,#59445,.F.); +#59584 = ORIENTED_EDGE('',*,*,#59585,.T.); +#59585 = EDGE_CURVE('',#59437,#59586,#59588,.T.); +#59586 = VERTEX_POINT('',#59587); +#59587 = CARTESIAN_POINT('',(1.,0.45,5.E-02)); +#59588 = LINE('',#59589,#59590); +#59589 = CARTESIAN_POINT('',(1.,0.,5.E-02)); +#59590 = VECTOR('',#59591,1.); +#59591 = DIRECTION('',(-0.,1.,0.)); +#59592 = ORIENTED_EDGE('',*,*,#59593,.T.); +#59593 = EDGE_CURVE('',#59586,#59594,#59596,.T.); +#59594 = VERTEX_POINT('',#59595); +#59595 = CARTESIAN_POINT('',(1.,0.45,0.45)); +#59596 = LINE('',#59597,#59598); +#59597 = CARTESIAN_POINT('',(1.,0.45,0.)); +#59598 = VECTOR('',#59599,1.); +#59599 = DIRECTION('',(0.,0.,1.)); +#59600 = ORIENTED_EDGE('',*,*,#59601,.F.); +#59601 = EDGE_CURVE('',#59427,#59594,#59602,.T.); +#59602 = LINE('',#59603,#59604); +#59603 = CARTESIAN_POINT('',(1.,0.,0.45)); +#59604 = VECTOR('',#59605,1.); +#59605 = DIRECTION('',(0.,1.,0.)); +#59606 = PLANE('',#59607); +#59607 = AXIS2_PLACEMENT_3D('',#59608,#59609,#59610); +#59608 = CARTESIAN_POINT('',(1.,0.,0.)); +#59609 = DIRECTION('',(1.,0.,-0.)); +#59610 = DIRECTION('',(0.,0.,1.)); +#59611 = ADVANCED_FACE('',(#59612),#59623,.T.); +#59612 = FACE_BOUND('',#59613,.T.); +#59613 = EDGE_LOOP('',(#59614,#59621,#59622)); +#59614 = ORIENTED_EDGE('',*,*,#59615,.F.); +#59615 = EDGE_CURVE('',#59461,#59427,#59616,.T.); +#59616 = CIRCLE('',#59617,5.E-02); +#59617 = AXIS2_PLACEMENT_3D('',#59618,#59619,#59620); +#59618 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#59619 = DIRECTION('',(-0.,1.,0.)); +#59620 = DIRECTION('',(1.,0.,0.)); +#59621 = ORIENTED_EDGE('',*,*,#59460,.T.); +#59622 = ORIENTED_EDGE('',*,*,#59426,.F.); +#59623 = SPHERICAL_SURFACE('',#59624,5.E-02); +#59624 = AXIS2_PLACEMENT_3D('',#59625,#59626,#59627); +#59625 = CARTESIAN_POINT('',(0.95,5.E-02,0.45)); +#59626 = DIRECTION('',(-0.,-0.,-1.)); +#59627 = DIRECTION('',(1.,0.,0.)); +#59628 = ADVANCED_FACE('',(#59629),#59647,.T.); +#59629 = FACE_BOUND('',#59630,.T.); +#59630 = EDGE_LOOP('',(#59631,#59632,#59633,#59641)); +#59631 = ORIENTED_EDGE('',*,*,#59528,.F.); +#59632 = ORIENTED_EDGE('',*,*,#59469,.T.); +#59633 = ORIENTED_EDGE('',*,*,#59634,.T.); +#59634 = EDGE_CURVE('',#59461,#59635,#59637,.T.); +#59635 = VERTEX_POINT('',#59636); +#59636 = CARTESIAN_POINT('',(0.95,0.45,0.5)); +#59637 = LINE('',#59638,#59639); +#59638 = CARTESIAN_POINT('',(0.95,0.,0.5)); +#59639 = VECTOR('',#59640,1.); +#59640 = DIRECTION('',(0.,1.,0.)); +#59641 = ORIENTED_EDGE('',*,*,#59642,.F.); +#59642 = EDGE_CURVE('',#59520,#59635,#59643,.T.); +#59643 = LINE('',#59644,#59645); +#59644 = CARTESIAN_POINT('',(0.,0.45,0.5)); +#59645 = VECTOR('',#59646,1.); +#59646 = DIRECTION('',(1.,0.,-0.)); +#59647 = PLANE('',#59648); +#59648 = AXIS2_PLACEMENT_3D('',#59649,#59650,#59651); +#59649 = CARTESIAN_POINT('',(0.,0.,0.5)); +#59650 = DIRECTION('',(0.,0.,1.)); +#59651 = DIRECTION('',(1.,0.,-0.)); +#59652 = ADVANCED_FACE('',(#59653),#59672,.T.); +#59653 = FACE_BOUND('',#59654,.T.); +#59654 = EDGE_LOOP('',(#59655,#59663,#59670,#59671)); +#59655 = ORIENTED_EDGE('',*,*,#59656,.T.); +#59656 = EDGE_CURVE('',#59503,#59657,#59659,.T.); +#59657 = VERTEX_POINT('',#59658); +#59658 = CARTESIAN_POINT('',(0.95,0.5,5.E-02)); +#59659 = LINE('',#59660,#59661); +#59660 = CARTESIAN_POINT('',(0.,0.5,5.E-02)); +#59661 = VECTOR('',#59662,1.); +#59662 = DIRECTION('',(1.,0.,-0.)); +#59663 = ORIENTED_EDGE('',*,*,#59664,.F.); +#59664 = EDGE_CURVE('',#59563,#59657,#59665,.T.); +#59665 = CIRCLE('',#59666,5.E-02); +#59666 = AXIS2_PLACEMENT_3D('',#59667,#59668,#59669); +#59667 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#59668 = DIRECTION('',(1.,-6.123233995737E-17,0.)); +#59669 = DIRECTION('',(6.123233995737E-17,1.,0.)); +#59670 = ORIENTED_EDGE('',*,*,#59570,.F.); +#59671 = ORIENTED_EDGE('',*,*,#59502,.T.); +#59672 = CYLINDRICAL_SURFACE('',#59673,5.E-02); +#59673 = AXIS2_PLACEMENT_3D('',#59674,#59675,#59676); +#59674 = CARTESIAN_POINT('',(0.,0.45,5.E-02)); +#59675 = DIRECTION('',(1.,0.,-0.)); +#59676 = DIRECTION('',(0.,1.,0.)); +#59677 = ADVANCED_FACE('',(#59678),#59697,.T.); +#59678 = FACE_BOUND('',#59679,.T.); +#59679 = EDGE_LOOP('',(#59680,#59688,#59689,#59690)); +#59680 = ORIENTED_EDGE('',*,*,#59681,.F.); +#59681 = EDGE_CURVE('',#59512,#59682,#59684,.T.); +#59682 = VERTEX_POINT('',#59683); +#59683 = CARTESIAN_POINT('',(0.95,0.5,0.45)); +#59684 = LINE('',#59685,#59686); +#59685 = CARTESIAN_POINT('',(0.,0.5,0.45)); +#59686 = VECTOR('',#59687,1.); +#59687 = DIRECTION('',(1.,0.,-0.)); +#59688 = ORIENTED_EDGE('',*,*,#59519,.T.); +#59689 = ORIENTED_EDGE('',*,*,#59642,.T.); +#59690 = ORIENTED_EDGE('',*,*,#59691,.F.); +#59691 = EDGE_CURVE('',#59682,#59635,#59692,.T.); +#59692 = CIRCLE('',#59693,5.E-02); +#59693 = AXIS2_PLACEMENT_3D('',#59694,#59695,#59696); +#59694 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#59695 = DIRECTION('',(1.,0.,-6.123233995737E-17)); +#59696 = DIRECTION('',(6.123233995737E-17,0.,1.)); +#59697 = CYLINDRICAL_SURFACE('',#59698,5.E-02); +#59698 = AXIS2_PLACEMENT_3D('',#59699,#59700,#59701); +#59699 = CARTESIAN_POINT('',(0.,0.45,0.45)); +#59700 = DIRECTION('',(1.,0.,-0.)); +#59701 = DIRECTION('',(0.,1.,0.)); +#59702 = ADVANCED_FACE('',(#59703),#59714,.T.); +#59703 = FACE_BOUND('',#59704,.T.); +#59704 = EDGE_LOOP('',(#59705,#59706,#59707,#59708)); +#59705 = ORIENTED_EDGE('',*,*,#59656,.F.); +#59706 = ORIENTED_EDGE('',*,*,#59511,.T.); +#59707 = ORIENTED_EDGE('',*,*,#59681,.T.); +#59708 = ORIENTED_EDGE('',*,*,#59709,.F.); +#59709 = EDGE_CURVE('',#59657,#59682,#59710,.T.); +#59710 = LINE('',#59711,#59712); +#59711 = CARTESIAN_POINT('',(0.95,0.5,0.)); +#59712 = VECTOR('',#59713,1.); +#59713 = DIRECTION('',(0.,0.,1.)); +#59714 = PLANE('',#59715); +#59715 = AXIS2_PLACEMENT_3D('',#59716,#59717,#59718); +#59716 = CARTESIAN_POINT('',(0.,0.5,0.)); +#59717 = DIRECTION('',(-0.,1.,0.)); +#59718 = DIRECTION('',(0.,0.,1.)); +#59719 = ADVANCED_FACE('',(#59720),#59732,.T.); +#59720 = FACE_BOUND('',#59721,.T.); +#59721 = EDGE_LOOP('',(#59722,#59723,#59724,#59731)); +#59722 = ORIENTED_EDGE('',*,*,#59545,.F.); +#59723 = ORIENTED_EDGE('',*,*,#59562,.T.); +#59724 = ORIENTED_EDGE('',*,*,#59725,.T.); +#59725 = EDGE_CURVE('',#59563,#59586,#59726,.T.); +#59726 = CIRCLE('',#59727,5.E-02); +#59727 = AXIS2_PLACEMENT_3D('',#59728,#59729,#59730); +#59728 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#59729 = DIRECTION('',(0.,-1.,0.)); +#59730 = DIRECTION('',(1.,0.,0.)); +#59731 = ORIENTED_EDGE('',*,*,#59585,.F.); +#59732 = CYLINDRICAL_SURFACE('',#59733,5.E-02); +#59733 = AXIS2_PLACEMENT_3D('',#59734,#59735,#59736); +#59734 = CARTESIAN_POINT('',(0.95,0.,5.E-02)); +#59735 = DIRECTION('',(-0.,1.,0.)); +#59736 = DIRECTION('',(1.,0.,-0.)); +#59737 = ADVANCED_FACE('',(#59738),#59750,.T.); +#59738 = FACE_BOUND('',#59739,.T.); +#59739 = EDGE_LOOP('',(#59740,#59741,#59748,#59749)); +#59740 = ORIENTED_EDGE('',*,*,#59601,.T.); +#59741 = ORIENTED_EDGE('',*,*,#59742,.T.); +#59742 = EDGE_CURVE('',#59594,#59635,#59743,.T.); +#59743 = CIRCLE('',#59744,5.E-02); +#59744 = AXIS2_PLACEMENT_3D('',#59745,#59746,#59747); +#59745 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#59746 = DIRECTION('',(0.,-1.,-0.)); +#59747 = DIRECTION('',(1.,0.,0.)); +#59748 = ORIENTED_EDGE('',*,*,#59634,.F.); +#59749 = ORIENTED_EDGE('',*,*,#59615,.T.); +#59750 = CYLINDRICAL_SURFACE('',#59751,5.E-02); +#59751 = AXIS2_PLACEMENT_3D('',#59752,#59753,#59754); +#59752 = CARTESIAN_POINT('',(0.95,0.,0.45)); +#59753 = DIRECTION('',(0.,1.,0.)); +#59754 = DIRECTION('',(1.,0.,-0.)); +#59755 = ADVANCED_FACE('',(#59756),#59774,.T.); +#59756 = FACE_BOUND('',#59757,.T.); +#59757 = EDGE_LOOP('',(#59758,#59759,#59766,#59767)); +#59758 = ORIENTED_EDGE('',*,*,#59593,.F.); +#59759 = ORIENTED_EDGE('',*,*,#59760,.T.); +#59760 = EDGE_CURVE('',#59586,#59657,#59761,.T.); +#59761 = CIRCLE('',#59762,5.E-02); +#59762 = AXIS2_PLACEMENT_3D('',#59763,#59764,#59765); +#59763 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#59764 = DIRECTION('',(0.,0.,1.)); +#59765 = DIRECTION('',(1.,0.,-0.)); +#59766 = ORIENTED_EDGE('',*,*,#59709,.T.); +#59767 = ORIENTED_EDGE('',*,*,#59768,.T.); +#59768 = EDGE_CURVE('',#59682,#59594,#59769,.T.); +#59769 = CIRCLE('',#59770,5.E-02); +#59770 = AXIS2_PLACEMENT_3D('',#59771,#59772,#59773); +#59771 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#59772 = DIRECTION('',(0.,0.,-1.)); +#59773 = DIRECTION('',(1.,0.,0.)); +#59774 = CYLINDRICAL_SURFACE('',#59775,5.E-02); +#59775 = AXIS2_PLACEMENT_3D('',#59776,#59777,#59778); +#59776 = CARTESIAN_POINT('',(0.95,0.45,0.)); +#59777 = DIRECTION('',(0.,0.,1.)); +#59778 = DIRECTION('',(1.,0.,-0.)); +#59779 = ADVANCED_FACE('',(#59780),#59785,.T.); +#59780 = FACE_BOUND('',#59781,.T.); +#59781 = EDGE_LOOP('',(#59782,#59783,#59784)); +#59782 = ORIENTED_EDGE('',*,*,#59725,.F.); +#59783 = ORIENTED_EDGE('',*,*,#59664,.T.); +#59784 = ORIENTED_EDGE('',*,*,#59760,.F.); +#59785 = SPHERICAL_SURFACE('',#59786,5.E-02); +#59786 = AXIS2_PLACEMENT_3D('',#59787,#59788,#59789); +#59787 = CARTESIAN_POINT('',(0.95,0.45,5.E-02)); +#59788 = DIRECTION('',(0.,0.,1.)); +#59789 = DIRECTION('',(1.,0.,-0.)); +#59790 = ADVANCED_FACE('',(#59791),#59796,.T.); +#59791 = FACE_BOUND('',#59792,.T.); +#59792 = EDGE_LOOP('',(#59793,#59794,#59795)); +#59793 = ORIENTED_EDGE('',*,*,#59768,.F.); +#59794 = ORIENTED_EDGE('',*,*,#59691,.T.); +#59795 = ORIENTED_EDGE('',*,*,#59742,.F.); +#59796 = SPHERICAL_SURFACE('',#59797,5.E-02); +#59797 = AXIS2_PLACEMENT_3D('',#59798,#59799,#59800); +#59798 = CARTESIAN_POINT('',(0.95,0.45,0.45)); +#59799 = DIRECTION('',(0.,-1.,-0.)); +#59800 = DIRECTION('',(1.,0.,0.)); +#59801 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#59805)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#59802,#59803,#59804)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#59802 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#59803 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#59804 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#59805 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#59802, + 'distance_accuracy_value','confusion accuracy'); +#59806 = SHAPE_DEFINITION_REPRESENTATION(#59807,#59346); +#59807 = PRODUCT_DEFINITION_SHAPE('','',#59808); +#59808 = PRODUCT_DEFINITION('design','',#59809,#59812); +#59809 = PRODUCT_DEFINITION_FORMATION('','',#59810); +#59810 = PRODUCT('Open CASCADE STEP translator 6.8 54.1.2', + 'Open CASCADE STEP translator 6.8 54.1.2','',(#59811)); +#59811 = PRODUCT_CONTEXT('',#2,'mechanical'); +#59812 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#59813 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#59814,#59816); +#59814 = ( REPRESENTATION_RELATIONSHIP('','',#59346,#58859) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#59815) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#59815 = ITEM_DEFINED_TRANSFORMATION('','',#11,#58864); +#59816 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #59817); +#59817 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('106','267','',#58854,#59808,$); +#59818 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#59810)); +#59819 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#59820,#59822); +#59820 = ( REPRESENTATION_RELATIONSHIP('','',#58859,#58838) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#59821) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#59821 = ITEM_DEFINED_TRANSFORMATION('','',#11,#58839); +#59822 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #59823); +#59823 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('107','268','',#58833,#58854,$); +#59824 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#58856)); +#59825 = SHAPE_DEFINITION_REPRESENTATION(#59826,#59832); +#59826 = PRODUCT_DEFINITION_SHAPE('','',#59827); +#59827 = PRODUCT_DEFINITION('design','',#59828,#59831); +#59828 = PRODUCT_DEFINITION_FORMATION('','',#59829); +#59829 = PRODUCT('Mid_Body','Mid_Body','',(#59830)); +#59830 = PRODUCT_CONTEXT('',#2,'mechanical'); +#59831 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#59832 = SHAPE_REPRESENTATION('',(#11,#59833),#59837); +#59833 = AXIS2_PLACEMENT_3D('',#59834,#59835,#59836); +#59834 = CARTESIAN_POINT('',(0.,0.,0.)); +#59835 = DIRECTION('',(0.,0.,1.)); +#59836 = DIRECTION('',(1.,0.,0.)); +#59837 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#59841)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#59838,#59839,#59840)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#59838 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#59839 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#59840 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#59841 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#59838, + 'distance_accuracy_value','confusion accuracy'); +#59842 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#59843),#60133); +#59843 = MANIFOLD_SOLID_BREP('',#59844); +#59844 = CLOSED_SHELL('',(#59845,#59885,#59918,#59977,#60002,#60053, + #60070,#60087,#60104,#60121)); +#59845 = ADVANCED_FACE('',(#59846),#59880,.F.); +#59846 = FACE_BOUND('',#59847,.F.); +#59847 = EDGE_LOOP('',(#59848,#59858,#59866,#59874)); +#59848 = ORIENTED_EDGE('',*,*,#59849,.F.); +#59849 = EDGE_CURVE('',#59850,#59852,#59854,.T.); +#59850 = VERTEX_POINT('',#59851); +#59851 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,5.E-02)); +#59852 = VERTEX_POINT('',#59853); +#59853 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,5.E-02)); +#59854 = LINE('',#59855,#59856); +#59855 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,5.E-02)); +#59856 = VECTOR('',#59857,1.); +#59857 = DIRECTION('',(1.,0.,-0.)); +#59858 = ORIENTED_EDGE('',*,*,#59859,.T.); +#59859 = EDGE_CURVE('',#59850,#59860,#59862,.T.); +#59860 = VERTEX_POINT('',#59861); +#59861 = CARTESIAN_POINT('',(0.25,-3.469446951954E-18,0.45)); +#59862 = LINE('',#59863,#59864); +#59863 = CARTESIAN_POINT('',(0.25,0.,0.)); +#59864 = VECTOR('',#59865,1.); +#59865 = DIRECTION('',(0.,0.,1.)); +#59866 = ORIENTED_EDGE('',*,*,#59867,.T.); +#59867 = EDGE_CURVE('',#59860,#59868,#59870,.T.); +#59868 = VERTEX_POINT('',#59869); +#59869 = CARTESIAN_POINT('',(0.75,-3.469446951954E-18,0.45)); +#59870 = LINE('',#59871,#59872); +#59871 = CARTESIAN_POINT('',(0.,-6.938893903907E-18,0.45)); +#59872 = VECTOR('',#59873,1.); +#59873 = DIRECTION('',(1.,0.,-0.)); +#59874 = ORIENTED_EDGE('',*,*,#59875,.F.); +#59875 = EDGE_CURVE('',#59852,#59868,#59876,.T.); +#59876 = LINE('',#59877,#59878); +#59877 = CARTESIAN_POINT('',(0.75,0.,0.)); +#59878 = VECTOR('',#59879,1.); +#59879 = DIRECTION('',(0.,0.,1.)); +#59880 = PLANE('',#59881); +#59881 = AXIS2_PLACEMENT_3D('',#59882,#59883,#59884); +#59882 = CARTESIAN_POINT('',(0.,0.,0.)); +#59883 = DIRECTION('',(-0.,1.,0.)); +#59884 = DIRECTION('',(0.,0.,1.)); +#59885 = ADVANCED_FACE('',(#59886),#59913,.T.); +#59886 = FACE_BOUND('',#59887,.T.); +#59887 = EDGE_LOOP('',(#59888,#59889,#59898,#59906)); +#59888 = ORIENTED_EDGE('',*,*,#59849,.F.); +#59889 = ORIENTED_EDGE('',*,*,#59890,.T.); +#59890 = EDGE_CURVE('',#59850,#59891,#59893,.T.); +#59891 = VERTEX_POINT('',#59892); +#59892 = CARTESIAN_POINT('',(0.25,5.E-02,-3.469446951954E-18)); +#59893 = CIRCLE('',#59894,5.E-02); +#59894 = AXIS2_PLACEMENT_3D('',#59895,#59896,#59897); +#59895 = CARTESIAN_POINT('',(0.25,5.E-02,5.E-02)); +#59896 = DIRECTION('',(1.,0.,0.)); +#59897 = DIRECTION('',(0.,-1.,0.)); +#59898 = ORIENTED_EDGE('',*,*,#59899,.T.); +#59899 = EDGE_CURVE('',#59891,#59900,#59902,.T.); +#59900 = VERTEX_POINT('',#59901); +#59901 = CARTESIAN_POINT('',(0.75,5.E-02,-3.469446951954E-18)); +#59902 = LINE('',#59903,#59904); +#59903 = CARTESIAN_POINT('',(0.,5.E-02,-6.938893903907E-18)); +#59904 = VECTOR('',#59905,1.); +#59905 = DIRECTION('',(1.,0.,-0.)); +#59906 = ORIENTED_EDGE('',*,*,#59907,.F.); +#59907 = EDGE_CURVE('',#59852,#59900,#59908,.T.); +#59908 = CIRCLE('',#59909,5.E-02); +#59909 = AXIS2_PLACEMENT_3D('',#59910,#59911,#59912); +#59910 = CARTESIAN_POINT('',(0.75,5.E-02,5.E-02)); +#59911 = DIRECTION('',(1.,0.,0.)); +#59912 = DIRECTION('',(0.,-1.,0.)); +#59913 = CYLINDRICAL_SURFACE('',#59914,5.E-02); +#59914 = AXIS2_PLACEMENT_3D('',#59915,#59916,#59917); +#59915 = CARTESIAN_POINT('',(0.,5.E-02,5.E-02)); +#59916 = DIRECTION('',(1.,0.,-0.)); +#59917 = DIRECTION('',(0.,-1.,0.)); +#59918 = ADVANCED_FACE('',(#59919),#59972,.T.); +#59919 = FACE_BOUND('',#59920,.T.); +#59920 = EDGE_LOOP('',(#59921,#59922,#59923,#59931,#59940,#59948,#59957, + #59965)); +#59921 = ORIENTED_EDGE('',*,*,#59875,.F.); +#59922 = ORIENTED_EDGE('',*,*,#59907,.T.); +#59923 = ORIENTED_EDGE('',*,*,#59924,.T.); +#59924 = EDGE_CURVE('',#59900,#59925,#59927,.T.); +#59925 = VERTEX_POINT('',#59926); +#59926 = CARTESIAN_POINT('',(0.75,0.45,-3.469446951954E-18)); +#59927 = LINE('',#59928,#59929); +#59928 = CARTESIAN_POINT('',(0.75,0.,0.)); +#59929 = VECTOR('',#59930,1.); +#59930 = DIRECTION('',(-0.,1.,0.)); +#59931 = ORIENTED_EDGE('',*,*,#59932,.T.); +#59932 = EDGE_CURVE('',#59925,#59933,#59935,.T.); +#59933 = VERTEX_POINT('',#59934); +#59934 = CARTESIAN_POINT('',(0.75,0.5,5.E-02)); +#59935 = CIRCLE('',#59936,5.E-02); +#59936 = AXIS2_PLACEMENT_3D('',#59937,#59938,#59939); +#59937 = CARTESIAN_POINT('',(0.75,0.45,5.E-02)); +#59938 = DIRECTION('',(1.,0.,-0.)); +#59939 = DIRECTION('',(0.,1.,0.)); +#59940 = ORIENTED_EDGE('',*,*,#59941,.T.); +#59941 = EDGE_CURVE('',#59933,#59942,#59944,.T.); +#59942 = VERTEX_POINT('',#59943); +#59943 = CARTESIAN_POINT('',(0.75,0.5,0.45)); +#59944 = LINE('',#59945,#59946); +#59945 = CARTESIAN_POINT('',(0.75,0.5,0.)); +#59946 = VECTOR('',#59947,1.); +#59947 = DIRECTION('',(0.,0.,1.)); +#59948 = ORIENTED_EDGE('',*,*,#59949,.T.); +#59949 = EDGE_CURVE('',#59942,#59950,#59952,.T.); +#59950 = VERTEX_POINT('',#59951); +#59951 = CARTESIAN_POINT('',(0.75,0.45,0.5)); +#59952 = CIRCLE('',#59953,5.E-02); +#59953 = AXIS2_PLACEMENT_3D('',#59954,#59955,#59956); +#59954 = CARTESIAN_POINT('',(0.75,0.45,0.45)); +#59955 = DIRECTION('',(1.,0.,-0.)); +#59956 = DIRECTION('',(0.,1.,0.)); +#59957 = ORIENTED_EDGE('',*,*,#59958,.F.); +#59958 = EDGE_CURVE('',#59959,#59950,#59961,.T.); +#59959 = VERTEX_POINT('',#59960); +#59960 = CARTESIAN_POINT('',(0.75,5.E-02,0.5)); +#59961 = LINE('',#59962,#59963); +#59962 = CARTESIAN_POINT('',(0.75,0.,0.5)); +#59963 = VECTOR('',#59964,1.); +#59964 = DIRECTION('',(-0.,1.,0.)); +#59965 = ORIENTED_EDGE('',*,*,#59966,.T.); +#59966 = EDGE_CURVE('',#59959,#59868,#59967,.T.); +#59967 = CIRCLE('',#59968,5.E-02); +#59968 = AXIS2_PLACEMENT_3D('',#59969,#59970,#59971); +#59969 = CARTESIAN_POINT('',(0.75,5.E-02,0.45)); +#59970 = DIRECTION('',(1.,0.,0.)); +#59971 = DIRECTION('',(0.,-1.,0.)); +#59972 = PLANE('',#59973); +#59973 = AXIS2_PLACEMENT_3D('',#59974,#59975,#59976); +#59974 = CARTESIAN_POINT('',(0.75,0.,0.)); +#59975 = DIRECTION('',(1.,0.,-0.)); +#59976 = DIRECTION('',(0.,0.,1.)); +#59977 = ADVANCED_FACE('',(#59978),#59997,.T.); +#59978 = FACE_BOUND('',#59979,.T.); +#59979 = EDGE_LOOP('',(#59980,#59981,#59982,#59990)); +#59980 = ORIENTED_EDGE('',*,*,#59867,.T.); +#59981 = ORIENTED_EDGE('',*,*,#59966,.F.); +#59982 = ORIENTED_EDGE('',*,*,#59983,.F.); +#59983 = EDGE_CURVE('',#59984,#59959,#59986,.T.); +#59984 = VERTEX_POINT('',#59985); +#59985 = CARTESIAN_POINT('',(0.25,5.E-02,0.5)); +#59986 = LINE('',#59987,#59988); +#59987 = CARTESIAN_POINT('',(0.,5.E-02,0.5)); +#59988 = VECTOR('',#59989,1.); +#59989 = DIRECTION('',(1.,0.,-0.)); +#59990 = ORIENTED_EDGE('',*,*,#59991,.T.); +#59991 = EDGE_CURVE('',#59984,#59860,#59992,.T.); +#59992 = CIRCLE('',#59993,5.E-02); +#59993 = AXIS2_PLACEMENT_3D('',#59994,#59995,#59996); +#59994 = CARTESIAN_POINT('',(0.25,5.E-02,0.45)); +#59995 = DIRECTION('',(1.,0.,0.)); +#59996 = DIRECTION('',(0.,-1.,0.)); +#59997 = CYLINDRICAL_SURFACE('',#59998,5.E-02); +#59998 = AXIS2_PLACEMENT_3D('',#59999,#60000,#60001); +#59999 = CARTESIAN_POINT('',(0.,5.E-02,0.45)); +#60000 = DIRECTION('',(1.,0.,-0.)); +#60001 = DIRECTION('',(0.,-1.,0.)); +#60002 = ADVANCED_FACE('',(#60003),#60048,.F.); +#60003 = FACE_BOUND('',#60004,.F.); +#60004 = EDGE_LOOP('',(#60005,#60006,#60007,#60015,#60024,#60032,#60041, + #60047)); +#60005 = ORIENTED_EDGE('',*,*,#59859,.F.); +#60006 = ORIENTED_EDGE('',*,*,#59890,.T.); +#60007 = ORIENTED_EDGE('',*,*,#60008,.T.); +#60008 = EDGE_CURVE('',#59891,#60009,#60011,.T.); +#60009 = VERTEX_POINT('',#60010); +#60010 = CARTESIAN_POINT('',(0.25,0.45,-3.469446951954E-18)); +#60011 = LINE('',#60012,#60013); +#60012 = CARTESIAN_POINT('',(0.25,0.,0.)); +#60013 = VECTOR('',#60014,1.); +#60014 = DIRECTION('',(-0.,1.,0.)); +#60015 = ORIENTED_EDGE('',*,*,#60016,.T.); +#60016 = EDGE_CURVE('',#60009,#60017,#60019,.T.); +#60017 = VERTEX_POINT('',#60018); +#60018 = CARTESIAN_POINT('',(0.25,0.5,5.E-02)); +#60019 = CIRCLE('',#60020,5.E-02); +#60020 = AXIS2_PLACEMENT_3D('',#60021,#60022,#60023); +#60021 = CARTESIAN_POINT('',(0.25,0.45,5.E-02)); +#60022 = DIRECTION('',(1.,0.,-0.)); +#60023 = DIRECTION('',(0.,1.,0.)); +#60024 = ORIENTED_EDGE('',*,*,#60025,.T.); +#60025 = EDGE_CURVE('',#60017,#60026,#60028,.T.); +#60026 = VERTEX_POINT('',#60027); +#60027 = CARTESIAN_POINT('',(0.25,0.5,0.45)); +#60028 = LINE('',#60029,#60030); +#60029 = CARTESIAN_POINT('',(0.25,0.5,0.)); +#60030 = VECTOR('',#60031,1.); +#60031 = DIRECTION('',(0.,0.,1.)); +#60032 = ORIENTED_EDGE('',*,*,#60033,.T.); +#60033 = EDGE_CURVE('',#60026,#60034,#60036,.T.); +#60034 = VERTEX_POINT('',#60035); +#60035 = CARTESIAN_POINT('',(0.25,0.45,0.5)); +#60036 = CIRCLE('',#60037,5.E-02); +#60037 = AXIS2_PLACEMENT_3D('',#60038,#60039,#60040); +#60038 = CARTESIAN_POINT('',(0.25,0.45,0.45)); +#60039 = DIRECTION('',(1.,0.,-0.)); +#60040 = DIRECTION('',(0.,1.,0.)); +#60041 = ORIENTED_EDGE('',*,*,#60042,.F.); +#60042 = EDGE_CURVE('',#59984,#60034,#60043,.T.); +#60043 = LINE('',#60044,#60045); +#60044 = CARTESIAN_POINT('',(0.25,0.,0.5)); +#60045 = VECTOR('',#60046,1.); +#60046 = DIRECTION('',(0.,1.,0.)); +#60047 = ORIENTED_EDGE('',*,*,#59991,.T.); +#60048 = PLANE('',#60049); +#60049 = AXIS2_PLACEMENT_3D('',#60050,#60051,#60052); +#60050 = CARTESIAN_POINT('',(0.25,0.,0.)); +#60051 = DIRECTION('',(1.,0.,-0.)); +#60052 = DIRECTION('',(0.,0.,1.)); +#60053 = ADVANCED_FACE('',(#60054),#60065,.F.); +#60054 = FACE_BOUND('',#60055,.F.); +#60055 = EDGE_LOOP('',(#60056,#60057,#60058,#60059)); +#60056 = ORIENTED_EDGE('',*,*,#60008,.F.); +#60057 = ORIENTED_EDGE('',*,*,#59899,.T.); +#60058 = ORIENTED_EDGE('',*,*,#59924,.T.); +#60059 = ORIENTED_EDGE('',*,*,#60060,.F.); +#60060 = EDGE_CURVE('',#60009,#59925,#60061,.T.); +#60061 = LINE('',#60062,#60063); +#60062 = CARTESIAN_POINT('',(0.,0.45,-6.938893903907E-18)); +#60063 = VECTOR('',#60064,1.); +#60064 = DIRECTION('',(1.,0.,-0.)); +#60065 = PLANE('',#60066); +#60066 = AXIS2_PLACEMENT_3D('',#60067,#60068,#60069); +#60067 = CARTESIAN_POINT('',(0.,0.,0.)); +#60068 = DIRECTION('',(0.,0.,1.)); +#60069 = DIRECTION('',(1.,0.,-0.)); +#60070 = ADVANCED_FACE('',(#60071),#60082,.T.); +#60071 = FACE_BOUND('',#60072,.T.); +#60072 = EDGE_LOOP('',(#60073,#60074,#60075,#60076)); +#60073 = ORIENTED_EDGE('',*,*,#60042,.F.); +#60074 = ORIENTED_EDGE('',*,*,#59983,.T.); +#60075 = ORIENTED_EDGE('',*,*,#59958,.T.); +#60076 = ORIENTED_EDGE('',*,*,#60077,.F.); +#60077 = EDGE_CURVE('',#60034,#59950,#60078,.T.); +#60078 = LINE('',#60079,#60080); +#60079 = CARTESIAN_POINT('',(0.,0.45,0.5)); +#60080 = VECTOR('',#60081,1.); +#60081 = DIRECTION('',(1.,0.,-0.)); +#60082 = PLANE('',#60083); +#60083 = AXIS2_PLACEMENT_3D('',#60084,#60085,#60086); +#60084 = CARTESIAN_POINT('',(0.,0.,0.5)); +#60085 = DIRECTION('',(0.,0.,1.)); +#60086 = DIRECTION('',(1.,0.,-0.)); +#60087 = ADVANCED_FACE('',(#60088),#60099,.T.); +#60088 = FACE_BOUND('',#60089,.T.); +#60089 = EDGE_LOOP('',(#60090,#60096,#60097,#60098)); +#60090 = ORIENTED_EDGE('',*,*,#60091,.F.); +#60091 = EDGE_CURVE('',#60026,#59942,#60092,.T.); +#60092 = LINE('',#60093,#60094); +#60093 = CARTESIAN_POINT('',(0.,0.5,0.45)); +#60094 = VECTOR('',#60095,1.); +#60095 = DIRECTION('',(1.,0.,-0.)); +#60096 = ORIENTED_EDGE('',*,*,#60033,.T.); +#60097 = ORIENTED_EDGE('',*,*,#60077,.T.); +#60098 = ORIENTED_EDGE('',*,*,#59949,.F.); +#60099 = CYLINDRICAL_SURFACE('',#60100,5.E-02); +#60100 = AXIS2_PLACEMENT_3D('',#60101,#60102,#60103); +#60101 = CARTESIAN_POINT('',(0.,0.45,0.45)); +#60102 = DIRECTION('',(1.,0.,-0.)); +#60103 = DIRECTION('',(0.,1.,0.)); +#60104 = ADVANCED_FACE('',(#60105),#60116,.T.); +#60105 = FACE_BOUND('',#60106,.T.); +#60106 = EDGE_LOOP('',(#60107,#60113,#60114,#60115)); +#60107 = ORIENTED_EDGE('',*,*,#60108,.F.); +#60108 = EDGE_CURVE('',#60017,#59933,#60109,.T.); +#60109 = LINE('',#60110,#60111); +#60110 = CARTESIAN_POINT('',(0.,0.5,5.E-02)); +#60111 = VECTOR('',#60112,1.); +#60112 = DIRECTION('',(1.,0.,-0.)); +#60113 = ORIENTED_EDGE('',*,*,#60025,.T.); +#60114 = ORIENTED_EDGE('',*,*,#60091,.T.); +#60115 = ORIENTED_EDGE('',*,*,#59941,.F.); +#60116 = PLANE('',#60117); +#60117 = AXIS2_PLACEMENT_3D('',#60118,#60119,#60120); +#60118 = CARTESIAN_POINT('',(0.,0.5,0.)); +#60119 = DIRECTION('',(-0.,1.,0.)); +#60120 = DIRECTION('',(0.,0.,1.)); +#60121 = ADVANCED_FACE('',(#60122),#60128,.T.); +#60122 = FACE_BOUND('',#60123,.T.); +#60123 = EDGE_LOOP('',(#60124,#60125,#60126,#60127)); +#60124 = ORIENTED_EDGE('',*,*,#60108,.T.); +#60125 = ORIENTED_EDGE('',*,*,#59932,.F.); +#60126 = ORIENTED_EDGE('',*,*,#60060,.F.); +#60127 = ORIENTED_EDGE('',*,*,#60016,.T.); +#60128 = CYLINDRICAL_SURFACE('',#60129,5.E-02); +#60129 = AXIS2_PLACEMENT_3D('',#60130,#60131,#60132); +#60130 = CARTESIAN_POINT('',(0.,0.45,5.E-02)); +#60131 = DIRECTION('',(1.,0.,-0.)); +#60132 = DIRECTION('',(0.,1.,0.)); +#60133 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#60137)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#60134,#60135,#60136)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#60134 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#60135 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#60136 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#60137 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#60134, + 'distance_accuracy_value','confusion accuracy'); +#60138 = SHAPE_DEFINITION_REPRESENTATION(#60139,#59842); +#60139 = PRODUCT_DEFINITION_SHAPE('','',#60140); +#60140 = PRODUCT_DEFINITION('design','',#60141,#60144); +#60141 = PRODUCT_DEFINITION_FORMATION('','',#60142); +#60142 = PRODUCT('Open CASCADE STEP translator 6.8 54.2.1', + 'Open CASCADE STEP translator 6.8 54.2.1','',(#60143)); +#60143 = PRODUCT_CONTEXT('',#2,'mechanical'); +#60144 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#60145 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60146,#60148); +#60146 = ( REPRESENTATION_RELATIONSHIP('','',#59842,#59832) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60147) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60147 = ITEM_DEFINED_TRANSFORMATION('','',#11,#59833); +#60148 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60149); +#60149 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('108','269','',#59827,#60140,$); +#60150 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#60142)); +#60151 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60152,#60154); +#60152 = ( REPRESENTATION_RELATIONSHIP('','',#59832,#58838) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60153) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60153 = ITEM_DEFINED_TRANSFORMATION('','',#11,#58843); +#60154 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60155); +#60155 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('109','270','',#58833,#59827,$); +#60156 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#59829)); +#60157 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60158,#60160); +#60158 = ( REPRESENTATION_RELATIONSHIP('','',#58838,#58821) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60159) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60159 = ITEM_DEFINED_TRANSFORMATION('','',#11,#58822); +#60160 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60161); +#60161 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('110','','',#58816,#58833,$); +#60162 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#58835)); +#60163 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60164,#60166); +#60164 = ( REPRESENTATION_RELATIONSHIP('','',#58821,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60165) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60165 = ITEM_DEFINED_TRANSFORMATION('','',#11,#143); +#60166 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60167); +#60167 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('111','','',#5,#58816,$); +#60168 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#58818)); +#60169 = SHAPE_DEFINITION_REPRESENTATION(#60170,#60176); +#60170 = PRODUCT_DEFINITION_SHAPE('','',#60171); +#60171 = PRODUCT_DEFINITION('design','',#60172,#60175); +#60172 = PRODUCT_DEFINITION_FORMATION('','',#60173); +#60173 = PRODUCT('C5','C5','',(#60174)); +#60174 = PRODUCT_CONTEXT('',#2,'mechanical'); +#60175 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#60176 = SHAPE_REPRESENTATION('',(#11,#60177),#60181); +#60177 = AXIS2_PLACEMENT_3D('',#60178,#60179,#60180); +#60178 = CARTESIAN_POINT('',(288.63000488281,172.68908691406,0.)); +#60179 = DIRECTION('',(0.,0.,1.)); +#60180 = DIRECTION('',(-4.371138828674E-08,1.,0.)); +#60181 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#60185)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#60182,#60183,#60184)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#60182 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#60183 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#60184 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#60185 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#60182, + 'distance_accuracy_value','confusion accuracy'); +#60186 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60187,#60189); +#60187 = ( REPRESENTATION_RELATIONSHIP('','',#58838,#60176) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60188) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60188 = ITEM_DEFINED_TRANSFORMATION('','',#11,#60177); +#60189 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60190); +#60190 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('112','','',#60171,#58833,$); +#60191 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60192,#60194); +#60192 = ( REPRESENTATION_RELATIONSHIP('','',#60176,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60193) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60193 = ITEM_DEFINED_TRANSFORMATION('','',#11,#147); +#60194 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60195); +#60195 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('113','','',#5,#60171,$); +#60196 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#60173)); +#60197 = SHAPE_DEFINITION_REPRESENTATION(#60198,#60204); +#60198 = PRODUCT_DEFINITION_SHAPE('','',#60199); +#60199 = PRODUCT_DEFINITION('design','',#60200,#60203); +#60200 = PRODUCT_DEFINITION_FORMATION('','',#60201); +#60201 = PRODUCT('C4','C4','',(#60202)); +#60202 = PRODUCT_CONTEXT('',#2,'mechanical'); +#60203 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#60204 = SHAPE_REPRESENTATION('',(#11,#60205),#60209); +#60205 = AXIS2_PLACEMENT_3D('',#60206,#60207,#60208); +#60206 = CARTESIAN_POINT('',(287.71560668945,172.68908691406,0.)); +#60207 = DIRECTION('',(0.,0.,1.)); +#60208 = DIRECTION('',(-4.371138828674E-08,1.,0.)); +#60209 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#60213)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#60210,#60211,#60212)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#60210 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#60211 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#60212 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#60213 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#60210, + 'distance_accuracy_value','confusion accuracy'); +#60214 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60215,#60217); +#60215 = ( REPRESENTATION_RELATIONSHIP('','',#58838,#60204) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60216) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60216 = ITEM_DEFINED_TRANSFORMATION('','',#11,#60205); +#60217 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60218); +#60218 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('114','','',#60199,#58833,$); +#60219 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60220,#60222); +#60220 = ( REPRESENTATION_RELATIONSHIP('','',#60204,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60221) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60221 = ITEM_DEFINED_TRANSFORMATION('','',#11,#151); +#60222 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60223); +#60223 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('115','','',#5,#60199,$); +#60224 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#60201)); +#60225 = SHAPE_DEFINITION_REPRESENTATION(#60226,#60232); +#60226 = PRODUCT_DEFINITION_SHAPE('','',#60227); +#60227 = PRODUCT_DEFINITION('design','',#60228,#60231); +#60228 = PRODUCT_DEFINITION_FORMATION('','',#60229); +#60229 = PRODUCT('C3','C3','',(#60230)); +#60230 = PRODUCT_CONTEXT('',#2,'mechanical'); +#60231 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#60232 = SHAPE_REPRESENTATION('',(#11,#60233),#60237); +#60233 = AXIS2_PLACEMENT_3D('',#60234,#60235,#60236); +#60234 = CARTESIAN_POINT('',(293.91311645507,174.64489746093,0.)); +#60235 = DIRECTION('',(0.,0.,1.)); +#60236 = DIRECTION('',(-4.371138828674E-08,1.,0.)); +#60237 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#60241)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#60238,#60239,#60240)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#60238 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#60239 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#60240 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#60241 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#60238, + 'distance_accuracy_value','confusion accuracy'); +#60242 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60243,#60245); +#60243 = ( REPRESENTATION_RELATIONSHIP('','',#58838,#60232) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60244) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60244 = ITEM_DEFINED_TRANSFORMATION('','',#11,#60233); +#60245 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60246); +#60246 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('116','','',#60227,#58833,$); +#60247 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60248,#60250); +#60248 = ( REPRESENTATION_RELATIONSHIP('','',#60232,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60249) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60249 = ITEM_DEFINED_TRANSFORMATION('','',#11,#155); +#60250 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60251); +#60251 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('117','','',#5,#60227,$); +#60252 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#60229)); +#60253 = SHAPE_DEFINITION_REPRESENTATION(#60254,#60260); +#60254 = PRODUCT_DEFINITION_SHAPE('','',#60255); +#60255 = PRODUCT_DEFINITION('design','',#60256,#60259); +#60256 = PRODUCT_DEFINITION_FORMATION('','',#60257); +#60257 = PRODUCT('C2','C2','',(#60258)); +#60258 = PRODUCT_CONTEXT('',#2,'mechanical'); +#60259 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#60260 = SHAPE_REPRESENTATION('',(#11,#60261),#60265); +#60261 = AXIS2_PLACEMENT_3D('',#60262,#60263,#60264); +#60262 = CARTESIAN_POINT('',(303.64212036132,181.29800415039,0.)); +#60263 = DIRECTION('',(0.,0.,1.)); +#60264 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#60265 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#60269)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#60266,#60267,#60268)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#60266 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#60267 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#60268 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#60269 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#60266, + 'distance_accuracy_value','confusion accuracy'); +#60270 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60271,#60273); +#60271 = ( REPRESENTATION_RELATIONSHIP('','',#55960,#60260) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60272) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60272 = ITEM_DEFINED_TRANSFORMATION('','',#11,#60261); +#60273 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60274); +#60274 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('118','','',#60255,#55955,$); +#60275 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60276,#60278); +#60276 = ( REPRESENTATION_RELATIONSHIP('','',#60260,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60277) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60277 = ITEM_DEFINED_TRANSFORMATION('','',#11,#159); +#60278 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60279); +#60279 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('119','','',#5,#60255,$); +#60280 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#60257)); +#60281 = SHAPE_DEFINITION_REPRESENTATION(#60282,#60288); +#60282 = PRODUCT_DEFINITION_SHAPE('','',#60283); +#60283 = PRODUCT_DEFINITION('design','',#60284,#60287); +#60284 = PRODUCT_DEFINITION_FORMATION('','',#60285); +#60285 = PRODUCT('C1','C1','',(#60286)); +#60286 = PRODUCT_CONTEXT('',#2,'mechanical'); +#60287 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#60288 = SHAPE_REPRESENTATION('',(#11,#60289),#60293); +#60289 = AXIS2_PLACEMENT_3D('',#60290,#60291,#60292); +#60290 = CARTESIAN_POINT('',(303.63153076171,170.49012756347,0.)); +#60291 = DIRECTION('',(0.,0.,1.)); +#60292 = DIRECTION('',(-1.,-8.742277657348E-08,0.)); +#60293 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#60297)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#60294,#60295,#60296)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#60294 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#60295 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#60296 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#60297 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#60294, + 'distance_accuracy_value','confusion accuracy'); +#60298 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60299,#60301); +#60299 = ( REPRESENTATION_RELATIONSHIP('','',#55960,#60288) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60300) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60300 = ITEM_DEFINED_TRANSFORMATION('','',#11,#60289); +#60301 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60302); +#60302 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('120','','',#60283,#55955,$); +#60303 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#60304,#60306); +#60304 = ( REPRESENTATION_RELATIONSHIP('','',#60288,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60305) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#60305 = ITEM_DEFINED_TRANSFORMATION('','',#11,#163); +#60306 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #60307); +#60307 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('121','','',#5,#60283,$); +#60308 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#60285)); +#60309 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60310),#36143); +#60310 = STYLED_ITEM('color',(#60311),#35861); +#60311 = PRESENTATION_STYLE_ASSIGNMENT((#60312,#60318)); +#60312 = SURFACE_STYLE_USAGE(.BOTH.,#60313); +#60313 = SURFACE_SIDE_STYLE('',(#60314)); +#60314 = SURFACE_STYLE_FILL_AREA(#60315); +#60315 = FILL_AREA_STYLE('',(#60316)); +#60316 = FILL_AREA_STYLE_COLOUR('',#60317); +#60317 = COLOUR_RGB('',0.800000010877,0.800000010877,0.800000010877); +#60318 = CURVE_STYLE('',#60319,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#60319 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#60320 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60321),#59328); +#60321 = STYLED_ITEM('color',(#60322),#58874); +#60322 = PRESENTATION_STYLE_ASSIGNMENT((#60323,#60328)); +#60323 = SURFACE_STYLE_USAGE(.BOTH.,#60324); +#60324 = SURFACE_SIDE_STYLE('',(#60325)); +#60325 = SURFACE_STYLE_FILL_AREA(#60326); +#60326 = FILL_AREA_STYLE('',(#60327)); +#60327 = FILL_AREA_STYLE_COLOUR('',#60317); +#60328 = CURVE_STYLE('',#60329,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#60329 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#60330 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60331),#35825); +#60331 = STYLED_ITEM('color',(#60332),#35675); +#60332 = PRESENTATION_STYLE_ASSIGNMENT((#60333,#60339)); +#60333 = SURFACE_STYLE_USAGE(.BOTH.,#60334); +#60334 = SURFACE_SIDE_STYLE('',(#60335)); +#60335 = SURFACE_STYLE_FILL_AREA(#60336); +#60336 = FILL_AREA_STYLE('',(#60337)); +#60337 = FILL_AREA_STYLE_COLOUR('',#60338); +#60338 = COLOUR_RGB('',0.827450977613,0.827450977613,0.827450977613); +#60339 = CURVE_STYLE('',#60340,POSITIVE_LENGTH_MEASURE(0.1),#60338); +#60340 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#60341 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60342),#54664); +#60342 = STYLED_ITEM('color',(#60343),#39307); +#60343 = PRESENTATION_STYLE_ASSIGNMENT((#60344)); +#60344 = SURFACE_STYLE_USAGE(.BOTH.,#60345); +#60345 = SURFACE_SIDE_STYLE('',(#60346)); +#60346 = SURFACE_STYLE_FILL_AREA(#60347); +#60347 = FILL_AREA_STYLE('',(#60348)); +#60348 = FILL_AREA_STYLE_COLOUR('',#60349); +#60349 = COLOUR_RGB('',0.262745099612,0.262745099612,0.262745099612); +#60350 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60351,#60359,#60367,#60374,#60381,#60388,#60395,#60402,#60409, + #60416,#60423,#60430,#60438),#55856); +#60351 = STYLED_ITEM('color',(#60352),#54706); +#60352 = PRESENTATION_STYLE_ASSIGNMENT((#60353)); +#60353 = SURFACE_STYLE_USAGE(.BOTH.,#60354); +#60354 = SURFACE_SIDE_STYLE('',(#60355)); +#60355 = SURFACE_STYLE_FILL_AREA(#60356); +#60356 = FILL_AREA_STYLE('',(#60357)); +#60357 = FILL_AREA_STYLE_COLOUR('',#60358); +#60358 = COLOUR_RGB('',0.768627468855,0.768627468855,0.768627468855); +#60359 = OVER_RIDING_STYLED_ITEM('overriding color',(#60360),#54708, + #60351); +#60360 = PRESENTATION_STYLE_ASSIGNMENT((#60361)); +#60361 = SURFACE_STYLE_USAGE(.BOTH.,#60362); +#60362 = SURFACE_SIDE_STYLE('',(#60363)); +#60363 = SURFACE_STYLE_FILL_AREA(#60364); +#60364 = FILL_AREA_STYLE('',(#60365)); +#60365 = FILL_AREA_STYLE_COLOUR('',#60366); +#60366 = COLOUR_RGB('',0.109803919806,0.109803919806,0.109803919806); +#60367 = OVER_RIDING_STYLED_ITEM('overriding color',(#60368),#54780, + #60351); +#60368 = PRESENTATION_STYLE_ASSIGNMENT((#60369)); +#60369 = SURFACE_STYLE_USAGE(.BOTH.,#60370); +#60370 = SURFACE_SIDE_STYLE('',(#60371)); +#60371 = SURFACE_STYLE_FILL_AREA(#60372); +#60372 = FILL_AREA_STYLE('',(#60373)); +#60373 = FILL_AREA_STYLE_COLOUR('',#60366); +#60374 = OVER_RIDING_STYLED_ITEM('overriding color',(#60375),#54852, + #60351); +#60375 = PRESENTATION_STYLE_ASSIGNMENT((#60376)); +#60376 = SURFACE_STYLE_USAGE(.BOTH.,#60377); +#60377 = SURFACE_SIDE_STYLE('',(#60378)); +#60378 = SURFACE_STYLE_FILL_AREA(#60379); +#60379 = FILL_AREA_STYLE('',(#60380)); +#60380 = FILL_AREA_STYLE_COLOUR('',#60366); +#60381 = OVER_RIDING_STYLED_ITEM('overriding color',(#60382),#54892, + #60351); +#60382 = PRESENTATION_STYLE_ASSIGNMENT((#60383)); +#60383 = SURFACE_STYLE_USAGE(.BOTH.,#60384); +#60384 = SURFACE_SIDE_STYLE('',(#60385)); +#60385 = SURFACE_STYLE_FILL_AREA(#60386); +#60386 = FILL_AREA_STYLE('',(#60387)); +#60387 = FILL_AREA_STYLE_COLOUR('',#60366); +#60388 = OVER_RIDING_STYLED_ITEM('overriding color',(#60389),#54921, + #60351); +#60389 = PRESENTATION_STYLE_ASSIGNMENT((#60390)); +#60390 = SURFACE_STYLE_USAGE(.BOTH.,#60391); +#60391 = SURFACE_SIDE_STYLE('',(#60392)); +#60392 = SURFACE_STYLE_FILL_AREA(#60393); +#60393 = FILL_AREA_STYLE('',(#60394)); +#60394 = FILL_AREA_STYLE_COLOUR('',#60366); +#60395 = OVER_RIDING_STYLED_ITEM('overriding color',(#60396),#54952, + #60351); +#60396 = PRESENTATION_STYLE_ASSIGNMENT((#60397)); +#60397 = SURFACE_STYLE_USAGE(.BOTH.,#60398); +#60398 = SURFACE_SIDE_STYLE('',(#60399)); +#60399 = SURFACE_STYLE_FILL_AREA(#60400); +#60400 = FILL_AREA_STYLE('',(#60401)); +#60401 = FILL_AREA_STYLE_COLOUR('',#60366); +#60402 = OVER_RIDING_STYLED_ITEM('overriding color',(#60403),#54981, + #60351); +#60403 = PRESENTATION_STYLE_ASSIGNMENT((#60404)); +#60404 = SURFACE_STYLE_USAGE(.BOTH.,#60405); +#60405 = SURFACE_SIDE_STYLE('',(#60406)); +#60406 = SURFACE_STYLE_FILL_AREA(#60407); +#60407 = FILL_AREA_STYLE('',(#60408)); +#60408 = FILL_AREA_STYLE_COLOUR('',#60366); +#60409 = OVER_RIDING_STYLED_ITEM('overriding color',(#60410),#54998, + #60351); +#60410 = PRESENTATION_STYLE_ASSIGNMENT((#60411)); +#60411 = SURFACE_STYLE_USAGE(.BOTH.,#60412); +#60412 = SURFACE_SIDE_STYLE('',(#60413)); +#60413 = SURFACE_STYLE_FILL_AREA(#60414); +#60414 = FILL_AREA_STYLE('',(#60415)); +#60415 = FILL_AREA_STYLE_COLOUR('',#60366); +#60416 = OVER_RIDING_STYLED_ITEM('overriding color',(#60417),#55024, + #60351); +#60417 = PRESENTATION_STYLE_ASSIGNMENT((#60418)); +#60418 = SURFACE_STYLE_USAGE(.BOTH.,#60419); +#60419 = SURFACE_SIDE_STYLE('',(#60420)); +#60420 = SURFACE_STYLE_FILL_AREA(#60421); +#60421 = FILL_AREA_STYLE('',(#60422)); +#60422 = FILL_AREA_STYLE_COLOUR('',#60366); +#60423 = OVER_RIDING_STYLED_ITEM('overriding color',(#60424),#55055, + #60351); +#60424 = PRESENTATION_STYLE_ASSIGNMENT((#60425)); +#60425 = SURFACE_STYLE_USAGE(.BOTH.,#60426); +#60426 = SURFACE_SIDE_STYLE('',(#60427)); +#60427 = SURFACE_STYLE_FILL_AREA(#60428); +#60428 = FILL_AREA_STYLE('',(#60429)); +#60429 = FILL_AREA_STYLE_COLOUR('',#60366); +#60430 = OVER_RIDING_STYLED_ITEM('overriding color',(#60431),#55827, + #60351); +#60431 = PRESENTATION_STYLE_ASSIGNMENT((#60432)); +#60432 = SURFACE_STYLE_USAGE(.BOTH.,#60433); +#60433 = SURFACE_SIDE_STYLE('',(#60434)); +#60434 = SURFACE_STYLE_FILL_AREA(#60435); +#60435 = FILL_AREA_STYLE('',(#60436)); +#60436 = FILL_AREA_STYLE_COLOUR('',#60437); +#60437 = DRAUGHTING_PRE_DEFINED_COLOUR('white'); +#60438 = OVER_RIDING_STYLED_ITEM('overriding color',(#60439),#55844, + #60351); +#60439 = PRESENTATION_STYLE_ASSIGNMENT((#60440)); +#60440 = SURFACE_STYLE_USAGE(.BOTH.,#60441); +#60441 = SURFACE_SIDE_STYLE('',(#60442)); +#60442 = SURFACE_STYLE_FILL_AREA(#60443); +#60443 = FILL_AREA_STYLE('',(#60444)); +#60444 = FILL_AREA_STYLE_COLOUR('',#60437); +#60445 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60446,#60453,#60460,#60467,#60474,#60481,#60488,#60495,#60502, + #60509,#60516,#60523,#60530,#60537,#60544,#60551,#60558,#60565, + #60572,#60579),#33986); +#60446 = STYLED_ITEM('color',(#60447),#32296); +#60447 = PRESENTATION_STYLE_ASSIGNMENT((#60448)); +#60448 = SURFACE_STYLE_USAGE(.BOTH.,#60449); +#60449 = SURFACE_SIDE_STYLE('',(#60450)); +#60450 = SURFACE_STYLE_FILL_AREA(#60451); +#60451 = FILL_AREA_STYLE('',(#60452)); +#60452 = FILL_AREA_STYLE_COLOUR('',#60358); +#60453 = OVER_RIDING_STYLED_ITEM('overriding color',(#60454),#32298, + #60446); +#60454 = PRESENTATION_STYLE_ASSIGNMENT((#60455)); +#60455 = SURFACE_STYLE_USAGE(.BOTH.,#60456); +#60456 = SURFACE_SIDE_STYLE('',(#60457)); +#60457 = SURFACE_STYLE_FILL_AREA(#60458); +#60458 = FILL_AREA_STYLE('',(#60459)); +#60459 = FILL_AREA_STYLE_COLOUR('',#60437); +#60460 = OVER_RIDING_STYLED_ITEM('overriding color',(#60461),#32324, + #60446); +#60461 = PRESENTATION_STYLE_ASSIGNMENT((#60462)); +#60462 = SURFACE_STYLE_USAGE(.BOTH.,#60463); +#60463 = SURFACE_SIDE_STYLE('',(#60464)); +#60464 = SURFACE_STYLE_FILL_AREA(#60465); +#60465 = FILL_AREA_STYLE('',(#60466)); +#60466 = FILL_AREA_STYLE_COLOUR('',#60366); +#60467 = OVER_RIDING_STYLED_ITEM('overriding color',(#60468),#32374, + #60446); +#60468 = PRESENTATION_STYLE_ASSIGNMENT((#60469)); +#60469 = SURFACE_STYLE_USAGE(.BOTH.,#60470); +#60470 = SURFACE_SIDE_STYLE('',(#60471)); +#60471 = SURFACE_STYLE_FILL_AREA(#60472); +#60472 = FILL_AREA_STYLE('',(#60473)); +#60473 = FILL_AREA_STYLE_COLOUR('',#60366); +#60474 = OVER_RIDING_STYLED_ITEM('overriding color',(#60475),#32414, + #60446); +#60475 = PRESENTATION_STYLE_ASSIGNMENT((#60476)); +#60476 = SURFACE_STYLE_USAGE(.BOTH.,#60477); +#60477 = SURFACE_SIDE_STYLE('',(#60478)); +#60478 = SURFACE_STYLE_FILL_AREA(#60479); +#60479 = FILL_AREA_STYLE('',(#60480)); +#60480 = FILL_AREA_STYLE_COLOUR('',#60366); +#60481 = OVER_RIDING_STYLED_ITEM('overriding color',(#60482),#32454, + #60446); +#60482 = PRESENTATION_STYLE_ASSIGNMENT((#60483)); +#60483 = SURFACE_STYLE_USAGE(.BOTH.,#60484); +#60484 = SURFACE_SIDE_STYLE('',(#60485)); +#60485 = SURFACE_STYLE_FILL_AREA(#60486); +#60486 = FILL_AREA_STYLE('',(#60487)); +#60487 = FILL_AREA_STYLE_COLOUR('',#60366); +#60488 = OVER_RIDING_STYLED_ITEM('overriding color',(#60489),#32494, + #60446); +#60489 = PRESENTATION_STYLE_ASSIGNMENT((#60490)); +#60490 = SURFACE_STYLE_USAGE(.BOTH.,#60491); +#60491 = SURFACE_SIDE_STYLE('',(#60492)); +#60492 = SURFACE_STYLE_FILL_AREA(#60493); +#60493 = FILL_AREA_STYLE('',(#60494)); +#60494 = FILL_AREA_STYLE_COLOUR('',#60366); +#60495 = OVER_RIDING_STYLED_ITEM('overriding color',(#60496),#32534, + #60446); +#60496 = PRESENTATION_STYLE_ASSIGNMENT((#60497)); +#60497 = SURFACE_STYLE_USAGE(.BOTH.,#60498); +#60498 = SURFACE_SIDE_STYLE('',(#60499)); +#60499 = SURFACE_STYLE_FILL_AREA(#60500); +#60500 = FILL_AREA_STYLE('',(#60501)); +#60501 = FILL_AREA_STYLE_COLOUR('',#60366); +#60502 = OVER_RIDING_STYLED_ITEM('overriding color',(#60503),#32574, + #60446); +#60503 = PRESENTATION_STYLE_ASSIGNMENT((#60504)); +#60504 = SURFACE_STYLE_USAGE(.BOTH.,#60505); +#60505 = SURFACE_SIDE_STYLE('',(#60506)); +#60506 = SURFACE_STYLE_FILL_AREA(#60507); +#60507 = FILL_AREA_STYLE('',(#60508)); +#60508 = FILL_AREA_STYLE_COLOUR('',#60366); +#60509 = OVER_RIDING_STYLED_ITEM('overriding color',(#60510),#32614, + #60446); +#60510 = PRESENTATION_STYLE_ASSIGNMENT((#60511)); +#60511 = SURFACE_STYLE_USAGE(.BOTH.,#60512); +#60512 = SURFACE_SIDE_STYLE('',(#60513)); +#60513 = SURFACE_STYLE_FILL_AREA(#60514); +#60514 = FILL_AREA_STYLE('',(#60515)); +#60515 = FILL_AREA_STYLE_COLOUR('',#60366); +#60516 = OVER_RIDING_STYLED_ITEM('overriding color',(#60517),#32636, + #60446); +#60517 = PRESENTATION_STYLE_ASSIGNMENT((#60518)); +#60518 = SURFACE_STYLE_USAGE(.BOTH.,#60519); +#60519 = SURFACE_SIDE_STYLE('',(#60520)); +#60520 = SURFACE_STYLE_FILL_AREA(#60521); +#60521 = FILL_AREA_STYLE('',(#60522)); +#60522 = FILL_AREA_STYLE_COLOUR('',#60366); +#60523 = OVER_RIDING_STYLED_ITEM('overriding color',(#60524),#32658, + #60446); +#60524 = PRESENTATION_STYLE_ASSIGNMENT((#60525)); +#60525 = SURFACE_STYLE_USAGE(.BOTH.,#60526); +#60526 = SURFACE_SIDE_STYLE('',(#60527)); +#60527 = SURFACE_STYLE_FILL_AREA(#60528); +#60528 = FILL_AREA_STYLE('',(#60529)); +#60529 = FILL_AREA_STYLE_COLOUR('',#60366); +#60530 = OVER_RIDING_STYLED_ITEM('overriding color',(#60531),#32687, + #60446); +#60531 = PRESENTATION_STYLE_ASSIGNMENT((#60532)); +#60532 = SURFACE_STYLE_USAGE(.BOTH.,#60533); +#60533 = SURFACE_SIDE_STYLE('',(#60534)); +#60534 = SURFACE_STYLE_FILL_AREA(#60535); +#60535 = FILL_AREA_STYLE('',(#60536)); +#60536 = FILL_AREA_STYLE_COLOUR('',#60366); +#60537 = OVER_RIDING_STYLED_ITEM('overriding color',(#60538),#32704, + #60446); +#60538 = PRESENTATION_STYLE_ASSIGNMENT((#60539)); +#60539 = SURFACE_STYLE_USAGE(.BOTH.,#60540); +#60540 = SURFACE_SIDE_STYLE('',(#60541)); +#60541 = SURFACE_STYLE_FILL_AREA(#60542); +#60542 = FILL_AREA_STYLE('',(#60543)); +#60543 = FILL_AREA_STYLE_COLOUR('',#60366); +#60544 = OVER_RIDING_STYLED_ITEM('overriding color',(#60545),#32721, + #60446); +#60545 = PRESENTATION_STYLE_ASSIGNMENT((#60546)); +#60546 = SURFACE_STYLE_USAGE(.BOTH.,#60547); +#60547 = SURFACE_SIDE_STYLE('',(#60548)); +#60548 = SURFACE_STYLE_FILL_AREA(#60549); +#60549 = FILL_AREA_STYLE('',(#60550)); +#60550 = FILL_AREA_STYLE_COLOUR('',#60366); +#60551 = OVER_RIDING_STYLED_ITEM('overriding color',(#60552),#32747, + #60446); +#60552 = PRESENTATION_STYLE_ASSIGNMENT((#60553)); +#60553 = SURFACE_STYLE_USAGE(.BOTH.,#60554); +#60554 = SURFACE_SIDE_STYLE('',(#60555)); +#60555 = SURFACE_STYLE_FILL_AREA(#60556); +#60556 = FILL_AREA_STYLE('',(#60557)); +#60557 = FILL_AREA_STYLE_COLOUR('',#60366); +#60558 = OVER_RIDING_STYLED_ITEM('overriding color',(#60559),#32783, + #60446); +#60559 = PRESENTATION_STYLE_ASSIGNMENT((#60560)); +#60560 = SURFACE_STYLE_USAGE(.BOTH.,#60561); +#60561 = SURFACE_SIDE_STYLE('',(#60562)); +#60562 = SURFACE_STYLE_FILL_AREA(#60563); +#60563 = FILL_AREA_STYLE('',(#60564)); +#60564 = FILL_AREA_STYLE_COLOUR('',#60366); +#60565 = OVER_RIDING_STYLED_ITEM('overriding color',(#60566),#32800, + #60446); +#60566 = PRESENTATION_STYLE_ASSIGNMENT((#60567)); +#60567 = SURFACE_STYLE_USAGE(.BOTH.,#60568); +#60568 = SURFACE_SIDE_STYLE('',(#60569)); +#60569 = SURFACE_STYLE_FILL_AREA(#60570); +#60570 = FILL_AREA_STYLE('',(#60571)); +#60571 = FILL_AREA_STYLE_COLOUR('',#60366); +#60572 = OVER_RIDING_STYLED_ITEM('overriding color',(#60573),#32817, + #60446); +#60573 = PRESENTATION_STYLE_ASSIGNMENT((#60574)); +#60574 = SURFACE_STYLE_USAGE(.BOTH.,#60575); +#60575 = SURFACE_SIDE_STYLE('',(#60576)); +#60576 = SURFACE_STYLE_FILL_AREA(#60577); +#60577 = FILL_AREA_STYLE('',(#60578)); +#60578 = FILL_AREA_STYLE_COLOUR('',#60366); +#60579 = OVER_RIDING_STYLED_ITEM('overriding color',(#60580),#33976, + #60446); +#60580 = PRESENTATION_STYLE_ASSIGNMENT((#60581)); +#60581 = SURFACE_STYLE_USAGE(.BOTH.,#60582); +#60582 = SURFACE_SIDE_STYLE('',(#60583)); +#60583 = SURFACE_STYLE_FILL_AREA(#60584); +#60584 = FILL_AREA_STYLE('',(#60585)); +#60585 = FILL_AREA_STYLE_COLOUR('',#60437); +#60586 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60587),#6688); +#60587 = STYLED_ITEM('color',(#60588),#6538); +#60588 = PRESENTATION_STYLE_ASSIGNMENT((#60589,#60595)); +#60589 = SURFACE_STYLE_USAGE(.BOTH.,#60590); +#60590 = SURFACE_SIDE_STYLE('',(#60591)); +#60591 = SURFACE_STYLE_FILL_AREA(#60592); +#60592 = FILL_AREA_STYLE('',(#60593)); +#60593 = FILL_AREA_STYLE_COLOUR('',#60594); +#60594 = COLOUR_RGB('',0.501960785193,0.501960785193,0.501960785193); +#60595 = CURVE_STYLE('',#60596,POSITIVE_LENGTH_MEASURE(0.1),#60594); +#60596 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#60597 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60598),#57945); +#60598 = STYLED_ITEM('color',(#60599),#57491); +#60599 = PRESENTATION_STYLE_ASSIGNMENT((#60600,#60605)); +#60600 = SURFACE_STYLE_USAGE(.BOTH.,#60601); +#60601 = SURFACE_SIDE_STYLE('',(#60602)); +#60602 = SURFACE_STYLE_FILL_AREA(#60603); +#60603 = FILL_AREA_STYLE('',(#60604)); +#60604 = FILL_AREA_STYLE_COLOUR('',#60317); +#60605 = CURVE_STYLE('',#60606,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#60606 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#60607 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60608),#58750); +#60608 = STYLED_ITEM('color',(#60609),#58460); +#60609 = PRESENTATION_STYLE_ASSIGNMENT((#60610,#60616)); +#60610 = SURFACE_STYLE_USAGE(.BOTH.,#60611); +#60611 = SURFACE_SIDE_STYLE('',(#60612)); +#60612 = SURFACE_STYLE_FILL_AREA(#60613); +#60613 = FILL_AREA_STYLE('',(#60614)); +#60614 = FILL_AREA_STYLE_COLOUR('',#60615); +#60615 = COLOUR_RGB('',0.72156863771,0.525490220889,4.313725586683E-02); +#60616 = CURVE_STYLE('',#60617,POSITIVE_LENGTH_MEASURE(0.1),#60615); +#60617 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#60618 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60619,#60627,#60634,#60641,#60648,#60655,#60662,#60669,#60676, + #60683,#60690,#60697,#60704,#60711,#60718,#60725),#32236); +#60619 = STYLED_ITEM('color',(#60620),#12321); +#60620 = PRESENTATION_STYLE_ASSIGNMENT((#60621)); +#60621 = SURFACE_STYLE_USAGE(.BOTH.,#60622); +#60622 = SURFACE_SIDE_STYLE('',(#60623)); +#60623 = SURFACE_STYLE_FILL_AREA(#60624); +#60624 = FILL_AREA_STYLE('',(#60625)); +#60625 = FILL_AREA_STYLE_COLOUR('',#60626); +#60626 = COLOUR_RGB('',0.937254901616,0.937254901616,0.937254901616); +#60627 = STYLED_ITEM('color',(#60628),#23757); +#60628 = PRESENTATION_STYLE_ASSIGNMENT((#60629)); +#60629 = SURFACE_STYLE_USAGE(.BOTH.,#60630); +#60630 = SURFACE_SIDE_STYLE('',(#60631)); +#60631 = SURFACE_STYLE_FILL_AREA(#60632); +#60632 = FILL_AREA_STYLE('',(#60633)); +#60633 = FILL_AREA_STYLE_COLOUR('',#60626); +#60634 = STYLED_ITEM('color',(#60635),#24179); +#60635 = PRESENTATION_STYLE_ASSIGNMENT((#60636)); +#60636 = SURFACE_STYLE_USAGE(.BOTH.,#60637); +#60637 = SURFACE_SIDE_STYLE('',(#60638)); +#60638 = SURFACE_STYLE_FILL_AREA(#60639); +#60639 = FILL_AREA_STYLE('',(#60640)); +#60640 = FILL_AREA_STYLE_COLOUR('',#60626); +#60641 = STYLED_ITEM('color',(#60642),#24601); +#60642 = PRESENTATION_STYLE_ASSIGNMENT((#60643)); +#60643 = SURFACE_STYLE_USAGE(.BOTH.,#60644); +#60644 = SURFACE_SIDE_STYLE('',(#60645)); +#60645 = SURFACE_STYLE_FILL_AREA(#60646); +#60646 = FILL_AREA_STYLE('',(#60647)); +#60647 = FILL_AREA_STYLE_COLOUR('',#60626); +#60648 = STYLED_ITEM('color',(#60649),#24817); +#60649 = PRESENTATION_STYLE_ASSIGNMENT((#60650)); +#60650 = SURFACE_STYLE_USAGE(.BOTH.,#60651); +#60651 = SURFACE_SIDE_STYLE('',(#60652)); +#60652 = SURFACE_STYLE_FILL_AREA(#60653); +#60653 = FILL_AREA_STYLE('',(#60654)); +#60654 = FILL_AREA_STYLE_COLOUR('',#60626); +#60655 = STYLED_ITEM('color',(#60656),#25369); +#60656 = PRESENTATION_STYLE_ASSIGNMENT((#60657)); +#60657 = SURFACE_STYLE_USAGE(.BOTH.,#60658); +#60658 = SURFACE_SIDE_STYLE('',(#60659)); +#60659 = SURFACE_STYLE_FILL_AREA(#60660); +#60660 = FILL_AREA_STYLE('',(#60661)); +#60661 = FILL_AREA_STYLE_COLOUR('',#60626); +#60662 = STYLED_ITEM('color',(#60663),#25783); +#60663 = PRESENTATION_STYLE_ASSIGNMENT((#60664)); +#60664 = SURFACE_STYLE_USAGE(.BOTH.,#60665); +#60665 = SURFACE_SIDE_STYLE('',(#60666)); +#60666 = SURFACE_STYLE_FILL_AREA(#60667); +#60667 = FILL_AREA_STYLE('',(#60668)); +#60668 = FILL_AREA_STYLE_COLOUR('',#60626); +#60669 = STYLED_ITEM('color',(#60670),#26315); +#60670 = PRESENTATION_STYLE_ASSIGNMENT((#60671)); +#60671 = SURFACE_STYLE_USAGE(.BOTH.,#60672); +#60672 = SURFACE_SIDE_STYLE('',(#60673)); +#60673 = SURFACE_STYLE_FILL_AREA(#60674); +#60674 = FILL_AREA_STYLE('',(#60675)); +#60675 = FILL_AREA_STYLE_COLOUR('',#60626); +#60676 = STYLED_ITEM('color',(#60677),#26811); +#60677 = PRESENTATION_STYLE_ASSIGNMENT((#60678)); +#60678 = SURFACE_STYLE_USAGE(.BOTH.,#60679); +#60679 = SURFACE_SIDE_STYLE('',(#60680)); +#60680 = SURFACE_STYLE_FILL_AREA(#60681); +#60681 = FILL_AREA_STYLE('',(#60682)); +#60682 = FILL_AREA_STYLE_COLOUR('',#60626); +#60683 = STYLED_ITEM('color',(#60684),#27225); +#60684 = PRESENTATION_STYLE_ASSIGNMENT((#60685)); +#60685 = SURFACE_STYLE_USAGE(.BOTH.,#60686); +#60686 = SURFACE_SIDE_STYLE('',(#60687)); +#60687 = SURFACE_STYLE_FILL_AREA(#60688); +#60688 = FILL_AREA_STYLE('',(#60689)); +#60689 = FILL_AREA_STYLE_COLOUR('',#60626); +#60690 = STYLED_ITEM('color',(#60691),#28057); +#60691 = PRESENTATION_STYLE_ASSIGNMENT((#60692)); +#60692 = SURFACE_STYLE_USAGE(.BOTH.,#60693); +#60693 = SURFACE_SIDE_STYLE('',(#60694)); +#60694 = SURFACE_STYLE_FILL_AREA(#60695); +#60695 = FILL_AREA_STYLE('',(#60696)); +#60696 = FILL_AREA_STYLE_COLOUR('',#60626); +#60697 = STYLED_ITEM('color',(#60698),#28882); +#60698 = PRESENTATION_STYLE_ASSIGNMENT((#60699)); +#60699 = SURFACE_STYLE_USAGE(.BOTH.,#60700); +#60700 = SURFACE_SIDE_STYLE('',(#60701)); +#60701 = SURFACE_STYLE_FILL_AREA(#60702); +#60702 = FILL_AREA_STYLE('',(#60703)); +#60703 = FILL_AREA_STYLE_COLOUR('',#60626); +#60704 = STYLED_ITEM('color',(#60705),#29425); +#60705 = PRESENTATION_STYLE_ASSIGNMENT((#60706)); +#60706 = SURFACE_STYLE_USAGE(.BOTH.,#60707); +#60707 = SURFACE_SIDE_STYLE('',(#60708)); +#60708 = SURFACE_STYLE_FILL_AREA(#60709); +#60709 = FILL_AREA_STYLE('',(#60710)); +#60710 = FILL_AREA_STYLE_COLOUR('',#60626); +#60711 = STYLED_ITEM('color',(#60712),#29839); +#60712 = PRESENTATION_STYLE_ASSIGNMENT((#60713)); +#60713 = SURFACE_STYLE_USAGE(.BOTH.,#60714); +#60714 = SURFACE_SIDE_STYLE('',(#60715)); +#60715 = SURFACE_STYLE_FILL_AREA(#60716); +#60716 = FILL_AREA_STYLE('',(#60717)); +#60717 = FILL_AREA_STYLE_COLOUR('',#60626); +#60718 = STYLED_ITEM('color',(#60719),#30371); +#60719 = PRESENTATION_STYLE_ASSIGNMENT((#60720)); +#60720 = SURFACE_STYLE_USAGE(.BOTH.,#60721); +#60721 = SURFACE_SIDE_STYLE('',(#60722)); +#60722 = SURFACE_STYLE_FILL_AREA(#60723); +#60723 = FILL_AREA_STYLE('',(#60724)); +#60724 = FILL_AREA_STYLE_COLOUR('',#60626); +#60725 = STYLED_ITEM('color',(#60726),#30867); +#60726 = PRESENTATION_STYLE_ASSIGNMENT((#60727)); +#60727 = SURFACE_STYLE_USAGE(.BOTH.,#60728); +#60728 = SURFACE_SIDE_STYLE('',(#60729)); +#60729 = SURFACE_STYLE_FILL_AREA(#60730); +#60730 = FILL_AREA_STYLE('',(#60731)); +#60731 = FILL_AREA_STYLE_COLOUR('',#60626); +#60732 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60733),#1089); +#60733 = STYLED_ITEM('color',(#60734),#191); +#60734 = PRESENTATION_STYLE_ASSIGNMENT((#60735,#60741)); +#60735 = SURFACE_STYLE_USAGE(.BOTH.,#60736); +#60736 = SURFACE_SIDE_STYLE('',(#60737)); +#60737 = SURFACE_STYLE_FILL_AREA(#60738); +#60738 = FILL_AREA_STYLE('',(#60739)); +#60739 = FILL_AREA_STYLE_COLOUR('',#60740); +#60740 = DRAUGHTING_PRE_DEFINED_COLOUR('black'); +#60741 = CURVE_STYLE('',#60742,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#60742 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#60743 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60744),#35598); +#60744 = STYLED_ITEM('color',(#60745),#35448); +#60745 = PRESENTATION_STYLE_ASSIGNMENT((#60746,#60752)); +#60746 = SURFACE_STYLE_USAGE(.BOTH.,#60747); +#60747 = SURFACE_SIDE_STYLE('',(#60748)); +#60748 = SURFACE_STYLE_FILL_AREA(#60749); +#60749 = FILL_AREA_STYLE('',(#60750)); +#60750 = FILL_AREA_STYLE_COLOUR('',#60751); +#60751 = COLOUR_RGB('',0.160784315601,0.160784315601,0.160784315601); +#60752 = CURVE_STYLE('',#60753,POSITIVE_LENGTH_MEASURE(0.1),#60751); +#60753 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#60754 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #60755,#60763,#60771,#60778,#60786,#60793,#60800,#60807,#60814, + #60821,#60828,#60835,#60842,#60849,#60856,#60863,#60870,#60877, + #60884,#60891,#60898,#60905,#60912,#60919,#60926,#60933,#60940, + #60947,#60954,#60961,#60968,#60975,#60982,#60989,#60996,#61003, + #61010,#61017,#61024,#61031,#61038,#61045,#61052,#61059,#61066, + #61073,#61080,#61087,#61094,#61101,#61108,#61115,#61122,#61129, + #61136),#6502); +#60755 = STYLED_ITEM('color',(#60756),#1135); +#60756 = PRESENTATION_STYLE_ASSIGNMENT((#60757)); +#60757 = SURFACE_STYLE_USAGE(.BOTH.,#60758); +#60758 = SURFACE_SIDE_STYLE('',(#60759)); +#60759 = SURFACE_STYLE_FILL_AREA(#60760); +#60760 = FILL_AREA_STYLE('',(#60761)); +#60761 = FILL_AREA_STYLE_COLOUR('',#60762); +#60762 = COLOUR_RGB('',0.843137261657,0.815686284108,0.752941164258); +#60763 = STYLED_ITEM('color',(#60764),#1285); +#60764 = PRESENTATION_STYLE_ASSIGNMENT((#60765)); +#60765 = SURFACE_STYLE_USAGE(.BOTH.,#60766); +#60766 = SURFACE_SIDE_STYLE('',(#60767)); +#60767 = SURFACE_STYLE_FILL_AREA(#60768); +#60768 = FILL_AREA_STYLE('',(#60769)); +#60769 = FILL_AREA_STYLE_COLOUR('',#60770); +#60770 = COLOUR_RGB('',0.898039222556,0.917647049334,0.929411760963); +#60771 = STYLED_ITEM('color',(#60772),#1699); +#60772 = PRESENTATION_STYLE_ASSIGNMENT((#60773)); +#60773 = SURFACE_STYLE_USAGE(.BOTH.,#60774); +#60774 = SURFACE_SIDE_STYLE('',(#60775)); +#60775 = SURFACE_STYLE_FILL_AREA(#60776); +#60776 = FILL_AREA_STYLE('',(#60777)); +#60777 = FILL_AREA_STYLE_COLOUR('',#60770); +#60778 = STYLED_ITEM('color',(#60779),#2113); +#60779 = PRESENTATION_STYLE_ASSIGNMENT((#60780)); +#60780 = SURFACE_STYLE_USAGE(.BOTH.,#60781); +#60781 = SURFACE_SIDE_STYLE('',(#60782)); +#60782 = SURFACE_STYLE_FILL_AREA(#60783); +#60783 = FILL_AREA_STYLE('',(#60784)); +#60784 = FILL_AREA_STYLE_COLOUR('',#60785); +#60785 = COLOUR_RGB('',9.803921802644E-02,9.803921802644E-02, + 9.803921802644E-02); +#60786 = OVER_RIDING_STYLED_ITEM('overriding color',(#60787),#2945, + #60778); +#60787 = PRESENTATION_STYLE_ASSIGNMENT((#60788)); +#60788 = SURFACE_STYLE_USAGE(.BOTH.,#60789); +#60789 = SURFACE_SIDE_STYLE('',(#60790)); +#60790 = SURFACE_STYLE_FILL_AREA(#60791); +#60791 = FILL_AREA_STYLE('',(#60792)); +#60792 = FILL_AREA_STYLE_COLOUR('',#60437); +#60793 = OVER_RIDING_STYLED_ITEM('overriding color',(#60794),#3203, + #60778); +#60794 = PRESENTATION_STYLE_ASSIGNMENT((#60795)); +#60795 = SURFACE_STYLE_USAGE(.BOTH.,#60796); +#60796 = SURFACE_SIDE_STYLE('',(#60797)); +#60797 = SURFACE_STYLE_FILL_AREA(#60798); +#60798 = FILL_AREA_STYLE('',(#60799)); +#60799 = FILL_AREA_STYLE_COLOUR('',#60437); +#60800 = OVER_RIDING_STYLED_ITEM('overriding color',(#60801),#3275, + #60778); +#60801 = PRESENTATION_STYLE_ASSIGNMENT((#60802)); +#60802 = SURFACE_STYLE_USAGE(.BOTH.,#60803); +#60803 = SURFACE_SIDE_STYLE('',(#60804)); +#60804 = SURFACE_STYLE_FILL_AREA(#60805); +#60805 = FILL_AREA_STYLE('',(#60806)); +#60806 = FILL_AREA_STYLE_COLOUR('',#60437); +#60807 = OVER_RIDING_STYLED_ITEM('overriding color',(#60808),#3342, + #60778); +#60808 = PRESENTATION_STYLE_ASSIGNMENT((#60809)); +#60809 = SURFACE_STYLE_USAGE(.BOTH.,#60810); +#60810 = SURFACE_SIDE_STYLE('',(#60811)); +#60811 = SURFACE_STYLE_FILL_AREA(#60812); +#60812 = FILL_AREA_STYLE('',(#60813)); +#60813 = FILL_AREA_STYLE_COLOUR('',#60437); +#60814 = OVER_RIDING_STYLED_ITEM('overriding color',(#60815),#3409, + #60778); +#60815 = PRESENTATION_STYLE_ASSIGNMENT((#60816)); +#60816 = SURFACE_STYLE_USAGE(.BOTH.,#60817); +#60817 = SURFACE_SIDE_STYLE('',(#60818)); +#60818 = SURFACE_STYLE_FILL_AREA(#60819); +#60819 = FILL_AREA_STYLE('',(#60820)); +#60820 = FILL_AREA_STYLE_COLOUR('',#60437); +#60821 = OVER_RIDING_STYLED_ITEM('overriding color',(#60822),#3471, + #60778); +#60822 = PRESENTATION_STYLE_ASSIGNMENT((#60823)); +#60823 = SURFACE_STYLE_USAGE(.BOTH.,#60824); +#60824 = SURFACE_SIDE_STYLE('',(#60825)); +#60825 = SURFACE_STYLE_FILL_AREA(#60826); +#60826 = FILL_AREA_STYLE('',(#60827)); +#60827 = FILL_AREA_STYLE_COLOUR('',#60437); +#60828 = OVER_RIDING_STYLED_ITEM('overriding color',(#60829),#3564, + #60778); +#60829 = PRESENTATION_STYLE_ASSIGNMENT((#60830)); +#60830 = SURFACE_STYLE_USAGE(.BOTH.,#60831); +#60831 = SURFACE_SIDE_STYLE('',(#60832)); +#60832 = SURFACE_STYLE_FILL_AREA(#60833); +#60833 = FILL_AREA_STYLE('',(#60834)); +#60834 = FILL_AREA_STYLE_COLOUR('',#60437); +#60835 = OVER_RIDING_STYLED_ITEM('overriding color',(#60836),#3650, + #60778); +#60836 = PRESENTATION_STYLE_ASSIGNMENT((#60837)); +#60837 = SURFACE_STYLE_USAGE(.BOTH.,#60838); +#60838 = SURFACE_SIDE_STYLE('',(#60839)); +#60839 = SURFACE_STYLE_FILL_AREA(#60840); +#60840 = FILL_AREA_STYLE('',(#60841)); +#60841 = FILL_AREA_STYLE_COLOUR('',#60437); +#60842 = OVER_RIDING_STYLED_ITEM('overriding color',(#60843),#3712, + #60778); +#60843 = PRESENTATION_STYLE_ASSIGNMENT((#60844)); +#60844 = SURFACE_STYLE_USAGE(.BOTH.,#60845); +#60845 = SURFACE_SIDE_STYLE('',(#60846)); +#60846 = SURFACE_STYLE_FILL_AREA(#60847); +#60847 = FILL_AREA_STYLE('',(#60848)); +#60848 = FILL_AREA_STYLE_COLOUR('',#60437); +#60849 = OVER_RIDING_STYLED_ITEM('overriding color',(#60850),#3762, + #60778); +#60850 = PRESENTATION_STYLE_ASSIGNMENT((#60851)); +#60851 = SURFACE_STYLE_USAGE(.BOTH.,#60852); +#60852 = SURFACE_SIDE_STYLE('',(#60853)); +#60853 = SURFACE_STYLE_FILL_AREA(#60854); +#60854 = FILL_AREA_STYLE('',(#60855)); +#60855 = FILL_AREA_STYLE_COLOUR('',#60437); +#60856 = OVER_RIDING_STYLED_ITEM('overriding color',(#60857),#3854, + #60778); +#60857 = PRESENTATION_STYLE_ASSIGNMENT((#60858)); +#60858 = SURFACE_STYLE_USAGE(.BOTH.,#60859); +#60859 = SURFACE_SIDE_STYLE('',(#60860)); +#60860 = SURFACE_STYLE_FILL_AREA(#60861); +#60861 = FILL_AREA_STYLE('',(#60862)); +#60862 = FILL_AREA_STYLE_COLOUR('',#60437); +#60863 = OVER_RIDING_STYLED_ITEM('overriding color',(#60864),#4078, + #60778); +#60864 = PRESENTATION_STYLE_ASSIGNMENT((#60865)); +#60865 = SURFACE_STYLE_USAGE(.BOTH.,#60866); +#60866 = SURFACE_SIDE_STYLE('',(#60867)); +#60867 = SURFACE_STYLE_FILL_AREA(#60868); +#60868 = FILL_AREA_STYLE('',(#60869)); +#60869 = FILL_AREA_STYLE_COLOUR('',#60437); +#60870 = OVER_RIDING_STYLED_ITEM('overriding color',(#60871),#4100, + #60778); +#60871 = PRESENTATION_STYLE_ASSIGNMENT((#60872)); +#60872 = SURFACE_STYLE_USAGE(.BOTH.,#60873); +#60873 = SURFACE_SIDE_STYLE('',(#60874)); +#60874 = SURFACE_STYLE_FILL_AREA(#60875); +#60875 = FILL_AREA_STYLE('',(#60876)); +#60876 = FILL_AREA_STYLE_COLOUR('',#60437); +#60877 = OVER_RIDING_STYLED_ITEM('overriding color',(#60878),#4143, + #60778); +#60878 = PRESENTATION_STYLE_ASSIGNMENT((#60879)); +#60879 = SURFACE_STYLE_USAGE(.BOTH.,#60880); +#60880 = SURFACE_SIDE_STYLE('',(#60881)); +#60881 = SURFACE_STYLE_FILL_AREA(#60882); +#60882 = FILL_AREA_STYLE('',(#60883)); +#60883 = FILL_AREA_STYLE_COLOUR('',#60437); +#60884 = OVER_RIDING_STYLED_ITEM('overriding color',(#60885),#4186, + #60778); +#60885 = PRESENTATION_STYLE_ASSIGNMENT((#60886)); +#60886 = SURFACE_STYLE_USAGE(.BOTH.,#60887); +#60887 = SURFACE_SIDE_STYLE('',(#60888)); +#60888 = SURFACE_STYLE_FILL_AREA(#60889); +#60889 = FILL_AREA_STYLE('',(#60890)); +#60890 = FILL_AREA_STYLE_COLOUR('',#60437); +#60891 = OVER_RIDING_STYLED_ITEM('overriding color',(#60892),#4229, + #60778); +#60892 = PRESENTATION_STYLE_ASSIGNMENT((#60893)); +#60893 = SURFACE_STYLE_USAGE(.BOTH.,#60894); +#60894 = SURFACE_SIDE_STYLE('',(#60895)); +#60895 = SURFACE_STYLE_FILL_AREA(#60896); +#60896 = FILL_AREA_STYLE('',(#60897)); +#60897 = FILL_AREA_STYLE_COLOUR('',#60437); +#60898 = OVER_RIDING_STYLED_ITEM('overriding color',(#60899),#4280, + #60778); +#60899 = PRESENTATION_STYLE_ASSIGNMENT((#60900)); +#60900 = SURFACE_STYLE_USAGE(.BOTH.,#60901); +#60901 = SURFACE_SIDE_STYLE('',(#60902)); +#60902 = SURFACE_STYLE_FILL_AREA(#60903); +#60903 = FILL_AREA_STYLE('',(#60904)); +#60904 = FILL_AREA_STYLE_COLOUR('',#60437); +#60905 = OVER_RIDING_STYLED_ITEM('overriding color',(#60906),#4303, + #60778); +#60906 = PRESENTATION_STYLE_ASSIGNMENT((#60907)); +#60907 = SURFACE_STYLE_USAGE(.BOTH.,#60908); +#60908 = SURFACE_SIDE_STYLE('',(#60909)); +#60909 = SURFACE_STYLE_FILL_AREA(#60910); +#60910 = FILL_AREA_STYLE('',(#60911)); +#60911 = FILL_AREA_STYLE_COLOUR('',#60437); +#60912 = OVER_RIDING_STYLED_ITEM('overriding color',(#60913),#4320, + #60778); +#60913 = PRESENTATION_STYLE_ASSIGNMENT((#60914)); +#60914 = SURFACE_STYLE_USAGE(.BOTH.,#60915); +#60915 = SURFACE_SIDE_STYLE('',(#60916)); +#60916 = SURFACE_STYLE_FILL_AREA(#60917); +#60917 = FILL_AREA_STYLE('',(#60918)); +#60918 = FILL_AREA_STYLE_COLOUR('',#60437); +#60919 = OVER_RIDING_STYLED_ITEM('overriding color',(#60920),#4332, + #60778); +#60920 = PRESENTATION_STYLE_ASSIGNMENT((#60921)); +#60921 = SURFACE_STYLE_USAGE(.BOTH.,#60922); +#60922 = SURFACE_SIDE_STYLE('',(#60923)); +#60923 = SURFACE_STYLE_FILL_AREA(#60924); +#60924 = FILL_AREA_STYLE('',(#60925)); +#60925 = FILL_AREA_STYLE_COLOUR('',#60437); +#60926 = OVER_RIDING_STYLED_ITEM('overriding color',(#60927),#4413, + #60778); +#60927 = PRESENTATION_STYLE_ASSIGNMENT((#60928)); +#60928 = SURFACE_STYLE_USAGE(.BOTH.,#60929); +#60929 = SURFACE_SIDE_STYLE('',(#60930)); +#60930 = SURFACE_STYLE_FILL_AREA(#60931); +#60931 = FILL_AREA_STYLE('',(#60932)); +#60932 = FILL_AREA_STYLE_COLOUR('',#60437); +#60933 = OVER_RIDING_STYLED_ITEM('overriding color',(#60934),#4487, + #60778); +#60934 = PRESENTATION_STYLE_ASSIGNMENT((#60935)); +#60935 = SURFACE_STYLE_USAGE(.BOTH.,#60936); +#60936 = SURFACE_SIDE_STYLE('',(#60937)); +#60937 = SURFACE_STYLE_FILL_AREA(#60938); +#60938 = FILL_AREA_STYLE('',(#60939)); +#60939 = FILL_AREA_STYLE_COLOUR('',#60437); +#60940 = OVER_RIDING_STYLED_ITEM('overriding color',(#60941),#4561, + #60778); +#60941 = PRESENTATION_STYLE_ASSIGNMENT((#60942)); +#60942 = SURFACE_STYLE_USAGE(.BOTH.,#60943); +#60943 = SURFACE_SIDE_STYLE('',(#60944)); +#60944 = SURFACE_STYLE_FILL_AREA(#60945); +#60945 = FILL_AREA_STYLE('',(#60946)); +#60946 = FILL_AREA_STYLE_COLOUR('',#60437); +#60947 = OVER_RIDING_STYLED_ITEM('overriding color',(#60948),#4640, + #60778); +#60948 = PRESENTATION_STYLE_ASSIGNMENT((#60949)); +#60949 = SURFACE_STYLE_USAGE(.BOTH.,#60950); +#60950 = SURFACE_SIDE_STYLE('',(#60951)); +#60951 = SURFACE_STYLE_FILL_AREA(#60952); +#60952 = FILL_AREA_STYLE('',(#60953)); +#60953 = FILL_AREA_STYLE_COLOUR('',#60437); +#60954 = OVER_RIDING_STYLED_ITEM('overriding color',(#60955),#4898, + #60778); +#60955 = PRESENTATION_STYLE_ASSIGNMENT((#60956)); +#60956 = SURFACE_STYLE_USAGE(.BOTH.,#60957); +#60957 = SURFACE_SIDE_STYLE('',(#60958)); +#60958 = SURFACE_STYLE_FILL_AREA(#60959); +#60959 = FILL_AREA_STYLE('',(#60960)); +#60960 = FILL_AREA_STYLE_COLOUR('',#60437); +#60961 = OVER_RIDING_STYLED_ITEM('overriding color',(#60962),#4970, + #60778); +#60962 = PRESENTATION_STYLE_ASSIGNMENT((#60963)); +#60963 = SURFACE_STYLE_USAGE(.BOTH.,#60964); +#60964 = SURFACE_SIDE_STYLE('',(#60965)); +#60965 = SURFACE_STYLE_FILL_AREA(#60966); +#60966 = FILL_AREA_STYLE('',(#60967)); +#60967 = FILL_AREA_STYLE_COLOUR('',#60437); +#60968 = OVER_RIDING_STYLED_ITEM('overriding color',(#60969),#5037, + #60778); +#60969 = PRESENTATION_STYLE_ASSIGNMENT((#60970)); +#60970 = SURFACE_STYLE_USAGE(.BOTH.,#60971); +#60971 = SURFACE_SIDE_STYLE('',(#60972)); +#60972 = SURFACE_STYLE_FILL_AREA(#60973); +#60973 = FILL_AREA_STYLE('',(#60974)); +#60974 = FILL_AREA_STYLE_COLOUR('',#60437); +#60975 = OVER_RIDING_STYLED_ITEM('overriding color',(#60976),#5104, + #60778); +#60976 = PRESENTATION_STYLE_ASSIGNMENT((#60977)); +#60977 = SURFACE_STYLE_USAGE(.BOTH.,#60978); +#60978 = SURFACE_SIDE_STYLE('',(#60979)); +#60979 = SURFACE_STYLE_FILL_AREA(#60980); +#60980 = FILL_AREA_STYLE('',(#60981)); +#60981 = FILL_AREA_STYLE_COLOUR('',#60437); +#60982 = OVER_RIDING_STYLED_ITEM('overriding color',(#60983),#5166, + #60778); +#60983 = PRESENTATION_STYLE_ASSIGNMENT((#60984)); +#60984 = SURFACE_STYLE_USAGE(.BOTH.,#60985); +#60985 = SURFACE_SIDE_STYLE('',(#60986)); +#60986 = SURFACE_STYLE_FILL_AREA(#60987); +#60987 = FILL_AREA_STYLE('',(#60988)); +#60988 = FILL_AREA_STYLE_COLOUR('',#60437); +#60989 = OVER_RIDING_STYLED_ITEM('overriding color',(#60990),#5259, + #60778); +#60990 = PRESENTATION_STYLE_ASSIGNMENT((#60991)); +#60991 = SURFACE_STYLE_USAGE(.BOTH.,#60992); +#60992 = SURFACE_SIDE_STYLE('',(#60993)); +#60993 = SURFACE_STYLE_FILL_AREA(#60994); +#60994 = FILL_AREA_STYLE('',(#60995)); +#60995 = FILL_AREA_STYLE_COLOUR('',#60437); +#60996 = OVER_RIDING_STYLED_ITEM('overriding color',(#60997),#5345, + #60778); +#60997 = PRESENTATION_STYLE_ASSIGNMENT((#60998)); +#60998 = SURFACE_STYLE_USAGE(.BOTH.,#60999); +#60999 = SURFACE_SIDE_STYLE('',(#61000)); +#61000 = SURFACE_STYLE_FILL_AREA(#61001); +#61001 = FILL_AREA_STYLE('',(#61002)); +#61002 = FILL_AREA_STYLE_COLOUR('',#60437); +#61003 = OVER_RIDING_STYLED_ITEM('overriding color',(#61004),#5407, + #60778); +#61004 = PRESENTATION_STYLE_ASSIGNMENT((#61005)); +#61005 = SURFACE_STYLE_USAGE(.BOTH.,#61006); +#61006 = SURFACE_SIDE_STYLE('',(#61007)); +#61007 = SURFACE_STYLE_FILL_AREA(#61008); +#61008 = FILL_AREA_STYLE('',(#61009)); +#61009 = FILL_AREA_STYLE_COLOUR('',#60437); +#61010 = OVER_RIDING_STYLED_ITEM('overriding color',(#61011),#5457, + #60778); +#61011 = PRESENTATION_STYLE_ASSIGNMENT((#61012)); +#61012 = SURFACE_STYLE_USAGE(.BOTH.,#61013); +#61013 = SURFACE_SIDE_STYLE('',(#61014)); +#61014 = SURFACE_STYLE_FILL_AREA(#61015); +#61015 = FILL_AREA_STYLE('',(#61016)); +#61016 = FILL_AREA_STYLE_COLOUR('',#60437); +#61017 = OVER_RIDING_STYLED_ITEM('overriding color',(#61018),#5549, + #60778); +#61018 = PRESENTATION_STYLE_ASSIGNMENT((#61019)); +#61019 = SURFACE_STYLE_USAGE(.BOTH.,#61020); +#61020 = SURFACE_SIDE_STYLE('',(#61021)); +#61021 = SURFACE_STYLE_FILL_AREA(#61022); +#61022 = FILL_AREA_STYLE('',(#61023)); +#61023 = FILL_AREA_STYLE_COLOUR('',#60437); +#61024 = OVER_RIDING_STYLED_ITEM('overriding color',(#61025),#5618, + #60778); +#61025 = PRESENTATION_STYLE_ASSIGNMENT((#61026)); +#61026 = SURFACE_STYLE_USAGE(.BOTH.,#61027); +#61027 = SURFACE_SIDE_STYLE('',(#61028)); +#61028 = SURFACE_STYLE_FILL_AREA(#61029); +#61029 = FILL_AREA_STYLE('',(#61030)); +#61030 = FILL_AREA_STYLE_COLOUR('',#60437); +#61031 = OVER_RIDING_STYLED_ITEM('overriding color',(#61032),#5692, + #60778); +#61032 = PRESENTATION_STYLE_ASSIGNMENT((#61033)); +#61033 = SURFACE_STYLE_USAGE(.BOTH.,#61034); +#61034 = SURFACE_SIDE_STYLE('',(#61035)); +#61035 = SURFACE_STYLE_FILL_AREA(#61036); +#61036 = FILL_AREA_STYLE('',(#61037)); +#61037 = FILL_AREA_STYLE_COLOUR('',#60437); +#61038 = OVER_RIDING_STYLED_ITEM('overriding color',(#61039),#5754, + #60778); +#61039 = PRESENTATION_STYLE_ASSIGNMENT((#61040)); +#61040 = SURFACE_STYLE_USAGE(.BOTH.,#61041); +#61041 = SURFACE_SIDE_STYLE('',(#61042)); +#61042 = SURFACE_STYLE_FILL_AREA(#61043); +#61043 = FILL_AREA_STYLE('',(#61044)); +#61044 = FILL_AREA_STYLE_COLOUR('',#60437); +#61045 = OVER_RIDING_STYLED_ITEM('overriding color',(#61046),#5778, + #60778); +#61046 = PRESENTATION_STYLE_ASSIGNMENT((#61047)); +#61047 = SURFACE_STYLE_USAGE(.BOTH.,#61048); +#61048 = SURFACE_SIDE_STYLE('',(#61049)); +#61049 = SURFACE_STYLE_FILL_AREA(#61050); +#61050 = FILL_AREA_STYLE('',(#61051)); +#61051 = FILL_AREA_STYLE_COLOUR('',#60437); +#61052 = OVER_RIDING_STYLED_ITEM('overriding color',(#61053),#5852, + #60778); +#61053 = PRESENTATION_STYLE_ASSIGNMENT((#61054)); +#61054 = SURFACE_STYLE_USAGE(.BOTH.,#61055); +#61055 = SURFACE_SIDE_STYLE('',(#61056)); +#61056 = SURFACE_STYLE_FILL_AREA(#61057); +#61057 = FILL_AREA_STYLE('',(#61058)); +#61058 = FILL_AREA_STYLE_COLOUR('',#60437); +#61059 = OVER_RIDING_STYLED_ITEM('overriding color',(#61060),#5926, + #60778); +#61060 = PRESENTATION_STYLE_ASSIGNMENT((#61061)); +#61061 = SURFACE_STYLE_USAGE(.BOTH.,#61062); +#61062 = SURFACE_SIDE_STYLE('',(#61063)); +#61063 = SURFACE_STYLE_FILL_AREA(#61064); +#61064 = FILL_AREA_STYLE('',(#61065)); +#61065 = FILL_AREA_STYLE_COLOUR('',#60437); +#61066 = OVER_RIDING_STYLED_ITEM('overriding color',(#61067),#5976, + #60778); +#61067 = PRESENTATION_STYLE_ASSIGNMENT((#61068)); +#61068 = SURFACE_STYLE_USAGE(.BOTH.,#61069); +#61069 = SURFACE_SIDE_STYLE('',(#61070)); +#61070 = SURFACE_STYLE_FILL_AREA(#61071); +#61071 = FILL_AREA_STYLE('',(#61072)); +#61072 = FILL_AREA_STYLE_COLOUR('',#60437); +#61073 = OVER_RIDING_STYLED_ITEM('overriding color',(#61074),#6026, + #60778); +#61074 = PRESENTATION_STYLE_ASSIGNMENT((#61075)); +#61075 = SURFACE_STYLE_USAGE(.BOTH.,#61076); +#61076 = SURFACE_SIDE_STYLE('',(#61077)); +#61077 = SURFACE_STYLE_FILL_AREA(#61078); +#61078 = FILL_AREA_STYLE('',(#61079)); +#61079 = FILL_AREA_STYLE_COLOUR('',#60437); +#61080 = OVER_RIDING_STYLED_ITEM('overriding color',(#61081),#6050, + #60778); +#61081 = PRESENTATION_STYLE_ASSIGNMENT((#61082)); +#61082 = SURFACE_STYLE_USAGE(.BOTH.,#61083); +#61083 = SURFACE_SIDE_STYLE('',(#61084)); +#61084 = SURFACE_STYLE_FILL_AREA(#61085); +#61085 = FILL_AREA_STYLE('',(#61086)); +#61086 = FILL_AREA_STYLE_COLOUR('',#60437); +#61087 = OVER_RIDING_STYLED_ITEM('overriding color',(#61088),#6124, + #60778); +#61088 = PRESENTATION_STYLE_ASSIGNMENT((#61089)); +#61089 = SURFACE_STYLE_USAGE(.BOTH.,#61090); +#61090 = SURFACE_SIDE_STYLE('',(#61091)); +#61091 = SURFACE_STYLE_FILL_AREA(#61092); +#61092 = FILL_AREA_STYLE('',(#61093)); +#61093 = FILL_AREA_STYLE_COLOUR('',#60437); +#61094 = OVER_RIDING_STYLED_ITEM('overriding color',(#61095),#6186, + #60778); +#61095 = PRESENTATION_STYLE_ASSIGNMENT((#61096)); +#61096 = SURFACE_STYLE_USAGE(.BOTH.,#61097); +#61097 = SURFACE_SIDE_STYLE('',(#61098)); +#61098 = SURFACE_STYLE_FILL_AREA(#61099); +#61099 = FILL_AREA_STYLE('',(#61100)); +#61100 = FILL_AREA_STYLE_COLOUR('',#60437); +#61101 = OVER_RIDING_STYLED_ITEM('overriding color',(#61102),#6236, + #60778); +#61102 = PRESENTATION_STYLE_ASSIGNMENT((#61103)); +#61103 = SURFACE_STYLE_USAGE(.BOTH.,#61104); +#61104 = SURFACE_SIDE_STYLE('',(#61105)); +#61105 = SURFACE_STYLE_FILL_AREA(#61106); +#61106 = FILL_AREA_STYLE('',(#61107)); +#61107 = FILL_AREA_STYLE_COLOUR('',#60437); +#61108 = OVER_RIDING_STYLED_ITEM('overriding color',(#61109),#6274, + #60778); +#61109 = PRESENTATION_STYLE_ASSIGNMENT((#61110)); +#61110 = SURFACE_STYLE_USAGE(.BOTH.,#61111); +#61111 = SURFACE_SIDE_STYLE('',(#61112)); +#61112 = SURFACE_STYLE_FILL_AREA(#61113); +#61113 = FILL_AREA_STYLE('',(#61114)); +#61114 = FILL_AREA_STYLE_COLOUR('',#60437); +#61115 = OVER_RIDING_STYLED_ITEM('overriding color',(#61116),#6324, + #60778); +#61116 = PRESENTATION_STYLE_ASSIGNMENT((#61117)); +#61117 = SURFACE_STYLE_USAGE(.BOTH.,#61118); +#61118 = SURFACE_SIDE_STYLE('',(#61119)); +#61119 = SURFACE_STYLE_FILL_AREA(#61120); +#61120 = FILL_AREA_STYLE('',(#61121)); +#61121 = FILL_AREA_STYLE_COLOUR('',#60437); +#61122 = OVER_RIDING_STYLED_ITEM('overriding color',(#61123),#6386, + #60778); +#61123 = PRESENTATION_STYLE_ASSIGNMENT((#61124)); +#61124 = SURFACE_STYLE_USAGE(.BOTH.,#61125); +#61125 = SURFACE_SIDE_STYLE('',(#61126)); +#61126 = SURFACE_STYLE_FILL_AREA(#61127); +#61127 = FILL_AREA_STYLE('',(#61128)); +#61128 = FILL_AREA_STYLE_COLOUR('',#60437); +#61129 = OVER_RIDING_STYLED_ITEM('overriding color',(#61130),#6460, + #60778); +#61130 = PRESENTATION_STYLE_ASSIGNMENT((#61131)); +#61131 = SURFACE_STYLE_USAGE(.BOTH.,#61132); +#61132 = SURFACE_SIDE_STYLE('',(#61133)); +#61133 = SURFACE_STYLE_FILL_AREA(#61134); +#61134 = FILL_AREA_STYLE('',(#61135)); +#61135 = FILL_AREA_STYLE_COLOUR('',#60437); +#61136 = OVER_RIDING_STYLED_ITEM('overriding color',(#61137),#6477, + #60778); +#61137 = PRESENTATION_STYLE_ASSIGNMENT((#61138)); +#61138 = SURFACE_STYLE_USAGE(.BOTH.,#61139); +#61139 = SURFACE_SIDE_STYLE('',(#61140)); +#61140 = SURFACE_STYLE_FILL_AREA(#61141); +#61141 = FILL_AREA_STYLE('',(#61142)); +#61142 = FILL_AREA_STYLE_COLOUR('',#60437); +#61143 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #61144,#61152,#61156,#61160,#61164,#61168,#61175,#61179,#61183, + #61187,#61191,#61198,#61202,#61206,#61210,#61214,#61221,#61225, + #61229,#61233,#61237,#61241,#61248,#61252,#61256,#61263,#61267, + #61271,#61275,#61282,#61286,#61290,#61294,#61298,#61305,#61309, + #61313,#61317,#61324,#61331,#61335,#61342,#61346,#61353,#61357, + #61361,#61365,#61369,#61376,#61380,#61384,#61388,#61395,#61399, + #61403,#61410,#61414,#61421,#61425,#61429,#61436,#61443,#61450, + #61454,#61458,#61465,#61469,#61476,#61480,#61484,#61488,#61492, + #61499,#61503,#61507,#61511,#61515,#61522,#61526,#61530,#61534, + #61538,#61545,#61549,#61553,#61557,#61561,#61565,#61572,#61576, + #61580,#61587,#61591,#61595,#61599,#61606,#61610,#61614,#61618, + #61622,#61629,#61633,#61637,#61641,#61648,#61655,#61659,#61666, + #61670,#61677,#61681,#61685,#61689,#61693,#61700,#61704,#61708, + #61712,#61719,#61723,#61727,#61734,#61738,#61745,#61749,#61753, + #61760,#61767,#61774,#61778,#61782,#61789,#61793,#61800,#61804, + #61808,#61812,#61816,#61823,#61827,#61831,#61835,#61839,#61846, + #61850,#61854,#61858,#61862,#61869,#61873,#61877,#61881,#61885, + #61889,#61896,#61900,#61904,#61911,#61915,#61919,#61923,#61930, + #61934,#61938,#61942,#61946,#61953,#61957,#61961,#61965,#61972, + #61979,#61983,#61990,#61994,#62001,#62005,#62009,#62013,#62017, + #62024,#62028,#62032,#62036,#62043,#62047,#62051,#62058,#62062, + #62069,#62073,#62077,#62084,#62091,#62098,#62102,#62106,#62113, + #62117,#62124,#62128,#62132,#62136,#62140,#62147,#62151,#62155, + #62159,#62163,#62170,#62174,#62178,#62182,#62186,#62193,#62197, + #62201,#62205,#62209,#62213,#62220,#62224,#62228,#62235,#62239, + #62243,#62247,#62254,#62258,#62262,#62266,#62270,#62277,#62281, + #62285,#62289,#62296,#62303,#62307,#62314,#62318,#62325,#62329, + #62333,#62337,#62341,#62348,#62352,#62356,#62360,#62367,#62371, + #62375,#62382,#62386,#62393,#62397,#62401,#62408,#62415,#62422, + #62426,#62430,#62437,#62441,#62448,#62452,#62456,#62460,#62464, + #62471,#62475,#62479,#62483,#62487,#62494,#62498,#62502,#62506, + #62510,#62517,#62521,#62525,#62529,#62533,#62537,#62544,#62548, + #62552,#62559,#62563,#62567,#62571,#62578,#62582,#62586,#62590, + #62594,#62601,#62605,#62609,#62613,#62620,#62627,#62631,#62638, + #62642,#62649,#62653,#62657,#62661,#62665,#62672,#62676,#62680, + #62684,#62691,#62695,#62699,#62706,#62710,#62717,#62721,#62725, + #62732,#62739,#62746,#62750,#62754,#62761,#62765,#62772,#62776, + #62780,#62784,#62788,#62795,#62799,#62803,#62807,#62811,#62818, + #62822,#62826,#62830,#62834,#62841,#62845,#62849,#62853,#62857, + #62861,#62868,#62872,#62876,#62883,#62887,#62891,#62895,#62902, + #62906,#62910,#62914,#62918,#62925,#62929,#62933,#62937,#62944, + #62951,#62955,#62962,#62966,#62973,#62977,#62981,#62985,#62989, + #62996,#63000,#63004,#63008,#63015,#63019,#63023,#63030,#63034, + #63041,#63045,#63049,#63056,#63063,#63070,#63074,#63078,#63085, + #63089,#63096,#63100,#63104,#63108,#63112,#63119,#63123,#63127, + #63131,#63135,#63142,#63146,#63150,#63154,#63158,#63165,#63169, + #63173,#63177,#63181,#63185,#63192,#63196,#63200,#63207,#63211, + #63215,#63219,#63226,#63230,#63234,#63238,#63242,#63249,#63253, + #63257,#63261,#63268,#63275,#63279,#63286,#63290,#63297,#63301, + #63305,#63309,#63313,#63320,#63324,#63328,#63332,#63339,#63343, + #63347,#63354,#63358,#63365,#63369,#63373,#63380,#63387,#63394, + #63398,#63402,#63409,#63413,#63420,#63424,#63428,#63432,#63436, + #63443,#63447,#63451,#63455,#63459,#63466,#63470,#63474,#63478, + #63482,#63489,#63493,#63497,#63501,#63505,#63509,#63516,#63520, + #63524,#63531,#63535,#63539,#63543,#63550,#63554,#63558,#63562, + #63566,#63573,#63577,#63581,#63585,#63592,#63599,#63603,#63610, + #63614,#63621,#63625,#63629,#63633,#63637,#63644,#63648,#63652, + #63656,#63663,#63667,#63671,#63678,#63682,#63689,#63693,#63697, + #63704,#63711,#63718,#63722,#63726,#63733,#63737,#63744,#63748, + #63752,#63756,#63760,#63767,#63771,#63775,#63779,#63786,#63790, + #63794,#63798,#63805,#63809,#63813,#63817,#63821,#63825,#63832, + #63836,#63840,#63844,#63848,#63852,#63856,#63860,#63864,#63868, + #63872,#63876,#63880,#63884,#63891,#63895,#63899,#63903,#63910, + #63914,#63918,#63922,#63929,#63933,#63937,#63941,#63948,#63952, + #63956,#63960,#63967,#63971,#63975,#63982,#63986,#63993,#63997, + #64001,#64005,#64009,#64013,#64017,#64021,#64025,#64029,#64033, + #64037,#64041,#64045,#64049,#64053,#64057,#64061,#64065,#64069, + #64076,#64080,#64084,#64091,#64095,#64099,#64106,#64110,#64114, + #64121,#64125,#64129,#64136,#64140,#64147,#64154,#64158,#64162, + #64169,#64173,#64177,#64184,#64188,#64192,#64199,#64203,#64207, + #64214,#64218,#64225,#64232,#64236,#64240,#64247,#64251,#64258, + #64265,#64269,#64273,#64280,#64284,#64288,#64295,#64299,#64303, + #64310,#64314),#12228); +#61144 = STYLED_ITEM('color',(#61145),#6886); +#61145 = PRESENTATION_STYLE_ASSIGNMENT((#61146)); +#61146 = SURFACE_STYLE_USAGE(.BOTH.,#61147); +#61147 = SURFACE_SIDE_STYLE('',(#61148)); +#61148 = SURFACE_STYLE_FILL_AREA(#61149); +#61149 = FILL_AREA_STYLE('',(#61150)); +#61150 = FILL_AREA_STYLE_COLOUR('',#61151); +#61151 = COLOUR_RGB('',0.988235296747,0.878431390252,0.552941203986); +#61152 = OVER_RIDING_STYLED_ITEM('overriding color',(#61153),#6890, + #61144); +#61153 = PRESENTATION_STYLE_ASSIGNMENT((#61154)); +#61154 = CURVE_STYLE('',#61155,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61155 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61156 = OVER_RIDING_STYLED_ITEM('overriding color',(#61157),#6900, + #61144); +#61157 = PRESENTATION_STYLE_ASSIGNMENT((#61158)); +#61158 = CURVE_STYLE('',#61159,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61159 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61160 = OVER_RIDING_STYLED_ITEM('overriding color',(#61161),#6908, + #61144); +#61161 = PRESENTATION_STYLE_ASSIGNMENT((#61162)); +#61162 = CURVE_STYLE('',#61163,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61163 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61164 = OVER_RIDING_STYLED_ITEM('overriding color',(#61165),#6916, + #61144); +#61165 = PRESENTATION_STYLE_ASSIGNMENT((#61166)); +#61166 = CURVE_STYLE('',#61167,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61167 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61168 = STYLED_ITEM('color',(#61169),#6926); +#61169 = PRESENTATION_STYLE_ASSIGNMENT((#61170)); +#61170 = SURFACE_STYLE_USAGE(.BOTH.,#61171); +#61171 = SURFACE_SIDE_STYLE('',(#61172)); +#61172 = SURFACE_STYLE_FILL_AREA(#61173); +#61173 = FILL_AREA_STYLE('',(#61174)); +#61174 = FILL_AREA_STYLE_COLOUR('',#61151); +#61175 = OVER_RIDING_STYLED_ITEM('overriding color',(#61176),#6930, + #61168); +#61176 = PRESENTATION_STYLE_ASSIGNMENT((#61177)); +#61177 = CURVE_STYLE('',#61178,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61178 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61179 = OVER_RIDING_STYLED_ITEM('overriding color',(#61180),#6938, + #61168); +#61180 = PRESENTATION_STYLE_ASSIGNMENT((#61181)); +#61181 = CURVE_STYLE('',#61182,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61182 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61183 = OVER_RIDING_STYLED_ITEM('overriding color',(#61184),#6946, + #61168); +#61184 = PRESENTATION_STYLE_ASSIGNMENT((#61185)); +#61185 = CURVE_STYLE('',#61186,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61186 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61187 = OVER_RIDING_STYLED_ITEM('overriding color',(#61188),#6954, + #61168); +#61188 = PRESENTATION_STYLE_ASSIGNMENT((#61189)); +#61189 = CURVE_STYLE('',#61190,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61190 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61191 = STYLED_ITEM('color',(#61192),#6965); +#61192 = PRESENTATION_STYLE_ASSIGNMENT((#61193)); +#61193 = SURFACE_STYLE_USAGE(.BOTH.,#61194); +#61194 = SURFACE_SIDE_STYLE('',(#61195)); +#61195 = SURFACE_STYLE_FILL_AREA(#61196); +#61196 = FILL_AREA_STYLE('',(#61197)); +#61197 = FILL_AREA_STYLE_COLOUR('',#61151); +#61198 = OVER_RIDING_STYLED_ITEM('overriding color',(#61199),#6969, + #61191); +#61199 = PRESENTATION_STYLE_ASSIGNMENT((#61200)); +#61200 = CURVE_STYLE('',#61201,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61201 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61202 = OVER_RIDING_STYLED_ITEM('overriding color',(#61203),#6978, + #61191); +#61203 = PRESENTATION_STYLE_ASSIGNMENT((#61204)); +#61204 = CURVE_STYLE('',#61205,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61205 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61206 = OVER_RIDING_STYLED_ITEM('overriding color',(#61207),#6986, + #61191); +#61207 = PRESENTATION_STYLE_ASSIGNMENT((#61208)); +#61208 = CURVE_STYLE('',#61209,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61209 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61210 = OVER_RIDING_STYLED_ITEM('overriding color',(#61211),#6994, + #61191); +#61211 = PRESENTATION_STYLE_ASSIGNMENT((#61212)); +#61212 = CURVE_STYLE('',#61213,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61213 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61214 = STYLED_ITEM('color',(#61215),#7004); +#61215 = PRESENTATION_STYLE_ASSIGNMENT((#61216)); +#61216 = SURFACE_STYLE_USAGE(.BOTH.,#61217); +#61217 = SURFACE_SIDE_STYLE('',(#61218)); +#61218 = SURFACE_STYLE_FILL_AREA(#61219); +#61219 = FILL_AREA_STYLE('',(#61220)); +#61220 = FILL_AREA_STYLE_COLOUR('',#61151); +#61221 = OVER_RIDING_STYLED_ITEM('overriding color',(#61222),#7008, + #61214); +#61222 = PRESENTATION_STYLE_ASSIGNMENT((#61223)); +#61223 = CURVE_STYLE('',#61224,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61224 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61225 = OVER_RIDING_STYLED_ITEM('overriding color',(#61226),#7018, + #61214); +#61226 = PRESENTATION_STYLE_ASSIGNMENT((#61227)); +#61227 = CURVE_STYLE('',#61228,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61228 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61229 = OVER_RIDING_STYLED_ITEM('overriding color',(#61230),#7026, + #61214); +#61230 = PRESENTATION_STYLE_ASSIGNMENT((#61231)); +#61231 = CURVE_STYLE('',#61232,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61232 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61233 = OVER_RIDING_STYLED_ITEM('overriding color',(#61234),#7034, + #61214); +#61234 = PRESENTATION_STYLE_ASSIGNMENT((#61235)); +#61235 = CURVE_STYLE('',#61236,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61236 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61237 = OVER_RIDING_STYLED_ITEM('overriding color',(#61238),#7042, + #61214); +#61238 = PRESENTATION_STYLE_ASSIGNMENT((#61239)); +#61239 = CURVE_STYLE('',#61240,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61240 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61241 = STYLED_ITEM('color',(#61242),#7052); +#61242 = PRESENTATION_STYLE_ASSIGNMENT((#61243)); +#61243 = SURFACE_STYLE_USAGE(.BOTH.,#61244); +#61244 = SURFACE_SIDE_STYLE('',(#61245)); +#61245 = SURFACE_STYLE_FILL_AREA(#61246); +#61246 = FILL_AREA_STYLE('',(#61247)); +#61247 = FILL_AREA_STYLE_COLOUR('',#61151); +#61248 = OVER_RIDING_STYLED_ITEM('overriding color',(#61249),#7056, + #61241); +#61249 = PRESENTATION_STYLE_ASSIGNMENT((#61250)); +#61250 = CURVE_STYLE('',#61251,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61251 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61252 = OVER_RIDING_STYLED_ITEM('overriding color',(#61253),#7063, + #61241); +#61253 = PRESENTATION_STYLE_ASSIGNMENT((#61254)); +#61254 = CURVE_STYLE('',#61255,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61255 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61256 = STYLED_ITEM('color',(#61257),#7074); +#61257 = PRESENTATION_STYLE_ASSIGNMENT((#61258)); +#61258 = SURFACE_STYLE_USAGE(.BOTH.,#61259); +#61259 = SURFACE_SIDE_STYLE('',(#61260)); +#61260 = SURFACE_STYLE_FILL_AREA(#61261); +#61261 = FILL_AREA_STYLE('',(#61262)); +#61262 = FILL_AREA_STYLE_COLOUR('',#61151); +#61263 = OVER_RIDING_STYLED_ITEM('overriding color',(#61264),#7078, + #61256); +#61264 = PRESENTATION_STYLE_ASSIGNMENT((#61265)); +#61265 = CURVE_STYLE('',#61266,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61266 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61267 = OVER_RIDING_STYLED_ITEM('overriding color',(#61268),#7086, + #61256); +#61268 = PRESENTATION_STYLE_ASSIGNMENT((#61269)); +#61269 = CURVE_STYLE('',#61270,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61270 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61271 = OVER_RIDING_STYLED_ITEM('overriding color',(#61272),#7094, + #61256); +#61272 = PRESENTATION_STYLE_ASSIGNMENT((#61273)); +#61273 = CURVE_STYLE('',#61274,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61274 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61275 = STYLED_ITEM('color',(#61276),#7105); +#61276 = PRESENTATION_STYLE_ASSIGNMENT((#61277)); +#61277 = SURFACE_STYLE_USAGE(.BOTH.,#61278); +#61278 = SURFACE_SIDE_STYLE('',(#61279)); +#61279 = SURFACE_STYLE_FILL_AREA(#61280); +#61280 = FILL_AREA_STYLE('',(#61281)); +#61281 = FILL_AREA_STYLE_COLOUR('',#61151); +#61282 = OVER_RIDING_STYLED_ITEM('overriding color',(#61283),#7109, + #61275); +#61283 = PRESENTATION_STYLE_ASSIGNMENT((#61284)); +#61284 = CURVE_STYLE('',#61285,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61285 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61286 = OVER_RIDING_STYLED_ITEM('overriding color',(#61287),#7117, + #61275); +#61287 = PRESENTATION_STYLE_ASSIGNMENT((#61288)); +#61288 = CURVE_STYLE('',#61289,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61289 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61290 = OVER_RIDING_STYLED_ITEM('overriding color',(#61291),#7123, + #61275); +#61291 = PRESENTATION_STYLE_ASSIGNMENT((#61292)); +#61292 = CURVE_STYLE('',#61293,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61293 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61294 = OVER_RIDING_STYLED_ITEM('overriding color',(#61295),#7131, + #61275); +#61295 = PRESENTATION_STYLE_ASSIGNMENT((#61296)); +#61296 = CURVE_STYLE('',#61297,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61297 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61298 = STYLED_ITEM('color',(#61299),#7141); +#61299 = PRESENTATION_STYLE_ASSIGNMENT((#61300)); +#61300 = SURFACE_STYLE_USAGE(.BOTH.,#61301); +#61301 = SURFACE_SIDE_STYLE('',(#61302)); +#61302 = SURFACE_STYLE_FILL_AREA(#61303); +#61303 = FILL_AREA_STYLE('',(#61304)); +#61304 = FILL_AREA_STYLE_COLOUR('',#61151); +#61305 = OVER_RIDING_STYLED_ITEM('overriding color',(#61306),#7145, + #61298); +#61306 = PRESENTATION_STYLE_ASSIGNMENT((#61307)); +#61307 = CURVE_STYLE('',#61308,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61308 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61309 = OVER_RIDING_STYLED_ITEM('overriding color',(#61310),#7154, + #61298); +#61310 = PRESENTATION_STYLE_ASSIGNMENT((#61311)); +#61311 = CURVE_STYLE('',#61312,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61312 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61313 = OVER_RIDING_STYLED_ITEM('overriding color',(#61314),#7162, + #61298); +#61314 = PRESENTATION_STYLE_ASSIGNMENT((#61315)); +#61315 = CURVE_STYLE('',#61316,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61316 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61317 = STYLED_ITEM('color',(#61318),#7172); +#61318 = PRESENTATION_STYLE_ASSIGNMENT((#61319)); +#61319 = SURFACE_STYLE_USAGE(.BOTH.,#61320); +#61320 = SURFACE_SIDE_STYLE('',(#61321)); +#61321 = SURFACE_STYLE_FILL_AREA(#61322); +#61322 = FILL_AREA_STYLE('',(#61323)); +#61323 = FILL_AREA_STYLE_COLOUR('',#61151); +#61324 = STYLED_ITEM('color',(#61325),#7184); +#61325 = PRESENTATION_STYLE_ASSIGNMENT((#61326)); +#61326 = SURFACE_STYLE_USAGE(.BOTH.,#61327); +#61327 = SURFACE_SIDE_STYLE('',(#61328)); +#61328 = SURFACE_STYLE_FILL_AREA(#61329); +#61329 = FILL_AREA_STYLE('',(#61330)); +#61330 = FILL_AREA_STYLE_COLOUR('',#61151); +#61331 = OVER_RIDING_STYLED_ITEM('overriding color',(#61332),#7191, + #61324); +#61332 = PRESENTATION_STYLE_ASSIGNMENT((#61333)); +#61333 = CURVE_STYLE('',#61334,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61334 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61335 = STYLED_ITEM('color',(#61336),#7201); +#61336 = PRESENTATION_STYLE_ASSIGNMENT((#61337)); +#61337 = SURFACE_STYLE_USAGE(.BOTH.,#61338); +#61338 = SURFACE_SIDE_STYLE('',(#61339)); +#61339 = SURFACE_STYLE_FILL_AREA(#61340); +#61340 = FILL_AREA_STYLE('',(#61341)); +#61341 = FILL_AREA_STYLE_COLOUR('',#61151); +#61342 = OVER_RIDING_STYLED_ITEM('overriding color',(#61343),#7208, + #61335); +#61343 = PRESENTATION_STYLE_ASSIGNMENT((#61344)); +#61344 = CURVE_STYLE('',#61345,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61345 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61346 = STYLED_ITEM('color',(#61347),#7218); +#61347 = PRESENTATION_STYLE_ASSIGNMENT((#61348)); +#61348 = SURFACE_STYLE_USAGE(.BOTH.,#61349); +#61349 = SURFACE_SIDE_STYLE('',(#61350)); +#61350 = SURFACE_STYLE_FILL_AREA(#61351); +#61351 = FILL_AREA_STYLE('',(#61352)); +#61352 = FILL_AREA_STYLE_COLOUR('',#61151); +#61353 = OVER_RIDING_STYLED_ITEM('overriding color',(#61354),#7222, + #61346); +#61354 = PRESENTATION_STYLE_ASSIGNMENT((#61355)); +#61355 = CURVE_STYLE('',#61356,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61356 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61357 = OVER_RIDING_STYLED_ITEM('overriding color',(#61358),#7232, + #61346); +#61358 = PRESENTATION_STYLE_ASSIGNMENT((#61359)); +#61359 = CURVE_STYLE('',#61360,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61360 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61361 = OVER_RIDING_STYLED_ITEM('overriding color',(#61362),#7238, + #61346); +#61362 = PRESENTATION_STYLE_ASSIGNMENT((#61363)); +#61363 = CURVE_STYLE('',#61364,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61364 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61365 = OVER_RIDING_STYLED_ITEM('overriding color',(#61366),#7246, + #61346); +#61366 = PRESENTATION_STYLE_ASSIGNMENT((#61367)); +#61367 = CURVE_STYLE('',#61368,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61368 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61369 = STYLED_ITEM('color',(#61370),#7256); +#61370 = PRESENTATION_STYLE_ASSIGNMENT((#61371)); +#61371 = SURFACE_STYLE_USAGE(.BOTH.,#61372); +#61372 = SURFACE_SIDE_STYLE('',(#61373)); +#61373 = SURFACE_STYLE_FILL_AREA(#61374); +#61374 = FILL_AREA_STYLE('',(#61375)); +#61375 = FILL_AREA_STYLE_COLOUR('',#61151); +#61376 = OVER_RIDING_STYLED_ITEM('overriding color',(#61377),#7260, + #61369); +#61377 = PRESENTATION_STYLE_ASSIGNMENT((#61378)); +#61378 = CURVE_STYLE('',#61379,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61379 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61380 = OVER_RIDING_STYLED_ITEM('overriding color',(#61381),#7268, + #61369); +#61381 = PRESENTATION_STYLE_ASSIGNMENT((#61382)); +#61382 = CURVE_STYLE('',#61383,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61383 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61384 = OVER_RIDING_STYLED_ITEM('overriding color',(#61385),#7276, + #61369); +#61385 = PRESENTATION_STYLE_ASSIGNMENT((#61386)); +#61386 = CURVE_STYLE('',#61387,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61387 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61388 = STYLED_ITEM('color',(#61389),#7287); +#61389 = PRESENTATION_STYLE_ASSIGNMENT((#61390)); +#61390 = SURFACE_STYLE_USAGE(.BOTH.,#61391); +#61391 = SURFACE_SIDE_STYLE('',(#61392)); +#61392 = SURFACE_STYLE_FILL_AREA(#61393); +#61393 = FILL_AREA_STYLE('',(#61394)); +#61394 = FILL_AREA_STYLE_COLOUR('',#61151); +#61395 = OVER_RIDING_STYLED_ITEM('overriding color',(#61396),#7291, + #61388); +#61396 = PRESENTATION_STYLE_ASSIGNMENT((#61397)); +#61397 = CURVE_STYLE('',#61398,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61398 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61399 = OVER_RIDING_STYLED_ITEM('overriding color',(#61400),#7299, + #61388); +#61400 = PRESENTATION_STYLE_ASSIGNMENT((#61401)); +#61401 = CURVE_STYLE('',#61402,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61402 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61403 = STYLED_ITEM('color',(#61404),#7311); +#61404 = PRESENTATION_STYLE_ASSIGNMENT((#61405)); +#61405 = SURFACE_STYLE_USAGE(.BOTH.,#61406); +#61406 = SURFACE_SIDE_STYLE('',(#61407)); +#61407 = SURFACE_STYLE_FILL_AREA(#61408); +#61408 = FILL_AREA_STYLE('',(#61409)); +#61409 = FILL_AREA_STYLE_COLOUR('',#61151); +#61410 = OVER_RIDING_STYLED_ITEM('overriding color',(#61411),#7316, + #61403); +#61411 = PRESENTATION_STYLE_ASSIGNMENT((#61412)); +#61412 = CURVE_STYLE('',#61413,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61413 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61414 = STYLED_ITEM('color',(#61415),#7328); +#61415 = PRESENTATION_STYLE_ASSIGNMENT((#61416)); +#61416 = SURFACE_STYLE_USAGE(.BOTH.,#61417); +#61417 = SURFACE_SIDE_STYLE('',(#61418)); +#61418 = SURFACE_STYLE_FILL_AREA(#61419); +#61419 = FILL_AREA_STYLE('',(#61420)); +#61420 = FILL_AREA_STYLE_COLOUR('',#61151); +#61421 = OVER_RIDING_STYLED_ITEM('overriding color',(#61422),#7333, + #61414); +#61422 = PRESENTATION_STYLE_ASSIGNMENT((#61423)); +#61423 = CURVE_STYLE('',#61424,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61424 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61425 = OVER_RIDING_STYLED_ITEM('overriding color',(#61426),#7340, + #61414); +#61426 = PRESENTATION_STYLE_ASSIGNMENT((#61427)); +#61427 = CURVE_STYLE('',#61428,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61428 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61429 = STYLED_ITEM('color',(#61430),#7350); +#61430 = PRESENTATION_STYLE_ASSIGNMENT((#61431)); +#61431 = SURFACE_STYLE_USAGE(.BOTH.,#61432); +#61432 = SURFACE_SIDE_STYLE('',(#61433)); +#61433 = SURFACE_STYLE_FILL_AREA(#61434); +#61434 = FILL_AREA_STYLE('',(#61435)); +#61435 = FILL_AREA_STYLE_COLOUR('',#61151); +#61436 = STYLED_ITEM('color',(#61437),#7362); +#61437 = PRESENTATION_STYLE_ASSIGNMENT((#61438)); +#61438 = SURFACE_STYLE_USAGE(.BOTH.,#61439); +#61439 = SURFACE_SIDE_STYLE('',(#61440)); +#61440 = SURFACE_STYLE_FILL_AREA(#61441); +#61441 = FILL_AREA_STYLE('',(#61442)); +#61442 = FILL_AREA_STYLE_COLOUR('',#61151); +#61443 = STYLED_ITEM('color',(#61444),#7374); +#61444 = PRESENTATION_STYLE_ASSIGNMENT((#61445)); +#61445 = SURFACE_STYLE_USAGE(.BOTH.,#61446); +#61446 = SURFACE_SIDE_STYLE('',(#61447)); +#61447 = SURFACE_STYLE_FILL_AREA(#61448); +#61448 = FILL_AREA_STYLE('',(#61449)); +#61449 = FILL_AREA_STYLE_COLOUR('',#61151); +#61450 = OVER_RIDING_STYLED_ITEM('overriding color',(#61451),#7378, + #61443); +#61451 = PRESENTATION_STYLE_ASSIGNMENT((#61452)); +#61452 = CURVE_STYLE('',#61453,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61453 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61454 = OVER_RIDING_STYLED_ITEM('overriding color',(#61455),#7386, + #61443); +#61455 = PRESENTATION_STYLE_ASSIGNMENT((#61456)); +#61456 = CURVE_STYLE('',#61457,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61457 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61458 = STYLED_ITEM('color',(#61459),#7399); +#61459 = PRESENTATION_STYLE_ASSIGNMENT((#61460)); +#61460 = SURFACE_STYLE_USAGE(.BOTH.,#61461); +#61461 = SURFACE_SIDE_STYLE('',(#61462)); +#61462 = SURFACE_STYLE_FILL_AREA(#61463); +#61463 = FILL_AREA_STYLE('',(#61464)); +#61464 = FILL_AREA_STYLE_COLOUR('',#61151); +#61465 = OVER_RIDING_STYLED_ITEM('overriding color',(#61466),#7403, + #61458); +#61466 = PRESENTATION_STYLE_ASSIGNMENT((#61467)); +#61467 = CURVE_STYLE('',#61468,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61468 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61469 = STYLED_ITEM('color',(#61470),#7416); +#61470 = PRESENTATION_STYLE_ASSIGNMENT((#61471)); +#61471 = SURFACE_STYLE_USAGE(.BOTH.,#61472); +#61472 = SURFACE_SIDE_STYLE('',(#61473)); +#61473 = SURFACE_STYLE_FILL_AREA(#61474); +#61474 = FILL_AREA_STYLE('',(#61475)); +#61475 = FILL_AREA_STYLE_COLOUR('',#61151); +#61476 = OVER_RIDING_STYLED_ITEM('overriding color',(#61477),#7420, + #61469); +#61477 = PRESENTATION_STYLE_ASSIGNMENT((#61478)); +#61478 = CURVE_STYLE('',#61479,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61479 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61480 = OVER_RIDING_STYLED_ITEM('overriding color',(#61481),#7430, + #61469); +#61481 = PRESENTATION_STYLE_ASSIGNMENT((#61482)); +#61482 = CURVE_STYLE('',#61483,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61483 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61484 = OVER_RIDING_STYLED_ITEM('overriding color',(#61485),#7438, + #61469); +#61485 = PRESENTATION_STYLE_ASSIGNMENT((#61486)); +#61486 = CURVE_STYLE('',#61487,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61487 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61488 = OVER_RIDING_STYLED_ITEM('overriding color',(#61489),#7446, + #61469); +#61489 = PRESENTATION_STYLE_ASSIGNMENT((#61490)); +#61490 = CURVE_STYLE('',#61491,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61491 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61492 = STYLED_ITEM('color',(#61493),#7456); +#61493 = PRESENTATION_STYLE_ASSIGNMENT((#61494)); +#61494 = SURFACE_STYLE_USAGE(.BOTH.,#61495); +#61495 = SURFACE_SIDE_STYLE('',(#61496)); +#61496 = SURFACE_STYLE_FILL_AREA(#61497); +#61497 = FILL_AREA_STYLE('',(#61498)); +#61498 = FILL_AREA_STYLE_COLOUR('',#61151); +#61499 = OVER_RIDING_STYLED_ITEM('overriding color',(#61500),#7460, + #61492); +#61500 = PRESENTATION_STYLE_ASSIGNMENT((#61501)); +#61501 = CURVE_STYLE('',#61502,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61502 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61503 = OVER_RIDING_STYLED_ITEM('overriding color',(#61504),#7468, + #61492); +#61504 = PRESENTATION_STYLE_ASSIGNMENT((#61505)); +#61505 = CURVE_STYLE('',#61506,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61506 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61507 = OVER_RIDING_STYLED_ITEM('overriding color',(#61508),#7476, + #61492); +#61508 = PRESENTATION_STYLE_ASSIGNMENT((#61509)); +#61509 = CURVE_STYLE('',#61510,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61510 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61511 = OVER_RIDING_STYLED_ITEM('overriding color',(#61512),#7484, + #61492); +#61512 = PRESENTATION_STYLE_ASSIGNMENT((#61513)); +#61513 = CURVE_STYLE('',#61514,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61514 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61515 = STYLED_ITEM('color',(#61516),#7495); +#61516 = PRESENTATION_STYLE_ASSIGNMENT((#61517)); +#61517 = SURFACE_STYLE_USAGE(.BOTH.,#61518); +#61518 = SURFACE_SIDE_STYLE('',(#61519)); +#61519 = SURFACE_STYLE_FILL_AREA(#61520); +#61520 = FILL_AREA_STYLE('',(#61521)); +#61521 = FILL_AREA_STYLE_COLOUR('',#61151); +#61522 = OVER_RIDING_STYLED_ITEM('overriding color',(#61523),#7499, + #61515); +#61523 = PRESENTATION_STYLE_ASSIGNMENT((#61524)); +#61524 = CURVE_STYLE('',#61525,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61525 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61526 = OVER_RIDING_STYLED_ITEM('overriding color',(#61527),#7508, + #61515); +#61527 = PRESENTATION_STYLE_ASSIGNMENT((#61528)); +#61528 = CURVE_STYLE('',#61529,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61529 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61530 = OVER_RIDING_STYLED_ITEM('overriding color',(#61531),#7516, + #61515); +#61531 = PRESENTATION_STYLE_ASSIGNMENT((#61532)); +#61532 = CURVE_STYLE('',#61533,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61533 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61534 = OVER_RIDING_STYLED_ITEM('overriding color',(#61535),#7524, + #61515); +#61535 = PRESENTATION_STYLE_ASSIGNMENT((#61536)); +#61536 = CURVE_STYLE('',#61537,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61537 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61538 = STYLED_ITEM('color',(#61539),#7534); +#61539 = PRESENTATION_STYLE_ASSIGNMENT((#61540)); +#61540 = SURFACE_STYLE_USAGE(.BOTH.,#61541); +#61541 = SURFACE_SIDE_STYLE('',(#61542)); +#61542 = SURFACE_STYLE_FILL_AREA(#61543); +#61543 = FILL_AREA_STYLE('',(#61544)); +#61544 = FILL_AREA_STYLE_COLOUR('',#61151); +#61545 = OVER_RIDING_STYLED_ITEM('overriding color',(#61546),#7538, + #61538); +#61546 = PRESENTATION_STYLE_ASSIGNMENT((#61547)); +#61547 = CURVE_STYLE('',#61548,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61548 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61549 = OVER_RIDING_STYLED_ITEM('overriding color',(#61550),#7548, + #61538); +#61550 = PRESENTATION_STYLE_ASSIGNMENT((#61551)); +#61551 = CURVE_STYLE('',#61552,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61552 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61553 = OVER_RIDING_STYLED_ITEM('overriding color',(#61554),#7556, + #61538); +#61554 = PRESENTATION_STYLE_ASSIGNMENT((#61555)); +#61555 = CURVE_STYLE('',#61556,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61556 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61557 = OVER_RIDING_STYLED_ITEM('overriding color',(#61558),#7564, + #61538); +#61558 = PRESENTATION_STYLE_ASSIGNMENT((#61559)); +#61559 = CURVE_STYLE('',#61560,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61560 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61561 = OVER_RIDING_STYLED_ITEM('overriding color',(#61562),#7572, + #61538); +#61562 = PRESENTATION_STYLE_ASSIGNMENT((#61563)); +#61563 = CURVE_STYLE('',#61564,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61564 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61565 = STYLED_ITEM('color',(#61566),#7582); +#61566 = PRESENTATION_STYLE_ASSIGNMENT((#61567)); +#61567 = SURFACE_STYLE_USAGE(.BOTH.,#61568); +#61568 = SURFACE_SIDE_STYLE('',(#61569)); +#61569 = SURFACE_STYLE_FILL_AREA(#61570); +#61570 = FILL_AREA_STYLE('',(#61571)); +#61571 = FILL_AREA_STYLE_COLOUR('',#61151); +#61572 = OVER_RIDING_STYLED_ITEM('overriding color',(#61573),#7586, + #61565); +#61573 = PRESENTATION_STYLE_ASSIGNMENT((#61574)); +#61574 = CURVE_STYLE('',#61575,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61575 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61576 = OVER_RIDING_STYLED_ITEM('overriding color',(#61577),#7593, + #61565); +#61577 = PRESENTATION_STYLE_ASSIGNMENT((#61578)); +#61578 = CURVE_STYLE('',#61579,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61579 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61580 = STYLED_ITEM('color',(#61581),#7604); +#61581 = PRESENTATION_STYLE_ASSIGNMENT((#61582)); +#61582 = SURFACE_STYLE_USAGE(.BOTH.,#61583); +#61583 = SURFACE_SIDE_STYLE('',(#61584)); +#61584 = SURFACE_STYLE_FILL_AREA(#61585); +#61585 = FILL_AREA_STYLE('',(#61586)); +#61586 = FILL_AREA_STYLE_COLOUR('',#61151); +#61587 = OVER_RIDING_STYLED_ITEM('overriding color',(#61588),#7608, + #61580); +#61588 = PRESENTATION_STYLE_ASSIGNMENT((#61589)); +#61589 = CURVE_STYLE('',#61590,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61590 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61591 = OVER_RIDING_STYLED_ITEM('overriding color',(#61592),#7616, + #61580); +#61592 = PRESENTATION_STYLE_ASSIGNMENT((#61593)); +#61593 = CURVE_STYLE('',#61594,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61594 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61595 = OVER_RIDING_STYLED_ITEM('overriding color',(#61596),#7624, + #61580); +#61596 = PRESENTATION_STYLE_ASSIGNMENT((#61597)); +#61597 = CURVE_STYLE('',#61598,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61598 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61599 = STYLED_ITEM('color',(#61600),#7635); +#61600 = PRESENTATION_STYLE_ASSIGNMENT((#61601)); +#61601 = SURFACE_STYLE_USAGE(.BOTH.,#61602); +#61602 = SURFACE_SIDE_STYLE('',(#61603)); +#61603 = SURFACE_STYLE_FILL_AREA(#61604); +#61604 = FILL_AREA_STYLE('',(#61605)); +#61605 = FILL_AREA_STYLE_COLOUR('',#61151); +#61606 = OVER_RIDING_STYLED_ITEM('overriding color',(#61607),#7639, + #61599); +#61607 = PRESENTATION_STYLE_ASSIGNMENT((#61608)); +#61608 = CURVE_STYLE('',#61609,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61609 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61610 = OVER_RIDING_STYLED_ITEM('overriding color',(#61611),#7647, + #61599); +#61611 = PRESENTATION_STYLE_ASSIGNMENT((#61612)); +#61612 = CURVE_STYLE('',#61613,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61613 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61614 = OVER_RIDING_STYLED_ITEM('overriding color',(#61615),#7653, + #61599); +#61615 = PRESENTATION_STYLE_ASSIGNMENT((#61616)); +#61616 = CURVE_STYLE('',#61617,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61617 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61618 = OVER_RIDING_STYLED_ITEM('overriding color',(#61619),#7661, + #61599); +#61619 = PRESENTATION_STYLE_ASSIGNMENT((#61620)); +#61620 = CURVE_STYLE('',#61621,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61621 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61622 = STYLED_ITEM('color',(#61623),#7671); +#61623 = PRESENTATION_STYLE_ASSIGNMENT((#61624)); +#61624 = SURFACE_STYLE_USAGE(.BOTH.,#61625); +#61625 = SURFACE_SIDE_STYLE('',(#61626)); +#61626 = SURFACE_STYLE_FILL_AREA(#61627); +#61627 = FILL_AREA_STYLE('',(#61628)); +#61628 = FILL_AREA_STYLE_COLOUR('',#61151); +#61629 = OVER_RIDING_STYLED_ITEM('overriding color',(#61630),#7675, + #61622); +#61630 = PRESENTATION_STYLE_ASSIGNMENT((#61631)); +#61631 = CURVE_STYLE('',#61632,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61632 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61633 = OVER_RIDING_STYLED_ITEM('overriding color',(#61634),#7684, + #61622); +#61634 = PRESENTATION_STYLE_ASSIGNMENT((#61635)); +#61635 = CURVE_STYLE('',#61636,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61636 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61637 = OVER_RIDING_STYLED_ITEM('overriding color',(#61638),#7692, + #61622); +#61638 = PRESENTATION_STYLE_ASSIGNMENT((#61639)); +#61639 = CURVE_STYLE('',#61640,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61640 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61641 = STYLED_ITEM('color',(#61642),#7702); +#61642 = PRESENTATION_STYLE_ASSIGNMENT((#61643)); +#61643 = SURFACE_STYLE_USAGE(.BOTH.,#61644); +#61644 = SURFACE_SIDE_STYLE('',(#61645)); +#61645 = SURFACE_STYLE_FILL_AREA(#61646); +#61646 = FILL_AREA_STYLE('',(#61647)); +#61647 = FILL_AREA_STYLE_COLOUR('',#61151); +#61648 = STYLED_ITEM('color',(#61649),#7714); +#61649 = PRESENTATION_STYLE_ASSIGNMENT((#61650)); +#61650 = SURFACE_STYLE_USAGE(.BOTH.,#61651); +#61651 = SURFACE_SIDE_STYLE('',(#61652)); +#61652 = SURFACE_STYLE_FILL_AREA(#61653); +#61653 = FILL_AREA_STYLE('',(#61654)); +#61654 = FILL_AREA_STYLE_COLOUR('',#61151); +#61655 = OVER_RIDING_STYLED_ITEM('overriding color',(#61656),#7721, + #61648); +#61656 = PRESENTATION_STYLE_ASSIGNMENT((#61657)); +#61657 = CURVE_STYLE('',#61658,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61658 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61659 = STYLED_ITEM('color',(#61660),#7731); +#61660 = PRESENTATION_STYLE_ASSIGNMENT((#61661)); +#61661 = SURFACE_STYLE_USAGE(.BOTH.,#61662); +#61662 = SURFACE_SIDE_STYLE('',(#61663)); +#61663 = SURFACE_STYLE_FILL_AREA(#61664); +#61664 = FILL_AREA_STYLE('',(#61665)); +#61665 = FILL_AREA_STYLE_COLOUR('',#61151); +#61666 = OVER_RIDING_STYLED_ITEM('overriding color',(#61667),#7738, + #61659); +#61667 = PRESENTATION_STYLE_ASSIGNMENT((#61668)); +#61668 = CURVE_STYLE('',#61669,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61669 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61670 = STYLED_ITEM('color',(#61671),#7748); +#61671 = PRESENTATION_STYLE_ASSIGNMENT((#61672)); +#61672 = SURFACE_STYLE_USAGE(.BOTH.,#61673); +#61673 = SURFACE_SIDE_STYLE('',(#61674)); +#61674 = SURFACE_STYLE_FILL_AREA(#61675); +#61675 = FILL_AREA_STYLE('',(#61676)); +#61676 = FILL_AREA_STYLE_COLOUR('',#61151); +#61677 = OVER_RIDING_STYLED_ITEM('overriding color',(#61678),#7752, + #61670); +#61678 = PRESENTATION_STYLE_ASSIGNMENT((#61679)); +#61679 = CURVE_STYLE('',#61680,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61680 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61681 = OVER_RIDING_STYLED_ITEM('overriding color',(#61682),#7762, + #61670); +#61682 = PRESENTATION_STYLE_ASSIGNMENT((#61683)); +#61683 = CURVE_STYLE('',#61684,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61684 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61685 = OVER_RIDING_STYLED_ITEM('overriding color',(#61686),#7768, + #61670); +#61686 = PRESENTATION_STYLE_ASSIGNMENT((#61687)); +#61687 = CURVE_STYLE('',#61688,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61688 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61689 = OVER_RIDING_STYLED_ITEM('overriding color',(#61690),#7776, + #61670); +#61690 = PRESENTATION_STYLE_ASSIGNMENT((#61691)); +#61691 = CURVE_STYLE('',#61692,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61692 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61693 = STYLED_ITEM('color',(#61694),#7786); +#61694 = PRESENTATION_STYLE_ASSIGNMENT((#61695)); +#61695 = SURFACE_STYLE_USAGE(.BOTH.,#61696); +#61696 = SURFACE_SIDE_STYLE('',(#61697)); +#61697 = SURFACE_STYLE_FILL_AREA(#61698); +#61698 = FILL_AREA_STYLE('',(#61699)); +#61699 = FILL_AREA_STYLE_COLOUR('',#61151); +#61700 = OVER_RIDING_STYLED_ITEM('overriding color',(#61701),#7790, + #61693); +#61701 = PRESENTATION_STYLE_ASSIGNMENT((#61702)); +#61702 = CURVE_STYLE('',#61703,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61703 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61704 = OVER_RIDING_STYLED_ITEM('overriding color',(#61705),#7798, + #61693); +#61705 = PRESENTATION_STYLE_ASSIGNMENT((#61706)); +#61706 = CURVE_STYLE('',#61707,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61707 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61708 = OVER_RIDING_STYLED_ITEM('overriding color',(#61709),#7806, + #61693); +#61709 = PRESENTATION_STYLE_ASSIGNMENT((#61710)); +#61710 = CURVE_STYLE('',#61711,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61711 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61712 = STYLED_ITEM('color',(#61713),#7817); +#61713 = PRESENTATION_STYLE_ASSIGNMENT((#61714)); +#61714 = SURFACE_STYLE_USAGE(.BOTH.,#61715); +#61715 = SURFACE_SIDE_STYLE('',(#61716)); +#61716 = SURFACE_STYLE_FILL_AREA(#61717); +#61717 = FILL_AREA_STYLE('',(#61718)); +#61718 = FILL_AREA_STYLE_COLOUR('',#61151); +#61719 = OVER_RIDING_STYLED_ITEM('overriding color',(#61720),#7821, + #61712); +#61720 = PRESENTATION_STYLE_ASSIGNMENT((#61721)); +#61721 = CURVE_STYLE('',#61722,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61722 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61723 = OVER_RIDING_STYLED_ITEM('overriding color',(#61724),#7829, + #61712); +#61724 = PRESENTATION_STYLE_ASSIGNMENT((#61725)); +#61725 = CURVE_STYLE('',#61726,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61726 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61727 = STYLED_ITEM('color',(#61728),#7841); +#61728 = PRESENTATION_STYLE_ASSIGNMENT((#61729)); +#61729 = SURFACE_STYLE_USAGE(.BOTH.,#61730); +#61730 = SURFACE_SIDE_STYLE('',(#61731)); +#61731 = SURFACE_STYLE_FILL_AREA(#61732); +#61732 = FILL_AREA_STYLE('',(#61733)); +#61733 = FILL_AREA_STYLE_COLOUR('',#61151); +#61734 = OVER_RIDING_STYLED_ITEM('overriding color',(#61735),#7846, + #61727); +#61735 = PRESENTATION_STYLE_ASSIGNMENT((#61736)); +#61736 = CURVE_STYLE('',#61737,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61737 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61738 = STYLED_ITEM('color',(#61739),#7858); +#61739 = PRESENTATION_STYLE_ASSIGNMENT((#61740)); +#61740 = SURFACE_STYLE_USAGE(.BOTH.,#61741); +#61741 = SURFACE_SIDE_STYLE('',(#61742)); +#61742 = SURFACE_STYLE_FILL_AREA(#61743); +#61743 = FILL_AREA_STYLE('',(#61744)); +#61744 = FILL_AREA_STYLE_COLOUR('',#61151); +#61745 = OVER_RIDING_STYLED_ITEM('overriding color',(#61746),#7863, + #61738); +#61746 = PRESENTATION_STYLE_ASSIGNMENT((#61747)); +#61747 = CURVE_STYLE('',#61748,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61748 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61749 = OVER_RIDING_STYLED_ITEM('overriding color',(#61750),#7870, + #61738); +#61750 = PRESENTATION_STYLE_ASSIGNMENT((#61751)); +#61751 = CURVE_STYLE('',#61752,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61752 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61753 = STYLED_ITEM('color',(#61754),#7880); +#61754 = PRESENTATION_STYLE_ASSIGNMENT((#61755)); +#61755 = SURFACE_STYLE_USAGE(.BOTH.,#61756); +#61756 = SURFACE_SIDE_STYLE('',(#61757)); +#61757 = SURFACE_STYLE_FILL_AREA(#61758); +#61758 = FILL_AREA_STYLE('',(#61759)); +#61759 = FILL_AREA_STYLE_COLOUR('',#61151); +#61760 = STYLED_ITEM('color',(#61761),#7892); +#61761 = PRESENTATION_STYLE_ASSIGNMENT((#61762)); +#61762 = SURFACE_STYLE_USAGE(.BOTH.,#61763); +#61763 = SURFACE_SIDE_STYLE('',(#61764)); +#61764 = SURFACE_STYLE_FILL_AREA(#61765); +#61765 = FILL_AREA_STYLE('',(#61766)); +#61766 = FILL_AREA_STYLE_COLOUR('',#61151); +#61767 = STYLED_ITEM('color',(#61768),#7904); +#61768 = PRESENTATION_STYLE_ASSIGNMENT((#61769)); +#61769 = SURFACE_STYLE_USAGE(.BOTH.,#61770); +#61770 = SURFACE_SIDE_STYLE('',(#61771)); +#61771 = SURFACE_STYLE_FILL_AREA(#61772); +#61772 = FILL_AREA_STYLE('',(#61773)); +#61773 = FILL_AREA_STYLE_COLOUR('',#61151); +#61774 = OVER_RIDING_STYLED_ITEM('overriding color',(#61775),#7908, + #61767); +#61775 = PRESENTATION_STYLE_ASSIGNMENT((#61776)); +#61776 = CURVE_STYLE('',#61777,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61777 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61778 = OVER_RIDING_STYLED_ITEM('overriding color',(#61779),#7916, + #61767); +#61779 = PRESENTATION_STYLE_ASSIGNMENT((#61780)); +#61780 = CURVE_STYLE('',#61781,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61781 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61782 = STYLED_ITEM('color',(#61783),#7929); +#61783 = PRESENTATION_STYLE_ASSIGNMENT((#61784)); +#61784 = SURFACE_STYLE_USAGE(.BOTH.,#61785); +#61785 = SURFACE_SIDE_STYLE('',(#61786)); +#61786 = SURFACE_STYLE_FILL_AREA(#61787); +#61787 = FILL_AREA_STYLE('',(#61788)); +#61788 = FILL_AREA_STYLE_COLOUR('',#61151); +#61789 = OVER_RIDING_STYLED_ITEM('overriding color',(#61790),#7933, + #61782); +#61790 = PRESENTATION_STYLE_ASSIGNMENT((#61791)); +#61791 = CURVE_STYLE('',#61792,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61792 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61793 = STYLED_ITEM('color',(#61794),#7946); +#61794 = PRESENTATION_STYLE_ASSIGNMENT((#61795)); +#61795 = SURFACE_STYLE_USAGE(.BOTH.,#61796); +#61796 = SURFACE_SIDE_STYLE('',(#61797)); +#61797 = SURFACE_STYLE_FILL_AREA(#61798); +#61798 = FILL_AREA_STYLE('',(#61799)); +#61799 = FILL_AREA_STYLE_COLOUR('',#61151); +#61800 = OVER_RIDING_STYLED_ITEM('overriding color',(#61801),#7950, + #61793); +#61801 = PRESENTATION_STYLE_ASSIGNMENT((#61802)); +#61802 = CURVE_STYLE('',#61803,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61803 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61804 = OVER_RIDING_STYLED_ITEM('overriding color',(#61805),#7960, + #61793); +#61805 = PRESENTATION_STYLE_ASSIGNMENT((#61806)); +#61806 = CURVE_STYLE('',#61807,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61807 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61808 = OVER_RIDING_STYLED_ITEM('overriding color',(#61809),#7968, + #61793); +#61809 = PRESENTATION_STYLE_ASSIGNMENT((#61810)); +#61810 = CURVE_STYLE('',#61811,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61811 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61812 = OVER_RIDING_STYLED_ITEM('overriding color',(#61813),#7976, + #61793); +#61813 = PRESENTATION_STYLE_ASSIGNMENT((#61814)); +#61814 = CURVE_STYLE('',#61815,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61815 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61816 = STYLED_ITEM('color',(#61817),#7986); +#61817 = PRESENTATION_STYLE_ASSIGNMENT((#61818)); +#61818 = SURFACE_STYLE_USAGE(.BOTH.,#61819); +#61819 = SURFACE_SIDE_STYLE('',(#61820)); +#61820 = SURFACE_STYLE_FILL_AREA(#61821); +#61821 = FILL_AREA_STYLE('',(#61822)); +#61822 = FILL_AREA_STYLE_COLOUR('',#61151); +#61823 = OVER_RIDING_STYLED_ITEM('overriding color',(#61824),#7990, + #61816); +#61824 = PRESENTATION_STYLE_ASSIGNMENT((#61825)); +#61825 = CURVE_STYLE('',#61826,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61826 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61827 = OVER_RIDING_STYLED_ITEM('overriding color',(#61828),#7998, + #61816); +#61828 = PRESENTATION_STYLE_ASSIGNMENT((#61829)); +#61829 = CURVE_STYLE('',#61830,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61830 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61831 = OVER_RIDING_STYLED_ITEM('overriding color',(#61832),#8006, + #61816); +#61832 = PRESENTATION_STYLE_ASSIGNMENT((#61833)); +#61833 = CURVE_STYLE('',#61834,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61834 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61835 = OVER_RIDING_STYLED_ITEM('overriding color',(#61836),#8014, + #61816); +#61836 = PRESENTATION_STYLE_ASSIGNMENT((#61837)); +#61837 = CURVE_STYLE('',#61838,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61838 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61839 = STYLED_ITEM('color',(#61840),#8025); +#61840 = PRESENTATION_STYLE_ASSIGNMENT((#61841)); +#61841 = SURFACE_STYLE_USAGE(.BOTH.,#61842); +#61842 = SURFACE_SIDE_STYLE('',(#61843)); +#61843 = SURFACE_STYLE_FILL_AREA(#61844); +#61844 = FILL_AREA_STYLE('',(#61845)); +#61845 = FILL_AREA_STYLE_COLOUR('',#61151); +#61846 = OVER_RIDING_STYLED_ITEM('overriding color',(#61847),#8029, + #61839); +#61847 = PRESENTATION_STYLE_ASSIGNMENT((#61848)); +#61848 = CURVE_STYLE('',#61849,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61849 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61850 = OVER_RIDING_STYLED_ITEM('overriding color',(#61851),#8038, + #61839); +#61851 = PRESENTATION_STYLE_ASSIGNMENT((#61852)); +#61852 = CURVE_STYLE('',#61853,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61853 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61854 = OVER_RIDING_STYLED_ITEM('overriding color',(#61855),#8046, + #61839); +#61855 = PRESENTATION_STYLE_ASSIGNMENT((#61856)); +#61856 = CURVE_STYLE('',#61857,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61857 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61858 = OVER_RIDING_STYLED_ITEM('overriding color',(#61859),#8054, + #61839); +#61859 = PRESENTATION_STYLE_ASSIGNMENT((#61860)); +#61860 = CURVE_STYLE('',#61861,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61861 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61862 = STYLED_ITEM('color',(#61863),#8064); +#61863 = PRESENTATION_STYLE_ASSIGNMENT((#61864)); +#61864 = SURFACE_STYLE_USAGE(.BOTH.,#61865); +#61865 = SURFACE_SIDE_STYLE('',(#61866)); +#61866 = SURFACE_STYLE_FILL_AREA(#61867); +#61867 = FILL_AREA_STYLE('',(#61868)); +#61868 = FILL_AREA_STYLE_COLOUR('',#61151); +#61869 = OVER_RIDING_STYLED_ITEM('overriding color',(#61870),#8068, + #61862); +#61870 = PRESENTATION_STYLE_ASSIGNMENT((#61871)); +#61871 = CURVE_STYLE('',#61872,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61872 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61873 = OVER_RIDING_STYLED_ITEM('overriding color',(#61874),#8078, + #61862); +#61874 = PRESENTATION_STYLE_ASSIGNMENT((#61875)); +#61875 = CURVE_STYLE('',#61876,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61876 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61877 = OVER_RIDING_STYLED_ITEM('overriding color',(#61878),#8086, + #61862); +#61878 = PRESENTATION_STYLE_ASSIGNMENT((#61879)); +#61879 = CURVE_STYLE('',#61880,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61880 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61881 = OVER_RIDING_STYLED_ITEM('overriding color',(#61882),#8094, + #61862); +#61882 = PRESENTATION_STYLE_ASSIGNMENT((#61883)); +#61883 = CURVE_STYLE('',#61884,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61884 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61885 = OVER_RIDING_STYLED_ITEM('overriding color',(#61886),#8102, + #61862); +#61886 = PRESENTATION_STYLE_ASSIGNMENT((#61887)); +#61887 = CURVE_STYLE('',#61888,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61888 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61889 = STYLED_ITEM('color',(#61890),#8112); +#61890 = PRESENTATION_STYLE_ASSIGNMENT((#61891)); +#61891 = SURFACE_STYLE_USAGE(.BOTH.,#61892); +#61892 = SURFACE_SIDE_STYLE('',(#61893)); +#61893 = SURFACE_STYLE_FILL_AREA(#61894); +#61894 = FILL_AREA_STYLE('',(#61895)); +#61895 = FILL_AREA_STYLE_COLOUR('',#61151); +#61896 = OVER_RIDING_STYLED_ITEM('overriding color',(#61897),#8116, + #61889); +#61897 = PRESENTATION_STYLE_ASSIGNMENT((#61898)); +#61898 = CURVE_STYLE('',#61899,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61899 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61900 = OVER_RIDING_STYLED_ITEM('overriding color',(#61901),#8123, + #61889); +#61901 = PRESENTATION_STYLE_ASSIGNMENT((#61902)); +#61902 = CURVE_STYLE('',#61903,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61903 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61904 = STYLED_ITEM('color',(#61905),#8134); +#61905 = PRESENTATION_STYLE_ASSIGNMENT((#61906)); +#61906 = SURFACE_STYLE_USAGE(.BOTH.,#61907); +#61907 = SURFACE_SIDE_STYLE('',(#61908)); +#61908 = SURFACE_STYLE_FILL_AREA(#61909); +#61909 = FILL_AREA_STYLE('',(#61910)); +#61910 = FILL_AREA_STYLE_COLOUR('',#61151); +#61911 = OVER_RIDING_STYLED_ITEM('overriding color',(#61912),#8138, + #61904); +#61912 = PRESENTATION_STYLE_ASSIGNMENT((#61913)); +#61913 = CURVE_STYLE('',#61914,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#61914 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61915 = OVER_RIDING_STYLED_ITEM('overriding color',(#61916),#8146, + #61904); +#61916 = PRESENTATION_STYLE_ASSIGNMENT((#61917)); +#61917 = CURVE_STYLE('',#61918,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61918 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61919 = OVER_RIDING_STYLED_ITEM('overriding color',(#61920),#8154, + #61904); +#61920 = PRESENTATION_STYLE_ASSIGNMENT((#61921)); +#61921 = CURVE_STYLE('',#61922,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61922 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61923 = STYLED_ITEM('color',(#61924),#8165); +#61924 = PRESENTATION_STYLE_ASSIGNMENT((#61925)); +#61925 = SURFACE_STYLE_USAGE(.BOTH.,#61926); +#61926 = SURFACE_SIDE_STYLE('',(#61927)); +#61927 = SURFACE_STYLE_FILL_AREA(#61928); +#61928 = FILL_AREA_STYLE('',(#61929)); +#61929 = FILL_AREA_STYLE_COLOUR('',#61151); +#61930 = OVER_RIDING_STYLED_ITEM('overriding color',(#61931),#8169, + #61923); +#61931 = PRESENTATION_STYLE_ASSIGNMENT((#61932)); +#61932 = CURVE_STYLE('',#61933,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61933 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61934 = OVER_RIDING_STYLED_ITEM('overriding color',(#61935),#8177, + #61923); +#61935 = PRESENTATION_STYLE_ASSIGNMENT((#61936)); +#61936 = CURVE_STYLE('',#61937,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61937 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61938 = OVER_RIDING_STYLED_ITEM('overriding color',(#61939),#8183, + #61923); +#61939 = PRESENTATION_STYLE_ASSIGNMENT((#61940)); +#61940 = CURVE_STYLE('',#61941,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61941 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61942 = OVER_RIDING_STYLED_ITEM('overriding color',(#61943),#8191, + #61923); +#61943 = PRESENTATION_STYLE_ASSIGNMENT((#61944)); +#61944 = CURVE_STYLE('',#61945,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61945 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61946 = STYLED_ITEM('color',(#61947),#8201); +#61947 = PRESENTATION_STYLE_ASSIGNMENT((#61948)); +#61948 = SURFACE_STYLE_USAGE(.BOTH.,#61949); +#61949 = SURFACE_SIDE_STYLE('',(#61950)); +#61950 = SURFACE_STYLE_FILL_AREA(#61951); +#61951 = FILL_AREA_STYLE('',(#61952)); +#61952 = FILL_AREA_STYLE_COLOUR('',#61151); +#61953 = OVER_RIDING_STYLED_ITEM('overriding color',(#61954),#8205, + #61946); +#61954 = PRESENTATION_STYLE_ASSIGNMENT((#61955)); +#61955 = CURVE_STYLE('',#61956,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61956 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61957 = OVER_RIDING_STYLED_ITEM('overriding color',(#61958),#8214, + #61946); +#61958 = PRESENTATION_STYLE_ASSIGNMENT((#61959)); +#61959 = CURVE_STYLE('',#61960,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61960 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61961 = OVER_RIDING_STYLED_ITEM('overriding color',(#61962),#8222, + #61946); +#61962 = PRESENTATION_STYLE_ASSIGNMENT((#61963)); +#61963 = CURVE_STYLE('',#61964,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61964 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61965 = STYLED_ITEM('color',(#61966),#8232); +#61966 = PRESENTATION_STYLE_ASSIGNMENT((#61967)); +#61967 = SURFACE_STYLE_USAGE(.BOTH.,#61968); +#61968 = SURFACE_SIDE_STYLE('',(#61969)); +#61969 = SURFACE_STYLE_FILL_AREA(#61970); +#61970 = FILL_AREA_STYLE('',(#61971)); +#61971 = FILL_AREA_STYLE_COLOUR('',#61151); +#61972 = STYLED_ITEM('color',(#61973),#8244); +#61973 = PRESENTATION_STYLE_ASSIGNMENT((#61974)); +#61974 = SURFACE_STYLE_USAGE(.BOTH.,#61975); +#61975 = SURFACE_SIDE_STYLE('',(#61976)); +#61976 = SURFACE_STYLE_FILL_AREA(#61977); +#61977 = FILL_AREA_STYLE('',(#61978)); +#61978 = FILL_AREA_STYLE_COLOUR('',#61151); +#61979 = OVER_RIDING_STYLED_ITEM('overriding color',(#61980),#8251, + #61972); +#61980 = PRESENTATION_STYLE_ASSIGNMENT((#61981)); +#61981 = CURVE_STYLE('',#61982,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61982 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61983 = STYLED_ITEM('color',(#61984),#8261); +#61984 = PRESENTATION_STYLE_ASSIGNMENT((#61985)); +#61985 = SURFACE_STYLE_USAGE(.BOTH.,#61986); +#61986 = SURFACE_SIDE_STYLE('',(#61987)); +#61987 = SURFACE_STYLE_FILL_AREA(#61988); +#61988 = FILL_AREA_STYLE('',(#61989)); +#61989 = FILL_AREA_STYLE_COLOUR('',#61151); +#61990 = OVER_RIDING_STYLED_ITEM('overriding color',(#61991),#8268, + #61983); +#61991 = PRESENTATION_STYLE_ASSIGNMENT((#61992)); +#61992 = CURVE_STYLE('',#61993,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#61993 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#61994 = STYLED_ITEM('color',(#61995),#8278); +#61995 = PRESENTATION_STYLE_ASSIGNMENT((#61996)); +#61996 = SURFACE_STYLE_USAGE(.BOTH.,#61997); +#61997 = SURFACE_SIDE_STYLE('',(#61998)); +#61998 = SURFACE_STYLE_FILL_AREA(#61999); +#61999 = FILL_AREA_STYLE('',(#62000)); +#62000 = FILL_AREA_STYLE_COLOUR('',#61151); +#62001 = OVER_RIDING_STYLED_ITEM('overriding color',(#62002),#8282, + #61994); +#62002 = PRESENTATION_STYLE_ASSIGNMENT((#62003)); +#62003 = CURVE_STYLE('',#62004,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62004 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62005 = OVER_RIDING_STYLED_ITEM('overriding color',(#62006),#8292, + #61994); +#62006 = PRESENTATION_STYLE_ASSIGNMENT((#62007)); +#62007 = CURVE_STYLE('',#62008,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62008 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62009 = OVER_RIDING_STYLED_ITEM('overriding color',(#62010),#8298, + #61994); +#62010 = PRESENTATION_STYLE_ASSIGNMENT((#62011)); +#62011 = CURVE_STYLE('',#62012,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62012 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62013 = OVER_RIDING_STYLED_ITEM('overriding color',(#62014),#8306, + #61994); +#62014 = PRESENTATION_STYLE_ASSIGNMENT((#62015)); +#62015 = CURVE_STYLE('',#62016,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62016 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62017 = STYLED_ITEM('color',(#62018),#8316); +#62018 = PRESENTATION_STYLE_ASSIGNMENT((#62019)); +#62019 = SURFACE_STYLE_USAGE(.BOTH.,#62020); +#62020 = SURFACE_SIDE_STYLE('',(#62021)); +#62021 = SURFACE_STYLE_FILL_AREA(#62022); +#62022 = FILL_AREA_STYLE('',(#62023)); +#62023 = FILL_AREA_STYLE_COLOUR('',#61151); +#62024 = OVER_RIDING_STYLED_ITEM('overriding color',(#62025),#8320, + #62017); +#62025 = PRESENTATION_STYLE_ASSIGNMENT((#62026)); +#62026 = CURVE_STYLE('',#62027,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62027 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62028 = OVER_RIDING_STYLED_ITEM('overriding color',(#62029),#8328, + #62017); +#62029 = PRESENTATION_STYLE_ASSIGNMENT((#62030)); +#62030 = CURVE_STYLE('',#62031,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62031 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62032 = OVER_RIDING_STYLED_ITEM('overriding color',(#62033),#8336, + #62017); +#62033 = PRESENTATION_STYLE_ASSIGNMENT((#62034)); +#62034 = CURVE_STYLE('',#62035,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62035 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62036 = STYLED_ITEM('color',(#62037),#8347); +#62037 = PRESENTATION_STYLE_ASSIGNMENT((#62038)); +#62038 = SURFACE_STYLE_USAGE(.BOTH.,#62039); +#62039 = SURFACE_SIDE_STYLE('',(#62040)); +#62040 = SURFACE_STYLE_FILL_AREA(#62041); +#62041 = FILL_AREA_STYLE('',(#62042)); +#62042 = FILL_AREA_STYLE_COLOUR('',#61151); +#62043 = OVER_RIDING_STYLED_ITEM('overriding color',(#62044),#8351, + #62036); +#62044 = PRESENTATION_STYLE_ASSIGNMENT((#62045)); +#62045 = CURVE_STYLE('',#62046,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62046 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62047 = OVER_RIDING_STYLED_ITEM('overriding color',(#62048),#8359, + #62036); +#62048 = PRESENTATION_STYLE_ASSIGNMENT((#62049)); +#62049 = CURVE_STYLE('',#62050,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62050 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62051 = STYLED_ITEM('color',(#62052),#8371); +#62052 = PRESENTATION_STYLE_ASSIGNMENT((#62053)); +#62053 = SURFACE_STYLE_USAGE(.BOTH.,#62054); +#62054 = SURFACE_SIDE_STYLE('',(#62055)); +#62055 = SURFACE_STYLE_FILL_AREA(#62056); +#62056 = FILL_AREA_STYLE('',(#62057)); +#62057 = FILL_AREA_STYLE_COLOUR('',#61151); +#62058 = OVER_RIDING_STYLED_ITEM('overriding color',(#62059),#8376, + #62051); +#62059 = PRESENTATION_STYLE_ASSIGNMENT((#62060)); +#62060 = CURVE_STYLE('',#62061,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62061 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62062 = STYLED_ITEM('color',(#62063),#8388); +#62063 = PRESENTATION_STYLE_ASSIGNMENT((#62064)); +#62064 = SURFACE_STYLE_USAGE(.BOTH.,#62065); +#62065 = SURFACE_SIDE_STYLE('',(#62066)); +#62066 = SURFACE_STYLE_FILL_AREA(#62067); +#62067 = FILL_AREA_STYLE('',(#62068)); +#62068 = FILL_AREA_STYLE_COLOUR('',#61151); +#62069 = OVER_RIDING_STYLED_ITEM('overriding color',(#62070),#8393, + #62062); +#62070 = PRESENTATION_STYLE_ASSIGNMENT((#62071)); +#62071 = CURVE_STYLE('',#62072,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62072 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62073 = OVER_RIDING_STYLED_ITEM('overriding color',(#62074),#8400, + #62062); +#62074 = PRESENTATION_STYLE_ASSIGNMENT((#62075)); +#62075 = CURVE_STYLE('',#62076,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62076 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62077 = STYLED_ITEM('color',(#62078),#8410); +#62078 = PRESENTATION_STYLE_ASSIGNMENT((#62079)); +#62079 = SURFACE_STYLE_USAGE(.BOTH.,#62080); +#62080 = SURFACE_SIDE_STYLE('',(#62081)); +#62081 = SURFACE_STYLE_FILL_AREA(#62082); +#62082 = FILL_AREA_STYLE('',(#62083)); +#62083 = FILL_AREA_STYLE_COLOUR('',#61151); +#62084 = STYLED_ITEM('color',(#62085),#8422); +#62085 = PRESENTATION_STYLE_ASSIGNMENT((#62086)); +#62086 = SURFACE_STYLE_USAGE(.BOTH.,#62087); +#62087 = SURFACE_SIDE_STYLE('',(#62088)); +#62088 = SURFACE_STYLE_FILL_AREA(#62089); +#62089 = FILL_AREA_STYLE('',(#62090)); +#62090 = FILL_AREA_STYLE_COLOUR('',#61151); +#62091 = STYLED_ITEM('color',(#62092),#8434); +#62092 = PRESENTATION_STYLE_ASSIGNMENT((#62093)); +#62093 = SURFACE_STYLE_USAGE(.BOTH.,#62094); +#62094 = SURFACE_SIDE_STYLE('',(#62095)); +#62095 = SURFACE_STYLE_FILL_AREA(#62096); +#62096 = FILL_AREA_STYLE('',(#62097)); +#62097 = FILL_AREA_STYLE_COLOUR('',#61151); +#62098 = OVER_RIDING_STYLED_ITEM('overriding color',(#62099),#8438, + #62091); +#62099 = PRESENTATION_STYLE_ASSIGNMENT((#62100)); +#62100 = CURVE_STYLE('',#62101,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62101 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62102 = OVER_RIDING_STYLED_ITEM('overriding color',(#62103),#8446, + #62091); +#62103 = PRESENTATION_STYLE_ASSIGNMENT((#62104)); +#62104 = CURVE_STYLE('',#62105,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62105 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62106 = STYLED_ITEM('color',(#62107),#8459); +#62107 = PRESENTATION_STYLE_ASSIGNMENT((#62108)); +#62108 = SURFACE_STYLE_USAGE(.BOTH.,#62109); +#62109 = SURFACE_SIDE_STYLE('',(#62110)); +#62110 = SURFACE_STYLE_FILL_AREA(#62111); +#62111 = FILL_AREA_STYLE('',(#62112)); +#62112 = FILL_AREA_STYLE_COLOUR('',#61151); +#62113 = OVER_RIDING_STYLED_ITEM('overriding color',(#62114),#8463, + #62106); +#62114 = PRESENTATION_STYLE_ASSIGNMENT((#62115)); +#62115 = CURVE_STYLE('',#62116,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62116 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62117 = STYLED_ITEM('color',(#62118),#8476); +#62118 = PRESENTATION_STYLE_ASSIGNMENT((#62119)); +#62119 = SURFACE_STYLE_USAGE(.BOTH.,#62120); +#62120 = SURFACE_SIDE_STYLE('',(#62121)); +#62121 = SURFACE_STYLE_FILL_AREA(#62122); +#62122 = FILL_AREA_STYLE('',(#62123)); +#62123 = FILL_AREA_STYLE_COLOUR('',#61151); +#62124 = OVER_RIDING_STYLED_ITEM('overriding color',(#62125),#8480, + #62117); +#62125 = PRESENTATION_STYLE_ASSIGNMENT((#62126)); +#62126 = CURVE_STYLE('',#62127,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62127 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62128 = OVER_RIDING_STYLED_ITEM('overriding color',(#62129),#8490, + #62117); +#62129 = PRESENTATION_STYLE_ASSIGNMENT((#62130)); +#62130 = CURVE_STYLE('',#62131,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62131 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62132 = OVER_RIDING_STYLED_ITEM('overriding color',(#62133),#8498, + #62117); +#62133 = PRESENTATION_STYLE_ASSIGNMENT((#62134)); +#62134 = CURVE_STYLE('',#62135,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62135 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62136 = OVER_RIDING_STYLED_ITEM('overriding color',(#62137),#8506, + #62117); +#62137 = PRESENTATION_STYLE_ASSIGNMENT((#62138)); +#62138 = CURVE_STYLE('',#62139,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62139 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62140 = STYLED_ITEM('color',(#62141),#8516); +#62141 = PRESENTATION_STYLE_ASSIGNMENT((#62142)); +#62142 = SURFACE_STYLE_USAGE(.BOTH.,#62143); +#62143 = SURFACE_SIDE_STYLE('',(#62144)); +#62144 = SURFACE_STYLE_FILL_AREA(#62145); +#62145 = FILL_AREA_STYLE('',(#62146)); +#62146 = FILL_AREA_STYLE_COLOUR('',#61151); +#62147 = OVER_RIDING_STYLED_ITEM('overriding color',(#62148),#8520, + #62140); +#62148 = PRESENTATION_STYLE_ASSIGNMENT((#62149)); +#62149 = CURVE_STYLE('',#62150,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62150 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62151 = OVER_RIDING_STYLED_ITEM('overriding color',(#62152),#8528, + #62140); +#62152 = PRESENTATION_STYLE_ASSIGNMENT((#62153)); +#62153 = CURVE_STYLE('',#62154,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62154 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62155 = OVER_RIDING_STYLED_ITEM('overriding color',(#62156),#8536, + #62140); +#62156 = PRESENTATION_STYLE_ASSIGNMENT((#62157)); +#62157 = CURVE_STYLE('',#62158,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62158 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62159 = OVER_RIDING_STYLED_ITEM('overriding color',(#62160),#8544, + #62140); +#62160 = PRESENTATION_STYLE_ASSIGNMENT((#62161)); +#62161 = CURVE_STYLE('',#62162,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62162 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62163 = STYLED_ITEM('color',(#62164),#8555); +#62164 = PRESENTATION_STYLE_ASSIGNMENT((#62165)); +#62165 = SURFACE_STYLE_USAGE(.BOTH.,#62166); +#62166 = SURFACE_SIDE_STYLE('',(#62167)); +#62167 = SURFACE_STYLE_FILL_AREA(#62168); +#62168 = FILL_AREA_STYLE('',(#62169)); +#62169 = FILL_AREA_STYLE_COLOUR('',#61151); +#62170 = OVER_RIDING_STYLED_ITEM('overriding color',(#62171),#8559, + #62163); +#62171 = PRESENTATION_STYLE_ASSIGNMENT((#62172)); +#62172 = CURVE_STYLE('',#62173,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62173 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62174 = OVER_RIDING_STYLED_ITEM('overriding color',(#62175),#8568, + #62163); +#62175 = PRESENTATION_STYLE_ASSIGNMENT((#62176)); +#62176 = CURVE_STYLE('',#62177,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62177 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62178 = OVER_RIDING_STYLED_ITEM('overriding color',(#62179),#8576, + #62163); +#62179 = PRESENTATION_STYLE_ASSIGNMENT((#62180)); +#62180 = CURVE_STYLE('',#62181,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62181 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62182 = OVER_RIDING_STYLED_ITEM('overriding color',(#62183),#8584, + #62163); +#62183 = PRESENTATION_STYLE_ASSIGNMENT((#62184)); +#62184 = CURVE_STYLE('',#62185,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62185 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62186 = STYLED_ITEM('color',(#62187),#8594); +#62187 = PRESENTATION_STYLE_ASSIGNMENT((#62188)); +#62188 = SURFACE_STYLE_USAGE(.BOTH.,#62189); +#62189 = SURFACE_SIDE_STYLE('',(#62190)); +#62190 = SURFACE_STYLE_FILL_AREA(#62191); +#62191 = FILL_AREA_STYLE('',(#62192)); +#62192 = FILL_AREA_STYLE_COLOUR('',#61151); +#62193 = OVER_RIDING_STYLED_ITEM('overriding color',(#62194),#8598, + #62186); +#62194 = PRESENTATION_STYLE_ASSIGNMENT((#62195)); +#62195 = CURVE_STYLE('',#62196,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62196 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62197 = OVER_RIDING_STYLED_ITEM('overriding color',(#62198),#8608, + #62186); +#62198 = PRESENTATION_STYLE_ASSIGNMENT((#62199)); +#62199 = CURVE_STYLE('',#62200,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62200 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62201 = OVER_RIDING_STYLED_ITEM('overriding color',(#62202),#8616, + #62186); +#62202 = PRESENTATION_STYLE_ASSIGNMENT((#62203)); +#62203 = CURVE_STYLE('',#62204,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62204 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62205 = OVER_RIDING_STYLED_ITEM('overriding color',(#62206),#8624, + #62186); +#62206 = PRESENTATION_STYLE_ASSIGNMENT((#62207)); +#62207 = CURVE_STYLE('',#62208,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62208 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62209 = OVER_RIDING_STYLED_ITEM('overriding color',(#62210),#8632, + #62186); +#62210 = PRESENTATION_STYLE_ASSIGNMENT((#62211)); +#62211 = CURVE_STYLE('',#62212,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62212 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62213 = STYLED_ITEM('color',(#62214),#8642); +#62214 = PRESENTATION_STYLE_ASSIGNMENT((#62215)); +#62215 = SURFACE_STYLE_USAGE(.BOTH.,#62216); +#62216 = SURFACE_SIDE_STYLE('',(#62217)); +#62217 = SURFACE_STYLE_FILL_AREA(#62218); +#62218 = FILL_AREA_STYLE('',(#62219)); +#62219 = FILL_AREA_STYLE_COLOUR('',#61151); +#62220 = OVER_RIDING_STYLED_ITEM('overriding color',(#62221),#8646, + #62213); +#62221 = PRESENTATION_STYLE_ASSIGNMENT((#62222)); +#62222 = CURVE_STYLE('',#62223,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62223 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62224 = OVER_RIDING_STYLED_ITEM('overriding color',(#62225),#8653, + #62213); +#62225 = PRESENTATION_STYLE_ASSIGNMENT((#62226)); +#62226 = CURVE_STYLE('',#62227,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62227 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62228 = STYLED_ITEM('color',(#62229),#8664); +#62229 = PRESENTATION_STYLE_ASSIGNMENT((#62230)); +#62230 = SURFACE_STYLE_USAGE(.BOTH.,#62231); +#62231 = SURFACE_SIDE_STYLE('',(#62232)); +#62232 = SURFACE_STYLE_FILL_AREA(#62233); +#62233 = FILL_AREA_STYLE('',(#62234)); +#62234 = FILL_AREA_STYLE_COLOUR('',#61151); +#62235 = OVER_RIDING_STYLED_ITEM('overriding color',(#62236),#8668, + #62228); +#62236 = PRESENTATION_STYLE_ASSIGNMENT((#62237)); +#62237 = CURVE_STYLE('',#62238,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62238 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62239 = OVER_RIDING_STYLED_ITEM('overriding color',(#62240),#8676, + #62228); +#62240 = PRESENTATION_STYLE_ASSIGNMENT((#62241)); +#62241 = CURVE_STYLE('',#62242,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62242 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62243 = OVER_RIDING_STYLED_ITEM('overriding color',(#62244),#8684, + #62228); +#62244 = PRESENTATION_STYLE_ASSIGNMENT((#62245)); +#62245 = CURVE_STYLE('',#62246,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62246 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62247 = STYLED_ITEM('color',(#62248),#8695); +#62248 = PRESENTATION_STYLE_ASSIGNMENT((#62249)); +#62249 = SURFACE_STYLE_USAGE(.BOTH.,#62250); +#62250 = SURFACE_SIDE_STYLE('',(#62251)); +#62251 = SURFACE_STYLE_FILL_AREA(#62252); +#62252 = FILL_AREA_STYLE('',(#62253)); +#62253 = FILL_AREA_STYLE_COLOUR('',#61151); +#62254 = OVER_RIDING_STYLED_ITEM('overriding color',(#62255),#8699, + #62247); +#62255 = PRESENTATION_STYLE_ASSIGNMENT((#62256)); +#62256 = CURVE_STYLE('',#62257,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62257 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62258 = OVER_RIDING_STYLED_ITEM('overriding color',(#62259),#8707, + #62247); +#62259 = PRESENTATION_STYLE_ASSIGNMENT((#62260)); +#62260 = CURVE_STYLE('',#62261,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62261 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62262 = OVER_RIDING_STYLED_ITEM('overriding color',(#62263),#8713, + #62247); +#62263 = PRESENTATION_STYLE_ASSIGNMENT((#62264)); +#62264 = CURVE_STYLE('',#62265,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62265 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62266 = OVER_RIDING_STYLED_ITEM('overriding color',(#62267),#8721, + #62247); +#62267 = PRESENTATION_STYLE_ASSIGNMENT((#62268)); +#62268 = CURVE_STYLE('',#62269,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62269 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62270 = STYLED_ITEM('color',(#62271),#8731); +#62271 = PRESENTATION_STYLE_ASSIGNMENT((#62272)); +#62272 = SURFACE_STYLE_USAGE(.BOTH.,#62273); +#62273 = SURFACE_SIDE_STYLE('',(#62274)); +#62274 = SURFACE_STYLE_FILL_AREA(#62275); +#62275 = FILL_AREA_STYLE('',(#62276)); +#62276 = FILL_AREA_STYLE_COLOUR('',#61151); +#62277 = OVER_RIDING_STYLED_ITEM('overriding color',(#62278),#8735, + #62270); +#62278 = PRESENTATION_STYLE_ASSIGNMENT((#62279)); +#62279 = CURVE_STYLE('',#62280,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62280 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62281 = OVER_RIDING_STYLED_ITEM('overriding color',(#62282),#8744, + #62270); +#62282 = PRESENTATION_STYLE_ASSIGNMENT((#62283)); +#62283 = CURVE_STYLE('',#62284,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62284 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62285 = OVER_RIDING_STYLED_ITEM('overriding color',(#62286),#8752, + #62270); +#62286 = PRESENTATION_STYLE_ASSIGNMENT((#62287)); +#62287 = CURVE_STYLE('',#62288,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62288 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62289 = STYLED_ITEM('color',(#62290),#8762); +#62290 = PRESENTATION_STYLE_ASSIGNMENT((#62291)); +#62291 = SURFACE_STYLE_USAGE(.BOTH.,#62292); +#62292 = SURFACE_SIDE_STYLE('',(#62293)); +#62293 = SURFACE_STYLE_FILL_AREA(#62294); +#62294 = FILL_AREA_STYLE('',(#62295)); +#62295 = FILL_AREA_STYLE_COLOUR('',#61151); +#62296 = STYLED_ITEM('color',(#62297),#8774); +#62297 = PRESENTATION_STYLE_ASSIGNMENT((#62298)); +#62298 = SURFACE_STYLE_USAGE(.BOTH.,#62299); +#62299 = SURFACE_SIDE_STYLE('',(#62300)); +#62300 = SURFACE_STYLE_FILL_AREA(#62301); +#62301 = FILL_AREA_STYLE('',(#62302)); +#62302 = FILL_AREA_STYLE_COLOUR('',#61151); +#62303 = OVER_RIDING_STYLED_ITEM('overriding color',(#62304),#8781, + #62296); +#62304 = PRESENTATION_STYLE_ASSIGNMENT((#62305)); +#62305 = CURVE_STYLE('',#62306,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62306 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62307 = STYLED_ITEM('color',(#62308),#8791); +#62308 = PRESENTATION_STYLE_ASSIGNMENT((#62309)); +#62309 = SURFACE_STYLE_USAGE(.BOTH.,#62310); +#62310 = SURFACE_SIDE_STYLE('',(#62311)); +#62311 = SURFACE_STYLE_FILL_AREA(#62312); +#62312 = FILL_AREA_STYLE('',(#62313)); +#62313 = FILL_AREA_STYLE_COLOUR('',#61151); +#62314 = OVER_RIDING_STYLED_ITEM('overriding color',(#62315),#8798, + #62307); +#62315 = PRESENTATION_STYLE_ASSIGNMENT((#62316)); +#62316 = CURVE_STYLE('',#62317,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62317 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62318 = STYLED_ITEM('color',(#62319),#8808); +#62319 = PRESENTATION_STYLE_ASSIGNMENT((#62320)); +#62320 = SURFACE_STYLE_USAGE(.BOTH.,#62321); +#62321 = SURFACE_SIDE_STYLE('',(#62322)); +#62322 = SURFACE_STYLE_FILL_AREA(#62323); +#62323 = FILL_AREA_STYLE('',(#62324)); +#62324 = FILL_AREA_STYLE_COLOUR('',#61151); +#62325 = OVER_RIDING_STYLED_ITEM('overriding color',(#62326),#8812, + #62318); +#62326 = PRESENTATION_STYLE_ASSIGNMENT((#62327)); +#62327 = CURVE_STYLE('',#62328,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62328 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62329 = OVER_RIDING_STYLED_ITEM('overriding color',(#62330),#8822, + #62318); +#62330 = PRESENTATION_STYLE_ASSIGNMENT((#62331)); +#62331 = CURVE_STYLE('',#62332,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62332 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62333 = OVER_RIDING_STYLED_ITEM('overriding color',(#62334),#8828, + #62318); +#62334 = PRESENTATION_STYLE_ASSIGNMENT((#62335)); +#62335 = CURVE_STYLE('',#62336,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62336 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62337 = OVER_RIDING_STYLED_ITEM('overriding color',(#62338),#8836, + #62318); +#62338 = PRESENTATION_STYLE_ASSIGNMENT((#62339)); +#62339 = CURVE_STYLE('',#62340,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62340 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62341 = STYLED_ITEM('color',(#62342),#8846); +#62342 = PRESENTATION_STYLE_ASSIGNMENT((#62343)); +#62343 = SURFACE_STYLE_USAGE(.BOTH.,#62344); +#62344 = SURFACE_SIDE_STYLE('',(#62345)); +#62345 = SURFACE_STYLE_FILL_AREA(#62346); +#62346 = FILL_AREA_STYLE('',(#62347)); +#62347 = FILL_AREA_STYLE_COLOUR('',#61151); +#62348 = OVER_RIDING_STYLED_ITEM('overriding color',(#62349),#8850, + #62341); +#62349 = PRESENTATION_STYLE_ASSIGNMENT((#62350)); +#62350 = CURVE_STYLE('',#62351,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62351 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62352 = OVER_RIDING_STYLED_ITEM('overriding color',(#62353),#8858, + #62341); +#62353 = PRESENTATION_STYLE_ASSIGNMENT((#62354)); +#62354 = CURVE_STYLE('',#62355,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62355 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62356 = OVER_RIDING_STYLED_ITEM('overriding color',(#62357),#8866, + #62341); +#62357 = PRESENTATION_STYLE_ASSIGNMENT((#62358)); +#62358 = CURVE_STYLE('',#62359,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62359 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62360 = STYLED_ITEM('color',(#62361),#8877); +#62361 = PRESENTATION_STYLE_ASSIGNMENT((#62362)); +#62362 = SURFACE_STYLE_USAGE(.BOTH.,#62363); +#62363 = SURFACE_SIDE_STYLE('',(#62364)); +#62364 = SURFACE_STYLE_FILL_AREA(#62365); +#62365 = FILL_AREA_STYLE('',(#62366)); +#62366 = FILL_AREA_STYLE_COLOUR('',#61151); +#62367 = OVER_RIDING_STYLED_ITEM('overriding color',(#62368),#8881, + #62360); +#62368 = PRESENTATION_STYLE_ASSIGNMENT((#62369)); +#62369 = CURVE_STYLE('',#62370,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62370 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62371 = OVER_RIDING_STYLED_ITEM('overriding color',(#62372),#8889, + #62360); +#62372 = PRESENTATION_STYLE_ASSIGNMENT((#62373)); +#62373 = CURVE_STYLE('',#62374,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62374 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62375 = STYLED_ITEM('color',(#62376),#8901); +#62376 = PRESENTATION_STYLE_ASSIGNMENT((#62377)); +#62377 = SURFACE_STYLE_USAGE(.BOTH.,#62378); +#62378 = SURFACE_SIDE_STYLE('',(#62379)); +#62379 = SURFACE_STYLE_FILL_AREA(#62380); +#62380 = FILL_AREA_STYLE('',(#62381)); +#62381 = FILL_AREA_STYLE_COLOUR('',#61151); +#62382 = OVER_RIDING_STYLED_ITEM('overriding color',(#62383),#8906, + #62375); +#62383 = PRESENTATION_STYLE_ASSIGNMENT((#62384)); +#62384 = CURVE_STYLE('',#62385,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62385 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62386 = STYLED_ITEM('color',(#62387),#8918); +#62387 = PRESENTATION_STYLE_ASSIGNMENT((#62388)); +#62388 = SURFACE_STYLE_USAGE(.BOTH.,#62389); +#62389 = SURFACE_SIDE_STYLE('',(#62390)); +#62390 = SURFACE_STYLE_FILL_AREA(#62391); +#62391 = FILL_AREA_STYLE('',(#62392)); +#62392 = FILL_AREA_STYLE_COLOUR('',#61151); +#62393 = OVER_RIDING_STYLED_ITEM('overriding color',(#62394),#8923, + #62386); +#62394 = PRESENTATION_STYLE_ASSIGNMENT((#62395)); +#62395 = CURVE_STYLE('',#62396,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62396 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62397 = OVER_RIDING_STYLED_ITEM('overriding color',(#62398),#8930, + #62386); +#62398 = PRESENTATION_STYLE_ASSIGNMENT((#62399)); +#62399 = CURVE_STYLE('',#62400,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62400 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62401 = STYLED_ITEM('color',(#62402),#8940); +#62402 = PRESENTATION_STYLE_ASSIGNMENT((#62403)); +#62403 = SURFACE_STYLE_USAGE(.BOTH.,#62404); +#62404 = SURFACE_SIDE_STYLE('',(#62405)); +#62405 = SURFACE_STYLE_FILL_AREA(#62406); +#62406 = FILL_AREA_STYLE('',(#62407)); +#62407 = FILL_AREA_STYLE_COLOUR('',#61151); +#62408 = STYLED_ITEM('color',(#62409),#8952); +#62409 = PRESENTATION_STYLE_ASSIGNMENT((#62410)); +#62410 = SURFACE_STYLE_USAGE(.BOTH.,#62411); +#62411 = SURFACE_SIDE_STYLE('',(#62412)); +#62412 = SURFACE_STYLE_FILL_AREA(#62413); +#62413 = FILL_AREA_STYLE('',(#62414)); +#62414 = FILL_AREA_STYLE_COLOUR('',#61151); +#62415 = STYLED_ITEM('color',(#62416),#8964); +#62416 = PRESENTATION_STYLE_ASSIGNMENT((#62417)); +#62417 = SURFACE_STYLE_USAGE(.BOTH.,#62418); +#62418 = SURFACE_SIDE_STYLE('',(#62419)); +#62419 = SURFACE_STYLE_FILL_AREA(#62420); +#62420 = FILL_AREA_STYLE('',(#62421)); +#62421 = FILL_AREA_STYLE_COLOUR('',#61151); +#62422 = OVER_RIDING_STYLED_ITEM('overriding color',(#62423),#8968, + #62415); +#62423 = PRESENTATION_STYLE_ASSIGNMENT((#62424)); +#62424 = CURVE_STYLE('',#62425,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62425 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62426 = OVER_RIDING_STYLED_ITEM('overriding color',(#62427),#8976, + #62415); +#62427 = PRESENTATION_STYLE_ASSIGNMENT((#62428)); +#62428 = CURVE_STYLE('',#62429,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62429 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62430 = STYLED_ITEM('color',(#62431),#8989); +#62431 = PRESENTATION_STYLE_ASSIGNMENT((#62432)); +#62432 = SURFACE_STYLE_USAGE(.BOTH.,#62433); +#62433 = SURFACE_SIDE_STYLE('',(#62434)); +#62434 = SURFACE_STYLE_FILL_AREA(#62435); +#62435 = FILL_AREA_STYLE('',(#62436)); +#62436 = FILL_AREA_STYLE_COLOUR('',#61151); +#62437 = OVER_RIDING_STYLED_ITEM('overriding color',(#62438),#8993, + #62430); +#62438 = PRESENTATION_STYLE_ASSIGNMENT((#62439)); +#62439 = CURVE_STYLE('',#62440,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62440 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62441 = STYLED_ITEM('color',(#62442),#9006); +#62442 = PRESENTATION_STYLE_ASSIGNMENT((#62443)); +#62443 = SURFACE_STYLE_USAGE(.BOTH.,#62444); +#62444 = SURFACE_SIDE_STYLE('',(#62445)); +#62445 = SURFACE_STYLE_FILL_AREA(#62446); +#62446 = FILL_AREA_STYLE('',(#62447)); +#62447 = FILL_AREA_STYLE_COLOUR('',#61151); +#62448 = OVER_RIDING_STYLED_ITEM('overriding color',(#62449),#9010, + #62441); +#62449 = PRESENTATION_STYLE_ASSIGNMENT((#62450)); +#62450 = CURVE_STYLE('',#62451,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62451 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62452 = OVER_RIDING_STYLED_ITEM('overriding color',(#62453),#9020, + #62441); +#62453 = PRESENTATION_STYLE_ASSIGNMENT((#62454)); +#62454 = CURVE_STYLE('',#62455,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62455 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62456 = OVER_RIDING_STYLED_ITEM('overriding color',(#62457),#9028, + #62441); +#62457 = PRESENTATION_STYLE_ASSIGNMENT((#62458)); +#62458 = CURVE_STYLE('',#62459,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62459 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62460 = OVER_RIDING_STYLED_ITEM('overriding color',(#62461),#9036, + #62441); +#62461 = PRESENTATION_STYLE_ASSIGNMENT((#62462)); +#62462 = CURVE_STYLE('',#62463,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62463 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62464 = STYLED_ITEM('color',(#62465),#9046); +#62465 = PRESENTATION_STYLE_ASSIGNMENT((#62466)); +#62466 = SURFACE_STYLE_USAGE(.BOTH.,#62467); +#62467 = SURFACE_SIDE_STYLE('',(#62468)); +#62468 = SURFACE_STYLE_FILL_AREA(#62469); +#62469 = FILL_AREA_STYLE('',(#62470)); +#62470 = FILL_AREA_STYLE_COLOUR('',#61151); +#62471 = OVER_RIDING_STYLED_ITEM('overriding color',(#62472),#9050, + #62464); +#62472 = PRESENTATION_STYLE_ASSIGNMENT((#62473)); +#62473 = CURVE_STYLE('',#62474,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62474 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62475 = OVER_RIDING_STYLED_ITEM('overriding color',(#62476),#9058, + #62464); +#62476 = PRESENTATION_STYLE_ASSIGNMENT((#62477)); +#62477 = CURVE_STYLE('',#62478,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62478 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62479 = OVER_RIDING_STYLED_ITEM('overriding color',(#62480),#9066, + #62464); +#62480 = PRESENTATION_STYLE_ASSIGNMENT((#62481)); +#62481 = CURVE_STYLE('',#62482,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62482 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62483 = OVER_RIDING_STYLED_ITEM('overriding color',(#62484),#9074, + #62464); +#62484 = PRESENTATION_STYLE_ASSIGNMENT((#62485)); +#62485 = CURVE_STYLE('',#62486,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62486 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62487 = STYLED_ITEM('color',(#62488),#9085); +#62488 = PRESENTATION_STYLE_ASSIGNMENT((#62489)); +#62489 = SURFACE_STYLE_USAGE(.BOTH.,#62490); +#62490 = SURFACE_SIDE_STYLE('',(#62491)); +#62491 = SURFACE_STYLE_FILL_AREA(#62492); +#62492 = FILL_AREA_STYLE('',(#62493)); +#62493 = FILL_AREA_STYLE_COLOUR('',#61151); +#62494 = OVER_RIDING_STYLED_ITEM('overriding color',(#62495),#9089, + #62487); +#62495 = PRESENTATION_STYLE_ASSIGNMENT((#62496)); +#62496 = CURVE_STYLE('',#62497,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62497 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62498 = OVER_RIDING_STYLED_ITEM('overriding color',(#62499),#9098, + #62487); +#62499 = PRESENTATION_STYLE_ASSIGNMENT((#62500)); +#62500 = CURVE_STYLE('',#62501,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62501 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62502 = OVER_RIDING_STYLED_ITEM('overriding color',(#62503),#9106, + #62487); +#62503 = PRESENTATION_STYLE_ASSIGNMENT((#62504)); +#62504 = CURVE_STYLE('',#62505,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62505 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62506 = OVER_RIDING_STYLED_ITEM('overriding color',(#62507),#9114, + #62487); +#62507 = PRESENTATION_STYLE_ASSIGNMENT((#62508)); +#62508 = CURVE_STYLE('',#62509,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62509 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62510 = STYLED_ITEM('color',(#62511),#9124); +#62511 = PRESENTATION_STYLE_ASSIGNMENT((#62512)); +#62512 = SURFACE_STYLE_USAGE(.BOTH.,#62513); +#62513 = SURFACE_SIDE_STYLE('',(#62514)); +#62514 = SURFACE_STYLE_FILL_AREA(#62515); +#62515 = FILL_AREA_STYLE('',(#62516)); +#62516 = FILL_AREA_STYLE_COLOUR('',#61151); +#62517 = OVER_RIDING_STYLED_ITEM('overriding color',(#62518),#9128, + #62510); +#62518 = PRESENTATION_STYLE_ASSIGNMENT((#62519)); +#62519 = CURVE_STYLE('',#62520,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62520 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62521 = OVER_RIDING_STYLED_ITEM('overriding color',(#62522),#9138, + #62510); +#62522 = PRESENTATION_STYLE_ASSIGNMENT((#62523)); +#62523 = CURVE_STYLE('',#62524,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62524 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62525 = OVER_RIDING_STYLED_ITEM('overriding color',(#62526),#9146, + #62510); +#62526 = PRESENTATION_STYLE_ASSIGNMENT((#62527)); +#62527 = CURVE_STYLE('',#62528,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62528 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62529 = OVER_RIDING_STYLED_ITEM('overriding color',(#62530),#9154, + #62510); +#62530 = PRESENTATION_STYLE_ASSIGNMENT((#62531)); +#62531 = CURVE_STYLE('',#62532,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62532 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62533 = OVER_RIDING_STYLED_ITEM('overriding color',(#62534),#9162, + #62510); +#62534 = PRESENTATION_STYLE_ASSIGNMENT((#62535)); +#62535 = CURVE_STYLE('',#62536,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62536 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62537 = STYLED_ITEM('color',(#62538),#9172); +#62538 = PRESENTATION_STYLE_ASSIGNMENT((#62539)); +#62539 = SURFACE_STYLE_USAGE(.BOTH.,#62540); +#62540 = SURFACE_SIDE_STYLE('',(#62541)); +#62541 = SURFACE_STYLE_FILL_AREA(#62542); +#62542 = FILL_AREA_STYLE('',(#62543)); +#62543 = FILL_AREA_STYLE_COLOUR('',#61151); +#62544 = OVER_RIDING_STYLED_ITEM('overriding color',(#62545),#9176, + #62537); +#62545 = PRESENTATION_STYLE_ASSIGNMENT((#62546)); +#62546 = CURVE_STYLE('',#62547,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62547 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62548 = OVER_RIDING_STYLED_ITEM('overriding color',(#62549),#9183, + #62537); +#62549 = PRESENTATION_STYLE_ASSIGNMENT((#62550)); +#62550 = CURVE_STYLE('',#62551,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62551 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62552 = STYLED_ITEM('color',(#62553),#9194); +#62553 = PRESENTATION_STYLE_ASSIGNMENT((#62554)); +#62554 = SURFACE_STYLE_USAGE(.BOTH.,#62555); +#62555 = SURFACE_SIDE_STYLE('',(#62556)); +#62556 = SURFACE_STYLE_FILL_AREA(#62557); +#62557 = FILL_AREA_STYLE('',(#62558)); +#62558 = FILL_AREA_STYLE_COLOUR('',#61151); +#62559 = OVER_RIDING_STYLED_ITEM('overriding color',(#62560),#9198, + #62552); +#62560 = PRESENTATION_STYLE_ASSIGNMENT((#62561)); +#62561 = CURVE_STYLE('',#62562,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62562 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62563 = OVER_RIDING_STYLED_ITEM('overriding color',(#62564),#9206, + #62552); +#62564 = PRESENTATION_STYLE_ASSIGNMENT((#62565)); +#62565 = CURVE_STYLE('',#62566,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62566 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62567 = OVER_RIDING_STYLED_ITEM('overriding color',(#62568),#9214, + #62552); +#62568 = PRESENTATION_STYLE_ASSIGNMENT((#62569)); +#62569 = CURVE_STYLE('',#62570,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62570 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62571 = STYLED_ITEM('color',(#62572),#9225); +#62572 = PRESENTATION_STYLE_ASSIGNMENT((#62573)); +#62573 = SURFACE_STYLE_USAGE(.BOTH.,#62574); +#62574 = SURFACE_SIDE_STYLE('',(#62575)); +#62575 = SURFACE_STYLE_FILL_AREA(#62576); +#62576 = FILL_AREA_STYLE('',(#62577)); +#62577 = FILL_AREA_STYLE_COLOUR('',#61151); +#62578 = OVER_RIDING_STYLED_ITEM('overriding color',(#62579),#9229, + #62571); +#62579 = PRESENTATION_STYLE_ASSIGNMENT((#62580)); +#62580 = CURVE_STYLE('',#62581,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62581 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62582 = OVER_RIDING_STYLED_ITEM('overriding color',(#62583),#9237, + #62571); +#62583 = PRESENTATION_STYLE_ASSIGNMENT((#62584)); +#62584 = CURVE_STYLE('',#62585,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62585 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62586 = OVER_RIDING_STYLED_ITEM('overriding color',(#62587),#9243, + #62571); +#62587 = PRESENTATION_STYLE_ASSIGNMENT((#62588)); +#62588 = CURVE_STYLE('',#62589,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62589 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62590 = OVER_RIDING_STYLED_ITEM('overriding color',(#62591),#9251, + #62571); +#62591 = PRESENTATION_STYLE_ASSIGNMENT((#62592)); +#62592 = CURVE_STYLE('',#62593,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62593 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62594 = STYLED_ITEM('color',(#62595),#9261); +#62595 = PRESENTATION_STYLE_ASSIGNMENT((#62596)); +#62596 = SURFACE_STYLE_USAGE(.BOTH.,#62597); +#62597 = SURFACE_SIDE_STYLE('',(#62598)); +#62598 = SURFACE_STYLE_FILL_AREA(#62599); +#62599 = FILL_AREA_STYLE('',(#62600)); +#62600 = FILL_AREA_STYLE_COLOUR('',#61151); +#62601 = OVER_RIDING_STYLED_ITEM('overriding color',(#62602),#9265, + #62594); +#62602 = PRESENTATION_STYLE_ASSIGNMENT((#62603)); +#62603 = CURVE_STYLE('',#62604,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62604 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62605 = OVER_RIDING_STYLED_ITEM('overriding color',(#62606),#9274, + #62594); +#62606 = PRESENTATION_STYLE_ASSIGNMENT((#62607)); +#62607 = CURVE_STYLE('',#62608,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62608 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62609 = OVER_RIDING_STYLED_ITEM('overriding color',(#62610),#9282, + #62594); +#62610 = PRESENTATION_STYLE_ASSIGNMENT((#62611)); +#62611 = CURVE_STYLE('',#62612,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62612 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62613 = STYLED_ITEM('color',(#62614),#9292); +#62614 = PRESENTATION_STYLE_ASSIGNMENT((#62615)); +#62615 = SURFACE_STYLE_USAGE(.BOTH.,#62616); +#62616 = SURFACE_SIDE_STYLE('',(#62617)); +#62617 = SURFACE_STYLE_FILL_AREA(#62618); +#62618 = FILL_AREA_STYLE('',(#62619)); +#62619 = FILL_AREA_STYLE_COLOUR('',#61151); +#62620 = STYLED_ITEM('color',(#62621),#9304); +#62621 = PRESENTATION_STYLE_ASSIGNMENT((#62622)); +#62622 = SURFACE_STYLE_USAGE(.BOTH.,#62623); +#62623 = SURFACE_SIDE_STYLE('',(#62624)); +#62624 = SURFACE_STYLE_FILL_AREA(#62625); +#62625 = FILL_AREA_STYLE('',(#62626)); +#62626 = FILL_AREA_STYLE_COLOUR('',#61151); +#62627 = OVER_RIDING_STYLED_ITEM('overriding color',(#62628),#9311, + #62620); +#62628 = PRESENTATION_STYLE_ASSIGNMENT((#62629)); +#62629 = CURVE_STYLE('',#62630,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62630 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62631 = STYLED_ITEM('color',(#62632),#9321); +#62632 = PRESENTATION_STYLE_ASSIGNMENT((#62633)); +#62633 = SURFACE_STYLE_USAGE(.BOTH.,#62634); +#62634 = SURFACE_SIDE_STYLE('',(#62635)); +#62635 = SURFACE_STYLE_FILL_AREA(#62636); +#62636 = FILL_AREA_STYLE('',(#62637)); +#62637 = FILL_AREA_STYLE_COLOUR('',#61151); +#62638 = OVER_RIDING_STYLED_ITEM('overriding color',(#62639),#9328, + #62631); +#62639 = PRESENTATION_STYLE_ASSIGNMENT((#62640)); +#62640 = CURVE_STYLE('',#62641,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62641 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62642 = STYLED_ITEM('color',(#62643),#9338); +#62643 = PRESENTATION_STYLE_ASSIGNMENT((#62644)); +#62644 = SURFACE_STYLE_USAGE(.BOTH.,#62645); +#62645 = SURFACE_SIDE_STYLE('',(#62646)); +#62646 = SURFACE_STYLE_FILL_AREA(#62647); +#62647 = FILL_AREA_STYLE('',(#62648)); +#62648 = FILL_AREA_STYLE_COLOUR('',#61151); +#62649 = OVER_RIDING_STYLED_ITEM('overriding color',(#62650),#9342, + #62642); +#62650 = PRESENTATION_STYLE_ASSIGNMENT((#62651)); +#62651 = CURVE_STYLE('',#62652,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62652 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62653 = OVER_RIDING_STYLED_ITEM('overriding color',(#62654),#9352, + #62642); +#62654 = PRESENTATION_STYLE_ASSIGNMENT((#62655)); +#62655 = CURVE_STYLE('',#62656,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62656 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62657 = OVER_RIDING_STYLED_ITEM('overriding color',(#62658),#9358, + #62642); +#62658 = PRESENTATION_STYLE_ASSIGNMENT((#62659)); +#62659 = CURVE_STYLE('',#62660,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62660 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62661 = OVER_RIDING_STYLED_ITEM('overriding color',(#62662),#9366, + #62642); +#62662 = PRESENTATION_STYLE_ASSIGNMENT((#62663)); +#62663 = CURVE_STYLE('',#62664,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62664 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62665 = STYLED_ITEM('color',(#62666),#9376); +#62666 = PRESENTATION_STYLE_ASSIGNMENT((#62667)); +#62667 = SURFACE_STYLE_USAGE(.BOTH.,#62668); +#62668 = SURFACE_SIDE_STYLE('',(#62669)); +#62669 = SURFACE_STYLE_FILL_AREA(#62670); +#62670 = FILL_AREA_STYLE('',(#62671)); +#62671 = FILL_AREA_STYLE_COLOUR('',#61151); +#62672 = OVER_RIDING_STYLED_ITEM('overriding color',(#62673),#9380, + #62665); +#62673 = PRESENTATION_STYLE_ASSIGNMENT((#62674)); +#62674 = CURVE_STYLE('',#62675,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62675 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62676 = OVER_RIDING_STYLED_ITEM('overriding color',(#62677),#9388, + #62665); +#62677 = PRESENTATION_STYLE_ASSIGNMENT((#62678)); +#62678 = CURVE_STYLE('',#62679,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62679 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62680 = OVER_RIDING_STYLED_ITEM('overriding color',(#62681),#9396, + #62665); +#62681 = PRESENTATION_STYLE_ASSIGNMENT((#62682)); +#62682 = CURVE_STYLE('',#62683,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62683 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62684 = STYLED_ITEM('color',(#62685),#9407); +#62685 = PRESENTATION_STYLE_ASSIGNMENT((#62686)); +#62686 = SURFACE_STYLE_USAGE(.BOTH.,#62687); +#62687 = SURFACE_SIDE_STYLE('',(#62688)); +#62688 = SURFACE_STYLE_FILL_AREA(#62689); +#62689 = FILL_AREA_STYLE('',(#62690)); +#62690 = FILL_AREA_STYLE_COLOUR('',#61151); +#62691 = OVER_RIDING_STYLED_ITEM('overriding color',(#62692),#9411, + #62684); +#62692 = PRESENTATION_STYLE_ASSIGNMENT((#62693)); +#62693 = CURVE_STYLE('',#62694,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62694 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62695 = OVER_RIDING_STYLED_ITEM('overriding color',(#62696),#9419, + #62684); +#62696 = PRESENTATION_STYLE_ASSIGNMENT((#62697)); +#62697 = CURVE_STYLE('',#62698,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62698 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62699 = STYLED_ITEM('color',(#62700),#9431); +#62700 = PRESENTATION_STYLE_ASSIGNMENT((#62701)); +#62701 = SURFACE_STYLE_USAGE(.BOTH.,#62702); +#62702 = SURFACE_SIDE_STYLE('',(#62703)); +#62703 = SURFACE_STYLE_FILL_AREA(#62704); +#62704 = FILL_AREA_STYLE('',(#62705)); +#62705 = FILL_AREA_STYLE_COLOUR('',#61151); +#62706 = OVER_RIDING_STYLED_ITEM('overriding color',(#62707),#9436, + #62699); +#62707 = PRESENTATION_STYLE_ASSIGNMENT((#62708)); +#62708 = CURVE_STYLE('',#62709,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62709 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62710 = STYLED_ITEM('color',(#62711),#9448); +#62711 = PRESENTATION_STYLE_ASSIGNMENT((#62712)); +#62712 = SURFACE_STYLE_USAGE(.BOTH.,#62713); +#62713 = SURFACE_SIDE_STYLE('',(#62714)); +#62714 = SURFACE_STYLE_FILL_AREA(#62715); +#62715 = FILL_AREA_STYLE('',(#62716)); +#62716 = FILL_AREA_STYLE_COLOUR('',#61151); +#62717 = OVER_RIDING_STYLED_ITEM('overriding color',(#62718),#9453, + #62710); +#62718 = PRESENTATION_STYLE_ASSIGNMENT((#62719)); +#62719 = CURVE_STYLE('',#62720,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62720 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62721 = OVER_RIDING_STYLED_ITEM('overriding color',(#62722),#9460, + #62710); +#62722 = PRESENTATION_STYLE_ASSIGNMENT((#62723)); +#62723 = CURVE_STYLE('',#62724,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62724 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62725 = STYLED_ITEM('color',(#62726),#9470); +#62726 = PRESENTATION_STYLE_ASSIGNMENT((#62727)); +#62727 = SURFACE_STYLE_USAGE(.BOTH.,#62728); +#62728 = SURFACE_SIDE_STYLE('',(#62729)); +#62729 = SURFACE_STYLE_FILL_AREA(#62730); +#62730 = FILL_AREA_STYLE('',(#62731)); +#62731 = FILL_AREA_STYLE_COLOUR('',#61151); +#62732 = STYLED_ITEM('color',(#62733),#9482); +#62733 = PRESENTATION_STYLE_ASSIGNMENT((#62734)); +#62734 = SURFACE_STYLE_USAGE(.BOTH.,#62735); +#62735 = SURFACE_SIDE_STYLE('',(#62736)); +#62736 = SURFACE_STYLE_FILL_AREA(#62737); +#62737 = FILL_AREA_STYLE('',(#62738)); +#62738 = FILL_AREA_STYLE_COLOUR('',#61151); +#62739 = STYLED_ITEM('color',(#62740),#9494); +#62740 = PRESENTATION_STYLE_ASSIGNMENT((#62741)); +#62741 = SURFACE_STYLE_USAGE(.BOTH.,#62742); +#62742 = SURFACE_SIDE_STYLE('',(#62743)); +#62743 = SURFACE_STYLE_FILL_AREA(#62744); +#62744 = FILL_AREA_STYLE('',(#62745)); +#62745 = FILL_AREA_STYLE_COLOUR('',#61151); +#62746 = OVER_RIDING_STYLED_ITEM('overriding color',(#62747),#9498, + #62739); +#62747 = PRESENTATION_STYLE_ASSIGNMENT((#62748)); +#62748 = CURVE_STYLE('',#62749,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62749 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62750 = OVER_RIDING_STYLED_ITEM('overriding color',(#62751),#9506, + #62739); +#62751 = PRESENTATION_STYLE_ASSIGNMENT((#62752)); +#62752 = CURVE_STYLE('',#62753,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62753 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62754 = STYLED_ITEM('color',(#62755),#9519); +#62755 = PRESENTATION_STYLE_ASSIGNMENT((#62756)); +#62756 = SURFACE_STYLE_USAGE(.BOTH.,#62757); +#62757 = SURFACE_SIDE_STYLE('',(#62758)); +#62758 = SURFACE_STYLE_FILL_AREA(#62759); +#62759 = FILL_AREA_STYLE('',(#62760)); +#62760 = FILL_AREA_STYLE_COLOUR('',#61151); +#62761 = OVER_RIDING_STYLED_ITEM('overriding color',(#62762),#9523, + #62754); +#62762 = PRESENTATION_STYLE_ASSIGNMENT((#62763)); +#62763 = CURVE_STYLE('',#62764,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62764 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62765 = STYLED_ITEM('color',(#62766),#9536); +#62766 = PRESENTATION_STYLE_ASSIGNMENT((#62767)); +#62767 = SURFACE_STYLE_USAGE(.BOTH.,#62768); +#62768 = SURFACE_SIDE_STYLE('',(#62769)); +#62769 = SURFACE_STYLE_FILL_AREA(#62770); +#62770 = FILL_AREA_STYLE('',(#62771)); +#62771 = FILL_AREA_STYLE_COLOUR('',#61151); +#62772 = OVER_RIDING_STYLED_ITEM('overriding color',(#62773),#9540, + #62765); +#62773 = PRESENTATION_STYLE_ASSIGNMENT((#62774)); +#62774 = CURVE_STYLE('',#62775,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62775 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62776 = OVER_RIDING_STYLED_ITEM('overriding color',(#62777),#9550, + #62765); +#62777 = PRESENTATION_STYLE_ASSIGNMENT((#62778)); +#62778 = CURVE_STYLE('',#62779,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62779 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62780 = OVER_RIDING_STYLED_ITEM('overriding color',(#62781),#9558, + #62765); +#62781 = PRESENTATION_STYLE_ASSIGNMENT((#62782)); +#62782 = CURVE_STYLE('',#62783,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62783 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62784 = OVER_RIDING_STYLED_ITEM('overriding color',(#62785),#9566, + #62765); +#62785 = PRESENTATION_STYLE_ASSIGNMENT((#62786)); +#62786 = CURVE_STYLE('',#62787,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62787 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62788 = STYLED_ITEM('color',(#62789),#9576); +#62789 = PRESENTATION_STYLE_ASSIGNMENT((#62790)); +#62790 = SURFACE_STYLE_USAGE(.BOTH.,#62791); +#62791 = SURFACE_SIDE_STYLE('',(#62792)); +#62792 = SURFACE_STYLE_FILL_AREA(#62793); +#62793 = FILL_AREA_STYLE('',(#62794)); +#62794 = FILL_AREA_STYLE_COLOUR('',#61151); +#62795 = OVER_RIDING_STYLED_ITEM('overriding color',(#62796),#9580, + #62788); +#62796 = PRESENTATION_STYLE_ASSIGNMENT((#62797)); +#62797 = CURVE_STYLE('',#62798,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62798 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62799 = OVER_RIDING_STYLED_ITEM('overriding color',(#62800),#9588, + #62788); +#62800 = PRESENTATION_STYLE_ASSIGNMENT((#62801)); +#62801 = CURVE_STYLE('',#62802,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62802 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62803 = OVER_RIDING_STYLED_ITEM('overriding color',(#62804),#9596, + #62788); +#62804 = PRESENTATION_STYLE_ASSIGNMENT((#62805)); +#62805 = CURVE_STYLE('',#62806,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62806 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62807 = OVER_RIDING_STYLED_ITEM('overriding color',(#62808),#9604, + #62788); +#62808 = PRESENTATION_STYLE_ASSIGNMENT((#62809)); +#62809 = CURVE_STYLE('',#62810,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62810 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62811 = STYLED_ITEM('color',(#62812),#9615); +#62812 = PRESENTATION_STYLE_ASSIGNMENT((#62813)); +#62813 = SURFACE_STYLE_USAGE(.BOTH.,#62814); +#62814 = SURFACE_SIDE_STYLE('',(#62815)); +#62815 = SURFACE_STYLE_FILL_AREA(#62816); +#62816 = FILL_AREA_STYLE('',(#62817)); +#62817 = FILL_AREA_STYLE_COLOUR('',#61151); +#62818 = OVER_RIDING_STYLED_ITEM('overriding color',(#62819),#9619, + #62811); +#62819 = PRESENTATION_STYLE_ASSIGNMENT((#62820)); +#62820 = CURVE_STYLE('',#62821,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62821 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62822 = OVER_RIDING_STYLED_ITEM('overriding color',(#62823),#9628, + #62811); +#62823 = PRESENTATION_STYLE_ASSIGNMENT((#62824)); +#62824 = CURVE_STYLE('',#62825,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62825 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62826 = OVER_RIDING_STYLED_ITEM('overriding color',(#62827),#9636, + #62811); +#62827 = PRESENTATION_STYLE_ASSIGNMENT((#62828)); +#62828 = CURVE_STYLE('',#62829,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62829 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62830 = OVER_RIDING_STYLED_ITEM('overriding color',(#62831),#9644, + #62811); +#62831 = PRESENTATION_STYLE_ASSIGNMENT((#62832)); +#62832 = CURVE_STYLE('',#62833,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62833 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62834 = STYLED_ITEM('color',(#62835),#9654); +#62835 = PRESENTATION_STYLE_ASSIGNMENT((#62836)); +#62836 = SURFACE_STYLE_USAGE(.BOTH.,#62837); +#62837 = SURFACE_SIDE_STYLE('',(#62838)); +#62838 = SURFACE_STYLE_FILL_AREA(#62839); +#62839 = FILL_AREA_STYLE('',(#62840)); +#62840 = FILL_AREA_STYLE_COLOUR('',#61151); +#62841 = OVER_RIDING_STYLED_ITEM('overriding color',(#62842),#9658, + #62834); +#62842 = PRESENTATION_STYLE_ASSIGNMENT((#62843)); +#62843 = CURVE_STYLE('',#62844,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62844 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62845 = OVER_RIDING_STYLED_ITEM('overriding color',(#62846),#9668, + #62834); +#62846 = PRESENTATION_STYLE_ASSIGNMENT((#62847)); +#62847 = CURVE_STYLE('',#62848,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62848 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62849 = OVER_RIDING_STYLED_ITEM('overriding color',(#62850),#9676, + #62834); +#62850 = PRESENTATION_STYLE_ASSIGNMENT((#62851)); +#62851 = CURVE_STYLE('',#62852,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62852 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62853 = OVER_RIDING_STYLED_ITEM('overriding color',(#62854),#9684, + #62834); +#62854 = PRESENTATION_STYLE_ASSIGNMENT((#62855)); +#62855 = CURVE_STYLE('',#62856,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62856 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62857 = OVER_RIDING_STYLED_ITEM('overriding color',(#62858),#9692, + #62834); +#62858 = PRESENTATION_STYLE_ASSIGNMENT((#62859)); +#62859 = CURVE_STYLE('',#62860,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62860 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62861 = STYLED_ITEM('color',(#62862),#9702); +#62862 = PRESENTATION_STYLE_ASSIGNMENT((#62863)); +#62863 = SURFACE_STYLE_USAGE(.BOTH.,#62864); +#62864 = SURFACE_SIDE_STYLE('',(#62865)); +#62865 = SURFACE_STYLE_FILL_AREA(#62866); +#62866 = FILL_AREA_STYLE('',(#62867)); +#62867 = FILL_AREA_STYLE_COLOUR('',#61151); +#62868 = OVER_RIDING_STYLED_ITEM('overriding color',(#62869),#9706, + #62861); +#62869 = PRESENTATION_STYLE_ASSIGNMENT((#62870)); +#62870 = CURVE_STYLE('',#62871,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62871 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62872 = OVER_RIDING_STYLED_ITEM('overriding color',(#62873),#9713, + #62861); +#62873 = PRESENTATION_STYLE_ASSIGNMENT((#62874)); +#62874 = CURVE_STYLE('',#62875,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62875 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62876 = STYLED_ITEM('color',(#62877),#9724); +#62877 = PRESENTATION_STYLE_ASSIGNMENT((#62878)); +#62878 = SURFACE_STYLE_USAGE(.BOTH.,#62879); +#62879 = SURFACE_SIDE_STYLE('',(#62880)); +#62880 = SURFACE_STYLE_FILL_AREA(#62881); +#62881 = FILL_AREA_STYLE('',(#62882)); +#62882 = FILL_AREA_STYLE_COLOUR('',#61151); +#62883 = OVER_RIDING_STYLED_ITEM('overriding color',(#62884),#9728, + #62876); +#62884 = PRESENTATION_STYLE_ASSIGNMENT((#62885)); +#62885 = CURVE_STYLE('',#62886,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#62886 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62887 = OVER_RIDING_STYLED_ITEM('overriding color',(#62888),#9736, + #62876); +#62888 = PRESENTATION_STYLE_ASSIGNMENT((#62889)); +#62889 = CURVE_STYLE('',#62890,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62890 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62891 = OVER_RIDING_STYLED_ITEM('overriding color',(#62892),#9744, + #62876); +#62892 = PRESENTATION_STYLE_ASSIGNMENT((#62893)); +#62893 = CURVE_STYLE('',#62894,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62894 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62895 = STYLED_ITEM('color',(#62896),#9755); +#62896 = PRESENTATION_STYLE_ASSIGNMENT((#62897)); +#62897 = SURFACE_STYLE_USAGE(.BOTH.,#62898); +#62898 = SURFACE_SIDE_STYLE('',(#62899)); +#62899 = SURFACE_STYLE_FILL_AREA(#62900); +#62900 = FILL_AREA_STYLE('',(#62901)); +#62901 = FILL_AREA_STYLE_COLOUR('',#61151); +#62902 = OVER_RIDING_STYLED_ITEM('overriding color',(#62903),#9759, + #62895); +#62903 = PRESENTATION_STYLE_ASSIGNMENT((#62904)); +#62904 = CURVE_STYLE('',#62905,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62905 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62906 = OVER_RIDING_STYLED_ITEM('overriding color',(#62907),#9767, + #62895); +#62907 = PRESENTATION_STYLE_ASSIGNMENT((#62908)); +#62908 = CURVE_STYLE('',#62909,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62909 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62910 = OVER_RIDING_STYLED_ITEM('overriding color',(#62911),#9773, + #62895); +#62911 = PRESENTATION_STYLE_ASSIGNMENT((#62912)); +#62912 = CURVE_STYLE('',#62913,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62913 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62914 = OVER_RIDING_STYLED_ITEM('overriding color',(#62915),#9781, + #62895); +#62915 = PRESENTATION_STYLE_ASSIGNMENT((#62916)); +#62916 = CURVE_STYLE('',#62917,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62917 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62918 = STYLED_ITEM('color',(#62919),#9791); +#62919 = PRESENTATION_STYLE_ASSIGNMENT((#62920)); +#62920 = SURFACE_STYLE_USAGE(.BOTH.,#62921); +#62921 = SURFACE_SIDE_STYLE('',(#62922)); +#62922 = SURFACE_STYLE_FILL_AREA(#62923); +#62923 = FILL_AREA_STYLE('',(#62924)); +#62924 = FILL_AREA_STYLE_COLOUR('',#61151); +#62925 = OVER_RIDING_STYLED_ITEM('overriding color',(#62926),#9795, + #62918); +#62926 = PRESENTATION_STYLE_ASSIGNMENT((#62927)); +#62927 = CURVE_STYLE('',#62928,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62928 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62929 = OVER_RIDING_STYLED_ITEM('overriding color',(#62930),#9804, + #62918); +#62930 = PRESENTATION_STYLE_ASSIGNMENT((#62931)); +#62931 = CURVE_STYLE('',#62932,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62932 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62933 = OVER_RIDING_STYLED_ITEM('overriding color',(#62934),#9812, + #62918); +#62934 = PRESENTATION_STYLE_ASSIGNMENT((#62935)); +#62935 = CURVE_STYLE('',#62936,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62936 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62937 = STYLED_ITEM('color',(#62938),#9822); +#62938 = PRESENTATION_STYLE_ASSIGNMENT((#62939)); +#62939 = SURFACE_STYLE_USAGE(.BOTH.,#62940); +#62940 = SURFACE_SIDE_STYLE('',(#62941)); +#62941 = SURFACE_STYLE_FILL_AREA(#62942); +#62942 = FILL_AREA_STYLE('',(#62943)); +#62943 = FILL_AREA_STYLE_COLOUR('',#61151); +#62944 = STYLED_ITEM('color',(#62945),#9834); +#62945 = PRESENTATION_STYLE_ASSIGNMENT((#62946)); +#62946 = SURFACE_STYLE_USAGE(.BOTH.,#62947); +#62947 = SURFACE_SIDE_STYLE('',(#62948)); +#62948 = SURFACE_STYLE_FILL_AREA(#62949); +#62949 = FILL_AREA_STYLE('',(#62950)); +#62950 = FILL_AREA_STYLE_COLOUR('',#61151); +#62951 = OVER_RIDING_STYLED_ITEM('overriding color',(#62952),#9841, + #62944); +#62952 = PRESENTATION_STYLE_ASSIGNMENT((#62953)); +#62953 = CURVE_STYLE('',#62954,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62954 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62955 = STYLED_ITEM('color',(#62956),#9851); +#62956 = PRESENTATION_STYLE_ASSIGNMENT((#62957)); +#62957 = SURFACE_STYLE_USAGE(.BOTH.,#62958); +#62958 = SURFACE_SIDE_STYLE('',(#62959)); +#62959 = SURFACE_STYLE_FILL_AREA(#62960); +#62960 = FILL_AREA_STYLE('',(#62961)); +#62961 = FILL_AREA_STYLE_COLOUR('',#61151); +#62962 = OVER_RIDING_STYLED_ITEM('overriding color',(#62963),#9858, + #62955); +#62963 = PRESENTATION_STYLE_ASSIGNMENT((#62964)); +#62964 = CURVE_STYLE('',#62965,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62965 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62966 = STYLED_ITEM('color',(#62967),#9868); +#62967 = PRESENTATION_STYLE_ASSIGNMENT((#62968)); +#62968 = SURFACE_STYLE_USAGE(.BOTH.,#62969); +#62969 = SURFACE_SIDE_STYLE('',(#62970)); +#62970 = SURFACE_STYLE_FILL_AREA(#62971); +#62971 = FILL_AREA_STYLE('',(#62972)); +#62972 = FILL_AREA_STYLE_COLOUR('',#61151); +#62973 = OVER_RIDING_STYLED_ITEM('overriding color',(#62974),#9872, + #62966); +#62974 = PRESENTATION_STYLE_ASSIGNMENT((#62975)); +#62975 = CURVE_STYLE('',#62976,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62976 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62977 = OVER_RIDING_STYLED_ITEM('overriding color',(#62978),#9882, + #62966); +#62978 = PRESENTATION_STYLE_ASSIGNMENT((#62979)); +#62979 = CURVE_STYLE('',#62980,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62980 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62981 = OVER_RIDING_STYLED_ITEM('overriding color',(#62982),#9888, + #62966); +#62982 = PRESENTATION_STYLE_ASSIGNMENT((#62983)); +#62983 = CURVE_STYLE('',#62984,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62984 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62985 = OVER_RIDING_STYLED_ITEM('overriding color',(#62986),#9896, + #62966); +#62986 = PRESENTATION_STYLE_ASSIGNMENT((#62987)); +#62987 = CURVE_STYLE('',#62988,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62988 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#62989 = STYLED_ITEM('color',(#62990),#9906); +#62990 = PRESENTATION_STYLE_ASSIGNMENT((#62991)); +#62991 = SURFACE_STYLE_USAGE(.BOTH.,#62992); +#62992 = SURFACE_SIDE_STYLE('',(#62993)); +#62993 = SURFACE_STYLE_FILL_AREA(#62994); +#62994 = FILL_AREA_STYLE('',(#62995)); +#62995 = FILL_AREA_STYLE_COLOUR('',#61151); +#62996 = OVER_RIDING_STYLED_ITEM('overriding color',(#62997),#9910, + #62989); +#62997 = PRESENTATION_STYLE_ASSIGNMENT((#62998)); +#62998 = CURVE_STYLE('',#62999,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#62999 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63000 = OVER_RIDING_STYLED_ITEM('overriding color',(#63001),#9918, + #62989); +#63001 = PRESENTATION_STYLE_ASSIGNMENT((#63002)); +#63002 = CURVE_STYLE('',#63003,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63003 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63004 = OVER_RIDING_STYLED_ITEM('overriding color',(#63005),#9926, + #62989); +#63005 = PRESENTATION_STYLE_ASSIGNMENT((#63006)); +#63006 = CURVE_STYLE('',#63007,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63007 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63008 = STYLED_ITEM('color',(#63009),#9937); +#63009 = PRESENTATION_STYLE_ASSIGNMENT((#63010)); +#63010 = SURFACE_STYLE_USAGE(.BOTH.,#63011); +#63011 = SURFACE_SIDE_STYLE('',(#63012)); +#63012 = SURFACE_STYLE_FILL_AREA(#63013); +#63013 = FILL_AREA_STYLE('',(#63014)); +#63014 = FILL_AREA_STYLE_COLOUR('',#61151); +#63015 = OVER_RIDING_STYLED_ITEM('overriding color',(#63016),#9941, + #63008); +#63016 = PRESENTATION_STYLE_ASSIGNMENT((#63017)); +#63017 = CURVE_STYLE('',#63018,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63018 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63019 = OVER_RIDING_STYLED_ITEM('overriding color',(#63020),#9949, + #63008); +#63020 = PRESENTATION_STYLE_ASSIGNMENT((#63021)); +#63021 = CURVE_STYLE('',#63022,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63022 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63023 = STYLED_ITEM('color',(#63024),#9961); +#63024 = PRESENTATION_STYLE_ASSIGNMENT((#63025)); +#63025 = SURFACE_STYLE_USAGE(.BOTH.,#63026); +#63026 = SURFACE_SIDE_STYLE('',(#63027)); +#63027 = SURFACE_STYLE_FILL_AREA(#63028); +#63028 = FILL_AREA_STYLE('',(#63029)); +#63029 = FILL_AREA_STYLE_COLOUR('',#61151); +#63030 = OVER_RIDING_STYLED_ITEM('overriding color',(#63031),#9966, + #63023); +#63031 = PRESENTATION_STYLE_ASSIGNMENT((#63032)); +#63032 = CURVE_STYLE('',#63033,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63033 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63034 = STYLED_ITEM('color',(#63035),#9978); +#63035 = PRESENTATION_STYLE_ASSIGNMENT((#63036)); +#63036 = SURFACE_STYLE_USAGE(.BOTH.,#63037); +#63037 = SURFACE_SIDE_STYLE('',(#63038)); +#63038 = SURFACE_STYLE_FILL_AREA(#63039); +#63039 = FILL_AREA_STYLE('',(#63040)); +#63040 = FILL_AREA_STYLE_COLOUR('',#61151); +#63041 = OVER_RIDING_STYLED_ITEM('overriding color',(#63042),#9983, + #63034); +#63042 = PRESENTATION_STYLE_ASSIGNMENT((#63043)); +#63043 = CURVE_STYLE('',#63044,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63044 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63045 = OVER_RIDING_STYLED_ITEM('overriding color',(#63046),#9990, + #63034); +#63046 = PRESENTATION_STYLE_ASSIGNMENT((#63047)); +#63047 = CURVE_STYLE('',#63048,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63048 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63049 = STYLED_ITEM('color',(#63050),#10000); +#63050 = PRESENTATION_STYLE_ASSIGNMENT((#63051)); +#63051 = SURFACE_STYLE_USAGE(.BOTH.,#63052); +#63052 = SURFACE_SIDE_STYLE('',(#63053)); +#63053 = SURFACE_STYLE_FILL_AREA(#63054); +#63054 = FILL_AREA_STYLE('',(#63055)); +#63055 = FILL_AREA_STYLE_COLOUR('',#61151); +#63056 = STYLED_ITEM('color',(#63057),#10012); +#63057 = PRESENTATION_STYLE_ASSIGNMENT((#63058)); +#63058 = SURFACE_STYLE_USAGE(.BOTH.,#63059); +#63059 = SURFACE_SIDE_STYLE('',(#63060)); +#63060 = SURFACE_STYLE_FILL_AREA(#63061); +#63061 = FILL_AREA_STYLE('',(#63062)); +#63062 = FILL_AREA_STYLE_COLOUR('',#61151); +#63063 = STYLED_ITEM('color',(#63064),#10024); +#63064 = PRESENTATION_STYLE_ASSIGNMENT((#63065)); +#63065 = SURFACE_STYLE_USAGE(.BOTH.,#63066); +#63066 = SURFACE_SIDE_STYLE('',(#63067)); +#63067 = SURFACE_STYLE_FILL_AREA(#63068); +#63068 = FILL_AREA_STYLE('',(#63069)); +#63069 = FILL_AREA_STYLE_COLOUR('',#61151); +#63070 = OVER_RIDING_STYLED_ITEM('overriding color',(#63071),#10028, + #63063); +#63071 = PRESENTATION_STYLE_ASSIGNMENT((#63072)); +#63072 = CURVE_STYLE('',#63073,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63073 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63074 = OVER_RIDING_STYLED_ITEM('overriding color',(#63075),#10036, + #63063); +#63075 = PRESENTATION_STYLE_ASSIGNMENT((#63076)); +#63076 = CURVE_STYLE('',#63077,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63077 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63078 = STYLED_ITEM('color',(#63079),#10049); +#63079 = PRESENTATION_STYLE_ASSIGNMENT((#63080)); +#63080 = SURFACE_STYLE_USAGE(.BOTH.,#63081); +#63081 = SURFACE_SIDE_STYLE('',(#63082)); +#63082 = SURFACE_STYLE_FILL_AREA(#63083); +#63083 = FILL_AREA_STYLE('',(#63084)); +#63084 = FILL_AREA_STYLE_COLOUR('',#61151); +#63085 = OVER_RIDING_STYLED_ITEM('overriding color',(#63086),#10053, + #63078); +#63086 = PRESENTATION_STYLE_ASSIGNMENT((#63087)); +#63087 = CURVE_STYLE('',#63088,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63088 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63089 = STYLED_ITEM('color',(#63090),#10066); +#63090 = PRESENTATION_STYLE_ASSIGNMENT((#63091)); +#63091 = SURFACE_STYLE_USAGE(.BOTH.,#63092); +#63092 = SURFACE_SIDE_STYLE('',(#63093)); +#63093 = SURFACE_STYLE_FILL_AREA(#63094); +#63094 = FILL_AREA_STYLE('',(#63095)); +#63095 = FILL_AREA_STYLE_COLOUR('',#61151); +#63096 = OVER_RIDING_STYLED_ITEM('overriding color',(#63097),#10070, + #63089); +#63097 = PRESENTATION_STYLE_ASSIGNMENT((#63098)); +#63098 = CURVE_STYLE('',#63099,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63099 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63100 = OVER_RIDING_STYLED_ITEM('overriding color',(#63101),#10080, + #63089); +#63101 = PRESENTATION_STYLE_ASSIGNMENT((#63102)); +#63102 = CURVE_STYLE('',#63103,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63103 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63104 = OVER_RIDING_STYLED_ITEM('overriding color',(#63105),#10088, + #63089); +#63105 = PRESENTATION_STYLE_ASSIGNMENT((#63106)); +#63106 = CURVE_STYLE('',#63107,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63107 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63108 = OVER_RIDING_STYLED_ITEM('overriding color',(#63109),#10096, + #63089); +#63109 = PRESENTATION_STYLE_ASSIGNMENT((#63110)); +#63110 = CURVE_STYLE('',#63111,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63111 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63112 = STYLED_ITEM('color',(#63113),#10106); +#63113 = PRESENTATION_STYLE_ASSIGNMENT((#63114)); +#63114 = SURFACE_STYLE_USAGE(.BOTH.,#63115); +#63115 = SURFACE_SIDE_STYLE('',(#63116)); +#63116 = SURFACE_STYLE_FILL_AREA(#63117); +#63117 = FILL_AREA_STYLE('',(#63118)); +#63118 = FILL_AREA_STYLE_COLOUR('',#61151); +#63119 = OVER_RIDING_STYLED_ITEM('overriding color',(#63120),#10110, + #63112); +#63120 = PRESENTATION_STYLE_ASSIGNMENT((#63121)); +#63121 = CURVE_STYLE('',#63122,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63122 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63123 = OVER_RIDING_STYLED_ITEM('overriding color',(#63124),#10118, + #63112); +#63124 = PRESENTATION_STYLE_ASSIGNMENT((#63125)); +#63125 = CURVE_STYLE('',#63126,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63126 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63127 = OVER_RIDING_STYLED_ITEM('overriding color',(#63128),#10126, + #63112); +#63128 = PRESENTATION_STYLE_ASSIGNMENT((#63129)); +#63129 = CURVE_STYLE('',#63130,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63130 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63131 = OVER_RIDING_STYLED_ITEM('overriding color',(#63132),#10134, + #63112); +#63132 = PRESENTATION_STYLE_ASSIGNMENT((#63133)); +#63133 = CURVE_STYLE('',#63134,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63134 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63135 = STYLED_ITEM('color',(#63136),#10145); +#63136 = PRESENTATION_STYLE_ASSIGNMENT((#63137)); +#63137 = SURFACE_STYLE_USAGE(.BOTH.,#63138); +#63138 = SURFACE_SIDE_STYLE('',(#63139)); +#63139 = SURFACE_STYLE_FILL_AREA(#63140); +#63140 = FILL_AREA_STYLE('',(#63141)); +#63141 = FILL_AREA_STYLE_COLOUR('',#61151); +#63142 = OVER_RIDING_STYLED_ITEM('overriding color',(#63143),#10149, + #63135); +#63143 = PRESENTATION_STYLE_ASSIGNMENT((#63144)); +#63144 = CURVE_STYLE('',#63145,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63145 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63146 = OVER_RIDING_STYLED_ITEM('overriding color',(#63147),#10158, + #63135); +#63147 = PRESENTATION_STYLE_ASSIGNMENT((#63148)); +#63148 = CURVE_STYLE('',#63149,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63149 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63150 = OVER_RIDING_STYLED_ITEM('overriding color',(#63151),#10166, + #63135); +#63151 = PRESENTATION_STYLE_ASSIGNMENT((#63152)); +#63152 = CURVE_STYLE('',#63153,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63153 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63154 = OVER_RIDING_STYLED_ITEM('overriding color',(#63155),#10174, + #63135); +#63155 = PRESENTATION_STYLE_ASSIGNMENT((#63156)); +#63156 = CURVE_STYLE('',#63157,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63157 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63158 = STYLED_ITEM('color',(#63159),#10184); +#63159 = PRESENTATION_STYLE_ASSIGNMENT((#63160)); +#63160 = SURFACE_STYLE_USAGE(.BOTH.,#63161); +#63161 = SURFACE_SIDE_STYLE('',(#63162)); +#63162 = SURFACE_STYLE_FILL_AREA(#63163); +#63163 = FILL_AREA_STYLE('',(#63164)); +#63164 = FILL_AREA_STYLE_COLOUR('',#61151); +#63165 = OVER_RIDING_STYLED_ITEM('overriding color',(#63166),#10188, + #63158); +#63166 = PRESENTATION_STYLE_ASSIGNMENT((#63167)); +#63167 = CURVE_STYLE('',#63168,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63168 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63169 = OVER_RIDING_STYLED_ITEM('overriding color',(#63170),#10198, + #63158); +#63170 = PRESENTATION_STYLE_ASSIGNMENT((#63171)); +#63171 = CURVE_STYLE('',#63172,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63172 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63173 = OVER_RIDING_STYLED_ITEM('overriding color',(#63174),#10206, + #63158); +#63174 = PRESENTATION_STYLE_ASSIGNMENT((#63175)); +#63175 = CURVE_STYLE('',#63176,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63176 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63177 = OVER_RIDING_STYLED_ITEM('overriding color',(#63178),#10214, + #63158); +#63178 = PRESENTATION_STYLE_ASSIGNMENT((#63179)); +#63179 = CURVE_STYLE('',#63180,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63180 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63181 = OVER_RIDING_STYLED_ITEM('overriding color',(#63182),#10222, + #63158); +#63182 = PRESENTATION_STYLE_ASSIGNMENT((#63183)); +#63183 = CURVE_STYLE('',#63184,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63184 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63185 = STYLED_ITEM('color',(#63186),#10232); +#63186 = PRESENTATION_STYLE_ASSIGNMENT((#63187)); +#63187 = SURFACE_STYLE_USAGE(.BOTH.,#63188); +#63188 = SURFACE_SIDE_STYLE('',(#63189)); +#63189 = SURFACE_STYLE_FILL_AREA(#63190); +#63190 = FILL_AREA_STYLE('',(#63191)); +#63191 = FILL_AREA_STYLE_COLOUR('',#61151); +#63192 = OVER_RIDING_STYLED_ITEM('overriding color',(#63193),#10236, + #63185); +#63193 = PRESENTATION_STYLE_ASSIGNMENT((#63194)); +#63194 = CURVE_STYLE('',#63195,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63195 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63196 = OVER_RIDING_STYLED_ITEM('overriding color',(#63197),#10243, + #63185); +#63197 = PRESENTATION_STYLE_ASSIGNMENT((#63198)); +#63198 = CURVE_STYLE('',#63199,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63199 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63200 = STYLED_ITEM('color',(#63201),#10254); +#63201 = PRESENTATION_STYLE_ASSIGNMENT((#63202)); +#63202 = SURFACE_STYLE_USAGE(.BOTH.,#63203); +#63203 = SURFACE_SIDE_STYLE('',(#63204)); +#63204 = SURFACE_STYLE_FILL_AREA(#63205); +#63205 = FILL_AREA_STYLE('',(#63206)); +#63206 = FILL_AREA_STYLE_COLOUR('',#61151); +#63207 = OVER_RIDING_STYLED_ITEM('overriding color',(#63208),#10258, + #63200); +#63208 = PRESENTATION_STYLE_ASSIGNMENT((#63209)); +#63209 = CURVE_STYLE('',#63210,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63210 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63211 = OVER_RIDING_STYLED_ITEM('overriding color',(#63212),#10266, + #63200); +#63212 = PRESENTATION_STYLE_ASSIGNMENT((#63213)); +#63213 = CURVE_STYLE('',#63214,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63214 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63215 = OVER_RIDING_STYLED_ITEM('overriding color',(#63216),#10274, + #63200); +#63216 = PRESENTATION_STYLE_ASSIGNMENT((#63217)); +#63217 = CURVE_STYLE('',#63218,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63218 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63219 = STYLED_ITEM('color',(#63220),#10285); +#63220 = PRESENTATION_STYLE_ASSIGNMENT((#63221)); +#63221 = SURFACE_STYLE_USAGE(.BOTH.,#63222); +#63222 = SURFACE_SIDE_STYLE('',(#63223)); +#63223 = SURFACE_STYLE_FILL_AREA(#63224); +#63224 = FILL_AREA_STYLE('',(#63225)); +#63225 = FILL_AREA_STYLE_COLOUR('',#61151); +#63226 = OVER_RIDING_STYLED_ITEM('overriding color',(#63227),#10289, + #63219); +#63227 = PRESENTATION_STYLE_ASSIGNMENT((#63228)); +#63228 = CURVE_STYLE('',#63229,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63229 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63230 = OVER_RIDING_STYLED_ITEM('overriding color',(#63231),#10297, + #63219); +#63231 = PRESENTATION_STYLE_ASSIGNMENT((#63232)); +#63232 = CURVE_STYLE('',#63233,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63233 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63234 = OVER_RIDING_STYLED_ITEM('overriding color',(#63235),#10303, + #63219); +#63235 = PRESENTATION_STYLE_ASSIGNMENT((#63236)); +#63236 = CURVE_STYLE('',#63237,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63237 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63238 = OVER_RIDING_STYLED_ITEM('overriding color',(#63239),#10311, + #63219); +#63239 = PRESENTATION_STYLE_ASSIGNMENT((#63240)); +#63240 = CURVE_STYLE('',#63241,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63241 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63242 = STYLED_ITEM('color',(#63243),#10321); +#63243 = PRESENTATION_STYLE_ASSIGNMENT((#63244)); +#63244 = SURFACE_STYLE_USAGE(.BOTH.,#63245); +#63245 = SURFACE_SIDE_STYLE('',(#63246)); +#63246 = SURFACE_STYLE_FILL_AREA(#63247); +#63247 = FILL_AREA_STYLE('',(#63248)); +#63248 = FILL_AREA_STYLE_COLOUR('',#61151); +#63249 = OVER_RIDING_STYLED_ITEM('overriding color',(#63250),#10325, + #63242); +#63250 = PRESENTATION_STYLE_ASSIGNMENT((#63251)); +#63251 = CURVE_STYLE('',#63252,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63252 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63253 = OVER_RIDING_STYLED_ITEM('overriding color',(#63254),#10334, + #63242); +#63254 = PRESENTATION_STYLE_ASSIGNMENT((#63255)); +#63255 = CURVE_STYLE('',#63256,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63256 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63257 = OVER_RIDING_STYLED_ITEM('overriding color',(#63258),#10342, + #63242); +#63258 = PRESENTATION_STYLE_ASSIGNMENT((#63259)); +#63259 = CURVE_STYLE('',#63260,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63260 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63261 = STYLED_ITEM('color',(#63262),#10352); +#63262 = PRESENTATION_STYLE_ASSIGNMENT((#63263)); +#63263 = SURFACE_STYLE_USAGE(.BOTH.,#63264); +#63264 = SURFACE_SIDE_STYLE('',(#63265)); +#63265 = SURFACE_STYLE_FILL_AREA(#63266); +#63266 = FILL_AREA_STYLE('',(#63267)); +#63267 = FILL_AREA_STYLE_COLOUR('',#61151); +#63268 = STYLED_ITEM('color',(#63269),#10364); +#63269 = PRESENTATION_STYLE_ASSIGNMENT((#63270)); +#63270 = SURFACE_STYLE_USAGE(.BOTH.,#63271); +#63271 = SURFACE_SIDE_STYLE('',(#63272)); +#63272 = SURFACE_STYLE_FILL_AREA(#63273); +#63273 = FILL_AREA_STYLE('',(#63274)); +#63274 = FILL_AREA_STYLE_COLOUR('',#61151); +#63275 = OVER_RIDING_STYLED_ITEM('overriding color',(#63276),#10371, + #63268); +#63276 = PRESENTATION_STYLE_ASSIGNMENT((#63277)); +#63277 = CURVE_STYLE('',#63278,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63278 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63279 = STYLED_ITEM('color',(#63280),#10381); +#63280 = PRESENTATION_STYLE_ASSIGNMENT((#63281)); +#63281 = SURFACE_STYLE_USAGE(.BOTH.,#63282); +#63282 = SURFACE_SIDE_STYLE('',(#63283)); +#63283 = SURFACE_STYLE_FILL_AREA(#63284); +#63284 = FILL_AREA_STYLE('',(#63285)); +#63285 = FILL_AREA_STYLE_COLOUR('',#61151); +#63286 = OVER_RIDING_STYLED_ITEM('overriding color',(#63287),#10388, + #63279); +#63287 = PRESENTATION_STYLE_ASSIGNMENT((#63288)); +#63288 = CURVE_STYLE('',#63289,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63289 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63290 = STYLED_ITEM('color',(#63291),#10398); +#63291 = PRESENTATION_STYLE_ASSIGNMENT((#63292)); +#63292 = SURFACE_STYLE_USAGE(.BOTH.,#63293); +#63293 = SURFACE_SIDE_STYLE('',(#63294)); +#63294 = SURFACE_STYLE_FILL_AREA(#63295); +#63295 = FILL_AREA_STYLE('',(#63296)); +#63296 = FILL_AREA_STYLE_COLOUR('',#61151); +#63297 = OVER_RIDING_STYLED_ITEM('overriding color',(#63298),#10402, + #63290); +#63298 = PRESENTATION_STYLE_ASSIGNMENT((#63299)); +#63299 = CURVE_STYLE('',#63300,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63300 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63301 = OVER_RIDING_STYLED_ITEM('overriding color',(#63302),#10412, + #63290); +#63302 = PRESENTATION_STYLE_ASSIGNMENT((#63303)); +#63303 = CURVE_STYLE('',#63304,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63304 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63305 = OVER_RIDING_STYLED_ITEM('overriding color',(#63306),#10418, + #63290); +#63306 = PRESENTATION_STYLE_ASSIGNMENT((#63307)); +#63307 = CURVE_STYLE('',#63308,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63308 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63309 = OVER_RIDING_STYLED_ITEM('overriding color',(#63310),#10426, + #63290); +#63310 = PRESENTATION_STYLE_ASSIGNMENT((#63311)); +#63311 = CURVE_STYLE('',#63312,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63312 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63313 = STYLED_ITEM('color',(#63314),#10436); +#63314 = PRESENTATION_STYLE_ASSIGNMENT((#63315)); +#63315 = SURFACE_STYLE_USAGE(.BOTH.,#63316); +#63316 = SURFACE_SIDE_STYLE('',(#63317)); +#63317 = SURFACE_STYLE_FILL_AREA(#63318); +#63318 = FILL_AREA_STYLE('',(#63319)); +#63319 = FILL_AREA_STYLE_COLOUR('',#61151); +#63320 = OVER_RIDING_STYLED_ITEM('overriding color',(#63321),#10440, + #63313); +#63321 = PRESENTATION_STYLE_ASSIGNMENT((#63322)); +#63322 = CURVE_STYLE('',#63323,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63323 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63324 = OVER_RIDING_STYLED_ITEM('overriding color',(#63325),#10448, + #63313); +#63325 = PRESENTATION_STYLE_ASSIGNMENT((#63326)); +#63326 = CURVE_STYLE('',#63327,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63327 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63328 = OVER_RIDING_STYLED_ITEM('overriding color',(#63329),#10456, + #63313); +#63329 = PRESENTATION_STYLE_ASSIGNMENT((#63330)); +#63330 = CURVE_STYLE('',#63331,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63331 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63332 = STYLED_ITEM('color',(#63333),#10467); +#63333 = PRESENTATION_STYLE_ASSIGNMENT((#63334)); +#63334 = SURFACE_STYLE_USAGE(.BOTH.,#63335); +#63335 = SURFACE_SIDE_STYLE('',(#63336)); +#63336 = SURFACE_STYLE_FILL_AREA(#63337); +#63337 = FILL_AREA_STYLE('',(#63338)); +#63338 = FILL_AREA_STYLE_COLOUR('',#61151); +#63339 = OVER_RIDING_STYLED_ITEM('overriding color',(#63340),#10471, + #63332); +#63340 = PRESENTATION_STYLE_ASSIGNMENT((#63341)); +#63341 = CURVE_STYLE('',#63342,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63342 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63343 = OVER_RIDING_STYLED_ITEM('overriding color',(#63344),#10479, + #63332); +#63344 = PRESENTATION_STYLE_ASSIGNMENT((#63345)); +#63345 = CURVE_STYLE('',#63346,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63346 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63347 = STYLED_ITEM('color',(#63348),#10491); +#63348 = PRESENTATION_STYLE_ASSIGNMENT((#63349)); +#63349 = SURFACE_STYLE_USAGE(.BOTH.,#63350); +#63350 = SURFACE_SIDE_STYLE('',(#63351)); +#63351 = SURFACE_STYLE_FILL_AREA(#63352); +#63352 = FILL_AREA_STYLE('',(#63353)); +#63353 = FILL_AREA_STYLE_COLOUR('',#61151); +#63354 = OVER_RIDING_STYLED_ITEM('overriding color',(#63355),#10496, + #63347); +#63355 = PRESENTATION_STYLE_ASSIGNMENT((#63356)); +#63356 = CURVE_STYLE('',#63357,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63357 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63358 = STYLED_ITEM('color',(#63359),#10508); +#63359 = PRESENTATION_STYLE_ASSIGNMENT((#63360)); +#63360 = SURFACE_STYLE_USAGE(.BOTH.,#63361); +#63361 = SURFACE_SIDE_STYLE('',(#63362)); +#63362 = SURFACE_STYLE_FILL_AREA(#63363); +#63363 = FILL_AREA_STYLE('',(#63364)); +#63364 = FILL_AREA_STYLE_COLOUR('',#61151); +#63365 = OVER_RIDING_STYLED_ITEM('overriding color',(#63366),#10513, + #63358); +#63366 = PRESENTATION_STYLE_ASSIGNMENT((#63367)); +#63367 = CURVE_STYLE('',#63368,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63368 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63369 = OVER_RIDING_STYLED_ITEM('overriding color',(#63370),#10520, + #63358); +#63370 = PRESENTATION_STYLE_ASSIGNMENT((#63371)); +#63371 = CURVE_STYLE('',#63372,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63372 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63373 = STYLED_ITEM('color',(#63374),#10530); +#63374 = PRESENTATION_STYLE_ASSIGNMENT((#63375)); +#63375 = SURFACE_STYLE_USAGE(.BOTH.,#63376); +#63376 = SURFACE_SIDE_STYLE('',(#63377)); +#63377 = SURFACE_STYLE_FILL_AREA(#63378); +#63378 = FILL_AREA_STYLE('',(#63379)); +#63379 = FILL_AREA_STYLE_COLOUR('',#61151); +#63380 = STYLED_ITEM('color',(#63381),#10542); +#63381 = PRESENTATION_STYLE_ASSIGNMENT((#63382)); +#63382 = SURFACE_STYLE_USAGE(.BOTH.,#63383); +#63383 = SURFACE_SIDE_STYLE('',(#63384)); +#63384 = SURFACE_STYLE_FILL_AREA(#63385); +#63385 = FILL_AREA_STYLE('',(#63386)); +#63386 = FILL_AREA_STYLE_COLOUR('',#61151); +#63387 = STYLED_ITEM('color',(#63388),#10554); +#63388 = PRESENTATION_STYLE_ASSIGNMENT((#63389)); +#63389 = SURFACE_STYLE_USAGE(.BOTH.,#63390); +#63390 = SURFACE_SIDE_STYLE('',(#63391)); +#63391 = SURFACE_STYLE_FILL_AREA(#63392); +#63392 = FILL_AREA_STYLE('',(#63393)); +#63393 = FILL_AREA_STYLE_COLOUR('',#61151); +#63394 = OVER_RIDING_STYLED_ITEM('overriding color',(#63395),#10558, + #63387); +#63395 = PRESENTATION_STYLE_ASSIGNMENT((#63396)); +#63396 = CURVE_STYLE('',#63397,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63397 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63398 = OVER_RIDING_STYLED_ITEM('overriding color',(#63399),#10566, + #63387); +#63399 = PRESENTATION_STYLE_ASSIGNMENT((#63400)); +#63400 = CURVE_STYLE('',#63401,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63401 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63402 = STYLED_ITEM('color',(#63403),#10579); +#63403 = PRESENTATION_STYLE_ASSIGNMENT((#63404)); +#63404 = SURFACE_STYLE_USAGE(.BOTH.,#63405); +#63405 = SURFACE_SIDE_STYLE('',(#63406)); +#63406 = SURFACE_STYLE_FILL_AREA(#63407); +#63407 = FILL_AREA_STYLE('',(#63408)); +#63408 = FILL_AREA_STYLE_COLOUR('',#61151); +#63409 = OVER_RIDING_STYLED_ITEM('overriding color',(#63410),#10583, + #63402); +#63410 = PRESENTATION_STYLE_ASSIGNMENT((#63411)); +#63411 = CURVE_STYLE('',#63412,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63412 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63413 = STYLED_ITEM('color',(#63414),#10596); +#63414 = PRESENTATION_STYLE_ASSIGNMENT((#63415)); +#63415 = SURFACE_STYLE_USAGE(.BOTH.,#63416); +#63416 = SURFACE_SIDE_STYLE('',(#63417)); +#63417 = SURFACE_STYLE_FILL_AREA(#63418); +#63418 = FILL_AREA_STYLE('',(#63419)); +#63419 = FILL_AREA_STYLE_COLOUR('',#61151); +#63420 = OVER_RIDING_STYLED_ITEM('overriding color',(#63421),#10600, + #63413); +#63421 = PRESENTATION_STYLE_ASSIGNMENT((#63422)); +#63422 = CURVE_STYLE('',#63423,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63423 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63424 = OVER_RIDING_STYLED_ITEM('overriding color',(#63425),#10610, + #63413); +#63425 = PRESENTATION_STYLE_ASSIGNMENT((#63426)); +#63426 = CURVE_STYLE('',#63427,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63427 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63428 = OVER_RIDING_STYLED_ITEM('overriding color',(#63429),#10618, + #63413); +#63429 = PRESENTATION_STYLE_ASSIGNMENT((#63430)); +#63430 = CURVE_STYLE('',#63431,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63431 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63432 = OVER_RIDING_STYLED_ITEM('overriding color',(#63433),#10626, + #63413); +#63433 = PRESENTATION_STYLE_ASSIGNMENT((#63434)); +#63434 = CURVE_STYLE('',#63435,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63435 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63436 = STYLED_ITEM('color',(#63437),#10636); +#63437 = PRESENTATION_STYLE_ASSIGNMENT((#63438)); +#63438 = SURFACE_STYLE_USAGE(.BOTH.,#63439); +#63439 = SURFACE_SIDE_STYLE('',(#63440)); +#63440 = SURFACE_STYLE_FILL_AREA(#63441); +#63441 = FILL_AREA_STYLE('',(#63442)); +#63442 = FILL_AREA_STYLE_COLOUR('',#61151); +#63443 = OVER_RIDING_STYLED_ITEM('overriding color',(#63444),#10640, + #63436); +#63444 = PRESENTATION_STYLE_ASSIGNMENT((#63445)); +#63445 = CURVE_STYLE('',#63446,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63446 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63447 = OVER_RIDING_STYLED_ITEM('overriding color',(#63448),#10648, + #63436); +#63448 = PRESENTATION_STYLE_ASSIGNMENT((#63449)); +#63449 = CURVE_STYLE('',#63450,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63450 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63451 = OVER_RIDING_STYLED_ITEM('overriding color',(#63452),#10656, + #63436); +#63452 = PRESENTATION_STYLE_ASSIGNMENT((#63453)); +#63453 = CURVE_STYLE('',#63454,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63454 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63455 = OVER_RIDING_STYLED_ITEM('overriding color',(#63456),#10664, + #63436); +#63456 = PRESENTATION_STYLE_ASSIGNMENT((#63457)); +#63457 = CURVE_STYLE('',#63458,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63458 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63459 = STYLED_ITEM('color',(#63460),#10675); +#63460 = PRESENTATION_STYLE_ASSIGNMENT((#63461)); +#63461 = SURFACE_STYLE_USAGE(.BOTH.,#63462); +#63462 = SURFACE_SIDE_STYLE('',(#63463)); +#63463 = SURFACE_STYLE_FILL_AREA(#63464); +#63464 = FILL_AREA_STYLE('',(#63465)); +#63465 = FILL_AREA_STYLE_COLOUR('',#61151); +#63466 = OVER_RIDING_STYLED_ITEM('overriding color',(#63467),#10679, + #63459); +#63467 = PRESENTATION_STYLE_ASSIGNMENT((#63468)); +#63468 = CURVE_STYLE('',#63469,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63469 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63470 = OVER_RIDING_STYLED_ITEM('overriding color',(#63471),#10688, + #63459); +#63471 = PRESENTATION_STYLE_ASSIGNMENT((#63472)); +#63472 = CURVE_STYLE('',#63473,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63473 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63474 = OVER_RIDING_STYLED_ITEM('overriding color',(#63475),#10696, + #63459); +#63475 = PRESENTATION_STYLE_ASSIGNMENT((#63476)); +#63476 = CURVE_STYLE('',#63477,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63477 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63478 = OVER_RIDING_STYLED_ITEM('overriding color',(#63479),#10704, + #63459); +#63479 = PRESENTATION_STYLE_ASSIGNMENT((#63480)); +#63480 = CURVE_STYLE('',#63481,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63481 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63482 = STYLED_ITEM('color',(#63483),#10714); +#63483 = PRESENTATION_STYLE_ASSIGNMENT((#63484)); +#63484 = SURFACE_STYLE_USAGE(.BOTH.,#63485); +#63485 = SURFACE_SIDE_STYLE('',(#63486)); +#63486 = SURFACE_STYLE_FILL_AREA(#63487); +#63487 = FILL_AREA_STYLE('',(#63488)); +#63488 = FILL_AREA_STYLE_COLOUR('',#61151); +#63489 = OVER_RIDING_STYLED_ITEM('overriding color',(#63490),#10718, + #63482); +#63490 = PRESENTATION_STYLE_ASSIGNMENT((#63491)); +#63491 = CURVE_STYLE('',#63492,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63492 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63493 = OVER_RIDING_STYLED_ITEM('overriding color',(#63494),#10728, + #63482); +#63494 = PRESENTATION_STYLE_ASSIGNMENT((#63495)); +#63495 = CURVE_STYLE('',#63496,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63496 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63497 = OVER_RIDING_STYLED_ITEM('overriding color',(#63498),#10736, + #63482); +#63498 = PRESENTATION_STYLE_ASSIGNMENT((#63499)); +#63499 = CURVE_STYLE('',#63500,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63500 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63501 = OVER_RIDING_STYLED_ITEM('overriding color',(#63502),#10744, + #63482); +#63502 = PRESENTATION_STYLE_ASSIGNMENT((#63503)); +#63503 = CURVE_STYLE('',#63504,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63504 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63505 = OVER_RIDING_STYLED_ITEM('overriding color',(#63506),#10752, + #63482); +#63506 = PRESENTATION_STYLE_ASSIGNMENT((#63507)); +#63507 = CURVE_STYLE('',#63508,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63508 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63509 = STYLED_ITEM('color',(#63510),#10762); +#63510 = PRESENTATION_STYLE_ASSIGNMENT((#63511)); +#63511 = SURFACE_STYLE_USAGE(.BOTH.,#63512); +#63512 = SURFACE_SIDE_STYLE('',(#63513)); +#63513 = SURFACE_STYLE_FILL_AREA(#63514); +#63514 = FILL_AREA_STYLE('',(#63515)); +#63515 = FILL_AREA_STYLE_COLOUR('',#61151); +#63516 = OVER_RIDING_STYLED_ITEM('overriding color',(#63517),#10766, + #63509); +#63517 = PRESENTATION_STYLE_ASSIGNMENT((#63518)); +#63518 = CURVE_STYLE('',#63519,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63519 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63520 = OVER_RIDING_STYLED_ITEM('overriding color',(#63521),#10773, + #63509); +#63521 = PRESENTATION_STYLE_ASSIGNMENT((#63522)); +#63522 = CURVE_STYLE('',#63523,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63523 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63524 = STYLED_ITEM('color',(#63525),#10784); +#63525 = PRESENTATION_STYLE_ASSIGNMENT((#63526)); +#63526 = SURFACE_STYLE_USAGE(.BOTH.,#63527); +#63527 = SURFACE_SIDE_STYLE('',(#63528)); +#63528 = SURFACE_STYLE_FILL_AREA(#63529); +#63529 = FILL_AREA_STYLE('',(#63530)); +#63530 = FILL_AREA_STYLE_COLOUR('',#61151); +#63531 = OVER_RIDING_STYLED_ITEM('overriding color',(#63532),#10788, + #63524); +#63532 = PRESENTATION_STYLE_ASSIGNMENT((#63533)); +#63533 = CURVE_STYLE('',#63534,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63534 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63535 = OVER_RIDING_STYLED_ITEM('overriding color',(#63536),#10796, + #63524); +#63536 = PRESENTATION_STYLE_ASSIGNMENT((#63537)); +#63537 = CURVE_STYLE('',#63538,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63538 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63539 = OVER_RIDING_STYLED_ITEM('overriding color',(#63540),#10804, + #63524); +#63540 = PRESENTATION_STYLE_ASSIGNMENT((#63541)); +#63541 = CURVE_STYLE('',#63542,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63542 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63543 = STYLED_ITEM('color',(#63544),#10815); +#63544 = PRESENTATION_STYLE_ASSIGNMENT((#63545)); +#63545 = SURFACE_STYLE_USAGE(.BOTH.,#63546); +#63546 = SURFACE_SIDE_STYLE('',(#63547)); +#63547 = SURFACE_STYLE_FILL_AREA(#63548); +#63548 = FILL_AREA_STYLE('',(#63549)); +#63549 = FILL_AREA_STYLE_COLOUR('',#61151); +#63550 = OVER_RIDING_STYLED_ITEM('overriding color',(#63551),#10819, + #63543); +#63551 = PRESENTATION_STYLE_ASSIGNMENT((#63552)); +#63552 = CURVE_STYLE('',#63553,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63553 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63554 = OVER_RIDING_STYLED_ITEM('overriding color',(#63555),#10827, + #63543); +#63555 = PRESENTATION_STYLE_ASSIGNMENT((#63556)); +#63556 = CURVE_STYLE('',#63557,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63557 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63558 = OVER_RIDING_STYLED_ITEM('overriding color',(#63559),#10833, + #63543); +#63559 = PRESENTATION_STYLE_ASSIGNMENT((#63560)); +#63560 = CURVE_STYLE('',#63561,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63561 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63562 = OVER_RIDING_STYLED_ITEM('overriding color',(#63563),#10841, + #63543); +#63563 = PRESENTATION_STYLE_ASSIGNMENT((#63564)); +#63564 = CURVE_STYLE('',#63565,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63565 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63566 = STYLED_ITEM('color',(#63567),#10851); +#63567 = PRESENTATION_STYLE_ASSIGNMENT((#63568)); +#63568 = SURFACE_STYLE_USAGE(.BOTH.,#63569); +#63569 = SURFACE_SIDE_STYLE('',(#63570)); +#63570 = SURFACE_STYLE_FILL_AREA(#63571); +#63571 = FILL_AREA_STYLE('',(#63572)); +#63572 = FILL_AREA_STYLE_COLOUR('',#61151); +#63573 = OVER_RIDING_STYLED_ITEM('overriding color',(#63574),#10855, + #63566); +#63574 = PRESENTATION_STYLE_ASSIGNMENT((#63575)); +#63575 = CURVE_STYLE('',#63576,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63576 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63577 = OVER_RIDING_STYLED_ITEM('overriding color',(#63578),#10864, + #63566); +#63578 = PRESENTATION_STYLE_ASSIGNMENT((#63579)); +#63579 = CURVE_STYLE('',#63580,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63580 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63581 = OVER_RIDING_STYLED_ITEM('overriding color',(#63582),#10872, + #63566); +#63582 = PRESENTATION_STYLE_ASSIGNMENT((#63583)); +#63583 = CURVE_STYLE('',#63584,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63584 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63585 = STYLED_ITEM('color',(#63586),#10882); +#63586 = PRESENTATION_STYLE_ASSIGNMENT((#63587)); +#63587 = SURFACE_STYLE_USAGE(.BOTH.,#63588); +#63588 = SURFACE_SIDE_STYLE('',(#63589)); +#63589 = SURFACE_STYLE_FILL_AREA(#63590); +#63590 = FILL_AREA_STYLE('',(#63591)); +#63591 = FILL_AREA_STYLE_COLOUR('',#61151); +#63592 = STYLED_ITEM('color',(#63593),#10894); +#63593 = PRESENTATION_STYLE_ASSIGNMENT((#63594)); +#63594 = SURFACE_STYLE_USAGE(.BOTH.,#63595); +#63595 = SURFACE_SIDE_STYLE('',(#63596)); +#63596 = SURFACE_STYLE_FILL_AREA(#63597); +#63597 = FILL_AREA_STYLE('',(#63598)); +#63598 = FILL_AREA_STYLE_COLOUR('',#61151); +#63599 = OVER_RIDING_STYLED_ITEM('overriding color',(#63600),#10901, + #63592); +#63600 = PRESENTATION_STYLE_ASSIGNMENT((#63601)); +#63601 = CURVE_STYLE('',#63602,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63602 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63603 = STYLED_ITEM('color',(#63604),#10911); +#63604 = PRESENTATION_STYLE_ASSIGNMENT((#63605)); +#63605 = SURFACE_STYLE_USAGE(.BOTH.,#63606); +#63606 = SURFACE_SIDE_STYLE('',(#63607)); +#63607 = SURFACE_STYLE_FILL_AREA(#63608); +#63608 = FILL_AREA_STYLE('',(#63609)); +#63609 = FILL_AREA_STYLE_COLOUR('',#61151); +#63610 = OVER_RIDING_STYLED_ITEM('overriding color',(#63611),#10918, + #63603); +#63611 = PRESENTATION_STYLE_ASSIGNMENT((#63612)); +#63612 = CURVE_STYLE('',#63613,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63613 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63614 = STYLED_ITEM('color',(#63615),#10928); +#63615 = PRESENTATION_STYLE_ASSIGNMENT((#63616)); +#63616 = SURFACE_STYLE_USAGE(.BOTH.,#63617); +#63617 = SURFACE_SIDE_STYLE('',(#63618)); +#63618 = SURFACE_STYLE_FILL_AREA(#63619); +#63619 = FILL_AREA_STYLE('',(#63620)); +#63620 = FILL_AREA_STYLE_COLOUR('',#61151); +#63621 = OVER_RIDING_STYLED_ITEM('overriding color',(#63622),#10932, + #63614); +#63622 = PRESENTATION_STYLE_ASSIGNMENT((#63623)); +#63623 = CURVE_STYLE('',#63624,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63624 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63625 = OVER_RIDING_STYLED_ITEM('overriding color',(#63626),#10942, + #63614); +#63626 = PRESENTATION_STYLE_ASSIGNMENT((#63627)); +#63627 = CURVE_STYLE('',#63628,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63628 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63629 = OVER_RIDING_STYLED_ITEM('overriding color',(#63630),#10948, + #63614); +#63630 = PRESENTATION_STYLE_ASSIGNMENT((#63631)); +#63631 = CURVE_STYLE('',#63632,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63632 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63633 = OVER_RIDING_STYLED_ITEM('overriding color',(#63634),#10956, + #63614); +#63634 = PRESENTATION_STYLE_ASSIGNMENT((#63635)); +#63635 = CURVE_STYLE('',#63636,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63636 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63637 = STYLED_ITEM('color',(#63638),#10966); +#63638 = PRESENTATION_STYLE_ASSIGNMENT((#63639)); +#63639 = SURFACE_STYLE_USAGE(.BOTH.,#63640); +#63640 = SURFACE_SIDE_STYLE('',(#63641)); +#63641 = SURFACE_STYLE_FILL_AREA(#63642); +#63642 = FILL_AREA_STYLE('',(#63643)); +#63643 = FILL_AREA_STYLE_COLOUR('',#61151); +#63644 = OVER_RIDING_STYLED_ITEM('overriding color',(#63645),#10970, + #63637); +#63645 = PRESENTATION_STYLE_ASSIGNMENT((#63646)); +#63646 = CURVE_STYLE('',#63647,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63647 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63648 = OVER_RIDING_STYLED_ITEM('overriding color',(#63649),#10978, + #63637); +#63649 = PRESENTATION_STYLE_ASSIGNMENT((#63650)); +#63650 = CURVE_STYLE('',#63651,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63651 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63652 = OVER_RIDING_STYLED_ITEM('overriding color',(#63653),#10986, + #63637); +#63653 = PRESENTATION_STYLE_ASSIGNMENT((#63654)); +#63654 = CURVE_STYLE('',#63655,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63655 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63656 = STYLED_ITEM('color',(#63657),#10997); +#63657 = PRESENTATION_STYLE_ASSIGNMENT((#63658)); +#63658 = SURFACE_STYLE_USAGE(.BOTH.,#63659); +#63659 = SURFACE_SIDE_STYLE('',(#63660)); +#63660 = SURFACE_STYLE_FILL_AREA(#63661); +#63661 = FILL_AREA_STYLE('',(#63662)); +#63662 = FILL_AREA_STYLE_COLOUR('',#61151); +#63663 = OVER_RIDING_STYLED_ITEM('overriding color',(#63664),#11001, + #63656); +#63664 = PRESENTATION_STYLE_ASSIGNMENT((#63665)); +#63665 = CURVE_STYLE('',#63666,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63666 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63667 = OVER_RIDING_STYLED_ITEM('overriding color',(#63668),#11009, + #63656); +#63668 = PRESENTATION_STYLE_ASSIGNMENT((#63669)); +#63669 = CURVE_STYLE('',#63670,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63670 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63671 = STYLED_ITEM('color',(#63672),#11021); +#63672 = PRESENTATION_STYLE_ASSIGNMENT((#63673)); +#63673 = SURFACE_STYLE_USAGE(.BOTH.,#63674); +#63674 = SURFACE_SIDE_STYLE('',(#63675)); +#63675 = SURFACE_STYLE_FILL_AREA(#63676); +#63676 = FILL_AREA_STYLE('',(#63677)); +#63677 = FILL_AREA_STYLE_COLOUR('',#61151); +#63678 = OVER_RIDING_STYLED_ITEM('overriding color',(#63679),#11026, + #63671); +#63679 = PRESENTATION_STYLE_ASSIGNMENT((#63680)); +#63680 = CURVE_STYLE('',#63681,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63681 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63682 = STYLED_ITEM('color',(#63683),#11038); +#63683 = PRESENTATION_STYLE_ASSIGNMENT((#63684)); +#63684 = SURFACE_STYLE_USAGE(.BOTH.,#63685); +#63685 = SURFACE_SIDE_STYLE('',(#63686)); +#63686 = SURFACE_STYLE_FILL_AREA(#63687); +#63687 = FILL_AREA_STYLE('',(#63688)); +#63688 = FILL_AREA_STYLE_COLOUR('',#61151); +#63689 = OVER_RIDING_STYLED_ITEM('overriding color',(#63690),#11043, + #63682); +#63690 = PRESENTATION_STYLE_ASSIGNMENT((#63691)); +#63691 = CURVE_STYLE('',#63692,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63692 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63693 = OVER_RIDING_STYLED_ITEM('overriding color',(#63694),#11050, + #63682); +#63694 = PRESENTATION_STYLE_ASSIGNMENT((#63695)); +#63695 = CURVE_STYLE('',#63696,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63696 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63697 = STYLED_ITEM('color',(#63698),#11060); +#63698 = PRESENTATION_STYLE_ASSIGNMENT((#63699)); +#63699 = SURFACE_STYLE_USAGE(.BOTH.,#63700); +#63700 = SURFACE_SIDE_STYLE('',(#63701)); +#63701 = SURFACE_STYLE_FILL_AREA(#63702); +#63702 = FILL_AREA_STYLE('',(#63703)); +#63703 = FILL_AREA_STYLE_COLOUR('',#61151); +#63704 = STYLED_ITEM('color',(#63705),#11072); +#63705 = PRESENTATION_STYLE_ASSIGNMENT((#63706)); +#63706 = SURFACE_STYLE_USAGE(.BOTH.,#63707); +#63707 = SURFACE_SIDE_STYLE('',(#63708)); +#63708 = SURFACE_STYLE_FILL_AREA(#63709); +#63709 = FILL_AREA_STYLE('',(#63710)); +#63710 = FILL_AREA_STYLE_COLOUR('',#61151); +#63711 = STYLED_ITEM('color',(#63712),#11084); +#63712 = PRESENTATION_STYLE_ASSIGNMENT((#63713)); +#63713 = SURFACE_STYLE_USAGE(.BOTH.,#63714); +#63714 = SURFACE_SIDE_STYLE('',(#63715)); +#63715 = SURFACE_STYLE_FILL_AREA(#63716); +#63716 = FILL_AREA_STYLE('',(#63717)); +#63717 = FILL_AREA_STYLE_COLOUR('',#61151); +#63718 = OVER_RIDING_STYLED_ITEM('overriding color',(#63719),#11088, + #63711); +#63719 = PRESENTATION_STYLE_ASSIGNMENT((#63720)); +#63720 = CURVE_STYLE('',#63721,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63721 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63722 = OVER_RIDING_STYLED_ITEM('overriding color',(#63723),#11096, + #63711); +#63723 = PRESENTATION_STYLE_ASSIGNMENT((#63724)); +#63724 = CURVE_STYLE('',#63725,POSITIVE_LENGTH_MEASURE(0.1),#61151); +#63725 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63726 = STYLED_ITEM('color',(#63727),#11109); +#63727 = PRESENTATION_STYLE_ASSIGNMENT((#63728)); +#63728 = SURFACE_STYLE_USAGE(.BOTH.,#63729); +#63729 = SURFACE_SIDE_STYLE('',(#63730)); +#63730 = SURFACE_STYLE_FILL_AREA(#63731); +#63731 = FILL_AREA_STYLE('',(#63732)); +#63732 = FILL_AREA_STYLE_COLOUR('',#61151); +#63733 = OVER_RIDING_STYLED_ITEM('overriding color',(#63734),#11113, + #63726); +#63734 = PRESENTATION_STYLE_ASSIGNMENT((#63735)); +#63735 = CURVE_STYLE('',#63736,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63736 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63737 = STYLED_ITEM('color',(#63738),#11126); +#63738 = PRESENTATION_STYLE_ASSIGNMENT((#63739)); +#63739 = SURFACE_STYLE_USAGE(.BOTH.,#63740); +#63740 = SURFACE_SIDE_STYLE('',(#63741)); +#63741 = SURFACE_STYLE_FILL_AREA(#63742); +#63742 = FILL_AREA_STYLE('',(#63743)); +#63743 = FILL_AREA_STYLE_COLOUR('',#60740); +#63744 = OVER_RIDING_STYLED_ITEM('overriding color',(#63745),#11130, + #63737); +#63745 = PRESENTATION_STYLE_ASSIGNMENT((#63746)); +#63746 = CURVE_STYLE('',#63747,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63747 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63748 = OVER_RIDING_STYLED_ITEM('overriding color',(#63749),#11140, + #63737); +#63749 = PRESENTATION_STYLE_ASSIGNMENT((#63750)); +#63750 = CURVE_STYLE('',#63751,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63751 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63752 = OVER_RIDING_STYLED_ITEM('overriding color',(#63753),#11148, + #63737); +#63753 = PRESENTATION_STYLE_ASSIGNMENT((#63754)); +#63754 = CURVE_STYLE('',#63755,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63755 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63756 = OVER_RIDING_STYLED_ITEM('overriding color',(#63757),#11156, + #63737); +#63757 = PRESENTATION_STYLE_ASSIGNMENT((#63758)); +#63758 = CURVE_STYLE('',#63759,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63759 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63760 = STYLED_ITEM('color',(#63761),#11166); +#63761 = PRESENTATION_STYLE_ASSIGNMENT((#63762)); +#63762 = SURFACE_STYLE_USAGE(.BOTH.,#63763); +#63763 = SURFACE_SIDE_STYLE('',(#63764)); +#63764 = SURFACE_STYLE_FILL_AREA(#63765); +#63765 = FILL_AREA_STYLE('',(#63766)); +#63766 = FILL_AREA_STYLE_COLOUR('',#60740); +#63767 = OVER_RIDING_STYLED_ITEM('overriding color',(#63768),#11218, + #63760); +#63768 = PRESENTATION_STYLE_ASSIGNMENT((#63769)); +#63769 = CURVE_STYLE('',#63770,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63770 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63771 = OVER_RIDING_STYLED_ITEM('overriding color',(#63772),#11226, + #63760); +#63772 = PRESENTATION_STYLE_ASSIGNMENT((#63773)); +#63773 = CURVE_STYLE('',#63774,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63774 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63775 = OVER_RIDING_STYLED_ITEM('overriding color',(#63776),#11234, + #63760); +#63776 = PRESENTATION_STYLE_ASSIGNMENT((#63777)); +#63777 = CURVE_STYLE('',#63778,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63778 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63779 = STYLED_ITEM('color',(#63780),#11245); +#63780 = PRESENTATION_STYLE_ASSIGNMENT((#63781)); +#63781 = SURFACE_STYLE_USAGE(.BOTH.,#63782); +#63782 = SURFACE_SIDE_STYLE('',(#63783)); +#63783 = SURFACE_STYLE_FILL_AREA(#63784); +#63784 = FILL_AREA_STYLE('',(#63785)); +#63785 = FILL_AREA_STYLE_COLOUR('',#60740); +#63786 = OVER_RIDING_STYLED_ITEM('overriding color',(#63787),#11249, + #63779); +#63787 = PRESENTATION_STYLE_ASSIGNMENT((#63788)); +#63788 = CURVE_STYLE('',#63789,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63789 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63790 = OVER_RIDING_STYLED_ITEM('overriding color',(#63791),#11257, + #63779); +#63791 = PRESENTATION_STYLE_ASSIGNMENT((#63792)); +#63792 = CURVE_STYLE('',#63793,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63793 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63794 = OVER_RIDING_STYLED_ITEM('overriding color',(#63795),#11265, + #63779); +#63795 = PRESENTATION_STYLE_ASSIGNMENT((#63796)); +#63796 = CURVE_STYLE('',#63797,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63797 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63798 = STYLED_ITEM('color',(#63799),#11276); +#63799 = PRESENTATION_STYLE_ASSIGNMENT((#63800)); +#63800 = SURFACE_STYLE_USAGE(.BOTH.,#63801); +#63801 = SURFACE_SIDE_STYLE('',(#63802)); +#63802 = SURFACE_STYLE_FILL_AREA(#63803); +#63803 = FILL_AREA_STYLE('',(#63804)); +#63804 = FILL_AREA_STYLE_COLOUR('',#60740); +#63805 = OVER_RIDING_STYLED_ITEM('overriding color',(#63806),#11283, + #63798); +#63806 = PRESENTATION_STYLE_ASSIGNMENT((#63807)); +#63807 = CURVE_STYLE('',#63808,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63808 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63809 = OVER_RIDING_STYLED_ITEM('overriding color',(#63810),#11291, + #63798); +#63810 = PRESENTATION_STYLE_ASSIGNMENT((#63811)); +#63811 = CURVE_STYLE('',#63812,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63812 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63813 = OVER_RIDING_STYLED_ITEM('overriding color',(#63814),#11299, + #63798); +#63814 = PRESENTATION_STYLE_ASSIGNMENT((#63815)); +#63815 = CURVE_STYLE('',#63816,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63816 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63817 = OVER_RIDING_STYLED_ITEM('overriding color',(#63818),#11307, + #63798); +#63818 = PRESENTATION_STYLE_ASSIGNMENT((#63819)); +#63819 = CURVE_STYLE('',#63820,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63820 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63821 = OVER_RIDING_STYLED_ITEM('overriding color',(#63822),#11315, + #63798); +#63822 = PRESENTATION_STYLE_ASSIGNMENT((#63823)); +#63823 = CURVE_STYLE('',#63824,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63824 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63825 = STYLED_ITEM('color',(#63826),#11325); +#63826 = PRESENTATION_STYLE_ASSIGNMENT((#63827)); +#63827 = SURFACE_STYLE_USAGE(.BOTH.,#63828); +#63828 = SURFACE_SIDE_STYLE('',(#63829)); +#63829 = SURFACE_STYLE_FILL_AREA(#63830); +#63830 = FILL_AREA_STYLE('',(#63831)); +#63831 = FILL_AREA_STYLE_COLOUR('',#60740); +#63832 = OVER_RIDING_STYLED_ITEM('overriding color',(#63833),#11330, + #63825); +#63833 = PRESENTATION_STYLE_ASSIGNMENT((#63834)); +#63834 = CURVE_STYLE('',#63835,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63835 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63836 = OVER_RIDING_STYLED_ITEM('overriding color',(#63837),#11338, + #63825); +#63837 = PRESENTATION_STYLE_ASSIGNMENT((#63838)); +#63838 = CURVE_STYLE('',#63839,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63839 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63840 = OVER_RIDING_STYLED_ITEM('overriding color',(#63841),#11346, + #63825); +#63841 = PRESENTATION_STYLE_ASSIGNMENT((#63842)); +#63842 = CURVE_STYLE('',#63843,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63843 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63844 = OVER_RIDING_STYLED_ITEM('overriding color',(#63845),#11354, + #63825); +#63845 = PRESENTATION_STYLE_ASSIGNMENT((#63846)); +#63846 = CURVE_STYLE('',#63847,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63847 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63848 = OVER_RIDING_STYLED_ITEM('overriding color',(#63849),#11362, + #63825); +#63849 = PRESENTATION_STYLE_ASSIGNMENT((#63850)); +#63850 = CURVE_STYLE('',#63851,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63851 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63852 = OVER_RIDING_STYLED_ITEM('overriding color',(#63853),#11370, + #63825); +#63853 = PRESENTATION_STYLE_ASSIGNMENT((#63854)); +#63854 = CURVE_STYLE('',#63855,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63855 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63856 = OVER_RIDING_STYLED_ITEM('overriding color',(#63857),#11378, + #63825); +#63857 = PRESENTATION_STYLE_ASSIGNMENT((#63858)); +#63858 = CURVE_STYLE('',#63859,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63859 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63860 = OVER_RIDING_STYLED_ITEM('overriding color',(#63861),#11386, + #63825); +#63861 = PRESENTATION_STYLE_ASSIGNMENT((#63862)); +#63862 = CURVE_STYLE('',#63863,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63863 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63864 = OVER_RIDING_STYLED_ITEM('overriding color',(#63865),#11394, + #63825); +#63865 = PRESENTATION_STYLE_ASSIGNMENT((#63866)); +#63866 = CURVE_STYLE('',#63867,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63867 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63868 = OVER_RIDING_STYLED_ITEM('overriding color',(#63869),#11402, + #63825); +#63869 = PRESENTATION_STYLE_ASSIGNMENT((#63870)); +#63870 = CURVE_STYLE('',#63871,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63871 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63872 = OVER_RIDING_STYLED_ITEM('overriding color',(#63873),#11410, + #63825); +#63873 = PRESENTATION_STYLE_ASSIGNMENT((#63874)); +#63874 = CURVE_STYLE('',#63875,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63875 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63876 = OVER_RIDING_STYLED_ITEM('overriding color',(#63877),#11418, + #63825); +#63877 = PRESENTATION_STYLE_ASSIGNMENT((#63878)); +#63878 = CURVE_STYLE('',#63879,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63879 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63880 = OVER_RIDING_STYLED_ITEM('overriding color',(#63881),#11426, + #63825); +#63881 = PRESENTATION_STYLE_ASSIGNMENT((#63882)); +#63882 = CURVE_STYLE('',#63883,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63883 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63884 = STYLED_ITEM('color',(#63885),#11437); +#63885 = PRESENTATION_STYLE_ASSIGNMENT((#63886)); +#63886 = SURFACE_STYLE_USAGE(.BOTH.,#63887); +#63887 = SURFACE_SIDE_STYLE('',(#63888)); +#63888 = SURFACE_STYLE_FILL_AREA(#63889); +#63889 = FILL_AREA_STYLE('',(#63890)); +#63890 = FILL_AREA_STYLE_COLOUR('',#60740); +#63891 = OVER_RIDING_STYLED_ITEM('overriding color',(#63892),#11441, + #63884); +#63892 = PRESENTATION_STYLE_ASSIGNMENT((#63893)); +#63893 = CURVE_STYLE('',#63894,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63894 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63895 = OVER_RIDING_STYLED_ITEM('overriding color',(#63896),#11449, + #63884); +#63896 = PRESENTATION_STYLE_ASSIGNMENT((#63897)); +#63897 = CURVE_STYLE('',#63898,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63898 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63899 = OVER_RIDING_STYLED_ITEM('overriding color',(#63900),#11457, + #63884); +#63900 = PRESENTATION_STYLE_ASSIGNMENT((#63901)); +#63901 = CURVE_STYLE('',#63902,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63902 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63903 = STYLED_ITEM('color',(#63904),#11468); +#63904 = PRESENTATION_STYLE_ASSIGNMENT((#63905)); +#63905 = SURFACE_STYLE_USAGE(.BOTH.,#63906); +#63906 = SURFACE_SIDE_STYLE('',(#63907)); +#63907 = SURFACE_STYLE_FILL_AREA(#63908); +#63908 = FILL_AREA_STYLE('',(#63909)); +#63909 = FILL_AREA_STYLE_COLOUR('',#60740); +#63910 = OVER_RIDING_STYLED_ITEM('overriding color',(#63911),#11472, + #63903); +#63911 = PRESENTATION_STYLE_ASSIGNMENT((#63912)); +#63912 = CURVE_STYLE('',#63913,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63913 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63914 = OVER_RIDING_STYLED_ITEM('overriding color',(#63915),#11480, + #63903); +#63915 = PRESENTATION_STYLE_ASSIGNMENT((#63916)); +#63916 = CURVE_STYLE('',#63917,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63917 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63918 = OVER_RIDING_STYLED_ITEM('overriding color',(#63919),#11488, + #63903); +#63919 = PRESENTATION_STYLE_ASSIGNMENT((#63920)); +#63920 = CURVE_STYLE('',#63921,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63921 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63922 = STYLED_ITEM('color',(#63923),#11499); +#63923 = PRESENTATION_STYLE_ASSIGNMENT((#63924)); +#63924 = SURFACE_STYLE_USAGE(.BOTH.,#63925); +#63925 = SURFACE_SIDE_STYLE('',(#63926)); +#63926 = SURFACE_STYLE_FILL_AREA(#63927); +#63927 = FILL_AREA_STYLE('',(#63928)); +#63928 = FILL_AREA_STYLE_COLOUR('',#60740); +#63929 = OVER_RIDING_STYLED_ITEM('overriding color',(#63930),#11503, + #63922); +#63930 = PRESENTATION_STYLE_ASSIGNMENT((#63931)); +#63931 = CURVE_STYLE('',#63932,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63932 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63933 = OVER_RIDING_STYLED_ITEM('overriding color',(#63934),#11511, + #63922); +#63934 = PRESENTATION_STYLE_ASSIGNMENT((#63935)); +#63935 = CURVE_STYLE('',#63936,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63936 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63937 = OVER_RIDING_STYLED_ITEM('overriding color',(#63938),#11519, + #63922); +#63938 = PRESENTATION_STYLE_ASSIGNMENT((#63939)); +#63939 = CURVE_STYLE('',#63940,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63940 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63941 = STYLED_ITEM('color',(#63942),#11530); +#63942 = PRESENTATION_STYLE_ASSIGNMENT((#63943)); +#63943 = SURFACE_STYLE_USAGE(.BOTH.,#63944); +#63944 = SURFACE_SIDE_STYLE('',(#63945)); +#63945 = SURFACE_STYLE_FILL_AREA(#63946); +#63946 = FILL_AREA_STYLE('',(#63947)); +#63947 = FILL_AREA_STYLE_COLOUR('',#60740); +#63948 = OVER_RIDING_STYLED_ITEM('overriding color',(#63949),#11534, + #63941); +#63949 = PRESENTATION_STYLE_ASSIGNMENT((#63950)); +#63950 = CURVE_STYLE('',#63951,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63951 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63952 = OVER_RIDING_STYLED_ITEM('overriding color',(#63953),#11544, + #63941); +#63953 = PRESENTATION_STYLE_ASSIGNMENT((#63954)); +#63954 = CURVE_STYLE('',#63955,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63955 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63956 = OVER_RIDING_STYLED_ITEM('overriding color',(#63957),#11551, + #63941); +#63957 = PRESENTATION_STYLE_ASSIGNMENT((#63958)); +#63958 = CURVE_STYLE('',#63959,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63959 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63960 = STYLED_ITEM('color',(#63961),#11561); +#63961 = PRESENTATION_STYLE_ASSIGNMENT((#63962)); +#63962 = SURFACE_STYLE_USAGE(.BOTH.,#63963); +#63963 = SURFACE_SIDE_STYLE('',(#63964)); +#63964 = SURFACE_STYLE_FILL_AREA(#63965); +#63965 = FILL_AREA_STYLE('',(#63966)); +#63966 = FILL_AREA_STYLE_COLOUR('',#60740); +#63967 = OVER_RIDING_STYLED_ITEM('overriding color',(#63968),#11565, + #63960); +#63968 = PRESENTATION_STYLE_ASSIGNMENT((#63969)); +#63969 = CURVE_STYLE('',#63970,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63970 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63971 = OVER_RIDING_STYLED_ITEM('overriding color',(#63972),#11573, + #63960); +#63972 = PRESENTATION_STYLE_ASSIGNMENT((#63973)); +#63973 = CURVE_STYLE('',#63974,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63974 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63975 = STYLED_ITEM('color',(#63976),#11585); +#63976 = PRESENTATION_STYLE_ASSIGNMENT((#63977)); +#63977 = SURFACE_STYLE_USAGE(.BOTH.,#63978); +#63978 = SURFACE_SIDE_STYLE('',(#63979)); +#63979 = SURFACE_STYLE_FILL_AREA(#63980); +#63980 = FILL_AREA_STYLE('',(#63981)); +#63981 = FILL_AREA_STYLE_COLOUR('',#60740); +#63982 = OVER_RIDING_STYLED_ITEM('overriding color',(#63983),#11589, + #63975); +#63983 = PRESENTATION_STYLE_ASSIGNMENT((#63984)); +#63984 = CURVE_STYLE('',#63985,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63985 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63986 = STYLED_ITEM('color',(#63987),#11602); +#63987 = PRESENTATION_STYLE_ASSIGNMENT((#63988)); +#63988 = SURFACE_STYLE_USAGE(.BOTH.,#63989); +#63989 = SURFACE_SIDE_STYLE('',(#63990)); +#63990 = SURFACE_STYLE_FILL_AREA(#63991); +#63991 = FILL_AREA_STYLE('',(#63992)); +#63992 = FILL_AREA_STYLE_COLOUR('',#60740); +#63993 = OVER_RIDING_STYLED_ITEM('overriding color',(#63994),#11654, + #63986); +#63994 = PRESENTATION_STYLE_ASSIGNMENT((#63995)); +#63995 = CURVE_STYLE('',#63996,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#63996 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#63997 = OVER_RIDING_STYLED_ITEM('overriding color',(#63998),#11662, + #63986); +#63998 = PRESENTATION_STYLE_ASSIGNMENT((#63999)); +#63999 = CURVE_STYLE('',#64000,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64000 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64001 = OVER_RIDING_STYLED_ITEM('overriding color',(#64002),#11670, + #63986); +#64002 = PRESENTATION_STYLE_ASSIGNMENT((#64003)); +#64003 = CURVE_STYLE('',#64004,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64004 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64005 = OVER_RIDING_STYLED_ITEM('overriding color',(#64006),#11678, + #63986); +#64006 = PRESENTATION_STYLE_ASSIGNMENT((#64007)); +#64007 = CURVE_STYLE('',#64008,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64008 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64009 = OVER_RIDING_STYLED_ITEM('overriding color',(#64010),#11686, + #63986); +#64010 = PRESENTATION_STYLE_ASSIGNMENT((#64011)); +#64011 = CURVE_STYLE('',#64012,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64012 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64013 = OVER_RIDING_STYLED_ITEM('overriding color',(#64014),#11694, + #63986); +#64014 = PRESENTATION_STYLE_ASSIGNMENT((#64015)); +#64015 = CURVE_STYLE('',#64016,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64016 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64017 = OVER_RIDING_STYLED_ITEM('overriding color',(#64018),#11702, + #63986); +#64018 = PRESENTATION_STYLE_ASSIGNMENT((#64019)); +#64019 = CURVE_STYLE('',#64020,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64020 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64021 = OVER_RIDING_STYLED_ITEM('overriding color',(#64022),#11710, + #63986); +#64022 = PRESENTATION_STYLE_ASSIGNMENT((#64023)); +#64023 = CURVE_STYLE('',#64024,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64024 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64025 = OVER_RIDING_STYLED_ITEM('overriding color',(#64026),#11718, + #63986); +#64026 = PRESENTATION_STYLE_ASSIGNMENT((#64027)); +#64027 = CURVE_STYLE('',#64028,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64028 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64029 = OVER_RIDING_STYLED_ITEM('overriding color',(#64030),#11726, + #63986); +#64030 = PRESENTATION_STYLE_ASSIGNMENT((#64031)); +#64031 = CURVE_STYLE('',#64032,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64032 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64033 = OVER_RIDING_STYLED_ITEM('overriding color',(#64034),#11734, + #63986); +#64034 = PRESENTATION_STYLE_ASSIGNMENT((#64035)); +#64035 = CURVE_STYLE('',#64036,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64036 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64037 = OVER_RIDING_STYLED_ITEM('overriding color',(#64038),#11742, + #63986); +#64038 = PRESENTATION_STYLE_ASSIGNMENT((#64039)); +#64039 = CURVE_STYLE('',#64040,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64040 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64041 = OVER_RIDING_STYLED_ITEM('overriding color',(#64042),#11750, + #63986); +#64042 = PRESENTATION_STYLE_ASSIGNMENT((#64043)); +#64043 = CURVE_STYLE('',#64044,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64044 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64045 = OVER_RIDING_STYLED_ITEM('overriding color',(#64046),#11758, + #63986); +#64046 = PRESENTATION_STYLE_ASSIGNMENT((#64047)); +#64047 = CURVE_STYLE('',#64048,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64048 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64049 = OVER_RIDING_STYLED_ITEM('overriding color',(#64050),#11766, + #63986); +#64050 = PRESENTATION_STYLE_ASSIGNMENT((#64051)); +#64051 = CURVE_STYLE('',#64052,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64052 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64053 = OVER_RIDING_STYLED_ITEM('overriding color',(#64054),#11774, + #63986); +#64054 = PRESENTATION_STYLE_ASSIGNMENT((#64055)); +#64055 = CURVE_STYLE('',#64056,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64056 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64057 = OVER_RIDING_STYLED_ITEM('overriding color',(#64058),#11782, + #63986); +#64058 = PRESENTATION_STYLE_ASSIGNMENT((#64059)); +#64059 = CURVE_STYLE('',#64060,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64060 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64061 = OVER_RIDING_STYLED_ITEM('overriding color',(#64062),#11790, + #63986); +#64062 = PRESENTATION_STYLE_ASSIGNMENT((#64063)); +#64063 = CURVE_STYLE('',#64064,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64064 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64065 = OVER_RIDING_STYLED_ITEM('overriding color',(#64066),#11798, + #63986); +#64066 = PRESENTATION_STYLE_ASSIGNMENT((#64067)); +#64067 = CURVE_STYLE('',#64068,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64068 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64069 = STYLED_ITEM('color',(#64070),#11815); +#64070 = PRESENTATION_STYLE_ASSIGNMENT((#64071)); +#64071 = SURFACE_STYLE_USAGE(.BOTH.,#64072); +#64072 = SURFACE_SIDE_STYLE('',(#64073)); +#64073 = SURFACE_STYLE_FILL_AREA(#64074); +#64074 = FILL_AREA_STYLE('',(#64075)); +#64075 = FILL_AREA_STYLE_COLOUR('',#60740); +#64076 = OVER_RIDING_STYLED_ITEM('overriding color',(#64077),#11820, + #64069); +#64077 = PRESENTATION_STYLE_ASSIGNMENT((#64078)); +#64078 = CURVE_STYLE('',#64079,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64079 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64080 = OVER_RIDING_STYLED_ITEM('overriding color',(#64081),#11828, + #64069); +#64081 = PRESENTATION_STYLE_ASSIGNMENT((#64082)); +#64082 = CURVE_STYLE('',#64083,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64083 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64084 = STYLED_ITEM('color',(#64085),#11839); +#64085 = PRESENTATION_STYLE_ASSIGNMENT((#64086)); +#64086 = SURFACE_STYLE_USAGE(.BOTH.,#64087); +#64087 = SURFACE_SIDE_STYLE('',(#64088)); +#64088 = SURFACE_STYLE_FILL_AREA(#64089); +#64089 = FILL_AREA_STYLE('',(#64090)); +#64090 = FILL_AREA_STYLE_COLOUR('',#60740); +#64091 = OVER_RIDING_STYLED_ITEM('overriding color',(#64092),#11844, + #64084); +#64092 = PRESENTATION_STYLE_ASSIGNMENT((#64093)); +#64093 = CURVE_STYLE('',#64094,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64094 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64095 = OVER_RIDING_STYLED_ITEM('overriding color',(#64096),#11852, + #64084); +#64096 = PRESENTATION_STYLE_ASSIGNMENT((#64097)); +#64097 = CURVE_STYLE('',#64098,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64098 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64099 = STYLED_ITEM('color',(#64100),#11863); +#64100 = PRESENTATION_STYLE_ASSIGNMENT((#64101)); +#64101 = SURFACE_STYLE_USAGE(.BOTH.,#64102); +#64102 = SURFACE_SIDE_STYLE('',(#64103)); +#64103 = SURFACE_STYLE_FILL_AREA(#64104); +#64104 = FILL_AREA_STYLE('',(#64105)); +#64105 = FILL_AREA_STYLE_COLOUR('',#60740); +#64106 = OVER_RIDING_STYLED_ITEM('overriding color',(#64107),#11868, + #64099); +#64107 = PRESENTATION_STYLE_ASSIGNMENT((#64108)); +#64108 = CURVE_STYLE('',#64109,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64109 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64110 = OVER_RIDING_STYLED_ITEM('overriding color',(#64111),#11876, + #64099); +#64111 = PRESENTATION_STYLE_ASSIGNMENT((#64112)); +#64112 = CURVE_STYLE('',#64113,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64113 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64114 = STYLED_ITEM('color',(#64115),#11887); +#64115 = PRESENTATION_STYLE_ASSIGNMENT((#64116)); +#64116 = SURFACE_STYLE_USAGE(.BOTH.,#64117); +#64117 = SURFACE_SIDE_STYLE('',(#64118)); +#64118 = SURFACE_STYLE_FILL_AREA(#64119); +#64119 = FILL_AREA_STYLE('',(#64120)); +#64120 = FILL_AREA_STYLE_COLOUR('',#60740); +#64121 = OVER_RIDING_STYLED_ITEM('overriding color',(#64122),#11892, + #64114); +#64122 = PRESENTATION_STYLE_ASSIGNMENT((#64123)); +#64123 = CURVE_STYLE('',#64124,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64124 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64125 = OVER_RIDING_STYLED_ITEM('overriding color',(#64126),#11899, + #64114); +#64126 = PRESENTATION_STYLE_ASSIGNMENT((#64127)); +#64127 = CURVE_STYLE('',#64128,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64128 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64129 = STYLED_ITEM('color',(#64130),#11909); +#64130 = PRESENTATION_STYLE_ASSIGNMENT((#64131)); +#64131 = SURFACE_STYLE_USAGE(.BOTH.,#64132); +#64132 = SURFACE_SIDE_STYLE('',(#64133)); +#64133 = SURFACE_STYLE_FILL_AREA(#64134); +#64134 = FILL_AREA_STYLE('',(#64135)); +#64135 = FILL_AREA_STYLE_COLOUR('',#60740); +#64136 = OVER_RIDING_STYLED_ITEM('overriding color',(#64137),#11914, + #64129); +#64137 = PRESENTATION_STYLE_ASSIGNMENT((#64138)); +#64138 = CURVE_STYLE('',#64139,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64139 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64140 = STYLED_ITEM('color',(#64141),#11926); +#64141 = PRESENTATION_STYLE_ASSIGNMENT((#64142)); +#64142 = SURFACE_STYLE_USAGE(.BOTH.,#64143); +#64143 = SURFACE_SIDE_STYLE('',(#64144)); +#64144 = SURFACE_STYLE_FILL_AREA(#64145); +#64145 = FILL_AREA_STYLE('',(#64146)); +#64146 = FILL_AREA_STYLE_COLOUR('',#60740); +#64147 = STYLED_ITEM('color',(#64148),#11938); +#64148 = PRESENTATION_STYLE_ASSIGNMENT((#64149)); +#64149 = SURFACE_STYLE_USAGE(.BOTH.,#64150); +#64150 = SURFACE_SIDE_STYLE('',(#64151)); +#64151 = SURFACE_STYLE_FILL_AREA(#64152); +#64152 = FILL_AREA_STYLE('',(#64153)); +#64153 = FILL_AREA_STYLE_COLOUR('',#60740); +#64154 = OVER_RIDING_STYLED_ITEM('overriding color',(#64155),#11943, + #64147); +#64155 = PRESENTATION_STYLE_ASSIGNMENT((#64156)); +#64156 = CURVE_STYLE('',#64157,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64157 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64158 = OVER_RIDING_STYLED_ITEM('overriding color',(#64159),#11951, + #64147); +#64159 = PRESENTATION_STYLE_ASSIGNMENT((#64160)); +#64160 = CURVE_STYLE('',#64161,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64161 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64162 = STYLED_ITEM('color',(#64163),#11962); +#64163 = PRESENTATION_STYLE_ASSIGNMENT((#64164)); +#64164 = SURFACE_STYLE_USAGE(.BOTH.,#64165); +#64165 = SURFACE_SIDE_STYLE('',(#64166)); +#64166 = SURFACE_STYLE_FILL_AREA(#64167); +#64167 = FILL_AREA_STYLE('',(#64168)); +#64168 = FILL_AREA_STYLE_COLOUR('',#60740); +#64169 = OVER_RIDING_STYLED_ITEM('overriding color',(#64170),#11967, + #64162); +#64170 = PRESENTATION_STYLE_ASSIGNMENT((#64171)); +#64171 = CURVE_STYLE('',#64172,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64172 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64173 = OVER_RIDING_STYLED_ITEM('overriding color',(#64174),#11975, + #64162); +#64174 = PRESENTATION_STYLE_ASSIGNMENT((#64175)); +#64175 = CURVE_STYLE('',#64176,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64176 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64177 = STYLED_ITEM('color',(#64178),#11986); +#64178 = PRESENTATION_STYLE_ASSIGNMENT((#64179)); +#64179 = SURFACE_STYLE_USAGE(.BOTH.,#64180); +#64180 = SURFACE_SIDE_STYLE('',(#64181)); +#64181 = SURFACE_STYLE_FILL_AREA(#64182); +#64182 = FILL_AREA_STYLE('',(#64183)); +#64183 = FILL_AREA_STYLE_COLOUR('',#60740); +#64184 = OVER_RIDING_STYLED_ITEM('overriding color',(#64185),#11991, + #64177); +#64185 = PRESENTATION_STYLE_ASSIGNMENT((#64186)); +#64186 = CURVE_STYLE('',#64187,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64187 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64188 = OVER_RIDING_STYLED_ITEM('overriding color',(#64189),#11999, + #64177); +#64189 = PRESENTATION_STYLE_ASSIGNMENT((#64190)); +#64190 = CURVE_STYLE('',#64191,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64191 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64192 = STYLED_ITEM('color',(#64193),#12010); +#64193 = PRESENTATION_STYLE_ASSIGNMENT((#64194)); +#64194 = SURFACE_STYLE_USAGE(.BOTH.,#64195); +#64195 = SURFACE_SIDE_STYLE('',(#64196)); +#64196 = SURFACE_STYLE_FILL_AREA(#64197); +#64197 = FILL_AREA_STYLE('',(#64198)); +#64198 = FILL_AREA_STYLE_COLOUR('',#60740); +#64199 = OVER_RIDING_STYLED_ITEM('overriding color',(#64200),#12015, + #64192); +#64200 = PRESENTATION_STYLE_ASSIGNMENT((#64201)); +#64201 = CURVE_STYLE('',#64202,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64202 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64203 = OVER_RIDING_STYLED_ITEM('overriding color',(#64204),#12022, + #64192); +#64204 = PRESENTATION_STYLE_ASSIGNMENT((#64205)); +#64205 = CURVE_STYLE('',#64206,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64206 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64207 = STYLED_ITEM('color',(#64208),#12032); +#64208 = PRESENTATION_STYLE_ASSIGNMENT((#64209)); +#64209 = SURFACE_STYLE_USAGE(.BOTH.,#64210); +#64210 = SURFACE_SIDE_STYLE('',(#64211)); +#64211 = SURFACE_STYLE_FILL_AREA(#64212); +#64212 = FILL_AREA_STYLE('',(#64213)); +#64213 = FILL_AREA_STYLE_COLOUR('',#60740); +#64214 = OVER_RIDING_STYLED_ITEM('overriding color',(#64215),#12037, + #64207); +#64215 = PRESENTATION_STYLE_ASSIGNMENT((#64216)); +#64216 = CURVE_STYLE('',#64217,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64217 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64218 = STYLED_ITEM('color',(#64219),#12049); +#64219 = PRESENTATION_STYLE_ASSIGNMENT((#64220)); +#64220 = SURFACE_STYLE_USAGE(.BOTH.,#64221); +#64221 = SURFACE_SIDE_STYLE('',(#64222)); +#64222 = SURFACE_STYLE_FILL_AREA(#64223); +#64223 = FILL_AREA_STYLE('',(#64224)); +#64224 = FILL_AREA_STYLE_COLOUR('',#60740); +#64225 = STYLED_ITEM('color',(#64226),#12061); +#64226 = PRESENTATION_STYLE_ASSIGNMENT((#64227)); +#64227 = SURFACE_STYLE_USAGE(.BOTH.,#64228); +#64228 = SURFACE_SIDE_STYLE('',(#64229)); +#64229 = SURFACE_STYLE_FILL_AREA(#64230); +#64230 = FILL_AREA_STYLE('',(#64231)); +#64231 = FILL_AREA_STYLE_COLOUR('',#60740); +#64232 = OVER_RIDING_STYLED_ITEM('overriding color',(#64233),#12066, + #64225); +#64233 = PRESENTATION_STYLE_ASSIGNMENT((#64234)); +#64234 = CURVE_STYLE('',#64235,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64235 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64236 = OVER_RIDING_STYLED_ITEM('overriding color',(#64237),#12073, + #64225); +#64237 = PRESENTATION_STYLE_ASSIGNMENT((#64238)); +#64238 = CURVE_STYLE('',#64239,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64239 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64240 = STYLED_ITEM('color',(#64241),#12083); +#64241 = PRESENTATION_STYLE_ASSIGNMENT((#64242)); +#64242 = SURFACE_STYLE_USAGE(.BOTH.,#64243); +#64243 = SURFACE_SIDE_STYLE('',(#64244)); +#64244 = SURFACE_STYLE_FILL_AREA(#64245); +#64245 = FILL_AREA_STYLE('',(#64246)); +#64246 = FILL_AREA_STYLE_COLOUR('',#60740); +#64247 = OVER_RIDING_STYLED_ITEM('overriding color',(#64248),#12088, + #64240); +#64248 = PRESENTATION_STYLE_ASSIGNMENT((#64249)); +#64249 = CURVE_STYLE('',#64250,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64250 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64251 = STYLED_ITEM('color',(#64252),#12100); +#64252 = PRESENTATION_STYLE_ASSIGNMENT((#64253)); +#64253 = SURFACE_STYLE_USAGE(.BOTH.,#64254); +#64254 = SURFACE_SIDE_STYLE('',(#64255)); +#64255 = SURFACE_STYLE_FILL_AREA(#64256); +#64256 = FILL_AREA_STYLE('',(#64257)); +#64257 = FILL_AREA_STYLE_COLOUR('',#60740); +#64258 = STYLED_ITEM('color',(#64259),#12112); +#64259 = PRESENTATION_STYLE_ASSIGNMENT((#64260)); +#64260 = SURFACE_STYLE_USAGE(.BOTH.,#64261); +#64261 = SURFACE_SIDE_STYLE('',(#64262)); +#64262 = SURFACE_STYLE_FILL_AREA(#64263); +#64263 = FILL_AREA_STYLE('',(#64264)); +#64264 = FILL_AREA_STYLE_COLOUR('',#60740); +#64265 = OVER_RIDING_STYLED_ITEM('overriding color',(#64266),#12117, + #64258); +#64266 = PRESENTATION_STYLE_ASSIGNMENT((#64267)); +#64267 = CURVE_STYLE('',#64268,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64268 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64269 = OVER_RIDING_STYLED_ITEM('overriding color',(#64270),#12125, + #64258); +#64270 = PRESENTATION_STYLE_ASSIGNMENT((#64271)); +#64271 = CURVE_STYLE('',#64272,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64272 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64273 = STYLED_ITEM('color',(#64274),#12136); +#64274 = PRESENTATION_STYLE_ASSIGNMENT((#64275)); +#64275 = SURFACE_STYLE_USAGE(.BOTH.,#64276); +#64276 = SURFACE_SIDE_STYLE('',(#64277)); +#64277 = SURFACE_STYLE_FILL_AREA(#64278); +#64278 = FILL_AREA_STYLE('',(#64279)); +#64279 = FILL_AREA_STYLE_COLOUR('',#60740); +#64280 = OVER_RIDING_STYLED_ITEM('overriding color',(#64281),#12141, + #64273); +#64281 = PRESENTATION_STYLE_ASSIGNMENT((#64282)); +#64282 = CURVE_STYLE('',#64283,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64283 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64284 = OVER_RIDING_STYLED_ITEM('overriding color',(#64285),#12149, + #64273); +#64285 = PRESENTATION_STYLE_ASSIGNMENT((#64286)); +#64286 = CURVE_STYLE('',#64287,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64287 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64288 = STYLED_ITEM('color',(#64289),#12160); +#64289 = PRESENTATION_STYLE_ASSIGNMENT((#64290)); +#64290 = SURFACE_STYLE_USAGE(.BOTH.,#64291); +#64291 = SURFACE_SIDE_STYLE('',(#64292)); +#64292 = SURFACE_STYLE_FILL_AREA(#64293); +#64293 = FILL_AREA_STYLE('',(#64294)); +#64294 = FILL_AREA_STYLE_COLOUR('',#60740); +#64295 = OVER_RIDING_STYLED_ITEM('overriding color',(#64296),#12165, + #64288); +#64296 = PRESENTATION_STYLE_ASSIGNMENT((#64297)); +#64297 = CURVE_STYLE('',#64298,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64298 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64299 = OVER_RIDING_STYLED_ITEM('overriding color',(#64300),#12173, + #64288); +#64300 = PRESENTATION_STYLE_ASSIGNMENT((#64301)); +#64301 = CURVE_STYLE('',#64302,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64302 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64303 = STYLED_ITEM('color',(#64304),#12184); +#64304 = PRESENTATION_STYLE_ASSIGNMENT((#64305)); +#64305 = SURFACE_STYLE_USAGE(.BOTH.,#64306); +#64306 = SURFACE_SIDE_STYLE('',(#64307)); +#64307 = SURFACE_STYLE_FILL_AREA(#64308); +#64308 = FILL_AREA_STYLE('',(#64309)); +#64309 = FILL_AREA_STYLE_COLOUR('',#60740); +#64310 = OVER_RIDING_STYLED_ITEM('overriding color',(#64311),#12189, + #64303); +#64311 = PRESENTATION_STYLE_ASSIGNMENT((#64312)); +#64312 = CURVE_STYLE('',#64313,POSITIVE_LENGTH_MEASURE(0.1),#60740); +#64313 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64314 = STYLED_ITEM('color',(#64315),#12205); +#64315 = PRESENTATION_STYLE_ASSIGNMENT((#64316)); +#64316 = SURFACE_STYLE_USAGE(.BOTH.,#64317); +#64317 = SURFACE_SIDE_STYLE('',(#64318)); +#64318 = SURFACE_STYLE_FILL_AREA(#64319); +#64319 = FILL_AREA_STYLE('',(#64320)); +#64320 = FILL_AREA_STYLE_COLOUR('',#60740); +#64321 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64322),#38467); +#64322 = STYLED_ITEM('color',(#64323),#36417); +#64323 = PRESENTATION_STYLE_ASSIGNMENT((#64324,#64330)); +#64324 = SURFACE_STYLE_USAGE(.BOTH.,#64325); +#64325 = SURFACE_SIDE_STYLE('',(#64326)); +#64326 = SURFACE_STYLE_FILL_AREA(#64327); +#64327 = FILL_AREA_STYLE('',(#64328)); +#64328 = FILL_AREA_STYLE_COLOUR('',#64329); +#64329 = COLOUR_RGB('',0.199999998682,0.199999998682,0.199999998682); +#64330 = CURVE_STYLE('',#64331,POSITIVE_LENGTH_MEASURE(0.1),#64329); +#64331 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64332 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64333),#35418); +#64333 = STYLED_ITEM('color',(#64334),#35136); +#64334 = PRESENTATION_STYLE_ASSIGNMENT((#64335,#64340)); +#64335 = SURFACE_STYLE_USAGE(.BOTH.,#64336); +#64336 = SURFACE_SIDE_STYLE('',(#64337)); +#64337 = SURFACE_STYLE_FILL_AREA(#64338); +#64338 = FILL_AREA_STYLE('',(#64339)); +#64339 = FILL_AREA_STYLE_COLOUR('',#60317); +#64340 = CURVE_STYLE('',#64341,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#64341 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64342 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64343),#59801); +#64343 = STYLED_ITEM('color',(#64344),#59347); +#64344 = PRESENTATION_STYLE_ASSIGNMENT((#64345,#64350)); +#64345 = SURFACE_STYLE_USAGE(.BOTH.,#64346); +#64346 = SURFACE_SIDE_STYLE('',(#64347)); +#64347 = SURFACE_STYLE_FILL_AREA(#64348); +#64348 = FILL_AREA_STYLE('',(#64349)); +#64349 = FILL_AREA_STYLE_COLOUR('',#60317); +#64350 = CURVE_STYLE('',#64351,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#64351 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64352 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64353),#60133); +#64353 = STYLED_ITEM('color',(#64354),#59843); +#64354 = PRESENTATION_STYLE_ASSIGNMENT((#64355,#64360)); +#64355 = SURFACE_STYLE_USAGE(.BOTH.,#64356); +#64356 = SURFACE_SIDE_STYLE('',(#64357)); +#64357 = SURFACE_STYLE_FILL_AREA(#64358); +#64358 = FILL_AREA_STYLE('',(#64359)); +#64359 = FILL_AREA_STYLE_COLOUR('',#60615); +#64360 = CURVE_STYLE('',#64361,POSITIVE_LENGTH_MEASURE(0.1),#60615); +#64361 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64362 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64363),#58418); +#64363 = STYLED_ITEM('color',(#64364),#57964); +#64364 = PRESENTATION_STYLE_ASSIGNMENT((#64365,#64370)); +#64365 = SURFACE_STYLE_USAGE(.BOTH.,#64366); +#64366 = SURFACE_SIDE_STYLE('',(#64367)); +#64367 = SURFACE_STYLE_FILL_AREA(#64368); +#64368 = FILL_AREA_STYLE('',(#64369)); +#64369 = FILL_AREA_STYLE_COLOUR('',#60317); +#64370 = CURVE_STYLE('',#64371,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#64371 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64372 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64373),#56450); +#64373 = STYLED_ITEM('color',(#64374),#55996); +#64374 = PRESENTATION_STYLE_ASSIGNMENT((#64375,#64380)); +#64375 = SURFACE_STYLE_USAGE(.BOTH.,#64376); +#64376 = SURFACE_SIDE_STYLE('',(#64377)); +#64377 = SURFACE_STYLE_FILL_AREA(#64378); +#64378 = FILL_AREA_STYLE('',(#64379)); +#64379 = FILL_AREA_STYLE_COLOUR('',#60317); +#64380 = CURVE_STYLE('',#64381,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#64381 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64382 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64383),#35100); +#64383 = STYLED_ITEM('color',(#64384),#34950); +#64384 = PRESENTATION_STYLE_ASSIGNMENT((#64385,#64390)); +#64385 = SURFACE_STYLE_USAGE(.BOTH.,#64386); +#64386 = SURFACE_SIDE_STYLE('',(#64387)); +#64387 = SURFACE_STYLE_FILL_AREA(#64388); +#64388 = FILL_AREA_STYLE('',(#64389)); +#64389 = FILL_AREA_STYLE_COLOUR('',#60338); +#64390 = CURVE_STYLE('',#64391,POSITIVE_LENGTH_MEASURE(0.1),#60338); +#64391 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64392 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64393),#39259); +#64393 = STYLED_ITEM('color',(#64394),#39109); +#64394 = PRESENTATION_STYLE_ASSIGNMENT((#64395,#64400)); +#64395 = SURFACE_STYLE_USAGE(.BOTH.,#64396); +#64396 = SURFACE_SIDE_STYLE('',(#64397)); +#64397 = SURFACE_STYLE_FILL_AREA(#64398); +#64398 = FILL_AREA_STYLE('',(#64399)); +#64399 = FILL_AREA_STYLE_COLOUR('',#60349); +#64400 = CURVE_STYLE('',#64401,POSITIVE_LENGTH_MEASURE(0.1),#60349); +#64401 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64402 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64403),#39034); +#64403 = STYLED_ITEM('color',(#64404),#38492); +#64404 = PRESENTATION_STYLE_ASSIGNMENT((#64405,#64410)); +#64405 = SURFACE_STYLE_USAGE(.BOTH.,#64406); +#64406 = SURFACE_SIDE_STYLE('',(#64407)); +#64407 = SURFACE_STYLE_FILL_AREA(#64408); +#64408 = FILL_AREA_STYLE('',(#64409)); +#64409 = FILL_AREA_STYLE_COLOUR('',#60317); +#64410 = CURVE_STYLE('',#64411,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#64411 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64412 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64413),#56923); +#64413 = STYLED_ITEM('color',(#64414),#56469); +#64414 = PRESENTATION_STYLE_ASSIGNMENT((#64415,#64420)); +#64415 = SURFACE_STYLE_USAGE(.BOTH.,#64416); +#64416 = SURFACE_SIDE_STYLE('',(#64417)); +#64417 = SURFACE_STYLE_FILL_AREA(#64418); +#64418 = FILL_AREA_STYLE('',(#64419)); +#64419 = FILL_AREA_STYLE_COLOUR('',#60317); +#64420 = CURVE_STYLE('',#64421,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#64421 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64422 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64423),#34705); +#64423 = STYLED_ITEM('color',(#64424),#34555); +#64424 = PRESENTATION_STYLE_ASSIGNMENT((#64425,#64430)); +#64425 = SURFACE_STYLE_USAGE(.BOTH.,#64426); +#64426 = SURFACE_SIDE_STYLE('',(#64427)); +#64427 = SURFACE_STYLE_FILL_AREA(#64428); +#64428 = FILL_AREA_STYLE('',(#64429)); +#64429 = FILL_AREA_STYLE_COLOUR('',#60751); +#64430 = CURVE_STYLE('',#64431,POSITIVE_LENGTH_MEASURE(0.1),#60751); +#64431 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64432 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64433),#34207); +#64433 = STYLED_ITEM('color',(#64434),#34057); +#64434 = PRESENTATION_STYLE_ASSIGNMENT((#64435,#64440)); +#64435 = SURFACE_STYLE_USAGE(.BOTH.,#64436); +#64436 = SURFACE_SIDE_STYLE('',(#64437)); +#64437 = SURFACE_STYLE_FILL_AREA(#64438); +#64438 = FILL_AREA_STYLE('',(#64439)); +#64439 = FILL_AREA_STYLE_COLOUR('',#60338); +#64440 = CURVE_STYLE('',#64441,POSITIVE_LENGTH_MEASURE(0.1),#60338); +#64441 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64442 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64443),#57255); +#64443 = STYLED_ITEM('color',(#64444),#56965); +#64444 = PRESENTATION_STYLE_ASSIGNMENT((#64445,#64450)); +#64445 = SURFACE_STYLE_USAGE(.BOTH.,#64446); +#64446 = SURFACE_SIDE_STYLE('',(#64447)); +#64447 = SURFACE_STYLE_FILL_AREA(#64448); +#64448 = FILL_AREA_STYLE('',(#64449)); +#64449 = FILL_AREA_STYLE_COLOUR('',#60615); +#64450 = CURVE_STYLE('',#64451,POSITIVE_LENGTH_MEASURE(0.1),#60615); +#64451 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64452 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64453),#36323); +#64453 = STYLED_ITEM('color',(#64454),#36173); +#64454 = PRESENTATION_STYLE_ASSIGNMENT((#64455,#64460)); +#64455 = SURFACE_STYLE_USAGE(.BOTH.,#64456); +#64456 = SURFACE_SIDE_STYLE('',(#64457)); +#64457 = SURFACE_STYLE_FILL_AREA(#64458); +#64458 = FILL_AREA_STYLE('',(#64459)); +#64459 = FILL_AREA_STYLE_COLOUR('',#60751); +#64460 = CURVE_STYLE('',#64461,POSITIVE_LENGTH_MEASURE(0.1),#60751); +#64461 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#64462 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #64463),#34525); +#64463 = STYLED_ITEM('color',(#64464),#34243); +#64464 = PRESENTATION_STYLE_ASSIGNMENT((#64465,#64470)); +#64465 = SURFACE_STYLE_USAGE(.BOTH.,#64466); +#64466 = SURFACE_SIDE_STYLE('',(#64467)); +#64467 = SURFACE_STYLE_FILL_AREA(#64468); +#64468 = FILL_AREA_STYLE('',(#64469)); +#64469 = FILL_AREA_STYLE_COLOUR('',#60317); +#64470 = CURVE_STYLE('',#64471,POSITIVE_LENGTH_MEASURE(0.1),#60317); +#64471 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +ENDSEC; +END-ISO-10303-21; diff --git a/Hardware/WeAct-EpaperModule-3.7 Board Shape 外形.pdf b/Hardware/WeAct-EpaperModule-3.7 Board Shape 外形.pdf new file mode 100644 index 0000000000000000000000000000000000000000..561631b5a818ae4ea728fb6e9200ba9be7c6fb75 GIT binary patch literal 400422 zcmaI7bzD`=_cjdD$RPxjloF*5pmcW#(%m3==tD>*Z{&1Z8EIxjDi zh`q6aqm4Z|jgX}y#L0?W)Yt)HYHe&!3qt?r9>m64)WFf0oJN%U1M>$qW)2qSe}0~x zkhixnaxydqnp;`|Z~6rJOwPjS`gBLg$(xD)Jn|NQ9{Y_X)1telMwv~48d5&z`=r?B`d}{^vlRn*O^I{|w~6-U7T)ScaTQ)WF`t*!q9Bdg}cD-ReJ9 zFc}(^5bXzXC) zWN&EfK>p8!0*k;TW8i2HaV6JcX5{32|Fj^$FC!-h=TpBNtc;vo?CgJMSXkKR=_%kU z7aKD<8`p=YY5!zwZR%)7{{90i2QwG&T^wTR2sj**xFxU@qQ-{6D*R)ugCpR|fC;YY zZSA9xXPj}F?KautIdf~miK1b#7s$x$`b-B@%w`^|{Yq@VUDu}{CEpX+p%8vDHa2c2 z@F=|9i=_ms*HMqVop(!*cY2TKYY+FQK6lqw z^N(qd9uHYQkMm~|WY<0qOPv@G2Q8y5Rr^20PwPf4I{MFjPOT~}<{*EHeD+cg`s`&_ zuMZ7%A|YB0_dk`A(^fVU7l4j#s~#gCFh3C^uY8sD{<9yfRb+^EeYDi@$>7vftZMB} z`wlN1iwxHMP9lnWEi*^U%Y3q}t=GdReY!1QIr|Y~ZNeY?X{n*A6rSI5nke!V z2ZK}PE^5l6=HBgAjPi3oYCJ@#W_T@dmY+Iad0ne3`Cr&t6WthVdU4j&^tQ+uECfKU zhkR1FEgR)dJsED8_W2&wp)c+RfJr`vu}y!$!P@6Kv__Kq;AqX=yXda?_=4}F8d&Q$ zLUHOc(G)+ib%d++UF^B<_)V^amllJps#dNcpI-28r{`xe5rQi#-x9oJfrN!3*A zr}Y3+Dhqj3L@Q*=_iO-qsBWf3I+^ibn0oV>UsG;RFZW&d4&xqy;B3oW^vQy~Vc#Wd zhMmLF{Em}U1!b~(o!1zjR&r#oPUfH~FoTjsED(jV4h-7~Kxc}Ham!R1Nsp2byPy0zXE7_SvM zNMAM@w5K0EKCa7KvR_(sCC#XTTi2$+^Nz>&G_Nxt_VKFh7`1<9Iy0BjA3itKv!01O>=b3MDJcjb%^%X(uIUU+ z9dLS*jjaZ~ckC#SI9g}x_jvXe!UVe@!7$Axv7Y|=8tH~Av^L0s2+YknO?t`7+iV=T zIhB;%i&c1&@((cgm`~=&eQ(&We1;l_x>&IHPF5G zH}`5j-{*Z_ek3ApEmrQh{OCBea$)yP(`%kCVzf`wUh6F^5M4`2ohYJKF>5`6#~ASB z4P$c~ugtt&|BxiAz(*t^8}vf!PXvD1;t-KIuyUM?rNSJqE~tFRXJYwwr$rzVHK zJ`D2nWCWU_?bo;zF3i^GwLEKxB`}9LX@{;t8`7>Ii>UjVXiY?=1)O}El^!DJQJNyi z(1F_8rmo0~NN7G!VENWNa{M0LX!AofNw&z*O~z*wF2+RA{(4%e6-}a%%m8WK>D{{9 z-4U%UO*Vd~(udCj_AP6l(|FP}eMVHB7b-e*M&aVap3&U1iX3d;*NyBfM!bMC=7p!B z!V)2&fFD+OM=|#72nar1C#0!G75uOSN5f(li8H28u%V5TJrZU*yulerK;ooG>Q@cW391g}( zv-9uoUe8aR?-$DNUpUqte{V=<7g>1Qz%$=FO(sKouwRE*idC6!PSlF1zf6sx4uPT0 zjRjEUXrQH-P&a&s*_vnioo;0Lt$)(wKaZUDwF<@pJ3thQwZ26Eyb>Sua`i8{TGPPQ66i=W0W!-e&y3tv)Mb#!rkS z+P-Gr^!A2xJ0$PzgFBfDKp`B}zI7P(RlwB?Adv>qvQ%@&@mff_Pejk0zraHifG?3^ z&9^5JOj)-LrP`F0?)5sCKxw?ToMQK zJ&XPMlS5WA*DJz|^@#IzvXC2j==T7G_>R}v5$G6p^6)f2^qo8Wl(^Y`(S1kn+T zaK;lTG!Dp-Z)LgQhFPI;$PP66?*c>m;4LHqc_H`6Z*&C0U27OrP7w1c1JIggijnMO z$Ehpz4>4?ayH>;zq^qX8rUckvF;neq@>L!WKVA%L;(xiSDZ=Ng2(NV3W~hiijni_+ zSE3lZ+x`4p$hf1+NZD(|Nc5sajSpImc?)rFsM_JPA6V7BB0)dBLF7*K>J%Zdu~gWz zJDK)!PktnAa$nr*2-2QTJ*9U2EQ3~E!XlT${L~AKnxs$c!k8)=G zc@iL789kfE8K4=5ozjS*f-BI z?}$E~gU>$`7nWEhqMEp96{R2(?_OOEtsRYFW!pxeu$l{QQ5!@5kgJ6BfXr`wwkj&6i=7wK>XJC1GwE*_XSh8o<- zs!)%hvhnaP#2q>&KMP%p%yA)s+w-hv(;K(0$c%1jjiio=b=d-oz6@@=oh}mkn@x%zG^k-B>`a^gd^U%^gWaDBM7{_Z*PuM6XSeK$?*ZmY$4Y)8&LgkPPo zITjKb%tqExZO!DjI~0#nWqr@&^HUS&+-{2uRu8|7EwIP0Hj=ZUggGM8Hpw?rx!zE- zZfWCQd|;q-MV=agzXfGtFAKlEWy}Bih$e~q3GhkNjUtnPFLR_k;(L%qJ>yir(h7`)B49InpI z@>Rx0aP1mSKo$U%41Nl^)zHo(QViYqV%cM7&DWI>*~?-*xY#fnA7AVs{&V+o#gkM) zzQDQr#*=z4Dr=!{BNiqTVi9#Iq|t)$BULU@q4x?kkptDv_%bD1;+Q}@dd8nMeumRsFOHEDN!Y6;e~2Yxk#Tttn2>S*io82D zL4fhJejjF4TN=wV-l|u_AJl`k^$m5tEZ;#Gv`9x>nJV8($@vr%dJ*_>Ru$SVV*hz* z(L0dhg7e%wy!(oL#nW=7KMZKJ`HMqn^4 zL3m41HNN;rBGrRZ&AVH5_Dp^+f#Rj5SAn1kgCMO2RNaZqioFl!LpaQgC9mm-LQSrc zG2WGXl|-R3S5`e!H(DK2#d7osS>B)DcgDhC3~soPRU{h6r5SF0EBK<*JJQX&){x#I zxwf1DuP+x%i{D|BM6mol@zfF}!Z#HjeZRNj%UBrdZtVy+**4WDd*S`caVw77JNTLY zx0BX{@0x;~9a7dN+z1&fSF|6HwTrwk*SXYniF(Kv%G+x47DyKFjRRwkZpA*1`!TZ{wM1SWt)##a{W?pqi{B|2UqQ8SpaQv%1 z6e(nm>f4g@h&~f0fla@iw*LGV!UNln!ur9_4SWZq#r1=w$?wn~l?IiMWl&~{I{NCK}8T|GlJya z17`f62cBs3BQ!~|JEBeRBNfT}WjHCp4g~3>E8e(|F{4rfp|n1I)oHGM)g11b_>a|8 zb%aRBw{vTL@v~~#?gqM#0OASenBE>bjBJ3vCS~{cc`fLU#0ZvL$LDkp81sij@a|)| zuK5GrWz(He^c=3L;E$3mU%)N=CRw>P`CYa1^XpfvCiy&+F}a;Cs$d=Zl-a%s-*Dq|1=%tfL=Uo$DD{ zNd|5>#eQ4V#3Tq-$=gY%lM$s=f&>$K0c|gvf}H$p2V5tke>k_)=ymT05Tk}82ez3B z4g!C8_kE}~&;10|$(Dt6StaB3C&{rBpEX7oc{E19i)J@+!XzJ8l87FLdpkxYsgh5j zvRzi)CgqB?pB6$z11@Fy5ScBy>m~n!!*?qPhJzQx3$3PW56YGE%{B7Py&k~cN6l9L zbDQn>%0=Ft82X(FKHeJiV->{>uHbYFFAdw{Iw?EiJ;O14pIx}rHu8gr9p908u@ywJ zk{_Pdok*7{V`JOUtNS`}wlU96B36&rM>O=z=!pPs0Uj;$?j&yus}~adii{@&s9a z3R7NLX-!Z~3Xw(_c~HdLYg%U(S+Il>st))Q6n$zp2tgFui*{s5aM#3fMD!l{J6o6@n}bhM97;r(KF2QJOM; zMCSPwtSMAq$b%Sa!%X#4I(QLa2Rnr7Cd%k@8jCE^g~{0YY~Yc|$OMsR(X*#tmCcc> z)1wNeWOfW`k=lbphj%T(aR#B^%hSsX&@r;(DFta4-I0^%Y@nQm&uH2a1b4LwK64<- zb9Y|~?OMSP$M3xFdrgvkc22@gLJK#X+=DHVmC8X<7&zprTJMLTXUv(%KQ1}J+#oPs zENok&FU;5izif~qOKDPrfp9XIpY)M^O!KZhjkstc8q0XAAWN@E7g)u>GRg0(4cXZGAqhSX_vs5?4f0|bdtrl!vX?qtekaAm)da4a=H9AjezpO!y@b?;X@J?nH z4aXH`(J z-;j_M<$iVK-+H9QKLBDbAkQivyIEE8VKoF{%b$Pq5iNM*QsQfA(7v_1iaeWGRO0Y` z5)Y@G7&NP6x+*Y<>c(uLJ zdeoZuP86|{3u{dJPsKj#@w)FunJ9kNokj_L6ONxbW*F1xMUmHvzWZ)cdVmvxLxSL+ zA-#`=dl@a;_iuFF$j+q zuqzif!&xb{`6-R&XuQA^(OS26h=&!gd4 z%P>=Ok<9C!WX{vBeWGq^)2n$4Uuirt<@4T zbN)iEAbxo?R_9UgD{!mNo_EdeREWqRHh<(5Tx{cYeG@CCNcdvDIE?Yiripa}jy5Js zgfuz2ow_(M!AE>I;U%~>@pfY}L_`*wXrnE-Uta^y4|l*jT~B&%LOb z=_D@g0o^l~6fCbb%nsY1;8BSruSvgOKj=C5Ps{X2y@=;l=bFaVBG*1NdwQ>>ZvVDM z%lGFZTTU3J6Pv$2@q6bB8RkklX7ApDQ0@<3cuPLE?I>lkjbyEIrIyi)uz0@bdSe(e zdsHRF+4sKX68Dg(>!)Of##;&V=&RXaMos5tDrOxbJ72u2af3RU!POUmFPnDY8eBXwW`|UsA_kmcT(FI%#w|Q(wXBtTt%-34XM0#G}m%f zp9+nDioxvokO>*3_I&w9TKh|r7+kC+-<6vYu$e1)Si28l)acXNp$^T`VZ}S+$iKTV zTTr=89+SC7f^H?B;^xj@HSeGt?HFIHU(_}64CA-LqN1%k{B9jL=cBIdL8mw?TOJAa z*D-Q6OnMD?BIv47n|qb)#C}>N*4|63xZ8T8Q7Yt6bKSYqyl|bm@?r7RzxxcEAM+9} zwzgSBfTW>l)U58n{}C!pg&93{#f9gGR@R6w9DdSD%;9saM6(V}`l_)QMX@#9#F z61?joN)>fZ=d`uhf} zx9QUrs>S;F<%)1RSGmS&o1dFmH?ThhMp5zmZd&o%Ni`PBnEz`GcHHN^uE1HXxyHKU zIl*`JW()Oq^EY30w(`kYXWUR0mP%(y>#k{&M-zk9Ktd_l#PQ4*Ntc% zg-cK|YKUH_BOs`!%Utrb2aB609B#c^oGazDxnk++At#2?NF3NJiBigxaPKLTf%2SV z3JE)5OqO)COxNv4HNW7Sfb!BW%5&KHuQ;VudR4yOG9-V}j#LtVO17R$wvbXz@ka0E z%JNy94BNlnB(Uto>gZpzo1^cvTo5JH0q7cH@U5pju-PsXX4&t1uQcOZJ{E& zYN4lYHQdTOLoDP{BZ|O#KkO?tI0uwiK&ol3p>-LFJs5NXY9Ip;K5CRHl{x(lN@m zTyy9)wy}s^Cwty6Us@^qI{(|r72=YJ@_mm5HI9BzfcVkb`2yWCdP!ZF^?j2{lDtfE z)NV3I$@qb)H>JV=IL<7k9+C0&7f#WHo^vkL`p>sHu-Xq0SxNf~ltfcDY;YO$^2bDo z^g|3Eo-e4Zmci2+n~os>unkuG=dW$C1~iIa+tWP}+9hX0P}_!!<2+d-7L}ISz&Zh! z?sUmMPJB8OO3O|%psDGyyYTCdvXhze$bI_?^6KvSSQc?7_L~MuI_t>_vPRnRQ_JK| zftUWDY?vB*E+$36mhRrD92PslKPE#E+WgPC(Ca{DWqsLfkgrEBi1UYrHj^i zrbkQAa$vg+)QVaQmKA+Z*)OUY*6D4OBHx3au|7|u6Tu0n%h@ZKb_PuAHS*3e%BnXy zeZKpU4`J;!+FbUWmb>jLQn!Q9sPdq;{asSE;D}I5DiiwBDaMxbpUztpz0hm0zgv=D zP0OqVqo&E19AsW1yAb-IeFr>C;@H}Rj~*wlVjGPoH*2uLwa{C@;_zqDe9B#@FHPN0 zH<0Uz!lAR?`Iep>E9EBvmISdRUpL-{i{j}z%|Q5x#1CJ9EWD+3qv9DEAm=YrQx2T- z3r^k5{VZuy2TG-t-(O%(7>bD;5gM|%GHP_BZP(CgQaS2`WB{9g}td~ z$0Qt{g!(b0M%~dHA(PszVF(F2XVVZqz^W-;FYk|^=&wd3NUg#vM;yl1D9kVZMAhl9 zVXairsFMEOn5$Gw4+KFAl1pKLmmS?TX=oI%f7-u3RnKQ0Dr2;q{9tZId`Adm?6Pr% zd@J?KvXJh?xfCC!HDBc?-*09DeE$vh!p}3U=!}HXgvD%C{mJUZB-5X*yC%lbUv#4o zL_5!;1@rAxgfkZN3>0R!+hh!6!kn*@TPoU+YsMLUuBb{lsqGxyZp*$9DHPWrujRu%A& zm_$u3u7buTHOu|ZL%QcUv7bvE;K~}yU&eT-D62iC3p!_w)8xCa+rgbDL!%2NcX?LB z=L7B|ZhBwLS)3eU8^o@gRN1P{+P!@BnVBx@uuEoertXNzKgqR0SF1fOCn0T(Z4_$p zpifBUyzd@6=HuuWp7=2)Y-=<`q#6L!^+;t^4w-L{=<5n$CUqmi1w=r^5tLfrk%XgC zZ>zx8BrF7Ht*lxwXgY%*`wMV_)5#Bvuai~OK1wbp%brbsC<&hRRP^%hml0dos-4qO zigtUqTwjp(;D(ihgC--RMcn0}!6((~{%y}D?-jT< z8^1RXCpd({lf?FUO|1j}fYrc79qpGy4coP+ga#mL{N!qP`hww#O+~Aqm*CdKN12k; zN_zm^FSZ37Sk1=O6$9x0;B!0Fb1!GfLG{!naQ7^fW#-g>>HwRLZ?Ijqr0ZfAYDJZ!qqypi5(`5HFZI;hcB8g~5b6*w&y50-%wYzw)fS$u0`(|A{4iUKm9 zA_SNHXkVWIFtlSbI)UIx{hsEcQvF)!-xaI3w^ZW-K(EfK&_zRODDe!PfTqcz0jm$8 z6@MDP@!AP>@ZJqx*@|YnX7622o`y@hN9yRo*1QXIKs0G=nMIB!&K;4M>XG+S4Lrk& zeh{5<@a2vKS)17c+c!mk?ofXod_CX+H?+Y0>0>}@gm|yHz}xx`Eo)VA+B*_70O`LK zDtISg1Cyw#27n~*D;H#f4}KHTn|yE7G{l$FRnGy09#u$S^pdYMktY*5Q5S?niG7y@ zqoDeXO7Yic`l=LcpL~Xe;@pqHJVFJ>`&GMH3LA7re7B*9@ryykJq?Ur2WH4F69|)|(;^iF$%@2AraRb; zY8@1V6@LBs{3wD`^!fTveJp)DRdxjnj}}kBmaoQ(S2nG~(Xm%tu|Tr1p;u1TJPn`D z7|b=Ev)2Q1)F4`qZj#HvNqk_R%&sUIIQ#-y753g{NMGorlAxz$tB|z^yR1&PvPJgkLztq2DGraI2?f}-p*;A_|t@;jeEwTyd(W&#rmbHS{*q2p}wzgelY7KUu)4ymO8`|oZ zeAR5Wz>2J5YuZPliAsjD1VFjhg-v`q`~X`aNFaK&QX^D+At3RBK$k3wd}rbzc#(F_#^^r)@#7FW%f5&loVM0r0S6n?3Hp(e)o>>?@|S&D!ae1r zKf)KBz?L=LA1h@o9x?@R?NV{YabjA60=mEx`{dC`j#adR&Z)9u5b1`~BVcF4XWy?PI!>v7rvl(nA8@DG zNi8%;%G{4X1A+BhhYgkOl2T+6G^)o+_@dz`Un+bt;>j~@7H6UevwUigg;s=Z*B zDs2!4Vmv!|t=`d+gNp(cWU$&x7oS_Om@0lbSyS@1{aTt%%e&-_3|VBw0epV=eX8k; z9WK%V)m7T&)lw~@MC7V-_3O{0+Wdj8{oyN4`l<9$3~Kb~VLbLujVnvyi$82HTb(tS zeJ1usYU9vV(wFVo-)MzERZ^@7A26yBpHK7(E|t3yRyKyInteOsFpjFDM;+S>2@Bk1z@;cnxlCVN8PXOg??+JhoFk=?3(KY^hcN+$f_loz;#0XDmXeJiT#NXy?Z|~G@;yF%bu4W zag?#EuhN8*efc83jt)v>Eq+C@lt}9{BS7l(00I}mcGt)aoNi@Uyn^_fOI3BiZ{4c4 zKDTPd`Hf6$@VznpC^C^PemGe@Jm#~LW_24op5D|_e+POl(aG8Hd%RHqIZ5wAL&RY% zvE6&=d}NK*7G*VY;dx^PSoQKy-^1|sr_=IMr5l)yse^ESzK&IMHeQ5O~uSZ)@$?UgvShN&}SqtF&TISF(4%uZ!dWy}n^>rcj zYv%uzrz~Wn32T6S&QJ#ADO3R>)pN{@ymsu)PtyEuKNll@Pd9HqjASUO?}{Knx=xC; zh+H>+e%>@U((=}`nxB6g)!6KL9R7v8Y;~~yj^Yo$vmSdQ&sseMb*Bs-UpRU@{#m2X znE?GBqlHuDZ4w#40*NnL2l_QM``A1D7<4LO{2IFx>CF5SJuTW zX{AXEZ&pVODPbXJNyZ)0W`0+_yku49`AP}~zY6&~DI=@_i6>UTw)X-^1ffa(QT|rU zC-MEdOH)N3G~a@}Eap*kKjb5NW1a~30-SU?^)6-6m|uX~OAJ=L)po_Q5seWDePg5V zq#CHaG+oB8>FgA`r;tPCgYoI&;*#2jfMGNziQMK)=l7?dPWKTMdYNyfc)X~8 zyX!DGVTUyX$CVbewR1iwRaIhYh?V~2Lj^ZR9C@$R;AmsHBYQbWV2?imZ^oIDbwGYK zqczIPb6qOGlESD-!ZPc;Ic3iR2m~kALjn)I_9dW9m!R@gL*QjWnUKrtD zIbkYjQS7$`fyPC}@?D1kd)m0g!6qGbJ#m0RYTk&(TJ!*JWIW9IAq$I|RHKLSq zWyNs>VyWAnHrDL8)Kf+ z=Lk2X;!o$`y|f~c1q0AX+p8pT?E<|YKhLnp-H1;@6JBf0&;eVa+o!hx2L+Yuy(m}U zCIfvCai6)l5gDk=Ii|&GG3ju^e5^>gkl13kEnDh51jtnd;QZve{*uQYh3-`II2 z++{~01pPR@HYn;6K%I}i3ALB6)y9k-4mrQJ}!MC@`DU1=e>QiV6z85i=*rq^}EKQ>x`((6|5|+IK}nNgrPGD z+3xtFHdRdfW@z}q3~cMPZf0CKj3V%0YU+W;SZeDK`{FtF4y0NTw-4mtr`NFLa8C(0`4eX0{ zl3uTPdx;XSzaI_O+Oh{Jk<7{HwHFbzCSbvF?z^lY)kt`0Dz+m1)P-lV>tF9PP+bMCcNc0w`TBgsxF;K$6ye=uEPM2!D zUP)Rw^guXu(+{3|BgjspCc@Yk>3^W0Rw#beVTmErWR-+AEl{;XCy%rj>qXXLwvbR# zvIXq>IvoDU3!v;`VLrM2Rm@5_&-m5dUu&Xql@Q*RkEx=9D9>H!!l5cKxA@4zw>y9( z!^GdLRjEHJ0ZF8{m`M6Q{T=0lxbFm&91x5(zpC|7z4ilXW))V<#m0qR0iDSvhGu=yRD zMJmasYQt7HRhHT^HS2%4Y7&F_h2)coZ#VAk1Oqe^#Crb~I!OVcGh(@%PUy=kYNygD zs6wmcv|d5NN=g4gBt)-g>X&n7&vv6Y1q^SBukJE6#?+Qgr0ywBc1xNE9$R3mKwhof zbm&keyZ0l6{ky$lp0<}?fvZGtA5zLCYZ@#0RGE0Z%v49W52x3d9 zu@SAVENZrc`m>GhZW<>2vbDX{~3}N z-M(@{Ib`@hD|_#03o((S+bV9v4RnwuXu+B$;LCbXOF6E0s35!5-VKKR(51h`r8UN> z<2B52`m5W6{#O|NGFv~@Xk9akHs%gdGMO}&zjmcTs`8AQ@b$@7dIPW4O~8}lziIz4 zlZ?|_rC?b=_@qjlx}($z{~jsQkbUsWd#(ory2*M6Abf0~l1VHF9#mvC@TLU5tp5m< zv)Fi@o{BP3n>+F-Z_8Iziv!uJ=3NT3N&um1s}or2XuLou_c4W=7Cyi~o|9`jFX1?2 z&i8I$@7)ph{QRxiRq~2^xtVoB&f~YPv>5r-c#@&w_h|nEMZK@8*q!3t2`0-8qk$5N z7%$5?Ri(4Tbpde(>nUhq+XhA<{0(LU+>ee-U~>n6=$QxZJq3tlTqR@#^)_R-yh+(adLtf)yEN*#aQ9+xd^o=5 zwx{^qDn`C^D)q!Z(^MH{`BB#vZwt|1hCyUE&4@eK(JqW%n4f!|2hu*UBD&}1F;ohv z$wqnKfOD-nz5y8Ud?v{y)$vEaZV`44=)LU4Ahe5&wGl&&(c7p^dYx%-8k zlhf-Vxq33xqw=!TzrGCHk6C!Fpwl-{awoL9#c-wozpF|? zzW|2=s5?#t)fT@0Bz7tDbUOi-0H>3VOJHvW`>(@YA^hEJyaAL_7l>JGv*8Ir_FD51X<>cFZxqrr_M^M+sRxpdg`jPcSr zp43iE2s)cdS&?_2Brh%@%XPOwo|PiNI5EKw*tW>kuCI;s?uujd*MKNxu5(qt{s zpAT8vc{Kn5KxZ=aDXh2s8vr!xcq|ptCd?L)9zlSi#QT6F+ zQ}0(cJ>mAn+j9ua6IeAIfEdi^$JS&drUkIZm5N{k(31 z$%E_hSx^@!nn*BHAiYnuA=dQ+ zS^%a{{QgD#Semze18wlr%;^7V5RRW&Z#d1HRsasiEL!?;UViaGB-&bW|+YD@S7K1~S0(A;?<#H=P zw4EnVAZ}l(wC}^=kGMjOZFGu`{bzd{%A4PF=xoIsDt;mb-k*5>r6-rjtN_p+p^sm@ zE!8wKP(eom|wY0kV9tUJJj&ei3wT$+&XY#W`KiAx|^ypvU<-#$sScL2f$b)6xR z;Gf{CBjh>uMOFQ+?Z(5JY>W!T?yqj>-Yfh!6F}5ps|y3t2aX7!?!7Fl9G=ijn>J?A z6tBpsw_81nGx)f%BmWFRa_mL?#TA5K6>;lfvKrDnwu-@=FPxk+NUYk9hhrzAIV92h zOJ6kTO6oB(c1sqQ;&PE3%kKxD9`OHJ&e$~)IzdG1w?twIHeO4NxF=@A|LqkPtg|l~ zb+%jq71j#3rja+*K726{kP6sR*&os>KLn;H6A=j7H_&Mj_3haxzXX*fo=R~Srln)) zx6{}Vv<^va6xKZ@QV;BN1N4CgR+h8<`a6?6)$SJA>@s|wA~*WuGFbnTlk#9;FjL@0 zwDu|}PbU9Mu@tWLlChA6BDS)hCa>3>=+ilZFG6@vNQk{hVzNQQPDR!8pY1ZExy}Z- z#fN+nZ%k@tUqE12P+YPzwvA}aGdmnD@*&Yl4r zGQpEXHP7W-_7cFyDvpUBWz+~i|NopK@ljKtp)CFX4EZYkjMqZn+j;%%GfxiVj8kA$ zH>Z2o6B_=Epu>FgW?l`AXZJHaa`OWr_*!oTvdTI%$-l3c4N*7*E%q&;gBuQ7u5rP{ zT~<7>_0HW@A>RD}0QTg*f&mOc66cnre+ha37BZVm)npBh;s;>jUmdM!6KBB?5X`wf zGH!?kRWrtN4OE`ujD9?M5dh>vV$xKoi%)X%WiJ8Rp9t}m+ejW43+3w6w`)38Zqbny z$Z)v#=FvMkY5i3?!AdngGyAL?Q%?p{DCNm@L{&)gv;-y@agXAbPJ4M(E)LY5Hu9lZ z*rL^(_>TMW*anImr z=?jRI%3s`5pHy;9kR#J!tg#(?eOFAyN-u*1X_l{29g!JWw7wYgUX+_>z{UYY5I3d# zis6c40ObGRrH_e{`Go6m*GT%1?nsAC*jO>GQ0L?$v(+%hw5u432vvNv=B* zDS+x|`A=nQ*OF!Q} z5IFqz?*Z+QK(0FrCm7h+c$VQRYHoq06%ZvtaNM_$nHJz!NA!y;u8~K$*eb*VuIsxh zgm2U4 z9jF!TmHi_Jd0w_AYLs92Xcrv3RD%#Vn-Q`hPmAw0WRWlhM)f|4keG7I*>AHZYs@jk zD=rK3Fy50DA|gk7R`euZR9|T&{KZd+k%x3eh&dD^JcFw>=}lr47l43FB717?nf0o@ zt#wSec&BLYL85o6@y~2n5Z-7(vvZb-z&F_UL9%0R~>` zxxeI`5`Dv8EQg9WYfAjINd~4=HyX;GW+D$zF2G;pCUT#+!BUiX#$#a_2F1HVWaQ}d zieYh?m>c3JwzAb08@c-rqtX($u8D1;t=P*mi08`^IC;El^a1`~80leG;PHO`{dKkX zU1#Ux4c6lc+2gd&b>ri8=fi&I{q4@<)#;zA$IIi+1{Ne+XIf5v@Rw61g{+sK#2a1{ov6 zvdV$!6#i4T9irZ)9%=9aHJL9tT@F}D^Mecq^?Zgn(i;tN$8UZE+R?jZM@XNFZB=x= zynmU#+W}S^H7a-*MTSf$4hGb0H6OyIsVW_Pf5$w*e7+(l3N*#=_?h8ppZ0&w(DA2_}hqdb0w?!%Ea+>gvoJjU7BP5D12!XNFg z&q2pEU0kPC{vC#loe9}hCLzvyvzyT~WrRId@M_>z>jzO7vh68^F>9zpzxZ!?83UXM zm?G>URvz?X3H}Wb!w@U?JG{?;LgYV(*A$Qjk?ABKc>^~O_$#y?BqLahCpB2h{ZHEk z5F%d0JD$~$ytj{2>5(y@hHu6Y?Jd?RyhcE24av!8@(FTFXv1y05Pw+_jVN;6MY%Lx zoG+mR!>*VKA0kb5C+-Gn8SyK*KxC!EwZ68DL68DSB?^!VL7@Pttn6{`FAE}3Pm8Gv zDj7NS7T~|p22j#p88F$$2m#)xK9ZbED`@<1@>w`^w1Zn~-0I!)-cM)lfJL!LJs<;| z_fIM>ck!6R$#c>Ysv(}~z>Lgg+~lLi*QR-q%%mRI?hOPp5mNzbETTN;fV5RSuKGh& zIY(!{BFk(Zu4SJbd6M_~uZjc?1(pmmdgGic;z<@j%n_r=62{}dc>)W6nGZm6k%^k# zSO_~O&W?l3pRj^>4133twJN+6x4S|lLGuvZdSP{}uQoEEoYu^Po<>Xto?iTesJ8>QyUln>Mc^Ro61x57t!m z@XHgSs?2pqDhqls2hY% z+i5*CQOU~BQ`&^Xf2ToFPfAHiKEIM@U?-o!e=ovGM7jeaT(re+lGXa2ktpGBO-mO1 zDj-#XdSe!2Qno#nWN*JVt_fe!Y~JawI??K)p821H9_Y%vM0WV|^xEL~E=+PaX?f%E zo%SupjQ^ad;G~0F5QImIBjB_z zpN6!Wx4(pCf){@KeKvcjfB7Gv~m;b z4EjMtGGez-^|uBE655ywLCAOY!u%U`gv?^nWIJuhyZ|L<{zMM|T0^-e2q5je0<;B< z*TT(0UxtChkp#lTYgQa(aMYyjPfCeVf~}JJM?uD?QUQ}_Z;VU$xmhjL^Fx%)g{<&H z+d#?fZ;akb7k5@VX>2F3NSz|nTbGCzR&3V)<<*4{)dw!Um(H_Q{I&opVEEZpfTL#6 zzA-C|S^igy+`jn9`G5NLCjJ6yY^{^sz(0=djkM@)&7(nJk~{x1Bqojl+Zr`I1dT8R zs!%Tbpka|QPFvCBa{hcH_3ciPz^?&1XbF?8G0!u`wZflgceQip(-O~h+}7clOhceo z_Vz>SK@BgC-#3Y0dN0>hf6>=m07TV03&TJ3yM<`0cExKi|5!h^f*Jra4@V1}A9V$k zT4`)eyuyWGk^c@}n2?#@G3Y?>D$pa&5v!QU{Z}4K#uG^c@qYI?Nu2Ege-^7hiAr4Q zHcNf`N`hst38L4yUDQ+kX+3?Z!!xDr`Ts}PTL(qjEMLO7ySu~Su7kS|)=1;-u7kTf z4DL3#ySoqWKDfi+gMab;(KTki!HmtdSM^y*r zoE7097lqY<)D9Zx-4IJ+@TXu&l~C&2^D&dY_Zk0_j%RxwgBhPuB^GsVvDPP89AhBR zcx|xtZQZJx-?zQDCStoy!X98U!Ui9Iitm=~WRK_Ea++FA(&9a6<(fEVgZ6JZ8$14G z|5ExZOvU++^@kbK<>HP)l(3W;_bvAxyj{nY_f8qQz%nwdf^$W*HYh*@6=S7zhwl;8 z5vj`{WtwG`&Fnj;znnPZGj(d%fr6~KQ)zCQPwFLbDhuGlX1)|i(`3D9{?7z0d`>BAT$7SzRlLk1y?XN0&J^XyUTAN^RGp&bab}`y zQh}73#!Fe7*g*KwblUNNX-6P(+)5m-cw33816r3e91sfq#;%?*Duzw?*$Ab+cl3Zn zYDaJ4uyEV;)kJNa7=z#Wh)X|;jE?cM!m_fYvSdRzztDnCF!Mrk5aH-HjG)ygH;S~GV=N}xR8zhqQ#1R~tC zBB>Xk-KYLOpD$$wf=pb?^M7n8zqknZFan!LlDe6$kcuoV&=QXr>ooNU#f3xP{u$A! z0O)IHuboz+GS>3#80S7>jkQAh-@?6QajC=>`qn~(%MSZ@iB6bVV(`3ruffjY^X5)Ykokv zWx%P+#)a_zKb|shQxIeZAAu4j0!hxn1pkmVwxs`;lXF!r_Rf4_sZPH`M=yAG12r1) zkgr4&e(v^UE-?B*_P@{0MBLoJd~WVtTy45~@4s>b)Xt!~mbzi>_hw}Z&>S#{ru1Cu z{#Sg(YYlQKkZGo{3E5^3F8>~mN^$IUOIE1S|Lt;_=kGN~+j)$?v3@TlmD8JH>ixd{ z_B%CyBXdQWK_}6RFg_Ow)+2gxYu1=AJiXj|H{3GjrD`zJMbU)j=cDX1*pIH zfY2MHdI24G03|7DLGuHz%OZ)AkNWp-0%z%*7H14d%-dn_4LtlZenQP>d_ZFpqBHOn z!ucQgZj{gyQs0E`rf|DsCmvmAoS%02`nFvqgSk1~e521XfvP`+YF3!@(ni8(`opr) ziJ@W>r2Vw(gmF}S-$h_hef*bIKN3j)_o`8YpwS_3@MG=^s31^HfDPJ$TmiQEf$|NY zG)lwEe;gg{{D{ZK6orU_G|L2fk%c3W`fZ4bA@U!uGS}atf)LLC0C|Z2^0I~z_@{zTz?Afa4=jH&6}m-$Sy&Gy@w4ZpZJ!aQ#zAG1(})*>Z10P@bQQ zb{-m2)PUy+O@SI(almYrx}?x+J=IDx-=OVhx_E((_klP#O8w`F%fAh*+d)e<;XlG> z@#PkkB4>t**_!j^e-1@Fd5+o@o&76X=aK*=VA~KbuxoMTKsM7wT{eF_ZT5PC3Cbj= zeu4&E1e1WwnLy1SbYQFA%UPxZqPdTf>o4}5Kxo?26Ul#8uQDWSKO)PWEZX1*I!m?5<qBEsO41^uF{V zU;6&Z#34lf7w1;-#QDkIYI}Y&cgzk-$K7K2OA+10g9xR3^*?s>$Hu#mtpp#<6`aVQ>$wR#nEhw!Z}iCJQ1t&3nG^}=1nQ87{)>jFL!PVPH9~b-7ET|1~u~t|X`|X#e zOSz{1#oqosL9k1FN-kPi#4}uZ-Acid}0*=QAiiU!;FU%vlp z=r#0{Nt*vX+-l0jOX$UKYA5(9xbb?U@;1jk%|HJ|i-q_HCc(hL-CU8)N6+~-X{d0M zofgrKudLuMkmB(cRK%V~dFrqiK8DpCI^e%DpuD+yeVV(uTIc59aek!=v09545C44s zV6hsyx&P)sZiV7?bx54B5^NwCy20Tc9_aFI!7i<0?vUg(lQr)-zv@jkYH|PK(6b+Zvf`by7lsb!OXOAvav{S8RW{x`XE#aq^vz*`veNa*G$ik)JW-3 zl@LqwcEZY;RmEbHvD&ml9BSEH{gbmdjYFGvCLXbc5EfOnK8mI>2b0a1w`wx#tHS3oWHJ&)b(Y`+fSR9j!Q|o#%lL;rAgyPI#-L>EPnT4g9o$@h+LT`-u81k|$4$TA~y`%+8Mf&_K2?;&`bab=&dYzEB(-!xtd? zY2%7IvQ-Q}6fIaXWg zBbu$pEWRmeg5WR_k~OlV8Oq{U+1#N4A4`aGNIZ2YFhnI$0h`9C$RYE43eWMt-rj zkaTqx*JI-RT}J8cu09jmwnngLn0lesF^BVp1-<1<3B(RR-r{+23Bhh_#A_) z-hW6;-WmZipLIW0px!}wul-h`i)4cpkLJowJML!1bCS&sMPT&{vD&DU!Yki3sgBTX z0#%-Nrt^LMVRBn%?g z)$Pohqo2xvYc3Pcd1y9eDCDMLUZqCpBgvNf4F(0%|M1Iw@dTpER z9zSJXN>}{^?_0iE(B?IIhF;zmjYpKs9T{gagnv@H6sws|>YCFI%uDPs)?)NT>uuyJ z)xFfgG%PucQfe62DKutfwf$O9@#FR+NhubTUaF2@Abmj^amaQMN5?T%5iKM<>~c11sUcPklywq9WKH421)w_#11j!L|D3CRyPO-ef74#n|WuPCIB zRnOYEnnSsvXgb8K#6Et@5*qs1ur!r5;c0x=z?50y#*M0cZM5PMqdc=? zIC<2DQFmW?~fa*N5LhdvVLUuVn)ox+ju5@ps^j9^1MINc2VW9})5ExvZ zf-OlKn#ZtMvCWHHB9-&+(<)sNKe3XHdU$l#FtKJUlb;SZr*=>d&b}iYA?UF1-1d!+ za=r$t2(o8tmFb@lBYBT&2XZHqv}n{$)wG7|n}Q!r;4pMg-d$K8ukq%?B^gPtqAcvq zKkv5D_&;H`w5nZ)rOfWjST!ceZN=rP1GgF}#=YI?h$yTRRT+cYru9Wi)HKQ#x!Z<) z1I$ZmMKoUV;SPDUPW`Wer~c&CkQy(h39^^TPV>+)$L2IeelOuMxOY4;Jj{=Dze;n{ zA(D}?j2fOP6u4cs`yCrk*^*=FjT#E56}Wq>;T#vL*f&Ee>4Hk85vyu`+PcDzNp*2n zt`C~&Eio~FRvcj$5e!ft2}kNZ#K@a%rz})mR9k7d&pT%5Jx$%KeysB>lO>ujt%Usxy2nU%Q0-Hw2I}F5nKH z260vzeh*f7z;DmQZAzCBhmBTg^l=~K-?5A68bP*j^Iu_$RwM2)i=sUd1+@jE553RE zqu=}PNOrxGMZB7cZu+|P6(7S6K@KV5Szz*z_sp2K2K^{GGAg#@N~1We^h8ld{$|q? z?nq+IM!)oBRsG1ihC$(IVNtT|na_>I8d*dyS=(Z4r#oB)ce!pa&%A{A#2^;Dfk4<$ zR^;_-9{1oDlEY}(j3Vut?yg0>!;Y=buL|6?q#SF1TY!<^_Qg6? zF!(%2b{ZIQ!f>k>81jS6DuVqDB-dz>okp4^=}0=F&3~m@j*u!Mv}0bNQ^>RQe4{3K z-Ga`J@r~Xlr%`8@)GGLh9-@&uUqraR{3?B{nyS@mM$SxW+1q^Fsv03aUYlu5(wU0# z<78MD*GQ>aK`TMvR6CCswkBR+`3A$=JJ8NAKvYKVkHGi-^N1Md)(TE=CbfO*{Bq2J zgXqJTKyrqBAN?_G37ilu{sR^NB7TQ;Tc_8ki)CgiRPY@aZzh13*dvA=Uf3-G;%Y3F z;{nR$u1jd}2!Qm&NUFlYzZK$!u)%GLL6h}t<8tRoL#I>fw$*~3?23q44hUoSMm2F0 zmQclQHq%n$W|$i!co$0UDKNi{Q^!6bDW{cbEbJLo@EU&<_Cs;X+*2HNvOVkX9U8a_ z+BQI=Aw=Sq|NNwDIjYU!veicw%<~EyUk)37;-V3YPrUtKt@Nb_MhutISM*5-NLph%jelWGn08oeV!`>R^&FDG z_P?6JaG}J!LKx1+!zK67Z+QcGmS)(JnK95Deso9PLA=SvnPxW$@^fd7{g7#FrVnqoAE3D-2C@CA5JP@S z?w8Xp&?UI)2o1M^Yvrlx@q(sb^Sg zP%)D?tI(zM117FfQjB2$HYCKAzQN`tsB^Y-!mM(P22#!EOI5Dj>42=1D?CXtJ(h26 z0XIVzxT{Oum4|O8Ba^pLj_|o*LxRFGVe*bf4FWhc^1B|ay6nQ{4KX+^qET`ij&zI) zsck8{s*PdzPoF(A0}X;AX#uuF@=XErV{>5Sbr8@4o)Hv|@1ai3r*o7*6x zKgox!qP>m_wUSl)p_wtWBTmHX&Zl66d@g??!^442({KEo{gj_)MpWnK(BiriT_HP{ z&pPK|rbQW_v8ZV$w7mP2vDiE%=UkWfJr`Tj@blhJW6^W8Sa_t`aAY-SWzwh&uWk>; z{$`ogQez-01}m7bv92Ba=ISjK zJO-E7E&8!ym#m}y+*9xD1^k7i>Fg-!eU@~M{nqAT#eRlB=&N+;Dg6joC6W(hote=yP9J+qk6T)TJzPZ}en^_aDZ9#D0rVIThj zRU=N*FiCvhW9_NoU;k@+Moxf>!D-aF>RD9dE}}&9&UYqC;|e&pEy&OzDYX#!MXMar zc4J1XoGYe$N-oEE#kyX5zi#do0`aoyA6vKBz-|@Xamm0R&oCE*oZMrCWWHN|yy-zw zj*LOgJf|8Kg=P2w(^!?k@N+z)hV5q|#K}i6?D}+>WeZ6!Yb#Bt3XK4&%P_seB8?1T z6U|7!;86Q`RNz)J$i_kJgL~d_cboAAR^c%yRxb$r(VJw~-E%WS3$AiooVdJEfL zrt|yYdvWM^9u<9U9JNRm_v*|v!Tr0qt7jU%S7XTgE#Uijn{@<2gj17#Z(yP$kG@}z z9(=;=MnBj)qYiPHRxGaicbfuk?L(++Juls=X6o#mUaJ32{K)qCXgIdw_%X!7MqN6p zuuiV9{+jM2^WOA#UvaF2x^~;WajqwOveGu|UCmZ7b0H#wE_|Uc-!FJ=<#hGiyV_I$ z^!0m$taSt(-&C?N4`TVQ<&**bWx9b!{t6lD6K>t-x%X_(gMfNbCyLZ;a~Rv-k23 zB~AG+Qh*y|*!-BcX}B6kv_swe=h-W;>V9h-H#(&rY(qmDJ!bMQhQ=*o!qJ>V){L0_ z;h+hrHM4yDDqvhZf){n^@j@cnuiJSANE!TuxO z1@$5B=Mn=`Eqf`4Zl zrt;(jxt*ua4@U!-COu=)slwAS0NR(=jji}mduizyizYOeXf&5ws-MN51|~voksCKih#*>;2LD`_14$Klx6m=ARKIpQ9h;D(cJ+aqwVU9o zYoKjl8eOk z`Scf?DIM(=CePW0sImEH+}0763{|1=lP3pxT$1o@m{oJH@ON{gcX|L%VY|#>ZNB?mTg- zpD&g)l`9msE)vdHb|_aygbqBkT?tzSl7$GHO0TL!bqK{IsA`@Hi;s##@7lf8VPS5c zr3bplBRz(A=lTb{P4!M1j?07rk~#tx|Go)yPB`~z@RBVWYwq^;eFXA4V0q=@ z)BRM~h_SE*wfCQZpY^E91xIca6S@XAo>wh|rEugMrH)&OOhPr2@I|@o5vBs#gp3bm zPLJ0f>QL*Q%Q($X*)ZK^Z%S!JqpiJgDchy0T>${ddFzwt zxqg(dssu-arj&H9Mnz*h{>8Q95{FvU_HK?0x20QjgRM90(M3)Ehn?d4Nf+12S0VyJ ziDMBPSK`Ar#=VdH+{-s#30Tl`&L@(fvgEANQgU`dFoRcs-;E}?64+^iTeRcKH>jT> z3PB&5B&=tiSFBZCaT8lcvoAPnWL%U3!8GXjTJn8{7u5mMPKdhW@8Elp5=(JXX(xuc zswMD^8T2mcFiT0EI8F_Dl$xR236*t$$`6AAb&u!-dU|LSXJwonUTr!*_$T?DeFGE{ zZ~Ix(Yv-T34VmQ(o>UKBT2@-eANuLC`v@Y0)XgX|7UrdEI6H(2gBNsP^ijSUo-Xi4 zoILX8aiX=qFeaVSLyHwL6v6~$uu$)99K4tkeyi{X+|{Vygwp^;GIcvTCDXzj&>{_r zY~HxgpL77yJ2aZ2#_@mQoWyMGOpYgHUQDIt+dmji=Nb~NUqD-QY-b&G)V*Ob8e5>f%&$iXs47XLtim( z?1RZNQU%1=neZvI%kd&~hsO~qGg6f;b0u|KaoQUeFo|wXCB(=cHpN0GZo*jdoi+A| z>5rM|U2`7cdY(eQB@flTfrb8FnqCv9lHE!w{?_b5BV&5+LN!4BMS&{HVkpHpkpV@^ zd4_xf8mB$7rYTd#3wu6TDlLI?07dS}N$=Q9jqg0*F_!Vs;@3n0Tpg-egO@6Vtvvun z$KoN@X4R#V#c_pH|6s?nw5EpxrMGJ~>##1oFC^{kUhHet;y+LLGs_KS*7-mT+>&=my-@eN^#r9Q@>5Jydt7@Gcd(=wdWZk;T9v26`v51NddXhq*TNp*?J<^7FoP1Bh)%pduK!2Hnmk`vOu^zQy>V> zWIIC<;VX8Y_+pIdG=Cy!AMNtIZ~2roMmwJ!|Pc++(y-4)I6FMC{dBX}k8;$a`8_uY8G{Qp1K}4VzbEvTo7S8-fkl5WdN|0p4mpU%L zx;C^S#Enc*EnNT=$5GmNiCTJ$aBPiOK%{RqdHTnST(G1Vld6{7DyD&IeK|_JB4N`T$Vz!up|IAs7L%T{fr-gvY}B1>X)X>w@ZkY!-q7za5`{J*2t5bCr8^kN*^(XSAG*h`c z4sLuU7PfR;tpG*x<1~AZS_kxzpyReCoKCEX_x^xDnsq~*S0*aKD^%qx0mH@!xW_*! zyy+7!<`=Y3u<4*Kq=h}rfi+-v+;}A=pB`&CMLxYj%z;~l@)>Q7;z>P{n!}rgm5cUs z>P08G*z6P)?y)sOf%_|;uS?Xv`#Uaqk)7&`q6Barm1Q$STl8lfPBv$n35;H(wN;k9D!+BNYx`C7pC73dA*snOHuvA}464wnbjwEKGHPzZClG?FuvN@pNtF*9xnSAuM{O zyEwT3N?!i-iD>JUp>?~9j%_PKAKIFOgnHK!EP(dn7u{4u*o$kY$PgfX#)~!Mfpfj- z4IZkLmdPBHA?Q}{Lky3l(iRq}G*Ae6W}E8@Q!DU!nR&r!$nh4h84Q?{|5~vsfl=|9 z*Wt02k|Vu-e}ud!_@?1bbp8^=0c5v_C8$5I{l-v0-vUFCyTQy<@ zkABWyk`YD{lY+bfue2VC7Y1lS+9~UAm+(I${ew&q58=i)%Vo*+chQrO^I^yAmF!xf zc(TjR_uvbA;yh-Tscy0Cn7%muT&!-0me5{Ay@OKmP}D^d%jYiPI7RvWNal8TLAHr< zQFyu1Bkju82EHblW%zv~X{i0P^H&zmF3S2c-jjx`0cXP;x2c*^EH@#a=whQi_@u8UMd4k#a&?hL!DmDPJe_Dgk) z*ruu7{aaMj-6-c7^SBW-yd&iT@I@ez^xIFL1z(>?+&(L${tuzVD0{v>rxqaS5+M>mO9y#3!bD z$(rQT9b6VkM)PuASnWWrL8#Z{Cf^m@vK(D%X|uj6%ByY-UOu-hh;g_i*{&`gKW2;t zp)GzX@&si<|1i5K(|Qd$X?af^6bY$kfy+nD`oTYrW#Nr&C%-J2gf)9>(^Q@$m4!k< zQN3bm6X_Y%LX$yYC&|j6SvtTT_+U1CO+#PEa&U*H!EnN2(c}A3z7}rum(8Sjq|2qTW2fKk5Yvz7|xil zFBUcd=KSc1(*+m#dB}WU(J__t2U+5kZ;9)v%{Rcq#W_019A0-Ep)B5p>=1Pd+%~Gi zAO&j+-fGG}A#R?F^h{5cO>_jW!FR>u?#@lNJcSbr~XNy0EFb zo8bG)yTfT0)qTL*H~lmylf8v0CoH$N2Q-$U#?yQ|XR#U&}gZ$Bgwwxa=xws-<~9DUM-0 z3Hf-)mfA(Hv{>+yriG===%$r{8ZsG`QM3S8`GUe92-wiV5`P+MJ}x{YT92@&_ZRSV zigMHi-{z$4`RP>(5@v`)+7_hch1}}mt&ut-oX-o@L&Zg~*fV7Ep#h{&UXV+$NnlII zS>JE<0C_PLdr9nnxYux`+0&TUmH~;fy?^T-n1F*%rrsLQA**${NqoYRs4FS2pb7?D zRCDy+V~_&w4F>#PGxiXHV}#Z*3FVw6dDWv{(|o6(Elbeq*6gLegwIxV;!F|?QEl$hgPa3DS9B~x)HblY;E>QLBW@%s+le*_8blFM~G zlhkey=^9M54GjPZNEdSPqd^HG&L^ObSBY(#Nep>M*;^CuA&Y245Y6@mz>9_5f~Ba3 zK*=N=L(^x56w{Vm^pg~MnH-w|N}I(S9)6`2DJKSB02|Y()qhiC^4v(5byQFe>9e4B z()-gFzZj7(0W~SW_kC517SPL`zQKh`_b5jWk48+sb~x9u%u1S#8;KW0N7d*`b{Wh` zN@CB<>XPsr2__2`zxfaJvI7pqDkJ`kF0D$`&djo?^0 z$W}8Picy0rO$*{pyPzP%?H;^m+S64H>kT677LdqxLfE@+n1FHa6F1eKgRDSw4V!oo z&!LMDS5OxVw65@pCKe?Qf^~UTX=@BorHrXb0PRfMtT)zm;Vtim;;C&e+(B zmlQSLV+%HbN5*O8wZ;Is$}4GFKnp3D3b0J3oEV!P`-nX0^5&><2Yst!-)jw-VT}5r zFY1_`om|+~HH=2My27g?*11!!`TQ^OEx}aqS$@1^`{I;-Y;(j z>)`}%hS2hOLoTQr_9J)sGio^UDu?#Z`3`!?YPdxpnuS8p>M!SbnpXN(tRZ)%2;U)a z2+(aaQ4|qTt6T`iu-digo3@gBxuJEXxI-#M6mW7)cxdhEj=EKq^eU|wtJ>9HDLWO? zROU?9hB{)R6vs$_q}V1&v0qyT1d{}Nt-GUaX_z}Bmr!Zh&vCgblT}PzzD3#6EyAy< z)?+ptx`r1QCm`6Cmr>}LBd6ugjOW}4j$G1)F1P2Aai{qxODR9~;s+kW?-9u>bM5&!-c@mwzBL8bt=D;hX#$ zh)uKy>J$~RjV&5e`*;UK5qwEGE!a^8Sh6VlQA?je|4=Me;subQHuoLcFvt<8QEE+< zRJq#lP$uBulq(DWR6 zNR3xQ;3?`i0xEhmP3u#XK|cMV4V9V3V~m14K>b?sNBjT>B|v)Sam8)D^@!rSjvLW5ONC&IS{aigUIwBR0@nS0#x6#J8iQm zlD&JZ4oc1Jl{qy8!P=UWbZanhG*t68p|7ykHW6#W4Ly?zk3a0%YV@!)-;erz0q?X( zED^`*z71l-8H3R3@&4HL$~L@wQe2#LfI^}w8{{~I6vHazETHqqx~#-2XDj0^H%UPr zx;Ad5M4cO(HZvKIPWawt2Oc&guT*p+4lbIq-ZRhKGLIF=;Vxa{EoG-9QkAvCsx{q# zEs;S+K)@vs5P&W5_Q?cs=M$_mB(2sxG;14&i){aai7J$ZEt?kPIb{DjPh3QwS&J^~ zc~0E2NoLe+leb8{<(08TPQxpBi=tpJsSX^lsQ+em?2C2e7NXTcj{ST35$z=EwQc^g zlDZ6vg-j!bnO)z(n5lp=MowG2Th@9=GE$7R7w_zB)dMCjDBBmCklmc&=-$ZWvc zhQFpy$E`pQtGh=JK0-2UM){8(R7H{wczC-wtKR_!p^s$(SBJx*8NeLc=r=vRCR}}4 z)X!kD2z5FSbOU9*91Z}Ec0nPh-oda4%}Ri=gas|5J)gAvww}a+@ZH7Y$MUkAGcxk+ zbS#>DWptszJD+yZf;>$GE_d;;mUP6!5j{OhW3=JlJu4&qB}or7UFC;Ii!rDaNB78R z8*#Z=)v}?lDUhl8<;szp;SqO>k03zTQ_{saUJHzMdxgr=>pctt=EpRQK zyfB8-k^N?drz)wn+fW?zZ4dyVbhyEs+DOXL=%Ss66#GOy*u+hGo_m~29BhO4;a=gT zr@I{{lyMC?hU@ z`cfVitrXb1WzvrOZh9_9;E)|={;aS@o8k=jW5@h%-T#IEXpP90`7~y7isNEFTp0Pj zezQ~{oO|^d?M0W~oVOG269cExqg^Gk-ee5M4;n|Y6C#?S4I*03AaI!C5BqDv1w8a8 zGy}}npso{2Edg-)q`t0m4X?YXNvHOL1jHS2l14;5esT#;CkaW6cIqUD!)o&Cn6Rcg zTr#>zJsE9yP^V;7LHFd|ecslrSSU z*x7bSiJ#HuZZMLttJ3)h;8@5|763P{S6)nE`4G#$l^ML#B$af;-}g+01{7zH=9xoN zW|~4gVJ`u>nQF6|ol3LE?2d4){I~{#>GFNozt4<$Lu|GS2>ObR0*iLD=^Geg#8Qm0 z-dkED_^4EW2?k?~aur8>(ic-5Kok#2iOU6kGg8c#kV-PoVV{^a?3YTw=m$4-lXXNs z0&9TLxyvvCT_c$*-kHf7_V;{LnI`W|*DoJn;LYw};sd#M84we=*6lx^Ah5P0g36qn zT^V*z!&MBHU?8f0OjBm5B?kJ(^?#U)^P>|6IrLFVVQ>x82T7RSQDQ?nSr06Vn)eCn zE(5KqCF6}=ifml}B1M5(m8{vQn7hI7Ey54QQ2H#>HJRav9J|ZhLIxy}vJSn0<%d7; zg(dyY6_w4zH=dr-jPn!_X@qJFR?Eie#^WAlzuqEetVl3yi_UhsLBoOmK*;=oVkO=V z5q-1vhL>`L-n%PENp3bLxjx8AM8IF)!GFik5FUy(1*;}qdi{e^#C(3 z^kw3StvFU!_m;Uz6l1X(My;fa$Vlah52q+4yZ>qhU3Gdk*jkRu#ER^4Y4QOq>HJ9X zxii823|2X{(0+$<|I!=T>Q!I7!zPGe(EFuUtRv9{<}eQZmkX3U@ob+eD`y=5hjNVl zNV_DkWHC|lx=7Wupr;F3MF({4)(E(%4qs>&kUE7iggK<4)gS3*S){u1rYD58y^>tv zDw4DLHNFG2k>vswZ+>M{-z?`<`LMzYORX_+!dZ#a>!)oWt(xAgpyZukakl$-YvBO+ zfy5I;v4qF?lek-%pv8~FT-I;SuL?AS<&|MSyixMUEWqeO2}FQ7;KfiVE3ZgVEnrQR zcF6+{zlqYgiLV9{OaNJGM>JCPiX&W9bD>1u+Ma%p3ui1-*7^a(pgRbX#iA@4Z5IEi z%g{K2CqeHDtbwtJuv=qo@zj0C(rq=N$?U7CLR3iviz0E)|GTzT+G{esy^=-r+c&Mi z;^`Twumqly^5nL@ib+skgu%Ej2f+5r# zeBoU6H$tO&-f;2_i+xEN)Rw`K;dQ2FaD3(Rtde&}Y>6Y zaW&KQ)t+He*~R*`9rJ(Z4XR#khLu2wtMA<+yQRtxz@)BY#s*gcnyPCJ%YEkb^9Hny zgAEK<4)1{Gl|6%Dabd)Q9aM3cC$sv&TciYiR{}RdcmpYz3ltRT6mIUZ^ob{8tv_oS zeezNVuJmN;+hE`CGc*ZN$j414q&?&D4Gwv!>6x1RC3x&?ihyoh|WL z>y#&;pj z_dgyH!vrAt;Vo2yv9JZG9khXu4m6Tsgqn_orHm9u0CVr|12NWJ2iSPma(q3*22n;@ z*g@H+C@=oXGFfRIOpS|_ijsI#JT6(NCNdow<-zY7ax-)f@+E2ya%yfkKIjfGy2|+k zXLjWBb&)YEikh!qetd=+mfLU^b$NgdNATK7jXiU%J{X8U3ai50leIPR|C;V69$?Qy zzjxQK={Gex0@JA92{WU^)V%|;l)>R@%@wj*oZFLBeYj{%ogpx4ctYb8*&CLp)b#Dq zVpaM53>>E9s{7vVVdT_xT=#OxP}lYjlL|K1$8S)40Sy;treF;yNQM$OleNYU41~E$;|8* z=taaI`LUC6Q)Isj;e?J#V+pyskfW`?;63*&fT^!MKr%xhyLC zRd)S_U;tkMcjrQw2Gn7kWWZPoo`!EN&2Sw0m9@RgDhf8C>K%e%?GSGL#ohIRE))CM zWjg9uOyfP*eAvcXV_wdb>!*9h_|{OCW)D_X&AXmVV;9&d0T-1~`bG2wxT(qqw1U55 z!J08%zva2Sqy;PA@iTZ+eyZMBa$f4=dqBEvQDmbpR+mkhn7DS6>4%2CB}MFce?sj}Lks6H2aG8%cc6~qzZ=v3Q|f_n}-u{+w; z>`34i{eu9T(4wqtjihqo!?z;>90M;_BnF@a6gncQ7=TA1gJCra1UsRa!)j_ZQ??yR zBV<+T-X+Jo!}`X&`g zq#?ljO4@C)19%IFL=e|DkZA*xFb$A;z^L8Dw*|sma?&QGzM_$^I|#oMy9BnMnqTc~ z4>Yk(WlPVlmDJB}`f)hGG&#cCxM&*Pkj|Dh=t8CrZTCWiSNtIDV{klL23&XfjWxo#<(yFKxx*j=#_tIBh(GvUY+eBR7j z27)h?Q7P-a;$2>*(yH;ZcgP%fz|PWHzDxh_yMcPpdERdJWPI}2+;`R61(tl5;pXs1ZEULu-5J$6WV7T2N^Ip)&9eH2|3uFg zI?4IkaKmPX={0S(FM+6%u+g^q1K&BBm8Z7E#l1|BSBh1ul;6dot?fV-sKcEeJCAMo z-ReU$UBI;qMvq>`o%Ow5M3dj0s*T{7F#Q*gaP*uQsm3dJ4B~@bFYF2yaZR78oQ?<4 zRFF$-jH>KaT63Tf-)f0^Xm6n3`ua#d1&U#I+UkiDJD-iX3Cy_M=6pIL2j@I^Q@jySs$o?(Pl&g1fr}ckVpz{eJYCS=Ce0 zea@8ZI=go9!W-NwUnX%jjrY3D9mDf*7>UOh1^I8B&GcF8OcSlh^W>8b4*qXA$;jo+ zo0hXf_dl@n0vS~BnRW6KuJC$aJlF6s?ICHs-B47tAPM51*uMK1{@~^clpwH5NHKPB z&Pho*;XtmC1q+D1_k?2!{poU&e(|yDvVF&cUr`%n(-n(6q@|2~MFTSLL#QqW*+Bfc zxJ`n@qJp9Q>WeZ90}%;##qi2fo7!60w|r^o4L>J!G7pgF9rMA*0>|~;Zj5MgQ(niBe-roaUJj#2l_9) zZIFKDf6C8R$MD)Dtn?;E6ouy1sY3idAn8>VrnN6i37=yKEKF^hRzdQG23>n$xSajN zU|h(D5fdkpf(7+Tj9w@z0eR#EgZ|jwW4Wklg|2^SR1>w2$a;+nI9MGgq7BSE+2+aoh<;S&|Hbq6)}s@Pl2z;T6E!X z?O|6~zCaS2UQ=55Oo(J?1qTs<7npn^KlZ@y8J?QEOth9D6f!1wl26t^^Pda<&#AwP1M5HHNJbf`_atgjkdAn27Og=5L$mP60n#+|( z&>t#)n3Kr-e*&PMElf|8wuJ7=Ls;o?2>UmQ6i!M(U+hFcHi#RT?aS5cs)<5y;GUB} zgD(P}bQHp$kF=w^A?I5e!$)Rq_=RBU|hcZ41?N8Q%U zXJGLiycYPfs;(?GfRHqA5js}K={92ubMQOM(P+i_8ERLQA6omtM^ZT!wLC5(TMSjr z(+ML&2tarFEf8yrt2q9XBpC|~XB10{jr%i;jOU1aPc+Zz&n&vfuPLDnHb9UaP|A-c zJ7W_L3f8>FT9lHORQ7*I8Q(v{q&;0d8=wYIUWM$!&`xj%?$3U}NuqY2n{iQ&Q~|@F zczI;{kwLMF9>$0gz%07f4+*V1d4=to;J z)RM0)xxu0q4#qIHfyn|zmy5=Vkn(fzfr)ew$;E-d!%PS&HQtcKlU&iUT*&DQWNP{h z_)+*evVB*5Gd8$*r34I(z$EK$;Jv@t<9|GV#^e;tSW2TA(PK|A^dv@K6P(7;t^{o~ zAF#NJa{7D1J25;V=P)q{=JwDC5+@{`Yh9&AjUg!CqE+7d4@g9il7DLvsj37)MwYvZ zOUkvun#)fU!72Y5^oj~ke%Qu_Ot!7b_)9!|vI^1u05F)M)liTAqA)~DF~otuSKx=O zy6Xq2x`|p!{D7|k6{#`?5p9bsK<5lm_H8zPoLE2&{B61ac4jlg<&Q4z;%VK?zCerV zu#blR*lt@)O5ejPFp(cpUww}WKG0C5V&033hEhFbI;86y=C?o_g3R`)M-P*N`{;hzMp8@M8Atqd_ zoV73&aH-l$5x-@(dcSlj0pUO4QaO!b4$Lw$y#*p%Y5`^jXa(6(^FgPn=()7bA;N&< ztwK(Z-uDD1vAaNm==nq|=E6)ES`M#8sG7{~}5?4XeOY0*vSqB$ZKJ+EH!& z7DaSP1=wsLWXw4!HD=vLA|F|kNq0@Yq93|9n=%0a_0+4S&~6d19AdZr)rgRc?4D`t#WI*3G@={6}Z z#8}6KDznwIAT)|HX!cH#P+w zMg7A;$t4)h;)157>HP=yry`!aoLOYmX^7*((-nJWY;Q^fU`>jxbh3A$z&nkWp8dKM z=EidCM_r2kptEv6NP!YI7MsPolDQWnyABF1PU0bZtZV?3$6=fq%~A?TRT>MIqQqfT z$W|(%@Q3(D;~m+0nk*yWVD?k=5hkax>#zASs1(p)bPDj|7ZjHzEWs+Dad7S4Kqj!b;k0wjv&>7CHWuhj&fd z9Xu|VbC8M&IatG3M^qs1Ae5?&(uiz?_?G`gnA_herVny@Nf~v8c)qR_+7AnXZWBLi z|8p?>b^)h{+pl6$j{%el-7sd)gDhr>hfGF30$?TUp^YDGml<0sD*^~bR_FSP1|h~( zOh(XWaG_~S!*fLWWY1B+2`D?XY~8W~vMBjP=e7Mv3F= zVFJHAFCq8oWH=#OIkl=$QTIA;2x;LXz-1^z-x>-ippd~kP3Br^yM?=CYQuv}w*0{( zC{z|E0^WGve+|H_a8WM(37I@U=pDa=9E&M7OcU`>H;ydt_#T@v)143}g+x^7E$a5k zReB7ps+~>P*FpO3XPekL`+Tx|5~Qi!K)ym}Ua zYTFZiasLfeaX&0DjTe_}LB$C)M=DBxvF-ayZFGb`2P8y%ikhtU+w9V*aseTccSpSv zY!LggcA#0w8AyOXx&e&tLJv`%1!4AmAgIoTCc)D}?daP;9Eh-Wlk?J^+lE_4IKQw5 zy5!@D@F{~|E-jogD%M^$+zcvz$bX4j79Xb~Y>NKZ=e30B)2K-T))3F_#dMhzbkdP_6xrI}r1d0l7?q-K0sEFKBZ6@j~!)4#lfR@_$VSW8uF zjH6_RbS=i}9B>`gm@d!lE#AI_+aVr=%XQ~qUHmxcC_12)@5XH^1{E8hnQaVD>N-49 z+`4)#ZZqL1c;y4DE(KV&>Qb055W;58CpO+VEKK?IDA=-aSsTphOZ^a{NY%6+(K1}+ zTKhph_%gPqg^&&3lTb2vx^=D(Fi*@AT9!{IFxd*Ntf4d}{Ul{GtLqjV#mxxLXxcO$ zu}zZ%%+02^C6>>zDIUqrw}Rg}1AND6xJSedEgv|{)|4zQ&d6u6u!|;am#KTh?U55# z7$a*>l#yui%-#OM9vVcB^Q>fU;Z8FS)=!)?;}&r5gJg2`{Zp)0;(>Bb&+n8C4tDkC z6wU1V=xJMukrlezEqEuz6D$lF=Aq@mq#SJNom^i`)WgFn30UfF_D9P(&{MJKQl%Q= z6G+DnMobD_ct*=BzM9SxExA%(y7gLl(|NKuJ7i%0BW8_7_+dlzWlZiZsVQaoXXWrl zi}n<@xTBH|cSy8+iWM79%OQN?I40G?FZNsKYDi=L3l>|G)4MXmZh@ec~|{GL&`Zb2Y} zx_#b8^9VW+lhT}L7p`%gARihcVDJ-SGGDObw>H<=4QnQthY8uA zT~-a#b@5C;I{+uTDXRJ88_;M<%|*b$9v=~#v2(;zwD`i{FAV zh8OG__ir_qeGXX~qMBolV@O&Go8ldA*gYR_CCbFiRuE3dIB(XoH2M%Kx(1qEz5Cmc zG;?XR8QRJX=CCa){xjm99SNQmRHcm|oW>xBWDi3a8d-H*H9HRSUp+s`i8{-2|2hbcy(IkyL6H+Y`vn_nUZl!#N(szhM@KT%@2YdcXb&*LIH9QC zrlb?SN>6Jo74la3$aYLl&}`7NitCk?u+CCzPrRUrdLla@J@eNAcp~zIxQujp z<m%?;swoUUSE?jL!<~rlCg(|V( zCBlZ+*YKe8SG!pEP){n@x-X$v%_q6=3==?Ts;=?V8F!4VAhPCEu|fCY8;FjsX)Akg z6kmjzdqh(~mFVyCY!`dUHRrs&kf;w0%lYe;QFEg}#7!mJ33*xb>e_hCMsr(sV{GI0 z$$&%s2_vwhwp)+*zJQHtSevc~3K+0yC9UP^IS-;6!msFf1^P~Mt^g}C^vu&W0O?s> z)87(Q;KF`eDECvc2%B=v1Vk<9Lg`eA#V_beiId%9v9C7OB#scjaA-dM*)nmf>9Rq; zY|>&H@^dq5BC1LaGwGO4yRnr@pu?UlJkJ6-0fpc9B1x zVj;&nhua&2EQ(T&X4Yi;f>hf$Jv{?WEh3Am&V?h{IWwyZ5nHKb%_!AVVqEkN_ljQbyg0f-=tl1i(bm}a3@ znPDDVhNe8DLmfTW1u0hVMGhzKfYI`;Gx9ly>-5Rq1}IasNll1c0z98P!sw!jB@}YJ znYJ05Yko;0ZXHj*VPFe$3n)wTH-h4-Ymj}W$GEgD3u`@OdY;Tr9j7?_s4#`+Mw(1#-1{veQKG87u z*(!SMXTKdZsIGY(~q|d`DC1d`HSH!6u_0#NwRn{C(^^NqIw71QGT- zoZF16MR9UDKhF!BdR9BVSmSxBjjA0o>G%U@uZ@Vk71hYMOYks>GN#)2vX=gZ8OeW5 z@Rfwm@-C-(F#6|A#@iq#;k}XD_q^6&oaZ6Vm%o-W3X4F~jE-c=Oblp0b~@K@Z-GI% zorBtWsQAZttlg+dw+wTnrTkU3T_qn2UFq-)LtEuaEvkZI4f6*aoROQpUxu5)Vz zNcBfCazg!xr}2J!HMy>*c(K$EX-J@$(Sk;F<#BRJrq_t-)OmF+mG*tS*JT)98cxPS zCWcAdeMVmDGg8#>DgWcBXURpW0Q<5;r7ZEF|J~O;LnA{#lBsYFUKm1aEy>>ToTbLF zfp`HDhJ=_n7Kd>OA4ElG^6m%Qp0C$`#$g!?sdBep`O5S{;+w{lw_-IfJGx56J?gVo zh?hw-3~y&pNy@78hsv*$`5WDU@Km`8^`XUCc;(^bsExmXQ6Hms03rSmsW?|7S%ou< z&J=X0OgEXliQF6{?vhYq^gdv)fmehzK-4!Q;s@+s3F=mi^8Ri~>XvCkvTqyT>lQN@ z7$?ut7xEBDdH8%{56$hF*Gs)O4NPWhzQzeyDFtv2}C`ywwSD6c}~GdEXD0_wUyWfLvJ*mpABmo=ieJvio2>D?Up! zh2vVv6nLa#i{i8a5 z+9`lc?Xsi?I-CElbbn>UMFci}U86Ei)_pisrXNpG^YgijWxp|_O36d zA9;^Mc3q}CH7bI^(v8kxJqeOg8^33f1Sg(dK%iC7vZk+7!E zQG@&z1B46AN8%*?#Ng@DX1ZYW7hTj(edQU|9CsWfY{2NzZm&$gDt=mbO6Q(MLR9lV zZVklp0l^I`FWzK`y-}E`HI5Jdi~I&$D`%*;R!R#MQ7DPpq_4N`AkSLxRp8EgPmI5? zt>;6C;qED%J@nf)sc;obM$19M2opRSC_B7HNQj+$zOLBj(vk0erptu=UA~n)vp(J; zCLwj?YqWH(oM4#;k{A=c$!n0_MZc2-hv;()=*+^hu6FFT}lf6t?mwzLS2p zg<7;!&a(`B?#j{y=1hKVXSn>d)7A%no33OWVuZr*1s8nGxE2lo(vu2+0jO?HjI0kQ zNfQi#HnUbnBm%Y;KStwXTBXSxJgq-n^sil)edTxBiPZ`p{9AV4N=cqE>i65NW(PCp z)Dk$WF?50&A?264M6B@*~kII_x5DW!Usc7%uH~(JCr^9$*rM$O4klHv{!bse&m~QEo$Y zZKMY*pZ+Ls5pCS`TGWdlFjVieSKwWeG`&VeA@?6l&HB?y<)doP*Q3;-6s$Q4yZ&skLzp(o%xDEpU{WE-nBeNd@WJBN>- zW797!ODw`Q346d}i+ar3{W^ei;oEVxvF@O)OcNzu{z*VgCMM;21A8>()sb7!S=D2O z;h~aVB8ev~b|j8UH08WefnG0N)^QhY9L|N8JJ`Ihk( zn|?rvuS#cHWt=R`VIkQO=N%2zWXHGPvJ)iv$Q{8i#9thpJ`O=uxc zlia`cTj;*trcSrYdw%Ji*UL@yqp-IDh!~QGo-To?k%s7+yZ{ z@38n`D}!)U_%lfMF)@M&tQ31`_e5>Sf0nscQ~8Q&D|bjmv&sR=8zFRFzp3@+z(g+3 zf>|8IL+h!?0#K02{v2Vm#7?+Hk?rwPzaf+B#H^!2&F*5wecdEzm`hQ3q7IpB^0fi&KRyfth z1ZxYIz8p6s>rIOdC(d-W^s}2)YWOr)KT86_cW@@vE|Gq9`CNW-bvUBK##Q`QOxnxV zcf(Z)#KLF)^6&OuU&4(kPGtdS8d-ZLP#xBs(jAgE1#n2@<>Dm}u|Bw51CW&n%(ZrC zCE7(#Xl);DcDW>< zvtN+?6dL(G%>K<5F(%MP9acTWE2-z>oWn@kzQZYJzKMy>WZ9R3cWdpqKhLp1Pwji% zvpdIzC|^XvNZNI!*iU^?tV{^|1tsT4fEv-5CtWACirkiX@Hj$R2A{oKNlN4!2(pFYp@4mD<`O& z$O?7z|K4h$H~yr;+8XJsuGLzt(V3YOi{=V|rKq$gYtTe9OXIctU{(sW+v3_YeX)MQ zLw{WKdbI2l^lo!4P>VO>r0`h0#=55o|3tVI%hNw1zcRS%~C)M}}!jCmb z2FSe*7}{&A53#j5i-W3pVULdPar)~bQ^A3@(pZ&;oWbNdHZeB%Bm*W7HeHaB?dmlJ z>gf718jI)Khfg}LJ~$)~E${&Zv?LFBg-dX>Y^KlYbXYMm_kn_;%#XTbP6d`c5Wo6u zN-kz##4amuh#Rwi2!dfC7WU9hMxyLr*~*5&SlROB=Q(_#SZkccqvb$}Gpxd6Vr?IO`0Fc2%7W3DeZm#Mj2Iuoo zX8`)Cmjl`dNe7b#f26~US051%4h_?2f zuIPt%Kd&T%B*r&3Sr%`UuoOLmYGZh{cSNG$;L<~KRJ|Spq|fjntBdbM{;xaZ#=g+ zS8)}1vyR)rQFH|yQDYtQ48?d4HEs$c2PiaRGIpYqs!f*oO;Y+tRAxD>Jxu8asFR4&L;ngH%lebf#v2& z35sZSx9%UQ?nyn*uVR^A}d#>X32MuW*R?xIPi-@e^ zKX$%@H@F*{JN%LaKk5l&WzGc)RuWNR{tF#K{{*Sik!_m!CQp3f0gQ_kPQESA4D)Iyl6 z$5?|DkEHKQ$t|Jh{mMCRL5-3}oY5G+BB4CA%Xb}6E;iv+9T z4kNb^^2-@blj0@!cZ6=PpbhqjW##jt4 z&@<(KTpwR=be-}0W14kS&8M%+v~Wdth%;7mJ`ON-x*-HDjk6Js zhX2KS@X{Sk5$EC>IPN+I{9Lc5zTm)Muxx^Etv#)u=q+i7HGiJTw?ccR{@cJoYcr0{ z`59_oR+WpsI){&?X7)pJE$qC!Cuo;=`Q0#Z`a*dn(H~dUNFadF;5bm@{hu`* z@gz(k`iMYFjT;0aGaiKJ;HR>$tv5bSD;L0x&`zB&TSR4b$oyj>ky+DadQ%1~k1hXp z4@o0OhrvGbn~Blk%lrz#;7d`lnq)Mf&LD*1-QtT!JW4t8txuc$l>MoLMbmbHH`0`k0n53keLpHM|vZfWDc;b1wbpbFTqOz`v zi$$b;l4}dHeag5Nh`IQ;jV&>kp3?ZPmhk;Iu42{#9&VnjP!Rv`p znWXf`E)6EZC8JhGWh!4#xFVf5lCqpdcc0KxU#r@@wCtBygUwS2v~h$yUdpS8wGYti zhq-HMeJ`zA(hnD`VCiJ+mMwbQ!tf$0Y(9`QuV#C9eZg_SXj@@J|F~;gtzauS9F3e` z0gR9!#4^c3xYXlCFj3(*j9!x!S2<7ZKI(5`U&HF4gJ!7m9j)5+ay(J)G@;5C;XkXA zwd<;)$RwieO>n3X1);dzDWTm&`Nez?M{Qjj;m`P6gag@V`TGgi_h-sqGy@Z1NX6v) zAZ2xDK#BeEfAk3_#$x7~QJw|U4|BDGodedm_i=SHk3KOQn*ugnrFjbBoyw=)D3=!F zZ_Gop364-H!>{~Ra4L7GQDbOh?(!ppdSq`V^UH3S*!ji9ZK+{lM z#f<2O(=z!cRPZo^E4e1g=>>Lt@X)j;iw4p^|GFWxlV>D{-$|#0--+W`l?(iVbtj(* z36dD2urczf5oNu>D2_fOq*dDjDnj(}7%S4PeTOg?uANeos%?R#FT42B@T+ybmZ2r~ zFDnn6?IxRM?WuLRdjhUEe)!ncvdL+dUGWQZ%Ur#G8(fmzoh>obx;*0m*7rAI6ghf6 z6XT3$2cri7)0*!nRjXG%idyaB)wz}Qx2mu#HM^ZunPw-~F#^>_;@L!{c1VD>z%<`)Pn7cWV z%-`v**k4x8*LT_<;yNd7GFKva$H0NKU(hAJx4agEjucies;`@`w{H1k2g!UUdi zftu-q*o0YperBvzt5RdBsaUL@{d|V}))2xVowJ>2Q&fWe&(zA+R#rzAAcK*rPcZ_m zjqNbzhje%p9RSnCJA*+n05L~p(g;cGYz-lE3f;;WwF`Uh~N*Olb4z82b0t~1!P?D3!Y%N4Y=p| zb09&)F}|lXo4R7F?(#HvuAkRW+M8Gaj->TNTFeGhG2-lvWI{0Ss80nX1~La83uHDy zxn#5%VA9O5?~rrY*3wJ`?SH;ya(FHi+klc2r*&p0P;s;Jl2)Zp{198RJbEYdPC^@W-$e|lbhK~jly{% zshuoX7|Fee+11n|FX;<4*>+P~GhM(|wQ1TEd*uw73x+3il=yykdBI2mavIrC<+M!? z@;&0cA%Jp=U?2m(i19KFqJM{@3U*d~0VMxMh##ogA4C7m=5@Fo7q1paa=!m?KhNC) zpBqiCz(U!QZZk@i3ZIGF(`9o4^Ff<_Wr)+Eqc1eWVf_!Hf62gKNU&Y#&I@fhRZrmg zj5%*rDDW}~WwHy#REYKC3z+tBD`rKUgPmG!HEp@l@+Sh%o%K*^h2t(4702}%25XNS zk0OUD)yQes&dJ~yVzu1~;b1WAKju#NlP@k?DP@}w&*tNfQjnYwo&JFD3^Qywu#tl} zB`tqyhS?Xsw23zh#qWW5OGMo$aQ~4biW@e3GP@`Q5`#c*{U36CfN$pBYHv0oUI5^Q zsu?sMhmS@2KwL}(md>)$c|eYDloU&w3GG2s5EAYVn?Gj}O&jDLBEEa(_4K=F$!Cz=7f#&3{a7>f!Y5;nQhGH5mKonmfANj-~&;IJ+j?Jv23?6kcMGj#bOgA9bRT z#$NYic@>gD_WQIngOc%hNmUm@j9#kkA6P;u^qN;fyxkk7WQhsO_f^*LN(5jYWT$5p zdjLSk*jbjCb}=|w0RSW{8HJvFg|TLvl>?BK&6(21xf8med;+&kD0?r zKTE}1lmN%X#lFz}#VO<^&^67P+vmG;cQ&=^vno{5Q9xd*)iwx1Y|KlMoGjJV;{X}E z6@aoj>Q1SkXxl|BwF2NJEFDESVks- zE%$@;FANT~7e^-lV&Q1l6T1;JZ>8q!v0F$mXM~Nlrs^(= z^i%ls^q%3;K41zQXl0B_TGNHNaKd!r6>gQggcP*(>keO%r|J_S8QleCsqviu5l$2_ z9fl?F%KzB>(5m-*(HU5GAUn=lQWVaf^5olwT=3Z2=QHm$Jf^lVUAN};j zM7OA|jSJt!aOsbO*}kOhtwg#e-MP_AgQL-9GB;0De16sd2^{~L1qDSLAMPYxJ>1ax zqTPpO{!in@On;~qc@u{+ZgM+AXq?h~012KCoKYuqKgv21>w|E>=<+|vif^|FeT#^4 zu-RW((UAX|Hex}KzE0I2Les9XRfe~c4(L__Pxvpp-$LR`L*r?#L_Ch!xhUyGr+eAM zqxS;KzK1P75DsUkPHw={oc5Ybmie~ck^rGew;=HzahjSatcmsl;&zsb1(qfl=Y(7 zOvr?mL_|gWQ$~^Qd|O~7KZU>e&YWFEFZ}JRgBc2$!UrKOKlQT}i>XIEWn2dZT{g1b7Hq3|!4oWf(yslCAVhjj^LNJ8h_4 z9P#hGq+<}l?H9)Te2caFW5OhG%>2F!I7rFmi({ZrxO&WP%%UlRhjq}{hQ8_mF!^;L z4*1!=9%1pLr4BxRpDoY@(+|S>C!Dgw&TYM|G?ELXgQgSWgTJq^+@eXS9ZXF>lcx;^ z+BQzSUh9x+S1*JFHZ6Xi6l1se6UqpLgN!nA%Xb-JTu_+;a!aVh)$nzbm2_b*ac)mg zBX}my#O$C{hhyEkMQCcU5U*|^*0uFe)O`81!pRGB1>0CIo}#19jH3L6!r?>`7&n^>RFC{qO)tLJ4@dm0q&aO$n-(c~~Q1%iIS}hpmYQLAszDzc(*^R(jA~sT}Zh@d# zUH)@3K`2w8{nEMVmrkV|m11pgxM$)NJ@lMxx;(fhv%eM-o^J!#)V1OgQ z&S6KgA#SW!2-VKN@g}w5Sp9BD3f4j4$;sIwV^FA=r%d7GFrL^jPj07&-)*iJt4LTic-=1=-heU(KV86iLjUH z0J1S$o^?+zIOXa(WUnz6kvS%Sf!!^orY&IXH#)P7*P9DKmmfTNnZ7bcx!`a_tgfrN zRxJ48svxuc9i!bhy%&Alq`HkzrwGZfS=*7&&j)U(LyUZ=4zi&gve+|3#uy;Kl(Aog z^{R+2r3#??YU(}NXCNla#QE3j39a~UK4AazW9D1sOK{%ua{S)fDxi$r3IJtMGJ4300OIDH~TR!-eIgs5A$1WXwTwV>8VTU zzV*Q#0C|%}iI}9a{YQyOgt;YW>i@FpZ)dLo(u63kS>{RY5T#kWNGc7NIIO`?;jMa} z|71222A5!v=kwaerW;HL`+w=KL9*0uEIT*m-h#_1W0&Ac;;2vdGiBfSNS%{rAjbbp z=h0D1m^>BbPguHPha}b@W5xWBaKY}snfJqCVZK87^Ef%ngk|auW?bGK?6_XpzI+!W z`vwvFwaC$QBjXinJ81o#e)Y-UWx7$7E$UzIJSL6b;xSzX`AuGEOfS`1Ig>CEZms@n zWNp}AtX6s1k!FQKl$Q6TZP*XmW7S}7bvqN$`bV-p&^*OSKAKW{+>~DsxGCW93gvtKnX^=~r(W!|7;|@1kr7U3At=UHY0e#$RDv7p}8RYsB-> zLjToqs8%aOCmnOms!r?=PNzs)(?1aWIBLT7OmMu>d2!U~CLDsnFH%XiIunQ~*KR?? zQDu3}IM4z|L2O5M+!}|soVfS*Ws?(SJOiY#_DGp>Q{*RWlj?`%LT|*o*`VrYE1aQv zoTCBMe~;-qgHIDs8jI!sSvNOJroNsTjtUSijC6RbGJe7cF5JiK`oBW~=I7&?4L@nc zvPl9Aw!cw(W>ApasN@4n#$AOJ9Gj|xo;l^^jJbbh3gd4;%q=x7H2!B?=@dnMRpY5W zTiU${tUA9~L}=Rikc|J`8s(ulN|zs_F3mGcSa5oNY9q@3va3lGj!|4w@&7FpxU=VC zUTG}v4MGOapMhT5b7lTpBt+=1DCuctKRQ&-vTnW9hPyNtcNxdtur$5e{O1(Mhi|*i znLj6<6~6=IWg-jGGi$zH2?EIc3}`Mczz>4T+L9349rVDl=ED6&z6SZ^%!axH{AUnY zWx|kYP9i;>VUe(BXKN$Fet@=%VpCWCmj)RuzWU!U2Cy7l_=s;@OKo!^raWHoKFG37 z$M?soZkHg-GmigP29|ee{5dcz@hx>=*yZs%#X0;+wx&fB%vl;_zrcTm=yMw!@-6HV z86?u&Px@oYt*EdP*`7>5@vn*B&%0+Kw4N{1;@#ZR+ujzT7`wmOTjVH^w+%w3mQgLG zPyWV`3X>&~QK4q(YxX5Jk|MdE*CgpRcSl;3(-PJ#$o%&HwKrCLn_Y^?jGc<*fFJ?u z7iHodqd99#IK;VhvHz+p46i&Y&`{umRxF)3AWKJy#P=sOO4PwEclyHaZ)Mxj7oA_` z4xHjfN@B70cEPzlAeLWH&h zX73WL`*(1|P7$1Rm|-iv{w6j5F~3)Xe1802T@!aVxsKTc9c9X6lwqbgD3yMMVLXQ@$Cw9@#O(z^)l{H8D3Qwx2)V=91#1v#Gk;u)X|u= zG;U2mGH^1sXR6Y*RL;R7<@MXA7>JakwC-c;a;oNiioQg`3H~gA?>S?yPsu@6kg(I| zO5yUiAR*CJotwkb20^FK(sflI|Kt7x^1svV9Ky(%L3X^i(@8b!NLj{>bIS#K7|KN%{Y6Pw3P$L@M=a<0*lMj zNe4Wlmx9JMV`VZHMli|1z2#j#YR^qRt?xVt%3*-_wXXTRt%r+Sse|7=>~To2BYSjr z`}w$+wL_R7+qk{DX}!dkn>VHiE`a*R9giy6QY^yv$*Ef<7%A6KsClO?{Fc}1wg&Lc za+CP2ph1>k_x+TB<}B&R?J^F|@@W$Ha##h-aEiJ`8Y{PCzY?-}NNxVEp+Yj#jxD=p+2jAY z;3a#0Ik`5{cDId&+vq29q19)}aV1Fm@G&_<;^$+3y*ckPW47t%d(C8jQoidZs05rU zL10_8lBQVo`anCoMXYf%Z0oPR5tD0?9dRe(dP;naoAiLiO0&Cd_(Ze3WinUePQm+? zxJ=;c6BRl##$?KLvCGE!{P)}KcRQS3$1C_e#q7hUwWPlT2WC6nbj~D1X|9h^O7J5G zW>0o}9^fN}Ui)}TZeF}UPPPRle5H0j|NP-+6KwLi3+K1I{_b?Q*J0>8AJ-$~IYTUj zJt55TWEfdO8no%c5WvPO*W0d?O;a&rD!M?kmF z#BqxUcw-Bkd4yfq%kPZKe&v04K9h4lLPlR2?&|^J<=yD^zOaQZZVUX)vfMo!_SE*n*dhNtD%mxVIiNc z>!zPP6;4aZt6H!BwF&WhdYgvjb<8KE2Hc9$e|6g1F@u{v;WHMfjwIc}o{t9OEpWnK z=66jQS2(*T!4F$?cS@(74Y<4q27i{|wz^7Rv>C5ct*P_a8_IA$R{`tKV~P_lMHnD zl0~=PkB+Pwg9YpAZuYB0 zO$#wZR7vdZ;dX9+*!{5nH)amPmzGs&? zyq2gG3oNEY8t5qdo8H2^IJjRblcz34F9%BDaC}$(R|O()A%;uwNlO%K7Q%S3wfHkh zPc=TMZeQO8WFYRg9j7|&qwm&|7Aito(r#H(bKSMPxp}8M--oo|uNni}Q$QXa%uVlk zU>~t9{%ia9yX#>)=>mBBH(1;-YnvuyeleYm-*e4Z4vl%LB^MCOan*?FLydDz_3$#OM34gR8A@AL8u~h>HaF)|tLbIuTW`ym zD{rseJknZ(eZ4#edF5(|*eB!W*1Ji`_vF{kf}%)#BT0D#JrB^~4Hwy69fe#I6MIWT zv=D#y^`K9@vB{|hi+=EyMswzMRqHOXP15{TdgNg*86t_fr3vw{M16nVB=8O3i)(l^ z;P2fEa3g@Y?*;2Hxw+i~w z%5dv@B)HI3B-r`JE#p*5Oy*doFwc22R3K$Q>BckB5u%mxyH8KFi_f#P>u{=0PHnt_ zJCjFC&0`Z>x3h%25d~&{#USXW(Ry7(novnDg#wj-$ziXWDEO-5Cbe!t2c6eRG{F`OUv*Z$x zbfFutZW%Jrxkl>idhUn3CAF(5=)y1PNqW+98n$NL`zqbn5#yeRy7|EHaWQtf(6=_> zRnB0k5Jw8Aw%GjGtqAe>$|0P@=Pq>lUDN;9(VzX+d5!0cOb-HDVd4&J(f9wW>PA~d zv0Yo3kmzvZV>`?AiqKy8c5ivCeV*<$!M`GWBZqq>4oe^Ku{gO_z1t(G)AiNUhcE8^ zNyhg70m?u%zw&2;e&{;ShG{q7SUZJTo(9NU~f8C=c0*SGzN zSg?iq+Y>))2>;gDofh)Xfr6=JoSiYM+iI{9B1DC;;Vyq&N+A_b9IV9=ahm+dah0j=p0e-NY8sm z5j-BeJ<;K}C#zQnZ!hPmwwxUc@oaFMdHaj64&FJt;)%@l*$|zxC!XlJIsl_{?!*%{ zS7X05@8*z>-=3h}9J{%ehl+A~&d0OCVczWzzB%^(D3Y_G4|}dG`5E2GhW~KM9OtF9 zG#BV|>uP`3Mwi*7RC6$Nh3^eb=)c}M`~0w6@_1@+h7af6UC7-pJ{`PH^6i-$yPJ3_ zQl5+apHOd<$-6__H9z1}dKK}|44;YHhB>>EsKm|izv8h`COq~-ne68H=HP!h@vJ9i zZ6w~V!i$U9Udz*Iw+jB!*lvk>-VFa@@H}z%lE7V0;_d~pROy=hm~463@=Zl?y|LdA z3QN2@c!f{x9tVHhVRgrTIPtDjcFOr)@M*H5`x1%yT$0x8H~3a|)%w}j5}?+Hw|UE5 zX)hlW^Xu}n`^2?8`pnQKxcJU)?a@g5rQhv1!Y2Rq=$3K> z;9{nao2OO%_*;ynlaHBN!&gk!VEwF1ZbYkA>pduHaRxW7x&*CRmTPdHt-At~qL=qg zMMhl|U|p{=TCV|gp|owwFc`mwOYRPwq4DM9ssWsn(N6K7g{i*q6}sdquE97>7h&=k zzJdAVt;t=3*7-g3VX`|IWA4S!z;&HohW2BU54i^2{>vQ{Y%8Fg>a1%6)B2@Yv4d`P z?LwxYGOg{BKZdJu;R?*Bz^#4slC^yUJ$SS( zBnN*AIX+x~6mvAB;Fc><+lIjlFqI5z139#6xUGdo6wwiKLU0#Sj&cD~igN){hNL0o zQV2Oe(~uHD4JYrHW-&Nn)sXUC)TD19<F+^~9v2`5p8=G~^De|)SVEr?=Qpry zV&GCDd_3$+)MlfI{Js2>yDuiNwHRDirS`!v!<~83z7ln{r6em`H1ljFT zQg;h&J2L1lyQn0R$ZE!U&PuwfSxI&^D_QY9R?_S{tS0m4tds|ul`=%LQm-g6*K+3^ z)?!Jmd9Ab>SPC_zhVMbq_W@jXL9sHlpdO=oSDBwMvD0J5HeSnYo0i#oGgP?as)WtvYD76qkZxOf0gn`L!>nMOB8l_(g?Dt@%9zkDeqLFm*7n)bTR`-J5}g5|3OGw zVgo2nn{QcaNM!{&Z7x+bq)O*S$aU6TNLAhiNR^|8rS1fI$TpjXw9Phv79Iqk%{L8c zpAEF;9%S_#LE2LL267DSL*7yYi#dgE_jn5!rtFOkAe%aFgR$d4C>sy}WvikCJ6m`4 z({}3)cnrCHW6~Qp=eD0=t}w~U2>dyKe$5Y^HE?^;IYZ;id;Kxk&t&Y58N1wO&YN`% zCtHpf8p4nt$!p=Vm<;n<9R;~^9?$@V$%P8-Y{CZZQqD?*A8{XVVmyR2$Hy=_J8P-+ z+3L&ti?TAvcnNb0Kf5-Its$w!1xTuP59Twwmy0l3>vqu3>FV@legkdNlSZ0nP!br}Y|itaG=ZF_XClr^ziB;FOZHWp#(JNGU-J8gdM0XRTh% zDJ3{2t_QHHVuEoteg_?|(Eyex_%19alb~T`7{JZo25bs}6N1fH6{}X=z~U70QGvek zNSc+%hOGKH&5DOSXT`mqv*Ow{o0cVLmMkXP*j!xFZnqOnR^;UsC`&Ma(`?%X>_MOG zU|qFNB<2^VwKOrCGT|MZy)%uH^Ut7(eFN!w2GGY=!lx|wB{qi4YxWq5A7I_kkd){G zBo)+<^!EZJi#UaBPa2Zp4WL{*o9#D{SK|f~HQ?j`{rnk}*l`OwNTF^(36Y!wVT3(~ z7@!A`61Z=mWCC0>AmsEBvkT5XHKaThGnU7Y^63k(n45ytFjcx$J%GvptE*^W@iQuc ztZquBn(skQX{#@O#31XgejMunU|dB2<6`HKNul&L;_~bU9Akx$h!kw4_B;CIN$#igYs0-QhG$b3iDUp}bLJT0z7#;&)&eM-Y5-+Vj3lugiTsJCHp z63TCNVRbxLU~y&u|E(M+Is0Grk1+!9un2ip8q!5+NP@yh^$nzDx(8Y1G&DXK6^_@B zi}T!|u!JTlSU>qmsBf4BGrPp%^qFVh;?bim`}& z&QhCulno?BK*(~x3rROMB-OqE$y_ufo5agxlh%;@k%r|)i<0{Qmb*C(EH{jB)$8ph zRHSTUkh}*uM4v)-CdUx+17w^?AmrqP1&3J>LTjSkLC)5A*)Z9=2RVWK3T_IAi7GHo zh^s-UYNuL`s*9?PsS2uE;|NMs_6?+@?k=R}LSNPGtM(@0iOz zZ4E`VPn&+Y+0YhRl+RtIp?Gf~_mJB1TWwERgfH;k2NJjWM=+v>vMZ|9Zg)=@&); zJITBccierxS~V*%k`TnfDrNyC5DlyZne; z>58c`2`B{>P>S>;lquo?;G+Jl&QIdf@&eYjMBioM(lq|Zea6O zGD~%MfV|ySlC^2D&1YDy92MpogByo!WqGyG@O&KQeCAA>G3*q{o1L7LV<0 zLA$ub!sM^$r?W5hKkK@`vfzA8``Il5`B+A;=EB+RDf9dCQ47b}es%4bmjPSTfli^e z#V>1Z=asB1#!Ed)G1I2yihkbf0r?JwWtqot_xoH$eQb`xVi+b@Y@D|3_ykI78|V-B z0;SpjN?m%5SnGPozla8rt`dO z5ohrpat{#K466%O1JOg7#P`@QZ}of)C{r^dUQ9q4i@3H)$A{@r1LQFWlc8Y5vFM@1 zYY!#d`L$yTy++JmK*@f-#!$|{7Vknel(E@$^sFJlC05kAjv4t}G2u3CAHmX>Lk12Y zC7Z@v&t!K8ilIg-n;NO=%9an*d_Zu>dz%N~2GY>l-Gg}I)MV6KrB z=DMq}RA_}9C@ox$pLL#90$e1Okg)PpcTP*`dQ8hQnaUohW%Pa`?rxZ=qXaN z9QiDEofiX0DWEYgD*MREqLGqCBPGjIq|!Wqlz?3NkT3?O~mwngj`WNCMBwY|4Avus#!#Sw+R1*0`l6j;F~SovAR}Y zMj2B;2}lF;`e9ASrLW5c-9GUp%*&58opFBK@_NRwEq(W!Ft3IzJYtgT5na=>F3Ox$ z!nVR3;A?tL(6)XEb9z0-Tm~x4opv8fy;;)}l3Z1pDm;7T%FeQ;tklE`b4jf*SLDxP zo+L&v&oO;0Q&fd{+N&_nn(7jl>AAw(96ZL{aNI(PbSqnE zn5=Ef+joXZah`fMB+{^l$|4M|wL15Ndudk4=ar>c3}!t=qastvGkUk}|xfXNH5g?hq4 zk*o5`@ZyWfAk%Ykb&LQ?h%sV>0!n~CLe80vNfMT~gUMbDOGUZRSmwkWU$SwdF~5WS zk(2~i6XnA}iPyHRyF7`N@?0aO-<0l=cQ27LO(SJmY-*q$y@^!FyU3Hn0OkoNu2hb4 z&k@gT6`s#;tuarG3d)r= zfeN`V#R1|D_9;@UY@kH!9n5_?n5+dLhsq;GYotY@Xqn29;a}*d9aVjkHf8 z?%46bTF4uI9DuN0h{pSm9KDE~CHQw zN_LU&7HA@0H`vl-OHWmv*SkgoHh@&9;Wh^gX-3$7{61}E?x0PH0i>;lk0NbK3?OYv z3?OYv80a{Ec&9=m?Nn%_oeGV#Q=yTz8a{};DKUWl`pXTIttRpd59vRJfjT$?PDMVR@AXa=rf` z%CyAS-9VYt49ughX3w&E!;cBODAROVBwAQzeqMJP#%)7c-c~O%FM09Zw5%+(-!r+k zuT4ga_X0317%{2O;BUSQ^Eq^^VXUM1w;5MnHIpv@H?R zxfb>Am`2)|h(Dc{{RMKaYoru}PhKsgY+KV=8Fh{QC{i&ua9g)}f*3%WbTrcJrZMkU zR7jH}B2S}hI_RUCZ?)0xClbx*h};l7Me0!okXjs#)C>(E^-_r3pW!9qMi7yEQ;pQc z;-KF_YM0+c4EWNkgUNzGBkfi|V##g=B&%#!K(5O!0vC#J5tlSs3g1C)!Yrh9Jk(R% z2H;|hC~GZ1S(O1&chlOW$UnU7Q80^5OFGkMzu>X?>Satmj_|QwF#f;eg27GI<%+m3 zYjwG%bmYf8e-F!8M|AW|6BBbJPU#SndB0#dw(8!BDV?k0str0s&P@D6?_C_=^IY9_Q5jvyCc2;fC<_f9 zvH{FR{~?xLiV@6H&Isnc2lY1J#ykt+W$ze|BX3;bh$C`n@eJHXh|FimDR2vOr+{gN zDEU{q50$8;Pf^Ja$VG~KA1qQguykJUqZGc};PvTj4VxCyeZ9J^L@WJg-*WS+EqA%v zay$Gv%RP6`N*CX^ye`m|*B{#QLPcHEvd-yaSth9wE~_jHB@zwH%eh-9A#dP*nHa?+ ziC!6IAT4}Vs)|WYzcwiyWyP(^5uj8vK&g9xTp&9p6_*i9dwG#A9c_5j=0jL(bC(O| z(z%9v-{zkJ5Wv%YIaQ0}*Gw+8oMLI@0iXft+vfcfjNYaT1OrULVd^ z1LcZy78@wz^#~;d45Z3{0mO)**26{05}QPM4<$(qq}Pr)W*}W-OwqTIMi@(hffP!J zJQqAgnsS~Z&42?)^QT6dXz_x)i9E^U!1Yjqp|lNclklQ01VZzLNKD@%OdIZw43wp8DjG}40S8S={NDbl)b0BNl_ zfO+`|*F%=B8fnA9z#!XQv|XW$_B9|{K86shvej}2-F5p0kvDoEQ@Y5BCc9Jya-QOL z7$-R*?=67ICPcl%W?^Ih4mRa1hp3>(Qfrh)M#H4oM0u)pAL*IcT`Nx-7KG<<%Zz#p zotxZC%yX}W<+0;3AuBA?EIhSbCeMF>dF~y-JRy%@o@OoFL#S?lsPLRU2P{o`73KL& zVVU1XFi(1qG0%h}n5V8jmT9WOyk(^>aG9n?FwaO|$1-=RcsDT5T@~hON+p(o=iH?d z_yeZu$!p_UBvk6ye`-R&npxv-h2t5Z<4H+KnrpGyFV$vkh*j^XmoiP1-)S|^%)EJ%YyP}8W*Pgw7xLl>Digi$B13_xLA#ayr2(G?ANxi#eZnoV}c#i zT=0Avr$&0r<#SwIOd%6v4DJQjB@E*E=*)!6n!`Hbk(Sp9XHT~O%qbR>@!w82bZ+$v zGSKaAt={A_Nx*eI z)(bA)*RRvS+3j0}=}zFKzLe?KwKBSo(C@B(?|0CJt-c@z#!j)mO6jJ;;4kQ>wSMm* zPJdJV-qQ_{zJ5n{aJ!C?MhapBR~R_P#nH3+IE5^n=kn<6lB?-qTF3qg%caAxzyn#T zk-}2UMlcu1$9NXv0n3#g-%i`|tnw)A`2AJdzyHt>uyAO)N9H zh0_vvip`Bcg}G(eme?`M)3%#PFFu|2P%`fh(gk^jeBm|H=q^9YAx}xqp`nf9N+ZQ8 zB8U1@r1Tj;N=S{A_J~|H@U3$t(zv91fb_V12jjYWt3oOM2fN#=NbI46e0(Eedx4VZ z%a32(VIyZI8z$lMt?ql4Lsm7^J(SM9L`)l#t(01H=WYnvDs{vXF&{4A8Ua}#;dqLCItxbWx2mEH}YRa^(< z38R;v{@K25b4uuNL7)D&`lA+x7{(Xem$iD!;$m;4x3L zj=(q_%`~trDd`{VG6Q*)D@lsT>8z1T1T3ee77ZZPH$*Ov14t!z0IA?>oaeRP z+&F%YX|7iNapu_OE4r1oLEc1J^&2?(c?kFTzr&&fBw|P>kJKAoOL|_bx%(yi1N?_@ z^=%-%_&X@O27HkRFzi8PHILd|k{G~pU?7Fi08#{MqyQd3>IAyT>7$Vn%|L$ZoV%k2 zV{i+pZeXy++zBz>P58YZyS+EQ+gH+xUS{t(&Y(t5o3Ls3+Bhs;eB-c zJURU1?^t;Dp3{ZJuo*K#?N+d91%=D1IApZ>cTcj4!+l23ib`ZWB zD%Z1%JZuK?SGM@UfR8ah7;psh(*moP)WrO>z#E8{t~^)p7RnfvClFdF<4%tyRH0N1 z1M$8|WRKhVI7GuFr^F=r%3~8%nwG~VVv?7~9;)I5D8;Ef_V9g_+Gb#WYT`pI&sS9S z(!l&!;R^GU7)LNao^gsDGe=c<{ISCF%*MxEv$3-L%*G1y zGaJ=t7?>a0r~;%sj8S2E?xG6MFC*thdBS4TFtH5Gk4RK`*+a={KuQ0&?nvFYt}%>Q zv;d{L0ZJVNlrs7nv0nF(zg{fwNWO=R#$Q;L%L!j?{vh&qs4b*OfbV4^^4Gd0Vl`51 z!&k)x;p^v;g80`Bq`bU?^4?1Zw+yd4XEhAa1CtRqkSYRp59#rO z&uI~W$V(87w5-9p&a0x2BCW}uBCQAwbg-DFRi;K-q-vyvuSVLJz-w$EZEGO%1_*`= zpiEV7BkjpF5yScpdYvXFNOl#GB;+kDOxM?lbpcRn4WLw|2C64<>!1GFE?B+-TO)s2 z7LmVeYoXWQ=w;zA{@xJyVsTUQaN@V0EzH4$-@QiUFLZKz&*|>ksmd<(*FS~$u1m&R zC|4CwE`G`F_fdxa5%M>x1>qaj&yc@--9`QiwOl3m4)yy;0|(#1Zeyv`6;h#xuWMUK zvy^;^`yUxinH}TpxvtT?tSrypJ<8nx5O*fZsIO5*{m;jYnyju-+tx8|E|pPhs*IXt zWz=eeaiczN5@`m~B4Ge&iK3AfGc8mZLF=Q+^5RNm-sey%gn@avs0s|A)Th^og|LTG zM-8Oci3PidGF`llQ>c#b7&abroc+osikfB(%o{Up#HqW9WwS@k{D9IUlntZ`^PZM^ z@t;DxN043xYF=7EF;2)tRQ4b|C`5j>e;N3*5AH2y26%A~LE#Nni zwg{WJ$3WW-9ds7*k%zKxXrR9ofC_25Y5#FhKbn~Lo6xu#@9~G1{idf#Wq$x^))+wk z%p|QX^mM0;Kdv9Xk|3LE2Gxnkx`q{HEMA>R=Oiaxrb6j9T^yReadM6 z0*8b9QjN3$@eFyZ0^{=z(x!$++SI^|;r$DZw10tF$a@W##Ee)2cn1MaQTmryb%G{H z$;``UtgO6l#~KVM)f!OdiUu||Aj(hc4G3`PHPW{jj~ci1M6i0&OQ!+s)rU}X`le`5 z8wXdRKT*G0ul{-yIp&sht7y8hyT-}Q`V$QkL)ey=c)s_9`(AyNV_?6o8Nzdl8Nzeo8Nzcqs_|SNYNSc3 z#&edc@tl4>jOSD}gy&>6fO!h5Ex7t>(j=yl_9SXNr#2HM<_tV%!4Km(iPm^djXGhP zNVA}clB{=-Y8MuY*NDZZhozwXSIViboJFMW6_I}}3%(MX5%n7Zl#BBSWoRCu1RM1Y z=}ScOwqC4!DT-SW{00*@Ehd)lC4B(TmI=Ss1Y@X?B1pd01feQlYl29Bij+N1krG=j9caR#FE|#_jvw(Xmjnvs;6463m=OFD9+(Rh~O{854U1|(GcRp01V#A6?eYUQB zk5DS_Bb2%iC^G~jP9%Ub-vIh`)_Z+R`a;RE!{VVK@Qc-Q0;jqr#**-}xHX^LbAJ8j zoD|b{dA9rwtMZ+#gu%P~ozC*@yO`)d`$0zll+!I(R;qV$Mnuc(5`#Of}ET4!sk>1ggw!rr>oOV}V zWQ{Z&O>{qd*lgqYP?r0iXknchb2n3AZe0EW=4L3OU&3-1ONUfp?vO_CY?~@O+orCS zR;t3>N>!K}q{o=MrV-3tQy)v$G=h19pu)WAP+{(`6qf!<4Z4AO7v{5=o309Te}$Pr z?Nyg@!=)1P5lT5QFgJ0k#Pm?g7NAtU2Z-ghhf=Z)q_>H)$mdX|t1@gY!wHb104ML# z)2iwB5%P>)nqR}D9VpGOh4Ly(tEk@3rx353f#-*)dME&8%mF227%}1iC5n3}Nzg+{ ztR70TGD80I^}uohC}oew&81H{jtiFWL4N=#l;lg?5QheqZ;+dqSBvoNb;#-gq_pHO z*-HijaRSPh_P>QR2@D|3AsT72GH~OF;|WkBO_dt+{zQc|(`uwS8IdP{jnq4Q6seuj zNR3YyOWUL^xcYK%7l+9GogxovEJ@zA`?jF;m?2D?@m$KCy_D&>~!DGhjJ}y#guRfHFhWy9&RpPl$2P!SZxK@*Gl@r$dKR zjXyEg)FmZ!!C%C6O9u?|NzD1zD_pizV@5DenzN0uov03SR!9dlziF|c&Be}xmz%by zeX#YF{D=tx_a{({RfZDSawFkf(Y^QtjSX)pJ< zpj(~0py#0c9EN=vvi;co2+rv+vHgOJJLU^+>v8CDjCgG8QlU%d#ccls{S;o=8UK-j zoBfFGOW3yUgir7rdGKUFP#I_PRIC6xYSLjAWi(yQ|6@GP(2 zsJ49JzH2nF8Yw8_dgdCb8uK~v3d=$9@u%mG3}HV0J^edJ$*4P+PkOh|$0ng*KGfYp z8Q=2g3>6-X7_Q|^coo+@+smGDU#pQiV2#v3 zBc?Ai?D^j;S1iW&yc|ucCL=wU{i-KZG-f)>B@kCj?|TJ+E#rH3%B zYx=ymIvFuNIcd#jJ;DpAfBI+pmhNzHX%(7+Ha*ywa8G4Tz56z%vklVHyF$15EBbWv z>OJIXHhtPWc{hf~e7r!Od(&C3i=QvJ_+!=+G9u5Y^4DSZyM^>NVMe`$bdfdEaKP04 zF7mh!AjJ}N6Bhc}58`|r+X%+-+S4wHdPxRuaTINo>uF#y~n$GCw4a+NY+KWB8$^LgVhKi`*#PKzTvjJiRjPr#iOO zgNIuVY}{ah@IJ{GEQc!gR$b)YiW3EUD+_Z*V#D=5<|2XpS{qB@8Npo4D$KR;G3KJ% z$5O~Gl=p66o?9Mcp06yF(JT|A3WnHt2Cti1!}6qj1EKrn*hY?$)^3GLH1t`rIpmca;(69pqlU5Z_n%cK9 zN49FI$FZc4>hb|)zeb6p|MKlF`KH?9 ze-%n_mb;-WJm4OwSBS3)P~Mb*=Y3b|I*G|u9<_3Vm4!#V0tNF8RwJ12x~eeWVAaQR z*VSXp_h*e@zG-U&^PODkDjAq>@3K%vje`q^w}&NU#_`L@F)@ z`lGIaU|cMfQK?l%h5D;TvyL*Fo;t>J8(svSFE!>V7%%p?op&NO4adIR#;78%hZ4=@ ze#s?0AfepM_Bm|+A$&>s7ETNCZ4%=3FfiY0dJARD45R`DVZb%-kx^w$r|Oi#Wgu1S z0i+o~BTXQPJSlw?X-a&GG|g(HSsJm-@!F`7fJt6Q67ReStZuKZ`jjD$Gftkdnfun>+MDot5QS_vwC*BizTF0V9|*z^9u)ynBHq zEz<0C>{VK%32&E2s4#}G&mY1ZTDLGp@HU2SslPz)(@i7t1^WDj9iQ$R3E_h4F}n-S zLCzz1h3Qt3b;ve%)Gs|9mFer3o{q}gj|)!wQWdV$H(yHJKR}A4bRwG^cFE{m9f!&& ziqpYwp-O_~_}Py7aI()L&0iYxMAx?Ux|Y>QldMLXxDj(9yoefYu6W-^DuWuS3=SaG zM#NGZF{ax_1@mo`gyJ%4;Bl$Un9Dtk9mDrv>W;UD#Bb9%%`* zXgL=!AC|lk67iV*{1Wr_#yX|0&R=lx^%ut?u3@V7Clr>A1NDdA#Iix5-sT<5dmifg z1IjR!eH1mIj5zc?l*j=*W9-8?AJv&>Y069wN!IVuz%5Mm_0UL{)4^BlR}NvFtHfC|BOVyc>ms2_~aXJ5MUQUYmsGCk&H&5P z%m({pTxaTCHVYf)=)lID<*@#tZ@d0s=LTPa1zghUN&I|l`gO$f!oIPlu7E`5-# z>q`6s)1(d`f^XOsk=yj^P0I44KLhtU_Wb*tKQmauv{sm&>O-5=&gENP4TO&kEL_vz zn#dn*FybdLT`Zs9M2pGo|4)7Ra|`EX8p2pg=5!}Ie)JS^o2GCbg z!B|fGbj9G(SHRVKH_*@13*;ec+k6CzWW-;XiXpKQZ0R<_IfiaZZ1%qj`5$d)3z0v7iny+G{_KoDYx)vyAsO1>vfvkqYTJ!l;#c-?!tK zsu*%hTsN(=jU3hyef5EGq_C_yPh6bcw*3D1b4fP*?_vw>kE5E97;%!L-)!(WaI(VZ3o4TNTnuXM}c-WaKxO_bkm zTq}70mM07`Be=_I*{`xWjoETR@8;^oMGVU}UvMwWc0u4F_&~~V!7PnAAcWnUAK_0hlOV{;9!8ssFkTljc*SnJQyL49vFYl z&_(`Cp^5w!;Uk5P@h1Xu9S4vGtcCd5flRMme*0C@~LIibg5)~ZIa1i zQU_vByYEL;a2TOnfk|BhlnMwa1@sY0O)sb>kJ5m`htXjCSv1&GUms<3z27qUOoj&^ zKYl^vjZKbG3(K}BM>y`Ea(<~l{s8g)7?^WbU0nld5rJdVL%#Xo7Utrh0^=pBxB`?2 z1eB-a)FWnB#YlDz!!`^ae_S;d$aI(kwNAG#%ngGLUA|0i+ok zujiY{tpJR0+d_TY7MO$Ptv_`w-R7kTXR#yCA2!$SH|iV4S*LI!DW;$;<6&JNGCUU#1uQRTvwmm5vCLU)Ojnsb8{i4|GIWI-P6vS6o86e_{mJ zJ-wnWZ95;IGHBw^S((;;MF+vUHy%HioyvX9uFK0w%CS$M1#jZDZMBipoBU=)4aIVVb?`|sRKywRAatQZS&4mWA>iK z4lIu&A5m`MzUGxJVCs4gC~#4_^S z^uT0Ne1JI7_E6?&zC_S92&Sd{yj7!?R_&oq)sG?t(z(7rs^HW};eM{#IgBYU&ILMm z9+X!9pODf&Z4dZ*z69j{L0g_|wNbC2k$MG0?p_f?dVXj9cM4XG!aAJ?stL*|s+XVs z*`A&%bA+&R@VD%@G70lLm>*u#MofqvN|pd}FN`Ru6KA~i7#*EDk5CfAz$NWh>Vzvec)3Q_)ib)KYCupe@ z_$p$mmPd72D47l@H33kn2P4$8Vpvys%$tb6{UMW5Sf16^Mtn1X^0s>@SB+yGukUw| zG7X2EbFzz^`~#RD8u%Eg^k}3a)kJ)oT;uMb3`Y-TG!3M(ixI+zu>{DGSWJa`nZBF7 z#pS1ew#!2UA}(pg*~H)f!3qBr=5zZMmLvM{HS-bu73L%QA7eg^zlpe=VqrdwUm=~c zkGm;`Qw_)qy+sGRqeBmtQ%@iIXg=K(oFUGoMlXWb|>$ zH+a+-mk?X^Ht*o-)5nGCdiGGp2#~j&o*--_J;QCe5N|nINS6b)oZd$oAw(Wa*v7Ju z;sds^B<3_y$bJWT7mSPF2vWXjq|Aih<(r=E*AUL>wkC~aoud7TZ6mcxsKZkvz*FTm?Ga5?7rg5?lS6Z7Si!_nTgJlq(792Wyfu_pMRaynV; zuZ8-bMJz8$TYmA{=nBc<7%&tX^M|nt%cpB_YMOi!R$>0s%EG{*eFyW0UKY|3a(66$ zHU{U}^-;#Md|=i_j2S=)OhAci1M^2~DlHf>t9nS!O8S^d;oui;pcErODO-$K_4uk| z8GVFO*A1lLkcVYJ49dehOr#8u<9Q%grLb{%cRe1nYuLmX>AMfddWZ8 zx?Y!`{@E_w7aa0)#q*E)*jpak1@nWuD-4bfRFc>1e|GQJ3fG@$rAI(~19{en=r%uy zen0eK*3ynvc+7{>a{;%wP~+wAK0KJgg};qF8juk(ZW?KXVJ?zb=pu)b#{8+n zXEA>iQDOen!9sbP2F|X&NX77Kwyb=l^m0Eo)nTb6Z=WvBN+uJBdT1r__$h%$|bET^=*Tf2Q z^&G*oN-HZ9L4|ZboJP8H4&No;ji-_B+k1w5FCdP_9i;mUHPRL)1_*DFV$AYpY714! zmp`QPt-Pd%SS|>hYHVV@@)k;Bmw|hXIT)}mw2fK{u+kUwh~|G~H2rstI)biIlh8JK zyFByXK^Xx9sU0v-#-9@d4w`mJ;DvD8zWD%ZKG?1bM%|YV~NcG2ZDjpU~p(@ zq`1VU#lX3Gw)D7h-V7jR9kyGXv)BQ0#X#hOgAF8LfYL;j?QN8v_HE1sT=m|7vK%N? zU9BbnWxewnak=yeWwG`MWvSRhS!wbG!DT9-tb7fmD-SysU;##hqQ<}-hG-NyX2%gX zYk2A#K*|^cW&em1ZU8A?5lgn?h8UL*jZ}R!Ql07`Z1>ea{j;4vXYr}z#cDvGXP)0X zE|&fzef!m?qlf01zcPJ(ZCE4i5&M+4^T8jiox92UzohTsAi^eZ{nJ0&`96Y#hYNcf zfBz>p0@Rp3^w+O0f55M-?E8Kg&;99yzSOCJ7H{T+&{tDmHU?-V0;&IxhJZJ z;Ry2u<7}e8QJ&D11nlCpRut#I#fJ-qS-#8n0R2?%YI=k-M8YdvV+~sBYqZAyv27Pz zu7eT#tLt_5u^|ZcsNcb`Py0)xI5yCSwaxPr76{pO%k&1_bvD4Kz zISwEfxdEiYIe=7*2QU|Xd_&`wCz}T*Ga3w;g*0{Yc$fY>{fo=KUvVxO!87y?bm_JM zzV|S<0u|<-Aw6HxyLy7xNbg5lzE2xp+#coOi;MMHZc3(j&`9B=k)jcigLwccL7pOI zqDD%2M6MR_&bd%3J5Lf(gY_jmPbX3FQ%)yQ;b-A_yoiePE=q3a14b;9{G^*7bom5y z>sLvtJ$*OdM42oAWdeGQIMV^joJe=<}rdH(!=3=U_)MB;JFIBr*{pUHOhp;(O|Mbsx{s>Vceb}h}X!)$N z#`E(}y=y=pwAOfjPWvt7Z3p@^xw6F{w#oKH_*rRKWFsQP)Z445<-e>pB3>hIL>QPa z+b!fY>K#UOD zTE!xd#E@jSZ!1Q%J#z@Txm5dTN0%wuu!%n z_(dY}+kw4?&l_DwWi$%PXtZHrFTsMyv8IvYcK|8;pCaX17r7c}q*4NJohzQQ^f{*< zu2G{8PVb?_4}BP`qmMqzHBrLcz;nLS32xx|L9|XrM$9`vx85Q8sC=BH==V_O3_zKO z=!1U)al!+XsS%KODiCF61(Z3M5$AP4=@lNKbSke=+ML%U9TK24SbzsyHoEHA-T_K) z3b<``m|?g3Da5wAhtj`uj^ILpQw%mMIBnIkuOzryG&Ye639dLlOS#6~Fj+R2qFG@s zuNCHgNv-)y9j`FY4HfFmgVXzpqi9mXLGx&22LXlaXP4E2~{u*U=Ag1IpjWN<$LHA=5MW9DDSX* zf%F#2rA&9CE{lyaJb;t@lQ%6LUlX=BFs$=(LBG(A@$w!Gbew5-kS_ZG(om*jhvZwy zdCaxtxJpl7J@!{dLHSXnlt||)dH)hAqYydwG*XtPN59r}BON|fLYNCwdUWf~Ul6AP zl@7^r$3I3cdg(B)Z5_jyRP#&B-|RoqiDO|K!F05l+-1lZ%9R82ZW_cGneH*h28M&C zhuh^)0}I#ns4tR%GY1G?<0huVc`k#Q4shH;HS7lZz1)Pw;W@{Kus-qPF;X7f!HHvm zQ%fTyVH2m=bO)|9l*1Y++YO8@e|2U|g}G8`%T*4I%b`XpoC8S3SR++^#By>&h54C9 z>P?o%6IGZWB~)R4l+X>t!DwQ66440e#}ldeD32#nAzRL(uuvkN{}AR|6ZyptAYHn2 z!058QM7r_@N@DZCJw*xztP4%#Skg#QH-Hqh8Y$+xSTd$>jt2c|_`W$+@1P8Yfm9O= zlt2KKvfsnw+LVkV&RLI8W=z0vSr4>LChI$xN3CVp6O<@un{*i*RvIZPv2)@0{U}oQ zbdi$}+b&Lh>;$=TXr#h}jU*s4$5W?XTSi`Jl90rKjKvD zB4?^bN_5;2)oAEpjwX*Z*Q+%_0B36a@=&jFU zKC=pk&%%62YK8eL{1{REB}$CvHu4{WWVDc8JY?uCr0Z#*BzPH(XO>47%fPr%xC~%E zCx>J%m@pCVdVgc0`X*TCYba?OYF~7v+nDoh&0X)?m_=14{q?0CDxu zM2=$vW$gkeOCL@m17+pJDU7SJw~-1+6LHbVMQH%3&FJnsOn}?<3S++p=;7aF+~FE|>gTzq6_VcfGbRl-hq!^# z$pap687Y@=(}VL9_cu7baW8@kfq^^pxNjnrwx>v~8g5WDkqfIvs>`?yz!hBY4bc42 zLG@iK{nJ0&hjjx|j=WS8W;rvcjkwRie@L)##7_BXeZ&suYo#C@#}hTP*tnl?J_ zu^i24qKnr-o!4mMI!*H!Zu2^;lN}S%38O+jz2b|-8hBhV7S{dKc-G|sT;n?0Z)51@ zBV5ogeh~Li9j>~^B%8M5iY^w|YA8b-i{px$^R5by@8GcX#+k~b>c`{;Qqwe;cNxhc~6+0 zij+5Y1mVcieV@{PvmRcy^!){QlwaPKw5>gY^tWS>g?+h?^nTLUEEax0Q@R;nBVUd+ zJyf*1Zt2S$Wq9`V3CVU|jo6&+)mWr&rc6N(Zu$z#dQ?$>*OG$>uR4d@mY&AQ;YPv! zHp-ZDRt+E}WfwW8G2-Ht^+!Dkaq+-_Qm2TQvxhQ3+|c5114>*0N?1aZEJ@KoZr86r z{j+_KYhv%>6ywt$b=!%@q!eU~wYz~b{ksR`psYmMmAmxl6dj=vt3bbwJBt|^}@ z3K%cQl#i(0kMvKa?@YFl{Y!y@~VBzWY$U&L-loFX>ZyZ(;h< zTi$F+*CT{2zN9&Q2T7l#dimj>$zgSA%XpXf`SuqJhV@9#ppMsK zo?{a>pAY8>VaiXIX8f&i_IVE>;n`9Tp+8bH*~Te7eRTa0Zu62a)j5+4p+E9UL!sOA z*3&1kjGkfn{Y>YmgfWbD&E3a5LL-<*y_7H$Ig&;&{`>nF`tydu5p+{p_*uyBC??&J z+VD4xhvJ59y38SQtUNG|-3P|WP+qcOoL+2@#!V~N{xRl3wvg)*2Tp~$tXcSj9#g^Q)SUDqH$sl%6_{@ETvY(!`0PK>?U(Z=75E;SkYmBhxvyNiW&yV$;^9rr1H z33_#77~9$X1;)kg9`0i71$@DHq4yJADTZJZ*F8pPe-Qn&trfxmrmwUdbyFjVzy3K4 z&K(8UJ>3atp}eC{Azr%Jp@#Gop~o1*;=`EMj%SD4M0`gEZtiS6@1R`yJGiDERu6Fx zxwRC;sGEPbJ>7EJM$Ff^CXGu93n61VCh5j6XaMPQU_;`vGvKlE3 zuyk@}cCk@;p|UrMwdEni6^EaszP0Q(+v--^BuNa6Q}tmX=ELzb9d(Y}H%XA!Ch0M1 z`%g{-%%WG8PAs8C71$PLU)x$z?MmAem#S$q;tR$vrHlMV1mPX0Ta)&+x?G5S{kzB` znr>p+rl8}diRsR!b=_=qybuM}iJ(#cDFZp9<>hOn>okD-yjE3Wn}4Qd^14P@=ocpBl&X>$eO>{p8 zmu{ZvzK=8?8@Tx}R|W48N@W{BDt87R*9qh)Qek|CTrFWVEu<1^AV-aq9QU&>`KD8a z%e>abX#lAT8aQ#%a|PB&uM=8!d7ICWuV;K2;czdJ22LXdgGP!aKnX>S6y8sf@@N1l zwKe9#(6dsvaHX`zpNA{@bv6-(GNN08yWr&JMTZ9>$6*_{^oYohpcD`T*JG}7P!KDs zfy)-wsz?LMOaRC;1{=;SfHExs^2C|$>Hn_xuxC8-| z^$TBjTo3{7aODWGqvlbEW#FiBXyP*dZKQ0$1;2rmY`EYzkP=wqb^D`brAla{5`$}a zE=C%umTA1KOklO&Sj<=+XOr|iOV`2QjEg(w3$DIiq_pkWmSY6ZleTw#tv5Q*v&Jy* zn;ujP_hqRzmgEoNI^hw@+JoQGQ%pBA=!H+Ynx8Wo#sQ=#Ks*cFI~dZZLPHoA7gYu7 zq709LE?*E_1>QmaH^)&{mJblupnR1+iZn*JuH|vpND%^iMkTzyMmZarBr9&tq%LyG z;)C574g4N-+af6a4H`E>A4FN;JVIGC@w>#eVGm^` z#n;$CSs(FW8aTnYjUz?Pn}{nZ4$lG15#Kk;Ph4DaCL?mrYozKhfK;0_Qn}PPEl0fw zOwsGF7%nTRbW-x+x9V-ajq`Sxh{KkaE507f6sgBig_nVAy2nq4EdL=)7=E31P*Tgl zaM{KZ#N7}c4n!Wfw^0(CBSa&`(g0E@K1GW8E^^8kcwDE+r$`CgL>#zBC}HymWj=U> zJVU)SoZk2vy^S)D@&FGY1&u}uM4YfWj=zJ_E^rogk#krhWji)2Tr4zFRl=?aQ2M7P za-lSkd$*3^=PFcC^(Qcd`m-8F{8Z;th#wz4Kv|*i+r$M9Ab%dlR~Q$nJ(P7WkMDQz zfbeJ{h1>vA#5NIk132IZ&|SA3IE8V~f|Fe%l?A=KaoGoveU{eNiREE;=_CQTFS3ch z8TWOraY^S3?COrpJ$?Tp-5RdVAK_wKdOVN1!}CjcxUi03`i9M1-RQfguh@iqCo10- zyQeR6%~#y^b1yO7j+wvj4}SdVueZwgtR{}vOIUhu>mlo2ChZ5e! zGAkHHS99EW>XDJu=$*S5#TCqE5`k|cPn#0|Pmyv;BV`{k0uLbNKkOArP0>ijOJlBb+Nc~N za^W06D$g2e8qm1-ZMopQxN7fgpW-yLRrg;++$Oiafqt)V?d~8BW^6|{cf~0^lTUAc zrKh&JdKWf!dT!fwAR|g1@L$J-dmHJ3zGsh*neem;e`_0vPy<>{d;H~D(t5*F})VQ(T`c-*!ClnoA! z8Utn1#6Swqk0MQhxR29B&X@tr35UB?B{BP!6J1-b9MyhWE<6=_`UhW`Z1&YZ{4+W1 z>0B@R=EfN%giBc0Ds&jJ;P9^-C9UMC|Dtt?45u^{R>K z6tA_aOkz@)is4?xYvT=(mn8cz_f2+tUYqP6wTv$dZe9V(HkW}kd|0*&q|wKKl!fA8Iaa?eneRZfp#4Q~;RO8`&bx^}N9@Edf z9-EC^?{DF<`Jm^JF7mKNT=(Mzaws5jB&9P?C%@Xr(J2UVjL1oV$QguKGV+OW(svNb zNEf*X$t8kng*d}lyh13oGHOuh5ldex(E+_GM7ZRMS8go+j zj4J{zcer+Fq!Oo*N*p3juNrA~ZX)iNq(czvJrpu5aOJPGPC=@F_-ArB;u3dXU|;OS zw0l&a&%_9?f`7a9D(WBpnVgQ&T3u{$V;sb5zZm%YKRI-32+w20G}6grHHP%0s)T;o z*O$1@+Y5AV$yw_6bkMo`1Wwboy~OjpvOAdK!1;nc#LALzmH&`!33DhI&cR4$kxu)F zZS%T5we#G<7e+5Iq*l3p)dt33TPj@B^nO%V$H4O#Jv|KPd428$a%7|v`L?|ZET3jw zUvSyuTwNmtt555bPZL1qH zwrO&;#qMFR&80g%$o9jTHmwz<^B5&gzGcBJi+;)JAjj>fEjA5n-{MMl+v?1kQy)<$ z(VTjQx^O&28vD3zm!iiOC;d9x5IGvBpM!^#!*)t@Y@Kc2M@l4(l!XTRaIDo7rjceq zjmzw=I32OTJjFFVU;Mb>dDvu)>8rrCxn-ZLce$pgKR!pFP6c;1%CP(NU`rD*YJ7Sw z=5oO~EM5m9o!6-&mj5{B+BovN#1u4;E+;0Yfq5|6CJ8)lG~xqD0n!B!bl^9CL%|+#+*UgC|R%#6XtSpB*zUH>k zEM=fv8=m=^h=ahhsYaT$aV`5Dq@Dp+(gsq?f$MmF@dnB+0>5{Sbm=ta3y)hEJZKte zboI6fg@HzjtGLD}_YL9xOF=lHy#DE*?R;D~&j@rz`MLzaUxly`mR}dVo>9&}{jf={2XLLKwGk%+o5<}rA~){kaBLvA4E zYkD+R{n3~Fo0u{^l#DZw-jRWl#e6*tlp4aLX&}C%268M7AVqQ$v3PRIXgp6R?;_Op z`lo-k^Lc1IG=%5LX?na~BW4Pn#x{iM%gj0_K4X$3Ez9T1=@hwZm`Sg#e1HhV9~FY} zM|~|TM}U3{`2|^co;8Z^294jfAY3v;9s>){<4e`3B4X&Ar|%7+4)I@oNO_$P8hIUyRXI?$Mwhomp!`{Qo^h*6>IabvL^)yCKp3VjN<7f{z9vdI z0ZKG7V%*Z9-YUSsBohF6%UcjO;h!Pz0zE_i00NOes^G%%c`KirydwA@zhnGS4;X(? z1je5zag~3^VC%~;n!?~Sv-goE(5FbX4L&clkZRZ?lxjDCRPEq(T1X}Eqe#WlKpsu0 zpaV!16oN*oh=6I9&P7o#(KqM;CUEwjptd)YAnl9%mzYylyjgl4!>aMLDjlU z^iYZvpcGR&JKI1k&ww%q0Lo-RCxq)+g%M^XFrG0Hd2W4%JhOKYT8J*n>Hu(sYfRSz zmmrL|egTvP5f2frrU0dz=J>#6;3Jf^d=oj^@1U&uIjszoRX=Ct08&!pTE3J7v{E{> zQH{|n3o20>sls(ool&lT`e!>IsP!6uGoD8a8i0H&?&O=!>(wVM$F++#P znkb7II=Z&T^Wz1E~ zvOYABt{kkU+D4;>OC$qn&~b_M&yeE~7gGl2DDGR%0Bw|JxaQ(~9zZG)8mYbvperv4 z@jOdZBOOIrW4NrZ%0a05ZN81?(XJZlv{*fA2A(I->gb~L$W7#c0o~g+kXT;&7_wfPIRT83szDFpiv;8Y$PYP2sAbkt&V;41#K({#@e$ zO4nu})l>bc3L|{{!iJyI5Mt~7Ih1w7Ba{USpsa8BdfKh00hhPjX zq}Ta2^4B`#dJZ6sk$j^>1`~`&9ln4e@iBnjxyN=M>@|RNE|_}ZZ9C5tvrMiI9Y}T$ zWo#Is4j^*D`5>?L%3+aNuq;L!Ax;GJK9~sI4q|kyH%|Z&-JIGUK8#yhWB4rv( z@sg7osZ2nFAw^0$5h+K|vV0r4VX}~lp@H0)br4#>atODH+(9C81B%F>Cu3D(8!I=-;dL|kO9qbO_}?>V%Q1N%*cZ4jCN29Rh1tif!BDR%30%iey2t{C{(|7I+65W;CXVY9!vwz z(^&QH7oG50<9Q&t+7df{{7gqAND}bh!EC#O^o9)N4G+1-O~eeQ!&o))xZOc100vTk zXrxdYK#D|-6v$oV?S#GMNsH{9bekm3vXP2NU|<2xu@Ih-0@0Xt7;t?WF;wX*ZPS6#y1#`9oV zU9Ea3g(;s^t2YtEWV7Ox;hxBAll_?cCc8c@<2Q#JNj;QpEJob$;_Gdo?3eLiYow@v zcx)R*6x)9)AmNY>`EM~N`5zrXdYxD%_`M^RYpm@&0J+BVsAOHu=%i&6rRvh@%^yIn z`Q_y4I|%bgIn3I`Rerl==b70m5)e6%Itame(AnN9j1f5t5IKbqIVYbWq<$B+iy2asnj@y0=;TmU@SZs&T&9QJ9h}Xiv_0KJ==e*|&m-C}YBiu!fnluOcqYAo@BIUsV<}5;^ zWW!h9Bud@4QO1l*%$tZ|1X$wrzvQX2I-th=wea^I#uje%FHmyOz_j_-Hmnq}&)kZSPh9l5;q?vlzFX-I9UC{gGiecTuKfySpHKulEU&nBn7JtEY-hFkI-o|ZNmTEA2 zC_!W3;rD8u2a|IA2qk6UkB=gzVGpGU@Rc)AY7&pz0Mf9hCCRi@QKOOK>nTzm3?QYE zf%4)x3lTYApCT0oyvTPj7a$x=DO3^)P|=#Gim!_k>9mUfRVe?$Ys41?D6c+k8m{#O z2Pos=VrMa>U`lJ|`IYVKx}4^Z;QtA3&Eh)h%=Sj=9fq_jCTyu@`nULgFPmTk_v%L{KJHB+|v=NOI1$xwAr@LHu4C+kL$6R#?fWi zKJ6-8UlT_^8zj^||4iv&izf2agUFKz<5l8fuQAUGc;VkOntBZ6kdf&O0#+uz zCPKK&TnhPv$O&`{X?8ad|2lOR_&T`ea1<{2@?tL2UV!o(AJmRrl#espDwl?+cu#eF&GI{YbUi!r0fW z1;ZAD_FEWxrTHcLuw-=8vQ@aJ2FhPBUeCw2u3H$xCEc{7U-=%Js&I^8dL+zTUyT8z z0WvU#`TPPo5)AbFv{liiaZR^+B#h~}j3NH|wx-_Z7UJtX!u|r~g1kl?jx`qK)R?`G z5)6P6Ha+A>{E$gnFk%ArQ1Xv2n}L$kZzGMlE?rHe;OgLiD!S=#n?IEt=b1BHKfZyK z#OIMUb)CC|8{K~d70AHVySl2S(X*7oe-tS`(lhIK4tk2t0i=RFfRqVOky35|DUI=MHjyif zfifHhF2}x9qX}3-0Z2jyP$KSgD4FpZF|h!b>s(@>r1d!RU|^}ZgEZ<`lQ?KJQXoq4 z`w#!)bxvE0uC%in)!%C4l)g#1>zAsqy!{HpoVIc*+|wpt!fl=@NaD)aFB$z2?piu| z^euAx^wRv6HsUOtxa~49?AuXImw++__fQ%DK=k<_(*C_s6dQ7Zs9MQ@sAKJFeGp7U1)f#EC zMdT^er9-Q$8LUE@LN(G9s*zg3E^>Q0fYhBDDDQ~7ZH*JXAu*SlHGMIg6w*gvl`Z?> zs)4IN84dR<0La6rfZ;_A{~zA7w$QkTArQa=r( zmyYEZPzp7mlypET{(OmXns^g=)SHNt6bB+sXB^uaa}MDASkeb)*HM#yuV?gPq*DNr zj)LEbMtaZKqyS1c^Ct2zVAu5;v1tR8_6|@QK|pRJADHyC4-orgK&Pd;yFq^fmS%P8^(EYD7Ab!T9n+$zj-W3}MSQ)`8JX6_+>=5zh& zpY7b!EpCq4anJ`r)ORrcD%{f(MfCRn;CV%U=qtG2O(I-rW*nMz5~=FXR8%a|Z3_*Vtls>0f80 zzm9L@`qMw#=k#5|d7I@E$|nA1+~N>j@SyJniLL2jGl%*hHQ};_E5@|kZ({ju_YQ{i zxEKA2dct_QgN@|_?1V9l_01v)LkRg+m2J)UT0O+r18gsG-{*XzOpN^Hg0a~+Dx6YV zvR*Lkv%6sIsrFB!TPHt;(^9=mccelYUShsT5o76HE*QJkRgYUN4F_C!#tp79V{F*H zj)jQJ>^^F7IZ}mY8@F@;oQ~{>@vR;&F;>EiaVA)G21cCbW7E0nLi)P1PU>jue(2ZyZf(gnr^hKDhOP1M z&C44of7_*pG4D3Y`*G=E%o#Th7ndH!yj7ROr6(wd^TN&X$K`TNvAe6T=8~RozgFY3 zqzBylY9#q;;+XSw$2f|U@D%4>6@_3D>ITyIzKxP-22ylko-$%a1I8sMzx5oiSR~5C z1QkX|Dv_AfvHK=<^|eV+eq~tE#iaD}MEo|cmth&f94RB1BT`L!O)LSee%-*F4jSZY!arBEp> zg(~6f7Cl==GoM4I|v8?+65lq>-(oruEHvj9qWqi}-(W-M)#!lk~#Z(3;-dnl_A zg{ArIqm&FrS#T&^FPBn!WQC=h{ubuARz<9b8;luaSu`jt%L~cW_pvN)q@p~=T)Le9 z*eh={v#Wl^mEMpkl?rf9`@;2^%an-=}P{tilA|$3%N_!n(J(QUL9CB`T zOcIk(CfPnpvICaYt3s(2fKqB0u_ys9jsI}eq`vl0%5x8;x-;TD04OsCpiDRg)x6e2 znLxjRC9>5-4=63cYs8MCWT0wDdMNGC9n3Z57E0SziWlI2%CT?ce?eMM6X~T6AYDCK zuD~#9blY+x{0L>>03~dWbQ16j zlu%^E@IKPni=j#cKuN=bDvOVFo}=EURw$K$5ep08BCqIcCKZ+uYcZfyZ9u8-fHD*C z1;ROl5vLqLnZy8Pwk%_&W?(>>s{v)IFA<}9iW0A}c?s~2K941@BKl=@FEOWOL>KGL zOFWZ0+BA8dAkKo&G+1}@Gz7-Yj52DPmUPfVRWucH!}t`bGaW!`feqaDY5}W_nt!m^ zyG{GW!m-rX)>8E|F@ALbJu@5L&;?o2%SNQ}enFlDn zug_D7PFz4qaX={sKF%-4Qk4xrsXBmCv>2h}eaKdL->*?BI-s6yY+&G?@%>@`Y0jbKhk)zlc6vsv{-r50Ey zT^4UKX{7Bj?B;lLP9yCCYNSm>-3;ok^B49wn?0%JZr;)X%3db*6OWW?yDES3AA*H+ zDze_Rnf=eP1U-$+@efY3F1zyIK{pZq!}yO@8;tY%lh5ix-@`3v5`TVl<=!rd1D~ zW`o65>(129ryDL+s+PYDChwvC;h)K|1pG{!U#quO<8MZ{AO3>tRGns$aGMVk@m&~r zEY+bc2JSzzKL&9L)sZm?*R3k6@^@ej)_z^ z_hAfU*jG#9bOhM!U!Yw1nBd2;+bF3M8@`=p=(iAx^fTlh#=_x9&uS$-MoQum&XR};G4!T2LH%7<_lT9?i>Z`4VG|Im%_jttrg~AS6CA0G3KNk z!CVq5%oRnw%~Fv1SW2Y2bfrXEC|929=39n=FmC4|S-42)824LXWqGv3&T-lg(|CtT z5Eg5Q+!IEOje@?DQ6cw4g0O!4AeI)_FnZ~*phe`RuORePh`gLeTLWLP`+W6=@^qmw~*~A~~y(vKzX^woz$NMui1-lB8H^q_U=w3g7_d zNw|+(el=2|HgJ>TO=VtLo;VcEe$oqqbY7=h=j!4bxXn{NU~%k^)m1^@)7Nko8znA# zC{gXxmw@~$s42?bDQBSxGr0cE-clqtN7g=*vgrR6Jwu6j#G>{m<3sTR7#w(7t? zhrIK}nbk(v<>JItSkhW8#{dI#vFGKij9Oq^^>MGQkroQLI^}hSMq0aQq@_;>|5N3Z zLhP@Fzb}w#Y!|uk8o1QUkG@eY#>`^GM##WxuHQH5pA2{(k{w7r+^u-GuWDj`BB7-aey18bSQh49Y?H?S&@n0aU%;fZFu$q_^P3vMd`Yojtn<(0*X4pPOfQfNSVX_ARsCDj zxgyhSBbQGLk7>P&rA#+1uF|Wj|B__LnIvA^&$9R`xdkx>0VP^pELXHFmAD3!Oku?A z1LWrRgUDTU7r6-+gl?b9$-l9(90B4@KQLa(u)&(AXl~qF@lA;NaLpv@)|YLTa=FfhS7xt<6%%nBMTqKNMLBBxB`^096$>70i^U9K+0&1 zR1jdDREm+JP~Anw1Y;1*hj7Jsfva(iI4z<2Aj!wc#?94dMu`0JkcD9iA3>=k+s|^$ zRWf!_s^}Ky=}>KjAxaGglqrA_=a2Angt_{32~j2~Mwl`Yd2&VMx%nB&vb=|~s%OMS z0U$3P_N15j2ijJV|CA;JX{psdU|7O=A}hzs+!<=|9{^+zbn`jRgrnA1(I^-E$} zD2sSX>&ni8pjPIka8#H}Ooh1^RhVm8g?fqdt5*As1&rlxUDH{Y#|4jluU^R-(h-(} z=;wXA;O^^_64sb+VOht}ZTng+Y+`C1i@)GD?NwMrJls+R5dR^yba)fX+q6)YEe7UG zcMD~8WMCenK9+GG!5lUtxUN@Qyf;nW;~G1nW42MQa1Uh__$kCiWDjL!c?a|Lz$NH= zmdBxOyrsiqsEi^2SH2uT14u#nCgKu1{Dh@Gg+nq5k+T$LSFR=%=4ztW-GH*hE+ys` z%3{0}BkV!C$Sn*aH#_V8GcS8}$U+yntGa>w*Kys`Ls?4!%KD7260Rcw0}MwKX^e2` z1SqQ{9`}zT1sE=}#*u@ziLj>PkXJ^zp^S16jI$b-UM2gr<;u}FDp`pBCpL)gg5fx> z==bX8!)Pv4Hy=iuR{zkJxGp{Ft8HL#z8-=lu2zpwjrH;~A9Q0v6LB$rY;?PU1SuvFC%qHOn)v$ym*56*_FMI3tu{_S$KtBpJwy(33%7au075!;k@LQb zTs9C(ed!q&r-=8gU-hDrXbAkUEHph9r_Rn zq&vtB&kf{&hjvTyWdJD$p)IseIu>AnCD4R6~=H#$2z=}2J zR)sk=EtJlsBzA?l0;q1NlnRBV(o~phQiZvsRjAv$U)+UhHGh`7u*H#|;FFUYW%BzR z%G|mAtVeyHtA+bK)yvm6F(#I)?}&}){8Y_VpEvr$9phJxbI;pIS9btu#5B%feU2d( zr21CXh_N7T7hK(>KfsN)OzU3TbWC+$GLGxdzR|~B(iQbkI<57m+^s6jo0#;2#W2#u zBumJaB|YSM*W&;P*ykeYI*D+kmZPZFM+@P*UJ+T;}?Ae?&>4Bc|$MA|?@_WD%gO=nCSL%_G!A>@+`!{F2(pkp%Ck zi+n*OVw(sxN#gxY)PIO_Z2&2y4aB$k7IHx`P_DdzWiMR@^M$EED&@9$qVVOXf3~|V zE-H3cV{G#`SKVsOi2XbNdK>Y5JVLo#J(MAc%b#PbLmE(`Vv94Ft3$ep`_Js^4>@k( z;_J^DZsEFab)+>hE~losYB0JeGv7GI1>U|583hf@bNtGc(fh{PhlfHVjig2jgr^w$ znk!DLt0%;`re8KaAx4YKtF1OaZPnZtaX#D&l+pPHu0O|CKh*vbui(!rMKgYB<16AFj-)D)J+7_Y`Cxb-Lp8U!dtBTuLG0JI zWj((m)3zAqq2Ln zxkM{;=u$_~F?UEF1OMebgFvM4OS=|@iQ}JrA?w}UvqJD(F zz_9lR@}BSwSRBiExxd0~CbY+1vabI4#}cxC>@V;2j+zY7WdX9s?BTR?{G06htbWH1xDIOpf7&0)HB7#`* zhHv2n<{6}^&J4B~m_eEpQC!U+4X-FH1snmaU{Af=FL3T#vYz>15=Z$=vd5^)miecmuCMOvhSDPeh*WK zp#zYE%$1U~X~hMQ0~a8NxP9&8-9(m5069Yded5<9H))i#YLlE;dKzH&F z!*P+YRuIIh0+8zunFuQtKrVE{7qB7%;}Sc8&5v(EuKE+$0%isybgwPm6l{?>gREml zuq)WIg3v}IeJI$nkAf{vDX2e8siodOF^DAW`Ykq{H7l$+n!!&l2>Eo0@s|n$e7}QXn;05_hOK*$4cGa4YH} zM&Dqma$CJ|e+33pZ~H5loV^I&ulg5e>q{hW7G5USM-zSzeNJXTm*NMQj12>p{&IiA zY*SXSM51?Yz;0_)OM{RP zaF5X`Xxgho8d|c@BUriye+{PkO2H+Vy|W71+FvLO73k{T1sazAA}Q$VOe9=`rIpa; zkg$2@?_sQW&^0Wb2wi3im~&WiPF68kn4^Wi4trLZFwR{grCfn6O)1zC8o>WV@{F~l z`H@lkKkiWeSqa;j7F$_$k%;=LeFb$}El_uzPz6p@-YlVY^#*i-ZqF37KA0mc9uwZs zkl#OmzG@lDBgMD8f~mH?4W?4*4v>wSiq9CQoF|ok5Uuo4V(9jN1Cuva1>FjA9ss!6 z&0K+)Z~z9f8$ixisjPQ>oj_zZf|vsV23TW)oR+@_xl(+FSZDxpNdoAPi;QJ%Kv6mY zI#{JY{K~Kv$GRO?t%~M`z z2}r?~sK8~hZajR3OUZE@dv zgIoC0DKxM5Bg4u)HTw^7QxiXkSQ*1%F2H{3687bgFz#=4Ie|lVRJiAQ!%jf=GR8+C zJ1TTGhdCTtq{86qjYW_hUw|p(DMV|mAluTta`H~O0zh^eg6LkpB%rLr6(GATKz43` z92*2#iwNjxkymgCl!tKi_6x{^1@_{MX5K>HEfIUx0*z*~#?^Z0a`2#dtkmfNtm-XF(>UJhDrl32hTo!#x zssZ~RF0^vG}&nA$P6-xyRjKy9s)#50IN_g4oIfq`^8c9s~?1 zMh4%5JevT>Q;ZelAqYVnmjL7m&R9+{1Sg17A%HwT8pafpCV)JX8crjoSHFhM<7bcu zY7^L^NX+9-AV;Rq)gy)#?9G^jz3W2(e+sD$mauoxG|8m4`~%_Ji1J526KHGX+TCil zSBWf7=oFU7t@k{AbyU;u`~H9p#^?@-jqYxwhLm)J)M%70Q94FQP6R~hP(W&clF}`W z2%}q&6r`m5?)~|l^ZV;L=e3=k*S6>N+}C~G*L~d|B||$^tFu=FlZ-c>H&_ZIy%l8af;THlCxZsvk(n%vnnJQKmBscO5ZO zW;xGjbmD32P1{%tx*g$daq_8&9odu4Qy0LbqE=&;RP_*@Y#suvDqbr3Fu_w0#*@Ro zNxtz5_InO@`y`*aW4_)nxEsb+OUD)<6-w*QKMKTDgO3Ole^+xM5D293lcB@e#Ky_0z1W zFF+m3SGWyYK`iWgG#(Vyh@`M7Sc(8_O;gMqF%q(&eBPONL_6Z$atBTcY>g$Z&CcsM zvs1NWP0E2wIlq|SO+{a41PIx!=1UXM>q>pI|0P2Yr@~AyZ|;$fF4nlh%1~7}_J8GP zbvvAv?ST8KUl3cLv}f-^hl5eKaqGoKJok(Xstoxm7kP%(-YR+@07a9Pvv(NJ; z8!S84b@HNAc~eW%qS>zZWRwHrM;IScWf`p0Hjrj!b|JK7oX}|#dd{}wP;ZXV`n7%s zrK}mKwGS93%n5_Lc|{%w@(*=fgX{m*LgUG7q}5l2Ve?JXnS+1&+m_;iLXq!S!EQZAnWNN|W$1gPIj`THwOiAbwM*?0Ytd~sIOpSr2g+HwvV*_hOs{GM-Kl)KV|ii_ z9FSjzirbC=4yzM^xzsgTddP48FdQff+ozFsz`E-|$#4sFmfV_<`-I$!kv(ZQr6oT3 z_!9Na6e(mtLF!(I8w_XqP!l=8_rt(7^P~5~?VQNZj;1rp>*a&J>0WoD0qdx9S|@`K zZulk3kFsHc&b~$A)K|V$?|$b)_vx=mfs^i?IS|VV~@v8 zWjIx`Lq;R#0RyAtci@FnD08t)PFMbj;qPkbh|c5RP>okb9bv#0JDJ!3bxceZG)OrO zdTIALcMc}i;$%UVT_Su|UJ ziB)p909)(Rtg0-Y)lmHb@CI>;86klW;AJiWYA3w+{SLXtt6qk_7pEa8jrLx7)?Qlt zD>NZtvE;#Di@IMLg z{-s#RvOw&Qo=#_+L}>?LG2{JZTyYC8TPvvRfp+(@)7^g$ZlJahrP+7h%89+L5l#EG&kei8ku#AfG417F^5rQE2`ab` zh<}({O1qvltOG^4g1kbFP92;xC2`kcFL?5WT;v<-0Gme zTw9q1UA-egeUn+E7=_VFPk92<7b5FEYK=~;Tn3N4|7y$T;4K9@bH>2}GgGv?=@neV z+C_SXMY10sbsf=C4VmlSHzBunDKBK!PmMaityx=$>ixWqS2Fh4j~kgi@c3YSrRYGh zZ8bWF7~QKLCUmb&vIknbNXro-D zGvp^=qcP;u$%IAm0ylssn(c=l7W~!On+)gm7|1S!O3d^N(1u?)-DM9L+$}xFo)lX( zWZgs>X0?qXGF{OhhWOFjx}Sd&H-6<^8xoV*v4Ov5o@2I*JK7 zo=#K-;9O)5jz=Ew+Xn#&+vvJ&h@Yzvw&@GQ)cSy@QyLhpS=^AZ;EyP@tAxe+wGF>( zn#lVt(n)VK&nHqbF8a^dC9LjM>iq~dyy2}jh6u>DAp??nw@-vK3skv^TL9Oq2gs@o zUfjp(+yGjX$@_}&P@kwo-p^C@J-$)X>}Q2N#X6Z&=#!tzDVwc3%Bt1E$wAV}v`f9& za4S3~Pla4{iNj80FBX`!-4l8ka;W1_Vc3i%uGr&1rCB;XD>p@$g05Mx_H3J*+wTg3 ze?x`8%$086IqYAs)vs_*t$wF8;J7{|`?^9=r|jLZfZSr(VxzO0#S;H)bhfhlgInZ& zuZcKo!a4~5iuLmMg;KN@YCG|aw7iooW!nzbvJEa7zXAAt%`6JuE{OSuzSM5z{b`$Vh`WHSiA!iYb3`Bd+VkcOy&Uc=9q@ zhLE0%QXDVxp$)wr`%iM9Z?Z3e)K0!ie)m$8U}B&34s|L$Z9_4|p~H;CX>_z;b*`$= z+& zN^nCcz=#v)XO|an%rG3$k300m6SuAOoif?%6|rD;d8L5B=xTH!L~}#X(pZ(uz`QWc zVy;Ddc3Z;s&`#Ot%Iy=4leRIxFTPrMGhRsRz`^I}T>J{5TSf<$qYrz$8QYHdE$<#y z%7}ZlN5tm7=c6w`R8KxSCp3#hW9|4Tj|QI6C#F9B$@qEY+Xq39gNd*KH)k#Zt~cIr z%5?GOoWYH)wxp4l@wrG{z=my+LBUylZ4*RMf?+)nx<(UY$gI(N}c7i zo6Mbz9C1x(jn89t`c4@P{&s|+ye|CNL^b>HL3>JW_Id=HQV+o%=9T?rnZIU4R%2>$ z3HvX)-h^3VL!Z3|pJ=#hJBpszr*hpgl%{lq^8I5zR=Hnz7AsV#kA}$PXXN!XtCgLS zD(hj(5G1tS&SS~;wxFS>FF~?Dl%lP}0DgJJ`?9eXSA$Ke0v1^oYp!j>oym zdqndsoChj^uytZNs_&AT1aQr=0El3zORG-YXJ`=gy!PuUHb#oN)DRwc#k?ddRFcCm z56!oj7||Uv`3R6eBHMas1Tqce{H$Un5xnL#>V&k|&+q$pc$k zV&a-5L4K;aCvV*OG0^~T3Ik%BC_$hr%FAFW+Qv};_KKgd4e+;B zX}9<=>M^^fvY7OcyQAxZi=UtB=c+tw2}S_if&J zks?>RhhYYV4Z*5N+?1&YY#CeV9iEB1{bW)BdnGl(n|{sgp2dCpsh5J2lvbAAKQ#YAFO~Y-w z#>-yRw)vTvF4-@cE8!8#0ffnHQcXEuNxovDS^;-SM7xE5$g0M}k+k@N`_Y${Kc=aj z&b|6^?r#8jCof609O$ruvo%#sO8G4MS-Z3+BGYqC3_M3Y4hy49=^M6iqd~CN3LD2% zYb5l^ce4kJzeB(TPvCNY83K;KCe5XyX8m!xAAz!(4fTUzkA%O$%48o+=&Z2XRU^j9 zpeL-6XMvEvr5p!y*bqUJ=_75q%%I;dGaeB+!-3VIWymYDwrA$~M~OP0Gxn{*MKq&6 z42t?|UOXB)GPrdfc~&z{ZiAi8C;)%HczRjA@QIdQV-PVZhg%Zv(_Q``w5$B-ZC{~t zX~3zH1L?G&$}<=p`SoMujCm?`s^>PI3v7;MzFfbULmyH35*isk{Nzj6z!RxARh%^h z$)}6hflQ4qg6lRe=*bNFIUkMz1`cuKM(f_!qCR?Pqy%>%$8%7l$18T6$7_&_KggO~ zVSik$<$TpA`h;z=LS08pJUzn=g>?4j?SQrtEc=kVHKlK#=7eM?)10N61Wq&3?Z&Lo zep23-4vAdEm_#KrBwgklf>lZPG9k#VfTqI5CXsjvMl1MZ=3mYZ2J5ZJT=x;0c-?lR zD3rL8at(#^QyYU?6DW2HMlyaCux>h>!f0DVv)-Oi>+AOqNkTZ#AQnK21_P0BFf4M( z8plajp-M>N+((!?Bm!vVQ5b3iH|nJJhBOX6Qd5W#MAIDHF@Z3W_Uje*gn%MDgw?tmCOTtQoiB@y1eT z>m(3h=pOZS1fV=#Y*S?QQNiy)$>D8avf6jL7K;tU<|Su&mYu&lBPTy8#$;?3sC;?= z`nX(9koXq$j6${i3AmyIR(hI%s-F_qO!~UlX#aFP{ z1U^50lm|)%&i_78auFO=7SppJTB3RIcb&nVP@_KUU7yxJ#zyKFMD-QwPiTC$ybtib zy3MG@VV{{zTwPF47(TJ!P7kXRc7krAH8FI5aSv#-&~3P%lMbxt5SOz==)X!Vx49{Y z(eDhQ+L-S{AbJOrc9$rjU0phegwV4aFHYTe>^eE&;ZFi$~SLi&Z_vqM;4F`q|SQy`WmJjpGlNdbS0gPb*c;q$989CJMm| z$13Bb{6oW>nV%|Mr-)&anFVikPBJWWghh|r^F$tY*KN65a2)@v|3n_N);PgnURLQL zgNnYRtP`8Q#{N`vuz4EyYvx@CQvU=3F%`0Jm-S*otoFmRd&BLxo)@gpS|5RL-22Y| zXdjvSKva48Tkpj;i&<=+=~t_W?1Fv!q&O(?bY=BmTsik6++dc2orB(58f99n{Q8}L z4ptj`C#xo}*lt)I`sbc z0DjIL?tv}4{bjA|Waov)vLwB+9GtZ}xXcf~dM>AjeJd7EbHw)k`#eJoLS3`x7X!z< zRLq@#3PcF@RL{1=7@T-XdqA6xUZgZ)Z^Lq%?aJ>a5SM!77fpzyXxAz=8Zn5Ho1% zHGD*XnPZL##%-GynLh41f@sSG;JZLhg}PfGKxXq^3x`fCK`B10~w6>lJ zBZuCxa+XBt+k&2&S&GybRDAA_Jz>LKBvWmA&GyF7xMusF02ca=8KDZH%YbW@83JP^)90FW7gy)zTM49MUMU705!d27HMSY^ z-Q24pSxE~)+cdzJG{-7!@=vRHmx^0|$V7d32KuXG>^$YnT*5zOE*rIS%`RYDqk2nC zYxugIN!ujbNU?|fhv%?lAD(ROk*S$m?%ZUi_4KjnX>_ysLg;%{+pA*w%iBOVe=Z-pG53$&?~9#EhtBCEi?sc!n;Z67yj=?S z6M@=I*^*MxsIN#WOas+>XV74IbdgWNYwwARDVck0$g=rm`Yl4b`eDcCZt{}$+pJeE z1uEd`2WSaF#ZNQsk>rOUF4wZ;Y5nT=T+0rjSS9@8jKoVwlg(ks*5kLf7z*0<(&^_> zE0q*~=nB6)D|o}ZlpLHk`0g;%Pp$`Tm3i(u*SV?-tnx- z!EqqoBY89XM1u5Ptn*WM5W7_5!(B=romNb6@d>_+y3K)skNkZTDwJu!^%6nEMgLjX zK1nS*!#C8C`CWGw3$@35?4WCI|7_KVF5@@?2EsFl$6s@myOc%lV9mBUoZh6%MGQ(}DJ{QVsn%2tkMNmm)ct-rP!-F2$hIsa1zu zz`TdB(%S@7`aa!yGtTEo3tIBj)2Pv?W$^owl}NT&)Tepz-EKykL!Ckp6-DXeQQU*K zDCaI@;0Zyp$;O<;+hXmH9Z5G7>p$`vwhn3;tX^&10qb8Y!Cy17DC_7@VNR8}x>iN+ zY_3-8ZRzPyi~YU&5kHsSvGw2Gd^wuw*qSd&d(ag@GH}L1Z5tU9-Z`xpHDGaxb0pjl z8-n6LWbA0$AkABTQhDGgLEu&~9zm8G;;@mSx7K{lHA%nU({sl-eVgt166g6p6gp%Y z$e8%rMCgUK|4^r`j$2PS$$)1Yc$uaC3Cd3OO{2i*1z}M?PJM3`v~8b#2!_UTMghz8 zk)3hNirG9|=*3XN;WUm?0lKfxbshfMH?LQdJ)sblE^_Yah$%kzNDulC^2@vL(~f_# zlj#aJa9^Mue~W<3+r)H-{16^3Y_JT(Ap(E7PC`A2VUYNE9Qe2z2mXvC3v~^On-s=& z@Z!MEiNIRFm11T